diff --git a/node_modules/.bin/errno b/node_modules/.bin/errno deleted file mode 120000 index 5a98e53..0000000 --- a/node_modules/.bin/errno +++ /dev/null @@ -1 +0,0 @@ -../errno/cli.js \ No newline at end of file diff --git a/node_modules/.bin/har-validator b/node_modules/.bin/har-validator deleted file mode 120000 index c6ec163..0000000 --- a/node_modules/.bin/har-validator +++ /dev/null @@ -1 +0,0 @@ -../har-validator/bin/har-validator \ No newline at end of file diff --git a/node_modules/.bin/rlp b/node_modules/.bin/rlp deleted file mode 120000 index 34a38ee..0000000 --- a/node_modules/.bin/rlp +++ /dev/null @@ -1 +0,0 @@ -../rlp/bin/rlp \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver deleted file mode 120000 index 317eb29..0000000 --- a/node_modules/.bin/semver +++ /dev/null @@ -1 +0,0 @@ -../semver/bin/semver \ No newline at end of file diff --git a/node_modules/.bin/sha.js b/node_modules/.bin/sha.js deleted file mode 120000 index 3c76105..0000000 --- a/node_modules/.bin/sha.js +++ /dev/null @@ -1 +0,0 @@ -../sha.js/bin.js \ No newline at end of file diff --git a/node_modules/.bin/shjs b/node_modules/.bin/shjs deleted file mode 120000 index a044997..0000000 --- a/node_modules/.bin/shjs +++ /dev/null @@ -1 +0,0 @@ -../shelljs/bin/shjs \ No newline at end of file diff --git a/node_modules/.bin/solcjs b/node_modules/.bin/solcjs deleted file mode 120000 index ad8cdb6..0000000 --- a/node_modules/.bin/solcjs +++ /dev/null @@ -1 +0,0 @@ -../solc/solcjs \ No newline at end of file diff --git a/node_modules/.bin/sshpk-conv b/node_modules/.bin/sshpk-conv deleted file mode 120000 index a2a295c..0000000 --- a/node_modules/.bin/sshpk-conv +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-conv \ No newline at end of file diff --git a/node_modules/.bin/sshpk-sign b/node_modules/.bin/sshpk-sign deleted file mode 120000 index 766b9b3..0000000 --- a/node_modules/.bin/sshpk-sign +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-sign \ No newline at end of file diff --git a/node_modules/.bin/sshpk-verify b/node_modules/.bin/sshpk-verify deleted file mode 120000 index bfd7e3a..0000000 --- a/node_modules/.bin/sshpk-verify +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-verify \ No newline at end of file diff --git a/node_modules/.bin/tape b/node_modules/.bin/tape deleted file mode 120000 index dc4bc23..0000000 --- a/node_modules/.bin/tape +++ /dev/null @@ -1 +0,0 @@ -../tape/bin/tape \ No newline at end of file diff --git a/node_modules/.bin/testrpc b/node_modules/.bin/testrpc deleted file mode 120000 index aef2f33..0000000 --- a/node_modules/.bin/testrpc +++ /dev/null @@ -1 +0,0 @@ -../ethereumjs-testrpc/bin/testrpc \ No newline at end of file diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid deleted file mode 120000 index 80eb14a..0000000 --- a/node_modules/.bin/uuid +++ /dev/null @@ -1 +0,0 @@ -../node-uuid/bin/uuid \ No newline at end of file diff --git a/node_modules/.bin/window-size b/node_modules/.bin/window-size deleted file mode 120000 index e84c8ec..0000000 --- a/node_modules/.bin/window-size +++ /dev/null @@ -1 +0,0 @@ -../window-size/cli.js \ No newline at end of file diff --git a/node_modules/abstract-leveldown/.jshintrc b/node_modules/abstract-leveldown/.jshintrc deleted file mode 100644 index ba4514a..0000000 --- a/node_modules/abstract-leveldown/.jshintrc +++ /dev/null @@ -1,60 +0,0 @@ -{ - "predef": [ ] - , "bitwise": false - , "camelcase": false - , "curly": false - , "eqeqeq": false - , "forin": false - , "immed": false - , "latedef": false - , "newcap": true - , "noarg": true - , "noempty": true - , "nonew": true - , "plusplus": false - , "quotmark": true - , "regexp": false - , "undef": true - , "unused": true - , "strict": false - , "trailing": true - , "maxlen": 120 - , "asi": true - , "boss": true - , "debug": true - , "eqnull": true - , "esnext": true - , "evil": true - , "expr": true - , "funcscope": false - , "globalstrict": false - , "iterator": false - , "lastsemic": true - , "laxbreak": true - , "laxcomma": true - , "loopfunc": true - , "multistr": false - , "onecase": false - , "proto": false - , "regexdash": false - , "scripturl": true - , "smarttabs": false - , "shadow": false - , "sub": true - , "supernew": false - , "validthis": true - , "browser": true - , "couch": false - , "devel": false - , "dojo": false - , "mootools": false - , "node": true - , "nonstandard": true - , "prototypejs": false - , "rhino": false - , "worker": true - , "wsh": false - , "nomen": false - , "onevar": true - , "passfail": false -} \ No newline at end of file diff --git a/node_modules/abstract-leveldown/.npmignore b/node_modules/abstract-leveldown/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/abstract-leveldown/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/abstract-leveldown/.travis.yml b/node_modules/abstract-leveldown/.travis.yml deleted file mode 100644 index 4fd069e..0000000 --- a/node_modules/abstract-leveldown/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: node_js -before_install: npm install npm -g -node_js: - - "0.8" - - "0.10" - - "0.12" - - "iojs" -branches: - only: - - master -notifications: - email: - - rod@vagg.org - - ralphtheninja@riseup.net diff --git a/node_modules/abstract-leveldown/CHANGELOG.md b/node_modules/abstract-leveldown/CHANGELOG.md deleted file mode 100644 index b61f7f9..0000000 --- a/node_modules/abstract-leveldown/CHANGELOG.md +++ /dev/null @@ -1,89 +0,0 @@ -### 2.3.1 - May 18 2015 - - * [[`393c781629`](https://github.com/level/abstract-leveldown/commit/393c781629)] - document isLevelDown() (Lars-Magnus Skog) - * [[`fd899c49b9`](https://github.com/level/abstract-leveldown/commit/fd899c49b9)] - link to level/community (Lars-Magnus Skog) - -### 2.3.0 - May 18 2015 - - * [[`9a976428e2`](https://github.com/level/abstract-leveldown/commit/9a976428e2)] - export from index.js and factor out into is-leveldown.js (Lars-Magnus Skog) - * [[`8051f8f16c`](https://github.com/level/abstract-leveldown/commit/8051f8f16c)] - add isLevelDOWN() f -unction (Lars-Magnus Skog) - -### 2.2.2 - May 13 2015 - - * [[`4ff0a9bfbb`](https://github.com/level/abstract-leveldown/commit/4ff0a9bfbb)] - ***Revert*** "Merge pull request #60 from ralphtheninja/empty-location" (Julian Gruber) - * [[`fab11e9e3b`](https://github.com/level/abstract-leveldown/commit/fab11e9e3b)] - use t.equal instead of t.ok(a === b) (Julian Gruber) - -### 2.2.1 - May 12 2015 - - * [[`f5051090e4`](https://github.com/level/abstract-leveldown/commit/f5051090e4)] - merge location string checks into one if-statement (Lars-Magnus Skog) - * [[`cd362b2b9f`](https://github.com/level/abstract-leveldown/commit/cd362b2b9f)] - empty location string throws (Lars-Magnus Skog) - * [[`e6d1cb80ea`](https://github.com/level/abstract-leveldown/commit/e6d1cb80ea)] - .throws is different for tape (Lars-Magnus Skog) - * [[`a6f29b62fa`](https://github.com/level/abstract-leveldown/commit/a6f29b62fa)] - copy paste error gave wrong test description (Lars-Magnus Skog) - -### 2.2.0 - May 10 2015 - - * [[`aa867b3760`](https://github.com/level/abstract-leveldown/commit/aa867b3760)] - Merge pull request #58 from Level/add/put-sync (Julian Gruber) - * [[`234de997bb`](https://github.com/level/abstract-leveldown/commit/234de997bb)] - add sync put tests (Julian Gruber) - -### 2.1.4 - Apr 28 2015 - - * [[`969116d00f`](https://github.com/level/abstract-leveldown/commit/969116d00f)] - use t.equal() with tape (Lars-Magnus Skog) - -### 2.1.3 - Apr 28 2015 - - * [[`68096e78cd`](https://github.com/level/abstract-leveldown/commit/68096e78cd)] - change from tap to tape (Lars-Magnus Skog) - -### 2.1.2 - Apr 27 2015 - - * [[`d79c060c9d`](https://github.com/level/abstract-leveldown/commit/d79c060c9d)] - convert buffer to string so we can compare (Lars-Magnus Skog) - -### 2.1.1 - Apr 27 2015 - - * [[`3881fc4290`](https://github.com/level/abstract-leveldown/commit/3881fc4290)] - **travis**: update npm so 0.8 works, add 0.12 and iojs (Lars-Magnus Skog) - * [[`9f451e8f74`](https://github.com/level/abstract-leveldown/commit/9f451e8f74)] - rvagg/node- -> level/ (Lars-Magnus Skog) - * [[`ecd41a72db`](https://github.com/level/abstract-leveldown/commit/ecd41a72db)] - fix typo (Hao-kang Den) - * [[`20e91fd234`](https://github.com/level/abstract-leveldown/commit/20e91fd234)] - update logo and copyright (Lars-Magnus Skog) - * [[`6ccf134874`](https://github.com/level/abstract-leveldown/commit/6ccf134874)] - added @watson to package.json (Rod Vagg) - -### 2.1.0 - Nov 9 2014 - - * [[`7451cd15e6`](https://github.com/level/abstract-leveldown/commit/7451cd15e6)] - added @watson (Rod Vagg) - * [[`f4a3346da7`](https://github.com/level/abstract-leveldown/commit/f4a3346da7)] - Use `error` test function when testing for errors (Thomas Watson Steen) - * [[`24668c50e0`](https://github.com/level/abstract-leveldown/commit/24668c50e0)] - Don't fail if no value is returned by _get (Thomas Watson Steen) - * [[`865ed9e777`](https://github.com/level/abstract-leveldown/commit/865ed9e777)] - Use `setTimeout` instead of `setImmediate`. (Alan Gutierrez) - * [[`9e9069faed`](https://github.com/level/abstract-leveldown/commit/9e9069faed)] - 2.0.3 (Rod Vagg) - -### 2.0.3 - Oct 2 2014 - - * [[`78052c53eb`](https://github.com/level/abstract-leveldown/commit/78052c53eb)] - add test for atomic batch operations (Calvin Metcalf) - -### 2.0.1 - Sep 1 2014 - - * [[`a0b36f6a18`](https://github.com/level/abstract-leveldown/commit/a0b36f6a18)] - Remove default options that's too LevelDOWN specific (Thomas Watson Steen) - * [[`1d97993d0b`](https://github.com/level/abstract-leveldown/commit/1d97993d0b)] - Allow boolean options to be falsy/truthy (Thomas Watson Steen) - * [[`fb3cf56da5`](https://github.com/level/abstract-leveldown/commit/fb3cf56da5)] - Set defaults for open, get, put, del and batch options (Thomas Watson Steen) - * [[`5c2a629e2b`](https://github.com/level/abstract-leveldown/commit/5c2a629e2b)] - Update pattern for setting default options for the iterator (Thomas Watson Steen) - -### 2.0.0 - Aug 26 2014 - * Lots of stuff between 0.11.1 and now, omitted updating changelog - * Switch to allowing writes of empty values: null, undefined, '', [] - -### 0.11.1 - Nov 15 2013 - * Adjust approximate-size-test.js to account for snappy compression - -### 0.11.0 - Oct 14 2013 - * Introduce _setupIteratorOptions() method to fix options object prior to _iterator() call; makes working with gt/gte/lt/lte options a little easier (@rvagg) - -### 0.10.2 - Sep 6 2013 - - * Refactor duplicated versions of isTypedArray into util.js (@rvagg) - * Refactor duplicated versions of 'NotFound' checks into util.js, fixed too-strict version in get-test.js (@rvagg) - -### 0.10.1 - Aug 29 2013 - - * Relax check for 'Not Found: ' in error message to be case insensitive in get-test.js (@rvagg) - -### 0.10.0 - Aug 19 2013 - - * Added test for gt, gte, lt, lte ranges (@dominictarr) diff --git a/node_modules/abstract-leveldown/LICENSE.md b/node_modules/abstract-leveldown/LICENSE.md deleted file mode 100644 index 29b95e3..0000000 --- a/node_modules/abstract-leveldown/LICENSE.md +++ /dev/null @@ -1,11 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2014 Rod Vagg ---------------------------- - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/abstract-leveldown/README.md b/node_modules/abstract-leveldown/README.md deleted file mode 100644 index e54847e..0000000 --- a/node_modules/abstract-leveldown/README.md +++ /dev/null @@ -1,145 +0,0 @@ -# Abstract LevelDOWN [![Build Status](https://secure.travis-ci.org/Level/abstract-leveldown.png)](http://travis-ci.org/Level/abstract-leveldown) - -LevelDB Logo - -[![NPM](https://nodei.co/npm/abstract-leveldown.png?downloads=true&downloadRank=true)](https://nodei.co/npm/abstract-leveldown/) -[![NPM](https://nodei.co/npm-dl/abstract-leveldown.png?months=6&height=3)](https://nodei.co/npm/abstract-leveldown/) - -An abstract prototype matching the **[LevelDOWN](https://github.com/level/leveldown/)** API. Useful for extending **[LevelUP](https://github.com/level/levelup)** functionality by providing a replacement to LevelDOWN. - -As of version 0.7, LevelUP allows you to pass a `'db'` option when you create a new instance. This will override the default LevelDOWN store with a LevelDOWN API compatible object. - -**Abstract LevelDOWN** provides a simple, operational *noop* base prototype that's ready for extending. By default, all operations have sensible "noops" (operations that essentially do nothing). For example, simple operations such as `.open(callback)` and `.close(callback)` will simply invoke the callback (on a *next tick*). More complex operations perform sensible actions, for example: `.get(key, callback)` will always return a `'NotFound'` `Error` on the callback. - -You add functionality by implementing the underscore versions of the operations. For example, to implement a `put()` operation you add a `_put()` method to your object. Each of these underscore methods override the default *noop* operations and are always provided with **consistent arguments**, regardless of what is passed in by the client. - -Additionally, all methods provide argument checking and sensible defaults for optional arguments. All bad-argument errors are compatible with LevelDOWN (they pass the LevelDOWN method arguments tests). For example, if you call `.open()` without a callback argument you'll get an `Error('open() requires a callback argument')`. Where optional arguments are involved, your underscore methods will receive sensible defaults. A `.get(key, callback)` will pass through to a `._get(key, options, callback)` where the `options` argument is an empty object. - -## Example - -A simplistic in-memory LevelDOWN replacement - -```js -var util = require('util') - , AbstractLevelDOWN = require('./').AbstractLevelDOWN - -// constructor, passes through the 'location' argument to the AbstractLevelDOWN constructor -function FakeLevelDOWN (location) { - AbstractLevelDOWN.call(this, location) -} - -// our new prototype inherits from AbstractLevelDOWN -util.inherits(FakeLevelDOWN, AbstractLevelDOWN) - -// implement some methods - -FakeLevelDOWN.prototype._open = function (options, callback) { - // initialise a memory storage object - this._store = {} - // optional use of nextTick to be a nice async citizen - process.nextTick(function () { callback(null, this) }.bind(this)) -} - -FakeLevelDOWN.prototype._put = function (key, value, options, callback) { - key = '_' + key // safety, to avoid key='__proto__'-type skullduggery - this._store[key] = value - process.nextTick(callback) -} - -FakeLevelDOWN.prototype._get = function (key, options, callback) { - var value = this._store['_' + key] - if (value === undefined) { - // 'NotFound' error, consistent with LevelDOWN API - return process.nextTick(function () { callback(new Error('NotFound')) }) - } - process.nextTick(function () { - callback(null, value) - }) -} - -FakeLevelDOWN.prototype._del = function (key, options, callback) { - delete this._store['_' + key] - process.nextTick(callback) -} - -// now use it in LevelUP - -var levelup = require('levelup') - -var db = levelup('/who/cares/', { - // the 'db' option replaces LevelDOWN - db: function (location) { return new FakeLevelDOWN(location) } -}) - -db.put('foo', 'bar', function (err) { - if (err) throw err - db.get('foo', function (err, value) { - if (err) throw err - console.log('Got foo =', value) - }) -}) -``` - -See [MemDOWN](https://github.com/rvagg/memdown/) if you are looking for a complete in-memory replacement for LevelDOWN. - -## Extensible API - -Remember that each of these methods, if you implement them, will receive exactly the number and order of arguments described. Optional arguments will be converted to sensible defaults. - -### AbstractLevelDOWN(location) -### AbstractLevelDOWN#_open(options, callback) -### AbstractLevelDOWN#_close(callback) -### AbstractLevelDOWN#_get(key, options, callback) -### AbstractLevelDOWN#_put(key, value, options, callback) -### AbstractLevelDOWN#_del(key, options, callback) -### AbstractLevelDOWN#_batch(array, options, callback) - -If `batch()` is called without argument or with only an options object then it should return a `Batch` object with chainable methods. Otherwise it will invoke a classic batch operation. - -### AbstractLevelDOWN#_chainedBatch() - -By default an `batch()` operation without argument returns a blank `AbstractChainedBatch` object. The prototype is available on the main exports for you to extend. If you want to implement chainable batch operations then you should extend the `AbstractChaindBatch` and return your object in the `_chainedBatch()` method. - -### AbstractLevelDOWN#_approximateSize(start, end, callback) -### AbstractLevelDOWN#_iterator(options) - -By default an `iterator()` operation returns a blank `AbstractIterator` object. The prototype is available on the main exports for you to extend. If you want to implement iterator operations then you should extend the `AbstractIterator` and return your object in the `_iterator(options)` method. - -`AbstractIterator` implements the basic state management found in LevelDOWN. It keeps track of when a `next()` is in progress and when an `end()` has been called so it doesn't allow concurrent `next()` calls, it does it allow `end()` while a `next()` is in progress and it doesn't allow either `next()` or `end()` after `end()` has been called. - -### AbstractIterator(db) - -Provided with the current instance of `AbstractLevelDOWN` by default. - -### AbstractIterator#_next(callback) -### AbstractIterator#_end(callback) - -### AbstractChainedBatch -Provided with the current instance of `AbstractLevelDOWN` by default. - -### AbstractChainedBatch#_put(key, value) -### AbstractChainedBatch#_del(key) -### AbstractChainedBatch#_clear() -### AbstractChainedBatch#_write(options, callback) - -### isLevelDown(db) - -Returns `true` if `db` has the same public api as `AbstractLevelDOWN`, otherwise `false`. This is a utility function and it's not part of the extensible api. - - -Contributing ------------- - -AbstractLevelDOWN is an **OPEN Open Source Project**. This means that: - -> Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. - -See the [contribution guide](https://github.com/Level/community/blob/master/CONTRIBUTING.md) for more details. - - -License & Copyright -------------------- - -Copyright © 2012-2015 **AbstractLevelDOWN** [contributors](https://github.com/level/community#contributors). - -**AbstractLevelDOWN** is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included `LICENSE.md` file for more details. diff --git a/node_modules/abstract-leveldown/abstract-chained-batch.js b/node_modules/abstract-leveldown/abstract-chained-batch.js deleted file mode 100644 index b46278d..0000000 --- a/node_modules/abstract-leveldown/abstract-chained-batch.js +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (c) 2013 Rod Vagg, MIT License */ - -function AbstractChainedBatch (db) { - this._db = db - this._operations = [] - this._written = false -} - -AbstractChainedBatch.prototype._checkWritten = function () { - if (this._written) - throw new Error('write() already called on this batch') -} - -AbstractChainedBatch.prototype.put = function (key, value) { - this._checkWritten() - - var err = this._db._checkKey(key, 'key', this._db._isBuffer) - if (err) - throw err - - if (!this._db._isBuffer(key)) key = String(key) - if (!this._db._isBuffer(value)) value = String(value) - - if (typeof this._put == 'function' ) - this._put(key, value) - else - this._operations.push({ type: 'put', key: key, value: value }) - - return this -} - -AbstractChainedBatch.prototype.del = function (key) { - this._checkWritten() - - var err = this._db._checkKey(key, 'key', this._db._isBuffer) - if (err) throw err - - if (!this._db._isBuffer(key)) key = String(key) - - if (typeof this._del == 'function' ) - this._del(key) - else - this._operations.push({ type: 'del', key: key }) - - return this -} - -AbstractChainedBatch.prototype.clear = function () { - this._checkWritten() - - this._operations = [] - - if (typeof this._clear == 'function' ) - this._clear() - - return this -} - -AbstractChainedBatch.prototype.write = function (options, callback) { - this._checkWritten() - - if (typeof options == 'function') - callback = options - if (typeof callback != 'function') - throw new Error('write() requires a callback argument') - if (typeof options != 'object') - options = {} - - this._written = true - - if (typeof this._write == 'function' ) - return this._write(callback) - - if (typeof this._db._batch == 'function') - return this._db._batch(this._operations, options, callback) - - process.nextTick(callback) -} - -module.exports = AbstractChainedBatch \ No newline at end of file diff --git a/node_modules/abstract-leveldown/abstract-iterator.js b/node_modules/abstract-leveldown/abstract-iterator.js deleted file mode 100644 index 04ed6a5..0000000 --- a/node_modules/abstract-leveldown/abstract-iterator.js +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2013 Rod Vagg, MIT License */ - -function AbstractIterator (db) { - this.db = db - this._ended = false - this._nexting = false -} - -AbstractIterator.prototype.next = function (callback) { - var self = this - - if (typeof callback != 'function') - throw new Error('next() requires a callback argument') - - if (self._ended) - return callback(new Error('cannot call next() after end()')) - if (self._nexting) - return callback(new Error('cannot call next() before previous next() has completed')) - - self._nexting = true - if (typeof self._next == 'function') { - return self._next(function () { - self._nexting = false - callback.apply(null, arguments) - }) - } - - process.nextTick(function () { - self._nexting = false - callback() - }) -} - -AbstractIterator.prototype.end = function (callback) { - if (typeof callback != 'function') - throw new Error('end() requires a callback argument') - - if (this._ended) - return callback(new Error('end() already called on iterator')) - - this._ended = true - - if (typeof this._end == 'function') - return this._end(callback) - - process.nextTick(callback) -} - -module.exports = AbstractIterator diff --git a/node_modules/abstract-leveldown/abstract-leveldown.js b/node_modules/abstract-leveldown/abstract-leveldown.js deleted file mode 100644 index fce3e2c..0000000 --- a/node_modules/abstract-leveldown/abstract-leveldown.js +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright (c) 2013 Rod Vagg, MIT License */ - -var xtend = require('xtend') - , AbstractIterator = require('./abstract-iterator') - , AbstractChainedBatch = require('./abstract-chained-batch') - -function AbstractLevelDOWN (location) { - if (!arguments.length || location === undefined) - throw new Error('constructor requires at least a location argument') - - if (typeof location != 'string') - throw new Error('constructor requires a location string argument') - - this.location = location - this.status = 'new' -} - -AbstractLevelDOWN.prototype.open = function (options, callback) { - var self = this - , oldStatus = this.status - - if (typeof options == 'function') - callback = options - - if (typeof callback != 'function') - throw new Error('open() requires a callback argument') - - if (typeof options != 'object') - options = {} - - options.createIfMissing = options.createIfMissing != false - options.errorIfExists = !!options.errorIfExists - - if (typeof this._open == 'function') { - this.status = 'opening' - this._open(options, function (err) { - if (err) { - self.status = oldStatus - return callback(err) - } - self.status = 'open' - callback() - }) - } else { - this.status = 'open' - process.nextTick(callback) - } -} - -AbstractLevelDOWN.prototype.close = function (callback) { - var self = this - , oldStatus = this.status - - if (typeof callback != 'function') - throw new Error('close() requires a callback argument') - - if (typeof this._close == 'function') { - this.status = 'closing' - this._close(function (err) { - if (err) { - self.status = oldStatus - return callback(err) - } - self.status = 'closed' - callback() - }) - } else { - this.status = 'closed' - process.nextTick(callback) - } -} - -AbstractLevelDOWN.prototype.get = function (key, options, callback) { - var err - - if (typeof options == 'function') - callback = options - - if (typeof callback != 'function') - throw new Error('get() requires a callback argument') - - if (err = this._checkKey(key, 'key', this._isBuffer)) - return callback(err) - - if (!this._isBuffer(key)) - key = String(key) - - if (typeof options != 'object') - options = {} - - options.asBuffer = options.asBuffer != false - - if (typeof this._get == 'function') - return this._get(key, options, callback) - - process.nextTick(function () { callback(new Error('NotFound')) }) -} - -AbstractLevelDOWN.prototype.put = function (key, value, options, callback) { - var err - - if (typeof options == 'function') - callback = options - - if (typeof callback != 'function') - throw new Error('put() requires a callback argument') - - if (err = this._checkKey(key, 'key', this._isBuffer)) - return callback(err) - - if (!this._isBuffer(key)) - key = String(key) - - // coerce value to string in node, don't touch it in browser - // (indexeddb can store any JS type) - if (value != null && !this._isBuffer(value) && !process.browser) - value = String(value) - - if (typeof options != 'object') - options = {} - - if (typeof this._put == 'function') - return this._put(key, value, options, callback) - - process.nextTick(callback) -} - -AbstractLevelDOWN.prototype.del = function (key, options, callback) { - var err - - if (typeof options == 'function') - callback = options - - if (typeof callback != 'function') - throw new Error('del() requires a callback argument') - - if (err = this._checkKey(key, 'key', this._isBuffer)) - return callback(err) - - if (!this._isBuffer(key)) - key = String(key) - - if (typeof options != 'object') - options = {} - - if (typeof this._del == 'function') - return this._del(key, options, callback) - - process.nextTick(callback) -} - -AbstractLevelDOWN.prototype.batch = function (array, options, callback) { - if (!arguments.length) - return this._chainedBatch() - - if (typeof options == 'function') - callback = options - - if (typeof array == 'function') - callback = array - - if (typeof callback != 'function') - throw new Error('batch(array) requires a callback argument') - - if (!Array.isArray(array)) - return callback(new Error('batch(array) requires an array argument')) - - if (!options || typeof options != 'object') - options = {} - - var i = 0 - , l = array.length - , e - , err - - for (; i < l; i++) { - e = array[i] - if (typeof e != 'object') - continue - - if (err = this._checkKey(e.type, 'type', this._isBuffer)) - return callback(err) - - if (err = this._checkKey(e.key, 'key', this._isBuffer)) - return callback(err) - } - - if (typeof this._batch == 'function') - return this._batch(array, options, callback) - - process.nextTick(callback) -} - -//TODO: remove from here, not a necessary primitive -AbstractLevelDOWN.prototype.approximateSize = function (start, end, callback) { - if ( start == null - || end == null - || typeof start == 'function' - || typeof end == 'function') { - throw new Error('approximateSize() requires valid `start`, `end` and `callback` arguments') - } - - if (typeof callback != 'function') - throw new Error('approximateSize() requires a callback argument') - - if (!this._isBuffer(start)) - start = String(start) - - if (!this._isBuffer(end)) - end = String(end) - - if (typeof this._approximateSize == 'function') - return this._approximateSize(start, end, callback) - - process.nextTick(function () { - callback(null, 0) - }) -} - -AbstractLevelDOWN.prototype._setupIteratorOptions = function (options) { - var self = this - - options = xtend(options) - - ;[ 'start', 'end', 'gt', 'gte', 'lt', 'lte' ].forEach(function (o) { - if (options[o] && self._isBuffer(options[o]) && options[o].length === 0) - delete options[o] - }) - - options.reverse = !!options.reverse - options.keys = options.keys != false - options.values = options.values != false - options.limit = 'limit' in options ? options.limit : -1 - options.keyAsBuffer = options.keyAsBuffer != false - options.valueAsBuffer = options.valueAsBuffer != false - - return options -} - -AbstractLevelDOWN.prototype.iterator = function (options) { - if (typeof options != 'object') - options = {} - - options = this._setupIteratorOptions(options) - - if (typeof this._iterator == 'function') - return this._iterator(options) - - return new AbstractIterator(this) -} - -AbstractLevelDOWN.prototype._chainedBatch = function () { - return new AbstractChainedBatch(this) -} - -AbstractLevelDOWN.prototype._isBuffer = function (obj) { - return Buffer.isBuffer(obj) -} - -AbstractLevelDOWN.prototype._checkKey = function (obj, type) { - - if (obj === null || obj === undefined) - return new Error(type + ' cannot be `null` or `undefined`') - - if (this._isBuffer(obj)) { - if (obj.length === 0) - return new Error(type + ' cannot be an empty Buffer') - } else if (String(obj) === '') - return new Error(type + ' cannot be an empty String') -} - -module.exports = AbstractLevelDOWN diff --git a/node_modules/abstract-leveldown/abstract/approximate-size-test.js b/node_modules/abstract-leveldown/abstract/approximate-size-test.js deleted file mode 100644 index beb6369..0000000 --- a/node_modules/abstract-leveldown/abstract/approximate-size-test.js +++ /dev/null @@ -1,121 +0,0 @@ -var db - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -module.exports.args = function (test) { - test('test argument-less approximateSize() throws', function (t) { - t.throws( - db.approximateSize.bind(db) - , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' } - , 'no-arg approximateSize() throws' - ) - t.end() - }) - - test('test callback-less, 1-arg, approximateSize() throws', function (t) { - t.throws( - db.approximateSize.bind(db, 'foo') - , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' } - , 'callback-less, 1-arg approximateSize() throws' - ) - t.end() - }) - - test('test callback-less, 2-arg, approximateSize() throws', function (t) { - t.throws( - db.approximateSize.bind(db, 'foo', 'bar') - , { name: 'Error', message: 'approximateSize() requires a callback argument' } - , 'callback-less, 2-arg approximateSize() throws' - ) - t.end() - }) - - test('test callback-less, 3-arg, approximateSize() throws', function (t) { - t.throws( - db.approximateSize.bind(db, function () {}) - , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' } - , 'callback-only approximateSize() throws' - ) - t.end() - }) - - test('test callback-only approximateSize() throws', function (t) { - t.throws( - db.approximateSize.bind(db, function () {}) - , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' } - , 'callback-only approximateSize() throws' - ) - t.end() - }) - - test('test 1-arg + callback approximateSize() throws', function (t) { - t.throws( - db.approximateSize.bind(db, 'foo', function () {}) - , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' } - , '1-arg + callback approximateSize() throws' - ) - t.end() - }) -} - -module.exports.approximateSize = function (test) { - test('test approximateSize()', function (t) { - var data = Array.apply(null, Array(10000)).map(function () { - return 'aaaaaaaaaa' - }).join('') - - db.batch( - Array.apply(null, Array(10)).map(function (x, i) { - return { type: 'put', key: 'foo' + i, value: data } - }) - , function (err) { - t.error(err) - - // cycle open/close to ensure a pack to .sst - - db.close(function (err) { - t.error(err) - - db.open(function (err) { - t.error(err) - - db.approximateSize('!', '~', function (err, size) { - t.error(err) - - t.equal(typeof size, 'number') - t.ok( - size > 40000 // account for snappy compression - // original would be ~100000 - , 'size reports a reasonable amount (' + size + ')' - ) - - db.close(function (err) { - t.error(err) - t.end() - }) - }) - }) - }) - } - ) - }) -} - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(leveldown, test, testCommon) - module.exports.args(test) - module.exports.approximateSize(test) - module.exports.tearDown(test, testCommon) -} diff --git a/node_modules/abstract-leveldown/abstract/batch-test.js b/node_modules/abstract-leveldown/abstract/batch-test.js deleted file mode 100644 index a178dc1..0000000 --- a/node_modules/abstract-leveldown/abstract/batch-test.js +++ /dev/null @@ -1,196 +0,0 @@ -var db - , verifyNotFoundError = require('./util').verifyNotFoundError - , isTypedArray = require('./util').isTypedArray - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -module.exports.args = function (test) { - test('test callback-less, 2-arg, batch() throws', function (t) { - t.throws(db.batch.bind(db, 'foo', {}), 'callback-less, 2-arg batch() throws') - t.end() - }) - - test('test batch() with missing `value`', function (t) { - db.batch([{ type: 'put', key: 'foo1' }], function (err) { - t.error(err) - t.end() - }) - }) - - test('test batch() with null `value`', function (t) { - db.batch([{ type: 'put', key: 'foo1', value: null }], function (err) { - t.error(err) - t.end() - }) - }) - - test('test batch() with missing `key`', function (t) { - db.batch([{ type: 'put', value: 'foo1' }], function (err) { - t.ok(err, 'got error') - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - t.end() - }) - }) - - test('test batch() with null `key`', function (t) { - db.batch([{ type: 'put', key: null, value: 'foo1' }], function (err) { - t.ok(err, 'got error') - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - t.end() - }) - }) - - test('test batch() with missing `key` and `value`', function (t) { - db.batch([{ type: 'put' }], function (err) { - t.ok(err, 'got error') - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - t.end() - }) - }) - - test('test batch() with missing array', function (t) { - db.batch(function (err) { - t.ok(err, 'got error') - t.equal(err.message, 'batch(array) requires an array argument', 'correct error message') - t.end() - }) - }) - - test('test batch() with undefined array', function (t) { - db.batch(void 0, function (err) { - t.ok(err, 'got error') - t.equal(err.message, 'batch(array) requires an array argument', 'correct error message') - t.end() - }) - }) - - test('test batch() with null array', function (t) { - db.batch(null, function (err) { - t.ok(err, 'got error') - t.equal(err.message, 'batch(array) requires an array argument', 'correct error message') - t.end() - }) - }) - - test('test batch() with null options', function (t) { - db.batch([], null, function (err) { - t.error(err) - t.end() - }) - }) -} - -module.exports.batch = function (test) { - test('test batch() with empty array', function (t) { - db.batch([], function (err) { - t.error(err) - t.end() - }) - }) - - test('test simple batch()', function (t) { - db.batch([{ type: 'put', key: 'foo', value: 'bar' }], function (err) { - t.error(err) - - db.get('foo', function (err, value) { - t.error(err) - var result - if (isTypedArray(value)) { - result = String.fromCharCode.apply(null, new Uint16Array(value)) - } else { - t.ok(typeof Buffer != 'undefined' && value instanceof Buffer) - result = value.toString() - } - t.equal(result, 'bar') - t.end() - }) - }) - }) - - test('test multiple batch()', function (t) { - db.batch([ - { type: 'put', key: 'foobatch1', value: 'bar1' } - , { type: 'put', key: 'foobatch2', value: 'bar2' } - , { type: 'put', key: 'foobatch3', value: 'bar3' } - , { type: 'del', key: 'foobatch2' } - ], function (err) { - t.error(err) - - var r = 0 - , done = function () { - if (++r == 3) - t.end() - } - - db.get('foobatch1', function (err, value) { - t.error(err) - var result - if (isTypedArray(value)) { - result = String.fromCharCode.apply(null, new Uint16Array(value)) - } else { - t.ok(typeof Buffer != 'undefined' && value instanceof Buffer) - result = value.toString() - } - t.equal(result, 'bar1') - done() - }) - - db.get('foobatch2', function (err, value) { - t.ok(err, 'entry not found') - t.ok(typeof value == 'undefined', 'value is undefined') - t.ok(verifyNotFoundError(err), 'NotFound error') - done() - }) - - db.get('foobatch3', function (err, value) { - t.error(err) - var result - if (isTypedArray(value)) { - result = String.fromCharCode.apply(null, new Uint16Array(value)) - } else { - t.ok(typeof Buffer != 'undefined' && value instanceof Buffer) - result = value.toString() - } - t.equal(result, 'bar3') - done() - }) - }) - }) -} -module.exports.atomic = function (test) { - test('test multiple batch()', function (t) { - t.plan(3) - db.batch([ - { type: 'put', key: 'foobah1', value: 'bar1' } - , { type: 'put', value: 'bar2' } - , { type: 'put', key: 'foobah3', value: 'bar3' } - ], function (err) { - t.ok(err, 'should error') - db.get('foobah1', function (err) { - t.ok(err, 'should not be found') - }) - db.get('foobah3', function (err) { - t.ok(err, 'should not be found') - }) - }) - }) -} -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(leveldown, test, testCommon) - module.exports.args(test) - module.exports.batch(test) - module.exports.atomic(test) - module.exports.tearDown(test, testCommon) -} diff --git a/node_modules/abstract-leveldown/abstract/chained-batch-test.js b/node_modules/abstract-leveldown/abstract/chained-batch-test.js deleted file mode 100644 index d3a3223..0000000 --- a/node_modules/abstract-leveldown/abstract/chained-batch-test.js +++ /dev/null @@ -1,210 +0,0 @@ -var db - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -module.exports.args = function (test) { - test('test batch#put() with missing `value`', function (t) { - db.batch().put('foo1') - t.end() - }) - - test('test batch#put() with null `value`', function (t) { - db.batch().put('foo1', null) - t.end() - }) - - test('test batch#put() with missing `key`', function (t) { - try { - db.batch().put(undefined, 'foo1') - } catch (err) { - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#put() with null `key`', function (t) { - try { - db.batch().put(null, 'foo1') - } catch (err) { - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#put() with missing `key` and `value`', function (t) { - try { - db.batch().put() - } catch (err) { - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#del() with missing `key`', function (t) { - try { - db.batch().del() - } catch (err) { - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#del() with null `key`', function (t) { - try { - db.batch().del(null) - } catch (err) { - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#del() with null `key`', function (t) { - try { - db.batch().del(null) - } catch (err) { - t.equal(err.message, 'key cannot be `null` or `undefined`', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#clear() doesn\'t throw', function (t) { - db.batch().clear() - t.end() - }) - - test('test batch#write() with no callback', function (t) { - try { - db.batch().write() - } catch (err) { - t.equal(err.message, 'write() requires a callback argument', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#put() after write()', function (t) { - var batch = db.batch().put('foo', 'bar') - batch.write(function () {}) - try { - batch.put('boom', 'bang') - } catch (err) { - t.equal(err.message, 'write() already called on this batch', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#del() after write()', function (t) { - var batch = db.batch().put('foo', 'bar') - batch.write(function () {}) - try { - batch.del('foo') - } catch (err) { - t.equal(err.message, 'write() already called on this batch', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#clear() after write()', function (t) { - var batch = db.batch().put('foo', 'bar') - batch.write(function () {}) - try { - batch.clear() - } catch (err) { - t.equal(err.message, 'write() already called on this batch', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) - - test('test batch#write() after write()', function (t) { - var batch = db.batch().put('foo', 'bar') - batch.write(function () {}) - try { - batch.write(function (err) {}) - } catch (err) { - t.equal(err.message, 'write() already called on this batch', 'correct error message') - return t.end() - } - t.fail('should have thrown') - t.end() - }) -} - -module.exports.batch = function (test, testCommon) { - test('test basic batch', function (t) { - db.batch( - [ - { type: 'put', key: 'one', value: '1' } - , { type: 'put', key: 'two', value: '2' } - , { type: 'put', key: 'three', value: '3' } - ] - , function (err) { - t.error(err) - - db.batch() - .put('1', 'one') - .del('2', 'two') - .put('3', 'three') - .clear() - .put('one', 'I') - .put('two', 'II') - .del('three') - .put('foo', 'bar') - .write(function (err) { - t.error(err) - testCommon.collectEntries( - db.iterator({ keyAsBuffer: false, valueAsBuffer: false }) - , function (err, data) { - t.error(err) - t.equal(data.length, 3, 'correct number of entries') - var expected = [ - { key: 'foo', value: 'bar' } - , { key: 'one', value: 'I' } - , { key: 'two', value: 'II' } - ] - t.deepEqual(data, expected) - t.end() - } - ) - }) - } - ) - }) -} - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(leveldown, test, testCommon) - module.exports.args(test) - module.exports.batch(test, testCommon) - module.exports.tearDown(test, testCommon) -} \ No newline at end of file diff --git a/node_modules/abstract-leveldown/abstract/close-test.js b/node_modules/abstract-leveldown/abstract/close-test.js deleted file mode 100644 index 68873b1..0000000 --- a/node_modules/abstract-leveldown/abstract/close-test.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports.close = function (leveldown, test, testCommon) { - test('test close()', function (t) { - var db = leveldown(testCommon.location()) - - db.open(function (err) { - t.error(err) - t.throws( - db.close.bind(db) - , { name: 'Error', message: 'close() requires a callback argument' } - , 'no-arg close() throws' - ) - t.throws( - db.close.bind(db, 'foo') - , { name: 'Error', message: 'close() requires a callback argument' } - , 'non-callback close() throws' - ) - - db.close(function (err) { - t.error(err) - t.end() - }) - }) - }) -} \ No newline at end of file diff --git a/node_modules/abstract-leveldown/abstract/del-test.js b/node_modules/abstract-leveldown/abstract/del-test.js deleted file mode 100644 index c26b17f..0000000 --- a/node_modules/abstract-leveldown/abstract/del-test.js +++ /dev/null @@ -1,77 +0,0 @@ -var db - , verifyNotFoundError = require('./util').verifyNotFoundError - , isTypedArray = require('./util').isTypedArray - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -module.exports.args = function (test) { - test('test argument-less del() throws', function (t) { - t.throws( - db.del.bind(db) - , { name: 'Error', message: 'del() requires a callback argument' } - , 'no-arg del() throws' - ) - t.end() - }) - - test('test callback-less, 1-arg, del() throws', function (t) { - t.throws( - db.del.bind(db, 'foo') - , { name: 'Error', message: 'del() requires a callback argument' } - , 'callback-less, 1-arg del() throws' - ) - t.end() - }) - - test('test callback-less, 3-arg, del() throws', function (t) { - t.throws( - db.del.bind(db, 'foo', {}) - , { name: 'Error', message: 'del() requires a callback argument' } - , 'callback-less, 2-arg del() throws' - ) - t.end() - }) -} - -module.exports.del = function (test) { - test('test simple del()', function (t) { - db.put('foo', 'bar', function (err) { - t.error(err) - db.del('foo', function (err) { - t.error(err) - db.get('foo', function (err) { - t.ok(err, 'entry propertly deleted') - t.ok(typeof value == 'undefined', 'value is undefined') - t.ok(verifyNotFoundError(err), 'NotFound error') - t.end() - }) - }) - }) - }) - - test('test del on non-existent key', function (t) { - db.del('blargh', function (err) { - t.error(err) - t.end() - }) - }) -} - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(leveldown, test, testCommon) - module.exports.args(test) - module.exports.del(test) - module.exports.tearDown(test, testCommon) -} diff --git a/node_modules/abstract-leveldown/abstract/get-test.js b/node_modules/abstract-leveldown/abstract/get-test.js deleted file mode 100644 index df69c5d..0000000 --- a/node_modules/abstract-leveldown/abstract/get-test.js +++ /dev/null @@ -1,133 +0,0 @@ -var db - , verifyNotFoundError = require('./util').verifyNotFoundError - , isTypedArray = require('./util').isTypedArray - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -module.exports.args = function (test) { - test('test argument-less get() throws', function (t) { - t.throws( - db.get.bind(db) - , { name: 'Error', message: 'get() requires a callback argument' } - , 'no-arg get() throws' - ) - t.end() - }) - - test('test callback-less, 1-arg, get() throws', function (t) { - t.throws( - db.get.bind(db, 'foo') - , { name: 'Error', message: 'get() requires a callback argument' } - , 'callback-less, 1-arg get() throws' - ) - t.end() - }) - - test('test callback-less, 3-arg, get() throws', function (t) { - t.throws( - db.get.bind(db, 'foo', {}) - , { name: 'Error', message: 'get() requires a callback argument' } - , 'callback-less, 2-arg get() throws' - ) - t.end() - }) -} - -module.exports.get = function (test) { - test('test simple get()', function (t) { - db.put('foo', 'bar', function (err) { - t.error(err) - db.get('foo', function (err, value) { - t.error(err) - t.ok(typeof value !== 'string', 'should not be string by default') - - var result - if (isTypedArray(value)) { - result = String.fromCharCode.apply(null, new Uint16Array(value)) - } else { - t.ok(typeof Buffer != 'undefined' && value instanceof Buffer) - try { - result = value.toString() - } catch (e) { - t.error(e, 'should not throw when converting value to a string') - } - } - - t.equal(result, 'bar') - - db.get('foo', {}, function (err, value) { // same but with {} - t.error(err) - t.ok(typeof value !== 'string', 'should not be string by default') - - var result - if (isTypedArray(value)) { - result = String.fromCharCode.apply(null, new Uint16Array(value)) - } else { - t.ok(typeof Buffer != 'undefined' && value instanceof Buffer) - try { - result = value.toString() - } catch (e) { - t.error(e, 'should not throw when converting value to a string') - } - } - - t.equal(result, 'bar') - - db.get('foo', { asBuffer: false }, function (err, value) { - t.error(err) - t.ok(typeof value === 'string', 'should be string if not buffer') - t.equal(value, 'bar') - t.end() - }) - }) - }) - }) - }) - - test('test simultaniously get()', function (t) { - db.put('hello', 'world', function (err) { - t.error(err) - var r = 0 - , done = function () { - if (++r == 20) - t.end() - } - , i = 0 - , j = 0 - - for (; i < 10; ++i) - db.get('hello', function(err, value) { - t.error(err) - t.equal(value.toString(), 'world') - done() - }) - - for (; j < 10; ++j) - db.get('not found', function(err, value) { - t.ok(err, 'should error') - t.ok(verifyNotFoundError(err), 'should have correct error message') - t.ok(typeof value == 'undefined', 'value is undefined') - done() - }) - }) - }) -} - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(leveldown, test, testCommon) - module.exports.args(test) - module.exports.get(test) - module.exports.tearDown(test, testCommon) -} \ No newline at end of file diff --git a/node_modules/abstract-leveldown/abstract/iterator-test.js b/node_modules/abstract-leveldown/abstract/iterator-test.js deleted file mode 100644 index 5ca1719..0000000 --- a/node_modules/abstract-leveldown/abstract/iterator-test.js +++ /dev/null @@ -1,495 +0,0 @@ -var db - , sourceData = (function () { - var d = [] - , i = 0 - , k - for (; i < 100; i++) { - k = (i < 10 ? '0' : '') + i - d.push({ - type : 'put' - , key : k - , value : Math.random() - }) - } - return d - }()) - , transformSource = function (d) { - return { key: d.key, value: String(d.value) } - } - -module.exports.sourceData = sourceData -module.exports.transformSource = transformSource - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -module.exports.args = function (test) { - test('test argument-less iterator#next() throws', function (t) { - var iterator = db.iterator() - t.throws( - iterator.next.bind(iterator) - , { name: 'Error', message: 'next() requires a callback argument' } - , 'no-arg iterator#next() throws' - ) - iterator.end(t.end.bind(t)) - }) - - test('test argument-less iterator#end() after next() throws', function (t) { - var iterator = db.iterator() - iterator.next(function () { - t.throws( - iterator.end.bind(iterator) - , { name: 'Error', message: 'end() requires a callback argument' } - , 'no-arg iterator#end() throws' - ) - iterator.end(t.end.bind(t)) - }) - }) - - test('test argument-less iterator#end() throws', function (t) { - var iterator = db.iterator() - t.throws( - iterator.end.bind(iterator) - , { name: 'Error', message: 'end() requires a callback argument' } - , 'no-arg iterator#end() throws' - ) - iterator.end(t.end.bind(t)) - }) -} - -module.exports.sequence = function (test) { - test('test twice iterator#end() callback with error', function (t) { - var iterator = db.iterator() - iterator.end(function (err) { - t.error(err) - iterator.end(function(err2) { - t.ok(err2, 'returned error') - t.equal(err2.name, 'Error', 'correct error') - t.equal(err2.message, 'end() already called on iterator') - t.end() - }) - }) - }) - - test('test iterator#next after iterator#end() callback with error', function (t) { - var iterator = db.iterator() - iterator.end(function (err) { - t.error(err) - iterator.next(function(err2) { - t.ok(err2, 'returned error') - t.equal(err2.name, 'Error', 'correct error') - t.equal(err2.message, 'cannot call next() after end()', 'correct message') - t.end() - }) - }) - }) - - test('test twice iterator#next() throws', function (t) { - var iterator = db.iterator() - iterator.next(function (err) { - t.error(err) - iterator.end(function (err) { - t.error(err) - t.end() - }) - }) - - iterator.next(function(err) { - t.ok(err, 'returned error') - t.equal(err.name, 'Error', 'correct error') - t.equal(err.message, 'cannot call next() before previous next() has completed') - }) - }) -} - -module.exports.iterator = function (leveldown, test, testCommon, collectEntries) { - test('test simple iterator()', function (t) { - var data = [ - { type: 'put', key: 'foobatch1', value: 'bar1' } - , { type: 'put', key: 'foobatch2', value: 'bar2' } - , { type: 'put', key: 'foobatch3', value: 'bar3' } - ] - , idx = 0 - - db.batch(data, function (err) { - t.error(err) - var iterator = db.iterator() - , fn = function (err, key, value) { - t.error(err) - if (key && value) { - t.ok(Buffer.isBuffer(key), 'key argument is a Buffer') - t.ok(Buffer.isBuffer(value), 'value argument is a Buffer') - t.equal(key.toString(), data[idx].key, 'correct key') - t.equal(value.toString(), data[idx].value, 'correct value') - process.nextTick(next) - idx++ - } else { // end - t.ok(typeof err === 'undefined', 'err argument is undefined') - t.ok(typeof key === 'undefined', 'key argument is undefined') - t.ok(typeof value === 'undefined', 'value argument is undefined') - t.equal(idx, data.length, 'correct number of entries') - iterator.end(function () { - t.end() - }) - } - } - , next = function () { - iterator.next(fn) - } - - next() - }) - }) - - /** the following tests are mirroring the same series of tests in - * LevelUP read-stream-test.js - */ - - test('setUp #2', function (t) { - db.close(function () { - db = leveldown(testCommon.location()) - db.open(function () { - db.batch(sourceData, t.end.bind(t)) - }) - }) - }) - - test('test full data collection', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false }), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.slice().reverse().map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start=0', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '00' }), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start=50', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '50' }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start=50 and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '50', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(49).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start being a midway key (49.5)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49.5' }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start being a midway key (49999)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49999' }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start being a midway key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49.5', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end=50', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50' }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice(0, 51).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end being a midway key (50.5)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50.5' }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice(0, 51).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end being a midway key (50555)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50555' }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice(0, 51).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end being a midway key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50.5', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 49, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(0, 49).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - // end='0', starting key is actually '00' so it should avoid it - test('test iterator with end=0', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '0' }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - test('test iterator with start=30 and end=70', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '30', end: '70' }), function (err, data) { - t.error(err) - t.equal(data.length, 41, 'correct number of entries') - var expected = sourceData.slice(30, 71).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start=30 and end=70 and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '70', end: '30', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 41, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(29, 70).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with limit=20', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20 }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice(0, 20).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with limit=20 and start=20', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '20', limit: 20 }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice(20, 40).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with limit=20 and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20, reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(0, 20).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with limit=20 and start=20 and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '79', limit: 20, reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(20, 40).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - // the default limit value from levelup is -1 - test('test iterator with limit=-1 should iterate over whole database', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: -1}), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with limit=0 should not iterate over anything', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 0 }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - test('test iterator with end after limit', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20, end: '50' }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice(0, 20).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end before limit', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 50, end: '19' }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice(0, 20).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start after database end', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '9a' }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - test('test iterator with start after database end and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '9a', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.slice().reverse().map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start and end after database and and reverse=true', function (t) { - collectEntries(db.iterator({ start: '9b', end: '9a', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - function testIteratorCollectsFullDatabase (name, iteratorOptions) { - iteratorOptions.keyAsBuffer = false - iteratorOptions.valueAsBuffer = false - test(name, function (t) { - collectEntries(db.iterator(iteratorOptions), function (err, data) { - t.error(err) - t.equal(data.length, 100, 'correct number of entries') - var expected = sourceData.map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - } - if (!process.browser) { - // Can't use buffers as query keys in indexeddb (I think :P) - testIteratorCollectsFullDatabase( - 'test iterator with start as empty buffer' - , { start: new Buffer(0) } - ) - testIteratorCollectsFullDatabase( - 'test iterator with end as empty buffer' - , { end: new Buffer(0) } - ) - } - testIteratorCollectsFullDatabase( - 'test iterator with start as empty string' - , { start: '' } - ) - testIteratorCollectsFullDatabase( - 'test iterator with start as null' - , { start: null } - ) - testIteratorCollectsFullDatabase( - 'test iterator with end as empty string' - , { end: '' } - ) - testIteratorCollectsFullDatabase( - 'test iterator with end as null' - , { end: null } - ) -} - -module.exports.snapshot = function (leveldown, test, testCommon) { - test('setUp #3', function (t) { - db.close(function () { - db = leveldown(testCommon.location()) - db.open(function () { - db.put('foobatch1', 'bar1', t.end.bind(t)) - }) - }) - }) - - test('iterator create snapshot correctly', function (t) { - var iterator = db.iterator() - db.del('foobatch1', function () { - iterator.next(function (err, key, value) { - t.error(err) - t.ok(key, 'got a key') - t.equal(key.toString(), 'foobatch1', 'correct key') - t.equal(value.toString(), 'bar1', 'correct value') - iterator.end(t.end.bind(t)) - }) - }) - }) -} - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(leveldown, test, testCommon) - module.exports.args(test) - module.exports.sequence(test) - module.exports.iterator(leveldown, test, testCommon, testCommon.collectEntries) - module.exports.snapshot(leveldown, test, testCommon) - module.exports.tearDown(test, testCommon) -} diff --git a/node_modules/abstract-leveldown/abstract/leveldown-test.js b/node_modules/abstract-leveldown/abstract/leveldown-test.js deleted file mode 100644 index 1d4c23c..0000000 --- a/node_modules/abstract-leveldown/abstract/leveldown-test.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports.args = function (leveldown, test) { - test('test database creation no-arg throws', function (t) { - t.throws( - leveldown - , { name: 'Error', message: 'constructor requires at least a location argument' } - , 'no-arg leveldown() throws' - ) - t.end() - }) - test('test database creation non-string location throws', function (t) { - t.throws( - function () { - leveldown({}) - } - , { name: 'Error', message: 'constructor requires a location string argument' } - , 'non-string location leveldown() throws' - ) - t.end() - }) - - test('test database open no-arg throws', function (t) { - var db = leveldown('foo') - t.ok(db, 'database object returned') - t.ok(typeof db.open === 'function', 'open() function exists') - t.end() - }) -} \ No newline at end of file diff --git a/node_modules/abstract-leveldown/abstract/open-test.js b/node_modules/abstract-leveldown/abstract/open-test.js deleted file mode 100644 index ce15692..0000000 --- a/node_modules/abstract-leveldown/abstract/open-test.js +++ /dev/null @@ -1,112 +0,0 @@ -module.exports.setUp = function (test, testCommon) { - test('setUp', testCommon.setUp) -} - -module.exports.args = function (leveldown, test, testCommon) { - test('test database open no-arg throws', function (t) { - var db = leveldown(testCommon.location()) - t.throws( - db.open.bind(db) - , { name: 'Error', message: 'open() requires a callback argument' } - , 'no-arg open() throws' - ) - t.end() - }) - - test('test callback-less, 1-arg, open() throws', function (t) { - var db = leveldown(testCommon.location()) - t.throws( - db.open.bind(db, {}) - , { name: 'Error', message: 'open() requires a callback argument' } - , 'callback-less, 1-arg open() throws' - ) - t.end() - }) -} - -module.exports.open = function (leveldown, test, testCommon) { - test('test database open, no options', function (t) { - var db = leveldown(testCommon.location()) - - // default createIfMissing=true, errorIfExists=false - db.open(function (err) { - t.error(err) - db.close(function () { - t.end() - }) - }) - }) - - test('test database open, options and callback', function (t) { - var db = leveldown(testCommon.location()) - - // default createIfMissing=true, errorIfExists=false - db.open({}, function (err) { - t.error(err) - db.close(function () { - t.end() - }) - }) - }) - test('test database open, close and open', function (t) { - var db = leveldown(testCommon.location()) - - db.open(function (err) { - t.error(err) - db.close(function (err) { - t.error(err) - db.open(function (err) { - t.error(err) - db.close(function () { - t.end() - }) - }) - }) - }) - }) -} - -module.exports.openAdvanced = function (leveldown, test, testCommon) { - test('test database open createIfMissing:false', function (t) { - var db = leveldown(testCommon.location()) - - db.open({ createIfMissing: false }, function (err) { - t.ok(err, 'error') - t.ok(/does not exist/.test(err.message), 'error is about dir not existing') - t.end() - }) - }) - - test('test database open errorIfExists:true', function (t) { - var location = testCommon.location() - , db = leveldown(location) - - // make a valid database first, then close and dispose - db.open({}, function (err) { - t.error(err) - db.close(function (err) { - t.error(err) - - // open again with 'errorIfExists' - db = leveldown(location) - db.open({ createIfMissing: false, errorIfExists: true }, function (err) { - t.ok(err, 'error') - t.ok(/exists/.test(err.message), 'error is about already existing') - t.end() - }) - }) - }) - }) -} - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', testCommon.tearDown) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(test, testCommon) - module.exports.args(leveldown, test, testCommon) - module.exports.open(leveldown, test, testCommon) - module.exports.openAdvanced(leveldown, test, testCommon) - module.exports.tearDown(test, testCommon) -} \ No newline at end of file diff --git a/node_modules/abstract-leveldown/abstract/put-get-del-test.js b/node_modules/abstract-leveldown/abstract/put-get-del-test.js deleted file mode 100644 index 28a9023..0000000 --- a/node_modules/abstract-leveldown/abstract/put-get-del-test.js +++ /dev/null @@ -1,177 +0,0 @@ -/**** SETUP & UTILITY STUFF ****/ - - -var db - , testBuffer - , test - , verifyNotFoundError = require('./util').verifyNotFoundError - -function makeGetDelErrorTests (type, key, expectedError) { - test('test get() with ' + type + ' causes error', function (t) { - db.get(key, function (err) { - t.ok(err, 'has error') - t.ok(err instanceof Error) - t.ok(err.message.match(expectedError), 'correct error message') - t.end() - }) - }) - - test('test del() with ' + type + ' causes error', function (t) { - db.del(key, function (err) { - t.ok(err, 'has error') - t.ok(err instanceof Error) - t.ok(err.message.match(expectedError), 'correct error message') - t.end() - }) - }) -} - -function makePutErrorTest (type, key, value, expectedError) { - test('test put() with ' + type + ' causes error', function (t) { - db.put(key, value, function (err) { - t.ok(err, 'has error') - t.ok(err instanceof Error) - t.ok(err.message.match(expectedError), 'correct error message') - t.end() - }) - }) -} - -function makePutGetDelSuccessfulTest (type, key, value, expectedResult) { - var hasExpectedResult = arguments.length == 4 - test('test put()/get()/del() with ' + type, function (t) { - db.put(key, value, function (err) { - t.error(err) - db.get(key, function (err, _value) { - t.error(err, 'no error, has key/value for `' + type + '`') - t.ok(Buffer.isBuffer(_value), 'is a Buffer') - var result = _value - if (hasExpectedResult) { - t.equal(result.toString(), expectedResult) - } else { - if (result != null) - result = _value.toString() - if (value != null) - value = value.toString() - t.equals(result, value) - } - db.del(key, function (err) { - t.error(err, 'no error, deleted key/value for `' + type + '`') - db.get(key, function (err, value) { - t.ok(err, 'entry propertly deleted') - t.ok(verifyNotFoundError(err), 'should have correct error message') - t.equal(typeof value, 'undefined', 'value is undefined') - t.end() - }) - }) - }) - }) - }) -} - -function makeErrorKeyTest (type, key, expectedError) { - makeGetDelErrorTests(type, key, expectedError) - makePutErrorTest(type, key, 'foo', expectedError) -} - -/**** SETUP ENVIRONMENT ****/ - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -/**** TEST ERROR KEYS ****/ - -module.exports.errorKeys = function (testFunc, BufferType) { - if (!BufferType) - BufferType = Buffer - test = testFunc - makeErrorKeyTest('null key', null, /key cannot be `null` or `undefined`/) - makeErrorKeyTest('undefined key', undefined, /key cannot be `null` or `undefined`/) - makeErrorKeyTest('empty String key', '', /key cannot be an empty String/) - makeErrorKeyTest('empty Buffer key', new BufferType(0), /key cannot be an empty \w*Buffer/) - makeErrorKeyTest('empty Array key', [], /key cannot be an empty String/) -} - -/**** TEST NON-ERROR KEYS ****/ - -module.exports.nonErrorKeys = function (testFunc) { - // valid falsey keys - test = testFunc - makePutGetDelSuccessfulTest('`false` key', false, 'foo false') - makePutGetDelSuccessfulTest('`0` key', 0, 'foo 0') - makePutGetDelSuccessfulTest('`NaN` key', NaN, 'foo NaN') - - // standard String key - makePutGetDelSuccessfulTest( - 'long String key' - , 'some long string that I\'m using as a key for this unit test, cross your fingers dude, we\'re going in!' - , 'foo' - ) - - if (!process.browser) { - // Buffer key - makePutGetDelSuccessfulTest('Buffer key', testBuffer, 'foo') - } - - // non-empty Array as a value - makePutGetDelSuccessfulTest('Array value', 'foo', [1,2,3,4]) -} - -/**** TEST ERROR VALUES ****/ - -module.exports.errorValues = function () { -} - -module.exports.nonErrorValues = function (testFunc, BufferType) { - if (!BufferType) BufferType = Buffer - // valid falsey values - test = testFunc - makePutGetDelSuccessfulTest('`false` value', 'foo false', false) - makePutGetDelSuccessfulTest('`0` value', 'foo 0', 0) - makePutGetDelSuccessfulTest('`NaN` value', 'foo NaN', NaN) - - // all of the following result in an empty-string value: - - makePutGetDelSuccessfulTest('`null` value', 'foo null', null, '') - makePutGetDelSuccessfulTest('`undefined` value', 'foo undefined', undefined, '') - makePutGetDelSuccessfulTest('empty String value', 'foo', '', '') - makePutGetDelSuccessfulTest('empty Buffer value', 'foo', new BufferType(0), '') - makePutGetDelSuccessfulTest('empty Array value', 'foo', [], '') - - // standard String value - makePutGetDelSuccessfulTest( - 'long String value' - , 'foo' - , 'some long string that I\'m using as a key for this unit test, cross your fingers dude, we\'re going in!' - ) - - // standard Buffer value - makePutGetDelSuccessfulTest('Buffer value', 'foo', testBuffer) - - // non-empty Array as a key - makePutGetDelSuccessfulTest('Array key', [1,2,3,4], 'foo') -} - -/**** CLEANUP ENVIRONMENT ****/ - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, testFunc, testCommon, buffer, BufferType) { - testBuffer = buffer - test = testFunc - module.exports.setUp(leveldown, test, testCommon) - module.exports.errorKeys(test, BufferType) - module.exports.nonErrorKeys(test) - module.exports.errorValues(test, BufferType) - module.exports.nonErrorValues(test, BufferType) - module.exports.tearDown(test, testCommon) -} diff --git a/node_modules/abstract-leveldown/abstract/put-test.js b/node_modules/abstract-leveldown/abstract/put-test.js deleted file mode 100644 index 4636a41..0000000 --- a/node_modules/abstract-leveldown/abstract/put-test.js +++ /dev/null @@ -1,114 +0,0 @@ -var db - , verifyNotFoundError = require('./util').verifyNotFoundError - , isTypedArray = require('./util').isTypedArray - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -module.exports.args = function (test) { - test('test argument-less put() throws', function (t) { - t.throws( - db.put.bind(db) - , { name: 'Error', message: 'put() requires a callback argument' } - , 'no-arg put() throws' - ) - t.end() - }) - - test('test callback-less, 1-arg, put() throws', function (t) { - t.throws( - db.put.bind(db, 'foo') - , { name: 'Error', message: 'put() requires a callback argument' } - , 'callback-less, 1-arg put() throws' - ) - t.end() - }) - - test('test callback-less, 2-arg, put() throws', function (t) { - t.throws( - db.put.bind(db, 'foo', 'bar') - , { name: 'Error', message: 'put() requires a callback argument' } - , 'callback-less, 2-arg put() throws' - ) - t.end() - }) - - test('test callback-less, 3-arg, put() throws', function (t) { - t.throws( - db.put.bind(db, 'foo', 'bar', {}) - , { name: 'Error', message: 'put() requires a callback argument' } - , 'callback-less, 3-arg put() throws' - ) - t.end() - }) -} - -module.exports.put = function (test) { - test('test simple put()', function (t) { - db.put('foo', 'bar', function (err) { - t.error(err) - db.get('foo', function (err, value) { - t.error(err) - var result = value.toString() - if (isTypedArray(value)) - result = String.fromCharCode.apply(null, new Uint16Array(value)) - t.equal(result, 'bar') - t.end() - }) - }) - }) - - if (process.browser) { - test('test object value put()', function (t) { - db.put('dood', {pete: 'sampras'}, function (err) { - t.error(err) - db.get('dood', { asBuffer: false }, function (err, value) { - t.error(err) - t.equal(JSON.stringify(value), JSON.stringify({pete: 'sampras'})) - t.end() - }) - }) - }) - } - -} - -module.exports.sync = function (test) { - test('sync put', function (t) { - db.put('foo', 'bar', { sync: true }, function (err) { - t.error(err) - db.get('foo', function (err, value) { - t.error(err) - t.equal(value.toString(), 'bar') - t.end() - }) - }) - }) - test('sync put just before close', function (t) { - t.plan(2) - db.put('foo', 'bar', { sync: true }, function (err) { - t.error(err) - }) - db.close(function (err) { - t.error(err) - }) - }) -} - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(leveldown, test, testCommon) - module.exports.args(test) - module.exports.put(test) - module.exports.tearDown(test, testCommon) -} diff --git a/node_modules/abstract-leveldown/abstract/ranges-test.js b/node_modules/abstract-leveldown/abstract/ranges-test.js deleted file mode 100644 index d7f57d4..0000000 --- a/node_modules/abstract-leveldown/abstract/ranges-test.js +++ /dev/null @@ -1,435 +0,0 @@ -var db - , sourceData = require('./iterator-test').sourceData - , transformSource = require('./iterator-test').transformSource - -module.exports.setUp = function (leveldown, test, testCommon) { - test('setUp common', testCommon.setUp) - test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(t.end.bind(t)) - }) -} - -module.exports.iterator = function (leveldown, test, testCommon, collectEntries) { - test('test simple iterator()', function (t) { - var data = [ - { type: 'put', key: 'foobatch1', value: 'bar1' } - , { type: 'put', key: 'foobatch2', value: 'bar2' } - , { type: 'put', key: 'foobatch3', value: 'bar3' } - ] - , idx = 0 - - db.batch(data, function (err) { - t.error(err) - var iterator = db.iterator() - , fn = function (err, key, value) { - t.error(err) - if (key && value) { - t.equal(key.toString(), data[idx].key, 'correct key') - t.equal(value.toString(), data[idx].value, 'correct value') - process.nextTick(next) - idx++ - } else { // end - t.ok(typeof err === 'undefined', 'err argument is undefined') - t.ok(typeof key === 'undefined', 'key argument is undefined') - t.ok(typeof value === 'undefined', 'value argument is undefined') - t.equal(idx, data.length, 'correct number of entries') - iterator.end(function () { - t.end() - }) - } - } - , next = function () { - iterator.next(fn) - } - - next() - }) - }) - - /** the following tests are mirroring the same series of tests in - * LevelUP read-stream-test.js - */ - - test('setUp #2', function (t) { - db.close(function () { - db = leveldown(testCommon.location()) - db.open(function () { - db.batch(sourceData, t.end.bind(t)) - }) - }) - }) - - test('test full data collection', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false }), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.slice().reverse().map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with gte=0', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gte: '00' }), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with gte=50', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gte: '50' }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with lte=50 and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '50', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(49).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start being a midway key (49.5)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gte: '49.5' }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start being a midway key (49999)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gte: '49999' }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start being a midway key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '49.5', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start being a midway key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lt: '49.5', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start being a midway key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lt: '50', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 50, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(50).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end=50', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '50' }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice(0, 51).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end being a midway key (50.5)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '50.5' }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice(0, 51).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end being a midway key (50555)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '50555' }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice(0, 51).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end being a midway key (50555)', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lt: '50555' }), function (err, data) { - t.error(err) - t.equal(data.length, 51, 'correct number of entries') - var expected = sourceData.slice(0, 51).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end being a midway key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gte: '50.5', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 49, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(0, 49).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with gt a midway key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gt: '50.5', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 49, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(0, 49).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with gt a midway key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gt: '50', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 49, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(0, 49).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with gt 50 key and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gt: '50', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 49, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(0, 49).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - // end='0', starting key is actually '00' so it should avoid it - test('test iterator with end=0', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '0' }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - // end='0', starting key is actually '00' so it should avoid it - test('test iterator with end<0', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lt: '0' }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - test('test iterator with start=30 and end=70', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gte: '30', lte: '70' }), function (err, data) { - t.error(err) - t.equal(data.length, 41, 'correct number of entries') - var expected = sourceData.slice(30, 71).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start=30 and end=70', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gt: '29', lt: '71' }), function (err, data) { - t.error(err) - t.equal(data.length, 41, 'correct number of entries') - var expected = sourceData.slice(30, 71).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start=30 and end=70 and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '70', gte: '30', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 41, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(29, 70).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start=30 and end=70 and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lt: '71', gt: '29', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 41, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(29, 70).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with limit=20 and start=20', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gte: '20', limit: 20 }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice(20, 40).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with limit=20 and start=79 and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '79', limit: 20, reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice().reverse().slice(20, 40).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end after limit', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20, lte: '50' }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice(0, 20).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with end before limit', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 50, lte: '19' }), function (err, data) { - t.error(err) - t.equal(data.length, 20, 'correct number of entries') - var expected = sourceData.slice(0, 20).map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start after database end', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gte: '9a' }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - test('test iterator with start after database end', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, gt: '9a' }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - test('test iterator with start after database end and reverse=true', function (t) { - collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, lte: '9a', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, sourceData.length, 'correct number of entries') - var expected = sourceData.slice().reverse().map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - - test('test iterator with start and end after database and and reverse=true', function (t) { - collectEntries(db.iterator({ lte: '9b', gte: '9a', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - test('test iterator with lt and gt after database and and reverse=true', function (t) { - collectEntries(db.iterator({ lt: '9b', gt: '9a', reverse: true }), function (err, data) { - t.error(err) - t.equal(data.length, 0, 'correct number of entries') - t.end() - }) - }) - - function testIteratorCollectsFullDatabase (name, iteratorOptions) { - iteratorOptions.keyAsBuffer = false - iteratorOptions.valueAsBuffer = false - test(name, function (t) { - collectEntries(db.iterator(iteratorOptions), function (err, data) { - t.error(err) - t.equal(data.length, 100, 'correct number of entries') - var expected = sourceData.map(transformSource) - t.deepEqual(data, expected) - t.end() - }) - }) - } - if (!process.browser) { - // Can't use buffers as query keys in indexeddb (I think :P) - testIteratorCollectsFullDatabase( - 'test iterator with start as empty buffer' - , { start: new Buffer(0) } - ) - testIteratorCollectsFullDatabase( - 'test iterator with end as empty buffer' - , { end: new Buffer(0) } - ) - } - testIteratorCollectsFullDatabase( - 'test iterator with start as empty string' - , { gte: '' } - ) - testIteratorCollectsFullDatabase( - 'test iterator with start as null' - , { gte: null } - ) - testIteratorCollectsFullDatabase( - 'test iterator with end as empty string' - , { lte: '' } - ) - testIteratorCollectsFullDatabase( - 'test iterator with end as null' - , { lte: null } - ) -} - -module.exports.tearDown = function (test, testCommon) { - test('tearDown', function (t) { - db.close(testCommon.tearDown.bind(null, t)) - }) -} - -module.exports.all = function (leveldown, test, testCommon) { - module.exports.setUp(leveldown, test, testCommon) - module.exports.iterator(leveldown, test, testCommon, testCommon.collectEntries) - module.exports.tearDown(test, testCommon) -} diff --git a/node_modules/abstract-leveldown/abstract/util.js b/node_modules/abstract-leveldown/abstract/util.js deleted file mode 100644 index 2ae5a4f..0000000 --- a/node_modules/abstract-leveldown/abstract/util.js +++ /dev/null @@ -1,10 +0,0 @@ -var nfre = /NotFound/i - -module.exports.verifyNotFoundError = function verifyNotFoundError (err) { - return nfre.test(err.message) || nfre.test(err.name) -} - -module.exports.isTypedArray = function isTypedArray (value) { - return (typeof ArrayBuffer != 'undefined' && value instanceof ArrayBuffer) - || (typeof Uint8Array != 'undefined' && value instanceof Uint8Array) -} diff --git a/node_modules/abstract-leveldown/index.js b/node_modules/abstract-leveldown/index.js deleted file mode 100644 index 6e99910..0000000 --- a/node_modules/abstract-leveldown/index.js +++ /dev/null @@ -1,4 +0,0 @@ -exports.AbstractLevelDOWN = require('./abstract-leveldown') -exports.AbstractIterator = require('./abstract-iterator') -exports.AbstractChainedBatch = require('./abstract-chained-batch') -exports.isLevelDOWN = require('./is-leveldown') diff --git a/node_modules/abstract-leveldown/is-leveldown.js b/node_modules/abstract-leveldown/is-leveldown.js deleted file mode 100644 index e6911fb..0000000 --- a/node_modules/abstract-leveldown/is-leveldown.js +++ /dev/null @@ -1,14 +0,0 @@ -var AbstractLevelDOWN = require('./abstract-leveldown') - -function isLevelDOWN (db) { - if (!db || typeof db !== 'object') - return false - return Object.keys(AbstractLevelDOWN.prototype).filter(function (name) { - // TODO remove approximateSize check when method is gone - return name[0] != '_' && name != 'approximateSize' - }).every(function (name) { - return typeof db[name] == 'function' - }) -} - -module.exports = isLevelDOWN diff --git a/node_modules/abstract-leveldown/node_modules/xtend/.jshintrc b/node_modules/abstract-leveldown/node_modules/xtend/.jshintrc deleted file mode 100644 index 77887b5..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/.jshintrc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "maxdepth": 4, - "maxstatements": 200, - "maxcomplexity": 12, - "maxlen": 80, - "maxparams": 5, - - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": false, - "noarg": true, - "noempty": true, - "nonew": true, - "undef": true, - "unused": "vars", - "trailing": true, - - "quotmark": true, - "expr": true, - "asi": true, - - "browser": false, - "esnext": true, - "devel": false, - "node": false, - "nonstandard": false, - - "predef": ["require", "module", "__dirname", "__filename"] -} diff --git a/node_modules/abstract-leveldown/node_modules/xtend/.npmignore b/node_modules/abstract-leveldown/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/abstract-leveldown/node_modules/xtend/LICENCE b/node_modules/abstract-leveldown/node_modules/xtend/LICENCE deleted file mode 100644 index 1a14b43..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/abstract-leveldown/node_modules/xtend/Makefile b/node_modules/abstract-leveldown/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/abstract-leveldown/node_modules/xtend/README.md b/node_modules/abstract-leveldown/node_modules/xtend/README.md deleted file mode 100644 index 093cb29..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# xtend - -[![browser support][3]][4] - -[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Extend like a boss - -xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. - -## Examples - -```js -var extend = require("xtend") - -// extend returns a new object. Does not mutate arguments -var combination = extend({ - a: "a", - b: 'c' -}, { - b: "b" -}) -// { a: "a", b: "b" } -``` - -## Stability status: Locked - -## MIT Licenced - - - [3]: http://ci.testling.com/Raynos/xtend.png - [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/abstract-leveldown/node_modules/xtend/immutable.js b/node_modules/abstract-leveldown/node_modules/xtend/immutable.js deleted file mode 100644 index 94889c9..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/immutable.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/abstract-leveldown/node_modules/xtend/mutable.js b/node_modules/abstract-leveldown/node_modules/xtend/mutable.js deleted file mode 100644 index 72debed..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/mutable.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/abstract-leveldown/node_modules/xtend/package.json b/node_modules/abstract-leveldown/node_modules/xtend/package.json deleted file mode 100644 index 22fce81..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "xtend@~4.0.0", - "/Users/jbaylina/git/MVP/node_modules/abstract-leveldown" - ] - ], - "_from": "xtend@>=4.0.0 <4.1.0", - "_id": "xtend@4.0.1", - "_inCache": true, - "_installable": true, - "_location": "/abstract-leveldown/xtend", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - "_npmVersion": "2.14.1", - "_phantomChildren": {}, - "_requested": { - "name": "xtend", - "raw": "xtend@~4.0.0", - "rawSpec": "~4.0.0", - "scope": null, - "spec": ">=4.0.0 <4.1.0", - "type": "range" - }, - "_requiredBy": [ - "/abstract-leveldown" - ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "_shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "_shrinkwrap": null, - "_spec": "xtend@~4.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/abstract-leveldown", - "author": { - "email": "raynos2@gmail.com", - "name": "Raynos" - }, - "bugs": { - "email": "raynos2@gmail.com", - "url": "https://github.com/Raynos/xtend/issues" - }, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Matt Esch" - } - ], - "dependencies": {}, - "description": "extend like a boss", - "devDependencies": { - "tape": "~1.1.0" - }, - "directories": {}, - "dist": { - "shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "tarball": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - }, - "engines": { - "node": ">=0.4" - }, - "gitHead": "23dc302a89756da89c1897bc732a752317e35390", - "homepage": "https://github.com/Raynos/xtend", - "keywords": [ - "extend", - "merge", - "options", - "opts", - "object", - "array" - ], - "license": "MIT", - "main": "immutable", - "maintainers": [ - { - "email": "raynos2@gmail.com", - "name": "raynos" - } - ], - "name": "xtend", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xtend.git" - }, - "scripts": { - "test": "node test" - }, - "testling": { - "browsers": [ - "ie/7..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ], - "files": "test.js" - }, - "version": "4.0.1" -} diff --git a/node_modules/abstract-leveldown/node_modules/xtend/test.js b/node_modules/abstract-leveldown/node_modules/xtend/test.js deleted file mode 100644 index 093a2b0..0000000 --- a/node_modules/abstract-leveldown/node_modules/xtend/test.js +++ /dev/null @@ -1,83 +0,0 @@ -var test = require("tape") -var extend = require("./") -var mutableExtend = require("./mutable") - -test("merge", function(assert) { - var a = { a: "foo" } - var b = { b: "bar" } - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("replace", function(assert) { - var a = { a: "foo" } - var b = { a: "bar" } - - assert.deepEqual(extend(a, b), { a: "bar" }) - assert.end() -}) - -test("undefined", function(assert) { - var a = { a: undefined } - var b = { b: "foo" } - - assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) - assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) - assert.end() -}) - -test("handle 0", function(assert) { - var a = { a: "default" } - var b = { a: 0 } - - assert.deepEqual(extend(a, b), { a: 0 }) - assert.deepEqual(extend(b, a), { a: "default" }) - assert.end() -}) - -test("is immutable", function (assert) { - var record = {} - - extend(record, { foo: "bar" }) - assert.equal(record.foo, undefined) - assert.end() -}) - -test("null as argument", function (assert) { - var a = { foo: "bar" } - var b = null - var c = void 0 - - assert.deepEqual(extend(b, a, c), { foo: "bar" }) - assert.end() -}) - -test("mutable", function (assert) { - var a = { foo: "bar" } - - mutableExtend(a, { bar: "baz" }) - - assert.equal(a.bar, "baz") - assert.end() -}) - -test("null prototype", function(assert) { - var a = { a: "foo" } - var b = Object.create(null) - b.b = "bar"; - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("null prototype mutable", function (assert) { - var a = { foo: "bar" } - var b = Object.create(null) - b.bar = "baz"; - - mutableExtend(a, b) - - assert.equal(a.bar, "baz") - assert.end() -}) diff --git a/node_modules/abstract-leveldown/package.json b/node_modules/abstract-leveldown/package.json deleted file mode 100644 index 3cadb1e..0000000 --- a/node_modules/abstract-leveldown/package.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "_args": [ - [ - "abstract-leveldown@~2.4.0", - "/Users/jbaylina/git/MVP/node_modules/deferred-leveldown" - ] - ], - "_from": "abstract-leveldown@>=2.4.0 <2.5.0", - "_id": "abstract-leveldown@2.4.1", - "_inCache": true, - "_installable": true, - "_location": "/abstract-leveldown", - "_nodeVersion": "0.10.36", - "_npmUser": { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - "_npmVersion": "2.6.1", - "_phantomChildren": {}, - "_requested": { - "name": "abstract-leveldown", - "raw": "abstract-leveldown@~2.4.0", - "rawSpec": "~2.4.0", - "scope": null, - "spec": ">=2.4.0 <2.5.0", - "type": "range" - }, - "_requiredBy": [ - "/deferred-leveldown", - "/memdown" - ], - "_resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz", - "_shasum": "b3bfedb884eb693a12775f0c55e9f0a420ccee64", - "_shrinkwrap": null, - "_spec": "abstract-leveldown@~2.4.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/deferred-leveldown", - "browser": { - "rimraf": false - }, - "bugs": { - "url": "https://github.com/level/abstract-leveldown/issues" - }, - "contributors": [ - { - "email": "r@va.gg", - "name": "Rod Vagg", - "url": "https://github.com/rvagg" - }, - { - "email": "john@chesl.es", - "name": "John Chesley", - "url": "https://github.com/chesles/" - }, - { - "email": "raynos2@gmail.com", - "name": "Jake Verbaten", - "url": "https://github.com/raynos" - }, - { - "email": "dominic.tarr@gmail.com", - "name": "Dominic Tarr", - "url": "https://github.com/dominictarr" - }, - { - "email": "max@maxogden.com", - "name": "Max Ogden", - "url": "https://github.com/maxogden" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "Lars-Magnus Skog", - "url": "https://github.com/ralphtheninja" - }, - { - "email": "david.bjorklund@gmail.com", - "name": "David Björklund", - "url": "https://github.com/kesla" - }, - { - "email": "julian@juliangruber.com", - "name": "Julian Gruber", - "url": "https://github.com/juliangruber" - }, - { - "email": "paolo@async.ly", - "name": "Paolo Fragomeni", - "url": "https://github.com/hij1nx" - }, - { - "email": "anton.whalley@nearform.com", - "name": "Anton Whalley", - "url": "https://github.com/No9" - }, - { - "email": "matteo.collina@gmail.com", - "name": "Matteo Collina", - "url": "https://github.com/mcollina" - }, - { - "email": "pedro.teixeira@gmail.com", - "name": "Pedro Teixeira", - "url": "https://github.com/pgte" - }, - { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "https://github.com/substack" - }, - { - "email": "w@tson.dk", - "name": "Thomas Watson Steen", - "url": "https://github.com/watson" - } - ], - "dependencies": { - "xtend": "~4.0.0" - }, - "description": "An abstract prototype matching the LevelDOWN API", - "devDependencies": { - "rimraf": "~2.3.2", - "sinon": "~1.14.1", - "tape": "~4.0.0" - }, - "directories": {}, - "dist": { - "shasum": "b3bfedb884eb693a12775f0c55e9f0a420ccee64", - "tarball": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz" - }, - "gitHead": "1259fc4b0ab6d7e54c9936d990ea5447d780112d", - "homepage": "https://github.com/level/abstract-leveldown", - "keywords": [ - "leveldb", - "leveldown", - "levelup" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "rod@vagg.org", - "name": "rvagg" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "ralphtheninja" - }, - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - } - ], - "name": "abstract-leveldown", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/level/abstract-leveldown.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "2.4.1" -} diff --git a/node_modules/abstract-leveldown/test.js b/node_modules/abstract-leveldown/test.js deleted file mode 100644 index b255c3b..0000000 --- a/node_modules/abstract-leveldown/test.js +++ /dev/null @@ -1,714 +0,0 @@ -var test = require('tape') - , sinon = require('sinon') - , util = require('util') - , testCommon = require('./testCommon') - , AbstractLevelDOWN = require('./').AbstractLevelDOWN - , AbstractIterator = require('./').AbstractIterator - , AbstractChainedBatch = require('./').AbstractChainedBatch - , isLevelDOWN = require('./').isLevelDOWN - -function factory (location) { - return new AbstractLevelDOWN(location) -} - -/*** compatibility with basic LevelDOWN API ***/ - -require('./abstract/leveldown-test').args(factory, test, testCommon) - -require('./abstract/open-test').args(factory, test, testCommon) - -require('./abstract/del-test').setUp(factory, test, testCommon) -require('./abstract/del-test').args(test) - -require('./abstract/get-test').setUp(factory, test, testCommon) -require('./abstract/get-test').args(test) - -require('./abstract/put-test').setUp(factory, test, testCommon) -require('./abstract/put-test').args(test) - -require('./abstract/put-get-del-test').setUp(factory, test, testCommon) -require('./abstract/put-get-del-test').errorKeys(test) -//require('./abstract/put-get-del-test').nonErrorKeys(test, testCommon) -require('./abstract/put-get-del-test').errorValues(test) -//require('./abstract/test/put-get-del-test').nonErrorKeys(test, testCommon) -require('./abstract/put-get-del-test').tearDown(test, testCommon) - -require('./abstract/approximate-size-test').setUp(factory, test, testCommon) -require('./abstract/approximate-size-test').args(test) - -require('./abstract/batch-test').setUp(factory, test, testCommon) -require('./abstract/batch-test').args(test) - -require('./abstract/chained-batch-test').setUp(factory, test, testCommon) -require('./abstract/chained-batch-test').args(test) - -require('./abstract/close-test').close(factory, test, testCommon) - -require('./abstract/iterator-test').setUp(factory, test, testCommon) -require('./abstract/iterator-test').args(test) -require('./abstract/iterator-test').sequence(test) - -/*** extensibility ***/ - -test('test core extensibility', function (t) { - function Test (location) { - AbstractLevelDOWN.call(this, location) - t.equal(this.location, location, 'location set on `this`') - t.end() - } - - util.inherits(Test, AbstractLevelDOWN) - - ;new Test('foobar') -}) - -test('test open() extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , expectedOptions = { createIfMissing: true, errorIfExists: false } - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._open = spy - - test = new Test('foobar') - test.open(expectedCb) - - t.equal(spy.callCount, 1, 'got _open() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _open() was correct') - t.equal(spy.getCall(0).args.length, 2, 'got two arguments') - t.deepEqual(spy.getCall(0).args[0], expectedOptions, 'got default options argument') - - test.open({ options: 1 }, expectedCb) - - expectedOptions.options = 1 - - t.equal(spy.callCount, 2, 'got _open() call') - t.equal(spy.getCall(1).thisValue, test, '`this` on _open() was correct') - t.equal(spy.getCall(1).args.length, 2, 'got two arguments') - t.deepEqual(spy.getCall(1).args[0], expectedOptions, 'got expected options argument') - t.end() -}) - -test('test close() extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._close = spy - - test = new Test('foobar') - test.close(expectedCb) - - t.equal(spy.callCount, 1, 'got _close() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _close() was correct') - t.equal(spy.getCall(0).args.length, 1, 'got one arguments') - t.end() -}) - -test('test get() extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , expectedOptions = { asBuffer: true } - , expectedKey = 'a key' - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._get = spy - - test = new Test('foobar') - test.get(expectedKey, expectedCb) - - t.equal(spy.callCount, 1, 'got _get() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _get() was correct') - t.equal(spy.getCall(0).args.length, 3, 'got three arguments') - t.equal(spy.getCall(0).args[0], expectedKey, 'got expected key argument') - t.deepEqual(spy.getCall(0).args[1], expectedOptions, 'got default options argument') - t.equal(spy.getCall(0).args[2], expectedCb, 'got expected cb argument') - - test.get(expectedKey, { options: 1 }, expectedCb) - - expectedOptions.options = 1 - - t.equal(spy.callCount, 2, 'got _get() call') - t.equal(spy.getCall(1).thisValue, test, '`this` on _get() was correct') - t.equal(spy.getCall(1).args.length, 3, 'got three arguments') - t.equal(spy.getCall(1).args[0], expectedKey, 'got expected key argument') - t.deepEqual(spy.getCall(1).args[1], expectedOptions, 'got expected options argument') - t.equal(spy.getCall(1).args[2], expectedCb, 'got expected cb argument') - t.end() -}) - -test('test del() extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , expectedOptions = { options: 1 } - , expectedKey = 'a key' - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._del = spy - - test = new Test('foobar') - test.del(expectedKey, expectedCb) - - t.equal(spy.callCount, 1, 'got _del() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _del() was correct') - t.equal(spy.getCall(0).args.length, 3, 'got three arguments') - t.equal(spy.getCall(0).args[0], expectedKey, 'got expected key argument') - t.deepEqual(spy.getCall(0).args[1], {}, 'got blank options argument') - t.equal(spy.getCall(0).args[2], expectedCb, 'got expected cb argument') - - test.del(expectedKey, expectedOptions, expectedCb) - - t.equal(spy.callCount, 2, 'got _del() call') - t.equal(spy.getCall(1).thisValue, test, '`this` on _del() was correct') - t.equal(spy.getCall(1).args.length, 3, 'got three arguments') - t.equal(spy.getCall(1).args[0], expectedKey, 'got expected key argument') - t.deepEqual(spy.getCall(1).args[1], expectedOptions, 'got expected options argument') - t.equal(spy.getCall(1).args[2], expectedCb, 'got expected cb argument') - t.end() -}) - -test('test put() extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , expectedOptions = { options: 1 } - , expectedKey = 'a key' - , expectedValue = 'a value' - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._put = spy - - test = new Test('foobar') - test.put(expectedKey, expectedValue, expectedCb) - - t.equal(spy.callCount, 1, 'got _put() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _put() was correct') - t.equal(spy.getCall(0).args.length, 4, 'got four arguments') - t.equal(spy.getCall(0).args[0], expectedKey, 'got expected key argument') - t.equal(spy.getCall(0).args[1], expectedValue, 'got expected value argument') - t.deepEqual(spy.getCall(0).args[2], {}, 'got blank options argument') - t.equal(spy.getCall(0).args[3], expectedCb, 'got expected cb argument') - - test.put(expectedKey, expectedValue, expectedOptions, expectedCb) - - t.equal(spy.callCount, 2, 'got _put() call') - t.equal(spy.getCall(1).thisValue, test, '`this` on _put() was correct') - t.equal(spy.getCall(1).args.length, 4, 'got four arguments') - t.equal(spy.getCall(1).args[0], expectedKey, 'got expected key argument') - t.equal(spy.getCall(1).args[1], expectedValue, 'got expected value argument') - t.deepEqual(spy.getCall(1).args[2], expectedOptions, 'got blank options argument') - t.equal(spy.getCall(1).args[3], expectedCb, 'got expected cb argument') - t.end() -}) - -test('test approximateSize() extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , expectedStart = 'a start' - , expectedEnd = 'an end' - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._approximateSize = spy - - test = new Test('foobar') - test.approximateSize(expectedStart, expectedEnd, expectedCb) - - t.equal(spy.callCount, 1, 'got _approximateSize() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _approximateSize() was correct') - t.equal(spy.getCall(0).args.length, 3, 'got three arguments') - t.equal(spy.getCall(0).args[0], expectedStart, 'got expected start argument') - t.equal(spy.getCall(0).args[1], expectedEnd, 'got expected end argument') - t.equal(spy.getCall(0).args[2], expectedCb, 'got expected cb argument') - t.end() -}) - -test('test batch() extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , expectedOptions = { options: 1 } - , expectedArray = [ 1, 2 ] - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._batch = spy - - test = new Test('foobar') - - test.batch(expectedArray, expectedCb) - - t.equal(spy.callCount, 1, 'got _batch() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _batch() was correct') - t.equal(spy.getCall(0).args.length, 3, 'got three arguments') - t.equal(spy.getCall(0).args[0], expectedArray, 'got expected array argument') - t.deepEqual(spy.getCall(0).args[1], {}, 'got expected options argument') - t.equal(spy.getCall(0).args[2], expectedCb, 'got expected callback argument') - - test.batch(expectedArray, expectedOptions, expectedCb) - - t.equal(spy.callCount, 2, 'got _batch() call') - t.equal(spy.getCall(1).thisValue, test, '`this` on _batch() was correct') - t.equal(spy.getCall(1).args.length, 3, 'got three arguments') - t.equal(spy.getCall(1).args[0], expectedArray, 'got expected array argument') - t.deepEqual(spy.getCall(1).args[1], expectedOptions, 'got expected options argument') - t.equal(spy.getCall(1).args[2], expectedCb, 'got expected callback argument') - - test.batch(expectedArray, null, expectedCb) - - t.equal(spy.callCount, 3, 'got _batch() call') - t.equal(spy.getCall(2).thisValue, test, '`this` on _batch() was correct') - t.equal(spy.getCall(2).args.length, 3, 'got three arguments') - t.equal(spy.getCall(2).args[0], expectedArray, 'got expected array argument') - t.ok(spy.getCall(2).args[1], 'options should not be null') - t.equal(spy.getCall(2).args[2], expectedCb, 'got expected callback argument') - t.end() -}) - -test('test chained batch() (array) extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , expectedOptions = { options: 1 } - , expectedArray = [ 1, 2 ] - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._batch = spy - - test = new Test('foobar') - - test.batch().put('foo', 'bar').del('bang').write(expectedCb) - - t.equal(spy.callCount, 1, 'got _batch() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _batch() was correct') - t.equal(spy.getCall(0).args.length, 3, 'got three arguments') - t.equal(spy.getCall(0).args[0].length, 2, 'got expected array argument') - t.deepEqual(spy.getCall(0).args[0][0], { type: 'put', key: 'foo', value: 'bar' }, 'got expected array argument[0]') - t.deepEqual(spy.getCall(0).args[0][1], { type: 'del', key: 'bang' }, 'got expected array argument[1]') - t.deepEqual(spy.getCall(0).args[1], {}, 'got expected options argument') - t.equal(spy.getCall(0).args[2], expectedCb, 'got expected callback argument') - - test.batch().put('foo', 'bar').del('bang').write(expectedOptions, expectedCb) - - t.equal(spy.callCount, 2, 'got _batch() call') - t.equal(spy.getCall(1).thisValue, test, '`this` on _batch() was correct') - t.equal(spy.getCall(1).args.length, 3, 'got three arguments') - t.equal(spy.getCall(1).args[0].length, 2, 'got expected array argument') - t.deepEqual(spy.getCall(1).args[0][0], { type: 'put', key: 'foo', value: 'bar' }, 'got expected array argument[0]') - t.deepEqual(spy.getCall(1).args[0][1], { type: 'del', key: 'bang' }, 'got expected array argument[1]') - t.deepEqual(spy.getCall(1).args[1], expectedOptions, 'got expected options argument') - t.equal(spy.getCall(1).args[2], expectedCb, 'got expected callback argument') - - t.end() -}) - -test('test chained batch() (custom _chainedBatch) extensibility', function (t) { - var spy = sinon.spy() - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._chainedBatch = spy - - test = new Test('foobar') - - test.batch() - - t.equal(spy.callCount, 1, 'got _chainedBatch() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _chainedBatch() was correct') - - test.batch() - - t.equal(spy.callCount, 2, 'got _chainedBatch() call') - t.equal(spy.getCall(1).thisValue, test, '`this` on _chainedBatch() was correct') - - t.end() -}) - -test('test AbstractChainedBatch extensibility', function (t) { - function Test (db) { - AbstractChainedBatch.call(this, db) - t.equal(this._db, db, 'db set on `this`') - t.end() - } - - util.inherits(Test, AbstractChainedBatch) - - new Test('foobar') -}) - -test('test write() extensibility', function (t) { - var spy = sinon.spy() - , spycb = sinon.spy() - , test - - function Test (db) { - AbstractChainedBatch.call(this, db) - } - - util.inherits(Test, AbstractChainedBatch) - - Test.prototype._write = spy - - test = new Test('foobar') - test.write(spycb) - - t.equal(spy.callCount, 1, 'got _write() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _write() was correct') - t.equal(spy.getCall(0).args.length, 1, 'got one argument') - // awkward here cause of nextTick & an internal wrapped cb - t.equal(typeof spy.getCall(0).args[0], 'function', 'got a callback function') - t.equal(spycb.callCount, 0, 'spycb not called') - spy.getCall(0).args[0]() - t.equal(spycb.callCount, 1, 'spycb called, i.e. was our cb argument') - t.end() -}) - -test('test put() extensibility', function (t) { - var spy = sinon.spy() - , expectedKey = 'key' - , expectedValue = 'value' - , returnValue - , test - - function Test (db) { - AbstractChainedBatch.call(this, db) - } - - util.inherits(Test, AbstractChainedBatch) - - Test.prototype._put = spy - - test = new Test(factory('foobar')) - returnValue = test.put(expectedKey, expectedValue) - t.equal(spy.callCount, 1, 'got _put call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _put() was correct') - t.equal(spy.getCall(0).args.length, 2, 'got two arguments') - t.equal(spy.getCall(0).args[0], expectedKey, 'got expected key argument') - t.equal(spy.getCall(0).args[1], expectedValue, 'got expected value argument') - t.equal(returnValue, test, 'get expected return value') - t.end() -}) - -test('test del() extensibility', function (t) { - var spy = sinon.spy() - , expectedKey = 'key' - , returnValue - , test - - function Test (db) { - AbstractChainedBatch.call(this, db) - } - - util.inherits(Test, AbstractChainedBatch) - - Test.prototype._del = spy - - test = new Test(factory('foobar')) - returnValue = test.del(expectedKey) - t.equal(spy.callCount, 1, 'got _del call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _del() was correct') - t.equal(spy.getCall(0).args.length, 1, 'got one argument') - t.equal(spy.getCall(0).args[0], expectedKey, 'got expected key argument') - t.equal(returnValue, test, 'get expected return value') - t.end() -}) - -test('test clear() extensibility', function (t) { - var spy = sinon.spy() - , returnValue - , test - - function Test (db) { - AbstractChainedBatch.call(this, db) - } - - util.inherits(Test, AbstractChainedBatch) - - Test.prototype._clear = spy - - test = new Test(factory('foobar')) - returnValue = test.clear() - t.equal(spy.callCount, 1, 'got _clear call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _clear() was correct') - t.equal(spy.getCall(0).args.length, 0, 'got zero arguments') - t.equal(returnValue, test, 'get expected return value') - t.end() -}) - -test('test iterator() extensibility', function (t) { - var spy = sinon.spy() - , expectedOptions = { options: 1, reverse: false, keys: true, values: true, limit: -1, keyAsBuffer: true, valueAsBuffer: true } - , test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._iterator = spy - - test = new Test('foobar') - test.iterator({ options: 1 }) - - t.equal(spy.callCount, 1, 'got _close() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _close() was correct') - t.equal(spy.getCall(0).args.length, 1, 'got one arguments') - t.deepEqual(spy.getCall(0).args[0], expectedOptions, 'got expected options argument') - t.end() -}) - -test('test AbstractIterator extensibility', function (t) { - function Test (db) { - AbstractIterator.call(this, db) - t.equal(this.db, db, 'db set on `this`') - t.end() - } - - util.inherits(Test, AbstractIterator) - - ;new Test('foobar') -}) - -test('test next() extensibility', function (t) { - var spy = sinon.spy() - , spycb = sinon.spy() - , test - - function Test (db) { - AbstractIterator.call(this, db) - } - - util.inherits(Test, AbstractIterator) - - Test.prototype._next = spy - - test = new Test('foobar') - test.next(spycb) - - t.equal(spy.callCount, 1, 'got _next() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _next() was correct') - t.equal(spy.getCall(0).args.length, 1, 'got one arguments') - // awkward here cause of nextTick & an internal wrapped cb - t.equal(typeof spy.getCall(0).args[0], 'function', 'got a callback function') - t.equal(spycb.callCount, 0, 'spycb not called') - spy.getCall(0).args[0]() - t.equal(spycb.callCount, 1, 'spycb called, i.e. was our cb argument') - t.end() -}) - -test('test end() extensibility', function (t) { - var spy = sinon.spy() - , expectedCb = function () {} - , test - - function Test (db) { - AbstractIterator.call(this, db) - } - - util.inherits(Test, AbstractIterator) - - Test.prototype._end = spy - - test = new Test('foobar') - test.end(expectedCb) - - t.equal(spy.callCount, 1, 'got _end() call') - t.equal(spy.getCall(0).thisValue, test, '`this` on _end() was correct') - t.equal(spy.getCall(0).args.length, 1, 'got one arguments') - t.equal(spy.getCall(0).args[0], expectedCb, 'got expected cb argument') - t.end() -}) - -test('isLevelDOWN', function (t) { - t.notOk(isLevelDOWN(), 'is not a leveldown') - t.notOk(isLevelDOWN(''), 'is not a leveldown') - t.notOk(isLevelDOWN({}), 'is not a leveldown') - t.notOk(isLevelDOWN({ put: function () {} }), 'is not a leveldown') - t.ok(isLevelDOWN(new AbstractLevelDOWN('location')), 'IS a leveldown') - t.ok(isLevelDOWN({ - open: function () {}, - close: function () {}, - get: function () {}, - put: function () {}, - del: function () {}, - batch: function () {}, - iterator: function () {} - }), 'IS a leveldown') - t.ok(isLevelDOWN({ - open: function () {}, - close: function () {}, - get: function () {}, - put: function () {}, - del: function () {}, - batch: function () {}, - approximateSize: function () {}, - iterator: function () {} - }), 'IS also a leveldown') - t.end() -}) - -test('.status', function (t) { - t.test('empty prototype', function (t) { - var test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - test = new Test('foobar') - t.equal(test.status, 'new') - - test.open(function (err) { - t.error(err) - t.equal(test.status, 'open') - - test.close(function (err) { - t.error(err) - t.equal(test.status, 'closed') - t.end() - }) - }) - }) - - t.test('open error', function (t) { - var test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._open = function (options, cb) { - cb(new Error) - } - - test = new Test('foobar') - test.open(function (err) { - t.ok(err) - t.equal(test.status, 'new') - t.end() - }) - }) - - t.test('close error', function (t) { - var test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._close = function (cb) { - cb(new Error) - } - - test = new Test('foobar') - test.open(function () { - test.close(function (err) { - t.ok(err) - t.equal(test.status, 'open') - t.end() - }) - }) - }) - - t.test('open', function (t) { - var test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._open = function (options, cb) { - process.nextTick(cb) - } - - test = new Test('foobar') - test.open(function (err) { - t.error(err) - t.equal(test.status, 'open') - t.end() - }) - t.equal(test.status, 'opening') - }) - - t.test('close', function (t) { - var test - - function Test (location) { - AbstractLevelDOWN.call(this, location) - } - - util.inherits(Test, AbstractLevelDOWN) - - Test.prototype._close = function (cb) { - process.nextTick(cb) - } - - test = new Test('foobar') - test.open(function (err) { - t.error(err) - test.close(function (err) { - t.error(err) - t.equal(test.status, 'closed') - t.end() - }) - t.equal(test.status, 'closing') - }) - }) -}) diff --git a/node_modules/abstract-leveldown/testCommon.js b/node_modules/abstract-leveldown/testCommon.js deleted file mode 100644 index 2d69b2e..0000000 --- a/node_modules/abstract-leveldown/testCommon.js +++ /dev/null @@ -1,75 +0,0 @@ -var path = require('path') - , fs = !process.browser && require('fs') - , rimraf = !process.browser && require('rimraf') - -var dbidx = 0 - - , location = function () { - return path.join(__dirname, '_leveldown_test_db_' + dbidx++) - } - - , lastLocation = function () { - return path.join(__dirname, '_leveldown_test_db_' + dbidx) - } - - , cleanup = function (callback) { - if (process.browser) - return callback() - - fs.readdir(__dirname, function (err, list) { - if (err) return callback(err) - - list = list.filter(function (f) { - return (/^_leveldown_test_db_/).test(f) - }) - - if (!list.length) - return callback() - - var ret = 0 - - list.forEach(function (f) { - rimraf(path.join(__dirname, f), function (err) { - if (++ret == list.length) - callback() - }) - }) - }) - } - - , setUp = function (t) { - cleanup(function (err) { - t.error(err, 'cleanup returned an error') - t.end() - }) - } - - , tearDown = function (t) { - setUp(t) // same cleanup! - } - - , collectEntries = function (iterator, callback) { - var data = [] - , next = function () { - iterator.next(function (err, key, value) { - if (err) return callback(err) - if (!arguments.length) { - return iterator.end(function (err) { - callback(err, data) - }) - } - data.push({ key: key, value: value }) - setTimeout(next, 0) - }) - } - next() - } - -module.exports = { - location : location - , cleanup : cleanup - , lastLocation : lastLocation - , setUp : setUp - , tearDown : tearDown - , collectEntries : collectEntries -} diff --git a/node_modules/aes-js/.npmignore b/node_modules/aes-js/.npmignore deleted file mode 100644 index c2658d7..0000000 --- a/node_modules/aes-js/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/node_modules/aes-js/LICENSE.txt b/node_modules/aes-js/LICENSE.txt deleted file mode 100644 index 8a40a38..0000000 --- a/node_modules/aes-js/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Richard Moore - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/node_modules/aes-js/README.md b/node_modules/aes-js/README.md deleted file mode 100644 index b5b4351..0000000 --- a/node_modules/aes-js/README.md +++ /dev/null @@ -1,306 +0,0 @@ -AES-JS -====== - -[![npm version](https://badge.fury.io/js/aes-js.svg)](https://badge.fury.io/js/aes-js) - -A pure JavaScript implementation of the AES block cipher algorithm and all common modes of operation (CBC, CFB, CTR, ECB and OFB). - -Features --------- - -- Pure JavaScript (with no dependencies) -- Supports all key sizes (128-bit, 192-bit and 256-bit) -- Supports all common modes of operation (CBC, CFB, CTR, ECB and OFB) -- Works in either node.js or web browsers - - -API -=== - -#### Node.js - -To install `aes-js` in your node.js project: - -``` -npm install aes-js -``` - -And to access it from within node, simply add: - -```javascript -var aesjs = require('aes-js'); -``` - -#### Web Browser - -To use `aes-js` in a web page, add the following: - -```html - -``` - -Keys ----- - -All keys must be 128 bits (16 bytes), 192 bits (24 bytes) or 256 bits (32 bytes) long. The API's work on either arrays or `Buffer` objects. - -```javascript -// 128-bit, 192-bit and 256-bit keys -var key_128 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; -var key_192 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23]; -var key_256 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31]; - -// or, similarly, with buffers (node.js only): -var key_128 = new Buffer([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]); -var key_192 = new Buffer([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23]); -var key_256 = new Buffer([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31]); - -``` - - -To generate keys from simple-to-remember passwords, consider using a password-based key-derivation function such as [scrypt](https://www.npmjs.com/search?q=scrypt) or [bcrypt](https://www.npmjs.com/search?q=bcrypt). - - -Common Modes of Operation -------------------------- - -There are several modes of operations, each with various pros and cons. In general though, the **CBC** and **CTR** modes are recommended. The **ECB is NOT recommended.**, and is included primarily for completeness. - -### CTR - Counter (recommended) - -```javascript -var key = aesjs.util.convertStringToBytes("Example128BitKey"); - -// Convert text to bytes -var text = 'Text may be any length you wish, no padding is required.'; -var textBytes = aesjs.util.convertStringToBytes(text); - -// The counter is optional, and if omitted will begin at 0 -var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); -var encryptedBytes = aesCtr.encrypt(textBytes); - -// The counter mode of operation maintains internal state, so to -// decrypt a new instance must be instantiated. -var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); -var decryptedBytes = aesCtr.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.util.convertBytesToString(decryptedBytes); -console.log(decryptedText); -// "Text may be any length you wish, no padding is required." -``` - - -### CBC - Cipher-Block Chaining (recommended) - -```javascript -var key = aesjs.util.convertStringToBytes("Example128BitKey"); - -// The initialization vector, which must be 16 bytes -var iv = aesjs.util.convertStringToBytes("IVMustBe16Bytes."); - -// Convert text to bytes -var text = 'TextMustBe16Byte'; -var textBytes = aesjs.util.convertStringToBytes(text); - -var aesCbc = new aesjs.ModeOfOperation.cbc(key, iv); -var encryptedBytes = aesCbc.encrypt(textBytes); - -// The cipher-block chaining mode of operation maintains internal -// state, so to decrypt a new instance must be instantiated. -var aesCbc = new aesjs.ModeOfOperation.cbc(key, iv); -var decryptedBytes = aesCbc.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.util.convertBytesToString(decryptedBytes); -console.log(decryptedText); -// "TextMustBe16Byte" -``` - - -### CFB - Cipher Feedback - -```javascript -var key = aesjs.util.convertStringToBytes("Example128BitKey"); - -// The initialization vector, which must be 16 bytes -var iv = aesjs.util.convertStringToBytes("IVMustBe16Bytes."); - -// Convert text to bytes -var text = 'TextMustBeAMultipleOfSegmentSize'; -var textBytes = aesjs.util.convertStringToBytes(text); - -// The segment size is optional, and defaults to 1 -var aesCfb = new aesjs.ModeOfOperation.cfb(key, iv, 8); -var encryptedBytes = aesCfb.encrypt(textBytes); - -// The cipher feedback mode of operation maintains internal state, -// so to decrypt a new instance must be instantiated. -var aesCfb = new aesjs.ModeOfOperation.cfb(key, iv, 8); -var decryptedBytes = aesCfb.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.util.convertBytesToString(decryptedBytes); -console.log(decryptedText); -// "TextMustBeAMultipleOfSegmentSize" -``` - - -### OFB - Output Feedback - -```javascript -var key = aesjs.util.convertStringToBytes("Example128BitKey"); - -// The initialization vector, which must be 16 bytes -var iv = aesjs.util.convertStringToBytes("IVMustBe16Bytes."); - -// Convert text to bytes -var text = 'Text may be any length you wish, no padding is required.'; -var textBytes = aesjs.util.convertStringToBytes(text); - -var aesOfb = new aesjs.ModeOfOperation.ofb(key, iv); -var encryptedBytes = aesOfb.encrypt(textBytes); - -// The output feedback mode of operation maintains internal state, -// so to decrypt a new instance must be instantiated. -var aesOfb = new aesjs.ModeOfOperation.ofb(key, iv); -var decryptedBytes = aesOfb.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.util.convertBytesToString(decryptedBytes); -console.log(decryptedText); -// "Text may be any length you wish, no padding is required." -``` - - -### ECB - Electronic Codebook (NOT recommended) - -This mode is **not** recommended. Since, for a given key, the same plaintext block in produces the same ciphertext block out, this mode of operation can leak data, such as patterns. For more details and examples, see the Wikipedia article, [Electronic Codebook](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29). - -```javascript -var key = aesjs.util.convertStringToBytes("Example128BitKey"); - -// Convert text to bytes -var text = 'TextMustBe16Byte'; -var textBytes = aesjs.util.convertStringToBytes(text); - -var aesEcb = new aesjs.ModeOfOperation.ecb(key); -var encryptedBytes = aesEcb.encrypt(textBytes); - -// Since electronic codebook does not store state, we can -// reuse the same instance. -//var aesEcb = new aesjs.ModeOfOperation.ecb(key); -var decryptedBytes = aesEcb.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.util.convertBytesToString(decryptedBytes); -console.log(decryptedText); -// "TextMustBe16Byte" -``` - - - -Block Cipher ------------- - -You should usually use one of the above common modes of operation. Using the block cipher algorithm directly is also possible using **ECB** as that mode of operation is merely a thin wrapper. - -But this might be useful to experiment with custom modes of operation or play with block cipher algorithms. - -```javascript - -// the AES block cipher algorithm works on 16 byte bloca ks, no more, no less -var text = "ABlockIs16Bytes!"; -var textAsBytes = aesjs.util.convertStringToBytes(text) -console.log(textAsBytes); -// [65, 66, 108, 111, 99, 107, 73, 115, 49, 54, 66, 121, 116, 101, 115, 33] - - -// create an instance of the block cipher algorithm -var key = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3]; -var aes = new aesjs.AES(key); - - -// encrypt... -var encryptedBytes = aes.encrypt(textAsBytes); -console.log(encryptedBytes); -// [136, 15, 199, 174, 118, 133, 233, 177, 143, 47, 42, 211, 96, 55, 107, 109] - - -// decrypt... -var decryptedBytes = aes.decrypt(encryptedBytes); -console.log(decryptedBytes); -// [65, 66, 108, 111, 99, 107, 73, 115, 49, 54, 66, 121, 116, 101, 115, 33] - - -// decode the bytes back into our original text -var decryptedText = aesjs.util.convertBytesToString(decryptedBytes); -console.log(decryptedText); -// "ABlockIs16Bytes!" -``` - - -Notes -===== - -What is a Key -------------- - -This seems to be a point of confusion for many people new to using encryption. You can think of the key as the *"password"*. However, these algorithms require the *"password"* to be a specific length. - -With AES, there are three possible key lengths, 128-bit (16 bytes), 192-bit (24 bytes) or 256-bit (32 bytes). When you create an AES object, the key size is automatically detected, so it is important to pass in a key of the correct length. - -Often, you wish to provide a password of arbitrary length, for example, something easy to remember or write down. In these cases, you must come up with a way to transform the password into a key of a specific length. A **Password-Based Key Derivation Function** (PBKDF) is an algorithm designed for this exact purpose. - -Here is an example, using the popular (possibly obsolete?) pbkdf2: - -```javascript -var pbkdf2 = require('pbkdf2'); - -var key_128 = pbkdf2.pbkdf2Sync('password', 'salt', 1, 128 / 8, 'sha512'); -var key_192 = pbkdf2.pbkdf2Sync('password', 'salt', 1, 192 / 8, 'sha512'); -var key_256 = pbkdf2.pbkdf2Sync('password', 'salt', 1, 256 / 8, 'sha512'); -``` - -Another possibility, is to use a hashing function, such as SHA256 to hash the password, but this method is vulnerable to [Rainbow Attacks](http://en.wikipedia.org/wiki/Rainbow_table), unless you use a [salt](http://en.wikipedia.org/wiki/Salt_(cryptography)). - -Performance ------------ - -Todo... - -Tests ------ - -A test suite has been generated (`test/test-vectors.json`) from a known correct implementation, [pycrypto](https://www.dlitz.net/software/pycrypto/). To generate new test vectors, run `python generate-tests.py`. - -To run the node.js test suite: - -``` -npm test -``` - -To run the web browser tests, open the `test/test.html` file in your browser. - -FAQ ---- - -#### How do I get a question I have added? - -E-mail me at aes-js@ricmoo.com with any questions, suggestions, comments, et cetera. - - -Donations ---------- - -Obviously, it's all licensed under the MIT license, so use it as you wish; but if you'd like to buy me a coffee, I won't complain. =) - -- Bitcoin - `1K1Ax9t6uJmjE4X5xcoVuyVTsiLrYRqe2P` -- Dogecoin - `DFhgqVuaboxFnGQssyX84ZuV5r6aBRz8QJ` -- Testnet3 - `n1F2Eb6cknqqknUPp7m9oBNMgXFuaDowvF` diff --git a/node_modules/aes-js/bower.json b/node_modules/aes-js/bower.json deleted file mode 100644 index 63b313d..0000000 --- a/node_modules/aes-js/bower.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "aes-js", - "description": "A pure JavaScript implementation of the AES block cipher and all common modes of operation.", - "main": "index.js", - "authors": [ - "Richard Moore " - ], - "license": "MIT", - "keywords": [ - "aes", - "aes-ctr", - "aes-ofb", - "aes-ecb", - "aes-cbc", - "aes-cfb", - "encrypt", - "decrypt", - "block", - "cipher" - ], - "homepage": "https://github.com/ricmoo/aes-js", - "moduleType": [ - "globals" - ], - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/node_modules/aes-js/generate-tests.py b/node_modules/aes-js/generate-tests.py deleted file mode 100644 index fd3e7e2..0000000 --- a/node_modules/aes-js/generate-tests.py +++ /dev/null @@ -1,118 +0,0 @@ -# The MIT License (MIT) -# -# Copyright (c) 2014 Richard Moore -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - - -# This file is a modified version of the test suite for pyaes (https://www.github.com/ricmoo/pyaes/) - - -import json - -class NoIndent(object): - def __init__(self, value): - self.value = value - -def default(o, encoder=json.JSONEncoder()): - if isinstance(o, NoIndent): - return '__' + json.dumps(o.value) + '__' - return encoder.default(o) - - -import os, time - -Tests = [] - -# compare against a known working implementation -from Crypto.Cipher import AES as KAES -from Crypto.Util import Counter as KCounter -for mode in [ 'CBC', 'CTR', 'CFB', 'ECB', 'OFB' ]: - - (tt_ksetup, tt_kencrypt, tt_kdecrypt) = (0.0, 0.0, 0.0) - (tt_setup, tt_encrypt, tt_decrypt) = (0.0, 0.0, 0.0) - count = 0 - - for key_size in (128, 192, 256): - - for test in xrange(1, 8): - key = os.urandom(key_size // 8) - - iv = None - segment_size = None - - if mode == 'CBC': - iv = os.urandom(16) - plaintext = [ os.urandom(16) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_CBC, IV = iv) - kaes2 = KAES.new(key, KAES.MODE_CBC, IV = iv) - - elif mode == 'CFB': - iv = os.urandom(16) - plaintext = [ os.urandom(test * 5) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_CFB, IV = iv, segment_size = test * 8) - kaes2 = KAES.new(key, KAES.MODE_CFB, IV = iv, segment_size = test * 8) - - segment_size = test - - elif mode == 'ECB': - plaintext = [ os.urandom(16) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_ECB) - kaes2 = KAES.new(key, KAES.MODE_ECB) - - elif mode == 'OFB': - iv = os.urandom(16) - plaintext = [ os.urandom(16) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_OFB, IV = iv) - kaes2 = KAES.new(key, KAES.MODE_OFB, IV = iv) - - elif mode == 'CTR': - text_length = [None, 3, 16, 127, 128, 129, 1500, 10000, 100000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008][test] - if test < 6: - plaintext = [ os.urandom(text_length) ] - else: - plaintext = [ os.urandom(text_length) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_CTR, counter = KCounter.new(128, initial_value = 0)) - kaes2 = KAES.new(key, KAES.MODE_CTR, counter = KCounter.new(128, initial_value = 0)) - - count += 1 - - kenc = [kaes.encrypt(p) for p in plaintext] - - iv_enc = None - if iv: - iv_enc = NoIndent([ord(x) for x in iv]) - Tests.append(dict( - encrypted = [NoIndent([ord(x) for x in chunk]) for chunk in kenc], - iv = iv_enc, - key = NoIndent([ord(x) for x in key]), - modeOfOperation = mode.lower(), - plaintext = [NoIndent([ord(x) for x in chunk]) for chunk in plaintext], - segmentSize = segment_size, - )) - - dt1 = [kaes2.decrypt(k) for k in kenc] - -print json.dumps(Tests, indent = 4, sort_keys = True, default = default).replace('"__', '').replace('__"', '') - diff --git a/node_modules/aes-js/index.js b/node_modules/aes-js/index.js deleted file mode 100644 index 70da76b..0000000 --- a/node_modules/aes-js/index.js +++ /dev/null @@ -1,664 +0,0 @@ -"use strict"; - -(function() { - var root = this; - var previous_mymodule = root.mymodule; - - var createBuffer = null, convertBytesToString, convertStringToBytes = null; - - var slowCreateBuffer = function(arg) { - - // Passed in a single number, the length to pre-allocate - if (typeof arg === 'number') { - var result = []; - for (var i = 0; i < arg; i++) { - result.push(0); - } - return result; - - } else { - // Make sure they are passing sensible data - for (var i = 0; i < arg.length; i++) { - if (arg[i] < 0 || arg[i] >= 256 || typeof arg[i] !== 'number') { - throw new Error('invalid byte at index ' + i + '(' + arg[i] + ')'); - } - } - - // Most array-like things should support this - if (arg.slice) { - return arg.slice(0); - } - - // Something *weird*; copy it into an array (see PR#2) - var result = []; - for (var i = 0; i < arg.length; i++) { - result.push(arg[i]); - } - return result; - } - } - - if (typeof(Buffer) === 'undefined') { - createBuffer = slowCreateBuffer; - - Array.prototype.copy = function(targetArray, targetStart, sourceStart, sourceEnd) { - if (targetStart == null) { targetStart = 0; } - if (sourceStart == null) { sourceStart = 0; } - if (sourceEnd == null) { sourceEnd = this.length; } - for (var i = sourceStart; i < sourceEnd; i++) { - targetArray[targetStart++] = this[i]; - } - } - - convertStringToBytes = function(text, encoding) { - - // "utf8", "utf-8", "utf 8", etc - if (encoding == null || encoding.toLowerCase().replace(/ |-/g, "") == 'utf8') { - var result = [], i = 0; - text = encodeURI(text); - while (i < text.length) { - var c = text.charCodeAt(i++); - - // if it is a % sign, encode the following 2 bytes as a hex value - if (c === 37) { - result.push(parseInt(text.substr(i, 2), 16)) - i += 2; - - // otherwise, just the actual byte - } else { - result.push(c) - } - } - - return result; - - // "hex" - } else if (encoding.toLowerCase() == 'hex') { - var result = []; - for (var i = 0; i < text.length; i += 2) { - result.push(parseInt(text.substr(i, 2), 16)); - } - - return result; - } - - // @TODO: Base64... - - return null; - } - - // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html - var Hex = '0123456789abcdef'; - convertBytesToString = function(bytes, encoding) { - - // "utf8", "utf-8", "utf 8", etc - if (encoding == null || encoding.toLowerCase().replace(/ |-/g, "") == 'utf8') { - var result = [], i = 0; - - while (i < bytes.length) { - var c = bytes[i]; - - if (c < 128) { - result.push(String.fromCharCode(c)); - i++; - } else if (c > 191 && c < 224) { - result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f))); - i += 2; - } else { - result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f))); - i += 3; - } - } - - return result.join(''); - - // "hex" - } else if (encoding.toLowerCase() == 'hex') { - var result = []; - for (var i = 0; i < bytes.length; i++) { - var v = bytes[i]; - result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]); - } - return result.join(''); - } - - return result - } - - } else { - createBuffer = function(arg) { return new Buffer(arg); } - convertStringToBytes = function(text, encoding) { - return new Buffer(text, encoding); - } - - convertBytesToString = function(bytes, encoding) { - return (new Buffer(bytes)).toString(encoding); - } - } - - - // Number of rounds by keysize - var numberOfRounds = {16: 10, 24: 12, 32: 14} - - // Round constant words - var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; - - // S-box and Inverse S-box (S is for Substitution) - var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; - var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; - - // Transformations for encryption - var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a]; - var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616]; - var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16]; - var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c]; - - // Transformations for decryption - var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742]; - var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857]; - var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8]; - var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0]; - - // Transformations for decryption key expansion - var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]; - var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697]; - var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46]; - var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d]; - - - function convertToInt32(bytes) { - var result = []; - for (var i = 0; i < bytes.length; i += 4) { - result.push( - (bytes[i ] << 24) | - (bytes[i + 1] << 16) | - (bytes[i + 2] << 8) | - bytes[i + 3] - ); - } - return result; - } - - - - - var AES = function(key) { - this.key = createBuffer(key); - this._prepare(); - } - - - AES.prototype._prepare = function() { - - var rounds = numberOfRounds[this.key.length]; - if (rounds == null) { - throw new Error('invalid key size (must be length 16, 24 or 32)'); - } - - // encryption round keys - this._Ke = []; - - // decryption round keys - this._Kd = []; - - for (var i = 0; i <= rounds; i++) { - this._Ke.push([0, 0, 0, 0]); - this._Kd.push([0, 0, 0, 0]); - } - - var roundKeyCount = (rounds + 1) * 4; - var KC = this.key.length / 4; - - // convert the key into ints - var tk = convertToInt32(this.key); - - // copy values into round key arrays - var index; - for (var i = 0; i < KC; i++) { - index = i >> 2; - this._Ke[index][i % 4] = tk[i]; - this._Kd[rounds - index][i % 4] = tk[i]; - } - - // key expansion (fips-197 section 5.2) - var rconpointer = 0; - var t = KC, tt; - while (t < roundKeyCount) { - tt = tk[KC - 1]; - tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^ - (S[(tt >> 8) & 0xFF] << 16) ^ - (S[ tt & 0xFF] << 8) ^ - S[(tt >> 24) & 0xFF] ^ - (rcon[rconpointer] << 24)); - rconpointer += 1; - - // key expansion (for non-256 bit) - if (KC != 8) { - for (var i = 1; i < KC; i++) { - tk[i] ^= tk[i - 1]; - } - - // key expansion for 256-bit keys is "slightly different" (fips-197) - } else { - for (var i = 1; i < (KC / 2); i++) { - tk[i] ^= tk[i - 1]; - } - tt = tk[(KC / 2) - 1]; - - tk[KC / 2] ^= (S[ tt & 0xFF] ^ - (S[(tt >> 8) & 0xFF] << 8) ^ - (S[(tt >> 16) & 0xFF] << 16) ^ - (S[(tt >> 24) & 0xFF] << 24)); - - for (var i = (KC / 2) + 1; i < KC; i++) { - tk[i] ^= tk[i - 1]; - } - } - - // copy values into round key arrays - var i = 0, r, c; - while (i < KC && t < roundKeyCount) { - r = t >> 2; - c = t % 4; - this._Ke[r][c] = tk[i]; - this._Kd[rounds - r][c] = tk[i++]; - t++; - } - } - - // inverse-cipher-ify the decryption round key (fips-197 section 5.3) - for (var r = 1; r < rounds; r++) { - for (var c = 0; c < 4; c++) { - tt = this._Kd[r][c]; - this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^ - U2[(tt >> 16) & 0xFF] ^ - U3[(tt >> 8) & 0xFF] ^ - U4[ tt & 0xFF]); - } - } - } - - AES.prototype.encrypt = function(plaintext) { - if (plaintext.length != 16) { - return new Error('plaintext must be a block of size 16'); - } - - var rounds = this._Ke.length - 1; - var a = [0, 0, 0, 0]; - - // convert plaintext to (ints ^ key) - var t = convertToInt32(plaintext); - for (var i = 0; i < 4; i++) { - t[i] ^= this._Ke[0][i]; - } - - // apply round transforms - for (var r = 1; r < rounds; r++) { - for (var i = 0; i < 4; i++) { - a[i] = (T1[(t[ i ] >> 24) & 0xff] ^ - T2[(t[(i + 1) % 4] >> 16) & 0xff] ^ - T3[(t[(i + 2) % 4] >> 8) & 0xff] ^ - T4[ t[(i + 3) % 4] & 0xff] ^ - this._Ke[r][i]); - } - t = a.slice(0); - } - - // the last round is special - var result = createBuffer(16), tt; - for (var i = 0; i < 4; i++) { - tt = this._Ke[rounds][i]; - result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; - result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; - result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; - result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff; - } - - return result; - } - - AES.prototype.decrypt = function(ciphertext) { - if (ciphertext.length != 16) { - return new Error('ciphertext must be a block of size 16'); - } - - var rounds = this._Kd.length - 1; - var a = [0, 0, 0, 0]; - - // convert plaintext to (ints ^ key) - var t = convertToInt32(ciphertext); - for (var i = 0; i < 4; i++) { - t[i] ^= this._Kd[0][i]; - } - - // apply round transforms - for (var r = 1; r < rounds; r++) { - for (var i = 0; i < 4; i++) { - a[i] = (T5[(t[ i ] >> 24) & 0xff] ^ - T6[(t[(i + 3) % 4] >> 16) & 0xff] ^ - T7[(t[(i + 2) % 4] >> 8) & 0xff] ^ - T8[ t[(i + 1) % 4] & 0xff] ^ - this._Kd[r][i]); - } - t = a.slice(0); - } - - // the last round is special - var result = createBuffer(16), tt; - for (var i = 0; i < 4; i++) { - tt = this._Kd[rounds][i]; - result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; - result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; - result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; - result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff; - } - - return result; - } - - - /** - * Mode Of Operation - Electonic Codebook (ECB) - */ - var ModeOfOperationECB = function(key) { - this.description = "Electronic Code Block"; - this.name = "ecb"; - - this._aes = new AES(key); - } - - ModeOfOperationECB.prototype.encrypt = function(plaintext) { - return this._aes.encrypt(plaintext); - } - - ModeOfOperationECB.prototype.decrypt = function(ciphertext, encoding) { - return this._aes.decrypt(ciphertext); - } - - - /** - * Mode Of Operation - Cipher Block Chaining (CBC) - */ - var ModeOfOperationCBC = function(key, iv) { - this.description = "Cipher Block Chaining"; - this.name = "cbc"; - - if (iv === null) { - iv = createBuffer([0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - } else if (iv.length != 16) { - return new Error('initialation vector iv must be of length 16'); - } - - this._lastCipherblock = createBuffer(iv); - - this._aes = new AES(key); - } - - ModeOfOperationCBC.prototype.encrypt = function(plaintext) { - if (plaintext.length != 16) { - return new Error('plaintext must be a block of size 16'); - } - - var precipherblock = createBuffer(plaintext); - for (var i = 0; i < 16; i++) { - precipherblock[i] ^= this._lastCipherblock[i]; - } - - this._lastCipherblock = this._aes.encrypt(precipherblock); - - return this._lastCipherblock; - } - - ModeOfOperationCBC.prototype.decrypt = function(ciphertext) { - if (ciphertext.length != 16) { - return new Error('ciphertext must be a block of size 16'); - } - - var plaintext = this._aes.decrypt(ciphertext); - for (var i = 0; i < 16; i++) { - plaintext[i] ^= this._lastCipherblock[i]; - } - - ciphertext.copy(this._lastCipherblock); - - return plaintext; - } - - - /** - * Mode Of Operation - Cipher Feedback (CFB) - */ - var ModeOfOperationCFB = function(key, iv, segmentSize) { - this.description = "Cipher Feedback"; - this.name = "cfb"; - - if (iv === null) { - iv = createBuffer([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - } else if (iv.length != 16) { - return new Error('initialation vector iv must be of length 16'); - } - - if (!segmentSize) { segmentSize = 1; } - - this.segmentSize = segmentSize; - - this._shiftRegister = createBuffer(iv); - - this._aes = new AES(key); - } - - ModeOfOperationCFB.prototype.encrypt = function(plaintext) { - if ((plaintext.length % this.segmentSize) != 0) { - return new Error('plaintext must be a block of size module segmentSize (' + this.segmentSize + ')'); - } - - var encrypted = createBuffer(plaintext); - - var xorSegment; - for (var i = 0; i < encrypted.length; i += this.segmentSize) { - xorSegment = this._aes.encrypt(this._shiftRegister); - for (var j = 0; j < this.segmentSize; j++) { - encrypted[i + j] ^= xorSegment[j]; - } - - // Shift the register - this._shiftRegister.copy(this._shiftRegister, 0, this.segmentSize); - encrypted.copy(this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); - } - - return encrypted; - } - - ModeOfOperationCFB.prototype.decrypt = function(ciphertext) { - if ((ciphertext.length % this.segmentSize) != 0) { - return new Error('ciphertext must be a block of size module segmentSize (' + this.segmentSize + ')'); - } - - var plaintext = createBuffer(ciphertext); - - var xorSegment; - for (var i = 0; i < plaintext.length; i += this.segmentSize) { - xorSegment = this._aes.encrypt(this._shiftRegister); - - for (var j = 0; j < this.segmentSize; j++) { - plaintext[i + j] ^= xorSegment[j]; - } - - // Shift the register - this._shiftRegister.copy(this._shiftRegister, 0, this.segmentSize); - ciphertext.copy(this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); - } - - return plaintext; - } - - /** - * Mode Of Operation - Output Feedback (OFB) - */ - var ModeOfOperationOFB = function(key, iv) { - this.description = "Output Feedback"; - this.name = "ofb"; - - if (iv === null) { - iv = createBuffer([0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - } else if (iv.length != 16) { - return new Error('initialation vector iv must be of length 16'); - } - - this._lastPrecipher = createBuffer(iv); - this._lastPrecipherIndex = 16; - - this._aes = new AES(key); - } - - ModeOfOperationOFB.prototype.encrypt = function(plaintext) { - var encrypted = createBuffer(plaintext); - - for (var i = 0; i < encrypted.length; i++) { - if (this._lastPrecipherIndex === 16) { - this._lastPrecipher = this._aes.encrypt(this._lastPrecipher); - this._lastPrecipherIndex = 0; - } - encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++]; - } - - return encrypted; - } - - // Decryption is symetric - ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt; - - - /** - * Counter object for CTR common mode of operation - */ - var Counter = function(initialValue) { - if (initialValue === null || initialValue === undefined) { initialValue = 1; } - - if (typeof(initialValue) === 'number') { - this._counter = createBuffer([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - this.setValue(initialValue); - - } else { - this.setBytes(initialValue); - } - } - - Counter.prototype.setValue = function(value) { - if (typeof(value) !== 'number') { - throw new Error('value must be a number'); - } - - for (var index = 15; index >= 0; --index) { - this._counter[index] = value % 256; - value = value >> 8; - } - } - - Counter.prototype.setBytes = function(bytes) { - if (bytes.length != 16) { - throw new Error('invalid counter bytes size (must be 16)'); - } - this._counter = createBuffer(bytes); - }; - - Counter.prototype.increment = function() { - for (var i = 15; i >= 0; i--) { - if (this._counter[i] === 255) { - this._counter[i] = 0; - } else { - this._counter[i]++; - break; - } - } - } - - - /** - * Mode Of Operation - Counter (CTR) - */ - var ModeOfOperationCTR = function(key, counter) { - this.description = "Counter"; - this.name = "ctr"; - - if (counter === null) { - counter = new Counter() - } - - this._counter = counter; - - this._remainingCounter = null; - this._remainingCounterIndex = 16; - - this._aes = new AES(key); - } - - ModeOfOperationCTR.prototype.encrypt = function(plaintext) { - var encrypted = createBuffer(plaintext); - - for (var i = 0; i < encrypted.length; i++) { - if (this._remainingCounterIndex === 16) { - this._remainingCounter = this._aes.encrypt(this._counter._counter); - this._remainingCounterIndex = 0; - this._counter.increment(); - } - encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++]; - } - - return encrypted; - } - - // Decryption is symetric - ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt; - - - // The bsic modes of operation as a map - var ModeOfOperation = { - ecb: ModeOfOperationECB, - cbc: ModeOfOperationCBC, - cfb: ModeOfOperationCFB, - ofb: ModeOfOperationOFB, - ctr: ModeOfOperationCTR - }; - - - /////////////////////// - // Exports - - - // The block cipher - var aesjs = { - AES: AES, - Counter: Counter, - ModeOfOperation: ModeOfOperation, - util: { - convertBytesToString: convertBytesToString, - convertStringToBytes: convertStringToBytes, - _slowCreateBuffer: slowCreateBuffer - } - }; - - - - if(typeof exports !== 'undefined') { - exports.AES = AES; - exports.Counter = Counter; - exports.ModeOfOperation = ModeOfOperation; - exports.util = { - convertBytesToString: convertBytesToString, - convertStringToBytes: convertStringToBytes, - _slowCreateBuffer: slowCreateBuffer - } - /* - if(typeof module !== 'undefined' && module.exports) { - exports = module.exports = export; - } - exports.mymodule = mymodule; - */ - - } else { - root.aesjs = aesjs; - } - - -}).call(this); diff --git a/node_modules/aes-js/package.json b/node_modules/aes-js/package.json deleted file mode 100644 index 75e5428..0000000 --- a/node_modules/aes-js/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "_args": [ - [ - "aes-js@^0.2.3", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet" - ] - ], - "_from": "aes-js@>=0.2.3 <0.3.0", - "_id": "aes-js@0.2.4", - "_inCache": true, - "_installable": true, - "_location": "/aes-js", - "_nodeVersion": "0.12.0", - "_npmOperationalInternal": { - "host": "packages-5-east.internal.npmjs.com", - "tmp": "tmp/aes-js-0.2.4.tgz_1456558944058_0.594102936796844" - }, - "_npmUser": { - "email": "me@ricmoo.com", - "name": "ricmoo" - }, - "_npmVersion": "2.5.1", - "_phantomChildren": {}, - "_requested": { - "name": "aes-js", - "raw": "aes-js@^0.2.3", - "rawSpec": "^0.2.3", - "scope": null, - "spec": ">=0.2.3 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-wallet" - ], - "_resolved": "https://registry.npmjs.org/aes-js/-/aes-js-0.2.4.tgz", - "_shasum": "94b881ab717286d015fa219e08fb66709dda5a3d", - "_shrinkwrap": null, - "_spec": "aes-js@^0.2.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet", - "author": { - "email": "me@ricmoo.com", - "name": "Richard Moore" - }, - "bugs": { - "email": "github@ricmoo.com", - "url": "http://github.com/ricmoo/aes-js/issues" - }, - "dependencies": {}, - "description": "A pure JavaScript implementation of the AES block cipher and all common modes of operation.", - "devDependencies": { - "nodeunit": "0.9.1" - }, - "directories": {}, - "dist": { - "shasum": "94b881ab717286d015fa219e08fb66709dda5a3d", - "tarball": "https://registry.npmjs.org/aes-js/-/aes-js-0.2.4.tgz" - }, - "gitHead": "79f330d770d536d1fbb7c0845b41b60f05e5e385", - "homepage": "https://github.com/ricmoo/aes-js", - "keywords": [ - "aes", - "aes-ctr", - "aes-ofb", - "aes-ecb", - "aes-cbc", - "aes-cfb", - "encrypt", - "decrypt", - "block", - "cipher" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "me@ricmoo.com", - "name": "ricmoo" - } - ], - "name": "aes-js", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/ricmoo/aes-js.git" - }, - "scripts": { - "test": "node test/test-aes.js && node test/test-counter.js && node test/test-buffer.js" - }, - "version": "0.2.4" -} diff --git a/node_modules/aes-js/package.json2 b/node_modules/aes-js/package.json2 deleted file mode 100644 index 81c979f..0000000 --- a/node_modules/aes-js/package.json2 +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "aes-js", - "version": "0.0.1", - "bugs": { - "url" : "http://github.com/ricmoo/aes-js/issues", - "email" : "aes-js@ricmoo.com" - }, - "description": "A pure JavaScript implementation of the AES block cipher and all common modes of operation.", - "devDependencies": { - "nodeunit": "0.9.1" - }, - "main": "index.js", - "scripts": { - "test": "node test/test-aes.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/ricmoo/aes-js.git" - }, - "keywords": [ - "aes", - "aes-ctr", "aes-ofb", "aes-ecb", "aes-cbc", "aes-cfb", - "encrypt", "decrypt", - "block", "cipher" - ], - "author": "Richard Moore (http://www.ricmoo.com)", - "license": "MIT" -} diff --git a/node_modules/aes-js/test/test-aes.js b/node_modules/aes-js/test/test-aes.js deleted file mode 100644 index 7160c16..0000000 --- a/node_modules/aes-js/test/test-aes.js +++ /dev/null @@ -1,83 +0,0 @@ -var nodeunit = require('nodeunit'); - -var aes = require('../index'); - -function bufferEquals(a, b) { - if (a.length != b.length) { return false; } - for (var i = 0; i < a.length; i++) { - if (a[i] != b[i]) { return false; } - } - return true; -} - -function makeTest(options) { - - var modeOfOperation = options.modeOfOperation; - var mo = aes.ModeOfOperation[modeOfOperation]; - - var plaintext = []; - for (var i = 0; i < options.plaintext.length; i++) { - plaintext.push(new Buffer(options.plaintext[i])); - } - - var key = new Buffer(options.key); - - var iv = null; - if (options.iv) { iv = new Buffer(options.iv); } - - var segmentSize = 0; - if (options.segmentSize) { segmentSize = options.segmentSize; } - - var ciphertext = []; - for (var i = 0; i < options.encrypted.length; i++) { - ciphertext.push(new Buffer(options.encrypted[i])); - } - - - return function (test) { - var func; - switch (modeOfOperation) { - case 'ecb': - func = function() { return new mo(key); } - break; - case 'cfb': - func = function() { return new mo(key, iv, segmentSize); } - break; - case 'ofb': - case 'cbc': - func = function() { return new mo(key, iv); } - break; - case 'ctr': - func = function() { return new mo(key, new aes.Counter(0)); } - break; - default: - throw new Error('unknwon mode of operation') - } - - var encrypter = func(), decrypter = func(); - var totalDiffers = 0; - for (var i = 0; i < plaintext.length; i++) { - var ciphertext2 = encrypter.encrypt(plaintext[i]); - test.ok(bufferEquals(ciphertext2, ciphertext[i]), "encrypt failed to match test vector"); - - var plaintext2 = decrypter.decrypt(ciphertext2); - test.ok(bufferEquals(plaintext2, plaintext[i]), "decrypt failed to match original text"); - } - - test.done(); - }; -}; - - -var testVectors = require('./test-vectors.json'); - -var Tests = {}; - -for (var i = 0; i < testVectors.length; i++) { - var test = testVectors[i]; - name = 'test-' + test.modeOfOperation + '-' + test.key.length; - if (!Tests[name]) { Tests[name] = {}; } - Tests[name]['test-' + Object.keys(Tests[name]).length] = makeTest(test); -} - -nodeunit.reporters.default.run(Tests); diff --git a/node_modules/aes-js/test/test-buffer.js b/node_modules/aes-js/test/test-buffer.js deleted file mode 100644 index d06c278..0000000 --- a/node_modules/aes-js/test/test-buffer.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var nodeunit = require('nodeunit'); - -var slowCreateBuffer = require('../index').util._slowCreateBuffer; - -var testArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; -var testBuffer = new Buffer(testArray); - -// We mimic some weird non-array-but-sortof-like-an-array object that people on -// obscure browsers seem to have problems with, for the purpose of testing our -// slowCreateBuffer. -function WeirdBuffer(data) { - this.length = data.length; - for (var i = 0; i < data.length; i++) { - this[i] = data[i]; - } -} - -function buffersEqual(a, b) { - if (a.length !== b.length) { return false; } - for (var i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - return true; -} - -nodeunit.reporters.default.run({ - "test-buffer": { - "slowCreate": function(test) { - //var result = new AES(testArray).key; - var result = slowCreateBuffer(testArray); - test.ok(buffersEqual(testArray, result), 'bufferCreate failed to match input array'); - - result = slowCreateBuffer(testBuffer); - test.ok(buffersEqual(testBuffer, result), 'bufferCreate failed to match input array'); - - result = slowCreateBuffer(new WeirdBuffer(testArray)); - test.ok(buffersEqual(testBuffer, result), 'bufferCreate failed to match input array'); - - test.done(); - }, - }, -}); diff --git a/node_modules/aes-js/test/test-counter.js b/node_modules/aes-js/test/test-counter.js deleted file mode 100644 index 60862d4..0000000 --- a/node_modules/aes-js/test/test-counter.js +++ /dev/null @@ -1,79 +0,0 @@ -var nodeunit = require('nodeunit'); - -var aes = require('../index'); - -function bufferEquals(a, b) { - if (a.length != b.length) { return false; } - for (var i = 0; i < a.length; i++) { - if (a[i] != b[i]) { return false; } - } - return true; -} - -function makeTest (options) { - return function(test) { - var result = new Buffer(options.incrementResult, 'hex'); - - if (options.hasOwnProperty('number')) { - - var counter = new aes.Counter(options.number); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to initialize with a number") - - counter.setValue(options.number); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to reset to a number") - - counter = new aes.Counter(); - counter.setValue(options.number); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to reset to a number") - } - - if (options.bytes) { - var bytes = new Buffer(options.bytes, 'hex'); - - var counter = new aes.Counter(bytes); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to initialize with bytes") - - counter.setBytes(bytes); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to reset with bytes") - - counter = new aes.Counter(); - counter.setBytes(bytes); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to reset with bytes") - } - - test.done(); - }; -} - -var Tests = { - 'test-counter-number': { - 'test-0': makeTest({number: 0, incrementResult: "00000000000000000000000000000001"}), - 'test-1': makeTest({number: 1, incrementResult: "00000000000000000000000000000002"}), - 'test-254': makeTest({number: 254, incrementResult: "000000000000000000000000000000ff"}), - 'test-255': makeTest({number: 255, incrementResult: "00000000000000000000000000000100"}), - 'test-256': makeTest({number: 256, incrementResult: "00000000000000000000000000000101"}), - }, - 'test-counter-bytes': { - 'test-0000': makeTest({bytes: "00000000000000000000000000000000", incrementResult: "00000000000000000000000000000001"}), - 'test-00ff': makeTest({bytes: "000000000000000000000000000000ff", incrementResult: "00000000000000000000000000000100"}), - 'test-ffff': makeTest({bytes: "ffffffffffffffffffffffffffffffff", incrementResult: "00000000000000000000000000000000"}), - 'test-dead': makeTest({bytes: "deadbeefdeadbeefdeadbeefdeadbeef", incrementResult: "deadbeefdeadbeefdeadbeefdeadbef0"}), - }, -}; - -/* -for (var i = 0; i < testVectors.length; i++) { - var test = testVectors[i]; - name = 'test-' + test.modeOfOperation + '-' + test.key.length; - if (!Tests[name]) { Tests[name] = {}; } - Tests[name]['test-' + Object.keys(Tests[name]).length] = makeTest(test); -} -*/ -nodeunit.reporters.default.run(Tests); - diff --git a/node_modules/aes-js/test/test-vectors.json b/node_modules/aes-js/test/test-vectors.json deleted file mode 100644 index 11fdeb9..0000000 --- a/node_modules/aes-js/test/test-vectors.json +++ /dev/null @@ -1,1832 +0,0 @@ -[ - { - "encrypted": [ - [185, 45, 125, 155, 56, 67, 207, 67, 72, 63, 200, 125, 36, 177, 160, 92] - ], - "iv": [41, 78, 69, 47, 105, 119, 224, 125, 160, 80, 195, 2, 17, 232, 81, 201], - "key": [248, 132, 82, 195, 95, 20, 64, 65, 139, 134, 130, 139, 171, 64, 175, 190], - "modeOfOperation": "cbc", - "plaintext": [ - [187, 113, 210, 195, 21, 202, 232, 85, 235, 137, 99, 187, 207, 234, 195, 253] - ], - "segmentSize": null - }, - { - "encrypted": [ - [83, 17, 230, 180, 16, 13, 45, 185, 235, 45, 151, 250, 213, 1, 48, 143], - [203, 213, 42, 101, 200, 246, 34, 149, 48, 56, 97, 39, 80, 5, 92, 35] - ], - "iv": [127, 145, 12, 189, 154, 60, 97, 79, 238, 62, 13, 23, 100, 174, 27, 95], - "key": [108, 152, 240, 226, 150, 13, 143, 54, 245, 88, 76, 126, 30, 235, 51, 205], - "modeOfOperation": "cbc", - "plaintext": [ - [155, 40, 21, 210, 152, 41, 51, 141, 9, 120, 33, 126, 165, 228, 159, 106], - [53, 195, 228, 122, 134, 57, 136, 41, 63, 251, 77, 46, 9, 143, 172, 239] - ], - "segmentSize": null - }, - { - "encrypted": [ - [19, 45, 86, 110, 93, 25, 67, 116, 225, 70, 154, 122, 44, 10, 161, 59], - [65, 195, 75, 118, 45, 187, 239, 212, 82, 106, 134, 23, 230, 48, 101, 79], - [171, 91, 240, 129, 236, 157, 117, 7, 58, 121, 146, 246, 77, 58, 56, 131] - ], - "iv": [193, 33, 222, 91, 238, 81, 130, 60, 79, 163, 64, 189, 242, 147, 140, 21], - "key": [213, 138, 180, 231, 43, 112, 69, 56, 105, 238, 44, 122, 130, 192, 183, 34], - "modeOfOperation": "cbc", - "plaintext": [ - [199, 202, 139, 230, 200, 245, 23, 13, 31, 193, 161, 182, 225, 255, 100, 47], - [215, 52, 215, 41, 26, 249, 173, 214, 202, 157, 67, 129, 47, 4, 150, 155], - [196, 162, 68, 230, 87, 99, 84, 152, 239, 238, 118, 227, 114, 91, 141, 149] - ], - "segmentSize": null - }, - { - "encrypted": [ - [222, 192, 189, 118, 40, 90, 156, 74, 211, 163, 229, 236, 145, 70, 2, 229], - [224, 200, 200, 140, 8, 1, 254, 76, 82, 242, 0, 155, 112, 42, 4, 4], - [29, 51, 153, 78, 112, 19, 52, 112, 95, 225, 223, 171, 194, 25, 83, 48], - [45, 163, 171, 190, 231, 76, 86, 72, 38, 223, 190, 163, 201, 59, 247, 70] - ], - "iv": [147, 2, 91, 241, 29, 21, 181, 27, 171, 221, 49, 241, 197, 78, 19, 99], - "key": [250, 62, 109, 55, 107, 42, 168, 254, 31, 184, 177, 52, 171, 224, 56, 137], - "modeOfOperation": "cbc", - "plaintext": [ - [247, 235, 120, 201, 165, 136, 219, 15, 60, 18, 2, 151, 211, 209, 97, 67], - [158, 65, 196, 46, 146, 220, 190, 177, 116, 72, 227, 201, 18, 165, 144, 247], - [205, 143, 122, 210, 17, 178, 105, 246, 193, 130, 244, 228, 177, 80, 214, 5], - [180, 208, 2, 44, 214, 100, 43, 31, 118, 176, 182, 91, 98, 126, 152, 56] - ], - "segmentSize": null - }, - { - "encrypted": [ - [117, 33, 39, 131, 33, 255, 250, 9, 55, 131, 104, 171, 192, 148, 37, 67], - [9, 206, 74, 252, 72, 51, 82, 4, 207, 101, 76, 145, 108, 70, 129, 173], - [103, 199, 145, 182, 68, 194, 200, 144, 103, 177, 181, 213, 211, 99, 175, 103], - [104, 68, 171, 65, 171, 7, 217, 21, 156, 75, 45, 74, 80, 144, 158, 197], - [164, 27, 205, 20, 112, 117, 129, 83, 121, 122, 167, 206, 20, 60, 68, 106] - ], - "iv": [2, 108, 84, 222, 197, 219, 224, 71, 131, 133, 169, 123, 99, 76, 27, 192], - "key": [207, 134, 160, 246, 0, 238, 192, 242, 201, 83, 22, 251, 105, 17, 70, 57], - "modeOfOperation": "cbc", - "plaintext": [ - [149, 45, 229, 194, 73, 196, 149, 8, 45, 173, 57, 38, 80, 18, 95, 113], - [120, 107, 138, 207, 82, 42, 107, 182, 55, 123, 69, 12, 39, 55, 86, 190], - [91, 214, 227, 56, 159, 138, 138, 175, 58, 165, 40, 177, 4, 19, 31, 62], - [96, 38, 112, 221, 37, 153, 32, 183, 157, 205, 127, 129, 42, 37, 240, 27], - [90, 219, 109, 255, 112, 97, 132, 84, 44, 253, 66, 113, 226, 53, 38, 138] - ], - "segmentSize": null - }, - { - "encrypted": [ - [38, 132, 158, 65, 67, 112, 57, 58, 187, 240, 230, 202, 162, 222, 101, 228], - [147, 124, 11, 193, 96, 247, 144, 97, 113, 176, 182, 48, 182, 140, 249, 91], - [175, 93, 197, 37, 74, 108, 97, 221, 211, 22, 215, 197, 87, 49, 92, 148], - [238, 174, 57, 45, 51, 78, 54, 125, 45, 126, 9, 9, 141, 212, 40, 144], - [127, 186, 78, 114, 145, 89, 188, 133, 218, 78, 11, 214, 234, 249, 199, 80], - [177, 50, 245, 219, 23, 5, 142, 121, 129, 5, 145, 2, 132, 3, 119, 11] - ], - "iv": [233, 245, 60, 10, 32, 175, 77, 190, 231, 195, 164, 231, 148, 173, 29, 119], - "key": [67, 138, 155, 115, 182, 210, 158, 172, 130, 101, 91, 182, 17, 85, 40, 136], - "modeOfOperation": "cbc", - "plaintext": [ - [174, 168, 132, 125, 142, 77, 110, 122, 219, 217, 204, 133, 145, 243, 222, 118], - [104, 239, 23, 134, 124, 91, 83, 79, 109, 224, 188, 140, 186, 120, 93, 163], - [84, 232, 31, 125, 183, 132, 149, 128, 156, 61, 19, 222, 120, 92, 21, 14], - [185, 204, 70, 240, 74, 194, 132, 222, 86, 51, 20, 232, 193, 70, 73, 120], - [158, 170, 186, 182, 104, 110, 81, 4, 51, 139, 255, 96, 250, 129, 15, 213], - [122, 231, 168, 244, 185, 245, 71, 232, 248, 251, 168, 100, 138, 174, 198, 134] - ], - "segmentSize": null - }, - { - "encrypted": [ - [237, 64, 138, 92, 49, 30, 113, 59, 86, 230, 50, 185, 4, 177, 134, 187], - [14, 112, 231, 147, 165, 81, 41, 81, 69, 113, 172, 107, 169, 39, 93, 106], - [159, 243, 89, 49, 152, 60, 123, 104, 228, 68, 67, 190, 127, 140, 171, 222], - [58, 16, 240, 31, 91, 150, 68, 15, 110, 6, 172, 15, 44, 9, 146, 140], - [41, 13, 203, 103, 111, 17, 80, 42, 169, 99, 35, 22, 178, 10, 58, 118], - [139, 168, 68, 78, 146, 36, 82, 17, 85, 206, 178, 154, 161, 108, 64, 91], - [167, 35, 195, 165, 96, 99, 106, 246, 152, 72, 218, 92, 177, 25, 36, 114] - ], - "iv": [10, 253, 45, 137, 217, 244, 247, 169, 200, 39, 178, 164, 23, 227, 109, 177], - "key": [156, 14, 149, 40, 130, 104, 7, 255, 68, 229, 3, 240, 82, 144, 143, 243], - "modeOfOperation": "cbc", - "plaintext": [ - [40, 65, 193, 6, 244, 129, 203, 94, 241, 171, 37, 3, 236, 248, 252, 86], - [42, 191, 70, 59, 55, 95, 83, 194, 197, 6, 100, 176, 65, 34, 32, 202], - [140, 130, 69, 0, 254, 88, 54, 212, 69, 90, 203, 208, 205, 224, 61, 15], - [143, 255, 230, 2, 224, 61, 92, 37, 159, 243, 117, 18, 1, 173, 240, 24], - [107, 159, 212, 196, 42, 88, 98, 96, 12, 229, 178, 95, 206, 41, 207, 209], - [72, 30, 184, 169, 100, 253, 199, 39, 31, 173, 213, 224, 201, 239, 153, 158], - [17, 67, 7, 84, 168, 164, 222, 134, 58, 133, 83, 254, 58, 91, 146, 68] - ], - "segmentSize": null - }, - { - "encrypted": [ - [205, 8, 131, 222, 199, 215, 32, 67, 27, 56, 120, 70, 167, 234, 110, 29] - ], - "iv": [142, 111, 133, 134, 72, 87, 251, 20, 18, 203, 32, 131, 116, 156, 144, 7], - "key": [65, 87, 144, 116, 210, 11, 103, 52, 207, 1, 158, 122, 239, 120, 47, 2, 176, 133, 215, 121, 241, 236, 20, 147], - "modeOfOperation": "cbc", - "plaintext": [ - [195, 80, 0, 245, 98, 229, 188, 239, 35, 9, 223, 236, 110, 248, 51, 104] - ], - "segmentSize": null - }, - { - "encrypted": [ - [161, 127, 124, 71, 149, 158, 161, 132, 39, 23, 75, 69, 89, 28, 163, 4], - [79, 232, 195, 213, 250, 88, 72, 128, 107, 200, 34, 239, 32, 155, 161, 175] - ], - "iv": [216, 85, 193, 88, 54, 47, 120, 65, 212, 153, 7, 206, 137, 241, 16, 159], - "key": [229, 182, 193, 134, 61, 224, 59, 230, 65, 41, 239, 30, 148, 150, 157, 229, 210, 68, 0, 115, 165, 121, 53, 196], - "modeOfOperation": "cbc", - "plaintext": [ - [189, 236, 103, 171, 187, 156, 85, 55, 108, 15, 134, 161, 84, 203, 216, 101], - [225, 64, 72, 93, 54, 177, 68, 219, 45, 191, 35, 24, 64, 230, 104, 133] - ], - "segmentSize": null - }, - { - "encrypted": [ - [121, 2, 177, 124, 104, 174, 58, 216, 173, 166, 163, 202, 142, 51, 31, 192], - [234, 158, 227, 122, 58, 92, 104, 11, 46, 128, 64, 60, 253, 202, 136, 189], - [45, 214, 136, 85, 95, 222, 161, 26, 102, 55, 50, 106, 34, 224, 179, 96] - ], - "iv": [27, 124, 250, 87, 77, 157, 83, 173, 226, 17, 62, 51, 82, 122, 150, 125], - "key": [154, 68, 140, 144, 162, 212, 180, 80, 109, 140, 108, 32, 157, 163, 224, 230, 137, 110, 230, 203, 88, 195, 99, 16], - "modeOfOperation": "cbc", - "plaintext": [ - [144, 182, 35, 145, 105, 177, 109, 51, 166, 12, 173, 2, 41, 219, 5, 8], - [13, 153, 59, 2, 15, 172, 140, 184, 254, 1, 98, 46, 17, 202, 59, 58], - [85, 185, 195, 27, 31, 226, 35, 242, 142, 64, 187, 253, 56, 229, 18, 219] - ], - "segmentSize": null - }, - { - "encrypted": [ - [132, 46, 5, 43, 132, 163, 38, 203, 115, 240, 212, 165, 51, 215, 59, 189], - [108, 18, 157, 44, 46, 92, 248, 132, 156, 91, 69, 143, 137, 196, 181, 190], - [135, 153, 55, 249, 233, 189, 116, 148, 16, 96, 154, 77, 240, 145, 226, 154], - [192, 25, 250, 147, 196, 66, 21, 149, 83, 22, 19, 179, 207, 245, 55, 67] - ], - "iv": [237, 188, 157, 238, 89, 230, 228, 176, 209, 67, 177, 52, 46, 77, 248, 160], - "key": [44, 217, 77, 43, 115, 46, 14, 155, 152, 90, 241, 56, 79, 242, 243, 225, 47, 11, 119, 158, 134, 190, 59, 245], - "modeOfOperation": "cbc", - "plaintext": [ - [0, 83, 87, 201, 0, 9, 225, 9, 94, 158, 43, 75, 17, 180, 67, 57], - [134, 70, 73, 69, 127, 159, 41, 87, 100, 221, 139, 241, 214, 95, 7, 71], - [97, 109, 98, 58, 192, 51, 2, 187, 103, 102, 36, 209, 1, 8, 15, 193], - [94, 17, 53, 115, 16, 26, 165, 208, 246, 27, 21, 154, 43, 235, 66, 67] - ], - "segmentSize": null - }, - { - "encrypted": [ - [2, 140, 139, 242, 83, 199, 88, 110, 34, 161, 37, 40, 42, 120, 248, 254], - [193, 173, 35, 118, 74, 136, 155, 40, 228, 251, 169, 144, 234, 218, 175, 105], - [24, 173, 132, 64, 183, 2, 60, 170, 246, 38, 20, 127, 12, 61, 132, 5], - [19, 51, 148, 88, 151, 14, 167, 128, 173, 25, 198, 136, 99, 130, 166, 6], - [123, 12, 185, 61, 251, 79, 179, 173, 192, 222, 26, 109, 57, 135, 165, 97] - ], - "iv": [208, 41, 255, 133, 167, 144, 179, 225, 218, 184, 61, 102, 37, 23, 93, 76], - "key": [238, 237, 173, 38, 87, 5, 226, 115, 129, 254, 183, 46, 34, 242, 58, 167, 37, 180, 218, 193, 43, 32, 133, 118], - "modeOfOperation": "cbc", - "plaintext": [ - [77, 11, 79, 61, 203, 121, 212, 216, 229, 233, 194, 152, 69, 87, 114, 33], - [175, 57, 37, 65, 229, 145, 64, 200, 96, 221, 85, 170, 141, 107, 149, 181], - [136, 196, 150, 27, 110, 213, 18, 197, 90, 15, 215, 113, 33, 32, 200, 15], - [82, 112, 252, 211, 108, 115, 222, 193, 149, 75, 33, 243, 55, 148, 76, 99], - [215, 43, 93, 118, 12, 235, 195, 132, 160, 16, 52, 172, 27, 245, 243, 152] - ], - "segmentSize": null - }, - { - "encrypted": [ - [61, 85, 226, 23, 2, 141, 0, 135, 58, 71, 118, 33, 51, 15, 154, 56], - [77, 45, 86, 32, 27, 54, 156, 125, 210, 65, 16, 106, 213, 79, 221, 72], - [233, 41, 130, 197, 227, 202, 27, 132, 221, 235, 62, 210, 164, 251, 10, 228], - [174, 71, 218, 147, 114, 138, 98, 97, 242, 80, 138, 56, 195, 155, 19, 52], - [97, 38, 46, 66, 184, 154, 112, 60, 236, 203, 179, 41, 205, 24, 161, 251], - [150, 150, 252, 13, 25, 127, 23, 195, 19, 164, 80, 162, 68, 168, 219, 213] - ], - "iv": [212, 75, 142, 4, 250, 49, 31, 28, 144, 69, 215, 39, 204, 113, 55, 21], - "key": [189, 125, 45, 103, 45, 219, 221, 179, 23, 133, 189, 175, 183, 145, 62, 244, 10, 52, 252, 142, 117, 184, 226, 47], - "modeOfOperation": "cbc", - "plaintext": [ - [40, 100, 125, 19, 33, 30, 0, 42, 96, 102, 211, 38, 250, 200, 108, 123], - [29, 76, 38, 131, 80, 31, 238, 158, 77, 98, 193, 125, 108, 193, 175, 192], - [233, 172, 199, 51, 66, 38, 69, 120, 148, 81, 97, 89, 13, 209, 54, 60], - [54, 52, 246, 109, 86, 217, 23, 149, 99, 170, 14, 118, 113, 44, 9, 208], - [248, 73, 170, 147, 125, 157, 80, 178, 155, 217, 169, 192, 174, 195, 62, 72], - [177, 168, 251, 220, 57, 95, 158, 56, 53, 201, 81, 206, 215, 121, 161, 162] - ], - "segmentSize": null - }, - { - "encrypted": [ - [58, 225, 173, 114, 94, 89, 3, 213, 88, 183, 251, 10, 169, 186, 120, 73], - [144, 17, 151, 124, 185, 239, 201, 182, 40, 76, 125, 209, 82, 155, 40, 29], - [37, 35, 237, 195, 228, 236, 80, 78, 109, 92, 199, 48, 136, 244, 90, 247], - [121, 224, 243, 92, 239, 223, 0, 183, 251, 77, 96, 175, 214, 21, 122, 117], - [165, 238, 188, 91, 252, 89, 231, 147, 156, 145, 112, 234, 38, 80, 3, 99], - [87, 35, 205, 77, 57, 129, 24, 118, 49, 168, 48, 125, 47, 187, 38, 25], - [107, 88, 109, 145, 168, 199, 35, 31, 207, 218, 129, 243, 238, 147, 112, 154] - ], - "iv": [113, 99, 82, 98, 16, 162, 162, 45, 176, 124, 26, 234, 190, 176, 135, 160], - "key": [207, 113, 177, 9, 32, 89, 89, 193, 226, 40, 85, 223, 1, 141, 103, 54, 63, 202, 20, 60, 28, 43, 242, 244], - "modeOfOperation": "cbc", - "plaintext": [ - [101, 117, 47, 123, 137, 64, 125, 152, 191, 12, 144, 124, 62, 2, 31, 37], - [145, 246, 208, 117, 44, 124, 253, 82, 121, 214, 142, 198, 232, 101, 199, 172], - [44, 124, 237, 109, 211, 117, 193, 222, 254, 77, 39, 58, 21, 19, 175, 62], - [34, 129, 201, 102, 53, 121, 233, 111, 131, 180, 19, 69, 188, 73, 206, 215], - [241, 40, 232, 26, 224, 6, 191, 255, 61, 59, 88, 6, 68, 198, 221, 50], - [36, 67, 106, 45, 236, 47, 155, 171, 73, 82, 43, 119, 145, 48, 190, 149], - [155, 46, 181, 234, 42, 215, 146, 89, 113, 160, 157, 84, 147, 221, 207, 57] - ], - "segmentSize": null - }, - { - "encrypted": [ - [204, 57, 135, 50, 72, 90, 125, 139, 240, 161, 68, 130, 101, 224, 168, 68] - ], - "iv": [198, 138, 150, 225, 212, 180, 56, 221, 36, 125, 230, 136, 166, 110, 51, 12], - "key": [25, 200, 104, 234, 142, 223, 112, 248, 161, 72, 22, 36, 6, 147, 111, 210, 201, 212, 64, 115, 178, 83, 243, 248, 134, 173, 22, 198, 126, 162, 51, 75], - "modeOfOperation": "cbc", - "plaintext": [ - [32, 85, 68, 116, 225, 53, 187, 122, 210, 19, 208, 8, 99, 0, 110, 93] - ], - "segmentSize": null - }, - { - "encrypted": [ - [197, 112, 97, 155, 150, 173, 162, 33, 234, 47, 111, 195, 249, 144, 38, 81], - [136, 178, 208, 156, 68, 213, 48, 50, 80, 206, 75, 85, 157, 11, 40, 178] - ], - "iv": [228, 189, 99, 54, 220, 149, 74, 155, 236, 115, 105, 10, 250, 52, 249, 3], - "key": [145, 92, 97, 30, 239, 52, 53, 97, 158, 244, 169, 33, 19, 61, 81, 90, 144, 192, 1, 146, 114, 252, 128, 94, 210, 211, 119, 173, 5, 173, 65, 33], - "modeOfOperation": "cbc", - "plaintext": [ - [105, 13, 189, 69, 21, 203, 130, 166, 197, 228, 56, 111, 105, 115, 113, 253], - [205, 205, 22, 167, 165, 202, 44, 140, 136, 206, 82, 201, 13, 62, 56, 177] - ], - "segmentSize": null - }, - { - "encrypted": [ - [253, 54, 91, 72, 199, 255, 134, 203, 197, 13, 102, 70, 107, 152, 13, 60], - [73, 68, 174, 29, 236, 112, 244, 87, 212, 122, 181, 227, 20, 182, 127, 232], - [113, 176, 212, 245, 123, 249, 6, 249, 72, 103, 148, 141, 127, 28, 221, 64] - ], - "iv": [24, 101, 158, 36, 39, 218, 77, 118, 140, 143, 249, 209, 97, 40, 24, 43], - "key": [89, 85, 71, 175, 21, 229, 42, 43, 200, 153, 145, 191, 2, 205, 163, 128, 98, 200, 17, 177, 241, 198, 57, 47, 221, 187, 68, 248, 128, 203, 173, 215], - "modeOfOperation": "cbc", - "plaintext": [ - [187, 224, 59, 15, 94, 254, 62, 99, 9, 204, 95, 180, 25, 106, 197, 241], - [36, 19, 218, 162, 217, 207, 90, 130, 246, 247, 124, 135, 97, 230, 245, 72], - [172, 28, 227, 31, 238, 181, 244, 139, 154, 194, 84, 239, 231, 249, 27, 42] - ], - "segmentSize": null - }, - { - "encrypted": [ - [119, 28, 94, 241, 192, 159, 193, 114, 101, 37, 60, 23, 15, 47, 50, 255], - [1, 178, 152, 200, 197, 198, 241, 228, 187, 94, 217, 174, 211, 241, 207, 175], - [48, 76, 91, 229, 139, 239, 188, 0, 243, 81, 42, 118, 139, 130, 32, 84], - [92, 143, 77, 181, 235, 27, 137, 154, 165, 26, 201, 224, 89, 82, 84, 156] - ], - "iv": [184, 211, 248, 131, 1, 221, 81, 198, 214, 8, 59, 56, 211, 103, 158, 115], - "key": [239, 134, 173, 238, 232, 91, 142, 95, 135, 158, 179, 214, 32, 26, 112, 240, 156, 139, 156, 174, 110, 165, 195, 190, 108, 127, 209, 236, 17, 136, 128, 38], - "modeOfOperation": "cbc", - "plaintext": [ - [236, 180, 206, 8, 79, 99, 120, 231, 138, 114, 233, 18, 103, 84, 179, 74], - [115, 68, 124, 88, 113, 215, 213, 36, 254, 167, 54, 135, 114, 201, 215, 229], - [99, 78, 4, 87, 42, 109, 137, 206, 63, 120, 99, 116, 88, 141, 126, 182], - [9, 41, 244, 142, 103, 194, 65, 38, 153, 236, 149, 38, 110, 111, 138, 87] - ], - "segmentSize": null - }, - { - "encrypted": [ - [239, 27, 144, 163, 251, 190, 71, 87, 64, 247, 137, 234, 31, 64, 136, 168], - [3, 87, 157, 226, 246, 61, 163, 186, 101, 229, 117, 46, 159, 232, 59, 179], - [252, 11, 57, 168, 249, 132, 115, 133, 165, 79, 96, 111, 75, 163, 28, 16], - [70, 203, 216, 179, 169, 46, 114, 142, 101, 41, 218, 213, 131, 207, 252, 232], - [123, 181, 157, 87, 108, 149, 168, 9, 161, 100, 23, 68, 122, 210, 37, 130] - ], - "iv": [25, 57, 37, 60, 40, 9, 209, 27, 5, 70, 21, 71, 73, 75, 142, 17], - "key": [58, 19, 153, 68, 45, 196, 158, 95, 169, 253, 33, 61, 141, 140, 11, 178, 77, 69, 123, 116, 7, 53, 51, 52, 144, 63, 29, 137, 174, 24, 93, 128], - "modeOfOperation": "cbc", - "plaintext": [ - [63, 96, 86, 203, 138, 233, 103, 41, 109, 134, 227, 245, 72, 114, 244, 234], - [117, 176, 80, 181, 172, 135, 184, 42, 151, 65, 21, 150, 250, 63, 43, 84], - [83, 228, 183, 184, 115, 52, 250, 180, 183, 189, 31, 149, 24, 32, 36, 12], - [111, 43, 83, 157, 153, 76, 28, 193, 37, 238, 20, 44, 122, 12, 100, 54], - [125, 45, 129, 123, 16, 2, 88, 182, 113, 156, 125, 29, 174, 182, 61, 30] - ], - "segmentSize": null - }, - { - "encrypted": [ - [132, 231, 159, 111, 177, 58, 134, 135, 99, 127, 41, 169, 87, 247, 160, 159], - [236, 178, 176, 127, 107, 80, 216, 76, 177, 184, 227, 218, 143, 236, 40, 143], - [99, 45, 232, 254, 44, 202, 139, 216, 36, 85, 67, 58, 190, 237, 129, 206], - [176, 214, 79, 254, 97, 140, 69, 217, 188, 181, 255, 53, 56, 194, 103, 30], - [213, 70, 28, 164, 65, 243, 165, 84, 173, 116, 84, 200, 79, 51, 49, 251], - [151, 63, 108, 113, 211, 236, 159, 174, 234, 246, 215, 182, 79, 19, 62, 181] - ], - "iv": [8, 0, 42, 124, 224, 145, 239, 223, 10, 200, 198, 29, 36, 249, 164, 8], - "key": [180, 198, 97, 71, 202, 116, 82, 252, 108, 239, 82, 177, 100, 187, 12, 171, 68, 32, 57, 227, 243, 161, 67, 128, 157, 144, 43, 214, 202, 192, 7, 49], - "modeOfOperation": "cbc", - "plaintext": [ - [177, 30, 92, 181, 79, 198, 135, 76, 144, 17, 76, 135, 233, 232, 87, 87], - [175, 1, 189, 39, 216, 58, 13, 164, 71, 43, 213, 54, 110, 99, 190, 81], - [204, 126, 252, 107, 153, 61, 85, 97, 91, 202, 38, 126, 54, 177, 26, 30], - [122, 115, 239, 239, 171, 171, 203, 252, 193, 53, 248, 209, 3, 155, 128, 22], - [208, 203, 224, 231, 108, 63, 138, 217, 220, 210, 172, 228, 144, 6, 195, 1], - [245, 172, 239, 106, 160, 133, 171, 175, 133, 228, 143, 180, 4, 112, 245, 211] - ], - "segmentSize": null - }, - { - "encrypted": [ - [225, 164, 173, 52, 188, 219, 16, 18, 173, 67, 73, 158, 33, 151, 218, 115], - [94, 224, 65, 65, 133, 25, 109, 155, 238, 72, 5, 83, 15, 98, 238, 7], - [234, 128, 120, 130, 111, 243, 149, 28, 239, 30, 37, 228, 232, 153, 58, 165], - [200, 197, 4, 37, 95, 3, 163, 193, 174, 25, 73, 134, 19, 246, 249, 35], - [18, 99, 128, 126, 177, 243, 41, 180, 177, 172, 209, 238, 58, 26, 9, 47], - [14, 73, 175, 29, 35, 63, 130, 96, 188, 21, 58, 203, 20, 121, 118, 8], - [128, 220, 252, 189, 91, 172, 88, 6, 173, 245, 109, 46, 62, 56, 90, 58] - ], - "iv": [240, 124, 99, 225, 205, 227, 173, 35, 138, 225, 212, 202, 240, 252, 65, 183], - "key": [17, 10, 255, 123, 152, 187, 165, 28, 66, 126, 51, 45, 134, 209, 108, 7, 126, 205, 4, 43, 212, 233, 83, 108, 106, 48, 145, 233, 193, 233, 100, 23], - "modeOfOperation": "cbc", - "plaintext": [ - [120, 156, 169, 187, 115, 146, 2, 18, 4, 82, 134, 201, 62, 248, 176, 207], - [122, 115, 103, 170, 249, 36, 72, 210, 221, 31, 43, 104, 185, 206, 23, 231], - [248, 73, 148, 237, 157, 232, 43, 204, 114, 102, 205, 223, 78, 117, 223, 54], - [200, 82, 229, 115, 19, 71, 49, 169, 74, 39, 106, 50, 137, 85, 214, 243], - [22, 177, 14, 203, 29, 33, 176, 158, 178, 79, 51, 195, 173, 87, 48, 241], - [40, 183, 240, 31, 104, 78, 215, 222, 8, 241, 40, 220, 182, 119, 117, 163], - [18, 78, 25, 28, 244, 32, 82, 92, 227, 169, 124, 250, 38, 120, 78, 41] - ], - "segmentSize": null - }, - { - "encrypted": [ - [248, 206, 181] - ], - "iv": null, - "key": [138, 202, 59, 240, 100, 236, 171, 173, 201, 239, 80, 207, 74, 245, 67, 159], - "modeOfOperation": "ctr", - "plaintext": [ - [110, 140, 211] - ], - "segmentSize": null - }, - { - "encrypted": [ - [100, 220, 149, 134, 88, 143, 115, 129, 192, 2, 137, 247, 86, 100, 55, 112] - ], - "iv": null, - "key": [71, 104, 62, 180, 41, 170, 177, 111, 40, 15, 177, 20, 159, 168, 240, 139], - "modeOfOperation": "ctr", - "plaintext": [ - [255, 157, 126, 187, 22, 92, 159, 176, 71, 215, 106, 196, 116, 140, 58, 89] - ], - "segmentSize": null - }, - { - "encrypted": [ - [43, 19, 221, 81, 137, 85, 16, 205, 13, 116, 204, 221, 130, 50, 137, 39, 176, 164, 253, 34, 9, 98, 113, 143, 182, 125, 3, 194, 127, 72, 42, 255, 101, 234, 157, 184, 74, 41, 197, 27, 16, 207, 142, 18, 112, 130, 244, 228, 59, 140, 130, 1, 63, 227, 225, 41, 152, 54, 36, 40, 203, 104, 59, 237, 26, 8, 30, 35, 157, 209, 70, 184, 128, 79, 163, 78, 33, 147, 254, 54, 246, 196, 46, 119, 24, 40, 239, 98, 244, 18, 95, 147, 111, 197, 46, 9, 168, 243, 17, 155, 218, 122, 16, 98, 213, 203, 219, 201, 162, 0, 232, 173, 21, 142, 139, 34, 73, 190, 145, 92, 10, 64, 189, 61, 193, 87, 179] - ], - "iv": null, - "key": [87, 39, 27, 236, 169, 60, 60, 109, 43, 188, 75, 92, 193, 45, 18, 172], - "modeOfOperation": "ctr", - "plaintext": [ - [17, 209, 78, 6, 66, 189, 24, 108, 67, 214, 69, 195, 134, 115, 93, 105, 252, 164, 31, 146, 113, 17, 64, 3, 100, 206, 60, 150, 114, 239, 72, 40, 181, 223, 17, 193, 202, 100, 197, 112, 50, 88, 155, 239, 239, 23, 118, 35, 164, 36, 34, 185, 196, 230, 17, 44, 233, 8, 11, 31, 220, 135, 157, 202, 225, 87, 79, 255, 124, 206, 202, 224, 182, 84, 203, 174, 235, 149, 16, 23, 251, 233, 178, 44, 169, 247, 186, 251, 34, 225, 238, 203, 105, 84, 69, 201, 255, 165, 199, 212, 147, 228, 163, 98, 254, 242, 243, 94, 100, 157, 138, 244, 244, 123, 51, 62, 74, 106, 166, 123, 209, 25, 61, 68, 208, 130, 91] - ], - "segmentSize": null - }, - { - "encrypted": [ - [35, 231, 32, 184, 110, 116, 188, 32, 245, 102, 88, 159, 173, 245, 46, 114, 4, 114, 220, 226, 76, 113, 112, 91, 208, 22, 21, 147, 203, 81, 188, 125, 114, 230, 38, 146, 69, 249, 66, 234, 122, 70, 174, 22, 52, 180, 118, 197, 53, 229, 49, 81, 144, 61, 125, 174, 15, 139, 94, 65, 78, 46, 170, 242, 108, 226, 148, 168, 117, 234, 10, 185, 216, 59, 144, 244, 247, 45, 107, 154, 209, 236, 99, 237, 75, 65, 61, 224, 197, 204, 164, 214, 143, 86, 212, 2, 236, 227, 197, 219, 51, 229, 191, 150, 125, 126, 70, 217, 202, 100, 183, 113, 112, 39, 109, 182, 142, 176, 238, 178, 20, 107, 126, 47, 39, 11, 135, 145] - ], - "iv": null, - "key": [48, 236, 25, 107, 29, 43, 190, 156, 181, 83, 146, 197, 75, 213, 205, 46], - "modeOfOperation": "ctr", - "plaintext": [ - [240, 141, 74, 81, 108, 77, 229, 2, 20, 211, 56, 140, 224, 7, 11, 220, 182, 107, 211, 40, 71, 208, 234, 54, 52, 54, 180, 211, 62, 41, 93, 88, 15, 214, 218, 245, 28, 245, 219, 213, 106, 84, 46, 67, 254, 202, 245, 79, 31, 145, 91, 108, 111, 13, 72, 184, 194, 199, 7, 27, 133, 27, 3, 238, 37, 96, 115, 69, 76, 123, 39, 156, 79, 87, 195, 80, 215, 181, 217, 107, 42, 13, 147, 36, 208, 191, 144, 73, 222, 199, 198, 215, 239, 230, 243, 13, 245, 183, 200, 89, 73, 120, 240, 56, 20, 68, 44, 228, 68, 129, 83, 255, 234, 235, 252, 72, 9, 23, 41, 57, 146, 139, 74, 57, 52, 78, 62, 225] - ], - "segmentSize": null - }, - { - "encrypted": [ - [223, 30, 254, 152, 228, 253, 26, 27, 19, 217, 255, 183, 4, 25, 126, 219, 196, 12, 237, 33, 24, 142, 101, 2, 169, 54, 205, 226, 133, 194, 38, 76, 250, 119, 157, 8, 77, 226, 34, 189, 151, 253, 176, 75, 25, 118, 242, 194, 137, 20, 38, 85, 197, 28, 70, 111, 124, 255, 132, 214, 61, 124, 113, 174, 117, 225, 207, 212, 251, 5, 2, 237, 71, 57, 77, 187, 168, 121, 220, 49, 170, 206, 54, 120, 54, 58, 47, 140, 90, 85, 238, 145, 25, 251, 17, 111, 153, 22, 205, 240, 188, 250, 128, 106, 211, 46, 55, 41, 82, 148, 59, 102, 70, 223, 197, 59, 74, 251, 223, 217, 142, 80, 9, 95, 150, 216, 133, 17, 47] - ], - "iv": null, - "key": [37, 2, 26, 39, 199, 219, 152, 79, 112, 172, 1, 198, 117, 19, 242, 14], - "modeOfOperation": "ctr", - "plaintext": [ - [175, 135, 66, 144, 243, 63, 79, 239, 159, 37, 131, 218, 71, 15, 168, 18, 118, 43, 92, 44, 104, 11, 23, 69, 163, 1, 16, 21, 164, 142, 6, 83, 42, 129, 134, 164, 76, 132, 133, 63, 24, 67, 219, 75, 118, 128, 157, 189, 174, 46, 255, 149, 3, 152, 117, 106, 50, 254, 162, 206, 142, 218, 36, 243, 131, 144, 231, 150, 48, 33, 170, 150, 45, 245, 13, 71, 185, 57, 209, 84, 3, 8, 124, 148, 8, 183, 139, 74, 215, 68, 92, 105, 158, 17, 32, 177, 19, 150, 62, 126, 148, 197, 62, 12, 96, 42, 92, 21, 222, 169, 35, 145, 109, 75, 239, 225, 35, 5, 43, 59, 232, 152, 92, 164, 116, 39, 217, 158, 162] - ], - "segmentSize": null - }, - { - "encrypted": [ - [162, 87, 240, 213, 52, 122, 254, 58, 170, 175, 113, 128, 93, 137, 49, 123, 69, 76, 203, 140, 186, 17, 253, 95, 250, 81, 211, 109, 235, 198, 222, 84, 132, 80, 154, 120, 132, 223, 40, 198, 190, 231, 176, 123, 56, 239, 197, 155, 227, 75, 132, 157, 20, 73, 247, 103, 167, 87, 189, 121, 109, 179, 172, 180, 109, 27, 188, 208, 165, 10, 114, 240, 134, 182, 156, 211, 255, 164, 134, 57, 172, 224, 133, 96, 250, 47, 30, 184, 211, 194, 3, 232, 178, 218, 139, 204, 168, 69, 205, 74, 48, 63, 190, 5, 205, 8, 89, 146, 9, 181, 169, 13, 209, 86, 60, 77, 129, 104, 22, 145, 205, 250, 242, 241, 95, 13, 81, 166, 177, 195, 186, 158, 176, 54, 175, 154, 20, 161, 95, 79, 72, 246, 175, 107, 77, 219, 66, 111, 78, 133, 166, 65, 86, 17, 10, 6, 213, 99, 251, 180, 112, 16, 1, 38, 66, 131, 127, 170, 216, 164, 183, 29, 249, 170, 37, 250, 175, 164, 197, 65, 166, 30, 1, 49, 10, 108, 31, 234, 242, 193, 243, 211, 253, 215, 115, 35, 121, 189, 172, 232, 98, 211, 208, 164, 165, 154, 181, 34, 29, 75, 182, 165, 220, 118, 55, 234, 53, 235, 102, 90, 14, 17, 41, 168, 226, 44, 218, 208, 204, 40, 120, 231, 54, 96, 141, 152, 59, 68, 35, 175, 233, 223, 230, 65, 227, 218, 228, 97, 221, 186, 132, 228, 225, 1, 51, 189, 113, 197, 45, 97, 5, 32, 208, 179, 116, 209, 224, 86, 251, 242, 66, 183, 240, 170, 120, 9, 224, 69, 25, 108, 144, 4, 189, 229, 254, 116, 233, 104, 171, 174, 106, 158, 167, 16, 71, 79, 194, 141, 18, 158, 108, 44, 5, 53, 172, 132, 218, 114, 39, 212, 122, 85, 41, 193, 53, 251, 34, 99, 84, 214, 109, 126, 245, 51, 154, 149, 56, 173, 186, 82, 195, 147, 175, 31, 124, 213, 253, 109, 12, 127, 174, 251, 197, 157, 194, 239, 188, 41, 167, 82, 144, 72, 241, 175, 105, 135, 163, 198, 161, 251, 27, 228, 98, 121, 129, 148, 141, 69, 60, 62, 239, 65, 201, 136, 219, 74, 185, 210, 241, 74, 238, 198, 18, 1, 100, 113, 169, 28, 122, 34, 70, 166, 250, 180, 103, 238, 11, 33, 232, 191, 237, 140, 200, 155, 53, 197, 133, 238, 251, 181, 76, 189, 131, 132, 161, 84, 46, 253, 42, 239, 252, 102, 66, 84, 99, 90, 77, 241, 224, 186, 211, 184, 44, 81, 168, 78, 25, 87, 224, 197, 113, 88, 13, 169, 95, 62, 29, 38, 68, 210, 113, 148, 117, 5, 124, 81, 213, 139, 61, 124, 111, 40, 111, 132, 42, 169, 45, 232, 79, 176, 140, 208, 192, 1, 2, 24, 239, 172, 127, 232, 106, 20, 68, 41, 131, 86, 14, 9, 29, 103, 176, 246, 73, 40, 147, 206, 9, 202, 212, 47, 196, 5, 96, 100, 246, 174, 104, 51, 68, 136, 119, 152, 56, 79, 183, 30, 247, 204, 215, 201, 97, 166, 96, 118, 133, 182, 253, 190, 199, 151, 23, 232, 94, 20, 41, 57, 32, 18, 183, 176, 154, 121, 229, 177, 217, 172, 154, 191, 27, 134, 145, 226, 29, 247, 184, 208, 66, 171, 178, 156, 89, 179, 148, 170, 167, 152, 68, 80, 126, 201, 93, 121, 106, 98, 149, 234, 148, 46, 29, 38, 162, 114, 194, 234, 227, 228, 148, 234, 91, 109, 114, 47, 28, 189, 66, 152, 41, 43, 73, 221, 146, 14, 104, 194, 246, 4, 205, 47, 55, 138, 95, 143, 168, 50, 97, 195, 75, 249, 32, 162, 73, 175, 146, 34, 177, 4, 32, 248, 41, 108, 198, 173, 83, 253, 65, 193, 79, 194, 101, 215, 120, 178, 202, 20, 52, 192, 12, 65, 151, 15, 86, 132, 174, 243, 72, 64, 34, 54, 207, 53, 239, 156, 43, 247, 148, 30, 136, 81, 168, 149, 203, 52, 138, 32, 45, 121, 75, 162, 231, 178, 31, 32, 89, 86, 31, 149, 73, 232, 122, 40, 69, 8, 57, 5, 62, 209, 244, 90, 9, 195, 218, 146, 244, 162, 121, 115, 127, 255, 209, 222, 123, 206, 238, 189, 84, 207, 103, 54, 217, 172, 232, 199, 193, 102, 6, 100, 241, 106, 211, 94, 113, 194, 172, 100, 111, 188, 204, 75, 64, 230, 152, 64, 205, 117, 71, 16, 124, 171, 212, 82, 70, 43, 164, 9, 67, 193, 45, 192, 58, 145, 168, 212, 146, 34, 219, 23, 221, 48, 78, 57, 101, 6, 192, 107, 130, 2, 71, 56, 179, 105, 168, 215, 22, 17, 106, 167, 18, 253, 221, 97, 241, 122, 116, 60, 216, 99, 127, 133, 233, 71, 207, 104, 127, 77, 33, 153, 15, 72, 241, 6, 128, 40, 233, 243, 155, 242, 9, 112, 211, 211, 125, 11, 156, 38, 230, 145, 181, 194, 55, 226, 245, 89, 156, 99, 239, 176, 33, 172, 169, 75, 68, 236, 52, 153, 234, 8, 234, 17, 121, 153, 197, 31, 223, 59, 60, 204, 136, 58, 150, 174, 22, 2, 211, 213, 120, 26, 238, 183, 118, 148, 2, 164, 213, 22, 124, 222, 74, 254, 175, 78, 229, 227, 178, 180, 128, 117, 200, 6, 177, 65, 175, 164, 180, 209, 16, 146, 145, 85, 90, 46, 159, 162, 206, 9, 246, 159, 63, 7, 143, 39, 63, 159, 19, 236, 101, 156, 164, 213, 56, 123, 189, 95, 220, 130, 85, 85, 128, 100, 106, 1, 196, 146, 89, 61, 81, 122, 205, 200, 154, 159, 167, 9, 128, 79, 194, 120, 63, 191, 243, 76, 3, 126, 136, 97, 85, 110, 91, 164, 9, 182, 62, 86, 132, 218, 103, 155, 58, 53, 170, 125, 34, 125, 105, 14, 38, 251, 102, 35, 65, 19, 181, 69, 198, 31, 201, 215, 136, 249, 178, 162, 160, 63, 31, 25, 242, 132, 79, 31, 120, 244, 222, 150, 80, 62, 228, 37, 228, 110, 55, 102, 147, 60, 49, 40, 22, 106, 160, 164, 130, 227, 61, 152, 184, 74, 24, 76, 178, 59, 73, 31, 237, 52, 179, 155, 142, 229, 39, 98, 21, 32, 145, 110, 41, 11, 33, 54, 37, 91, 60, 229, 12, 75, 32, 233, 68, 224, 196, 98, 174, 39, 168, 75, 226, 219, 163, 216, 186, 79, 158, 211, 198, 206, 217, 173, 119, 141, 9, 79, 113, 19, 82, 70, 30, 206, 58, 173, 148, 50, 231, 69, 171, 3, 26, 188, 116, 192, 242, 142, 186, 165, 215, 144, 143, 86, 144, 93, 220, 200, 148, 143, 211, 19, 113, 34, 131, 229, 81, 107, 185, 217, 67, 86, 248, 72, 83, 20, 16, 103, 9, 172, 114, 200, 9, 221, 248, 107, 117, 58, 52, 6, 110, 125, 12, 49, 237, 44, 19, 150, 106, 238, 55, 126, 40, 138, 161, 54, 33, 6, 77, 146, 104, 218, 90, 52, 157, 197, 239, 223, 225, 42, 60, 69, 118, 251, 37, 143, 213, 26, 154, 165, 223, 71, 187, 119, 184, 52, 8, 188, 74, 87, 127, 111, 173, 109, 232, 186, 135, 195, 38, 168, 168, 87, 107, 64, 76, 168, 229, 196, 185, 204, 192, 167, 117, 196, 242, 184, 3, 107, 112, 67, 238, 215, 4, 122, 155, 187, 155, 61, 57, 17, 174, 207, 95, 161, 201, 175, 178, 189, 38, 103, 40, 91, 124, 167, 138, 198, 58, 17, 7, 197, 132, 173, 100, 243, 203, 234, 220, 226, 20, 213, 129, 253, 49, 12, 67, 242, 64, 74, 179, 63, 76, 208, 255, 209, 86, 225, 48, 160, 0, 35, 174, 8, 254, 200, 236, 16, 102, 59, 212, 4, 137, 198, 52, 80, 25, 85, 210, 193, 18, 28, 238, 24, 228, 22, 115, 71, 119, 117, 232, 57, 194, 239, 31, 99, 35, 64, 135, 123, 93, 88, 87, 85, 230, 49, 27, 220, 17, 11, 7, 125, 203, 144, 117, 43, 110, 214, 204, 165, 212, 216, 77, 245, 55, 144, 245, 237, 246, 64, 252, 59, 9, 109, 175, 60, 143, 172, 63, 147, 15, 122, 94, 195, 174, 1, 83, 60, 74, 38, 25, 64, 123, 25, 2, 248, 166, 201, 126, 191, 209, 83, 164, 8, 203, 54, 19, 10, 15, 71, 89, 127, 171, 33, 157, 91, 195, 146, 128, 218, 19, 79, 234, 21, 197, 188, 222, 222, 247, 181, 64, 181, 170, 54, 255, 189, 220, 97, 37, 40, 141, 234, 90, 237, 223, 251, 195, 223, 150, 245, 34, 171, 14, 4, 132, 20, 236, 80, 186, 158, 65, 173, 171, 254, 38, 115, 41, 162, 50, 171, 96, 69, 144, 141, 223, 102, 189, 114, 13, 160, 44, 81, 88, 90, 90, 89, 158, 15, 2, 166, 111, 53, 242, 39, 248, 21, 146, 158, 20, 79, 43, 153, 206, 195, 125, 225, 123, 40, 105, 140, 95, 189, 95, 232, 234, 150, 112, 218, 186, 243, 248, 189], - [176, 166, 218, 86, 144, 145, 93, 95, 205, 172, 242, 240, 250, 219, 115, 73, 215, 194, 180, 195, 52, 43, 5, 34, 46, 155, 10, 199, 238, 100, 86, 136, 175, 199, 234, 207, 124, 49, 99, 126, 172, 196, 75, 64, 80, 165, 172, 12, 42, 93, 237, 142, 237, 6, 20, 49, 26, 216, 58, 82, 13, 178, 249, 206, 237, 134, 39, 30, 141, 227, 45, 173, 53, 217, 45, 51, 62, 116, 33, 45, 105, 102, 9, 246, 46, 161, 72, 2, 239, 163, 139, 22, 87, 162, 230, 25, 212, 198, 210, 86, 65, 95, 195, 161, 43, 14, 205, 140, 30, 70, 53, 213, 41, 86, 137, 185, 214, 209, 134, 205, 44, 19, 71, 71, 135, 237, 210, 185, 94, 221, 229, 249, 228, 245, 243, 54, 188, 50, 5, 52, 0, 199, 246, 106, 190, 229, 243, 11, 108, 118, 177, 9, 76, 16, 234, 42, 221, 190, 97, 250, 155, 202, 90, 87, 33, 180, 230, 74, 191, 59, 20, 149, 189, 88, 66, 237, 247, 39, 215, 150, 7, 217, 120, 43, 229, 129, 240, 7, 255, 114, 157, 237, 73, 137, 72, 87, 248, 201, 12, 47, 240, 219, 195, 31, 244, 200, 140, 49, 28, 23, 66, 200, 111, 232, 5, 209, 252, 93, 242, 67, 79, 18, 108, 134, 18, 74, 205, 34, 104, 247, 247, 65, 94, 203, 135, 71, 27, 92, 50, 95, 187, 245, 105, 53, 220, 210, 107, 150, 170, 183, 107, 9, 59, 198, 44, 23, 203, 35, 28, 200, 233, 6, 221, 25, 219, 182, 183, 61, 34, 60, 11, 148, 141, 46, 130, 151, 217, 124, 52, 227, 53, 102, 249, 253, 167, 29, 10, 64, 205, 225, 75, 236, 197, 45, 39, 99, 225, 133, 175, 11, 106, 119, 230, 134, 170, 114, 212, 202, 55, 7, 123, 103, 50, 161, 161, 19, 224, 222, 183, 70, 219, 183, 130, 139, 46, 55, 145, 64, 101, 253, 172, 15, 53, 183, 56, 15, 119, 19, 129, 211, 133, 57, 136, 52, 80, 89, 209, 173, 106, 180, 180, 128, 4, 10, 38, 59, 201, 9, 238, 250, 171, 191, 129, 102, 12, 208, 87, 249, 195, 115, 47, 7, 248, 249, 89, 177, 179, 87, 169, 128, 123, 201, 7, 237, 145, 25, 218, 79, 82, 162, 94, 220, 193, 86, 60, 51, 154, 62, 254, 232, 207, 221, 4, 129, 65, 73, 138, 232, 17, 133, 138, 244, 76, 79, 214, 96, 125, 43, 20, 91, 177, 129, 109, 0, 123, 187, 113, 201, 168, 232, 111, 93, 16, 109, 69, 117, 222, 124, 67, 242, 108, 210, 251, 196, 176, 250, 69, 96, 170, 84, 113, 138, 136, 182, 160, 173, 155, 72, 97, 24, 156, 187, 95, 143, 65, 71, 0, 26, 49, 83, 147, 109, 157, 4, 37, 91, 190, 44, 75, 30, 75, 195, 247, 70, 99, 70, 104, 38, 76, 176, 244, 185, 24, 145, 90, 47, 85, 11, 248, 149, 163, 55, 20, 119, 111, 6, 80, 70, 226, 245, 185, 2, 93, 249, 5, 146, 224, 227, 171, 18, 185, 97, 204, 57, 108, 1, 0, 161, 24, 4, 206, 237, 208, 142, 127, 38, 114, 21, 240, 162, 130, 73, 223, 233, 242, 37, 120, 109, 209, 56, 14, 253, 37, 52, 49, 124, 248, 228, 215, 121, 177, 87, 157, 159, 33, 68, 74, 36, 137, 118, 129, 55, 126, 12, 20, 101, 1, 11, 104, 202, 223, 13, 254, 173, 69, 142, 190, 127, 229, 46, 66, 32, 84, 137, 236, 61, 150, 170, 76, 81, 202, 27, 225, 239, 54, 154, 194, 14, 99, 9, 18, 45, 126, 180, 197, 203, 252, 26, 81, 68, 156, 211, 156, 82, 241, 2, 195, 161, 154, 248, 62, 137, 7, 216, 241, 153, 93, 87, 58, 100, 193, 37, 44, 60, 59, 83, 146, 158, 119, 247, 18, 91, 12, 138, 37, 104, 90, 78, 250, 34, 203, 224, 55, 216, 158, 147, 146, 213, 245, 52, 14, 197, 4, 129, 222, 188, 69, 45, 118, 65, 225, 145, 242, 110, 14, 115, 191, 35, 91, 103, 242, 23, 246, 103, 93, 84, 240, 180, 231, 50, 17, 141, 186, 230, 23, 192, 21, 220, 156, 84, 125, 229, 215, 239, 56, 229, 14, 189, 102, 53, 176, 161, 96, 21, 178, 251, 11, 15, 35, 211, 44, 69, 133, 86, 27, 135, 111, 28, 95, 117, 227, 223, 24, 77, 207, 187, 243, 171, 48, 5, 66, 71, 108, 22, 22, 149, 106, 159, 29, 110, 32, 172, 27, 68, 16, 25, 124, 47, 176, 243, 210, 124, 17, 106, 184, 13, 234, 102, 32, 97, 45, 122, 17, 35, 162, 251, 207, 95, 117, 122, 225, 216, 160, 204, 157, 153, 142, 116, 48, 237, 60, 66, 255, 91, 181, 92, 124, 30, 238, 164, 173, 116, 211, 221, 184, 242, 32, 140, 30, 101, 209, 122, 143, 59, 252, 103, 43, 1, 38, 232, 218, 138, 142, 202, 148, 104, 209, 164, 209, 148, 155, 93, 245, 33, 180, 222, 108, 230, 140, 14, 10, 209, 146, 49, 58, 165, 25, 193, 184, 23, 110, 12, 93, 107, 86, 173, 159, 92, 14, 65, 129, 150, 155, 157, 3, 119, 92, 43, 22, 239, 131, 113, 219, 35, 215, 225, 66, 225, 8, 77, 213, 21, 114, 110, 145, 69, 193, 49, 121, 28, 53, 54, 67, 164, 224, 105, 136, 151, 30, 243, 144, 62, 80, 229, 249, 3, 143, 44, 217, 12, 63, 200, 134, 30, 167, 20, 131, 44, 70, 155, 229, 253, 16, 180, 51, 126, 83, 243, 246, 104, 100, 47, 212, 92, 147, 132, 168, 56, 244, 21, 84, 141, 252, 180, 120, 135, 153, 94, 67, 36, 203, 33, 63, 234, 5, 187, 13, 245, 168, 190, 198, 215, 28, 244, 101, 254, 35, 74, 178, 197, 185, 223, 157, 228, 26, 146, 31, 59, 199, 44, 191, 47, 171, 70, 10, 76, 4, 190, 192, 235, 189, 161, 232, 78, 184, 141, 7, 162, 84, 219, 87, 81, 183, 172, 130, 22, 217, 78, 73, 37, 222, 63, 199, 173, 190, 48, 185, 89, 93, 191, 90, 11, 134, 78, 67, 118, 250, 80, 179, 159, 2, 118, 124, 201, 153, 105, 155, 159, 81, 27, 132, 133, 92, 224, 201, 97, 144, 185, 136, 54, 53, 189, 151, 14, 173, 213, 248, 62, 110, 135, 151, 141, 184, 193, 162, 203, 238, 175, 76, 96, 252, 231, 146, 29, 190, 73, 111, 29, 220, 205, 203, 67, 208, 105, 118, 145, 81, 31, 185, 101, 30, 26, 201, 195, 5, 50, 133, 151, 91, 208, 63, 197, 2, 88, 88, 78, 220, 83, 129, 93, 98, 207, 85, 110, 115, 96, 168, 53, 30, 176, 16, 68, 15, 17, 248, 171, 92, 115, 92, 62, 58, 21, 111, 26, 248, 65, 213, 34, 9, 123, 118, 153, 4, 214, 201, 114, 99, 0, 58, 95, 82, 69, 176, 65, 35, 229, 194, 161, 97, 193, 98, 245, 183, 124, 11, 242, 199, 224, 76, 232, 101, 31, 124, 1, 212, 129, 98, 53, 0, 237, 7, 167, 53, 170, 82, 33, 239, 241, 195, 97, 205, 138, 174, 108, 8, 33, 92, 23, 202, 137, 79, 23, 181, 73, 138, 240, 224, 220, 199, 96, 57, 85, 206, 62, 100, 229, 11, 41, 253, 75, 117, 230, 111, 99, 137, 27, 162, 8, 37, 166, 190, 174, 211, 147, 197, 41, 249, 245, 136, 216, 67, 69, 176, 29, 238, 204, 188, 5, 193, 37, 200, 61, 116, 238, 208, 206, 215, 226, 43, 202, 157, 72, 77, 224, 135, 176, 63, 211, 116, 165, 20, 85, 179, 102, 37, 202, 193, 38, 123, 27, 215, 63, 17, 117, 237, 168, 205, 122, 78, 188, 226, 76, 173, 63, 163, 5, 119, 237, 182, 60, 211, 38, 223, 136, 192, 108, 50, 0, 11, 112, 235, 183, 42, 88, 210, 255, 250, 183, 81, 10, 107, 2, 233, 198, 108, 120, 202, 62, 141, 254, 93, 12, 72, 215, 247, 35, 179, 235, 132, 75, 196, 125, 202, 9, 60, 159, 139, 149, 58, 110, 112, 16, 147, 19, 241, 201, 129, 252, 175, 103, 41, 162, 211, 214, 235, 147, 62, 108, 179, 88, 102, 126, 45, 82, 40, 43, 142, 124, 71, 21, 219, 142, 0, 43, 131, 129, 239, 154, 183, 148, 130, 213, 140, 66, 98, 77, 40, 73, 119, 149, 210, 59, 164, 115, 93, 118, 93, 129, 240, 10, 50, 44, 67, 152, 195, 51, 232, 126, 104, 168, 27, 142, 44, 140, 18, 139, 149, 71, 139, 201, 95, 187, 33, 170, 130, 239, 115, 196, 204, 76, 175, 209, 32, 211, 249, 113, 127, 133, 179, 58, 57, 144, 139, 162, 17, 77, 230, 235, 180, 160, 157, 8, 209, 119, 166, 86, 255, 157, 28, 228, 15, 202, 158, 161, 162, 164, 115, 120, 226, 21, 12, 63, 213, 242, 72, 75, 237, 202, 136, 90], - [67, 2, 17, 20, 132, 117, 156, 209, 28, 207, 145, 48, 60, 66, 135, 135, 115, 24, 231, 2, 25, 184, 208, 132, 65, 111, 84, 29, 142, 243, 146, 204, 251, 115, 10, 202, 190, 205, 237, 207, 79, 245, 190, 61, 88, 51, 39, 98, 63, 215, 125, 237, 116, 197, 179, 241, 246, 93, 199, 58, 96, 18, 156, 56, 49, 54, 35, 122, 68, 30, 98, 123, 49, 105, 37, 245, 146, 174, 163, 95, 218, 164, 223, 8, 151, 3, 243, 103, 150, 107, 212, 185, 213, 235, 117, 75, 91, 137, 97, 194, 80, 69, 107, 193, 153, 4, 251, 204, 118, 68, 108, 48, 191, 4, 106, 206, 56, 75, 248, 73, 187, 248, 149, 78, 42, 7, 148, 73, 118, 49, 46, 161, 51, 11, 233, 124, 44, 156, 146, 226, 19, 232, 140, 73, 12, 89, 99, 218, 35, 227, 23, 3, 242, 27, 242, 246, 175, 143, 135, 49, 155, 73, 150, 136, 234, 12, 243, 164, 227, 37, 6, 248, 153, 229, 128, 215, 112, 30, 212, 188, 104, 209, 207, 2, 77, 87, 198, 179, 167, 225, 165, 155, 66, 114, 6, 73, 70, 157, 119, 120, 124, 61, 54, 211, 225, 95, 152, 145, 0, 151, 187, 81, 37, 51, 18, 234, 161, 55, 61, 124, 165, 187, 86, 19, 10, 131, 171, 91, 91, 2, 153, 107, 81, 229, 141, 159, 198, 12, 248, 0, 142, 197, 57, 175, 229, 188, 190, 125, 161, 54, 19, 92, 109, 242, 208, 78, 154, 236, 252, 11, 119, 64, 186, 40, 239, 103, 20, 208, 109, 67, 221, 186, 166, 205, 88, 31, 11, 134, 77, 59, 160, 209, 49, 18, 252, 38, 86, 232, 58, 105, 173, 129, 213, 127, 60, 201, 26, 3, 143, 195, 40, 76, 127, 67, 247, 233, 140, 121, 13, 141, 249, 151, 208, 20, 212, 172, 76, 205, 21, 62, 88, 166, 7, 228, 118, 77, 153, 154, 140, 201, 136, 38, 113, 107, 106, 117, 253, 116, 39, 168, 6, 60, 243, 225, 17, 0, 72, 143, 186, 223, 154, 60, 164, 83, 42, 139, 5, 76, 100, 165, 135, 212, 242, 93, 17, 188, 232, 216, 67, 103, 23, 35, 152, 113, 155, 173, 208, 78, 184, 4, 135, 127, 208, 76, 65, 181, 164, 133, 59, 247, 91, 202, 163, 81, 3, 225, 250, 128, 101, 54, 60, 209, 182, 116, 175, 248, 93, 66, 152, 60, 243, 222, 161, 45, 168, 101, 34, 126, 75, 33, 191, 86, 12, 130, 6, 88, 96, 85, 44, 12, 24, 86, 218, 174, 27, 233, 99, 139, 162, 31, 57, 10, 226, 169, 56, 251, 110, 182, 239, 178, 110, 54, 86, 228, 151, 117, 153, 254, 11, 149, 32, 51, 78, 157, 104, 231, 253, 80, 216, 144, 115, 248, 252, 247, 119, 246, 80, 74, 59, 130, 190, 32, 152, 6, 145, 192, 11, 117, 172, 131, 220, 31, 116, 160, 214, 66, 26, 209, 236, 38, 174, 231, 62, 168, 84, 7, 67, 184, 114, 148, 41, 152, 138, 79, 249, 160, 55, 230, 79, 154, 178, 210, 140, 244, 84, 109, 200, 221, 101, 182, 98, 200, 199, 109, 226, 163, 53, 18, 111, 75, 205, 223, 151, 126, 18, 105, 239, 67, 37, 213, 24, 23, 82, 68, 206, 72, 178, 217, 90, 89, 0, 158, 171, 126, 50, 160, 135, 213, 200, 235, 120, 23, 230, 118, 162, 230, 206, 92, 110, 150, 202, 246, 163, 90, 35, 183, 14, 242, 104, 107, 114, 136, 192, 201, 51, 109, 82, 9, 210, 28, 159, 154, 145, 40, 76, 43, 141, 213, 186, 67, 6, 248, 83, 79, 192, 191, 147, 183, 49, 85, 216, 188, 251, 37, 136, 90, 74, 163, 164, 188, 212, 210, 142, 252, 146, 170, 223, 10, 11, 77, 214, 14, 175, 217, 49, 34, 56, 80, 172, 55, 237, 253, 253, 26, 194, 62, 187, 151, 99, 109, 56, 57, 91, 149, 5, 197, 223, 103, 76, 108, 109, 130, 178, 233, 224, 41, 184, 42, 186, 16, 87, 176, 154, 119, 78, 118, 215, 137, 130, 107, 44, 44, 156, 80, 2, 72, 248, 5, 2, 124, 183, 6, 94, 207, 117, 108, 16, 221, 172, 19, 67, 132, 187, 48, 243, 147, 25, 90, 110, 71, 186, 253, 87, 245, 169, 237, 180, 97, 75, 22, 130, 246, 150, 199, 161, 117, 78, 234, 212, 32, 19, 33, 3, 188, 103, 165, 159, 246, 116, 240, 26, 10, 249, 229, 117, 59, 221, 190, 166, 213, 249, 43, 204, 88, 168, 28, 97, 222, 25, 132, 155, 157, 6, 192, 54, 88, 227, 25, 31, 29, 120, 24, 6, 254, 4, 7, 61, 20, 136, 37, 68, 214, 109, 204, 65, 163, 89, 173, 145, 120, 56, 105, 247, 92, 108, 61, 72, 68, 190, 234, 235, 189, 216, 15, 248, 227, 121, 194, 130, 123, 103, 63, 223, 221, 182, 109, 39, 168, 153, 25, 31, 192, 176, 226, 38, 167, 142, 17, 38, 28, 108, 106, 102, 135, 229, 25, 99, 81, 238, 186, 43, 179, 161, 43, 33, 110, 133, 39, 153, 1, 235, 213, 86, 133, 93, 246, 204, 23, 50, 37, 2, 255, 192, 182, 89, 19, 139, 246, 180, 120, 150, 197, 127, 121, 129, 149, 250, 248, 2, 147, 23, 5, 130, 175, 12, 88, 145, 173, 155, 49, 27, 119, 194, 123, 196, 239, 5, 74, 110, 49, 189, 1, 44, 157, 150, 167, 57, 40, 78, 28, 25, 0, 49, 88, 78, 72, 142, 31, 17, 183, 156, 75, 127, 201, 77, 54, 139, 99, 210, 24, 221, 177, 93, 20, 178, 21, 0, 195, 218, 7, 1, 125, 43, 79, 34, 171, 184, 66, 45, 195, 50, 25, 179, 207, 96, 43, 31, 123, 14, 159, 28, 25, 118, 67, 8, 56, 62, 202, 228, 97, 81, 118, 236, 40, 91, 21, 16, 187, 194, 2, 195, 230, 10, 28, 51, 227, 48, 200, 132, 17, 47, 89, 173, 249, 193, 24, 240, 170, 183, 111, 111, 19, 137, 237, 238, 224, 141, 1, 15, 53, 50, 169, 189, 218, 192, 65, 139, 125, 184, 154, 222, 166, 116, 92, 7, 159, 116, 220, 147, 26, 102, 22, 62, 253, 188, 16, 145, 160, 4, 8, 245, 247, 199, 234, 85, 201, 132, 14, 38, 221, 34, 106, 9, 221, 196, 220, 179, 78, 34, 53, 245, 78, 244, 66, 252, 243, 57, 40, 150, 9, 19, 216, 45, 217, 164, 91, 47, 74, 124, 96, 6, 37, 20, 3, 211, 124, 24, 2, 15, 217, 121, 248, 112, 55, 158, 190, 207, 159, 151, 172, 162, 50, 61, 169, 228, 219, 228, 147, 36, 164, 22, 141, 4, 212, 22, 196, 155, 78, 249, 24, 80, 38, 93, 210, 14, 81, 237, 9, 179, 244, 98, 147, 183, 10, 52, 86, 201, 56, 151, 162, 208, 160, 10, 239, 76, 59, 230, 146, 231, 206, 118, 75, 149, 157, 85, 120, 192, 84, 30, 239, 155, 41, 190, 41, 157, 46, 178, 24, 11, 6, 41, 34, 93, 52, 128, 5, 112, 237, 151, 97, 27, 83, 49, 128, 25, 79, 167, 241, 43, 62, 212, 119, 17, 173, 18, 107, 43, 153, 7, 29, 98, 224, 137, 187, 67, 73, 185, 229, 187, 149, 163, 70, 8, 175, 111, 123, 70, 105, 15, 247, 204, 204, 141, 152, 192, 200, 102, 138, 59, 70, 49, 40, 47, 56, 116, 20, 0, 111, 195, 28, 43, 254, 218, 181, 40, 102, 59, 164, 243, 75, 18, 238, 100, 137, 33, 160, 142, 179, 71, 155, 167, 111, 84, 23, 195, 225, 18, 118, 179, 169, 108, 119, 181, 41, 2, 203, 216, 103, 107, 227, 6, 146, 121, 199, 101, 46, 226, 203, 108, 93, 222, 200, 10, 56, 128, 53, 57, 23, 242, 193, 158, 194, 131, 95, 89, 243, 30, 150, 165, 89, 150, 6, 184, 60, 186, 7, 165, 84, 59, 236, 47, 143, 17, 93, 127, 146, 4, 119, 57, 195, 88, 86, 59, 143, 15, 140, 138, 242, 26, 149, 59, 58, 213, 35, 11, 149, 16, 229, 237, 5, 207, 141, 127, 132, 101, 167, 205, 65, 161, 158, 238, 6, 148, 155, 211, 94, 246, 74, 138, 141, 196, 95, 42, 103, 201, 0, 236, 180, 112, 79, 88, 234, 174, 160, 188, 97, 10, 252, 45, 5, 210, 39, 54, 154, 115, 170, 152, 247, 209, 210, 134, 58, 33, 89, 184, 137, 57, 206, 217, 186, 239, 216, 222, 203, 190, 171, 157, 68, 120, 76, 120, 90, 78, 227, 204, 221, 117, 17, 20, 194, 42, 89, 189, 67, 43, 53, 74, 113, 56, 194, 128, 212, 6, 159, 0, 77, 206, 195, 177, 140, 208, 34, 137, 134, 248, 91, 63, 5, 59, 235, 209, 172, 90, 239, 26, 214, 200, 53, 148, 29, 141, 75, 111, 111, 134, 24, 211, 196, 86, 64, 229, 72, 187, 167, 114, 186, 218, 147, 57, 245], - [111, 34, 7, 233, 125, 201, 120, 245, 134, 236, 171, 201, 44, 203, 144, 54, 180, 106, 113, 77, 240, 162, 150, 14, 68, 218, 23, 52, 152, 244, 158, 54, 3, 166, 225, 73, 234, 15, 124, 185, 164, 150, 245, 27, 234, 133, 219, 110, 195, 218, 0, 18, 231, 204, 178, 139, 172, 144, 237, 45, 147, 38, 15, 193, 175, 59, 41, 124, 103, 205, 222, 236, 53, 129, 125, 243, 132, 235, 181, 235, 23, 211, 15, 252, 164, 175, 23, 167, 235, 176, 65, 170, 252, 100, 159, 61, 42, 18, 76, 35, 93, 163, 165, 16, 254, 100, 1, 119, 23, 121, 24, 195, 40, 12, 163, 239, 228, 135, 143, 211, 157, 226, 237, 134, 246, 153, 11, 140, 17, 121, 133, 62, 51, 194, 121, 245, 57, 135, 142, 207, 55, 181, 109, 63, 215, 83, 119, 10, 52, 135, 60, 237, 9, 127, 254, 40, 46, 108, 59, 204, 215, 132, 135, 255, 151, 226, 175, 54, 221, 183, 11, 53, 81, 181, 244, 111, 118, 193, 52, 190, 66, 197, 224, 85, 160, 27, 14, 27, 88, 116, 167, 19, 173, 32, 127, 34, 173, 191, 141, 165, 122, 200, 120, 67, 104, 236, 242, 77, 18, 157, 53, 44, 135, 228, 7, 33, 220, 202, 21, 65, 226, 67, 32, 23, 6, 241, 178, 183, 129, 25, 212, 144, 121, 143, 124, 125, 129, 136, 65, 103, 220, 49, 20, 97, 218, 113, 227, 172, 7, 241, 8, 16, 72, 215, 111, 168, 248, 152, 164, 251, 63, 26, 98, 45, 174, 40, 13, 94, 96, 225, 28, 191, 245, 15, 54, 141, 37, 180, 17, 160, 99, 59, 33, 152, 236, 40, 60, 86, 90, 165, 179, 221, 173, 207, 204, 150, 129, 210, 30, 158, 12, 60, 31, 141, 232, 232, 208, 152, 131, 232, 120, 122, 186, 102, 128, 238, 11, 10, 103, 148, 18, 219, 71, 151, 181, 122, 80, 95, 250, 16, 165, 9, 125, 173, 223, 253, 129, 98, 2, 245, 63, 24, 124, 105, 154, 101, 3, 95, 110, 174, 29, 5, 112, 228, 77, 96, 199, 91, 192, 78, 90, 67, 86, 135, 56, 9, 183, 99, 139, 227, 104, 0, 3, 155, 42, 204, 27, 185, 6, 81, 84, 240, 74, 197, 82, 188, 157, 18, 179, 7, 252, 28, 200, 224, 255, 139, 71, 102, 38, 226, 127, 62, 7, 185, 232, 18, 20, 191, 198, 248, 121, 213, 165, 87, 118, 18, 175, 38, 23, 7, 183, 161, 186, 94, 152, 95, 249, 8, 32, 205, 79, 220, 120, 30, 236, 116, 47, 229, 69, 194, 191, 139, 156, 36, 177, 163, 36, 209, 67, 76, 231, 96, 119, 50, 140, 150, 70, 246, 248, 119, 229, 189, 23, 146, 175, 105, 207, 38, 165, 47, 96, 99, 22, 227, 239, 40, 41, 5, 142, 247, 113, 18, 83, 196, 218, 190, 91, 174, 10, 235, 147, 78, 250, 196, 158, 232, 58, 117, 47, 224, 94, 255, 135, 159, 250, 243, 167, 11, 199, 74, 97, 111, 220, 130, 64, 126, 113, 2, 247, 176, 49, 254, 150, 63, 25, 48, 17, 92, 153, 7, 111, 103, 200, 222, 224, 10, 0, 47, 226, 220, 208, 250, 174, 167, 165, 47, 14, 186, 243, 130, 72, 65, 178, 99, 95, 70, 205, 153, 190, 31, 199, 250, 23, 25, 171, 8, 233, 254, 74, 161, 37, 254, 18, 40, 42, 248, 121, 235, 87, 8, 93, 91, 200, 220, 45, 249, 219, 135, 52, 69, 137, 66, 99, 2, 155, 97, 152, 77, 186, 151, 187, 170, 138, 15, 103, 74, 3, 173, 36, 25, 131, 191, 106, 61, 176, 20, 67, 246, 89, 28, 247, 248, 169, 132, 149, 172, 235, 124, 19, 73, 213, 107, 191, 137, 33, 121, 182, 123, 103, 175, 88, 96, 61, 145, 58, 54, 17, 23, 84, 235, 137, 106, 35, 31, 86, 251, 7, 103, 211, 90, 179, 18, 147, 21, 135, 205, 107, 148, 4, 179, 181, 106, 35, 121, 75, 215, 72, 207, 138, 161, 76, 229, 85, 27, 179, 43, 70, 117, 169, 201, 102, 37, 22, 224, 254, 39, 1, 188, 47, 105, 209, 82, 214, 12, 146, 111, 99, 4, 208, 89, 67, 238, 199, 72, 83, 66, 110, 175, 79, 239, 192, 210, 146, 182, 154, 122, 176, 230, 72, 48, 89, 68, 242, 120, 79, 73, 226, 167, 139, 134, 205, 241, 121, 9, 81, 81, 88, 229, 93, 250, 49, 135, 146, 37, 35, 183, 138, 76, 123, 20, 221, 2, 203, 87, 104, 32, 225, 201, 121, 126, 47, 57, 212, 71, 67, 154, 30, 250, 142, 0, 206, 219, 153, 141, 144, 18, 227, 244, 220, 146, 142, 44, 206, 15, 78, 199, 29, 176, 104, 35, 65, 207, 79, 19, 7, 53, 109, 62, 75, 53, 158, 54, 235, 163, 42, 27, 200, 247, 79, 14, 116, 39, 186, 204, 73, 21, 105, 50, 207, 217, 91, 112, 56, 111, 225, 150, 21, 87, 148, 156, 33, 37, 10, 145, 18, 209, 157, 200, 203, 90, 124, 57, 181, 174, 153, 160, 150, 170, 169, 59, 206, 151, 222, 99, 216, 55, 47, 102, 142, 58, 77, 49, 10, 27, 145, 206, 251, 231, 127, 211, 154, 22, 67, 171, 107, 120, 209, 13, 42, 249, 173, 148, 151, 225, 194, 245, 128, 131, 145, 167, 46, 116, 21, 129, 240, 250, 166, 132, 48, 34, 157, 89, 9, 110, 131, 18, 0, 204, 103, 71, 253, 218, 184, 4, 24, 175, 193, 134, 241, 243, 153, 77, 26, 92, 15, 86, 186, 132, 31, 56, 192, 67, 89, 228, 4, 246, 152, 139, 41, 177, 162, 77, 234, 185, 44, 83, 212, 10, 174, 100, 36, 139, 35, 208, 212, 9, 251, 253, 229, 180, 162, 120, 19, 152, 174, 166, 245, 9, 96, 22, 197, 122, 37, 24, 228, 96, 51, 33, 11, 255, 197, 40, 8, 195, 219, 88, 193, 107, 254, 224, 244, 167, 34, 197, 212, 41, 64, 140, 8, 66, 92, 251, 145, 80, 72, 130, 39, 58, 133, 197, 3, 18, 151, 123, 165, 59, 162, 207, 59, 50, 60, 244, 31, 202, 75, 242, 226, 6, 243, 138, 238, 246, 193, 229, 125, 96, 143, 95, 89, 42, 60, 66, 30, 241, 40, 72, 248, 158, 35, 133, 101, 183, 27, 59, 100, 161, 199, 84, 117, 58, 251, 84, 39, 229, 105, 110, 70, 0, 87, 102, 94, 214, 245, 119, 61, 212, 225, 104, 142, 158, 140, 52, 45, 66, 82, 243, 93, 11, 114, 64, 211, 193, 222, 96, 135, 249, 254, 200, 214, 64, 243, 17, 52, 200, 207, 231, 106, 111, 40, 255, 129, 66, 38, 99, 16, 66, 49, 234, 101, 102, 155, 9, 213, 46, 51, 66, 217, 101, 68, 64, 90, 195, 238, 215, 246, 42, 4, 217, 47, 129, 123, 1, 139, 176, 174, 235, 107, 95, 174, 64, 150, 179, 237, 61, 58, 21, 46, 181, 42, 125, 209, 38, 230, 37, 72, 49, 89, 182, 24, 171, 72, 168, 56, 167, 163, 12, 253, 254, 226, 126, 138, 21, 211, 245, 210, 13, 245, 184, 233, 226, 135, 34, 246, 217, 72, 3, 37, 36, 38, 95, 223, 92, 235, 172, 212, 20, 240, 234, 130, 189, 254, 157, 233, 35, 8, 73, 14, 50, 8, 135, 47, 194, 218, 193, 180, 63, 107, 117, 198, 135, 22, 182, 218, 252, 178, 39, 244, 140, 245, 38, 139, 59, 180, 112, 181, 193, 82, 33, 18, 31, 89, 83, 8, 157, 168, 188, 193, 138, 188, 90, 223, 154, 144, 74, 172, 115, 229, 118, 145, 228, 255, 196, 172, 104, 106, 159, 245, 37, 153, 1, 166, 117, 136, 103, 79, 235, 158, 82, 49, 143, 199, 187, 202, 74, 93, 120, 56, 60, 171, 249, 135, 104, 116, 249, 231, 210, 41, 186, 68, 188, 80, 160, 94, 255, 238, 77, 48, 47, 238, 131, 227, 71, 58, 174, 39, 249, 108, 98, 67, 10, 139, 82, 80, 97, 142, 6, 189, 240, 1, 23, 164, 199, 79, 221, 141, 12, 192, 48, 120, 155, 28, 216, 22, 55, 63, 59, 103, 133, 220, 53, 19, 118, 151, 80, 49, 144, 130, 190, 63, 75, 100, 4, 46, 53, 241, 36, 19, 21, 207, 70, 105, 110, 124, 200, 36, 60, 91, 18, 20, 217, 55, 144, 76, 139, 83, 148, 159, 162, 34, 199, 56, 156, 38, 50, 180, 54, 85, 245, 113, 246, 107, 141, 250, 61, 68, 246, 82, 64, 54, 125, 92, 144, 128, 13, 135, 111, 14, 135, 139, 108, 57, 155, 64, 105, 143, 30, 134, 66, 1, 24, 208, 144, 193, 107, 5, 144, 125, 207, 131, 1, 231, 40, 161, 184, 56, 82, 182, 1, 94, 75, 167, 30, 88, 246, 219, 191, 198, 35, 158, 71, 132, 230, 91, 183, 29, 70, 213, 47, 94, 161, 120, 4, 182, 134, 226, 214, 213, 176, 247, 59], - [2, 222, 199, 107, 132, 101, 109, 1, 183, 144, 206, 28, 44, 181, 70, 232, 213, 184, 132, 219, 83, 108, 54, 175, 45, 80, 134, 244, 14, 76, 60, 210, 46, 224, 200, 146, 193, 226, 88, 187, 139, 98, 96, 37, 57, 216, 3, 96, 162, 247, 205, 19, 17, 156, 236, 196, 145, 127, 81, 50, 139, 206, 74, 24, 15, 205, 251, 96, 141, 205, 119, 51, 171, 25, 211, 255, 120, 246, 30, 166, 127, 213, 181, 115, 144, 115, 187, 104, 176, 23, 139, 141, 160, 215, 233, 222, 210, 34, 33, 141, 115, 95, 140, 109, 223, 139, 176, 80, 3, 137, 170, 48, 226, 65, 147, 60, 212, 73, 165, 225, 133, 89, 34, 252, 224, 216, 208, 146, 194, 57, 134, 200, 150, 213, 211, 28, 223, 228, 183, 157, 90, 156, 250, 162, 93, 148, 80, 219, 39, 60, 23, 62, 197, 136, 13, 25, 246, 54, 20, 10, 143, 20, 144, 149, 224, 182, 46, 86, 242, 67, 113, 83, 165, 187, 26, 134, 170, 5, 146, 48, 244, 231, 13, 185, 247, 80, 37, 174, 81, 204, 162, 45, 26, 99, 54, 108, 89, 176, 84, 246, 231, 161, 41, 66, 85, 180, 51, 11, 41, 37, 108, 96, 214, 13, 13, 125, 109, 63, 180, 101, 231, 94, 76, 75, 144, 199, 73, 159, 77, 80, 11, 177, 246, 190, 232, 189, 22, 165, 195, 102, 98, 250, 236, 54, 115, 255, 131, 203, 0, 178, 20, 214, 235, 122, 252, 196, 148, 15, 23, 252, 180, 204, 29, 156, 8, 45, 49, 181, 52, 5, 222, 35, 1, 18, 102, 0, 81, 195, 231, 134, 98, 233, 32, 225, 220, 63, 152, 53, 223, 209, 255, 204, 109, 132, 106, 133, 251, 174, 232, 34, 246, 232, 88, 192, 63, 219, 253, 250, 0, 4, 253, 159, 18, 59, 198, 110, 189, 80, 232, 58, 229, 239, 13, 34, 154, 2, 82, 239, 24, 240, 97, 160, 212, 89, 187, 218, 39, 78, 168, 200, 152, 163, 140, 124, 200, 242, 138, 214, 195, 18, 219, 147, 110, 123, 131, 243, 24, 155, 165, 213, 233, 3, 167, 71, 30, 3, 91, 132, 116, 89, 53, 102, 216, 189, 216, 223, 142, 166, 191, 53, 242, 199, 12, 210, 83, 194, 243, 89, 195, 156, 135, 203, 223, 100, 82, 108, 154, 211, 24, 129, 45, 74, 24, 11, 246, 210, 178, 142, 220, 149, 22, 183, 211, 81, 47, 185, 146, 249, 149, 45, 28, 252, 35, 44, 2, 15, 241, 250, 93, 9, 126, 26, 203, 160, 3, 70, 207, 185, 131, 71, 28, 177, 193, 31, 230, 221, 79, 16, 134, 56, 142, 199, 167, 204, 152, 242, 47, 91, 29, 116, 26, 75, 78, 45, 4, 157, 166, 174, 194, 191, 24, 29, 111, 60, 242, 75, 82, 49, 204, 58, 140, 203, 67, 116, 229, 178, 88, 87, 189, 181, 200, 39, 82, 7, 27, 63, 150, 175, 7, 72, 245, 92, 115, 247, 27, 49, 207, 12, 158, 244, 49, 131, 102, 28, 106, 11, 113, 18, 139, 48, 179, 157, 187, 113, 42, 119, 7, 122, 37, 224, 254, 76, 181, 240, 171, 151, 162, 191, 60, 217, 77, 159, 74, 76, 41, 64, 162, 253, 228, 254, 161, 1, 68, 174, 28, 247, 237, 156, 227, 98, 39, 15, 170, 235, 24, 129, 228, 117, 246, 45, 152, 164, 240, 103, 67, 188, 17, 221, 212, 8, 173, 30, 42, 129, 97, 250, 133, 105, 4, 14, 195, 208, 62, 6, 147, 194, 175, 164, 120, 104, 91, 120, 242, 131, 38, 62, 246, 146, 36, 32, 220, 158, 76, 198, 83, 60, 80, 94, 54, 78, 254, 110, 196, 171, 134, 124, 33, 250, 150, 66, 30, 40, 1, 119, 161, 162, 50, 28, 13, 254, 68, 125, 36, 128, 160, 110, 220, 186, 142, 250, 45, 43, 177, 37, 23, 246, 149, 37, 145, 212, 1, 139, 241, 59, 22, 11, 65, 250, 68, 210, 234, 30, 187, 53, 27, 228, 25, 75, 30, 188, 112, 158, 156, 61, 31, 62, 193, 128, 206, 248, 229, 164, 27, 251, 48, 128, 29, 49, 156, 75, 54, 248, 117, 77, 224, 5, 124, 96, 172, 200, 211, 155, 175, 25, 199, 101, 180, 221, 162, 60, 32, 150, 124, 56, 143, 11, 235, 186, 144, 250, 206, 38, 227, 228, 1, 57, 176, 218, 142, 173, 82, 182, 225, 44, 224, 81, 218, 229, 204, 255, 121, 124, 235, 168, 232, 174, 167, 42, 194, 81, 177, 159, 29, 11, 43, 164, 242, 30, 247, 2, 118, 222, 132, 157, 86, 67, 244, 42, 42, 196, 221, 98, 102, 252, 36, 193, 204, 20, 114, 97, 250, 21, 237, 215, 162, 140, 1, 194, 246, 93, 104, 66, 156, 206, 137, 51, 4, 50, 107, 70, 213, 117, 228, 91, 39, 51, 128, 69, 172, 30, 7, 180, 79, 171, 161, 53, 37, 216, 53, 233, 126, 4, 247, 94, 199, 24, 57, 43, 173, 92, 65, 49, 11, 150, 191, 37, 174, 133, 243, 47, 21, 129, 38, 254, 147, 159, 16, 191, 164, 246, 36, 88, 163, 35, 148, 164, 146, 126, 85, 51, 70, 228, 141, 72, 63, 192, 132, 124, 36, 231, 32, 205, 238, 87, 78, 82, 172, 202, 12, 158, 41, 203, 1, 187, 196, 170, 117, 12, 150, 185, 63, 186, 88, 244, 212, 141, 148, 57, 138, 133, 21, 213, 98, 162, 221, 7, 160, 214, 111, 80, 81, 62, 229, 234, 226, 13, 86, 11, 117, 231, 239, 252, 120, 45, 58, 68, 30, 149, 4, 82, 34, 92, 63, 180, 232, 33, 30, 141, 218, 21, 49, 109, 146, 236, 125, 196, 186, 214, 211, 148, 97, 213, 171, 208, 200, 103, 122, 66, 184, 174, 83, 167, 95, 82, 126, 13, 55, 138, 185, 103, 193, 119, 132, 173, 57, 253, 112, 81, 114, 238, 218, 164, 146, 52, 90, 156, 68, 28, 226, 190, 90, 73, 211, 127, 58, 17, 250, 156, 183, 124, 156, 201, 27, 121, 210, 211, 99, 38, 228, 38, 171, 153, 166, 80, 192, 226, 71, 163, 62, 133, 34, 216, 250, 120, 136, 136, 0, 94, 78, 208, 136, 201, 94, 217, 153, 125, 16, 71, 160, 147, 32, 121, 3, 212, 134, 231, 71, 71, 159, 53, 76, 234, 197, 73, 105, 243, 252, 64, 230, 229, 193, 145, 105, 172, 44, 165, 133, 205, 42, 78, 106, 137, 241, 120, 47, 246, 76, 191, 78, 118, 202, 6, 107, 185, 87, 114, 207, 114, 175, 255, 159, 89, 28, 96, 157, 145, 135, 143, 56, 236, 179, 127, 234, 170, 213, 27, 79, 174, 236, 224, 204, 117, 96, 58, 249, 95, 177, 176, 254, 150, 230, 77, 54, 232, 200, 23, 76, 108, 111, 210, 120, 110, 147, 179, 94, 169, 162, 77, 42, 93, 139, 215, 53, 91, 65, 255, 66, 109, 95, 37, 23, 118, 153, 64, 153, 127, 167, 225, 226, 107, 223, 155, 254, 191, 199, 150, 232, 32, 34, 168, 74, 186, 171, 4, 34, 224, 196, 52, 131, 112, 224, 62, 25, 191, 223, 87, 177, 132, 162, 13, 49, 229, 57, 103, 215, 42, 205, 89, 67, 41, 232, 239, 25, 167, 178, 187, 146, 234, 202, 56, 154, 30, 103, 252, 155, 109, 236, 24, 222, 19, 64, 210, 201, 68, 39, 42, 163, 222, 118, 125, 44, 138, 189, 110, 89, 213, 73, 89, 134, 18, 179, 225, 90, 174, 2, 61, 213, 113, 84, 178, 20, 13, 180, 223, 226, 123, 124, 65, 119, 150, 148, 146, 57, 153, 17, 54, 90, 211, 222, 27, 93, 175, 11, 112, 243, 145, 161, 202, 50, 200, 247, 160, 138, 191, 173, 16, 24, 241, 238, 184, 81, 38, 183, 24, 4, 109, 199, 179, 86, 191, 236, 80, 111, 239, 60, 178, 110, 24, 198, 127, 255, 32, 49, 166, 134, 161, 18, 27, 160, 85, 80, 238, 118, 98, 20, 8, 49, 253, 132, 116, 34, 86, 147, 102, 73, 67, 127, 219, 155, 230, 185, 153, 186, 162, 231, 76, 206, 116, 121, 162, 183, 19, 226, 232, 35, 118, 195, 239, 148, 140, 68, 249, 231, 152, 1, 52, 104, 169, 85, 213, 195, 164, 35, 235, 202, 55, 234, 109, 56, 248, 42, 224, 226, 221, 129, 154, 54, 241, 40, 115, 233, 10, 236, 118, 246, 80, 140, 132, 104, 142, 228, 71, 215, 192, 20, 231, 155, 45, 254, 42, 165, 120, 148, 83, 216, 185, 152, 58, 170, 231, 67, 62, 94, 41, 68, 162, 43, 174, 217, 178, 144, 24, 229, 140, 75, 65, 198, 93, 138, 129, 87, 214, 206, 9, 157, 230, 78, 45, 107, 99, 30, 91, 171, 89, 197, 150, 152, 140, 145, 44, 118, 46, 112, 246, 127, 65, 239, 61, 60, 0, 53, 116, 123, 236, 162, 213, 41, 32, 3, 69, 213, 49, 201, 85, 79, 182, 128, 123, 148, 12], - [94, 150, 186, 171, 55, 44, 163, 82, 11, 196, 205, 2, 20, 5, 9, 88, 228, 180, 4, 97, 0, 157, 192, 45, 50, 114, 50, 33, 165, 111, 73, 141, 164, 109, 109, 31, 96, 24, 253, 99, 70, 218, 234, 27, 121, 45, 192, 116, 19, 252, 209, 29, 45, 130, 19, 39, 218, 152, 72, 91, 214, 73, 90, 181, 31, 222, 164, 0, 70, 192, 193, 224, 27, 112, 246, 248, 37, 129, 95, 221, 123, 14, 187, 245, 172, 13, 244, 168, 52, 231, 122, 38, 36, 47, 254, 231, 102, 125, 225, 91, 39, 247, 163, 255, 189, 202, 168, 226, 41, 205, 156, 38, 40, 248, 10, 2, 217, 15, 62, 124, 239, 25, 56, 66, 179, 20, 194, 151, 241, 23, 147, 145, 239, 146, 71, 162, 60, 21, 202, 206, 133, 215, 191, 35, 166, 21, 248, 126, 213, 67, 30, 89, 181, 7, 16, 140, 220, 180, 81, 91, 93, 183, 111, 13, 137, 114, 187, 134, 72, 74, 130, 129, 33, 90, 156, 6, 113, 92, 232, 168, 16, 78, 248, 209, 73, 110, 30, 243, 5, 33, 242, 36, 221, 71, 81, 84, 115, 16, 188, 205, 241, 244, 34, 94, 156, 108, 15, 29, 90, 63, 28, 90, 23, 213, 243, 226, 188, 224, 79, 100, 116, 177, 209, 6, 171, 117, 108, 9, 0, 123, 149, 233, 131, 38, 232, 65, 184, 19, 251, 251, 229, 58, 183, 214, 73, 204, 181, 156, 91, 240, 196, 145, 233, 231, 195, 198, 5, 244, 244, 155, 151, 48, 245, 132, 0, 203, 102, 216, 238, 193, 79, 245, 218, 121, 18, 161, 207, 231, 48, 223, 180, 1, 37, 201, 99, 16, 164, 39, 215, 58, 22, 11, 54, 110, 195, 130, 187, 49, 200, 171, 119, 55, 76, 152, 32, 151, 69, 20, 213, 165, 215, 212, 94, 179, 108, 181, 98, 21, 115, 57, 185, 21, 207, 2, 22, 253, 2, 195, 161, 33, 223, 231, 144, 170, 250, 51, 89, 175, 65, 143, 68, 232, 20, 251, 218, 6, 255, 112, 191, 99, 4, 192, 6, 158, 248, 108, 14, 198, 138, 203, 158, 105, 207, 127, 197, 19, 160, 150, 111, 110, 106, 177, 253, 74, 173, 80, 5, 1, 109, 36, 1, 21, 191, 44, 171, 10, 146, 153, 10, 179, 157, 73, 127, 49, 215, 81, 134, 119, 40, 151, 250, 144, 249, 121, 22, 205, 234, 3, 78, 81, 59, 185, 208, 134, 131, 192, 3, 189, 202, 217, 62, 211, 190, 87, 223, 174, 242, 12, 66, 145, 34, 206, 19, 109, 150, 84, 90, 241, 220, 190, 239, 86, 254, 152, 2, 255, 88, 155, 168, 48, 95, 130, 41, 52, 183, 177, 37, 147, 5, 68, 152, 38, 74, 101, 182, 166, 131, 237, 242, 229, 43, 226, 197, 202, 190, 223, 119, 109, 186, 143, 140, 184, 26, 41, 198, 174, 48, 197, 187, 150, 146, 198, 28, 173, 163, 182, 92, 209, 142, 255, 212, 125, 120, 52, 85, 250, 85, 55, 25, 85, 40, 32, 102, 28, 98, 174, 149, 110, 237, 205, 222, 157, 56, 145, 39, 200, 254, 63, 198, 217, 17, 210, 13, 169, 33, 25, 89, 239, 51, 249, 131, 6, 3, 107, 50, 56, 201, 56, 96, 224, 82, 9, 186, 150, 73, 201, 235, 241, 57, 130, 99, 182, 91, 215, 246, 107, 200, 220, 162, 255, 10, 54, 83, 104, 30, 235, 150, 54, 137, 12, 48, 249, 103, 173, 174, 144, 202, 180, 20, 93, 49, 239, 111, 58, 88, 123, 255, 50, 172, 172, 4, 103, 64, 171, 64, 106, 170, 213, 9, 27, 93, 26, 186, 191, 117, 37, 150, 62, 168, 54, 1, 62, 181, 206, 26, 159, 69, 70, 198, 224, 112, 59, 125, 6, 95, 225, 249, 230, 233, 112, 98, 33, 116, 8, 62, 58, 103, 50, 38, 49, 142, 194, 164, 58, 24, 66, 20, 194, 3, 15, 69, 188, 228, 207, 75, 26, 182, 151, 94, 237, 192, 207, 9, 221, 187, 35, 144, 210, 52, 12, 25, 165, 236, 144, 214, 222, 171, 179, 184, 165, 164, 31, 90, 2, 19, 125, 72, 139, 103, 115, 223, 86, 175, 11, 241, 172, 246, 70, 54, 19, 188, 220, 49, 19, 254, 237, 124, 159, 254, 248, 240, 235, 33, 201, 64, 217, 3, 13, 228, 208, 113, 64, 138, 132, 227, 116, 191, 244, 32, 148, 20, 111, 112, 239, 111, 23, 12, 62, 102, 186, 137, 243, 158, 225, 85, 50, 7, 61, 240, 164, 241, 243, 204, 130, 7, 6, 48, 116, 174, 192, 110, 217, 173, 37, 6, 207, 163, 253, 160, 199, 5, 10, 111, 43, 198, 131, 168, 129, 88, 107, 42, 9, 48, 115, 190, 183, 9, 185, 73, 214, 121, 219, 34, 213, 207, 198, 193, 166, 255, 214, 236, 169, 95, 25, 129, 212, 191, 239, 207, 110, 176, 177, 154, 210, 123, 204, 211, 102, 26, 54, 249, 7, 42, 104, 111, 57, 152, 89, 140, 139, 96, 65, 150, 129, 201, 37, 233, 216, 141, 185, 235, 13, 33, 201, 85, 52, 32, 78, 54, 233, 87, 124, 200, 208, 209, 123, 88, 157, 160, 216, 213, 126, 174, 60, 54, 143, 206, 9, 243, 219, 70, 228, 223, 121, 182, 32, 138, 103, 182, 120, 92, 95, 30, 174, 140, 78, 245, 119, 201, 146, 81, 27, 204, 150, 59, 24, 145, 251, 39, 53, 55, 255, 164, 108, 136, 192, 187, 50, 197, 93, 212, 235, 244, 176, 91, 242, 46, 94, 51, 210, 124, 27, 254, 151, 208, 191, 127, 149, 193, 187, 106, 69, 13, 62, 23, 201, 70, 144, 42, 23, 47, 182, 136, 112, 200, 159, 75, 96, 43, 155, 1, 220, 50, 149, 65, 225, 226, 21, 55, 138, 63, 190, 127, 17, 244, 143, 174, 8, 209, 161, 16, 201, 106, 11, 183, 106, 107, 137, 144, 17, 12, 42, 246, 33, 223, 27, 210, 176, 175, 92, 65, 74, 202, 208, 197, 253, 26, 155, 125, 188, 130, 29, 17, 206, 202, 71, 232, 232, 54, 122, 129, 231, 191, 131, 86, 225, 33, 178, 37, 146, 16, 252, 75, 26, 36, 85, 215, 189, 75, 255, 155, 118, 76, 250, 41, 161, 72, 53, 185, 8, 67, 214, 101, 33, 129, 1, 240, 137, 177, 241, 150, 69, 151, 51, 0, 86, 59, 6, 96, 68, 167, 67, 191, 11, 86, 20, 89, 156, 195, 151, 128, 141, 226, 203, 234, 90, 190, 220, 31, 172, 151, 158, 252, 5, 193, 70, 80, 185, 57, 91, 223, 164, 46, 87, 198, 248, 241, 187, 19, 11, 14, 112, 159, 113, 214, 246, 137, 91, 35, 44, 38, 26, 146, 55, 34, 242, 26, 71, 81, 172, 135, 186, 217, 89, 78, 104, 80, 24, 149, 235, 38, 99, 223, 224, 61, 8, 89, 239, 110, 143, 152, 214, 21, 29, 92, 86, 189, 204, 122, 184, 41, 64, 196, 229, 190, 3, 52, 51, 48, 144, 92, 214, 76, 145, 157, 127, 34, 169, 157, 2, 62, 245, 181, 132, 178, 71, 246, 198, 46, 48, 98, 37, 252, 52, 238, 33, 206, 112, 20, 55, 60, 40, 22, 119, 197, 116, 43, 153, 65, 172, 188, 163, 79, 184, 226, 55, 53, 12, 216, 236, 188, 236, 163, 179, 43, 140, 201, 48, 197, 47, 113, 237, 98, 38, 86, 20, 174, 29, 51, 169, 133, 12, 152, 185, 227, 105, 94, 142, 91, 59, 155, 251, 19, 26, 63, 9, 243, 197, 61, 170, 35, 39, 205, 150, 168, 132, 40, 123, 74, 199, 85, 134, 90, 122, 215, 32, 11, 161, 122, 179, 199, 22, 162, 147, 142, 104, 50, 149, 180, 3, 232, 144, 196, 45, 30, 152, 143, 181, 71, 184, 173, 226, 22, 74, 163, 171, 247, 240, 197, 20, 226, 122, 48, 15, 65, 187, 196, 53, 161, 163, 72, 65, 65, 244, 9, 243, 240, 27, 35, 152, 147, 102, 205, 56, 159, 24, 237, 39, 3, 232, 48, 10, 150, 178, 32, 4, 4, 163, 131, 58, 3, 87, 154, 185, 129, 171, 115, 27, 175, 101, 133, 166, 157, 192, 197, 26, 67, 80, 78, 52, 230, 192, 131, 153, 111, 124, 93, 107, 154, 234, 127, 20, 175, 253, 142, 195, 10, 120, 200, 89, 51, 150, 253, 201, 1, 243, 41, 255, 138, 48, 46, 185, 173, 107, 236, 241, 80, 253, 210, 132, 27, 215, 102, 170, 255, 86, 76, 230, 173, 220, 152, 55, 14, 21, 28, 129, 195, 5, 109, 110, 220, 85, 59, 91, 99, 35, 22, 251, 102, 162, 9, 110, 55, 250, 210, 142, 145, 28, 245, 31, 96, 129, 23, 161, 49, 242, 47, 241, 75, 88, 156, 206, 25, 107, 114, 125, 80, 120, 233, 126, 175, 146, 200, 76, 3, 111, 47, 247, 7, 225, 59, 173, 213, 179, 193, 50, 48, 207, 29, 237, 100, 13, 112, 50, 7, 70, 30, 204, 76, 9] - ], - "iv": null, - "key": [75, 120, 7, 77, 142, 97, 247, 57, 140, 96, 178, 14, 52, 177, 32, 97], - "modeOfOperation": "ctr", - "plaintext": [ - [3, 212, 200, 80, 236, 211, 51, 146, 30, 111, 239, 49, 44, 30, 147, 41, 245, 51, 31, 27, 30, 220, 11, 221, 142, 89, 45, 21, 135, 51, 57, 78, 45, 64, 41, 117, 84, 123, 143, 30, 49, 229, 60, 71, 191, 10, 221, 42, 185, 203, 11, 104, 175, 92, 63, 161, 242, 167, 97, 83, 137, 99, 65, 100, 236, 52, 199, 168, 73, 191, 217, 217, 217, 220, 122, 194, 255, 150, 132, 122, 121, 253, 59, 238, 136, 139, 127, 184, 19, 245, 145, 117, 72, 0, 32, 144, 80, 103, 101, 140, 143, 250, 226, 67, 37, 237, 116, 19, 115, 101, 165, 179, 97, 80, 190, 238, 230, 229, 204, 0, 5, 230, 59, 119, 115, 150, 101, 150, 40, 181, 68, 207, 184, 145, 100, 110, 191, 23, 104, 228, 199, 156, 44, 181, 84, 179, 129, 12, 24, 201, 45, 104, 106, 131, 203, 10, 74, 73, 179, 238, 106, 104, 142, 132, 255, 110, 146, 174, 90, 119, 104, 200, 11, 126, 235, 107, 97, 111, 131, 86, 2, 105, 209, 91, 91, 111, 22, 101, 67, 111, 188, 13, 31, 193, 49, 15, 42, 204, 103, 175, 201, 77, 231, 55, 190, 250, 236, 72, 25, 109, 157, 50, 62, 155, 11, 151, 77, 251, 222, 31, 108, 151, 213, 247, 153, 22, 91, 14, 36, 133, 214, 197, 171, 226, 211, 210, 246, 84, 224, 103, 241, 131, 251, 30, 107, 155, 93, 156, 149, 203, 30, 122, 57, 112, 156, 135, 241, 121, 30, 87, 70, 145, 241, 108, 85, 151, 217, 42, 161, 107, 93, 147, 81, 114, 142, 59, 52, 174, 89, 34, 10, 140, 246, 154, 81, 4, 58, 182, 25, 75, 135, 197, 10, 227, 251, 137, 243, 46, 121, 149, 218, 97, 2, 101, 136, 37, 243, 53, 63, 49, 56, 36, 113, 46, 112, 218, 140, 200, 164, 242, 220, 61, 95, 109, 141, 59, 56, 225, 201, 24, 48, 101, 239, 28, 61, 64, 110, 81, 57, 60, 230, 255, 33, 106, 0, 241, 164, 184, 46, 28, 141, 66, 112, 219, 64, 162, 189, 68, 166, 100, 113, 143, 97, 39, 171, 223, 60, 19, 154, 179, 3, 202, 83, 38, 224, 71, 42, 6, 162, 111, 218, 131, 71, 225, 212, 14, 14, 158, 3, 166, 144, 160, 208, 213, 3, 97, 192, 178, 173, 218, 1, 95, 212, 35, 139, 241, 140, 176, 127, 168, 183, 37, 134, 1, 242, 185, 28, 219, 228, 155, 124, 170, 131, 126, 76, 132, 176, 149, 42, 146, 175, 255, 250, 47, 46, 131, 25, 241, 197, 32, 115, 14, 40, 100, 48, 228, 86, 178, 129, 170, 35, 228, 25, 85, 171, 224, 174, 244, 110, 217, 17, 176, 233, 166, 215, 162, 61, 122, 127, 181, 48, 227, 163, 138, 175, 86, 227, 65, 22, 141, 156, 175, 55, 141, 154, 224, 131, 227, 183, 232, 42, 151, 33, 71, 87, 53, 80, 36, 89, 137, 171, 122, 58, 117, 227, 75, 80, 194, 187, 108, 68, 178, 66, 21, 253, 118, 242, 165, 170, 0, 199, 205, 53, 231, 232, 123, 233, 3, 141, 70, 23, 49, 243, 16, 35, 110, 84, 106, 3, 162, 179, 225, 35, 117, 222, 13, 141, 17, 83, 159, 205, 223, 214, 75, 194, 8, 84, 2, 173, 202, 57, 192, 51, 148, 183, 83, 57, 252, 236, 36, 6, 113, 77, 179, 46, 55, 86, 91, 232, 255, 169, 22, 78, 109, 158, 247, 161, 218, 57, 23, 19, 77, 40, 13, 110, 220, 142, 235, 236, 69, 19, 117, 103, 55, 29, 227, 143, 119, 201, 68, 237, 35, 195, 65, 101, 174, 55, 173, 187, 40, 187, 162, 194, 6, 139, 158, 140, 244, 201, 129, 48, 20, 43, 27, 5, 121, 85, 28, 130, 56, 36, 202, 209, 105, 199, 78, 42, 48, 82, 150, 207, 41, 37, 115, 63, 130, 232, 4, 7, 140, 209, 69, 43, 18, 69, 249, 117, 178, 185, 47, 79, 233, 73, 173, 114, 96, 62, 131, 173, 55, 39, 128, 189, 125, 27, 13, 21, 85, 0, 238, 19, 145, 172, 239, 126, 203, 226, 145, 216, 194, 33, 71, 104, 103, 101, 166, 35, 134, 64, 135, 232, 80, 73, 184, 117, 29, 147, 251, 207, 30, 88, 13, 38, 68, 99, 58, 173, 59, 191, 229, 228, 84, 30, 213, 220, 23, 184, 243, 167, 216, 98, 53, 59, 54, 15, 223, 225, 185, 111, 152, 214, 4, 140, 62, 167, 249, 145, 70, 205, 199, 12, 67, 162, 20, 62, 82, 59, 238, 3, 212, 246, 88, 82, 227, 95, 36, 84, 33, 137, 63, 118, 198, 134, 0, 59, 150, 144, 13, 154, 82, 169, 142, 117, 243, 76, 61, 228, 242, 11, 246, 251, 45, 116, 126, 196, 91, 34, 173, 242, 182, 27, 129, 19, 234, 138, 72, 116, 32, 130, 97, 253, 244, 184, 184, 51, 193, 189, 234, 107, 206, 88, 46, 158, 80, 145, 122, 231, 211, 118, 106, 73, 42, 216, 195, 112, 41, 196, 101, 116, 96, 247, 5, 34, 19, 233, 37, 233, 228, 182, 175, 242, 240, 82, 252, 104, 139, 116, 100, 118, 26, 189, 24, 252, 191, 159, 99, 130, 194, 97, 133, 132, 74, 12, 175, 53, 125, 85, 158, 150, 115, 217, 211, 249, 86, 200, 86, 66, 35, 99, 147, 180, 212, 56, 6, 17, 161, 45, 106, 179, 48, 182, 14, 50, 241, 39, 104, 1, 0, 153, 252, 171, 155, 20, 181, 53, 73, 69, 172, 149, 2, 175, 169, 150, 98, 88, 157, 187, 227, 194, 37, 164, 208, 182, 28, 160, 155, 174, 204, 151, 227, 41, 101, 94, 48, 159, 109, 84, 50, 191, 145, 166, 247, 14, 41, 33, 10, 196, 58, 96, 24, 3, 75, 215, 212, 211, 55, 251, 200, 141, 17, 221, 153, 94, 240, 30, 32, 53, 247, 179, 167, 71, 180, 181, 183, 203, 20, 169, 255, 214, 254, 110, 241, 207, 47, 194, 55, 9, 0, 159, 152, 160, 51, 240, 22, 109, 218, 59, 21, 234, 163, 193, 192, 126, 219, 135, 82, 76, 93, 240, 95, 26, 2, 193, 71, 20, 215, 14, 239, 67, 125, 137, 116, 76, 108, 255, 85, 48, 78, 33, 72, 211, 179, 134, 31, 187, 210, 102, 67, 160, 30, 152, 27, 245, 150, 44, 95, 105, 157, 12, 8, 71, 127, 166, 93, 59, 118, 80, 163, 80, 242, 154, 2, 32, 9, 63, 19, 82, 110, 41, 0, 16, 248, 150, 77, 238, 214, 42, 216, 244, 133, 217, 183, 76, 195, 117, 79, 150, 67, 74, 173, 231, 50, 93, 224, 46, 130, 111, 101, 104, 109, 59, 203, 216, 21, 152, 22, 38, 253, 120, 196, 227, 11, 87, 175, 46, 225, 105, 184, 46, 212, 37, 113, 17, 17, 197, 107, 122, 70, 174, 123, 253, 39, 114, 223, 85, 35, 150, 64, 24, 117, 160, 57, 132, 163, 2, 192, 66, 3, 92, 83, 193, 88, 191, 66, 57, 19, 9, 82, 247, 203, 124, 194, 0, 80, 219, 207, 87, 84, 150, 200, 189, 68, 198, 178, 158, 8, 99, 102, 130, 190, 72, 138, 252, 98, 68, 70, 40, 71, 100, 29, 156, 187, 94, 178, 24, 219, 235, 218, 6, 149, 28, 4, 91, 182, 219, 96, 180, 238, 164, 247, 150, 127, 110, 255, 106, 100, 92, 152, 6, 36, 51, 245, 241, 88, 229, 207, 51, 8, 27, 18, 97, 14, 156, 197, 28, 218, 109, 160, 78, 228, 151, 89, 206, 17, 157, 12, 55, 231, 162, 249, 96, 106, 171, 52, 175, 208, 242, 17, 204, 119, 57, 239, 27, 19, 234, 4, 115, 132, 210, 124, 107, 111, 85, 46, 157, 203, 27, 77, 215, 82, 120, 40, 140, 103, 230, 136, 129, 249, 252, 163, 237, 18, 166, 117, 201, 161, 233, 14, 40, 19, 54, 222, 22, 57, 163, 36, 27, 155, 223, 150, 165, 148, 195, 50, 2, 103, 119, 46, 91, 204, 103, 78, 3, 112, 192, 211, 77, 126, 53, 163, 203, 224, 227, 61, 79, 195, 175, 58, 150, 47, 218, 223, 182, 215, 106, 103, 98, 243, 51, 76, 57, 22, 234, 18, 196, 126, 236, 119, 97, 17, 68, 15, 104, 240, 224, 172, 173, 9, 168, 203, 33, 234, 27, 137, 189, 51, 204, 154, 155, 82, 127, 50, 65, 42, 39, 26, 62, 25, 247, 34, 40, 45, 114, 142, 2, 125, 188, 48, 179, 243, 166, 24, 40, 34, 45, 77, 19, 218, 193, 135, 109, 17, 147, 100, 59, 208, 101, 167, 30, 26, 127, 189, 56, 116, 105, 26, 237, 52, 133, 23, 204, 219, 188, 148, 134, 24, 5, 140, 244, 56, 98, 13, 88, 47, 168, 233, 57, 153, 69, 13, 22, 46, 94, 216, 201, 150, 180, 129, 125, 189, 96, 72, 199, 235, 100, 14, 26, 207, 0, 252, 171, 141, 17, 84, 93, 65, 55, 111, 170, 222], - [81, 84, 9, 252, 185, 94, 20, 131, 167, 196, 238, 8, 111, 227, 175, 68, 125, 210, 154, 143, 130, 243, 103, 61, 112, 39, 152, 72, 103, 160, 214, 61, 159, 62, 51, 142, 225, 238, 178, 35, 231, 246, 93, 119, 85, 216, 105, 57, 186, 179, 171, 195, 62, 153, 29, 132, 18, 119, 244, 127, 212, 184, 31, 183, 159, 139, 191, 62, 106, 11, 104, 172, 67, 235, 37, 104, 217, 82, 90, 75, 205, 163, 52, 158, 145, 230, 154, 193, 40, 242, 125, 105, 96, 201, 194, 166, 221, 64, 47, 15, 95, 116, 40, 145, 128, 56, 5, 125, 221, 54, 124, 252, 72, 102, 232, 107, 177, 38, 248, 185, 241, 125, 85, 193, 201, 47, 106, 198, 173, 76, 41, 54, 104, 248, 140, 133, 229, 135, 163, 26, 112, 176, 228, 166, 58, 164, 30, 74, 3, 237, 165, 171, 138, 119, 71, 204, 102, 148, 155, 2, 94, 55, 171, 241, 179, 29, 16, 122, 190, 210, 161, 163, 38, 130, 101, 64, 137, 255, 123, 83, 176, 12, 169, 29, 21, 182, 207, 218, 161, 210, 117, 190, 53, 134, 127, 134, 107, 35, 172, 148, 137, 177, 113, 174, 166, 170, 224, 1, 14, 9, 59, 58, 238, 73, 249, 138, 251, 3, 185, 141, 125, 182, 108, 145, 195, 95, 4, 155, 14, 128, 37, 56, 130, 154, 21, 133, 59, 125, 118, 244, 4, 170, 34, 162, 87, 101, 140, 148, 139, 113, 202, 243, 241, 193, 159, 188, 76, 127, 149, 169, 182, 227, 133, 237, 138, 244, 78, 203, 226, 118, 130, 184, 196, 118, 155, 33, 39, 27, 180, 108, 193, 226, 123, 50, 56, 233, 7, 80, 249, 80, 42, 135, 159, 15, 95, 97, 81, 212, 200, 150, 23, 159, 184, 12, 38, 153, 137, 170, 73, 225, 113, 164, 110, 42, 140, 245, 59, 123, 186, 145, 161, 172, 44, 193, 81, 60, 86, 121, 160, 168, 150, 185, 108, 51, 147, 85, 65, 246, 182, 214, 103, 111, 177, 178, 156, 250, 54, 245, 216, 6, 144, 184, 73, 160, 248, 231, 73, 134, 12, 136, 240, 60, 78, 49, 234, 31, 101, 224, 158, 58, 121, 30, 40, 40, 59, 44, 86, 190, 16, 226, 61, 184, 211, 89, 255, 90, 114, 221, 139, 8, 211, 69, 129, 42, 229, 154, 16, 40, 144, 221, 248, 205, 20, 215, 245, 216, 110, 28, 88, 5, 79, 64, 68, 123, 242, 63, 131, 193, 195, 247, 77, 177, 54, 149, 208, 144, 185, 233, 219, 118, 186, 42, 21, 164, 108, 75, 252, 70, 173, 145, 2, 196, 122, 218, 13, 147, 84, 87, 184, 244, 116, 24, 106, 83, 10, 197, 229, 254, 178, 142, 105, 22, 146, 170, 119, 111, 176, 214, 172, 77, 152, 185, 175, 251, 170, 146, 97, 156, 156, 79, 181, 167, 143, 192, 219, 71, 34, 95, 239, 176, 91, 126, 115, 138, 207, 111, 232, 61, 249, 204, 39, 121, 32, 184, 98, 148, 164, 167, 102, 191, 151, 36, 88, 11, 153, 115, 37, 153, 248, 173, 54, 55, 195, 62, 159, 107, 35, 188, 62, 5, 219, 146, 121, 218, 161, 104, 81, 101, 198, 80, 68, 222, 114, 251, 40, 168, 102, 131, 31, 218, 98, 137, 169, 228, 9, 72, 27, 74, 47, 82, 232, 244, 109, 171, 52, 98, 16, 84, 151, 111, 231, 38, 88, 81, 138, 46, 42, 161, 191, 177, 179, 67, 59, 146, 246, 175, 50, 212, 194, 250, 135, 60, 41, 39, 141, 20, 121, 247, 100, 3, 108, 44, 141, 158, 177, 103, 225, 37, 127, 32, 41, 116, 178, 222, 219, 140, 173, 67, 1, 187, 173, 187, 43, 95, 125, 225, 13, 64, 206, 249, 183, 119, 49, 198, 139, 118, 10, 169, 45, 235, 15, 250, 222, 155, 221, 173, 181, 205, 136, 137, 225, 200, 81, 68, 29, 96, 169, 119, 152, 72, 38, 36, 129, 116, 96, 13, 131, 90, 249, 76, 76, 216, 109, 117, 25, 91, 155, 200, 106, 52, 19, 50, 95, 221, 156, 29, 185, 87, 91, 57, 175, 76, 84, 6, 37, 247, 212, 175, 115, 243, 21, 3, 22, 129, 202, 205, 70, 157, 185, 189, 189, 110, 64, 171, 255, 246, 98, 95, 252, 124, 94, 246, 170, 187, 144, 227, 72, 129, 3, 142, 29, 97, 157, 138, 172, 224, 192, 91, 133, 166, 39, 214, 195, 46, 227, 230, 220, 188, 0, 35, 93, 103, 210, 17, 141, 31, 133, 76, 158, 158, 173, 99, 193, 54, 132, 69, 20, 159, 178, 86, 198, 149, 36, 12, 214, 191, 63, 207, 172, 199, 172, 3, 252, 4, 107, 239, 165, 156, 83, 156, 142, 237, 186, 190, 208, 104, 50, 179, 236, 111, 31, 139, 109, 104, 5, 235, 15, 163, 74, 102, 27, 204, 84, 249, 39, 6, 25, 189, 114, 44, 123, 101, 213, 134, 116, 90, 205, 127, 224, 177, 51, 99, 134, 200, 77, 148, 164, 82, 210, 2, 162, 7, 228, 235, 158, 213, 97, 111, 184, 76, 112, 0, 229, 253, 99, 5, 241, 47, 56, 90, 97, 143, 49, 106, 0, 17, 88, 77, 66, 9, 180, 102, 198, 152, 69, 123, 2, 151, 144, 220, 249, 97, 203, 222, 238, 104, 87, 26, 39, 251, 161, 205, 58, 247, 151, 176, 223, 173, 172, 54, 239, 249, 107, 73, 149, 134, 192, 39, 49, 152, 249, 168, 251, 179, 41, 1, 45, 23, 220, 85, 107, 100, 137, 34, 45, 167, 220, 14, 164, 31, 73, 147, 6, 231, 6, 33, 28, 203, 204, 151, 221, 227, 223, 214, 192, 173, 69, 19, 255, 70, 192, 206, 227, 188, 123, 20, 98, 243, 42, 41, 12, 230, 110, 155, 177, 196, 198, 234, 1, 12, 141, 126, 249, 124, 106, 191, 146, 193, 60, 251, 153, 53, 3, 72, 75, 169, 4, 101, 106, 115, 145, 67, 236, 58, 188, 91, 30, 160, 65, 43, 48, 250, 108, 89, 161, 196, 139, 187, 238, 131, 241, 157, 126, 144, 220, 225, 78, 51, 107, 110, 9, 27, 130, 141, 83, 192, 166, 183, 223, 208, 234, 105, 208, 51, 156, 57, 229, 117, 221, 40, 221, 48, 146, 86, 149, 251, 96, 142, 248, 113, 234, 93, 236, 42, 142, 126, 178, 23, 84, 198, 160, 17, 163, 154, 209, 35, 19, 99, 242, 110, 133, 15, 235, 98, 69, 8, 18, 193, 236, 99, 34, 41, 157, 206, 107, 241, 21, 162, 46, 86, 131, 32, 135, 0, 166, 108, 156, 57, 180, 19, 137, 246, 47, 147, 112, 213, 203, 95, 31, 82, 89, 14, 39, 193, 152, 22, 224, 110, 223, 132, 96, 130, 109, 28, 128, 111, 31, 250, 78, 232, 76, 158, 120, 120, 180, 115, 166, 188, 191, 85, 98, 184, 206, 249, 124, 229, 57, 128, 119, 193, 111, 139, 183, 30, 122, 83, 11, 120, 177, 80, 58, 113, 215, 92, 211, 55, 124, 242, 102, 140, 189, 211, 146, 147, 2, 99, 65, 184, 102, 110, 220, 59, 105, 136, 15, 45, 34, 180, 190, 203, 212, 252, 243, 145, 161, 193, 168, 11, 36, 18, 57, 48, 178, 28, 83, 169, 25, 178, 214, 89, 176, 136, 125, 187, 152, 225, 148, 89, 145, 242, 7, 159, 250, 115, 246, 158, 77, 123, 15, 209, 67, 22, 155, 234, 126, 130, 137, 182, 101, 92, 82, 141, 134, 180, 89, 247, 39, 132, 113, 42, 249, 242, 24, 27, 144, 18, 164, 40, 168, 29, 172, 156, 216, 226, 177, 117, 88, 70, 171, 12, 183, 177, 26, 109, 107, 77, 120, 222, 238, 204, 32, 239, 232, 88, 63, 107, 145, 30, 7, 26, 174, 51, 238, 211, 85, 4, 126, 242, 138, 228, 79, 47, 123, 21, 66, 190, 220, 209, 226, 20, 52, 74, 139, 239, 205, 235, 4, 174, 124, 142, 162, 16, 229, 247, 225, 140, 7, 26, 33, 66, 2, 251, 107, 63, 230, 99, 31, 208, 24, 152, 51, 181, 223, 4, 136, 21, 128, 204, 19, 43, 7, 138, 95, 243, 225, 35, 1, 149, 123, 12, 227, 55, 97, 125, 245, 113, 78, 182, 63, 144, 226, 44, 58, 7, 174, 17, 242, 237, 171, 206, 162, 97, 171, 60, 129, 55, 183, 118, 225, 117, 148, 152, 167, 0, 237, 124, 74, 253, 122, 85, 230, 235, 193, 177, 197, 60, 242, 10, 254, 167, 186, 181, 169, 182, 53, 53, 227, 160, 88, 172, 38, 240, 144, 1, 172, 163, 105, 37, 69, 139, 149, 238, 142, 13, 164, 142, 223, 80, 250, 209, 222, 0, 244, 134, 133, 219, 113, 209, 152, 80, 223, 54, 249, 62, 185, 58, 195, 95, 57, 126, 218, 231, 84, 9, 134, 228, 224, 165, 208, 147, 234, 114, 155, 32, 59, 229, 83, 147, 170, 121, 243, 89, 210, 6, 43, 219, 56, 103, 146, 186, 251, 17, 175, 11, 13, 246, 91, 102, 68, 141], - [37, 114, 132, 182, 97, 8, 176, 107, 227, 90, 156, 128, 176, 185, 132, 252, 24, 27, 202, 9, 195, 38, 111, 138, 252, 7, 100, 76, 177, 95, 79, 154, 111, 52, 137, 29, 64, 113, 168, 6, 235, 233, 35, 145, 192, 38, 140, 143, 3, 21, 236, 62, 201, 109, 12, 227, 246, 144, 186, 226, 121, 246, 194, 203, 12, 191, 48, 225, 190, 249, 22, 240, 90, 197, 140, 170, 242, 46, 229, 151, 128, 1, 66, 218, 150, 181, 39, 39, 229, 150, 83, 20, 199, 83, 130, 39, 41, 46, 227, 160, 248, 58, 143, 152, 219, 193, 229, 58, 242, 161, 165, 213, 143, 187, 72, 74, 228, 204, 133, 110, 220, 140, 94, 181, 130, 63, 230, 77, 151, 22, 162, 46, 213, 2, 45, 46, 57, 37, 100, 174, 53, 22, 54, 236, 25, 254, 45, 182, 102, 47, 237, 243, 41, 255, 135, 170, 49, 51, 138, 8, 48, 117, 186, 16, 158, 214, 80, 160, 106, 34, 213, 64, 185, 32, 205, 170, 219, 208, 127, 255, 66, 129, 22, 196, 27, 144, 108, 190, 184, 210, 123, 85, 148, 46, 73, 74, 250, 227, 248, 58, 212, 210, 112, 167, 0, 163, 36, 163, 147, 249, 138, 246, 50, 26, 119, 168, 38, 22, 233, 165, 113, 56, 85, 150, 111, 233, 121, 153, 117, 185, 26, 135, 85, 92, 11, 104, 94, 56, 85, 91, 72, 185, 127, 142, 100, 72, 187, 100, 5, 32, 5, 206, 109, 50, 140, 157, 95, 148, 191, 134, 147, 68, 226, 123, 103, 224, 22, 22, 191, 160, 184, 71, 245, 146, 207, 244, 248, 88, 149, 231, 144, 98, 42, 252, 98, 167, 169, 19, 121, 162, 60, 181, 86, 231, 220, 236, 230, 3, 7, 244, 209, 70, 143, 145, 128, 169, 206, 181, 95, 92, 63, 164, 150, 85, 61, 220, 5, 85, 96, 198, 252, 107, 111, 220, 14, 186, 211, 40, 122, 39, 8, 72, 232, 3, 2, 3, 213, 181, 204, 129, 145, 189, 159, 165, 44, 183, 168, 151, 55, 170, 131, 201, 2, 113, 87, 77, 62, 2, 78, 184, 41, 146, 5, 103, 165, 239, 75, 142, 96, 3, 136, 73, 60, 14, 24, 242, 72, 25, 27, 200, 52, 220, 241, 135, 184, 8, 108, 74, 138, 63, 116, 113, 195, 188, 145, 102, 249, 203, 22, 75, 111, 184, 186, 16, 34, 234, 182, 50, 250, 29, 61, 91, 137, 1, 208, 12, 187, 170, 192, 221, 51, 194, 252, 115, 90, 24, 247, 182, 31, 172, 5, 198, 251, 55, 113, 118, 75, 221, 47, 147, 6, 21, 213, 8, 168, 15, 172, 219, 53, 247, 100, 145, 124, 140, 247, 80, 95, 116, 68, 125, 142, 49, 133, 231, 72, 51, 16, 71, 203, 208, 17, 137, 162, 90, 105, 174, 157, 3, 182, 63, 86, 41, 58, 62, 212, 157, 236, 227, 169, 237, 173, 134, 154, 103, 59, 99, 66, 91, 149, 122, 31, 199, 240, 74, 120, 171, 163, 53, 5, 111, 32, 198, 81, 118, 7, 41, 44, 120, 16, 164, 54, 226, 254, 106, 47, 245, 198, 248, 229, 112, 214, 24, 172, 15, 225, 243, 48, 77, 217, 12, 125, 93, 5, 63, 79, 227, 192, 150, 192, 246, 237, 65, 168, 46, 118, 186, 206, 201, 200, 113, 47, 113, 249, 138, 63, 138, 78, 163, 253, 145, 8, 112, 205, 208, 224, 15, 71, 96, 142, 158, 252, 104, 2, 183, 224, 107, 172, 187, 122, 66, 43, 44, 89, 160, 232, 137, 165, 149, 12, 84, 222, 135, 78, 57, 214, 99, 78, 187, 54, 35, 199, 96, 150, 219, 22, 106, 15, 236, 26, 145, 8, 138, 177, 250, 198, 7, 183, 139, 241, 59, 165, 144, 245, 124, 52, 166, 198, 22, 198, 154, 80, 87, 213, 172, 109, 9, 133, 29, 83, 181, 201, 131, 103, 249, 94, 253, 35, 213, 25, 59, 117, 85, 56, 250, 94, 75, 224, 196, 238, 118, 62, 250, 13, 82, 12, 76, 96, 41, 52, 197, 78, 96, 63, 227, 0, 126, 106, 85, 212, 43, 0, 1, 148, 213, 32, 99, 120, 117, 208, 42, 85, 186, 194, 252, 47, 40, 62, 84, 78, 39, 207, 122, 113, 3, 248, 170, 86, 54, 239, 213, 202, 9, 18, 194, 38, 77, 216, 21, 188, 220, 49, 103, 169, 208, 178, 223, 6, 122, 156, 132, 78, 29, 185, 104, 120, 255, 117, 162, 68, 111, 82, 86, 14, 35, 246, 30, 115, 116, 154, 120, 140, 77, 201, 63, 229, 52, 4, 71, 86, 57, 164, 119, 166, 37, 102, 155, 90, 222, 30, 110, 68, 47, 237, 193, 147, 252, 127, 106, 63, 48, 12, 211, 116, 81, 6, 119, 45, 72, 47, 114, 33, 108, 102, 30, 139, 75, 68, 4, 123, 64, 52, 184, 53, 108, 42, 253, 129, 57, 64, 68, 154, 215, 117, 189, 71, 119, 158, 206, 217, 48, 52, 26, 102, 236, 54, 213, 71, 239, 245, 42, 197, 133, 66, 154, 9, 43, 239, 38, 140, 33, 71, 155, 32, 73, 183, 200, 114, 70, 57, 151, 119, 106, 151, 123, 52, 16, 13, 189, 107, 87, 157, 126, 8, 167, 255, 11, 222, 206, 147, 171, 148, 33, 157, 179, 155, 108, 30, 131, 243, 186, 139, 116, 235, 179, 107, 94, 154, 128, 130, 62, 172, 217, 138, 201, 23, 89, 120, 56, 249, 250, 166, 143, 219, 1, 34, 2, 60, 78, 85, 235, 95, 244, 158, 248, 192, 213, 43, 80, 255, 185, 98, 95, 206, 35, 13, 97, 135, 79, 245, 9, 217, 170, 117, 249, 40, 102, 169, 131, 200, 205, 6, 242, 61, 181, 86, 183, 112, 43, 236, 12, 8, 90, 53, 123, 129, 233, 118, 17, 22, 115, 9, 103, 87, 86, 53, 250, 94, 81, 103, 211, 241, 214, 82, 151, 5, 193, 226, 192, 245, 186, 171, 43, 188, 22, 133, 12, 57, 117, 127, 31, 62, 174, 24, 252, 118, 150, 2, 188, 178, 160, 124, 5, 73, 84, 118, 186, 156, 235, 27, 154, 12, 122, 198, 46, 61, 79, 211, 215, 146, 141, 175, 77, 174, 243, 127, 15, 101, 217, 169, 166, 140, 246, 154, 29, 16, 119, 200, 79, 25, 20, 62, 155, 131, 220, 160, 44, 17, 224, 176, 20, 223, 162, 34, 210, 220, 168, 28, 119, 22, 112, 92, 155, 33, 200, 57, 69, 219, 220, 184, 90, 251, 132, 43, 106, 58, 82, 235, 189, 72, 16, 211, 129, 192, 63, 228, 108, 16, 117, 95, 243, 175, 80, 63, 90, 236, 211, 134, 24, 43, 140, 62, 85, 216, 68, 114, 137, 21, 141, 49, 109, 115, 195, 249, 41, 191, 146, 228, 238, 148, 12, 154, 185, 152, 153, 221, 92, 29, 95, 86, 245, 209, 140, 88, 54, 101, 148, 241, 152, 206, 54, 214, 135, 117, 4, 209, 85, 57, 125, 69, 121, 141, 245, 12, 81, 205, 132, 135, 189, 161, 62, 85, 12, 35, 3, 149, 124, 109, 13, 140, 226, 100, 64, 95, 120, 110, 78, 222, 52, 119, 130, 5, 187, 136, 233, 133, 70, 252, 25, 40, 233, 115, 87, 142, 47, 118, 73, 204, 26, 237, 13, 148, 111, 121, 41, 63, 149, 66, 154, 181, 100, 118, 80, 87, 87, 242, 236, 91, 110, 161, 145, 50, 32, 179, 112, 154, 179, 13, 22, 232, 202, 153, 102, 135, 57, 39, 125, 167, 161, 168, 148, 58, 30, 218, 97, 30, 190, 196, 140, 245, 184, 19, 69, 90, 159, 245, 79, 225, 168, 251, 202, 162, 104, 5, 150, 182, 101, 244, 179, 83, 214, 240, 178, 124, 105, 44, 59, 67, 5, 201, 91, 191, 29, 234, 220, 39, 6, 251, 248, 89, 127, 120, 135, 66, 51, 75, 172, 253, 96, 2, 20, 165, 197, 121, 155, 236, 6, 223, 141, 64, 202, 254, 62, 149, 57, 99, 248, 211, 153, 142, 154, 93, 155, 47, 148, 160, 113, 223, 143, 11, 69, 72, 32, 233, 85, 242, 200, 48, 110, 222, 183, 54, 95, 176, 117, 245, 199, 233, 217, 96, 153, 202, 187, 74, 75, 58, 67, 61, 3, 119, 140, 174, 128, 117, 224, 87, 163, 74, 161, 235, 165, 22, 187, 159, 24, 91, 162, 67, 15, 141, 24, 153, 9, 132, 163, 216, 157, 100, 205, 167, 118, 241, 136, 192, 156, 37, 242, 49, 65, 91, 163, 229, 201, 112, 130, 241, 187, 76, 53, 151, 48, 50, 65, 179, 148, 100, 199, 248, 245, 233, 165, 198, 91, 67, 24, 30, 5, 244, 69, 181, 41, 233, 26, 63, 65, 188, 255, 69, 246, 143, 249, 20, 111, 149, 199, 200, 114, 192, 166, 242, 97, 27, 170, 134, 180, 51, 20, 99, 164, 243, 190, 74, 192, 230, 238, 164, 200, 139, 246, 65, 46, 41, 148, 26, 247, 78, 116, 132, 93, 195, 67, 174, 204, 64, 119, 200, 81, 195, 146, 85, 121], - [36, 125, 248, 50, 109, 12, 238, 14, 233, 60, 84, 243, 197, 235, 183, 149, 211, 90, 106, 232, 157, 138, 233, 201, 149, 27, 2, 14, 11, 222, 199, 0, 189, 13, 110, 252, 159, 243, 110, 165, 0, 191, 110, 221, 87, 96, 158, 107, 4, 32, 150, 161, 170, 121, 42, 76, 114, 143, 135, 40, 141, 128, 67, 112, 131, 88, 196, 60, 231, 242, 133, 71, 62, 152, 200, 32, 185, 66, 72, 166, 39, 151, 132, 64, 152, 135, 66, 114, 79, 213, 126, 25, 183, 143, 138, 76, 195, 218, 92, 65, 255, 106, 42, 75, 185, 29, 6, 116, 51, 171, 45, 183, 130, 202, 206, 205, 175, 95, 87, 123, 65, 162, 172, 113, 40, 26, 109, 129, 248, 170, 132, 134, 250, 160, 71, 241, 55, 103, 185, 114, 11, 228, 227, 151, 231, 24, 46, 20, 95, 14, 205, 213, 58, 39, 245, 86, 186, 167, 188, 13, 217, 254, 40, 216, 44, 81, 32, 45, 125, 144, 27, 243, 123, 193, 34, 79, 0, 134, 39, 36, 99, 155, 98, 230, 14, 191, 147, 109, 226, 49, 8, 161, 135, 32, 72, 102, 7, 233, 253, 23, 215, 152, 170, 252, 230, 69, 243, 184, 15, 189, 197, 125, 154, 22, 79, 25, 168, 152, 222, 92, 92, 241, 53, 162, 128, 62, 170, 3, 200, 107, 164, 113, 74, 82, 192, 245, 247, 38, 28, 136, 58, 232, 176, 114, 40, 193, 151, 46, 246, 145, 183, 112, 180, 127, 195, 177, 147, 121, 250, 26, 73, 236, 138, 11, 159, 136, 103, 143, 157, 74, 23, 33, 242, 83, 225, 43, 36, 159, 145, 117, 209, 99, 153, 219, 67, 155, 176, 157, 115, 102, 225, 40, 180, 224, 217, 226, 107, 244, 187, 250, 59, 14, 1, 88, 174, 106, 163, 44, 194, 47, 30, 149, 100, 169, 59, 28, 193, 87, 202, 16, 160, 109, 17, 120, 235, 42, 139, 37, 221, 47, 87, 108, 238, 124, 161, 227, 240, 91, 136, 117, 230, 67, 124, 240, 102, 111, 139, 56, 89, 41, 211, 209, 164, 50, 108, 140, 170, 191, 81, 168, 210, 17, 97, 165, 113, 57, 28, 85, 104, 197, 171, 196, 181, 61, 202, 201, 11, 109, 16, 28, 125, 104, 196, 85, 138, 51, 243, 133, 98, 170, 65, 10, 52, 114, 251, 57, 13, 37, 42, 175, 83, 250, 231, 170, 135, 100, 248, 189, 136, 195, 44, 131, 243, 200, 63, 92, 25, 22, 119, 181, 128, 66, 127, 95, 211, 234, 113, 13, 187, 90, 247, 45, 137, 196, 216, 232, 161, 169, 236, 201, 21, 178, 160, 88, 32, 109, 190, 166, 173, 194, 6, 159, 190, 139, 50, 87, 83, 213, 74, 70, 128, 47, 18, 52, 89, 223, 8, 137, 221, 196, 52, 212, 254, 118, 3, 210, 255, 8, 41, 226, 70, 212, 49, 99, 53, 253, 174, 40, 183, 111, 105, 143, 96, 27, 181, 5, 167, 164, 68, 247, 103, 192, 111, 80, 234, 175, 61, 226, 176, 41, 81, 162, 55, 105, 141, 16, 134, 181, 193, 18, 190, 181, 23, 223, 87, 231, 131, 63, 157, 173, 50, 127, 17, 18, 27, 50, 195, 183, 110, 232, 163, 148, 45, 175, 68, 183, 132, 221, 73, 73, 244, 252, 145, 107, 179, 77, 26, 62, 98, 61, 114, 16, 120, 73, 93, 30, 32, 70, 169, 147, 171, 24, 4, 70, 243, 180, 58, 233, 127, 134, 78, 97, 14, 246, 69, 23, 203, 91, 45, 197, 168, 214, 44, 77, 12, 23, 35, 194, 212, 131, 161, 18, 126, 169, 211, 164, 226, 159, 254, 136, 94, 0, 74, 9, 57, 128, 79, 77, 166, 91, 173, 144, 66, 207, 103, 244, 51, 34, 241, 208, 28, 86, 80, 132, 12, 161, 248, 217, 24, 208, 76, 213, 59, 32, 245, 64, 189, 41, 111, 233, 174, 178, 179, 219, 197, 83, 149, 199, 143, 54, 220, 54, 35, 246, 30, 68, 197, 209, 153, 150, 97, 121, 131, 223, 190, 70, 90, 172, 124, 141, 3, 145, 76, 67, 213, 8, 92, 70, 180, 118, 255, 253, 64, 151, 53, 79, 82, 2, 219, 15, 133, 75, 130, 12, 149, 61, 250, 232, 44, 44, 226, 255, 136, 144, 240, 23, 195, 6, 155, 229, 102, 241, 219, 192, 42, 5, 74, 171, 145, 11, 239, 18, 127, 230, 220, 172, 164, 7, 22, 104, 164, 71, 14, 132, 28, 165, 61, 32, 90, 66, 200, 52, 242, 116, 147, 76, 226, 143, 179, 165, 133, 167, 61, 207, 244, 230, 11, 74, 211, 9, 42, 177, 176, 165, 51, 254, 231, 238, 243, 192, 3, 100, 131, 72, 38, 5, 152, 185, 2, 162, 61, 225, 170, 70, 77, 61, 83, 244, 118, 96, 48, 3, 253, 117, 141, 157, 108, 124, 168, 99, 43, 12, 207, 10, 99, 47, 186, 172, 37, 198, 43, 107, 100, 217, 41, 228, 167, 158, 59, 62, 76, 69, 68, 83, 79, 179, 181, 179, 28, 37, 6, 37, 238, 186, 68, 99, 124, 17, 57, 199, 51, 35, 126, 136, 177, 201, 135, 95, 189, 64, 11, 165, 123, 197, 238, 212, 108, 37, 203, 107, 236, 139, 232, 26, 101, 17, 19, 248, 149, 254, 114, 11, 136, 180, 19, 24, 109, 180, 75, 53, 14, 77, 104, 61, 76, 135, 240, 57, 146, 107, 90, 10, 77, 192, 18, 144, 147, 59, 119, 59, 84, 243, 116, 158, 56, 62, 63, 212, 66, 56, 86, 97, 16, 161, 103, 255, 119, 231, 141, 89, 32, 104, 101, 146, 101, 22, 232, 29, 72, 25, 191, 119, 121, 67, 34, 7, 161, 84, 28, 17, 102, 243, 210, 157, 64, 74, 160, 227, 200, 238, 10, 170, 146, 185, 199, 40, 241, 139, 74, 235, 131, 125, 112, 240, 0, 72, 69, 100, 144, 227, 166, 224, 67, 37, 137, 171, 235, 43, 207, 135, 208, 211, 11, 86, 231, 130, 47, 243, 152, 188, 75, 234, 21, 231, 229, 74, 234, 168, 25, 6, 7, 189, 245, 145, 228, 254, 147, 195, 71, 201, 103, 102, 41, 148, 232, 88, 115, 186, 50, 25, 192, 238, 43, 91, 16, 95, 76, 129, 16, 62, 179, 139, 81, 34, 243, 221, 211, 35, 172, 11, 108, 225, 185, 2, 137, 123, 204, 71, 219, 238, 101, 18, 137, 30, 60, 136, 121, 82, 103, 5, 119, 181, 67, 196, 29, 166, 78, 7, 39, 143, 231, 188, 148, 85, 224, 237, 146, 225, 14, 104, 164, 239, 126, 174, 80, 190, 133, 39, 18, 179, 18, 179, 200, 185, 47, 108, 160, 239, 106, 239, 34, 136, 46, 231, 72, 52, 9, 184, 203, 97, 218, 10, 168, 71, 215, 167, 234, 179, 18, 232, 115, 70, 104, 148, 50, 82, 247, 230, 141, 39, 92, 176, 193, 194, 226, 197, 55, 70, 183, 82, 71, 200, 5, 217, 251, 103, 0, 47, 215, 13, 74, 68, 122, 25, 40, 117, 157, 26, 28, 139, 66, 118, 237, 104, 72, 79, 97, 228, 103, 93, 186, 231, 131, 7, 40, 218, 26, 218, 87, 172, 34, 186, 86, 186, 105, 159, 142, 86, 159, 202, 43, 92, 199, 226, 82, 233, 202, 200, 236, 166, 165, 186, 197, 228, 93, 40, 172, 108, 155, 13, 126, 242, 116, 73, 95, 150, 145, 126, 94, 206, 168, 165, 57, 30, 49, 253, 59, 18, 166, 236, 147, 39, 78, 102, 130, 96, 210, 95, 85, 49, 41, 211, 69, 185, 8, 208, 75, 202, 126, 37, 220, 253, 219, 91, 122, 244, 130, 135, 113, 221, 154, 180, 42, 230, 63, 22, 8, 183, 230, 179, 27, 31, 48, 59, 81, 39, 185, 186, 105, 250, 75, 111, 160, 71, 172, 104, 136, 22, 235, 82, 149, 77, 37, 49, 240, 227, 77, 205, 125, 199, 139, 119, 49, 193, 48, 92, 123, 189, 79, 132, 189, 81, 251, 254, 77, 170, 245, 11, 197, 123, 125, 85, 28, 132, 187, 96, 218, 27, 215, 117, 174, 32, 141, 248, 102, 42, 100, 67, 145, 129, 86, 107, 170, 111, 216, 199, 128, 81, 2, 45, 16, 173, 153, 149, 71, 19, 40, 205, 177, 8, 236, 70, 255, 30, 30, 247, 212, 30, 222, 67, 64, 207, 21, 39, 31, 47, 235, 200, 135, 216, 235, 241, 213, 53, 84, 145, 43, 166, 255, 235, 233, 179, 243, 54, 170, 29, 63, 150, 63, 98, 79, 192, 4, 188, 222, 183, 204, 64, 182, 11, 12, 57, 188, 86, 136, 160, 1, 203, 90, 164, 220, 187, 11, 191, 182, 120, 108, 94, 133, 175, 198, 44, 192, 41, 205, 223, 78, 78, 51, 142, 95, 45, 29, 27, 147, 248, 242, 181, 178, 220, 204, 36, 65, 161, 192, 16, 94, 165, 16, 200, 130, 24, 206, 132, 220, 126, 229, 241, 214, 174, 88, 108, 75, 149, 163, 89, 194, 90, 88, 19, 50, 9, 140, 255, 118, 102, 22, 128, 40, 97], - [242, 62, 135, 10, 151, 176, 189, 7, 248, 170, 182, 231, 209, 171, 37, 112, 219, 114, 112, 66, 179, 238, 177, 10, 30, 200, 205, 219, 149, 57, 110, 112, 190, 71, 203, 248, 84, 71, 252, 198, 148, 255, 230, 48, 105, 123, 221, 234, 128, 118, 31, 173, 153, 201, 222, 111, 250, 229, 229, 236, 205, 137, 173, 243, 215, 177, 98, 67, 253, 125, 12, 145, 151, 142, 108, 3, 56, 234, 52, 238, 167, 198, 131, 53, 43, 236, 206, 221, 83, 198, 63, 101, 136, 83, 42, 97, 202, 128, 139, 138, 14, 10, 174, 77, 194, 97, 187, 94, 42, 16, 194, 170, 51, 63, 211, 39, 218, 37, 233, 61, 45, 187, 10, 245, 72, 147, 224, 203, 20, 158, 130, 59, 210, 71, 108, 103, 93, 120, 135, 235, 130, 230, 74, 207, 61, 207, 238, 234, 185, 252, 45, 109, 158, 115, 116, 112, 61, 194, 131, 45, 37, 117, 53, 191, 204, 209, 247, 194, 48, 123, 139, 161, 103, 82, 107, 21, 26, 203, 150, 24, 99, 163, 5, 7, 174, 153, 10, 3, 2, 81, 103, 101, 185, 202, 17, 229, 68, 145, 255, 131, 244, 105, 129, 233, 81, 57, 113, 97, 216, 236, 208, 5, 135, 251, 177, 83, 136, 152, 125, 117, 73, 154, 9, 82, 69, 149, 199, 26, 24, 93, 78, 133, 131, 35, 55, 36, 248, 103, 59, 106, 21, 146, 127, 215, 94, 145, 110, 236, 198, 137, 115, 35, 127, 232, 110, 159, 209, 159, 172, 14, 206, 103, 113, 197, 135, 79, 23, 223, 149, 229, 168, 3, 116, 33, 199, 81, 186, 235, 155, 134, 232, 37, 141, 135, 84, 252, 155, 29, 32, 193, 58, 119, 78, 72, 5, 168, 195, 92, 161, 153, 27, 200, 215, 166, 255, 125, 244, 5, 100, 187, 6, 27, 170, 21, 178, 176, 119, 218, 232, 124, 22, 169, 181, 127, 243, 175, 175, 32, 66, 21, 41, 199, 11, 105, 209, 218, 189, 119, 101, 35, 193, 169, 125, 63, 16, 174, 172, 62, 30, 226, 111, 147, 21, 86, 190, 72, 46, 185, 19, 172, 230, 45, 71, 141, 124, 198, 130, 35, 251, 254, 35, 102, 248, 41, 18, 102, 124, 189, 137, 120, 122, 32, 186, 128, 231, 5, 63, 32, 241, 163, 163, 145, 68, 252, 13, 45, 37, 176, 85, 171, 221, 3, 98, 5, 123, 53, 247, 179, 95, 68, 247, 24, 77, 244, 23, 255, 33, 64, 97, 186, 177, 150, 113, 20, 79, 38, 33, 169, 249, 18, 242, 6, 27, 17, 146, 29, 115, 255, 83, 50, 71, 181, 66, 32, 212, 77, 81, 64, 12, 129, 104, 151, 135, 22, 45, 199, 254, 178, 113, 149, 120, 187, 25, 135, 242, 117, 96, 150, 24, 81, 201, 112, 50, 59, 250, 87, 40, 84, 59, 5, 71, 0, 211, 72, 17, 101, 190, 75, 52, 203, 67, 88, 127, 17, 247, 58, 218, 79, 41, 237, 9, 116, 254, 236, 105, 103, 222, 132, 23, 167, 87, 46, 41, 93, 209, 188, 255, 128, 2, 42, 173, 180, 190, 59, 39, 70, 128, 18, 127, 123, 101, 38, 170, 31, 21, 133, 172, 195, 49, 171, 207, 64, 25, 2, 244, 60, 118, 204, 19, 170, 172, 238, 177, 64, 200, 254, 122, 8, 73, 71, 109, 13, 155, 41, 39, 41, 128, 47, 236, 160, 173, 68, 240, 251, 230, 222, 42, 55, 186, 79, 142, 132, 242, 78, 174, 246, 19, 139, 105, 242, 137, 121, 158, 6, 130, 113, 93, 53, 178, 147, 52, 46, 41, 153, 160, 37, 28, 154, 186, 78, 194, 177, 99, 133, 159, 170, 116, 139, 75, 217, 147, 152, 155, 172, 204, 26, 52, 48, 207, 111, 95, 7, 119, 249, 25, 66, 185, 153, 162, 250, 12, 222, 12, 177, 159, 32, 166, 99, 70, 139, 144, 255, 64, 67, 169, 179, 130, 157, 152, 220, 225, 12, 32, 233, 68, 168, 122, 167, 128, 149, 54, 2, 234, 141, 215, 26, 89, 110, 128, 21, 57, 20, 15, 223, 249, 147, 55, 243, 84, 153, 233, 186, 153, 248, 36, 225, 65, 54, 250, 176, 219, 148, 232, 169, 226, 122, 170, 202, 70, 160, 22, 254, 138, 133, 204, 209, 117, 190, 57, 96, 106, 24, 201, 46, 126, 236, 60, 18, 58, 11, 139, 36, 31, 135, 48, 110, 187, 40, 242, 244, 162, 38, 97, 10, 92, 133, 52, 241, 238, 194, 139, 159, 9, 103, 37, 238, 226, 53, 89, 89, 46, 252, 173, 129, 165, 72, 195, 224, 108, 213, 92, 248, 122, 31, 159, 7, 254, 165, 132, 193, 134, 69, 215, 234, 141, 57, 212, 215, 127, 65, 92, 42, 248, 185, 11, 153, 166, 134, 185, 241, 30, 56, 249, 27, 1, 103, 227, 10, 39, 122, 82, 193, 224, 59, 230, 215, 59, 113, 110, 77, 232, 51, 147, 75, 120, 135, 46, 111, 223, 231, 77, 161, 216, 153, 86, 9, 129, 17, 2, 209, 106, 237, 228, 240, 132, 107, 60, 113, 249, 51, 155, 225, 194, 117, 91, 205, 246, 32, 204, 158, 172, 153, 5, 217, 24, 182, 49, 157, 29, 39, 91, 36, 163, 230, 77, 60, 130, 247, 10, 115, 181, 11, 211, 2, 249, 181, 67, 115, 177, 74, 125, 143, 100, 16, 217, 139, 113, 70, 4, 143, 96, 46, 156, 79, 13, 104, 162, 244, 139, 8, 31, 188, 237, 96, 215, 205, 231, 190, 250, 14, 194, 12, 11, 164, 44, 13, 184, 171, 31, 75, 20, 217, 156, 104, 141, 229, 185, 102, 171, 230, 146, 242, 128, 196, 246, 237, 44, 7, 183, 57, 248, 131, 224, 21, 229, 233, 226, 203, 6, 243, 4, 247, 18, 26, 51, 61, 112, 190, 140, 46, 144, 0, 178, 18, 233, 233, 142, 115, 47, 179, 224, 104, 26, 10, 54, 196, 12, 230, 195, 146, 168, 204, 8, 186, 84, 242, 73, 143, 200, 96, 127, 65, 76, 27, 42, 172, 68, 224, 138, 230, 154, 102, 196, 5, 28, 65, 182, 47, 200, 16, 62, 33, 164, 108, 116, 153, 242, 119, 157, 152, 191, 30, 228, 215, 196, 255, 156, 198, 207, 175, 126, 131, 10, 103, 145, 139, 56, 237, 60, 27, 15, 18, 109, 82, 17, 119, 66, 88, 229, 139, 5, 55, 197, 115, 209, 189, 102, 1, 110, 143, 193, 72, 145, 103, 30, 215, 196, 222, 213, 166, 2, 144, 232, 105, 96, 54, 12, 213, 80, 60, 136, 204, 162, 98, 147, 233, 86, 215, 198, 179, 55, 46, 58, 5, 228, 89, 203, 114, 159, 180, 86, 15, 146, 46, 65, 56, 34, 6, 217, 20, 180, 97, 25, 90, 206, 83, 18, 70, 131, 22, 84, 250, 37, 176, 53, 87, 149, 141, 92, 156, 210, 106, 225, 74, 1, 136, 14, 246, 218, 4, 169, 100, 141, 250, 180, 48, 79, 69, 244, 63, 160, 193, 45, 163, 115, 147, 247, 112, 78, 137, 137, 15, 123, 92, 196, 172, 90, 11, 115, 122, 105, 70, 82, 40, 221, 168, 246, 133, 225, 92, 77, 215, 74, 24, 22, 236, 149, 174, 174, 137, 200, 18, 161, 254, 37, 174, 173, 245, 185, 184, 255, 95, 236, 136, 182, 249, 139, 131, 40, 103, 109, 183, 89, 222, 202, 111, 150, 124, 241, 71, 54, 102, 116, 193, 238, 50, 230, 109, 73, 2, 212, 132, 229, 219, 132, 131, 132, 197, 106, 146, 47, 18, 202, 202, 17, 192, 193, 66, 225, 28, 138, 209, 180, 39, 134, 184, 51, 20, 78, 101, 242, 186, 44, 53, 92, 57, 104, 79, 120, 17, 130, 215, 1, 85, 18, 155, 132, 88, 35, 243, 112, 163, 64, 224, 225, 23, 251, 132, 171, 152, 195, 178, 147, 106, 51, 219, 158, 68, 187, 100, 29, 98, 170, 30, 195, 22, 179, 12, 203, 255, 98, 94, 157, 255, 63, 1, 61, 130, 231, 57, 188, 50, 172, 189, 249, 141, 251, 4, 9, 154, 160, 133, 141, 226, 154, 205, 199, 157, 4, 158, 107, 91, 57, 83, 107, 63, 190, 212, 136, 192, 220, 232, 127, 225, 176, 3, 30, 137, 149, 124, 157, 65, 54, 145, 97, 142, 39, 147, 16, 235, 26, 212, 106, 125, 148, 171, 101, 110, 92, 205, 134, 75, 34, 198, 202, 141, 122, 237, 28, 172, 25, 196, 224, 210, 78, 243, 0, 7, 136, 136, 144, 102, 172, 11, 185, 63, 23, 9, 119, 94, 88, 171, 253, 38, 117, 51, 160, 202, 187, 236, 246, 98, 227, 126, 148, 29, 116, 79, 195, 101, 128, 171, 116, 118, 85, 247, 89, 101, 179, 251, 99, 159, 115, 213, 121, 240, 19, 133, 2, 37, 208, 251, 202, 9, 190, 64, 19, 84, 212, 242, 97, 73, 110, 15, 215, 166, 244, 136, 88, 207, 87, 216, 184, 69, 91, 122, 220, 149, 235, 53, 44, 33, 207, 26, 86, 59, 89, 119, 55, 113], - [152, 1, 56, 147, 202, 15, 217, 10, 226, 134, 179, 69, 36, 145, 135, 101, 96, 149, 210, 145, 122, 238, 179, 214, 250, 80, 10, 172, 165, 153, 177, 68, 44, 5, 33, 125, 87, 238, 81, 151, 150, 75, 199, 28, 132, 148, 99, 77, 218, 205, 119, 29, 136, 118, 242, 119, 202, 143, 71, 109, 53, 180, 54, 247, 130, 247, 176, 104, 27, 237, 160, 74, 57, 159, 166, 11, 96, 62, 204, 196, 107, 178, 185, 45, 220, 100, 9, 74, 47, 15, 68, 201, 10, 53, 195, 184, 97, 132, 220, 28, 61, 2, 49, 11, 13, 182, 35, 222, 205, 193, 184, 188, 28, 31, 214, 72, 154, 30, 185, 179, 236, 214, 16, 31, 147, 34, 219, 8, 61, 94, 181, 46, 108, 235, 119, 214, 53, 191, 11, 184, 112, 216, 138, 70, 194, 133, 202, 237, 229, 210, 72, 104, 31, 146, 115, 218, 216, 46, 130, 115, 106, 161, 61, 64, 220, 173, 249, 41, 12, 121, 134, 5, 196, 135, 150, 118, 62, 81, 138, 56, 165, 59, 147, 36, 150, 242, 174, 248, 145, 164, 76, 97, 87, 63, 172, 82, 111, 120, 11, 64, 47, 253, 214, 6, 210, 188, 106, 92, 32, 77, 0, 177, 210, 183, 226, 112, 101, 72, 138, 113, 66, 105, 254, 112, 79, 136, 241, 164, 89, 125, 207, 248, 0, 88, 251, 107, 199, 163, 134, 164, 159, 72, 190, 178, 197, 102, 183, 127, 199, 166, 238, 232, 91, 82, 253, 222, 118, 69, 20, 25, 147, 180, 10, 217, 205, 211, 64, 177, 70, 165, 56, 172, 10, 80, 73, 240, 165, 228, 153, 128, 221, 176, 68, 236, 92, 172, 228, 196, 54, 253, 234, 241, 71, 250, 197, 46, 167, 5, 94, 130, 212, 73, 193, 21, 153, 18, 237, 72, 32, 141, 167, 82, 224, 182, 17, 188, 67, 29, 252, 198, 222, 34, 183, 25, 117, 43, 139, 231, 148, 93, 181, 181, 180, 117, 133, 142, 195, 242, 24, 95, 130, 31, 227, 250, 169, 102, 244, 14, 89, 221, 2, 153, 58, 253, 209, 239, 13, 225, 202, 37, 221, 215, 251, 190, 216, 169, 139, 74, 38, 218, 87, 97, 77, 125, 193, 68, 77, 65, 142, 46, 81, 137, 16, 3, 132, 141, 93, 89, 85, 135, 119, 129, 222, 201, 229, 166, 137, 178, 34, 203, 10, 121, 134, 43, 141, 61, 134, 130, 178, 131, 18, 186, 226, 190, 41, 192, 8, 123, 78, 22, 148, 226, 100, 9, 100, 186, 32, 78, 200, 114, 133, 172, 63, 193, 52, 155, 204, 158, 7, 218, 139, 41, 224, 77, 19, 46, 125, 230, 94, 101, 239, 83, 12, 240, 4, 59, 121, 69, 163, 11, 215, 222, 44, 216, 68, 251, 187, 153, 185, 240, 163, 98, 178, 100, 90, 57, 27, 135, 113, 127, 125, 215, 188, 83, 50, 73, 243, 195, 61, 237, 208, 36, 170, 134, 37, 6, 177, 143, 231, 167, 61, 199, 32, 76, 47, 69, 82, 37, 134, 222, 96, 11, 108, 231, 189, 140, 191, 178, 124, 214, 56, 41, 144, 24, 225, 147, 106, 48, 237, 15, 89, 111, 110, 86, 213, 209, 208, 153, 112, 20, 170, 193, 136, 102, 68, 22, 147, 41, 229, 189, 74, 29, 228, 139, 7, 218, 108, 12, 165, 209, 83, 224, 27, 91, 116, 30, 153, 118, 21, 19, 162, 245, 199, 220, 171, 154, 244, 202, 120, 157, 191, 190, 207, 175, 170, 74, 131, 52, 69, 137, 11, 44, 252, 127, 45, 82, 228, 112, 112, 196, 120, 137, 33, 118, 84, 14, 11, 25, 167, 64, 100, 229, 35, 168, 200, 100, 58, 101, 152, 68, 105, 40, 4, 43, 130, 1, 234, 147, 236, 103, 25, 209, 186, 102, 2, 171, 216, 156, 122, 219, 13, 88, 239, 89, 47, 162, 193, 84, 168, 35, 7, 245, 103, 163, 126, 99, 174, 87, 145, 254, 222, 103, 26, 198, 139, 58, 96, 185, 153, 24, 14, 101, 232, 144, 150, 169, 84, 221, 218, 237, 78, 9, 68, 173, 212, 183, 168, 71, 195, 107, 98, 159, 15, 12, 78, 217, 181, 251, 31, 85, 92, 117, 21, 184, 196, 255, 174, 150, 105, 97, 144, 49, 132, 62, 173, 195, 79, 122, 18, 30, 227, 30, 221, 218, 75, 138, 101, 53, 142, 216, 202, 75, 219, 228, 146, 2, 104, 57, 116, 226, 243, 35, 144, 77, 133, 15, 89, 1, 31, 199, 146, 163, 248, 156, 158, 243, 187, 136, 77, 219, 37, 66, 210, 2, 27, 68, 150, 190, 181, 27, 5, 212, 49, 33, 143, 21, 218, 64, 91, 81, 105, 10, 251, 65, 243, 162, 248, 244, 55, 169, 144, 63, 49, 229, 206, 218, 32, 158, 159, 32, 60, 199, 75, 66, 169, 128, 182, 194, 162, 68, 77, 184, 46, 190, 84, 52, 119, 98, 230, 98, 47, 229, 28, 120, 173, 245, 113, 40, 91, 180, 143, 116, 59, 15, 23, 200, 84, 213, 10, 47, 8, 188, 76, 51, 229, 30, 209, 236, 10, 202, 153, 138, 152, 99, 93, 172, 116, 26, 73, 164, 29, 160, 128, 37, 128, 147, 59, 125, 125, 118, 67, 5, 31, 247, 23, 170, 9, 234, 65, 60, 21, 86, 216, 173, 183, 38, 95, 54, 79, 188, 217, 241, 32, 92, 50, 26, 8, 165, 251, 182, 135, 37, 95, 178, 244, 70, 137, 105, 201, 163, 89, 32, 72, 32, 37, 49, 16, 109, 108, 217, 251, 64, 146, 193, 249, 54, 205, 96, 193, 211, 62, 227, 147, 244, 158, 74, 241, 208, 152, 105, 180, 138, 113, 99, 108, 161, 253, 165, 25, 81, 64, 242, 79, 85, 119, 159, 92, 8, 59, 47, 188, 28, 170, 152, 205, 12, 204, 119, 230, 223, 204, 104, 132, 42, 76, 14, 142, 128, 106, 34, 74, 161, 230, 44, 79, 88, 71, 143, 174, 119, 249, 225, 216, 85, 3, 126, 37, 128, 228, 25, 168, 65, 43, 182, 202, 66, 70, 47, 45, 134, 111, 250, 2, 91, 158, 144, 201, 198, 81, 155, 226, 179, 55, 32, 30, 124, 235, 85, 64, 50, 101, 44, 90, 55, 65, 232, 195, 215, 103, 171, 156, 130, 0, 39, 31, 105, 68, 247, 176, 48, 27, 56, 117, 32, 160, 184, 225, 82, 169, 213, 163, 249, 59, 71, 168, 200, 146, 126, 133, 143, 96, 210, 131, 98, 38, 126, 217, 119, 62, 245, 128, 67, 128, 246, 201, 76, 17, 104, 217, 168, 217, 242, 175, 88, 128, 10, 222, 138, 192, 50, 9, 163, 218, 39, 82, 241, 249, 180, 134, 195, 52, 22, 100, 104, 97, 194, 243, 76, 96, 210, 103, 110, 11, 47, 148, 114, 133, 244, 63, 38, 19, 225, 212, 172, 227, 192, 10, 236, 137, 198, 108, 152, 29, 15, 17, 212, 63, 147, 218, 224, 9, 196, 156, 249, 89, 249, 118, 212, 152, 46, 165, 117, 241, 171, 231, 241, 135, 46, 90, 99, 137, 123, 168, 245, 98, 106, 149, 121, 131, 164, 71, 251, 225, 171, 110, 29, 65, 245, 202, 58, 65, 4, 127, 150, 216, 64, 77, 15, 218, 100, 96, 145, 214, 169, 29, 253, 209, 250, 165, 107, 163, 33, 44, 68, 213, 195, 233, 183, 150, 211, 174, 98, 28, 173, 206, 82, 111, 30, 216, 252, 214, 198, 36, 209, 20, 99, 73, 170, 180, 105, 148, 225, 89, 106, 42, 1, 161, 168, 24, 14, 1, 209, 246, 63, 36, 157, 56, 38, 165, 203, 209, 163, 212, 138, 208, 5, 69, 166, 84, 208, 92, 104, 15, 155, 84, 108, 180, 20, 238, 62, 234, 153, 156, 156, 83, 108, 116, 207, 65, 136, 234, 252, 71, 198, 66, 166, 57, 129, 225, 236, 198, 182, 218, 250, 11, 157, 90, 145, 212, 108, 34, 100, 40, 195, 115, 137, 107, 104, 103, 146, 78, 188, 232, 69, 168, 161, 246, 35, 167, 31, 101, 14, 116, 134, 157, 220, 88, 128, 80, 99, 21, 189, 222, 52, 197, 240, 190, 204, 12, 1, 42, 150, 211, 26, 42, 160, 31, 82, 60, 43, 132, 109, 37, 11, 178, 110, 104, 222, 31, 79, 40, 29, 127, 7, 106, 252, 20, 254, 140, 161, 162, 130, 46, 168, 80, 41, 24, 60, 57, 215, 62, 188, 149, 63, 30, 216, 44, 190, 91, 85, 83, 215, 7, 23, 166, 6, 30, 94, 69, 101, 98, 247, 124, 78, 29, 132, 25, 136, 205, 55, 235, 61, 14, 169, 84, 7, 10, 226, 35, 65, 133, 89, 40, 73, 91, 53, 136, 24, 200, 46, 65, 46, 190, 91, 239, 103, 248, 242, 220, 134, 131, 168, 200, 204, 223, 228, 152, 241, 40, 250, 196, 36, 180, 80, 125, 170, 134, 174, 196, 92, 111, 160, 117, 8, 197, 226, 1, 198, 121, 0, 101, 84, 186, 161, 36, 50, 33, 227, 68, 31, 205, 94, 200, 160, 117, 85, 231, 241, 122, 123] - ], - "segmentSize": null - }, - { - "encrypted": [ - [121, 89, 103, 66, 8, 167, 135, 187, 108, 92, 82, 113, 8, 244, 3, 249, 216, 98, 87, 221, 0, 113, 103, 20, 223, 251, 32, 188, 85, 245, 242, 95, 122, 149, 194, 68, 209, 94, 78, 238, 242, 91, 109, 107, 91, 189, 212, 184, 195, 3, 170, 141, 217, 174, 189, 225, 120, 185, 73, 134, 55, 142, 102, 138, 193, 109, 10, 229, 238, 121, 23, 26, 36, 139, 228, 162, 19, 227, 160, 49, 42, 175, 155, 180, 70, 147, 46, 164, 128, 172, 35, 26, 26, 64, 45, 106, 123, 193, 223, 126, 83, 86, 146, 65, 68, 152, 167, 81, 120, 196, 7, 108, 66, 154, 113, 186, 179, 163, 249, 164, 60, 221, 226, 38, 17, 93, 237, 23, 221, 21, 182, 17, 104, 98, 118, 116, 16, 174, 225, 133, 113, 114, 94, 53, 127, 246, 86, 160, 253, 32, 218, 132, 118, 7, 4, 121, 79, 62, 188, 130, 238, 77, 100, 60, 70, 203, 103, 191, 109, 88, 229, 49, 50, 127, 88, 165, 185, 97, 167, 130, 29, 141, 201, 32, 197, 198, 42, 109, 81, 200, 126, 26, 216, 165, 115, 239, 237, 20, 167, 162, 56, 177, 24, 251, 208, 189, 197, 124, 226, 183, 154, 95, 161, 237, 186, 208, 207, 196, 245, 40, 61, 109, 103, 43, 217, 132, 209, 31, 125, 152, 2, 195, 166, 128, 170, 30, 242, 219, 254, 160, 92, 73, 164, 247, 77, 162, 240, 157, 85, 183, 54, 178, 93, 27, 162, 29, 208, 231, 26, 160, 115, 177, 118, 96, 217, 157, 128, 217, 250, 20, 115, 113, 88, 171, 122, 211, 101, 73, 39, 41, 198, 132, 50, 47, 3, 212, 197, 217, 210, 97, 147, 59, 36, 15, 178, 132, 173, 81, 51, 215, 144, 45, 113, 234, 135, 100, 17, 94, 18, 174, 113, 31, 166, 100, 23, 111, 75, 72, 201, 137, 86, 167, 18, 61, 170, 30, 244, 236, 225, 149, 253, 165, 243, 164, 223, 30, 136, 12, 22, 235, 93, 93, 147, 90, 113, 23, 86, 74, 97, 65, 52, 3, 247, 196, 242, 38, 236, 221, 152, 64, 238, 179, 228, 68, 11, 242, 53, 215, 87, 57, 10, 234, 62, 250, 182, 237, 160, 21, 177, 237, 170, 60, 239, 113, 109, 115, 71, 85, 233, 150, 135, 140, 164, 225, 143, 37, 40, 149, 132, 98, 229, 189, 200, 225, 192, 232, 205, 12, 199, 193, 158, 58, 51, 7, 251, 28, 18, 191, 26, 98, 138, 185, 170, 124, 226, 167, 72, 252, 181, 116, 54, 105, 55, 214, 229, 55, 70, 110, 26, 235, 253, 197, 247, 129, 211, 203, 245, 123, 239, 173, 116, 242, 190, 72, 17, 21, 112, 158, 37, 139, 8, 187, 66, 247, 57, 172, 176, 201, 73, 136, 120, 174, 228, 52, 86, 216, 72, 254, 114, 213, 37, 119, 225, 239, 216, 187, 150, 249, 70, 30, 62, 194, 213, 56, 33, 40, 67, 183, 219, 47, 70, 176, 244, 151, 120, 125, 148, 15, 223, 26, 6, 61, 249, 88, 81, 128, 140, 167, 127, 39, 56, 162, 20, 137, 50, 128, 34, 180, 145, 84, 234, 249, 142, 60, 116, 68, 143, 69, 217, 152, 163, 235, 209, 213, 253, 213, 155, 156, 35, 175, 124, 113, 158, 145, 11, 192, 160, 43, 65, 197, 241, 214, 210, 67, 244, 6, 200, 113, 63, 86, 66, 236, 222, 41, 132, 145, 8, 109, 132, 137, 48, 229, 1, 111, 37, 196, 193, 68, 33, 7, 135, 246, 247, 160, 163, 102, 61, 191, 218, 160, 3, 86, 68, 48, 40, 181, 193, 152, 238, 255, 199, 132, 46, 178, 165, 213, 51, 107, 38, 102, 89, 135, 42, 77, 203, 81, 213, 29, 96, 190, 171, 169, 130, 246, 81, 216, 35, 230, 217, 239, 65, 88, 195, 145, 212, 225, 247, 124, 204, 230, 174, 129, 205, 182, 83, 174, 204, 251, 83, 160, 40, 244, 34, 238, 34, 19, 1, 56, 96, 37, 245, 123, 137, 205, 70, 195, 184, 217, 126, 4, 197, 232, 228, 179, 13, 75, 133, 227, 237, 106, 46, 104, 253, 139, 234, 218, 67, 156, 234, 215, 238, 211, 193, 177, 17, 190, 140, 91, 139, 253, 217, 196, 176, 237, 176, 90, 199, 205, 133, 13, 79, 31, 194, 158, 91, 151, 39, 123, 126, 185, 232, 148, 243, 234, 4, 160, 0, 44, 212, 33, 138, 170, 139, 49, 74, 37, 47, 186, 107, 148, 174, 94, 88, 62, 61, 241, 44, 97, 40, 120, 5, 163, 203, 123, 112, 153, 24, 86, 117, 211, 115, 231, 191, 163, 94, 242, 7, 6, 139, 153, 111, 191, 52, 208, 81, 246, 97, 16, 158, 131, 209, 145, 169, 7, 235, 106, 119, 18, 145, 16, 109, 133, 189, 35, 155, 146, 15, 31, 37, 86, 220, 168, 75, 35, 81, 190, 183, 142, 173, 103, 20, 53, 223, 45, 222, 33, 180, 209, 229, 140, 179, 24, 161, 227, 87, 36, 109, 191, 60, 252, 78, 34, 224, 8, 76, 14, 249, 30, 162, 233, 253, 53, 7, 85, 201, 236, 105, 201, 241, 237, 131, 38, 210, 238, 202, 135, 218, 74, 91, 206, 200, 198, 246, 64, 33, 210, 10, 124, 211, 50, 224, 107, 208, 161, 173, 191, 210, 252, 254, 249, 83, 71, 13, 164, 127, 245, 179, 124, 104, 67, 210, 8, 224, 180, 209, 212, 101, 88, 68, 98, 55, 37, 45, 93, 184, 47, 65, 13, 197, 101, 64, 19, 156, 88, 167, 116, 66, 21, 182, 225, 200, 6, 38, 92, 189, 50, 5, 115, 123, 61, 27, 221, 171, 220, 48, 21, 203, 12, 199, 31, 62, 127, 126, 103, 148, 198, 217, 69, 54, 182, 187, 175, 245, 31, 192, 68, 218, 21, 120, 40, 194, 247, 215, 1, 21, 56, 203, 110, 15, 33, 219, 188, 205, 44, 44, 49, 109, 207, 223, 6, 48, 139, 81, 235, 4, 210, 138, 220, 58, 111, 92, 161, 175, 68, 120, 68, 90, 18, 96, 128, 38, 123, 202, 208, 251, 49, 75, 55, 63, 202, 172, 193, 174, 252, 103, 203, 17, 229, 17, 21, 138, 172, 188, 81, 7, 127, 236, 93, 100, 32, 241, 69, 193, 65, 32, 166, 45, 135, 3, 153, 119, 0, 56, 191, 200, 41, 176, 202, 64, 170, 113, 29, 111, 82, 86, 184, 77, 255, 131, 33, 161, 9, 42, 251, 77, 197, 217, 147, 210, 69, 120, 61, 6, 21, 233, 65, 250, 80, 121, 221, 13, 205, 110, 108, 223, 198, 218, 42, 44, 114, 39, 45, 241, 98, 198, 33, 6, 234, 96, 70, 31, 193, 157, 83, 218, 57, 181, 225, 201, 232, 117, 26, 218, 105, 245, 139, 244, 130, 56, 45, 240, 188, 138, 251, 117, 133, 148, 155, 39, 133, 41, 23, 159, 174, 111, 29, 36, 197, 102, 215, 31, 166, 149, 52, 122, 68, 180, 159, 193, 3, 217, 172, 219, 221, 85, 22, 1, 97, 193, 105, 67, 45, 245, 95, 226, 252, 95, 106, 88, 124, 30, 54, 218, 37, 216, 118, 45, 90, 194, 3, 199, 69, 55, 195, 231, 67, 192, 206, 163, 245, 58, 247, 203, 163, 59, 198, 146, 27, 233, 53, 246, 45, 133, 158, 183, 66, 167, 159, 102, 29, 241, 195, 90, 186, 106, 48, 249, 150, 38, 63, 219, 20, 171, 188, 230, 33, 94, 34, 64, 74, 221, 218, 182, 249, 134, 128, 31, 133, 192, 76, 253, 119, 91, 226, 89, 181, 197, 6, 54, 144, 140, 255, 71, 150, 160, 20, 123, 45, 166, 109, 138, 55, 222, 186, 92, 135, 154, 244, 18, 211, 226, 239, 47, 89, 120, 180, 83, 8, 29, 0, 230, 186, 103, 130, 251, 14, 200, 253, 3, 111, 188, 233, 6, 33, 251, 177, 233, 53, 56, 101, 72, 37, 105, 230, 240, 176, 237, 191, 232, 102, 38, 67, 31, 185, 58, 188, 83, 2, 241, 255, 194, 154, 77, 57, 201, 171, 75, 35, 36, 193, 8, 240, 240, 138, 202, 135, 59, 167, 1, 205, 132, 166, 50, 60, 234, 172, 121, 72, 243, 152, 30, 2, 82, 124, 24, 115, 167, 232, 74, 220, 128, 234, 187, 238, 90, 34, 250, 53, 119, 148, 16, 103, 107, 223, 171, 125, 247, 175, 99, 85, 183, 43, 131, 25, 199, 2, 9, 246, 33, 146, 231, 84, 208, 175, 20, 201, 3, 243, 24, 97, 178, 130, 233, 90, 167, 11, 60, 197, 40, 211, 20, 16, 21, 225, 116, 143, 128, 49, 106, 199, 104, 29, 81, 114, 233, 125, 206, 199, 93, 207, 50, 100, 154, 222, 210, 251, 71, 49, 1, 118, 176, 205, 123, 226, 254, 189, 206, 229, 0, 239, 106, 136, 111, 193, 50, 131, 157, 132, 26, 35, 216, 163, 84, 130, 187, 113, 94, 246, 243, 143, 224, 142, 42, 50, 225, 91, 77, 188, 62, 143, 222, 253, 232, 210, 114, 97, 110, 83, 118, 113, 101, 223, 30, 19, 141, 111, 193, 145, 173, 51, 250, 83, 161, 63, 116, 108, 71, 249, 222, 59, 253, 212, 32, 121, 31, 110, 26, 46, 45, 207, 47, 137, 4, 215, 113, 3, 5, 200, 227, 247, 8, 127, 151, 51, 149, 54, 126, 175, 148, 81, 157, 81, 80, 66, 31, 131, 234, 233, 226, 57, 102, 209, 252, 106, 70, 54, 99, 235, 55, 164, 13, 110, 113, 197, 43, 147, 78, 194, 24, 126, 156, 192, 179, 39, 117, 193, 195, 95, 108, 97, 135, 134, 222, 224, 251, 155, 109, 150, 237, 169, 74, 196, 239, 131, 166, 182, 141, 185, 37, 58, 102, 182, 51, 85, 93, 128, 161, 99, 30, 98, 93, 67, 192, 191, 226, 50, 195, 141, 163, 20, 157, 130, 44, 247, 52, 253, 87, 255, 127, 34, 41, 44, 74, 204, 40, 181, 141, 55, 177, 211, 144, 40, 141, 98, 143, 141, 61, 15, 199, 195, 172, 237, 141, 43, 19, 156, 107, 211, 242, 209, 63, 54, 17, 169, 140, 122, 22, 70, 172, 45, 3, 46, 17, 74, 12, 1, 122, 205, 14, 207, 146, 65, 52, 215, 189, 227, 108, 66, 43, 207, 47, 119, 146, 40, 124, 91, 230, 91, 39, 251, 217, 48, 181, 131, 161, 36, 37, 136, 147, 205, 226, 51, 123, 107, 75, 55, 39, 17, 249, 204, 179, 63, 0, 197, 203, 170, 53, 46, 146, 65, 162, 92, 175, 125, 112, 25, 145, 160, 179, 16, 27, 53, 135, 107, 194, 109, 160, 186, 80, 125, 39, 255, 243, 67, 62, 204, 171, 20, 138, 185, 134, 81, 16, 132, 207, 42, 93, 30, 60, 118, 105, 88, 220, 45, 145, 38, 207, 224, 211, 193, 85, 241, 243, 143, 40, 221, 164, 41, 14, 228, 128, 204, 97, 162, 30, 75, 188, 26, 229, 37, 66, 249, 192, 69, 140, 6, 16, 47, 193, 218, 243, 79, 37, 2, 137, 45, 112, 27, 150, 88, 115, 11, 253, 176, 89, 255, 205, 173, 230, 245, 238, 87, 230, 205, 135, 66, 70, 236, 205, 159, 126, 42, 110, 181, 5, 152, 143, 174, 82, 79, 221, 26, 29, 169, 193, 205, 68, 235, 74, 148, 126, 17, 45, 15, 85, 113, 12, 208, 191, 13, 93, 247, 76, 86, 105, 169, 217, 74, 250, 215, 111, 229, 90, 194, 242, 255, 170, 137, 18, 90, 225, 163, 202, 198, 114, 204, 218, 133, 154, 57, 119, 229, 184, 190, 191, 244, 153, 208, 93, 29, 177, 160, 120, 178, 237, 226, 61, 248, 227, 37, 94, 191, 114, 252, 230, 46, 165, 138, 99, 94, 15, 170, 197, 89, 26, 40, 225, 2, 84, 72, 240, 144, 31, 161, 170, 78, 215, 178, 239, 76, 39, 73, 162, 222, 146, 2, 137, 55, 183, 149, 213, 140, 137, 153, 240, 202, 135, 52, 172, 210, 223, 196, 52, 145, 255, 230, 79, 194, 161, 6, 251, 20, 89, 157, 62, 198, 226, 245, 80, 112, 27, 92, 40, 105, 223, 220, 72, 41, 77, 120, 59, 50, 135, 98, 180, 0, 27, 167, 197, 83, 234, 130, 163, 41, 62, 17, 38, 188, 13, 64, 217, 124, 170, 243, 50, 24, 109, 73, 109, 10, 135, 231, 84, 39, 79, 5, 103, 254, 53, 14, 110, 97, 38, 158, 35, 21, 200, 4, 177, 30, 72, 113, 17, 32, 211, 145, 8, 234, 112, 179, 241, 24, 212, 123, 22, 144, 188, 232, 60, 24, 93, 156, 236, 255, 1, 46, 235, 132, 88, 100, 170, 104, 226, 112, 130, 171, 166, 103, 24, 192, 174, 17, 29, 32, 75, 96, 57, 163, 151, 214, 95, 161, 107, 31, 110, 240, 90, 147, 70, 116, 13, 221, 38, 190, 59, 143, 125, 50, 69, 80, 181, 61, 205, 62, 46, 84, 232, 176, 53, 31, 130, 205, 18, 223, 148, 203, 31, 152, 188, 128, 5, 153, 5, 74, 24, 32, 217, 64, 201, 6, 25, 233, 175, 143, 92, 161, 209, 253, 2, 19, 11, 40, 56, 74, 20, 112, 22, 247, 147, 192, 11, 179, 42, 105, 117, 222, 44, 61, 129, 81, 150, 228, 253, 39, 112, 172, 154, 120, 63, 208, 239, 220, 83, 125, 186, 97, 213, 7, 184, 221, 29, 95, 45, 24, 64, 107, 235, 6, 240, 21, 114, 185, 152, 19, 31, 90, 148, 165, 249, 1, 9, 154, 80, 128, 58, 104, 118, 34, 172, 1, 185, 19, 88, 103, 118, 81, 62, 106, 42, 107, 36, 113, 255, 169, 253, 65, 246, 62, 152, 38, 2, 203, 233, 168, 205, 16, 176, 228, 25, 152, 47, 178, 254, 68, 26, 228, 140, 35, 34, 243, 209, 68, 139, 20, 77, 172, 158, 34, 54, 92, 116, 194, 52, 69, 146, 171, 185, 172, 108, 149, 72, 249, 99, 239, 43, 168, 240, 101, 149, 195, 231, 135, 198, 246, 202, 133, 241, 233, 71, 26, 132, 155, 98, 27, 41, 107, 95, 190, 61, 113, 187, 254, 254, 57, 68, 250, 204, 53, 33, 242, 202, 38, 90, 81, 97, 255, 154, 148, 222, 155, 52, 248, 6, 53, 6, 29, 126, 31, 97, 243, 144, 31, 145, 248, 175, 60, 208, 195, 40, 216, 178, 20, 95, 22, 64, 205, 167, 41, 81, 245, 231, 217, 209, 164, 118, 182, 42, 135, 90, 73, 156, 10, 146, 198, 146, 148, 101, 87, 171, 6, 159, 135, 176, 23, 119, 122, 227, 181, 89, 182, 36, 230, 103, 111, 25, 56, 29, 182, 42, 177, 158, 168, 42, 239, 229, 137, 109, 127, 37, 196, 78, 226, 164, 43, 154, 152, 89, 70, 28, 112, 90, 112, 90, 50, 49, 154, 171, 155, 44, 95, 216, 177, 231, 47, 62, 234, 128, 236, 207, 121, 226, 117, 36, 67, 61, 63, 109, 237, 228, 52, 131, 178, 248, 153, 144, 141, 221, 100, 78, 49, 253, 134, 122, 95, 85, 66, 13, 57, 1, 9, 2, 161, 95, 229, 212, 64, 218, 252, 164, 194, 161, 36, 59, 84, 95, 19, 146, 178, 170, 124, 5, 247, 220, 3, 171, 176, 103, 78, 218, 68, 9, 155, 82, 224, 96, 117, 106, 57, 117, 127, 246, 26, 142, 250, 115, 9, 51, 96, 163, 51, 143, 157, 163, 174, 61, 187, 24, 25, 81, 232, 105, 6, 18, 22, 45, 55, 202, 123, 171, 125, 153, 15, 58, 113, 243, 25, 44, 202, 239, 177, 134, 128, 181, 204, 14, 223, 35, 196, 179, 151, 238, 133, 38, 182, 108, 108, 90, 205, 149, 118, 46, 69, 186, 29, 130, 21, 254, 234, 180, 220, 17, 77, 190, 78, 249, 210, 205, 114, 53, 107, 26, 246, 80, 43, 37, 20, 214, 51, 152, 0, 166, 149, 170, 67, 162, 161, 187, 112, 6, 98, 113, 12, 231, 104, 233, 103, 102, 34, 26, 189, 239, 49, 108, 145, 73, 246, 196, 150, 206, 162, 108, 60, 147, 68, 231, 160, 107, 143, 20, 156, 237, 188, 244, 143, 117, 141, 215, 37, 200, 195, 239, 230, 9, 76, 230, 204, 182, 110, 41, 0, 245, 153, 94, 30, 86, 131, 82, 200, 210, 94, 26, 22, 95, 102, 66, 215, 207, 117, 242, 112, 90, 129, 117, 14, 135, 94, 80, 146, 82, 77, 44, 29, 71, 124, 39, 56, 187, 121, 45, 76, 252, 192, 177, 6, 145, 88, 229, 177, 189, 173, 98, 53, 197, 148, 140, 203, 44, 96, 216, 221, 139, 40, 80, 151, 102, 50, 141, 175, 214, 236, 247, 72, 215, 111, 0, 118, 3, 61, 239, 102, 148, 210, 136, 190, 141, 15, 27, 113, 179, 170, 61, 65, 137, 114, 0, 36, 173, 31, 89, 58, 44, 58, 5, 49, 86, 166, 2, 6, 82, 125, 41, 190, 33, 19, 250, 148, 127, 192, 76, 189, 145, 156, 41, 144, 43, 118, 80, 255, 130, 45, 56, 209, 34, 30, 4, 72, 48, 254, 48, 137, 195, 46, 217, 103, 158, 72, 81, 106, 102, 221, 70, 154, 192, 251, 86, 126, 197, 120, 108, 6, 128, 36, 82, 235, 114, 88, 85, 134, 74, 217, 104, 163, 207, 69, 234, 169, 112, 107, 63, 252, 41, 244, 57, 245, 102, 155, 21, 21, 157, 123, 84, 1, 236, 9, 51, 21, 69, 127, 123, 174, 114, 193, 145, 223, 160, 181, 205, 133, 14, 51, 7, 130, 153, 211, 109, 180, 198, 107, 47, 208, 153, 229, 250, 93, 69, 17, 87, 54, 254, 238, 21, 7, 244, 91, 1, 164, 119, 53, 88, 30, 224, 255, 227, 9, 48, 197, 66, 208, 116, 213, 239, 1, 189, 162, 253, 104, 217, 196, 115, 145, 142, 29, 110, 61, 111, 78, 185, 248, 28, 222, 168, 0, 162, 87, 202, 98, 34, 93, 246, 92, 171, 177, 54, 251, 163, 148, 76, 194, 246, 102, 99, 40, 30, 233, 202, 35, 102, 193, 23, 120, 47, 227, 101, 69, 253, 211, 35, 152, 103, 80, 98, 116, 206, 229, 59, 173, 141, 130, 113, 168, 216, 51, 16, 179, 206, 78, 117, 210, 185, 207, 115, 29, 59, 93, 231, 45, 202, 226, 23, 16, 44, 235, 226, 247, 204, 73, 136, 130, 172, 249, 159, 3, 133, 8, 8, 157, 18, 49, 201, 54, 247, 72, 28, 6, 124, 98, 28, 98, 210, 49, 216, 148, 142, 188, 131, 140, 31, 138, 222, 133, 64, 114, 201, 161, 246, 49, 207, 162, 97, 204, 12, 236, 126, 87, 172, 155, 40, 102, 245, 48, 148, 116, 227, 236, 29, 224, 223, 70, 155, 196, 223, 164, 36, 215, 118, 4, 246, 229, 49, 184, 111, 79, 253, 233, 212, 232, 24, 167, 29, 191, 242, 96, 86, 97, 119, 44, 199, 53, 32, 113, 212, 38, 239, 6, 177, 130, 188, 2, 11, 158, 220, 112, 197, 125, 75, 229, 55, 91, 100, 61, 141, 198, 173, 251, 175, 13, 14, 254, 69, 50, 142, 152, 66, 90, 40, 111, 83, 32, 65, 4, 90, 112, 19, 179, 78, 91, 204, 182, 188, 75, 55, 70, 131, 121, 147, 121, 51, 202, 47, 234, 168, 185, 129, 141, 172, 81, 10, 202, 69, 137, 123, 137, 114, 183, 212, 6, 229, 158, 146, 134, 166, 109, 158, 196, 142, 221, 159, 225, 5, 52, 82, 197, 213, 39, 86, 177, 17, 200, 184, 125, 58, 202, 126, 190, 45, 214, 219, 45, 79, 179, 218, 5, 198, 125, 137, 244, 166, 50, 125, 135, 109, 189, 15, 62, 13, 199, 169, 4, 55, 42, 164, 193, 248, 232, 90, 61, 134, 152, 108, 156, 26, 23, 253, 238, 244, 230, 148, 184, 177, 163, 128, 27, 26, 31, 115, 105, 79, 147, 110, 245, 4, 108, 240, 231, 90, 214, 229, 171, 182, 81, 255, 178, 145, 181, 231, 80, 148, 175, 4, 21, 207, 109, 227, 39, 18, 80, 122, 177, 144, 199, 49, 101, 85, 51, 100, 45, 215, 162, 213, 242, 254, 37, 141, 72, 108, 205, 64, 1, 247, 175, 123, 31, 131, 220, 229, 100, 9, 15, 151, 192, 133, 183, 106, 141, 238, 235, 113, 236, 56, 44, 82, 107, 202, 254, 237, 11, 163, 18, 218, 177, 158, 63, 121, 90, 66, 129, 225, 8, 218, 107, 77, 145, 90, 60, 157, 143, 181, 193, 17, 223, 229, 21, 149, 99, 179, 248, 30, 182, 69, 113, 91, 60, 97, 1, 151, 229, 86, 49, 159, 6, 226, 245, 248, 184, 177, 82, 238, 207, 116, 196, 64, 5, 179, 147, 251, 105, 156, 155, 135, 179, 64, 24, 81, 35, 37, 32, 187, 86, 58, 203, 221, 62, 218, 252, 38, 66, 209, 104, 67, 175, 224, 4, 186, 65, 248, 77, 20, 225, 171, 95, 198, 76, 12, 167, 177, 157, 138, 10, 186, 23, 67, 250, 166, 184, 171, 180, 47, 72, 40, 81, 167, 116, 45, 211, 70, 149, 225, 125, 101, 252, 184, 170, 97, 160, 2, 128, 20, 103, 192, 140, 60, 106, 82, 162, 57, 94, 143, 205, 228, 218, 143, 157, 113, 98, 38, 6, 164, 98, 145, 224, 172, 67, 190, 121, 228, 1, 174, 89, 139, 0, 87, 230, 34, 29, 16, 172, 193, 200, 229, 132, 43, 236, 174, 50, 112, 53, 219, 111, 159, 5, 35, 54, 43, 201, 67, 38, 209, 155, 12, 11, 168, 222, 117, 28, 240, 154, 167, 27, 23, 96, 1, 251, 18, 58, 136, 168, 171, 83, 196, 18, 231, 93, 158, 161, 156, 16, 41, 98, 26, 222, 51, 11, 72, 11, 57, 229, 137, 232, 31, 109, 145, 250, 165, 201, 23, 130, 172, 2, 141, 117, 37, 85, 52, 3, 243, 97, 128, 85, 128, 186, 49, 11, 149, 178, 158, 139, 151, 111, 142, 123, 220, 184, 161, 202, 80, 114, 162, 76, 28, 180, 42, 166, 245, 165, 224, 4, 148, 48, 174, 178, 37, 208, 121, 60, 45, 76, 217, 103, 153, 190, 216, 138, 103, 205, 65, 89, 156, 77, 118, 74, 217, 159, 93, 108, 116, 80, 211, 179, 240, 255, 177, 173, 163, 182, 226, 68, 116, 125, 41, 238, 112, 50, 159, 209, 57, 69, 142, 180, 117, 86, 66, 90, 212, 220, 52, 4, 216, 218, 238, 163, 169, 156, 87, 131, 100, 17, 240, 148, 69, 33, 248, 243, 129, 228, 97, 206, 53, 243, 119, 140, 186, 121, 15, 242, 26, 70, 179, 203, 184, 105, 108, 236, 44, 113, 102, 154, 53, 55, 62, 235, 60, 235, 52, 6, 226, 169, 29, 185, 200, 204, 247, 14, 122, 152, 201, 130, 51, 80, 49, 220, 228, 185, 174, 83, 240, 236, 14, 235, 171, 84, 115, 192, 8, 79, 194, 175, 227, 125, 72, 153, 124, 109, 114, 234, 42, 235, 102, 55, 235, 88, 104, 244, 204, 157, 40, 179, 205, 16, 59, 114, 217, 175, 1, 74, 99, 119, 217, 213, 80, 126, 251, 18, 53, 232, 12, 20, 108, 41, 210, 178, 65, 53, 84, 238, 193, 129, 213, 222, 77, 58, 252, 226, 138, 216, 214, 45, 157, 102, 254, 166, 215, 94, 120, 148, 188, 6, 3, 102, 82, 95, 142, 176, 133, 115, 175, 17, 27, 42, 176, 20, 233, 172, 92, 71, 204, 53, 140, 77, 218, 35, 39, 154, 64, 171, 203, 21, 147, 48, 124, 142, 182, 19, 122, 121, 67, 151, 226, 143, 17, 106, 188, 126, 183, 28, 218, 22, 158, 162, 147, 98, 100, 113, 8, 24, 113, 96, 253, 181, 94, 79, 172, 249, 153, 248, 222, 42, 100, 121, 111, 113, 142, 66, 236, 163, 112, 83, 6, 46, 243, 172, 131, 70, 63, 213, 137, 59, 79, 72, 177, 166, 209, 45, 160, 225, 218, 208, 35, 31, 64, 114, 31, 51, 185, 15, 41, 92, 192, 125, 153, 201, 179, 185, 236, 28, 103, 127, 97, 90, 241, 9, 83, 103, 239, 94, 101, 239, 174, 134, 69, 3, 5, 32, 47, 45, 106, 41, 3, 38, 74, 46, 74, 100, 48, 5, 202, 143, 33, 142, 75, 26, 54, 138, 4, 206, 39, 123, 164, 15, 82, 247, 216, 240, 50, 21, 187, 37, 59, 144, 228, 153, 151, 81, 26, 36, 242, 148, 110, 219, 50, 194, 111, 65, 58, 21, 113, 171, 43, 30, 235, 252, 32, 63, 82, 152, 4, 140, 107, 147, 50, 114, 217, 196, 68, 167, 0, 166, 126, 184, 155, 241, 28, 164, 237, 253, 22, 216, 243, 192, 128, 10, 121, 206, 111, 126, 215, 117, 63, 63, 214, 105, 184, 130, 83, 17, 13, 10, 173, 3, 18, 121, 86, 198, 104, 109, 201, 200, 44, 85, 112, 64, 204, 32, 128, 58, 31, 25, 37, 125, 179, 125, 159, 40, 151, 200, 126, 20, 177, 160, 191, 7, 28, 97, 82, 157, 137, 161, 117, 35, 20, 60, 144, 226, 207, 250, 248, 213, 33, 204, 218, 114, 239, 200, 145, 87, 194, 241, 7, 139, 17, 181, 219, 239, 206, 87, 237, 191, 60, 214, 215, 151, 25, 114, 252, 67, 172, 105, 133, 63, 200, 105, 208, 195, 201, 219, 126, 48, 181, 147, 10, 14, 88, 247, 55, 20, 161, 68, 38, 80, 242, 72, 9, 193, 129, 248, 14, 52, 27, 140, 246, 13, 13, 100, 105, 68, 235, 4, 138, 79, 178, 31, 155, 111, 220, 172, 175, 213, 198, 101, 43, 206, 153, 127, 182, 64, 138, 26, 111, 143, 162, 169, 124, 173, 56, 234, 98, 56, 244, 98, 116, 152, 30, 209, 60, 64, 227, 14, 197, 103, 114, 155, 234, 121, 199, 123, 58, 223, 169, 237, 36, 45, 175, 52, 134, 6, 249, 60, 227, 120, 54, 32, 134, 178, 117, 211, 189, 6, 165, 29, 41, 106, 126, 178, 232, 2, 76, 233, 215, 186, 94, 49, 53, 78, 107, 154, 151, 170, 166, 159, 249, 222, 100, 76, 17, 189, 213, 202, 32, 206, 43, 70, 2, 146, 133, 185, 179, 207, 50, 241, 134, 33, 55, 231, 107, 244, 234, 116, 181, 112, 115, 56, 97, 58, 85, 123, 31, 35, 107, 244, 152, 51, 30, 117, 68, 132, 140, 196, 63, 28, 254, 18, 99, 251, 194, 118, 68, 40, 197, 121, 84, 41, 126, 130, 237, 109, 94, 157, 1, 138, 231, 254, 104, 197, 217, 247, 165, 179, 71, 146, 22, 242, 51, 69, 251, 194, 226, 139, 6, 16, 2, 232, 184, 65, 63, 254, 214, 184, 209, 184, 182, 242, 46, 40, 114, 169, 63, 85, 244, 94, 18, 44, 51, 167, 120, 218, 215, 201, 143, 168, 216, 108, 53, 158, 69, 205, 41, 57, 30, 203, 153, 97, 149, 25, 39, 139, 110, 154, 188, 40, 209, 33, 249, 44, 206, 184, 11, 253, 0, 120, 229, 14, 207, 250, 29, 77, 151, 53, 161, 82, 138, 138, 233, 202, 156, 18, 217, 65, 149, 146, 93, 128, 122, 36, 10, 15, 195, 230, 126, 130, 222, 66, 176, 52, 236, 7, 202, 49, 165, 100, 90, 200, 134, 180, 39, 1, 38, 91, 119, 47, 62, 243, 254, 63, 75, 43, 30, 133, 183, 160, 170, 181, 106, 53, 110, 163, 129, 236, 179, 77, 65, 219, 131, 126, 63, 187, 161, 92, 22, 151, 214, 72, 26, 170, 55, 34, 9, 214, 229, 124, 61, 183, 3, 35, 94, 107, 40, 20, 146, 55, 171, 42, 148, 74, 248, 55, 82, 74, 152, 230, 107, 63, 0, 96, 85, 43, 47, 63, 70, 91, 72, 54, 81, 28, 22, 28, 194, 224, 22, 161, 16, 69, 104, 81, 200, 207, 111, 37, 146, 133, 66, 114, 134, 155, 227, 136, 191, 217, 206, 98, 37, 69, 95, 144, 120, 252, 147, 60, 48, 204, 221, 133, 96, 221, 113, 46, 254, 106, 147, 26, 137, 17, 107, 30, 119, 102, 225, 230, 6, 189, 141, 180, 237, 33, 122, 151, 195, 9, 44, 106, 183, 107, 226, 31, 185, 129, 173, 196, 29, 11, 254, 179, 214, 34, 73, 243, 181, 166, 60, 75, 43, 242, 16, 149, 69, 79, 187, 156, 221, 176, 214, 183, 1, 79, 147, 109, 21, 202, 244, 140, 72, 151, 216, 75, 186, 76, 136, 252, 231, 5, 129, 255, 204, 195, 84, 119, 107, 79, 204, 249, 218, 157, 153, 39, 101, 130, 110, 69, 144, 48, 153, 78, 88, 155, 183, 227, 85, 203, 153, 168, 229, 241, 229, 23, 166, 135, 173, 110, 89, 51, 158, 235, 113, 170, 123, 5, 196, 211, 207, 46, 114, 175, 11, 18, 109, 201, 239, 196, 255, 133, 208, 47, 181, 159, 171, 52, 15, 253, 195, 110, 84, 106, 81, 200, 208, 44, 235, 98, 84, 183, 70, 69, 118, 118, 10, 121, 33, 123, 172, 119, 132, 76, 244, 84, 164, 91, 35, 41, 42, 31, 135, 142, 108, 110, 152, 13, 132, 152, 134, 186, 30, 160, 171, 121, 247, 65, 199, 239, 131, 125, 28, 52, 172, 233, 31, 215, 204, 251, 241, 179, 40, 178, 30, 35, 189, 46, 99, 230, 59, 161, 224, 90, 3, 205, 116, 121, 67, 119, 5, 15, 100, 202, 129, 117, 36, 31, 68, 181, 107, 87, 11, 191, 14, 76, 200, 199, 167, 211, 47, 49, 89, 210, 120, 2, 199, 220, 160, 109, 90, 204, 240, 169, 227, 120, 160, 153, 190, 134, 236, 37, 121, 155, 199, 70, 184, 199, 246, 189, 197, 202, 131, 49, 197, 26, 255, 236, 70, 54, 72, 226, 111, 111, 228, 213, 160, 33, 243, 56, 16, 12, 190, 37, 173, 222, 225, 167, 212, 197, 95, 87, 210, 92, 35, 92, 211, 12, 211, 124, 71, 91, 219, 120, 2, 195, 237, 137, 221, 155, 253, 203, 250, 136, 178, 90, 47, 247, 119, 8, 212, 145, 232, 94, 221, 83, 130, 197, 8, 220, 222, 188, 204, 188, 190, 245, 250, 96, 240, 198, 168, 229, 169, 171, 75, 250, 74, 100, 54, 217, 252, 15, 146, 148, 170, 177, 221, 154, 190, 197, 156, 82, 191, 228, 241, 1, 100, 148, 163, 66, 4, 207, 118, 160, 255, 214, 213, 11, 88, 12, 83, 186, 238, 195, 186, 105, 189, 37, 220, 170, 238, 58, 210, 61, 252, 178, 94, 226, 74, 34, 125, 190, 60, 94, 53, 62, 222, 29, 231, 95, 230, 76, 165, 186, 119, 205, 111, 239, 232, 121, 220, 2, 99, 152, 55, 24, 30, 63, 64, 42, 108, 144, 65, 96, 6, 64, 159, 174, 113, 18, 195, 157, 170, 128, 53, 13, 235, 144, 18, 248, 75, 37, 66, 167, 241, 229, 52, 140, 29, 36, 236, 86, 254, 113, 96, 181, 149, 63, 102, 8, 19, 104, 203, 245, 149, 185, 254, 32, 206, 146, 84, 13, 1, 244, 59, 74, 206, 186, 218, 0, 110, 71, 88, 103, 135, 97, 146, 188, 71, 164, 153, 138, 179, 74, 54, 237, 111, 21, 150, 234, 226, 93, 152, 27, 224, 163, 159, 246, 151, 21, 75, 65, 218, 124, 180, 64, 95, 33, 219, 121, 251, 146, 134, 236, 155, 94, 234, 217, 14, 149, 255, 128, 203, 240, 83, 15, 12, 213, 170, 97, 142, 143, 45, 61, 65, 183, 66, 164, 54, 150, 58, 104, 40, 12, 63, 176, 79, 217, 214, 237, 58, 56, 64, 119, 193, 251, 197, 42, 240, 123, 54, 77, 226, 2, 231, 38, 109, 120, 205, 223, 127, 174, 52, 16, 212, 215, 39, 53, 102, 156, 125, 29, 97, 25, 29, 84, 136, 107, 18, 8, 100, 48, 98, 139, 48, 7, 237, 180, 103, 255, 189, 131, 168, 123, 67, 151, 214, 129, 156, 148, 45, 210, 87, 55, 121, 240, 55, 33, 82, 216, 138, 131, 169, 6, 252, 160, 87, 155, 199, 74, 233, 1, 95, 231, 104, 76, 6, 44, 205, 18, 183, 76, 16, 230, 176, 252, 219, 57, 158, 141, 194, 92, 9, 109, 116, 165, 56, 41, 203, 14, 90, 71, 191, 83, 134, 37, 182, 51, 229, 38, 100, 0, 147, 175, 15, 38, 19, 181, 11, 32, 168, 239, 157, 177, 180, 177, 74, 173, 209, 173, 143, 105, 114, 109, 4, 53, 26, 154, 142, 189, 100, 171, 119, 76, 154, 144, 222, 164, 160, 112, 193, 182, 14, 48, 86, 210, 60, 100, 77, 198, 109, 162, 231, 221, 244, 131, 95, 177, 179, 129, 72, 226, 180, 212, 176, 179, 248, 73, 109, 118, 173, 172, 88, 246, 123, 132, 208, 80, 50, 88, 152, 66, 200, 152, 202, 193, 191, 24, 205, 108, 124, 231, 0, 91, 219, 219, 170, 31, 179, 26, 250, 221, 48, 183, 81, 41, 77, 52, 115, 193, 70, 122, 255, 172, 233, 254, 104, 70, 162, 24, 70, 222, 121, 110, 241, 10, 165, 251, 232, 223, 28, 95, 168, 192, 249, 247, 147, 227, 78, 194, 112, 228, 109, 117, 254, 121, 43, 142, 182, 207, 78, 24, 166, 150, 7, 163, 187, 166, 27, 165, 135, 227, 61, 94, 85, 156, 17, 67, 255, 188, 171, 225, 182, 237, 3, 82, 71, 225, 77, 198, 63, 166, 11, 159, 140, 105, 53, 141, 161, 7, 11, 138, 171, 231, 23, 159, 102, 90, 171, 111, 8, 237, 44, 153, 22, 237, 112, 63, 144, 206, 1, 220, 236, 142, 151, 16, 58, 108, 157, 145, 67, 158, 66, 173, 184, 213, 135, 115, 14, 4, 243, 140, 66, 133, 104, 42, 194, 36, 10, 178, 45, 146, 135, 192, 193, 17, 249, 218, 31, 232, 18, 104, 239, 197, 173, 197, 70, 173, 222, 77, 102, 232, 71, 83, 2, 88, 59, 127, 76, 239, 77, 89, 62, 118, 116, 180, 124, 36, 214, 145, 176, 152, 94, 244, 27, 62, 80, 248, 22, 63, 220, 190, 132, 139, 254, 155, 195, 234, 196, 28, 6, 35, 127, 209, 19, 6, 146, 254, 250, 122, 167, 153, 41, 72, 48, 68, 245, 175, 139, 219, 187, 100, 17, 105, 16, 54, 44, 134, 170, 62, 152, 81, 66, 202, 92, 16, 32, 141, 89, 228, 101, 70, 49, 92, 71, 5, 29, 228, 221, 20, 176, 139, 59, 120, 113, 252, 55, 111, 94, 51, 114, 102, 188, 48, 93, 117, 149, 115, 112, 47, 162, 174, 14, 58, 101, 1, 194, 95, 53, 229, 249, 167, 9, 187, 161, 255, 70, 208, 69, 158, 193, 154, 194, 248, 231, 158, 57, 48, 255, 101, 143, 43, 229, 147, 36, 155, 56, 6, 197, 249, 94, 172, 62, 57, 64, 31, 31, 61, 46, 228, 96, 211, 97, 243, 127, 177, 122, 142, 29, 20, 54, 47, 67, 100, 135, 152, 229, 125, 65, 97, 24, 39, 218, 196, 194, 213, 17, 194, 193, 111, 73, 170, 97, 70, 154, 1, 42, 175, 195, 42, 31, 159, 211, 126, 5, 135, 208, 26, 182, 243, 10, 240, 171, 219, 220, 196, 75, 49, 17, 46, 50, 108, 164, 17, 79, 210, 34, 49, 254, 114, 119, 17, 121, 117, 241, 127, 184, 24, 151, 233, 167, 146, 22, 225, 125, 210, 10, 194, 98, 92, 85, 100, 108, 102, 11, 29, 235, 220, 137, 95, 14, 233, 73, 193, 126, 146, 3, 124, 29, 26, 66, 188, 132, 238, 81, 53, 188, 218, 184, 77, 243, 92, 0, 204, 194, 176, 30, 245, 233, 253, 29, 15, 65, 175, 145, 167, 197, 202, 183, 110, 250, 206, 183, 246, 161, 142, 104, 86, 251, 200, 158, 82, 75, 205, 11, 94, 99, 203, 154, 26, 212, 218, 23, 173, 26, 69, 255, 46, 65, 28, 122, 202, 158, 117, 231, 106, 66, 0, 111, 34, 184, 18, 170, 84, 253, 30, 36, 140, 33, 117, 96, 218, 223, 135, 97, 208, 212, 90, 32, 198, 110, 34, 89, 75, 125, 55, 114, 219, 116, 60, 217, 96, 232, 170, 155, 173, 175, 194, 130, 83, 193, 58, 55, 172, 196, 162, 218, 77, 139, 237, 142, 48, 82, 156, 89, 23, 218, 161, 52, 71, 52, 172, 8, 30, 107, 148, 118, 138, 131, 233, 216, 130, 13, 180, 222, 145, 129, 158, 96, 125, 31, 86, 130, 224, 137, 66, 2, 96, 64, 218, 201, 160, 87, 69, 184, 4, 240, 168, 157, 16, 14, 216, 253, 69, 161, 113, 229, 140, 122, 159, 3, 239, 22, 23, 41, 80, 206, 182, 207, 140, 57, 185, 166, 193, 170, 240, 203, 152, 227, 228, 11, 96, 206, 92, 209, 145, 204, 246, 108, 184, 244, 77, 216, 167, 130, 180, 68, 212, 11, 110, 128, 246, 40, 204, 22, 146, 16, 78, 253, 117, 137, 240, 194, 103, 185, 5, 206, 51, 135, 40, 208, 116, 190, 216, 74, 164, 247, 144, 200, 94, 118, 166, 173, 251, 179, 5, 156, 178, 187, 237, 132, 50, 138, 221, 208, 130, 105, 230, 229, 66, 0, 122, 193, 211, 105, 97, 74, 96, 232, 159, 68, 99, 60, 137, 43, 203, 56, 91, 157, 254, 22, 202, 124, 16, 183, 58, 208, 31, 194, 156, 160, 111, 209, 12, 17, 227, 225, 231, 64, 166, 196, 170, 166, 63, 43, 223, 199, 253, 124, 142, 171, 163, 51, 132, 107, 83, 151, 221, 168, 247, 19, 171, 208, 240, 10, 68, 107, 110, 85, 112, 196, 127, 43, 218, 74, 97, 193, 76, 45, 130, 215, 137, 148, 45, 26, 94, 197, 249, 148, 213, 113, 207, 41, 172, 160, 116, 44, 19, 128, 202, 211, 139, 32, 127, 184, 60, 38, 155, 170, 108, 240, 74, 249, 196, 67, 229, 70, 160, 171, 26, 207, 111, 163, 172, 181, 226, 104, 71, 139, 168, 246, 3, 185, 127, 117, 151, 107, 124, 194, 151, 34, 122, 71, 30, 176, 47, 125, 92, 85, 165, 115, 211, 16, 40, 71, 171, 184, 134, 149, 186, 40, 102, 79, 198, 49, 213, 206, 68, 84, 16, 162, 169, 128, 24, 81, 170, 201, 101, 102, 8, 82, 217, 85, 7, 255, 251, 15, 120, 112, 165, 33, 117, 75, 254, 78, 157, 105, 172, 189, 219, 221, 210, 237, 84, 74, 148, 80, 80, 230, 223, 3, 244, 116, 193, 67, 210, 38, 33, 217, 225, 217, 95, 88, 15, 60, 214, 119, 175, 175, 244, 51, 19, 25, 186, 196, 52, 2, 129, 237, 88, 72, 155, 115, 0, 167, 237, 158, 80, 77, 111, 192, 74, 96, 241, 177, 236, 125, 171, 202, 54, 18, 154, 148, 132, 208, 22, 78, 63, 248, 65, 205, 33, 176, 218, 236, 155, 227, 47, 52, 86, 76, 89, 119, 191, 119, 182, 111, 155, 83, 151, 194, 222, 129, 243, 82, 79, 102, 165, 68, 64, 30, 91, 83, 203, 209, 38, 130, 249, 34, 76, 178, 13, 91, 24, 47, 178, 146, 49, 26, 161, 179, 177, 231, 23, 182, 162, 69, 179, 125, 126, 204, 164, 246, 124, 158, 176, 120, 95, 173, 78, 69, 83, 209, 28, 99, 238, 122, 30, 110, 53, 29, 27, 120, 31, 243, 208, 99, 17, 214, 193, 229, 212, 142, 59, 33, 89, 254, 67, 124, 227, 185, 239, 45, 43, 101, 172, 114, 94, 42, 160, 208, 142, 219, 196, 28, 38, 7, 114, 83, 211, 29, 31, 76, 18, 211, 233, 235, 111, 146, 209, 127, 94, 115, 83, 43, 137, 154, 19, 13, 159, 124, 135, 14, 36, 227, 229, 11, 104, 128, 203, 112, 95, 24, 149, 220, 192, 38, 35, 50, 25, 58, 30, 219, 1, 34, 21, 70, 31, 127, 61, 238, 239, 154, 113, 27, 147, 87, 208, 146, 143, 137, 160, 15, 11, 5, 57, 136, 173, 46, 180, 249, 123, 157, 210, 172, 178, 153, 144, 37, 130, 111, 94, 21, 75, 110, 128, 126, 238, 206, 185, 140, 37, 133, 248, 133, 133, 130, 54, 73, 237, 243, 180, 174, 184, 105, 37, 190, 65, 213, 241, 2, 107, 105, 10, 211, 0, 129, 24, 186, 247, 129, 107, 57, 67, 2, 195, 149, 179, 136, 12, 42, 50, 42, 31, 80, 234, 65, 101, 8, 9, 67, 255, 243, 115, 214, 209, 230, 7, 84, 199, 143, 220, 29, 215, 104, 243, 226, 117, 228, 76, 35, 248, 145, 182, 65, 76, 68, 45, 81, 165, 224, 117, 238, 14, 245, 252, 16, 228, 28, 179, 90, 56, 244, 70, 95, 229, 247, 23, 243, 79, 7, 176, 178, 217, 22, 134, 206, 241, 32, 135, 76, 66, 126, 164, 183, 150, 207, 254, 19, 245, 78, 165, 64, 63, 118, 223, 242, 13, 252, 186, 96, 88, 29, 184, 150, 241, 44, 71, 249, 247, 50, 203, 45, 176, 53, 32, 115, 183, 100, 37, 251, 90, 54, 104, 6, 219, 112, 121, 33, 178, 163, 106, 91, 200, 127, 168, 54, 98, 79, 74, 95, 145, 37, 104, 126, 21, 238, 200, 128, 114, 137, 242, 28, 7, 110, 77, 0, 79, 6, 35, 113, 249, 1, 14, 5, 219, 104, 199, 53, 135, 190, 163, 76, 57, 115, 73, 184, 245, 48, 226, 65, 205, 16, 208, 227, 107, 144, 115, 164, 10, 198, 43, 109, 56, 148, 80, 198, 124, 101, 227, 16, 239, 252, 173, 227, 109, 13, 84, 162, 126, 226, 46, 104, 213, 216, 221, 197, 16, 184, 59, 210, 8, 8, 189, 10, 223, 46, 225, 108, 147, 209, 148, 200, 232, 103, 229, 168, 111, 203, 135, 48, 230, 66, 59, 187, 111, 174, 8, 172, 180, 77, 27, 226, 16, 130, 22, 188, 16, 160, 101, 117, 247, 137, 7, 142, 35, 250, 223, 55, 98, 249, 176, 170, 98, 159, 165, 103, 195, 105, 147, 15, 102, 7, 38, 29, 194, 191, 176, 211, 6, 146, 85, 37, 245, 15, 45, 53, 25, 80, 218, 245, 185, 52, 209, 119, 207, 79, 4, 85, 59, 116, 104, 160, 11, 196, 242, 128, 203, 182, 221, 179, 124, 84, 227, 114, 15, 247, 40, 213, 115, 145, 43, 46, 247, 43, 236, 79, 207, 21, 161, 12, 255, 140, 64, 75, 147, 119, 121, 198, 93, 28, 214, 184, 183, 170, 0, 22, 62, 222, 2, 83, 139, 98, 145, 97, 49, 105, 7, 240, 73, 253, 250, 15, 118, 78, 219, 30, 173, 162, 75, 204, 23, 116, 203, 201, 110, 250, 160, 180, 66, 177, 134, 143, 186, 221, 251, 6, 197, 72, 82, 37, 102, 135, 139, 201, 129, 134, 32, 57, 215, 199, 127, 174, 99, 149, 190, 80, 102, 244, 202, 137, 26, 141, 166, 136, 176, 198, 8, 39, 86, 5, 245, 123, 89, 9, 193, 172, 190, 55, 239, 203, 109, 50, 26, 136, 233, 105, 48, 39, 126, 65, 39, 91, 18, 86, 111, 33, 162, 238, 86, 79, 16, 138, 191, 209, 108, 175, 41, 98, 183, 249, 194, 115, 36, 140, 185, 213, 204, 227, 221, 137, 145, 11, 84, 111, 45, 37, 189, 236, 43, 108, 200, 7, 189, 96, 83, 187, 237, 47, 91, 247, 76, 123, 70, 105, 2, 166, 26, 224, 148, 39, 184, 186, 237, 166, 197, 242, 172, 67, 244, 9, 95, 170, 83, 242, 181, 216, 102, 228, 164, 221, 65, 65, 123, 49, 198, 84, 30, 36, 128, 6, 79, 113, 254, 170, 199, 244, 33, 180, 137, 202, 144, 102, 16, 19, 81, 95, 32, 200, 185, 49, 135, 91, 95, 2, 12, 84, 15, 175, 59, 230, 253, 135, 251, 73, 68, 85, 222, 73, 148, 125, 94, 233, 104, 243, 244, 103, 194, 199, 228, 90, 11, 50, 234, 149, 174, 101, 46, 229, 187, 204, 157, 50, 195, 183, 174, 149, 102, 186, 18, 182, 150, 87, 216, 88, 188, 12, 60, 46, 189, 237, 112, 7, 154, 54, 181, 75, 232, 163, 108, 174, 216, 10, 159, 120, 237, 113, 70, 80, 140, 47, 125, 108, 65, 109, 14, 234, 138, 155, 240, 88, 65, 18, 188, 6, 188, 17, 8, 202, 71, 145, 215, 178, 176, 13, 39, 130, 231, 253, 14, 83, 179, 197, 246, 156, 119, 67, 212, 195, 153, 106, 118, 82, 194, 22, 64, 175, 181, 154, 52, 111, 12, 226, 152, 244, 0, 59, 116, 90, 34, 16, 213, 204, 44, 84, 79, 17, 160, 41, 251, 71, 52, 129, 39, 255, 90, 130, 150, 100, 232, 36, 221, 198, 145, 166, 58, 24, 35, 84, 141, 231, 220, 57, 64, 237, 107, 46, 151, 26, 206, 24, 103, 217, 75, 104, 91, 138, 153, 230, 119, 102, 130, 220, 156, 150, 137, 36, 184, 65, 63, 249, 144, 20, 147, 94, 56, 130, 5, 250, 6, 174, 154, 37, 216, 79, 98, 207, 58, 186, 70, 160, 67, 165, 116, 237, 206, 247, 127, 160, 205, 4, 93, 109, 85, 227, 200, 59, 242, 93, 122, 206, 251, 58, 33, 184, 222, 110, 67, 62, 125, 48, 87, 222, 226, 235, 186, 249, 162, 135, 10, 230, 66, 52, 163, 84, 58, 25, 76, 73, 138, 239, 95, 185, 244, 62, 136, 15, 239, 13, 169, 1, 229, 171, 63, 60, 106, 186, 224, 172, 65, 187, 111, 159, 9, 101, 206, 49, 151, 19, 79, 143, 26, 104, 104, 40, 85, 34, 22, 164, 68, 229, 139, 104, 212, 196, 193, 255, 209, 110, 130, 35, 88, 200, 79, 232, 51, 229, 208, 194, 65, 49, 77, 187, 39, 6, 21, 230, 55, 13, 17, 137, 50, 202, 16, 1, 222, 199, 178, 143, 22, 5, 171, 0, 86, 30, 116, 148, 38, 252, 154, 255, 51, 172, 201, 205, 114, 95, 104, 243, 19, 88, 234, 48, 77, 220, 10, 55, 99, 231, 26, 83, 19, 220, 24, 128, 196, 24, 137, 203, 56, 12, 218, 202, 81, 144, 151, 154, 224, 87, 137, 41, 37, 13, 214, 35, 3, 31, 126, 28, 79, 39, 64, 166, 132, 127, 168, 119, 239, 191, 95, 96, 119, 235, 116, 147, 218, 90, 19, 223, 52, 64, 39, 57, 193, 177, 193, 102, 43, 114, 40, 109, 159, 24, 182, 196, 47, 232, 23, 228, 98, 191, 244, 178, 109, 214, 234, 221, 141, 71, 95, 28, 71, 108, 169, 167, 202, 205, 10, 104, 208, 207, 92, 244, 118, 21, 158, 92, 22, 27, 100, 9, 242, 118, 136, 191, 86, 15, 253, 137, 153, 236, 222, 122, 71, 226, 163, 124, 186, 220, 250, 95, 125, 211, 44, 114, 181, 248, 201, 18, 102, 167, 32, 174, 229, 12, 19, 164, 216, 201, 253, 148, 90, 232, 232, 61, 177, 195, 128, 180, 1, 57, 161, 216, 203, 33, 99, 97, 225, 157, 53, 17, 136, 6, 157, 55, 82, 141, 45, 161, 94, 146, 252, 183, 156, 200, 193, 184, 23, 186, 186, 179, 22, 134, 10, 177, 80, 148, 91, 21, 19, 131, 3, 63, 251, 231, 20, 202, 165, 233, 192, 120, 79, 220, 104, 165, 23, 151, 251, 81, 254, 189, 195, 206, 101, 226, 196, 10, 66, 185, 171, 236, 179, 156, 158, 228, 146, 1, 26, 172, 50, 96, 162, 78, 172, 212, 255, 65, 247, 3, 21, 184, 65, 253, 178, 129, 97, 233, 218, 178, 251, 185, 243, 241, 76, 198, 103, 101, 23, 144, 161, 119, 218, 179, 88, 213, 251, 210, 111, 148, 29, 252, 71, 214, 59, 62, 104, 227, 120, 78, 208, 224, 194, 145, 7, 83, 253, 166, 233, 201, 142, 2, 245, 47, 89, 115, 198, 144, 126, 223, 202, 11, 104, 241, 105, 144, 167, 73, 35, 51, 248, 10, 31, 31, 27, 214, 170, 214, 66, 80, 63, 37, 14, 1, 17, 162, 156, 146, 204, 134, 110, 118, 243, 127, 6, 30, 175, 148, 71, 164, 178, 194, 149, 61, 114, 141, 18, 61, 225, 244, 156, 151, 216, 79, 24, 169, 231, 181, 209, 130, 251, 107, 174, 16, 11, 231, 160, 182, 73, 47, 138, 92, 71, 221, 142, 206, 185, 255, 176, 178, 13, 36, 82, 68, 123, 238, 72, 135, 158, 150, 74, 173, 29, 11, 151, 143, 198, 52, 28, 247, 253, 246, 229, 207, 230, 35, 191, 28, 81, 239, 107, 0, 104, 170, 152, 179, 176, 159, 228, 39, 206, 170, 87, 182, 221, 218, 56, 174, 233, 20, 193, 212, 229, 184, 45, 3, 18, 106, 188, 142, 124, 145, 173, 68, 44, 252, 0, 148, 156, 49, 53, 84, 30, 125, 248, 20, 89, 125, 5, 4, 243, 243, 194, 73, 1, 3, 37, 241, 91, 89, 152, 233, 54, 179, 94, 63, 84, 79, 251, 85, 242, 213, 148, 164, 192, 172, 29, 160, 221, 185, 26, 118, 52, 246, 231, 137, 202, 158, 69, 142, 129, 228, 249, 104, 171, 154, 215, 220, 212, 150, 74, 73, 152, 123, 253, 27, 190, 131, 43, 39, 180, 40, 53, 17, 217, 128, 144, 110, 150, 131, 167, 185, 80, 236, 10, 7, 137, 207, 62, 0, 119, 126, 105, 156, 154, 224, 188, 1, 247, 222, 238, 225, 223, 106, 144, 120, 6, 143, 179, 27, 62, 53, 56, 101, 216, 3, 157, 87, 47, 174, 12, 90, 171, 132, 30, 42, 171, 81, 223, 142, 85, 12, 246, 133, 149, 244, 20, 202, 250, 37, 248, 214, 155, 171, 238, 32, 10, 173, 233, 28, 4, 213, 225, 235, 93, 149, 49, 137, 217, 202, 84, 157, 96, 161, 246, 7, 135, 163, 132, 175, 100, 232, 104, 245, 20, 55, 205, 136, 4, 7, 179, 91, 46, 195, 160, 13, 141, 10, 223, 70, 112, 138, 169, 134, 99, 133, 92, 193, 116, 9, 83, 29, 180, 72, 131, 128, 235, 149, 60, 93, 185, 127, 55, 45, 238, 244, 218, 144, 28, 234, 180, 83, 127, 150, 243, 61, 87, 127, 55, 231, 232, 38, 243, 119, 65, 161, 124, 85, 231, 48, 206, 202, 165, 150, 146, 221, 21, 136, 222, 220, 31, 205, 159, 28, 102, 219, 44, 57, 163, 208, 226, 190, 150, 221, 50, 40, 243, 225, 185, 164, 139, 96, 138, 247, 197, 74, 136, 96, 206, 100, 140, 160, 61, 57, 150, 245, 191, 241, 20, 232, 21, 234, 123, 113, 46, 17, 137, 83, 24, 30, 247, 181, 152, 123, 170, 27, 74, 110, 78, 133, 38, 189, 118, 104, 99, 155, 249, 144, 73, 208, 235, 102, 255, 154, 10, 56, 23, 18, 7, 162, 194, 1, 173, 57, 135, 39, 233, 248, 42, 137, 62, 197, 63, 68, 2, 183, 59, 69, 131, 70, 127, 185, 132, 78, 122, 146, 18, 225, 41, 100, 133, 30, 49, 235, 7, 118, 116, 161, 14, 151, 248, 142, 19, 202, 88, 18, 31, 113, 33, 87, 108, 52, 71, 136, 244, 127, 172, 148, 151, 51, 102, 84, 186, 217, 40, 12, 89, 195, 227, 135, 190, 43, 15, 174, 207, 58, 107, 65, 30, 160, 216, 250, 128, 104, 171, 187, 161, 233, 219, 213, 43, 88, 192, 50, 125, 212, 44, 48, 15, 69, 59, 51, 39, 240, 201, 46, 24, 35, 210, 148, 141, 6, 124, 225, 251, 51, 40, 26, 4, 26, 113, 149, 79, 46, 26, 113, 102, 125, 89, 120, 210, 185, 184, 24, 211, 42, 71, 143, 26, 201, 244, 28, 103, 212, 34, 167, 155, 113, 26, 188, 227, 31, 166, 8, 40, 232, 157, 211, 241, 202, 163, 149, 217, 66, 69, 51, 74, 3, 119, 60, 78, 245, 221, 112, 114, 184, 29, 214, 112, 215, 103, 65, 129, 168, 87, 215, 241, 168, 22, 240, 134, 25, 184, 11, 54, 138, 6, 21, 140, 66, 43, 45, 33, 168, 252, 228, 28, 219, 4, 106, 209, 198, 243, 28, 61, 31, 243, 113, 205, 210, 250, 212, 92, 46, 237, 218, 111, 189, 249, 40, 69, 97, 101, 32, 104, 145, 127, 194, 195, 25, 73, 177, 164, 92, 164, 60, 128, 187, 209, 101, 33, 241, 148, 157, 12, 20, 6, 53, 13, 9, 53, 220, 218, 227, 165, 154, 109, 213, 212, 216, 172, 56, 86, 68, 140, 123, 232, 29, 246, 100, 211, 163, 107, 169, 17, 10, 67, 72, 135, 86, 88, 167, 206, 125, 149, 40, 227, 42, 134, 115, 238, 213, 227, 13, 220, 176, 172, 2, 187, 196, 18, 65, 236, 247, 0, 182, 149, 183, 5, 125, 93, 53, 81, 193, 66, 8, 192, 220, 179, 195, 168, 159, 2, 210, 45, 250, 106, 72, 82, 112, 2, 122, 31, 120, 159, 95, 55, 141, 97, 244, 53, 62, 44, 136, 154, 197, 36, 40, 132, 81, 156, 241, 139, 27, 95, 19, 141, 157, 106, 59, 227, 8, 78, 197, 25, 42, 93, 236, 127, 157, 102, 219, 156, 53, 187, 239, 8, 46, 64, 99, 219, 42, 238, 119, 94, 159, 181, 128, 192, 103, 97, 249, 42, 250, 96, 210, 9, 223, 36, 124, 114, 231, 235, 23, 189, 121, 48, 160, 125, 42, 15, 14, 51, 243, 51, 166, 74, 56, 141, 206, 90, 170, 234, 135, 129, 244, 250, 40, 236, 39, 91, 135, 211, 88, 34, 157, 179, 15, 75, 193, 202, 150, 199, 113, 178, 6, 221, 39, 147, 214, 243, 20, 175, 206, 130, 78, 152, 228, 218, 44, 0, 77, 252, 76, 194, 250, 94, 106, 252, 30, 183, 125, 52, 146, 204, 114, 80, 34, 203, 212, 86, 251, 55, 25, 64, 221, 117, 117, 152, 5, 185, 53, 1, 33, 109, 138, 80, 142, 28, 153, 177, 88, 229, 197, 18, 43, 128, 149, 219, 91, 216, 250, 224, 220, 66, 112, 109, 65, 203, 10, 194, 54, 64, 229, 93, 32, 73, 255, 113, 91, 0, 78, 224, 136, 151, 151, 185, 29, 200, 24, 250, 115, 15, 196, 171, 183, 155, 181, 73, 108, 82, 118, 208, 91, 117, 81, 198, 181, 106, 114, 92, 20, 254, 227, 56, 221, 251, 184, 83, 133, 162, 13, 213, 174, 199, 148, 46, 217, 144, 18, 70, 71, 69, 163, 174, 234, 44, 115, 163, 90, 115, 146, 155, 236, 4, 3, 62, 158, 38, 130, 120, 196, 76, 72, 137, 107, 155, 251, 242, 39, 77, 101, 164, 65, 100, 15, 51, 190, 1, 87, 162, 252, 94, 21, 17, 50, 9, 4, 95, 253, 31, 255, 201, 208, 0, 15, 46, 172, 19, 126, 131, 148, 76, 60, 237, 91, 228, 232, 173, 157, 91, 17, 99, 80, 247, 64, 219, 63, 221, 90, 202, 113, 145, 21, 234, 153, 196, 225, 215, 131, 124, 107, 134, 174, 198, 21, 123, 102, 63, 199, 26, 179, 23, 158, 246, 158, 8, 252, 213, 114, 168, 204, 153, 128, 137, 131, 203, 66, 58, 245, 172, 235, 56, 98, 98, 140, 117, 15, 150, 113, 93, 241, 248, 242, 85, 221, 42, 140, 218, 148, 131, 187, 45, 157, 217, 17, 188, 4, 69, 42, 226, 191, 82, 116, 254, 112, 43, 221, 255, 57, 209, 41, 148, 249, 35, 167, 7, 27, 78, 115, 20, 221, 59, 68, 167, 252, 25, 221, 214, 71, 38, 132, 75, 255, 200, 97, 25, 89, 178, 41, 116, 112, 217, 25, 139, 171, 197, 190, 172, 122, 76, 177, 142, 148, 215, 126, 210, 237, 26, 38, 137, 178, 158, 164, 239, 107, 153, 100, 62, 218, 232, 107, 68, 165, 92, 189, 117, 209, 191, 121, 72, 32, 159, 86, 205, 186, 105, 187, 226, 155, 8, 160, 16, 105, 122, 15, 187, 207, 186, 17, 32, 228, 219, 236, 151, 63, 39, 140, 198, 162, 179, 117, 93, 92, 0, 165, 131, 51, 28, 213, 129, 152, 46, 2, 47, 129, 3, 26, 23, 75, 164, 118, 234, 74, 154, 59, 136, 52, 80, 255, 180, 24, 21, 209, 7, 229, 89, 4, 36, 83, 6, 141, 40, 20, 13, 20, 149, 85, 170, 148, 74, 253, 9, 59, 131, 114, 250, 13, 18, 53, 14, 68, 202, 71, 241, 121, 207, 60, 59, 15, 176, 245, 225, 60, 140, 176, 236, 7, 104, 210, 108, 192, 24, 191, 77, 200, 37, 86, 35, 130, 157, 142, 185, 253, 241, 72, 237, 66, 33, 40, 221, 47, 178, 5, 35, 78, 46, 192, 97, 122, 210, 201, 176, 216, 91, 165, 157, 201, 144, 194, 155, 157, 242, 46, 159, 79, 253, 177, 177, 108, 35, 104, 89, 173, 211, 231, 167, 195, 49, 189, 166, 223, 48, 72, 79, 199, 173, 200, 181, 181, 33, 224, 203, 39, 168, 96, 42, 183, 102, 157, 90, 99, 82, 145, 252, 234, 99, 143, 33, 112, 114, 213, 234, 34, 249, 185, 146, 229, 244, 38, 66, 124, 201, 159, 130, 199, 5, 194, 177, 250, 72, 4, 13, 3, 115, 87, 65, 126, 215, 134, 254, 180, 150, 213, 244, 224, 136, 207, 0, 157, 198, 132, 63, 84, 234, 205, 61, 218, 105, 247, 55, 21, 230, 181, 18, 163, 196, 44, 51, 170, 228, 60, 88, 44, 135, 38, 16, 92, 155, 29, 244, 56, 82, 29, 211, 88, 2, 8, 237, 7, 153, 6, 33, 108, 205, 239, 48, 228, 145, 108, 110, 33, 18, 157, 53, 22, 251, 134, 225, 129, 150, 25, 212, 169, 170, 59, 21, 61, 49, 78, 175, 87, 39, 59, 133, 93, 222, 191, 151, 60, 128, 219, 34, 252, 172, 187, 213, 129, 175, 82, 77, 160, 109, 240, 246, 210, 118, 229, 186, 16, 52, 56, 135, 54, 228, 125, 47, 197, 184, 78, 59, 77, 72, 148, 17, 134, 193, 122, 129, 118, 122, 135, 85, 153, 196, 2, 203, 230, 243, 54, 74, 186, 20, 170, 132, 131, 109, 47, 74, 72, 49, 154, 142, 66, 207, 79, 7, 134, 214, 179, 114, 235, 124, 45, 134, 104, 111, 84, 210, 162, 0, 241, 19, 220, 121, 115, 110, 98, 28, 65, 177, 113, 25, 214, 127, 5, 153, 93, 11, 11, 40, 232, 190, 12, 114, 219, 179, 9, 49, 128, 59, 14, 232, 66, 84, 92, 106, 21, 38, 140, 252, 156, 121, 121, 156, 164, 231, 60, 32, 97, 152, 103, 209, 66, 66, 114, 222, 59, 119, 59, 64, 145, 171, 233, 52, 130, 2, 211, 56, 87, 237, 166, 241, 122, 69, 238, 37, 158, 245, 9, 100, 81, 147, 21, 184, 21, 180, 175, 20, 95, 211, 98, 220, 225, 100, 11, 113, 206, 117, 176, 188, 28, 15, 117, 239, 93, 80, 128, 203, 103, 160, 134, 244, 3, 26, 155, 251, 221, 155, 43, 215, 120, 240, 99, 117, 175, 41, 219, 111, 106, 212, 74, 216, 58, 17, 62, 194, 18, 177, 54, 48, 63, 242, 66, 203, 110, 167, 91, 199, 43, 183, 161, 114, 80, 164, 157, 23, 147, 9, 36, 77, 89, 170, 187, 11, 130, 113, 120, 226, 132, 126, 137, 126, 163, 66, 211, 141, 180, 93, 208, 46, 98, 157, 195, 123, 213, 77, 75, 20, 238, 198, 219, 249, 236, 116, 80, 25, 79, 13, 116, 41, 119, 242, 62, 86, 184, 26, 46, 124, 196, 181, 155, 57, 187, 112, 243, 19, 62, 225, 90, 113, 119, 87, 91, 138, 101, 193, 137, 136, 30, 145, 93, 74, 132, 214, 62, 204, 50, 200, 13, 24, 99, 50, 192, 181, 208, 110, 181, 208, 248, 43, 232, 96, 142, 25, 184, 148, 189, 199, 222, 144, 177, 63, 31, 197, 13, 20, 71, 72, 208, 145, 149, 222, 28, 134, 89, 142, 218, 65, 178, 96, 73, 123, 187, 154, 45, 133, 127, 155, 154, 33, 85, 134, 232, 191, 241, 214, 3, 241, 59, 170, 253, 241, 52, 82, 208, 189, 62, 38, 144, 22, 174, 49, 109, 211, 247, 60, 135, 235, 41, 74, 86, 226, 90, 19, 228, 9, 226, 100, 227, 109, 135, 177, 68, 85, 18, 161, 124, 184, 132, 55, 104, 238, 59, 198, 9, 202, 158, 222, 17, 218, 162, 69, 48, 127, 83, 60, 87, 151, 153, 59, 23, 35, 167, 250, 12, 0, 141, 8, 231, 11, 245, 177, 182, 185, 187, 133, 241, 6, 186, 163, 1, 17, 185, 175, 75, 124, 106, 94, 120, 100, 155, 209, 12, 229, 141, 172, 122, 107, 118, 207, 76, 205, 119, 140, 118, 210, 144, 43, 230, 188, 232, 225, 106, 169, 88, 70, 13, 220, 50, 53, 248, 67, 19, 83, 51, 218, 53, 45, 104, 110, 7, 90, 243, 204], - [232, 136, 223, 93, 58, 133, 184, 85, 2, 171, 171, 222, 198, 168, 67, 156, 2, 13, 118, 74, 222, 252, 116, 203, 105, 218, 27, 42, 166, 213, 241, 182, 112, 96, 246, 112, 217, 22, 181, 135, 111, 190, 142, 166, 118, 97, 190, 83, 3, 157, 173, 92, 31, 190, 89, 218, 91, 142, 120, 129, 210, 201, 10, 154, 10, 25, 168, 65, 86, 213, 204, 21, 100, 115, 81, 163, 28, 135, 79, 62, 158, 106, 153, 113, 87, 118, 167, 41, 105, 131, 111, 190, 22, 101, 61, 71, 43, 99, 155, 192, 7, 108, 191, 190, 150, 217, 14, 204, 226, 164, 185, 123, 62, 242, 61, 155, 241, 136, 63, 5, 4, 130, 53, 1, 203, 89, 106, 114, 235, 60, 128, 233, 178, 67, 232, 17, 101, 160, 133, 99, 32, 125, 235, 65, 255, 168, 30, 244, 25, 125, 59, 34, 14, 109, 219, 76, 169, 222, 184, 112, 41, 218, 88, 139, 68, 161, 43, 130, 92, 76, 162, 147, 149, 155, 225, 36, 157, 42, 114, 117, 43, 217, 186, 209, 212, 87, 87, 188, 230, 69, 2, 51, 42, 38, 40, 195, 94, 199, 214, 170, 151, 23, 32, 203, 55, 174, 30, 232, 6, 112, 241, 90, 128, 128, 182, 39, 210, 221, 116, 59, 140, 188, 167, 109, 60, 96, 250, 148, 187, 114, 231, 0, 167, 193, 16, 255, 176, 36, 158, 202, 92, 109, 225, 210, 239, 69, 0, 181, 74, 219, 78, 23, 176, 172, 151, 201, 41, 179, 134, 74, 85, 60, 239, 3, 137, 222, 18, 75, 153, 120, 210, 190, 54, 17, 86, 77, 184, 69, 94, 216, 90, 10, 52, 174, 179, 217, 122, 85, 128, 73, 231, 81, 194, 139, 60, 60, 249, 77, 23, 49, 143, 74, 180, 215, 110, 121, 231, 48, 86, 78, 145, 205, 157, 100, 137, 253, 25, 233, 149, 179, 206, 41, 145, 25, 245, 109, 72, 42, 233, 203, 121, 50, 220, 180, 81, 23, 110, 244, 10, 161, 24, 102, 103, 107, 231, 107, 29, 96, 173, 19, 182, 106, 114, 41, 186, 20, 241, 206, 53, 227, 23, 51, 245, 113, 123, 39, 246, 147, 170, 222, 182, 120, 246, 87, 50, 127, 173, 50, 191, 99, 32, 138, 119, 30, 10, 207, 144, 83, 6, 19, 5, 91, 86, 231, 171, 67, 251, 253, 196, 97, 64, 66, 186, 244, 39, 79, 172, 161, 91, 208, 11, 254, 4, 182, 223, 110, 102, 85, 162, 162, 8, 121, 254, 0, 133, 72, 51, 188, 53, 99, 48, 121, 152, 239, 123, 52, 241, 228, 178, 201, 144, 59, 33, 252, 175, 203, 115, 192, 219, 121, 128, 41, 12, 35, 102, 15, 193, 102, 137, 3, 105, 205, 143, 184, 37, 14, 67, 65, 18, 77, 65, 172, 115, 147, 72, 104, 20, 252, 231, 63, 99, 79, 180, 243, 149, 8, 174, 78, 38, 220, 185, 171, 247, 28, 241, 37, 121, 170, 248, 116, 55, 3, 34, 39, 133, 156, 36, 10, 204, 121, 208, 101, 108, 66, 57, 208, 194, 231, 55, 163, 115, 0, 14, 106, 93, 224, 48, 236, 80, 0, 190, 246, 64, 59, 232, 253, 48, 189, 168, 107, 110, 13, 149, 99, 199, 7, 79, 172, 140, 101, 55, 83, 33, 28, 255, 210, 143, 188, 159, 201, 64, 75, 124, 80, 144, 224, 1, 137, 168, 158, 80, 223, 254, 15, 37, 146, 128, 235, 42, 149, 227, 34, 149, 224, 91, 47, 15, 134, 103, 179, 47, 41, 227, 221, 124, 77, 234, 27, 134, 140, 245, 48, 80, 217, 183, 171, 157, 100, 63, 10, 120, 106, 254, 229, 73, 132, 226, 88, 167, 99, 167, 45, 137, 90, 83, 174, 27, 250, 202, 100, 177, 189, 13, 158, 74, 191, 123, 170, 238, 95, 13, 45, 16, 93, 56, 96, 151, 42, 41, 107, 45, 1, 160, 165, 175, 33, 253, 210, 239, 242, 84, 172, 171, 213, 70, 47, 84, 162, 46, 125, 92, 200, 234, 113, 96, 93, 0, 202, 106, 212, 171, 206, 153, 64, 143, 187, 73, 93, 63, 217, 110, 115, 132, 132, 93, 159, 30, 23, 106, 185, 189, 215, 217, 218, 203, 161, 38, 91, 38, 180, 90, 27, 88, 16, 82, 223, 188, 16, 57, 201, 158, 147, 223, 66, 140, 8, 204, 162, 215, 123, 114, 178, 216, 3, 50, 39, 240, 179, 27, 12, 235, 84, 51, 121, 190, 60, 146, 106, 167, 152, 82, 56, 45, 193, 176, 51, 78, 106, 30, 164, 82, 30, 89, 88, 115, 119, 114, 235, 132, 34, 172, 195, 214, 223, 96, 31, 167, 248, 119, 68, 103, 215, 181, 221, 253, 255, 112, 247, 249, 14, 156, 70, 45, 249, 12, 2, 19, 176, 46, 11, 32, 30, 178, 231, 65, 252, 186, 233, 27, 219, 180, 230, 197, 39, 161, 28, 253, 199, 252, 162, 227, 81, 233, 38, 54, 133, 172, 128, 208, 31, 140, 108, 241, 101, 37, 227, 48, 194, 154, 174, 149, 74, 101, 17, 65, 53, 33, 148, 217, 177, 59, 142, 61, 157, 41, 42, 85, 162, 222, 147, 166, 227, 254, 204, 35, 17, 89, 54, 23, 159, 252, 131, 89, 201, 75, 205, 6, 232, 198, 50, 22, 6, 123, 79, 56, 58, 219, 238, 10, 107, 50, 235, 210, 3, 13, 53, 99, 94, 2, 241, 212, 178, 204, 50, 115, 74, 234, 234, 245, 190, 52, 254, 192, 37, 15, 140, 176, 96, 230, 86, 121, 211, 232, 247, 107, 190, 38, 159, 72, 51, 161, 148, 166, 198, 76, 11, 86, 146, 134, 163, 66, 65, 2, 189, 154, 0, 128, 177, 223, 67, 24, 106, 140, 78, 253, 34, 253, 232, 85, 73, 248, 45, 189, 249, 30, 128, 20, 181, 137, 141, 33, 222, 84, 243, 22, 35, 72, 15, 20, 193, 50, 207, 210, 246, 184, 182, 216, 241, 173, 148, 114, 31, 198, 187, 9, 201, 225, 60, 178, 71, 181, 164, 100, 59, 0, 57, 222, 245, 59, 154, 230, 165, 196, 189, 14, 89, 13, 90, 217, 48, 124, 62, 57, 222, 133, 46, 189, 39, 103, 69, 171, 58, 17, 38, 49, 208, 69, 206, 249, 135, 234, 160, 70, 10, 224, 116, 161, 74, 216, 191, 40, 210, 142, 239, 163, 124, 43, 212, 3, 44, 151, 232, 222, 181, 201, 130, 239, 13, 117, 225, 169, 186, 243, 217, 6, 97, 38, 72, 92, 7, 176, 134, 163, 40, 210, 47, 139, 10, 96, 80, 159, 144, 18, 181, 115, 28, 185, 148, 241, 151, 96, 125, 65, 213, 213, 252, 78, 192, 228, 177, 24, 210, 185, 220, 191, 157, 253, 225, 158, 129, 195, 160, 105, 254, 186, 136, 109, 63, 165, 160, 36, 3, 152, 145, 102, 213, 25, 129, 9, 79, 199, 76, 115, 164, 92, 136, 123, 200, 7, 239, 61, 88, 73, 171, 48, 188, 195, 244, 54, 133, 146, 179, 189, 115, 29, 15, 186, 95, 135, 67, 49, 57, 242, 185, 230, 91, 23, 113, 203, 192, 31, 20, 143, 21, 9, 65, 211, 195, 70, 30, 146, 252, 102, 166, 240, 192, 157, 12, 131, 143, 165, 9, 90, 144, 239, 40, 8, 156, 201, 73, 208, 126, 113, 151, 127, 161, 254, 156, 137, 168, 101, 123, 40, 129, 57, 183, 231, 187, 127, 31, 127, 229, 29, 129, 254, 229, 10, 152, 181, 206, 4, 127, 234, 239, 94, 96, 225, 35, 210, 145, 11, 47, 56, 67, 249, 6, 50, 127, 105, 159, 176, 236, 175, 150, 33, 204, 58, 49, 184, 66, 12, 102, 61, 101, 121, 71, 200, 152, 30, 125, 97, 92, 255, 234, 223, 145, 126, 203, 44, 147, 214, 86, 223, 54, 82, 130, 30, 52, 251, 69, 98, 22, 137, 20, 21, 121, 89, 146, 165, 67, 64, 149, 105, 87, 137, 105, 54, 37, 29, 35, 29, 73, 100, 240, 47, 119, 244, 156, 105, 49, 88, 123, 165, 82, 169, 19, 98, 211, 83, 44, 163, 104, 80, 157, 2, 195, 187, 103, 48, 158, 244, 5, 219, 29, 132, 249, 82, 223, 29, 70, 163, 113, 217, 185, 244, 18, 18, 118, 93, 156, 43, 177, 205, 99, 56, 24, 28, 72, 79, 168, 254, 107, 121, 142, 139, 111, 201, 105, 28, 133, 140, 194, 198, 162, 143, 56, 34, 183, 24, 52, 209, 46, 102, 8, 18, 120, 217, 121, 247, 3, 53, 13, 198, 15, 93, 234, 13, 136, 119, 172, 223, 5, 31, 243, 43, 105, 208, 157, 138, 44, 248, 195, 166, 192, 25, 51, 249, 4, 183, 62, 161, 153, 238, 0, 173, 91, 154, 47, 64, 33, 197, 49, 67, 32, 104, 231, 10, 92, 77, 150, 106, 221, 123, 215, 108, 116, 109, 191, 178, 245, 78, 94, 110, 68, 23, 171, 70, 148, 211, 133, 13, 243, 156, 66, 215, 129, 125, 121, 189, 127, 227, 29, 31, 55, 34, 169, 184, 36, 199, 37, 253, 134, 109, 145, 124, 111, 95, 144, 91, 126, 232, 116, 139, 132, 136, 14, 190, 34, 251, 73, 126, 148, 249, 216, 5, 82, 96, 95, 29, 172, 112, 245, 166, 5, 86, 34, 10, 199, 122, 238, 94, 241, 104, 145, 2, 182, 106, 241, 133, 82, 5, 146, 73, 48, 80, 111, 124, 78, 103, 87, 79, 216, 173, 64, 63, 135, 69, 111, 61, 29, 184, 244, 102, 49, 74, 118, 46, 81, 161, 219, 119, 96, 158, 156, 54, 75, 76, 228, 53, 191, 182, 134, 217, 102, 155, 102, 194, 235, 3, 41, 102, 35, 82, 112, 18, 215, 192, 22, 102, 8, 17, 161, 175, 127, 88, 122, 153, 234, 167, 52, 187, 64, 66, 42, 91, 133, 217, 162, 35, 229, 154, 91, 205, 123, 216, 233, 101, 145, 206, 151, 133, 59, 248, 177, 216, 249, 72, 13, 161, 139, 32, 87, 151, 39, 162, 146, 204, 182, 169, 218, 241, 95, 26, 201, 172, 0, 223, 244, 245, 107, 156, 62, 236, 153, 247, 241, 50, 156, 6, 130, 131, 251, 46, 35, 63, 205, 114, 23, 219, 106, 227, 214, 73, 49, 194, 244, 90, 253, 231, 135, 172, 239, 195, 67, 209, 95, 135, 80, 104, 18, 207, 251, 178, 94, 38, 4, 74, 229, 94, 142, 75, 183, 69, 161, 177, 3, 178, 189, 103, 202, 232, 184, 94, 178, 192, 228, 144, 185, 124, 161, 164, 20, 105, 71, 4, 229, 40, 13, 224, 224, 196, 117, 155, 167, 93, 242, 57, 62, 25, 126, 218, 133, 69, 50, 180, 5, 104, 6, 86, 99, 224, 89, 171, 56, 70, 38, 139, 108, 102, 61, 87, 20, 163, 224, 228, 12, 198, 79, 85, 139, 0, 183, 245, 220, 85, 208, 248, 183, 22, 179, 245, 118, 149, 61, 70, 35, 132, 46, 220, 251, 165, 129, 206, 70, 29, 131, 45, 58, 11, 0, 33, 210, 227, 172, 64, 57, 77, 165, 200, 220, 80, 255, 134, 20, 151, 76, 111, 135, 90, 200, 118, 53, 216, 117, 84, 135, 44, 12, 142, 75, 190, 71, 95, 155, 36, 121, 190, 207, 46, 125, 186, 225, 209, 18, 224, 122, 100, 207, 152, 50, 119, 228, 169, 183, 161, 24, 18, 21, 243, 25, 0, 146, 63, 139, 25, 174, 245, 249, 236, 59, 224, 31, 200, 245, 252, 86, 48, 230, 61, 106, 27, 232, 234, 42, 106, 52, 55, 152, 200, 0, 163, 2, 4, 130, 24, 24, 117, 26, 233, 101, 53, 227, 231, 232, 5, 103, 174, 56, 139, 175, 93, 218, 230, 161, 176, 176, 94, 228, 21, 226, 124, 50, 94, 222, 125, 49, 243, 0, 15, 50, 92, 189, 42, 188, 39, 55, 230, 118, 182, 29, 160, 120, 250, 115, 208, 187, 38, 38, 172, 174, 216, 245, 4, 170, 231, 155, 217, 227, 17, 10, 27, 120, 39, 184, 213, 122, 47, 58, 114, 232, 100, 170, 2, 235, 149, 113, 188, 0, 112, 79, 63, 203, 24, 226, 108, 210, 62, 238, 97, 96, 232, 47, 219, 149, 111, 75, 210, 212, 38, 82, 241, 251, 104, 80, 254, 141, 235, 136, 125, 247, 87, 185, 184, 70, 135, 138, 130, 45, 233, 120, 113, 22, 75, 159, 195, 22, 212, 155, 95, 208, 55, 19, 140, 206, 112, 170, 128, 243, 180, 60, 230, 5, 214, 45, 187, 108, 152, 148, 83, 19, 206, 30, 132, 47, 62, 48, 3, 207, 74, 230, 194, 186, 37, 57, 196, 153, 17, 89, 115, 113, 93, 116, 22, 151, 16, 153, 131, 156, 115, 200, 58, 10, 217, 206, 64, 3, 1, 210, 81, 185, 227, 54, 142, 93, 37, 17, 50, 252, 206, 55, 34, 27, 56, 172, 134, 82, 121, 124, 188, 152, 177, 218, 5, 208, 9, 157, 124, 56, 62, 173, 213, 60, 140, 200, 132, 33, 125, 37, 222, 30, 93, 215, 85, 120, 178, 239, 56, 41, 240, 68, 50, 246, 112, 253, 186, 31, 211, 246, 42, 44, 211, 243, 23, 1, 29, 78, 245, 14, 161, 80, 21, 154, 23, 134, 162, 20, 237, 201, 64, 172, 172, 150, 91, 235, 12, 219, 16, 225, 116, 217, 75, 175, 25, 210, 118, 42, 92, 186, 241, 154, 120, 53, 69, 47, 155, 38, 169, 122, 255, 201, 142, 41, 36, 242, 64, 221, 50, 15, 120, 30, 194, 76, 117, 164, 207, 156, 38, 120, 248, 72, 125, 135, 58, 149, 82, 230, 235, 58, 220, 1, 189, 151, 173, 123, 184, 106, 192, 62, 218, 1, 7, 75, 44, 153, 255, 151, 158, 14, 21, 73, 74, 235, 236, 202, 195, 130, 146, 19, 177, 198, 160, 194, 75, 205, 139, 213, 220, 78, 139, 10, 218, 180, 228, 91, 191, 123, 215, 28, 84, 66, 239, 153, 124, 221, 192, 160, 137, 36, 243, 199, 91, 93, 206, 196, 73, 63, 59, 146, 195, 142, 232, 166, 139, 61, 82, 94, 187, 93, 155, 228, 245, 136, 249, 57, 58, 3, 222, 108, 51, 248, 187, 96, 182, 216, 254, 106, 74, 228, 121, 11, 243, 214, 11, 35, 87, 65, 91, 137, 10, 143, 156, 254, 171, 117, 90, 25, 58, 117, 13, 153, 11, 121, 244, 73, 236, 91, 223, 2, 123, 124, 0, 22, 239, 78, 220, 132, 157, 232, 206, 209, 159, 50, 12, 108, 47, 15, 249, 236, 217, 127, 180, 178, 36, 109, 57, 35, 64, 95, 56, 11, 191, 22, 121, 115, 20, 158, 147, 122, 20, 76, 246, 134, 20, 60, 70, 47, 10, 44, 13, 177, 202, 51, 159, 52, 244, 26, 81, 133, 237, 124, 202, 59, 227, 248, 190, 112, 87, 224, 17, 13, 30, 221, 229, 166, 136, 181, 132, 247, 97, 179, 151, 47, 215, 187, 226, 172, 82, 43, 47, 61, 182, 2, 115, 175, 41, 162, 15, 170, 246, 166, 147, 6, 226, 233, 180, 159, 68, 29, 26, 118, 237, 100, 243, 46, 154, 96, 21, 29, 32, 60, 105, 171, 106, 145, 46, 184, 216, 225, 242, 10, 160, 68, 211, 200, 25, 15, 110, 59, 233, 34, 156, 161, 241, 122, 197, 253, 101, 202, 92, 73, 64, 158, 120, 75, 41, 86, 114, 252, 89, 6, 4, 195, 180, 184, 44, 226, 231, 176, 214, 77, 140, 51, 194, 251, 227, 43, 205, 129, 108, 150, 119, 77, 160, 118, 32, 60, 121, 243, 28, 184, 86, 157, 13, 65, 169, 132, 67, 12, 235, 15, 131, 74, 42, 22, 220, 64, 220, 156, 111, 148, 25, 115, 211, 126, 92, 70, 199, 14, 64, 106, 175, 62, 250, 236, 131, 17, 161, 140, 182, 218, 86, 236, 11, 91, 45, 133, 33, 179, 227, 187, 180, 73, 136, 228, 237, 37, 180, 8, 57, 119, 43, 132, 161, 233, 251, 218, 220, 39, 68, 156, 229, 177, 85, 43, 74, 74, 50, 50, 145, 118, 228, 82, 94, 131, 62, 177, 48, 136, 123, 190, 189, 93, 252, 87, 150, 207, 102, 187, 31, 180, 242, 214, 139, 199, 176, 143, 126, 87, 67, 48, 149, 100, 60, 162, 214, 148, 94, 7, 212, 191, 199, 246, 53, 159, 190, 89, 38, 250, 80, 207, 246, 190, 191, 105, 200, 198, 96, 1, 131, 85, 175, 48, 96, 26, 95, 182, 147, 125, 37, 17, 126, 77, 30, 32, 119, 139, 97, 250, 238, 119, 132, 134, 133, 109, 175, 174, 228, 20, 201, 41, 190, 47, 204, 68, 34, 27, 243, 55, 199, 255, 160, 46, 191, 100, 45, 95, 244, 103, 218, 35, 51, 11, 7, 236, 161, 106, 72, 240, 215, 241, 187, 206, 58, 79, 96, 73, 50, 177, 128, 19, 74, 89, 84, 200, 145, 141, 157, 87, 41, 238, 49, 3, 132, 71, 71, 34, 94, 30, 185, 194, 47, 198, 157, 167, 148, 142, 100, 51, 3, 103, 238, 235, 111, 192, 211, 53, 39, 21, 44, 162, 180, 201, 215, 10, 56, 28, 125, 76, 187, 255, 153, 56, 120, 54, 85, 198, 243, 57, 253, 77, 113, 210, 99, 225, 246, 193, 102, 167, 230, 36, 208, 202, 237, 43, 244, 161, 57, 250, 197, 196, 227, 232, 53, 88, 86, 252, 140, 143, 183, 214, 26, 167, 148, 21, 226, 168, 235, 223, 83, 51, 244, 65, 246, 156, 128, 81, 66, 100, 47, 62, 165, 161, 60, 186, 148, 96, 199, 92, 142, 75, 175, 41, 74, 172, 211, 57, 232, 64, 242, 233, 9, 147, 72, 62, 1, 95, 245, 227, 137, 204, 226, 251, 95, 150, 112, 2, 135, 65, 130, 125, 197, 121, 14, 43, 135, 19, 79, 69, 2, 190, 83, 54, 173, 68, 236, 139, 55, 239, 16, 205, 93, 246, 155, 28, 136, 146, 74, 238, 134, 21, 80, 234, 26, 214, 102, 202, 132, 102, 161, 255, 234, 185, 183, 123, 165, 37, 216, 140, 6, 101, 223, 161, 176, 196, 12, 78, 216, 44, 90, 9, 34, 196, 107, 15, 236, 123, 48, 88, 127, 137, 169, 151, 83, 249, 206, 158, 241, 199, 63, 93, 91, 228, 48, 203, 69, 185, 111, 120, 211, 75, 91, 138, 112, 243, 49, 144, 71, 183, 34, 80, 242, 209, 45, 224, 195, 141, 104, 22, 177, 203, 235, 250, 82, 203, 140, 200, 117, 214, 109, 77, 41, 226, 59, 71, 200, 50, 208, 56, 112, 239, 115, 226, 200, 7, 234, 181, 40, 201, 38, 197, 187, 123, 92, 100, 169, 129, 169, 56, 126, 26, 165, 61, 192, 189, 196, 76, 163, 85, 248, 155, 169, 158, 139, 82, 183, 253, 246, 233, 63, 206, 24, 70, 85, 136, 137, 170, 60, 135, 172, 85, 91, 149, 220, 113, 49, 193, 169, 220, 219, 230, 18, 217, 51, 131, 19, 200, 101, 195, 53, 55, 163, 116, 41, 246, 220, 14, 13, 32, 127, 3, 33, 198, 32, 31, 166, 137, 251, 131, 202, 143, 79, 142, 249, 45, 197, 128, 181, 112, 98, 148, 252, 144, 191, 39, 9, 215, 210, 37, 7, 226, 183, 110, 152, 13, 255, 217, 42, 252, 107, 166, 66, 244, 49, 173, 220, 34, 212, 30, 29, 56, 48, 53, 57, 25, 221, 65, 208, 82, 186, 205, 156, 111, 51, 233, 209, 13, 111, 207, 121, 223, 213, 244, 224, 66, 67, 21, 87, 246, 147, 236, 235, 123, 21, 154, 131, 232, 48, 245, 163, 66, 101, 246, 30, 195, 139, 211, 160, 55, 216, 236, 64, 112, 81, 15, 28, 229, 22, 90, 242, 191, 125, 130, 61, 161, 28, 135, 207, 81, 66, 210, 164, 163, 133, 236, 177, 110, 36, 18, 186, 230, 29, 102, 219, 159, 29, 57, 51, 1, 200, 13, 161, 221, 105, 47, 192, 221, 12, 241, 13, 120, 140, 18, 134, 233, 153, 172, 109, 26, 59, 112, 231, 108, 201, 13, 219, 211, 165, 241, 167, 213, 97, 17, 20, 142, 174, 236, 80, 47, 24, 37, 231, 54, 155, 177, 45, 160, 149, 137, 37, 199, 31, 45, 152, 157, 46, 107, 9, 220, 244, 229, 10, 83, 115, 50, 136, 152, 234, 217, 63, 161, 78, 141, 190, 144, 70, 206, 62, 80, 100, 207, 47, 137, 163, 127, 214, 89, 57, 102, 37, 186, 213, 111, 216, 80, 93, 17, 100, 220, 85, 249, 137, 120, 115, 54, 18, 75, 152, 37, 92, 214, 209, 168, 227, 218, 231, 145, 248, 27, 242, 46, 241, 112, 230, 121, 130, 139, 39, 85, 178, 234, 225, 163, 174, 184, 45, 199, 63, 22, 22, 202, 182, 16, 144, 27, 213, 243, 70, 231, 198, 119, 9, 27, 160, 168, 179, 184, 122, 214, 248, 238, 19, 142, 143, 226, 106, 50, 240, 250, 122, 5, 9, 255, 167, 3, 58, 192, 225, 60, 104, 45, 175, 161, 100, 49, 111, 191, 96, 98, 168, 197, 8, 92, 78, 222, 114, 255, 144, 6, 58, 46, 224, 218, 106, 167, 184, 108, 77, 12, 111, 70, 187, 187, 250, 250, 124, 63, 25, 95, 176, 172, 190, 77, 168, 236, 234, 210, 72, 182, 122, 3, 41, 31, 225, 252, 91, 156, 222, 235, 7, 130, 16, 72, 149, 63, 29, 55, 30, 23, 202, 163, 80, 25, 78, 203, 63, 255, 206, 91, 66, 229, 220, 28, 153, 138, 169, 78, 197, 250, 208, 32, 43, 177, 152, 211, 223, 52, 197, 91, 145, 93, 244, 110, 207, 167, 19, 30, 198, 185, 206, 239, 145, 3, 170, 72, 226, 49, 230, 31, 7, 88, 253, 44, 172, 122, 62, 14, 116, 229, 74, 167, 115, 134, 33, 231, 168, 183, 101, 15, 196, 214, 142, 90, 71, 107, 166, 74, 231, 69, 38, 13, 17, 53, 52, 4, 151, 235, 123, 114, 99, 228, 6, 241, 31, 70, 141, 148, 242, 134, 197, 239, 35, 175, 242, 29, 82, 55, 148, 232, 131, 155, 174, 61, 190, 234, 245, 175, 218, 235, 27, 231, 106, 205, 208, 228, 236, 132, 94, 103, 178, 235, 94, 29, 129, 55, 203, 42, 155, 244, 188, 158, 120, 56, 156, 68, 105, 137, 65, 161, 182, 108, 240, 159, 3, 154, 110, 52, 106, 153, 10, 80, 191, 60, 187, 146, 71, 230, 32, 50, 67, 255, 248, 158, 92, 249, 87, 11, 245, 211, 89, 231, 67, 108, 172, 203, 111, 76, 218, 238, 105, 206, 73, 171, 16, 157, 187, 164, 41, 23, 91, 157, 114, 137, 213, 168, 198, 194, 113, 132, 126, 10, 95, 73, 108, 181, 136, 120, 81, 34, 22, 202, 239, 119, 99, 161, 58, 86, 10, 127, 204, 255, 145, 199, 226, 102, 238, 249, 168, 161, 7, 148, 204, 194, 179, 225, 190, 232, 89, 229, 131, 11, 229, 11, 122, 246, 242, 227, 2, 91, 166, 238, 18, 220, 203, 109, 254, 254, 96, 130, 143, 94, 182, 211, 73, 51, 222, 60, 108, 161, 101, 152, 9, 133, 28, 181, 34, 202, 247, 193, 253, 232, 69, 136, 54, 171, 65, 46, 148, 33, 238, 46, 229, 30, 161, 172, 72, 23, 246, 89, 140, 239, 137, 37, 124, 243, 245, 68, 252, 236, 47, 214, 254, 242, 52, 73, 208, 34, 149, 130, 138, 6, 91, 215, 166, 63, 138, 243, 0, 130, 218, 181, 248, 235, 251, 22, 197, 175, 242, 169, 193, 65, 238, 154, 220, 103, 26, 65, 16, 31, 61, 8, 59, 78, 189, 132, 154, 99, 63, 33, 81, 227, 106, 159, 1, 203, 180, 71, 32, 219, 187, 194, 252, 122, 1, 233, 35, 213, 2, 255, 8, 140, 213, 98, 159, 29, 136, 8, 68, 171, 155, 27, 136, 162, 153, 101, 58, 155, 45, 151, 41, 165, 112, 251, 94, 180, 127, 51, 49, 51, 249, 173, 82, 226, 98, 218, 235, 85, 92, 119, 156, 156, 167, 230, 198, 241, 238, 36, 210, 208, 168, 192, 137, 149, 140, 245, 73, 197, 197, 146, 13, 42, 91, 246, 9, 121, 65, 20, 143, 116, 165, 81, 149, 84, 193, 109, 20, 190, 235, 12, 244, 25, 212, 156, 23, 149, 218, 183, 18, 114, 86, 139, 142, 48, 30, 223, 91, 78, 8, 151, 125, 126, 217, 166, 169, 121, 111, 229, 47, 163, 96, 3, 200, 50, 168, 36, 31, 192, 69, 40, 191, 91, 55, 197, 50, 111, 126, 117, 226, 213, 215, 191, 169, 154, 126, 151, 30, 33, 45, 109, 246, 1, 233, 118, 210, 242, 202, 141, 38, 84, 207, 193, 214, 219, 193, 221, 14, 224, 41, 209, 35, 171, 230, 65, 179, 66, 61, 175, 92, 231, 35, 158, 214, 42, 244, 146, 220, 87, 106, 22, 148, 106, 77, 38, 11, 186, 224, 136, 56, 89, 246, 19, 203, 95, 35, 166, 206, 124, 151, 244, 80, 16, 81, 176, 181, 49, 102, 138, 87, 82, 14, 199, 45, 138, 142, 184, 21, 197, 134, 47, 209, 102, 163, 140, 96, 126, 18, 205, 137, 54, 18, 3, 247, 116, 6, 142, 202, 206, 232, 39, 145, 164, 95, 196, 200, 220, 152, 123, 199, 45, 151, 132, 36, 126, 241, 78, 92, 71, 124, 106, 149, 169, 212, 186, 163, 33, 75, 102, 117, 129, 220, 122, 113, 200, 146, 185, 204, 106, 96, 29, 234, 193, 56, 149, 67, 31, 234, 213, 3, 182, 15, 237, 208, 3, 115, 166, 132, 117, 74, 155, 190, 84, 130, 74, 204, 140, 23, 61, 57, 165, 116, 244, 209, 93, 222, 177, 118, 187, 121, 232, 153, 96, 8, 123, 116, 118, 67, 238, 192, 93, 3, 186, 18, 110, 208, 97, 123, 70, 191, 4, 253, 183, 239, 62, 171, 155, 105, 248, 138, 46, 223, 146, 85, 110, 147, 176, 44, 186, 144, 100, 148, 203, 114, 125, 217, 194, 81, 94, 142, 101, 238, 55, 118, 178, 41, 1, 148, 24, 88, 141, 14, 77, 186, 190, 179, 108, 90, 159, 95, 62, 99, 106, 153, 16, 182, 20, 150, 84, 240, 32, 232, 150, 176, 39, 108, 211, 242, 249, 175, 130, 191, 193, 59, 225, 75, 173, 223, 180, 88, 122, 86, 41, 94, 216, 148, 41, 210, 229, 101, 107, 243, 123, 94, 9, 53, 166, 202, 82, 91, 251, 111, 123, 167, 155, 245, 231, 243, 89, 108, 146, 31, 2, 58, 6, 79, 104, 137, 21, 49, 193, 75, 209, 197, 231, 239, 132, 145, 238, 0, 73, 49, 195, 195, 171, 107, 28, 202, 107, 167, 35, 167, 44, 244, 166, 83, 253, 93, 190, 58, 85, 146, 127, 201, 169, 204, 18, 192, 124, 149, 76, 39, 184, 237, 216, 65, 196, 48, 183, 127, 124, 231, 128, 145, 143, 148, 247, 174, 209, 56, 119, 41, 132, 69, 20, 157, 65, 190, 233, 47, 105, 148, 238, 61, 241, 235, 50, 225, 50, 12, 215, 0, 187, 95, 63, 230, 183, 82, 51, 32, 158, 172, 81, 143, 134, 27, 154, 64, 24, 29, 98, 27, 120, 15, 142, 226, 111, 173, 152, 37, 8, 249, 61, 135, 46, 122, 7, 20, 38, 99, 40, 103, 161, 196, 91, 255, 78, 195, 42, 134, 39, 144, 149, 157, 46, 151, 51, 100, 52, 1, 187, 130, 125, 208, 157, 83, 151, 188, 35, 195, 85, 129, 121, 145, 51, 100, 56, 180, 64, 168, 200, 196, 206, 66, 170, 122, 54, 186, 24, 208, 145, 117, 97, 193, 12, 131, 20, 239, 14, 67, 131, 87, 171, 231, 230, 29, 58, 36, 110, 17, 123, 167, 14, 181, 112, 2, 58, 10, 14, 106, 230, 238, 75, 150, 67, 9, 30, 200, 240, 102, 38, 18, 112, 123, 146, 232, 200, 247, 52, 120, 87, 29, 40, 73, 144, 203, 44, 196, 195, 50, 228, 25, 43, 219, 65, 209, 213, 122, 91, 73, 52, 28, 200, 207, 200, 51, 248, 67, 174, 230, 56, 170, 220, 7, 22, 127, 7, 176, 240, 181, 245, 253, 99, 215, 117, 209, 232, 46, 87, 147, 163, 89, 133, 53, 206, 236, 240, 71, 153, 236, 81, 157, 224, 21, 88, 174, 117, 4, 192, 251, 137, 63, 228, 35, 126, 99, 53, 41, 7, 196, 220, 132, 188, 5, 222, 78, 5, 80, 166, 160, 11, 181, 83, 177, 38, 97, 94, 43, 29, 36, 205, 8, 250, 237, 9, 135, 242, 71, 243, 98, 14, 80, 138, 191, 69, 243, 16, 166, 232, 11, 78, 126, 172, 175, 171, 226, 119, 134, 150, 138, 228, 98, 48, 136, 200, 184, 26, 72, 32, 48, 158, 116, 249, 198, 51, 216, 79, 81, 188, 89, 92, 22, 24, 210, 21, 194, 195, 121, 231, 102, 86, 162, 180, 249, 183, 185, 116, 124, 164, 137, 186, 6, 26, 37, 184, 13, 179, 195, 0, 247, 114, 252, 157, 26, 154, 126, 176, 88, 118, 69, 7, 147, 2, 150, 34, 237, 44, 165, 184, 55, 144, 81, 59, 7, 42, 12, 50, 153, 47, 76, 207, 229, 7, 172, 7, 197, 10, 135, 235, 255, 206, 85, 245, 44, 173, 101, 45, 30, 245, 18, 193, 172, 133, 200, 88, 196, 40, 59, 62, 106, 20, 117, 194, 144, 183, 153, 25, 205, 234, 22, 64, 35, 127, 102, 1, 144, 63, 164, 102, 172, 46, 183, 45, 3, 202, 200, 49, 61, 26, 198, 110, 234, 139, 87, 139, 214, 76, 39, 174, 202, 241, 193, 32, 40, 84, 114, 12, 209, 29, 188, 29, 9, 248, 104, 127, 195, 185, 155, 199, 138, 75, 197, 139, 98, 78, 39, 158, 206, 53, 131, 221, 173, 93, 227, 11, 143, 241, 238, 125, 131, 242, 71, 26, 213, 134, 213, 10, 231, 18, 75, 50, 189, 159, 16, 72, 85, 185, 31, 156, 60, 71, 237, 47, 154, 73, 238, 188, 201, 195, 254, 167, 29, 212, 54, 229, 87, 92, 56, 60, 187, 123, 197, 195, 58, 37, 79, 49, 120, 50, 85, 170, 36, 62, 78, 160, 182, 36, 91, 213, 94, 105, 15, 61, 67, 69, 97, 176, 241, 55, 137, 127, 48, 206, 68, 248, 93, 188, 85, 196, 69, 239, 175, 254, 227, 220, 72, 240, 193, 85, 239, 74, 191, 133, 0, 96, 116, 76, 9, 152, 23, 52, 68, 52, 73, 203, 51, 187, 195, 73, 198, 200, 202, 197, 190, 249, 107, 83, 7, 35, 200, 247, 227, 14, 55, 240, 216, 208, 57, 189, 37, 52, 23, 98, 37, 116, 196, 68, 14, 192, 96, 54, 101, 109, 52, 146, 165, 174, 241, 250, 163, 166, 51, 199, 66, 140, 222, 244, 93, 191, 77, 169, 108, 101, 30, 51, 72, 77, 9, 142, 152, 244, 195, 34, 13, 37, 211, 153, 27, 166, 150, 150, 184, 62, 66, 196, 50, 186, 238, 146, 197, 144, 79, 26, 106, 153, 36, 138, 226, 238, 195, 104, 236, 67, 153, 160, 247, 7, 164, 197, 179, 105, 181, 229, 194, 66, 235, 158, 167, 221, 112, 16, 106, 71, 52, 6, 6, 54, 209, 24, 184, 22, 111, 139, 63, 57, 170, 250, 161, 205, 6, 39, 133, 98, 43, 251, 95, 191, 64, 209, 221, 235, 105, 242, 197, 164, 50, 65, 95, 108, 251, 111, 130, 82, 201, 77, 102, 55, 180, 169, 194, 187, 17, 192, 135, 233, 79, 145, 241, 217, 96, 105, 70, 2, 141, 203, 136, 127, 63, 211, 112, 157, 40, 31, 100, 168, 68, 53, 57, 135, 252, 160, 15, 190, 9, 214, 118, 29, 5, 135, 242, 9, 46, 116, 114, 249, 134, 6, 207, 107, 227, 238, 193, 54, 153, 191, 196, 100, 145, 254, 217, 177, 29, 240, 21, 169, 126, 77, 213, 243, 172, 236, 203, 235, 240, 24, 7, 154, 108, 228, 239, 9, 129, 13, 164, 75, 77, 114, 193, 61, 12, 123, 214, 130, 81, 123, 8, 210, 191, 72, 7, 247, 142, 242, 21, 43, 70, 20, 228, 70, 97, 199, 73, 225, 135, 87, 104, 130, 120, 185, 125, 142, 218, 83, 27, 234, 73, 108, 249, 108, 2, 113, 26, 159, 53, 112, 22, 133, 112, 36, 226, 35, 185, 33, 208, 243, 19, 105, 201, 68, 121, 3, 107, 109, 85, 195, 153, 150, 61, 128, 182, 211, 7, 158, 199, 218, 250, 39, 170, 104, 137, 33, 42, 52, 123, 236, 2, 209, 143, 199, 130, 26, 178, 72, 12, 95, 67, 182, 125, 13, 148, 19, 151, 60, 125, 89, 88, 8, 168, 33, 38, 220, 21, 50, 32, 105, 21, 79, 75, 132, 57, 194, 196, 75, 128, 111, 1, 137, 23, 220, 117, 162, 235, 171, 233, 13, 5, 21, 133, 165, 255, 167, 184, 73, 199, 63, 129, 169, 124, 169, 38, 121, 251, 35, 194, 164, 231, 127, 30, 145, 47, 7, 106, 29, 158, 190, 185, 40, 101, 221, 91, 251, 37, 53, 242, 109, 170, 248, 208, 149, 244, 46, 249, 2, 245, 147, 207, 178, 35, 64, 252, 58, 64, 7, 118, 129, 102, 74, 82, 183, 119, 239, 165, 80, 99, 252, 180, 96, 214, 97, 99, 125, 98, 121, 28, 182, 183, 71, 104, 46, 62, 179, 114, 73, 40, 27, 208, 109, 25, 81, 180, 47, 234, 172, 63, 34, 246, 42, 32, 87, 52, 93, 12, 1, 176, 76, 209, 75, 65, 252, 240, 149, 153, 139, 226, 86, 147, 240, 9, 138, 203, 251, 178, 169, 244, 88, 137, 231, 66, 93, 33, 137, 28, 163, 221, 171, 32, 217, 91, 142, 84, 106, 79, 234, 151, 240, 94, 255, 130, 39, 144, 59, 150, 175, 96, 111, 187, 251, 31, 71, 166, 108, 191, 251, 177, 85, 165, 21, 124, 223, 92, 188, 255, 122, 79, 235, 36, 177, 214, 191, 0, 77, 60, 79, 177, 27, 113, 193, 73, 106, 200, 219, 170, 119, 115, 138, 140, 191, 97, 195, 249, 82, 174, 156, 101, 252, 56, 56, 37, 86, 224, 58, 182, 245, 57, 168, 72, 218, 143, 164, 217, 62, 178, 218, 204, 254, 54, 234, 74, 252, 98, 155, 79, 72, 18, 158, 116, 58, 183, 166, 73, 206, 214, 89, 239, 171, 168, 53, 199, 104, 195, 158, 47, 111, 83, 6, 97, 226, 179, 253, 108, 57, 99, 7, 55, 113, 248, 100, 181, 84, 202, 153, 172, 75, 81, 143, 9, 14, 31, 4, 169, 254, 25, 133, 56, 100, 240, 41, 234, 136, 74, 0, 57, 3, 132, 11, 14, 233, 11, 72, 81, 125, 87, 58, 192, 106, 69, 94, 235, 10, 226, 188, 224, 15, 160, 121, 32, 122, 206, 231, 73, 224, 238, 92, 35, 193, 209, 70, 235, 217, 39, 235, 105, 166, 102, 244, 111, 2, 86, 87, 41, 193, 141, 7, 237, 112, 15, 83, 145, 81, 199, 94, 24, 124, 102, 0, 92, 11, 252, 62, 121, 152, 139, 208, 141, 235, 219, 199, 31, 191, 198, 147, 149, 113, 31, 56, 58, 2, 187, 254, 100, 6, 215, 170, 18, 39, 92, 47, 124, 164, 52, 169, 105, 17, 32, 143, 103, 125, 20, 242, 193, 40, 236, 133, 198, 211, 162, 252, 171, 157, 9, 52, 154, 161, 82, 53, 149, 100, 51, 144, 143, 30, 233, 163, 116, 125, 43, 141, 122, 253, 156, 59, 116, 90, 46, 2, 239, 158, 230, 184, 52, 17, 193, 94, 190, 8, 116, 205, 174, 190, 246, 156, 4, 114, 103, 140, 36, 17, 117, 13, 69, 171, 7, 133, 156, 105, 127, 44, 63, 140, 48, 226, 39, 238, 231, 71, 159, 58, 237, 88, 157, 91, 182, 3, 192, 14, 49, 255, 199, 101, 135, 122, 168, 222, 197, 98, 222, 135, 85, 4, 71, 3, 187, 135, 43, 115, 188, 49, 145, 85, 100, 162, 141, 170, 229, 197, 229, 99, 28, 0, 193, 189, 130, 168, 239, 174, 225, 4, 149, 167, 100, 198, 46, 110, 220, 245, 156, 174, 159, 244, 185, 249, 58, 241, 183, 102, 73, 119, 17, 123, 92, 212, 236, 74, 244, 161, 178, 111, 152, 41, 137, 138, 4, 133, 47, 40, 107, 95, 50, 101, 50, 39, 71, 135, 87, 253, 228, 85, 61, 254, 157, 182, 4, 253, 90, 4, 24, 7, 214, 76, 44, 25, 8, 15, 235, 242, 152, 252, 172, 6, 251, 43, 213, 77, 235, 54, 20, 122, 148, 198, 207, 136, 38, 70, 216, 152, 238, 95, 59, 221, 245, 108, 129, 189, 2, 118, 219, 123, 17, 12, 196, 21, 182, 163, 119, 188, 211, 13, 138, 144, 35, 128, 56, 167, 226, 73, 247, 223, 19, 159, 70, 52, 211, 216, 220, 62, 56, 158, 23, 147, 72, 254, 26, 160, 36, 5, 173, 241, 160, 213, 92, 145, 146, 243, 136, 188, 136, 139, 94, 205, 192, 254, 6, 221, 12, 214, 74, 165, 134, 118, 8, 96, 28, 203, 108, 118, 196, 139, 204, 215, 225, 140, 191, 151, 189, 10, 219, 163, 250, 156, 163, 91, 250, 79, 90, 154, 114, 164, 190, 44, 235, 46, 18, 120, 147, 135, 135, 41, 32, 98, 128, 188, 253, 187, 15, 204, 247, 75, 244, 55, 126, 14, 204, 12, 252, 2, 79, 247, 219, 224, 195, 238, 203, 106, 78, 66, 57, 25, 198, 232, 2, 247, 75, 37, 91, 27, 148, 102, 20, 87, 145, 47, 3, 223, 67, 249, 105, 39, 91, 136, 84, 149, 211, 121, 102, 255, 136, 186, 47, 131, 6, 176, 66, 245, 136, 76, 194, 255, 114, 205, 52, 19, 164, 109, 83, 54, 143, 180, 152, 147, 24, 89, 84, 74, 177, 64, 235, 60, 93, 68, 176, 196, 172, 244, 81, 198, 50, 99, 199, 55, 11, 94, 83, 244, 111, 43, 169, 148, 79, 109, 188, 226, 117, 118, 97, 120, 26, 24, 16, 108, 51, 140, 23, 170, 246, 141, 158, 254, 203, 195, 248, 180, 97, 116, 31, 249, 180, 100, 242, 49, 172, 12, 48, 197, 33, 38, 151, 85, 234, 55, 61, 53, 84, 91, 8, 196, 19, 77, 253, 216, 56, 93, 168, 234, 63, 113, 107, 197, 107, 195, 54, 178, 117, 195, 96, 116, 72, 176, 82, 97, 34, 143, 166, 164, 34, 3, 226, 69, 110, 19, 16, 240, 154, 92, 216, 44, 177, 159, 74, 125, 231, 241, 241, 225, 74, 198, 145, 242, 126, 92, 198, 149, 145, 26, 194, 237, 255, 26, 13, 28, 152, 150, 210, 135, 196, 212, 16, 113, 123, 118, 104, 124, 176, 182, 149, 11, 227, 38, 200, 16, 13, 39, 212, 225, 167, 182, 94, 159, 183, 0, 190, 249, 167, 81, 193, 235, 145, 5, 148, 175, 67, 252, 88, 159, 144, 244, 85, 113, 115, 28, 109, 202, 157, 123, 53, 225, 222, 102, 245, 209, 24, 247, 3, 199, 13, 161, 203, 56, 165, 125, 244, 42, 159, 128, 137, 104, 169, 231, 101, 91, 162, 88, 105, 106, 175, 64, 240, 155, 227, 198, 53, 227, 109, 114, 109, 54, 36, 107, 49, 73, 249, 31, 125, 174, 185, 234, 163, 176, 39, 208, 14, 40, 74, 215, 36, 130, 108, 167, 247, 192, 103, 100, 64, 111, 225, 209, 244, 163, 140, 197, 56, 200, 26, 42, 84, 150, 30, 253, 12, 21, 238, 11, 188, 181, 168, 176, 110, 56, 184, 101, 192, 69, 97, 83, 208, 225, 12, 46, 145, 54, 67, 201, 39, 145, 198, 121, 215, 231, 189, 199, 230, 120, 226, 220, 129, 223, 23, 110, 13, 126, 85, 190, 72, 153, 69, 148, 117, 117, 230, 230, 206, 74, 31, 35, 190, 211, 241, 169, 97, 95, 188, 70, 43, 241, 101, 237, 182, 82, 18, 12, 124, 218, 73, 77, 212, 178, 132, 53, 81, 144, 186, 219, 157, 174, 110, 193, 32, 197, 80, 18, 28, 1, 31, 76, 194, 172, 142, 122, 10, 118, 217, 101, 5, 86, 179, 68, 253, 144, 31, 190, 155, 157, 61, 202, 55, 223, 53, 249, 234, 19, 9, 245, 76, 195, 254, 202, 69, 242, 151, 38, 40, 86, 18, 18, 224, 102, 94, 219, 12, 7, 251, 123, 31, 116, 81, 58, 71, 48, 201, 54, 84, 152, 152, 177, 185, 254, 146, 4, 153, 95, 81, 107, 161, 68, 199, 25, 216, 249, 121, 86, 152, 34, 124, 152, 195, 140, 112, 23, 203, 37, 56, 128, 163, 163, 22, 135, 35, 126, 6, 36, 242, 23, 207, 21, 240, 109, 49, 162, 143, 220, 101, 232, 112, 100, 205, 156, 43, 24, 22, 171, 192, 251, 9, 217, 10, 255, 210, 122, 4, 82, 217, 159, 141, 13, 26, 99, 85, 234, 58, 50, 234, 3, 60, 238, 149, 246, 228, 68, 137, 210, 192, 83, 43, 56, 148, 235, 97, 26, 9, 41, 155, 113, 179, 199, 29, 231, 130, 112, 107, 172, 128, 113, 42, 109, 100, 42, 80, 40, 92, 29, 121, 24, 106, 133, 229, 103, 214, 160, 191, 24, 126, 234, 245, 79, 82, 175, 34, 118, 188, 141, 62, 152, 221, 219, 170, 234, 89, 227, 225, 39, 158, 133, 114, 224, 254, 96, 145, 78, 211, 180, 120, 145, 126, 227, 198, 210, 220, 209, 251, 217, 225, 122, 81, 4, 218, 237, 14, 12, 80, 187, 57, 198, 226, 143, 236, 189, 188, 102, 123, 21, 106, 119, 94, 142, 180, 26, 26, 25, 234, 22, 57, 195, 135, 238, 9, 53, 229, 181, 135, 104, 202, 191, 241, 75, 165, 246, 163, 254, 16, 117, 128, 157, 111, 191, 102, 145, 169, 208, 58, 212, 92, 93, 54, 235, 107, 92, 52, 113, 49, 126, 194, 39, 175, 121, 46, 68, 118, 146, 14, 116, 116, 145, 138, 52, 190, 109, 110, 161, 180, 143, 216, 250, 174, 197, 130, 40, 144, 219, 251, 207, 255, 77, 214, 135, 147, 80, 123, 238, 171, 91, 188, 224, 124, 67, 50, 158, 144, 193, 112, 125, 39, 66, 245, 254, 170, 132, 61, 2, 125, 115, 9, 255, 32, 193, 132, 109, 51, 161, 11, 37, 237, 216, 36, 2, 166, 95, 31, 208, 44, 10, 224, 183, 128, 176, 42, 98, 19, 115, 157, 106, 48, 5, 165, 71, 219, 255, 191, 125, 181, 82, 131, 70, 136, 169, 166, 207, 64, 198, 114, 158, 73, 33, 167, 160, 147, 54, 83, 57, 96, 230, 16, 47, 218, 52, 237, 241, 116, 39, 95, 190, 65, 208, 250, 137, 44, 168, 220, 82, 73, 5, 198, 95, 203, 101, 27, 9, 191, 14, 144, 71, 65, 186, 110, 11, 179, 64, 135, 61, 90, 167, 185, 92, 128, 179, 253, 17, 165, 241, 186, 124, 47, 143, 77, 209, 67, 190, 150, 225, 63, 217, 206, 0, 230, 109, 43, 75, 201, 28, 203, 30, 165, 210, 234, 57, 220, 137, 105, 64, 134, 64, 80, 217, 245, 80, 187, 9, 149, 69, 221, 79, 225, 183, 85, 1, 167, 251, 47, 173, 231, 108, 0, 111, 85, 207, 82, 14, 19, 28, 130, 20, 105, 55, 133, 136, 133, 234, 177, 21, 211, 62, 245, 50, 67, 154, 122, 85, 43, 107, 189, 124, 40, 142, 40, 98, 204, 190, 154, 88, 141, 34, 242, 232, 57, 12, 157, 118, 74, 137, 204, 181, 216, 193, 223, 155, 38, 72, 251, 163, 49, 37, 99, 70, 162, 121, 93, 118, 83, 52, 87, 143, 59, 216, 48, 72, 53, 223, 134, 150, 196, 156, 65, 240, 131, 106, 68, 253, 139, 162, 84, 231, 126, 164, 112, 183, 171, 29, 225, 111, 9, 134, 57, 206, 246, 1, 77, 102, 192, 178, 72, 16, 37, 226, 94, 83, 142, 49, 206, 28, 223, 147, 105, 69, 9, 224, 36, 158, 159, 10, 161, 110, 81, 133, 123, 202, 44, 17, 180, 189, 2, 141, 90, 73, 193, 67, 86, 161, 131, 181, 176, 216, 81, 246, 47, 156, 201, 225, 30, 242, 80, 55, 169, 49, 66, 199, 180, 37, 80, 6, 124, 101, 47, 135, 162, 52, 252, 131, 141, 21, 64, 233, 126, 56, 203, 237, 180, 68, 3, 94, 55, 17, 200, 141, 140, 175, 212, 254, 217, 239, 88, 247, 207, 111, 12, 44, 47, 80, 0, 254, 85, 180, 254, 70, 128, 24, 204, 115, 68, 12, 112, 251, 144, 136, 245, 10, 121, 6, 58, 255, 26, 35, 129, 164, 242, 31, 23, 222, 249, 190, 56, 98, 174, 247, 255, 19, 166, 89, 35, 159, 42, 233, 190, 142, 207, 34, 108, 150, 179, 52, 255, 204, 182, 178, 31, 76, 67, 185, 156, 50, 35, 48, 150, 222, 209, 141, 121, 211, 49, 36, 85, 147, 213, 171, 100, 62, 234, 0, 49, 148, 52, 206, 222, 61, 54, 105, 162, 194, 254, 66, 137, 218, 103, 41, 7, 121, 221, 117, 182, 221, 219, 11, 221, 26, 222, 25, 119, 63, 225, 163, 176, 104, 79, 12, 201, 87, 64, 231, 57, 69, 164, 230, 49, 98, 208, 195, 104, 175, 134, 18, 123, 67, 25, 89, 88, 81, 28, 171, 187, 147, 197, 171, 178, 158, 34, 98, 5, 134, 1, 70, 133, 65, 127, 14, 252, 180, 250, 178, 184, 67, 42, 151, 175, 67, 124, 179, 82, 114, 170, 221, 23, 41, 104, 110, 123, 80, 251, 183, 37, 201, 168, 222, 166, 212, 45, 151, 38, 138, 29, 207, 206, 34, 187, 38, 216, 104, 203, 123, 89, 172, 0, 25, 136, 38, 155, 209, 110, 212, 0, 156, 50, 75, 219, 1, 215, 71, 166, 64, 79, 69, 147, 117, 203, 140, 190, 101, 62, 167, 28, 221, 194, 121, 226, 209, 227, 71, 218, 77, 223, 17, 94, 37, 175, 68, 84, 108, 182, 122, 101, 241, 17, 187, 226, 8, 138, 76, 214, 69, 239, 184, 250, 160, 182, 130, 34, 35, 254, 102, 145, 105, 170, 195, 24, 127, 158, 32, 122, 83, 52, 12, 23, 43, 251, 128, 11, 71, 34, 244, 192, 13, 44, 254, 115, 181, 38, 164, 38, 227, 166, 159, 60, 83, 145, 54, 14, 167, 251, 53, 153, 172, 99, 116, 141, 224, 148, 27, 164, 9, 126, 97, 234, 153, 209, 169, 26, 229, 92, 65, 228, 206, 73, 179, 153, 208, 22, 199, 19, 235, 32, 88, 23, 47, 192, 107, 6, 157, 186, 11, 178, 130, 101, 44, 121, 61, 218, 189, 68, 111, 180, 93, 51, 52, 248, 166, 107, 85, 186, 99, 36, 148, 137, 249, 213, 62, 127, 222, 221, 222, 210, 62, 192, 187, 148, 168, 61, 63, 158, 55, 162, 230, 201, 243, 3, 218, 166, 110, 103, 27, 52, 232, 100, 241, 215, 181, 150, 51, 197, 22, 175, 50, 53, 98, 69, 204, 71, 239, 100, 146, 19, 4, 185, 115, 30, 125, 156, 249, 71, 165, 49, 153, 124, 122, 86, 133, 117, 57, 101, 223, 146, 211, 223, 153, 141, 31, 120, 0, 49, 232, 226, 244, 215, 32, 124, 127, 78, 7, 204, 110, 187, 155, 85, 150, 237, 174, 202, 51, 255, 14, 131, 192, 153, 151, 235, 126, 158, 163, 243, 42, 182, 126, 228, 175, 59, 157, 30, 180, 219, 137, 26, 139, 124, 23, 91, 247, 227, 113, 87, 109, 167, 248, 14, 49, 55, 170, 195, 198, 186, 18, 225, 98, 63, 33, 138, 10, 26, 3, 57, 81, 209, 133, 151, 222, 92, 101, 245, 41, 3, 85, 33, 246, 121, 107, 125, 162, 37, 208, 149, 85, 209, 209, 145, 232, 79, 130, 218, 132, 156, 118, 139, 21, 131, 200, 224, 252, 250, 173, 32, 102, 136, 212, 139, 231, 173, 31, 174, 218, 161, 34, 225, 198, 102, 228, 12, 65, 159, 213, 152, 167, 156, 126, 176, 165, 0, 90, 171, 27, 163, 227, 188, 125, 12, 187, 199, 0, 212, 74, 206, 145, 56, 236, 215, 150, 229, 163, 253, 154, 240, 1, 79, 254, 65, 198, 234, 194, 95, 220, 113, 105, 98, 226, 224, 181, 175, 147, 212, 140, 132, 113, 114, 127, 138, 5, 174, 111, 235, 196, 48, 224, 164, 233, 158, 125, 51, 8, 253, 5, 54, 212, 104, 90, 228, 1, 204, 94, 180, 115, 28, 24, 39, 250, 236, 19, 15, 96, 82, 103, 55, 37, 132, 163, 36, 190, 14, 27, 76, 174, 147, 162, 40, 219, 227, 82, 107, 136, 72, 220, 230, 230, 66, 188, 21, 92, 224, 3, 65, 174, 105, 182, 27, 175, 217, 229, 34, 183, 5, 189, 250, 158, 46, 62, 74, 185, 63, 9, 235, 113, 96, 234, 233, 47, 176, 137, 99, 54, 6, 11, 119, 55, 144, 36, 32, 222, 101, 32, 7, 53, 228, 190, 141, 68, 206, 87, 92, 102, 14, 144, 255, 125, 60, 144, 15, 21, 213, 14, 49, 120, 159, 29, 230, 42, 91, 40, 51, 197, 104, 219, 137, 130, 48, 69, 71, 19, 72, 16, 138, 104, 38, 88, 150, 5, 206, 61, 108, 156, 166, 115, 118, 50, 250, 234, 231, 100, 239, 142, 181, 6, 172, 235, 45, 200, 212, 47, 98, 93, 63, 60, 27, 42, 51, 179, 58, 16, 151, 214, 230, 197, 184, 223, 124, 3, 58, 21, 99, 60, 231, 214, 227, 135, 161, 243, 124, 198, 216, 92, 18, 8, 62, 4, 214, 176, 88, 56, 101, 36, 139, 155, 119, 33, 111, 166, 73, 178, 253, 165, 60, 254, 82, 173, 169, 75, 57, 15, 226, 65, 112, 23, 86, 179, 62, 111, 7, 162, 238, 87, 116, 82, 95, 92, 118, 244, 243, 204, 187, 35, 140, 206, 87, 29, 27, 118, 126, 198, 7, 186, 35, 30, 162, 65, 12, 72, 116, 207, 86, 143, 121, 13, 69, 33, 254, 18, 175, 5, 217, 60, 118, 188, 88, 204, 100, 45, 63, 96, 94, 205, 184, 66, 30, 163, 200, 53, 181, 55, 243, 217, 30, 243, 227, 210, 68, 2, 70, 140, 25, 5, 171, 44, 236, 107, 30, 209, 179, 85, 252, 70, 23, 81, 226, 202, 136, 189, 47, 71, 171, 254, 20, 174, 3, 220, 223, 161, 92, 246, 249, 50, 229, 2, 224, 67, 79, 130, 88, 29, 60, 99, 200, 10, 79, 203, 169, 0, 88, 103, 144, 70, 163, 244, 208, 14, 105, 116, 85, 88, 97, 167, 195, 159, 37, 249, 211, 126, 244, 247, 31, 142, 43, 225, 101, 219, 63, 114, 205, 12, 84, 76, 111, 172, 182, 178, 195, 236, 219, 99, 111, 146, 196, 249, 97, 61, 235, 172, 247, 72, 170, 120, 83, 37, 106, 97, 199, 209, 237, 239, 76, 145, 138, 184, 204, 13, 75, 177, 95, 234, 3, 48, 140, 174, 147, 22, 116, 48, 131, 17, 44, 194, 68, 118, 99, 250, 19, 46, 25, 53, 104, 241, 40, 199, 154, 120, 137, 175, 47, 104, 196, 83, 240, 73, 181, 247, 17, 58, 204, 188, 67, 6, 48, 137, 117, 207, 89, 99, 127, 173, 20, 109, 236, 208, 141, 95, 22, 36, 250, 101, 47, 123, 123, 221, 42, 219, 14, 224, 202, 64, 194, 138, 48, 121, 93, 169, 83, 100, 196, 25, 157, 235, 161, 136, 134, 201, 213, 213, 174, 76, 109, 109, 155, 240, 246, 69, 43, 237, 70, 191, 105, 132, 164, 153, 238, 117, 239, 16, 21, 223, 151, 64, 221, 23, 233, 192, 161, 170, 97, 223, 239, 212, 80, 17, 202, 188, 217, 188, 183, 235, 192, 68, 65, 37, 205, 30, 217, 235, 51, 164, 12, 243, 147, 37, 76, 229, 152, 199, 196, 94, 215, 238, 67, 115, 60, 145, 91, 93, 153, 34, 92, 71, 218, 102, 131, 16, 75, 158, 176, 211, 69, 168, 136, 198, 46, 245, 3, 48, 81, 38, 7, 36, 121, 63, 202, 183, 250, 101, 201, 110, 23, 70, 147, 66, 135, 33, 91, 143, 132, 240, 117, 226, 55, 80, 122, 76, 28, 63, 77, 90, 123, 98, 167, 134, 232, 141, 158, 15, 149, 120, 151, 15, 240, 224, 102, 21, 241, 150, 240, 230, 43, 58, 245, 243, 99, 120, 178, 30, 37, 104, 160, 144, 150, 225, 210, 115, 125, 56, 127, 48, 243, 6, 114, 215, 178, 250, 44, 116, 56, 57, 249, 151, 248, 123, 151, 33, 180, 101, 187, 156, 34, 201, 250, 187, 17, 65, 156, 46, 185, 236, 68, 156, 250, 14, 45, 51, 69, 94, 236, 200, 7, 55, 229, 249, 203, 104, 163, 82, 43, 137, 198, 34, 158, 114, 179, 255, 57, 137, 246, 223, 102, 210, 199, 208, 101, 5, 17, 174, 3, 33, 108, 103, 12, 35, 156, 116, 26, 249, 56, 179, 221, 12, 126, 163, 88, 122, 92, 210, 172, 123, 95, 101, 222, 137, 2, 224, 99, 229, 107, 72, 210, 164, 192, 70, 65, 17, 253, 199, 28, 127, 106, 147, 183, 140, 85, 33, 29, 252, 134, 45, 207, 24, 154, 95, 230, 162, 132, 20, 184, 51, 62, 74, 106, 22, 255, 220, 76, 145, 136, 166, 1, 254, 44, 172, 92, 85, 95, 51, 19, 147, 39, 10, 203, 85, 183, 249, 153, 189, 188, 161, 203, 44, 117, 119, 158, 68, 145, 107, 124, 151, 24, 226, 23, 73, 30, 100, 87, 116, 40, 204, 102, 215, 238, 44, 248, 168, 214, 108, 188, 146, 4, 164, 133, 86, 141, 164, 52, 196, 173, 192, 24, 214, 234, 87, 119, 17, 188, 240, 91, 25, 199, 74, 164, 85, 178, 131, 242, 153, 164, 43, 204, 50, 81, 245, 229, 35, 39, 244, 170, 165, 205, 63, 188, 61, 92, 61, 61, 119, 48, 11, 151, 191, 169, 249, 181, 101, 33, 164, 167, 39, 74, 238, 113, 215, 148, 154, 98, 182, 166, 215, 230, 221, 120, 53, 229, 30, 202, 117, 96, 10, 125, 238, 229, 52, 239, 117, 252, 79, 176, 140, 160, 37, 2, 206, 44, 147, 222, 101, 212, 104, 127, 94, 52, 247, 113, 184, 154, 218, 42, 15, 177, 138, 35, 219, 213, 64, 18, 23, 106, 207, 202, 25, 111, 69, 20, 173, 16, 149, 217, 29, 241, 141, 18, 36, 185, 218, 54, 2, 254, 226, 161, 63, 157, 97, 117, 115, 76, 53, 238, 28, 136, 152, 38, 197, 173, 164, 8, 64, 13, 138, 177, 240, 179, 58, 30, 137, 20, 32, 130, 252, 21, 252, 52, 65, 251, 193, 179, 59, 30, 159, 25, 254, 21, 179, 245, 47, 182, 147, 24, 212, 106, 213, 37, 247, 151, 84, 151, 85, 79, 211, 251, 165, 111, 205, 128, 232, 18, 47, 58, 104, 49, 107, 151, 123, 129, 166, 127, 53, 227, 55, 25, 112, 79, 213, 108, 21, 158, 52, 52, 188, 47, 207, 146, 142, 230, 119, 47, 223, 123, 221, 251, 145, 24, 19, 253, 176, 4, 56, 141, 230, 85, 157, 108, 46, 195, 178, 193, 103, 103, 77, 250, 99, 63, 102, 46, 99, 55, 35, 43, 24, 152, 145, 238, 198, 132, 152, 235, 130, 203, 167, 170, 164, 212, 155, 159, 63, 145, 228, 178, 126, 240, 226, 250, 20, 70, 168, 250, 101, 86, 69, 180, 227, 46, 184, 123, 93, 89, 51, 64, 86, 59, 85, 215, 7, 52, 193, 54, 222, 237, 21, 47, 132, 52, 61, 145, 0, 124, 138, 250, 249, 191, 104, 139, 33, 182, 172, 118, 80, 227, 38, 120, 228, 162, 9, 155, 113, 223, 163, 179, 38, 6, 243, 48, 105, 218, 218, 91, 201, 124, 147, 6, 194, 91, 81, 29, 130, 153, 74, 52, 96, 221, 143, 73, 6, 82, 40, 47, 56, 185, 76, 168, 142, 47, 42, 82, 13, 186, 217, 16, 176, 234, 111, 71, 53, 126, 64, 99, 215, 183, 62, 150, 180, 48, 83, 114, 168, 154, 195, 177, 43, 148, 74, 21, 41, 47, 41, 248, 28, 191, 76, 74, 246, 109, 163, 154, 242, 143, 157, 235, 185, 169, 131, 202, 55, 252, 220, 154, 213, 30, 65, 18, 9, 13, 41, 136, 147, 30, 167, 230, 1, 168, 198, 52, 172, 51, 100, 93, 14, 250, 129, 184, 93, 79, 118, 25, 223, 59, 146, 146, 21, 44, 141, 100, 157, 127, 77, 178, 73, 116, 97, 234, 220, 167, 161, 229, 145, 16, 165, 180, 220, 106, 251, 89, 215, 1, 34, 157, 15, 0, 119, 216, 192, 19, 78, 146, 201, 207, 129, 80, 245, 209, 134, 92, 22, 251, 70, 92, 224, 247, 228, 74, 201, 161, 210, 52, 60, 44, 249, 205, 153, 112, 36, 114, 204, 100, 78, 68, 13, 114, 128, 226, 159, 107, 228, 204, 161, 89, 94, 240, 10, 34, 196, 248, 144, 159, 110, 84, 155, 3, 190, 22, 128, 118, 248, 1, 67, 157, 166, 220, 212, 220, 75, 168, 27, 232, 3, 230, 76, 21, 91, 109, 148, 0, 54, 111, 62, 241, 212, 78, 169, 242, 92, 198, 92, 205, 36, 224, 208, 211, 53, 222, 137, 31, 60, 8, 227, 131, 181, 90, 214, 191, 30, 45, 177, 163, 253, 178, 15, 70, 161, 141, 70, 27, 38, 253, 124, 166, 95, 13, 242, 113, 229, 27, 40, 194, 220, 211, 54, 74, 93, 109, 119, 38, 219, 8, 63, 25, 30, 221, 115, 194, 147, 59, 48, 86, 199, 80, 8, 26, 178, 56, 199, 66, 164, 229, 234, 15, 52, 251, 110, 172, 215, 244, 211, 108, 20, 41, 70, 83, 19, 192, 255, 228, 184, 120, 30, 219, 203, 122, 58, 22, 194, 101, 195, 142, 212, 8, 34, 88, 227, 79, 69, 132, 232, 77, 168, 224, 84, 156, 170, 251, 142, 83, 37, 34, 115, 137, 223, 39, 134, 204, 231, 8, 220, 195, 133, 205, 235, 68, 220, 7, 218, 9, 84, 127, 152, 159, 149, 162, 143, 255, 157, 78, 100, 207, 17, 73, 209, 124, 194, 107, 217, 10, 109, 240, 158, 141, 215, 74, 81, 66, 39, 158, 128, 220, 162, 30, 253, 132, 155, 141, 242, 126, 116, 123, 241, 129, 100, 242, 19, 183, 77, 182, 23, 131, 231, 248, 82, 128, 212, 142, 94, 250, 236, 8, 68, 72, 59, 211, 228, 48, 232, 228, 152, 27, 72, 226, 61, 120, 167, 53, 179, 133, 170, 231, 158, 61, 214, 30, 179, 215, 243, 126, 194, 180, 106, 109, 74, 132, 158, 121, 66, 231, 204, 209, 253, 52, 53, 231, 7, 202, 143, 240, 84, 15, 251, 90, 184, 173, 1, 66, 236, 17, 32, 41, 143, 75, 6, 83, 209, 12, 208, 46, 118, 22, 254, 100, 135, 233, 248, 64, 66, 156, 95, 137, 34, 92, 255, 112, 109, 189, 82, 162, 15, 236, 177, 223, 17, 135, 86, 24, 157, 156, 252, 202, 111, 73, 143, 80, 162, 234, 237, 233, 109, 67, 195, 160, 224, 104, 68, 210, 61, 41, 31, 23, 175, 152, 74, 88, 30, 65, 186, 134, 165, 194, 205, 223, 161, 213, 193, 119, 64, 93, 150, 251, 33, 49, 118, 121, 237, 252, 200, 71, 10, 142, 156, 134, 159, 185, 72, 238, 216, 110, 241, 198, 156, 233, 153, 86, 63, 50, 84, 244, 9, 168, 246, 190, 40, 175, 112, 92, 109, 180, 251, 12, 7, 98, 47, 79, 170, 2, 56, 90, 240, 161, 178, 101, 170, 6, 17, 134, 210, 250, 147, 6, 87, 150, 248, 186, 140, 199, 128, 162, 202, 163, 95, 120, 213, 88, 221, 235, 165, 224, 6, 86, 96, 53, 45, 98, 42, 161, 188, 64, 120, 68, 100, 221, 163, 212, 192, 98, 151, 189, 73, 225, 255, 244, 92, 41, 122, 77, 176, 129, 253, 113, 199, 88, 244, 241, 153, 31, 241, 150, 162, 181, 113, 75, 42, 29, 13, 222, 70, 238, 187, 115, 197, 94, 29, 113, 208, 165, 166, 189, 149, 208, 165, 3, 81, 236, 5, 209, 123, 205, 53, 74, 102, 14, 2, 236, 161, 223, 42, 147, 81, 203, 123, 151, 107, 88, 47, 30, 83, 25, 202, 41, 142, 125, 153, 184, 251, 37, 121, 64, 146, 17, 79, 28, 180, 58, 41, 5, 113, 31, 73, 152, 225, 217, 54, 121, 99, 149, 136, 212, 121, 41, 80, 100, 190, 138, 34, 152, 116, 108, 42, 89, 134, 250, 225, 32, 107, 40, 170, 129, 207, 199, 225, 76, 106, 37, 16, 58, 240, 123, 53, 224, 167, 51, 250, 217, 70, 92, 120, 8, 107], - [83, 240, 48, 114, 92, 110, 120, 167, 126, 46, 55, 139, 98, 227, 228, 76, 68, 176, 165, 98, 21, 142, 112, 171, 153, 119, 242, 215, 24, 153, 103, 89, 249, 4, 117, 171, 5, 146, 35, 31, 190, 57, 194, 59, 219, 219, 137, 189, 203, 134, 24, 47, 198, 255, 190, 77, 53, 190, 11, 136, 1, 153, 163, 188, 42, 94, 86, 116, 234, 47, 139, 221, 85, 96, 22, 126, 138, 104, 202, 97, 23, 216, 227, 154, 1, 194, 233, 214, 252, 13, 229, 99, 196, 98, 92, 92, 26, 78, 242, 157, 67, 186, 8, 44, 70, 193, 77, 92, 107, 79, 148, 54, 164, 12, 126, 184, 55, 83, 225, 180, 54, 9, 56, 192, 132, 120, 159, 48, 86, 133, 219, 155, 108, 36, 148, 235, 94, 218, 195, 162, 186, 253, 133, 139, 241, 80, 40, 70, 25, 94, 217, 54, 159, 136, 189, 50, 61, 43, 116, 252, 176, 7, 234, 25, 182, 146, 153, 150, 174, 37, 74, 13, 237, 22, 223, 226, 10, 5, 211, 134, 8, 204, 31, 107, 171, 19, 157, 73, 208, 223, 61, 179, 162, 155, 23, 186, 234, 57, 119, 27, 38, 128, 104, 198, 39, 55, 154, 229, 29, 130, 31, 20, 241, 208, 120, 246, 255, 189, 63, 16, 53, 86, 170, 145, 35, 113, 142, 34, 130, 143, 130, 141, 184, 32, 190, 4, 248, 174, 17, 70, 202, 209, 167, 44, 133, 8, 125, 79, 76, 101, 89, 130, 209, 158, 148, 142, 116, 146, 121, 221, 221, 161, 121, 57, 31, 251, 199, 12, 203, 203, 93, 2, 115, 114, 187, 147, 36, 121, 248, 213, 175, 171, 229, 47, 246, 244, 173, 55, 109, 163, 65, 126, 248, 246, 62, 63, 226, 164, 192, 78, 43, 242, 155, 240, 0, 69, 112, 99, 1, 55, 96, 250, 131, 69, 63, 218, 209, 139, 156, 25, 113, 218, 254, 209, 4, 237, 211, 154, 130, 13, 125, 177, 101, 15, 8, 203, 16, 178, 4, 186, 177, 15, 125, 51, 200, 119, 190, 161, 125, 26, 213, 45, 34, 220, 121, 166, 202, 169, 45, 78, 189, 75, 93, 56, 68, 46, 203, 50, 57, 173, 246, 246, 117, 33, 189, 149, 110, 36, 167, 146, 66, 242, 92, 31, 132, 204, 238, 199, 248, 234, 77, 245, 197, 160, 58, 141, 121, 47, 149, 91, 214, 199, 202, 35, 140, 102, 51, 194, 130, 143, 192, 99, 170, 249, 248, 151, 189, 20, 106, 135, 20, 182, 241, 192, 177, 111, 166, 162, 164, 178, 65, 156, 195, 95, 195, 47, 77, 44, 228, 65, 213, 155, 228, 104, 76, 245, 236, 98, 133, 182, 87, 207, 68, 46, 57, 206, 60, 72, 179, 175, 44, 247, 25, 163, 220, 68, 45, 94, 67, 31, 43, 20, 107, 213, 106, 199, 254, 253, 129, 57, 168, 192, 119, 131, 222, 57, 188, 156, 184, 182, 111, 75, 245, 11, 116, 33, 228, 97, 97, 31, 186, 131, 38, 175, 122, 231, 235, 49, 38, 254, 114, 242, 166, 196, 134, 103, 159, 105, 101, 147, 141, 129, 32, 88, 138, 86, 16, 191, 189, 173, 202, 5, 52, 72, 228, 159, 236, 4, 229, 57, 153, 11, 172, 231, 68, 57, 25, 104, 227, 239, 82, 76, 27, 44, 84, 121, 197, 94, 188, 40, 98, 214, 54, 3, 7, 242, 65, 159, 182, 136, 52, 151, 250, 180, 55, 64, 125, 182, 211, 23, 152, 255, 219, 202, 52, 189, 245, 136, 213, 129, 115, 35, 34, 5, 84, 144, 219, 106, 0, 207, 163, 189, 32, 186, 126, 37, 138, 6, 233, 151, 24, 101, 87, 77, 193, 204, 72, 153, 86, 63, 251, 123, 122, 202, 134, 229, 69, 136, 33, 144, 80, 183, 115, 84, 6, 181, 4, 19, 203, 165, 117, 96, 120, 211, 165, 201, 124, 1, 183, 129, 80, 247, 61, 51, 93, 111, 60, 243, 87, 219, 169, 26, 142, 14, 39, 76, 192, 1, 134, 68, 36, 9, 239, 53, 2, 210, 193, 84, 78, 31, 117, 200, 208, 248, 130, 72, 186, 228, 18, 56, 55, 57, 243, 19, 34, 204, 190, 255, 251, 16, 115, 243, 23, 188, 134, 234, 176, 85, 153, 6, 60, 124, 103, 180, 82, 143, 15, 226, 38, 148, 242, 184, 83, 21, 182, 142, 171, 90, 170, 87, 201, 194, 91, 98, 42, 21, 20, 255, 160, 192, 111, 231, 232, 242, 195, 68, 155, 76, 24, 151, 165, 58, 66, 182, 247, 215, 30, 51, 157, 244, 57, 37, 41, 110, 10, 53, 148, 247, 212, 131, 118, 3, 180, 118, 235, 18, 112, 62, 93, 232, 129, 75, 155, 35, 162, 78, 162, 22, 56, 249, 104, 64, 52, 210, 49, 8, 181, 26, 186, 124, 167, 133, 208, 253, 64, 219, 154, 42, 129, 181, 41, 12, 67, 3, 100, 233, 18, 72, 99, 3, 166, 228, 159, 114, 252, 29, 128, 209, 55, 242, 2, 119, 164, 53, 91, 34, 111, 225, 69, 21, 98, 158, 224, 202, 237, 174, 89, 86, 20, 26, 81, 35, 158, 29, 249, 37, 143, 79, 50, 39, 76, 247, 134, 121, 250, 66, 134, 23, 32, 225, 162, 148, 185, 207, 183, 192, 226, 100, 40, 247, 168, 240, 163, 155, 130, 70, 158, 79, 150, 205, 233, 12, 10, 74, 202, 11, 105, 200, 186, 218, 57, 134, 51, 33, 36, 62, 151, 198, 35, 78, 32, 27, 146, 180, 81, 224, 53, 140, 135, 190, 34, 219, 46, 67, 46, 249, 10, 18, 177, 157, 218, 173, 36, 117, 65, 179, 187, 115, 142, 66, 154, 145, 100, 124, 47, 83, 226, 225, 221, 172, 61, 250, 17, 200, 198, 190, 40, 59, 166, 142, 229, 228, 169, 41, 249, 54, 154, 127, 174, 55, 143, 203, 194, 51, 172, 28, 169, 153, 37, 46, 127, 73, 142, 248, 11, 68, 9, 6, 180, 70, 170, 154, 151, 46, 108, 65, 82, 23, 245, 227, 132, 202, 111, 0, 77, 174, 137, 94, 111, 104, 77, 58, 70, 253, 26, 50, 127, 210, 100, 10, 59, 97, 86, 30, 226, 215, 31, 194, 88, 7, 220, 196, 118, 130, 50, 182, 153, 6, 69, 85, 44, 155, 145, 116, 54, 55, 216, 26, 143, 231, 113, 163, 134, 192, 195, 57, 238, 91, 80, 85, 18, 123, 237, 131, 170, 248, 3, 128, 96, 113, 182, 16, 237, 24, 200, 125, 14, 24, 159, 39, 246, 18, 37, 85, 154, 81, 145, 150, 130, 82, 30, 110, 32, 214, 209, 157, 161, 217, 167, 198, 148, 179, 15, 165, 19, 210, 120, 111, 1, 14, 65, 114, 42, 233, 133, 162, 143, 131, 208, 60, 254, 188, 14, 70, 161, 28, 71, 4, 76, 32, 140, 234, 46, 79, 112, 245, 183, 134, 87, 10, 232, 227, 131, 108, 199, 3, 253, 52, 164, 25, 127, 216, 28, 2, 209, 87, 192, 49, 242, 5, 151, 71, 59, 17, 91, 248, 83, 34, 65, 166, 10, 21, 72, 35, 164, 48, 3, 55, 187, 83, 150, 238, 213, 164, 48, 197, 182, 112, 58, 230, 173, 210, 125, 93, 79, 142, 238, 151, 124, 167, 65, 186, 152, 163, 236, 140, 216, 209, 235, 109, 97, 236, 93, 190, 249, 142, 33, 193, 210, 222, 214, 127, 205, 1, 23, 6, 207, 198, 9, 14, 243, 248, 216, 241, 122, 91, 48, 159, 181, 38, 118, 64, 232, 158, 249, 168, 3, 81, 13, 187, 188, 13, 86, 193, 103, 26, 207, 181, 96, 15, 85, 233, 234, 63, 252, 140, 141, 61, 166, 55, 82, 19, 25, 130, 241, 237, 117, 3, 39, 165, 26, 69, 232, 213, 81, 157, 158, 45, 147, 188, 132, 33, 15, 100, 221, 79, 168, 23, 150, 51, 170, 106, 240, 2, 19, 221, 176, 208, 33, 194, 135, 246, 54, 116, 33, 36, 215, 33, 114, 104, 41, 164, 125, 202, 166, 183, 92, 147, 85, 173, 32, 81, 94, 15, 205, 96, 2, 17, 119, 200, 40, 153, 53, 167, 164, 70, 166, 73, 42, 165, 168, 38, 182, 48, 244, 138, 185, 195, 45, 30, 183, 70, 171, 16, 172, 234, 110, 252, 134, 253, 163, 201, 244, 67, 57, 13, 136, 246, 227, 14, 162, 237, 113, 103, 163, 109, 100, 79, 85, 69, 223, 59, 243, 172, 203, 3, 172, 134, 5, 0, 64, 242, 232, 230, 208, 90, 206, 236, 98, 32, 208, 49, 113, 160, 90, 194, 113, 120, 93, 88, 214, 167, 85, 97, 226, 124, 115, 47, 6, 3, 10, 72, 113, 139, 180, 54, 116, 15, 47, 172, 122, 224, 55, 186, 112, 121, 164, 41, 165, 36, 212, 8, 183, 94, 71, 92, 230, 7, 85, 234, 223, 161, 183, 56, 55, 61, 194, 188, 224, 254, 84, 128, 174, 24, 56, 224, 96, 209, 24, 240, 189, 184, 95, 49, 230, 47, 7, 12, 43, 46, 76, 46, 136, 87, 171, 32, 151, 158, 227, 58, 60, 124, 191, 209, 155, 253, 62, 232, 12, 3, 145, 192, 187, 212, 247, 199, 232, 6, 8, 228, 221, 37, 151, 80, 179, 209, 98, 19, 74, 158, 153, 133, 102, 143, 219, 89, 210, 90, 240, 244, 175, 59, 139, 33, 22, 79, 32, 219, 173, 66, 32, 180, 112, 154, 61, 102, 118, 152, 198, 125, 74, 65, 214, 144, 192, 146, 209, 242, 126, 167, 211, 243, 126, 115, 188, 221, 193, 253, 38, 76, 76, 55, 205, 207, 101, 198, 168, 159, 93, 56, 167, 163, 71, 201, 228, 166, 37, 140, 7, 211, 142, 36, 76, 193, 40, 20, 229, 220, 66, 26, 84, 185, 187, 177, 58, 175, 210, 174, 20, 42, 31, 69, 253, 191, 119, 44, 93, 212, 36, 79, 168, 203, 218, 54, 20, 75, 112, 28, 129, 239, 208, 190, 254, 64, 219, 229, 0, 237, 236, 67, 73, 255, 205, 121, 2, 199, 205, 246, 167, 235, 166, 88, 132, 165, 75, 181, 98, 43, 42, 155, 68, 213, 119, 0, 114, 35, 24, 5, 73, 87, 242, 171, 126, 0, 147, 74, 177, 119, 142, 226, 81, 53, 122, 197, 243, 153, 189, 250, 10, 87, 16, 99, 221, 94, 110, 232, 130, 96, 10, 173, 127, 210, 47, 107, 172, 85, 167, 75, 190, 26, 20, 62, 61, 30, 38, 255, 124, 209, 157, 127, 98, 74, 230, 215, 47, 145, 121, 216, 198, 26, 151, 81, 178, 187, 182, 34, 238, 231, 99, 225, 7, 9, 129, 30, 127, 64, 49, 7, 4, 20, 189, 188, 48, 144, 182, 103, 71, 61, 38, 51, 179, 250, 43, 151, 111, 215, 53, 215, 76, 135, 200, 163, 86, 205, 2, 231, 71, 247, 225, 252, 55, 144, 239, 35, 74, 37, 39, 244, 254, 65, 21, 243, 119, 166, 62, 148, 123, 174, 190, 132, 191, 122, 17, 105, 47, 212, 110, 66, 237, 123, 113, 235, 212, 87, 105, 116, 155, 17, 108, 194, 209, 43, 188, 7, 242, 69, 236, 151, 58, 238, 3, 139, 232, 151, 215, 220, 86, 244, 214, 204, 215, 110, 27, 136, 29, 36, 119, 51, 248, 115, 56, 186, 181, 54, 114, 102, 214, 198, 241, 208, 142, 182, 228, 230, 6, 158, 161, 98, 106, 90, 244, 97, 168, 146, 17, 76, 84, 250, 199, 162, 114, 66, 121, 183, 17, 51, 115, 97, 51, 209, 111, 240, 175, 59, 79, 150, 34, 73, 197, 179, 123, 132, 87, 98, 187, 239, 213, 181, 43, 20, 64, 120, 29, 84, 176, 136, 60, 106, 35, 222, 61, 192, 239, 66, 145, 229, 227, 167, 149, 85, 123, 169, 255, 135, 229, 210, 241, 105, 14, 175, 134, 4, 62, 44, 35, 9, 145, 189, 205, 88, 185, 47, 138, 187, 183, 39, 51, 190, 55, 199, 68, 62, 186, 56, 161, 66, 216, 244, 168, 168, 105, 239, 124, 206, 105, 23, 144, 189, 121, 226, 144, 166, 4, 61, 148, 150, 31, 80, 187, 5, 150, 62, 63, 247, 122, 159, 224, 28, 248, 136, 103, 172, 60, 77, 26, 105, 13, 98, 233, 50, 142, 44, 143, 68, 206, 221, 26, 44, 169, 29, 251, 59, 99, 176, 131, 191, 57, 84, 148, 203, 188, 161, 104, 51, 196, 95, 243, 158, 165, 138, 28, 52, 19, 247, 137, 43, 90, 195, 232, 216, 83, 183, 177, 232, 160, 197, 238, 108, 48, 9, 158, 156, 123, 154, 191, 246, 21, 152, 79, 121, 70, 208, 24, 173, 190, 73, 107, 203, 56, 15, 184, 7, 231, 214, 24, 230, 101, 35, 195, 58, 177, 134, 176, 232, 120, 59, 204, 132, 75, 116, 185, 11, 88, 206, 217, 180, 106, 61, 47, 202, 238, 27, 131, 71, 149, 230, 214, 6, 38, 142, 192, 192, 145, 206, 248, 0, 58, 127, 229, 25, 180, 240, 220, 186, 81, 182, 137, 200, 166, 184, 240, 93, 10, 157, 249, 8, 254, 57, 41, 152, 160, 74, 197, 138, 165, 198, 141, 148, 132, 104, 133, 63, 114, 172, 68, 224, 46, 164, 121, 195, 22, 5, 111, 85, 129, 157, 158, 24, 69, 235, 189, 93, 173, 155, 30, 245, 92, 246, 104, 253, 150, 20, 249, 152, 58, 147, 195, 20, 248, 107, 45, 135, 144, 248, 224, 253, 143, 242, 56, 84, 126, 173, 177, 75, 239, 84, 60, 1, 159, 221, 63, 45, 107, 173, 154, 178, 225, 43, 230, 195, 55, 2, 94, 50, 159, 100, 107, 61, 145, 88, 86, 221, 123, 216, 32, 1, 79, 244, 76, 176, 104, 110, 158, 11, 33, 8, 112, 74, 68, 137, 140, 95, 94, 112, 90, 148, 174, 32, 185, 87, 90, 194, 221, 25, 163, 86, 153, 218, 200, 15, 12, 2, 47, 61, 109, 178, 142, 125, 252, 145, 200, 198, 105, 85, 33, 219, 95, 5, 240, 224, 120, 230, 119, 249, 64, 147, 86, 252, 223, 16, 208, 124, 247, 28, 192, 38, 38, 217, 115, 43, 126, 230, 172, 24, 128, 186, 172, 11, 222, 221, 141, 136, 2, 125, 30, 186, 201, 244, 203, 10, 74, 3, 5, 108, 0, 203, 69, 114, 55, 1, 253, 164, 77, 152, 50, 160, 4, 197, 222, 20, 137, 34, 93, 76, 45, 116, 50, 40, 194, 58, 244, 178, 214, 154, 187, 62, 146, 54, 123, 218, 223, 143, 135, 206, 19, 132, 8, 67, 96, 60, 227, 9, 94, 119, 110, 206, 78, 156, 169, 95, 206, 39, 242, 19, 131, 216, 77, 122, 191, 149, 249, 229, 153, 4, 118, 130, 109, 207, 66, 35, 173, 0, 185, 0, 109, 3, 224, 121, 87, 226, 203, 178, 84, 190, 18, 12, 73, 192, 0, 217, 131, 246, 9, 244, 155, 71, 173, 134, 218, 126, 169, 28, 62, 78, 44, 13, 111, 63, 13, 198, 95, 117, 85, 139, 80, 178, 172, 60, 23, 224, 191, 4, 216, 30, 105, 219, 24, 183, 202, 185, 163, 162, 94, 187, 168, 30, 253, 246, 231, 7, 147, 43, 104, 167, 212, 99, 195, 224, 101, 105, 185, 214, 139, 189, 136, 81, 130, 121, 126, 137, 77, 92, 206, 130, 17, 172, 86, 21, 219, 231, 17, 63, 107, 106, 48, 43, 249, 241, 95, 234, 251, 168, 7, 72, 220, 169, 203, 35, 201, 63, 219, 196, 57, 222, 249, 134, 247, 144, 3, 120, 162, 240, 125, 239, 12, 107, 0, 188, 129, 82, 28, 151, 124, 155, 237, 0, 133, 49, 216, 10, 125, 50, 231, 50, 205, 122, 67, 165, 46, 210, 189, 182, 119, 45, 100, 4, 170, 220, 190, 47, 129, 242, 147, 192, 45, 73, 240, 144, 217, 43, 153, 15, 17, 160, 68, 157, 177, 17, 165, 224, 196, 165, 190, 47, 234, 6, 10, 108, 254, 63, 150, 34, 30, 215, 204, 239, 149, 144, 21, 11, 220, 145, 4, 65, 127, 88, 186, 162, 59, 21, 45, 250, 11, 173, 164, 34, 155, 23, 55, 151, 187, 171, 105, 165, 249, 154, 38, 147, 22, 233, 62, 199, 0, 143, 8, 107, 87, 90, 228, 251, 55, 15, 56, 195, 92, 191, 223, 203, 210, 15, 20, 170, 123, 103, 29, 87, 10, 127, 50, 55, 100, 21, 31, 93, 57, 203, 102, 0, 233, 154, 57, 201, 150, 137, 131, 208, 221, 87, 74, 53, 49, 71, 198, 244, 28, 4, 140, 40, 249, 106, 53, 171, 135, 160, 132, 41, 250, 174, 246, 26, 30, 71, 198, 113, 38, 113, 130, 214, 118, 45, 163, 34, 183, 24, 6, 76, 196, 190, 64, 7, 202, 185, 172, 129, 107, 193, 151, 86, 43, 89, 230, 240, 73, 22, 204, 62, 233, 157, 148, 47, 250, 103, 196, 154, 150, 114, 59, 243, 25, 142, 71, 252, 143, 160, 156, 129, 204, 29, 213, 226, 179, 98, 112, 63, 242, 180, 244, 53, 195, 97, 18, 166, 25, 37, 146, 78, 247, 171, 201, 60, 44, 7, 129, 170, 38, 172, 169, 85, 196, 8, 147, 140, 226, 136, 64, 160, 78, 173, 164, 166, 47, 10, 34, 70, 80, 0, 177, 253, 185, 205, 83, 89, 126, 61, 55, 32, 124, 217, 156, 1, 217, 242, 20, 114, 93, 85, 66, 187, 211, 139, 120, 11, 120, 19, 250, 185, 53, 144, 223, 138, 249, 156, 39, 185, 172, 16, 81, 13, 130, 200, 212, 155, 156, 197, 233, 140, 117, 69, 8, 255, 65, 231, 195, 65, 17, 33, 143, 70, 253, 153, 160, 10, 10, 134, 225, 76, 157, 63, 5, 242, 50, 99, 204, 207, 93, 109, 173, 149, 208, 83, 87, 19, 68, 212, 20, 97, 47, 133, 144, 227, 202, 21, 171, 114, 112, 38, 150, 47, 42, 227, 153, 115, 248, 202, 235, 114, 157, 226, 117, 37, 235, 209, 36, 124, 254, 66, 254, 165, 117, 151, 51, 130, 117, 53, 23, 143, 16, 27, 183, 101, 85, 31, 9, 221, 217, 129, 182, 86, 241, 56, 77, 230, 137, 148, 242, 127, 166, 74, 168, 100, 45, 211, 63, 219, 190, 244, 128, 241, 119, 234, 232, 10, 78, 216, 159, 143, 255, 170, 24, 238, 175, 0, 133, 103, 171, 144, 55, 246, 53, 162, 228, 137, 68, 7, 31, 179, 153, 33, 9, 3, 57, 90, 113, 6, 119, 217, 148, 232, 113, 141, 74, 153, 6, 245, 174, 37, 99, 56, 113, 214, 144, 229, 122, 152, 36, 44, 250, 104, 155, 115, 135, 160, 27, 109, 178, 39, 242, 18, 229, 157, 125, 179, 39, 169, 215, 247, 31, 202, 33, 37, 88, 178, 125, 19, 168, 32, 157, 241, 13, 192, 221, 248, 235, 35, 98, 104, 98, 163, 23, 105, 142, 97, 108, 59, 32, 63, 201, 74, 189, 2, 147, 232, 107, 104, 55, 129, 211, 192, 180, 132, 85, 198, 193, 191, 186, 174, 133, 59, 246, 164, 50, 109, 235, 158, 172, 197, 17, 150, 62, 202, 213, 3, 89, 85, 148, 163, 196, 49, 177, 226, 169, 180, 74, 241, 64, 153, 56, 90, 22, 13, 194, 195, 182, 201, 255, 90, 213, 71, 198, 84, 47, 116, 239, 164, 70, 174, 76, 108, 64, 183, 79, 125, 199, 58, 128, 215, 131, 223, 213, 124, 167, 106, 15, 133, 212, 118, 170, 219, 234, 159, 86, 72, 132, 232, 40, 57, 172, 70, 118, 39, 144, 58, 39, 239, 132, 84, 54, 149, 231, 182, 96, 202, 218, 245, 121, 76, 220, 26, 200, 62, 3, 226, 142, 207, 227, 144, 123, 46, 225, 251, 48, 233, 90, 210, 52, 239, 155, 96, 174, 74, 144, 230, 80, 249, 77, 236, 137, 251, 139, 110, 107, 231, 66, 211, 126, 159, 156, 128, 120, 86, 69, 87, 129, 17, 168, 67, 151, 193, 14, 90, 52, 140, 33, 198, 194, 67, 200, 52, 194, 36, 0, 15, 158, 138, 211, 158, 176, 8, 220, 114, 43, 75, 241, 153, 121, 246, 206, 35, 178, 44, 27, 80, 208, 160, 104, 173, 245, 46, 126, 110, 223, 61, 48, 248, 13, 159, 230, 46, 96, 202, 203, 62, 180, 60, 186, 36, 148, 145, 12, 106, 239, 147, 187, 94, 149, 43, 20, 7, 252, 165, 95, 142, 82, 254, 187, 162, 153, 165, 91, 143, 33, 58, 150, 2, 130, 66, 131, 210, 182, 152, 101, 132, 211, 162, 232, 232, 92, 152, 49, 250, 197, 52, 13, 201, 98, 170, 122, 166, 109, 47, 217, 225, 157, 208, 96, 154, 173, 206, 218, 56, 12, 19, 65, 154, 205, 171, 120, 187, 143, 162, 203, 28, 254, 248, 12, 44, 78, 55, 11, 145, 140, 252, 184, 237, 238, 154, 169, 136, 185, 16, 173, 210, 114, 7, 136, 211, 30, 81, 96, 165, 40, 34, 57, 49, 96, 130, 211, 222, 106, 179, 192, 154, 232, 25, 152, 240, 77, 108, 171, 225, 115, 83, 228, 25, 244, 108, 88, 141, 14, 87, 191, 255, 7, 145, 25, 10, 210, 209, 0, 143, 109, 223, 69, 136, 69, 233, 134, 237, 174, 84, 173, 2, 244, 125, 13, 113, 73, 147, 36, 86, 97, 228, 241, 209, 134, 164, 113, 168, 70, 209, 163, 89, 206, 171, 23, 18, 4, 188, 189, 11, 220, 50, 228, 186, 35, 56, 136, 208, 135, 178, 139, 151, 244, 109, 198, 86, 226, 132, 153, 157, 146, 151, 173, 218, 93, 26, 182, 221, 204, 121, 207, 16, 123, 95, 83, 168, 10, 61, 46, 37, 176, 173, 71, 36, 35, 234, 121, 223, 27, 201, 174, 62, 54, 80, 41, 10, 142, 138, 32, 72, 145, 115, 75, 109, 129, 90, 45, 138, 168, 220, 34, 36, 152, 43, 177, 54, 97, 198, 238, 53, 117, 157, 132, 19, 239, 68, 182, 105, 22, 113, 114, 42, 191, 112, 10, 86, 6, 155, 111, 100, 210, 10, 77, 1, 157, 220, 38, 191, 228, 136, 229, 11, 4, 73, 189, 65, 59, 18, 158, 117, 140, 59, 83, 59, 9, 16, 210, 230, 115, 108, 150, 208, 33, 255, 51, 33, 95, 1, 186, 160, 14, 45, 159, 98, 203, 82, 229, 147, 5, 205, 199, 36, 115, 151, 1, 23, 212, 224, 185, 41, 174, 166, 33, 59, 40, 185, 21, 161, 137, 54, 35, 121, 244, 20, 204, 148, 17, 231, 20, 34, 211, 215, 214, 244, 177, 28, 180, 42, 46, 38, 148, 195, 224, 226, 91, 209, 33, 3, 138, 175, 190, 86, 242, 19, 205, 196, 188, 111, 203, 218, 80, 156, 151, 98, 88, 159, 111, 166, 44, 149, 38, 92, 139, 204, 244, 175, 111, 150, 168, 195, 44, 121, 191, 26, 33, 149, 232, 121, 177, 36, 205, 238, 230, 195, 77, 233, 247, 87, 220, 0, 92, 33, 118, 114, 221, 49, 83, 195, 57, 141, 248, 123, 112, 45, 76, 12, 157, 126, 177, 78, 81, 156, 220, 114, 99, 141, 9, 124, 44, 241, 77, 95, 185, 135, 225, 166, 0, 117, 226, 115, 149, 182, 211, 197, 36, 245, 26, 46, 43, 129, 111, 78, 12, 142, 161, 240, 154, 133, 192, 78, 153, 10, 92, 205, 73, 48, 231, 71, 89, 49, 219, 222, 113, 163, 90, 216, 202, 94, 197, 190, 212, 252, 102, 101, 177, 189, 86, 191, 184, 198, 73, 111, 207, 239, 210, 143, 155, 118, 9, 238, 212, 255, 8, 147, 51, 140, 154, 15, 202, 220, 119, 94, 68, 230, 240, 4, 88, 254, 63, 45, 122, 127, 105, 248, 4, 180, 1, 227, 44, 55, 63, 21, 180, 238, 113, 175, 26, 241, 248, 181, 93, 99, 160, 162, 4, 11, 128, 242, 41, 137, 239, 166, 214, 101, 61, 251, 195, 185, 208, 78, 169, 27, 174, 49, 207, 33, 44, 74, 5, 239, 151, 88, 94, 233, 146, 64, 239, 182, 228, 87, 147, 30, 221, 133, 95, 224, 248, 118, 94, 3, 118, 79, 106, 128, 1, 199, 222, 202, 4, 39, 126, 94, 161, 221, 182, 130, 184, 222, 88, 85, 3, 161, 52, 202, 112, 44, 204, 126, 61, 239, 58, 203, 67, 205, 52, 43, 143, 164, 231, 42, 237, 152, 183, 74, 213, 29, 176, 248, 84, 92, 179, 2, 103, 77, 121, 176, 124, 169, 43, 52, 70, 188, 188, 192, 182, 141, 220, 5, 209, 87, 158, 135, 254, 152, 37, 219, 75, 184, 67, 58, 120, 96, 176, 133, 96, 21, 175, 223, 172, 157, 246, 18, 116, 216, 126, 60, 203, 237, 159, 42, 2, 26, 191, 180, 7, 219, 24, 195, 43, 67, 3, 218, 137, 68, 142, 163, 200, 152, 222, 26, 108, 91, 171, 11, 70, 44, 56, 102, 37, 176, 44, 117, 32, 149, 183, 142, 40, 1, 46, 171, 144, 238, 40, 59, 39, 162, 60, 180, 62, 11, 5, 159, 132, 217, 214, 130, 136, 205, 142, 122, 31, 93, 69, 19, 121, 141, 171, 39, 115, 208, 160, 115, 150, 159, 87, 196, 179, 203, 69, 107, 58, 117, 218, 82, 212, 191, 111, 177, 29, 28, 166, 208, 233, 15, 134, 19, 142, 110, 215, 255, 36, 208, 108, 59, 31, 13, 88, 53, 133, 223, 119, 125, 208, 127, 243, 3, 12, 124, 203, 19, 184, 136, 112, 6, 120, 130, 29, 58, 102, 53, 46, 49, 98, 165, 211, 129, 155, 247, 30, 24, 247, 233, 41, 217, 15, 215, 120, 230, 1, 129, 43, 104, 227, 28, 110, 52, 140, 245, 162, 191, 48, 73, 36, 110, 47, 57, 141, 199, 65, 69, 140, 195, 82, 19, 14, 100, 228, 137, 206, 62, 135, 42, 47, 110, 88, 211, 202, 170, 159, 33, 35, 95, 215, 146, 213, 117, 206, 47, 119, 145, 158, 125, 219, 230, 13, 80, 154, 177, 58, 150, 111, 226, 87, 163, 240, 180, 155, 10, 213, 195, 7, 44, 243, 64, 102, 248, 198, 162, 198, 2, 211, 71, 214, 160, 86, 63, 121, 146, 70, 255, 74, 174, 246, 182, 17, 76, 4, 11, 64, 178, 98, 227, 6, 251, 198, 77, 78, 188, 138, 43, 220, 204, 184, 46, 249, 143, 221, 20, 156, 65, 207, 94, 221, 175, 253, 137, 206, 152, 205, 37, 175, 55, 160, 179, 226, 77, 41, 220, 95, 221, 229, 242, 39, 246, 167, 184, 87, 151, 61, 103, 132, 96, 216, 166, 40, 188, 214, 46, 71, 170, 254, 177, 82, 89, 30, 46, 32, 118, 153, 172, 244, 38, 88, 52, 20, 18, 244, 215, 0, 78, 39, 170, 89, 230, 148, 76, 249, 32, 18, 182, 81, 166, 116, 225, 212, 110, 62, 218, 124, 156, 179, 72, 168, 47, 97, 142, 109, 125, 0, 243, 62, 100, 49, 21, 14, 197, 121, 165, 91, 132, 117, 41, 148, 9, 208, 8, 223, 28, 122, 131, 24, 76, 45, 97, 5, 66, 206, 45, 61, 154, 236, 199, 180, 70, 203, 84, 140, 69, 243, 108, 49, 148, 25, 29, 173, 210, 96, 148, 145, 88, 234, 107, 63, 173, 207, 69, 246, 233, 5, 43, 124, 165, 40, 95, 105, 7, 236, 43, 33, 78, 178, 131, 67, 113, 188, 20, 7, 169, 172, 185, 84, 170, 36, 218, 78, 21, 129, 46, 131, 117, 50, 129, 13, 102, 178, 193, 44, 128, 193, 119, 57, 85, 249, 115, 249, 40, 25, 87, 171, 136, 115, 40, 8, 180, 126, 170, 34, 83, 175, 215, 158, 55, 254, 180, 215, 100, 229, 52, 21, 122, 111, 178, 91, 109, 102, 202, 156, 201, 176, 63, 128, 78, 201, 26, 85, 202, 172, 68, 84, 0, 209, 48, 62, 172, 104, 84, 148, 51, 92, 241, 135, 72, 200, 108, 23, 166, 26, 99, 63, 26, 204, 171, 101, 106, 190, 99, 234, 212, 167, 230, 171, 94, 208, 35, 139, 194, 51, 24, 33, 122, 104, 241, 4, 232, 17, 10, 174, 50, 231, 189, 170, 202, 21, 47, 144, 213, 193, 181, 93, 82, 62, 130, 143, 95, 250, 62, 38, 6, 9, 181, 234, 75, 249, 118, 213, 140, 30, 73, 76, 49, 187, 125, 54, 190, 176, 188, 233, 153, 127, 222, 102, 53, 133, 91, 68, 161, 191, 7, 165, 20, 192, 8, 98, 223, 24, 131, 10, 239, 157, 136, 16, 152, 188, 167, 96, 176, 232, 25, 192, 54, 14, 171, 78, 68, 65, 133, 97, 177, 26, 186, 11, 27, 97, 234, 148, 117, 103, 245, 141, 192, 135, 143, 55, 187, 97, 205, 80, 10, 192, 43, 19, 224, 149, 239, 229, 88, 139, 232, 51, 88, 181, 174, 174, 84, 24, 31, 101, 94, 33, 223, 17, 145, 113, 247, 246, 191, 162, 254, 208, 242, 25, 209, 96, 151, 242, 115, 142, 209, 213, 232, 73, 26, 227, 215, 201, 160, 40, 165, 123, 53, 174, 122, 196, 253, 40, 124, 224, 213, 182, 150, 236, 159, 184, 83, 240, 117, 100, 83, 61, 115, 54, 77, 91, 152, 248, 195, 167, 47, 241, 186, 137, 57, 139, 6, 114, 196, 117, 129, 89, 184, 215, 148, 64, 82, 230, 145, 166, 97, 106, 78, 237, 53, 31, 2, 13, 124, 51, 7, 119, 156, 98, 95, 241, 181, 122, 180, 7, 96, 15, 226, 211, 234, 80, 153, 202, 120, 233, 32, 27, 213, 168, 123, 233, 146, 246, 51, 179, 11, 20, 41, 99, 88, 174, 6, 46, 44, 52, 51, 221, 37, 255, 239, 91, 154, 13, 151, 49, 56, 184, 126, 254, 249, 48, 230, 246, 72, 66, 67, 54, 26, 83, 82, 249, 152, 152, 71, 205, 81, 179, 104, 67, 225, 130, 230, 0, 100, 108, 248, 61, 174, 116, 24, 57, 107, 168, 17, 85, 29, 74, 116, 81, 212, 143, 190, 114, 179, 91, 157, 236, 217, 9, 9, 164, 179, 68, 60, 172, 36, 166, 52, 158, 30, 204, 192, 155, 108, 78, 55, 205, 15, 136, 70, 195, 205, 43, 160, 2, 46, 1, 193, 83, 105, 230, 150, 129, 19, 57, 208, 131, 34, 118, 27, 101, 243, 210, 219, 26, 170, 251, 46, 141, 115, 10, 43, 55, 42, 223, 103, 69, 147, 203, 165, 175, 72, 173, 102, 252, 154, 226, 244, 64, 189, 62, 80, 45, 175, 198, 117, 200, 236, 201, 237, 246, 52, 174, 183, 26, 107, 242, 219, 67, 5, 179, 71, 255, 139, 201, 74, 80, 9, 176, 231, 208, 252, 104, 138, 23, 24, 239, 20, 18, 125, 74, 0, 27, 18, 255, 121, 28, 76, 230, 206, 206, 21, 8, 52, 54, 173, 247, 139, 252, 144, 182, 11, 201, 148, 7, 175, 194, 160, 189, 102, 24, 36, 213, 144, 161, 92, 69, 170, 28, 254, 212, 143, 0, 125, 88, 92, 89, 100, 43, 86, 70, 231, 58, 182, 25, 228, 62, 44, 196, 123, 250, 177, 205, 229, 243, 73, 166, 186, 145, 72, 146, 239, 145, 137, 81, 125, 24, 241, 75, 27, 54, 239, 255, 251, 192, 171, 12, 99, 195, 186, 20, 212, 183, 9, 93, 217, 252, 128, 191, 214, 103, 140, 195, 61, 153, 107, 76, 209, 49, 47, 159, 20, 168, 74, 75, 187, 156, 226, 158, 211, 190, 80, 153, 5, 43, 126, 167, 62, 29, 215, 207, 173, 62, 125, 192, 237, 90, 41, 37, 87, 14, 41, 108, 134, 183, 113, 141, 146, 24, 121, 174, 52, 14, 245, 121, 190, 34, 12, 39, 163, 238, 32, 187, 237, 26, 81, 81, 164, 123, 45, 198, 179, 252, 30, 174, 164, 125, 98, 249, 244, 4, 116, 77, 99, 237, 180, 206, 33, 28, 94, 61, 134, 29, 136, 29, 236, 244, 129, 67, 174, 136, 26, 120, 92, 103, 53, 156, 244, 247, 21, 145, 252, 25, 89, 235, 158, 170, 1, 59, 1, 199, 239, 194, 218, 168, 129, 93, 184, 190, 195, 184, 186, 123, 117, 43, 25, 105, 234, 82, 78, 83, 197, 77, 159, 164, 211, 135, 235, 142, 35, 178, 57, 53, 10, 188, 22, 82, 184, 36, 61, 56, 78, 11, 238, 83, 35, 20, 125, 114, 142, 202, 162, 7, 42, 3, 6, 227, 254, 9, 175, 45, 180, 9, 207, 206, 146, 248, 165, 107, 6, 74, 188, 83, 111, 99, 125, 182, 90, 70, 224, 136, 17, 193, 97, 149, 101, 71, 23, 23, 45, 22, 153, 191, 241, 129, 110, 215, 3, 151, 201, 100, 151, 114, 144, 38, 65, 178, 192, 156, 206, 154, 184, 54, 18, 248, 171, 37, 101, 47, 214, 68, 243, 57, 71, 33, 240, 58, 62, 105, 102, 254, 15, 5, 164, 199, 131, 35, 52, 165, 43, 138, 244, 123, 167, 240, 210, 238, 40, 166, 67, 188, 210, 119, 221, 96, 5, 141, 80, 174, 83, 9, 210, 18, 56, 110, 50, 142, 41, 121, 156, 116, 25, 81, 226, 112, 107, 20, 222, 215, 191, 77, 22, 73, 29, 28, 248, 159, 45, 79, 125, 119, 202, 41, 86, 102, 160, 19, 164, 126, 206, 52, 99, 124, 137, 190, 98, 80, 43, 149, 99, 132, 213, 172, 3, 203, 195, 198, 194, 11, 96, 248, 99, 106, 255, 149, 174, 80, 166, 149, 142, 177, 163, 45, 8, 51, 233, 178, 36, 208, 94, 102, 107, 30, 186, 215, 30, 217, 173, 117, 220, 105, 43, 153, 226, 234, 119, 182, 11, 248, 89, 72, 139, 234, 4, 87, 6, 120, 197, 15, 115, 10, 230, 36, 147, 217, 132, 200, 120, 46, 164, 235, 6, 103, 80, 123, 114, 197, 145, 125, 112, 239, 77, 243, 240, 131, 177, 245, 118, 61, 140, 138, 232, 136, 33, 39, 64, 24, 3, 70, 173, 148, 230, 80, 140, 142, 219, 237, 125, 210, 236, 104, 162, 117, 231, 133, 150, 231, 247, 214, 207, 87, 200, 4, 255, 228, 46, 121, 179, 53, 224, 33, 225, 105, 31, 249, 192, 77, 99, 67, 148, 155, 46, 153, 95, 65, 183, 114, 101, 116, 90, 228, 164, 210, 64, 216, 147, 128, 112, 41, 161, 183, 170, 130, 109, 146, 188, 214, 102, 134, 113, 58, 29, 250, 153, 184, 130, 105, 230, 16, 113, 111, 219, 60, 195, 190, 202, 65, 35, 250, 254, 251, 20, 81, 153, 175, 124, 125, 195, 171, 231, 0, 8, 255, 191, 101, 1, 183, 41, 7, 141, 13, 125, 157, 12, 83, 158, 78, 221, 132, 211, 0, 226, 74, 114, 210, 23, 20, 218, 188, 102, 83, 124, 182, 52, 6, 105, 53, 215, 16, 95, 174, 219, 165, 152, 69, 47, 201, 140, 112, 198, 71, 1, 77, 95, 138, 231, 165, 190, 124, 231, 199, 249, 254, 190, 216, 146, 65, 231, 160, 182, 203, 215, 172, 48, 209, 225, 10, 233, 31, 234, 169, 178, 38, 191, 194, 82, 27, 178, 13, 192, 148, 70, 44, 162, 30, 210, 189, 95, 164, 170, 228, 48, 236, 152, 194, 3, 216, 87, 238, 103, 73, 91, 189, 177, 135, 200, 147, 13, 209, 228, 142, 168, 27, 242, 45, 188, 174, 139, 156, 13, 201, 227, 11, 197, 196, 164, 84, 52, 125, 54, 140, 28, 121, 197, 88, 178, 18, 170, 162, 9, 66, 191, 96, 165, 229, 182, 205, 72, 53, 254, 52, 7, 227, 103, 85, 45, 254, 111, 207, 106, 2, 163, 61, 88, 176, 77, 104, 29, 32, 142, 123, 109, 148, 50, 201, 7, 204, 172, 107, 199, 103, 1, 228, 69, 21, 115, 162, 89, 130, 110, 127, 25, 138, 245, 150, 38, 152, 241, 202, 44, 11, 251, 193, 121, 150, 108, 182, 215, 26, 222, 240, 36, 63, 67, 92, 164, 3, 159, 68, 45, 107, 140, 55, 218, 134, 126, 215, 44, 140, 204, 173, 53, 103, 146, 94, 64, 26, 223, 36, 109, 207, 98, 35, 145, 215, 64, 100, 98, 25, 37, 51, 34, 115, 61, 199, 219, 105, 91, 10, 149, 116, 207, 111, 101, 190, 191, 240, 24, 37, 198, 186, 239, 86, 113, 117, 238, 166, 20, 128, 243, 129, 36, 150, 168, 133, 252, 62, 168, 44, 227, 100, 76, 25, 248, 91, 145, 22, 255, 193, 23, 175, 106, 149, 104, 230, 193, 82, 214, 246, 215, 37, 85, 103, 99, 60, 83, 149, 92, 251, 89, 26, 134, 197, 247, 64, 174, 151, 219, 152, 87, 81, 12, 106, 23, 133, 90, 20, 170, 73, 19, 111, 244, 73, 110, 102, 201, 217, 245, 185, 158, 174, 63, 250, 6, 59, 218, 103, 245, 194, 14, 110, 17, 115, 177, 204, 9, 163, 74, 80, 209, 254, 103, 87, 170, 7, 230, 118, 43, 215, 203, 182, 87, 202, 41, 131, 44, 152, 27, 143, 152, 55, 194, 192, 16, 44, 217, 190, 247, 122, 89, 135, 210, 66, 76, 202, 2, 164, 93, 180, 189, 158, 36, 250, 49, 223, 254, 7, 241, 62, 193, 236, 182, 117, 159, 225, 44, 209, 76, 237, 141, 237, 220, 35, 138, 132, 224, 99, 11, 63, 156, 88, 129, 136, 63, 97, 155, 29, 204, 13, 0, 120, 7, 207, 25, 88, 222, 114, 23, 161, 240, 162, 40, 112, 72, 250, 227, 63, 23, 47, 197, 72, 241, 240, 197, 145, 221, 126, 92, 216, 129, 201, 234, 14, 5, 47, 31, 242, 173, 43, 236, 14, 231, 170, 188, 72, 49, 7, 134, 82, 110, 1, 83, 32, 26, 126, 213, 159, 224, 116, 130, 145, 13, 9, 119, 36, 8, 113, 142, 182, 159, 85, 196, 183, 56, 98, 169, 164, 122, 75, 12, 29, 197, 46, 118, 193, 195, 16, 88, 152, 78, 56, 190, 231, 159, 201, 156, 79, 119, 177, 166, 33, 139, 183, 141, 71, 186, 218, 224, 62, 84, 140, 94, 1, 182, 146, 226, 249, 113, 225, 68, 250, 74, 12, 64, 34, 146, 189, 26, 181, 201, 178, 95, 85, 74, 72, 90, 142, 77, 82, 191, 199, 201, 57, 112, 32, 212, 100, 8, 46, 207, 234, 140, 188, 56, 231, 125, 138, 69, 23, 28, 127, 198, 182, 227, 19, 107, 232, 187, 17, 71, 243, 42, 166, 248, 230, 74, 135, 200, 11, 3, 190, 79, 161, 71, 240, 246, 203, 57, 240, 127, 230, 159, 225, 254, 215, 194, 79, 179, 51, 198, 192, 53, 255, 250, 44, 46, 217, 186, 104, 186, 128, 124, 220, 13, 78, 139, 156, 1, 113, 184, 171, 68, 92, 3, 188, 185, 173, 173, 99, 49, 100, 216, 167, 144, 241, 224, 133, 214, 1, 172, 161, 237, 101, 120, 102, 64, 155, 175, 94, 176, 174, 22, 161, 65, 218, 120, 115, 156, 113, 222, 214, 181, 112, 181, 171, 61, 72, 113, 250, 102, 116, 95, 214, 8, 202, 42, 221, 234, 77, 225, 36, 253, 45, 1, 255, 218, 16, 233, 149, 227, 117, 101, 145, 204, 210, 46, 88, 207, 192, 140, 98, 141, 78, 214, 198, 184, 207, 189, 6, 61, 244, 21, 92, 117, 41, 206, 27, 134, 153, 243, 220, 162, 117, 48, 118, 173, 234, 132, 84, 78, 251, 240, 44, 151, 8, 219, 251, 97, 136, 105, 185, 12, 200, 153, 76, 71, 255, 114, 172, 104, 129, 102, 88, 227, 93, 23, 105, 216, 71, 166, 213, 204, 229, 96, 63, 19, 0, 173, 8, 76, 146, 132, 151, 255, 17, 179, 93, 194, 116, 130, 188, 90, 202, 38, 37, 3, 122, 140, 202, 9, 172, 196, 3, 178, 107, 198, 109, 75, 62, 194, 152, 43, 115, 24, 14, 27, 215, 13, 50, 126, 111, 195, 25, 240, 105, 15, 75, 137, 67, 134, 109, 176, 157, 186, 216, 79, 90, 102, 28, 31, 235, 63, 140, 206, 98, 222, 137, 19, 57, 46, 229, 124, 153, 255, 127, 144, 132, 148, 158, 56, 167, 42, 56, 14, 144, 84, 21, 108, 135, 172, 0, 8, 221, 200, 24, 85, 211, 24, 253, 237, 242, 151, 202, 192, 144, 242, 181, 41, 22, 224, 194, 43, 188, 113, 129, 18, 111, 245, 102, 221, 3, 28, 65, 16, 147, 94, 3, 159, 171, 15, 6, 230, 76, 184, 200, 214, 25, 101, 145, 233, 7, 47, 246, 240, 141, 127, 16, 197, 181, 210, 205, 33, 95, 73, 30, 135, 116, 43, 195, 174, 246, 64, 122, 13, 53, 0, 30, 7, 221, 69, 66, 131, 200, 5, 0, 12, 226, 77, 188, 100, 189, 184, 71, 57, 23, 160, 234, 114, 203, 76, 85, 227, 181, 79, 157, 107, 41, 58, 183, 179, 123, 74, 93, 161, 32, 6, 185, 249, 177, 171, 116, 203, 167, 94, 224, 52, 242, 119, 223, 247, 97, 128, 241, 129, 41, 187, 169, 148, 122, 241, 107, 106, 76, 45, 47, 112, 36, 16, 236, 111, 119, 240, 156, 13, 134, 26, 12, 48, 141, 234, 186, 220, 207, 159, 0, 86, 201, 120, 247, 184, 51, 149, 213, 97, 253, 23, 213, 131, 99, 158, 27, 49, 174, 183, 185, 147, 247, 50, 31, 182, 35, 7, 235, 233, 155, 220, 232, 9, 47, 215, 250, 107, 145, 71, 17, 14, 218, 108, 211, 241, 208, 53, 154, 69, 143, 147, 73, 112, 135, 42, 65, 78, 158, 185, 62, 69, 132, 86, 198, 181, 93, 238, 163, 183, 14, 18, 134, 162, 145, 167, 83, 78, 86, 187, 245, 246, 60, 227, 64, 91, 93, 142, 98, 144, 110, 12, 224, 223, 180, 45, 237, 201, 83, 70, 225, 181, 102, 145, 74, 123, 55, 101, 225, 61, 242, 192, 154, 254, 60, 65, 53, 180, 198, 166, 193, 130, 49, 255, 164, 102, 179, 42, 15, 116, 82, 205, 110, 181, 252, 19, 129, 101, 88, 91, 152, 88, 211, 9, 168, 99, 83, 49, 126, 27, 10, 226, 7, 110, 157, 120, 129, 51, 181, 141, 3, 204, 222, 244, 145, 185, 144, 189, 120, 137, 165, 182, 214, 207, 198, 155, 109, 81, 132, 254, 241, 100, 223, 172, 108, 102, 156, 226, 147, 145, 148, 223, 188, 249, 91, 46, 38, 247, 158, 159, 70, 2, 155, 167, 157, 4, 255, 185, 185, 146, 170, 76, 237, 41, 189, 181, 230, 136, 197, 5, 126, 63, 111, 129, 131, 185, 68, 105, 30, 15, 14, 165, 165, 39, 200, 255, 128, 143, 23, 217, 172, 151, 7, 29, 46, 77, 52, 38, 134, 63, 126, 87, 199, 8, 242, 47, 182, 182, 34, 123, 45, 177, 71, 180, 76, 74, 184, 25, 102, 151, 164, 133, 198, 31, 30, 121, 36, 219, 101, 28, 57, 212, 147, 222, 0, 53, 205, 8, 136, 118, 176, 77, 136, 182, 196, 237, 6, 184, 34, 27, 147, 237, 83, 68, 101, 37, 145, 72, 236, 186, 68, 136, 170, 107, 48, 29, 238, 219, 155, 173, 173, 53, 169, 211, 195, 122, 111, 125, 229, 100, 95, 211, 188, 8, 186, 49, 167, 255, 70, 66, 170, 42, 136, 166, 152, 17, 28, 143, 208, 116, 194, 226, 62, 238, 234, 85, 102, 176, 127, 11, 83, 179, 121, 219, 24, 177, 178, 139, 143, 90, 84, 136, 106, 26, 104, 231, 79, 158, 211, 140, 21, 206, 137, 242, 209, 63, 162, 192, 227, 81, 199, 41, 1, 0, 180, 179, 198, 154, 26, 206, 171, 3, 116, 163, 61, 229, 2, 94, 129, 76, 145, 6, 118, 0, 78, 149, 160, 22, 244, 216, 100, 212, 191, 178, 84, 220, 159, 197, 97, 6, 190, 41, 248, 0, 206, 109, 225, 144, 111, 123, 82, 214, 115, 115, 73, 143, 68, 169, 175, 43, 136, 25, 161, 210, 99, 183, 164, 206, 32, 162, 189, 90, 12, 232, 25, 59, 70, 77, 197, 218, 77, 50, 133, 248, 172, 213, 152, 23, 146, 164, 162, 17, 50, 149, 25, 234, 110, 2, 235, 199, 35, 187, 240, 215, 209, 253, 128, 61, 139, 43, 177, 82, 65, 4, 227, 124, 32, 140, 183, 61, 101, 33, 203, 248, 215, 28, 87, 156, 224, 219, 246, 153, 254, 141, 192, 199, 190, 137, 236, 62, 63, 32, 72, 1, 156, 155, 218, 151, 235, 253, 251, 208, 253, 42, 157, 198, 230, 53, 91, 158, 218, 242, 6, 198, 52, 51, 252, 221, 69, 127, 54, 178, 17, 72, 53, 244, 87, 19, 210, 89, 189, 188, 15, 216, 123, 196, 127, 30, 147, 54, 204, 41, 198, 172, 160, 144, 191, 58, 104, 52, 10, 0, 114, 37, 103, 121, 57, 77, 53, 166, 13, 206, 164, 118, 229, 173, 41, 217, 235, 170, 178, 145, 15, 237, 246, 107, 42, 15, 82, 136, 138, 10, 149, 170, 214, 166, 190, 0, 116, 33, 193, 221, 78, 116, 212, 99, 210, 189, 226, 240, 35, 97, 221, 169, 29, 12, 203, 231, 116, 169, 213, 176, 214, 84, 251, 74, 175, 162, 109, 250, 246, 171, 142, 90, 90, 107, 165, 127, 56, 113, 6, 36, 7, 87, 12, 163, 132, 72, 25, 229, 253, 48, 100, 72, 39, 52, 199, 155, 104, 19, 242, 240, 63, 92, 176, 71, 221, 41, 168, 179, 150, 247, 57, 22, 168, 200, 172, 158, 4, 33, 120, 136, 234, 169, 25, 150, 44, 125, 178, 137, 56, 115, 34, 162, 81, 185, 222, 123, 53, 236, 33, 121, 1, 82, 79, 251, 96, 91, 64, 224, 238, 117, 247, 199, 92, 110, 60, 17, 129, 72, 50, 235, 156, 192, 218, 219, 11, 88, 17, 137, 150, 7, 29, 100, 163, 196, 229, 151, 229, 182, 51, 63, 119, 2, 216, 41, 38, 239, 25, 11, 155, 191, 65, 149, 109, 61, 73, 184, 68, 169, 46, 2, 248, 254, 45, 253, 159, 99, 210, 26, 50, 74, 87, 10, 37, 227, 238, 49, 206, 58, 113, 24, 29, 243, 90, 212, 198, 148, 110, 71, 154, 4, 102, 46, 109, 238, 12, 250, 150, 21, 152, 195, 90, 96, 58, 215, 115, 251, 77, 222, 75, 142, 48, 6, 248, 44, 118, 88, 110, 35, 19, 14, 108, 187, 73, 102, 235, 55, 21, 138, 160, 165, 170, 154, 109, 103, 158, 60, 38, 213, 185, 206, 228, 13, 72, 129, 104, 116, 225, 195, 59, 234, 11, 207, 155, 59, 9, 109, 63, 65, 73, 31, 144, 233, 241, 132, 124, 129, 116, 94, 88, 56, 175, 238, 166, 116, 225, 154, 140, 45, 26, 178, 76, 215, 19, 162, 147, 184, 89, 72, 96, 18, 6, 183, 75, 87, 120, 113, 31, 70, 229, 121, 21, 137, 63, 62, 21, 11, 197, 229, 118, 213, 12, 3, 232, 193, 157, 202, 215, 65, 205, 225, 8, 97, 70, 237, 133, 23, 55, 190, 127, 4, 251, 143, 131, 68, 242, 15, 137, 86, 149, 184, 17, 44, 62, 155, 235, 175, 123, 235, 227, 112, 252, 14, 119, 162, 220, 18, 82, 76, 126, 140, 234, 137, 242, 104, 171, 231, 42, 27, 227, 127, 31, 0, 169, 246, 178, 187, 125, 172, 107, 81, 126, 47, 150, 246, 249, 212, 22, 75, 2, 74, 14, 208, 27, 169, 184, 192, 209, 40, 189, 60, 182, 99, 125, 240, 159, 110, 103, 34, 59, 233, 199, 171, 148, 185, 174, 13, 126, 39, 199, 142, 191, 197, 41, 25, 117, 204, 179, 106, 192, 185, 119, 40, 164, 63, 36, 197, 101, 207, 253, 30, 61, 86, 157, 142, 185, 253, 29, 151, 37, 19, 169, 13, 178, 200, 208, 95, 226, 158, 0, 230, 2, 53, 71, 158, 192, 223, 230, 148, 9, 104, 165, 108, 85, 76, 75, 51, 174, 247, 85, 29, 48, 129, 49, 162, 231, 69, 127, 29, 18, 65, 117, 221, 96, 115, 252, 25, 190, 210, 102, 158, 225, 203, 132, 167, 169, 36, 184, 117, 233, 66, 166, 181, 84, 0, 39, 21, 189, 98, 138, 141, 248, 218, 50, 157, 146, 199, 235, 121, 93, 173, 29, 218, 126, 179, 119, 243, 108, 216, 132, 66, 97, 203, 239, 137, 52, 30, 101, 32, 179, 48, 53, 248, 81, 210, 58, 130, 56, 173, 32, 172, 202, 75, 77, 217, 152, 173, 176, 235, 180, 35, 224, 217, 0, 1, 214, 106, 231, 73, 132, 72, 196, 76, 126, 244, 128, 200, 220, 84, 24, 206, 4, 20, 62, 1, 144, 39, 72, 99, 155, 227, 37, 99, 44, 201, 161, 23, 220, 18, 94, 129, 205, 93, 62, 195, 115, 232, 254, 105, 55, 104, 50, 88, 149, 186, 55, 167, 239, 92, 130, 55, 143, 196, 255, 126, 64, 116, 108, 226, 62, 93, 78, 38, 14, 236, 91, 165, 134, 234, 74, 10, 30, 7, 220, 191, 30, 99, 90, 136, 97, 240, 156, 173, 90, 49, 238, 62, 3, 245, 141, 10, 19, 1, 81, 94, 227, 42, 117, 69, 73, 148, 161, 15, 193, 111, 46, 147, 53, 34, 193, 99, 148, 93, 21, 140, 223, 111, 202, 239, 1, 22, 72, 238, 163, 69, 161, 156, 168, 202, 56, 255, 105, 124, 56, 90, 48, 17, 182, 255, 161, 202, 187, 10, 53, 178, 52, 201, 183, 149, 251, 26, 123, 86, 116, 202, 162, 178, 239, 233, 103, 33, 246, 78, 120, 116, 185, 102, 92, 144, 47, 34, 97, 211, 163, 61, 214, 80, 86, 190, 203, 234, 153, 108, 206, 123, 255, 175, 173, 221, 165, 99, 4, 232, 119, 45, 184, 246, 66, 135, 125, 202, 0, 117, 113, 13, 171, 251, 117, 120, 184, 250, 90, 60, 94, 106, 85, 107, 70, 218, 32, 34, 12, 161, 141, 212, 95, 2, 38, 252, 73, 229, 237, 135, 123, 250, 15, 9, 57, 28, 75, 125, 129, 200, 98, 178, 125, 31, 60, 162, 135, 7, 207, 175, 115, 177, 171, 15, 92, 41, 84, 155, 54, 44, 235, 73, 216, 137, 153, 141, 9, 70, 109, 109, 116, 215, 131, 210, 161, 185, 197, 188, 238, 123, 173, 218, 240, 79, 164, 252, 50, 127, 174, 218, 62, 62, 145, 196, 104, 141, 221, 134, 221, 75, 97, 180, 232, 197, 104, 171, 20, 81, 137, 211, 227, 191, 224, 189, 20, 31, 111, 35, 223, 111, 166, 22, 15, 229, 177, 224, 87, 40, 217, 177, 208, 176, 145, 232, 217, 100, 159, 218, 152, 207, 11, 236, 245, 55, 155, 114, 147, 27, 239, 175, 143, 220, 5, 131, 114, 48, 132, 133, 115, 219, 17, 132, 166, 90, 104, 44, 89, 185, 145, 64, 86, 235, 59, 142, 94, 150, 12, 142, 44, 125, 200, 31, 18, 226, 119, 120, 252, 16, 203, 234, 124, 250, 82, 51, 98, 57, 125, 238, 215, 129, 43, 206, 140, 172, 186, 167, 243, 241, 198, 146, 221, 223, 234, 148, 41, 228, 253, 171, 75, 143, 130, 152, 171, 198, 171, 138, 218, 250, 29, 108, 93, 58, 222, 251, 146, 141, 186, 25, 140, 194, 65, 13, 127, 84, 9, 151, 9, 135, 94, 94, 190, 5, 35, 113, 87, 121, 57, 229, 130, 230, 79, 151, 113, 170, 53, 62, 21, 237, 59, 150, 13, 177, 214, 63, 255, 198, 4, 33, 16, 251, 34, 41, 183, 105, 19, 118, 11, 80, 99, 134, 7, 139, 117, 197, 206, 39, 81, 148, 163, 240, 56, 255, 50, 34, 130, 213, 222, 243, 220, 187, 23, 221, 52, 174, 169, 43, 222, 1, 5, 72, 220, 183, 13, 208, 197, 16, 18, 222, 110, 189, 90, 132, 178, 78, 63, 177, 80, 44, 156, 98, 224, 163, 127, 191, 180, 94, 184, 130, 214, 190, 81, 84, 30, 219, 216, 156, 200, 166, 222, 154, 213, 75, 216, 175, 42, 179, 86, 51, 149, 241, 96, 134, 113, 47, 27, 249, 100, 78, 61, 125, 163, 156, 51, 89, 154, 69, 112, 228, 136, 64, 143, 255, 2, 207, 122, 113, 136, 68, 245, 87, 32, 25, 59, 5, 85, 49, 49, 61, 88, 187, 138, 201, 117, 202, 22, 130, 217, 80, 237, 62, 52, 150, 42, 144, 69, 240, 71, 217, 25, 86, 194, 25, 10, 99, 222, 214, 138, 176, 12, 209, 78, 30, 231, 21, 185, 130, 168, 207, 13, 209, 113, 76, 229, 21, 3, 83, 179, 166, 52, 6, 158, 24, 158, 58, 155, 93, 239, 101, 68, 128, 106, 130, 196, 58, 175, 196, 139, 232, 110, 66, 64, 140, 64, 244, 198, 147, 198, 186, 139, 183, 22, 155, 225, 39, 149, 186, 188, 20, 4, 154, 88, 237, 178, 224, 171, 25, 28, 107, 164, 191, 76, 252, 157, 173, 142, 40, 246, 173, 162, 29, 176, 166, 152, 107, 83, 147, 10, 207, 142, 86, 33, 126, 131, 7, 211, 45, 17, 46, 158, 124, 252, 11, 70, 91, 191, 83, 92, 226, 143, 104, 222, 50, 127, 11, 165, 35, 237, 150, 172, 139, 90, 209, 25, 56, 166, 64, 115, 65, 189, 52, 50, 177, 38, 229, 70, 161, 113, 74, 28, 166, 210, 10, 233, 37, 38, 161, 100, 130, 142, 170, 148, 231, 227, 75, 44, 196, 83, 96, 32, 54, 39, 164, 192, 19, 207, 91, 195, 122, 81, 189, 103, 148, 200, 147, 18, 21, 126, 226, 9, 99, 117, 87, 1, 188, 214, 237, 40, 29, 1, 77, 207, 217, 121, 84, 196, 200, 229, 212, 185, 184, 31, 219, 144, 43, 99, 90, 55, 103, 169, 97, 30, 181, 95, 171, 106, 201, 113, 10, 10, 193, 93, 59, 70, 42, 66, 243, 208, 51, 14, 243, 127, 236, 137, 193, 126, 59, 114, 227, 132, 79, 196, 230, 69, 79, 242, 123, 0, 68, 118, 22, 161, 21, 17, 192, 171, 137, 6, 218, 202, 221, 73, 92, 23, 136, 218, 27, 204, 254, 195, 127, 76, 107, 214, 86, 38, 2, 65, 187, 236, 114, 120, 33, 31, 241, 216, 11, 34, 112, 206, 30, 214, 230, 71, 243, 201, 210, 22, 57, 226, 117, 254, 22, 179, 97, 189, 133, 132, 219, 39, 17, 184, 160, 127, 132, 104, 9, 130, 169, 108, 236, 196, 176, 219, 112, 193, 247, 65, 222, 212, 116, 150, 74, 192, 118, 221, 137, 161, 131, 84, 29, 100, 249, 110, 92, 159, 43, 99, 203, 128, 240, 89, 157, 224, 233, 115, 129, 5, 162, 78, 237, 139, 210, 107, 116, 190, 72, 245, 101, 143, 36, 144, 74, 245, 109, 105, 157, 6, 73, 57, 223, 225, 180, 63, 16, 26, 203, 58, 58, 179, 161, 204, 246, 90, 85, 181, 255, 189, 179, 90, 200, 39, 205, 137, 193, 16, 151, 165, 33, 213, 5, 212, 96, 63, 122, 180, 247, 179, 113, 131, 30, 112, 195, 6, 111, 46, 76, 21, 62, 175, 180, 152, 161, 30, 42, 203, 27, 72, 246, 10, 131, 153, 110, 143, 112, 225, 23, 83, 100, 53, 253, 57, 98, 42, 142, 189, 32, 221, 10, 156, 176, 224, 193, 211, 41, 6, 141, 189, 61, 69, 237, 74, 94, 55, 172, 144, 29, 29, 216, 53, 64, 61, 56, 105, 125, 103, 130, 56, 26, 101, 137, 153, 117, 100, 182, 104, 125, 233, 115, 116, 4, 126, 243, 240, 117, 115, 116, 38, 34, 71, 117, 180, 27, 110, 182, 231, 246, 246, 85, 71, 139, 194, 155, 175, 39, 68, 194, 160, 18, 39, 198, 26, 21, 227, 37, 94, 175, 236, 137, 225, 218, 22, 232, 181, 132, 122, 204, 54, 222, 174, 2, 197, 51, 254, 43, 148, 171, 250, 77, 106, 108, 25, 72, 131, 23, 119, 16, 159, 213, 209, 153, 103, 226, 240, 170, 64, 49, 23, 132, 93, 84, 130, 145, 151, 14, 112, 88, 52, 78, 225, 123, 233, 164, 0, 63, 220, 246, 182, 143, 205, 121, 79, 231, 232, 148, 206, 208, 3, 172, 85, 98, 110, 143, 45, 7, 134, 6, 132, 74, 27, 148, 250, 182, 174, 131, 244, 252, 18, 223, 79, 222, 240, 111, 20, 80, 157, 26, 88, 42, 120, 240, 234, 79, 169, 204, 26, 61, 221, 15, 166, 76, 31, 182, 155, 155, 242, 119, 68, 119, 198, 60, 121, 170, 36, 203, 91, 106, 165, 101, 22, 73, 51, 160, 83, 159, 238, 65, 148, 80, 175, 237, 228, 180, 135, 35, 124, 19, 138, 163, 30, 123, 47, 13, 182, 81, 244, 147, 246, 5, 24, 97, 250, 118, 75, 116, 223, 117, 61, 94, 57, 151, 86, 241, 11, 37, 201, 85, 9, 186, 209, 195, 68, 32, 23, 237, 253, 182, 11, 212, 37, 46, 28, 226, 168, 145, 247, 165, 243, 25, 138, 97, 107, 193, 163, 150, 61, 43, 178, 35, 199, 171, 127, 169, 114, 62, 218, 34, 214, 90, 113, 76, 130, 59, 147, 230, 81, 26, 206, 115, 197, 6, 211, 93, 11, 50, 198, 35, 237, 51, 20, 64, 142, 251, 47, 7, 48, 148, 34, 127, 103, 210, 43, 214, 181, 72, 199, 40, 218, 178, 210, 108, 51, 23, 220, 146, 123, 114, 167, 47, 202, 157, 192, 4, 128, 162, 163, 109, 113, 43, 117, 132, 204, 55, 57, 33, 240, 18, 191, 167, 106, 253, 122, 27, 142, 92, 146, 66, 42, 71, 109, 243, 135, 191, 198, 21, 78, 254, 155, 19, 60, 145, 155, 204, 21, 15, 50, 4, 97, 185, 150, 221, 64, 72, 5, 113, 164, 233, 59, 71, 49, 95, 236, 114, 123, 202, 67, 212, 212, 211, 243, 197, 248, 3, 215, 72, 108, 167, 199, 172, 185, 175, 139, 140, 28, 255, 99, 140, 198, 100, 170, 249, 161, 221, 244, 200, 75, 130, 236, 136, 84, 247, 188, 210, 217, 228, 189, 17, 168, 86, 120, 111, 23, 94, 201, 138, 123, 138, 207, 55, 44, 118, 10, 114, 218, 116, 59, 139, 214, 33, 79, 29, 252, 173, 54, 213, 147, 76, 229, 78, 84, 109, 130, 48, 248, 108, 46, 117, 135, 202, 54, 143, 158, 53, 130, 3, 22, 182, 212, 159, 83, 179, 159, 123, 133, 93, 80, 45, 227, 2, 41, 152, 247, 127, 184, 173, 188, 120, 55, 106, 82, 174, 145, 187, 186, 131, 23, 237, 141, 168, 85, 139, 40, 8, 58, 200, 0, 152, 26, 168, 12, 200, 26, 74, 166, 155, 248, 26, 207, 217, 218, 21, 255, 224, 142, 18, 101, 57, 49, 84, 209, 101, 148, 91, 212, 20, 145, 5, 171, 37, 180, 102, 225, 205, 51, 203, 172, 25, 145, 232, 220, 200, 154, 111, 32, 198, 104, 64, 205, 81, 238, 55, 114, 29, 120, 224, 221, 53, 55, 191, 98, 193, 35, 0, 44, 112, 250, 248, 168, 239, 230, 181, 125, 115, 105, 98, 67, 245, 236, 131, 226, 130, 188, 153, 204, 94, 115, 184, 238, 156, 116, 180, 107, 233, 5, 245, 110, 195, 237, 70, 150, 137, 39, 172, 69, 178, 44, 82, 253, 29, 230, 112, 220, 104, 238, 142, 115, 186, 121, 9, 120, 147, 145, 135, 156, 236, 107, 219, 194, 228, 69, 148, 86, 151, 174, 35, 134, 143, 210, 4, 246, 54, 251, 206, 28, 249, 84, 75, 213, 119, 73, 5, 194, 203, 41, 74, 72, 68, 7, 11, 118, 196, 247, 40, 152, 55, 226, 45, 202, 79, 72, 41, 88, 73, 150, 146, 87, 68, 140, 248, 78, 225, 244, 26, 179, 5, 223, 73, 227, 207, 42, 252, 57, 63, 93, 95, 57, 215, 82, 117, 223, 121, 245, 202, 123, 15, 52, 98, 116, 84, 49, 157, 92, 45, 158, 228, 13, 30, 227, 0, 55, 143, 231, 102, 248, 174, 217, 95, 180, 239, 145, 191, 202, 147, 203, 31, 163, 110, 19, 83, 131, 124, 213, 246, 160, 228, 148, 253, 23, 101, 55, 70, 152, 237, 8, 137, 3, 255, 124, 205, 174, 123, 155, 213, 251, 134, 26, 161, 11, 58, 97, 215, 177, 101, 184, 101, 218, 238, 143, 107, 38, 20, 192, 20, 170, 194, 41, 219, 94, 211, 143, 228, 61, 142, 60, 231, 203, 241, 112, 45, 173, 27, 150, 48, 236, 229, 231, 234, 213, 94, 112, 213, 175, 237, 80, 45, 48, 47, 138, 125, 36, 122, 162, 33, 59, 71, 230, 131, 107, 13, 116, 18, 223, 79, 15, 152, 125, 208, 105, 239, 131, 132, 129, 191, 249, 85, 114, 143, 128, 84, 57, 132, 123, 29, 253, 127, 71, 157, 240, 224, 191, 146, 168, 91, 28, 70, 250, 177, 250, 81, 38, 42], - [130, 213, 88, 190, 56, 28, 249, 115, 121, 10, 193, 252, 115, 238, 24, 59, 215, 106, 81, 251, 63, 25, 244, 107, 98, 213, 107, 53, 49, 43, 5, 227, 111, 14, 162, 191, 241, 57, 249, 95, 187, 54, 249, 187, 106, 43, 61, 108, 244, 136, 234, 84, 158, 11, 222, 36, 13, 135, 32, 115, 188, 163, 222, 136, 114, 191, 80, 23, 106, 253, 132, 95, 236, 138, 83, 197, 85, 17, 138, 226, 113, 200, 70, 144, 27, 113, 14, 126, 30, 127, 204, 54, 236, 156, 29, 144, 171, 3, 175, 82, 141, 167, 247, 218, 99, 227, 216, 105, 54, 160, 147, 116, 180, 60, 51, 167, 189, 49, 115, 217, 246, 178, 122, 100, 226, 248, 33, 150, 249, 19, 214, 110, 105, 195, 12, 57, 15, 195, 99, 200, 245, 31, 48, 241, 104, 115, 178, 87, 75, 242, 238, 73, 45, 102, 13, 85, 111, 199, 156, 111, 59, 95, 187, 27, 85, 110, 98, 11, 6, 145, 159, 207, 27, 81, 215, 111, 59, 162, 55, 117, 246, 119, 134, 217, 235, 9, 242, 43, 114, 197, 93, 174, 46, 212, 212, 232, 18, 158, 192, 84, 250, 224, 189, 96, 181, 82, 10, 111, 138, 204, 94, 162, 97, 161, 36, 48, 245, 130, 43, 96, 192, 66, 238, 71, 98, 49, 188, 17, 131, 166, 200, 174, 124, 0, 213, 173, 42, 17, 253, 200, 204, 240, 169, 243, 28, 21, 173, 152, 62, 1, 55, 59, 116, 60, 115, 2, 146, 166, 143, 11, 181, 150, 71, 226, 28, 91, 184, 146, 189, 251, 198, 32, 93, 162, 179, 112, 34, 111, 232, 117, 135, 183, 125, 19, 60, 48, 184, 251, 94, 50, 79, 4, 192, 55, 222, 96, 112, 121, 13, 117, 170, 59, 28, 245, 154, 187, 188, 82, 139, 179, 60, 227, 220, 78, 14, 209, 88, 65, 20, 63, 47, 240, 162, 96, 88, 31, 62, 133, 151, 245, 219, 14, 58, 212, 101, 74, 96, 169, 223, 155, 142, 75, 138, 73, 125, 53, 214, 109, 239, 178, 6, 49, 106, 177, 159, 136, 218, 233, 79, 127, 103, 131, 229, 234, 177, 236, 170, 227, 9, 80, 226, 236, 160, 37, 218, 232, 231, 218, 83, 48, 154, 73, 56, 159, 204, 199, 4, 61, 252, 76, 210, 232, 224, 127, 41, 4, 107, 72, 151, 228, 194, 108, 87, 78, 200, 159, 111, 92, 216, 40, 59, 170, 81, 184, 41, 43, 54, 218, 214, 221, 157, 126, 197, 189, 152, 246, 32, 133, 192, 71, 162, 250, 152, 62, 78, 219, 133, 176, 173, 191, 222, 176, 248, 108, 87, 233, 131, 184, 122, 210, 89, 192, 245, 55, 91, 91, 181, 101, 101, 21, 191, 42, 196, 129, 82, 46, 150, 173, 189, 176, 56, 23, 42, 59, 211, 19, 216, 233, 76, 29, 181, 64, 40, 16, 41, 130, 250, 98, 4, 121, 90, 113, 92, 254, 17, 137, 37, 135, 88, 18, 14, 166, 40, 71, 97, 245, 97, 187, 174, 111, 63, 129, 193, 68, 71, 156, 21, 221, 125, 253, 165, 109, 104, 207, 89, 9, 92, 37, 163, 59, 237, 31, 172, 36, 61, 233, 107, 140, 125, 144, 209, 79, 68, 179, 82, 170, 57, 51, 151, 134, 222, 225, 236, 170, 175, 190, 109, 242, 125, 188, 239, 201, 186, 166, 106, 20, 255, 104, 35, 228, 111, 103, 163, 221, 63, 66, 134, 151, 52, 122, 187, 208, 249, 13, 243, 187, 174, 74, 136, 214, 221, 243, 214, 241, 53, 0, 39, 45, 242, 203, 151, 162, 142, 109, 15, 47, 114, 16, 217, 15, 196, 251, 188, 122, 253, 71, 11, 64, 226, 217, 93, 203, 95, 10, 86, 143, 140, 195, 22, 144, 74, 178, 115, 244, 87, 175, 70, 72, 128, 187, 215, 157, 30, 178, 60, 179, 214, 31, 189, 66, 151, 195, 185, 167, 49, 179, 81, 202, 115, 207, 98, 156, 229, 108, 9, 126, 97, 51, 233, 131, 204, 82, 102, 247, 232, 242, 46, 104, 99, 49, 205, 56, 214, 173, 115, 157, 27, 82, 168, 161, 228, 135, 31, 225, 35, 246, 232, 74, 177, 63, 163, 86, 77, 89, 165, 162, 243, 234, 223, 53, 127, 237, 224, 212, 201, 56, 75, 94, 91, 5, 141, 90, 172, 243, 157, 97, 111, 180, 198, 32, 102, 59, 208, 25, 211, 206, 14, 182, 253, 202, 77, 126, 159, 90, 13, 34, 79, 7, 150, 196, 135, 143, 242, 221, 151, 160, 146, 239, 192, 74, 113, 115, 183, 122, 168, 243, 15, 116, 56, 37, 164, 66, 172, 187, 19, 146, 218, 225, 117, 13, 187, 232, 170, 205, 239, 195, 193, 142, 210, 255, 76, 243, 57, 130, 41, 93, 132, 144, 239, 100, 187, 10, 100, 115, 84, 70, 106, 106, 165, 19, 129, 60, 185, 196, 139, 44, 44, 188, 50, 147, 124, 115, 102, 210, 137, 131, 60, 170, 73, 99, 221, 177, 172, 186, 94, 100, 197, 244, 128, 172, 142, 241, 12, 192, 132, 218, 224, 240, 211, 11, 66, 180, 131, 40, 229, 70, 197, 144, 158, 231, 91, 196, 55, 196, 65, 88, 230, 19, 171, 224, 33, 188, 1, 51, 215, 125, 230, 185, 145, 47, 127, 48, 102, 54, 28, 88, 195, 172, 0, 210, 106, 61, 131, 71, 43, 98, 156, 246, 40, 132, 238, 54, 9, 205, 163, 49, 209, 206, 236, 155, 165, 204, 189, 13, 31, 30, 94, 67, 92, 199, 4, 46, 228, 2, 157, 252, 172, 71, 231, 28, 158, 87, 198, 90, 146, 124, 86, 114, 135, 240, 238, 41, 223, 20, 168, 244, 7, 156, 239, 151, 140, 86, 88, 159, 6, 224, 204, 199, 194, 52, 100, 45, 37, 88, 39, 103, 144, 232, 166, 63, 1, 156, 225, 229, 243, 92, 224, 100, 225, 249, 16, 237, 193, 247, 121, 80, 166, 222, 118, 115, 132, 179, 253, 56, 101, 70, 123, 92, 131, 178, 157, 235, 105, 33, 117, 94, 236, 201, 188, 15, 252, 136, 4, 67, 183, 19, 69, 39, 202, 141, 2, 32, 182, 57, 95, 244, 15, 156, 31, 104, 114, 203, 221, 128, 141, 118, 139, 172, 22, 189, 37, 173, 133, 248, 103, 159, 211, 252, 203, 2, 209, 114, 67, 88, 209, 53, 211, 138, 213, 183, 131, 41, 76, 188, 83, 127, 225, 27, 111, 85, 250, 114, 162, 26, 141, 252, 47, 223, 64, 104, 98, 80, 114, 115, 152, 157, 171, 100, 139, 53, 236, 225, 243, 240, 18, 117, 36, 78, 169, 79, 197, 193, 21, 161, 46, 2, 170, 129, 100, 238, 212, 193, 48, 233, 216, 179, 48, 157, 252, 236, 190, 129, 152, 169, 48, 124, 164, 56, 253, 72, 216, 239, 197, 241, 43, 95, 99, 99, 28, 212, 43, 86, 173, 5, 6, 115, 55, 38, 200, 35, 248, 101, 61, 62, 235, 18, 15, 177, 126, 224, 242, 137, 30, 172, 96, 216, 42, 17, 250, 164, 71, 224, 214, 215, 30, 133, 47, 8, 209, 67, 22, 114, 245, 215, 151, 88, 218, 118, 109, 85, 128, 106, 40, 227, 11, 77, 20, 139, 147, 188, 75, 199, 174, 135, 20, 182, 216, 1, 59, 250, 160, 62, 234, 120, 129, 3, 10, 184, 81, 153, 49, 108, 176, 134, 1, 237, 63, 168, 21, 101, 204, 104, 179, 30, 159, 98, 132, 108, 87, 77, 141, 77, 9, 91, 192, 218, 124, 226, 102, 125, 62, 98, 239, 241, 127, 75, 130, 66, 218, 117, 112, 248, 63, 173, 170, 119, 27, 67, 235, 105, 173, 185, 163, 218, 35, 112, 221, 240, 155, 199, 226, 11, 22, 18, 110, 54, 18, 182, 143, 255, 79, 93, 113, 208, 175, 8, 60, 109, 53, 105, 15, 62, 115, 181, 180, 237, 130, 66, 77, 223, 96, 114, 174, 244, 155, 127, 61, 188, 14, 247, 99, 60, 140, 161, 69, 149, 48, 205, 222, 7, 199, 197, 118, 148, 55, 24, 57, 150, 92, 133, 205, 137, 124, 248, 152, 59, 103, 81, 31, 240, 74, 213, 201, 42, 116, 54, 255, 148, 195, 25, 180, 20, 169, 103, 41, 197, 158, 58, 169, 203, 42, 62, 118, 124, 243, 242, 212, 251, 38, 212, 170, 206, 243, 215, 140, 238, 146, 76, 59, 29, 179, 72, 140, 175, 162, 212, 60, 235, 194, 21, 36, 158, 212, 125, 11, 95, 6, 156, 35, 233, 168, 36, 182, 151, 163, 144, 71, 65, 97, 200, 98, 218, 101, 203, 238, 210, 87, 100, 19, 67, 242, 25, 19, 41, 68, 214, 244, 187, 200, 53, 118, 24, 74, 59, 20, 189, 67, 151, 194, 25, 38, 49, 206, 107, 9, 236, 126, 254, 73, 124, 199, 127, 144, 0, 15, 127, 219, 231, 28, 136, 35, 151, 107, 127, 45, 33, 196, 162, 117, 163, 17, 165, 122, 78, 211, 2, 235, 230, 119, 234, 167, 45, 117, 126, 123, 155, 199, 113, 214, 50, 175, 94, 15, 199, 80, 89, 160, 49, 237, 119, 132, 144, 164, 40, 44, 245, 174, 20, 148, 81, 220, 79, 113, 38, 192, 192, 156, 221, 230, 223, 53, 167, 211, 210, 140, 245, 60, 210, 65, 22, 94, 118, 19, 14, 75, 109, 118, 33, 190, 61, 133, 166, 197, 224, 81, 169, 54, 207, 20, 109, 21, 196, 234, 113, 190, 141, 14, 150, 107, 166, 250, 221, 5, 34, 99, 3, 25, 42, 229, 105, 229, 171, 8, 179, 201, 219, 147, 42, 248, 165, 42, 116, 144, 188, 11, 178, 189, 246, 202, 239, 183, 199, 211, 180, 199, 122, 186, 54, 119, 9, 125, 208, 254, 227, 75, 143, 238, 44, 241, 65, 133, 39, 196, 72, 149, 176, 230, 70, 113, 234, 198, 90, 207, 100, 49, 227, 4, 100, 159, 125, 12, 160, 145, 42, 33, 75, 167, 255, 246, 38, 228, 198, 20, 135, 79, 76, 18, 200, 190, 83, 252, 219, 103, 155, 88, 201, 73, 180, 103, 78, 21, 46, 132, 49, 46, 58, 150, 254, 243, 34, 171, 26, 118, 107, 140, 72, 240, 48, 217, 181, 98, 228, 208, 66, 164, 163, 229, 49, 192, 133, 154, 152, 239, 72, 194, 248, 50, 110, 98, 241, 166, 93, 20, 74, 106, 41, 48, 219, 117, 184, 207, 164, 201, 244, 100, 133, 244, 196, 149, 32, 174, 78, 140, 45, 184, 127, 222, 230, 235, 167, 48, 183, 211, 51, 155, 149, 95, 140, 44, 103, 34, 244, 27, 64, 149, 101, 12, 177, 185, 254, 145, 192, 29, 200, 15, 179, 59, 124, 147, 223, 233, 24, 156, 80, 30, 7, 29, 86, 180, 46, 168, 225, 100, 57, 64, 244, 27, 54, 164, 137, 130, 207, 98, 183, 250, 120, 203, 185, 62, 227, 245, 104, 147, 221, 90, 234, 170, 113, 130, 202, 74, 163, 87, 69, 96, 181, 111, 213, 236, 225, 198, 150, 245, 232, 129, 214, 203, 217, 98, 187, 97, 231, 204, 74, 63, 52, 181, 206, 37, 51, 3, 140, 168, 116, 129, 43, 35, 203, 234, 115, 75, 41, 132, 246, 187, 118, 172, 122, 106, 145, 181, 201, 7, 117, 198, 159, 82, 216, 160, 100, 60, 209, 233, 186, 227, 45, 82, 218, 243, 92, 60, 120, 140, 210, 156, 158, 196, 174, 207, 114, 242, 55, 156, 131, 69, 239, 81, 160, 77, 64, 195, 222, 11, 208, 203, 173, 121, 141, 16, 163, 34, 115, 226, 206, 141, 143, 45, 84, 35, 8, 21, 136, 157, 222, 190, 46, 203, 41, 119, 247, 244, 220, 49, 224, 94, 75, 138, 160, 199, 113, 198, 201, 32, 94, 53, 121, 189, 223, 167, 92, 187, 156, 124, 170, 203, 7, 121, 104, 167, 221, 97, 2, 210, 131, 135, 224, 175, 88, 110, 239, 95, 94, 185, 111, 95, 230, 74, 217, 20, 117, 90, 221, 14, 74, 25, 254, 183, 250, 36, 41, 139, 60, 64, 122, 75, 229, 202, 168, 60, 8, 74, 171, 229, 37, 242, 14, 108, 104, 73, 78, 41, 158, 153, 76, 98, 32, 89, 209, 200, 53, 50, 114, 195, 21, 237, 65, 250, 11, 44, 250, 139, 24, 69, 248, 18, 243, 156, 75, 95, 6, 38, 96, 116, 27, 99, 41, 117, 196, 63, 205, 36, 108, 249, 213, 51, 50, 107, 234, 125, 229, 32, 9, 50, 236, 126, 226, 241, 206, 166, 156, 34, 72, 101, 204, 163, 135, 201, 251, 180, 88, 189, 17, 161, 71, 11, 117, 22, 114, 73, 142, 214, 244, 41, 144, 17, 85, 58, 191, 84, 181, 188, 233, 30, 6, 163, 209, 110, 153, 47, 86, 172, 196, 92, 201, 13, 118, 253, 70, 22, 47, 4, 248, 27, 172, 161, 197, 43, 61, 170, 5, 7, 94, 17, 157, 75, 49, 171, 105, 80, 230, 197, 110, 67, 79, 114, 69, 110, 254, 65, 63, 75, 117, 211, 102, 142, 154, 183, 98, 14, 148, 126, 177, 218, 101, 206, 17, 197, 135, 181, 68, 86, 213, 199, 214, 48, 139, 244, 165, 27, 211, 164, 55, 155, 156, 1, 19, 119, 216, 234, 36, 230, 244, 54, 176, 116, 181, 241, 221, 10, 180, 164, 56, 140, 67, 20, 171, 144, 36, 80, 40, 179, 117, 217, 168, 88, 76, 239, 124, 124, 94, 30, 53, 146, 245, 121, 6, 104, 57, 219, 44, 232, 76, 20, 141, 176, 13, 176, 227, 68, 130, 161, 232, 211, 11, 172, 194, 10, 96, 118, 7, 149, 174, 3, 117, 68, 145, 148, 176, 84, 27, 56, 121, 246, 100, 109, 120, 201, 122, 64, 240, 53, 174, 225, 12, 226, 52, 232, 108, 229, 229, 147, 231, 202, 179, 133, 129, 154, 126, 249, 111, 120, 252, 56, 87, 136, 80, 90, 173, 43, 136, 171, 64, 237, 209, 154, 90, 28, 72, 158, 40, 13, 55, 115, 123, 26, 171, 197, 179, 231, 24, 87, 59, 26, 124, 238, 13, 197, 19, 85, 83, 20, 69, 97, 32, 129, 212, 19, 199, 244, 55, 228, 0, 5, 73, 152, 45, 190, 59, 108, 190, 120, 147, 22, 37, 140, 186, 235, 160, 108, 29, 221, 112, 168, 160, 21, 159, 185, 177, 61, 87, 218, 250, 114, 68, 183, 12, 185, 88, 30, 63, 198, 220, 68, 141, 91, 114, 222, 98, 223, 241, 188, 75, 77, 42, 56, 56, 30, 106, 139, 69, 247, 135, 34, 30, 67, 86, 159, 126, 187, 185, 225, 186, 209, 11, 7, 233, 239, 196, 82, 177, 83, 162, 73, 173, 177, 206, 160, 52, 5, 205, 42, 60, 143, 19, 104, 210, 14, 46, 209, 113, 136, 255, 139, 198, 65, 245, 164, 155, 39, 111, 65, 116, 26, 252, 150, 244, 93, 220, 136, 114, 216, 97, 163, 209, 231, 239, 89, 247, 64, 6, 216, 39, 63, 126, 58, 212, 202, 195, 27, 57, 47, 32, 51, 30, 18, 167, 30, 132, 153, 173, 15, 93, 231, 168, 82, 254, 251, 102, 52, 191, 80, 187, 8, 119, 153, 242, 11, 76, 80, 246, 204, 86, 17, 156, 196, 14, 205, 143, 79, 166, 188, 205, 60, 218, 97, 122, 60, 122, 46, 14, 89, 32, 198, 48, 88, 166, 236, 189, 244, 149, 95, 172, 120, 102, 161, 121, 254, 170, 250, 228, 103, 155, 124, 2, 2, 176, 101, 111, 32, 110, 207, 245, 93, 49, 60, 115, 103, 36, 251, 149, 45, 56, 200, 29, 149, 166, 109, 239, 87, 69, 215, 174, 24, 102, 69, 105, 101, 131, 136, 191, 4, 218, 158, 87, 62, 150, 182, 93, 159, 5, 228, 97, 83, 229, 251, 217, 120, 83, 131, 207, 155, 237, 207, 7, 67, 141, 200, 43, 152, 150, 94, 204, 105, 47, 173, 126, 179, 147, 248, 236, 1, 215, 209, 164, 9, 124, 43, 123, 67, 166, 187, 51, 200, 242, 202, 240, 156, 112, 125, 242, 106, 237, 183, 210, 132, 22, 174, 115, 167, 33, 106, 207, 197, 185, 1, 177, 120, 224, 52, 231, 32, 102, 176, 37, 44, 226, 56, 232, 154, 239, 51, 138, 244, 41, 187, 37, 36, 186, 178, 181, 79, 216, 228, 58, 208, 196, 254, 211, 77, 237, 134, 206, 161, 134, 222, 35, 240, 85, 76, 104, 162, 138, 157, 175, 164, 192, 112, 202, 252, 191, 71, 245, 47, 141, 207, 36, 38, 34, 190, 131, 22, 68, 203, 149, 181, 29, 234, 56, 164, 115, 183, 1, 147, 147, 64, 235, 125, 157, 24, 63, 227, 73, 78, 64, 226, 26, 146, 27, 158, 11, 103, 134, 165, 168, 171, 119, 7, 82, 11, 13, 78, 81, 211, 143, 124, 126, 251, 201, 80, 18, 133, 65, 170, 174, 123, 204, 39, 78, 104, 65, 51, 64, 21, 158, 75, 7, 174, 237, 0, 254, 251, 31, 23, 154, 40, 44, 56, 157, 123, 149, 174, 109, 27, 147, 2, 157, 214, 147, 6, 163, 86, 210, 225, 119, 73, 33, 201, 156, 159, 59, 235, 198, 177, 58, 21, 176, 251, 190, 225, 84, 163, 14, 34, 247, 127, 150, 224, 249, 174, 61, 178, 66, 134, 40, 76, 169, 87, 70, 164, 96, 165, 98, 49, 77, 196, 0, 1, 108, 221, 152, 138, 88, 205, 219, 243, 212, 81, 180, 216, 233, 213, 202, 202, 85, 184, 2, 242, 38, 166, 159, 59, 99, 3, 50, 163, 102, 177, 156, 125, 125, 128, 205, 114, 184, 81, 37, 173, 23, 3, 147, 122, 246, 223, 216, 120, 107, 110, 81, 237, 64, 246, 102, 239, 208, 35, 92, 245, 152, 0, 242, 50, 174, 107, 175, 220, 62, 183, 193, 38, 159, 16, 142, 154, 120, 81, 77, 108, 64, 122, 225, 214, 186, 160, 36, 226, 22, 73, 136, 90, 220, 9, 157, 191, 106, 92, 79, 157, 160, 0, 181, 5, 32, 194, 100, 249, 127, 179, 212, 178, 253, 230, 17, 28, 136, 226, 145, 177, 81, 3, 140, 63, 91, 86, 179, 29, 59, 17, 15, 207, 7, 5, 74, 102, 193, 109, 197, 205, 157, 69, 47, 172, 106, 80, 121, 126, 220, 68, 82, 191, 61, 156, 141, 239, 60, 213, 231, 97, 184, 72, 244, 98, 28, 212, 29, 97, 176, 45, 147, 146, 99, 64, 141, 227, 44, 44, 1, 148, 104, 72, 255, 53, 230, 14, 242, 206, 234, 24, 103, 177, 255, 157, 40, 121, 104, 101, 129, 204, 107, 24, 104, 34, 237, 38, 150, 27, 78, 16, 161, 46, 145, 25, 191, 18, 232, 43, 51, 112, 187, 184, 42, 78, 147, 226, 160, 10, 148, 225, 25, 245, 49, 216, 219, 244, 125, 106, 138, 145, 243, 155, 50, 130, 231, 242, 18, 236, 140, 49, 166, 114, 57, 90, 129, 66, 136, 219, 107, 206, 25, 208, 107, 225, 218, 117, 240, 91, 120, 160, 140, 183, 79, 162, 102, 164, 1, 69, 59, 48, 202, 249, 145, 161, 16, 179, 137, 78, 190, 160, 170, 33, 247, 97, 47, 103, 221, 185, 213, 189, 1, 32, 248, 40, 41, 207, 190, 248, 215, 42, 65, 49, 158, 253, 45, 207, 36, 112, 18, 101, 56, 181, 113, 228, 86, 84, 200, 120, 50, 15, 169, 208, 242, 124, 15, 225, 206, 41, 156, 50, 94, 133, 147, 225, 181, 231, 231, 207, 173, 116, 188, 114, 66, 54, 36, 117, 115, 192, 113, 159, 115, 87, 230, 33, 107, 211, 148, 14, 166, 107, 181, 89, 138, 8, 219, 3, 235, 251, 59, 219, 81, 4, 43, 71, 237, 196, 177, 134, 29, 93, 24, 187, 151, 174, 165, 151, 62, 185, 230, 178, 216, 120, 157, 75, 0, 98, 33, 168, 228, 43, 60, 224, 224, 200, 163, 124, 192, 83, 39, 167, 238, 201, 198, 173, 115, 210, 195, 122, 183, 148, 119, 173, 130, 141, 84, 189, 39, 242, 58, 175, 106, 214, 32, 202, 43, 129, 252, 55, 130, 222, 87, 235, 48, 124, 220, 178, 5, 11, 165, 183, 200, 76, 199, 166, 233, 114, 28, 116, 59, 29, 18, 106, 250, 77, 132, 150, 254, 124, 93, 185, 23, 234, 99, 233, 47, 240, 133, 156, 187, 47, 52, 236, 170, 247, 230, 26, 71, 181, 97, 61, 221, 210, 205, 6, 245, 253, 233, 196, 252, 167, 147, 248, 229, 72, 183, 71, 92, 124, 157, 10, 47, 136, 49, 35, 186, 21, 163, 33, 48, 95, 229, 239, 134, 67, 60, 81, 33, 229, 204, 24, 242, 254, 100, 248, 176, 162, 2, 51, 198, 16, 39, 137, 30, 26, 13, 241, 137, 141, 132, 88, 164, 169, 77, 31, 27, 40, 115, 13, 178, 250, 3, 166, 254, 255, 31, 61, 55, 3, 63, 92, 4, 85, 190, 117, 56, 67, 29, 230, 32, 125, 225, 196, 7, 52, 3, 244, 211, 58, 66, 235, 177, 142, 212, 253, 219, 162, 64, 54, 111, 65, 147, 41, 242, 127, 131, 15, 124, 216, 88, 248, 197, 139, 230, 183, 86, 240, 101, 129, 251, 68, 189, 194, 202, 59, 54, 190, 123, 153, 176, 115, 149, 155, 14, 67, 46, 133, 111, 156, 59, 187, 202, 223, 97, 56, 23, 201, 216, 183, 250, 85, 203, 167, 217, 121, 190, 15, 16, 251, 188, 211, 208, 110, 102, 37, 202, 236, 166, 186, 65, 155, 71, 237, 252, 145, 170, 68, 10, 63, 233, 62, 228, 28, 3, 153, 156, 169, 99, 182, 150, 24, 142, 179, 187, 178, 158, 77, 234, 239, 13, 32, 47, 142, 34, 197, 57, 194, 104, 6, 231, 82, 58, 61, 6, 74, 196, 190, 138, 20, 49, 85, 101, 51, 225, 121, 19, 174, 47, 117, 252, 248, 73, 48, 122, 40, 134, 157, 177, 217, 167, 174, 72, 136, 179, 209, 102, 250, 141, 105, 129, 244, 88, 51, 18, 86, 4, 180, 8, 167, 49, 26, 248, 175, 124, 18, 75, 237, 163, 241, 60, 22, 22, 168, 225, 107, 211, 182, 191, 60, 164, 208, 71, 233, 56, 185, 26, 72, 119, 232, 7, 44, 200, 136, 35, 137, 33, 253, 8, 23, 219, 120, 66, 160, 194, 60, 19, 16, 212, 201, 140, 92, 231, 33, 54, 78, 237, 37, 158, 213, 194, 8, 153, 209, 58, 161, 24, 165, 237, 109, 145, 160, 183, 2, 255, 99, 64, 213, 143, 1, 22, 209, 208, 65, 156, 42, 208, 86, 107, 224, 205, 22, 19, 238, 132, 118, 223, 47, 167, 243, 122, 234, 90, 33, 110, 204, 46, 87, 13, 166, 134, 12, 156, 51, 182, 161, 114, 81, 71, 55, 206, 109, 58, 32, 76, 58, 185, 0, 146, 221, 149, 203, 39, 40, 32, 255, 214, 42, 88, 91, 140, 196, 21, 184, 151, 145, 134, 66, 200, 43, 105, 167, 179, 113, 118, 28, 130, 142, 10, 247, 50, 56, 199, 249, 105, 245, 64, 241, 17, 46, 49, 6, 42, 143, 183, 139, 238, 140, 203, 216, 102, 50, 85, 110, 29, 50, 78, 182, 26, 88, 5, 83, 151, 238, 139, 243, 101, 221, 200, 138, 116, 141, 145, 147, 12, 90, 167, 197, 131, 180, 20, 237, 157, 134, 248, 23, 247, 149, 1, 237, 24, 52, 125, 217, 76, 129, 191, 189, 87, 239, 76, 148, 78, 179, 86, 40, 15, 232, 201, 102, 129, 87, 195, 157, 190, 104, 43, 200, 194, 160, 120, 197, 205, 99, 117, 48, 137, 101, 114, 134, 234, 39, 5, 109, 118, 113, 121, 48, 69, 56, 45, 203, 201, 20, 104, 130, 15, 118, 188, 237, 62, 245, 10, 29, 234, 197, 8, 65, 43, 102, 57, 117, 30, 255, 127, 246, 123, 232, 245, 7, 158, 26, 200, 222, 169, 137, 96, 215, 123, 135, 43, 186, 193, 61, 234, 95, 175, 57, 50, 131, 10, 68, 84, 157, 96, 0, 64, 63, 121, 79, 21, 152, 203, 158, 34, 190, 91, 113, 4, 207, 198, 62, 1, 254, 223, 112, 151, 229, 164, 0, 52, 125, 55, 228, 223, 85, 72, 58, 148, 42, 215, 12, 192, 6, 60, 39, 41, 65, 252, 45, 30, 106, 180, 188, 95, 194, 25, 165, 217, 61, 56, 53, 84, 35, 121, 48, 206, 237, 107, 53, 114, 180, 6, 41, 216, 11, 79, 196, 247, 80, 121, 100, 97, 23, 150, 128, 141, 138, 231, 208, 107, 148, 170, 189, 182, 152, 220, 235, 99, 212, 216, 78, 188, 112, 240, 69, 147, 229, 22, 171, 156, 71, 235, 196, 80, 76, 236, 223, 175, 123, 89, 241, 123, 183, 138, 224, 193, 16, 195, 202, 128, 220, 17, 0, 148, 74, 56, 54, 100, 138, 179, 60, 161, 180, 86, 51, 117, 128, 234, 27, 2, 18, 138, 177, 235, 209, 23, 175, 167, 233, 77, 6, 60, 94, 199, 218, 181, 135, 158, 166, 191, 158, 17, 42, 249, 196, 232, 5, 123, 169, 224, 21, 96, 18, 36, 248, 124, 142, 111, 50, 160, 35, 6, 46, 88, 185, 130, 42, 146, 88, 34, 243, 237, 72, 247, 120, 222, 98, 78, 223, 93, 76, 49, 155, 223, 253, 87, 168, 13, 82, 39, 104, 83, 77, 16, 164, 181, 172, 86, 220, 132, 11, 160, 89, 59, 146, 63, 183, 171, 174, 95, 61, 182, 65, 232, 24, 15, 249, 22, 133, 80, 206, 215, 14, 151, 190, 221, 169, 236, 92, 36, 122, 2, 83, 36, 219, 102, 85, 196, 71, 216, 159, 8, 180, 219, 180, 251, 182, 229, 26, 180, 121, 80, 53, 170, 49, 136, 170, 49, 110, 238, 227, 237, 131, 86, 243, 125, 206, 97, 141, 16, 77, 68, 19, 204, 3, 149, 138, 2, 185, 1, 101, 204, 72, 197, 144, 23, 92, 114, 43, 224, 171, 122, 102, 34, 205, 96, 129, 177, 216, 61, 194, 23, 4, 63, 55, 117, 21, 236, 203, 249, 226, 12, 63, 97, 36, 226, 167, 51, 205, 155, 109, 35, 121, 127, 135, 88, 37, 85, 123, 51, 186, 144, 82, 143, 135, 128, 222, 179, 8, 244, 51, 201, 93, 65, 219, 194, 144, 29, 138, 41, 121, 28, 231, 118, 159, 32, 163, 68, 36, 227, 10, 140, 190, 139, 90, 221, 126, 239, 224, 196, 79, 7, 204, 149, 197, 196, 158, 133, 203, 133, 12, 65, 45, 17, 209, 224, 140, 78, 132, 242, 38, 95, 77, 142, 240, 148, 110, 41, 66, 175, 123, 212, 215, 162, 240, 255, 34, 240, 153, 157, 185, 37, 221, 9, 195, 247, 194, 134, 16, 145, 28, 127, 98, 246, 3, 165, 118, 12, 15, 244, 108, 19, 224, 209, 86, 198, 128, 140, 22, 84, 115, 19, 212, 83, 34, 201, 211, 82, 7, 17, 250, 171, 221, 73, 10, 181, 31, 10, 20, 28, 174, 48, 120, 40, 148, 228, 115, 64, 10, 80, 195, 101, 123, 86, 225, 142, 33, 115, 224, 18, 150, 44, 222, 181, 128, 31, 103, 11, 137, 245, 135, 212, 16, 108, 124, 178, 249, 174, 43, 186, 75, 206, 227, 59, 36, 176, 118, 66, 117, 238, 62, 173, 179, 41, 141, 153, 186, 85, 63, 139, 250, 250, 229, 17, 168, 176, 106, 50, 144, 222, 13, 51, 122, 39, 36, 228, 7, 93, 178, 223, 75, 137, 169, 16, 139, 235, 152, 182, 213, 79, 139, 8, 124, 76, 49, 65, 128, 49, 90, 38, 220, 78, 197, 177, 193, 174, 28, 65, 70, 17, 198, 115, 80, 210, 155, 106, 110, 12, 102, 67, 106, 143, 228, 5, 146, 17, 101, 153, 231, 105, 175, 68, 106, 184, 195, 249, 180, 105, 10, 73, 118, 197, 228, 107, 111, 121, 175, 180, 149, 171, 23, 196, 193, 151, 179, 14, 6, 39, 161, 244, 118, 29, 101, 71, 190, 16, 160, 183, 231, 239, 161, 133, 58, 26, 136, 148, 207, 206, 157, 2, 253, 161, 73, 68, 111, 3, 155, 238, 30, 237, 217, 229, 150, 98, 165, 85, 253, 130, 49, 58, 65, 78, 247, 52, 147, 115, 249, 131, 59, 246, 212, 63, 93, 157, 220, 171, 30, 133, 10, 228, 183, 104, 119, 105, 20, 206, 116, 153, 230, 211, 209, 74, 20, 144, 248, 96, 120, 241, 215, 109, 137, 41, 175, 176, 100, 54, 114, 3, 5, 240, 194, 212, 41, 68, 23, 191, 205, 253, 210, 136, 210, 84, 224, 39, 49, 193, 199, 0, 85, 129, 53, 98, 108, 242, 50, 40, 235, 78, 109, 83, 211, 145, 134, 134, 181, 10, 175, 104, 182, 85, 100, 165, 231, 134, 133, 227, 60, 214, 198, 206, 112, 246, 84, 53, 118, 230, 86, 11, 157, 13, 41, 56, 29, 243, 109, 48, 75, 164, 64, 1, 100, 175, 176, 174, 192, 208, 109, 169, 116, 131, 37, 193, 125, 230, 199, 190, 4, 41, 66, 15, 179, 79, 46, 36, 30, 142, 177, 161, 67, 101, 147, 19, 146, 150, 211, 44, 224, 215, 114, 254, 155, 20, 30, 86, 145, 77, 192, 65, 48, 255, 61, 181, 51, 71, 11, 28, 186, 206, 224, 128, 164, 12, 34, 18, 186, 147, 38, 137, 176, 226, 207, 146, 150, 91, 157, 143, 195, 235, 239, 12, 59, 34, 81, 151, 237, 93, 46, 166, 33, 122, 150, 60, 72, 203, 18, 148, 63, 250, 78, 236, 129, 82, 45, 126, 154, 245, 3, 166, 204, 224, 39, 12, 11, 227, 139, 253, 155, 144, 40, 178, 220, 101, 5, 218, 200, 112, 85, 11, 97, 41, 205, 70, 146, 66, 178, 114, 95, 207, 110, 233, 154, 125, 169, 223, 20, 164, 213, 231, 90, 111, 170, 251, 27, 203, 146, 246, 150, 14, 186, 245, 218, 31, 219, 224, 110, 97, 54, 23, 94, 92, 24, 246, 17, 8, 189, 43, 149, 6, 106, 173, 211, 220, 227, 112, 215, 27, 236, 150, 84, 80, 163, 233, 208, 221, 68, 241, 70, 63, 132, 224, 216, 249, 219, 162, 111, 64, 195, 116, 93, 74, 6, 184, 176, 201, 111, 129, 141, 252, 156, 32, 53, 207, 194, 180, 206, 56, 214, 156, 31, 124, 204, 10, 177, 169, 108, 99, 255, 69, 108, 68, 96, 235, 235, 217, 250, 182, 184, 99, 71, 121, 237, 107, 202, 88, 220, 164, 185, 172, 190, 144, 80, 96, 102, 191, 32, 90, 32, 89, 149, 162, 231, 190, 237, 138, 51, 30, 135, 92, 85, 64, 44, 96, 75, 86, 169, 209, 63, 139, 85, 217, 176, 128, 70, 79, 228, 221, 155, 2, 133, 70, 159, 129, 37, 54, 156, 22, 129, 30, 90, 227, 107, 244, 205, 50, 54, 251, 211, 142, 38, 103, 167, 36, 216, 106, 0, 119, 210, 110, 253, 53, 95, 252, 210, 188, 78, 253, 95, 173, 164, 246, 16, 236, 21, 57, 159, 135, 79, 161, 77, 238, 249, 9, 182, 19, 186, 232, 100, 112, 152, 188, 0, 103, 71, 23, 158, 176, 106, 200, 98, 31, 186, 210, 189, 32, 132, 172, 127, 158, 42, 194, 211, 88, 235, 183, 154, 197, 101, 24, 6, 225, 245, 132, 16, 238, 99, 145, 39, 236, 208, 125, 31, 104, 250, 53, 165, 5, 197, 81, 216, 36, 118, 65, 204, 153, 138, 114, 255, 136, 220, 57, 129, 204, 2, 208, 122, 21, 48, 116, 143, 27, 173, 141, 150, 63, 254, 82, 141, 53, 42, 227, 87, 130, 243, 240, 122, 162, 178, 127, 230, 206, 109, 146, 147, 61, 225, 166, 49, 100, 82, 86, 234, 239, 28, 18, 157, 76, 190, 245, 113, 13, 162, 86, 124, 120, 160, 121, 231, 25, 4, 234, 178, 163, 153, 43, 180, 236, 119, 8, 120, 69, 118, 14, 89, 132, 243, 180, 154, 72, 133, 80, 132, 50, 67, 58, 118, 204, 153, 109, 138, 234, 228, 104, 113, 32, 116, 181, 123, 167, 239, 139, 95, 169, 229, 93, 57, 60, 106, 31, 76, 210, 73, 37, 175, 74, 243, 205, 23, 186, 16, 139, 37, 132, 200, 253, 133, 251, 107, 0, 119, 224, 240, 30, 201, 233, 69, 83, 55, 26, 70, 130, 77, 207, 143, 85, 33, 151, 255, 200, 127, 182, 124, 148, 92, 181, 2, 148, 194, 226, 64, 171, 94, 244, 202, 142, 254, 197, 186, 66, 246, 180, 237, 138, 168, 208, 227, 125, 35, 145, 213, 55, 55, 11, 112, 71, 91, 214, 225, 157, 10, 164, 127, 118, 70, 223, 155, 171, 168, 70, 139, 152, 38, 144, 3, 92, 236, 69, 169, 11, 211, 22, 200, 202, 245, 194, 107, 39, 41, 218, 102, 18, 169, 149, 101, 170, 18, 101, 73, 41, 56, 76, 79, 35, 94, 107, 139, 237, 228, 77, 65, 163, 119, 22, 103, 15, 1, 128, 170, 81, 162, 104, 104, 51, 151, 152, 78, 186, 207, 139, 149, 208, 126, 49, 220, 208, 39, 6, 254, 187, 188, 188, 178, 100, 248, 54, 48, 200, 22, 93, 246, 32, 107, 105, 167, 214, 214, 224, 191, 234, 158, 249, 132, 252, 124, 164, 108, 60, 50, 32, 103, 146, 186, 214, 126, 218, 181, 133, 233, 178, 200, 200, 194, 150, 131, 242, 130, 202, 97, 161, 8, 31, 227, 205, 172, 185, 5, 154, 103, 191, 160, 84, 132, 49, 1, 165, 128, 96, 248, 116, 80, 142, 58, 228, 193, 151, 225, 97, 73, 148, 13, 132, 56, 200, 191, 21, 13, 89, 142, 3, 189, 59, 107, 150, 71, 126, 235, 247, 36, 227, 162, 202, 35, 64, 131, 164, 59, 50, 199, 117, 103, 79, 13, 170, 180, 41, 174, 95, 184, 110, 65, 170, 211, 242, 115, 194, 96, 12, 100, 61, 75, 74, 241, 46, 213, 146, 190, 146, 250, 192, 90, 206, 6, 81, 179, 171, 64, 177, 12, 231, 74, 165, 162, 86, 55, 99, 24, 60, 54, 75, 55, 187, 180, 207, 86, 225, 171, 26, 187, 249, 37, 209, 198, 142, 5, 68, 86, 196, 10, 12, 215, 147, 249, 170, 173, 156, 54, 150, 41, 176, 63, 251, 159, 180, 201, 61, 236, 223, 7, 128, 57, 3, 117, 6, 218, 136, 195, 163, 107, 236, 162, 176, 231, 244, 57, 221, 12, 98, 62, 17, 78, 112, 165, 172, 46, 230, 97, 166, 212, 248, 22, 224, 153, 198, 124, 90, 115, 199, 107, 216, 160, 223, 175, 155, 93, 173, 55, 243, 126, 240, 63, 216, 207, 39, 122, 34, 42, 214, 209, 179, 44, 108, 152, 188, 175, 138, 61, 192, 81, 82, 203, 138, 54, 236, 127, 95, 66, 255, 67, 30, 97, 247, 253, 139, 61, 124, 171, 209, 224, 181, 190, 246, 215, 201, 146, 119, 136, 189, 96, 184, 58, 34, 12, 24, 79, 188, 91, 24, 205, 75, 243, 231, 22, 53, 103, 185, 64, 251, 162, 237, 118, 153, 51, 150, 162, 19, 42, 247, 48, 253, 182, 18, 1, 131, 191, 23, 81, 122, 188, 148, 191, 84, 16, 39, 225, 212, 247, 157, 107, 209, 148, 128, 0, 123, 116, 252, 1, 18, 78, 139, 30, 63, 104, 150, 199, 131, 213, 65, 119, 3, 28, 88, 3, 131, 24, 187, 47, 9, 236, 87, 232, 242, 30, 104, 251, 174, 134, 133, 174, 208, 36, 94, 175, 252, 11, 117, 244, 36, 129, 59, 92, 229, 104, 48, 249, 184, 208, 84, 209, 185, 119, 181, 42, 33, 218, 245, 80, 121, 227, 45, 36, 110, 85, 37, 18, 135, 236, 7, 134, 26, 78, 36, 95, 24, 225, 74, 151, 177, 15, 153, 56, 247, 236, 232, 110, 150, 209, 160, 155, 171, 153, 186, 141, 181, 187, 90, 221, 67, 69, 95, 110, 215, 155, 63, 73, 235, 219, 12, 242, 17, 168, 43, 65, 78, 125, 197, 165, 28, 203, 83, 11, 207, 59, 184, 232, 203, 252, 161, 174, 5, 13, 186, 64, 165, 204, 249, 13, 206, 248, 139, 128, 52, 34, 29, 200, 245, 14, 178, 35, 141, 14, 206, 44, 249, 110, 157, 176, 208, 77, 18, 57, 187, 149, 20, 250, 20, 149, 63, 81, 97, 208, 56, 255, 33, 45, 149, 91, 161, 144, 58, 205, 66, 141, 143, 99, 237, 208, 144, 203, 23, 228, 11, 91, 171, 95, 100, 26, 191, 232, 131, 58, 6, 27, 173, 232, 183, 109, 247, 22, 251, 164, 15, 206, 133, 117, 215, 61, 169, 170, 27, 165, 187, 22, 140, 83, 91, 101, 20, 37, 7, 157, 98, 53, 146, 87, 198, 177, 59, 39, 58, 172, 134, 85, 5, 86, 245, 201, 145, 49, 82, 229, 74, 119, 19, 111, 59, 252, 216, 48, 21, 66, 154, 178, 86, 10, 4, 188, 65, 118, 214, 58, 112, 226, 212, 206, 247, 209, 204, 52, 30, 140, 129, 11, 125, 242, 48, 26, 250, 212, 232, 109, 168, 137, 66, 118, 158, 78, 209, 44, 201, 12, 219, 243, 35, 202, 4, 53, 91, 85, 185, 159, 187, 44, 230, 22, 159, 62, 128, 165, 161, 122, 133, 27, 104, 9, 119, 108, 92, 126, 178, 38, 71, 96, 105, 4, 255, 246, 246, 183, 127, 25, 184, 248, 68, 6, 139, 237, 143, 140, 147, 251, 157, 193, 254, 60, 28, 195, 40, 14, 42, 31, 95, 127, 196, 70, 142, 92, 3, 156, 12, 6, 134, 97, 39, 180, 217, 224, 115, 179, 177, 104, 198, 206, 61, 166, 71, 161, 107, 33, 192, 170, 198, 183, 132, 94, 96, 252, 115, 125, 213, 235, 220, 141, 118, 157, 159, 165, 164, 231, 31, 75, 231, 252, 8, 16, 40, 5, 97, 148, 134, 38, 254, 134, 180, 218, 223, 221, 200, 10, 62, 211, 124, 206, 118, 9, 208, 59, 120, 194, 18, 234, 121, 123, 120, 27, 117, 142, 235, 208, 5, 11, 163, 244, 99, 103, 77, 221, 164, 77, 41, 110, 129, 157, 245, 231, 175, 2, 94, 235, 176, 67, 3, 37, 6, 90, 117, 97, 182, 218, 166, 39, 14, 139, 226, 240, 82, 212, 38, 7, 193, 238, 197, 16, 153, 206, 198, 250, 96, 199, 209, 142, 240, 14, 40, 7, 134, 184, 244, 130, 37, 209, 148, 9, 227, 240, 110, 226, 216, 96, 121, 53, 109, 147, 152, 33, 147, 141, 91, 58, 193, 20, 27, 138, 227, 99, 127, 230, 46, 37, 80, 138, 3, 73, 143, 151, 30, 230, 49, 12, 221, 221, 249, 56, 186, 200, 3, 215, 178, 130, 236, 48, 48, 171, 60, 80, 100, 244, 254, 115, 17, 89, 200, 5, 28, 202, 93, 232, 214, 136, 121, 13, 115, 46, 136, 228, 92, 83, 66, 115, 97, 97, 23, 141, 94, 241, 145, 152, 81, 11, 234, 70, 229, 253, 217, 193, 45, 183, 247, 168, 51, 9, 209, 245, 102, 60, 91, 238, 237, 45, 60, 222, 131, 196, 31, 59, 189, 226, 193, 229, 30, 58, 58, 183, 109, 46, 214, 24, 39, 229, 123, 235, 234, 111, 65, 193, 185, 109, 177, 91, 199, 10, 165, 70, 118, 122, 135, 28, 162, 27, 54, 246, 141, 83, 120, 104, 174, 179, 66, 112, 129, 152, 246, 95, 34, 165, 198, 242, 150, 0, 233, 191, 200, 84, 177, 158, 5, 119, 109, 139, 163, 168, 108, 113, 218, 32, 240, 93, 171, 152, 235, 166, 166, 253, 130, 94, 180, 158, 237, 170, 58, 39, 233, 15, 166, 208, 109, 221, 79, 181, 192, 175, 214, 176, 219, 188, 90, 159, 244, 249, 21, 134, 223, 130, 241, 69, 161, 117, 12, 221, 94, 36, 56, 56, 8, 91, 31, 210, 155, 71, 216, 21, 82, 70, 127, 251, 240, 52, 251, 205, 254, 160, 130, 240, 158, 173, 192, 131, 103, 93, 109, 61, 250, 34, 13, 59, 223, 239, 86, 163, 176, 255, 245, 193, 252, 198, 189, 241, 48, 4, 91, 74, 87, 58, 239, 7, 83, 161, 214, 210, 164, 130, 18, 108, 50, 49, 250, 205, 51, 131, 201, 182, 57, 21, 159, 85, 103, 202, 49, 247, 222, 162, 108, 158, 70, 104, 69, 254, 110, 167, 93, 194, 126, 32, 136, 242, 131, 25, 69, 51, 93, 223, 102, 58, 249, 18, 241, 20, 33, 224, 28, 174, 137, 113, 92, 28, 250, 82, 253, 112, 113, 39, 148, 199, 245, 251, 17, 11, 44, 104, 74, 210, 169, 42, 47, 182, 166, 220, 119, 208, 212, 90, 20, 160, 0, 162, 182, 66, 187, 116, 99, 170, 78, 4, 163, 87, 200, 26, 35, 192, 114, 150, 241, 116, 100, 101, 116, 179, 135, 111, 147, 88, 75, 241, 148, 52, 13, 149, 184, 177, 185, 186, 136, 119, 51, 29, 12, 200, 160, 195, 213, 68, 196, 242, 160, 129, 90, 90, 160, 48, 167, 77, 75, 229, 142, 236, 34, 224, 202, 227, 114, 147, 167, 175, 127, 47, 249, 249, 194, 124, 176, 8, 170, 191, 48, 160, 112, 50, 21, 55, 140, 34, 197, 179, 29, 156, 116, 55, 48, 115, 40, 196, 156, 80, 90, 155, 208, 126, 221, 95, 170, 241, 103, 110, 231, 239, 28, 60, 58, 212, 19, 87, 254, 176, 35, 255, 159, 200, 206, 95, 221, 87, 27, 250, 253, 26, 217, 129, 179, 38, 81, 253, 64, 159, 162, 98, 159, 237, 4, 147, 46, 201, 46, 162, 49, 128, 95, 104, 146, 251, 106, 83, 73, 113, 105, 121, 205, 141, 44, 209, 66, 101, 146, 196, 107, 242, 192, 245, 151, 108, 216, 200, 225, 178, 67, 249, 186, 250, 225, 253, 108, 162, 76, 62, 227, 107, 157, 162, 40, 46, 1, 218, 51, 235, 23, 128, 8, 246, 210, 144, 45, 114, 124, 28, 149, 195, 176, 156, 173, 229, 136, 171, 103, 35, 105, 129, 105, 165, 230, 193, 207, 184, 170, 35, 172, 164, 135, 44, 207, 246, 83, 211, 254, 62, 111, 62, 253, 97, 139, 38, 127, 191, 130, 212, 245, 218, 22, 111, 119, 230, 45, 85, 13, 41, 209, 191, 168, 24, 194, 106, 124, 228, 84, 128, 109, 241, 203, 181, 89, 99, 192, 81, 247, 236, 7, 105, 56, 81, 113, 144, 205, 149, 231, 119, 220, 51, 88, 201, 245, 192, 176, 195, 104, 232, 121, 168, 132, 98, 142, 33, 175, 214, 173, 234, 204, 97, 139, 146, 84, 132, 26, 137, 44, 211, 106, 192, 165, 157, 157, 226, 152, 101, 4, 140, 195, 19, 51, 57, 76, 239, 179, 197, 249, 67, 76, 211, 129, 209, 238, 182, 230, 33, 121, 63, 11, 201, 154, 170, 238, 111, 181, 21, 132, 160, 220, 87, 64, 123, 72, 150, 206, 148, 171, 125, 43, 72, 177, 25, 223, 173, 65, 16, 72, 253, 52, 85, 158, 20, 131, 154, 160, 201, 125, 242, 129, 135, 18, 167, 23, 37, 25, 34, 31, 131, 124, 69, 176, 78, 245, 181, 47, 210, 36, 204, 199, 93, 109, 224, 253, 89, 212, 113, 185, 125, 124, 5, 199, 54, 70, 51, 58, 55, 209, 136, 193, 124, 64, 174, 24, 234, 90, 28, 205, 100, 79, 193, 55, 212, 96, 231, 243, 143, 159, 223, 93, 153, 35, 218, 78, 143, 12, 61, 183, 91, 104, 185, 139, 106, 140, 37, 9, 157, 120, 81, 5, 201, 11, 45, 82, 252, 200, 44, 217, 10, 178, 41, 205, 42, 196, 150, 236, 149, 153, 187, 224, 200, 162, 191, 231, 123, 81, 163, 50, 62, 208, 52, 26, 127, 162, 221, 222, 88, 197, 171, 30, 29, 172, 94, 73, 163, 191, 177, 179, 99, 221, 204, 204, 59, 77, 64, 145, 39, 67, 200, 89, 171, 57, 28, 141, 98, 150, 234, 50, 200, 83, 170, 82, 157, 170, 97, 41, 250, 3, 46, 142, 196, 182, 75, 232, 84, 124, 220, 140, 198, 70, 92, 231, 94, 22, 183, 1, 221, 254, 14, 152, 81, 0, 123, 76, 164, 158, 232, 170, 246, 66, 21, 97, 125, 125, 117, 87, 108, 170, 31, 79, 14, 70, 241, 18, 253, 198, 181, 50, 44, 96, 137, 202, 204, 30, 36, 68, 149, 209, 29, 65, 136, 113, 176, 145, 181, 198, 205, 59, 165, 92, 79, 67, 46, 137, 106, 255, 71, 160, 127, 104, 229, 255, 225, 128, 192, 43, 32, 144, 220, 207, 134, 179, 170, 127, 120, 123, 22, 229, 75, 251, 131, 30, 31, 160, 180, 65, 120, 98, 176, 149, 74, 217, 215, 77, 197, 41, 167, 169, 75, 182, 155, 255, 109, 255, 94, 191, 26, 192, 46, 29, 199, 95, 156, 182, 55, 214, 249, 192, 177, 31, 243, 125, 147, 154, 53, 211, 9, 5, 107, 222, 208, 71, 110, 120, 40, 134, 82, 140, 15, 217, 38, 10, 152, 189, 219, 29, 17, 248, 240, 14, 37, 228, 46, 174, 244, 57, 87, 89, 41, 220, 5, 145, 85, 174, 195, 230, 15, 173, 241, 212, 113, 61, 31, 6, 161, 5, 137, 76, 239, 186, 252, 39, 134, 15, 172, 171, 195, 174, 209, 37, 13, 223, 32, 255, 86, 139, 50, 25, 161, 74, 97, 45, 69, 197, 139, 140, 22, 160, 62, 54, 79, 34, 248, 138, 49, 114, 54, 61, 118, 152, 19, 247, 167, 5, 78, 129, 97, 159, 12, 107, 181, 145, 151, 116, 103, 136, 223, 226, 68, 129, 143, 249, 250, 54, 228, 16, 123, 19, 56, 50, 242, 91, 68, 123, 31, 11, 238, 114, 108, 159, 41, 60, 253, 111, 254, 229, 248, 3, 92, 202, 91, 104, 198, 138, 80, 51, 51, 32, 125, 122, 10, 100, 223, 65, 26, 199, 29, 151, 100, 153, 42, 223, 15, 87, 123, 222, 133, 91, 0, 17, 168, 166, 47, 86, 212, 240, 82, 88, 176, 71, 36, 57, 71, 56, 13, 53, 205, 122, 149, 241, 208, 23, 83, 221, 89, 149, 112, 215, 221, 232, 154, 209, 53, 105, 20, 224, 14, 160, 211, 208, 26, 127, 68, 40, 52, 178, 19, 161, 213, 120, 186, 33, 143, 183, 251, 84, 70, 26, 178, 2, 117, 150, 89, 225, 87, 9, 235, 240, 229, 239, 240, 165, 188, 119, 221, 136, 184, 153, 103, 92, 106, 9, 230, 164, 161, 106, 172, 142, 51, 0, 207, 255, 124, 42, 240, 243, 89, 110, 72, 85, 26, 95, 98, 49, 244, 148, 193, 151, 86, 197, 124, 215, 46, 163, 17, 67, 87, 255, 57, 247, 142, 70, 60, 131, 216, 84, 250, 189, 158, 93, 41, 150, 83, 253, 117, 215, 80, 227, 37, 175, 195, 69, 20, 182, 67, 41, 226, 48, 221, 103, 172, 11, 37, 94, 24, 102, 91, 95, 28, 141, 105, 105, 204, 207, 45, 12, 81, 110, 163, 106, 103, 207, 139, 141, 217, 206, 67, 121, 246, 11, 74, 36, 223, 247, 255, 172, 132, 83, 30, 164, 179, 81, 246, 49, 35, 140, 42, 100, 18, 117, 237, 142, 159, 86, 74, 129, 125, 72, 115, 78, 150, 100, 62, 7, 125, 209, 49, 235, 147, 237, 202, 17, 44, 82, 58, 177, 30, 199, 87, 215, 48, 215, 3, 246, 161, 160, 20, 173, 66, 28, 11, 99, 210, 6, 3, 55, 195, 132, 176, 207, 200, 197, 74, 77, 251, 169, 198, 69, 72, 97, 205, 121, 30, 70, 28, 216, 117, 153, 123, 208, 67, 136, 255, 232, 180, 218, 84, 247, 112, 186, 104, 197, 236, 36, 194, 253, 152, 150, 208, 64, 202, 149, 80, 16, 145, 0, 41, 77, 239, 105, 160, 215, 167, 193, 166, 227, 27, 221, 226, 181, 228, 192, 196, 153, 239, 4, 178, 225, 244, 5, 152, 223, 12, 136, 47, 228, 196, 118, 190, 8, 204, 26, 118, 24, 72, 47, 12, 105, 18, 220, 185, 119, 0, 83, 28, 160, 20, 100, 204, 143, 145, 15, 253, 173, 147, 23, 132, 233, 222, 157, 200, 79, 12, 239, 235, 30, 120, 85, 15, 182, 91, 82, 53, 14, 239, 12, 60, 154, 18, 2, 120, 196, 252, 156, 129, 1, 209, 127, 38, 186, 77, 78, 172, 171, 41, 50, 185, 107, 127, 66, 32, 102, 28, 112, 154, 110, 243, 86, 161, 167, 77, 14, 254, 69, 218, 171, 243, 53, 161, 69, 29, 81, 193, 180, 129, 236, 203, 57, 111, 251, 250, 64, 91, 142, 121, 56, 19, 61, 241, 196, 9, 141, 7, 1, 63, 63, 217, 136, 46, 129, 180, 160, 144, 97, 158, 248, 116, 176, 104, 156, 191, 246, 38, 175, 180, 232, 140, 43, 76, 122, 211, 166, 91, 164, 253, 155, 238, 182, 187, 159, 66, 126, 144, 252, 244, 57, 215, 152, 175, 4, 76, 17, 93, 163, 46, 166, 192, 153, 117, 17, 183, 3, 165, 113, 111, 216, 112, 40, 187, 241, 46, 128, 9, 91, 219, 112, 117, 246, 221, 175, 249, 56, 157, 235, 206, 103, 7, 215, 161, 148, 96, 12, 136, 50, 15, 49, 142, 160, 235, 233, 115, 152, 169, 2, 71, 85, 195, 131, 7, 177, 28, 245, 189, 201, 167, 222, 84, 182, 73, 124, 126, 162, 34, 40, 17, 172, 103, 56, 146, 244, 114, 27, 159, 206, 166, 251, 156, 119, 150, 161, 200, 3, 27, 202, 143, 26, 96, 105, 33, 78, 82, 192, 197, 137, 68, 215, 199, 125, 148, 240, 169, 3, 217, 78, 132, 40, 254, 166, 2, 221, 74, 107, 80, 133, 2, 169, 39, 47, 245, 179, 92, 136, 195, 38, 130, 29, 59, 221, 35, 205, 180, 67, 101, 235, 37, 224, 175, 164, 12, 85, 245, 55, 1, 151, 139, 100, 226, 184, 163, 138, 254, 17, 130, 63, 38, 39, 254, 6, 214, 173, 51, 169, 192, 244, 196, 126, 153, 118, 155, 32, 145, 121, 56, 43, 117, 235, 5, 75, 250, 159, 120, 92, 94, 158, 38, 193, 127, 177, 52, 177, 29, 211, 184, 97, 66, 29, 44, 253, 76, 178, 164, 236, 187, 121, 242, 125, 118, 186, 95, 206, 201, 38, 58, 2, 47, 209, 194, 70, 14, 35, 238, 109, 148, 13, 245, 198, 130, 253, 190, 22, 170, 53, 78, 141, 18, 16, 98, 95, 72, 248, 103, 218, 24, 230, 222, 121, 170, 238, 213, 33, 188, 196, 166, 41, 68, 114, 104, 191, 90, 26, 159, 232, 43, 31, 112, 208, 155, 98, 245, 166, 110, 149, 226, 239, 67, 163, 166, 251, 40, 93, 61, 247, 213, 170, 120, 104, 249, 39, 217, 124, 50, 118, 93, 191, 161, 0, 30, 94, 186, 123, 132, 63, 244, 7, 113, 221, 69, 85, 127, 6, 238, 167, 3, 62, 93, 102, 207, 118, 63, 87, 63, 156, 234, 152, 247, 166, 28, 105, 156, 25, 59, 188, 46, 106, 83, 147, 24, 186, 63, 77, 96, 255, 30, 82, 179, 245, 171, 148, 46, 52, 81, 239, 42, 24, 12, 124, 133, 0, 169, 219, 254, 34, 199, 54, 113, 102, 94, 204, 119, 9, 99, 121, 171, 96, 120, 168, 2, 178, 135, 130, 151, 197, 22, 82, 91, 240, 186, 152, 55, 1, 53, 193, 22, 203, 152, 135, 97, 197, 173, 250, 55, 137, 6, 112, 38, 12, 137, 77, 202, 53, 135, 184, 171, 127, 103, 35, 96, 145, 214, 69, 127, 80, 87, 163, 181, 81, 194, 221, 174, 12, 19, 156, 186, 176, 195, 246, 135, 94, 63, 171, 145, 199, 78, 59, 2, 174, 232, 101, 222, 43, 15, 226, 30, 3, 99, 57, 12, 90, 37, 201, 225, 198, 223, 88, 119, 201, 8, 108, 249, 91, 83, 139, 108, 16, 37, 52, 203, 171, 47, 131, 123, 9, 196, 104, 112, 31, 221, 125, 249, 211, 194, 77, 32, 233, 179, 10, 27, 175, 45, 12, 187, 114, 229, 55, 82, 153, 14, 75, 37, 131, 80, 246, 30, 51, 196, 80, 57, 225, 167, 226, 35, 201, 140, 61, 25, 66, 105, 15, 94, 1, 100, 111, 35, 234, 220, 141, 21, 204, 206, 136, 197, 157, 77, 151, 173, 158, 74, 171, 134, 73, 32, 61, 86, 210, 224, 208, 62, 202, 129, 58, 61, 168, 153, 190, 101, 13, 129, 185, 125, 40, 156, 38, 58, 130, 66, 165, 227, 0, 198, 112, 98, 137, 33, 164, 157, 242, 14, 141, 146, 215, 37, 106, 156, 8, 202, 183, 213, 30, 0, 186, 144, 206, 208, 224, 24, 39, 204, 175, 203, 137, 96, 181, 69, 86, 9, 228, 217, 31, 147, 70, 183, 26, 27, 241, 113, 43, 186, 221, 183, 89, 250, 35, 159, 161, 200, 42, 182, 252, 217, 87, 22, 78, 219, 116, 74, 25, 14, 164, 255, 103, 10, 183, 168, 186, 198, 222, 179, 99, 175, 89, 141, 21, 45, 235, 45, 97, 125, 45, 89, 79, 17, 103, 185, 137, 41, 240, 131, 106, 247, 26, 192, 3, 217, 198, 171, 127, 147, 99, 100, 67, 240, 28, 192, 38, 33, 189, 183, 238, 20, 73, 0, 101, 8, 18, 167, 11, 141, 154, 42, 78, 126, 149, 246, 95, 93, 171, 41, 151, 224, 52, 253, 252, 46, 110, 96, 163, 45, 208, 90, 84, 127, 78, 183, 103, 92, 41, 250, 186, 105, 254, 12, 175, 221, 70, 175, 200, 202, 234, 205, 182, 221, 197, 184, 23, 96, 168, 102, 255, 165, 64, 11, 191, 161, 230, 4, 233, 205, 77, 65, 116, 4, 3, 242, 150, 5, 128, 109, 198, 201, 197, 176, 144, 73, 232, 11, 114, 183, 171, 242, 221, 134, 152, 97, 250, 160, 120, 254, 18, 100, 5, 244, 9, 251, 93, 37, 60, 216, 50, 36, 200, 94, 41, 152, 58, 24, 192, 229, 154, 235, 4, 229, 94, 140, 206, 91, 228, 201, 5, 115, 81, 163, 170, 151, 228, 68, 176, 25, 118, 38, 117, 248, 61, 113, 134, 124, 237, 119, 78, 159, 56, 206, 251, 40, 71, 203, 28, 67, 191, 105, 192, 157, 53, 227, 213, 41, 112, 252, 144, 23, 44, 81, 195, 51, 168, 224, 243, 174, 136, 80, 128, 25, 216, 200, 144, 181, 186, 37, 50, 1, 139, 97, 138, 252, 252, 78, 87, 145, 149, 107, 155, 213, 180, 10, 126, 172, 230, 178, 76, 144, 205, 63, 157, 236, 136, 111, 96, 5, 43, 117, 118, 157, 51, 202, 196, 196, 251, 142, 142, 131, 64, 225, 38, 199, 196, 181, 140, 129, 135, 5, 38, 215, 92, 16, 220, 33, 221, 169, 63, 58, 46, 2, 186, 222, 197, 52, 193, 3, 131, 185, 62, 3, 2, 211, 110, 51, 177, 136, 130, 243, 251, 215, 68, 217, 39, 105, 111, 242, 102, 243, 146, 173, 195, 198, 17, 199, 3, 250, 108, 12, 216, 169, 97, 166, 20, 103, 215, 114, 11, 52, 119, 212, 46, 124, 31, 163, 36, 165, 167, 46, 176, 189, 29, 50, 100, 40, 149, 20, 62, 65, 76, 232, 173, 215, 88, 50, 84, 217, 32, 235, 213, 13, 8, 114, 164, 138, 155, 117, 11, 208, 168, 169, 88, 235, 84, 27, 15, 152, 1, 108, 51, 140, 0, 72, 103, 120, 109, 95, 35, 75, 155, 48, 107, 149, 226, 96, 254, 194, 188, 250, 140, 241, 72, 58, 50, 104, 175, 73, 177, 230, 131, 178, 232, 76, 224, 154, 6, 120, 245, 107, 221, 95, 2, 1, 84, 110, 50, 225, 131, 248, 183, 194, 80, 40, 67, 158, 92, 39, 196, 138, 170, 150, 119, 182, 117, 109, 70, 229, 198, 233, 38, 148, 107, 221, 186, 208, 106, 240, 213, 111, 139, 241, 150, 92, 124, 211, 4, 216, 89, 76, 14, 195, 205, 96, 242, 22, 245, 197, 138, 27, 55, 7, 219, 55, 162, 254, 176, 251, 80, 38, 126, 139, 173, 235, 130, 244, 189, 116, 219, 195, 122, 237, 18, 190, 96, 254, 70, 17, 249, 63, 3, 226, 149, 29, 144, 191, 233, 174, 189, 23, 200, 195, 173, 179, 179, 24, 198, 177, 136, 111, 95, 117, 110, 34, 111, 252, 51, 235, 59, 70, 44, 201, 251, 236, 101, 190, 194, 43, 131, 91, 64, 102, 156, 156, 253, 172, 117, 200, 57, 190, 134, 85, 43, 240, 217, 12, 22, 45, 255, 158, 110, 205, 17, 50, 39, 233, 61, 229, 235, 156, 251, 8, 211, 22, 230, 182, 185, 61, 60, 120, 8, 14, 17, 142, 116, 227, 101, 246, 130, 222, 74, 244, 62, 95, 113, 215, 239, 9, 131, 238, 194, 96, 233, 238, 128, 173, 11, 63, 184, 219, 34, 225, 66, 110, 158, 201, 76, 221, 229, 228, 48, 96, 179, 72, 211, 229, 171, 102, 213, 110, 153, 89, 113, 34, 54, 41, 89, 213, 252, 107, 212, 245, 118, 65, 65, 168, 141, 137, 113, 6, 92, 14, 173, 136, 226, 60, 167, 227, 242, 139, 145, 118, 234, 235, 158, 33, 57, 175, 240, 99, 214, 43, 200, 227, 153, 40, 77, 67, 225, 72, 169, 144, 6, 186, 195, 46, 3, 6, 44, 14, 203, 31, 147, 147, 79, 111, 40, 205, 183, 144, 24, 148, 41, 63, 70, 225, 12, 206, 16, 142, 70, 100, 144, 242, 4, 206, 183, 186, 74, 208, 151, 139, 61, 23, 84, 204, 200, 172, 62, 241, 57, 69, 213, 218, 69, 20, 70, 135, 109, 114, 33, 165, 192, 26, 178, 44, 175, 248, 46, 190, 238, 33, 94, 49, 218, 89, 158, 166, 54, 12, 228, 98, 242, 234, 207, 184, 251, 110, 196, 212, 102, 231, 71, 250, 3, 145, 249, 33, 195, 44, 164, 18, 203, 95, 174, 83, 195, 5, 149, 206, 245, 169, 85, 124, 165, 249, 154, 14, 221, 150, 176, 160, 189, 31, 137, 178, 191, 226, 203, 245, 72, 39, 23, 18, 127, 79, 94, 157, 241, 238, 70, 189, 130, 85, 72, 152, 52, 112, 174, 48, 129, 93, 227, 54, 48, 2, 96, 123, 44, 46, 47, 136, 194, 137, 170, 194, 198, 94, 42, 122, 139, 202, 93, 12, 255, 133, 176, 245, 88, 167, 124, 248, 48, 207, 77, 115, 61, 189, 96, 197, 141, 111, 193, 159, 186, 241, 185, 75, 234, 28, 109, 59, 38, 124, 39, 101, 109, 230, 202, 83, 7, 136, 102, 119, 55, 171, 171, 31, 156, 181, 140, 250, 117, 107, 133, 174, 132, 42, 13, 250, 74, 130, 119, 9, 142, 30, 140, 77, 139, 105, 24, 30, 144, 149, 150, 115, 182, 176, 202, 84, 198, 244, 161, 232, 207, 49, 220, 17, 111, 78, 32, 131, 145, 254, 132, 143, 160, 116, 18, 145, 35, 254, 66, 106, 182, 54, 28, 51, 137, 226, 102, 193, 224, 21, 199, 64, 59, 148, 120, 83, 87, 1, 13, 41, 52, 105, 229, 142, 13, 13, 123, 239, 230, 172, 191, 173, 42, 170, 182, 181, 150, 68, 12, 4, 140, 72, 248, 30, 227, 162, 57, 163, 42, 194, 152, 42, 7, 10, 98, 95, 72, 149, 131, 136, 202, 226, 223, 4, 127, 87, 210, 110, 9, 204, 48, 208, 252, 109, 73, 140, 51, 247, 8, 102, 220, 132, 217, 79, 246, 131, 78, 12, 28, 1, 71, 215, 208, 18, 189, 212, 167, 40, 108, 127, 109, 247, 53, 29, 252, 143, 124, 87, 158, 22, 76, 11, 114, 74, 248, 0, 249, 223, 45, 41, 174, 230, 75, 43, 90, 133, 4, 222, 157, 237, 114, 249, 215, 154, 58, 22, 230, 184, 151, 160, 94, 121, 205, 150, 105, 253, 212, 246, 86, 145, 186, 235, 18, 253, 55, 40, 46, 82, 68, 181, 46, 16, 114, 3, 37, 49, 153, 2, 80, 137, 35, 150, 241, 203, 169, 7, 8, 54, 199, 108, 23, 46, 226, 101, 93, 245, 19, 122, 216, 181, 58, 198, 168, 135, 106, 239, 47, 43, 147, 251, 100, 224, 207, 69, 185, 47, 105, 228, 194, 207, 139, 50, 56, 81, 215, 212, 91, 217, 206, 28, 11, 194, 49, 211, 180, 114, 157, 254, 234, 167, 197, 196, 125, 131, 101, 68, 40, 18, 188, 47, 89, 171, 143, 49, 94, 214, 79, 48, 37, 8, 103, 26, 180, 144, 222, 156, 36, 180, 23, 113, 171, 107, 89, 85, 76, 179, 127, 83, 37, 98, 175, 190, 19, 242, 38, 40, 135, 51, 6, 26, 30, 219, 203, 45, 82, 204, 194, 105, 246, 146, 13, 84, 105, 190, 11, 208, 182, 75, 94], - [199, 209, 171, 104, 44, 113, 248, 183, 234, 203, 2, 114, 2, 123, 91, 74, 33, 221, 67, 55, 231, 5, 184, 128, 128, 44, 184, 255, 88, 83, 29, 47, 145, 233, 181, 174, 180, 206, 54, 82, 233, 223, 163, 13, 24, 235, 154, 124, 235, 21, 44, 189, 146, 89, 233, 88, 115, 125, 243, 66, 35, 39, 19, 100, 182, 156, 234, 242, 12, 90, 64, 213, 176, 127, 165, 215, 106, 186, 148, 169, 55, 160, 177, 169, 245, 20, 16, 252, 85, 79, 60, 42, 180, 20, 183, 79, 172, 234, 37, 140, 18, 38, 175, 149, 212, 189, 140, 174, 151, 215, 252, 17, 235, 161, 106, 60, 39, 218, 192, 28, 23, 251, 132, 206, 27, 62, 129, 183, 46, 51, 58, 117, 121, 107, 54, 12, 77, 216, 175, 241, 152, 0, 187, 169, 83, 240, 126, 247, 32, 173, 116, 141, 150, 168, 200, 198, 141, 96, 112, 88, 116, 207, 148, 50, 110, 201, 13, 60, 2, 235, 2, 146, 129, 173, 244, 81, 212, 23, 205, 43, 52, 154, 121, 226, 238, 41, 93, 115, 253, 26, 194, 236, 21, 99, 218, 146, 175, 31, 6, 71, 227, 36, 142, 246, 116, 116, 75, 220, 83, 170, 150, 12, 136, 244, 252, 190, 6, 125, 224, 52, 77, 41, 7, 48, 164, 1, 1, 109, 165, 64, 0, 179, 70, 149, 229, 154, 148, 79, 26, 107, 207, 180, 46, 67, 232, 250, 149, 120, 139, 1, 209, 180, 97, 241, 93, 32, 61, 223, 108, 149, 168, 145, 226, 188, 172, 193, 236, 148, 25, 115, 16, 69, 100, 93, 135, 182, 10, 70, 14, 16, 183, 55, 41, 183, 83, 87, 191, 160, 106, 240, 224, 188, 249, 239, 85, 72, 115, 193, 113, 189, 95, 50, 74, 66, 24, 1, 118, 231, 166, 5, 225, 170, 61, 172, 134, 35, 87, 141, 55, 191, 196, 147, 6, 189, 125, 220, 126, 144, 65, 56, 150, 117, 225, 94, 232, 228, 142, 127, 167, 57, 74, 196, 230, 224, 21, 103, 140, 120, 164, 106, 217, 106, 130, 232, 100, 178, 123, 241, 176, 192, 153, 248, 151, 165, 41, 49, 180, 62, 100, 13, 45, 210, 245, 19, 206, 138, 156, 30, 5, 162, 36, 221, 249, 228, 218, 161, 251, 242, 87, 162, 180, 105, 40, 5, 237, 48, 249, 1, 201, 250, 182, 226, 58, 123, 141, 212, 239, 253, 56, 71, 35, 217, 223, 83, 39, 91, 10, 155, 216, 134, 49, 143, 134, 18, 8, 72, 246, 56, 232, 223, 237, 141, 156, 196, 169, 24, 217, 75, 80, 25, 28, 171, 2, 166, 165, 63, 255, 7, 170, 186, 79, 214, 194, 134, 246, 51, 119, 17, 97, 67, 93, 220, 197, 2, 86, 96, 62, 152, 205, 104, 21, 255, 163, 236, 246, 225, 19, 112, 78, 60, 108, 189, 248, 224, 213, 230, 143, 44, 214, 56, 208, 71, 134, 229, 84, 181, 233, 197, 164, 99, 117, 145, 30, 186, 203, 192, 233, 221, 252, 187, 61, 119, 219, 193, 155, 231, 125, 240, 76, 172, 238, 250, 171, 174, 211, 95, 15, 186, 20, 95, 243, 185, 52, 165, 106, 95, 227, 90, 31, 179, 79, 42, 73, 9, 81, 243, 101, 163, 133, 52, 223, 29, 201, 253, 198, 204, 91, 91, 160, 102, 79, 14, 183, 253, 198, 90, 10, 125, 95, 48, 22, 28, 94, 214, 8, 224, 127, 98, 54, 140, 87, 86, 183, 207, 33, 79, 166, 17, 114, 145, 194, 104, 0, 122, 124, 147, 48, 37, 78, 214, 81, 166, 167, 97, 0, 203, 140, 141, 155, 34, 109, 164, 136, 131, 32, 225, 183, 67, 10, 9, 196, 248, 51, 237, 125, 49, 109, 0, 222, 181, 66, 112, 154, 4, 53, 182, 227, 50, 194, 61, 18, 201, 209, 36, 143, 230, 155, 117, 41, 27, 134, 22, 250, 200, 28, 22, 169, 184, 158, 203, 36, 11, 129, 42, 12, 92, 152, 37, 68, 111, 117, 102, 174, 98, 238, 140, 231, 224, 228, 166, 84, 206, 112, 74, 15, 94, 251, 117, 240, 9, 75, 221, 100, 114, 147, 40, 117, 22, 73, 123, 73, 147, 57, 129, 145, 74, 43, 98, 65, 135, 182, 23, 24, 79, 109, 99, 212, 216, 209, 233, 206, 233, 110, 4, 81, 227, 106, 187, 254, 77, 110, 247, 50, 6, 99, 112, 99, 94, 61, 31, 132, 36, 52, 130, 207, 215, 219, 143, 243, 36, 146, 243, 27, 175, 35, 218, 21, 95, 138, 42, 169, 237, 172, 28, 135, 166, 160, 234, 255, 157, 130, 86, 24, 106, 187, 244, 129, 18, 228, 107, 248, 11, 216, 235, 177, 58, 94, 145, 144, 104, 67, 79, 19, 156, 102, 110, 206, 215, 146, 52, 79, 142, 129, 199, 220, 160, 116, 204, 248, 206, 205, 70, 133, 192, 214, 60, 247, 234, 184, 65, 153, 239, 36, 101, 92, 95, 20, 153, 108, 114, 91, 76, 212, 199, 29, 14, 151, 43, 178, 248, 6, 196, 157, 41, 202, 194, 5, 89, 192, 92, 92, 233, 77, 61, 83, 225, 197, 38, 98, 119, 130, 68, 67, 70, 80, 237, 133, 107, 66, 109, 165, 103, 49, 101, 77, 118, 201, 187, 176, 85, 66, 229, 173, 43, 253, 61, 142, 190, 230, 193, 224, 142, 29, 86, 96, 61, 215, 67, 158, 89, 193, 245, 45, 165, 179, 85, 198, 57, 237, 113, 246, 37, 78, 76, 90, 66, 253, 224, 183, 219, 211, 130, 245, 232, 248, 193, 168, 122, 25, 174, 55, 30, 52, 209, 32, 255, 92, 182, 140, 248, 155, 55, 108, 218, 13, 97, 253, 191, 35, 95, 49, 190, 46, 134, 246, 161, 117, 156, 176, 186, 193, 203, 221, 14, 75, 163, 213, 212, 212, 225, 88, 137, 115, 77, 181, 198, 77, 182, 206, 242, 8, 50, 218, 201, 139, 227, 53, 67, 101, 151, 87, 253, 196, 71, 187, 194, 2, 78, 124, 131, 175, 150, 247, 41, 15, 24, 235, 143, 238, 60, 185, 245, 33, 135, 178, 222, 231, 61, 190, 178, 57, 33, 152, 19, 127, 138, 47, 207, 163, 197, 210, 183, 188, 148, 168, 130, 133, 243, 32, 15, 29, 215, 94, 144, 230, 102, 73, 172, 184, 70, 139, 176, 168, 183, 12, 119, 55, 126, 83, 50, 219, 229, 120, 125, 159, 180, 252, 177, 223, 197, 132, 92, 104, 237, 144, 212, 143, 231, 225, 108, 94, 245, 108, 150, 36, 84, 61, 248, 238, 125, 225, 71, 72, 119, 183, 220, 248, 76, 114, 170, 187, 172, 227, 60, 52, 119, 113, 176, 210, 121, 183, 108, 35, 146, 104, 191, 207, 93, 62, 170, 4, 213, 63, 73, 163, 121, 236, 150, 189, 186, 23, 127, 232, 108, 76, 7, 36, 214, 245, 191, 50, 59, 248, 6, 137, 247, 66, 189, 42, 156, 46, 10, 132, 15, 248, 228, 216, 102, 125, 87, 186, 238, 198, 235, 218, 59, 244, 23, 53, 98, 90, 125, 74, 204, 20, 9, 13, 73, 80, 186, 103, 55, 116, 254, 140, 32, 232, 195, 117, 150, 38, 160, 112, 135, 79, 220, 138, 41, 203, 251, 224, 97, 214, 171, 212, 222, 190, 150, 228, 223, 36, 230, 52, 26, 209, 112, 209, 41, 130, 166, 105, 2, 232, 255, 74, 123, 204, 15, 102, 237, 1, 43, 162, 206, 170, 74, 22, 236, 165, 235, 225, 1, 39, 233, 163, 23, 92, 36, 209, 239, 38, 17, 20, 138, 84, 169, 136, 73, 28, 190, 155, 73, 222, 141, 80, 117, 176, 178, 13, 161, 213, 148, 175, 82, 17, 80, 33, 84, 234, 89, 166, 162, 98, 218, 17, 45, 170, 59, 76, 11, 123, 120, 200, 190, 17, 218, 184, 195, 54, 101, 64, 154, 187, 41, 241, 209, 90, 16, 193, 59, 169, 157, 199, 255, 109, 115, 156, 185, 150, 95, 232, 142, 191, 211, 235, 207, 54, 201, 59, 73, 39, 75, 122, 223, 165, 154, 64, 37, 88, 19, 39, 189, 171, 220, 230, 97, 13, 92, 186, 23, 228, 129, 184, 23, 98, 132, 17, 164, 209, 101, 11, 239, 133, 54, 129, 238, 59, 217, 74, 224, 126, 28, 86, 169, 107, 20, 193, 253, 118, 86, 176, 184, 119, 245, 48, 38, 106, 227, 67, 203, 119, 206, 57, 179, 103, 25, 224, 88, 211, 169, 247, 175, 226, 13, 224, 254, 228, 93, 45, 75, 84, 4, 107, 239, 236, 219, 249, 222, 71, 194, 24, 168, 21, 40, 84, 132, 165, 124, 173, 162, 87, 164, 202, 25, 49, 60, 245, 98, 124, 173, 194, 72, 147, 63, 173, 89, 247, 181, 174, 15, 24, 245, 110, 63, 153, 7, 159, 90, 115, 118, 42, 183, 9, 195, 115, 13, 86, 92, 97, 147, 125, 132, 194, 149, 90, 106, 50, 21, 51, 161, 228, 21, 190, 11, 246, 123, 123, 208, 13, 191, 40, 180, 106, 66, 28, 62, 245, 237, 89, 130, 108, 195, 223, 31, 28, 137, 176, 129, 123, 47, 172, 42, 146, 102, 59, 58, 66, 39, 245, 37, 74, 208, 162, 228, 209, 125, 132, 224, 132, 200, 120, 239, 126, 131, 153, 69, 104, 254, 201, 38, 44, 11, 5, 43, 19, 39, 27, 209, 201, 149, 202, 155, 199, 24, 129, 241, 12, 63, 220, 167, 92, 58, 111, 144, 33, 230, 196, 236, 34, 41, 119, 20, 122, 141, 103, 77, 9, 96, 58, 249, 162, 162, 215, 24, 55, 207, 41, 248, 119, 100, 247, 80, 39, 7, 225, 225, 210, 124, 65, 200, 72, 237, 165, 16, 157, 235, 109, 85, 234, 21, 206, 109, 227, 145, 188, 244, 29, 13, 85, 107, 43, 143, 40, 199, 105, 53, 151, 44, 230, 68, 243, 225, 140, 214, 199, 181, 13, 180, 58, 213, 76, 142, 132, 137, 185, 223, 207, 42, 97, 31, 56, 104, 198, 196, 151, 36, 219, 36, 171, 72, 37, 21, 161, 83, 163, 122, 11, 180, 202, 97, 117, 38, 189, 14, 150, 89, 161, 250, 147, 10, 174, 120, 116, 68, 178, 71, 105, 195, 115, 229, 164, 100, 15, 129, 21, 221, 224, 175, 136, 105, 221, 244, 253, 70, 213, 70, 242, 245, 138, 23, 116, 16, 19, 233, 124, 38, 15, 235, 79, 216, 54, 97, 119, 11, 176, 8, 102, 132, 206, 28, 41, 214, 46, 151, 162, 171, 183, 39, 7, 237, 37, 238, 139, 226, 149, 169, 121, 177, 150, 15, 0, 144, 126, 114, 65, 195, 203, 111, 15, 28, 166, 177, 241, 237, 59, 120, 214, 51, 242, 108, 182, 19, 234, 26, 242, 26, 147, 160, 224, 250, 216, 152, 112, 251, 72, 38, 194, 197, 90, 56, 196, 16, 236, 8, 83, 213, 217, 113, 58, 41, 100, 142, 53, 126, 29, 83, 164, 198, 85, 98, 138, 171, 6, 95, 5, 140, 141, 148, 132, 125, 94, 127, 104, 53, 122, 47, 224, 246, 103, 170, 155, 224, 231, 205, 79, 66, 99, 75, 241, 174, 180, 126, 232, 1, 140, 138, 82, 159, 233, 60, 84, 200, 135, 58, 95, 221, 219, 85, 24, 5, 204, 98, 122, 108, 70, 114, 82, 29, 164, 13, 11, 101, 171, 50, 119, 158, 133, 58, 142, 45, 216, 168, 244, 79, 5, 241, 4, 163, 46, 126, 236, 158, 225, 160, 18, 54, 85, 65, 113, 134, 204, 156, 113, 182, 2, 136, 120, 117, 116, 51, 128, 56, 35, 97, 79, 69, 135, 167, 210, 239, 235, 105, 193, 30, 128, 249, 213, 245, 249, 231, 51, 10, 181, 110, 254, 115, 121, 235, 72, 185, 1, 14, 205, 99, 117, 35, 236, 161, 122, 238, 14, 242, 156, 23, 67, 122, 167, 142, 248, 217, 221, 213, 70, 232, 235, 23, 156, 217, 122, 110, 43, 231, 56, 52, 235, 53, 213, 45, 185, 194, 165, 93, 211, 56, 65, 102, 70, 34, 105, 102, 227, 41, 188, 105, 195, 28, 34, 209, 64, 138, 140, 130, 223, 187, 25, 51, 51, 6, 118, 159, 73, 38, 98, 134, 183, 237, 39, 89, 185, 60, 211, 233, 15, 102, 65, 29, 228, 134, 202, 182, 12, 4, 229, 110, 113, 147, 3, 76, 160, 187, 172, 62, 250, 243, 160, 182, 181, 130, 176, 115, 241, 132, 136, 8, 112, 104, 215, 129, 115, 50, 56, 19, 113, 237, 191, 146, 70, 25, 6, 205, 131, 18, 73, 111, 69, 203, 232, 252, 92, 90, 130, 139, 86, 213, 19, 175, 79, 17, 99, 23, 156, 111, 246, 83, 99, 76, 189, 182, 135, 140, 245, 79, 143, 197, 70, 73, 232, 250, 233, 95, 114, 135, 138, 177, 98, 165, 21, 138, 218, 37, 8, 112, 71, 126, 48, 131, 201, 135, 36, 194, 18, 158, 50, 236, 27, 206, 168, 218, 53, 197, 48, 233, 2, 0, 168, 138, 215, 221, 176, 51, 200, 84, 17, 253, 127, 51, 217, 6, 83, 108, 133, 149, 198, 191, 94, 205, 198, 100, 249, 190, 190, 96, 26, 59, 99, 152, 142, 255, 116, 200, 58, 15, 25, 153, 27, 79, 153, 194, 88, 139, 14, 234, 229, 215, 47, 232, 200, 150, 51, 22, 250, 156, 141, 221, 154, 61, 88, 95, 55, 128, 87, 6, 128, 156, 39, 19, 131, 137, 157, 137, 248, 177, 148, 251, 238, 126, 215, 253, 32, 158, 141, 108, 41, 111, 108, 181, 224, 14, 55, 36, 104, 87, 210, 243, 231, 25, 90, 215, 14, 102, 54, 159, 4, 161, 24, 113, 86, 37, 117, 42, 73, 111, 124, 54, 171, 146, 156, 178, 82, 4, 199, 58, 21, 139, 124, 53, 189, 46, 225, 178, 59, 179, 207, 45, 175, 73, 32, 12, 71, 169, 59, 113, 233, 95, 136, 187, 103, 241, 33, 65, 233, 67, 135, 236, 225, 0, 162, 132, 47, 244, 30, 98, 207, 173, 133, 103, 111, 27, 209, 202, 74, 27, 24, 79, 218, 80, 163, 149, 81, 201, 63, 23, 252, 20, 70, 67, 143, 31, 118, 29, 51, 22, 86, 159, 18, 138, 91, 23, 8, 63, 85, 108, 155, 10, 114, 34, 56, 117, 104, 144, 172, 237, 146, 222, 1, 125, 0, 125, 228, 210, 53, 151, 186, 227, 117, 215, 240, 202, 180, 91, 251, 238, 172, 89, 150, 193, 96, 109, 154, 82, 55, 154, 123, 31, 140, 181, 181, 65, 41, 116, 47, 133, 14, 85, 32, 155, 49, 77, 115, 250, 99, 216, 193, 64, 226, 2, 229, 152, 164, 189, 16, 52, 79, 72, 71, 130, 251, 130, 245, 173, 254, 199, 3, 48, 138, 46, 206, 188, 61, 80, 235, 121, 52, 185, 209, 6, 175, 235, 224, 40, 159, 78, 58, 91, 143, 195, 159, 185, 223, 200, 196, 108, 27, 62, 180, 225, 114, 34, 145, 51, 157, 128, 204, 51, 9, 143, 241, 46, 128, 178, 208, 4, 238, 122, 62, 194, 24, 38, 106, 149, 125, 99, 246, 83, 81, 182, 228, 216, 152, 112, 44, 103, 161, 161, 77, 250, 187, 54, 109, 236, 178, 199, 232, 253, 8, 218, 157, 147, 114, 228, 50, 56, 3, 252, 169, 113, 44, 105, 100, 156, 154, 192, 143, 205, 82, 6, 58, 137, 206, 171, 121, 3, 58, 119, 19, 121, 49, 202, 161, 135, 110, 138, 252, 80, 190, 221, 240, 207, 96, 70, 213, 198, 86, 7, 217, 150, 97, 16, 158, 205, 78, 114, 59, 79, 196, 45, 153, 191, 184, 219, 236, 223, 40, 99, 163, 180, 232, 250, 255, 44, 86, 240, 110, 40, 18, 117, 244, 164, 38, 248, 181, 200, 199, 143, 24, 39, 117, 158, 204, 55, 144, 102, 69, 240, 25, 87, 157, 232, 21, 4, 180, 251, 134, 56, 27, 90, 3, 111, 144, 198, 189, 130, 213, 0, 47, 35, 144, 189, 55, 71, 155, 252, 28, 118, 36, 44, 211, 186, 143, 31, 193, 24, 154, 64, 134, 33, 229, 34, 228, 226, 44, 251, 171, 166, 215, 78, 71, 48, 163, 197, 26, 167, 183, 66, 158, 250, 231, 229, 171, 180, 250, 82, 13, 252, 40, 177, 239, 182, 197, 127, 81, 76, 219, 70, 138, 18, 157, 199, 6, 233, 49, 207, 9, 74, 151, 4, 142, 166, 129, 232, 131, 88, 71, 68, 74, 71, 25, 113, 5, 218, 109, 6, 159, 136, 164, 82, 32, 74, 241, 35, 51, 222, 50, 2, 15, 13, 12, 203, 240, 124, 152, 56, 166, 128, 79, 104, 28, 20, 196, 48, 50, 66, 2, 8, 106, 150, 93, 197, 123, 210, 46, 206, 119, 162, 224, 124, 195, 153, 80, 94, 96, 9, 126, 31, 65, 31, 173, 128, 117, 132, 164, 238, 162, 243, 229, 233, 51, 112, 156, 186, 125, 65, 254, 207, 27, 137, 82, 182, 41, 5, 241, 55, 104, 99, 90, 234, 124, 156, 146, 65, 251, 234, 139, 236, 50, 14, 58, 148, 99, 180, 132, 194, 147, 190, 10, 160, 180, 254, 116, 244, 138, 111, 6, 66, 10, 118, 188, 15, 224, 16, 62, 65, 166, 58, 170, 97, 13, 47, 37, 103, 76, 140, 147, 254, 151, 5, 144, 179, 241, 188, 152, 165, 86, 208, 221, 227, 222, 179, 215, 84, 213, 73, 149, 93, 149, 204, 117, 165, 243, 183, 212, 224, 95, 10, 204, 141, 126, 18, 93, 64, 176, 65, 118, 166, 47, 89, 128, 184, 138, 6, 204, 219, 207, 74, 167, 64, 206, 83, 184, 161, 145, 80, 225, 92, 15, 67, 231, 77, 61, 25, 0, 145, 23, 126, 72, 160, 225, 225, 238, 6, 232, 208, 42, 78, 7, 46, 45, 111, 89, 66, 31, 85, 145, 243, 133, 102, 135, 243, 17, 30, 70, 229, 185, 72, 176, 255, 192, 66, 123, 130, 152, 7, 150, 79, 34, 202, 66, 33, 206, 217, 216, 81, 100, 212, 27, 82, 209, 180, 196, 190, 21, 242, 133, 239, 53, 21, 80, 243, 138, 250, 72, 143, 81, 83, 25, 38, 70, 37, 52, 192, 184, 94, 237, 16, 231, 39, 89, 35, 103, 99, 119, 160, 180, 196, 88, 52, 88, 77, 213, 28, 193, 234, 155, 46, 50, 58, 237, 202, 209, 251, 225, 45, 50, 19, 118, 159, 54, 74, 232, 208, 203, 30, 200, 65, 168, 153, 200, 114, 231, 159, 64, 157, 190, 8, 189, 157, 67, 67, 77, 18, 86, 126, 135, 146, 91, 148, 233, 178, 147, 46, 117, 22, 158, 78, 143, 117, 202, 237, 28, 239, 154, 119, 27, 63, 122, 120, 150, 216, 155, 59, 97, 14, 164, 110, 193, 138, 72, 20, 194, 35, 46, 9, 109, 3, 199, 159, 153, 39, 124, 13, 29, 138, 172, 24, 179, 135, 204, 116, 6, 217, 248, 43, 158, 82, 192, 159, 251, 156, 129, 57, 199, 89, 69, 88, 48, 194, 107, 31, 23, 244, 40, 195, 117, 240, 42, 46, 62, 12, 160, 220, 56, 38, 87, 35, 172, 159, 162, 215, 2, 246, 23, 144, 61, 185, 105, 247, 169, 128, 173, 176, 71, 190, 208, 83, 236, 194, 218, 128, 182, 185, 99, 93, 235, 180, 214, 204, 98, 7, 179, 137, 10, 4, 46, 139, 46, 75, 158, 56, 177, 29, 141, 188, 105, 155, 245, 203, 85, 17, 226, 41, 64, 87, 60, 224, 246, 1, 15, 72, 157, 142, 118, 180, 154, 225, 37, 16, 199, 34, 214, 207, 4, 148, 67, 236, 231, 142, 103, 176, 65, 105, 61, 5, 208, 81, 50, 49, 133, 146, 110, 143, 33, 244, 69, 164, 253, 65, 111, 104, 230, 169, 53, 241, 45, 44, 163, 70, 51, 217, 128, 78, 17, 130, 228, 217, 0, 6, 171, 157, 6, 149, 223, 221, 210, 246, 238, 143, 11, 164, 218, 254, 126, 132, 224, 63, 14, 168, 148, 174, 221, 131, 207, 112, 132, 241, 145, 62, 60, 78, 97, 57, 36, 189, 220, 164, 212, 147, 49, 147, 141, 182, 232, 166, 255, 56, 145, 218, 180, 56, 76, 94, 50, 169, 190, 132, 72, 190, 46, 223, 114, 121, 40, 84, 192, 249, 173, 43, 223, 245, 2, 3, 45, 49, 250, 185, 239, 186, 158, 43, 141, 14, 68, 98, 30, 145, 144, 126, 236, 57, 141, 57, 157, 19, 91, 183, 33, 21, 4, 2, 16, 215, 213, 94, 189, 98, 177, 48, 246, 122, 56, 36, 3, 88, 208, 193, 63, 126, 108, 174, 204, 253, 246, 36, 238, 114, 105, 43, 118, 97, 158, 96, 186, 49, 107, 72, 25, 10, 207, 3, 200, 141, 71, 136, 25, 246, 106, 236, 71, 253, 10, 206, 10, 62, 8, 172, 73, 168, 242, 187, 13, 249, 113, 98, 172, 40, 133, 120, 80, 205, 17, 220, 255, 42, 237, 204, 86, 224, 199, 170, 75, 58, 250, 5, 64, 127, 95, 143, 86, 205, 84, 55, 201, 118, 153, 106, 253, 166, 252, 188, 115, 172, 23, 239, 152, 131, 127, 80, 4, 159, 105, 195, 137, 250, 150, 22, 5, 137, 124, 180, 70, 175, 16, 114, 10, 70, 249, 235, 194, 205, 13, 149, 32, 70, 124, 228, 185, 64, 98, 254, 155, 134, 117, 139, 137, 32, 147, 214, 9, 87, 21, 187, 10, 230, 27, 19, 123, 218, 145, 55, 238, 173, 254, 1, 62, 73, 129, 145, 171, 187, 148, 162, 40, 157, 128, 35, 106, 233, 29, 117, 103, 162, 204, 65, 248, 11, 248, 204, 222, 116, 164, 22, 250, 227, 225, 10, 234, 160, 160, 54, 106, 207, 145, 235, 196, 143, 51, 128, 239, 23, 20, 119, 8, 246, 62, 8, 180, 113, 50, 219, 5, 236, 252, 26, 227, 238, 254, 155, 150, 117, 190, 192, 57, 48, 121, 22, 40, 42, 217, 204, 18, 82, 245, 164, 133, 112, 87, 247, 171, 47, 131, 186, 36, 219, 55, 154, 60, 129, 95, 135, 132, 59, 146, 87, 5, 124, 222, 27, 76, 85, 116, 62, 81, 10, 174, 66, 164, 70, 17, 179, 70, 132, 149, 117, 177, 31, 243, 26, 133, 201, 159, 242, 206, 234, 23, 69, 189, 77, 245, 218, 220, 253, 25, 106, 93, 93, 223, 69, 76, 199, 133, 39, 219, 84, 146, 55, 246, 57, 61, 25, 191, 30, 195, 2, 98, 212, 142, 236, 85, 235, 7, 68, 83, 28, 240, 244, 52, 78, 52, 118, 5, 189, 165, 109, 108, 130, 46, 206, 39, 119, 38, 50, 109, 206, 227, 53, 31, 54, 158, 158, 69, 40, 64, 88, 153, 254, 21, 148, 180, 7, 132, 75, 70, 222, 137, 102, 170, 61, 42, 136, 138, 77, 40, 241, 36, 92, 17, 27, 128, 69, 36, 148, 156, 36, 97, 184, 242, 102, 75, 137, 144, 18, 89, 205, 106, 213, 238, 90, 91, 7, 64, 55, 45, 223, 39, 181, 6, 108, 145, 56, 148, 237, 42, 172, 148, 14, 74, 223, 93, 31, 77, 248, 98, 241, 159, 4, 121, 251, 144, 59, 138, 57, 118, 102, 167, 0, 114, 66, 83, 235, 65, 240, 166, 171, 191, 31, 152, 173, 72, 156, 152, 204, 100, 132, 160, 38, 178, 5, 57, 151, 233, 136, 28, 185, 105, 120, 129, 76, 36, 234, 154, 181, 150, 207, 253, 96, 89, 144, 57, 223, 166, 148, 253, 196, 187, 43, 77, 32, 166, 113, 105, 229, 130, 247, 138, 228, 68, 150, 232, 230, 220, 126, 92, 15, 222, 215, 240, 95, 214, 3, 97, 236, 85, 44, 54, 20, 152, 131, 26, 5, 16, 95, 2, 255, 94, 96, 217, 94, 143, 172, 205, 79, 99, 240, 52, 87, 245, 102, 10, 172, 145, 62, 187, 56, 215, 9, 94, 17, 57, 219, 71, 71, 174, 50, 219, 143, 41, 206, 62, 66, 22, 86, 156, 60, 103, 250, 85, 20, 197, 241, 133, 57, 202, 198, 182, 113, 15, 58, 201, 28, 241, 211, 47, 154, 42, 120, 6, 165, 95, 245, 58, 82, 74, 65, 103, 162, 158, 188, 91, 223, 134, 153, 116, 231, 24, 142, 211, 178, 214, 0, 95, 42, 117, 130, 101, 178, 236, 11, 129, 150, 37, 228, 230, 66, 178, 16, 49, 191, 14, 148, 26, 179, 175, 47, 184, 38, 129, 92, 189, 156, 33, 189, 234, 138, 237, 212, 46, 23, 192, 116, 255, 207, 186, 70, 150, 179, 229, 68, 38, 83, 234, 77, 8, 137, 65, 141, 237, 204, 220, 20, 54, 83, 120, 119, 193, 199, 19, 77, 205, 153, 232, 180, 171, 194, 185, 216, 205, 120, 29, 223, 133, 85, 24, 110, 175, 121, 81, 131, 27, 149, 166, 245, 128, 30, 215, 76, 186, 161, 125, 183, 206, 237, 175, 118, 77, 17, 68, 105, 115, 197, 10, 200, 17, 41, 194, 42, 81, 37, 97, 132, 87, 191, 225, 68, 200, 75, 246, 121, 19, 2, 65, 213, 31, 40, 125, 228, 59, 3, 76, 240, 15, 133, 186, 160, 15, 201, 251, 160, 238, 158, 116, 216, 147, 93, 224, 36, 33, 216, 49, 211, 98, 152, 183, 53, 37, 102, 12, 178, 161, 32, 39, 102, 120, 10, 241, 71, 143, 18, 4, 175, 101, 63, 202, 243, 146, 209, 8, 108, 91, 105, 128, 13, 104, 24, 104, 246, 168, 75, 84, 160, 126, 132, 129, 40, 207, 150, 110, 8, 227, 79, 204, 58, 230, 233, 217, 195, 130, 90, 62, 88, 245, 93, 184, 82, 202, 216, 21, 132, 73, 5, 236, 6, 212, 237, 37, 82, 18, 211, 179, 190, 197, 59, 183, 242, 95, 162, 107, 208, 36, 140, 84, 73, 209, 92, 212, 191, 154, 122, 101, 221, 10, 219, 109, 12, 127, 1, 147, 79, 145, 124, 88, 106, 57, 167, 59, 219, 67, 113, 24, 187, 126, 145, 0, 171, 173, 248, 144, 25, 106, 34, 69, 132, 79, 224, 33, 160, 232, 154, 133, 17, 100, 151, 226, 145, 35, 145, 14, 47, 94, 119, 132, 91, 184, 6, 11, 31, 7, 125, 24, 82, 79, 197, 184, 97, 130, 6, 197, 243, 89, 91, 232, 211, 106, 119, 150, 219, 76, 230, 248, 175, 165, 223, 179, 255, 167, 225, 50, 67, 130, 0, 173, 118, 45, 58, 167, 213, 215, 65, 154, 208, 165, 140, 6, 215, 222, 129, 255, 169, 144, 31, 131, 169, 164, 124, 78, 221, 182, 208, 199, 151, 171, 41, 207, 64, 223, 98, 28, 104, 228, 33, 133, 151, 213, 131, 83, 140, 148, 81, 124, 162, 25, 101, 85, 26, 142, 122, 86, 58, 225, 242, 82, 68, 75, 195, 150, 184, 57, 125, 84, 61, 59, 58, 105, 111, 24, 129, 245, 17, 228, 192, 6, 250, 97, 39, 184, 242, 134, 71, 39, 82, 220, 99, 90, 8, 121, 2, 138, 180, 117, 14, 253, 127, 10, 161, 122, 195, 214, 175, 20, 164, 109, 21, 36, 145, 188, 103, 214, 151, 117, 164, 119, 50, 112, 171, 2, 169, 134, 170, 238, 216, 177, 172, 122, 103, 172, 178, 175, 17, 16, 107, 231, 175, 237, 90, 70, 75, 82, 170, 16, 124, 200, 123, 125, 143, 136, 250, 253, 23, 250, 54, 60, 61, 20, 167, 128, 139, 123, 49, 10, 217, 129, 195, 163, 105, 34, 71, 122, 242, 6, 48, 10, 148, 251, 65, 134, 149, 244, 16, 231, 24, 247, 253, 96, 65, 13, 147, 204, 7, 235, 244, 190, 77, 155, 228, 162, 225, 163, 189, 192, 51, 245, 5, 95, 237, 191, 29, 113, 215, 91, 22, 93, 14, 222, 77, 23, 121, 229, 155, 42, 214, 143, 187, 108, 138, 127, 127, 200, 93, 147, 136, 68, 20, 131, 175, 26, 203, 32, 145, 11, 28, 218, 190, 209, 199, 136, 239, 109, 28, 7, 103, 230, 191, 0, 167, 94, 54, 6, 55, 13, 53, 150, 43, 8, 155, 214, 107, 220, 149, 154, 15, 252, 247, 65, 195, 207, 126, 77, 142, 240, 76, 225, 107, 220, 113, 22, 83, 249, 213, 63, 241, 34, 134, 57, 127, 104, 8, 165, 107, 28, 145, 43, 106, 118, 64, 209, 152, 226, 8, 187, 174, 253, 106, 45, 36, 162, 236, 215, 172, 130, 34, 205, 12, 74, 134, 7, 132, 137, 254, 232, 83, 129, 48, 93, 94, 246, 165, 35, 45, 159, 114, 62, 121, 50, 4, 56, 168, 68, 29, 16, 29, 181, 106, 24, 224, 101, 167, 183, 1, 125, 149, 141, 114, 130, 129, 163, 70, 183, 138, 217, 78, 51, 246, 250, 175, 38, 201, 223, 79, 221, 69, 236, 151, 123, 122, 9, 175, 78, 10, 219, 209, 189, 76, 59, 249, 2, 210, 12, 141, 28, 105, 188, 155, 46, 206, 218, 176, 32, 122, 124, 160, 13, 42, 232, 77, 139, 67, 192, 255, 124, 244, 105, 186, 59, 152, 133, 119, 191, 21, 245, 116, 202, 199, 3, 113, 75, 53, 29, 39, 210, 173, 173, 70, 205, 152, 133, 212, 255, 193, 104, 45, 44, 253, 124, 76, 161, 146, 222, 32, 64, 109, 126, 37, 202, 117, 40, 147, 1, 12, 156, 211, 30, 221, 132, 88, 143, 9, 140, 68, 215, 134, 180, 4, 191, 55, 247, 245, 215, 107, 25, 122, 238, 90, 154, 18, 25, 216, 149, 138, 182, 209, 64, 74, 233, 139, 204, 44, 202, 229, 68, 2, 1, 133, 93, 95, 201, 87, 78, 17, 153, 143, 225, 125, 80, 243, 90, 175, 217, 2, 229, 170, 221, 106, 145, 226, 182, 71, 61, 10, 241, 161, 167, 214, 65, 23, 77, 215, 185, 94, 76, 53, 2, 218, 27, 224, 170, 176, 236, 89, 207, 98, 212, 128, 133, 40, 7, 33, 110, 242, 145, 168, 7, 177, 215, 136, 90, 158, 148, 157, 235, 185, 129, 106, 179, 6, 51, 18, 44, 226, 182, 223, 152, 77, 118, 137, 102, 56, 194, 56, 36, 221, 169, 221, 36, 162, 26, 62, 14, 41, 61, 117, 38, 24, 71, 104, 0, 89, 159, 73, 44, 115, 57, 11, 37, 18, 19, 244, 245, 138, 197, 98, 33, 83, 214, 138, 156, 89, 115, 249, 166, 134, 16, 5, 53, 218, 16, 2, 182, 9, 125, 67, 126, 128, 145, 141, 177, 8, 58, 189, 18, 96, 142, 254, 38, 164, 154, 228, 240, 69, 220, 63, 105, 15, 129, 39, 49, 229, 79, 136, 16, 90, 12, 46, 114, 209, 68, 60, 237, 112, 54, 117, 78, 79, 53, 233, 51, 113, 80, 247, 185, 242, 206, 31, 60, 94, 135, 84, 56, 209, 243, 186, 173, 116, 37, 228, 43, 224, 171, 215, 157, 55, 18, 148, 15, 76, 162, 219, 60, 197, 4, 141, 72, 129, 150, 7, 226, 78, 118, 216, 148, 95, 72, 58, 58, 136, 160, 49, 241, 181, 27, 254, 194, 128, 217, 207, 222, 230, 179, 107, 59, 0, 44, 237, 203, 75, 128, 138, 90, 28, 74, 66, 132, 175, 133, 57, 170, 86, 83, 197, 25, 208, 69, 255, 197, 99, 103, 213, 255, 75, 13, 185, 57, 133, 41, 84, 10, 41, 223, 139, 71, 246, 33, 73, 143, 185, 83, 25, 84, 136, 193, 133, 141, 160, 154, 87, 158, 241, 253, 109, 56, 158, 115, 169, 255, 195, 171, 128, 10, 206, 242, 177, 216, 7, 138, 156, 183, 172, 6, 28, 176, 181, 80, 223, 132, 193, 18, 64, 176, 235, 20, 15, 163, 206, 86, 142, 145, 253, 238, 16, 255, 126, 188, 167, 68, 110, 134, 108, 110, 14, 45, 96, 242, 170, 35, 247, 142, 138, 136, 207, 57, 233, 243, 132, 188, 151, 138, 138, 238, 114, 80, 233, 204, 141, 14, 56, 159, 181, 223, 220, 60, 62, 185, 252, 66, 125, 169, 89, 92, 120, 254, 112, 175, 3, 250, 172, 177, 131, 212, 162, 197, 88, 69, 222, 214, 204, 9, 72, 195, 142, 73, 103, 193, 255, 7, 221, 129, 155, 156, 68, 230, 123, 189, 67, 50, 100, 139, 228, 34, 55, 118, 244, 186, 234, 196, 225, 177, 18, 201, 132, 184, 181, 111, 178, 179, 232, 184, 255, 220, 238, 84, 90, 184, 188, 50, 113, 71, 116, 220, 30, 136, 225, 125, 153, 138, 176, 87, 26, 187, 125, 9, 160, 205, 14, 202, 88, 211, 165, 39, 40, 211, 61, 250, 16, 74, 241, 31, 96, 234, 201, 133, 241, 178, 209, 167, 196, 205, 210, 8, 233, 75, 69, 210, 117, 114, 234, 230, 241, 94, 118, 90, 79, 222, 27, 49, 17, 62, 128, 179, 30, 12, 53, 218, 222, 202, 129, 236, 252, 201, 21, 36, 191, 98, 27, 80, 166, 106, 44, 255, 116, 143, 84, 31, 7, 246, 57, 39, 211, 245, 62, 51, 144, 79, 110, 117, 23, 251, 57, 197, 215, 149, 77, 178, 203, 86, 136, 148, 248, 248, 215, 6, 148, 177, 188, 174, 159, 44, 182, 9, 122, 204, 83, 244, 127, 198, 169, 196, 109, 255, 87, 203, 138, 248, 165, 55, 85, 158, 219, 6, 206, 224, 130, 15, 232, 72, 198, 50, 205, 39, 239, 177, 98, 178, 35, 125, 227, 219, 160, 252, 74, 156, 114, 163, 78, 51, 213, 252, 207, 8, 116, 170, 173, 23, 195, 94, 96, 143, 144, 93, 46, 91, 251, 4, 6, 61, 150, 6, 56, 251, 251, 170, 70, 134, 216, 184, 240, 10, 37, 154, 90, 68, 20, 80, 248, 154, 37, 33, 141, 177, 124, 16, 248, 115, 177, 100, 250, 181, 65, 57, 96, 97, 109, 227, 144, 52, 219, 164, 88, 101, 121, 71, 159, 222, 129, 200, 173, 181, 140, 29, 131, 111, 67, 166, 18, 104, 116, 171, 242, 93, 103, 252, 153, 91, 12, 153, 73, 244, 212, 60, 241, 229, 31, 52, 40, 249, 9, 236, 81, 136, 160, 98, 204, 220, 145, 196, 136, 254, 206, 229, 243, 19, 21, 96, 228, 64, 239, 84, 41, 35, 177, 228, 153, 94, 241, 0, 83, 199, 155, 249, 249, 84, 175, 163, 145, 7, 134, 143, 126, 120, 196, 105, 94, 11, 253, 96, 8, 240, 79, 127, 253, 14, 203, 131, 11, 97, 214, 130, 169, 166, 102, 173, 224, 22, 208, 215, 251, 89, 117, 199, 101, 87, 127, 193, 9, 156, 133, 169, 20, 233, 236, 206, 205, 253, 225, 19, 176, 196, 215, 15, 228, 233, 126, 124, 218, 92, 208, 250, 30, 14, 135, 189, 209, 90, 103, 133, 211, 60, 74, 235, 50, 64, 0, 91, 96, 233, 20, 155, 157, 32, 255, 101, 170, 168, 53, 107, 185, 148, 162, 128, 177, 163, 164, 82, 236, 98, 29, 136, 241, 162, 57, 183, 10, 75, 125, 68, 31, 50, 206, 26, 179, 239, 160, 118, 12, 82, 15, 38, 12, 1, 238, 116, 91, 36, 7, 73, 134, 144, 124, 229, 19, 158, 203, 21, 140, 7, 137, 159, 248, 91, 253, 49, 28, 70, 203, 122, 186, 243, 44, 190, 213, 18, 59, 170, 198, 91, 66, 127, 123, 71, 19, 205, 64, 89, 44, 249, 176, 169, 153, 83, 16, 49, 49, 155, 23, 120, 254, 81, 89, 123, 0, 130, 113, 200, 8, 38, 164, 10, 142, 120, 53, 251, 129, 139, 92, 22, 110, 33, 173, 57, 77, 42, 36, 89, 88, 34, 184, 60, 150, 230, 214, 123, 240, 59, 63, 4, 166, 146, 235, 0, 58, 1, 34, 138, 216, 238, 118, 248, 237, 46, 194, 242, 46, 10, 99, 228, 38, 214, 165, 2, 205, 182, 3, 48, 152, 140, 50, 97, 40, 196, 115, 246, 180, 168, 53, 236, 163, 67, 88, 215, 175, 253, 24, 84, 125, 78, 119, 161, 128, 0, 84, 16, 234, 176, 168, 126, 218, 250, 48, 65, 94, 134, 143, 1, 163, 200, 12, 237, 19, 1, 71, 149, 91, 67, 250, 113, 210, 199, 20, 26, 0, 119, 250, 52, 78, 170, 163, 149, 2, 135, 23, 173, 189, 177, 65, 151, 110, 254, 170, 79, 52, 244, 41, 191, 195, 184, 179, 199, 23, 9, 9, 252, 131, 88, 79, 221, 24, 238, 235, 4, 201, 210, 215, 238, 172, 44, 127, 183, 1, 125, 177, 26, 138, 29, 42, 105, 104, 121, 106, 38, 245, 250, 204, 182, 228, 99, 46, 60, 205, 114, 79, 124, 140, 210, 76, 171, 25, 213, 137, 111, 200, 81, 134, 241, 162, 83, 116, 246, 204, 37, 96, 159, 212, 28, 240, 117, 20, 38, 152, 127, 195, 200, 93, 190, 242, 233, 185, 226, 81, 12, 194, 99, 76, 229, 236, 165, 54, 255, 249, 76, 145, 33, 193, 188, 72, 78, 45, 254, 207, 28, 48, 108, 237, 166, 5, 181, 205, 99, 202, 67, 14, 25, 147, 36, 221, 179, 28, 72, 122, 117, 173, 42, 58, 96, 96, 155, 79, 127, 148, 251, 224, 75, 60, 94, 129, 56, 13, 166, 192, 172, 195, 172, 225, 193, 78, 171, 49, 131, 243, 227, 200, 132, 225, 193, 126, 255, 65, 140, 171, 91, 137, 92, 33, 177, 227, 222, 29, 204, 88, 228, 86, 108, 199, 66, 69, 69, 141, 3, 211, 200, 106, 48, 61, 174, 28, 200, 139, 182, 240, 78, 101, 145, 199, 58, 251, 107, 86, 65, 195, 45, 145, 81, 182, 235, 155, 143, 250, 85, 117, 11, 42, 80, 241, 17, 47, 237, 1, 105, 216, 135, 192, 131, 121, 110, 14, 38, 152, 87, 222, 136, 56, 92, 152, 65, 239, 105, 110, 199, 204, 136, 85, 122, 208, 215, 235, 111, 46, 160, 196, 180, 166, 107, 156, 121, 56, 178, 235, 217, 229, 151, 62, 201, 44, 199, 26, 252, 200, 193, 150, 19, 248, 215, 242, 100, 68, 89, 181, 192, 8, 197, 244, 238, 130, 247, 69, 18, 33, 112, 113, 121, 47, 222, 99, 151, 164, 243, 76, 253, 220, 90, 185, 240, 161, 120, 166, 217, 225, 99, 175, 107, 12, 217, 199, 210, 38, 70, 175, 171, 105, 99, 161, 29, 162, 38, 117, 233, 181, 102, 108, 219, 132, 248, 26, 77, 83, 165, 42, 129, 91, 165, 85, 16, 102, 16, 68, 119, 96, 125, 140, 89, 137, 124, 51, 3, 15, 31, 99, 230, 240, 130, 212, 148, 183, 132, 154, 65, 96, 6, 62, 84, 62, 48, 209, 226, 193, 204, 118, 13, 238, 113, 58, 52, 201, 68, 192, 176, 118, 179, 167, 247, 41, 57, 202, 97, 96, 51, 17, 230, 86, 32, 86, 190, 193, 202, 145, 71, 134, 114, 161, 223, 42, 157, 167, 151, 254, 65, 134, 186, 234, 232, 179, 123, 238, 176, 225, 61, 1, 208, 230, 201, 1, 212, 193, 151, 140, 15, 202, 62, 15, 77, 158, 196, 69, 79, 235, 4, 10, 71, 14, 249, 19, 150, 134, 110, 29, 238, 251, 64, 83, 58, 19, 27, 227, 188, 151, 166, 123, 37, 95, 63, 61, 79, 53, 129, 28, 125, 109, 2, 67, 104, 177, 131, 123, 5, 57, 116, 104, 56, 8, 192, 223, 219, 7, 209, 94, 250, 189, 137, 22, 96, 245, 63, 217, 84, 185, 207, 209, 200, 42, 96, 182, 83, 224, 107, 76, 244, 45, 157, 70, 231, 134, 185, 113, 146, 26, 6, 76, 213, 15, 87, 142, 16, 174, 93, 176, 196, 182, 21, 227, 88, 174, 100, 122, 168, 201, 243, 156, 76, 203, 237, 97, 255, 2, 135, 60, 197, 181, 10, 2, 159, 193, 24, 197, 129, 191, 222, 19, 26, 4, 7, 219, 5, 54, 207, 41, 243, 196, 31, 126, 216, 219, 118, 97, 97, 198, 104, 180, 53, 17, 198, 200, 30, 252, 145, 62, 187, 243, 229, 94, 71, 128, 182, 14, 233, 72, 186, 172, 72, 197, 111, 189, 247, 13, 140, 78, 234, 167, 156, 116, 191, 246, 219, 214, 180, 70, 148, 156, 197, 120, 144, 137, 111, 146, 50, 198, 19, 39, 139, 131, 54, 138, 121, 204, 163, 220, 116, 35, 161, 74, 164, 245, 132, 63, 221, 1, 147, 153, 47, 119, 22, 212, 67, 108, 66, 237, 42, 243, 155, 158, 254, 248, 177, 173, 2, 125, 24, 188, 254, 14, 10, 32, 128, 80, 161, 168, 59, 55, 46, 56, 221, 40, 137, 46, 184, 213, 208, 101, 129, 74, 29, 252, 121, 87, 237, 26, 247, 123, 117, 100, 114, 41, 34, 249, 186, 110, 164, 76, 167, 245, 56, 53, 214, 104, 153, 112, 56, 161, 254, 253, 119, 156, 102, 117, 22, 203, 218, 89, 39, 226, 34, 228, 26, 33, 2, 253, 172, 93, 67, 137, 17, 100, 136, 149, 25, 146, 254, 67, 23, 41, 1, 191, 254, 128, 87, 17, 111, 77, 216, 166, 243, 23, 213, 72, 159, 119, 38, 187, 25, 222, 239, 212, 208, 243, 140, 210, 57, 187, 225, 113, 151, 240, 78, 200, 98, 145, 122, 245, 47, 130, 41, 136, 1, 44, 54, 207, 67, 75, 250, 162, 159, 90, 215, 81, 201, 11, 179, 109, 49, 206, 222, 171, 0, 178, 38, 117, 242, 214, 24, 37, 176, 63, 27, 15, 137, 169, 15, 8, 5, 30, 42, 225, 37, 240, 98, 41, 177, 214, 133, 22, 115, 62, 0, 46, 64, 207, 9, 150, 37, 217, 120, 189, 111, 36, 235, 250, 169, 149, 202, 152, 90, 84, 74, 25, 161, 130, 151, 182, 76, 103, 9, 63, 105, 230, 252, 198, 202, 91, 180, 34, 53, 198, 200, 79, 93, 16, 236, 16, 239, 149, 152, 197, 10, 164, 16, 25, 67, 106, 43, 163, 7, 102, 61, 235, 226, 33, 8, 128, 80, 255, 233, 71, 184, 220, 31, 28, 240, 117, 12, 18, 62, 77, 175, 243, 94, 79, 107, 228, 79, 179, 225, 167, 200, 60, 22, 201, 102, 17, 247, 247, 87, 230, 91, 255, 98, 129, 190, 132, 143, 68, 74, 132, 212, 218, 231, 113, 242, 179, 104, 51, 57, 11, 50, 149, 84, 68, 206, 64, 46, 135, 197, 101, 31, 89, 108, 6, 1, 61, 198, 162, 238, 10, 196, 45, 24, 88, 10, 24, 201, 61, 95, 167, 219, 188, 123, 33, 12, 176, 190, 107, 133, 97, 128, 171, 30, 7, 254, 57, 8, 93, 160, 128, 205, 232, 103, 197, 74, 122, 171, 0, 122, 215, 96, 83, 110, 33, 116, 248, 75, 1, 26, 155, 87, 14, 245, 27, 178, 140, 83, 194, 253, 164, 20, 57, 201, 93, 194, 55, 154, 85, 239, 61, 17, 74, 63, 223, 246, 110, 187, 149, 117, 164, 209, 166, 31, 252, 167, 66, 17, 212, 10, 91, 106, 98, 71, 151, 158, 6, 113, 214, 213, 3, 12, 170, 30, 111, 11, 228, 119, 208, 47, 216, 239, 149, 115, 113, 39, 149, 37, 118, 228, 136, 242, 79, 122, 50, 107, 188, 36, 224, 225, 184, 216, 150, 130, 104, 106, 222, 123, 72, 116, 40, 93, 137, 35, 26, 211, 1, 251, 203, 152, 75, 209, 132, 44, 27, 247, 34, 204, 189, 41, 123, 241, 13, 232, 90, 43, 86, 154, 4, 22, 173, 10, 114, 31, 234, 79, 217, 73, 158, 130, 48, 24, 95, 144, 26, 121, 64, 83, 55, 2, 132, 18, 177, 141, 138, 28, 92, 155, 244, 143, 96, 32, 52, 191, 69, 101, 236, 10, 89, 60, 161, 24, 213, 240, 136, 188, 224, 194, 195, 199, 123, 8, 34, 247, 49, 30, 131, 222, 127, 0, 221, 155, 251, 122, 144, 11, 109, 50, 150, 184, 157, 241, 92, 217, 63, 3, 93, 95, 114, 82, 214, 14, 115, 210, 141, 0, 2, 138, 65, 208, 109, 147, 15, 202, 141, 70, 217, 193, 137, 21, 170, 41, 112, 134, 112, 201, 98, 70, 100, 104, 242, 40, 3, 254, 52, 244, 194, 205, 168, 107, 10, 69, 242, 80, 247, 52, 141, 112, 62, 9, 127, 175, 98, 3, 150, 163, 13, 242, 180, 43, 159, 58, 2, 117, 127, 67, 132, 204, 62, 162, 82, 215, 86, 47, 57, 5, 71, 187, 164, 7, 148, 107, 203, 240, 129, 106, 253, 19, 47, 14, 80, 25, 40, 80, 83, 10, 162, 84, 249, 58, 171, 90, 170, 170, 70, 195, 162, 14, 144, 247, 203, 233, 206, 45, 70, 11, 233, 166, 201, 55, 115, 224, 125, 164, 151, 251, 166, 8, 217, 245, 3, 98, 20, 19, 221, 37, 13, 162, 168, 79, 210, 21, 189, 23, 156, 35, 201, 247, 145, 49, 169, 31, 143, 34, 11, 12, 108, 140, 216, 2, 140, 75, 36, 98, 137, 231, 75, 6, 138, 150, 164, 171, 211, 180, 84, 145, 36, 192, 20, 154, 85, 242, 226, 179, 42, 162, 26, 100, 18, 217, 164, 196, 176, 63, 54, 88, 229, 156, 105, 209, 221, 159, 134, 4, 133, 176, 247, 34, 175, 2, 234, 113, 174, 73, 68, 218, 121, 22, 133, 126, 151, 39, 46, 60, 236, 178, 219, 77, 55, 169, 191, 194, 162, 250, 242, 246, 205, 225, 151, 94, 75, 204, 195, 171, 241, 56, 124, 164, 212, 12, 9, 213, 27, 255, 226, 37, 18, 188, 127, 206, 218, 247, 86, 165, 34, 25, 135, 255, 188, 111, 13, 180, 251, 180, 117, 110, 200, 63, 236, 199, 118, 22, 88, 93, 143, 213, 134, 143, 144, 198, 130, 60, 12, 101, 153, 205, 63, 251, 125, 71, 128, 255, 13, 223, 36, 88, 31, 130, 182, 158, 209, 225, 112, 231, 101, 173, 198, 93, 191, 172, 252, 26, 71, 74, 153, 205, 103, 90, 121, 119, 19, 67, 246, 223, 182, 18, 108, 70, 28, 39, 125, 90, 6, 61, 235, 49, 255, 58, 230, 215, 14, 49, 185, 188, 30, 20, 101, 203, 101, 22, 129, 89, 129, 12, 28, 194, 124, 64, 54, 251, 145, 50, 228, 10, 67, 202, 184, 145, 83, 61, 1, 41, 29, 37, 142, 242, 40, 8, 94, 207, 92, 183, 0, 112, 224, 22, 233, 185, 129, 215, 3, 108, 74, 111, 230, 103, 221, 121, 88, 243, 124, 133, 134, 202, 197, 245, 196, 99, 48, 123, 30, 84, 30, 3, 132, 87, 162, 74, 109, 248, 47, 245, 74, 232, 198, 10, 251, 90, 100, 14, 122, 51, 252, 165, 153, 29, 244, 23, 237, 101, 53, 148, 151, 113, 192, 178, 24, 252, 221, 250, 219, 153, 53, 14, 203, 36, 45, 226, 182, 80, 65, 38, 64, 6, 221, 116, 100, 106, 94, 138, 59, 90, 89, 10, 101, 123, 175, 19, 122, 112, 91, 24, 39, 105, 181, 186, 166, 8, 201, 229, 50, 108, 243, 245, 239, 1, 40, 54, 188, 68, 107, 196, 176, 233, 106, 161, 107, 10, 115, 76, 32, 216, 31, 108, 154, 72, 0, 220, 247, 251, 196, 165, 184, 102, 86, 237, 220, 218, 235, 216, 14, 255, 138, 86, 52, 204, 61, 48, 80, 158, 99, 112, 219, 124, 183, 61, 240, 170, 110, 251, 8, 73, 97, 137, 63, 252, 36, 173, 216, 101, 22, 88, 247, 20, 131, 28, 64, 42, 37, 122, 247, 0, 24, 134, 43, 224, 62, 208, 11, 130, 229, 100, 221, 233, 145, 113, 15, 163, 194, 60, 232, 151, 182, 125, 49, 68, 89, 196, 156, 154, 84, 92, 195, 247, 10, 7, 4, 108, 82, 253, 227, 41, 229, 220, 3, 169, 43, 254, 125, 16, 16, 35, 169, 81, 60, 2, 73, 81, 135, 211, 168, 151, 136, 11, 250, 145, 106, 130, 223, 204, 98, 199, 14, 172, 19, 98, 73, 125, 219, 140, 22, 210, 177, 2, 61, 10, 113, 128, 153, 40, 108, 74, 65, 247, 40, 188, 53, 19, 63, 185, 196, 200, 219, 162, 155, 186, 156, 3, 202, 140, 62, 145, 165, 128, 53, 39, 0, 138, 224, 109, 124, 164, 18, 45, 193, 111, 204, 158, 248, 137, 149, 68, 131, 185, 48, 21, 20, 74, 132, 155, 160, 67, 95, 235, 86, 100, 236, 89, 23, 73, 153, 184, 161, 163, 136, 96, 95, 61, 82, 17, 222, 155, 102, 161, 62, 255, 35, 19, 240, 138, 65, 56, 53, 238, 163, 123, 153, 85, 241, 183, 223, 148, 15, 251, 247, 126, 13, 103, 154, 28, 202, 66, 28, 35, 30, 177, 16, 118, 187, 137, 197, 255, 51, 191, 43, 150, 254, 12, 7, 244, 100, 16, 1, 69, 167, 238, 67, 56, 144, 114, 51, 232, 62, 112, 63, 120, 144, 103, 34, 48, 149, 55, 194, 87, 93, 19, 187, 242, 88, 118, 166, 1, 26, 190, 175, 177, 250, 151, 246, 135, 82, 224, 250, 250, 82, 204, 56, 29, 43, 206, 124, 139, 52, 136, 185, 228, 38, 7, 114, 215, 88, 84, 2, 98, 26, 63, 10, 58, 41, 60, 216, 209, 13, 207, 25, 18, 4, 47, 218, 255, 3, 163, 135, 8, 205, 196, 14, 99, 27, 201, 216, 230, 216, 87, 14, 199, 195, 19, 173, 157, 123, 170, 79, 222, 12, 204, 245, 230, 78, 163, 11, 156, 230, 98, 27, 159, 159, 37, 254, 30, 100, 12, 236, 152, 119, 200, 180, 186, 93, 249, 196, 192, 202, 135, 190, 164, 76, 159, 163, 12, 192, 0, 156, 132, 90, 158, 120, 142, 137, 168, 50, 75, 146, 239, 82, 28, 132, 129, 98, 253, 247, 190, 8, 189, 245, 231, 146, 183, 1, 42, 211, 194, 162, 103, 66, 56, 59, 179, 86, 46, 91, 50, 237, 199, 152, 176, 180, 123, 249, 194, 56, 16, 196, 173, 157, 29, 132, 149, 157, 12, 83, 175, 254, 161, 166, 150, 208, 134, 237, 196, 191, 105, 109, 187, 77, 82, 93, 188, 194, 38, 68, 124, 69, 223, 140, 59, 127, 113, 112, 186, 10, 7, 241, 250, 162, 50, 118, 147, 205, 53, 95, 106, 13, 57, 144, 179, 213, 229, 255, 73, 85, 50, 87, 95, 229, 11, 161, 159, 127, 119, 150, 201, 135, 6, 37, 192, 141, 11, 53, 239, 217, 35, 29, 220, 166, 67, 31, 111, 18, 112, 71, 34, 252, 141, 92, 206, 77, 153, 32, 44, 72, 45, 215, 38, 108, 13, 107, 242, 51, 236, 224, 255, 94, 211, 231, 49, 200, 117, 71, 242, 7, 113, 157, 81, 171, 214, 187, 72, 160, 152, 156, 171, 100, 78, 125, 86, 76, 157, 150, 219, 30, 181, 109, 15, 197, 228, 164, 103, 160, 219, 44, 146, 102, 107, 191, 23, 108, 255, 187, 22, 72, 191, 69, 252, 24, 156, 164, 40, 12, 240, 70, 89, 245, 85, 232, 184, 107, 93, 201, 217, 232, 77, 97, 249, 12, 108, 244, 156, 15, 181, 172, 131, 166, 173, 208, 192, 248, 47, 195, 195, 56, 6, 137, 180, 49, 245, 4, 98, 160, 39, 12, 142, 89, 131, 41, 34, 57, 7, 237, 3, 29, 126, 21, 156, 10, 22, 152, 6, 45, 12, 162, 213, 111, 31, 169, 48, 19, 31, 35, 60, 248, 157, 28, 7, 73, 40, 179, 91, 130, 39, 252, 162, 208, 29, 14, 19, 180, 207, 45, 255, 79, 184, 126, 163, 172, 112, 146, 35, 154, 110, 83, 189, 246, 155, 255, 235, 208, 235, 157, 6, 16, 205, 50, 202, 165, 221, 140, 43, 112, 129, 10, 224, 235, 117, 164, 171, 123, 136, 112, 187, 139, 144, 53, 128, 161, 74, 36, 8, 125, 103, 9, 236, 207, 2, 184, 131, 45, 93, 86, 236, 134, 175, 244, 9, 57, 50, 0, 196, 15, 202, 113, 64, 199, 154, 115, 120, 232, 252, 108, 197, 119, 245, 248, 152, 65, 174, 227, 182, 139, 131, 59, 183, 255, 189, 197, 152, 89, 8, 9, 9, 241, 22, 222, 137, 102, 205, 6, 116, 51, 153, 183, 56, 7, 188, 124, 226, 196, 105, 107, 75, 206, 77, 9, 231, 230, 182, 104, 189, 108, 210, 128, 237, 47, 176, 231, 154, 158, 107, 168, 186, 119, 50, 109, 190, 236, 60, 74, 94, 119, 61, 150, 231, 242, 143, 94, 175, 229, 154, 122, 159, 170, 20, 250, 96, 235, 43, 243, 161, 185, 223, 108, 194, 33, 186, 102, 90, 222, 145, 203, 173, 113, 179, 243, 154, 160, 81, 222, 49, 96, 62, 121, 38, 1, 14, 59, 24, 12, 215, 55, 255, 96, 55, 191, 86, 43, 169, 105, 236, 151, 208, 110, 145, 244, 110, 25, 240, 10, 45, 237, 187, 22, 131, 220, 47, 83, 169, 174, 178, 5, 2, 58, 201, 21, 207, 77, 207, 204, 215, 6, 112, 178, 185, 209, 110, 244, 70, 28, 134, 216, 107, 80, 4, 62, 170, 83, 82, 38, 44, 166, 155, 182, 227, 137, 60, 64, 235, 223, 159, 85, 29, 240, 169, 49, 140, 35, 88, 101, 25, 199, 69, 241, 106, 59, 193, 175, 245, 186, 201, 15, 160, 150, 185, 36, 150, 180, 185, 1, 142, 239, 125, 161, 31, 58, 110, 155, 117, 145, 175, 193, 0, 72, 6, 148, 105, 26, 247, 37, 152, 66, 172, 189, 208, 21, 97, 145, 23, 192, 242, 61, 113, 222, 11, 1, 156, 39, 177, 67, 143, 119, 26, 99, 82, 43, 245, 116, 131, 226, 6, 118, 155, 171, 132, 12, 8, 86, 87, 226, 55, 165, 108, 39, 52, 133, 206, 236, 22, 240, 145, 250, 207, 200, 5, 156, 190, 225, 143, 82, 207, 34, 147, 254, 79, 0, 219, 172, 28, 65, 247, 62, 66, 32, 149, 175, 105, 27, 25, 89, 236, 139, 82, 131, 39, 116, 9, 13, 41, 20, 45, 178, 80, 29, 65, 169, 171, 92, 127, 7, 49, 131, 147, 4, 219, 204, 176, 30, 236, 91, 226, 220, 73, 145, 247, 100, 72, 153, 9, 74, 78, 152, 136, 86, 177, 208, 135, 125, 246, 187, 180, 44, 161, 32, 110, 50, 123, 40, 44, 135, 107, 80, 241, 18, 64, 16, 41, 137, 226, 235, 168, 77, 193, 16, 141, 149, 44, 96, 156, 181, 29, 125, 254, 150, 173, 110, 181, 153, 230, 151, 232, 171, 94, 210, 223, 0, 210, 168, 168, 95, 183, 207, 68, 91, 23, 42, 42, 65, 244, 129, 147, 55, 204, 131, 90, 198, 140, 183, 27, 170, 224, 0, 84, 76, 37, 1, 213, 183, 252, 232, 35, 197, 69, 238, 165, 155, 87, 32, 142, 169, 93, 85, 0, 200, 145, 17, 252, 56, 5, 172, 180, 79, 147, 142, 188, 255, 152, 173, 251, 54, 248, 45, 190, 53, 79, 245, 142, 3, 158, 105, 58, 145, 98, 190, 255, 169, 145, 73, 139, 29, 30, 99, 135, 156, 0, 202, 72, 92, 168, 253, 202, 67, 28, 160, 97, 245, 12, 79, 87, 64, 52, 10, 75, 153, 6, 105, 132, 102, 30, 232, 103, 28, 39, 39, 132, 9, 226, 130, 43, 135, 225, 110, 129, 132, 39, 225, 176, 168, 210, 59, 91, 131, 28, 169, 52, 182, 75, 97, 191, 248, 26, 147, 222, 29, 159, 59, 119, 74, 141, 23, 146, 236, 193, 117, 209, 81, 249, 36, 106, 255, 150, 177, 152, 186, 153, 39, 130, 168, 98, 90, 76, 161, 80, 218, 144, 151, 226, 157, 225, 60, 34, 58, 188, 148, 170, 12, 194, 198, 118, 196, 224, 143, 128, 53, 221, 137, 5, 29, 201, 36, 168, 126, 140, 63, 82, 159, 225, 71, 81, 62, 206, 43, 219, 141, 107, 54, 191, 107, 4, 77, 57, 57, 216, 164, 132, 21, 151, 1, 202, 161, 58, 11, 43, 73, 173, 222, 207, 183, 161, 106, 198, 36, 31, 176, 216, 174, 200, 181, 103, 232, 1, 174, 244, 133, 158, 172, 147, 125, 252, 233, 78, 43, 126, 217, 161, 97, 106, 52, 169, 60, 135, 54, 140, 67, 158, 50, 172, 160, 72, 196, 88, 185, 54, 191, 11, 25, 38, 179, 14, 80, 206, 110, 188, 210, 48, 143, 246, 175, 190, 219, 183, 190, 246, 212, 211, 101, 241, 73, 17, 241, 151, 92, 211, 46, 89, 106, 240, 224, 143, 34, 80, 232, 239, 255, 142, 202, 104, 58, 128, 80, 19, 225, 238, 144, 32, 217, 61, 28, 64, 131, 59, 204, 12, 68, 44, 30, 72, 143, 26, 244, 208, 204, 137, 91, 143, 235, 38, 60, 95, 50, 122, 216, 35, 96, 29, 238, 56, 183, 238, 185, 135, 125, 143, 167, 39, 233, 216, 244, 129, 115, 111, 241, 168, 85, 92, 11, 115, 31, 92, 220, 199, 36, 61, 84, 8, 85, 122, 138, 84, 203, 31, 85, 93, 78, 58, 253, 22, 92, 28, 146, 164, 185, 90, 214, 247, 95, 47, 76, 53, 118, 5, 246, 232, 102, 1, 144, 237, 135, 52, 126, 235, 65, 217, 99, 164, 157, 45, 3, 174, 39, 243, 131, 98, 183, 191, 142, 185, 156, 45, 209, 37, 179, 165, 137, 205, 109, 205, 10, 75, 43, 107, 151, 155, 126, 213, 116, 93, 235, 2, 182, 48, 67, 6, 126, 0, 182, 17, 80, 90, 205, 70, 239, 231, 98, 240, 145, 252, 9, 115, 41, 169, 155, 101, 160, 11, 155, 45, 243, 30, 191, 172, 119, 5, 113, 209, 109, 219, 132, 27, 188, 79, 151, 43, 74, 141, 9, 192, 150, 8, 170, 153, 239, 140, 131, 187, 102, 84, 186, 152, 162, 21, 140, 48, 31, 106, 16, 0, 148, 208, 101, 180, 31, 210, 126, 138, 236, 22, 41, 169, 56, 246, 125, 115, 50, 98, 0, 59, 129, 5, 52, 133, 202, 197, 228, 91, 133, 19, 46, 71, 108, 131, 128, 121, 248, 202, 133, 252, 148, 173, 68, 184, 199, 35, 15, 22, 142, 192, 162, 206, 72, 197, 89, 42, 41, 142, 198, 192, 100, 191, 177, 15, 37, 3, 109, 97, 199, 148, 46, 113, 88, 152, 204, 121, 68, 50, 176, 192, 8, 248, 238, 253, 139, 212, 190, 186, 156, 234, 121, 89, 201, 210, 77, 92, 27, 117, 125, 90, 178, 1, 214, 135, 180, 55, 226, 84, 197, 136, 66, 55, 31, 29, 182, 39, 64, 3, 102, 194, 164, 149, 244, 217, 194, 117, 95, 149, 126, 233, 173, 25, 98, 168, 120, 38, 35, 77, 227, 229, 184, 147, 190, 55, 240, 170, 193, 135, 124, 126, 8, 186, 66, 164, 55, 9, 151, 27, 115, 10, 153, 236, 48, 89, 55, 195, 214, 69, 240, 91, 216, 221, 33, 158, 134, 239, 246, 160, 188, 253, 34, 141, 128, 165, 96, 254, 100, 11, 21, 44, 164, 252, 112, 176, 153, 109, 91, 135, 61, 173, 42, 141, 119, 68, 130, 174, 117, 155, 105, 173, 69, 214, 212, 100, 151, 227, 50, 122, 228, 118, 191, 31, 37, 19, 203, 178, 81, 85, 233, 246, 77, 147, 157, 239, 104, 235, 187, 229, 53, 149, 69, 233, 81, 180, 255, 3, 245, 130, 124, 123, 162, 184, 246, 16, 148, 97, 133, 77, 49, 88, 69, 58, 219, 213, 193, 199, 181, 96, 93, 3, 200, 92, 68, 124, 157, 214, 238, 227, 145, 113, 203, 197, 10, 35, 9, 29, 196, 233, 43, 59, 248, 38, 89, 227, 141, 73, 40, 28, 159, 3, 95, 115, 170, 226, 203, 68, 81, 97, 173, 59, 202, 91, 115, 208, 131, 8, 166, 142, 201, 61, 120, 231, 134, 252, 55, 227, 126, 218, 183, 52, 32, 76, 174, 17, 64, 228, 241, 246, 173, 60, 4, 56, 102, 115, 126, 254, 104, 70, 163, 122, 24, 252, 174, 97, 238, 92, 148, 202, 176, 224, 98, 144, 45, 14, 5, 80, 24, 35, 55, 61, 105, 44, 238, 237, 81, 165, 180, 34, 200, 83, 48, 138, 62, 135, 200, 238, 33, 206, 66, 190, 91, 54, 103, 179, 30, 120, 226, 87, 192, 59, 234, 41, 135, 82, 62, 24, 113, 117, 180, 139, 121, 0, 58, 92, 148, 232, 228, 11, 254, 141, 159, 228, 27, 188, 90, 177, 204, 119, 136, 235, 65, 197, 149, 34, 2, 10, 203, 143, 130, 218, 113, 84, 158, 159, 76, 209, 98, 37, 242, 232, 64, 148, 116, 149, 204, 102, 102, 155, 126, 166, 131, 125, 69, 234, 254, 26, 80, 68, 54, 184, 231, 132, 216, 87, 193, 191, 86, 81, 215, 165, 50, 43, 248, 94, 203, 92, 67, 2, 157, 126, 251, 67, 85, 161, 78, 175, 217, 177, 17, 128, 133, 111, 36, 117, 5, 145, 68, 13, 52, 43, 32], - [207, 19, 19, 135, 191, 68, 218, 165, 192, 233, 17, 169, 66, 142, 60, 215, 238, 233, 190, 154, 42, 148, 216, 25, 254, 15, 128, 18, 121, 166, 75, 250, 92, 210, 64, 130, 147, 6, 119, 239, 123, 215, 106, 29, 244, 116, 146, 55, 188, 242, 110, 18, 196, 107, 16, 135, 4, 140, 90, 168, 148, 92, 209, 14, 156, 134, 206, 60, 137, 3, 67, 239, 205, 252, 232, 6, 219, 85, 51, 118, 2, 157, 35, 72, 199, 57, 204, 19, 32, 63, 210, 242, 164, 192, 242, 135, 5, 176, 131, 61, 213, 46, 164, 91, 233, 39, 121, 21, 9, 0, 31, 75, 234, 69, 79, 225, 166, 204, 15, 187, 95, 162, 11, 31, 39, 136, 189, 14, 132, 17, 161, 159, 51, 160, 102, 124, 190, 102, 234, 6, 166, 25, 13, 102, 39, 2, 200, 65, 188, 13, 43, 255, 198, 191, 220, 206, 245, 74, 107, 99, 38, 209, 70, 104, 48, 125, 173, 226, 194, 148, 178, 106, 128, 113, 238, 241, 136, 31, 163, 60, 135, 186, 121, 87, 234, 157, 207, 220, 163, 167, 11, 205, 27, 131, 125, 106, 199, 58, 46, 148, 110, 251, 20, 92, 77, 245, 101, 52, 145, 219, 229, 150, 230, 30, 168, 102, 209, 235, 112, 156, 16, 130, 49, 213, 5, 22, 86, 244, 233, 246, 200, 11, 71, 57, 230, 185, 255, 107, 250, 111, 157, 13, 192, 57, 172, 157, 166, 95, 53, 237, 168, 118, 36, 145, 180, 145, 46, 13, 61, 114, 139, 181, 231, 177, 11, 69, 205, 48, 8, 219, 56, 15, 164, 111, 126, 159, 72, 3, 77, 128, 252, 155, 15, 44, 51, 193, 208, 46, 165, 108, 134, 198, 173, 236, 198, 232, 239, 63, 186, 106, 135, 227, 18, 63, 194, 244, 140, 28, 211, 179, 133, 26, 8, 140, 21, 248, 132, 230, 209, 196, 9, 71, 22, 245, 165, 71, 211, 159, 139, 114, 202, 99, 77, 226, 248, 56, 155, 60, 241, 229, 115, 46, 39, 145, 205, 112, 29, 174, 211, 2, 24, 59, 125, 115, 172, 198, 51, 44, 222, 29, 121, 216, 130, 28, 157, 50, 97, 96, 103, 139, 93, 56, 13, 93, 45, 20, 250, 70, 246, 124, 102, 146, 168, 151, 178, 236, 139, 160, 40, 101, 107, 134, 206, 17, 105, 249, 36, 47, 226, 76, 189, 198, 52, 224, 42, 77, 67, 236, 95, 179, 202, 104, 247, 141, 39, 129, 166, 93, 199, 114, 212, 182, 159, 100, 42, 43, 90, 235, 111, 208, 44, 20, 242, 34, 93, 138, 208, 98, 255, 140, 63, 215, 199, 170, 248, 100, 63, 75, 0, 241, 24, 143, 49, 89, 102, 199, 113, 217, 231, 207, 153, 125, 68, 82, 81, 107, 245, 92, 26, 30, 125, 197, 91, 174, 243, 50, 114, 219, 17, 213, 235, 157, 103, 99, 209, 191, 210, 61, 218, 161, 17, 200, 100, 146, 117, 111, 128, 185, 231, 97, 154, 27, 67, 255, 11, 51, 34, 231, 81, 156, 43, 172, 177, 223, 109, 19, 211, 150, 205, 111, 199, 104, 98, 246, 203, 167, 122, 12, 111, 80, 234, 9, 118, 116, 210, 71, 79, 136, 155, 8, 165, 34, 226, 59, 185, 157, 55, 21, 221, 10, 1, 64, 79, 139, 245, 242, 122, 164, 102, 79, 34, 159, 238, 191, 68, 214, 252, 20, 73, 142, 228, 211, 244, 93, 145, 209, 38, 192, 117, 157, 216, 188, 16, 178, 120, 185, 83, 157, 196, 74, 156, 237, 250, 78, 142, 72, 35, 59, 129, 56, 62, 80, 245, 20, 103, 206, 132, 98, 29, 219, 84, 19, 130, 170, 132, 37, 193, 8, 125, 103, 26, 228, 116, 77, 108, 67, 11, 152, 149, 67, 55, 130, 249, 227, 233, 250, 144, 240, 182, 178, 29, 100, 71, 226, 106, 143, 104, 106, 97, 162, 32, 53, 179, 22, 93, 171, 26, 120, 133, 90, 92, 163, 176, 131, 248, 153, 117, 198, 194, 177, 47, 211, 72, 235, 47, 3, 36, 207, 89, 64, 50, 43, 237, 55, 20, 161, 135, 218, 217, 69, 157, 30, 95, 83, 92, 224, 14, 152, 18, 88, 236, 14, 203, 225, 158, 127, 120, 232, 215, 91, 104, 1, 141, 224, 228, 180, 71, 190, 76, 86, 13, 212, 8, 50, 135, 26, 45, 220, 181, 240, 31, 43, 14, 187, 42, 17, 67, 91, 220, 65, 138, 223, 205, 143, 89, 149, 106, 130, 98, 230, 101, 65, 69, 167, 146, 184, 116, 158, 78, 168, 109, 160, 20, 61, 193, 216, 200, 82, 55, 37, 225, 100, 42, 67, 203, 157, 125, 121, 234, 90, 127, 183, 38, 52, 221, 229, 133, 120, 48, 192, 209, 200, 11, 93, 93, 159, 245, 252, 239, 135, 203, 84, 42, 82, 130, 37, 184, 0, 189, 22, 197, 124, 111, 227, 104, 13, 243, 165, 184, 192, 40, 87, 82, 252, 70, 203, 161, 178, 170, 25, 66, 92, 202, 159, 116, 96, 11, 209, 240, 74, 0, 6, 192, 216, 196, 31, 45, 216, 14, 167, 154, 181, 195, 131, 168, 119, 189, 53, 111, 135, 240, 36, 135, 176, 224, 245, 171, 105, 203, 186, 153, 177, 25, 161, 19, 115, 232, 19, 133, 172, 210, 248, 37, 20, 46, 147, 101, 75, 16, 210, 230, 212, 239, 32, 200, 130, 92, 74, 174, 72, 90, 208, 61, 223, 61, 162, 40, 14, 58, 136, 203, 8, 195, 194, 237, 136, 134, 144, 8, 35, 218, 149, 119, 176, 195, 13, 137, 117, 56, 26, 255, 6, 20, 209, 15, 154, 37, 140, 32, 235, 114, 39, 38, 157, 172, 19, 14, 77, 130, 104, 187, 178, 57, 39, 117, 131, 176, 246, 49, 49, 62, 225, 231, 139, 147, 97, 186, 228, 0, 92, 101, 162, 98, 183, 77, 154, 16, 209, 115, 249, 62, 159, 40, 162, 56, 64, 167, 45, 185, 152, 10, 148, 114, 195, 244, 47, 173, 124, 140, 125, 196, 31, 13, 90, 69, 239, 73, 253, 153, 30, 159, 105, 113, 95, 230, 224, 230, 215, 13, 68, 214, 76, 50, 213, 205, 46, 136, 123, 160, 110, 192, 74, 248, 126, 109, 201, 83, 252, 222, 147, 24, 207, 233, 23, 74, 89, 46, 253, 134, 115, 116, 172, 171, 232, 112, 190, 196, 217, 120, 211, 99, 160, 122, 243, 36, 135, 206, 135, 83, 197, 74, 207, 110, 140, 132, 22, 255, 82, 189, 140, 173, 230, 103, 185, 242, 183, 123, 167, 193, 173, 171, 187, 164, 89, 176, 94, 170, 235, 131, 226, 237, 216, 108, 161, 241, 215, 48, 160, 175, 250, 102, 1, 102, 80, 82, 243, 33, 153, 236, 116, 150, 38, 148, 21, 214, 145, 170, 242, 63, 209, 17, 255, 108, 247, 49, 170, 224, 0, 74, 219, 180, 103, 149, 86, 246, 232, 144, 215, 49, 148, 41, 129, 120, 239, 22, 173, 89, 90, 99, 212, 210, 182, 107, 151, 149, 41, 2, 231, 53, 230, 84, 194, 139, 77, 207, 74, 22, 133, 23, 235, 168, 53, 222, 7, 236, 82, 76, 68, 223, 121, 149, 182, 114, 205, 60, 46, 199, 228, 59, 84, 64, 247, 84, 74, 252, 75, 122, 155, 135, 164, 29, 156, 208, 178, 224, 136, 38, 153, 195, 89, 103, 226, 1, 139, 116, 84, 62, 162, 24, 54, 71, 50, 48, 67, 83, 171, 212, 116, 88, 149, 166, 133, 229, 111, 190, 235, 190, 166, 237, 94, 159, 2, 96, 97, 94, 178, 77, 236, 228, 138, 48, 184, 221, 197, 73, 253, 157, 163, 94, 88, 11, 1, 103, 128, 125, 226, 114, 57, 237, 252, 65, 11, 62, 149, 204, 82, 158, 215, 54, 200, 11, 72, 193, 22, 86, 175, 164, 232, 168, 43, 92, 195, 170, 173, 186, 196, 165, 3, 37, 6, 27, 126, 195, 208, 4, 120, 147, 210, 255, 72, 71, 103, 84, 27, 18, 99, 66, 56, 37, 180, 169, 52, 19, 232, 142, 139, 6, 226, 81, 121, 190, 11, 26, 83, 0, 149, 229, 205, 28, 98, 164, 48, 92, 175, 254, 222, 140, 54, 243, 21, 112, 25, 13, 67, 36, 151, 135, 43, 111, 214, 197, 28, 234, 119, 14, 77, 241, 123, 126, 27, 169, 16, 95, 99, 254, 227, 34, 61, 4, 6, 97, 150, 231, 203, 237, 166, 1, 253, 210, 92, 127, 80, 73, 128, 39, 86, 122, 82, 102, 144, 166, 39, 31, 51, 7, 139, 193, 14, 163, 130, 218, 163, 116, 211, 128, 123, 221, 93, 151, 248, 58, 108, 48, 56, 64, 237, 74, 5, 77, 62, 217, 4, 59, 125, 248, 22, 2, 30, 21, 34, 197, 156, 210, 64, 117, 242, 208, 3, 232, 110, 91, 188, 211, 134, 21, 99, 50, 172, 174, 83, 161, 207, 21, 169, 207, 66, 255, 230, 70, 108, 242, 219, 44, 248, 246, 123, 239, 70, 51, 194, 135, 72, 189, 121, 214, 109, 116, 252, 237, 11, 77, 188, 62, 51, 79, 245, 12, 90, 163, 36, 38, 78, 116, 50, 108, 217, 136, 96, 207, 186, 96, 107, 84, 229, 57, 119, 134, 224, 135, 245, 184, 113, 21, 134, 155, 104, 75, 4, 204, 223, 119, 253, 141, 7, 182, 234, 237, 157, 101, 3, 158, 4, 254, 3, 107, 65, 166, 166, 81, 31, 193, 157, 10, 202, 19, 180, 101, 224, 64, 121, 97, 103, 132, 182, 155, 244, 123, 144, 160, 247, 204, 44, 249, 132, 16, 76, 155, 189, 232, 27, 34, 28, 209, 125, 8, 50, 101, 188, 223, 43, 190, 115, 238, 52, 113, 51, 70, 33, 253, 140, 18, 134, 182, 40, 245, 226, 156, 189, 123, 224, 174, 44, 212, 195, 80, 24, 12, 27, 2, 140, 228, 172, 96, 99, 148, 14, 221, 60, 226, 58, 200, 206, 243, 115, 219, 144, 159, 162, 229, 151, 156, 221, 162, 11, 253, 161, 122, 38, 202, 15, 121, 96, 110, 199, 38, 245, 81, 233, 201, 215, 163, 85, 12, 145, 59, 188, 119, 75, 97, 172, 202, 83, 114, 29, 137, 129, 202, 147, 1, 72, 95, 174, 203, 122, 71, 162, 195, 195, 169, 208, 1, 239, 65, 160, 198, 58, 39, 79, 64, 161, 82, 77, 176, 231, 156, 203, 182, 26, 34, 185, 222, 174, 83, 108, 24, 72, 112, 77, 233, 251, 156, 141, 97, 87, 197, 84, 213, 165, 246, 155, 80, 132, 217, 29, 171, 212, 75, 22, 57, 0, 207, 138, 70, 216, 147, 91, 175, 111, 44, 124, 138, 104, 64, 1, 168, 14, 34, 29, 3, 75, 45, 115, 152, 186, 192, 38, 35, 171, 180, 137, 89, 7, 59, 245, 57, 103, 23, 148, 67, 54, 46, 74, 124, 211, 91, 26, 131, 155, 185, 56, 113, 164, 87, 115, 146, 166, 67, 168, 207, 3, 84, 171, 11, 103, 210, 235, 108, 169, 64, 43, 179, 103, 52, 158, 150, 180, 47, 134, 142, 53, 104, 130, 61, 220, 65, 223, 115, 145, 159, 226, 235, 49, 211, 7, 248, 110, 149, 165, 185, 203, 220, 0, 158, 79, 134, 115, 203, 50, 249, 240, 163, 34, 64, 66, 98, 244, 108, 168, 94, 254, 44, 93, 197, 231, 13, 220, 129, 41, 168, 243, 195, 140, 127, 124, 186, 161, 141, 224, 101, 247, 237, 212, 168, 145, 187, 209, 237, 226, 117, 98, 63, 98, 149, 68, 51, 70, 7, 60, 225, 229, 112, 33, 246, 218, 61, 121, 61, 76, 98, 136, 114, 202, 157, 181, 124, 117, 254, 229, 187, 81, 157, 252, 206, 85, 27, 239, 1, 34, 208, 174, 93, 237, 78, 85, 92, 232, 139, 124, 163, 184, 69, 81, 131, 50, 100, 182, 88, 216, 4, 174, 162, 188, 217, 37, 154, 253, 181, 176, 13, 105, 188, 75, 35, 230, 121, 111, 57, 52, 143, 113, 204, 177, 114, 163, 114, 136, 177, 19, 100, 213, 136, 191, 25, 195, 229, 107, 60, 59, 194, 93, 113, 164, 26, 56, 76, 255, 253, 240, 30, 43, 67, 193, 33, 37, 254, 70, 53, 148, 81, 24, 8, 128, 185, 7, 64, 43, 105, 17, 25, 171, 118, 37, 132, 138, 142, 176, 112, 91, 227, 172, 139, 76, 124, 25, 223, 255, 21, 12, 77, 218, 224, 136, 106, 113, 216, 7, 66, 1, 127, 207, 63, 229, 195, 112, 148, 159, 219, 77, 83, 229, 39, 94, 40, 19, 111, 128, 239, 213, 172, 167, 55, 48, 232, 1, 94, 166, 95, 20, 84, 23, 68, 104, 61, 126, 136, 204, 112, 112, 60, 148, 47, 188, 115, 56, 3, 204, 219, 57, 224, 240, 180, 104, 234, 230, 36, 120, 148, 217, 93, 144, 153, 20, 31, 229, 218, 5, 138, 160, 15, 114, 27, 1, 231, 90, 68, 32, 89, 184, 104, 208, 68, 21, 96, 71, 45, 80, 168, 11, 229, 22, 172, 68, 236, 124, 163, 39, 132, 237, 196, 162, 35, 242, 145, 74, 28, 104, 179, 77, 115, 200, 94, 105, 51, 228, 151, 147, 105, 176, 218, 71, 4, 138, 192, 114, 20, 75, 178, 189, 160, 172, 240, 9, 62, 117, 112, 138, 237, 55, 59, 69, 150, 17, 1, 16, 15, 142, 63, 57, 87, 85, 0, 81, 20, 250, 27, 227, 145, 10, 18, 48, 80, 47, 237, 190, 53, 3, 248, 194, 245, 142, 2, 159, 96, 195, 34, 133, 220, 17, 209, 189, 134, 98, 53, 111, 141, 208, 47, 64, 251, 64, 123, 120, 10, 112, 184, 17, 155, 43, 30, 148, 169, 149, 160, 10, 188, 194, 92, 82, 216, 201, 117, 160, 146, 119, 132, 51, 192, 196, 155, 186, 154, 144, 111, 147, 95, 232, 248, 251, 104, 68, 180, 86, 200, 74, 21, 216, 101, 221, 252, 235, 120, 106, 182, 146, 101, 17, 251, 134, 46, 180, 192, 103, 34, 231, 223, 13, 28, 176, 226, 239, 182, 155, 11, 134, 243, 158, 39, 227, 201, 232, 107, 195, 99, 183, 161, 149, 52, 165, 235, 162, 175, 167, 205, 74, 229, 251, 204, 250, 240, 106, 165, 245, 103, 80, 221, 212, 121, 124, 98, 80, 59, 248, 96, 103, 64, 128, 85, 72, 1, 202, 128, 61, 101, 243, 236, 122, 19, 220, 232, 191, 106, 49, 168, 203, 119, 232, 112, 109, 150, 19, 240, 215, 214, 231, 250, 132, 32, 96, 43, 203, 190, 197, 18, 221, 238, 101, 233, 165, 91, 3, 50, 192, 33, 15, 205, 143, 96, 53, 3, 226, 67, 48, 138, 167, 62, 45, 120, 181, 175, 183, 155, 151, 49, 48, 64, 167, 226, 102, 123, 190, 117, 150, 146, 223, 56, 80, 41, 170, 205, 78, 32, 215, 173, 108, 122, 214, 63, 6, 195, 219, 48, 98, 67, 197, 250, 175, 199, 214, 226, 11, 248, 211, 120, 203, 90, 210, 201, 45, 122, 59, 201, 166, 177, 186, 240, 31, 11, 81, 180, 51, 106, 241, 181, 113, 188, 18, 127, 137, 120, 218, 135, 124, 192, 4, 22, 53, 245, 198, 208, 49, 212, 76, 3, 94, 41, 169, 40, 136, 161, 54, 68, 249, 123, 23, 117, 31, 133, 15, 77, 150, 109, 54, 209, 248, 189, 26, 54, 140, 224, 231, 96, 169, 33, 108, 103, 121, 52, 87, 132, 153, 157, 224, 109, 171, 26, 132, 92, 41, 72, 40, 175, 47, 89, 185, 226, 70, 246, 201, 161, 185, 65, 234, 117, 47, 246, 44, 246, 127, 47, 151, 204, 156, 216, 7, 104, 118, 120, 23, 97, 30, 96, 225, 160, 12, 222, 138, 164, 181, 215, 237, 248, 69, 134, 242, 158, 239, 154, 145, 105, 191, 39, 76, 51, 8, 65, 35, 7, 2, 241, 56, 31, 77, 91, 177, 37, 70, 195, 189, 81, 49, 33, 121, 91, 10, 217, 110, 224, 23, 97, 43, 91, 136, 157, 205, 19, 199, 245, 134, 15, 81, 202, 108, 33, 179, 229, 143, 127, 240, 120, 133, 160, 41, 194, 135, 98, 174, 41, 78, 30, 202, 196, 59, 71, 116, 244, 98, 229, 15, 235, 211, 138, 207, 236, 116, 116, 72, 9, 49, 89, 197, 165, 243, 182, 224, 115, 248, 70, 84, 216, 175, 180, 123, 116, 172, 188, 186, 53, 199, 106, 17, 170, 54, 57, 87, 62, 11, 111, 118, 230, 97, 82, 69, 82, 69, 109, 168, 252, 158, 126, 100, 150, 220, 201, 115, 92, 4, 175, 208, 192, 124, 239, 50, 138, 25, 161, 10, 77, 114, 159, 115, 132, 93, 125, 218, 106, 125, 55, 101, 235, 194, 116, 234, 213, 227, 133, 221, 13, 1, 109, 251, 219, 123, 194, 223, 200, 44, 132, 113, 5, 202, 17, 24, 33, 187, 245, 88, 58, 138, 91, 119, 66, 168, 248, 68, 249, 24, 200, 231, 33, 160, 131, 232, 160, 28, 53, 140, 147, 18, 45, 186, 42, 13, 179, 134, 43, 151, 208, 151, 224, 90, 236, 156, 186, 172, 177, 172, 6, 186, 207, 167, 10, 82, 237, 89, 198, 22, 198, 182, 28, 130, 38, 191, 7, 144, 28, 188, 49, 116, 58, 10, 182, 61, 148, 59, 157, 108, 214, 199, 56, 235, 253, 253, 10, 237, 80, 208, 232, 121, 183, 128, 49, 204, 153, 69, 152, 27, 129, 155, 58, 185, 153, 226, 55, 105, 30, 213, 5, 18, 100, 218, 237, 202, 144, 60, 3, 133, 151, 33, 222, 110, 246, 191, 229, 188, 60, 22, 162, 30, 169, 163, 98, 144, 148, 21, 131, 148, 158, 106, 226, 56, 188, 55, 242, 9, 236, 62, 76, 18, 41, 108, 62, 43, 244, 50, 137, 36, 105, 228, 189, 170, 218, 198, 114, 91, 179, 220, 63, 63, 100, 12, 109, 215, 230, 193, 18, 222, 11, 62, 86, 79, 16, 222, 154, 246, 242, 202, 236, 203, 91, 154, 225, 74, 220, 165, 193, 50, 74, 126, 157, 178, 122, 186, 179, 181, 62, 1, 168, 125, 116, 94, 223, 72, 55, 110, 140, 180, 6, 91, 130, 130, 245, 0, 3, 124, 30, 77, 118, 179, 237, 220, 33, 248, 3, 209, 229, 144, 105, 197, 49, 13, 134, 23, 155, 24, 171, 238, 74, 215, 130, 26, 198, 51, 30, 202, 14, 1, 117, 114, 158, 84, 190, 176, 174, 181, 40, 41, 119, 117, 23, 239, 197, 86, 48, 82, 245, 129, 233, 14, 244, 28, 184, 31, 242, 76, 245, 121, 28, 195, 94, 14, 116, 130, 51, 198, 173, 67, 100, 46, 68, 207, 206, 36, 58, 43, 150, 129, 66, 30, 26, 191, 225, 25, 184, 228, 211, 74, 45, 14, 198, 131, 92, 198, 47, 117, 154, 117, 202, 252, 7, 184, 118, 201, 140, 255, 98, 94, 237, 35, 69, 97, 160, 208, 253, 122, 165, 50, 152, 203, 152, 173, 15, 189, 122, 79, 250, 103, 115, 245, 24, 189, 70, 120, 176, 247, 187, 227, 186, 115, 217, 165, 215, 31, 110, 0, 191, 167, 46, 167, 155, 144, 147, 188, 103, 138, 87, 22, 8, 71, 148, 169, 83, 190, 148, 8, 86, 112, 43, 141, 112, 197, 179, 204, 202, 19, 189, 218, 54, 215, 177, 233, 215, 74, 122, 55, 113, 127, 49, 33, 135, 244, 133, 221, 148, 80, 192, 212, 104, 249, 47, 134, 237, 164, 130, 194, 97, 155, 68, 12, 142, 123, 220, 120, 135, 243, 24, 207, 28, 218, 38, 93, 65, 199, 234, 202, 167, 94, 51, 24, 189, 138, 112, 15, 162, 74, 150, 110, 132, 203, 72, 32, 124, 39, 166, 96, 113, 151, 139, 230, 65, 9, 55, 229, 203, 234, 67, 14, 98, 76, 72, 73, 193, 241, 80, 103, 169, 44, 185, 194, 225, 144, 220, 121, 42, 203, 164, 76, 172, 237, 120, 238, 120, 153, 65, 208, 215, 226, 81, 61, 99, 125, 63, 111, 162, 118, 162, 158, 71, 163, 187, 130, 219, 141, 58, 61, 50, 123, 77, 26, 53, 197, 6, 115, 118, 19, 60, 143, 222, 170, 106, 185, 233, 214, 39, 98, 115, 117, 88, 47, 17, 117, 245, 12, 1, 136, 22, 6, 249, 65, 141, 80, 149, 126, 73, 232, 154, 145, 46, 130, 108, 144, 123, 210, 22, 186, 30, 28, 165, 246, 68, 170, 95, 35, 179, 64, 73, 82, 132, 201, 146, 165, 168, 79, 37, 234, 116, 123, 153, 18, 160, 83, 183, 148, 23, 158, 42, 9, 209, 75, 91, 51, 52, 215, 37, 69, 193, 62, 25, 81, 41, 52, 169, 84, 230, 107, 167, 8, 137, 237, 95, 117, 143, 71, 196, 53, 59, 86, 218, 251, 228, 1, 173, 16, 249, 192, 212, 126, 73, 142, 34, 194, 50, 25, 210, 191, 242, 177, 91, 77, 252, 169, 127, 155, 243, 128, 247, 104, 91, 114, 221, 110, 85, 65, 37, 32, 64, 59, 136, 43, 248, 105, 226, 150, 117, 194, 131, 240, 238, 92, 119, 197, 94, 107, 106, 48, 204, 45, 153, 240, 125, 48, 21, 43, 143, 9, 43, 214, 232, 12, 249, 49, 124, 218, 200, 26, 92, 90, 161, 98, 136, 134, 186, 218, 244, 24, 106, 15, 77, 68, 143, 86, 74, 75, 124, 38, 114, 106, 73, 159, 113, 69, 20, 174, 246, 190, 84, 150, 118, 176, 21, 206, 242, 179, 100, 214, 234, 159, 64, 80, 153, 235, 228, 128, 47, 141, 6, 136, 13, 235, 14, 101, 131, 29, 228, 9, 87, 94, 105, 1, 31, 5, 27, 174, 252, 115, 203, 176, 158, 199, 209, 119, 141, 149, 178, 246, 138, 80, 216, 89, 210, 145, 102, 154, 201, 149, 80, 31, 227, 78, 104, 107, 208, 244, 27, 41, 255, 14, 43, 110, 63, 111, 14, 108, 98, 224, 166, 170, 200, 51, 54, 96, 78, 181, 62, 117, 183, 164, 252, 221, 146, 117, 25, 191, 13, 180, 183, 218, 116, 248, 77, 251, 180, 88, 176, 123, 47, 18, 111, 109, 52, 154, 126, 192, 147, 98, 119, 236, 90, 179, 199, 225, 236, 188, 144, 159, 99, 243, 63, 197, 42, 73, 250, 224, 80, 184, 111, 195, 25, 41, 6, 135, 28, 166, 18, 231, 47, 98, 157, 140, 145, 64, 142, 104, 38, 207, 85, 185, 237, 89, 157, 87, 171, 220, 82, 134, 196, 57, 130, 22, 210, 153, 54, 100, 192, 17, 13, 237, 103, 111, 33, 158, 57, 107, 173, 153, 73, 129, 25, 62, 100, 39, 31, 128, 187, 185, 47, 47, 151, 192, 29, 47, 136, 28, 87, 20, 45, 185, 71, 201, 219, 110, 179, 177, 57, 206, 103, 139, 185, 246, 131, 0, 129, 176, 118, 226, 147, 197, 85, 7, 80, 15, 142, 65, 127, 247, 66, 69, 56, 38, 5, 144, 255, 227, 23, 160, 127, 69, 8, 59, 114, 117, 151, 116, 218, 69, 77, 232, 137, 28, 99, 124, 121, 7, 131, 23, 151, 188, 144, 239, 208, 236, 187, 167, 205, 9, 156, 163, 18, 104, 71, 248, 104, 220, 112, 211, 129, 24, 227, 148, 194, 27, 142, 7, 98, 92, 180, 223, 243, 124, 32, 132, 245, 90, 101, 178, 238, 172, 109, 47, 15, 191, 43, 161, 249, 239, 79, 116, 121, 85, 187, 10, 132, 86, 23, 249, 212, 46, 114, 74, 1, 6, 126, 85, 159, 168, 210, 248, 175, 50, 4, 164, 164, 65, 109, 144, 88, 101, 129, 43, 63, 150, 13, 211, 109, 31, 124, 143, 91, 175, 117, 211, 170, 73, 252, 30, 30, 86, 207, 113, 74, 246, 89, 15, 113, 226, 3, 238, 168, 12, 160, 226, 249, 199, 240, 121, 63, 4, 201, 102, 130, 122, 225, 108, 230, 200, 88, 100, 40, 3, 94, 102, 47, 253, 240, 186, 107, 230, 54, 198, 19, 229, 11, 120, 200, 88, 147, 212, 86, 240, 184, 133, 96, 121, 145, 87, 245, 116, 214, 129, 224, 155, 12, 210, 12, 20, 41, 32, 109, 200, 232, 102, 103, 13, 57, 111, 193, 97, 46, 242, 24, 213, 202, 56, 104, 235, 169, 28, 202, 127, 26, 182, 133, 77, 235, 185, 229, 73, 166, 118, 216, 86, 156, 68, 109, 137, 173, 203, 138, 122, 1, 221, 38, 49, 194, 226, 220, 156, 244, 164, 181, 164, 196, 19, 169, 244, 151, 28, 14, 244, 72, 243, 124, 225, 35, 51, 184, 225, 188, 161, 106, 77, 175, 225, 224, 155, 96, 46, 228, 198, 81, 249, 112, 202, 69, 131, 81, 87, 96, 75, 72, 203, 104, 192, 250, 171, 25, 199, 134, 37, 90, 244, 22, 124, 128, 158, 138, 46, 179, 254, 135, 118, 228, 104, 15, 142, 11, 7, 185, 131, 165, 190, 128, 121, 185, 33, 164, 22, 165, 42, 171, 244, 37, 41, 237, 193, 176, 42, 85, 127, 57, 17, 157, 18, 230, 135, 62, 61, 63, 241, 147, 253, 115, 48, 245, 244, 122, 60, 121, 119, 145, 78, 128, 180, 110, 141, 101, 171, 59, 46, 91, 22, 11, 236, 246, 51, 36, 17, 64, 84, 119, 147, 244, 94, 166, 224, 23, 20, 210, 51, 126, 144, 243, 187, 199, 192, 7, 188, 237, 196, 236, 226, 154, 19, 219, 34, 63, 117, 158, 148, 210, 63, 189, 193, 62, 2, 101, 192, 85, 80, 118, 22, 201, 79, 91, 42, 227, 30, 107, 11, 138, 151, 247, 166, 193, 148, 14, 179, 41, 145, 224, 140, 225, 247, 224, 63, 182, 245, 121, 235, 40, 177, 225, 218, 122, 210, 183, 65, 35, 181, 7, 244, 105, 59, 31, 223, 45, 211, 132, 187, 214, 94, 117, 76, 62, 189, 239, 92, 117, 14, 89, 117, 40, 105, 225, 244, 47, 168, 241, 253, 150, 143, 64, 226, 93, 69, 79, 242, 116, 228, 220, 130, 207, 188, 248, 183, 16, 69, 40, 211, 159, 168, 190, 69, 246, 65, 23, 87, 28, 179, 253, 193, 240, 134, 148, 65, 197, 213, 247, 71, 54, 37, 138, 168, 132, 160, 195, 177, 4, 125, 231, 61, 210, 128, 181, 220, 197, 43, 90, 153, 19, 139, 199, 123, 194, 12, 215, 56, 43, 126, 97, 85, 38, 51, 115, 205, 198, 35, 202, 11, 91, 248, 215, 245, 207, 47, 85, 21, 197, 177, 199, 17, 240, 144, 103, 227, 245, 55, 69, 236, 50, 204, 96, 76, 179, 127, 96, 189, 227, 90, 12, 183, 215, 61, 126, 70, 120, 16, 202, 140, 221, 138, 61, 213, 18, 26, 213, 153, 244, 196, 235, 14, 127, 175, 21, 211, 141, 144, 116, 44, 24, 43, 242, 85, 157, 0, 31, 66, 114, 163, 82, 69, 7, 105, 242, 108, 33, 199, 75, 240, 252, 234, 30, 44, 136, 124, 8, 179, 179, 99, 2, 236, 194, 238, 216, 156, 70, 51, 250, 62, 81, 65, 26, 180, 144, 154, 109, 32, 14, 143, 8, 4, 176, 214, 161, 85, 225, 128, 38, 139, 161, 66, 83, 0, 65, 151, 213, 189, 173, 38, 193, 140, 213, 1, 117, 33, 15, 194, 30, 210, 202, 32, 105, 12, 135, 123, 86, 61, 93, 135, 254, 62, 14, 244, 46, 164, 164, 71, 202, 129, 197, 173, 160, 67, 158, 95, 209, 3, 68, 194, 209, 225, 204, 180, 175, 23, 114, 86, 229, 78, 35, 73, 131, 129, 42, 229, 225, 31, 180, 222, 91, 29, 120, 201, 220, 112, 231, 107, 126, 204, 154, 57, 128, 127, 233, 192, 146, 13, 130, 235, 192, 153, 137, 207, 52, 210, 212, 197, 83, 171, 134, 11, 170, 76, 93, 246, 99, 223, 165, 181, 245, 149, 0, 130, 235, 4, 151, 87, 219, 218, 101, 217, 50, 66, 20, 199, 217, 198, 152, 2, 205, 203, 144, 95, 231, 228, 70, 246, 122, 77, 180, 156, 6, 34, 131, 203, 97, 32, 207, 27, 183, 165, 238, 148, 15, 120, 235, 52, 224, 161, 158, 1, 125, 58, 132, 129, 71, 143, 159, 10, 36, 7, 8, 222, 106, 164, 97, 16, 100, 148, 6, 57, 25, 98, 12, 121, 87, 53, 123, 246, 185, 198, 214, 123, 193, 56, 213, 238, 250, 241, 199, 124, 15, 197, 83, 24, 187, 218, 144, 20, 119, 104, 110, 75, 230, 249, 235, 155, 3, 146, 167, 23, 103, 70, 171, 201, 56, 15, 13, 110, 102, 167, 186, 122, 131, 200, 237, 54, 200, 118, 85, 167, 194, 35, 236, 172, 29, 121, 16, 255, 206, 113, 118, 248, 18, 195, 168, 26, 37, 114, 6, 99, 232, 227, 103, 57, 174, 174, 183, 151, 149, 133, 177, 127, 184, 165, 49, 155, 16, 214, 44, 233, 132, 222, 198, 75, 6, 20, 90, 45, 146, 201, 122, 232, 1, 143, 227, 159, 243, 44, 96, 229, 188, 109, 12, 131, 236, 177, 127, 99, 167, 220, 12, 85, 219, 84, 36, 38, 69, 106, 29, 50, 112, 227, 239, 198, 120, 97, 244, 130, 155, 195, 43, 100, 136, 36, 24, 89, 54, 75, 219, 135, 168, 105, 16, 76, 229, 50, 127, 8, 176, 11, 220, 77, 175, 250, 90, 113, 30, 252, 232, 244, 44, 159, 121, 220, 152, 27, 14, 216, 41, 22, 22, 32, 177, 254, 77, 138, 223, 15, 134, 189, 158, 59, 24, 171, 22, 30, 253, 130, 109, 92, 84, 233, 25, 225, 52, 59, 22, 209, 27, 101, 41, 239, 89, 92, 248, 86, 131, 169, 35, 70, 157, 175, 123, 8, 219, 177, 163, 166, 32, 79, 3, 206, 9, 5, 208, 202, 108, 187, 67, 99, 231, 74, 156, 144, 69, 221, 74, 147, 247, 17, 194, 152, 218, 151, 236, 5, 217, 187, 22, 12, 106, 84, 211, 140, 91, 132, 218, 146, 18, 62, 4, 131, 123, 238, 185, 175, 9, 233, 50, 158, 185, 148, 76, 74, 46, 109, 122, 221, 243, 178, 73, 180, 233, 249, 12, 219, 160, 243, 103, 24, 108, 143, 84, 194, 66, 196, 123, 178, 234, 208, 59, 108, 10, 201, 24, 61, 165, 23, 216, 147, 114, 144, 171, 135, 66, 95, 200, 32, 178, 139, 84, 133, 234, 66, 191, 200, 217, 3, 222, 126, 2, 250, 50, 63, 11, 193, 179, 181, 137, 161, 164, 65, 231, 86, 190, 143, 13, 191, 166, 159, 23, 134, 248, 150, 209, 158, 73, 147, 183, 167, 184, 46, 36, 22, 125, 16, 115, 111, 120, 206, 15, 42, 209, 123, 92, 73, 104, 168, 227, 130, 239, 127, 74, 171, 241, 192, 42, 155, 200, 65, 99, 0, 169, 91, 226, 209, 154, 252, 6, 207, 52, 121, 196, 14, 18, 86, 213, 97, 236, 143, 65, 229, 55, 59, 205, 109, 151, 95, 205, 213, 160, 151, 111, 180, 93, 70, 196, 17, 230, 98, 207, 29, 150, 236, 194, 78, 249, 100, 30, 127, 44, 105, 114, 223, 58, 143, 233, 179, 79, 143, 89, 74, 177, 251, 52, 32, 156, 22, 221, 107, 200, 3, 112, 76, 139, 206, 81, 29, 162, 251, 49, 49, 177, 52, 138, 7, 65, 7, 84, 251, 169, 79, 33, 189, 73, 106, 96, 21, 207, 135, 218, 64, 69, 228, 115, 85, 73, 56, 31, 34, 252, 19, 224, 79, 196, 117, 199, 13, 84, 87, 175, 219, 227, 21, 5, 173, 196, 233, 116, 11, 57, 34, 74, 131, 227, 176, 86, 55, 224, 120, 94, 11, 232, 200, 242, 205, 197, 219, 56, 161, 111, 176, 42, 113, 237, 197, 200, 85, 192, 214, 167, 202, 29, 101, 4, 41, 187, 58, 50, 114, 195, 7, 120, 173, 204, 138, 176, 59, 104, 69, 132, 143, 54, 194, 106, 230, 155, 147, 45, 45, 26, 48, 165, 223, 37, 46, 98, 133, 238, 200, 169, 19, 65, 252, 144, 199, 136, 70, 197, 163, 5, 182, 64, 58, 215, 221, 187, 75, 87, 32, 0, 144, 237, 133, 180, 90, 120, 143, 7, 35, 32, 227, 44, 157, 125, 207, 73, 95, 86, 23, 65, 97, 133, 211, 51, 141, 238, 33, 81, 94, 138, 14, 143, 243, 227, 185, 124, 67, 130, 154, 164, 39, 59, 118, 144, 157, 222, 4, 16, 56, 148, 16, 22, 228, 98, 242, 63, 206, 44, 238, 4, 206, 23, 102, 239, 169, 11, 187, 55, 246, 238, 2, 233, 127, 7, 42, 61, 161, 27, 195, 95, 13, 57, 239, 73, 125, 162, 79, 249, 164, 105, 194, 48, 82, 65, 246, 204, 249, 117, 89, 253, 170, 149, 214, 185, 222, 242, 113, 88, 172, 81, 39, 16, 4, 16, 244, 61, 218, 181, 223, 143, 60, 151, 139, 175, 1, 218, 43, 15, 116, 212, 129, 233, 248, 207, 178, 132, 105, 88, 219, 134, 222, 199, 62, 163, 142, 172, 217, 62, 253, 242, 164, 129, 59, 188, 90, 109, 54, 51, 188, 75, 209, 51, 11, 147, 36, 44, 131, 107, 61, 69, 29, 167, 178, 69, 28, 140, 81, 68, 222, 59, 174, 18, 18, 138, 45, 223, 37, 104, 2, 0, 122, 227, 71, 19, 235, 36, 231, 241, 247, 42, 148, 243, 191, 141, 54, 17, 251, 2, 40, 69, 214, 130, 152, 132, 32, 242, 225, 24, 94, 27, 137, 243, 138, 133, 227, 236, 138, 166, 77, 153, 116, 150, 152, 3, 39, 177, 52, 136, 235, 239, 102, 99, 106, 118, 82, 252, 77, 89, 150, 245, 253, 77, 231, 218, 96, 223, 62, 36, 115, 229, 225, 127, 92, 22, 8, 169, 68, 123, 0, 213, 85, 39, 120, 21, 180, 86, 235, 168, 144, 180, 71, 50, 23, 207, 153, 48, 233, 37, 248, 80, 87, 235, 76, 178, 24, 99, 113, 249, 223, 106, 146, 152, 175, 192, 225, 167, 107, 56, 66, 213, 196, 93, 137, 10, 182, 14, 123, 189, 51, 10, 149, 86, 194, 5, 140, 111, 25, 93, 21, 59, 127, 220, 69, 198, 248, 56, 247, 162, 143, 226, 163, 26, 237, 62, 9, 150, 72, 56, 63, 175, 132, 67, 71, 44, 82, 135, 226, 193, 229, 218, 101, 70, 145, 21, 37, 52, 161, 52, 96, 13, 49, 230, 43, 85, 174, 137, 195, 4, 145, 11, 9, 108, 188, 248, 66, 14, 87, 138, 141, 217, 215, 43, 81, 243, 52, 236, 31, 207, 214, 36, 81, 149, 218, 88, 28, 69, 33, 49, 151, 202, 95, 238, 229, 107, 237, 172, 183, 99, 158, 245, 168, 142, 41, 39, 206, 207, 107, 96, 161, 132, 97, 117, 219, 160, 205, 178, 86, 71, 62, 241, 155, 13, 131, 59, 190, 46, 171, 72, 67, 25, 170, 235, 114, 62, 209, 127, 180, 29, 59, 68, 60, 209, 212, 236, 122, 245, 70, 215, 114, 153, 182, 88, 220, 142, 31, 87, 48, 238, 211, 124, 149, 160, 239, 113, 177, 154, 179, 96, 137, 145, 198, 112, 196, 126, 188, 77, 43, 165, 235, 227, 120, 71, 121, 244, 173, 251, 100, 244, 207, 224, 140, 160, 82, 17, 46, 136, 78, 178, 183, 66, 159, 219, 66, 195, 164, 237, 164, 69, 115, 201, 29, 103, 106, 71, 227, 96, 88, 16, 187, 241, 231, 6, 34, 130, 202, 130, 140, 120, 242, 20, 133, 255, 9, 20, 54, 6, 198, 62, 198, 39, 191, 216, 92, 125, 155, 242, 202, 30, 151, 252, 152, 153, 184, 227, 72, 24, 156, 89, 13, 1, 74, 112, 19, 155, 150, 142, 25, 154, 232, 255, 250, 139, 151, 162, 252, 43, 49, 5, 130, 72, 241, 18, 255, 122, 59, 196, 250, 95, 248, 17, 18, 32, 161, 242, 110, 208, 40, 146, 250, 151, 72, 221, 194, 118, 101, 251, 177, 81, 40, 145, 13, 108, 242, 223, 13, 1, 203, 195, 227, 18, 58, 185, 120, 212, 33, 190, 102, 145, 5, 213, 14, 19, 39, 187, 70, 115, 5, 19, 173, 237, 30, 43, 29, 163, 80, 189, 197, 182, 204, 144, 142, 170, 214, 200, 208, 111, 184, 229, 147, 102, 24, 189, 238, 42, 54, 228, 253, 182, 18, 45, 67, 185, 232, 199, 72, 243, 228, 215, 43, 245, 226, 226, 68, 158, 49, 107, 225, 213, 51, 72, 20, 252, 213, 26, 88, 108, 36, 117, 151, 50, 255, 24, 181, 55, 223, 47, 149, 95, 142, 41, 233, 194, 158, 198, 158, 41, 39, 186, 88, 139, 166, 30, 85, 136, 44, 50, 145, 247, 61, 69, 131, 209, 141, 14, 6, 98, 118, 124, 143, 46, 148, 82, 129, 68, 101, 155, 197, 211, 174, 178, 55, 59, 122, 81, 136, 113, 253, 174, 222, 111, 92, 215, 126, 250, 224, 117, 125, 202, 59, 30, 217, 178, 53, 36, 155, 150, 161, 174, 114, 172, 228, 136, 86, 225, 234, 49, 33, 150, 216, 25, 32, 192, 97, 206, 117, 104, 188, 154, 218, 0, 88, 214, 70, 115, 9, 253, 182, 32, 143, 57, 214, 229, 170, 202, 112, 230, 194, 175, 210, 70, 58, 226, 52, 17, 55, 25, 246, 35, 143, 90, 224, 131, 119, 62, 31, 207, 234, 216, 72, 7, 110, 171, 115, 237, 246, 179, 5, 17, 197, 194, 97, 98, 157, 19, 10, 102, 172, 153, 138, 45, 102, 98, 46, 37, 218, 49, 255, 69, 148, 126, 92, 131, 155, 153, 22, 255, 3, 75, 34, 92, 70, 21, 35, 130, 86, 67, 90, 82, 56, 235, 79, 10, 47, 197, 121, 80, 55, 29, 146, 82, 186, 210, 223, 1, 113, 77, 69, 91, 115, 241, 104, 223, 24, 123, 51, 247, 117, 87, 229, 176, 182, 241, 143, 137, 162, 2, 106, 174, 251, 116, 90, 55, 133, 101, 164, 254, 243, 1, 239, 114, 165, 121, 205, 240, 139, 95, 34, 50, 148, 203, 45, 243, 83, 12, 234, 122, 39, 1, 13, 142, 148, 49, 185, 151, 21, 96, 74, 61, 98, 241, 41, 150, 10, 47, 178, 90, 50, 38, 181, 126, 164, 156, 70, 155, 137, 173, 184, 105, 11, 199, 128, 175, 36, 167, 116, 9, 174, 69, 85, 178, 129, 230, 188, 78, 60, 41, 103, 137, 70, 165, 141, 42, 76, 218, 232, 208, 38, 96, 253, 159, 135, 224, 2, 232, 118, 168, 175, 175, 110, 50, 149, 18, 111, 188, 37, 153, 46, 121, 21, 177, 113, 235, 47, 136, 218, 255, 195, 144, 108, 141, 59, 54, 208, 12, 31, 167, 2, 217, 225, 232, 160, 253, 211, 31, 113, 149, 233, 119, 94, 109, 153, 186, 100, 78, 200, 49, 181, 144, 248, 255, 64, 189, 101, 138, 97, 99, 15, 243, 9, 169, 202, 146, 137, 119, 149, 14, 144, 16, 8, 207, 16, 198, 3, 42, 122, 235, 241, 98, 168, 182, 85, 145, 254, 142, 237, 99, 0, 238, 221, 234, 116, 198, 113, 246, 234, 26, 127, 119, 98, 60, 228, 199, 241, 248, 239, 71, 219, 87, 195, 111, 236, 94, 234, 6, 45, 163, 203, 55, 206, 28, 27, 140, 198, 254, 124, 104, 218, 169, 77, 121, 184, 120, 1, 64, 17, 189, 6, 233, 23, 21, 213, 87, 215, 180, 156, 163, 173, 233, 21, 196, 99, 103, 70, 52, 46, 219, 183, 184, 45, 68, 100, 139, 55, 85, 60, 132, 164, 140, 156, 87, 67, 180, 65, 172, 254, 145, 27, 8, 139, 112, 176, 126, 165, 223, 132, 200, 216, 87, 29, 188, 30, 1, 192, 37, 245, 117, 143, 185, 206, 56, 138, 185, 236, 221, 138, 136, 1, 49, 191, 177, 90, 198, 165, 177, 183, 108, 4, 241, 142, 35, 78, 238, 117, 109, 209, 39, 240, 188, 218, 56, 214, 204, 69, 228, 163, 115, 42, 2, 23, 0, 75, 227, 213, 79, 237, 21, 36, 80, 50, 191, 141, 38, 251, 108, 18, 207, 215, 110, 5, 84, 32, 156, 123, 52, 156, 199, 197, 54, 53, 192, 173, 89, 70, 86, 16, 155, 230, 79, 198, 28, 100, 53, 21, 237, 204, 114, 31, 174, 20, 143, 7, 233, 179, 226, 198, 150, 37, 227, 91, 179, 251, 215, 37, 50, 76, 165, 235, 27, 53, 155, 205, 166, 75, 6, 22, 95, 24, 52, 244, 103, 11, 111, 116, 255, 101, 47, 68, 28, 102, 194, 131, 143, 230, 73, 188, 244, 169, 117, 159, 180, 186, 222, 119, 204, 50, 143, 222, 193, 145, 18, 106, 189, 227, 175, 78, 229, 140, 21, 240, 240, 195, 135, 131, 34, 82, 65, 132, 27, 33, 118, 135, 112, 188, 244, 85, 181, 63, 242, 30, 72, 135, 174, 86, 30, 102, 77, 12, 254, 21, 83, 175, 137, 250, 0, 101, 104, 222, 171, 4, 108, 35, 124, 200, 143, 132, 39, 100, 71, 79, 106, 66, 233, 169, 134, 118, 135, 48, 238, 147, 182, 126, 236, 145, 194, 197, 46, 112, 202, 141, 66, 130, 86, 189, 215, 66, 5, 221, 204, 101, 182, 188, 108, 53, 35, 113, 133, 238, 241, 66, 95, 85, 217, 57, 91, 20, 23, 179, 31, 2, 89, 143, 228, 182, 80, 94, 33, 96, 49, 228, 67, 8, 135, 195, 152, 87, 207, 164, 111, 76, 81, 129, 184, 100, 93, 93, 8, 180, 139, 1, 164, 196, 147, 195, 173, 157, 198, 51, 235, 169, 19, 7, 83, 144, 84, 68, 236, 52, 244, 96, 231, 117, 141, 102, 80, 167, 157, 72, 249, 53, 44, 65, 148, 225, 43, 41, 158, 84, 61, 125, 40, 134, 143, 92, 108, 172, 98, 166, 31, 137, 218, 13, 53, 193, 188, 243, 176, 58, 174, 14, 236, 27, 156, 173, 66, 87, 197, 224, 232, 143, 252, 136, 228, 2, 41, 228, 159, 78, 90, 63, 19, 101, 103, 105, 183, 39, 207, 50, 150, 41, 50, 26, 235, 220, 187, 204, 72, 73, 4, 87, 43, 172, 67, 21, 154, 21, 190, 112, 112, 18, 188, 178, 148, 93, 69, 123, 180, 179, 9, 136, 191, 221, 211, 211, 131, 141, 2, 13, 92, 167, 129, 37, 43, 58, 173, 9, 39, 85, 41, 88, 169, 255, 107, 169, 47, 105, 148, 75, 119, 234, 188, 168, 6, 136, 3, 252, 51, 86, 117, 49, 198, 33, 234, 188, 247, 130, 45, 191, 93, 183, 88, 85, 20, 138, 59, 236, 50, 175, 74, 73, 167, 187, 90, 2, 218, 238, 174, 169, 138, 59, 143, 85, 97, 234, 220, 245, 68, 124, 236, 46, 167, 101, 149, 12, 109, 231, 100, 133, 104, 110, 148, 78, 146, 118, 76, 189, 99, 25, 153, 93, 24, 145, 33, 114, 85, 51, 233, 40, 65, 107, 179, 129, 103, 249, 202, 196, 207, 146, 154, 44, 62, 89, 39, 137, 42, 78, 129, 184, 110, 243, 162, 14, 3, 70, 73, 187, 184, 32, 48, 32, 246, 55, 163, 190, 173, 116, 46, 80, 202, 41, 110, 32, 73, 223, 107, 153, 57, 106, 195, 236, 230, 233, 112, 232, 104, 188, 60, 41, 223, 75, 75, 206, 77, 19, 43, 254, 185, 230, 78, 113, 117, 197, 204, 139, 178, 117, 135, 33, 36, 74, 106, 215, 12, 58, 34, 29, 218, 79, 12, 36, 125, 118, 235, 142, 13, 140, 211, 194, 104, 54, 47, 4, 53, 47, 188, 47, 55, 50, 178, 202, 90, 10, 135, 105, 101, 127, 244, 136, 92, 102, 33, 245, 194, 226, 67, 89, 215, 74, 179, 196, 123, 62, 255, 25, 5, 217, 4, 35, 235, 180, 225, 194, 22, 252, 86, 254, 164, 213, 128, 156, 36, 230, 81, 152, 162, 45, 82, 27, 12, 106, 186, 80, 117, 149, 100, 34, 9, 33, 168, 114, 31, 120, 205, 220, 90, 151, 158, 224, 15, 231, 81, 175, 141, 107, 86, 76, 25, 173, 63, 11, 196, 163, 234, 36, 122, 207, 49, 98, 47, 172, 255, 45, 241, 157, 223, 141, 179, 18, 105, 209, 252, 203, 182, 82, 246, 7, 143, 242, 43, 98, 49, 165, 232, 40, 83, 58, 176, 107, 236, 93, 105, 150, 118, 116, 207, 242, 25, 187, 131, 66, 9, 48, 118, 249, 228, 88, 52, 79, 196, 137, 122, 72, 46, 241, 10, 156, 254, 139, 212, 84, 70, 63, 102, 85, 166, 220, 231, 154, 227, 207, 237, 212, 12, 242, 200, 199, 7, 244, 233, 251, 107, 4, 78, 177, 25, 207, 53, 210, 232, 107, 230, 215, 2, 227, 182, 158, 90, 193, 158, 153, 40, 149, 4, 208, 76, 15, 69, 199, 237, 44, 203, 95, 160, 164, 164, 203, 199, 140, 199, 40, 102, 197, 66, 233, 119, 132, 43, 178, 77, 68, 55, 6, 152, 162, 115, 40, 215, 173, 12, 55, 217, 68, 191, 49, 145, 212, 13, 79, 250, 151, 47, 128, 43, 62, 165, 17, 58, 28, 93, 214, 199, 65, 245, 158, 98, 67, 161, 192, 44, 111, 87, 112, 60, 239, 188, 199, 206, 201, 246, 229, 175, 217, 10, 207, 131, 65, 98, 189, 238, 182, 198, 253, 5, 197, 173, 56, 115, 46, 19, 204, 87, 167, 102, 100, 115, 76, 116, 177, 17, 141, 110, 72, 2, 244, 37, 3, 85, 182, 44, 81, 214, 94, 87, 197, 95, 248, 248, 241, 67, 115, 26, 207, 66, 21, 74, 88, 115, 1, 156, 217, 234, 59, 48, 70, 192, 211, 252, 17, 219, 249, 23, 34, 112, 203, 60, 69, 51, 65, 251, 39, 212, 9, 166, 76, 200, 112, 164, 91, 217, 179, 53, 13, 94, 93, 173, 190, 139, 148, 7, 3, 114, 21, 165, 175, 229, 26, 61, 227, 113, 166, 42, 50, 219, 190, 119, 9, 148, 87, 23, 247, 226, 58, 95, 52, 115, 4, 125, 186, 190, 84, 193, 237, 246, 69, 213, 3, 111, 153, 73, 25, 36, 102, 79, 91, 231, 47, 43, 251, 146, 239, 151, 37, 121, 26, 127, 221, 237, 166, 163, 139, 1, 22, 169, 98, 240, 212, 117, 97, 162, 27, 193, 210, 254, 31, 31, 121, 97, 29, 196, 186, 89, 221, 202, 34, 96, 70, 115, 145, 190, 208, 108, 229, 67, 61, 42, 112, 187, 199, 34, 4, 22, 216, 101, 81, 137, 135, 138, 163, 176, 142, 249, 213, 254, 240, 49, 65, 195, 202, 36, 159, 55, 173, 182, 128, 96, 178, 122, 129, 65, 106, 48, 139, 64, 15, 8, 163, 47, 165, 14, 181, 192, 182, 86, 197, 224, 3, 175, 246, 99, 165, 11, 7, 138, 218, 178, 127, 74, 25, 58, 151, 171, 32, 116, 234, 96, 205, 25, 82, 98, 6, 213, 71, 191, 12, 134, 199, 57, 84, 182, 236, 162, 65, 57, 243, 140, 190, 252, 253, 227, 224, 137, 203, 44, 55, 239, 68, 85, 16, 184, 28, 233, 207, 191, 254, 51, 2, 116, 107, 129, 58, 156, 21, 218, 38, 31, 235, 79, 81, 223, 225, 227, 40, 207, 115, 54, 5, 219, 199, 56, 34, 105, 53, 50, 2, 104, 108, 187, 109, 253, 4, 235, 143, 32, 124, 211, 109, 211, 130, 173, 229, 124, 141, 180, 159, 145, 38, 184, 246, 86, 124, 235, 244, 67, 38, 15, 10, 136, 197, 187, 239, 233, 227, 217, 219, 255, 29, 238, 106, 247, 24, 199, 158, 45, 172, 253, 48, 152, 254, 125, 120, 68, 77, 184, 88, 156, 34, 89, 116, 111, 140, 33, 76, 18, 94, 210, 156, 93, 99, 113, 1, 213, 86, 14, 132, 94, 142, 3, 32, 80, 159, 218, 180, 56, 17, 110, 82, 47, 105, 146, 241, 197, 170, 84, 31, 137, 232, 65, 223, 222, 196, 209, 179, 160, 238, 116, 61, 77, 46, 198, 13, 56, 7, 106, 86, 46, 173, 111, 205, 78, 53, 130, 44, 73, 214, 148, 222, 173, 37, 171, 223, 8, 77, 180, 194, 68, 240, 154, 73, 41, 38, 113, 41, 115, 233, 218, 150, 35, 213, 196, 137, 144, 218, 87, 241, 166, 176, 81, 168, 189, 45, 190, 142, 203, 58, 34, 9, 40, 72, 88, 160, 217, 112, 227, 54, 27, 85, 56, 249, 20, 165, 67, 53, 68, 49, 219, 151, 95, 106, 45, 119, 66, 193, 119, 174, 4, 106, 152, 137, 173, 103, 28, 59, 145, 32, 141, 174, 193, 13, 159, 47, 130, 167, 100, 217, 198, 226, 129, 76, 95, 90, 4, 9, 197, 173, 12, 170, 88, 76, 111, 112, 243, 154, 67, 88, 125, 247, 142, 199, 89, 229, 218, 179, 232, 217, 242, 186, 204, 82, 40, 7, 113, 122, 243, 130, 129, 81, 92, 219, 23, 235, 226, 67, 3, 119, 121, 101, 209, 20, 162, 154, 136, 141, 190, 15, 113, 180, 109, 44, 23, 205, 159, 165, 120, 14, 69, 80, 229, 56, 37, 64, 54, 47, 118, 43, 245, 99, 149, 159, 237, 206, 156, 135, 189, 171, 20, 13, 153, 218, 154, 35, 93, 245, 57, 91, 108, 155, 118, 68, 71, 218, 77, 69, 186, 242, 12, 38, 89, 190, 129, 42, 98, 184, 189, 249, 107, 144, 62, 144, 200, 9, 176, 206, 104, 225, 112, 159, 89, 26, 47, 159, 40, 222, 205, 178, 143, 91, 180, 244, 176, 39, 235, 82, 213, 4, 21, 47, 91, 61, 20, 217, 187, 76, 153, 63, 50, 95, 87, 157, 193, 140, 154, 226, 45, 8, 211, 146, 131, 214, 86, 241, 57, 34, 207, 9, 211, 214, 255, 97, 15, 247, 244, 43, 241, 107, 149, 186, 191, 254, 82, 177, 246, 225, 181, 70, 48, 41, 26, 165, 123, 238, 136, 116, 204, 143, 149, 155, 41, 162, 213, 55, 56, 181, 59, 105, 201, 102, 18, 81, 206, 60, 195, 110, 194, 218, 209, 185, 223, 58, 67, 229, 63, 142, 111, 219, 148, 254, 250, 42, 205, 50, 35, 28, 101, 90, 99, 166, 112, 131, 154, 94, 200, 228, 25, 197, 250, 148, 241, 64, 6, 247, 33, 149, 158, 68, 223, 44, 65, 172, 49, 76, 238, 107, 106, 29, 144, 134, 168, 31, 131, 176, 121, 131, 134, 229, 181, 0, 242, 217, 46, 243, 184, 151, 210, 83, 220, 23, 40, 26, 107, 232, 40, 39, 29, 81, 245, 190, 26, 48, 135, 118, 235, 150, 34, 66, 241, 115, 242, 56, 38, 131, 222, 211, 43, 59, 210, 36, 108, 146, 127, 212, 194, 87, 113, 56, 146, 47, 176, 13, 90, 91, 213, 184, 137, 172, 70, 31, 146, 255, 112, 114, 40, 154, 178, 124, 144, 81, 60, 86, 60, 49, 131, 137, 174, 232, 206, 121, 39, 132, 38, 140, 188, 170, 64, 15, 245, 231, 47, 60, 158, 25, 243, 191, 160, 101, 79, 245, 72, 82, 28, 119, 97, 41, 33, 211, 139, 242, 96, 193, 134, 67, 9, 150, 164, 182, 6, 161, 4, 134, 39, 70, 105, 28, 48, 103, 81, 110, 13, 86, 226, 209, 224, 185, 246, 72, 91, 98, 40, 34, 113, 189, 232, 163, 206, 124, 194, 197, 164, 138, 133, 10, 166, 85, 0, 243, 28, 12, 54, 41, 7, 201, 35, 31, 17, 112, 64, 1, 124, 250, 63, 24, 14, 176, 80, 73, 206, 193, 148, 30, 178, 50, 137, 23, 255, 47, 164, 226, 175, 210, 28, 88, 244, 208, 178, 70, 66, 125, 188, 205, 123, 128, 145, 167, 63, 60, 2, 14, 162, 180, 200, 195, 49, 255, 26, 175, 238, 100, 216, 241, 73, 94, 23, 40, 248, 188, 233, 152, 10, 134, 206, 169, 220, 211, 249, 225, 137, 130, 129, 52, 14, 23, 9, 135, 66, 57, 153, 86, 92, 209, 80, 154, 179, 242, 183, 102, 54, 161, 202, 107, 91, 168, 13, 171, 209, 187, 77, 245, 82, 140, 80, 156, 78, 234, 204, 145, 111, 117, 62, 146, 104, 138, 101, 100, 217, 34, 19, 57, 145, 92, 168, 94, 59, 196, 79, 196, 28, 205, 230, 103, 65, 122, 70, 249, 12, 163, 55, 69, 194, 239, 176, 120, 75, 34, 196, 73, 26, 101, 32, 13, 187, 145, 87, 8, 186, 135, 129, 156, 120, 85, 47, 246, 52, 82, 173, 200, 29, 140, 83, 160, 155, 164, 122, 135, 211, 126, 88, 152, 87, 95, 139, 82, 124, 155, 86, 136, 1, 104, 95, 187, 122, 72, 230, 94, 242, 173, 76, 242, 15, 122, 12, 20, 147, 67, 214, 202, 227, 69, 145, 248, 75, 211, 41, 214, 184, 156, 142, 52, 152, 151, 36, 56, 77, 124, 188, 217, 193, 192, 110, 30, 247, 121, 18, 229, 166, 150, 153, 255, 81, 244, 137, 27, 53, 216, 242, 177, 36, 64, 253, 29, 222, 220, 12, 133, 5, 20, 89, 105, 60, 193, 115, 135, 121, 215, 155, 120, 117, 166, 131, 54, 6, 47, 104, 241, 94, 62, 89, 42, 140, 232, 225, 57, 251, 123, 130, 168, 18, 162, 171, 114, 87, 163, 17, 231, 242, 244, 129, 28, 214, 105, 206, 31, 21, 139, 12, 45, 68, 215, 30, 151, 206, 28, 63, 138, 142, 103, 201, 100, 44, 150, 39, 167, 33, 252, 180, 19, 62, 157, 32, 113, 81, 234, 40, 1, 16, 117, 234, 15, 105, 198, 205, 211, 208, 233, 146, 57, 98, 195, 80, 236, 136, 90, 50, 125, 191, 169, 32, 252, 52, 50, 6, 235, 220, 25, 19, 210, 11, 222, 128, 8, 146, 79, 49, 60, 110, 9, 36, 252, 150, 162, 10, 54, 229, 212, 86, 106, 63, 144, 13, 130, 84, 159, 37, 53, 129, 213, 243, 217, 80, 167, 94, 96, 121, 172, 74, 240, 233, 155, 86, 8, 230, 179, 154, 66, 144, 173, 107, 255, 177, 78, 79, 191, 5, 193, 157, 166, 42, 228, 161, 90, 30, 187, 11, 173, 107, 103, 135, 209, 198, 30, 174, 7, 22, 139, 54, 131, 23, 202, 202, 215, 239, 231, 20, 104, 20, 206, 52, 230, 59, 172, 86, 7, 75, 54, 16, 13, 89, 80, 255, 238, 246, 195, 41, 54, 185, 91, 60, 141, 124, 21, 219, 171, 220, 123, 137, 233, 215, 209, 54, 179, 50, 147, 251, 119, 130, 143, 187, 83, 86, 206, 130, 8, 80, 245, 95, 166, 141, 5, 225, 237, 144, 120, 40, 230, 219, 73, 212, 150, 201, 247, 36, 79, 121, 158, 38, 208, 166, 2, 5, 173, 159, 157, 235, 79, 130, 73, 214, 201, 87, 169, 209, 83, 141, 47, 224, 82, 207, 181, 196, 244, 173, 253, 228, 161, 71, 155, 220, 231, 6, 114, 170, 96, 159, 129, 137, 47, 60, 234, 149, 109, 3, 98, 244, 91, 43, 106, 237, 136, 145, 247, 217, 64, 245, 77, 19, 108, 120, 46, 114, 208, 186, 131, 196, 196, 199, 51, 247, 252, 7, 46, 83, 43, 29, 149, 224, 48, 247, 114, 8, 175, 130, 118, 133, 107, 15, 29, 114, 234, 185, 1, 146, 200, 151, 31, 182, 29, 109, 4, 244, 18, 132, 75, 184, 63, 96, 131, 1, 119, 93, 39, 225, 220, 55, 132, 225, 217, 114, 175, 91, 39, 146, 39, 13, 248, 72, 63, 232, 108, 43, 234, 52, 156, 110, 87, 97, 91, 244, 240, 13, 247, 228, 35, 113, 161, 90, 154, 222, 31, 185, 77, 199, 117, 253, 50, 57, 112, 210, 230, 92, 222, 206, 175, 104, 117, 68, 191, 147, 244, 110, 133, 249, 217, 124, 147, 158, 129, 70, 204, 242, 32, 124, 3, 68, 91, 109, 159, 8, 54, 209, 202, 9, 252, 58, 116, 161, 211, 172, 181, 94, 242, 113, 214, 74, 180, 135, 78, 166, 3, 91, 251, 223, 183, 17, 100, 83, 101, 171, 206, 230, 45, 136, 248, 236, 251, 254, 130, 255, 63, 123, 5, 223, 223, 80, 88, 185, 152, 111, 37, 91, 4, 181, 3, 209, 222, 224, 31, 171, 54, 6, 135, 184, 232, 48, 198, 186, 183, 235, 114, 47, 61, 77, 122, 178, 200, 150, 79, 132, 174, 254, 254, 238, 113, 131, 36, 35, 58, 1, 237, 5, 231, 248, 173, 164, 85, 94, 92, 190, 249, 176, 109, 25, 88, 39, 21, 153, 35, 194, 210, 107, 103, 213, 180, 250, 21, 96, 50, 168, 75, 170, 27, 52, 32, 58, 161, 10, 218, 243, 84, 198, 58, 187, 55, 161, 233, 17, 241, 211, 100, 16, 46, 35, 194, 16, 17, 8, 226, 1, 108, 204, 184, 195, 74, 184, 40, 68, 38, 168, 64, 7, 91, 221, 73, 130, 229, 153, 101, 225, 56, 121, 86, 237, 23, 235, 99, 130, 188, 63, 134, 229, 79, 62, 66, 69, 2, 49, 102, 34, 26, 99, 13, 153, 226, 124, 192, 24, 45, 41, 205, 193, 3, 45, 9, 234, 190, 63, 199, 150, 229, 233, 216, 157, 169, 125, 141, 132, 246, 161, 173, 26, 34, 134, 142, 237, 99, 79, 18, 245, 170, 252, 116, 209, 11, 180, 213, 64, 6, 225, 28, 87, 206, 242, 8, 60, 151, 44, 45, 139, 47, 212, 46, 100, 63, 88, 32, 103, 211, 68, 209, 154, 167, 148, 41, 96, 185, 23, 158, 170, 154, 37, 52, 130, 220, 72, 28, 119, 95, 226, 168, 121, 211, 243, 83, 176, 81, 18, 220, 105, 174, 2, 109, 230, 251, 207, 233, 118, 95, 228, 45, 87, 167, 222, 161, 100, 95, 20, 91, 85, 82, 88, 156, 82, 239, 47, 4, 34, 243, 233, 2, 125, 77, 20, 184, 89, 121, 70, 68, 83, 197, 238, 66, 66, 4, 226, 33, 71, 154, 156, 81, 22, 20, 195, 87, 136, 157, 72, 222, 243, 162, 146, 133, 210, 245, 222, 29, 247, 115, 189, 95, 32, 27, 83, 122, 84, 7, 45, 77, 182, 200, 94, 138, 216, 33, 196, 32, 28, 38, 5, 178, 173, 83, 163, 7, 161, 190, 247, 36, 121, 82, 240, 192, 62, 92, 86, 221, 245, 67, 78, 217, 236, 200, 0, 90, 54, 21, 188, 113, 66, 240, 5, 234, 137, 21, 123, 93, 215, 118, 101, 239, 14, 83, 187, 146, 52, 96, 42, 123, 55, 16, 138, 7, 200, 182, 187, 121, 88, 62, 212, 242, 140, 194, 48, 114, 50, 6, 212, 58, 110, 36, 10, 161, 134, 10, 253, 127, 222, 67, 158, 246, 166, 62, 108, 40, 21, 39, 31, 80, 107, 34, 107, 161, 163, 149, 77, 202, 149, 245, 40, 197, 55, 231, 66, 254, 33, 229, 161, 54, 7, 176, 204, 30, 22, 67, 24, 241, 130, 21, 195, 8, 38, 59, 186, 225, 243, 43, 19, 164, 160, 103, 89, 16, 188, 19, 82, 39, 199, 133, 50, 61, 123, 182, 154, 71, 184, 10, 177, 111, 188, 10, 207, 39, 4, 134, 5, 48, 71, 79, 133, 144, 201, 70, 118, 202, 132, 20, 157, 141, 166, 195, 149, 31, 148, 162, 142, 12, 127, 242, 8, 158, 122, 44, 121, 145, 199, 26, 240, 209, 60, 150, 73, 16, 93, 134, 137, 177, 175, 158, 64, 20, 19, 93, 88, 133, 50, 189, 162, 28, 57, 216, 52, 178, 79, 5, 222, 139, 93, 183, 204, 155, 197, 206, 209, 120, 98, 94, 162, 164, 17, 119, 14, 197, 63, 64, 76, 187, 193, 211, 17, 121, 199, 174, 75, 97, 47, 74, 154, 44, 93, 50, 86, 4, 81, 215, 204, 173, 98, 204, 156, 101, 243, 210, 93, 215, 153, 12, 47, 72, 34, 88, 88, 248, 253, 97, 13, 145, 119, 108, 254, 148, 102, 58, 189, 6, 15, 150, 65, 113, 222, 199, 62, 241, 0, 226, 204, 22, 177, 20, 243, 3, 13, 167, 85, 76, 66, 248, 49, 25, 93, 77, 72, 120, 241, 102, 246, 118, 34, 177, 215, 55, 2, 42, 138, 135, 33, 16, 206, 200, 59, 229, 171, 37, 5, 116, 218, 29, 228, 64, 13, 54, 9, 44, 105, 21, 174, 229, 207, 104, 64, 202, 19, 193, 100, 141, 144, 63, 32, 238, 35, 40, 187, 11, 18, 200, 114, 37, 157, 230, 221, 171, 239, 11, 1, 55, 162, 199, 147, 147, 179, 28, 122, 42, 163, 214, 160, 179, 35, 114, 65, 213, 104, 80, 150, 12, 183, 202, 68, 187, 243, 131, 122, 235, 226, 55, 206, 167, 133, 202, 245, 52, 75, 13, 244, 71, 8, 151, 204, 48, 25, 138, 98, 115, 102, 178, 143, 51, 220, 152, 152, 138, 39, 186, 213, 128, 112, 130, 161, 16, 156, 246, 212, 134, 25, 28, 130, 27, 206, 61, 115, 153, 35, 43, 147, 41], - [253, 74, 68, 10, 71, 108, 46, 251, 233, 116, 151, 73, 179, 110, 84, 10, 65, 105, 32, 40, 17, 74, 177, 77, 130, 48, 236, 78, 222, 48, 99, 21, 77, 88, 120, 164, 160, 200, 115, 47, 61, 25, 181, 248, 75, 145, 199, 129, 98, 201, 82, 110, 189, 112, 247, 193, 211, 68, 6, 205, 46, 9, 76, 70, 99, 137, 202, 61, 156, 240, 135, 252, 151, 29, 185, 129, 210, 216, 36, 79, 249, 186, 76, 246, 208, 117, 22, 71, 213, 210, 186, 166, 67, 158, 149, 70, 45, 76, 77, 63, 149, 3, 8, 183, 33, 170, 80, 108, 51, 226, 42, 243, 106, 181, 49, 197, 177, 23, 53, 201, 233, 195, 27, 29, 168, 245, 110, 241, 66, 12, 44, 101, 92, 4, 14, 111, 45, 215, 205, 167, 93, 41, 47, 235, 186, 249, 144, 27, 53, 195, 6, 120, 213, 202, 128, 96, 157, 206, 93, 4, 204, 183, 233, 229, 205, 109, 230, 86, 157, 172, 82, 25, 232, 162, 196, 45, 208, 208, 240, 233, 118, 13, 102, 140, 135, 201, 181, 119, 59, 33, 199, 119, 191, 25, 235, 159, 16, 67, 112, 97, 53, 255, 91, 230, 252, 131, 175, 123, 125, 165, 105, 75, 93, 60, 4, 19, 116, 154, 176, 234, 106, 166, 159, 165, 207, 215, 127, 221, 93, 38, 211, 208, 34, 22, 119, 229, 96, 155, 108, 77, 156, 192, 225, 144, 10, 127, 24, 6, 34, 130, 106, 229, 202, 149, 91, 102, 42, 9, 226, 117, 215, 137, 210, 41, 51, 92, 235, 203, 161, 106, 40, 201, 20, 142, 211, 217, 213, 15, 154, 156, 167, 107, 174, 204, 87, 61, 6, 113, 43, 178, 9, 49, 127, 137, 144, 88, 79, 165, 152, 68, 59, 73, 28, 49, 198, 96, 106, 61, 168, 232, 95, 169, 238, 154, 9, 34, 145, 150, 92, 63, 236, 185, 136, 157, 14, 253, 145, 100, 9, 18, 126, 81, 157, 183, 229, 185, 0, 210, 152, 67, 216, 233, 248, 40, 26, 108, 226, 66, 241, 34, 13, 16, 204, 157, 99, 62, 247, 114, 82, 50, 164, 219, 192, 125, 167, 44, 71, 243, 4, 105, 41, 104, 213, 10, 215, 165, 12, 207, 168, 166, 136, 186, 9, 146, 129, 179, 233, 125, 242, 183, 214, 100, 25, 131, 6, 112, 195, 137, 167, 129, 226, 146, 235, 209, 229, 77, 24, 13, 250, 113, 63, 169, 194, 70, 135, 68, 11, 88, 178, 206, 46, 137, 70, 7, 7, 180, 72, 206, 3, 14, 0, 156, 36, 220, 100, 239, 67, 43, 122, 203, 70, 61, 42, 109, 65, 167, 243, 1, 26, 79, 255, 31, 132, 122, 150, 72, 147, 120, 139, 54, 222, 154, 30, 234, 65, 139, 241, 80, 21, 210, 163, 240, 58, 26, 66, 99, 174, 65, 29, 182, 116, 230, 213, 25, 191, 225, 8, 96, 169, 201, 6, 210, 216, 20, 37, 87, 169, 25, 229, 31, 102, 12, 163, 197, 145, 223, 161, 15, 96, 91, 173, 101, 141, 28, 97, 13, 6, 248, 53, 77, 147, 96, 34, 205, 203, 94, 189, 108, 160, 168, 12, 35, 153, 73, 65, 51, 104, 45, 209, 179, 223, 221, 24, 244, 73, 231, 38, 90, 54, 251, 155, 125, 209, 78, 155, 79, 64, 78, 107, 150, 190, 77, 4, 243, 218, 247, 19, 0, 166, 215, 81, 176, 236, 129, 198, 105, 132, 247, 88, 227, 64, 104, 31, 24, 162, 246, 105, 117, 237, 239, 121, 32, 108, 120, 193, 240, 224, 27, 130, 172, 224, 216, 143, 46, 179, 180, 90, 165, 71, 199, 24, 125, 0, 181, 56, 187, 33, 111, 72, 7, 186, 49, 175, 194, 159, 172, 205, 242, 247, 235, 102, 101, 14, 127, 128, 63, 118, 74, 135, 157, 72, 71, 80, 104, 18, 237, 225, 4, 105, 228, 53, 99, 161, 163, 123, 2, 224, 88, 206, 0, 220, 198, 154, 45, 44, 226, 23, 133, 68, 112, 218, 225, 142, 46, 1, 42, 167, 217, 80, 93, 252, 56, 47, 1, 31, 183, 106, 77, 35, 147, 253, 237, 186, 126, 226, 45, 69, 73, 155, 222, 210, 182, 42, 67, 235, 158, 38, 107, 209, 115, 243, 102, 160, 130, 40, 146, 145, 23, 153, 59, 162, 21, 151, 178, 70, 220, 109, 13, 71, 82, 117, 6, 167, 19, 139, 25, 111, 74, 69, 253, 207, 72, 190, 160, 19, 52, 149, 155, 135, 129, 195, 179, 240, 253, 219, 134, 177, 75, 164, 122, 98, 10, 142, 176, 217, 232, 57, 157, 129, 16, 123, 35, 33, 149, 119, 241, 78, 154, 222, 239, 255, 112, 239, 202, 209, 190, 219, 107, 41, 203, 103, 57, 213, 74, 202, 43, 71, 104, 44, 139, 153, 128, 98, 188, 232, 11, 160, 157, 36, 133, 147, 75, 12, 237, 229, 169, 175, 50, 246, 161, 26, 141, 158, 44, 196, 148, 45, 144, 11, 249, 54, 179, 225, 89, 178, 154, 23, 196, 191, 136, 128, 130, 69, 75, 78, 85, 226, 211, 59, 140, 123, 8, 230, 223, 109, 74, 116, 56, 171, 142, 56, 49, 170, 193, 9, 46, 177, 96, 49, 45, 102, 221, 233, 238, 110, 200, 35, 102, 110, 117, 255, 46, 113, 96, 182, 134, 70, 168, 113, 254, 247, 133, 104, 126, 164, 226, 1, 145, 119, 144, 147, 124, 9, 22, 165, 46, 30, 87, 220, 189, 236, 67, 153, 2, 138, 75, 95, 152, 185, 195, 5, 241, 250, 168, 139, 208, 3, 239, 126, 60, 116, 110, 215, 15, 50, 64, 80, 35, 157, 2, 64, 240, 222, 153, 250, 247, 153, 125, 203, 229, 240, 61, 230, 81, 83, 75, 32, 112, 242, 203, 100, 202, 233, 213, 206, 60, 143, 249, 45, 63, 147, 74, 141, 51, 244, 231, 254, 71, 71, 200, 163, 59, 128, 155, 141, 179, 138, 92, 44, 183, 139, 211, 2, 248, 112, 185, 4, 36, 128, 93, 89, 59, 10, 71, 27, 48, 142, 120, 91, 229, 130, 244, 171, 196, 3, 149, 47, 230, 44, 7, 253, 37, 43, 91, 237, 42, 226, 146, 229, 151, 233, 240, 228, 209, 59, 102, 44, 60, 224, 33, 117, 146, 33, 29, 200, 163, 54, 57, 63, 52, 113, 96, 29, 56, 89, 105, 169, 131, 148, 204, 47, 94, 68, 203, 180, 237, 241, 1, 212, 118, 110, 103, 134, 216, 242, 14, 76, 173, 131, 86, 149, 44, 173, 12, 177, 244, 193, 83, 50, 7, 121, 127, 216, 74, 121, 172, 58, 96, 27, 74, 43, 61, 186, 39, 180, 251, 15, 144, 10, 165, 119, 166, 219, 209, 105, 192, 116, 77, 204, 177, 245, 0, 123, 47, 249, 138, 86, 61, 167, 13, 65, 191, 193, 241, 122, 60, 121, 87, 182, 151, 216, 38, 223, 171, 154, 170, 183, 189, 220, 230, 196, 216, 45, 218, 193, 79, 237, 139, 99, 143, 81, 204, 251, 11, 238, 153, 98, 76, 124, 239, 135, 40, 235, 60, 34, 87, 47, 207, 113, 152, 43, 1, 144, 215, 132, 24, 103, 70, 42, 239, 16, 180, 254, 175, 204, 188, 144, 152, 85, 7, 146, 77, 249, 91, 154, 193, 229, 77, 62, 195, 196, 17, 69, 109, 248, 95, 38, 120, 79, 170, 189, 22, 18, 94, 63, 234, 150, 176, 233, 150, 47, 18, 190, 246, 164, 195, 219, 30, 10, 46, 130, 63, 108, 34, 98, 215, 93, 47, 187, 225, 55, 173, 179, 147, 186, 16, 34, 103, 56, 90, 112, 166, 167, 225, 167, 217, 63, 187, 218, 206, 100, 23, 35, 32, 125, 187, 149, 121, 221, 171, 79, 147, 99, 213, 110, 11, 203, 61, 226, 102, 56, 91, 16, 178, 23, 0, 70, 187, 42, 166, 235, 155, 126, 165, 212, 10, 105, 100, 241, 195, 203, 22, 149, 116, 25, 155, 245, 134, 61, 112, 129, 199, 231, 139, 81, 164, 232, 72, 7, 241, 111, 16, 28, 185, 128, 111, 69, 254, 165, 249, 166, 138, 28, 237, 46, 204, 7, 203, 152, 249, 163, 221, 8, 224, 242, 183, 197, 87, 184, 178, 183, 51, 66, 35, 240, 235, 195, 7, 25, 203, 210, 135, 181, 229, 38, 158, 143, 160, 247, 232, 74, 61, 148, 222, 130, 255, 171, 172, 138, 237, 251, 156, 2, 74, 125, 134, 77, 106, 57, 27, 96, 193, 143, 204, 228, 87, 85, 56, 51, 139, 147, 113, 223, 249, 44, 6, 60, 231, 82, 72, 56, 38, 152, 217, 123, 174, 190, 191, 189, 73, 238, 214, 16, 0, 36, 110, 130, 139, 0, 59, 231, 200, 55, 140, 75, 104, 158, 196, 229, 114, 255, 138, 219, 51, 211, 110, 18, 120, 20, 153, 23, 190, 29, 52, 88, 175, 71, 53, 202, 138, 52, 26, 84, 237, 38, 194, 135, 168, 189, 23, 221, 20, 230, 228, 228, 158, 198, 14, 190, 116, 242, 138, 233, 34, 130, 13, 249, 249, 175, 19, 213, 43, 7, 212, 181, 219, 188, 105, 145, 0, 113, 234, 108, 22, 255, 58, 101, 173, 175, 51, 132, 136, 141, 213, 77, 53, 186, 250, 182, 19, 133, 28, 244, 59, 195, 195, 146, 46, 235, 126, 196, 59, 72, 210, 190, 85, 131, 24, 79, 186, 50, 154, 170, 156, 65, 89, 208, 197, 126, 100, 88, 9, 18, 207, 242, 238, 33, 243, 195, 59, 231, 25, 143, 245, 125, 165, 34, 239, 9, 75, 45, 240, 122, 55, 31, 183, 123, 46, 134, 221, 157, 242, 214, 13, 205, 161, 52, 129, 180, 92, 163, 207, 80, 166, 151, 30, 48, 210, 196, 191, 225, 121, 185, 170, 217, 131, 5, 241, 5, 195, 177, 22, 157, 180, 87, 203, 247, 8, 85, 200, 77, 149, 110, 163, 249, 251, 163, 236, 184, 123, 179, 85, 241, 50, 25, 224, 103, 175, 46, 22, 177, 242, 66, 151, 103, 164, 203, 133, 25, 176, 219, 208, 43, 119, 26, 148, 151, 71, 248, 229, 189, 167, 241, 167, 113, 159, 93, 225, 37, 206, 169, 88, 205, 150, 237, 244, 11, 251, 216, 41, 49, 89, 235, 139, 50, 209, 9, 158, 118, 134, 245, 19, 107, 243, 26, 179, 212, 249, 83, 11, 75, 69, 175, 55, 164, 181, 151, 76, 92, 73, 245, 105, 75, 105, 72, 247, 81, 237, 112, 152, 24, 55, 108, 76, 216, 8, 15, 90, 113, 210, 68, 248, 80, 57, 111, 148, 150, 212, 84, 245, 137, 107, 85, 73, 149, 164, 5, 225, 212, 81, 111, 39, 218, 236, 176, 247, 149, 56, 214, 86, 23, 38, 160, 122, 34, 71, 121, 173, 228, 27, 163, 109, 198, 205, 235, 235, 171, 249, 55, 137, 117, 83, 242, 150, 52, 48, 73, 100, 0, 238, 221, 152, 143, 48, 19, 28, 115, 95, 245, 199, 160, 61, 117, 233, 55, 44, 146, 95, 116, 35, 65, 65, 175, 217, 76, 203, 173, 114, 158, 63, 46, 171, 215, 39, 80, 90, 54, 91, 43, 242, 110, 45, 28, 0, 125, 8, 214, 152, 52, 95, 224, 49, 87, 130, 9, 226, 164, 190, 9, 175, 143, 132, 165, 149, 128, 240, 168, 224, 0, 254, 212, 136, 88, 241, 232, 163, 160, 39, 228, 204, 157, 230, 130, 209, 150, 222, 160, 211, 238, 66, 163, 151, 68, 74, 158, 143, 100, 93, 158, 186, 144, 111, 91, 191, 77, 249, 34, 162, 47, 122, 81, 164, 230, 47, 67, 149, 229, 110, 221, 83, 0, 65, 253, 195, 3, 203, 209, 244, 34, 241, 216, 0, 217, 163, 67, 152, 128, 192, 145, 29, 75, 23, 169, 203, 150, 149, 242, 140, 203, 123, 224, 216, 81, 46, 107, 38, 198, 25, 148, 243, 130, 82, 68, 96, 247, 157, 227, 179, 199, 204, 15, 81, 205, 109, 221, 145, 138, 252, 32, 51, 175, 174, 114, 195, 245, 139, 208, 29, 179, 2, 181, 185, 73, 199, 65, 16, 120, 30, 45, 109, 190, 49, 34, 129, 39, 55, 139, 195, 27, 148, 5, 201, 175, 241, 151, 201, 193, 215, 80, 5, 78, 179, 191, 131, 91, 8, 237, 122, 188, 135, 47, 78, 9, 47, 28, 254, 217, 14, 87, 239, 7, 221, 249, 132, 102, 116, 254, 76, 226, 146, 171, 153, 116, 77, 182, 174, 50, 241, 146, 34, 116, 137, 216, 25, 167, 106, 192, 64, 118, 102, 207, 189, 125, 220, 173, 165, 227, 184, 137, 20, 211, 86, 26, 213, 195, 9, 134, 255, 95, 118, 88, 28, 174, 44, 20, 51, 59, 211, 139, 114, 182, 85, 184, 170, 61, 92, 59, 126, 201, 127, 255, 197, 127, 173, 10, 50, 225, 169, 36, 107, 119, 94, 184, 220, 129, 29, 110, 185, 87, 165, 115, 87, 147, 151, 143, 211, 229, 114, 18, 119, 245, 201, 155, 0, 211, 11, 51, 238, 142, 65, 14, 99, 179, 185, 209, 166, 163, 254, 239, 34, 15, 197, 199, 252, 37, 211, 127, 248, 198, 92, 239, 117, 204, 250, 153, 49, 102, 43, 20, 242, 124, 117, 26, 91, 145, 140, 143, 252, 210, 20, 84, 205, 215, 57, 106, 63, 243, 226, 3, 28, 37, 143, 251, 245, 23, 192, 244, 4, 234, 222, 67, 50, 110, 148, 245, 39, 32, 147, 8, 44, 14, 179, 203, 94, 15, 209, 48, 34, 117, 254, 121, 124, 172, 236, 173, 227, 223, 153, 60, 12, 14, 246, 23, 120, 54, 249, 106, 104, 216, 200, 77, 67, 246, 218, 6, 119, 38, 55, 163, 92, 113, 105, 92, 130, 203, 15, 69, 237, 255, 57, 113, 113, 87, 15, 67, 202, 233, 9, 212, 203, 66, 102, 127, 193, 186, 93, 166, 54, 86, 34, 246, 234, 201, 180, 85, 199, 22, 25, 218, 41, 201, 222, 241, 198, 68, 154, 94, 186, 18, 93, 174, 17, 94, 113, 152, 19, 208, 105, 7, 154, 236, 84, 105, 0, 251, 152, 188, 45, 49, 129, 15, 164, 157, 233, 172, 162, 186, 48, 238, 224, 131, 88, 172, 150, 102, 193, 209, 70, 129, 60, 152, 234, 249, 139, 255, 176, 2, 159, 19, 200, 158, 150, 115, 121, 60, 231, 12, 77, 10, 85, 62, 235, 66, 38, 87, 41, 107, 149, 155, 242, 233, 33, 52, 125, 88, 10, 225, 16, 188, 175, 0, 184, 110, 105, 18, 170, 184, 168, 90, 8, 112, 16, 187, 186, 87, 147, 159, 133, 120, 183, 201, 78, 22, 238, 144, 204, 103, 92, 251, 230, 248, 251, 55, 47, 123, 31, 227, 101, 175, 201, 83, 99, 238, 106, 181, 184, 221, 231, 188, 115, 0, 26, 107, 203, 53, 180, 159, 216, 194, 238, 198, 90, 244, 80, 194, 172, 51, 199, 150, 111, 178, 190, 77, 2, 72, 166, 9, 239, 124, 82, 22, 251, 249, 75, 180, 198, 180, 159, 203, 72, 123, 192, 207, 0, 245, 18, 198, 61, 20, 246, 22, 179, 116, 61, 93, 76, 200, 16, 26, 243, 27, 115, 127, 235, 191, 221, 53, 254, 9, 89, 59, 173, 35, 101, 182, 113, 44, 40, 173, 97, 246, 90, 85, 154, 205, 44, 145, 61, 110, 214, 84, 137, 163, 130, 177, 100, 220, 235, 40, 211, 40, 75, 198, 153, 132, 237, 226, 60, 48, 96, 16, 136, 205, 98, 42, 63, 60, 135, 120, 187, 224, 182, 228, 196, 221, 205, 45, 214, 54, 224, 214, 31, 198, 188, 45, 191, 155, 10, 82, 76, 71, 218, 134, 106, 127, 131, 189, 140, 21, 107, 34, 207, 232, 50, 11, 216, 240, 254, 207, 195, 75, 29, 31, 83, 124, 35, 212, 74, 224, 29, 233, 52, 137, 96, 21, 47, 93, 70, 58, 217, 249, 151, 184, 230, 166, 9, 176, 204, 183, 217, 238, 237, 224, 42, 51, 103, 82, 10, 255, 43, 237, 98, 229, 91, 21, 142, 170, 195, 166, 250, 200, 73, 120, 48, 57, 5, 32, 223, 118, 68, 206, 158, 22, 253, 156, 70, 185, 248, 155, 81, 152, 98, 41, 85, 93, 47, 54, 212, 56, 93, 64, 142, 61, 127, 108, 143, 218, 50, 105, 62, 40, 124, 130, 246, 58, 247, 5, 12, 184, 205, 116, 73, 50, 216, 77, 40, 172, 162, 172, 116, 92, 255, 74, 38, 220, 229, 107, 154, 168, 5, 233, 114, 30, 194, 17, 219, 141, 175, 146, 30, 241, 189, 233, 47, 201, 143, 117, 193, 183, 188, 125, 247, 76, 101, 212, 232, 11, 100, 203, 240, 79, 89, 209, 148, 184, 175, 196, 246, 48, 251, 173, 207, 170, 91, 9, 123, 3, 51, 197, 141, 190, 116, 248, 173, 70, 55, 60, 245, 30, 186, 14, 166, 230, 108, 90, 18, 17, 179, 58, 32, 223, 222, 122, 72, 126, 173, 248, 172, 180, 74, 131, 33, 81, 240, 42, 13, 38, 239, 243, 206, 62, 150, 169, 221, 94, 24, 138, 64, 159, 90, 235, 196, 85, 79, 199, 228, 2, 225, 143, 83, 4, 186, 100, 64, 175, 232, 159, 225, 223, 188, 152, 33, 52, 105, 143, 28, 245, 70, 11, 22, 135, 111, 106, 230, 151, 29, 191, 228, 187, 168, 134, 77, 55, 253, 62, 107, 47, 189, 141, 45, 79, 162, 195, 60, 6, 7, 141, 168, 242, 230, 218, 57, 70, 235, 138, 244, 151, 130, 216, 172, 29, 89, 131, 12, 209, 238, 156, 255, 173, 176, 188, 240, 160, 171, 96, 106, 7, 119, 185, 108, 58, 84, 191, 24, 97, 73, 32, 69, 45, 75, 42, 0, 171, 62, 209, 211, 253, 36, 28, 59, 155, 206, 75, 217, 233, 49, 92, 133, 136, 206, 37, 6, 231, 22, 169, 238, 9, 50, 203, 78, 29, 192, 252, 139, 220, 120, 132, 160, 1, 199, 90, 228, 188, 34, 180, 57, 191, 21, 172, 9, 171, 131, 130, 166, 161, 115, 189, 91, 253, 193, 35, 3, 103, 226, 235, 200, 139, 136, 127, 148, 163, 49, 11, 252, 77, 211, 33, 70, 0, 126, 234, 228, 98, 90, 18, 196, 146, 92, 138, 39, 85, 251, 184, 41, 64, 182, 32, 221, 48, 45, 177, 144, 220, 209, 246, 31, 180, 23, 164, 211, 134, 243, 130, 244, 29, 14, 33, 85, 46, 108, 21, 101, 32, 90, 109, 131, 124, 151, 243, 184, 125, 251, 143, 207, 235, 212, 183, 101, 209, 122, 70, 210, 215, 132, 173, 189, 209, 3, 171, 227, 53, 155, 105, 157, 232, 106, 76, 63, 132, 46, 10, 152, 201, 4, 95, 142, 135, 11, 62, 149, 105, 199, 113, 218, 40, 205, 69, 83, 126, 180, 250, 9, 119, 124, 198, 19, 114, 120, 104, 195, 211, 142, 53, 203, 9, 137, 216, 196, 140, 219, 231, 29, 235, 23, 0, 76, 84, 174, 204, 20, 237, 85, 53, 22, 40, 249, 228, 164, 172, 124, 130, 227, 26, 247, 105, 173, 172, 83, 65, 242, 193, 181, 163, 81, 94, 74, 6, 243, 69, 57, 41, 164, 237, 204, 229, 121, 186, 58, 4, 70, 204, 236, 6, 221, 182, 2, 185, 53, 71, 118, 28, 221, 3, 192, 140, 96, 211, 77, 82, 182, 176, 134, 87, 114, 32, 234, 154, 10, 217, 23, 90, 223, 194, 41, 113, 160, 248, 58, 61, 157, 218, 212, 105, 113, 1, 44, 84, 93, 212, 179, 252, 151, 251, 105, 68, 62, 235, 1, 140, 42, 217, 40, 215, 30, 88, 143, 38, 77, 245, 197, 56, 136, 160, 201, 228, 52, 144, 163, 135, 217, 40, 28, 101, 159, 135, 61, 223, 58, 147, 175, 225, 51, 65, 254, 136, 145, 206, 178, 248, 232, 40, 62, 42, 146, 44, 171, 222, 182, 37, 118, 215, 92, 123, 180, 117, 238, 213, 40, 102, 128, 211, 46, 236, 118, 62, 109, 46, 155, 28, 219, 233, 173, 11, 130, 212, 55, 25, 75, 252, 143, 140, 226, 225, 1, 181, 244, 237, 231, 236, 204, 179, 165, 92, 122, 194, 22, 154, 111, 137, 21, 179, 4, 48, 25, 213, 83, 213, 166, 213, 111, 0, 23, 222, 106, 74, 66, 163, 213, 124, 212, 155, 191, 99, 114, 10, 24, 69, 96, 239, 164, 219, 213, 167, 215, 54, 26, 40, 128, 227, 236, 17, 163, 249, 137, 251, 100, 112, 178, 125, 181, 10, 111, 189, 170, 46, 48, 237, 163, 118, 81, 26, 123, 237, 151, 214, 35, 162, 11, 24, 249, 9, 34, 67, 162, 252, 3, 250, 246, 76, 156, 217, 194, 99, 127, 113, 111, 253, 174, 119, 115, 20, 166, 208, 61, 57, 233, 127, 240, 126, 145, 188, 195, 77, 170, 200, 28, 247, 223, 119, 110, 131, 3, 215, 241, 115, 69, 167, 39, 4, 78, 80, 171, 114, 184, 223, 232, 90, 38, 84, 224, 3, 55, 22, 34, 85, 249, 167, 77, 250, 231, 61, 97, 111, 109, 223, 43, 87, 241, 33, 231, 209, 2, 238, 38, 189, 2, 202, 83, 161, 91, 209, 103, 86, 28, 206, 76, 250, 182, 129, 21, 120, 165, 225, 24, 140, 128, 79, 105, 219, 162, 254, 165, 27, 39, 44, 24, 221, 155, 139, 175, 151, 8, 124, 115, 43, 94, 115, 30, 121, 62, 168, 186, 173, 172, 88, 206, 25, 231, 154, 192, 151, 227, 220, 50, 101, 205, 217, 98, 150, 3, 145, 69, 23, 71, 25, 175, 112, 62, 149, 21, 117, 168, 173, 198, 58, 137, 142, 28, 242, 123, 158, 16, 46, 73, 56, 236, 127, 113, 138, 157, 125, 110, 124, 72, 68, 208, 176, 107, 228, 208, 198, 191, 228, 23, 84, 35, 186, 140, 95, 80, 219, 5, 158, 171, 44, 250, 166, 214, 211, 121, 254, 158, 236, 164, 155, 78, 45, 185, 231, 60, 5, 223, 130, 106, 219, 204, 181, 251, 41, 138, 95, 182, 228, 160, 178, 215, 168, 146, 105, 191, 116, 191, 159, 52, 243, 254, 168, 232, 226, 194, 64, 247, 177, 94, 131, 181, 245, 77, 244, 1, 111, 136, 18, 255, 40, 55, 82, 111, 185, 161, 27, 117, 114, 208, 116, 136, 72, 193, 198, 215, 28, 16, 112, 177, 96, 132, 181, 168, 25, 224, 3, 216, 95, 140, 234, 246, 8, 230, 129, 82, 224, 51, 204, 205, 253, 49, 25, 133, 140, 158, 153, 4, 135, 76, 164, 191, 147, 32, 87, 176, 14, 153, 43, 77, 167, 241, 187, 4, 78, 10, 210, 215, 102, 118, 42, 10, 217, 188, 22, 30, 80, 153, 48, 244, 93, 157, 138, 206, 87, 30, 73, 183, 236, 168, 31, 134, 122, 149, 58, 189, 190, 58, 249, 80, 86, 99, 209, 178, 160, 252, 184, 4, 140, 244, 78, 79, 11, 128, 121, 15, 86, 8, 118, 125, 3, 6, 14, 122, 134, 184, 250, 74, 58, 69, 189, 138, 58, 96, 96, 228, 83, 174, 51, 7, 78, 60, 29, 192, 165, 27, 71, 126, 243, 213, 120, 180, 54, 174, 50, 227, 208, 51, 104, 139, 9, 2, 206, 24, 76, 8, 234, 254, 95, 101, 94, 224, 195, 197, 200, 184, 29, 92, 147, 131, 150, 63, 143, 177, 104, 249, 55, 137, 73, 60, 184, 171, 226, 149, 108, 77, 65, 99, 77, 125, 133, 235, 208, 158, 102, 96, 211, 139, 116, 73, 236, 205, 153, 162, 136, 173, 155, 95, 91, 50, 97, 68, 65, 24, 152, 62, 239, 141, 248, 56, 69, 120, 60, 51, 140, 237, 223, 67, 33, 19, 211, 30, 113, 22, 250, 25, 62, 212, 5, 185, 117, 104, 90, 4, 30, 221, 247, 20, 166, 149, 124, 191, 189, 43, 118, 207, 208, 18, 93, 8, 156, 113, 100, 16, 159, 210, 232, 98, 22, 192, 146, 149, 221, 40, 227, 179, 44, 212, 64, 164, 38, 115, 62, 11, 64, 157, 53, 28, 238, 74, 175, 82, 105, 11, 30, 251, 47, 148, 101, 60, 251, 180, 252, 10, 94, 63, 89, 17, 65, 232, 160, 91, 54, 199, 213, 118, 132, 49, 198, 30, 224, 187, 180, 225, 215, 247, 146, 174, 255, 231, 42, 173, 149, 34, 181, 24, 8, 51, 223, 191, 217, 116, 146, 233, 47, 22, 98, 201, 86, 23, 146, 120, 92, 119, 107, 199, 217, 25, 53, 135, 249, 75, 130, 45, 228, 226, 217, 38, 55, 252, 207, 242, 136, 69, 45, 249, 183, 1, 140, 158, 228, 253, 125, 30, 224, 197, 233, 121, 98, 118, 100, 90, 122, 189, 106, 198, 127, 46, 116, 56, 85, 57, 62, 198, 16, 224, 49, 63, 203, 198, 223, 22, 100, 25, 212, 159, 169, 102, 224, 181, 173, 160, 91, 63, 68, 80, 239, 19, 140, 68, 237, 225, 225, 74, 180, 15, 14, 254, 10, 170, 17, 49, 113, 6, 28, 223, 135, 142, 53, 108, 108, 179, 190, 18, 2, 153, 7, 144, 232, 241, 136, 137, 219, 78, 107, 111, 35, 38, 219, 31, 201, 74, 63, 32, 56, 106, 249, 20, 238, 63, 15, 231, 177, 51, 177, 34, 217, 116, 85, 127, 196, 53, 255, 180, 200, 16, 87, 127, 15, 131, 31, 205, 72, 151, 0, 197, 130, 122, 107, 51, 112, 68, 145, 9, 229, 108, 175, 61, 166, 219, 113, 172, 38, 95, 163, 179, 131, 242, 217, 216, 46, 140, 1, 26, 109, 34, 203, 64, 108, 208, 255, 17, 25, 114, 243, 8, 84, 207, 189, 24, 142, 234, 89, 51, 251, 81, 121, 158, 254, 204, 114, 87, 169, 182, 187, 121, 2, 131, 150, 220, 75, 201, 3, 138, 92, 220, 80, 72, 21, 91, 111, 210, 123, 133, 50, 31, 194, 143, 159, 64, 118, 158, 58, 216, 62, 43, 59, 123, 196, 211, 25, 93, 101, 83, 248, 22, 40, 113, 249, 50, 150, 33, 189, 186, 76, 254, 238, 198, 134, 191, 88, 104, 77, 34, 187, 33, 34, 25, 199, 58, 249, 174, 59, 168, 193, 157, 225, 122, 177, 30, 202, 192, 136, 171, 214, 229, 29, 101, 23, 213, 94, 184, 16, 17, 111, 136, 218, 182, 48, 254, 222, 87, 100, 169, 17, 123, 153, 180, 184, 171, 99, 137, 72, 199, 194, 88, 108, 36, 106, 40, 129, 144, 219, 154, 213, 224, 48, 204, 82, 134, 216, 13, 26, 101, 209, 161, 235, 61, 49, 111, 149, 215, 146, 157, 255, 218, 147, 4, 26, 70, 34, 36, 36, 236, 243, 251, 91, 216, 105, 77, 43, 202, 232, 78, 119, 48, 191, 119, 158, 188, 41, 205, 15, 202, 18, 154, 173, 252, 194, 36, 233, 90, 89, 175, 27, 3, 17, 151, 206, 71, 196, 136, 39, 101, 42, 238, 210, 251, 115, 208, 212, 15, 100, 36, 191, 170, 234, 64, 20, 102, 83, 119, 82, 122, 111, 92, 20, 194, 79, 148, 171, 109, 212, 24, 159, 248, 230, 255, 200, 4, 47, 110, 254, 44, 246, 83, 219, 246, 36, 126, 97, 254, 186, 51, 167, 213, 197, 218, 195, 209, 94, 73, 211, 225, 124, 140, 227, 176, 65, 159, 73, 101, 12, 7, 239, 19, 237, 239, 54, 37, 81, 53, 222, 182, 174, 89, 222, 221, 58, 114, 199, 151, 122, 150, 94, 19, 119, 13, 15, 54, 185, 78, 37, 1, 222, 182, 153, 125, 84, 15, 79, 68, 229, 117, 157, 55, 52, 208, 15, 67, 22, 177, 35, 34, 224, 29, 220, 8, 47, 116, 86, 57, 57, 9, 165, 124, 96, 165, 100, 147, 190, 25, 174, 71, 201, 210, 250, 147, 68, 68, 97, 129, 97, 53, 62, 199, 217, 205, 20, 188, 206, 42, 64, 145, 158, 214, 210, 158, 10, 100, 44, 154, 176, 31, 200, 127, 138, 15, 8, 90, 96, 48, 136, 16, 132, 97, 167, 161, 69, 245, 59, 75, 237, 234, 255, 55, 184, 152, 90, 148, 164, 252, 37, 173, 166, 170, 235, 2, 61, 222, 198, 162, 193, 97, 242, 117, 108, 242, 146, 151, 232, 139, 95, 75, 135, 218, 169, 175, 221, 142, 170, 215, 21, 67, 32, 148, 238, 241, 226, 74, 159, 122, 208, 109, 175, 107, 143, 155, 78, 169, 79, 199, 158, 2, 220, 204, 42, 240, 12, 111, 79, 154, 45, 233, 99, 55, 138, 59, 175, 122, 30, 12, 208, 237, 245, 120, 39, 236, 28, 10, 208, 32, 246, 93, 171, 7, 64, 164, 11, 124, 168, 130, 152, 45, 150, 153, 47, 163, 15, 53, 93, 147, 239, 65, 48, 45, 202, 26, 21, 225, 169, 6, 87, 89, 223, 159, 32, 54, 192, 186, 65, 132, 25, 34, 117, 120, 66, 200, 219, 113, 212, 30, 120, 95, 107, 189, 129, 124, 26, 202, 183, 238, 172, 139, 166, 64, 144, 180, 44, 206, 47, 46, 42, 230, 109, 98, 28, 112, 95, 139, 69, 177, 69, 124, 128, 200, 152, 219, 111, 116, 167, 42, 232, 204, 89, 86, 158, 84, 25, 100, 185, 108, 11, 213, 207, 99, 166, 200, 156, 116, 7, 14, 60, 102, 10, 127, 51, 73, 84, 66, 76, 52, 136, 150, 106, 223, 173, 226, 75, 177, 173, 199, 221, 61, 177, 30, 139, 172, 116, 137, 47, 127, 53, 148, 78, 22, 241, 197, 193, 56, 165, 108, 192, 36, 49, 27, 232, 199, 41, 7, 152, 20, 211, 132, 68, 16, 123, 172, 220, 38, 202, 114, 12, 115, 213, 98, 205, 79, 18, 14, 130, 114, 6, 173, 134, 15, 251, 212, 113, 237, 94, 184, 98, 237, 124, 100, 76, 172, 180, 53, 215, 20, 42, 145, 157, 16, 172, 115, 6, 210, 227, 180, 74, 24, 87, 225, 64, 129, 60, 143, 255, 147, 231, 226, 30, 152, 177, 17, 12, 252, 146, 25, 95, 138, 117, 155, 192, 213, 75, 249, 235, 32, 108, 74, 107, 124, 139, 57, 191, 161, 33, 244, 125, 55, 62, 89, 11, 21, 21, 36, 38, 90, 85, 12, 80, 185, 80, 104, 63, 26, 7, 106, 52, 142, 104, 183, 97, 153, 155, 130, 172, 4, 201, 188, 169, 205, 207, 244, 220, 154, 254, 195, 185, 106, 138, 115, 225, 10, 170, 61, 213, 170, 242, 13, 239, 41, 67, 239, 61, 117, 229, 148, 117, 163, 80, 10, 5, 1, 116, 202, 202, 134, 42, 29, 66, 44, 247, 109, 243, 172, 16, 64, 147, 182, 139, 49, 25, 152, 242, 245, 233, 85, 215, 2, 77, 215, 147, 207, 137, 3, 181, 192, 22, 182, 4, 141, 81, 106, 69, 16, 29, 228, 51, 67, 178, 192, 135, 14, 183, 220, 93, 187, 94, 85, 95, 181, 158, 220, 230, 115, 241, 110, 189, 34, 168, 204, 229, 61, 101, 155, 180, 243, 99, 180, 87, 51, 213, 156, 157, 56, 88, 125, 159, 104, 6, 231, 143, 145, 118, 33, 149, 244, 157, 253, 20, 129, 10, 73, 157, 32, 162, 83, 181, 78, 89, 96, 175, 99, 212, 248, 8, 175, 4, 51, 167, 24, 146, 187, 54, 76, 188, 166, 197, 180, 111, 14, 209, 69, 33, 234, 196, 109, 190, 204, 248, 200, 207, 87, 63, 145, 81, 153, 11, 13, 19, 246, 17, 61, 212, 188, 180, 200, 166, 97, 176, 253, 70, 25, 14, 60, 93, 166, 148, 247, 223, 168, 13, 166, 129, 155, 7, 50, 230, 110, 86, 190, 180, 11, 62, 135, 145, 10, 246, 170, 134, 245, 83, 206, 53, 87, 6, 92, 78, 100, 166, 135, 218, 182, 182, 231, 125, 43, 98, 88, 2, 120, 121, 155, 223, 183, 1, 221, 92, 196, 69, 148, 1, 222, 56, 58, 5, 184, 190, 159, 154, 38, 72, 224, 208, 144, 223, 178, 217, 120, 10, 104, 199, 43, 62, 191, 192, 42, 168, 104, 71, 108, 68, 169, 100, 10, 83, 114, 35, 233, 230, 240, 160, 73, 100, 242, 51, 130, 233, 21, 112, 224, 99, 15, 80, 57, 3, 62, 18, 101, 89, 136, 104, 72, 199, 179, 8, 200, 41, 165, 41, 137, 186, 80, 118, 243, 63, 253, 185, 173, 91, 236, 39, 52, 111, 32, 18, 188, 36, 189, 241, 189, 158, 209, 76, 241, 130, 168, 101, 0, 55, 189, 0, 115, 143, 82, 175, 81, 233, 93, 217, 34, 112, 205, 73, 17, 27, 232, 19, 132, 98, 139, 33, 73, 154, 89, 235, 183, 58, 178, 62, 123, 9, 79, 47, 100, 64, 84, 171, 166, 74, 27, 44, 12, 72, 128, 13, 145, 166, 98, 151, 82, 176, 23, 165, 75, 75, 130, 235, 120, 208, 154, 230, 39, 210, 73, 23, 215, 13, 137, 128, 93, 163, 192, 39, 152, 180, 109, 106, 95, 137, 241, 83, 68, 39, 66, 165, 27, 179, 165, 204, 1, 151, 218, 206, 8, 38, 161, 128, 159, 37, 120, 46, 4, 104, 233, 100, 182, 65, 215, 216, 134, 31, 243, 45, 111, 248, 47, 159, 77, 47, 115, 187, 152, 88, 91, 203, 42, 74, 79, 133, 115, 86, 218, 99, 26, 248, 13, 99, 246, 0, 152, 30, 230, 235, 254, 214, 169, 158, 44, 226, 201, 30, 158, 120, 158, 220, 55, 161, 24, 123, 46, 123, 165, 153, 236, 76, 51, 8, 177, 179, 145, 123, 119, 175, 55, 75, 101, 12, 176, 180, 114, 231, 147, 53, 64, 182, 201, 40, 51, 221, 76, 236, 81, 217, 153, 29, 83, 245, 9, 88, 152, 124, 134, 254, 7, 27, 69, 88, 221, 48, 244, 238, 19, 179, 248, 11, 99, 240, 122, 225, 203, 124, 93, 205, 206, 81, 45, 94, 178, 114, 222, 155, 97, 169, 54, 229, 247, 90, 90, 145, 126, 70, 218, 147, 247, 238, 89, 234, 168, 130, 68, 11, 129, 117, 249, 8, 55, 34, 134, 10, 80, 205, 191, 10, 233, 97, 241, 235, 119, 66, 166, 118, 106, 192, 239, 0, 75, 220, 128, 84, 67, 188, 4, 238, 111, 196, 121, 40, 159, 147, 165, 251, 68, 54, 204, 140, 137, 61, 61, 192, 158, 149, 55, 247, 228, 39, 126, 15, 65, 44, 144, 175, 186, 227, 164, 146, 117, 67, 80, 212, 190, 102, 106, 17, 112, 185, 97, 4, 92, 191, 202, 41, 222, 221, 45, 177, 167, 39, 225, 20, 144, 25, 99, 149, 142, 108, 94, 67, 122, 5, 53, 236, 116, 94, 206, 217, 30, 225, 123, 86, 40, 81, 142, 93, 157, 99, 226, 158, 31, 176, 34, 209, 30, 72, 0, 149, 28, 228, 37, 61, 50, 139, 166, 133, 32, 212, 38, 80, 134, 192, 242, 144, 79, 33, 130, 19, 135, 113, 69, 168, 250, 38, 192, 14, 104, 180, 218, 43, 218, 94, 116, 68, 119, 127, 75, 155, 51, 242, 104, 26, 123, 93, 161, 216, 140, 34, 215, 229, 101, 210, 253, 235, 2, 162, 105, 235, 110, 20, 251, 72, 162, 61, 84, 45, 40, 154, 8, 109, 166, 193, 167, 198, 64, 252, 8, 245, 27, 30, 148, 58, 115, 158, 5, 225, 85, 247, 124, 153, 173, 181, 87, 204, 128, 134, 107, 203, 153, 235, 53, 55, 160, 111, 201, 155, 41, 9, 238, 98, 162, 63, 232, 99, 236, 158, 221, 231, 189, 175, 91, 181, 176, 240, 178, 27, 136, 97, 208, 224, 233, 178, 141, 51, 126, 33, 245, 83, 204, 64, 14, 190, 101, 156, 214, 11, 223, 80, 132, 114, 5, 60, 68, 123, 111, 55, 133, 203, 181, 168, 82, 117, 62, 206, 252, 73, 237, 54, 253, 51, 213, 67, 37, 37, 121, 88, 47, 176, 193, 70, 122, 238, 187, 216, 78, 35, 171, 90, 49, 65, 32, 197, 236, 160, 239, 225, 252, 120, 108, 188, 245, 42, 243, 119, 143, 18, 124, 243, 180, 15, 6, 222, 159, 246, 122, 236, 63, 48, 147, 166, 246, 160, 190, 22, 110, 84, 51, 172, 191, 218, 155, 63, 40, 119, 229, 18, 150, 20, 54, 69, 106, 12, 198, 47, 192, 216, 88, 116, 251, 205, 83, 56, 95, 150, 80, 243, 168, 145, 188, 246, 88, 3, 24, 231, 71, 171, 213, 173, 115, 157, 5, 63, 196, 220, 61, 173, 220, 145, 24, 23, 29, 166, 194, 86, 9, 2, 106, 135, 118, 133, 248, 182, 24, 71, 232, 212, 213, 18, 88, 211, 51, 2, 33, 138, 179, 227, 200, 151, 157, 24, 53, 138, 104, 67, 12, 170, 99, 24, 11, 144, 23, 92, 117, 212, 238, 216, 226, 33, 9, 81, 18, 203, 161, 45, 221, 44, 116, 17, 251, 219, 63, 151, 60, 37, 37, 222, 50, 80, 190, 255, 94, 56, 156, 23, 67, 25, 216, 150, 21, 229, 117, 154, 171, 255, 23, 142, 223, 82, 120, 13, 187, 61, 153, 41, 222, 33, 128, 27, 235, 30, 73, 135, 48, 21, 164, 72, 79, 114, 98, 169, 176, 18, 172, 61, 59, 205, 92, 187, 194, 207, 147, 83, 106, 207, 7, 21, 177, 178, 21, 96, 60, 143, 83, 222, 26, 180, 135, 48, 245, 102, 9, 175, 94, 86, 174, 224, 132, 207, 197, 131, 90, 2, 90, 30, 69, 104, 174, 23, 93, 55, 50, 184, 72, 13, 200, 92, 34, 72, 36, 73, 168, 116, 114, 241, 150, 131, 230, 161, 87, 192, 128, 176, 120, 126, 77, 145, 55, 62, 145, 121, 140, 36, 216, 35, 48, 120, 34, 105, 38, 0, 198, 23, 234, 74, 99, 181, 49, 251, 88, 131, 128, 245, 51, 255, 159, 176, 187, 156, 249, 31, 54, 43, 188, 33, 206, 0, 220, 89, 249, 252, 63, 7, 65, 55, 225, 219, 3, 119, 57, 98, 152, 20, 114, 25, 173, 215, 12, 40, 240, 85, 107, 235, 77, 19, 232, 28, 203, 148, 208, 171, 139, 184, 77, 150, 235, 253, 204, 132, 208, 86, 88, 219, 31, 131, 169, 185, 115, 123, 27, 35, 188, 3, 168, 245, 241, 203, 18, 33, 115, 173, 164, 230, 91, 223, 7, 171, 229, 73, 106, 211, 187, 146, 214, 107, 26, 252, 54, 93, 246, 206, 241, 82, 54, 190, 210, 4, 218, 69, 141, 137, 153, 245, 65, 112, 76, 15, 146, 196, 12, 199, 25, 10, 177, 251, 95, 4, 122, 113, 237, 25, 9, 42, 219, 116, 9, 123, 76, 22, 247, 22, 250, 243, 58, 212, 77, 37, 48, 226, 83, 73, 125, 49, 150, 6, 249, 38, 5, 53, 27, 199, 115, 230, 65, 92, 156, 153, 239, 251, 155, 204, 0, 121, 179, 183, 241, 166, 116, 37, 156, 5, 37, 117, 109, 140, 151, 172, 119, 136, 224, 223, 60, 131, 208, 231, 226, 162, 192, 41, 63, 54, 89, 156, 111, 57, 93, 165, 200, 248, 243, 128, 233, 157, 37, 1, 207, 193, 72, 237, 82, 192, 140, 28, 95, 195, 152, 12, 91, 146, 119, 179, 179, 233, 213, 81, 182, 109, 98, 9, 206, 28, 205, 167, 19, 27, 78, 116, 67, 143, 48, 215, 195, 127, 129, 212, 31, 253, 11, 132, 132, 35, 72, 121, 25, 17, 134, 224, 91, 88, 74, 89, 96, 158, 186, 27, 244, 87, 134, 57, 96, 32, 212, 216, 44, 17, 195, 93, 98, 237, 148, 111, 47, 191, 33, 209, 142, 135, 70, 29, 11, 167, 18, 248, 58, 63, 143, 214, 165, 113, 221, 203, 195, 241, 42, 151, 41, 245, 79, 229, 128, 209, 244, 139, 115, 13, 95, 224, 22, 94, 26, 38, 197, 179, 14, 235, 99, 235, 130, 149, 101, 161, 101, 148, 250, 43, 26, 185, 250, 26, 181, 46, 189, 44, 7, 179, 90, 65, 74, 3, 127, 207, 8, 230, 226, 151, 144, 212, 120, 21, 25, 30, 71, 212, 125, 122, 229, 18, 83, 89, 15, 5, 33, 230, 25, 152, 218, 155, 238, 233, 189, 178, 241, 193, 197, 168, 46, 233, 206, 85, 184, 52, 43, 135, 16, 31, 212, 133, 112, 57, 67, 238, 65, 208, 80, 143, 130, 126, 131, 110, 165, 93, 108, 240, 248, 201, 147, 51, 12, 184, 29, 61, 75, 137, 163, 105, 75, 44, 156, 49, 108, 90, 174, 186, 13, 7, 212, 62, 250, 132, 39, 54, 227, 156, 135, 154, 153, 29, 83, 52, 130, 249, 36, 155, 219, 235, 195, 59, 180, 44, 226, 141, 238, 39, 152, 4, 235, 213, 48, 222, 15, 52, 141, 93, 161, 183, 5, 119, 112, 27, 84, 124, 145, 73, 210, 233, 213, 163, 19, 110, 183, 133, 239, 41, 58, 227, 86, 173, 177, 184, 152, 53, 160, 219, 204, 85, 36, 176, 43, 77, 190, 59, 180, 64, 152, 85, 188, 151, 33, 7, 229, 231, 70, 215, 240, 169, 242, 81, 254, 154, 95, 37, 88, 34, 13, 70, 154, 41, 54, 195, 137, 182, 223, 188, 217, 209, 147, 120, 57, 167, 207, 173, 253, 31, 151, 111, 160, 25, 236, 114, 91, 59, 180, 206, 11, 143, 136, 170, 50, 222, 202, 142, 7, 252, 120, 142, 65, 92, 212, 59, 213, 136, 90, 172, 200, 170, 29, 67, 131, 153, 79, 124, 131, 79, 142, 238, 221, 47, 172, 14, 233, 222, 196, 212, 160, 16, 159, 245, 27, 230, 62, 15, 119, 233, 111, 116, 183, 105, 228, 180, 201, 101, 101, 96, 190, 10, 175, 84, 205, 233, 62, 112, 191, 158, 45, 77, 253, 175, 22, 183, 88, 89, 117, 62, 245, 76, 206, 220, 153, 215, 59, 253, 100, 240, 175, 71, 142, 102, 103, 58, 112, 70, 254, 230, 221, 255, 221, 16, 143, 76, 23, 9, 41, 216, 137, 253, 66, 135, 239, 21, 124, 155, 245, 131, 141, 236, 232, 133, 206, 200, 206, 100, 178, 38, 131, 4, 99, 46, 202, 3, 146, 165, 135, 216, 55, 86, 228, 36, 91, 240, 207, 228, 128, 19, 67, 49, 224, 56, 8, 184, 43, 88, 92, 197, 126, 224, 238, 181, 249, 241, 187, 3, 59, 95, 225, 4, 166, 136, 210, 241, 210, 107, 158, 138, 183, 49, 151, 205, 156, 117, 195, 209, 88, 83, 182, 93, 82, 4, 76, 168, 100, 117, 28, 218, 229, 27, 226, 88, 32, 132, 151, 209, 54, 240, 228, 122, 165, 148, 28, 118, 191, 60, 29, 195, 255, 153, 158, 134, 217, 169, 209, 213, 183, 167, 106, 196, 143, 47, 230, 64, 42, 183, 115, 46, 0, 154, 73, 250, 214, 118, 226, 154, 218, 27, 74, 79, 93, 142, 124, 21, 185, 2, 157, 165, 133, 24, 57, 170, 42, 127, 10, 124, 122, 231, 33, 236, 79, 179, 7, 169, 223, 30, 80, 249, 7, 55, 83, 89, 21, 106, 229, 47, 107, 55, 76, 125, 238, 214, 24, 121, 27, 45, 247, 75, 157, 81, 154, 104, 214, 7, 26, 212, 220, 200, 56, 158, 149, 219, 142, 149, 159, 115, 210, 139, 212, 45, 251, 74, 128, 132, 28, 14, 144, 161, 217, 18, 165, 78, 101, 61, 35, 235, 126, 6, 24, 161, 109, 119, 35, 41, 47, 229, 153, 231, 129, 125, 124, 11, 84, 7, 242, 166, 11, 233, 251, 135, 30, 246, 248, 215, 17, 66, 85, 41, 248, 169, 105, 0, 27, 222, 184, 15, 76, 92, 132, 222, 7, 61, 88, 18, 99, 23, 44, 78, 119, 54, 105, 141, 239, 136, 41, 121, 221, 186, 209, 87, 111, 210, 147, 52, 241, 42, 195, 186, 145, 107, 227, 56, 74, 58, 170, 212, 109, 22, 226, 144, 206, 154, 255, 0, 141, 229, 120, 252, 140, 25, 36, 155, 94, 10, 43, 144, 159, 232, 155, 178, 179, 5, 229, 120, 243, 151, 22, 235, 94, 169, 159, 10, 101, 134, 141, 107, 246, 18, 146, 8, 124, 192, 28, 114, 175, 51, 224, 211, 152, 34, 200, 134, 84, 249, 205, 137, 159, 17, 30, 150, 75, 105, 86, 177, 93, 235, 52, 119, 254, 240, 142, 197, 193, 155, 224, 212, 28, 32, 99, 207, 40, 250, 138, 4, 179, 246, 247, 131, 164, 66, 158, 45, 255, 0, 244, 102, 83, 82, 103, 182, 8, 170, 205, 70, 246, 133, 16, 127, 45, 24, 188, 149, 207, 154, 228, 174, 163, 126, 156, 7, 87, 9, 144, 191, 148, 231, 169, 100, 216, 41, 11, 111, 56, 8, 72, 199, 118, 152, 16, 227, 153, 25, 236, 61, 229, 153, 210, 105, 138, 131, 20, 140, 81, 121, 242, 225, 181, 88, 37, 127, 81, 12, 132, 110, 51, 92, 98, 119, 196, 10, 115, 101, 25, 214, 20, 206, 28, 158, 71, 190, 172, 213, 155, 17, 163, 4, 48, 247, 202, 194, 242, 32, 148, 122, 236, 110, 14, 231, 255, 32, 200, 211, 70, 137, 79, 53, 88, 241, 64, 253, 224, 41, 8, 197, 128, 182, 86, 67, 85, 141, 131, 64, 240, 21, 83, 159, 213, 175, 182, 107, 177, 138, 115, 85, 87, 54, 4, 155, 173, 107, 237, 12, 183, 164, 207, 50, 187, 133, 184, 104, 213, 70, 44, 0, 155, 3, 61, 202, 108, 178, 43, 12, 82, 200, 21, 217, 192, 116, 127, 40, 246, 48, 166, 43, 221, 111, 150, 11, 168, 4, 90, 161, 76, 42, 128, 243, 91, 87, 56, 86, 119, 230, 52, 172, 229, 133, 162, 37, 166, 79, 150, 77, 138, 211, 242, 236, 217, 230, 236, 152, 180, 77, 125, 177, 241, 107, 173, 213, 109, 178, 37, 10, 33, 179, 0, 83, 31, 165, 8, 144, 13, 175, 70, 151, 205, 137, 254, 104, 143, 204, 70, 61, 17, 145, 59, 28, 27, 129, 225, 79, 102, 242, 229, 238, 223, 145, 179, 127, 227, 49, 142, 90, 163, 222, 171, 103, 165, 26, 20, 186, 16, 33, 0, 19, 210, 63, 201, 142, 96, 34, 63, 168, 142, 214, 12, 232, 220, 217, 7, 108, 96, 14, 174, 31, 163, 180, 127, 3, 231, 191, 177, 129, 31, 133, 82, 74, 17, 246, 49, 175, 55, 186, 36, 233, 35, 45, 134, 193, 51, 93, 183, 88, 80, 128, 147, 109, 48, 126, 187, 162, 198, 141, 196, 210, 88, 0, 95, 198, 67, 89, 11, 152, 27, 70, 166, 224, 0, 173, 146, 4, 93, 232, 224, 89, 5, 145, 205, 166, 154, 229, 52, 160, 176, 169, 227, 238, 130, 96, 98, 245, 250, 190, 102, 47, 230, 255, 99, 131, 62, 215, 38, 114, 183, 10, 164, 182, 49, 230, 90, 184, 25, 14, 34, 248, 1, 122, 158, 56, 82, 27, 243, 83, 166, 46, 168, 62, 147, 215, 173, 53, 10, 16, 27, 112, 92, 152, 14, 210, 247, 105, 116, 195, 204, 171, 214, 137, 47, 30, 179, 162, 116, 109, 40, 160, 63, 111, 91, 224, 183, 199, 165, 135, 127, 153, 29, 15, 105, 107, 130, 211, 63, 185, 157, 124, 160, 134, 208, 240, 251, 93, 101, 160, 98, 136, 177, 207, 26, 117, 186, 149, 197, 15, 174, 64, 24, 102, 137, 133, 203, 58, 110, 172, 85, 85, 206, 6, 141, 141, 47, 228, 80, 105, 36, 134, 165, 124, 236, 28, 51, 32, 95, 148, 23, 92, 229, 23, 228, 125, 127, 24, 109, 99, 124, 226, 133, 224, 34, 201, 235, 69, 199, 140, 250, 241, 190, 29, 232, 45, 146, 91, 154, 39, 48, 148, 40, 219, 132, 173, 113, 231, 214, 35, 29, 102, 80, 187, 163, 96, 31, 225, 106, 5, 20, 47, 82, 191, 0, 30, 186, 164, 35, 174, 109, 58, 40, 206, 55, 151, 248, 235, 151, 93, 4, 99, 229, 97, 73, 146, 248, 40, 113, 185, 211, 242, 139, 211, 81, 27, 25, 213, 230, 217, 176, 89, 111, 92, 198, 210, 157, 211, 160, 10, 124, 132, 195, 144, 69, 178, 192, 12, 206, 29, 108, 220, 28, 138, 23, 234, 5, 21, 10, 242, 150, 236, 116, 183, 50, 26, 6, 110, 88, 57, 251, 78, 116, 114, 86, 126, 49, 193, 158, 250, 230, 104, 56, 124, 189, 93, 37, 145, 82, 4, 171, 42, 143, 86, 45, 9, 32, 130, 101, 62, 199, 242, 82, 180, 20, 185, 233, 77, 121, 233, 189, 25, 170, 240, 179, 53, 61, 58, 1, 254, 29, 18, 100, 37, 37, 123, 232, 78, 12, 238, 30, 185, 63, 219, 98, 249, 173, 7, 183, 107, 134, 142, 80, 55, 96, 187, 208, 1, 183, 25, 177, 125, 81, 117, 63, 40, 1, 139, 124, 111, 18, 144, 0, 160, 34, 27, 36, 136, 83, 182, 195, 132, 156, 147, 214, 207, 241, 173, 129, 33, 146, 31, 195, 149, 113, 62, 34, 95, 151, 220, 227, 191, 33, 105, 39, 130, 7, 65, 185, 232, 200, 148, 217, 23, 228, 12, 119, 177, 168, 21, 0, 43, 221, 63, 28, 61, 146, 72, 240, 131, 250, 225, 47, 52, 22, 180, 192, 95, 156, 137, 246, 201, 168, 229, 73, 154, 31, 187, 58, 105, 47, 197, 86, 239, 227, 83, 252, 62, 248, 57, 199, 163, 115, 154, 183, 29, 45, 102, 88, 150, 211, 45, 60, 208, 62, 82, 224, 4, 152, 1, 166, 10, 42, 250, 234, 1, 250, 246, 208, 122, 139, 66, 56, 92, 77, 206, 5, 72, 99, 76, 150, 133, 162, 85, 161, 59, 91, 92, 167, 172, 80, 216, 40, 247, 12, 250, 65, 248, 152, 62, 197, 190, 172, 129, 79, 131, 153, 96, 123, 1, 197, 122, 99, 89, 99, 191, 64, 98, 54, 38, 160, 213, 175, 202, 88, 21, 112, 233, 114, 217, 158, 245, 85, 154, 234, 60, 142, 111, 100, 221, 69, 115, 70, 128, 129, 231, 113, 136, 186, 239, 229, 104, 206, 54, 136, 104, 156, 89, 98, 168, 133, 126, 231, 232, 152, 24, 94, 223, 30, 255, 253, 11, 130, 226, 150, 107, 64, 26, 173, 136, 72, 175, 92, 71, 242, 7, 173, 43, 79, 183, 56, 245, 211, 7, 62, 179, 198, 201, 75, 5, 212, 216, 238, 30, 104, 27, 59, 209, 1, 67, 38, 0, 67, 41, 187, 157, 214, 83, 153, 109, 244, 13, 85, 5, 223, 229, 66, 29, 169, 145, 116, 196, 67, 136, 16, 230, 68, 25, 254, 15, 35, 180, 186, 72, 117, 23, 30, 152, 118, 5, 97, 176, 254, 103, 255, 255, 0, 249, 66, 253, 92, 114, 115, 193, 210, 25, 230, 122, 88, 23, 132, 19, 82, 253, 0, 49, 157, 56, 224, 234, 114, 90, 25, 228, 32, 200, 196, 247, 58, 79, 193, 115, 146, 48, 7, 48, 242, 35, 156, 36, 199, 151, 30, 250, 139, 129, 24, 159, 173, 28, 146, 217, 75, 155, 12, 52, 54, 5, 100, 55, 54, 217, 154, 115, 170, 186, 49, 99, 31, 53, 182, 177, 110, 236, 170, 163, 89, 219, 68, 208, 122, 146, 244, 67, 214, 74, 225, 138, 154, 54, 210, 210, 148, 152, 108, 177, 8, 136, 85, 182, 220, 199, 185, 183, 149, 142, 218, 80, 49, 93, 177, 191, 124, 220, 187, 25, 139, 135, 207, 224, 182, 222, 49, 254, 135, 147, 240, 28, 220, 205, 20, 67, 94, 211, 68, 128, 182, 162, 153, 243, 33, 192, 114, 217, 193, 31, 78, 124, 212, 4, 43, 200, 36, 10, 252, 237, 239, 73, 192, 248, 46, 198, 47, 186, 136, 141, 30, 91, 135, 205, 84, 174, 102, 104, 165, 109, 237, 51, 116, 235, 35, 1, 67, 186, 51, 209, 109, 107, 93, 49, 135, 195, 76, 255, 21, 128, 121, 24, 227, 194, 114, 217, 54, 161, 121, 118, 165, 138, 86, 68, 233, 226, 2, 21, 95, 6, 216, 204, 169, 11, 67, 123, 115, 2, 128, 80, 144, 164, 210, 203, 15, 106, 174, 159, 106, 222, 3, 136, 215, 129, 254, 96, 222, 106, 242, 148, 20, 108, 90, 224, 236, 86, 59, 123, 10, 2, 57, 37, 9, 16, 178, 202, 165, 27, 193, 237, 232, 104, 2, 64, 182, 6, 182, 205, 10, 105, 17, 218, 250, 118, 147, 111, 166, 163, 16, 4, 130, 196, 114, 61, 57, 140, 237, 66, 67, 149, 220, 187, 40, 118, 28, 47, 194, 175, 41, 68, 124, 220, 18, 90, 101, 154, 43, 89, 153, 36, 15, 23, 35, 36, 170, 30, 247, 28, 106, 237, 161, 97, 37, 236, 15, 81, 105, 167, 221, 68, 183, 226, 138, 157, 136, 169, 176, 37, 90, 32, 146, 55, 135, 3, 226, 167, 240, 246, 234, 189, 126, 232, 202, 228, 54, 9, 204, 184, 5, 243, 178, 92, 40, 145, 71, 198, 230, 174, 241, 63, 86, 28, 18, 232, 30, 131, 148, 230, 230, 185, 146, 119, 189, 145, 157, 132, 241, 163, 199, 134, 74, 155, 162, 61, 134, 91, 132, 226, 129, 248, 250, 71, 23, 101, 33, 93, 111, 11, 49, 2, 117, 208, 71, 188, 100, 38, 135, 112, 237, 194, 222, 4, 8, 178, 47, 2, 124, 46, 41, 244, 30, 14, 0, 222, 82, 81, 14, 218, 223, 247, 114, 39, 0, 74, 219, 60, 142, 39, 234, 75, 15, 47, 70, 229, 47, 134, 248, 187, 191, 108, 231, 96, 146, 115, 91, 186, 15, 72, 168, 83, 4, 252, 211, 96, 84, 112, 158, 79, 14, 15, 92, 55, 222, 129, 34, 0, 142, 12, 208, 109, 204, 238, 150, 197, 17, 196, 21, 148, 161, 38, 115, 221, 148, 142, 138, 92, 234, 240, 12, 62, 183, 98, 71, 196, 69, 37, 220, 13, 37, 106, 202, 46, 148, 224, 43, 235, 187, 226, 250, 126, 11, 80, 39, 115, 95, 73, 26, 192, 240, 174, 23, 79, 86, 28, 41, 106, 156, 1, 71, 211, 179, 244, 227, 225, 219, 189, 243, 206, 97, 42, 31, 27, 253, 188, 105, 207, 140, 30, 164, 157, 99, 12, 217, 49, 174, 251, 208, 158, 145, 222, 110, 92, 38, 239, 51, 32, 85, 124, 240, 93, 84, 107, 196, 19, 173, 125, 129, 4, 205, 121, 180, 200, 5, 72, 183, 145, 102, 8, 249, 179, 87, 51, 193, 224, 239, 120, 7, 9, 107, 32, 127, 42, 39, 189, 97, 32, 162, 217, 193, 179, 40, 44, 35, 6, 154, 93, 206, 14, 90, 15, 8, 220, 251, 121, 202, 227, 118, 251, 46, 228, 88, 250, 250, 51, 192, 65, 236, 137, 90, 243, 158, 156, 133, 88, 48, 175, 164, 5, 139, 44, 2, 215, 136, 193, 228, 43, 163, 36, 193, 112, 15, 236, 216, 185, 118, 135, 140, 176, 45, 173, 135, 44, 17, 9, 64, 173, 52, 3, 147, 230, 44, 202, 176, 118, 146, 151, 32, 48, 255, 136, 8, 101, 106, 65, 174, 64, 213, 26, 129, 184, 241, 194, 101, 200, 187, 46, 207, 127, 31, 0, 235, 131, 223, 182, 163, 113, 158, 106, 8, 98, 180, 17, 184, 159, 10, 94, 245, 66, 44, 120, 188, 168, 16, 159, 7, 22, 67, 160, 5, 99, 95, 169, 185, 145, 169, 227, 212, 255, 195, 114, 195, 88, 160, 124, 49, 66, 113, 214, 41, 176, 85, 168, 159, 145, 247, 132, 172, 27, 236, 160, 104, 93, 142, 171, 26, 226, 15, 207, 133, 225, 29, 102, 113, 162, 246, 52, 192, 68, 160, 21, 196, 14, 114, 212, 252, 166, 43, 240, 94, 172, 57, 252, 89, 233, 76, 52, 245, 225, 254, 215, 100, 249, 248, 11, 252, 156, 225, 208, 61, 89, 41, 147, 154, 216, 1, 29, 98, 96, 114, 139, 13, 246, 234, 34, 104, 60, 18, 197, 148, 223, 43, 33, 1, 61, 179, 115, 169, 41, 54, 188, 119, 156, 170, 186, 22, 192, 26, 11, 88, 72, 79, 66, 57, 137, 22, 100, 144, 121, 39, 13, 184, 198, 126, 213, 38, 233, 27, 13, 237, 163, 35, 105, 4, 87, 58, 167, 64, 79, 11, 12, 139, 221, 110, 111, 171, 69, 152, 216, 82, 15, 110, 233, 173, 133, 197, 48, 245, 23, 139, 120, 2, 199, 146, 232, 44, 7, 46, 158, 209, 217, 189, 38, 44, 215, 20, 220, 158, 211, 97, 201, 60, 173, 131, 3, 153, 125, 170, 65, 242, 65, 218, 240, 135, 170, 142, 126, 254, 221, 83, 183, 109, 123, 186, 3, 222, 244, 21, 211, 189, 234, 59, 21, 193, 134, 9, 93, 127, 28, 185, 14, 82, 244, 26, 163, 100, 188, 119, 44, 241, 32, 58, 112, 160, 106, 135, 70, 61, 115, 137, 56, 56, 216, 58, 218, 122, 19, 180, 161, 208, 240, 178, 98, 216, 36, 181, 172, 52, 3, 200, 123, 188, 111, 34, 140, 6, 20, 126, 10, 78, 58, 224, 190, 129, 219, 63, 34, 207, 158, 94, 128, 38, 32, 177, 125, 167, 180, 159, 35, 23, 239, 227, 110, 138, 72, 228, 4, 22, 101, 9, 22, 192, 127, 159, 17, 60, 239, 29, 9, 76, 207, 170, 200, 170, 241, 145, 46, 156, 112, 56, 74, 72, 181, 11, 235, 247, 205, 95, 61, 4, 113, 182, 93, 15, 85, 199, 199, 28, 185, 138, 102, 122, 3, 152, 106, 92, 66, 112, 197, 39, 237, 86, 191, 237, 32, 236, 23, 169, 100, 30, 243, 23, 97, 249, 111, 241, 254, 208, 157, 149, 209, 180, 51, 169, 180, 240, 207, 102, 113, 154, 14, 162, 97, 216, 70, 114, 4, 112, 123, 21, 4, 213, 69, 8, 232, 214, 166, 40, 193, 241, 240, 131, 130, 132, 134, 158, 116, 238, 200, 92, 140, 173, 85, 65, 139, 73, 236, 227, 189, 33, 234, 240, 118, 92, 205, 148, 67, 109, 144, 227, 208, 218, 78, 178, 83, 252, 165, 98, 70, 193, 99, 104, 166, 34, 5, 188, 252, 80, 205, 28, 97, 181, 246, 201, 125, 216, 246, 0, 66, 175, 160, 237, 149, 189, 237, 54, 26, 165, 97, 200, 254, 250, 19, 145, 17, 22, 72, 187, 249, 138, 241, 1, 157, 253, 20, 251, 253, 252, 110, 114, 216, 142, 42, 26, 229, 112, 122, 14, 255, 154, 216, 216, 17, 217, 168, 183, 243, 43, 191, 111, 36, 116, 218, 234, 115, 1, 120, 113, 87, 219, 48, 206, 89, 126, 240, 248, 27, 196, 210, 132, 66, 144, 179, 220, 160, 147, 231, 13, 213, 167, 104, 112, 30, 249, 247, 10, 244, 26, 51, 238, 215, 167, 182, 91, 139, 244, 212, 86, 79, 39, 179, 220, 223, 18, 234, 230, 158, 157, 28, 94, 6, 158, 56, 104, 78, 10, 232, 49, 253, 215, 33, 154, 243, 48, 154, 147, 242, 32, 89, 136, 32, 219, 180, 117, 245, 161, 54, 35, 65, 125, 17, 49, 26, 91, 240, 137, 177, 116, 86, 118, 47, 200, 42, 96, 64, 144, 237, 83, 211, 232, 212, 76, 250, 37, 3, 107, 43, 53, 152, 187, 121, 50, 196, 83, 166, 247, 28, 45, 69, 251, 180, 145, 39, 45, 185, 182, 222, 8, 40, 106, 106, 181, 140, 74, 8, 69, 5, 109, 78, 54, 84, 40, 202, 172, 105, 46, 14, 82, 180, 204, 132, 5, 241, 106, 218, 230, 240, 230, 57, 242, 23, 210, 163, 19, 240, 190, 44, 59, 223, 106, 76, 128, 32, 140, 164, 152, 176, 4, 9, 42, 116, 117, 196, 74, 213, 117, 140, 242, 10, 22, 27, 42, 223, 117, 149, 146, 107, 107, 43, 202, 190, 193, 36, 69, 161, 238, 48, 227, 171, 66, 92, 16, 172, 154, 198, 203, 179, 99, 122, 179, 107, 51, 249, 40, 136, 131, 191, 210, 141, 202, 51, 115, 28, 84, 31, 200, 26, 91, 61, 19, 148, 110, 162, 239, 107, 183, 246, 20, 236, 244, 40, 247, 82, 252, 152, 54, 71, 194, 174, 136, 106, 68, 74, 14, 185, 19, 63, 60, 45, 224, 27, 234, 107, 140, 110, 208, 186, 239, 94, 134, 204, 1, 215, 21, 197, 49, 109, 162, 146, 51, 1, 140, 249, 27, 15, 117, 23, 206, 210, 35, 196, 20, 233, 181, 246, 64, 95, 135, 33, 245, 212, 0, 166, 103, 18, 133, 62, 136, 139, 93, 74, 217, 16, 73, 254, 223, 42, 176, 71, 49, 86, 127, 193, 46, 152, 214, 12, 39, 83, 106, 88, 106, 132, 43, 124, 33, 166, 7, 19, 90, 60, 185, 200, 26, 93, 42, 235, 58, 175, 136, 106, 35, 59, 84, 39, 150, 32, 114, 139, 253, 245, 164] - ], - "iv": null, - "key": [184, 113, 121, 58, 152, 91, 192, 212, 71, 191, 170, 113, 186, 36, 135, 130], - "modeOfOperation": "ctr", - "plaintext": [ - [60, 147, 102, 1, 92, 97, 192, 210, 132, 174, 102, 153, 23, 46, 210, 41, 214, 77, 194, 201, 158, 115, 67, 147, 248, 24, 223, 248, 32, 232, 117, 110, 145, 196, 95, 156, 33, 238, 130, 179, 219, 160, 139, 214, 42, 250, 132, 213, 30, 23, 51, 122, 11, 16, 47, 101, 12, 127, 121, 6, 197, 153, 37, 115, 33, 230, 255, 74, 101, 251, 233, 91, 208, 80, 91, 230, 29, 135, 235, 94, 150, 60, 74, 245, 116, 157, 161, 191, 202, 141, 226, 144, 142, 141, 33, 212, 12, 68, 214, 146, 44, 7, 138, 144, 23, 68, 83, 211, 17, 62, 89, 35, 77, 223, 201, 104, 121, 250, 150, 77, 120, 63, 145, 106, 136, 3, 187, 47, 51, 193, 239, 43, 68, 140, 4, 186, 101, 167, 27, 160, 20, 208, 190, 83, 215, 6, 3, 87, 3, 156, 68, 149, 115, 213, 68, 65, 159, 29, 28, 6, 216, 199, 201, 96, 1, 190, 108, 106, 0, 213, 34, 162, 3, 0, 194, 253, 223, 54, 129, 89, 174, 114, 147, 20, 191, 7, 172, 205, 89, 28, 112, 52, 71, 77, 49, 79, 248, 4, 164, 172, 200, 65, 108, 30, 252, 137, 87, 67, 117, 250, 94, 45, 229, 26, 67, 65, 239, 37, 157, 8, 118, 187, 84, 221, 232, 124, 219, 243, 211, 69, 212, 154, 121, 34, 173, 16, 78, 247, 3, 216, 88, 203, 249, 87, 182, 92, 26, 214, 173, 158, 46, 39, 230, 30, 102, 224, 177, 211, 101, 61, 19, 167, 149, 52, 233, 60, 55, 131, 80, 166, 9, 18, 213, 233, 225, 193, 50, 105, 213, 185, 68, 86, 96, 172, 32, 167, 68, 122, 114, 150, 84, 45, 213, 34, 198, 31, 209, 34, 214, 133, 253, 224, 234, 247, 254, 210, 137, 242, 213, 209, 199, 90, 55, 227, 19, 9, 133, 56, 31, 78, 34, 96, 206, 207, 45, 234, 172, 202, 249, 171, 43, 171, 160, 139, 130, 124, 219, 0, 91, 202, 149, 230, 73, 170, 86, 83, 93, 176, 62, 198, 36, 196, 153, 137, 168, 192, 201, 2, 172, 125, 151, 245, 16, 16, 98, 6, 68, 69, 200, 252, 131, 38, 155, 57, 254, 110, 70, 255, 201, 91, 70, 222, 171, 145, 109, 6, 156, 57, 82, 31, 12, 248, 39, 32, 181, 244, 45, 218, 243, 175, 101, 76, 156, 115, 122, 62, 55, 90, 52, 100, 68, 247, 119, 175, 56, 141, 189, 84, 168, 93, 248, 251, 195, 68, 178, 22, 6, 236, 168, 214, 124, 221, 42, 170, 122, 254, 214, 179, 229, 58, 141, 62, 140, 199, 92, 220, 125, 56, 228, 87, 114, 201, 48, 111, 144, 69, 236, 90, 19, 97, 107, 162, 242, 70, 183, 194, 41, 95, 232, 159, 168, 54, 62, 182, 26, 90, 85, 136, 74, 217, 189, 147, 23, 23, 172, 126, 234, 66, 252, 103, 119, 253, 164, 96, 127, 244, 122, 68, 176, 200, 254, 21, 36, 222, 37, 45, 195, 110, 129, 50, 67, 215, 115, 47, 209, 71, 176, 61, 117, 151, 125, 202, 200, 126, 90, 32, 202, 73, 41, 223, 224, 164, 225, 142, 155, 164, 106, 184, 53, 52, 158, 147, 65, 125, 171, 246, 27, 63, 146, 28, 56, 50, 118, 164, 140, 57, 159, 72, 79, 61, 11, 164, 189, 88, 132, 38, 117, 109, 207, 67, 199, 130, 213, 161, 61, 94, 244, 109, 136, 147, 248, 84, 15, 182, 65, 19, 188, 47, 251, 255, 181, 99, 36, 106, 206, 125, 69, 144, 22, 232, 221, 64, 162, 113, 7, 211, 154, 133, 67, 134, 244, 5, 153, 107, 61, 47, 187, 49, 152, 236, 177, 90, 213, 206, 129, 189, 157, 146, 83, 51, 107, 9, 50, 162, 205, 55, 115, 170, 231, 205, 200, 179, 81, 22, 80, 138, 4, 247, 104, 130, 190, 204, 121, 186, 61, 113, 42, 53, 212, 231, 66, 114, 158, 166, 9, 160, 179, 72, 46, 224, 149, 169, 168, 238, 139, 149, 118, 126, 49, 134, 209, 106, 162, 204, 236, 187, 56, 190, 170, 7, 167, 51, 104, 98, 32, 62, 36, 142, 36, 167, 207, 185, 249, 62, 111, 165, 48, 205, 114, 132, 159, 127, 186, 11, 214, 236, 202, 167, 67, 121, 194, 57, 190, 79, 77, 51, 112, 121, 145, 51, 58, 87, 130, 108, 253, 34, 176, 159, 95, 33, 55, 81, 173, 25, 20, 194, 66, 8, 175, 85, 108, 188, 246, 217, 186, 238, 61, 246, 190, 175, 112, 88, 129, 218, 147, 11, 175, 9, 213, 134, 186, 190, 128, 158, 179, 254, 104, 4, 223, 176, 173, 10, 182, 71, 68, 138, 16, 245, 83, 101, 210, 30, 23, 83, 217, 186, 120, 229, 22, 159, 54, 85, 153, 192, 51, 148, 166, 170, 173, 199, 99, 194, 65, 199, 106, 225, 156, 249, 157, 108, 166, 242, 91, 119, 6, 97, 144, 24, 249, 180, 162, 152, 253, 229, 192, 88, 181, 238, 137, 153, 140, 42, 143, 164, 150, 94, 18, 248, 211, 234, 249, 193, 28, 54, 56, 28, 71, 147, 230, 216, 118, 98, 164, 224, 12, 148, 28, 60, 180, 34, 232, 142, 117, 26, 60, 204, 158, 146, 255, 130, 40, 192, 34, 116, 58, 173, 67, 158, 37, 160, 171, 191, 33, 130, 142, 124, 138, 141, 192, 102, 223, 239, 40, 112, 193, 161, 202, 75, 233, 250, 75, 6, 65, 21, 114, 230, 8, 27, 129, 81, 102, 205, 244, 67, 158, 216, 8, 71, 14, 155, 226, 81, 224, 70, 45, 85, 145, 19, 27, 7, 127, 228, 37, 32, 61, 193, 41, 234, 247, 161, 71, 218, 36, 12, 195, 255, 158, 125, 91, 31, 191, 176, 242, 38, 150, 179, 48, 209, 253, 198, 237, 125, 229, 207, 187, 174, 92, 150, 26, 88, 102, 104, 100, 162, 89, 166, 16, 237, 46, 146, 32, 203, 198, 27, 94, 178, 181, 55, 233, 81, 125, 55, 192, 223, 117, 151, 140, 157, 82, 130, 101, 1, 87, 26, 212, 110, 17, 128, 102, 80, 150, 151, 24, 86, 147, 145, 137, 130, 182, 150, 106, 54, 46, 19, 5, 6, 105, 160, 119, 238, 23, 179, 109, 41, 171, 35, 202, 154, 203, 203, 60, 110, 17, 87, 137, 193, 54, 119, 242, 191, 3, 158, 48, 14, 208, 155, 118, 28, 39, 80, 212, 38, 155, 118, 248, 95, 237, 178, 114, 205, 219, 174, 26, 120, 108, 0, 69, 110, 11, 40, 241, 16, 100, 15, 142, 216, 72, 170, 243, 149, 222, 254, 133, 33, 8, 212, 77, 60, 2, 225, 239, 232, 233, 237, 1, 17, 94, 244, 250, 156, 22, 79, 89, 105, 234, 26, 238, 68, 141, 113, 107, 21, 37, 49, 19, 9, 172, 43, 132, 145, 119, 7, 204, 82, 81, 96, 89, 20, 27, 47, 57, 100, 172, 201, 90, 164, 14, 152, 181, 155, 120, 162, 153, 207, 134, 212, 206, 132, 41, 81, 70, 92, 42, 4, 95, 165, 252, 81, 108, 132, 171, 194, 31, 183, 209, 141, 213, 140, 229, 138, 173, 88, 233, 138, 187, 43, 206, 213, 190, 201, 164, 59, 90, 252, 219, 14, 60, 13, 215, 247, 21, 97, 120, 208, 239, 206, 211, 44, 91, 107, 209, 66, 255, 244, 18, 196, 127, 118, 6, 188, 160, 49, 60, 155, 134, 220, 48, 111, 72, 169, 166, 108, 91, 193, 96, 46, 169, 255, 235, 209, 140, 91, 59, 189, 162, 88, 148, 243, 99, 209, 239, 120, 104, 247, 96, 44, 56, 128, 245, 35, 230, 180, 246, 193, 115, 219, 185, 118, 103, 239, 215, 39, 113, 221, 18, 199, 47, 94, 67, 79, 143, 197, 250, 27, 199, 205, 75, 46, 11, 83, 27, 144, 152, 223, 36, 4, 244, 12, 147, 141, 109, 14, 106, 107, 143, 184, 120, 33, 24, 18, 92, 212, 84, 107, 231, 18, 82, 38, 217, 210, 20, 59, 3, 216, 141, 45, 128, 125, 62, 116, 25, 148, 76, 195, 254, 25, 241, 126, 27, 125, 49, 181, 83, 241, 182, 252, 228, 33, 164, 69, 26, 11, 246, 36, 45, 210, 136, 182, 240, 85, 43, 77, 119, 199, 45, 110, 136, 32, 187, 193, 24, 77, 103, 238, 22, 237, 183, 26, 67, 44, 191, 194, 66, 218, 188, 125, 249, 189, 252, 90, 141, 156, 56, 58, 115, 142, 169, 105, 203, 167, 199, 43, 250, 36, 80, 176, 248, 187, 9, 170, 9, 91, 243, 49, 161, 76, 159, 97, 120, 241, 28, 184, 225, 227, 143, 235, 56, 207, 67, 134, 130, 80, 124, 182, 4, 174, 143, 178, 49, 63, 27, 219, 189, 182, 123, 106, 70, 117, 53, 226, 209, 250, 239, 170, 224, 228, 2, 50, 80, 36, 231, 117, 146, 11, 31, 220, 136, 3, 106, 35, 251, 98, 65, 20, 185, 116, 40, 240, 168, 0, 163, 169, 167, 119, 218, 163, 84, 182, 112, 249, 18, 202, 133, 53, 61, 117, 143, 154, 17, 253, 190, 103, 142, 186, 24, 105, 179, 34, 74, 239, 65, 136, 16, 214, 204, 244, 253, 54, 19, 71, 23, 138, 94, 13, 245, 30, 36, 65, 167, 13, 45, 241, 93, 79, 85, 188, 243, 245, 224, 93, 40, 188, 246, 96, 209, 136, 153, 194, 30, 142, 142, 26, 234, 58, 191, 3, 96, 30, 139, 169, 170, 6, 64, 97, 178, 224, 92, 242, 178, 122, 44, 133, 210, 220, 6, 63, 88, 238, 48, 151, 61, 25, 241, 20, 155, 62, 169, 68, 145, 119, 185, 192, 218, 176, 17, 247, 36, 246, 26, 114, 120, 6, 215, 229, 1, 228, 177, 59, 165, 197, 67, 8, 174, 166, 124, 31, 180, 151, 108, 195, 210, 104, 54, 126, 188, 96, 205, 88, 155, 200, 139, 25, 192, 230, 95, 5, 188, 74, 154, 2, 135, 71, 88, 226, 227, 5, 179, 146, 42, 218, 40, 67, 32, 91, 49, 151, 228, 36, 69, 139, 139, 204, 195, 167, 10, 234, 197, 230, 64, 55, 189, 62, 51, 126, 71, 23, 6, 124, 164, 232, 186, 208, 219, 34, 16, 182, 24, 174, 24, 30, 124, 57, 193, 174, 162, 192, 67, 78, 207, 111, 31, 64, 181, 108, 11, 57, 11, 129, 110, 238, 1, 77, 74, 61, 21, 0, 149, 194, 167, 231, 86, 124, 104, 90, 22, 128, 87, 16, 31, 183, 66, 221, 147, 224, 177, 226, 142, 131, 188, 23, 215, 210, 234, 146, 47, 107, 6, 89, 17, 216, 194, 34, 150, 213, 249, 216, 153, 130, 228, 181, 217, 204, 227, 7, 230, 191, 138, 109, 235, 36, 183, 122, 23, 190, 159, 37, 86, 157, 8, 59, 121, 239, 167, 192, 30, 105, 47, 247, 76, 143, 39, 102, 233, 163, 189, 71, 208, 211, 149, 91, 127, 103, 130, 129, 244, 151, 214, 202, 17, 80, 207, 248, 186, 185, 240, 207, 43, 65, 183, 152, 78, 223, 206, 149, 128, 78, 202, 206, 244, 13, 216, 245, 230, 159, 15, 218, 237, 28, 170, 174, 152, 202, 89, 17, 182, 164, 172, 69, 130, 194, 109, 240, 236, 70, 190, 151, 227, 106, 231, 230, 101, 189, 63, 82, 173, 58, 209, 126, 140, 40, 180, 25, 34, 141, 236, 243, 94, 180, 50, 167, 9, 8, 104, 66, 168, 119, 194, 247, 185, 146, 96, 194, 72, 40, 199, 61, 35, 115, 125, 22, 158, 68, 139, 71, 43, 53, 249, 180, 84, 103, 7, 46, 89, 221, 178, 13, 119, 180, 219, 7, 128, 124, 78, 46, 132, 202, 121, 92, 172, 227, 177, 96, 179, 170, 253, 31, 87, 35, 203, 20, 140, 209, 117, 194, 79, 66, 231, 162, 160, 236, 122, 43, 80, 221, 141, 162, 43, 122, 139, 38, 62, 171, 21, 170, 225, 144, 198, 112, 215, 171, 49, 93, 7, 129, 132, 152, 38, 34, 55, 18, 141, 28, 161, 91, 117, 40, 253, 210, 12, 90, 188, 54, 140, 2, 31, 114, 163, 95, 96, 76, 63, 184, 7, 111, 199, 88, 153, 134, 125, 161, 34, 23, 105, 41, 103, 22, 56, 187, 141, 62, 191, 48, 34, 251, 143, 109, 253, 98, 130, 136, 28, 161, 211, 224, 252, 30, 168, 152, 46, 64, 231, 171, 19, 54, 196, 219, 157, 17, 158, 223, 99, 148, 96, 90, 104, 58, 32, 11, 3, 116, 210, 74, 158, 203, 41, 222, 160, 163, 36, 60, 50, 68, 7, 183, 236, 174, 193, 94, 39, 166, 164, 211, 104, 74, 157, 182, 141, 102, 131, 40, 3, 166, 52, 60, 1, 59, 118, 111, 200, 60, 235, 48, 167, 94, 57, 16, 220, 78, 211, 88, 50, 155, 16, 132, 122, 57, 102, 9, 176, 67, 146, 0, 55, 99, 229, 77, 170, 3, 21, 29, 104, 121, 107, 1, 38, 47, 101, 0, 18, 22, 57, 120, 76, 104, 104, 208, 44, 144, 181, 41, 188, 239, 79, 235, 16, 76, 200, 230, 242, 127, 104, 8, 193, 164, 251, 121, 154, 246, 129, 203, 231, 209, 134, 210, 227, 91, 149, 206, 203, 61, 94, 149, 215, 40, 6, 165, 171, 153, 108, 255, 184, 204, 39, 221, 23, 224, 137, 162, 55, 71, 26, 219, 9, 137, 160, 92, 159, 196, 146, 120, 85, 93, 33, 168, 213, 168, 173, 153, 65, 97, 35, 6, 196, 27, 132, 208, 188, 26, 27, 226, 106, 93, 220, 125, 29, 121, 29, 179, 59, 87, 135, 184, 113, 126, 46, 180, 99, 236, 216, 223, 223, 95, 238, 39, 116, 179, 145, 183, 251, 98, 138, 131, 7, 90, 242, 224, 11, 21, 71, 23, 114, 180, 196, 192, 155, 43, 181, 54, 144, 197, 76, 75, 211, 145, 130, 35, 192, 94, 194, 19, 138, 119, 34, 151, 76, 155, 186, 233, 151, 58, 202, 27, 195, 146, 40, 233, 141, 143, 184, 115, 39, 109, 139, 246, 241, 18, 77, 99, 210, 91, 44, 73, 86, 101, 253, 240, 209, 121, 149, 76, 84, 53, 187, 117, 253, 23, 84, 73, 248, 244, 134, 92, 54, 74, 89, 112, 229, 120, 22, 17, 222, 97, 197, 73, 22, 213, 155, 238, 63, 56, 250, 159, 183, 109, 22, 93, 95, 144, 4, 123, 41, 2, 74, 168, 220, 196, 32, 117, 208, 231, 171, 104, 55, 227, 88, 37, 254, 20, 24, 207, 30, 155, 146, 183, 10, 142, 136, 173, 65, 95, 71, 220, 39, 42, 139, 255, 62, 63, 24, 163, 9, 131, 102, 123, 174, 221, 100, 152, 87, 190, 142, 205, 180, 0, 5, 158, 129, 27, 47, 219, 113, 134, 236, 200, 7, 32, 175, 178, 26, 172, 148, 242, 181, 108, 187, 18, 165, 13, 101, 133, 189, 23, 68, 182, 53, 77, 33, 42, 188, 231, 57, 254, 240, 114, 60, 248, 108, 30, 69, 63, 130, 176, 134, 30, 247, 193, 96, 225, 234, 125, 82, 38, 66, 110, 123, 185, 158, 227, 181, 44, 242, 205, 169, 223, 240, 50, 160, 186, 188, 160, 59, 121, 239, 31, 149, 191, 100, 159, 55, 159, 40, 231, 30, 128, 33, 106, 138, 1, 136, 0, 76, 146, 172, 82, 55, 154, 86, 79, 235, 71, 243, 163, 180, 248, 155, 109, 202, 197, 183, 89, 44, 100, 123, 225, 167, 46, 33, 187, 190, 255, 156, 222, 96, 180, 230, 94, 224, 104, 144, 160, 82, 240, 209, 251, 67, 92, 73, 161, 210, 158, 220, 253, 65, 242, 46, 58, 70, 2, 172, 33, 222, 40, 51, 44, 157, 60, 8, 44, 148, 121, 246, 86, 232, 170, 72, 83, 116, 201, 221, 66, 0, 218, 55, 200, 124, 243, 24, 217, 134, 14, 247, 55, 116, 202, 139, 21, 35, 253, 170, 105, 142, 180, 189, 176, 98, 117, 230, 251, 72, 86, 95, 13, 140, 112, 52, 27, 231, 67, 84, 208, 13, 219, 99, 110, 151, 238, 183, 131, 25, 149, 255, 112, 47, 3, 146, 133, 18, 49, 70, 154, 145, 214, 217, 210, 81, 107, 239, 167, 70, 232, 80, 224, 79, 155, 73, 40, 23, 230, 80, 253, 173, 132, 10, 78, 166, 207, 147, 50, 62, 228, 108, 82, 31, 199, 34, 237, 88, 51, 214, 85, 131, 133, 226, 113, 70, 27, 8, 122, 12, 5, 183, 29, 249, 240, 44, 82, 48, 127, 240, 157, 102, 116, 155, 90, 168, 114, 40, 209, 128, 88, 68, 125, 137, 38, 5, 78, 72, 239, 155, 165, 103, 36, 184, 98, 82, 19, 60, 150, 131, 165, 128, 79, 85, 207, 179, 37, 244, 236, 156, 17, 111, 135, 133, 85, 153, 202, 116, 194, 180, 221, 133, 173, 21, 62, 13, 217, 196, 243, 83, 95, 91, 12, 58, 132, 85, 59, 68, 16, 47, 103, 120, 28, 143, 132, 49, 252, 101, 254, 190, 21, 223, 188, 77, 86, 174, 164, 246, 191, 88, 138, 229, 155, 203, 106, 77, 159, 144, 80, 197, 162, 171, 53, 77, 205, 211, 229, 194, 61, 239, 88, 101, 149, 133, 81, 199, 81, 113, 114, 254, 60, 242, 193, 223, 227, 96, 87, 29, 190, 96, 166, 205, 16, 133, 242, 153, 148, 140, 110, 108, 73, 42, 53, 83, 202, 178, 188, 114, 7, 226, 187, 11, 81, 26, 41, 114, 209, 0, 40, 50, 118, 129, 233, 59, 53, 0, 80, 113, 239, 130, 175, 13, 202, 28, 12, 52, 166, 244, 35, 27, 227, 10, 135, 34, 149, 1, 240, 76, 105, 167, 42, 60, 163, 255, 18, 176, 39, 175, 152, 79, 189, 49, 25, 239, 166, 235, 213, 141, 125, 228, 33, 88, 203, 92, 248, 84, 245, 21, 255, 154, 127, 19, 199, 240, 176, 95, 165, 74, 117, 109, 105, 199, 254, 42, 60, 99, 75, 99, 69, 107, 121, 227, 125, 51, 227, 61, 132, 167, 180, 134, 144, 106, 138, 156, 237, 59, 209, 28, 49, 191, 50, 64, 82, 201, 41, 205, 208, 164, 223, 104, 173, 234, 151, 244, 158, 189, 144, 70, 108, 157, 240, 126, 8, 64, 98, 85, 42, 188, 225, 6, 21, 192, 66, 98, 251, 40, 89, 106, 75, 142, 150, 51, 135, 116, 47, 66, 102, 188, 178, 149, 81, 16, 59, 210, 153, 230, 254, 133, 15, 120, 93, 94, 104, 200, 78, 24, 122, 0, 148, 104, 80, 141, 8, 196, 174, 109, 6, 252, 38, 193, 28, 229, 46, 188, 137, 130, 158, 92, 35, 252, 199, 8, 191, 105, 132, 219, 48, 59, 204, 168, 238, 240, 225, 85, 211, 223, 243, 216, 178, 111, 229, 12, 125, 46, 246, 175, 59, 219, 117, 107, 224, 161, 252, 236, 56, 222, 51, 190, 69, 228, 31, 177, 229, 7, 132, 36, 38, 197, 107, 55, 158, 104, 144, 204, 163, 248, 185, 37, 172, 42, 31, 64, 172, 24, 36, 54, 21, 126, 85, 137, 157, 172, 71, 167, 47, 8, 199, 176, 191, 117, 114, 16, 224, 119, 78, 230, 205, 1, 246, 176, 218, 61, 164, 125, 214, 249, 138, 25, 1, 189, 221, 70, 72, 68, 227, 191, 202, 89, 61, 14, 14, 87, 118, 149, 69, 59, 251, 95, 65, 95, 160, 235, 168, 132, 87, 18, 39, 176, 82, 94, 169, 113, 23, 35, 168, 77, 158, 15, 231, 113, 246, 43, 249, 89, 157, 27, 207, 29, 37, 232, 43, 209, 147, 215, 82, 5, 122, 132, 176, 252, 235, 214, 187, 153, 129, 40, 182, 255, 227, 208, 110, 126, 135, 216, 171, 22, 237, 195, 48, 226, 20, 3, 181, 83, 171, 147, 246, 179, 221, 9, 206, 87, 168, 250, 171, 12, 2, 110, 190, 46, 147, 173, 151, 111, 58, 162, 213, 36, 153, 153, 162, 158, 154, 140, 30, 49, 210, 255, 124, 106, 97, 89, 102, 246, 154, 119, 78, 53, 70, 149, 239, 3, 93, 149, 57, 5, 206, 178, 151, 219, 151, 142, 61, 22, 93, 125, 80, 248, 254, 220, 180, 238, 221, 33, 198, 123, 161, 186, 198, 7, 108, 192, 206, 208, 110, 80, 193, 14, 186, 104, 85, 238, 151, 92, 221, 44, 127, 224, 90, 211, 37, 18, 69, 35, 76, 193, 16, 211, 111, 251, 208, 127, 75, 99, 202, 41, 35, 97, 131, 156, 122, 191, 246, 109, 110, 208, 33, 147, 239, 118, 144, 166, 235, 102, 224, 193, 87, 134, 131, 71, 129, 59, 215, 85, 30, 250, 113, 239, 134, 222, 109, 112, 94, 36, 118, 120, 133, 46, 39, 131, 158, 185, 224, 40, 32, 7, 6, 14, 213, 109, 170, 98, 180, 195, 42, 35, 108, 48, 191, 107, 215, 87, 19, 208, 87, 67, 150, 0, 60, 60, 61, 181, 41, 82, 117, 12, 154, 179, 169, 125, 27, 155, 244, 135, 35, 76, 231, 102, 71, 142, 144, 235, 180, 49, 252, 8, 64, 56, 112, 9, 255, 247, 168, 126, 239, 215, 68, 105, 211, 228, 76, 38, 174, 240, 243, 143, 96, 73, 169, 97, 177, 180, 33, 184, 208, 74, 255, 163, 154, 145, 227, 86, 204, 175, 241, 147, 127, 166, 120, 228, 26, 61, 132, 216, 152, 207, 62, 185, 111, 192, 140, 150, 74, 222, 116, 167, 240, 233, 42, 145, 101, 30, 35, 222, 52, 101, 17, 66, 239, 82, 92, 31, 141, 182, 39, 65, 9, 207, 227, 181, 174, 57, 243, 58, 148, 143, 146, 220, 119, 137, 196, 51, 129, 158, 66, 157, 28, 159, 112, 142, 159, 71, 239, 85, 223, 72, 166, 127, 36, 144, 161, 138, 237, 141, 36, 170, 123, 116, 59, 158, 24, 107, 22, 29, 223, 109, 158, 79, 52, 73, 35, 222, 54, 40, 116, 248, 201, 227, 162, 238, 51, 17, 108, 127, 175, 156, 80, 162, 17, 126, 146, 71, 23, 132, 130, 226, 78, 194, 176, 189, 56, 147, 107, 119, 42, 210, 106, 192, 151, 235, 73, 245, 54, 103, 229, 103, 177, 212, 188, 156, 171, 228, 219, 207, 119, 76, 124, 187, 52, 81, 35, 185, 207, 147, 241, 96, 82, 240, 88, 103, 249, 207, 181, 99, 137, 0, 74, 159, 203, 221, 245, 168, 191, 241, 78, 173, 242, 189, 154, 109, 210, 223, 35, 144, 4, 24, 37, 24, 31, 174, 10, 246, 165, 91, 35, 103, 103, 13, 33, 253, 119, 23, 57, 238, 231, 147, 140, 105, 231, 45, 102, 83, 38, 248, 41, 83, 131, 10, 105, 37, 195, 49, 18, 215, 163, 241, 201, 21, 101, 176, 113, 97, 109, 178, 130, 250, 212, 52, 67, 24, 208, 253, 15, 85, 144, 214, 211, 180, 184, 19, 66, 121, 21, 228, 87, 133, 221, 246, 9, 91, 111, 219, 183, 102, 110, 165, 183, 81, 92, 196, 0, 148, 73, 237, 240, 240, 94, 139, 63, 96, 226, 203, 139, 81, 207, 10, 70, 203, 150, 133, 2, 128, 127, 99, 160, 198, 149, 244, 184, 174, 128, 234, 221, 211, 209, 9, 238, 66, 47, 89, 236, 88, 214, 159, 230, 127, 131, 120, 169, 226, 77, 62, 10, 141, 25, 185, 229, 235, 209, 103, 232, 1, 248, 244, 12, 2, 115, 250, 138, 107, 77, 37, 24, 131, 128, 42, 12, 87, 172, 96, 168, 220, 219, 48, 243, 211, 87, 209, 145, 209, 24, 21, 35, 120, 116, 143, 135, 239, 92, 243, 201, 230, 38, 162, 41, 77, 103, 27, 70, 12, 84, 49, 221, 41, 254, 168, 224, 111, 184, 2, 229, 191, 128, 128, 155, 139, 188, 77, 208, 173, 5, 14, 171, 70, 25, 23, 217, 53, 186, 19, 71, 133, 172, 180, 243, 25, 9, 194, 145, 44, 159, 46, 40, 11, 31, 224, 195, 129, 55, 75, 140, 246, 243, 120, 141, 27, 225, 178, 134, 62, 195, 164, 149, 182, 164, 99, 238, 9, 57, 181, 20, 236, 196, 156, 244, 182, 61, 140, 93, 142, 176, 136, 117, 185, 190, 242, 163, 89, 76, 108, 99, 26, 74, 68, 194, 196, 58, 107, 4, 162, 246, 222, 185, 241, 225, 169, 41, 77, 114, 60, 165, 118, 12, 124, 174, 93, 111, 144, 26, 199, 173, 24, 32, 150, 127, 173, 137, 224, 201, 86, 188, 192, 222, 201, 44, 197, 65, 16, 234, 112, 174, 187, 191, 47, 114, 196, 231, 101, 180, 117, 23, 109, 227, 7, 25, 152, 158, 254, 172, 165, 88, 82, 38, 129, 196, 160, 123, 181, 56, 134, 231, 171, 251, 140, 165, 11, 199, 91, 222, 60, 172, 146, 155, 107, 189, 205, 225, 167, 248, 59, 51, 34, 185, 102, 46, 57, 110, 49, 210, 143, 251, 248, 241, 182, 165, 79, 75, 34, 181, 124, 172, 241, 25, 147, 185, 17, 254, 178, 172, 21, 24, 42, 170, 19, 217, 37, 49, 125, 162, 62, 3, 114, 248, 16, 182, 4, 192, 125, 43, 46, 36, 178, 160, 159, 237, 19, 238, 159, 0, 12, 207, 204, 166, 211, 37, 56, 136, 169, 14, 39, 60, 168, 142, 34, 110, 129, 230, 41, 248, 241, 236, 211, 104, 85, 90, 186, 211, 132, 216, 42, 122, 96, 161, 145, 139, 99, 255, 219, 202, 12, 70, 165, 246, 138, 21, 122, 245, 216, 69, 164, 253, 206, 219, 195, 131, 207, 214, 225, 196, 249, 167, 104, 81, 9, 158, 254, 55, 141, 231, 87, 166, 181, 201, 236, 223, 38, 153, 74, 136, 177, 176, 63, 87, 53, 112, 97, 219, 125, 89, 128, 122, 144, 194, 176, 189, 43, 89, 94, 243, 115, 90, 123, 243, 171, 81, 131, 11, 213, 141, 154, 220, 247, 231, 211, 187, 194, 226, 217, 50, 89, 123, 185, 32, 109, 99, 90, 46, 53, 111, 37, 215, 170, 127, 148, 120, 65, 130, 134, 23, 48, 75, 21, 233, 69, 255, 14, 244, 111, 228, 120, 233, 132, 172, 2, 139, 39, 211, 118, 71, 57, 251, 175, 167, 220, 92, 169, 108, 62, 190, 207, 83, 68, 0, 149, 229, 69, 147, 248, 243, 50, 17, 123, 38, 24, 81, 38, 44, 130, 244, 135, 86, 240, 42, 29, 187, 5, 112, 68, 207, 204, 128, 79, 178, 0, 175, 72, 30, 69, 103, 246, 47, 14, 208, 142, 234, 125, 15, 93, 38, 89, 175, 91, 219, 181, 74, 93, 12, 254, 153, 74, 157, 27, 71, 35, 88, 200, 181, 178, 125, 232, 44, 83, 114, 242, 6, 78, 7, 13, 35, 222, 2, 177, 210, 227, 188, 62, 170, 221, 128, 247, 39, 133, 199, 25, 24, 126, 147, 217, 238, 21, 183, 50, 93, 61, 187, 114, 192, 107, 234, 227, 140, 173, 167, 253, 64, 90, 84, 83, 251, 14, 214, 115, 222, 233, 103, 5, 71, 118, 117, 139, 173, 157, 32, 184, 97, 144, 135, 206, 161, 108, 87, 124, 30, 89, 56, 247, 60, 96, 241, 60, 196, 81, 86, 132, 171, 214, 51, 74, 67, 125, 190, 65, 117, 109, 229, 74, 100, 92, 81, 222, 81, 118, 136, 138, 137, 85, 144, 52, 126, 52, 117, 173, 26, 208, 75, 6, 219, 100, 26, 52, 153, 200, 108, 182, 71, 119, 189, 182, 93, 43, 210, 40, 97, 56, 225, 104, 171, 154, 183, 101, 47, 79, 66, 239, 45, 180, 66, 179, 62, 110, 20, 29, 216, 104, 138, 54, 170, 8, 111, 231, 249, 158, 225, 145, 63, 203, 141, 108, 143, 88, 228, 243, 103, 139, 62, 81, 110, 142, 211, 108, 250, 249, 60, 72, 121, 99, 122, 216, 143, 50, 212, 249, 148, 193, 3, 79, 143, 143, 179, 188, 180, 169, 25, 200, 141, 157, 57, 52, 213, 169, 221, 172, 177, 225, 175, 173, 11, 76, 2, 133, 107, 95, 130, 86, 179, 92, 96, 33, 173, 94, 200, 107, 44, 105, 161, 203, 29, 233, 171, 247, 98, 250, 39, 232, 176, 97, 247, 167, 32, 125, 221, 227, 117, 57, 68, 190, 123, 89, 63, 27, 217, 124, 62, 11, 89, 249, 121, 227, 154, 163, 170, 20, 85, 14, 49, 18, 106, 50, 188, 146, 45, 8, 109, 116, 179, 217, 149, 147, 124, 167, 3, 98, 215, 46, 178, 252, 189, 156, 144, 31, 178, 137, 154, 76, 75, 125, 172, 30, 233, 190, 111, 29, 74, 182, 79, 73, 24, 71, 196, 138, 174, 51, 24, 249, 40, 252, 165, 211, 224, 176, 227, 187, 229, 27, 86, 29, 204, 194, 32, 198, 242, 152, 200, 44, 166, 238, 241, 57, 122, 105, 229, 178, 72, 8, 143, 32, 132, 85, 245, 209, 128, 239, 194, 51, 198, 88, 22, 192, 227, 221, 134, 18, 8, 178, 33, 131, 135, 50, 255, 101, 205, 114, 16, 66, 120, 242, 169, 21, 180, 31, 167, 165, 240, 152, 182, 182, 237, 225, 189, 237, 154, 233, 205, 31, 176, 255, 120, 63, 104, 40, 65, 119, 219, 0, 190, 31, 180, 189, 136, 218, 155, 142, 151, 220, 89, 71, 228, 4, 92, 123, 216, 71, 84, 87, 213, 68, 166, 248, 249, 127, 243, 63, 221, 75, 132, 220, 244, 28, 110, 227, 114, 94, 62, 174, 246, 229, 6, 144, 154, 233, 35, 124, 18, 188, 96, 182, 107, 124, 29, 182, 205, 86, 35, 59, 76, 232, 108, 161, 16, 212, 48, 153, 85, 119, 182, 209, 237, 233, 110, 215, 96, 48, 142, 22, 55, 89, 185, 76, 2, 76, 10, 222, 218, 60, 24, 209, 151, 103, 65, 53, 59, 48, 247, 39, 41, 16, 244, 141, 59, 254, 47, 106, 178, 137, 162, 21, 55, 205, 30, 101, 135, 21, 199, 53, 203, 161, 143, 137, 172, 154, 121, 216, 9, 218, 46, 111, 111, 124, 194, 50, 247, 209, 39, 39, 203, 182, 72, 114, 209, 128, 17, 201, 25, 174, 95, 172, 21, 34, 209, 177, 227, 58, 19, 199, 98, 252, 39, 172, 174, 90, 127, 53, 151, 140, 244, 152, 193, 180, 231, 77, 176, 194, 117, 32, 169, 123, 56, 245, 17, 13, 40, 15, 129, 194, 237, 107, 87, 50, 201, 147, 71, 154, 27, 187, 93, 124, 19, 145, 185, 32, 62, 22, 188, 70, 102, 144, 149, 97, 46, 172, 238, 154, 15, 28, 212, 168, 140, 169, 84, 191, 15, 154, 82, 254, 191, 113, 111, 127, 215, 175, 66, 21, 135, 217, 33, 104, 150, 208, 74, 72, 31, 209, 238, 68, 209, 44, 92, 132, 9, 99, 55, 128, 200, 206, 103, 128, 168, 73, 253, 241, 252, 200, 69, 91, 185, 186, 134, 47, 31, 90, 71, 120, 170, 113, 147, 34, 203, 60, 151, 51, 248, 70, 180, 148, 151, 164, 234, 9, 143, 195, 142, 223, 131, 141, 123, 83, 208, 133, 204, 144, 41, 45, 207, 33, 67, 119, 74, 75, 211, 131, 144, 33, 32, 189, 196, 227, 229, 119, 73, 110, 249, 136, 149, 143, 191, 234, 231, 178, 148, 10, 124, 212, 168, 18, 189, 117, 150, 69, 201, 80, 212, 253, 19, 234, 96, 47, 113, 224, 16, 105, 166, 201, 239, 27, 196, 124, 19, 144, 215, 35, 89, 102, 169, 179, 20, 234, 130, 6, 15, 153, 121, 48, 133, 76, 118, 58, 88, 175, 192, 30, 205, 114, 17, 252, 40, 132, 70, 132, 42, 203, 7, 93, 251, 107, 136, 11, 98, 114, 9, 72, 179, 149, 116, 115, 223, 102, 73, 17, 106, 40, 67, 239, 242, 213, 1, 144, 217, 232, 250, 228, 246, 175, 220, 233, 242, 157, 223, 22, 43, 189, 204, 204, 40, 184, 179, 31, 114, 96, 57, 217, 218, 37, 233, 44, 188, 249, 236, 144, 192, 36, 83, 56, 127, 109, 154, 224, 214, 87, 43, 15, 194, 3, 253, 192, 118, 202, 68, 92, 198, 146, 47, 202, 19, 238, 204, 228, 57, 173, 195, 243, 166, 10, 144, 86, 189, 102, 188, 242, 22, 86, 253, 251, 110, 10, 35, 168, 245, 240, 51, 91, 26, 217, 165, 240, 74, 40, 95, 104, 20, 106, 45, 74, 56, 95, 186, 254, 250, 59, 247, 3, 39, 182, 178, 37, 24, 132, 64, 47, 179, 159, 93, 249, 103, 79, 127, 107, 232, 0, 220, 43, 186, 235, 130, 238, 43, 199, 98, 33, 204, 52, 227, 45, 198, 10, 61, 215, 139, 95, 20, 122, 68, 92, 227, 238, 148, 79, 78, 205, 39, 238, 107, 142, 17, 70, 234, 20, 186, 23, 216, 143, 201, 244, 68, 59, 59, 219, 41, 25, 11, 201, 168, 133, 222, 97, 201, 140, 249, 186, 87, 218, 92, 208, 101, 68, 226, 78, 57, 77, 31, 205, 69, 100, 78, 80, 60, 240, 223, 172, 166, 228, 154, 73, 5, 218, 216, 97, 149, 146, 77, 77, 18, 243, 169, 155, 82, 131, 165, 46, 74, 220, 110, 237, 24, 188, 232, 238, 173, 105, 114, 111, 39, 12, 105, 164, 33, 148, 50, 61, 4, 88, 177, 196, 222, 225, 17, 233, 109, 214, 163, 8, 153, 24, 237, 251, 219, 201, 29, 213, 187, 93, 125, 235, 109, 50, 147, 170, 246, 77, 208, 82, 22, 102, 117, 187, 187, 196, 71, 199, 100, 161, 138, 199, 164, 192, 4, 138, 11, 133, 87, 165, 27, 162, 108, 53, 133, 71, 228, 125, 219, 112, 142, 89, 133, 255, 127, 185, 237, 254, 200, 14, 88, 213, 175, 48, 144, 143, 99, 133, 204, 87, 121, 30, 185, 194, 130, 70, 224, 113, 66, 235, 80, 204, 149, 234, 245, 223, 8, 130, 206, 178, 11, 87, 44, 59, 206, 154, 244, 238, 201, 121, 22, 25, 97, 200, 159, 176, 192, 160, 130, 57, 205, 233, 216, 157, 130, 115, 219, 225, 192, 199, 105, 241, 205, 15, 228, 186, 191, 0, 133, 62, 217, 224, 105, 144, 132, 238, 190, 65, 111, 14, 113, 111, 245, 114, 65, 203, 42, 41, 89, 162, 20, 11, 42, 0, 88, 235, 82, 10, 74, 92, 155, 114, 105, 74, 94, 223, 208, 112, 166, 204, 102, 143, 12, 10, 66, 188, 225, 146, 236, 84, 139, 164, 64, 128, 1, 155, 239, 117, 28, 93, 189, 32, 87, 141, 186, 123, 214, 34, 206, 121, 125, 75, 47, 8, 181, 214, 228, 24, 118, 60, 166, 92, 225, 209, 254, 28, 43, 166, 20, 58, 43, 242, 52, 62, 135, 173, 8, 145, 137, 128, 4, 221, 68, 255, 151, 33, 2, 161, 219, 227, 97, 12, 26, 239, 173, 24, 25, 202, 6, 127, 233, 50, 230, 128, 185, 157, 183, 9, 120, 84, 21, 208, 126, 121, 86, 64, 129, 64, 220, 27, 106, 3, 215, 229, 118, 128, 125, 208, 228, 105, 122, 51, 215, 106, 101, 141, 5, 121, 80, 47, 250, 233, 97, 174, 46, 187, 58, 18, 87, 220, 252, 38, 84, 220, 176, 251, 1, 107, 10, 46, 6, 158, 18, 184, 182, 239, 24, 255, 188, 85, 138, 117, 157, 52, 86, 51, 139, 49, 142, 228, 193, 127, 167, 86, 143, 198, 209, 185, 72, 226, 111, 5, 148, 228, 216, 91, 71, 31, 79, 59, 17, 10, 37, 215, 132, 227, 171, 85, 210, 123, 43, 123, 101, 109, 203, 88, 181, 158, 246, 77, 155, 245, 144, 168, 55, 239, 154, 91, 15, 42, 230, 184, 220, 144, 45, 181, 204, 165, 137, 101, 113, 208, 53, 28, 3, 215, 66, 38, 240, 53, 105, 11, 87, 1, 10, 251, 3, 231, 60, 219, 255, 240, 255, 134, 17, 23, 125, 99, 164, 74, 81, 242, 45, 81, 254, 108, 92, 241, 147, 255, 61, 165, 243, 183, 153, 14, 124, 179, 160, 155, 208, 215, 99, 165, 254, 51, 132, 35, 61, 185, 143, 123, 53, 15, 131, 33, 67, 51, 50, 71, 6, 46, 171, 187, 154, 176, 21, 5, 211, 47, 49, 169, 115, 191, 230, 0, 178, 106, 138, 252, 151, 171, 74, 21, 222, 209, 27, 143, 190, 214, 157, 59, 203, 198, 229, 208, 236, 123, 249, 236, 144, 154, 102, 13, 135, 123, 43, 155, 197, 189, 37, 225, 36, 167, 252, 205, 165, 178, 166, 119, 27, 211, 80, 119, 10, 73, 145, 76, 250, 227, 221, 148, 208, 13, 201, 234, 232, 7, 212, 35, 106, 200, 53, 218, 95, 186, 32, 215, 91, 181, 130, 80, 176, 118, 112, 193, 60, 181, 52, 239, 162, 220, 125, 51, 103, 70, 187, 169, 202, 237, 63, 98, 252, 181, 13, 8, 205, 231, 247, 225, 159, 35, 214, 228, 251, 96, 189, 34, 160, 45, 211, 231, 89, 147, 15, 251, 38, 143, 175, 140, 204, 193, 223, 176, 146, 153, 146, 9, 177, 225, 177, 150, 31, 168, 239, 85, 91, 176, 55, 42, 211, 212, 24, 218, 12, 148, 149, 14, 189, 197, 19, 116, 136, 13, 121, 148, 107, 203, 181, 108, 103, 228, 163, 90, 170, 129, 173, 54, 77, 132, 199, 230, 207, 3, 210, 19, 38, 53, 157, 226, 232, 93, 98, 187, 68, 49, 162, 235, 191, 136, 54, 184, 35, 156, 184, 213, 227, 124, 149, 149, 158, 153, 5, 13, 93, 162, 12, 201, 143, 78, 28, 130, 51, 124, 145, 32, 172, 56, 28, 239, 233, 193, 165, 221, 238, 201, 187, 8, 38, 117, 240, 94, 127, 181, 253, 65, 76, 103, 108, 185, 174, 24, 3, 237, 10, 255, 138, 180, 52, 64, 148, 85, 111, 60, 114, 158, 230, 240, 31, 234, 222, 228, 221, 118, 53, 229, 83, 238, 32, 82, 165, 213, 129, 0, 45, 72, 47, 168, 171, 146, 255, 75, 94, 61, 247, 149, 226, 8, 133, 21, 141, 173, 155, 245, 242, 86, 190, 145, 253, 250, 100, 191, 160, 89, 91, 153, 154, 12, 37, 156, 240, 228, 152, 182, 126, 145, 255, 218, 53, 76, 188, 128, 122, 219, 9, 136, 213, 104, 156, 251, 10, 129, 252, 181, 36, 80, 10, 53, 239, 201, 118, 1, 43, 203, 73, 205, 75, 31, 65, 105, 95, 77, 237, 118, 7, 8, 230, 33, 137, 91, 15, 20, 14, 81, 240, 238, 228, 97, 94, 236, 67, 139, 68, 175, 246, 54, 24, 147, 156, 50, 60, 8, 143, 117, 140, 201, 156, 220, 66, 150, 112, 140, 9, 42, 254, 56, 105, 172, 209, 109, 251, 173, 27, 14, 70, 232, 156, 111, 254, 140, 210, 225, 2, 93, 42, 80, 26, 124, 7, 186, 126, 62, 123, 110, 31, 7, 92, 76, 15, 243, 2, 88, 26, 198, 49, 112, 12, 231, 73, 193, 209, 16, 135, 255, 130, 89, 121, 114, 50, 159, 171, 200, 9, 143, 238, 116, 200, 205, 189, 66, 55, 41, 53, 38, 132, 180, 124, 237, 122, 240, 126, 212, 206, 212, 184, 176, 21, 158, 142, 248, 104, 87, 78, 234, 89, 157, 89, 10, 213, 159, 189, 107, 68, 81, 226, 205, 63, 163, 13, 209, 12, 22, 230, 126, 33, 91, 92, 184, 190, 140, 35, 78, 232, 157, 110, 172, 32, 111, 78, 103, 128, 145, 250, 214, 60, 147, 233, 249, 233, 20, 254, 89, 80, 59, 240, 218, 55, 130, 29, 113, 79, 209, 238, 230, 239, 97, 177, 35, 24, 248, 236, 63, 83, 76, 53, 178, 56, 206, 154, 34, 143, 38, 248, 195, 254, 131, 92, 88, 94, 88, 55, 100, 97, 253, 5, 147, 241, 139, 30, 216, 41, 93, 194, 145, 171, 151, 33, 184, 157, 173, 40, 195, 129, 211, 113, 71, 211, 233, 83, 4, 120, 92, 142, 87, 106, 83, 194, 30, 177, 176, 249, 79, 223, 222, 33, 103, 226, 169, 158, 26, 124, 74, 47, 167, 204, 103, 250, 94, 9, 57, 157, 103, 210, 234, 85, 2, 57, 105, 89, 255, 185, 219, 219, 167, 253, 64, 101, 191, 45, 5, 118, 61, 202, 237, 254, 108, 161, 182, 68, 141, 53, 233, 213, 255, 177, 148, 45, 53, 113, 35, 123, 172, 121, 161, 252, 47, 241, 239, 46, 112, 77, 131, 188, 38, 2, 62, 202, 94, 197, 229, 121, 25, 117, 225, 41, 224, 90, 1, 246, 164, 115, 51, 201, 68, 176, 36, 52, 38, 193, 137, 216, 65, 151, 219, 131, 57, 73, 75, 22, 69, 96, 232, 49, 212, 112, 195, 7, 54, 135, 151, 112, 98, 177, 91, 222, 218, 145, 221, 65, 180, 113, 252, 77, 244, 235, 172, 135, 220, 112, 95, 120, 99, 75, 180, 227, 174, 16, 34, 129, 34, 230, 26, 31, 165, 100, 163, 41, 4, 141, 229, 16, 69, 214, 89, 205, 117, 122, 7, 20, 113, 188, 91, 75, 215, 122, 229, 30, 243, 29, 106, 11, 16, 67, 174, 181, 25, 44, 27, 158, 43, 145, 9, 0, 206, 238, 130, 70, 4, 48, 3, 243, 88, 107, 33, 82, 51, 94, 64, 252, 146, 118, 128, 112, 138, 63, 243, 171, 101, 96, 91, 19, 231, 176, 29, 82, 187, 45, 101, 238, 234, 169, 117, 81, 86, 250, 37, 171, 195, 115, 76, 245, 107, 190, 70, 55, 26, 5, 102, 118, 167, 243, 77, 11, 221, 43, 131, 11, 215, 191, 128, 215, 84, 248, 6, 140, 182, 176, 38, 124, 24, 173, 87, 41, 24, 96, 178, 208, 162, 27, 50, 205, 58, 81, 137, 111, 253, 166, 159, 51, 48, 246, 190, 129, 131, 202, 7, 69, 199, 174, 94, 142, 218, 132, 128, 143, 58, 192, 9, 199, 221, 85, 107, 114, 99, 120, 171, 201, 235, 189, 17, 39, 59, 215, 26, 220, 61, 147, 22, 141, 191, 90, 78, 177, 162, 15, 182, 182, 153, 195, 178, 97, 219, 12, 221, 60, 224, 176, 130, 117, 124, 77, 238, 202, 250, 115, 207, 176, 254, 232, 224, 88, 229, 152, 42, 50, 23, 117, 199, 66, 195, 78, 228, 195, 73, 209, 161, 66, 49, 160, 135, 32, 84, 245, 58, 45, 152, 60, 234, 90, 78, 118, 54, 233, 206, 219, 177, 29, 255, 202, 144, 46, 20, 36, 225, 121, 182, 152, 53, 103, 25, 3, 0, 35, 133, 31, 115, 30, 222, 44, 57, 199, 194, 118, 190, 94, 230, 246, 187, 193, 230, 32, 164, 154, 104, 65, 129, 219, 165, 71, 9, 51, 245, 40, 204, 92, 169, 104, 185, 211, 238, 248, 113, 212, 201, 119, 252, 3, 76, 226, 229, 147, 206, 102, 214, 100, 216, 138, 236, 106, 57, 163, 13, 186, 140, 206, 227, 98, 187, 186, 67, 248, 75, 15, 236, 252, 53, 174, 186, 105, 125, 11, 76, 95, 90, 31, 145, 111, 80, 220, 176, 80, 51, 57, 31, 117, 69, 115, 96, 85, 236, 154, 226, 74, 148, 70, 192, 49, 42, 243, 93, 8, 169, 214, 148, 88, 190, 41, 146, 187, 58, 233, 152, 235, 74, 198, 28, 10, 143, 226, 200, 18, 239, 174, 180, 164, 180, 211, 143, 94, 238, 234, 24, 218, 225, 122, 154, 99, 200, 220, 210, 152, 201, 201, 224, 102, 46, 4, 29, 10, 171, 51, 153, 154, 3, 32, 4, 170, 1, 30, 193, 44, 172, 10, 158, 169, 104, 113, 230, 155, 18, 247, 123, 84, 200, 5, 90, 221, 104, 234, 215, 103, 55, 21, 246, 139, 100, 249, 102, 36, 207, 220, 131, 53, 202, 222, 164, 133, 92, 130, 44, 22, 52, 244, 231, 55, 35, 51, 13, 27, 244, 188, 135, 116, 139, 207, 61, 182, 63, 154, 252, 157, 183, 223, 212, 124, 128, 81, 24, 166, 148, 48, 128, 83, 209, 215, 155, 117, 77, 203, 241, 2, 45, 48, 56, 152, 255, 234, 243, 82, 203, 157, 76, 190, 65, 157, 106, 183, 238, 201, 85, 168, 61, 227, 165, 97, 49, 23, 79, 218, 226, 49, 229, 250, 207, 203, 196, 239, 214, 223, 80, 245, 241, 252, 34, 52, 111, 50, 192, 4, 167, 134, 193, 118, 10, 193, 127, 142, 172, 191, 42, 159, 54, 57, 172, 152, 249, 214, 175, 46, 168, 4, 150, 196, 188, 235, 200, 148, 123, 137, 155, 99, 145, 230, 187, 213, 30, 158, 119, 10, 162, 49, 2, 244, 71, 179, 20, 60, 155, 84, 122, 163, 195, 161, 38, 154, 255, 153, 39, 176, 90, 204, 218, 209, 14, 244, 129, 223, 7, 182, 113, 93, 184, 141, 114, 162, 150, 154, 125, 186, 147, 190, 122, 238, 135, 218, 162, 66, 10, 252, 194, 246, 0, 16, 28, 56, 38, 18, 23, 207, 200, 219, 162, 22, 52, 167, 146, 133, 109, 33, 227, 102, 58, 190, 218, 56, 117, 54, 81, 100, 58, 84, 188, 154, 191, 72, 163, 180, 154, 99, 163, 243, 63, 183, 71, 31, 70, 227, 185, 156, 170, 73, 187, 39, 75, 175, 162, 53, 17, 238, 127, 142, 125, 242, 57, 97, 247, 168, 125, 249, 181, 240, 185, 17, 111, 110, 7, 84, 190, 90, 94, 51, 220, 109, 55, 50, 134, 202, 157, 165, 228, 254, 58, 173, 80, 45, 83, 249, 54, 37, 157, 241, 189, 87, 155, 82, 53, 64, 16, 128, 78, 86, 245, 157, 247, 97, 83, 24, 110, 75, 70, 133, 235, 130, 25, 202, 50, 248, 133, 81, 146, 196, 81, 71, 156, 208, 44, 123, 174, 109, 75, 250, 174, 7, 159, 254, 59, 142, 27, 226, 52, 239, 133, 228, 83, 109, 125, 3, 201, 196, 97, 18, 72, 140, 160, 143, 116, 148, 88, 238, 229, 114, 187, 59, 158, 109, 169, 140, 215, 156, 31, 69, 193, 153, 36, 83, 230, 222, 112, 200, 127, 191, 86, 247, 150, 174, 75, 162, 73, 158, 65, 139, 167, 251, 132, 71, 143, 48, 182, 200, 84, 19, 95, 10, 207, 173, 144, 145, 150, 189, 6, 36, 162, 252, 184, 10, 125, 35, 123, 57, 79, 135, 236, 100, 35, 217, 156, 194, 48, 53, 16, 18, 158, 250, 86, 109, 167, 215, 243, 59, 205, 47, 80, 119, 164, 226, 234, 209, 232, 243, 221, 235, 124, 12, 248, 175, 121, 158, 41, 135, 4, 13, 209, 107, 71, 132, 155, 80, 19, 187, 115, 69, 54, 7, 116, 133, 193, 32, 87, 67, 158, 159, 46, 247, 216, 43, 131, 139, 66, 237, 134, 187, 118, 156, 222, 245, 96, 19, 236, 167, 10, 185, 68, 36, 119, 59, 32, 109, 73, 103, 121, 95, 60, 63, 164, 85, 0, 137, 137, 43, 182, 179, 251, 24, 3, 227, 46, 119, 130, 159, 238, 187, 190, 176, 251, 196, 208, 253, 83, 239, 97, 246, 206, 55, 241, 212, 160, 208, 61, 201, 1, 51, 116, 204, 242, 107, 49, 236, 204, 195, 161, 199, 192, 213, 147, 220, 31, 38, 251, 82, 248, 101, 252, 232, 13, 154, 79, 30, 210, 249, 71, 146, 110, 188, 57, 36, 199, 171, 112, 118, 57, 6, 238, 65, 157, 213, 21, 69, 203, 28, 159, 89, 174, 47, 53, 168, 108, 69, 167, 189, 115, 95, 75, 111, 177, 217, 138, 65, 7, 122, 200, 6, 50, 172, 200, 26, 219, 25, 226, 19, 181, 104, 247, 172, 39, 83, 72, 175, 44, 205, 110, 142, 13, 45, 177, 160, 129, 211, 160, 192, 18, 247, 48, 204, 63, 175, 251, 29, 213, 241, 67, 18, 39, 191, 195, 86, 71, 82, 185, 144, 154, 24, 55, 2, 149, 41, 60, 57, 96, 5, 50, 213, 72, 118, 71, 115, 114, 167, 251, 173, 174, 150, 44, 200, 61, 48, 173, 177, 74, 132, 101, 28, 51, 23, 142, 59, 141, 112, 117, 71, 135, 60, 82, 94, 72, 235, 88, 189, 218, 133, 218, 128, 78, 152, 208, 110, 32, 115, 213, 23, 104, 129, 14, 63, 49, 203, 148, 141, 184, 183, 72, 83, 51, 247, 143, 244, 210, 136, 185, 109, 169, 18, 8, 191, 224, 160, 58, 224, 229, 131, 13, 37, 1, 151, 163, 139, 38, 36, 55, 119, 20, 178, 235, 231, 96, 127, 234, 142, 246, 6, 153, 45, 112, 34, 108, 72, 124, 19, 62, 104, 155, 86, 96, 196, 136, 62, 105, 174, 69, 224, 88, 151, 202, 146, 95, 114, 16, 121, 124, 117, 201, 192, 133, 130, 111, 195, 51, 69, 131, 60, 94, 52, 155, 67, 63, 222, 121, 45, 9, 187, 71, 231, 141, 29, 241, 64, 17, 88, 52, 27, 28, 1, 111, 214, 77, 250, 67, 120, 1, 223, 12, 172, 121, 80, 211, 194, 179, 36, 80, 220, 37, 37, 79, 30, 60, 223, 43, 8, 59, 2, 48, 107, 102, 114, 145, 165, 128, 254, 60, 42, 126, 244, 164, 41, 85, 104, 238, 249, 246, 50, 183, 81, 50, 216, 123, 69, 220, 69, 151, 159, 33, 116, 227, 40, 32, 38, 114, 210, 161, 152, 12, 64, 88, 9, 148, 144, 127, 18, 161, 182, 188, 149, 15, 128, 196, 15, 76, 160, 148, 155, 1, 107, 20, 145, 118, 57, 214, 29, 58, 238, 60, 91, 98, 194, 237, 99, 176, 212, 25, 175, 67, 70, 186, 43, 60, 111, 114, 8, 127, 97, 65, 71, 178, 186, 4, 92, 248, 13, 124, 142, 24, 254, 149, 61, 77, 72, 104, 229, 5, 252, 2, 163, 116, 223, 31, 18, 73, 244, 37, 84, 39, 207, 66, 132, 212, 130, 78, 3, 241, 53, 67, 32, 233, 66, 19, 41, 250, 152, 128, 66, 5, 173, 150, 64, 231, 66, 52, 88, 122, 49, 81, 248, 38, 205, 51, 78, 12, 172, 106, 117, 85, 11, 166, 110, 200, 61, 179, 86, 171, 158, 44, 239, 161, 194, 201, 54, 86, 165, 201, 85, 176, 145, 241, 192, 122, 169, 210, 64, 151, 249, 226, 174, 54, 1, 95, 205, 151, 82, 208, 239, 90, 161, 135, 90, 109, 116, 132, 249, 95, 51, 80, 243, 108, 66, 248, 219, 214, 152, 83, 95, 89, 98, 158, 83, 184, 169, 28, 114, 126, 60, 70, 127, 15, 23, 122, 36, 145, 74, 116, 209, 9, 195, 224, 155, 52, 95, 97, 130, 195, 209, 154, 151, 3, 31, 197, 180, 116, 34, 202, 31, 94, 28, 248, 207, 253, 205, 149, 141, 92, 70, 125, 129, 91, 165, 74, 108, 118, 166, 223, 116, 86, 56, 71, 185, 8, 190, 195, 234, 234, 102, 60, 192, 108, 46, 85, 0, 193, 213, 170, 125, 219, 229, 56, 126, 23, 65, 153, 175, 255, 116, 51, 83, 24, 231, 114, 153, 209, 115, 120, 124, 110, 89, 136, 35, 8, 79, 201, 85, 4, 192, 230, 211, 58, 167, 150, 207, 248, 61, 79, 111, 245, 6, 120, 220, 7, 196, 73, 128, 201, 180, 136, 220, 69, 43, 176, 75, 177, 92, 201, 40, 167, 30, 199, 86, 46, 237, 237, 238, 57, 230, 6, 204, 81, 242, 8, 19, 2, 41, 200, 228, 176, 144, 240, 235, 19, 166, 159, 195, 118, 199, 116, 108, 125, 50, 162, 205, 45, 40, 254, 182, 163, 134, 201, 94, 12, 97, 219, 91, 118, 73, 229, 208, 92, 221, 11, 186, 128, 118, 192, 200, 123, 51, 225, 235, 167, 63, 201, 9, 35, 196, 86, 47, 59, 224, 31, 14, 222, 68, 97, 3, 55, 18, 118, 253, 30, 144, 214, 33, 236, 194, 137, 60, 23, 62, 56, 10, 99, 209, 144, 196, 207, 139, 248, 149, 42, 155, 135, 114, 99, 67, 141, 52, 132, 157, 182, 183, 34, 63, 235, 218, 46, 76, 187, 61, 26, 213, 204, 30, 97, 16, 181, 136, 107, 25, 77, 33, 148, 114, 193, 56, 171, 220, 73, 176, 56, 17, 213, 112, 231, 206, 86, 141, 121, 148, 12, 118, 135, 148, 189, 48, 50, 35, 217, 250, 25, 117, 230, 201, 7, 212, 141, 218, 15, 180, 41, 189, 50, 220, 46, 38, 178, 253, 157, 150, 245, 204, 112, 25, 251, 15, 202, 180, 245, 75, 197, 1, 96, 174, 150, 228, 247, 49, 209, 13, 53, 242, 40, 0, 21, 187, 121, 23, 2, 192, 186, 203, 67, 96, 120, 27, 27, 20, 184, 103, 143, 205, 120, 81, 58, 19, 53, 17, 203, 103, 235, 188, 203, 111, 153, 87, 171, 163, 133, 112, 170, 178, 28, 104, 58, 228, 166, 133, 164, 3, 183, 102, 11, 178, 207, 30, 127, 195, 87, 174, 159, 176, 59, 161, 138, 184, 180, 131, 10, 172, 151, 109, 17, 94, 82, 195, 159, 207, 26, 95, 205, 93, 208, 91, 3, 68, 249, 142, 182, 88, 246, 108, 214, 71, 112, 188, 253, 188, 124, 212, 77, 6, 241, 153, 114, 90, 237, 248, 208, 105, 240, 124, 141, 67, 52, 16, 18, 97, 32, 139, 177, 25, 172, 241, 3, 95, 48, 98, 149, 61, 48, 47, 108, 113, 116, 168, 27, 161, 53, 76, 1, 213, 71, 180, 66, 90, 21, 213, 73, 97, 193, 173, 32, 165, 174, 72, 72, 106, 227, 227, 111, 255, 82, 165, 235, 173, 155, 13, 167, 196, 44, 239, 110, 240, 7, 91, 18, 104, 125, 86, 108, 204, 194, 71, 227, 5, 212, 188, 45, 245, 110, 141, 3, 35, 134, 85, 7, 85, 82, 51, 40, 254, 29, 10, 70, 30, 50, 147, 37, 19, 73, 153, 228, 74, 223, 150, 73, 42, 67, 162, 20, 140, 239, 26, 169, 146, 11, 140, 37, 67, 203, 27, 175, 118, 26, 77, 204, 73, 249, 230, 105, 18, 131, 149, 51, 81, 82, 227, 66, 92, 255, 98, 124, 80, 229, 76, 42, 174, 41, 161, 21, 84, 221, 0, 207, 194, 244, 58, 28, 185, 212, 133, 168, 224, 66, 76, 249, 41, 153, 109, 136, 24, 110, 24, 53, 222, 201, 222, 47, 197, 162, 254, 195, 247, 161, 139, 190, 109, 70, 21, 162, 165, 190, 197, 236, 51, 21, 217, 200, 192, 25, 49, 215, 247, 48, 49, 215, 127, 19, 226, 207, 201, 58, 238, 121, 34, 0, 168, 249, 247, 17, 151, 223, 23, 254, 53, 155, 153, 40, 241, 61, 37, 113, 210, 213, 57, 42, 221, 31, 64, 74, 183, 35, 37, 20, 103, 55, 242, 2, 102, 15, 129, 159, 99, 162, 153, 92, 218, 227, 222, 93, 185, 41, 249, 20, 134, 9, 207, 160, 167, 9, 176, 141, 250, 96, 17, 49, 152, 83, 175, 160, 229, 224, 205, 120, 56, 229, 92, 0, 207, 91, 112, 135, 156, 205, 83, 213, 4, 186, 109, 184, 151, 25, 244, 109, 250, 163, 71, 56, 97, 104, 53, 9, 200, 38, 35, 68, 57, 222, 122, 17, 231, 228, 196, 81, 65, 132, 75, 135, 75, 190, 242, 22, 251, 140, 26, 56, 164, 135, 137, 228, 79, 78, 231, 205, 133, 79, 107, 125, 254, 152, 220, 193, 114, 77, 4, 53, 106, 156, 239, 145, 143, 211, 183, 44, 165, 116, 213, 173, 183, 21, 69, 90, 144, 226, 254, 122, 98, 164, 215, 238, 65, 2, 87, 221, 118, 59, 214, 151, 1, 158, 85, 133, 172, 37, 20, 255, 140, 201, 213, 51, 225, 8, 105, 164, 2, 160, 81, 14, 243, 4, 189, 4, 231, 148, 204, 234, 24, 70, 197, 138, 166, 102, 110, 228, 100, 134, 77, 201, 90, 70, 64, 204, 206, 65, 45, 215, 5, 93, 27, 180, 158, 229, 2, 69, 154, 165, 43, 252, 82, 93, 157, 204, 29, 110, 39, 186, 4, 155, 191, 184, 51, 221, 230, 123, 35, 15, 205, 196, 43, 11, 186, 146, 96, 227, 25, 4, 39, 196, 216, 97, 28, 209, 134, 51, 118, 24, 131, 57, 135, 238, 189, 214, 90, 87, 75, 175, 215, 20, 26, 91, 64, 173, 14, 40, 86, 14, 25, 227, 0, 14, 58, 13, 105, 59, 90, 92, 66, 190, 192, 20, 24, 191, 82, 81, 160, 84, 190, 42, 27, 255, 125, 68, 107, 102, 69, 231, 36, 235, 219, 181, 7, 120, 94, 193, 122, 26, 89, 76, 14, 14, 87, 7, 11, 121, 155, 87, 108, 35, 84, 169, 119, 28, 210, 17, 236, 23, 235, 86, 23, 147, 241, 92, 184, 149, 94, 227, 138, 22, 203, 229, 100, 23, 46, 203, 31, 224, 16, 18, 111, 248, 147, 200, 33, 188, 53, 118, 22, 176, 244, 162, 234, 193, 78, 10, 51, 21, 85, 14, 199, 52, 96, 155, 20, 131, 117, 125, 123, 79, 45, 253, 18, 202, 78, 30, 25, 94, 43, 68, 110, 162, 101, 66, 34, 64, 76, 11, 209, 203, 228, 153, 120, 89, 3, 131, 177, 63, 136, 10, 95, 159, 109, 103, 164, 178, 12, 112, 10, 122, 151, 213, 168, 49, 143, 166, 4, 136, 13, 156, 153, 23, 75, 217, 240, 154, 222, 22, 186, 29, 90, 80, 150, 158, 131, 192, 76, 224, 134, 42, 122, 155, 25, 75, 218, 12, 156, 161, 75, 252, 118, 148, 117, 237, 210, 118, 1, 143, 223, 238, 146, 37, 31, 63, 56, 157, 103, 105, 202, 153, 51, 154, 237, 31, 244, 122, 55, 83, 62, 244, 213, 145, 22, 24, 46, 50, 204, 29, 136, 71, 0, 193, 210, 182, 136, 142, 242, 87, 162, 243, 228, 7, 203, 128, 215, 46, 82, 237, 57, 21, 67, 36, 86, 132, 113, 228, 162, 139, 117, 46, 118, 203, 127, 172, 120, 236, 139, 163, 181, 254, 85, 94, 88, 196, 196, 95, 158, 195, 202, 51, 203, 62, 251, 253, 87, 227, 168, 144, 58, 91, 142, 57, 205, 80, 241, 123, 111, 99, 92, 85, 231, 178, 139, 31, 18, 178, 116, 238, 10, 174, 228, 224, 58, 193, 180, 136, 55, 246, 84, 93, 232, 152, 40, 134, 241, 224, 110, 212, 251, 69, 56, 61, 145, 137, 217, 116, 159, 234, 83, 81, 216, 220, 115, 99, 8, 11, 125, 187, 60, 59, 39, 75, 151, 182, 166, 30, 198, 177, 196, 163, 150, 137, 24, 239, 237, 119, 15, 111, 164, 31, 92, 135, 239, 69, 92, 69, 97, 4, 22, 56, 48, 192, 54, 153, 187, 165, 41, 172, 119, 38, 251, 127, 194, 72, 8, 136, 135, 123, 220, 212, 211, 18, 104, 234, 152, 207, 135, 151, 91, 207, 83, 129, 136, 178, 232, 201, 143, 147, 191, 55, 34, 186, 21, 35, 218, 8, 91, 241, 8, 127, 175, 150, 117, 138, 212, 71, 154, 254, 88, 183, 133, 161, 171, 172, 50, 16, 152, 143, 217, 19, 146, 39, 237, 4, 30, 168, 126, 148, 176, 138, 211, 141, 66, 26, 102, 191, 185, 158, 2, 36, 126, 43, 163, 42, 2, 173, 144, 113, 147, 252, 40, 230, 20, 78, 229, 1, 243, 138, 83, 118, 194, 249, 112, 131, 243, 179, 232, 248, 112, 130, 132, 58, 117, 44, 237, 167, 245, 48, 97, 205, 251, 44, 242, 152, 113, 170, 18, 126, 134, 178, 238, 148, 117, 196, 13, 41, 95, 142, 96, 100, 224, 69, 19, 161, 93, 115, 229, 76, 215, 175, 14, 190, 32, 68, 176, 111, 178, 217, 239, 185, 99, 163, 60, 102, 26, 50, 173, 156, 77, 23, 140, 18, 246, 203, 34, 224, 30, 221, 254, 83, 240, 44, 243, 247, 66, 185, 72, 186, 135, 47, 141, 14, 242, 137, 229, 150, 123, 130, 125, 140, 43, 93, 244, 226, 196, 72, 12, 239, 247, 195, 239, 35, 219, 167, 91, 96, 254, 48, 163, 14, 191, 18, 237, 43, 197, 140, 41, 50, 60, 246, 28, 84, 161, 81, 54, 18, 66, 59, 175, 226, 146, 146, 239, 253, 207, 63, 2, 47, 216, 116, 34, 6, 42, 5, 173, 59, 77, 85, 199, 149, 58, 148, 182, 122, 86, 211, 55, 62, 58, 54, 237, 223, 254, 69, 58, 220, 62, 80, 160, 155, 163, 210, 69, 99, 20, 5, 237, 144, 155, 244, 75, 35, 194, 123, 221, 211, 224, 141, 32, 216, 111, 39, 48, 152, 47, 158, 17, 239, 0, 118, 202, 90, 24, 214, 139, 34, 36, 157, 247, 161, 208, 96, 194, 63, 83, 165, 162, 45, 60, 138, 231, 212, 247, 24, 255, 2, 115, 217, 110, 211, 77, 74, 65, 186, 14, 91, 99, 17, 207, 160, 119, 66, 190, 203, 84, 213, 50, 186, 53, 69, 1, 203, 161, 254, 27, 14, 16, 145, 153, 145, 107, 132, 199, 158, 149, 191, 200, 243, 213], - [187, 38, 166, 133, 116, 176, 160, 194, 63, 125, 118, 168, 191, 127, 143, 96, 81, 181, 25, 220, 210, 105, 172, 165, 158, 131, 137, 170, 51, 76, 219, 38, 177, 121, 9, 118, 208, 144, 224, 163, 20, 161, 192, 109, 138, 143, 122, 99, 25, 32, 96, 96, 144, 126, 193, 4, 35, 212, 178, 242, 137, 167, 10, 161, 32, 28, 217, 29, 133, 22, 159, 67, 198, 10, 130, 125, 198, 250, 65, 217, 128, 91, 56, 4, 118, 249, 68, 104, 44, 190, 7, 55, 51, 12, 129, 173, 204, 195, 235, 10, 200, 3, 242, 109, 76, 29, 0, 229, 179, 120, 215, 163, 147, 160, 214, 132, 75, 197, 198, 254, 5, 78, 116, 155, 7, 121, 47, 47, 196, 35, 36, 19, 36, 169, 94, 33, 157, 126, 55, 107, 123, 215, 83, 44, 121, 71, 189, 188, 84, 222, 6, 15, 160, 234, 0, 26, 55, 63, 235, 126, 72, 12, 201, 181, 23, 79, 95, 167, 93, 114, 59, 243, 98, 82, 156, 68, 17, 139, 139, 49, 149, 82, 182, 66, 95, 25, 28, 96, 199, 160, 121, 249, 147, 38, 17, 132, 243, 207, 222, 123, 229, 128, 119, 136, 54, 155, 160, 35, 130, 84, 224, 111, 118, 13, 96, 60, 226, 130, 130, 147, 39, 116, 206, 6, 214, 172, 130, 104, 235, 243, 216, 254, 120, 190, 221, 126, 199, 92, 78, 174, 179, 68, 178, 174, 78, 230, 228, 77, 21, 232, 40, 225, 200, 239, 237, 85, 75, 138, 145, 26, 218, 91, 80, 251, 79, 222, 31, 84, 40, 72, 167, 255, 43, 16, 232, 220, 102, 175, 41, 247, 160, 8, 244, 215, 11, 132, 252, 116, 89, 9, 108, 76, 49, 10, 111, 107, 124, 46, 69, 220, 225, 73, 151, 189, 127, 182, 42, 189, 186, 118, 41, 63, 247, 15, 122, 105, 3, 122, 172, 180, 40, 214, 186, 252, 12, 126, 81, 254, 9, 82, 242, 57, 48, 233, 83, 253, 242, 94, 239, 129, 244, 191, 115, 200, 178, 100, 209, 64, 237, 186, 73, 189, 60, 152, 75, 144, 179, 185, 151, 16, 191, 81, 235, 241, 161, 188, 180, 189, 226, 88, 227, 59, 116, 78, 74, 131, 141, 52, 179, 253, 192, 0, 236, 73, 148, 108, 241, 157, 79, 193, 242, 228, 177, 83, 135, 146, 156, 198, 177, 144, 40, 15, 239, 206, 94, 11, 47, 86, 200, 45, 161, 14, 211, 114, 31, 218, 79, 133, 102, 21, 13, 115, 100, 129, 37, 164, 29, 1, 217, 82, 203, 188, 10, 242, 132, 254, 171, 71, 58, 98, 54, 56, 75, 208, 228, 31, 99, 198, 246, 193, 81, 71, 119, 136, 184, 98, 205, 55, 167, 207, 240, 132, 153, 173, 252, 13, 25, 61, 187, 198, 76, 145, 156, 63, 239, 183, 136, 48, 203, 112, 18, 238, 138, 29, 91, 35, 245, 19, 214, 15, 114, 119, 230, 125, 76, 128, 31, 184, 40, 209, 210, 69, 84, 169, 254, 217, 207, 201, 122, 27, 158, 33, 214, 81, 237, 233, 163, 106, 133, 135, 89, 220, 149, 57, 44, 129, 133, 104, 24, 141, 168, 246, 183, 117, 138, 240, 97, 195, 79, 49, 214, 52, 245, 185, 36, 242, 150, 32, 126, 225, 3, 124, 233, 164, 234, 127, 89, 114, 57, 128, 104, 39, 89, 57, 190, 177, 43, 209, 48, 0, 105, 111, 27, 187, 248, 80, 118, 103, 228, 26, 165, 234, 247, 183, 79, 255, 47, 145, 43, 2, 20, 81, 97, 145, 108, 202, 27, 75, 132, 111, 12, 212, 51, 8, 102, 92, 161, 88, 79, 53, 51, 77, 13, 196, 201, 24, 180, 17, 32, 197, 166, 232, 78, 246, 145, 33, 195, 207, 112, 1, 226, 74, 4, 92, 174, 35, 15, 148, 32, 70, 81, 56, 21, 233, 131, 231, 163, 73, 123, 229, 129, 210, 152, 151, 241, 91, 142, 70, 84, 99, 168, 66, 130, 84, 103, 152, 70, 101, 57, 225, 85, 124, 172, 126, 4, 0, 133, 180, 72, 93, 211, 67, 55, 235, 253, 12, 205, 129, 83, 6, 134, 142, 38, 245, 209, 143, 50, 96, 20, 104, 66, 131, 94, 180, 43, 6, 186, 254, 130, 227, 175, 30, 205, 77, 159, 25, 65, 13, 6, 117, 140, 100, 133, 84, 42, 113, 65, 12, 211, 33, 17, 160, 21, 68, 148, 168, 64, 112, 14, 169, 137, 33, 104, 14, 113, 62, 96, 30, 94, 53, 54, 51, 80, 44, 32, 132, 3, 134, 142, 5, 34, 197, 175, 162, 232, 139, 194, 108, 249, 161, 124, 117, 194, 122, 53, 21, 70, 107, 158, 118, 147, 21, 21, 147, 42, 229, 67, 151, 140, 246, 28, 225, 121, 71, 26, 57, 206, 84, 6, 1, 121, 154, 176, 153, 80, 212, 51, 211, 43, 162, 229, 136, 52, 80, 50, 162, 75, 192, 168, 10, 130, 106, 251, 254, 116, 124, 199, 235, 8, 38, 23, 248, 231, 185, 39, 8, 253, 82, 13, 84, 135, 137, 30, 78, 229, 134, 127, 63, 203, 123, 67, 184, 212, 240, 176, 39, 58, 107, 231, 133, 50, 229, 233, 223, 61, 222, 121, 90, 221, 57, 19, 126, 97, 108, 106, 53, 6, 41, 76, 48, 118, 80, 86, 104, 194, 253, 250, 11, 171, 75, 81, 162, 134, 179, 39, 172, 0, 219, 193, 163, 109, 32, 248, 32, 63, 241, 9, 51, 19, 20, 57, 175, 187, 137, 48, 138, 144, 252, 149, 205, 164, 116, 7, 51, 255, 134, 91, 179, 152, 250, 170, 6, 208, 36, 113, 129, 54, 4, 194, 34, 19, 159, 225, 9, 164, 35, 209, 74, 43, 8, 183, 249, 212, 237, 17, 234, 123, 77, 245, 163, 44, 139, 140, 225, 93, 35, 135, 71, 48, 64, 26, 92, 16, 96, 124, 176, 72, 84, 202, 12, 42, 152, 84, 41, 48, 81, 42, 136, 61, 239, 73, 145, 107, 222, 218, 98, 215, 127, 210, 142, 191, 234, 8, 31, 232, 162, 3, 53, 82, 113, 134, 88, 19, 55, 202, 224, 149, 100, 80, 244, 135, 248, 77, 35, 223, 84, 123, 23, 165, 84, 211, 68, 27, 156, 163, 27, 117, 241, 61, 15, 123, 185, 176, 180, 208, 192, 222, 103, 68, 239, 95, 66, 170, 165, 22, 237, 226, 200, 46, 237, 184, 79, 0, 68, 241, 147, 46, 72, 243, 169, 9, 139, 178, 227, 172, 37, 196, 186, 54, 11, 153, 124, 160, 86, 80, 173, 231, 91, 95, 216, 230, 200, 12, 45, 163, 9, 61, 228, 244, 3, 140, 96, 139, 89, 16, 54, 222, 156, 254, 1, 13, 164, 3, 74, 58, 158, 164, 190, 29, 186, 246, 226, 94, 160, 36, 149, 28, 170, 99, 86, 22, 59, 237, 148, 92, 53, 12, 202, 164, 42, 23, 87, 184, 236, 40, 83, 122, 203, 213, 212, 97, 47, 39, 19, 23, 182, 252, 168, 113, 251, 6, 113, 182, 27, 67, 13, 30, 84, 115, 171, 82, 107, 225, 214, 239, 195, 132, 3, 50, 35, 102, 77, 142, 145, 4, 58, 216, 215, 8, 112, 128, 7, 101, 27, 195, 8, 184, 159, 85, 13, 238, 205, 159, 86, 155, 20, 2, 40, 157, 73, 11, 151, 170, 219, 107, 253, 77, 211, 174, 121, 127, 128, 26, 204, 142, 56, 18, 146, 205, 219, 234, 125, 57, 243, 7, 108, 70, 224, 236, 16, 231, 66, 216, 23, 80, 118, 246, 47, 5, 74, 1, 110, 83, 15, 151, 156, 253, 162, 190, 244, 56, 85, 231, 67, 11, 3, 8, 8, 215, 87, 220, 177, 192, 111, 138, 73, 72, 63, 255, 219, 18, 251, 98, 189, 221, 124, 16, 175, 153, 175, 133, 28, 159, 123, 88, 198, 163, 106, 109, 247, 89, 212, 49, 31, 197, 65, 196, 134, 36, 243, 201, 23, 255, 207, 57, 21, 19, 195, 62, 61, 15, 115, 255, 27, 157, 211, 25, 186, 7, 243, 145, 64, 223, 226, 254, 94, 5, 255, 3, 186, 100, 59, 78, 76, 154, 86, 57, 190, 210, 153, 139, 230, 78, 204, 11, 60, 135, 53, 102, 155, 214, 222, 97, 150, 194, 80, 19, 120, 4, 142, 60, 103, 103, 111, 146, 149, 187, 89, 134, 23, 64, 132, 239, 191, 173, 252, 28, 124, 35, 151, 187, 56, 124, 160, 203, 20, 249, 246, 225, 5, 25, 5, 106, 124, 45, 211, 107, 223, 179, 249, 134, 59, 39, 140, 135, 12, 112, 13, 93, 126, 97, 246, 108, 76, 76, 61, 35, 163, 197, 174, 124, 5, 17, 170, 198, 12, 1, 91, 145, 232, 210, 47, 247, 19, 149, 242, 104, 5, 106, 109, 157, 199, 176, 31, 16, 66, 80, 155, 28, 8, 196, 44, 253, 98, 213, 43, 22, 115, 196, 45, 137, 143, 88, 232, 162, 229, 250, 174, 116, 132, 169, 105, 197, 12, 45, 141, 77, 30, 247, 53, 227, 36, 60, 118, 0, 82, 94, 226, 19, 0, 47, 128, 14, 41, 13, 199, 82, 49, 159, 34, 180, 75, 89, 244, 59, 29, 247, 195, 89, 162, 37, 247, 191, 209, 185, 185, 237, 117, 186, 219, 32, 105, 64, 200, 119, 9, 73, 48, 232, 120, 136, 22, 221, 167, 139, 9, 60, 25, 94, 6, 153, 39, 153, 137, 121, 202, 200, 157, 27, 48, 129, 190, 213, 1, 240, 30, 127, 219, 69, 73, 251, 154, 2, 149, 180, 254, 18, 172, 180, 233, 203, 16, 85, 193, 25, 249, 249, 247, 138, 85, 105, 134, 2, 138, 67, 5, 132, 220, 74, 116, 254, 242, 39, 18, 239, 255, 56, 29, 117, 57, 197, 5, 157, 3, 108, 107, 35, 179, 105, 151, 133, 153, 116, 207, 236, 241, 94, 128, 10, 137, 3, 250, 37, 192, 240, 18, 168, 252, 65, 105, 67, 253, 223, 14, 147, 179, 226, 222, 228, 221, 44, 134, 17, 22, 188, 255, 240, 228, 31, 175, 73, 175, 174, 5, 160, 255, 254, 185, 60, 96, 30, 163, 141, 110, 152, 107, 27, 192, 187, 140, 159, 134, 119, 152, 235, 107, 187, 61, 250, 3, 226, 11, 121, 157, 0, 89, 7, 225, 186, 42, 155, 245, 230, 20, 212, 140, 255, 190, 223, 147, 185, 80, 111, 27, 27, 54, 104, 117, 119, 35, 98, 5, 5, 91, 145, 164, 87, 148, 240, 72, 231, 2, 179, 17, 66, 36, 64, 155, 209, 7, 106, 105, 250, 222, 169, 85, 190, 110, 173, 244, 229, 183, 21, 199, 223, 213, 231, 34, 126, 158, 114, 62, 242, 98, 88, 28, 133, 179, 27, 69, 70, 221, 255, 207, 231, 83, 166, 229, 254, 203, 224, 24, 115, 175, 62, 96, 215, 132, 131, 49, 70, 38, 91, 224, 53, 129, 17, 54, 128, 1, 134, 18, 123, 79, 141, 210, 255, 22, 196, 67, 58, 73, 92, 15, 112, 250, 109, 106, 185, 253, 250, 148, 110, 110, 135, 79, 202, 152, 166, 162, 207, 165, 133, 149, 4, 240, 153, 71, 123, 203, 7, 28, 113, 220, 107, 160, 153, 13, 136, 19, 24, 104, 199, 84, 27, 195, 56, 15, 235, 224, 72, 47, 58, 113, 193, 248, 27, 83, 232, 184, 203, 135, 188, 100, 172, 70, 178, 128, 236, 220, 131, 200, 78, 236, 69, 13, 130, 255, 140, 213, 144, 116, 34, 36, 107, 154, 34, 14, 144, 92, 229, 211, 121, 49, 9, 122, 192, 114, 28, 152, 133, 250, 180, 59, 3, 52, 38, 177, 57, 235, 215, 172, 191, 150, 255, 221, 204, 54, 7, 24, 132, 249, 33, 5, 216, 189, 209, 61, 222, 166, 179, 101, 234, 226, 208, 145, 5, 202, 153, 44, 147, 27, 239, 152, 35, 134, 224, 230, 77, 188, 37, 153, 127, 167, 154, 33, 84, 129, 58, 57, 7, 222, 36, 17, 176, 209, 126, 251, 84, 41, 222, 113, 108, 214, 214, 139, 103, 133, 69, 160, 28, 18, 214, 168, 158, 18, 121, 18, 232, 248, 94, 6, 243, 232, 164, 33, 38, 39, 56, 4, 79, 143, 64, 145, 11, 167, 252, 193, 37, 167, 243, 210, 150, 60, 42, 254, 72, 251, 134, 207, 158, 169, 142, 69, 223, 88, 219, 222, 36, 163, 178, 69, 109, 195, 223, 64, 89, 15, 178, 183, 200, 68, 118, 72, 12, 92, 228, 156, 244, 234, 112, 117, 183, 154, 124, 123, 102, 89, 136, 153, 139, 197, 233, 183, 243, 88, 69, 88, 78, 11, 251, 220, 80, 116, 149, 75, 2, 55, 185, 99, 188, 204, 244, 186, 135, 49, 39, 145, 182, 229, 17, 128, 198, 14, 238, 251, 110, 49, 226, 223, 207, 242, 61, 242, 205, 14, 50, 122, 83, 84, 137, 87, 71, 132, 99, 85, 239, 13, 140, 53, 96, 101, 189, 59, 219, 97, 43, 144, 99, 86, 52, 223, 225, 251, 94, 37, 208, 243, 19, 35, 50, 173, 25, 102, 64, 6, 184, 5, 136, 196, 145, 213, 33, 33, 208, 4, 112, 80, 96, 159, 206, 28, 82, 147, 19, 36, 31, 162, 194, 200, 1, 110, 6, 130, 237, 213, 135, 118, 17, 248, 220, 107, 112, 253, 123, 177, 120, 79, 18, 95, 203, 41, 137, 249, 28, 202, 2, 29, 83, 189, 187, 67, 166, 110, 222, 148, 121, 143, 103, 50, 74, 212, 230, 246, 112, 92, 64, 99, 222, 142, 74, 215, 238, 47, 80, 3, 73, 104, 244, 29, 150, 48, 184, 234, 172, 104, 167, 26, 100, 216, 241, 77, 50, 13, 46, 143, 108, 164, 47, 227, 31, 70, 202, 126, 37, 46, 209, 28, 201, 206, 21, 128, 211, 240, 191, 71, 151, 139, 118, 224, 160, 22, 107, 159, 28, 247, 245, 7, 214, 240, 6, 60, 127, 13, 218, 186, 14, 222, 222, 205, 191, 103, 139, 251, 183, 255, 225, 27, 247, 70, 226, 193, 72, 32, 3, 255, 196, 219, 203, 35, 96, 140, 124, 154, 222, 126, 76, 35, 255, 108, 118, 93, 142, 65, 160, 226, 39, 119, 81, 150, 229, 249, 137, 202, 216, 99, 119, 84, 163, 29, 167, 90, 9, 233, 217, 236, 168, 123, 242, 178, 65, 146, 150, 112, 254, 121, 132, 81, 191, 17, 166, 22, 88, 118, 65, 198, 140, 240, 75, 216, 166, 16, 184, 211, 221, 201, 90, 14, 247, 124, 183, 226, 114, 4, 39, 124, 236, 91, 3, 124, 33, 56, 240, 45, 112, 206, 32, 217, 138, 254, 197, 244, 110, 152, 102, 161, 27, 105, 8, 216, 88, 134, 1, 191, 182, 206, 33, 101, 81, 181, 93, 195, 123, 59, 212, 17, 56, 165, 3, 17, 151, 132, 83, 8, 169, 248, 216, 183, 152, 12, 180, 70, 166, 138, 108, 47, 201, 113, 0, 193, 1, 41, 108, 48, 225, 205, 106, 25, 18, 39, 164, 250, 151, 123, 205, 36, 159, 131, 215, 30, 67, 167, 24, 105, 227, 175, 43, 142, 190, 5, 242, 134, 233, 172, 95, 130, 91, 74, 183, 102, 161, 129, 67, 237, 44, 233, 143, 12, 41, 34, 161, 44, 159, 5, 101, 83, 249, 23, 63, 94, 137, 124, 14, 76, 87, 195, 134, 137, 207, 185, 202, 82, 116, 109, 124, 71, 234, 144, 35, 206, 124, 249, 126, 55, 15, 57, 237, 3, 106, 189, 210, 43, 230, 163, 187, 155, 196, 98, 127, 75, 92, 126, 254, 184, 24, 112, 43, 194, 138, 27, 2, 127, 25, 97, 71, 208, 176, 116, 255, 63, 52, 164, 158, 216, 19, 3, 213, 165, 247, 168, 93, 168, 45, 239, 45, 186, 120, 146, 41, 55, 91, 209, 154, 3, 245, 134, 56, 150, 167, 150, 180, 47, 43, 174, 230, 155, 62, 206, 148, 225, 32, 163, 92, 70, 178, 131, 164, 235, 132, 49, 119, 47, 57, 124, 16, 58, 90, 99, 246, 138, 7, 130, 104, 184, 52, 69, 200, 47, 130, 177, 155, 119, 72, 132, 17, 22, 75, 135, 138, 120, 61, 153, 13, 148, 30, 18, 102, 36, 121, 213, 252, 10, 123, 118, 96, 195, 139, 224, 247, 88, 50, 229, 218, 156, 12, 201, 210, 37, 204, 171, 206, 138, 33, 90, 69, 154, 117, 165, 177, 189, 65, 73, 47, 190, 150, 188, 103, 126, 232, 180, 52, 63, 227, 30, 158, 230, 80, 88, 149, 79, 77, 20, 252, 39, 239, 72, 104, 126, 69, 39, 146, 116, 215, 72, 251, 145, 210, 38, 141, 92, 40, 135, 50, 10, 15, 130, 194, 111, 40, 8, 61, 201, 193, 145, 242, 183, 79, 189, 209, 88, 57, 26, 161, 135, 168, 110, 145, 236, 68, 54, 50, 43, 133, 119, 49, 239, 185, 186, 67, 89, 10, 223, 253, 173, 156, 167, 148, 160, 44, 87, 208, 148, 167, 57, 73, 212, 207, 241, 168, 194, 186, 7, 212, 139, 201, 132, 109, 46, 190, 169, 76, 234, 121, 100, 204, 156, 117, 75, 218, 140, 89, 19, 203, 47, 16, 163, 10, 152, 90, 115, 75, 93, 77, 226, 96, 112, 98, 53, 149, 58, 188, 210, 184, 224, 26, 228, 200, 192, 178, 206, 236, 98, 137, 239, 245, 251, 186, 157, 193, 255, 111, 94, 135, 96, 241, 104, 65, 47, 191, 116, 11, 207, 4, 209, 72, 68, 247, 151, 207, 158, 84, 24, 114, 25, 255, 57, 146, 141, 127, 199, 248, 60, 38, 254, 193, 70, 190, 92, 163, 110, 195, 65, 230, 59, 82, 199, 182, 33, 42, 225, 179, 102, 228, 52, 219, 17, 226, 89, 209, 171, 77, 223, 43, 148, 12, 0, 80, 13, 239, 88, 140, 101, 73, 209, 81, 76, 75, 1, 3, 34, 168, 57, 171, 66, 135, 26, 134, 196, 18, 111, 119, 50, 105, 68, 52, 148, 61, 130, 147, 119, 252, 143, 49, 237, 171, 10, 137, 226, 143, 242, 148, 210, 158, 32, 95, 231, 46, 218, 151, 116, 142, 182, 56, 46, 186, 173, 132, 74, 248, 69, 93, 144, 150, 227, 244, 4, 89, 110, 137, 15, 245, 56, 206, 206, 102, 122, 199, 120, 104, 244, 35, 20, 74, 15, 107, 34, 9, 192, 225, 79, 78, 49, 156, 144, 221, 186, 71, 212, 79, 225, 187, 133, 113, 63, 74, 5, 167, 24, 52, 79, 25, 212, 150, 62, 85, 251, 179, 134, 5, 92, 172, 163, 32, 71, 144, 51, 25, 68, 59, 140, 122, 148, 224, 235, 141, 36, 64, 162, 136, 158, 186, 22, 60, 42, 114, 199, 210, 37, 142, 35, 247, 11, 62, 144, 91, 200, 63, 241, 206, 77, 96, 252, 114, 80, 193, 179, 99, 8, 1, 4, 196, 169, 163, 26, 65, 123, 143, 26, 118, 87, 244, 254, 122, 216, 245, 180, 119, 162, 106, 150, 161, 23, 176, 3, 221, 176, 9, 84, 133, 102, 4, 126, 109, 9, 187, 136, 7, 40, 52, 201, 11, 98, 31, 211, 240, 71, 105, 214, 100, 159, 211, 244, 54, 90, 218, 183, 189, 228, 140, 118, 73, 86, 240, 59, 120, 2, 45, 94, 211, 3, 225, 17, 96, 4, 33, 115, 165, 192, 176, 48, 100, 101, 249, 188, 166, 31, 62, 62, 54, 79, 206, 7, 48, 82, 240, 115, 68, 250, 202, 222, 175, 98, 230, 246, 94, 1, 236, 201, 43, 3, 245, 108, 96, 167, 206, 75, 92, 7, 28, 81, 190, 63, 63, 109, 7, 231, 119, 93, 47, 179, 89, 131, 246, 254, 36, 55, 171, 145, 119, 143, 78, 65, 154, 36, 44, 22, 180, 42, 24, 173, 170, 186, 34, 97, 58, 182, 0, 124, 115, 143, 141, 26, 6, 98, 154, 198, 58, 249, 103, 36, 184, 174, 197, 30, 41, 111, 82, 148, 193, 128, 221, 0, 110, 9, 37, 60, 133, 218, 144, 122, 69, 53, 248, 238, 206, 39, 35, 45, 87, 198, 153, 198, 181, 97, 162, 219, 210, 142, 95, 112, 199, 67, 208, 255, 91, 131, 99, 247, 184, 204, 138, 59, 239, 126, 249, 147, 235, 81, 172, 183, 135, 70, 170, 222, 96, 216, 67, 183, 2, 103, 148, 40, 227, 118, 181, 77, 80, 235, 25, 105, 172, 197, 91, 212, 238, 18, 210, 175, 146, 21, 82, 179, 173, 63, 39, 206, 213, 123, 185, 131, 58, 231, 80, 166, 93, 242, 102, 113, 132, 245, 180, 36, 170, 51, 70, 199, 15, 74, 61, 121, 171, 250, 35, 45, 212, 94, 52, 213, 160, 224, 248, 145, 43, 60, 250, 105, 15, 3, 73, 219, 254, 161, 45, 48, 236, 51, 17, 78, 18, 182, 222, 192, 150, 138, 73, 235, 250, 230, 154, 45, 59, 109, 41, 239, 44, 26, 170, 121, 56, 225, 206, 86, 104, 158, 65, 0, 109, 58, 178, 17, 99, 179, 205, 169, 31, 103, 20, 61, 34, 50, 110, 82, 33, 129, 131, 116, 62, 222, 145, 203, 22, 117, 71, 54, 179, 42, 191, 108, 126, 62, 254, 158, 99, 77, 57, 240, 20, 206, 4, 128, 65, 48, 56, 203, 184, 201, 128, 227, 142, 24, 38, 66, 57, 71, 29, 96, 120, 165, 24, 85, 2, 98, 176, 47, 38, 221, 49, 79, 10, 237, 114, 231, 236, 97, 140, 222, 45, 160, 70, 162, 75, 142, 38, 166, 112, 102, 106, 209, 10, 36, 173, 171, 130, 158, 173, 240, 79, 20, 241, 57, 41, 17, 71, 193, 125, 167, 229, 247, 119, 170, 171, 197, 178, 66, 59, 241, 9, 232, 109, 109, 100, 109, 19, 110, 202, 198, 74, 247, 131, 216, 219, 39, 94, 129, 252, 67, 232, 202, 13, 90, 78, 241, 160, 139, 78, 140, 97, 202, 240, 35, 98, 48, 97, 12, 249, 67, 206, 118, 84, 171, 73, 246, 251, 242, 250, 92, 70, 89, 132, 19, 128, 186, 176, 237, 197, 16, 76, 72, 209, 140, 66, 156, 34, 151, 162, 191, 232, 104, 176, 2, 199, 69, 45, 47, 238, 63, 237, 71, 136, 33, 179, 69, 226, 0, 71, 147, 225, 129, 207, 74, 15, 113, 48, 115, 210, 33, 168, 131, 38, 104, 58, 177, 160, 19, 112, 63, 249, 192, 255, 241, 177, 190, 208, 216, 105, 254, 11, 107, 30, 109, 146, 182, 144, 116, 154, 184, 36, 43, 167, 87, 87, 52, 87, 116, 178, 57, 42, 1, 113, 35, 62, 213, 92, 207, 58, 153, 202, 161, 54, 173, 30, 158, 195, 138, 54, 2, 200, 127, 159, 25, 19, 193, 36, 231, 180, 198, 108, 234, 224, 72, 101, 157, 59, 205, 241, 185, 14, 91, 70, 237, 48, 116, 43, 40, 87, 128, 182, 76, 162, 213, 79, 118, 240, 22, 8, 135, 166, 174, 33, 134, 80, 239, 88, 24, 206, 131, 190, 211, 76, 218, 157, 15, 86, 239, 15, 176, 125, 251, 208, 118, 42, 186, 143, 243, 228, 166, 191, 56, 94, 213, 46, 1, 164, 97, 244, 157, 26, 93, 201, 236, 112, 163, 133, 210, 207, 253, 233, 106, 80, 48, 94, 189, 164, 97, 31, 46, 190, 118, 205, 75, 207, 194, 23, 119, 7, 160, 17, 215, 231, 254, 157, 5, 76, 99, 6, 110, 64, 154, 13, 32, 117, 142, 201, 200, 254, 251, 30, 50, 116, 212, 192, 174, 119, 89, 246, 251, 54, 178, 23, 234, 173, 140, 181, 141, 10, 148, 199, 26, 57, 49, 84, 217, 177, 134, 245, 236, 17, 58, 152, 186, 22, 58, 11, 40, 74, 99, 37, 239, 42, 96, 154, 130, 159, 16, 75, 133, 78, 122, 248, 245, 160, 127, 8, 165, 40, 45, 182, 49, 141, 141, 234, 74, 120, 254, 247, 201, 138, 138, 85, 26, 177, 73, 185, 24, 227, 49, 205, 172, 15, 233, 219, 220, 198, 125, 185, 62, 231, 243, 138, 125, 240, 150, 241, 59, 135, 3, 247, 26, 33, 171, 83, 192, 30, 116, 29, 110, 56, 240, 73, 90, 160, 255, 200, 222, 205, 229, 89, 87, 77, 225, 141, 223, 35, 53, 161, 12, 31, 87, 80, 231, 251, 111, 199, 18, 158, 207, 86, 144, 237, 204, 124, 84, 141, 153, 197, 39, 221, 223, 236, 39, 71, 113, 31, 82, 113, 84, 89, 111, 90, 212, 87, 200, 198, 52, 75, 203, 222, 62, 79, 25, 245, 195, 66, 35, 227, 111, 158, 100, 206, 161, 162, 138, 158, 86, 136, 57, 219, 193, 32, 186, 91, 6, 161, 221, 117, 37, 70, 44, 47, 51, 32, 54, 74, 188, 234, 102, 153, 15, 56, 186, 110, 31, 13, 172, 135, 151, 196, 129, 236, 85, 75, 130, 242, 3, 242, 170, 113, 31, 241, 24, 248, 207, 147, 77, 87, 191, 240, 48, 110, 35, 11, 190, 0, 40, 176, 72, 72, 60, 213, 219, 253, 179, 252, 77, 255, 152, 147, 165, 78, 126, 146, 189, 128, 71, 215, 14, 93, 250, 241, 75, 40, 138, 188, 253, 149, 151, 171, 172, 93, 11, 1, 31, 194, 111, 160, 180, 243, 156, 43, 131, 160, 173, 38, 53, 114, 32, 171, 172, 3, 206, 129, 92, 101, 84, 27, 40, 142, 50, 253, 39, 36, 34, 251, 211, 31, 114, 212, 215, 211, 52, 88, 69, 205, 158, 4, 234, 60, 27, 126, 63, 29, 113, 230, 62, 10, 207, 4, 119, 251, 175, 152, 181, 162, 80, 16, 41, 192, 211, 202, 97, 147, 72, 137, 92, 165, 168, 220, 56, 56, 112, 91, 151, 81, 124, 39, 2, 183, 152, 39, 243, 176, 105, 151, 186, 135, 63, 215, 203, 5, 88, 127, 147, 10, 20, 79, 91, 18, 147, 89, 133, 227, 49, 174, 77, 33, 205, 211, 39, 25, 108, 97, 195, 137, 222, 204, 105, 212, 136, 18, 199, 220, 233, 30, 65, 159, 93, 157, 188, 170, 78, 152, 157, 59, 71, 104, 71, 5, 140, 220, 196, 244, 188, 26, 160, 245, 87, 121, 170, 240, 238, 252, 180, 81, 93, 107, 101, 11, 50, 143, 225, 62, 106, 97, 13, 189, 135, 135, 169, 144, 211, 122, 22, 215, 175, 188, 9, 52, 110, 99, 205, 5, 4, 111, 101, 32, 246, 40, 228, 182, 164, 71, 32, 159, 114, 88, 178, 235, 213, 205, 6, 176, 146, 63, 65, 130, 140, 229, 9, 159, 185, 237, 110, 124, 123, 171, 254, 214, 17, 93, 42, 220, 131, 250, 216, 242, 5, 174, 196, 152, 189, 73, 139, 50, 115, 132, 104, 246, 34, 195, 103, 184, 208, 145, 40, 216, 167, 236, 70, 192, 53, 229, 240, 90, 151, 174, 36, 2, 229, 164, 40, 139, 118, 150, 13, 63, 167, 55, 14, 229, 229, 47, 97, 62, 204, 175, 86, 65, 84, 189, 140, 173, 219, 155, 120, 245, 87, 46, 156, 51, 50, 188, 99, 98, 222, 72, 161, 39, 163, 243, 172, 42, 174, 253, 226, 211, 36, 31, 206, 183, 80, 242, 98, 247, 73, 162, 115, 204, 237, 119, 194, 113, 208, 199, 185, 186, 239, 125, 133, 41, 243, 181, 124, 14, 177, 206, 124, 157, 156, 38, 27, 88, 19, 132, 93, 26, 26, 39, 85, 87, 218, 156, 107, 132, 184, 252, 134, 129, 121, 167, 115, 103, 204, 64, 143, 44, 167, 23, 8, 173, 79, 179, 225, 12, 159, 20, 33, 252, 212, 170, 179, 157, 49, 125, 82, 7, 56, 178, 59, 121, 197, 184, 64, 161, 108, 58, 79, 10, 203, 248, 6, 232, 172, 150, 47, 156, 141, 118, 49, 50, 34, 216, 75, 25, 144, 26, 52, 209, 254, 131, 251, 124, 14, 227, 99, 74, 139, 206, 173, 197, 112, 138, 185, 99, 203, 19, 0, 47, 53, 96, 173, 197, 105, 66, 64, 89, 5, 87, 121, 151, 118, 62, 60, 93, 154, 126, 100, 161, 106, 13, 202, 74, 50, 68, 95, 203, 159, 227, 222, 162, 173, 18, 93, 16, 23, 186, 125, 35, 166, 248, 116, 156, 28, 78, 188, 66, 64, 87, 149, 31, 180, 44, 126, 231, 30, 197, 96, 108, 57, 151, 208, 44, 89, 76, 27, 191, 189, 245, 69, 229, 247, 225, 168, 79, 32, 117, 206, 145, 86, 25, 8, 125, 209, 196, 245, 192, 221, 73, 198, 2, 253, 35, 188, 151, 79, 72, 189, 49, 226, 114, 233, 113, 149, 184, 109, 138, 162, 219, 214, 35, 212, 86, 153, 157, 239, 250, 205, 238, 172, 155, 103, 101, 16, 227, 60, 192, 16, 222, 120, 78, 104, 239, 169, 115, 116, 86, 161, 239, 224, 223, 32, 23, 66, 220, 245, 240, 17, 92, 95, 230, 209, 156, 110, 183, 162, 72, 250, 144, 224, 88, 83, 174, 232, 200, 2, 25, 172, 137, 28, 187, 28, 171, 209, 175, 229, 79, 247, 50, 201, 117, 17, 118, 35, 42, 181, 174, 229, 231, 182, 23, 251, 146, 36, 181, 226, 114, 170, 232, 28, 177, 213, 109, 7, 254, 16, 67, 180, 129, 75, 204, 118, 115, 84, 133, 209, 66, 96, 111, 44, 63, 167, 20, 115, 171, 198, 139, 122, 149, 144, 165, 255, 92, 222, 117, 218, 250, 22, 135, 29, 91, 95, 138, 248, 116, 172, 44, 31, 10, 243, 223, 133, 129, 180, 158, 234, 70, 86, 215, 51, 42, 108, 141, 248, 166, 203, 25, 140, 249, 132, 159, 197, 174, 10, 165, 67, 13, 45, 215, 218, 112, 226, 102, 125, 77, 174, 228, 82, 103, 15, 210, 88, 138, 0, 61, 217, 22, 37, 26, 111, 103, 155, 186, 63, 251, 59, 132, 185, 192, 242, 237, 215, 39, 17, 103, 164, 10, 173, 82, 117, 98, 182, 38, 236, 62, 180, 251, 177, 47, 152, 119, 221, 138, 145, 51, 157, 76, 76, 8, 33, 129, 109, 40, 244, 4, 118, 119, 108, 177, 26, 157, 123, 13, 126, 200, 244, 168, 159, 53, 48, 168, 249, 18, 223, 15, 48, 140, 252, 54, 153, 162, 146, 34, 64, 214, 141, 184, 3, 18, 0, 27, 2, 123, 226, 169, 40, 165, 8, 70, 190, 104, 233, 84, 132, 57, 144, 213, 169, 158, 127, 17, 113, 130, 123, 75, 224, 16, 142, 35, 244, 199, 0, 150, 150, 2, 250, 194, 100, 18, 151, 102, 7, 239, 43, 31, 69, 33, 214, 85, 81, 93, 52, 254, 254, 67, 72, 240, 86, 199, 162, 196, 240, 101, 98, 176, 196, 152, 2, 46, 132, 84, 243, 40, 151, 73, 153, 48, 217, 109, 64, 229, 185, 160, 147, 54, 36, 162, 75, 183, 67, 130, 190, 36, 85, 27, 78, 83, 157, 184, 128, 188, 142, 229, 198, 214, 205, 81, 109, 59, 76, 114, 33, 93, 91, 87, 19, 34, 97, 245, 246, 254, 60, 202, 181, 62, 187, 44, 57, 26, 161, 84, 15, 139, 29, 137, 135, 28, 23, 145, 200, 119, 124, 201, 95, 149, 191, 19, 210, 133, 53, 59, 152, 79, 12, 5, 186, 139, 169, 145, 95, 164, 153, 4, 26, 181, 39, 235, 41, 85, 111, 57, 223, 253, 34, 153, 85, 113, 112, 138, 100, 80, 104, 209, 63, 188, 255, 82, 86, 140, 67, 221, 39, 122, 15, 33, 234, 138, 114, 156, 22, 210, 66, 142, 247, 26, 77, 118, 1, 95, 180, 95, 244, 166, 174, 87, 207, 237, 94, 125, 5, 135, 2, 70, 23, 32, 129, 112, 244, 229, 71, 134, 89, 246, 167, 31, 150, 171, 125, 205, 236, 126, 248, 10, 168, 204, 56, 55, 26, 56, 129, 10, 54, 162, 159, 79, 106, 36, 86, 59, 203, 103, 59, 57, 189, 27, 219, 233, 28, 103, 121, 53, 93, 77, 83, 44, 211, 57, 78, 17, 59, 154, 160, 249, 71, 49, 180, 241, 201, 147, 192, 217, 6, 17, 43, 23, 90, 177, 188, 127, 236, 150, 52, 194, 179, 141, 230, 85, 165, 14, 78, 29, 44, 167, 96, 226, 109, 175, 251, 241, 13, 79, 130, 214, 192, 214, 227, 71, 129, 108, 34, 199, 24, 192, 118, 17, 23, 71, 69, 134, 19, 34, 60, 68, 101, 231, 43, 19, 215, 190, 151, 199, 157, 2, 91, 163, 185, 1, 80, 189, 205, 207, 49, 39, 197, 169, 128, 211, 88, 213, 87, 65, 237, 175, 232, 9, 109, 126, 139, 233, 225, 242, 200, 63, 251, 95, 112, 102, 221, 54, 127, 170, 87, 96, 40, 177, 207, 170, 160, 142, 161, 101, 78, 72, 3, 26, 154, 249, 148, 181, 148, 210, 74, 49, 45, 22, 30, 99, 96, 215, 94, 220, 189, 34, 192, 239, 225, 225, 230, 93, 148, 15, 172, 163, 253, 69, 185, 149, 129, 246, 250, 9, 221, 8, 134, 172, 47, 41, 45, 166, 27, 14, 199, 211, 100, 205, 159, 100, 172, 50, 148, 160, 51, 152, 148, 9, 16, 172, 14, 145, 28, 176, 11, 154, 20, 3, 76, 46, 247, 89, 206, 250, 219, 4, 55, 35, 23, 70, 73, 126, 42, 134, 102, 112, 155, 120, 158, 136, 6, 119, 121, 18, 98, 246, 242, 29, 59, 153, 32, 135, 130, 42, 42, 129, 54, 209, 237, 14, 76, 10, 80, 196, 78, 80, 98, 8, 94, 221, 131, 70, 161, 49, 27, 63, 23, 62, 208, 87, 204, 160, 206, 90, 170, 20, 17, 102, 92, 0, 171, 10, 178, 207, 20, 152, 85, 226, 198, 86, 247, 22, 254, 128, 146, 111, 206, 128, 236, 7, 188, 58, 108, 118, 87, 100, 249, 171, 242, 46, 26, 134, 227, 160, 108, 227, 169, 226, 73, 255, 55, 133, 53, 126, 123, 205, 14, 22, 229, 229, 44, 35, 229, 41, 185, 58, 150, 62, 219, 104, 163, 128, 38, 16, 243, 90, 45, 24, 181, 21, 139, 132, 157, 224, 233, 55, 196, 46, 86, 118, 239, 178, 104, 140, 71, 3, 82, 137, 147, 44, 243, 13, 124, 107, 181, 68, 253, 38, 61, 183, 160, 19, 218, 204, 222, 69, 220, 198, 4, 89, 141, 160, 145, 100, 56, 52, 201, 47, 103, 34, 115, 147, 253, 33, 86, 133, 13, 222, 20, 47, 252, 43, 8, 45, 10, 169, 32, 52, 8, 24, 146, 12, 200, 52, 82, 34, 60, 185, 1, 20, 114, 188, 203, 119, 17, 62, 244, 37, 106, 240, 6, 238, 120, 78, 241, 140, 202, 253, 75, 132, 201, 149, 166, 125, 105, 114, 153, 232, 29, 164, 10, 99, 243, 85, 51, 53, 63, 78, 237, 80, 46, 199, 171, 166, 85, 8, 47, 219, 78, 9, 146, 74, 43, 128, 207, 118, 156, 111, 82, 75, 47, 97, 109, 7, 247, 232, 207, 9, 108, 77, 50, 204, 45, 227, 178, 239, 150, 99, 37, 240, 215, 45, 239, 180, 164, 72, 3, 36, 83, 32, 131, 163, 49, 69, 252, 139, 215, 76, 159, 173, 213, 215, 121, 181, 251, 196, 142, 78, 216, 46, 94, 184, 114, 67, 212, 8, 193, 142, 205, 52, 125, 61, 245, 70, 75, 210, 146, 42, 139, 7, 184, 81, 231, 214, 13, 103, 55, 176, 154, 208, 198, 213, 189, 177, 232, 139, 254, 32, 194, 18, 74, 91, 81, 113, 6, 234, 71, 77, 21, 8, 50, 85, 175, 175, 55, 184, 16, 64, 21, 201, 217, 61, 136, 123, 36, 144, 71, 185, 252, 80, 97, 175, 197, 53, 85, 213, 166, 223, 75, 80, 68, 97, 69, 203, 24, 18, 65, 167, 195, 138, 23, 112, 206, 15, 84, 176, 70, 173, 27, 7, 76, 246, 190, 221, 96, 187, 31, 80, 2, 117, 58, 178, 189, 168, 17, 125, 249, 196, 91, 176, 147, 131, 65, 188, 80, 93, 107, 15, 77, 14, 214, 162, 176, 180, 125, 92, 10, 24, 68, 173, 120, 231, 189, 113, 193, 139, 238, 25, 206, 18, 86, 84, 241, 33, 135, 174, 22, 211, 99, 203, 218, 212, 133, 42, 200, 137, 47, 154, 7, 81, 79, 203, 110, 181, 82, 153, 159, 197, 64, 180, 115, 48, 56, 59, 241, 210, 149, 13, 215, 14, 218, 63, 177, 30, 60, 94, 88, 235, 245, 167, 241, 71, 234, 155, 0, 231, 176, 183, 250, 76, 48, 60, 76, 89, 127, 210, 174, 102, 38, 80, 4, 79, 193, 20, 71, 140, 158, 247, 114, 164, 129, 236, 89, 129, 41, 110, 244, 182, 234, 45, 124, 159, 69, 186, 192, 12, 36, 114, 246, 244, 71, 35, 80, 108, 119, 180, 46, 245, 29, 191, 40, 33, 105, 229, 36, 101, 221, 180, 137, 132, 243, 224, 122, 99, 194, 155, 160, 3, 29, 237, 116, 126, 30, 224, 44, 169, 168, 207, 214, 73, 243, 90, 175, 212, 203, 192, 96, 163, 60, 242, 85, 207, 104, 106, 163, 233, 213, 6, 222, 220, 123, 125, 154, 113, 74, 236, 46, 17, 121, 78, 98, 223, 101, 219, 95, 24, 57, 174, 237, 68, 36, 196, 178, 232, 72, 139, 88, 85, 210, 89, 59, 11, 99, 253, 119, 132, 163, 155, 147, 140, 2, 125, 174, 198, 240, 92, 7, 223, 97, 16, 240, 84, 223, 28, 86, 46, 135, 28, 59, 247, 209, 221, 138, 99, 133, 99, 121, 122, 122, 36, 227, 159, 5, 66, 163, 190, 89, 41, 170, 78, 164, 75, 172, 211, 226, 226, 223, 48, 40, 96, 225, 112, 212, 107, 82, 230, 127, 21, 97, 81, 84, 201, 134, 59, 141, 113, 151, 196, 83, 41, 249, 7, 149, 88, 3, 47, 64, 104, 235, 188, 181, 136, 36, 70, 14, 175, 85, 14, 34, 223, 140, 39, 183, 189, 140, 249, 169, 67, 103, 116, 173, 104, 116, 147, 219, 64, 190, 135, 162, 78, 197, 94, 244, 83, 185, 131, 20, 55, 190, 251, 197, 153, 65, 206, 182, 80, 134, 139, 72, 46, 192, 116, 42, 7, 33, 74, 245, 83, 51, 176, 2, 253, 58, 228, 203, 120, 235, 18, 36, 225, 243, 169, 149, 0, 146, 55, 66, 70, 6, 32, 5, 239, 113, 176, 168, 141, 93, 41, 202, 25, 149, 226, 18, 131, 65, 81, 72, 147, 178, 76, 217, 97, 206, 75, 246, 107, 29, 154, 165, 16, 35, 249, 0, 230, 134, 200, 139, 225, 184, 177, 69, 113, 41, 157, 245, 143, 186, 80, 133, 250, 145, 223, 70, 89, 137, 141, 56, 112, 244, 192, 152, 205, 27, 125, 196, 135, 215, 43, 193, 238, 227, 96, 253, 193, 75, 238, 14, 18, 177, 85, 81, 101, 240, 154, 107, 23, 218, 38, 22, 203, 69, 173, 202, 176, 54, 64, 64, 98, 140, 31, 158, 27, 6, 136, 142, 145, 43, 8, 134, 38, 3, 209, 10, 195, 34, 116, 10, 60, 92, 38, 91, 32, 252, 28, 40, 30, 171, 11, 219, 168, 197, 171, 21, 205, 123, 33, 181, 118, 60, 87, 135, 125, 118, 82, 102, 75, 48, 21, 20, 8, 81, 76, 232, 157, 119, 194, 141, 180, 30, 204, 0, 61, 58, 88, 86, 195, 18, 93, 109, 48, 237, 255, 52, 236, 102, 245, 19, 101, 239, 97, 55, 213, 168, 241, 148, 166, 21, 155, 24, 148, 78, 44, 66, 58, 127, 142, 140, 81, 85, 94, 200, 164, 194, 219, 235, 193, 160, 6, 144, 153, 67, 168, 34, 239, 167, 42, 93, 177, 38, 22, 151, 61, 29, 37, 157, 74, 72, 161, 3, 29, 56, 253, 166, 243, 109, 162, 20, 100, 48, 112, 161, 50, 174, 241, 2, 99, 197, 105, 1, 19, 236, 64, 128, 204, 70, 129, 12, 126, 93, 132, 32, 102, 175, 170, 44, 250, 29, 170, 186, 49, 207, 114, 193, 65, 41, 241, 201, 215, 230, 161, 197, 101, 20, 47, 133, 167, 169, 107, 225, 99, 244, 152, 126, 113, 82, 119, 6, 41, 232, 227, 91, 181, 150, 226, 231, 147, 205, 253, 225, 131, 92, 224, 50, 73, 104, 113, 118, 245, 43, 114, 71, 189, 23, 141, 185, 76, 37, 34, 172, 17, 197, 220, 159, 191, 144, 195, 213, 132, 35, 59, 95, 154, 14, 146, 178, 10, 113, 118, 15, 189, 27, 34, 162, 94, 147, 243, 184, 80, 191, 175, 178, 247, 82, 82, 164, 57, 112, 128, 211, 164, 174, 245, 253, 155, 212, 54, 67, 48, 180, 84, 206, 24, 29, 54, 156, 175, 188, 152, 56, 77, 244, 179, 232, 227, 122, 185, 58, 12, 154, 167, 213, 229, 46, 167, 137, 218, 255, 145, 125, 32, 216, 227, 162, 159, 188, 224, 61, 80, 13, 41, 39, 123, 78, 245, 152, 30, 214, 211, 235, 170, 91, 255, 235, 208, 174, 20, 220, 33, 217, 10, 222, 60, 49, 35, 181, 25, 39, 147, 100, 94, 253, 236, 167, 54, 218, 112, 250, 140, 147, 221, 179, 40, 25, 50, 165, 125, 191, 43, 135, 152, 37, 31, 92, 165, 97, 196, 50, 62, 86, 111, 132, 151, 152, 223, 240, 104, 73, 71, 229, 203, 216, 170, 132, 27, 121, 164, 216, 70, 154, 38, 11, 47, 96, 117, 232, 94, 120, 144, 176, 228, 5, 19, 156, 149, 86, 92, 12, 43, 29, 10, 61, 184, 223, 56, 141, 73, 207, 90, 181, 232, 215, 148, 116, 138, 23, 155, 208, 37, 5, 252, 26, 122, 33, 245, 42, 55, 64, 237, 229, 109, 207, 55, 76, 63, 8, 24, 9, 102, 209, 207, 232, 37, 148, 126, 38, 103, 96, 182, 36, 122, 79, 200, 35, 234, 171, 15, 147, 131, 0, 117, 117, 93, 24, 47, 87, 28, 169, 255, 171, 155, 168, 128, 32, 58, 19, 203, 173, 207, 222, 234, 102, 162, 113, 211, 219, 79, 0, 237, 13, 62, 96, 189, 49, 176, 253, 32, 106, 196, 108, 223, 190, 175, 172, 236, 103, 178, 41, 80, 83, 29, 59, 28, 150, 44, 161, 57, 19, 5, 102, 20, 234, 24, 162, 74, 14, 85, 158, 174, 253, 202, 202, 204, 173, 82, 30, 136, 112, 182, 10, 211, 237, 54, 185, 225, 93, 234, 128, 110, 246, 175, 127, 13, 58, 13, 158, 39, 47, 14, 149, 134, 11, 24, 157, 199, 157, 217, 246, 152, 188, 237, 123, 56, 222, 147, 77, 69, 191, 233, 15, 193, 38, 114, 226, 58, 107, 64, 23, 48, 179, 215, 42, 63, 197, 251, 69, 244, 196, 91, 86, 234, 9, 54, 73, 199, 39, 34, 239, 102, 125, 181, 173, 167, 249, 41, 88, 78, 125, 37, 158, 71, 141, 169, 58, 65, 12, 50, 111, 235, 130, 58, 195, 117, 107, 34, 178, 4, 79, 24, 233, 180, 240, 193, 67, 181, 237, 211, 177, 42, 162, 3, 33, 133, 196, 227, 131, 119, 124, 162, 157, 147, 173, 24, 186, 108, 36, 191, 8, 255, 89, 59, 149, 108, 168, 15, 224, 101, 38, 232, 218, 166, 219, 149, 172, 40, 157, 158, 34, 94, 42, 57, 87, 142, 121, 211, 254, 149, 202, 235, 138, 2, 29, 78, 216, 36, 163, 80, 208, 27, 85, 126, 117, 101, 63, 245, 60, 64, 89, 93, 245, 117, 255, 219, 69, 98, 217, 144, 132, 205, 99, 216, 26, 203, 226, 31, 163, 141, 209, 98, 61, 66, 224, 92, 203, 104, 197, 200, 53, 53, 77, 212, 120, 0, 85, 94, 112, 217, 198, 145, 81, 202, 164, 30, 173, 76, 77, 245, 160, 143, 245, 191, 24, 33, 85, 103, 22, 54, 17, 12, 224, 50, 212, 136, 163, 204, 113, 188, 121, 132, 15, 118, 251, 44, 10, 1, 120, 170, 214, 225, 61, 61, 8, 221, 214, 5, 48, 83, 143, 226, 163, 140, 236, 68, 168, 52, 208, 19, 21, 164, 6, 48, 248, 106, 78, 240, 80, 196, 188, 182, 52, 113, 147, 234, 226, 224, 250, 199, 98, 149, 227, 166, 120, 0, 123, 45, 198, 249, 68, 152, 224, 249, 83, 106, 232, 135, 49, 252, 151, 76, 227, 206, 167, 195, 189, 167, 188, 129, 25, 50, 117, 16, 144, 188, 225, 8, 248, 227, 207, 198, 219, 96, 230, 83, 27, 199, 58, 15, 90, 131, 29, 139, 175, 101, 109, 183, 88, 160, 125, 184, 26, 49, 27, 219, 4, 103, 222, 158, 173, 228, 46, 216, 216, 94, 174, 88, 27, 35, 91, 233, 203, 92, 169, 87, 56, 135, 31, 53, 211, 158, 99, 94, 40, 234, 99, 177, 233, 62, 83, 45, 129, 218, 193, 24, 21, 120, 15, 255, 104, 225, 65, 239, 59, 79, 145, 179, 40, 252, 40, 81, 249, 179, 58, 132, 90, 67, 176, 64, 35, 236, 166, 113, 98, 37, 229, 216, 249, 79, 159, 2, 186, 77, 229, 220, 157, 103, 67, 252, 214, 30, 81, 80, 251, 136, 245, 35, 46, 195, 243, 232, 143, 68, 121, 63, 30, 197, 23, 156, 218, 219, 149, 216, 221, 75, 11, 34, 67, 158, 41, 6, 246, 199, 64, 148, 94, 120, 245, 102, 194, 164, 42, 228, 89, 131, 75, 151, 164, 55, 8, 147, 201, 8, 175, 31, 2, 198, 247, 217, 221, 80, 122, 167, 104, 71, 214, 103, 118, 73, 234, 191, 239, 76, 88, 129, 35, 83, 45, 111, 204, 24, 130, 173, 37, 196, 0, 216, 60, 76, 238, 168, 133, 170, 26, 128, 109, 109, 153, 40, 188, 129, 141, 197, 47, 215, 59, 58, 206, 170, 247, 224, 113, 192, 170, 246, 140, 124, 127, 17, 164, 40, 104, 253, 16, 104, 170, 204, 70, 19, 254, 103, 229, 152, 219, 109, 39, 0, 186, 233, 122, 25, 79, 94, 146, 71, 215, 43, 1, 48, 7, 79, 237, 88, 123, 187, 127, 21, 229, 207, 99, 51, 91, 16, 120, 191, 129, 24, 109, 125, 206, 206, 41, 177, 85, 92, 8, 216, 89, 146, 227, 81, 75, 79, 109, 239, 219, 114, 176, 212, 232, 36, 224, 40, 201, 154, 96, 135, 137, 175, 28, 170, 122, 132, 2, 2, 92, 223, 203, 103, 74, 193, 15, 44, 41, 55, 56, 82, 208, 124, 0, 75, 247, 7, 139, 86, 180, 37, 70, 3, 154, 220, 250, 56, 217, 126, 239, 250, 29, 208, 220, 131, 134, 9, 52, 4, 175, 245, 164, 207, 226, 231, 106, 189, 18, 105, 4, 162, 26, 157, 45, 245, 197, 211, 157, 60, 254, 39, 39, 111, 39, 74, 211, 182, 92, 8, 36, 81, 121, 225, 249, 136, 203, 135, 206, 24, 2, 194, 10, 94, 255, 51, 46, 229, 127, 178, 49, 238, 2, 182, 15, 44, 119, 42, 230, 246, 221, 187, 216, 200, 246, 20, 131, 128, 209, 150, 134, 57, 25, 202, 25, 99, 69, 20, 90, 122, 86, 112, 6, 122, 1, 117, 46, 46, 25, 73, 61, 48, 76, 137, 61, 73, 188, 153, 162, 48, 4, 85, 199, 215, 156, 189, 12, 149, 145, 85, 100, 92, 140, 211, 31, 245, 211, 201, 83, 219, 23, 180, 212, 208, 199, 73, 247, 239, 46, 0, 255, 33, 69, 231, 242, 31, 42, 18, 209, 8, 128, 113, 92, 254, 53, 19, 67, 30, 120, 163, 3, 164, 168, 0, 23, 199, 97, 254, 1, 2, 127, 33, 70, 83, 22, 170, 252, 253, 66, 39, 243, 211, 187, 101, 193, 123, 120, 141, 82, 107, 82, 246, 127, 54, 195, 153, 143, 128, 210, 136, 179, 13, 43, 142, 30, 32, 244, 118, 96, 0, 234, 247, 24, 71, 140, 77, 54, 39, 234, 88, 151, 151, 141, 114, 13, 54, 33, 41, 19, 185, 159, 154, 220, 195, 75, 103, 221, 223, 245, 45, 177, 90, 169, 163, 210, 155, 160, 97, 11, 18, 106, 140, 185, 64, 139, 126, 144, 147, 90, 57, 181, 51, 84, 113, 171, 10, 7, 236, 149, 0, 190, 188, 233, 137, 126, 67, 20, 102, 94, 73, 207, 74, 201, 222, 122, 178, 74, 29, 33, 239, 188, 185, 97, 76, 238, 129, 219, 25, 128, 96, 248, 103, 17, 60, 156, 172, 200, 222, 99, 54, 46, 8, 91, 142, 57, 159, 123, 35, 103, 117, 193, 150, 27, 85, 243, 40, 159, 234, 251, 71, 197, 194, 210, 247, 187, 95, 5, 84, 47, 94, 79, 32, 28, 190, 236, 222, 237, 62, 140, 93, 216, 245, 150, 122, 233, 209, 101, 49, 235, 230, 201, 142, 175, 204, 220, 203, 147, 32, 25, 10, 155, 34, 122, 93, 254, 200, 40, 34, 92, 12, 40, 172, 98, 142, 232, 80, 132, 63, 213, 160, 231, 164, 225, 22, 162, 97, 186, 248, 154, 9, 103, 102, 6, 66, 94, 66, 169, 93, 119, 128, 235, 176, 56, 57, 171, 64, 42, 32, 75, 101, 119, 234, 135, 102, 37, 90, 246, 194, 42, 111, 98, 110, 232, 137, 10, 168, 91, 75, 109, 209, 73, 180, 243, 69, 232, 240, 243, 43, 141, 160, 93, 29, 89, 193, 18, 170, 175, 100, 96, 159, 42, 157, 247, 151, 80, 193, 47, 92, 215, 58, 220, 224, 151, 46, 125, 231, 246, 38, 26, 54, 81, 40, 131, 29, 24, 145, 143, 188, 34, 166, 34, 6, 236, 110, 106, 147, 23, 180, 231, 46, 170, 250, 205, 40, 89, 214, 187, 104, 16, 235, 199, 26, 135, 84, 62, 223, 69, 10, 4, 245, 181, 0, 212, 137, 245, 39, 107, 145, 71, 58, 170, 175, 116, 89, 17, 62, 161, 169, 210, 238, 14, 145, 107, 196, 162, 17, 34, 210, 234, 146, 33, 201, 212, 242, 100, 144, 42, 35, 85, 250, 62, 107, 97, 107, 225, 90, 88, 190, 12, 145, 218, 236, 103, 193, 34, 3, 86, 107, 29, 172, 30, 162, 193, 244, 150, 58, 222, 39, 131, 145, 209, 19, 252, 33, 119, 2, 195, 37, 252, 155, 163, 72, 3, 218, 239, 26, 215, 7, 213, 253, 21, 30, 8, 37, 16, 225, 227, 122, 64, 17, 197, 15, 8, 92, 224, 76, 72, 224, 119, 0, 219, 80, 180, 1, 179, 103, 121, 199, 22, 114, 50, 193, 9, 41, 170, 127, 185, 207, 120, 100, 83, 29, 68, 224, 166, 165, 30, 124, 120, 83, 57, 206, 87, 243, 115, 42, 115, 211, 206, 36, 129, 192, 71, 68, 147, 62, 143, 28, 181, 117, 51, 215, 117, 79, 208, 71, 102, 66, 117, 240, 238, 96, 208, 224, 114, 173, 219, 87, 228, 86, 95, 162, 154, 9, 164, 30, 121, 101, 226, 243, 212, 161, 131, 49, 129, 202, 232, 98, 230, 99, 230, 239, 78, 39, 144, 175, 101, 47, 23, 79, 172, 113, 238, 211, 132, 50, 120, 84, 224, 99, 221, 254, 104, 134, 7, 34, 202, 187, 160, 191, 35, 9, 145, 112, 237, 189, 70, 156, 1, 157, 0, 168, 15, 185, 186, 59, 253, 203, 117, 9, 165, 252, 167, 108, 68, 189, 240, 232, 224, 200, 242, 26, 164, 222, 202, 116, 79, 73, 210, 99, 72, 238, 24, 16, 91, 144, 107, 145, 112, 71, 10, 17, 1, 149, 234, 248, 223, 225, 189, 125, 222, 28, 5, 209, 131, 234, 238, 124, 148, 248, 208, 191, 211, 174, 183, 112, 175, 237, 190, 246, 53, 130, 52, 240, 234, 44, 31, 149, 87, 92, 233, 148, 232, 61, 44, 244, 98, 116, 143, 37, 16, 169, 20, 74, 138, 111, 56, 208, 8, 216, 197, 0, 138, 161, 132, 73, 138, 52, 5, 44, 119, 117, 232, 72, 228, 181, 123, 203, 247, 86, 221, 53, 139, 138, 126, 161, 138, 92, 144, 90, 226, 156, 9, 77, 141, 242, 128, 209, 43, 143, 158, 213, 19, 66, 23, 175, 178, 95, 153, 187, 214, 180, 51, 230, 55, 90, 119, 69, 234, 5, 101, 161, 138, 250, 85, 48, 54, 172, 193, 79, 237, 83, 116, 41, 220, 86, 239, 144, 103, 11, 25, 16, 116, 190, 162, 11, 154, 42, 165, 20, 130, 163, 38, 189, 136, 200, 201, 237, 172, 166, 173, 78, 204, 111, 235, 46, 20, 135, 190, 75, 24, 112, 50, 215, 32, 67, 136, 166, 234, 64, 31, 164, 192, 175, 131, 99, 226, 13, 186, 235, 108, 159, 103, 253, 1, 150, 251, 207, 81, 156, 160, 13, 245, 73, 53, 63, 66, 99, 84, 126, 224, 95, 58, 175, 165, 223, 112, 131, 47, 132, 56, 102, 22, 76, 122, 129, 65, 97, 149, 44, 194, 159, 73, 241, 11, 72, 183, 255, 137, 97, 108, 102, 112, 43, 38, 118, 77, 43, 250, 99, 205, 131, 4, 166, 210, 90, 58, 133, 228, 153, 14, 249, 17, 56, 48, 108, 122, 230, 254, 56, 162, 45, 12, 94, 181, 165, 0, 207, 11, 234, 133, 171, 228, 144, 247, 218, 119, 72, 80, 74, 138, 46, 141, 12, 243, 143, 232, 148, 96, 7, 224, 194, 242, 10, 239, 166, 48, 71, 119, 212, 85, 106, 116, 30, 19, 38, 221, 207, 53, 211, 149, 211, 111, 144, 235, 98, 31, 127, 38, 34, 138, 225, 229, 106, 103, 85, 145, 142, 65, 50, 131, 239, 79, 121, 204, 128, 121, 48, 9, 213, 242, 242, 171, 80, 226, 115, 181, 149, 171, 55, 14, 39, 251, 164, 56, 199, 4, 9, 168, 109, 128, 203, 247, 138, 50, 50, 32, 128, 55, 61, 208, 198, 239, 38, 57, 209, 36, 223, 181, 107, 208, 19, 122, 85, 62, 80, 180, 132, 5, 39, 180, 42, 93, 65, 153, 117, 75, 55, 63, 78, 129, 26, 144, 231, 12, 14, 247, 90, 156, 20, 253, 20, 226, 140, 210, 81, 96, 254, 182, 58, 75, 195, 216, 124, 158, 76, 45, 186, 119, 65, 124, 238, 119, 201, 228, 88, 66, 151, 19, 205, 121, 99, 79, 191, 170, 115, 41, 198, 249, 124, 84, 187, 57, 110, 216, 123, 153, 19, 233, 224, 151, 254, 116, 40, 80, 98, 110, 208, 186, 171, 180, 181, 182, 244, 27, 14, 74, 186, 51, 100, 54, 238, 235, 131, 246, 226, 139, 109, 67, 87, 124, 230, 109, 234, 29, 49, 154, 190, 194, 134, 157, 218, 21, 230, 250, 11, 194, 172, 64, 244, 1, 119, 135, 172, 230, 70, 86, 84, 161, 129, 163, 231, 6, 255, 197, 97, 206, 189, 88, 239, 45, 32, 135, 118, 225, 33, 194, 103, 231, 193, 6, 164, 236, 241, 26, 86, 162, 36, 7, 101, 207, 69, 72, 156, 218, 179, 55, 239, 75, 95, 112, 225, 108, 48, 173, 135, 3, 54, 50, 79, 128, 26, 226, 199, 59, 90, 133, 53, 252, 185, 162, 90, 97, 94, 59, 252, 171, 80, 97, 224, 3, 217, 219, 254, 246, 141, 243, 186, 110, 48, 89, 149, 21, 85, 246, 155, 185, 107, 155, 185, 127, 117, 123, 210, 222, 47, 186, 10, 82, 165, 44, 24, 211, 225, 8, 76, 59, 78, 41, 146, 212, 19, 221, 46, 62, 86, 179, 157, 56, 152, 207, 133, 228, 103, 6, 44, 65, 76, 171, 244, 246, 244, 92, 216, 159, 27, 241, 37, 52, 226, 95, 85, 41, 115, 170, 121, 229, 236, 137, 80, 79, 240, 44, 7, 161, 93, 44, 127, 9, 68, 129, 217, 169, 6, 221, 220, 227, 162, 190, 203, 158, 243, 242, 188, 246, 226, 189, 56, 90, 97, 178, 71, 119, 240, 54, 21, 2, 184, 144, 104, 3, 12, 62, 177, 77, 184, 203, 26, 143, 139, 162, 158, 249, 94, 190, 204, 192, 204, 166, 185, 22, 15, 245, 190, 60, 159, 213, 81, 9, 151, 98, 173, 7, 95, 155, 36, 38, 19, 238, 233, 249, 212, 229, 204, 237, 120, 141, 27, 255, 219, 196, 182, 224, 239, 58, 27, 98, 209, 141, 105, 185, 186, 208, 14, 124, 124, 171, 2, 9, 118, 60, 128, 137, 82, 135, 50, 6, 234, 75, 119, 179, 71, 31, 76, 115, 49, 115, 127, 249, 62, 97, 230, 60, 243, 65, 9, 159, 173, 42, 216, 184, 210, 190, 152, 176, 37, 33, 130, 103, 194, 46, 191, 114, 206, 63, 151, 77, 108, 20, 236, 157, 39, 144, 41, 105, 235, 16, 217, 114, 71, 26, 190, 58, 120, 120, 168, 68, 149, 74, 4, 226, 235, 254, 66, 80, 56, 227, 27, 107, 191, 150, 244, 102, 200, 178, 25, 158, 6, 243, 89, 182, 212, 155, 86, 213, 46, 70, 55, 133, 155, 202, 124, 30, 74, 2, 188, 228, 237, 67, 27, 250, 59, 29, 203, 202, 68, 145, 77, 30, 213, 177, 45, 152, 204, 47, 165, 54, 218, 135, 158, 44, 226, 255, 166, 124, 221, 190, 160, 123, 102, 144, 142, 3, 112, 83, 191, 252, 3, 202, 28, 189, 90, 140, 249, 46, 169, 162, 98, 126, 76, 182, 168, 130, 221, 238, 187, 32, 106, 208, 185, 149, 81, 20, 137, 30, 11, 84, 205, 146, 223, 168, 171, 27, 83, 231, 178, 172, 11, 133, 156, 60, 87, 43, 146, 232, 104, 171, 198, 238, 105, 224, 109, 121, 250, 116, 125, 190, 177, 154, 187, 85, 173, 27, 235, 245, 42, 23, 35, 129, 156, 243, 5, 129, 112, 195, 86, 211, 183, 8, 222, 24, 127, 36, 40, 165, 147, 231, 84, 29, 98, 247, 82, 93, 93, 43, 205, 90, 79, 51, 65, 103, 133, 227, 157, 167, 9, 229, 247, 227, 220, 41, 203, 56, 134, 74, 57, 193, 191, 199, 242, 17, 240, 133, 199, 177, 74, 170, 241, 247, 197, 98, 243, 139, 9, 148, 126, 36, 250, 162, 95, 162, 83, 46, 223, 162, 224, 225, 75, 184, 18, 176, 244, 86, 234, 72, 82, 239, 93, 27, 171, 67, 207, 246, 49, 243, 183, 6, 91, 177, 121, 171, 59, 223, 61, 218, 149, 124, 151, 45, 59, 146, 234, 102, 136, 155, 39, 139, 22, 36, 210, 244, 66, 54, 177, 51, 49, 179, 143, 153, 81, 47, 48, 0, 197, 50, 180, 1, 219, 211, 94, 8, 130, 69, 24, 74, 176, 34, 117, 6, 110, 27, 223, 246, 29, 153, 38, 248, 247, 13, 109, 211, 120, 238, 128, 6, 181, 215, 204, 155, 247, 165, 32, 28, 225, 96, 254, 150, 72, 238, 170, 93, 253, 212, 250, 115, 101, 141, 172, 171, 223, 1, 19, 70, 99, 135, 11, 165, 115, 167, 77, 233, 82, 204, 174, 74, 231, 49, 25, 95, 227, 134, 121, 77, 23, 10, 28, 9, 0, 149, 230, 217, 41, 201, 102, 233, 175, 226, 227, 245, 147, 220, 172, 18, 238, 205, 89, 58, 61, 125, 162, 17, 156, 113, 32, 49, 231, 251, 156, 12, 128, 172, 98, 162, 122, 34, 90, 236, 213, 239, 3, 61, 231, 125, 92, 139, 190, 94, 122, 164, 153, 113, 12, 27, 7, 241, 203, 102, 30, 92, 112, 80, 118, 217, 9, 38, 233, 21, 65, 58, 126, 26, 95, 255, 4, 228, 174, 52, 139, 189, 231, 40, 56, 65, 172, 119, 16, 237, 47, 244, 163, 106, 144, 0, 61, 223, 243, 76, 151, 206, 89, 25, 221, 0, 129, 54, 199, 38, 31, 135, 87, 193, 171, 138, 144, 144, 124, 101, 175, 6, 246, 254, 38, 36, 198, 207, 8, 77, 58, 147, 111, 15, 8, 46, 201, 52, 54, 29, 75, 180, 130, 45, 132, 235, 78, 186, 217, 223, 230, 76, 29, 88, 221, 160, 226, 103, 197, 247, 115, 123, 148, 58, 70, 14, 118, 38, 128, 164, 176, 241, 29, 41, 160, 135, 190, 7, 141, 176, 9, 164, 207, 57, 215, 124, 25, 230, 77, 243, 110, 41, 180, 202, 178, 74, 108, 161, 254, 25, 208, 153, 252, 76, 218, 203, 87, 112, 52, 135, 205, 106, 226, 57, 120, 188, 152, 34, 93, 17, 162, 243, 19, 173, 178, 82, 30, 101, 103, 222, 216, 204, 128, 156, 20, 52, 17, 92, 93, 216, 183, 175, 219, 86, 81, 209, 251, 121, 110, 154, 113, 120, 39, 102, 143, 31, 80, 119, 46, 61, 121, 115, 60, 15, 23, 212, 102, 158, 105, 198, 215, 136, 188, 20, 235, 238, 26, 94, 112, 251, 31, 97, 58, 76, 253, 244, 45, 140, 160, 138, 78, 69, 75, 119, 184, 56, 192, 252, 27, 59, 194, 98, 37, 159, 213, 46, 4, 41, 239, 119, 77, 108, 54, 209, 200, 7, 131, 202, 138, 252, 231, 244, 41, 171, 121, 42, 213, 60, 123, 246, 58, 2, 195, 191, 187, 205, 108, 156, 108, 180, 232, 151, 164, 26, 76, 108], - [168, 140, 108, 207, 214, 126, 140, 192, 2, 40, 176, 200, 164, 192, 38, 137, 133, 21, 246, 78, 27, 49, 13, 43, 192, 159, 132, 214, 96, 78, 205, 253, 63, 122, 152, 57, 43, 195, 153, 153, 189, 158, 3, 249, 11, 72, 153, 246, 229, 243, 149, 234, 155, 16, 47, 60, 155, 1, 130, 226, 95, 105, 159, 132, 254, 86, 27, 0, 176, 149, 211, 16, 15, 40, 221, 61, 132, 172, 195, 80, 195, 234, 45, 115, 128, 145, 32, 120, 137, 124, 6, 198, 133, 66, 29, 32, 156, 94, 227, 249, 209, 13, 158, 64, 55, 38, 241, 239, 213, 159, 161, 222, 1, 143, 52, 34, 88, 235, 50, 9, 241, 55, 234, 167, 227, 84, 40, 76, 128, 200, 255, 182, 122, 167, 183, 125, 101, 83, 41, 21, 218, 35, 102, 5, 108, 183, 94, 63, 43, 6, 66, 244, 235, 108, 86, 78, 149, 139, 138, 154, 163, 251, 125, 43, 143, 12, 107, 42, 67, 56, 125, 231, 67, 242, 244, 151, 196, 219, 108, 181, 2, 100, 66, 114, 151, 111, 78, 99, 231, 132, 119, 121, 125, 60, 159, 191, 33, 119, 51, 205, 73, 223, 174, 204, 210, 45, 42, 143, 246, 222, 175, 125, 141, 141, 61, 36, 43, 75, 187, 15, 158, 133, 48, 168, 14, 149, 250, 58, 137, 49, 171, 238, 155, 137, 34, 59, 218, 49, 63, 215, 188, 66, 201, 188, 165, 87, 246, 216, 116, 186, 68, 210, 110, 87, 26, 63, 45, 79, 63, 72, 3, 12, 179, 71, 205, 6, 13, 214, 41, 62, 70, 31, 97, 1, 174, 128, 180, 139, 169, 186, 244, 54, 176, 18, 203, 107, 241, 134, 133, 249, 153, 119, 42, 234, 29, 131, 30, 180, 34, 1, 135, 95, 238, 3, 37, 91, 164, 52, 105, 87, 140, 80, 238, 24, 58, 106, 126, 11, 63, 32, 89, 254, 247, 218, 196, 130, 172, 247, 24, 38, 240, 30, 223, 215, 17, 37, 37, 196, 239, 124, 86, 30, 255, 84, 204, 87, 18, 23, 56, 117, 16, 224, 53, 195, 153, 174, 134, 125, 55, 55, 32, 49, 157, 29, 204, 93, 58, 196, 99, 80, 210, 161, 93, 98, 187, 50, 161, 253, 93, 201, 26, 165, 81, 69, 128, 139, 186, 89, 28, 188, 64, 162, 32, 178, 217, 7, 98, 86, 92, 3, 221, 4, 96, 179, 142, 152, 20, 46, 181, 112, 116, 38, 202, 52, 212, 245, 97, 26, 150, 158, 39, 145, 127, 18, 106, 10, 145, 88, 148, 240, 225, 192, 67, 146, 48, 10, 15, 5, 175, 254, 3, 42, 104, 43, 134, 104, 65, 242, 58, 237, 134, 241, 238, 195, 128, 161, 23, 65, 38, 111, 84, 12, 152, 226, 75, 50, 22, 236, 112, 133, 230, 94, 249, 51, 190, 202, 0, 184, 118, 85, 190, 253, 165, 128, 164, 11, 235, 248, 151, 205, 104, 215, 248, 204, 75, 209, 151, 7, 249, 128, 117, 212, 107, 171, 39, 144, 33, 209, 149, 102, 180, 115, 173, 70, 164, 157, 88, 4, 192, 229, 235, 81, 140, 185, 168, 85, 20, 94, 69, 138, 214, 160, 26, 34, 18, 164, 54, 32, 25, 94, 224, 16, 219, 223, 168, 196, 17, 199, 95, 154, 105, 155, 136, 40, 74, 152, 243, 37, 89, 232, 170, 74, 133, 36, 196, 102, 39, 80, 39, 79, 224, 221, 2, 44, 159, 240, 42, 15, 143, 21, 47, 21, 194, 77, 100, 171, 85, 161, 17, 137, 15, 65, 237, 158, 60, 146, 197, 134, 85, 236, 113, 42, 21, 87, 37, 240, 203, 87, 175, 67, 231, 8, 82, 219, 31, 147, 95, 216, 232, 167, 19, 152, 184, 223, 211, 120, 39, 37, 75, 176, 250, 150, 31, 199, 27, 182, 240, 110, 95, 249, 25, 207, 197, 32, 115, 42, 101, 160, 121, 82, 25, 126, 28, 189, 74, 210, 38, 1, 171, 134, 52, 18, 86, 117, 227, 1, 108, 34, 93, 183, 177, 90, 172, 136, 166, 196, 180, 16, 89, 13, 68, 198, 234, 161, 192, 200, 172, 68, 211, 5, 112, 125, 211, 239, 180, 241, 61, 97, 110, 93, 30, 69, 184, 252, 100, 135, 145, 7, 45, 13, 181, 114, 140, 115, 59, 241, 56, 17, 1, 136, 181, 241, 138, 10, 25, 12, 121, 133, 245, 174, 197, 34, 151, 255, 110, 202, 13, 84, 78, 62, 120, 117, 206, 8, 23, 129, 201, 242, 91, 112, 119, 144, 171, 83, 110, 213, 210, 48, 7, 67, 159, 221, 32, 79, 113, 177, 191, 88, 143, 209, 91, 117, 34, 20, 204, 193, 90, 90, 58, 191, 128, 115, 168, 225, 226, 152, 189, 77, 101, 133, 88, 196, 157, 250, 180, 17, 231, 70, 82, 51, 107, 29, 73, 243, 24, 87, 29, 34, 200, 227, 54, 226, 85, 7, 70, 233, 203, 255, 210, 215, 183, 137, 35, 126, 196, 250, 253, 171, 151, 95, 8, 146, 97, 33, 27, 103, 132, 77, 77, 126, 19, 174, 5, 19, 132, 58, 156, 233, 155, 227, 229, 142, 49, 42, 63, 96, 81, 108, 150, 230, 70, 239, 28, 113, 42, 191, 13, 157, 43, 138, 113, 191, 138, 39, 214, 236, 169, 227, 226, 4, 194, 73, 131, 41, 148, 52, 78, 173, 104, 32, 20, 103, 21, 237, 79, 54, 229, 137, 192, 143, 126, 54, 131, 125, 37, 41, 225, 108, 11, 214, 18, 225, 89, 205, 242, 85, 163, 72, 26, 44, 109, 119, 11, 164, 115, 47, 76, 142, 138, 167, 206, 130, 16, 75, 231, 247, 56, 87, 255, 31, 9, 132, 190, 151, 221, 223, 198, 37, 179, 183, 244, 47, 56, 253, 167, 136, 145, 120, 200, 55, 203, 139, 130, 132, 222, 146, 100, 155, 32, 229, 23, 254, 66, 123, 73, 89, 173, 28, 181, 211, 49, 14, 230, 156, 180, 153, 53, 134, 46, 29, 208, 93, 193, 226, 218, 214, 146, 239, 217, 87, 246, 228, 10, 10, 231, 230, 123, 35, 13, 67, 0, 155, 54, 97, 196, 134, 165, 176, 22, 182, 247, 59, 35, 9, 72, 23, 75, 21, 108, 89, 213, 99, 180, 164, 159, 209, 240, 22, 30, 172, 125, 239, 104, 133, 20, 140, 202, 10, 117, 7, 27, 186, 203, 224, 254, 243, 93, 70, 141, 69, 94, 215, 25, 229, 5, 243, 91, 254, 150, 33, 19, 120, 10, 85, 233, 53, 113, 118, 220, 192, 121, 4, 78, 242, 32, 248, 242, 51, 170, 135, 165, 222, 101, 195, 198, 97, 94, 108, 193, 218, 36, 117, 214, 141, 61, 157, 29, 28, 15, 31, 218, 64, 37, 219, 94, 179, 11, 19, 100, 220, 72, 206, 50, 212, 33, 14, 42, 76, 22, 4, 17, 69, 230, 230, 11, 14, 222, 25, 51, 81, 161, 109, 128, 230, 46, 196, 58, 48, 125, 219, 130, 116, 72, 79, 97, 75, 147, 73, 118, 243, 58, 120, 255, 146, 56, 159, 188, 191, 61, 119, 32, 14, 238, 34, 249, 255, 94, 215, 105, 188, 85, 150, 225, 117, 215, 41, 183, 156, 13, 75, 131, 234, 232, 127, 17, 92, 19, 182, 28, 33, 178, 80, 65, 87, 195, 158, 148, 93, 51, 243, 106, 10, 242, 71, 48, 31, 48, 50, 36, 220, 62, 244, 109, 228, 156, 74, 181, 7, 153, 137, 90, 154, 120, 39, 81, 68, 126, 165, 137, 185, 206, 165, 79, 66, 200, 23, 240, 97, 223, 167, 110, 217, 107, 206, 206, 97, 170, 221, 226, 131, 4, 116, 238, 137, 181, 152, 136, 209, 186, 193, 18, 156, 138, 92, 209, 6, 81, 184, 61, 108, 92, 70, 212, 241, 86, 153, 79, 236, 72, 156, 176, 159, 157, 46, 144, 85, 109, 77, 237, 30, 16, 50, 124, 126, 134, 87, 143, 17, 167, 245, 161, 112, 153, 13, 50, 0, 179, 40, 69, 51, 186, 107, 190, 21, 5, 190, 185, 148, 34, 70, 96, 162, 79, 122, 45, 241, 15, 108, 86, 3, 61, 61, 123, 92, 11, 90, 112, 234, 59, 207, 195, 247, 182, 97, 236, 196, 128, 161, 76, 199, 9, 189, 59, 106, 197, 158, 87, 171, 219, 75, 62, 177, 93, 159, 231, 206, 43, 83, 118, 208, 144, 164, 176, 220, 131, 183, 21, 200, 230, 71, 218, 151, 67, 166, 234, 247, 169, 194, 228, 134, 159, 82, 172, 93, 27, 206, 99, 213, 160, 195, 83, 239, 93, 221, 245, 116, 170, 114, 240, 57, 184, 61, 73, 101, 134, 149, 240, 26, 45, 97, 87, 74, 197, 57, 172, 33, 35, 125, 126, 134, 242, 251, 115, 123, 10, 161, 231, 46, 135, 212, 193, 219, 198, 61, 233, 27, 136, 161, 220, 171, 16, 120, 126, 106, 15, 254, 250, 22, 166, 173, 165, 184, 3, 198, 244, 231, 251, 211, 64, 198, 106, 133, 253, 106, 224, 79, 144, 33, 251, 97, 31, 171, 88, 83, 208, 134, 42, 48, 246, 249, 71, 148, 103, 182, 1, 103, 25, 64, 59, 251, 200, 122, 113, 219, 112, 214, 97, 171, 176, 53, 190, 248, 221, 231, 168, 32, 64, 157, 146, 147, 96, 228, 110, 127, 250, 135, 164, 173, 230, 50, 45, 217, 217, 95, 174, 195, 239, 60, 197, 157, 6, 236, 140, 87, 22, 47, 68, 181, 188, 30, 177, 172, 46, 210, 155, 77, 16, 237, 26, 182, 174, 60, 61, 82, 32, 232, 163, 249, 204, 53, 142, 0, 96, 102, 211, 182, 76, 32, 217, 24, 20, 84, 196, 41, 18, 45, 237, 110, 81, 245, 195, 252, 170, 212, 249, 0, 27, 97, 101, 180, 244, 221, 86, 156, 163, 5, 32, 55, 211, 118, 242, 138, 219, 114, 53, 237, 114, 202, 21, 203, 177, 200, 224, 11, 121, 17, 229, 255, 21, 217, 144, 14, 112, 130, 113, 174, 74, 24, 189, 44, 52, 136, 106, 243, 125, 237, 155, 91, 251, 117, 4, 178, 40, 22, 31, 134, 204, 102, 27, 163, 193, 224, 4, 236, 147, 199, 32, 245, 243, 107, 59, 219, 117, 245, 238, 145, 192, 239, 75, 67, 125, 46, 25, 72, 57, 162, 128, 85, 62, 94, 133, 9, 49, 239, 236, 117, 97, 100, 88, 134, 202, 69, 166, 211, 129, 3, 181, 71, 232, 235, 167, 8, 102, 6, 32, 4, 183, 75, 129, 26, 153, 169, 111, 72, 14, 247, 193, 27, 55, 148, 251, 96, 252, 133, 84, 43, 17, 230, 162, 231, 61, 211, 240, 251, 212, 245, 107, 243, 58, 1, 184, 192, 11, 11, 206, 17, 74, 40, 54, 79, 81, 155, 247, 27, 15, 79, 135, 40, 241, 92, 221, 227, 11, 151, 237, 142, 187, 227, 194, 94, 218, 133, 203, 97, 155, 108, 33, 153, 58, 176, 137, 186, 191, 254, 58, 145, 169, 205, 230, 14, 43, 247, 130, 91, 80, 103, 95, 175, 34, 57, 77, 153, 232, 193, 129, 144, 127, 8, 88, 100, 73, 35, 200, 2, 27, 212, 133, 42, 98, 171, 93, 141, 212, 235, 234, 149, 140, 170, 152, 222, 26, 233, 136, 131, 185, 91, 96, 123, 81, 176, 238, 169, 157, 63, 243, 194, 130, 3, 4, 118, 91, 228, 162, 209, 49, 206, 126, 102, 153, 127, 163, 163, 62, 61, 212, 229, 87, 31, 240, 34, 50, 79, 14, 122, 15, 166, 221, 218, 185, 199, 102, 46, 161, 22, 247, 243, 236, 63, 102, 222, 111, 73, 195, 220, 47, 223, 148, 46, 97, 47, 117, 93, 249, 50, 172, 107, 72, 252, 106, 71, 33, 64, 17, 118, 197, 201, 133, 49, 134, 63, 155, 109, 246, 6, 117, 231, 29, 195, 251, 43, 188, 10, 245, 132, 255, 184, 208, 252, 52, 218, 115, 223, 60, 140, 255, 215, 1, 145, 155, 211, 204, 87, 113, 239, 208, 64, 141, 146, 135, 82, 12, 196, 211, 57, 11, 127, 133, 90, 132, 230, 184, 54, 155, 12, 207, 107, 125, 251, 205, 49, 91, 90, 192, 15, 86, 138, 157, 33, 105, 144, 187, 167, 131, 73, 13, 138, 7, 179, 28, 190, 134, 197, 213, 194, 11, 72, 18, 165, 214, 64, 66, 186, 110, 246, 154, 231, 118, 54, 136, 234, 148, 189, 125, 96, 44, 23, 157, 194, 142, 105, 250, 207, 129, 59, 132, 200, 97, 99, 117, 163, 37, 164, 73, 43, 147, 71, 68, 37, 129, 69, 224, 62, 64, 141, 221, 239, 46, 30, 74, 221, 33, 12, 220, 241, 209, 65, 209, 122, 228, 255, 155, 42, 110, 19, 60, 136, 171, 122, 76, 236, 12, 113, 120, 226, 101, 111, 65, 70, 211, 167, 108, 83, 201, 240, 90, 237, 13, 91, 18, 143, 187, 139, 228, 230, 23, 243, 201, 208, 240, 91, 216, 174, 165, 184, 38, 195, 176, 85, 39, 173, 224, 205, 111, 154, 70, 154, 221, 117, 16, 146, 99, 41, 255, 32, 235, 82, 149, 233, 117, 192, 96, 157, 40, 193, 133, 198, 200, 242, 168, 46, 230, 4, 205, 45, 163, 33, 49, 254, 30, 205, 33, 220, 228, 116, 148, 214, 254, 38, 216, 237, 254, 209, 217, 178, 43, 181, 218, 213, 226, 138, 144, 247, 49, 238, 175, 12, 252, 102, 25, 128, 13, 176, 100, 164, 107, 249, 124, 75, 240, 246, 94, 66, 31, 115, 186, 49, 93, 12, 55, 249, 166, 67, 124, 62, 34, 103, 100, 94, 118, 220, 221, 35, 49, 232, 180, 127, 209, 92, 218, 206, 164, 136, 252, 241, 88, 62, 86, 235, 143, 189, 59, 147, 126, 94, 62, 10, 179, 48, 204, 153, 16, 225, 78, 64, 205, 160, 71, 48, 139, 113, 171, 149, 35, 95, 139, 250, 70, 202, 26, 9, 122, 82, 116, 193, 216, 112, 244, 81, 49, 144, 158, 33, 140, 17, 186, 12, 38, 43, 58, 197, 106, 149, 60, 22, 70, 233, 188, 254, 90, 209, 174, 212, 77, 129, 192, 71, 70, 97, 52, 230, 85, 249, 231, 154, 173, 101, 155, 152, 238, 167, 61, 12, 173, 55, 60, 180, 29, 168, 2, 231, 74, 219, 120, 60, 93, 157, 11, 105, 215, 237, 201, 76, 9, 156, 134, 44, 130, 18, 23, 124, 198, 45, 50, 0, 31, 134, 152, 111, 73, 84, 109, 131, 187, 132, 255, 132, 247, 91, 40, 150, 70, 107, 123, 187, 39, 97, 154, 117, 62, 229, 103, 80, 162, 38, 162, 83, 202, 240, 180, 97, 68, 100, 67, 131, 91, 160, 57, 114, 251, 17, 106, 60, 221, 167, 72, 44, 175, 98, 46, 148, 26, 189, 208, 130, 182, 214, 252, 157, 92, 115, 22, 110, 100, 250, 129, 247, 139, 41, 245, 117, 133, 16, 21, 158, 160, 63, 245, 100, 193, 114, 32, 197, 162, 201, 25, 206, 68, 111, 22, 150, 90, 161, 2, 115, 210, 195, 56, 161, 200, 45, 161, 216, 77, 135, 228, 63, 212, 4, 176, 11, 86, 163, 183, 250, 142, 136, 238, 240, 173, 225, 92, 64, 163, 184, 65, 220, 192, 90, 15, 15, 160, 188, 98, 20, 245, 149, 188, 200, 2, 237, 7, 27, 32, 107, 234, 201, 222, 36, 254, 21, 175, 50, 170, 141, 177, 77, 83, 25, 128, 103, 170, 98, 76, 101, 225, 219, 26, 25, 119, 86, 148, 242, 103, 59, 209, 22, 196, 49, 97, 193, 212, 117, 34, 8, 10, 225, 240, 236, 170, 247, 91, 251, 191, 16, 216, 212, 113, 42, 192, 111, 8, 187, 70, 166, 243, 213, 83, 157, 129, 157, 222, 150, 231, 98, 137, 106, 79, 131, 200, 93, 93, 11, 5, 64, 64, 197, 123, 197, 208, 45, 92, 81, 239, 191, 49, 88, 178, 42, 133, 98, 220, 130, 218, 137, 172, 78, 182, 33, 143, 52, 83, 207, 50, 59, 27, 58, 97, 236, 70, 190, 186, 30, 224, 63, 174, 146, 64, 231, 134, 86, 99, 248, 182, 150, 247, 187, 64, 220, 159, 218, 35, 121, 216, 131, 68, 72, 146, 20, 235, 219, 138, 45, 139, 132, 21, 9, 207, 90, 157, 62, 240, 1, 235, 129, 221, 112, 81, 27, 218, 75, 78, 215, 48, 7, 244, 102, 48, 24, 240, 199, 132, 203, 194, 192, 87, 242, 254, 61, 9, 93, 43, 246, 111, 224, 116, 91, 69, 134, 255, 188, 213, 19, 226, 249, 32, 48, 65, 129, 143, 105, 153, 91, 19, 35, 22, 33, 55, 248, 161, 157, 235, 211, 115, 155, 224, 50, 6, 152, 82, 105, 160, 61, 34, 123, 30, 71, 64, 88, 58, 82, 160, 123, 164, 57, 63, 11, 36, 86, 232, 232, 180, 142, 146, 73, 18, 185, 109, 109, 48, 150, 76, 52, 236, 6, 147, 251, 5, 196, 210, 73, 32, 16, 218, 108, 40, 44, 34, 73, 132, 189, 102, 247, 106, 215, 49, 35, 240, 77, 233, 91, 73, 89, 18, 12, 156, 76, 124, 115, 235, 45, 2, 152, 37, 156, 163, 83, 227, 50, 82, 122, 240, 62, 129, 183, 227, 94, 193, 184, 64, 62, 212, 29, 73, 167, 117, 200, 105, 89, 180, 189, 71, 11, 151, 27, 58, 50, 139, 17, 39, 119, 187, 27, 4, 64, 146, 33, 121, 98, 67, 152, 28, 85, 143, 236, 14, 74, 194, 103, 17, 42, 160, 152, 8, 217, 189, 177, 128, 202, 97, 170, 122, 222, 40, 201, 118, 157, 120, 229, 254, 69, 82, 196, 195, 230, 62, 194, 102, 72, 246, 29, 72, 138, 99, 30, 169, 35, 184, 232, 3, 143, 229, 228, 47, 68, 231, 122, 177, 187, 118, 13, 86, 230, 18, 244, 113, 19, 226, 24, 221, 215, 58, 20, 93, 90, 32, 47, 2, 93, 99, 10, 16, 166, 89, 43, 126, 165, 154, 83, 191, 225, 67, 145, 70, 39, 165, 201, 192, 90, 92, 224, 230, 106, 177, 183, 236, 5, 71, 57, 58, 179, 234, 84, 147, 67, 178, 143, 43, 118, 202, 59, 27, 41, 202, 172, 84, 152, 142, 198, 38, 218, 213, 50, 120, 104, 114, 10, 193, 175, 32, 244, 217, 19, 251, 11, 26, 70, 204, 83, 119, 145, 237, 122, 245, 78, 14, 45, 126, 189, 244, 16, 248, 98, 168, 8, 222, 93, 248, 242, 246, 64, 38, 67, 56, 86, 22, 134, 100, 180, 108, 99, 92, 221, 10, 233, 107, 199, 66, 190, 173, 179, 159, 68, 75, 74, 252, 185, 0, 165, 254, 112, 231, 109, 189, 249, 152, 41, 235, 128, 205, 105, 245, 183, 104, 75, 18, 219, 172, 35, 13, 210, 206, 36, 153, 230, 193, 173, 90, 155, 65, 32, 46, 87, 247, 160, 119, 180, 147, 159, 137, 52, 69, 59, 102, 87, 219, 156, 68, 96, 232, 166, 29, 163, 94, 64, 209, 174, 239, 151, 101, 217, 84, 122, 134, 65, 210, 243, 54, 13, 56, 121, 160, 65, 22, 165, 250, 16, 203, 26, 206, 105, 140, 246, 247, 42, 147, 245, 13, 99, 127, 84, 194, 80, 146, 63, 221, 20, 11, 225, 134, 23, 130, 121, 44, 86, 155, 225, 67, 246, 254, 250, 176, 172, 165, 202, 20, 111, 12, 107, 39, 7, 219, 86, 213, 208, 79, 131, 96, 124, 200, 65, 233, 214, 194, 9, 42, 181, 122, 10, 41, 137, 97, 12, 118, 114, 137, 134, 149, 48, 29, 252, 164, 185, 254, 118, 85, 97, 79, 139, 119, 204, 198, 203, 238, 171, 136, 0, 124, 86, 186, 115, 77, 236, 99, 154, 139, 70, 111, 247, 98, 152, 90, 98, 162, 7, 243, 227, 146, 240, 95, 178, 146, 212, 102, 99, 49, 119, 119, 137, 151, 74, 32, 105, 22, 155, 219, 72, 223, 164, 112, 188, 199, 211, 16, 239, 139, 43, 179, 105, 215, 55, 225, 173, 77, 149, 237, 242, 187, 77, 6, 115, 127, 202, 241, 248, 254, 236, 140, 127, 247, 75, 176, 218, 174, 10, 9, 72, 81, 15, 186, 134, 28, 126, 178, 181, 200, 234, 54, 74, 218, 217, 61, 166, 179, 97, 18, 243, 157, 48, 86, 118, 170, 208, 224, 240, 141, 75, 47, 232, 162, 172, 179, 102, 149, 31, 77, 220, 75, 168, 73, 39, 69, 191, 234, 44, 187, 64, 165, 113, 249, 110, 2, 213, 124, 70, 52, 250, 1, 111, 209, 131, 61, 44, 115, 217, 109, 47, 250, 92, 59, 161, 52, 91, 73, 224, 171, 123, 179, 243, 144, 162, 203, 205, 220, 227, 244, 130, 116, 15, 106, 179, 179, 61, 63, 0, 168, 105, 178, 249, 111, 218, 127, 5, 205, 122, 219, 246, 165, 209, 2, 161, 27, 214, 241, 92, 215, 255, 153, 82, 226, 129, 121, 70, 206, 251, 167, 146, 45, 86, 183, 101, 132, 157, 102, 0, 153, 83, 179, 170, 16, 19, 247, 70, 19, 245, 158, 177, 30, 177, 33, 1, 196, 255, 168, 13, 78, 53, 232, 195, 16, 138, 43, 38, 97, 167, 61, 190, 172, 194, 225, 146, 136, 183, 230, 226, 242, 55, 253, 201, 54, 54, 29, 92, 88, 195, 238, 29, 198, 141, 206, 213, 22, 114, 217, 6, 161, 93, 220, 52, 150, 127, 232, 48, 29, 230, 156, 144, 98, 206, 180, 85, 179, 1, 9, 23, 224, 112, 64, 208, 245, 26, 250, 95, 181, 154, 60, 114, 38, 227, 64, 252, 137, 61, 236, 118, 87, 141, 116, 103, 133, 134, 55, 48, 237, 78, 169, 112, 187, 157, 182, 203, 225, 39, 222, 195, 175, 248, 180, 110, 61, 165, 67, 236, 145, 161, 185, 48, 222, 253, 243, 129, 238, 160, 84, 202, 2, 78, 185, 252, 246, 5, 75, 86, 247, 170, 32, 113, 203, 93, 185, 241, 116, 53, 121, 228, 228, 47, 117, 242, 46, 136, 249, 146, 67, 173, 14, 101, 242, 6, 125, 211, 238, 155, 41, 60, 233, 246, 68, 189, 114, 207, 101, 26, 212, 109, 166, 58, 236, 190, 51, 252, 248, 82, 249, 164, 184, 64, 20, 107, 13, 78, 174, 44, 111, 22, 237, 249, 181, 85, 192, 38, 175, 184, 55, 210, 230, 238, 246, 226, 165, 72, 42, 49, 120, 184, 234, 49, 30, 230, 61, 102, 228, 164, 201, 179, 140, 202, 144, 45, 114, 142, 47, 9, 32, 132, 119, 93, 121, 78, 155, 146, 85, 41, 231, 1, 3, 145, 143, 167, 217, 45, 126, 17, 107, 99, 176, 235, 244, 117, 63, 111, 63, 228, 241, 125, 105, 59, 93, 247, 185, 42, 76, 254, 1, 235, 176, 41, 136, 147, 33, 97, 117, 115, 101, 152, 210, 26, 134, 250, 252, 158, 119, 242, 176, 77, 227, 237, 219, 96, 211, 31, 206, 78, 228, 55, 199, 106, 239, 93, 236, 53, 212, 26, 250, 75, 8, 69, 156, 55, 108, 137, 11, 84, 61, 136, 250, 128, 90, 5, 7, 10, 202, 202, 75, 60, 30, 37, 253, 25, 53, 10, 224, 144, 52, 126, 34, 36, 198, 157, 89, 161, 154, 172, 115, 56, 118, 174, 193, 191, 170, 137, 226, 43, 185, 57, 255, 29, 241, 236, 76, 97, 247, 58, 8, 227, 26, 179, 110, 239, 35, 26, 108, 64, 154, 67, 29, 29, 55, 30, 204, 75, 207, 144, 245, 193, 126, 120, 164, 143, 73, 114, 169, 75, 121, 237, 248, 40, 80, 119, 113, 3, 216, 172, 206, 69, 202, 5, 236, 156, 217, 111, 141, 88, 141, 21, 187, 135, 26, 160, 164, 44, 81, 156, 202, 213, 28, 36, 160, 195, 65, 91, 240, 214, 56, 206, 209, 212, 165, 252, 77, 0, 45, 107, 0, 68, 233, 66, 196, 123, 238, 50, 157, 245, 148, 69, 40, 179, 200, 56, 93, 94, 207, 133, 236, 179, 30, 47, 83, 233, 235, 169, 55, 161, 129, 170, 251, 172, 55, 134, 131, 149, 17, 108, 115, 234, 144, 70, 36, 18, 170, 181, 46, 84, 207, 67, 0, 205, 167, 216, 253, 58, 9, 120, 18, 227, 72, 57, 163, 170, 112, 228, 60, 71, 70, 43, 220, 239, 14, 253, 191, 7, 31, 197, 91, 115, 27, 41, 235, 42, 81, 226, 39, 63, 137, 50, 68, 10, 252, 159, 97, 9, 74, 157, 93, 208, 172, 22, 194, 146, 160, 58, 208, 192, 114, 36, 76, 80, 140, 200, 25, 198, 64, 70, 134, 86, 76, 255, 142, 43, 189, 181, 219, 67, 244, 254, 221, 195, 21, 62, 34, 105, 36, 47, 231, 230, 117, 225, 176, 198, 33, 228, 233, 63, 179, 113, 169, 180, 63, 84, 226, 38, 188, 188, 209, 21, 219, 7, 165, 234, 50, 169, 104, 9, 106, 125, 191, 180, 103, 238, 214, 169, 247, 32, 89, 88, 19, 14, 162, 192, 62, 246, 254, 116, 211, 0, 235, 212, 197, 136, 49, 43, 107, 225, 253, 120, 246, 195, 103, 213, 6, 191, 59, 144, 54, 97, 223, 127, 120, 126, 109, 14, 120, 108, 82, 204, 74, 28, 155, 7, 16, 201, 218, 122, 106, 142, 2, 103, 253, 221, 254, 237, 91, 242, 228, 55, 203, 91, 181, 198, 98, 186, 22, 255, 38, 24, 128, 100, 57, 195, 57, 103, 161, 251, 77, 99, 169, 175, 81, 106, 203, 246, 158, 156, 235, 188, 90, 196, 219, 53, 119, 109, 152, 161, 31, 231, 205, 252, 14, 200, 29, 36, 166, 148, 75, 64, 193, 153, 3, 204, 105, 129, 249, 183, 39, 191, 166, 129, 248, 46, 153, 68, 78, 119, 48, 185, 243, 80, 31, 140, 223, 201, 199, 108, 228, 179, 65, 125, 35, 5, 54, 21, 225, 30, 77, 155, 129, 154, 202, 66, 71, 253, 5, 95, 243, 81, 32, 203, 194, 246, 249, 39, 117, 54, 162, 119, 6, 51, 98, 200, 29, 140, 174, 97, 8, 204, 25, 232, 225, 234, 187, 57, 128, 203, 178, 216, 143, 41, 80, 27, 166, 183, 226, 190, 87, 93, 171, 37, 251, 65, 164, 163, 217, 131, 106, 109, 159, 215, 152, 206, 229, 141, 163, 216, 43, 173, 148, 195, 206, 224, 137, 204, 119, 51, 233, 75, 209, 6, 125, 218, 248, 245, 119, 187, 226, 219, 216, 240, 152, 35, 45, 215, 126, 13, 173, 240, 194, 70, 93, 55, 24, 95, 116, 31, 130, 97, 141, 167, 234, 64, 152, 37, 145, 250, 198, 200, 223, 89, 69, 214, 21, 114, 53, 97, 81, 246, 182, 156, 75, 77, 107, 57, 110, 100, 12, 22, 149, 244, 169, 105, 39, 184, 190, 231, 116, 226, 6, 164, 14, 10, 177, 6, 189, 111, 151, 240, 8, 19, 39, 15, 213, 126, 0, 238, 225, 152, 186, 82, 120, 178, 58, 81, 17, 170, 219, 153, 116, 122, 57, 134, 32, 30, 125, 110, 16, 208, 157, 251, 116, 75, 48, 174, 165, 88, 184, 59, 41, 106, 150, 224, 220, 173, 171, 220, 65, 190, 61, 32, 52, 14, 63, 193, 254, 118, 239, 3, 186, 96, 3, 151, 201, 227, 197, 206, 248, 109, 236, 190, 167, 184, 88, 92, 216, 135, 247, 74, 97, 238, 240, 180, 246, 133, 165, 207, 230, 21, 20, 113, 85, 64, 108, 32, 2, 169, 61, 136, 33, 207, 144, 216, 164, 187, 218, 230, 70, 123, 231, 189, 90, 114, 234, 31, 75, 32, 209, 235, 133, 11, 237, 216, 92, 215, 194, 109, 82, 42, 68, 152, 150, 167, 119, 245, 109, 16, 69, 40, 169, 226, 143, 165, 109, 49, 121, 131, 139, 170, 133, 111, 83, 9, 96, 39, 99, 132, 180, 250, 178, 161, 111, 12, 33, 70, 229, 74, 152, 101, 209, 231, 84, 38, 74, 17, 201, 90, 46, 104, 211, 223, 32, 12, 35, 71, 59, 132, 92, 60, 179, 206, 61, 234, 56, 63, 7, 64, 185, 249, 197, 153, 30, 48, 120, 110, 19, 34, 43, 8, 167, 2, 123, 161, 50, 56, 152, 119, 57, 252, 191, 124, 18, 144, 166, 147, 13, 163, 83, 67, 195, 243, 64, 229, 198, 94, 79, 25, 60, 203, 161, 118, 224, 8, 109, 196, 219, 122, 195, 9, 206, 71, 102, 27, 173, 215, 220, 83, 158, 88, 174, 75, 40, 232, 120, 154, 184, 217, 183, 195, 220, 239, 148, 66, 140, 147, 110, 252, 226, 135, 11, 215, 30, 213, 199, 235, 127, 251, 157, 148, 154, 191, 168, 88, 135, 101, 90, 195, 101, 142, 75, 241, 158, 237, 99, 167, 13, 222, 222, 120, 4, 44, 189, 125, 254, 146, 46, 102, 56, 188, 56, 165, 23, 135, 224, 16, 198, 92, 46, 242, 98, 164, 128, 176, 23, 167, 240, 127, 90, 41, 115, 21, 49, 142, 143, 165, 244, 85, 200, 230, 186, 56, 174, 128, 22, 154, 193, 15, 75, 237, 173, 202, 16, 107, 57, 237, 125, 38, 236, 36, 57, 58, 133, 72, 26, 119, 157, 222, 129, 246, 118, 160, 225, 142, 236, 175, 23, 254, 105, 156, 38, 235, 215, 87, 77, 163, 185, 139, 133, 50, 123, 102, 250, 21, 162, 204, 232, 60, 56, 135, 243, 129, 38, 0, 74, 65, 142, 231, 184, 166, 222, 106, 66, 249, 233, 214, 76, 50, 192, 41, 30, 226, 20, 109, 130, 120, 23, 172, 217, 136, 247, 49, 135, 148, 193, 63, 255, 52, 96, 180, 142, 234, 27, 59, 136, 200, 206, 144, 39, 72, 202, 32, 10, 51, 128, 70, 174, 108, 74, 120, 26, 63, 253, 142, 54, 247, 89, 169, 222, 162, 228, 176, 187, 77, 128, 180, 86, 7, 112, 229, 29, 150, 143, 21, 115, 210, 163, 109, 116, 58, 109, 34, 170, 175, 152, 123, 120, 182, 51, 175, 137, 178, 79, 6, 149, 173, 116, 105, 42, 34, 66, 184, 227, 203, 203, 176, 20, 226, 21, 222, 130, 72, 243, 226, 1, 109, 101, 15, 30, 122, 103, 127, 11, 3, 246, 219, 159, 56, 55, 193, 162, 132, 174, 156, 6, 29, 170, 142, 161, 3, 146, 246, 168, 51, 18, 114, 100, 73, 87, 161, 254, 156, 71, 92, 243, 135, 188, 214, 142, 104, 216, 36, 111, 216, 50, 10, 10, 42, 95, 133, 73, 69, 244, 65, 123, 144, 197, 63, 123, 231, 77, 133, 132, 119, 81, 238, 164, 216, 158, 186, 152, 239, 193, 74, 78, 118, 91, 70, 183, 100, 117, 148, 240, 42, 124, 172, 82, 145, 94, 137, 84, 75, 237, 16, 198, 223, 178, 125, 218, 126, 228, 13, 193, 59, 86, 27, 4, 196, 81, 155, 106, 210, 132, 131, 80, 238, 196, 51, 127, 194, 212, 77, 169, 220, 3, 154, 52, 45, 9, 56, 46, 90, 32, 41, 155, 225, 137, 186, 129, 86, 0, 193, 143, 88, 169, 153, 14, 244, 106, 43, 201, 15, 16, 255, 254, 23, 16, 182, 36, 105, 57, 234, 235, 155, 214, 146, 244, 77, 72, 224, 59, 175, 150, 84, 190, 236, 254, 141, 10, 162, 218, 92, 234, 83, 44, 31, 88, 182, 34, 199, 47, 82, 91, 115, 31, 18, 157, 95, 115, 127, 116, 31, 144, 7, 68, 85, 228, 65, 88, 154, 99, 144, 248, 121, 170, 68, 66, 223, 148, 250, 251, 58, 208, 171, 52, 240, 4, 62, 141, 103, 106, 184, 240, 5, 14, 202, 30, 154, 109, 232, 83, 211, 190, 216, 138, 44, 87, 113, 90, 195, 78, 157, 179, 223, 200, 236, 4, 7, 149, 128, 89, 42, 62, 238, 213, 39, 226, 160, 0, 25, 203, 120, 127, 78, 105, 177, 137, 126, 164, 83, 48, 87, 47, 154, 51, 223, 44, 44, 165, 136, 161, 217, 171, 224, 0, 244, 17, 95, 56, 90, 187, 99, 32, 179, 120, 96, 11, 66, 83, 160, 88, 169, 174, 238, 197, 84, 112, 228, 218, 172, 72, 207, 84, 86, 118, 93, 220, 217, 247, 6, 189, 38, 99, 56, 115, 217, 38, 82, 79, 58, 180, 116, 178, 34, 138, 192, 65, 19, 87, 29, 89, 154, 216, 77, 181, 115, 108, 218, 223, 163, 184, 199, 155, 14, 221, 248, 131, 140, 207, 170, 95, 224, 202, 146, 104, 79, 17, 141, 179, 151, 9, 155, 195, 127, 119, 7, 231, 196, 229, 75, 129, 10, 186, 54, 72, 147, 216, 208, 182, 149, 4, 138, 229, 240, 194, 172, 254, 197, 128, 92, 116, 111, 77, 187, 7, 203, 35, 40, 211, 3, 247, 43, 239, 4, 160, 80, 68, 183, 113, 219, 240, 32, 161, 32, 46, 114, 20, 65, 96, 149, 79, 84, 243, 124, 51, 160, 61, 23, 201, 65, 125, 130, 166, 154, 31, 61, 3, 102, 152, 219, 73, 122, 46, 197, 214, 123, 100, 173, 188, 165, 213, 188, 23, 249, 77, 118, 56, 16, 236, 255, 124, 249, 128, 62, 99, 247, 188, 164, 7, 108, 9, 237, 66, 167, 183, 182, 86, 247, 118, 69, 109, 159, 27, 194, 38, 49, 4, 86, 191, 182, 78, 194, 13, 225, 249, 73, 237, 162, 77, 155, 160, 218, 205, 193, 225, 190, 184, 32, 40, 69, 139, 160, 130, 239, 67, 125, 53, 121, 196, 101, 224, 99, 171, 9, 67, 165, 81, 205, 1, 129, 171, 194, 163, 168, 243, 163, 68, 173, 198, 35, 217, 149, 5, 96, 242, 13, 62, 113, 160, 44, 254, 47, 218, 176, 79, 241, 209, 39, 248, 124, 52, 174, 28, 22, 15, 249, 100, 188, 75, 252, 126, 40, 241, 108, 221, 73, 103, 208, 133, 210, 167, 152, 169, 246, 179, 169, 132, 202, 103, 169, 110, 222, 119, 156, 36, 51, 60, 205, 255, 194, 142, 171, 191, 218, 52, 34, 196, 186, 11, 225, 44, 48, 207, 252, 134, 123, 7, 216, 118, 225, 33, 124, 60, 1, 63, 206, 63, 65, 185, 61, 82, 89, 98, 187, 154, 88, 118, 7, 122, 188, 118, 90, 207, 127, 25, 188, 220, 122, 169, 59, 225, 88, 76, 239, 243, 141, 132, 194, 211, 115, 56, 128, 55, 134, 234, 2, 96, 64, 49, 55, 61, 232, 194, 201, 25, 3, 67, 23, 22, 108, 117, 227, 102, 249, 78, 198, 41, 142, 11, 243, 181, 142, 130, 237, 32, 186, 238, 44, 1, 190, 13, 78, 172, 68, 74, 165, 152, 62, 17, 33, 185, 229, 195, 196, 250, 23, 46, 66, 124, 241, 79, 133, 145, 203, 139, 74, 54, 230, 82, 173, 89, 171, 55, 70, 105, 80, 87, 129, 26, 88, 217, 84, 168, 71, 53, 175, 163, 216, 101, 112, 110, 139, 99, 192, 72, 1, 52, 145, 171, 78, 66, 9, 196, 201, 231, 87, 95, 218, 142, 226, 23, 142, 209, 131, 188, 165, 70, 67, 250, 149, 179, 141, 38, 154, 70, 56, 90, 138, 218, 169, 102, 233, 11, 240, 138, 64, 140, 168, 123, 76, 176, 50, 151, 207, 79, 162, 247, 229, 117, 225, 7, 131, 183, 46, 153, 41, 207, 107, 53, 231, 224, 219, 136, 255, 147, 66, 69, 154, 123, 163, 34, 121, 88, 159, 223, 219, 28, 178, 66, 52, 221, 29, 155, 164, 191, 208, 47, 54, 33, 74, 29, 147, 158, 28, 143, 199, 182, 164, 215, 190, 159, 237, 91, 176, 204, 94, 48, 222, 168, 70, 13, 133, 54, 178, 110, 126, 20, 68, 146, 122, 61, 219, 242, 114, 219, 180, 241, 238, 91, 249, 220, 51, 77, 189, 187, 45, 175, 199, 239, 77, 224, 81, 128, 235, 187, 178, 154, 63, 187, 12, 165, 15, 119, 82, 2, 225, 238, 62, 67, 252, 156, 127, 229, 44, 211, 86, 84, 140, 238, 192, 196, 207, 113, 156, 20, 76, 155, 141, 231, 180, 128, 34, 82, 183, 150, 240, 72, 233, 245, 169, 253, 230, 229, 222, 42, 56, 192, 70, 180, 216, 98, 163, 118, 228, 132, 177, 21, 8, 223, 128, 190, 91, 210, 115, 175, 144, 133, 196, 238, 241, 34, 14, 114, 168, 210, 18, 63, 56, 153, 205, 237, 70, 242, 245, 9, 244, 115, 165, 112, 160, 102, 218, 187, 84, 35, 171, 148, 200, 14, 71, 17, 177, 55, 18, 190, 165, 189, 89, 202, 129, 127, 88, 180, 40, 45, 18, 145, 2, 88, 148, 112, 71, 78, 233, 66, 189, 146, 116, 121, 225, 70, 234, 21, 218, 91, 142, 175, 186, 168, 193, 57, 94, 90, 160, 198, 172, 208, 11, 202, 12, 241, 113, 198, 152, 218, 183, 186, 47, 191, 176, 175, 201, 122, 107, 190, 135, 50, 100, 238, 223, 160, 136, 135, 101, 214, 53, 97, 139, 200, 178, 85, 142, 167, 55, 8, 9, 56, 122, 80, 58, 148, 51, 13, 114, 23, 10, 223, 104, 213, 189, 179, 146, 229, 234, 117, 228, 189, 56, 245, 13, 210, 134, 58, 163, 172, 96, 4, 170, 24, 205, 114, 129, 142, 175, 77, 211, 33, 179, 204, 140, 246, 41, 108, 164, 80, 238, 215, 33, 174, 44, 49, 214, 103, 40, 173, 247, 188, 224, 94, 206, 99, 90, 110, 2, 89, 123, 185, 111, 6, 48, 193, 81, 180, 76, 43, 150, 35, 21, 127, 135, 110, 72, 130, 72, 49, 182, 146, 255, 117, 136, 29, 42, 93, 55, 58, 147, 214, 211, 174, 89, 185, 106, 24, 41, 212, 158, 137, 237, 202, 250, 254, 71, 252, 131, 3, 243, 195, 172, 142, 43, 151, 117, 218, 130, 132, 150, 220, 156, 231, 79, 156, 117, 69, 181, 189, 111, 165, 123, 248, 226, 167, 118, 172, 170, 69, 185, 113, 184, 37, 38, 185, 203, 139, 182, 241, 174, 91, 53, 109, 171, 104, 132, 37, 217, 94, 37, 233, 201, 142, 139, 14, 207, 51, 181, 193, 142, 232, 31, 71, 193, 100, 199, 184, 123, 225, 96, 70, 42, 192, 14, 2, 244, 254, 116, 97, 104, 64, 47, 77, 208, 211, 186, 32, 6, 59, 27, 142, 78, 42, 168, 243, 97, 71, 76, 79, 196, 23, 190, 248, 33, 180, 117, 232, 29, 31, 72, 134, 119, 8, 107, 196, 77, 166, 255, 159, 202, 72, 56, 103, 43, 38, 185, 153, 66, 129, 103, 181, 69, 232, 2, 17, 70, 220, 162, 150, 9, 229, 62, 213, 35, 75, 8, 140, 253, 37, 209, 139, 3, 171, 47, 4, 198, 253, 161, 203, 137, 24, 210, 139, 38, 27, 104, 71, 47, 129, 21, 201, 162, 190, 77, 23, 34, 176, 87, 110, 240, 19, 8, 105, 209, 207, 207, 43, 129, 28, 194, 238, 68, 249, 147, 240, 24, 18, 223, 140, 47, 72, 120, 140, 93, 161, 22, 33, 142, 215, 222, 44, 70, 62, 24, 126, 24, 4, 178, 134, 125, 22, 192, 115, 141, 7, 149, 118, 253, 66, 116, 218, 171, 85, 185, 214, 148, 222, 42, 234, 42, 135, 44, 175, 27, 145, 1, 250, 28, 229, 64, 41, 123, 144, 96, 132, 20, 219, 40, 195, 200, 32, 117, 198, 230, 171, 99, 158, 16, 38, 134, 17, 145, 180, 8, 171, 0, 230, 196, 172, 131, 103, 79, 180, 198, 10, 94, 149, 24, 73, 97, 229, 51, 36, 11, 86, 2, 108, 225, 166, 200, 180, 30, 59, 220, 59, 219, 28, 131, 187, 25, 207, 221, 14, 132, 254, 187, 18, 141, 227, 66, 67, 99, 152, 54, 30, 214, 136, 88, 192, 33, 17, 21, 215, 90, 235, 19, 99, 240, 25, 35, 69, 234, 179, 175, 247, 137, 57, 11, 188, 143, 45, 2, 22, 92, 78, 36, 211, 99, 101, 254, 58, 128, 102, 124, 249, 200, 120, 7, 91, 144, 130, 94, 45, 236, 222, 173, 0, 67, 168, 163, 53, 63, 149, 104, 10, 132, 224, 83, 213, 165, 40, 189, 196, 156, 62, 211, 202, 138, 220, 32, 165, 175, 106, 221, 13, 31, 109, 32, 224, 53, 212, 117, 27, 216, 170, 238, 183, 140, 154, 180, 18, 254, 199, 90, 241, 93, 84, 138, 91, 66, 64, 88, 21, 219, 251, 54, 70, 250, 210, 40, 167, 52, 87, 46, 198, 95, 105, 91, 240, 74, 39, 93, 84, 80, 69, 155, 33, 235, 55, 142, 153, 202, 95, 39, 221, 151, 105, 128, 7, 45, 57, 77, 19, 230, 241, 75, 21, 176, 56, 44, 51, 183, 76, 62, 241, 59, 217, 169, 132, 71, 246, 99, 79, 8, 119, 39, 75, 137, 144, 49, 183, 101, 190, 175, 195, 202, 170, 105, 47, 25, 190, 87, 58, 186, 197, 166, 133, 127, 158, 92, 5, 139, 7, 103, 114, 153, 44, 96, 138, 107, 100, 153, 175, 106, 146, 46, 5, 2, 162, 193, 44, 68, 88, 135, 236, 113, 176, 229, 109, 46, 150, 105, 15, 17, 125, 233, 18, 2, 90, 185, 227, 166, 205, 86, 100, 125, 185, 192, 127, 25, 227, 172, 134, 181, 241, 135, 48, 246, 233, 143, 184, 196, 222, 199, 157, 23, 16, 231, 50, 128, 120, 19, 146, 62, 226, 254, 204, 34, 64, 152, 245, 107, 225, 212, 12, 92, 0, 111, 243, 2, 190, 228, 164, 43, 99, 152, 150, 212, 200, 126, 117, 248, 43, 4, 244, 2, 85, 132, 95, 223, 121, 114, 10, 9, 228, 219, 140, 113, 217, 176, 111, 138, 245, 160, 154, 107, 240, 91, 151, 20, 8, 228, 222, 137, 253, 170, 244, 138, 41, 29, 126, 48, 59, 125, 181, 7, 178, 97, 190, 140, 64, 223, 141, 32, 161, 179, 199, 175, 25, 0, 102, 173, 185, 49, 161, 176, 125, 69, 35, 17, 194, 172, 197, 138, 57, 5, 78, 251, 30, 172, 53, 181, 79, 245, 13, 253, 238, 11, 12, 222, 218, 1, 176, 70, 7, 197, 154, 253, 137, 1, 64, 140, 80, 71, 53, 151, 229, 20, 26, 88, 176, 2, 218, 161, 194, 27, 69, 74, 12, 186, 131, 43, 92, 52, 128, 40, 149, 232, 64, 17, 140, 93, 244, 245, 156, 32, 99, 118, 225, 83, 10, 25, 189, 134, 140, 194, 254, 7, 195, 56, 216, 142, 72, 138, 3, 144, 91, 30, 252, 39, 138, 44, 198, 208, 144, 241, 128, 95, 66, 65, 38, 18, 40, 20, 28, 134, 118, 113, 202, 173, 103, 155, 168, 167, 19, 101, 227, 183, 231, 161, 105, 218, 202, 61, 237, 78, 23, 11, 7, 19, 188, 15, 144, 199, 14, 231, 180, 209, 165, 76, 45, 89, 195, 161, 107, 42, 25, 139, 91, 48, 53, 247, 98, 207, 237, 84, 253, 188, 225, 253, 226, 150, 204, 243, 219, 126, 103, 210, 3, 39, 89, 172, 40, 246, 140, 39, 42, 173, 91, 141, 60, 68, 170, 177, 120, 160, 113, 38, 110, 80, 83, 25, 64, 163, 127, 214, 140, 84, 208, 132, 217, 129, 99, 233, 81, 19, 146, 228, 87, 174, 10, 37, 84, 155, 241, 158, 22, 190, 68, 87, 137, 185, 33, 227, 41, 236, 117, 221, 123, 173, 18, 54, 191, 158, 222, 62, 57, 170, 145, 195, 160, 252, 204, 172, 107, 80, 6, 32, 185, 43, 71, 216, 166, 225, 217, 39, 130, 64, 138, 194, 233, 235, 87, 241, 187, 48, 164, 168, 148, 149, 233, 56, 86, 11, 79, 216, 253, 196, 212, 159, 102, 184, 181, 218, 39, 47, 155, 48, 126, 11, 220, 146, 25, 21, 154, 237, 111, 131, 44, 91, 58, 115, 95, 170, 52, 152, 198, 31, 176, 202, 245, 228, 15, 15, 79, 149, 87, 65, 231, 249, 239, 249, 125, 237, 74, 38, 233, 236, 103, 138, 249, 114, 208, 218, 207, 65, 45, 130, 40, 148, 31, 112, 38, 83, 237, 102, 245, 56, 114, 145, 131, 140, 70, 57, 88, 151, 247, 63, 177, 186, 97, 186, 10, 218, 216, 50, 86, 122, 53, 142, 215, 35, 70, 117, 137, 173, 39, 102, 205, 170, 27, 94, 216, 115, 169, 118, 155, 243, 11, 224, 180, 14, 224, 110, 74, 166, 99, 161, 29, 240, 49, 175, 115, 118, 143, 121, 72, 112, 124, 175, 2, 37, 60, 176, 243, 109, 202, 253, 230, 128, 237, 51, 186, 15, 246, 183, 178, 83, 72, 6, 180, 68, 83, 177, 192, 110, 223, 90, 202, 119, 150, 202, 87, 211, 136, 203, 111, 78, 241, 87, 28, 134, 201, 22, 89, 61, 76, 165, 188, 178, 61, 3, 95, 180, 131, 111, 154, 207, 61, 98, 249, 95, 241, 108, 2, 244, 95, 237, 140, 226, 166, 249, 145, 215, 58, 48, 228, 240, 26, 22, 248, 43, 221, 124, 250, 231, 14, 193, 9, 202, 254, 136, 63, 214, 75, 193, 221, 163, 107, 4, 44, 124, 36, 94, 56, 135, 17, 129, 239, 140, 209, 203, 142, 47, 117, 117, 199, 250, 53, 163, 173, 163, 118, 33, 141, 243, 242, 66, 54, 233, 32, 194, 220, 14, 198, 191, 47, 45, 79, 248, 141, 33, 85, 209, 124, 199, 167, 46, 83, 34, 195, 7, 108, 52, 56, 143, 109, 133, 71, 216, 224, 126, 234, 14, 74, 143, 172, 80, 219, 138, 89, 238, 31, 215, 189, 71, 221, 203, 80, 23, 242, 219, 231, 46, 122, 215, 171, 43, 32, 123, 124, 101, 32, 20, 237, 42, 40, 106, 107, 155, 70, 60, 134, 193, 140, 88, 200, 73, 14, 186, 170, 169, 26, 135, 162, 191, 198, 50, 235, 118, 15, 236, 108, 179, 133, 228, 217, 114, 18, 60, 94, 215, 207, 119, 198, 2, 205, 252, 70, 137, 154, 5, 50, 218, 200, 199, 118, 167, 54, 196, 26, 186, 65, 29, 231, 129, 226, 0, 224, 98, 234, 153, 0, 249, 249, 180, 203, 153, 174, 226, 246, 193, 129, 98, 146, 165, 175, 85, 171, 73, 153, 115, 96, 196, 240, 69, 193, 192, 58, 141, 185, 73, 55, 117, 194, 190, 176, 160, 152, 61, 46, 251, 222, 29, 3, 132, 84, 247, 64, 227, 189, 100, 153, 194, 225, 128, 180, 112, 199, 125, 234, 242, 188, 237, 143, 169, 110, 34, 94, 13, 141, 67, 72, 198, 161, 150, 232, 6, 252, 242, 63, 186, 250, 141, 210, 94, 131, 78, 123, 233, 96, 31, 160, 119, 79, 170, 20, 46, 227, 75, 24, 204, 165, 8, 61, 17, 70, 37, 17, 66, 209, 157, 62, 32, 35, 183, 238, 46, 227, 125, 56, 123, 216, 153, 237, 112, 140, 95, 199, 54, 64, 102, 70, 62, 162, 37, 95, 50, 203, 210, 190, 65, 57, 238, 118, 144, 240, 105, 101, 71, 53, 54, 119, 87, 78, 249, 16, 227, 67, 134, 203, 224, 169, 109, 223, 180, 243, 37, 104, 241, 250, 222, 242, 236, 155, 242, 163, 211, 220, 139, 11, 123, 222, 11, 59, 225, 230, 39, 231, 203, 85, 215, 119, 134, 234, 44, 173, 186, 163, 73, 88, 248, 144, 125, 198, 225, 161, 241, 23, 42, 2, 62, 89, 25, 81, 128, 215, 119, 71, 125, 154, 52, 146, 50, 235, 58, 6, 6, 126, 106, 204, 152, 111, 43, 254, 137, 186, 40, 237, 92, 139, 85, 218, 98, 149, 174, 119, 95, 198, 198, 121, 253, 157, 173, 132, 216, 204, 177, 40, 146, 250, 31, 1, 168, 172, 120, 145, 177, 89, 195, 58, 69, 42, 172, 76, 30, 75, 113, 20, 140, 52, 250, 15, 41, 105, 1, 82, 159, 33, 245, 159, 187, 137, 32, 232, 139, 41, 150, 225, 229, 76, 137, 55, 139, 78, 87, 85, 46, 63, 155, 200, 40, 70, 10, 7, 39, 227, 127, 218, 240, 176, 176, 111, 57, 121, 32, 73, 51, 81, 147, 204, 92, 129, 88, 158, 140, 0, 70, 126, 189, 185, 32, 165, 216, 51, 4, 30, 25, 74, 180, 172, 135, 213, 147, 161, 159, 114, 241, 100, 220, 172, 121, 68, 32, 215, 110, 98, 114, 150, 149, 167, 154, 240, 143, 221, 24, 147, 219, 197, 102, 21, 12, 182, 177, 172, 31, 36, 10, 39, 180, 64, 82, 249, 7, 66, 151, 153, 243, 22, 226, 74, 128, 238, 156, 67, 194, 109, 101, 71, 88, 67, 234, 193, 4, 151, 81, 225, 236, 252, 164, 36, 165, 204, 163, 47, 130, 192, 234, 119, 102, 171, 173, 173, 27, 235, 6, 137, 7, 220, 162, 201, 244, 62, 163, 156, 63, 145, 9, 220, 142, 196, 84, 34, 161, 168, 190, 243, 91, 18, 178, 117, 15, 228, 1, 255, 105, 22, 188, 42, 1, 41, 104, 48, 251, 58, 136, 224, 67, 141, 126, 187, 92, 140, 204, 75, 158, 185, 123, 113, 171, 211, 114, 92, 223, 140, 194, 197, 77, 86, 244, 6, 50, 13, 70, 156, 16, 71, 187, 9, 205, 75, 143, 169, 113, 115, 176, 115, 32, 100, 239, 133, 16, 163, 90, 151, 192, 116, 236, 88, 176, 146, 170, 252, 242, 84, 83, 26, 37, 106, 22, 229, 143, 152, 28, 69, 188, 104, 55, 200, 173, 104, 186, 250, 150, 187, 116, 46, 98, 159, 226, 141, 30, 9, 169, 148, 55, 205, 134, 43, 90, 221, 182, 159, 47, 145, 61, 136, 115, 187, 122, 96, 121, 5, 16, 141, 162, 188, 199, 154, 8, 16, 189, 189, 145, 174, 144, 2, 201, 74, 69, 174, 23, 4, 134, 21, 122, 227, 168, 181, 121, 94, 24, 194, 255, 164, 97, 229, 31, 166, 13, 88, 126, 220, 184, 104, 231, 115, 47, 42, 216, 58, 182, 32, 212, 78, 62, 95, 204, 171, 179, 238, 72, 249, 242, 36, 31, 244, 171, 33, 35, 28, 222, 226, 3, 110, 88, 219, 218, 243, 3, 219, 204, 251, 114, 214, 223, 1, 210, 157, 55, 47, 192, 146, 99, 170, 123, 67, 122, 36, 70, 61, 51, 63, 90, 168, 66, 89, 29, 171, 229, 207, 87, 249, 218, 58, 130, 77, 220, 218, 77, 41, 70, 118, 187, 56, 154, 117, 233, 36, 13, 243, 102, 62, 145, 221, 217, 138, 215, 51, 232, 183, 240, 12, 180, 14, 239, 238, 187, 226, 125, 52, 129, 208, 220, 71, 191, 211, 61, 2, 223, 43, 254, 155, 21, 237, 101, 13, 110, 192, 243, 250, 195, 240, 230, 93, 82, 104, 32, 183, 147, 6, 94, 81, 25, 101, 211, 196, 28, 47, 196, 60, 199, 38, 120, 199, 46, 61, 218, 119, 175, 171, 212, 67, 241, 230, 18, 92, 11, 213, 231, 15, 90, 80, 234, 179, 75, 111, 194, 107, 93, 57, 130, 19, 174, 78, 90, 35, 20, 55, 110, 195, 84, 74, 194, 83, 155, 206, 53, 118, 218, 36, 133, 193, 186, 132, 30, 228, 17, 255, 145, 44, 211, 27, 198, 46, 147, 200, 68, 142, 85, 95, 88, 35, 180, 80, 71, 153, 216, 196, 33, 151, 8, 20, 166, 144, 160, 255, 103, 222, 205, 75, 250, 112, 46, 52, 253, 196, 53, 26, 187, 6, 13, 166, 29, 123, 48, 83, 128, 175, 157, 154, 176, 106, 106, 143, 26, 254, 84, 135, 96, 54, 211, 166, 1, 122, 54, 174, 67, 10, 140, 60, 8, 223, 130, 252, 191, 104, 181, 43, 15, 207, 140, 246, 244, 233, 141, 226, 99, 118, 22, 35, 38, 226, 229, 8, 72, 95, 79, 240, 19, 98, 200, 6, 93, 141, 191, 130, 41, 154, 136, 155, 143, 61, 65, 85, 63, 230, 21, 135, 238, 143, 152, 119, 130, 87, 130, 34, 236, 141, 46, 205, 26, 75, 71, 136, 47, 236, 144, 75, 208, 78, 167, 241, 199, 198, 27, 192, 174, 120, 182, 126, 34, 63, 195, 167, 160, 199, 1, 203, 89, 135, 105, 16, 21, 4, 100, 155, 6, 37, 101, 228, 77, 120, 110, 208, 162, 223, 156, 106, 37, 66, 89, 40, 76, 116, 123, 165, 27, 239, 126, 187, 195, 19, 201, 213, 175, 182, 186, 149, 63, 209, 76, 44, 3, 186, 83, 34, 2, 27, 73, 98, 144, 64, 153, 95, 52, 139, 226, 170, 90, 136, 219, 51, 250, 35, 253, 180, 17, 151, 169, 246, 90, 101, 255, 183, 208, 14, 103, 119, 179, 104, 165, 255, 128, 109, 7, 141, 227, 45, 77, 196, 56, 183, 72, 52, 205, 154, 144, 114, 230, 245, 58, 63, 67, 111, 225, 16, 111, 26, 40, 25, 251, 130, 173, 190, 222, 226, 181, 106, 235, 119, 12, 143, 186, 83, 175, 176, 65, 96, 138, 47, 40, 208, 30, 105, 207, 104, 8, 88, 29, 17, 82, 245, 233, 230, 179, 172, 154, 230, 170, 230, 245, 117, 166, 97, 56, 112, 67, 81, 9, 205, 49, 53, 1, 68, 27, 101, 217, 157, 77, 240, 71, 141, 158, 228, 90, 68, 223, 194, 56, 49, 58, 7, 83, 250, 138, 218, 164, 79, 223, 179, 47, 153, 20, 249, 45, 1, 170, 49, 200, 222, 156, 70, 210, 61, 32, 173, 125, 174, 99, 73, 0, 105, 35, 68, 38, 205, 147, 22, 57, 71, 171, 48, 114, 59, 17, 232, 231, 9, 236, 226, 240, 233, 209, 142, 228, 205, 108, 251, 151, 183, 79, 89, 80, 118, 108, 177, 231, 8, 158, 47, 168, 105, 227, 176, 235, 116, 4, 66, 50, 61, 4, 173, 230, 56, 33, 97, 67, 11, 123, 8, 215, 186, 173, 235, 129, 215, 179, 99, 139, 100, 17, 208, 60, 116, 111, 193, 57, 106, 88, 52, 188, 11, 63, 169, 7, 73, 82, 218, 144, 208, 74, 199, 252, 68, 17, 14, 104, 226, 14, 211, 45, 133, 78, 100, 7, 225, 89, 129, 74, 35, 116, 156, 77, 119, 30, 116, 23, 255, 176, 201, 211, 49, 12, 12, 44, 6, 199, 12, 66, 73, 234, 245, 112, 128, 125, 48, 50, 212, 22, 42, 79, 148, 250, 219, 194, 188, 88, 154, 83, 235, 157, 138, 89, 203, 126, 189, 75, 112, 207, 69, 33, 187, 130, 221, 91, 169, 79, 63, 68, 104, 89, 70, 151, 69, 240, 230, 147, 188, 222, 211, 131, 199, 38, 45, 88, 236, 188, 195, 11, 81, 133, 238, 57, 87, 86, 239, 253, 102, 49, 234, 234, 250, 15, 127, 73, 57, 204, 136, 130, 200, 58, 30, 108, 70, 189, 61, 176, 112, 14, 84, 89, 132, 189, 115, 182, 111, 215, 196, 40, 177, 81, 53, 209, 99, 64, 87, 213, 211, 235, 85, 90, 129, 246, 94, 193, 154, 223, 245, 55, 127, 27, 85, 192, 53, 92, 54, 141, 143, 151, 103, 28, 185, 78, 53, 153, 128, 16, 42, 179, 11, 195, 105, 167, 15, 83, 138, 102, 135, 144, 48, 173, 141, 118, 132, 207, 84, 153, 213, 162, 185, 73, 214, 126, 255, 189, 32, 62, 99, 191, 126, 112, 213, 157, 91, 222, 219, 107, 119, 22, 66, 5, 25, 165, 7, 86, 9, 56, 26, 151, 112, 133, 239, 187, 194, 76, 57, 51, 203, 214, 195, 45, 88, 145, 71, 85, 111, 244, 171, 132, 70, 35, 45, 252, 177, 145, 216, 85, 154, 155, 157, 239, 3, 237, 140, 27, 202, 116, 232, 29, 108, 131, 1, 104, 224, 207, 10, 97, 251, 189, 21, 185, 143, 189, 207, 209, 130, 222, 248, 66, 235, 55, 97, 127, 125, 198, 23, 71, 99, 131, 93, 149, 232, 209, 212, 82, 35, 82, 130, 0, 107, 100, 245, 184, 101, 223, 173, 163, 32, 245, 219, 221, 210, 220, 93, 219, 27, 148, 42, 22, 20, 74, 80, 79, 42, 48, 110, 52, 229, 93, 114, 6, 63, 101, 91, 187, 179, 186, 235, 139, 210, 255, 138, 142, 108, 90, 28, 111, 111, 102, 160, 123, 195, 100, 247, 242, 18, 145, 184, 22, 250, 147, 87, 75, 206, 147, 252, 31, 246, 39, 150, 5, 113, 179, 45, 244, 74, 204, 141, 236, 150, 226, 139, 39, 173, 1, 209, 241, 187, 247, 52, 196, 49, 114, 158, 217, 34, 235, 236, 160, 174, 61, 195, 136, 149, 126, 22, 162, 154, 81, 0, 227, 179, 172, 100, 22, 247, 22, 91, 182, 88, 85, 124, 55, 109, 110, 130, 140, 144, 162, 103, 181, 4, 173, 150, 245, 97, 13, 0, 236, 204, 91, 153, 197, 169, 122, 88, 20, 190, 173, 46, 10, 156, 94, 61, 133, 97, 217, 177, 241, 150, 16, 77, 133, 201, 238, 235, 120, 141, 22, 1, 26, 71, 117, 109, 139, 203, 173, 92, 58, 182, 217, 22, 139, 3, 208, 136, 145, 71, 81, 156, 39, 214, 141, 169, 217, 149, 146, 164, 222, 234, 117, 58, 105, 5, 158, 85, 103, 30, 142, 112, 155, 192, 176, 233, 45, 18, 79, 136, 22, 226, 61, 12, 179, 14, 95, 109, 188, 78, 74, 67, 61, 210, 182, 137, 168, 248, 61, 145, 214, 169, 11, 5, 204, 110, 85, 137, 186, 99, 15, 104, 86, 108, 4, 165, 36, 45, 164, 93, 71, 249, 222, 236, 121, 120, 104, 114, 208, 139, 168, 46, 26, 96, 181, 197, 159, 213, 215, 13, 152, 144, 231, 96, 28, 143, 123, 126, 75, 206, 27, 223, 70, 68, 102, 110, 51, 25, 85, 221, 166, 152, 1, 149, 82, 6, 108, 155, 172, 185, 19, 40, 78, 53, 253, 99, 169, 32, 6, 151, 15, 43, 144, 27, 21, 135, 90, 10, 189, 198, 85, 43, 36, 227, 215, 56, 79, 108, 246, 165, 230, 214, 5, 185, 228, 171, 163, 213, 188, 98, 173, 107, 159, 33, 34, 105, 159, 65, 76, 71, 52, 107, 62, 80, 192, 168, 195, 141, 127, 205, 24, 199, 93, 50, 217, 177, 151, 197, 79, 255, 108, 206, 46, 156, 242, 165, 225, 218, 62, 115, 99, 151, 66, 225, 67, 253, 138, 190, 41, 49, 158, 93, 35, 23, 228, 69, 158, 99, 200, 82, 20, 57, 41, 173, 181, 54, 37, 252, 111, 247, 92, 49, 124, 179, 69, 145, 175, 69, 155, 20, 189, 203, 212, 15, 173, 133, 255, 9, 38, 182, 111, 78, 245, 82, 182, 121, 172, 101, 77, 157, 83, 169, 3, 75, 175, 165, 248, 208, 170, 120, 253, 13, 187, 90, 206, 182, 42, 104, 211, 234, 69, 76, 153, 30, 89, 184, 24, 77, 123, 86, 22, 138, 115, 56, 203, 136, 98, 102, 193, 17, 239, 183, 35, 65, 126, 201, 141, 172, 143, 133, 105, 189, 240, 176, 253, 3, 74, 31, 223, 218, 184, 155, 187, 48, 172, 116, 191, 252, 4, 121, 146, 132, 18, 18, 19, 149, 116, 236, 75, 160, 121, 182, 26, 206, 68, 142, 122, 233, 198, 137, 225, 12, 232, 174, 249, 194, 29, 203, 12, 105, 216, 110, 112, 168, 238, 78, 77, 198, 173, 62, 138, 172, 215, 211, 52, 170, 139, 151, 200, 110, 42, 49, 41, 149, 205, 5, 144, 67, 232, 49, 21, 161, 84, 231, 159, 152, 3, 175, 202, 126, 171, 84, 235, 39, 36, 234, 40, 6, 154, 246, 203, 211, 120, 79, 31, 63, 147, 104, 6, 76, 228, 137, 80, 115, 47, 86, 147, 237, 127, 64, 239, 145, 128, 103, 221, 244, 27, 191, 186, 66, 38, 141, 231, 90, 237, 183, 76, 2, 177, 3, 116, 218, 189, 198, 239, 237, 190, 124, 99, 86, 70, 76, 229, 17, 21, 243, 83, 198, 70, 225, 104, 38, 64, 201, 206, 80, 224, 205, 189, 43, 241, 204, 2, 175, 202, 117, 179, 129, 193, 5, 53, 76, 98, 117, 93, 168, 36, 135, 166, 45, 134, 197, 48, 1, 255, 17, 24, 155, 192, 112, 213, 86, 99, 123, 219, 236, 131, 192, 125, 231, 86, 15, 227, 104, 105, 29, 244, 67, 191, 42, 239, 121, 6, 15, 80, 156, 47, 57, 219, 42, 81, 78, 3, 13, 144, 55, 116, 194, 107, 101, 160, 91, 183, 249, 220, 34, 231, 80, 202, 200, 189, 13, 117, 128, 154, 0, 47, 48, 136, 54, 197, 95, 6, 90, 11, 189, 167, 141, 198, 235, 130, 141, 189, 116, 187, 196, 238, 41, 201, 7, 109, 219, 123, 83, 201, 154, 143, 182, 32, 40, 198, 123, 191, 74, 156, 65, 141, 242, 243, 159, 103, 22, 224, 153, 252, 203, 19, 34, 217, 237, 114, 61, 42, 206, 254, 112, 70, 105, 193, 125, 39, 45, 225, 237, 79, 61, 68, 93, 4, 161, 110, 31, 155, 127, 70, 115, 145, 171, 164, 7, 69, 212, 222, 129, 161, 255, 254, 171, 198, 222, 57], - [241, 143, 164, 12, 92, 132, 203, 146, 197, 147, 112, 134, 26, 56, 103, 167, 159, 34, 104, 165, 122, 157, 6, 140, 222, 181, 8, 191, 142, 54, 106, 178, 88, 121, 12, 112, 34, 103, 194, 75, 90, 0, 179, 9, 105, 249, 31, 35, 34, 84, 13, 247, 235, 24, 176, 53, 115, 27, 89, 102, 37, 172, 145, 137, 89, 158, 111, 179, 38, 253, 218, 69, 158, 61, 92, 79, 33, 112, 121, 27, 176, 184, 33, 223, 197, 252, 34, 239, 160, 154, 30, 90, 135, 104, 104, 125, 101, 131, 126, 186, 56, 161, 19, 36, 149, 162, 87, 138, 113, 192, 202, 194, 140, 212, 241, 199, 196, 94, 21, 236, 133, 199, 150, 216, 173, 232, 17, 192, 154, 55, 35, 48, 179, 172, 162, 17, 97, 5, 95, 206, 121, 215, 202, 211, 190, 196, 173, 9, 112, 193, 217, 6, 186, 169, 127, 129, 208, 42, 220, 35, 189, 229, 105, 244, 172, 18, 22, 200, 76, 18, 100, 123, 12, 28, 72, 70, 35, 206, 173, 139, 155, 60, 120, 242, 2, 111, 239, 125, 166, 39, 255, 189, 152, 74, 168, 122, 52, 57, 100, 224, 154, 7, 194, 253, 51, 56, 184, 137, 232, 246, 41, 189, 176, 240, 36, 224, 49, 49, 94, 224, 110, 179, 60, 134, 129, 210, 247, 239, 78, 248, 123, 130, 61, 137, 234, 100, 60, 42, 47, 35, 187, 66, 18, 172, 165, 94, 243, 157, 238, 197, 247, 180, 48, 173, 98, 7, 85, 12, 28, 198, 93, 187, 161, 49, 246, 201, 138, 9, 60, 136, 13, 45, 44, 57, 95, 135, 253, 41, 89, 244, 186, 91, 226, 102, 23, 95, 154, 8, 13, 40, 113, 22, 244, 125, 231, 74, 173, 114, 233, 63, 218, 207, 103, 39, 60, 89, 74, 143, 241, 98, 238, 148, 145, 131, 126, 213, 9, 69, 247, 35, 104, 65, 53, 96, 254, 44, 225, 95, 43, 35, 122, 223, 201, 237, 24, 113, 140, 72, 76, 38, 46, 36, 31, 175, 115, 58, 145, 16, 103, 197, 205, 13, 186, 146, 118, 100, 142, 42, 252, 23, 181, 244, 113, 24, 120, 124, 76, 89, 113, 187, 251, 160, 204, 148, 241, 221, 245, 119, 204, 67, 147, 38, 237, 140, 161, 202, 90, 198, 32, 142, 201, 6, 51, 231, 162, 87, 175, 14, 159, 32, 192, 91, 149, 76, 137, 140, 246, 187, 64, 79, 247, 215, 175, 85, 52, 154, 247, 38, 120, 119, 141, 190, 198, 159, 86, 74, 156, 168, 244, 11, 143, 13, 65, 22, 182, 111, 77, 123, 68, 5, 61, 69, 59, 134, 55, 229, 6, 107, 56, 54, 85, 182, 127, 103, 214, 56, 30, 12, 9, 103, 234, 246, 217, 209, 48, 64, 236, 77, 210, 12, 188, 39, 64, 173, 19, 127, 31, 78, 60, 150, 126, 221, 30, 157, 138, 102, 238, 38, 32, 163, 50, 74, 145, 203, 9, 142, 53, 251, 115, 113, 158, 72, 165, 123, 63, 169, 219, 158, 62, 174, 97, 33, 140, 241, 106, 17, 128, 60, 28, 87, 83, 192, 241, 67, 177, 44, 169, 147, 107, 51, 99, 152, 98, 97, 1, 192, 118, 137, 49, 249, 246, 48, 54, 24, 239, 212, 85, 112, 138, 55, 253, 213, 199, 229, 16, 237, 72, 194, 10, 249, 76, 134, 134, 188, 224, 129, 153, 196, 237, 222, 164, 73, 126, 120, 16, 128, 136, 99, 134, 158, 69, 66, 243, 117, 191, 7, 142, 3, 113, 188, 191, 235, 186, 213, 134, 143, 238, 77, 237, 206, 45, 158, 222, 113, 223, 77, 2, 14, 0, 46, 178, 138, 154, 130, 255, 243, 250, 196, 96, 34, 141, 104, 207, 124, 88, 213, 96, 133, 208, 188, 172, 110, 11, 195, 149, 134, 168, 55, 241, 154, 246, 234, 230, 45, 223, 224, 27, 242, 82, 48, 42, 195, 51, 162, 120, 27, 217, 239, 24, 137, 188, 225, 223, 182, 42, 122, 37, 196, 119, 12, 5, 68, 125, 169, 131, 156, 31, 103, 255, 68, 166, 249, 92, 51, 71, 100, 24, 53, 106, 118, 116, 68, 40, 252, 91, 57, 36, 69, 101, 24, 60, 253, 234, 167, 14, 81, 27, 82, 3, 169, 174, 243, 13, 174, 229, 145, 147, 121, 70, 125, 70, 218, 255, 22, 227, 215, 69, 105, 97, 200, 13, 0, 142, 142, 30, 89, 146, 102, 74, 9, 181, 74, 178, 178, 27, 217, 191, 229, 9, 129, 69, 154, 189, 123, 75, 210, 137, 153, 244, 50, 171, 167, 79, 31, 121, 190, 25, 195, 183, 8, 130, 6, 54, 91, 97, 213, 93, 162, 132, 172, 98, 176, 124, 65, 174, 200, 1, 166, 17, 189, 11, 195, 249, 150, 101, 221, 250, 83, 210, 153, 250, 17, 123, 119, 161, 152, 253, 61, 101, 86, 80, 48, 157, 106, 232, 134, 85, 239, 43, 143, 100, 35, 89, 46, 99, 107, 200, 47, 216, 185, 83, 242, 166, 140, 77, 233, 203, 142, 51, 46, 117, 230, 90, 123, 165, 24, 52, 133, 31, 239, 37, 159, 116, 196, 3, 133, 58, 180, 249, 238, 225, 238, 57, 127, 81, 199, 133, 179, 201, 204, 35, 125, 174, 3, 148, 186, 39, 187, 0, 154, 74, 105, 56, 87, 20, 57, 145, 29, 113, 138, 65, 24, 252, 33, 172, 250, 191, 201, 251, 118, 51, 255, 148, 193, 7, 168, 183, 155, 214, 29, 169, 170, 192, 255, 47, 229, 197, 54, 144, 193, 100, 131, 22, 34, 43, 50, 42, 188, 250, 110, 228, 135, 159, 106, 226, 34, 193, 228, 58, 202, 10, 42, 59, 51, 222, 44, 130, 144, 238, 4, 215, 184, 238, 213, 154, 202, 243, 6, 103, 78, 182, 1, 159, 77, 251, 192, 20, 118, 176, 38, 184, 68, 53, 220, 159, 65, 156, 200, 56, 63, 98, 86, 215, 255, 154, 35, 8, 107, 52, 187, 250, 80, 72, 19, 108, 234, 167, 211, 250, 28, 236, 115, 186, 126, 175, 184, 158, 40, 238, 129, 181, 209, 89, 94, 61, 59, 61, 148, 229, 219, 94, 195, 9, 95, 105, 165, 111, 187, 49, 222, 33, 171, 100, 80, 161, 86, 181, 206, 200, 86, 86, 46, 153, 64, 34, 11, 170, 71, 204, 180, 205, 222, 185, 13, 95, 208, 13, 175, 124, 115, 230, 189, 95, 91, 31, 52, 141, 122, 151, 35, 165, 137, 242, 223, 119, 223, 23, 218, 184, 197, 169, 213, 88, 86, 116, 18, 88, 178, 240, 187, 64, 212, 237, 162, 232, 159, 58, 62, 106, 80, 71, 3, 231, 125, 114, 57, 19, 32, 232, 232, 105, 86, 198, 93, 248, 51, 235, 59, 123, 158, 140, 176, 198, 110, 179, 107, 159, 19, 79, 193, 185, 167, 242, 204, 185, 193, 195, 220, 156, 162, 182, 218, 42, 206, 176, 140, 235, 162, 86, 235, 24, 114, 174, 159, 131, 193, 146, 221, 49, 182, 189, 240, 121, 188, 187, 42, 204, 164, 207, 51, 156, 201, 80, 154, 170, 102, 132, 225, 66, 252, 37, 39, 153, 68, 208, 155, 240, 251, 11, 89, 113, 211, 55, 229, 208, 106, 250, 116, 215, 53, 22, 233, 104, 172, 130, 134, 138, 107, 62, 0, 126, 205, 199, 155, 7, 26, 43, 128, 19, 160, 108, 220, 183, 128, 179, 16, 162, 34, 2, 228, 158, 89, 72, 116, 71, 146, 186, 180, 105, 111, 82, 110, 190, 229, 251, 159, 108, 181, 100, 137, 164, 63, 35, 105, 160, 75, 23, 117, 118, 142, 38, 83, 27, 116, 208, 240, 62, 125, 211, 130, 8, 220, 242, 201, 248, 120, 13, 3, 149, 227, 85, 142, 228, 86, 29, 24, 13, 253, 185, 233, 2, 107, 166, 42, 201, 27, 80, 25, 97, 189, 90, 248, 197, 38, 93, 76, 96, 93, 206, 156, 186, 146, 206, 110, 34, 150, 212, 39, 22, 220, 227, 3, 39, 113, 216, 254, 132, 235, 25, 118, 183, 90, 39, 199, 188, 100, 133, 47, 129, 160, 112, 1, 174, 71, 38, 224, 110, 101, 92, 146, 93, 103, 163, 163, 37, 147, 134, 239, 203, 79, 248, 124, 214, 97, 215, 8, 148, 131, 171, 52, 43, 86, 190, 133, 103, 71, 154, 236, 176, 222, 66, 105, 45, 180, 73, 109, 16, 144, 161, 104, 143, 63, 1, 48, 58, 211, 23, 122, 170, 46, 14, 237, 209, 19, 218, 142, 39, 214, 133, 235, 54, 113, 120, 90, 216, 48, 73, 75, 163, 70, 117, 8, 222, 244, 249, 255, 201, 58, 10, 197, 36, 187, 163, 224, 184, 157, 57, 4, 248, 192, 148, 225, 102, 142, 58, 7, 4, 56, 165, 105, 188, 37, 1, 177, 211, 204, 251, 200, 31, 242, 95, 195, 77, 12, 54, 220, 161, 37, 13, 152, 104, 54, 78, 198, 124, 50, 202, 242, 131, 120, 153, 164, 103, 71, 27, 63, 134, 69, 138, 234, 160, 92, 210, 102, 104, 193, 125, 217, 158, 20, 85, 170, 196, 245, 101, 58, 218, 153, 19, 1, 126, 56, 1, 128, 21, 92, 69, 150, 154, 249, 215, 245, 240, 62, 22, 73, 190, 160, 13, 215, 58, 86, 37, 82, 154, 95, 128, 144, 213, 34, 230, 30, 90, 89, 219, 24, 246, 210, 79, 149, 170, 26, 212, 0, 149, 148, 155, 184, 64, 99, 18, 95, 251, 48, 9, 164, 99, 6, 190, 230, 227, 123, 210, 205, 172, 193, 91, 189, 195, 89, 164, 11, 74, 78, 223, 7, 210, 26, 38, 192, 196, 117, 177, 81, 51, 18, 139, 212, 68, 35, 84, 241, 181, 111, 174, 116, 169, 31, 137, 185, 116, 112, 117, 131, 105, 56, 225, 51, 147, 224, 87, 125, 115, 129, 121, 11, 249, 138, 166, 198, 71, 247, 207, 182, 222, 172, 206, 94, 218, 58, 87, 56, 66, 224, 58, 218, 17, 158, 235, 203, 247, 207, 129, 18, 219, 179, 60, 105, 46, 3, 211, 49, 70, 181, 116, 131, 205, 145, 200, 40, 161, 117, 201, 117, 69, 68, 65, 154, 56, 132, 183, 119, 205, 233, 191, 112, 3, 7, 29, 212, 228, 103, 165, 212, 40, 58, 12, 235, 233, 98, 35, 254, 75, 110, 214, 42, 233, 89, 237, 45, 172, 248, 92, 51, 215, 242, 151, 128, 66, 195, 238, 30, 169, 187, 139, 161, 228, 226, 64, 123, 154, 224, 55, 53, 224, 240, 240, 72, 15, 2, 57, 78, 245, 174, 188, 50, 103, 36, 95, 167, 139, 3, 55, 246, 193, 41, 137, 20, 63, 134, 136, 160, 67, 253, 203, 129, 157, 182, 91, 70, 198, 243, 67, 76, 109, 16, 117, 40, 169, 232, 221, 12, 77, 241, 202, 22, 239, 50, 234, 220, 219, 160, 19, 23, 72, 103, 84, 178, 120, 73, 218, 127, 25, 62, 234, 133, 30, 58, 64, 204, 70, 57, 109, 6, 18, 10, 56, 107, 75, 189, 36, 249, 231, 159, 89, 77, 23, 94, 244, 117, 139, 220, 197, 106, 196, 174, 244, 79, 21, 26, 166, 176, 126, 15, 175, 48, 64, 11, 33, 102, 187, 83, 255, 241, 29, 86, 75, 209, 198, 217, 58, 234, 224, 137, 79, 163, 115, 240, 111, 93, 52, 56, 46, 173, 41, 149, 81, 221, 158, 185, 75, 29, 216, 11, 170, 148, 69, 29, 152, 151, 160, 228, 124, 69, 41, 174, 200, 178, 238, 14, 117, 109, 94, 0, 226, 135, 174, 0, 44, 79, 109, 77, 194, 17, 240, 224, 158, 75, 75, 162, 179, 206, 90, 125, 76, 86, 104, 169, 248, 124, 216, 173, 48, 9, 216, 47, 134, 81, 138, 0, 86, 140, 32, 218, 213, 251, 107, 86, 113, 88, 177, 224, 138, 207, 76, 146, 239, 156, 126, 3, 65, 215, 92, 226, 70, 132, 176, 135, 177, 139, 159, 56, 43, 217, 228, 156, 191, 105, 104, 15, 132, 126, 113, 67, 94, 26, 4, 28, 56, 98, 161, 118, 255, 243, 214, 58, 238, 244, 12, 24, 123, 44, 200, 70, 219, 185, 69, 120, 216, 3, 25, 116, 165, 182, 25, 30, 97, 143, 220, 100, 225, 91, 140, 240, 118, 151, 163, 89, 153, 185, 88, 5, 34, 14, 201, 225, 243, 34, 216, 18, 178, 47, 99, 30, 147, 226, 220, 188, 180, 207, 29, 24, 34, 109, 102, 29, 13, 77, 167, 243, 189, 145, 20, 203, 62, 127, 158, 241, 242, 235, 21, 175, 238, 167, 210, 236, 34, 210, 226, 71, 192, 104, 207, 86, 150, 252, 166, 16, 64, 225, 177, 28, 103, 51, 223, 248, 20, 158, 146, 161, 148, 37, 116, 89, 38, 230, 142, 184, 255, 75, 99, 135, 19, 124, 107, 79, 142, 167, 43, 234, 38, 77, 187, 95, 33, 215, 219, 251, 27, 226, 59, 199, 230, 83, 98, 219, 108, 56, 152, 194, 7, 133, 197, 100, 88, 17, 248, 141, 8, 181, 7, 17, 243, 254, 161, 210, 242, 34, 191, 191, 209, 247, 223, 217, 183, 249, 207, 40, 26, 233, 27, 148, 59, 28, 210, 171, 73, 59, 38, 251, 131, 104, 219, 228, 215, 61, 92, 94, 80, 67, 24, 138, 164, 26, 129, 173, 186, 125, 40, 165, 214, 19, 223, 238, 123, 237, 245, 56, 111, 190, 76, 0, 247, 208, 154, 106, 9, 196, 76, 111, 99, 96, 18, 238, 207, 42, 207, 159, 182, 72, 225, 68, 21, 200, 100, 39, 233, 182, 191, 241, 87, 69, 108, 143, 123, 130, 16, 53, 186, 123, 147, 60, 148, 145, 26, 189, 34, 239, 130, 134, 102, 154, 60, 215, 90, 90, 69, 189, 206, 152, 18, 95, 200, 122, 62, 105, 8, 153, 241, 63, 16, 238, 38, 165, 165, 41, 107, 125, 138, 164, 245, 88, 245, 231, 90, 210, 199, 20, 95, 212, 156, 162, 195, 125, 244, 97, 88, 125, 68, 111, 16, 155, 181, 85, 95, 150, 96, 176, 100, 171, 126, 68, 193, 200, 190, 55, 192, 173, 172, 146, 181, 10, 226, 88, 112, 7, 81, 219, 111, 197, 84, 57, 247, 89, 85, 143, 123, 179, 57, 46, 91, 42, 142, 251, 120, 78, 113, 150, 209, 247, 5, 126, 247, 133, 254, 146, 114, 23, 168, 158, 90, 82, 12, 114, 159, 27, 241, 214, 247, 245, 101, 73, 207, 90, 69, 12, 227, 185, 68, 103, 48, 145, 28, 24, 8, 206, 66, 189, 149, 55, 23, 220, 207, 181, 25, 22, 122, 152, 57, 189, 221, 25, 246, 193, 114, 209, 245, 134, 128, 206, 19, 191, 224, 124, 99, 66, 22, 219, 63, 96, 204, 56, 208, 151, 154, 22, 129, 66, 239, 74, 16, 83, 55, 10, 252, 88, 44, 14, 119, 13, 45, 137, 6, 59, 217, 172, 76, 252, 118, 53, 127, 140, 148, 81, 153, 108, 116, 95, 98, 226, 219, 114, 228, 199, 163, 1, 160, 70, 230, 152, 110, 96, 119, 229, 131, 230, 44, 175, 89, 124, 147, 100, 132, 168, 32, 30, 243, 64, 243, 9, 130, 148, 190, 104, 83, 14, 57, 5, 158, 210, 237, 183, 169, 159, 180, 60, 27, 44, 188, 87, 147, 206, 155, 85, 32, 70, 127, 220, 192, 240, 254, 110, 200, 170, 92, 253, 141, 165, 110, 28, 23, 63, 8, 4, 50, 243, 199, 239, 126, 205, 190, 20, 95, 101, 205, 162, 26, 157, 16, 45, 248, 202, 200, 78, 5, 155, 0, 1, 35, 34, 202, 88, 189, 143, 176, 13, 162, 197, 235, 94, 173, 190, 196, 214, 104, 209, 138, 42, 112, 125, 109, 181, 209, 27, 130, 59, 229, 181, 184, 109, 26, 211, 37, 252, 90, 250, 103, 11, 143, 92, 21, 178, 7, 230, 175, 56, 59, 71, 234, 124, 80, 123, 69, 51, 56, 158, 171, 86, 56, 214, 180, 150, 31, 31, 193, 213, 47, 53, 220, 151, 206, 61, 143, 196, 115, 209, 120, 52, 136, 93, 17, 102, 219, 138, 70, 36, 200, 14, 118, 50, 103, 255, 81, 72, 72, 199, 158, 146, 2, 126, 60, 94, 185, 7, 156, 129, 255, 116, 24, 97, 143, 23, 3, 129, 58, 53, 50, 25, 77, 202, 55, 204, 26, 149, 215, 152, 117, 127, 238, 64, 253, 148, 51, 81, 219, 103, 31, 101, 61, 145, 132, 170, 28, 105, 19, 97, 21, 126, 119, 248, 155, 135, 185, 229, 226, 43, 178, 8, 29, 19, 241, 203, 17, 64, 12, 198, 55, 34, 221, 141, 198, 7, 208, 37, 153, 32, 196, 189, 59, 19, 152, 217, 110, 180, 3, 62, 177, 134, 223, 133, 83, 161, 190, 15, 16, 84, 195, 236, 149, 131, 37, 194, 157, 121, 21, 38, 235, 43, 81, 81, 158, 230, 244, 136, 67, 187, 77, 66, 198, 242, 95, 171, 18, 164, 226, 206, 232, 146, 239, 0, 233, 200, 161, 147, 172, 255, 126, 218, 84, 134, 159, 254, 178, 94, 106, 186, 141, 99, 111, 128, 1, 87, 7, 117, 252, 2, 158, 196, 36, 101, 149, 177, 177, 4, 105, 230, 204, 226, 249, 104, 118, 23, 117, 94, 29, 129, 64, 200, 200, 149, 232, 162, 205, 61, 126, 251, 221, 200, 199, 3, 111, 73, 23, 10, 209, 177, 60, 135, 239, 180, 247, 121, 112, 28, 219, 97, 37, 249, 250, 53, 43, 0, 246, 94, 104, 139, 79, 151, 29, 226, 206, 216, 218, 177, 65, 54, 13, 98, 172, 97, 217, 207, 8, 171, 185, 151, 73, 5, 148, 75, 138, 225, 58, 220, 0, 155, 241, 122, 130, 34, 40, 43, 153, 0, 254, 136, 9, 163, 170, 91, 227, 126, 123, 125, 90, 84, 96, 171, 45, 230, 152, 96, 217, 146, 59, 227, 17, 233, 96, 41, 135, 22, 246, 55, 24, 146, 203, 152, 13, 100, 229, 14, 201, 141, 120, 250, 176, 242, 164, 130, 52, 74, 205, 92, 212, 215, 4, 107, 79, 25, 250, 243, 163, 10, 248, 222, 97, 84, 163, 52, 142, 174, 105, 145, 161, 149, 91, 169, 183, 119, 99, 226, 22, 10, 213, 191, 165, 220, 76, 104, 34, 33, 74, 17, 71, 95, 194, 33, 187, 117, 235, 200, 84, 103, 125, 234, 150, 106, 23, 136, 169, 195, 18, 197, 70, 105, 178, 145, 186, 7, 172, 52, 217, 39, 180, 6, 105, 247, 158, 222, 196, 215, 77, 245, 253, 211, 104, 79, 46, 135, 40, 217, 158, 203, 107, 183, 46, 185, 49, 58, 53, 211, 136, 192, 226, 239, 2, 74, 219, 48, 136, 188, 249, 15, 74, 136, 224, 43, 9, 89, 215, 75, 30, 61, 185, 59, 237, 6, 139, 140, 27, 84, 246, 42, 149, 30, 160, 81, 111, 109, 61, 211, 219, 157, 175, 224, 32, 159, 66, 247, 120, 66, 24, 129, 138, 91, 248, 16, 247, 161, 158, 201, 113, 129, 28, 64, 51, 42, 19, 6, 127, 223, 1, 250, 109, 223, 79, 199, 230, 14, 125, 190, 33, 9, 23, 102, 40, 117, 125, 229, 22, 51, 248, 254, 52, 144, 186, 13, 17, 117, 240, 237, 144, 227, 252, 45, 179, 58, 69, 119, 20, 103, 84, 203, 3, 87, 15, 88, 117, 114, 148, 81, 162, 67, 30, 112, 0, 95, 35, 92, 35, 221, 122, 142, 105, 97, 195, 229, 7, 100, 108, 175, 168, 78, 232, 4, 209, 225, 14, 173, 156, 6, 103, 84, 77, 17, 82, 214, 16, 80, 52, 72, 193, 114, 230, 130, 65, 122, 59, 230, 15, 24, 101, 214, 104, 117, 99, 245, 251, 21, 121, 2, 121, 199, 240, 198, 123, 30, 66, 219, 98, 27, 61, 125, 239, 139, 174, 191, 245, 71, 40, 16, 228, 8, 9, 0, 234, 81, 189, 177, 81, 225, 244, 214, 155, 102, 180, 217, 226, 105, 119, 204, 72, 158, 24, 148, 65, 109, 153, 12, 154, 38, 233, 126, 47, 231, 13, 41, 118, 63, 224, 217, 95, 236, 47, 167, 100, 171, 111, 182, 26, 100, 252, 235, 131, 175, 50, 188, 26, 114, 154, 163, 248, 249, 0, 36, 47, 59, 129, 201, 164, 243, 51, 13, 95, 230, 253, 162, 128, 155, 101, 42, 166, 45, 121, 241, 9, 18, 32, 115, 94, 41, 8, 233, 198, 33, 70, 206, 237, 28, 92, 248, 84, 241, 26, 218, 62, 184, 90, 158, 102, 0, 80, 86, 240, 173, 194, 218, 211, 177, 241, 131, 166, 130, 5, 247, 241, 139, 246, 169, 104, 211, 87, 226, 176, 23, 28, 95, 137, 82, 39, 239, 173, 169, 233, 226, 57, 54, 194, 118, 134, 159, 61, 140, 162, 68, 96, 104, 99, 182, 24, 81, 123, 174, 126, 252, 220, 144, 152, 195, 1, 105, 195, 150, 97, 40, 51, 249, 84, 217, 134, 193, 197, 179, 54, 18, 202, 184, 207, 141, 251, 46, 56, 239, 175, 85, 231, 168, 118, 230, 5, 70, 224, 56, 187, 112, 142, 110, 141, 26, 158, 27, 23, 35, 237, 231, 184, 158, 151, 122, 128, 117, 204, 157, 113, 139, 93, 83, 99, 107, 173, 123, 186, 18, 61, 64, 189, 2, 116, 156, 94, 57, 138, 161, 216, 205, 184, 214, 254, 42, 145, 175, 137, 2, 35, 16, 96, 1, 12, 112, 53, 155, 159, 65, 22, 193, 250, 189, 12, 201, 255, 110, 7, 24, 32, 85, 191, 99, 50, 35, 240, 152, 59, 133, 249, 128, 215, 130, 172, 22, 226, 175, 48, 253, 67, 146, 55, 216, 50, 159, 255, 91, 230, 106, 49, 238, 96, 69, 184, 105, 245, 15, 27, 176, 42, 62, 80, 17, 67, 0, 72, 160, 186, 95, 96, 159, 163, 96, 9, 134, 1, 56, 216, 54, 33, 221, 208, 167, 246, 0, 202, 255, 7, 221, 240, 16, 171, 131, 136, 87, 106, 51, 179, 233, 229, 99, 102, 200, 109, 111, 93, 28, 248, 79, 61, 136, 202, 201, 236, 77, 101, 45, 206, 16, 173, 99, 34, 205, 254, 1, 232, 75, 50, 122, 163, 132, 137, 217, 230, 6, 121, 89, 92, 41, 142, 198, 215, 61, 48, 232, 128, 197, 174, 184, 63, 62, 24, 128, 18, 172, 247, 80, 127, 26, 107, 215, 44, 71, 103, 247, 8, 75, 164, 217, 36, 196, 89, 128, 156, 199, 153, 171, 19, 181, 64, 97, 17, 10, 96, 241, 107, 113, 3, 39, 97, 33, 42, 8, 76, 24, 173, 5, 226, 141, 14, 224, 110, 180, 8, 104, 247, 16, 82, 168, 185, 145, 65, 243, 47, 30, 170, 118, 98, 98, 13, 73, 228, 24, 169, 71, 216, 95, 113, 29, 114, 206, 125, 43, 182, 244, 190, 246, 36, 33, 53, 222, 61, 159, 56, 202, 72, 156, 195, 82, 149, 231, 116, 188, 188, 129, 179, 111, 162, 8, 123, 149, 247, 101, 37, 93, 211, 69, 79, 162, 196, 188, 132, 1, 231, 184, 215, 94, 247, 220, 171, 121, 154, 22, 191, 18, 175, 188, 56, 120, 152, 2, 209, 87, 86, 12, 134, 192, 247, 252, 245, 130, 207, 222, 139, 210, 84, 60, 52, 146, 197, 99, 221, 177, 248, 87, 6, 115, 148, 206, 194, 213, 172, 109, 130, 29, 122, 168, 206, 8, 19, 243, 191, 9, 188, 108, 66, 234, 245, 63, 3, 242, 189, 68, 160, 232, 101, 236, 241, 41, 142, 29, 102, 76, 120, 3, 127, 179, 111, 246, 136, 125, 33, 52, 228, 236, 231, 130, 120, 137, 87, 72, 212, 253, 183, 101, 141, 226, 166, 200, 36, 160, 243, 79, 51, 40, 27, 140, 157, 87, 117, 74, 186, 181, 82, 77, 126, 31, 127, 253, 179, 154, 2, 155, 170, 109, 75, 181, 223, 229, 2, 229, 121, 229, 60, 235, 84, 167, 171, 84, 179, 12, 248, 174, 33, 231, 166, 129, 121, 227, 174, 80, 147, 122, 139, 139, 56, 142, 223, 102, 96, 109, 75, 186, 223, 149, 122, 17, 12, 14, 2, 46, 107, 233, 248, 171, 54, 90, 94, 57, 25, 143, 221, 85, 21, 99, 230, 230, 71, 46, 119, 203, 226, 90, 38, 154, 130, 81, 84, 37, 113, 75, 6, 211, 181, 125, 96, 130, 106, 170, 238, 121, 104, 112, 218, 104, 152, 140, 148, 193, 89, 181, 213, 8, 218, 204, 146, 119, 81, 230, 176, 27, 2, 11, 18, 8, 229, 93, 146, 201, 225, 168, 106, 163, 211, 199, 93, 89, 164, 65, 214, 83, 224, 119, 109, 6, 53, 3, 118, 39, 215, 68, 48, 233, 253, 6, 130, 186, 189, 221, 32, 36, 9, 135, 91, 159, 65, 225, 90, 98, 225, 133, 22, 185, 244, 28, 215, 173, 57, 63, 24, 33, 175, 10, 84, 177, 92, 118, 231, 151, 38, 173, 78, 7, 75, 18, 156, 84, 203, 8, 217, 51, 85, 244, 255, 41, 254, 6, 116, 92, 243, 78, 122, 85, 198, 158, 25, 217, 103, 100, 64, 134, 55, 216, 9, 188, 91, 87, 9, 223, 105, 199, 210, 57, 85, 108, 129, 12, 43, 181, 97, 98, 122, 90, 39, 83, 179, 41, 21, 216, 134, 61, 112, 4, 15, 134, 82, 54, 90, 119, 246, 235, 25, 16, 161, 120, 190, 82, 6, 220, 12, 246, 235, 74, 101, 41, 35, 234, 210, 170, 148, 203, 177, 208, 243, 110, 45, 117, 61, 234, 69, 82, 44, 230, 134, 204, 108, 110, 124, 88, 241, 237, 113, 226, 148, 167, 0, 153, 80, 52, 251, 202, 57, 129, 199, 59, 32, 26, 162, 159, 217, 193, 20, 97, 155, 180, 69, 74, 148, 53, 101, 224, 225, 149, 74, 147, 121, 147, 230, 231, 24, 73, 107, 151, 155, 50, 207, 32, 93, 131, 135, 77, 88, 54, 99, 13, 205, 250, 68, 103, 16, 9, 149, 42, 224, 42, 4, 226, 121, 65, 224, 109, 182, 74, 113, 131, 98, 203, 14, 31, 235, 119, 32, 176, 60, 117, 18, 253, 99, 105, 145, 69, 168, 139, 241, 2, 158, 120, 60, 214, 179, 233, 208, 232, 168, 181, 116, 55, 71, 46, 214, 179, 2, 13, 246, 105, 174, 181, 47, 127, 52, 125, 72, 200, 194, 128, 110, 47, 16, 252, 188, 91, 170, 116, 178, 228, 252, 166, 139, 83, 29, 72, 251, 13, 149, 231, 184, 8, 128, 89, 240, 12, 124, 67, 239, 140, 246, 30, 251, 130, 1, 139, 47, 173, 250, 70, 216, 158, 208, 135, 133, 55, 9, 159, 114, 224, 159, 19, 115, 67, 136, 99, 32, 169, 170, 81, 138, 194, 62, 42, 97, 79, 221, 34, 240, 159, 118, 113, 124, 75, 22, 237, 210, 235, 69, 178, 5, 163, 4, 177, 252, 124, 193, 250, 182, 111, 216, 24, 63, 97, 89, 33, 112, 165, 10, 144, 227, 23, 156, 30, 252, 73, 181, 128, 24, 106, 65, 170, 67, 185, 157, 63, 41, 183, 42, 213, 59, 253, 159, 86, 128, 13, 121, 241, 78, 74, 192, 173, 38, 238, 55, 148, 73, 132, 242, 137, 202, 97, 23, 116, 228, 125, 82, 35, 32, 249, 171, 31, 188, 40, 14, 8, 214, 234, 113, 90, 81, 70, 188, 236, 44, 147, 44, 33, 17, 228, 208, 51, 209, 202, 147, 193, 247, 200, 200, 120, 211, 67, 32, 232, 231, 29, 185, 202, 183, 74, 3, 232, 253, 155, 166, 3, 30, 11, 130, 227, 216, 137, 73, 124, 17, 38, 231, 74, 221, 220, 215, 94, 187, 53, 148, 2, 205, 2, 190, 204, 193, 136, 70, 169, 227, 215, 188, 185, 38, 36, 30, 237, 62, 111, 37, 45, 146, 15, 194, 171, 41, 46, 182, 189, 164, 80, 84, 131, 206, 213, 33, 94, 246, 215, 190, 51, 108, 15, 143, 65, 219, 140, 141, 181, 55, 56, 148, 170, 112, 156, 8, 208, 104, 250, 210, 132, 118, 161, 90, 217, 80, 53, 84, 215, 5, 202, 89, 136, 69, 44, 95, 161, 203, 48, 3, 145, 29, 15, 219, 71, 186, 215, 197, 126, 29, 103, 243, 156, 242, 179, 26, 243, 187, 177, 154, 151, 158, 70, 250, 222, 183, 184, 41, 143, 30, 251, 59, 161, 127, 193, 251, 223, 121, 83, 198, 214, 38, 141, 141, 120, 80, 111, 142, 221, 167, 111, 90, 47, 6, 16, 192, 93, 160, 127, 128, 184, 199, 234, 28, 71, 120, 219, 137, 35, 113, 73, 89, 230, 16, 61, 5, 26, 227, 234, 144, 172, 183, 14, 52, 55, 136, 105, 150, 96, 129, 182, 199, 208, 153, 176, 7, 196, 104, 188, 43, 165, 23, 139, 175, 242, 210, 182, 109, 121, 117, 55, 209, 226, 242, 121, 139, 23, 20, 33, 121, 198, 237, 65, 175, 239, 31, 152, 13, 145, 40, 176, 10, 147, 70, 170, 191, 184, 47, 55, 201, 241, 75, 96, 120, 199, 179, 14, 46, 86, 90, 192, 41, 252, 83, 80, 223, 144, 177, 47, 175, 173, 220, 250, 94, 173, 171, 189, 50, 31, 232, 203, 125, 21, 248, 29, 120, 12, 91, 75, 202, 205, 33, 216, 107, 67, 46, 187, 88, 19, 178, 74, 176, 59, 21, 254, 255, 181, 54, 142, 79, 68, 142, 154, 92, 223, 100, 14, 251, 34, 233, 76, 214, 137, 217, 252, 230, 216, 148, 215, 68, 246, 181, 7, 58, 35, 220, 40, 167, 96, 10, 244, 136, 40, 169, 158, 241, 167, 187, 17, 35, 102, 9, 83, 49, 234, 105, 40, 174, 214, 46, 15, 79, 254, 144, 99, 123, 172, 165, 63, 94, 139, 158, 138, 187, 141, 254, 84, 100, 8, 145, 203, 62, 146, 101, 51, 23, 248, 122, 97, 154, 20, 95, 22, 73, 129, 137, 89, 38, 192, 145, 208, 3, 174, 74, 169, 17, 155, 65, 130, 65, 10, 243, 166, 193, 211, 200, 60, 128, 31, 126, 238, 129, 74, 5, 91, 71, 252, 236, 170, 234, 44, 250, 9, 88, 189, 248, 205, 130, 195, 160, 38, 105, 57, 12, 38, 37, 184, 30, 21, 90, 13, 158, 89, 52, 202, 86, 252, 211, 146, 28, 121, 9, 216, 183, 130, 140, 28, 170, 222, 196, 134, 12, 219, 88, 138, 140, 109, 210, 131, 222, 61, 99, 97, 76, 194, 137, 153, 192, 176, 196, 50, 97, 51, 238, 58, 7, 251, 54, 155, 106, 80, 57, 137, 133, 82, 146, 223, 144, 83, 92, 156, 222, 211, 13, 217, 29, 115, 243, 123, 41, 168, 193, 142, 11, 58, 57, 254, 199, 73, 178, 53, 71, 211, 248, 90, 16, 122, 128, 64, 12, 182, 184, 227, 195, 108, 77, 241, 98, 76, 183, 170, 192, 247, 101, 107, 41, 213, 27, 150, 143, 164, 8, 104, 127, 234, 115, 54, 80, 20, 45, 155, 87, 40, 100, 104, 183, 52, 65, 229, 211, 157, 25, 189, 243, 29, 139, 115, 25, 52, 136, 7, 8, 210, 87, 197, 67, 77, 36, 88, 190, 249, 183, 36, 16, 28, 217, 160, 216, 231, 178, 251, 125, 58, 134, 108, 77, 188, 23, 157, 151, 25, 44, 73, 173, 207, 80, 161, 227, 81, 94, 164, 30, 138, 165, 154, 168, 209, 7, 225, 122, 151, 162, 44, 133, 48, 189, 22, 147, 11, 233, 179, 100, 58, 237, 125, 219, 96, 60, 218, 238, 117, 77, 107, 54, 252, 191, 226, 95, 254, 173, 4, 239, 109, 255, 246, 141, 33, 202, 10, 107, 62, 218, 88, 85, 211, 29, 206, 59, 100, 187, 202, 79, 153, 183, 102, 225, 43, 131, 175, 18, 122, 143, 75, 190, 120, 170, 97, 82, 97, 228, 147, 141, 176, 139, 49, 140, 82, 188, 234, 201, 44, 165, 215, 175, 133, 255, 28, 173, 216, 58, 72, 137, 129, 191, 188, 237, 101, 11, 150, 8, 57, 144, 128, 231, 98, 128, 143, 129, 19, 189, 214, 231, 93, 187, 181, 165, 199, 123, 155, 55, 29, 132, 113, 13, 153, 224, 59, 151, 75, 235, 234, 90, 45, 198, 148, 176, 109, 77, 176, 10, 73, 81, 221, 33, 179, 226, 209, 10, 159, 226, 230, 210, 240, 181, 74, 18, 192, 118, 104, 129, 163, 154, 38, 102, 25, 69, 43, 253, 91, 218, 38, 19, 56, 224, 221, 40, 154, 213, 34, 195, 42, 252, 8, 38, 30, 85, 46, 213, 253, 133, 157, 107, 144, 222, 238, 194, 34, 73, 226, 54, 17, 166, 215, 185, 109, 195, 208, 56, 163, 120, 98, 38, 110, 203, 142, 10, 5, 141, 97, 114, 165, 145, 40, 168, 252, 21, 50, 208, 13, 42, 101, 79, 248, 119, 232, 212, 9, 195, 171, 160, 220, 68, 96, 54, 62, 98, 170, 76, 243, 158, 240, 245, 173, 50, 243, 3, 60, 51, 16, 151, 124, 252, 203, 249, 132, 9, 64, 250, 186, 62, 55, 173, 63, 233, 44, 102, 227, 161, 155, 161, 249, 99, 223, 210, 250, 81, 207, 77, 35, 72, 88, 119, 52, 21, 16, 154, 57, 226, 160, 208, 27, 182, 36, 112, 239, 92, 75, 36, 113, 115, 160, 149, 11, 191, 34, 117, 176, 251, 34, 106, 8, 171, 247, 194, 231, 139, 46, 238, 11, 101, 251, 105, 124, 24, 10, 213, 23, 218, 192, 64, 25, 24, 71, 252, 40, 155, 27, 55, 10, 103, 177, 9, 204, 89, 148, 176, 69, 86, 13, 48, 230, 148, 101, 144, 28, 55, 20, 88, 85, 48, 51, 211, 203, 24, 59, 133, 183, 152, 193, 5, 238, 214, 230, 97, 167, 205, 100, 153, 6, 177, 127, 51, 116, 110, 72, 85, 181, 45, 87, 212, 172, 193, 131, 224, 72, 241, 29, 234, 90, 237, 110, 70, 181, 37, 101, 68, 191, 142, 253, 82, 59, 219, 71, 139, 73, 158, 127, 105, 12, 52, 255, 189, 153, 157, 18, 149, 162, 101, 137, 119, 153, 168, 248, 195, 191, 170, 233, 229, 44, 96, 251, 175, 164, 164, 218, 119, 232, 107, 141, 150, 211, 99, 9, 39, 214, 226, 51, 15, 197, 219, 105, 40, 3, 112, 64, 228, 71, 46, 54, 148, 63, 144, 75, 156, 11, 238, 1, 82, 196, 149, 221, 179, 120, 112, 74, 123, 158, 128, 71, 147, 46, 52, 161, 190, 123, 210, 145, 233, 110, 172, 43, 75, 73, 31, 186, 55, 194, 152, 0, 160, 118, 247, 129, 66, 209, 127, 196, 167, 14, 141, 160, 81, 242, 133, 91, 133, 95, 125, 249, 154, 128, 241, 143, 54, 173, 77, 116, 63, 92, 29, 119, 127, 236, 145, 110, 47, 106, 124, 111, 78, 211, 188, 145, 109, 153, 65, 216, 199, 233, 108, 111, 22, 23, 138, 217, 186, 246, 162, 72, 9, 54, 23, 15, 167, 7, 232, 65, 233, 7, 72, 181, 54, 172, 220, 243, 22, 174, 100, 127, 210, 159, 6, 158, 162, 22, 162, 216, 126, 24, 184, 94, 148, 84, 126, 156, 59, 234, 93, 109, 123, 71, 137, 27, 199, 203, 224, 73, 148, 225, 165, 112, 39, 32, 188, 53, 198, 88, 183, 65, 218, 0, 204, 182, 157, 81, 41, 107, 85, 16, 45, 215, 154, 203, 169, 149, 247, 255, 154, 123, 58, 190, 94, 98, 106, 120, 192, 37, 62, 155, 6, 201, 12, 105, 150, 81, 158, 198, 130, 17, 224, 200, 186, 30, 197, 146, 38, 86, 15, 21, 214, 173, 206, 166, 129, 149, 180, 152, 76, 221, 235, 71, 8, 203, 215, 64, 91, 105, 109, 15, 76, 23, 13, 165, 12, 24, 83, 121, 93, 127, 225, 106, 99, 218, 35, 98, 81, 36, 199, 94, 186, 8, 246, 234, 203, 157, 106, 179, 6, 67, 206, 228, 137, 187, 178, 127, 235, 227, 201, 185, 106, 25, 141, 0, 83, 193, 173, 205, 91, 42, 42, 204, 43, 156, 221, 86, 165, 187, 219, 57, 116, 162, 161, 177, 126, 199, 228, 8, 79, 45, 20, 244, 75, 218, 221, 190, 25, 191, 42, 173, 34, 97, 212, 254, 120, 254, 97, 254, 64, 104, 33, 110, 223, 87, 134, 95, 93, 145, 215, 199, 188, 102, 234, 149, 170, 116, 177, 250, 147, 219, 59, 234, 62, 111, 118, 216, 183, 137, 49, 95, 176, 141, 44, 185, 173, 80, 35, 71, 60, 135, 124, 128, 217, 74, 96, 116, 193, 254, 242, 88, 223, 115, 162, 94, 180, 23, 79, 249, 116, 249, 181, 165, 209, 123, 27, 54, 233, 61, 58, 142, 6, 0, 146, 201, 4, 182, 192, 76, 122, 248, 184, 199, 95, 14, 31, 253, 20, 8, 8, 152, 94, 237, 126, 238, 218, 60, 65, 135, 132, 252, 24, 8, 160, 79, 229, 81, 222, 113, 25, 62, 70, 241, 209, 147, 189, 165, 189, 237, 143, 210, 131, 13, 11, 189, 48, 125, 147, 47, 131, 175, 30, 203, 137, 129, 105, 76, 77, 235, 171, 67, 157, 82, 120, 157, 113, 68, 185, 57, 211, 59, 15, 86, 212, 62, 159, 182, 178, 102, 30, 18, 183, 215, 180, 227, 202, 165, 116, 155, 161, 58, 176, 216, 221, 220, 227, 130, 198, 98, 129, 214, 249, 221, 74, 123, 126, 224, 79, 222, 234, 190, 38, 2, 152, 253, 149, 113, 217, 24, 191, 167, 66, 49, 248, 232, 106, 101, 21, 113, 6, 31, 235, 50, 215, 117, 156, 254, 137, 76, 100, 191, 76, 10, 31, 53, 240, 175, 41, 122, 36, 49, 130, 205, 80, 5, 149, 46, 39, 185, 54, 138, 167, 240, 200, 31, 79, 197, 202, 174, 4, 104, 25, 10, 193, 129, 100, 142, 201, 158, 160, 73, 157, 2, 92, 22, 241, 70, 162, 159, 186, 95, 43, 198, 204, 202, 74, 70, 74, 111, 68, 212, 150, 19, 113, 255, 203, 209, 185, 64, 192, 80, 80, 136, 22, 161, 175, 10, 35, 55, 246, 162, 186, 23, 204, 154, 150, 245, 51, 40, 70, 166, 245, 186, 147, 218, 189, 179, 9, 204, 222, 122, 251, 134, 43, 111, 149, 242, 19, 185, 129, 49, 205, 137, 53, 181, 48, 146, 44, 70, 57, 106, 20, 170, 215, 56, 69, 41, 151, 146, 103, 136, 25, 248, 126, 242, 222, 208, 77, 40, 132, 19, 117, 64, 171, 213, 43, 123, 255, 3, 169, 56, 176, 146, 52, 57, 156, 85, 255, 152, 208, 188, 54, 55, 120, 190, 78, 140, 74, 201, 118, 193, 253, 118, 1, 220, 60, 0, 103, 159, 163, 96, 121, 189, 158, 253, 55, 154, 238, 52, 113, 83, 179, 82, 14, 115, 6, 195, 141, 105, 247, 87, 25, 183, 114, 193, 29, 49, 16, 197, 35, 29, 230, 101, 160, 160, 138, 86, 185, 38, 148, 150, 141, 151, 167, 160, 228, 34, 181, 55, 69, 123, 138, 48, 19, 98, 187, 237, 12, 198, 85, 20, 187, 14, 24, 69, 107, 189, 37, 127, 112, 27, 176, 175, 117, 205, 182, 204, 110, 57, 63, 198, 208, 239, 119, 2, 151, 137, 166, 202, 248, 212, 182, 24, 135, 146, 116, 238, 110, 184, 236, 79, 224, 251, 211, 48, 98, 193, 205, 46, 80, 75, 137, 207, 234, 196, 94, 65, 162, 70, 110, 128, 13, 104, 45, 142, 130, 108, 75, 145, 211, 56, 210, 189, 236, 234, 225, 33, 53, 179, 166, 106, 4, 213, 101, 168, 7, 235, 90, 151, 44, 175, 241, 50, 198, 195, 83, 49, 42, 186, 161, 204, 34, 192, 23, 240, 90, 246, 159, 217, 147, 120, 160, 135, 48, 114, 167, 218, 56, 79, 157, 4, 218, 210, 118, 56, 252, 59, 129, 46, 109, 177, 52, 100, 148, 231, 158, 245, 28, 239, 16, 234, 15, 40, 172, 7, 207, 193, 22, 124, 160, 180, 69, 232, 208, 71, 32, 195, 130, 52, 248, 98, 153, 115, 150, 151, 123, 217, 41, 245, 75, 229, 141, 244, 221, 190, 50, 99, 42, 243, 118, 127, 118, 167, 168, 27, 255, 136, 24, 181, 92, 163, 41, 180, 37, 166, 212, 3, 152, 85, 178, 123, 127, 190, 165, 41, 93, 81, 44, 12, 27, 29, 44, 147, 127, 195, 178, 142, 219, 154, 203, 249, 242, 19, 219, 215, 203, 105, 95, 221, 191, 211, 189, 25, 203, 101, 237, 79, 105, 12, 211, 197, 8, 95, 250, 243, 178, 240, 178, 168, 36, 55, 10, 143, 204, 0, 230, 169, 240, 199, 194, 71, 99, 70, 125, 222, 179, 179, 68, 86, 53, 155, 124, 86, 77, 45, 51, 111, 3, 221, 19, 105, 76, 80, 207, 145, 53, 56, 246, 186, 120, 186, 61, 99, 232, 118, 211, 75, 117, 27, 250, 135, 248, 164, 169, 208, 16, 76, 223, 105, 63, 106, 30, 84, 23, 203, 168, 103, 91, 169, 83, 191, 178, 242, 55, 16, 93, 147, 130, 217, 108, 13, 107, 236, 56, 125, 44, 30, 202, 196, 20, 177, 54, 102, 120, 44, 11, 61, 176, 170, 76, 185, 221, 201, 136, 72, 93, 75, 242, 173, 137, 70, 26, 107, 241, 236, 135, 76, 242, 48, 154, 203, 84, 245, 55, 192, 63, 33, 5, 217, 215, 107, 46, 97, 243, 201, 29, 53, 56, 43, 22, 144, 105, 16, 191, 230, 126, 133, 82, 203, 80, 63, 185, 197, 233, 2, 160, 99, 33, 198, 153, 35, 186, 51, 223, 92, 51, 195, 212, 104, 79, 193, 29, 152, 184, 110, 100, 135, 28, 34, 37, 169, 128, 209, 38, 214, 178, 184, 39, 51, 16, 133, 192, 183, 169, 86, 115, 174, 117, 101, 154, 70, 229, 113, 96, 102, 128, 68, 237, 249, 132, 95, 153, 27, 198, 27, 124, 183, 206, 30, 77, 106, 73, 80, 138, 1, 42, 42, 164, 135, 20, 127, 28, 178, 127, 220, 192, 108, 83, 242, 196, 128, 217, 45, 41, 75, 97, 236, 245, 115, 27, 186, 142, 115, 127, 174, 128, 26, 60, 189, 64, 215, 42, 212, 87, 4, 41, 205, 31, 158, 164, 127, 180, 248, 165, 62, 133, 150, 135, 173, 228, 57, 157, 98, 222, 76, 5, 29, 129, 213, 74, 126, 181, 56, 172, 170, 44, 160, 43, 142, 83, 158, 255, 115, 140, 178, 215, 17, 157, 64, 189, 19, 128, 122, 181, 242, 101, 223, 15, 134, 23, 186, 42, 200, 28, 159, 59, 75, 113, 8, 159, 110, 107, 216, 152, 221, 82, 31, 237, 139, 220, 1, 178, 234, 106, 21, 40, 125, 118, 197, 224, 137, 30, 84, 188, 20, 144, 148, 239, 2, 84, 32, 95, 42, 110, 169, 238, 193, 36, 87, 191, 187, 72, 121, 81, 248, 36, 249, 45, 166, 153, 26, 69, 121, 202, 3, 178, 217, 110, 8, 216, 225, 90, 43, 130, 21, 159, 219, 209, 206, 162, 33, 73, 157, 51, 91, 229, 191, 65, 154, 61, 153, 3, 64, 233, 19, 148, 116, 43, 130, 30, 252, 228, 68, 181, 147, 244, 97, 113, 22, 73, 208, 128, 199, 194, 28, 187, 86, 237, 193, 201, 193, 137, 4, 239, 225, 95, 196, 43, 225, 83, 221, 205, 190, 40, 103, 220, 184, 47, 140, 192, 130, 1, 46, 16, 137, 133, 159, 155, 82, 38, 33, 26, 22, 67, 196, 184, 73, 87, 219, 132, 119, 180, 149, 144, 122, 27, 114, 97, 145, 216, 89, 154, 34, 214, 133, 8, 238, 100, 130, 228, 173, 55, 154, 76, 241, 132, 99, 23, 65, 150, 211, 16, 56, 158, 50, 125, 93, 3, 215, 71, 13, 50, 172, 29, 155, 136, 215, 126, 210, 24, 201, 209, 49, 157, 83, 248, 124, 146, 145, 143, 39, 145, 48, 232, 45, 64, 126, 163, 70, 234, 224, 206, 79, 232, 154, 166, 129, 182, 199, 20, 125, 215, 198, 66, 103, 97, 36, 166, 163, 201, 97, 97, 218, 230, 137, 28, 220, 236, 30, 173, 201, 168, 157, 3, 79, 15, 122, 96, 119, 176, 189, 210, 243, 185, 1, 130, 228, 167, 22, 136, 191, 170, 215, 161, 30, 157, 99, 106, 129, 194, 30, 46, 191, 99, 231, 139, 114, 164, 22, 116, 230, 42, 34, 52, 119, 93, 213, 183, 142, 169, 91, 186, 114, 95, 198, 84, 194, 77, 139, 11, 28, 27, 253, 182, 169, 134, 38, 69, 80, 195, 91, 221, 53, 107, 241, 66, 98, 160, 114, 253, 219, 232, 233, 58, 134, 12, 28, 67, 170, 247, 16, 197, 139, 248, 37, 83, 242, 91, 1, 79, 248, 112, 195, 77, 36, 204, 125, 230, 92, 23, 200, 68, 241, 111, 43, 89, 192, 211, 131, 223, 37, 73, 22, 54, 74, 6, 107, 86, 106, 144, 27, 91, 64, 58, 10, 16, 106, 251, 143, 214, 35, 44, 206, 88, 50, 44, 26, 190, 16, 16, 245, 186, 96, 181, 30, 105, 133, 41, 55, 111, 95, 188, 73, 238, 6, 163, 82, 25, 149, 89, 68, 157, 185, 136, 147, 125, 42, 145, 172, 183, 197, 46, 109, 124, 155, 189, 221, 4, 231, 244, 205, 89, 162, 230, 151, 102, 59, 64, 218, 72, 95, 139, 173, 2, 146, 220, 190, 39, 241, 209, 129, 59, 171, 190, 43, 194, 98, 196, 217, 92, 211, 49, 238, 140, 67, 228, 83, 83, 113, 60, 50, 159, 138, 15, 18, 215, 53, 229, 138, 166, 193, 134, 65, 127, 19, 10, 235, 82, 145, 219, 24, 24, 68, 249, 7, 183, 74, 217, 212, 103, 67, 8, 212, 179, 134, 252, 140, 172, 49, 186, 199, 203, 93, 89, 160, 112, 195, 53, 28, 26, 78, 153, 93, 55, 172, 88, 84, 190, 64, 169, 201, 178, 166, 187, 234, 58, 248, 252, 251, 64, 251, 23, 60, 10, 133, 25, 225, 177, 230, 137, 127, 31, 168, 7, 66, 229, 178, 130, 107, 39, 109, 106, 222, 236, 192, 107, 155, 45, 109, 87, 44, 104, 59, 99, 112, 96, 236, 96, 68, 233, 191, 153, 218, 238, 93, 108, 74, 16, 71, 172, 71, 204, 7, 170, 63, 221, 99, 166, 193, 79, 230, 109, 102, 249, 47, 139, 247, 148, 149, 139, 20, 82, 23, 164, 145, 213, 30, 242, 194, 182, 145, 82, 8, 79, 155, 191, 84, 18, 218, 193, 119, 138, 227, 224, 222, 118, 247, 67, 123, 62, 209, 248, 195, 210, 214, 217, 208, 72, 189, 6, 135, 152, 65, 176, 99, 36, 94, 206, 213, 152, 234, 153, 122, 68, 93, 119, 112, 7, 161, 73, 48, 180, 134, 183, 175, 64, 106, 2, 45, 245, 41, 8, 66, 220, 27, 252, 101, 72, 250, 95, 173, 35, 228, 234, 117, 9, 214, 10, 149, 244, 241, 231, 15, 109, 199, 253, 198, 238, 14, 9, 194, 144, 44, 98, 76, 56, 108, 253, 79, 152, 112, 78, 100, 246, 229, 130, 182, 253, 74, 161, 20, 8, 217, 79, 16, 98, 57, 209, 185, 92, 60, 247, 1, 245, 110, 81, 3, 106, 235, 85, 133, 154, 181, 89, 3, 214, 34, 190, 235, 5, 129, 246, 111, 185, 107, 96, 90, 16, 202, 37, 27, 144, 9, 87, 234, 139, 30, 225, 135, 171, 123, 221, 250, 40, 10, 93, 244, 158, 130, 160, 196, 98, 54, 128, 224, 54, 234, 79, 121, 117, 21, 63, 111, 222, 78, 52, 180, 19, 82, 114, 87, 157, 98, 254, 73, 130, 190, 87, 133, 56, 147, 56, 245, 46, 149, 202, 17, 117, 94, 180, 186, 34, 8, 125, 146, 37, 246, 200, 86, 49, 32, 232, 138, 224, 148, 227, 213, 35, 144, 50, 211, 37, 62, 1, 121, 169, 218, 20, 5, 173, 217, 243, 228, 181, 123, 173, 123, 252, 101, 178, 73, 223, 136, 28, 7, 70, 174, 57, 80, 53, 130, 254, 101, 145, 154, 78, 63, 31, 129, 166, 201, 143, 140, 188, 236, 210, 150, 98, 110, 139, 203, 219, 151, 225, 35, 212, 93, 169, 65, 186, 112, 90, 192, 244, 255, 122, 171, 252, 70, 253, 230, 198, 139, 98, 129, 102, 245, 168, 7, 222, 83, 49, 57, 104, 20, 187, 92, 33, 131, 201, 222, 34, 107, 144, 184, 62, 205, 154, 198, 103, 181, 196, 50, 237, 72, 134, 116, 169, 247, 104, 33, 188, 91, 220, 155, 212, 207, 85, 52, 57, 13, 225, 65, 178, 3, 128, 235, 162, 29, 125, 254, 214, 155, 4, 69, 49, 182, 68, 142, 33, 245, 6, 242, 63, 188, 205, 169, 106, 200, 216, 135, 243, 0, 34, 33, 253, 91, 13, 23, 123, 227, 231, 122, 249, 205, 137, 188, 53, 64, 35, 46, 201, 130, 107, 199, 30, 22, 54, 73, 163, 46, 40, 71, 1, 167, 140, 18, 175, 63, 176, 232, 219, 53, 156, 50, 27, 28, 63, 16, 48, 104, 179, 249, 148, 244, 24, 55, 46, 253, 127, 6, 88, 41, 241, 30, 202, 245, 85, 10, 100, 18, 174, 96, 136, 28, 69, 55, 227, 14, 185, 182, 51, 165, 10, 132, 36, 140, 254, 206, 108, 165, 37, 170, 133, 185, 112, 103, 157, 21, 168, 208, 236, 152, 218, 108, 254, 239, 175, 154, 58, 203, 243, 153, 142, 79, 147, 57, 203, 212, 226, 57, 83, 86, 25, 48, 219, 218, 7, 84, 110, 2, 133, 135, 230, 201, 59, 184, 165, 203, 20, 45, 225, 229, 55, 33, 23, 6, 90, 3, 43, 211, 43, 130, 251, 159, 62, 130, 212, 249, 255, 37, 51, 16, 174, 81, 20, 237, 224, 204, 112, 32, 121, 32, 122, 205, 235, 185, 173, 95, 54, 75, 224, 38, 235, 10, 70, 224, 135, 150, 255, 62, 181, 51, 157, 230, 140, 133, 28, 77, 233, 64, 17, 228, 143, 0, 202, 182, 167, 28, 8, 56, 131, 63, 95, 228, 109, 140, 216, 247, 140, 14, 214, 10, 200, 82, 99, 214, 122, 227, 97, 252, 220, 248, 132, 70, 220, 246, 71, 151, 194, 160, 102, 118, 188, 153, 154, 90, 239, 36, 178, 239, 54, 185, 217, 224, 91, 141, 35, 175, 157, 225, 133, 178, 136, 253, 93, 154, 203, 23, 39, 105, 108, 164, 146, 5, 116, 248, 196, 28, 96, 253, 127, 187, 53, 60, 245, 145, 89, 86, 73, 91, 1, 74, 122, 81, 116, 219, 46, 86, 6, 106, 132, 233, 21, 238, 15, 250, 111, 19, 232, 88, 244, 167, 16, 68, 39, 170, 239, 59, 241, 59, 108, 63, 71, 68, 97, 22, 83, 39, 116, 68, 165, 16, 252, 40, 129, 22, 176, 162, 171, 168, 224, 125, 46, 229, 83, 198, 216, 222, 247, 45, 185, 141, 49, 239, 201, 45, 175, 30, 114, 53, 203, 134, 235, 64, 237, 190, 255, 168, 126, 137, 210, 167, 13, 157, 119, 147, 72, 187, 144, 121, 58, 122, 0, 51, 101, 26, 32, 228, 81, 27, 71, 122, 199, 12, 60, 78, 62, 122, 92, 142, 199, 35, 97, 115, 67, 13, 160, 66, 157, 168, 48, 106, 65, 247, 27, 187, 173, 42, 8, 209, 66, 217, 150, 239, 211, 179, 240, 190, 195, 32, 243, 160, 177, 137, 194, 249, 219, 81, 103, 214, 43, 24, 136, 20, 211, 213, 211, 77, 141, 105, 218, 22, 77, 113, 212, 239, 218, 58, 51, 131, 213, 178, 138, 199, 229, 120, 106, 157, 237, 8, 45, 11, 241, 186, 170, 106, 60, 81, 221, 22, 43, 230, 24, 166, 9, 251, 49, 44, 213, 249, 212, 168, 189, 197, 58, 95, 82, 92, 170, 206, 189, 121, 1, 160, 66, 88, 221, 32, 129, 88, 226, 209, 243, 61, 142, 238, 100, 21, 207, 207, 105, 71, 71, 12, 118, 197, 246, 8, 97, 3, 106, 240, 212, 148, 247, 30, 192, 24, 228, 90, 45, 186, 220, 0, 201, 68, 7, 103, 122, 62, 145, 26, 49, 115, 38, 145, 214, 246, 209, 251, 219, 163, 15, 108, 146, 191, 182, 201, 105, 191, 249, 55, 51, 87, 69, 204, 52, 130, 109, 27, 21, 254, 97, 68, 158, 204, 117, 238, 120, 38, 52, 94, 149, 234, 102, 136, 195, 34, 17, 136, 252, 138, 58, 95, 205, 182, 231, 226, 33, 189, 114, 75, 206, 28, 182, 45, 81, 56, 58, 83, 68, 153, 180, 59, 115, 135, 154, 71, 250, 245, 248, 59, 221, 114, 6, 54, 41, 207, 237, 172, 20, 149, 156, 155, 72, 61, 236, 253, 220, 97, 132, 157, 77, 88, 182, 181, 219, 58, 82, 40, 7, 65, 182, 253, 7, 208, 55, 247, 103, 185, 167, 46, 159, 137, 226, 156, 107, 212, 20, 73, 149, 179, 149, 50, 148, 123, 90, 255, 194, 19, 252, 134, 104, 163, 175, 187, 34, 170, 46, 222, 15, 215, 166, 106, 3, 29, 51, 114, 232, 249, 104, 172, 4, 234, 178, 41, 82, 201, 211, 96, 235, 73, 4, 169, 130, 148, 16, 222, 104, 191, 135, 110, 129, 189, 99, 166, 176, 102, 127, 213, 62, 45, 21, 116, 254, 232, 205, 224, 8, 128, 44, 237, 62, 79, 111, 85, 191, 252, 147, 21, 64, 242, 66, 224, 20, 8, 204, 52, 104, 187, 107, 219, 123, 70, 153, 14, 214, 167, 134, 185, 133, 4, 237, 7, 162, 10, 255, 222, 95, 109, 47, 24, 220, 237, 65, 3, 90, 162, 79, 3, 197, 68, 254, 195, 43, 234, 192, 26, 163, 234, 150, 192, 115, 49, 37, 106, 8, 71, 89, 245, 213, 33, 190, 38, 131, 144, 86, 217, 181, 32, 162, 192, 165, 204, 209, 225, 203, 138, 20, 246, 143, 19, 81, 170, 238, 63, 93, 206, 77, 37, 193, 61, 98, 29, 114, 48, 173, 110, 67, 218, 64, 81, 241, 60, 96, 121, 112, 146, 21, 69, 223, 173, 185, 54, 208, 204, 212, 130, 196, 135, 118, 206, 209, 64, 84, 249, 20, 238, 28, 209, 247, 30, 218, 123, 53, 1, 47, 103, 108, 160, 39, 48, 182, 182, 248, 97, 233, 118, 200, 228, 12, 205, 47, 123, 93, 69, 134, 175, 150, 78, 153, 111, 104, 168, 23, 109, 77, 165, 144, 33, 108, 142, 76, 113, 166, 3, 221, 108, 228, 108, 152, 51, 209, 190, 217, 117, 23, 15, 231, 189, 87, 159, 52, 189, 163, 214, 190, 96, 91, 248, 252, 238, 38, 224, 46, 219, 135, 198, 35, 92, 40, 232, 244, 179, 250, 203, 60, 134, 190, 123, 221, 92, 223, 29, 86, 6, 155, 254, 201, 160, 228, 71, 53, 114, 17, 125, 31, 13, 61, 108, 139, 237, 2, 227, 232, 20, 123, 118, 71, 192, 245, 60, 95, 249, 1, 90, 59, 66, 80, 49, 244, 232, 190, 3, 91, 130, 237, 15, 206, 191, 108, 234, 85, 113, 28, 218, 218, 245, 149, 187, 245, 189, 201, 69, 27, 14, 221, 60, 127, 123, 27, 11, 72, 198, 23, 208, 123, 32, 125, 13, 236, 174, 157, 140, 71, 220, 35, 39, 238, 128, 138, 51, 224, 52, 117, 71, 178, 61, 184, 133, 42, 69, 73, 200, 99, 145, 198, 128, 79, 0, 47, 139, 214, 104, 38, 250, 71, 175, 15, 243, 214, 12, 248, 171, 195, 180, 56, 69, 156, 86, 72, 144, 34, 15, 157, 188, 235, 70, 118, 250, 192, 100, 201, 108, 112, 93, 8, 221, 106, 90, 125, 42, 252, 17, 206, 45, 166, 143, 50, 206, 183, 77, 39, 181, 211, 142, 185, 221, 24, 159, 208, 195, 119, 240, 80, 124, 248, 164, 89, 11, 123, 180, 185, 23, 176, 9, 129, 203, 228, 155, 9, 25, 43, 147, 61, 2, 155, 101, 156, 231, 244, 97, 1, 214, 41, 150, 143, 172, 122, 228, 9, 208, 63, 85, 113, 232, 51, 28, 126, 110, 95, 244, 43, 132, 23, 70, 44, 173, 158, 47, 93, 191, 205, 139, 78, 34, 237, 201, 127, 64, 54, 195, 103, 74, 199, 171, 126, 62, 211, 116, 160, 161, 250, 62, 56, 76, 161, 93, 250, 200, 75, 121, 98, 3, 142, 188, 252, 223, 14, 124, 175, 146, 192, 205, 160, 215, 208, 149, 134, 174, 146, 10, 172, 175, 158, 41, 160, 227, 97, 253, 93, 224, 245, 24, 47, 36, 155, 52, 78, 77, 42, 195, 33, 201, 2, 219, 159, 204, 161, 106, 134, 7, 106, 185, 245, 246, 90, 77, 86, 153, 83, 234, 105, 162, 104, 184, 228, 192, 217, 160, 153, 47, 220, 107, 168, 43, 226, 101, 228, 55, 146, 16, 234, 134, 138, 45, 230, 63, 92, 208, 94, 199, 29, 241, 31, 50, 233, 225, 64, 254, 242, 210, 39, 116, 213, 104, 184, 21, 222, 71, 27, 244, 22, 204, 30, 170, 162, 175, 79, 70, 244, 251, 126, 99, 209, 133, 10, 251, 182, 120, 170, 120, 14, 215, 169, 245, 79, 170, 81, 32, 125, 224, 84, 26, 41, 235, 127, 102, 14, 84, 109, 215, 0, 183, 60, 220, 45, 102, 234, 200, 125, 45, 224, 229, 147, 128, 34, 46, 218, 101, 18, 45, 4, 208, 83, 228, 7, 185, 240, 58, 255, 34, 69, 230, 73, 43, 94, 124, 140, 201, 131, 228, 221, 244, 119, 198, 57, 94, 127, 139, 143, 47, 5, 225, 30, 230, 194, 74, 197, 245, 185, 194, 125, 128, 104, 167, 150, 31, 182, 133, 134, 192, 169, 88, 224, 33, 42, 236, 86, 81, 244, 247, 168, 202, 126, 87, 208, 164, 44, 73, 44, 163, 223, 118, 60, 70, 243, 100, 42, 167, 22, 194, 40, 70, 38, 74, 199, 249, 220, 8, 205, 125, 142, 85, 178, 31, 188, 24, 219, 46, 22, 225, 251, 82, 58, 113, 49, 104, 162, 21, 59, 217, 151, 153, 84, 151, 107, 152, 214, 48, 193, 135, 18, 45, 32, 132, 93, 254, 236, 252, 33, 185, 38, 77, 191, 122, 120, 174, 82, 45, 237, 114, 234, 181, 28, 86, 130, 105, 21, 192, 141, 254, 228, 64, 96, 59, 169, 158, 230, 48, 25, 18, 158, 178, 174, 121, 129, 80, 90, 7, 207, 53, 221, 220, 243, 182, 230, 139, 165, 110, 50, 161, 156, 92, 2, 247, 178, 50, 120, 90, 89, 248, 2, 35, 193, 23, 118, 8, 103, 104, 230, 69, 57, 88, 197, 216, 170, 165, 10, 235, 25, 118, 250, 246, 218, 38, 128, 44, 54, 164, 255, 238, 24, 242, 25, 172, 157, 152, 130, 231, 85, 207, 16, 82, 7, 140, 104, 2, 114, 4, 89, 26, 41, 117, 142, 80, 186, 101, 207, 5, 189, 60, 75, 118, 220, 181, 218, 236, 211, 30, 10, 33, 100, 125, 92, 222, 230, 57, 49, 57, 14, 123, 118, 145, 197, 52, 169, 53, 148, 35, 29, 167, 202, 87, 47, 191, 158, 38, 77, 193, 213, 243, 126, 39, 240, 166, 160, 68, 109, 89, 113, 228, 102, 23, 10, 94, 69, 78, 121, 138, 58, 213, 46, 143, 145, 248, 198, 147, 254, 38, 23, 191, 53, 252, 150, 77, 113, 195, 212, 189, 49, 246, 126, 157, 159, 64, 114, 202, 80, 134, 53, 87, 13, 163, 62, 232, 4, 51, 108, 138, 72, 131, 192, 148, 13, 186, 0, 222, 174, 88, 93, 162, 156, 122, 86, 139, 57, 206, 215, 46, 167, 121, 98, 122, 245, 156, 153, 107, 40, 237, 144, 210, 172, 69, 245, 38, 227, 132, 119, 27, 5, 141, 22, 2, 126, 66, 148, 2, 218, 228, 10, 48, 163, 8, 253, 112, 185, 70, 132, 139, 154, 207, 49, 217, 153, 68, 18, 97, 3, 25, 247, 192, 9, 78, 213, 48, 184, 154, 71, 45, 124, 23, 173, 154, 135, 54, 173, 127, 92, 29, 211, 242, 246, 5, 26, 252, 35, 0, 232, 23, 60, 145, 136, 66, 12, 181, 88, 96, 166, 37, 46, 202, 93, 22, 217, 235, 10, 121, 7, 141, 65, 66, 224, 133, 7, 107, 221, 101, 180, 244, 136, 91, 150, 56, 114, 66, 77, 113, 143, 21, 159, 254, 118, 70, 31, 220, 121, 114, 66, 134, 8, 133, 26, 20, 29, 169, 165, 146, 254, 175, 198, 228, 112, 78, 179, 77, 232, 161, 184, 140, 41, 228, 203, 37, 80, 0, 196, 110, 152, 185, 151, 173, 76, 13, 143, 182, 111, 129, 6, 134, 80, 231, 255, 45, 234, 96, 155, 238, 87, 95, 113, 251, 179, 95, 192, 189, 148, 231, 126, 93, 7, 161, 185, 112, 96, 58, 115, 161, 233, 15, 219, 183, 162, 77, 54, 188], - [18, 82, 145, 19, 18, 249, 220, 192, 101, 203, 9, 168, 69, 167, 223, 90, 64, 109, 28, 31, 13, 117, 94, 47, 192, 11, 255, 38, 38, 193, 211, 218, 231, 207, 139, 46, 34, 231, 75, 144, 197, 230, 3, 245, 40, 105, 150, 64, 184, 97, 91, 99, 66, 175, 64, 65, 232, 130, 115, 61, 196, 71, 161, 208, 156, 53, 227, 34, 75, 94, 245, 122, 189, 148, 126, 0, 19, 22, 193, 204, 48, 20, 42, 82, 33, 22, 9, 193, 16, 200, 119, 196, 162, 181, 19, 214, 198, 106, 164, 140, 38, 168, 149, 117, 50, 164, 87, 155, 26, 213, 197, 72, 246, 217, 105, 11, 255, 9, 13, 144, 242, 30, 250, 168, 69, 101, 199, 167, 184, 137, 160, 33, 93, 137, 51, 13, 215, 131, 87, 223, 60, 20, 2, 214, 2, 123, 111, 199, 101, 105, 90, 66, 206, 68, 187, 86, 115, 11, 183, 124, 5, 73, 122, 130, 120, 43, 87, 39, 196, 143, 226, 37, 139, 89, 126, 146, 175, 67, 172, 54, 123, 6, 64, 198, 195, 71, 116, 181, 111, 54, 127, 215, 65, 24, 112, 85, 129, 144, 100, 83, 135, 140, 206, 8, 219, 52, 155, 219, 56, 29, 154, 233, 59, 209, 80, 109, 117, 79, 138, 71, 49, 227, 88, 65, 177, 54, 237, 53, 50, 74, 54, 9, 13, 20, 128, 80, 66, 95, 232, 3, 100, 21, 133, 42, 212, 79, 237, 171, 90, 126, 163, 5, 46, 79, 209, 181, 181, 46, 69, 83, 221, 206, 68, 84, 0, 18, 160, 150, 23, 173, 67, 168, 98, 52, 111, 112, 236, 192, 29, 225, 159, 168, 44, 78, 19, 10, 91, 248, 180, 63, 32, 50, 225, 51, 172, 174, 101, 211, 227, 183, 96, 220, 184, 171, 62, 164, 232, 255, 104, 173, 181, 105, 253, 252, 48, 170, 46, 240, 103, 20, 171, 93, 9, 249, 129, 80, 50, 170, 12, 42, 5, 57, 84, 106, 238, 88, 113, 204, 200, 22, 178, 100, 105, 188, 184, 185, 192, 230, 241, 46, 207, 253, 60, 19, 12, 149, 109, 74, 143, 56, 250, 86, 91, 80, 210, 173, 62, 44, 42, 187, 44, 181, 70, 101, 100, 241, 1, 19, 102, 249, 109, 115, 133, 19, 164, 136, 214, 243, 58, 236, 181, 45, 189, 71, 194, 76, 104, 133, 183, 95, 192, 88, 125, 38, 231, 44, 33, 146, 67, 125, 135, 143, 199, 98, 250, 112, 84, 55, 86, 28, 200, 82, 200, 20, 232, 138, 33, 236, 134, 149, 87, 32, 85, 155, 143, 62, 215, 244, 91, 133, 43, 90, 38, 89, 227, 171, 20, 68, 6, 244, 92, 79, 192, 55, 174, 155, 226, 66, 229, 116, 61, 85, 136, 230, 201, 217, 168, 240, 170, 202, 72, 155, 165, 199, 118, 86, 175, 28, 183, 225, 209, 128, 145, 236, 112, 9, 57, 84, 188, 169, 18, 123, 227, 132, 214, 162, 2, 191, 102, 38, 197, 107, 68, 182, 213, 53, 101, 157, 93, 226, 205, 211, 113, 124, 172, 17, 35, 124, 156, 110, 200, 196, 242, 158, 64, 158, 167, 171, 72, 191, 133, 133, 122, 16, 174, 123, 183, 115, 123, 228, 63, 134, 189, 211, 108, 233, 239, 11, 120, 64, 236, 208, 14, 255, 55, 180, 163, 247, 55, 84, 212, 114, 63, 106, 159, 122, 45, 156, 98, 120, 78, 180, 31, 236, 36, 24, 25, 139, 176, 1, 79, 40, 16, 73, 31, 31, 158, 79, 87, 12, 246, 246, 81, 51, 127, 25, 104, 125, 152, 132, 198, 89, 142, 233, 18, 92, 181, 128, 11, 173, 143, 51, 32, 147, 126, 202, 201, 132, 73, 245, 9, 134, 250, 25, 219, 24, 18, 212, 25, 204, 111, 133, 102, 36, 129, 249, 138, 244, 172, 9, 211, 165, 179, 5, 221, 72, 73, 255, 202, 19, 71, 85, 75, 177, 78, 17, 51, 36, 12, 218, 216, 145, 50, 3, 140, 91, 4, 19, 192, 17, 227, 19, 158, 14, 9, 225, 148, 45, 155, 151, 102, 175, 109, 82, 27, 163, 56, 220, 212, 65, 46, 32, 28, 198, 195, 136, 181, 166, 12, 111, 9, 42, 24, 72, 98, 131, 45, 227, 81, 139, 220, 184, 227, 53, 202, 107, 117, 200, 189, 188, 95, 175, 228, 45, 102, 28, 113, 178, 229, 182, 87, 46, 50, 58, 15, 153, 177, 254, 166, 53, 107, 207, 168, 253, 180, 251, 157, 183, 13, 149, 67, 152, 128, 13, 84, 91, 117, 182, 53, 147, 65, 246, 157, 228, 151, 120, 103, 207, 12, 155, 5, 146, 156, 108, 165, 132, 196, 23, 45, 149, 149, 12, 164, 231, 51, 78, 43, 253, 23, 137, 192, 169, 35, 169, 202, 187, 236, 23, 166, 198, 46, 25, 234, 190, 152, 253, 44, 27, 58, 190, 139, 119, 189, 219, 137, 18, 193, 163, 247, 80, 42, 141, 13, 42, 91, 144, 184, 182, 7, 118, 247, 77, 186, 44, 44, 65, 114, 212, 19, 46, 142, 46, 210, 41, 146, 194, 227, 48, 177, 205, 76, 120, 36, 48, 83, 118, 16, 19, 206, 118, 252, 43, 185, 170, 113, 172, 46, 60, 227, 133, 149, 19, 42, 68, 116, 179, 135, 86, 19, 44, 171, 238, 18, 12, 80, 212, 241, 221, 61, 28, 54, 188, 134, 115, 249, 215, 138, 34, 231, 201, 199, 37, 141, 3, 212, 210, 64, 225, 104, 60, 149, 62, 115, 40, 212, 237, 111, 17, 204, 5, 10, 153, 30, 123, 208, 166, 59, 158, 137, 254, 12, 160, 6, 16, 190, 110, 58, 49, 77, 57, 207, 183, 116, 220, 223, 149, 186, 78, 124, 29, 167, 155, 207, 13, 68, 146, 188, 151, 74, 210, 213, 184, 27, 114, 29, 210, 187, 38, 161, 30, 140, 102, 83, 229, 108, 32, 100, 90, 137, 119, 142, 230, 32, 125, 11, 102, 137, 101, 222, 153, 81, 137, 181, 120, 6, 52, 125, 155, 123, 145, 197, 60, 214, 65, 157, 215, 15, 8, 118, 72, 109, 203, 122, 23, 184, 253, 140, 184, 61, 164, 231, 42, 132, 137, 248, 26, 17, 93, 208, 67, 209, 123, 229, 115, 219, 230, 188, 36, 232, 128, 208, 146, 229, 55, 140, 189, 218, 70, 42, 80, 114, 208, 119, 48, 204, 35, 91, 94, 28, 133, 225, 30, 115, 94, 161, 29, 3, 142, 96, 23, 23, 44, 45, 18, 88, 86, 9, 108, 245, 253, 88, 35, 226, 68, 164, 59, 43, 4, 1, 75, 61, 225, 21, 123, 240, 18, 176, 76, 82, 174, 1, 9, 153, 51, 166, 140, 184, 63, 164, 110, 17, 196, 69, 98, 136, 76, 44, 225, 27, 33, 250, 172, 239, 72, 124, 87, 116, 133, 195, 173, 187, 247, 140, 217, 204, 1, 34, 25, 116, 246, 20, 68, 208, 87, 213, 175, 176, 101, 72, 147, 253, 167, 120, 33, 245, 222, 233, 227, 75, 141, 175, 249, 80, 232, 225, 4, 247, 28, 209, 116, 179, 235, 187, 103, 127, 109, 176, 117, 250, 94, 96, 184, 52, 120, 209, 142, 29, 219, 7, 157, 156, 242, 85, 99, 188, 116, 242, 21, 32, 227, 170, 197, 136, 129, 119, 4, 130, 111, 119, 182, 25, 217, 230, 101, 48, 2, 87, 5, 246, 142, 192, 250, 81, 20, 233, 84, 29, 11, 93, 17, 139, 74, 78, 160, 32, 17, 224, 250, 129, 100, 221, 80, 178, 228, 218, 134, 91, 143, 194, 141, 97, 14, 57, 246, 33, 16, 251, 10, 147, 87, 41, 137, 165, 238, 184, 92, 165, 213, 95, 111, 227, 18, 109, 108, 1, 67, 185, 117, 161, 93, 183, 8, 235, 70, 182, 215, 93, 13, 116, 197, 97, 219, 94, 14, 160, 81, 194, 201, 100, 134, 202, 254, 44, 109, 109, 7, 123, 248, 6, 132, 127, 179, 201, 50, 196, 6, 234, 45, 241, 183, 144, 166, 3, 242, 31, 2, 61, 93, 72, 52, 179, 186, 226, 33, 219, 31, 109, 27, 124, 144, 181, 56, 157, 23, 210, 144, 120, 90, 52, 231, 243, 195, 254, 58, 223, 76, 195, 122, 228, 69, 137, 118, 131, 147, 112, 251, 180, 198, 143, 54, 192, 203, 208, 50, 196, 61, 121, 227, 233, 191, 142, 90, 144, 126, 224, 150, 82, 231, 217, 37, 200, 8, 99, 74, 164, 200, 136, 186, 22, 35, 227, 91, 137, 87, 211, 153, 232, 251, 216, 51, 14, 228, 102, 183, 221, 219, 167, 33, 200, 230, 172, 69, 21, 132, 130, 144, 209, 202, 183, 223, 86, 69, 127, 162, 220, 41, 109, 184, 185, 253, 143, 140, 151, 173, 121, 148, 12, 68, 60, 53, 216, 87, 201, 188, 34, 102, 120, 63, 3, 68, 219, 126, 197, 108, 157, 223, 64, 203, 145, 215, 113, 253, 8, 175, 24, 58, 209, 71, 0, 226, 30, 191, 71, 200, 59, 42, 131, 158, 5, 204, 172, 196, 151, 35, 249, 13, 192, 72, 127, 199, 151, 116, 169, 235, 14, 99, 205, 2, 227, 139, 51, 177, 249, 53, 15, 210, 39, 233, 207, 39, 194, 181, 231, 245, 136, 152, 114, 207, 49, 4, 209, 102, 8, 54, 94, 72, 238, 174, 44, 51, 244, 192, 14, 31, 102, 100, 105, 90, 251, 7, 17, 19, 109, 161, 8, 242, 23, 46, 193, 149, 3, 206, 105, 167, 152, 234, 58, 206, 204, 199, 39, 245, 73, 194, 78, 76, 32, 3, 62, 122, 214, 235, 1, 128, 246, 61, 116, 79, 6, 73, 181, 19, 10, 253, 4, 68, 19, 81, 32, 84, 36, 204, 239, 162, 84, 225, 185, 6, 179, 128, 241, 56, 49, 77, 151, 96, 188, 25, 92, 72, 83, 193, 248, 149, 128, 72, 209, 212, 171, 133, 238, 168, 20, 190, 57, 93, 239, 158, 128, 40, 145, 0, 230, 36, 151, 139, 19, 247, 121, 51, 62, 181, 147, 118, 174, 214, 22, 115, 60, 190, 155, 200, 67, 75, 145, 110, 60, 186, 91, 175, 85, 4, 43, 230, 79, 156, 134, 210, 187, 64, 62, 152, 49, 31, 114, 143, 147, 63, 163, 182, 38, 109, 188, 209, 68, 158, 107, 225, 58, 64, 99, 253, 150, 25, 18, 95, 163, 241, 128, 8, 238, 6, 119, 19, 56, 150, 143, 36, 7, 207, 151, 102, 42, 107, 84, 33, 8, 44, 101, 226, 170, 188, 243, 152, 63, 58, 175, 252, 68, 86, 100, 17, 25, 136, 189, 220, 105, 96, 92, 195, 55, 115, 25, 34, 182, 90, 29, 194, 136, 75, 17, 202, 10, 218, 204, 242, 158, 217, 174, 207, 36, 216, 170, 5, 68, 97, 60, 85, 70, 52, 227, 147, 144, 4, 181, 54, 206, 230, 32, 121, 128, 236, 63, 16, 2, 122, 13, 5, 241, 176, 194, 10, 227, 99, 119, 147, 77, 244, 45, 52, 139, 38, 83, 182, 128, 68, 238, 31, 148, 119, 87, 114, 244, 21, 53, 129, 27, 246, 181, 203, 194, 175, 155, 24, 32, 221, 8, 29, 60, 163, 28, 141, 192, 29, 197, 30, 197, 38, 71, 177, 224, 162, 9, 32, 111, 226, 233, 82, 166, 153, 153, 135, 145, 85, 141, 9, 235, 215, 227, 46, 212, 242, 71, 201, 175, 149, 88, 44, 165, 137, 125, 242, 33, 30, 27, 147, 219, 131, 56, 129, 251, 29, 66, 252, 54, 87, 4, 17, 103, 108, 18, 125, 208, 235, 56, 18, 8, 119, 37, 142, 250, 163, 7, 20, 90, 197, 224, 65, 144, 14, 37, 95, 22, 91, 43, 212, 144, 110, 67, 58, 173, 121, 11, 204, 46, 178, 152, 226, 163, 226, 60, 81, 135, 166, 134, 182, 237, 34, 0, 23, 22, 206, 242, 210, 209, 251, 207, 13, 100, 119, 233, 105, 214, 148, 104, 133, 38, 176, 204, 50, 9, 80, 223, 122, 113, 90, 169, 170, 209, 36, 86, 217, 5, 140, 186, 45, 105, 167, 140, 79, 13, 142, 77, 112, 188, 130, 83, 147, 240, 125, 183, 134, 144, 179, 165, 104, 156, 90, 199, 25, 57, 181, 193, 56, 2, 231, 183, 242, 120, 42, 222, 136, 58, 86, 16, 210, 122, 114, 20, 209, 149, 178, 127, 144, 106, 23, 200, 95, 178, 209, 234, 210, 77, 25, 169, 220, 49, 42, 54, 33, 30, 83, 157, 255, 246, 56, 90, 26, 37, 102, 170, 200, 234, 199, 181, 94, 32, 43, 96, 96, 153, 126, 137, 183, 148, 26, 227, 194, 48, 192, 199, 8, 165, 201, 166, 220, 57, 214, 124, 128, 171, 13, 187, 63, 47, 202, 72, 252, 2, 191, 228, 42, 152, 71, 23, 113, 169, 27, 174, 214, 244, 61, 68, 170, 40, 199, 202, 253, 247, 103, 51, 208, 87, 82, 105, 105, 144, 207, 112, 208, 167, 129, 56, 143, 56, 253, 73, 207, 229, 223, 67, 226, 94, 51, 69, 28, 104, 35, 70, 247, 94, 216, 130, 164, 154, 175, 139, 105, 213, 180, 84, 7, 225, 167, 200, 209, 250, 195, 86, 61, 129, 233, 192, 32, 88, 168, 234, 139, 140, 16, 107, 153, 141, 57, 181, 67, 144, 86, 244, 213, 153, 185, 71, 53, 205, 55, 22, 207, 151, 52, 161, 67, 157, 188, 6, 33, 232, 200, 66, 226, 73, 12, 88, 92, 196, 106, 63, 21, 75, 40, 57, 55, 250, 46, 54, 113, 142, 54, 90, 34, 56, 72, 30, 253, 234, 146, 103, 45, 139, 48, 71, 225, 26, 88, 226, 14, 227, 229, 13, 81, 82, 58, 206, 134, 254, 23, 76, 152, 5, 192, 206, 168, 191, 162, 215, 158, 178, 202, 95, 96, 196, 75, 112, 247, 164, 70, 62, 197, 181, 65, 112, 100, 31, 241, 63, 199, 142, 138, 6, 200, 159, 217, 251, 120, 255, 234, 145, 235, 52, 183, 13, 236, 90, 56, 238, 66, 222, 201, 129, 135, 189, 150, 10, 117, 74, 112, 230, 1, 164, 19, 14, 227, 193, 187, 208, 217, 78, 123, 51, 161, 106, 17, 110, 247, 131, 209, 248, 221, 140, 217, 91, 123, 195, 225, 109, 116, 252, 229, 174, 139, 214, 208, 185, 84, 199, 243, 230, 143, 254, 234, 118, 59, 112, 237, 109, 186, 108, 31, 122, 187, 169, 187, 225, 52, 16, 251, 228, 177, 191, 187, 113, 0, 208, 91, 179, 214, 139, 81, 20, 28, 201, 103, 197, 208, 66, 64, 3, 176, 191, 126, 128, 123, 10, 233, 187, 214, 19, 140, 23, 138, 178, 16, 197, 154, 79, 111, 222, 130, 35, 183, 3, 70, 163, 201, 225, 189, 228, 73, 96, 5, 70, 103, 185, 241, 227, 5, 178, 195, 241, 199, 23, 63, 105, 103, 254, 205, 42, 149, 2, 95, 152, 123, 174, 172, 243, 155, 19, 243, 33, 28, 44, 180, 20, 154, 173, 163, 29, 191, 3, 161, 3, 227, 51, 30, 134, 190, 184, 21, 4, 78, 158, 185, 182, 168, 130, 142, 15, 148, 146, 181, 248, 84, 247, 151, 59, 206, 171, 203, 162, 144, 74, 85, 99, 17, 241, 175, 179, 213, 53, 136, 191, 63, 79, 14, 192, 6, 66, 199, 167, 81, 113, 107, 85, 15, 179, 103, 30, 129, 78, 165, 213, 103, 133, 161, 122, 68, 100, 15, 36, 243, 73, 195, 153, 17, 111, 146, 103, 200, 162, 104, 100, 47, 8, 121, 235, 131, 143, 93, 86, 175, 6, 2, 68, 2, 133, 82, 45, 135, 23, 71, 23, 23, 161, 2, 218, 104, 30, 65, 188, 69, 217, 62, 90, 40, 42, 24, 125, 236, 148, 125, 124, 114, 235, 41, 108, 20, 47, 213, 161, 92, 240, 53, 229, 81, 198, 83, 241, 178, 191, 193, 100, 41, 71, 229, 200, 181, 149, 171, 98, 77, 81, 123, 30, 116, 108, 50, 159, 80, 173, 244, 106, 93, 37, 35, 4, 167, 55, 228, 64, 2, 171, 213, 167, 188, 25, 1, 18, 144, 15, 72, 2, 33, 20, 131, 86, 91, 49, 94, 216, 178, 30, 153, 32, 164, 47, 62, 126, 31, 107, 255, 86, 135, 172, 78, 81, 73, 43, 86, 242, 135, 38, 22, 230, 209, 146, 223, 208, 162, 37, 53, 60, 4, 109, 205, 92, 197, 195, 19, 59, 14, 55, 147, 97, 93, 122, 135, 190, 233, 255, 22, 55, 88, 247, 119, 227, 165, 151, 225, 172, 237, 108, 227, 100, 16, 89, 101, 148, 220, 11, 90, 230, 67, 170, 170, 73, 119, 54, 194, 97, 55, 203, 5, 51, 27, 66, 87, 47, 89, 54, 148, 68, 219, 169, 32, 100, 145, 23, 82, 84, 163, 173, 194, 32, 90, 251, 70, 37, 57, 77, 146, 61, 193, 17, 206, 238, 57, 198, 29, 205, 167, 240, 191, 254, 90, 61, 70, 76, 135, 70, 45, 160, 52, 203, 10, 82, 125, 172, 168, 250, 58, 125, 244, 22, 112, 198, 108, 126, 204, 99, 95, 51, 201, 176, 129, 22, 251, 214, 192, 87, 255, 98, 12, 229, 136, 35, 127, 205, 153, 95, 167, 36, 9, 23, 233, 100, 4, 37, 92, 70, 29, 224, 250, 10, 193, 131, 86, 228, 28, 14, 248, 141, 8, 102, 252, 77, 113, 32, 146, 95, 158, 25, 101, 130, 52, 79, 104, 39, 240, 234, 59, 76, 137, 98, 2, 153, 144, 114, 4, 95, 24, 221, 252, 37, 77, 226, 127, 12, 1, 206, 49, 231, 29, 213, 205, 157, 166, 202, 158, 16, 51, 107, 127, 118, 223, 103, 194, 29, 202, 44, 223, 72, 64, 235, 49, 66, 14, 121, 190, 51, 88, 29, 181, 117, 124, 254, 66, 77, 66, 125, 164, 254, 215, 61, 3, 67, 30, 73, 88, 84, 241, 150, 60, 236, 78, 240, 125, 150, 197, 62, 229, 42, 104, 190, 46, 106, 171, 206, 140, 37, 63, 70, 255, 165, 108, 121, 82, 168, 64, 244, 233, 211, 154, 143, 55, 154, 81, 190, 206, 56, 40, 86, 90, 255, 75, 84, 112, 222, 236, 244, 225, 25, 165, 52, 249, 63, 188, 89, 41, 96, 8, 191, 73, 17, 53, 255, 212, 69, 35, 202, 70, 129, 163, 42, 214, 52, 85, 201, 21, 176, 168, 213, 88, 161, 161, 182, 251, 182, 194, 57, 177, 119, 209, 144, 162, 204, 211, 221, 173, 16, 121, 147, 226, 214, 27, 242, 57, 150, 138, 216, 62, 66, 68, 241, 141, 250, 136, 207, 201, 119, 177, 75, 195, 213, 154, 73, 57, 79, 162, 178, 63, 1, 163, 188, 126, 16, 27, 218, 79, 184, 58, 201, 225, 235, 102, 131, 212, 57, 19, 237, 93, 125, 130, 206, 34, 102, 185, 63, 95, 117, 127, 4, 223, 38, 192, 114, 183, 155, 27, 171, 254, 96, 127, 76, 214, 30, 84, 36, 231, 27, 193, 120, 200, 80, 2, 226, 15, 63, 168, 161, 158, 78, 179, 222, 92, 198, 172, 96, 193, 101, 194, 87, 213, 121, 157, 119, 19, 174, 112, 207, 209, 106, 81, 121, 121, 13, 115, 80, 209, 174, 54, 97, 88, 132, 109, 56, 17, 143, 175, 128, 106, 52, 75, 97, 75, 131, 123, 68, 89, 45, 149, 176, 218, 151, 231, 237, 36, 251, 197, 168, 156, 132, 195, 90, 132, 22, 135, 13, 242, 189, 255, 208, 249, 61, 38, 211, 155, 154, 103, 159, 106, 40, 196, 129, 9, 57, 87, 11, 14, 152, 57, 162, 83, 144, 189, 166, 189, 133, 65, 43, 2, 124, 219, 158, 220, 206, 75, 133, 81, 50, 203, 190, 23, 237, 24, 72, 22, 254, 127, 77, 90, 159, 120, 104, 220, 80, 72, 47, 180, 103, 162, 24, 4, 179, 30, 5, 11, 57, 134, 39, 223, 65, 97, 127, 160, 98, 20, 244, 39, 11, 51, 91, 164, 96, 244, 244, 66, 103, 23, 201, 157, 209, 249, 150, 93, 159, 211, 225, 254, 18, 172, 42, 202, 139, 21, 17, 154, 158, 95, 250, 148, 154, 57, 100, 92, 58, 183, 202, 229, 116, 46, 219, 149, 6, 13, 104, 43, 209, 155, 145, 171, 217, 124, 192, 102, 156, 131, 110, 143, 64, 21, 109, 47, 82, 222, 253, 228, 175, 250, 6, 187, 211, 92, 149, 183, 111, 249, 245, 192, 166, 227, 232, 142, 173, 67, 140, 198, 24, 14, 37, 237, 221, 121, 153, 39, 228, 208, 250, 78, 7, 209, 230, 33, 45, 166, 114, 24, 129, 242, 21, 120, 151, 120, 205, 45, 39, 77, 134, 89, 111, 155, 11, 43, 251, 16, 222, 175, 201, 211, 159, 73, 230, 71, 17, 48, 132, 75, 163, 179, 191, 101, 191, 72, 218, 44, 0, 6, 183, 112, 233, 61, 160, 178, 160, 220, 89, 146, 198, 40, 195, 74, 234, 216, 104, 82, 135, 39, 35, 90, 63, 170, 164, 176, 250, 121, 39, 76, 205, 144, 39, 71, 110, 124, 47, 182, 171, 238, 45, 251, 174, 91, 223, 160, 241, 91, 4, 140, 193, 156, 221, 182, 72, 134, 200, 112, 29, 115, 236, 13, 229, 0, 64, 163, 103, 100, 13, 109, 35, 27, 2, 195, 86, 66, 214, 135, 156, 160, 22, 138, 229, 172, 103, 251, 213, 234, 209, 114, 163, 208, 146, 59, 82, 222, 118, 87, 109, 128, 52, 127, 144, 232, 232, 22, 126, 93, 119, 107, 162, 245, 139, 250, 206, 64, 88, 110, 85, 12, 5, 124, 101, 132, 61, 184, 153, 5, 161, 124, 70, 72, 180, 251, 8, 179, 242, 38, 84, 71, 43, 6, 149, 101, 196, 78, 120, 245, 238, 10, 99, 64, 19, 164, 127, 140, 255, 18, 13, 55, 67, 221, 106, 196, 21, 224, 75, 24, 16, 108, 183, 51, 251, 18, 248, 91, 81, 170, 39, 75, 26, 244, 135, 88, 29, 211, 242, 150, 232, 152, 79, 223, 32, 57, 130, 143, 27, 238, 93, 184, 25, 97, 171, 182, 151, 45, 151, 121, 255, 26, 184, 131, 175, 198, 188, 87, 220, 224, 138, 47, 160, 31, 36, 78, 55, 141, 189, 3, 230, 141, 36, 128, 227, 124, 152, 244, 240, 58, 6, 197, 160, 103, 57, 76, 236, 251, 64, 57, 119, 57, 197, 220, 99, 106, 36, 152, 84, 151, 110, 186, 64, 188, 204, 116, 214, 110, 150, 170, 243, 193, 7, 252, 12, 124, 227, 255, 1, 65, 17, 66, 237, 153, 232, 183, 59, 142, 180, 251, 158, 92, 65, 212, 35, 153, 252, 151, 116, 188, 34, 81, 34, 254, 106, 38, 65, 170, 41, 38, 206, 43, 104, 134, 0, 151, 187, 31, 243, 150, 1, 79, 143, 163, 121, 175, 69, 50, 223, 31, 198, 117, 252, 130, 103, 37, 154, 33, 194, 24, 236, 47, 91, 167, 91, 36, 205, 156, 237, 206, 154, 180, 141, 8, 162, 142, 51, 141, 189, 15, 12, 106, 76, 113, 159, 63, 1, 95, 216, 216, 91, 242, 241, 48, 148, 217, 198, 200, 7, 62, 60, 227, 239, 8, 143, 98, 29, 76, 134, 73, 235, 163, 115, 65, 0, 183, 41, 100, 228, 251, 195, 84, 161, 29, 181, 21, 0, 145, 221, 167, 96, 19, 156, 171, 175, 66, 135, 217, 59, 190, 210, 180, 98, 252, 126, 84, 66, 218, 56, 62, 136, 18, 204, 104, 86, 240, 54, 154, 253, 41, 72, 198, 249, 196, 151, 55, 40, 184, 42, 173, 179, 184, 115, 145, 188, 35, 148, 189, 243, 133, 186, 72, 10, 187, 10, 244, 252, 30, 64, 218, 28, 92, 241, 73, 136, 186, 137, 228, 251, 253, 172, 143, 130, 219, 130, 238, 27, 11, 39, 158, 252, 45, 172, 126, 95, 107, 230, 162, 118, 108, 65, 138, 73, 8, 181, 167, 40, 153, 113, 24, 3, 130, 231, 102, 67, 111, 5, 157, 133, 6, 195, 211, 121, 199, 40, 195, 61, 230, 106, 93, 105, 34, 58, 233, 16, 37, 149, 12, 91, 12, 22, 46, 176, 137, 66, 100, 19, 122, 0, 54, 230, 21, 204, 116, 233, 20, 164, 94, 183, 236, 192, 253, 198, 3, 22, 47, 33, 36, 251, 239, 166, 126, 60, 234, 21, 172, 25, 227, 98, 89, 12, 196, 219, 192, 109, 32, 98, 31, 237, 117, 151, 112, 125, 6, 125, 93, 197, 85, 67, 221, 204, 126, 22, 89, 236, 23, 29, 126, 187, 111, 211, 112, 207, 156, 172, 142, 43, 157, 66, 158, 232, 24, 96, 191, 161, 35, 138, 180, 136, 145, 239, 184, 66, 134, 221, 97, 198, 193, 3, 12, 163, 189, 173, 127, 175, 152, 149, 215, 195, 102, 145, 161, 115, 245, 77, 48, 28, 17, 90, 180, 120, 52, 120, 136, 244, 195, 222, 163, 70, 235, 43, 166, 127, 103, 202, 14, 242, 160, 178, 192, 52, 131, 9, 236, 214, 53, 235, 238, 162, 128, 101, 234, 180, 70, 197, 67, 18, 94, 210, 122, 42, 212, 97, 178, 129, 107, 206, 127, 33, 187, 247, 228, 158, 187, 238, 24, 160, 129, 95, 26, 103, 33, 90, 211, 45, 198, 208, 154, 139, 62, 247, 70, 238, 103, 177, 201, 215, 36, 217, 201, 175, 32, 141, 140, 98, 38, 181, 248, 46, 211, 169, 62, 248, 46, 116, 240, 182, 60, 117, 231, 218, 227, 80, 166, 189, 96, 20, 104, 140, 96, 253, 165, 185, 92, 238, 158, 252, 249, 211, 35, 152, 205, 144, 184, 0, 71, 80, 105, 101, 249, 194, 69, 25, 245, 202, 252, 207, 67, 170, 165, 22, 43, 2, 231, 119, 205, 104, 18, 240, 31, 101, 21, 17, 128, 145, 124, 67, 157, 75, 174, 187, 7, 57, 117, 109, 163, 24, 44, 116, 206, 85, 25, 11, 9, 9, 85, 29, 175, 75, 77, 212, 45, 223, 255, 108, 215, 31, 28, 174, 201, 92, 192, 227, 99, 173, 252, 152, 143, 99, 126, 159, 166, 42, 1, 194, 56, 93, 128, 158, 150, 0, 184, 19, 40, 13, 87, 182, 15, 176, 94, 32, 46, 88, 69, 112, 202, 250, 252, 68, 41, 222, 68, 147, 222, 226, 123, 26, 227, 30, 147, 232, 45, 218, 19, 214, 229, 117, 195, 123, 33, 36, 60, 89, 166, 173, 27, 13, 11, 2, 80, 218, 196, 126, 74, 122, 74, 123, 162, 19, 214, 195, 196, 93, 247, 29, 255, 84, 189, 155, 14, 187, 204, 148, 0, 182, 209, 200, 163, 60, 10, 101, 236, 106, 164, 130, 239, 120, 90, 235, 184, 251, 93, 13, 190, 245, 142, 145, 26, 172, 64, 123, 180, 122, 13, 199, 76, 236, 193, 3, 209, 254, 185, 1, 229, 71, 146, 206, 130, 232, 91, 164, 4, 27, 19, 217, 7, 225, 47, 113, 16, 16, 82, 243, 199, 31, 14, 4, 25, 234, 67, 146, 226, 202, 103, 219, 75, 161, 148, 113, 130, 157, 163, 77, 196, 71, 9, 170, 229, 20, 78, 173, 111, 157, 241, 100, 32, 121, 115, 95, 149, 105, 4, 7, 81, 51, 111, 178, 242, 43, 145, 152, 39, 63, 32, 51, 222, 165, 31, 200, 222, 132, 113, 131, 20, 8, 151, 131, 152, 4, 234, 71, 42, 40, 89, 224, 80, 21, 100, 42, 172, 41, 83, 164, 17, 234, 219, 109, 124, 162, 217, 25, 169, 10, 237, 134, 155, 18, 0, 200, 5, 56, 11, 218, 156, 152, 68, 3, 108, 113, 94, 114, 31, 215, 93, 7, 243, 95, 57, 156, 120, 254, 31, 163, 78, 183, 224, 34, 233, 209, 124, 158, 24, 230, 72, 211, 188, 158, 118, 111, 40, 192, 106, 238, 208, 172, 110, 250, 55, 110, 25, 80, 182, 81, 139, 67, 218, 178, 162, 55, 173, 110, 9, 123, 78, 158, 163, 131, 24, 172, 63, 119, 173, 100, 57, 19, 155, 49, 63, 216, 218, 78, 205, 43, 3, 22, 226, 65, 226, 120, 144, 113, 85, 138, 239, 165, 31, 152, 167, 147, 45, 179, 157, 129, 67, 23, 105, 196, 64, 215, 139, 62, 119, 79, 120, 183, 242, 70, 158, 68, 14, 119, 16, 134, 32, 20, 136, 60, 5, 65, 86, 130, 170, 122, 121, 219, 89, 80, 105, 148, 118, 31, 60, 168, 201, 214, 73, 249, 28, 178, 69, 6, 35, 86, 87, 222, 55, 168, 208, 234, 247, 149, 114, 204, 212, 134, 36, 177, 42, 202, 49, 156, 232, 198, 111, 83, 24, 185, 164, 203, 60, 130, 66, 88, 60, 84, 224, 8, 77, 58, 186, 58, 140, 19, 18, 72, 0, 146, 226, 47, 38, 92, 247, 167, 94, 252, 43, 61, 4, 226, 152, 216, 19, 83, 107, 218, 61, 175, 94, 229, 57, 48, 33, 82, 236, 221, 189, 243, 21, 227, 95, 246, 229, 38, 1, 230, 197, 158, 65, 184, 122, 145, 145, 142, 225, 229, 255, 32, 54, 36, 87, 185, 174, 122, 27, 12, 220, 118, 23, 247, 177, 239, 90, 139, 225, 116, 56, 60, 153, 222, 76, 238, 103, 36, 94, 23, 228, 135, 66, 217, 183, 87, 131, 126, 183, 153, 131, 242, 111, 196, 56, 150, 27, 135, 118, 62, 231, 195, 163, 99, 127, 238, 171, 73, 73, 104, 170, 169, 201, 0, 16, 63, 164, 35, 177, 129, 105, 99, 23, 174, 135, 174, 230, 191, 133, 234, 161, 57, 177, 222, 30, 230, 190, 33, 178, 220, 188, 65, 158, 3, 161, 124, 223, 208, 30, 218, 117, 138, 99, 148, 98, 96, 124, 225, 121, 135, 73, 248, 94, 156, 223, 45, 52, 212, 228, 188, 210, 44, 226, 5, 209, 36, 54, 226, 245, 251, 246, 150, 169, 227, 23, 106, 100, 214, 63, 115, 232, 32, 149, 220, 63, 85, 217, 235, 138, 31, 175, 4, 5, 149, 225, 149, 142, 112, 88, 17, 185, 71, 51, 171, 192, 56, 132, 138, 161, 223, 167, 66, 63, 27, 188, 226, 29, 117, 171, 16, 84, 171, 71, 117, 89, 241, 217, 69, 172, 75, 213, 138, 77, 216, 74, 1, 211, 198, 97, 226, 125, 245, 180, 103, 91, 231, 240, 186, 108, 203, 136, 23, 136, 7, 212, 187, 242, 4, 178, 145, 62, 125, 34, 242, 16, 131, 235, 68, 255, 153, 14, 32, 127, 115, 33, 171, 109, 206, 176, 222, 234, 58, 243, 238, 133, 224, 126, 203, 184, 214, 224, 9, 210, 182, 39, 194, 186, 228, 103, 117, 179, 136, 116, 169, 89, 13, 173, 17, 222, 81, 168, 34, 129, 192, 241, 168, 187, 163, 194, 133, 69, 239, 127, 62, 23, 196, 241, 55, 180, 60, 181, 191, 27, 99, 51, 191, 141, 191, 136, 147, 246, 210, 15, 69, 179, 43, 181, 159, 221, 209, 238, 167, 248, 195, 74, 75, 34, 246, 206, 49, 81, 60, 98, 178, 156, 57, 210, 101, 143, 255, 6, 155, 8, 101, 154, 244, 49, 41, 57, 109, 19, 231, 255, 160, 233, 129, 187, 45, 148, 95, 50, 248, 149, 229, 143, 250, 94, 122, 226, 4, 150, 209, 175, 153, 175, 98, 136, 221, 128, 42, 173, 139, 243, 249, 234, 115, 232, 230, 54, 146, 103, 50, 112, 80, 185, 125, 48, 210, 249, 84, 69, 118, 16, 119, 14, 29, 251, 45, 35, 117, 199, 199, 241, 26, 209, 250, 204, 143, 32, 1, 112, 144, 182, 0, 199, 57, 235, 128, 249, 33, 159, 106, 103, 162, 57, 189, 173, 126, 56, 82, 219, 255, 217, 162, 83, 91, 189, 114, 40, 29, 19, 67, 71, 17, 81, 154, 22, 83, 182, 185, 29, 15, 47, 172, 226, 175, 23, 128, 142, 151, 239, 118, 231, 10, 181, 168, 170, 238, 156, 216, 81, 88, 61, 89, 72, 192, 189, 163, 76, 237, 231, 225, 181, 153, 103, 132, 68, 208, 76, 173, 185, 48, 123, 157, 244, 230, 209, 162, 166, 60, 46, 207, 170, 84, 59, 178, 143, 154, 174, 119, 114, 36, 79, 46, 249, 24, 171, 235, 252, 34, 125, 183, 254, 212, 104, 16, 136, 221, 3, 54, 121, 110, 171, 198, 134, 103, 89, 129, 148, 233, 55, 178, 1, 193, 5, 219, 47, 72, 84, 128, 171, 209, 147, 16, 106, 44, 9, 246, 165, 72, 245, 201, 166, 191, 150, 81, 58, 84, 38, 203, 44, 174, 251, 180, 244, 125, 241, 157, 200, 236, 59, 79, 179, 180, 25, 137, 197, 242, 190, 25, 66, 177, 238, 193, 235, 44, 53, 230, 155, 250, 13, 245, 126, 215, 11, 26, 2, 71, 172, 204, 184, 171, 184, 53, 66, 254, 166, 187, 153, 247, 216, 169, 246, 104, 131, 117, 35, 39, 210, 217, 69, 166, 224, 50, 169, 255, 171, 58, 140, 25, 15, 87, 210, 164, 42, 24, 98, 186, 79, 49, 39, 185, 63, 153, 20, 211, 153, 60, 64, 246, 192, 119, 235, 124, 246, 196, 118, 1, 149, 128, 237, 151, 106, 29, 123, 219, 16, 197, 46, 100, 75, 38, 149, 156, 43, 26, 157, 139, 178, 241, 41, 83, 176, 209, 45, 12, 141, 158, 171, 153, 233, 138, 225, 229, 196, 255, 255, 40, 232, 238, 145, 37, 221, 133, 44, 58, 150, 142, 202, 133, 166, 66, 198, 20, 141, 136, 42, 174, 120, 221, 104, 169, 180, 142, 102, 38, 159, 182, 45, 137, 148, 24, 206, 146, 251, 57, 229, 95, 216, 225, 35, 226, 213, 139, 166, 3, 88, 117, 161, 26, 193, 90, 61, 202, 218, 77, 9, 114, 0, 69, 189, 131, 12, 72, 77, 142, 130, 1, 244, 196, 98, 89, 228, 15, 50, 32, 165, 59, 127, 226, 196, 14, 94, 125, 107, 0, 189, 241, 218, 180, 20, 204, 158, 138, 204, 198, 118, 16, 176, 62, 183, 135, 168, 149, 106, 110, 243, 178, 82, 22, 51, 71, 83, 49, 252, 181, 21, 4, 2, 83, 98, 31, 59, 174, 151, 183, 233, 103, 177, 23, 236, 97, 168, 59, 101, 149, 17, 222, 92, 109, 135, 84, 89, 162, 230, 189, 28, 217, 17, 220, 59, 139, 61, 86, 170, 246, 149, 206, 218, 66, 66, 198, 128, 37, 101, 250, 127, 125, 234, 252, 244, 64, 73, 200, 159, 252, 91, 226, 87, 40, 245, 247, 49, 228, 197, 252, 187, 40, 145, 4, 84, 191, 61, 168, 233, 248, 127, 12, 18, 197, 113, 227, 236, 206, 19, 26, 230, 211, 53, 228, 151, 29, 211, 19, 59, 41, 163, 3, 28, 153, 81, 224, 180, 173, 98, 242, 130, 102, 92, 187, 45, 136, 109, 100, 0, 129, 225, 160, 73, 202, 113, 78, 103, 1, 35, 239, 199, 221, 156, 69, 125, 167, 159, 174, 19, 70, 182, 141, 199, 162, 81, 50, 170, 11, 39, 169, 24, 76, 204, 102, 20, 216, 171, 157, 225, 228, 31, 151, 57, 170, 189, 137, 158, 177, 79, 61, 88, 65, 38, 32, 212, 51, 100, 94, 7, 28, 142, 31, 175, 63, 24, 175, 48, 53, 255, 210, 168, 236, 115, 207, 92, 41, 233, 58, 215, 11, 151, 218, 103, 69, 217, 255, 91, 169, 41, 62, 51, 162, 194, 72, 17, 149, 118, 171, 107, 90, 219, 58, 4, 50, 128, 127, 56, 182, 72, 174, 209, 16, 22, 65, 119, 11, 97, 62, 148, 28, 115, 82, 118, 91, 251, 57, 161, 46, 117, 234, 251, 53, 190, 147, 136, 37, 181, 140, 29, 40, 97, 72, 63, 194, 152, 188, 200, 86, 54, 253, 247, 95, 54, 58, 56, 10, 60, 122, 155, 191, 254, 166, 158, 130, 104, 94, 191, 171, 103, 64, 168, 8, 114, 145, 20, 66, 248, 123, 216, 152, 223, 84, 167, 154, 191, 110, 186, 182, 136, 114, 103, 130, 234, 183, 64, 122, 111, 123, 94, 69, 203, 24, 254, 58, 233, 66, 131, 99, 238, 148, 93, 94, 116, 237, 22, 113, 111, 164, 146, 235, 163, 252, 9, 66, 83, 91, 176, 251, 101, 185, 22, 27, 237, 202, 186, 214, 12, 84, 102, 77, 3, 118, 62, 144, 111, 178, 20, 253, 215, 80, 155, 142, 20, 190, 21, 198, 4, 144, 154, 87, 194, 214, 255, 29, 119, 203, 54, 187, 70, 45, 232, 175, 127, 184, 202, 88, 33, 148, 130, 129, 153, 42, 82, 118, 71, 106, 56, 42, 184, 176, 38, 113, 204, 244, 42, 201, 244, 66, 251, 177, 62, 155, 214, 191, 208, 171, 40, 109, 194, 142, 84, 5, 159, 222, 223, 109, 42, 219, 204, 253, 125, 245, 53, 108, 174, 0, 99, 166, 3, 134, 41, 157, 140, 95, 182, 157, 112, 94, 239, 92, 248, 21, 103, 170, 138, 96, 17, 229, 196, 91, 210, 111, 252, 242, 129, 128, 183, 182, 221, 64, 139, 251, 138, 107, 35, 157, 219, 196, 151, 252, 101, 229, 9, 52, 94, 119, 83, 209, 104, 211, 65, 123, 161, 90, 113, 151, 50, 84, 206, 251, 187, 214, 244, 109, 22, 184, 15, 203, 179, 46, 94, 110, 245, 48, 222, 207, 98, 188, 249, 122, 42, 230, 159, 137, 151, 56, 200, 216, 40, 74, 210, 215, 9, 6, 16, 136, 202, 44, 131, 107, 161, 93, 52, 44, 64, 4, 253, 158, 147, 163, 161, 202, 199, 41, 35, 39, 194, 119, 142, 159, 150, 6, 9, 169, 36, 78, 184, 59, 110, 238, 81, 181, 193, 184, 126, 69, 35, 229, 235, 248, 126, 251, 231, 97, 221, 224, 199, 94, 1, 114, 155, 24, 26, 89, 90, 137, 34, 4, 135, 253, 42, 17, 58, 216, 15, 15, 189, 255, 47, 32, 64, 167, 182, 220, 118, 239, 128, 148, 227, 10, 232, 198, 249, 175, 63, 198, 135, 215, 74, 9, 223, 141, 126, 50, 131, 225, 246, 217, 245, 154, 217, 100, 27, 248, 79, 165, 35, 10, 212, 233, 235, 208, 205, 97, 138, 226, 45, 249, 185, 74, 112, 163, 151, 144, 112, 233, 72, 18, 27, 66, 11, 53, 63, 148, 124, 91, 112, 21, 44, 61, 199, 178, 18, 225, 187, 58, 71, 155, 83, 66, 186, 123, 198, 82, 38, 153, 172, 193, 235, 93, 119, 130, 49, 247, 198, 59, 140, 201, 53, 33, 66, 22, 143, 0, 192, 93, 215, 175, 161, 180, 187, 71, 146, 143, 183, 95, 46, 92, 188, 123, 46, 204, 73, 93, 250, 219, 65, 119, 27, 18, 106, 104, 2, 150, 4, 128, 248, 56, 1, 201, 74, 58, 189, 84, 35, 52, 38, 64, 199, 163, 79, 40, 213, 170, 190, 102, 204, 88, 248, 94, 173, 227, 210, 50, 237, 163, 52, 221, 121, 187, 247, 138, 210, 130, 147, 237, 65, 176, 132, 245, 200, 104, 150, 237, 156, 75, 209, 240, 183, 184, 25, 151, 153, 128, 0, 101, 64, 125, 34, 97, 69, 183, 111, 55, 99, 126, 204, 37, 217, 3, 128, 131, 148, 144, 108, 229, 131, 241, 195, 193, 218, 167, 20, 123, 24, 100, 7, 196, 239, 154, 251, 177, 245, 232, 49, 171, 135, 62, 245, 204, 239, 96, 70, 22, 192, 117, 72, 51, 29, 100, 148, 252, 50, 92, 56, 197, 31, 189, 41, 149, 45, 81, 120, 29, 25, 50, 26, 251, 206, 52, 164, 180, 125, 194, 144, 172, 254, 182, 224, 160, 42, 9, 38, 42, 80, 240, 88, 47, 130, 99, 243, 210, 240, 113, 164, 64, 216, 109, 149, 213, 204, 113, 173, 226, 50, 229, 121, 219, 242, 47, 149, 211, 34, 20, 10, 63, 85, 139, 120, 169, 20, 142, 97, 216, 135, 154, 159, 133, 151, 210, 104, 18, 67, 19, 254, 25, 216, 225, 166, 199, 241, 234, 110, 67, 53, 134, 100, 59, 156, 205, 84, 156, 207, 54, 25, 121, 236, 54, 164, 249, 240, 116, 59, 210, 19, 67, 185, 204, 89, 32, 252, 79, 170, 17, 176, 33, 246, 2, 171, 41, 1, 69, 155, 95, 230, 22, 1, 14, 158, 247, 187, 141, 220, 43, 53, 198, 127, 160, 26, 168, 246, 11, 58, 192, 64, 249, 131, 139, 223, 160, 88, 214, 107, 151, 61, 89, 247, 185, 126, 172, 225, 126, 136, 96, 143, 54, 254, 96, 214, 120, 211, 85, 234, 40, 151, 0, 79, 34, 236, 63, 158, 82, 107, 7, 32, 205, 222, 17, 130, 96, 230, 113, 63, 34, 79, 50, 0, 125, 229, 209, 225, 244, 102, 73, 124, 111, 179, 157, 139, 250, 188, 213, 85, 173, 10, 152, 82, 27, 174, 210, 226, 115, 206, 146, 46, 123, 192, 130, 68, 167, 69, 38, 187, 253, 138, 63, 222, 236, 73, 191, 63, 66, 191, 197, 63, 99, 238, 61, 131, 113, 133, 97, 2, 102, 103, 65, 238, 135, 191, 97, 245, 115, 231, 96, 188, 79, 235, 166, 251, 230, 89, 147, 28, 191, 26, 100, 255, 226, 26, 106, 191, 201, 99, 71, 229, 244, 44, 169, 57, 11, 113, 165, 176, 236, 4, 17, 157, 193, 11, 197, 143, 159, 163, 98, 54, 20, 127, 205, 132, 2, 74, 108, 123, 91, 143, 238, 227, 92, 179, 84, 185, 211, 254, 166, 45, 96, 101, 69, 223, 41, 172, 151, 110, 22, 86, 229, 194, 24, 99, 1, 102, 229, 98, 132, 69, 171, 110, 145, 209, 151, 87, 29, 15, 30, 157, 13, 30, 133, 181, 19, 112, 87, 79, 162, 242, 255, 54, 200, 158, 172, 225, 161, 38, 249, 184, 2, 34, 185, 206, 70, 158, 159, 204, 222, 202, 110, 241, 55, 39, 48, 214, 117, 12, 72, 139, 21, 161, 40, 231, 97, 182, 72, 81, 40, 178, 105, 247, 154, 232, 12, 180, 13, 89, 2, 147, 127, 202, 184, 97, 25, 252, 37, 123, 112, 1, 238, 245, 237, 212, 21, 176, 153, 47, 34, 137, 47, 122, 142, 217, 198, 44, 135, 36, 70, 46, 210, 164, 143, 231, 172, 27, 185, 195, 53, 205, 3, 138, 49, 117, 3, 129, 215, 94, 228, 202, 122, 128, 76, 144, 141, 176, 208, 201, 73, 159, 238, 104, 48, 0, 10, 37, 64, 41, 6, 54, 80, 222, 7, 10, 245, 121, 49, 78, 189, 254, 238, 34, 120, 148, 118, 14, 197, 133, 157, 88, 20, 246, 104, 124, 146, 31, 248, 10, 223, 72, 142, 169, 174, 104, 39, 228, 53, 79, 98, 30, 93, 128, 85, 159, 213, 221, 161, 245, 56, 249, 183, 200, 148, 174, 10, 31, 148, 7, 196, 240, 57, 99, 97, 122, 68, 14, 130, 63, 115, 171, 18, 135, 225, 2, 160, 65, 119, 65, 97, 31, 168, 63, 83, 209, 154, 130, 140, 171, 69, 129, 149, 93, 221, 191, 223, 67, 211, 117, 65, 33, 200, 213, 159, 62, 64, 65, 77, 24, 6, 217, 65, 225, 38, 136, 68, 249, 106, 244, 205, 107, 118, 234, 72, 147, 182, 130, 143, 97, 81, 161, 96, 239, 0, 43, 249, 39, 7, 104, 95, 249, 143, 74, 1, 22, 88, 238, 59, 82, 99, 145, 99, 83, 75, 193, 147, 176, 210, 69, 25, 3, 212, 233, 199, 103, 131, 105, 117, 168, 119, 186, 168, 178, 75, 238, 217, 116, 216, 88, 146, 210, 248, 135, 206, 57, 53, 93, 164, 46, 25, 193, 99, 248, 201, 249, 72, 41, 52, 233, 16, 77, 244, 142, 255, 158, 106, 174, 110, 135, 81, 227, 143, 0, 0, 18, 238, 160, 235, 193, 136, 35, 136, 149, 147, 74, 198, 66, 231, 191, 251, 242, 8, 73, 223, 39, 133, 129, 161, 167, 212, 238, 112, 43, 59, 165, 167, 6, 37, 98, 43, 126, 173, 99, 145, 58, 158, 222, 228, 182, 42, 180, 129, 249, 76, 129, 252, 94, 177, 31, 146, 223, 241, 155, 234, 5, 45, 239, 198, 56, 243, 4, 161, 203, 6, 154, 68, 214, 67, 119, 28, 66, 184, 206, 220, 185, 74, 127, 74, 18, 46, 195, 211, 213, 22, 14, 163, 172, 212, 196, 150, 14, 119, 75, 241, 239, 240, 161, 83, 41, 19, 152, 124, 83, 241, 126, 150, 115, 114, 232, 0, 220, 11, 71, 66, 53, 107, 123, 79, 95, 146, 34, 107, 219, 43, 232, 15, 177, 103, 133, 197, 193, 135, 123, 31, 19, 220, 185, 196, 34, 181, 248, 228, 111, 163, 172, 217, 190, 108, 192, 155, 89, 43, 168, 16, 107, 139, 249, 4, 123, 91, 56, 38, 119, 216, 229, 192, 127, 148, 38, 45, 64, 208, 116, 31, 197, 254, 2, 85, 225, 168, 38, 128, 44, 217, 174, 127, 25, 113, 215, 142, 128, 134, 50, 213, 249, 70, 164, 34, 75, 99, 175, 200, 85, 125, 214, 229, 220, 88, 194, 10, 46, 148, 138, 83, 184, 72, 43, 7, 0, 100, 23, 234, 178, 88, 239, 38, 163, 157, 232, 235, 200, 132, 119, 222, 49, 75, 67, 252, 42, 3, 122, 239, 84, 16, 68, 224, 9, 9, 230, 42, 225, 121, 156, 253, 40, 102, 60, 137, 17, 11, 53, 42, 117, 252, 90, 86, 241, 181, 33, 181, 169, 234, 24, 144, 184, 92, 227, 6, 234, 204, 28, 198, 153, 89, 88, 86, 29, 49, 163, 86, 250, 54, 14, 250, 159, 55, 169, 46, 223, 122, 177, 68, 91, 154, 34, 135, 53, 184, 140, 193, 92, 212, 157, 114, 209, 126, 119, 240, 115, 94, 202, 49, 94, 189, 101, 94, 131, 23, 53, 79, 222, 26, 97, 35, 100, 69, 110, 133, 134, 227, 175, 24, 195, 166, 10, 29, 121, 92, 28, 51, 203, 207, 40, 166, 192, 109, 148, 105, 160, 20, 140, 7, 104, 211, 40, 136, 255, 183, 77, 26, 3, 6, 56, 235, 196, 13, 226, 107, 82, 72, 117, 164, 45, 116, 216, 147, 117, 17, 225, 134, 4, 20, 104, 70, 146, 119, 78, 79, 127, 240, 89, 119, 252, 153, 21, 245, 241, 106, 50, 42, 66, 201, 167, 27, 22, 44, 228, 247, 252, 219, 154, 92, 10, 23, 178, 150, 68, 61, 223, 201, 179, 6, 149, 98, 29, 236, 148, 34, 156, 222, 249, 66, 58, 246, 205, 49, 89, 142, 232, 105, 209, 22, 112, 62, 50, 123, 87, 134, 69, 43, 59, 206, 56, 41, 208, 195, 108, 2, 144, 34, 166, 24, 228, 131, 192, 140, 89, 43, 44, 114, 177, 189, 169, 211, 112, 211, 59, 193, 45, 169, 79, 222, 238, 213, 10, 2, 156, 65, 238, 1, 12, 134, 28, 146, 84, 218, 5, 33, 81, 41, 57, 201, 143, 161, 150, 156, 249, 84, 9, 32, 162, 220, 198, 35, 217, 4, 158, 163, 104, 215, 112, 169, 204, 2, 66, 69, 107, 153, 11, 166, 71, 242, 248, 30, 13, 38, 231, 192, 138, 198, 142, 55, 13, 164, 199, 93, 196, 156, 137, 224, 73, 247, 120, 21, 195, 180, 28, 49, 24, 185, 22, 177, 107, 83, 173, 199, 19, 125, 144, 173, 98, 80, 60, 7, 108, 191, 254, 39, 233, 232, 206, 156, 219, 204, 158, 40, 18, 149, 40, 227, 252, 196, 239, 146, 203, 78, 73, 162, 92, 102, 174, 153, 248, 96, 246, 74, 32, 101, 24, 118, 28, 3, 233, 95, 151, 59, 119, 180, 42, 179, 20, 84, 8, 10, 134, 140, 88, 180, 26, 161, 250, 174, 123, 254, 172, 218, 52, 4, 119, 31, 133, 164, 117, 45, 13, 26, 16, 8, 213, 40, 254, 173, 95, 61, 225, 242, 6, 9, 189, 205, 86, 146, 42, 219, 103, 18, 207, 2, 81, 42, 132, 215, 106, 36, 160, 212, 155, 231, 57, 86, 205, 207, 208, 50, 64, 188, 242, 40, 14, 48, 72, 209, 45, 202, 197, 138, 208, 218, 172, 94, 180, 187, 184, 212, 32, 195, 74, 255, 203, 151, 253, 32, 152, 123, 10, 180, 81, 189, 232, 77, 158, 39, 65, 79, 172, 142, 200, 69, 234, 185, 240, 219, 25, 189, 185, 25, 199, 7, 74, 109, 37, 164, 245, 178, 227, 229, 80, 58, 73, 100, 227, 93, 2, 143, 54, 184, 36, 221, 131, 71, 52, 241, 114, 193, 49, 227, 111, 216, 188, 137, 92, 183, 244, 198, 195, 96, 151, 192, 21, 114, 119, 193, 47, 250, 162, 156, 215, 56, 126, 204, 190, 98, 59, 156, 54, 68, 214, 129, 236, 137, 0, 39, 185, 254, 59, 224, 78, 231, 18, 106, 65, 88, 225, 221, 106, 5, 13, 103, 31, 125, 236, 159, 41, 93, 212, 36, 238, 236, 160, 193, 121, 82, 59, 14, 201, 226, 85, 224, 2, 179, 151, 62, 87, 64, 242, 190, 42, 118, 156, 79, 128, 85, 99, 43, 29, 39, 32, 4, 130, 205, 206, 225, 18, 87, 161, 122, 244, 163, 10, 168, 101, 15, 124, 197, 109, 28, 134, 60, 43, 38, 66, 17, 54, 168, 57, 136, 194, 6, 131, 169, 226, 43, 165, 235, 10, 108, 187, 67, 238, 141, 214, 177, 65, 18, 120, 133, 228, 79, 92, 245, 81, 6, 195, 44, 71, 167, 128, 242, 231, 249, 173, 204, 90, 148, 46, 43, 95, 99, 216, 246, 209, 20, 167, 249, 241, 76, 231, 52, 168, 61, 33, 8, 228, 228, 50, 103, 249, 230, 47, 42, 100, 135, 47, 199, 135, 98, 67, 12, 133, 126, 51, 196, 125, 153, 30, 192, 30, 106, 134, 108, 5, 32, 205, 232, 195, 131, 17, 93, 11, 233, 79, 81, 5, 60, 15, 95, 174, 121, 198, 59, 28, 50, 87, 140, 56, 206, 195, 110, 225, 33, 180, 104, 40, 211, 121, 244, 121, 226, 34, 225, 49, 186, 108, 41, 163, 83, 16, 126, 47, 222, 149, 66, 19, 244, 63, 175, 58, 135, 189, 79, 175, 20, 207, 131, 231, 242, 195, 3, 135, 167, 8, 181, 115, 66, 200, 235, 110, 247, 14, 221, 72, 202, 0, 99, 3, 86, 131, 150, 112, 4, 79, 60, 176, 158, 155, 196, 204, 12, 101, 207, 60, 229, 115, 182, 141, 120, 23, 203, 103, 167, 111, 171, 250, 193, 218, 222, 124, 34, 33, 153, 207, 25, 1, 114, 249, 204, 239, 180, 71, 126, 167, 235, 136, 140, 19, 33, 16, 96, 17, 106, 88, 9, 80, 0, 31, 113, 10, 244, 182, 230, 89, 134, 58, 72, 194, 216, 142, 183, 38, 223, 104, 75, 110, 37, 184, 167, 121, 35, 94, 213, 41, 69, 20, 13, 131, 93, 208, 9, 48, 151, 223, 68, 235, 153, 8, 156, 170, 126, 40, 127, 103, 141, 54, 184, 161, 197, 43, 164, 59, 24, 216, 130, 66, 25, 43, 235, 173, 34, 161, 27, 144, 13, 201, 10, 184, 222, 55, 86, 216, 89, 71, 37, 128, 187, 209, 30, 197, 252, 82, 93, 246, 156, 168, 9, 198, 163, 122, 127, 117, 244, 110, 26, 54, 217, 140, 103, 189, 236, 138, 67, 55, 156, 20, 36, 70, 83, 119, 184, 112, 156, 224, 21, 15, 198, 12, 13, 60, 106, 162, 112, 222, 110, 102, 59, 42, 247, 43, 57, 166, 32, 197, 95, 105, 11, 91, 175, 97, 78, 168, 95, 197, 215, 100, 162, 16, 203, 227, 105, 198, 34, 45, 231, 221, 236, 64, 35, 225, 139, 174, 56, 1, 89, 44, 100, 156, 137, 79, 249, 163, 143, 43, 154, 46, 253, 228, 6, 133, 219, 28, 211, 121, 251, 125, 104, 26, 243, 229, 241, 120, 114, 225, 83, 111, 181, 123, 95, 250, 244, 131, 246, 254, 201, 63, 19, 179, 48, 42, 39, 232, 218, 205, 0, 195, 100, 58, 72, 75, 27, 167, 231, 193, 130, 244, 137, 33, 32, 43, 110, 51, 122, 204, 20, 113, 3, 218, 178, 118, 168, 31, 31, 190, 41, 185, 127, 19, 128, 158, 1, 253, 53, 251, 44, 177, 111, 191, 178, 45, 155, 145, 71, 90, 78, 44, 235, 98, 30, 121, 84, 160, 249, 125, 19, 248, 12, 170, 197, 171, 246, 120, 24, 44, 9, 16, 12, 69, 102, 140, 138, 50, 56, 2, 124, 149, 75, 153, 50, 65, 138, 117, 11, 211, 215, 134, 206, 183, 151, 111, 53, 155, 195, 109, 147, 79, 105, 114, 236, 253, 215, 179, 228, 184, 108, 9, 87, 93, 85, 133, 31, 220, 135, 145, 108, 210, 172, 91, 255, 229, 130, 197, 134, 4, 106, 60, 245, 129, 162, 179, 247, 171, 226, 202, 8, 41, 239, 146, 146, 237, 204, 147, 184, 39, 93, 213, 60, 250, 176, 184, 70, 114, 120, 172, 11, 175, 114, 111, 192, 241, 113, 59, 90, 120, 119, 70, 68, 181, 127, 39, 121, 2, 46, 44, 50, 6, 234, 125, 1, 206, 94, 244, 59, 70, 232, 59, 235, 24, 67, 46, 163, 129, 2, 233, 129, 69, 12, 82, 110, 248, 168, 195, 36, 240, 73, 57, 190, 176, 65, 65, 193, 188, 245, 83, 126, 13, 24, 206, 67, 48, 188, 190, 69, 21, 222, 41, 205, 149, 182, 36, 38, 166, 206, 248, 128, 76, 130, 40, 83, 182, 89, 19, 113, 62, 247, 99, 253, 189, 78, 201, 238, 127, 2, 85, 209, 29, 211, 77, 142, 249, 134, 209, 25, 135, 230, 29, 132, 80, 176, 163, 87, 93, 223, 148, 124, 113, 240, 17, 73, 48, 72, 73, 160, 174, 39, 127, 242, 65, 42, 148, 144, 44, 209, 121, 26, 147, 181, 242, 84, 135, 172, 52, 95, 97, 23, 248, 205, 83, 169, 182, 147, 66, 183, 234, 12, 76, 112, 109, 135, 197, 189, 224, 245, 111, 110, 234, 39, 19, 231, 111, 49, 13, 218, 30, 159, 109, 228, 86, 220, 128, 210, 11, 211, 202, 20, 152, 190, 103, 12, 126, 33, 211, 69, 229, 88, 178, 67, 80, 188, 249, 253, 30, 79, 241, 114, 70, 91, 91, 2, 213, 120, 140, 34, 241, 31, 225, 215, 216, 172, 109, 242, 204, 194, 236, 177, 206, 198, 12, 181, 145, 185, 207, 162, 212, 85, 1, 190, 213, 76, 25, 164, 118, 160, 196, 35, 118, 25, 162, 87, 142, 73, 37, 54, 98, 21, 61, 25, 20, 135, 215, 85, 188, 228, 181, 188, 62, 203, 192, 158, 198, 92, 159, 139, 49, 190, 204, 7, 100, 7, 174, 39, 118, 159, 34, 118, 42, 38, 241, 210, 11, 182, 30, 50, 6, 205, 120, 1, 105, 115, 79, 178, 134, 88, 216, 22, 127, 56, 82, 125, 84, 234, 121, 130, 130, 11, 195, 85, 189, 239, 35, 67, 35, 134, 197, 32, 62, 126, 60, 110, 75, 108, 43, 203, 193, 58, 18, 190, 36, 88, 2, 247, 169, 202, 12, 128, 252, 41, 134, 134, 37, 158, 63, 92, 91, 78, 48, 222, 46, 195, 38, 106, 225, 123, 158, 98, 240, 216, 136, 62, 8, 156, 75, 137, 121, 140, 118, 60, 89, 174, 125, 196, 103, 234, 75, 219, 178, 233, 182, 240, 27, 231, 145, 75, 232, 222, 66, 138, 178, 17, 8, 15, 197, 230, 159, 88, 80, 32, 140, 76, 94, 22, 190, 156, 233, 27, 164, 142, 128, 150, 237, 183, 68, 13, 153, 141, 39, 193, 52, 180, 73, 107, 206, 137, 173, 242, 139, 244, 12, 32, 151, 21, 176, 72, 96, 20, 80, 105, 66, 135, 94, 0, 166, 171, 81, 247, 4, 205, 171, 130, 175, 242, 129, 152, 251, 44, 62, 179, 117, 66, 185, 225, 249, 156, 205, 107, 64, 5, 5, 159, 253, 107, 81, 156, 17, 118, 17, 132, 206, 74, 198, 89, 5, 72, 210, 218, 124, 59, 64, 73, 183, 246, 63, 204, 37, 255, 54, 247, 45, 59, 143, 16, 178, 32, 255, 151, 239, 55, 68, 210, 130, 26, 71, 18, 102, 216, 171, 40, 2, 224, 136, 60, 48, 211, 37, 115, 68, 36, 55, 88, 229, 87, 171, 97, 16, 5, 171, 148, 86, 45, 112, 184, 59, 164, 8, 84, 49, 242, 97, 188, 171, 150, 103, 102, 224, 14, 170, 165, 250, 149, 87, 9, 32, 243, 48, 162, 95, 244, 230, 57, 181, 154, 26, 132, 151, 100, 139, 47, 222, 50, 37, 177, 225, 99, 131, 2, 249, 145, 104, 126, 66, 223, 5, 11, 205, 244, 225, 95, 84, 73, 204, 27, 142, 91, 238, 81, 96, 157, 9, 51, 29, 191, 152, 102, 89, 133, 10, 94, 68, 78, 66, 246, 169, 168, 182, 114, 138, 96, 216, 101, 200, 94, 141, 114, 235, 78, 153, 187, 215, 79, 99, 63, 236, 111, 225, 155, 46, 119, 84, 233, 246, 188, 129, 86, 114, 184, 8, 140, 23, 89, 210, 244, 154, 96, 126, 79, 31, 102, 205, 70, 67, 64, 162, 180, 213, 110, 202, 114, 102, 238, 46, 38, 161, 124, 237, 219, 7, 46, 220, 180, 226, 241, 43, 123, 215, 183, 251, 2, 97, 0, 35, 245, 241, 195, 31, 142, 143, 214, 113, 124, 158, 72, 227, 81, 216, 153, 166, 71, 209, 211, 197, 199, 10, 134, 160, 196, 132, 229, 60, 16, 249, 58, 52, 2, 92, 132, 205, 23, 111, 198, 104, 48, 53, 170, 205, 194, 99, 161, 221, 1, 175, 243, 224, 20, 133, 244, 7, 243, 160, 225, 51, 7, 160, 194, 103, 84, 100, 187, 71, 44, 236, 97, 94, 20, 105, 85, 49, 92, 178, 3, 155, 103, 162, 147, 146, 118, 254, 154, 63, 41, 157, 247, 208, 142, 217, 246, 148, 62, 162, 187, 214, 121, 137, 194, 118, 52, 82, 216, 251, 94, 188, 117, 80, 121, 51, 175, 89, 61, 222, 170, 95, 143, 119, 128, 222, 176, 198, 144, 111, 69, 12, 45, 175, 21, 213, 153, 224, 151, 26, 4, 58, 3, 10, 96, 153, 167, 57, 188, 5, 165, 32, 39, 226, 104, 220, 12, 102, 146, 203, 247, 140, 40, 45, 213, 3, 14, 8, 244, 37, 243, 98, 198, 181, 76, 189, 48, 22, 250, 247, 177, 93, 0, 244, 241, 230, 3, 145, 94, 248, 0, 47, 165, 180, 245, 103, 6, 45, 249, 198, 152, 144, 22, 45, 100, 67, 133, 202, 237, 210, 31, 13, 106, 201, 107, 207, 39, 55, 103, 174, 230, 203, 54, 80, 168, 180, 55, 137, 14, 49, 11, 242, 237, 219, 174, 129, 36, 44, 194, 54, 102, 139, 95, 218, 210, 220, 184, 49, 218, 117, 77, 207, 202, 86, 100, 64, 0, 132, 159, 98, 47, 157, 99, 234, 45, 250, 181, 111, 219, 209, 75, 117, 144, 181, 155, 18, 130, 177, 63, 245, 106, 108, 70, 126, 41, 121, 124, 206, 92, 199, 221, 215, 49, 17, 124, 76, 214, 251, 154, 94, 162, 247, 15, 55, 22, 219, 113, 143, 6, 132, 19, 249, 170, 50, 107, 227, 253, 190, 168, 236, 47, 51, 97, 253, 19, 144, 28, 81, 189, 14, 42, 221, 50, 43, 255, 106, 120, 188, 29, 29, 145, 240, 194, 12, 47, 10, 19, 118, 54, 132, 218, 251, 118, 206, 117, 156, 56, 217, 154, 79, 243, 99, 7, 174, 76, 161, 112, 180, 236, 65, 224, 238, 20, 163, 241, 252, 88, 70, 66, 63, 224, 146, 201, 38, 55, 149, 44, 162, 46, 209, 196, 35, 182, 4, 214, 202, 130, 222, 125, 155, 97, 9, 65, 152, 162, 72, 90, 64, 27, 217, 175, 100, 31, 155, 252, 126, 147, 96, 37, 239, 56, 60, 49, 168, 57, 179, 89, 128, 53, 116, 241, 81, 28, 28, 80, 57, 236, 207, 204, 152, 62, 23, 217, 31, 236, 245, 159, 212, 23, 32, 173, 151, 181, 187, 34, 7, 198, 213, 127, 141, 145, 154, 48, 22, 113, 244, 197, 135, 172, 183, 93, 241, 139, 17, 45, 185, 6, 83, 59, 187, 61, 254, 32, 131, 212, 9, 199, 120, 121, 112, 96, 162, 36, 146, 83, 211, 158, 126, 103, 122, 204, 240, 138, 25, 103, 129, 39, 54, 248, 227, 81, 192, 172, 201, 19, 163, 144, 118, 36, 155, 188, 126, 6, 118, 35, 235, 197, 228, 146, 114, 218, 84, 26, 253, 226, 240, 164, 58, 51, 125, 96, 166, 133, 42, 56, 150, 29, 89, 240, 208, 119, 216, 64, 167, 20, 155, 154, 243, 34, 60, 221, 179, 146, 5, 136, 167, 166, 203, 108, 160, 36, 2, 217, 0, 41, 236, 181, 224, 204, 192, 120, 112, 223, 59, 115, 254, 89, 80, 197, 243, 203, 191, 94, 2, 134, 125, 212, 67, 12, 27, 30, 251, 141, 255, 243, 29], - [203, 132, 248, 248, 145, 141, 143, 37, 210, 207, 26, 9, 112, 98, 156, 192, 241, 231, 86, 112, 187, 63, 46, 219, 209, 112, 199, 132, 189, 111, 216, 76, 138, 150, 75, 167, 222, 180, 100, 217, 140, 212, 177, 107, 72, 22, 70, 223, 174, 246, 89, 206, 29, 14, 80, 94, 215, 98, 244, 191, 71, 86, 70, 146, 124, 204, 136, 164, 54, 48, 58, 64, 106, 201, 49, 214, 248, 62, 238, 220, 214, 180, 202, 97, 120, 23, 53, 207, 162, 48, 62, 16, 33, 49, 189, 116, 104, 119, 179, 55, 219, 15, 43, 138, 141, 75, 41, 131, 103, 164, 32, 224, 3, 124, 123, 153, 134, 246, 0, 52, 75, 62, 73, 29, 27, 238, 240, 5, 113, 122, 195, 77, 20, 10, 251, 172, 242, 209, 203, 187, 157, 4, 54, 206, 132, 156, 125, 83, 21, 235, 168, 236, 1, 195, 42, 61, 248, 86, 75, 214, 18, 140, 92, 44, 177, 223, 117, 99, 102, 219, 173, 119, 115, 70, 27, 72, 227, 87, 214, 135, 183, 196, 98, 171, 150, 65, 218, 170, 23, 196, 138, 29, 157, 124, 82, 178, 221, 220, 172, 83, 255, 113, 123, 145, 186, 161, 67, 230, 77, 44, 68, 114, 47, 178, 153, 120, 99, 76, 204, 171, 212, 137, 133, 155, 193, 84, 81, 111, 106, 232, 58, 223, 57, 73, 143, 130, 158, 18, 200, 4, 177, 156, 183, 97, 106, 56, 206, 24, 167, 108, 67, 231, 100, 12, 63, 173, 91, 219, 248, 227, 243, 105, 254, 212, 36, 116, 162, 200, 252, 247, 74, 163, 129, 23, 53, 250, 87, 130, 100, 33, 207, 209, 106, 153, 13, 178, 46, 10, 26, 131, 78, 21, 20, 32, 10, 64, 184, 217, 75, 43, 244, 66, 47, 231, 192, 88, 252, 230, 85, 39, 104, 166, 53, 146, 190, 197, 164, 107, 209, 195, 98, 138, 62, 174, 155, 183, 97, 26, 174, 239, 151, 176, 168, 17, 95, 111, 7, 43, 62, 9, 152, 193, 171, 196, 44, 131, 29, 155, 19, 243, 63, 182, 25, 147, 8, 5, 186, 153, 93, 184, 8, 57, 47, 196, 244, 119, 152, 16, 217, 66, 179, 162, 189, 54, 232, 184, 5, 57, 77, 145, 255, 192, 107, 145, 92, 21, 242, 7, 200, 176, 229, 151, 121, 144, 20, 18, 23, 253, 175, 66, 67, 92, 221, 12, 189, 220, 252, 73, 179, 213, 246, 39, 221, 50, 59, 2, 112, 21, 1, 78, 240, 56, 153, 173, 242, 51, 131, 111, 238, 179, 114, 118, 17, 186, 60, 39, 241, 224, 209, 77, 186, 147, 189, 219, 203, 234, 76, 213, 0, 194, 223, 200, 17, 219, 200, 0, 80, 154, 71, 83, 7, 65, 160, 65, 23, 207, 20, 241, 85, 68, 251, 123, 95, 114, 178, 209, 163, 59, 203, 70, 233, 75, 2, 123, 70, 123, 205, 247, 122, 230, 38, 79, 63, 204, 26, 39, 201, 34, 96, 156, 159, 8, 76, 61, 21, 56, 213, 50, 19, 235, 167, 102, 38, 149, 122, 205, 230, 174, 31, 34, 163, 208, 151, 70, 167, 190, 71, 179, 7, 48, 29, 116, 20, 42, 67, 176, 96, 96, 196, 92, 205, 102, 20, 178, 49, 21, 253, 216, 136, 238, 210, 231, 89, 168, 245, 234, 235, 162, 76, 141, 241, 106, 205, 19, 207, 75, 220, 119, 208, 231, 253, 7, 128, 98, 64, 208, 61, 39, 74, 193, 58, 140, 63, 213, 41, 130, 174, 3, 113, 158, 142, 26, 97, 22, 24, 151, 142, 7, 155, 91, 158, 60, 114, 75, 36, 251, 17, 243, 132, 30, 99, 20, 213, 232, 85, 109, 5, 20, 71, 144, 20, 190, 209, 31, 253, 106, 158, 134, 67, 236, 224, 156, 35, 25, 191, 61, 235, 23, 249, 121, 11, 102, 61, 108, 76, 88, 214, 242, 130, 87, 10, 155, 68, 37, 57, 167, 101, 234, 180, 167, 141, 107, 242, 94, 251, 164, 29, 30, 142, 51, 207, 78, 96, 56, 156, 44, 69, 154, 123, 68, 166, 114, 238, 183, 104, 184, 219, 149, 220, 44, 111, 161, 17, 220, 44, 93, 225, 132, 238, 246, 89, 99, 220, 88, 65, 235, 170, 237, 58, 157, 92, 226, 207, 65, 153, 69, 136, 74, 121, 110, 123, 133, 82, 46, 218, 196, 121, 150, 131, 214, 132, 72, 239, 119, 39, 201, 97, 195, 97, 41, 0, 151, 65, 127, 223, 105, 169, 72, 128, 59, 241, 66, 104, 95, 103, 57, 235, 234, 52, 38, 25, 213, 179, 86, 191, 74, 234, 0, 125, 156, 168, 185, 228, 18, 2, 213, 43, 112, 203, 53, 98, 96, 172, 206, 251, 43, 104, 182, 18, 223, 121, 138, 227, 63, 147, 108, 248, 151, 68, 235, 164, 245, 202, 171, 250, 102, 120, 4, 21, 101, 205, 229, 28, 118, 64, 11, 72, 31, 244, 215, 240, 245, 187, 73, 140, 248, 65, 255, 103, 179, 95, 186, 235, 63, 122, 33, 242, 60, 127, 170, 140, 32, 236, 158, 45, 219, 149, 122, 33, 152, 251, 60, 95, 80, 183, 104, 143, 25, 125, 85, 153, 7, 193, 220, 117, 64, 235, 212, 153, 76, 115, 178, 69, 28, 78, 204, 136, 55, 163, 123, 151, 162, 208, 229, 94, 255, 179, 54, 249, 35, 149, 199, 169, 19, 165, 67, 84, 166, 112, 0, 228, 30, 137, 163, 147, 240, 99, 247, 248, 33, 48, 10, 25, 176, 63, 187, 82, 179, 247, 76, 252, 224, 26, 195, 182, 222, 89, 228, 157, 64, 110, 144, 10, 189, 116, 8, 77, 192, 50, 244, 10, 78, 181, 213, 21, 242, 41, 135, 192, 113, 137, 178, 243, 180, 195, 38, 117, 201, 66, 98, 203, 97, 52, 249, 87, 105, 48, 245, 243, 225, 33, 181, 106, 228, 102, 201, 248, 212, 109, 221, 17, 155, 98, 59, 53, 94, 33, 248, 120, 27, 241, 167, 105, 146, 13, 221, 154, 16, 187, 117, 84, 83, 112, 34, 160, 74, 150, 238, 92, 240, 188, 198, 161, 216, 145, 92, 71, 28, 249, 164, 136, 218, 15, 198, 28, 9, 246, 126, 125, 103, 63, 42, 155, 36, 221, 184, 40, 240, 205, 228, 85, 158, 108, 77, 101, 178, 248, 102, 95, 36, 224, 7, 161, 222, 5, 9, 187, 115, 1, 78, 101, 30, 159, 101, 51, 170, 146, 212, 208, 5, 218, 228, 70, 38, 40, 224, 103, 12, 156, 210, 160, 88, 194, 36, 149, 225, 51, 106, 65, 67, 69, 251, 16, 181, 235, 62, 122, 112, 13, 65, 226, 40, 196, 245, 221, 31, 77, 248, 135, 214, 73, 71, 195, 5, 187, 96, 91, 186, 51, 63, 245, 117, 142, 180, 5, 184, 143, 96, 153, 4, 71, 137, 219, 156, 23, 180, 46, 40, 197, 29, 53, 142, 112, 10, 66, 56, 147, 97, 96, 206, 252, 167, 232, 42, 192, 202, 251, 140, 217, 60, 70, 198, 255, 205, 24, 189, 249, 188, 230, 211, 255, 225, 238, 144, 43, 236, 171, 124, 207, 191, 70, 127, 113, 247, 178, 254, 166, 55, 221, 29, 72, 0, 98, 168, 200, 141, 185, 83, 188, 38, 193, 192, 131, 66, 14, 92, 223, 228, 30, 10, 99, 22, 53, 194, 177, 106, 235, 237, 70, 254, 99, 63, 169, 83, 29, 179, 179, 179, 15, 206, 55, 96, 237, 227, 204, 132, 211, 128, 160, 46, 211, 108, 14, 22, 142, 91, 153, 40, 110, 62, 168, 47, 21, 44, 159, 36, 108, 204, 68, 107, 39, 44, 7, 182, 0, 55, 31, 58, 55, 129, 198, 172, 241, 20, 143, 132, 70, 114, 113, 60, 74, 223, 77, 31, 189, 216, 91, 134, 133, 8, 51, 241, 198, 202, 225, 165, 15, 163, 183, 164, 53, 89, 13, 95, 108, 179, 128, 188, 158, 252, 126, 38, 167, 189, 181, 235, 44, 73, 180, 254, 222, 137, 222, 103, 102, 108, 210, 110, 217, 93, 250, 1, 217, 18, 182, 247, 35, 139, 188, 122, 80, 115, 232, 139, 0, 125, 85, 72, 89, 210, 217, 92, 185, 87, 108, 64, 252, 125, 192, 168, 68, 63, 82, 246, 221, 32, 82, 252, 121, 217, 38, 193, 115, 42, 145, 205, 88, 209, 110, 123, 84, 104, 143, 86, 19, 204, 226, 250, 134, 29, 66, 78, 66, 58, 241, 199, 220, 78, 168, 186, 140, 19, 2, 9, 122, 124, 149, 250, 165, 140, 10, 191, 50, 177, 131, 0, 128, 116, 159, 147, 141, 254, 104, 154, 121, 184, 70, 159, 112, 25, 11, 94, 152, 50, 221, 115, 149, 23, 48, 217, 23, 242, 132, 111, 156, 71, 207, 237, 24, 81, 234, 109, 45, 20, 207, 99, 119, 99, 91, 185, 2, 221, 160, 72, 97, 91, 120, 242, 224, 220, 62, 173, 175, 247, 169, 53, 92, 3, 78, 104, 194, 15, 177, 11, 229, 136, 13, 65, 130, 125, 220, 231, 10, 65, 97, 154, 111, 167, 127, 211, 62, 172, 67, 163, 180, 237, 242, 68, 53, 134, 175, 56, 5, 70, 211, 224, 245, 173, 14, 33, 177, 62, 52, 43, 41, 52, 21, 69, 107, 176, 5, 25, 45, 45, 101, 138, 167, 170, 29, 136, 203, 237, 255, 43, 71, 25, 70, 4, 252, 94, 200, 169, 208, 221, 223, 59, 124, 117, 205, 179, 7, 213, 1, 234, 55, 91, 130, 34, 179, 197, 226, 245, 48, 88, 50, 211, 133, 147, 223, 221, 127, 46, 104, 251, 0, 107, 9, 39, 43, 116, 116, 2, 250, 201, 60, 160, 72, 232, 176, 178, 39, 173, 101, 147, 198, 253, 210, 27, 95, 128, 220, 166, 168, 45, 52, 55, 46, 235, 236, 227, 207, 37, 234, 129, 52, 248, 243, 22, 126, 42, 34, 56, 233, 232, 147, 46, 132, 178, 77, 21, 75, 17, 89, 77, 139, 238, 2, 37, 17, 56, 102, 186, 191, 149, 67, 146, 74, 199, 201, 82, 140, 195, 234, 180, 40, 137, 125, 121, 105, 230, 120, 238, 131, 118, 161, 159, 33, 108, 48, 119, 27, 106, 232, 109, 171, 27, 14, 214, 195, 244, 43, 149, 23, 55, 141, 109, 121, 48, 209, 54, 61, 70, 163, 221, 120, 62, 46, 197, 187, 215, 139, 219, 133, 183, 97, 80, 66, 54, 12, 131, 46, 10, 145, 177, 20, 118, 71, 46, 106, 138, 247, 230, 66, 80, 177, 159, 129, 13, 211, 176, 50, 250, 168, 34, 176, 51, 59, 126, 54, 136, 131, 35, 204, 232, 21, 228, 114, 106, 119, 246, 172, 78, 102, 130, 30, 76, 128, 45, 43, 83, 203, 128, 90, 172, 181, 39, 104, 50, 89, 136, 151, 51, 216, 110, 165, 127, 2, 59, 63, 232, 11, 115, 227, 110, 160, 177, 118, 249, 56, 184, 175, 249, 145, 238, 102, 119, 23, 224, 241, 241, 226, 123, 191, 250, 222, 84, 197, 235, 91, 251, 93, 80, 146, 40, 76, 117, 11, 10, 62, 131, 158, 212, 250, 123, 33, 0, 115, 49, 205, 253, 38, 226, 209, 120, 166, 124, 91, 223, 64, 177, 121, 87, 156, 77, 105, 79, 178, 248, 122, 187, 235, 138, 162, 49, 75, 94, 51, 209, 192, 241, 214, 19, 101, 42, 37, 122, 190, 202, 118, 201, 91, 141, 217, 243, 60, 161, 2, 254, 77, 238, 166, 253, 93, 149, 157, 126, 3, 251, 208, 212, 172, 63, 76, 211, 71, 65, 94, 102, 73, 44, 12, 227, 109, 46, 106, 148, 236, 125, 132, 24, 187, 181, 60, 212, 150, 175, 184, 233, 162, 37, 28, 143, 170, 128, 191, 66, 120, 110, 211, 47, 188, 207, 49, 121, 249, 196, 234, 214, 149, 248, 28, 37, 106, 17, 71, 192, 126, 180, 83, 146, 8, 91, 232, 77, 74, 82, 95, 225, 204, 131, 246, 44, 74, 214, 101, 253, 145, 176, 32, 64, 218, 255, 85, 231, 201, 234, 87, 185, 5, 20, 162, 42, 50, 60, 205, 0, 52, 237, 175, 237, 80, 16, 95, 47, 130, 37, 44, 208, 4, 101, 86, 157, 85, 93, 95, 200, 148, 104, 98, 77, 156, 33, 91, 156, 60, 123, 218, 182, 253, 176, 24, 146, 224, 63, 133, 25, 248, 150, 50, 247, 80, 235, 120, 223, 83, 246, 163, 39, 44, 158, 229, 16, 164, 232, 202, 84, 250, 21, 56, 176, 0, 30, 131, 227, 77, 114, 226, 136, 105, 190, 59, 89, 204, 168, 193, 175, 129, 62, 70, 41, 65, 232, 211, 30, 112, 232, 202, 142, 184, 112, 64, 224, 25, 44, 111, 154, 45, 108, 201, 168, 210, 118, 232, 227, 153, 44, 231, 52, 194, 68, 177, 33, 217, 170, 204, 137, 216, 198, 111, 97, 5, 250, 202, 21, 117, 58, 170, 36, 253, 103, 188, 62, 127, 123, 61, 9, 231, 222, 98, 43, 125, 248, 44, 145, 35, 193, 197, 226, 74, 31, 21, 125, 122, 76, 168, 10, 50, 72, 211, 205, 167, 23, 53, 134, 42, 128, 139, 98, 116, 30, 58, 76, 9, 46, 100, 249, 118, 193, 74, 103, 141, 187, 10, 94, 80, 65, 189, 227, 34, 112, 186, 121, 213, 46, 97, 31, 117, 119, 253, 222, 104, 10, 43, 104, 133, 177, 214, 52, 111, 67, 137, 214, 252, 205, 67, 138, 238, 217, 65, 61, 160, 13, 136, 249, 0, 147, 163, 38, 10, 235, 133, 147, 68, 145, 72, 61, 69, 218, 91, 40, 218, 142, 30, 230, 11, 117, 191, 91, 66, 232, 250, 30, 191, 35, 250, 186, 228, 90, 100, 102, 135, 62, 68, 35, 143, 130, 137, 250, 192, 128, 2, 198, 103, 205, 113, 112, 98, 79, 12, 51, 113, 144, 194, 3, 154, 177, 144, 164, 226, 122, 207, 92, 207, 66, 238, 234, 153, 173, 155, 112, 160, 32, 94, 49, 18, 158, 0, 76, 161, 203, 204, 35, 70, 166, 95, 96, 149, 153, 118, 10, 42, 152, 98, 93, 131, 8, 223, 141, 182, 160, 71, 229, 170, 63, 30, 181, 245, 41, 71, 189, 38, 177, 163, 11, 215, 148, 245, 186, 148, 91, 236, 53, 149, 191, 161, 49, 107, 36, 203, 122, 213, 40, 246, 99, 183, 54, 213, 72, 246, 180, 75, 89, 142, 230, 57, 84, 165, 221, 64, 108, 98, 251, 248, 131, 166, 244, 60, 207, 230, 113, 199, 191, 100, 200, 4, 236, 177, 43, 130, 107, 83, 63, 170, 178, 136, 10, 67, 75, 32, 117, 13, 52, 134, 21, 221, 148, 177, 156, 221, 144, 212, 128, 158, 108, 211, 220, 149, 121, 240, 138, 11, 32, 219, 92, 50, 133, 177, 217, 240, 160, 253, 227, 183, 16, 89, 178, 109, 99, 64, 144, 58, 63, 212, 226, 134, 153, 240, 67, 25, 177, 216, 173, 191, 105, 109, 243, 208, 234, 215, 215, 27, 94, 83, 219, 113, 64, 229, 242, 126, 81, 165, 254, 217, 223, 20, 134, 75, 203, 101, 229, 14, 66, 23, 64, 105, 46, 92, 128, 34, 38, 20, 189, 181, 34, 157, 85, 57, 25, 55, 255, 111, 103, 166, 248, 214, 93, 87, 85, 96, 39, 42, 142, 182, 179, 201, 157, 195, 1, 50, 17, 164, 126, 140, 30, 73, 199, 250, 68, 96, 197, 37, 156, 227, 222, 59, 141, 168, 132, 161, 176, 67, 29, 237, 196, 193, 47, 31, 27, 225, 185, 175, 93, 118, 197, 184, 182, 171, 145, 13, 133, 47, 96, 255, 7, 4, 134, 107, 6, 247, 188, 198, 238, 61, 203, 136, 64, 84, 65, 216, 101, 82, 18, 180, 218, 73, 254, 106, 121, 216, 152, 223, 114, 205, 97, 205, 115, 70, 187, 228, 8, 109, 198, 11, 56, 201, 132, 76, 141, 141, 134, 175, 74, 136, 114, 31, 128, 206, 187, 140, 84, 221, 185, 176, 50, 254, 255, 8, 58, 226, 145, 224, 222, 93, 128, 254, 111, 10, 38, 165, 219, 204, 19, 165, 185, 236, 33, 124, 69, 121, 47, 125, 236, 181, 174, 69, 167, 43, 251, 247, 133, 35, 159, 42, 115, 118, 112, 50, 194, 195, 118, 49, 180, 7, 205, 236, 0, 77, 234, 61, 55, 60, 170, 195, 5, 97, 250, 151, 145, 84, 33, 216, 117, 70, 238, 94, 49, 9, 180, 189, 171, 108, 155, 102, 28, 174, 18, 181, 90, 105, 214, 210, 39, 152, 156, 50, 187, 31, 117, 30, 19, 168, 81, 136, 230, 159, 81, 108, 95, 77, 61, 179, 73, 9, 172, 107, 135, 11, 49, 233, 143, 162, 215, 224, 62, 67, 202, 181, 87, 107, 124, 72, 251, 6, 250, 236, 194, 27, 84, 225, 168, 65, 121, 211, 224, 238, 172, 205, 154, 71, 63, 196, 51, 233, 209, 105, 133, 26, 11, 37, 236, 220, 1, 94, 232, 141, 212, 77, 2, 16, 233, 66, 11, 96, 84, 137, 56, 57, 168, 147, 42, 134, 214, 56, 150, 72, 183, 196, 83, 20, 11, 98, 66, 26, 169, 110, 29, 33, 216, 56, 102, 109, 200, 36, 209, 1, 105, 246, 121, 105, 3, 44, 79, 148, 45, 65, 106, 95, 8, 4, 132, 118, 122, 192, 93, 121, 38, 47, 123, 160, 39, 114, 240, 84, 201, 224, 193, 190, 128, 208, 20, 15, 180, 15, 181, 100, 217, 165, 238, 142, 137, 88, 77, 165, 94, 76, 232, 116, 140, 110, 79, 68, 248, 136, 87, 125, 230, 219, 126, 75, 150, 186, 197, 225, 78, 185, 48, 204, 224, 252, 118, 38, 163, 9, 127, 178, 248, 219, 38, 175, 145, 69, 150, 139, 214, 40, 249, 27, 6, 99, 227, 31, 162, 236, 128, 198, 76, 179, 17, 50, 179, 153, 3, 19, 105, 94, 109, 10, 229, 62, 207, 33, 58, 27, 111, 11, 29, 164, 240, 178, 115, 169, 115, 14, 108, 135, 24, 191, 126, 74, 99, 132, 88, 105, 42, 246, 206, 98, 22, 149, 63, 72, 206, 74, 254, 74, 222, 77, 38, 243, 96, 2, 118, 216, 138, 99, 103, 148, 113, 52, 39, 177, 100, 4, 191, 129, 168, 177, 180, 24, 239, 185, 68, 96, 119, 110, 175, 27, 117, 112, 179, 8, 9, 30, 139, 246, 155, 108, 199, 216, 202, 105, 217, 90, 66, 204, 114, 97, 83, 118, 113, 25, 112, 203, 150, 219, 69, 135, 240, 184, 246, 174, 164, 185, 38, 249, 34, 77, 100, 248, 224, 101, 1, 103, 47, 120, 99, 5, 92, 231, 148, 186, 156, 54, 216, 6, 168, 56, 0, 40, 172, 153, 101, 127, 34, 27, 33, 122, 226, 231, 65, 239, 255, 81, 196, 82, 182, 98, 250, 123, 71, 110, 242, 2, 92, 22, 127, 67, 142, 11, 62, 32, 132, 71, 174, 107, 217, 113, 154, 206, 67, 119, 199, 95, 135, 130, 80, 113, 235, 23, 52, 121, 247, 47, 175, 35, 179, 42, 5, 255, 120, 129, 57, 38, 46, 183, 97, 206, 26, 14, 203, 233, 44, 133, 127, 134, 95, 173, 62, 252, 200, 175, 212, 161, 245, 97, 219, 219, 175, 142, 92, 51, 202, 110, 33, 193, 116, 81, 55, 201, 139, 130, 166, 214, 146, 183, 55, 245, 45, 51, 225, 232, 75, 248, 223, 129, 195, 205, 109, 201, 222, 119, 169, 166, 209, 201, 214, 240, 83, 61, 60, 235, 67, 173, 113, 156, 163, 122, 198, 111, 130, 8, 20, 151, 91, 101, 169, 39, 42, 98, 25, 54, 32, 137, 4, 145, 240, 121, 60, 114, 142, 90, 186, 148, 218, 228, 6, 237, 224, 204, 183, 40, 216, 127, 164, 215, 113, 165, 227, 64, 191, 30, 210, 102, 219, 67, 96, 131, 20, 197, 67, 68, 79, 121, 247, 80, 132, 241, 27, 75, 242, 55, 69, 212, 153, 227, 178, 67, 159, 183, 60, 200, 210, 73, 64, 221, 43, 236, 21, 205, 37, 97, 212, 62, 140, 4, 200, 14, 99, 24, 195, 111, 90, 169, 73, 208, 72, 206, 130, 175, 181, 49, 72, 137, 62, 84, 152, 9, 181, 195, 224, 111, 121, 231, 204, 232, 225, 141, 112, 166, 223, 2, 117, 182, 214, 78, 2, 2, 84, 78, 83, 41, 122, 147, 6, 208, 230, 11, 9, 158, 206, 53, 244, 129, 81, 60, 101, 107, 104, 115, 188, 126, 71, 183, 223, 234, 214, 145, 201, 245, 39, 205, 113, 94, 80, 255, 102, 180, 205, 46, 95, 73, 162, 11, 166, 78, 142, 155, 170, 35, 49, 114, 217, 31, 247, 116, 23, 5, 240, 187, 209, 249, 253, 145, 131, 34, 117, 249, 167, 6, 227, 103, 111, 26, 83, 131, 11, 84, 120, 203, 251, 4, 118, 240, 33, 56, 25, 89, 173, 104, 152, 90, 124, 161, 186, 233, 84, 242, 161, 17, 188, 180, 31, 230, 13, 222, 11, 251, 140, 16, 134, 51, 121, 227, 120, 11, 95, 114, 185, 155, 194, 14, 136, 98, 156, 164, 163, 130, 112, 114, 158, 186, 71, 46, 37, 179, 92, 43, 205, 27, 134, 125, 20, 36, 154, 10, 88, 76, 23, 166, 88, 210, 201, 210, 118, 64, 133, 52, 67, 234, 124, 38, 189, 62, 173, 122, 247, 65, 94, 2, 197, 143, 88, 108, 151, 108, 45, 172, 52, 114, 72, 205, 23, 40, 220, 127, 141, 216, 136, 41, 14, 136, 184, 204, 111, 213, 44, 249, 3, 139, 153, 9, 225, 27, 195, 107, 69, 238, 121, 234, 68, 64, 245, 13, 185, 135, 206, 91, 141, 141, 93, 70, 198, 228, 103, 147, 50, 23, 13, 149, 18, 191, 250, 244, 73, 132, 76, 199, 92, 237, 139, 60, 117, 75, 204, 155, 165, 26, 175, 33, 64, 214, 244, 138, 88, 173, 234, 247, 139, 19, 169, 97, 115, 190, 12, 189, 140, 17, 97, 171, 105, 65, 164, 199, 55, 79, 102, 87, 2, 26, 2, 248, 5, 112, 232, 11, 236, 249, 69, 179, 129, 70, 167, 13, 28, 236, 23, 253, 146, 164, 101, 220, 191, 173, 50, 186, 187, 132, 117, 240, 39, 113, 251, 49, 14, 215, 70, 50, 5, 64, 100, 47, 234, 169, 237, 23, 218, 158, 149, 30, 10, 249, 148, 40, 3, 214, 111, 209, 250, 43, 230, 23, 222, 145, 222, 134, 117, 78, 178, 151, 82, 3, 87, 244, 10, 154, 55, 175, 42, 190, 124, 48, 66, 186, 213, 39, 188, 22, 14, 237, 136, 34, 152, 127, 221, 53, 187, 140, 128, 95, 223, 74, 235, 114, 205, 123, 91, 121, 123, 19, 204, 204, 173, 249, 64, 59, 172, 177, 142, 193, 123, 250, 84, 3, 120, 107, 207, 227, 176, 126, 250, 252, 240, 5, 140, 18, 4, 139, 196, 81, 12, 203, 58, 33, 87, 223, 227, 163, 25, 50, 129, 116, 171, 207, 40, 182, 88, 142, 115, 49, 10, 216, 16, 87, 62, 147, 95, 105, 213, 40, 71, 153, 194, 177, 71, 224, 98, 82, 109, 168, 173, 83, 6, 89, 252, 224, 11, 162, 204, 246, 28, 98, 239, 186, 215, 166, 234, 19, 5, 250, 31, 41, 39, 203, 79, 63, 99, 64, 121, 59, 199, 147, 246, 195, 37, 25, 214, 245, 46, 36, 42, 7, 38, 212, 64, 114, 247, 159, 95, 243, 187, 175, 151, 203, 247, 47, 80, 116, 105, 167, 77, 196, 216, 241, 59, 223, 88, 96, 77, 254, 149, 106, 27, 249, 53, 55, 8, 228, 235, 171, 248, 42, 227, 216, 168, 215, 189, 25, 254, 241, 110, 98, 163, 149, 236, 88, 253, 156, 193, 113, 39, 97, 166, 22, 97, 166, 67, 195, 50, 109, 16, 124, 198, 187, 223, 5, 176, 148, 123, 254, 174, 101, 32, 135, 61, 81, 254, 231, 167, 52, 14, 4, 29, 38, 231, 58, 41, 34, 221, 152, 131, 71, 153, 10, 25, 233, 161, 4, 241, 234, 44, 19, 96, 23, 37, 23, 202, 70, 19, 103, 13, 33, 112, 12, 97, 6, 57, 11, 132, 18, 62, 234, 217, 37, 10, 65, 28, 180, 32, 92, 5, 229, 250, 25, 4, 18, 187, 134, 171, 62, 188, 128, 15, 136, 39, 115, 151, 253, 175, 7, 90, 111, 252, 166, 163, 44, 10, 181, 6, 41, 206, 85, 204, 239, 228, 179, 9, 73, 37, 254, 244, 79, 89, 88, 32, 129, 133, 195, 178, 203, 205, 55, 114, 56, 83, 110, 216, 35, 125, 33, 149, 43, 96, 135, 26, 243, 231, 12, 58, 171, 44, 18, 231, 39, 80, 241, 78, 80, 150, 182, 102, 2, 84, 129, 228, 107, 99, 215, 171, 108, 161, 23, 198, 36, 33, 95, 129, 11, 69, 149, 13, 164, 17, 251, 40, 105, 235, 248, 173, 169, 25, 115, 200, 18, 111, 154, 129, 249, 188, 222, 182, 52, 222, 25, 5, 162, 4, 119, 72, 62, 243, 22, 65, 215, 151, 52, 184, 127, 58, 169, 58, 26, 195, 20, 90, 56, 119, 233, 15, 94, 192, 18, 205, 48, 59, 190, 91, 80, 103, 245, 143, 73, 18, 45, 108, 63, 125, 215, 183, 204, 111, 15, 214, 75, 20, 161, 242, 7, 159, 150, 55, 33, 83, 244, 37, 167, 100, 134, 147, 143, 196, 98, 195, 97, 17, 12, 125, 251, 129, 144, 64, 152, 77, 234, 218, 199, 110, 36, 202, 229, 219, 165, 55, 218, 3, 193, 13, 55, 163, 22, 150, 188, 171, 71, 37, 40, 125, 113, 202, 117, 195, 152, 194, 227, 140, 75, 242, 244, 180, 23, 212, 247, 184, 61, 154, 23, 218, 82, 191, 121, 214, 229, 186, 60, 153, 9, 53, 118, 69, 250, 195, 109, 86, 167, 32, 219, 188, 85, 131, 221, 57, 184, 23, 203, 119, 129, 43, 123, 66, 158, 206, 169, 200, 236, 229, 200, 91, 23, 178, 38, 130, 193, 238, 69, 183, 174, 169, 9, 219, 226, 70, 244, 223, 167, 26, 120, 134, 62, 71, 51, 48, 48, 156, 4, 94, 58, 3, 92, 175, 75, 43, 192, 119, 66, 32, 249, 81, 195, 129, 81, 77, 245, 226, 219, 85, 231, 150, 93, 113, 250, 67, 221, 62, 52, 93, 123, 162, 53, 43, 67, 107, 208, 7, 186, 98, 216, 217, 130, 226, 219, 114, 120, 235, 176, 34, 100, 8, 172, 90, 11, 237, 102, 170, 104, 129, 138, 169, 161, 128, 68, 199, 159, 183, 126, 153, 173, 174, 50, 191, 246, 44, 102, 58, 222, 157, 58, 139, 242, 41, 128, 113, 164, 97, 51, 130, 83, 225, 48, 50, 246, 26, 110, 224, 49, 33, 121, 231, 83, 154, 24, 208, 96, 137, 154, 3, 233, 225, 70, 111, 55, 172, 121, 245, 203, 61, 75, 225, 184, 128, 236, 131, 161, 181, 102, 160, 11, 142, 10, 237, 184, 5, 216, 253, 3, 46, 89, 13, 164, 183, 218, 61, 187, 103, 119, 60, 104, 168, 110, 80, 221, 220, 38, 95, 155, 118, 10, 179, 15, 134, 215, 229, 75, 243, 194, 115, 117, 139, 170, 191, 164, 123, 175, 115, 189, 68, 131, 217, 181, 119, 61, 148, 62, 45, 136, 170, 136, 7, 157, 166, 226, 213, 82, 54, 77, 239, 13, 227, 211, 157, 174, 175, 239, 247, 156, 186, 153, 189, 9, 118, 223, 168, 211, 15, 253, 201, 221, 122, 156, 3, 53, 25, 129, 232, 56, 129, 214, 19, 50, 12, 103, 10, 224, 100, 155, 247, 1, 146, 141, 12, 151, 206, 189, 254, 127, 211, 140, 1, 91, 18, 242, 32, 204, 3, 19, 29, 116, 36, 227, 16, 27, 4, 246, 63, 76, 11, 178, 39, 60, 100, 139, 255, 132, 113, 48, 60, 44, 69, 212, 77, 198, 76, 147, 8, 110, 162, 108, 151, 146, 229, 73, 1, 180, 162, 191, 55, 187, 245, 91, 75, 169, 4, 65, 127, 40, 199, 209, 19, 233, 27, 155, 117, 244, 35, 88, 82, 89, 71, 251, 210, 38, 147, 54, 77, 110, 145, 141, 0, 62, 126, 34, 56, 72, 126, 54, 115, 217, 163, 214, 92, 120, 112, 49, 254, 200, 104, 132, 15, 72, 143, 202, 40, 212, 2, 175, 68, 10, 94, 26, 60, 75, 125, 191, 151, 126, 72, 95, 129, 244, 88, 100, 27, 224, 137, 199, 95, 207, 169, 154, 245, 71, 162, 14, 173, 14, 97, 131, 148, 133, 208, 159, 91, 39, 61, 200, 57, 78, 200, 62, 20, 160, 31, 242, 186, 55, 54, 27, 76, 171, 19, 108, 226, 47, 71, 247, 92, 89, 200, 204, 207, 116, 230, 156, 103, 70, 54, 234, 115, 17, 196, 248, 138, 173, 8, 223, 152, 26, 201, 56, 56, 58, 211, 63, 74, 73, 60, 253, 131, 100, 61, 94, 95, 146, 66, 107, 63, 94, 15, 118, 199, 52, 63, 73, 194, 191, 36, 239, 85, 87, 241, 230, 120, 204, 231, 185, 43, 131, 103, 237, 146, 101, 18, 248, 35, 18, 21, 19, 113, 242, 0, 161, 66, 233, 252, 79, 24, 173, 248, 51, 197, 95, 102, 52, 183, 0, 123, 129, 137, 151, 94, 24, 80, 142, 118, 104, 183, 132, 21, 205, 26, 110, 31, 233, 234, 181, 79, 33, 86, 136, 255, 229, 238, 177, 189, 92, 109, 144, 69, 159, 111, 77, 253, 185, 87, 167, 163, 184, 148, 136, 8, 115, 179, 48, 91, 29, 209, 253, 242, 179, 71, 196, 18, 20, 104, 94, 83, 11, 160, 84, 101, 190, 23, 215, 71, 185, 59, 204, 84, 207, 186, 221, 175, 174, 78, 115, 206, 101, 167, 186, 32, 30, 14, 4, 135, 228, 99, 200, 56, 97, 134, 177, 46, 8, 83, 184, 128, 168, 133, 141, 52, 40, 170, 204, 94, 246, 194, 48, 190, 106, 22, 113, 97, 90, 106, 120, 239, 15, 143, 46, 19, 158, 209, 118, 0, 121, 253, 179, 190, 65, 200, 197, 2, 211, 212, 51, 110, 155, 171, 103, 177, 121, 69, 199, 198, 220, 53, 184, 14, 88, 192, 52, 164, 157, 106, 127, 159, 6, 74, 167, 10, 223, 253, 89, 177, 105, 253, 51, 207, 127, 185, 166, 13, 208, 113, 12, 64, 19, 23, 56, 235, 77, 24, 232, 112, 124, 14, 159, 170, 128, 64, 149, 95, 75, 171, 27, 203, 188, 210, 103, 79, 219, 206, 198, 155, 53, 153, 216, 12, 36, 19, 125, 220, 55, 160, 192, 237, 7, 25, 1, 18, 105, 156, 232, 8, 95, 249, 124, 251, 111, 166, 150, 131, 200, 127, 192, 121, 176, 232, 219, 27, 251, 157, 127, 139, 187, 128, 223, 114, 245, 100, 15, 251, 79, 161, 11, 211, 123, 130, 197, 109, 206, 145, 222, 35, 90, 37, 109, 201, 52, 122, 241, 23, 59, 104, 11, 207, 197, 180, 95, 65, 29, 62, 14, 223, 12, 172, 160, 138, 14, 196, 193, 138, 54, 61, 2, 27, 230, 251, 127, 231, 106, 176, 191, 32, 10, 141, 13, 70, 172, 47, 249, 238, 103, 197, 231, 150, 77, 199, 229, 123, 106, 164, 172, 57, 77, 53, 38, 93, 223, 105, 98, 77, 85, 114, 60, 225, 144, 49, 162, 166, 148, 249, 168, 7, 147, 78, 31, 124, 96, 28, 60, 18, 227, 134, 60, 86, 55, 241, 230, 229, 251, 162, 99, 113, 144, 215, 64, 142, 24, 19, 203, 239, 91, 205, 8, 117, 18, 244, 23, 244, 239, 254, 152, 210, 135, 161, 24, 6, 107, 179, 150, 73, 171, 200, 171, 54, 48, 253, 181, 159, 69, 79, 81, 178, 48, 68, 245, 62, 63, 233, 140, 90, 242, 224, 165, 47, 100, 60, 162, 79, 80, 193, 9, 46, 129, 191, 136, 99, 208, 189, 1, 116, 60, 216, 3, 232, 110, 128, 166, 13, 82, 24, 8, 1, 230, 119, 149, 173, 131, 226, 36, 42, 157, 184, 133, 228, 110, 38, 160, 253, 38, 75, 120, 157, 153, 114, 70, 43, 137, 35, 38, 38, 184, 209, 153, 23, 198, 26, 119, 176, 223, 170, 70, 168, 211, 91, 30, 91, 97, 180, 120, 63, 224, 197, 246, 213, 62, 241, 68, 59, 173, 42, 255, 244, 57, 27, 252, 86, 189, 39, 61, 115, 15, 3, 177, 12, 91, 175, 4, 63, 51, 26, 45, 204, 178, 179, 66, 107, 219, 98, 129, 154, 244, 203, 101, 232, 220, 70, 176, 213, 34, 87, 18, 67, 239, 13, 41, 156, 239, 118, 98, 247, 233, 252, 42, 125, 172, 136, 97, 14, 26, 212, 84, 176, 233, 191, 131, 114, 9, 93, 105, 4, 135, 76, 103, 112, 0, 177, 248, 6, 95, 66, 113, 46, 72, 40, 10, 47, 12, 221, 185, 97, 234, 131, 222, 228, 182, 240, 217, 146, 22, 6, 101, 234, 158, 199, 198, 123, 4, 243, 181, 129, 62, 138, 128, 157, 206, 139, 17, 88, 128, 39, 185, 238, 160, 201, 17, 12, 112, 26, 42, 150, 225, 227, 22, 140, 105, 226, 75, 78, 107, 53, 132, 164, 3, 57, 49, 20, 153, 69, 108, 182, 150, 235, 172, 2, 3, 58, 74, 178, 128, 56, 83, 76, 18, 56, 133, 132, 126, 242, 5, 19, 132, 54, 197, 120, 197, 195, 0, 14, 197, 171, 207, 45, 172, 252, 32, 190, 132, 192, 65, 242, 154, 89, 63, 17, 186, 45, 183, 194, 192, 135, 132, 231, 12, 174, 89, 83, 171, 164, 31, 88, 62, 93, 84, 71, 26, 121, 0, 164, 165, 122, 138, 240, 232, 191, 127, 95, 189, 232, 125, 216, 226, 218, 139, 3, 244, 131, 223, 195, 22, 171, 120, 215, 92, 182, 22, 194, 236, 5, 25, 0, 248, 144, 2, 143, 175, 200, 198, 7, 90, 104, 31, 2, 207, 112, 3, 18, 167, 206, 87, 33, 196, 198, 88, 154, 127, 90, 19, 42, 172, 143, 92, 5, 106, 192, 240, 35, 161, 146, 224, 187, 85, 200, 100, 227, 26, 89, 177, 38, 133, 0, 194, 23, 112, 181, 133, 162, 174, 168, 26, 84, 123, 36, 204, 195, 218, 137, 46, 3, 48, 188, 248, 97, 239, 232, 51, 49, 105, 13, 208, 57, 204, 131, 142, 176, 214, 202, 28, 94, 8, 143, 181, 161, 219, 84, 60, 27, 245, 64, 186, 88, 123, 15, 23, 98, 80, 167, 197, 234, 8, 240, 49, 35, 3, 138, 59, 81, 21, 35, 233, 88, 116, 217, 165, 142, 3, 7, 177, 10, 126, 138, 250, 116, 83, 127, 176, 171, 227, 105, 151, 136, 158, 246, 145, 145, 210, 141, 195, 162, 21, 60, 238, 247, 64, 43, 104, 162, 11, 211, 18, 182, 246, 197, 70, 193, 122, 79, 25, 136, 232, 155, 231, 20, 232, 178, 140, 124, 2, 155, 214, 166, 111, 60, 63, 155, 214, 213, 89, 32, 140, 74, 143, 50, 21, 111, 240, 122, 249, 100, 225, 171, 138, 4, 214, 118, 74, 223, 90, 244, 65, 37, 233, 26, 197, 238, 227, 30, 241, 253, 93, 142, 178, 110, 35, 105, 109, 57, 52, 230, 142, 100, 134, 21, 242, 168, 247, 95, 14, 182, 96, 168, 202, 39, 62, 250, 126, 83, 232, 14, 38, 246, 153, 101, 11, 62, 13, 216, 135, 86, 56, 99, 201, 110, 4, 165, 19, 32, 95, 147, 100, 179, 72, 107, 254, 80, 23, 181, 134, 112, 178, 4, 254, 255, 104, 64, 134, 61, 17, 204, 41, 111, 64, 184, 188, 140, 147, 101, 189, 129, 124, 49, 196, 199, 111, 139, 176, 179, 222, 51, 116, 79, 37, 164, 58, 142, 79, 79, 168, 127, 95, 215, 240, 94, 93, 64, 234, 158, 115, 254, 242, 214, 162, 39, 149, 21, 161, 168, 41, 141, 102, 185, 251, 254, 80, 24, 142, 77, 120, 229, 161, 155, 200, 82, 183, 101, 208, 213, 80, 215, 3, 217, 170, 11, 143, 249, 113, 113, 82, 174, 85, 78, 209, 0, 201, 239, 107, 157, 241, 189, 166, 105, 180, 216, 191, 146, 117, 70, 208, 136, 204, 219, 125, 238, 8, 167, 222, 212, 253, 30, 116, 172, 6, 200, 12, 184, 208, 1, 250, 220, 42, 146, 232, 179, 109, 60, 177, 162, 185, 29, 249, 189, 208, 134, 85, 135, 23, 246, 45, 241, 70, 79, 18, 89, 232, 41, 148, 198, 242, 224, 221, 53, 251, 11, 36, 83, 197, 221, 119, 206, 88, 68, 12, 212, 99, 84, 4, 202, 83, 194, 186, 76, 107, 61, 72, 194, 241, 146, 247, 102, 56, 222, 251, 101, 119, 160, 81, 143, 101, 33, 231, 126, 80, 180, 108, 44, 248, 210, 168, 230, 104, 220, 126, 110, 128, 144, 252, 244, 247, 204, 110, 165, 32, 62, 64, 226, 167, 69, 211, 215, 91, 3, 60, 70, 211, 115, 122, 196, 96, 122, 254, 159, 38, 30, 191, 40, 140, 50, 86, 230, 125, 109, 190, 236, 228, 155, 22, 99, 152, 16, 46, 245, 252, 217, 25, 12, 242, 227, 198, 122, 232, 191, 213, 142, 255, 97, 210, 185, 72, 209, 133, 4, 180, 205, 146, 41, 144, 5, 147, 195, 84, 23, 153, 185, 236, 211, 61, 216, 142, 167, 140, 139, 157, 221, 4, 224, 43, 201, 198, 3, 206, 194, 251, 165, 219, 100, 74, 182, 112, 76, 40, 63, 40, 51, 126, 76, 105, 221, 188, 160, 134, 25, 170, 117, 19, 99, 56, 69, 57, 80, 100, 204, 183, 120, 208, 115, 214, 46, 180, 148, 205, 185, 161, 69, 235, 136, 149, 227, 91, 127, 146, 211, 252, 229, 82, 193, 117, 121, 198, 216, 46, 193, 98, 190, 194, 100, 137, 166, 232, 111, 170, 175, 13, 240, 163, 100, 52, 150, 188, 218, 107, 122, 131, 206, 165, 237, 41, 193, 67, 3, 218, 18, 244, 4, 93, 199, 94, 115, 175, 68, 20, 150, 166, 180, 252, 171, 219, 194, 240, 247, 25, 163, 179, 52, 62, 239, 255, 43, 115, 33, 152, 100, 154, 204, 80, 55, 100, 114, 163, 138, 18, 148, 52, 125, 5, 48, 138, 92, 225, 96, 34, 126, 210, 178, 209, 31, 146, 80, 1, 92, 179, 115, 18, 150, 56, 135, 21, 119, 193, 66, 208, 18, 167, 194, 235, 184, 77, 227, 152, 126, 195, 207, 160, 98, 45, 246, 252, 30, 76, 0, 20, 214, 35, 107, 1, 52, 215, 171, 22, 115, 215, 198, 129, 154, 233, 118, 15, 243, 185, 129, 37, 217, 201, 51, 15, 52, 159, 173, 26, 143, 6, 230, 210, 137, 8, 172, 2, 249, 212, 94, 143, 217, 70, 253, 37, 155, 164, 251, 243, 249, 175, 23, 227, 78, 35, 186, 53, 229, 142, 170, 159, 10, 209, 154, 162, 50, 40, 26, 136, 160, 249, 173, 30, 138, 14, 196, 127, 221, 243, 228, 72, 191, 13, 217, 255, 68, 38, 98, 102, 46, 134, 151, 62, 42, 78, 82, 84, 1, 255, 80, 174, 169, 80, 183, 213, 67, 108, 22, 112, 150, 144, 5, 224, 218, 88, 58, 187, 205, 12, 100, 131, 125, 177, 132, 51, 25, 15, 113, 33, 49, 4, 130, 217, 174, 4, 161, 162, 119, 244, 120, 66, 27, 207, 97, 254, 172, 180, 238, 12, 3, 204, 129, 220, 156, 155, 184, 122, 113, 219, 255, 199, 107, 114, 127, 216, 206, 103, 45, 96, 215, 231, 152, 200, 167, 33, 227, 251, 61, 197, 86, 36, 210, 100, 202, 140, 130, 45, 202, 153, 147, 226, 139, 117, 25, 100, 60, 100, 4, 247, 196, 178, 202, 208, 2, 116, 175, 187, 226, 147, 88, 112, 190, 182, 218, 0, 172, 211, 230, 192, 196, 10, 93, 224, 91, 189, 138, 147, 249, 144, 188, 39, 242, 240, 27, 30, 149, 44, 89, 32, 159, 133, 158, 118, 238, 197, 203, 237, 47, 163, 166, 42, 87, 33, 54, 86, 59, 185, 193, 135, 40, 142, 161, 186, 98, 17, 111, 142, 203, 75, 195, 100, 26, 205, 210, 165, 50, 143, 107, 109, 248, 34, 57, 191, 178, 246, 247, 127, 17, 28, 37, 230, 107, 216, 23, 55, 84, 101, 134, 151, 108, 65, 245, 168, 122, 65, 80, 6, 37, 210, 116, 103, 25, 218, 204, 1, 170, 12, 135, 147, 27, 76, 1, 132, 116, 163, 148, 23, 13, 165, 27, 221, 188, 132, 0, 139, 215, 73, 234, 6, 46, 124, 182, 87, 240, 243, 78, 195, 67, 106, 115, 4, 123, 52, 25, 32, 178, 80, 200, 40, 111, 158, 227, 105, 243, 222, 130, 134, 23, 97, 105, 59, 222, 122, 64, 13, 154, 114, 60, 106, 74, 208, 55, 233, 98, 155, 158, 165, 179, 74, 155, 142, 86, 39, 197, 196, 96, 213, 61, 154, 161, 207, 241, 237, 153, 201, 239, 132, 194, 1, 97, 223, 228, 246, 154, 68, 20, 243, 126, 59, 111, 172, 154, 234, 118, 83, 180, 162, 155, 135, 57, 169, 64, 133, 154, 70, 212, 231, 246, 55, 131, 41, 245, 157, 78, 74, 46, 34, 149, 103, 210, 65, 14, 241, 208, 18, 213, 169, 189, 210, 236, 20, 135, 50, 150, 253, 205, 118, 232, 79, 36, 168, 77, 184, 148, 9, 216, 166, 42, 249, 93, 165, 222, 152, 40, 34, 223, 180, 1, 189, 114, 200, 151, 135, 72, 167, 14, 112, 235, 75, 77, 175, 195, 170, 93, 37, 100, 183, 243, 246, 163, 74, 83, 159, 6, 189, 134, 10, 88, 60, 168, 83, 199, 179, 70, 204, 114, 232, 114, 78, 100, 225, 140, 7, 14, 90, 168, 244, 130, 229, 54, 124, 91, 164, 2, 124, 159, 116, 5, 197, 64, 22, 173, 193, 227, 84, 167, 69, 185, 26, 158, 57, 152, 68, 214, 128, 41, 5, 59, 31, 12, 59, 138, 195, 151, 94, 211, 43, 242, 110, 250, 216, 24, 237, 121, 150, 196, 143, 97, 114, 176, 203, 96, 134, 142, 72, 87, 217, 9, 35, 53, 164, 150, 171, 50, 166, 205, 235, 111, 43, 24, 14, 119, 141, 160, 141, 46, 166, 66, 86, 202, 21, 161, 31, 14, 234, 203, 160, 11, 21, 130, 219, 127, 81, 86, 78, 190, 92, 216, 135, 21, 137, 239, 210, 233, 26, 221, 33, 165, 100, 38, 193, 71, 122, 96, 206, 65, 202, 121, 18, 179, 206, 243, 215, 96, 106, 124, 90, 0, 243, 201, 63, 125, 6, 1, 245, 250, 119, 16, 207, 50, 191, 112, 5, 111, 128, 135, 209, 104, 25, 79, 51, 115, 96, 223, 205, 169, 116, 84, 104, 168, 9, 212, 251, 168, 248, 51, 219, 150, 50, 104, 38, 151, 188, 67, 7, 100, 169, 90, 216, 195, 220, 197, 101, 75, 195, 51, 252, 44, 23, 137, 228, 172, 213, 205, 93, 136, 222, 100, 9, 228, 10, 123, 208, 222, 131, 151, 179, 6, 70, 132, 121, 49, 188, 185, 248, 246, 96, 187, 204, 204, 247, 253, 213, 176, 36, 181, 4, 15, 114, 63, 68, 222, 89, 212, 66, 226, 166, 126, 253, 174, 41, 234, 177, 194, 35, 57, 38, 178, 92, 207, 98, 17, 148, 103, 218, 237, 61, 85, 208, 27, 155, 65, 31, 172, 167, 175, 81, 22, 188, 40, 120, 52, 26, 28, 203, 112, 24, 38, 89, 217, 136, 42, 123, 95, 130, 169, 255, 178, 168, 80, 197, 115, 227, 55, 126, 206, 58, 110, 184, 206, 102, 2, 3, 68, 75, 45, 20, 9, 150, 49, 152, 119, 118, 114, 75, 149, 154, 48, 104, 198, 133, 34, 192, 232, 24, 35, 185, 121, 51, 148, 212, 53, 144, 74, 84, 217, 90, 153, 217, 236, 74, 217, 194, 192, 155, 147, 80, 221, 74, 110, 197, 206, 126, 41, 249, 102, 232, 22, 14, 216, 121, 83, 25, 236, 161, 209, 46, 35, 186, 145, 166, 43, 139, 238, 157, 144, 144, 157, 104, 158, 115, 174, 148, 151, 90, 100, 2, 121, 43, 23, 5, 211, 119, 150, 71, 116, 85, 52, 9, 6, 86, 32, 18, 73, 163, 23, 193, 222, 223, 139, 77, 149, 107, 229, 45, 154, 176, 69, 6, 164, 174, 155, 20, 222, 200, 187, 235, 218, 4, 189, 119, 24, 49, 205, 44, 206, 86, 53, 58, 1, 9, 41, 106, 154, 61, 9, 143, 133, 148, 171, 1, 152, 146, 44, 151, 160, 117, 217, 21, 30, 63, 204, 78, 206, 158, 29, 69, 75, 67, 167, 169, 23, 105, 148, 68, 207, 17, 29, 195, 28, 74, 17, 82, 139, 50, 8, 115, 223, 129, 119, 103, 73, 14, 19, 7, 27, 44, 187, 158, 198, 5, 48, 250, 125, 108, 132, 62, 67, 133, 154, 144, 168, 107, 232, 122, 159, 116, 230, 231, 234, 59, 156, 86, 53, 125, 134, 121, 220, 90, 104, 114, 88, 238, 70, 203, 137, 25, 128, 196, 137, 59, 203, 252, 246, 44, 168, 217, 43, 233, 62, 11, 77, 44, 104, 192, 100, 93, 229, 78, 248, 176, 218, 159, 200, 100, 2, 72, 13, 114, 70, 178, 116, 218, 36, 108, 8, 183, 33, 152, 20, 235, 94, 217, 72, 124, 128, 225, 145, 253, 176, 6, 97, 200, 207, 244, 189, 110, 192, 124, 179, 116, 57, 122, 130, 18, 4, 88, 220, 205, 191, 214, 139, 178, 32, 127, 205, 168, 184, 178, 222, 58, 187, 26, 136, 153, 110, 154, 78, 9, 236, 233, 117, 35, 25, 84, 85, 28, 153, 94, 53, 198, 110, 114, 120, 122, 156, 165, 31, 49, 67, 171, 12, 163, 97, 11, 241, 107, 233, 36, 177, 245, 23, 210, 199, 215, 61, 173, 23, 141, 127, 94, 106, 19, 29, 31, 117, 87, 204, 91, 243, 254, 99, 214, 0, 1, 31, 108, 206, 30, 224, 64, 28, 186, 209, 239, 110, 101, 36, 99, 167, 131, 39, 238, 12, 63, 85, 37, 33, 31, 129, 117, 137, 121, 0, 243, 52, 209, 251, 38, 2, 157, 223, 160, 29, 100, 42, 23, 247, 57, 114, 18, 56, 44, 213, 119, 230, 204, 225, 209, 168, 9, 68, 34, 196, 235, 176, 162, 1, 254, 152, 227, 21, 96, 71, 245, 181, 139, 118, 201, 208, 246, 23, 53, 60, 182, 10, 3, 233, 75, 97, 215, 216, 80, 229, 95, 133, 174, 125, 249, 144, 116, 130, 87, 124, 35, 89, 225, 209, 181, 183, 97, 194, 74, 140, 186, 89, 151, 220, 28, 248, 31, 170, 240, 183, 239, 249, 168, 254, 136, 214, 55, 246, 101, 95, 185, 19, 10, 4, 83, 199, 199, 167, 31, 167, 201, 201, 220, 27, 32, 63, 193, 194, 222, 237, 7, 134, 216, 215, 69, 131, 143, 12, 34, 81, 187, 68, 128, 69, 9, 87, 197, 26, 151, 190, 25, 92, 201, 93, 44, 110, 36, 1, 247, 137, 34, 61, 131, 25, 90, 93, 117, 154, 64, 176, 202, 74, 190, 158, 202, 246, 245, 40, 46, 137, 15, 90, 19, 176, 216, 109, 194, 33, 68, 69, 44, 248, 185, 77, 97, 24, 247, 19, 222, 11, 15, 230, 127, 106, 12, 46, 111, 191, 70, 82, 207, 240, 122, 182, 20, 226, 110, 37, 246, 242, 6, 94, 62, 142, 75, 186, 122, 149, 231, 192, 100, 128, 115, 1, 35, 242, 175, 100, 157, 103, 124, 252, 95, 168, 40, 32, 151, 33, 42, 210, 193, 180, 6, 11, 117, 194, 213, 2, 177, 71, 186, 173, 63, 95, 15, 124, 93, 213, 122, 216, 63, 238, 224, 179, 163, 112, 255, 99, 118, 13, 85, 172, 187, 105, 204, 13, 116, 99, 148, 145, 97, 40, 34, 4, 137, 254, 21, 233, 60, 152, 189, 222, 209, 94, 33, 62, 29, 242, 76, 102, 110, 222, 47, 173, 95, 244, 136, 93, 93, 104, 160, 229, 189, 103, 254, 100, 200, 163, 193, 238, 79, 218, 188, 38, 168, 10, 72, 244, 84, 93, 92, 204, 42, 184, 148, 130, 32, 22, 92, 225, 126, 32, 13, 135, 135, 74, 128, 183, 78, 25, 243, 83, 214, 43, 191, 14, 127, 146, 221, 25, 252, 2, 203, 200, 35, 9, 163, 81, 15, 101, 146, 151, 57, 132, 172, 193, 75, 137, 95, 66, 132, 246, 73, 204, 188, 252, 245, 250, 151, 36, 144, 123, 223, 236, 151, 123, 203, 93, 180, 153, 163, 214, 246, 219, 200, 238, 3, 50, 224, 85, 58, 170, 197, 175, 49, 115, 67, 87, 92, 45, 53, 1, 117, 250, 174, 250, 4, 234, 26, 159, 43, 167, 30, 228, 4, 54, 247, 189, 82, 189, 41, 110, 154, 28, 157, 250, 39, 197, 220, 245, 243, 137, 97, 209, 159, 63, 182, 48, 105, 206, 191, 201, 9, 4, 232, 7, 216, 145, 16, 18, 207, 184, 22, 219, 200, 64, 41, 24, 67, 177, 194, 53, 67, 3, 117, 44, 88, 56, 225, 161, 189, 75, 235, 205, 84, 129, 254, 176, 165, 148, 250, 127, 96, 174, 16, 98, 123, 106, 213, 112, 84, 60, 98, 165, 252, 183, 108, 58, 237, 86, 169, 167, 96, 10, 184, 207, 96, 238, 89, 192, 231, 161, 71, 39, 206, 45, 214, 111, 255, 193, 54, 78, 50, 54, 58, 243, 221, 154, 36, 3, 44, 159, 227, 65, 237, 195, 218, 218, 37, 88, 135, 49, 56, 187, 200, 9, 251, 162, 95, 97, 149, 66, 69, 8, 8, 101, 242, 195, 10, 120, 182, 97, 11, 241, 17, 30, 55, 232, 202, 48, 62, 91, 134, 185, 67, 92, 68, 128, 41, 17, 231, 56, 54, 171, 238, 156, 135, 52, 159, 118, 253, 141, 87, 247, 160, 153, 252, 9, 136, 40, 39, 31, 206, 120, 85, 58, 225, 124, 241, 101, 8, 152, 31, 51, 246, 29, 240, 31, 118, 76, 207, 177, 36, 185, 46, 224, 214, 126, 228, 60, 188, 54, 255, 116, 140, 92, 168, 3, 57, 94, 208, 120, 191, 35, 168, 66, 100, 1, 25, 25, 17, 2, 153, 218, 162, 172, 183, 99, 238, 139, 113, 60, 252, 170, 99, 241, 34, 160, 8, 105, 225, 170, 60, 91, 74, 141, 79, 245, 197, 205, 92, 136, 52, 110, 42, 141, 108, 246, 24, 176, 212, 248, 63, 214, 183, 9, 57, 127, 144, 137, 41, 134, 40, 173, 203, 4, 205, 42, 136, 228, 82, 111, 96, 102, 202, 255, 240, 151, 18, 119, 117, 254, 4, 207, 36, 116, 103, 3, 129, 26, 93, 11, 170, 220, 136, 109, 126, 196, 115, 180, 61, 122, 45, 201, 127, 205, 94, 174, 159, 148, 116, 125, 95, 190, 101, 215, 214, 119, 97, 62, 239, 245, 203, 129, 223, 40, 51, 91, 8, 196, 25, 55, 240, 75, 158, 143, 189, 140, 236, 183, 31, 105, 87, 49, 124, 20, 146, 147, 7, 239, 151, 153, 236, 254, 242, 228, 47, 166, 177, 227, 246, 152, 81, 19, 249, 116, 134, 254, 91, 203, 220, 220, 203, 110, 254, 156, 89, 214, 122, 138, 183, 72, 146, 217, 3, 0, 209, 221, 219, 59, 196, 146, 217, 154, 164, 17, 39, 156, 56, 201, 229, 70, 50, 65, 106, 174, 61, 176, 27, 95, 65, 145, 195, 63, 184, 18, 121, 153, 57, 112, 246, 92, 119, 78, 47, 186, 196, 145, 15, 115, 182, 112, 197, 111, 125, 61, 206, 102, 2, 1, 200, 139, 234, 163, 118, 136, 9, 122, 217, 115, 73, 95, 69, 95, 172, 226, 80, 205, 239, 241, 184, 218, 241, 113, 182, 86, 154, 243, 172, 235, 122, 238, 232, 17, 57, 27, 127, 170, 238, 77, 154, 48, 208, 100, 123, 249, 195, 22, 171, 171, 180, 245, 151, 199, 144, 212, 114, 106, 111, 114, 102, 94, 106, 189, 81, 239, 81, 193, 132, 108, 199, 198, 126, 186, 25, 135, 106, 199, 6, 183, 126, 169, 105, 29, 65, 211, 210, 146, 218, 218, 148, 155, 170, 231, 143, 67, 142, 245, 190, 23, 34, 240, 195, 220, 172, 173, 38, 53, 48, 12, 76, 73, 115, 215, 181, 106, 63, 238, 112, 165, 106, 237, 83, 187, 190, 177, 255, 98, 134, 18, 238, 155, 227, 12, 92, 126, 201, 75, 26, 212, 117, 51, 150, 102, 2, 234, 96, 6, 200, 222, 172, 176, 120, 25, 205, 81, 230, 35, 19, 122, 234, 226, 95, 60, 10, 213, 27, 191, 70, 76, 178, 184, 161, 141, 118, 245, 91, 227, 153, 97, 193, 173, 54, 212, 238, 132, 55, 139, 225, 87, 87, 22, 5, 242, 96, 155, 108, 50, 51, 158, 250, 104, 248, 25, 25, 241, 228, 194, 24, 213, 70, 29, 144, 108, 178, 187, 175, 8, 227, 116, 11, 31, 212, 184, 246, 79, 13, 69, 6, 85, 152, 175, 188, 171, 159, 82, 62, 115, 77, 161, 47, 74, 186, 197, 205, 104, 15, 6, 45, 147, 102, 243, 172, 151, 201, 203, 51, 81, 147, 188, 240, 193, 65, 28, 123, 104, 90, 83, 218, 179, 93, 36, 235, 157, 145, 193, 122, 73, 155, 80, 120, 225, 213, 142, 74, 69, 179, 102, 99, 148, 23, 247, 152, 104, 168, 221, 218, 179, 153, 205, 161, 225, 72, 227, 44, 77, 80, 196, 116, 73, 141, 124, 163, 23, 73, 23, 164, 214, 108, 189, 253, 232, 137, 159, 238, 60, 37, 36, 163, 77, 12, 210, 136, 147, 129, 43, 22, 210, 102, 220, 192, 124, 189, 67, 188, 7, 61, 6, 84, 1, 55, 188, 68, 192, 87, 186, 187, 102, 87, 65, 29, 211, 116, 230, 181, 19, 187, 87, 24, 126, 77, 186, 127, 173, 255, 151, 244, 40, 213, 225, 79, 249, 23, 62, 110, 166, 215, 233, 241, 171, 35, 47, 47, 196, 38, 10, 220, 22, 168, 195, 165, 229, 215, 125, 48, 192, 232, 13, 118, 67, 170, 160, 217, 232, 214, 253, 86, 141, 60, 107, 175, 246, 178, 254, 99, 170, 99, 143, 214, 224, 246, 246, 232, 84, 227, 76, 113, 150, 107, 167, 40, 208, 8, 77, 114, 55, 58, 244, 65, 57, 33, 216, 20, 35, 30, 12, 69, 212, 211, 238, 166, 150, 126, 149, 36, 180, 244, 99, 38, 241, 11, 97, 213, 253, 150, 42, 245, 20, 255, 73, 131, 249, 67, 149, 57, 40, 161, 132, 21, 187, 189, 246, 197, 62, 11, 183, 163, 145, 105, 232, 59, 116, 211, 221, 2, 37, 178, 49, 63, 154, 132, 212, 10, 99, 250, 226, 144, 95, 193, 84, 117, 52, 54, 163, 154, 233, 2, 18, 142, 74, 141, 61, 211, 130, 175, 51, 69, 246, 147, 189, 86, 135, 195, 19, 130, 81, 138, 141, 218, 9, 235, 182, 109, 152, 93, 31, 172, 110, 173, 93, 251, 65, 147, 57, 200, 240, 90, 168, 183, 91, 151, 188, 93, 104, 223, 124, 210, 83, 164, 249, 37, 180, 215, 222, 154, 123, 40, 56, 137, 170, 150, 2, 78, 23, 226, 101, 72, 156, 168, 139, 174, 131, 84, 95, 42, 95, 85, 118, 224, 226, 172, 239, 232, 242, 182, 205, 52, 235, 204, 40, 19, 57, 82, 99, 21, 81, 160, 164, 116, 200, 69, 77, 32, 76, 29, 33, 58, 120, 40, 247, 114, 237, 247, 170, 50, 18, 13, 208, 247, 222, 85, 245, 41, 146, 94, 189, 188, 29, 186, 181, 20, 186, 33, 19, 127, 196, 136, 117, 15, 79, 209, 211, 26, 131, 19, 46, 20, 117, 106, 0, 11, 246, 238, 50, 5, 65, 71, 245, 99, 170, 244, 108, 3, 149, 237, 188, 12, 96, 18, 135, 251, 141, 254, 56, 57, 70, 21, 158, 151, 205, 118, 106, 222, 82, 20, 39, 132, 164, 74, 181, 231, 183, 222, 58, 33, 66, 181, 175, 115, 149, 24, 0, 8, 252, 245, 122, 120, 172, 64, 96, 45, 70, 194, 194, 138, 74, 43, 146, 223, 153, 90, 22, 96, 241, 48, 107, 205, 219, 115, 142, 193, 70, 161, 52, 222, 146, 254, 11, 237, 43, 72, 229, 151, 167, 94, 241, 104, 94, 249, 213, 173, 211, 194, 159, 237, 78, 191, 236, 19, 140, 227, 174, 119, 170, 58, 86, 230, 44, 7, 48, 85, 229, 156, 70, 62, 203, 86, 27, 133, 89, 178, 170, 22, 48, 230, 154, 234, 165, 140, 96, 158, 242, 179, 72, 171, 159, 137, 69, 220, 65, 94, 237, 131, 156, 165, 29, 228, 234, 32, 208, 173, 74, 132, 77, 236, 127, 239, 26, 195, 30, 205, 214, 224, 19, 105, 209, 61, 187, 175, 126, 204, 39, 60, 32, 91, 80, 192, 60, 73, 231, 27, 16, 84, 79, 104, 3, 185, 85, 234, 234, 227, 32, 220, 151, 113, 234, 6, 245, 12, 110, 149, 25, 169, 238, 26, 234, 94, 121, 168, 44, 166, 109, 96, 208, 120, 21, 199, 43, 4, 66, 42, 220, 169, 235, 182, 60, 43, 229, 119, 226, 210, 200, 49, 161, 88, 252, 82, 6, 137, 224, 214, 17, 83, 189, 151, 251, 21, 79, 120, 54, 233, 56, 103, 148, 26, 171, 93, 46, 115, 161, 17, 76, 74, 48, 159, 210, 172, 122, 83, 79, 93, 73, 7, 82, 190, 207, 99, 110, 201, 173, 34, 243, 64, 243, 171, 48, 41, 51, 148, 184, 159, 63, 105, 115, 67, 240, 106, 218, 208, 110, 242, 197, 78, 155, 163, 213, 116, 109, 15, 139, 59, 166, 117, 188, 211, 227, 178, 62, 8, 120, 7, 223, 155, 27, 83, 158, 85, 57, 142, 40, 240, 72, 65, 248, 201, 80, 230, 156, 206, 236, 96, 197, 251, 226, 126, 176, 151, 164, 139, 100, 242, 117, 98, 84, 240, 15, 151, 138, 162, 171, 147, 12, 83, 163, 252, 40, 147, 118, 191, 124, 176, 231, 23, 174, 135, 187, 135, 123, 17, 230, 1, 78, 145, 89, 30, 112, 238, 244, 104, 242, 205, 80, 174, 76, 95, 115, 10, 52, 30, 167, 175, 216, 17, 124, 175, 192, 136, 117, 174, 84, 35, 20, 166, 251, 218, 90, 2, 172, 75, 125, 81, 184, 95, 46, 59, 176, 202, 204, 63, 132, 54, 7, 28, 195, 121, 174, 10, 80, 247, 207, 244, 117, 132, 129, 207, 178, 108, 129, 155, 36, 250, 173, 139, 62, 95, 105, 227, 169, 203, 157, 214, 114, 236, 90, 218, 168, 151, 242, 14, 150, 187, 1, 107, 109, 208, 55, 84, 144, 39, 82, 173, 108, 179, 97, 113, 229, 115, 54, 252, 236, 109, 106, 199, 103, 75, 215, 92, 38, 179, 192, 35, 144, 46, 197, 24, 95, 80, 164, 145, 220, 88, 131, 113, 96, 185, 184, 220, 50, 113, 212, 11, 33, 155, 73, 199, 108, 196, 31, 249, 235, 179, 60, 227, 148, 180, 200, 86, 13, 180, 66, 57, 77, 191, 184, 59, 218, 110, 17, 208, 10, 174, 68, 234, 236, 145, 208, 55, 98, 38, 73, 11, 37, 145, 226, 98, 185, 14, 31, 46, 108, 6, 205, 134, 140, 205, 229, 248, 211, 131, 105, 124, 76, 253, 238, 250, 126, 50, 250, 84, 26, 184, 102, 183, 81, 156, 58, 56, 172, 0, 20, 26, 6, 218, 90, 198, 160, 137, 106, 75, 208, 189, 57, 167, 179, 114, 4, 48, 216, 180, 91, 238, 26, 204, 20, 128, 98, 33, 118, 48, 115, 223, 235, 97, 152, 233, 11, 176, 24, 78, 137, 59, 140, 77, 146, 196, 91, 244, 3, 62, 70, 194, 119, 188, 132, 204, 77, 233, 98, 89, 103, 134, 107, 65, 24, 250, 87, 77, 203, 249, 107, 102, 123, 118, 110, 202, 231, 153, 97, 49, 192, 145, 203, 125, 89, 12, 32, 33, 183, 154, 43, 200, 158, 215, 220, 199, 250, 118, 95, 229, 44, 191, 14, 60, 136, 34, 15, 39, 230, 245, 76, 156, 0, 65, 189, 222, 216, 22, 116, 248, 89, 248, 19, 184, 172, 230, 168, 165, 164, 242, 46, 136, 126, 116, 174, 125, 88, 33, 129, 112, 159, 67, 92, 31, 148, 115, 193, 237, 34, 149, 236, 106, 134, 164, 164, 86, 91, 103, 165, 169, 68, 82, 65, 242, 218, 135, 178, 46, 97, 176, 171, 231, 80, 104, 37, 46, 55, 32, 135, 208, 34, 95, 135, 139, 7, 53, 11, 21, 118, 98, 126, 214, 28, 108, 7, 55, 140, 70, 250, 126, 41, 50, 64, 117, 156, 221, 139, 90, 251, 136, 119, 98, 201, 75, 72, 213, 217, 205, 87], - [136, 141, 104, 239, 159, 241, 78, 197, 217, 195, 122, 87, 58, 124, 69, 202, 57, 87, 80, 232, 30, 102, 250, 8, 223, 69, 31, 207, 221, 77, 233, 220, 98, 139, 90, 116, 250, 72, 102, 130, 145, 146, 155, 165, 194, 0, 210, 123, 5, 22, 30, 216, 136, 13, 63, 217, 27, 166, 47, 91, 179, 44, 176, 208, 176, 1, 57, 122, 115, 97, 175, 30, 36, 158, 159, 33, 24, 154, 58, 250, 54, 117, 70, 10, 75, 162, 102, 129, 60, 179, 226, 36, 107, 123, 31, 1, 57, 13, 83, 51, 58, 2, 142, 249, 19, 205, 92, 17, 174, 140, 117, 113, 19, 132, 156, 238, 148, 209, 173, 125, 203, 130, 27, 186, 16, 11, 56, 71, 214, 208, 92, 27, 179, 219, 130, 188, 96, 138, 31, 133, 6, 59, 147, 12, 255, 184, 106, 61, 40, 245, 116, 83, 59, 139, 45, 191, 79, 55, 249, 5, 114, 192, 41, 71, 43, 216, 159, 85, 0, 158, 165, 67, 155, 120, 176, 46, 66, 234, 241, 196, 220, 235, 24, 167, 208, 132, 133, 183, 132, 42, 231, 186, 63, 238, 245, 231, 219, 146, 44, 217, 89, 152, 64, 5, 237, 63, 35, 66, 54, 188, 24, 151, 218, 186, 210, 108, 104, 178, 255, 88, 125, 135, 56, 103, 12, 176, 219, 190, 88, 214, 214, 33, 1, 236, 246, 123, 249, 190, 180, 144, 186, 27, 172, 155, 93, 39, 158, 25, 127, 29, 140, 63, 177, 46, 140, 76, 203, 184, 252, 11, 116, 84, 238, 248, 242, 236, 246, 135, 121, 4, 218, 247, 158, 110, 33, 220, 40, 9, 190, 32, 89, 232, 82, 46, 113, 76, 38, 49, 186, 40, 70, 247, 236, 27, 161, 12, 23, 192, 249, 129, 218, 54, 210, 148, 155, 73, 241, 61, 229, 29, 64, 82, 102, 201, 127, 72, 213, 221, 186, 99, 123, 134, 232, 123, 233, 136, 125, 113, 68, 178, 142, 91, 119, 77, 117, 187, 184, 118, 2, 217, 172, 208, 141, 244, 86, 120, 159, 50, 83, 139, 200, 143, 240, 127, 131, 50, 99, 21, 86, 186, 137, 40, 210, 239, 36, 185, 38, 112, 210, 112, 173, 145, 177, 241, 63, 241, 192, 61, 15, 159, 65, 180, 225, 183, 9, 31, 47, 81, 78, 215, 2, 198, 44, 216, 42, 234, 237, 254, 125, 113, 163, 210, 66, 216, 103, 146, 128, 1, 232, 9, 27, 13, 160, 212, 119, 64, 183, 81, 198, 28, 113, 155, 77, 20, 104, 169, 250, 138, 17, 248, 40, 124, 65, 94, 106, 208, 76, 67, 56, 255, 75, 128, 14, 57, 126, 220, 206, 160, 191, 129, 177, 33, 12, 216, 45, 156, 191, 52, 16, 67, 178, 131, 83, 176, 121, 147, 28, 51, 190, 201, 7, 217, 71, 234, 92, 140, 26, 158, 142, 11, 58, 79, 97, 111, 232, 191, 211, 121, 127, 249, 201, 154, 177, 143, 225, 86, 231, 178, 78, 176, 252, 140, 58, 175, 33, 77, 213, 228, 62, 186, 196, 86, 39, 233, 181, 132, 141, 176, 182, 133, 121, 179, 165, 176, 250, 175, 20, 6, 249, 49, 95, 225, 14, 94, 128, 114, 78, 117, 87, 31, 19, 111, 241, 76, 207, 183, 115, 64, 50, 71, 154, 81, 208, 118, 223, 21, 203, 204, 5, 84, 157, 3, 234, 137, 22, 129, 122, 185, 201, 155, 153, 125, 70, 93, 68, 190, 224, 75, 22, 179, 198, 154, 202, 226, 254, 105, 176, 66, 236, 11, 249, 5, 215, 192, 174, 189, 130, 72, 204, 201, 11, 108, 73, 77, 53, 69, 244, 203, 154, 75, 30, 245, 247, 44, 223, 89, 255, 65, 174, 63, 212, 114, 206, 228, 29, 47, 178, 57, 214, 184, 203, 209, 76, 152, 254, 92, 30, 132, 14, 189, 119, 164, 162, 143, 129, 108, 129, 49, 234, 218, 125, 53, 177, 206, 218, 186, 105, 3, 116, 96, 201, 72, 74, 182, 124, 251, 61, 223, 98, 118, 60, 95, 150, 86, 239, 43, 75, 36, 209, 58, 29, 161, 55, 149, 121, 21, 99, 114, 221, 83, 68, 144, 135, 137, 208, 8, 171, 185, 142, 234, 248, 139, 137, 54, 168, 39, 45, 96, 239, 2, 84, 168, 244, 113, 116, 14, 206, 201, 241, 12, 86, 189, 18, 199, 171, 86, 89, 110, 40, 82, 152, 166, 15, 73, 98, 62, 224, 61, 85, 119, 24, 214, 168, 4, 80, 203, 239, 56, 223, 159, 186, 181, 189, 124, 234, 119, 192, 213, 74, 76, 106, 186, 103, 178, 253, 206, 33, 110, 11, 133, 84, 148, 112, 219, 252, 232, 40, 100, 136, 228, 119, 70, 27, 153, 200, 131, 35, 156, 164, 105, 218, 132, 150, 80, 138, 66, 228, 194, 19, 168, 47, 248, 162, 240, 145, 140, 21, 199, 129, 248, 97, 227, 50, 154, 33, 46, 215, 22, 12, 138, 161, 91, 192, 62, 96, 65, 81, 219, 19, 189, 110, 48, 28, 118, 186, 39, 218, 132, 60, 78, 142, 147, 39, 174, 34, 222, 176, 236, 176, 234, 220, 196, 146, 139, 255, 238, 133, 14, 207, 235, 92, 86, 28, 186, 97, 232, 9, 220, 147, 205, 236, 143, 214, 86, 107, 21, 193, 46, 32, 195, 7, 236, 227, 32, 204, 122, 53, 84, 126, 112, 96, 185, 134, 88, 171, 213, 59, 214, 125, 31, 4, 229, 243, 76, 31, 111, 135, 208, 210, 106, 117, 142, 92, 18, 110, 98, 101, 198, 212, 162, 119, 87, 11, 101, 221, 179, 152, 109, 63, 251, 147, 179, 160, 142, 49, 24, 244, 69, 62, 126, 174, 101, 20, 154, 36, 48, 13, 183, 234, 33, 21, 245, 211, 154, 215, 76, 108, 46, 131, 51, 2, 178, 232, 107, 77, 151, 147, 125, 24, 108, 201, 128, 146, 89, 134, 37, 81, 123, 119, 179, 192, 216, 154, 127, 53, 162, 62, 102, 206, 150, 177, 9, 19, 210, 225, 231, 219, 182, 57, 54, 145, 20, 181, 98, 56, 130, 245, 36, 21, 28, 157, 96, 31, 173, 58, 129, 35, 236, 197, 88, 198, 251, 204, 72, 212, 255, 169, 171, 117, 200, 30, 180, 61, 239, 116, 92, 123, 92, 82, 236, 191, 9, 78, 6, 98, 155, 92, 175, 71, 189, 155, 139, 185, 170, 194, 123, 31, 252, 247, 137, 242, 22, 153, 10, 99, 213, 54, 253, 70, 173, 249, 86, 215, 37, 57, 30, 190, 112, 117, 130, 51, 30, 49, 19, 38, 189, 60, 122, 48, 44, 202, 112, 193, 110, 142, 201, 238, 24, 133, 160, 59, 243, 124, 97, 109, 76, 173, 136, 32, 75, 180, 49, 113, 205, 116, 79, 218, 19, 227, 181, 225, 35, 101, 146, 107, 23, 122, 4, 110, 106, 144, 93, 170, 236, 92, 74, 108, 204, 206, 173, 11, 69, 133, 40, 184, 9, 87, 167, 226, 33, 79, 47, 40, 125, 249, 25, 39, 192, 103, 159, 181, 237, 35, 27, 51, 65, 11, 159, 64, 185, 84, 151, 154, 18, 172, 8, 240, 14, 2, 76, 78, 3, 202, 134, 135, 184, 58, 176, 194, 5, 178, 202, 32, 93, 218, 179, 114, 159, 180, 253, 35, 59, 123, 165, 254, 153, 252, 198, 208, 145, 167, 198, 204, 236, 23, 238, 108, 39, 139, 116, 7, 232, 221, 142, 156, 68, 231, 78, 191, 47, 109, 149, 119, 76, 248, 3, 156, 53, 42, 127, 251, 110, 39, 235, 4, 2, 252, 141, 59, 182, 115, 145, 118, 235, 54, 53, 57, 243, 105, 6, 70, 122, 29, 138, 196, 119, 161, 115, 68, 43, 241, 66, 154, 152, 114, 5, 144, 78, 129, 81, 151, 42, 78, 164, 225, 64, 125, 72, 161, 217, 87, 45, 10, 91, 219, 21, 252, 255, 12, 171, 102, 71, 98, 168, 209, 25, 113, 197, 143, 74, 141, 187, 215, 62, 246, 219, 31, 195, 108, 121, 95, 181, 243, 71, 15, 64, 191, 225, 245, 161, 243, 209, 36, 236, 134, 107, 188, 69, 113, 72, 129, 235, 141, 164, 204, 52, 70, 214, 205, 111, 17, 104, 31, 25, 80, 55, 72, 64, 251, 92, 14, 136, 50, 180, 216, 100, 8, 255, 81, 8, 222, 156, 57, 116, 119, 171, 99, 33, 102, 228, 220, 139, 97, 248, 100, 219, 227, 244, 93, 221, 164, 173, 113, 224, 10, 61, 227, 219, 39, 43, 140, 95, 9, 120, 112, 154, 194, 220, 248, 73, 120, 145, 4, 47, 99, 186, 91, 52, 92, 86, 239, 143, 35, 252, 190, 88, 77, 69, 199, 239, 11, 167, 75, 149, 237, 73, 138, 90, 91, 222, 120, 107, 162, 184, 18, 211, 122, 189, 51, 167, 155, 211, 28, 107, 39, 57, 186, 3, 27, 93, 22, 26, 63, 51, 79, 101, 146, 15, 18, 239, 222, 231, 117, 45, 112, 215, 97, 229, 235, 218, 128, 191, 121, 57, 108, 175, 121, 9, 145, 55, 251, 37, 106, 223, 88, 111, 55, 186, 117, 146, 185, 124, 56, 113, 27, 191, 119, 238, 137, 119, 64, 48, 75, 80, 95, 251, 43, 35, 48, 238, 24, 62, 125, 115, 31, 151, 73, 184, 145, 244, 125, 125, 75, 91, 198, 221, 189, 157, 54, 218, 15, 214, 74, 224, 49, 146, 82, 46, 203, 245, 242, 161, 18, 36, 253, 27, 238, 159, 166, 63, 149, 238, 195, 63, 130, 146, 58, 222, 83, 37, 201, 192, 207, 15, 99, 149, 67, 168, 20, 60, 82, 129, 56, 111, 51, 183, 140, 138, 84, 17, 207, 147, 143, 179, 17, 203, 101, 255, 226, 187, 47, 245, 106, 48, 10, 177, 89, 145, 80, 39, 48, 152, 212, 178, 194, 36, 9, 127, 36, 254, 234, 77, 36, 232, 206, 181, 188, 202, 225, 211, 88, 211, 140, 176, 98, 107, 1, 149, 168, 14, 161, 202, 138, 232, 0, 237, 235, 36, 253, 225, 250, 228, 94, 252, 137, 235, 131, 50, 143, 239, 230, 209, 229, 223, 248, 6, 195, 89, 168, 14, 154, 61, 105, 163, 115, 76, 49, 37, 98, 136, 201, 137, 218, 134, 50, 114, 113, 193, 204, 72, 234, 16, 28, 6, 130, 106, 27, 2, 113, 136, 119, 15, 51, 173, 23, 39, 206, 143, 173, 171, 69, 183, 186, 63, 158, 93, 243, 123, 127, 109, 67, 6, 226, 98, 5, 140, 162, 1, 36, 180, 229, 87, 218, 223, 105, 159, 246, 102, 45, 6, 71, 121, 92, 51, 70, 140, 222, 181, 218, 9, 5, 28, 82, 149, 104, 136, 66, 177, 100, 80, 11, 147, 15, 52, 124, 121, 31, 2, 77, 96, 241, 27, 148, 189, 39, 151, 151, 217, 138, 4, 139, 166, 238, 180, 69, 112, 7, 179, 25, 74, 99, 237, 147, 22, 219, 248, 40, 168, 53, 110, 130, 52, 247, 95, 15, 225, 129, 52, 118, 74, 213, 79, 22, 88, 113, 146, 19, 123, 118, 142, 34, 89, 119, 49, 128, 73, 140, 127, 74, 204, 40, 85, 206, 83, 50, 214, 157, 136, 35, 45, 189, 152, 70, 3, 172, 19, 2, 207, 227, 154, 166, 213, 139, 192, 157, 88, 11, 12, 189, 202, 140, 232, 4, 227, 53, 94, 34, 159, 22, 237, 46, 56, 65, 83, 239, 11, 173, 138, 207, 164, 255, 221, 53, 123, 218, 43, 11, 182, 15, 34, 213, 47, 236, 208, 53, 85, 111, 129, 228, 141, 116, 16, 243, 2, 164, 134, 8, 180, 120, 32, 4, 110, 183, 249, 6, 238, 199, 205, 152, 125, 158, 119, 155, 232, 200, 82, 211, 199, 142, 227, 97, 149, 98, 129, 255, 62, 231, 33, 223, 228, 142, 101, 175, 238, 199, 214, 241, 20, 24, 60, 2, 41, 100, 84, 157, 0, 24, 209, 144, 46, 91, 130, 200, 205, 4, 146, 141, 56, 70, 176, 188, 157, 138, 219, 254, 163, 44, 226, 201, 24, 111, 156, 24, 48, 183, 77, 42, 34, 68, 220, 207, 171, 216, 27, 153, 181, 233, 54, 171, 78, 92, 247, 69, 244, 58, 166, 195, 181, 192, 186, 239, 59, 79, 249, 48, 61, 248, 180, 175, 123, 182, 143, 89, 228, 251, 193, 44, 170, 82, 140, 47, 157, 187, 171, 24, 97, 206, 217, 162, 254, 207, 205, 52, 69, 137, 228, 146, 18, 193, 245, 120, 163, 236, 104, 254, 1, 22, 198, 81, 161, 156, 211, 51, 114, 92, 238, 181, 132, 23, 217, 208, 29, 4, 10, 28, 150, 201, 65, 197, 140, 149, 222, 115, 108, 231, 12, 22, 4, 163, 211, 175, 252, 217, 71, 78, 99, 175, 172, 105, 133, 229, 205, 155, 61, 240, 239, 186, 38, 95, 180, 172, 146, 88, 125, 33, 253, 149, 23, 6, 195, 193, 242, 240, 188, 91, 75, 92, 29, 212, 149, 143, 216, 44, 112, 83, 172, 103, 10, 169, 196, 9, 30, 62, 245, 187, 72, 204, 63, 61, 246, 173, 60, 94, 107, 140, 92, 137, 84, 150, 47, 185, 23, 144, 157, 107, 160, 173, 237, 192, 143, 43, 175, 247, 102, 209, 247, 209, 235, 39, 169, 17, 241, 118, 143, 198, 34, 184, 229, 225, 53, 147, 139, 39, 232, 209, 127, 79, 208, 169, 104, 47, 87, 171, 117, 187, 114, 28, 138, 14, 212, 59, 190, 178, 27, 100, 18, 73, 211, 113, 116, 208, 61, 221, 234, 131, 104, 129, 29, 8, 149, 101, 26, 214, 65, 5, 58, 5, 67, 202, 232, 125, 198, 51, 4, 49, 242, 255, 204, 16, 227, 251, 162, 31, 145, 228, 80, 2, 253, 246, 12, 132, 169, 18, 64, 89, 227, 124, 149, 73, 221, 142, 73, 118, 148, 227, 88, 198, 227, 51, 5, 132, 254, 5, 132, 37, 82, 32, 92, 147, 203, 190, 111, 110, 99, 120, 223, 33, 236, 103, 160, 255, 232, 255, 96, 86, 134, 46, 93, 50, 252, 111, 43, 119, 174, 174, 40, 96, 10, 218, 13, 203, 229, 163, 32, 148, 149, 190, 226, 128, 253, 121, 10, 124, 20, 58, 241, 190, 43, 223, 242, 215, 63, 221, 173, 214, 224, 253, 90, 164, 0, 29, 174, 12, 209, 208, 148, 18, 245, 170, 164, 62, 202, 177, 155, 125, 76, 166, 217, 231, 120, 222, 3, 144, 59, 214, 182, 221, 105, 210, 68, 152, 84, 82, 45, 228, 111, 189, 47, 250, 136, 114, 241, 245, 38, 126, 58, 212, 206, 151, 61, 106, 43, 206, 80, 251, 224, 121, 252, 202, 107, 165, 72, 230, 0, 169, 224, 165, 122, 11, 229, 245, 77, 108, 254, 88, 132, 78, 109, 57, 192, 195, 132, 166, 10, 203, 215, 181, 222, 101, 180, 25, 97, 174, 212, 60, 59, 129, 5, 182, 14, 135, 1, 89, 105, 235, 144, 149, 85, 2, 228, 190, 64, 249, 241, 43, 235, 86, 226, 232, 190, 192, 176, 240, 143, 119, 166, 78, 233, 128, 29, 235, 47, 135, 130, 185, 62, 84, 156, 0, 130, 89, 154, 92, 211, 161, 25, 18, 217, 10, 188, 54, 118, 152, 160, 204, 183, 35, 203, 66, 106, 13, 109, 147, 65, 192, 246, 152, 140, 148, 139, 94, 13, 168, 34, 100, 241, 235, 248, 32, 67, 136, 172, 186, 116, 9, 3, 68, 217, 78, 196, 229, 210, 194, 147, 177, 31, 132, 110, 49, 20, 226, 80, 206, 248, 98, 45, 42, 175, 77, 119, 164, 239, 254, 44, 48, 195, 119, 180, 118, 250, 120, 249, 214, 226, 38, 125, 25, 125, 237, 145, 186, 103, 77, 162, 252, 195, 248, 45, 57, 254, 204, 244, 80, 184, 40, 135, 170, 40, 25, 37, 4, 25, 74, 161, 28, 136, 20, 208, 244, 172, 155, 217, 169, 70, 177, 123, 203, 163, 113, 191, 75, 166, 145, 0, 119, 44, 216, 220, 72, 21, 203, 50, 115, 104, 152, 145, 200, 102, 9, 110, 203, 81, 3, 169, 138, 237, 250, 204, 104, 105, 124, 237, 132, 152, 203, 124, 172, 242, 23, 75, 248, 83, 10, 222, 153, 29, 74, 51, 251, 157, 101, 45, 68, 175, 183, 7, 161, 175, 152, 10, 194, 226, 64, 62, 120, 236, 52, 87, 66, 196, 155, 89, 245, 206, 203, 171, 149, 9, 157, 247, 8, 84, 32, 182, 24, 67, 62, 231, 32, 35, 97, 135, 20, 36, 159, 22, 77, 248, 204, 19, 121, 93, 146, 135, 18, 230, 152, 154, 112, 149, 174, 104, 69, 83, 94, 33, 188, 86, 194, 213, 46, 27, 193, 151, 225, 164, 249, 59, 80, 216, 100, 85, 27, 203, 185, 187, 63, 182, 113, 211, 112, 16, 208, 89, 3, 232, 31, 63, 42, 140, 36, 210, 236, 61, 36, 14, 11, 145, 213, 108, 155, 182, 219, 57, 64, 169, 254, 82, 23, 207, 194, 9, 17, 195, 153, 6, 151, 141, 176, 41, 152, 3, 234, 35, 130, 93, 140, 104, 50, 100, 65, 213, 116, 12, 117, 161, 8, 249, 4, 37, 182, 138, 243, 9, 117, 202, 153, 137, 234, 211, 81, 103, 210, 168, 112, 99, 100, 122, 168, 90, 84, 25, 60, 39, 83, 140, 44, 245, 1, 205, 54, 188, 39, 167, 85, 48, 203, 234, 139, 228, 10, 55, 185, 249, 54, 157, 175, 224, 11, 120, 195, 254, 23, 62, 18, 148, 218, 225, 208, 14, 136, 230, 208, 103, 116, 254, 91, 227, 75, 105, 144, 38, 168, 228, 165, 172, 157, 41, 141, 7, 211, 177, 30, 137, 31, 205, 135, 251, 198, 132, 108, 254, 12, 177, 139, 212, 206, 43, 183, 228, 155, 139, 183, 242, 37, 186, 128, 34, 32, 177, 144, 240, 130, 157, 49, 30, 82, 103, 211, 12, 68, 54, 163, 226, 126, 102, 195, 190, 224, 18, 64, 110, 97, 124, 150, 111, 117, 230, 247, 36, 102, 39, 162, 228, 61, 201, 168, 116, 18, 195, 233, 55, 115, 119, 87, 50, 166, 110, 213, 92, 110, 18, 89, 96, 59, 230, 174, 118, 234, 81, 249, 193, 34, 138, 162, 196, 191, 193, 197, 245, 214, 68, 177, 81, 0, 62, 132, 158, 69, 210, 75, 104, 57, 214, 121, 181, 185, 91, 187, 247, 139, 180, 206, 111, 232, 193, 72, 2, 187, 6, 167, 94, 95, 90, 210, 97, 218, 92, 97, 32, 170, 73, 252, 194, 76, 184, 110, 3, 207, 101, 163, 51, 93, 192, 231, 188, 231, 76, 77, 185, 82, 48, 118, 1, 76, 238, 177, 68, 146, 18, 10, 78, 83, 192, 50, 64, 22, 201, 8, 148, 148, 165, 110, 76, 9, 179, 230, 64, 203, 214, 71, 28, 83, 161, 252, 124, 97, 108, 202, 48, 6, 250, 151, 145, 117, 10, 143, 209, 183, 100, 148, 231, 36, 67, 153, 78, 189, 23, 44, 151, 223, 58, 210, 240, 164, 184, 202, 80, 36, 247, 184, 237, 9, 88, 110, 141, 149, 217, 179, 70, 200, 225, 108, 181, 77, 104, 175, 75, 89, 138, 0, 176, 20, 35, 51, 128, 43, 76, 79, 197, 173, 96, 149, 177, 150, 103, 227, 184, 1, 223, 217, 176, 234, 130, 194, 123, 190, 122, 200, 69, 161, 252, 69, 2, 116, 187, 126, 56, 129, 31, 212, 134, 81, 231, 11, 227, 225, 46, 193, 196, 210, 3, 237, 187, 97, 200, 243, 218, 53, 36, 212, 145, 100, 62, 198, 234, 122, 220, 201, 142, 30, 36, 45, 198, 77, 174, 143, 231, 107, 11, 36, 202, 132, 165, 34, 35, 12, 104, 10, 147, 225, 16, 242, 78, 118, 227, 60, 141, 131, 170, 110, 111, 59, 42, 80, 6, 155, 236, 129, 153, 115, 103, 205, 57, 138, 192, 253, 30, 45, 80, 1, 160, 188, 109, 30, 122, 31, 69, 13, 96, 215, 230, 162, 19, 13, 147, 178, 165, 142, 213, 5, 86, 146, 32, 110, 157, 113, 124, 199, 20, 145, 233, 164, 217, 80, 171, 178, 40, 59, 187, 150, 222, 88, 39, 79, 65, 97, 17, 196, 132, 1, 66, 102, 162, 249, 255, 221, 46, 166, 191, 222, 233, 239, 5, 45, 233, 202, 116, 170, 41, 75, 36, 156, 12, 73, 101, 64, 195, 123, 238, 149, 141, 86, 229, 199, 170, 15, 114, 139, 181, 195, 28, 164, 65, 66, 3, 147, 189, 137, 182, 72, 251, 118, 109, 161, 202, 197, 49, 186, 185, 82, 195, 206, 199, 123, 169, 11, 46, 251, 135, 84, 45, 81, 101, 140, 175, 1, 23, 15, 68, 198, 162, 242, 46, 36, 174, 79, 169, 147, 193, 85, 226, 101, 139, 142, 0, 67, 199, 147, 120, 53, 48, 163, 96, 61, 129, 170, 137, 52, 26, 194, 84, 77, 226, 21, 130, 78, 5, 133, 138, 10, 106, 52, 161, 54, 243, 141, 68, 32, 37, 128, 156, 177, 172, 216, 209, 186, 104, 17, 164, 189, 189, 0, 31, 63, 59, 208, 208, 244, 255, 23, 70, 112, 46, 177, 250, 245, 121, 177, 196, 187, 137, 212, 185, 34, 120, 160, 128, 107, 130, 247, 91, 16, 111, 88, 83, 231, 163, 162, 72, 224, 99, 118, 167, 169, 120, 14, 163, 131, 106, 246, 101, 77, 107, 252, 185, 156, 250, 79, 177, 141, 183, 23, 210, 1, 191, 52, 54, 51, 21, 114, 49, 204, 130, 52, 158, 79, 184, 249, 9, 20, 148, 15, 242, 54, 29, 144, 224, 211, 114, 94, 174, 133, 32, 224, 166, 89, 108, 14, 129, 215, 233, 159, 255, 105, 113, 229, 186, 62, 68, 213, 182, 106, 107, 23, 66, 64, 129, 52, 172, 71, 40, 157, 1, 211, 40, 183, 140, 154, 175, 52, 99, 160, 151, 17, 179, 238, 120, 222, 209, 182, 175, 111, 69, 174, 73, 18, 193, 235, 193, 143, 9, 0, 207, 198, 197, 36, 188, 201, 185, 166, 2, 218, 59, 101, 234, 92, 130, 19, 9, 171, 201, 65, 245, 28, 40, 171, 13, 233, 2, 49, 190, 134, 238, 161, 134, 222, 209, 229, 36, 199, 90, 120, 54, 2, 103, 108, 206, 250, 146, 211, 95, 125, 69, 175, 221, 50, 197, 144, 188, 181, 249, 93, 90, 217, 201, 211, 180, 67, 155, 91, 90, 118, 114, 190, 54, 246, 183, 168, 86, 84, 133, 80, 132, 161, 132, 98, 212, 251, 187, 203, 78, 68, 116, 70, 83, 20, 2, 131, 186, 191, 102, 174, 174, 218, 133, 196, 132, 126, 154, 29, 252, 41, 55, 104, 39, 224, 82, 152, 101, 7, 204, 244, 198, 220, 195, 156, 78, 243, 70, 38, 226, 121, 236, 128, 46, 243, 187, 36, 240, 69, 247, 172, 230, 209, 57, 212, 249, 89, 109, 74, 126, 133, 164, 225, 3, 229, 6, 73, 118, 57, 19, 51, 179, 28, 26, 106, 88, 110, 54, 51, 149, 229, 161, 191, 246, 16, 205, 112, 171, 194, 62, 8, 71, 191, 18, 68, 101, 34, 146, 135, 59, 82, 101, 40, 25, 103, 96, 10, 145, 11, 180, 8, 114, 250, 20, 252, 164, 130, 44, 71, 173, 255, 241, 44, 4, 241, 156, 110, 221, 98, 124, 232, 86, 160, 237, 171, 175, 148, 162, 4, 153, 49, 73, 206, 26, 249, 31, 11, 99, 98, 112, 180, 159, 86, 230, 31, 119, 57, 217, 14, 76, 195, 70, 206, 198, 183, 44, 194, 51, 151, 20, 224, 105, 71, 177, 32, 114, 4, 35, 150, 61, 130, 115, 78, 139, 72, 16, 35, 245, 109, 204, 148, 183, 233, 111, 203, 65, 152, 219, 81, 194, 232, 177, 150, 115, 123, 115, 227, 160, 73, 63, 145, 213, 211, 185, 66, 82, 195, 29, 228, 139, 210, 56, 177, 87, 124, 37, 179, 19, 136, 156, 17, 14, 211, 215, 212, 225, 183, 137, 57, 174, 207, 128, 166, 228, 110, 138, 101, 23, 102, 148, 93, 14, 123, 96, 45, 185, 239, 206, 244, 8, 160, 101, 98, 64, 161, 56, 14, 115, 149, 213, 139, 145, 46, 94, 70, 237, 162, 247, 208, 233, 202, 17, 135, 175, 18, 168, 225, 21, 35, 62, 41, 89, 167, 52, 29, 236, 23, 83, 28, 96, 114, 78, 144, 120, 76, 235, 255, 206, 62, 107, 17, 105, 28, 71, 190, 85, 78, 253, 104, 126, 24, 228, 195, 102, 24, 101, 37, 137, 90, 245, 41, 173, 146, 101, 185, 147, 49, 143, 1, 195, 150, 236, 114, 84, 25, 158, 34, 82, 206, 98, 55, 145, 10, 178, 178, 223, 183, 64, 244, 95, 207, 75, 65, 58, 67, 41, 0, 9, 10, 48, 222, 57, 81, 123, 195, 210, 12, 14, 21, 122, 236, 154, 117, 212, 195, 195, 103, 112, 109, 92, 77, 140, 165, 217, 245, 92, 178, 0, 18, 193, 135, 14, 208, 209, 80, 135, 198, 209, 196, 174, 232, 73, 114, 16, 194, 44, 35, 160, 172, 91, 130, 158, 158, 163, 122, 42, 248, 110, 171, 40, 60, 255, 39, 92, 233, 225, 185, 52, 181, 120, 180, 12, 153, 93, 50, 140, 66, 103, 101, 50, 3, 78, 210, 200, 113, 134, 201, 35, 68, 23, 249, 38, 183, 227, 131, 187, 53, 1, 153, 186, 173, 137, 146, 61, 39, 78, 84, 39, 184, 167, 45, 248, 59, 153, 147, 231, 103, 137, 141, 55, 199, 255, 203, 17, 220, 79, 172, 218, 112, 252, 225, 83, 94, 149, 18, 15, 81, 31, 101, 153, 56, 182, 245, 249, 75, 165, 176, 240, 216, 124, 79, 67, 52, 250, 105, 254, 243, 99, 160, 41, 158, 153, 149, 194, 163, 94, 24, 229, 55, 161, 32, 42, 211, 135, 182, 159, 51, 218, 243, 142, 236, 93, 115, 57, 93, 75, 0, 61, 6, 222, 3, 239, 1, 27, 119, 58, 92, 58, 215, 212, 248, 105, 186, 87, 102, 119, 184, 20, 41, 26, 46, 88, 255, 90, 48, 237, 212, 114, 172, 219, 25, 197, 115, 225, 35, 40, 3, 49, 103, 146, 227, 210, 182, 152, 188, 9, 84, 21, 144, 21, 173, 234, 158, 8, 193, 76, 117, 156, 168, 237, 203, 53, 16, 140, 248, 112, 166, 187, 100, 27, 82, 46, 221, 227, 106, 56, 47, 98, 252, 64, 71, 217, 93, 22, 179, 249, 8, 98, 104, 170, 37, 111, 99, 67, 35, 149, 190, 93, 248, 100, 65, 40, 13, 228, 189, 247, 121, 149, 32, 111, 229, 234, 150, 20, 160, 171, 42, 184, 75, 52, 9, 46, 205, 154, 20, 53, 33, 123, 10, 161, 130, 79, 31, 221, 58, 132, 34, 6, 9, 125, 5, 201, 193, 198, 187, 237, 106, 122, 138, 247, 142, 226, 176, 101, 47, 4, 113, 249, 23, 111, 104, 219, 76, 223, 232, 61, 80, 211, 10, 174, 255, 176, 186, 103, 96, 91, 153, 188, 34, 11, 218, 206, 114, 84, 36, 226, 109, 163, 85, 108, 6, 218, 253, 166, 217, 194, 249, 247, 50, 157, 173, 119, 140, 121, 77, 44, 39, 53, 19, 99, 38, 12, 39, 160, 255, 170, 16, 11, 135, 93, 93, 217, 1, 52, 233, 2, 125, 175, 216, 20, 76, 236, 116, 88, 3, 107, 232, 133, 30, 100, 70, 119, 13, 2, 62, 37, 154, 224, 134, 223, 240, 165, 48, 33, 229, 137, 147, 184, 0, 105, 48, 83, 138, 251, 29, 190, 168, 223, 100, 10, 129, 249, 249, 242, 205, 253, 189, 241, 24, 156, 191, 99, 150, 242, 96, 234, 237, 68, 72, 206, 142, 48, 32, 91, 112, 136, 120, 46, 248, 81, 124, 188, 167, 96, 108, 169, 125, 16, 83, 12, 112, 172, 197, 158, 200, 199, 232, 44, 92, 199, 210, 247, 103, 201, 156, 110, 20, 238, 88, 97, 183, 8, 114, 113, 36, 67, 237, 222, 161, 74, 125, 154, 77, 19, 34, 78, 153, 191, 104, 91, 184, 148, 242, 108, 163, 237, 27, 199, 51, 4, 174, 75, 154, 5, 15, 155, 220, 251, 145, 27, 134, 87, 150, 8, 184, 187, 42, 137, 28, 31, 32, 112, 209, 28, 182, 52, 248, 97, 48, 2, 200, 240, 179, 125, 105, 108, 251, 157, 109, 255, 43, 97, 117, 102, 123, 243, 96, 213, 108, 71, 96, 95, 73, 36, 25, 37, 141, 254, 111, 134, 39, 79, 187, 41, 41, 216, 229, 253, 107, 85, 210, 88, 161, 59, 246, 39, 213, 178, 158, 80, 226, 246, 61, 149, 191, 24, 33, 92, 97, 219, 250, 155, 84, 120, 238, 92, 15, 15, 47, 144, 40, 92, 153, 155, 66, 130, 84, 232, 26, 220, 122, 148, 49, 69, 67, 236, 62, 53, 194, 127, 102, 227, 184, 242, 71, 214, 10, 17, 239, 228, 175, 254, 153, 47, 237, 108, 156, 175, 169, 133, 164, 70, 57, 128, 43, 180, 148, 250, 228, 50, 42, 93, 183, 237, 157, 116, 171, 232, 204, 235, 85, 88, 23, 144, 28, 5, 199, 62, 203, 21, 83, 39, 155, 45, 229, 220, 240, 201, 129, 125, 247, 197, 201, 216, 55, 65, 180, 78, 41, 117, 100, 48, 95, 104, 220, 239, 122, 140, 75, 118, 20, 54, 15, 214, 139, 181, 98, 146, 139, 18, 20, 101, 199, 80, 64, 21, 225, 99, 210, 141, 253, 68, 106, 189, 156, 177, 118, 109, 140, 29, 14, 76, 212, 58, 78, 251, 6, 92, 183, 187, 107, 197, 55, 9, 32, 45, 158, 91, 138, 132, 232, 66, 221, 6, 114, 82, 24, 50, 125, 111, 189, 97, 3, 16, 189, 149, 35, 0, 238, 5, 30, 94, 177, 186, 35, 164, 253, 113, 32, 154, 123, 238, 169, 191, 22, 252, 239, 76, 150, 27, 154, 183, 60, 205, 94, 33, 112, 74, 71, 250, 255, 60, 54, 90, 207, 248, 228, 207, 165, 167, 107, 109, 27, 32, 150, 182, 48, 245, 131, 29, 117, 220, 51, 122, 118, 111, 164, 3, 219, 57, 10, 71, 104, 11, 103, 74, 33, 138, 142, 133, 106, 92, 226, 157, 30, 25, 27, 174, 130, 240, 190, 190, 241, 185, 168, 157, 107, 7, 106, 148, 7, 189, 234, 239, 171, 33, 185, 220, 98, 137, 168, 157, 37, 202, 175, 124, 164, 57, 105, 137, 80, 56, 11, 17, 105, 80, 14, 1, 51, 12, 85, 165, 129, 91, 63, 86, 154, 89, 159, 83, 158, 95, 133, 187, 82, 72, 211, 15, 153, 244, 32, 220, 165, 62, 215, 216, 211, 169, 79, 207, 121, 129, 241, 9, 146, 124, 217, 188, 143, 22, 35, 74, 62, 252, 238, 248, 119, 94, 98, 90, 73, 110, 72, 230, 174, 158, 185, 185, 94, 140, 253, 41, 26, 1, 135, 174, 222, 96, 148, 194, 19, 95, 205, 237, 234, 135, 197, 139, 195, 138, 64, 118, 106, 6, 91, 169, 243, 80, 244, 24, 23, 13, 146, 3, 5, 11, 11, 206, 83, 74, 155, 54, 6, 147, 36, 99, 174, 112, 233, 22, 244, 26, 119, 60, 191, 77, 233, 206, 94, 23, 117, 225, 167, 64, 103, 4, 250, 91, 57, 172, 251, 60, 108, 74, 131, 228, 121, 187, 235, 5, 51, 24, 172, 212, 52, 241, 41, 238, 216, 191, 187, 108, 217, 202, 130, 116, 102, 151, 207, 14, 77, 185, 87, 134, 8, 21, 130, 121, 40, 76, 120, 82, 116, 148, 189, 26, 214, 16, 179, 192, 19, 186, 7, 178, 176, 169, 155, 105, 32, 29, 150, 111, 33, 219, 142, 97, 163, 113, 217, 116, 60, 208, 182, 84, 110, 166, 240, 161, 203, 224, 89, 104, 82, 80, 224, 167, 48, 195, 145, 142, 67, 77, 208, 188, 156, 136, 135, 38, 140, 19, 127, 182, 124, 58, 116, 36, 10, 27, 196, 222, 186, 146, 188, 79, 205, 214, 151, 199, 165, 141, 155, 183, 18, 57, 101, 255, 21, 128, 108, 237, 35, 209, 35, 212, 185, 72, 250, 70, 176, 83, 137, 0, 151, 103, 177, 215, 70, 229, 1, 195, 241, 6, 90, 81, 42, 229, 74, 160, 149, 193, 11, 173, 172, 53, 206, 94, 246, 75, 57, 66, 30, 190, 98, 141, 192, 228, 0, 0, 95, 0, 78, 49, 11, 105, 116, 217, 21, 25, 151, 98, 165, 78, 146, 218, 135, 234, 72, 204, 59, 196, 62, 217, 136, 18, 92, 149, 67, 3, 118, 194, 151, 81, 219, 225, 228, 195, 121, 129, 217, 185, 190, 219, 149, 33, 192, 160, 79, 45, 38, 76, 81, 155, 161, 232, 103, 62, 201, 116, 175, 27, 247, 78, 120, 71, 146, 90, 195, 238, 195, 195, 179, 231, 119, 124, 103, 18, 175, 35, 122, 73, 3, 237, 130, 158, 113, 223, 85, 13, 45, 35, 69, 30, 202, 209, 36, 92, 198, 51, 48, 129, 18, 116, 209, 102, 54, 144, 85, 141, 235, 226, 61, 41, 224, 63, 169, 255, 190, 47, 158, 9, 186, 95, 204, 45, 30, 2, 214, 43, 248, 154, 93, 71, 243, 107, 161, 146, 241, 133, 184, 5, 48, 66, 234, 41, 145, 200, 94, 82, 145, 54, 56, 224, 176, 20, 25, 170, 70, 254, 106, 132, 217, 96, 242, 218, 29, 202, 231, 241, 125, 13, 93, 73, 244, 101, 2, 10, 75, 16, 47, 199, 103, 26, 22, 91, 182, 43, 133, 0, 131, 139, 18, 125, 121, 32, 163, 252, 208, 200, 70, 234, 236, 179, 75, 103, 98, 208, 251, 76, 230, 119, 204, 54, 214, 237, 221, 64, 187, 1, 165, 233, 106, 140, 153, 136, 39, 114, 29, 72, 204, 236, 115, 77, 16, 68, 211, 33, 217, 209, 109, 163, 73, 236, 53, 220, 213, 251, 133, 50, 160, 144, 207, 241, 66, 96, 249, 188, 62, 200, 113, 35, 129, 209, 160, 42, 192, 90, 24, 138, 128, 9, 90, 112, 183, 200, 247, 1, 245, 177, 145, 39, 86, 241, 7, 83, 106, 24, 202, 155, 126, 31, 69, 19, 5, 122, 132, 29, 51, 83, 18, 115, 59, 115, 188, 61, 214, 154, 190, 120, 130, 170, 68, 40, 218, 88, 17, 212, 134, 164, 177, 247, 216, 44, 207, 70, 25, 226, 161, 235, 25, 28, 65, 134, 185, 50, 52, 125, 149, 19, 64, 144, 144, 52, 216, 70, 37, 112, 61, 183, 85, 187, 155, 23, 90, 163, 142, 172, 162, 147, 97, 155, 82, 61, 31, 136, 224, 148, 236, 49, 0, 79, 167, 67, 90, 118, 46, 227, 148, 72, 140, 236, 169, 107, 144, 106, 64, 102, 28, 129, 189, 5, 10, 130, 194, 72, 159, 74, 50, 106, 39, 238, 92, 3, 148, 66, 2, 48, 207, 184, 149, 177, 93, 207, 24, 93, 206, 37, 209, 118, 168, 111, 6, 51, 243, 209, 62, 138, 31, 124, 56, 9, 69, 102, 184, 72, 13, 208, 63, 192, 187, 215, 151, 42, 158, 67, 180, 235, 205, 204, 245, 170, 165, 127, 161, 85, 115, 23, 45, 195, 32, 193, 173, 119, 15, 11, 66, 59, 125, 248, 30, 30, 15, 39, 245, 44, 92, 109, 25, 254, 141, 195, 45, 74, 4, 115, 44, 19, 138, 106, 72, 108, 197, 134, 192, 179, 33, 73, 224, 201, 139, 163, 157, 31, 181, 90, 115, 127, 244, 146, 121, 58, 244, 173, 255, 74, 220, 134, 49, 91, 188, 173, 208, 104, 141, 88, 208, 147, 65, 242, 164, 41, 150, 249, 233, 152, 220, 229, 235, 210, 37, 0, 72, 139, 142, 163, 143, 27, 191, 103, 250, 70, 238, 70, 137, 222, 63, 240, 78, 16, 156, 125, 168, 247, 82, 177, 100, 40, 58, 190, 175, 194, 115, 113, 165, 207, 82, 49, 28, 98, 76, 201, 110, 144, 183, 88, 123, 238, 189, 86, 209, 155, 2, 134, 216, 2, 178, 112, 76, 20, 17, 61, 195, 211, 126, 181, 234, 191, 195, 208, 195, 143, 248, 179, 137, 219, 98, 222, 47, 227, 204, 49, 154, 166, 166, 126, 115, 218, 121, 218, 93, 129, 78, 194, 59, 139, 137, 56, 69, 99, 112, 110, 144, 183, 13, 58, 55, 156, 254, 53, 141, 110, 200, 5, 98, 254, 222, 97, 252, 160, 210, 91, 230, 62, 222, 39, 135, 43, 175, 121, 209, 98, 205, 182, 59, 55, 174, 1, 23, 17, 248, 121, 249, 6, 32, 130, 114, 53, 89, 238, 244, 189, 30, 71, 28, 107, 184, 85, 211, 103, 100, 119, 83, 59, 110, 178, 68, 208, 40, 38, 60, 206, 244, 96, 84, 188, 197, 246, 81, 232, 31, 66, 24, 115, 88, 41, 90, 110, 254, 55, 105, 114, 158, 36, 112, 2, 224, 67, 213, 226, 9, 145, 155, 82, 124, 246, 56, 208, 124, 56, 194, 119, 123, 151, 225, 54, 215, 180, 224, 245, 202, 60, 198, 101, 141, 250, 205, 161, 82, 171, 227, 191, 241, 87, 253, 40, 182, 98, 79, 99, 2, 202, 253, 173, 127, 25, 176, 76, 253, 206, 41, 229, 235, 117, 225, 205, 1, 51, 10, 128, 31, 42, 12, 180, 34, 90, 214, 200, 63, 227, 129, 81, 153, 239, 220, 147, 133, 124, 170, 247, 72, 110, 113, 161, 90, 60, 200, 110, 146, 208, 136, 167, 187, 157, 87, 194, 183, 94, 35, 224, 210, 161, 126, 239, 172, 159, 185, 239, 192, 218, 181, 123, 28, 137, 114, 15, 125, 204, 147, 81, 211, 123, 99, 238, 86, 252, 237, 179, 69, 27, 107, 94, 126, 135, 213, 236, 17, 120, 27, 35, 137, 255, 193, 196, 102, 246, 210, 11, 185, 38, 243, 165, 206, 143, 216, 251, 79, 76, 81, 186, 68, 65, 31, 236, 139, 156, 75, 116, 0, 75, 35, 75, 18, 141, 245, 254, 139, 86, 31, 62, 2, 146, 88, 142, 97, 5, 56, 138, 74, 79, 188, 50, 18, 54, 250, 61, 53, 166, 95, 165, 11, 104, 233, 196, 166, 23, 218, 152, 117, 233, 219, 141, 217, 243, 23, 167, 164, 23, 72, 11, 241, 217, 62, 49, 127, 33, 28, 235, 85, 217, 118, 101, 111, 21, 239, 192, 35, 30, 54, 45, 219, 41, 128, 45, 121, 71, 246, 69, 40, 141, 61, 156, 97, 68, 90, 208, 235, 178, 30, 185, 4, 99, 43, 54, 106, 18, 25, 190, 28, 77, 252, 141, 70, 182, 26, 14, 18, 211, 4, 42, 234, 110, 209, 0, 43, 77, 156, 215, 190, 249, 145, 7, 35, 19, 163, 243, 72, 79, 105, 205, 79, 213, 219, 234, 76, 151, 146, 204, 156, 88, 139, 5, 253, 219, 84, 250, 7, 142, 89, 8, 5, 168, 59, 49, 39, 245, 91, 227, 220, 56, 52, 244, 42, 80, 84, 243, 122, 156, 5, 23, 133, 220, 115, 224, 89, 214, 195, 148, 35, 236, 243, 150, 76, 184, 230, 71, 55, 207, 243, 108, 128, 57, 22, 199, 58, 226, 113, 194, 115, 228, 103, 115, 18, 57, 33, 147, 24, 40, 239, 49, 193, 51, 250, 78, 116, 167, 31, 125, 175, 112, 157, 30, 126, 20, 249, 213, 210, 232, 89, 191, 183, 246, 165, 215, 226, 34, 241, 206, 151, 71, 21, 9, 203, 33, 177, 19, 15, 39, 205, 47, 238, 123, 61, 64, 189, 71, 185, 158, 79, 250, 51, 251, 108, 147, 157, 8, 235, 199, 152, 124, 252, 102, 221, 138, 135, 168, 153, 151, 229, 156, 69, 62, 103, 86, 166, 13, 76, 189, 196, 116, 132, 14, 125, 139, 28, 187, 149, 1, 210, 204, 30, 130, 136, 167, 216, 60, 141, 175, 128, 213, 113, 48, 108, 215, 93, 152, 249, 85, 58, 177, 52, 117, 169, 66, 101, 154, 232, 175, 143, 190, 235, 5, 15, 10, 153, 99, 84, 123, 127, 98, 122, 50, 239, 13, 66, 34, 17, 223, 248, 60, 143, 203, 237, 58, 216, 195, 160, 179, 116, 226, 113, 74, 209, 92, 183, 30, 166, 72, 233, 56, 200, 139, 236, 10, 86, 247, 48, 145, 40, 218, 243, 215, 219, 43, 172, 236, 14, 70, 179, 248, 137, 208, 91, 211, 196, 109, 15, 46, 0, 184, 44, 242, 60, 58, 219, 63, 242, 57, 18, 49, 4, 199, 52, 58, 12, 85, 247, 21, 205, 215, 118, 184, 190, 93, 63, 0, 79, 66, 130, 175, 47, 178, 170, 99, 209, 60, 224, 74, 40, 50, 174, 159, 240, 102, 157, 246, 29, 75, 90, 150, 191, 185, 118, 69, 198, 92, 172, 52, 206, 180, 83, 5, 147, 87, 183, 66, 49, 176, 37, 176, 82, 124, 152, 184, 46, 10, 67, 164, 212, 33, 251, 188, 194, 73, 86, 79, 114, 67, 118, 125, 159, 87, 58, 80, 134, 212, 180, 255, 189, 178, 224, 87, 181, 198, 222, 242, 109, 35, 93, 24, 97, 129, 14, 150, 132, 255, 118, 6, 239, 183, 39, 239, 56, 57, 254, 86, 123, 205, 138, 233, 229, 11, 193, 185, 182, 188, 103, 87, 190, 115, 83, 136, 12, 106, 82, 252, 41, 207, 222, 124, 196, 8, 149, 90, 198, 244, 3, 99, 150, 21, 197, 66, 0, 10, 179, 247, 139, 186, 54, 179, 66, 2, 107, 109, 88, 227, 217, 9, 158, 116, 203, 219, 140, 80, 252, 23, 2, 153, 62, 159, 157, 151, 148, 27, 243, 156, 140, 233, 64, 208, 172, 136, 240, 3, 211, 226, 4, 223, 41, 46, 8, 203, 52, 172, 151, 63, 218, 98, 229, 185, 250, 232, 82, 117, 148, 86, 220, 63, 51, 104, 49, 169, 47, 124, 131, 39, 249, 147, 47, 174, 168, 23, 69, 92, 152, 18, 82, 84, 111, 72, 3, 44, 131, 216, 15, 147, 193, 18, 149, 185, 89, 217, 178, 1, 6, 127, 29, 28, 86, 132, 147, 22, 167, 107, 247, 180, 188, 47, 117, 66, 96, 136, 232, 190, 193, 153, 118, 88, 183, 69, 178, 158, 3, 152, 19, 216, 141, 107, 13, 93, 187, 16, 86, 61, 71, 168, 236, 116, 30, 101, 62, 159, 48, 146, 237, 18, 152, 31, 91, 133, 158, 233, 251, 33, 73, 105, 240, 146, 55, 48, 46, 82, 164, 227, 194, 80, 30, 195, 170, 33, 150, 37, 34, 65, 140, 241, 15, 199, 191, 107, 172, 185, 178, 95, 130, 196, 150, 246, 27, 252, 123, 175, 97, 220, 167, 63, 201, 130, 54, 13, 7, 225, 69, 94, 255, 34, 201, 183, 174, 156, 157, 43, 1, 173, 72, 52, 32, 153, 170, 68, 201, 54, 214, 99, 163, 138, 219, 111, 22, 23, 135, 123, 163, 14, 83, 179, 236, 9, 112, 95, 107, 195, 89, 94, 55, 150, 178, 108, 172, 61, 156, 188, 20, 93, 231, 98, 228, 210, 116, 41, 111, 91, 14, 83, 142, 224, 10, 146, 3, 238, 140, 133, 103, 186, 150, 54, 74, 208, 198, 190, 18, 94, 2, 153, 201, 215, 219, 171, 48, 132, 246, 192, 254, 248, 145, 11, 103, 184, 171, 35, 139, 78, 160, 132, 153, 51, 171, 197, 197, 190, 143, 134, 164, 35, 219, 142, 95, 210, 241, 174, 131, 103, 44, 253, 214, 90, 151, 157, 60, 212, 74, 59, 75, 232, 43, 16, 248, 73, 65, 123, 123, 7, 233, 132, 255, 244, 116, 100, 64, 11, 217, 100, 127, 105, 94, 151, 142, 19, 108, 107, 1, 107, 130, 255, 41, 195, 102, 143, 57, 2, 48, 223, 4, 120, 147, 149, 35, 137, 116, 56, 238, 124, 82, 215, 105, 252, 178, 135, 54, 43, 124, 32, 179, 184, 226, 23, 2, 162, 73, 137, 103, 150, 60, 62, 187, 255, 25, 93, 203, 195, 228, 107, 81, 193, 100, 199, 177, 224, 94, 246, 20, 96, 242, 226, 109, 41, 218, 86, 13, 73, 229, 164, 194, 248, 34, 96, 56, 121, 222, 19, 196, 225, 190, 92, 222, 190, 135, 2, 131, 241, 59, 34, 184, 76, 243, 16, 36, 110, 82, 26, 171, 164, 153, 178, 18, 213, 127, 3, 151, 178, 22, 107, 113, 161, 215, 127, 127, 66, 151, 69, 243, 199, 63, 129, 60, 235, 130, 76, 177, 207, 211, 147, 180, 177, 49, 210, 1, 43, 3, 39, 140, 187, 122, 133, 237, 23, 247, 219, 246, 121, 214, 75, 124, 113, 40, 92, 158, 29, 143, 255, 247, 189, 46, 10, 110, 10, 120, 79, 121, 23, 107, 220, 220, 72, 209, 41, 113, 154, 179, 70, 214, 8, 247, 201, 96, 242, 195, 105, 227, 109, 245, 62, 160, 121, 24, 55, 153, 201, 172, 38, 155, 13, 132, 172, 206, 1, 251, 85, 200, 152, 42, 217, 157, 41, 0, 151, 105, 156, 249, 15, 130, 74, 192, 224, 111, 147, 174, 6, 195, 151, 226, 56, 19, 232, 180, 36, 191, 59, 252, 86, 183, 110, 159, 120, 48, 236, 17, 148, 71, 72, 91, 92, 21, 142, 13, 30, 156, 70, 211, 18, 19, 153, 64, 37, 255, 125, 237, 132, 101, 30, 162, 45, 132, 70, 233, 160, 82, 56, 74, 150, 51, 178, 208, 106, 72, 216, 136, 137, 29, 33, 137, 103, 48, 119, 141, 61, 223, 70, 1, 5, 122, 36, 20, 71, 222, 230, 155, 198, 25, 59, 90, 85, 251, 166, 120, 31, 52, 118, 166, 148, 218, 3, 39, 7, 222, 172, 248, 134, 139, 116, 222, 160, 85, 31, 204, 160, 248, 126, 105, 71, 58, 180, 217, 129, 140, 26, 207, 49, 53, 191, 66, 147, 124, 95, 226, 52, 16, 163, 136, 67, 161, 175, 60, 188, 164, 230, 180, 0, 30, 37, 36, 52, 35, 78, 164, 65, 222, 74, 186, 4, 89, 16, 134, 240, 251, 150, 226, 245, 0, 55, 111, 103, 254, 153, 202, 184, 99, 69, 176, 65, 6, 181, 33, 214, 102, 231, 236, 161, 156, 90, 197, 171, 102, 250, 142, 193, 102, 211, 38, 250, 106, 52, 143, 164, 184, 93, 59, 95, 158, 119, 202, 124, 142, 36, 245, 91, 72, 37, 49, 10, 132, 65, 35, 44, 4, 92, 61, 42, 26, 241, 128, 55, 180, 216, 166, 79, 16, 16, 251, 46, 183, 58, 81, 251, 225, 33, 173, 199, 37, 53, 21, 126, 249, 95, 14, 137, 160, 78, 153, 1, 63, 134, 19, 107, 123, 231, 133, 146, 28, 220, 20, 104, 227, 137, 170, 170, 255, 115, 199, 106, 34, 144, 160, 132, 6, 68, 176, 89, 248, 56, 147, 244, 244, 147, 14, 115, 30, 19, 249, 245, 153, 226, 248, 166, 198, 12, 106, 20, 129, 140, 250, 146, 37, 36, 96, 152, 232, 95, 32, 240, 177, 245, 134, 191, 116, 250, 170, 150, 247, 248, 35, 9, 42, 181, 182, 196, 235, 207, 128, 194, 157, 167, 111, 18, 182, 51, 87, 232, 98, 53, 84, 133, 115, 161, 24, 0, 107, 0, 181, 102, 157, 26, 91, 140, 51, 96, 5, 108, 4, 201, 215, 216, 87, 109, 28, 205, 239, 240, 144, 104, 213, 36, 131, 28, 45, 103, 153, 160, 116, 242, 71, 24, 147, 176, 64, 92, 182, 11, 102, 118, 242, 218, 213, 210, 52, 228, 133, 9, 101, 74, 80, 199, 237, 100, 5, 211, 238, 87, 169, 192, 223, 37, 112, 134, 220, 170, 106, 177, 54, 54, 113, 117, 127, 159, 133, 178, 11, 138, 40, 36, 116, 134, 83, 192, 248, 228, 117, 244, 20, 203, 29, 157, 142, 75, 196, 62, 53, 25, 173, 135, 204, 136, 193, 235, 35, 175, 0, 7, 77, 23, 106, 243, 224, 102, 29, 154, 151, 67, 3, 190, 147, 134, 63, 160, 145, 167, 118, 119, 92, 94, 40, 4, 15, 172, 4, 87, 249, 8, 13, 47, 204, 20, 110, 34, 78, 143, 186, 165, 45, 170, 49, 52, 114, 142, 38, 213, 17, 244, 185, 96, 241, 224, 248, 27, 124, 28, 148, 24, 160, 89, 1, 150, 179, 223, 59, 59, 154, 49, 238, 236, 200, 240, 89, 114, 58, 43, 23, 70, 123, 205, 223, 132, 134, 68, 46, 235, 229, 162, 143, 191, 102, 79, 102, 98, 34, 200, 194, 209, 126, 113, 205, 150, 135, 76, 93, 121, 221, 195, 15, 51, 179, 166, 181, 122, 112, 121, 9, 211, 8, 226, 176, 180, 126, 81, 40, 162, 252, 166, 70, 74, 42, 160, 33, 224, 169, 54, 68, 177, 82, 155, 151, 232, 47, 33, 118, 33, 79, 97, 187, 220, 181, 61, 78, 147, 195, 194, 245, 10, 17, 49, 56, 130, 180, 208, 252, 167, 167, 76, 101, 150, 56, 37, 11, 68, 117, 101, 93, 28, 34, 80, 222, 147, 201, 242, 255, 78, 90, 234, 19, 93, 94, 116, 252, 140, 197, 102, 107, 19, 203, 164, 19, 7, 185, 24, 232, 29, 59, 44, 99, 203, 32, 77, 29, 199, 198, 236, 235, 111, 123, 110, 161, 20, 58, 41, 243, 57, 125, 178, 172, 28, 82, 143, 253, 124, 123, 44, 93, 138, 222, 255, 3, 202, 45, 148, 81, 151, 98, 147, 46, 26, 236, 43, 133, 19, 120, 206, 88, 205, 149, 2, 189, 61, 183, 74, 162, 81, 193, 228, 238, 45, 15, 242, 236, 48, 2, 251, 14, 172, 31, 195, 111, 9, 174, 181, 116, 244, 103, 196, 200, 134, 72, 42, 160, 8, 125, 149, 34, 130, 238, 230, 157, 121, 255, 82, 189, 209, 176, 199, 85, 167, 54, 218, 88, 0, 83, 233, 222, 57, 114, 113, 82, 215, 13, 222, 182, 250, 241, 167, 157, 17, 28, 199, 17, 253, 56, 77, 250, 245, 227, 138, 94, 221, 165, 16, 23, 27, 181, 34, 71, 144, 37, 28, 47, 198, 106, 229, 125, 112, 238, 180, 176, 226, 238, 81, 2, 113, 32, 189, 252, 209, 50, 70, 175, 62, 130, 90, 184, 129, 104, 71, 233, 187, 72, 151, 181, 84, 210, 48, 47, 131, 101, 229, 123, 182, 134, 235, 108, 43, 206, 77, 187, 209, 65, 41, 188, 132, 39, 57, 106, 220, 134, 189, 79, 245, 104, 129, 213, 229, 192, 10, 86, 92, 77, 70, 39, 150, 36, 237, 158, 214, 254, 35, 2, 135, 193, 207, 16, 36, 153, 234, 116, 114, 209, 71, 181, 62, 24, 177, 96, 233, 36, 75, 80, 129, 73, 57, 189, 92, 72, 120, 73, 161, 15, 19, 11, 158, 171, 21, 207, 123, 225, 146, 73, 102, 145, 62, 214, 47, 10, 64, 129, 89, 26, 76, 169, 162, 48, 129, 169, 198, 208, 69, 70, 73, 175, 220, 209, 28, 159, 161, 230, 70, 124, 6, 109, 248, 57, 98, 159, 117, 179, 48, 159, 158, 158, 223, 23, 37, 254, 215, 158, 220, 123, 202, 163, 128, 139, 96, 81, 12, 56, 99, 147, 182, 186, 186, 184, 178, 199, 233, 226, 15, 194, 145, 119, 146, 118, 80, 38, 99, 248, 115, 6, 204, 90, 97, 45, 140, 210, 67, 208, 209, 90, 240, 55, 76, 134, 179, 114, 111, 161, 58, 173, 21, 202, 17, 77, 23, 206, 143, 147, 223, 117, 7, 154, 96, 202, 26, 190, 19, 34, 79, 10, 207, 14, 205, 33, 4, 75, 17, 184, 36, 51, 13, 68, 51, 58, 237, 66, 242, 67, 36, 225, 138, 240, 202, 168, 207, 251, 114, 133, 142, 140, 110, 101, 217, 129, 47, 175, 19, 167, 172, 77, 133, 183, 221, 213, 81, 217, 69, 222, 56, 109, 153, 127, 133, 141, 55, 127, 108, 152, 233, 97, 227, 78, 140, 66, 158, 110, 178, 85, 192, 104, 120, 233, 52, 62, 117, 219, 165, 125, 147, 201, 110, 57, 78, 246, 212, 231, 251, 225, 151, 139, 0, 122, 63, 149, 51, 132, 8, 131, 169, 71, 175, 246, 227, 222, 191, 187, 154, 167, 171, 202, 22, 130, 154, 251, 56, 190, 250, 28, 87, 239, 144, 41, 250, 12, 125, 151, 189, 18, 110, 226, 177, 126, 166, 171, 62, 220, 74, 100, 109, 237, 67, 178, 221, 134, 172, 176, 120, 220, 119, 56, 106, 203, 120, 9, 101, 124, 163, 144, 85, 119, 191, 44, 183, 92, 93, 27, 129, 50, 105, 212, 101, 142, 203, 236, 111, 104, 143, 89, 62, 230, 196, 153, 26, 220, 132, 37, 171, 41, 50, 227, 55, 12, 205, 194, 116, 144, 42, 249, 6, 165, 36, 225, 126, 145, 137, 201, 99, 64, 115, 209, 154, 1, 198, 21, 51, 81, 35, 122, 53, 158, 49, 231, 157, 153, 138, 186, 240, 160, 208, 178, 254, 87, 1, 152, 153, 220, 122, 103, 13, 94, 60, 2, 220, 42, 115, 68, 197, 58, 166, 175, 184, 27, 52, 131, 231, 35, 31, 50, 27, 124, 212, 251, 157, 110, 158, 185, 14, 117, 64, 50, 94, 175, 132, 131, 218, 157, 153, 57, 96, 3, 51, 86, 212, 79, 163, 44, 137, 45, 123, 117, 160, 57, 203, 252, 73, 123, 222, 244, 75, 21, 25, 59, 128, 229, 73, 192, 204, 109, 96, 172, 177, 178, 7, 191, 253, 137, 133, 175, 211, 17, 9, 1, 57, 231, 33, 118, 72, 121, 166, 77, 177, 194, 251, 221, 44, 77, 154, 168, 190, 158, 100, 196, 128, 164, 119, 25, 95, 201, 134, 233, 129, 191, 24, 225, 153, 5, 140, 10, 168, 25, 45, 237, 42, 94, 221, 119, 104, 36, 226, 241, 86, 129, 122, 159, 213, 18, 242, 7, 34, 6, 44, 202, 75, 76, 238, 108, 135, 89, 226, 212, 193, 241, 86, 140, 164, 197, 93, 132, 136, 87, 139, 167, 114, 212, 204, 154, 89, 24, 222, 44, 2, 247, 167, 238, 138, 177, 139, 59, 62, 61, 26, 238, 31, 66, 201, 178, 55, 73, 205, 159, 100, 191, 75, 149, 139, 64, 232, 112, 211, 8, 54, 58, 194, 215, 106, 97, 84, 4, 121, 38, 156, 123, 254, 226, 36, 50, 132, 70, 96, 152, 59, 224, 2, 142, 205, 8, 93, 117, 215, 73, 222, 147, 41, 183, 133, 124, 163, 134, 24, 10, 97, 234, 21, 86, 229, 250, 199, 97, 195, 160, 60, 83, 24, 75, 229, 104, 111, 91, 191, 107, 156, 255, 246, 82, 135, 255, 5, 48, 110, 17, 59, 169, 35, 194, 161, 138, 224, 105, 181, 255, 197, 90, 174, 199, 113, 50, 26, 250, 250, 160, 67, 39, 43, 41, 5, 163, 114, 213, 7, 105, 185, 125, 248, 14, 168, 182, 69, 36, 124, 242, 1, 11, 57, 26, 145, 136, 97, 6, 245, 40, 146, 58, 218, 74, 91, 117, 31, 115, 69, 1, 112, 43, 54, 195, 224, 89, 105, 83, 215, 103, 16, 104, 156, 161, 240, 41, 188, 169, 75, 216, 231, 67, 199, 78, 38, 74, 0, 150, 67, 124, 75, 184, 81, 148, 25, 200, 19, 74, 205, 235, 47, 152, 184, 59, 88, 237, 251, 199, 232, 246, 254, 65, 109, 88, 250, 154, 198, 175, 61, 31, 169, 103, 206, 65, 113, 14, 179, 66, 139, 191, 69, 56, 145, 111, 249, 14, 28, 8, 31, 167, 117, 248, 12, 110, 86, 80, 94, 243, 114, 153, 242, 192, 60, 243, 180, 208, 164, 101, 7, 207, 109, 30, 153, 226, 129, 93, 211, 246, 41, 87, 179, 184, 119, 177, 63, 8, 74, 169, 216, 62, 38, 238, 54, 213, 80, 213, 221, 138, 79, 191, 141, 70, 143, 52, 47, 79, 184, 14, 247, 215, 251, 118, 211, 122, 45, 224, 70, 28, 52, 0, 148, 197, 170, 101, 196, 86, 56, 249, 241, 172, 70, 245, 215, 123, 134, 246, 150, 34, 233, 28, 135, 148, 63, 155, 94, 151, 142, 221, 247, 183, 27, 134, 166, 232, 198, 27, 28, 92, 49, 245, 169, 252, 193, 163, 51, 239, 246, 100, 94, 121, 181, 47, 51, 67, 46, 71, 95, 131, 26, 10, 46, 241, 202, 72, 1, 255, 144, 37, 141, 132, 142, 38, 218, 211, 177, 155, 121, 108, 160, 79, 197, 38, 249, 211, 7, 12, 172, 126, 155, 114, 198, 207, 228, 133, 226, 130, 170, 31, 133, 95, 111, 62, 64, 100, 195, 141, 59, 87, 206, 197, 204, 207, 210, 197, 158, 214, 128, 31, 100, 79, 204, 31, 32, 53, 31, 38, 250, 211, 198, 234, 111, 72, 241, 7, 66, 231, 126, 126, 25, 243, 85, 16, 155, 168, 69, 112, 93, 90, 101, 63, 45, 226, 214, 204, 83, 243, 74, 82, 20, 225, 19, 37, 172, 56, 116, 31, 248, 124, 227, 251, 28, 39, 167, 32, 170, 198, 20, 114, 33, 111, 180, 115, 110, 185, 35, 15, 134, 4, 78, 219, 97, 146, 61, 173, 135, 64, 64, 38, 71, 49, 101, 205, 5, 225, 111, 99, 134, 245, 115, 126, 102, 115, 104, 56, 11, 243, 131, 148, 59, 187, 75, 140, 192, 129, 33, 42, 170, 39, 113, 124, 227, 218, 120, 161, 143, 240, 3, 91, 110, 152, 25, 65, 116, 122, 184, 36, 249, 255, 224, 152, 148, 204, 5, 115, 150, 91, 63, 216, 7, 253, 158, 21, 108, 79, 104, 78, 213, 174, 86, 96, 129, 216, 243, 254, 19, 221, 5, 39, 174, 134, 199, 120, 180, 85, 58, 189, 219, 230, 190, 10, 252, 254, 143, 227, 126, 117, 202, 168, 94, 46, 251, 65, 57, 95, 249, 222, 186, 36, 98, 171, 53, 47, 14, 188, 140, 31, 236, 70, 67, 163, 33, 50, 152, 48, 29, 28, 102, 14, 141, 101, 104, 109, 60, 133, 182, 4, 54, 23, 199, 147, 162, 200, 128, 71, 244, 36, 110, 185, 82, 237, 183, 160, 205, 57, 199, 233, 128, 228, 223, 190, 71, 23, 66, 200, 146, 47, 45, 80, 111, 85, 98, 78, 180, 67, 165, 157, 24, 99, 201, 99, 157, 199, 164, 159, 49, 245, 187, 204, 128, 206, 192, 254, 79, 155, 152, 47, 48, 34, 110, 34, 180, 250, 233, 201, 107, 142, 68, 217, 242, 48, 214, 147, 129, 172, 213, 111, 231, 165, 117, 241, 184, 4, 135, 111, 9, 1, 186, 233, 122, 22, 7, 149, 114, 247, 117, 6, 228, 45, 111, 133, 11, 166, 57, 154, 246, 147, 31, 112, 122, 151, 175, 79, 160, 109, 88, 226, 169, 125, 32, 178, 29, 142, 227, 175, 72, 213, 245, 142, 64, 76, 32, 211, 202, 201, 157, 40, 36, 141, 174, 166, 139, 208, 212, 119, 58, 253, 40, 183, 103, 161, 175, 188, 90, 233, 102, 79, 28, 8, 146, 146, 32, 82, 143, 31, 89, 32, 52, 10, 35, 0, 156, 32, 253, 55, 184, 54, 18, 58, 94, 252, 18, 230, 101, 71, 223, 216, 130, 68, 158, 51, 222, 150, 79, 113, 181, 131, 116, 16, 142, 65, 178, 88, 55, 49, 151, 131, 244, 99, 85, 31, 34, 7, 244, 225, 39, 202, 216, 153, 163, 253, 205, 249, 221, 240, 71, 39, 109, 123, 62, 53, 141, 133, 130, 237, 152, 69, 214, 67, 122, 129, 184, 134, 120, 126, 90, 249, 24, 7, 64, 115, 2, 57, 103, 221, 0, 91, 188, 220, 112, 24, 200, 245, 200, 53, 182, 150, 158, 56, 50, 67, 34, 212, 245, 159, 121, 143, 223, 253, 225, 155, 34, 209, 58, 208, 194, 201, 234, 113, 70, 229, 141, 59, 25, 6, 101, 59, 103, 165, 9, 208, 4, 134, 108, 56, 158, 227, 2, 203, 66, 225, 3, 193, 149, 196, 250, 157, 116, 28, 139, 130, 130, 205, 159, 162, 120, 43, 185, 173, 33, 124, 58, 47, 191, 206, 120, 139, 103, 98, 175, 130, 166, 7, 38, 237, 188, 13, 88, 70, 203, 208, 160, 204, 161, 249, 124, 239, 244, 96, 191, 147, 122, 94, 116, 149, 234, 154, 228, 0, 44, 134, 204, 124, 226, 160, 26, 156, 108, 27, 38, 106, 111, 94, 43, 82, 18, 111, 229, 6, 16, 192, 181, 32, 174, 86, 20, 189, 80, 40, 187, 47, 38, 93, 199, 39, 161, 5, 21, 213, 210, 167, 67, 242, 40, 19, 88, 38, 164, 218, 98, 59, 36, 226, 10, 150, 189, 119, 150, 251, 190, 68, 87, 135, 128, 78, 191, 155, 231, 182, 51, 200, 143, 107, 208, 119, 83, 120, 8, 111, 59, 183, 97, 157, 5, 180, 211, 194, 210, 106, 197, 21, 80, 5, 117, 115, 23, 217, 207, 188, 132, 114, 120, 71, 221, 20, 205, 94, 186, 41, 167, 7, 185, 173, 54, 54, 105, 201, 190, 181, 253, 14, 77, 95, 90, 153, 180, 95, 89] - ], - "segmentSize": null - }, - { - "encrypted": [ - [166, 239, 115] - ], - "iv": null, - "key": [36, 248, 116, 128, 247, 111, 215, 17, 104, 181, 13, 56, 195, 127, 142, 244, 197, 38, 89, 118, 176, 222, 52, 61], - "modeOfOperation": "ctr", - "plaintext": [ - [80, 18, 185] - ], - "segmentSize": null - }, - { - "encrypted": [ - [193, 201, 47, 98, 106, 128, 0, 227, 189, 61, 113, 165, 97, 146, 30, 231] - ], - "iv": null, - "key": [208, 209, 149, 5, 128, 218, 253, 112, 12, 176, 112, 88, 161, 18, 196, 0, 27, 138, 119, 143, 173, 7, 173, 141], - "modeOfOperation": "ctr", - "plaintext": [ - [142, 64, 205, 193, 120, 1, 82, 32, 17, 206, 239, 159, 193, 87, 40, 197] - ], - "segmentSize": null - }, - { - "encrypted": [ - [244, 118, 167, 247, 130, 131, 112, 195, 77, 22, 120, 84, 78, 153, 243, 203, 68, 3, 119, 178, 47, 253, 64, 220, 117, 116, 53, 251, 134, 169, 165, 217, 87, 9, 96, 207, 220, 20, 118, 124, 162, 111, 97, 245, 28, 16, 118, 249, 127, 107, 231, 245, 4, 117, 38, 187, 104, 99, 204, 56, 222, 55, 231, 236, 145, 133, 123, 152, 44, 216, 52, 192, 8, 123, 68, 203, 59, 111, 98, 78, 55, 18, 136, 159, 68, 119, 218, 244, 62, 34, 138, 247, 250, 80, 166, 245, 227, 218, 205, 114, 207, 5, 209, 172, 114, 33, 16, 52, 206, 231, 234, 86, 72, 165, 6, 131, 198, 174, 244, 193, 4, 90, 193, 36, 239, 25, 142] - ], - "iv": null, - "key": [193, 32, 44, 115, 208, 106, 75, 110, 181, 205, 225, 87, 120, 152, 141, 113, 158, 43, 130, 239, 201, 105, 94, 156], - "modeOfOperation": "ctr", - "plaintext": [ - [3, 45, 65, 61, 221, 43, 121, 57, 116, 150, 162, 107, 68, 237, 213, 148, 112, 18, 11, 169, 36, 193, 151, 53, 157, 171, 51, 140, 122, 91, 87, 206, 71, 231, 71, 237, 26, 20, 67, 163, 74, 125, 150, 146, 48, 108, 218, 73, 49, 243, 154, 90, 31, 240, 64, 182, 21, 141, 178, 4, 48, 143, 13, 177, 27, 60, 114, 111, 221, 28, 160, 168, 117, 61, 203, 26, 239, 3, 124, 37, 172, 183, 124, 207, 214, 102, 203, 53, 55, 45, 103, 34, 19, 248, 242, 176, 171, 129, 226, 181, 43, 30, 94, 162, 14, 141, 156, 4, 54, 115, 20, 109, 48, 61, 44, 254, 24, 84, 112, 102, 1, 99, 165, 42, 13, 148, 151] - ], - "segmentSize": null - }, - { - "encrypted": [ - [152, 28, 168, 58, 69, 157, 226, 97, 227, 60, 2, 227, 129, 11, 170, 21, 181, 39, 51, 180, 226, 46, 172, 201, 151, 254, 45, 9, 26, 211, 88, 227, 105, 105, 143, 201, 172, 150, 155, 33, 243, 21, 70, 27, 73, 222, 91, 193, 91, 169, 227, 3, 52, 86, 18, 180, 139, 137, 13, 158, 98, 218, 122, 133, 15, 156, 70, 186, 44, 38, 135, 21, 226, 78, 6, 132, 250, 54, 98, 163, 3, 181, 4, 152, 34, 189, 3, 206, 184, 94, 95, 82, 112, 72, 44, 23, 123, 131, 16, 203, 61, 47, 88, 91, 75, 90, 149, 124, 153, 157, 240, 233, 212, 73, 37, 52, 248, 189, 236, 27, 202, 228, 7, 221, 60, 96, 63, 26] - ], - "iv": null, - "key": [196, 96, 249, 203, 121, 96, 57, 184, 239, 193, 151, 117, 148, 220, 45, 244, 152, 121, 206, 248, 3, 235, 71, 179], - "modeOfOperation": "ctr", - "plaintext": [ - [90, 64, 10, 252, 41, 201, 129, 200, 220, 114, 253, 128, 25, 213, 196, 195, 215, 86, 184, 195, 79, 150, 13, 95, 125, 30, 49, 15, 173, 90, 53, 209, 134, 192, 165, 158, 23, 70, 162, 178, 9, 198, 105, 155, 240, 113, 77, 215, 201, 241, 108, 125, 255, 71, 245, 165, 59, 132, 83, 40, 192, 237, 120, 73, 124, 58, 118, 19, 28, 228, 45, 121, 236, 8, 63, 137, 213, 7, 114, 160, 189, 158, 73, 184, 42, 186, 249, 238, 191, 244, 170, 53, 145, 44, 72, 235, 37, 178, 51, 183, 125, 8, 120, 147, 73, 177, 36, 122, 226, 130, 217, 127, 117, 18, 6, 134, 80, 110, 42, 134, 67, 9, 122, 49, 42, 16, 73, 180] - ], - "segmentSize": null - }, - { - "encrypted": [ - [68, 19, 112, 68, 32, 94, 130, 183, 230, 200, 0, 149, 177, 239, 203, 254, 144, 100, 85, 213, 98, 251, 15, 144, 39, 137, 148, 99, 182, 79, 45, 131, 95, 162, 165, 175, 85, 27, 94, 50, 254, 135, 243, 49, 202, 89, 106, 241, 187, 84, 136, 207, 44, 245, 171, 246, 123, 33, 90, 0, 142, 203, 237, 107, 91, 111, 82, 75, 190, 7, 232, 242, 54, 160, 87, 135, 155, 128, 226, 111, 101, 219, 228, 63, 168, 129, 83, 71, 255, 69, 82, 227, 26, 33, 205, 180, 98, 64, 198, 250, 58, 138, 58, 74, 61, 59, 135, 92, 74, 98, 122, 252, 240, 177, 121, 61, 55, 70, 220, 62, 95, 250, 158, 250, 213, 87, 197, 246, 130] - ], - "iv": null, - "key": [201, 250, 88, 207, 137, 178, 218, 34, 149, 63, 80, 170, 211, 97, 191, 45, 30, 206, 46, 182, 32, 188, 114, 127], - "modeOfOperation": "ctr", - "plaintext": [ - [186, 128, 239, 163, 58, 35, 129, 188, 26, 225, 221, 167, 30, 13, 203, 229, 239, 91, 30, 64, 234, 67, 74, 242, 126, 137, 15, 109, 163, 80, 117, 171, 59, 218, 192, 191, 53, 206, 167, 136, 139, 218, 6, 241, 246, 243, 179, 216, 136, 189, 183, 237, 199, 222, 137, 249, 223, 226, 191, 13, 241, 190, 227, 70, 207, 84, 156, 0, 103, 74, 71, 77, 13, 134, 113, 159, 101, 243, 122, 22, 242, 193, 204, 156, 201, 51, 203, 90, 25, 121, 190, 201, 26, 249, 119, 188, 241, 165, 83, 86, 232, 19, 168, 137, 233, 235, 167, 68, 229, 165, 126, 1, 124, 89, 123, 75, 228, 139, 176, 119, 58, 205, 242, 124, 255, 238, 132, 205, 249] - ], - "segmentSize": null - }, - { - "encrypted": [ - [230, 67, 233, 235, 169, 96, 197, 60, 253, 218, 1, 91, 50, 4, 233, 153, 135, 194, 96, 153, 97, 194, 252, 134, 17, 95, 211, 25, 132, 12, 13, 141, 169, 31, 16, 255, 84, 229, 88, 186, 107, 24, 91, 232, 21, 221, 205, 159, 243, 229, 32, 61, 139, 69, 107, 35, 187, 9, 195, 250, 49, 80, 88, 19, 130, 154, 201, 141, 254, 126, 132, 141, 130, 171, 231, 180, 186, 152, 114, 2, 146, 156, 173, 93, 90, 236, 6, 148, 90, 127, 75, 182, 191, 8, 246, 99, 185, 141, 0, 139, 26, 212, 71, 40, 130, 101, 74, 182, 148, 103, 43, 219, 159, 60, 146, 194, 54, 53, 254, 135, 18, 23, 154, 194, 101, 251, 43, 1, 211, 218, 109, 193, 16, 124, 235, 236, 53, 62, 147, 75, 217, 15, 186, 77, 222, 46, 205, 127, 45, 46, 57, 118, 166, 228, 216, 48, 7, 81, 22, 229, 128, 104, 214, 243, 235, 75, 27, 125, 216, 160, 98, 177, 124, 183, 163, 21, 190, 185, 106, 88, 226, 235, 178, 232, 114, 107, 136, 121, 116, 72, 231, 126, 111, 151, 136, 136, 104, 138, 19, 166, 124, 25, 224, 5, 3, 8, 73, 255, 87, 243, 248, 160, 51, 189, 61, 238, 143, 19, 131, 233, 112, 230, 143, 94, 72, 66, 91, 88, 186, 79, 239, 233, 56, 114, 15, 181, 228, 29, 102, 87, 64, 152, 254, 186, 185, 140, 245, 181, 75, 132, 18, 139, 145, 172, 103, 60, 240, 97, 92, 245, 26, 138, 210, 55, 253, 242, 217, 234, 207, 10, 174, 7, 202, 245, 143, 226, 25, 216, 35, 41, 108, 152, 219, 152, 36, 26, 110, 205, 125, 173, 135, 170, 36, 119, 76, 33, 118, 59, 76, 75, 117, 175, 55, 188, 223, 138, 158, 202, 145, 75, 254, 225, 151, 211, 51, 145, 35, 39, 47, 39, 146, 37, 157, 224, 72, 219, 123, 36, 26, 205, 8, 230, 152, 188, 236, 87, 24, 44, 220, 96, 49, 243, 51, 61, 83, 119, 248, 75, 114, 105, 194, 137, 112, 2, 148, 222, 124, 196, 56, 135, 1, 193, 126, 16, 243, 201, 231, 118, 151, 244, 68, 78, 151, 90, 153, 238, 98, 33, 47, 248, 235, 75, 76, 57, 24, 240, 80, 80, 66, 20, 188, 4, 114, 218, 134, 157, 238, 10, 99, 76, 170, 16, 71, 155, 154, 93, 220, 68, 7, 116, 193, 141, 170, 147, 182, 191, 23, 236, 11, 81, 234, 162, 120, 158, 227, 30, 230, 139, 212, 213, 23, 254, 78, 110, 120, 213, 221, 96, 0, 84, 127, 36, 249, 161, 37, 83, 229, 103, 205, 179, 108, 231, 16, 116, 183, 230, 9, 158, 23, 227, 82, 227, 201, 71, 155, 233, 120, 118, 134, 166, 88, 54, 113, 229, 52, 246, 173, 255, 237, 110, 4, 102, 231, 60, 158, 50, 80, 49, 99, 254, 195, 35, 38, 197, 212, 21, 144, 201, 169, 137, 13, 239, 188, 138, 43, 184, 116, 22, 189, 97, 99, 169, 218, 150, 1, 58, 107, 241, 163, 156, 223, 30, 234, 41, 200, 165, 75, 140, 188, 4, 251, 225, 132, 193, 149, 161, 83, 7, 226, 5, 166, 120, 108, 234, 24, 201, 0, 66, 67, 34, 235, 135, 92, 202, 34, 85, 129, 151, 230, 167, 222, 77, 27, 149, 49, 172, 215, 129, 225, 136, 45, 189, 210, 71, 96, 214, 36, 161, 64, 124, 71, 239, 125, 27, 201, 169, 203, 16, 117, 63, 224, 49, 146, 203, 196, 194, 177, 66, 77, 36, 51, 28, 72, 149, 55, 85, 103, 208, 95, 63, 151, 87, 207, 168, 218, 21, 233, 238, 168, 72, 92, 166, 235, 37, 55, 78, 228, 200, 6, 243, 20, 92, 44, 134, 98, 119, 43, 148, 129, 116, 155, 129, 169, 102, 159, 186, 140, 191, 46, 177, 175, 136, 7, 31, 47, 73, 45, 139, 159, 90, 29, 93, 94, 175, 200, 50, 233, 210, 228, 109, 8, 233, 58, 222, 87, 46, 100, 138, 13, 72, 79, 232, 253, 82, 203, 134, 35, 189, 176, 82, 242, 41, 95, 69, 222, 103, 5, 140, 161, 235, 172, 208, 160, 166, 171, 3, 148, 43, 228, 23, 161, 145, 69, 196, 29, 46, 161, 141, 203, 135, 43, 229, 51, 205, 210, 188, 81, 3, 182, 145, 253, 230, 206, 104, 74, 25, 61, 38, 245, 60, 72, 224, 116, 7, 247, 43, 42, 228, 195, 35, 13, 98, 62, 250, 165, 207, 44, 28, 192, 37, 246, 228, 103, 19, 13, 142, 245, 57, 96, 170, 183, 62, 213, 95, 227, 224, 83, 236, 207, 244, 218, 191, 188, 38, 10, 53, 114, 74, 24, 172, 228, 62, 250, 220, 41, 78, 248, 95, 43, 195, 45, 116, 134, 183, 169, 133, 195, 248, 102, 122, 69, 128, 255, 252, 136, 168, 246, 33, 131, 233, 25, 158, 105, 144, 155, 130, 178, 55, 190, 154, 187, 181, 221, 148, 51, 47, 197, 69, 245, 233, 52, 194, 0, 192, 131, 39, 194, 176, 59, 193, 215, 42, 173, 203, 232, 182, 105, 40, 208, 68, 160, 223, 221, 170, 27, 86, 237, 195, 188, 235, 64, 125, 29, 243, 232, 174, 62, 103, 232, 225, 91, 21, 4, 2, 222, 95, 21, 55, 250, 67, 229, 49, 152, 142, 181, 128, 47, 115, 43, 224, 156, 221, 112, 249, 169, 240, 122, 101, 78, 253, 4, 37, 82, 172, 0, 234, 175, 214, 83, 221, 85, 121, 61, 147, 220, 203, 172, 37, 84, 125, 138, 166, 181, 71, 116, 229, 53, 125, 149, 90, 252, 176, 139, 198, 87, 178, 48, 129, 155, 180, 44, 219, 71, 14, 177, 194, 191, 199, 158, 186, 50, 251, 87, 95, 105, 243, 151, 65, 177, 151, 24, 35, 101, 191, 36, 201, 254, 53, 253, 152, 124, 224, 117, 231, 236, 68, 45, 138, 116, 39, 133, 178, 254, 84, 164, 64, 60, 11, 249, 246, 226, 53, 192, 245, 36, 107, 125, 109, 37, 217, 163, 88, 179, 218, 53, 134, 183, 182, 18, 189, 153, 161, 214, 199, 187, 196, 64, 110, 99, 227, 94, 219, 242, 13, 42, 200, 187, 96, 64, 186, 173, 117, 124, 23, 41, 244, 157, 117, 96, 34, 92, 222, 144, 214, 246, 184, 35, 245, 153, 182, 30, 24, 81, 80, 159, 174, 83, 196, 246, 49, 169, 0, 143, 230, 127, 185, 184, 10, 147, 111, 67, 125, 149, 25, 13, 21, 13, 77, 245, 135, 105, 105, 17, 97, 227, 25, 232, 182, 27, 228, 247, 18, 183, 103, 150, 153, 139, 181, 49, 252, 85, 137, 104, 25, 166, 167, 63, 169, 92, 169, 31, 253, 92, 248, 160, 229, 80, 164, 211, 194, 160, 35, 116, 213, 105, 166, 8, 83, 141, 22, 222, 131, 68, 10, 75, 6, 169, 3, 161, 215, 175, 175, 236, 216, 127, 251, 206, 188, 213, 221, 86, 123, 30, 82, 253, 63, 153, 167, 51, 29, 120, 2, 8, 215, 36, 2, 22, 72, 24, 251, 244, 228, 155, 18, 184, 161, 77, 232, 248, 135, 245, 44, 35, 163, 28, 35, 169, 231, 223, 14, 152, 35, 80, 72, 213, 139, 32, 159, 43, 247, 229, 151, 1, 157, 26, 57, 93, 130, 238, 202, 58, 209, 140, 208, 121, 186, 209, 17, 53, 200, 57, 85, 99, 84, 189, 181, 57, 76, 232, 247, 147, 210, 188, 198, 111, 162, 75, 85, 238, 66, 188, 201, 50, 175, 42, 218, 56, 220, 166, 81, 100, 193, 33, 129, 199, 217, 168, 77, 114, 61, 175, 82, 236, 40, 49, 92, 15, 165, 210, 109, 161, 203, 90, 241, 44, 189, 88, 13, 244, 41, 88, 200, 220, 104, 210, 210, 95, 47, 241, 176, 30, 207, 81, 162, 131, 185, 99, 96, 90, 142, 193, 170, 32, 198, 144, 33, 250, 85, 48, 136, 87, 134, 87, 255, 29, 147, 186, 170, 192, 250, 253, 247, 49, 17, 33, 248, 217, 64, 73, 208, 85, 185, 135, 72, 226, 17, 112, 98, 111, 202, 48, 9, 145, 244, 65, 242, 75, 75, 139, 177, 253, 107, 134, 86, 0, 241, 177, 218, 54, 243, 127, 103, 13, 173, 42, 149, 72, 62, 202, 87, 205, 255, 188, 12, 45, 163, 35, 104, 184, 1, 184, 101, 130, 154, 232, 44, 47, 13, 183, 93, 213, 172, 213, 173, 99, 221, 182, 60, 75, 236, 137, 254, 96, 218, 199, 241, 28, 228, 21, 26, 105, 203, 10, 61, 219, 196, 35, 225, 129, 111, 100, 78, 243, 172, 226, 233, 24, 18, 89, 90, 4, 69, 195, 6, 164, 210, 156, 34, 77, 41, 43, 237, 252, 141, 5, 104, 195, 76, 178, 194, 127, 193, 233, 218, 0, 242, 143, 170, 80, 173, 234, 236, 228, 84, 236, 117, 107, 227, 89, 134, 155, 13, 17, 241, 190, 144, 68, 44, 198, 220, 128, 237, 178, 144, 243, 241, 108, 232, 134, 51], - [225, 255, 226, 25, 110, 123, 41, 63, 84, 88, 111, 231, 137, 66, 205, 212, 209, 31, 97, 172, 17, 115, 109, 244, 115, 110, 37, 126, 95, 190, 115, 77, 63, 119, 185, 175, 67, 191, 134, 107, 212, 240, 199, 139, 120, 59, 3, 125, 194, 233, 218, 94, 21, 6, 118, 154, 184, 160, 255, 172, 175, 208, 27, 105, 167, 45, 23, 31, 183, 166, 16, 182, 183, 234, 56, 116, 252, 105, 52, 44, 102, 203, 97, 229, 73, 244, 253, 250, 40, 179, 42, 222, 112, 190, 156, 251, 109, 181, 144, 239, 120, 182, 240, 139, 237, 133, 141, 38, 211, 78, 56, 215, 71, 156, 212, 133, 15, 59, 125, 44, 211, 145, 47, 219, 99, 139, 161, 218, 147, 66, 145, 75, 93, 105, 167, 171, 197, 121, 217, 68, 16, 131, 203, 139, 231, 207, 221, 241, 102, 254, 6, 139, 226, 197, 255, 126, 38, 18, 217, 195, 218, 178, 67, 223, 105, 117, 47, 76, 71, 125, 66, 163, 131, 124, 141, 19, 13, 81, 27, 206, 121, 178, 76, 19, 132, 207, 205, 193, 103, 55, 152, 80, 151, 189, 38, 187, 240, 62, 37, 63, 197, 246, 149, 240, 228, 154, 21, 44, 0, 3, 90, 152, 184, 240, 169, 232, 56, 142, 185, 147, 238, 103, 49, 6, 165, 83, 141, 173, 97, 240, 136, 181, 32, 184, 182, 241, 179, 41, 209, 195, 42, 167, 55, 152, 180, 176, 212, 9, 89, 62, 160, 250, 68, 72, 5, 110, 246, 130, 104, 209, 240, 190, 196, 98, 40, 190, 235, 74, 32, 66, 226, 134, 223, 123, 7, 15, 105, 173, 17, 171, 48, 30, 158, 157, 202, 38, 44, 115, 95, 210, 247, 34, 86, 56, 42, 81, 119, 106, 34, 42, 141, 7, 128, 208, 45, 49, 212, 99, 216, 141, 94, 132, 9, 160, 207, 126, 216, 245, 146, 233, 35, 254, 175, 196, 137, 39, 141, 225, 94, 155, 191, 217, 56, 210, 79, 141, 116, 156, 212, 225, 205, 151, 138, 13, 251, 58, 98, 11, 23, 150, 74, 85, 106, 59, 201, 23, 10, 220, 224, 151, 236, 11, 4, 155, 28, 91, 151, 100, 249, 149, 154, 214, 183, 77, 130, 114, 129, 39, 120, 171, 106, 49, 68, 232, 42, 51, 77, 133, 4, 140, 107, 110, 97, 125, 222, 172, 60, 177, 62, 249, 209, 24, 226, 200, 133, 32, 49, 81, 159, 253, 144, 111, 239, 241, 108, 108, 155, 78, 223, 37, 122, 82, 44, 32, 122, 195, 147, 251, 73, 176, 224, 236, 119, 26, 24, 56, 206, 17, 40, 209, 219, 188, 72, 120, 245, 152, 192, 206, 190, 241, 195, 165, 128, 232, 140, 82, 193, 232, 232, 218, 205, 147, 97, 254, 32, 129, 162, 201, 240, 64, 109, 186, 57, 214, 157, 72, 53, 208, 3, 100, 103, 18, 222, 1, 169, 73, 70, 33, 39, 208, 23, 160, 4, 101, 199, 58, 31, 171, 2, 153, 163, 234, 251, 237, 211, 43, 208, 192, 169, 51, 161, 55, 173, 12, 247, 138, 18, 63, 195, 227, 98, 215, 239, 78, 166, 80, 227, 179, 17, 255, 188, 144, 159, 176, 243, 87, 193, 203, 90, 165, 225, 174, 251, 104, 82, 8, 243, 83, 85, 209, 70, 37, 15, 204, 12, 180, 65, 119, 143, 97, 150, 58, 4, 18, 121, 214, 103, 144, 43, 253, 160, 250, 223, 175, 149, 38, 201, 159, 148, 24, 51, 178, 91, 88, 166, 77, 99, 148, 31, 8, 119, 250, 114, 235, 123, 149, 88, 197, 50, 56, 201, 129, 73, 8, 212, 214, 47, 236, 86, 35, 232, 173, 109, 14, 66, 193, 182, 64, 101, 25, 169, 198, 157, 81, 94, 111, 27, 38, 167, 233, 18, 236, 250, 239, 61, 202, 37, 96, 133, 89, 114, 39, 206, 194, 232, 143, 65, 88, 4, 211, 207, 230, 117, 27, 15, 200, 61, 137, 247, 145, 23, 34, 163, 153, 54, 110, 165, 174, 138, 122, 226, 76, 175, 247, 13, 182, 162, 141, 197, 249, 217, 186, 6, 73, 232, 219, 232, 195, 216, 247, 17, 146, 52, 237, 142, 139, 92, 94, 228, 49, 118, 107, 191, 190, 103, 12, 20, 140, 29, 239, 166, 134, 67, 130, 112, 208, 42, 122, 212, 137, 106, 52, 118, 79, 136, 177, 241, 71, 96, 167, 123, 129, 96, 31, 4, 120, 155, 130, 5, 213, 235, 232, 126, 61, 218, 91, 210, 21, 221, 163, 35, 76, 76, 225, 126, 7, 140, 107, 228, 215, 126, 226, 26, 255, 165, 218, 110, 3, 193, 86, 77, 97, 86, 113, 87, 206, 166, 78, 172, 126, 201, 137, 51, 43, 89, 84, 102, 94, 42, 180, 90, 9, 61, 117, 63, 100, 115, 138, 154, 52, 84, 57, 167, 161, 137, 171, 186, 110, 118, 0, 239, 64, 177, 151, 13, 24, 232, 195, 87, 66, 43, 21, 252, 114, 119, 117, 64, 76, 72, 108, 219, 191, 133, 103, 215, 12, 120, 11, 238, 53, 88, 62, 228, 182, 118, 32, 135, 166, 22, 173, 41, 14, 140, 200, 83, 209, 83, 46, 93, 198, 238, 176, 29, 24, 245, 223, 25, 14, 95, 36, 21, 226, 90, 160, 58, 22, 9, 183, 196, 46, 148, 125, 24, 179, 175, 0, 3, 44, 4, 50, 103, 34, 144, 96, 255, 193, 89, 136, 5, 26, 33, 37, 120, 104, 176, 176, 128, 127, 69, 131, 74, 6, 208, 121, 106, 231, 51, 85, 103, 78, 94, 93, 22, 192, 197, 190, 241, 236, 140, 89, 164, 14, 48, 157, 29, 51, 69, 194, 126, 189, 69, 202, 37, 156, 226, 30, 167, 154, 94, 112, 176, 203, 142, 71, 254, 81, 93, 104, 137, 39, 26, 23, 107, 213, 14, 20, 35, 98, 163, 57, 59, 97, 87, 109, 48, 137, 110, 150, 221, 207, 212, 186, 178, 173, 231, 196, 81, 180, 60, 255, 209, 215, 204, 69, 210, 213, 40, 150, 13, 16, 215, 110, 138, 248, 127, 38, 162, 45, 19, 180, 214, 189, 235, 148, 20, 198, 81, 225, 185, 191, 26, 226, 104, 173, 237, 71, 201, 175, 179, 112, 116, 89, 247, 170, 59, 184, 252, 226, 1, 191, 238, 205, 155, 255, 71, 201, 244, 183, 16, 164, 116, 214, 13, 137, 136, 59, 13, 216, 184, 204, 200, 133, 110, 168, 214, 33, 63, 93, 176, 212, 177, 79, 96, 245, 192, 207, 50, 207, 65, 237, 210, 64, 118, 50, 9, 0, 100, 197, 90, 162, 25, 235, 200, 244, 35, 202, 154, 30, 114, 160, 107, 61, 163, 254, 66, 33, 137, 0, 111, 96, 32, 1, 210, 206, 7, 101, 180, 182, 184, 16, 164, 170, 174, 125, 90, 242, 146, 66, 43, 97, 51, 240, 31, 124, 85, 162, 79, 92, 255, 243, 220, 194, 71, 84, 115, 85, 166, 217, 252, 36, 246, 92, 62, 244, 144, 4, 7, 161, 84, 143, 131, 150, 177, 80, 53, 164, 193, 206, 124, 1, 184, 148, 199, 218, 221, 88, 10, 86, 235, 70, 145, 250, 168, 1, 55, 52, 161, 247, 7, 71, 80, 251, 231, 100, 246, 235, 66, 22, 216, 106, 66, 100, 159, 121, 65, 5, 13, 89, 46, 6, 166, 247, 106, 96, 241, 43, 226, 112, 220, 209, 112, 188, 238, 171, 95, 226, 166, 212, 190, 139, 153, 117, 113, 132, 226, 32, 127, 229, 53, 70, 126, 158, 47, 154, 143, 182, 55, 113, 61, 128, 138, 119, 144, 25, 135, 185, 63, 76, 91, 201, 90, 170, 178, 226, 195, 35, 204, 174, 172, 222, 201, 82, 51, 137, 176, 209, 24, 24, 64, 251, 206, 219, 29, 11, 200, 156, 143, 253, 129, 56, 8, 49, 157, 142, 204, 249, 102, 136, 84, 165, 0, 6, 92, 2, 214, 240, 215, 234, 201, 60, 165, 17, 108, 91, 189, 240, 14, 179, 222, 36, 248, 119, 176, 159, 51, 79, 246, 197, 55, 153, 38, 117, 100, 84, 197, 87, 51, 195, 105, 24, 197, 169, 189, 33, 128, 105, 238, 253, 19, 227, 100, 32, 58, 225, 47, 165, 237, 65, 190, 168, 50, 198, 86, 20, 76, 68, 115, 139, 45, 223, 234, 128, 126, 140, 243, 102, 121, 120, 80, 45, 114, 222, 75, 26, 168, 62, 2, 41, 86, 101, 27, 117, 225, 38, 39, 83, 236, 112, 33, 240, 153, 200, 159, 174, 81, 84, 100, 19, 157, 184, 25, 77, 255, 29, 126, 20, 34, 160, 136, 232, 227, 133, 84, 245, 103, 3, 79, 140, 103, 41, 143, 4, 217, 76, 166, 186, 71, 200, 76, 56, 98, 44, 183, 206, 146, 86, 176, 135, 202, 237, 244, 251, 210, 139, 242, 243, 243, 131, 101, 173, 22, 78, 79, 68, 124, 214, 249, 171, 245, 189, 23, 90, 26, 7, 109, 179, 195, 38, 220, 197, 57, 99, 203, 80, 31, 61, 237, 172, 46, 232, 18, 62, 241, 108, 182, 67, 121, 33, 253, 18], - [184, 225, 197, 169, 245, 1, 97, 246, 150, 247, 147, 44, 11, 95, 110, 179, 231, 8, 72, 71, 29, 4, 117, 114, 73, 62, 221, 147, 240, 53, 201, 13, 107, 239, 8, 15, 3, 201, 115, 99, 24, 47, 31, 55, 75, 19, 71, 247, 158, 214, 213, 205, 71, 228, 181, 216, 137, 78, 226, 229, 162, 180, 203, 192, 75, 98, 184, 158, 123, 124, 68, 55, 64, 237, 137, 162, 245, 98, 107, 172, 96, 0, 158, 19, 183, 220, 23, 214, 1, 37, 138, 52, 198, 159, 230, 234, 202, 27, 82, 225, 113, 221, 197, 165, 178, 194, 161, 224, 103, 154, 28, 4, 213, 151, 145, 195, 166, 241, 156, 112, 66, 184, 22, 24, 134, 65, 92, 25, 111, 56, 75, 116, 233, 5, 201, 15, 40, 57, 151, 91, 41, 133, 159, 177, 165, 133, 45, 40, 84, 83, 60, 240, 115, 56, 57, 171, 60, 208, 138, 232, 142, 180, 72, 180, 193, 29, 100, 32, 52, 12, 209, 184, 68, 229, 202, 240, 233, 253, 32, 100, 215, 139, 2, 137, 120, 19, 74, 140, 11, 52, 94, 131, 233, 194, 20, 184, 236, 104, 14, 193, 25, 61, 220, 87, 210, 87, 10, 33, 0, 161, 89, 41, 29, 93, 106, 148, 38, 20, 71, 169, 194, 96, 43, 13, 72, 173, 137, 251, 211, 243, 161, 121, 241, 161, 95, 247, 125, 53, 40, 18, 143, 107, 37, 77, 110, 183, 182, 187, 251, 99, 155, 199, 146, 96, 37, 12, 255, 100, 38, 132, 72, 16, 185, 54, 157, 238, 90, 44, 72, 156, 215, 148, 142, 233, 123, 16, 168, 33, 159, 185, 212, 140, 146, 174, 27, 160, 76, 139, 207, 32, 13, 81, 29, 116, 44, 16, 176, 218, 118, 88, 3, 197, 6, 15, 148, 139, 235, 170, 112, 179, 146, 41, 235, 115, 189, 8, 113, 110, 143, 32, 0, 123, 10, 186, 27, 188, 158, 35, 187, 197, 243, 55, 175, 42, 39, 81, 49, 90, 174, 228, 114, 220, 68, 10, 114, 149, 94, 13, 163, 61, 129, 239, 159, 56, 95, 0, 121, 29, 109, 206, 170, 217, 79, 87, 246, 53, 128, 234, 47, 172, 106, 88, 42, 202, 14, 183, 186, 198, 181, 204, 181, 103, 84, 247, 91, 63, 66, 149, 49, 221, 41, 103, 141, 242, 59, 165, 120, 93, 94, 181, 74, 59, 28, 192, 147, 62, 170, 90, 125, 91, 122, 198, 35, 2, 159, 48, 134, 190, 151, 41, 54, 154, 55, 138, 248, 61, 153, 128, 210, 247, 46, 213, 131, 217, 15, 18, 215, 176, 131, 196, 216, 193, 198, 191, 137, 79, 197, 159, 54, 140, 83, 204, 32, 209, 132, 170, 212, 62, 189, 3, 184, 7, 22, 2, 53, 81, 2, 250, 210, 5, 124, 130, 54, 185, 163, 253, 26, 193, 92, 247, 13, 81, 126, 190, 199, 150, 102, 127, 3, 51, 174, 102, 55, 218, 77, 248, 251, 48, 118, 6, 78, 126, 75, 251, 120, 50, 223, 13, 78, 61, 151, 203, 47, 173, 230, 134, 45, 166, 19, 231, 37, 65, 73, 103, 140, 137, 175, 82, 194, 99, 114, 72, 60, 243, 187, 84, 71, 177, 97, 175, 147, 200, 161, 86, 107, 22, 142, 134, 167, 133, 123, 48, 25, 40, 66, 64, 73, 162, 157, 151, 1, 215, 58, 37, 122, 26, 43, 93, 235, 90, 147, 133, 220, 109, 111, 48, 255, 184, 126, 122, 12, 177, 181, 20, 182, 237, 249, 204, 27, 113, 172, 129, 240, 226, 254, 200, 231, 45, 239, 119, 12, 112, 31, 104, 59, 104, 177, 128, 243, 218, 75, 172, 37, 24, 140, 249, 24, 27, 171, 89, 161, 158, 120, 211, 251, 191, 103, 28, 223, 210, 75, 184, 66, 145, 237, 251, 117, 245, 63, 67, 132, 1, 61, 45, 178, 44, 126, 231, 123, 137, 194, 250, 17, 111, 209, 167, 230, 117, 72, 191, 81, 38, 143, 176, 141, 115, 42, 183, 64, 5, 36, 110, 47, 252, 223, 110, 195, 95, 126, 241, 214, 137, 148, 36, 224, 55, 239, 139, 71, 118, 214, 243, 114, 177, 139, 121, 169, 227, 68, 233, 81, 115, 35, 170, 102, 224, 190, 53, 236, 5, 192, 246, 241, 28, 113, 207, 146, 119, 49, 69, 243, 153, 172, 27, 136, 103, 175, 143, 95, 34, 36, 45, 78, 153, 226, 170, 54, 166, 177, 218, 117, 156, 144, 205, 196, 25, 238, 51, 86, 65, 15, 57, 51, 120, 160, 37, 27, 162, 177, 255, 241, 106, 207, 18, 145, 107, 156, 234, 91, 95, 122, 192, 176, 41, 145, 102, 238, 29, 198, 65, 125, 154, 61, 98, 95, 174, 255, 5, 93, 125, 197, 163, 238, 58, 87, 68, 153, 72, 158, 31, 116, 247, 202, 49, 64, 184, 244, 70, 60, 207, 42, 241, 114, 58, 91, 212, 255, 151, 149, 156, 148, 163, 210, 115, 155, 91, 222, 72, 58, 126, 94, 235, 163, 150, 46, 237, 162, 61, 84, 235, 138, 232, 229, 18, 130, 227, 131, 169, 100, 142, 20, 47, 195, 109, 57, 250, 240, 116, 32, 48, 192, 239, 135, 132, 118, 214, 17, 118, 194, 150, 107, 197, 35, 1, 101, 94, 91, 223, 77, 165, 154, 104, 164, 33, 195, 77, 124, 96, 206, 111, 164, 206, 236, 246, 72, 133, 201, 249, 151, 61, 209, 194, 39, 246, 30, 248, 65, 42, 67, 100, 65, 206, 79, 53, 53, 29, 239, 28, 43, 244, 219, 179, 45, 201, 88, 112, 61, 96, 71, 39, 131, 34, 155, 185, 65, 178, 0, 176, 208, 211, 59, 171, 186, 105, 74, 53, 255, 247, 164, 156, 86, 172, 243, 32, 196, 68, 245, 168, 44, 211, 59, 175, 244, 249, 164, 63, 212, 140, 218, 42, 134, 169, 32, 215, 237, 167, 132, 140, 35, 118, 159, 140, 85, 68, 20, 252, 197, 146, 21, 80, 126, 195, 117, 89, 34, 159, 159, 61, 231, 44, 167, 176, 2, 35, 205, 130, 200, 36, 133, 76, 161, 106, 183, 68, 176, 132, 118, 207, 195, 176, 156, 237, 249, 203, 57, 171, 213, 126, 190, 148, 141, 22, 166, 175, 29, 74, 43, 245, 12, 174, 178, 39, 19, 117, 250, 71, 113, 125, 138, 126, 137, 186, 25, 51, 234, 45, 200, 218, 76, 198, 19, 7, 156, 115, 195, 198, 241, 206, 20, 197, 56, 231, 191, 197, 201, 132, 231, 110, 189, 205, 145, 96, 107, 201, 118, 47, 129, 59, 122, 32, 179, 198, 242, 117, 192, 195, 9, 48, 89, 85, 57, 36, 215, 149, 84, 176, 125, 230, 141, 5, 213, 99, 10, 92, 8, 8, 237, 80, 49, 0, 219, 131, 245, 129, 91, 167, 6, 196, 137, 89, 237, 165, 139, 123, 42, 86, 136, 59, 137, 33, 166, 30, 22, 67, 171, 209, 41, 145, 138, 187, 68, 155, 186, 82, 43, 111, 135, 142, 59, 239, 60, 115, 45, 62, 54, 90, 114, 205, 189, 100, 73, 28, 250, 163, 159, 133, 20, 152, 24, 203, 188, 232, 176, 79, 53, 223, 141, 149, 192, 99, 178, 54, 125, 73, 142, 214, 11, 209, 129, 56, 100, 108, 184, 247, 115, 157, 35, 225, 107, 170, 47, 28, 45, 32, 4, 202, 85, 14, 237, 134, 147, 101, 167, 239, 130, 170, 200, 149, 196, 196, 215, 148, 227, 30, 202, 161, 191, 216, 0, 105, 93, 13, 177, 143, 29, 225, 161, 114, 108, 24, 71, 59, 233, 14, 157, 140, 194, 52, 248, 227, 227, 158, 121, 233, 174, 91, 217, 181, 44, 142, 59, 76, 221, 9, 206, 157, 122, 181, 0, 45, 149, 133, 234, 247, 13, 15, 195, 73, 215, 177, 42, 10, 193, 239, 15, 23, 25, 43, 193, 224, 107, 170, 130, 95, 118, 67, 140, 94, 253, 79, 56, 72, 229, 79, 101, 91, 135, 198, 122, 52, 22, 55, 98, 47, 148, 56, 226, 20, 235, 206, 228, 246, 29, 177, 195, 46, 229, 68, 55, 56, 209, 123, 216, 184, 55, 168, 151, 102, 49, 65, 204, 5, 112, 95, 128, 206, 150, 178, 217, 162, 135, 193, 116, 164, 245, 68, 234, 116, 244, 146, 125, 106, 217, 169, 223, 253, 67, 126, 243, 60, 57, 251, 130, 248, 225, 64, 157, 128, 180, 43, 26, 68, 64, 160, 105, 82, 118, 117, 66, 170, 64, 87, 97, 33, 61, 124, 119, 192, 175, 235, 153, 153, 220, 52, 40, 148, 235, 85, 22, 129, 57, 134, 135, 232, 75, 101, 194, 234, 122, 85, 107, 52, 9, 157, 15, 120, 53, 29, 87, 70, 44, 126, 223, 179, 20, 27, 78, 168, 133, 67, 174, 66, 63, 234, 17, 153, 75, 33, 106, 240, 249, 95, 114, 69, 68, 211, 47, 110, 81, 180, 191, 156, 145, 57, 198, 24, 199, 161, 241, 94, 255, 37, 248, 93, 65, 39, 132, 67, 61, 123, 189, 133, 109, 145, 71, 64, 198, 164, 32, 192], - [210, 179, 52, 150, 126, 99, 51, 218, 93, 227, 170, 147, 254, 121, 226, 80, 75, 226, 105, 232, 201, 204, 173, 99, 3, 18, 58, 15, 72, 102, 72, 45, 43, 104, 227, 4, 73, 70, 217, 227, 56, 42, 235, 75, 213, 225, 203, 167, 153, 10, 169, 184, 224, 85, 13, 57, 31, 188, 227, 131, 15, 146, 50, 14, 134, 136, 115, 59, 240, 29, 243, 124, 55, 247, 83, 144, 154, 221, 24, 52, 14, 248, 14, 241, 52, 129, 183, 71, 36, 25, 154, 183, 129, 214, 220, 150, 240, 114, 52, 62, 31, 95, 88, 186, 0, 211, 194, 198, 235, 194, 69, 62, 112, 133, 86, 42, 140, 93, 56, 204, 155, 164, 72, 202, 105, 84, 6, 182, 104, 93, 37, 13, 1, 119, 228, 16, 84, 115, 189, 209, 124, 252, 198, 255, 109, 19, 119, 226, 91, 6, 161, 143, 161, 118, 237, 74, 101, 77, 145, 145, 70, 218, 35, 115, 169, 247, 13, 186, 39, 147, 79, 193, 131, 7, 3, 16, 245, 81, 137, 148, 67, 147, 186, 106, 23, 156, 53, 112, 205, 9, 115, 226, 216, 133, 135, 169, 237, 213, 31, 7, 167, 17, 219, 167, 82, 88, 101, 228, 197, 73, 90, 89, 42, 142, 240, 131, 23, 177, 213, 142, 16, 40, 31, 134, 162, 228, 3, 114, 77, 186, 103, 254, 224, 122, 236, 210, 132, 72, 199, 121, 131, 23, 233, 71, 133, 140, 228, 142, 225, 108, 127, 171, 47, 23, 92, 24, 222, 43, 224, 232, 46, 25, 192, 245, 129, 21, 215, 136, 148, 195, 227, 255, 23, 63, 116, 249, 150, 9, 161, 71, 1, 64, 85, 176, 71, 17, 57, 97, 229, 28, 44, 106, 3, 40, 56, 221, 224, 244, 233, 8, 249, 7, 130, 2, 149, 22, 66, 63, 109, 128, 117, 6, 161, 24, 74, 232, 81, 43, 45, 205, 34, 103, 102, 158, 255, 150, 154, 23, 181, 215, 70, 170, 165, 229, 130, 111, 56, 114, 18, 91, 106, 120, 85, 213, 34, 170, 220, 173, 235, 238, 91, 58, 229, 169, 250, 151, 119, 30, 162, 197, 60, 219, 31, 39, 78, 11, 15, 173, 76, 172, 72, 86, 97, 48, 96, 74, 240, 218, 179, 164, 120, 20, 250, 110, 176, 34, 190, 174, 221, 94, 15, 232, 67, 25, 159, 98, 105, 0, 78, 230, 70, 183, 226, 25, 169, 179, 231, 87, 180, 211, 171, 45, 74, 24, 173, 182, 49, 216, 77, 192, 78, 214, 112, 1, 247, 252, 245, 229, 95, 233, 143, 40, 120, 248, 8, 185, 71, 237, 240, 207, 167, 166, 203, 27, 182, 110, 251, 223, 233, 81, 105, 69, 169, 235, 141, 68, 253, 254, 182, 82, 44, 142, 2, 233, 121, 150, 80, 214, 60, 103, 168, 115, 108, 108, 101, 124, 105, 175, 73, 129, 245, 116, 104, 142, 20, 245, 6, 61, 134, 240, 82, 226, 187, 76, 76, 163, 91, 42, 195, 78, 248, 73, 121, 23, 241, 113, 78, 97, 193, 170, 225, 18, 21, 106, 16, 120, 207, 55, 246, 199, 128, 75, 3, 252, 216, 240, 51, 110, 156, 21, 221, 141, 177, 140, 120, 103, 159, 32, 248, 41, 211, 241, 230, 7, 29, 4, 127, 228, 248, 114, 64, 196, 237, 188, 47, 134, 195, 216, 143, 7, 134, 167, 184, 155, 83, 176, 104, 91, 192, 240, 63, 204, 156, 102, 221, 195, 47, 8, 223, 76, 63, 239, 29, 171, 167, 107, 37, 226, 123, 227, 22, 143, 57, 103, 221, 78, 98, 205, 217, 124, 9, 246, 184, 119, 45, 91, 175, 91, 20, 50, 59, 191, 17, 222, 61, 248, 190, 1, 220, 190, 25, 120, 36, 202, 27, 152, 9, 132, 184, 82, 202, 82, 28, 21, 143, 41, 223, 84, 225, 227, 239, 72, 124, 43, 183, 248, 10, 101, 249, 12, 29, 95, 71, 137, 215, 61, 34, 21, 102, 58, 105, 2, 102, 76, 65, 60, 18, 216, 191, 20, 46, 82, 167, 230, 168, 94, 207, 205, 192, 124, 252, 11, 247, 233, 116, 89, 51, 195, 13, 212, 36, 122, 43, 209, 241, 232, 60, 249, 2, 165, 0, 1, 112, 119, 45, 57, 151, 35, 42, 198, 219, 42, 226, 209, 207, 132, 6, 83, 99, 172, 124, 6, 90, 200, 70, 90, 28, 218, 190, 157, 145, 133, 162, 62, 46, 62, 200, 223, 155, 166, 147, 113, 225, 2, 212, 186, 208, 43, 141, 19, 183, 15, 241, 209, 121, 253, 63, 171, 249, 250, 137, 111, 143, 232, 55, 167, 14, 233, 104, 5, 97, 32, 2, 57, 206, 32, 160, 7, 130, 30, 70, 169, 178, 8, 208, 12, 200, 7, 204, 236, 69, 242, 171, 185, 149, 44, 137, 150, 43, 149, 66, 152, 37, 185, 90, 148, 172, 139, 89, 167, 146, 62, 18, 123, 17, 115, 225, 88, 71, 96, 100, 35, 136, 36, 173, 236, 50, 107, 226, 220, 64, 160, 184, 0, 242, 220, 252, 166, 65, 46, 31, 42, 70, 225, 216, 85, 186, 167, 210, 206, 81, 137, 43, 248, 253, 1, 107, 32, 104, 56, 184, 231, 171, 209, 230, 36, 49, 121, 116, 187, 234, 96, 219, 245, 121, 239, 191, 14, 126, 145, 168, 213, 167, 213, 47, 116, 235, 130, 139, 238, 144, 247, 205, 61, 202, 101, 46, 118, 77, 167, 246, 8, 191, 144, 153, 39, 4, 60, 106, 136, 135, 119, 254, 159, 53, 102, 139, 213, 179, 107, 39, 21, 192, 34, 239, 11, 129, 222, 37, 83, 56, 122, 210, 76, 58, 89, 147, 185, 245, 91, 129, 17, 97, 169, 159, 5, 155, 246, 250, 0, 117, 180, 162, 106, 10, 140, 42, 17, 138, 75, 183, 93, 118, 176, 175, 23, 147, 9, 25, 92, 89, 76, 169, 177, 99, 217, 42, 69, 38, 100, 22, 28, 251, 159, 145, 124, 48, 9, 151, 90, 57, 45, 119, 199, 154, 160, 194, 179, 221, 51, 217, 93, 85, 33, 5, 86, 64, 3, 50, 148, 96, 171, 68, 9, 93, 59, 190, 14, 160, 177, 6, 154, 66, 76, 188, 228, 155, 113, 152, 72, 77, 38, 35, 203, 24, 147, 142, 179, 26, 230, 150, 191, 135, 247, 151, 51, 64, 117, 122, 91, 177, 15, 198, 130, 22, 183, 131, 95, 121, 254, 172, 42, 104, 135, 13, 17, 220, 12, 21, 69, 218, 75, 28, 200, 237, 90, 77, 171, 16, 6, 242, 115, 80, 85, 138, 244, 12, 0, 245, 33, 231, 102, 47, 204, 191, 16, 97, 147, 255, 17, 214, 55, 210, 220, 133, 84, 113, 52, 47, 239, 18, 114, 185, 222, 137, 175, 100, 77, 213, 43, 169, 149, 211, 28, 155, 125, 7, 4, 41, 163, 142, 185, 51, 35, 152, 208, 111, 135, 198, 107, 160, 170, 171, 228, 207, 245, 127, 163, 203, 233, 178, 179, 109, 46, 161, 255, 99, 29, 174, 102, 239, 87, 188, 34, 97, 187, 226, 189, 5, 165, 74, 234, 20, 88, 125, 130, 164, 20, 33, 204, 26, 45, 80, 50, 184, 64, 110, 205, 106, 105, 113, 96, 4, 23, 63, 1, 250, 237, 55, 96, 32, 18, 203, 47, 70, 203, 70, 100, 170, 202, 101, 218, 187, 48, 103, 225, 11, 6, 112, 244, 14, 145, 216, 156, 196, 231, 62, 203, 49, 210, 61, 25, 221, 225, 249, 237, 226, 133, 74, 19, 96, 88, 79, 91, 38, 40, 198, 197, 186, 210, 127, 28, 219, 72, 46, 250, 234, 24, 250, 238, 117, 16, 139, 75, 105, 213, 84, 130, 67, 208, 106, 167, 232, 58, 118, 34, 32, 233, 254, 95, 44, 132, 217, 163, 135, 180, 222, 106, 72, 110, 151, 123, 219, 41, 164, 203, 108, 197, 101, 22, 63, 63, 59, 252, 222, 27, 59, 34, 114, 246, 168, 111, 197, 226, 93, 56, 125, 205, 114, 141, 128, 206, 158, 87, 158, 166, 54, 44, 34, 91, 155, 71, 217, 145, 137, 245, 167, 140, 18, 74, 89, 72, 184, 159, 65, 2, 68, 105, 72, 70, 32, 119, 42, 34, 181, 213, 239, 43, 68, 88, 219, 37, 20, 188, 144, 55, 82, 61, 97, 3, 24, 56, 60, 104, 195, 154, 95, 204, 30, 177, 232, 25, 115, 243, 230, 53, 40, 27, 152, 137, 94, 124, 11, 2, 23, 126, 166, 165, 214, 177, 21, 207, 138, 10, 120, 143, 90, 81, 173, 140, 165, 194, 141, 235, 255, 43, 145, 175, 85, 43, 166, 177, 185, 54, 185, 117, 133, 198, 144, 227, 120, 25, 65, 80, 46, 137, 194, 248, 21, 68, 78, 70, 142, 60, 31, 120, 2, 170, 108, 218, 94, 174, 170, 129, 104, 210, 101, 16, 36, 72, 151, 55, 32, 97, 216, 72, 72, 34, 86, 50, 64, 103, 15, 40, 95, 29, 214, 20, 107, 94, 208, 242, 63, 220, 215, 197, 72, 163, 92, 81, 112, 63, 250, 174, 208, 25, 56, 109, 70, 97], - [234, 104, 252, 122, 36, 167, 123, 142, 218, 35, 144, 29, 116, 48, 34, 225, 158, 216, 204, 220, 211, 104, 27, 48, 162, 50, 192, 172, 93, 162, 65, 174, 254, 137, 193, 168, 26, 67, 226, 15, 17, 35, 13, 89, 222, 138, 119, 132, 171, 127, 183, 76, 141, 170, 155, 102, 40, 202, 149, 184, 178, 26, 137, 203, 48, 99, 108, 66, 146, 194, 245, 37, 158, 144, 119, 184, 44, 33, 196, 49, 7, 24, 167, 83, 44, 253, 87, 23, 4, 127, 69, 175, 179, 232, 218, 220, 236, 104, 218, 77, 222, 197, 247, 245, 226, 9, 235, 161, 195, 82, 192, 108, 241, 92, 120, 29, 109, 111, 76, 225, 236, 163, 53, 38, 116, 104, 228, 82, 173, 173, 120, 234, 60, 232, 67, 90, 28, 59, 168, 227, 173, 64, 1, 68, 47, 145, 222, 169, 52, 147, 242, 226, 114, 219, 225, 48, 251, 108, 120, 240, 43, 95, 83, 159, 17, 142, 35, 248, 117, 6, 247, 14, 223, 120, 193, 16, 17, 140, 219, 215, 160, 29, 56, 107, 184, 209, 111, 150, 58, 178, 186, 156, 227, 133, 212, 119, 24, 47, 216, 204, 38, 165, 155, 71, 98, 121, 203, 172, 92, 155, 93, 131, 120, 27, 169, 142, 92, 74, 63, 171, 112, 78, 181, 11, 124, 75, 17, 43, 51, 150, 27, 185, 175, 100, 81, 153, 137, 36, 168, 77, 49, 242, 27, 245, 89, 113, 202, 52, 38, 197, 164, 50, 64, 115, 202, 243, 226, 86, 1, 228, 187, 255, 248, 191, 124, 127, 254, 116, 54, 28, 153, 251, 206, 237, 55, 75, 136, 112, 208, 213, 102, 201, 139, 32, 45, 243, 50, 250, 140, 174, 89, 0, 63, 113, 133, 11, 5, 84, 115, 134, 253, 131, 209, 160, 199, 104, 99, 229, 178, 118, 13, 252, 12, 239, 131, 68, 83, 219, 128, 172, 67, 230, 171, 2, 150, 34, 104, 123, 240, 36, 77, 221, 33, 20, 220, 156, 191, 119, 110, 60, 183, 68, 20, 173, 95, 67, 219, 243, 186, 38, 238, 86, 120, 112, 90, 84, 240, 167, 152, 64, 85, 2, 160, 242, 91, 211, 202, 6, 124, 168, 180, 71, 127, 107, 0, 195, 221, 182, 239, 128, 216, 232, 130, 205, 233, 131, 222, 177, 1, 13, 57, 40, 243, 51, 7, 16, 93, 56, 13, 134, 172, 130, 244, 1, 18, 201, 201, 69, 85, 56, 228, 1, 8, 68, 155, 115, 9, 94, 53, 149, 0, 22, 125, 33, 75, 193, 200, 190, 253, 222, 130, 83, 110, 166, 201, 233, 108, 172, 197, 28, 177, 33, 211, 109, 240, 187, 74, 241, 229, 207, 1, 219, 192, 155, 100, 36, 234, 4, 169, 0, 168, 35, 142, 162, 175, 234, 149, 248, 142, 134, 192, 77, 100, 118, 66, 167, 169, 228, 51, 93, 3, 68, 52, 179, 8, 29, 72, 47, 163, 127, 10, 104, 58, 135, 95, 68, 210, 197, 13, 0, 158, 41, 1, 17, 193, 126, 68, 25, 149, 85, 6, 34, 28, 220, 250, 143, 131, 82, 1, 241, 180, 223, 194, 164, 88, 20, 180, 84, 252, 233, 95, 114, 143, 143, 248, 173, 188, 62, 94, 251, 81, 232, 32, 234, 127, 128, 135, 88, 215, 31, 31, 233, 129, 87, 15, 246, 198, 168, 151, 209, 71, 81, 135, 226, 63, 117, 216, 171, 36, 52, 143, 36, 102, 186, 35, 202, 4, 31, 42, 143, 122, 220, 172, 64, 35, 117, 106, 154, 235, 170, 207, 69, 243, 88, 186, 50, 90, 82, 237, 10, 61, 176, 157, 227, 49, 145, 2, 140, 47, 224, 26, 148, 141, 220, 89, 140, 241, 220, 201, 200, 79, 98, 153, 12, 222, 117, 213, 32, 133, 133, 51, 229, 87, 143, 15, 151, 109, 170, 186, 51, 162, 183, 33, 215, 2, 6, 208, 39, 146, 86, 167, 175, 24, 103, 20, 236, 141, 81, 197, 82, 26, 202, 90, 151, 86, 119, 22, 13, 89, 41, 36, 19, 249, 2, 63, 106, 180, 56, 137, 65, 79, 245, 166, 186, 156, 121, 233, 179, 236, 165, 60, 108, 157, 229, 171, 39, 240, 72, 216, 141, 120, 176, 129, 198, 236, 97, 25, 10, 104, 188, 92, 17, 72, 17, 165, 231, 234, 226, 139, 206, 240, 182, 171, 96, 182, 15, 174, 103, 117, 218, 237, 230, 232, 196, 116, 217, 150, 217, 89, 124, 66, 62, 137, 9, 66, 148, 146, 212, 131, 125, 239, 222, 241, 60, 137, 117, 133, 220, 48, 38, 67, 232, 127, 236, 167, 66, 42, 239, 3, 231, 140, 214, 164, 87, 148, 239, 115, 196, 211, 66, 70, 212, 152, 52, 157, 57, 187, 17, 119, 4, 5, 232, 250, 33, 106, 153, 200, 227, 142, 21, 194, 244, 233, 132, 144, 66, 70, 203, 77, 69, 4, 9, 166, 234, 216, 189, 89, 72, 34, 87, 7, 221, 207, 180, 76, 108, 135, 135, 205, 151, 101, 41, 105, 145, 72, 107, 17, 73, 101, 201, 22, 19, 98, 66, 146, 50, 28, 45, 216, 203, 39, 174, 179, 103, 116, 148, 220, 188, 176, 40, 80, 200, 109, 83, 253, 86, 138, 94, 168, 144, 112, 252, 124, 43, 56, 220, 60, 12, 208, 60, 55, 219, 8, 182, 101, 243, 158, 20, 212, 7, 231, 25, 149, 93, 40, 98, 24, 7, 215, 158, 33, 63, 21, 208, 51, 253, 108, 64, 87, 65, 251, 209, 106, 117, 46, 191, 174, 54, 132, 10, 65, 36, 149, 81, 254, 215, 126, 68, 242, 21, 17, 18, 126, 78, 43, 107, 46, 59, 15, 104, 59, 231, 187, 224, 87, 207, 162, 173, 177, 145, 223, 34, 230, 248, 206, 168, 46, 182, 121, 196, 96, 113, 193, 8, 180, 139, 156, 86, 195, 84, 253, 20, 61, 169, 41, 56, 90, 116, 62, 108, 145, 102, 168, 89, 104, 164, 36, 197, 225, 49, 152, 103, 26, 9, 115, 25, 85, 224, 167, 44, 214, 55, 16, 234, 242, 136, 54, 74, 21, 124, 28, 114, 149, 174, 182, 125, 191, 217, 176, 56, 9, 146, 20, 141, 17, 245, 6, 128, 66, 6, 17, 207, 251, 62, 32, 143, 91, 206, 121, 98, 33, 38, 182, 74, 244, 253, 240, 69, 105, 184, 44, 104, 78, 199, 116, 213, 99, 118, 145, 125, 72, 135, 16, 55, 152, 56, 136, 2, 242, 250, 123, 18, 234, 135, 249, 45, 45, 158, 251, 187, 78, 152, 216, 194, 161, 79, 248, 52, 246, 219, 85, 235, 137, 19, 207, 131, 110, 17, 110, 9, 163, 68, 149, 146, 171, 209, 158, 77, 171, 252, 125, 13, 64, 122, 222, 155, 58, 173, 17, 220, 245, 98, 200, 225, 210, 193, 182, 59, 123, 168, 64, 126, 216, 47, 255, 236, 233, 167, 33, 96, 204, 21, 150, 175, 21, 37, 13, 147, 18, 34, 151, 198, 98, 65, 151, 114, 142, 119, 30, 210, 162, 111, 140, 156, 47, 112, 151, 179, 168, 208, 206, 204, 110, 42, 13, 192, 130, 79, 212, 44, 179, 200, 108, 30, 148, 100, 34, 203, 171, 247, 37, 107, 135, 240, 238, 4, 140, 77, 168, 165, 37, 244, 55, 144, 166, 216, 51, 238, 249, 77, 209, 169, 227, 53, 6, 90, 127, 116, 217, 20, 67, 82, 226, 143, 52, 43, 137, 209, 166, 177, 236, 129, 81, 123, 126, 140, 240, 181, 5, 15, 137, 127, 162, 66, 87, 34, 85, 151, 203, 228, 103, 90, 17, 141, 121, 125, 173, 235, 199, 23, 196, 42, 155, 161, 247, 222, 228, 98, 1, 33, 17, 201, 71, 220, 99, 189, 84, 237, 239, 7, 182, 182, 88, 102, 103, 75, 135, 34, 74, 110, 188, 29, 147, 226, 7, 240, 86, 209, 191, 112, 9, 164, 64, 175, 168, 225, 71, 15, 8, 33, 218, 147, 205, 126, 245, 149, 122, 235, 138, 147, 166, 111, 80, 183, 141, 161, 104, 238, 96, 127, 14, 99, 25, 107, 37, 175, 166, 52, 217, 35, 18, 50, 105, 112, 62, 187, 253, 9, 42, 61, 10, 112, 113, 96, 124, 248, 189, 97, 7, 74, 255, 62, 177, 194, 95, 204, 57, 252, 149, 59, 128, 186, 153, 145, 228, 159, 242, 67, 30, 3, 165, 178, 127, 41, 95, 139, 169, 161, 221, 239, 92, 148, 26, 145, 82, 240, 12, 71, 181, 240, 59, 248, 168, 193, 6, 181, 240, 90, 87, 224, 36, 247, 221, 229, 185, 30, 174, 191, 132, 148, 32, 67, 119, 69, 24, 47, 222, 175, 34, 192, 36, 74, 36, 12, 22, 180, 156, 88, 138, 27, 117, 37, 22, 102, 134, 251, 211, 185, 216, 247, 246, 1, 203, 120, 154, 7, 248, 91, 104, 39, 124, 65, 98, 103, 84, 103, 180, 204, 203, 184, 103, 59, 199, 141, 146, 241, 224, 253, 57, 145, 247, 87, 171, 67, 1, 114, 3, 25, 24, 113, 131, 200, 45, 235, 60, 209, 98, 247, 23, 86], - [147, 248, 5, 189, 223, 200, 230, 157, 221, 96, 26, 228, 228, 184, 211, 215, 224, 187, 234, 166, 157, 149, 41, 243, 219, 78, 114, 52, 72, 133, 127, 180, 119, 157, 48, 174, 105, 189, 57, 71, 11, 78, 93, 114, 23, 235, 120, 164, 128, 70, 162, 193, 126, 213, 250, 38, 19, 226, 200, 48, 196, 234, 24, 238, 97, 193, 193, 183, 127, 155, 116, 155, 101, 56, 240, 185, 110, 71, 200, 245, 39, 130, 128, 142, 19, 2, 60, 221, 177, 89, 42, 128, 220, 138, 208, 200, 133, 7, 70, 141, 202, 246, 1, 116, 178, 171, 184, 201, 251, 210, 81, 224, 161, 61, 206, 136, 246, 253, 180, 168, 12, 198, 99, 115, 241, 91, 108, 47, 97, 198, 6, 79, 98, 249, 56, 233, 20, 66, 108, 18, 129, 72, 84, 143, 81, 90, 93, 109, 71, 87, 109, 200, 34, 56, 102, 13, 173, 28, 118, 82, 207, 85, 39, 131, 97, 78, 127, 235, 183, 37, 198, 155, 252, 198, 197, 28, 8, 101, 43, 113, 167, 195, 110, 116, 93, 229, 50, 16, 202, 239, 42, 211, 28, 131, 221, 53, 202, 235, 131, 37, 19, 48, 203, 166, 186, 91, 67, 47, 143, 196, 8, 39, 219, 175, 38, 193, 92, 75, 121, 197, 141, 124, 199, 153, 19, 32, 132, 84, 127, 108, 55, 43, 29, 126, 73, 180, 104, 136, 125, 114, 218, 87, 13, 250, 16, 241, 158, 212, 147, 69, 45, 245, 189, 230, 10, 123, 131, 30, 198, 60, 114, 225, 252, 193, 129, 2, 44, 143, 46, 158, 212, 245, 230, 1, 68, 42, 108, 232, 217, 58, 33, 231, 141, 121, 93, 249, 95, 227, 120, 53, 232, 53, 8, 105, 114, 6, 122, 235, 153, 165, 225, 153, 226, 194, 167, 141, 12, 243, 10, 17, 22, 68, 20, 207, 17, 206, 4, 160, 86, 219, 251, 19, 226, 81, 211, 221, 11, 131, 167, 52, 202, 124, 181, 171, 223, 44, 161, 250, 62, 221, 26, 191, 33, 43, 174, 11, 30, 157, 131, 150, 153, 66, 14, 28, 41, 140, 14, 221, 195, 48, 137, 221, 92, 66, 5, 7, 96, 136, 187, 55, 50, 196, 124, 185, 211, 202, 68, 101, 21, 224, 225, 96, 208, 32, 240, 252, 1, 157, 176, 195, 14, 217, 236, 106, 144, 23, 40, 35, 174, 48, 204, 50, 12, 199, 164, 24, 45, 245, 92, 221, 253, 100, 53, 65, 184, 31, 69, 77, 252, 255, 196, 192, 237, 29, 87, 5, 15, 254, 141, 109, 9, 201, 39, 155, 116, 124, 78, 226, 254, 232, 68, 162, 214, 235, 32, 135, 65, 45, 123, 41, 49, 39, 218, 216, 180, 146, 79, 139, 81, 127, 151, 38, 179, 58, 220, 64, 145, 12, 141, 250, 21, 247, 16, 107, 141, 209, 13, 109, 102, 164, 243, 30, 166, 186, 159, 204, 65, 47, 184, 173, 187, 5, 207, 51, 140, 11, 110, 150, 2, 39, 93, 207, 210, 199, 221, 112, 93, 81, 147, 145, 47, 105, 209, 2, 220, 236, 140, 51, 95, 164, 52, 80, 39, 38, 141, 202, 208, 96, 232, 175, 116, 112, 196, 11, 104, 31, 216, 210, 77, 148, 128, 116, 15, 166, 221, 46, 56, 179, 31, 60, 19, 180, 216, 208, 189, 170, 117, 1, 241, 187, 15, 12, 1, 23, 191, 82, 127, 223, 248, 24, 56, 186, 72, 45, 22, 161, 223, 142, 255, 252, 222, 110, 195, 182, 233, 99, 132, 148, 54, 35, 33, 103, 77, 71, 42, 80, 118, 210, 102, 47, 191, 186, 224, 15, 127, 76, 165, 154, 222, 60, 226, 49, 131, 227, 243, 135, 184, 197, 69, 179, 160, 148, 155, 72, 149, 29, 97, 115, 0, 97, 11, 52, 78, 201, 5, 39, 107, 229, 106, 41, 126, 196, 74, 67, 183, 25, 177, 5, 78, 130, 79, 251, 134, 18, 204, 55, 131, 232, 94, 81, 172, 250, 141, 108, 44, 37, 125, 33, 25, 244, 228, 4, 51, 233, 148, 132, 200, 201, 21, 226, 107, 239, 108, 188, 5, 113, 119, 64, 42, 224, 209, 193, 86, 147, 237, 14, 212, 131, 120, 156, 56, 11, 6, 88, 63, 62, 233, 229, 252, 128, 87, 93, 89, 194, 171, 75, 104, 150, 10, 52, 152, 139, 122, 155, 50, 129, 140, 28, 79, 160, 206, 131, 253, 117, 30, 102, 158, 159, 17, 118, 199, 112, 179, 178, 58, 31, 66, 139, 249, 77, 84, 45, 202, 206, 197, 51, 4, 50, 141, 3, 59, 100, 255, 75, 47, 66, 51, 178, 192, 81, 210, 248, 232, 50, 244, 229, 77, 85, 125, 17, 63, 92, 0, 62, 97, 109, 2, 92, 26, 47, 140, 138, 137, 121, 58, 180, 176, 33, 163, 228, 115, 226, 3, 84, 10, 16, 4, 133, 123, 186, 146, 170, 111, 44, 94, 111, 134, 77, 111, 41, 120, 156, 219, 22, 102, 127, 33, 238, 78, 200, 202, 143, 22, 86, 112, 138, 44, 210, 184, 114, 179, 252, 184, 230, 243, 71, 218, 243, 207, 160, 213, 184, 1, 64, 104, 207, 186, 9, 84, 230, 215, 185, 43, 156, 115, 48, 253, 39, 73, 197, 215, 178, 104, 124, 136, 219, 50, 152, 38, 225, 192, 107, 190, 195, 174, 56, 127, 213, 223, 66, 123, 185, 215, 83, 156, 240, 218, 135, 132, 192, 187, 26, 249, 209, 25, 32, 245, 238, 175, 245, 8, 159, 160, 159, 55, 163, 39, 116, 140, 45, 70, 126, 125, 116, 124, 192, 58, 99, 222, 87, 20, 147, 97, 230, 132, 35, 152, 118, 53, 44, 69, 193, 225, 229, 71, 229, 193, 43, 10, 228, 133, 33, 153, 197, 242, 2, 7, 0, 115, 101, 115, 201, 108, 203, 236, 132, 27, 166, 1, 41, 61, 126, 181, 24, 104, 111, 36, 146, 45, 230, 227, 95, 213, 125, 169, 12, 79, 17, 167, 29, 89, 51, 114, 48, 39, 107, 98, 121, 53, 69, 23, 93, 117, 234, 171, 238, 247, 128, 66, 208, 236, 174, 254, 173, 165, 172, 209, 38, 231, 166, 175, 85, 212, 174, 153, 16, 9, 183, 211, 85, 149, 204, 91, 204, 135, 16, 234, 62, 12, 45, 47, 12, 7, 43, 18, 192, 49, 252, 47, 74, 123, 165, 199, 238, 167, 152, 242, 116, 208, 181, 207, 167, 174, 195, 24, 103, 177, 130, 128, 225, 75, 125, 61, 204, 175, 159, 30, 45, 114, 90, 239, 41, 246, 54, 29, 81, 252, 155, 245, 213, 142, 137, 154, 201, 118, 190, 82, 129, 161, 209, 126, 217, 250, 208, 233, 127, 27, 252, 61, 142, 18, 110, 133, 181, 135, 153, 109, 201, 143, 138, 12, 27, 222, 104, 110, 111, 95, 230, 215, 159, 85, 161, 195, 99, 222, 96, 159, 2, 15, 82, 25, 54, 255, 182, 204, 237, 130, 152, 238, 67, 83, 194, 121, 242, 221, 49, 237, 40, 240, 169, 178, 155, 138, 252, 220, 70, 112, 185, 19, 19, 0, 52, 7, 71, 168, 103, 237, 185, 207, 167, 105, 114, 187, 198, 117, 49, 211, 113, 84, 158, 238, 33, 131, 234, 73, 170, 58, 156, 222, 183, 13, 141, 221, 36, 51, 129, 176, 56, 168, 18, 140, 1, 58, 174, 87, 23, 226, 97, 186, 207, 93, 181, 21, 110, 40, 114, 155, 222, 241, 236, 219, 134, 4, 206, 30, 100, 179, 151, 226, 244, 212, 81, 61, 172, 33, 202, 145, 148, 49, 169, 112, 196, 128, 98, 253, 100, 35, 21, 248, 154, 224, 92, 244, 4, 20, 235, 156, 82, 249, 52, 130, 154, 105, 16, 12, 157, 133, 110, 147, 180, 225, 181, 28, 199, 152, 203, 0, 90, 250, 43, 130, 33, 188, 75, 22, 27, 150, 166, 115, 150, 112, 71, 112, 208, 32, 36, 99, 220, 224, 243, 221, 172, 147, 242, 115, 173, 109, 117, 149, 52, 125, 228, 230, 81, 30, 97, 33, 169, 199, 156, 89, 164, 21, 26, 241, 178, 56, 93, 129, 239, 124, 248, 159, 118, 234, 183, 239, 114, 146, 245, 20, 52, 48, 62, 37, 208, 220, 72, 38, 81, 59, 29, 22, 62, 190, 164, 198, 192, 238, 18, 224, 184, 13, 235, 164, 57, 180, 84, 20, 7, 8, 58, 131, 140, 202, 232, 18, 0, 164, 171, 177, 222, 212, 171, 217, 102, 210, 31, 20, 117, 209, 200, 247, 215, 32, 35, 124, 154, 101, 177, 192, 130, 107, 230, 239, 192, 27, 253, 125, 50, 136, 180, 121, 34, 142, 5, 69, 193, 180, 254, 132, 131, 2, 54, 94, 249, 85, 206, 132, 57, 249, 247, 154, 158, 67, 75, 189, 150, 130, 71, 52, 42, 167, 92, 106, 55, 139, 234, 169, 147, 144, 232, 225, 253, 127, 43, 123, 144, 235, 63, 255, 10, 211, 23, 118, 176, 133, 238, 86, 167, 247, 22, 152, 56, 93, 143, 103, 24, 151, 167, 245, 217, 111, 126, 53, 169, 136, 59, 29, 135] - ], - "iv": null, - "key": [141, 43, 169, 4, 0, 217, 176, 94, 56, 139, 126, 237, 189, 250, 132, 173, 124, 251, 162, 57, 186, 82, 27, 83], - "modeOfOperation": "ctr", - "plaintext": [ - [30, 251, 171, 210, 144, 200, 13, 112, 74, 129, 240, 235, 143, 118, 167, 28, 237, 181, 218, 248, 33, 175, 143, 165, 33, 80, 82, 189, 98, 77, 147, 43, 96, 188, 218, 106, 247, 10, 212, 187, 161, 195, 119, 151, 25, 171, 86, 145, 164, 205, 27, 2, 121, 167, 83, 0, 231, 75, 134, 223, 207, 238, 240, 4, 121, 113, 11, 93, 143, 127, 147, 91, 0, 42, 116, 110, 221, 201, 30, 190, 144, 70, 228, 151, 255, 60, 214, 112, 34, 23, 27, 240, 124, 77, 245, 136, 130, 88, 1, 188, 242, 171, 130, 40, 65, 22, 125, 4, 143, 202, 122, 249, 45, 241, 62, 43, 237, 132, 210, 124, 64, 165, 229, 75, 50, 61, 9, 115, 153, 98, 219, 99, 216, 88, 200, 48, 13, 34, 111, 243, 245, 255, 221, 197, 6, 173, 70, 221, 145, 26, 32, 59, 142, 176, 128, 44, 212, 136, 14, 132, 238, 124, 19, 204, 105, 210, 148, 133, 23, 214, 156, 59, 80, 96, 226, 116, 60, 114, 80, 109, 143, 129, 187, 109, 237, 161, 161, 235, 230, 87, 197, 232, 171, 13, 189, 86, 161, 146, 99, 118, 35, 171, 176, 170, 110, 7, 74, 36, 198, 8, 33, 244, 175, 209, 186, 12, 130, 219, 66, 224, 50, 115, 210, 200, 120, 255, 8, 119, 134, 217, 207, 1, 53, 9, 203, 169, 135, 69, 77, 43, 96, 165, 126, 105, 158, 113, 117, 44, 108, 128, 63, 41, 34, 183, 205, 76, 49, 37, 239, 250, 79, 230, 87, 47, 139, 208, 186, 87, 78, 169, 62, 135, 104, 50, 34, 147, 115, 67, 112, 128, 240, 34, 194, 196, 77, 178, 82, 33, 26, 151, 183, 114, 247, 120, 214, 89, 36, 237, 249, 116, 230, 187, 54, 94, 228, 141, 9, 198, 159, 144, 195, 190, 254, 240, 88, 46, 48, 54, 122, 228, 114, 138, 89, 165, 216, 107, 245, 164, 219, 86, 240, 97, 230, 142, 201, 254, 183, 83, 83, 141, 247, 239, 114, 1, 190, 71, 183, 60, 108, 125, 207, 215, 80, 167, 237, 228, 69, 171, 13, 39, 45, 208, 180, 85, 199, 33, 184, 57, 248, 157, 39, 230, 205, 124, 172, 146, 81, 181, 117, 234, 191, 5, 245, 13, 212, 25, 79, 108, 237, 112, 180, 116, 190, 149, 97, 112, 141, 30, 121, 66, 102, 16, 69, 220, 137, 159, 194, 202, 79, 8, 249, 7, 124, 172, 41, 104, 194, 78, 3, 176, 144, 111, 222, 203, 23, 38, 201, 176, 208, 18, 156, 211, 93, 164, 3, 100, 212, 42, 212, 196, 85, 186, 104, 91, 76, 18, 8, 222, 225, 55, 230, 173, 117, 4, 59, 143, 237, 57, 185, 93, 172, 101, 114, 177, 221, 198, 54, 68, 103, 240, 139, 236, 101, 23, 106, 227, 254, 103, 2, 83, 171, 175, 240, 181, 44, 36, 85, 117, 42, 125, 213, 164, 208, 128, 86, 124, 206, 231, 15, 227, 31, 102, 90, 207, 242, 6, 212, 28, 55, 116, 145, 41, 249, 186, 18, 239, 77, 168, 85, 155, 222, 244, 69, 184, 1, 64, 20, 115, 9, 147, 125, 121, 189, 13, 170, 195, 113, 135, 232, 168, 189, 97, 238, 10, 52, 29, 38, 172, 49, 255, 214, 188, 244, 30, 25, 6, 157, 143, 134, 69, 13, 47, 112, 166, 41, 161, 161, 163, 1, 151, 9, 48, 140, 169, 223, 111, 170, 57, 23, 130, 172, 92, 145, 198, 62, 134, 145, 137, 175, 32, 144, 21, 71, 57, 73, 66, 115, 8, 11, 181, 208, 136, 57, 23, 114, 231, 190, 54, 187, 155, 146, 24, 131, 180, 58, 129, 64, 11, 13, 227, 140, 196, 160, 67, 245, 21, 103, 34, 137, 64, 121, 147, 152, 41, 123, 139, 13, 166, 95, 141, 132, 104, 77, 38, 45, 16, 241, 233, 242, 23, 197, 4, 201, 223, 202, 138, 117, 47, 16, 25, 23, 187, 177, 20, 66, 130, 19, 150, 195, 150, 80, 167, 67, 254, 113, 9, 52, 53, 190, 205, 174, 85, 40, 39, 175, 105, 60, 72, 173, 246, 9, 150, 46, 163, 198, 22, 120, 177, 246, 108, 7, 37, 62, 8, 21, 3, 131, 81, 246, 128, 64, 25, 95, 126, 46, 224, 254, 245, 117, 244, 168, 19, 95, 146, 150, 55, 151, 193, 120, 236, 135, 46, 164, 77, 178, 102, 86, 51, 92, 184, 120, 45, 43, 63, 239, 174, 191, 221, 141, 237, 200, 109, 114, 182, 10, 73, 223, 224, 48, 95, 255, 82, 212, 201, 142, 80, 53, 145, 28, 161, 229, 203, 243, 47, 205, 88, 12, 1, 44, 110, 166, 108, 60, 88, 249, 58, 191, 238, 35, 184, 179, 72, 180, 5, 123, 145, 248, 79, 107, 31, 163, 229, 41, 6, 221, 130, 99, 170, 196, 47, 207, 150, 73, 239, 204, 51, 79, 42, 30, 83, 120, 120, 234, 28, 37, 67, 152, 122, 79, 96, 51, 81, 175, 94, 30, 196, 217, 146, 35, 129, 245, 63, 98, 195, 101, 112, 166, 210, 74, 164, 243, 53, 219, 155, 143, 165, 23, 212, 186, 12, 126, 203, 96, 11, 4, 158, 150, 136, 255, 156, 206, 61, 24, 84, 163, 41, 72, 58, 29, 122, 210, 11, 11, 209, 149, 75, 158, 152, 180, 218, 228, 166, 213, 203, 11, 173, 246, 101, 117, 138, 190, 24, 132, 7, 139, 102, 177, 113, 99, 168, 194, 2, 39, 101, 138, 246, 79, 48, 246, 62, 237, 34, 52, 14, 18, 164, 241, 209, 87, 197, 41, 145, 136, 112, 134, 65, 103, 117, 189, 204, 170, 140, 194, 234, 41, 186, 126, 133, 245, 222, 154, 20, 24, 244, 7, 0, 135, 104, 185, 183, 231, 240, 137, 143, 149, 222, 33, 196, 217, 191, 106, 197, 216, 167, 227, 177, 64, 157, 226, 0, 118, 210, 135, 34, 132, 249, 188, 159, 77, 223, 109, 198, 123, 204, 245, 118, 81, 24, 9, 128, 115, 233, 235, 205, 226, 235, 229, 255, 122, 145, 197, 165, 81, 1, 218, 196, 99, 68, 52, 56, 202, 148, 2, 56, 34, 254, 194, 138, 1, 230, 173, 46, 238, 150, 57, 220, 74, 196, 0, 196, 219, 35, 12, 97, 248, 172, 189, 31, 131, 124, 232, 212, 216, 249, 202, 243, 223, 152, 236, 70, 130, 50, 118, 182, 213, 133, 200, 93, 192, 149, 76, 30, 42, 192, 178, 71, 5, 188, 47, 90, 187, 48, 85, 234, 166, 205, 206, 211, 216, 10, 161, 162, 67, 238, 199, 92, 117, 252, 70, 146, 165, 43, 63, 213, 196, 182, 66, 235, 21, 202, 135, 138, 241, 10, 34, 15, 162, 85, 249, 82, 245, 135, 239, 153, 179, 178, 1, 21, 121, 51, 1, 38, 64, 66, 18, 44, 64, 146, 44, 141, 149, 94, 102, 75, 130, 194, 142, 246, 82, 132, 56, 161, 204, 246, 102, 90, 142, 151, 136, 61, 123, 157, 109, 241, 39, 110, 122, 245, 153, 112, 210, 202, 16, 212, 178, 183, 44, 82, 172, 1, 189, 81, 79, 130, 174, 28, 111, 107, 134, 63, 77, 251, 23, 92, 92, 111, 33, 102, 194, 75, 66, 88, 138, 122, 156, 211, 135, 239, 194, 185, 89, 252, 62, 166, 130, 70, 117, 111, 163, 31, 165, 152, 184, 96, 185, 169, 36, 179, 129, 29, 94, 82, 184, 185, 199, 195, 16, 106, 71, 101, 63, 124, 60, 220, 36, 116, 234, 35, 187, 84, 192, 34, 235, 31, 243, 244, 101, 45, 95, 166, 148, 144, 69, 108, 52, 90, 168, 175, 13, 205, 37, 165, 16, 227, 108, 107, 91, 60, 6, 60, 60, 180, 104, 177, 183, 35, 45, 250, 177, 90, 232, 73, 121, 177, 7, 167, 24, 113, 178, 54, 81, 35, 159, 151, 215, 237, 229, 124, 109, 4, 231, 70, 147, 125, 115, 196, 242, 217, 143, 185, 36, 155, 53, 40, 47, 74, 77, 176, 58, 23, 234, 128, 65, 40, 82, 167, 177, 172, 245, 211, 238, 187, 127, 141, 54, 241, 164, 29, 49, 210, 21, 92, 77, 114, 139, 90, 253, 167, 249, 6, 185, 39, 182, 26, 250, 16, 97, 125, 162, 12, 18, 56, 97, 27, 232, 225, 186, 241, 255, 119, 103, 67, 7, 253, 158, 180, 60, 14, 36, 209, 121, 112, 153, 212, 35, 226, 235, 66, 148, 243, 219, 133, 185, 35, 107, 32, 2, 37, 62, 251, 37, 32, 30, 26, 193, 246, 166, 77, 21, 135, 65, 205, 82, 255, 76, 65, 81, 118, 146, 98, 113, 110, 96, 177, 23, 66, 54, 200, 133, 0, 116, 123, 142, 253, 151, 73, 218, 58, 146, 72, 54, 108, 62, 67, 17, 56, 139, 69, 235, 48, 89, 102, 116, 40, 92, 203, 99, 16, 244, 72, 84, 152, 154, 3, 143, 196, 231, 213, 104, 94, 55, 190, 80, 109, 143, 147, 152, 106, 90, 69, 228, 34, 14, 23, 42, 133, 1, 43, 151, 255], - [192, 174, 243, 13, 71, 45, 15, 142, 123, 232, 128, 74, 199, 204, 216, 201, 65, 29, 233, 56, 179, 14, 102, 184, 95, 252, 197, 205, 70, 65, 253, 151, 242, 193, 129, 198, 222, 151, 99, 199, 100, 193, 166, 212, 17, 167, 213, 132, 193, 128, 22, 197, 90, 151, 180, 170, 170, 0, 235, 0, 23, 253, 23, 225, 190, 168, 111, 50, 204, 24, 209, 84, 66, 167, 157, 33, 24, 64, 124, 44, 31, 238, 57, 34, 152, 46, 46, 218, 221, 241, 133, 198, 246, 37, 225, 35, 238, 52, 137, 31, 17, 9, 126, 156, 185, 199, 193, 8, 163, 15, 79, 245, 6, 6, 136, 126, 173, 173, 85, 0, 78, 226, 244, 135, 221, 62, 43, 37, 101, 188, 249, 47, 241, 169, 222, 233, 130, 221, 145, 4, 185, 57, 3, 235, 127, 68, 69, 133, 67, 93, 232, 236, 102, 89, 7, 76, 117, 241, 171, 25, 35, 61, 60, 24, 31, 144, 226, 231, 93, 52, 43, 176, 236, 192, 107, 17, 2, 153, 70, 143, 252, 124, 71, 11, 210, 152, 91, 216, 59, 255, 144, 74, 209, 120, 186, 37, 120, 82, 159, 52, 40, 150, 211, 7, 98, 157, 70, 18, 12, 137, 9, 104, 76, 213, 222, 85, 101, 233, 124, 48, 152, 29, 68, 168, 182, 35, 161, 182, 143, 22, 147, 111, 182, 118, 122, 108, 63, 138, 9, 108, 79, 189, 167, 226, 248, 232, 196, 128, 119, 124, 148, 207, 4, 192, 61, 61, 104, 123, 189, 210, 214, 118, 106, 184, 10, 100, 10, 170, 228, 181, 223, 123, 149, 244, 53, 199, 20, 77, 6, 252, 190, 203, 209, 219, 163, 121, 188, 175, 77, 168, 197, 233, 131, 4, 48, 31, 18, 172, 37, 221, 18, 144, 253, 197, 63, 55, 135, 79, 228, 18, 74, 137, 116, 166, 135, 67, 12, 14, 28, 77, 179, 76, 51, 223, 217, 98, 111, 120, 2, 99, 251, 239, 149, 74, 176, 63, 80, 53, 158, 170, 243, 113, 29, 141, 206, 50, 255, 208, 137, 238, 246, 19, 145, 120, 131, 74, 172, 254, 99, 182, 107, 94, 6, 25, 36, 54, 32, 253, 65, 146, 21, 78, 153, 9, 113, 163, 104, 85, 230, 166, 249, 143, 83, 196, 58, 8, 189, 232, 23, 105, 13, 201, 172, 51, 165, 107, 158, 56, 135, 142, 33, 96, 210, 255, 236, 69, 120, 123, 84, 138, 187, 224, 17, 35, 158, 165, 146, 253, 4, 240, 6, 21, 69, 162, 96, 19, 113, 102, 252, 201, 253, 19, 242, 228, 80, 131, 123, 225, 231, 129, 217, 194, 150, 190, 166, 174, 161, 100, 47, 149, 7, 34, 57, 171, 124, 62, 61, 100, 54, 65, 105, 46, 17, 220, 175, 185, 185, 212, 128, 15, 89, 131, 72, 47, 6, 75, 106, 174, 14, 60, 211, 228, 176, 228, 124, 162, 46, 220, 105, 130, 134, 50, 243, 213, 226, 29, 84, 164, 96, 253, 34, 46, 186, 105, 190, 238, 116, 56, 219, 230, 143, 1, 79, 228, 188, 182, 73, 242, 131, 182, 193, 127, 55, 19, 195, 220, 130, 155, 89, 0, 128, 225, 221, 171, 108, 93, 197, 156, 126, 191, 62, 133, 7, 172, 87, 105, 87, 110, 0, 40, 95, 199, 116, 197, 196, 70, 169, 80, 240, 25, 160, 61, 167, 163, 75, 7, 236, 68, 242, 238, 166, 118, 188, 178, 230, 113, 52, 158, 163, 182, 8, 175, 0, 165, 82, 109, 64, 153, 219, 213, 249, 121, 231, 102, 82, 132, 182, 3, 239, 160, 27, 110, 71, 209, 1, 144, 111, 81, 149, 44, 155, 137, 130, 145, 153, 212, 12, 231, 231, 167, 94, 25, 206, 13, 106, 45, 97, 86, 215, 246, 175, 77, 178, 224, 65, 221, 8, 239, 228, 95, 195, 98, 13, 67, 136, 202, 233, 246, 89, 35, 42, 183, 201, 184, 155, 0, 48, 157, 180, 180, 61, 74, 36, 144, 34, 228, 101, 220, 209, 43, 255, 85, 9, 45, 99, 174, 210, 23, 131, 39, 132, 88, 76, 114, 152, 41, 226, 92, 163, 155, 183, 127, 202, 15, 49, 6, 243, 75, 222, 97, 58, 173, 130, 191, 92, 33, 26, 54, 60, 1, 177, 156, 13, 33, 188, 200, 211, 9, 214, 155, 26, 102, 231, 126, 5, 58, 86, 189, 160, 94, 152, 219, 229, 155, 15, 234, 153, 203, 63, 212, 136, 195, 173, 136, 254, 251, 157, 120, 241, 125, 249, 31, 123, 254, 233, 64, 19, 79, 135, 85, 173, 142, 15, 52, 149, 15, 159, 68, 37, 129, 19, 24, 163, 225, 92, 113, 176, 26, 213, 13, 1, 175, 142, 59, 148, 21, 176, 25, 113, 170, 61, 52, 84, 103, 180, 218, 234, 142, 53, 72, 192, 192, 105, 115, 51, 3, 70, 196, 235, 35, 117, 161, 154, 71, 194, 92, 188, 44, 49, 99, 43, 142, 145, 233, 22, 104, 148, 122, 196, 187, 33, 253, 102, 92, 200, 9, 210, 51, 189, 60, 172, 179, 253, 216, 26, 252, 164, 117, 104, 81, 238, 223, 145, 204, 129, 110, 173, 9, 122, 249, 2, 226, 84, 218, 192, 152, 92, 150, 131, 234, 67, 179, 110, 32, 15, 14, 58, 8, 221, 205, 29, 52, 101, 62, 216, 179, 113, 171, 146, 97, 254, 61, 175, 171, 236, 16, 83, 148, 199, 113, 236, 244, 127, 103, 27, 183, 23, 8, 165, 16, 80, 252, 0, 4, 33, 26, 4, 38, 200, 198, 158, 170, 76, 211, 149, 189, 203, 177, 96, 197, 204, 228, 166, 164, 201, 32, 151, 54, 153, 216, 173, 12, 109, 27, 225, 167, 1, 85, 67, 1, 203, 193, 59, 2, 30, 14, 164, 173, 21, 144, 74, 252, 74, 236, 131, 33, 237, 75, 195, 237, 68, 13, 84, 233, 109, 207, 2, 61, 147, 124, 210, 106, 58, 64, 254, 230, 36, 184, 79, 252, 64, 189, 159, 150, 122, 147, 243, 28, 88, 199, 1, 32, 100, 63, 64, 91, 217, 222, 203, 252, 207, 211, 224, 62, 192, 25, 180, 199, 77, 19, 210, 12, 166, 165, 64, 183, 26, 226, 36, 158, 185, 31, 208, 30, 55, 112, 15, 157, 82, 184, 130, 215, 226, 188, 193, 117, 218, 226, 154, 159, 223, 40, 10, 132, 112, 134, 248, 241, 22, 133, 154, 148, 4, 153, 249, 99, 48, 102, 217, 182, 193, 163, 175, 35, 0, 118, 39, 251, 250, 20, 160, 87, 79, 230, 42, 165, 65, 209, 2, 102, 134, 3, 94, 107, 200, 47, 160, 129, 215, 127, 234, 87, 101, 45, 95, 23, 20, 150, 251, 194, 202, 214, 224, 182, 72, 231, 232, 32, 10, 112, 6, 63, 251, 151, 168, 169, 250, 48, 224, 237, 195, 181, 170, 206, 78, 223, 41, 125, 246, 65, 65, 167, 79, 53, 205, 206, 234, 24, 178, 46, 13, 104, 90, 96, 246, 79, 77, 98, 123, 45, 113, 24, 60, 211, 61, 221, 35, 232, 67, 110, 37, 164, 228, 28, 26, 167, 33, 18, 204, 72, 196, 135, 180, 63, 175, 119, 53, 40, 145, 61, 48, 3, 79, 143, 152, 245, 143, 191, 165, 4, 162, 95, 238, 157, 96, 241, 44, 126, 234, 15, 85, 175, 218, 113, 193, 197, 34, 50, 24, 154, 248, 153, 128, 1, 30, 3, 129, 92, 244, 128, 125, 131, 224, 52, 213, 168, 76, 86, 189, 105, 117, 204, 92, 7, 87, 171, 56, 134, 68, 251, 188, 30, 192, 40, 238, 2, 139, 224, 134, 61, 222, 225, 55, 5, 210, 92, 21, 239, 127, 162, 49, 82, 22, 110, 8, 164, 235, 189, 129, 72, 237, 189, 198, 208, 113, 182, 92, 183, 16, 215, 41, 111, 4, 225, 128, 133, 25, 3, 153, 120, 73, 75, 120, 214, 132, 55, 133, 137, 101, 80, 167, 211, 184, 6, 80, 78, 245, 173, 166, 105, 97, 190, 239, 38, 234, 158, 45, 100, 48, 155, 166, 18, 89, 241, 111, 231, 216, 187, 102, 82, 113, 0, 231, 223, 242, 236, 141, 98, 117, 125, 189, 139, 21, 12, 61, 112, 243, 74, 108, 180, 105, 32, 195, 117, 123, 121, 91, 105, 56, 111, 4, 113, 167, 16, 21, 30, 33, 18, 184, 52, 163, 172, 195, 172, 240, 195, 84, 185, 173, 22, 73, 126, 165, 101, 146, 12, 223, 33, 15, 26, 141, 218, 50, 33, 71, 187, 155, 7, 225, 86, 158, 133, 119, 179, 125, 168, 91, 22, 97, 220, 84, 174, 159, 88, 195, 73, 78, 114, 38, 249, 35, 96, 180, 153, 54, 126, 209, 234, 4, 20, 253, 116, 189, 110, 14, 222, 217, 46, 234, 147, 194, 92, 96, 121, 223, 231, 42, 91, 187, 174, 126, 42, 236, 52, 24, 243, 192, 2, 46, 31, 161, 219, 15, 121, 69, 148, 32, 55, 21, 98, 198, 210, 229, 211, 223, 145, 110, 55, 152, 92, 109, 157, 144, 243, 77, 167, 230, 220, 169, 91], - [148, 161, 157, 239, 14, 244, 211, 171, 13, 188, 118, 195, 63, 9, 35, 192, 21, 48, 231, 56, 183, 230, 246, 73, 96, 184, 136, 201, 56, 30, 42, 53, 29, 28, 40, 180, 247, 79, 215, 208, 184, 55, 14, 11, 109, 78, 128, 78, 224, 181, 233, 140, 178, 57, 194, 112, 132, 57, 120, 127, 144, 86, 155, 0, 219, 130, 0, 89, 182, 27, 95, 131, 206, 105, 107, 243, 155, 165, 128, 88, 173, 102, 253, 254, 141, 91, 114, 46, 34, 242, 134, 83, 46, 67, 53, 50, 55, 201, 196, 67, 155, 15, 62, 122, 133, 5, 86, 53, 31, 133, 220, 21, 207, 234, 127, 212, 88, 176, 116, 11, 24, 60, 128, 197, 235, 71, 195, 100, 2, 39, 115, 230, 81, 152, 244, 25, 169, 253, 184, 227, 133, 42, 69, 216, 173, 113, 241, 20, 37, 1, 189, 229, 234, 63, 88, 37, 31, 244, 86, 85, 154, 66, 146, 129, 242, 236, 132, 200, 218, 247, 23, 184, 144, 34, 134, 78, 122, 198, 85, 107, 234, 224, 132, 55, 63, 224, 87, 193, 42, 55, 203, 174, 50, 166, 93, 61, 131, 227, 97, 24, 90, 238, 102, 250, 182, 52, 48, 188, 249, 7, 181, 138, 87, 171, 74, 38, 255, 215, 128, 166, 203, 70, 192, 13, 39, 245, 111, 100, 121, 45, 244, 209, 40, 205, 33, 195, 160, 62, 23, 246, 23, 78, 141, 250, 17, 180, 206, 148, 64, 18, 200, 203, 179, 150, 134, 38, 120, 66, 58, 93, 250, 221, 22, 188, 196, 101, 36, 156, 116, 188, 104, 195, 253, 58, 55, 25, 106, 94, 160, 132, 207, 123, 156, 90, 4, 247, 93, 76, 71, 63, 111, 185, 62, 119, 254, 15, 251, 186, 213, 14, 124, 217, 22, 25, 77, 3, 229, 246, 162, 78, 69, 197, 236, 19, 163, 115, 229, 163, 184, 245, 52, 73, 202, 34, 35, 36, 74, 64, 241, 26, 139, 210, 244, 129, 115, 41, 19, 83, 253, 122, 93, 31, 170, 149, 88, 146, 113, 147, 219, 113, 80, 141, 13, 168, 52, 220, 106, 152, 43, 172, 39, 151, 183, 251, 184, 219, 227, 68, 44, 185, 196, 154, 241, 128, 42, 212, 240, 69, 80, 6, 166, 12, 230, 72, 235, 105, 159, 65, 104, 172, 232, 187, 15, 41, 147, 169, 94, 78, 95, 70, 65, 251, 181, 255, 227, 46, 57, 76, 141, 147, 177, 3, 223, 130, 196, 10, 24, 35, 200, 132, 14, 183, 121, 144, 208, 183, 93, 125, 99, 23, 193, 199, 9, 46, 130, 168, 100, 210, 111, 219, 65, 74, 39, 99, 167, 22, 122, 11, 205, 45, 18, 143, 63, 171, 74, 174, 90, 236, 102, 218, 173, 21, 209, 205, 201, 38, 64, 120, 4, 236, 225, 116, 33, 143, 105, 167, 39, 85, 182, 119, 255, 160, 131, 39, 135, 191, 232, 237, 32, 177, 41, 96, 55, 140, 126, 49, 97, 88, 46, 207, 173, 252, 119, 27, 249, 122, 80, 82, 219, 208, 82, 159, 213, 11, 8, 249, 149, 234, 127, 240, 241, 158, 112, 30, 111, 72, 172, 94, 116, 135, 255, 84, 16, 33, 234, 160, 202, 165, 187, 92, 187, 168, 20, 239, 188, 139, 160, 118, 137, 49, 87, 66, 158, 100, 128, 62, 182, 70, 216, 91, 227, 93, 93, 28, 102, 218, 47, 248, 85, 109, 172, 1, 187, 46, 153, 65, 7, 124, 109, 125, 15, 201, 28, 241, 245, 248, 156, 232, 205, 91, 213, 213, 119, 34, 208, 122, 48, 253, 59, 246, 207, 208, 132, 201, 201, 145, 140, 166, 159, 4, 80, 209, 122, 171, 241, 196, 109, 45, 154, 27, 245, 144, 187, 196, 238, 143, 216, 44, 79, 0, 157, 98, 209, 243, 114, 152, 249, 20, 189, 252, 193, 32, 211, 83, 109, 64, 69, 216, 187, 191, 200, 76, 97, 230, 241, 73, 93, 20, 7, 206, 176, 63, 113, 170, 129, 126, 108, 126, 185, 78, 136, 177, 112, 148, 182, 214, 170, 160, 228, 182, 94, 99, 178, 220, 22, 220, 155, 34, 165, 155, 40, 44, 41, 44, 115, 31, 156, 106, 16, 205, 204, 186, 142, 91, 176, 140, 227, 39, 220, 75, 78, 211, 108, 229, 60, 68, 63, 111, 173, 243, 120, 247, 218, 210, 126, 128, 28, 198, 63, 126, 17, 196, 177, 142, 159, 75, 223, 20, 96, 1, 162, 126, 190, 119, 218, 96, 202, 89, 76, 190, 183, 25, 81, 62, 84, 57, 190, 176, 107, 198, 216, 241, 172, 143, 165, 203, 99, 136, 24, 24, 246, 56, 15, 75, 152, 56, 240, 111, 169, 237, 164, 174, 3, 92, 193, 226, 234, 230, 167, 239, 11, 77, 10, 14, 210, 178, 117, 23, 62, 60, 180, 154, 137, 237, 152, 205, 193, 235, 96, 71, 206, 138, 187, 86, 4, 35, 112, 184, 23, 214, 213, 213, 100, 215, 115, 13, 15, 222, 227, 200, 24, 223, 62, 87, 26, 3, 154, 123, 96, 57, 35, 119, 151, 64, 93, 85, 214, 0, 158, 150, 56, 180, 193, 48, 30, 16, 122, 99, 47, 3, 67, 11, 129, 108, 242, 49, 139, 179, 96, 68, 79, 168, 234, 8, 47, 115, 131, 201, 100, 232, 145, 190, 97, 49, 255, 29, 236, 202, 112, 79, 85, 169, 192, 49, 244, 91, 125, 230, 8, 79, 200, 109, 12, 92, 95, 201, 18, 104, 105, 223, 85, 111, 65, 52, 187, 69, 50, 129, 181, 180, 198, 30, 140, 250, 77, 213, 215, 33, 112, 203, 144, 130, 144, 96, 42, 183, 184, 9, 85, 229, 67, 219, 26, 111, 104, 165, 195, 90, 70, 195, 121, 199, 218, 71, 101, 225, 79, 249, 133, 194, 99, 102, 24, 67, 203, 188, 202, 45, 2, 133, 200, 20, 87, 7, 12, 187, 79, 48, 23, 224, 93, 156, 209, 92, 221, 72, 75, 230, 175, 117, 159, 9, 207, 165, 26, 192, 66, 191, 30, 240, 103, 240, 73, 107, 184, 133, 69, 244, 8, 155, 196, 42, 109, 210, 240, 43, 254, 67, 92, 218, 23, 106, 69, 42, 40, 166, 5, 157, 250, 179, 169, 133, 51, 53, 236, 68, 36, 193, 88, 169, 10, 148, 180, 188, 101, 107, 133, 117, 231, 21, 188, 31, 197, 147, 12, 180, 205, 31, 133, 123, 227, 29, 72, 163, 238, 49, 189, 29, 27, 46, 105, 243, 147, 23, 135, 7, 24, 132, 253, 40, 180, 3, 100, 37, 116, 70, 183, 217, 140, 232, 4, 208, 68, 188, 162, 155, 116, 225, 68, 109, 80, 201, 82, 49, 70, 217, 251, 233, 58, 57, 165, 82, 39, 66, 67, 253, 101, 75, 35, 183, 243, 165, 131, 174, 162, 228, 51, 212, 203, 26, 157, 214, 62, 165, 124, 161, 130, 137, 84, 159, 34, 75, 115, 241, 76, 242, 46, 123, 155, 119, 164, 194, 20, 255, 99, 26, 182, 190, 41, 74, 215, 213, 97, 70, 35, 203, 17, 21, 228, 41, 48, 165, 129, 1, 138, 195, 18, 125, 203, 240, 189, 184, 212, 85, 126, 24, 179, 246, 223, 235, 130, 198, 163, 200, 198, 246, 146, 210, 50, 169, 139, 23, 112, 216, 196, 95, 9, 50, 112, 192, 215, 72, 73, 92, 186, 134, 234, 94, 42, 75, 22, 170, 104, 239, 175, 190, 90, 219, 115, 204, 102, 216, 2, 18, 233, 30, 164, 148, 52, 78, 197, 161, 37, 190, 135, 202, 1, 182, 28, 150, 120, 61, 86, 52, 224, 5, 230, 239, 115, 174, 119, 119, 58, 48, 153, 252, 17, 8, 111, 43, 8, 95, 26, 137, 132, 42, 235, 248, 250, 216, 189, 227, 42, 191, 148, 39, 46, 144, 235, 114, 61, 207, 61, 118, 92, 49, 175, 37, 25, 124, 249, 102, 223, 6, 130, 182, 29, 22, 197, 109, 110, 245, 215, 63, 118, 83, 117, 123, 253, 254, 51, 4, 66, 120, 27, 3, 189, 41, 103, 6, 4, 49, 19, 4, 127, 180, 58, 200, 134, 106, 86, 31, 162, 119, 110, 64, 172, 43, 117, 59, 60, 148, 193, 204, 217, 39, 151, 254, 90, 122, 84, 157, 149, 158, 181, 111, 43, 112, 177, 231, 144, 104, 76, 10, 51, 225, 48, 199, 107, 87, 4, 14, 106, 52, 34, 6, 223, 106, 180, 200, 118, 245, 36, 31, 23, 38, 17, 0, 15, 247, 59, 183, 42, 248, 235, 181, 88, 130, 223, 34, 206, 11, 132, 152, 186, 180, 78, 77, 70, 65, 112, 111, 158, 30, 243, 63, 144, 118, 39, 228, 78, 255, 6, 124, 169, 204, 34, 84, 94, 240, 216, 193, 10, 22, 119, 152, 69, 229, 39, 34, 107, 40, 109, 72, 212, 82, 79, 135, 60, 13, 4, 25, 196, 201, 243, 228, 141, 6, 206, 80, 161, 32, 131, 150, 148, 243, 172, 149, 21, 52, 178, 102, 93, 244, 43, 45, 229, 62, 30, 45, 207, 210, 240, 241, 108, 27, 192, 239, 241, 234], - [29, 222, 127, 158, 37, 117, 145, 236, 162, 226, 27, 76, 230, 130, 61, 120, 142, 125, 153, 109, 239, 158, 115, 54, 207, 52, 7, 146, 250, 112, 134, 246, 26, 217, 115, 53, 171, 253, 24, 21, 235, 157, 87, 33, 162, 211, 1, 165, 207, 30, 68, 54, 239, 194, 29, 214, 99, 4, 0, 148, 199, 72, 228, 79, 207, 108, 157, 75, 235, 1, 225, 28, 66, 179, 121, 192, 102, 176, 17, 18, 48, 126, 201, 9, 4, 82, 89, 254, 121, 51, 143, 216, 212, 252, 24, 143, 61, 78, 30, 110, 89, 67, 234, 107, 35, 204, 78, 15, 122, 19, 18, 13, 51, 252, 196, 165, 103, 175, 31, 78, 83, 140, 27, 95, 22, 173, 23, 35, 127, 122, 234, 198, 154, 50, 214, 163, 232, 223, 203, 204, 159, 79, 156, 239, 193, 28, 179, 23, 36, 128, 23, 238, 60, 206, 223, 218, 10, 147, 243, 0, 104, 249, 206, 59, 239, 13, 146, 164, 165, 253, 101, 85, 47, 174, 199, 243, 150, 188, 137, 77, 94, 141, 161, 220, 39, 210, 170, 196, 53, 6, 162, 152, 80, 34, 35, 233, 1, 23, 8, 52, 74, 37, 151, 131, 190, 30, 192, 0, 36, 203, 144, 59, 91, 252, 20, 238, 214, 122, 182, 84, 208, 75, 146, 40, 42, 234, 148, 79, 90, 147, 92, 33, 130, 36, 221, 26, 191, 23, 185, 19, 113, 247, 161, 106, 35, 37, 68, 14, 248, 66, 247, 135, 77, 19, 54, 138, 242, 157, 189, 240, 221, 198, 78, 21, 192, 136, 19, 129, 75, 130, 230, 78, 173, 86, 242, 107, 133, 227, 157, 215, 189, 130, 14, 65, 66, 149, 123, 128, 97, 186, 224, 92, 92, 230, 36, 172, 204, 39, 108, 147, 245, 148, 112, 108, 41, 229, 116, 11, 143, 105, 92, 221, 139, 129, 166, 26, 62, 66, 10, 162, 173, 164, 135, 55, 98, 29, 79, 115, 2, 198, 113, 217, 77, 109, 114, 49, 234, 206, 42, 74, 140, 96, 128, 83, 207, 171, 97, 127, 161, 92, 234, 54, 255, 133, 226, 165, 131, 163, 193, 14, 94, 248, 233, 5, 200, 36, 227, 19, 83, 93, 176, 128, 134, 44, 138, 35, 38, 234, 83, 33, 158, 74, 38, 251, 111, 183, 50, 112, 1, 208, 120, 142, 52, 114, 124, 201, 111, 235, 143, 48, 167, 66, 199, 25, 66, 92, 171, 38, 38, 34, 128, 67, 235, 200, 242, 72, 222, 11, 152, 185, 124, 51, 238, 78, 0, 230, 226, 30, 67, 184, 224, 115, 70, 90, 112, 251, 45, 140, 42, 216, 20, 130, 247, 212, 54, 101, 245, 87, 235, 86, 236, 30, 46, 244, 36, 168, 224, 19, 242, 123, 196, 147, 227, 154, 159, 77, 142, 35, 69, 83, 0, 177, 130, 35, 155, 77, 121, 53, 210, 134, 166, 88, 224, 208, 180, 34, 97, 148, 140, 46, 44, 57, 165, 237, 226, 210, 176, 53, 91, 139, 196, 210, 114, 118, 116, 171, 135, 71, 169, 49, 180, 19, 163, 50, 17, 236, 169, 253, 137, 173, 167, 27, 199, 221, 108, 52, 237, 167, 86, 171, 1, 141, 252, 215, 50, 71, 248, 115, 64, 214, 14, 247, 231, 88, 229, 95, 81, 21, 67, 90, 101, 43, 152, 30, 26, 185, 247, 176, 152, 240, 65, 236, 198, 123, 51, 37, 5, 86, 155, 136, 96, 74, 33, 142, 242, 152, 4, 5, 97, 80, 16, 89, 85, 3, 212, 65, 234, 99, 33, 196, 10, 225, 145, 147, 32, 232, 180, 95, 174, 199, 61, 210, 211, 173, 37, 214, 227, 243, 194, 71, 175, 75, 121, 118, 158, 128, 228, 147, 204, 179, 189, 156, 177, 29, 132, 146, 1, 10, 63, 44, 29, 53, 133, 49, 26, 99, 101, 211, 70, 34, 126, 221, 23, 65, 103, 80, 120, 194, 106, 211, 102, 134, 123, 37, 50, 75, 7, 146, 84, 71, 5, 27, 176, 155, 249, 72, 114, 212, 201, 103, 169, 22, 68, 85, 57, 225, 60, 3, 5, 112, 178, 80, 138, 41, 94, 21, 59, 19, 108, 120, 249, 70, 240, 240, 229, 213, 255, 186, 76, 15, 135, 174, 121, 83, 155, 252, 88, 190, 100, 162, 177, 6, 0, 41, 187, 23, 64, 45, 86, 98, 181, 241, 165, 79, 53, 55, 216, 56, 201, 35, 141, 239, 46, 74, 15, 17, 197, 218, 82, 104, 160, 65, 173, 60, 60, 138, 210, 140, 122, 249, 61, 95, 131, 203, 80, 111, 82, 219, 218, 115, 58, 154, 58, 59, 153, 236, 119, 26, 152, 148, 238, 199, 151, 252, 49, 213, 12, 4, 201, 188, 248, 244, 239, 230, 163, 116, 24, 65, 51, 73, 23, 0, 171, 204, 15, 159, 65, 27, 67, 198, 228, 89, 249, 34, 74, 195, 56, 45, 98, 18, 113, 89, 183, 143, 86, 65, 249, 135, 72, 67, 158, 221, 189, 133, 254, 172, 150, 36, 88, 243, 247, 218, 217, 72, 201, 170, 169, 58, 37, 97, 6, 74, 132, 180, 93, 13, 53, 193, 211, 2, 72, 45, 254, 224, 113, 166, 12, 151, 143, 18, 54, 0, 206, 194, 115, 51, 187, 35, 156, 162, 5, 61, 113, 216, 4, 184, 199, 82, 122, 242, 128, 88, 106, 9, 153, 145, 98, 226, 219, 89, 33, 243, 22, 112, 75, 4, 171, 104, 15, 36, 47, 70, 193, 116, 207, 110, 27, 4, 141, 18, 253, 138, 202, 10, 83, 136, 27, 181, 114, 122, 142, 225, 88, 195, 131, 143, 19, 181, 58, 31, 102, 187, 64, 55, 31, 64, 147, 153, 247, 142, 69, 13, 37, 99, 169, 182, 119, 116, 11, 185, 235, 117, 180, 217, 29, 82, 221, 14, 244, 188, 239, 110, 67, 211, 230, 181, 67, 126, 249, 242, 236, 88, 50, 121, 194, 123, 116, 196, 29, 237, 40, 74, 128, 80, 43, 37, 113, 227, 55, 168, 229, 132, 151, 113, 210, 15, 167, 108, 241, 53, 167, 102, 50, 226, 255, 62, 24, 212, 154, 232, 132, 34, 47, 180, 39, 87, 33, 43, 74, 8, 101, 75, 199, 167, 232, 178, 31, 179, 96, 222, 249, 57, 91, 43, 14, 137, 100, 65, 89, 202, 177, 61, 34, 193, 221, 43, 91, 171, 85, 182, 156, 58, 208, 85, 49, 134, 228, 200, 247, 56, 49, 48, 63, 253, 46, 28, 157, 155, 126, 187, 215, 127, 124, 238, 114, 239, 90, 131, 182, 6, 150, 19, 233, 90, 126, 9, 171, 116, 82, 80, 111, 51, 138, 15, 124, 88, 44, 52, 36, 191, 84, 240, 227, 117, 178, 159, 29, 237, 211, 1, 41, 69, 76, 3, 72, 79, 175, 143, 180, 224, 106, 38, 29, 26, 146, 135, 192, 221, 11, 26, 10, 225, 174, 0, 121, 124, 219, 167, 165, 10, 195, 178, 58, 199, 31, 166, 215, 201, 44, 8, 225, 85, 162, 98, 110, 203, 46, 45, 137, 162, 106, 201, 84, 93, 12, 41, 134, 70, 236, 55, 169, 119, 47, 72, 96, 238, 180, 51, 251, 52, 109, 189, 190, 169, 195, 1, 213, 4, 61, 206, 252, 224, 122, 175, 123, 26, 52, 91, 67, 169, 212, 202, 52, 238, 187, 111, 43, 12, 51, 58, 53, 224, 252, 199, 65, 187, 58, 148, 25, 97, 51, 30, 145, 235, 204, 131, 130, 91, 10, 154, 55, 36, 56, 186, 242, 14, 232, 185, 240, 71, 110, 37, 227, 169, 17, 176, 229, 231, 101, 37, 96, 79, 91, 196, 122, 189, 226, 101, 111, 12, 233, 121, 108, 240, 24, 68, 228, 46, 44, 27, 246, 16, 25, 172, 159, 17, 221, 100, 91, 228, 193, 155, 200, 94, 125, 238, 75, 239, 114, 82, 58, 141, 101, 161, 221, 143, 29, 163, 70, 167, 202, 141, 63, 170, 172, 90, 146, 0, 165, 194, 24, 151, 208, 34, 94, 218, 163, 197, 178, 112, 226, 45, 158, 106, 13, 137, 242, 101, 184, 151, 54, 181, 220, 238, 88, 92, 178, 121, 161, 53, 246, 151, 72, 23, 239, 133, 111, 245, 113, 210, 59, 42, 134, 9, 185, 202, 125, 126, 239, 116, 87, 114, 34, 200, 136, 182, 173, 102, 82, 73, 183, 104, 173, 167, 110, 217, 67, 62, 196, 193, 241, 248, 243, 27, 108, 124, 211, 23, 9, 137, 216, 88, 196, 68, 93, 114, 27, 177, 109, 149, 116, 104, 24, 37, 220, 7, 77, 140, 81, 137, 141, 13, 239, 104, 153, 193, 192, 173, 215, 176, 190, 235, 160, 250, 38, 142, 122, 58, 111, 206, 244, 80, 144, 31, 244, 119, 11, 254, 163, 245, 110, 89, 58, 53, 214, 203, 243, 173, 230, 248, 63, 239, 218, 187, 192, 229, 48, 208, 205, 101, 21, 172, 45, 229, 193, 228, 53, 89, 94, 240, 79, 122, 62, 208, 48, 220, 99, 250, 235, 135, 2, 105, 106, 40, 178, 92, 90, 199, 155, 246, 90, 155, 90, 187, 191, 157, 195, 249, 91, 109], - [243, 247, 130, 93, 233, 91, 103, 207, 47, 231, 153, 143, 111, 162, 149, 40, 203, 189, 117, 42, 238, 171, 60, 0, 166, 43, 232, 172, 155, 73, 241, 222, 2, 246, 98, 7, 108, 255, 67, 156, 45, 235, 219, 30, 170, 231, 153, 206, 216, 129, 140, 213, 39, 183, 87, 52, 2, 170, 191, 105, 89, 68, 18, 199, 181, 204, 185, 135, 37, 54, 211, 172, 41, 176, 222, 160, 24, 68, 147, 252, 253, 255, 36, 59, 2, 137, 18, 131, 69, 37, 188, 142, 240, 255, 191, 109, 68, 64, 165, 12, 179, 92, 216, 16, 114, 143, 203, 61, 15, 184, 69, 152, 85, 123, 118, 69, 18, 83, 222, 83, 233, 220, 143, 155, 74, 134, 180, 164, 112, 179, 107, 121, 132, 105, 96, 140, 208, 117, 38, 37, 203, 179, 169, 111, 20, 144, 30, 130, 32, 157, 191, 169, 92, 36, 139, 45, 162, 154, 66, 55, 127, 41, 22, 213, 43, 254, 43, 74, 94, 213, 1, 109, 239, 54, 27, 79, 167, 25, 248, 229, 245, 34, 227, 227, 45, 20, 207, 98, 220, 119, 221, 5, 111, 13, 51, 23, 208, 86, 217, 240, 133, 249, 90, 215, 244, 241, 70, 214, 242, 54, 100, 143, 224, 155, 94, 103, 177, 139, 115, 119, 15, 50, 162, 158, 146, 182, 245, 172, 173, 207, 247, 148, 63, 151, 134, 251, 191, 189, 115, 4, 112, 124, 240, 88, 147, 70, 212, 158, 234, 76, 116, 233, 90, 101, 59, 55, 153, 22, 197, 69, 4, 103, 237, 180, 162, 79, 129, 189, 194, 49, 179, 45, 205, 55, 68, 99, 2, 144, 233, 173, 93, 255, 118, 33, 39, 18, 172, 92, 208, 15, 67, 20, 207, 41, 254, 199, 186, 134, 100, 76, 66, 22, 76, 49, 173, 98, 73, 204, 22, 179, 102, 123, 72, 84, 43, 117, 178, 25, 20, 107, 225, 82, 112, 219, 189, 188, 232, 219, 148, 3, 156, 251, 147, 151, 147, 83, 61, 87, 128, 106, 98, 136, 164, 94, 34, 133, 231, 8, 153, 149, 234, 72, 173, 243, 28, 188, 116, 25, 21, 90, 24, 11, 194, 12, 206, 150, 243, 125, 73, 67, 216, 199, 97, 252, 132, 132, 111, 191, 176, 159, 209, 249, 36, 62, 236, 187, 227, 92, 108, 86, 212, 193, 10, 136, 5, 94, 130, 61, 18, 55, 156, 134, 23, 227, 148, 197, 64, 151, 180, 10, 221, 112, 106, 139, 26, 47, 154, 97, 162, 18, 186, 175, 155, 160, 153, 19, 232, 142, 149, 210, 248, 144, 50, 60, 47, 156, 228, 224, 170, 129, 81, 93, 249, 81, 243, 123, 95, 228, 14, 88, 219, 92, 231, 45, 104, 158, 154, 154, 213, 24, 239, 178, 85, 163, 224, 135, 141, 9, 139, 235, 82, 230, 36, 244, 98, 73, 25, 171, 107, 187, 165, 241, 233, 97, 195, 71, 193, 169, 134, 54, 135, 2, 175, 23, 97, 221, 47, 198, 107, 77, 189, 211, 180, 251, 141, 183, 28, 73, 66, 186, 142, 53, 253, 230, 73, 184, 114, 208, 207, 207, 175, 220, 100, 181, 26, 191, 164, 50, 60, 9, 245, 236, 145, 70, 195, 6, 218, 121, 162, 186, 62, 226, 127, 148, 4, 151, 183, 82, 207, 137, 0, 67, 204, 126, 21, 98, 163, 51, 169, 206, 238, 57, 48, 220, 255, 96, 160, 166, 227, 80, 226, 139, 7, 252, 228, 220, 218, 214, 246, 175, 236, 180, 169, 154, 248, 80, 239, 220, 141, 63, 122, 204, 62, 13, 8, 164, 123, 156, 92, 123, 94, 30, 106, 213, 242, 206, 60, 12, 125, 64, 121, 9, 170, 56, 139, 39, 204, 35, 143, 249, 69, 118, 23, 23, 161, 43, 147, 17, 118, 111, 193, 200, 189, 69, 199, 184, 102, 52, 220, 169, 243, 153, 11, 145, 169, 69, 65, 46, 26, 54, 246, 137, 90, 30, 252, 104, 77, 222, 19, 160, 68, 29, 97, 235, 67, 39, 62, 86, 161, 213, 3, 181, 12, 104, 57, 109, 56, 192, 133, 112, 24, 104, 136, 104, 48, 38, 189, 28, 69, 184, 126, 141, 27, 63, 146, 215, 173, 244, 99, 112, 67, 58, 173, 240, 166, 218, 30, 223, 130, 157, 52, 228, 243, 14, 245, 176, 199, 196, 104, 190, 90, 245, 43, 191, 139, 200, 208, 136, 177, 228, 15, 21, 37, 75, 137, 10, 249, 111, 172, 201, 77, 53, 12, 233, 215, 156, 192, 36, 162, 52, 67, 41, 51, 246, 111, 206, 254, 18, 8, 57, 221, 70, 134, 123, 143, 223, 242, 78, 153, 71, 127, 48, 132, 2, 138, 164, 4, 42, 79, 201, 165, 44, 160, 142, 114, 3, 194, 233, 12, 242, 161, 134, 207, 228, 23, 220, 207, 40, 164, 255, 133, 204, 214, 27, 197, 163, 52, 197, 220, 234, 64, 59, 213, 72, 125, 17, 84, 140, 82, 3, 229, 65, 26, 21, 42, 195, 54, 136, 0, 164, 142, 102, 127, 104, 208, 1, 71, 121, 96, 50, 204, 165, 89, 74, 155, 249, 228, 225, 108, 203, 57, 142, 165, 143, 24, 248, 206, 183, 238, 217, 58, 126, 225, 8, 237, 98, 79, 101, 132, 35, 19, 74, 195, 144, 159, 30, 231, 252, 187, 226, 88, 5, 196, 183, 20, 98, 23, 4, 55, 129, 70, 68, 27, 62, 141, 222, 35, 104, 5, 201, 172, 160, 20, 244, 253, 131, 132, 192, 165, 66, 216, 63, 147, 25, 66, 75, 3, 101, 235, 228, 181, 126, 230, 109, 84, 128, 138, 21, 62, 198, 90, 167, 212, 155, 169, 213, 1, 64, 33, 153, 22, 238, 148, 243, 16, 159, 251, 203, 10, 151, 191, 57, 37, 249, 45, 128, 156, 213, 254, 151, 119, 195, 224, 137, 83, 199, 38, 20, 93, 241, 70, 81, 122, 169, 74, 206, 50, 250, 208, 55, 37, 159, 146, 73, 23, 237, 27, 155, 69, 30, 123, 52, 28, 231, 175, 201, 79, 190, 141, 76, 190, 234, 227, 54, 104, 132, 187, 207, 243, 255, 247, 52, 15, 188, 5, 18, 96, 229, 170, 51, 214, 130, 75, 108, 249, 224, 16, 54, 252, 61, 229, 60, 103, 226, 188, 55, 143, 199, 210, 159, 67, 31, 19, 250, 37, 140, 219, 212, 252, 145, 8, 109, 182, 231, 119, 77, 177, 102, 94, 141, 236, 68, 221, 235, 149, 198, 249, 111, 236, 246, 239, 137, 59, 123, 94, 68, 114, 106, 164, 105, 190, 197, 10, 134, 116, 129, 159, 194, 158, 252, 95, 135, 43, 57, 7, 141, 181, 38, 72, 164, 137, 210, 192, 134, 134, 210, 100, 149, 226, 106, 34, 228, 53, 189, 141, 196, 98, 35, 198, 28, 107, 237, 70, 202, 118, 182, 161, 27, 234, 76, 28, 52, 27, 72, 126, 198, 18, 208, 73, 108, 232, 35, 95, 152, 46, 205, 162, 10, 95, 133, 151, 59, 65, 121, 223, 245, 246, 225, 67, 117, 154, 53, 1, 22, 63, 107, 38, 164, 207, 85, 53, 12, 108, 20, 123, 197, 237, 59, 93, 90, 237, 4, 5, 89, 203, 199, 206, 149, 109, 248, 42, 36, 75, 17, 203, 17, 54, 139, 34, 58, 216, 78, 207, 48, 114, 198, 152, 36, 113, 143, 235, 129, 41, 41, 184, 227, 121, 121, 208, 175, 60, 59, 35, 206, 184, 47, 85, 178, 165, 119, 224, 207, 249, 194, 215, 91, 21, 85, 109, 30, 32, 129, 219, 133, 181, 242, 58, 247, 194, 147, 254, 83, 230, 51, 123, 132, 91, 20, 225, 126, 191, 182, 17, 48, 52, 204, 80, 83, 66, 206, 119, 43, 66, 71, 210, 154, 150, 135, 81, 110, 135, 30, 96, 20, 224, 151, 151, 34, 145, 207, 117, 161, 151, 119, 18, 212, 120, 82, 19, 196, 146, 33, 243, 142, 130, 46, 57, 204, 146, 209, 84, 37, 112, 182, 145, 111, 66, 18, 17, 92, 140, 163, 193, 232, 186, 201, 167, 132, 203, 234, 21, 68, 215, 5, 148, 200, 61, 159, 79, 75, 48, 116, 11, 94, 155, 207, 107, 88, 60, 80, 250, 121, 15, 102, 39, 14, 98, 133, 18, 237, 78, 91, 133, 7, 159, 18, 26, 46, 34, 248, 208, 158, 22, 158, 212, 110, 153, 137, 67, 129, 13, 67, 45, 242, 83, 253, 104, 196, 224, 90, 75, 110, 172, 38, 63, 53, 158, 254, 237, 75, 193, 211, 160, 219, 86, 124, 56, 51, 104, 27, 93, 93, 32, 185, 145, 246, 196, 7, 175, 30, 247, 119, 178, 151, 123, 34, 204, 108, 151, 244, 42, 122, 1, 37, 96, 193, 75, 122, 102, 188, 116, 6, 107, 216, 144, 25, 5, 229, 191, 248, 10, 122, 79, 255, 204, 57, 53, 216, 20, 215, 129, 12, 252, 134, 64, 167, 116, 161, 170, 129, 26, 82, 126, 255, 200, 100, 71, 12, 52, 227, 251, 32, 212, 238, 8, 25, 105, 255, 230, 199, 188, 160, 65, 180, 231, 154, 42, 160, 92, 20], - [152, 49, 61, 29, 50, 167, 19, 193, 135, 32, 218, 190, 189, 78, 228, 68, 71, 5, 113, 73, 190, 90, 165, 119, 198, 160, 185, 194, 5, 123, 164, 149, 107, 54, 186, 61, 237, 210, 158, 253, 110, 102, 147, 187, 19, 77, 20, 179, 166, 139, 246, 222, 175, 80, 161, 42, 147, 189, 98, 9, 210, 30, 245, 221, 39, 13, 235, 35, 28, 142, 165, 187, 82, 166, 118, 132, 59, 0, 44, 45, 223, 27, 95, 37, 177, 165, 166, 50, 21, 226, 144, 140, 51, 236, 14, 156, 51, 115, 21, 13, 106, 0, 155, 24, 49, 237, 63, 73, 47, 150, 126, 36, 139, 181, 93, 177, 232, 75, 135, 8, 204, 197, 179, 150, 117, 177, 125, 208, 237, 168, 65, 145, 17, 202, 3, 1, 88, 188, 108, 85, 133, 57, 31, 141, 247, 240, 9, 82, 53, 144, 99, 247, 152, 57, 204, 226, 15, 29, 37, 97, 124, 176, 207, 13, 30, 27, 135, 117, 12, 139, 115, 250, 5, 139, 250, 94, 152, 30, 251, 133, 56, 180, 188, 4, 234, 132, 93, 195, 232, 29, 237, 210, 185, 24, 144, 86, 77, 241, 69, 153, 172, 227, 127, 27, 174, 69, 157, 248, 247, 21, 230, 24, 42, 199, 148, 76, 157, 54, 14, 196, 165, 188, 45, 239, 80, 156, 82, 75, 196, 26, 5, 28, 234, 161, 84, 233, 151, 141, 254, 33, 25, 33, 142, 33, 187, 91, 186, 178, 85, 241, 138, 200, 151, 238, 133, 201, 15, 187, 213, 113, 52, 227, 185, 196, 243, 244, 47, 71, 221, 32, 59, 27, 239, 52, 152, 48, 221, 125, 251, 55, 234, 222, 123, 49, 93, 98, 114, 83, 243, 165, 153, 248, 221, 136, 33, 11, 103, 199, 5, 149, 107, 212, 187, 130, 244, 224, 54, 45, 154, 36, 177, 64, 68, 91, 30, 12, 53, 7, 206, 171, 53, 110, 204, 162, 175, 181, 1, 32, 149, 170, 129, 71, 158, 178, 49, 39, 123, 237, 32, 186, 182, 119, 33, 53, 52, 49, 173, 71, 190, 17, 179, 253, 47, 217, 79, 120, 15, 207, 109, 148, 242, 212, 249, 239, 80, 27, 243, 56, 222, 54, 85, 24, 230, 139, 186, 128, 156, 211, 72, 60, 84, 185, 52, 162, 0, 206, 212, 107, 178, 17, 78, 244, 193, 147, 239, 8, 16, 23, 126, 92, 165, 118, 150, 127, 62, 129, 207, 151, 198, 236, 27, 61, 242, 24, 131, 75, 31, 133, 10, 211, 149, 35, 188, 183, 187, 10, 236, 200, 244, 196, 214, 140, 82, 205, 58, 251, 253, 220, 75, 237, 173, 92, 34, 253, 20, 117, 220, 208, 47, 107, 218, 46, 230, 101, 238, 47, 248, 219, 84, 207, 223, 178, 2, 168, 125, 33, 3, 131, 103, 96, 47, 94, 190, 240, 2, 103, 41, 241, 40, 49, 244, 66, 53, 174, 11, 253, 207, 224, 129, 240, 10, 35, 139, 175, 240, 161, 36, 218, 131, 208, 12, 178, 174, 225, 8, 90, 54, 13, 156, 146, 48, 141, 137, 28, 211, 145, 49, 234, 119, 149, 225, 172, 7, 115, 47, 35, 63, 72, 148, 198, 72, 203, 234, 142, 230, 219, 64, 86, 103, 156, 218, 100, 113, 235, 17, 22, 100, 205, 37, 60, 233, 124, 129, 8, 12, 100, 90, 205, 101, 192, 254, 234, 204, 76, 23, 50, 142, 170, 115, 108, 207, 162, 50, 30, 188, 200, 193, 195, 23, 199, 121, 108, 132, 223, 61, 79, 229, 182, 142, 243, 210, 141, 142, 221, 166, 3, 163, 23, 176, 156, 5, 239, 14, 228, 119, 81, 159, 250, 145, 40, 94, 169, 239, 59, 98, 8, 160, 66, 168, 241, 177, 23, 9, 52, 216, 50, 72, 241, 253, 203, 125, 170, 136, 138, 118, 13, 209, 188, 212, 230, 79, 82, 255, 222, 133, 73, 213, 20, 73, 88, 74, 177, 29, 14, 174, 197, 132, 156, 64, 189, 220, 97, 216, 226, 209, 223, 161, 76, 20, 203, 122, 120, 11, 196, 41, 120, 250, 106, 174, 45, 245, 219, 154, 184, 95, 195, 30, 83, 217, 181, 195, 152, 113, 231, 17, 210, 25, 210, 228, 145, 20, 198, 38, 65, 189, 228, 148, 63, 33, 27, 10, 6, 223, 92, 234, 253, 223, 122, 79, 216, 127, 12, 223, 223, 140, 0, 149, 154, 21, 144, 15, 65, 239, 82, 176, 116, 106, 73, 204, 86, 249, 153, 96, 252, 226, 209, 199, 126, 62, 174, 238, 178, 204, 169, 147, 50, 2, 156, 183, 176, 193, 104, 78, 146, 232, 64, 174, 84, 133, 245, 8, 242, 117, 113, 77, 183, 254, 231, 63, 135, 169, 225, 253, 246, 108, 98, 62, 50, 73, 212, 120, 101, 50, 17, 196, 144, 195, 211, 123, 122, 247, 195, 87, 226, 184, 224, 154, 32, 81, 25, 99, 234, 135, 170, 61, 20, 104, 35, 119, 7, 60, 83, 192, 46, 181, 53, 118, 101, 16, 72, 47, 238, 104, 59, 65, 118, 163, 96, 164, 217, 95, 219, 246, 91, 29, 228, 87, 60, 57, 91, 209, 145, 50, 181, 240, 142, 27, 146, 47, 194, 17, 98, 58, 38, 71, 7, 193, 227, 85, 156, 166, 135, 76, 96, 147, 1, 6, 204, 145, 148, 41, 177, 104, 155, 160, 184, 93, 28, 243, 132, 166, 75, 94, 119, 29, 117, 206, 204, 131, 215, 235, 174, 12, 243, 151, 174, 65, 0, 251, 27, 59, 149, 216, 146, 79, 42, 174, 219, 168, 27, 207, 113, 64, 53, 139, 179, 245, 97, 255, 85, 192, 127, 251, 187, 114, 115, 29, 188, 239, 88, 112, 84, 181, 201, 157, 213, 29, 71, 116, 40, 40, 168, 70, 68, 185, 177, 34, 251, 132, 83, 14, 97, 23, 183, 124, 188, 167, 250, 120, 139, 254, 235, 63, 71, 199, 25, 21, 130, 232, 37, 126, 64, 10, 191, 140, 100, 184, 150, 228, 169, 46, 20, 236, 155, 117, 136, 112, 32, 202, 74, 184, 15, 162, 199, 65, 114, 225, 3, 83, 86, 199, 239, 220, 76, 91, 214, 141, 244, 194, 80, 195, 63, 134, 171, 74, 63, 141, 120, 190, 198, 74, 58, 106, 229, 187, 79, 82, 39, 147, 101, 107, 15, 92, 210, 90, 166, 122, 59, 74, 237, 200, 96, 188, 3, 136, 53, 244, 32, 127, 101, 207, 214, 209, 166, 218, 175, 23, 100, 20, 57, 28, 78, 26, 154, 129, 76, 2, 150, 180, 228, 221, 3, 98, 66, 35, 145, 148, 16, 210, 16, 37, 143, 202, 84, 10, 28, 145, 156, 131, 140, 221, 33, 23, 219, 131, 232, 92, 126, 198, 83, 251, 148, 10, 84, 42, 70, 66, 40, 151, 60, 68, 46, 61, 188, 62, 127, 140, 149, 151, 98, 108, 173, 183, 167, 180, 39, 169, 165, 66, 235, 225, 18, 1, 50, 112, 226, 52, 98, 197, 248, 69, 158, 4, 236, 76, 65, 19, 199, 129, 100, 147, 207, 82, 27, 111, 155, 31, 88, 70, 207, 118, 128, 233, 127, 162, 89, 53, 75, 88, 177, 67, 198, 55, 143, 220, 243, 178, 231, 38, 72, 83, 125, 92, 139, 43, 236, 96, 209, 85, 77, 202, 54, 163, 180, 93, 143, 29, 5, 101, 134, 250, 106, 48, 22, 201, 249, 27, 114, 107, 216, 212, 166, 127, 24, 34, 22, 38, 172, 183, 0, 178, 190, 85, 136, 27, 224, 240, 97, 75, 190, 121, 80, 183, 97, 253, 93, 246, 32, 186, 250, 153, 136, 132, 228, 251, 193, 90, 195, 217, 97, 215, 243, 171, 54, 116, 223, 195, 29, 62, 250, 77, 133, 242, 58, 27, 124, 126, 206, 215, 71, 64, 29, 185, 142, 200, 75, 28, 50, 144, 35, 167, 27, 32, 46, 253, 48, 126, 77, 55, 94, 215, 58, 152, 118, 177, 15, 196, 227, 54, 206, 135, 195, 91, 120, 141, 175, 160, 19, 231, 98, 39, 70, 158, 143, 103, 136, 185, 147, 14, 62, 106, 156, 119, 93, 122, 225, 226, 35, 52, 80, 218, 167, 160, 168, 6, 101, 24, 106, 209, 60, 25, 157, 228, 93, 37, 35, 217, 172, 80, 249, 201, 61, 244, 232, 47, 35, 249, 254, 19, 180, 110, 157, 227, 139, 13, 179, 160, 48, 91, 138, 132, 17, 243, 94, 238, 13, 4, 39, 159, 138, 182, 182, 167, 2, 60, 219, 96, 61, 119, 140, 169, 235, 161, 59, 247, 37, 128, 198, 220, 31, 173, 113, 196, 31, 250, 44, 188, 81, 112, 99, 158, 111, 186, 40, 76, 24, 116, 231, 152, 243, 86, 55, 191, 50, 97, 22, 114, 146, 100, 226, 213, 168, 36, 28, 27, 176, 203, 193, 22, 6, 207, 78, 32, 100, 176, 49, 151, 188, 31, 167, 189, 163, 238, 176, 131, 218, 209, 196, 120, 55, 159, 131, 16, 95, 40, 36, 106, 86, 138, 57, 5, 164, 78, 6, 219, 11, 175, 75, 227, 189, 55, 144, 30, 84, 183, 185, 213, 140, 84, 59] - ], - "segmentSize": null - }, - { - "encrypted": [ - [159, 210, 40, 116, 165, 51, 193, 177, 90, 5, 110, 178, 254, 30, 88, 57, 209, 246, 255, 95, 194, 242, 139, 59, 9, 28, 255, 205, 109, 73, 229, 37, 25, 229, 209, 214, 54, 11, 98, 15, 60, 234, 251, 193, 147, 231, 161, 84, 239, 161, 117, 74, 216, 229, 160, 102, 236, 220, 185, 221, 240, 47, 132, 134, 121, 158, 85, 28, 5, 69, 253, 79, 93, 39, 94, 156, 116, 71, 155, 189, 142, 116, 83, 49, 149, 199, 63, 144, 68, 65, 17, 166, 36, 90, 5, 78, 126, 123, 167, 227, 21, 27, 54, 175, 201, 23, 167, 189, 225, 210, 107, 246, 198, 82, 179, 155, 171, 112, 75, 251, 105, 41, 99, 77, 14, 183, 159, 189, 182, 213, 231, 113, 247, 197, 145, 187, 2, 224, 99, 51, 63, 81, 106, 155, 166, 190, 176, 225, 15, 65, 231, 205, 178, 70, 84, 62, 227, 163, 254, 194, 51, 194, 82, 158, 166, 7, 165, 76, 104, 104, 194, 189, 173, 120, 31, 248, 8, 160, 21, 232, 158, 121, 50, 129, 153, 123, 207, 242, 93, 146, 100, 61, 131, 207, 46, 144, 81, 80, 142, 93, 192, 224, 153, 123, 202, 24, 20, 111, 131, 252, 3, 38, 63, 174, 249, 202, 228, 45, 162, 251, 169, 162, 85, 44, 167, 168, 75, 173, 17, 55, 137, 198, 24, 243, 173, 16, 115, 65, 255, 194, 158, 57, 197, 82, 110, 252, 12, 91, 102, 40, 241, 159, 174, 59, 16, 246, 204, 199, 20, 54, 72, 13, 168, 88, 191, 214, 196, 220, 109, 156, 172, 36, 38, 61, 249, 88, 254, 6, 37, 238, 209, 239, 191, 220, 9, 209, 210, 225, 29, 204, 147, 223, 201, 74, 246, 57, 175, 208, 222, 174, 251, 6, 23, 70, 69, 83, 55, 172, 66, 121, 105, 52, 137, 185, 109, 170, 97, 243, 91, 89, 242, 63, 141, 28, 114, 23, 226, 23, 221, 132, 242, 127, 172, 62, 90, 44, 39, 214, 136, 27, 41, 183, 200, 246, 126, 184, 18, 169, 153, 160, 136, 211, 185, 183, 236, 32, 87, 96, 183, 202, 251, 36, 177, 73, 50, 234, 63, 106, 167, 93, 29, 66, 149, 107, 64, 140, 225, 205, 185, 28, 171, 248, 127, 119, 133, 45, 240, 232, 18, 212, 210, 200, 162, 138, 38, 48, 17, 204, 15, 51, 87, 240, 1, 121, 105, 4, 120, 16, 155, 76, 147, 86, 181, 185, 153, 165, 7, 52, 31, 248, 170, 241, 148, 72, 246, 179, 237, 218, 177, 235, 234, 59, 31, 46, 226, 26, 92, 149, 3, 200, 165, 227, 93, 137, 185, 227, 5, 22, 16, 3, 175, 145, 89, 201, 140, 214, 197, 87, 214, 135, 251, 101, 82, 48, 14, 194, 32, 120, 141, 222, 24, 104, 111, 114, 128, 157, 32, 132, 181, 253, 97, 158, 30, 211, 153, 114, 249, 222, 242, 233, 60, 155, 15, 106, 220, 96, 250, 35, 104, 93, 19, 101, 68, 175, 57, 112, 162, 246, 229, 37, 216, 178, 56, 25, 135, 93, 64, 185, 3, 71, 197, 126, 220, 149, 49, 216, 174, 143, 89, 150, 202, 34, 191, 7, 225, 126, 77, 207, 62, 120, 183, 48, 93, 215, 246, 92, 175, 82, 153, 222, 80, 103, 33, 47, 27, 149, 88, 13, 43, 237, 203, 205, 105, 169, 114, 163, 217, 218, 227, 77, 86, 254, 83, 251, 183, 126, 234, 159, 137, 90, 241, 212, 115, 49, 2, 3, 202, 103, 144, 138, 99, 180, 96, 22, 250, 186, 156, 190, 68, 176, 59, 180, 77, 210, 170, 114, 73, 68, 196, 48, 153, 231, 255, 118, 150, 61, 154, 162, 116, 204, 93, 12, 115, 174, 123, 245, 199, 219, 242, 207, 30, 220, 236, 207, 204, 68, 246, 167, 209, 60, 216, 129, 168, 171, 68, 145, 190, 229, 70, 175, 190, 168, 114, 214, 201, 80, 228, 117, 18, 185, 129, 249, 5, 129, 133, 157, 213, 238, 44, 88, 228, 235, 92, 136, 224, 170, 79, 166, 230, 214, 201, 143, 13, 225, 107, 86, 107, 239, 15, 87, 146, 147, 9, 144, 84, 57, 105, 254, 94, 158, 119, 53, 19, 254, 156, 4, 36, 249, 194, 179, 19, 92, 60, 12, 99, 65, 222, 225, 61, 149, 92, 216, 144, 162, 8, 80, 107, 53, 234, 37, 29, 8, 117, 11, 97, 202, 111, 48, 28, 243, 65, 34, 97, 105, 250, 20, 28, 2, 88, 130, 204, 183, 238, 247, 172, 9, 41, 199, 189, 120, 88, 230, 22, 105, 88, 86, 110, 99, 130, 236, 102, 101, 139, 3, 99, 121, 170, 253, 17, 161, 99, 40, 85, 117, 49, 32, 21, 16, 11, 232, 230, 151, 156, 39, 29, 21, 176, 74, 134, 78, 219, 23, 138, 247, 126, 90, 130, 117, 173, 116, 149, 110, 71, 171, 62, 204, 141, 229, 90, 92, 145, 116, 83, 51, 136, 181, 47, 137, 192, 153, 137, 206, 252, 135, 32, 227, 185, 1, 139, 26, 100, 50, 113, 214, 66, 6, 56, 122, 154, 86, 49, 18, 253, 4, 202, 50, 189, 217, 30, 46, 121, 9, 220, 149, 71, 235, 191, 120, 116, 86, 126, 37, 57, 105, 190, 85, 209, 117, 140, 221, 40, 6, 45, 192, 171, 124, 44, 97, 235, 135, 79, 115, 170, 236, 233, 122, 121, 47, 72, 70, 247, 214, 54, 216, 99, 76, 121, 212, 82, 127, 44, 159, 249, 4, 62, 99, 149, 72, 124, 237, 149, 224, 61, 242, 127, 222, 51, 191, 182, 82, 162, 171, 166, 226, 41, 215, 36, 237, 170, 177, 236, 129, 42, 74, 138, 51, 251, 36, 128, 250, 26, 41, 47, 253, 152, 235, 168, 224, 145, 217, 232, 60, 137, 132, 24, 251, 7, 228, 74, 50, 36, 209, 138, 111, 133, 61, 101, 148, 74, 165, 131, 153, 161, 13, 205, 68, 177, 222, 219, 224, 83, 18, 16, 241, 109, 45, 75, 117, 93, 153, 96, 141, 137, 101, 76, 191, 3, 176, 18, 65, 71, 89, 25, 50, 201, 85, 245, 118, 139, 76, 111, 82, 102, 227, 46, 248, 220, 25, 59, 186, 181, 136, 98, 207, 64, 9, 53, 54, 2, 28, 43, 153, 243, 72, 109, 146, 128, 46, 238, 124, 123, 34, 221, 59, 242, 152, 182, 161, 120, 152, 87, 45, 246, 138, 26, 179, 148, 131, 119, 2, 135, 251, 178, 74, 134, 246, 6, 159, 17, 57, 80, 57, 82, 1, 222, 29, 17, 222, 22, 203, 243, 154, 154, 52, 217, 232, 130, 143, 117, 208, 1, 117, 107, 170, 8, 140, 46, 238, 205, 193, 24, 60, 5, 248, 121, 121, 170, 221, 250, 238, 182, 148, 132, 117, 143, 121, 143, 23, 73, 68, 145, 246, 52, 69, 32, 75, 43, 94, 209, 84, 188, 105, 46, 166, 225, 167, 102, 33, 204, 148, 119, 42, 69, 124, 47, 177, 222, 56, 222, 191, 233, 151, 152, 154, 230, 193, 252, 5, 64, 178, 183, 16, 19, 194, 54, 224, 21, 96, 179, 127, 23, 205, 230, 195, 249, 119, 209, 0, 26, 84, 238, 173, 108, 36, 129, 161, 15, 91, 105, 145, 1, 9, 69, 223, 65, 223, 82, 133, 13, 177, 73, 235, 55, 8, 180, 200, 175, 45, 138, 96, 95, 225, 230, 56, 225, 112, 82, 182, 125, 204, 138, 132, 185, 219, 105, 92, 111, 171, 90, 85, 169, 0, 197, 58, 148, 41, 255, 73, 220, 170, 129, 59, 108, 87, 157, 37, 220, 63, 82, 135, 93, 21, 60, 170, 236, 93, 245, 112, 218, 94, 178, 121, 203, 230, 158, 138, 107, 180, 103, 23, 28, 111, 73, 239, 140, 191, 90, 178, 137, 80, 180, 207, 71, 142, 94, 222, 36, 217, 29, 52, 85, 240, 222, 193, 159, 53, 66, 113, 142, 17, 67, 123, 106, 230, 21, 196, 204, 137, 235, 147, 195, 152, 179, 81, 49, 28, 94, 124, 23, 197, 126, 171, 205, 237, 106, 164, 80, 210, 111, 221, 224, 87, 63, 123, 55, 237, 11, 189, 11, 184, 75, 110, 0, 106, 75, 122, 80, 150, 120, 173, 209, 203, 53, 234, 153, 5, 223, 212, 26, 151, 38, 200, 227, 101, 215, 16, 154, 25, 23, 136, 109, 68, 226, 196, 92, 214, 233, 204, 217, 212, 241, 145, 184, 175, 3, 112, 148, 236, 228, 232, 1, 140, 64, 238, 112, 211, 59, 164, 157, 41, 140, 165, 50, 99, 1, 213, 206, 3, 23, 169, 66, 39, 249, 176, 89, 245, 110, 76, 103, 164, 28, 41, 174, 98, 188, 119, 242, 204, 246, 253, 118, 25, 37, 158, 245, 64, 205, 52, 100, 238, 26, 156, 123, 73, 38, 123, 97, 14, 97, 225, 22, 42, 82, 17, 70, 247, 100, 121, 6, 35, 231, 67, 81, 136, 117, 123, 106, 168, 173, 186, 52, 11, 198, 17, 30, 105, 120, 255, 61, 121, 23, 95, 111, 206, 184, 135, 89, 229, 74, 121, 212, 28, 214, 173, 158, 54, 118, 125, 9, 171, 101, 184, 39, 96, 246, 147, 28, 27, 93, 215, 49, 38, 57, 55, 83, 107, 145, 59, 199, 12, 202, 211, 92, 117, 225, 202, 45, 119, 217, 213, 128, 227, 0, 135, 177, 17, 101, 171, 39, 212, 88, 163, 89, 225, 216, 62, 189, 171, 45, 38, 184, 118, 158, 46, 219, 183, 197, 49, 187, 174, 187, 68, 225, 136, 243, 3, 80, 162, 138, 85, 163, 163, 145, 109, 110, 24, 40, 40, 8, 61, 91, 192, 197, 40, 111, 196, 103, 47, 14, 245, 213, 96, 255, 83, 19, 248, 178, 202, 90, 54, 35, 72, 79, 196, 201, 133, 212, 142, 239, 152, 143, 120, 255, 153, 238, 184, 144, 177, 234, 21, 17, 84, 136, 65, 93, 234, 162, 84, 254, 202, 53, 95, 232, 111, 184, 30, 193, 14, 112, 176, 220, 106, 105, 45, 107, 221, 85, 229, 52, 200, 96, 128, 115, 243, 205, 181, 192, 78, 142, 196, 157, 80, 84, 208, 200, 96, 197, 37, 122, 10, 2, 126, 176, 123, 128, 225, 199, 45, 196, 173, 180, 173, 180, 75, 127, 150, 100, 86, 125, 100, 61, 90, 107, 62, 18, 14, 92, 221, 75, 152, 187, 21, 91, 88, 146, 191, 161, 229, 12, 61, 84, 214, 24, 41, 91, 65, 91, 153, 95, 114, 205, 12, 6, 146, 56, 45, 24, 185, 210, 219, 212, 93, 243, 67, 47, 24, 106, 245, 147, 153, 204, 7, 25, 13, 226, 248, 113, 206, 40, 169, 102, 27, 13, 165, 46, 2, 171, 191, 56, 55, 151, 122, 188, 203, 69, 185, 118, 205, 125, 180, 128, 127, 126, 153, 33, 255, 58, 53, 163, 152, 104, 52, 59, 66, 27, 51, 118, 108, 96, 224, 152, 202, 169, 26, 27, 3, 110, 233, 235, 82, 191, 103, 113, 71, 165, 160, 145, 117, 21, 65, 16, 95, 73, 161, 184, 65, 231, 171, 124, 34, 59, 144, 209, 159, 22, 105, 170, 20, 111, 98, 6, 172, 191, 186, 128, 221, 125, 109, 39, 11, 166, 89, 184, 137, 190, 137, 254, 6, 170, 98, 13, 143, 40, 250, 198, 216, 65, 170, 188, 208, 8, 39, 227, 206, 145, 2, 237, 63, 170, 140, 126, 202, 246, 85, 114, 129, 99, 210, 111, 116, 15, 106, 31, 237, 137, 107, 129, 103, 199, 212, 104, 30, 28, 65, 74, 23, 209, 139, 12, 77, 35, 192, 26, 141, 158, 125, 31, 114, 119, 65, 36, 221, 251, 119, 47, 101, 11, 147, 195, 232, 203, 23, 98, 6, 193, 183, 177, 11, 29, 156, 200, 10, 147, 146, 203, 202, 116, 252, 219, 187, 32, 107, 219, 40, 219, 135, 242, 23, 234, 53, 242, 65, 147, 139, 154, 242, 110, 85, 67, 49, 148, 152, 96, 102, 247, 88, 36, 185, 14, 125, 64, 117, 155, 134, 23, 190, 209, 176, 66, 218, 254, 170, 80, 227, 29, 237, 165, 236, 197, 80, 166, 144, 191, 176, 245, 32, 117, 54, 32, 247, 162, 71, 40, 93, 118, 27, 64, 161, 245, 132, 126, 40, 25, 186, 154, 126, 17, 46, 32, 155, 103, 211, 63, 178, 111, 85, 238, 6, 52, 175, 138, 93, 220, 250, 224, 231, 187, 60, 86, 126, 13, 122, 220, 147, 26, 78, 111, 108, 147, 147, 202, 44, 135, 46, 229, 23, 8, 78, 26, 253, 8, 154, 56, 158, 249, 77, 23, 192, 81, 49, 114, 60, 50, 42, 57, 88, 166, 252, 71, 46, 240, 35, 138, 89, 61, 166, 23, 15, 145, 110, 93, 178, 14, 109, 177, 197, 165, 25, 210, 245, 223, 140, 77, 202, 233, 94, 62, 69, 135, 160, 2, 109, 130, 79, 129, 214, 79, 97, 137, 17, 149, 48, 84, 45, 198, 31, 246, 117, 11, 227, 50, 54, 185, 152, 235, 1, 149, 224, 145, 26, 125, 70, 45, 191, 195, 225, 89, 17, 160, 5, 74, 38, 10, 66, 156, 82, 144, 60, 149, 154, 30, 195, 230, 232, 87, 138, 81, 127, 97, 16, 176, 146, 77, 203, 221, 82, 183, 177, 168, 141, 2, 155, 50, 50, 174, 108, 40, 35, 87, 147, 207, 252, 38, 233, 22, 238, 126, 88, 234, 94, 22, 225, 138, 86, 0, 229, 206, 187, 233, 52, 74, 222, 51, 8, 66, 111, 47, 245, 63, 246, 18, 74, 113, 53, 20, 64, 255, 64, 4, 215, 155, 110, 147, 251, 174, 200, 229, 38, 26, 100, 227, 132, 168, 199, 130, 139, 163, 73, 150, 6, 225, 165, 231, 19, 6, 227, 43, 249, 71, 1, 218, 78, 81, 153, 79, 170, 15, 187, 253, 124, 11, 38, 75, 192, 120, 154, 22, 19, 28, 140, 186, 54, 18, 123, 205, 228, 193, 97, 159, 2, 180, 33, 7, 115, 126, 197, 181, 128, 26, 79, 130, 130, 215, 97, 55, 135, 90, 74, 242, 62, 184, 150, 254, 249, 36, 15, 246, 133, 73, 43, 75, 81, 48, 4, 32, 183, 179, 237, 20, 116, 20, 91, 43, 61, 157, 131, 18, 166, 170, 155, 207, 156, 72, 113, 71, 136, 143, 83, 247, 95, 204, 202, 15, 171, 240, 135, 222, 195, 127, 107, 202, 228, 53, 73, 215, 74, 96, 1, 205, 8, 169, 99, 94, 183, 232, 144, 247, 46, 198, 24, 9, 82, 121, 151, 124, 161, 151, 101, 157, 199, 83, 108, 38, 123, 106, 248, 174, 124, 82, 166, 254, 196, 205, 101, 50, 159, 43, 138, 145, 240, 222, 92, 144, 148, 159, 230, 129, 186, 222, 28, 20, 9, 176, 50, 250, 137, 16, 79, 108, 68, 234, 145, 212, 170, 210, 148, 102, 191, 151, 255, 169, 208, 232, 59, 130, 67, 63, 104, 167, 38, 118, 146, 16, 49, 100, 137, 160, 144, 3, 182, 134, 228, 121, 11, 181, 76, 12, 150, 222, 89, 105, 248, 142, 21, 93, 254, 202, 148, 233, 220, 161, 89, 10, 164, 181, 18, 9, 206, 4, 45, 175, 233, 102, 103, 52, 50, 197, 10, 46, 51, 238, 177, 182, 93, 221, 12, 136, 17, 231, 166, 48, 190, 71, 49, 16, 83, 42, 163, 70, 206, 237, 7, 91, 17, 125, 114, 155, 141, 105, 58, 233, 231, 74, 146, 24, 155, 35, 222, 36, 248, 170, 254, 66, 152, 150, 134, 204, 100, 97, 203, 69, 224, 6, 100, 191, 95, 59, 12, 59, 156, 170, 215, 202, 109, 46, 168, 36, 18, 56, 248, 2, 120, 74, 203, 126, 105, 108, 48, 97, 76, 42, 93, 102, 128, 155, 209, 239, 223, 227, 8, 45, 91, 196, 224, 123, 251, 174, 244, 246, 59, 161, 18, 193, 80, 18, 185, 37, 140, 44, 245, 111, 191, 0, 6, 14, 125, 218, 123, 218, 64, 244, 254, 87, 34, 53, 154, 173, 148, 94, 81, 36, 16, 232, 89, 4, 86, 33, 199, 158, 8, 249, 125, 178, 165, 186, 134, 136, 177, 242, 76, 196, 105, 239, 161, 219, 179, 33, 128, 182, 77, 208, 221, 120, 19, 170, 94, 200, 189, 127, 211, 59, 146, 210, 243, 38, 114, 186, 249, 73, 10, 38, 67, 244, 213, 84, 7, 124, 191, 111, 91, 65, 49, 220, 215, 195, 195, 119, 171, 249, 20, 101, 105, 175, 225, 52, 16, 183, 10, 190, 28, 6, 53, 102, 243, 64, 0, 11, 152, 135, 210, 185, 98, 11, 212, 160, 2, 248, 248, 111, 125, 73, 169, 177, 70, 227, 205, 138, 120, 237, 101, 139, 126, 74, 63, 184, 72, 111, 110, 43, 149, 93, 191, 70, 190, 152, 43, 28, 26, 11, 217, 64, 208, 144, 24, 77, 23, 176, 39, 141, 31, 59, 143, 157, 228, 12, 255, 46, 26, 199, 134, 233, 48, 197, 128, 182, 105, 69, 104, 244, 223, 64, 240, 139, 127, 4, 153, 141, 174, 109, 34, 46, 196, 237, 1, 182, 10, 6, 243, 245, 5, 0, 15, 246, 80, 57, 157, 141, 74, 183, 196, 195, 62, 199, 115, 195, 12, 142, 83, 209, 46, 74, 76, 40, 104, 77, 65, 254, 173, 110, 181, 6, 156, 153, 88, 141, 19, 3, 34, 180, 125, 62, 144, 126, 212, 44, 111, 78, 238, 210, 157, 91, 244, 201, 191, 205, 192, 169, 193, 221, 147, 46, 166, 119, 95, 67, 6, 37, 64, 40, 85, 192, 39, 253, 212, 112, 124, 94, 103, 210, 164, 13, 194, 2, 185, 121, 28, 162, 46, 83, 137, 13, 50, 40, 3, 180, 38, 155, 181, 173, 19, 220, 172, 46, 117, 199, 191, 21, 22, 9, 231, 48, 229, 197, 74, 86, 128, 24, 44, 62, 191, 14, 41, 102, 133, 11, 212, 60, 194, 56, 1, 235, 252, 177, 185, 131, 132, 38, 157, 39, 70, 242, 186, 163, 118, 175, 200, 77, 84, 71, 162, 139, 44, 165, 188, 127, 24, 0, 123, 49, 207, 61, 132, 43, 84, 136, 190, 138, 31, 32, 81, 120, 59, 29, 167, 230, 35, 183, 254, 97, 107, 35, 203, 7, 225, 225, 61, 75, 121, 16, 61, 8, 36, 254, 101, 111, 195, 172, 93, 84, 231, 131, 172, 5, 213, 162, 160, 64, 8, 40, 132, 80, 128, 126, 157, 15, 79, 161, 223, 220, 198, 76, 10, 35, 55, 217, 164, 201, 44, 106, 5, 55, 186, 204, 206, 113, 67, 71, 134, 35, 53, 102, 193, 51, 215, 64, 82, 59, 127, 247, 120, 228, 115, 105, 240, 252, 86, 248, 226, 101, 107, 74, 236, 14, 6, 14, 76, 238, 254, 116, 34, 193, 86, 16, 153, 178, 187, 175, 117, 152, 201, 10, 135, 29, 144, 30, 124, 165, 30, 147, 157, 249, 106, 184, 163, 3, 200, 155, 32, 71, 55, 97, 159, 22, 93, 194, 85, 156, 6, 161, 192, 46, 84, 214, 86, 165, 232, 148, 146, 142, 165, 230, 230, 127, 7, 43, 9, 150, 23, 188, 76, 244, 23, 14, 108, 87, 198, 21, 62, 233, 67, 90, 174, 72, 121, 95, 152, 10, 227, 160, 199, 18, 168, 151, 181, 48, 111, 77, 154, 188, 37, 47, 88, 205, 147, 252, 2, 53, 183, 176, 88, 35, 0, 205, 243, 46, 55, 215, 147, 21, 214, 241, 1, 66, 189, 185, 160, 104, 108, 61, 227, 226, 172, 67, 47, 3, 88, 16, 195, 20, 220, 92, 194, 236, 6, 4, 113, 171, 245, 197, 188, 38, 189, 2, 216, 109, 161, 43, 144, 66, 4, 236, 166, 64, 65, 135, 154, 112, 154, 57, 160, 162, 93, 51, 126, 70, 67, 217, 33, 240, 89, 242, 11, 214, 15, 158, 202, 48, 220, 130, 238, 26, 33, 9, 116, 218, 20, 154, 133, 180, 241, 104, 204, 206, 26, 3, 248, 228, 78, 141, 62, 243, 126, 29, 193, 223, 42, 228, 166, 169, 162, 42, 219, 123, 211, 105, 99, 230, 243, 15, 87, 231, 25, 128, 32, 159, 127, 215, 24, 100, 78, 117, 140, 129, 23, 22, 85, 188, 65, 8, 36, 146, 96, 164, 125, 213, 64, 116, 93, 190, 107, 173, 252, 212, 86, 246, 109, 50, 106, 88, 24, 141, 30, 231, 33, 123, 22, 232, 114, 160, 215, 1, 98, 90, 173, 42, 49, 90, 101, 37, 31, 24, 209, 118, 45, 13, 130, 88, 210, 103, 112, 171, 16, 147, 192, 110, 47, 17, 3, 7, 128, 163, 222, 230, 147, 77, 40, 209, 115, 62, 10, 10, 201, 123, 138, 80, 169, 51, 181, 145, 191, 252, 24, 82, 164, 182, 122, 52, 108, 75, 61, 119, 50, 222, 57, 251, 116, 184, 181, 180, 209, 95, 221, 86, 168, 158, 8, 35, 180, 191, 49, 238, 117, 193, 19, 13, 177, 205, 92, 199, 202, 160, 184, 242, 123, 133, 89, 71, 158, 105, 41, 121, 129, 190, 171, 8, 190, 113, 69, 51, 165, 174, 110, 118, 185, 114, 222, 126, 92, 195, 81, 146, 250, 111, 62, 153, 196, 139, 225, 216, 75, 254, 187, 79, 39, 228, 37, 182, 197, 224, 178, 67, 148, 249, 177, 52, 44, 205, 247, 72, 72, 67, 138, 105, 218, 53, 121, 51, 124, 94, 107, 108, 2, 135, 0, 16, 85, 16, 181, 149, 155, 26, 87, 145, 245, 252, 236, 235, 2, 154, 216, 47, 14, 73, 139, 95, 141, 145, 235, 67, 81, 135, 88, 130, 113, 82, 43, 69, 24, 24, 178, 10, 24, 18, 134, 124, 111, 3, 124, 27, 202, 136, 158, 37, 22, 6, 250, 59, 119, 49, 163, 133, 194, 125, 132, 168, 199, 113, 215, 211, 203, 141, 138, 130, 158, 185, 255, 40, 151, 1, 246, 149, 59, 123, 115, 80, 82, 217, 213, 31, 97, 228, 218, 150, 19, 194, 2, 219, 107, 231, 56, 38, 60, 100, 95, 159, 201, 98, 197, 180, 228, 158, 148, 165, 143, 85, 195, 74, 38, 244, 231, 112, 209, 193, 122, 211, 166, 7, 39, 219, 54, 109, 104, 119, 106, 191, 94, 213, 12, 78, 6, 235, 88, 202, 223, 81, 195, 225, 107, 155, 233, 143, 168, 252, 91, 132, 5, 181, 154, 111, 73, 61, 232, 176, 97, 147, 177, 42, 142, 94, 124, 55, 255, 216, 141, 91, 133, 116, 183, 179, 207, 217, 208, 173, 168, 156, 247, 194, 199, 117, 190, 115, 196, 44, 123, 116, 108, 25, 71, 247, 201, 45, 127, 74, 45, 28, 130, 179, 75, 74, 55, 93, 211, 174, 237, 180, 138, 137, 199, 172, 42, 91, 147, 125, 197, 17, 176, 74, 191, 103, 217, 63, 222, 220, 147, 163, 196, 109, 201, 59, 165, 198, 160, 128, 233, 176, 228, 154, 100, 166, 87, 190, 174, 179, 141, 178, 120, 223, 246, 131, 137, 101, 168, 133, 170, 118, 141, 125, 197, 239, 27, 115, 138, 26, 79, 246, 181, 35, 98, 23, 228, 129, 241, 184, 240, 10, 145, 99, 226, 233, 249, 151, 222, 23, 151, 117, 146, 111, 227, 9, 207, 238, 247, 64, 26, 107, 16, 15, 28, 226, 130, 13, 181, 111, 62, 91, 81, 191, 67, 28, 95, 161, 232, 156, 210, 10, 17, 59, 33, 99, 105, 163, 5, 204, 214, 167, 52, 181, 216, 207, 196, 174, 197, 57, 121, 18, 146, 147, 214, 122, 25, 43, 129, 91, 203, 231, 221, 25, 226, 210, 235, 89, 26, 132, 252, 225, 81, 156, 223, 66, 67, 249, 40, 23, 224, 182, 88, 33, 253, 85, 215, 168, 11, 199, 218, 68, 54, 238, 148, 22, 40, 77, 168, 235, 1, 142, 132, 13, 166, 233, 56, 0, 247, 164, 218, 148, 177, 255, 146, 142, 240, 222, 253, 213, 174, 153, 80, 239, 189, 133, 218, 43, 134, 124, 152, 37, 98, 6, 239, 81, 117, 154, 51, 114, 136, 128, 41, 55, 128, 26, 181, 108, 111, 210, 217, 71, 91, 12, 247, 234, 102, 67, 30, 140, 90, 79, 82, 27, 216, 208, 67, 147, 161, 152, 34, 72, 184, 45, 61, 253, 1, 86, 34, 228, 200, 63, 198, 112, 44, 100, 75, 250, 82, 81, 76, 14, 87, 229, 6, 155, 201, 51, 224, 38, 127, 150, 14, 101, 154, 6, 89, 85, 145, 211, 241, 215, 98, 150, 137, 123, 90, 192, 116, 146, 125, 82, 180, 166, 111, 3, 244, 228, 32, 244, 70, 159, 212, 255, 229, 252, 44, 219, 185, 155, 216, 234, 202, 176, 130, 49, 8, 85, 229, 7, 227, 245, 234, 108, 16, 198, 105, 140, 24, 86, 102, 136, 156, 225, 247, 199, 83, 72, 65, 64, 198, 92, 164, 219, 239, 173, 139, 68, 231, 241, 230, 0, 65, 3, 235, 96, 52, 79, 69, 52, 182, 245, 254, 30, 203, 239, 236, 88, 87, 4, 208, 86, 19, 44, 210, 32, 165, 42, 188, 48, 33, 114, 163, 164, 199, 207, 13, 172, 98, 201, 198, 142, 164, 143, 14, 234, 205, 200, 229, 31, 134, 181, 241, 226, 60, 224, 96, 172, 244, 234, 54, 218, 225, 192, 84, 33, 138, 218, 255, 85, 62, 192, 50, 53, 77, 61, 64, 242, 190, 102, 199, 97, 121, 2, 62, 220, 201, 40, 248, 51, 151, 107, 247, 106, 85, 92, 252, 67, 93, 57, 143, 97, 28, 182, 251, 210, 75, 35, 25, 152, 158, 6, 63, 221, 49, 52, 204, 236, 95, 53, 24, 47, 99, 173, 130, 31, 197, 163, 116, 195, 50, 110, 184, 152, 196, 102, 103, 219, 6, 57, 243, 153, 171, 35, 147, 172, 8, 179, 235, 112, 82, 245, 216, 248, 76, 97, 41, 172, 237, 231, 63, 201, 141, 215, 29, 123, 143, 4, 6, 202, 120, 4, 251, 145, 113, 165, 221, 149, 73, 234, 44, 133, 133, 31, 141, 67, 187, 109, 243, 251, 219, 206, 10, 118, 37, 88, 72, 228, 9, 150, 73, 211, 210, 126, 242, 208, 7, 66, 249, 193, 179, 207, 100, 94, 184, 214, 226, 112, 244, 176, 159, 16, 220, 51, 146, 41, 78, 214, 143, 164, 105, 103, 127, 94, 166, 212, 254, 177, 226, 35, 99, 135, 183, 239, 158, 221, 192, 33, 135, 51, 115, 252, 205, 15, 203, 175, 232, 78, 54, 102, 166, 210, 246, 5, 67, 196, 60, 226, 116, 24, 109, 191, 243, 200, 201, 145, 157, 117, 43, 113, 0, 2, 220, 123, 252, 113, 11, 204, 80, 153, 143, 243, 142, 8, 70, 68, 151, 159, 66, 46, 94, 98, 125, 65, 59, 35, 42, 53, 18, 76, 100, 156, 184, 198, 253, 246, 138, 148, 95, 155, 67, 130, 18, 70, 113, 253, 119, 241, 49, 110, 181, 7, 67, 74, 5, 53, 59, 189, 207, 206, 215, 210, 80, 224, 223, 98, 218, 76, 230, 46, 76, 101, 92, 10, 29, 31, 158, 59, 15, 107, 105, 2, 79, 121, 239, 214, 46, 213, 243, 15, 245, 115, 53, 149, 206, 245, 130, 207, 191, 98, 254, 69, 14, 155, 27, 219, 14, 10, 61, 144, 176, 254, 101, 81, 217, 72, 230, 23, 200, 229, 91, 97, 25, 12, 229, 173, 171, 117, 177, 85, 221, 230, 170, 227, 96, 110, 177, 215, 74, 47, 159, 167, 65, 138, 55, 229, 29, 197, 40, 145, 82, 40, 234, 244, 35, 226, 67, 175, 163, 14, 44, 74, 201, 250, 112, 154, 238, 217, 114, 67, 247, 219, 46, 248, 179, 164, 198, 58, 106, 75, 22, 222, 27, 246, 85, 166, 211, 14, 223, 253, 125, 191, 172, 199, 242, 181, 201, 189, 148, 76, 241, 17, 133, 225, 30, 187, 163, 221, 140, 19, 45, 146, 4, 195, 67, 182, 167, 247, 162, 253, 117, 205, 182, 135, 17, 109, 39, 213, 242, 15, 250, 104, 165, 137, 78, 224, 148, 210, 204, 208, 106, 95, 193, 32, 54, 233, 80, 88, 135, 67, 232, 242, 71, 161, 130, 189, 220, 192, 173, 144, 241, 97, 244, 135, 13, 214, 149, 102, 135, 199, 167, 182, 118, 4, 59, 173, 164, 93, 93, 243, 1, 172, 22, 68, 200, 236, 190, 41, 209, 44, 228, 27, 79, 247, 244, 38, 167, 186, 134, 224, 139, 231, 198, 43, 97, 146, 197, 243, 195, 121, 34, 80, 233, 88, 220, 160, 223, 60, 150, 16, 40, 23, 18, 15, 47, 170, 115, 149, 121, 205, 163, 147, 169, 202, 45, 149, 144, 95, 192, 163, 28, 108, 228, 118, 28, 137, 245, 214, 1, 188, 5, 135, 218, 135, 208, 127, 154, 136, 41, 110, 18, 252, 149, 63, 239, 249, 90, 197, 93, 150, 130, 93, 226, 95, 33, 230, 98, 217, 21, 134, 77, 212, 145, 67, 235, 141, 173, 81, 143, 11, 225, 39, 6, 138, 110, 187, 162, 255, 207, 113, 208, 245, 229, 193, 215, 10, 196, 44, 27, 11, 134, 117, 179, 185, 206, 115, 121, 89, 88, 53, 26, 143, 87, 98, 49, 140, 42, 57, 111, 64, 236, 62, 47, 154, 104, 68, 39, 247, 151, 245, 177, 26, 243, 156, 205, 206, 47, 104, 28, 83, 251, 159, 24, 84, 116, 214, 177, 231, 38, 207, 190, 248, 79, 119, 135, 0, 52, 129, 210, 119, 61, 56, 12, 124, 116, 156, 240, 244, 103, 142, 192, 14, 220, 150, 66, 83, 208, 203, 62, 55, 156, 70, 51, 77, 56, 95, 245, 181, 199, 51, 145, 135, 64, 209, 40, 38, 243, 63, 149, 7, 2, 242, 196, 67, 174, 157, 30, 213, 40, 81, 103, 126, 171, 125, 151, 234, 26, 105, 194, 33, 23, 73, 156, 172, 226, 219, 62, 26, 247, 41, 14, 6, 245, 82, 39, 153, 73, 109, 101, 252, 143, 100, 202, 231, 160, 17, 16, 180, 174, 154, 67, 227, 103, 52, 46, 173, 113, 37, 126, 212, 50, 213, 158, 114, 81, 46, 247, 177, 174, 120, 216, 217, 28, 184, 101, 127, 102, 2, 218, 94, 134, 121, 48, 36, 106, 143, 226, 28, 82, 250, 232, 51, 228, 143, 43, 40, 204, 131, 183, 112, 104, 160, 176, 126, 180, 250, 198, 251, 40, 191, 154, 185, 46, 162, 44, 18, 155, 226, 154, 181, 38, 185, 241, 202, 233, 104, 23, 243, 200, 2, 18, 214, 238, 195, 42, 2, 94, 115, 39, 87, 189, 60, 2, 14, 192, 111, 171, 107, 202, 244, 110, 106, 252, 84, 3, 238, 138, 95, 226, 75, 38, 38, 47, 225, 155, 174, 49, 212, 96, 173, 193, 196, 177, 18, 78, 209, 72, 135, 222, 231, 5, 82, 126, 74, 198, 170, 16, 199, 103, 63, 33, 221, 116, 190, 177, 68, 66, 34, 81, 144, 16, 214, 69, 57, 29, 248, 151, 240, 223, 251, 215, 190, 146, 45, 201, 248, 252, 196, 225, 45, 67, 159, 238, 30, 165, 120, 2, 125, 198, 114, 103, 117, 210, 114, 148, 15, 47, 89, 18, 112, 216, 226, 102, 144, 132, 48, 230, 124, 82, 132, 3, 62, 145, 254, 213, 105, 58, 178, 136, 237, 73, 133, 179, 160, 206, 132, 251, 30, 152, 236, 98, 222, 84, 248, 89, 248, 206, 186, 23, 102, 3, 180, 10, 107, 189, 92, 123, 184, 80, 12, 91, 114, 226, 174, 68, 102, 244, 41, 192, 15, 199, 219, 38, 123, 222, 19, 82, 37, 162, 19, 99, 42, 175, 63, 40, 85, 125, 195, 252, 150, 133, 132, 208, 247, 40, 211, 239, 7, 78, 96, 245, 190, 82, 236, 206, 123, 182, 124, 22, 77, 234, 62, 232, 77, 202, 44, 38, 195, 42, 45, 167, 119, 76, 160, 63, 55, 195, 85, 255, 36, 33, 202, 17, 173, 42, 125, 152, 230, 133, 230, 171, 163, 164, 171, 32, 181, 45, 229, 250, 243, 187, 5, 135, 208, 115, 85, 239, 213, 51, 193, 176, 189, 236, 94, 186, 167, 172, 246, 121, 135, 206, 125, 89, 181, 190, 4, 180, 90, 146, 63, 244, 210, 178, 176, 154, 212, 143, 138, 242, 127, 94, 57, 42, 154, 45, 63, 14, 255, 70, 147, 131, 68, 172, 10, 226, 193, 52, 2, 250, 15, 119, 51, 139, 56, 211, 91, 31, 103, 237, 120, 54, 25, 14, 195, 15, 76, 144, 171, 251, 101, 158, 190, 180, 46, 237, 176, 219, 214, 51, 84, 58, 62, 110, 248, 91, 46, 48, 96, 130, 158, 231, 62, 155, 65, 143, 227, 75, 191, 163, 59, 236, 124, 240, 123, 159, 5, 250, 68, 137, 119, 43, 184, 39, 171, 211, 16, 138, 36, 219, 173, 240, 80, 183, 186, 97, 93, 80, 175, 5, 147, 130, 219, 43, 228, 131, 144, 155, 189, 176, 10, 78, 239, 56, 24, 91, 77, 64, 63, 236, 184, 159, 227, 198, 200, 157, 113, 16, 105, 3, 146, 206, 48, 177, 195, 185, 67, 114, 221, 147, 235, 215, 138, 46, 50, 219, 33, 128, 72, 124, 70, 65, 32, 113, 247, 82, 122, 156, 7, 254, 42, 77, 204, 98, 132, 180, 93, 171, 193, 144, 197, 186, 3, 220, 118, 196, 252, 205, 25, 126, 21, 189, 138, 228, 217, 213, 144, 27, 46, 58, 186, 54, 148, 216, 191, 146, 217, 26, 114, 199, 180, 155, 230, 120, 170, 6, 21, 66, 254, 122, 17, 130, 151, 45, 235, 127, 3, 166, 170, 236, 2, 85, 28, 77, 132, 184, 114, 103, 153, 29, 41, 76, 228, 246, 78, 50, 139, 198, 53, 65, 167, 152, 223, 173, 1, 4, 174, 111, 204, 122, 168, 162, 254, 127, 127, 184, 159, 46, 144, 80, 205, 45, 156, 205, 156, 34, 87, 178, 179, 49, 99, 62, 77, 161, 237, 153, 244, 62, 197, 230, 173, 21, 197, 93, 252, 46, 24, 92, 114, 244, 32, 162, 131, 197, 56, 237, 66, 42, 35, 254, 91, 109, 112, 171, 159, 195, 219, 233, 134, 207, 116, 138, 236, 93, 55, 213, 218, 157, 221, 235, 109, 201, 137, 192, 217, 89, 174, 14, 95, 108, 135, 208, 100, 56, 66, 216, 73, 150, 255, 185, 59, 41, 230, 190, 71, 212, 122, 216, 60, 211, 117, 193, 98, 97, 124, 129, 144, 76, 53, 59, 153, 117, 18, 56, 45, 6, 79, 38, 105, 84, 120, 206, 101, 25, 197, 233, 52, 68, 191, 218, 195, 22, 210, 95, 144, 242, 82, 171, 83, 213, 114, 126, 142, 113, 66, 158, 115, 66, 201, 133, 11, 23, 233, 147, 25, 170, 25, 60, 55, 33, 81, 165, 29, 189, 244, 139, 198, 110, 15, 127, 0, 156, 33, 0, 161, 92, 241, 190, 39, 79, 87, 24, 94, 252, 225, 102, 240, 60, 158, 77, 2, 10, 43, 22, 202, 73, 117, 125, 16, 239, 70, 8, 102, 118, 144, 218, 203, 47, 105, 246, 152, 99, 233, 108, 248, 66, 5, 29, 127, 236, 34, 208, 187, 172, 234, 102, 177, 185, 64, 130, 8, 40, 135, 83, 249, 31, 22, 254, 75, 47, 217, 29, 243, 127, 252, 134, 172, 88, 137, 53, 203, 20, 149, 180, 236, 188, 159, 202, 104, 59, 9, 82, 203, 121, 249, 106, 106, 160, 221, 240, 59, 25, 220, 24, 221, 145, 84, 22, 252, 240, 53, 251, 147, 167, 95, 111, 140, 144, 101, 204, 121, 84, 122, 42, 84, 130, 85, 170, 34, 151, 205, 197, 84, 181, 197, 66, 106, 202, 123, 160, 180, 251, 225, 4, 118, 120, 69, 55, 75, 107, 139, 57, 104, 32, 53, 149, 45, 92, 178, 106, 243, 239, 232, 136, 119, 5, 220, 205, 255, 240, 17, 159, 64, 72, 122, 23, 56, 107, 199, 110, 30, 37, 161, 180, 78, 39, 78, 251, 202, 157, 156, 89, 23, 239, 192, 7, 220, 30, 73, 1, 164, 26, 15, 23, 211, 21, 79, 136, 56, 110, 150, 246, 98, 38, 56, 220, 79, 38, 180, 1, 252, 25, 60, 167, 141, 12, 5, 71, 103, 88, 146, 212, 182, 123, 149, 155, 239, 166, 246, 172, 118, 13, 102, 12, 71, 116, 32, 85, 22, 111, 194, 32, 162, 250, 120, 176, 98, 48, 0, 25, 20, 166, 47, 53, 197, 177, 153, 86, 160, 184, 140, 183, 36, 217, 228, 236, 195, 172, 123, 67, 111, 151, 94, 212, 142, 113, 227, 10, 178, 164, 106, 4, 242, 153, 227, 186, 109, 190, 208, 58, 171, 113, 84, 137, 112, 37, 84, 255, 111, 117, 97, 14, 75, 185, 167, 156, 246, 237, 152, 189, 8, 148, 234, 250, 184, 231, 58, 5, 116, 7, 212, 182, 52, 85, 252, 58, 24, 2, 39, 198, 192, 15, 50, 96, 126, 189, 94, 143, 99, 81, 93, 100, 241, 13, 94, 160, 31, 51, 106, 43, 76, 223, 33, 228, 227, 30, 183, 20, 207, 203, 186, 1, 64, 129, 32, 238, 37, 22, 223, 234, 146, 73, 26, 4, 71, 111, 44, 140, 118, 194, 14, 235, 24, 246, 248, 196, 220, 75, 17, 221, 7, 25, 210, 110, 94, 28, 109, 129, 146, 38, 216, 86, 72, 148, 50, 94, 111, 249, 153, 144, 246, 67, 71, 49, 248, 0, 16, 179, 178, 204, 228, 166, 106, 115, 39, 251, 238, 47, 154, 152, 44, 182, 83, 221, 137, 62, 137, 18, 121, 52, 246, 23, 144, 37, 125, 143, 248, 16, 234, 151, 242, 217, 13, 90, 100, 235, 240, 216, 233, 111, 211, 80, 212, 237, 20, 107, 206, 226, 55, 81, 145, 85, 22, 37, 43, 100, 143, 48, 105, 146, 45, 169, 2, 60, 204, 86, 179, 156, 115, 76, 70, 32, 125, 10, 199, 84, 135, 113, 194, 196, 235, 74, 155, 3, 203, 134, 176, 11, 194, 240, 195, 113, 85, 113, 49, 90, 244, 83, 161, 42, 25, 104, 23, 213, 67, 61, 67, 129, 21, 26, 73, 60, 201, 68, 58, 16, 82, 228, 0, 212, 77, 142, 147, 255, 76, 93, 105, 100, 35, 171, 249, 7, 240, 39, 142, 93, 93, 143, 26, 193, 247, 96, 144, 155, 75, 6, 117, 98, 59, 143, 212, 9, 97, 6, 190, 202, 31, 93, 15, 119, 12, 145, 211, 110, 78, 25, 121, 94, 152, 101, 58, 143, 147, 150, 100, 115, 239, 216, 159, 200, 225, 47, 1, 126, 106, 47, 92, 118, 153, 34, 159, 225, 131, 72, 193, 114, 215, 4, 195, 88, 180, 188, 83, 192, 39, 50, 34, 37, 19, 44, 243, 3, 211, 173, 130, 107, 236, 31, 252, 200, 255, 91, 26, 127, 49, 142, 105, 99, 129, 11, 21, 137, 30, 152, 166, 230, 177, 106, 116, 13, 12, 18, 112, 237, 223, 92, 90, 23, 172, 75, 144, 5, 63, 152, 119, 254, 131, 131, 129, 141, 229, 102, 55, 254, 69, 224, 154, 67, 139, 174, 159, 26, 141, 161, 34, 147, 235, 66, 50, 167, 159, 192, 142, 159, 153, 239, 152, 146, 197, 36, 251, 167, 225, 74, 224, 182, 228, 3, 49, 164, 168, 107, 81, 43, 18, 57, 39, 92, 217, 150, 78, 228, 124, 98, 233, 53, 21, 43, 224, 190, 0, 239, 97, 221, 203, 39, 240, 130, 44, 220, 234, 249, 229, 103, 138, 177, 140, 244, 105, 203, 138, 4, 81, 185, 76, 178, 104, 246, 72, 191, 230, 182, 234, 118, 215, 144, 97, 131, 115, 161, 156, 144, 63, 38, 19, 180, 207, 124, 168, 4, 225, 205, 231, 27, 133, 91, 38, 48, 197, 151, 72, 13, 125, 209, 184, 185, 248, 246, 236, 193, 79, 165, 201, 169, 112, 71, 116, 228, 183, 57, 252, 87, 226, 50, 138, 235, 9, 234, 54, 198, 120, 126, 24, 46, 24, 148, 221, 167, 146, 177, 19, 242, 53, 212, 56, 105, 71, 117, 73, 24, 117, 206, 147, 242, 177, 164, 100, 36, 236, 40, 245, 18, 91, 222, 172, 49, 181, 84, 99, 79, 229, 194, 24, 55, 25, 120, 238, 55, 6, 137, 253, 147, 118, 126, 167, 84, 181, 165, 98, 45, 215, 1, 61, 9, 42, 106, 118, 216, 119, 123, 233, 92, 63, 60, 33, 241, 161, 129, 87, 245, 100, 187, 35, 93, 188, 247, 77, 0, 5, 26, 158, 253, 145, 25, 103, 115, 57, 161, 6, 138, 93, 195, 140, 211, 5, 37, 96, 59, 205, 201, 52, 197, 211, 54, 125, 98, 152, 115, 23, 66, 14, 154, 56, 22, 61, 133, 150, 109, 196, 81, 64, 107, 241, 66, 169, 229, 22, 128, 222, 151, 83, 249, 39, 132, 229, 244, 23, 229, 229, 113, 19, 84, 243, 102, 188, 194, 35, 115, 255, 83, 40, 114, 194, 79, 69, 17, 1, 37, 165, 171, 241, 64, 154, 151, 79, 3, 137, 47, 145, 242, 18, 39, 210, 93, 225, 29, 36, 151, 133, 170, 217, 133, 196, 24, 139, 143, 17, 53, 179, 100, 137, 121, 186, 252, 217, 28, 11, 119, 44, 237, 202, 142, 141, 152, 119, 224, 19, 165, 103, 251, 60, 129, 78, 167, 125, 121, 133, 7, 179, 18, 104, 31, 150, 33, 18, 89, 239, 161, 238, 65, 209, 15, 71, 153, 89, 188, 73, 234, 55, 80, 203, 177, 174, 64, 230, 158, 128, 215, 160, 43, 42, 122, 154, 185, 154, 133, 140, 188, 121, 122, 51, 166, 151, 52, 227, 114, 210, 154, 33, 104, 127, 173, 158, 193, 67, 10, 74, 58, 159, 219, 36, 27, 156, 154, 202, 167, 113, 64, 243, 95, 133, 152, 186, 146, 69, 33, 182, 255, 44, 161, 220, 23, 15, 7, 62, 96, 62, 145, 5, 131, 117, 85, 212, 183, 178, 57, 184, 54, 202, 57, 178, 26, 123, 48, 177, 200, 129, 170, 68, 1, 62, 174, 128, 144, 30, 41, 82, 34, 51, 165, 62, 74, 239, 208, 20, 93, 3, 198, 112, 64, 50, 53, 32, 166, 83, 217, 180, 155, 95, 66, 96, 174, 106, 188, 106, 254, 150, 18, 230, 93, 67, 249, 73, 225, 129, 183, 164, 196, 17, 154, 219, 255, 67, 131, 174, 13, 144, 233, 244, 159, 194, 228, 196, 49, 164, 11, 5, 52, 200, 155, 245, 253, 20, 108, 233, 237, 195, 19, 133, 119, 101, 88, 146, 85, 137, 26, 197, 231, 156, 122, 241, 206, 192, 104, 223, 46, 145, 20, 234, 120, 146, 15, 148, 215, 31, 36, 110, 127, 148, 146, 83, 78, 11, 9, 144, 164, 140, 185, 169, 198, 212, 173, 154, 60, 22, 49, 193, 90, 96, 231, 176, 158, 252, 140, 40, 28, 138, 20, 183, 14, 93, 251, 200, 58, 36, 138, 42, 244, 220, 195, 238, 24, 227, 76, 24, 78, 251, 49, 57, 39, 241, 136, 164, 194, 58, 21, 123, 45, 154, 73, 255, 124, 34, 251, 228, 81, 238, 2, 245, 21, 166, 37, 78, 114, 92, 9, 146, 106, 244, 175, 15, 209, 150, 136, 113, 137, 91, 25, 151, 190, 38, 187, 54, 131, 233, 21, 37, 26, 161, 59, 200, 198, 9, 194, 79, 40, 17, 128, 6, 92, 220, 242, 91, 28, 191, 157, 69, 140, 174, 250, 59, 27, 110, 49, 228, 6, 227, 15, 158, 218, 244, 249, 242, 236, 222, 176, 154, 54, 194, 223, 105, 97, 74, 239, 252, 35, 2, 45, 124, 241, 245, 140, 180, 21, 66, 185, 248, 64, 106, 199, 41, 160, 138, 149, 216, 56, 175, 119, 3, 211, 122, 13, 176, 148, 57, 135, 135, 110, 123, 172, 99, 152, 184, 112, 116, 103, 255, 164, 99, 14, 159, 85, 154, 200, 106, 234, 83, 65, 229, 197, 128, 21, 168, 7, 232, 131, 172, 163, 205, 216, 71, 220, 67, 96, 253, 251, 59, 123, 126, 157, 57, 136, 246, 253, 66, 210, 239, 130, 127, 95, 211, 81, 202, 105, 7, 193, 142, 57, 198, 242, 15, 224, 41, 96, 169, 35, 82, 2, 214, 18, 149, 7, 59, 187, 147, 244, 129, 201, 89, 113, 178, 176, 61, 152, 140, 113, 146, 158, 10, 160, 29, 78, 175, 78, 102, 206, 90, 93, 2, 50, 79, 171, 66, 133, 54, 104, 175, 194, 36, 220, 62, 48, 99, 106, 237, 212, 127, 153, 183, 208, 13, 213, 49, 236, 103, 27, 49, 201, 74, 64, 179, 163, 86, 148, 124, 72, 73, 79, 143, 165, 126, 227, 65, 167, 211, 101, 127, 103, 77, 114, 150, 195, 247, 237, 197, 41, 135, 189, 63, 212, 193, 26, 13, 138, 196, 39, 155, 80, 44, 22, 75, 201, 94, 145, 133, 77, 223, 115, 169, 134, 6, 124, 150, 128, 106, 235, 145, 174, 190, 124, 43, 229, 4, 60, 105, 222, 141, 11, 69, 51, 209, 75, 135, 145, 18, 100, 7, 102, 181, 173, 69, 217, 33, 185, 129, 113, 76, 44, 39, 70, 118, 197, 159, 241, 125, 81, 178, 159, 102, 130, 91, 72, 247, 157, 79, 54, 179, 254, 184, 10, 221, 130, 102, 204, 98, 75, 227, 178, 93, 233, 145, 134, 37, 69, 56, 14, 176, 237, 163, 173, 59, 96, 252, 18, 217, 56, 50, 247, 17, 226, 232, 184, 252, 173, 51, 54, 57, 107, 193, 243, 188, 155, 90, 240, 90, 62, 176, 160, 11, 249, 214, 167, 220, 238, 199, 223, 31, 75, 22, 146, 216, 195, 238, 126, 28, 203, 179, 132, 255, 140, 133, 44, 137, 77, 17, 231, 199, 67, 248, 100, 89, 5, 115, 230, 22, 96, 206, 37, 124, 179, 42, 129, 233, 246, 81, 18, 243, 18, 6, 211, 99, 34, 207, 206, 202, 69, 112, 240, 29, 211, 105, 240, 160, 253, 172, 171, 5, 143, 72, 223, 179, 62, 56, 89, 53, 109, 220, 140, 233, 52, 9, 185, 61, 57, 29, 59, 123, 76, 67, 159, 108, 253, 99, 117, 72, 197, 123, 104, 211, 234, 244, 103, 216, 115, 222, 250, 91, 97, 2, 162, 152, 58, 175, 107, 251, 17, 126, 111, 56, 145, 20, 86, 193, 115, 34, 140, 223, 172, 254, 48, 143, 199, 36, 48, 228, 90, 61, 136, 133, 89, 117, 128, 44, 21, 196, 82, 204, 58, 113, 170, 98, 221, 43, 221, 53, 176, 206, 81, 36, 215, 239, 216, 32, 187, 82, 144, 137, 65, 102, 11, 209, 123, 85, 42, 9, 129, 118, 48, 57, 57, 69, 183, 92, 146, 37, 69, 132, 19, 220, 102, 26, 31, 31, 71, 7, 87, 39, 31, 87, 86, 76, 1, 232, 79, 221, 38, 36, 168, 139, 191, 150, 74, 213, 225, 114, 60, 197, 159, 27, 179, 168, 67, 137, 123, 59, 83, 240, 163, 78, 92, 25, 68, 214, 39, 18, 244, 217, 78, 85, 108, 147, 32, 132, 109, 81, 149, 11, 49, 96, 210, 72, 237, 233, 67, 167, 64, 140, 189, 211, 165, 230, 161, 71, 132, 56, 68, 139, 167, 108, 140, 189, 106, 143, 229, 28, 174, 41, 124, 226, 226, 143, 126, 186, 174, 92, 220, 179, 234, 43, 235, 39, 171, 36, 207, 201, 145, 167, 122, 230, 225, 190, 99, 87, 13, 252, 27, 181, 101, 204, 3, 159, 60, 20, 184, 131, 195, 45, 40, 214, 251, 225, 121, 241, 194, 243, 55, 52, 44, 189, 204, 157, 212, 191, 132, 242, 44, 65, 169, 224, 13, 127, 7, 164, 19, 46, 217, 232, 44, 188, 39, 40, 46, 169, 125, 157, 173, 204, 202, 207, 168, 128, 51, 63, 23, 1, 143, 145, 102, 171, 150, 100, 232, 99, 198, 148, 155, 189, 107, 107, 193, 97, 202, 181, 66, 34, 182, 108, 218, 46, 80, 114, 223, 201, 59, 65, 130, 249, 181, 67, 155, 145, 161, 220, 80, 63, 56, 95, 54, 77, 62, 59, 185, 29, 31, 214, 210, 135, 94, 230, 2, 75, 199, 158, 167, 111, 89, 153, 43, 6, 27, 208, 223, 200, 67, 178, 81, 60, 221, 165, 50, 117, 143, 194, 91, 119, 216, 18, 14, 73, 81, 167, 98, 87, 187, 172, 42, 16, 185, 159, 134, 25, 35, 79, 72, 148, 217, 33, 8, 112, 72, 158, 226, 252, 155, 233, 20, 157, 168, 10, 114, 122, 150, 170, 2, 8, 62, 134, 129, 118, 248, 144, 194, 129, 80, 233, 216, 233, 156, 74, 17, 16, 190, 160, 94, 64, 79, 199, 143, 166, 90, 127, 114, 96, 6, 12, 141, 227, 220, 202, 8, 116, 119, 206, 199, 234, 156, 109, 196, 204, 45, 150, 234, 28, 223, 47, 168, 235, 105, 237, 139, 170, 114, 98, 242, 156, 117, 61, 180, 100, 23, 213, 82, 101, 242, 3, 143, 132, 86, 120, 92, 115, 110, 219, 237, 206, 228, 185, 152, 30, 74, 177, 85, 66, 43, 7, 227, 12, 171, 78, 232, 131, 101, 31, 182, 125, 166, 21, 20, 59, 221, 200, 13, 181, 132, 145, 184, 236, 154, 219, 188, 164, 96, 155, 255, 33, 44, 238, 56, 29, 72, 99, 118, 0, 250, 99, 119, 208, 137, 182, 54, 158, 14, 224, 253, 132, 215, 108, 178, 139, 3, 2, 205, 90, 45, 56, 227, 150, 11, 91, 143, 40, 115, 13, 31, 96, 80, 85, 178, 241, 219, 153, 247, 165, 191, 184, 3, 5, 168, 142, 17, 105, 252, 143, 255, 170, 117, 15, 42, 250, 107, 156, 210, 225, 215, 128, 59, 129, 242, 93, 79, 190, 41, 238, 10, 128, 172, 133, 126, 212, 152, 48, 34, 29, 210, 52, 73, 176, 14, 230, 76, 79, 246, 149, 18, 213, 193, 209, 232, 55, 124, 133, 24, 4, 156, 180, 85, 253, 204, 241, 203, 40, 89, 211, 12, 90, 51, 113, 169, 150, 147, 215, 170, 125, 201, 203, 36, 6, 173, 207, 142, 32, 206, 230, 145, 166, 47, 101, 168, 242, 216, 254, 120, 254, 61, 215, 43, 127, 170, 241, 247, 168, 210, 199, 66, 212, 236, 197, 28, 101, 212, 110, 130, 179, 95, 117, 117, 181, 4, 147, 191, 90, 219, 166, 153, 62, 4, 246, 230, 149, 232, 19, 180, 188, 49, 80, 102, 96, 208, 68, 96, 240, 138, 122, 221, 237, 36, 3, 236, 33, 213, 58, 242, 196, 33, 144, 220, 224, 115, 90, 171, 24, 61, 10, 156, 137, 46, 52, 180, 84, 14, 11, 25, 41, 176, 91, 77, 63, 56, 113, 197, 209, 161, 18, 202, 156, 161, 251, 119, 219, 12, 113, 74, 54, 3, 162, 30, 243, 171, 164, 120, 247, 176, 133, 71, 245, 186, 137, 95, 239, 31, 100, 79, 194, 111, 250, 102, 153, 53, 32, 116, 168, 72, 156, 152, 153, 211, 84, 139, 86, 105, 46, 51, 185, 3, 188, 171, 74, 208, 176, 168, 129, 44, 147, 53, 94, 206, 16, 150, 179, 182, 31, 252, 213, 87, 170, 77, 84, 206, 120, 8, 198, 114, 242, 151, 204, 122, 231, 174, 194, 226, 152, 29, 112, 254, 81, 215, 91, 25, 216, 245, 214, 207, 178, 46, 97, 118, 188, 183, 47, 217, 12, 214, 15, 252, 123, 197, 5, 214, 68, 144, 234, 196, 101, 12, 179, 37, 58, 44, 120, 121, 101, 229, 190, 20, 195, 128, 29, 237, 157, 247, 60, 242, 57, 236, 101, 232, 5, 46, 215, 176, 66, 155, 6, 153, 32, 85, 92, 73, 42, 148, 243, 152, 78, 34, 100, 141, 89, 110, 6, 98, 19, 108, 63, 223, 89, 188, 103, 245, 231, 229, 198, 24, 184, 95, 142, 196, 88, 16, 120, 214, 73, 124, 46, 7, 196, 189, 62, 176, 34, 137, 90, 54, 13, 250, 66, 34, 140, 205, 14, 254, 218, 181, 138, 60, 63, 199, 173, 41, 248, 130, 217, 213, 49, 26, 98, 227, 102, 176, 75, 21, 81, 121, 45, 99, 171, 169, 205, 77, 231, 79, 172, 49, 183, 27, 63, 88, 208, 236, 229, 134, 137, 58, 182, 76, 9, 227, 118, 190, 91, 210, 103, 138, 56, 175, 160, 4, 180, 118, 83, 100, 114, 110, 30, 134, 40, 104, 127, 88, 159, 191, 85, 122, 24, 14, 152, 252, 160, 27, 15, 172, 42, 144, 146, 95, 186, 72, 117, 49, 26, 100, 72, 162, 229, 46, 19, 7, 110, 35, 139, 0, 188, 53, 246, 240, 101, 17, 143, 194, 26, 156, 186, 21, 116, 175, 46, 138, 198, 10, 143, 97, 8, 249, 2, 253, 167, 43, 22, 95, 151, 100, 229, 173, 195, 171, 191, 236, 146, 107, 97, 146, 107, 183, 132, 5, 94, 211, 126, 154, 208, 202, 240, 247, 128, 179, 232, 60, 235, 133, 35, 217, 52, 12, 85, 82, 115, 172, 41, 81, 153, 182, 47, 114, 4, 150, 124, 130, 231, 221, 115, 134, 211, 205, 0, 69, 20, 235, 23, 193, 143, 15, 173, 65, 113, 217, 31, 128, 88, 243, 218, 246, 174, 26, 176, 46, 235, 113, 162, 254, 176, 77, 219, 60, 70, 239, 154, 70, 240, 2, 5, 32, 206, 25, 128, 162, 36, 37, 17, 251, 243, 246, 97, 90, 187, 23, 237, 229, 141, 231, 213, 250, 65, 78, 30, 90, 127, 128, 9, 5, 94, 230, 69, 243, 191, 116, 222, 2, 139, 18, 169, 240, 192, 65, 36, 59, 61, 94, 54, 107, 254, 65, 70, 230, 254, 179, 157, 4, 210, 248, 108, 112, 0, 61, 227, 47, 236, 134, 171, 106, 207, 119, 221, 92, 49, 211, 202, 101, 209, 204, 115, 10, 39, 196, 33, 99, 153, 50, 65, 118, 145, 60, 27, 48, 248, 102, 148, 91, 21, 14, 248, 23, 98, 234, 192, 51, 48, 19, 243, 93, 140, 126, 165, 193, 227, 22, 110, 180, 144, 127, 136, 81, 224, 162, 124, 25, 252, 68, 56, 218, 12, 159, 20, 40, 1, 118, 135, 247, 132, 191, 67, 206, 67, 225, 226, 249, 227, 220, 240, 67, 15, 159, 233, 116, 131, 76, 132, 183, 75, 139, 175, 182, 234, 50, 214, 54, 182, 97, 163, 70, 202, 107, 221, 189, 220, 1, 165, 69, 121, 32, 222, 37, 7, 116, 17, 249, 242, 172, 205, 212, 66, 194, 68, 181, 233, 178, 25, 102, 254, 19, 71, 137, 55, 167, 89, 137, 21, 107, 83, 183, 180, 93, 127, 77, 83, 16, 19, 143, 246, 208, 209, 74, 193, 136, 58, 133, 87, 231, 15, 114, 33, 45, 43, 13, 85, 255, 219, 133, 169, 63, 63, 131, 89, 78, 6, 181, 133, 133, 231, 27, 213, 203, 219, 183, 13, 53, 2, 20, 200, 111, 173, 74, 134, 61, 24, 179, 89, 203, 55, 52, 128, 134, 136, 29, 24, 161, 182, 89, 248, 10, 211, 102, 110, 190, 60, 207, 7, 14, 212, 218, 167, 171, 182, 233, 191, 85, 28, 0, 26, 164, 80, 8, 26, 230, 6, 102, 213, 101, 59, 176, 164, 112, 98, 134, 89, 19, 190, 93, 107, 147, 144, 246, 41, 144, 146, 242, 201, 112, 78, 197, 139, 175, 13, 91, 244, 219, 132, 128, 55, 44, 4, 9, 61, 52, 246, 101, 235, 74, 149, 217, 49, 87, 227, 38, 89, 189, 134, 75, 187, 171, 137, 111, 255, 1, 173, 254, 69, 135, 0, 211, 81, 233, 245, 172, 36, 165, 14, 228, 33, 161, 207, 156, 105, 210, 147, 197, 226, 72, 23, 9, 92, 228, 183, 76, 13, 186, 39, 171, 55, 253, 169, 123, 110, 245, 182, 119, 17, 139, 183, 204, 92, 209, 195, 230, 186, 187, 185, 182, 184, 226, 39, 188, 147, 148, 102, 1, 80, 235, 224, 43, 96, 15, 141, 143, 106, 61, 27, 33, 171, 183, 164, 179, 211, 0, 156, 97, 107, 64, 49, 42, 229, 168, 6, 59, 81, 156, 31, 37, 76, 82, 49, 150, 247, 175, 158, 19, 217, 77, 116, 215, 224, 172, 152, 71, 24, 83, 104, 20, 186, 158, 61, 221, 144, 80, 195, 97, 219, 15, 71, 8, 3, 181, 227, 147, 179, 204, 66, 205, 227, 95, 219, 28, 166, 67, 131, 58, 3, 142, 216, 3, 212, 49, 68, 32, 83, 108, 183, 147, 101, 76, 169, 191, 214, 19, 69, 163, 206, 49, 79, 171, 53, 31, 61, 55, 168, 167, 5, 71, 219, 63, 108, 153, 226, 138, 97, 34, 210, 123, 240, 2, 220, 11, 55, 136, 60, 60, 74, 136, 199, 116, 35, 175, 91, 2, 34, 163, 241, 163, 15, 72, 85, 43, 17, 71, 203, 189, 105, 101, 66, 133, 104, 116, 228, 12, 219, 102, 198, 155, 183, 195, 231, 173, 102, 207, 246, 13, 60, 225, 220, 16, 18, 94, 233, 38, 224, 208, 198, 56, 165, 139, 5, 138, 22, 106, 249, 6, 147, 9, 222, 116, 248, 24, 156, 147, 63, 228, 9, 56, 63, 227, 198, 103, 115, 20, 44, 182, 25, 215, 229, 226, 191, 33, 231, 127, 184, 189, 193, 220, 85, 118, 165, 87, 48, 177, 45, 227, 68, 128, 189, 197, 119, 177, 235, 147, 226, 203, 155, 240, 140, 112, 24, 243, 211, 223, 108, 190, 42, 203, 55, 150, 158, 235, 95, 79, 99, 99, 78, 244, 121, 67, 223, 108, 203, 94, 160, 52, 37, 122, 50, 251, 235, 168, 135, 134, 161, 10, 20, 148, 24, 110, 116, 105, 57, 13, 16, 32, 38, 12, 163, 122, 55, 183, 21, 140, 35, 236, 33, 151, 127, 160, 90, 249, 158, 116, 85, 155, 247, 197, 83, 93, 158, 36, 72, 56, 223, 183, 223, 246, 118, 88, 126, 223, 105, 6, 42, 222, 81, 214, 185, 129, 143, 222, 117, 169, 180, 134, 150, 95, 147, 215, 85, 182, 78, 123, 239, 3, 248, 80, 238, 34, 84, 39, 103, 223, 78, 215, 217, 54, 64, 158, 170, 101, 77, 249, 254, 88, 234, 203, 183, 8, 222, 112, 187, 157, 189, 93, 36, 212, 198, 207, 207, 22, 122, 68, 217, 47, 218, 20, 235, 38, 75, 71, 83, 26, 185, 194, 114, 70, 123, 223, 174, 207, 90, 213, 239, 19, 79, 195, 112, 67, 22, 151, 177, 79, 36, 9, 221, 186, 80, 225, 208, 137, 219, 233, 163, 128, 139, 29, 225, 39, 3, 144, 239, 19, 104, 139, 202, 180, 246, 36, 13, 194, 57, 63, 134, 87, 93, 202, 211, 202, 41, 2, 38, 176, 131, 92, 100, 212, 12, 246, 154, 231, 142, 224, 39, 43, 135, 47, 188, 194, 28, 205, 224, 157, 49, 47, 149, 56, 159, 88, 102, 254, 212, 117, 131, 233, 219, 50, 252, 129, 233, 73, 249, 80, 11, 49, 198, 15, 246, 60, 177, 173, 110, 106, 254, 152, 163, 158, 198, 158, 72, 231, 69, 22, 191, 134, 174, 207, 95, 36, 137, 96, 79, 141, 59, 31, 196, 5, 248, 54, 68, 254, 8, 195, 30, 184, 168, 63, 9, 121, 142, 94, 94, 81, 251, 46, 179, 153, 85, 20, 251, 33, 157, 109, 32, 201, 53, 197, 53, 180, 45, 138, 87, 66, 212, 87, 248, 202, 181, 19, 158, 68, 53, 47, 138, 122, 202, 27, 193, 195, 121, 31, 0, 28, 96, 162, 192, 48, 181, 236, 145, 172, 110, 24, 237, 145, 183, 28, 246, 32, 125, 144, 142, 227, 101, 148, 203, 243, 236, 181, 165, 104, 24, 102, 72, 171, 176, 186, 206, 253, 81, 47, 163, 225, 10, 84, 209, 57, 31, 129, 196, 102, 11, 19, 124, 135, 51, 236, 111, 74, 222, 93, 166, 86, 228, 255, 24, 115, 99, 238, 138, 9, 173, 234, 80, 151, 100, 222, 122, 52, 159, 33, 101, 53, 140, 196, 195, 39, 64, 121, 95, 191, 167, 136, 139, 123, 8, 223, 155, 193, 236, 10, 195, 21, 72, 189, 102, 195, 23, 184, 149, 178, 71, 3, 55, 221, 92, 91, 10, 245, 77, 151, 24, 249, 167, 210, 77, 184, 140, 136, 5, 165, 47, 41, 190, 96, 183, 188, 242, 191, 247, 190, 198, 144, 112, 164, 105, 60, 51, 30, 137, 111, 153, 180, 221, 121, 126, 176, 59, 32, 166, 176, 76, 221, 232, 109, 25, 230, 165, 84, 215, 189, 117, 179, 218, 220, 210, 55, 195, 174, 207, 84, 199, 106, 91, 67, 19, 23, 13, 212, 252, 206, 186, 48, 251, 153, 47, 141, 161, 114, 137, 63, 26, 117, 178, 130, 188, 176, 105, 42, 250, 226, 68, 2, 206, 188, 8, 0, 60, 69, 25, 172, 160, 97, 15, 16, 235, 58, 42, 159, 30, 127, 193, 193, 149, 43, 237, 172, 109, 80], - [83, 135, 221, 129, 160, 231, 63, 50, 222, 13, 202, 15, 232, 177, 98, 19, 68, 36, 48, 203, 23, 84, 117, 135, 109, 216, 212, 16, 157, 255, 125, 249, 2, 194, 248, 132, 65, 50, 138, 111, 63, 152, 195, 211, 187, 247, 217, 91, 243, 225, 66, 98, 89, 74, 49, 170, 145, 73, 163, 47, 131, 216, 196, 189, 22, 78, 153, 188, 58, 112, 180, 115, 11, 195, 191, 91, 85, 226, 209, 65, 162, 129, 195, 164, 33, 165, 132, 3, 7, 103, 18, 196, 43, 186, 87, 47, 228, 18, 117, 220, 180, 166, 233, 189, 76, 95, 67, 174, 48, 68, 114, 225, 109, 205, 252, 36, 161, 78, 112, 16, 82, 164, 123, 59, 248, 212, 238, 123, 254, 88, 179, 187, 102, 152, 73, 165, 205, 195, 172, 87, 160, 37, 242, 162, 122, 69, 13, 88, 188, 14, 61, 25, 186, 176, 22, 152, 227, 27, 172, 215, 208, 102, 214, 147, 214, 82, 16, 243, 231, 203, 42, 163, 149, 100, 172, 67, 68, 211, 74, 53, 208, 166, 93, 194, 126, 175, 12, 199, 151, 245, 176, 106, 16, 153, 51, 169, 103, 3, 124, 228, 47, 112, 183, 103, 253, 128, 86, 10, 84, 228, 110, 196, 195, 36, 15, 165, 221, 174, 102, 182, 119, 243, 57, 135, 199, 20, 131, 76, 175, 214, 238, 155, 31, 138, 175, 90, 60, 115, 106, 20, 109, 254, 210, 26, 218, 51, 255, 78, 248, 68, 0, 61, 32, 187, 192, 42, 153, 177, 240, 122, 41, 218, 132, 98, 123, 150, 91, 255, 73, 167, 236, 43, 153, 246, 141, 46, 91, 144, 53, 79, 9, 167, 245, 0, 248, 154, 121, 89, 154, 28, 16, 200, 237, 159, 46, 121, 95, 44, 131, 160, 203, 29, 126, 210, 101, 252, 73, 64, 104, 40, 71, 178, 239, 229, 237, 26, 224, 228, 71, 190, 211, 233, 213, 129, 124, 118, 232, 202, 38, 145, 100, 47, 244, 218, 137, 86, 173, 186, 83, 67, 131, 137, 203, 199, 252, 157, 26, 78, 187, 74, 112, 72, 203, 145, 190, 237, 239, 124, 2, 65, 235, 123, 117, 174, 3, 116, 189, 25, 172, 205, 5, 213, 224, 119, 157, 155, 207, 237, 95, 84, 218, 237, 135, 86, 62, 104, 9, 156, 232, 60, 177, 8, 198, 33, 188, 7, 188, 34, 205, 77, 169, 35, 219, 76, 131, 191, 87, 110, 24, 8, 11, 37, 244, 133, 165, 181, 154, 238, 157, 184, 50, 54, 176, 214, 131, 172, 110, 53, 128, 181, 146, 133, 182, 45, 71, 76, 136, 36, 15, 113, 248, 204, 181, 79, 156, 207, 124, 141, 158, 18, 72, 61, 109, 151, 187, 212, 62, 131, 1, 121, 74, 82, 244, 54, 184, 7, 130, 134, 30, 78, 70, 30, 123, 20, 83, 148, 201, 168, 83, 143, 185, 114, 127, 42, 152, 217, 25, 232, 202, 65, 204, 230, 7, 96, 127, 3, 115, 22, 18, 118, 203, 202, 91, 174, 50, 182, 154, 41, 33, 180, 66, 16, 123, 87, 237, 102, 254, 13, 97, 169, 106, 137, 135, 72, 110, 29, 126, 136, 224, 37, 204, 71, 255, 12, 14, 84, 45, 205, 100, 134, 54, 86, 138, 159, 171, 242, 164, 206, 151, 203, 198, 164, 215, 181, 161, 242, 65, 203, 249, 89, 247, 239, 127, 148, 40, 69, 178, 177, 212, 102, 161, 67, 247, 237, 59, 234, 123, 234, 225, 248, 189, 203, 31, 38, 210, 162, 34, 141, 225, 147, 199, 30, 235, 118, 156, 117, 100, 237, 186, 155, 36, 110, 29, 88, 52, 139, 218, 163, 178, 244, 46, 196, 248, 69, 55, 145, 219, 166, 181, 101, 240, 230, 78, 224, 60, 88, 250, 26, 124, 233, 193, 224, 189, 53, 86, 246, 114, 107, 173, 166, 19, 190, 188, 174, 69, 144, 111, 89, 102, 36, 84, 116, 14, 71, 153, 5, 115, 132, 102, 230, 146, 178, 45, 96, 175, 152, 7, 0, 241, 161, 226, 213, 148, 19, 107, 89, 232, 204, 13, 160, 160, 64, 87, 83, 105, 28, 153, 255, 255, 115, 115, 39, 145, 71, 161, 73, 100, 88, 161, 252, 223, 176, 75, 146, 77, 164, 71, 127, 236, 238, 66, 56, 194, 191, 40, 190, 47, 220, 89, 69, 73, 53, 203, 187, 216, 206, 255, 102, 164, 193, 217, 249, 32, 183, 81, 75, 116, 229, 121, 32, 64, 129, 96, 167, 219, 119, 102, 188, 190, 24, 4, 10, 107, 120, 34, 165, 153, 122, 64, 51, 210, 109, 232, 32, 76, 29, 206, 14, 99, 252, 92, 0, 200, 234, 233, 81, 94, 12, 156, 69, 201, 105, 229, 195, 234, 134, 53, 198, 129, 201, 55, 159, 10, 77, 15, 122, 211, 52, 204, 7, 162, 64, 255, 113, 57, 180, 212, 153, 162, 112, 35, 237, 49, 136, 24, 242, 217, 134, 187, 77, 114, 225, 151, 171, 133, 80, 70, 83, 6, 131, 243, 105, 131, 69, 176, 210, 141, 49, 161, 240, 34, 80, 171, 42, 47, 0, 127, 154, 153, 73, 140, 70, 56, 12, 52, 106, 183, 34, 3, 60, 25, 171, 200, 86, 49, 162, 240, 180, 164, 181, 45, 228, 180, 172, 201, 165, 74, 237, 84, 83, 218, 78, 39, 153, 148, 113, 15, 194, 253, 222, 95, 2, 43, 236, 20, 158, 209, 45, 234, 51, 77, 210, 57, 38, 45, 72, 79, 236, 69, 240, 204, 146, 47, 93, 125, 37, 77, 106, 236, 159, 17, 214, 226, 28, 129, 148, 220, 212, 169, 241, 40, 164, 31, 94, 119, 129, 22, 197, 168, 227, 39, 86, 6, 41, 186, 231, 45, 54, 105, 162, 8, 31, 69, 171, 164, 131, 180, 153, 125, 251, 40, 6, 161, 82, 173, 112, 27, 110, 231, 124, 193, 175, 46, 88, 34, 243, 247, 36, 255, 117, 150, 187, 41, 114, 120, 110, 49, 220, 67, 43, 48, 29, 202, 32, 245, 233, 190, 125, 49, 7, 50, 103, 171, 53, 176, 201, 78, 61, 228, 8, 201, 244, 219, 218, 121, 71, 62, 204, 158, 122, 57, 176, 26, 237, 163, 106, 152, 21, 197, 93, 94, 213, 146, 64, 251, 148, 255, 64, 8, 187, 87, 197, 41, 194, 70, 101, 81, 50, 74, 120, 250, 78, 237, 158, 27, 51, 12, 216, 219, 128, 82, 179, 254, 227, 66, 27, 103, 68, 251, 71, 54, 46, 53, 59, 134, 193, 68, 65, 134, 239, 226, 92, 162, 212, 15, 2, 10, 58, 108, 63, 139, 145, 210, 187, 242, 112, 254, 208, 54, 22, 147, 207, 71, 156, 228, 201, 209, 108, 49, 74, 122, 72, 232, 199, 240, 21, 121, 27, 210, 125, 190, 122, 69, 41, 102, 147, 91, 208, 232, 247, 81, 20, 133, 178, 165, 14, 166, 221, 150, 49, 203, 166, 29, 250, 191, 152, 13, 177, 92, 157, 162, 33, 38, 249, 130, 45, 44, 44, 25, 5, 242, 24, 173, 20, 157, 132, 228, 63, 228, 88, 136, 8, 10, 190, 158, 206, 222, 115, 133, 212, 185, 16, 180, 158, 208, 55, 33, 211, 65, 212, 183, 214, 77, 94, 231, 180, 211, 188, 176, 38, 228, 20, 11, 210, 55, 132, 82, 14, 225, 136, 129, 86, 122, 24, 130, 232, 169, 85, 139, 178, 202, 189, 64, 131, 111, 62, 199, 6, 74, 169, 226, 5, 252, 114, 205, 67, 50, 198, 219, 81, 8, 84, 82, 231, 204, 99, 94, 143, 195, 127, 136, 37, 190, 22, 106, 33, 162, 111, 44, 112, 6, 126, 188, 53, 125, 233, 241, 222, 140, 171, 60, 161, 16, 0, 54, 110, 161, 171, 218, 7, 81, 126, 28, 189, 196, 158, 193, 235, 33, 78, 163, 231, 19, 203, 235, 81, 109, 61, 25, 117, 138, 254, 186, 18, 40, 198, 199, 2, 113, 16, 102, 95, 172, 56, 97, 214, 54, 18, 179, 129, 60, 128, 209, 122, 72, 113, 2, 104, 69, 128, 140, 71, 203, 207, 195, 171, 122, 56, 138, 76, 152, 149, 86, 154, 36, 253, 169, 92, 179, 151, 85, 231, 133, 7, 202, 68, 74, 48, 214, 98, 47, 168, 214, 247, 118, 108, 75, 11, 15, 217, 180, 38, 210, 85, 192, 243, 244, 8, 212, 39, 7, 130, 4, 42, 143, 87, 53, 70, 132, 141, 72, 237, 42, 71, 55, 241, 89, 60, 6, 66, 190, 31, 91, 53, 15, 217, 135, 211, 116, 212, 142, 181, 194, 213, 97, 220, 7, 15, 104, 133, 123, 232, 54, 50, 73, 117, 174, 192, 172, 244, 95, 52, 173, 165, 6, 222, 84, 48, 47, 134, 81, 228, 156, 186, 102, 30, 40, 184, 243, 218, 39, 99, 230, 130, 108, 240, 16, 199, 253, 215, 127, 246, 80, 181, 76, 30, 231, 208, 44, 234, 110, 116, 175, 72, 108, 65, 134, 7, 12, 56, 115, 216, 253, 100, 106, 178, 43, 167, 31, 19, 102, 96, 118, 178, 218, 9, 76, 86, 71, 252, 210, 143, 20, 29, 180, 140, 228, 237, 140, 186, 226, 72, 110, 26, 73, 83, 67, 229, 156, 210, 3, 174, 164, 217, 56, 62, 89, 25, 182, 220, 132, 70, 138, 229, 85, 24, 94, 86, 36, 124, 140, 198, 222, 237, 5, 48, 54, 116, 150, 169, 166, 9, 64, 9, 151, 53, 101, 112, 45, 49, 87, 131, 5, 79, 141, 39, 77, 191, 41, 100, 164, 51, 234, 180, 13, 105, 65, 124, 94, 71, 220, 158, 12, 44, 193, 149, 21, 26, 213, 131, 227, 249, 242, 126, 247, 165, 13, 83, 129, 143, 118, 11, 72, 33, 222, 246, 22, 248, 232, 154, 228, 142, 206, 200, 51, 17, 133, 238, 206, 159, 243, 142, 120, 244, 162, 108, 9, 230, 198, 69, 5, 105, 1, 220, 143, 19, 205, 13, 126, 22, 98, 122, 125, 69, 163, 10, 14, 42, 158, 115, 134, 231, 165, 179, 53, 31, 15, 150, 64, 64, 56, 47, 57, 243, 12, 14, 177, 109, 75, 79, 118, 136, 23, 115, 172, 168, 141, 210, 248, 241, 108, 27, 65, 209, 195, 50, 187, 143, 51, 184, 41, 119, 54, 31, 57, 37, 151, 85, 33, 135, 221, 206, 55, 9, 147, 31, 82, 86, 251, 93, 98, 74, 181, 123, 37, 188, 19, 238, 157, 215, 45, 97, 204, 253, 191, 94, 34, 85, 219, 150, 155, 66, 96, 183, 26, 7, 28, 175, 108, 148, 90, 133, 117, 230, 91, 100, 39, 116, 176, 125, 125, 232, 166, 68, 165, 251, 217, 45, 137, 80, 219, 65, 155, 218, 108, 119, 125, 133, 191, 87, 156, 104, 146, 210, 120, 91, 163, 228, 112, 137, 163, 52, 144, 225, 133, 168, 184, 147, 193, 19, 255, 91, 80, 62, 168, 118, 19, 204, 28, 252, 28, 187, 66, 203, 20, 1, 154, 84, 160, 187, 230, 118, 105, 4, 99, 34, 130, 30, 81, 229, 126, 93, 49, 121, 109, 206, 251, 37, 37, 231, 195, 50, 158, 173, 184, 22, 5, 207, 238, 172, 57, 54, 198, 220, 157, 71, 186, 193, 90, 164, 187, 99, 137, 79, 120, 34, 205, 68, 102, 110, 189, 219, 90, 223, 159, 69, 2, 48, 172, 51, 59, 205, 16, 113, 203, 145, 130, 128, 188, 140, 71, 169, 226, 44, 162, 56, 139, 8, 188, 1, 240, 151, 70, 203, 164, 72, 165, 239, 131, 238, 58, 120, 95, 108, 29, 230, 110, 40, 124, 85, 189, 128, 221, 133, 169, 94, 5, 143, 157, 92, 40, 84, 56, 174, 38, 126, 34, 51, 178, 42, 101, 190, 173, 44, 231, 126, 190, 199, 178, 91, 217, 24, 183, 65, 75, 180, 14, 156, 230, 179, 220, 229, 74, 88, 194, 166, 96, 134, 33, 83, 36, 108, 200, 69, 229, 228, 66, 39, 19, 209, 105, 43, 10, 204, 57, 61, 4, 24, 61, 238, 11, 9, 73, 41, 211, 208, 80, 167, 0, 164, 238, 166, 153, 120, 48, 130, 236, 116, 160, 76, 82, 86, 190, 62, 27, 24, 247, 163, 72, 217, 210, 28, 201, 5, 120, 129, 2, 36, 42, 210, 139, 166, 58, 81, 238, 74, 159, 47, 164, 95, 7, 91, 41, 91, 252, 229, 143, 152, 136, 245, 242, 100, 73, 65, 91, 57, 213, 198, 211, 83, 79, 108, 229, 207, 51, 9, 162, 105, 3, 255, 131, 92, 187, 212, 76, 105, 78, 11, 32, 105, 70, 50, 158, 100, 254, 152, 231, 78, 22, 16, 132, 105, 73, 185, 181, 180, 236, 145, 58, 149, 211, 40, 43, 208, 217, 91, 247, 124, 64, 187, 137, 153, 138, 159, 202, 87, 89, 239, 208, 251, 161, 188, 209, 98, 13, 238, 172, 1, 46, 161, 206, 10, 98, 45, 161, 7, 92, 169, 124, 191, 119, 84, 225, 191, 95, 241, 137, 58, 10, 139, 148, 107, 227, 140, 53, 225, 197, 12, 143, 159, 152, 128, 0, 189, 71, 209, 122, 147, 172, 27, 217, 197, 215, 226, 253, 187, 226, 29, 198, 189, 2, 3, 201, 239, 195, 144, 81, 172, 50, 246, 79, 159, 114, 62, 11, 128, 166, 32, 142, 150, 90, 101, 5, 1, 136, 183, 63, 139, 237, 6, 86, 231, 174, 66, 67, 242, 239, 102, 148, 210, 212, 16, 123, 119, 153, 23, 193, 196, 211, 42, 21, 254, 74, 240, 161, 246, 202, 200, 182, 178, 4, 51, 65, 177, 216, 58, 66, 221, 254, 170, 228, 47, 90, 108, 241, 170, 136, 238, 123, 168, 122, 187, 171, 90, 217, 67, 169, 53, 45, 35, 41, 44, 31, 89, 249, 81, 2, 150, 229, 238, 107, 76, 7, 6, 145, 86, 120, 180, 250, 165, 114, 113, 207, 72, 135, 142, 5, 219, 25, 151, 26, 1, 214, 109, 179, 186, 143, 82, 129, 227, 37, 163, 70, 91, 85, 251, 63, 120, 175, 13, 0, 239, 223, 113, 31, 173, 255, 106, 3, 164, 82, 218, 148, 144, 134, 81, 230, 80, 196, 170, 159, 238, 20, 10, 203, 133, 57, 224, 112, 102, 96, 238, 214, 195, 146, 185, 110, 15, 184, 130, 127, 22, 220, 72, 182, 119, 173, 6, 232, 93, 52, 18, 62, 11, 176, 130, 67, 17, 139, 156, 151, 208, 150, 183, 210, 186, 114, 216, 150, 105, 97, 63, 202, 102, 66, 79, 209, 29, 17, 164, 14, 154, 48, 193, 3, 139, 39, 228, 187, 4, 230, 4, 199, 155, 69, 80, 183, 119, 200, 45, 145, 154, 109, 216, 180, 205, 105, 250, 154, 172, 233, 113, 159, 102, 157, 58, 210, 89, 227, 247, 111, 90, 66, 13, 103, 180, 202, 138, 178, 207, 200, 187, 186, 47, 141, 251, 168, 142, 204, 31, 107, 117, 32, 49, 128, 184, 64, 16, 58, 103, 74, 52, 54, 243, 153, 34, 17, 245, 90, 144, 164, 151, 150, 209, 184, 20, 30, 86, 18, 142, 62, 19, 154, 206, 50, 207, 152, 39, 151, 58, 162, 204, 234, 180, 79, 111, 15, 4, 208, 77, 83, 231, 166, 175, 131, 115, 227, 150, 201, 69, 136, 1, 18, 49, 116, 201, 112, 141, 23, 213, 234, 244, 55, 130, 7, 234, 177, 25, 107, 16, 181, 85, 123, 247, 153, 54, 163, 173, 20, 237, 242, 56, 251, 88, 238, 60, 93, 165, 237, 107, 92, 165, 134, 140, 92, 168, 227, 63, 98, 250, 21, 95, 102, 126, 186, 186, 70, 19, 0, 206, 195, 230, 185, 3, 122, 254, 199, 204, 104, 193, 77, 242, 179, 174, 254, 193, 27, 230, 182, 220, 83, 46, 5, 89, 253, 131, 186, 64, 67, 122, 164, 223, 186, 93, 242, 73, 230, 78, 49, 247, 197, 56, 245, 82, 9, 252, 26, 31, 228, 104, 57, 86, 93, 79, 234, 195, 140, 134, 22, 111, 159, 201, 154, 35, 5, 232, 201, 29, 66, 54, 180, 61, 147, 200, 142, 167, 114, 171, 23, 18, 41, 238, 55, 82, 149, 58, 37, 8, 160, 136, 206, 99, 121, 248, 198, 29, 123, 48, 141, 170, 88, 134, 165, 59, 14, 46, 32, 11, 140, 35, 150, 195, 226, 16, 8, 180, 18, 64, 59, 66, 196, 15, 182, 223, 151, 40, 157, 24, 55, 238, 216, 242, 7, 43, 215, 73, 88, 40, 39, 191, 190, 153, 219, 148, 108, 149, 3, 40, 241, 203, 152, 188, 37, 4, 212, 28, 111, 89, 54, 80, 116, 193, 176, 6, 205, 128, 155, 20, 45, 157, 69, 20, 36, 54, 124, 186, 169, 61, 92, 209, 102, 187, 233, 10, 91, 70, 183, 161, 13, 27, 54, 145, 35, 140, 144, 149, 29, 29, 145, 152, 11, 170, 25, 193, 246, 152, 160, 29, 228, 116, 185, 53, 214, 205, 47, 213, 213, 170, 19, 82, 217, 179, 34, 238, 242, 137, 137, 122, 53, 27, 118, 20, 144, 20, 253, 146, 13, 94, 53, 145, 247, 50, 5, 147, 143, 130, 187, 14, 53, 2, 143, 101, 164, 11, 79, 60, 28, 175, 118, 60, 132, 43, 145, 139, 168, 75, 61, 225, 30, 104, 245, 191, 27, 11, 134, 218, 192, 209, 248, 59, 227, 54, 176, 82, 107, 212, 79, 7, 49, 54, 94, 166, 30, 127, 231, 123, 113, 254, 4, 154, 19, 139, 130, 167, 15, 148, 50, 163, 225, 64, 202, 120, 218, 223, 62, 101, 42, 154, 23, 113, 92, 32, 18, 191, 125, 26, 47, 252, 38, 38, 210, 124, 206, 77, 182, 70, 165, 252, 104, 115, 178, 43, 13, 216, 109, 192, 42, 126, 76, 0, 234, 111, 55, 238, 105, 110, 86, 192, 185, 236, 113, 138, 32, 56, 65, 111, 26, 71, 74, 96, 152, 150, 191, 187, 58, 217, 201, 93, 240, 248, 22, 203, 197, 244, 83, 220, 0, 136, 223, 44, 197, 55, 171, 168, 108, 202, 250, 5, 67, 129, 172, 213, 219, 63, 114, 229, 49, 208, 51, 208, 195, 111, 63, 117, 204, 117, 99, 86, 248, 5, 30, 42, 91, 142, 121, 245, 90, 234, 11, 101, 83, 172, 89, 60, 139, 43, 10, 61, 2, 77, 36, 133, 156, 15, 85, 148, 90, 180, 75, 139, 33, 212, 197, 23, 208, 236, 151, 183, 28, 153, 198, 171, 169, 165, 229, 228, 126, 120, 12, 210, 220, 63, 79, 80, 164, 13, 166, 5, 211, 136, 175, 108, 92, 172, 173, 220, 0, 218, 45, 204, 87, 161, 169, 30, 12, 42, 255, 55, 247, 51, 13, 45, 210, 31, 212, 233, 100, 149, 179, 148, 246, 209, 7, 195, 61, 244, 247, 133, 153, 230, 116, 43, 40, 3, 72, 215, 160, 238, 92, 125, 116, 225, 76, 179, 205, 54, 125, 198, 17, 74, 99, 166, 181, 202, 155, 18, 244, 173, 55, 169, 27, 118, 132, 193, 3, 59, 115, 148, 140, 99, 216, 175, 89, 105, 77, 229, 90, 170, 44, 67, 225, 143, 217, 104, 99, 101, 148, 23, 67, 238, 109, 128, 56, 152, 87, 80, 70, 130, 136, 19, 45, 18, 198, 91, 46, 93, 9, 62, 110, 165, 168, 223, 101, 249, 168, 94, 110, 42, 182, 13, 222, 173, 181, 96, 180, 40, 232, 84, 174, 181, 173, 104, 126, 99, 103, 205, 250, 215, 173, 85, 140, 103, 242, 11, 159, 121, 137, 208, 68, 159, 68, 190, 227, 115, 16, 92, 39, 50, 19, 135, 196, 226, 155, 250, 0, 228, 167, 219, 106, 57, 198, 115, 119, 94, 132, 65, 29, 159, 89, 184, 166, 24, 244, 169, 51, 250, 176, 174, 137, 207, 15, 201, 151, 9, 188, 130, 161, 221, 165, 243, 33, 223, 6, 212, 167, 30, 111, 65, 2, 20, 206, 57, 248, 111, 233, 234, 79, 105, 28, 228, 105, 196, 254, 134, 35, 171, 175, 10, 180, 210, 216, 187, 141, 200, 20, 104, 246, 210, 103, 55, 253, 220, 162, 64, 228, 58, 212, 167, 3, 126, 167, 176, 47, 121, 108, 187, 96, 4, 206, 24, 88, 81, 215, 65, 70, 213, 76, 206, 112, 18, 141, 186, 130, 212, 222, 194, 11, 154, 127, 247, 61, 33, 46, 229, 154, 210, 47, 241, 23, 134, 210, 30, 229, 103, 58, 76, 189, 4, 203, 49, 148, 52, 61, 168, 198, 90, 233, 74, 63, 135, 182, 91, 114, 232, 192, 104, 207, 170, 184, 236, 149, 64, 153, 61, 251, 24, 235, 159, 100, 201, 215, 177, 182, 34, 55, 216, 50, 44, 215, 192, 224, 169, 234, 13, 167, 26, 235, 207, 135, 37, 36, 83, 208, 185, 28, 228, 134, 40, 108, 222, 14, 7, 248, 254, 244, 29, 123, 191, 182, 180, 159, 218, 191, 117, 74, 19, 80, 192, 15, 9, 184, 242, 211, 186, 162, 37, 63, 109, 30, 22, 117, 113, 83, 128, 69, 170, 217, 238, 213, 234, 85, 246, 157, 132, 249, 129, 197, 204, 61, 90, 59, 52, 222, 112, 170, 71, 241, 126, 237, 248, 76, 182, 249, 243, 180, 157, 207, 174, 12, 231, 115, 156, 226, 190, 229, 75, 152, 203, 104, 26, 216, 149, 59, 117, 163, 4, 114, 235, 25, 129, 235, 116, 11, 92, 42, 108, 120, 98, 62, 238, 47, 119, 209, 71, 134, 191, 36, 226, 178, 145, 89, 238, 224, 80, 242, 142, 239, 52, 7, 230, 100, 217, 103, 224, 196, 111, 8, 180, 92, 134, 130, 217, 219, 170, 161, 96, 214, 21, 204, 175, 157, 219, 35, 220, 179, 207, 4, 60, 162, 223, 150, 98, 199, 123, 49, 99, 43, 112, 117, 250, 180, 111, 144, 29, 73, 238, 16, 172, 192, 162, 26, 52, 97, 71, 188, 201, 15, 202, 224, 240, 92, 36, 31, 98, 92, 207, 232, 59, 105, 10, 75, 76, 63, 9, 182, 60, 248, 45, 178, 177, 154, 3, 36, 31, 47, 69, 59, 229, 217, 159, 172, 42, 108, 205, 65, 82, 22, 116, 211, 192, 223, 34, 63, 255, 1, 12, 12, 181, 108, 215, 199, 208, 175, 155, 239, 169, 105, 231, 181, 154, 228, 166, 101, 156, 29, 233, 107, 166, 213, 173, 59, 20, 106, 182, 178, 104, 123, 241, 28, 54, 143, 26, 26, 98, 32, 122, 141, 245, 42, 252, 224, 124, 87, 22, 57, 130, 48, 241, 87, 111, 241, 25, 234, 205, 11, 136, 59, 52, 189, 116, 132, 46, 3, 196, 255, 246, 91, 159, 30, 167, 165, 83, 110, 83, 250, 44, 166, 35, 70, 99, 191, 143, 246, 55, 145, 133, 239, 8, 225, 126, 36, 120, 173, 13, 124, 4, 105, 141, 199, 144, 6, 125, 77, 3, 228, 29, 59, 47, 34, 16, 223, 133, 9, 14, 211, 144, 123, 147, 210, 231, 95, 195, 3, 190, 107, 97, 9, 67, 221, 55, 153, 87, 192, 86, 50, 203, 203, 187, 63, 146, 185, 203, 64, 43, 52, 138, 98, 100, 249, 69, 224, 108, 131, 166, 248, 48, 78, 88, 161, 186, 216, 100, 206, 155, 198, 141, 132, 127, 90, 42, 140, 53, 46, 68, 238, 254, 69, 21, 128, 157, 78, 72, 14, 141, 113, 10, 148, 118, 31, 99, 191, 175, 244, 224, 166, 136, 74, 105, 236, 67, 113, 114, 236, 218, 82, 255, 44, 122, 82, 230, 245, 252, 145, 21, 5, 86, 191, 40, 73, 146, 182, 15, 70, 144, 116, 173, 42, 106, 249, 12, 179, 232, 114, 218, 239, 243, 86, 174, 109, 91, 50, 213, 111, 12, 98, 158, 178, 153, 42, 155, 248, 94, 238, 221, 67, 225, 133, 173, 201, 89, 186, 246, 237, 252, 155, 139, 233, 227, 52, 93, 74, 170, 151, 119, 235, 25, 239, 51, 27, 38, 13, 118, 227, 117, 208, 124, 236, 110, 171, 132, 110, 137, 214, 104, 252, 158, 155, 45, 240, 177, 27, 53, 88, 251, 105, 87, 137, 98, 253, 225, 236, 60, 147, 142, 186, 13, 150, 23, 24, 83, 161, 216, 202, 157, 68, 134, 15, 104, 69, 253, 240, 99, 76, 87, 227, 178, 34, 201, 233, 189, 163, 188, 90, 58, 175, 176, 110, 15, 75, 14, 102, 31, 67, 94, 16, 57, 72, 37, 84, 179, 188, 175, 47, 96, 115, 72, 30, 33, 216, 88, 199, 127, 126, 103, 75, 168, 59, 223, 182, 72, 184, 125, 102, 236, 12, 58, 35, 201, 170, 190, 11, 55, 3, 178, 242, 179, 118, 245, 94, 14, 218, 168, 36, 15, 58, 86, 155, 159, 131, 199, 69, 146, 18, 166, 162, 67, 213, 123, 231, 177, 48, 101, 73, 165, 193, 34, 184, 80, 116, 156, 198, 115, 76, 146, 172, 20, 9, 15, 204, 15, 140, 98, 134, 119, 242, 149, 86, 61, 27, 168, 150, 227, 91, 200, 36, 71, 145, 232, 21, 54, 138, 9, 10, 19, 193, 230, 158, 139, 206, 7, 207, 181, 162, 185, 251, 21, 24, 234, 23, 55, 72, 165, 177, 136, 254, 48, 41, 213, 167, 116, 75, 238, 221, 58, 69, 64, 188, 247, 145, 97, 120, 124, 152, 11, 84, 10, 119, 24, 25, 34, 38, 68, 102, 168, 158, 59, 191, 207, 101, 40, 34, 9, 38, 36, 143, 12, 3, 139, 221, 207, 120, 39, 252, 235, 50, 195, 236, 9, 22, 114, 66, 234, 126, 203, 112, 195, 138, 88, 167, 92, 132, 182, 79, 58, 146, 66, 216, 64, 74, 4, 61, 217, 167, 87, 27, 12, 251, 156, 251, 49, 38, 32, 30, 40, 194, 73, 20, 92, 25, 54, 119, 82, 15, 148, 99, 38, 207, 143, 227, 82, 124, 140, 129, 219, 94, 249, 216, 97, 14, 93, 176, 188, 145, 216, 112, 123, 43, 151, 48, 135, 49, 147, 119, 56, 205, 56, 88, 79, 184, 91, 31, 132, 118, 114, 82, 109, 119, 140, 145, 186, 11, 51, 19, 216, 104, 131, 195, 101, 203, 239, 255, 68, 145, 224, 26, 94, 96, 222, 186, 238, 185, 159, 166, 1, 123, 212, 87, 83, 119, 96, 140, 4, 158, 192, 172, 37, 153, 236, 121, 44, 93, 53, 170, 1, 244, 95, 25, 161, 196, 148, 3, 100, 137, 124, 66, 113, 91, 95, 179, 137, 159, 168, 145, 125, 135, 186, 90, 90, 37, 122, 57, 11, 78, 118, 138, 140, 228, 70, 140, 18, 236, 95, 79, 227, 47, 228, 16, 84, 120, 98, 237, 82, 133, 95, 49, 90, 52, 44, 1, 1, 17, 134, 127, 24, 247, 104, 66, 153, 32, 37, 59, 121, 9, 7, 35, 96, 125, 106, 254, 117, 71, 66, 73, 47, 61, 161, 137, 78, 226, 144, 76, 120, 71, 31, 77, 28, 32, 179, 253, 233, 2, 230, 195, 156, 238, 77, 77, 1, 37, 213, 94, 14, 69, 168, 81, 184, 62, 106, 234, 134, 113, 14, 23, 50, 51, 48, 198, 70, 96, 20, 108, 153, 39, 88, 215, 112, 8, 42, 153, 1, 34, 42, 183, 244, 228, 127, 204, 75, 189, 199, 73, 156, 197, 225, 103, 150, 74, 252, 230, 34, 248, 18, 225, 161, 16, 162, 177, 148, 94, 31, 221, 165, 61, 209, 62, 9, 250, 84, 2, 29, 241, 95, 137, 122, 85, 128, 22, 8, 67, 99, 169, 154, 250, 16, 19, 162, 101, 17, 57, 48, 211, 29, 103, 184, 135, 59, 232, 23, 29, 241, 183, 144, 117, 168, 135, 18, 78, 233, 174, 127, 130, 217, 87, 165, 46, 151, 198, 145, 86, 13, 242, 121, 144, 59, 5, 71, 5, 44, 29, 210, 227, 233, 44, 208, 13, 53, 16, 30, 215, 198, 94, 134, 138, 64, 41, 168, 140, 177, 206, 197, 140, 58, 31, 110, 61, 50, 62, 23, 204, 243, 212, 17, 231, 236, 196, 221, 82, 207, 77, 214, 179, 203, 132, 122, 148, 84, 146, 68, 2, 15, 87, 134, 204, 225, 108, 53, 13, 146, 192, 97, 50, 169, 123, 135, 113, 71, 39, 38, 242, 126, 43, 149, 130, 205, 68, 125, 63, 54, 121, 75, 75, 222, 106, 20, 94, 112, 30, 225, 190, 89, 54, 43, 223, 234, 36, 145, 50, 159, 194, 157, 105, 115, 210, 198, 202, 70, 102, 160, 140, 148, 43, 165, 255, 218, 174, 96, 137, 25, 253, 52, 140, 199, 232, 121, 133, 213, 84, 108, 9, 237, 224, 201, 128, 7, 191, 131, 150, 121, 228, 117, 209, 11, 22, 178, 67, 58, 91, 119, 225, 11, 80, 190, 10, 73, 48, 97, 216, 89, 237, 49, 209, 224, 186, 188, 36, 117, 225, 85, 125, 25, 75, 195, 150, 47, 255, 254, 127, 32, 229, 38, 77, 99, 26, 40, 41, 228, 8, 114, 142, 6, 103, 172, 111, 19, 197, 172, 166, 13, 56, 53, 223, 21, 172, 94, 133, 2, 189, 212, 69, 142, 65, 215, 101, 89, 113, 233, 166, 82, 156, 220, 180, 93, 176, 181, 126, 63, 121, 162, 97, 60, 125, 148, 18, 20, 131, 33, 11, 218, 143, 114, 93, 251, 108, 45, 145, 106, 86, 122, 42, 201, 127, 6, 69, 223, 63, 254, 127, 101, 169, 207, 238, 45, 221, 24, 199, 73, 20, 149, 79, 192, 119, 182, 37, 78, 106, 36, 80, 175, 228, 137, 224, 38, 131, 59, 146, 198, 255, 197, 116, 48, 12, 36, 53, 224, 155, 49, 151, 251, 185, 42, 237, 170, 160, 212, 9, 63, 252, 121, 3, 5, 15, 58, 36, 210, 198, 178, 33, 192, 194, 185, 105, 167, 95, 201, 146, 3, 63, 136, 70, 180, 195, 154, 9, 150, 174, 141, 10, 231, 178, 150, 117, 76, 15, 255, 26, 13, 185, 96, 246, 157, 87, 98, 136, 250, 130, 99, 50, 198, 204, 141, 135, 68, 234, 101, 167, 235, 174, 193, 131, 211, 250, 18, 65, 18, 137, 90, 212, 252, 131, 189, 26, 128, 32, 127, 22, 49, 58, 35, 17, 222, 205, 201, 223, 154, 48, 23, 137, 36, 149, 253, 89, 98, 214, 9, 121, 107, 196, 147, 24, 242, 87, 220, 232, 228, 199, 196, 174, 32, 253, 81, 77, 175, 139, 146, 3, 181, 29, 136, 251, 12, 132, 193, 222, 84, 156, 91, 49, 198, 115, 231, 72, 186, 9, 140, 127, 140, 74, 8, 217, 64, 167, 161, 252, 31, 225, 59, 223, 147, 214, 144, 154, 225, 107, 8, 81, 152, 31, 220, 254, 77, 99, 178, 108, 104, 243, 252, 72, 49, 193, 65, 242, 22, 102, 87, 133, 136, 163, 42, 229, 158, 172, 202, 15, 199, 194, 65, 193, 175, 235, 226, 78, 249, 182, 69, 227, 244, 94, 102, 145, 194, 59, 182, 134, 153, 81, 115, 7, 182, 193, 25, 221, 183, 237, 149, 76, 31, 119, 222, 138, 225, 147, 250, 163, 139, 179, 24, 98, 169, 193, 173, 127, 155, 177, 82, 143, 123, 150, 147, 243, 84, 115, 83, 92, 183, 88, 152, 72, 132, 16, 15, 131, 12, 174, 18, 114, 127, 202, 226, 240, 148, 165, 201, 239, 254, 236, 90, 218, 195, 163, 226, 184, 67, 223, 117, 22, 38, 250, 12, 14, 83, 115, 58, 201, 159, 192, 179, 141, 152, 68, 115, 226, 134, 89, 76, 148, 45, 164, 182, 247, 93, 29, 226, 124, 106, 83, 96, 43, 23, 172, 90, 127, 91, 192, 102, 71, 137, 83, 195, 81, 17, 252, 64, 172, 57, 148, 164, 16, 247, 232, 34, 134, 219, 44, 52, 232, 32, 154, 72, 62, 81, 184, 135, 193, 30, 214, 249, 40, 132, 145, 111, 133, 47, 157, 234, 170, 148, 86, 221, 158, 182, 167, 141, 221, 0, 183, 13, 70, 129, 184, 167, 156, 156, 173, 64, 15, 14, 15, 200, 7, 254, 209, 120, 255, 231, 73, 32, 164, 133, 137, 133, 146, 252, 173, 172, 74, 147, 197, 32, 117, 91, 89, 5, 59, 205, 30, 134, 197, 138, 205, 240, 41, 113, 78, 42, 191, 48, 212, 132, 106, 246, 243, 55, 153, 138, 86, 17, 112, 167, 86, 223, 40, 23, 169, 28, 172, 230, 112, 138, 136, 221, 203, 236, 153, 245, 176, 168, 43, 48, 35, 37, 178, 60, 88, 36, 226, 118, 104, 109, 178, 63, 1, 26, 0, 131, 58, 123, 154, 238, 240, 16, 24, 174, 127, 47, 161, 25, 246, 239, 189, 30, 235, 13, 89, 144, 100, 150, 140, 64, 181, 108, 180, 61, 67, 200, 41, 169, 236, 52, 192, 192, 77, 72, 25, 48, 223, 65, 193, 197, 76, 28, 242, 76, 193, 129, 89, 182, 89, 246, 216, 8, 181, 68, 211, 68, 70, 65, 116, 166, 91, 33, 59, 39, 229, 127, 8, 152, 139, 96, 6, 91, 180, 84, 185, 189, 96, 141, 101, 202, 131, 163, 252, 120, 50, 219, 232, 30, 195, 58, 123, 128, 120, 13, 165, 176, 78, 207, 111, 61, 13, 164, 6, 171, 191, 127, 101, 168, 140, 143, 133, 245, 149, 117, 11, 200, 59, 183, 127, 239, 126, 126, 88, 216, 200, 121, 24, 238, 31, 134, 169, 203, 25, 93, 160, 252, 100, 158, 160, 226, 57, 217, 191, 45, 243, 36, 241, 32, 42, 140, 1, 126, 225, 232, 35, 10, 112, 243, 207, 245, 62, 250, 105, 140, 126, 33, 113, 105, 239, 56, 24, 36, 11, 144, 134, 85, 181, 149, 43, 50, 144, 171, 198, 111, 230, 39, 61, 27, 56, 229, 131, 58, 208, 196, 24, 90, 66, 216, 33, 216, 74, 206, 80, 103, 153, 113, 136, 234, 164, 81, 13, 135, 48, 235, 179, 72, 154, 250, 151, 18, 61, 237, 127, 196, 177, 197, 0, 154, 0, 64, 106, 211, 150, 155, 109, 248, 67, 223, 20, 143, 95, 223, 214, 251, 208, 149, 33, 148, 77, 182, 184, 117, 49, 195, 236, 254, 210, 131, 165, 101, 120, 163, 200, 167, 223, 252, 28, 158, 154, 93, 23, 252, 91, 189, 247, 246, 115, 84, 111, 80, 47, 60, 244, 112, 238, 167, 126, 16, 25, 128, 113, 209, 250, 105, 48, 224, 149, 216, 128, 94, 75, 89, 159, 222, 246, 200, 150, 23, 92, 79, 197, 243, 10, 92, 233, 100, 72, 53, 150, 204, 154, 0, 90, 161, 45, 153, 74, 250, 48, 203, 208, 167, 32, 161, 52, 206, 105, 26, 33, 112, 8, 207, 3, 190, 250, 132, 30, 108, 190, 61, 248, 52, 139, 137, 45, 248, 20, 191, 24, 7, 67, 21, 230, 226, 248, 135, 34, 33, 201, 168, 56, 236, 228, 171, 162, 26, 82, 214, 178, 153, 79, 183, 53, 94, 138, 10, 127, 226, 102, 142, 201, 180, 195, 77, 232, 36, 248, 91, 127, 32, 253, 72, 82, 246, 152, 190, 247, 94, 177, 25, 175, 125, 2, 181, 197, 111, 24, 192, 52, 231, 233, 161, 122, 238, 136, 51, 230, 79, 185, 192, 30, 105, 235, 119, 106, 214, 21, 213, 207, 40, 35, 121, 249, 174, 212, 199, 92, 188, 134, 79, 86, 220, 159, 45, 59, 132, 50, 78, 105, 104, 201, 94, 0, 232, 53, 220, 95, 23, 25, 149, 208, 216, 22, 127, 111, 247, 196, 221, 45, 89, 46, 111, 58, 228, 131, 85, 233, 100, 114, 245, 118, 141, 95, 74, 194, 129, 79, 249, 151, 127, 109, 52, 21, 97, 1, 244, 119, 50, 227, 250, 9, 125, 52, 137, 214, 8, 166, 159, 74, 93, 199, 185, 248, 171, 106, 39, 221, 107, 61, 163, 92, 127, 215, 123, 75, 114, 79, 83, 136, 85, 19, 150, 13, 132, 78, 110, 255, 205, 90, 243, 17, 169, 33, 104, 199, 20, 67, 24, 133, 14, 28, 218, 82, 171, 19, 253, 235, 197, 56, 205, 148, 111, 21, 180, 197, 98, 48, 28, 153, 145, 35, 85, 171, 200, 241, 182, 33, 137, 151, 19, 96, 65, 157, 21, 237, 70, 251, 43, 170, 148, 242, 250, 252, 249, 172, 140, 168, 175, 228, 188, 113, 21, 229, 86, 161, 182, 141, 230, 159, 102, 216, 58, 82, 28, 11, 143, 5, 94, 145, 204, 79, 12, 130, 110, 124, 139, 26, 131, 71, 184, 10, 45, 178, 105, 17, 194, 131, 16, 0, 190, 127, 73, 171, 219, 250, 170, 128, 239, 30, 228, 83, 29, 254, 45, 251, 69, 125, 64, 181, 72, 57, 5, 204, 117, 240, 105, 133, 251, 100, 93, 115, 244, 168, 149, 174, 187, 171, 160, 43, 245, 38, 221, 160, 116, 19, 120, 137, 45, 6, 194, 170, 14, 27, 249, 253, 247, 245, 89, 196, 178, 214, 218, 220, 102, 238, 227, 9, 17, 11, 102, 66, 244, 211, 176, 35, 13, 22, 255, 177, 16, 203, 141, 92, 49, 145, 231, 233, 11, 174, 156, 221, 220, 102, 70, 112, 123, 117, 206, 243, 189, 145, 66, 74, 113, 136, 48, 89, 29, 54, 95, 209, 215, 195, 152, 177, 195, 57, 14, 228, 120, 23, 1, 87, 166, 165, 19, 1, 255, 84, 182, 53, 29, 90, 111, 240, 105, 107, 159, 97, 247, 95, 142, 177, 87, 172, 93, 145, 46, 117, 148, 179, 224, 129, 142, 82, 46, 114, 150, 193, 233, 105, 221, 123, 228, 4, 186, 28, 59, 27, 42, 173, 158, 218, 236, 16, 232, 17, 234, 185, 158, 236, 107, 64, 184, 62, 162, 125, 165, 107, 102, 143, 103, 118, 111, 33, 97, 18, 122, 1, 186, 104, 174, 240, 129, 132, 138, 170, 102, 27, 140, 107, 56, 98, 38, 220, 94, 245, 20, 217, 78, 85, 140, 36, 204, 18, 20, 174, 255, 87, 158, 37, 22, 99, 92, 44, 132, 215, 220, 36, 30, 11, 11, 88, 65, 6, 60, 214, 48, 225, 132, 243, 79, 120, 109, 112, 111, 61, 131, 243, 184, 3, 214, 138, 255, 191, 101, 79, 224, 147, 78, 209, 116, 90, 59, 243, 164, 152, 142, 179, 200, 219, 19, 63, 242, 228, 109, 66, 87, 240, 125, 145, 113, 228, 223, 41, 191, 59, 54, 74, 130, 150, 68, 124, 78, 136, 201, 91, 29, 191, 181, 183, 98, 236, 250, 41, 236, 234, 73, 211, 28, 180, 236, 247, 210, 217, 141, 70, 147, 252, 82, 47, 17, 108, 207, 170, 163, 44, 195, 173, 11, 98, 5, 195, 243, 162, 37, 95, 183, 131, 30, 191, 115, 255, 165, 248, 128, 53, 138, 156, 130, 129, 57, 163, 219, 6, 174, 153, 178, 158, 168, 171, 112, 251, 135, 236, 198, 96, 102, 8, 12, 164, 176, 188, 40, 226, 254, 68, 90, 226, 40, 203, 36, 2, 252, 229, 41, 194, 23, 251, 166, 88, 96, 234, 1, 115, 238, 105, 116, 216, 104, 35, 180, 181, 83, 167, 151, 45, 246, 172, 234, 14, 6, 234, 70, 180, 22, 88, 134, 168, 47, 14, 61, 16, 24, 108, 9, 106, 34, 186, 62, 37, 99, 227, 62, 172, 17, 216, 38, 143, 55, 142, 81, 6, 102, 53, 164, 142, 79, 83, 5, 138, 69, 121, 29, 13, 77, 14, 195, 0, 129, 24, 83, 78, 107, 117, 183, 197, 27, 68, 24, 73, 153, 192, 29, 142, 97, 12, 118, 167, 67, 253, 196, 204, 246, 105, 5, 158, 16, 89, 162, 137, 101, 75, 147, 43, 87, 155, 182, 186, 108, 188, 208, 151, 151, 221, 73, 56, 191, 140, 83, 179, 31, 234, 114, 18, 8, 235, 231, 228, 153, 8, 52, 8, 74, 28, 186, 130, 253, 89, 53, 207, 117, 166, 7, 12, 184, 196, 198, 74, 144, 233, 7, 62, 211, 86, 40, 226, 255, 49, 117, 84, 57, 228, 232, 208, 21, 13, 10, 171, 60, 167, 142, 234, 6, 100, 38, 115, 14, 13, 87, 251, 96, 86, 135, 185, 46, 179, 170, 3, 34, 9, 103, 66, 13, 245, 102, 17, 183, 92, 198, 228, 21, 139, 152, 48, 236, 105, 43, 6, 79, 234, 176, 221, 193, 44, 246, 211, 139, 241, 140, 238, 250, 86, 197, 97, 25, 235, 156, 196, 72, 17, 159, 235, 207, 136, 166, 115, 21, 36, 121, 225, 128, 238, 94, 249, 203, 187, 231, 234, 126, 7, 48, 248, 192, 24, 214, 248, 211, 138, 88, 178, 25, 168, 116, 237, 196, 18, 10, 233, 249, 132, 202, 219, 107, 9, 142, 240, 72, 245, 233, 126, 81, 81, 65, 188, 25, 197, 64, 33, 57, 52, 108, 54, 154, 250, 185, 90, 94, 185, 184, 110, 51, 192, 87, 231, 90, 127, 148, 47, 46, 103, 199, 15, 107, 240, 33, 52, 30, 97, 186, 76, 187, 159, 107, 247, 54, 37, 174, 107, 88, 53, 145, 57, 67, 76, 202, 182, 205, 44, 255, 160, 133, 51, 15, 129, 157, 174, 0, 29, 244, 206, 119, 162, 17, 140, 162, 82, 116, 106, 184, 246, 193, 199, 140, 212, 195, 36, 23, 143, 71, 101, 102, 248, 96, 219, 80, 11, 199, 186, 160, 224, 148, 39, 139, 33, 201, 243, 87, 86, 65, 147, 21, 162, 207, 11, 236, 28, 123, 251, 135, 196, 150, 187, 99, 103, 244, 59, 232, 84, 252, 122, 73, 251, 245, 205, 209, 30, 92, 70, 83, 41, 7, 35, 210, 253, 177, 113, 63, 54, 129, 184, 222, 240, 250, 214, 81, 51, 50, 90, 188, 106, 211, 200, 221, 123, 151, 162, 214, 197, 91, 160, 33, 200, 246, 202, 100, 70, 232, 248, 49, 225, 80, 68, 84, 116, 49, 209, 243, 166, 4, 236, 81, 99, 41, 121, 158, 67, 48, 106, 56, 138, 61, 179, 53, 128, 64, 35, 85, 91, 8, 18, 170, 58, 182, 1, 148, 214, 81, 199, 252, 232, 58, 186, 134, 203, 79, 155, 134, 117, 14, 24, 73, 198, 68, 91, 77, 202, 164, 154, 40, 83, 17, 5, 220, 110, 150, 39, 198, 97, 77, 211, 40, 100, 139, 179, 216, 239, 32, 211, 162, 145, 249, 85, 108, 162, 213, 203, 246, 3, 249, 91, 175, 167, 18, 198, 79, 60, 149, 17, 168, 87, 164, 119, 233, 255, 199, 35, 234, 24, 188, 162, 209, 57, 17, 248, 126, 107, 240, 242, 196, 221, 66, 58, 230, 50, 81, 232, 108, 145, 11, 149, 68, 219, 17, 238, 81, 217, 30, 247, 235, 111, 30, 125, 112, 158, 209, 221, 158, 236, 42, 27, 111, 32, 127, 31, 198, 8, 172, 182, 94, 63, 83, 235, 102, 135, 106, 176, 142, 245, 43, 105, 132, 19, 207, 39, 209, 140, 136, 36, 245, 193, 198, 3, 167, 4, 219, 87, 26, 189, 157, 70, 231, 145, 85, 25, 74, 234, 147, 118, 242, 203, 236, 158, 83, 230, 80, 168, 142, 165, 63, 75, 112, 110, 83, 163, 154, 172, 78, 247, 204, 188, 243, 104, 26, 8, 103, 167, 147, 104, 111, 59, 18, 40, 229, 184, 206, 100, 134, 250, 163, 211, 146, 51, 99, 236, 137, 140, 1, 60, 241, 224, 222, 154, 11, 226, 132, 200, 197, 106, 242, 194, 122, 158, 19, 217, 98, 8, 233, 131, 21, 162, 234, 82, 10, 252, 169, 124, 128, 45, 240, 103, 54, 114, 81, 4, 246, 200, 1, 161, 204, 49, 113, 61, 157, 155, 64, 143, 161, 46, 199, 239, 109, 40, 118, 59, 177, 72, 64, 6, 45, 167, 187, 253, 71, 32, 161, 18, 208, 3, 166, 66, 48, 207, 220, 161, 146, 32, 233, 160, 93, 198, 79, 147, 210, 172, 230, 128, 15, 155, 17, 180, 206, 178, 50, 247, 217, 166, 236, 46, 205, 64, 188, 202, 235, 189, 119, 99, 247, 197, 239, 100, 237, 51, 237, 192, 183, 212, 13, 172, 202, 148, 232, 48, 163, 243, 238, 95, 178, 172, 224, 168, 203, 9, 87, 126, 59, 59, 170, 64, 103, 133, 165, 45, 95, 180, 184, 143, 188, 125, 235, 154, 56, 185, 41, 214, 159, 212, 50, 144, 5, 18, 74, 232, 205, 193, 5, 121, 145, 179, 116, 202, 109, 184, 62, 21, 216, 36, 184, 80, 18, 195, 56, 202, 20, 136, 8, 78, 74, 238, 90, 243, 239, 167, 202, 241, 64, 248, 1, 182, 245, 0, 106, 240, 224, 94, 54, 89, 163, 229, 229, 103, 8, 163, 56, 45, 7, 242, 27, 62, 231, 225, 98, 191, 201, 186, 154, 58, 171, 77, 252, 242, 188, 153, 155, 62, 200, 232, 223, 57, 59, 156, 164, 49, 152, 226, 154, 219, 91, 177, 43, 139, 228, 163, 158, 139, 73, 107, 19, 73, 9, 212, 29, 119, 7, 49, 206, 35, 246, 206, 59, 247, 41, 27, 53, 79, 80, 97, 28, 144, 125, 28, 18, 140, 205, 120, 133, 219, 37, 190, 229, 75, 239, 215, 185, 162, 83, 52, 83, 209, 153, 65, 19, 19, 209, 88, 238, 214, 232, 192, 158, 229, 55, 143, 231, 65, 80, 25, 155, 204, 146, 57, 176, 61, 55, 109, 171, 193, 88, 121, 51, 67, 220, 48, 149, 101, 130, 128, 129, 228, 30, 217, 47, 195, 184, 36, 249, 142, 12, 16, 186, 43, 188, 159, 251, 3, 90, 144, 217, 157, 57, 152, 171, 186, 93, 2, 202, 99, 183, 97, 61, 109, 14, 217, 99, 69, 251, 214, 13, 126, 136, 117, 16, 109, 196, 200, 131, 212, 38, 77, 38, 237, 213, 87, 69, 248, 78, 182, 194, 86, 124, 235, 226, 172, 5, 175, 239, 229, 179, 31, 188, 80, 127, 193, 222, 104, 67, 74, 158, 104, 14, 24, 45, 96, 28, 155, 238, 46, 112, 31, 220, 118, 208, 250, 97, 135, 53, 239, 103, 201, 189, 40, 110, 225, 75, 90, 92, 248, 66, 138, 99, 227, 4, 158, 203, 248, 114, 242, 129, 143, 11, 52, 42, 84, 20, 159, 130, 204, 78, 46, 53, 114, 81, 52, 187, 104, 158, 121, 235, 153, 27, 63, 172, 252, 43, 159, 30, 217, 244, 212, 199, 228, 59, 140, 163, 42, 71, 80, 5, 35, 100, 248, 69, 128, 171, 39, 182, 10, 14, 52, 212, 132, 70, 202, 19, 199, 34, 233, 12, 51, 183, 253, 245, 117, 89, 5, 129, 197, 52, 184, 219, 112, 179, 175, 23, 83, 252, 154, 243, 62, 112, 52, 116, 135, 100, 173, 178, 102, 166, 86, 245, 243, 47, 107, 102, 53, 3, 169, 191, 52, 92, 82, 165, 218, 143, 108, 244, 108, 143, 158, 69, 75, 145, 202, 175, 159, 55, 103, 71, 39, 248, 151, 114, 228, 242, 205, 106, 135, 202, 146, 88, 82, 3, 150, 35, 42, 11, 2, 57, 213, 222, 182, 205, 196, 44, 56, 53, 56, 56, 100, 16, 202, 177, 217, 141, 253, 118, 60, 222, 168, 190, 17, 165, 113, 97, 92, 73, 50, 133, 173, 123, 145, 228, 251, 165, 115, 209, 39, 48, 230, 175, 19, 56, 10, 146, 248, 81, 49, 35, 2, 38, 248, 190, 164, 142, 120, 194, 30, 87, 158, 51, 19, 83, 160, 241, 236, 169, 94, 252, 201, 159, 203, 75, 194, 21, 91, 191, 169, 183, 132, 82, 103, 169, 107, 230, 51, 93, 102, 62, 253, 132, 90, 121, 6, 10, 26, 32, 237, 178, 238, 14, 72, 49, 12, 144, 189, 117, 254, 228, 241, 201, 8, 225, 91, 65, 20, 43, 188, 51, 200, 239, 49, 85, 16, 39, 46, 175, 111, 186, 243, 106, 27, 165, 252, 84, 167, 61, 49, 134, 114, 239, 112, 73, 14, 244, 138, 246, 164, 100, 240, 41, 232, 16, 141, 44, 43, 103, 244, 173, 172, 139, 4, 72, 27, 110, 31, 56, 38, 223, 83, 222, 130, 29, 50, 197, 134, 19, 157, 193, 155, 35, 113, 7, 27, 246, 183, 102, 63, 100, 58, 210, 207, 127, 193, 53, 9, 9, 144, 187, 95, 11, 69, 174, 156, 141, 82, 243, 96, 55, 121, 100, 95, 128, 157, 3, 31, 165, 44, 2, 194, 147, 243, 21, 90, 77, 75, 99, 14, 24, 87, 207, 16, 150, 236, 67, 163, 189, 63, 32, 150, 56, 137, 88, 236, 138, 246, 227, 121, 5, 54, 41, 248, 81, 218, 97, 72, 185, 159, 240, 246, 97, 117, 51, 187, 234, 76, 110, 160, 215, 169, 136, 157, 219, 33, 76, 2, 204, 126, 60, 128, 246, 33, 96, 245, 52, 139, 71, 130, 208, 221, 16, 70, 206, 224, 180, 234, 46, 72, 243, 103, 35, 107, 2, 222, 212, 186, 16, 145, 116, 124, 163, 63, 104, 99, 246, 86, 112, 209, 78, 131, 249, 120, 253, 120, 142, 236, 57, 5, 136, 57, 119, 71, 57, 99, 126, 141, 118, 35, 245, 14, 89, 137, 168, 179, 184, 145, 113, 49, 198, 149, 185, 146, 88, 251, 147, 206, 34, 157, 205, 95, 49, 231, 173, 130, 11, 176, 6, 88, 198, 38, 154, 77, 144, 31, 160, 1, 121, 179, 192, 132, 190, 13, 190, 202, 69, 7, 128, 187, 182, 195, 235, 177, 50, 208, 225, 24, 196, 146, 120, 194, 122, 137, 20, 239, 85, 76, 99, 65, 122, 82, 80, 152, 99, 34, 16, 83, 239, 145, 150, 237, 204, 180, 216, 228, 186, 122, 223, 29, 134, 196, 8, 5, 207, 214, 2, 18, 62, 131, 92, 157, 110, 177, 5, 74, 13, 251, 98, 226, 161, 122, 217, 206, 104, 168, 137, 104, 3, 2, 115, 166, 48, 3, 7, 238, 204, 33, 173, 230, 237, 197, 230, 115, 130, 96, 186, 140, 195, 38, 63, 208, 194, 223, 220, 11, 184, 167, 21, 45, 159, 85, 87, 180, 221, 35, 239, 77, 247, 35, 190, 247, 87, 230, 241, 79, 2, 169, 64, 124, 78, 233, 1, 202, 3, 157, 170, 218, 155, 103, 165, 252, 239, 22, 109, 251, 225, 50, 214, 108, 80, 104, 130, 173, 202, 232, 185, 71, 95, 105, 143, 10, 231, 216, 202, 52, 188, 112, 25, 145, 69, 132, 37, 78, 176, 169, 254, 20, 189, 148, 153, 121, 250, 143, 5, 151, 143, 56, 166, 132, 120, 100, 18, 124, 97, 144, 78, 58, 109, 151, 21, 187, 168, 96, 123, 53, 125, 189, 17, 106, 222, 22, 118, 53, 178, 240, 239, 253, 143, 122, 220, 108, 103, 240, 26, 218, 0, 188, 215, 211, 131, 234, 99, 182, 82, 28, 59, 3, 144, 219, 85, 69, 172, 3, 87, 24, 171, 235, 37, 206, 170, 101, 213, 248, 31, 246, 189, 160, 49, 170, 137, 254, 13, 16, 113, 207, 204, 197, 22, 24, 173, 156, 140, 248, 26, 81, 198, 246, 9, 5, 110, 96, 113, 117, 89, 129, 149, 70, 38, 53, 177, 227, 132, 112, 44, 156, 154, 248, 102, 51, 90, 203, 149, 145, 166, 218, 89, 100, 118, 211, 93, 136, 12, 0, 133, 138, 143, 187, 86, 51, 111, 248, 20, 189, 2, 122, 70, 68, 63, 37, 227, 230, 139, 92, 150, 36, 167, 218, 169, 117, 10, 7, 114, 129, 125, 63, 157, 54, 27, 13, 211, 128, 55, 241, 114, 213, 173, 115, 33, 123, 12, 56, 74, 234, 225, 126, 123, 205, 222, 95, 22, 249, 228, 212, 9, 79, 189, 243, 202, 194, 147, 98, 28, 174, 186, 213, 30, 165, 162, 21, 143, 162, 16, 227, 158, 127, 105, 34, 229, 8, 93, 114, 216, 89, 154, 240, 21, 190, 238, 13, 53, 204, 123, 69, 28, 132, 112, 244, 120, 153, 231, 88, 157, 80, 164, 165, 165, 246, 91, 196, 209, 105, 149, 217, 141, 50, 112, 31, 63, 224, 192, 224, 70, 77, 20, 95, 139, 122, 218, 5, 130, 238, 206, 130, 59, 168, 16, 109, 207, 229, 192, 218, 97, 77, 234, 218, 160, 34, 173, 60, 27, 87, 14, 77, 142, 116, 122, 229, 57, 248, 124, 226, 26, 131, 218, 78, 22, 165, 89, 13, 205, 213, 210, 166, 201, 95, 223, 103, 125, 226, 118, 28, 234, 50, 21, 221, 205, 120, 79, 91, 56, 11, 240, 199, 245, 58, 107, 228, 73, 180, 196, 108, 173, 209, 152, 104, 212, 149, 209, 204, 169, 236, 150, 47, 31, 140, 120, 223, 188, 31, 212, 12, 185, 169, 59, 133, 75, 173, 217, 247, 35, 124, 167, 50, 1, 217, 186, 190, 51, 213, 49, 29, 240, 88, 76, 102, 63, 207, 63, 24, 121, 107, 118, 133, 21, 200, 84, 5, 79, 201, 194, 99, 208, 41, 11, 165, 166, 141, 244, 197, 138, 5, 189, 124, 186, 170, 79, 141, 20, 132, 170, 187, 84, 145, 51, 171, 127, 228, 221, 11, 134, 46, 79, 247, 188, 118, 9, 109, 81, 217, 180, 99, 14, 112, 60, 118, 200, 113, 103, 211, 7, 139, 114, 254, 120, 220, 143, 139, 92, 143, 178, 94, 249, 105, 98, 98, 68, 128, 8, 166, 49, 181, 101, 238, 135, 68, 146, 207, 226, 37, 37, 54, 58, 54, 109, 139, 169, 115, 204, 56, 186, 108, 52, 171, 123, 93, 161, 201, 53, 44, 244, 24, 114, 68, 129, 209, 206, 166, 69, 13, 137, 2, 153, 213, 60, 17, 140, 144, 58, 182, 204, 174, 218, 115, 181, 1, 250, 205, 119, 231, 50, 168, 210, 245, 2, 66, 75, 182, 147, 148, 57, 253, 75, 172, 116, 89, 6, 248, 212, 183, 226, 81, 177, 71, 85, 222, 29, 166, 45, 1, 203, 139, 53, 180, 251, 221, 144, 16, 254, 201, 85, 116, 253, 38, 210, 234, 37, 229, 149, 250, 161, 34, 131, 33, 87, 181, 49, 197, 230, 40, 88, 152, 147, 204, 234, 200, 133, 13, 60, 97, 236, 233, 27, 26, 65, 145, 195, 96, 211, 95, 56, 22, 4, 214, 144, 79, 229, 131, 143, 183, 240, 19, 177, 51, 192, 195, 224, 168, 55, 125, 255, 187, 17, 153, 77, 170, 25, 229, 84, 167, 183, 70, 123, 230, 232, 59, 90, 112, 213, 160, 40, 212, 98, 43, 37, 124, 196, 35, 69, 237, 10, 218, 234, 64, 39, 7, 244, 152, 191, 226, 248, 4, 165, 134, 175, 176, 238, 42, 98, 229, 222, 91, 190, 125, 148, 207, 6, 54, 51, 198, 107, 58, 61, 111, 83, 167, 186, 25, 169, 191, 162, 55, 184, 239, 19, 146, 34, 12, 143, 35, 157, 3, 139, 161, 93, 62, 179, 214, 228, 193, 230, 139, 192, 161, 100, 242, 151, 240, 213, 152, 238, 8, 237, 28, 209, 176, 92, 151, 116, 169, 165, 191, 16, 142, 11, 46, 191, 213, 5, 180, 116, 196, 119, 224, 23, 178, 146, 128, 45, 55, 176, 145, 17, 49, 236, 201, 49, 134, 31, 156, 1, 155, 66, 8, 225, 46, 194, 125, 84, 212, 131, 213, 34, 154, 50, 28, 136, 248, 147, 135, 59, 152, 44, 116, 167, 171, 68, 54, 139, 55, 215, 238, 216, 14, 198, 163, 99, 132, 72, 10, 132, 70, 11, 248, 109, 248, 92, 148, 103, 102, 89, 176, 138, 48, 152, 144, 59, 87, 24, 192, 238, 129, 145, 180, 75, 80, 13, 19, 146, 91, 143, 78, 99, 52, 170, 223, 75, 48, 48, 136, 148, 253, 94, 77, 153, 191, 45, 140, 110, 52, 122, 156, 23, 213, 99, 249, 167, 231, 18, 98, 205, 168, 114, 237, 93, 236, 22, 103, 238, 32, 215, 153, 25, 9, 212, 89, 39, 13, 152, 167, 98, 203, 116, 106, 92, 186, 76, 36, 216, 46, 32, 190, 114, 136, 80, 109, 27, 54, 16, 21, 91, 197, 32, 33, 24, 77, 241, 207, 230, 141, 103, 196, 142, 228, 48, 95, 172, 191, 34, 166, 160, 31, 208, 52, 71, 31, 131, 193, 50, 47, 115, 243, 137, 140, 150, 99, 32, 229, 153, 169, 35, 30, 66, 119, 86, 255, 32, 147, 202, 25, 159, 10, 30, 149, 254, 137, 97, 68, 63, 3, 116, 238, 213, 204, 179, 147, 3, 240, 230, 190, 159, 112, 128, 48, 23, 92, 46, 95, 25, 150, 71, 61, 239, 61, 80, 79, 186, 209, 30, 0, 246, 206, 231, 9, 55, 36, 206, 177, 195, 60, 232, 69, 43, 196, 228, 238, 172, 8, 3, 254, 22, 221, 115, 77, 8, 52, 41, 43, 118, 210, 126, 187, 144, 44, 131, 34, 184, 54, 64, 176, 89, 194, 40, 130, 227, 216, 73, 139, 30, 39, 38, 94, 148, 14, 165, 180, 110, 14, 2, 10, 46, 235, 75, 125, 114, 179, 188, 199, 239, 77, 220, 81, 118, 54, 252, 172, 87, 213, 133, 85, 170, 64, 53, 117, 205, 18, 173, 206, 157, 219, 28, 205, 27, 73, 43, 253, 147, 160, 231, 216, 16, 167, 83, 74, 2, 245, 251, 182, 249, 135, 242, 21, 21, 149, 216, 136, 113, 41, 162, 105, 212, 236, 66, 255, 85, 143, 70, 81, 181, 204, 208, 111, 84, 146, 120, 86, 48, 170, 64, 159, 94, 109, 15, 196, 137, 117, 150, 111, 31, 6, 170, 97, 200, 173, 208, 110, 41, 192, 160, 209, 95, 193, 196, 110, 135, 48, 111, 173, 219, 173, 129, 184, 100, 97, 207, 100, 30, 141, 25, 238, 142, 8, 176, 63, 188, 245, 1, 102, 235, 37, 26, 46, 1, 239, 243, 63, 91, 242, 134, 25, 251, 121, 13, 103, 225, 154, 201, 132, 150, 189, 195, 145, 189, 220, 139, 254, 247, 21, 75, 99, 199, 23, 53, 104, 56, 225, 166, 18, 93, 25, 158, 91, 240, 53, 128, 152, 60, 174, 41, 156, 18, 205, 135, 191, 109, 200, 227, 35, 3, 36, 20, 71, 80, 177, 133, 20, 196, 47, 230, 19, 100, 118, 129, 157, 206, 252, 168, 103, 73, 168, 89, 223, 29, 205, 110, 73, 47, 114, 98, 239, 184, 84, 25, 151, 48, 9, 12, 243, 162, 29, 150, 57, 247, 80, 78, 24, 33, 240, 77, 152, 165, 3, 109, 242, 1, 194, 3, 111, 13, 23, 161, 34, 223, 24, 211, 52, 244, 139, 201, 82, 249, 28, 122, 220, 255, 215, 157, 137, 99, 115, 140, 149, 111, 45, 16, 184, 229, 196, 35, 75, 254, 250, 46, 169, 130, 64, 117, 143, 133, 68, 210, 178, 127, 174, 163, 35, 191, 33, 126, 197, 60, 115, 206, 114, 28, 52, 26, 14, 7, 233, 70, 181, 79, 203, 126, 190, 121, 18, 53, 77, 229, 124, 41, 79, 148, 85, 176, 163, 28, 83, 211, 49, 227, 215, 130, 107, 175, 175, 63, 96, 47, 35, 194, 58, 14, 16, 138, 142, 9, 247, 102, 230, 83, 43, 205, 177, 131, 223, 39, 177, 132, 108, 40, 73, 94, 14, 200, 188, 3, 102, 158, 78, 55, 106, 227, 234, 91, 135, 129, 81, 32, 215, 239, 214, 88, 250, 190, 26, 31, 167, 133, 215, 188, 82, 122, 124, 1, 127, 227, 115, 41, 225, 106, 29, 27, 16, 72, 5, 253, 221, 97, 31, 195, 17, 174, 150, 32, 152, 240, 56, 38, 206, 27, 223, 80, 127, 251, 91, 54, 3, 177, 97, 122, 219, 244, 246, 131, 155, 91, 6, 249, 243, 143, 207, 166, 207, 121, 213, 151, 132, 128, 123, 69, 171, 141, 155, 174, 144, 190, 32, 103, 67, 198, 241, 45, 229, 14, 212, 38, 246, 54, 209, 213, 136, 230, 19, 8, 47, 195, 29, 46, 53, 221, 239, 195, 59, 231, 116, 194, 223, 53, 178, 94, 8, 51, 228, 85, 159, 98, 238, 218, 7, 134, 210, 134, 222, 228, 168, 247, 26, 27, 230, 222, 14, 232, 103, 204, 106, 34, 91, 10, 211, 39, 87, 168, 20, 23, 87, 46, 186, 92, 253, 170, 161, 219, 250, 69, 47, 246, 185, 39, 35, 243, 99, 134, 80, 8, 121, 80, 56, 77, 40, 218, 8, 231, 134, 28, 86, 99, 154, 121, 253, 95, 221, 240, 41, 22, 184, 108, 49, 10, 218, 172, 110, 194, 176, 218, 187, 77, 120, 128, 15, 35, 153, 42, 68, 234, 122, 21, 214, 246, 111, 241, 107, 196, 9, 56, 106, 138, 217, 219, 131, 30, 23, 66, 38, 150, 64, 244, 16, 90, 126, 58, 73, 75, 103, 228, 125, 101, 125, 90, 10, 3, 42, 132, 145, 159, 173, 90, 235, 95, 91, 72, 16, 123, 92, 241, 78, 106, 129, 94, 51, 124, 24, 126, 183, 152, 14, 155, 46, 56, 177, 166, 193, 149, 112, 112, 242, 42, 227, 103, 73, 230, 103, 8, 25, 131, 145, 26, 92, 98, 251, 66, 211, 179, 96, 60, 45, 167, 197, 60, 110, 131, 151, 19], - [46, 26, 183, 195, 4, 121, 173, 77, 253, 174, 132, 186, 239, 219, 46, 240, 73, 237, 95, 245, 145, 153, 243, 31, 201, 67, 150, 135, 68, 245, 128, 205, 181, 212, 215, 112, 116, 186, 15, 182, 90, 65, 95, 21, 128, 191, 92, 107, 191, 137, 212, 69, 64, 89, 156, 20, 54, 177, 25, 153, 96, 18, 166, 102, 129, 123, 51, 54, 195, 53, 84, 200, 92, 53, 15, 37, 29, 236, 145, 249, 138, 148, 37, 254, 186, 49, 199, 35, 217, 154, 199, 157, 7, 74, 219, 28, 57, 38, 148, 118, 108, 249, 87, 136, 241, 15, 29, 181, 155, 194, 4, 208, 249, 25, 140, 5, 172, 199, 199, 80, 227, 180, 78, 116, 17, 188, 132, 80, 182, 8, 11, 128, 92, 25, 156, 118, 55, 122, 112, 255, 183, 201, 210, 108, 189, 239, 217, 214, 113, 175, 87, 92, 139, 6, 167, 10, 180, 126, 130, 142, 212, 131, 144, 211, 250, 195, 162, 1, 187, 11, 14, 227, 177, 118, 117, 43, 194, 129, 142, 123, 115, 36, 162, 100, 144, 17, 88, 234, 81, 176, 136, 56, 226, 126, 128, 87, 116, 61, 19, 61, 167, 103, 135, 231, 163, 222, 18, 72, 178, 8, 143, 48, 57, 123, 250, 70, 233, 247, 142, 135, 152, 126, 98, 60, 80, 96, 151, 152, 210, 244, 42, 231, 127, 1, 48, 136, 219, 48, 167, 58, 245, 67, 6, 34, 162, 188, 149, 178, 0, 6, 2, 223, 18, 91, 42, 43, 64, 143, 237, 212, 174, 50, 194, 111, 21, 188, 211, 131, 177, 62, 142, 49, 120, 165, 225, 89, 67, 240, 64, 48, 101, 238, 48, 84, 202, 42, 47, 225, 193, 179, 141, 67, 47, 61, 33, 64, 198, 98, 109, 153, 97, 50, 205, 246, 56, 173, 114, 32, 233, 211, 206, 76, 170, 50, 75, 114, 115, 55, 163, 151, 240, 109, 87, 25, 125, 99, 244, 86, 27, 191, 118, 57, 24, 209, 4, 105, 21, 124, 197, 72, 189, 214, 32, 31, 44, 143, 38, 145, 224, 87, 158, 117, 85, 151, 24, 34, 50, 92, 98, 19, 49, 149, 183, 149, 227, 58, 139, 141, 9, 108, 137, 35, 139, 172, 183, 18, 6, 97, 186, 103, 238, 214, 60, 218, 35, 26, 219, 66, 6, 5, 71, 195, 113, 135, 44, 79, 51, 191, 148, 134, 190, 149, 217, 11, 203, 144, 188, 7, 130, 115, 208, 127, 159, 151, 142, 68, 148, 224, 17, 39, 247, 150, 1, 30, 137, 54, 233, 109, 209, 158, 114, 106, 140, 184, 217, 157, 228, 189, 156, 79, 250, 41, 77, 148, 68, 250, 253, 182, 213, 241, 85, 216, 148, 68, 78, 207, 149, 249, 57, 111, 114, 191, 90, 9, 18, 130, 57, 214, 106, 149, 251, 76, 100, 60, 51, 216, 57, 151, 141, 188, 239, 33, 118, 237, 16, 142, 222, 134, 186, 183, 174, 73, 213, 191, 123, 94, 35, 39, 231, 132, 50, 26, 40, 206, 233, 33, 223, 7, 183, 125, 230, 240, 146, 121, 199, 4, 244, 130, 190, 66, 20, 104, 10, 63, 153, 234, 38, 28, 16, 127, 22, 219, 10, 61, 50, 198, 79, 197, 13, 181, 126, 40, 219, 29, 210, 255, 148, 214, 197, 82, 16, 226, 242, 74, 17, 99, 224, 153, 96, 253, 105, 43, 69, 117, 103, 19, 149, 249, 75, 90, 236, 14, 32, 207, 17, 131, 69, 217, 195, 144, 124, 110, 49, 106, 1, 144, 82, 117, 86, 106, 125, 208, 167, 67, 28, 104, 94, 97, 104, 174, 101, 226, 232, 49, 44, 242, 83, 69, 56, 73, 241, 84, 16, 156, 81, 159, 213, 243, 145, 40, 210, 254, 202, 235, 92, 23, 104, 18, 255, 252, 209, 24, 155, 168, 49, 228, 160, 176, 148, 196, 142, 147, 200, 160, 34, 189, 41, 15, 228, 129, 59, 189, 245, 82, 26, 235, 140, 198, 253, 118, 2, 142, 165, 154, 2, 84, 24, 197, 31, 162, 179, 162, 53, 180, 31, 142, 86, 146, 197, 212, 226, 80, 136, 7, 18, 128, 92, 217, 72, 193, 104, 89, 230, 170, 18, 65, 114, 25, 222, 28, 133, 226, 92, 238, 59, 230, 173, 240, 122, 246, 128, 36, 145, 64, 65, 106, 224, 210, 34, 79, 83, 111, 76, 234, 119, 84, 173, 19, 165, 84, 9, 47, 215, 225, 254, 121, 231, 124, 1, 204, 23, 174, 61, 172, 165, 43, 29, 46, 32, 163, 148, 113, 189, 152, 105, 117, 31, 116, 14, 69, 96, 74, 219, 194, 208, 175, 178, 220, 247, 61, 40, 70, 192, 140, 34, 48, 231, 160, 95, 122, 69, 179, 5, 176, 161, 85, 238, 112, 10, 121, 239, 20, 36, 11, 227, 149, 240, 235, 136, 150, 118, 118, 78, 118, 86, 141, 222, 134, 159, 164, 21, 113, 151, 1, 175, 84, 8, 203, 184, 28, 89, 94, 89, 243, 170, 183, 168, 118, 74, 11, 221, 254, 140, 218, 71, 205, 133, 126, 180, 162, 241, 34, 74, 140, 76, 109, 111, 155, 169, 89, 223, 164, 46, 199, 6, 93, 17, 95, 245, 176, 115, 226, 143, 165, 25, 173, 96, 8, 109, 173, 164, 217, 221, 193, 99, 194, 74, 31, 36, 87, 15, 110, 74, 14, 92, 252, 99, 242, 153, 250, 232, 61, 168, 76, 239, 107, 177, 99, 40, 200, 236, 159, 149, 243, 254, 32, 249, 14, 105, 8, 30, 159, 127, 252, 83, 39, 110, 4, 116, 61, 155, 144, 7, 81, 49, 173, 67, 26, 195, 195, 4, 156, 168, 67, 161, 249, 109, 226, 70, 94, 206, 52, 131, 174, 105, 94, 140, 174, 244, 114, 67, 95, 218, 192, 181, 172, 195, 160, 42, 247, 239, 210, 236, 169, 231, 69, 60, 162, 235, 15, 73, 53, 135, 241, 21, 186, 43, 183, 92, 6, 31, 2, 22, 218, 142, 156, 164, 72, 230, 38, 229, 242, 109, 186, 91, 79, 240, 127, 192, 184, 83, 184, 208, 205, 239, 191, 6, 239, 54, 42, 153, 188, 119, 12, 56, 243, 157, 74, 201, 57, 184, 154, 147, 129, 130, 198, 213, 217, 130, 5, 132, 192, 135, 155, 153, 170, 150, 167, 154, 28, 117, 127, 208, 31, 70, 78, 198, 32, 107, 240, 168, 143, 244, 206, 145, 60, 215, 104, 187, 158, 187, 121, 239, 88, 2, 180, 6, 134, 130, 57, 174, 20, 211, 121, 89, 19, 104, 44, 150, 144, 90, 237, 225, 205, 116, 198, 115, 109, 24, 141, 21, 2, 37, 213, 59, 82, 241, 99, 116, 140, 248, 208, 107, 77, 168, 11, 104, 255, 235, 86, 127, 91, 56, 191, 219, 181, 235, 65, 119, 146, 222, 126, 227, 249, 231, 41, 56, 104, 24, 196, 251, 151, 190, 248, 235, 54, 92, 71, 133, 132, 140, 135, 196, 37, 109, 101, 1, 45, 195, 96, 213, 88, 59, 68, 177, 246, 196, 125, 67, 237, 105, 221, 133, 123, 120, 245, 122, 246, 211, 43, 165, 203, 166, 31, 122, 246, 165, 203, 41, 190, 214, 27, 9, 56, 158, 241, 36, 179, 80, 235, 254, 75, 32, 166, 152, 218, 163, 73, 32, 26, 21, 24, 161, 74, 164, 15, 221, 24, 56, 14, 110, 244, 37, 189, 203, 52, 46, 175, 2, 136, 57, 134, 255, 206, 173, 111, 197, 234, 70, 226, 8, 172, 175, 123, 34, 88, 188, 101, 156, 147, 173, 183, 187, 123, 30, 54, 83, 60, 109, 196, 31, 61, 75, 72, 16, 219, 99, 134, 111, 191, 94, 240, 241, 226, 81, 242, 105, 202, 154, 23, 183, 254, 64, 0, 228, 93, 60, 152, 72, 62, 3, 56, 101, 235, 63, 28, 185, 255, 198, 80, 48, 199, 165, 137, 14, 183, 1, 73, 113, 15, 203, 59, 204, 168, 227, 218, 243, 114, 7, 212, 5, 181, 108, 187, 210, 116, 181, 217, 9, 197, 151, 98, 63, 197, 1, 84, 138, 67, 82, 154, 151, 43, 198, 81, 151, 100, 231, 207, 145, 242, 215, 40, 131, 36, 118, 236, 131, 79, 226, 183, 191, 148, 249, 82, 225, 228, 157, 231, 22, 63, 37, 156, 128, 24, 115, 236, 17, 247, 66, 226, 114, 241, 103, 229, 221, 188, 190, 168, 81, 38, 68, 47, 62, 29, 69, 211, 181, 45, 247, 141, 189, 122, 215, 17, 162, 56, 121, 242, 81, 13, 50, 230, 109, 123, 36, 54, 251, 3, 217, 154, 201, 48, 149, 137, 203, 220, 70, 96, 144, 215, 67, 145, 59, 127, 22, 106, 128, 129, 221, 16, 6, 24, 83, 149, 224, 150, 236, 17, 251, 217, 69, 137, 230, 34, 211, 234, 206, 119, 151, 207, 191, 58, 85, 38, 74, 28, 15, 196, 241, 179, 82, 124, 24, 99, 188, 200, 123, 82, 78, 40, 22, 126, 244, 227, 183, 255, 226, 181, 217, 58, 31, 186, 140, 53, 40, 53, 161, 71, 191, 117, 138, 1, 237, 105, 184, 211, 230, 232, 169, 152, 199, 23, 231, 241, 134, 83, 56, 11, 0, 70, 13, 161, 192, 112, 225, 91, 230, 174, 14, 60, 62, 39, 15, 51, 87, 76, 95, 189, 135, 25, 79, 123, 170, 17, 113, 154, 16, 210, 31, 233, 21, 18, 41, 159, 23, 17, 186, 156, 89, 151, 222, 148, 96, 26, 199, 234, 123, 16, 156, 206, 166, 43, 44, 152, 218, 60, 236, 46, 121, 39, 73, 25, 153, 21, 51, 237, 66, 128, 68, 104, 8, 197, 246, 66, 58, 104, 50, 142, 86, 107, 67, 26, 54, 97, 23, 62, 201, 111, 112, 198, 8, 1, 25, 40, 158, 167, 153, 135, 197, 52, 213, 189, 195, 154, 49, 75, 3, 147, 58, 28, 44, 159, 171, 193, 69, 23, 13, 8, 85, 177, 163, 41, 213, 230, 48, 146, 22, 242, 160, 122, 244, 86, 152, 237, 91, 34, 36, 76, 134, 210, 123, 133, 166, 27, 1, 107, 5, 102, 192, 18, 54, 163, 150, 166, 200, 178, 244, 247, 223, 27, 248, 121, 75, 214, 29, 11, 102, 93, 20, 146, 125, 105, 31, 75, 235, 37, 125, 178, 157, 250, 21, 20, 52, 206, 14, 100, 168, 8, 121, 209, 237, 20, 63, 104, 89, 33, 25, 179, 176, 174, 43, 84, 77, 28, 146, 84, 108, 139, 197, 107, 132, 65, 32, 87, 128, 189, 83, 201, 110, 169, 172, 101, 156, 122, 9, 160, 178, 192, 146, 159, 17, 147, 233, 100, 195, 103, 207, 187, 12, 180, 68, 93, 42, 0, 182, 212, 46, 240, 202, 159, 134, 216, 54, 167, 55, 125, 19, 194, 149, 255, 60, 90, 9, 4, 195, 87, 204, 150, 247, 129, 169, 70, 82, 91, 102, 247, 153, 103, 22, 180, 220, 32, 128, 242, 123, 103, 233, 42, 64, 120, 169, 104, 142, 156, 118, 109, 241, 31, 221, 176, 185, 187, 107, 55, 38, 145, 233, 34, 234, 177, 208, 135, 235, 152, 68, 253, 170, 202, 138, 148, 114, 98, 240, 67, 131, 172, 135, 83, 174, 28, 233, 122, 147, 255, 221, 68, 243, 209, 216, 67, 90, 228, 56, 53, 208, 70, 137, 224, 194, 124, 88, 36, 208, 99, 80, 213, 210, 185, 25, 218, 115, 36, 88, 24, 227, 241, 200, 192, 89, 51, 232, 214, 112, 163, 223, 50, 18, 238, 204, 91, 12, 177, 197, 149, 223, 45, 151, 191, 148, 20, 12, 98, 156, 109, 17, 69, 73, 59, 2, 99, 53, 69, 39, 201, 93, 207, 33, 141, 247, 239, 147, 240, 43, 13, 62, 4, 227, 76, 210, 235, 50, 197, 16, 0, 238, 143, 205, 135, 113, 97, 182, 111, 36, 159, 168, 201, 30, 225, 103, 55, 252, 54, 78, 194, 42, 60, 18, 159, 160, 124, 107, 248, 35, 163, 201, 193, 248, 94, 39, 0, 253, 65, 248, 67, 191, 56, 200, 46, 32, 21, 5, 127, 142, 213, 149, 112, 233, 191, 141, 42, 59, 38, 109, 166, 237, 182, 200, 9, 107, 12, 218, 38, 2, 48, 185, 16, 186, 152, 80, 38, 82, 122, 0, 91, 178, 246, 61, 158, 221, 50, 130, 197, 89, 38, 70, 165, 133, 53, 175, 86, 240, 231, 190, 118, 12, 172, 57, 156, 13, 227, 223, 200, 152, 97, 89, 35, 135, 69, 10, 127, 215, 97, 61, 65, 30, 195, 72, 62, 235, 254, 18, 246, 210, 136, 220, 39, 44, 128, 43, 165, 231, 235, 36, 119, 234, 165, 0, 125, 53, 164, 150, 68, 166, 97, 107, 7, 115, 237, 144, 121, 236, 237, 145, 100, 84, 118, 176, 245, 250, 66, 135, 212, 58, 245, 4, 217, 61, 5, 168, 113, 70, 111, 88, 239, 86, 206, 37, 251, 88, 155, 169, 229, 85, 197, 199, 130, 172, 228, 210, 19, 183, 159, 129, 86, 194, 138, 145, 202, 180, 164, 109, 196, 244, 198, 34, 199, 220, 27, 100, 63, 50, 243, 56, 117, 88, 99, 218, 69, 126, 26, 21, 227, 184, 186, 79, 161, 211, 159, 231, 220, 22, 126, 3, 218, 9, 130, 208, 128, 168, 240, 76, 252, 122, 25, 183, 104, 251, 210, 213, 246, 132, 11, 41, 25, 101, 164, 49, 173, 144, 30, 180, 136, 75, 71, 128, 193, 252, 222, 236, 238, 22, 60, 189, 33, 130, 140, 75, 138, 82, 252, 14, 156, 63, 77, 236, 182, 102, 231, 173, 118, 89, 197, 115, 171, 208, 38, 211, 4, 75, 26, 248, 212, 118, 178, 124, 9, 18, 59, 149, 254, 175, 90, 249, 249, 178, 16, 161, 127, 254, 166, 200, 111, 15, 191, 231, 56, 197, 100, 34, 71, 214, 57, 139, 70, 248, 16, 51, 54, 109, 252, 2, 92, 118, 159, 248, 124, 237, 152, 210, 73, 131, 90, 9, 247, 236, 191, 31, 96, 130, 36, 186, 189, 77, 98, 177, 204, 92, 140, 49, 35, 76, 117, 2, 146, 171, 81, 108, 217, 237, 85, 185, 213, 176, 208, 133, 82, 187, 23, 5, 159, 2, 255, 128, 21, 142, 4, 250, 244, 247, 78, 245, 54, 47, 114, 164, 132, 222, 117, 70, 93, 103, 51, 239, 47, 65, 17, 183, 89, 44, 91, 142, 39, 39, 53, 37, 70, 226, 82, 161, 3, 182, 219, 110, 152, 107, 255, 170, 69, 171, 235, 147, 179, 71, 194, 233, 185, 28, 10, 5, 170, 126, 146, 23, 203, 44, 225, 227, 25, 191, 123, 60, 208, 226, 66, 236, 77, 161, 174, 12, 221, 230, 178, 133, 242, 169, 31, 241, 40, 7, 136, 234, 239, 203, 18, 252, 164, 180, 122, 14, 152, 120, 242, 190, 5, 100, 95, 185, 47, 6, 234, 220, 137, 225, 36, 227, 117, 205, 4, 253, 30, 247, 244, 68, 1, 127, 26, 179, 254, 116, 81, 83, 57, 135, 197, 180, 229, 34, 64, 45, 48, 7, 136, 79, 121, 4, 141, 165, 88, 172, 68, 42, 82, 21, 102, 23, 238, 96, 147, 108, 39, 25, 77, 153, 217, 1, 7, 76, 234, 217, 1, 164, 141, 45, 168, 54, 225, 35, 142, 210, 224, 136, 32, 211, 90, 192, 166, 208, 203, 81, 85, 2, 73, 215, 115, 233, 17, 54, 11, 21, 154, 137, 119, 156, 105, 155, 53, 232, 250, 18, 252, 32, 196, 167, 59, 175, 236, 220, 164, 223, 208, 156, 6, 141, 231, 179, 156, 92, 220, 108, 94, 66, 22, 41, 99, 224, 196, 96, 119, 219, 81, 242, 245, 212, 10, 26, 34, 36, 165, 212, 13, 225, 164, 21, 111, 244, 11, 4, 86, 182, 69, 96, 10, 192, 51, 112, 221, 190, 61, 103, 44, 218, 45, 78, 101, 207, 205, 250, 134, 49, 108, 95, 46, 253, 136, 12, 209, 51, 188, 79, 139, 194, 146, 168, 106, 57, 197, 126, 110, 150, 142, 98, 146, 227, 127, 192, 16, 18, 48, 138, 92, 226, 205, 252, 118, 224, 234, 200, 255, 5, 66, 48, 135, 225, 199, 121, 174, 105, 96, 138, 99, 144, 75, 139, 4, 209, 192, 215, 36, 31, 58, 147, 123, 236, 108, 66, 186, 219, 21, 235, 186, 43, 28, 58, 220, 147, 35, 40, 193, 79, 47, 97, 113, 171, 153, 128, 169, 80, 72, 164, 150, 84, 142, 142, 182, 50, 64, 86, 187, 134, 148, 59, 160, 209, 30, 181, 112, 223, 45, 250, 228, 88, 132, 159, 250, 160, 148, 220, 110, 232, 10, 178, 54, 66, 247, 8, 122, 213, 126, 19, 31, 199, 226, 248, 130, 216, 176, 84, 195, 142, 15, 130, 81, 27, 156, 89, 101, 185, 67, 18, 6, 162, 16, 153, 76, 120, 182, 180, 29, 7, 80, 5, 121, 142, 22, 187, 31, 164, 144, 161, 124, 65, 149, 251, 43, 87, 105, 114, 244, 161, 140, 96, 193, 192, 124, 42, 192, 50, 37, 118, 40, 99, 109, 208, 215, 119, 254, 103, 210, 245, 33, 179, 135, 233, 77, 21, 153, 227, 246, 97, 15, 102, 141, 53, 101, 97, 47, 229, 25, 84, 189, 79, 118, 3, 49, 31, 135, 242, 67, 210, 250, 243, 220, 235, 243, 141, 21, 71, 204, 169, 102, 66, 8, 224, 94, 68, 242, 191, 76, 164, 36, 231, 90, 71, 114, 166, 184, 188, 255, 236, 255, 15, 70, 28, 24, 82, 103, 147, 185, 79, 121, 51, 50, 82, 150, 121, 198, 115, 162, 141, 57, 90, 113, 52, 171, 231, 189, 155, 98, 179, 36, 27, 81, 103, 218, 253, 136, 164, 43, 129, 237, 0, 167, 154, 181, 8, 131, 28, 146, 17, 246, 204, 211, 3, 243, 240, 133, 87, 27, 128, 226, 210, 28, 69, 129, 83, 89, 87, 40, 163, 251, 120, 23, 240, 225, 166, 137, 141, 171, 221, 167, 2, 1, 185, 120, 175, 42, 215, 62, 20, 255, 99, 232, 30, 206, 138, 164, 211, 23, 127, 110, 64, 229, 238, 255, 5, 61, 239, 164, 9, 46, 235, 222, 62, 184, 72, 81, 249, 97, 46, 114, 23, 81, 78, 143, 110, 2, 86, 20, 76, 82, 116, 114, 38, 17, 152, 14, 134, 253, 81, 121, 185, 96, 163, 36, 109, 43, 243, 175, 179, 208, 93, 247, 224, 162, 154, 6, 43, 205, 227, 214, 95, 52, 182, 126, 46, 133, 97, 120, 203, 117, 57, 95, 4, 32, 89, 99, 0, 9, 205, 116, 15, 161, 116, 139, 25, 179, 127, 156, 155, 119, 243, 201, 96, 12, 109, 17, 83, 40, 26, 58, 244, 74, 161, 143, 111, 137, 138, 46, 204, 75, 83, 78, 91, 248, 205, 103, 186, 71, 129, 168, 212, 12, 247, 101, 129, 129, 211, 96, 233, 205, 170, 113, 141, 148, 47, 190, 242, 43, 167, 138, 139, 217, 121, 18, 193, 38, 234, 3, 162, 227, 227, 158, 167, 84, 5, 107, 109, 241, 102, 0, 137, 193, 243, 126, 102, 98, 221, 254, 180, 140, 32, 41, 93, 60, 197, 208, 165, 59, 148, 8, 92, 232, 48, 80, 135, 173, 128, 55, 219, 92, 230, 72, 117, 34, 248, 56, 193, 170, 191, 188, 245, 175, 77, 6, 128, 226, 50, 30, 0, 27, 175, 100, 90, 149, 126, 124, 9, 188, 84, 40, 185, 88, 221, 165, 4, 175, 107, 252, 144, 223, 95, 233, 81, 204, 229, 144, 88, 196, 187, 97, 34, 214, 237, 140, 77, 140, 234, 119, 216, 218, 76, 135, 210, 179, 183, 141, 165, 53, 180, 54, 237, 114, 216, 209, 28, 64, 58, 181, 227, 56, 6, 60, 75, 4, 118, 46, 41, 201, 56, 36, 91, 130, 91, 11, 31, 0, 157, 250, 204, 162, 14, 221, 92, 248, 141, 186, 23, 116, 111, 129, 12, 164, 175, 101, 108, 204, 213, 5, 87, 153, 9, 25, 152, 149, 109, 238, 176, 178, 38, 154, 162, 4, 4, 107, 166, 225, 90, 90, 208, 230, 127, 1, 132, 116, 169, 62, 83, 126, 51, 23, 54, 202, 21, 230, 250, 43, 152, 159, 88, 58, 103, 91, 5, 248, 67, 1, 113, 61, 9, 40, 156, 185, 217, 198, 19, 66, 139, 131, 110, 139, 61, 101, 236, 94, 218, 7, 93, 242, 169, 42, 171, 173, 26, 201, 57, 220, 73, 78, 90, 152, 32, 147, 12, 51, 140, 121, 46, 123, 73, 53, 139, 6, 47, 83, 152, 195, 120, 245, 226, 58, 38, 62, 40, 87, 66, 246, 127, 99, 25, 31, 28, 217, 108, 42, 141, 157, 191, 80, 119, 107, 243, 231, 207, 247, 19, 104, 250, 43, 105, 118, 104, 211, 220, 64, 52, 209, 78, 196, 216, 251, 252, 107, 252, 39, 46, 184, 43, 254, 239, 134, 146, 38, 17, 224, 209, 222, 246, 139, 2, 6, 198, 192, 7, 95, 124, 0, 146, 106, 13, 213, 118, 209, 102, 225, 7, 131, 6, 58, 174, 13, 171, 244, 107, 138, 29, 67, 197, 251, 18, 143, 196, 171, 124, 30, 145, 179, 227, 64, 133, 59, 88, 217, 223, 97, 68, 132, 253, 207, 251, 155, 190, 61, 180, 25, 162, 156, 109, 165, 0, 236, 71, 15, 120, 162, 25, 159, 34, 192, 128, 153, 229, 253, 90, 122, 205, 170, 231, 188, 128, 37, 162, 249, 187, 195, 113, 159, 220, 5, 155, 91, 109, 200, 208, 191, 53, 216, 89, 20, 197, 237, 96, 38, 139, 211, 204, 5, 75, 24, 86, 183, 30, 212, 243, 123, 225, 187, 244, 204, 135, 152, 32, 255, 64, 169, 181, 158, 199, 249, 57, 140, 105, 196, 10, 12, 109, 122, 3, 20, 86, 25, 191, 68, 20, 50, 255, 237, 224, 165, 68, 191, 42, 45, 77, 159, 175, 104, 25, 15, 102, 200, 91, 5, 18, 75, 34, 14, 247, 63, 201, 204, 144, 15, 233, 151, 123, 142, 64, 4, 26, 4, 222, 88, 121, 131, 105, 250, 49, 151, 21, 54, 146, 79, 53, 244, 177, 166, 201, 92, 19, 228, 30, 200, 181, 154, 157, 28, 234, 130, 106, 167, 57, 234, 241, 69, 140, 204, 100, 83, 244, 34, 58, 66, 153, 95, 40, 194, 71, 103, 36, 75, 128, 106, 199, 149, 92, 58, 252, 165, 154, 124, 141, 173, 61, 223, 103, 111, 135, 31, 250, 36, 132, 214, 3, 32, 30, 34, 52, 168, 172, 243, 223, 238, 143, 220, 53, 98, 23, 74, 210, 40, 55, 160, 122, 221, 134, 44, 181, 185, 120, 77, 55, 241, 149, 136, 4, 189, 123, 239, 38, 8, 244, 247, 204, 249, 183, 250, 165, 222, 77, 207, 182, 219, 184, 144, 52, 250, 50, 184, 42, 13, 205, 131, 13, 121, 67, 207, 14, 160, 244, 157, 199, 204, 179, 17, 31, 6, 126, 140, 25, 101, 57, 113, 206, 254, 16, 187, 187, 3, 170, 214, 15, 192, 29, 152, 17, 27, 113, 143, 14, 144, 13, 91, 62, 227, 188, 251, 126, 187, 248, 92, 78, 73, 182, 116, 102, 98, 21, 190, 42, 223, 99, 26, 112, 71, 106, 223, 48, 5, 239, 171, 106, 86, 149, 222, 146, 26, 154, 37, 158, 34, 253, 113, 205, 21, 253, 1, 118, 222, 199, 123, 198, 147, 149, 250, 35, 143, 22, 164, 190, 85, 41, 133, 72, 124, 197, 40, 9, 248, 78, 28, 237, 168, 106, 180, 110, 97, 30, 171, 175, 65, 0, 81, 239, 236, 76, 181, 228, 207, 110, 156, 127, 186, 222, 107, 19, 42, 101, 183, 227, 204, 192, 160, 97, 37, 93, 131, 107, 128, 229, 95, 215, 244, 145, 92, 182, 183, 226, 77, 116, 26, 202, 21, 171, 114, 79, 111, 178, 13, 174, 198, 27, 18, 65, 239, 46, 1, 203, 61, 110, 167, 90, 190, 202, 200, 247, 78, 204, 244, 68, 188, 69, 134, 244, 232, 80, 168, 69, 122, 187, 107, 176, 159, 111, 138, 212, 213, 172, 168, 210, 84, 223, 71, 190, 45, 242, 97, 133, 147, 43, 216, 30, 15, 64, 156, 192, 34, 110, 201, 232, 67, 33, 247, 162, 236, 128, 137, 131, 195, 6, 217, 19, 210, 163, 126, 157, 216, 77, 85, 165, 199, 53, 8, 211, 176, 254, 148, 194, 188, 159, 189, 211, 52, 136, 130, 7, 42, 41, 239, 64, 253, 49, 137, 84, 241, 221, 95, 56, 237, 129, 31, 122, 140, 42, 104, 105, 60, 28, 201, 181, 156, 33, 116, 40, 203, 92, 74, 116, 24, 81, 206, 229, 84, 114, 112, 48, 131, 141, 193, 232, 233, 144, 16, 34, 62, 85, 252, 27, 170, 2, 61, 253, 253, 245, 146, 35, 172, 229, 160, 177, 242, 26, 174, 148, 194, 146, 18, 21, 203, 146, 189, 36, 104, 201, 79, 127, 182, 230, 222, 122, 186, 179, 52, 200, 103, 113, 47, 248, 157, 51, 255, 143, 81, 85, 128, 85, 127, 99, 232, 92, 26, 167, 28, 119, 197, 194, 158, 46, 79, 17, 170, 112, 119, 162, 168, 110, 158, 92, 143, 246, 68, 57, 44, 89, 28, 71, 156, 224, 254, 218, 133, 47, 171, 15, 114, 17, 131, 229, 71, 143, 118, 179, 201, 140, 166, 88, 181, 200, 166, 150, 193, 72, 171, 17, 246, 143, 136, 118, 245, 148, 179, 213, 76, 138, 180, 46, 58, 126, 99, 24, 29, 98, 49, 30, 98, 243, 236, 168, 21, 184, 122, 75, 222, 43, 200, 24, 245, 154, 185, 112, 147, 54, 197, 239, 225, 179, 101, 105, 207, 251, 185, 213, 208, 20, 182, 193, 195, 192, 40, 95, 148, 8, 61, 184, 190, 104, 16, 179, 133, 156, 114, 148, 170, 129, 108, 188, 59, 128, 93, 232, 14, 94, 31, 151, 141, 147, 32, 80, 252, 75, 102, 166, 253, 127, 20, 72, 83, 51, 0, 89, 224, 78, 163, 166, 214, 0, 23, 23, 194, 57, 13, 7, 250, 240, 192, 202, 140, 54, 72, 162, 218, 235, 155, 189, 49, 92, 199, 194, 144, 107, 203, 158, 109, 185, 198, 240, 58, 159, 12, 81, 207, 119, 184, 114, 49, 124, 0, 33, 93, 22, 41, 131, 162, 89, 25, 123, 45, 134, 186, 189, 243, 169, 18, 113, 216, 51, 174, 216, 210, 21, 148, 33, 181, 130, 78, 40, 205, 169, 251, 31, 151, 78, 60, 247, 212, 167, 97, 186, 246, 157, 201, 208, 66, 246, 219, 139, 240, 166, 7, 80, 16, 205, 153, 38, 155, 167, 251, 150, 171, 186, 63, 120, 17, 215, 59, 5, 210, 230, 5, 59, 169, 118, 81, 93, 104, 18, 68, 11, 188, 189, 135, 187, 71, 138, 228, 160, 79, 82, 205, 95, 66, 7, 157, 84, 31, 45, 152, 182, 111, 146, 57, 245, 34, 114, 141, 247, 83, 49, 25, 233, 5, 34, 63, 22, 26, 182, 49, 207, 147, 79, 169, 59, 0, 112, 93, 9, 194, 52, 81, 122, 53, 145, 48, 245, 238, 54, 143, 98, 202, 129, 166, 14, 158, 151, 111, 140, 104, 201, 223, 60, 18, 164, 230, 189, 122, 69, 193, 34, 145, 213, 76, 222, 117, 145, 21, 156, 3, 157, 165, 120, 59, 187, 65, 51, 54, 189, 239, 229, 115, 67, 143, 194, 139, 196, 129, 159, 67, 232, 83, 158, 212, 7, 137, 182, 181, 156, 232, 201, 168, 50, 173, 189, 80, 215, 1, 2, 132, 83, 210, 1, 111, 167, 242, 188, 27, 35, 183, 14, 166, 60, 5, 175, 46, 156, 77, 69, 208, 131, 109, 205, 98, 215, 253, 108, 212, 156, 37, 59, 128, 147, 48, 112, 200, 145, 47, 50, 60, 99, 70, 181, 90, 211, 50, 137, 57, 90, 204, 206, 228, 227, 140, 121, 15, 237, 212, 204, 20, 202, 148, 184, 59, 205, 64, 238, 213, 167, 168, 0, 144, 71, 158, 251, 81, 119, 70, 97, 107, 204, 235, 232, 54, 63, 241, 54, 49, 174, 143, 81, 65, 133, 174, 199, 101, 76, 52, 105, 48, 250, 175, 135, 84, 147, 17, 229, 203, 231, 204, 144, 122, 108, 167, 218, 122, 252, 32, 185, 228, 118, 101, 233, 41, 196, 154, 16, 158, 87, 150, 176, 107, 80, 6, 67, 67, 199, 38, 57, 102, 243, 142, 113, 233, 169, 232, 156, 147, 110, 136, 177, 128, 65, 60, 136, 209, 114, 117, 127, 202, 56, 207, 142, 43, 84, 52, 247, 159, 187, 220, 143, 20, 87, 86, 27, 185, 88, 197, 86, 13, 28, 102, 152, 193, 182, 122, 85, 30, 121, 224, 196, 221, 145, 45, 23, 1, 142, 109, 131, 176, 88, 149, 38, 204, 81, 177, 31, 100, 223, 232, 207, 88, 32, 39, 61, 171, 55, 30, 78, 34, 72, 189, 235, 14, 251, 45, 85, 195, 109, 35, 68, 82, 49, 207, 59, 29, 122, 124, 45, 70, 210, 139, 208, 139, 211, 207, 161, 200, 134, 81, 48, 150, 201, 143, 12, 182, 176, 252, 31, 147, 243, 125, 109, 144, 212, 73, 49, 94, 176, 87, 91, 73, 22, 172, 202, 118, 81, 110, 167, 237, 207, 128, 74, 149, 61, 11, 98, 73, 123, 226, 99, 63, 180, 109, 11, 99, 114, 193, 86, 95, 241, 245, 24, 206, 158, 81, 114, 95, 126, 93, 164, 15, 200, 150, 148, 209, 94, 0, 250, 2, 154, 240, 191, 50, 191, 99, 141, 51, 61, 155, 32, 204, 92, 130, 6, 179, 89, 29, 0, 100, 176, 44, 70, 203, 167, 33, 69, 217, 36, 69, 72, 64, 133, 135, 40, 73, 33, 102, 13, 102, 164, 22, 39, 200, 84, 177, 0, 66, 158, 253, 48, 201, 232, 181, 240, 204, 246, 71, 40, 235, 93, 74, 67, 174, 5, 57, 204, 171, 229, 80, 94, 164, 187, 95, 189, 160, 110, 238, 14, 225, 221, 13, 40, 126, 230, 120, 95, 238, 153, 112, 170, 1, 124, 160, 218, 191, 139, 29, 136, 41, 253, 231, 27, 134, 59, 190, 75, 254, 165, 76, 176, 200, 47, 154, 137, 252, 91, 198, 17, 137, 41, 125, 251, 27, 21, 155, 61, 172, 66, 172, 51, 12, 201, 56, 122, 206, 5, 147, 242, 60, 187, 253, 232, 95, 216, 97, 190, 224, 211, 189, 59, 19, 31, 199, 28, 107, 193, 73, 226, 20, 36, 250, 194, 111, 89, 176, 108, 120, 72, 44, 5, 35, 234, 224, 144, 219, 161, 124, 124, 108, 62, 115, 117, 120, 130, 2, 233, 77, 183, 220, 22, 65, 179, 161, 99, 162, 16, 111, 6, 138, 66, 56, 20, 119, 107, 197, 215, 220, 125, 74, 98, 100, 246, 78, 69, 65, 140, 44, 255, 57, 144, 153, 224, 52, 218, 234, 234, 92, 42, 190, 105, 191, 124, 90, 191, 28, 65, 138, 58, 107, 240, 214, 159, 202, 183, 187, 210, 176, 108, 51, 127, 132, 53, 23, 107, 85, 15, 82, 225, 241, 214, 16, 177, 133, 129, 47, 166, 5, 217, 80, 204, 208, 58, 56, 185, 103, 178, 120, 117, 106, 69, 125, 164, 54, 246, 30, 194, 101, 24, 73, 91, 98, 136, 136, 78, 0, 54, 151, 192, 7, 253, 40, 230, 1, 117, 227, 191, 69, 203, 112, 27, 198, 176, 201, 157, 194, 26, 199, 84, 180, 81, 231, 92, 118, 190, 174, 45, 165, 96, 207, 235, 212, 201, 166, 161, 47, 130, 205, 156, 160, 58, 215, 227, 40, 138, 3, 161, 21, 189, 63, 7, 0, 191, 246, 176, 174, 24, 152, 190, 66, 170, 206, 44, 106, 7, 118, 8, 48, 186, 96, 161, 30, 236, 236, 97, 50, 151, 5, 99, 111, 120, 162, 74, 20, 217, 245, 204, 236, 162, 77, 15, 221, 181, 237, 235, 143, 14, 29, 146, 46, 28, 63, 146, 211, 241, 132, 156, 254, 132, 121, 240, 77, 240, 34, 45, 63, 59, 237, 223, 189, 106, 74, 80, 197, 32, 178, 151, 199, 127, 41, 17, 14, 190, 51, 32, 244, 47, 112, 252, 156, 170, 215, 0, 249, 15, 153, 29, 92, 24, 231, 111, 78, 1, 236, 107, 254, 203, 204, 197, 48, 117, 255, 132, 175, 43, 80, 211, 181, 251, 248, 202, 59, 35, 42, 251, 205, 68, 72, 176, 204, 224, 93, 154, 39, 47, 208, 127, 118, 245, 234, 113, 24, 123, 160, 133, 25, 69, 97, 96, 212, 59, 234, 191, 223, 233, 110, 127, 108, 21, 138, 52, 142, 185, 189, 200, 71, 123, 15, 188, 13, 198, 58, 157, 131, 239, 166, 246, 70, 99, 146, 247, 182, 113, 231, 66, 199, 180, 159, 134, 81, 163, 129, 232, 55, 56, 8, 206, 6, 70, 191, 227, 212, 49, 210, 174, 167, 17, 24, 73, 192, 57, 152, 43, 88, 82, 119, 228, 16, 8, 146, 107, 239, 10, 29, 241, 76, 66, 229, 180, 207, 224, 180, 35, 88, 191, 95, 118, 237, 122, 7, 138, 27, 184, 80, 205, 107, 114, 200, 170, 129, 50, 14, 99, 71, 15, 207, 206, 130, 236, 27, 125, 56, 6, 59, 76, 197, 138, 93, 198, 17, 166, 219, 144, 16, 94, 124, 180, 27, 60, 169, 104, 180, 198, 173, 202, 194, 88, 149, 157, 70, 41, 51, 203, 175, 106, 158, 152, 65, 141, 202, 65, 99, 225, 15, 124, 117, 20, 3, 135, 33, 54, 57, 195, 17, 197, 96, 225, 86, 156, 98, 10, 71, 18, 210, 113, 246, 172, 82, 133, 95, 221, 95, 231, 172, 18, 181, 202, 241, 48, 191, 122, 19, 231, 168, 183, 177, 241, 152, 215, 3, 184, 221, 95, 190, 219, 97, 88, 170, 112, 160, 193, 195, 221, 197, 184, 130, 25, 145, 188, 177, 141, 158, 27, 111, 41, 220, 1, 175, 74, 236, 219, 129, 125, 75, 13, 225, 130, 250, 66, 122, 251, 17, 60, 33, 150, 25, 59, 189, 230, 174, 97, 107, 35, 68, 188, 143, 222, 51, 152, 240, 100, 47, 136, 130, 148, 190, 242, 252, 108, 109, 63, 229, 170, 150, 114, 103, 112, 16, 219, 46, 32, 82, 223, 177, 144, 103, 110, 24, 94, 128, 122, 232, 55, 35, 90, 48, 162, 193, 101, 22, 36, 203, 32, 93, 8, 236, 156, 209, 162, 163, 88, 56, 153, 222, 222, 241, 214, 19, 226, 164, 128, 184, 46, 31, 226, 176, 246, 137, 102, 142, 3, 80, 9, 5, 63, 7, 98, 66, 219, 41, 103, 230, 243, 89, 164, 198, 195, 46, 122, 41, 68, 197, 11, 166, 241, 127, 199, 87, 12, 101, 119, 192, 226, 170, 130, 191, 101, 215, 68, 40, 213, 22, 211, 247, 142, 170, 171, 64, 192, 49, 14, 104, 87, 198, 48, 7, 108, 126, 168, 114, 189, 86, 73, 108, 67, 197, 65, 29, 56, 136, 194, 217, 76, 62, 17, 229, 128, 200, 150, 59, 46, 94, 77, 246, 222, 145, 172, 24, 21, 242, 118, 248, 73, 249, 66, 209, 34, 33, 41, 157, 186, 208, 64, 22, 5, 30, 82, 97, 123, 226, 56, 139, 213, 179, 8, 235, 238, 144, 128, 59, 29, 214, 239, 132, 161, 227, 52, 255, 245, 47, 112, 48, 135, 111, 172, 160, 15, 120, 96, 228, 195, 158, 195, 77, 106, 54, 86, 202, 215, 98, 232, 127, 59, 10, 159, 6, 59, 134, 249, 144, 35, 158, 209, 204, 102, 235, 250, 242, 169, 138, 238, 49, 200, 177, 93, 48, 237, 178, 203, 145, 235, 10, 188, 216, 91, 221, 232, 41, 143, 14, 185, 234, 84, 196, 39, 173, 91, 41, 102, 90, 0, 15, 39, 68, 233, 93, 152, 66, 90, 216, 30, 35, 90, 159, 251, 172, 56, 174, 203, 94, 1, 21, 207, 98, 4, 97, 86, 124, 62, 100, 42, 206, 239, 197, 165, 1, 16, 175, 153, 180, 223, 53, 97, 13, 51, 92, 200, 37, 181, 22, 144, 195, 249, 216, 149, 214, 168, 126, 212, 247, 249, 5, 235, 79, 41, 69, 130, 162, 189, 121, 210, 6, 49, 217, 144, 236, 125, 30, 35, 181, 15, 249, 134, 79, 217, 79, 212, 230, 153, 181, 147, 183, 213, 31, 47, 82, 38, 99, 160, 120, 78, 56, 165, 45, 30, 224, 189, 117, 215, 102, 9, 222, 4, 217, 31, 198, 214, 200, 130, 229, 52, 182, 207, 239, 176, 99, 184, 25, 222, 70, 107, 27, 175, 2, 86, 61, 76, 248, 213, 183, 182, 177, 110, 255, 117, 224, 61, 165, 60, 235, 60, 81, 130, 8, 36, 162, 124, 195, 128, 110, 244, 222, 192, 87, 241, 130, 33, 64, 88, 14, 197, 14, 139, 200, 255, 218, 151, 25, 102, 31, 146, 190, 137, 76, 229, 74, 118, 120, 225, 241, 50, 49, 153, 253, 189, 174, 236, 1, 182, 170, 181, 232, 247, 214, 25, 154, 44, 238, 83, 86, 28, 245, 161, 220, 185, 206, 219, 198, 8, 36, 10, 3, 170, 198, 87, 53, 217, 146, 19, 207, 232, 144, 167, 77, 211, 223, 178, 56, 17, 226, 242, 196, 230, 57, 5, 113, 182, 208, 13, 49, 205, 126, 233, 120, 174, 107, 95, 170, 185, 174, 232, 228, 118, 52, 0, 246, 156, 94, 80, 145, 71, 87, 248, 126, 129, 92, 197, 83, 127, 196, 235, 146, 5, 32, 141, 63, 165, 141, 38, 244, 190, 26, 254, 183, 229, 75, 0, 115, 209, 200, 56, 54, 25, 22, 23, 140, 212, 45, 100, 83, 208, 224, 70, 132, 213, 238, 159, 0, 208, 239, 127, 230, 220, 77, 112, 203, 142, 114, 181, 23, 70, 232, 139, 164, 59, 214, 116, 242, 179, 198, 6, 221, 40, 95, 229, 71, 189, 25, 205, 199, 23, 95, 160, 48, 255, 113, 9, 234, 43, 14, 206, 134, 95, 193, 101, 8, 170, 176, 252, 112, 2, 40, 147, 185, 170, 195, 114, 108, 76, 153, 160, 232, 60, 178, 1, 195, 158, 216, 128, 198, 181, 238, 95, 74, 36, 173, 65, 250, 198, 126, 171, 225, 191, 139, 169, 137, 141, 248, 252, 162, 111, 142, 239, 214, 126, 143, 162, 225, 41, 255, 13, 134, 88, 218, 61, 39, 143, 26, 90, 240, 53, 250, 98, 206, 172, 21, 97, 43, 156, 125, 199, 98, 198, 171, 206, 9, 111, 234, 149, 95, 108, 13, 88, 69, 216, 244, 149, 82, 250, 226, 170, 199, 11, 128, 253, 110, 65, 195, 194, 218, 81, 69, 163, 119, 220, 208, 4, 8, 21, 61, 36, 114, 78, 145, 238, 208, 132, 7, 49, 203, 217, 89, 17, 58, 72, 41, 198, 114, 46, 225, 122, 82, 12, 153, 239, 49, 126, 46, 57, 108, 95, 166, 63, 140, 214, 82, 50, 115, 178, 89, 85, 155, 198, 231, 69, 248, 251, 50, 226, 191, 135, 198, 107, 182, 5, 52, 44, 46, 205, 158, 187, 254, 133, 248, 226, 37, 56, 108, 80, 192, 152, 99, 98, 36, 235, 75, 22, 208, 2, 112, 134, 4, 107, 255, 125, 38, 87, 150, 231, 18, 58, 119, 7, 174, 240, 136, 197, 163, 35, 17, 143, 3, 33, 225, 192, 30, 188, 151, 119, 165, 37, 163, 78, 239, 139, 48, 161, 7, 44, 19, 67, 24, 202, 185, 170, 221, 31, 176, 91, 5, 162, 162, 64, 76, 201, 88, 107, 196, 2, 22, 142, 95, 240, 239, 141, 162, 26, 187, 144, 235, 140, 16, 57, 87, 92, 22, 109, 68, 210, 189, 218, 15, 224, 114, 39, 153, 18, 74, 211, 191, 101, 137, 239, 27, 177, 206, 45, 113, 26, 235, 61, 138, 178, 125, 23, 147, 20, 131, 171, 94, 167, 124, 217, 241, 241, 138, 166, 149, 95, 122, 245, 220, 169, 196, 123, 152, 30, 244, 199, 205, 130, 113, 99, 229, 137, 14, 176, 152, 188, 96, 7, 57, 248, 78, 5, 77, 42, 6, 79, 4, 42, 248, 78, 46, 143, 199, 7, 198, 153, 207, 255, 90, 93, 206, 51, 13, 1, 135, 10, 193, 105, 144, 13, 90, 229, 124, 197, 166, 84, 34, 234, 161, 42, 6, 249, 87, 45, 209, 123, 13, 40, 182, 22, 198, 209, 180, 56, 76, 130, 8, 176, 136, 204, 255, 242, 46, 240, 103, 228, 245, 124, 84, 17, 127, 88, 35, 163, 121, 13, 106, 236, 143, 188, 120, 227, 84, 95, 117, 14, 78, 146, 225, 152, 33, 127, 227, 9, 156, 62, 53, 218, 123, 98, 223, 177, 33, 172, 218, 63, 192, 247, 25, 149, 81, 155, 43, 176, 196, 4, 149, 240, 149, 91, 104, 22, 150, 222, 43, 207, 141, 66, 40, 32, 80, 248, 108, 88, 42, 228, 135, 118, 157, 35, 192, 238, 165, 132, 235, 152, 214, 230, 9, 198, 234, 10, 125, 87, 239, 103, 240, 19, 123, 82, 79, 182, 17, 117, 96, 244, 12, 111, 110, 132, 29, 84, 48, 138, 132, 198, 159, 106, 161, 198, 182, 46, 207, 1, 151, 16, 91, 197, 84, 208, 19, 48, 71, 74, 77, 244, 125, 246, 38, 88, 39, 67, 63, 33, 103, 199, 150, 241, 168, 107, 87, 217, 149, 221, 147, 177, 80, 91, 2, 7, 19, 67, 184, 59, 62, 203, 169, 190, 77, 245, 144, 91, 107, 252, 72, 131, 134, 180, 79, 84, 168, 79, 161, 80, 116, 75, 50, 86, 47, 166, 29, 185, 140, 197, 161, 182, 23, 211, 86, 154, 219, 145, 248, 48, 104, 15, 240, 20, 150, 213, 25, 223, 67, 243, 25, 87, 89, 235, 162, 123, 137, 123, 18, 251, 154, 248, 107, 173, 88, 232, 150, 15, 154, 177, 239, 96, 41, 4, 135, 41, 166, 235, 200, 131, 156, 18, 49, 173, 242, 116, 66, 101, 149, 227, 118, 91, 183, 55, 78, 70, 237, 202, 146, 159, 84, 0, 88, 249, 175, 18, 26, 83, 236, 137, 189, 134, 103, 129, 15, 223, 181, 220, 140, 110, 128, 99, 113, 23, 8, 203, 77, 132, 147, 234, 92, 213, 12, 228, 81, 59, 22, 30, 208, 172, 116, 190, 201, 233, 47, 242, 207, 118, 142, 227, 91, 235, 240, 235, 163, 234, 89, 146, 168, 152, 92, 46, 195, 19, 76, 87, 42, 170, 67, 118, 238, 212, 152, 175, 226, 24, 255, 29, 148, 121, 72, 119, 226, 120, 178, 244, 132, 252, 114, 148, 96, 182, 195, 52, 151, 91, 166, 63, 149, 197, 92, 90, 72, 94, 157, 224, 149, 185, 150, 74, 189, 106, 177, 163, 9, 190, 168, 121, 131, 16, 126, 6, 172, 198, 135, 195, 93, 133, 238, 86, 28, 74, 74, 91, 118, 209, 203, 177, 122, 71, 161, 214, 147, 3, 136, 234, 155, 26, 249, 173, 135, 17, 158, 137, 149, 112, 131, 198, 228, 143, 114, 28, 96, 18, 73, 1, 248, 130, 50, 143, 201, 27, 77, 54, 134, 245, 119, 250, 236, 105, 176, 40, 251, 221, 184, 132, 0, 239, 100, 214, 35, 211, 133, 25, 90, 52, 58, 155, 86, 45, 199, 8, 223, 94, 26, 128, 242, 249, 12, 90, 212, 82, 141, 235, 200, 139, 139, 93, 9, 34, 208, 122, 38, 70, 10, 48, 64, 125, 30, 153, 118, 235, 135, 9, 167, 135, 83, 189, 144, 184, 131, 184, 234, 83, 237, 126, 230, 104, 188, 214, 84, 114, 255, 199, 196, 216, 75, 213, 112, 243, 55, 30, 104, 206, 9, 215, 248, 180, 41, 198, 91, 181, 190, 127, 113, 139, 164, 87, 171, 168, 243, 204, 10, 5, 84, 47, 204, 238, 107, 210, 249, 176, 47, 11, 40, 81, 215, 180, 208, 157, 94, 244, 13, 21, 7, 187, 7, 109, 92, 40, 174, 46, 207, 226, 152, 135, 69, 54, 113, 118, 26, 148, 205, 244, 210, 210, 4, 15, 56, 120, 217, 40, 27, 231, 225, 156, 74, 130, 115, 59, 35, 29, 202, 242, 169, 156, 182, 182, 103, 201, 122, 116, 200, 130, 179, 85, 169, 236, 173, 4, 64, 32, 17, 123, 234, 25, 176, 64, 139, 245, 104, 216, 180, 243, 69, 166, 20, 157, 56, 79, 82, 106, 206, 82, 158, 110, 9, 110, 12, 166, 22, 212, 25, 24, 10, 116, 68, 45, 46, 2, 175, 108, 14, 107, 91, 136, 87, 200, 227, 94, 208, 108, 74, 164, 208, 112, 243, 128, 92, 83, 10, 139, 26, 244, 237, 61, 98, 177, 205, 236, 160, 238, 214, 254, 237, 51, 65, 97, 84, 212, 127, 75, 190, 68, 66, 42, 74, 124, 121, 41, 48, 51, 137, 240, 211, 42, 72, 99, 61, 21, 172, 149, 91, 127, 126, 135, 103, 125, 138, 12, 2, 143, 220, 179, 116, 147, 147, 229, 79, 72, 99, 139, 128, 127, 217, 208, 13, 127, 217, 221, 39, 203, 223, 41, 52, 206, 33, 94, 79, 62, 41, 4, 111, 173, 48, 206, 164, 98, 21, 109, 188, 74, 240, 79, 59, 176, 26, 153, 36, 250, 28, 252, 91, 223, 49, 19, 191, 88, 95, 90, 29, 146, 217, 114, 212, 50, 106, 201, 22, 232, 144, 68, 52, 132, 37, 80, 201, 218, 243, 206, 252, 72, 149, 156, 221, 46, 185, 35, 238, 169, 153, 87, 241, 154, 205, 178, 12, 242, 40, 182, 6, 14, 197, 19, 146, 14, 110, 179, 87, 4, 231, 24, 159, 130, 22, 37, 146, 50, 220, 109, 91, 175, 94, 41, 146, 145, 129, 177, 147, 47, 31, 17, 220, 7, 131, 93, 23, 112, 154, 69, 54, 216, 29, 71, 144, 14, 66, 246, 166, 227, 251, 76, 37, 2, 87, 110, 122, 145, 8, 20, 133, 251, 56, 144, 225, 174, 8, 117, 234, 30, 105, 36, 100, 151, 54, 47, 207, 74, 64, 46, 126, 159, 111, 167, 43, 211, 232, 174, 158, 145, 32, 46, 246, 221, 197, 122, 149, 38, 92, 134, 36, 198, 70, 175, 187, 148, 174, 184, 206, 251, 59, 12, 252, 185, 58, 41, 160, 92, 107, 81, 30, 84, 145, 196, 229, 6, 36, 187, 136, 44, 94, 188, 69, 136, 98, 164, 77, 123, 152, 122, 134, 203, 188, 118, 139, 76, 96, 164, 67, 213, 20, 126, 174, 84, 248, 57, 102, 163, 210, 134, 5, 91, 193, 17, 120, 144, 120, 20, 186, 221, 146, 149, 193, 17, 124, 148, 37, 121, 114, 194, 169, 11, 205, 81, 222, 203, 200, 171, 165, 253, 112, 73, 9, 93, 45, 141, 209, 114, 142, 234, 10, 158, 38, 65, 231, 202, 5, 28, 207, 152, 212, 57, 244, 50, 64, 8, 211, 141, 217, 180, 101, 210, 132, 237, 112, 37, 240, 131, 164, 51, 40, 248, 16, 110, 97, 152, 247, 121, 237, 225, 148, 252, 76, 0, 246, 238, 87, 68, 205, 3, 32, 253, 21, 178, 63, 219, 135, 184, 145, 15, 33, 51, 104, 211, 244, 139, 92, 154, 225, 83, 24, 20, 163, 244, 151, 39, 130, 145, 82, 98, 66, 177, 67, 136, 254, 70, 146, 224, 68, 149, 201, 142, 247, 80, 100, 221, 101, 26, 226, 78, 155, 221, 105, 36, 102, 93, 23, 77, 151, 154, 75, 171, 109, 27, 94, 229, 214, 216, 175, 117, 180, 62, 69, 129, 74, 66, 255, 212, 136, 79, 97, 22, 139, 10, 209, 93, 10, 223, 95, 71, 95, 72, 67, 129, 188, 34, 104, 167, 128, 92, 249, 239, 209, 169, 254, 222, 133, 32, 202, 20, 117, 106, 238, 139, 159, 102, 125, 27, 201, 113, 50, 227, 235, 216, 22, 195, 17, 32, 212, 7, 114, 161, 74, 28, 19, 132, 144, 173, 134, 247, 108, 138, 123, 144, 114, 79, 177, 130, 18, 78, 218, 253, 194, 213, 243, 27, 119, 12, 5, 4, 229, 188, 15, 222, 48, 198, 230, 159, 41, 154, 183, 26, 210, 79, 246, 5, 56, 81, 211, 187, 134, 47, 159, 204, 75, 19, 180, 26, 253, 204, 169, 174, 51, 37, 243, 66, 203, 181, 27, 7, 80, 67, 97, 143, 194, 242, 152, 137, 117, 239, 62, 31, 160, 171, 169, 227, 151, 235, 127, 100, 183, 153, 164, 157, 24, 164, 128, 188, 86, 76, 15, 20, 57, 120, 48, 81, 38, 251, 8, 144, 109, 112, 123, 149, 21, 192, 132, 63, 133, 45, 49, 205, 119, 236, 111, 56, 82, 50, 37, 180, 93, 246, 230, 242, 121, 137, 25, 46, 163, 45, 187, 25, 61, 217, 86, 130, 120, 216, 180, 121, 207, 226, 55, 7, 126, 223, 107, 85, 31, 134, 206, 102, 95, 7, 6, 4, 237, 57, 71, 90, 231, 107, 157, 27, 244, 11, 176, 214, 189, 222, 166, 61, 86, 241, 152, 177, 20, 57, 103, 209, 28, 42, 83, 25, 127, 144, 238, 211, 214, 50, 63, 160, 115, 98, 222, 250, 40, 127, 208, 36, 198, 206, 171, 26, 208, 63, 51, 43, 37, 7, 35, 109, 37, 169, 213, 105, 150, 156, 11, 101, 125, 215, 171, 127, 103, 226, 153, 34, 223, 99, 70, 66, 203, 192, 156, 53, 213, 85, 80, 216, 197, 253, 136, 223, 62, 210, 62, 203, 210, 176, 176, 39, 236, 235, 33, 225, 213, 129, 210, 3, 159, 201, 194, 170, 179, 200, 127, 81, 231, 222, 215, 77, 150, 59, 237, 178, 76, 166, 99, 84, 121, 144, 254, 213, 106, 149, 97, 199, 174, 140, 15, 125, 16, 170, 247, 159, 131, 170, 34, 4, 255, 201, 52, 99, 198, 140, 31, 139, 87, 106, 34, 35, 138, 254, 126, 46, 122, 202, 203, 245, 182, 189, 15, 155, 205, 151, 184, 14, 202, 97, 187, 245, 32, 216, 218, 235, 134, 2, 16, 149, 104, 84, 123, 139, 182, 191, 110, 93, 211, 144, 161, 144, 15, 192, 154, 211, 18, 14, 152, 72, 53, 58, 104, 54, 255, 24, 96, 172, 240, 251, 84, 116, 124, 201, 125, 207, 172, 204, 245, 247, 63, 137, 1, 192, 103, 37, 106, 114, 135, 213, 255, 174, 30, 52, 6, 194, 232, 126, 160, 125, 226, 186, 241, 186, 76, 191, 168, 74, 167, 70, 104, 170, 4, 227, 105, 40, 16, 35, 192, 1, 186, 45, 239, 70, 113, 46, 184, 3, 207, 143, 224, 214, 136, 69, 73, 169, 206, 124, 215, 141, 252, 188, 110, 202, 117, 115, 156, 94, 153, 9, 64, 131, 185, 112, 37, 33, 10, 193, 162, 102, 8, 83, 124, 22, 197, 200, 190, 208, 25, 195, 160, 15, 176, 210, 76, 243, 3, 223, 247, 90, 181, 19, 5, 115, 145, 70, 144, 51, 230, 118, 43, 56, 184, 190, 5, 232, 23, 216, 95, 100, 46, 225, 75, 204, 157, 17, 165, 52, 148, 213, 148, 87, 78, 29, 252, 48, 88, 123, 35, 15, 106, 96, 17, 158, 54, 80, 27, 29, 179, 227, 176, 61, 165, 73, 71, 161, 3, 180, 145, 172, 142, 254, 15, 8, 121, 48, 119, 79, 182, 173, 44, 141, 79, 198, 52, 155, 237, 125, 143, 75, 26, 179, 197, 85, 104, 255, 221, 6, 227, 43, 231, 197, 42, 18, 90, 222, 205, 155, 253, 229, 84, 150, 234, 142, 171, 207, 95, 206, 188, 198, 80, 117, 87, 45, 101, 13, 154, 26, 218, 64, 174, 113, 88, 155, 38, 16, 41, 183, 166, 2, 43, 3, 192, 141, 194, 113, 145, 168, 120, 34, 60, 55, 232, 142, 247, 134, 49, 92, 217, 66, 187, 70, 211, 153, 175, 77, 82, 125, 191, 161, 108, 152, 193, 232, 147, 123, 136, 17, 6, 50, 46, 7, 224, 19, 244, 213, 191, 118, 248, 64, 250, 183, 25, 114, 240, 90, 231, 251, 84, 175, 4, 17, 41, 86, 107, 150, 156, 204, 33, 206, 152, 109, 169, 237, 104, 255, 45, 133, 41, 53, 232, 248, 95, 52, 107, 53, 59, 110, 150, 161, 11, 252, 232, 65, 47, 27, 151, 228, 65, 214, 144, 221, 146, 149, 119, 94, 211, 124, 91, 75, 235, 213, 241, 119, 107, 140, 156, 49, 187, 155, 43, 101, 71, 54, 141, 61, 143, 75, 39, 86, 183, 192, 48, 94, 43, 101, 29, 194, 158, 9, 218, 76, 230, 177, 134, 180, 49, 126, 12, 116, 123, 249, 155, 174, 26, 127, 99, 119, 13, 86, 19, 36, 37, 246, 174, 110, 53, 103, 140, 196, 162, 29, 138, 184, 62, 205, 21, 183, 0, 33, 103, 21, 157, 46, 93, 129, 241, 57, 153, 158, 36, 136, 10, 102, 110, 149, 97, 62, 109, 44, 217, 141, 243, 189, 209, 115, 224, 168, 57, 0, 131, 90, 252, 210, 154, 160, 167, 143, 194, 17, 146, 226, 97, 97, 2, 73, 139, 35, 180, 181, 222, 154, 60, 49, 226, 48, 118, 35, 90, 127, 249, 58, 64, 213, 50, 90, 108, 114, 18, 88, 175, 100, 168, 86, 197, 27, 100, 30, 147, 118, 51, 112, 103, 228, 173, 128, 161, 173, 194, 178, 171, 222, 217, 35, 53, 15, 201, 3, 94, 8, 22, 166, 86, 196, 161, 253, 170, 204, 245, 46, 228, 231, 243, 37, 152, 200, 246, 170, 139, 197, 248, 175, 233, 148, 83, 172, 114, 90, 138, 13, 198, 77, 126, 42, 59, 29, 205, 65, 111, 29, 6, 170, 139, 103, 128, 231, 20, 220, 34, 77, 194, 2, 126, 231, 182, 100, 180, 14, 52, 191, 181, 76, 193, 228, 83, 245, 133, 63, 180, 238, 207, 49, 56, 40, 214, 254, 211, 204, 251, 11, 8, 25, 2, 180, 75, 217, 176, 95, 151, 89, 52, 3, 76, 132, 94, 245, 34, 92, 142, 44, 97, 148, 77, 154, 99, 214, 129, 31, 84, 6, 147, 113, 90, 228, 191, 132, 228, 149, 4, 86, 40, 161, 40, 200, 237, 117, 30, 226, 102, 124, 195, 157, 51, 22, 211, 168, 235, 98, 14, 53, 205, 194, 55, 92, 255, 247, 219, 154, 228, 125, 182, 91, 164, 250, 42, 85, 20, 210, 153, 91, 203, 197, 89, 1, 29, 226, 198, 14, 182, 139, 73, 4, 48, 40, 173, 126, 22, 17, 99, 198, 120, 248, 1, 140, 150, 202, 225, 37, 20, 236, 174, 45, 65, 184, 144, 221, 239, 69, 60, 117, 159, 150, 114, 70, 223, 7, 92, 7, 62, 231, 252, 23, 136, 163, 141, 129, 205, 116, 117, 223, 89, 188, 59, 100, 165, 202, 16, 215, 127, 241, 143, 84, 176, 138, 120, 203, 98, 144, 5, 75, 123, 148, 227, 245, 254, 137, 6, 89, 10, 201, 67, 37, 121, 6, 132, 145, 83, 190, 28, 190, 208, 244, 114, 87, 95, 238, 136, 32, 117, 236, 213, 16, 236, 102, 226, 95, 2, 242, 50, 227, 25, 232, 108, 101, 27, 76, 3, 224, 173, 154, 211, 192, 61, 10, 95, 250, 228, 161, 124, 221, 192, 238, 117, 31, 140, 16, 177, 232, 104, 130, 164, 5, 151, 213, 15, 106, 113, 245, 219, 248, 159, 21, 104, 177, 114, 121, 1, 67, 78, 83, 247, 189, 181, 109, 208, 199, 210, 239, 141, 125, 100, 4, 56, 78, 219, 24, 142, 163, 183, 12, 58, 244, 6, 171, 133, 166, 32, 123, 226, 103, 70, 134, 23, 101, 248, 112, 96, 75, 172, 210, 171, 140, 168, 41, 4, 5, 100, 128, 30, 38, 4, 142, 194, 191, 210, 250, 233, 254, 118, 254, 151, 124, 198, 195, 218, 203, 73, 64, 28, 141, 126, 254, 145, 128, 198, 11, 193, 184, 158, 85, 80, 230, 89, 136, 143, 192, 188, 202, 200, 84, 161, 250, 85, 53, 35, 191, 162, 124, 44, 197, 74, 21, 30, 143, 127, 76, 245, 202, 91, 37, 175, 170, 77, 60, 227, 11, 163, 236, 90, 172, 147, 223, 181, 110, 108, 254, 121, 68, 142, 101, 67, 69, 126, 231, 30, 190, 150, 153, 66, 102, 238, 189, 195, 27, 12, 191, 114, 181, 144, 151, 26, 192, 218, 1, 53, 116, 148, 255, 149, 126, 35, 99, 84, 133, 83, 80, 21, 224, 185, 8, 207, 147, 245, 182, 116, 52, 11, 167, 196, 97, 241, 141, 74, 254, 223, 85, 174, 34, 52, 13, 129, 213, 244, 138, 211, 36, 182, 228, 180, 11, 8, 25, 140, 1, 200, 255, 113, 252, 156, 218, 53, 7, 239, 63, 32, 91, 108, 31, 15, 89, 151, 145, 141, 253, 11, 204, 145, 55, 25, 88, 73, 13, 193, 43, 140, 169, 16, 91, 124, 49, 116, 172, 9, 112, 142, 29, 105, 219, 113, 196, 214, 52, 31, 106, 196, 205, 166, 204, 216, 229, 117, 21, 173, 211, 143, 182, 108, 108, 155, 140, 114, 249, 204, 90, 83, 122, 207, 170, 170, 216, 158, 192, 19, 201, 90, 57, 60, 23, 72, 102, 58, 248, 73, 144, 131, 60, 150, 84, 220, 16, 155, 164, 54, 90, 130, 206, 220, 83, 121, 43, 7, 165, 169, 172, 213, 235, 162, 240, 62, 146, 69, 231, 172, 103, 65, 40, 48, 91, 234, 123, 97, 251, 112, 175, 139, 88, 51, 169, 102, 53, 49, 101, 202, 50, 63, 82, 211, 46, 13, 116, 36, 62, 140, 67, 8, 148, 180, 144, 192, 161, 138, 189, 229, 193, 183, 212, 45, 28, 66, 99, 220, 134, 168, 229, 101, 225, 6, 139, 178, 115, 207, 204, 83, 101, 77, 218, 185, 101, 39, 52, 167, 110, 224, 161, 250, 212, 4, 88, 195, 14, 113, 151, 247, 73, 87, 67, 35, 140, 220, 100, 96, 170, 110, 86, 94, 141, 134, 146, 122, 33, 192, 51, 17, 15, 207, 35, 154, 33, 134, 122, 121, 139, 253, 123, 31, 12, 166, 188, 152, 118, 202, 166, 204, 146, 129, 248, 22, 139, 44, 0, 152, 10, 38, 15, 215, 252, 115, 110, 71, 90, 91, 109, 100, 10, 194, 58, 78, 223, 205, 114, 255, 217, 67, 68, 227, 116, 3, 193, 162, 214, 95, 13, 67, 99, 146, 209, 224, 145, 193, 75, 95, 214, 151, 253, 140, 122, 95, 140, 141, 96, 137, 53, 26, 0, 239, 168, 120, 189, 92, 154, 123, 11, 42, 203, 143, 165, 241, 101, 38, 28, 0, 143, 13, 22, 87, 251, 147, 47, 198, 46, 29, 65, 111, 197, 213, 53, 59, 86, 254, 123, 98, 219, 97, 190, 172, 27, 49, 251, 151, 164, 19, 236, 201, 76, 21, 58, 154, 43, 3, 70, 73, 223, 78, 139, 128, 197, 106, 10, 47, 97, 250, 220, 58, 14, 176, 41, 107, 231, 12, 211, 200, 132, 18, 58, 185, 204, 25, 236, 235, 113, 147, 82, 85, 98, 32, 196, 181, 98, 98, 141, 152, 129, 186, 1, 139, 155, 16, 60, 232, 2, 108, 110, 227, 9, 49, 148, 34, 147, 42, 226, 103, 209, 46, 79, 47, 202, 52, 175, 12, 122, 181, 71, 152, 17, 236, 150, 199, 31, 206, 45, 116, 150, 137, 101, 69, 115, 206, 121, 191, 24, 144, 129, 67, 142, 250, 2, 240, 238, 159, 193, 140, 251, 237, 224, 153, 97, 100, 57, 135, 190, 103, 120, 81, 236, 206, 12, 46, 109, 254, 38, 138, 50, 165, 138, 200, 208, 244, 84, 18, 37, 255, 85, 54, 91, 226, 91, 66, 64, 33, 147, 162, 200, 91, 186, 212, 95, 253, 41, 157, 52, 103, 20, 36, 143, 44, 222, 193, 83, 102, 167, 151, 151, 19, 133, 175, 249, 187, 59, 183, 148, 141, 66, 122, 108, 33, 182, 3, 168, 218, 120, 81, 5, 109, 187, 28, 241, 188, 186, 178, 241, 46, 250, 176, 147, 1, 136, 171, 214, 190, 84, 186, 165, 106, 11, 174, 244, 215, 138, 148, 27, 204, 221, 221, 170, 157, 27, 235, 4, 177, 253, 183, 148, 140, 127, 189, 105, 57, 29, 111, 188, 247, 201, 219, 130, 98, 55, 177, 248, 81, 147, 134, 97, 91, 124, 85, 228, 210, 121, 55, 50, 155, 85, 75, 4, 142, 56, 241, 140, 134, 114, 63, 87, 245, 165, 217, 35, 90, 139, 242, 22, 72, 60, 129, 59, 225, 160, 52, 42, 227, 43, 248, 118, 74, 237, 138, 249, 75, 35, 252, 255, 180, 166, 95, 174, 8, 20, 38, 62, 122, 76, 101, 132, 195, 103, 211, 103, 0, 35, 60, 20, 208, 254, 67, 166, 20, 253, 43, 8, 10, 114, 16, 187, 231, 255, 82, 4, 66, 219, 205, 100, 11, 174, 228, 112, 196, 245, 240, 180, 122, 61, 2, 48, 185, 14, 233, 45, 115, 184, 191, 34, 4, 115, 164, 128, 136, 21, 250], - [166, 229, 76, 38, 208, 202, 24, 76, 8, 171, 194, 238, 237, 45, 12, 190, 186, 79, 16, 106, 60, 181, 33, 163, 50, 152, 140, 143, 164, 192, 43, 90, 115, 55, 89, 117, 132, 42, 164, 226, 133, 89, 56, 26, 119, 92, 244, 245, 191, 106, 18, 69, 186, 34, 159, 17, 47, 109, 129, 236, 25, 185, 29, 3, 186, 179, 71, 252, 188, 11, 123, 138, 94, 60, 188, 49, 187, 226, 205, 246, 191, 37, 184, 16, 175, 24, 111, 143, 130, 84, 135, 241, 93, 220, 192, 228, 82, 252, 152, 213, 7, 49, 171, 52, 211, 89, 179, 155, 37, 34, 232, 59, 239, 221, 4, 235, 208, 182, 193, 236, 129, 148, 28, 150, 1, 171, 144, 148, 192, 79, 198, 171, 40, 109, 62, 2, 119, 95, 135, 198, 115, 90, 40, 41, 156, 72, 230, 243, 23, 213, 251, 33, 108, 208, 14, 172, 13, 15, 208, 243, 61, 179, 0, 207, 103, 123, 215, 31, 38, 26, 200, 172, 164, 196, 228, 127, 207, 37, 164, 55, 251, 215, 231, 87, 118, 2, 23, 80, 99, 202, 252, 18, 108, 129, 59, 33, 58, 32, 147, 219, 52, 116, 104, 158, 214, 103, 16, 63, 117, 82, 52, 106, 37, 78, 200, 177, 223, 124, 186, 197, 49, 163, 134, 141, 199, 64, 113, 72, 195, 2, 134, 115, 100, 157, 52, 47, 52, 178, 196, 19, 106, 125, 72, 158, 106, 215, 195, 156, 213, 152, 142, 254, 190, 232, 89, 34, 28, 1, 31, 128, 188, 2, 185, 99, 194, 40, 119, 19, 111, 164, 120, 142, 235, 83, 49, 252, 107, 159, 45, 202, 73, 8, 157, 111, 97, 115, 238, 83, 243, 118, 115, 104, 132, 166, 15, 39, 238, 245, 137, 125, 228, 212, 198, 218, 153, 94, 27, 68, 153, 25, 75, 177, 132, 118, 23, 192, 25, 139, 81, 214, 150, 12, 139, 91, 232, 204, 210, 188, 43, 163, 211, 221, 18, 143, 56, 73, 135, 78, 12, 166, 240, 3, 243, 19, 42, 53, 180, 225, 217, 160, 237, 74, 25, 1, 120, 234, 142, 148, 209, 210, 135, 96, 221, 194, 55, 5, 118, 95, 226, 1, 43, 138, 10, 246, 68, 144, 74, 78, 54, 43, 90, 105, 212, 208, 178, 13, 35, 62, 177, 52, 22, 255, 79, 83, 16, 107, 37, 135, 161, 51, 211, 127, 199, 27, 42, 246, 209, 29, 18, 151, 33, 149, 206, 140, 36, 210, 214, 3, 208, 109, 142, 90, 92, 149, 183, 133, 192, 163, 178, 125, 29, 175, 175, 81, 182, 20, 47, 202, 67, 67, 51, 205, 239, 130, 126, 121, 227, 250, 141, 2, 115, 11, 24, 93, 171, 109, 59, 183, 70, 239, 217, 84, 246, 47, 72, 36, 139, 221, 28, 187, 5, 162, 40, 22, 200, 11, 209, 179, 36, 121, 165, 129, 92, 112, 105, 208, 61, 237, 188, 159, 206, 25, 82, 242, 193, 37, 67, 137, 242, 220, 195, 80, 115, 121, 164, 105, 192, 151, 110, 2, 231, 160, 125, 60, 153, 57, 198, 107, 135, 241, 233, 88, 221, 136, 77, 114, 132, 24, 162, 103, 151, 117, 61, 163, 248, 167, 144, 68, 193, 85, 169, 23, 141, 4, 250, 95, 186, 51, 191, 131, 199, 66, 28, 59, 153, 208, 93, 227, 185, 144, 125, 245, 11, 42, 51, 113, 214, 135, 229, 175, 155, 72, 100, 253, 191, 174, 112, 162, 123, 21, 233, 93, 230, 40, 102, 253, 93, 191, 43, 155, 86, 42, 55, 183, 183, 37, 224, 89, 91, 79, 230, 28, 170, 237, 201, 4, 201, 204, 111, 132, 205, 171, 246, 117, 251, 50, 120, 200, 225, 147, 135, 137, 30, 134, 200, 244, 81, 203, 30, 65, 77, 64, 92, 240, 248, 168, 216, 83, 206, 183, 188, 79, 193, 13, 35, 88, 85, 119, 230, 2, 168, 179, 42, 166, 193, 189, 80, 88, 235, 59, 21, 7, 174, 14, 145, 134, 126, 132, 157, 213, 180, 70, 137, 70, 67, 183, 165, 117, 244, 110, 199, 113, 218, 66, 73, 223, 56, 209, 244, 21, 136, 240, 82, 237, 194, 162, 210, 187, 95, 139, 85, 15, 255, 139, 33, 177, 204, 241, 4, 140, 247, 75, 213, 135, 36, 29, 232, 183, 100, 8, 97, 176, 168, 11, 127, 88, 204, 44, 119, 162, 26, 45, 212, 137, 178, 61, 99, 219, 100, 112, 51, 132, 90, 0, 166, 87, 70, 59, 26, 175, 165, 125, 117, 135, 72, 193, 114, 118, 169, 126, 171, 41, 170, 82, 231, 87, 21, 200, 104, 24, 169, 54, 191, 0, 187, 88, 141, 124, 144, 45, 109, 29, 53, 5, 45, 129, 171, 143, 122, 130, 144, 45, 181, 45, 39, 126, 255, 96, 101, 238, 76, 11, 68, 103, 158, 51, 105, 187, 144, 18, 66, 184, 116, 226, 2, 183, 224, 54, 34, 194, 208, 139, 179, 215, 75, 33, 75, 238, 13, 22, 52, 101, 91, 106, 241, 68, 90, 41, 217, 205, 155, 4, 18, 72, 247, 207, 65, 18, 224, 233, 112, 107, 58, 139, 237, 40, 199, 202, 220, 187, 55, 40, 108, 10, 0, 13, 156, 189, 28, 122, 21, 43, 255, 65, 190, 2, 129, 40, 100, 64, 232, 255, 77, 234, 206, 151, 112, 90, 197, 183, 162, 220, 161, 253, 185, 87, 132, 42, 230, 140, 105, 23, 100, 218, 232, 53, 32, 33, 84, 197, 118, 176, 71, 135, 183, 246, 67, 101, 241, 48, 101, 249, 9, 152, 65, 38, 34, 240, 110, 186, 156, 241, 184, 142, 54, 168, 193, 11, 200, 54, 30, 194, 191, 163, 190, 11, 200, 168, 248, 118, 121, 253, 195, 37, 117, 85, 31, 76, 51, 184, 78, 58, 42, 67, 35, 111, 148, 193, 238, 166, 130, 167, 107, 100, 145, 239, 244, 147, 191, 114, 4, 153, 129, 84, 64, 201, 88, 1, 156, 76, 166, 244, 238, 166, 111, 205, 93, 184, 215, 240, 242, 44, 219, 7, 112, 13, 44, 80, 69, 91, 60, 23, 151, 135, 63, 45, 93, 25, 94, 193, 37, 255, 83, 111, 106, 172, 64, 160, 235, 210, 230, 5, 204, 28, 151, 104, 36, 177, 140, 240, 69, 252, 51, 156, 164, 32, 212, 191, 162, 69, 98, 196, 8, 18, 121, 240, 36, 53, 149, 179, 182, 33, 164, 51, 108, 246, 143, 17, 120, 154, 210, 252, 198, 72, 237, 169, 213, 50, 16, 237, 167, 138, 30, 113, 170, 162, 239, 248, 128, 68, 48, 176, 4, 184, 84, 243, 145, 14, 240, 128, 182, 148, 255, 95, 160, 204, 251, 221, 163, 212, 130, 198, 212, 190, 61, 137, 41, 79, 112, 126, 173, 48, 176, 101, 119, 193, 108, 86, 215, 221, 139, 85, 204, 67, 250, 34, 89, 230, 154, 247, 178, 24, 91, 232, 171, 138, 74, 34, 122, 104, 233, 161, 134, 29, 70, 3, 181, 229, 65, 130, 63, 96, 91, 145, 201, 46, 28, 77, 212, 122, 202, 91, 133, 173, 23, 106, 80, 22, 51, 29, 8, 246, 11, 79, 11, 145, 72, 137, 222, 38, 86, 11, 218, 218, 16, 202, 255, 254, 21, 215, 193, 4, 11, 72, 101, 27, 14, 31, 135, 152, 145, 188, 50, 15, 221, 72, 223, 122, 67, 203, 182, 84, 230, 79, 26, 147, 18, 60, 56, 65, 72, 67, 48, 249, 142, 146, 14, 67, 248, 235, 118, 139, 13, 130, 31, 25, 204, 228, 130, 54, 204, 126, 117, 186, 214, 93, 69, 194, 187, 198, 21, 226, 192, 148, 42, 171, 183, 3, 153, 209, 104, 35, 110, 30, 18, 108, 64, 60, 170, 122, 35, 128, 56, 98, 42, 114, 243, 74, 168, 170, 166, 18, 0, 31, 74, 106, 152, 77, 148, 98, 119, 45, 12, 79, 100, 197, 27, 236, 233, 127, 251, 250, 17, 141, 151, 49, 210, 147, 57, 36, 62, 142, 49, 185, 201, 19, 81, 97, 174, 146, 12, 12, 21, 106, 117, 113, 91, 58, 220, 18, 14, 71, 183, 58, 59, 195, 156, 179, 161, 209, 52, 242, 185, 137, 75, 24, 242, 39, 214, 85, 215, 117, 163, 96, 245, 201, 144, 148, 129, 15, 178, 210, 31, 28, 48, 238, 179, 79, 199, 161, 220, 237, 253, 167, 224, 254, 166, 73, 233, 51, 200, 62, 177, 143, 153, 67, 84, 22, 12, 179, 72, 165, 87, 200, 232, 214, 122, 186, 101, 209, 221, 70, 17, 113, 219, 55, 5, 223, 59, 176, 112, 62, 54, 246, 148, 9, 63, 254, 67, 236, 197, 241, 205, 131, 52, 214, 6, 140, 172, 88, 193, 88, 16, 103, 114, 127, 218, 89, 162, 194, 61, 170, 29, 40, 90, 5, 144, 254, 251, 102, 254, 190, 69, 188, 204, 175, 240, 203, 105, 183, 174, 27, 231, 221, 26, 69, 45, 136, 135, 24, 202, 128, 238, 54, 195, 105, 117, 146, 110, 149, 7, 127, 24, 95, 169, 114, 33, 77, 77, 255, 174, 237, 218, 153, 90, 229, 110, 173, 143, 140, 218, 187, 9, 203, 144, 136, 198, 118, 129, 123, 104, 153, 246, 163, 226, 187, 140, 173, 125, 111, 139, 133, 169, 216, 96, 66, 99, 143, 41, 229, 222, 50, 60, 118, 169, 43, 87, 239, 211, 113, 213, 6, 94, 226, 205, 85, 207, 144, 96, 248, 30, 58, 245, 20, 139, 31, 130, 105, 182, 102, 91, 210, 193, 110, 49, 241, 162, 182, 190, 224, 96, 238, 217, 235, 142, 26, 65, 51, 147, 99, 243, 96, 168, 92, 171, 246, 188, 10, 113, 229, 107, 99, 241, 242, 177, 87, 221, 165, 191, 163, 209, 232, 182, 23, 45, 191, 214, 51, 91, 80, 111, 242, 43, 51, 174, 205, 162, 162, 106, 10, 186, 158, 205, 244, 107, 253, 170, 147, 14, 132, 205, 137, 182, 84, 199, 47, 161, 244, 134, 50, 237, 65, 177, 212, 68, 92, 129, 217, 6, 38, 194, 96, 34, 218, 18, 221, 94, 208, 162, 126, 142, 42, 146, 217, 220, 236, 77, 64, 89, 37, 144, 146, 141, 70, 110, 77, 43, 90, 147, 46, 124, 28, 186, 142, 56, 178, 77, 223, 185, 193, 3, 71, 168, 230, 211, 126, 181, 166, 37, 34, 171, 27, 113, 80, 84, 171, 114, 242, 245, 162, 35, 204, 59, 73, 89, 127, 76, 210, 116, 158, 129, 149, 226, 242, 72, 181, 57, 173, 14, 125, 0, 126, 179, 171, 51, 192, 189, 213, 136, 161, 133, 166, 214, 202, 207, 123, 12, 255, 202, 245, 61, 105, 129, 52, 22, 117, 88, 42, 148, 225, 149, 214, 189, 109, 142, 251, 163, 137, 202, 174, 152, 198, 191, 187, 162, 248, 87, 104, 230, 21, 130, 52, 116, 206, 193, 210, 237, 194, 56, 77, 113, 152, 128, 40, 116, 25, 118, 49, 240, 71, 12, 187, 49, 160, 175, 7, 55, 165, 78, 248, 192, 18, 67, 134, 163, 69, 197, 75, 53, 26, 138, 31, 218, 45, 80, 166, 24, 152, 2, 28, 243, 64, 28, 203, 169, 135, 132, 168, 213, 156, 86, 130, 14, 90, 161, 136, 210, 229, 253, 100, 245, 106, 172, 188, 248, 52, 201, 24, 250, 71, 147, 113, 13, 182, 107, 176, 65, 211, 246, 44, 253, 140, 89, 245, 124, 183, 31, 220, 123, 76, 83, 7, 110, 194, 243, 166, 212, 138, 31, 177, 159, 186, 119, 229, 179, 79, 46, 145, 21, 222, 74, 249, 179, 12, 21, 170, 196, 154, 201, 51, 125, 97, 78, 86, 124, 138, 59, 6, 191, 197, 200, 155, 172, 226, 95, 70, 13, 31, 190, 74, 81, 122, 93, 115, 68, 237, 215, 209, 254, 129, 32, 40, 2, 143, 180, 176, 80, 71, 4, 103, 249, 163, 157, 69, 226, 139, 6, 41, 147, 68, 54, 247, 229, 36, 71, 143, 108, 51, 43, 43, 195, 54, 167, 105, 129, 140, 77, 83, 160, 185, 102, 6, 103, 93, 172, 53, 114, 36, 168, 85, 28, 85, 46, 154, 213, 126, 99, 245, 212, 168, 161, 244, 187, 38, 121, 163, 231, 170, 91, 246, 248, 1, 74, 238, 72, 141, 133, 104, 106, 122, 67, 232, 230, 201, 49, 203, 157, 184, 251, 195, 243, 4, 255, 147, 105, 36, 101, 95, 23, 128, 154, 31, 85, 168, 52, 9, 48, 240, 235, 125, 248, 73, 7, 253, 151, 159, 174, 9, 188, 45, 115, 159, 118, 145, 229, 251, 72, 117, 9, 121, 129, 206, 165, 192, 163, 2, 217, 251, 138, 115, 165, 162, 240, 233, 75, 203, 86, 128, 110, 61, 106, 171, 159, 176, 187, 53, 115, 62, 148, 216, 46, 6, 233, 111, 43, 238, 240, 5, 11, 170, 28, 12, 160, 224, 10, 178, 59, 42, 119, 32, 69, 150, 231, 61, 138, 191, 163, 213, 151, 26, 251, 138, 250, 157, 165, 50, 61, 168, 229, 65, 216, 99, 242, 89, 193, 122, 17, 143, 48, 203, 40, 173, 165, 227, 34, 98, 85, 42, 171, 223, 108, 2, 91, 205, 84, 255, 16, 156, 220, 175, 20, 3, 34, 36, 88, 32, 87, 43, 72, 16, 10, 217, 177, 126, 96, 200, 116, 117, 105, 150, 46, 255, 243, 141, 50, 208, 101, 113, 210, 83, 41, 66, 241, 41, 231, 216, 38, 201, 113, 120, 72, 30, 19, 230, 183, 24, 47, 157, 165, 255, 147, 172, 196, 108, 171, 190, 227, 173, 235, 76, 42, 41, 76, 117, 249, 208, 185, 12, 118, 185, 54, 122, 218, 194, 170, 238, 15, 242, 141, 3, 23, 100, 174, 208, 52, 44, 253, 228, 230, 144, 72, 175, 213, 144, 213, 160, 81, 41, 180, 191, 63, 228, 97, 184, 10, 167, 188, 207, 201, 203, 102, 189, 160, 162, 197, 156, 22, 185, 132, 234, 232, 219, 59, 141, 185, 199, 89, 15, 234, 200, 11, 104, 15, 11, 44, 27, 4, 68, 15, 5, 89, 231, 70, 191, 62, 247, 99, 152, 157, 11, 47, 26, 171, 115, 169, 90, 171, 250, 198, 138, 112, 212, 165, 159, 10, 247, 187, 127, 116, 79, 71, 165, 74, 227, 128, 180, 19, 238, 89, 82, 134, 98, 204, 173, 2, 198, 90, 140, 14, 233, 166, 158, 56, 111, 29, 54, 138, 75, 34, 10, 159, 133, 233, 106, 245, 66, 98, 197, 2, 138, 135, 170, 246, 176, 36, 237, 82, 251, 177, 17, 210, 222, 224, 140, 214, 209, 51, 152, 28, 207, 199, 91, 1, 82, 160, 88, 119, 224, 251, 56, 9, 179, 215, 221, 68, 171, 0, 23, 130, 105, 224, 106, 224, 228, 233, 185, 52, 232, 110, 204, 65, 219, 26, 153, 12, 44, 92, 171, 48, 5, 190, 39, 64, 141, 183, 196, 197, 186, 38, 219, 207, 224, 32, 58, 115, 139, 138, 245, 242, 123, 221, 211, 108, 85, 80, 121, 221, 32, 161, 221, 146, 130, 8, 130, 35, 4, 160, 241, 29, 116, 254, 143, 158, 78, 205, 123, 125, 36, 156, 246, 63, 170, 140, 223, 202, 72, 65, 230, 122, 237, 32, 198, 214, 153, 87, 33, 19, 173, 83, 43, 154, 53, 174, 87, 106, 187, 33, 237, 50, 122, 149, 11, 74, 124, 229, 11, 160, 42, 149, 44, 142, 135, 185, 39, 75, 254, 187, 36, 116, 104, 84, 138, 3, 13, 155, 20, 61, 94, 10, 199, 229, 18, 21, 234, 97, 52, 167, 191, 123, 240, 190, 171, 185, 63, 118, 228, 31, 132, 245, 41, 239, 212, 158, 205, 1, 213, 37, 146, 204, 219, 149, 207, 245, 198, 60, 238, 173, 38, 164, 99, 225, 0, 243, 145, 150, 55, 100, 237, 229, 137, 48, 24, 154, 133, 149, 166, 128, 97, 31, 35, 32, 93, 59, 237, 216, 203, 39, 182, 120, 116, 173, 135, 78, 237, 235, 53, 117, 179, 78, 119, 6, 52, 248, 46, 26, 102, 189, 8, 66, 93, 230, 36, 153, 36, 238, 63, 211, 226, 34, 110, 132, 223, 32, 107, 107, 100, 115, 235, 198, 148, 164, 50, 101, 11, 229, 127, 91, 209, 233, 12, 69, 97, 98, 84, 167, 31, 247, 20, 250, 16, 215, 5, 227, 250, 190, 205, 239, 105, 9, 43, 69, 101, 125, 244, 230, 252, 149, 194, 48, 99, 171, 191, 179, 123, 226, 70, 195, 253, 41, 246, 216, 115, 239, 145, 82, 104, 246, 119, 61, 23, 141, 247, 172, 200, 138, 252, 54, 73, 154, 204, 151, 185, 171, 158, 246, 158, 19, 13, 82, 188, 172, 128, 168, 112, 220, 73, 99, 76, 78, 100, 137, 111, 189, 86, 177, 8, 95, 253, 182, 39, 232, 219, 184, 71, 160, 245, 82, 62, 174, 23, 253, 154, 248, 245, 17, 107, 94, 223, 155, 51, 1, 114, 116, 127, 187, 71, 244, 219, 169, 50, 88, 30, 9, 30, 62, 171, 79, 1, 172, 178, 165, 172, 107, 167, 62, 62, 203, 28, 122, 214, 150, 102, 128, 30, 232, 218, 97, 19, 167, 120, 9, 32, 192, 100, 5, 10, 65, 77, 155, 195, 88, 79, 253, 219, 54, 91, 238, 245, 53, 31, 119, 128, 102, 242, 75, 20, 254, 6, 226, 33, 178, 53, 227, 189, 87, 54, 40, 18, 222, 6, 103, 139, 183, 98, 0, 185, 1, 40, 181, 165, 79, 221, 160, 123, 246, 73, 124, 55, 141, 146, 114, 146, 5, 210, 50, 175, 234, 18, 13, 5, 129, 184, 255, 102, 5, 101, 136, 200, 177, 232, 238, 70, 69, 120, 56, 52, 47, 26, 146, 1, 71, 40, 40, 239, 99, 129, 9, 112, 10, 51, 255, 220, 254, 167, 122, 73, 239, 60, 219, 0, 42, 155, 196, 181, 87, 40, 97, 132, 35, 212, 214, 217, 73, 55, 25, 178, 170, 189, 222, 71, 223, 218, 19, 93, 161, 166, 127, 217, 17, 169, 66, 64, 51, 30, 154, 152, 119, 213, 194, 162, 1, 87, 46, 208, 202, 69, 148, 44, 129, 122, 106, 208, 234, 165, 164, 178, 59, 111, 6, 82, 145, 45, 143, 201, 139, 249, 122, 235, 96, 170, 242, 73, 56, 45, 81, 252, 121, 120, 110, 136, 214, 101, 131, 77, 92, 89, 104, 25, 92, 65, 179, 51, 178, 18, 199, 213, 123, 183, 133, 179, 116, 99, 9, 167, 253, 22, 231, 81, 206, 20, 121, 128, 50, 237, 122, 163, 226, 94, 49, 12, 228, 44, 59, 74, 45, 0, 135, 123, 218, 53, 37, 238, 113, 17, 210, 94, 110, 84, 247, 127, 125, 180, 46, 193, 221, 85, 1, 197, 8, 173, 171, 166, 40, 210, 19, 214, 78, 107, 201, 161, 101, 255, 15, 131, 172, 119, 76, 65, 201, 168, 64, 38, 152, 48, 206, 179, 8, 41, 214, 106, 55, 112, 121, 189, 232, 209, 95, 233, 197, 172, 32, 83, 160, 160, 127, 219, 236, 14, 46, 233, 190, 104, 167, 144, 37, 135, 178, 141, 227, 91, 0, 246, 83, 246, 225, 10, 215, 10, 107, 46, 240, 139, 0, 49, 164, 127, 11, 169, 32, 247, 207, 232, 18, 2, 37, 9, 65, 235, 134, 134, 181, 83, 112, 177, 238, 98, 22, 186, 245, 131, 117, 239, 51, 231, 147, 190, 62, 10, 179, 53, 196, 99, 201, 95, 75, 24, 152, 84, 165, 3, 78, 211, 93, 248, 71, 206, 40, 232, 36, 84, 207, 243, 107, 218, 51, 148, 20, 68, 194, 143, 82, 35, 41, 120, 53, 1, 233, 176, 95, 201, 85, 213, 184, 211, 18, 157, 14, 61, 251, 194, 121, 85, 21, 119, 20, 200, 63, 113, 198, 180, 74, 138, 229, 63, 128, 216, 31, 82, 151, 48, 30, 10, 12, 153, 133, 251, 5, 183, 1, 28, 217, 157, 34, 103, 136, 131, 184, 126, 177, 214, 118, 251, 230, 221, 178, 163, 46, 143, 223, 175, 182, 92, 80, 119, 145, 246, 162, 77, 180, 59, 151, 208, 184, 172, 59, 117, 128, 113, 142, 202, 217, 197, 29, 238, 228, 96, 64, 152, 130, 3, 130, 157, 193, 123, 82, 101, 207, 101, 40, 79, 105, 5, 29, 184, 223, 7, 89, 252, 136, 38, 50, 204, 158, 107, 182, 160, 146, 123, 89, 4, 60, 22, 32, 206, 29, 104, 166, 104, 76, 81, 201, 15, 52, 52, 168, 35, 192, 62, 224, 103, 210, 225, 111, 61, 69, 186, 229, 35, 229, 41, 175, 63, 43, 66, 249, 36, 86, 120, 5, 29, 29, 138, 235, 224, 1, 79, 146, 40, 180, 164, 79, 69, 165, 94, 225, 162, 137, 202, 152, 38, 179, 105, 138, 239, 98, 76, 163, 18, 9, 188, 185, 3, 6, 98, 216, 102, 140, 241, 72, 161, 128, 172, 138, 179, 5, 48, 118, 130, 198, 133, 234, 114, 132, 119, 69, 167, 15, 86, 50, 35, 146, 42, 138, 113, 170, 187, 151, 158, 106, 180, 132, 125, 181, 50, 13, 9, 40, 54, 206, 108, 9, 75, 224, 246, 70, 225, 221, 164, 28, 76, 102, 200, 231, 252, 231, 44, 153, 47, 182, 15, 70, 217, 218, 59, 25, 212, 244, 93, 101, 159, 202, 173, 248, 138, 13, 22, 222, 182, 135, 37, 101, 46, 124, 186, 127, 39, 73, 40, 97, 237, 206, 132, 232, 83, 23, 109, 30, 155, 43, 30, 241, 244, 45, 105, 145, 96, 72, 180, 64, 90, 85, 208, 147, 199, 199, 17, 152, 76, 230, 41, 224, 144, 55, 212, 121, 39, 39, 136, 205, 25, 221, 174, 99, 120, 211, 61, 177, 60, 99, 136, 50, 33, 167, 145, 134, 55, 185, 104, 105, 194, 231, 80, 37, 95, 121, 128, 75, 163, 39, 188, 236, 148, 26, 85, 147, 114, 180, 198, 91, 195, 172, 85, 8, 234, 193, 73, 241, 12, 124, 110, 25, 168, 57, 240, 184, 197, 54, 180, 182, 32, 240, 46, 13, 30, 150, 95, 138, 121, 130, 90, 170, 153, 37, 160, 226, 7, 196, 38, 191, 191, 127, 152, 210, 213, 100, 86, 97, 45, 198, 250, 5, 173, 182, 58, 68, 226, 157, 253, 137, 223, 122, 56, 169, 81, 214, 137, 60, 187, 12, 21, 77, 53, 147, 67, 11, 91, 151, 25, 239, 129, 44, 166, 246, 65, 41, 163, 196, 204, 231, 185, 126, 44, 113, 91, 199, 18, 148, 188, 246, 194, 135, 10, 50, 25, 214, 19, 18, 231, 120, 131, 4, 98, 9, 171, 242, 174, 214, 76, 152, 253, 123, 167, 99, 70, 199, 252, 5, 106, 229, 18, 154, 104, 164, 131, 185, 19, 101, 128, 140, 173, 42, 119, 97, 243, 147, 139, 250, 131, 45, 135, 123, 99, 120, 39, 133, 91, 39, 97, 110, 213, 224, 44, 74, 122, 158, 94, 145, 200, 192, 11, 249, 251, 5, 202, 87, 106, 208, 97, 113, 106, 74, 124, 43, 51, 12, 6, 28, 246, 136, 9, 60, 196, 130, 73, 108, 5, 169, 221, 239, 223, 17, 155, 23, 148, 239, 67, 149, 13, 183, 106, 144, 82, 213, 106, 88, 172, 129, 191, 197, 45, 40, 9, 109, 61, 150, 219, 80, 60, 15, 193, 245, 38, 248, 89, 211, 177, 72, 121, 239, 54, 67, 241, 212, 162, 117, 240, 254, 191, 196, 230, 181, 82, 244, 53, 87, 163, 98, 121, 248, 84, 182, 236, 142, 139, 2, 82, 211, 161, 246, 118, 31, 98, 196, 16, 154, 204, 80, 222, 242, 112, 65, 130, 29, 188, 89, 63, 243, 124, 147, 171, 10, 107, 243, 212, 45, 177, 162, 147, 109, 222, 108, 161, 226, 151, 27, 78, 2, 17, 47, 121, 128, 123, 120, 37, 233, 32, 49, 167, 27, 177, 181, 208, 33, 153, 150, 216, 205, 216, 14, 23, 229, 234, 46, 113, 55, 168, 227, 16, 73, 154, 219, 133, 109, 225, 10, 86, 252, 132, 146, 92, 155, 228, 126, 151, 32, 59, 249, 94, 199, 152, 24, 197, 204, 42, 57, 236, 71, 14, 182, 132, 132, 151, 160, 199, 213, 212, 151, 234, 13, 31, 91, 97, 28, 236, 66, 228, 26, 15, 177, 208, 238, 67, 222, 108, 91, 217, 112, 197, 9, 43, 22, 112, 141, 20, 229, 24, 243, 26, 239, 97, 193, 190, 253, 194, 12, 165, 118, 247, 49, 54, 223, 133, 156, 51, 195, 235, 171, 210, 234, 80, 68, 170, 233, 73, 21, 173, 28, 89, 2, 144, 151, 96, 169, 254, 240, 122, 184, 204, 128, 175, 210, 186, 84, 176, 110, 75, 196, 126, 124, 186, 196, 226, 230, 127, 117, 136, 180, 249, 19, 26, 155, 65, 1, 165, 194, 213, 99, 72, 53, 206, 138, 208, 225, 212, 244, 161, 226, 241, 106, 120, 14, 107, 77, 184, 125, 61, 39, 52, 67, 18, 223, 95, 169, 157, 158, 235, 2, 196, 182, 156, 124, 161, 252, 117, 106, 183, 156, 14, 103, 0, 153, 174, 189, 12, 94, 150, 53, 230, 146, 245, 180, 194, 193, 172, 148, 116, 169, 45, 158, 24, 72, 164, 183, 198, 200, 92, 175, 65, 159, 77, 30, 89, 157, 45, 233, 121, 100, 54, 58, 247, 214, 7, 163, 118, 43, 109, 194, 186, 13, 98, 42, 145, 8, 242, 144, 29, 71, 136, 124, 253, 172, 254, 70, 12, 200, 156, 184, 196, 127, 46, 79, 6, 206, 167, 37, 110, 158, 30, 23, 177, 21, 198, 6, 186, 231, 31, 30, 74, 13, 2, 173, 62, 219, 229, 70, 5, 22, 160, 242, 168, 72, 51, 203, 8, 234, 185, 220, 99, 43, 96, 157, 225, 117, 214, 34, 245, 85, 2, 213, 228, 24, 57, 5, 3, 151, 204, 208, 33, 2, 56, 122, 198, 164, 224, 202, 52, 82, 199, 116, 63, 114, 145, 158, 119, 210, 237, 127, 255, 198, 175, 208, 20, 162, 139, 27, 182, 224, 174, 118, 114, 243, 117, 137, 170, 198, 138, 244, 220, 1, 99, 239, 103, 196, 125, 6, 175, 154, 210, 86, 128, 251, 129, 115, 152, 65, 241, 171, 132, 39, 183, 8, 122, 77, 96, 233, 220, 201, 98, 37, 85, 83, 172, 40, 138, 189, 76, 43, 62, 89, 64, 172, 187, 132, 214, 210, 70, 10, 25, 144, 224, 224, 165, 254, 17, 207, 46, 77, 63, 152, 147, 47, 51, 181, 129, 181, 23, 211, 166, 96, 219, 33, 55, 235, 192, 101, 69, 105, 195, 23, 202, 52, 16, 183, 157, 206, 48, 158, 104, 175, 177, 216, 0, 203, 85, 82, 182, 51, 182, 114, 62, 7, 45, 20, 133, 70, 114, 217, 233, 186, 221, 149, 73, 158, 28, 132, 243, 60, 167, 75, 90, 94, 243, 165, 170, 134, 104, 40, 153, 27, 237, 184, 23, 232, 188, 11, 238, 131, 88, 209, 126, 188, 96, 9, 167, 178, 195, 117, 194, 140, 154, 100, 144, 231, 81, 186, 0, 53, 88, 209, 214, 141, 204, 251, 208, 91, 160, 113, 231, 4, 213, 92, 70, 176, 22, 115, 92, 179, 20, 191, 225, 204, 14, 243, 196, 206, 116, 42, 108, 28, 15, 143, 156, 29, 9, 220, 178, 0, 134, 83, 68, 224, 218, 129, 126, 114, 5, 24, 169, 67, 239, 35, 146, 226, 172, 249, 234, 66, 69, 110, 44, 191, 70, 63, 41, 144, 53, 157, 223, 216, 64, 57, 160, 88, 100, 122, 220, 218, 153, 171, 83, 76, 139, 225, 198, 192, 32, 210, 216, 245, 143, 123, 166, 84, 66, 163, 179, 10, 43, 189, 230, 100, 188, 124, 139, 216, 154, 151, 104, 57, 75, 109, 204, 79, 147, 56, 25, 84, 32, 99, 198, 246, 62, 17, 208, 194, 253, 219, 174, 176, 180, 94, 43, 194, 59, 145, 148, 58, 38, 71, 12, 148, 226, 146, 120, 189, 102, 225, 53, 129, 71, 142, 132, 181, 26, 248, 74, 34, 95, 158, 54, 130, 211, 212, 105, 165, 241, 43, 54, 229, 111, 12, 0, 237, 140, 190, 116, 78, 171, 73, 132, 147, 25, 53, 128, 252, 118, 218, 130, 133, 41, 234, 236, 252, 11, 160, 104, 108, 85, 159, 179, 153, 142, 168, 61, 139, 243, 219, 57, 252, 211, 55, 130, 11, 76, 240, 69, 240, 45, 47, 10, 10, 178, 11, 239, 186, 198, 166, 157, 213, 111, 156, 201, 2, 244, 152, 137, 153, 212, 42, 55, 165, 120, 215, 160, 133, 127, 24, 133, 176, 202, 171, 28, 165, 7, 49, 251, 97, 54, 16, 164, 203, 226, 51, 238, 88, 22, 135, 20, 66, 144, 212, 37, 115, 192, 128, 82, 79, 157, 55, 249, 39, 85, 154, 28, 72, 157, 70, 212, 49, 134, 69, 237, 95, 70, 154, 125, 248, 169, 102, 112, 103, 104, 186, 25, 204, 188, 155, 228, 118, 30, 76, 254, 83, 95, 146, 53, 220, 51, 72, 49, 28, 64, 145, 226, 59, 86, 109, 251, 83, 68, 32, 255, 24, 36, 135, 65, 173, 137, 166, 155, 227, 118, 0, 43, 55, 111, 139, 216, 46, 7, 201, 157, 8, 206, 74, 117, 21, 221, 161, 183, 53, 97, 190, 23, 220, 254, 139, 56, 123, 42, 154, 68, 40, 106, 99, 175, 19, 118, 52, 141, 215, 5, 7, 206, 117, 192, 132, 177, 167, 99, 236, 170, 197, 207, 226, 189, 106, 253, 191, 26, 36, 112, 186, 174, 125, 141, 59, 37, 252, 110, 111, 233, 145, 61, 184, 217, 151, 26, 224, 26, 123, 170, 238, 214, 35, 17, 132, 44, 66, 42, 246, 150, 99, 112, 225, 125, 154, 54, 81, 197, 242, 236, 220, 60, 130, 71, 24, 177, 78, 245, 244, 21, 62, 236, 49, 222, 63, 194, 8, 165, 86, 62, 126, 121, 200, 208, 244, 8, 13, 40, 24, 148, 120, 213, 63, 151, 160, 175, 3, 153, 11, 66, 52, 217, 176, 145, 95, 180, 118, 60, 88, 19, 205, 87, 235, 27, 60, 30, 151, 132, 13, 232, 61, 138, 201, 33, 216, 90, 116, 163, 221, 49, 164, 48, 66, 173, 248, 129, 222, 54, 201, 235, 9, 111, 44, 151, 46, 46, 203, 215, 222, 100, 172, 221, 178, 245, 15, 23, 163, 21, 93, 134, 247, 198, 200, 29, 162, 253, 1, 30, 205, 246, 247, 164, 105, 234, 29, 127, 102, 164, 65, 96, 150, 211, 138, 61, 45, 207, 17, 154, 105, 225, 7, 238, 97, 124, 8, 96, 153, 134, 193, 6, 237, 65, 122, 235, 34, 227, 181, 216, 47, 191, 112, 53, 47, 201, 1, 10, 1, 176, 222, 146, 63, 36, 147, 200, 227, 182, 228, 190, 232, 187, 144, 90, 134, 124, 185, 210, 221, 102, 8, 222, 212, 135, 188, 177, 207, 137, 148, 46, 174, 77, 162, 157, 182, 117, 38, 48, 195, 164, 191, 168, 76, 5, 76, 169, 62, 245, 232, 148, 144, 102, 162, 47, 13, 234, 65, 30, 182, 183, 145, 1, 170, 65, 138, 41, 184, 21, 77, 185, 15, 210, 94, 246, 75, 219, 174, 102, 250, 230, 227, 59, 20, 200, 68, 244, 234, 231, 67, 87, 71, 140, 41, 198, 58, 89, 219, 87, 102, 50, 53, 111, 234, 154, 111, 61, 65, 92, 246, 121, 99, 221, 29, 238, 225, 81, 20, 93, 27, 205, 149, 185, 114, 101, 191, 224, 54, 194, 245, 179, 15, 114, 227, 223, 210, 76, 126, 90, 139, 232, 250, 148, 56, 26, 192, 101, 189, 50, 22, 246, 153, 126, 21, 75, 106, 44, 148, 199, 243, 117, 83, 40, 84, 211, 251, 52, 74, 83, 206, 250, 44, 60, 155, 77, 5, 4, 176, 170, 218, 229, 25, 192, 121, 190, 24, 217, 15, 134, 72, 56, 81, 253, 49, 23, 132, 119, 100, 7, 0, 176, 17, 96, 126, 177, 198, 100, 240, 59, 85, 250, 70, 112, 103, 190, 62, 83, 241, 90, 56, 23, 232, 167, 210, 179, 120, 4, 132, 37, 80, 119, 122, 122, 224, 245, 77, 226, 9, 71, 119, 177, 127, 81, 207, 39, 231, 95, 101, 150, 249, 12, 106, 152, 159, 75, 210, 244, 110, 32, 39, 24, 79, 136, 101, 233, 131, 16, 128, 215, 240, 111, 238, 175, 166, 248, 87, 180, 141, 232, 88, 133, 49, 9, 208, 81, 233, 78, 116, 136, 182, 49, 147, 78, 133, 227, 54, 41, 128, 131, 28, 179, 113, 6, 184, 81, 78, 87, 209, 154, 216, 242, 60, 53, 220, 10, 73, 32, 72, 179, 196, 209, 175, 136, 208, 86, 15, 209, 167, 191, 22, 32, 6, 151, 218, 89, 14, 40, 115, 2, 197, 133, 149, 189, 250, 214, 73, 41, 136, 47, 210, 208, 66, 3, 233, 75, 166, 53, 190, 29, 216, 218, 39, 4, 24, 251, 193, 173, 184, 110, 127, 129, 126, 181, 239, 162, 49, 129, 5, 129, 104, 150, 92, 103, 218, 173, 203, 228, 252, 228, 31, 34, 112, 37, 196, 240, 189, 30, 73, 166, 18, 42, 62, 7, 177, 236, 147, 152, 11, 75, 215, 170, 37, 226, 122, 157, 247, 177, 74, 20, 32, 105, 174, 184, 11, 207, 214, 163, 112, 3, 66, 165, 79, 24, 250, 193, 227, 5, 113, 32, 63, 203, 117, 51, 224, 233, 88, 138, 189, 12, 153, 104, 20, 149, 109, 138, 208, 217, 52, 63, 92, 180, 140, 87, 177, 249, 217, 223, 70, 228, 139, 165, 67, 47, 252, 139, 211, 35, 97, 109, 71, 218, 137, 186, 241, 215, 57, 156, 65, 116, 212, 254, 245, 160, 44, 65, 12, 43, 205, 86, 91, 238, 54, 46, 149, 178, 29, 193, 6, 153, 47, 83, 241, 70, 107, 111, 131, 192, 35, 176, 39, 55, 32, 7, 79, 169, 30, 192, 91, 92, 15, 82, 109, 15, 200, 246, 252, 231, 190, 5, 180, 250, 149, 194, 234, 114, 30, 101, 38, 135, 216, 159, 102, 17, 169, 225, 123, 146, 34, 180, 154, 25, 92, 144, 15, 139, 80, 227, 72, 128, 201, 55, 134, 146, 190, 30, 196, 176, 31, 87, 64, 210, 217, 128, 136, 210, 37, 66, 21, 162, 0, 17, 26, 21, 142, 159, 132, 245, 17, 200, 40, 207, 164, 89, 100, 228, 220, 140, 9, 217, 24, 31, 161, 31, 195, 137, 189, 212, 81, 174, 208, 164, 22, 49, 148, 13, 230, 163, 153, 187, 181, 18, 197, 66, 80, 20, 32, 158, 109, 110, 165, 167, 228, 197, 232, 19, 130, 72, 36, 145, 26, 26, 74, 179, 165, 98, 226, 175, 173, 177, 173, 210, 73, 50, 140, 252, 162, 29, 171, 197, 229, 101, 160, 234, 70, 20, 141, 148, 6, 139, 23, 234, 237, 132, 4, 181, 209, 8, 11, 239, 180, 175, 209, 73, 10, 228, 68, 121, 146, 171, 254, 33, 170, 183, 111, 143, 168, 135, 210, 236, 244, 95, 145, 169, 72, 41, 63, 63, 245, 78, 185, 199, 9, 214, 167, 197, 18, 97, 79, 100, 196, 33, 149, 103, 64, 53, 245, 138, 21, 61, 10, 155, 115, 224, 124, 69, 184, 203, 100, 239, 190, 14, 195, 175, 86, 182, 240, 254, 220, 45, 226, 128, 89, 190, 102, 101, 32, 162, 8, 245, 133, 1, 136, 99, 233, 231, 90, 63, 46, 118, 134, 150, 241, 194, 203, 168, 69, 68, 5, 46, 81, 144, 155, 83, 57, 216, 199, 50, 198, 255, 255, 224, 30, 229, 105, 130, 194, 117, 233, 170, 157, 101, 217, 37, 221, 37, 201, 41, 216, 166, 193, 179, 5, 190, 42, 197, 135, 14, 36, 180, 60, 135, 92, 151, 14, 8, 33, 82, 85, 27, 169, 243, 38, 103, 68, 110, 105, 249, 190, 237, 172, 115, 247, 131, 139, 195, 119, 250, 84, 151, 88, 137, 179, 10, 43, 222, 136, 37, 113, 159, 107, 164, 97, 192, 152, 28, 251, 9, 173, 188, 205, 66, 205, 50, 248, 91, 232, 85, 32, 112, 11, 232, 142, 44, 228, 181, 49, 37, 72, 131, 40, 210, 217, 30, 139, 139, 5, 80, 65, 45, 8, 10, 113, 194, 189, 41, 15, 62, 194, 109, 119, 106, 245, 172, 41, 129, 186, 152, 88, 148, 4, 64, 92, 29, 44, 160, 161, 21, 190, 33, 166, 102, 193, 232, 215, 185, 169, 214, 48, 44, 244, 27, 205, 80, 193, 170, 226, 8, 93, 18, 98, 141, 128, 2, 95, 51, 98, 181, 47, 164, 229, 53, 146, 37, 239, 208, 76, 182, 52, 147, 145, 210, 233, 169, 25, 86, 249, 127, 167, 243, 130, 129, 15, 72, 198, 168, 115, 114, 5, 13, 65, 18, 153, 154, 87, 119, 229, 193, 205, 124, 176, 242, 236, 230, 238, 235, 142, 185, 5, 12, 7, 16, 122, 75, 156, 27, 63, 193, 184, 225, 158, 221, 232, 94, 69, 58, 200, 11, 168, 82, 94, 14, 187, 138, 37, 209, 199, 90, 31, 177, 123, 61, 156, 151, 169, 140, 151, 33, 42, 232, 207, 33, 198, 40, 18, 38, 146, 160, 92, 120, 202, 49, 236, 103, 88, 52, 218, 219, 77, 79, 199, 237, 95, 206, 228, 180, 229, 61, 219, 25, 196, 130, 126, 106, 89, 14, 179, 252, 9, 63, 239, 25, 224, 30, 62, 161, 41, 94, 175, 243, 80, 86, 44, 153, 79, 133, 142, 150, 149, 193, 200, 145, 188, 236, 234, 25, 110, 38, 41, 30, 164, 61, 218, 39, 249, 216, 163, 185, 145, 73, 129, 134, 127, 227, 68, 122, 231, 47, 22, 241, 22, 246, 223, 124, 149, 236, 120, 114, 239, 154, 244, 32, 170, 229, 15, 155, 59, 231, 168, 230, 102, 74, 131, 53, 71, 35, 254, 174, 108, 174, 249, 189, 147, 174, 159, 152, 55, 233, 212, 72, 104, 245, 42, 12, 47, 244, 78, 185, 247, 39, 26, 51, 113, 108, 133, 5, 94, 79, 29, 18, 152, 246, 67, 84, 17, 231, 129, 12, 82, 144, 51, 159, 206, 9, 90, 121, 117, 248, 101, 130, 143, 117, 113, 232, 89, 46, 49, 205, 213, 156, 20, 195, 210, 132, 135, 199, 84, 95, 210, 142, 129, 195, 67, 217, 214, 56, 179, 56, 236, 121, 160, 98, 29, 49, 157, 137, 240, 110, 52, 0, 235, 242, 28, 207, 180, 160, 254, 89, 124, 152, 162, 159, 203, 168, 164, 24, 110, 65, 63, 32, 94, 247, 197, 207, 214, 71, 1, 241, 120, 202, 148, 2, 78, 5, 115, 232, 22, 203, 91, 154, 156, 255, 51, 245, 145, 92, 236, 4, 207, 134, 146, 238, 145, 167, 114, 102, 1, 157, 186, 169, 239, 203, 104, 214, 15, 105, 59, 11, 83, 203, 35, 130, 112, 65, 237, 20, 161, 214, 141, 23, 55, 100, 114, 100, 175, 238, 102, 23, 80, 203, 146, 5, 242, 214, 24, 238, 193, 175, 244, 218, 220, 195, 95, 102, 141, 101, 64, 83, 6, 194, 91, 136, 220, 237, 201, 35, 53, 106, 87, 171, 138, 94, 20, 47, 194, 225, 63, 138, 199, 64, 42, 150, 153, 140, 67, 154, 9, 52, 121, 147, 85, 253, 28, 164, 140, 214, 119, 131, 78, 198, 174, 176, 166, 240, 243, 241, 168, 215, 113, 62, 230, 21, 232, 233, 32, 208, 43, 104, 245, 34, 232, 113, 194, 160, 128, 28, 186, 206, 233, 238, 251, 111, 170, 221, 234, 214, 251, 243, 115, 114, 182, 69, 1, 13, 83, 183, 29, 123, 113, 208, 183, 161, 68, 199, 52, 221, 50, 67, 97, 230, 16, 240, 131, 190, 86, 37, 188, 50, 49, 160, 35, 206, 8, 80, 17, 1, 53, 237, 53, 255, 198, 54, 233, 115, 2, 223, 7, 56, 76, 188, 93, 180, 116, 146, 22, 242, 206, 243, 9, 51, 94, 77, 196, 38, 26, 180, 183, 202, 48, 229, 17, 56, 136, 58, 248, 5, 54, 130, 91, 17, 137, 89, 243, 210, 68, 188, 139, 48, 88, 196, 192, 125, 152, 51, 210, 33, 120, 114, 228, 178, 8, 171, 232, 83, 138, 3, 189, 108, 42, 124, 208, 150, 226, 12, 45, 50, 175, 178, 148, 65, 102, 252, 185, 65, 9, 50, 157, 195, 198, 227, 238, 14, 120, 5, 217, 58, 200, 74, 36, 35, 214, 125, 205, 242, 205, 130, 20, 220, 37, 99, 117, 168, 76, 151, 136, 136, 230, 47, 229, 85, 85, 249, 245, 19, 6, 70, 76, 52, 245, 39, 202, 24, 4, 137, 129, 134, 28, 31, 225, 166, 3, 55, 115, 104, 178, 104, 94, 141, 67, 17, 98, 5, 162, 113, 36, 81, 132, 185, 200, 245, 214, 156, 201, 91, 139, 163, 16, 143, 215, 66, 170, 128, 142, 119, 85, 195, 148, 1, 106, 166, 36, 42, 211, 173, 46, 244, 96, 219, 154, 17, 174, 241, 255, 96, 29, 146, 97, 56, 122, 75, 203, 94, 18, 160, 4, 36, 220, 31, 138, 26, 147, 122, 91, 249, 181, 185, 232, 180, 46, 13, 206, 231, 146, 220, 114, 11, 246, 35, 200, 117, 184, 221, 242, 235, 222, 120, 188, 125, 15, 173, 163, 116, 211, 205, 1, 191, 84, 105, 109, 146, 205, 237, 228, 185, 221, 226, 142, 137, 180, 115, 125, 184, 32, 27, 135, 247, 149, 171, 167, 197, 4, 44, 170, 70, 116, 159, 96, 102, 53, 111, 92, 113, 168, 15, 5, 66, 236, 10, 75, 254, 251, 70, 183, 84, 192, 4, 206, 70, 44, 130, 70, 87, 22, 209, 118, 36, 212, 35, 45, 147, 40, 105, 172, 214, 39, 201, 231, 184, 10, 189, 97, 37, 201, 28, 223, 33, 250, 12, 108, 5, 36, 46, 169, 25, 60, 119, 50, 221, 216, 86, 100, 9, 128, 45, 41, 202, 248, 14, 15, 157, 247, 158, 25, 157, 8, 31, 35, 97, 208, 187, 26, 165, 10, 253, 211, 213, 9, 72, 183, 37, 254, 32, 174, 224, 117, 167, 194, 106, 82, 23, 135, 34, 188, 222, 200, 227, 73, 61, 242, 243, 63, 109, 130, 177, 254, 144, 89, 148, 178, 187, 61, 95, 80, 135, 137, 132, 11, 105, 49, 5, 50, 18, 212, 158, 118, 5, 247, 17, 89, 77, 242, 78, 74, 70, 56, 116, 172, 169, 140, 64, 87, 135, 95, 6, 10, 145, 57, 156, 143, 246, 111, 26, 103, 86, 166, 1, 9, 242, 107, 38, 214, 51, 147, 50, 87, 202, 193, 105, 101, 238, 244, 28, 108, 27, 111, 194, 166, 200, 36, 157, 146, 245, 138, 236, 121, 105, 116, 177, 47, 9, 149, 64, 196, 194, 7, 14, 20, 49, 54, 249, 112, 184, 10, 112, 180, 14, 17, 50, 27, 102, 245, 157, 159, 34, 8, 148, 124, 255, 225, 36, 5, 192, 203, 219, 189, 212, 240, 109, 201, 68, 213, 121, 40, 127, 214, 142, 117, 51, 210, 207, 129, 111, 86, 150, 249, 124, 110, 215, 177, 191, 202, 18, 30, 122, 247, 169, 104, 212, 119, 159, 109, 46, 28, 247, 73, 193, 17, 116, 165, 121, 135, 149, 137, 253, 92, 51, 200, 196, 243, 224, 122, 234, 34, 151, 114, 91, 94, 186, 197, 172, 213, 27, 78, 202, 52, 198, 31, 236, 183, 129, 27, 28, 15, 191, 16, 144, 73, 74, 35, 168, 20, 191, 40, 111, 88, 12, 159, 157, 205, 252, 75, 90, 202, 106, 62, 58, 248, 113, 250, 217, 122, 39, 102, 103, 161, 197, 119, 44, 149, 13, 207, 201, 72, 179, 30, 190, 112, 153, 137, 152, 119, 217, 19, 218, 238, 247, 28, 230, 133, 206, 43, 109, 109, 225, 147, 121, 89, 63, 182, 25, 153, 169, 141, 203, 108, 97, 10, 179, 180, 120, 155, 59, 219, 63, 70, 202, 156, 14, 170, 85, 144, 228, 96, 212, 57, 131, 247, 111, 195, 51, 147, 198, 229, 72, 17, 25, 20, 68, 222, 36, 69, 52, 46, 213, 160, 155, 42, 203, 165, 140, 218, 47, 146, 0, 29, 16, 222, 181, 32, 140, 193, 60, 0, 214, 107, 21, 231, 65, 235, 197, 128, 23, 238, 45, 173, 11, 164, 51, 7, 116, 11, 22, 230, 90, 201, 108, 131, 251, 224, 159, 12, 240, 146, 73, 147, 40, 27, 78, 23, 60, 133, 60, 211, 129, 104, 188, 64, 153, 230, 84, 2, 107, 0, 228, 6, 66, 44, 93, 120, 189, 39, 161, 239, 250, 39, 163, 194, 248, 187, 8, 248, 143, 71, 194, 163, 1, 164, 233, 159, 140, 189, 25, 229, 93, 185, 20, 12, 144, 205, 41, 82, 73, 13, 100, 253, 72, 238, 104, 19, 84, 6, 212, 62, 136, 40, 75, 101, 208, 251, 143, 52, 234, 251, 60, 79, 21, 45, 9, 10, 224, 14, 65, 241, 215, 168, 17, 135, 55, 129, 247, 115, 153, 124, 34, 254, 36, 65, 58, 175, 68, 98, 243, 50, 4, 43, 254, 65, 180, 230, 83, 216, 250, 38, 123, 51, 111, 244, 59, 39, 159, 49, 129, 178, 198, 39, 142, 213, 99, 24, 205, 39, 92, 254, 194, 64, 226, 79, 214, 246, 238, 0, 39, 122, 57, 181, 118, 114, 223, 23, 29, 113, 156, 79, 238, 55, 231, 105, 218, 15, 175, 70, 9, 149, 5, 36, 236, 0, 128, 207, 221, 33, 93, 64, 74, 115, 218, 186, 166, 69, 105, 190, 203, 35, 98, 105, 113, 65, 152, 216, 12, 8, 217, 85, 63, 185, 158, 187, 76, 27, 239, 46, 30, 20, 98, 140, 92, 26, 194, 101, 93, 23, 148, 241, 57, 103, 54, 195, 253, 102, 242, 255, 81, 26, 76, 14, 23, 151, 2, 72, 100, 155, 177, 94, 245, 81, 78, 77, 91, 46, 16, 111, 32, 162, 235, 79, 152, 159, 29, 76, 239, 99, 21, 66, 221, 237, 209, 92, 15, 85, 110, 165, 95, 158, 202, 92, 124, 76, 141, 161, 72, 196, 113, 69, 56, 87, 89, 195, 14, 85, 218, 97, 239, 72, 98, 60, 171, 110, 38, 227, 88, 183, 237, 92, 149, 142, 127, 118, 99, 174, 32, 55, 121, 212, 202, 140, 131, 200, 136, 69, 4, 226, 134, 241, 119, 27, 208, 4, 86, 77, 87, 173, 137, 165, 42, 223, 193, 5, 137, 81, 182, 152, 231, 240, 205, 104, 186, 149, 112, 129, 117, 57, 3, 73, 19, 167, 1, 11, 53, 229, 27, 94, 134, 75, 112, 83, 153, 38, 65, 56, 60, 54, 177, 23, 227, 132, 249, 164, 109, 75, 207, 178, 34, 124, 242, 236, 153, 19, 45, 175, 129, 125, 224, 21, 215, 130, 233, 62, 192, 146, 182, 49, 183, 54, 230, 121, 252, 138, 239, 130, 81, 94, 42, 205, 157, 156, 33, 177, 242, 53, 18, 4, 63, 185, 112, 30, 195, 96, 230, 134, 205, 32, 221, 49, 149, 135, 57, 49, 225, 240, 41, 238, 129, 164, 35, 97, 209, 78, 242, 49, 22, 255, 103, 134, 12, 136, 104, 68, 203, 201, 69, 253, 176, 66, 220, 139, 28, 0, 195, 21, 76, 159, 152, 39, 97, 226, 27, 253, 25, 176, 207, 116, 52, 182, 226, 176, 202, 192, 181, 78, 239, 81, 143, 62, 208, 74, 242, 30, 74, 4, 249, 58, 91, 66, 255, 130, 92, 89, 223, 202, 109, 68, 93, 117, 3, 56, 129, 211, 27, 56, 159, 178, 220, 14, 246, 63, 82, 94, 50, 8, 60, 182, 122, 158, 249, 121, 203, 240, 119, 7, 51, 200, 195, 192, 108, 96, 129, 245, 145, 142, 192, 25, 210, 65, 6, 187, 251, 106, 198, 215, 107, 37, 4, 84, 26, 164, 198, 63, 139, 85, 147, 157, 156, 1, 183, 248, 108, 173, 216, 49, 80, 59, 80, 75, 243, 152, 150, 155, 151, 0, 169, 208, 65, 208, 171, 135, 201, 187, 59, 65, 9, 225, 58, 247, 108, 176, 141, 20, 25, 116, 50, 33, 130, 138, 44, 41, 213, 88, 160, 135, 42, 158, 17, 172, 7, 126, 45, 87, 111, 149, 49, 169, 94, 230, 62, 157, 188, 99, 151, 65, 97, 101, 30, 199, 224, 171, 130, 217, 33, 16, 197, 203, 172, 79, 13, 91, 101, 190, 3, 124, 90, 3, 140, 152, 248, 25, 240, 175, 102, 109, 45, 44, 167, 124, 143, 27, 66, 70, 221, 144, 157, 118, 61, 21, 116, 201, 206, 129, 220, 176, 70, 188, 77, 83, 179, 38, 55, 180, 223, 122, 103, 126, 189, 80, 160, 241, 130, 209, 150, 233, 14, 68, 7, 143, 160, 5, 131, 57, 76, 241, 80, 157, 191, 104, 205, 100, 56, 219, 83, 79, 8, 167, 17, 69, 111, 56, 81, 149, 224, 42, 200, 128, 123, 228, 241, 196, 32, 42, 16, 102, 60, 250, 140, 18, 189, 99, 223, 93, 157, 144, 55, 179, 136, 175, 83, 64, 63, 137, 57, 35, 85, 40, 242, 207, 30, 13, 239, 69, 142, 127, 211, 209, 38, 75, 191, 188, 205, 141, 121, 14, 255, 208, 119, 224, 86, 186, 183, 136, 83, 230, 185, 6, 114, 193, 36, 149, 34, 117, 112, 163, 189, 233, 248, 170, 88, 136, 0, 47, 211, 28, 234, 58, 223, 97, 84, 87, 154, 202, 138, 104, 141, 197, 29, 0, 176, 32, 44, 200, 99, 116, 51, 15, 9, 117, 218, 255, 136, 87, 48, 200, 125, 210, 38, 100, 160, 158, 217, 141, 116, 172, 93, 159, 207, 158, 207, 112, 40, 232, 15, 232, 194, 147, 76, 148, 145, 24, 81, 106, 66, 31, 77, 84, 67, 3, 150, 109, 180, 108, 148, 149, 254, 82, 251, 163, 33, 120, 242, 126, 150, 134, 158, 195, 117, 109, 92, 74, 170, 205, 159, 68, 49, 37, 93, 111, 20, 227, 112, 145, 40, 230, 227, 54, 12, 139, 7, 247, 116, 126, 122, 20, 36, 182, 67, 73, 2, 192, 74, 14, 80, 27, 115, 227, 228, 80, 234, 28, 56, 215, 231, 227, 43, 87, 157, 98, 26, 134, 234, 240, 51, 171, 92, 44, 180, 57, 181, 255, 32, 19, 111, 74, 165, 122, 222, 149, 134, 4, 221, 221, 115, 182, 250, 241, 5, 230, 66, 80, 144, 84, 12, 124, 201, 243, 9, 95, 137, 199, 225, 90, 81, 90, 158, 212, 54, 32, 169, 98, 202, 83, 56, 193, 139, 84, 10, 105, 143, 87, 181, 83, 188, 78, 97, 63, 71, 103, 123, 171, 18, 129, 123, 154, 90, 170, 153, 224, 139, 128, 122, 87, 185, 123, 96, 15, 138, 66, 127, 240, 198, 170, 168, 38, 194, 113, 59, 77, 174, 251, 251, 3, 206, 70, 127, 156, 98, 118, 110, 58, 209, 123, 170, 139, 124, 15, 176, 134, 242, 58, 163, 12, 68, 208, 48, 14, 218, 86, 239, 62, 203, 173, 252, 156, 164, 90, 154, 106, 59, 40, 74, 49, 224, 154, 71, 129, 220, 120, 39, 9, 53, 235, 47, 58, 1, 112, 135, 221, 70, 63, 158, 12, 105, 51, 153, 112, 188, 117, 176, 43, 66, 252, 152, 69, 92, 196, 209, 245, 37, 231, 83, 8, 20, 11, 42, 215, 175, 192, 135, 36, 112, 248, 187, 128, 116, 32, 199, 177, 35, 183, 51, 210, 55, 15, 150, 18, 202, 125, 224, 196, 149, 114, 72, 87, 190, 13, 179, 53, 60, 104, 28, 158, 30, 152, 236, 76, 231, 50, 70, 8, 209, 213, 200, 105, 66, 35, 205, 115, 197, 71, 5, 137, 2, 81, 235, 74, 10, 34, 185, 214, 18, 16, 127, 35, 86, 165, 233, 159, 52, 230, 8, 57, 152, 157, 206, 164, 154, 72, 129, 23, 252, 233, 184, 99, 247, 24, 192, 169, 88, 104, 90, 162, 220, 177, 18, 75, 78, 21, 230, 0, 165, 229, 167, 228, 91, 238, 47, 243, 6, 167, 249, 36, 144, 113, 223, 152, 44, 168, 10, 254, 175, 208, 92, 222, 41, 123, 178, 174, 94, 91, 170, 138, 219, 149, 38, 48, 37, 142, 131, 19, 170, 178, 151, 185, 141, 101, 249, 135, 68, 122, 211, 151, 203, 212, 112, 66, 44, 7, 14, 245, 198, 180, 51, 16, 171, 48, 147, 3, 210, 147, 99, 184, 36, 129, 68, 218, 14, 150, 137, 48, 10, 164, 242, 102, 238, 58, 129, 226, 58, 254, 190, 145, 52, 5, 3, 56, 17, 87, 188, 87, 231, 118, 164, 126, 85, 186, 245, 159, 106, 41, 81, 37, 171, 215, 225, 249, 218, 211, 63, 8, 52, 158, 114, 116, 146, 86, 214, 28, 141, 203, 252, 213, 82, 215, 171, 36, 177, 69, 90, 55, 29, 22, 102, 244, 162, 202, 1, 56, 79, 44, 219, 66, 59, 10, 190, 39, 46, 45, 227, 180, 80, 176, 186, 97, 106, 251, 114, 189, 98, 229, 186, 2, 42, 70, 218, 63, 254, 253, 179, 35, 42, 71, 46, 251, 250, 244, 157, 167, 8, 246, 166, 186, 144, 245, 76, 145, 216, 195, 211, 93, 169, 141, 94, 236, 4, 247, 201, 249, 79, 9, 172, 163, 232, 8, 211, 160, 102, 168, 54, 62, 179, 8, 146, 177, 89, 34, 249, 198, 103, 28, 202, 90, 70, 193, 101, 160, 129, 155, 223, 162, 44, 112, 16, 230, 146, 46, 50, 17, 40, 142, 251, 234, 136, 33, 121, 253, 202, 32, 53, 47, 237, 69, 197, 89, 188, 13, 132, 61, 120, 20, 140, 67, 138, 113, 162, 53, 164, 74, 162, 254, 29, 21, 236, 207, 100, 210, 82, 75, 12, 85, 154, 63, 47, 158, 218, 116, 71, 107, 222, 190, 103, 58, 249, 149, 216, 18, 23, 166, 43, 106, 48, 239, 53, 194, 24, 245, 230, 165, 151, 108, 237, 153, 47, 111, 13, 43, 22, 205, 231, 52, 75, 41, 64, 184, 87, 95, 137, 195, 116, 231, 33, 49, 173, 187, 209, 39, 248, 202, 67, 156, 249, 226, 137, 11, 179, 93, 113, 67, 233, 197, 246, 42, 182, 79, 111, 148, 91, 133, 183, 89, 156, 97, 174, 64, 240, 190, 42, 107, 167, 173, 43, 232, 98, 128, 162, 27, 30, 254, 90, 251, 97, 220, 95, 161, 167, 151, 96, 193, 39, 97, 222, 32, 114, 141, 210, 156, 160, 114, 78, 101, 45, 180, 237, 110, 133, 81, 84, 145, 175, 170, 94, 106, 203, 135, 30, 157, 251, 60, 230, 191, 5, 142, 104, 54, 26, 213, 216, 94, 164, 37, 235, 143, 225, 206, 76, 245, 69, 76, 112, 136, 157, 71, 196, 21, 248, 99, 121, 182, 224, 160, 224, 146, 245, 95, 118, 198, 217, 230, 86, 178, 193, 114, 72, 213, 152, 195, 201, 33, 173, 169, 152, 15, 172, 91, 247, 247, 19, 73, 233, 10, 77, 114, 82, 108, 233, 52, 143, 170, 230, 227, 193, 73, 70, 72, 241, 61, 17, 14, 166, 149, 238, 149, 111, 28, 103, 140, 133, 119, 211, 130, 63, 57, 89, 43, 179, 75, 242, 3, 43, 158, 140, 135, 8, 234, 216, 32, 156, 93, 63, 75, 106, 106, 205, 124, 230, 120, 27, 255, 138, 118, 198, 63, 203, 215, 159, 249, 8, 96, 34, 81, 80, 60, 214, 231, 101, 131, 65, 14, 13, 228, 162, 249, 217, 43, 23, 107, 161, 78, 61, 144, 6, 254, 220, 117, 176, 1, 31, 67, 220, 27, 137, 231, 23, 187, 140, 205, 33, 122, 95, 47, 153, 36, 184, 182, 97, 121, 190, 144, 102, 79, 5, 55, 62, 68, 192, 28, 130, 30, 25, 4, 52, 81, 40, 105, 191, 243, 236, 108, 157, 25, 185, 214, 198, 37, 15, 241, 107, 15, 219, 191, 29, 133, 134, 114, 172, 231, 179, 146, 70, 98, 186, 136, 48, 142, 173, 34, 77, 192, 228, 232, 23, 161, 69, 3, 31, 28, 185, 29, 109, 91, 130, 87, 74, 249, 178, 0, 95, 103, 244, 208, 238, 224, 192, 206, 183, 181, 47, 224, 22, 80, 216, 183, 41, 50, 87, 138, 15, 109, 67, 103, 3, 90, 206, 222, 191, 152, 79, 45, 210, 54, 26, 3, 171, 194, 103, 233, 100, 1, 27, 102, 202, 19, 1, 48, 142, 28, 153, 152, 184, 160, 252, 226, 167, 98, 193, 115, 118, 67, 232, 12, 201, 212, 240, 49, 56, 45, 122, 137, 101, 104, 169, 160, 91, 134, 139, 163, 4, 83, 100, 51, 103, 130, 111, 11, 53, 128, 241, 5, 241, 60, 17, 40, 218, 130, 142, 237, 173, 51, 85, 26, 254, 185, 64, 48, 82, 44, 23, 44, 76, 249, 89, 94, 36, 159, 16, 19, 64, 49, 82, 93, 111, 185, 131, 95, 91, 66, 76, 107, 89, 159, 77, 73, 67, 132, 8, 127, 0, 49, 171, 115, 92, 167, 166, 222, 224, 239, 117, 73, 87, 19, 109, 12, 124, 236, 40, 181, 74, 92, 35, 92, 149, 35, 46, 21, 95, 123, 200, 219, 33, 96, 92, 209, 206, 165, 244, 100, 216, 208, 243, 182, 220, 240, 61, 49, 22, 203, 14, 167, 66, 213, 233, 94, 174, 180, 218, 42, 46, 36, 60, 199, 241, 99, 231, 114, 243, 73, 196, 245, 163, 234, 140, 168, 107, 225, 17, 51, 90, 181, 2, 216, 112, 184, 127, 130, 124, 37, 43, 161, 227, 76, 8, 208, 14, 180, 142, 226, 158, 120, 172, 9, 97, 127, 44, 1, 187, 197, 25, 88, 158, 243, 247, 1, 158, 140, 78, 153, 155, 10, 57, 227, 20, 67, 208, 168, 197, 182, 224, 223, 21, 215, 109, 92, 181, 240, 25, 249, 81, 72, 206, 131, 198, 227, 75, 60, 164, 71, 79, 225, 220, 63, 190, 68, 67, 163, 175, 227, 76, 181, 29, 210, 29, 1, 111, 75, 62, 229, 228, 165, 186, 176, 50, 215, 39, 163, 91, 225, 35, 116, 135, 17, 206, 173, 193, 2, 218, 134, 208, 226, 145, 102, 63, 77, 143, 51, 154, 133, 100, 83, 236, 123, 65, 73, 141, 95, 26, 166, 205, 50, 219, 100, 242, 98, 24, 245, 214, 234, 152, 71, 172, 186, 75, 45, 154, 102, 139, 143, 2, 206, 50, 104, 180, 159, 39, 3, 143, 146, 67, 192, 156, 118, 109, 218, 160, 153, 237, 182, 67, 58, 195, 53, 17, 200, 86, 238, 85, 100, 202, 3, 109, 130, 34, 150, 108, 81, 218, 112, 229, 41, 86, 8, 217, 10, 175, 122, 7, 172, 153, 155, 88, 170, 87, 218, 90, 13, 118, 106, 54, 110, 76, 250, 155, 186, 84, 170, 24, 36, 134, 51, 144, 185, 112, 27, 209, 255, 189, 245, 9, 145, 72, 56, 189, 195, 246, 248, 134, 95, 192, 157, 247, 120, 4, 138, 244, 147, 151, 75, 150, 131, 185, 173, 29, 14, 252, 247, 117, 113, 255, 183, 97, 102, 102, 205, 174, 69, 192, 223, 83, 112, 63, 199, 82, 38, 56, 196, 151, 2, 16, 150, 215, 61, 163, 45, 218, 109, 142, 10, 167, 225, 167, 19, 190, 204, 231, 32, 162, 12, 61, 189, 178, 7, 194, 124, 199, 230, 125, 255, 176, 207, 47, 43, 110, 143, 20, 198, 110, 203, 136, 33, 75, 153, 188, 89, 2, 149, 209, 118, 50, 251, 53, 167, 144, 47, 157, 57, 164, 172, 114, 72, 98, 9, 225, 64, 189, 26, 118, 1, 146, 214, 188, 197, 54, 114, 118, 208, 57, 55, 171, 91, 180, 148, 34, 250, 206, 145, 104, 5, 103, 67, 167, 132, 117, 98, 211, 84, 222, 34, 138, 205, 123, 242, 143, 73, 241, 17, 31, 219, 100, 13, 67, 24, 200, 90, 62, 151, 78, 83, 19, 154, 75, 160, 86, 77, 177, 132, 58, 114, 2, 125, 177, 105, 198, 228, 87, 64, 54, 38, 211, 225, 184, 237, 22, 5, 103, 118, 238, 126, 194, 220, 253, 163, 105, 148, 233, 27, 148, 167, 222, 32, 252, 189, 60, 124, 105, 78, 95, 71, 40, 116, 144, 56, 212, 217, 249, 10, 4, 165, 76, 126, 235, 49, 86, 2, 74, 223, 178, 110, 129, 66, 241, 110, 204, 103, 241, 177, 162, 247, 180, 97, 181, 240, 29, 254, 18, 161, 123, 52, 202, 44, 40, 172, 120, 118, 37, 157, 65, 52, 154, 231, 75, 177, 54, 189, 165, 239, 252, 180, 236, 112, 78, 165, 64, 196, 133, 20, 158, 137, 152, 207, 11, 153, 193, 55, 37, 123, 92, 182, 145, 16, 85, 237, 123, 45, 233, 92, 251, 11, 1, 134, 243, 219, 68, 245, 114, 61, 176, 70, 219], - [70, 50, 173, 74, 128, 162, 123, 66, 174, 45, 81, 248, 39, 180, 253, 188, 52, 85, 15, 183, 224, 0, 34, 249, 119, 35, 211, 56, 78, 255, 105, 229, 238, 245, 89, 48, 123, 27, 183, 156, 7, 213, 215, 93, 16, 39, 189, 166, 31, 159, 38, 190, 228, 247, 13, 134, 30, 171, 156, 95, 79, 20, 63, 95, 48, 233, 3, 211, 86, 65, 220, 219, 155, 63, 68, 4, 51, 183, 189, 83, 57, 68, 29, 33, 224, 194, 250, 115, 254, 91, 5, 193, 71, 245, 36, 40, 111, 142, 184, 202, 88, 4, 30, 234, 166, 214, 16, 96, 64, 182, 162, 162, 96, 103, 193, 152, 19, 88, 0, 148, 179, 22, 47, 18, 117, 169, 237, 79, 209, 113, 51, 68, 37, 11, 169, 249, 142, 125, 72, 128, 41, 119, 40, 245, 242, 66, 247, 97, 232, 102, 7, 102, 226, 168, 177, 213, 9, 227, 95, 62, 85, 124, 186, 202, 157, 156, 8, 94, 40, 127, 54, 66, 186, 244, 128, 245, 206, 82, 203, 211, 121, 163, 158, 115, 201, 249, 241, 16, 51, 12, 145, 173, 50, 95, 183, 58, 134, 206, 148, 27, 170, 129, 174, 203, 215, 244, 198, 67, 148, 121, 46, 230, 175, 12, 144, 221, 148, 28, 73, 65, 147, 5, 213, 247, 28, 138, 102, 243, 250, 70, 223, 225, 76, 52, 60, 145, 200, 42, 218, 5, 208, 229, 146, 95, 23, 208, 205, 14, 151, 205, 227, 85, 242, 109, 15, 77, 106, 243, 30, 63, 173, 176, 122, 192, 180, 145, 132, 208, 125, 166, 110, 187, 4, 29, 177, 241, 111, 90, 159, 3, 103, 217, 175, 37, 38, 73, 142, 213, 183, 245, 162, 249, 85, 124, 31, 82, 73, 55, 209, 190, 205, 132, 218, 158, 109, 157, 73, 100, 33, 73, 125, 27, 212, 4, 102, 34, 126, 203, 213, 208, 74, 36, 210, 110, 202, 82, 104, 86, 207, 79, 194, 130, 38, 75, 58, 176, 3, 249, 53, 192, 7, 199, 16, 21, 193, 15, 57, 71, 251, 161, 20, 30, 186, 128, 9, 40, 28, 247, 132, 152, 206, 212, 64, 208, 28, 153, 95, 175, 196, 251, 239, 207, 8, 196, 116, 33, 250, 80, 207, 3, 48, 161, 193, 3, 197, 230, 175, 130, 112, 111, 170, 106, 85, 147, 134, 222, 101, 3, 30, 170, 102, 119, 53, 17, 153, 205, 90, 67, 65, 233, 4, 204, 193, 205, 23, 237, 228, 115, 227, 15, 203, 211, 1, 161, 64, 231, 252, 77, 197, 194, 5, 103, 155, 0, 255, 116, 116, 66, 36, 28, 211, 178, 82, 79, 159, 185, 194, 237, 246, 20, 150, 218, 60, 133, 54, 154, 92, 43, 8, 234, 34, 20, 204, 91, 76, 68, 167, 243, 65, 255, 52, 173, 222, 250, 37, 152, 251, 244, 3, 203, 222, 210, 79, 78, 133, 159, 247, 160, 55, 249, 34, 16, 58, 81, 11, 203, 229, 63, 24, 16, 47, 159, 202, 156, 29, 102, 207, 210, 209, 58, 190, 120, 28, 166, 134, 177, 57, 113, 181, 94, 108, 240, 128, 231, 207, 87, 235, 47, 232, 41, 140, 183, 119, 157, 235, 10, 13, 117, 223, 161, 64, 8, 187, 157, 205, 18, 103, 182, 8, 236, 71, 11, 16, 240, 80, 44, 219, 67, 42, 118, 99, 217, 3, 75, 212, 15, 77, 125, 215, 160, 189, 126, 70, 168, 87, 123, 39, 235, 45, 165, 100, 181, 20, 203, 19, 109, 85, 93, 10, 84, 196, 223, 159, 32, 35, 117, 172, 240, 46, 76, 253, 237, 132, 125, 161, 221, 52, 9, 41, 52, 28, 92, 0, 148, 186, 178, 36, 201, 44, 109, 98, 111, 178, 228, 252, 3, 62, 127, 96, 5, 65, 24, 49, 46, 212, 232, 201, 100, 153, 242, 255, 190, 186, 2, 230, 237, 9, 113, 240, 220, 186, 153, 71, 150, 234, 142, 241, 113, 39, 69, 3, 117, 41, 133, 232, 53, 34, 18, 186, 230, 139, 203, 180, 217, 96, 5, 219, 206, 236, 7, 26, 32, 252, 238, 174, 6, 11, 160, 72, 110, 23, 57, 24, 245, 129, 80, 53, 64, 2, 236, 122, 225, 27, 69, 124, 2, 248, 36, 210, 115, 96, 169, 123, 43, 52, 129, 202, 116, 39, 247, 218, 139, 65, 0, 56, 241, 142, 75, 228, 85, 0, 222, 209, 180, 90, 97, 217, 106, 198, 20, 122, 226, 201, 8, 210, 140, 174, 28, 254, 240, 46, 50, 50, 79, 204, 247, 205, 217, 115, 222, 181, 232, 163, 14, 10, 134, 110, 221, 250, 202, 174, 164, 91, 8, 218, 208, 19, 73, 31, 68, 58, 73, 182, 128, 229, 240, 211, 51, 35, 38, 167, 142, 220, 140, 243, 218, 254, 100, 212, 243, 127, 84, 8, 218, 29, 215, 191, 62, 69, 189, 34, 148, 120, 44, 117, 234, 230, 185, 73, 115, 191, 218, 215, 67, 102, 113, 16, 174, 84, 191, 155, 56, 19, 44, 156, 65, 200, 18, 73, 83, 170, 8, 15, 143, 89, 237, 242, 155, 205, 38, 79, 199, 191, 122, 79, 238, 74, 204, 48, 62, 74, 232, 79, 85, 48, 174, 250, 142, 108, 149, 255, 15, 41, 35, 250, 194, 136, 99, 82, 123, 96, 187, 180, 12, 8, 158, 118, 31, 18, 46, 161, 200, 237, 219, 177, 173, 11, 47, 37, 254, 199, 15, 109, 223, 238, 115, 248, 220, 185, 114, 52, 49, 134, 153, 172, 62, 42, 153, 16, 60, 193, 74, 59, 227, 118, 145, 159, 154, 113, 112, 26, 14, 163, 223, 154, 243, 215, 56, 140, 249, 176, 247, 173, 176, 205, 136, 95, 108, 188, 68, 175, 189, 251, 127, 177, 130, 169, 168, 53, 45, 159, 94, 232, 65, 8, 29, 79, 240, 84, 233, 103, 65, 207, 196, 154, 114, 106, 200, 166, 46, 214, 187, 212, 132, 254, 51, 97, 21, 36, 247, 19, 32, 183, 40, 204, 79, 40, 74, 18, 152, 75, 83, 209, 137, 250, 238, 161, 164, 226, 193, 103, 29, 120, 206, 210, 27, 108, 188, 23, 130, 138, 102, 124, 98, 218, 5, 231, 227, 73, 94, 8, 20, 209, 91, 23, 179, 96, 160, 138, 166, 9, 159, 15, 33, 2, 229, 127, 93, 129, 9, 48, 134, 86, 185, 21, 195, 205, 17, 186, 85, 199, 190, 186, 71, 94, 247, 182, 0, 106, 69, 173, 183, 38, 250, 86, 174, 62, 149, 168, 95, 38, 1, 213, 176, 49, 252, 183, 158, 24, 102, 216, 45, 182, 133, 79, 211, 244, 111, 156, 191, 177, 43, 76, 230, 79, 35, 234, 236, 99, 186, 48, 191, 62, 146, 231, 231, 67, 64, 237, 218, 90, 225, 175, 236, 128, 153, 89, 27, 55, 121, 133, 73, 139, 33, 227, 206, 43, 147, 101, 114, 157, 57, 221, 230, 169, 164, 51, 140, 235, 147, 140, 211, 53, 123, 184, 8, 90, 63, 130, 101, 7, 11, 142, 136, 237, 32, 251, 19, 243, 64, 107, 227, 178, 23, 11, 145, 176, 48, 178, 201, 248, 36, 64, 115, 253, 109, 237, 219, 232, 181, 180, 75, 68, 183, 44, 209, 34, 163, 81, 103, 98, 56, 169, 249, 122, 246, 193, 59, 231, 149, 198, 16, 18, 165, 42, 248, 249, 57, 186, 177, 76, 253, 42, 27, 229, 102, 233, 103, 198, 92, 242, 91, 177, 192, 115, 105, 135, 104, 116, 139, 115, 136, 72, 124, 220, 244, 32, 41, 217, 245, 17, 44, 218, 53, 14, 113, 236, 225, 180, 172, 116, 98, 19, 121, 72, 208, 8, 151, 197, 201, 156, 162, 148, 147, 55, 245, 115, 224, 190, 75, 4, 147, 63, 68, 23, 209, 143, 109, 149, 254, 123, 233, 237, 76, 19, 39, 239, 186, 166, 15, 159, 130, 87, 76, 36, 248, 143, 122, 59, 141, 158, 62, 36, 23, 93, 199, 43, 33, 195, 141, 180, 87, 206, 217, 114, 177, 8, 36, 49, 33, 104, 227, 55, 237, 252, 253, 125, 159, 224, 161, 239, 26, 196, 51, 21, 124, 205, 168, 136, 174, 254, 12, 25, 99, 99, 60, 242, 84, 107, 190, 58, 59, 51, 186, 247, 44, 148, 57, 34, 164, 28, 255, 54, 206, 80, 61, 76, 39, 99, 252, 177, 134, 226, 15, 131, 166, 210, 47, 57, 211, 57, 51, 27, 230, 130, 79, 50, 228, 36, 153, 192, 83, 188, 86, 220, 101, 223, 222, 49, 151, 142, 4, 18, 48, 31, 161, 246, 46, 206, 55, 173, 237, 196, 69, 205, 233, 201, 182, 115, 121, 205, 38, 114, 143, 53, 155, 119, 169, 186, 51, 76, 227, 69, 181, 47, 47, 186, 58, 157, 186, 133, 10, 85, 170, 32, 11, 115, 62, 221, 249, 2, 106, 191, 74, 14, 215, 127, 145, 37, 35, 90, 6, 22, 25, 233, 205, 23, 99, 254, 155, 115, 63, 47, 148, 252, 7, 208, 18, 137, 87, 241, 159, 253, 79, 142, 120, 10, 60, 104, 71, 178, 254, 193, 51, 88, 180, 86, 171, 54, 85, 22, 219, 9, 217, 13, 97, 196, 117, 209, 83, 128, 72, 220, 194, 115, 199, 182, 175, 2, 110, 193, 220, 105, 19, 184, 194, 57, 175, 56, 152, 129, 188, 204, 161, 95, 22, 68, 237, 24, 40, 186, 148, 120, 229, 244, 105, 140, 194, 215, 235, 226, 143, 178, 250, 62, 116, 24, 4, 71, 138, 5, 20, 86, 40, 3, 226, 82, 115, 173, 162, 119, 19, 140, 241, 44, 125, 3, 218, 94, 80, 9, 108, 14, 181, 147, 90, 122, 51, 253, 250, 170, 116, 117, 109, 77, 239, 134, 60, 91, 242, 20, 237, 111, 19, 49, 88, 143, 219, 211, 133, 2, 56, 254, 247, 63, 148, 166, 56, 230, 153, 164, 188, 77, 109, 11, 183, 154, 100, 39, 62, 14, 120, 81, 148, 32, 129, 109, 123, 9, 201, 209, 191, 116, 146, 231, 120, 29, 66, 26, 50, 84, 156, 40, 53, 87, 47, 238, 136, 48, 114, 107, 201, 221, 120, 66, 94, 193, 104, 15, 175, 116, 189, 184, 207, 139, 160, 182, 33, 59, 68, 229, 230, 226, 62, 83, 26, 228, 157, 80, 116, 67, 217, 246, 207, 131, 144, 225, 98, 156, 193, 93, 92, 42, 184, 255, 208, 90, 0, 70, 131, 248, 173, 157, 249, 101, 66, 13, 203, 197, 202, 119, 60, 26, 3, 99, 166, 208, 116, 113, 3, 51, 221, 61, 90, 157, 107, 24, 43, 37, 227, 19, 33, 46, 125, 99, 41, 81, 82, 155, 80, 53, 71, 103, 211, 131, 189, 188, 20, 233, 251, 31, 168, 57, 105, 58, 207, 37, 90, 184, 40, 149, 29, 161, 68, 136, 176, 14, 26, 52, 120, 178, 233, 1, 107, 17, 58, 90, 125, 78, 6, 57, 123, 152, 241, 122, 32, 108, 150, 182, 222, 56, 147, 168, 150, 71, 64, 98, 251, 90, 57, 211, 247, 254, 190, 17, 8, 234, 24, 70, 38, 65, 225, 186, 98, 9, 158, 138, 122, 150, 241, 114, 247, 57, 237, 8, 215, 67, 170, 255, 97, 235, 99, 181, 147, 58, 192, 27, 27, 163, 240, 209, 228, 156, 136, 60, 37, 39, 251, 198, 30, 28, 7, 53, 254, 24, 148, 45, 97, 133, 12, 239, 48, 73, 26, 26, 46, 169, 155, 223, 172, 180, 160, 193, 19, 16, 109, 96, 166, 234, 113, 79, 185, 69, 245, 53, 0, 89, 195, 218, 126, 207, 189, 57, 41, 26, 112, 40, 73, 31, 33, 213, 96, 115, 96, 35, 93, 44, 75, 65, 114, 158, 109, 88, 244, 245, 10, 76, 102, 24, 140, 204, 172, 11, 9, 111, 42, 49, 24, 15, 18, 179, 249, 138, 147, 18, 126, 35, 121, 31, 233, 222, 213, 236, 159, 155, 7, 230, 228, 132, 219, 110, 90, 252, 218, 12, 195, 83, 87, 23, 166, 77, 151, 167, 193, 238, 185, 82, 177, 232, 228, 141, 226, 179, 136, 66, 26, 64, 102, 68, 186, 236, 116, 132, 45, 84, 157, 120, 28, 165, 91, 27, 174, 112, 100, 255, 128, 238, 136, 179, 4, 121, 103, 145, 255, 173, 127, 12, 119, 95, 233, 102, 33, 123, 248, 190, 58, 75, 240, 170, 220, 27, 66, 58, 61, 69, 106, 16, 119, 138, 91, 37, 98, 130, 213, 64, 64, 101, 252, 90, 37, 51, 217, 42, 217, 225, 251, 109, 17, 152, 24, 70, 233, 43, 69, 146, 217, 207, 48, 195, 253, 31, 212, 181, 70, 87, 39, 14, 70, 51, 199, 50, 95, 175, 97, 11, 45, 202, 39, 22, 225, 67, 197, 181, 1, 215, 71, 250, 21, 180, 178, 78, 201, 158, 83, 129, 246, 160, 51, 118, 216, 186, 236, 152, 138, 74, 3, 154, 133, 203, 62, 196, 30, 68, 157, 62, 236, 84, 119, 27, 148, 24, 87, 97, 141, 208, 55, 75, 228, 73, 157, 111, 240, 122, 78, 161, 22, 89, 103, 51, 122, 5, 161, 205, 167, 7, 107, 73, 108, 154, 148, 89, 182, 35, 2, 216, 42, 53, 205, 180, 225, 166, 141, 45, 147, 248, 33, 169, 95, 155, 208, 227, 20, 22, 11, 92, 228, 190, 187, 92, 181, 97, 169, 178, 209, 19, 16, 183, 87, 120, 228, 85, 237, 80, 212, 212, 9, 55, 134, 32, 158, 244, 11, 163, 111, 31, 101, 13, 246, 202, 138, 112, 147, 7, 87, 85, 95, 153, 216, 191, 6, 47, 246, 86, 33, 116, 253, 22, 174, 239, 93, 142, 119, 98, 225, 84, 235, 86, 151, 146, 182, 52, 111, 60, 156, 60, 60, 74, 94, 242, 126, 151, 62, 45, 76, 80, 11, 247, 3, 54, 131, 255, 248, 24, 62, 178, 161, 29, 65, 235, 93, 111, 217, 166, 18, 218, 166, 236, 158, 242, 87, 4, 216, 215, 83, 182, 29, 110, 149, 141, 174, 223, 143, 155, 136, 210, 198, 249, 82, 146, 135, 205, 38, 12, 109, 147, 221, 77, 19, 104, 107, 227, 163, 240, 83, 174, 56, 255, 174, 193, 119, 66, 193, 241, 27, 6, 73, 117, 205, 75, 232, 127, 14, 113, 198, 119, 153, 132, 39, 176, 98, 221, 203, 219, 13, 89, 50, 117, 153, 162, 117, 240, 206, 111, 147, 182, 191, 238, 112, 254, 109, 216, 235, 183, 252, 240, 97, 149, 160, 163, 65, 108, 179, 175, 132, 20, 190, 109, 132, 187, 91, 255, 169, 180, 80, 155, 31, 96, 216, 30, 196, 228, 48, 225, 198, 213, 207, 6, 188, 236, 216, 193, 36, 97, 84, 199, 13, 161, 56, 73, 74, 250, 234, 12, 241, 55, 143, 121, 237, 186, 169, 162, 30, 80, 24, 186, 108, 110, 131, 102, 4, 132, 46, 119, 230, 88, 63, 176, 218, 243, 239, 97, 108, 210, 238, 204, 220, 95, 76, 55, 152, 50, 94, 195, 234, 56, 197, 246, 49, 157, 10, 102, 63, 111, 150, 196, 108, 216, 183, 253, 179, 168, 66, 42, 114, 149, 252, 57, 239, 202, 220, 57, 206, 70, 164, 150, 230, 178, 192, 87, 182, 240, 197, 83, 95, 76, 129, 38, 104, 85, 35, 4, 152, 220, 148, 19, 33, 224, 84, 128, 112, 73, 202, 182, 223, 221, 217, 188, 71, 22, 91, 245, 211, 61, 250, 82, 214, 65, 7, 97, 125, 11, 188, 16, 152, 45, 42, 211, 118, 187, 221, 106, 107, 78, 32, 135, 157, 17, 92, 41, 50, 22, 250, 96, 61, 82, 33, 156, 21, 86, 7, 133, 72, 58, 86, 173, 132, 172, 53, 194, 248, 131, 68, 75, 101, 71, 49, 52, 123, 73, 185, 35, 182, 226, 207, 253, 36, 116, 243, 70, 126, 230, 233, 229, 189, 162, 90, 47, 250, 23, 213, 214, 236, 54, 43, 254, 40, 214, 43, 213, 37, 60, 139, 68, 132, 154, 48, 23, 103, 56, 179, 54, 179, 103, 28, 182, 35, 104, 220, 109, 237, 187, 26, 170, 6, 48, 10, 79, 216, 160, 20, 236, 42, 103, 216, 244, 199, 208, 117, 109, 35, 37, 164, 128, 207, 126, 238, 108, 15, 173, 177, 126, 244, 211, 239, 198, 253, 7, 215, 18, 221, 66, 162, 235, 62, 253, 125, 196, 133, 86, 14, 155, 22, 182, 226, 85, 79, 148, 230, 22, 198, 230, 194, 130, 90, 118, 63, 188, 76, 189, 51, 118, 28, 214, 220, 89, 98, 87, 225, 64, 47, 69, 16, 108, 234, 166, 59, 102, 59, 50, 49, 58, 105, 43, 116, 202, 154, 163, 254, 181, 167, 63, 167, 83, 142, 144, 255, 136, 117, 90, 99, 115, 115, 120, 128, 110, 244, 155, 54, 129, 142, 135, 217, 185, 218, 171, 244, 239, 44, 175, 44, 254, 150, 218, 12, 221, 225, 97, 186, 213, 82, 25, 212, 39, 122, 80, 18, 241, 105, 165, 197, 22, 7, 190, 148, 59, 61, 184, 249, 37, 174, 15, 110, 145, 8, 232, 86, 196, 146, 26, 2, 57, 203, 12, 49, 158, 31, 87, 174, 18, 115, 51, 34, 106, 83, 102, 225, 211, 216, 138, 187, 176, 243, 37, 184, 92, 205, 212, 159, 124, 72, 128, 110, 243, 6, 142, 38, 162, 197, 55, 35, 157, 130, 10, 232, 228, 88, 84, 242, 254, 75, 80, 64, 69, 4, 177, 219, 196, 201, 218, 102, 42, 32, 17, 218, 22, 48, 27, 243, 144, 28, 88, 155, 231, 130, 120, 51, 177, 70, 51, 0, 19, 105, 150, 52, 63, 14, 228, 98, 184, 155, 173, 149, 254, 24, 120, 112, 112, 52, 114, 170, 111, 45, 108, 12, 108, 192, 200, 30, 243, 60, 2, 14, 84, 141, 141, 111, 182, 129, 202, 95, 171, 138, 169, 40, 142, 150, 3, 185, 15, 19, 200, 35, 27, 112, 171, 76, 169, 218, 208, 124, 133, 132, 84, 228, 71, 194, 250, 221, 193, 138, 223, 164, 35, 170, 44, 15, 47, 5, 41, 222, 14, 138, 190, 173, 215, 169, 149, 144, 75, 156, 230, 16, 66, 60, 159, 196, 75, 146, 80, 24, 39, 195, 206, 115, 89, 147, 224, 193, 254, 158, 122, 169, 92, 145, 9, 106, 73, 54, 219, 251, 68, 8, 124, 148, 229, 175, 209, 32, 88, 186, 223, 70, 241, 116, 198, 246, 27, 20, 105, 217, 192, 218, 239, 139, 141, 30, 76, 201, 226, 96, 117, 219, 77, 111, 102, 138, 41, 77, 115, 126, 60, 62, 109, 95, 165, 79, 97, 1, 165, 57, 219, 124, 163, 180, 147, 0, 136, 73, 42, 176, 49, 138, 191, 155, 173, 173, 18, 194, 172, 171, 89, 116, 97, 62, 157, 214, 55, 20, 62, 165, 226, 132, 133, 53, 23, 26, 108, 215, 14, 148, 168, 10, 167, 203, 235, 62, 58, 83, 112, 91, 92, 66, 210, 200, 1, 57, 104, 124, 87, 198, 244, 255, 66, 108, 167, 54, 182, 166, 18, 135, 158, 176, 188, 105, 254, 243, 158, 136, 28, 160, 111, 81, 31, 10, 239, 88, 255, 69, 126, 228, 185, 134, 79, 161, 128, 211, 15, 91, 74, 171, 183, 69, 4, 3, 30, 75, 38, 88, 96, 56, 161, 144, 174, 161, 127, 118, 94, 11, 55, 211, 222, 193, 160, 158, 125, 108, 124, 84, 154, 166, 103, 48, 213, 94, 250, 90, 226, 185, 151, 57, 111, 13, 207, 84, 6, 12, 226, 46, 31, 23, 151, 207, 57, 70, 113, 140, 95, 209, 73, 136, 176, 149, 31, 168, 227, 238, 124, 224, 6, 188, 2, 176, 133, 60, 118, 74, 152, 251, 6, 48, 144, 212, 72, 170, 81, 239, 0, 3, 66, 44, 8, 99, 1, 167, 176, 49, 85, 55, 251, 99, 40, 150, 89, 214, 96, 57, 23, 129, 195, 69, 80, 125, 108, 203, 53, 26, 106, 88, 203, 200, 182, 10, 186, 87, 52, 253, 69, 15, 245, 136, 189, 66, 48, 167, 61, 85, 60, 144, 90, 9, 61, 190, 235, 20, 38, 66, 112, 17, 174, 211, 220, 210, 182, 62, 145, 249, 133, 59, 88, 112, 50, 153, 50, 116, 118, 253, 178, 74, 135, 191, 114, 114, 226, 60, 254, 79, 226, 251, 139, 144, 8, 184, 121, 213, 15, 76, 42, 254, 78, 212, 43, 33, 9, 2, 119, 194, 39, 140, 91, 227, 122, 196, 45, 14, 155, 122, 51, 179, 86, 73, 136, 245, 42, 86, 184, 196, 188, 128, 75, 105, 57, 178, 172, 35, 64, 78, 249, 81, 50, 197, 38, 141, 51, 41, 55, 130, 80, 251, 185, 91, 98, 232, 114, 135, 207, 141, 19, 201, 227, 85, 189, 109, 30, 241, 130, 106, 8, 4, 1, 145, 56, 200, 132, 142, 235, 204, 214, 211, 52, 96, 62, 44, 181, 128, 193, 68, 227, 255, 191, 196, 143, 91, 75, 160, 70, 105, 236, 4, 164, 136, 36, 139, 153, 166, 139, 141, 194, 38, 236, 9, 162, 95, 245, 138, 48, 228, 161, 25, 83, 188, 74, 128, 76, 102, 48, 153, 93, 85, 232, 28, 133, 215, 86, 191, 61, 13, 122, 254, 190, 105, 81, 60, 176, 144, 61, 72, 177, 109, 69, 100, 46, 161, 223, 116, 78, 28, 94, 189, 80, 94, 17, 201, 163, 238, 77, 203, 87, 37, 97, 16, 32, 130, 85, 207, 118, 165, 152, 31, 186, 110, 202, 112, 217, 98, 2, 119, 77, 90, 152, 36, 157, 34, 215, 215, 165, 71, 147, 71, 59, 241, 42, 174, 140, 162, 215, 254, 31, 5, 251, 214, 73, 180, 137, 138, 26, 255, 254, 167, 236, 241, 102, 16, 18, 20, 54, 129, 207, 79, 6, 89, 93, 95, 86, 32, 147, 48, 232, 156, 61, 53, 251, 46, 194, 55, 138, 38, 11, 15, 19, 241, 246, 129, 28, 39, 24, 0, 2, 5, 185, 45, 172, 117, 65, 19, 116, 229, 200, 173, 234, 85, 248, 97, 163, 64, 250, 190, 170, 28, 37, 184, 254, 219, 96, 202, 60, 60, 86, 155, 132, 157, 142, 180, 156, 92, 211, 237, 125, 50, 243, 223, 101, 219, 16, 71, 141, 49, 183, 42, 81, 232, 129, 155, 156, 188, 142, 109, 54, 198, 204, 178, 178, 187, 140, 188, 66, 73, 208, 59, 21, 170, 213, 81, 73, 215, 91, 43, 177, 105, 154, 69, 173, 214, 112, 88, 203, 137, 52, 163, 207, 103, 201, 36, 222, 1, 159, 115, 117, 184, 186, 10, 76, 137, 45, 167, 83, 77, 165, 47, 24, 51, 188, 12, 184, 251, 134, 40, 142, 94, 31, 177, 221, 42, 180, 175, 111, 16, 11, 34, 218, 242, 116, 29, 152, 28, 48, 24, 79, 20, 11, 170, 254, 227, 245, 155, 145, 80, 73, 102, 96, 180, 33, 68, 130, 27, 157, 173, 93, 30, 230, 132, 14, 248, 12, 169, 186, 225, 93, 63, 247, 147, 206, 180, 176, 97, 96, 80, 146, 84, 240, 168, 48, 201, 118, 182, 182, 227, 163, 19, 134, 202, 115, 219, 68, 88, 253, 83, 99, 77, 110, 88, 73, 76, 203, 78, 125, 119, 21, 133, 187, 120, 148, 144, 18, 38, 180, 105, 106, 157, 198, 222, 251, 201, 244, 184, 29, 37, 21, 181, 59, 0, 232, 181, 207, 142, 38, 10, 61, 163, 112, 126, 134, 106, 123, 211, 254, 231, 104, 156, 128, 60, 33, 3, 102, 108, 122, 195, 64, 29, 196, 57, 52, 83, 202, 231, 85, 246, 117, 254, 206, 248, 82, 123, 212, 57, 133, 11, 54, 159, 200, 91, 61, 189, 102, 113, 89, 220, 78, 49, 124, 143, 11, 175, 215, 63, 83, 134, 31, 239, 104, 244, 88, 89, 152, 64, 232, 41, 150, 211, 160, 123, 183, 142, 99, 248, 168, 122, 12, 117, 3, 157, 161, 109, 30, 96, 90, 134, 114, 15, 208, 60, 217, 0, 36, 128, 196, 187, 221, 119, 226, 16, 144, 153, 117, 89, 61, 110, 34, 232, 139, 135, 254, 16, 71, 214, 25, 194, 157, 161, 68, 184, 249, 128, 36, 218, 214, 59, 94, 35, 52, 206, 20, 210, 91, 110, 121, 140, 7, 177, 173, 15, 155, 102, 43, 196, 159, 71, 69, 50, 204, 58, 142, 168, 205, 134, 208, 44, 170, 233, 111, 64, 223, 133, 48, 7, 83, 50, 198, 155, 190, 100, 241, 31, 122, 172, 104, 186, 15, 0, 98, 195, 224, 224, 4, 253, 200, 198, 172, 41, 116, 209, 9, 36, 131, 151, 129, 51, 226, 147, 49, 29, 111, 7, 236, 255, 173, 180, 214, 10, 21, 206, 5, 181, 71, 41, 12, 54, 239, 69, 229, 182, 161, 126, 194, 123, 107, 114, 66, 251, 198, 166, 122, 234, 147, 240, 56, 216, 60, 224, 231, 159, 33, 66, 228, 174, 237, 14, 94, 213, 87, 162, 72, 194, 218, 153, 116, 247, 42, 85, 81, 159, 118, 155, 235, 216, 111, 191, 210, 177, 246, 104, 166, 104, 35, 94, 140, 0, 197, 67, 151, 103, 41, 33, 183, 109, 117, 234, 78, 18, 226, 160, 155, 158, 226, 145, 188, 235, 194, 172, 101, 104, 157, 92, 89, 239, 237, 129, 146, 109, 201, 179, 233, 51, 221, 155, 243, 209, 218, 41, 56, 68, 219, 133, 57, 33, 90, 189, 216, 0, 185, 161, 113, 32, 191, 61, 216, 53, 23, 92, 197, 21, 109, 87, 206, 30, 145, 253, 207, 223, 232, 173, 103, 31, 110, 192, 220, 80, 90, 146, 16, 69, 0, 186, 174, 5, 61, 133, 127, 188, 11, 254, 50, 230, 74, 83, 135, 49, 86, 147, 97, 23, 97, 141, 47, 143, 228, 66, 213, 109, 241, 218, 27, 173, 148, 144, 187, 6, 191, 188, 209, 182, 16, 9, 132, 153, 61, 170, 91, 194, 159, 121, 187, 220, 148, 173, 5, 236, 114, 37, 136, 41, 45, 108, 107, 51, 231, 4, 210, 109, 126, 122, 82, 100, 29, 100, 110, 228, 59, 16, 33, 220, 119, 51, 61, 76, 149, 135, 185, 172, 184, 67, 170, 234, 26, 239, 6, 27, 179, 118, 228, 172, 230, 144, 95, 131, 241, 215, 35, 174, 98, 232, 205, 215, 157, 140, 118, 86, 150, 190, 10, 15, 91, 42, 174, 207, 116, 87, 6, 178, 91, 167, 69, 118, 54, 0, 207, 191, 21, 157, 185, 152, 1, 40, 215, 109, 83, 235, 141, 53, 6, 89, 96, 87, 44, 239, 138, 120, 112, 228, 251, 55, 32, 191, 218, 224, 56, 102, 253, 209, 66, 7, 116, 135, 40, 229, 64, 116, 206, 116, 11, 244, 154, 162, 43, 152, 151, 131, 40, 37, 244, 152, 9, 241, 162, 190, 4, 149, 99, 50, 59, 222, 171, 29, 42, 231, 168, 50, 149, 10, 103, 54, 130, 252, 26, 41, 187, 74, 69, 143, 6, 38, 121, 221, 34, 173, 210, 213, 125, 240, 184, 175, 137, 226, 128, 43, 179, 126, 137, 116, 65, 98, 17, 91, 150, 25, 115, 114, 191, 126, 172, 88, 155, 15, 58, 207, 119, 101, 164, 159, 150, 104, 251, 14, 192, 136, 135, 118, 202, 155, 221, 106, 240, 221, 30, 194, 238, 72, 217, 83, 220, 207, 103, 145, 165, 98, 210, 159, 252, 175, 228, 33, 14, 79, 218, 247, 8, 209, 206, 158, 170, 214, 203, 228, 43, 228, 197, 175, 221, 137, 239, 184, 129, 151, 241, 255, 53, 164, 249, 135, 116, 76, 162, 102, 180, 96, 134, 42, 251, 147, 174, 136, 55, 154, 140, 70, 215, 6, 190, 0, 14, 107, 224, 66, 186, 45, 242, 165, 233, 19, 116, 11, 43, 226, 201, 191, 50, 9, 13, 253, 115, 59, 20, 92, 36, 49, 69, 81, 38, 254, 127, 117, 238, 15, 51, 203, 66, 58, 31, 91, 194, 140, 29, 236, 243, 204, 240, 200, 220, 86, 32, 33, 213, 32, 12, 126, 231, 85, 215, 119, 204, 195, 191, 93, 218, 225, 3, 201, 239, 30, 227, 193, 158, 28, 25, 19, 169, 246, 14, 157, 160, 179, 227, 59, 40, 168, 156, 111, 197, 233, 201, 84, 247, 67, 76, 250, 113, 64, 199, 185, 11, 53, 0, 230, 56, 161, 28, 179, 116, 254, 150, 213, 31, 18, 169, 221, 230, 4, 65, 152, 53, 210, 68, 24, 189, 26, 103, 39, 250, 8, 82, 104, 70, 138, 130, 7, 248, 43, 152, 239, 158, 56, 39, 111, 46, 249, 210, 36, 192, 205, 75, 16, 169, 14, 196, 118, 135, 143, 79, 242, 6, 202, 127, 244, 99, 75, 38, 4, 102, 56, 81, 36, 234, 26, 138, 68, 203, 220, 212, 39, 3, 113, 20, 82, 239, 121, 241, 164, 230, 185, 240, 237, 211, 119, 101, 231, 145, 24, 40, 23, 92, 57, 140, 153, 0, 154, 37, 197, 243, 235, 0, 173, 62, 145, 88, 224, 227, 52, 138, 247, 213, 36, 172, 17, 27, 72, 200, 53, 49, 32, 224, 188, 58, 84, 109, 28, 189, 104, 226, 143, 59, 146, 36, 236, 45, 219, 120, 37, 184, 219, 20, 4, 42, 231, 203, 42, 183, 230, 67, 52, 216, 82, 12, 1, 177, 92, 102, 97, 223, 72, 7, 52, 188, 68, 94, 34, 172, 163, 120, 202, 224, 80, 230, 150, 141, 165, 146, 112, 203, 77, 186, 139, 252, 142, 33, 238, 39, 66, 152, 43, 58, 186, 217, 127, 155, 155, 204, 121, 181, 44, 146, 117, 15, 13, 76, 112, 150, 54, 34, 122, 162, 232, 254, 146, 136, 26, 50, 119, 74, 162, 76, 175, 232, 17, 160, 233, 5, 143, 7, 181, 129, 213, 219, 6, 61, 239, 216, 242, 235, 180, 101, 2, 162, 244, 148, 217, 132, 67, 113, 58, 59, 199, 84, 110, 254, 40, 67, 206, 196, 140, 251, 255, 189, 114, 216, 4, 93, 210, 41, 253, 67, 183, 63, 138, 170, 126, 33, 210, 152, 231, 37, 28, 14, 122, 150, 50, 229, 141, 162, 68, 236, 73, 232, 206, 4, 107, 96, 155, 19, 92, 93, 16, 132, 223, 72, 18, 4, 187, 29, 94, 122, 237, 113, 71, 232, 26, 109, 107, 180, 187, 189, 178, 221, 190, 74, 86, 112, 186, 130, 50, 71, 234, 52, 107, 212, 118, 40, 106, 181, 85, 134, 29, 217, 197, 170, 149, 201, 69, 193, 118, 85, 153, 169, 118, 74, 214, 209, 55, 12, 155, 37, 137, 69, 43, 244, 235, 33, 5, 0, 220, 64, 142, 146, 150, 110, 2, 85, 222, 100, 98, 187, 225, 69, 238, 242, 5, 91, 170, 42, 149, 70, 188, 108, 144, 223, 39, 15, 189, 239, 12, 0, 224, 211, 248, 200, 31, 173, 66, 45, 157, 23, 245, 223, 250, 226, 33, 184, 131, 37, 70, 110, 55, 43, 95, 5, 225, 90, 9, 255, 233, 9, 21, 10, 200, 64, 246, 113, 69, 155, 67, 84, 116, 79, 193, 168, 119, 168, 1, 225, 183, 169, 85, 113, 19, 120, 171, 237, 182, 2, 36, 9, 57, 155, 67, 147, 60, 57, 145, 184, 221, 214, 85, 119, 168, 107, 165, 185, 170, 98, 76, 251, 202, 133, 68, 41, 67, 187, 2, 190, 13, 6, 129, 113, 237, 169, 101, 212, 171, 244, 227, 40, 121, 40, 5, 139, 125, 160, 20, 212, 12, 158, 203, 209, 199, 221, 183, 211, 182, 100, 45, 183, 82, 5, 128, 206, 185, 78, 97, 225, 223, 53, 186, 71, 221, 47, 184, 92, 125, 240, 246, 104, 228, 200, 150, 236, 29, 239, 184, 208, 100, 175, 241, 155, 217, 115, 212, 181, 188, 139, 157, 86, 208, 65, 43, 53, 119, 56, 222, 76, 175, 83, 89, 114, 104, 236, 22, 43, 65, 117, 225, 232, 192, 188, 112, 157, 80, 101, 104, 152, 236, 15, 150, 149, 217, 19, 32, 30, 95, 218, 131, 196, 253, 69, 196, 28, 246, 241, 141, 28, 85, 233, 174, 182, 192, 245, 212, 216, 195, 0, 215, 194, 75, 129, 207, 203, 56, 233, 4, 221, 107, 213, 255, 69, 66, 31, 117, 52, 231, 70, 45, 199, 49, 134, 158, 24, 81, 229, 218, 178, 76, 91, 103, 39, 101, 179, 73, 202, 42, 112, 0, 33, 158, 145, 186, 159, 46, 35, 97, 132, 215, 112, 65, 242, 134, 85, 231, 58, 131, 133, 65, 153, 201, 155, 223, 60, 44, 195, 189, 195, 58, 58, 6, 193, 251, 207, 55, 154, 58, 218, 175, 126, 99, 245, 9, 203, 163, 130, 55, 172, 139, 213, 62, 40, 65, 66, 172, 55, 130, 64, 123, 88, 238, 77, 99, 156, 126, 60, 204, 191, 144, 114, 91, 146, 60, 36, 186, 11, 68, 33, 7, 188, 154, 236, 200, 144, 158, 29, 210, 102, 132, 30, 43, 16, 234, 76, 64, 51, 77, 54, 24, 164, 250, 206, 241, 241, 32, 235, 97, 49, 147, 217, 233, 146, 255, 159, 252, 23, 168, 142, 84, 224, 16, 50, 178, 190, 63, 118, 206, 3, 201, 149, 25, 29, 40, 102, 161, 66, 193, 85, 150, 63, 25, 119, 218, 121, 189, 19, 44, 181, 239, 206, 4, 152, 68, 251, 169, 165, 49, 22, 104, 128, 139, 193, 250, 86, 109, 131, 180, 149, 29, 244, 5, 116, 138, 189, 192, 181, 37, 101, 168, 114, 21, 245, 46, 171, 26, 231, 50, 125, 11, 143, 51, 83, 124, 91, 112, 59, 117, 221, 75, 231, 91, 13, 174, 99, 253, 146, 83, 112, 118, 14, 17, 159, 88, 168, 203, 50, 209, 185, 200, 24, 42, 71, 229, 166, 218, 117, 159, 118, 246, 109, 218, 4, 63, 253, 34, 173, 115, 190, 236, 158, 240, 59, 239, 50, 191, 253, 138, 96, 202, 152, 151, 224, 26, 236, 20, 67, 13, 161, 100, 116, 244, 83, 155, 34, 225, 28, 128, 174, 27, 7, 133, 185, 189, 150, 144, 246, 252, 130, 140, 157, 179, 201, 7, 164, 69, 228, 50, 212, 123, 201, 231, 204, 171, 206, 139, 247, 226, 142, 73, 171, 160, 199, 242, 82, 44, 10, 18, 70, 38, 117, 59, 29, 222, 25, 128, 3, 77, 2, 135, 186, 154, 94, 172, 75, 238, 52, 253, 247, 75, 174, 42, 141, 214, 166, 184, 109, 93, 158, 53, 89, 58, 49, 125, 39, 118, 89, 200, 162, 29, 46, 255, 176, 53, 240, 13, 44, 198, 176, 129, 124, 196, 35, 122, 5, 58, 220, 12, 31, 148, 41, 96, 139, 200, 251, 42, 50, 127, 1, 210, 53, 59, 193, 82, 0, 19, 3, 154, 130, 32, 196, 116, 209, 190, 154, 214, 119, 99, 10, 92, 221, 26, 156, 83, 252, 222, 149, 126, 50, 64, 56, 79, 20, 27, 97, 144, 229, 0, 245, 99, 5, 71, 7, 234, 25, 5, 55, 71, 12, 211, 193, 121, 242, 198, 157, 208, 30, 101, 158, 120, 252, 146, 159, 143, 255, 1, 63, 85, 30, 129, 72, 13, 252, 69, 14, 29, 162, 107, 166, 240, 170, 28, 229, 46, 39, 203, 33, 239, 96, 43, 135, 253, 104, 31, 161, 93, 145, 129, 60, 81, 240, 133, 107, 16, 163, 50, 17, 19, 15, 118, 110, 110, 94, 57, 43, 47, 13, 43, 60, 253, 203, 108, 118, 138, 110, 184, 129, 12, 253, 156, 83, 150, 82, 90, 110, 153, 236, 75, 63, 35, 156, 94, 97, 67, 148, 18, 67, 9, 62, 151, 108, 94, 199, 137, 93, 163, 68, 107, 63, 254, 142, 171, 111, 106, 27, 123, 248, 216, 124, 238, 243, 225, 195, 241, 172, 245, 79, 51, 175, 23, 47, 125, 15, 146, 152, 195, 75, 3, 0, 175, 193, 136, 228, 145, 230, 1, 118, 81, 72, 107, 22, 139, 15, 0, 52, 238, 185, 204, 196, 196, 200, 195, 220, 234, 98, 241, 223, 34, 139, 127, 158, 32, 207, 71, 199, 187, 170, 51, 32, 217, 192, 190, 61, 119, 245, 45, 30, 96, 176, 224, 195, 6, 2, 7, 96, 176, 64, 70, 149, 225, 137, 176, 231, 9, 85, 1, 137, 147, 161, 86, 195, 101, 240, 216, 35, 226, 177, 203, 252, 16, 44, 140, 78, 169, 34, 248, 186, 147, 12, 222, 215, 141, 86, 7, 47, 76, 96, 223, 115, 85, 113, 94, 61, 165, 201, 14, 86, 124, 94, 166, 45, 143, 59, 143, 228, 19, 193, 201, 20, 60, 67, 97, 141, 156, 36, 141, 97, 14, 141, 117, 9, 244, 179, 228, 127, 120, 246, 245, 154, 56, 69, 165, 141, 118, 85, 25, 192, 142, 64, 184, 0, 253, 225, 30, 203, 40, 38, 112, 217, 132, 77, 152, 72, 211, 54, 83, 107, 227, 101, 128, 47, 69, 1, 195, 122, 253, 149, 43, 89, 46, 111, 30, 78, 87, 55, 175, 107, 114, 169, 45, 142, 111, 55, 119, 61, 250, 92, 14, 186, 125, 38, 101, 4, 114, 127, 226, 253, 252, 48, 17, 166, 63, 251, 128, 192, 235, 22, 229, 115, 73, 215, 155, 115, 56, 56, 104, 11, 94, 178, 214, 37, 178, 24, 106, 159, 94, 150, 5, 36, 111, 34, 1, 139, 112, 87, 56, 75, 51, 14, 85, 21, 33, 34, 101, 169, 66, 226, 90, 122, 65, 12, 93, 186, 133, 76, 40, 156, 193, 214, 109, 140, 150, 96, 122, 39, 167, 153, 220, 118, 64, 66, 199, 252, 249, 33, 149, 54, 161, 181, 245, 83, 185, 246, 121, 24, 218, 88, 105, 121, 130, 233, 77, 104, 134, 244, 186, 183, 51, 26, 250, 96, 83, 24, 121, 32, 247, 9, 91, 125, 231, 43, 255, 239, 37, 95, 216, 192, 210, 12, 136, 191, 119, 221, 100, 148, 128, 238, 130, 202, 146, 238, 240, 113, 65, 136, 13, 251, 134, 56, 203, 46, 76, 84, 192, 203, 62, 136, 63, 228, 80, 54, 73, 241, 138, 175, 64, 22, 111, 98, 161, 62, 237, 25, 250, 125, 221, 129, 100, 242, 70, 6, 66, 108, 113, 195, 160, 239, 216, 123, 198, 162, 145, 153, 69, 40, 174, 76, 226, 212, 244, 225, 114, 172, 44, 219, 190, 181, 210, 148, 34, 226, 114, 219, 4, 141, 210, 234, 65, 114, 231, 107, 163, 209, 122, 171, 0, 158, 220, 27, 114, 179, 71, 254, 10, 30, 45, 167, 68, 166, 239, 31, 38, 199, 29, 231, 20, 246, 191, 25, 9, 204, 148, 95, 68, 132, 219, 241, 218, 148, 217, 109, 150, 249, 169, 248, 139, 129, 47, 222, 9, 154, 211, 51, 15, 204, 108, 92, 114, 145, 88, 42, 113, 130, 138, 119, 53, 53, 189, 119, 128, 175, 11, 61, 53, 111, 193, 51, 118, 61, 110, 250, 128, 235, 49, 231, 86, 131, 79, 121, 81, 186, 142, 209, 117, 149, 63, 229, 19, 89, 32, 195, 118, 206, 59, 178, 168, 18, 69, 100, 119, 234, 53, 52, 243, 188, 148, 181, 190, 156, 105, 39, 115, 35, 255, 10, 243, 177, 80, 192, 248, 251, 199, 37, 120, 173, 70, 127, 102, 244, 27, 169, 66, 120, 235, 50, 253, 90, 95, 111, 249, 131, 80, 42, 197, 159, 25, 39, 226, 18, 101, 125, 167, 56, 233, 142, 242, 243, 41, 167, 177, 74, 111, 199, 158, 79, 170, 10, 99, 17, 140, 222, 107, 255, 179, 186, 104, 26, 178, 181, 200, 159, 192, 138, 23, 64, 24, 77, 108, 94, 244, 235, 72, 244, 6, 78, 76, 243, 208, 104, 216, 229, 183, 44, 176, 217, 125, 73, 140, 249, 23, 127, 68, 192, 199, 160, 53, 126, 33, 139, 8, 139, 204, 4, 189, 254, 225, 95, 75, 32, 105, 22, 215, 204, 36, 61, 247, 195, 168, 210, 52, 67, 178, 178, 87, 31, 152, 236, 120, 131, 155, 216, 232, 87, 41, 247, 162, 128, 98, 162, 10, 197, 39, 210, 137, 33, 131, 141, 224, 150, 148, 160, 30, 67, 54, 36, 48, 212, 130, 80, 122, 179, 117, 199, 150, 207, 46, 33, 205, 10, 80, 77, 119, 78, 249, 139, 181, 38, 204, 229, 215, 214, 238, 211, 173, 107, 185, 143, 203, 183, 24, 195, 213, 129, 27, 8, 124, 97, 156, 231, 159, 133, 75, 9, 134, 107, 63, 136, 237, 244, 103, 136, 62, 160, 196, 118, 165, 141, 175, 180, 170, 84, 207, 153, 191, 79, 250, 158, 6, 175, 189, 99, 215, 227, 92, 7, 247, 223, 240, 41, 19, 93, 159, 249, 190, 245, 174, 183, 126, 185, 198, 87, 49, 116, 17, 72, 169, 71, 117, 185, 250, 24, 184, 228, 96, 75, 75, 206, 146, 192, 140, 104, 36, 32, 184, 10, 117, 224, 246, 177, 225, 173, 29, 250, 139, 138, 190, 135, 137, 169, 39, 97, 60, 84, 83, 243, 29, 176, 77, 241, 31, 53, 145, 62, 213, 141, 163, 162, 172, 111, 111, 15, 227, 85, 181, 42, 11, 155, 241, 160, 180, 175, 128, 201, 211, 155, 202, 185, 121, 38, 227, 157, 35, 88, 123, 164, 238, 5, 87, 208, 87, 130, 205, 242, 75, 2, 169, 47, 64, 242, 131, 85, 196, 47, 8, 175, 12, 176, 9, 233, 128, 181, 101, 132, 161, 135, 216, 29, 182, 235, 215, 244, 70, 55, 32, 118, 38, 192, 167, 186, 202, 173, 211, 211, 138, 90, 129, 140, 138, 50, 117, 45, 81, 36, 77, 241, 129, 136, 135, 173, 200, 14, 24, 136, 103, 188, 210, 129, 233, 236, 219, 178, 140, 88, 66, 106, 24, 28, 191, 61, 3, 143, 48, 104, 183, 155, 28, 79, 247, 85, 244, 165, 109, 22, 45, 96, 37, 104, 254, 162, 104, 91, 99, 125, 18, 17, 55, 39, 23, 80, 219, 165, 252, 226, 29, 237, 119, 121, 240, 119, 188, 141, 37, 6, 134, 80, 177, 96, 156, 118, 127, 96, 13, 109, 254, 54, 182, 221, 75, 215, 176, 64, 33, 223, 238, 106, 81, 30, 95, 201, 208, 95, 242, 147, 159, 87, 146, 125, 231, 140, 67, 177, 71, 7, 251, 134, 88, 251, 251, 228, 218, 193, 126, 178, 2, 110, 170, 53, 105, 176, 34, 13, 149, 133, 126, 95, 19, 34, 223, 22, 124, 75, 66, 175, 191, 209, 152, 70, 135, 153, 0, 63, 183, 140, 45, 83, 15, 22, 79, 15, 153, 202, 211, 187, 82, 232, 193, 201, 27, 80, 49, 165, 244, 237, 191, 35, 232, 169, 85, 177, 43, 49, 56, 52, 208, 153, 164, 214, 105, 151, 134, 143, 141, 174, 49, 194, 199, 137, 236, 151, 173, 204, 174, 49, 219, 162, 72, 146, 254, 15, 22, 47, 25, 51, 189, 18, 108, 49, 30, 43, 109, 5, 13, 50, 16, 163, 19, 23, 93, 133, 35, 55, 213, 13, 255, 19, 78, 34, 63, 20, 179, 159, 33, 57, 11, 181, 121, 29, 65, 182, 219, 131, 82, 177, 253, 132, 121, 68, 78, 96, 151, 194, 247, 16, 76, 74, 133, 252, 14, 115, 73, 202, 40, 60, 198, 153, 128, 67, 242, 119, 147, 184, 32, 54, 51, 170, 102, 151, 84, 31, 161, 220, 197, 108, 45, 32, 16, 7, 75, 71, 130, 89, 229, 216, 154, 117, 211, 167, 77, 162, 161, 144, 196, 64, 162, 126, 89, 107, 135, 101, 63, 5, 112, 254, 47, 92, 183, 185, 243, 158, 83, 7, 108, 31, 136, 15, 8, 14, 16, 252, 105, 240, 231, 86, 122, 150, 221, 183, 180, 170, 126, 124, 242, 238, 34, 126, 95, 230, 196, 99, 146, 26, 5, 135, 141, 0, 156, 76, 141, 5, 18, 68, 215, 32, 27, 103, 81, 10, 146, 131, 67, 222, 51, 91, 78, 97, 146, 254, 173, 102, 207, 20, 121, 30, 65, 140, 112, 203, 131, 18, 160, 227, 137, 114, 106, 67, 207, 130, 220, 180, 178, 233, 159, 237, 63, 92, 109, 250, 206, 113, 155, 196, 195, 142, 40, 137, 67, 41, 165, 53, 91, 64, 142, 81, 223, 188, 31, 234, 76, 239, 57, 215, 137, 169, 185, 244, 209, 33, 237, 171, 95, 195, 147, 32, 19, 92, 172, 30, 209, 169, 19, 30, 64, 223, 169, 49, 201, 73, 63, 6, 87, 75, 127, 139, 139, 58, 19, 138, 124, 76, 15, 228, 6, 188, 138, 125, 174, 69, 82, 17, 255, 51, 155, 93, 61, 227, 49, 41, 200, 81, 106, 246, 242, 165, 39, 211, 157, 104, 20, 161, 203, 170, 204, 167, 124, 82, 33, 12, 82, 193, 254, 39, 117, 79, 29, 242, 219, 195, 127, 149, 203, 43, 169, 184, 154, 51, 182, 81, 178, 215, 2, 238, 210, 129, 58, 222, 187, 7, 240, 38, 237, 243, 204, 74, 235, 104, 82, 10, 128, 140, 228, 244, 225, 67, 57, 102, 0, 148, 33, 77, 32, 39, 190, 245, 5, 81, 206, 241, 214, 94, 191, 14, 183, 209, 24, 193, 183, 171, 44, 231, 6, 61, 153, 236, 216, 149, 43, 46, 229, 190, 140, 33, 174, 129, 131, 173, 23, 63, 208, 209, 179, 72, 120, 53, 131, 230, 14, 244, 76, 110, 227, 147, 253, 146, 171, 87, 185, 208, 118, 42, 178, 221, 76, 52, 242, 60, 204, 194, 7, 219, 134, 0, 88, 178, 233, 200, 249, 186, 134, 79, 24, 178, 160, 72, 151, 95, 88, 170, 116, 65, 35, 84, 144, 110, 235, 62, 15, 85, 118, 17, 48, 48, 249, 194, 162, 162, 151, 147, 132, 155, 0, 138, 100, 199, 146, 164, 127, 107, 62, 1, 51, 37, 84, 151, 80, 113, 226, 72, 81, 239, 143, 47, 101, 194, 157, 240, 75, 143, 104, 220, 240, 161, 195, 243, 164, 45, 23, 225, 82, 118, 161, 52, 208, 236, 177, 20, 94, 122, 192, 248, 242, 95, 177, 90, 255, 123, 174, 199, 15, 24, 133, 80, 32, 81, 28, 109, 12, 141, 196, 16, 92, 183, 150, 64, 241, 75, 244, 167, 65, 67, 72, 194, 35, 129, 204, 103, 58, 157, 208, 8, 140, 49, 153, 46, 137, 48, 252, 142, 124, 74, 49, 190, 217, 33, 27, 1, 251, 53, 33, 40, 4, 154, 13, 29, 139, 165, 166, 207, 105, 147, 73, 94, 167, 148, 3, 234, 60, 158, 168, 175, 120, 239, 93, 181, 131, 5, 138, 27, 174, 189, 198, 69, 65, 41, 228, 37, 42, 44, 121, 33, 241, 100, 41, 130, 123, 226, 105, 5, 183, 116, 145, 162, 126, 8, 199, 222, 144, 134, 88, 66, 61, 110, 50, 248, 94, 187, 99, 114, 223, 79, 41, 145, 194, 184, 252, 249, 84, 30, 103, 224, 195, 186, 158, 104, 98, 1, 245, 172, 56, 188, 226, 100, 129, 173, 18, 198, 172, 127, 230, 226, 26, 22, 219, 204, 197, 49, 123, 92, 88, 43, 239, 101, 130, 14, 251, 170, 146, 229, 219, 6, 230, 79, 190, 189, 126, 235, 129, 143, 79, 50, 23, 123, 128, 241, 2, 231, 105, 172, 153, 80, 77, 226, 237, 236, 25, 27, 232, 69, 205, 221, 102, 59, 189, 214, 192, 12, 5, 233, 115, 24, 209, 27, 124, 203, 135, 38, 171, 156, 62, 188, 87, 89, 229, 183, 165, 120, 182, 22, 204, 86, 245, 43, 231, 1, 1, 89, 69, 57, 99, 178, 230, 130, 231, 188, 248, 117, 104, 249, 247, 148, 212, 52, 162, 38, 224, 85, 30, 154, 121, 188, 10, 234, 221, 85, 51, 35, 215, 150, 195, 254, 171, 194, 160, 203, 233, 233, 227, 56, 188, 72, 47, 117, 2, 186, 144, 236, 1, 133, 163, 244, 1, 51, 201, 33, 222, 28, 227, 125, 110, 87, 193, 199, 106, 205, 186, 155, 204, 64, 66, 156, 222, 94, 70, 96, 121, 190, 93, 226, 76, 36, 93, 210, 84, 185, 253, 80, 16, 62, 190, 23, 144, 37, 86, 200, 65, 242, 123, 27, 125, 243, 113, 160, 128, 57, 173, 101, 98, 137, 45, 227, 239, 84, 116, 81, 85, 25, 86, 135, 31, 193, 15, 63, 189, 25, 69, 50, 219, 157, 218, 70, 19, 238, 147, 82, 65, 129, 146, 10, 49, 112, 174, 88, 136, 187, 78, 18, 135, 26, 58, 110, 175, 26, 178, 57, 104, 186, 237, 73, 82, 208, 127, 215, 142, 154, 124, 202, 99, 60, 199, 123, 160, 205, 6, 168, 171, 27, 132, 89, 128, 116, 218, 89, 153, 245, 15, 166, 109, 25, 71, 154, 169, 189, 32, 99, 194, 58, 2, 55, 238, 216, 122, 173, 182, 68, 62, 59, 60, 114, 66, 131, 209, 69, 95, 38, 21, 5, 89, 56, 190, 126, 250, 91, 26, 36, 125, 159, 200, 97, 237, 71, 115, 166, 123, 37, 115, 138, 64, 69, 203, 200, 251, 84, 61, 193, 219, 222, 189, 112, 155, 39, 93, 147, 206, 162, 204, 122, 234, 125, 25, 221, 220, 230, 201, 179, 69, 214, 251, 132, 235, 107, 98, 175, 109, 180, 175, 120, 138, 227, 155, 76, 55, 44, 182, 38, 204, 95, 137, 101, 73, 215, 235, 100, 105, 87, 252, 54, 64, 242, 175, 186, 170, 207, 22, 183, 201, 206, 182, 128, 235, 118, 189, 127, 56, 145, 165, 85, 186, 235, 136, 166, 129, 43, 133, 203, 212, 161, 25, 180, 9, 134, 27, 44, 244, 92, 1, 241, 16, 115, 32, 168, 166, 142, 141, 95, 57, 121, 129, 151, 215, 206, 34, 254, 158, 110, 175, 248, 61, 27, 116, 172, 118, 174, 230, 152, 90, 54, 197, 12, 140, 174, 203, 75, 121, 116, 175, 236, 12, 137, 111, 104, 42, 33, 73, 183, 172, 32, 56, 66, 14, 152, 111, 11, 37, 185, 144, 228, 64, 227, 88, 153, 202, 233, 133, 57, 132, 158, 233, 166, 116, 173, 38, 34, 184, 160, 167, 6, 40, 197, 225, 15, 85, 50, 13, 99, 69, 19, 79, 160, 69, 146, 101, 238, 19, 204, 87, 199, 84, 249, 10, 184, 41, 207, 104, 209, 196, 56, 184, 0, 140, 53, 102, 233, 145, 183, 220, 42, 140, 222, 87, 84, 116, 216, 133, 44, 98, 25, 239, 84, 235, 180, 122, 16, 234, 146, 4, 128, 114, 144, 112, 237, 251, 8, 101, 31, 39, 202, 210, 125, 55, 158, 218, 67, 100, 152, 9, 124, 255, 211, 110, 246, 206, 43, 146, 215, 216, 131, 255, 8, 44, 65, 123, 96, 0, 165, 73, 197, 103, 48, 168, 245, 150, 188, 1, 130, 30, 122, 185, 178, 167, 238, 158, 171, 45, 146, 31, 232, 137, 220, 236, 197, 154, 96, 212, 55, 247, 48, 180, 2, 13, 253, 69, 245, 118, 18, 34, 123, 2, 119, 43, 193, 219, 163, 220, 233, 189, 242, 244, 155, 71, 158, 92, 180, 68, 73, 100, 76, 116, 247, 240, 11, 220, 63, 232, 245, 140, 50, 155, 223, 16, 208, 128, 30, 150, 175, 231, 107, 33, 24, 5, 51, 216, 121, 183, 249, 220, 126, 34, 50, 41, 28, 20, 16, 110, 182, 209, 224, 94, 246, 68, 154, 154, 51, 0, 168, 108, 247, 110, 120, 155, 176, 38, 127, 168, 48, 4, 34, 20, 114, 253, 74, 146, 117, 91, 94, 141, 111, 215, 1, 122, 139, 30, 126, 90, 226, 36, 133, 105, 200, 147, 104, 89, 119, 65, 157, 113, 180, 164, 185, 139, 197, 145, 73, 209, 199, 189, 20, 192, 28, 207, 86, 4, 235, 177, 238, 226, 116, 243, 33, 170, 29, 66, 199, 223, 163, 185, 96, 240, 246, 225, 232, 22, 178, 152, 83, 127, 45, 25, 71, 182, 87, 235, 132, 84, 10, 11, 84, 167, 107, 253, 100, 32, 99, 20, 66, 27, 93, 97, 227, 69, 3, 232, 64, 253, 48, 48, 3, 110, 128, 228, 194, 200, 52, 253, 133, 235, 180, 111, 90, 6, 180, 59, 187, 85, 140, 69, 178, 189, 167, 94, 173, 220, 173, 180, 89, 2, 94, 180, 149, 39, 22, 176, 157, 191, 184, 250, 193, 105, 205, 67, 127, 212, 118, 99, 10, 184, 16, 27, 22, 11, 243, 179, 112, 228, 63, 229, 17, 27, 62, 202, 217, 94, 230, 18, 162, 117, 208, 252, 20, 50, 198, 129, 66, 250, 86, 160, 10, 180, 131, 128, 2, 123, 20, 95, 109, 122, 173, 218, 167, 14, 73, 220, 95, 135, 219, 9, 185, 2, 244, 155, 212, 248, 234, 59, 236, 204, 4, 84, 239, 137, 50, 209, 45, 148, 86, 5, 225, 146, 226, 156, 185, 224, 148, 43, 17, 91, 255, 137, 111, 41, 201, 28, 134, 244, 63, 13, 14, 170, 14, 134, 1, 37, 230, 77, 149, 141, 34, 209, 23, 142, 237, 46, 219, 200, 82, 17, 77, 88, 146, 103, 99, 64, 108, 23, 44, 119, 40, 190, 112, 194, 111, 119, 160, 218, 123, 40, 14, 9, 87, 133, 109, 44, 150, 215, 214, 165, 163, 215, 76, 41, 208, 54, 54, 217, 154, 38, 111, 130, 111, 123, 45, 134, 6, 149, 199, 11, 99, 152, 23, 219, 32, 232, 228, 245, 70, 11, 217, 65, 90, 30, 39, 208, 229, 4, 25, 71, 172, 204, 149, 45, 112, 245, 190, 248, 198, 253, 253, 177, 140, 207, 220, 228, 161, 161, 1, 223, 3, 40, 117, 253, 80, 128, 97, 115, 225, 242, 44, 97, 213, 22, 235, 252, 38, 142, 143, 239, 179, 33, 14, 177, 61, 218, 53, 180, 241, 142, 120, 175, 13, 117, 155, 81, 94, 154, 179, 230, 223, 64, 113, 205, 82, 252, 249, 156, 83, 222, 208, 153, 58, 80, 59, 196, 71, 124, 121, 105, 245, 7, 94, 180, 102, 115, 82, 181, 167, 241, 201, 82, 54, 139, 206, 212, 71, 94, 184, 28, 68, 32, 31, 232, 205, 82, 248, 4, 157, 173, 144, 183, 235, 12, 210, 196, 33, 72, 215, 98, 199, 232, 59, 145, 154, 9, 120, 102, 17, 45, 114, 141, 211, 188, 231, 238, 230, 164, 37, 88, 57, 216, 164, 148, 33, 251, 96, 217, 249, 4, 132, 24, 94, 28, 33, 10, 91, 20, 216, 148, 18, 172, 211, 72, 224, 149, 194, 96, 222, 193, 205, 27, 133, 72, 48, 237, 239, 109, 235, 56, 124, 55, 61, 73, 178, 239, 93, 200, 217, 153, 248, 163, 220, 69, 118, 113, 30, 72, 1, 160, 238, 202, 88, 71, 37, 31, 44, 35, 124, 156, 115, 82, 155, 55, 201, 239, 120, 116, 26, 62, 97, 11, 162, 88, 252, 138, 198, 85, 225, 249, 110, 113, 101, 34, 1, 2, 217, 9, 87, 128, 191, 38, 118, 106, 70, 153, 228, 239, 218, 250, 62, 255, 219, 213, 204, 33, 212, 169, 115, 110, 212, 250, 54, 193, 31, 64, 16, 251, 226, 217, 173, 150, 224, 235, 219, 52, 244, 37, 64, 104, 177, 44, 119, 157, 107, 44, 164, 238, 20, 200, 42, 217, 196, 233, 225, 212, 18, 217, 105, 59, 86, 14, 214, 97, 133, 153, 63, 136, 214, 122, 218, 10, 93, 23, 75, 196, 14, 83, 93, 157, 144, 79, 206, 108, 214, 204, 100, 185, 4, 36, 22, 179, 110, 40, 228, 216, 70, 9, 112, 54, 154, 249, 249, 181, 73, 156, 123, 161, 117, 122, 50, 102, 113, 123, 154, 114, 112, 127, 66, 6, 216, 219, 235, 63, 114, 208, 37, 113, 69, 159, 127, 6, 74, 103, 255, 202, 116, 7, 33, 194, 236, 253, 161, 1, 199, 128, 225, 252, 104, 169, 20, 130, 192, 136, 88, 191, 225, 215, 75, 192, 166, 14, 35, 60, 71, 236, 171, 25, 244, 1, 250, 7, 227, 14, 46, 10, 146, 155, 83, 131, 248, 72, 188, 132, 238, 191, 72, 142, 34, 118, 114, 52, 95, 219, 37, 205, 238, 170, 52, 42, 125, 86, 186, 131, 184, 125, 97, 236, 71, 122, 84, 162, 183, 67, 40, 112, 234, 43, 92, 180, 150, 202, 124, 237, 114, 1, 238, 175, 239, 109, 255, 78, 194, 113, 160, 132, 217, 8, 179, 211, 67, 27, 67, 49, 6, 171, 98, 127, 49, 182, 201, 4, 68, 167, 120, 112, 213, 140, 161, 48, 109, 108, 50, 191, 8, 71, 94, 115, 164, 151, 82, 91, 175, 156, 132, 49, 79, 203, 1, 23, 25, 75, 53, 24, 46, 226, 217, 69, 79, 225, 208, 3, 179, 226, 146, 169, 130, 45, 235, 134, 223, 238, 13, 123, 250, 61, 106, 80, 165, 198, 117, 130, 87, 58, 94, 233, 4, 41, 220, 169, 99, 12, 220, 31, 157, 156, 82, 252, 209, 143, 135, 77, 79, 24, 212, 229, 98, 199, 100, 42, 147, 248, 187, 10, 40, 17, 83, 243, 158, 63, 80, 114, 195, 188, 1, 74, 63, 187, 78, 74, 72, 186, 98, 10, 193, 84, 186, 67, 166, 25, 21, 189, 9, 149, 158, 119, 56, 234, 129, 22, 32, 97, 69, 158, 3, 242, 78, 79, 168, 190, 78, 117, 26, 249, 197, 3, 227, 22, 9, 199, 218, 56, 230, 23, 54, 197, 92, 184, 18, 231, 52, 183, 81, 91, 11, 14, 169, 212, 55, 181, 206, 150, 95, 166, 153, 67, 61, 12, 236, 213, 1, 127, 252, 7, 211, 219, 169, 146, 3, 16, 243, 17, 173, 68, 166, 184, 143, 228, 126, 0, 162, 125, 55, 240, 111, 209, 157, 180, 134, 199, 189, 7, 169, 6, 228, 194, 57, 96, 25, 212, 126, 126, 65, 118, 67, 137, 15, 97, 234, 45, 14, 150, 75, 68, 101, 91, 89, 32, 140, 125, 57, 47, 88, 159, 38, 226, 166, 158, 82, 62, 182, 98, 229, 16, 203, 101, 1, 1, 133, 42, 92, 227, 46, 210, 60, 240, 226, 15, 90, 199, 42, 201, 67, 104, 54, 29, 98, 32, 122, 4, 156, 165, 171, 193, 128, 134, 237, 167, 117, 116, 27, 47, 139, 72, 207, 249, 194, 238, 84, 122, 126, 153, 131, 223, 177, 70, 237, 67, 119, 159, 74, 236, 128, 96, 59, 141, 154, 12, 16, 119, 41, 48, 38, 223, 140, 124, 38, 243, 232, 193, 86, 91, 206, 17, 36, 69, 141, 71, 194, 3, 120, 150, 98, 107, 161, 140, 65, 210, 194, 216, 12, 149, 141, 47, 152, 150, 167, 65, 67, 249, 9, 180, 195, 111, 48, 41, 151, 209, 139, 94, 53, 132, 165, 99, 3, 152, 42, 129, 196, 199, 97, 17, 235, 245, 2, 182, 238, 131, 212, 210, 21, 135, 69, 45, 164, 191, 29, 201, 241, 211, 68, 168, 241, 137, 194, 192, 217, 222, 10, 70, 117, 254, 117, 80, 241, 118, 155, 161, 49, 231, 187, 243, 198, 135, 119, 90, 102, 248, 201, 77, 202, 230, 87, 255, 102, 157, 160, 127, 50, 78, 25, 252, 234, 104, 51, 94, 192, 87, 40, 19, 177, 142, 62, 92, 35, 148, 136, 243, 15, 185, 213, 106, 217, 175, 115, 226, 64, 218, 239, 250, 52, 195, 17, 140, 42, 69, 252, 130, 215, 93, 120, 21, 60, 117, 193, 22, 14, 103, 130, 237, 232, 201, 122, 172, 232, 217, 124, 129, 246, 110, 186, 25, 3, 48, 75, 221, 71, 3, 209, 254, 193, 198, 49, 82, 96, 113, 254, 67, 249, 25, 208, 96, 154, 112, 177, 223, 209, 29, 28, 59, 164, 214, 203, 217, 161, 212, 56, 3, 23, 107, 118, 168, 206, 193, 114, 76, 147, 89, 35, 91, 132, 99, 45, 18, 59, 183, 8, 3, 86, 252, 120, 255, 223, 24, 36, 97, 182, 3, 202, 218, 66, 146, 65, 212, 21, 167, 113, 95, 14, 243, 13, 186, 249, 199, 112, 144, 239, 112, 174, 26, 246, 240, 116, 144, 6, 131, 251, 200, 56, 166, 178, 10, 15, 197, 92, 179, 139, 22, 182, 242, 238, 17, 191, 208, 107, 89, 8, 89, 38, 162, 122, 137, 9, 240, 102, 151, 27, 49, 107, 116, 48, 1, 167, 251, 40, 243, 20, 19, 197, 14, 149, 228, 200, 227, 145, 96, 55, 246, 39, 166, 46, 114, 167, 104, 166, 148, 84, 232, 225, 82, 144, 154, 85, 227, 245, 221, 104, 187, 72, 67, 11, 133, 67, 22, 79, 18, 209, 53, 96, 244, 192, 176, 68, 181, 171, 225, 105, 7, 194, 220, 182, 171, 81, 101, 38, 196, 107, 156, 46, 159, 55, 1, 67, 119, 60, 174, 196, 39, 211, 101, 22, 6, 70, 122, 82, 21, 87, 159, 172, 99, 22, 223, 209, 171, 173, 140, 253, 173], - [94, 86, 107, 9, 252, 37, 205, 188, 97, 208, 35, 154, 167, 199, 152, 167, 29, 252, 97, 212, 196, 61, 11, 236, 4, 55, 12, 189, 199, 140, 50, 248, 43, 121, 86, 215, 100, 59, 100, 111, 152, 227, 124, 166, 96, 225, 197, 66, 164, 175, 13, 58, 25, 151, 22, 253, 186, 180, 9, 187, 167, 172, 207, 255, 180, 175, 179, 134, 244, 239, 141, 9, 153, 206, 87, 184, 107, 238, 102, 239, 149, 35, 94, 89, 168, 15, 123, 148, 42, 86, 46, 52, 22, 43, 57, 12, 112, 37, 132, 101, 209, 232, 77, 64, 115, 65, 199, 59, 186, 92, 36, 196, 188, 239, 124, 86, 151, 12, 102, 14, 215, 23, 209, 10, 144, 40, 99, 110, 168, 59, 21, 209, 223, 149, 245, 97, 253, 101, 248, 175, 17, 131, 211, 132, 9, 75, 190, 235, 123, 3, 50, 169, 90, 213, 216, 43, 51, 75, 113, 231, 114, 0, 208, 177, 200, 32, 252, 224, 84, 84, 201, 46, 125, 34, 157, 41, 21, 208, 78, 198, 127, 230, 124, 4, 205, 212, 193, 111, 183, 252, 172, 231, 86, 61, 238, 87, 252, 140, 87, 95, 58, 66, 74, 70, 88, 66, 199, 141, 174, 167, 156, 168, 0, 62, 137, 79, 190, 24, 138, 0, 206, 126, 68, 71, 107, 157, 1, 95, 21, 171, 16, 154, 66, 136, 64, 125, 136, 188, 93, 233, 123, 194, 16, 58, 73, 213, 36, 6, 137, 42, 128, 106, 155, 126, 188, 50, 119, 192, 248, 140, 42, 59, 56, 230, 210, 68, 9, 166, 89, 73, 37, 72, 49, 202, 19, 105, 233, 51, 240, 4, 189, 17, 98, 128, 81, 30, 179, 164, 251, 93, 33, 199, 43, 55, 61, 133, 71, 80, 217, 169, 192, 99, 200, 63, 13, 238, 174, 88, 125, 94, 177, 224, 149, 39, 167, 188, 176, 25, 223, 151, 39, 236, 73, 225, 186, 168, 147, 11, 253, 50, 220, 205, 32, 50, 45, 132, 108, 42, 144, 144, 238, 128, 194, 237, 175, 128, 182, 71, 77, 30, 91, 115, 103, 194, 146, 100, 220, 198, 94, 34, 188, 240, 45, 248, 220, 33, 72, 216, 159, 118, 82, 108, 63, 111, 184, 223, 7, 166, 70, 117, 231, 216, 138, 159, 84, 246, 209, 239, 69, 33, 201, 103, 173, 178, 186, 17, 126, 141, 189, 115, 62, 88, 217, 46, 125, 226, 171, 144, 83, 220, 132, 43, 45, 29, 131, 230, 104, 34, 36, 49, 200, 221, 253, 148, 195, 238, 161, 191, 175, 160, 8, 98, 249, 209, 52, 35, 183, 234, 184, 198, 29, 53, 18, 240, 184, 37, 232, 86, 32, 191, 167, 27, 68, 93, 40, 146, 169, 191, 154, 56, 146, 12, 226, 75, 250, 222, 173, 117, 254, 253, 167, 192, 155, 176, 105, 185, 49, 120, 215, 184, 114, 23, 244, 34, 103, 68, 4, 30, 158, 58, 43, 92, 83, 146, 148, 249, 27, 82, 250, 227, 32, 222, 228, 249, 44, 33, 197, 10, 163, 208, 169, 144, 59, 134, 72, 214, 130, 251, 31, 72, 39, 209, 137, 247, 211, 96, 98, 205, 126, 38, 220, 218, 190, 152, 139, 202, 193, 106, 240, 211, 156, 146, 86, 0, 36, 163, 91, 28, 29, 240, 187, 63, 83, 190, 210, 171, 134, 60, 238, 75, 3, 63, 234, 87, 221, 171, 189, 122, 20, 33, 130, 64, 188, 200, 165, 113, 10, 108, 230, 68, 63, 45, 21, 164, 218, 25, 208, 117, 59, 95, 47, 92, 213, 5, 101, 92, 168, 109, 141, 60, 148, 142, 209, 95, 41, 147, 64, 21, 64, 58, 225, 131, 242, 145, 41, 178, 110, 150, 25, 142, 114, 45, 71, 204, 31, 186, 131, 138, 130, 210, 110, 83, 152, 197, 181, 172, 222, 183, 8, 43, 220, 134, 186, 18, 196, 130, 70, 154, 155, 112, 186, 142, 68, 74, 253, 252, 187, 64, 106, 7, 18, 124, 34, 46, 189, 24, 240, 140, 92, 250, 7, 92, 99, 243, 129, 84, 160, 52, 157, 165, 48, 216, 112, 87, 58, 57, 86, 183, 220, 211, 163, 165, 155, 190, 248, 47, 47, 219, 116, 69, 141, 76, 211, 114, 53, 126, 61, 76, 123, 126, 122, 248, 175, 213, 99, 153, 88, 111, 223, 227, 74, 156, 135, 58, 172, 123, 23, 213, 151, 37, 6, 221, 3, 4, 52, 105, 119, 17, 103, 29, 39, 170, 138, 184, 211, 94, 235, 220, 132, 92, 122, 36, 48, 139, 134, 69, 134, 156, 180, 68, 224, 200, 110, 202, 23, 193, 25, 187, 201, 191, 96, 158, 140, 85, 236, 79, 135, 234, 49, 95, 141, 210, 166, 137, 29, 242, 75, 6, 42, 144, 117, 65, 213, 174, 186, 57, 112, 145, 195, 72, 127, 252, 170, 91, 79, 45, 238, 34, 182, 246, 140, 234, 89, 64, 234, 127, 118, 114, 195, 173, 169, 171, 163, 15, 71, 111, 241, 234, 223, 3, 111, 87, 225, 244, 254, 187, 140, 134, 229, 110, 190, 11, 150, 7, 133, 193, 79, 154, 234, 14, 24, 19, 194, 141, 31, 62, 49, 90, 21, 173, 115, 238, 64, 123, 203, 198, 136, 177, 194, 208, 102, 241, 207, 80, 5, 95, 226, 53, 87, 172, 141, 122, 246, 96, 131, 33, 14, 71, 180, 110, 74, 108, 131, 197, 153, 21, 45, 210, 135, 185, 174, 242, 141, 224, 188, 74, 246, 255, 113, 141, 44, 154, 205, 7, 129, 103, 155, 74, 100, 170, 166, 207, 26, 145, 93, 231, 149, 75, 248, 228, 223, 79, 55, 113, 33, 74, 236, 195, 70, 5, 65, 82, 121, 17, 2, 123, 15, 202, 57, 36, 144, 171, 143, 38, 82, 73, 149, 166, 179, 164, 245, 215, 96, 225, 156, 81, 55, 48, 112, 34, 207, 114, 224, 37, 101, 32, 218, 120, 140, 43, 174, 135, 48, 222, 38, 13, 49, 238, 196, 47, 74, 174, 225, 131, 24, 28, 232, 208, 5, 251, 81, 105, 184, 46, 171, 198, 148, 35, 124, 104, 20, 63, 154, 84, 181, 156, 19, 26, 244, 35, 135, 218, 184, 13, 88, 5, 113, 100, 154, 218, 161, 184, 198, 85, 203, 59, 50, 220, 206, 128, 95, 40, 19, 226, 139, 13, 226, 199, 237, 184, 195, 132, 232, 10, 152, 160, 184, 5, 204, 0, 74, 191, 88, 199, 139, 53, 33, 39, 55, 221, 79, 145, 133, 194, 80, 4, 57, 234, 171, 178, 194, 249, 239, 30, 184, 20, 145, 251, 139, 36, 226, 23, 224, 162, 142, 85, 175, 239, 229, 166, 253, 133, 98, 216, 155, 65, 144, 135, 112, 130, 143, 158, 100, 113, 31, 14, 120, 35, 164, 179, 22, 87, 102, 29, 28, 174, 133, 76, 139, 233, 90, 106, 69, 224, 63, 255, 119, 115, 170, 36, 45, 43, 234, 123, 205, 8, 13, 95, 135, 201, 106, 3, 254, 26, 61, 23, 217, 109, 208, 135, 54, 151, 155, 30, 124, 25, 134, 107, 181, 184, 90, 136, 137, 146, 127, 157, 28, 135, 238, 167, 205, 169, 84, 223, 231, 97, 58, 200, 223, 21, 23, 153, 218, 251, 202, 246, 219, 251, 220, 173, 24, 130, 111, 116, 165, 115, 187, 18, 6, 84, 80, 98, 20, 179, 122, 145, 56, 197, 74, 190, 20, 184, 42, 84, 27, 165, 198, 38, 132, 204, 192, 97, 242, 176, 82, 35, 206, 42, 216, 115, 146, 1, 141, 142, 120, 6, 166, 216, 199, 166, 233, 240, 244, 191, 174, 224, 145, 37, 206, 153, 121, 131, 39, 206, 196, 150, 239, 90, 1, 90, 252, 190, 245, 172, 121, 68, 228, 116, 89, 107, 197, 111, 157, 45, 70, 60, 248, 63, 150, 200, 104, 203, 22, 85, 87, 46, 95, 18, 95, 23, 109, 175, 171, 116, 225, 12, 215, 52, 65, 92, 247, 207, 78, 176, 205, 156, 47, 51, 71, 42, 241, 103, 81, 50, 183, 210, 251, 194, 148, 241, 211, 192, 88, 247, 255, 124, 11, 175, 34, 105, 221, 128, 195, 62, 142, 35, 110, 35, 8, 206, 134, 30, 188, 156, 11, 160, 152, 216, 36, 34, 200, 132, 154, 182, 240, 173, 103, 250, 184, 133, 181, 194, 73, 113, 71, 57, 151, 59, 196, 193, 94, 198, 2, 240, 80, 133, 30, 2, 143, 35, 255, 230, 207, 120, 242, 161, 113, 141, 203, 21, 113, 129, 31, 13, 176, 81, 74, 193, 179, 127, 108, 189, 35, 186, 231, 134, 58, 184, 116, 246, 37, 30, 33, 41, 63, 122, 243, 3, 186, 249, 13, 8, 126, 169, 145, 42, 238, 141, 220, 108, 128, 38, 88, 230, 39, 140, 11, 21, 193, 77, 237, 249, 208, 65, 192, 208, 163, 232, 126, 131, 64, 6, 64, 190, 198, 85, 172, 137, 175, 144, 126, 144, 109, 30, 53, 60, 14, 54, 204, 59, 135, 189, 93, 107, 126, 225, 32, 245, 151, 13, 150, 43, 238, 53, 82, 100, 211, 115, 68, 190, 142, 214, 251, 87, 75, 2, 116, 199, 76, 94, 198, 38, 2, 125, 63, 233, 56, 199, 69, 223, 106, 61, 207, 153, 240, 129, 182, 223, 242, 160, 237, 206, 80, 187, 158, 18, 22, 127, 176, 225, 47, 67, 208, 4, 188, 234, 3, 250, 102, 146, 213, 46, 83, 23, 112, 133, 16, 79, 167, 84, 108, 3, 172, 13, 133, 208, 199, 217, 233, 113, 5, 165, 235, 67, 126, 77, 24, 190, 127, 150, 221, 36, 51, 22, 171, 120, 30, 19, 215, 244, 213, 144, 137, 46, 148, 131, 176, 95, 161, 56, 142, 15, 75, 136, 142, 179, 48, 143, 35, 212, 55, 150, 165, 28, 80, 181, 20, 227, 24, 237, 177, 92, 166, 254, 48, 36, 154, 253, 14, 119, 208, 243, 127, 70, 73, 223, 167, 96, 248, 44, 9, 168, 225, 2, 177, 213, 37, 195, 44, 239, 2, 253, 20, 179, 12, 210, 178, 7, 33, 11, 180, 32, 203, 99, 197, 8, 173, 210, 121, 89, 160, 62, 128, 232, 23, 145, 243, 163, 21, 169, 134, 211, 197, 16, 119, 247, 195, 44, 136, 94, 121, 106, 91, 8, 109, 246, 177, 78, 65, 222, 175, 252, 122, 75, 144, 127, 129, 228, 190, 58, 131, 107, 93, 125, 25, 180, 169, 251, 193, 250, 193, 84, 213, 239, 172, 34, 55, 6, 2, 59, 118, 34, 42, 5, 88, 109, 84, 201, 29, 141, 236, 132, 125, 218, 170, 139, 108, 74, 196, 175, 36, 195, 122, 128, 107, 136, 189, 44, 190, 172, 225, 66, 239, 97, 214, 189, 245, 109, 230, 35, 140, 45, 167, 62, 154, 224, 24, 108, 143, 85, 188, 154, 37, 175, 50, 13, 243, 197, 214, 196, 71, 64, 228, 132, 208, 185, 80, 85, 148, 17, 110, 8, 132, 10, 12, 5, 29, 241, 18, 254, 28, 153, 77, 165, 82, 196, 238, 112, 230, 92, 145, 161, 243, 80, 185, 174, 15, 232, 82, 87, 204, 39, 116, 119, 106, 143, 77, 249, 155, 9, 131, 150, 232, 167, 98, 41, 192, 205, 90, 69, 194, 44, 233, 109, 248, 25, 171, 126, 235, 218, 126, 65, 230, 19, 49, 186, 37, 187, 199, 59, 251, 80, 91, 129, 84, 171, 73, 87, 246, 77, 172, 35, 22, 7, 207, 175, 232, 50, 7, 42, 183, 117, 5, 254, 24, 177, 124, 117, 190, 170, 173, 96, 89, 187, 154, 126, 225, 83, 97, 45, 111, 188, 242, 125, 163, 134, 88, 243, 182, 115, 174, 37, 11, 197, 55, 58, 116, 159, 156, 70, 223, 140, 125, 167, 174, 116, 45, 194, 27, 10, 241, 240, 10, 136, 140, 152, 223, 212, 155, 221, 54, 60, 160, 27, 176, 77, 250, 173, 165, 209, 162, 115, 208, 122, 153, 11, 245, 196, 26, 226, 11, 2, 174, 242, 46, 226, 171, 146, 115, 70, 194, 143, 108, 82, 173, 49, 243, 108, 103, 247, 12, 101, 88, 110, 206, 250, 111, 109, 206, 233, 236, 2, 225, 255, 168, 191, 14, 36, 98, 55, 208, 110, 154, 200, 93, 178, 47, 121, 163, 53, 93, 144, 172, 159, 222, 14, 167, 238, 112, 161, 135, 113, 22, 203, 81, 186, 55, 135, 107, 113, 148, 164, 55, 68, 219, 230, 166, 12, 16, 194, 5, 21, 244, 154, 184, 83, 171, 45, 137, 56, 239, 37, 17, 23, 197, 95, 243, 161, 115, 64, 236, 139, 9, 179, 50, 114, 240, 236, 171, 111, 252, 202, 20, 137, 224, 40, 93, 66, 200, 159, 62, 205, 164, 129, 169, 109, 74, 39, 68, 219, 254, 175, 208, 27, 210, 250, 47, 224, 85, 243, 85, 81, 114, 23, 198, 83, 54, 238, 106, 218, 228, 193, 36, 246, 23, 47, 196, 86, 200, 222, 81, 28, 71, 254, 74, 76, 60, 9, 171, 200, 33, 92, 49, 134, 190, 97, 110, 60, 211, 76, 128, 118, 212, 244, 182, 33, 168, 25, 15, 48, 19, 178, 211, 83, 215, 192, 95, 244, 255, 118, 81, 137, 208, 142, 37, 61, 4, 4, 94, 26, 143, 20, 81, 50, 202, 241, 211, 101, 22, 179, 108, 107, 102, 212, 236, 23, 251, 128, 101, 25, 190, 196, 154, 216, 114, 64, 163, 104, 199, 215, 217, 114, 104, 43, 197, 223, 176, 139, 43, 4, 99, 152, 23, 77, 49, 210, 234, 184, 75, 161, 119, 212, 230, 42, 74, 244, 232, 108, 70, 64, 141, 182, 241, 28, 126, 179, 12, 108, 135, 235, 210, 34, 91, 149, 82, 198, 105, 156, 38, 224, 3, 86, 44, 101, 168, 183, 184, 193, 162, 25, 199, 225, 158, 107, 48, 246, 232, 195, 237, 83, 59, 195, 19, 227, 204, 17, 211, 193, 102, 80, 15, 163, 106, 108, 133, 51, 160, 219, 15, 69, 28, 211, 147, 150, 210, 99, 37, 47, 18, 235, 113, 2, 47, 241, 7, 46, 24, 81, 50, 186, 252, 30, 135, 1, 243, 198, 31, 173, 179, 9, 49, 241, 49, 140, 212, 58, 155, 169, 167, 146, 175, 101, 196, 201, 179, 170, 14, 150, 118, 208, 172, 121, 104, 36, 89, 28, 195, 114, 125, 241, 191, 243, 144, 151, 147, 101, 210, 63, 86, 206, 209, 54, 251, 157, 78, 150, 172, 133, 187, 179, 114, 75, 185, 79, 18, 26, 232, 18, 185, 208, 221, 252, 50, 156, 101, 60, 60, 47, 42, 40, 88, 133, 107, 136, 100, 135, 246, 81, 195, 172, 78, 188, 32, 137, 65, 34, 180, 0, 76, 86, 48, 74, 82, 51, 211, 216, 245, 130, 213, 218, 232, 176, 136, 217, 10, 192, 94, 13, 228, 5, 121, 251, 194, 185, 107, 227, 66, 250, 127, 54, 66, 165, 178, 242, 93, 99, 130, 226, 20, 102, 117, 136, 193, 226, 210, 220, 46, 218, 105, 121, 7, 15, 9, 124, 211, 83, 13, 32, 249, 214, 106, 140, 116, 248, 187, 142, 111, 104, 63, 214, 182, 245, 249, 3, 216, 47, 109, 143, 241, 11, 119, 155, 255, 162, 168, 4, 249, 132, 114, 235, 157, 255, 231, 219, 141, 38, 255, 212, 179, 231, 121, 5, 182, 194, 165, 168, 194, 51, 171, 226, 159, 129, 214, 133, 162, 164, 234, 129, 120, 19, 226, 75, 108, 232, 62, 118, 163, 81, 82, 45, 141, 167, 54, 60, 183, 212, 157, 17, 245, 100, 76, 206, 160, 102, 3, 153, 3, 171, 96, 230, 41, 131, 248, 190, 76, 79, 42, 152, 186, 35, 46, 183, 134, 245, 54, 196, 37, 203, 227, 36, 100, 89, 6, 144, 215, 205, 250, 164, 215, 172, 150, 71, 245, 211, 176, 58, 185, 34, 221, 121, 86, 244, 143, 97, 5, 7, 143, 6, 122, 243, 129, 141, 106, 234, 68, 117, 235, 48, 125, 63, 201, 132, 134, 78, 51, 48, 182, 90, 225, 204, 98, 202, 123, 234, 154, 9, 139, 113, 158, 41, 49, 137, 174, 25, 194, 98, 199, 19, 40, 145, 226, 194, 133, 206, 152, 204, 17, 18, 16, 139, 120, 35, 114, 120, 30, 119, 229, 193, 153, 206, 248, 110, 113, 114, 80, 30, 249, 210, 35, 90, 107, 113, 110, 144, 130, 1, 149, 251, 207, 196, 116, 155, 48, 20, 197, 15, 67, 218, 177, 24, 162, 88, 255, 248, 108, 254, 159, 151, 80, 189, 239, 191, 29, 178, 119, 229, 140, 85, 249, 74, 17, 117, 38, 205, 56, 192, 250, 175, 36, 94, 1, 74, 25, 232, 175, 143, 174, 101, 84, 179, 48, 203, 88, 30, 141, 1, 173, 1, 130, 248, 66, 82, 219, 154, 191, 52, 233, 145, 107, 252, 57, 14, 144, 78, 17, 124, 77, 206, 202, 226, 191, 148, 144, 183, 250, 135, 89, 47, 74, 129, 189, 212, 43, 34, 187, 157, 187, 158, 92, 185, 145, 20, 230, 90, 127, 56, 27, 81, 77, 236, 34, 230, 57, 138, 20, 33, 115, 231, 254, 131, 186, 7, 167, 177, 0, 124, 242, 182, 223, 249, 73, 84, 94, 41, 77, 199, 192, 160, 42, 106, 150, 60, 125, 97, 165, 230, 151, 134, 105, 213, 0, 89, 143, 186, 77, 101, 234, 153, 210, 141, 188, 254, 252, 234, 122, 234, 136, 119, 155, 233, 180, 84, 105, 118, 44, 223, 216, 218, 109, 1, 5, 240, 49, 148, 225, 215, 162, 91, 33, 101, 89, 231, 67, 9, 218, 116, 172, 196, 73, 71, 243, 79, 71, 21, 162, 174, 252, 155, 211, 102, 80, 87, 155, 31, 15, 154, 120, 75, 240, 58, 94, 185, 234, 155, 37, 236, 83, 81, 21, 99, 6, 3, 171, 172, 229, 157, 103, 47, 203, 167, 200, 158, 142, 202, 47, 172, 151, 25, 15, 198, 41, 160, 90, 143, 223, 243, 197, 53, 89, 47, 195, 10, 200, 74, 164, 31, 165, 29, 247, 114, 123, 75, 81, 16, 42, 183, 164, 170, 140, 45, 69, 222, 66, 81, 34, 216, 224, 186, 86, 153, 164, 197, 191, 116, 153, 244, 90, 14, 93, 240, 186, 163, 180, 40, 243, 96, 97, 168, 211, 101, 166, 231, 64, 131, 26, 71, 26, 36, 141, 210, 99, 236, 135, 57, 163, 237, 194, 68, 61, 67, 36, 88, 245, 25, 25, 112, 100, 126, 244, 119, 190, 87, 25, 56, 120, 132, 222, 17, 226, 188, 201, 151, 86, 189, 215, 172, 137, 56, 173, 25, 222, 172, 25, 103, 25, 208, 128, 204, 82, 55, 133, 77, 80, 218, 134, 0, 119, 102, 9, 23, 196, 17, 109, 59, 209, 244, 196, 136, 40, 159, 197, 68, 243, 160, 76, 190, 103, 80, 137, 163, 188, 90, 248, 132, 84, 40, 228, 36, 141, 131, 131, 72, 166, 137, 250, 138, 71, 119, 93, 155, 31, 242, 83, 117, 205, 111, 97, 142, 84, 118, 108, 74, 26, 186, 109, 45, 209, 151, 191, 162, 190, 77, 233, 233, 29, 221, 32, 88, 192, 3, 170, 52, 23, 232, 157, 153, 113, 114, 36, 47, 124, 74, 125, 16, 153, 125, 209, 151, 133, 151, 222, 71, 70, 36, 6, 25, 170, 106, 65, 87, 192, 161, 103, 77, 234, 219, 241, 74, 158, 243, 230, 235, 40, 96, 87, 249, 167, 142, 7, 66, 225, 155, 139, 81, 82, 245, 28, 98, 133, 223, 172, 148, 105, 189, 53, 19, 34, 182, 56, 189, 23, 44, 26, 23, 92, 219, 70, 159, 229, 245, 211, 172, 150, 57, 105, 8, 39, 185, 42, 181, 233, 200, 177, 182, 16, 211, 179, 93, 105, 182, 209, 99, 143, 56, 32, 210, 198, 196, 16, 229, 153, 64, 49, 51, 2, 121, 17, 181, 10, 128, 214, 163, 181, 229, 230, 237, 186, 167, 109, 191, 85, 150, 53, 65, 32, 154, 102, 100, 8, 42, 60, 50, 243, 35, 242, 178, 189, 200, 216, 72, 23, 7, 43, 127, 24, 109, 15, 135, 85, 217, 59, 179, 218, 80, 145, 16, 164, 97, 128, 112, 162, 172, 134, 156, 163, 0, 177, 173, 15, 255, 246, 11, 252, 30, 86, 4, 181, 134, 46, 88, 118, 178, 139, 55, 231, 51, 42, 183, 124, 242, 158, 109, 123, 70, 76, 131, 249, 128, 82, 161, 183, 8, 62, 174, 88, 233, 151, 120, 180, 89, 237, 233, 70, 228, 232, 191, 35, 160, 207, 1, 131, 165, 191, 238, 121, 25, 24, 223, 13, 192, 105, 162, 169, 151, 48, 220, 87, 29, 208, 76, 179, 14, 73, 13, 162, 58, 243, 147, 11, 76, 226, 37, 77, 110, 242, 242, 9, 132, 121, 177, 214, 57, 85, 187, 152, 155, 185, 0, 49, 45, 181, 254, 173, 68, 235, 143, 136, 62, 97, 97, 226, 193, 145, 211, 239, 219, 38, 249, 1, 41, 72, 1, 40, 124, 34, 238, 150, 242, 99, 33, 153, 137, 136, 59, 255, 140, 211, 229, 149, 106, 237, 164, 87, 109, 154, 133, 219, 68, 69, 112, 136, 121, 4, 152, 97, 181, 223, 175, 145, 199, 62, 108, 111, 95, 240, 255, 236, 111, 56, 184, 217, 156, 65, 43, 87, 35, 59, 17, 79, 4, 202, 254, 235, 236, 188, 138, 148, 173, 57, 73, 12, 155, 174, 146, 201, 20, 162, 135, 24, 203, 226, 138, 198, 34, 94, 44, 239, 232, 32, 111, 178, 75, 236, 167, 201, 13, 188, 18, 25, 172, 126, 210, 214, 75, 45, 17, 43, 99, 174, 11, 161, 135, 40, 222, 170, 5, 37, 72, 221, 171, 142, 247, 77, 108, 132, 121, 219, 239, 68, 55, 71, 60, 52, 241, 143, 100, 98, 149, 144, 154, 70, 159, 86, 25, 155, 20, 227, 170, 17, 135, 157, 18, 100, 50, 149, 64, 196, 102, 135, 204, 4, 218, 231, 45, 241, 171, 131, 94, 206, 0, 100, 24, 98, 7, 110, 73, 36, 77, 23, 128, 236, 2, 251, 13, 148, 11, 202, 109, 216, 110, 11, 195, 186, 11, 114, 24, 92, 233, 19, 150, 66, 202, 187, 107, 186, 147, 91, 6, 60, 160, 143, 82, 133, 244, 163, 125, 133, 248, 206, 96, 163, 21, 93, 207, 185, 3, 67, 161, 237, 108, 7, 135, 74, 177, 255, 53, 171, 191, 50, 175, 97, 11, 41, 39, 49, 107, 135, 151, 223, 29, 251, 100, 177, 51, 247, 75, 37, 180, 254, 161, 28, 93, 114, 112, 128, 191, 88, 32, 132, 27, 81, 95, 19, 240, 215, 27, 199, 36, 95, 37, 225, 117, 41, 81, 219, 66, 236, 215, 187, 20, 96, 97, 188, 221, 8, 6, 219, 248, 45, 219, 201, 43, 228, 79, 192, 173, 79, 62, 160, 91, 187, 170, 125, 134, 137, 109, 253, 117, 7, 170, 150, 177, 68, 21, 161, 63, 173, 32, 5, 16, 96, 116, 58, 241, 161, 225, 172, 47, 198, 134, 102, 101, 157, 204, 17, 87, 29, 83, 253, 211, 136, 20, 144, 204, 62, 90, 19, 133, 44, 223, 226, 176, 175, 235, 226, 190, 171, 147, 99, 170, 251, 133, 149, 20, 210, 180, 244, 142, 157, 143, 206, 149, 127, 43, 117, 24, 103, 110, 165, 157, 195, 232, 190, 94, 15, 234, 183, 60, 0, 13, 140, 248, 205, 129, 191, 11, 39, 186, 240, 9, 213, 87, 39, 245, 81, 152, 15, 190, 248, 115, 204, 177, 176, 136, 251, 19, 150, 250, 231, 169, 70, 203, 167, 159, 254, 106, 224, 250, 248, 104, 50, 204, 139, 49, 231, 86, 41, 1, 8, 236, 186, 235, 43, 12, 165, 198, 65, 27, 166, 167, 55, 92, 144, 33, 177, 192, 94, 10, 202, 253, 187, 14, 25, 231, 175, 7, 30, 130, 197, 238, 235, 212, 16, 18, 158, 166, 72, 7, 255, 9, 5, 242, 235, 46, 34, 98, 150, 36, 188, 114, 71, 185, 161, 189, 160, 37, 56, 106, 148, 43, 224, 24, 23, 239, 193, 248, 161, 105, 156, 48, 180, 57, 15, 94, 192, 225, 26, 197, 13, 143, 91, 164, 99, 154, 218, 124, 0, 92, 246, 72, 24, 67, 185, 145, 247, 168, 57, 149, 75, 84, 9, 64, 159, 224, 138, 18, 217, 232, 51, 98, 101, 231, 34, 58, 37, 91, 54, 57, 117, 243, 249, 239, 166, 160, 98, 73, 193, 116, 63, 0, 235, 174, 101, 70, 47, 130, 3, 155, 19, 239, 215, 247, 212, 63, 34, 108, 89, 194, 173, 77, 232, 207, 94, 13, 150, 65, 225, 161, 238, 13, 149, 69, 108, 76, 133, 141, 24, 0, 47, 165, 252, 136, 52, 196, 103, 141, 234, 37, 63, 88, 73, 193, 25, 48, 23, 195, 231, 33, 12, 71, 246, 225, 83, 244, 5, 98, 73, 176, 173, 7, 200, 138, 223, 138, 145, 98, 32, 251, 97, 1, 54, 123, 25, 88, 44, 115, 170, 11, 224, 241, 47, 27, 45, 26, 230, 156, 59, 169, 98, 32, 15, 66, 139, 218, 95, 194, 108, 3, 103, 182, 120, 57, 130, 62, 196, 213, 139, 162, 44, 135, 22, 79, 246, 68, 254, 133, 60, 0, 157, 27, 89, 101, 222, 170, 139, 147, 67, 252, 128, 80, 183, 221, 92, 220, 251, 37, 231, 73, 28, 90, 11, 155, 61, 110, 202, 241, 107, 117, 222, 149, 174, 133, 100, 144, 186, 251, 97, 112, 61, 38, 94, 122, 177, 150, 252, 92, 228, 254, 253, 210, 78, 189, 142, 0, 230, 245, 226, 119, 250, 56, 232, 55, 191, 68, 189, 23, 153, 239, 233, 35, 247, 251, 29, 219, 36, 100, 253, 109, 164, 83, 200, 197, 35, 188, 50, 138, 226, 49, 88, 147, 115, 206, 249, 0, 96, 170, 136, 175, 220, 202, 40, 171, 169, 204, 143, 138, 184, 159, 93, 58, 29, 0, 49, 139, 118, 160, 238, 1, 108, 91, 23, 78, 110, 187, 206, 77, 13, 147, 185, 112, 10, 56, 221, 60, 71, 122, 109, 52, 133, 108, 157, 46, 215, 123, 176, 73, 226, 61, 111, 168, 88, 101, 148, 77, 23, 66, 246, 123, 118, 148, 209, 243, 101, 247, 194, 30, 92, 171, 33, 49, 46, 168, 57, 9, 228, 36, 98, 220, 242, 194, 48, 71, 58, 83, 213, 162, 188, 200, 243, 67, 67, 205, 24, 160, 237, 11, 101, 80, 32, 161, 119, 242, 221, 104, 233, 134, 213, 52, 212, 23, 143, 247, 76, 110, 250, 214, 206, 243, 136, 174, 50, 211, 215, 112, 131, 47, 169, 5, 101, 51, 246, 51, 220, 254, 44, 163, 81, 40, 86, 201, 107, 2, 252, 65, 249, 229, 104, 90, 97, 106, 176, 179, 141, 191, 177, 52, 133, 240, 254, 99, 216, 246, 196, 21, 159, 161, 1, 81, 105, 60, 202, 153, 76, 33, 245, 46, 187, 225, 14, 98, 11, 245, 238, 169, 156, 103, 207, 250, 189, 118, 52, 221, 214, 138, 84, 63, 137, 132, 212, 125, 130, 188, 25, 161, 187, 187, 217, 233, 30, 9, 221, 75, 80, 0, 13, 72, 77, 178, 55, 8, 149, 91, 28, 65, 33, 36, 123, 129, 196, 144, 196, 165, 134, 215, 194, 158, 22, 35, 77, 44, 197, 245, 6, 30, 106, 161, 209, 225, 164, 203, 152, 195, 18, 248, 166, 69, 39, 102, 172, 237, 92, 19, 194, 156, 176, 243, 243, 183, 243, 207, 166, 11, 106, 100, 45, 23, 202, 59, 194, 240, 159, 120, 56, 141, 133, 129, 131, 220, 171, 211, 72, 159, 107, 243, 133, 15, 51, 114, 231, 68, 145, 28, 139, 137, 157, 159, 9, 54, 178, 171, 89, 189, 178, 43, 118, 5, 206, 53, 219, 19, 138, 63, 45, 132, 34, 2, 29, 30, 7, 111, 241, 161, 223, 78, 89, 124, 50, 170, 23, 203, 136, 198, 15, 51, 176, 206, 133, 141, 23, 57, 229, 6, 74, 93, 9, 21, 250, 250, 18, 128, 148, 45, 103, 233, 219, 235, 119, 205, 60, 192, 39, 223, 206, 189, 124, 152, 28, 43, 48, 202, 33, 128, 123, 203, 248, 57, 87, 34, 138, 172, 87, 235, 234, 211, 147, 25, 147, 72, 95, 45, 53, 120, 173, 175, 145, 105, 188, 157, 175, 242, 184, 130, 188, 165, 173, 237, 187, 119, 172, 87, 175, 23, 2, 210, 95, 198, 75, 130, 200, 110, 95, 104, 208, 114, 162, 38, 100, 68, 57, 83, 240, 174, 65, 21, 99, 59, 23, 119, 169, 207, 196, 177, 155, 209, 70, 190, 12, 23, 47, 42, 245, 6, 197, 50, 141, 5, 128, 118, 102, 189, 207, 118, 119, 30, 182, 92, 78, 38, 113, 154, 128, 66, 121, 121, 186, 6, 216, 242, 173, 175, 199, 163, 197, 13, 41, 13, 244, 33, 68, 63, 134, 232, 128, 92, 170, 70, 93, 74, 222, 14, 221, 46, 32, 64, 134, 161, 152, 67, 182, 6, 138, 129, 48, 62, 205, 232, 133, 203, 15, 192, 178, 94, 215, 44, 254, 61, 187, 235, 111, 37, 83, 54, 91, 244, 135, 184, 97, 83, 63, 11, 193, 69, 73, 75, 146, 75, 33, 118, 102, 154, 158, 135, 67, 230, 192, 17, 180, 4, 17, 98, 234, 242, 30, 186, 78, 199, 76, 46, 68, 202, 202, 187, 245, 137, 188, 172, 106, 145, 225, 28, 165, 17, 61, 3, 2, 110, 19, 185, 155, 218, 214, 162, 17, 237, 102, 22, 229, 187, 22, 120, 48, 100, 213, 154, 175, 182, 192, 43, 105, 7, 123, 187, 80, 148, 186, 209, 175, 216, 246, 26, 55, 63, 3, 217, 66, 150, 243, 160, 126, 72, 158, 99, 112, 45, 95, 90, 158, 50, 40, 250, 86, 54, 20, 63, 226, 174, 121, 113, 11, 209, 142, 28, 54, 86, 177, 27, 95, 144, 66, 245, 174, 122, 74, 70, 55, 41, 184, 11, 160, 236, 96, 155, 117, 93, 27, 159, 22, 20, 70, 250, 192, 127, 148, 137, 250, 136, 154, 189, 118, 135, 183, 75, 177, 193, 137, 239, 252, 250, 62, 170, 17, 135, 136, 191, 167, 6, 90, 81, 78, 54, 100, 97, 67, 97, 106, 33, 66, 217, 38, 98, 139, 102, 121, 99, 133, 35, 10, 207, 48, 195, 29, 128, 209, 29, 174, 133, 207, 228, 56, 31, 76, 17, 66, 76, 140, 220, 84, 224, 0, 4, 62, 105, 92, 123, 223, 238, 4, 96, 96, 115, 139, 55, 236, 159, 19, 183, 225, 172, 187, 184, 255, 91, 121, 165, 64, 9, 69, 145, 130, 181, 131, 59, 57, 62, 255, 22, 98, 24, 6, 80, 150, 78, 165, 81, 176, 100, 66, 252, 135, 51, 248, 35, 189, 18, 190, 222, 84, 231, 119, 249, 29, 123, 50, 76, 229, 172, 66, 103, 37, 185, 204, 60, 101, 94, 89, 216, 220, 97, 242, 41, 67, 226, 132, 145, 228, 181, 98, 160, 23, 7, 146, 188, 221, 0, 29, 61, 14, 39, 200, 166, 186, 44, 50, 249, 181, 248, 190, 114, 215, 230, 149, 95, 109, 91, 108, 126, 110, 167, 196, 158, 199, 75, 41, 17, 89, 150, 34, 121, 65, 118, 220, 244, 96, 64, 248, 218, 131, 76, 97, 141, 214, 145, 189, 7, 243, 42, 94, 218, 147, 94, 227, 108, 135, 158, 54, 44, 154, 101, 161, 177, 177, 72, 183, 39, 125, 53, 246, 56, 59, 147, 165, 222, 6, 34, 159, 43, 27, 103, 17, 84, 94, 188, 79, 168, 21, 149, 214, 253, 113, 145, 87, 148, 251, 176, 143, 24, 66, 201, 106, 46, 161, 147, 197, 216, 85, 171, 142, 198, 83, 244, 11, 190, 241, 148, 123, 99, 239, 212, 94, 249, 11, 38, 24, 114, 242, 167, 94, 5, 38, 38, 76, 194, 232, 44, 44, 73, 182, 136, 47, 186, 69, 78, 212, 6, 35, 80, 59, 205, 44, 98, 158, 157, 27, 56, 39, 190, 244, 249, 115, 55, 178, 118, 129, 103, 128, 3, 148, 82, 207, 159, 48, 121, 118, 225, 57, 214, 89, 250, 150, 18, 233, 53, 24, 177, 62, 116, 157, 178, 238, 51, 122, 155, 200, 6, 32, 160, 102, 94, 139, 173, 121, 119, 31, 83, 170, 237, 202, 27, 238, 193, 25, 86, 174, 220, 209, 57, 83, 229, 165, 92, 146, 30, 73, 148, 223, 13, 2, 145, 224, 45, 134, 88, 125, 124, 30, 82, 233, 88, 48, 22, 142, 195, 161, 138, 16, 208, 159, 101, 234, 223, 18, 59, 164, 42, 181, 168, 87, 229, 176, 254, 223, 216, 205, 69, 94, 162, 98, 20, 133, 133, 229, 245, 176, 2, 232, 247, 24, 182, 45, 202, 21, 178, 30, 216, 50, 156, 162, 187, 253, 130, 149, 81, 143, 3, 235, 55, 39, 175, 68, 5, 127, 127, 203, 246, 196, 93, 138, 247, 193, 130, 255, 196, 216, 188, 234, 33, 204, 25, 239, 44, 55, 116, 101, 6, 21, 231, 185, 10, 93, 237, 24, 24, 143, 145, 113, 135, 106, 220, 248, 87, 15, 116, 73, 20, 214, 0, 84, 9, 81, 108, 234, 215, 122, 178, 190, 181, 95, 51, 138, 164, 238, 142, 146, 66, 239, 82, 155, 243, 184, 120, 133, 114, 48, 239, 12, 50, 13, 22, 111, 111, 194, 126, 106, 103, 69, 209, 27, 18, 226, 234, 207, 33, 52, 58, 108, 1, 139, 254, 29, 106, 30, 33, 159, 35, 5, 206, 97, 136, 29, 154, 76, 210, 68, 156, 204, 213, 171, 82, 249, 239, 85, 204, 218, 87, 198, 136, 117, 2, 132, 140, 242, 29, 23, 81, 218, 57, 53, 248, 123, 20, 102, 185, 152, 209, 86, 94, 164, 180, 139, 115, 77, 234, 60, 133, 67, 41, 160, 216, 233, 71, 165, 174, 97, 242, 85, 19, 250, 248, 64, 138, 103, 197, 18, 193, 71, 145, 27, 107, 157, 57, 193, 2, 211, 69, 80, 220, 255, 194, 194, 123, 195, 60, 80, 16, 88, 164, 137, 148, 149, 192, 173, 250, 118, 42, 20, 251, 12, 30, 159, 144, 55, 66, 176, 145, 147, 2, 84, 233, 18, 48, 170, 195, 60, 151, 162, 222, 152, 118, 127, 246, 204, 142, 52, 114, 96, 68, 43, 233, 66, 112, 242, 32, 247, 81, 24, 175, 133, 151, 247, 69, 114, 30, 203, 150, 240, 106, 87, 101, 124, 231, 230, 179, 201, 74, 196, 127, 141, 150, 103, 176, 58, 232, 146, 74, 191, 217, 60, 181, 191, 94, 236, 171, 224, 180, 20, 40, 194, 201, 226, 176, 166, 210, 93, 60, 66, 248, 248, 125, 46, 111, 177, 250, 77, 12, 154, 166, 165, 74, 11, 77, 42, 246, 20, 204, 230, 72, 126, 201, 97, 234, 88, 47, 148, 115, 82, 171, 33, 89, 62, 136, 147, 77, 128, 41, 167, 72, 181, 67, 152, 109, 85, 42, 26, 65, 254, 51, 249, 129, 134, 57, 48, 147, 3, 169, 170, 193, 164, 151, 225, 7, 1, 206, 227, 125, 79, 251, 82, 105, 250, 74, 127, 155, 2, 140, 128, 41, 8, 192, 146, 55, 82, 196, 133, 227, 156, 84, 139, 248, 225, 125, 229, 24, 190, 107, 111, 236, 200, 224, 49, 98, 37, 210, 242, 46, 67, 203, 58, 228, 134, 192, 105, 4, 153, 248, 79, 1, 86, 145, 184, 106, 238, 158, 50, 132, 183, 225, 64, 215, 138, 12, 255, 149, 243, 178, 190, 37, 35, 84, 53, 7, 99, 50, 152, 181, 130, 43, 53, 51, 100, 158, 111, 197, 168, 224, 231, 55, 225, 126, 177, 28, 185, 137, 180, 187, 109, 247, 141, 46, 37, 71, 24, 114, 81, 97, 207, 145, 225, 31, 186, 50, 183, 22, 19, 170, 88, 156, 87, 129, 126, 185, 18, 224, 112, 86, 28, 71, 206, 112, 178, 21, 158, 255, 199, 116, 148, 11, 255, 230, 206, 154, 65, 173, 109, 196, 5, 191, 237, 89, 139, 163, 165, 51, 231, 202, 164, 98, 215, 231, 102, 200, 221, 112, 245, 75, 113, 64, 179, 128, 14, 251, 89, 165, 14, 137, 92, 90, 190, 60, 44, 105, 21, 153, 68, 81, 240, 85, 156, 3, 38, 231, 87, 92, 110, 44, 182, 159, 140, 35, 241, 251, 209, 24, 38, 119, 107, 230, 107, 89, 218, 187, 82, 116, 145, 0, 48, 76, 106, 210, 140, 84, 61, 113, 192, 204, 72, 177, 220, 233, 152, 250, 64, 37, 158, 66, 21, 198, 64, 194, 11, 146, 166, 98, 229, 82, 117, 255, 28, 122, 144, 222, 214, 237, 238, 127, 149, 224, 116, 202, 150, 213, 31, 220, 94, 20, 214, 136, 120, 206, 212, 206, 30, 200, 129, 218, 83, 41, 207, 236, 9, 224, 13, 43, 203, 78, 136, 232, 71, 157, 105, 24, 54, 137, 243, 16, 199, 244, 35, 64, 0, 149, 108, 98, 122, 227, 81, 239, 154, 76, 24, 241, 89, 57, 189, 104, 53, 215, 42, 253, 214, 96, 7, 130, 67, 35, 38, 215, 48, 120, 19, 116, 145, 212, 222, 18, 222, 158, 123, 245, 152, 21, 162, 155, 158, 245, 32, 172, 51, 100, 105, 36, 255, 133, 150, 100, 74, 115, 64, 203, 39, 93, 35, 156, 31, 24, 177, 99, 4, 20, 92, 253, 225, 207, 136, 173, 185, 33, 89, 148, 60, 70, 79, 41, 15, 245, 76, 126, 72, 248, 155, 116, 7, 238, 145, 128, 219, 237, 233, 69, 26, 181, 149, 141, 220, 22, 133, 78, 70, 40, 106, 24, 189, 80, 88, 247, 95, 118, 149, 117, 143, 79, 239, 43, 210, 175, 89, 3, 9, 17, 203, 97, 162, 24, 97, 139, 152, 71, 41, 217, 127, 75, 19, 76, 102, 20, 174, 74, 212, 106, 183, 136, 55, 180, 18, 101, 49, 42, 199, 19, 227, 242, 141, 130, 204, 189, 129, 242, 185, 74, 210, 14, 249, 169, 159, 40, 243, 118, 37, 35, 109, 140, 7, 202, 154, 243, 109, 71, 236, 218, 239, 98, 147, 191, 234, 83, 132, 188, 230, 6, 81, 67, 119, 20, 112, 218, 4, 197, 241, 16, 161, 254, 57, 2, 106, 163, 170, 32, 215, 172, 122, 247, 31, 196, 0, 10, 133, 82, 254, 159, 129, 254, 155, 117, 2, 191, 188, 251, 235, 74, 134, 162, 105, 202, 29, 98, 99, 210, 63, 236, 224, 224, 175, 145, 96, 212, 253, 13, 12, 66, 34, 58, 0, 63, 52, 7, 135, 4, 93, 85, 190, 44, 129, 180, 62, 56, 139, 247, 203, 173, 22, 105, 45, 13, 55, 87, 237, 202, 91, 243, 225, 62, 134, 193, 93, 11, 243, 33, 123, 38, 16, 84, 196, 129, 244, 138, 253, 234, 252, 68, 133, 131, 120, 115, 218, 211, 26, 21, 45, 95, 249, 71, 246, 66, 19, 218, 32, 29, 118, 61, 53, 128, 36, 90, 94, 49, 50, 163, 35, 23, 5, 52, 143, 217, 26, 160, 165, 246, 9, 159, 109, 239, 111, 78, 195, 96, 68, 15, 53, 173, 234, 181, 121, 43, 36, 2, 132, 29, 136, 99, 102, 80, 100, 75, 177, 83, 161, 243, 245, 113, 76, 242, 47, 191, 171, 107, 231, 251, 93, 75, 25, 44, 104, 167, 2, 178, 8, 251, 222, 144, 1, 229, 121, 222, 85, 28, 188, 153, 222, 40, 145, 137, 98, 209, 163, 93, 56, 25, 235, 249, 10, 173, 45, 80, 73, 98, 114, 215, 79, 93, 228, 73, 0, 211, 112, 218, 44, 203, 70, 249, 53, 44, 66, 225, 123, 210, 75, 179, 140, 171, 232, 23, 174, 239, 160, 145, 154, 89, 54, 138, 249, 109, 123, 221, 138, 6, 151, 236, 118, 5, 26, 213, 253, 132, 114, 193, 120, 0, 241, 216, 176, 243, 60, 250, 16, 237, 166, 66, 17, 73, 74, 51, 165, 47, 247, 78, 106, 196, 42, 138, 132, 42, 171, 153, 25, 236, 145, 61, 220, 134, 122, 55, 36, 52, 168, 174, 182, 234, 194, 176, 88, 127, 191, 217, 43, 114, 140, 1, 39, 110, 218, 197, 13, 56, 253, 50, 56, 176, 163, 217, 224, 179, 28, 41, 148, 157, 170, 179, 71, 88, 209, 241, 220, 124, 91, 119, 72, 52, 34, 180, 49, 204, 126, 69, 118, 150, 203, 120, 174, 84, 10, 242, 44, 61, 214, 43, 241, 41, 159, 53, 209, 53, 66, 109, 50, 157, 244, 24, 246, 20, 155, 172, 64, 200, 11, 208, 53, 209, 217, 136, 47, 163, 81, 163, 109, 201, 62, 116, 60, 155, 153, 255, 3, 110, 15, 218, 76, 87, 47, 76, 134, 178, 233, 15, 177, 123, 11, 96, 25, 153, 175, 207, 128, 41, 77, 87, 96, 39, 164, 130, 96, 53, 198, 248, 109, 22, 89, 59, 84, 88, 174, 10, 123, 223, 56, 190, 53, 124, 99, 160, 30, 198, 196, 22, 39, 83, 92, 159, 209, 38, 188, 71, 128, 244, 79, 157, 188, 21, 55, 9, 145, 219, 114, 78, 74, 194, 69, 149, 114, 232, 95, 170, 206, 87, 174, 1, 145, 55, 37, 76, 171, 201, 117, 129, 158, 236, 197, 74, 56, 25, 65, 109, 40, 9, 142, 63, 12, 158, 7, 152, 188, 241, 185, 206, 162, 197, 112, 114, 51, 93, 226, 144, 148, 86, 217, 110, 130, 214, 134, 20, 28, 194, 118, 90, 3, 136, 217, 97, 186, 197, 246, 155, 26, 117, 95, 255, 221, 228, 123, 209, 29, 154, 209, 155, 244, 207, 112, 232, 234, 25, 223, 238, 19, 102, 134, 210, 217, 22, 245, 83, 159, 169, 187, 67, 105, 92, 64, 151, 77, 177, 18, 91, 2, 27, 193, 15, 114, 47, 183, 52, 25, 147, 233, 199, 2, 228, 168, 22, 168, 21, 134, 166, 65, 116, 44, 5, 152, 92, 89, 46, 170, 192, 184, 236, 26, 178, 24, 187, 253, 157, 123, 226, 1, 193, 142, 240, 156, 176, 104, 133, 224, 139, 87, 143, 73, 209, 54, 59, 123, 71, 212, 149, 129, 203, 108, 218, 245, 97, 138, 244, 244, 161, 159, 238, 115, 62, 184, 99, 182, 231, 149, 169, 246, 35, 87, 29, 199, 213, 123, 205, 33, 117, 113, 90, 124, 22, 102, 125, 158, 83, 46, 21, 92, 242, 82, 253, 224, 175, 186, 96, 78, 129, 9, 29, 71, 223, 26, 188, 184, 237, 41, 242, 164, 114, 216, 184, 94, 223, 144, 56, 217, 78, 67, 221, 39, 249, 140, 71, 186, 32, 46, 199, 100, 173, 170, 3, 121, 99, 68, 64, 156, 84, 11, 12, 179, 152, 166, 231, 27, 81, 211, 47, 191, 37, 238, 161, 41, 42, 70, 16, 178, 91, 63, 80, 3, 82, 98, 28, 161, 146, 114, 4, 133, 74, 234, 186, 96, 201, 157, 198, 113, 12, 44, 214, 228, 249, 166, 149, 207, 194, 245, 7, 200, 240, 132, 163, 69, 118, 138, 206, 113, 163, 77, 144, 68, 1, 188, 78, 124, 175, 51, 55, 31, 20, 152, 169, 215, 110, 112, 25, 242, 103, 79, 104, 134, 72, 47, 84, 145, 15, 42, 25, 63, 247, 204, 135, 65, 119, 71, 90, 140, 187, 119, 38, 125, 42, 37, 232, 255, 228, 0, 98, 174, 254, 215, 19, 130, 68, 177, 105, 11, 124, 40, 146, 8, 143, 58, 41, 60, 246, 35, 20, 69, 39, 210, 252, 53, 221, 106, 160, 37, 222, 59, 82, 193, 42, 121, 232, 201, 121, 219, 190, 55, 111, 208, 24, 122, 15, 130, 128, 138, 109, 185, 140, 181, 197, 34, 49, 205, 236, 122, 75, 249, 86, 159, 209, 135, 140, 123, 167, 207, 147, 15, 196, 186, 105, 17, 162, 197, 25, 167, 114, 184, 174, 25, 54, 67, 4, 217, 72, 164, 13, 206, 105, 89, 213, 253, 38, 21, 175, 97, 132, 170, 42, 127, 223, 165, 231, 253, 5, 113, 140, 145, 23, 163, 34, 25, 51, 74, 233, 94, 127, 156, 204, 239, 84, 180, 216, 83, 185, 203, 82, 3, 35, 0, 38, 187, 10, 174, 216, 61, 215, 32, 119, 152, 188, 220, 149, 178, 225, 118, 68, 217, 206, 51, 38, 207, 7, 54, 252, 112, 74, 203, 130, 238, 160, 191, 218, 26, 39, 211, 14, 93, 81, 224, 13, 14, 126, 200, 83, 240, 22, 198, 250, 24, 120, 228, 146, 149, 100, 11, 97, 1, 214, 209, 100, 186, 156, 122, 98, 132, 100, 180, 133, 82, 79, 51, 209, 110, 209, 200, 18, 111, 136, 111, 134, 80, 93, 142, 141, 203, 7, 37, 229, 113, 230, 153, 30, 57, 153, 215, 238, 37, 33, 15, 105, 157, 195, 220, 99, 126, 111, 61, 178, 61, 218, 36, 182, 110, 67, 68, 4, 21, 60, 177, 37, 153, 167, 54, 224, 149, 184, 212, 29, 220, 125, 135, 47, 25, 46, 98, 9, 119, 238, 1, 240, 77, 196, 56, 200, 223, 2, 161, 136, 136, 223, 92, 129, 41, 153, 203, 124, 126, 51, 44, 254, 166, 231, 184, 91, 20, 186, 168, 99, 63, 133, 114, 78, 154, 33, 199, 228, 203, 234, 34, 196, 11, 60, 89, 173, 17, 23, 164, 254, 7, 64, 162, 93, 233, 20, 122, 134, 86, 50, 51, 186, 101, 129, 51, 172, 148, 6, 8, 211, 208, 184, 155, 28, 245, 233, 188, 165, 173, 43, 105, 40, 53, 115, 159, 114, 83, 235, 159, 111, 195, 161, 234, 216, 53, 97, 130, 144, 12, 59, 75, 189, 4, 146, 143, 33, 61, 91, 192, 27, 197, 233, 5, 35, 110, 154, 33, 91, 73, 210, 140, 111, 237, 69, 53, 238, 5, 155, 123, 13, 170, 34, 64, 63, 165, 103, 94, 189, 113, 51, 171, 139, 86, 39, 135, 73, 99, 22, 30, 140, 97, 92, 252, 37, 185, 123, 101, 33, 206, 246, 80, 166, 232, 190, 201, 44, 159, 224, 237, 81, 185, 30, 71, 35, 95, 244, 203, 167, 123, 130, 90, 44, 255, 204, 145, 118, 66, 159, 101, 7, 209, 105, 137, 248, 0, 49, 202, 11, 206, 246, 62, 62, 217, 132, 100, 34, 159, 69, 253, 100, 215, 3, 123, 141, 225, 46, 155, 83, 232, 137, 158, 127, 48, 186, 66, 62, 183, 204, 10, 214, 75, 18, 225, 193, 103, 214, 9, 254, 148, 134, 16, 245, 12, 157, 255, 206, 181, 116, 116, 129, 210, 143, 84, 91, 50, 111, 166, 37, 70, 73, 148, 240, 113, 46, 100, 166, 14, 202, 164, 205, 66, 75, 120, 82, 50, 35, 61, 166, 161, 34, 60, 210, 22, 24, 104, 254, 26, 83, 162, 61, 170, 132, 18, 188, 67, 73, 227, 3, 245, 80, 81, 77, 31, 88, 182, 23, 138, 227, 4, 231, 57, 166, 41, 12, 152, 99, 111, 85, 178, 72, 6, 187, 224, 73, 170, 204, 83, 10, 166, 98, 163, 111, 113, 241, 49, 154, 164, 197, 182, 196, 83, 81, 103, 13, 210, 86, 61, 87, 95, 97, 78, 224, 158, 188, 40, 70, 39, 156, 192, 202, 123, 122, 58, 224, 223, 91, 214, 0, 186, 150, 212, 9, 133, 202, 221, 21, 140, 125, 160, 46, 162, 50, 101, 231, 213, 179, 229, 117, 45, 99, 155, 84, 222, 87, 84, 92, 82, 212, 230, 142, 140, 97, 226, 9, 136, 201, 180, 16, 1, 63, 220, 142, 118, 218, 118, 202, 160, 162, 202, 185, 18, 98, 162, 243, 254, 58, 173, 223, 119, 164, 169, 116, 187, 213, 47, 42, 233, 202, 65, 142, 229, 241, 10, 108, 93, 104, 47, 238, 240, 179, 83, 59, 88, 61, 112, 126, 248, 217, 133, 96, 68, 165, 88, 160, 1, 36, 79, 56, 186, 30, 61, 238, 219, 232, 172, 197, 105, 215, 120, 50, 46, 142, 191, 10, 125, 42, 63, 178, 214, 236, 145, 232, 217, 245, 163, 223, 156, 114, 159, 63, 90, 56, 145, 97, 233, 227, 49, 252, 205, 177, 158, 203, 232, 70, 128, 191, 21, 250, 102, 89, 199, 235, 212, 86, 205, 155, 175, 59, 48, 74, 28, 166, 87, 243, 83, 88, 212, 100, 97, 51, 71, 225, 79, 200, 100, 17, 46, 38, 91, 249, 104, 90, 63, 250, 0, 241, 34, 147, 233, 148, 5, 94, 73, 245, 117, 155, 234, 40, 91, 40, 148, 79, 10, 64, 189, 33, 149, 160, 129, 8, 116, 235, 231, 201, 217, 167, 116, 234, 35, 13, 4, 218, 65, 10, 154, 38, 127, 223, 209, 30, 210, 34, 138, 208, 102, 39, 178, 66, 95, 26, 183, 136, 176, 242, 173, 218, 165, 121, 119, 189, 6, 67, 97, 98, 39, 4, 239, 139, 0, 141, 90, 141, 62, 151, 172, 86, 100, 86, 65, 48, 42, 145, 232, 111, 66, 118, 108, 75, 251, 3, 42, 11, 94, 146, 94, 44, 237, 132, 155, 240, 160, 125, 143, 36, 91, 222, 138, 112, 6, 51, 203, 62, 201, 45, 66, 186, 142, 13, 99, 197, 11, 90, 127, 29, 48, 227, 148, 95, 194, 147, 51, 99, 200, 182, 26, 36, 22, 58, 206, 213, 238, 78, 138, 120, 138, 150, 42, 133, 46, 40, 146, 28, 122, 110, 174, 176, 187, 140, 42, 86, 89, 62, 156, 130, 218, 201, 106, 189, 33, 156, 66, 201, 201, 113, 134, 66, 22, 123, 109, 39, 18, 100, 53, 42, 173, 57, 59, 93, 90, 63, 74, 9, 1, 152, 136, 16, 30, 82, 39, 50, 119, 20, 39, 179, 21, 39, 109, 80, 181, 98, 167, 217, 63, 159, 203, 209, 11, 98, 250, 159, 108, 226, 248, 147, 164, 254, 151, 133, 24, 24, 17, 128, 165, 148, 14, 138, 182, 198, 159, 239, 186, 77, 254, 20, 162, 203, 60, 8, 180, 69, 123, 106, 211, 138, 32, 221, 241, 177, 110, 113, 141, 193, 61, 44, 190, 165, 140, 118, 124, 225, 193, 222, 22, 77, 148, 176, 175, 214, 60, 139, 115, 132, 216, 64, 56, 231, 75, 105, 62, 53, 212, 21, 221, 231, 209, 143, 102, 157, 73, 0, 196, 129, 83, 85, 184, 129, 84, 211, 36, 57, 83, 125, 89, 7, 188, 172, 83, 213, 204, 233, 249, 15, 245, 7, 107, 83, 249, 82, 0, 195, 226, 199, 123, 248, 224, 146, 33, 37, 73, 250, 93, 204, 72, 185, 119, 33, 205, 15, 138, 250, 131, 72, 148, 48, 219, 89, 147, 100, 254, 49, 189, 198, 68, 142, 61, 164, 106, 61, 252, 21, 242, 115, 218, 65, 34, 225, 151, 80, 246, 110, 105, 250, 247, 105, 158, 60, 62, 40, 14, 130, 152, 21, 78, 119, 185, 77, 212, 136, 79, 40, 39, 239, 255, 62, 84, 93, 211, 228, 205, 135, 248, 143, 184, 102, 78, 174, 107, 117, 66, 214, 182, 7, 115, 150, 64, 24, 244, 179, 105, 162, 140, 79, 220, 227, 245, 62, 198, 164, 30, 214, 197, 63, 239, 203, 212, 58, 237, 205, 161, 56, 141, 94, 133, 2, 116, 179, 30, 5, 160, 231, 208, 25, 243, 171, 175, 46, 39, 124, 141, 215, 179, 13, 78, 22, 127, 251, 71, 49, 85, 132, 20, 60, 132, 232, 135, 247, 182, 241, 250, 179, 93, 27, 174, 189, 102, 69, 34, 147, 79, 108, 193, 178, 73, 152, 251, 49, 208, 42, 137, 6, 86, 27, 93, 214, 126, 71, 7, 133, 57, 147, 140, 33, 164, 35, 15, 118, 2, 240, 139, 198, 145, 129, 61, 137, 38, 193, 5, 40, 255, 33, 153, 62, 87, 50, 68, 9, 169, 238, 183, 42, 254, 53, 252, 200, 99, 25, 14, 200, 153, 139, 7, 243, 176, 145, 115, 255, 80, 2, 24, 118, 60, 107, 170, 143, 248, 84, 92, 84, 61, 171, 215, 128, 144, 244, 79, 27, 241, 239, 206, 137, 18, 195, 32, 112, 91, 142, 45, 148, 149, 4, 60, 86, 15, 62, 69, 83, 108, 52, 120, 147, 81, 224, 213, 231, 40, 17, 248, 106, 230, 16, 112, 91, 41, 113, 98, 129, 213, 166, 229, 138, 149, 215, 128, 206, 107, 59, 148, 125, 189, 229, 6, 34, 45, 5, 253, 197, 91, 123, 73, 172, 248, 114, 241, 144, 113, 248, 108, 179, 163, 46, 219, 57, 141, 251, 89, 73, 52, 28, 139, 130, 87, 208, 244, 203, 188, 212, 97, 209, 138, 52, 212, 34, 167, 26, 148, 6, 240, 5, 109, 123, 195, 151, 138, 182, 152, 169, 79, 58, 34, 159, 230, 209, 171, 34, 49, 92, 188, 155, 22, 243, 50, 10, 194, 62, 77, 147, 92, 224, 99, 76, 50, 58, 199, 60, 133, 38, 11, 130, 49, 3, 38, 175, 233, 46, 192, 49, 172, 157, 147, 118, 212, 24, 151, 158, 12, 56, 178, 36, 98, 216, 93, 177, 68, 92, 179, 15, 134, 150, 94, 200, 64, 208, 102, 191, 16, 252, 187, 224, 168, 222, 144, 98, 244, 65, 95, 43, 61, 97, 226, 51, 10, 33, 143, 76, 107, 82, 217, 137, 34, 54, 69, 129, 68, 159, 174, 43, 193, 121, 0, 128, 212, 10, 6, 28, 133, 109, 59, 26, 164, 78, 51, 133, 227, 241, 56, 246, 122, 153, 91, 91, 245, 208, 213, 144, 99, 122, 102, 250, 15, 248, 62, 124, 170, 227, 153, 223, 129, 187, 165, 237, 152, 49, 48, 28, 247, 170, 173, 217, 149, 59, 165, 148, 68, 16, 224, 51, 246, 204, 162, 204, 197, 153, 245, 143, 173, 74, 224, 27, 173, 158, 28, 53, 49, 252, 174, 195, 105, 183, 123, 12, 8, 193, 20, 187, 111, 69, 49, 30, 60, 0, 235, 235, 138, 35, 37, 161, 212, 245, 81, 248, 23, 101, 200, 152, 21, 78, 95, 96, 25, 147, 241, 30, 185, 32, 228, 8, 124, 52, 35, 13, 217, 152, 135, 164, 51, 122, 53, 11, 236, 3, 2, 93, 44, 22, 75, 171, 18, 169, 29, 95, 188, 201, 115, 205, 150, 22, 233, 217, 131, 23, 104, 226, 144, 215, 151, 194, 98, 40, 219, 202, 14, 64, 101, 32, 175, 52, 58, 211, 196, 163, 95, 246, 177, 117, 194, 139, 111, 153, 136, 174, 123, 138, 66, 184, 9, 162, 155, 106, 71, 239, 202, 209, 19, 103, 227, 77, 56, 126, 111, 166, 26, 8, 201, 104, 45, 34, 166, 139, 26, 122, 147, 213, 249, 166, 230, 161, 254, 43, 210, 35, 41, 52, 138, 206, 137, 254, 134, 208, 138, 219, 210, 27, 2, 6, 196, 54, 102, 156, 70, 229, 232, 97, 147, 90, 214, 141, 26, 30, 202, 92, 247, 254, 196, 41, 34, 195, 190, 163, 84, 117, 246, 40, 13, 213, 236, 157, 52, 134, 219, 78, 207, 219, 7, 125, 138, 208, 247, 176, 0, 234, 70, 89, 200, 254, 52, 143, 162, 182, 152, 12, 21, 253, 222, 26, 116, 197, 254, 45, 237, 193, 189, 96, 234, 46, 234, 74, 55, 97, 163, 238, 77, 128, 164, 100, 186, 209, 106, 130, 248, 89, 249, 154, 224, 215, 189, 77, 127, 15, 175, 246, 89, 194, 66, 196, 26, 88, 198, 110, 210, 0, 161, 137, 215, 154, 172, 227, 147, 204, 254, 247, 187, 250, 155, 5, 43, 119, 229, 146, 9, 182, 105, 205, 7, 100, 85, 85, 18, 135, 61, 189, 241, 151, 11, 136, 85, 63, 4, 167, 51, 5, 242, 7, 83, 102, 225, 71, 196, 66, 247, 6, 32, 245, 35, 54, 47, 122, 163, 224, 166, 208, 185, 216, 55, 229, 76, 137, 26, 128, 252, 2, 134, 215, 19, 4, 164, 111, 62, 24, 19, 144, 242, 61, 111, 202, 31, 88, 189, 146, 248, 54, 178, 59, 224, 228, 31, 202, 150, 155, 11, 10, 163, 20, 87, 0, 182, 85, 90, 250, 93, 221, 209, 114, 225, 11, 216, 235, 19, 136, 95, 199, 105, 162, 171, 217, 111, 12, 220, 102, 34, 22, 81, 212, 53, 214, 132, 180, 226, 133, 28, 16, 189, 157, 0, 147, 10, 88, 198, 160, 100, 190, 253, 129, 226, 220, 131, 198, 214, 214, 105, 41, 56, 82, 221, 251, 81, 4, 2, 73, 203, 168, 157, 109, 181, 246, 41, 131, 43, 73, 92, 214, 226, 38, 54, 101, 15, 57, 210, 5, 216, 12, 251, 194, 250, 155, 239, 235, 241, 153, 184, 106, 83, 84, 141, 16, 88, 157, 51, 15, 146, 74, 125, 40, 186, 23, 158, 91, 72, 154, 102, 151, 206, 66, 79, 248, 20, 51, 173, 175, 244, 139, 207, 137, 156, 125, 189, 23, 139, 47, 16, 105, 242, 240, 44, 29, 123, 110, 110, 170, 74, 53, 121, 64, 208, 140, 68, 130, 219, 42, 93, 192, 96, 169, 222, 12, 86, 196, 143, 165, 210, 222, 165, 149, 190, 252, 244, 209, 202, 152, 4, 5, 33, 85, 34, 143, 209, 42, 142, 159, 96, 6, 140, 90, 149, 114, 99, 96, 166, 102, 224, 79, 49, 170, 16, 100, 61, 93, 24, 26, 249, 89, 5, 28, 233, 51, 148, 162, 239, 237, 201, 184, 147, 105, 0, 178, 231, 249, 11, 237, 9, 88, 28, 212, 40, 87, 25, 119, 88, 247, 207, 130, 140, 232, 101, 81, 30, 8, 89, 58, 160, 62, 185, 113, 234, 151, 118, 178, 174, 212, 253, 201, 33, 183, 23, 229, 185, 251, 185, 147, 135, 243, 42, 60, 47, 166, 17, 50, 14, 161, 116, 234, 61, 12, 0, 88, 174, 80, 193, 14, 38, 148, 173, 252, 21, 87, 83, 159, 52, 144, 186, 114, 39, 233, 176, 172, 184, 3, 97, 139, 156, 202, 140, 118, 100, 175, 179, 95, 25, 212, 230, 172, 44, 81, 111, 78, 33, 233, 34, 170, 9, 201, 69, 157, 2, 141, 211, 6, 205, 136, 8, 21, 212, 98, 89, 31, 52, 69, 40, 153, 9, 2, 171, 30, 218, 114, 128, 146, 156, 96, 217, 99, 12, 89, 53, 239, 169, 168, 55, 173, 105, 119, 223, 128, 128, 199, 142, 22, 75, 249, 225, 103, 30, 120, 237, 29, 90, 76, 167, 70, 237, 165, 138, 107, 118, 178, 52, 130, 209, 71, 216, 171, 90, 137, 91, 183, 43, 253, 69, 181, 179, 76, 189, 220, 53, 24, 253, 19, 177, 160, 205, 245, 56, 137, 208, 222, 143, 125, 152, 100, 190, 33, 222, 220, 104, 132, 213, 30, 112, 215, 120, 49, 232, 159, 40, 235, 23, 76, 176, 101, 200, 209, 72, 62, 32, 22, 54, 75, 230, 171, 26, 199, 135, 51, 164, 37, 131, 47, 25, 235, 198, 17, 251, 12, 234, 134, 55, 167, 73, 24, 241, 49, 233, 91, 108, 249, 215, 211, 160, 23, 31, 146, 237, 84, 253, 107, 79, 217, 220, 173, 215, 94, 159, 215, 142, 200, 233, 104, 231, 34, 230, 192, 135, 243, 154, 98, 188, 158, 146, 140, 166, 222, 114, 114, 119, 233, 20, 10, 141, 255, 183, 78, 82, 246, 251, 2, 170, 221, 145, 219, 11, 110, 112, 172, 17, 72, 133, 188, 122, 31, 58, 87, 27, 239, 154, 198, 178, 135, 180, 57, 233, 132, 156, 13, 49, 245, 138, 218, 189, 183, 147, 108, 69, 255, 223, 111, 198, 108, 144, 161, 191, 220, 155, 186, 167, 77, 122, 61, 67, 206, 37, 31, 118, 178, 40, 24, 132, 72, 183, 29, 67, 222, 152, 167, 2, 130, 221, 8, 228, 61, 201, 148, 39, 90, 101, 102, 42, 66, 232, 252, 242, 113, 66, 25, 103, 85, 139, 244, 242, 124, 183, 181, 175, 202, 183, 220, 96, 114, 189, 166, 50, 241, 194, 223, 235, 10, 38, 224, 4, 49, 243, 95, 66, 48, 209, 228, 148, 246, 69, 9, 183, 215, 133, 70, 1, 192, 116, 74, 17, 74, 210, 158, 129, 79, 123, 133, 125, 81, 121, 120, 128, 215, 29, 42, 43, 196, 173, 213, 148, 241, 196, 232, 9, 104, 209, 125, 46, 88, 97, 232, 156, 17, 126, 102, 74, 162, 50, 145, 61, 93, 124, 135, 160, 168, 115, 22, 216, 124, 106, 194, 186, 221, 208, 147, 94, 209, 8, 60, 38, 122, 45, 198, 248, 236, 242, 206, 225, 105, 226, 13, 107, 240, 222, 230, 49, 237, 6, 170, 216, 70, 93, 236, 85, 45, 143, 216, 246, 24, 73, 216, 10, 84, 87, 128, 164, 71, 32, 31, 198, 220, 49, 61, 223, 11, 15, 22, 224, 37, 103, 41, 183, 148, 212, 55, 10, 90, 118, 55, 253, 246], - [33, 91, 114, 213, 159, 2, 86, 56, 226, 153, 26, 52, 27, 225, 87, 227, 82, 143, 195, 210, 227, 63, 82, 154, 52, 27, 181, 67, 42, 195, 85, 233, 213, 156, 134, 83, 7, 146, 105, 203, 35, 192, 225, 54, 6, 113, 231, 70, 160, 239, 185, 168, 167, 252, 203, 57, 93, 14, 21, 202, 190, 141, 101, 58, 207, 129, 164, 253, 243, 177, 1, 63, 239, 104, 47, 104, 152, 4, 143, 80, 149, 218, 69, 9, 129, 8, 204, 173, 206, 40, 248, 112, 223, 2, 90, 62, 45, 201, 38, 201, 71, 12, 59, 125, 46, 125, 192, 242, 170, 59, 224, 205, 48, 249, 209, 252, 168, 53, 116, 173, 212, 59, 241, 71, 209, 219, 164, 206, 60, 165, 202, 193, 208, 202, 132, 155, 251, 175, 143, 3, 71, 104, 15, 200, 251, 106, 232, 169, 41, 143, 78, 104, 228, 230, 228, 228, 107, 76, 115, 102, 51, 92, 99, 17, 219, 199, 14, 48, 86, 191, 115, 232, 108, 230, 160, 111, 248, 113, 135, 88, 151, 145, 73, 76, 90, 177, 153, 129, 55, 209, 153, 158, 149, 18, 20, 180, 253, 96, 138, 33, 42, 7, 131, 198, 221, 15, 76, 250, 251, 187, 41, 194, 213, 61, 54, 165, 72, 199, 248, 51, 26, 23, 27, 220, 85, 159, 63, 250, 222, 1, 251, 119, 74, 2, 151, 208, 134, 105, 214, 209, 51, 36, 31, 88, 182, 12, 18, 146, 172, 88, 13, 114, 17, 252, 89, 68, 194, 126, 247, 219, 31, 120, 219, 145, 24, 232, 90, 124, 136, 119, 57, 230, 52, 241, 99, 14, 49, 27, 59, 127, 250, 39, 159, 15, 152, 21, 116, 18, 173, 145, 228, 213, 184, 146, 134, 148, 212, 103, 229, 162, 17, 109, 195, 234, 49, 129, 180, 179, 142, 163, 231, 152, 236, 123, 62, 99, 149, 203, 131, 10, 110, 86, 250, 72, 248, 135, 120, 86, 109, 5, 54, 79, 28, 121, 122, 231, 109, 182, 100, 194, 15, 157, 246, 0, 112, 20, 162, 114, 149, 58, 216, 154, 125, 74, 116, 140, 13, 140, 219, 239, 253, 225, 12, 138, 2, 117, 193, 128, 232, 113, 237, 72, 46, 235, 122, 168, 236, 8, 142, 144, 247, 232, 132, 18, 26, 119, 52, 175, 129, 84, 47, 115, 18, 67, 38, 94, 131, 189, 192, 2, 172, 151, 56, 233, 221, 171, 101, 27, 84, 145, 246, 177, 252, 253, 121, 168, 168, 48, 155, 224, 55, 60, 156, 160, 116, 180, 214, 217, 219, 203, 182, 239, 0, 140, 11, 236, 248, 145, 119, 162, 219, 194, 78, 253, 55, 137, 153, 247, 44, 163, 244, 241, 232, 77, 15, 172, 115, 211, 122, 35, 49, 67, 94, 82, 236, 19, 208, 165, 14, 73, 98, 27, 131, 223, 116, 4, 20, 81, 5, 83, 101, 27, 196, 237, 147, 197, 96, 47, 115, 198, 204, 34, 125, 14, 255, 162, 88, 160, 43, 43, 131, 38, 215, 34, 136, 72, 210, 229, 207, 123, 135, 7, 147, 66, 240, 229, 192, 82, 240, 149, 40, 116, 179, 90, 160, 226, 48, 5, 131, 193, 137, 157, 175, 170, 147, 140, 106, 105, 157, 34, 34, 47, 158, 179, 63, 54, 67, 175, 91, 89, 168, 69, 0, 27, 204, 185, 223, 15, 244, 176, 36, 10, 120, 146, 208, 237, 248, 204, 64, 230, 244, 199, 99, 172, 44, 255, 3, 173, 162, 64, 252, 193, 155, 255, 31, 206, 138, 250, 87, 167, 251, 252, 13, 139, 88, 166, 243, 52, 209, 151, 176, 61, 109, 74, 24, 159, 49, 191, 224, 201, 46, 22, 158, 19, 226, 177, 82, 86, 13, 130, 117, 98, 179, 3, 178, 149, 95, 180, 227, 20, 92, 37, 244, 21, 112, 68, 39, 155, 73, 201, 16, 136, 117, 216, 103, 71, 119, 201, 136, 230, 71, 29, 84, 246, 242, 189, 162, 146, 224, 47, 253, 72, 250, 185, 165, 75, 13, 111, 113, 206, 196, 181, 27, 79, 251, 219, 177, 221, 117, 210, 135, 230, 103, 100, 42, 135, 174, 30, 240, 231, 223, 71, 152, 27, 69, 177, 168, 178, 152, 164, 127, 80, 215, 189, 85, 201, 246, 21, 195, 247, 33, 198, 53, 142, 199, 99, 251, 25, 90, 77, 229, 5, 182, 241, 84, 121, 44, 1, 8, 44, 234, 11, 213, 148, 219, 252, 169, 186, 107, 72, 224, 104, 124, 89, 135, 200, 186, 238, 241, 197, 244, 65, 98, 82, 252, 77, 47, 140, 28, 141, 181, 170, 225, 247, 36, 19, 94, 40, 187, 28, 51, 28, 53, 173, 81, 246, 112, 208, 40, 232, 245, 87, 252, 17, 65, 59, 175, 222, 87, 48, 138, 112, 28, 163, 136, 57, 61, 16, 103, 93, 46, 18, 143, 31, 76, 18, 90, 21, 20, 229, 112, 102, 134, 10, 188, 108, 151, 180, 16, 122, 65, 164, 148, 113, 151, 244, 21, 31, 162, 24, 3, 4, 239, 162, 135, 149, 118, 159, 206, 49, 129, 232, 158, 55, 212, 38, 1, 68, 159, 225, 47, 9, 173, 92, 87, 26, 196, 54, 22, 161, 105, 230, 142, 16, 210, 57, 150, 169, 25, 76, 208, 237, 15, 198, 23, 108, 41, 50, 216, 60, 165, 31, 198, 179, 84, 39, 163, 155, 201, 23, 197, 131, 63, 65, 157, 118, 124, 2, 239, 233, 37, 80, 49, 167, 61, 210, 55, 0, 143, 6, 84, 110, 148, 177, 39, 125, 167, 196, 246, 59, 192, 253, 181, 17, 55, 26, 245, 63, 210, 154, 131, 176, 244, 240, 233, 110, 121, 237, 51, 233, 210, 173, 139, 89, 60, 77, 158, 134, 200, 18, 237, 12, 156, 168, 192, 41, 40, 227, 94, 133, 161, 98, 140, 22, 4, 36, 232, 161, 8, 11, 224, 229, 197, 181, 15, 134, 119, 189, 116, 36, 196, 237, 240, 223, 240, 117, 14, 26, 157, 39, 237, 205, 162, 5, 245, 187, 255, 253, 225, 37, 210, 92, 163, 216, 21, 35, 209, 60, 136, 236, 60, 204, 176, 129, 16, 188, 120, 95, 197, 123, 114, 31, 150, 135, 51, 63, 41, 199, 32, 108, 73, 247, 145, 6, 123, 6, 212, 148, 59, 71, 246, 198, 115, 186, 200, 215, 143, 147, 50, 194, 38, 206, 140, 129, 255, 110, 114, 187, 212, 95, 86, 195, 104, 141, 230, 9, 221, 168, 122, 230, 242, 55, 230, 45, 218, 69, 128, 58, 25, 122, 110, 168, 184, 235, 209, 190, 182, 35, 48, 115, 58, 142, 137, 69, 32, 215, 35, 231, 44, 8, 203, 218, 100, 20, 127, 189, 190, 106, 175, 117, 94, 47, 192, 248, 178, 35, 40, 248, 114, 223, 117, 109, 17, 248, 37, 138, 79, 5, 43, 65, 211, 125, 197, 233, 140, 72, 197, 63, 226, 136, 8, 90, 19, 97, 239, 146, 162, 151, 239, 51, 180, 1, 179, 5, 224, 50, 89, 61, 30, 228, 19, 16, 177, 164, 241, 188, 22, 29, 176, 129, 160, 253, 170, 116, 181, 131, 73, 141, 17, 96, 121, 189, 200, 73, 77, 35, 60, 158, 21, 54, 90, 200, 1, 227, 236, 220, 174, 237, 21, 111, 124, 194, 97, 43, 172, 40, 119, 97, 131, 173, 240, 23, 6, 75, 78, 30, 208, 108, 79, 254, 213, 35, 83, 184, 139, 143, 8, 5, 162, 170, 24, 207, 184, 98, 30, 199, 108, 23, 141, 122, 4, 9, 96, 93, 178, 84, 26, 132, 44, 21, 226, 185, 165, 148, 33, 212, 255, 171, 155, 35, 134, 197, 120, 203, 234, 193, 190, 228, 67, 249, 65, 171, 113, 58, 193, 128, 16, 222, 73, 77, 95, 198, 254, 195, 149, 63, 7, 20, 6, 230, 245, 187, 145, 19, 62, 84, 142, 189, 11, 206, 63, 146, 249, 245, 134, 96, 217, 82, 177, 58, 43, 164, 61, 187, 64, 46, 79, 162, 152, 203, 91, 215, 65, 189, 0, 212, 80, 129, 55, 165, 51, 251, 3, 239, 1, 229, 114, 106, 10, 242, 97, 117, 99, 93, 252, 151, 252, 39, 171, 29, 250, 106, 2, 170, 133, 92, 145, 140, 197, 71, 244, 34, 62, 53, 68, 190, 56, 167, 135, 252, 170, 3, 16, 113, 160, 189, 94, 179, 93, 172, 95, 56, 95, 50, 124, 26, 170, 136, 243, 188, 165, 13, 170, 201, 177, 72, 75, 62, 27, 221, 231, 180, 173, 0, 193, 229, 142, 181, 46, 33, 156, 74, 106, 100, 133, 62, 153, 106, 191, 7, 248, 150, 81, 85, 162, 80, 65, 228, 146, 51, 148, 134, 177, 112, 119, 123, 100, 210, 125, 124, 96, 103, 187, 240, 250, 191, 195, 248, 194, 225, 237, 232, 60, 113, 67, 162, 236, 154, 230, 33, 69, 190, 109, 192, 134, 100, 110, 51, 79, 155, 236, 12, 3, 66, 215, 31, 107, 47, 165, 218, 120, 248, 148, 0, 135, 46, 3, 160, 234, 27, 61, 17, 87, 28, 66, 37, 193, 132, 247, 7, 62, 15, 107, 77, 166, 3, 6, 67, 125, 57, 218, 217, 125, 13, 73, 37, 55, 79, 16, 4, 213, 22, 52, 55, 81, 26, 118, 234, 76, 37, 48, 116, 194, 30, 207, 53, 30, 232, 14, 39, 198, 130, 16, 151, 60, 127, 147, 180, 66, 43, 104, 76, 231, 240, 14, 134, 177, 240, 23, 54, 192, 26, 134, 30, 156, 136, 115, 244, 52, 59, 236, 90, 119, 105, 165, 199, 131, 82, 193, 124, 237, 22, 250, 234, 96, 184, 220, 230, 175, 169, 57, 229, 9, 36, 26, 86, 0, 44, 195, 85, 22, 71, 238, 68, 210, 250, 79, 203, 162, 231, 237, 136, 40, 185, 39, 167, 19, 192, 29, 219, 112, 177, 38, 36, 79, 76, 129, 151, 247, 2, 2, 56, 123, 161, 22, 175, 198, 14, 180, 35, 182, 79, 240, 160, 48, 2, 183, 198, 116, 78, 4, 108, 133, 124, 160, 186, 161, 153, 175, 192, 48, 74, 23, 98, 195, 121, 99, 36, 42, 91, 59, 211, 161, 1, 118, 99, 255, 245, 52, 125, 80, 39, 186, 92, 133, 239, 156, 211, 30, 16, 202, 54, 18, 180, 224, 211, 100, 91, 152, 91, 140, 12, 209, 107, 140, 35, 218, 41, 137, 204, 154, 58, 148, 116, 205, 5, 246, 76, 214, 151, 6, 254, 252, 99, 24, 120, 12, 44, 125, 50, 19, 125, 204, 158, 146, 248, 27, 63, 138, 238, 87, 5, 152, 112, 48, 118, 246, 26, 121, 83, 43, 76, 58, 242, 210, 169, 175, 187, 234, 246, 69, 80, 246, 164, 121, 136, 233, 166, 92, 230, 41, 144, 112, 225, 99, 213, 163, 9, 202, 62, 37, 100, 182, 243, 214, 129, 111, 11, 141, 53, 131, 33, 172, 164, 107, 249, 143, 47, 94, 255, 189, 49, 71, 148, 242, 186, 35, 69, 251, 211, 69, 75, 194, 86, 185, 152, 82, 203, 128, 220, 33, 233, 174, 145, 101, 170, 85, 25, 39, 150, 36, 100, 157, 202, 133, 102, 159, 146, 251, 20, 63, 215, 219, 243, 34, 181, 153, 246, 225, 7, 207, 84, 30, 205, 251, 110, 168, 209, 88, 54, 245, 147, 29, 45, 63, 234, 116, 30, 217, 1, 43, 140, 20, 95, 59, 221, 142, 180, 161, 242, 24, 35, 7, 55, 52, 117, 91, 68, 230, 25, 223, 254, 2, 251, 228, 165, 219, 168, 9, 234, 16, 245, 51, 12, 15, 56, 157, 212, 106, 253, 138, 233, 16, 147, 248, 34, 60, 22, 196, 193, 240, 236, 67, 85, 108, 112, 180, 120, 179, 124, 147, 49, 92, 223, 176, 144, 220, 169, 151, 191, 68, 61, 206, 58, 252, 149, 121, 35, 155, 136, 204, 33, 236, 2, 175, 30, 99, 163, 135, 28, 127, 29, 231, 79, 177, 239, 133, 165, 248, 182, 197, 207, 78, 148, 55, 147, 140, 11, 30, 252, 22, 89, 60, 158, 53, 14, 79, 68, 96, 253, 142, 200, 166, 95, 14, 117, 171, 152, 131, 143, 157, 140, 124, 68, 31, 176, 180, 21, 65, 230, 155, 193, 243, 193, 113, 185, 226, 99, 248, 55, 222, 245, 163, 91, 81, 123, 175, 125, 19, 177, 205, 182, 227, 93, 61, 204, 26, 111, 192, 48, 222, 255, 38, 34, 104, 91, 34, 0, 0, 48, 33, 131, 165, 4, 220, 173, 78, 245, 93, 245, 187, 18, 222, 174, 189, 43, 94, 87, 137, 179, 84, 140, 55, 60, 253, 75, 140, 69, 165, 181, 128, 61, 228, 57, 96, 175, 104, 177, 105, 24, 0, 130, 231, 78, 240, 22, 95, 243, 40, 29, 125, 152, 152, 196, 31, 234, 214, 100, 227, 228, 17, 235, 150, 7, 213, 126, 3, 73, 39, 8, 234, 248, 89, 224, 240, 44, 80, 213, 138, 211, 93, 52, 74, 247, 169, 123, 173, 186, 7, 150, 44, 243, 67, 22, 245, 229, 5, 133, 170, 56, 186, 245, 48, 188, 246, 124, 226, 141, 114, 185, 89, 236, 237, 213, 18, 109, 23, 253, 96, 71, 136, 239, 245, 212, 3, 199, 196, 166, 215, 233, 160, 89, 236, 75, 148, 44, 249, 3, 187, 9, 198, 116, 225, 104, 223, 210, 139, 94, 105, 249, 131, 225, 56, 37, 111, 123, 94, 63, 76, 9, 255, 223, 124, 159, 30, 43, 8, 204, 119, 185, 240, 165, 153, 236, 42, 201, 23, 168, 53, 98, 36, 209, 18, 244, 44, 248, 32, 52, 84, 75, 17, 103, 0, 11, 90, 41, 104, 9, 207, 193, 108, 98, 161, 85, 140, 25, 220, 158, 3, 207, 8, 177, 199, 136, 248, 125, 240, 22, 240, 204, 20, 203, 184, 115, 32, 247, 233, 157, 65, 232, 174, 180, 235, 102, 212, 114, 132, 85, 237, 6, 149, 103, 225, 191, 187, 93, 243, 254, 250, 58, 159, 130, 56, 142, 183, 72, 208, 15, 229, 116, 37, 147, 162, 42, 205, 39, 84, 1, 148, 111, 102, 107, 70, 41, 33, 195, 31, 6, 104, 250, 100, 50, 240, 49, 165, 8, 36, 99, 2, 178, 120, 125, 161, 9, 216, 24, 185, 192, 210, 51, 4, 251, 54, 55, 66, 135, 206, 208, 4, 185, 54, 155, 192, 81, 244, 143, 13, 1, 196, 53, 191, 181, 152, 90, 230, 173, 233, 207, 66, 132, 35, 82, 87, 216, 197, 192, 171, 116, 12, 172, 58, 238, 244, 48, 101, 172, 107, 33, 69, 136, 142, 199, 9, 53, 154, 207, 81, 143, 107, 127, 93, 225, 140, 80, 241, 233, 28, 35, 53, 116, 251, 159, 34, 101, 110, 102, 181, 229, 232, 115, 254, 202, 188, 99, 214, 159, 116, 124, 120, 252, 189, 233, 201, 179, 200, 122, 60, 106, 190, 121, 112, 14, 138, 113, 101, 73, 22, 22, 247, 5, 20, 62, 6, 235, 22, 255, 128, 80, 244, 244, 186, 169, 159, 27, 38, 122, 221, 130, 167, 234, 236, 135, 111, 138, 253, 41, 161, 71, 249, 162, 133, 187, 1, 193, 167, 229, 227, 116, 23, 47, 48, 174, 193, 184, 161, 27, 128, 31, 86, 126, 18, 237, 25, 58, 108, 184, 244, 137, 119, 229, 50, 212, 248, 151, 160, 221, 138, 15, 15, 158, 132, 142, 58, 15, 80, 160, 169, 194, 30, 244, 227, 35, 221, 156, 77, 26, 125, 175, 87, 73, 6, 108, 128, 55, 57, 190, 173, 187, 235, 178, 144, 96, 226, 143, 101, 177, 24, 71, 24, 124, 46, 150, 93, 38, 60, 185, 30, 237, 30, 108, 74, 0, 1, 47, 49, 173, 220, 170, 102, 57, 218, 23, 56, 198, 150, 155, 200, 139, 129, 243, 72, 92, 27, 178, 184, 245, 233, 51, 73, 199, 234, 133, 197, 224, 128, 223, 15, 197, 56, 243, 224, 105, 155, 240, 214, 203, 118, 147, 72, 129, 45, 12, 133, 65, 78, 7, 103, 254, 70, 17, 189, 183, 195, 25, 6, 139, 234, 233, 109, 244, 249, 1, 41, 197, 82, 111, 165, 222, 47, 113, 56, 116, 142, 197, 71, 114, 232, 178, 240, 141, 32, 172, 9, 148, 139, 200, 15, 145, 225, 107, 161, 27, 51, 232, 255, 39, 115, 97, 231, 162, 22, 56, 102, 181, 204, 118, 102, 28, 154, 151, 152, 29, 85, 1, 68, 164, 40, 160, 144, 170, 136, 156, 98, 89, 224, 96, 208, 165, 46, 40, 105, 27, 53, 244, 157, 202, 187, 40, 182, 78, 12, 171, 130, 224, 155, 184, 52, 123, 105, 95, 181, 241, 51, 58, 222, 95, 90, 18, 175, 242, 98, 3, 66, 207, 72, 154, 41, 174, 39, 240, 117, 44, 71, 42, 139, 250, 64, 169, 236, 163, 25, 153, 113, 178, 88, 87, 56, 28, 54, 112, 255, 108, 245, 98, 181, 47, 106, 137, 27, 219, 227, 20, 77, 126, 216, 246, 95, 48, 9, 156, 34, 67, 151, 124, 166, 95, 40, 144, 252, 240, 65, 97, 191, 245, 118, 86, 239, 88, 21, 81, 115, 26, 131, 44, 208, 117, 98, 125, 123, 10, 107, 56, 126, 74, 205, 175, 126, 98, 20, 104, 158, 17, 214, 176, 145, 226, 208, 185, 226, 252, 14, 94, 215, 57, 240, 169, 119, 25, 214, 94, 168, 224, 40, 35, 235, 199, 141, 12, 12, 105, 3, 170, 115, 211, 9, 85, 98, 12, 50, 146, 91, 141, 55, 13, 233, 214, 34, 226, 18, 160, 49, 10, 3, 171, 248, 8, 61, 158, 198, 49, 38, 188, 163, 220, 10, 226, 248, 232, 229, 186, 1, 182, 12, 156, 193, 66, 120, 82, 144, 146, 108, 159, 182, 255, 88, 120, 3, 171, 184, 187, 154, 32, 94, 153, 71, 45, 55, 102, 139, 239, 187, 139, 183, 241, 67, 136, 135, 131, 49, 80, 7, 70, 156, 149, 236, 8, 67, 55, 101, 43, 38, 142, 254, 122, 169, 109, 27, 87, 70, 223, 19, 19, 151, 173, 253, 57, 225, 169, 112, 146, 199, 195, 36, 118, 254, 73, 100, 98, 196, 198, 66, 33, 237, 101, 18, 47, 212, 141, 118, 150, 155, 94, 193, 54, 98, 189, 143, 121, 226, 92, 158, 118, 55, 112, 150, 180, 198, 1, 248, 51, 92, 60, 100, 107, 217, 71, 30, 193, 221, 93, 240, 5, 49, 118, 111, 61, 125, 6, 33, 5, 249, 82, 183, 98, 205, 209, 159, 192, 118, 207, 152, 207, 160, 176, 223, 101, 156, 127, 81, 12, 254, 94, 208, 181, 238, 122, 224, 99, 40, 246, 152, 193, 231, 249, 15, 156, 210, 165, 193, 244, 208, 65, 110, 196, 89, 106, 29, 210, 89, 213, 129, 136, 129, 31, 95, 44, 88, 138, 59, 183, 66, 251, 219, 12, 5, 41, 77, 169, 105, 181, 210, 191, 166, 222, 77, 196, 29, 168, 211, 240, 44, 50, 217, 55, 95, 158, 20, 125, 189, 175, 100, 189, 33, 180, 179, 34, 10, 227, 205, 123, 204, 106, 183, 22, 189, 2, 40, 60, 200, 0, 95, 4, 44, 45, 79, 176, 128, 46, 42, 238, 189, 94, 71, 3, 2, 147, 196, 85, 203, 199, 26, 187, 183, 237, 54, 7, 101, 154, 186, 155, 212, 121, 188, 233, 253, 137, 116, 3, 197, 235, 174, 62, 88, 123, 217, 239, 73, 22, 138, 247, 70, 239, 61, 158, 245, 204, 251, 56, 139, 252, 144, 153, 156, 15, 76, 81, 70, 66, 58, 162, 100, 118, 18, 106, 181, 96, 98, 77, 164, 245, 36, 106, 115, 166, 237, 76, 152, 78, 179, 135, 126, 137, 6, 104, 130, 214, 153, 148, 82, 155, 10, 69, 102, 248, 235, 230, 115, 16, 189, 122, 22, 5, 15, 170, 224, 164, 105, 115, 64, 66, 254, 131, 249, 102, 16, 141, 105, 158, 145, 40, 87, 102, 205, 3, 133, 125, 226, 182, 197, 118, 119, 173, 179, 73, 116, 198, 111, 173, 212, 139, 147, 62, 69, 86, 197, 163, 34, 230, 164, 233, 117, 57, 89, 164, 65, 123, 168, 73, 226, 47, 242, 28, 181, 225, 153, 64, 33, 94, 143, 49, 46, 4, 55, 171, 32, 196, 100, 167, 206, 140, 22, 85, 96, 45, 56, 116, 234, 77, 186, 46, 23, 19, 216, 179, 247, 45, 95, 244, 127, 103, 48, 142, 30, 208, 217, 34, 120, 13, 147, 131, 132, 74, 39, 9, 33, 58, 161, 157, 70, 235, 51, 79, 186, 129, 155, 28, 36, 72, 3, 239, 141, 161, 25, 156, 37, 1, 32, 123, 50, 56, 227, 19, 57, 182, 62, 10, 47, 202, 35, 29, 42, 238, 183, 191, 222, 63, 91, 93, 2, 11, 2, 153, 2, 11, 31, 17, 22, 117, 5, 108, 55, 40, 143, 0, 220, 243, 134, 32, 13, 228, 240, 159, 220, 139, 178, 8, 209, 2, 111, 20, 217, 92, 248, 35, 127, 135, 18, 108, 234, 36, 82, 204, 55, 254, 32, 178, 5, 127, 143, 20, 162, 31, 242, 38, 32, 179, 111, 253, 151, 12, 97, 29, 102, 241, 26, 117, 161, 32, 15, 14, 98, 84, 161, 192, 107, 56, 178, 118, 194, 154, 201, 188, 135, 254, 27, 70, 81, 224, 93, 150, 161, 222, 19, 86, 242, 157, 130, 221, 110, 102, 141, 223, 75, 32, 240, 215, 138, 233, 74, 44, 30, 122, 213, 139, 211, 48, 243, 245, 85, 184, 188, 1, 227, 199, 166, 73, 132, 254, 123, 58, 37, 229, 123, 17, 118, 131, 18, 129, 79, 61, 188, 234, 151, 34, 16, 138, 30, 52, 229, 181, 123, 173, 243, 27, 7, 209, 70, 252, 234, 143, 213, 232, 254, 39, 128, 44, 97, 217, 206, 2, 218, 3, 156, 216, 95, 71, 126, 54, 137, 189, 17, 241, 128, 107, 108, 86, 51, 176, 21, 4, 233, 198, 109, 145, 240, 249, 48, 240, 176, 202, 153, 151, 135, 48, 66, 83, 30, 242, 40, 218, 182, 246, 160, 147, 95, 52, 95, 238, 133, 132, 242, 68, 12, 236, 111, 185, 1, 215, 135, 248, 61, 193, 136, 67, 27, 218, 183, 96, 175, 71, 5, 101, 151, 49, 229, 119, 145, 242, 231, 235, 3, 144, 48, 244, 131, 237, 84, 71, 165, 61, 150, 41, 129, 64, 57, 119, 231, 34, 74, 123, 238, 31, 3, 104, 154, 19, 135, 104, 38, 221, 180, 59, 229, 210, 141, 46, 205, 252, 189, 203, 58, 100, 235, 150, 2, 131, 239, 168, 163, 132, 160, 219, 26, 175, 196, 219, 161, 19, 196, 130, 12, 165, 111, 16, 163, 15, 5, 191, 81, 104, 132, 69, 24, 240, 151, 247, 20, 59, 39, 183, 163, 70, 41, 111, 231, 21, 212, 11, 181, 136, 223, 244, 161, 129, 225, 115, 162, 112, 78, 103, 143, 228, 111, 49, 106, 215, 77, 148, 238, 191, 239, 233, 1, 113, 116, 82, 107, 18, 148, 57, 207, 241, 230, 129, 182, 76, 236, 4, 147, 25, 173, 42, 30, 230, 213, 122, 142, 205, 253, 234, 206, 7, 32, 78, 255, 218, 181, 239, 2, 109, 63, 244, 70, 98, 185, 254, 111, 155, 74, 92, 85, 37, 150, 54, 111, 98, 190, 123, 244, 0, 55, 69, 67, 228, 6, 197, 255, 179, 228, 249, 20, 56, 93, 238, 89, 206, 176, 96, 218, 86, 221, 243, 137, 127, 188, 212, 82, 99, 47, 197, 233, 110, 161, 254, 132, 155, 19, 188, 97, 19, 101, 24, 238, 72, 105, 245, 251, 150, 133, 22, 242, 51, 94, 154, 224, 106, 217, 140, 228, 187, 147, 235, 127, 145, 122, 168, 211, 130, 158, 249, 249, 177, 171, 87, 187, 226, 71, 93, 54, 34, 157, 150, 128, 155, 44, 28, 89, 248, 122, 224, 127, 120, 240, 179, 102, 44, 194, 193, 178, 11, 145, 148, 172, 204, 121, 207, 132, 220, 175, 70, 202, 230, 127, 181, 33, 143, 19, 91, 90, 155, 152, 249, 203, 92, 11, 208, 143, 27, 165, 120, 75, 157, 111, 204, 62, 114, 187, 183, 172, 31, 225, 226, 80, 216, 79, 146, 104, 146, 105, 40, 34, 193, 27, 47, 217, 37, 198, 48, 98, 91, 147, 240, 95, 218, 55, 114, 73, 83, 229, 3, 187, 153, 82, 128, 181, 1, 111, 239, 177, 80, 98, 167, 74, 188, 4, 144, 105, 9, 140, 167, 156, 35, 211, 116, 13, 8, 102, 129, 121, 5, 142, 194, 213, 233, 68, 222, 137, 157, 57, 45, 27, 89, 132, 83, 12, 223, 72, 69, 65, 38, 174, 81, 214, 103, 90, 198, 137, 122, 84, 37, 66, 195, 192, 9, 17, 185, 123, 148, 219, 52, 86, 214, 126, 216, 143, 38, 71, 168, 250, 238, 240, 29, 128, 186, 107, 58, 230, 61, 132, 19, 43, 77, 205, 226, 111, 30, 146, 210, 150, 108, 180, 169, 133, 160, 163, 10, 135, 199, 173, 16, 242, 154, 232, 217, 62, 229, 230, 196, 239, 141, 208, 170, 99, 96, 114, 195, 44, 230, 252, 44, 36, 242, 137, 240, 221, 61, 169, 84, 189, 11, 169, 106, 81, 237, 6, 80, 56, 246, 176, 168, 194, 31, 5, 235, 103, 141, 195, 206, 229, 247, 121, 95, 21, 158, 224, 159, 191, 56, 186, 23, 214, 168, 133, 0, 252, 43, 98, 5, 134, 125, 91, 129, 162, 92, 253, 89, 38, 58, 168, 183, 108, 115, 74, 176, 200, 136, 217, 192, 151, 232, 165, 175, 20, 119, 186, 115, 223, 245, 231, 154, 82, 47, 220, 139, 37, 115, 76, 101, 73, 231, 19, 202, 154, 59, 164, 181, 63, 26, 205, 165, 113, 90, 203, 67, 113, 89, 38, 104, 167, 167, 76, 152, 164, 173, 46, 87, 39, 255, 201, 75, 127, 176, 179, 125, 146, 65, 30, 217, 3, 159, 68, 126, 224, 61, 153, 166, 102, 35, 200, 156, 152, 166, 25, 255, 225, 3, 134, 0, 104, 220, 92, 16, 205, 148, 166, 119, 118, 16, 236, 3, 81, 103, 232, 210, 227, 176, 165, 129, 140, 215, 168, 209, 79, 127, 105, 51, 19, 91, 192, 212, 50, 247, 64, 32, 221, 60, 4, 214, 211, 76, 167, 222, 175, 82, 84, 124, 73, 96, 233, 175, 115, 9, 54, 65, 173, 214, 236, 168, 188, 89, 109, 112, 99, 84, 36, 22, 223, 26, 33, 71, 165, 229, 11, 52, 146, 192, 137, 200, 191, 115, 192, 76, 85, 29, 136, 219, 153, 83, 1, 169, 140, 185, 155, 140, 148, 2, 133, 194, 206, 4, 56, 29, 110, 157, 182, 88, 71, 249, 158, 248, 149, 239, 38, 81, 234, 137, 121, 192, 144, 105, 38, 166, 157, 254, 189, 132, 116, 13, 244, 167, 108, 64, 224, 110, 203, 100, 210, 186, 243, 192, 100, 37, 136, 201, 7, 170, 23, 64, 228, 182, 200, 31, 176, 84, 152, 112, 82, 238, 141, 129, 145, 18, 224, 126, 196, 64, 176, 250, 246, 240, 25, 207, 115, 185, 174, 23, 148, 235, 218, 187, 190, 198, 117, 210, 218, 154, 127, 187, 114, 119, 11, 47, 156, 209, 72, 187, 190, 13, 130, 65, 53, 249, 224, 228, 243, 105, 184, 237, 19, 163, 236, 242, 101, 197, 34, 183, 71, 61, 77, 187, 119, 12, 57, 154, 195, 248, 160, 54, 133, 180, 66, 84, 97, 68, 130, 97, 102, 141, 140, 101, 252, 214, 178, 109, 205, 231, 134, 128, 109, 177, 159, 38, 83, 206, 50, 24, 33, 15, 251, 17, 117, 153, 119, 212, 64, 143, 3, 246, 53, 9, 208, 225, 46, 21, 217, 125, 182, 144, 190, 54, 56, 36, 87, 30, 164, 7, 21, 94, 76, 158, 95, 202, 59, 120, 2, 100, 170, 100, 176, 76, 143, 187, 222, 193, 211, 199, 143, 97, 192, 235, 141, 25, 136, 164, 87, 163, 240, 249, 61, 205, 65, 65, 178, 145, 139, 41, 136, 160, 250, 206, 240, 77, 155, 231, 193, 171, 102, 134, 30, 249, 42, 81, 197, 227, 119, 43, 95, 250, 202, 161, 22, 221, 59, 0, 163, 159, 235, 163, 51, 105, 143, 3, 248, 160, 111, 205, 176, 17, 248, 112, 18, 41, 93, 193, 42, 21, 121, 113, 54, 165, 203, 79, 235, 106, 251, 165, 176, 53, 35, 170, 79, 207, 158, 194, 24, 230, 205, 9, 188, 24, 72, 26, 37, 9, 212, 223, 212, 123, 198, 51, 117, 134, 239, 236, 26, 77, 58, 80, 142, 119, 154, 90, 147, 61, 7, 77, 129, 136, 29, 205, 145, 164, 121, 239, 188, 191, 69, 119, 207, 166, 191, 144, 104, 178, 158, 150, 162, 126, 104, 245, 147, 87, 68, 222, 154, 67, 92, 161, 139, 157, 147, 8, 132, 61, 117, 8, 52, 255, 80, 103, 94, 163, 181, 13, 45, 43, 2, 155, 182, 171, 68, 232, 120, 161, 123, 225, 27, 9, 33, 10, 187, 156, 207, 178, 65, 31, 49, 159, 237, 178, 8, 178, 164, 96, 115, 252, 120, 79, 117, 233, 156, 121, 67, 206, 136, 63, 120, 157, 198, 54, 138, 190, 175, 44, 8, 78, 251, 177, 32, 102, 86, 149, 22, 154, 45, 230, 71, 33, 234, 200, 105, 45, 153, 127, 21, 58, 83, 75, 128, 62, 209, 158, 75, 224, 10, 70, 243, 191, 150, 252, 82, 57, 22, 193, 202, 113, 204, 255, 166, 45, 182, 13, 121, 228, 121, 41, 103, 245, 91, 153, 8, 55, 185, 99, 39, 7, 152, 199, 128, 224, 162, 201, 5, 82, 36, 210, 107, 197, 184, 192, 115, 133, 91, 21, 1, 57, 166, 103, 232, 26, 196, 75, 248, 167, 234, 20, 182, 50, 63, 130, 173, 126, 130, 72, 101, 142, 6, 225, 195, 27, 118, 179, 13, 147, 96, 125, 78, 228, 90, 196, 92, 28, 225, 36, 3, 141, 45, 146, 116, 224, 247, 110, 133, 14, 234, 78, 23, 244, 114, 44, 35, 91, 104, 132, 37, 27, 102, 123, 21, 195, 46, 113, 44, 33, 198, 25, 24, 172, 102, 222, 177, 79, 235, 39, 195, 55, 47, 194, 126, 3, 90, 149, 72, 200, 8, 132, 98, 69, 170, 174, 144, 252, 65, 74, 158, 147, 185, 208, 28, 105, 228, 94, 184, 203, 188, 0, 96, 17, 201, 180, 130, 95, 126, 205, 139, 48, 28, 88, 135, 94, 151, 186, 124, 11, 121, 39, 195, 90, 35, 62, 11, 47, 207, 32, 99, 15, 195, 139, 212, 82, 23, 34, 158, 249, 128, 90, 250, 189, 70, 106, 37, 115, 166, 115, 161, 48, 235, 194, 10, 69, 5, 94, 82, 73, 214, 7, 165, 49, 180, 108, 28, 62, 108, 146, 20, 125, 247, 174, 105, 208, 195, 216, 152, 65, 114, 119, 146, 46, 95, 221, 21, 216, 200, 35, 171, 46, 101, 254, 146, 219, 183, 133, 50, 93, 127, 168, 143, 224, 206, 138, 88, 202, 134, 70, 131, 19, 68, 26, 185, 102, 181, 1, 24, 252, 15, 74, 51, 38, 13, 180, 155, 197, 243, 111, 63, 140, 203, 71, 195, 94, 163, 222, 56, 44, 211, 255, 40, 0, 143, 64, 41, 248, 216, 78, 222, 143, 224, 209, 244, 132, 112, 108, 109, 2, 105, 180, 38, 58, 14, 62, 70, 242, 212, 161, 40, 178, 27, 111, 149, 90, 136, 124, 251, 151, 233, 111, 241, 110, 243, 248, 94, 168, 121, 139, 108, 130, 57, 119, 249, 127, 241, 53, 252, 78, 100, 132, 89, 91, 33, 24, 90, 192, 169, 14, 98, 116, 204, 73, 117, 200, 122, 221, 121, 99, 86, 193, 233, 133, 172, 128, 136, 38, 7, 112, 106, 94, 103, 211, 79, 40, 163, 124, 191, 228, 216, 218, 118, 244, 75, 156, 122, 161, 21, 235, 195, 26, 201, 251, 100, 149, 41, 220, 116, 160, 218, 14, 18, 176, 103, 194, 42, 26, 220, 182, 64, 59, 234, 253, 88, 102, 195, 104, 160, 232, 62, 44, 254, 215, 156, 97, 142, 35, 80, 244, 164, 46, 155, 62, 45, 19, 38, 230, 6, 111, 32, 71, 73, 194, 72, 241, 225, 158, 220, 51, 47, 178, 180, 90, 85, 84, 154, 230, 173, 254, 250, 170, 145, 104, 244, 21, 98, 180, 145, 154, 186, 21, 70, 104, 16, 213, 111, 13, 95, 118, 121, 30, 244, 17, 160, 88, 29, 80, 57, 53, 224, 63, 27, 164, 41, 220, 89, 220, 250, 246, 94, 38, 189, 182, 23, 111, 185, 99, 40, 165, 231, 67, 252, 159, 170, 21, 117, 202, 20, 82, 129, 120, 242, 227, 192, 193, 77, 224, 88, 12, 193, 209, 133, 92, 198, 89, 223, 9, 159, 41, 222, 210, 87, 203, 89, 106, 37, 42, 103, 145, 16, 104, 13, 37, 249, 27, 3, 132, 204, 46, 175, 74, 23, 16, 4, 41, 186, 232, 40, 36, 58, 177, 32, 153, 103, 146, 118, 177, 24, 73, 10, 155, 159, 199, 141, 80, 15, 10, 107, 205, 206, 207, 111, 85, 222, 208, 205, 165, 3, 113, 182, 18, 6, 46, 5, 25, 77, 183, 249, 165, 109, 181, 23, 56, 138, 122, 68, 202, 72, 212, 206, 180, 165, 130, 138, 55, 197, 243, 152, 254, 80, 132, 246, 178, 246, 228, 45, 37, 11, 245, 105, 235, 203, 32, 251, 117, 198, 202, 46, 38, 0, 57, 231, 246, 213, 57, 211, 119, 114, 217, 84, 108, 145, 226, 113, 235, 117, 149, 98, 133, 52, 10, 152, 166, 252, 239, 118, 28, 220, 119, 4, 30, 241, 84, 119, 106, 11, 106, 82, 251, 117, 82, 83, 181, 38, 171, 98, 20, 105, 110, 116, 81, 171, 182, 75, 230, 83, 43, 37, 211, 165, 202, 38, 66, 77, 176, 46, 17, 224, 240, 250, 229, 70, 206, 143, 102, 5, 150, 27, 92, 84, 74, 85, 39, 177, 221, 49, 42, 41, 175, 76, 251, 0, 185, 64, 216, 110, 25, 132, 111, 32, 236, 43, 25, 142, 212, 208, 239, 249, 213, 83, 253, 219, 98, 211, 234, 241, 9, 25, 54, 189, 84, 157, 119, 129, 28, 85, 143, 80, 52, 47, 13, 163, 227, 207, 216, 48, 75, 207, 18, 245, 68, 254, 174, 56, 218, 230, 219, 209, 190, 139, 236, 221, 242, 135, 124, 226, 101, 152, 111, 151, 22, 189, 98, 142, 67, 85, 116, 12, 233, 83, 211, 56, 75, 74, 193, 102, 86, 117, 98, 140, 65, 80, 111, 73, 19, 170, 212, 63, 112, 124, 229, 58, 193, 254, 107, 206, 83, 208, 73, 242, 89, 65, 88, 230, 219, 37, 90, 50, 165, 150, 200, 124, 44, 190, 205, 34, 2, 247, 178, 214, 21, 221, 99, 116, 233, 59, 188, 146, 220, 151, 252, 248, 23, 85, 16, 166, 138, 231, 215, 28, 216, 54, 39, 82, 192, 201, 202, 112, 96, 237, 223, 150, 159, 215, 105, 47, 9, 105, 30, 202, 35, 166, 212, 186, 76, 187, 127, 114, 129, 70, 180, 103, 84, 84, 244, 92, 68, 212, 179, 240, 62, 80, 144, 215, 65, 202, 207, 101, 245, 91, 26, 31, 237, 4, 164, 159, 230, 249, 30, 190, 0, 95, 168, 116, 49, 167, 161, 109, 20, 111, 108, 173, 114, 135, 154, 196, 86, 210, 117, 54, 209, 159, 99, 15, 184, 195, 50, 191, 83, 229, 225, 121, 239, 2, 0, 72, 100, 55, 91, 141, 79, 130, 79, 44, 205, 130, 131, 109, 240, 107, 216, 119, 249, 191, 252, 134, 34, 134, 221, 204, 254, 6, 1, 225, 236, 182, 116, 228, 73, 73, 64, 206, 20, 183, 43, 51, 141, 214, 251, 39, 15, 97, 158, 238, 136, 208, 241, 214, 236, 88, 179, 53, 218, 213, 72, 128, 186, 214, 3, 4, 165, 247, 148, 174, 174, 89, 105, 190, 132, 145, 26, 97, 80, 244, 94, 61, 85, 203, 255, 95, 100, 186, 95, 159, 195, 145, 141, 0, 96, 17, 16, 183, 141, 124, 234, 187, 93, 176, 144, 98, 146, 244, 198, 190, 135, 200, 136, 160, 73, 92, 160, 180, 241, 76, 86, 113, 109, 250, 196, 155, 223, 129, 149, 130, 133, 125, 16, 135, 76, 134, 40, 189, 61, 205, 212, 213, 184, 212, 199, 7, 107, 138, 184, 237, 10, 66, 181, 165, 30, 208, 248, 160, 239, 161, 172, 212, 163, 152, 131, 135, 20, 158, 27, 157, 221, 81, 16, 227, 177, 138, 154, 174, 62, 155, 88, 207, 164, 124, 145, 186, 36, 50, 14, 99, 145, 38, 36, 152, 54, 202, 144, 124, 106, 13, 36, 10, 82, 122, 178, 191, 174, 15, 35, 206, 237, 26, 0, 28, 121, 186, 124, 237, 249, 114, 134, 230, 234, 166, 217, 216, 73, 157, 66, 95, 146, 156, 21, 55, 181, 54, 35, 13, 252, 110, 49, 42, 141, 245, 30, 56, 49, 162, 188, 223, 170, 201, 118, 226, 36, 171, 211, 135, 200, 117, 166, 19, 14, 129, 170, 72, 233, 149, 37, 149, 174, 204, 216, 228, 217, 144, 224, 71, 123, 54, 36, 46, 217, 41, 177, 132, 53, 201, 145, 219, 168, 174, 6, 216, 198, 18, 99, 154, 164, 62, 122, 26, 132, 45, 233, 17, 160, 147, 194, 211, 67, 222, 218, 19, 170, 32, 213, 244, 56, 106, 11, 25, 191, 129, 241, 3, 159, 92, 245, 251, 104, 106, 8, 20, 34, 227, 168, 155, 150, 86, 67, 120, 81, 144, 104, 201, 58, 197, 136, 207, 190, 141, 194, 195, 53, 98, 136, 151, 3, 250, 159, 190, 253, 77, 231, 208, 48, 73, 129, 93, 49, 116, 155, 157, 83, 157, 171, 197, 83, 220, 150, 211, 201, 255, 15, 98, 28, 115, 53, 242, 139, 98, 18, 161, 23, 102, 186, 12, 177, 61, 231, 187, 219, 175, 66, 127, 27, 120, 167, 7, 162, 217, 166, 39, 116, 16, 11, 38, 6, 231, 139, 118, 198, 213, 172, 15, 98, 105, 43, 1, 48, 229, 26, 213, 79, 252, 181, 166, 245, 27, 164, 30, 221, 22, 71, 218, 24, 196, 104, 74, 11, 25, 6, 111, 32, 242, 192, 75, 63, 34, 249, 158, 212, 183, 74, 67, 57, 61, 71, 75, 82, 76, 132, 22, 99, 195, 252, 222, 210, 21, 200, 58, 208, 98, 18, 55, 122, 191, 188, 117, 119, 110, 74, 37, 250, 228, 179, 198, 228, 29, 22, 167, 94, 55, 150, 47, 144, 187, 100, 232, 172, 224, 17, 65, 135, 20, 37, 63, 22, 13, 166, 21, 241, 110, 12, 133, 179, 4, 199, 134, 201, 170, 55, 187, 147, 84, 88, 222, 223, 156, 160, 31, 163, 229, 232, 123, 200, 136, 241, 196, 91, 143, 96, 15, 244, 193, 120, 221, 193, 87, 179, 77, 147, 218, 210, 52, 100, 23, 15, 41, 77, 208, 43, 197, 99, 187, 64, 122, 226, 45, 117, 122, 86, 158, 205, 6, 13, 37, 231, 70, 189, 131, 69, 102, 171, 25, 209, 24, 235, 131, 163, 139, 4, 22, 23, 111, 188, 168, 59, 142, 224, 60, 60, 77, 180, 95, 94, 36, 32, 141, 53, 109, 49, 0, 47, 46, 186, 185, 131, 33, 91, 91, 10, 107, 16, 233, 7, 67, 95, 139, 19, 120, 135, 77, 203, 203, 207, 224, 78, 123, 71, 186, 161, 253, 181, 70, 183, 93, 63, 56, 55, 148, 238, 4, 92, 130, 173, 39, 186, 213, 162, 92, 22, 175, 119, 91, 106, 164, 214, 111, 77, 190, 1, 198, 67, 252, 61, 228, 45, 20, 190, 124, 244, 235, 3, 106, 102, 169, 2, 233, 168, 247, 217, 207, 39, 26, 52, 22, 217, 45, 5, 6, 172, 124, 34, 87, 48, 86, 190, 50, 211, 34, 197, 59, 146, 193, 125, 36, 150, 215, 99, 38, 23, 243, 204, 184, 142, 22, 164, 56, 94, 108, 67, 243, 222, 101, 184, 183, 224, 188, 178, 143, 198, 252, 56, 248, 223, 167, 27, 2, 147, 180, 160, 222, 162, 64, 165, 140, 174, 18, 226, 252, 180, 40, 21, 121, 254, 69, 244, 101, 57, 195, 165, 143, 135, 167, 77, 140, 63, 151, 174, 79, 149, 90, 15, 74, 203, 156, 47, 142, 219, 229, 250, 74, 14, 30, 5, 119, 72, 220, 25, 235, 209, 210, 229, 223, 142, 52, 97, 156, 78, 81, 23, 58, 151, 10, 24, 234, 177, 60, 118, 208, 246, 63, 121, 225, 154, 70, 42, 243, 79, 110, 94, 35, 77, 113, 146, 136, 88, 96, 10, 60, 183, 255, 25, 67, 66, 250, 53, 164, 88, 209, 46, 172, 120, 75, 225, 56, 122, 184, 93, 97, 215, 198, 119, 185, 152, 40, 126, 188, 21, 23, 237, 221, 121, 254, 171, 231, 67, 121, 134, 161, 240, 197, 65, 86, 88, 7, 240, 125, 212, 171, 85, 115, 97, 218, 239, 171, 98, 32, 71, 174, 150, 91, 0, 168, 46, 237, 252, 6, 97, 181, 112, 30, 75, 219, 20, 8, 160, 217, 204, 48, 82, 49, 200, 211, 44, 216, 28, 166, 107, 174, 187, 207, 181, 135, 11, 121, 83, 26, 238, 224, 18, 36, 164, 30, 172, 173, 199, 143, 175, 38, 37, 194, 158, 153, 105, 29, 249, 219, 167, 174, 228, 140, 142, 144, 195, 98, 161, 176, 32, 34, 193, 14, 169, 64, 254, 76, 55, 96, 199, 232, 165, 19, 27, 32, 211, 51, 152, 172, 47, 194, 30, 205, 76, 71, 167, 203, 83, 248, 242, 223, 36, 172, 155, 183, 238, 72, 90, 124, 102, 35, 121, 59, 63, 95, 42, 200, 127, 36, 180, 84, 87, 118, 106, 145, 211, 46, 36, 243, 89, 52, 30, 157, 242, 131, 124, 239, 222, 230, 97, 189, 127, 215, 61, 26, 235, 107, 242, 149, 52, 147, 142, 22, 158, 6, 177, 12, 100, 95, 199, 238, 45, 176, 168, 172, 48, 213, 88, 141, 117, 236, 241, 121, 138, 41, 158, 92, 35, 124, 37, 55, 50, 48, 29, 232, 9, 208, 68, 33, 150, 158, 40, 8, 149, 68, 56, 112, 120, 222, 78, 42, 84, 193, 138, 50, 9, 37, 129, 120, 137, 232, 220, 33, 57, 185, 47, 176, 159, 188, 55, 11, 251, 113, 205, 99, 14, 228, 39, 147, 231, 222, 7, 142, 174, 124, 64, 17, 186, 146, 227, 145, 209, 163, 157, 178, 99, 121, 113, 42, 92, 153, 230, 0, 64, 188, 235, 94, 114, 49, 53, 186, 44, 242, 242, 50, 247, 181, 82, 29, 124, 240, 136, 100, 134, 43, 25, 2, 222, 143, 133, 43, 152, 212, 11, 32, 140, 131, 17, 226, 123, 109, 59, 78, 204, 58, 218, 81, 207, 12, 11, 213, 41, 117, 194, 178, 97, 123, 116, 143, 190, 134, 128, 124, 185, 226, 111, 147, 8, 223, 248, 214, 165, 140, 187, 51, 200, 56, 197, 13, 197, 217, 214, 190, 12, 131, 223, 73, 82, 170, 20, 244, 56, 149, 154, 170, 66, 209, 241, 202, 183, 16, 214, 120, 179, 25, 227, 168, 175, 11, 237, 243, 117, 205, 29, 200, 210, 42, 114, 185, 64, 63, 169, 171, 179, 26, 55, 8, 2, 189, 138, 192, 244, 211, 221, 4, 169, 221, 218, 193, 248, 255, 69, 207, 102, 26, 162, 146, 184, 190, 6, 77, 159, 121, 159, 11, 240, 177, 227, 253, 93, 80, 72, 96, 135, 147, 142, 37, 246, 71, 217, 27, 109, 184, 96, 171, 111, 145, 11, 99, 234, 176, 87, 132, 26, 107, 134, 219, 161, 54, 54, 56, 141, 22, 80, 207, 254, 143, 14, 188, 168, 219, 159, 70, 247, 148, 54, 52, 73, 252, 59, 72, 4, 81, 44, 123, 5, 59, 210, 31, 175, 46, 208, 97, 114, 102, 232, 5, 218, 207, 211, 62, 109, 205, 66, 135, 114, 250, 42, 44, 168, 40, 72, 238, 66, 254, 252, 235, 252, 151, 43, 138, 251, 78, 210, 9, 93, 202, 82, 30, 111, 186, 145, 247, 39, 88, 118, 38, 254, 254, 200, 171, 2, 5, 100, 168, 180, 223, 68, 31, 35, 59, 131, 212, 61, 255, 112, 206, 149, 131, 142, 47, 50, 96, 196, 13, 15, 75, 14, 151, 91, 221, 29, 122, 173, 227, 50, 30, 48, 51, 101, 83, 99, 140, 217, 241, 243, 25, 249, 105, 230, 170, 138, 45, 128, 179, 245, 30, 88, 209, 110, 50, 160, 204, 245, 240, 202, 42, 108, 101, 19, 230, 200, 133, 50, 212, 253, 154, 91, 15, 47, 98, 29, 12, 255, 79, 164, 71, 169, 56, 145, 168, 107, 118, 182, 84, 112, 230, 40, 177, 239, 100, 154, 179, 185, 28, 135, 45, 207, 73, 9, 211, 219, 142, 18, 195, 22, 38, 48, 241, 191, 223, 175, 143, 101, 179, 180, 21, 144, 118, 84, 42, 67, 174, 20, 46, 180, 190, 209, 235, 199, 156, 61, 221, 44, 168, 22, 154, 106, 238, 60, 176, 22, 246, 84, 129, 43, 108, 113, 83, 174, 156, 63, 112, 61, 129, 41, 212, 175, 186, 82, 148, 197, 166, 32, 253, 101, 252, 252, 66, 178, 86, 37, 218, 113, 169, 197, 148, 201, 69, 76, 165, 88, 248, 110, 150, 128, 69, 162, 43, 197, 184, 241, 87, 160, 227, 235, 125, 15, 215, 88, 132, 152, 193, 53, 161, 148, 149, 172, 246, 215, 2, 143, 214, 198, 138, 76, 68, 144, 199, 132, 12, 253, 227, 98, 190, 2, 194, 240, 74, 24, 42, 85, 251, 148, 168, 201, 69, 85, 204, 224, 146, 141, 219, 181, 123, 240, 147, 158, 30, 106, 241, 114, 17, 154, 28, 94, 31, 57, 109, 176, 180, 60, 4, 210, 103, 16, 125, 242, 79, 35, 90, 96, 0, 51, 32, 238, 207, 104, 141, 245, 75, 35, 164, 34, 208, 5, 35, 4, 32, 123, 253, 78, 164, 0, 147, 38, 41, 75, 7, 150, 22, 2, 164, 99, 4, 142, 105, 119, 177, 40, 26, 120, 217, 213, 241, 177, 127, 166, 201, 218, 65, 40, 202, 51, 208, 102, 37, 39, 34, 128, 159, 177, 63, 22, 163, 196, 181, 166, 6, 131, 232, 120, 116, 227, 225, 7, 102, 203, 178, 148, 163, 75, 109, 60, 50, 177, 0, 17, 108, 151, 77, 54, 91, 100, 246, 133, 181, 221, 14, 254, 232, 138, 51, 251, 52, 201, 104, 207, 215, 241, 21, 71, 247, 43, 12, 140, 191, 182, 14, 160, 153, 175, 21, 108, 3, 42, 23, 70, 16, 124, 117, 14, 86, 127, 218, 117, 161, 57, 184, 48, 170, 191, 51, 119, 116, 159, 39, 254, 230, 56, 85, 220, 170, 72, 166, 82, 196, 245, 81, 188, 172, 54, 210, 176, 175, 38, 68, 20, 108, 3, 195, 252, 153, 209, 16, 148, 195, 75, 140, 197, 117, 69, 80, 121, 189, 140, 206, 154, 51, 112, 67, 85, 222, 249, 99, 83, 155, 27, 3, 116, 34, 163, 36, 152, 245, 147, 98, 168, 53, 41, 197, 52, 195, 218, 76, 206, 26, 87, 25, 72, 243, 247, 22, 87, 60, 237, 199, 232, 26, 89, 214, 64, 49, 221, 82, 46, 0, 4, 31, 135, 199, 143, 94, 231, 44, 24, 218, 10, 162, 36, 167, 9, 195, 141, 150, 100, 53, 25, 120, 58, 41, 114, 106, 29, 115, 121, 36, 186, 110, 160, 175, 58, 164, 139, 170, 184, 196, 142, 62, 109, 253, 53, 77, 241, 141, 68, 97, 70, 66, 51, 112, 117, 98, 187, 29, 104, 122, 14, 92, 200, 162, 0, 15, 42, 123, 47, 165, 87, 203, 5, 146, 206, 16, 95, 21, 230, 101, 69, 118, 130, 253, 200, 49, 103, 183, 111, 44, 85, 199, 2, 18, 251, 227, 37, 110, 63, 250, 129, 200, 20, 134, 102, 222, 163, 243, 238, 93, 192, 211, 58, 2, 173, 192, 64, 205, 40, 27, 211, 81, 213, 21, 187, 72, 22, 169, 115, 116, 93, 229, 203, 234, 231, 176, 196, 37, 137, 191, 183, 19, 41, 30, 65, 152, 139, 203, 130, 224, 22, 42, 18, 100, 19, 105, 205, 174, 93, 255, 135, 146, 218, 251, 71, 163, 53, 172, 187, 49, 127, 45, 250, 233, 230, 228, 50, 151, 232, 137, 12, 220, 159, 22, 25, 119, 252, 160, 249, 113, 47, 190, 3, 58, 80, 178, 41, 67, 157, 82, 209, 6, 104, 70, 169, 248, 255, 67, 33, 61, 176, 135, 241, 49, 128, 168, 246, 91, 90, 230, 41, 130, 183, 7, 193, 84, 43, 75, 137, 22, 13, 107, 70, 119, 180, 168, 13, 75, 175, 236, 200, 218, 167, 210, 116, 69, 195, 42, 185, 242, 23, 85, 4, 178, 111, 8, 168, 87, 185, 49, 195, 167, 62, 135, 231, 53, 224, 226, 81, 120, 175, 102, 86, 254, 253, 226, 84, 27, 246, 73, 81, 218, 240, 212, 173, 52, 191, 201, 72, 120, 185, 241, 14, 55, 27, 92, 173, 71, 229, 3, 14, 19, 195, 72, 164, 51, 17, 71, 69, 126, 113, 171, 47, 218, 146, 138, 96, 150, 48, 141, 183, 192, 148, 61, 155, 82, 151, 129, 69, 143, 120, 222, 36, 179, 160, 211, 112, 12, 75, 201, 60, 224, 74, 1, 249, 254, 158, 219, 203, 76, 235, 39, 70, 23, 89, 126, 246, 128, 4, 32, 194, 82, 103, 140, 149, 113, 91, 91, 119, 167, 65, 41, 55, 251, 101, 165, 53, 2, 61, 79, 211, 129, 84, 47, 117, 68, 5, 223, 158, 90, 102, 148, 122, 122, 28, 191, 0, 47, 84, 233, 218, 57, 0, 247, 201, 124, 198, 234, 85, 214, 192, 249, 84, 108, 128, 217, 100, 170, 234, 163, 39, 191, 197, 59, 94, 230, 63, 224, 209, 63, 113, 87, 168, 63, 91, 95, 56, 232, 158, 106, 210, 155, 49, 11, 129, 61, 164, 47, 146, 235, 202, 30, 13, 66, 70, 64, 154, 213, 119, 67, 124, 72, 47, 18, 186, 235, 148, 205, 218, 113, 110, 163, 255, 147, 246, 52, 159, 58, 206, 234, 231, 41, 225, 80, 207, 12, 213, 10, 89, 81, 99, 46, 235, 208, 248, 13, 44, 236, 63, 17, 165, 118, 235, 93, 42, 119, 246, 192, 159, 51, 70, 107, 63, 154, 119, 180, 5, 220, 79, 2, 255, 171, 150, 59, 29, 72, 190, 40, 233, 99, 61, 27, 15, 95, 120, 209, 17, 156, 35, 62, 241, 163, 168, 251, 43, 82, 42, 2, 147, 134, 243, 88, 121, 123, 186, 239, 195, 185, 230, 206, 31, 30, 155, 68, 173, 14, 113, 40, 143, 72, 231, 234, 175, 66, 43, 57, 162, 133, 168, 195, 203, 243, 40, 172, 115, 195, 121, 43, 139, 53, 37, 84, 61, 111, 36, 210, 221, 34, 251, 35, 41, 185, 156, 3, 85, 216, 38, 227, 2, 2, 116, 84, 213, 209, 21, 202, 110, 41, 25, 35, 29, 147, 95, 249, 162, 231, 238, 233, 150, 186, 123, 157, 221, 165, 146, 226, 14, 153, 66, 222, 202, 89, 15, 78, 89, 20, 212, 197, 169, 170, 247, 14, 223, 17, 26, 142, 26, 111, 50, 7, 130, 112, 33, 181, 250, 22, 77, 53, 145, 5, 247, 53, 32, 109, 250, 83, 65, 224, 45, 245, 127, 21, 124, 177, 26, 81, 40, 220, 250, 221, 249, 231, 117, 139, 146, 201, 253, 192, 171, 65, 97, 51, 124, 234, 40, 231, 124, 174, 34, 56, 217, 141, 99, 249, 154, 219, 66, 168, 138, 50, 45, 201, 79, 170, 135, 153, 44, 52, 244, 214, 231, 45, 252, 26, 202, 91, 156, 206, 203, 25, 79, 100, 73, 251, 95, 105, 212, 204, 135, 37, 224, 199, 54, 45, 173, 41, 191, 124, 128, 129, 204, 110, 68, 49, 5, 37, 80, 198, 240, 101, 3, 90, 4, 0, 180, 176, 157, 136, 175, 187, 250, 177, 51, 99, 134, 210, 11, 59, 183, 111, 156, 132, 158, 194, 35, 54, 213, 1, 97, 250, 0, 121, 85, 64, 139, 8, 3, 34, 208, 171, 83, 203, 134, 114, 142, 3, 167, 51, 193, 9, 165, 195, 30, 155, 208, 138, 215, 113, 105, 20, 47, 188, 178, 41, 94, 40, 237, 22, 45, 119, 28, 187, 254, 29, 223, 217, 236, 215, 66, 104, 217, 188, 41, 122, 243, 159, 238, 108, 168, 99, 104, 5, 121, 63, 91, 190, 74, 130, 159, 221, 4, 51, 134, 54, 122, 121, 132, 135, 199, 254, 244, 64, 137, 184, 31, 178, 218, 74, 135, 246, 28, 167, 19, 183, 63, 53, 89, 132, 201, 107, 153, 188, 210, 91, 132, 194, 252, 96, 244, 19, 150, 223, 19, 135, 5, 226, 97, 111, 200, 86, 249, 52, 7, 25, 226, 81, 152, 129, 40, 79, 69, 39, 2, 241, 85, 8, 89, 46, 112, 145, 231, 178, 231, 63, 74, 5, 51, 189, 229, 195, 102, 208, 189, 108, 252, 109, 225, 214, 140, 13, 170, 44, 87, 70, 129, 30, 255, 115, 104, 203, 47, 228, 186, 114, 122, 97, 6, 55, 54, 184, 170, 106, 164, 62, 178, 126, 238, 60, 82, 6, 65, 130, 82, 195, 141, 238, 250, 239, 122, 252, 87, 8, 63, 196, 135, 64, 187, 3, 66, 245, 161, 162, 35, 55, 206, 153, 249, 118, 89, 243, 61, 254, 83, 62, 201, 23, 94, 69, 16, 102, 228, 76, 195, 44, 202, 22, 30, 53, 237, 237, 229, 186, 15, 84, 16, 110, 208, 26, 72, 109, 128, 194, 53, 182, 44, 230, 183, 143, 87, 146, 105, 10, 139, 106, 69, 199, 172, 83, 200, 210, 200, 254, 56, 170, 143, 187, 98, 134, 231, 77, 40, 245, 56, 209, 198, 221, 38, 173, 209, 199, 90, 148, 100, 196, 159, 14, 192, 42, 40, 158, 161, 241, 187, 166, 107, 224, 57, 218, 113, 151, 51, 85, 166, 79, 68, 35, 220, 192, 16, 119, 34, 97, 141, 242, 26, 15, 17, 128, 78, 162, 150, 4, 137, 84, 103, 109, 136, 111, 23, 21, 44, 146, 216, 136, 227, 109, 222, 72, 122, 43, 248, 117, 209, 88, 29, 74, 219, 55, 76, 21, 74, 49, 6, 70, 97, 214, 233, 137, 187, 158, 148, 230, 38, 168, 242, 49, 104, 166, 156, 70, 212, 45, 60, 164, 48, 89, 208, 196, 188, 136, 220, 80, 16, 73, 152, 55, 220, 192, 74, 47, 240, 175, 196, 31, 244, 87, 232, 158, 85, 172, 248, 132, 78, 125, 201, 123, 126, 110, 234, 236, 207, 145, 64, 85, 27, 64, 147, 164, 164, 245, 241, 84, 40, 189, 166, 42, 99, 78, 175, 10, 133, 25, 224, 51, 11, 217, 164, 235, 137, 60, 56, 116, 44, 5, 81, 76, 121, 144, 226, 136, 55, 227, 142, 100, 50, 100, 197, 187, 63, 188, 121, 16, 58, 77, 4, 254, 117, 218, 207, 39, 135, 153, 52, 49, 83, 204, 17, 165, 165, 130, 175, 168, 54, 71, 180, 230, 22, 128, 10, 203, 6, 157, 69, 36, 203, 21, 124, 185, 104, 128, 200, 138, 140, 114, 134, 23, 13, 194, 96, 105, 55, 190, 3, 37, 82, 191, 81, 176, 37, 48, 53, 23, 53, 144, 169, 150, 196, 34, 10, 116, 74, 68, 208, 247, 126, 197, 24, 181, 33, 112, 207, 216, 238, 84, 94, 128, 14, 193, 161, 50, 92, 98, 210, 98, 111, 170, 223, 180, 248, 28, 1, 111, 150, 214, 230, 235, 63, 122, 43, 142, 80, 211, 178, 30, 224, 246, 246, 159, 205, 220, 229, 243, 231, 0, 158, 138, 178, 24, 16, 117, 92, 200, 149, 153, 155, 78, 31, 100, 137, 172, 157, 7, 195, 35, 42, 211, 199, 218, 9, 146, 197, 183, 156, 159, 143, 230, 221, 201, 86, 113, 142, 87, 38, 155, 50, 114, 179, 199, 112, 152, 77, 187, 59, 11, 187, 105, 71, 43, 197, 241, 223, 188, 193, 241, 71, 47, 243, 64, 77, 141, 14, 0, 188, 76, 77, 224, 1, 74, 6, 210, 171, 16, 99, 210, 102, 208, 31, 191, 38, 127, 255, 135, 140, 231, 46, 102, 56, 33, 170, 103, 41, 225, 122, 112, 166, 20, 32, 141, 148, 169, 103, 151, 158, 17, 228, 220, 152, 105, 221, 219, 152, 38, 247, 253, 96, 96, 183, 55, 95, 164, 183, 47, 185, 237, 62, 35, 58, 25, 42, 115, 128, 145, 102, 110, 38, 185, 198, 191, 76, 85, 150, 171, 213, 160, 228, 70, 48, 101, 73, 114, 24, 204, 34, 25, 116, 103, 173, 128, 128, 161, 6, 168, 105, 59, 28, 78, 115, 100, 41, 28, 107, 176, 112, 160, 168, 164, 198, 244, 207, 252, 196, 54, 153, 96, 210, 176, 214, 156, 38, 86, 18, 231, 91, 250, 179, 17, 129, 213, 70, 190, 14, 117, 232, 38, 229, 244, 5, 194, 162, 86, 209, 61, 249, 73, 221, 21, 7, 156, 118, 191, 197, 221, 200, 2, 49, 75, 158, 173, 93, 6, 231, 157, 245, 230, 9, 137, 142, 247, 224, 240, 2, 125, 17, 190, 80, 16, 36, 151, 29, 41, 247, 75, 180, 215, 169, 23, 215, 129, 29, 234, 97, 52, 100, 182, 161, 254, 207, 237, 184, 14, 63, 226, 92, 59, 118, 216, 20, 245, 139, 65, 241, 156, 90, 238, 211, 85, 89, 80, 56, 157, 0, 51, 163, 214, 127, 74, 189, 136, 44, 125, 47, 241, 223, 158, 135, 244, 209, 88, 52, 147, 204, 223, 82, 28, 150, 143, 109, 229, 49, 116, 136, 198, 96, 46, 234, 85, 183, 193, 212, 125, 163, 237, 249, 226, 102, 200, 165, 199, 10, 160, 169, 122, 183, 195, 239, 81, 178, 37, 18, 177, 245, 56, 184, 227, 165, 70, 253, 124, 122, 15, 210, 159, 195, 174, 116, 149, 35, 239, 98, 108, 165, 163, 40, 21, 240, 18, 148, 121, 62, 2, 222, 8, 34, 131, 91, 21, 108, 76, 184, 2, 210, 27, 96, 32, 190, 65, 178, 211, 59, 45, 64, 84, 193, 177, 97, 56, 148, 113, 40, 136, 82, 57, 151, 160, 123, 179, 74, 160, 135, 122, 43, 217, 82, 41, 74, 205, 79, 102, 213, 142, 75, 86, 99, 67, 173, 57, 235, 71, 237, 60, 52, 193, 131, 169, 34, 41, 109, 99, 103, 81, 10, 20, 161, 255, 149, 193, 149, 174, 231, 81, 117, 6, 66, 8, 0, 33, 179, 134, 182, 123, 208, 26, 228, 14, 21, 45, 122, 75, 249, 49, 24, 136, 157, 119, 137, 251, 219, 2, 233, 30, 131, 87, 195, 158, 111, 21, 220, 25, 202, 82, 183, 109, 15, 236, 48, 153, 136, 118, 223, 156, 210, 160, 134, 246, 62, 62, 51, 25, 183, 95, 243, 166, 168, 143, 166, 179, 96, 187, 104, 38, 123, 8, 54, 113, 167, 110, 8, 157, 188, 229, 117, 20, 144, 43, 54, 147, 111, 122, 12, 81, 222, 219, 193, 51, 45, 22, 131, 59, 128, 19, 15, 237, 231, 204, 211, 41, 247, 224, 208, 159, 115, 238, 109, 1, 246, 61, 238, 238, 14, 130, 5, 2, 71, 132, 68, 165, 108, 24, 155, 87, 130, 170, 167, 232, 63, 74, 117, 101, 100, 223, 133, 6, 87, 142, 47, 21, 52, 174, 83, 251, 137, 155, 97, 225, 6, 142, 51, 33, 230, 77, 25, 140, 13, 211, 112, 160, 40, 2, 9, 155, 64, 53, 75, 104, 142, 114, 128, 90, 157, 46, 241, 145, 93, 230, 60, 231, 204, 64, 189, 140, 158, 51, 218, 222, 102, 103, 134, 223, 66, 224, 79, 28, 98, 163, 195, 92, 69, 164, 54, 187, 200, 62, 61, 165, 246, 241, 69, 127, 227, 122, 95, 61, 247, 166, 149, 34, 118, 131, 192, 31, 247, 180, 24, 206, 174, 208, 103, 139, 100, 170, 230, 96, 90, 141, 102, 137, 93, 27, 254, 229, 95, 177, 165, 255, 190, 218, 205, 89, 255, 68, 83, 51, 158, 240, 162, 39, 154, 2, 96, 11, 37, 105, 14, 199, 145, 65, 36, 149, 128, 225, 214, 72, 57, 70, 216, 163, 215, 105, 126, 119, 37, 168, 6, 67, 139, 201, 176, 131, 131, 30, 55, 17, 112, 87, 208, 185, 174, 159, 73, 174, 97, 91, 218, 172, 188, 226, 110, 255, 83, 47, 90, 52, 140, 193, 12, 176, 151, 154, 168, 2, 40, 239, 239, 58, 226, 193, 68, 43, 36, 40, 110, 215, 31] - ], - "iv": null, - "key": [149, 217, 13, 55, 243, 75, 26, 56, 160, 25, 17, 172, 250, 252, 183, 57, 69, 245, 44, 35, 14, 92, 152, 141], - "modeOfOperation": "ctr", - "plaintext": [ - [253, 38, 133, 123, 51, 255, 203, 169, 34, 219, 8, 63, 94, 211, 41, 240, 135, 25, 94, 148, 91, 176, 255, 62, 15, 127, 182, 1, 89, 121, 68, 229, 122, 155, 59, 136, 0, 149, 182, 213, 94, 205, 217, 139, 175, 195, 232, 188, 168, 109, 85, 3, 59, 27, 56, 91, 12, 240, 9, 253, 76, 58, 23, 205, 197, 220, 83, 184, 254, 15, 196, 208, 183, 164, 154, 144, 131, 137, 246, 23, 88, 157, 92, 26, 74, 44, 40, 11, 143, 55, 223, 102, 237, 36, 25, 89, 33, 99, 199, 184, 125, 106, 90, 200, 115, 53, 76, 181, 193, 70, 114, 253, 51, 90, 123, 113, 230, 108, 114, 230, 54, 145, 29, 76, 150, 24, 139, 92, 148, 170, 203, 38, 145, 163, 190, 26, 45, 247, 66, 133, 105, 62, 88, 147, 93, 245, 73, 69, 214, 36, 231, 18, 209, 114, 100, 12, 230, 97, 86, 102, 157, 151, 30, 193, 43, 80, 82, 108, 186, 30, 115, 143, 183, 101, 26, 172, 215, 130, 160, 178, 88, 220, 162, 229, 76, 149, 223, 127, 95, 245, 110, 84, 107, 239, 185, 23, 144, 154, 180, 121, 42, 152, 224, 31, 193, 209, 105, 5, 219, 116, 198, 243, 250, 87, 23, 245, 75, 100, 220, 237, 210, 159, 231, 31, 247, 40, 136, 65, 135, 68, 198, 111, 74, 44, 125, 16, 253, 178, 63, 190, 52, 31, 187, 243, 107, 94, 63, 66, 87, 143, 36, 254, 162, 146, 143, 91, 163, 87, 145, 160, 233, 45, 18, 192, 81, 221, 15, 25, 207, 159, 34, 101, 243, 121, 22, 81, 143, 82, 65, 62, 144, 115, 24, 166, 211, 228, 45, 15, 193, 136, 26, 224, 87, 95, 137, 118, 246, 15, 152, 43, 112, 13, 225, 16, 195, 238, 50, 174, 254, 191, 136, 252, 110, 183, 212, 213, 174, 65, 60, 61, 208, 125, 87, 2, 169, 12, 83, 161, 66, 138, 145, 68, 93, 149, 215, 224, 136, 74, 153, 149, 2, 121, 225, 20, 122, 174, 179, 105, 188, 195, 182, 62, 128, 253, 182, 116, 245, 183, 62, 79, 239, 75, 94, 31, 5, 98, 9, 45, 72, 39, 234, 137, 64, 67, 23, 202, 231, 70, 84, 255, 208, 210, 217, 203, 51, 99, 98, 217, 162, 7, 50, 145, 145, 236, 197, 90, 248, 99, 213, 128, 223, 226, 205, 21, 138, 136, 197, 158, 21, 4, 36, 23, 129, 165, 62, 169, 16, 95, 180, 105, 7, 231, 208, 57, 55, 19, 99, 142, 100, 214, 104, 65, 84, 252, 98, 86, 40, 175, 21, 16, 56, 14, 240, 14, 101, 75, 196, 77, 224, 238, 248, 3, 232, 184, 187, 136, 12, 23, 184, 119, 17, 26, 175, 222, 238, 67, 222, 13, 79, 41, 2, 122, 25, 230, 35, 237, 23, 141, 178, 107, 248, 232, 110, 16, 120, 230, 61, 91, 89, 234, 4, 194, 96, 186, 69, 186, 145, 134, 43, 158, 127, 200, 141, 164, 126, 84, 0, 144, 50, 82, 134, 78, 244, 70, 96, 3, 43, 230, 203, 177, 187, 226, 22, 163, 167, 206, 228, 140, 85, 113, 147, 20, 29, 253, 139, 202, 205, 61, 19, 34, 154, 24, 239, 72, 240, 119, 114, 198, 218, 190, 186, 114, 143, 29, 146, 16, 43, 30, 116, 93, 193, 114, 176, 2, 245, 71, 222, 238, 231, 249, 27, 12, 26, 234, 140, 240, 18, 209, 17, 25, 110, 212, 73, 46, 164, 173, 50, 73, 31, 36, 208, 231, 0, 249, 8, 90, 9, 217, 125, 60, 31, 24, 250, 145, 134, 201, 74, 181, 181, 195, 145, 249, 110, 63, 7, 64, 157, 76, 102, 9, 220, 55, 149, 96, 135, 250, 36, 125, 176, 14, 128, 161, 68, 62, 187, 171, 58, 4, 11, 28, 245, 104, 118, 44, 10, 16, 40, 177, 33, 160, 177, 89, 142, 119, 243, 24, 180, 119, 169, 87, 152, 107, 222, 111, 165, 189, 81, 136, 187, 37, 109, 38, 55, 116, 68, 111, 225, 175, 215, 45, 58, 17, 46, 98, 18, 121, 211, 107, 148, 196, 243, 25, 36, 106, 134, 118, 158, 52, 254, 163, 243, 249, 63, 58, 20, 67, 65, 39, 221, 40, 188, 111, 129, 76, 204, 92, 41, 186, 178, 238, 74, 175, 169, 98, 4, 100, 251, 224, 175, 144, 149, 88, 104, 91, 196, 152, 147, 125, 223, 75, 69, 64, 177, 241, 89, 6, 83, 160, 182, 229, 201, 41, 9, 121, 63, 6, 30, 98, 208, 61, 84, 7, 141, 83, 181, 108, 217, 74, 1, 46, 92, 53, 213, 75, 62, 10, 3, 182, 182, 88, 66, 4, 37, 242, 29, 238, 2, 44, 236, 110, 53, 85, 52, 86, 5, 65, 99, 217, 184, 56, 55, 192, 130, 40, 107, 121, 115, 232, 149, 158, 23, 176, 116, 54, 34, 0, 170, 243, 27, 48, 178, 189, 248, 88, 108, 20, 183, 231, 167, 69, 126, 55, 175, 24, 26, 100, 247, 89, 206, 253, 56, 110, 140, 28, 182, 225, 32, 37, 241, 133, 206, 131, 226, 165, 67, 204, 133, 126, 206, 229, 212, 54, 30, 82, 151, 70, 42, 53, 129, 204, 236, 67, 112, 202, 58, 27, 204, 145, 173, 171, 26, 98, 21, 24, 59, 20, 118, 201, 150, 196, 86, 176, 126, 65, 250, 27, 45, 48, 121, 229, 4, 85, 66, 230, 209, 28, 128, 166, 204, 25, 101, 124, 219, 214, 233, 93, 230, 216, 191, 17, 157, 188, 158, 42, 198, 230, 200, 181, 218, 161, 0, 237, 38, 95, 161, 13, 246, 7, 74, 78, 90, 63, 90, 229, 206, 190, 199, 243, 160, 224, 244, 200, 242, 185, 145, 137, 73, 19, 44, 249, 8, 153, 204, 217, 248, 243, 44, 97, 129, 155, 84, 38, 13, 117, 32, 232, 90, 88, 153, 147, 239, 235, 197, 123, 82, 181, 246, 221, 73, 65, 153, 199, 128, 122, 246, 213, 58, 179, 220, 225, 40, 38, 33, 234, 185, 96, 25, 209, 211, 241, 210, 74, 77, 205, 246, 80, 230, 90, 201, 89, 70, 181, 190, 40, 51, 60, 32, 167, 90, 228, 211, 26, 59, 161, 151, 33, 97, 30, 12, 73, 254, 4, 173, 228, 202, 160, 240, 71, 56, 227, 14, 49, 51, 195, 149, 119, 178, 113, 58, 29, 205, 22, 132, 189, 94, 184, 70, 216, 254, 113, 219, 117, 51, 175, 122, 178, 233, 253, 24, 239, 192, 56, 62, 224, 87, 165, 126, 134, 238, 228, 62, 89, 131, 100, 235, 190, 175, 91, 188, 20, 67, 100, 73, 61, 131, 48, 169, 254, 9, 106, 50, 155, 237, 244, 98, 234, 122, 15, 62, 170, 98, 93, 10, 188, 33, 201, 68, 162, 152, 137, 25, 229, 231, 244, 188, 215, 131, 190, 10, 199, 127, 104, 201, 144, 9, 188, 83, 194, 17, 23, 242, 241, 148, 122, 190, 85, 126, 12, 90, 77, 130, 97, 185, 188, 147, 171, 168, 185, 59, 152, 120, 207, 159, 95, 246, 139, 161, 94, 172, 40, 20, 173, 26, 117, 74, 110, 231, 252, 149, 35, 92, 2, 83, 104, 215, 198, 226, 249, 104, 128, 163, 184, 19, 242, 27, 51, 201, 31, 151, 66, 192, 162, 124, 250, 184, 229, 76, 193, 167, 238, 157, 30, 32, 140, 139, 86, 195, 125, 239, 81, 44, 211, 195, 234, 241, 182, 3, 242, 2, 62, 226, 61, 58, 90, 237, 174, 125, 23, 74, 205, 224, 235, 240, 42, 57, 85, 120, 163, 48, 165, 41, 104, 46, 91, 73, 3, 228, 243, 78, 23, 40, 13, 162, 192, 193, 47, 250, 190, 244, 158, 129, 128, 250, 246, 118, 148, 113, 198, 223, 232, 15, 143, 127, 110, 219, 155, 40, 20, 141, 196, 3, 64, 94, 210, 199, 246, 164, 128, 131, 158, 82, 228, 57, 146, 63, 198, 228, 86, 240, 101, 141, 146, 205, 32, 236, 215, 1, 115, 203, 157, 42, 243, 86, 73, 214, 153, 30, 34, 19, 52, 107, 59, 236, 197, 80, 148, 109, 201, 41, 252, 247, 112, 40, 176, 78, 191, 127, 213, 199, 14, 117, 77, 182, 218, 14, 180, 124, 48, 244, 76, 213, 114, 122, 25, 112, 115, 223, 123, 44, 216, 211, 51, 94, 76, 245, 250, 119, 139, 11, 120, 100, 84, 145, 104, 70, 230, 86, 78, 112, 72, 113, 95, 42, 112, 156, 102, 124, 196, 226, 81, 231, 115, 137, 76, 225, 19, 153, 15, 187, 93, 126, 13, 66, 69, 63, 219, 7, 160, 157, 84, 73, 44, 189, 211, 46, 187, 22, 9, 114, 71, 10, 119, 97, 151, 100, 52, 39, 150, 159, 134, 232, 132, 125, 253, 204, 38, 137, 162, 19, 133, 210, 181, 151, 53, 143, 169, 45, 85, 223, 44, 170, 160, 120, 95, 31, 40, 62, 40, 180, 17, 123, 120, 195, 8, 67, 38, 67, 107, 57, 125, 227, 127, 71, 191, 159, 254, 141, 151, 255, 254, 101, 105, 104, 245, 165, 84, 84, 164, 163, 2, 18, 48, 45, 212, 228, 126, 133, 228, 82, 128, 224, 95, 200, 42, 162, 122, 189, 230, 24, 236, 192, 138, 152, 239, 37, 79, 192, 233, 241, 192, 166, 225, 194, 139, 155, 116, 15, 83, 80, 217, 19, 165, 191, 32, 208, 113, 54, 49, 70, 38, 85, 0, 42, 192, 58, 138, 95, 96, 227, 193, 195, 177, 252, 238, 65, 180, 154, 138, 116, 90, 179, 111, 122, 207, 65, 217, 88, 24, 233, 77, 57, 173, 8, 2, 223, 84, 77, 174, 226, 119, 242, 99, 197, 126, 195, 1, 226, 2, 102, 150, 41, 47, 254, 39, 16, 203, 245, 14, 91, 6, 84, 213, 206, 195, 170, 10, 244, 60, 231, 232, 33, 148, 121, 14, 129, 57, 23, 98, 201, 180, 179, 36, 12, 121, 81, 240, 81, 107, 34, 227, 230, 200, 18, 181, 230, 235, 11, 193, 111, 207, 144, 234, 6, 67, 51, 165, 236, 55, 1, 189, 111, 178, 121, 132, 158, 121, 111, 45, 4, 215, 60, 248, 4, 72, 100, 199, 20, 85, 239, 140, 109, 175, 118, 91, 98, 48, 25, 135, 54, 166, 208, 37, 245, 141, 140, 36, 152, 125, 125, 210, 52, 60, 240, 25, 132, 205, 30, 73, 196, 87, 13, 92, 215, 116, 249, 6, 138, 33, 127, 220, 103, 35, 238, 181, 202, 232, 255, 76, 116, 44, 96, 203, 74, 238, 184, 147, 152, 94, 214, 235, 214, 87, 144, 52, 43, 20, 105, 63, 229, 161, 161, 41, 207, 173, 244, 194, 99, 240, 154, 245, 145, 165, 176, 243, 162, 56, 28, 137, 194, 64, 124, 220, 151, 183, 196, 198, 19, 65, 89, 235, 36, 187, 140, 223, 181, 85, 174, 131, 232, 69, 230, 223, 51, 96, 184, 191, 24, 150, 182, 63, 170, 188, 111, 49, 54, 151, 89, 152, 98, 215, 108, 36, 22, 196, 42, 244, 220, 68, 127, 183, 81, 10, 151, 111, 228, 150, 88, 145, 67, 235, 150, 224, 131, 126, 123, 122, 141, 148, 140, 209, 98, 3, 111, 146, 154, 68, 63, 232, 66, 20, 95, 197, 16, 93, 144, 207, 126, 66, 194, 94, 93, 246, 91, 72, 90, 220, 20, 4, 130, 15, 9, 115, 243, 104, 186, 11, 167, 168, 122, 239, 82, 168, 66, 0, 161, 137, 195, 75, 244, 71, 236, 63, 124, 210, 87, 18, 116, 206, 114, 147, 107, 110, 103, 204, 159, 24, 250, 213, 41, 243, 24, 8, 103, 108, 109, 196, 196, 35, 51, 239, 54, 7, 176, 135, 81, 252, 83, 18, 9, 78, 6, 88, 23, 35, 74, 71, 212, 99, 181, 232, 77, 228, 47, 17, 191, 214, 51, 142, 23, 128, 191, 20, 74, 114, 104, 120, 143, 223, 63, 33, 128, 159, 210, 107, 130, 183, 239, 145, 201, 49, 32, 71, 107, 172, 145, 17, 155, 145, 234, 79, 97, 119, 131, 206, 236, 40, 163, 125, 166, 84, 63, 175, 60, 140, 241, 226, 82, 64, 50, 190, 5, 111, 44, 47, 190, 177, 29, 165, 57, 17, 231, 100, 238, 80, 176, 138, 199, 96, 44, 20, 222, 235, 236, 144, 64, 128, 47, 193, 195, 249, 80, 232, 217, 15, 129, 6, 202, 241, 181, 17, 28, 36, 233, 195, 145, 85, 198, 19, 203, 232, 231, 151, 247, 224, 191, 52, 87, 46, 241, 26, 124, 78, 107, 210, 53, 16, 234, 201, 135, 182, 6, 3, 34, 226, 33, 192, 228, 230, 197, 107, 24, 203, 89, 196, 60, 156, 5, 253, 250, 158, 71, 175, 103, 4, 81, 225, 145, 50, 51, 121, 188, 185, 240, 102, 120, 246, 65, 74, 209, 88, 181, 162, 3, 216, 114, 148, 236, 46, 72, 59, 38, 91, 66, 210, 144, 38, 62, 229, 195, 105, 37, 218, 47, 32, 86, 217, 91, 236, 178, 6, 149, 118, 148, 12, 55, 243, 252, 74, 120, 1, 246, 224, 89, 211, 57, 253, 179, 149, 110, 52, 212, 179, 233, 28, 219, 94, 48, 59, 214, 128, 11, 148, 83, 29, 11, 248, 49, 103, 16, 55, 43, 180, 140, 85, 235, 97, 92, 149, 185, 225, 191, 229, 22, 169, 88, 171, 83, 202, 84, 35, 188, 248, 30, 163, 250, 251, 201, 31, 102, 67, 231, 74, 8, 175, 56, 241, 198, 157, 102, 250, 164, 253, 26, 64, 149, 221, 74, 232, 215, 235, 43, 43, 211, 32, 13, 40, 228, 138, 4, 253, 208, 215, 71, 63, 255, 177, 87, 175, 238, 53, 201, 108, 85, 97, 27, 162, 31, 239, 93, 75, 136, 214, 143, 193, 125, 38, 79, 249, 49, 193, 180, 250, 26, 169, 211, 149, 67, 80, 210, 85, 140, 33, 43, 240, 167, 60, 90, 209, 190, 45, 106, 185, 151, 158, 129, 50, 232, 131, 200, 55, 8, 68, 152, 239, 128, 128, 250, 177, 119, 154, 142, 207, 106, 196, 44, 31, 232, 57, 40, 181, 207, 27, 242, 236, 14, 70, 184, 97, 44, 170, 228, 44, 202, 48, 130, 95, 205, 192, 44, 35, 23, 74, 2, 90, 76, 169, 232, 143, 190, 78, 243, 237, 193, 89, 107, 255, 164, 34, 33, 107, 191, 146, 30, 183, 140, 8, 245, 124, 181, 0, 82, 208, 176, 78, 148, 5, 35, 100, 209, 83, 136, 194, 84, 70, 174, 167, 18, 205, 155, 71, 69, 252, 104, 161, 198, 51, 106, 157, 121, 210, 64, 198, 41, 184, 226, 100, 22, 176, 166, 228, 188, 226, 66, 14, 67, 197, 176, 165, 161, 235, 119, 4, 246, 10, 59, 103, 54, 187, 139, 113, 141, 131, 112, 219, 160, 163, 34, 85, 189, 162, 64, 108, 146, 162, 86, 84, 210, 110, 4, 38, 245, 15, 222, 128, 174, 27, 77, 197, 178, 37, 203, 134, 107, 96, 59, 177, 174, 105, 186, 53, 5, 203, 81, 31, 29, 190, 9, 171, 118, 174, 90, 194, 194, 77, 72, 145, 127, 69, 183, 163, 204, 60, 234, 251, 95, 140, 245, 235, 204, 247, 51, 229, 17, 52, 124, 236, 48, 234, 159, 50, 143, 62, 177, 244, 106, 5, 234, 170, 69, 137, 59, 245, 177, 177, 177, 187, 45, 130, 153, 195, 36, 62, 67, 16, 202, 255, 105, 161, 235, 65, 83, 89, 135, 46, 56, 68, 25, 118, 235, 40, 170, 210, 14, 29, 209, 248, 136, 132, 53, 55, 135, 9, 67, 105, 17, 94, 111, 117, 154, 103, 244, 154, 138, 239, 51, 22, 120, 9, 117, 13, 19, 216, 154, 107, 225, 161, 115, 27, 179, 185, 163, 64, 217, 60, 75, 192, 140, 66, 41, 23, 195, 165, 189, 230, 17, 133, 31, 194, 101, 200, 116, 112, 60, 147, 235, 90, 132, 143, 205, 37, 148, 117, 117, 209, 233, 246, 154, 45, 3, 19, 188, 19, 247, 216, 64, 251, 36, 5, 226, 67, 111, 170, 144, 147, 188, 82, 22, 34, 209, 180, 18, 52, 18, 78, 172, 78, 24, 76, 26, 233, 82, 38, 168, 67, 244, 119, 167, 249, 104, 230, 162, 117, 118, 4, 39, 205, 207, 16, 177, 85, 136, 105, 49, 232, 144, 217, 225, 7, 214, 124, 8, 55, 95, 147, 179, 146, 3, 118, 194, 127, 52, 205, 77, 110, 18, 226, 32, 52, 173, 173, 104, 49, 149, 31, 21, 184, 82, 84, 157, 54, 36, 8, 28, 180, 246, 133, 248, 168, 98, 69, 151, 234, 108, 5, 178, 170, 55, 249, 123, 216, 145, 55, 208, 12, 241, 89, 143, 94, 138, 55, 68, 191, 28, 103, 215, 82, 193, 14, 118, 31, 152, 80, 78, 184, 18, 38, 236, 67, 162, 214, 102, 209, 37, 113, 230, 104, 169, 92, 164, 75, 44, 179, 224, 240, 11, 250, 87, 202, 131, 127, 247, 5, 51, 249, 59, 59, 161, 159, 186, 241, 237, 69, 72, 184, 88, 55, 110, 154, 231, 60, 233, 118, 14, 177, 232, 156, 44, 246, 216, 84, 143, 169, 73, 242, 39, 41, 133, 166, 141, 199, 169, 89, 86, 220, 57, 154, 21, 199, 123, 217, 119, 208, 190, 87, 214, 208, 89, 164, 24, 193, 125, 31, 90, 242, 235, 199, 86, 64, 255, 73, 234, 126, 177, 22, 198, 220, 67, 18, 60, 10, 28, 81, 185, 68, 124, 172, 228, 119, 214, 249, 30, 91, 148, 125, 143, 12, 183, 141, 202, 116, 138, 241, 162, 220, 131, 50, 228, 128, 112, 31, 111, 208, 33, 110, 12, 105, 92, 89, 241, 33, 76, 42, 187, 226, 77, 185, 99, 151, 62, 82, 165, 219, 219, 207, 76, 2, 64, 193, 144, 63, 191, 226, 130, 254, 120, 174, 211, 31, 70, 200, 197, 255, 117, 166, 139, 232, 105, 59, 58, 183, 43, 248, 247, 19, 23, 104, 68, 130, 31, 180, 202, 247, 178, 253, 202, 66, 59, 86, 164, 21, 217, 83, 81, 108, 111, 3, 8, 55, 73, 173, 206, 107, 148, 119, 139, 23, 231, 205, 150, 95, 18, 230, 117, 114, 136, 235, 2, 130, 254, 70, 126, 94, 68, 94, 184, 133, 248, 69, 48, 21, 119, 152, 147, 213, 211, 189, 221, 233, 228, 200, 76, 161, 5, 184, 110, 177, 157, 79, 121, 166, 86, 36, 174, 1, 236, 50, 130, 52, 7, 90, 204, 64, 15, 227, 79, 214, 192, 25, 21, 210, 182, 17, 100, 203, 212, 247, 214, 51, 64, 165, 30, 199, 188, 49, 27, 240, 85, 187, 249, 193, 81, 111, 169, 228, 37, 14, 179, 65, 4, 186, 124, 225, 120, 21, 119, 114, 133, 213, 220, 135, 4, 247, 175, 144, 70, 39, 180, 239, 214, 122, 125, 57, 43, 56, 152, 217, 51, 241, 210, 138, 165, 127, 242, 159, 241, 13, 20, 128, 153, 149, 83, 233, 13, 82, 132, 155, 193, 191, 104, 133, 110, 137, 91, 169, 44, 57, 136, 172, 238, 245, 73, 73, 175, 107, 211, 131, 79, 204, 77, 184, 24, 206, 21, 28, 210, 242, 37, 203, 29, 179, 178, 122, 184, 27, 102, 4, 109, 143, 167, 212, 171, 53, 135, 12, 41, 23, 20, 46, 249, 172, 192, 207, 244, 54, 54, 142, 252, 15, 136, 77, 12, 27, 18, 198, 117, 93, 171, 103, 14, 198, 46, 98, 22, 45, 45, 231, 171, 244, 152, 253, 173, 199, 238, 95, 145, 13, 203, 189, 73, 34, 211, 68, 124, 240, 192, 196, 78, 40, 201, 58, 129, 226, 84, 12, 111, 63, 50, 38, 138, 136, 143, 104, 80, 3, 94, 23, 32, 58, 241, 110, 227, 141, 228, 54, 13, 105, 169, 233, 132, 96, 26, 133, 72, 124, 8, 55, 14, 161, 52, 99, 32, 208, 178, 32, 220, 75, 159, 182, 249, 210, 65, 72, 167, 60, 69, 193, 144, 185, 56, 240, 23, 12, 0, 60, 252, 66, 28, 43, 199, 142, 116, 52, 168, 228, 100, 190, 252, 131, 248, 136, 27, 246, 155, 124, 147, 136, 100, 236, 38, 220, 249, 2, 21, 27, 224, 249, 194, 73, 151, 216, 209, 201, 96, 7, 47, 105, 212, 10, 212, 85, 227, 186, 92, 127, 138, 148, 228, 146, 73, 181, 37, 112, 156, 79, 208, 151, 197, 34, 146, 88, 102, 165, 180, 204, 13, 237, 66, 72, 232, 123, 212, 42, 29, 33, 127, 243, 211, 143, 100, 233, 242, 82, 208, 163, 66, 55, 139, 203, 94, 171, 75, 124, 3, 241, 157, 15, 163, 71, 237, 40, 111, 228, 102, 79, 110, 4, 236, 184, 165, 21, 1, 45, 45, 94, 138, 79, 126, 214, 28, 135, 12, 217, 125, 137, 177, 41, 234, 186, 163, 229, 133, 52, 34, 152, 45, 113, 216, 128, 146, 90, 209, 70, 39, 111, 118, 167, 251, 212, 150, 238, 23, 216, 114, 178, 72, 150, 237, 58, 60, 245, 251, 128, 154, 8, 164, 107, 240, 42, 181, 185, 190, 164, 231, 215, 96, 178, 124, 45, 241, 131, 233, 131, 188, 19, 148, 80, 239, 124, 141, 227, 205, 0, 0, 246, 145, 16, 238, 49, 43, 64, 123, 151, 108, 106, 241, 195, 225, 111, 128, 249, 6, 199, 46, 108, 199, 146, 97, 27, 65, 165, 208, 232, 35, 206, 73, 236, 91, 209, 20, 225, 195, 114, 199, 74, 19, 27, 208, 62, 27, 123, 174, 131, 75, 255, 9, 168, 118, 60, 247, 87, 146, 176, 67, 205, 180, 92, 195, 64, 11, 32, 69, 199, 81, 186, 111, 88, 237, 18, 204, 87, 206, 90, 164, 121, 41, 20, 63, 66, 47, 229, 238, 160, 153, 201, 1, 44, 57, 34, 82, 216, 7, 246, 32, 26, 231, 67, 138, 230, 42, 151, 180, 218, 154, 57, 183, 247, 99, 15, 252, 36, 146, 218, 235, 34, 35, 30, 40, 170, 174, 91, 101, 166, 91, 150, 118, 112, 231, 246, 200, 112, 140, 105, 88, 20, 199, 252, 160, 225, 38, 112, 99, 197, 109, 218, 217, 202, 61, 207, 150, 232, 182, 32, 227, 208, 13, 63, 188, 48, 197, 4, 185, 28, 54, 131, 147, 123, 142, 253, 185, 17, 232, 14, 240, 6, 88, 174, 241, 223, 135, 124, 242, 233, 50, 220, 25, 156, 147, 26, 5, 4, 227, 130, 48, 113, 90, 2, 171, 33, 155, 95, 17, 28, 191, 255, 196, 112, 141, 155, 247, 120, 156, 77, 17, 46, 203, 51, 170, 26, 135, 208, 184, 61, 42, 100, 132, 35, 191, 74, 245, 245, 209, 140, 70, 5, 224, 49, 228, 4, 196, 207, 71, 74, 24, 168, 253, 186, 110, 165, 54, 207, 27, 137, 130, 58, 20, 250, 226, 143, 249, 150, 20, 141, 97, 46, 48, 81, 190, 202, 21, 246, 211, 164, 210, 169, 26, 253, 137, 42, 52, 206, 91, 247, 41, 24, 161, 206, 131, 103, 138, 61, 84, 249, 218, 178, 41, 142, 255, 147, 51, 93, 35, 149, 77, 8, 146, 114, 221, 187, 104, 12, 194, 119, 169, 19, 114, 180, 138, 58, 250, 65, 143, 1, 166, 140, 194, 0, 134, 113, 85, 58, 18, 57, 146, 28, 93, 7, 51, 153, 48, 221, 101, 26, 8, 249, 153, 160, 109, 27, 155, 94, 176, 137, 164, 14, 159, 35, 194, 241, 91, 247, 217, 190, 196, 152, 159, 196, 207, 17, 160, 195, 122, 53, 192, 237, 140, 94, 161, 240, 7, 101, 19, 81, 1, 121, 105, 36, 145, 142, 186, 39, 241, 245, 174, 10, 97, 44, 105, 190, 152, 88, 195, 79, 81, 75, 253, 232, 236, 222, 78, 29, 207, 117, 127, 62, 15, 76, 139, 41, 183, 194, 93, 9, 24, 147, 167, 22, 12, 148, 98, 195, 15, 236, 253, 55, 22, 215, 1, 186, 221, 225, 228, 73, 184, 114, 238, 91, 124, 41, 40, 50, 56, 2, 141, 189, 195, 217, 82, 45, 12, 12, 57, 224, 207, 21, 55, 73, 155, 23, 142, 123, 64, 230, 140, 218, 177, 146, 0, 6, 7, 195, 133, 91, 191, 208, 107, 153, 129, 121, 77, 10, 253, 78, 4, 134, 129, 47, 239, 228, 250, 217, 175, 55, 5, 156, 189, 219, 197, 181, 22, 30, 104, 188, 119, 195, 140, 173, 238, 15, 38, 227, 141, 35, 40, 12, 142, 185, 72, 112, 205, 132, 156, 56, 249, 161, 43, 208, 204, 33, 123, 115, 55, 205, 187, 65, 243, 126, 242, 25, 188, 217, 138, 210, 13, 63, 71, 129, 169, 231, 167, 121, 183, 179, 51, 7, 81, 152, 247, 56, 195, 226, 154, 71, 133, 194, 202, 254, 49, 64, 40, 194, 214, 65, 129, 225, 103, 180, 141, 59, 113, 253, 33, 201, 58, 122, 61, 207, 79, 141, 74, 88, 152, 203, 109, 128, 22, 32, 168, 107, 69, 186, 202, 42, 184, 170, 96, 194, 180, 43, 218, 4, 7, 228, 192, 225, 119, 192, 27, 207, 235, 86, 244, 7, 80, 6, 128, 173, 23, 25, 86, 56, 38, 27, 243, 94, 75, 115, 191, 190, 109, 101, 155, 224, 130, 45, 174, 38, 138, 135, 85, 178, 98, 250, 117, 152, 155, 172, 8, 177, 43, 241, 147, 18, 228, 37, 133, 46, 220, 11, 76, 92, 40, 219, 182, 236, 223, 1, 115, 121, 169, 227, 126, 129, 170, 42, 96, 105, 0, 98, 178, 225, 48, 155, 248, 50, 63, 14, 44, 20, 150, 118, 170, 194, 175, 66, 184, 58, 20, 106, 139, 43, 187, 128, 9, 188, 169, 92, 52, 125, 12, 2, 58, 137, 145, 12, 21, 189, 25, 210, 151, 9, 125, 131, 14, 232, 62, 122, 103, 126, 37, 145, 211, 108, 151, 141, 174, 166, 152, 114, 50, 151, 193, 93, 27, 131, 251, 92, 61, 209, 162, 52, 147, 13, 248, 134, 74, 40, 34, 122, 121, 231, 153, 50, 146, 78, 129, 5, 58, 238, 44, 26, 88, 198, 250, 170, 109, 177, 246, 253, 226, 233, 181, 94, 248, 101, 215, 0, 69, 170, 24, 54, 25, 101, 159, 165, 238, 91, 227, 89, 4, 14, 236, 224, 75, 23, 98, 90, 51, 6, 6, 31, 25, 237, 150, 205, 238, 100, 197, 104, 127, 57, 145, 126, 98, 57, 73, 66, 78, 208, 63, 107, 113, 172, 131, 160, 244, 102, 211, 149, 81, 140, 22, 57, 129, 113, 89, 20, 164, 163, 57, 105, 115, 79, 106, 248, 8, 199, 233, 103, 227, 138, 122, 104, 232, 39, 82, 191, 15, 53, 237, 176, 0, 185, 112, 139, 88, 237, 165, 219, 52, 224, 24, 158, 1, 83, 93, 101, 11, 178, 194, 37, 150, 162, 12, 55, 148, 220, 44, 76, 236, 236, 19, 132, 108, 31, 204, 94, 109, 101, 122, 159, 2, 119, 66, 107, 240, 217, 208, 1, 235, 12, 37, 105, 59, 155, 245, 183, 205, 46, 146, 62, 139, 11, 186, 145, 170, 233, 134, 175, 97, 116, 5, 44, 143, 154, 149, 156, 242, 24, 44, 109, 32, 59, 131, 164, 93, 56, 129, 231, 235, 183, 113, 160, 193, 213, 112, 11, 131, 161, 7, 218, 105, 45, 249, 194, 252, 102, 131, 220, 203, 198, 226, 117, 157, 80, 247, 89, 215, 0, 175, 68, 179, 190, 124, 103, 22, 0, 110, 36, 85, 35, 130, 155, 193, 211, 202, 61, 166, 100, 32, 129, 102, 10, 72, 89, 179, 18, 237, 209, 112, 24, 118, 22, 205, 156, 187, 246, 152, 114, 188, 153, 17, 228, 13, 169, 180, 124, 104, 14, 43, 75, 174, 64, 34, 51, 244, 52, 113, 102, 250, 24, 194, 242, 237, 94, 55, 212, 26, 113, 189, 167, 94, 78, 26, 12, 20, 178, 84, 56, 161, 81, 36, 226, 65, 179, 231, 100, 180, 255, 158, 46, 112, 75, 68, 190, 31, 160, 2, 119, 64, 63, 255, 217, 195, 66, 104, 70, 226, 76, 98, 58, 44, 149, 116, 248, 252, 204, 123, 215, 92, 84, 204, 7, 217, 124, 253, 247, 5, 32, 51, 228, 119, 148, 255, 148, 180, 153, 151, 135, 50, 118, 63, 54, 88, 81, 205, 225, 48, 58, 126, 153, 28, 245, 62, 149, 93, 100, 40, 148, 135, 237, 22, 30, 108, 30, 201, 243, 44, 182, 192, 130, 60, 100, 192, 104, 115, 249, 37, 253, 189, 64, 122, 7, 238, 191, 110, 159, 225, 72, 164, 223, 18, 205, 79, 19, 206, 225, 69, 219, 241, 49, 186, 49, 193, 201, 183, 182, 220, 47, 207, 122, 144, 88, 95, 167, 116, 55, 241, 37, 162, 162, 67, 237, 13, 188, 10, 164, 118, 120, 231, 124, 11, 81, 103, 158, 34, 42, 99, 40, 170, 164, 132, 189, 8, 225, 138, 129, 129, 156, 101, 86, 186, 150, 166, 104, 67, 118, 183, 159, 159, 210, 72, 96, 138, 196, 221, 12, 218, 148, 21, 39, 17, 43, 6, 186, 8, 175, 113, 166, 191, 170, 116, 228, 247, 175, 187, 94, 170, 6, 76, 91, 18, 200, 65, 241, 209, 133, 117, 100, 51, 255, 114, 19, 172, 143, 130, 112, 21, 43, 130, 90, 61, 203, 233, 51, 154, 207, 140, 197, 33, 68, 3, 215, 158, 115, 169, 2, 70, 152, 174, 164, 56, 74, 221, 59, 234, 60, 92, 95, 243, 208, 9, 203, 238, 113, 30, 251, 42, 72, 200, 34, 27, 107, 241, 50, 255, 106, 86, 87, 104, 168, 247, 59, 154, 126, 38, 145, 244, 128, 63, 66, 22, 145, 50, 60, 12, 246, 60, 217, 41, 74, 55, 219, 178, 242, 187, 202, 95, 87, 228, 94, 254, 224, 119, 45, 218, 42, 69, 179, 22, 246, 202, 160, 242, 251, 128, 98, 206, 65, 160, 97, 45, 187, 103, 87, 171, 23, 11, 65, 90, 176, 186, 246, 40, 140, 23, 33, 193, 140, 156, 175, 27, 175, 35, 249, 216, 129, 248, 189, 41, 172, 81, 189, 36, 210, 9, 182, 12, 37, 192, 74, 53, 175, 45, 95, 31, 40, 237, 159, 166, 29, 55, 14, 46, 31, 94, 104, 239, 73, 250, 18, 204, 237, 110, 193, 185, 220, 94, 64, 160, 68, 86, 115, 19, 98, 236, 3, 70, 25, 237, 87, 151, 154, 189, 245, 194, 66, 57, 217, 158, 239, 17, 125, 56, 231, 113, 97, 27, 53, 168, 139, 202, 143, 246, 177, 102, 94, 100, 186, 214, 222, 230, 218, 242, 63, 184, 3, 181, 145, 165, 7, 190, 245, 250, 222, 169, 115, 65, 2, 124, 40, 1, 134, 178, 0, 110, 192, 124, 18, 142, 167, 48, 145, 158, 167, 42, 209, 183, 129, 148, 43, 200, 237, 159, 62, 189, 135, 162, 158, 241, 231, 251, 64, 36, 68, 140, 44, 65, 210, 39, 231, 61, 247, 210, 197, 156, 97, 95, 205, 40, 99, 62, 139, 151, 255, 206, 100, 232, 136, 26, 121, 181, 33, 45, 134, 30, 63, 164, 27, 37, 1, 246, 81, 23, 242, 195, 168, 238, 146, 72, 234, 115, 65, 218, 217, 241, 167, 196, 36, 117, 215, 157, 157, 11, 186, 39, 203, 153, 1, 183, 160, 13, 108, 18, 83, 142, 104, 82, 251, 48, 124, 231, 34, 175, 30, 122, 106, 0, 214, 237, 59, 130, 241, 149, 204, 220, 33, 239, 55, 137, 63, 102, 105, 229, 69, 18, 130, 143, 224, 180, 1, 18, 120, 167, 212, 4, 113, 7, 128, 76, 55, 202, 217, 87, 107, 20, 150, 1, 119, 15, 33, 147, 80, 246, 117, 15, 88, 150, 66, 226, 171, 116, 99, 233, 106, 244, 11, 108, 177, 107, 36, 81, 20, 247, 63, 69, 105, 120, 150, 46, 147, 154, 218, 222, 84, 49, 169, 131, 197, 248, 146, 223, 72, 204, 153, 201, 163, 115, 234, 31, 35, 187, 94, 212, 125, 77, 14, 174, 131, 180, 138, 73, 251, 64, 172, 52, 224, 59, 72, 80, 60, 165, 147, 173, 143, 77, 93, 25, 187, 44, 164, 201, 71, 72, 229, 76, 164, 144, 149, 228, 79, 195, 87, 168, 238, 68, 41, 228, 64, 55, 100, 47, 138, 179, 253, 239, 71, 219, 42, 216, 72, 21, 70, 6, 35, 126, 179, 36, 114, 90, 162, 120, 17, 51, 73, 185, 217, 64, 35, 143, 47, 129, 59, 208, 192, 236, 234, 253, 186, 165, 48, 148, 125, 47, 145, 187, 158, 204, 183, 89, 102, 205, 205, 20, 225, 154, 166, 26, 210, 233, 144, 198, 253, 218, 126, 27, 46, 108, 104, 129, 19, 153, 239, 18, 3, 4, 195, 131, 206, 16, 237, 41, 58, 239, 233, 36, 202, 205, 196, 108, 0, 202, 183, 160, 57, 38, 247, 209, 145, 234, 35, 242, 150, 38, 164, 191, 223, 41, 85, 151, 86, 210, 188, 207, 199, 83, 131, 109, 116, 247, 101, 194, 152, 114, 215, 212, 68, 86, 15, 242, 231, 250, 55, 120, 118, 87, 156, 176, 159, 248, 62, 213, 173, 195, 7, 110, 61, 154, 85, 255, 78, 36, 192, 104, 234, 91, 77, 115, 100, 114, 169, 1, 39, 104, 153, 208, 223, 60, 52, 176, 58, 169, 60, 70, 182, 60, 127, 113, 182, 170, 203, 113, 215, 111, 63, 76, 69, 110, 217, 152, 34, 178, 98, 253, 97, 124, 166, 208, 26, 55, 80, 130, 57, 172, 19, 169, 224, 24, 24, 37, 15, 70, 116, 38, 161, 11, 97, 209, 53, 231, 116, 46, 79, 251, 140, 68, 210, 175, 36, 73, 172, 248, 91, 17, 249, 177, 59, 196, 38, 196, 67, 32, 10, 49, 251, 191, 250, 86, 230, 21, 65, 157, 176, 177, 30, 9, 83, 184, 95, 163, 244, 100, 35, 32, 228, 164, 181, 236, 126, 113, 9, 4, 187, 107, 50, 109, 101, 39, 56, 241, 224, 36, 231, 179, 187, 101, 135, 61, 10, 191, 47, 52, 218, 242, 196, 237, 140, 173, 136, 77, 92, 252, 61, 91, 253, 235, 154, 167, 224, 247, 207, 188, 117, 107, 15, 142, 220, 172, 143, 83, 116, 148, 99, 9, 119, 56, 249, 191, 206, 17, 61, 154, 109, 153, 216, 227, 148, 169, 79, 20, 147, 120, 67, 99, 10, 174, 215, 30, 49, 118, 81, 215, 170, 205, 106, 169, 17, 23, 117, 223, 253, 188, 183, 241, 236, 151, 36, 0, 21, 190, 34, 76, 195, 101, 111, 252, 98, 64, 10, 173, 80, 61, 76, 19, 127, 217, 99, 166, 78, 25, 40, 51, 161, 142, 176, 45, 137, 86, 18, 119, 149, 199, 77, 76, 45, 45, 107, 167, 175, 73, 149, 196, 154, 127, 204, 8, 208, 191, 110, 106, 44, 48, 149, 206, 248, 122, 127, 204, 246, 166, 48, 229, 201, 148, 180, 132, 140, 147, 236, 123, 236, 119, 148, 209, 124, 152, 55, 145, 168, 151, 135, 87, 206, 201, 9, 248, 112, 131, 158, 243, 68, 233, 33, 184, 178, 209, 115, 246, 20, 46, 222, 89, 28, 131, 239, 64, 46, 230, 135, 215, 12, 139, 220, 111, 107, 96, 23, 161, 60, 67, 195, 74, 107, 134, 221, 36, 44, 169, 232, 71, 43, 80, 17, 175, 49, 129, 255, 154, 141, 172, 12, 108, 105, 46, 140, 88, 177, 247, 179, 143, 149, 117, 83, 157, 10, 191, 172, 235, 212, 20, 139, 144, 143, 69, 11, 65, 244, 69, 46, 234, 76, 119, 131, 14, 176, 226, 81, 171, 191, 247, 192, 114, 185, 178, 40, 15, 32, 15, 62, 205, 207, 225, 113, 234, 56, 218, 178, 58, 13, 5, 218, 171, 1, 120, 216, 99, 29, 110, 202, 35, 60, 230, 1, 105, 100, 201, 219, 58, 234, 151, 242, 205, 166, 145, 101, 158, 132, 205, 167, 232, 160, 228, 6, 3, 193, 13, 233, 207, 192, 242, 131, 104, 31, 107, 55, 203, 168, 26, 105, 101, 66, 45, 242, 241, 93, 109, 143, 49, 29, 2, 69, 124, 25, 208, 179, 14, 168, 229, 94, 30, 106, 193, 207, 42, 230, 48, 149, 157, 117, 252, 29, 12, 83, 77, 31, 31, 87, 28, 158, 55, 112, 249, 79, 71, 61, 181, 20, 226, 59, 176, 37, 90, 133, 134, 178, 44, 204, 93, 43, 1, 51, 40, 59, 229, 216, 20, 157, 94, 59, 115, 64, 114, 194, 72, 210, 62, 53, 191, 216, 60, 39, 109, 162, 137, 185, 255, 163, 4, 59, 11, 9, 226, 90, 198, 46, 224, 92, 49, 71, 86, 150, 40, 1, 16, 117, 62, 120, 7, 136, 125, 171, 163, 242, 219, 220, 0, 171, 100, 94, 77, 81, 38, 147, 228, 112, 110, 141, 115, 70, 141, 185, 95, 219, 177, 5, 1, 142, 78, 250, 191, 205, 16, 86, 179, 150, 244, 193, 180, 141, 213, 69, 246, 19, 100, 12, 148, 2, 131, 189, 227, 54, 98, 6, 54, 104, 205, 57, 146, 22, 159, 10, 30, 180, 207, 24, 126, 194, 110, 242, 229, 8, 44, 85, 157, 252, 70, 65, 210, 147, 214, 223, 159, 115, 253, 70, 151, 100, 194, 3, 160, 168, 195, 160, 124, 189, 250, 140, 97, 226, 37, 127, 168, 61, 81, 76, 71, 248, 155, 9, 104, 7, 154, 17, 157, 54, 119, 137, 2, 147, 191, 190, 45, 22, 87, 151, 135, 150, 204, 58, 209, 174, 182, 219, 136, 100, 231, 142, 48, 69, 174, 247, 251, 76, 209, 147, 1, 1, 91, 247, 186, 235, 209, 14, 217, 190, 255, 232, 248, 11, 22, 75, 153, 217, 174, 42, 82, 221, 222, 146, 121, 77, 136, 197, 104, 244, 79, 185, 54, 208, 155, 82, 213, 106, 74, 191, 62, 88, 180, 98, 23, 203, 142, 14, 243, 80, 59, 148, 52, 61, 94, 52, 150, 2, 29, 35, 164, 39, 72, 246, 176, 32, 46, 76, 62, 16, 28, 235, 246, 36, 44, 162, 243, 210, 2, 63, 135, 230, 80, 255, 29, 235, 156, 180, 127, 171, 28, 168, 128, 73, 142, 5, 219, 81, 201, 174, 56, 107, 194, 116, 88, 60, 53, 145, 46, 236, 28, 245, 60, 15, 219, 241, 54, 10, 22, 200, 136, 119, 15, 57, 190, 236, 113, 21, 67, 79, 47, 16, 26, 105, 210, 150, 19, 166, 190, 249, 74, 91, 192, 122, 168, 136, 177, 8, 74, 110, 193, 163, 205, 186, 163, 107, 33, 220, 31, 26, 135, 42, 21, 60, 58, 253, 40, 53, 48, 15, 72, 35, 236, 150, 69, 191, 165, 52, 144, 222, 250, 224, 1, 26, 50, 153, 1, 231, 183, 63, 51, 238, 9, 175, 108, 145, 164, 189, 107, 222, 47, 81, 150, 173, 127, 178, 238, 88, 166, 128, 94, 66, 214, 36, 100, 186, 193, 87, 71, 190, 124, 66, 130, 125, 215, 17, 183, 172, 106, 81, 136, 92, 21, 39, 136, 105, 203, 118, 109, 148, 174, 160, 9, 161, 59, 235, 184, 209, 125, 92, 131, 123, 25, 148, 3, 94, 98, 191, 59, 7, 134, 191, 168, 145, 98, 202, 37, 21, 7, 200, 187, 123, 209, 131, 145, 141, 42, 29, 45, 129, 131, 246, 208, 81, 219, 221, 223, 169, 133, 110, 190, 210, 150, 69, 188, 241, 92, 15, 89, 229, 99, 53, 136, 51, 117, 221, 229, 7, 13, 32, 107, 119, 214, 35, 220, 122, 71, 45, 245, 45, 184, 137, 136, 63, 188, 241, 123, 148, 10, 250, 124, 250, 134, 100, 68, 220, 201, 15, 64, 230, 117, 240, 36, 147, 84, 1, 66, 9, 55, 66, 174, 210, 56, 146, 105, 191, 243, 61, 26, 54, 20, 220, 154, 130, 9, 51, 140, 251, 17, 149, 108, 82, 152, 148, 30, 162, 191, 105, 108, 138, 93, 42, 252, 76, 65, 189, 44, 251, 155, 56, 172, 63, 75, 29, 3, 201, 129, 166, 65, 127, 200, 50, 105, 72, 48, 64, 206, 90, 19, 5, 124, 58, 107, 179, 211, 96, 108, 185, 199, 106, 184, 63, 229, 216, 152, 240, 184, 70, 87, 85, 250, 113, 64, 225, 230, 243, 27, 35, 33, 71, 243, 190, 127, 248, 92, 81, 42, 58, 97, 195, 75, 12, 58, 31, 21, 243, 101, 61, 151, 163, 255, 23, 164, 219, 63, 15, 1, 83, 123, 200, 89, 71, 157, 2, 9, 145, 249, 96, 20, 105, 198, 34, 182, 238, 57, 54, 145, 47, 143, 233, 80, 46, 9, 126, 64, 75, 42, 214, 179, 106, 129, 59, 142, 215, 220, 20, 57, 129, 193, 65, 203, 148, 213, 172, 20, 14, 151, 80, 79, 238, 152, 73, 124, 92, 165, 28, 153, 133, 182, 71, 254, 116, 192, 218, 237, 200, 33, 249, 19, 19, 17, 237, 62, 3, 61, 95, 150, 90, 165, 20, 250, 231, 101, 7, 252, 192, 169, 84, 50, 163, 162, 219, 170, 237, 44, 120, 194, 235, 79, 48, 19, 242, 122, 201, 242, 106, 29, 24, 121, 120, 218, 174, 107, 97, 108, 210, 146, 77, 207, 78, 241, 114, 200, 5, 197, 121, 227, 17, 13, 21, 130, 101, 73, 84, 92, 211, 127, 77, 220, 205, 35, 164, 131, 159, 209, 182, 180, 119, 228, 8, 162, 216, 240, 195, 200, 80, 229, 73, 117, 71, 165, 106, 47, 183, 117, 104, 192, 32, 32, 126, 97, 74, 191, 209, 130, 63, 228, 78, 17, 55, 207, 228, 22, 85, 253, 85, 126, 25, 27, 253, 202, 64, 36, 28, 218, 130, 154, 71, 21, 223, 54, 144, 16, 76, 53, 91, 245, 238, 163, 223, 0, 243, 45, 183, 181, 145, 94, 15, 149, 59, 215, 78, 136, 112, 44, 1, 65, 48, 32, 39, 154, 236, 49, 138, 68, 95, 103, 4, 247, 118, 177, 171, 94, 27, 171, 206, 150, 246, 71, 110, 245, 187, 195, 30, 136, 204, 148, 185, 8, 120, 100, 86, 115, 187, 139, 162, 225, 29, 210, 203, 210, 48, 74, 102, 104, 111, 113, 179, 26, 137, 79, 162, 97, 160, 108, 151, 11, 82, 29, 115, 211, 26, 205, 219, 59, 169, 24, 143, 130, 128, 135, 37, 79, 67, 240, 65, 206, 57, 90, 108, 130, 76, 23, 32, 43, 250, 252, 167, 37, 217, 192, 37, 211, 252, 253, 2, 103, 133, 85, 54, 10, 241, 102, 149, 71, 59, 172, 1, 83, 57, 186, 67, 96, 6, 84, 251, 99, 94, 240, 115, 209, 78, 107, 160, 86, 175, 84, 141, 92, 177, 6, 23, 151, 182, 78, 133, 10, 46, 166, 117, 145, 167, 106, 95, 192, 233, 127, 224, 216, 58, 205, 177, 209, 108, 56, 29, 245, 26, 244, 79, 98, 14, 172, 215, 85, 194, 190, 245, 77, 177, 165, 177, 151, 51, 170, 84, 103, 208, 169, 205, 37, 21, 138, 115, 233, 30, 26, 179, 19, 210, 247, 206, 77, 145, 219, 236, 71, 253, 184, 84, 104, 71, 5, 78, 48, 185, 186, 111, 215, 159, 12, 150, 246, 238, 87, 131, 250, 225, 113, 221, 254, 118, 236, 254, 210, 168, 199, 7, 109, 180, 148, 142, 98, 71, 170, 173, 0, 70, 53, 164, 201, 70, 67, 114, 112, 252, 67, 169, 154, 113, 93, 32, 133, 21, 167, 47, 163, 47, 160, 147, 116, 93, 4, 19, 217, 248, 85, 10, 206, 210, 240, 147, 142, 85, 160, 139, 30, 101, 97, 232, 96, 114, 24, 161, 89, 162, 216, 6, 86, 111, 101, 185, 219, 51, 67, 175, 169, 27, 231, 69, 89, 177, 15, 110, 197, 33, 85, 1, 70, 188, 140, 33, 131, 83, 181, 141, 208, 213, 98, 73, 103, 124, 76, 221, 252, 58, 19, 200, 33, 15, 12, 133, 211, 223, 134, 40, 136, 223, 212, 246, 104, 192, 49, 108, 30, 50, 67, 148, 210, 147, 158, 157, 234, 16, 51, 4, 65, 68, 161, 253, 245, 171, 25, 69, 155, 170, 100, 64, 247, 178, 155, 9, 66, 6, 3, 29, 222, 142, 139, 243, 175, 253, 4, 127, 73, 89, 10, 2, 235, 10, 173, 213, 189, 240, 74, 220, 164, 197, 6, 147, 97, 124, 214, 174, 234, 28, 221, 252, 245, 0, 208, 154, 87, 101, 62, 73, 205, 24, 41, 14, 221, 52, 245, 113, 239, 116, 160, 43, 232, 100, 195, 40, 152, 184, 44, 208, 157, 184, 219, 153, 139, 107, 17, 176, 193, 73, 140, 209, 4, 223, 202, 231, 199, 53, 163, 194, 93, 126, 78, 14, 168, 162, 27, 159, 181, 168, 78, 109, 62, 99, 210, 114, 67, 28, 201, 228, 158, 206, 127, 84, 197, 227, 65, 180, 131, 10, 29, 133, 54, 225, 109, 76, 167, 110, 201, 242, 51, 78, 248, 113, 232, 189, 250, 157, 230, 221, 19, 151, 59, 14, 32, 243, 110, 133, 238, 6, 80, 20, 26, 159, 56, 82, 127, 168, 73, 83, 76, 22, 134, 108, 190, 98, 49, 131, 46, 32, 139, 102, 17, 221, 47, 151, 162, 90, 97, 103, 236, 142, 93, 91, 218, 18, 14, 123, 216, 40, 188, 87, 155, 37, 239, 112, 7, 31, 27, 89, 126, 164, 77, 65, 1, 243, 167, 98, 150, 32, 139, 114, 229, 90, 74, 213, 197, 119, 110, 82, 243, 232, 16, 151, 242, 110, 61, 61, 245, 234, 239, 67, 22, 107, 160, 175, 171, 91, 230, 91, 189, 226, 239, 116, 187, 172, 45, 89, 207, 34, 36, 147, 73, 84, 228, 102, 196, 134, 135, 149, 129, 85, 35, 240, 207, 51, 57, 97, 155, 99, 28, 89, 77, 253, 114, 60, 207, 223, 62, 12, 177, 130, 229, 77, 187, 169, 234, 255, 115, 67, 12, 58, 102, 131, 14, 174, 220, 140, 147, 81, 7, 38, 79, 2, 52, 253, 68, 245, 57, 101, 237, 250, 230, 117, 134, 82, 26, 103, 194, 67, 45, 57, 47, 85, 165, 175, 15, 105, 74, 84, 170, 237, 21, 84, 119, 122, 92, 123, 151, 186, 139, 223, 86, 92, 93, 173, 255, 100, 174, 67, 184, 210, 174, 141, 97, 220, 84, 77, 104, 241, 154, 140, 44, 108, 21, 198, 118, 207, 156, 123, 207, 59, 69, 222, 90, 162, 43, 151, 60, 146, 156, 170, 106, 236, 102, 67, 5, 214, 133, 163, 121, 229, 50, 187, 182, 97, 2, 17, 179, 235, 74, 183, 240, 169, 152, 68, 57, 183, 16, 230, 227, 252, 155, 221, 116, 164, 228, 49, 197, 130, 129, 152, 203, 90, 237, 209, 97, 172, 250, 100, 241, 206, 124, 70, 94, 24, 21, 87, 162, 151, 186, 230, 92, 127, 65, 73, 156, 104, 166, 234, 25, 212, 51, 215, 135, 177, 110, 203, 66, 249, 134, 185, 81, 0, 86, 131, 95, 49, 97, 229, 4, 190, 249, 210, 27, 148, 105, 176, 232, 63, 209, 221, 243, 130, 95, 164, 175, 159, 175, 180, 37, 144, 5, 252, 28, 39, 98, 31, 92, 45, 66, 200, 140, 101, 184, 123, 173, 98, 19, 180, 74, 35, 208, 17, 203, 237, 199, 226, 1, 35, 220, 219, 180, 118, 253, 133, 230, 140, 241, 141, 66, 121, 165, 11, 236, 64, 159, 247, 78, 229, 96, 100, 73, 76, 51, 55, 161, 133, 77, 18, 68, 157, 2, 74, 71, 176, 130, 118, 97, 252, 186, 11, 151, 106, 16, 199, 153, 24, 45, 100, 12, 132, 211, 105, 225, 68, 245, 128, 121, 195, 234, 82, 239, 222, 147, 137, 232, 225, 173, 88, 234, 227, 181, 239, 228, 62, 109, 42, 177, 34, 102, 163, 120, 93, 33, 239, 231, 189, 126, 67, 3, 233, 107, 172, 88, 157, 137, 98, 105, 171, 160, 3, 218, 195, 44, 211, 251, 92, 103, 239, 7, 131, 3, 152, 96, 59, 26, 197, 111, 99, 180, 186, 227, 101, 39, 128, 137, 94, 32, 229, 72, 215, 164, 78, 238, 87, 251, 254, 48, 105, 77, 214, 80, 109, 95, 65, 0, 64, 211, 49, 60, 114, 221, 221, 164, 162, 69, 105, 219, 115, 220, 50, 166, 53, 11, 64, 186, 92, 4, 153, 11, 222, 217, 233, 82, 141, 188, 235, 236, 21, 210, 149, 104, 158, 25, 71, 166, 240, 99, 96, 54, 143, 3, 147, 194, 146, 175, 8, 107, 5, 128, 24, 178, 12, 39, 39, 125, 137, 170, 242, 17, 70, 143, 2, 228, 180, 25, 158, 175, 192, 183, 98, 182, 65, 22, 83, 51, 252, 69, 41, 200, 136, 32, 56, 61, 56, 78, 114, 119, 32, 208, 59, 85, 15, 208, 51, 255, 177, 51, 194, 3, 193, 80, 88, 161, 145, 140, 17, 209, 54, 156, 251, 5, 222, 247, 225, 97, 186, 179, 136, 74, 93, 81, 227, 32, 191, 14, 207, 240, 11, 103, 76, 234, 11, 109, 90, 55, 225, 172, 8, 50, 213, 55, 29, 227, 134, 253, 197, 142, 164, 31, 74, 154, 146, 200, 28, 251, 221, 57, 244, 170, 69, 100, 15, 95, 210, 199, 146, 14, 142, 48, 225, 214, 124, 90, 208, 150, 232, 190, 88, 102, 63, 85, 107, 72, 94, 198, 175, 204, 164, 184, 47, 126, 120, 61, 204, 227, 46, 108, 178, 26, 159, 187, 163, 241, 6, 152, 160, 195, 137, 99, 87, 125, 86, 30, 34, 163, 7, 234, 71, 4, 217, 168, 169, 221, 66, 59, 98, 170, 182, 233, 237, 108, 10, 47, 141, 243, 103, 112, 112, 54, 28, 75, 88, 24, 2, 199, 94, 77, 71, 22, 231, 21, 84, 30, 88, 181, 104, 249, 144, 182, 250, 243, 207, 170, 85, 206, 70, 25, 128, 70, 195, 119, 81, 44, 235, 11, 103, 156, 54, 147, 199, 167, 150, 70, 137, 70, 52, 185, 33, 158, 46, 214, 31, 84, 84, 124, 28, 135, 144, 104, 79, 206, 153, 53, 62, 231, 254, 0, 213, 149, 151, 110, 148, 15, 169, 172, 52, 179, 113, 33, 87, 70, 167, 236, 238, 41, 149, 108, 88, 36, 141, 209, 95, 99, 110, 139, 196, 47, 88, 46, 177, 167, 43, 30, 89, 105, 40, 45, 237, 78, 158, 119, 210, 213, 105, 175, 133, 184, 65, 149, 67, 119, 223, 194, 139, 105, 173, 38, 68, 192, 135, 35, 221, 166, 28, 157, 241, 174, 76, 126, 191, 35, 141, 216, 187, 147, 159, 215, 198, 98, 218, 7, 116, 142, 97, 179, 50, 83, 45, 50, 85, 30, 14, 183, 115, 154, 53, 1, 31, 255, 246, 124, 15, 174, 125, 70, 72, 124, 250, 94, 26, 23, 148, 242, 158, 97, 60, 148, 94, 31, 96, 148, 156, 34, 82, 165, 39, 9, 151, 241, 149, 83, 1, 220, 88, 84, 177, 195, 204, 114, 29, 253, 118, 36, 220, 164, 29, 74, 144, 211, 177, 219, 225, 73, 174, 213, 75, 160, 100, 8, 123, 205, 65, 146, 225, 101, 252, 207, 90, 142, 5, 168, 161, 172, 24, 215, 118, 9, 227, 226, 86, 20, 216, 193, 204, 136, 179, 88, 32, 130, 232, 38, 65, 102, 70, 233, 229, 102, 24, 165, 198, 77, 45, 222, 54, 158, 120, 75, 180, 168, 204, 250, 211, 63, 206, 23, 3, 13, 113, 50, 206, 40, 57, 177, 61, 246, 218, 49, 131, 231, 69, 83, 50, 82, 48, 211, 187, 137, 232, 28, 34, 150, 213, 184, 169, 25, 200, 174, 230, 140, 89, 200, 36, 105, 227, 152, 252, 161, 236, 50, 202, 191, 119, 98, 193, 186, 197, 177, 165, 243, 159, 20, 33, 27, 67, 49, 20, 58, 49, 119, 138, 123, 113, 206, 191, 228, 68, 68, 220, 10, 50, 164, 33, 94, 125, 174, 43, 212, 225, 222, 4, 100, 155, 63, 174, 24, 101, 202, 127, 154, 231, 194, 203, 44, 174, 165, 140, 153, 247, 127, 100, 6, 138, 175, 189, 151, 23, 87, 241, 226, 229, 231, 213, 223, 144, 181, 230, 126, 219, 157, 78, 180, 166, 219, 87, 69, 112, 20, 97, 147, 133, 112, 60, 89, 34, 176, 201, 195, 254, 19, 135, 56, 195, 202, 199, 18, 238, 66, 82, 181, 251, 153, 31, 131, 143, 127, 119, 33, 247, 183, 84, 175, 125, 186, 150, 186, 125, 167, 170, 233, 160, 92, 177, 51, 51, 23, 181, 147, 199, 201, 92, 50, 46, 23, 71, 168, 86, 141, 130, 97, 1, 222, 212, 134, 190, 214, 5, 59, 218, 207, 86, 82, 58, 54, 131, 149, 144, 19, 49, 21, 32, 213, 110, 250, 2, 0, 251, 55, 107, 254, 245, 213, 252, 53, 28, 117, 226, 161, 42, 239, 113, 109, 207, 80, 206, 2, 128, 211, 2, 201, 197, 38, 150, 143, 78, 193, 161, 207, 243, 208, 192, 9, 189, 170, 190, 57, 83, 46, 193, 0, 0, 41, 80, 24, 64, 219, 219, 154, 118, 191, 65, 11, 248, 169, 199, 202, 212, 167, 247, 128, 237, 206, 104, 220, 40, 146, 103, 32, 99, 102, 80, 185, 207, 61, 24, 85, 35, 200, 232, 164, 172, 76, 81, 215, 2, 22, 15, 167, 74, 117, 207, 57, 255, 217, 48, 54, 191, 51, 55, 161, 167, 118, 173, 149, 50, 128, 71, 51, 168, 112, 73, 255, 194, 131, 97, 133, 225, 123, 86, 70, 121, 59, 172, 251, 14, 216, 10, 95, 194, 118, 133, 156, 125, 227, 211, 117, 123, 228, 152, 106, 102, 94, 67, 110, 63, 13, 22, 126, 43, 184, 97, 237, 204, 29, 12, 170, 177, 8, 53, 190, 240, 252, 45, 135, 194, 0, 0, 82, 54, 128, 74, 38, 29, 17, 62, 55, 239, 166, 117, 163, 206, 168, 114, 223, 35, 89, 28, 235, 143, 79, 46, 24, 109, 201, 238, 228, 227, 129, 221, 164, 28, 204, 47, 157, 238, 226, 98, 172, 23, 225, 229, 249, 87, 142, 241, 200, 194, 207, 32, 142, 110, 60, 28, 232, 134, 154, 63, 102, 154, 1, 112, 36, 11, 113, 66, 141, 224, 5, 3, 224, 30, 192, 28, 165, 244, 205, 68, 175, 187, 164, 43, 207, 123, 254, 123, 14, 181, 251, 196, 208, 254, 137, 143, 125, 15, 78, 111, 195, 58, 84, 165, 93, 177, 47, 241, 219, 105, 186, 176, 58, 218, 75, 219, 16, 118, 224, 199, 174, 179, 229, 218, 213, 86, 145, 96, 42, 153, 246, 1, 37, 231, 218, 6, 224, 235, 228, 61, 176, 75, 3, 150, 133, 57, 46, 174, 188, 173, 145, 117, 167, 185, 80, 71, 106, 195, 148, 30, 180, 106, 129, 156, 103, 155, 145, 104, 229, 14, 168, 144, 244, 95, 78, 64, 74, 33, 77, 154, 28, 10, 124, 27, 211, 212, 245, 9, 167, 208, 53, 188, 250, 92, 166, 7, 29, 96, 10, 67, 0, 224, 56, 155, 181, 58, 34, 56, 114, 237, 154, 33, 221, 7, 32, 55, 123, 231, 144, 234, 29, 129, 228, 160, 108, 206, 51, 246, 178, 66, 148, 41, 171, 56, 74, 73, 96, 35, 35, 229, 137, 131, 199, 54, 209, 63, 53, 185, 3, 72, 108, 1, 58, 28, 99, 199, 24, 15, 64, 250, 239, 186, 20, 87, 148, 140, 195, 135, 38, 42, 118, 190, 158, 74, 202, 140, 77, 48, 168, 91, 78, 178, 227, 109, 11, 90, 46, 67, 55, 97, 214, 191, 164, 230, 208, 78, 103, 247, 183, 180, 148, 39, 188, 202, 24, 229, 160, 42, 204, 190, 174, 21, 95, 154, 91, 112, 70, 68, 39, 10, 1, 213, 136, 151, 12, 251, 33, 125, 64, 125, 32, 25, 120, 75, 50, 120, 150, 63, 147, 135, 135, 125, 17, 59, 165, 204, 96, 250, 221, 190, 118, 30, 6, 184, 18, 126, 249, 143, 172, 138, 196, 223, 118, 89, 135, 105, 171, 107, 195, 18, 219, 88, 82, 139, 49, 74, 47, 242, 216, 94, 240, 132, 51, 89, 87, 104, 53, 160, 85, 210, 33, 84, 45, 170, 7, 125, 79, 61, 14, 173, 200, 140, 127, 74, 209, 159, 162, 150, 86, 173, 145, 142, 160, 32, 249, 197, 145, 89, 147, 123, 174, 200, 156, 99, 254, 247, 221, 42, 17, 46, 230, 32, 27, 231, 199, 21, 138, 50, 107, 71, 169, 246, 118, 150, 176, 13, 201, 19, 11, 1, 250, 213, 93, 246, 140, 170, 218, 128, 77, 182, 105, 82, 219, 198, 65, 96, 57, 122, 68, 218, 199, 22, 164, 133, 16, 132, 150, 142, 132, 99, 89, 115, 238, 233, 73, 201, 148, 238, 42, 101, 157, 57, 37, 166, 80, 186, 142, 157, 35, 95, 161, 35, 238, 123, 166, 19, 34, 121, 250, 100, 59, 73, 197, 3, 139, 84, 236, 248, 131, 213, 129, 199, 149, 190, 236, 141, 7, 111, 225, 163, 40, 253, 224, 5, 139, 118, 245, 226, 216, 43, 146, 66, 105, 253, 41, 108, 60, 152, 184, 69, 50, 216, 74, 117, 179, 179, 74, 100, 39, 167, 237, 103, 3, 37, 167, 213, 24, 14, 100, 159, 132, 46, 178, 255, 79, 8, 238, 230, 15, 150, 29, 53, 53, 31, 32, 102, 215, 9, 164, 91, 102, 107, 75, 127, 37, 122, 173, 71, 114, 173, 201, 2, 53, 67, 112, 170, 202, 194, 54, 14, 224, 111, 117, 192, 40, 237, 189, 241, 169, 128, 243, 96, 154, 40, 91, 163, 38, 140, 146, 5, 147, 240, 84, 167, 42, 17, 143, 89, 146, 32, 56, 108, 226, 140, 227, 51, 190, 100, 112, 213, 235, 213, 138, 68, 202, 215, 233, 126, 65, 222, 7, 112, 12, 204, 62, 14, 131, 127, 55, 232, 185, 5, 245, 113, 102, 199, 105, 189, 229, 185, 70, 242, 15, 56, 246, 195, 158, 231, 185, 182, 68, 170, 168, 144, 229, 138, 133, 189, 206, 45, 235, 154, 4, 114, 57, 102, 68, 147, 232, 175, 25, 13, 125, 76, 183, 165, 97, 176, 62, 138, 51, 90, 170, 68, 190, 34, 223, 215, 250, 4, 62, 17, 141, 215, 184, 69, 214, 117, 219, 85, 173, 193, 36, 210, 142, 14, 51, 236, 143, 232, 61, 42, 145, 174, 91, 82, 64, 236, 42, 178, 117, 96, 61, 239, 208, 57, 113, 98, 229, 197, 163, 226, 224, 47, 164, 9, 176, 180, 42, 247, 209, 24, 120, 250, 229, 201, 181, 105, 175, 14, 221, 218, 190, 193, 197, 72, 38, 108, 123, 144, 132, 47, 183, 157, 101, 241, 117, 110, 77, 64, 46, 115, 77, 99, 77, 113, 240, 131, 54, 125, 226, 66, 233, 30, 130, 133, 197, 173, 34, 253, 28, 234, 253, 241, 120, 77, 64, 214, 2, 252, 80, 124, 220, 69, 158, 246, 59, 253, 119, 253, 80, 53, 89, 172, 138, 71, 209, 171, 185, 122, 184, 184, 18, 208, 167, 57, 164, 24, 37, 94, 239, 244, 246, 56, 167, 104, 4, 21, 42, 185, 79, 31, 43, 181, 186, 200, 195, 248, 51, 42, 191, 135, 135, 80, 19, 214, 172, 67, 11, 43, 202, 173, 32, 49, 130, 251, 184, 145, 6, 215, 125, 119, 230, 194, 253, 232, 103, 176, 9, 58, 200, 200, 62, 180, 65, 146, 2, 205, 34, 78, 89, 44, 220, 96, 44, 159, 16, 34, 124, 180, 12, 10, 162, 193, 215, 179, 58, 226, 98, 241, 250, 34, 155, 196, 238, 52, 45, 163, 115, 254, 196, 175, 255, 159, 208, 159, 2, 59, 211, 106, 133, 132, 119, 104, 71, 61, 35, 88, 0, 152, 92, 191, 236, 31, 114, 29, 205, 100, 207, 232, 205, 46, 231, 69, 198, 193, 15, 15, 239, 128, 40, 250, 186, 145, 196, 161, 187, 170, 46, 70, 30, 180, 99, 72, 47, 150, 84, 62, 240, 64, 239, 18, 15, 252, 64, 155, 92, 60, 57, 38, 47, 159, 162, 3, 102, 123, 159, 239, 172, 110, 213, 232, 101, 236, 85, 73, 253, 36, 178, 98, 203, 213, 96, 197, 43, 40, 244, 99, 1, 247, 58, 141, 242, 120, 66, 21, 163, 217, 56, 202, 30, 227, 8, 105, 234, 76, 177, 49, 157, 249, 71, 214, 126, 247, 111, 119, 255, 159, 239, 103, 111, 220, 83, 113, 191, 41, 175, 234, 251, 209, 59, 112, 224, 176, 218, 199, 54, 199, 202, 19, 206, 113, 224, 133, 164, 101, 235, 63, 187, 199, 46, 179, 132, 37, 18, 199, 161, 66, 68, 40, 149, 250, 162, 120, 221, 240, 50, 26, 204, 21, 121, 40, 54, 200, 253, 241, 191, 34, 242, 192, 168, 107], - [124, 1, 116, 15, 241, 50, 52, 155, 175, 98, 81, 2, 6, 150, 159, 192, 147, 217, 193, 154, 181, 220, 76, 4, 207, 188, 18, 98, 90, 32, 187, 122, 184, 64, 140, 194, 234, 247, 220, 64, 101, 20, 103, 240, 225, 172, 170, 28, 44, 193, 222, 38, 158, 52, 206, 70, 164, 195, 58, 161, 218, 147, 240, 181, 3, 100, 39, 39, 133, 194, 133, 10, 165, 177, 184, 151, 13, 238, 215, 251, 85, 24, 255, 17, 179, 142, 113, 15, 123, 196, 70, 226, 34, 165, 143, 167, 111, 25, 114, 15, 70, 183, 200, 161, 36, 101, 76, 42, 31, 241, 156, 223, 21, 221, 151, 184, 130, 209, 215, 139, 153, 204, 146, 193, 80, 225, 18, 195, 205, 183, 126, 68, 171, 167, 110, 251, 112, 32, 231, 121, 156, 65, 73, 4, 84, 146, 54, 156, 101, 124, 194, 110, 215, 134, 252, 176, 114, 184, 87, 110, 60, 3, 233, 68, 2, 230, 39, 177, 122, 199, 11, 225, 187, 98, 197, 195, 71, 155, 11, 124, 31, 147, 74, 70, 16, 26, 141, 61, 72, 104, 253, 194, 160, 113, 177, 10, 151, 194, 210, 202, 74, 242, 89, 15, 46, 170, 237, 226, 68, 11, 39, 52, 154, 127, 63, 112, 74, 24, 167, 158, 225, 238, 121, 70, 148, 49, 187, 178, 67, 186, 73, 141, 114, 132, 148, 65, 140, 231, 62, 21, 34, 77, 105, 185, 124, 39, 156, 234, 212, 179, 84, 51, 40, 38, 180, 186, 0, 134, 171, 177, 94, 20, 150, 39, 189, 44, 141, 107, 64, 81, 111, 35, 37, 96, 48, 132, 137, 210, 99, 248, 107, 13, 207, 96, 253, 207, 30, 149, 39, 148, 18, 204, 136, 0, 180, 191, 181, 70, 180, 81, 179, 55, 191, 93, 133, 156, 87, 125, 151, 16, 152, 121, 116, 245, 168, 239, 190, 136, 220, 54, 28, 55, 139, 247, 62, 86, 4, 107, 236, 107, 191, 170, 174, 235, 227, 87, 4, 217, 223, 128, 88, 120, 238, 152, 253, 158, 209, 137, 255, 122, 219, 29, 254, 134, 237, 68, 158, 2, 198, 209, 50, 61, 175, 47, 228, 108, 214, 44, 181, 45, 187, 149, 104, 214, 4, 208, 67, 104, 171, 4, 103, 245, 138, 150, 102, 33, 118, 65, 127, 180, 20, 4, 135, 240, 11, 83, 249, 210, 198, 248, 205, 34, 87, 143, 92, 50, 218, 201, 220, 234, 57, 197, 134, 159, 126, 170, 216, 222, 22, 179, 237, 185, 89, 124, 28, 170, 244, 196, 118, 135, 36, 54, 101, 138, 216, 166, 128, 254, 103, 67, 165, 52, 35, 79, 125, 141, 19, 159, 201, 237, 47, 85, 230, 206, 71, 183, 111, 3, 96, 6, 67, 39, 218, 98, 154, 103, 155, 165, 250, 61, 2, 232, 20, 155, 31, 68, 78, 115, 7, 56, 9, 20, 183, 64, 156, 71, 132, 16, 85, 80, 48, 239, 197, 37, 5, 96, 91, 60, 68, 214, 180, 158, 154, 92, 171, 160, 70, 59, 27, 172, 212, 184, 23, 116, 142, 113, 157, 80, 0, 199, 76, 197, 225, 252, 197, 87, 66, 135, 89, 81, 250, 208, 89, 189, 62, 152, 93, 118, 98, 138, 9, 63, 23, 172, 193, 186, 186, 47, 122, 175, 180, 176, 10, 245, 79, 70, 98, 184, 132, 87, 174, 157, 175, 179, 251, 200, 188, 192, 134, 79, 103, 157, 223, 142, 89, 235, 128, 74, 17, 153, 25, 82, 6, 164, 179, 192, 180, 12, 164, 64, 146, 237, 91, 32, 100, 214, 36, 60, 123, 208, 88, 233, 82, 132, 68, 233, 225, 17, 18, 171, 161, 195, 177, 90, 52, 230, 222, 220, 152, 107, 194, 36, 150, 94, 121, 35, 151, 107, 202, 161, 224, 13, 198, 7, 58, 51, 151, 209, 235, 157, 141, 50, 145, 147, 181, 122, 200, 114, 127, 36, 5, 95, 58, 212, 76, 217, 187, 167, 129, 171, 198, 93, 113, 230, 143, 232, 43, 244, 211, 124, 200, 111, 145, 62, 255, 129, 146, 82, 6, 86, 62, 120, 106, 0, 251, 126, 209, 119, 51, 249, 197, 198, 21, 136, 104, 96, 12, 202, 79, 109, 171, 229, 215, 233, 165, 154, 94, 149, 253, 224, 71, 47, 40, 169, 31, 119, 232, 245, 95, 239, 58, 47, 5, 129, 37, 199, 54, 119, 184, 28, 156, 51, 157, 108, 221, 111, 113, 68, 253, 37, 152, 65, 203, 145, 18, 250, 86, 130, 21, 94, 240, 206, 199, 240, 11, 95, 168, 17, 104, 1, 131, 19, 211, 251, 27, 8, 20, 230, 230, 248, 133, 150, 44, 98, 72, 133, 189, 204, 40, 242, 12, 140, 188, 112, 152, 195, 52, 212, 110, 67, 141, 94, 235, 255, 0, 31, 182, 201, 166, 70, 252, 128, 110, 237, 191, 244, 96, 54, 44, 231, 102, 160, 175, 99, 164, 173, 69, 65, 46, 119, 27, 254, 227, 167, 232, 62, 251, 207, 191, 104, 246, 217, 217, 255, 125, 93, 206, 97, 2, 46, 250, 212, 240, 208, 128, 19, 8, 188, 79, 42, 250, 29, 170, 173, 11, 194, 141, 152, 174, 33, 47, 154, 176, 12, 209, 206, 142, 218, 189, 203, 32, 100, 40, 28, 233, 84, 218, 56, 98, 128, 29, 29, 73, 77, 91, 45, 47, 162, 230, 188, 7, 246, 6, 67, 79, 21, 253, 127, 172, 45, 159, 41, 7, 94, 10, 40, 45, 96, 106, 74, 236, 198, 128, 104, 244, 192, 235, 108, 11, 205, 81, 142, 94, 162, 192, 146, 152, 224, 100, 240, 27, 62, 34, 25, 125, 167, 98, 14, 203, 139, 101, 61, 187, 92, 235, 5, 218, 105, 194, 221, 101, 177, 246, 103, 20, 82, 165, 50, 215, 252, 222, 27, 174, 154, 222, 178, 233, 131, 102, 165, 180, 199, 55, 95, 0, 11, 29, 179, 179, 198, 224, 254, 39, 165, 247, 168, 170, 121, 39, 218, 36, 81, 21, 180, 200, 247, 119, 197, 227, 203, 40, 39, 58, 58, 20, 178, 160, 55, 58, 58, 27, 244, 101, 118, 29, 132, 22, 231, 73, 201, 109, 136, 51, 164, 78, 132, 1, 205, 211, 103, 233, 179, 171, 69, 23, 234, 152, 81, 106, 110, 114, 15, 151, 229, 248, 44, 207, 141, 43, 105, 41, 199, 154, 210, 9, 200, 90, 153, 40, 165, 58, 102, 221, 77, 23, 47, 49, 159, 99, 120, 61, 103, 73, 40, 41, 8, 188, 42, 118, 52, 82, 65, 24, 59, 232, 137, 103, 21, 149, 198, 140, 13, 11, 96, 59, 242, 89, 60, 51, 227, 196, 191, 125, 47, 9, 209, 195, 240, 128, 189, 170, 92, 117, 130, 214, 12, 171, 166, 5, 231, 85, 204, 167, 77, 14, 89, 62, 155, 89, 23, 18, 143, 222, 84, 196, 40, 116, 198, 85, 230, 75, 179, 155, 0, 208, 104, 172, 122, 141, 19, 250, 188, 153, 100, 152, 181, 249, 81, 101, 179, 210, 22, 81, 64, 31, 178, 71, 76, 95, 165, 218, 108, 113, 233, 221, 123, 28, 233, 250, 21, 88, 104, 106, 200, 171, 239, 98, 198, 213, 108, 4, 131, 243, 10, 203, 238, 95, 80, 62, 40, 184, 18, 203, 101, 1, 188, 162, 239, 209, 1, 79, 94, 255, 242, 186, 231, 59, 212, 188, 62, 198, 58, 208, 222, 226, 236, 16, 89, 252, 194, 112, 100, 90, 17, 136, 7, 76, 10, 224, 135, 214, 208, 153, 182, 122, 49, 38, 201, 161, 66, 131, 82, 111, 32, 99, 210, 232, 145, 29, 61, 208, 105, 138, 56, 50, 218, 78, 144, 16, 241, 133, 53, 213, 74, 39, 127, 178, 12, 0, 65, 234, 77, 246, 132, 232, 115, 225, 74, 207, 148, 89, 66, 238, 96, 104, 204, 53, 124, 187, 129, 109, 37, 24, 12, 174, 57, 77, 39, 164, 227, 202, 146, 145, 244, 251, 34, 149, 95, 7, 143, 187, 15, 198, 33, 56, 184, 119, 202, 168, 105, 102, 163, 9, 142, 194, 186, 186, 31, 0, 125, 183, 70, 90, 180, 218, 13, 211, 202, 111, 2, 126, 46, 227, 110, 81, 132, 193, 67, 129, 217, 55, 209, 253, 198, 215, 245, 60, 60, 225, 67, 180, 14, 156, 95, 30, 206, 19, 52, 245, 137, 47, 156, 119, 168, 134, 152, 195, 211, 181, 177, 4, 205, 169, 174, 6, 142, 184, 62, 61, 188, 243, 63, 193, 178, 44, 4, 12, 105, 35, 82, 86, 210, 172, 66, 240, 31, 121, 210, 22, 5, 168, 12, 119, 7, 34, 222, 11, 244, 140, 39, 230, 100, 206, 118, 158, 149, 159, 143, 89, 46, 143, 32, 21, 48, 5, 45, 230, 35, 254, 252, 13, 53, 80, 12, 63, 155, 120, 5, 46, 125, 21, 221, 51, 126, 95, 9, 91, 162, 248, 10, 216, 251, 201, 221, 252, 23, 64, 91, 167, 220, 125, 129, 28, 231, 147, 174, 213, 43, 107, 86, 75, 253, 228, 216, 208, 183, 36, 53, 11, 114, 76, 142, 10, 23, 69, 66, 142, 195, 190, 233, 2, 90, 234, 165, 205, 128, 254, 21, 175, 251, 247, 65, 7, 184, 57, 250, 225, 198, 242, 85, 50, 247, 222, 156, 162, 49, 205, 93, 161, 129, 184, 26, 200, 131, 207, 110, 16, 253, 137, 243, 147, 222, 225, 81, 140, 62, 26, 166, 151, 5, 151, 144, 201, 53, 180, 38, 27, 198, 14, 38, 125, 235, 16, 248, 48, 39, 5, 63, 24, 7, 17, 142, 71, 26, 136, 232, 112, 33, 101, 107, 93, 169, 34, 34, 255, 35, 166, 169, 213, 190, 200, 220, 249, 62, 137, 124, 59, 234, 218, 199, 134, 89, 62, 198, 75, 18, 94, 174, 156, 161, 224, 169, 155, 27, 114, 18, 142, 221, 249, 159, 42, 23, 95, 12, 178, 140, 231, 122, 110, 201, 136, 58, 70, 224, 191, 225, 57, 101, 52, 2, 199, 47, 203, 111, 21, 250, 123, 229, 136, 102, 89, 148, 219, 213, 89, 238, 169, 96, 100, 205, 251, 121, 121, 74, 251, 186, 74, 120, 191, 68, 226, 180, 232, 222, 80, 244, 120, 181, 123, 221, 223, 39, 111, 31, 5, 119, 106, 230, 252, 15, 178, 155, 181, 254, 123, 28, 178, 226, 68, 6, 239, 78, 220, 246, 188, 221, 123, 74, 126, 58, 9, 222, 132, 214, 20, 204, 47, 81, 162, 111, 91, 164, 142, 20, 207, 178, 9, 219, 129, 143, 18, 184, 97, 194, 217, 230, 237, 128, 178, 135, 4, 132, 109, 229, 69, 154, 221, 28, 53, 199, 93, 0, 197, 56, 146, 104, 50, 52, 162, 132, 48, 124, 82, 100, 25, 131, 176, 129, 143, 241, 58, 248, 55, 118, 252, 115, 47, 237, 150, 146, 194, 221, 45, 69, 43, 151, 142, 75, 108, 100, 92, 166, 60, 128, 23, 193, 181, 19, 213, 120, 167, 11, 77, 173, 209, 220, 82, 71, 165, 242, 92, 78, 165, 80, 175, 204, 62, 24, 7, 76, 189, 123, 85, 145, 70, 79, 20, 102, 46, 99, 45, 244, 97, 51, 58, 89, 248, 23, 150, 201, 180, 232, 129, 130, 211, 64, 191, 237, 233, 193, 123, 20, 106, 209, 39, 157, 93, 70, 197, 93, 241, 237, 65, 128, 81, 217, 86, 55, 20, 46, 14, 30, 4, 214, 22, 53, 62, 254, 7, 141, 156, 241, 217, 67, 107, 96, 98, 173, 182, 215, 56, 71, 159, 221, 2, 152, 206, 176, 160, 203, 202, 70, 195, 226, 83, 212, 18, 11, 72, 6, 213, 167, 70, 218, 95, 248, 61, 109, 162, 188, 253, 43, 55, 84, 120, 235, 85, 44, 74, 212, 211, 34, 90, 99, 134, 168, 231, 36, 24, 86, 87, 119, 165, 105, 91, 188, 29, 34, 153, 178, 69, 23, 172, 226, 40, 249, 245, 51, 113, 1, 55, 203, 57, 211, 242, 67, 22, 36, 72, 234, 86, 160, 119, 68, 55, 228, 159, 136, 72, 41, 71, 15, 0, 217, 144, 69, 62, 223, 50, 7, 158, 55, 80, 138, 183, 63, 186, 57, 255, 33, 78, 219, 63, 228, 128, 233, 215, 8, 78, 222, 209, 70, 171, 44, 250, 141, 139, 97, 220, 228, 182, 237, 9, 24, 186, 201, 183, 85, 125, 73, 202, 241, 35, 53, 117, 49, 202, 183, 131, 214, 52, 146, 100, 21, 218, 119, 231, 79, 191, 197, 72, 146, 45, 33, 180, 230, 48, 113, 96, 252, 70, 180, 22, 126, 73, 81, 3, 118, 16, 19, 126, 129, 101, 119, 178, 253, 94, 148, 149, 152, 233, 0, 93, 249, 97, 55, 167, 17, 246, 138, 199, 117, 173, 223, 123, 104, 203, 68, 207, 0, 209, 136, 66, 38, 147, 146, 73, 165, 78, 49, 255, 174, 214, 217, 5, 52, 199, 48, 175, 217, 29, 174, 206, 221, 123, 243, 188, 101, 239, 32, 192, 243, 24, 178, 85, 178, 248, 101, 239, 141, 223, 110, 143, 215, 7, 143, 197, 85, 18, 255, 122, 132, 59, 228, 137, 89, 241, 68, 53, 0, 85, 43, 116, 158, 36, 121, 109, 89, 49, 171, 28, 5, 228, 104, 250, 211, 8, 199, 2, 52, 224, 28, 217, 109, 227, 105, 119, 216, 90, 155, 118, 231, 238, 242, 234, 138, 226, 72, 10, 93, 58, 207, 168, 243, 38, 96, 217, 121, 85, 139, 49, 88, 49, 170, 1, 116, 224, 207, 90, 96, 103, 203, 178, 201, 148, 220, 162, 70, 180, 0, 1, 203, 253, 82, 188, 58, 21, 6, 141, 75, 177, 181, 109, 183, 5, 141, 156, 246, 111, 185, 233, 234, 174, 124, 181, 119, 228, 240, 171, 8, 182, 19, 200, 200, 77, 42, 170, 26, 123, 139, 219, 140, 130, 183, 187, 143, 136, 206, 19, 197, 49, 67, 250, 136, 22, 29, 91, 2, 89, 73, 247, 162, 96, 1, 247, 158, 17, 214, 127, 93, 72, 139, 119, 151, 18, 200, 116, 9, 117, 105, 57, 122, 236, 189, 8, 75, 74, 154, 89, 71, 225, 236, 45, 12, 121, 43, 106, 218, 227, 166, 121, 54, 146, 143, 245, 93, 96, 110, 107, 177, 249, 99, 98, 185, 65, 187, 84, 232, 30, 11, 158, 238, 24, 36, 160, 183, 181, 136, 251, 105, 107, 132, 140, 191, 17, 123, 78, 9, 205, 181, 48, 42, 184, 228, 31, 98, 174, 224, 27, 17, 68, 177, 46, 69, 88, 155, 61, 212, 199, 177, 175, 175, 193, 201, 145, 181, 157, 82, 86, 159, 202, 122, 114, 8, 164, 235, 21, 51, 205, 51, 189, 171, 9, 45, 140, 185, 217, 184, 102, 247, 55, 74, 188, 86, 247, 140, 82, 165, 190, 94, 124, 244, 28, 120, 229, 96, 54, 34, 141, 113, 204, 85, 110, 13, 152, 232, 141, 95, 47, 99, 86, 252, 184, 52, 132, 3, 132, 67, 21, 210, 8, 208, 65, 127, 49, 31, 175, 179, 132, 140, 21, 153, 224, 209, 87, 5, 254, 133, 100, 115, 144, 197, 190, 30, 217, 186, 68, 7, 33, 25, 22, 192, 41, 134, 174, 104, 248, 254, 71, 183, 162, 255, 6, 121, 240, 69, 207, 231, 24, 193, 165, 125, 0, 175, 18, 179, 218, 128, 253, 233, 85, 239, 227, 174, 168, 140, 26, 231, 246, 36, 139, 78, 217, 149, 44, 149, 118, 11, 66, 78, 172, 246, 118, 197, 106, 82, 151, 67, 37, 52, 156, 177, 63, 188, 40, 234, 44, 201, 110, 169, 163, 122, 246, 148, 151, 215, 80, 140, 129, 72, 128, 14, 243, 33, 183, 215, 105, 22, 186, 186, 97, 209, 53, 167, 150, 100, 197, 198, 93, 10, 206, 87, 228, 242, 52, 254, 20, 14, 83, 154, 247, 94, 90, 201, 90, 175, 130, 146, 125, 129, 30, 22, 11, 196, 221, 233, 203, 247, 183, 206, 114, 96, 49, 158, 238, 115, 46, 143, 83, 93, 146, 206, 163, 132, 226, 21, 64, 209, 166, 14, 87, 125, 84, 21, 64, 157, 42, 87, 158, 195, 151, 96, 156, 87, 56, 120, 90, 12, 242, 140, 205, 107, 128, 234, 113, 212, 208, 131, 96, 90, 130, 177, 72, 75, 245, 222, 189, 169, 165, 129, 169, 65, 179, 57, 227, 236, 39, 236, 43, 168, 1, 232, 35, 240, 75, 152, 65, 46, 136, 180, 71, 88, 126, 36, 17, 199, 172, 84, 86, 255, 148, 211, 222, 107, 68, 19, 80, 205, 231, 3, 58, 31, 128, 81, 95, 91, 98, 193, 15, 223, 185, 162, 136, 226, 99, 109, 60, 160, 141, 8, 145, 136, 71, 135, 157, 233, 74, 237, 40, 117, 41, 171, 245, 65, 166, 56, 104, 229, 200, 223, 84, 138, 139, 3, 69, 173, 204, 39, 187, 145, 79, 75, 7, 7, 163, 71, 213, 83, 59, 222, 231, 120, 63, 144, 184, 196, 96, 138, 96, 27, 155, 65, 186, 66, 52, 42, 3, 191, 2, 2, 78, 31, 100, 114, 209, 43, 126, 125, 221, 30, 218, 120, 48, 126, 105, 16, 27, 192, 93, 17, 170, 125, 182, 30, 234, 171, 224, 211, 37, 125, 77, 175, 117, 116, 144, 147, 182, 5, 247, 113, 221, 51, 118, 240, 126, 172, 63, 181, 27, 162, 91, 168, 22, 59, 153, 69, 116, 165, 228, 191, 153, 88, 164, 48, 156, 122, 185, 149, 188, 85, 183, 203, 98, 25, 167, 1, 230, 238, 56, 170, 210, 245, 190, 220, 192, 84, 13, 34, 183, 197, 31, 122, 73, 174, 217, 245, 154, 170, 199, 184, 218, 139, 220, 166, 95, 21, 198, 28, 247, 143, 162, 142, 141, 176, 46, 46, 16, 227, 106, 108, 252, 134, 231, 183, 179, 9, 165, 211, 193, 196, 15, 8, 74, 146, 195, 11, 122, 117, 103, 124, 216, 137, 244, 46, 144, 99, 131, 163, 111, 74, 128, 171, 48, 150, 70, 204, 18, 240, 112, 8, 7, 53, 99, 98, 36, 221, 247, 152, 168, 180, 205, 186, 7, 217, 35, 91, 32, 116, 190, 11, 65, 111, 127, 122, 189, 80, 12, 101, 74, 59, 29, 237, 23, 80, 4, 19, 127, 244, 224, 133, 8, 208, 19, 92, 159, 34, 92, 174, 181, 24, 25, 166, 212, 65, 33, 153, 193, 38, 141, 66, 24, 75, 199, 183, 38, 48, 27, 11, 177, 23, 8, 102, 250, 34, 50, 212, 167, 25, 208, 205, 54, 92, 187, 196, 192, 186, 124, 71, 166, 238, 191, 141, 147, 125, 152, 7, 136, 117, 20, 74, 144, 165, 35, 184, 195, 181, 195, 227, 195, 225, 219, 79, 18, 176, 8, 251, 94, 57, 162, 78, 75, 156, 254, 167, 252, 142, 103, 246, 118, 147, 43, 225, 36, 156, 151, 245, 212, 61, 30, 36, 219, 36, 153, 194, 60, 201, 221, 6, 2, 5, 97, 38, 161, 49, 54, 9, 85, 137, 131, 89, 233, 254, 59, 83, 161, 171, 113, 30, 90, 179, 67, 141, 140, 21, 202, 11, 202, 54, 197, 136, 61, 151, 37, 44, 58, 146, 238, 203, 101, 63, 235, 233, 181, 142, 40, 45, 89, 233, 254, 9, 106, 162, 49, 220, 250, 116, 86, 10, 18, 109, 80, 21, 149, 186, 52, 164, 146, 174, 123, 30, 29, 211, 69, 209, 144, 137, 60, 41, 230, 78, 13, 54, 33, 226, 221, 137, 241, 156, 43, 246, 225, 205, 233, 162, 120, 216, 79, 58, 36, 141, 4, 56, 43, 69, 195, 28, 60, 154, 242, 148, 122, 39, 136, 227, 27, 233, 121, 156, 135, 73, 192, 159, 87, 196, 68, 144, 117, 83, 94, 146, 209, 62, 52, 177, 250, 144, 239, 165, 108, 168, 84, 183, 107, 198, 137, 93, 224, 82, 19, 56, 3, 168, 74, 113, 59, 42, 47, 158, 163, 102, 95, 21, 241, 228, 128, 105, 87, 155, 136, 52, 255, 9, 7, 35, 26, 191, 226, 224, 179, 42, 201, 85, 4, 179, 237, 57, 76, 152, 4, 167, 116, 222, 207, 106, 35, 186, 173, 237, 161, 72, 136, 183, 194, 203, 232, 161, 226, 137, 249, 84, 161, 204, 26, 83, 149, 125, 103, 121, 197, 142, 58, 207, 1, 219, 83, 185, 150, 147, 218, 86, 24, 114, 81, 212, 156, 204, 25, 22, 125, 155, 20, 109, 192, 165, 246, 38, 218, 109, 165, 51, 240, 64, 85, 1, 219, 22, 143, 187, 229, 250, 101, 96, 242, 173, 240, 195, 133, 172, 146, 233, 22, 25, 160, 28, 79, 191, 25, 1, 107, 79, 34, 140, 134, 28, 200, 167, 99, 19, 115, 86, 53, 254, 160, 90, 238, 99, 202, 136, 25, 104, 239, 254, 57, 205, 195, 96, 53, 104, 43, 33, 85, 195, 45, 230, 45, 136, 95, 18, 192, 78, 37, 68, 106, 126, 88, 147, 69, 204, 215, 20, 28, 239, 215, 25, 103, 55, 32, 14, 198, 198, 235, 139, 140, 52, 68, 38, 144, 71, 114, 12, 181, 201, 108, 147, 199, 213, 245, 203, 144, 5, 147, 122, 72, 145, 145, 61, 116, 249, 193, 10, 89, 242, 22, 67, 49, 246, 81, 0, 203, 159, 200, 193, 148, 42, 131, 164, 131, 46, 88, 135, 173, 159, 245, 162, 132, 173, 32, 178, 86, 188, 127, 231, 133, 8, 246, 238, 86, 231, 248, 14, 199, 60, 130, 41, 72, 254, 64, 86, 155, 87, 223, 243, 181, 112, 132, 189, 236, 22, 90, 88, 60, 221, 207, 29, 172, 39, 111, 198, 40, 181, 146, 221, 9, 210, 170, 132, 106, 6, 130, 180, 27, 92, 164, 22, 208, 225, 132, 68, 168, 3, 11, 38, 200, 108, 68, 72, 230, 102, 56, 61, 211, 157, 28, 234, 93, 106, 226, 189, 167, 233, 199, 101, 69, 234, 97, 160, 126, 70, 3, 161, 1, 137, 7, 213, 184, 29, 212, 29, 141, 248, 135, 33, 120, 210, 220, 241, 157, 95, 201, 221, 76, 144, 43, 33, 61, 53, 19, 78, 12, 184, 106, 142, 127, 197, 132, 15, 67, 235, 43, 48, 132, 165, 125, 104, 2, 136, 99, 218, 166, 255, 168, 220, 222, 171, 105, 159, 139, 37, 65, 251, 87, 15, 180, 218, 177, 130, 134, 221, 233, 223, 115, 23, 236, 202, 46, 214, 173, 177, 163, 8, 219, 241, 15, 200, 166, 131, 7, 160, 30, 214, 34, 128, 26, 5, 226, 238, 25, 112, 189, 243, 182, 59, 189, 159, 42, 140, 22, 90, 113, 116, 140, 248, 250, 237, 203, 21, 172, 151, 67, 10, 2, 30, 12, 8, 155, 224, 173, 131, 126, 129, 167, 119, 214, 207, 126, 15, 110, 171, 100, 81, 197, 60, 127, 189, 41, 99, 216, 2, 97, 107, 232, 56, 88, 36, 142, 103, 147, 189, 104, 112, 253, 100, 127, 222, 25, 203, 195, 185, 234, 225, 136, 193, 158, 86, 232, 197, 209, 231, 219, 157, 39, 226, 70, 81, 30, 237, 48, 177, 245, 36, 211, 31, 198, 26, 73, 187, 73, 233, 31, 69, 239, 195, 139, 76, 184, 129, 28, 122, 176, 55, 118, 233, 172, 71, 13, 49, 138, 180, 103, 101, 75, 19, 73, 165, 137, 137, 174, 204, 184, 39, 92, 206, 187, 5, 40, 15, 35, 38, 219, 182, 186, 140, 93, 213, 211, 186, 242, 58, 194, 21, 113, 153, 139, 240, 64, 231, 62, 80, 201, 112, 57, 19, 37, 244, 21, 130, 35, 17, 55, 104, 14, 225, 95, 99, 243, 131, 90, 85, 113, 186, 96, 185, 149, 182, 144, 173, 63, 0, 177, 97, 29, 164, 172, 114, 215, 221, 83, 246, 204, 225, 94, 36, 40, 163, 190, 32, 230, 128, 160, 197, 28, 92, 38, 189, 145, 30, 205, 190, 106, 229, 12, 209, 48, 137, 199, 51, 10, 39, 136, 192, 51, 45, 252, 194, 158, 188, 230, 102, 149, 60, 196, 38, 231, 152, 10, 13, 4, 56, 54, 144, 187, 131, 42, 101, 51, 197, 125, 47, 186, 220, 78, 202, 206, 93, 221, 159, 51, 205, 208, 212, 138, 133, 176, 220, 144, 3, 81, 251, 58, 154, 88, 246, 209, 181, 195, 39, 247, 64, 126, 132, 189, 170, 142, 91, 49, 10, 87, 59, 134, 67, 165, 118, 125, 235, 222, 157, 137, 237, 187, 174, 0, 176, 187, 184, 167, 255, 111, 208, 133, 124, 200, 240, 253, 107, 145, 32, 0, 102, 183, 37, 211, 197, 247, 231, 190, 139, 248, 117, 239, 12, 94, 117, 225, 95, 136, 76, 99, 205, 92, 185, 3, 3, 239, 226, 226, 113, 152, 4, 165, 173, 220, 175, 163, 145, 240, 60, 150, 130, 205, 85, 25, 216, 132, 114, 59, 239, 233, 225, 115, 34, 57, 245, 3, 101, 0, 223, 14, 48, 28, 162, 236, 42, 64, 82, 1, 137, 213, 166, 14, 183, 151, 226, 253, 61, 211, 255, 191, 109, 3, 213, 156, 54, 97, 197, 214, 141, 143, 65, 65, 184, 23, 188, 203, 138, 232, 126, 98, 59, 43, 45, 67, 136, 199, 95, 129, 249, 232, 184, 168, 225, 177, 144, 28, 251, 92, 132, 34, 174, 235, 137, 157, 131, 178, 45, 226, 200, 92, 115, 210, 38, 48, 98, 62, 234, 8, 246, 42, 111, 134, 19, 132, 127, 228, 12, 62, 106, 92, 61, 55, 110, 60, 211, 20, 202, 101, 49, 82, 217, 103, 240, 70, 207, 88, 102, 97, 127, 154, 226, 142, 27, 5, 166, 229, 193, 244, 139, 27, 194, 7, 246, 186, 38, 1, 92, 202, 170, 12, 236, 77, 230, 21, 181, 110, 124, 210, 215, 96, 23, 192, 84, 102, 127, 73, 166, 109, 160, 231, 35, 213, 8, 31, 205, 144, 255, 157, 143, 32, 180, 149, 122, 81, 179, 244, 114, 7, 11, 159, 187, 172, 201, 38, 100, 192, 226, 59, 117, 111, 61, 4, 161, 86, 109, 176, 249, 229, 144, 149, 57, 217, 163, 126, 14, 170, 187, 232, 134, 236, 135, 231, 22, 194, 244, 15, 230, 34, 58, 82, 120, 244, 210, 136, 203, 42, 150, 160, 140, 233, 207, 97, 151, 108, 42, 122, 184, 63, 125, 77, 96, 76, 95, 55, 171, 100, 67, 96, 1, 219, 221, 27, 155, 1, 238, 122, 35, 42, 209, 116, 209, 15, 78, 40, 159, 23, 237, 123, 145, 95, 115, 90, 64, 87, 81, 75, 141, 247, 236, 32, 44, 13, 62, 178, 79, 58, 153, 134, 236, 149, 55, 204, 218, 217, 13, 207, 151, 243, 221, 52, 187, 88, 66, 25, 197, 160, 98, 221, 114, 71, 217, 149, 151, 117, 210, 174, 127, 186, 157, 52, 227, 197, 78, 55, 204, 11, 94, 233, 0, 231, 135, 18, 112, 126, 165, 27, 211, 137, 168, 183, 43, 55, 249, 174, 10, 131, 88, 9, 90, 85, 152, 56, 14, 46, 111, 114, 253, 126, 58, 28, 69, 44, 84, 227, 66, 111, 133, 173, 172, 121, 218, 172, 133, 190, 136, 20, 133, 51, 22, 10, 212, 91, 127, 250, 12, 7, 60, 213, 177, 143, 243, 16, 43, 106, 167, 223, 158, 211, 138, 30, 183, 95, 169, 33, 204, 123, 108, 29, 62, 128, 188, 135, 70, 81, 214, 102, 112, 47, 165, 15, 251, 153, 204, 26, 186, 183, 28, 38, 208, 8, 31, 250, 205, 220, 107, 143, 52, 203, 74, 252, 211, 85, 225, 244, 91, 161, 201, 208, 81, 145, 102, 205, 221, 226, 157, 89, 191, 27, 36, 148, 222, 159, 175, 88, 67, 184, 233, 155, 181, 47, 103, 180, 200, 9, 81, 76, 169, 16, 233, 47, 247, 227, 137, 26, 76, 74, 65, 65, 250, 10, 45, 162, 237, 153, 161, 114, 224, 225, 159, 18, 195, 81, 133, 118, 175, 75, 208, 160, 103, 79, 54, 60, 70, 177, 81, 101, 15, 234, 208, 19, 123, 198, 142, 209, 121, 120, 124, 234, 217, 196, 145, 147, 120, 109, 46, 137, 72, 0, 213, 134, 98, 105, 254, 220, 241, 241, 253, 185, 222, 224, 109, 119, 243, 153, 247, 59, 90, 219, 232, 30, 235, 99, 195, 10, 215, 61, 60, 253, 155, 90, 245, 75, 171, 101, 254, 89, 71, 22, 229, 75, 126, 189, 182, 15, 83, 120, 171, 119, 147, 170, 188, 29, 229, 98, 48, 150, 67, 45, 69, 253, 50, 239, 242, 154, 46, 189, 114, 72, 51, 77, 227, 116, 183, 79, 190, 245, 28, 23, 255, 226, 187, 237, 120, 35, 180, 192, 124, 15, 239, 92, 109, 202, 254, 54, 47, 85, 7, 6, 27, 196, 242, 125, 80, 33, 219, 241, 47, 21, 62, 225, 138, 26, 11, 136, 75, 186, 181, 206, 3, 220, 41, 43, 218, 98, 2, 105, 210, 33, 170, 74, 233, 58, 120, 117, 125, 231, 85, 88, 81, 240, 107, 40, 136, 123, 9, 101, 178, 91, 90, 209, 44, 114, 209, 242, 124, 97, 240, 111, 121, 34, 254, 2, 214, 202, 178, 203, 220, 129, 152, 7, 76, 23, 133, 107, 235, 15, 151, 231, 115, 223, 204, 206, 115, 203, 249, 140, 113, 73, 161, 254, 205, 10, 188, 40, 175, 35, 69, 215, 6, 81, 144, 221, 161, 25, 46, 102, 34, 36, 245, 202, 124, 77, 238, 140, 37, 178, 112, 12, 72, 219, 221, 205, 139, 137, 85, 91, 120, 208, 173, 210, 53, 45, 211, 59, 223, 91, 226, 199, 173, 168, 84, 22, 141, 220, 93, 241, 219, 205, 245, 121, 112, 183, 193, 31, 80, 234, 53, 241, 185, 4, 169, 43, 90, 114, 237, 55, 240, 132, 60, 63, 136, 101, 55, 11, 199, 192, 21, 91, 191, 76, 8, 176, 120, 110, 36, 96, 22, 118, 182, 84, 55, 108, 55, 209, 149, 165, 153, 252, 87, 6, 175, 54, 183, 156, 227, 155, 68, 15, 189, 133, 153, 136, 188, 22, 244, 183, 194, 235, 17, 243, 154, 238, 62, 76, 28, 211, 21, 164, 180, 193, 160, 32, 135, 185, 159, 19, 161, 189, 188, 231, 180, 68, 55, 100, 4, 32, 79, 37, 176, 32, 199, 228, 213, 248, 63, 251, 1, 1, 54, 239, 36, 222, 161, 4, 21, 154, 91, 187, 229, 168, 105, 108, 255, 110, 184, 110, 140, 220, 56, 56, 48, 173, 33, 76, 81, 79, 206, 155, 42, 17, 231, 204, 38, 247, 202, 119, 250, 249, 224, 194, 250, 250, 128, 213, 94, 56, 209, 220, 33, 112, 52, 243, 163, 244, 138, 214, 0, 174, 65, 81, 196, 71, 80, 208, 66, 91, 229, 242, 117, 132, 174, 12, 150, 127, 31, 234, 15, 57, 35, 190, 254, 79, 211, 24, 183, 219, 132, 108, 85, 183, 224, 229, 222, 100, 149, 181, 97, 176, 156, 159, 185, 50, 254, 166, 214, 149, 72, 231, 94, 3, 134, 65, 52, 27, 137, 233, 57, 165, 61, 168, 193, 242, 235, 188, 37, 29, 109, 209, 235, 42, 118, 37, 176, 209, 216, 133, 130, 43, 240, 200, 69, 140, 116, 113, 66, 11, 52, 69, 135, 8, 222, 63, 233, 24, 209, 108, 154, 225, 253, 246, 162, 189, 127, 12, 84, 224, 109, 191, 47, 142, 67, 139, 55, 170, 223, 39, 169, 235, 153, 140, 202, 120, 49, 172, 197, 85, 202, 113, 72, 132, 146, 58, 51, 248, 23, 177, 148, 172, 150, 196, 81, 214, 139, 83, 100, 232, 106, 54, 35, 214, 147, 24, 0, 61, 228, 8, 216, 148, 144, 128, 10, 74, 224, 25, 211, 63, 89, 75, 92, 14, 138, 242, 200, 93, 48, 33, 185, 148, 151, 96, 7, 157, 103, 134, 69, 88, 39, 239, 117, 44, 119, 133, 227, 108, 227, 182, 39, 11, 81, 195, 28, 123, 204, 41, 112, 63, 129, 254, 45, 49, 200, 31, 168, 146, 49, 18, 77, 124, 163, 160, 202, 159, 118, 7, 135, 171, 207, 16, 198, 100, 128, 129, 172, 31, 99, 95, 73, 108, 204, 179, 211, 200, 14, 56, 100, 209, 79, 108, 141, 127, 80, 179, 161, 27, 58, 104, 221, 43, 167, 140, 95, 27, 49, 163, 34, 16, 254, 124, 89, 117, 147, 173, 143, 1, 122, 172, 159, 234, 87, 64, 208, 83, 105, 76, 182, 120, 176, 170, 196, 23, 174, 23, 28, 31, 93, 128, 68, 6, 237, 205, 221, 197, 253, 155, 15, 233, 142, 8, 40, 139, 200, 35, 229, 139, 95, 118, 106, 215, 90, 6, 78, 207, 232, 152, 177, 151, 87, 247, 74, 233, 223, 169, 220, 0, 149, 172, 174, 250, 229, 82, 241, 39, 96, 23, 157, 104, 10, 99, 139, 38, 88, 241, 153, 190, 121, 243, 37, 57, 168, 240, 20, 113, 250, 187, 147, 47, 150, 32, 114, 202, 248, 104, 38, 229, 44, 0, 0, 169, 199, 17, 248, 244, 97, 23, 120, 28, 16, 13, 181, 42, 237, 99, 237, 56, 91, 99, 42, 133, 228, 214, 106, 243, 211, 86, 88, 194, 230, 154, 217, 40, 232, 33, 112, 157, 135, 184, 172, 155, 143, 216, 97, 186, 179, 72, 63, 28, 27, 141, 56, 58, 229, 69, 36, 20, 198, 41, 109, 108, 141, 205, 125, 88, 173, 64, 0, 137, 138, 193, 33, 183, 85, 147, 33, 113, 243, 121, 21, 209, 252, 210, 37, 152, 65, 3, 224, 144, 122, 190, 190, 125, 241, 70, 223, 137, 70, 251, 208, 196, 212, 109, 48, 219, 72, 185, 141, 171, 205, 96, 244, 175, 84, 224, 253, 229, 213, 121, 9, 194, 202, 134, 101, 25, 198, 67, 41, 254, 82, 189, 224, 55, 70, 171, 6, 249, 215, 137, 125, 197, 197, 10, 84, 88, 128, 69, 39, 81, 110, 163, 136, 175, 233, 176, 253, 74, 36, 255, 208, 0, 218, 9, 34, 66, 69, 123, 77, 170, 159, 42, 113, 217, 81, 45, 64, 168, 167, 50, 81, 63, 239, 210, 194, 83, 115, 66, 208, 170, 184, 195, 7, 173, 194, 107, 7, 120, 7, 228, 65, 104, 90, 82, 123, 221, 184, 221, 42, 219, 109, 242, 17, 133, 126, 186, 76, 175, 98, 55, 197, 141, 63, 98, 9, 172, 26, 237, 179, 20, 61, 32, 55, 10, 114, 171, 238, 125, 9, 16, 165, 76, 105, 30, 161, 122, 25, 43, 249, 220, 202, 191, 25, 5, 177, 249, 113, 96, 184, 176, 170, 117, 245, 229, 249, 190, 211, 197, 53, 86, 110, 189, 243, 221, 95, 197, 137, 245, 113, 44, 34, 140, 186, 88, 88, 215, 176, 29, 67, 180, 105, 99, 22, 100, 17, 116, 223, 77, 7, 65, 8, 215, 61, 32, 213, 86, 165, 109, 109, 8, 250, 11, 133, 142, 107, 184, 55, 2, 212, 141, 27, 182, 54, 189, 195, 195, 76, 210, 173, 117, 82, 134, 185, 54, 12, 117, 212, 176, 206, 69, 139, 56, 72, 24, 66, 141, 196, 68, 224, 61, 57, 137, 52, 187, 130, 165, 40, 140, 252, 131, 255, 234, 132, 76, 207, 167, 58, 233, 85, 59, 127, 46, 221, 90, 19, 67, 141, 122, 91, 150, 181, 97, 62, 78, 98, 108, 201, 134, 75, 50, 136, 146, 196, 236, 95, 88, 71, 103, 46, 212, 254, 245, 72, 214, 110, 174, 8, 205, 161, 2, 206, 125, 237, 72, 206, 135, 107, 72, 180, 236, 69, 239, 98, 16, 12, 23, 152, 115, 119, 247, 21, 219, 69, 96, 223, 174, 39, 74, 97, 243, 36, 182, 0, 163, 0, 79, 245, 127, 195, 136, 29, 181, 193, 80, 225, 211, 34, 52, 223, 42, 114, 249, 17, 254, 22, 175, 57, 95, 193, 55, 17, 234, 199, 184, 7, 87, 96, 6, 123, 67, 15, 253, 44, 60, 90, 15, 145, 104, 61, 133, 250, 173, 155, 29, 239, 162, 197, 0, 186, 217, 158, 181, 241, 50, 52, 30, 249, 20, 90, 207, 177, 65, 133, 121, 66, 185, 105, 146, 23, 107, 195, 187, 45, 193, 240, 1, 0, 100, 240, 117, 66, 21, 131, 89, 31, 30, 188, 246, 26, 213, 23, 97, 206, 195, 132, 71, 94, 172, 72, 41, 106, 24, 101, 230, 14, 60, 86, 164, 15, 180, 191, 139, 64, 95, 24, 53, 169, 22, 228, 222, 159, 96, 249, 74, 190, 201, 54, 188, 101, 184, 132, 52, 68, 125, 254, 19, 230, 245, 100, 177, 226, 53, 50, 235, 178, 133, 71, 211, 36, 182, 4, 68, 108, 182, 1, 49, 174, 207, 140, 103, 64, 145, 32, 253, 103, 244, 1, 61, 52, 19, 242, 176, 110, 244, 212, 62, 135, 191, 123, 10, 136, 254, 232, 30, 168, 3, 57, 110, 247, 96, 240, 30, 203, 17, 142, 46, 38, 3, 153, 87, 7, 166, 22, 76, 1, 26, 179, 100, 142, 174, 127, 83, 219, 170, 81, 149, 26, 207, 39, 215, 178, 196, 16, 249, 238, 103, 138, 102, 85, 49, 239, 140, 98, 93, 223, 245, 170, 173, 251, 161, 240, 198, 177, 11, 53, 141, 138, 18, 87, 200, 123, 26, 134, 235, 41, 77, 105, 192, 60, 250, 168, 116, 57, 97, 133, 214, 58, 243, 193, 163, 145, 222, 87, 221, 207, 42, 249, 68, 194, 192, 63, 226, 147, 181, 163, 12, 192, 131, 158, 42, 65, 63, 215, 191, 113, 166, 84, 205, 123, 147, 197, 124, 137, 27, 251, 136, 252, 41, 92, 30, 13, 44, 21, 150, 96, 139, 32, 116, 69, 185, 54, 22, 137, 48, 74, 23, 95, 76, 234, 232, 197, 219, 12, 45, 25, 158, 43, 226, 28, 249, 159, 30, 98, 236, 10, 79, 143, 72, 116, 187, 158, 68, 125, 222, 161, 67, 162, 225, 254, 189, 254, 60, 216, 204, 26, 137, 107, 35, 121, 226, 169, 140, 165, 225, 160, 30, 162, 21, 22, 104, 89, 16, 220, 136, 19, 253, 22, 164, 10, 113, 253, 117, 188, 245, 194, 80, 78, 158, 112, 223, 158, 205, 49, 21, 218, 93, 66, 73, 84, 44, 180, 246, 183, 189, 84, 61, 239, 209, 203, 7, 85, 29, 196, 175, 188, 220, 116, 243, 86, 16, 196, 163, 102, 183, 191, 92, 175, 147, 207, 59, 207, 217, 65, 98, 135, 1, 45, 232, 205, 96, 131, 144, 72, 61, 172, 16, 36, 149, 213, 105, 39, 48, 216, 102, 201, 231, 240, 252, 118, 140, 59, 36, 196, 201, 67, 23, 30, 209, 41, 250, 178, 89, 36, 207, 228, 93, 6, 175, 9, 108, 40, 86, 140, 178, 162, 73, 227, 187, 144, 55, 20, 247, 40, 67, 169, 28, 115, 147, 251, 143, 235, 88, 48, 50, 57, 149, 173, 35, 49, 72, 66, 40, 20, 54, 66, 7, 67, 162, 157, 165, 194, 99, 253, 155, 23, 217, 160, 245, 126, 80, 110, 144, 211, 115, 103, 172, 67, 123, 166, 149, 241, 193, 12, 220, 1, 121, 141, 108, 75, 239, 209, 65, 214, 219, 121, 176, 82, 241, 175, 33, 44, 116, 68, 229, 91, 97, 151, 244, 208, 182, 214, 175, 220, 173, 49, 82, 95, 172, 63, 227, 44, 111, 50, 125, 248, 180, 243, 182, 186, 107, 131, 191, 50, 141, 138, 235, 89, 17, 71, 148, 110, 5, 247, 215, 154, 23, 242, 243, 178, 6, 191, 149, 201, 42, 198, 50, 254, 93, 163, 0, 27, 190, 60, 158, 105, 123, 157, 102, 25, 244, 10, 25, 126, 90, 155, 179, 160, 7, 27, 25, 61, 139, 66, 50, 114, 93, 247, 193, 200, 43, 227, 126, 115, 172, 56, 163, 228, 181, 2, 193, 71, 129, 30, 119, 197, 234, 7, 139, 180, 74, 102, 51, 35, 85, 7, 132, 21, 76, 119, 162, 9, 149, 173, 177, 90, 4, 138, 221, 49, 178, 15, 224, 205, 120, 149, 229, 221, 253, 72, 166, 249, 54, 180, 43, 218, 204, 52, 175, 15, 224, 132, 168, 143, 170, 42, 94, 186, 65, 217, 188, 103, 214, 41, 93, 65, 95, 72, 203, 81, 42, 71, 140, 59, 190, 122, 50, 12, 127, 65, 58, 229, 183, 32, 30, 111, 192, 103, 210, 207, 12, 76, 146, 47, 123, 10, 107, 194, 10, 215, 103, 128, 118, 54, 67, 166, 119, 208, 166, 64, 95, 212, 248, 226, 161, 6, 9, 25, 28, 75, 225, 118, 201, 229, 147, 104, 242, 94, 101, 82, 89, 129, 106, 11, 114, 158, 107, 49, 173, 29, 39, 239, 142, 7, 27, 209, 42, 167, 103, 56, 96, 168, 173, 73, 39, 229, 72, 249, 91, 146, 203, 204, 193, 151, 1, 8, 129, 84, 40, 101, 236, 209, 241, 189, 39, 128, 223, 203, 109, 151, 102, 95, 193, 98, 50, 38, 83, 217, 179, 60, 72, 24, 101, 110, 160, 137, 155, 255, 185, 232, 60, 120, 14, 19, 84, 59, 193, 237, 107, 157, 252, 214, 245, 170, 216, 126, 148, 206, 86, 62, 121, 1, 181, 79, 25, 43, 188, 229, 168, 21, 103, 232, 190, 139, 110, 126, 166, 152, 19, 253, 80, 223, 216, 10, 132, 87, 179, 127, 218, 206, 136, 12, 7, 102, 243, 140, 173, 155, 50, 54, 107, 82, 193, 17, 244, 79, 165, 232, 44, 107, 205, 40, 51, 230, 147, 221, 168, 147, 86, 221, 139, 124, 80, 76, 93, 175, 70, 198, 32, 53, 225, 104, 121, 70, 114, 201, 69, 91, 37, 230, 138, 172, 250, 65, 174, 193, 177, 109, 90, 96, 83, 34, 35, 63, 223, 99, 188, 124, 231, 64, 130, 124, 168, 77, 150, 40, 95, 98, 227, 28, 46, 208, 59, 165, 252, 162, 181, 156, 3, 155, 26, 187, 28, 13, 217, 77, 137, 192, 68, 223, 52, 118, 10, 179, 62, 91, 229, 30, 80, 39, 140, 213, 11, 17, 141, 89, 129, 175, 40, 99, 174, 190, 38, 202, 73, 150, 129, 21, 225, 215, 154, 151, 195, 233, 27, 99, 78, 44, 181, 116, 227, 77, 70, 120, 102, 47, 146, 133, 136, 136, 165, 12, 75, 104, 139, 128, 131, 140, 85, 187, 105, 166, 202, 184, 160, 170, 54, 247, 95, 200, 178, 165, 193, 116, 241, 44, 16, 58, 116, 176, 67, 147, 205, 39, 232, 135, 63, 18, 37, 88, 168, 48, 155, 153, 108, 83, 70, 76, 187, 255, 13, 53, 20, 86, 227, 192, 88, 199, 49, 155, 199, 109, 184, 57, 67, 113, 86, 203, 234, 131, 44, 56, 7, 200, 59, 35, 73, 221, 90, 84, 10, 123, 67, 8, 35, 6, 31, 225, 176, 187, 173, 183, 61, 98, 127, 136, 78, 0, 227, 242, 74, 158, 11, 156, 245, 168, 51, 185, 218, 182, 155, 249, 13, 183, 203, 112, 250, 204, 113, 57, 183, 130, 92, 234, 152, 68, 216, 124, 109, 48, 236, 60, 106, 113, 160, 73, 7, 33, 44, 93, 7, 14, 145, 52, 19, 33, 2, 76, 68, 116, 195, 181, 203, 216, 100, 241, 217, 109, 150, 48, 149, 36, 162, 92, 109, 237, 187, 60, 99, 229, 157, 205, 22, 132, 21, 65, 144, 61, 193, 220, 162, 69, 150, 82, 130, 138, 138, 45, 138, 38, 172, 72, 211, 236, 170, 108, 11, 128, 52, 180, 151, 128, 176, 29, 235, 236, 187, 54, 193, 226, 154, 14, 14, 175, 126, 240, 254, 46, 50, 119, 153, 115, 42, 126, 217, 155, 252, 164, 123, 203, 190, 66, 29, 59, 86, 152, 110, 90, 28, 13, 146, 47, 243, 47, 55, 91, 72, 136, 96, 211, 122, 226, 14, 75, 45, 223, 177, 81, 16, 234, 54, 107, 230, 183, 23, 92, 126, 223, 103, 80, 157, 204, 108, 181, 74, 16, 198, 61, 208, 148, 211, 179, 161, 88, 116, 73, 30, 52, 133, 77, 200, 187, 216, 159, 205, 122, 214, 206, 125, 216, 23, 186, 52, 23, 60, 66, 239, 189, 24, 40, 250, 230, 113, 53, 221, 123, 21, 33, 143, 247, 250, 23, 32, 87, 122, 193, 30, 239, 208, 240, 165, 221, 24, 167, 26, 168, 9, 254, 131, 220, 160, 102, 179, 84, 152, 208, 183, 214, 253, 29, 102, 109, 193, 234, 55, 205, 48, 14, 208, 63, 22, 49, 123, 92, 141, 127, 249, 162, 126, 207, 115, 73, 89, 205, 80, 119, 131, 113, 88, 159, 232, 98, 132, 157, 125, 75, 145, 244, 166, 207, 145, 4, 3, 112, 186, 217, 158, 207, 31, 55, 31, 38, 68, 122, 130, 196, 69, 25, 232, 224, 85, 116, 123, 9, 175, 66, 246, 55, 193, 170, 102, 184, 12, 108, 47, 33, 71, 181, 225, 65, 218, 154, 235, 182, 66, 183, 33, 101, 205, 116, 29, 45, 35, 1, 132, 226, 205, 209, 114, 171, 140, 24, 45, 2, 195, 178, 95, 218, 142, 149, 18, 96, 17, 109, 171, 45, 153, 116, 77, 210, 19, 213, 197, 108, 15, 148, 22, 78, 169, 153, 194, 166, 214, 139, 70, 49, 24, 1, 179, 222, 164, 188, 116, 178, 134, 92, 193, 177, 203, 100, 5, 210, 104, 57, 32, 142, 198, 115, 99, 206, 130, 214, 164, 173, 95, 170, 120, 17, 62, 57, 19, 252, 245, 178, 83, 230, 137, 71, 207, 32, 211, 114, 156, 94, 228, 213, 239, 32, 2, 136, 219, 182, 34, 184, 25, 116, 103, 229, 172, 63, 54, 148, 195, 20, 176, 230, 133, 206, 59, 36, 203, 16, 84, 115, 22, 98, 147, 43, 227, 15, 133, 246, 0, 167, 12, 85, 115, 48, 2, 119, 190, 224, 83, 131, 253, 142, 31, 253, 10, 11, 63, 170, 62, 119, 88, 6, 254, 39, 190, 122, 232, 102, 166, 118, 58, 211, 194, 126, 206, 195, 97, 233, 237, 185, 26, 149, 229, 241, 203, 225, 88, 104, 1, 105, 88, 237, 249, 172, 106, 136, 82, 121, 169, 98, 220, 5, 203, 192, 104, 115, 196, 115, 186, 147, 227, 81, 88, 95, 222, 208, 176, 5, 184, 55, 88, 105, 178, 154, 104, 122, 235, 253, 102, 88, 40, 114, 135, 87, 23, 12, 123, 140, 24, 247, 75, 105, 79, 213, 159, 159, 28, 122, 99, 59, 217, 124, 107, 221, 241, 6, 102, 117, 214, 10, 202, 242, 114, 252, 62, 188, 230, 207, 137, 190, 19, 65, 17, 106, 140, 255, 56, 138, 163, 19, 50, 142, 86, 33, 71, 173, 107, 139, 179, 64, 52, 104, 137, 160, 122, 59, 255, 105, 248, 38, 34, 149, 33, 60, 113, 108, 247, 158, 121, 222, 230, 176, 155, 228, 213, 63, 136, 79, 35, 46, 176, 82, 252, 110, 40, 171, 53, 143, 124, 114, 141, 244, 7, 83, 196, 167, 163, 22, 113, 42, 113, 10, 50, 48, 69, 63, 80, 251, 151, 43, 176, 252, 137, 183, 184, 68, 47, 219, 195, 131, 20, 157, 129, 238, 199, 238, 230, 244, 183, 67, 214, 209, 89, 183, 250, 167, 122, 123, 186, 215, 126, 135, 65, 110, 89, 211, 105, 231, 130, 143, 246, 229, 204, 145, 61, 85, 91, 151, 147, 87, 73, 109, 183, 209, 228, 10, 9, 4, 127, 182, 145, 180, 13, 184, 15, 153, 71, 94, 248, 170, 70, 131, 18, 108, 212, 224, 250, 134, 231, 59, 134, 176, 203, 217, 40, 48, 129, 200, 124, 154, 123, 83, 59, 33, 216, 176, 129, 42, 143, 88, 92, 191, 20, 217, 92, 50, 91, 24, 170, 13, 237, 205, 32, 96, 70, 123, 138, 133, 133, 61, 236, 87, 243, 238, 126, 224, 180, 211, 117, 38, 83, 139, 62, 154, 74, 147, 164, 67, 24, 179, 144, 225, 81, 207, 51, 188, 65, 5, 102, 103, 236, 233, 60, 188, 249, 16, 60, 84, 34, 223, 253, 104, 136, 79, 194, 126, 224, 15, 58, 211, 47, 67, 8, 14, 83, 103, 207, 93, 206, 93, 210, 205, 92, 208, 31, 28, 130, 244, 26, 2, 235, 48, 118, 33, 48, 221, 239, 177, 112, 170, 38, 175, 29, 123, 7, 211, 106, 116, 185, 141, 93, 233, 6, 20, 239, 119, 79, 255, 58, 140, 242, 95, 135, 226, 11, 174, 234, 244, 24, 254, 4, 173, 72, 255, 22, 231, 48, 125, 88, 125, 98, 76, 195, 179, 249, 155, 71, 188, 70, 102, 94, 195, 105, 40, 180, 61, 22, 22, 31, 196, 194, 212, 31, 37, 114, 142, 209, 60, 86, 43, 1, 181, 63, 58, 13, 137, 138, 213, 163, 62, 248, 108, 122, 64, 232, 130, 36, 212, 234, 69, 105, 169, 189, 227, 76, 190, 154, 17, 100, 72, 113, 238, 223, 132, 237, 238, 167, 215, 212, 164, 46, 53, 148, 184, 213, 251, 223, 17, 19, 74, 213, 111, 106, 78, 121, 102, 206, 158, 87, 87, 121, 30, 65, 193, 7, 78, 199, 47, 22, 20, 197, 178, 237, 146, 90, 136, 175, 164, 249, 9, 219, 225, 89, 209, 117, 43, 63, 111, 247, 51, 13, 58, 125, 121, 99, 90, 210, 18, 101, 149, 134, 83, 202, 57, 34, 54, 153, 198, 189, 171, 58, 110, 110, 187, 153, 34, 196, 50, 134, 253, 215, 194, 192, 249, 167, 155, 33, 62, 156, 67, 168, 32, 111, 250, 134, 180, 221, 176, 209, 1, 122, 253, 12, 156, 137, 15, 10, 230, 205, 179, 21, 212, 199, 17, 49, 183, 186, 168, 155, 240, 49, 132, 54, 34, 201, 182, 134, 73, 241, 142, 33, 176, 223, 20, 39, 33, 70, 68, 153, 19, 155, 31, 160, 215, 110, 13, 190, 82, 165, 141, 150, 97, 111, 116, 82, 148, 195, 129, 181, 138, 139, 205, 232, 29, 90, 228, 131, 169, 72, 125, 124, 230, 215, 169, 217, 230, 75, 192, 179, 24, 115, 129, 204, 21, 73, 152, 132, 159, 75, 185, 105, 191, 35, 234, 208, 0, 71, 110, 148, 162, 198, 214, 226, 6, 45, 89, 184, 149, 115, 107, 247, 75, 39, 109, 233, 12, 214, 73, 89, 98, 155, 223, 122, 247, 77, 207, 127, 148, 160, 177, 181, 196, 95, 31, 188, 204, 173, 82, 48, 3, 166, 60, 167, 248, 249, 127, 158, 160, 62, 244, 93, 34, 212, 76, 143, 99, 142, 67, 115, 213, 111, 73, 71, 168, 188, 73, 92, 74, 183, 239, 164, 125, 176, 148, 129, 10, 224, 99, 221, 48, 203, 172, 9, 234, 80, 16, 226, 60, 139, 241, 153, 65, 246, 227, 231, 242, 130, 88, 114, 52, 76, 218, 20, 11, 230, 19, 155, 165, 99, 170, 115, 82, 125, 23, 192, 59, 30, 125, 61, 137, 68, 118, 228, 75, 8, 108, 243, 151, 223, 104, 26, 13, 71, 252, 102, 49, 126, 243, 141, 106, 72, 247, 125, 67, 90, 158, 149, 9, 99, 119, 168, 54, 150, 68, 190, 68, 35, 57, 184, 192, 122, 75, 62, 15, 66, 43, 23, 109, 169, 91, 83, 57, 223, 173, 29, 218, 246, 190, 139, 248, 144, 2, 55, 102, 49, 212, 201, 119, 7, 24, 170, 236, 17, 32, 114, 126, 26, 72, 16, 60, 63, 108, 2, 135, 209, 116, 60, 180, 52, 206, 55, 70, 57, 33, 86, 249, 204, 208, 60, 238, 17, 228, 94, 135, 41, 141, 129, 111, 155, 36, 197, 55, 168, 146, 38, 50, 102, 103, 67, 233, 161, 15, 60, 131, 254, 1, 100, 89, 162, 242, 251, 59, 139, 163, 114, 57, 158, 17, 168, 54, 101, 206, 21, 217, 3, 119, 187, 48, 38, 152, 116, 132, 247, 127, 99, 80, 211, 149, 15, 245, 26, 193, 158, 93, 4, 158, 214, 39, 91, 208, 212, 147, 11, 136, 217, 128, 224, 109, 13, 36, 103, 43, 157, 197, 163, 254, 229, 244, 159, 180, 241, 46, 77, 203, 200, 210, 6, 47, 78, 210, 220, 208, 123, 193, 237, 134, 153, 107, 70, 131, 210, 125, 199, 99, 140, 70, 219, 146, 125, 62, 83, 21, 58, 3, 133, 132, 233, 248, 114, 133, 112, 65, 213, 0, 88, 105, 233, 116, 148, 228, 3, 118, 142, 77, 234, 118, 66, 93, 229, 145, 78, 165, 73, 21, 154, 104, 139, 10, 213, 69, 169, 163, 116, 44, 167, 240, 122, 238, 163, 238, 151, 172, 18, 215, 9, 172, 17, 160, 131, 130, 53, 188, 35, 247, 234, 90, 45, 214, 139, 183, 110, 187, 228, 243, 131, 212, 72, 91, 191, 212, 224, 247, 191, 115, 100, 81, 210, 233, 169, 133, 0, 227, 217, 145, 61, 119, 226, 160, 143, 115, 140, 246, 68, 23, 245, 95, 238, 37, 148, 11, 240, 165, 242, 201, 180, 180, 142, 48, 66, 202, 77, 186, 112, 145, 130, 231, 65, 124, 184, 83, 55, 132, 101, 171, 131, 222, 201, 35, 166, 186, 69, 175, 75, 121, 36, 172, 152, 9, 16, 0, 250, 122, 170, 88, 161, 100, 229, 139, 59, 11, 8, 88, 25, 159, 8, 210, 111, 117, 52, 199, 28, 35, 21, 24, 87, 20, 128, 83, 113, 170, 222, 50, 104, 234, 36, 140, 245, 141, 137, 210, 245, 229, 199, 198, 205, 104, 93, 220, 213, 148, 106, 141, 26, 251, 119, 252, 4, 73, 129, 25, 218, 110, 181, 87, 0, 240, 9, 209, 107, 83, 131, 241, 251, 160, 96, 236, 240, 228, 27, 154, 38, 35, 2, 52, 155, 35, 252, 196, 49, 65, 86, 126, 140, 211, 184, 83, 143, 50, 10, 182, 177, 122, 119, 147, 202, 184, 79, 150, 138, 253, 159, 81, 33, 188, 10, 56, 235, 109, 165, 205, 48, 33, 187, 219, 34, 42, 204, 115, 98, 198, 90, 20, 241, 67, 207, 35, 76, 204, 179, 124, 11, 216, 70, 68, 75, 206, 93, 24, 103, 189, 229, 13, 149, 37, 165, 223, 216, 139, 17, 39, 154, 99, 20, 238, 54, 25, 45, 156, 109, 4, 190, 60, 39, 182, 251, 16, 31, 206, 157, 123, 94, 228, 120, 221, 124, 204, 147, 185, 121, 16, 30, 21, 31, 244, 98, 121, 192, 248, 100, 191, 173, 193, 84, 137, 173, 247, 7, 241, 199, 209, 63, 41, 191, 62, 225, 121, 100, 157, 141, 75, 190, 205, 250, 181, 191, 145, 89, 169, 183, 155, 158, 248, 232, 73, 79, 56, 210, 27, 160, 66, 194, 251, 194, 130, 3, 150, 84, 27, 138, 221, 41, 53, 119, 168, 47, 137, 190, 73, 42, 35, 82, 66, 148, 21, 149, 227, 172, 248, 118, 136, 71, 173, 165, 109, 138, 94, 18, 178, 90, 112, 99, 208, 74, 254, 74, 185, 136, 93, 131, 189, 36, 221, 247, 190, 242, 50, 232, 82, 247, 11, 229, 179, 122, 157, 215, 46, 109, 64, 71, 100, 226, 69, 28, 41, 57, 225, 19, 217, 109, 161, 228, 161, 209, 15, 110, 234, 206, 95, 159, 29, 150, 207, 86, 191, 240, 254, 19, 65, 20, 251, 126, 89, 136, 57, 73, 252, 23, 139, 139, 248, 165, 205, 2, 213, 239, 226, 107, 6, 35, 86, 20, 134, 162, 96, 153, 103, 116, 185, 163, 123, 29, 42, 12, 56, 84, 12, 254, 89, 216, 57, 144, 12, 216, 10, 101, 242, 133, 244, 176, 41, 86, 162, 11, 170, 140, 175, 133, 196, 106, 109, 10, 10, 250, 206, 35, 154, 29, 50, 172, 222, 252, 36, 63, 38, 110, 92, 188, 239, 228, 118, 113, 220, 114, 247, 1, 158, 98, 76, 227, 233, 174, 56, 70, 193, 41, 201, 148, 222, 74, 252, 105, 148, 249, 120, 150, 204, 254, 144, 218, 219, 213, 14, 7, 112, 122, 35, 27, 19, 63, 77, 65, 148, 68, 128, 16, 109, 244, 176, 79, 165, 209, 15, 111, 117, 68, 157, 26, 160, 21, 94, 42, 195, 193, 61, 28, 109, 100, 248, 144, 222, 231, 187, 252, 223, 57, 92, 106, 48, 171, 187, 85, 26, 105, 88, 99, 119, 119, 110, 206, 131, 145, 228, 237, 177, 133, 211, 192, 10, 101, 22, 172, 110, 179, 28, 253, 124, 58, 216, 146, 27, 194, 61, 140, 119, 16, 191, 155, 107, 92, 213, 154, 46, 128, 176, 105, 159, 225, 54, 148, 252, 238, 55, 22, 89, 180, 204, 103, 134, 169, 66, 30, 134, 2, 116, 212, 66, 21, 255, 186, 237, 30, 225, 248, 135, 206, 27, 23, 196, 9, 178, 40, 17, 36, 164, 98, 36, 60, 213, 189, 143, 175, 197, 235, 145, 195, 8, 2, 80, 197, 91, 120, 207, 214, 148, 229, 245, 80, 196, 75, 65, 160, 36, 249, 54, 168, 81, 177, 118, 187, 107, 252, 194, 148, 22, 1, 55, 29, 238, 6, 148, 230, 232, 18, 89, 251, 103, 141, 128, 180, 133, 123, 124, 228, 43, 181, 202, 231, 78, 160, 220, 78, 105, 243, 144, 101, 184, 142, 230, 171, 206, 64, 16, 23, 253, 120, 206, 171, 97, 255, 106, 148, 110, 137, 139, 141, 136, 44, 141, 199, 229, 106, 236, 142, 79, 55, 203, 117, 214, 32, 14, 141, 195, 215, 149, 25, 124, 132, 180, 3, 105, 128, 174, 22, 66, 183, 58, 54, 90, 36, 110, 1, 234, 111, 106, 82, 178, 80, 97, 55, 6, 26, 139, 249, 201, 106, 47, 145, 219, 48, 169, 175, 142, 91, 220, 46, 242, 12, 221, 6, 107, 229, 231, 95, 27, 66, 19, 30, 22, 136, 34, 234, 50, 193, 179, 112, 255, 148, 41, 131, 188, 73, 14, 223, 9, 64, 110, 77, 41, 210, 200, 33, 111, 21, 139, 62, 47, 119, 98, 170, 235, 145, 118, 252, 253, 33, 165, 29, 151, 98, 171, 102, 35, 130, 164, 185, 200, 162, 137, 11, 5, 25, 126, 50, 198, 161, 164, 47, 123, 225, 185, 231, 69, 43, 87, 101, 107, 143, 101, 79, 219, 249, 159, 47, 250, 211, 72, 152, 183, 9, 192, 194, 6, 98, 202, 173, 108, 173, 247, 76, 18, 157, 107, 236, 56, 204, 12, 11, 34, 240, 127, 170, 251, 36, 227, 126, 42, 255, 5, 176, 81, 2, 77, 129, 85, 114, 148, 37, 223, 127, 4, 174, 142, 235, 243, 213, 141, 47, 245, 139, 70, 134, 185, 218, 177, 231, 25, 177, 252, 208, 123, 107, 187, 152, 73, 168, 76, 103, 6, 233, 102, 155, 6, 84, 11, 166, 23, 10, 104, 30, 157, 77, 8, 169, 149, 87, 34, 205, 177, 107, 114, 172, 2, 227, 25, 135, 128, 83, 57, 8, 9, 8, 164, 213, 63, 72, 172, 250, 117, 241, 212, 61, 4, 205, 102, 216, 89, 31, 182, 154, 214, 86, 86, 85, 32, 158, 233, 228, 110, 51, 111, 197, 32, 169, 8, 24, 27, 72, 105, 100, 106, 119, 21, 99, 105, 225, 108, 156, 14, 92, 52, 104, 193, 113, 82, 49, 245, 159, 66, 186, 146, 205, 227, 242, 235, 7, 206, 74, 114, 115, 198, 44, 106, 191, 189, 138, 152, 141, 235, 157, 76, 253, 177, 111, 6, 2, 10, 121, 59, 23, 229, 13, 37, 157, 89, 172, 32, 170, 250, 51, 137, 36, 186, 248, 99, 134, 99, 183, 150, 167, 2, 185, 76, 26, 166, 176, 233, 137, 81, 47, 243, 112, 239, 8, 139, 27, 116, 161, 19, 41, 157, 170, 113, 25, 232, 143, 47, 179, 149, 84, 114, 37, 108, 140, 92, 81, 112, 5, 168, 195, 216, 114, 93, 211, 233, 4, 170, 35, 15, 166, 230, 63, 62, 112, 55, 73, 134, 43, 168, 186, 223, 44, 49, 40, 17, 171, 137, 213, 20, 66, 5, 64, 22, 153, 192, 240, 213, 133, 88, 71, 219, 205, 234, 26, 160, 120, 177, 49, 81, 164, 198, 154, 252, 127, 251, 93, 102, 70, 242, 188, 249, 84, 148, 132, 55, 82, 221, 238, 214, 232, 105, 197, 152, 191, 64, 123, 81, 80, 149, 172, 200, 19, 13, 180, 133, 118, 132, 57, 21, 52, 107, 55, 165, 131, 41, 75, 132, 15, 225, 71, 225, 171, 71, 92, 133, 121, 184, 50, 213, 58, 174, 184, 129, 235, 100, 114, 156, 134, 147, 210, 192, 128, 249, 236, 38, 5, 226, 76, 63, 199, 115, 103, 206, 130, 213, 198, 48, 129, 189, 228, 0, 101, 20, 14, 158, 185, 208, 220, 84, 1, 221, 239, 33, 179, 143, 130, 8, 17, 188, 111, 242, 103, 57, 71, 76, 181, 11, 117, 178, 87, 142, 198, 27, 145, 103, 27, 104, 72, 194, 62, 112, 6, 92, 232, 135, 118, 120, 145, 232, 98, 95, 156, 105, 29, 137], - [235, 94, 173, 130, 236, 61, 16, 156, 93, 65, 76, 155, 237, 225, 12, 243, 128, 139, 83, 7, 131, 155, 148, 163, 215, 132, 200, 92, 19, 156, 81, 25, 129, 1, 105, 19, 43, 240, 237, 236, 123, 176, 131, 54, 240, 112, 33, 98, 48, 154, 236, 117, 41, 40, 102, 11, 156, 192, 75, 152, 133, 3, 198, 154, 239, 73, 160, 33, 245, 2, 47, 213, 143, 237, 77, 255, 133, 158, 224, 70, 142, 95, 128, 110, 92, 57, 124, 128, 248, 104, 79, 126, 214, 227, 129, 116, 65, 68, 127, 18, 29, 19, 186, 203, 241, 197, 166, 115, 242, 136, 58, 164, 189, 220, 59, 117, 35, 136, 96, 241, 5, 161, 35, 216, 20, 230, 9, 100, 91, 182, 84, 193, 146, 201, 7, 191, 99, 254, 111, 210, 125, 117, 54, 41, 187, 217, 156, 180, 221, 153, 217, 191, 114, 107, 107, 182, 112, 247, 139, 195, 118, 230, 168, 125, 18, 247, 30, 14, 81, 203, 78, 125, 243, 50, 222, 205, 157, 68, 33, 229, 116, 32, 149, 34, 97, 181, 232, 197, 149, 174, 66, 34, 59, 35, 251, 207, 55, 249, 162, 254, 76, 84, 101, 240, 45, 214, 67, 108, 160, 32, 151, 45, 201, 211, 32, 163, 35, 93, 30, 213, 186, 189, 228, 47, 10, 136, 177, 228, 152, 102, 113, 80, 75, 17, 207, 180, 217, 54, 75, 217, 244, 25, 104, 194, 168, 139, 109, 23, 217, 236, 160, 143, 145, 208, 86, 181, 247, 98, 202, 168, 74, 175, 162, 199, 57, 193, 252, 116, 153, 55, 66, 67, 5, 90, 102, 252, 136, 193, 76, 114, 10, 187, 36, 37, 146, 97, 206, 96, 97, 193, 180, 101, 124, 91, 90, 148, 233, 153, 104, 249, 83, 29, 221, 201, 231, 177, 231, 142, 167, 180, 128, 47, 4, 93, 175, 229, 151, 54, 237, 242, 128, 124, 208, 35, 55, 156, 211, 182, 81, 252, 132, 117, 252, 11, 58, 79, 53, 178, 99, 163, 109, 194, 71, 175, 87, 139, 188, 35, 30, 100, 25, 180, 3, 121, 251, 255, 19, 148, 50, 16, 229, 49, 250, 31, 221, 250, 118, 41, 136, 218, 136, 177, 135, 240, 249, 213, 116, 84, 156, 148, 124, 195, 8, 149, 234, 194, 55, 193, 162, 19, 90, 243, 91, 217, 144, 132, 167, 4, 217, 59, 52, 88, 6, 195, 92, 210, 255, 187, 180, 90, 96, 27, 47, 118, 170, 220, 44, 148, 232, 30, 2, 153, 22, 115, 50, 17, 110, 142, 188, 192, 54, 152, 14, 207, 26, 235, 210, 69, 125, 77, 98, 52, 247, 12, 98, 69, 128, 27, 95, 215, 168, 58, 61, 16, 57, 182, 31, 136, 11, 75, 245, 63, 158, 102, 247, 221, 110, 27, 7, 239, 205, 57, 125, 116, 241, 202, 181, 202, 31, 186, 52, 176, 153, 46, 166, 11, 165, 78, 29, 34, 183, 217, 216, 102, 216, 89, 168, 195, 87, 157, 24, 203, 63, 41, 147, 88, 61, 139, 128, 3, 98, 143, 187, 94, 114, 139, 161, 157, 141, 57, 218, 149, 159, 133, 72, 53, 58, 44, 250, 87, 10, 59, 172, 47, 205, 192, 167, 173, 139, 225, 174, 219, 38, 10, 109, 232, 92, 174, 75, 109, 240, 77, 214, 13, 248, 36, 71, 161, 114, 116, 139, 98, 198, 47, 106, 90, 221, 57, 38, 232, 246, 7, 179, 172, 62, 205, 41, 167, 161, 176, 155, 34, 90, 76, 150, 130, 123, 196, 205, 208, 36, 29, 160, 89, 229, 154, 174, 49, 94, 18, 129, 12, 142, 168, 135, 3, 240, 212, 71, 230, 21, 210, 197, 111, 133, 157, 166, 18, 109, 134, 77, 156, 3, 42, 115, 168, 118, 218, 160, 48, 189, 179, 34, 245, 94, 99, 111, 107, 68, 216, 69, 167, 65, 165, 242, 195, 248, 38, 163, 102, 184, 6, 174, 66, 244, 113, 187, 84, 80, 221, 207, 194, 249, 126, 236, 236, 9, 174, 131, 172, 109, 194, 156, 29, 251, 103, 94, 139, 126, 133, 82, 36, 29, 22, 250, 199, 219, 194, 131, 105, 133, 25, 118, 22, 165, 231, 218, 11, 134, 170, 108, 125, 85, 213, 201, 96, 86, 1, 184, 30, 188, 60, 251, 81, 50, 69, 208, 117, 40, 33, 255, 106, 202, 59, 133, 228, 58, 65, 110, 58, 179, 200, 102, 43, 160, 97, 53, 33, 188, 24, 152, 233, 243, 171, 97, 2, 86, 222, 7, 90, 141, 211, 172, 44, 75, 133, 96, 109, 246, 103, 109, 153, 160, 108, 99, 45, 211, 0, 7, 44, 183, 107, 139, 154, 123, 144, 183, 193, 102, 58, 18, 150, 6, 165, 31, 227, 233, 99, 20, 121, 244, 194, 71, 69, 35, 126, 188, 40, 215, 34, 203, 158, 222, 20, 68, 144, 199, 92, 104, 125, 4, 194, 191, 36, 67, 55, 113, 92, 61, 151, 146, 202, 108, 120, 161, 145, 22, 163, 233, 186, 125, 12, 206, 152, 135, 142, 158, 211, 201, 90, 96, 249, 43, 217, 196, 95, 241, 74, 32, 1, 248, 28, 53, 0, 231, 178, 231, 171, 157, 253, 135, 215, 12, 44, 130, 249, 5, 44, 1, 78, 114, 8, 115, 28, 227, 49, 124, 189, 60, 83, 2, 43, 47, 226, 215, 213, 57, 79, 246, 185, 105, 30, 202, 181, 220, 176, 45, 186, 154, 175, 235, 108, 251, 179, 110, 151, 142, 132, 96, 65, 223, 96, 137, 30, 5, 208, 78, 81, 118, 164, 126, 166, 198, 232, 140, 59, 77, 27, 7, 125, 185, 230, 73, 36, 171, 61, 251, 177, 79, 252, 130, 11, 0, 103, 209, 172, 175, 165, 207, 123, 242, 39, 209, 189, 208, 26, 128, 63, 36, 110, 204, 227, 122, 153, 207, 34, 0, 78, 234, 38, 64, 228, 24, 3, 51, 79, 246, 38, 128, 51, 150, 30, 5, 98, 37, 95, 233, 66, 0, 6, 127, 136, 244, 23, 105, 68, 20, 99, 213, 171, 43, 9, 112, 141, 227, 39, 174, 155, 220, 4, 49, 142, 161, 20, 221, 123, 209, 203, 83, 62, 183, 239, 32, 127, 132, 87, 119, 82, 103, 244, 34, 10, 160, 181, 172, 15, 207, 43, 240, 51, 226, 186, 61, 151, 37, 235, 78, 74, 255, 170, 228, 130, 59, 193, 195, 115, 126, 141, 72, 93, 220, 38, 29, 50, 23, 127, 60, 28, 251, 161, 236, 228, 21, 163, 66, 127, 163, 121, 165, 113, 86, 193, 206, 176, 160, 97, 239, 113, 98, 213, 243, 130, 253, 178, 194, 84, 132, 15, 86, 169, 118, 82, 155, 14, 241, 18, 2, 48, 153, 182, 195, 72, 125, 206, 115, 229, 44, 253, 0, 210, 72, 161, 10, 134, 251, 223, 179, 57, 171, 243, 169, 250, 32, 180, 155, 254, 85, 182, 7, 152, 248, 98, 15, 31, 39, 239, 10, 116, 182, 119, 152, 89, 145, 221, 246, 97, 15, 39, 236, 20, 170, 62, 182, 53, 244, 179, 121, 145, 183, 109, 39, 139, 155, 203, 219, 77, 133, 63, 89, 150, 236, 23, 230, 226, 118, 140, 173, 186, 191, 82, 172, 217, 22, 135, 212, 162, 183, 190, 116, 246, 214, 252, 233, 66, 222, 10, 183, 139, 82, 194, 124, 21, 71, 192, 241, 189, 174, 85, 234, 107, 249, 63, 52, 159, 38, 215, 39, 182, 6, 174, 245, 20, 170, 142, 234, 55, 19, 29, 238, 213, 8, 118, 155, 116, 14, 112, 34, 240, 113, 165, 180, 69, 188, 53, 243, 23, 66, 154, 178, 130, 131, 128, 174, 164, 225, 123, 81, 197, 62, 130, 241, 222, 235, 17, 104, 51, 217, 129, 63, 160, 146, 93, 84, 139, 26, 42, 218, 228, 238, 195, 52, 5, 57, 84, 93, 116, 186, 32, 51, 179, 142, 26, 105, 7, 99, 231, 73, 159, 53, 223, 179, 223, 87, 81, 111, 175, 254, 229, 45, 72, 197, 175, 18, 211, 18, 84, 148, 118, 239, 111, 7, 6, 230, 247, 185, 239, 252, 171, 163, 68, 41, 141, 173, 129, 60, 39, 192, 173, 28, 244, 210, 39, 187, 107, 226, 170, 111, 226, 81, 216, 141, 86, 17, 94, 237, 76, 109, 14, 157, 6, 85, 169, 21, 201, 113, 149, 247, 36, 154, 138, 109, 157, 47, 206, 101, 240, 147, 40, 91, 140, 69, 121, 239, 4, 178, 53, 204, 167, 210, 133, 94, 76, 170, 32, 28, 167, 129, 222, 41, 141, 115, 10, 103, 211, 175, 135, 60, 194, 163, 0, 254, 26, 154, 137, 72, 189, 67, 104, 117, 49, 102, 127, 57, 88, 158, 24, 64, 124, 24, 125, 138, 153, 122, 41, 149, 251, 211, 20, 13, 39, 62, 14, 189, 170, 16, 125, 66, 97, 229, 182, 63, 185, 120, 171, 41, 149, 193, 152, 124, 188, 13, 4, 252, 208, 243, 33, 78, 156, 14, 142, 59, 207, 245, 142, 193, 246, 253, 6, 120, 243, 56, 196, 237, 178, 74, 182, 220, 24, 99, 32, 160, 216, 91, 29, 197, 183, 122, 97, 147, 87, 200, 182, 99, 175, 155, 223, 121, 103, 162, 2, 166, 1, 251, 232, 202, 28, 102, 226, 253, 6, 24, 128, 204, 18, 126, 108, 35, 45, 205, 133, 29, 173, 231, 114, 25, 10, 178, 245, 16, 188, 4, 59, 230, 230, 61, 66, 43, 170, 134, 174, 65, 100, 13, 146, 247, 149, 29, 187, 55, 253, 55, 27, 114, 206, 66, 189, 146, 69, 14, 176, 142, 56, 145, 92, 222, 147, 46, 183, 77, 34, 213, 224, 108, 142, 139, 208, 212, 155, 147, 119, 248, 20, 177, 133, 214, 226, 28, 97, 252, 223, 141, 37, 87, 128, 166, 160, 228, 155, 33, 157, 220, 128, 182, 40, 16, 251, 49, 178, 118, 179, 71, 67, 34, 188, 91, 102, 67, 20, 79, 251, 203, 161, 83, 238, 162, 242, 234, 101, 194, 85, 36, 53, 181, 63, 60, 41, 67, 31, 182, 62, 151, 34, 27, 62, 130, 245, 113, 208, 191, 2, 163, 171, 121, 188, 192, 38, 192, 221, 178, 200, 119, 9, 62, 114, 79, 36, 174, 58, 15, 161, 140, 39, 68, 228, 34, 205, 39, 227, 29, 20, 86, 135, 230, 46, 45, 2, 151, 195, 134, 183, 64, 36, 242, 47, 149, 222, 229, 141, 140, 177, 226, 225, 140, 32, 243, 28, 3, 240, 31, 160, 35, 96, 209, 248, 214, 81, 177, 145, 82, 16, 173, 148, 197, 129, 176, 85, 35, 142, 156, 86, 62, 192, 87, 107, 150, 202, 31, 109, 227, 108, 75, 75, 98, 119, 108, 116, 124, 31, 154, 188, 51, 249, 148, 165, 113, 230, 105, 101, 194, 232, 15, 7, 88, 82, 191, 194, 44, 87, 231, 211, 4, 206, 9, 20, 155, 100, 18, 234, 123, 130, 139, 36, 61, 243, 150, 120, 226, 89, 88, 94, 71, 226, 79, 103, 218, 172, 92, 159, 108, 26, 72, 238, 58, 28, 76, 127, 161, 49, 184, 254, 157, 63, 50, 197, 141, 120, 22, 53, 222, 146, 130, 106, 244, 241, 37, 32, 15, 166, 251, 79, 226, 233, 208, 81, 25, 175, 222, 255, 45, 12, 120, 185, 182, 147, 24, 157, 179, 74, 63, 129, 155, 18, 181, 150, 247, 204, 142, 76, 51, 21, 11, 51, 113, 214, 224, 131, 72, 233, 255, 76, 122, 68, 39, 108, 130, 59, 10, 247, 243, 199, 111, 48, 208, 49, 85, 96, 85, 70, 120, 159, 107, 223, 96, 74, 52, 236, 194, 143, 252, 160, 145, 222, 1, 18, 189, 105, 125, 147, 226, 244, 107, 133, 141, 127, 16, 57, 75, 62, 139, 140, 221, 119, 197, 162, 173, 9, 202, 182, 219, 252, 122, 53, 153, 26, 184, 40, 53, 69, 68, 204, 164, 161, 63, 186, 227, 202, 55, 143, 46, 227, 190, 142, 68, 193, 140, 119, 26, 38, 91, 159, 186, 73, 92, 29, 161, 3, 16, 76, 71, 67, 136, 255, 77, 238, 111, 187, 125, 34, 52, 9, 205, 228, 34, 98, 139, 87, 5, 190, 155, 229, 156, 3, 211, 49, 108, 255, 215, 200, 100, 114, 183, 195, 228, 55, 146, 164, 253, 236, 208, 242, 159, 119, 94, 136, 94, 56, 77, 254, 36, 48, 51, 206, 219, 95, 55, 219, 43, 178, 118, 226, 77, 41, 4, 154, 204, 137, 141, 140, 199, 72, 174, 176, 77, 162, 178, 165, 9, 11, 150, 242, 78, 155, 184, 13, 202, 235, 102, 50, 149, 18, 188, 124, 184, 31, 182, 108, 245, 157, 140, 68, 117, 102, 64, 121, 79, 133, 33, 200, 180, 137, 119, 249, 154, 60, 228, 188, 81, 142, 116, 92, 95, 39, 204, 177, 108, 59, 183, 238, 165, 125, 255, 118, 22, 209, 0, 140, 9, 56, 90, 9, 19, 203, 15, 228, 227, 189, 204, 102, 107, 149, 229, 97, 26, 26, 209, 232, 112, 45, 71, 190, 200, 130, 117, 181, 234, 179, 196, 209, 245, 170, 115, 139, 62, 116, 105, 4, 200, 225, 210, 14, 88, 128, 252, 236, 143, 163, 207, 163, 16, 93, 77, 150, 36, 190, 158, 190, 160, 11, 132, 248, 17, 76, 146, 218, 46, 24, 244, 111, 226, 151, 123, 45, 68, 13, 47, 125, 53, 241, 89, 5, 26, 240, 152, 91, 126, 137, 237, 9, 93, 171, 81, 140, 43, 188, 215, 148, 106, 159, 211, 183, 47, 138, 43, 106, 144, 82, 3, 72, 201, 155, 211, 230, 112, 215, 160, 49, 168, 226, 190, 36, 152, 213, 172, 235, 186, 225, 224, 135, 100, 75, 124, 14, 189, 106, 191, 0, 195, 136, 104, 106, 129, 33, 247, 215, 120, 168, 66, 9, 149, 222, 5, 150, 65, 222, 234, 96, 14, 246, 246, 173, 82, 32, 191, 40, 174, 204, 184, 208, 109, 185, 238, 213, 195, 242, 2, 13, 37, 190, 6, 255, 145, 70, 84, 117, 108, 29, 150, 2, 242, 226, 235, 105, 32, 103, 191, 144, 201, 190, 241, 137, 46, 145, 216, 154, 230, 76, 26, 7, 245, 221, 41, 222, 11, 165, 11, 162, 104, 82, 108, 68, 113, 193, 130, 69, 72, 230, 214, 253, 162, 208, 145, 232, 237, 50, 252, 154, 3, 57, 135, 219, 127, 33, 204, 198, 206, 239, 141, 225, 208, 88, 250, 241, 238, 116, 176, 1, 220, 169, 39, 157, 175, 73, 175, 5, 37, 11, 88, 207, 224, 104, 61, 93, 134, 24, 51, 204, 125, 45, 220, 91, 192, 108, 246, 184, 43, 109, 28, 226, 5, 36, 159, 155, 118, 134, 235, 155, 44, 205, 33, 235, 232, 135, 69, 3, 197, 54, 50, 17, 146, 51, 103, 219, 182, 71, 151, 23, 211, 209, 214, 13, 82, 38, 86, 90, 127, 31, 109, 172, 14, 211, 191, 179, 125, 239, 217, 213, 73, 176, 53, 200, 132, 221, 169, 203, 158, 0, 183, 247, 54, 157, 169, 133, 159, 84, 29, 232, 251, 66, 185, 238, 183, 237, 150, 198, 101, 233, 219, 235, 69, 52, 195, 54, 18, 197, 121, 57, 254, 94, 139, 57, 240, 105, 204, 157, 167, 122, 19, 31, 38, 136, 63, 127, 226, 250, 127, 36, 176, 156, 229, 147, 148, 129, 164, 130, 212, 66, 76, 168, 138, 60, 95, 29, 241, 172, 191, 92, 162, 169, 18, 79, 33, 19, 27, 218, 94, 124, 63, 79, 41, 193, 87, 234, 183, 171, 168, 107, 82, 20, 114, 2, 58, 154, 44, 36, 246, 60, 25, 93, 49, 179, 5, 59, 99, 71, 71, 106, 202, 66, 254, 10, 84, 239, 86, 153, 43, 116, 66, 30, 159, 200, 232, 72, 19, 229, 76, 150, 63, 180, 46, 238, 119, 2, 146, 0, 93, 124, 204, 112, 142, 112, 132, 32, 168, 56, 126, 25, 250, 244, 85, 225, 75, 219, 101, 30, 206, 96, 100, 242, 192, 141, 153, 0, 220, 233, 98, 114, 209, 134, 156, 254, 89, 136, 118, 44, 166, 52, 243, 130, 247, 73, 242, 224, 150, 15, 218, 93, 141, 209, 10, 154, 133, 1, 25, 3, 73, 136, 20, 81, 206, 53, 36, 51, 134, 17, 3, 47, 108, 159, 156, 245, 23, 158, 104, 177, 11, 247, 54, 21, 249, 92, 245, 190, 65, 111, 143, 38, 198, 244, 196, 84, 215, 99, 196, 189, 119, 231, 46, 245, 235, 222, 250, 170, 229, 57, 201, 175, 240, 247, 101, 212, 61, 48, 109, 92, 230, 82, 59, 5, 227, 237, 22, 9, 67, 219, 81, 3, 58, 237, 254, 125, 180, 68, 208, 185, 219, 195, 173, 130, 237, 33, 44, 61, 195, 20, 212, 97, 189, 16, 84, 108, 38, 179, 47, 133, 221, 193, 55, 196, 228, 28, 130, 244, 93, 125, 238, 108, 72, 143, 19, 250, 69, 125, 2, 35, 4, 94, 57, 12, 98, 97, 46, 202, 139, 118, 207, 152, 11, 37, 82, 166, 120, 165, 162, 150, 184, 147, 49, 59, 117, 94, 119, 168, 151, 45, 239, 196, 55, 103, 61, 126, 215, 58, 11, 111, 19, 13, 67, 81, 1, 45, 107, 91, 113, 176, 206, 129, 211, 54, 208, 118, 235, 77, 199, 199, 60, 183, 218, 1, 84, 144, 146, 209, 61, 56, 247, 176, 244, 74, 56, 245, 191, 186, 231, 149, 204, 15, 61, 66, 64, 77, 59, 93, 179, 85, 42, 137, 219, 193, 22, 110, 35, 182, 97, 250, 202, 250, 118, 56, 198, 161, 43, 57, 113, 151, 45, 131, 141, 136, 125, 198, 199, 230, 255, 224, 182, 209, 255, 144, 16, 237, 47, 173, 89, 149, 120, 9, 11, 122, 91, 38, 7, 81, 28, 235, 124, 88, 205, 55, 165, 233, 237, 166, 124, 122, 138, 19, 46, 24, 178, 183, 143, 232, 166, 107, 102, 62, 95, 91, 230, 26, 178, 193, 239, 137, 139, 251, 95, 160, 87, 251, 206, 39, 132, 234, 217, 167, 16, 77, 230, 90, 249, 252, 236, 2, 190, 122, 181, 25, 29, 56, 10, 31, 96, 101, 45, 104, 110, 192, 141, 194, 17, 136, 124, 93, 230, 48, 49, 204, 216, 174, 142, 125, 46, 27, 68, 67, 143, 226, 108, 119, 16, 30, 161, 21, 55, 37, 62, 139, 146, 251, 121, 218, 49, 183, 50, 32, 35, 144, 61, 137, 246, 234, 4, 127, 33, 137, 64, 165, 154, 207, 140, 252, 72, 231, 127, 197, 103, 224, 181, 156, 156, 168, 184, 223, 43, 157, 202, 58, 4, 68, 5, 98, 62, 143, 84, 135, 68, 74, 50, 43, 160, 182, 13, 141, 11, 27, 198, 123, 60, 133, 207, 79, 209, 224, 232, 59, 116, 8, 17, 246, 153, 142, 195, 181, 12, 58, 195, 118, 47, 20, 163, 176, 76, 105, 25, 77, 49, 191, 236, 32, 50, 4, 238, 162, 100, 169, 25, 98, 250, 25, 80, 215, 133, 144, 202, 9, 74, 144, 121, 94, 243, 71, 216, 107, 203, 129, 189, 76, 110, 158, 49, 245, 226, 85, 100, 241, 108, 72, 96, 150, 90, 161, 205, 66, 145, 97, 123, 137, 116, 160, 13, 166, 46, 14, 32, 183, 204, 238, 150, 248, 160, 2, 20, 132, 65, 102, 35, 171, 188, 4, 154, 122, 134, 138, 85, 113, 32, 117, 147, 74, 183, 6, 22, 138, 17, 3, 152, 29, 29, 19, 231, 58, 84, 255, 69, 163, 64, 203, 175, 190, 228, 250, 184, 76, 172, 206, 238, 149, 133, 214, 65, 224, 125, 255, 140, 108, 67, 114, 33, 77, 181, 255, 89, 54, 24, 160, 202, 22, 206, 17, 147, 6, 68, 55, 238, 94, 63, 175, 2, 198, 185, 11, 181, 38, 211, 216, 208, 78, 170, 61, 167, 123, 96, 199, 29, 174, 197, 55, 14, 4, 182, 211, 166, 94, 243, 137, 136, 95, 49, 221, 166, 6, 106, 194, 112, 197, 28, 205, 98, 255, 61, 162, 105, 232, 194, 182, 75, 66, 122, 220, 252, 216, 224, 106, 76, 239, 8, 137, 215, 167, 225, 81, 166, 28, 244, 128, 103, 164, 42, 168, 242, 231, 23, 33, 160, 220, 98, 42, 136, 224, 33, 140, 8, 248, 97, 155, 119, 236, 119, 226, 17, 44, 238, 252, 117, 92, 177, 98, 207, 190, 129, 46, 48, 86, 249, 161, 28, 225, 27, 157, 23, 159, 146, 66, 76, 185, 184, 151, 30, 198, 59, 78, 241, 84, 60, 204, 122, 110, 108, 194, 120, 155, 80, 208, 240, 253, 57, 62, 166, 97, 35, 36, 236, 37, 93, 67, 222, 114, 231, 182, 49, 184, 89, 123, 250, 106, 77, 206, 61, 126, 111, 205, 167, 155, 67, 137, 107, 127, 248, 133, 143, 164, 187, 234, 228, 26, 35, 109, 222, 225, 245, 126, 244, 137, 64, 174, 208, 156, 15, 39, 24, 83, 149, 216, 217, 92, 202, 214, 137, 77, 179, 43, 228, 159, 255, 234, 255, 39, 9, 137, 64, 116, 0, 212, 124, 208, 238, 29, 221, 108, 69, 221, 97, 13, 135, 37, 207, 148, 217, 201, 105, 98, 145, 213, 59, 86, 189, 100, 104, 106, 50, 41, 195, 248, 140, 116, 144, 50, 55, 171, 165, 34, 182, 103, 65, 103, 27, 232, 61, 200, 251, 92, 109, 158, 114, 206, 32, 47, 134, 194, 227, 47, 198, 220, 107, 66, 203, 17, 104, 29, 40, 213, 107, 114, 108, 11, 241, 64, 226, 212, 224, 181, 219, 166, 255, 121, 30, 203, 57, 192, 19, 223, 31, 192, 222, 91, 15, 234, 195, 78, 101, 185, 218, 175, 219, 64, 37, 237, 161, 168, 102, 163, 116, 63, 243, 3, 2, 216, 91, 250, 76, 13, 146, 31, 66, 35, 95, 82, 178, 181, 231, 93, 253, 165, 66, 189, 115, 254, 218, 222, 23, 79, 134, 158, 229, 17, 231, 50, 203, 231, 222, 130, 127, 114, 111, 189, 10, 60, 253, 199, 201, 216, 103, 50, 89, 81, 34, 200, 182, 117, 33, 199, 229, 118, 233, 252, 136, 8, 12, 87, 237, 174, 251, 90, 244, 110, 122, 240, 97, 129, 245, 140, 32, 119, 109, 244, 188, 16, 249, 166, 173, 110, 216, 87, 231, 143, 15, 180, 2, 2, 97, 7, 69, 249, 175, 75, 251, 219, 144, 48, 238, 182, 177, 41, 182, 179, 91, 97, 47, 18, 42, 169, 110, 101, 154, 248, 242, 139, 70, 42, 36, 174, 175, 190, 181, 51, 110, 190, 250, 96, 15, 44, 93, 113, 62, 21, 66, 132, 107, 218, 209, 239, 232, 200, 127, 39, 226, 183, 246, 91, 102, 230, 164, 116, 166, 59, 242, 139, 205, 21, 85, 105, 237, 94, 251, 28, 249, 238, 139, 82, 106, 17, 140, 90, 108, 90, 170, 222, 14, 247, 188, 172, 83, 31, 242, 109, 115, 198, 107, 67, 159, 215, 37, 68, 29, 224, 8, 187, 114, 89, 142, 239, 140, 94, 107, 251, 7, 178, 120, 63, 45, 170, 55, 144, 149, 147, 10, 216, 184, 103, 122, 138, 81, 76, 23, 250, 14, 133, 147, 148, 167, 90, 158, 191, 70, 112, 68, 16, 89, 104, 166, 202, 184, 53, 98, 112, 152, 167, 208, 88, 86, 150, 175, 142, 84, 227, 133, 30, 111, 81, 35, 85, 88, 75, 138, 148, 225, 136, 7, 238, 41, 212, 60, 160, 184, 33, 239, 141, 171, 41, 16, 155, 176, 156, 72, 243, 123, 207, 0, 157, 239, 63, 204, 227, 170, 147, 53, 52, 128, 134, 65, 227, 182, 181, 130, 85, 29, 130, 90, 108, 253, 218, 154, 98, 80, 190, 240, 239, 47, 223, 211, 221, 39, 119, 241, 152, 82, 54, 162, 13, 64, 179, 236, 52, 89, 38, 56, 195, 148, 4, 41, 27, 137, 143, 129, 41, 147, 38, 17, 17, 62, 34, 16, 231, 52, 229, 47, 201, 18, 230, 114, 140, 94, 81, 33, 101, 156, 167, 162, 47, 197, 184, 23, 180, 212, 247, 122, 0, 206, 50, 214, 225, 16, 137, 85, 63, 122, 165, 1, 153, 50, 231, 162, 108, 169, 66, 232, 20, 18, 88, 240, 14, 251, 171, 50, 93, 146, 182, 183, 186, 56, 57, 207, 6, 64, 93, 203, 27, 214, 2, 93, 85, 234, 222, 231, 47, 200, 55, 222, 202, 101, 49, 243, 246, 229, 95, 68, 80, 195, 1, 244, 152, 48, 12, 90, 121, 161, 92, 186, 18, 14, 187, 6, 108, 187, 184, 146, 199, 37, 58, 218, 232, 69, 71, 162, 99, 86, 88, 242, 21, 158, 52, 92, 246, 239, 183, 182, 217, 58, 35, 110, 166, 67, 19, 203, 81, 14, 52, 246, 192, 14, 57, 229, 142, 230, 113, 18, 192, 121, 30, 62, 116, 124, 251, 97, 88, 2, 170, 239, 227, 84, 120, 106, 27, 184, 252, 221, 140, 220, 8, 163, 80, 62, 37, 146, 1, 82, 144, 221, 119, 47, 203, 140, 135, 120, 104, 125, 226, 88, 9, 186, 215, 73, 121, 7, 61, 231, 223, 137, 144, 127, 61, 5, 47, 130, 94, 71, 254, 126, 28, 180, 179, 71, 79, 82, 218, 4, 20, 21, 199, 76, 84, 234, 103, 111, 234, 121, 138, 59, 138, 76, 78, 215, 253, 50, 252, 206, 195, 151, 196, 60, 102, 143, 146, 128, 188, 105, 136, 26, 89, 215, 58, 95, 223, 25, 42, 126, 123, 128, 8, 219, 146, 54, 69, 149, 163, 69, 199, 164, 55, 116, 141, 46, 229, 201, 139, 78, 18, 199, 102, 122, 244, 2, 162, 217, 73, 221, 237, 204, 182, 217, 218, 207, 242, 254, 178, 180, 81, 144, 205, 159, 137, 105, 161, 208, 22, 34, 197, 14, 169, 152, 143, 99, 222, 55, 79, 36, 171, 40, 52, 186, 45, 48, 130, 208, 221, 197, 19, 48, 12, 135, 177, 170, 132, 120, 15, 42, 176, 213, 123, 238, 179, 251, 69, 73, 182, 36, 29, 64, 51, 0, 206, 53, 202, 37, 255, 177, 150, 231, 159, 136, 169, 200, 228, 56, 145, 27, 61, 217, 56, 196, 43, 137, 86, 203, 109, 236, 163, 143, 157, 76, 76, 218, 195, 13, 13, 32, 48, 84, 125, 210, 82, 179, 128, 10, 111, 228, 215, 80, 233, 157, 41, 38, 203, 15, 98, 173, 224, 207, 130, 91, 89, 215, 239, 174, 4, 216, 101, 44, 181, 186, 243, 254, 157, 114, 168, 234, 132, 211, 180, 31, 66, 52, 90, 71, 57, 240, 49, 24, 112, 134, 22, 237, 65, 8, 56, 194, 193, 233, 183, 93, 159, 145, 21, 176, 166, 140, 161, 172, 180, 0, 6, 128, 106, 172, 144, 104, 181, 173, 31, 211, 1, 165, 126, 106, 73, 206, 12, 190, 191, 89, 11, 161, 3, 180, 155, 29, 106, 220, 131, 19, 118, 166, 5, 62, 39, 55, 65, 159, 220, 188, 193, 132, 127, 116, 234, 87, 151, 27, 208, 100, 84, 98, 215, 126, 248, 66, 42, 181, 202, 99, 241, 92, 174, 238, 181, 68, 222, 184, 129, 126, 31, 184, 200, 214, 87, 238, 63, 79, 97, 69, 3, 154, 22, 205, 253, 72, 219, 120, 177, 70, 194, 13, 30, 54, 110, 90, 135, 211, 95, 214, 179, 0, 172, 6, 68, 233, 164, 218, 145, 35, 97, 64, 52, 34, 48, 109, 166, 109, 40, 165, 48, 3, 163, 235, 121, 234, 211, 135, 104, 6, 48, 140, 149, 151, 122, 56, 23, 231, 115, 146, 93, 101, 177, 134, 41, 91, 219, 50, 226, 252, 0, 117, 135, 118, 206, 89, 227, 231, 69, 60, 30, 206, 191, 13, 114, 218, 216, 168, 26, 117, 29, 182, 195, 74, 19, 38, 211, 17, 7, 119, 66, 181, 148, 51, 92, 103, 245, 82, 91, 143, 198, 14, 225, 229, 125, 183, 229, 230, 137, 146, 116, 8, 145, 69, 162, 33, 200, 225, 10, 72, 69, 46, 248, 106, 160, 189, 129, 42, 45, 28, 57, 14, 84, 57, 45, 171, 124, 28, 116, 183, 18, 120, 88, 214, 107, 183, 82, 149, 135, 28, 25, 227, 176, 31, 14, 199, 241, 149, 203, 218, 253, 26, 60, 169, 5, 174, 114, 59, 101, 167, 193, 67, 162, 107, 218, 162, 62, 204, 64, 233, 74, 177, 215, 67, 40, 4, 153, 179, 231, 110, 114, 120, 120, 31, 5, 228, 85, 2, 63, 34, 57, 144, 1, 195, 151, 21, 252, 245, 234, 207, 238, 219, 228, 24, 193, 156, 253, 224, 68, 79, 1, 47, 99, 34, 29, 133, 114, 18, 120, 11, 233, 190, 31, 132, 130, 128, 239, 137, 70, 107, 138, 37, 147, 15, 45, 83, 15, 23, 96, 100, 162, 101, 63, 208, 114, 12, 233, 66, 56, 214, 172, 44, 166, 124, 249, 46, 117, 121, 17, 197, 72, 191, 222, 196, 50, 56, 196, 225, 158, 225, 26, 126, 55, 251, 33, 134, 35, 183, 243, 240, 43, 57, 246, 216, 252, 215, 191, 188, 136, 163, 195, 160, 114, 54, 64, 45, 215, 73, 108, 75, 213, 191, 251, 64, 228, 131, 17, 44, 174, 190, 170, 239, 49, 78, 98, 142, 228, 160, 7, 152, 4, 76, 230, 90, 188, 78, 164, 168, 115, 249, 252, 53, 147, 164, 107, 116, 183, 114, 188, 189, 147, 164, 166, 127, 129, 237, 136, 75, 99, 206, 251, 1, 134, 154, 221, 123, 251, 148, 4, 192, 60, 13, 147, 24, 205, 215, 171, 142, 69, 24, 81, 44, 248, 18, 84, 147, 65, 149, 233, 190, 252, 8, 250, 226, 160, 71, 170, 148, 17, 250, 99, 12, 21, 134, 167, 210, 150, 62, 210, 13, 145, 156, 162, 202, 82, 197, 144, 9, 31, 48, 162, 230, 17, 8, 228, 225, 36, 82, 179, 55, 98, 193, 56, 167, 174, 216, 199, 52, 12, 209, 6, 55, 182, 61, 149, 36, 65, 90, 148, 165, 252, 196, 156, 42, 114, 171, 250, 59, 148, 188, 254, 196, 147, 35, 56, 248, 125, 153, 156, 148, 88, 10, 116, 214, 217, 56, 229, 164, 229, 17, 40, 211, 174, 85, 192, 98, 110, 84, 78, 144, 97, 115, 143, 63, 215, 31, 57, 105, 117, 218, 199, 93, 246, 145, 9, 178, 187, 241, 37, 238, 247, 168, 168, 117, 74, 72, 119, 247, 23, 226, 59, 184, 122, 156, 253, 14, 106, 183, 170, 132, 85, 21, 181, 169, 101, 245, 10, 85, 169, 221, 27, 178, 70, 140, 96, 32, 236, 205, 158, 86, 211, 185, 208, 160, 63, 80, 174, 17, 226, 240, 207, 98, 85, 13, 41, 133, 118, 140, 112, 35, 7, 165, 69, 42, 114, 192, 248, 233, 7, 231, 39, 164, 6, 148, 218, 135, 163, 41, 111, 127, 52, 239, 217, 121, 63, 188, 140, 149, 13, 50, 52, 107, 42, 237, 250, 17, 163, 182, 113, 72, 138, 114, 64, 114, 105, 81, 157, 27, 72, 76, 6, 0, 219, 28, 45, 161, 246, 165, 250, 158, 127, 4, 249, 203, 40, 61, 17, 106, 169, 226, 10, 250, 211, 129, 51, 160, 101, 172, 165, 34, 227, 207, 52, 54, 2, 15, 194, 105, 44, 53, 60, 128, 164, 215, 179, 215, 188, 219, 191, 161, 86, 213, 142, 45, 40, 210, 220, 113, 60, 153, 137, 236, 165, 157, 180, 54, 196, 158, 21, 246, 112, 25, 169, 254, 20, 33, 192, 86, 113, 174, 162, 129, 130, 70, 26, 228, 69, 210, 89, 146, 71, 79, 67, 191, 96, 38, 169, 146, 188, 17, 62, 28, 180, 11, 195, 239, 75, 85, 250, 77, 117, 17, 50, 232, 174, 136, 6, 72, 1, 131, 134, 212, 95, 126, 44, 156, 146, 3, 150, 123, 106, 131, 67, 40, 158, 147, 235, 105, 212, 184, 194, 135, 113, 21, 112, 133, 149, 97, 185, 131, 41, 107, 77, 251, 177, 117, 149, 70, 71, 19, 98, 96, 87, 125, 170, 160, 242, 229, 158, 185, 92, 55, 18, 96, 146, 190, 166, 12, 121, 118, 197, 4, 10, 218, 166, 241, 152, 59, 173, 192, 231, 118, 53, 230, 238, 73, 140, 192, 154, 151, 125, 0, 212, 174, 71, 248, 89, 126, 186, 16, 131, 219, 210, 78, 52, 32, 184, 105, 139, 115, 71, 155, 255, 34, 10, 243, 150, 203, 74, 64, 220, 224, 205, 76, 64, 141, 171, 169, 132, 171, 71, 158, 120, 12, 2, 106, 129, 175, 144, 248, 209, 245, 32, 122, 203, 54, 103, 66, 131, 182, 39, 228, 38, 29, 106, 170, 93, 106, 92, 98, 139, 32, 102, 85, 233, 179, 99, 131, 55, 7, 59, 39, 149, 184, 46, 71, 186, 56, 211, 34, 76, 154, 251, 49, 41, 18, 133, 88, 31, 183, 139, 118, 164, 16, 183, 143, 197, 101, 194, 172, 167, 241, 45, 46, 201, 41, 214, 42, 3, 12, 3, 246, 20, 83, 37, 84, 36, 191, 140, 184, 147, 61, 14, 10, 194, 14, 34, 215, 160, 132, 161, 220, 177, 67, 43, 210, 44, 185, 5, 117, 204, 78, 175, 154, 215, 208, 41, 206, 48, 67, 237, 253, 184, 192, 183, 136, 192, 76, 40, 157, 146, 17, 214, 4, 47, 244, 88, 187, 251, 55, 108, 254, 174, 120, 183, 72, 64, 18, 65, 58, 206, 80, 71, 212, 74, 218, 199, 56, 63, 14, 180, 91, 228, 181, 245, 138, 199, 41, 70, 246, 9, 108, 172, 190, 160, 104, 81, 243, 216, 38, 24, 81, 70, 172, 245, 83, 1, 237, 141, 69, 230, 28, 181, 44, 72, 62, 198, 174, 125, 10, 6, 229, 154, 222, 31, 188, 155, 58, 18, 193, 68, 178, 229, 149, 76, 92, 143, 81, 186, 169, 135, 207, 206, 135, 209, 97, 176, 174, 1, 0, 180, 52, 107, 161, 109, 102, 144, 241, 65, 89, 137, 85, 49, 14, 214, 109, 215, 62, 250, 225, 16, 244, 138, 61, 206, 223, 18, 150, 46, 87, 115, 188, 255, 64, 34, 226, 159, 117, 162, 51, 158, 81, 200, 173, 6, 14, 212, 115, 255, 225, 248, 16, 148, 136, 158, 237, 107, 239, 135, 181, 168, 219, 142, 255, 235, 94, 138, 61, 68, 113, 85, 164, 63, 29, 17, 3, 62, 123, 63, 154, 224, 19, 160, 194, 242, 195, 183, 238, 117, 145, 82, 46, 47, 123, 80, 231, 66, 111, 238, 134, 29, 239, 219, 31, 70, 225, 242, 63, 77, 128, 237, 148, 249, 67, 143, 172, 230, 136, 121, 230, 6, 150, 84, 57, 152, 136, 119, 199, 228, 161, 204, 134, 46, 150, 35, 100, 124, 15, 174, 34, 127, 91, 194, 37, 148, 203, 81, 144, 92, 82, 51, 201, 185, 205, 49, 118, 240, 157, 143, 29, 70, 225, 49, 252, 84, 160, 144, 118, 251, 150, 21, 63, 74, 156, 92, 211, 226, 97, 108, 20, 215, 216, 94, 243, 29, 74, 105, 235, 161, 89, 27, 23, 109, 147, 34, 22, 90, 10, 35, 163, 11, 118, 197, 132, 53, 78, 140, 187, 62, 175, 2, 220, 214, 9, 108, 152, 237, 243, 150, 77, 179, 164, 133, 27, 79, 166, 150, 0, 184, 3, 156, 220, 153, 254, 240, 202, 204, 59, 60, 253, 154, 230, 43, 183, 60, 12, 242, 224, 155, 19, 18, 174, 216, 237, 80, 91, 50, 24, 208, 131, 197, 39, 161, 157, 44, 67, 178, 80, 153, 225, 72, 157, 128, 87, 100, 201, 233, 53, 235, 228, 91, 213, 115, 29, 189, 95, 109, 110, 239, 39, 36, 189, 205, 94, 234, 137, 51, 24, 56, 183, 143, 160, 231, 99, 214, 97, 238, 30, 167, 230, 187, 237, 100, 140, 25, 180, 88, 221, 125, 87, 3, 63, 55, 223, 160, 223, 3, 204, 20, 172, 129, 104, 188, 117, 228, 140, 179, 187, 27, 98, 19, 182, 82, 58, 11, 222, 152, 25, 251, 32, 128, 23, 247, 195, 233, 91, 4, 200, 11, 198, 47, 122, 48, 226, 226, 127, 237, 193, 160, 37, 98, 173, 96, 50, 19, 11, 116, 223, 120, 198, 176, 12, 88, 43, 23, 154, 82, 108, 218, 143, 37, 64, 248, 60, 139, 206, 50, 92, 48, 10, 91, 188, 151, 60, 240, 97, 222, 1, 118, 85, 32, 89, 98, 142, 130, 170, 99, 85, 210, 123, 81, 248, 16, 176, 114, 15, 226, 243, 19, 169, 92, 44, 137, 61, 127, 142, 60, 7, 84, 45, 234, 80, 1, 167, 113, 250, 210, 109, 230, 145, 224, 99, 9, 208, 78, 227, 81, 215, 103, 24, 9, 233, 167, 71, 43, 84, 109, 229, 165, 22, 198, 57, 171, 119, 181, 19, 13, 129, 195, 58, 142, 167, 75, 177, 38, 163, 124, 66, 46, 26, 175, 232, 178, 41, 216, 201, 119, 221, 4, 153, 88, 104, 48, 218, 199, 101, 216, 107, 88, 152, 125, 224, 6, 135, 227, 54, 31, 24, 223, 14, 85, 57, 31, 172, 47, 66, 64, 23, 146, 60, 154, 52, 57, 213, 84, 241, 215, 244, 33, 187, 129, 100, 136, 155, 127, 20, 153, 146, 135, 48, 218, 241, 252, 33, 164, 107, 198, 191, 242, 30, 163, 229, 89, 127, 6, 215, 49, 227, 132, 241, 220, 59, 241, 26, 138, 242, 54, 109, 88, 203, 252, 227, 107, 128, 88, 1, 77, 213, 226, 140, 201, 92, 199, 49, 26, 55, 236, 91, 14, 221, 13, 22, 2, 228, 125, 109, 0, 207, 177, 183, 85, 130, 11, 171, 225, 176, 33, 45, 249, 235, 236, 113, 145, 111, 42, 184, 30, 88, 9, 165, 28, 170, 130, 216, 31, 141, 17, 22, 141, 251, 154, 240, 35, 184, 69, 72, 222, 26, 250, 64, 142, 110, 17, 91, 15, 29, 121, 4, 106, 127, 173, 159, 108, 188, 249, 126, 205, 131, 251, 229, 127, 174, 246, 157, 20, 250, 216, 226, 19, 26, 133, 166, 246, 1, 228, 5, 54, 32, 209, 41, 126, 142, 49, 56, 253, 123, 107, 50, 205, 183, 254, 189, 183, 123, 64, 3, 137, 223, 48, 208, 4, 143, 150, 60, 147, 203, 203, 101, 96, 104, 121, 229, 57, 108, 250, 79, 134, 116, 125, 8, 93, 197, 10, 206, 53, 147, 174, 232, 224, 243, 79, 144, 105, 255, 206, 238, 16, 7, 166, 81, 124, 230, 197, 202, 78, 167, 44, 27, 63, 35, 164, 173, 115, 9, 247, 177, 62, 196, 246, 94, 176, 49, 233, 164, 202, 17, 18, 163, 47, 23, 113, 13, 89, 36, 65, 166, 110, 204, 237, 204, 155, 227, 77, 176, 53, 15, 139, 177, 213, 3, 27, 138, 214, 121, 35, 71, 206, 242, 164, 84, 177, 110, 109, 151, 213, 17, 235, 63, 109, 97, 147, 36, 100, 35, 1, 62, 225, 243, 194, 22, 5, 74, 254, 66, 209, 39, 25, 85, 71, 236, 104, 84, 128, 83, 226, 39, 39, 117, 215, 197, 176, 220, 48, 71, 216, 86, 29, 60, 26, 251, 25, 120, 116, 40, 172, 76, 29, 42, 92, 203, 32, 41, 242, 99, 93, 169, 250, 117, 224, 109, 227, 236, 179, 156, 240, 255, 107, 232, 73, 129, 158, 145, 100, 89, 19, 204, 229, 75, 178, 95, 151, 32, 20, 183, 61, 52, 74, 169, 68, 5, 221, 78, 100, 36, 66, 159, 118, 154, 212, 82, 56, 244, 66, 112, 67, 66, 52, 213, 71, 149, 190, 165, 41, 107, 99, 123, 79, 254, 206, 199, 159, 4, 223, 216, 63, 168, 224, 83, 153, 126, 2, 5, 44, 215, 42, 57, 110, 107, 20, 131, 150, 92, 82, 133, 233, 107, 81, 92, 59, 186, 141, 188, 98, 109, 231, 148, 121, 80, 118, 24, 164, 16, 36, 131, 203, 98, 85, 157, 64, 190, 155, 221, 67, 193, 11, 85, 27, 158, 251, 46, 172, 27, 141, 168, 169, 80, 148, 15, 216, 128, 107, 138, 247, 91, 7, 150, 213, 75, 251, 52, 79, 144, 99, 181, 216, 169, 183, 118, 159, 17, 3, 101, 45, 102, 17, 192, 220, 35, 127, 78, 241, 234, 251, 205, 32, 55, 238, 236, 90, 180, 209, 24, 11, 220, 229, 52, 77, 100, 61, 47, 123, 178, 247, 169, 72, 80, 22, 20, 72, 157, 132, 110, 20, 119, 214, 92, 233, 232, 160, 73, 127, 219, 31, 139, 137, 217, 143, 218, 179, 49, 18, 131, 66, 46, 131, 6, 240, 60, 235, 200, 214, 165, 130, 68, 36, 106, 234, 81, 82, 135, 135, 141, 7, 113, 222, 213, 11, 250, 173, 4, 214, 45, 225, 112, 145, 199, 223, 190, 12, 125, 221, 236, 15, 226, 248, 98, 236, 84, 218, 171, 137, 22, 64, 232, 207, 138, 244, 253, 187, 93, 39, 101, 168, 101, 225, 120, 92, 140, 7, 255, 123, 18, 236, 77, 249, 229, 170, 126, 39, 230, 15, 115, 171, 104, 254, 94, 105, 25, 146, 178, 185, 237, 28, 163, 220, 196, 115, 145, 113, 18, 42, 179, 125, 117, 35, 255, 142, 60, 185, 15, 178, 112, 99, 41, 222, 98, 120, 60, 240, 89, 169, 173, 86, 44, 105, 146, 176, 33, 123, 13, 255, 160, 119, 131, 8, 211, 8, 228, 3, 84, 225, 177, 213, 222, 233, 163, 33, 130, 231, 235, 20, 207, 108, 61, 104, 157, 255, 179, 59, 43, 219, 133, 48, 203, 212, 68, 202, 60, 109, 58, 150, 184, 196, 250, 194, 110, 221, 86, 123, 207, 218, 9, 9, 82, 98, 182, 210, 195, 63, 96, 61, 182, 184, 160, 195, 224, 31, 242, 196, 108, 53, 87, 93, 242, 96, 174, 17, 87, 178, 47, 66, 236, 163, 210, 87, 250, 99, 50, 43, 15, 63, 18, 33, 229, 6, 34, 51, 98, 102, 87, 93, 216, 52, 57, 96, 221, 246, 81, 92, 121, 123, 249, 110, 217, 184, 152, 51, 107, 74, 67, 194, 139, 26, 94, 86, 17, 93, 239, 249, 217, 232, 214, 244, 92, 46, 105, 132, 77, 199, 40, 205, 214, 235, 110, 40, 161, 218, 98, 209, 148, 250, 14, 118, 93, 39, 215, 8, 251, 99, 161, 206, 148, 127, 83, 230, 44, 162, 27, 125, 147, 131, 159, 199, 51, 209, 34, 148, 184, 108, 229, 192, 180, 227, 60, 119, 125, 94, 202, 207, 147, 69, 238, 141, 250, 11, 128, 183, 59, 71, 109, 165, 145, 5, 224, 234, 30, 10, 137, 203, 114, 237, 191, 254, 229, 26, 191, 187, 182, 200, 205, 136, 103, 182, 221, 84, 208, 152, 63, 142, 152, 60, 238, 242, 131, 150, 9, 29, 81, 215, 247, 129, 41, 150, 100, 140, 9, 196, 138, 201, 150, 183, 48, 25, 181, 181, 160, 235, 246, 62, 108, 152, 55, 68, 207, 17, 195, 132, 193, 123, 120, 149, 172, 200, 103, 127, 174, 39, 52, 188, 74, 15, 104, 214, 59, 61, 153, 90, 113, 10, 43, 239, 158, 136, 224, 70, 162, 52, 150, 84, 105, 108, 32, 208, 241, 5, 131, 207, 121, 138, 137, 100, 180, 50, 141, 51, 184, 125, 193, 153, 38, 155, 46, 117, 27, 251, 120, 2, 123, 161, 22, 109, 142, 39, 114, 43, 1, 37, 197, 34, 30, 44, 158, 23, 19, 145, 92, 210, 154, 160, 245, 13, 46, 183, 143, 244, 120, 97, 159, 77, 223, 69, 12, 68, 90, 65, 193, 25, 16, 217, 72, 190, 54, 245, 32, 159, 12, 139, 15, 27, 215, 50, 119, 185, 66, 216, 206, 195, 153, 180, 111, 79, 218, 140, 199, 85, 26, 163, 16, 18, 50, 209, 204, 5, 92, 44, 123, 147, 178, 8, 70, 249, 181, 147, 250, 58, 63, 128, 189, 97, 200, 72, 113, 99, 242, 217, 235, 94, 29, 211, 161, 251, 140, 64, 102, 103, 191, 15, 178, 121, 183, 253, 39, 199, 171, 147, 128, 197, 213, 100, 224, 230, 122, 127, 166, 118, 40, 181, 107, 90, 107, 108, 11, 231, 51, 240, 48, 227, 190, 221, 196, 99, 46, 96, 162, 108, 41, 122, 204, 73, 190, 5, 197, 122, 89, 244, 60, 53, 57, 38, 70, 85, 62, 232, 46, 100, 90, 240, 124, 237, 84, 137, 202, 51, 40, 152, 207, 163, 33, 66, 224, 210, 215, 150, 157, 23, 53, 103, 118, 185, 98, 218, 182, 201, 60, 80, 70, 34, 114, 114, 217, 162, 109, 149, 59, 172, 92, 92, 234, 144, 162, 126, 200, 130, 94, 76, 92, 126, 74, 232, 42, 165, 149, 220, 68, 221, 96, 66, 121, 89, 36, 189, 153, 19, 224, 158, 238, 53, 174, 1, 134, 221, 192, 176, 246, 243, 65, 145, 95, 141, 118, 186, 37, 5, 198, 68, 131, 207, 181, 165, 155, 245, 101, 150, 6, 155, 132, 155, 140, 165, 157, 8, 235, 167, 183, 212, 96, 8, 30, 234, 232, 200, 193, 66, 159, 57, 211, 60, 61, 130, 151, 188, 168, 220, 87, 167, 109, 18, 37, 77, 90, 44, 161, 86, 165, 142, 61, 243, 239, 126, 23, 192, 185, 252, 116, 140, 115, 41, 101, 10, 53, 79, 145, 28, 77, 245, 241, 215, 63, 29, 172, 58, 231, 49, 49, 187, 55, 116, 207, 193, 232, 205, 23, 24, 253, 172, 67, 241, 214, 111, 133, 25, 153, 13, 220, 38, 21, 48, 232, 14, 6, 138, 42, 212, 209, 212, 147, 161, 52, 57, 118, 14, 254, 80, 246, 197, 180, 245, 12, 73, 129, 1, 135, 203, 17, 73, 188, 102, 9, 159, 89, 155, 130, 132, 69, 25, 64, 83, 194, 147, 35, 122, 153, 25, 82, 157, 6, 9, 253, 152, 121, 228, 16, 88, 252, 185, 8, 133, 69, 180, 211, 157, 152, 101, 246, 71, 173, 22, 90, 254, 99, 240, 231, 236, 68, 127, 0, 149, 200, 245, 155, 88, 221, 142, 191, 75, 74, 111, 21, 150, 167, 112, 49, 251, 139, 87, 218, 96, 79, 173, 29, 23, 128, 88, 59, 178, 196, 191, 136, 132, 28, 41, 153, 233, 78, 244, 169, 116, 63, 94, 126, 254, 69, 79, 26, 114, 103, 112, 212, 226, 5, 208, 212, 229, 56, 205, 66, 101, 103, 110, 218, 5, 51, 103, 153, 228, 255, 2, 101, 202, 246, 122, 68, 91, 155, 175, 105, 122, 144, 182, 167, 214, 178, 240, 137, 234, 166, 234, 164, 181, 129, 63, 138, 110, 82, 207, 248, 218, 1, 14, 217, 130, 119, 122, 119, 103, 20, 114, 66, 116, 188, 141, 181, 172, 240, 84, 100, 134, 102, 118, 198, 215, 225, 169, 199, 144, 99, 167, 37, 65, 230, 1, 90, 101, 165, 124, 0, 87, 132, 79, 26, 166, 6, 56, 148, 80, 150, 77, 169, 104, 4, 29, 194, 7, 54, 16, 244, 243, 32, 141, 219, 163, 52, 26, 199, 189, 158, 59, 231, 84, 59, 175, 23, 40, 80, 103, 66, 13, 108, 136, 183, 178, 213, 189, 135, 92, 194, 60, 60, 17, 126, 50, 86, 59, 152, 69, 126, 164, 35, 242, 188, 247, 133, 190, 155, 79, 55, 126, 197, 131, 49, 6, 22, 58, 113, 254, 160, 93, 151, 179, 6, 223, 14, 154, 105, 94, 139, 255, 202, 243, 93, 143, 151, 203, 125, 229, 54, 60, 107, 227, 192, 140, 208, 159, 164, 212, 239, 62, 93, 66, 126, 233, 25, 239, 144, 7, 6, 164, 121, 107, 242, 58, 245, 143, 210, 231, 154, 238, 242, 141, 15, 186, 180, 164, 195, 171, 13, 36, 184, 17, 191, 88, 246, 72, 43, 66, 160, 115, 17, 204, 221, 80, 63, 81, 129, 62, 82, 40, 19, 252, 110, 186, 95, 129, 94, 55, 149, 190, 115, 98, 104, 222, 233, 111, 214, 54, 37, 227, 30, 248, 197, 32, 0, 103, 91, 204, 234, 64, 19, 6, 127, 66, 128, 214, 45, 222, 105, 225, 254, 106, 232, 186, 24, 19, 240, 186, 248, 62, 122, 123, 99, 110, 101, 164, 223, 245, 100, 156, 204, 126, 23, 245, 51, 161, 115, 200, 45, 90, 174, 50, 215, 43, 158, 242, 235, 200, 154, 162, 89, 51, 37, 230, 60, 129, 199, 48, 128, 189, 17, 222, 7, 221, 198, 154, 201, 185, 20, 253, 44, 188, 12, 65, 176, 193, 224, 43, 241, 202, 152, 113, 129, 113, 180, 109, 111, 184, 18, 41, 241, 50, 114, 31, 4, 92, 181, 80, 110, 224, 30, 208, 54, 244, 174, 160, 166, 11, 108, 238, 122, 16, 136, 109, 69, 153, 241, 90, 95, 60, 32, 48, 196, 231, 165, 116, 63, 13, 33, 7, 250, 28, 48, 245, 29, 221, 37, 85, 60, 32, 75, 195, 94, 155, 67, 254, 63, 214, 82, 154, 151, 15, 236, 160, 25, 65, 172, 240, 206, 178, 160, 223, 52, 207, 241, 111, 62, 29, 86, 119, 115, 15, 14, 24, 66, 230, 27, 72, 72, 36, 236, 212, 91, 118, 148, 169, 201, 165, 3, 84, 110, 207, 48, 238, 100, 102, 63, 212, 172, 171, 44, 135, 197, 250, 143, 0, 15, 129, 153, 132, 45, 235, 62, 63, 79, 240, 234, 248, 65, 91, 173, 147, 19, 250, 51, 51, 213, 78, 206, 102, 104, 42, 133, 50, 111, 27, 196, 243, 29, 4, 60, 53, 57, 178, 4, 117, 248, 238, 7, 237, 46, 5, 209, 178, 150, 202, 1, 13, 115, 169, 54, 239, 204, 193, 150, 234, 202, 64, 137, 21, 16, 41, 226, 43, 81, 176, 166, 85, 188, 33, 107, 189, 195, 171, 68, 31, 251, 214, 125, 32, 197, 220, 40, 243, 41, 172, 44, 173, 16, 206, 86, 76, 84, 161, 115, 161, 201, 170, 218, 103, 67, 119, 114, 190, 154, 178, 156, 214, 196, 173, 2, 118, 12, 122, 56, 62, 14, 253, 180, 49, 94, 84, 35, 171, 141, 56, 10, 214, 182, 59, 75, 4, 237, 25, 153, 53, 73, 112, 109, 227, 155, 190, 75, 87, 37, 211, 49, 126, 55, 246, 144, 145, 13, 244, 227, 181, 13, 111, 173, 84, 190, 86, 242, 69, 45, 227, 8, 231, 230, 112, 192, 187, 136, 148, 75, 135, 38, 150, 54, 69, 18, 108, 144, 15, 179, 191, 130, 181, 125, 166, 150, 75, 148, 70, 230, 11, 31, 89, 232, 225, 186, 86, 24, 23, 194, 83, 40, 76, 100, 66, 80, 123, 251, 241, 40, 228, 48, 208, 42, 191, 44, 154, 160, 213, 216, 79, 166, 199, 157, 226, 59, 116, 77, 36, 65, 232, 81, 150, 75, 156, 168, 8, 114, 177, 197, 136, 36, 181, 174, 4, 1, 162, 243, 255, 173, 255, 200, 207, 201, 235, 228, 169, 37, 197, 103, 100, 240, 0, 229, 39, 205, 70, 25, 168, 94, 58, 208, 193, 220, 237, 218, 30, 13, 186, 105, 119, 104, 66, 196, 199, 141, 233, 72, 97, 207, 182, 195, 178, 183, 59, 23, 56, 48, 2, 132, 190, 95, 144, 250, 23, 35, 74, 150, 121, 64, 6, 93, 109, 44, 23, 38, 174, 168, 252, 213, 155, 123, 166, 254, 144, 95, 68, 251, 78, 14, 193, 241, 17, 96, 135, 229, 255, 130, 131, 104, 49, 0, 32, 38, 74, 61, 217, 175, 85, 38, 66, 198, 20, 214, 8, 175, 200, 90, 248, 7, 179, 50, 134, 161, 86, 3, 74, 143, 198, 155, 161, 38, 190, 117, 210, 221, 117, 60, 108, 175, 130, 80, 79, 39, 172, 36, 188, 100, 205, 28, 99, 86, 49, 194, 251, 56, 32, 48, 240, 147, 139, 66, 157, 189, 40, 7, 46, 134, 218, 49, 155, 20, 65, 168, 221, 222, 172, 85, 186, 152, 138, 39, 103, 241, 62, 145, 134, 100, 59, 174, 51, 81, 176, 207, 148, 163, 230, 135, 92, 238, 213, 85, 194, 65, 5, 254, 61, 71, 222, 134, 242, 75, 68, 83, 110, 147, 117, 51, 248, 155, 254, 233, 238, 58, 132, 203, 6, 33, 27, 58, 31, 193, 70, 76, 50, 120, 9, 156, 76, 40, 157, 171, 123, 126, 155, 184, 157, 223, 94, 90, 45, 93, 65, 226, 202, 123, 240, 233, 72, 64, 91, 90, 123, 223, 99, 35, 175, 177, 224, 221, 98, 226, 207, 12, 245, 164, 113, 70, 251, 114, 22, 170, 217, 140, 108, 131, 99, 47, 136, 210, 125, 106, 225, 172, 93, 149, 169, 246, 28, 45, 80, 215, 186, 141, 222, 63, 234, 201, 227, 214, 147, 239, 207, 231, 175, 23, 73, 229, 80, 177, 67, 15, 191, 60, 213, 95, 57, 104, 34, 40, 171, 173, 167, 138, 218, 101, 14, 228, 129, 197, 218, 192, 50, 36, 80, 95, 7, 112, 133, 223, 255, 93, 46, 247, 54, 132, 154, 231, 203, 126, 118, 79, 0, 204, 245, 53, 89, 9, 179, 193, 253, 45, 138, 231, 89, 187, 117, 75, 149, 204, 198, 43, 250, 117, 88, 181, 201, 34, 38, 216, 142, 219, 5, 128, 201, 51, 106, 78, 131, 177, 251, 111, 55, 176, 149, 31, 5, 193, 166, 58, 240, 91, 65, 113, 255, 25, 125, 244, 228, 36, 44, 216, 190, 168, 155, 167, 108, 104, 64, 225, 175, 70, 73, 62, 20, 59, 30, 51, 229, 16, 42, 102, 231, 224, 124, 64, 128, 129, 157, 13, 94, 139, 57, 251, 190, 244, 220, 78, 35, 54, 67, 157, 67, 179, 251, 73, 98, 253, 64, 228, 3, 199, 207, 67, 247, 148, 191, 124, 159, 176, 177, 75, 96, 223, 142, 250, 75, 189, 57, 138, 223, 85, 166, 89, 241, 228, 115, 169, 114, 251, 198, 121, 228, 23, 222, 221, 20, 216, 254, 253, 195, 221, 57, 185, 155, 85, 137, 189, 234, 55, 248, 210, 223, 2, 37, 76, 55, 220, 22, 119, 15, 189, 105, 175, 54, 243, 115, 140, 136, 134, 157, 130, 44, 53, 27, 239, 130, 255, 148, 170, 132, 195, 129, 38, 45, 93, 76, 238, 24, 51, 68, 58, 196, 186, 135, 27, 235, 166, 174, 5, 2, 219, 75, 185, 228, 121, 185, 186, 240, 178, 98, 236, 201, 83, 189, 132, 1, 189, 178, 182, 37, 162, 94, 13, 48, 111, 255, 42, 199, 165, 59, 209, 246, 184, 172, 231, 47, 218, 22, 57, 100, 68, 25, 118, 231, 61, 100, 124, 30, 23, 146, 36, 161, 37, 162, 92, 14, 213, 75, 147, 191, 119, 136, 209, 149, 27, 207, 149, 35, 170, 106, 110, 19, 236, 4, 14, 224, 114, 126, 99, 65, 64, 6, 40, 174, 75, 4, 212, 87, 207, 199, 222, 171, 209, 111, 211, 143, 226, 87, 100, 100, 200, 124, 169, 43, 210, 241, 145, 146, 110, 184, 179, 226, 250, 137, 35, 71, 134, 174, 168, 67, 82, 243, 58, 23, 197, 177, 251, 133, 114, 82, 140, 214, 84, 21, 231, 83, 74, 156, 167, 9, 83, 134, 224, 111, 36, 157, 13, 193, 241, 59, 130, 70, 145, 135, 247, 63, 132, 155, 76, 110, 112, 222, 191, 17, 161, 27, 166, 90, 99, 5, 12, 180, 211, 80, 61, 205, 210, 42, 101, 3, 155, 147, 162, 84, 41, 57, 57, 208, 190, 171, 212, 93, 25, 50, 27, 66, 58, 247, 128, 196, 211, 134, 24, 236, 52, 98, 235, 72, 221, 15, 197, 211, 164, 253, 93, 73, 195, 232, 249, 102, 179, 212, 199, 228, 218, 155, 36, 206, 101, 210, 74, 52, 248, 185, 94, 251, 179, 107, 206, 114, 143, 42, 105, 179, 204, 19, 170, 217, 85, 32, 141, 210, 33, 196, 47, 0, 3, 84, 6, 227, 208, 120, 65, 164, 80, 160, 228, 155, 202, 208, 11, 231, 237, 236, 235, 187, 90, 45, 254, 142, 74, 166, 57, 83, 157, 41, 122, 90, 85, 238, 248, 241, 17, 222, 10, 233, 27, 66, 114, 184, 213, 245, 102, 218, 98, 62, 55, 205, 90, 234, 15, 230, 94, 145, 154, 19, 21, 61, 101, 81, 145, 184, 49, 220, 55, 50, 209, 16, 231, 249, 125, 94, 197, 11, 209, 72, 139, 217, 114, 41, 51, 69, 41, 17, 7, 53, 71, 247, 141, 215, 67, 67, 174, 55, 110, 255, 232, 20, 28, 27, 77, 184, 149, 150, 216, 218, 219, 123, 225, 93, 123, 60, 88, 136, 29, 204, 41, 229, 62, 227, 24, 100, 224, 102, 87, 29, 170, 231, 5, 110, 73, 76, 100, 248, 176, 135, 122, 205, 104, 94, 42, 133, 80, 4, 159, 12, 93, 15, 192, 201, 44, 139, 93, 138, 154, 196, 254, 101, 91, 125, 87, 50, 120, 6, 144, 99, 34, 156, 157, 60, 17, 133, 95, 247, 214, 64, 26, 108, 47, 115, 152, 208, 88, 152, 194, 101, 18, 153, 97, 50, 159, 65, 126, 31, 44, 240, 83, 199, 209, 212, 82, 83, 183, 22, 201, 222, 249, 117, 153, 200, 175, 8, 199, 130, 221, 37, 122, 194, 101, 169, 60, 129, 204, 23, 93, 91, 190, 1, 48, 208, 27, 133, 207, 53, 28, 96, 19, 12, 30, 152, 74, 107, 156, 152, 206, 203, 216, 45, 174, 211, 214, 251, 134, 229, 32, 174, 152, 43, 57, 41, 44, 40, 164, 148, 253, 115, 160, 203, 234, 0, 230, 180, 37, 62, 79, 250, 239, 115, 1, 210, 97, 109, 55, 60, 59, 126, 237, 150, 175, 74, 64, 83, 62, 85, 134, 106, 80, 93, 211, 149, 226, 65, 100, 68, 129, 54, 8, 162, 108, 62, 212, 69, 223, 128, 175, 217, 5, 198, 50, 136, 146, 66, 59, 232, 96, 202, 210, 220, 252, 117, 166, 40, 186, 19, 132, 8, 191, 215, 203, 84, 0, 28, 228, 68, 228, 71, 205, 249, 204, 173, 193, 214, 62, 59, 184, 166, 184, 204, 232, 223, 255, 231, 19, 38, 84, 233, 97, 9, 153, 215, 75, 5, 38, 55, 33, 240, 244, 178, 97, 253, 35, 213, 241, 200, 243, 1, 233, 21, 30, 123, 214, 237, 235, 117, 67, 220, 226, 14, 11, 37, 74, 73, 2, 149, 14, 136, 221, 227, 217, 221, 44, 177, 66, 117, 172, 42, 146, 57, 88, 17, 75, 138, 0, 119, 252, 69, 164, 178, 245, 186, 242, 143, 95, 44, 38, 77, 179, 227, 118, 151, 46, 152, 192, 30, 195, 11, 89, 111, 98, 20, 238, 254, 129, 223, 240, 42, 4, 103, 106, 48, 73, 109, 237, 142, 175, 170, 77, 16, 180, 100, 191, 52, 248, 233, 117, 2, 150, 120, 246, 129, 9, 63, 192, 0, 77, 117, 3, 163, 44, 248, 163, 164, 184, 212, 99, 11, 21, 186, 6, 233, 82, 64, 23, 134, 218, 252, 84, 34, 136, 164, 245, 115, 196, 91, 228, 65, 97, 188, 230, 68, 83, 155, 57, 232, 243, 155, 81, 3, 91, 41, 6, 52, 102, 71, 53, 194, 161, 118, 199, 28, 50, 164, 5, 74, 120, 85, 103, 216, 187, 84, 59, 251, 106, 35, 133, 82, 243, 89, 109, 2, 163, 96, 216, 28, 220, 73, 36, 21, 223, 241, 133, 182, 253, 163, 122, 42, 83, 167, 117, 38, 46, 6, 235, 154, 237, 231, 164, 123, 205, 38, 72, 13, 85, 231, 166, 240, 230, 240, 229, 82, 181, 49, 206, 191, 79, 46, 3, 107, 218, 130, 167, 171, 122, 75, 128, 26, 0, 124, 28, 79, 114, 99, 240, 233, 73, 236, 1, 38, 206, 139, 28, 61, 102, 48, 175, 231, 30, 92, 207, 115, 89, 144, 190, 220, 25, 102, 116, 23, 64, 146, 200, 220, 5, 215, 39, 37, 85, 146, 85, 102, 81, 143, 2, 179, 22, 77, 218, 7, 123, 163, 246, 51, 6, 75, 179, 248, 90, 136, 72, 161, 117, 104, 25, 191, 136, 46, 13, 222, 121, 106, 133, 199, 161, 75, 175, 197, 75, 35, 41, 87, 8, 175, 27, 1, 114, 136, 195, 107, 255, 108, 206, 78, 160, 214, 143, 94, 228, 133, 253, 48, 79, 44, 104, 164, 232, 160, 172, 199, 161, 228, 3, 196, 40, 67, 240, 31, 2, 77, 8, 32, 1, 164, 33, 180, 62, 250, 194, 34, 255, 192, 226, 213, 31, 104, 237, 148, 181, 85, 219, 92, 249, 45, 21, 78, 187, 55, 219, 42, 220, 175, 48, 255, 71, 114, 61, 186, 135, 202, 49, 36, 73, 17, 88, 41, 208, 138, 89, 94, 49, 12, 252, 109, 74, 117, 83, 15, 11, 93, 22, 22, 82, 0, 151, 13, 3, 234, 40, 193, 51, 151, 181, 174, 48, 225, 177, 203], - [247, 84, 171, 10, 31, 84, 11, 19, 252, 61, 11, 237, 181, 78, 192, 178, 1, 137, 173, 164, 111, 182, 207, 117, 183, 13, 96, 218, 180, 147, 26, 115, 72, 159, 214, 19, 95, 253, 51, 146, 135, 205, 82, 12, 102, 117, 178, 129, 137, 71, 25, 23, 143, 195, 79, 211, 2, 12, 167, 206, 232, 156, 249, 227, 158, 55, 28, 218, 207, 176, 70, 153, 248, 22, 98, 94, 0, 198, 173, 17, 132, 5, 202, 183, 128, 108, 201, 12, 103, 199, 194, 123, 172, 249, 255, 229, 81, 25, 185, 106, 196, 98, 52, 184, 174, 51, 160, 128, 169, 124, 187, 156, 169, 240, 75, 244, 84, 14, 190, 1, 154, 4, 168, 106, 19, 77, 238, 146, 225, 55, 113, 104, 141, 251, 122, 114, 63, 180, 212, 197, 108, 224, 68, 80, 247, 254, 228, 100, 0, 200, 61, 117, 103, 103, 83, 191, 13, 101, 190, 157, 151, 148, 179, 87, 53, 44, 237, 196, 15, 179, 219, 178, 83, 208, 89, 70, 77, 103, 229, 124, 222, 32, 130, 19, 254, 212, 240, 218, 175, 68, 14, 60, 139, 254, 12, 7, 94, 212, 235, 133, 206, 223, 114, 42, 25, 91, 90, 65, 127, 116, 80, 24, 103, 103, 144, 168, 153, 242, 104, 157, 49, 103, 17, 121, 6, 55, 127, 224, 129, 154, 86, 248, 23, 155, 144, 115, 24, 229, 247, 218, 230, 244, 84, 121, 124, 85, 192, 111, 118, 14, 27, 246, 71, 208, 200, 199, 167, 207, 98, 99, 7, 87, 55, 81, 182, 143, 249, 152, 54, 31, 221, 150, 64, 17, 177, 246, 62, 184, 2, 21, 40, 171, 49, 50, 183, 139, 73, 147, 118, 63, 174, 217, 35, 3, 240, 200, 77, 100, 239, 27, 60, 83, 24, 93, 247, 122, 193, 106, 251, 111, 27, 233, 75, 50, 68, 20, 229, 246, 73, 46, 169, 194, 108, 43, 151, 237, 55, 60, 92, 17, 80, 153, 9, 141, 109, 76, 120, 197, 214, 172, 139, 220, 52, 208, 82, 85, 246, 56, 79, 28, 146, 170, 159, 115, 72, 229, 244, 145, 110, 15, 131, 149, 222, 74, 162, 175, 81, 142, 106, 85, 179, 153, 225, 43, 46, 228, 167, 199, 229, 150, 222, 242, 169, 56, 123, 188, 205, 65, 133, 42, 26, 199, 95, 161, 21, 5, 179, 83, 139, 214, 183, 188, 34, 64, 81, 232, 62, 244, 226, 207, 151, 180, 22, 251, 74, 244, 34, 99, 158, 242, 35, 57, 213, 64, 14, 252, 151, 36, 203, 209, 158, 31, 113, 150, 164, 174, 22, 9, 213, 78, 17, 243, 205, 18, 55, 221, 160, 165, 158, 105, 104, 90, 220, 63, 136, 64, 202, 198, 14, 52, 176, 16, 103, 12, 225, 128, 24, 91, 239, 38, 235, 56, 197, 208, 189, 11, 174, 146, 137, 122, 41, 246, 187, 190, 175, 33, 217, 172, 213, 71, 192, 80, 11, 119, 191, 88, 159, 27, 55, 243, 193, 190, 164, 43, 40, 38, 209, 13, 49, 0, 20, 234, 110, 46, 43, 195, 129, 19, 3, 249, 103, 155, 106, 92, 173, 90, 103, 177, 177, 116, 120, 57, 5, 117, 66, 209, 131, 20, 81, 150, 253, 219, 40, 78, 216, 73, 253, 154, 76, 142, 80, 65, 117, 56, 10, 28, 245, 172, 69, 161, 192, 28, 171, 135, 87, 44, 147, 134, 122, 242, 67, 44, 22, 1, 208, 90, 105, 201, 118, 247, 103, 37, 183, 137, 161, 143, 204, 117, 125, 141, 203, 57, 243, 55, 154, 40, 186, 25, 124, 211, 113, 39, 106, 208, 219, 213, 44, 105, 168, 36, 187, 195, 138, 233, 82, 120, 88, 240, 189, 115, 153, 63, 228, 31, 200, 190, 124, 96, 213, 122, 153, 152, 80, 98, 116, 63, 130, 179, 161, 233, 125, 164, 18, 244, 71, 110, 6, 30, 244, 170, 32, 38, 240, 200, 238, 185, 61, 79, 37, 56, 152, 200, 174, 113, 142, 140, 80, 245, 146, 74, 91, 132, 118, 15, 253, 255, 109, 88, 253, 117, 163, 3, 173, 37, 19, 64, 6, 241, 233, 153, 50, 225, 159, 30, 41, 142, 124, 181, 106, 58, 117, 74, 98, 63, 104, 221, 250, 108, 51, 125, 137, 41, 254, 102, 192, 146, 110, 76, 222, 45, 160, 121, 249, 11, 117, 220, 211, 16, 187, 149, 10, 100, 181, 32, 16, 202, 213, 47, 218, 112, 238, 249, 127, 55, 122, 241, 120, 246, 22, 104, 245, 162, 54, 234, 159, 250, 133, 111, 179, 26, 65, 114, 255, 34, 137, 114, 42, 226, 119, 111, 136, 103, 50, 161, 12, 34, 131, 168, 91, 170, 248, 26, 19, 9, 30, 98, 59, 18, 228, 215, 192, 229, 67, 47, 238, 182, 174, 120, 119, 190, 44, 255, 158, 232, 188, 143, 32, 7, 219, 28, 63, 136, 202, 223, 157, 14, 155, 107, 96, 235, 166, 1, 169, 229, 235, 29, 245, 201, 239, 99, 48, 21, 4, 208, 176, 111, 214, 57, 181, 173, 179, 242, 116, 169, 247, 74, 6, 221, 230, 27, 143, 68, 74, 151, 77, 184, 189, 18, 114, 68, 46, 83, 232, 92, 154, 35, 123, 8, 143, 72, 140, 43, 29, 240, 35, 85, 158, 179, 45, 248, 153, 74, 3, 227, 0, 124, 151, 56, 212, 216, 104, 183, 130, 34, 44, 50, 243, 82, 198, 155, 12, 83, 171, 245, 103, 250, 49, 35, 91, 119, 35, 45, 91, 51, 186, 128, 84, 32, 138, 157, 102, 16, 164, 44, 6, 127, 96, 68, 171, 200, 139, 127, 110, 131, 219, 254, 252, 28, 218, 49, 81, 6, 117, 104, 76, 200, 205, 98, 203, 186, 123, 10, 145, 109, 83, 10, 18, 85, 190, 62, 207, 218, 84, 63, 21, 109, 156, 111, 196, 206, 245, 108, 21, 152, 247, 118, 119, 101, 116, 120, 243, 30, 176, 155, 28, 11, 120, 152, 8, 96, 152, 130, 81, 65, 138, 61, 225, 58, 245, 235, 0, 107, 206, 167, 5, 249, 131, 251, 109, 33, 71, 58, 31, 77, 73, 34, 208, 17, 135, 49, 143, 201, 37, 131, 194, 162, 82, 41, 197, 161, 162, 216, 44, 127, 28, 17, 59, 174, 151, 72, 124, 49, 227, 23, 228, 30, 149, 236, 254, 7, 125, 0, 37, 45, 234, 144, 52, 249, 19, 184, 24, 15, 66, 18, 76, 134, 153, 51, 36, 166, 36, 232, 37, 5, 154, 31, 67, 70, 145, 62, 43, 164, 83, 215, 211, 82, 11, 244, 15, 186, 90, 189, 83, 201, 170, 231, 18, 207, 166, 98, 131, 164, 250, 133, 150, 7, 42, 107, 188, 155, 126, 25, 182, 52, 139, 2, 84, 140, 228, 25, 119, 114, 93, 72, 160, 126, 210, 128, 66, 243, 70, 27, 123, 227, 63, 13, 198, 186, 29, 42, 92, 219, 51, 144, 167, 94, 143, 135, 102, 85, 252, 220, 181, 153, 42, 73, 209, 167, 231, 108, 251, 154, 174, 147, 213, 208, 15, 185, 97, 2, 204, 32, 152, 66, 140, 119, 140, 20, 2, 216, 17, 191, 101, 215, 93, 65, 218, 103, 164, 244, 34, 5, 179, 183, 173, 198, 240, 213, 198, 57, 244, 109, 194, 137, 37, 237, 185, 124, 138, 123, 148, 86, 216, 1, 152, 10, 185, 95, 12, 229, 132, 16, 168, 140, 157, 193, 59, 133, 145, 100, 74, 121, 53, 214, 0, 18, 233, 228, 205, 45, 248, 193, 85, 205, 72, 205, 35, 77, 50, 111, 17, 39, 77, 242, 24, 112, 120, 50, 30, 108, 254, 56, 235, 0, 142, 166, 192, 173, 75, 86, 40, 164, 220, 242, 78, 193, 59, 184, 156, 168, 90, 90, 55, 72, 13, 108, 161, 8, 194, 226, 24, 36, 137, 119, 107, 144, 245, 226, 8, 135, 166, 173, 89, 106, 47, 194, 65, 204, 254, 178, 78, 10, 150, 102, 120, 81, 77, 77, 18, 136, 77, 158, 154, 242, 250, 170, 30, 73, 57, 112, 163, 161, 30, 187, 117, 183, 75, 214, 230, 23, 90, 90, 147, 208, 90, 13, 238, 165, 185, 247, 131, 23, 161, 181, 54, 252, 236, 125, 137, 172, 49, 180, 220, 21, 15, 178, 197, 182, 164, 54, 231, 191, 240, 195, 209, 183, 60, 148, 227, 147, 67, 103, 69, 14, 50, 192, 229, 253, 65, 35, 116, 17, 98, 217, 172, 214, 243, 161, 8, 184, 39, 77, 199, 225, 223, 223, 225, 123, 38, 204, 104, 83, 62, 141, 238, 145, 28, 33, 175, 31, 243, 211, 159, 217, 29, 56, 223, 25, 122, 159, 158, 48, 7, 151, 219, 130, 251, 6, 229, 60, 134, 99, 34, 232, 124, 223, 193, 169, 194, 103, 30, 144, 99, 71, 10, 31, 221, 125, 76, 49, 174, 247, 90, 123, 113, 222, 10, 40, 42, 175, 55, 31, 59, 248, 23, 240, 222, 118, 226, 134, 67, 160, 157, 215, 56, 56, 67, 21, 200, 198, 158, 254, 143, 28, 170, 18, 90, 236, 31, 194, 167, 17, 121, 0, 50, 95, 27, 65, 143, 180, 239, 115, 18, 123, 241, 144, 95, 253, 248, 86, 220, 26, 149, 15, 13, 191, 222, 191, 129, 15, 202, 196, 222, 97, 74, 100, 129, 49, 223, 112, 23, 7, 160, 52, 149, 242, 61, 121, 230, 3, 107, 235, 29, 100, 247, 120, 235, 249, 149, 90, 147, 91, 201, 182, 31, 94, 250, 165, 35, 115, 209, 94, 226, 41, 171, 9, 138, 62, 67, 13, 243, 175, 229, 51, 32, 198, 126, 54, 207, 167, 47, 214, 91, 12, 33, 132, 252, 230, 127, 24, 60, 82, 49, 44, 139, 105, 43, 60, 12, 174, 113, 149, 171, 58, 40, 204, 144, 211, 66, 53, 208, 68, 251, 203, 42, 18, 44, 218, 157, 231, 238, 8, 175, 253, 105, 232, 232, 179, 239, 253, 85, 75, 208, 8, 31, 251, 226, 43, 42, 119, 205, 66, 255, 2, 214, 117, 164, 249, 15, 53, 63, 112, 28, 99, 79, 110, 50, 121, 222, 181, 193, 3, 44, 168, 210, 154, 149, 145, 162, 126, 19, 190, 162, 230, 171, 158, 24, 74, 113, 237, 182, 200, 251, 221, 9, 19, 144, 138, 8, 97, 109, 24, 211, 200, 115, 101, 154, 127, 226, 157, 36, 8, 171, 243, 191, 55, 107, 133, 241, 214, 16, 225, 171, 100, 76, 184, 92, 49, 7, 234, 15, 231, 77, 155, 199, 248, 121, 141, 42, 216, 41, 11, 30, 71, 40, 59, 239, 77, 30, 241, 203, 169, 243, 198, 74, 165, 188, 240, 125, 159, 174, 250, 147, 4, 246, 53, 68, 39, 131, 172, 195, 93, 176, 107, 167, 142, 141, 76, 206, 214, 44, 60, 155, 42, 97, 203, 68, 7, 134, 103, 99, 239, 10, 105, 128, 20, 32, 78, 255, 200, 101, 109, 201, 224, 241, 39, 108, 238, 255, 238, 105, 140, 26, 163, 233, 250, 122, 36, 168, 73, 188, 79, 243, 50, 18, 50, 90, 253, 131, 95, 83, 76, 138, 139, 80, 111, 245, 176, 63, 203, 31, 86, 198, 96, 93, 154, 127, 192, 189, 255, 230, 168, 218, 137, 172, 52, 198, 187, 147, 121, 200, 223, 42, 194, 217, 238, 140, 98, 238, 151, 24, 154, 131, 134, 87, 242, 166, 244, 216, 241, 119, 218, 233, 168, 77, 175, 254, 120, 146, 8, 27, 155, 5, 48, 124, 19, 157, 220, 40, 83, 237, 192, 46, 191, 188, 125, 35, 124, 122, 86, 66, 150, 42, 124, 178, 204, 59, 211, 110, 61, 93, 127, 147, 12, 88, 109, 212, 160, 198, 17, 150, 110, 241, 138, 134, 11, 186, 73, 181, 151, 161, 179, 184, 23, 205, 153, 80, 234, 117, 8, 30, 92, 5, 182, 229, 55, 115, 89, 230, 136, 225, 65, 15, 80, 234, 31, 176, 198, 189, 190, 50, 178, 206, 37, 175, 42, 92, 180, 214, 45, 7, 128, 216, 129, 59, 104, 156, 84, 47, 219, 242, 155, 227, 32, 86, 140, 135, 79, 207, 244, 175, 55, 211, 4, 202, 23, 20, 223, 47, 125, 206, 94, 138, 211, 123, 199, 16, 213, 109, 18, 142, 19, 62, 9, 55, 221, 253, 116, 206, 96, 205, 203, 104, 40, 125, 152, 231, 56, 185, 204, 109, 98, 210, 32, 35, 34, 224, 177, 65, 142, 119, 219, 97, 194, 41, 179, 99, 26, 163, 109, 153, 29, 54, 4, 78, 13, 168, 130, 12, 137, 221, 129, 16, 22, 154, 2, 100, 205, 131, 240, 108, 122, 149, 182, 122, 73, 26, 20, 215, 73, 160, 18, 17, 172, 75, 176, 132, 52, 54, 207, 102, 170, 2, 231, 59, 61, 89, 131, 191, 177, 178, 103, 196, 30, 99, 170, 174, 18, 53, 223, 91, 21, 125, 109, 201, 166, 169, 135, 186, 46, 202, 91, 73, 48, 203, 172, 175, 172, 73, 221, 52, 130, 219, 133, 75, 74, 228, 66, 139, 82, 218, 206, 80, 177, 180, 78, 30, 128, 93, 106, 102, 125, 20, 54, 52, 238, 16, 249, 68, 178, 173, 106, 197, 5, 255, 245, 40, 221, 27, 148, 56, 16, 19, 104, 98, 148, 61, 60, 45, 56, 158, 238, 26, 165, 141, 52, 152, 121, 125, 98, 142, 27, 8, 93, 179, 191, 250, 227, 151, 195, 67, 233, 187, 196, 168, 162, 141, 91, 67, 249, 189, 243, 25, 218, 174, 247, 109, 155, 184, 43, 34, 52, 247, 41, 175, 148, 97, 98, 235, 218, 190, 139, 52, 24, 45, 102, 71, 186, 75, 214, 43, 196, 50, 160, 197, 143, 242, 121, 251, 118, 37, 113, 228, 136, 84, 44, 164, 1, 236, 13, 202, 33, 60, 161, 55, 70, 106, 51, 187, 62, 214, 147, 16, 16, 131, 85, 147, 144, 209, 64, 9, 121, 196, 217, 54, 205, 158, 6, 233, 9, 166, 51, 188, 84, 34, 76, 162, 47, 112, 42, 16, 87, 165, 149, 149, 32, 228, 112, 82, 170, 132, 18, 9, 76, 226, 28, 152, 149, 226, 173, 217, 85, 29, 129, 201, 89, 33, 110, 69, 137, 139, 149, 25, 41, 108, 219, 250, 51, 65, 170, 118, 69, 114, 20, 22, 33, 102, 136, 180, 24, 67, 21, 124, 100, 176, 50, 213, 24, 72, 83, 171, 198, 175, 23, 37, 99, 216, 169, 48, 72, 79, 203, 175, 77, 212, 28, 115, 24, 64, 43, 66, 80, 169, 191, 19, 185, 148, 23, 126, 46, 123, 98, 85, 253, 68, 147, 234, 252, 76, 243, 122, 60, 124, 138, 188, 44, 63, 80, 167, 210, 139, 253, 6, 60, 23, 49, 229, 77, 56, 183, 248, 149, 53, 133, 188, 132, 245, 113, 81, 202, 54, 223, 41, 240, 2, 2, 69, 71, 217, 85, 115, 120, 146, 156, 67, 243, 234, 214, 211, 105, 18, 31, 38, 15, 241, 150, 17, 152, 98, 215, 140, 249, 196, 84, 164, 56, 252, 118, 48, 134, 87, 204, 27, 28, 32, 76, 137, 23, 250, 38, 78, 150, 118, 2, 228, 148, 91, 203, 72, 227, 247, 186, 109, 230, 106, 140, 228, 143, 217, 64, 127, 91, 49, 189, 194, 91, 32, 13, 161, 246, 130, 212, 181, 13, 90, 187, 167, 79, 210, 83, 74, 98, 31, 249, 45, 5, 191, 230, 190, 126, 130, 90, 99, 28, 57, 215, 118, 4, 81, 48, 15, 144, 64, 247, 130, 100, 198, 48, 237, 181, 83, 180, 44, 61, 77, 175, 155, 2, 28, 190, 155, 57, 225, 214, 214, 8, 244, 93, 169, 240, 84, 44, 27, 214, 186, 246, 220, 255, 67, 241, 166, 133, 220, 140, 203, 151, 81, 182, 116, 152, 84, 191, 210, 188, 54, 35, 91, 163, 56, 153, 0, 97, 68, 188, 181, 47, 240, 211, 73, 48, 242, 7, 15, 218, 137, 111, 126, 160, 188, 168, 216, 164, 56, 205, 58, 130, 184, 28, 128, 195, 101, 95, 202, 89, 25, 176, 141, 120, 26, 24, 19, 44, 17, 113, 187, 109, 111, 154, 208, 29, 29, 23, 43, 87, 171, 117, 32, 106, 82, 46, 70, 173, 230, 248, 212, 215, 45, 159, 125, 227, 165, 167, 167, 134, 222, 50, 223, 97, 231, 206, 112, 52, 126, 247, 103, 32, 75, 161, 57, 203, 222, 88, 39, 73, 143, 62, 249, 149, 8, 206, 48, 101, 93, 230, 121, 67, 247, 191, 237, 251, 99, 45, 54, 116, 130, 191, 112, 158, 42, 222, 249, 248, 24, 139, 126, 63, 60, 230, 175, 22, 175, 14, 136, 106, 1, 199, 225, 187, 173, 232, 226, 97, 117, 58, 146, 2, 167, 49, 30, 47, 5, 146, 120, 115, 93, 58, 103, 109, 195, 59, 20, 30, 39, 25, 81, 30, 154, 91, 68, 118, 147, 17, 151, 85, 162, 70, 56, 78, 96, 131, 0, 251, 167, 217, 235, 70, 196, 195, 254, 86, 85, 167, 218, 128, 136, 172, 204, 232, 54, 254, 32, 91, 150, 16, 0, 132, 144, 22, 26, 144, 240, 64, 72, 103, 106, 241, 162, 184, 120, 68, 3, 166, 250, 130, 202, 34, 199, 166, 125, 48, 133, 165, 81, 137, 248, 120, 38, 55, 84, 19, 81, 255, 175, 135, 207, 149, 70, 168, 158, 208, 149, 87, 35, 255, 16, 77, 146, 123, 121, 31, 24, 195, 114, 57, 156, 139, 167, 248, 243, 139, 51, 82, 132, 195, 101, 128, 161, 224, 240, 237, 129, 117, 87, 0, 80, 152, 164, 4, 251, 39, 22, 253, 112, 140, 242, 79, 243, 242, 102, 221, 220, 141, 249, 153, 228, 49, 90, 155, 98, 130, 100, 121, 228, 41, 225, 81, 125, 152, 120, 206, 131, 194, 146, 144, 216, 195, 65, 106, 42, 23, 227, 3, 140, 35, 66, 63, 121, 243, 55, 252, 250, 218, 75, 139, 56, 152, 109, 141, 55, 155, 126, 121, 14, 81, 245, 209, 33, 235, 249, 160, 137, 89, 10, 98, 68, 169, 193, 114, 223, 127, 172, 121, 124, 55, 124, 233, 127, 125, 102, 186, 11, 175, 141, 75, 209, 101, 219, 174, 33, 114, 38, 164, 116, 141, 154, 102, 56, 172, 30, 98, 231, 9, 141, 142, 177, 128, 73, 46, 163, 180, 208, 183, 46, 64, 241, 95, 119, 248, 207, 109, 249, 117, 248, 60, 148, 46, 116, 60, 139, 112, 118, 56, 48, 210, 250, 181, 0, 79, 80, 132, 74, 69, 14, 24, 73, 75, 139, 68, 212, 234, 73, 212, 8, 58, 27, 136, 169, 235, 235, 134, 224, 189, 47, 140, 241, 133, 252, 85, 4, 183, 231, 246, 84, 239, 141, 131, 71, 66, 208, 161, 143, 195, 207, 214, 195, 122, 249, 131, 152, 151, 111, 209, 76, 99, 81, 40, 147, 219, 166, 9, 89, 121, 234, 190, 48, 103, 106, 167, 16, 107, 5, 229, 20, 192, 115, 81, 165, 253, 168, 169, 2, 134, 237, 61, 28, 109, 244, 243, 28, 19, 110, 52, 116, 198, 3, 195, 197, 200, 0, 129, 127, 191, 8, 170, 91, 191, 232, 253, 176, 218, 55, 57, 39, 50, 118, 144, 58, 14, 2, 140, 46, 216, 169, 137, 81, 32, 179, 145, 193, 229, 217, 5, 64, 79, 83, 36, 84, 188, 78, 108, 85, 224, 195, 130, 92, 17, 63, 81, 73, 110, 85, 36, 162, 86, 19, 120, 17, 56, 219, 218, 185, 208, 218, 16, 102, 26, 236, 217, 202, 176, 69, 64, 221, 110, 47, 92, 115, 15, 226, 100, 102, 60, 128, 62, 49, 187, 127, 105, 218, 37, 197, 229, 186, 193, 6, 20, 252, 169, 3, 67, 77, 50, 152, 143, 122, 64, 92, 123, 220, 220, 177, 205, 217, 235, 196, 113, 39, 119, 16, 202, 230, 189, 8, 42, 230, 249, 117, 76, 182, 44, 163, 129, 170, 74, 231, 244, 104, 17, 83, 201, 243, 62, 92, 30, 22, 201, 164, 142, 69, 231, 152, 216, 242, 231, 195, 246, 232, 212, 80, 59, 67, 201, 31, 184, 166, 225, 196, 176, 116, 249, 226, 252, 153, 96, 211, 49, 244, 26, 108, 86, 187, 231, 211, 49, 24, 135, 146, 230, 109, 209, 10, 202, 106, 251, 216, 231, 177, 123, 77, 146, 37, 147, 9, 179, 59, 163, 52, 125, 152, 185, 16, 23, 3, 189, 86, 216, 33, 65, 113, 67, 138, 26, 130, 106, 157, 3, 168, 74, 25, 159, 59, 86, 51, 28, 27, 84, 14, 32, 251, 231, 35, 187, 93, 132, 179, 214, 144, 136, 15, 212, 248, 66, 103, 28, 223, 38, 12, 116, 134, 237, 107, 47, 209, 147, 204, 131, 69, 2, 109, 130, 62, 110, 171, 179, 189, 45, 228, 16, 121, 123, 65, 254, 21, 186, 165, 197, 243, 3, 120, 236, 234, 59, 241, 98, 230, 17, 112, 232, 214, 129, 218, 254, 67, 119, 242, 47, 63, 114, 62, 64, 143, 163, 249, 243, 83, 87, 129, 82, 215, 60, 8, 41, 151, 206, 205, 138, 35, 245, 217, 248, 242, 167, 244, 110, 31, 244, 255, 193, 109, 118, 129, 248, 196, 103, 200, 24, 200, 83, 159, 6, 180, 41, 78, 28, 38, 216, 192, 73, 211, 97, 198, 51, 99, 101, 90, 74, 128, 194, 11, 109, 54, 143, 13, 18, 171, 32, 17, 201, 196, 98, 88, 156, 201, 123, 167, 76, 182, 30, 120, 90, 182, 6, 233, 164, 57, 253, 40, 170, 109, 132, 222, 151, 108, 174, 34, 255, 41, 138, 230, 211, 61, 227, 37, 73, 109, 174, 19, 204, 45, 110, 158, 207, 183, 208, 188, 82, 223, 5, 175, 109, 226, 184, 195, 147, 11, 58, 15, 51, 68, 227, 80, 230, 71, 155, 156, 19, 211, 103, 127, 94, 85, 116, 23, 30, 33, 207, 191, 210, 154, 51, 189, 226, 106, 238, 64, 251, 179, 140, 6, 198, 123, 229, 238, 52, 250, 157, 182, 58, 255, 191, 194, 123, 163, 195, 49, 20, 206, 118, 160, 186, 26, 200, 64, 242, 134, 73, 190, 230, 125, 168, 106, 85, 183, 11, 248, 34, 253, 140, 232, 240, 93, 131, 217, 99, 93, 185, 179, 105, 123, 25, 201, 101, 242, 103, 206, 75, 169, 76, 10, 148, 202, 87, 215, 71, 58, 186, 144, 249, 128, 222, 45, 13, 18, 38, 108, 136, 245, 95, 140, 142, 167, 118, 56, 47, 42, 132, 202, 251, 180, 170, 8, 189, 10, 167, 208, 10, 133, 85, 9, 225, 194, 139, 79, 245, 151, 196, 49, 222, 52, 154, 23, 102, 110, 91, 112, 186, 166, 24, 130, 248, 153, 236, 22, 34, 115, 123, 118, 204, 122, 73, 81, 196, 179, 246, 80, 88, 96, 186, 219, 67, 203, 117, 134, 18, 49, 128, 67, 169, 187, 222, 115, 4, 2, 139, 137, 70, 96, 207, 67, 171, 254, 180, 98, 47, 71, 13, 182, 180, 167, 35, 162, 250, 180, 106, 56, 60, 242, 165, 91, 122, 249, 213, 184, 95, 48, 171, 170, 36, 132, 13, 200, 59, 154, 128, 73, 29, 242, 23, 151, 105, 29, 25, 253, 139, 27, 190, 177, 54, 20, 79, 194, 126, 76, 20, 107, 37, 9, 73, 42, 66, 200, 204, 5, 36, 142, 45, 151, 57, 207, 151, 158, 34, 83, 150, 4, 44, 178, 240, 63, 126, 230, 88, 189, 137, 133, 232, 163, 98, 74, 23, 87, 47, 94, 85, 65, 176, 89, 139, 19, 58, 12, 128, 153, 4, 194, 57, 40, 207, 227, 216, 235, 108, 115, 199, 226, 88, 199, 7, 81, 238, 106, 137, 35, 17, 4, 88, 126, 36, 78, 27, 185, 51, 157, 10, 30, 95, 205, 78, 15, 124, 62, 146, 78, 6, 4, 91, 91, 1, 250, 136, 155, 81, 113, 135, 189, 208, 101, 109, 81, 226, 189, 31, 249, 88, 108, 19, 239, 84, 95, 20, 1, 47, 205, 8, 245, 125, 105, 47, 157, 210, 75, 28, 115, 157, 19, 107, 213, 143, 132, 42, 151, 74, 81, 106, 61, 224, 30, 53, 203, 213, 58, 162, 65, 68, 169, 140, 1, 172, 76, 130, 107, 159, 7, 163, 45, 54, 122, 125, 15, 24, 253, 161, 30, 97, 140, 3, 149, 181, 155, 251, 225, 202, 210, 74, 143, 39, 193, 24, 65, 171, 22, 84, 11, 25, 86, 80, 47, 122, 118, 10, 228, 39, 169, 84, 55, 99, 191, 117, 37, 49, 193, 57, 63, 251, 176, 158, 96, 150, 35, 153, 180, 142, 186, 244, 247, 3, 65, 234, 152, 36, 82, 99, 150, 142, 49, 249, 75, 164, 178, 187, 230, 78, 228, 181, 4, 253, 57, 6, 52, 49, 24, 62, 202, 59, 58, 224, 97, 163, 210, 30, 252, 15, 255, 180, 184, 244, 34, 95, 88, 193, 98, 223, 10, 162, 59, 61, 203, 140, 145, 171, 194, 194, 68, 187, 87, 130, 161, 98, 219, 51, 75, 129, 210, 168, 67, 237, 19, 236, 209, 121, 99, 234, 239, 34, 66, 14, 91, 251, 165, 70, 190, 63, 86, 241, 19, 16, 240, 246, 197, 165, 29, 27, 142, 158, 230, 142, 1, 118, 1, 0, 152, 2, 219, 26, 1, 65, 163, 34, 92, 118, 217, 113, 74, 53, 169, 82, 214, 121, 174, 138, 66, 213, 153, 129, 185, 38, 194, 126, 148, 98, 216, 73, 198, 188, 73, 69, 101, 4, 175, 200, 149, 62, 216, 135, 2, 136, 111, 83, 157, 25, 121, 163, 163, 194, 241, 188, 142, 241, 123, 36, 55, 31, 14, 147, 135, 35, 127, 29, 12, 70, 133, 232, 117, 197, 13, 4, 91, 24, 98, 219, 4, 80, 69, 144, 253, 61, 203, 197, 231, 218, 161, 0, 150, 106, 148, 4, 67, 2, 211, 123, 130, 90, 169, 225, 165, 184, 3, 190, 62, 135, 75, 47, 53, 134, 198, 182, 121, 135, 199, 39, 253, 125, 130, 66, 96, 139, 115, 223, 167, 114, 1, 173, 172, 85, 150, 178, 145, 234, 158, 188, 91, 254, 162, 72, 134, 3, 111, 135, 183, 143, 125, 34, 113, 217, 100, 250, 52, 137, 1, 118, 73, 168, 141, 206, 146, 207, 61, 33, 182, 207, 129, 208, 46, 4, 72, 118, 178, 10, 52, 4, 232, 24, 12, 250, 250, 189, 2, 160, 88, 141, 194, 113, 98, 170, 5, 39, 23, 44, 50, 38, 175, 140, 173, 242, 200, 209, 27, 20, 45, 39, 228, 72, 224, 36, 250, 32, 252, 112, 129, 104, 11, 121, 110, 240, 98, 95, 248, 5, 185, 172, 88, 91, 95, 143, 202, 54, 117, 119, 188, 143, 204, 196, 37, 95, 24, 82, 227, 145, 88, 211, 80, 34, 253, 26, 42, 95, 242, 174, 220, 172, 220, 124, 97, 164, 160, 110, 0, 241, 222, 85, 76, 21, 12, 140, 143, 192, 48, 111, 240, 6, 241, 0, 194, 145, 226, 123, 242, 179, 165, 30, 81, 151, 163, 199, 143, 166, 55, 147, 25, 117, 27, 249, 64, 65, 220, 206, 212, 105, 249, 214, 2, 40, 161, 149, 125, 133, 78, 76, 205, 5, 56, 124, 153, 113, 36, 5, 18, 150, 128, 253, 158, 103, 231, 135, 47, 39, 209, 13, 202, 184, 230, 148, 184, 42, 14, 96, 134, 151, 241, 220, 36, 150, 82, 158, 129, 80, 136, 176, 73, 53, 252, 173, 38, 53, 128, 188, 95, 45, 147, 162, 255, 3, 178, 23, 195, 194, 70, 167, 200, 137, 41, 174, 18, 125, 135, 103, 111, 9, 235, 216, 147, 190, 95, 129, 206, 97, 28, 27, 237, 37, 6, 195, 215, 77, 103, 105, 34, 171, 60, 217, 172, 180, 196, 223, 112, 147, 183, 33, 50, 227, 27, 62, 105, 239, 241, 18, 55, 66, 9, 142, 237, 3, 154, 121, 139, 133, 197, 50, 204, 17, 138, 90, 41, 100, 198, 35, 8, 133, 207, 207, 142, 156, 195, 47, 190, 26, 94, 3, 222, 158, 226, 153, 172, 46, 19, 213, 255, 224, 142, 66, 55, 110, 181, 129, 218, 26, 158, 216, 2, 207, 129, 44, 151, 137, 50, 244, 181, 21, 169, 191, 194, 106, 240, 34, 245, 23, 28, 125, 1, 35, 53, 208, 73, 54, 37, 160, 212, 214, 59, 124, 28, 152, 138, 66, 41, 221, 224, 115, 151, 175, 106, 156, 54, 193, 97, 43, 68, 11, 136, 37, 229, 143, 0, 84, 198, 53, 161, 198, 80, 165, 46, 162, 81, 17, 72, 86, 210, 50, 47, 94, 249, 0, 98, 217, 197, 183, 185, 102, 239, 1, 52, 255, 196, 56, 86, 132, 154, 21, 183, 174, 32, 172, 58, 181, 75, 68, 85, 251, 28, 187, 139, 19, 205, 17, 42, 108, 44, 234, 244, 151, 89, 81, 99, 153, 234, 212, 171, 85, 73, 244, 225, 210, 166, 184, 211, 191, 55, 40, 239, 49, 205, 167, 213, 99, 115, 63, 13, 14, 111, 182, 59, 14, 163, 101, 207, 160, 252, 96, 93, 48, 240, 105, 121, 4, 82, 95, 104, 131, 24, 125, 142, 23, 219, 141, 61, 224, 24, 243, 100, 129, 49, 187, 213, 248, 139, 57, 19, 31, 99, 12, 19, 122, 115, 3, 212, 202, 114, 176, 179, 254, 154, 165, 110, 158, 104, 32, 218, 207, 222, 177, 239, 229, 231, 115, 227, 157, 142, 235, 167, 135, 200, 30, 202, 34, 59, 88, 184, 246, 129, 11, 225, 12, 6, 93, 130, 110, 158, 46, 124, 87, 146, 199, 78, 58, 131, 145, 172, 211, 182, 226, 84, 70, 163, 145, 88, 63, 173, 233, 36, 241, 163, 164, 81, 49, 44, 35, 241, 92, 124, 53, 153, 9, 227, 29, 174, 139, 132, 228, 106, 59, 218, 147, 15, 226, 31, 92, 168, 252, 216, 123, 44, 34, 254, 205, 63, 141, 82, 87, 152, 71, 251, 221, 145, 243, 115, 1, 211, 93, 24, 53, 142, 54, 190, 93, 198, 79, 78, 23, 81, 94, 111, 232, 245, 14, 29, 243, 111, 236, 199, 104, 68, 224, 25, 130, 79, 199, 93, 3, 155, 7, 39, 24, 169, 66, 16, 34, 102, 231, 122, 58, 95, 19, 94, 151, 180, 92, 154, 229, 243, 82, 5, 251, 177, 109, 101, 252, 123, 191, 116, 144, 215, 73, 211, 47, 176, 153, 67, 213, 203, 71, 237, 250, 94, 61, 64, 177, 231, 218, 219, 70, 232, 247, 49, 103, 152, 142, 61, 219, 97, 83, 118, 14, 90, 165, 185, 169, 249, 72, 10, 231, 128, 50, 220, 101, 148, 253, 255, 255, 175, 49, 252, 32, 23, 10, 43, 215, 214, 231, 246, 60, 127, 7, 12, 251, 249, 182, 70, 248, 5, 112, 79, 122, 146, 134, 201, 75, 57, 195, 3, 80, 141, 246, 88, 164, 124, 234, 102, 119, 244, 90, 40, 27, 156, 207, 46, 44, 232, 196, 52, 92, 57, 156, 78, 225, 216, 135, 148, 183, 215, 74, 114, 131, 198, 211, 179, 72, 144, 169, 58, 249, 144, 122, 205, 7, 89, 79, 230, 4, 109, 129, 192, 209, 96, 91, 232, 214, 96, 199, 197, 151, 19, 108, 40, 247, 167, 145, 177, 214, 29, 195, 81, 174, 152, 131, 66, 228, 75, 55, 166, 30, 187, 192, 74, 101, 187, 29, 138, 65, 99, 187, 106, 216, 131, 205, 131, 101, 7, 181, 86, 131, 219, 55, 38, 247, 14, 83, 67, 125, 253, 203, 207, 207, 168, 134, 126, 229, 163, 106, 77, 92, 216, 133, 106, 172, 216, 252, 37, 227, 99, 219, 145, 200, 178, 2, 3, 211, 9, 206, 9, 34, 94, 232, 8, 89, 20, 79, 75, 171, 129, 203, 13, 22, 136, 124, 13, 91, 29, 208, 135, 174, 253, 51, 13, 79, 37, 57, 44, 238, 130, 103, 180, 185, 156, 83, 224, 10, 177, 26, 3, 33, 123, 168, 154, 253, 111, 77, 170, 183, 175, 46, 167, 26, 190, 48, 62, 111, 167, 232, 233, 54, 246, 251, 132, 15, 239, 219, 204, 53, 64, 168, 219, 9, 102, 103, 37, 117, 217, 221, 93, 1, 33, 81, 123, 27, 52, 229, 56, 79, 52, 185, 245, 94, 5, 42, 253, 112, 137, 136, 89, 27, 16, 61, 45, 236, 254, 206, 32, 111, 33, 11, 85, 137, 39, 91, 200, 67, 133, 239, 103, 15, 43, 150, 178, 53, 240, 234, 253, 215, 139, 154, 136, 28, 91, 179, 35, 106, 61, 198, 225, 145, 190, 255, 30, 38, 87, 35, 113, 124, 14, 42, 94, 63, 12, 151, 97, 70, 91, 86, 119, 112, 247, 151, 84, 209, 188, 190, 21, 67, 215, 81, 252, 70, 225, 106, 11, 225, 21, 23, 207, 133, 175, 123, 181, 215, 190, 210, 213, 153, 72, 62, 254, 228, 10, 105, 8, 15, 210, 53, 118, 208, 203, 115, 77, 1, 202, 14, 62, 91, 214, 174, 228, 95, 251, 1, 251, 110, 81, 62, 173, 250, 115, 2, 147, 201, 67, 85, 133, 44, 112, 12, 217, 189, 18, 87, 116, 69, 234, 84, 234, 3, 129, 132, 247, 94, 41, 38, 183, 255, 236, 36, 19, 203, 174, 98, 113, 7, 59, 224, 48, 168, 249, 223, 196, 247, 121, 15, 193, 34, 53, 41, 250, 82, 52, 172, 89, 91, 4, 22, 117, 96, 237, 1, 218, 168, 212, 31, 182, 226, 187, 59, 62, 218, 36, 113, 60, 218, 30, 95, 146, 197, 148, 74, 54, 40, 156, 234, 163, 7, 193, 86, 234, 16, 141, 136, 131, 87, 51, 189, 49, 47, 157, 2, 197, 144, 49, 171, 113, 224, 191, 185, 206, 85, 235, 141, 17, 97, 134, 6, 44, 143, 86, 121, 197, 6, 91, 189, 199, 146, 158, 163, 74, 119, 229, 113, 71, 40, 72, 64, 120, 77, 73, 107, 196, 238, 8, 75, 232, 116, 25, 142, 246, 12, 49, 28, 184, 11, 171, 178, 69, 154, 250, 113, 200, 92, 203, 5, 66, 60, 107, 28, 44, 183, 46, 99, 162, 41, 35, 171, 133, 99, 12, 141, 101, 68, 84, 231, 42, 242, 102, 23, 141, 134, 198, 49, 243, 83, 253, 36, 44, 46, 130, 2, 42, 71, 230, 78, 34, 153, 6, 231, 115, 126, 87, 65, 112, 82, 169, 112, 92, 235, 39, 175, 52, 94, 201, 59, 240, 175, 116, 197, 121, 67, 80, 77, 235, 218, 18, 102, 54, 140, 208, 199, 73, 108, 220, 3, 52, 194, 249, 141, 77, 175, 116, 34, 14, 185, 232, 189, 8, 173, 69, 52, 138, 229, 72, 214, 77, 232, 57, 26, 139, 87, 104, 155, 17, 101, 118, 153, 154, 108, 0, 159, 178, 149, 176, 57, 115, 129, 143, 113, 209, 202, 239, 255, 54, 221, 205, 251, 171, 34, 255, 244, 137, 41, 92, 144, 37, 182, 80, 131, 177, 97, 202, 230, 203, 239, 68, 75, 153, 125, 86, 25, 215, 1, 254, 113, 24, 181, 248, 23, 47, 155, 123, 81, 124, 125, 161, 232, 97, 244, 205, 253, 136, 111, 10, 158, 87, 250, 202, 211, 77, 61, 175, 234, 96, 247, 228, 194, 138, 69, 162, 113, 42, 174, 90, 187, 189, 101, 115, 62, 125, 192, 48, 199, 72, 221, 225, 129, 184, 41, 103, 175, 92, 57, 163, 0, 95, 191, 169, 248, 8, 87, 28, 254, 127, 121, 165, 27, 177, 54, 209, 39, 3, 5, 88, 11, 109, 67, 249, 38, 212, 109, 142, 143, 253, 189, 201, 79, 115, 214, 79, 14, 169, 62, 80, 199, 201, 43, 111, 101, 68, 233, 213, 200, 153, 152, 49, 155, 166, 196, 169, 122, 105, 223, 113, 139, 100, 75, 14, 216, 172, 207, 217, 27, 44, 153, 199, 145, 155, 134, 123, 113, 8, 121, 67, 14, 129, 43, 60, 59, 24, 191, 176, 68, 78, 79, 192, 237, 249, 10, 228, 87, 60, 251, 62, 86, 1, 242, 43, 164, 242, 146, 124, 227, 153, 214, 59, 230, 149, 81, 127, 44, 11, 208, 29, 62, 50, 239, 107, 167, 108, 13, 124, 127, 248, 182, 139, 195, 110, 82, 93, 71, 194, 249, 55, 250, 20, 196, 131, 176, 54, 21, 123, 133, 97, 139, 50, 157, 81, 29, 99, 38, 50, 107, 9, 17, 231, 43, 11, 230, 169, 12, 10, 132, 54, 0, 139, 44, 111, 137, 36, 87, 207, 178, 233, 38, 126, 201, 45, 93, 49, 99, 20, 29, 233, 187, 1, 142, 248, 41, 253, 110, 22, 30, 100, 253, 44, 203, 6, 28, 50, 182, 32, 63, 234, 206, 239, 104, 140, 153, 67, 108, 137, 223, 126, 123, 249, 24, 67, 239, 20, 149, 175, 18, 76, 195, 201, 31, 144, 2, 251, 34, 128, 187, 181, 103, 208, 221, 187, 129, 85, 32, 65, 230, 254, 100, 28, 118, 40, 206, 92, 12, 99, 22, 3, 115, 15, 155, 234, 186, 199, 214, 140, 72, 177, 143, 110, 158, 75, 106, 194, 144, 107, 239, 117, 252, 236, 49, 218, 197, 212, 190, 148, 154, 174, 195, 20, 242, 127, 171, 9, 208, 197, 63, 138, 158, 0, 246, 41, 129, 119, 9, 185, 103, 119, 15, 126, 123, 176, 53, 122, 136, 223, 156, 250, 188, 84, 133, 192, 101, 89, 51, 236, 73, 221, 75, 203, 176, 249, 25, 185, 118, 93, 110, 51, 18, 44, 133, 97, 5, 235, 196, 253, 213, 141, 113, 253, 91, 1, 151, 139, 248, 30, 146, 201, 188, 140, 249, 20, 138, 42, 164, 1, 139, 70, 24, 124, 53, 97, 12, 166, 205, 26, 108, 170, 231, 237, 57, 215, 67, 90, 139, 65, 166, 243, 252, 222, 50, 65, 35, 181, 22, 226, 218, 180, 150, 105, 45, 252, 120, 103, 175, 21, 78, 68, 149, 39, 106, 239, 68, 146, 35, 177, 8, 250, 244, 201, 75, 159, 42, 174, 54, 252, 44, 158, 3, 131, 27, 245, 212, 199, 39, 42, 239, 194, 181, 148, 221, 108, 104, 30, 60, 24, 199, 208, 204, 44, 90, 110, 40, 32, 195, 59, 73, 44, 165, 231, 29, 34, 10, 123, 131, 85, 180, 213, 245, 67, 80, 157, 103, 61, 11, 109, 250, 150, 24, 152, 195, 251, 64, 134, 125, 134, 247, 182, 94, 75, 151, 21, 126, 30, 29, 19, 115, 172, 188, 18, 220, 170, 205, 89, 247, 147, 9, 43, 22, 195, 221, 95, 196, 251, 71, 12, 107, 227, 119, 161, 251, 93, 117, 48, 127, 35, 131, 139, 248, 244, 150, 157, 183, 75, 10, 251, 99, 11, 29, 111, 32, 251, 45, 27, 46, 220, 184, 51, 112, 246, 198, 59, 139, 60, 236, 252, 126, 40, 96, 92, 145, 105, 253, 217, 60, 38, 187, 28, 174, 110, 56, 1, 10, 210, 202, 71, 238, 170, 110, 89, 40, 56, 94, 253, 206, 19, 80, 118, 156, 34, 154, 149, 187, 11, 180, 31, 103, 159, 41, 118, 84, 70, 75, 7, 32, 215, 44, 163, 213, 25, 201, 129, 201, 74, 198, 181, 247, 32, 253, 184, 149, 148, 28, 95, 170, 110, 1, 204, 114, 234, 223, 239, 140, 152, 165, 14, 144, 66, 189, 21, 84, 110, 9, 70, 216, 40, 137, 65, 54, 106, 83, 113, 135, 249, 244, 44, 109, 112, 203, 174, 141, 41, 57, 29, 197, 180, 61, 136, 190, 210, 218, 38, 229, 231, 126, 164, 180, 190, 110, 252, 34, 148, 239, 164, 216, 146, 89, 244, 169, 24, 239, 195, 46, 140, 181, 38, 147, 80, 218, 202, 100, 54, 64, 106, 180, 196, 39, 166, 197, 136, 176, 6, 0, 24, 144, 27, 118, 42, 155, 181, 207, 58, 26, 168, 248, 171, 103, 183, 170, 185, 163, 152, 18, 95, 164, 149, 216, 68, 89, 59, 122, 138, 10, 239, 15, 192, 155, 110, 47, 137, 21, 203, 121, 188, 45, 184, 192, 176, 205, 237, 217, 92, 64, 142, 25, 216, 85, 114, 0, 255, 248, 203, 124, 129, 115, 57, 252, 143, 189, 160, 136, 177, 152, 79, 223, 243, 109, 79, 145, 108, 177, 191, 14, 49, 45, 10, 152, 179, 164, 98, 13, 153, 52, 255, 0, 219, 129, 48, 186, 81, 41, 26, 135, 58, 66, 156, 234, 220, 113, 7, 118, 71, 117, 4, 65, 130, 26, 240, 130, 156, 7, 40, 113, 82, 247, 120, 189, 243, 204, 102, 22, 29, 218, 241, 237, 100, 218, 40, 180, 202, 24, 199, 14, 36, 86, 89, 135, 160, 209, 35, 101, 124, 166, 76, 192, 225, 165, 1, 21, 107, 254, 222, 212, 55, 120, 179, 178, 206, 17, 180, 176, 207, 209, 119, 12, 8, 208, 225, 177, 70, 144, 58, 246, 84, 94, 30, 202, 21, 139, 216, 96, 30, 167, 27, 248, 148, 125, 82, 233, 69, 74, 74, 255, 18, 224, 81, 52, 33, 234, 193, 171, 9, 62, 68, 249, 184, 115, 82, 203, 136, 198, 58, 31, 198, 227, 120, 245, 79, 132, 85, 181, 153, 224, 161, 119, 31, 226, 46, 49, 45, 172, 10, 33, 210, 46, 130, 93, 38, 102, 101, 172, 134, 138, 169, 139, 185, 138, 214, 61, 228, 0, 80, 57, 42, 154, 157, 182, 72, 105, 204, 109, 49, 137, 220, 90, 126, 223, 22, 175, 60, 202, 56, 203, 137, 130, 223, 55, 69, 72, 19, 65, 16, 126, 152, 108, 7, 27, 45, 168, 243, 39, 38, 17, 208, 172, 42, 188, 170, 234, 149, 4, 40, 53, 232, 226, 220, 246, 161, 236, 78, 250, 116, 144, 155, 88, 67, 52, 175, 54, 240, 107, 111, 151, 85, 113, 233, 76, 220, 42, 171, 17, 15, 36, 92, 168, 245, 164, 93, 185, 151, 13, 20, 228, 171, 56, 58, 67, 119, 121, 55, 160, 107, 94, 6, 28, 213, 203, 108, 47, 206, 250, 190, 202, 122, 75, 248, 167, 51, 47, 100, 168, 198, 241, 174, 176, 53, 56, 53, 225, 78, 248, 23, 201, 249, 13, 96, 28, 10, 69, 143, 42, 44, 180, 38, 188, 122, 243, 84, 210, 239, 16, 76, 208, 235, 35, 109, 31, 52, 122, 90, 248, 4, 111, 181, 21, 3, 247, 150, 80, 74, 240, 8, 147, 231, 100, 230, 22, 92, 205, 83, 140, 36, 95, 193, 105, 150, 90, 19, 35, 125, 126, 88, 143, 247, 141, 74, 255, 60, 47, 180, 219, 85, 17, 85, 61, 154, 17, 158, 126, 226, 30, 31, 129, 51, 54, 189, 64, 71, 30, 121, 154, 236, 25, 20, 208, 118, 17, 12, 4, 199, 228, 81, 159, 71, 199, 162, 26, 92, 221, 28, 183, 133, 220, 148, 240, 251, 12, 49, 219, 63, 30, 150, 71, 246, 41, 251, 173, 43, 20, 215, 137, 249, 197, 93, 119, 105, 249, 111, 184, 143, 71, 84, 251, 213, 54, 67, 13, 154, 25, 110, 253, 85, 73, 29, 6, 39, 230, 149, 75, 29, 45, 223, 225, 188, 183, 184, 91, 175, 6, 254, 14, 46, 166, 107, 126, 120, 30, 189, 225, 187, 116, 201, 13, 178, 42, 26, 176, 86, 147, 254, 189, 123, 215, 4, 203, 75, 251, 191, 22, 33, 101, 116, 179, 228, 197, 242, 66, 229, 124, 26, 86, 91, 18, 158, 55, 201, 150, 9, 168, 216, 191, 22, 92, 219, 4, 117, 26, 116, 96, 161, 201, 121, 141, 207, 159, 148, 215, 56, 230, 11, 17, 24, 203, 171, 167, 245, 95, 1, 162, 230, 49, 45, 93, 20, 176, 36, 124, 116, 239, 147, 150, 238, 218, 163, 4, 189, 1, 13, 247, 74, 137, 130, 132, 77, 52, 239, 51, 226, 238, 4, 191, 62, 161, 93, 211, 158, 21, 31, 77, 231, 225, 225, 231, 36, 94, 7, 173, 123, 47, 88, 104, 113, 52, 239, 113, 183, 214, 200, 93, 151, 240, 103, 41, 172, 222, 108, 217, 81, 69, 28, 118, 234, 6, 88, 131, 85, 49, 116, 197, 1, 242, 108, 194, 241, 10, 106, 120, 99, 98, 190, 205, 81, 37, 33, 78, 51, 158, 92, 29, 146, 254, 151, 229, 152, 76, 211, 252, 69, 41, 0, 56, 118, 159, 155, 127, 89, 213, 56, 18, 119, 212, 5, 237, 14, 43, 127, 224, 238, 149, 240, 104, 150, 234, 45, 137, 124, 74, 68, 231, 182, 168, 215, 3, 35, 10, 192, 176, 78, 180, 180, 105, 68, 74, 60, 189, 106, 245, 151, 153, 148, 169, 25, 242, 110, 147, 195, 40, 123, 244, 183, 157, 205, 96, 90, 240, 176, 240, 194, 2, 74, 110, 26, 199, 161, 8, 36, 214, 2, 186, 179, 223, 73, 60, 181, 106, 89, 112, 136, 23, 213, 39, 136, 237, 120, 255, 238, 92, 209, 214, 74, 131, 46, 44, 151, 132, 194, 171, 136, 12, 125, 242, 245, 232, 141, 110, 5, 146, 251, 216, 166, 85, 35, 77, 32, 213, 83, 171, 125, 88, 188, 225, 137, 205, 215, 28, 221, 32, 68, 142, 134, 129, 68, 165, 233, 183, 161, 33, 92, 161, 30, 182, 60, 157, 9, 24, 242, 168, 78, 72, 48, 123, 62, 32, 120, 167, 97, 71, 187, 249, 87, 219, 216, 159, 9, 105, 168, 249, 73, 244, 162, 111, 147, 243, 50, 246, 235, 79, 26, 153, 212, 164, 39, 139, 187, 56, 244, 240, 91, 89, 109, 108, 157, 99, 75, 16, 129, 62, 120, 127, 231, 62, 19, 164, 213, 28, 251, 219, 217, 91, 215, 42, 178, 33, 177, 61, 201, 34, 170, 173, 66, 16, 62, 162, 18, 39, 42, 82, 9, 254, 141, 100, 187, 173, 120, 36, 56, 142, 132, 12, 7, 194, 89, 138, 149, 52, 33, 212, 211, 172, 2, 210, 80, 68, 21, 254, 110, 14, 69, 56, 144, 68, 32, 48, 7, 54, 137, 102, 17, 194, 141, 194, 86, 117, 140, 28, 106, 187, 143, 105, 7, 182, 236, 236, 174, 95, 27, 213, 200, 93, 73, 80, 67, 236, 163, 152, 115, 62, 207, 184, 148, 9, 59, 125, 71, 239, 106, 109, 95, 246, 81, 4, 108, 10, 83, 67, 159, 58, 175, 109, 197, 180, 95, 238, 150, 211, 239, 111, 70, 89, 181, 158, 61, 243, 139, 195, 81, 107, 82, 182, 33, 76, 50, 252, 16, 46, 45, 117, 175, 138, 241, 25, 121, 234, 172, 12, 104, 202, 94, 240, 111, 2, 224, 146, 5, 52, 132, 179, 116, 54, 175, 108, 123, 251, 69, 216, 230, 123, 144, 123, 180, 225, 45, 124, 26, 215, 3, 48, 82, 207, 146, 191, 57, 9, 7, 200, 120, 224, 68, 41, 166, 164, 26, 228, 93, 136, 143, 63, 254, 198, 202, 212, 167, 7, 195, 130, 143, 166, 161, 246, 46, 238, 123, 73, 32, 68, 86, 224, 55, 217, 143, 185, 15, 137, 233, 116, 65, 111, 210, 221, 83, 221, 150, 98, 200, 245, 156, 222, 244, 69, 68, 115, 79, 45, 21, 182, 76, 203, 18, 100, 18, 233, 229, 49, 239, 252, 245, 186, 233, 161, 7, 229, 250, 50, 90, 176, 219, 49, 99, 136, 79, 95, 217, 253, 61, 111, 9, 154, 144, 248, 31, 146, 14, 165, 235, 231, 129, 65, 115, 40, 48, 205, 110, 212, 144, 222, 44, 98, 194, 64, 88, 118, 142, 239, 192, 106, 255, 172, 34, 73, 107, 237, 33, 92, 118, 163, 21, 195, 152, 221, 77, 194, 222, 147, 61, 45, 34, 128, 109, 65, 167, 84, 160, 217, 245, 226, 226, 229, 12, 79, 253, 69, 16, 232, 181, 189, 15, 255, 8, 9, 172, 124, 81, 149, 47, 30, 169, 86, 12, 200, 248, 140, 230, 97, 74, 106, 40, 144, 179, 52, 96, 135, 102, 187, 174, 26, 127, 134, 250, 15, 101, 145, 198, 49, 29, 250, 162, 50, 65, 22, 237, 36, 83, 132, 176, 67, 43, 181, 227, 61, 84, 153, 49, 36, 98, 212, 117, 22, 157, 5, 182, 50, 152, 104, 243, 70, 8, 228, 171, 245, 105, 101, 103, 248, 38, 200, 0, 2, 103, 203, 238, 41, 115, 69, 173, 173, 163, 231, 104, 221, 144, 236, 129, 109, 54, 56, 80, 36, 215, 15, 49, 233, 240, 77, 241, 182, 180, 119, 78, 53, 91, 209, 140, 115, 243, 125, 31, 112, 230, 157, 178, 74, 15, 137, 34, 16, 65, 155, 110, 10, 96, 79, 30, 202, 53, 175, 255, 67, 138, 168, 246, 213, 236, 61, 179, 7, 102, 104, 74, 83, 96, 42, 92, 85, 29, 179, 155, 183, 16, 89, 212, 48, 225, 131, 57, 123, 8, 5, 177, 75, 105, 171, 192, 60, 115, 214, 30, 136, 36, 230, 244, 15, 17, 152, 120, 148, 138, 8, 177, 67, 106, 169, 35, 116, 157, 170, 240, 64, 178, 247, 60, 154, 86, 76, 202, 199, 94, 125, 133, 232, 246, 219, 91, 242, 252, 66, 201, 70, 71, 128, 149, 149, 247, 177, 247, 59, 99, 226, 5, 194, 147, 23, 48, 24, 148, 21, 86, 189, 193, 101, 20, 9, 55, 145, 244, 178, 203, 215, 192, 47, 137, 146, 179, 73, 31, 224, 8, 196, 145, 151, 230, 12, 156, 199, 197, 17, 88, 146, 203, 106, 86, 5, 57, 156, 65, 212, 97, 53, 208, 6, 210, 159, 61, 97, 91, 249, 233, 11, 224, 74, 73, 234, 197, 70, 0, 179, 56, 50, 94, 249, 226, 20, 14, 88, 46, 215, 33, 167, 14, 35, 79, 203, 102, 216, 20, 197, 111, 192, 217, 218, 84, 239, 110, 136, 168, 99, 211, 226, 155, 70, 35, 49, 254, 155, 76, 104, 87, 137, 31, 222, 120, 234, 54, 111, 248, 162, 196, 126, 96, 20, 168, 212, 99, 72, 251, 244, 75, 96, 13, 91, 126, 236, 109, 238, 31, 116, 153, 70, 14, 248, 246, 186, 198, 6, 107, 225, 1, 182, 211, 231, 149, 51, 251, 15, 196, 61, 109, 173, 207, 19, 60, 102, 218, 45, 65, 178, 77, 214, 187, 165, 114, 128, 146, 137, 39, 46, 93, 164, 6, 201, 105, 128, 231, 21, 45, 245, 234, 197, 171, 30, 163, 223, 71, 104, 187, 111, 148, 163, 24, 48, 154, 94, 52, 238, 24, 93, 75, 160, 234, 47, 173, 97, 201, 234, 79, 201, 220, 93, 35, 226, 40, 112, 21, 159, 139, 187, 186, 114, 2, 101, 137, 131, 38, 0, 154, 144, 5, 143, 102, 230, 116, 74, 50, 1, 108, 244, 215, 47, 193, 137, 199, 252, 127, 228, 36, 222, 60, 85, 238, 83, 255, 194, 150, 6, 213, 29, 15, 80, 234, 143, 126, 150, 22, 161, 136, 84, 149, 172, 242, 117, 209, 7, 19, 133, 1, 65, 101, 19, 41, 169, 172, 103, 139, 246, 161, 182, 76, 20, 246, 250, 130, 198, 74, 203, 40, 57, 90, 157, 3, 210, 54, 95, 101, 104, 228, 114, 131, 26, 13, 155, 14, 116, 129, 217, 3, 198, 124, 27, 125, 96, 214, 203, 119, 117, 73, 39, 137, 16, 28, 213, 60, 156, 208, 37, 20, 123, 90, 253, 164, 203, 216, 43, 192, 221, 74, 199, 59, 234, 193, 176, 172, 117, 61, 230, 67, 159, 162, 79, 102, 97, 194, 252, 230, 47, 179, 181, 131, 157, 45, 50, 52, 11, 140, 254, 13, 178, 225, 85, 74, 66, 45, 249, 50, 122, 36, 191, 246, 193, 146, 55, 38, 184, 140, 66, 242, 162, 234, 65, 147, 223, 192, 68, 167, 88, 242, 255, 161, 240, 77, 153, 162, 146, 252, 232, 69, 132, 107, 206, 159, 179, 188, 187, 200, 169, 111, 153, 119, 57, 17, 77, 128, 38, 177, 74, 78, 242, 147, 158, 168, 119, 165, 32, 38, 234, 227, 14, 64, 202, 239, 106, 146, 8, 214, 19, 12, 217, 97, 179, 200, 225, 89, 103, 108, 79, 242, 28, 97, 246, 43, 190, 131, 100, 11, 60, 173, 242, 232, 129, 150, 24, 11, 119, 59, 151, 113, 60, 144, 230, 168, 89, 155, 246, 10, 222, 9, 29, 233, 126, 92, 62, 116, 0, 143, 118, 43, 146, 40, 241, 45, 176, 30, 136, 8, 162, 90, 43, 53, 142, 208, 159, 210, 217, 250, 109, 119, 79, 243, 239, 217, 51, 246, 251, 208, 46, 159, 186, 3, 42, 24, 170, 134, 53, 5, 37, 241, 233, 101, 164, 178, 61, 207, 38, 179, 153, 87, 55, 172, 73, 182, 1, 197, 243, 91, 174, 150, 236, 151, 72, 153, 5, 33, 7, 153, 94, 66, 37, 247, 46, 113, 201, 94, 78, 129, 94, 98, 80, 252, 170, 239, 19, 202, 127, 169, 174, 100, 131, 179, 158, 190, 194, 124, 97, 198, 242, 238, 144, 83, 96, 33, 28, 21, 186, 9, 169, 237, 171, 37, 73, 92, 108, 247, 221, 12, 43, 203, 135, 48, 38, 197, 250, 43, 107, 184, 194, 35, 85, 88, 139, 138, 246, 148, 216, 245, 34, 197, 221, 148, 84, 83, 131, 111, 104, 246, 158, 205, 191, 13, 17, 21, 231, 9, 54, 16, 41, 101, 192, 159, 198, 188, 199, 108, 43, 251, 2, 121, 57, 140, 57, 157, 211, 224, 55, 87, 164, 210, 210, 106, 168, 91, 15, 27, 180, 49, 242, 62, 107, 241, 2, 180, 13, 16, 70, 154, 248, 214, 244, 97, 53, 24, 19, 145, 63, 10, 183, 185, 164, 14, 194, 64, 196, 37, 99, 194, 207, 158, 62, 70, 208, 90, 143, 211, 99, 183, 112, 5, 188, 160, 250, 27, 96, 223, 207, 158, 222, 148, 210, 40, 254, 157, 81, 85, 147, 251, 167, 186, 164, 161, 146, 33, 251, 143, 193, 202, 34, 82, 92, 195, 221, 55, 11, 66, 77, 142, 95, 25, 67, 243, 145, 235, 8, 184, 5, 2, 54, 100, 212, 46, 88, 65, 243, 173, 230, 146, 98, 138, 13, 94, 20, 179, 118, 39, 141, 200, 162, 180, 227, 29, 139, 93, 81, 117, 72, 239, 12, 82, 62, 154, 21, 97, 139, 200, 73, 253, 218, 237, 204, 4, 41, 98, 82, 249, 162, 140, 161, 140, 129, 135, 224, 28, 186, 253, 126, 98, 201, 212, 88, 72, 47, 230, 182, 183, 145, 254, 163, 7, 195, 239, 133, 243, 181, 122, 32, 236, 228, 137, 55, 63, 247, 66, 139, 103, 238, 199, 189, 151, 198, 229, 26, 40, 188, 239, 114, 109, 138, 184, 166, 78, 114, 251, 208, 254, 255, 142, 22, 109, 154, 157, 47, 204, 217, 212, 167, 164, 0, 199, 255, 37, 238, 235, 140, 254, 177, 17, 214, 28, 80, 74, 5, 199, 187, 223, 16, 248, 161, 135, 216, 43, 241, 223, 23, 76, 229, 242, 62, 253, 30, 6, 85, 7, 33, 186, 19, 197, 244, 147, 52, 50, 47, 165, 176, 197, 207, 209, 9, 198, 70, 73, 152, 103, 1, 202, 181, 223, 40, 75, 207, 136, 95, 75, 85, 20, 46, 60, 253, 47, 64, 90, 226, 132, 52, 231, 235, 38, 105, 24, 7, 120, 197, 104, 173, 17, 123, 246, 193, 30, 182, 211, 128, 27, 164, 3, 81, 158, 47, 227, 125, 255, 112, 91, 36, 80, 245, 142, 231, 20, 103, 232, 189, 191, 63, 135, 7, 227, 184, 203, 190, 161, 50, 164, 239, 74, 54, 80, 20, 182, 220, 102, 228, 51, 160, 214, 119, 131, 89, 96, 121, 243, 21, 239, 13, 15, 198, 103, 95, 188, 242, 126, 204, 169, 131, 213, 53, 41, 142, 69, 176, 6, 40, 175, 48, 10, 122, 133, 54, 217, 113, 18, 110, 16, 82, 23, 176, 21, 81, 210, 208, 72, 4, 132, 41, 27, 22, 8, 64, 17, 208, 128, 125, 45, 247, 205, 134, 131, 27, 247, 208, 1, 109, 88, 239, 133, 227, 158, 138, 189, 76, 59, 2, 2, 218, 53, 120, 102, 86, 198, 158, 244, 133, 122, 106, 54, 13, 97, 128, 96, 161, 96, 108, 212, 149, 70, 81, 103, 101, 100, 68, 73, 91, 126, 162, 217, 234, 73, 246, 183, 19, 253, 55, 46, 32, 62, 28, 199, 148, 178, 211, 143, 125, 120, 185, 114, 249, 207, 125, 195, 84, 205, 2, 68, 137, 254, 158, 34, 236, 76, 116, 99, 236, 86, 70, 49, 133, 222, 74, 51, 52, 28, 234, 132, 133, 220, 44, 179, 96, 187, 248, 149, 113, 117, 99, 64, 82, 212, 67, 214, 190, 152, 124, 187, 197, 184, 202, 69, 231, 126, 221, 105, 31, 11, 8, 136, 14, 70, 45, 95, 61, 53, 130, 185, 22, 128, 80, 14, 173, 236, 164, 185, 64, 213, 197, 102, 32, 143, 140, 193, 183, 187, 6, 165, 165, 71, 32, 171, 80, 19, 130, 168, 143, 117, 229, 35, 125, 191, 94, 248, 72, 123, 91, 107, 188, 55, 117, 66, 91, 185, 19, 63, 103, 198, 158, 237, 123, 127, 185, 219, 86, 136, 146, 136, 10, 241, 13, 249, 182, 153, 120, 91, 35, 201, 35, 113, 25, 1, 173, 52, 69, 145, 94, 243, 38, 2, 253, 74, 112, 217, 169, 8, 105, 207, 242, 57, 103, 108, 226, 214, 136, 68, 119, 242, 194, 173, 187, 206, 44, 14, 171, 152, 173, 142, 227, 40, 253, 202, 8, 188, 14, 253, 60, 43, 25, 60, 123, 43, 235, 21, 127, 159, 229, 117, 175, 35, 29, 132, 244, 195, 58, 109, 125, 82, 77, 196, 12, 83, 198, 163, 137, 243, 94, 39, 23, 249, 156, 139, 250, 241, 176, 54, 42, 128, 29, 14, 55, 45, 63, 30, 47, 210, 51, 144, 25, 17, 58, 104, 116, 101, 20, 127, 201, 101, 94, 215, 188, 168, 229, 39, 157, 230, 57, 49, 30, 189, 227, 194, 221, 245, 155, 231, 156, 246, 203, 79, 66, 152, 184, 79, 71, 44, 248, 124, 18, 223, 15, 105, 101, 229, 96, 101, 13, 141, 27, 17, 56, 165, 107, 245, 168, 62, 65, 230, 111, 181, 162, 8, 108, 86, 209, 134, 224, 148, 207, 58, 207, 70, 20, 3, 106, 114, 197, 84, 249, 2, 195, 100, 5, 70, 138, 157, 164, 212, 215, 203, 56, 81, 154, 116, 146, 8, 181, 90, 183, 29, 237, 57, 46, 49, 58, 25, 240, 74, 145, 242, 252, 120, 35, 198, 212, 38, 190, 96, 48, 126, 225, 146, 206, 94, 92, 6, 23, 98, 246, 17, 162, 186, 109, 215, 247, 124, 161, 132, 58, 32, 153, 56, 234, 34, 103, 89, 25, 78, 4, 228, 104, 232, 237, 252, 2, 193, 28, 43, 243, 144, 116, 41, 165, 97, 160, 38, 244, 240, 192, 193, 162, 76, 53, 180, 251, 103, 40, 206, 182, 222, 221, 36, 99, 220, 52, 52, 244, 102, 58, 150, 8, 253, 66, 47, 83, 193, 157, 110, 128, 125, 8, 46, 184, 30, 201, 204, 91, 125, 209, 25, 204, 111, 10, 108, 243, 144, 240, 101, 252, 139, 23, 242, 68, 5, 160, 79, 108, 172, 36, 135, 238, 146, 147, 2, 222, 79, 96, 53, 62, 139, 19, 228, 112, 143, 167, 91, 113, 60, 116, 159, 206, 193, 98, 182, 202, 204, 254, 97, 184, 161, 195, 12, 223, 45, 54, 215, 255, 250, 195, 51, 152, 140, 121, 180, 206, 169, 106, 154, 158, 211, 181, 72, 187, 143, 191, 189, 111, 179, 241, 117, 242, 171, 225, 124, 142, 23, 241, 200, 74, 179, 114, 111, 182, 224, 190, 49, 69, 32, 126, 67, 242, 239, 248, 85, 147, 127, 75, 160, 10, 221, 97, 159, 177, 8, 78, 118, 67, 171, 72, 12, 162, 56, 240, 35, 26, 105, 116, 73, 97, 88, 41, 37, 162, 103, 244, 25, 161, 6, 2, 147, 246, 93, 175, 185, 70, 88, 122, 167, 192, 6, 113, 46, 212, 79, 142, 210, 209, 18, 215, 252, 68, 151, 205, 122, 48, 24, 194, 38, 179, 141, 123, 68, 139, 5, 137, 172, 239, 121, 212, 39, 120, 190, 225, 231, 227, 158, 244, 204, 13, 88, 17, 72, 175, 49, 203, 195, 224, 112, 10, 11, 48, 141, 195, 242, 213, 36, 200, 235, 98, 17, 10, 238, 149, 103, 93, 78, 128, 115, 195, 83, 80, 193, 134, 75, 170, 236, 85, 164, 187, 191, 195, 71, 31, 213, 55, 231, 85, 118, 83, 237, 207, 1, 153, 42, 15, 247, 145, 65, 78, 98, 114, 92, 228, 28, 78, 69, 173, 208, 64, 225, 202, 52, 208, 67, 117, 7, 17, 154, 211, 178, 223, 103, 222, 246, 40, 233, 103, 184, 138, 117, 234, 20, 121], - [160, 66, 220, 111, 63, 30, 88, 43, 1, 120, 127, 12, 207, 56, 134, 0, 66, 146, 247, 156, 33, 163, 173, 201, 47, 153, 21, 60, 84, 18, 180, 2, 202, 164, 21, 134, 233, 253, 1, 185, 100, 72, 20, 75, 37, 125, 39, 128, 84, 230, 147, 41, 23, 119, 155, 174, 32, 214, 74, 133, 15, 244, 1, 81, 145, 215, 158, 104, 34, 136, 118, 238, 34, 185, 69, 226, 240, 249, 242, 167, 28, 51, 125, 12, 112, 87, 128, 254, 160, 79, 240, 251, 230, 206, 137, 23, 107, 107, 143, 158, 137, 130, 231, 123, 216, 247, 252, 116, 24, 184, 153, 174, 108, 28, 82, 157, 228, 235, 16, 178, 77, 108, 99, 249, 144, 241, 124, 46, 3, 145, 1, 227, 16, 100, 33, 56, 180, 50, 43, 190, 31, 246, 125, 114, 153, 213, 38, 208, 31, 198, 25, 239, 224, 149, 101, 49, 52, 52, 97, 45, 142, 194, 109, 122, 46, 154, 81, 107, 162, 125, 99, 5, 186, 49, 201, 36, 63, 131, 159, 176, 54, 12, 199, 53, 234, 227, 96, 85, 39, 216, 161, 118, 51, 81, 216, 94, 10, 195, 165, 178, 166, 32, 182, 67, 180, 94, 36, 135, 64, 95, 90, 110, 248, 65, 4, 248, 99, 33, 100, 5, 81, 205, 192, 193, 72, 193, 112, 48, 137, 72, 217, 8, 29, 233, 239, 72, 140, 201, 181, 45, 33, 59, 96, 56, 143, 139, 6, 141, 138, 189, 93, 41, 216, 120, 107, 18, 143, 112, 143, 235, 162, 209, 160, 65, 129, 124, 9, 26, 155, 163, 162, 1, 219, 210, 228, 123, 122, 200, 188, 14, 160, 203, 25, 86, 236, 53, 49, 15, 112, 235, 67, 60, 21, 122, 41, 190, 21, 61, 56, 211, 52, 209, 165, 172, 208, 156, 254, 162, 184, 118, 40, 200, 142, 102, 255, 249, 208, 182, 237, 42, 140, 65, 156, 68, 144, 148, 14, 85, 221, 64, 113, 43, 212, 202, 219, 219, 231, 52, 85, 201, 73, 99, 148, 222, 208, 194, 128, 144, 234, 170, 199, 129, 172, 41, 188, 186, 81, 185, 165, 159, 44, 99, 226, 147, 173, 236, 224, 179, 165, 129, 49, 79, 62, 75, 49, 184, 63, 110, 101, 129, 249, 162, 129, 106, 244, 182, 56, 98, 50, 146, 163, 242, 62, 231, 84, 72, 110, 239, 76, 211, 187, 222, 104, 88, 90, 30, 236, 23, 71, 98, 136, 130, 155, 44, 112, 43, 235, 139, 176, 118, 25, 212, 169, 175, 88, 133, 17, 232, 209, 180, 36, 245, 198, 97, 222, 0, 178, 174, 35, 77, 141, 160, 203, 208, 170, 212, 254, 118, 110, 46, 66, 178, 42, 114, 87, 91, 11, 151, 159, 85, 252, 175, 54, 92, 230, 139, 191, 148, 195, 198, 124, 135, 76, 12, 69, 251, 128, 16, 252, 19, 204, 208, 182, 138, 162, 186, 113, 221, 126, 174, 222, 197, 211, 59, 40, 40, 142, 40, 26, 126, 4, 16, 208, 157, 139, 18, 31, 130, 154, 77, 120, 185, 148, 46, 195, 209, 8, 118, 243, 226, 4, 93, 239, 134, 66, 201, 69, 180, 213, 92, 80, 44, 12, 101, 171, 228, 153, 201, 23, 21, 21, 200, 180, 213, 114, 203, 61, 178, 39, 185, 66, 183, 62, 13, 51, 242, 228, 234, 142, 86, 61, 14, 67, 109, 189, 170, 94, 46, 189, 225, 7, 94, 86, 174, 76, 195, 132, 63, 117, 231, 98, 23, 51, 239, 126, 122, 174, 49, 182, 118, 87, 116, 129, 66, 138, 121, 164, 163, 203, 13, 85, 44, 17, 54, 28, 13, 123, 181, 200, 130, 91, 153, 133, 126, 158, 225, 115, 172, 90, 17, 30, 181, 246, 233, 118, 68, 21, 126, 50, 21, 220, 209, 58, 0, 99, 59, 146, 208, 240, 248, 25, 193, 177, 154, 6, 144, 177, 42, 15, 168, 102, 243, 159, 150, 196, 224, 9, 233, 135, 211, 239, 121, 168, 1, 181, 54, 175, 93, 20, 54, 112, 169, 253, 179, 243, 197, 158, 84, 168, 98, 31, 21, 232, 249, 95, 172, 12, 34, 45, 77, 87, 171, 68, 91, 83, 23, 135, 46, 122, 42, 76, 122, 246, 177, 51, 133, 202, 183, 170, 21, 143, 196, 179, 134, 245, 124, 253, 177, 199, 216, 33, 181, 0, 53, 152, 247, 92, 158, 145, 232, 40, 28, 235, 42, 29, 95, 198, 153, 21, 35, 146, 80, 164, 42, 195, 15, 246, 16, 73, 162, 85, 27, 205, 32, 93, 209, 16, 82, 176, 114, 243, 5, 85, 236, 253, 57, 68, 206, 66, 138, 168, 85, 213, 206, 236, 123, 122, 191, 131, 66, 161, 17, 61, 77, 136, 177, 20, 167, 73, 52, 13, 50, 59, 44, 226, 43, 4, 204, 35, 217, 236, 38, 212, 237, 21, 97, 71, 130, 251, 89, 238, 168, 134, 215, 67, 208, 127, 71, 116, 244, 227, 168, 39, 4, 66, 72, 124, 151, 44, 212, 62, 51, 251, 2, 91, 230, 237, 190, 91, 0, 137, 92, 46, 79, 17, 219, 40, 144, 210, 154, 112, 62, 108, 208, 24, 234, 109, 160, 33, 22, 201, 250, 136, 27, 188, 16, 55, 233, 59, 49, 124, 193, 102, 128, 255, 61, 53, 119, 27, 46, 235, 244, 135, 188, 152, 27, 40, 249, 7, 217, 233, 247, 32, 142, 116, 219, 89, 38, 82, 189, 155, 244, 132, 253, 6, 62, 210, 198, 212, 18, 124, 131, 109, 218, 182, 128, 211, 140, 199, 193, 127, 7, 10, 243, 156, 162, 3, 129, 90, 150, 186, 212, 19, 132, 254, 79, 199, 78, 234, 1, 63, 80, 219, 238, 10, 135, 63, 110, 248, 177, 21, 49, 96, 140, 64, 107, 152, 205, 135, 116, 138, 241, 14, 192, 108, 143, 134, 112, 199, 212, 21, 123, 182, 95, 99, 194, 209, 99, 53, 195, 194, 35, 128, 91, 193, 199, 126, 127, 103, 155, 38, 120, 114, 21, 149, 208, 212, 115, 71, 155, 197, 64, 93, 213, 170, 5, 4, 159, 8, 189, 213, 226, 73, 107, 1, 44, 22, 152, 35, 244, 182, 226, 187, 101, 246, 113, 114, 22, 82, 125, 124, 143, 208, 126, 171, 129, 186, 184, 198, 16, 120, 74, 150, 241, 37, 165, 32, 222, 147, 26, 211, 85, 56, 159, 130, 230, 40, 38, 162, 237, 224, 24, 38, 107, 151, 132, 55, 167, 5, 202, 52, 25, 101, 49, 77, 156, 216, 150, 58, 187, 191, 12, 171, 64, 150, 5, 109, 59, 246, 154, 96, 216, 39, 177, 15, 124, 105, 60, 238, 13, 252, 117, 119, 157, 30, 171, 182, 71, 161, 120, 213, 136, 161, 222, 147, 147, 7, 55, 209, 132, 246, 249, 53, 124, 137, 151, 147, 123, 11, 158, 49, 194, 69, 146, 210, 50, 170, 95, 192, 115, 181, 154, 140, 111, 160, 74, 17, 147, 149, 101, 127, 25, 94, 42, 208, 55, 137, 165, 142, 44, 13, 162, 240, 48, 156, 43, 178, 33, 228, 212, 166, 183, 218, 231, 245, 19, 111, 49, 125, 72, 82, 185, 168, 4, 183, 25, 121, 170, 49, 38, 51, 161, 30, 135, 70, 172, 153, 196, 141, 3, 235, 52, 21, 135, 177, 55, 10, 124, 112, 75, 6, 63, 119, 50, 145, 219, 5, 95, 175, 211, 216, 113, 177, 236, 169, 106, 47, 37, 77, 14, 94, 33, 156, 49, 246, 241, 71, 141, 5, 94, 112, 9, 88, 117, 131, 95, 224, 199, 45, 53, 87, 161, 51, 36, 52, 248, 117, 165, 100, 253, 141, 212, 126, 251, 190, 116, 117, 253, 121, 136, 205, 92, 17, 182, 178, 102, 62, 253, 17, 212, 95, 243, 122, 185, 34, 90, 39, 207, 5, 166, 166, 231, 31, 18, 17, 239, 172, 199, 218, 86, 197, 150, 239, 105, 171, 238, 226, 181, 39, 85, 103, 43, 23, 41, 238, 20, 217, 140, 4, 106, 40, 69, 27, 1, 17, 174, 84, 225, 30, 137, 52, 16, 43, 29, 122, 235, 73, 121, 91, 189, 132, 141, 183, 111, 20, 137, 155, 73, 95, 135, 178, 160, 206, 31, 56, 221, 52, 202, 98, 38, 130, 237, 105, 200, 140, 248, 162, 119, 182, 8, 244, 236, 87, 160, 58, 115, 179, 10, 155, 48, 249, 211, 222, 202, 184, 2, 234, 136, 131, 247, 245, 82, 28, 210, 185, 76, 230, 37, 176, 58, 239, 179, 211, 235, 114, 1, 150, 180, 129, 76, 121, 50, 213, 72, 177, 92, 191, 160, 11, 36, 168, 101, 48, 212, 63, 179, 213, 108, 156, 246, 202, 23, 224, 231, 150, 183, 146, 41, 47, 18, 2, 186, 43, 100, 255, 7, 10, 51, 18, 155, 58, 191, 234, 215, 211, 170, 165, 246, 94, 160, 255, 21, 194, 231, 121, 13, 125, 55, 199, 224, 218, 92, 73, 197, 86, 55, 222, 3, 36, 132, 122, 236, 178, 224, 130, 79, 159, 201, 181, 4, 253, 238, 44, 166, 101, 10, 131, 85, 82, 255, 214, 104, 120, 43, 34, 97, 7, 91, 93, 105, 140, 24, 152, 223, 188, 37, 76, 139, 174, 22, 13, 251, 104, 225, 30, 60, 59, 70, 39, 144, 116, 141, 164, 0, 173, 82, 106, 41, 158, 52, 197, 245, 113, 155, 255, 31, 250, 146, 32, 34, 62, 4, 253, 235, 155, 253, 117, 157, 196, 134, 152, 131, 85, 213, 179, 93, 205, 213, 51, 8, 225, 232, 162, 22, 175, 44, 80, 128, 225, 101, 110, 102, 247, 196, 170, 40, 244, 252, 202, 202, 226, 60, 128, 101, 15, 235, 138, 255, 188, 2, 14, 234, 65, 136, 32, 171, 96, 91, 121, 16, 186, 197, 235, 112, 219, 161, 106, 60, 218, 206, 66, 83, 19, 117, 48, 205, 27, 179, 165, 22, 74, 150, 58, 99, 2, 202, 78, 172, 140, 148, 159, 3, 243, 243, 141, 39, 116, 61, 99, 184, 128, 245, 223, 7, 49, 162, 244, 237, 76, 43, 202, 74, 98, 2, 188, 6, 67, 135, 108, 161, 242, 201, 22, 34, 48, 45, 254, 16, 224, 100, 220, 58, 231, 193, 89, 48, 236, 182, 35, 45, 60, 43, 159, 17, 226, 116, 46, 207, 129, 143, 130, 181, 190, 124, 47, 255, 214, 133, 244, 215, 23, 64, 17, 202, 231, 25, 198, 102, 169, 188, 240, 2, 202, 165, 232, 98, 240, 150, 13, 210, 195, 28, 150, 79, 180, 78, 24, 246, 87, 150, 213, 197, 163, 228, 82, 204, 247, 224, 57, 0, 57, 38, 29, 142, 187, 184, 133, 245, 169, 26, 191, 129, 252, 63, 33, 174, 53, 77, 149, 192, 162, 95, 246, 247, 44, 228, 219, 207, 122, 182, 81, 62, 124, 196, 9, 96, 161, 180, 206, 238, 244, 225, 52, 138, 5, 87, 167, 83, 88, 156, 157, 6, 233, 5, 157, 5, 190, 167, 218, 143, 6, 113, 147, 85, 62, 37, 133, 58, 40, 237, 158, 127, 196, 45, 72, 5, 94, 121, 163, 5, 8, 106, 75, 91, 63, 215, 141, 210, 252, 2, 128, 175, 14, 187, 151, 20, 83, 156, 226, 252, 43, 182, 225, 3, 93, 252, 8, 48, 201, 247, 199, 91, 65, 169, 121, 8, 7, 47, 152, 220, 67, 113, 29, 11, 65, 119, 62, 0, 106, 41, 134, 126, 76, 116, 114, 139, 143, 120, 46, 17, 95, 206, 91, 141, 142, 175, 149, 246, 23, 192, 1, 212, 125, 190, 104, 194, 138, 71, 155, 145, 45, 107, 59, 153, 175, 136, 131, 19, 94, 88, 91, 155, 185, 168, 39, 136, 240, 117, 51, 126, 2, 4, 127, 56, 225, 113, 136, 203, 190, 151, 202, 15, 240, 132, 47, 58, 73, 35, 202, 198, 142, 122, 167, 52, 235, 106, 125, 73, 51, 143, 50, 165, 201, 252, 2, 22, 49, 132, 36, 152, 10, 82, 161, 100, 100, 42, 113, 180, 152, 139, 231, 124, 190, 18, 36, 121, 58, 103, 76, 78, 9, 13, 93, 53, 143, 54, 205, 112, 240, 56, 44, 233, 125, 40, 54, 241, 179, 206, 98, 197, 39, 154, 111, 206, 85, 18, 144, 162, 180, 155, 232, 4, 34, 49, 201, 102, 216, 64, 163, 8, 187, 179, 198, 49, 111, 47, 219, 80, 250, 183, 97, 54, 17, 136, 79, 226, 132, 162, 225, 194, 100, 192, 133, 169, 167, 202, 79, 253, 124, 213, 105, 205, 17, 210, 153, 83, 183, 157, 46, 105, 201, 198, 217, 144, 104, 40, 185, 88, 229, 78, 90, 139, 57, 167, 59, 152, 98, 61, 141, 45, 146, 212, 193, 38, 188, 129, 97, 169, 215, 223, 97, 3, 99, 24, 36, 52, 146, 153, 21, 252, 34, 185, 39, 237, 138, 146, 134, 249, 80, 196, 212, 114, 35, 75, 25, 64, 213, 222, 131, 79, 69, 189, 254, 99, 31, 218, 93, 36, 106, 92, 227, 231, 47, 105, 53, 210, 121, 137, 44, 91, 143, 186, 14, 25, 165, 113, 215, 0, 150, 140, 87, 169, 109, 166, 219, 99, 255, 135, 237, 148, 80, 216, 163, 102, 215, 19, 229, 69, 120, 210, 187, 164, 246, 126, 176, 92, 123, 170, 41, 195, 158, 136, 190, 24, 109, 102, 170, 113, 53, 43, 171, 230, 247, 234, 149, 123, 106, 72, 77, 141, 150, 36, 53, 209, 251, 114, 111, 151, 69, 157, 198, 1, 16, 153, 45, 82, 1, 3, 245, 0, 77, 121, 8, 12, 212, 176, 197, 115, 135, 235, 52, 81, 87, 196, 27, 27, 0, 136, 163, 110, 47, 249, 210, 154, 99, 195, 44, 160, 87, 176, 224, 159, 189, 104, 108, 49, 184, 220, 59, 177, 61, 139, 251, 253, 16, 73, 49, 252, 160, 191, 52, 170, 153, 128, 168, 107, 188, 200, 161, 142, 92, 78, 107, 27, 12, 223, 54, 99, 142, 95, 208, 241, 123, 172, 82, 7, 49, 123, 253, 205, 30, 44, 235, 175, 100, 103, 106, 200, 71, 184, 20, 145, 119, 176, 208, 192, 246, 178, 64, 217, 178, 78, 40, 146, 26, 167, 154, 42, 93, 39, 222, 247, 55, 87, 45, 207, 4, 73, 9, 78, 98, 66, 235, 190, 136, 133, 116, 241, 198, 204, 53, 65, 230, 176, 104, 112, 228, 220, 3, 77, 135, 90, 141, 196, 178, 215, 2, 101, 133, 168, 208, 30, 177, 239, 27, 181, 213, 103, 196, 209, 154, 165, 138, 34, 144, 88, 61, 222, 115, 188, 193, 136, 84, 41, 228, 177, 244, 196, 197, 81, 10, 178, 164, 202, 111, 173, 139, 123, 143, 40, 178, 169, 141, 85, 4, 46, 109, 15, 157, 213, 64, 164, 29, 129, 122, 114, 208, 185, 141, 159, 11, 126, 244, 184, 133, 0, 177, 215, 235, 142, 21, 173, 147, 30, 127, 131, 161, 109, 214, 157, 226, 197, 54, 19, 100, 109, 204, 158, 177, 199, 230, 156, 214, 189, 106, 230, 37, 10, 22, 205, 113, 153, 156, 130, 16, 211, 121, 41, 30, 245, 34, 243, 178, 155, 133, 35, 133, 78, 14, 78, 86, 114, 67, 205, 40, 56, 180, 213, 100, 59, 116, 132, 114, 158, 15, 185, 9, 124, 26, 161, 119, 156, 24, 208, 42, 10, 8, 239, 250, 97, 74, 140, 243, 98, 51, 80, 231, 129, 53, 145, 43, 249, 48, 100, 22, 200, 99, 144, 253, 71, 49, 112, 220, 17, 227, 242, 193, 28, 6, 59, 65, 7, 247, 80, 165, 218, 164, 202, 174, 178, 105, 140, 205, 60, 45, 14, 187, 234, 228, 214, 15, 231, 72, 190, 255, 223, 253, 150, 8, 45, 164, 101, 233, 129, 105, 198, 106, 176, 192, 168, 32, 157, 49, 122, 70, 203, 117, 45, 207, 124, 71, 62, 0, 75, 37, 161, 131, 200, 104, 135, 104, 193, 4, 72, 134, 251, 4, 61, 202, 5, 176, 211, 112, 113, 31, 172, 207, 11, 75, 36, 119, 6, 11, 163, 201, 69, 172, 95, 155, 56, 219, 227, 0, 29, 49, 92, 134, 102, 83, 29, 166, 110, 130, 88, 63, 188, 236, 179, 97, 42, 18, 14, 144, 35, 236, 145, 148, 137, 179, 209, 66, 198, 116, 221, 113, 29, 36, 73, 241, 86, 0, 223, 108, 193, 105, 252, 107, 205, 241, 179, 237, 156, 141, 141, 235, 241, 6, 242, 103, 250, 28, 44, 4, 44, 149, 67, 228, 253, 16, 96, 214, 77, 99, 252, 58, 140, 4, 56, 30, 114, 79, 90, 180, 74, 159, 7, 104, 246, 74, 233, 221, 103, 76, 220, 183, 25, 101, 98, 55, 125, 58, 39, 98, 118, 99, 95, 183, 133, 55, 133, 215, 45, 204, 235, 132, 212, 244, 62, 111, 47, 231, 68, 210, 45, 72, 32, 212, 50, 111, 1, 217, 208, 21, 139, 106, 150, 196, 109, 21, 218, 138, 65, 35, 82, 20, 35, 86, 174, 229, 221, 161, 54, 73, 88, 47, 41, 8, 20, 240, 186, 95, 180, 99, 239, 208, 90, 184, 60, 255, 7, 14, 74, 126, 166, 48, 84, 61, 108, 46, 33, 80, 170, 24, 152, 209, 80, 149, 242, 62, 0, 92, 221, 79, 68, 254, 232, 99, 133, 89, 143, 55, 201, 248, 15, 65, 76, 177, 181, 212, 33, 131, 150, 40, 59, 99, 117, 44, 90, 135, 61, 43, 187, 150, 23, 58, 72, 212, 149, 134, 21, 109, 65, 179, 255, 235, 97, 156, 228, 173, 158, 131, 189, 146, 93, 32, 222, 75, 121, 234, 31, 91, 9, 187, 97, 187, 103, 135, 206, 213, 81, 115, 100, 183, 163, 151, 210, 20, 146, 103, 51, 227, 9, 125, 238, 11, 126, 33, 56, 48, 97, 92, 19, 144, 140, 243, 82, 191, 118, 77, 81, 231, 66, 67, 48, 87, 74, 221, 19, 114, 34, 153, 183, 215, 182, 83, 212, 133, 58, 29, 15, 230, 157, 68, 49, 225, 34, 52, 109, 211, 133, 67, 248, 54, 96, 55, 247, 56, 128, 198, 227, 155, 170, 40, 178, 253, 240, 17, 159, 107, 35, 162, 153, 222, 110, 58, 124, 202, 146, 58, 229, 228, 63, 42, 10, 46, 156, 139, 148, 137, 17, 37, 159, 125, 69, 84, 27, 9, 175, 158, 251, 66, 145, 167, 127, 40, 161, 161, 87, 145, 88, 65, 99, 68, 141, 30, 100, 39, 71, 154, 201, 191, 207, 166, 4, 88, 202, 40, 76, 186, 183, 41, 28, 164, 242, 147, 247, 60, 226, 208, 153, 24, 73, 14, 112, 179, 51, 111, 83, 135, 216, 170, 243, 223, 6, 37, 226, 77, 79, 8, 15, 57, 31, 75, 149, 154, 128, 249, 79, 16, 164, 12, 96, 220, 252, 144, 40, 152, 69, 20, 40, 51, 225, 223, 46, 186, 85, 129, 78, 155, 5, 201, 241, 142, 57, 201, 151, 207, 35, 91, 195, 127, 122, 190, 219, 208, 114, 243, 216, 100, 189, 74, 244, 126, 31, 58, 136, 106, 245, 94, 39, 214, 7, 8, 38, 246, 204, 59, 122, 32, 44, 87, 164, 106, 106, 104, 81, 64, 107, 187, 151, 213, 183, 201, 142, 252, 167, 100, 151, 86, 65, 86, 233, 78, 103, 88, 120, 53, 70, 243, 127, 14, 9, 133, 42, 166, 40, 82, 63, 54, 70, 39, 37, 11, 55, 162, 84, 22, 162, 21, 229, 156, 143, 200, 121, 10, 254, 54, 51, 254, 236, 210, 149, 172, 11, 109, 9, 146, 78, 139, 101, 0, 186, 198, 84, 56, 68, 229, 29, 87, 24, 92, 150, 237, 134, 3, 53, 225, 147, 73, 141, 201, 158, 193, 169, 255, 62, 70, 129, 113, 30, 160, 6, 53, 67, 126, 112, 196, 218, 90, 155, 225, 127, 27, 41, 10, 190, 42, 255, 224, 240, 107, 0, 166, 231, 175, 153, 69, 125, 202, 159, 82, 225, 16, 106, 73, 43, 143, 108, 37, 231, 214, 242, 43, 102, 203, 195, 247, 127, 32, 198, 202, 252, 169, 142, 152, 231, 48, 65, 251, 196, 37, 179, 56, 127, 173, 234, 6, 98, 233, 208, 83, 169, 233, 66, 144, 211, 228, 35, 237, 146, 207, 253, 107, 0, 149, 205, 193, 88, 244, 181, 216, 111, 177, 129, 150, 102, 243, 101, 76, 188, 26, 182, 86, 159, 245, 44, 240, 194, 132, 101, 142, 192, 226, 147, 23, 164, 137, 11, 65, 202, 155, 130, 246, 139, 150, 122, 195, 73, 240, 132, 115, 180, 180, 167, 159, 194, 128, 20, 196, 69, 43, 83, 1, 241, 223, 108, 159, 202, 167, 83, 30, 50, 166, 19, 3, 19, 123, 212, 177, 151, 143, 196, 110, 236, 141, 43, 99, 16, 190, 125, 142, 69, 56, 84, 73, 214, 20, 247, 113, 4, 203, 185, 87, 142, 88, 142, 39, 114, 210, 55, 115, 77, 202, 50, 0, 101, 101, 180, 128, 191, 253, 110, 236, 182, 197, 156, 85, 196, 134, 207, 92, 79, 143, 112, 226, 59, 181, 60, 145, 78, 138, 22, 111, 104, 92, 154, 188, 78, 34, 53, 121, 35, 160, 86, 88, 244, 127, 231, 163, 201, 215, 203, 67, 142, 24, 17, 238, 253, 170, 91, 63, 170, 231, 67, 234, 86, 172, 203, 59, 85, 247, 197, 93, 38, 121, 222, 28, 36, 187, 150, 147, 158, 228, 70, 222, 76, 54, 196, 210, 13, 175, 174, 13, 53, 134, 22, 193, 190, 255, 26, 211, 28, 146, 223, 14, 67, 169, 242, 255, 63, 127, 27, 207, 5, 191, 12, 222, 223, 126, 105, 107, 84, 31, 49, 47, 100, 90, 177, 44, 123, 148, 100, 63, 13, 193, 168, 51, 223, 23, 86, 172, 248, 237, 69, 146, 149, 131, 195, 93, 41, 87, 249, 50, 51, 113, 45, 140, 54, 155, 205, 95, 140, 212, 56, 52, 74, 241, 178, 175, 97, 181, 197, 125, 34, 168, 93, 155, 90, 194, 58, 99, 85, 100, 3, 165, 219, 235, 40, 154, 117, 6, 56, 176, 205, 29, 42, 40, 128, 187, 1, 201, 106, 209, 166, 254, 253, 79, 237, 102, 109, 179, 212, 138, 156, 137, 22, 18, 44, 10, 153, 141, 236, 234, 196, 230, 174, 234, 105, 191, 28, 218, 46, 93, 135, 240, 101, 117, 95, 154, 222, 22, 0, 7, 227, 110, 117, 76, 125, 79, 77, 149, 147, 222, 61, 41, 40, 240, 132, 59, 170, 135, 188, 190, 96, 77, 231, 86, 46, 39, 38, 176, 46, 64, 4, 79, 250, 226, 67, 216, 72, 206, 248, 4, 253, 109, 224, 243, 53, 236, 242, 57, 228, 252, 221, 14, 170, 25, 23, 158, 38, 79, 15, 0, 49, 216, 33, 58, 177, 72, 207, 10, 192, 192, 55, 115, 92, 128, 200, 218, 100, 226, 85, 252, 195, 235, 125, 218, 22, 210, 224, 45, 164, 13, 221, 77, 159, 105, 184, 171, 83, 134, 111, 108, 119, 63, 6, 110, 82, 79, 81, 176, 183, 29, 5, 174, 200, 0, 51, 73, 250, 135, 114, 47, 204, 133, 241, 17, 105, 151, 188, 105, 185, 112, 163, 133, 184, 45, 89, 122, 120, 61, 250, 162, 66, 96, 119, 127, 148, 137, 9, 252, 172, 117, 129, 138, 61, 236, 109, 248, 214, 235, 200, 221, 112, 198, 234, 9, 121, 154, 248, 191, 229, 100, 100, 11, 170, 98, 221, 94, 223, 142, 196, 42, 210, 83, 227, 0, 227, 108, 45, 164, 21, 187, 167, 230, 16, 193, 158, 33, 108, 2, 180, 191, 59, 8, 49, 254, 201, 168, 93, 160, 102, 23, 172, 120, 11, 6, 246, 160, 10, 107, 159, 245, 118, 185, 216, 122, 23, 38, 224, 15, 56, 105, 213, 49, 142, 20, 88, 174, 228, 105, 45, 128, 159, 75, 122, 149, 6, 230, 45, 59, 251, 101, 220, 176, 227, 112, 221, 133, 83, 143, 21, 233, 120, 22, 248, 199, 89, 6, 175, 40, 71, 223, 113, 83, 158, 51, 117, 53, 114, 209, 62, 12, 145, 220, 229, 145, 242, 220, 224, 77, 19, 57, 83, 171, 124, 76, 48, 199, 50, 97, 252, 89, 194, 167, 179, 127, 119, 62, 122, 239, 164, 18, 180, 69, 203, 34, 219, 233, 206, 117, 65, 18, 112, 42, 175, 132, 243, 49, 82, 223, 130, 101, 59, 105, 49, 126, 147, 0, 2, 254, 79, 4, 115, 10, 73, 195, 52, 73, 62, 3, 69, 212, 110, 168, 33, 247, 64, 207, 233, 33, 50, 229, 227, 64, 164, 134, 185, 142, 151, 76, 120, 111, 254, 0, 242, 180, 33, 79, 149, 152, 81, 235, 119, 220, 68, 204, 241, 221, 179, 121, 72, 76, 104, 112, 4, 42, 146, 121, 137, 161, 166, 142, 211, 115, 126, 224, 84, 92, 200, 91, 105, 51, 209, 66, 24, 232, 163, 84, 136, 122, 78, 242, 34, 26, 156, 33, 107, 227, 4, 143, 236, 223, 234, 96, 25, 240, 186, 158, 116, 173, 156, 59, 235, 13, 7, 227, 83, 84, 4, 99, 32, 102, 9, 88, 167, 51, 176, 221, 43, 179, 49, 255, 203, 116, 5, 170, 6, 31, 205, 100, 86, 172, 253, 40, 100, 51, 100, 196, 115, 76, 253, 182, 82, 173, 65, 68, 151, 149, 73, 78, 186, 11, 220, 34, 155, 33, 75, 179, 0, 209, 233, 188, 77, 34, 95, 35, 229, 171, 141, 27, 143, 106, 240, 113, 55, 225, 132, 109, 64, 202, 210, 5, 208, 56, 178, 32, 141, 57, 180, 223, 14, 205, 50, 133, 244, 191, 102, 163, 193, 253, 148, 115, 42, 163, 213, 214, 130, 227, 46, 38, 143, 71, 107, 9, 189, 250, 150, 87, 46, 5, 83, 54, 250, 89, 192, 238, 51, 99, 233, 244, 245, 86, 44, 17, 87, 190, 56, 22, 170, 90, 130, 159, 77, 199, 185, 50, 168, 10, 169, 45, 21, 168, 222, 255, 217, 161, 152, 143, 165, 93, 22, 247, 76, 110, 199, 33, 171, 117, 170, 151, 16, 110, 19, 243, 20, 188, 83, 87, 202, 35, 32, 172, 243, 156, 127, 103, 76, 197, 54, 226, 152, 175, 158, 123, 104, 167, 120, 53, 241, 18, 180, 178, 237, 248, 120, 135, 198, 26, 117, 104, 233, 23, 45, 110, 189, 89, 203, 19, 90, 49, 7, 157, 64, 153, 164, 29, 163, 147, 89, 61, 154, 26, 90, 188, 55, 193, 24, 198, 151, 81, 181, 38, 253, 217, 28, 85, 247, 44, 32, 197, 102, 145, 9, 129, 16, 31, 36, 111, 26, 106, 160, 166, 244, 94, 185, 174, 106, 47, 119, 246, 255, 81, 240, 150, 39, 33, 13, 53, 211, 55, 206, 186, 151, 187, 169, 222, 20, 47, 44, 252, 2, 66, 62, 100, 181, 106, 108, 110, 93, 150, 228, 11, 100, 198, 145, 44, 40, 199, 224, 168, 1, 233, 105, 245, 124, 199, 164, 101, 51, 231, 90, 228, 145, 60, 212, 85, 140, 152, 202, 80, 206, 85, 75, 12, 15, 101, 15, 203, 220, 237, 14, 149, 215, 5, 168, 223, 72, 85, 231, 91, 238, 172, 150, 199, 106, 58, 199, 186, 133, 208, 36, 97, 20, 8, 92, 164, 114, 249, 162, 28, 214, 206, 190, 34, 42, 104, 18, 104, 226, 116, 238, 15, 197, 77, 240, 43, 227, 66, 139, 125, 206, 201, 67, 179, 183, 220, 103, 85, 244, 9, 255, 202, 29, 99, 104, 182, 158, 105, 176, 22, 173, 172, 139, 222, 13, 72, 201, 189, 58, 139, 39, 141, 34, 158, 73, 12, 72, 75, 46, 238, 189, 94, 12, 232, 4, 255, 211, 172, 192, 102, 11, 200, 90, 70, 36, 7, 80, 106, 236, 202, 65, 23, 32, 168, 43, 130, 78, 245, 253, 158, 15, 130, 190, 51, 253, 148, 253, 79, 114, 169, 93, 36, 163, 77, 218, 181, 65, 239, 204, 205, 255, 178, 241, 40, 59, 159, 225, 32, 154, 151, 179, 57, 74, 24, 152, 32, 147, 117, 224, 197, 0, 92, 189, 13, 134, 53, 179, 16, 2, 80, 162, 118, 8, 30, 7, 166, 87, 194, 148, 44, 139, 248, 200, 112, 22, 222, 220, 88, 96, 249, 231, 209, 201, 81, 211, 234, 162, 234, 206, 205, 129, 171, 80, 2, 55, 95, 245, 202, 1, 118, 44, 151, 89, 10, 21, 131, 96, 48, 207, 173, 207, 62, 178, 110, 76, 172, 43, 223, 233, 209, 50, 13, 249, 129, 94, 226, 41, 131, 34, 106, 65, 32, 12, 7, 125, 236, 142, 57, 94, 253, 119, 64, 201, 233, 150, 201, 226, 179, 165, 76, 192, 140, 69, 206, 121, 60, 229, 44, 159, 13, 126, 255, 51, 148, 21, 95, 174, 210, 231, 182, 101, 24, 172, 88, 72, 32, 66, 55, 204, 140, 43, 249, 202, 119, 80, 217, 216, 15, 32, 0, 227, 28, 195, 220, 148, 71, 54, 250, 83, 77, 165, 219, 201, 28, 134, 25, 82, 106, 10, 177, 148, 138, 166, 145, 159, 235, 71, 231, 214, 24, 93, 145, 238, 60, 42, 178, 10, 233, 207, 88, 107, 170, 194, 21, 101, 46, 197, 221, 159, 197, 240, 251, 132, 219, 168, 127, 36, 70, 12, 114, 72, 94, 249, 122, 123, 207, 121, 140, 99, 221, 58, 36, 19, 15, 11, 176, 12, 242, 198, 51, 88, 245, 73, 234, 255, 247, 62, 85, 27, 100, 253, 97, 254, 24, 193, 111, 225, 29, 156, 252, 197, 141, 22, 96, 173, 145, 93, 197, 162, 164, 240, 83, 148, 94, 26, 33, 15, 243, 252, 168, 149, 236, 214, 173, 160, 31, 38, 114, 18, 127, 59, 40, 133, 48, 8, 73, 19, 220, 50, 57, 246, 185, 29, 61, 193, 152, 26, 135, 132, 76, 186, 174, 21, 46, 73, 78, 180, 216, 114, 250, 217, 197, 149, 239, 202, 18, 8, 86, 202, 37, 51, 101, 121, 200, 125, 208, 175, 164, 157, 174, 189, 134, 99, 217, 113, 174, 78, 180, 216, 67, 0, 0, 187, 140, 79, 106, 181, 157, 157, 126, 240, 92, 82, 104, 125, 224, 9, 192, 99, 8, 139, 106, 94, 190, 32, 159, 42, 77, 102, 15, 138, 152, 8, 7, 232, 166, 121, 251, 64, 164, 201, 102, 9, 198, 140, 42, 216, 172, 220, 46, 3, 173, 198, 215, 13, 191, 221, 20, 29, 238, 126, 180, 86, 106, 90, 34, 208, 130, 51, 236, 209, 102, 178, 156, 120, 139, 54, 60, 91, 142, 210, 112, 107, 238, 133, 73, 52, 139, 186, 192, 135, 69, 139, 11, 167, 127, 245, 69, 11, 234, 45, 247, 221, 218, 221, 171, 79, 152, 154, 136, 241, 57, 58, 65, 217, 244, 114, 141, 220, 163, 220, 189, 114, 130, 0, 88, 65, 185, 151, 174, 213, 211, 41, 73, 218, 22, 219, 13, 125, 32, 183, 41, 213, 206, 172, 254, 26, 40, 128, 253, 114, 99, 26, 55, 197, 163, 226, 151, 11, 205, 215, 93, 49, 238, 24, 87, 178, 198, 50, 224, 202, 12, 6, 188, 42, 45, 246, 222, 240, 115, 173, 79, 252, 166, 42, 145, 57, 219, 183, 174, 220, 79, 136, 60, 56, 240, 6, 220, 193, 230, 74, 209, 63, 172, 63, 219, 255, 158, 126, 187, 195, 208, 149, 144, 163, 109, 131, 9, 14, 29, 251, 113, 56, 10, 17, 43, 211, 154, 168, 239, 126, 118, 153, 28, 76, 23, 78, 101, 199, 159, 106, 41, 137, 117, 144, 21, 66, 168, 7, 149, 251, 248, 70, 222, 143, 253, 217, 7, 236, 46, 141, 229, 245, 26, 9, 246, 4, 85, 36, 251, 206, 178, 180, 97, 234, 42, 243, 29, 138, 110, 122, 17, 30, 96, 201, 22, 206, 80, 107, 112, 195, 43, 245, 106, 200, 188, 29, 101, 11, 177, 200, 153, 149, 155, 236, 53, 77, 43, 41, 117, 112, 127, 68, 169, 51, 214, 51, 28, 240, 104, 230, 108, 195, 207, 5, 154, 168, 150, 145, 43, 245, 23, 239, 173, 131, 249, 67, 195, 19, 102, 205, 108, 70, 165, 90, 115, 211, 127, 172, 169, 37, 213, 72, 198, 11, 73, 125, 168, 224, 195, 132, 135, 221, 18, 229, 108, 30, 161, 124, 137, 169, 227, 107, 197, 60, 26, 198, 103, 64, 23, 164, 251, 189, 76, 122, 196, 46, 171, 160, 104, 231, 133, 92, 235, 247, 197, 124, 214, 229, 85, 240, 109, 36, 3, 210, 192, 217, 161, 103, 109, 57, 113, 241, 215, 109, 141, 17, 60, 62, 224, 133, 240, 26, 245, 137, 173, 242, 240, 158, 240, 234, 108, 167, 85, 229, 137, 18, 230, 239, 203, 102, 4, 20, 164, 195, 0, 196, 110, 133, 93, 15, 236, 144, 14, 113, 166, 3, 69, 143, 247, 115, 145, 177, 233, 66, 69, 168, 28, 158, 191, 157, 160, 168, 168, 233, 103, 69, 133, 105, 242, 165, 106, 10, 80, 93, 68, 84, 232, 125, 39, 45, 37, 44, 8, 218, 42, 92, 41, 17, 19, 206, 83, 121, 180, 97, 5, 191, 112, 170, 135, 191, 21, 198, 40, 145, 44, 78, 233, 255, 229, 47, 77, 59, 0, 122, 23, 185, 237, 3, 211, 217, 88, 66, 249, 17, 97, 143, 19, 81, 97, 225, 42, 137, 122, 18, 4, 104, 116, 234, 76, 201, 105, 227, 168, 104, 8, 62, 33, 41, 118, 0, 9, 131, 89, 115, 180, 2, 191, 242, 245, 77, 233, 77, 27, 251, 195, 26, 67, 163, 214, 166, 240, 5, 226, 216, 20, 123, 190, 98, 141, 138, 249, 248, 217, 206, 8, 118, 39, 46, 99, 154, 228, 241, 152, 198, 165, 232, 185, 149, 60, 185, 109, 129, 121, 13, 234, 187, 185, 199, 52, 193, 166, 62, 39, 71, 144, 199, 1, 133, 172, 4, 42, 230, 136, 197, 253, 87, 3, 32, 70, 111, 238, 231, 181, 202, 153, 124, 90, 120, 246, 234, 189, 63, 134, 170, 23, 147, 147, 160, 206, 80, 174, 240, 239, 201, 34, 90, 147, 220, 2, 79, 43, 39, 239, 148, 71, 118, 129, 168, 81, 186, 85, 215, 159, 74, 51, 147, 223, 34, 11, 241, 46, 13, 228, 32, 73, 196, 40, 120, 168, 244, 40, 156, 163, 211, 154, 149, 213, 113, 132, 157, 232, 151, 71, 177, 248, 119, 188, 137, 65, 239, 135, 85, 217, 83, 80, 59, 115, 193, 177, 210, 24, 165, 129, 162, 0, 47, 114, 43, 131, 65, 242, 9, 133, 9, 75, 178, 131, 35, 46, 224, 144, 106, 156, 224, 229, 188, 69, 228, 163, 61, 217, 58, 29, 244, 125, 59, 236, 197, 231, 247, 123, 180, 149, 1, 2, 111, 186, 76, 128, 139, 79, 157, 166, 25, 66, 188, 142, 250, 180, 96, 89, 144, 162, 65, 211, 28, 47, 217, 185, 33, 21, 45, 18, 68, 138, 21, 252, 183, 95, 16, 161, 198, 237, 241, 189, 49, 185, 16, 52, 241, 30, 111, 212, 237, 35, 250, 141, 125, 77, 43, 191, 53, 60, 183, 251, 88, 120, 22, 179, 88, 39, 173, 74, 21, 202, 103, 35, 79, 21, 17, 154, 57, 111, 207, 252, 1, 235, 240, 85, 189, 225, 176, 231, 12, 105, 158, 133, 135, 186, 94, 3, 82, 203, 73, 246, 190, 196, 158, 217, 164, 29, 137, 165, 139, 189, 232, 0, 2, 95, 215, 161, 7, 175, 171, 73, 2, 184, 3, 208, 122, 11, 130, 209, 56, 196, 188, 6, 34, 118, 117, 193, 209, 193, 36, 243, 84, 168, 243, 40, 120, 112, 194, 186, 245, 89, 202, 30, 173, 205, 203, 119, 251, 112, 93, 100, 223, 181, 41, 6, 11, 19, 199, 87, 8, 108, 87, 67, 176, 167, 194, 178, 31, 56, 184, 228, 185, 182, 233, 135, 68, 213, 206, 163, 184, 109, 104, 183, 194, 26, 238, 106, 118, 38, 212, 25, 30, 152, 41, 148, 109, 236, 90, 112, 180, 185, 67, 128, 55, 139, 132, 108, 22, 242, 221, 246, 73, 20, 53, 220, 118, 171, 81, 233, 25, 80, 45, 233, 96, 152, 37, 163, 77, 109, 71, 109, 58, 3, 99, 206, 160, 104, 26, 23, 31, 4, 75, 108, 109, 22, 141, 12, 28, 90, 158, 207, 152, 157, 188, 154, 68, 114, 208, 27, 143, 4, 166, 142, 234, 218, 60, 250, 109, 214, 87, 90, 117, 240, 243, 179, 22, 225, 129, 15, 99, 0, 163, 250, 224, 5, 72, 197, 129, 28, 125, 239, 228, 54, 113, 70, 104, 211, 150, 169, 122, 208, 167, 72, 139, 15, 162, 33, 57, 189, 41, 110, 217, 245, 144, 4, 141, 190, 227, 170, 186, 82, 179, 110, 228, 211, 46, 57, 72, 2, 243, 95, 68, 247, 145, 9, 238, 213, 116, 194, 125, 165, 80, 25, 48, 81, 93, 4, 251, 226, 84, 121, 80, 66, 39, 37, 17, 31, 101, 145, 116, 118, 87, 247, 26, 184, 223, 136, 229, 225, 141, 141, 162, 71, 157, 240, 24, 231, 27, 165, 73, 108, 182, 233, 124, 218, 217, 202, 187, 200, 143, 118, 53, 6, 216, 230, 42, 205, 110, 61, 196, 79, 81, 100, 60, 170, 8, 122, 251, 202, 253, 102, 92, 123, 83, 191, 50, 10, 224, 194, 172, 18, 194, 207, 87, 3, 245, 231, 12, 18, 9, 95, 177, 23, 61, 104, 48, 185, 215, 214, 182, 92, 27, 164, 251, 65, 235, 125, 155, 181, 231, 156, 152, 140, 175, 251, 35, 21, 91, 68, 75, 209, 120, 13, 110, 195, 143, 105, 87, 215, 125, 4, 151, 27, 108, 247, 88, 151, 146, 106, 219, 121, 225, 128, 130, 114, 109, 177, 236, 66, 131, 20, 236, 142, 111, 214, 244, 230, 218, 10, 215, 67, 54, 234, 119, 253, 199, 109, 211, 188, 136, 92, 146, 12, 136, 155, 148, 179, 199, 152, 99, 191, 101, 244, 192, 7, 160, 176, 135, 57, 101, 234, 85, 158, 47, 128, 73, 109, 170, 182, 136, 144, 70, 180, 71, 110, 69, 111, 65, 182, 240, 117, 79, 74, 71, 67, 78, 27, 6, 209, 244, 74, 136, 97, 147, 187, 141, 254, 192, 31, 224, 208, 95, 252, 142, 236, 253, 249, 61, 169, 243, 66, 135, 33, 233, 98, 182, 128, 202, 155, 248, 46, 80, 247, 57, 120, 51, 89, 246, 85, 51, 101, 217, 203, 61, 248, 129, 99, 159, 81, 37, 253, 90, 226, 149, 42, 68, 29, 238, 122, 68, 162, 55, 54, 46, 147, 64, 190, 250, 24, 62, 175, 97, 145, 55, 24, 106, 69, 31, 217, 248, 166, 79, 205, 245, 130, 142, 201, 177, 110, 56, 122, 97, 206, 46, 74, 224, 158, 208, 185, 6, 237, 91, 129, 69, 186, 92, 203, 113, 252, 11, 45, 247, 76, 146, 135, 22, 95, 92, 25, 25, 192, 228, 22, 95, 122, 97, 162, 89, 35, 134, 32, 121, 137, 69, 43, 90, 141, 90, 226, 130, 96, 241, 130, 131, 206, 230, 13, 176, 235, 90, 41, 6, 111, 251, 31, 196, 74, 118, 3, 9, 107, 38, 221, 169, 106, 215, 243, 224, 137, 19, 8, 135, 12, 13, 185, 76, 6, 212, 96, 116, 190, 24, 65, 47, 164, 47, 163, 119, 191, 249, 196, 240, 127, 112, 4, 185, 1, 130, 179, 151, 202, 27, 181, 75, 245, 76, 74, 81, 252, 83, 239, 188, 100, 154, 16, 70, 237, 107, 147, 63, 102, 111, 227, 53, 229, 134, 230, 104, 164, 203, 64, 236, 137, 196, 233, 36, 136, 20, 126, 215, 206, 218, 198, 201, 4, 120, 252, 115, 0, 52, 14, 199, 59, 206, 144, 69, 17, 212, 6, 199, 191, 112, 125, 199, 118, 112, 56, 33, 205, 141, 237, 152, 140, 165, 165, 32, 22, 160, 35, 154, 152, 151, 231, 17, 59, 227, 223, 30, 125, 254, 216, 11, 26, 71, 117, 148, 133, 177, 88, 139, 221, 36, 22, 135, 138, 170, 103, 72, 222, 200, 208, 67, 40, 128, 185, 74, 91, 155, 248, 125, 251, 254, 56, 95, 230, 214, 175, 135, 12, 33, 36, 186, 161, 208, 93, 91, 145, 93, 63, 241, 28, 45, 121, 208, 240, 156, 6, 93, 22, 209, 235, 235, 0, 112, 140, 38, 44, 109, 176, 57, 79, 42, 184, 204, 65, 38, 255, 123, 83, 123, 104, 109, 180, 53, 197, 59, 13, 195, 69, 203, 95, 41, 238, 104, 223, 38, 107, 248, 142, 197, 159, 215, 71, 109, 23, 17, 66, 246, 103, 205, 41, 196, 68, 110, 228, 80, 169, 133, 88, 251, 187, 188, 11, 13, 246, 212, 133, 61, 64, 9, 196, 219, 65, 123, 186, 114, 148, 137, 123, 255, 85, 218, 143, 97, 92, 66, 195, 115, 215, 41, 191, 255, 205, 224, 139, 203, 1, 52, 24, 96, 225, 111, 89, 12, 183, 158, 86, 211, 64, 33, 234, 187, 192, 28, 110, 204, 76, 50, 169, 211, 191, 225, 211, 230, 239, 45, 102, 65, 60, 154, 54, 111, 44, 13, 64, 131, 178, 38, 58, 138, 29, 146, 24, 94, 124, 197, 120, 90, 210, 133, 87, 124, 152, 20, 207, 129, 198, 17, 91, 235, 166, 176, 140, 226, 34, 126, 250, 255, 53, 40, 57, 18, 253, 206, 253, 167, 66, 116, 40, 207, 97, 25, 14, 0, 106, 239, 149, 146, 141, 170, 38, 68, 80, 124, 5, 93, 252, 119, 151, 148, 167, 209, 64, 111, 172, 42, 210, 171, 145, 56, 119, 136, 69, 187, 187, 144, 24, 42, 10, 99, 157, 243, 226, 170, 130, 245, 39, 142, 68, 164, 40, 240, 23, 105, 206, 252, 5, 111, 114, 114, 55, 206, 74, 10, 33, 46, 84, 236, 37, 96, 84, 217, 246, 155, 108, 62, 42, 71, 178, 38, 167, 229, 50, 227, 69, 180, 19, 199, 198, 230, 122, 8, 39, 125, 187, 1, 162, 112, 98, 211, 59, 173, 238, 57, 225, 207, 19, 238, 152, 142, 82, 132, 75, 39, 131, 19, 45, 217, 93, 134, 55, 28, 127, 228, 78, 195, 3, 103, 217, 212, 56, 63, 221, 34, 222, 188, 255, 162, 163, 94, 104, 245, 217, 97, 198, 26, 82, 207, 249, 149, 158, 247, 23, 141, 13, 192, 11, 32, 94, 51, 231, 151, 35, 38, 165, 252, 36, 93, 218, 112, 160, 1, 40, 131, 227, 156, 246, 232, 207, 193, 214, 166, 204, 237, 92, 213, 64, 46, 80, 186, 78, 207, 104, 109, 102, 54, 168, 242, 119, 52, 49, 192, 149, 2, 246, 56, 94, 138, 188, 6, 202, 251, 139, 150, 214, 74, 111, 162, 39, 9, 115, 102, 180, 160, 91, 77, 144, 170, 87, 71, 231, 171, 86, 66, 56, 32, 173, 65, 241, 243, 183, 250, 103, 186, 153, 125, 13, 188, 65, 93, 165, 86, 81, 69, 99, 34, 185, 158, 25, 72, 161, 69, 172, 108, 226, 183, 164, 63, 122, 48, 148, 168, 121, 80, 200, 94, 142, 252, 153, 57, 85, 186, 94, 92, 24, 48, 14, 204, 72, 7, 238, 142, 29, 84, 12, 40, 228, 172, 26, 212, 189, 107, 52, 45, 197, 180, 108, 193, 253, 6, 167, 44, 111, 60, 226, 233, 64, 66, 99, 157, 86, 222, 35, 109, 126, 62, 207, 1, 84, 73, 34, 113, 147, 105, 219, 68, 138, 216, 102, 147, 66, 102, 126, 144, 110, 162, 68, 191, 179, 213, 227, 231, 216, 208, 248, 7, 250, 27, 20, 200, 55, 88, 84, 166, 201, 209, 1, 160, 177, 78, 125, 120, 17, 84, 170, 114, 104, 137, 54, 233, 53, 39, 26, 8, 137, 129, 197, 55, 134, 244, 161, 236, 88, 245, 221, 123, 47, 112, 112, 42, 75, 102, 97, 214, 51, 112, 254, 34, 59, 112, 36, 191, 8, 66, 137, 94, 56, 8, 207, 150, 106, 90, 33, 215, 208, 166, 121, 82, 82, 163, 229, 193, 84, 165, 182, 88, 218, 252, 48, 198, 33, 120, 160, 97, 237, 37, 196, 217, 89, 115, 148, 12, 159, 43, 21, 140, 0, 142, 134, 179, 159, 235, 36, 200, 214, 84, 130, 45, 202, 78, 30, 201, 88, 57, 220, 157, 18, 84, 205, 138, 38, 105, 209, 82, 100, 172, 231, 39, 216, 41, 84, 57, 195, 175, 129, 219, 144, 211, 154, 136, 53, 4, 190, 115, 189, 204, 58, 83, 80, 84, 201, 25, 201, 74, 86, 100, 148, 246, 29, 207, 37, 49, 45, 106, 92, 179, 247, 205, 252, 140, 239, 173, 6, 162, 55, 212, 132, 86, 100, 14, 153, 37, 120, 21, 93, 1, 17, 46, 0, 235, 98, 235, 231, 84, 171, 255, 129, 182, 12, 105, 227, 42, 251, 184, 28, 57, 87, 85, 141, 172, 97, 153, 20, 253, 224, 114, 121, 105, 23, 243, 166, 183, 14, 113, 128, 77, 161, 150, 190, 155, 208, 164, 75, 99, 133, 62, 27, 84, 190, 132, 223, 143, 136, 53, 221, 20, 9, 111, 149, 16, 91, 74, 14, 199, 122, 233, 201, 148, 249, 30, 18, 164, 149, 18, 242, 86, 34, 180, 111, 64, 25, 157, 151, 220, 255, 190, 118, 223, 144, 74, 45, 127, 212, 194, 160, 114, 177, 2, 117, 149, 134, 62, 248, 48, 152, 228, 13, 35, 238, 14, 117, 48, 189, 136, 123, 153, 29, 130, 15, 72, 230, 201, 69, 6, 251, 57, 188, 108, 124, 235, 87, 159, 6, 156, 50, 43, 88, 167, 255, 225, 26, 23, 142, 165, 53, 39, 80, 59, 67, 20, 192, 146, 45, 250, 54, 186, 124, 11, 60, 78, 79, 185, 146, 241, 110, 4, 8, 188, 66, 122, 250, 133, 174, 167, 109, 62, 243, 152, 46, 208, 123, 54, 171, 43, 33, 244, 162, 49, 28, 242, 116, 109, 249, 149, 152, 181, 60, 172, 188, 56, 142, 99, 108, 80, 194, 144, 108, 11, 44, 3, 190, 229, 100, 225, 232, 66, 22, 235, 212, 176, 153, 205, 252, 53, 214, 89, 136, 171, 84, 77, 28, 232, 104, 35, 240, 201, 105, 233, 189, 171, 106, 53, 125, 3, 57, 210, 126, 184, 145, 110, 90, 71, 246, 241, 89, 173, 93, 39, 153, 2, 163, 111, 115, 185, 172, 4, 91, 229, 70, 62, 201, 164, 33, 222, 41, 86, 242, 38, 29, 5, 195, 132, 42, 163, 33, 206, 70, 184, 133, 112, 31, 93, 120, 140, 6, 229, 149, 244, 13, 73, 174, 92, 79, 87, 168, 53, 137, 46, 141, 215, 194, 129, 123, 183, 121, 146, 172, 103, 240, 47, 18, 225, 9, 75, 112, 240, 49, 9, 229, 52, 183, 238, 121, 73, 165, 124, 137, 60, 107, 203, 123, 133, 146, 122, 179, 77, 51, 214, 155, 223, 127, 171, 180, 236, 160, 152, 245, 25, 121, 69, 18, 147, 182, 236, 225, 76, 37, 44, 4, 38, 253, 238, 173, 218, 196, 94, 231, 112, 202, 254, 90, 168, 8, 29, 184, 186, 246, 163, 143, 117, 25, 140, 132, 199, 16, 117, 115, 200, 76, 135, 187, 74, 33, 222, 101, 31, 197, 171, 190, 221, 185, 36, 118, 116, 217, 59, 21, 40, 123, 39, 104, 101, 184, 170, 178, 201, 234, 132, 219, 203, 173, 239, 62, 92, 24, 45, 0, 235, 231, 73, 17, 12, 21, 119, 131, 110, 27, 77, 75, 93, 156, 192, 134, 31, 101, 75, 245, 3, 113, 68, 24, 1, 112, 116, 94, 155, 222, 97, 36, 182, 56, 159, 192, 67, 200, 41, 62, 65, 156, 213, 121, 204, 227, 172, 140, 227, 174, 152, 249, 146, 188, 156, 125, 63, 31, 121, 13, 34, 12, 50, 221, 242, 24, 93, 14, 195, 149, 242, 133, 215, 42, 125, 112, 124, 142, 106, 168, 103, 52, 10, 42, 1, 193, 78, 57, 250, 84, 181, 215, 134, 186, 226, 233, 131, 171, 140, 75, 145, 241, 83, 181, 60, 61, 251, 248, 226, 191, 121, 98, 166, 130, 231, 54, 224, 184, 177, 178, 138, 19, 108, 108, 43, 220, 226, 203, 132, 255, 91, 241, 96, 155, 186, 121, 117, 203, 187, 193, 95, 89, 148, 186, 122, 244, 12, 54, 119, 191, 250, 27, 9, 102, 105, 53, 32, 165, 18, 51, 131, 155, 208, 250, 229, 28, 41, 7, 7, 20, 104, 77, 102, 33, 121, 40, 228, 45, 1, 110, 185, 252, 51, 102, 31, 1, 184, 75, 149, 177, 104, 84, 200, 214, 161, 216, 120, 251, 86, 109, 244, 93, 96, 174, 107, 156, 242, 152, 72, 204, 159, 43, 67, 254, 27, 85, 213, 238, 149, 215, 28, 173, 35, 121, 73, 39, 242, 143, 68, 91, 86, 13, 211, 130, 171, 202, 171, 153, 125, 86, 86, 222, 108, 98, 139, 3, 37, 237, 203, 113, 235, 215, 210, 88, 206, 137, 255, 14, 153, 38, 134, 237, 96, 238, 187, 201, 140, 127, 200, 203, 232, 149, 207, 101, 128, 207, 250, 191, 135, 18, 153, 172, 98, 226, 129, 102, 128, 0, 184, 188, 1, 214, 35, 234, 220, 148, 102, 216, 146, 3, 151, 72, 171, 214, 120, 94, 44, 174, 39, 136, 41, 42, 245, 174, 117, 110, 19, 151, 167, 136, 91, 11, 123, 231, 42, 82, 107, 182, 247, 185, 237, 184, 57, 42, 66, 139, 87, 55, 19, 171, 152, 84, 254, 226, 159, 4, 245, 194, 143, 89, 38, 24, 86, 248, 210, 133, 11, 163, 126, 203, 70, 185, 252, 176, 7, 212, 37, 23, 11, 144, 67, 234, 214, 237, 97, 139, 83, 122, 186, 187, 177, 145, 49, 32, 125, 68, 192, 22, 97, 137, 159, 135, 31, 80, 27, 250, 142, 82, 165, 53, 239, 155, 165, 44, 83, 162, 82, 52, 195, 97, 114, 57, 32, 235, 150, 100, 172, 25, 86, 21, 8, 143, 44, 214, 239, 167, 199, 7, 64, 248, 0, 254, 139, 78, 19, 129, 62, 131, 253, 192, 130, 165, 107, 26, 69, 162, 215, 236, 254, 129, 82, 174, 248, 62, 181, 76, 229, 159, 214, 222, 155, 125, 251, 250, 148, 239, 125, 179, 7, 219, 38, 157, 105, 137, 138, 183, 127, 203, 155, 64, 49, 27, 65, 90, 207, 165, 220, 251, 86, 71, 138, 163, 107, 138, 114, 88, 37, 101, 139, 170, 66, 9, 114, 158, 118, 9, 55, 105, 62, 18, 32, 97, 107, 197, 16, 99, 120, 138, 237, 216, 164, 193, 26, 154, 80, 162, 163, 237, 138, 21, 43, 58, 64, 50, 166, 27, 4, 190, 247, 105, 165, 150, 30, 157, 66, 189, 117, 1, 162, 221, 142, 94, 255, 140, 98, 226, 255, 255, 204, 158, 172, 7, 162, 79, 93, 251, 98, 141, 23, 218, 114, 83, 198, 80, 121, 162, 159, 98, 192, 31, 72, 201, 177, 237, 91, 6, 166, 39, 165, 112, 153, 163, 69, 112, 241, 12, 20, 164, 123, 170, 248, 186, 208, 60, 222, 203, 221, 172, 158, 136, 49, 229, 168, 118, 221, 45, 250, 56, 109, 129, 114, 27, 100, 54, 189, 180, 135, 22, 26, 188, 118, 183, 108, 147, 14, 109, 232, 212, 95, 22, 54, 194, 28, 247, 137, 29, 95, 119, 63, 245, 51, 9, 199, 229, 249, 200, 0, 76, 131, 237, 248, 100, 50, 203, 15, 21, 28, 61, 202, 140, 39, 63, 53, 18, 156, 196, 157, 207, 75, 97, 98, 62, 37, 67, 199, 43, 93, 62, 47, 129, 190, 108, 249, 203, 3, 61, 23, 27, 102, 36, 161, 189, 182, 154, 227, 48, 239, 53, 67, 25, 235, 12, 208, 109, 133, 212, 1, 149, 244, 64, 184, 57, 71, 218, 13, 36, 187, 163, 37, 60, 151, 28, 3, 124, 162, 7, 162, 214, 112, 186, 151, 216, 82, 4, 221, 133, 19, 93, 39, 166, 57, 38, 139, 129, 179, 112, 67, 144, 146, 40, 200, 93, 33, 97, 229, 144, 108, 191, 249, 241, 173, 221, 156, 251, 82, 55, 217, 154, 245, 244, 154, 38, 156, 190, 129, 214, 86, 210, 115, 67, 157, 211, 56, 196, 22, 159, 34, 214, 146, 234, 12, 117, 101, 185, 199, 12, 117, 67, 210, 161, 56, 179, 79, 153, 6, 220, 87, 130, 34, 196, 134, 178, 186, 128, 131, 87, 199, 84, 56, 89, 96, 82, 119, 90, 73, 47, 6, 195, 213, 19, 49, 101, 196, 118, 138, 255, 45, 130, 188, 227, 245, 217, 41, 119, 150, 67, 200, 108, 59, 210, 186, 230, 34, 68, 252, 220, 159, 83, 166, 203, 137, 132, 35, 232, 33, 131, 157, 3, 90, 80, 197, 165, 58, 180, 104, 246, 218, 215, 93, 118, 111, 213, 9, 187, 235, 108, 120, 191, 30, 37, 138, 64, 228, 246, 150, 227, 64, 23, 54, 18, 216, 196, 160, 170, 136, 215, 197, 161, 137, 73, 0, 223, 67, 135, 236, 61, 35, 172, 196, 27, 161, 198, 212, 124, 227, 138, 139, 245, 18, 58, 154, 81, 93, 37, 64, 245, 76, 183, 157, 90, 92, 4, 99, 243, 108, 246, 115, 5, 201, 179, 84, 72, 85, 63, 119, 124, 185, 109, 86, 235, 216, 118, 53, 12, 182, 132, 42, 38, 199, 218, 172, 63, 148, 35, 170, 60, 104, 137, 222, 32, 218, 42, 82, 201, 250, 67, 180, 179, 49, 69, 234, 18, 139, 109, 161, 99, 247, 250, 163, 103, 205, 48, 191, 134, 102, 197, 182, 225, 4, 14, 67, 249, 240, 255, 80, 251, 175, 114, 166, 175, 229, 86, 132, 80, 22, 234, 251, 42, 218, 147, 252, 223, 153, 142, 34, 215, 110, 147, 96, 133, 228, 168, 5, 110, 72, 32, 130, 235, 86, 129, 120, 43, 171, 161, 195, 156, 58, 138, 124, 206, 165, 169, 152, 5, 234, 61, 52, 107, 134, 229, 105, 237, 26, 198, 198, 50, 26, 29, 226, 242, 133, 42, 49, 155, 51, 32, 60, 141, 69, 30, 182, 42, 141, 165, 177, 109, 201, 53, 218, 191, 60, 4, 100, 123, 8, 231, 204, 167, 0, 234, 223, 2, 213, 117, 213, 113, 209, 13, 14, 215, 191, 105, 184, 131, 148, 202, 101, 123, 13, 203, 30, 25, 244, 86, 94, 221, 216, 27, 47, 10, 27, 41, 30, 0, 21, 110, 82, 135, 134, 203, 223, 13, 14, 15, 36, 145, 171, 110, 98, 22, 81, 102, 58, 160, 230, 213, 76, 228, 23, 132, 55, 37, 206, 157, 209, 67, 91, 69, 28, 192, 110, 101, 54, 149, 200, 108, 180, 50, 250, 56, 77, 108, 187, 37, 231, 222, 84, 232, 43, 149, 142, 66, 3, 50, 54, 171, 25, 249, 114, 45, 54, 86, 52, 158, 231, 111, 190, 86, 160, 68, 141, 212, 97, 175, 35, 255, 227, 127, 195, 134, 108, 202, 129, 182, 19, 40, 181, 231, 58, 135, 124, 197, 164, 136, 73, 39, 81, 21, 50, 146, 1, 157, 124, 177, 175, 239, 71, 164, 175, 161, 1, 69, 93, 36, 210, 4, 240, 135, 247, 68, 60, 77, 91, 196, 89, 47, 213, 166, 158, 13, 204, 253, 165, 92, 44, 58, 51, 73, 134, 51, 244, 81, 242, 106, 118, 227, 240, 131, 178, 67, 14, 118, 84, 4, 116, 142, 201, 203, 84, 13, 152, 75, 113, 204, 147, 196, 160, 143, 195, 125, 164, 119, 152, 20, 60, 23, 20, 219, 192, 23, 70, 106, 239, 161, 151, 41, 146, 235, 145, 232, 107, 196, 196, 77, 22, 14, 240, 40, 57, 40, 188, 206, 65, 213, 222, 16, 214, 90, 3, 130, 114, 201, 101, 14, 227, 200, 56, 72, 157, 217, 116, 49, 63, 179, 101, 170, 197, 11, 232, 163, 246, 201, 121, 153, 9, 16, 101, 105, 207, 70, 51, 133, 83, 222, 246, 107, 174, 168, 99, 211, 253, 17, 213, 17, 8, 70, 69, 42, 59, 68, 170, 35, 64, 153, 238, 239, 137, 61, 206, 45, 182, 95, 118, 239, 185, 118, 214, 104, 188, 18, 177, 69, 175, 48, 48, 39, 221, 89, 212, 167, 66, 183, 72, 38, 97, 98, 14, 134, 69, 18, 223, 152, 182, 39, 167, 174, 175, 43, 148, 214, 94, 150, 203, 98, 89, 126, 80, 224, 208, 185, 240, 187, 171, 206, 190, 217, 130, 172, 145, 23, 236, 213, 58, 184, 75, 195, 52, 202, 239, 63, 13, 45, 57, 202, 221, 254, 208, 241, 171, 113, 109, 24, 195, 139, 29, 175, 89, 203, 120, 177, 151, 100, 134, 64, 96, 167, 94, 101, 161, 65, 1, 144, 49, 140, 56, 62, 166, 20, 208, 141, 129, 136, 82, 124, 63, 0, 223, 74, 190, 225, 139, 181, 230, 27, 142, 1, 124, 126, 84, 217, 70, 140, 203, 157, 179, 104, 123, 50, 133, 122, 201, 39, 197, 158, 46, 202, 177, 98, 205, 158, 195, 136, 19, 59, 105, 125, 195, 205, 40, 190, 176, 20, 178, 34, 74, 103, 17, 47, 9, 199, 140, 96, 148, 166, 253, 29, 77, 45, 27, 26, 212, 39, 133, 173, 152, 195, 68, 55, 33, 235, 65, 246, 88, 144, 101, 50, 104, 35, 242, 149, 112, 13, 83, 64, 37, 95, 14, 88, 129, 174, 114, 20, 61, 195, 120, 235, 108, 67, 124, 61, 240, 239, 58, 141, 7, 125, 46, 103, 1, 177, 218, 31, 178, 30, 8, 148, 66, 232, 127, 131, 78, 40, 97, 205, 55, 151, 60, 156, 129, 150, 249, 128, 221, 230, 144, 41, 251, 144, 195, 91, 38, 84, 119, 7, 60, 70, 172, 9, 80, 82, 208, 180, 232, 4, 37, 23, 148, 0, 201, 189, 161, 206, 17, 198, 14, 16, 61, 241, 121, 255, 217, 210, 121, 100, 46, 134, 152, 47, 224, 178, 64, 208, 117, 133, 193, 212, 104, 227, 87, 42, 112, 103, 25, 42, 7, 224, 110, 193, 86, 85, 160, 227, 192, 128, 232, 84, 204, 160, 63, 190, 89, 49, 2, 13, 213, 12, 101, 127, 80, 119, 69, 159, 213, 179, 79, 71, 167, 170, 164, 85, 239, 133, 68, 63, 24, 178, 213, 172, 85, 69, 198, 5, 226, 85, 223, 83, 67, 88, 66, 85, 142, 64, 118, 162, 111, 142, 14, 224, 183, 143, 167, 241, 119, 108, 148, 112, 46, 204, 253, 243, 170, 107, 192, 171, 102, 168, 197, 139, 123, 136, 62, 114, 210, 224, 153, 163, 166, 194, 56, 176, 239, 74, 231, 4, 40, 221, 229, 192, 224, 221, 71, 138, 250, 155, 95, 110, 49, 183, 244, 250, 17, 243, 74, 196, 41, 193, 66, 225, 2, 158, 180, 83, 76, 130, 128, 201, 74, 226, 150, 240, 119, 133, 228, 109, 209, 83, 111, 67, 163, 152, 16, 154, 116, 239, 60, 224, 19, 172, 57, 142, 130, 45, 6, 37, 124, 241, 93, 97, 206, 61, 236, 200, 218, 5, 20, 68, 216, 47, 149, 193, 67, 235, 100, 217, 23, 202, 217, 208, 149, 164, 226, 245, 205, 255, 180, 167, 250, 20, 46, 253, 43, 136, 187, 254, 155, 128, 133, 212, 226, 191, 234, 107, 221, 65, 217, 163, 65, 69, 237, 14, 227, 125, 90, 172, 75, 163, 219, 171, 204, 217, 115, 194, 60, 207, 28, 59, 228, 82, 190, 181, 221, 20, 221, 218, 30, 132, 217, 176, 232, 73, 231, 229, 105, 14, 0, 103, 251, 16, 100, 160, 89, 63, 220, 142, 41, 40, 171, 20, 154, 174, 196, 234, 111, 128, 248, 202, 248, 240, 237, 77, 162, 90, 122, 45, 181, 174, 36, 131, 249, 206, 245, 247, 83, 174, 239, 53, 123, 203, 191, 134, 113, 97, 239, 108, 211, 56, 86, 178, 19, 53, 30, 202, 13, 146, 16, 140, 136, 43, 138, 176, 119, 104, 101, 175, 132, 33, 19, 112, 171, 49, 84, 67, 11, 126, 230, 175, 170, 48, 105, 48, 218, 26, 235, 95, 90, 248, 96, 216, 0, 42, 241, 113, 213, 84, 205, 124, 116, 231, 132, 4, 62, 159, 87, 19, 153, 52, 186, 189, 143, 248, 52, 75, 15, 180, 232, 246, 214, 182, 244, 29, 136, 109, 56, 128, 139, 70, 171, 56, 95, 169, 215, 69, 209, 189, 0, 206, 219, 15, 49, 215, 232, 196, 223, 90, 25, 139, 254, 175, 140, 59, 52, 50, 169, 16, 38, 67, 155, 233, 107, 58, 202, 126, 174, 107, 70, 242, 131, 216, 3, 214, 180, 163, 171, 243, 204, 242, 106, 173, 176, 212, 246, 158, 100, 188, 179, 124, 56], - [183, 80, 218, 96, 160, 212, 114, 198, 114, 253, 77, 135, 159, 95, 103, 48, 196, 144, 238, 91, 203, 36, 202, 176, 217, 88, 7, 118, 123, 56, 190, 147, 119, 75, 70, 172, 232, 180, 42, 45, 71, 39, 144, 143, 130, 236, 82, 90, 7, 247, 60, 106, 1, 134, 248, 189, 235, 75, 60, 116, 121, 82, 31, 79, 177, 75, 7, 247, 253, 19, 197, 219, 84, 134, 4, 99, 18, 46, 85, 57, 236, 92, 242, 239, 135, 198, 196, 104, 69, 117, 179, 15, 137, 150, 99, 200, 206, 69, 141, 248, 134, 66, 6, 87, 62, 168, 231, 118, 72, 51, 1, 182, 113, 104, 87, 232, 167, 120, 145, 30, 144, 13, 35, 226, 253, 209, 181, 127, 97, 60, 91, 92, 81, 5, 183, 134, 71, 76, 212, 108, 175, 39, 8, 141, 137, 217, 237, 235, 110, 184, 146, 12, 60, 23, 155, 201, 243, 204, 192, 44, 47, 223, 253, 130, 170, 11, 235, 126, 212, 169, 117, 179, 254, 42, 216, 163, 188, 77, 167, 116, 221, 40, 46, 43, 189, 255, 245, 217, 162, 151, 203, 233, 85, 64, 143, 77, 163, 37, 107, 162, 88, 23, 44, 230, 53, 57, 180, 39, 214, 15, 84, 181, 247, 174, 212, 166, 253, 102, 84, 84, 8, 22, 44, 221, 15, 67, 1, 163, 229, 103, 229, 33, 152, 220, 142, 51, 67, 232, 71, 26, 228, 201, 59, 17, 209, 27, 239, 206, 97, 33, 219, 169, 50, 35, 72, 4, 39, 51, 35, 249, 174, 71, 60, 193, 213, 90, 85, 217, 200, 79, 224, 100, 68, 188, 165, 245, 232, 203, 82, 179, 149, 128, 179, 176, 148, 142, 107, 208, 180, 182, 7, 161, 15, 68, 43, 243, 228, 151, 218, 15, 115, 10, 213, 251, 5, 163, 40, 217, 86, 187, 22, 82, 249, 56, 195, 77, 175, 174, 255, 15, 105, 25, 141, 175, 18, 164, 123, 32, 24, 200, 173, 242, 160, 213, 201, 197, 234, 177, 94, 180, 52, 152, 226, 104, 32, 167, 86, 185, 193, 123, 210, 80, 91, 236, 56, 116, 58, 30, 67, 235, 180, 79, 223, 164, 178, 196, 122, 39, 131, 118, 23, 162, 230, 104, 147, 25, 181, 227, 6, 133, 8, 25, 63, 105, 142, 160, 9, 168, 44, 34, 123, 34, 29, 137, 240, 252, 255, 78, 131, 223, 241, 44, 6, 140, 222, 249, 249, 53, 168, 125, 144, 244, 37, 32, 140, 42, 142, 105, 233, 225, 15, 95, 205, 154, 101, 244, 189, 254, 210, 28, 68, 19, 181, 148, 21, 84, 74, 206, 138, 114, 123, 62, 85, 76, 29, 84, 87, 153, 16, 167, 148, 23, 185, 96, 65, 20, 247, 104, 244, 128, 55, 80, 20, 49, 213, 148, 14, 102, 19, 109, 125, 242, 13, 25, 122, 46, 39, 225, 100, 72, 38, 204, 51, 164, 192, 9, 232, 194, 159, 174, 0, 75, 245, 167, 118, 150, 73, 194, 154, 194, 197, 154, 230, 217, 34, 159, 181, 96, 73, 95, 168, 97, 139, 248, 222, 63, 98, 19, 229, 50, 134, 31, 219, 91, 3, 112, 205, 69, 212, 140, 250, 219, 115, 174, 133, 119, 28, 139, 39, 149, 187, 7, 254, 13, 56, 136, 156, 181, 164, 207, 215, 93, 64, 35, 236, 216, 131, 86, 123, 188, 232, 173, 245, 171, 216, 73, 5, 170, 141, 85, 225, 167, 59, 142, 64, 150, 85, 153, 131, 230, 158, 131, 241, 186, 3, 16, 220, 172, 66, 72, 155, 93, 68, 243, 29, 222, 56, 115, 164, 110, 85, 244, 121, 89, 25, 249, 129, 168, 155, 164, 9, 7, 41, 9, 175, 138, 197, 167, 54, 168, 254, 81, 26, 14, 146, 74, 119, 248, 115, 189, 147, 106, 175, 136, 101, 255, 173, 224, 198, 211, 64, 212, 32, 14, 203, 84, 111, 207, 182, 28, 54, 94, 102, 150, 225, 97, 15, 174, 114, 198, 38, 107, 8, 215, 6, 9, 157, 93, 227, 247, 36, 119, 103, 90, 52, 170, 108, 184, 130, 121, 198, 111, 26, 121, 170, 89, 124, 229, 52, 54, 88, 164, 88, 130, 111, 109, 231, 215, 27, 6, 221, 248, 242, 167, 187, 254, 40, 173, 24, 135, 136, 245, 146, 46, 164, 145, 214, 175, 118, 137, 125, 193, 26, 146, 235, 243, 88, 196, 137, 32, 195, 75, 172, 179, 46, 189, 111, 138, 205, 232, 161, 102, 17, 12, 136, 32, 62, 30, 228, 59, 107, 184, 176, 163, 123, 242, 233, 134, 143, 113, 119, 153, 34, 6, 223, 122, 102, 62, 210, 11, 168, 68, 120, 122, 179, 240, 101, 35, 121, 238, 161, 154, 122, 153, 243, 203, 199, 189, 6, 0, 66, 34, 88, 75, 136, 28, 25, 239, 94, 18, 242, 50, 115, 106, 106, 76, 176, 200, 124, 2, 30, 158, 217, 239, 215, 204, 171, 243, 68, 60, 203, 27, 191, 6, 149, 112, 33, 167, 226, 181, 25, 200, 100, 157, 191, 76, 44, 19, 60, 67, 203, 25, 4, 124, 8, 21, 31, 34, 173, 164, 53, 231, 130, 249, 136, 149, 156, 186, 163, 121, 26, 160, 211, 89, 84, 149, 231, 99, 183, 225, 56, 33, 237, 231, 151, 171, 98, 225, 159, 68, 128, 149, 200, 158, 140, 142, 107, 139, 0, 181, 148, 107, 49, 47, 220, 128, 199, 59, 222, 159, 165, 215, 234, 213, 200, 200, 248, 141, 75, 83, 16, 225, 41, 144, 11, 4, 112, 47, 38, 215, 250, 111, 105, 202, 251, 10, 250, 122, 60, 135, 49, 106, 193, 98, 163, 16, 221, 166, 210, 124, 80, 216, 174, 38, 202, 101, 71, 255, 91, 19, 170, 55, 86, 254, 11, 108, 176, 123, 179, 182, 100, 168, 85, 22, 60, 46, 147, 238, 106, 106, 226, 1, 235, 167, 5, 85, 4, 248, 126, 17, 70, 188, 107, 229, 18, 52, 36, 199, 154, 61, 4, 101, 23, 17, 58, 186, 123, 9, 33, 31, 231, 98, 186, 227, 36, 253, 174, 0, 107, 72, 21, 42, 155, 235, 148, 75, 121, 45, 11, 239, 235, 9, 7, 55, 231, 33, 134, 13, 58, 240, 32, 50, 40, 177, 82, 62, 245, 160, 126, 151, 79, 112, 85, 202, 174, 124, 52, 97, 38, 37, 182, 155, 141, 179, 85, 114, 41, 195, 81, 248, 211, 102, 210, 243, 123, 105, 151, 173, 7, 208, 185, 28, 152, 181, 62, 180, 227, 160, 237, 230, 68, 46, 161, 151, 240, 238, 234, 118, 240, 249, 20, 114, 110, 87, 229, 181, 199, 147, 89, 103, 108, 132, 186, 33, 23, 4, 160, 141, 164, 250, 136, 245, 40, 253, 1, 204, 218, 19, 91, 234, 252, 198, 155, 62, 94, 130, 33, 4, 132, 182, 68, 172, 221, 1, 185, 85, 193, 205, 192, 81, 82, 191, 34, 47, 172, 134, 55, 182, 33, 181, 56, 185, 197, 158, 157, 127, 1, 36, 130, 216, 226, 188, 100, 156, 242, 251, 222, 86, 109, 255, 48, 115, 79, 104, 25, 3, 27, 113, 221, 31, 105, 109, 30, 126, 161, 16, 248, 248, 144, 89, 12, 162, 5, 17, 33, 198, 205, 143, 122, 81, 62, 97, 37, 232, 120, 130, 39, 15, 108, 175, 160, 247, 82, 104, 30, 50, 227, 132, 123, 186, 130, 135, 238, 127, 247, 53, 51, 26, 32, 235, 119, 110, 42, 70, 31, 113, 91, 91, 148, 222, 170, 146, 203, 190, 173, 194, 223, 254, 150, 208, 116, 185, 210, 232, 176, 2, 29, 147, 192, 28, 214, 10, 104, 129, 133, 226, 51, 55, 75, 91, 71, 77, 182, 161, 70, 88, 78, 38, 224, 10, 255, 10, 233, 239, 102, 55, 18, 198, 58, 245, 152, 137, 151, 70, 146, 252, 196, 125, 219, 208, 38, 188, 47, 112, 18, 224, 208, 2, 185, 13, 31, 143, 115, 145, 242, 52, 47, 145, 87, 72, 124, 156, 111, 218, 218, 75, 222, 233, 1, 224, 172, 210, 139, 20, 4, 49, 151, 240, 73, 181, 219, 71, 134, 209, 167, 212, 47, 230, 130, 76, 54, 164, 202, 233, 180, 91, 239, 8, 133, 73, 51, 4, 28, 40, 20, 189, 99, 159, 145, 223, 222, 144, 46, 90, 17, 65, 140, 191, 229, 202, 149, 61, 131, 83, 49, 103, 201, 102, 212, 216, 184, 59, 12, 166, 4, 164, 70, 111, 209, 227, 165, 115, 56, 20, 12, 60, 100, 112, 222, 187, 146, 87, 237, 94, 238, 72, 109, 142, 146, 156, 196, 79, 135, 193, 242, 50, 29, 116, 182, 236, 214, 71, 104, 190, 165, 236, 132, 147, 113, 76, 37, 21, 240, 153, 12, 251, 55, 237, 76, 83, 87, 91, 176, 132, 109, 239, 33, 212, 54, 202, 37, 171, 152, 131, 23, 17, 210, 64, 42, 23, 221, 78, 254, 222, 189, 232, 146, 28, 148, 167, 226, 86, 246, 162, 30, 163, 146, 8, 199, 28, 160, 210, 188, 171, 202, 246, 1, 90, 180, 240, 82, 80, 37, 121, 33, 250, 76, 129, 75, 165, 1, 160, 77, 141, 48, 175, 213, 212, 26, 41, 203, 147, 3, 15, 210, 10, 143, 142, 117, 210, 129, 145, 128, 171, 51, 99, 107, 183, 3, 171, 175, 50, 83, 120, 62, 183, 161, 122, 205, 117, 50, 184, 136, 182, 205, 94, 220, 112, 151, 9, 58, 175, 31, 145, 32, 241, 10, 62, 237, 75, 221, 100, 170, 49, 182, 124, 80, 181, 175, 242, 148, 139, 159, 202, 202, 162, 214, 70, 51, 71, 111, 217, 210, 172, 121, 109, 150, 175, 33, 147, 130, 40, 144, 240, 158, 115, 239, 113, 108, 36, 245, 90, 202, 2, 127, 61, 98, 70, 98, 219, 124, 136, 132, 129, 136, 174, 142, 97, 198, 174, 121, 85, 167, 131, 214, 225, 186, 114, 229, 145, 2, 246, 67, 22, 134, 81, 211, 176, 20, 182, 195, 124, 103, 238, 171, 84, 42, 98, 39, 252, 10, 41, 175, 200, 222, 16, 141, 111, 230, 139, 26, 61, 184, 193, 16, 39, 149, 57, 109, 245, 64, 228, 221, 105, 33, 111, 66, 238, 42, 120, 107, 99, 188, 59, 231, 63, 160, 249, 122, 180, 132, 212, 115, 33, 165, 148, 131, 237, 85, 71, 222, 234, 172, 114, 42, 1, 155, 47, 161, 142, 26, 63, 218, 71, 75, 117, 87, 11, 71, 155, 33, 215, 207, 144, 22, 247, 58, 34, 216, 76, 41, 170, 170, 165, 140, 96, 8, 235, 5, 53, 149, 229, 22, 91, 176, 210, 159, 254, 120, 2, 230, 25, 180, 252, 71, 47, 170, 223, 72, 23, 106, 32, 189, 56, 143, 124, 161, 76, 164, 85, 165, 164, 69, 197, 36, 247, 155, 7, 47, 18, 245, 87, 120, 189, 54, 68, 83, 171, 177, 76, 56, 32, 54, 163, 12, 16, 127, 102, 244, 162, 231, 168, 212, 209, 74, 60, 249, 49, 161, 22, 62, 132, 228, 131, 49, 126, 187, 113, 113, 146, 154, 210, 12, 197, 118, 190, 147, 214, 217, 5, 61, 48, 170, 54, 187, 118, 237, 136, 2, 110, 198, 238, 40, 166, 149, 0, 82, 239, 150, 176, 17, 162, 147, 210, 208, 193, 58, 17, 190, 67, 202, 48, 165, 68, 105, 9, 61, 180, 111, 222, 233, 123, 110, 97, 248, 87, 134, 197, 162, 130, 180, 51, 147, 120, 38, 118, 191, 235, 252, 238, 164, 189, 80, 201, 166, 113, 250, 174, 239, 75, 206, 190, 224, 240, 130, 176, 220, 247, 148, 56, 87, 247, 182, 60, 76, 190, 34, 129, 35, 229, 29, 176, 48, 197, 200, 42, 108, 57, 123, 181, 111, 158, 37, 51, 13, 57, 99, 227, 40, 218, 169, 253, 48, 209, 217, 60, 106, 32, 239, 34, 224, 163, 180, 34, 63, 92, 126, 78, 185, 44, 149, 175, 33, 238, 72, 36, 238, 149, 255, 44, 166, 34, 207, 187, 186, 236, 167, 90, 15, 194, 82, 222, 126, 239, 101, 154, 34, 18, 209, 34, 56, 172, 162, 121, 204, 100, 16, 194, 18, 157, 59, 220, 227, 20, 45, 117, 170, 112, 55, 175, 72, 239, 91, 223, 246, 170, 159, 58, 96, 140, 249, 215, 178, 81, 180, 194, 159, 242, 94, 150, 149, 234, 55, 39, 167, 154, 228, 9, 24, 162, 12, 217, 192, 193, 50, 77, 25, 12, 76, 240, 141, 71, 73, 164, 113, 189, 157, 128, 66, 165, 71, 48, 206, 210, 4, 38, 32, 61, 35, 68, 70, 144, 223, 242, 115, 4, 109, 124, 108, 36, 195, 17, 195, 219, 173, 201, 188, 22, 115, 238, 207, 135, 122, 68, 80, 205, 122, 160, 231, 46, 132, 239, 242, 179, 225, 106, 120, 146, 142, 9, 82, 231, 118, 217, 108, 216, 236, 138, 177, 51, 100, 72, 214, 195, 2, 57, 171, 140, 215, 76, 64, 145, 186, 44, 132, 187, 13, 23, 246, 100, 114, 210, 10, 128, 125, 133, 37, 26, 112, 134, 38, 46, 56, 115, 165, 181, 136, 226, 94, 67, 151, 243, 232, 71, 67, 23, 13, 49, 139, 116, 39, 104, 13, 128, 182, 243, 135, 10, 102, 69, 128, 46, 37, 204, 78, 69, 228, 16, 51, 119, 188, 100, 143, 48, 15, 51, 84, 195, 159, 223, 252, 145, 246, 134, 23, 92, 3, 101, 247, 249, 78, 235, 165, 77, 230, 105, 211, 125, 108, 21, 27, 232, 5, 222, 103, 200, 191, 6, 21, 59, 233, 252, 53, 35, 168, 90, 214, 89, 251, 153, 188, 141, 119, 196, 80, 185, 144, 45, 180, 230, 45, 107, 129, 204, 60, 225, 134, 72, 220, 122, 252, 139, 215, 193, 193, 89, 30, 131, 115, 147, 222, 67, 179, 180, 211, 60, 87, 17, 145, 132, 157, 60, 15, 179, 254, 41, 49, 192, 107, 189, 193, 21, 97, 67, 22, 130, 197, 251, 109, 7, 72, 224, 26, 6, 28, 254, 255, 138, 202, 47, 37, 74, 90, 240, 157, 68, 207, 146, 228, 162, 93, 170, 105, 69, 182, 149, 178, 133, 207, 153, 13, 33, 63, 165, 66, 14, 239, 62, 178, 159, 171, 47, 229, 68, 105, 160, 61, 68, 106, 147, 177, 158, 42, 178, 245, 211, 130, 227, 120, 42, 238, 229, 120, 205, 96, 147, 89, 67, 96, 53, 63, 215, 89, 253, 237, 156, 145, 19, 227, 39, 46, 181, 109, 6, 230, 47, 79, 23, 88, 163, 253, 137, 199, 86, 232, 29, 21, 171, 116, 207, 49, 7, 159, 86, 247, 179, 219, 53, 209, 250, 28, 74, 91, 52, 159, 171, 132, 163, 10, 235, 59, 135, 70, 169, 255, 155, 51, 240, 209, 167, 18, 161, 49, 116, 117, 27, 23, 160, 116, 123, 114, 138, 190, 144, 209, 75, 19, 232, 166, 87, 195, 19, 51, 25, 136, 254, 35, 175, 198, 116, 224, 188, 28, 66, 83, 68, 193, 182, 48, 21, 224, 234, 88, 31, 191, 86, 21, 248, 97, 198, 180, 224, 53, 77, 57, 255, 238, 181, 148, 111, 111, 238, 130, 246, 89, 120, 61, 199, 149, 12, 237, 1, 209, 6, 59, 177, 11, 244, 4, 155, 29, 214, 254, 54, 74, 128, 92, 67, 116, 31, 242, 45, 189, 112, 155, 190, 195, 174, 215, 176, 65, 204, 132, 104, 52, 109, 49, 34, 38, 102, 49, 9, 49, 235, 19, 232, 7, 180, 49, 228, 133, 216, 110, 30, 6, 126, 65, 161, 67, 129, 251, 161, 40, 211, 79, 38, 68, 29, 170, 79, 27, 4, 4, 157, 179, 206, 251, 185, 136, 178, 113, 143, 67, 152, 225, 3, 119, 240, 98, 38, 248, 188, 86, 114, 190, 104, 116, 135, 196, 108, 108, 180, 25, 115, 27, 102, 24, 2, 228, 93, 127, 73, 118, 165, 55, 2, 189, 73, 13, 169, 55, 78, 19, 95, 60, 169, 14, 181, 14, 18, 172, 90, 123, 247, 209, 247, 204, 69, 137, 119, 173, 17, 78, 8, 100, 221, 77, 200, 249, 102, 176, 189, 163, 106, 251, 41, 192, 77, 131, 126, 18, 192, 202, 43, 208, 84, 245, 158, 181, 33, 224, 182, 155, 39, 213, 233, 86, 135, 163, 208, 85, 210, 171, 143, 33, 9, 218, 53, 237, 42, 24, 193, 213, 90, 253, 24, 171, 249, 252, 236, 254, 69, 42, 197, 11, 52, 227, 141, 84, 88, 240, 192, 6, 49, 39, 230, 236, 208, 177, 106, 248, 252, 208, 57, 190, 66, 249, 27, 39, 219, 26, 106, 162, 131, 92, 60, 205, 2, 227, 180, 118, 103, 230, 105, 32, 98, 89, 119, 105, 159, 183, 16, 221, 215, 22, 169, 156, 92, 60, 67, 21, 192, 241, 10, 89, 249, 15, 104, 106, 191, 212, 217, 185, 84, 86, 155, 82, 167, 68, 178, 171, 176, 123, 89, 46, 76, 42, 242, 244, 200, 207, 60, 0, 141, 186, 217, 250, 154, 103, 99, 203, 16, 166, 99, 115, 206, 207, 72, 24, 55, 19, 79, 144, 153, 167, 117, 211, 114, 158, 124, 91, 54, 149, 184, 79, 92, 176, 92, 8, 197, 107, 10, 247, 0, 14, 146, 124, 211, 121, 241, 194, 65, 212, 65, 39, 225, 4, 119, 51, 63, 231, 91, 251, 34, 163, 152, 228, 199, 66, 103, 180, 35, 36, 117, 138, 134, 150, 110, 194, 241, 62, 51, 73, 102, 75, 6, 224, 86, 182, 222, 54, 99, 30, 230, 168, 153, 252, 85, 158, 44, 49, 145, 102, 222, 150, 251, 129, 190, 11, 92, 19, 226, 227, 35, 113, 8, 115, 164, 198, 198, 151, 43, 135, 161, 26, 232, 40, 197, 60, 108, 28, 196, 237, 106, 196, 95, 6, 126, 206, 214, 17, 210, 212, 15, 84, 164, 43, 224, 23, 0, 56, 16, 57, 137, 109, 97, 217, 94, 54, 199, 248, 20, 141, 202, 252, 15, 0, 106, 183, 79, 183, 56, 170, 44, 71, 210, 122, 48, 40, 175, 162, 66, 239, 53, 159, 8, 206, 65, 80, 10, 47, 30, 14, 86, 254, 6, 124, 58, 3, 239, 188, 11, 201, 62, 144, 151, 117, 28, 163, 214, 169, 232, 132, 130, 214, 143, 169, 110, 67, 228, 219, 73, 74, 27, 29, 27, 126, 71, 222, 111, 135, 164, 7, 176, 86, 230, 2, 147, 15, 158, 92, 98, 96, 150, 16, 193, 87, 121, 199, 135, 233, 223, 10, 142, 43, 48, 43, 53, 218, 177, 27, 69, 74, 72, 125, 36, 22, 124, 171, 191, 127, 249, 228, 48, 221, 211, 211, 115, 170, 35, 91, 232, 138, 5, 35, 239, 231, 146, 176, 189, 184, 75, 249, 203, 37, 62, 120, 129, 174, 124, 153, 25, 110, 21, 97, 181, 83, 221, 125, 104, 163, 39, 100, 44, 123, 155, 177, 221, 95, 69, 250, 182, 235, 142, 222, 137, 226, 232, 11, 77, 227, 114, 56, 169, 54, 245, 33, 150, 214, 40, 74, 109, 75, 12, 63, 28, 147, 138, 115, 42, 70, 184, 43, 249, 72, 244, 159, 106, 122, 174, 229, 194, 22, 25, 143, 242, 253, 135, 216, 249, 128, 142, 18, 95, 87, 24, 202, 221, 134, 108, 14, 183, 59, 140, 227, 186, 34, 117, 119, 183, 226, 120, 228, 137, 212, 10, 137, 124, 62, 198, 125, 100, 72, 95, 142, 31, 237, 18, 206, 112, 85, 119, 248, 159, 68, 131, 127, 16, 94, 131, 71, 142, 153, 119, 34, 94, 218, 11, 220, 196, 127, 225, 148, 147, 132, 197, 173, 183, 92, 40, 177, 172, 213, 65, 5, 195, 196, 114, 189, 63, 227, 15, 102, 250, 151, 66, 116, 100, 221, 159, 60, 250, 129, 14, 250, 236, 223, 157, 68, 222, 63, 148, 195, 164, 102, 61, 165, 206, 68, 89, 150, 240, 248, 67, 55, 154, 150, 141, 167, 96, 183, 249, 222, 40, 140, 51, 86, 138, 184, 11, 226, 233, 88, 254, 193, 105, 249, 226, 36, 130, 228, 101, 212, 184, 0, 198, 17, 245, 33, 154, 205, 78, 197, 123, 183, 205, 225, 118, 156, 215, 7, 160, 167, 241, 247, 17, 247, 130, 144, 206, 168, 44, 182, 247, 201, 71, 179, 140, 187, 133, 75, 125, 234, 248, 228, 67, 231, 55, 56, 223, 7, 49, 56, 193, 102, 143, 158, 141, 62, 251, 38, 229, 184, 152, 37, 219, 101, 226, 202, 165, 196, 251, 118, 85, 154, 24, 145, 87, 211, 138, 128, 4, 128, 65, 187, 149, 215, 97, 184, 240, 12, 252, 90, 94, 127, 112, 194, 20, 219, 80, 37, 195, 133, 187, 9, 193, 49, 203, 124, 193, 177, 152, 209, 123, 215, 86, 74, 96, 105, 46, 93, 77, 86, 222, 39, 155, 147, 84, 211, 34, 127, 170, 123, 56, 185, 148, 46, 169, 109, 76, 251, 143, 159, 231, 190, 223, 138, 55, 152, 131, 159, 77, 18, 105, 189, 41, 35, 89, 118, 76, 92, 181, 206, 101, 124, 15, 68, 128, 47, 235, 47, 216, 101, 250, 155, 60, 221, 251, 139, 146, 241, 230, 242, 210, 233, 254, 21, 245, 206, 60, 253, 215, 192, 85, 123, 137, 55, 107, 247, 200, 152, 131, 14, 103, 184, 28, 204, 14, 155, 120, 227, 43, 241, 13, 78, 85, 6, 194, 46, 74, 160, 160, 118, 166, 161, 137, 217, 2, 5, 237, 89, 172, 18, 223, 21, 111, 246, 111, 17, 149, 135, 52, 181, 3, 119, 211, 33, 19, 118, 50, 180, 208, 172, 180, 245, 0, 37, 139, 39, 93, 235, 83, 192, 246, 118, 56, 174, 65, 136, 1, 212, 82, 25, 204, 99, 68, 239, 84, 244, 23, 110, 207, 73, 139, 128, 146, 122, 114, 61, 148, 236, 162, 185, 204, 191, 110, 122, 80, 27, 79, 163, 76, 29, 33, 131, 120, 74, 218, 185, 129, 150, 1, 232, 194, 249, 60, 243, 26, 169, 100, 50, 24, 132, 246, 201, 85, 124, 246, 18, 94, 106, 177, 196, 17, 167, 226, 54, 206, 135, 235, 96, 239, 74, 233, 48, 43, 23, 128, 112, 159, 163, 220, 210, 192, 89, 53, 197, 236, 187, 167, 77, 228, 142, 71, 175, 20, 156, 19, 42, 12, 198, 158, 147, 245, 23, 116, 156, 131, 208, 151, 126, 116, 255, 120, 205, 177, 218, 37, 74, 177, 203, 190, 144, 114, 137, 82, 252, 60, 37, 50, 134, 218, 165, 147, 77, 73, 95, 114, 150, 217, 165, 120, 179, 76, 142, 141, 66, 123, 4, 214, 9, 199, 23, 158, 236, 121, 145, 214, 244, 129, 82, 139, 106, 61, 238, 142, 77, 3, 249, 116, 205, 78, 200, 102, 171, 133, 135, 3, 244, 18, 119, 182, 9, 36, 254, 61, 100, 222, 132, 128, 53, 233, 105, 170, 12, 122, 250, 29, 179, 67, 14, 136, 242, 99, 208, 123, 168, 2, 139, 105, 114, 40, 238, 159, 3, 130, 13, 66, 93, 143, 246, 155, 106, 199, 181, 223, 161, 210, 89, 163, 180, 33, 137, 208, 146, 36, 41, 60, 77, 18, 131, 70, 216, 27, 117, 196, 22, 249, 48, 84, 114, 159, 124, 243, 173, 40, 250, 16, 253, 60, 120, 247, 206, 72, 76, 240, 62, 15, 243, 158, 248, 201, 178, 54, 72, 100, 105, 105, 131, 12, 59, 135, 188, 112, 95, 27, 244, 172, 160, 177, 151, 165, 117, 247, 62, 144, 173, 42, 213, 56, 132, 14, 133, 147, 244, 126, 217, 162, 10, 46, 47, 38, 82, 162, 22, 128, 181, 232, 134, 1, 110, 73, 30, 41, 243, 200, 22, 40, 206, 98, 68, 41, 2, 220, 2, 5, 19, 81, 146, 153, 222, 247, 166, 11, 123, 90, 5, 165, 151, 183, 44, 189, 61, 137, 136, 105, 93, 70, 204, 20, 219, 226, 227, 65, 193, 107, 185, 58, 42, 163, 116, 217, 231, 41, 38, 24, 71, 61, 181, 158, 238, 212, 121, 255, 186, 109, 126, 113, 92, 206, 240, 37, 180, 105, 163, 14, 96, 58, 111, 84, 233, 213, 250, 38, 139, 183, 34, 43, 111, 32, 85, 175, 45, 33, 32, 127, 76, 241, 207, 76, 42, 197, 159, 75, 30, 243, 116, 63, 142, 58, 163, 120, 118, 46, 207, 41, 67, 100, 142, 197, 244, 111, 214, 248, 135, 72, 167, 60, 200, 18, 217, 164, 49, 242, 56, 83, 186, 177, 127, 215, 75, 40, 10, 255, 168, 132, 9, 9, 84, 95, 105, 18, 203, 47, 193, 240, 145, 202, 9, 74, 255, 85, 192, 1, 198, 174, 119, 152, 17, 164, 171, 163, 146, 205, 131, 24, 254, 237, 197, 36, 189, 177, 185, 212, 246, 178, 143, 127, 246, 157, 157, 216, 156, 32, 41, 110, 142, 201, 179, 68, 178, 244, 65, 75, 6, 72, 24, 233, 120, 107, 191, 97, 176, 132, 199, 121, 250, 77, 59, 31, 10, 112, 63, 88, 244, 225, 174, 27, 100, 154, 179, 74, 156, 136, 11, 225, 118, 91, 11, 218, 228, 110, 202, 125, 127, 46, 250, 210, 176, 254, 177, 109, 255, 203, 107, 129, 255, 227, 133, 71, 93, 52, 119, 106, 67, 77, 30, 231, 114, 114, 39, 27, 179, 73, 196, 65, 72, 69, 208, 153, 65, 155, 6, 9, 240, 207, 115, 227, 73, 104, 210, 26, 75, 118, 198, 44, 193, 42, 92, 52, 141, 148, 133, 236, 10, 248, 158, 210, 175, 30, 146, 130, 148, 205, 145, 197, 213, 135, 13, 137, 38, 19, 86, 36, 102, 165, 202, 1, 124, 253, 127, 186, 142, 78, 6, 118, 250, 127, 56, 222, 40, 70, 165, 61, 140, 172, 97, 201, 215, 156, 190, 67, 17, 32, 97, 164, 170, 197, 216, 113, 200, 38, 34, 110, 216, 87, 60, 244, 212, 193, 169, 13, 104, 211, 233, 201, 255, 168, 50, 185, 27, 59, 163, 159, 23, 52, 249, 81, 225, 108, 213, 242, 49, 64, 129, 203, 233, 84, 161, 116, 52, 154, 110, 93, 128, 71, 25, 166, 56, 228, 173, 40, 157, 3, 185, 67, 86, 121, 140, 43, 16, 74, 235, 180, 88, 99, 184, 160, 100, 100, 227, 132, 252, 190, 62, 174, 72, 182, 118, 22, 89, 211, 221, 186, 6, 71, 16, 110, 237, 218, 74, 136, 42, 56, 13, 128, 184, 39, 117, 64, 236, 103, 131, 97, 76, 156, 165, 229, 130, 106, 229, 124, 194, 79, 130, 65, 103, 110, 128, 12, 69, 95, 249, 47, 97, 32, 197, 84, 51, 175, 230, 28, 107, 159, 214, 235, 142, 75, 65, 64, 121, 188, 10, 227, 99, 88, 215, 131, 113, 77, 253, 211, 222, 164, 126, 33, 116, 12, 36, 213, 37, 112, 228, 43, 126, 150, 86, 185, 159, 111, 53, 194, 115, 126, 255, 82, 44, 59, 178, 218, 69, 182, 185, 85, 4, 244, 140, 159, 250, 224, 169, 213, 43, 164, 218, 56, 106, 19, 154, 121, 56, 24, 12, 158, 142, 249, 13, 113, 15, 84, 135, 137, 54, 215, 158, 35, 112, 171, 0, 173, 111, 229, 252, 58, 236, 199, 44, 181, 102, 196, 160, 152, 17, 40, 195, 239, 191, 127, 115, 144, 144, 195, 85, 160, 183, 59, 93, 110, 13, 105, 179, 190, 201, 234, 21, 138, 255, 51, 153, 252, 235, 128, 85, 132, 169, 189, 58, 58, 141, 48, 112, 9, 62, 166, 8, 238, 190, 39, 8, 176, 138, 251, 206, 39, 64, 143, 61, 127, 127, 110, 252, 221, 236, 78, 40, 50, 210, 27, 155, 156, 186, 151, 72, 223, 248, 207, 251, 246, 108, 233, 166, 211, 109, 248, 123, 118, 168, 246, 199, 226, 60, 91, 196, 247, 63, 137, 37, 213, 160, 161, 123, 108, 36, 101, 13, 118, 157, 71, 53, 130, 107, 226, 219, 84, 22, 114, 239, 206, 22, 87, 246, 82, 92, 86, 33, 18, 102, 244, 84, 27, 6, 180, 26, 211, 217, 92, 194, 126, 44, 117, 137, 2, 240, 22, 118, 129, 178, 91, 133, 151, 163, 239, 255, 10, 46, 1, 185, 206, 69, 16, 147, 40, 84, 155, 65, 235, 251, 216, 91, 66, 195, 61, 235, 76, 14, 118, 189, 140, 141, 212, 60, 50, 7, 119, 67, 114, 233, 199, 79, 10, 24, 82, 189, 115, 181, 164, 78, 100, 248, 115, 11, 90, 54, 159, 28, 50, 14, 76, 99, 152, 99, 206, 137, 164, 52, 230, 140, 22, 80, 83, 220, 184, 251, 45, 68, 55, 208, 203, 153, 158, 206, 168, 74, 21, 13, 17, 114, 17, 68, 100, 159, 33, 38, 28, 199, 66, 160, 52, 239, 205, 122, 5, 179, 251, 168, 167, 130, 38, 200, 50, 58, 138, 7, 21, 227, 190, 57, 0, 48, 89, 102, 124, 186, 31, 222, 167, 115, 97, 240, 39, 86, 123, 41, 40, 4, 95, 78, 155, 182, 60, 228, 34, 172, 80, 36, 233, 189, 130, 178, 146, 77, 224, 196, 65, 88, 114, 146, 65, 87, 227, 239, 105, 104, 193, 4, 67, 234, 251, 160, 75, 54, 241, 157, 52, 213, 61, 157, 62, 168, 165, 246, 167, 72, 222, 98, 167, 101, 31, 106, 62, 9, 119, 157, 45, 232, 59, 71, 58, 190, 16, 238, 16, 116, 191, 194, 242, 98, 116, 14, 34, 42, 23, 35, 224, 62, 176, 9, 140, 118, 226, 226, 63, 189, 114, 210, 65, 83, 132, 201, 159, 142, 39, 98, 84, 106, 131, 88, 33, 190, 167, 232, 27, 125, 27, 34, 73, 166, 38, 213, 38, 220, 102, 198, 217, 253, 201, 179, 236, 250, 64, 247, 23, 177, 168, 232, 231, 45, 102, 229, 7, 98, 54, 197, 33, 205, 186, 198, 82, 19, 91, 201, 15, 214, 247, 182, 176, 121, 204, 30, 41, 25, 45, 68, 55, 34, 67, 33, 121, 62, 197, 180, 67, 247, 109, 250, 233, 147, 202, 242, 73, 170, 94, 220, 244, 103, 83, 185, 205, 234, 97, 6, 244, 13, 75, 35, 48, 112, 136, 0, 186, 158, 45, 136, 48, 31, 194, 128, 128, 141, 214, 227, 204, 97, 182, 63, 36, 16, 130, 55, 111, 24, 73, 36, 235, 84, 33, 189, 10, 88, 210, 2, 131, 178, 165, 147, 213, 126, 207, 104, 130, 68, 148, 200, 80, 158, 165, 98, 93, 221, 171, 96, 249, 198, 101, 244, 233, 19, 95, 190, 191, 27, 233, 78, 3, 8, 131, 70, 150, 211, 167, 155, 151, 0, 235, 197, 149, 158, 25, 25, 92, 143, 36, 39, 95, 86, 32, 1, 239, 203, 27, 118, 197, 154, 146, 68, 87, 110, 108, 87, 8, 87, 126, 153, 4, 195, 58, 144, 208, 233, 170, 25, 192, 209, 204, 206, 136, 147, 230, 9, 97, 212, 187, 204, 179, 135, 209, 19, 129, 224, 197, 242, 192, 168, 1, 98, 204, 180, 104, 244, 135, 6, 19, 213, 93, 132, 140, 224, 192, 59, 13, 100, 175, 46, 145, 225, 145, 4, 129, 203, 64, 98, 19, 229, 224, 177, 60, 70, 45, 128, 225, 154, 55, 106, 69, 157, 75, 49, 123, 170, 7, 13, 104, 133, 220, 30, 43, 216, 232, 223, 163, 148, 51, 7, 219, 168, 146, 98, 163, 220, 241, 150, 222, 99, 191, 105, 46, 30, 178, 172, 74, 103, 177, 227, 52, 186, 163, 92, 253, 130, 102, 87, 33, 72, 218, 105, 184, 187, 170, 169, 99, 120, 237, 187, 194, 97, 219, 92, 91, 67, 147, 214, 53, 246, 227, 211, 51, 107, 12, 117, 244, 131, 216, 106, 12, 118, 229, 142, 47, 214, 91, 230, 150, 143, 243, 79, 223, 79, 92, 129, 73, 214, 244, 118, 36, 65, 186, 192, 29, 53, 131, 222, 193, 52, 34, 152, 182, 10, 223, 34, 56, 245, 42, 129, 166, 101, 58, 31, 73, 251, 52, 21, 5, 208, 196, 55, 225, 236, 52, 190, 2, 44, 200, 106, 126, 126, 163, 204, 63, 126, 225, 183, 57, 133, 211, 121, 205, 52, 98, 187, 4, 195, 59, 110, 216, 201, 22, 22, 144, 254, 26, 230, 229, 103, 249, 197, 238, 56, 9, 109, 229, 252, 103, 88, 52, 234, 159, 169, 250, 203, 25, 189, 68, 191, 175, 91, 231, 52, 139, 31, 76, 158, 142, 76, 69, 11, 14, 199, 168, 217, 195, 109, 119, 158, 41, 37, 3, 234, 16, 118, 18, 161, 110, 240, 163, 44, 78, 89, 9, 235, 195, 39, 2, 11, 174, 40, 128, 252, 246, 61, 25, 44, 2, 168, 239, 118, 11, 16, 173, 50, 44, 139, 93, 65, 183, 1, 159, 166, 129, 200, 169, 243, 149, 254, 144, 16, 68, 201, 242, 196, 179, 240, 162, 136, 189, 227, 142, 147, 93, 146, 61, 78, 169, 158, 248, 82, 140, 180, 113, 103, 12, 24, 27, 195, 59, 128, 56, 234, 116, 126, 37, 128, 21, 85, 98, 25, 113, 133, 176, 44, 15, 236, 181, 112, 35, 74, 144, 72, 211, 31, 178, 166, 121, 201, 102, 82, 107, 108, 1, 158, 163, 245, 231, 234, 200, 133, 32, 126, 182, 202, 118, 239, 58, 69, 227, 30, 79, 176, 19, 213, 89, 93, 73, 103, 53, 25, 80, 254, 54, 173, 102, 163, 43, 15, 20, 233, 239, 199, 115, 192, 112, 120, 70, 59, 244, 248, 230, 29, 8, 142, 156, 131, 48, 22, 203, 107, 228, 248, 40, 27, 56, 87, 22, 79, 111, 83, 157, 138, 93, 255, 215, 49, 152, 32, 14, 85, 208, 8, 68, 89, 111, 237, 153, 31, 226, 233, 163, 214, 234, 239, 137, 202, 83, 223, 117, 37, 173, 215, 173, 66, 242, 190, 174, 24, 95, 21, 0, 36, 157, 34, 18, 76, 188, 125, 138, 11, 162, 163, 4, 117, 7, 79, 227, 0, 223, 48, 128, 172, 130, 189, 167, 203, 8, 178, 72, 240, 152, 172, 244, 209, 200, 173, 40, 187, 224, 26, 86, 160, 165, 210, 159, 237, 179, 8, 209, 136, 78, 102, 217, 182, 171, 17, 224, 41, 169, 196, 236, 241, 128, 180, 49, 249, 229, 136, 117, 230, 59, 36, 81, 243, 128, 100, 51, 64, 115, 206, 168, 152, 203, 163, 238, 51, 55, 27, 232, 0, 205, 27, 50, 255, 11, 236, 146, 154, 119, 95, 178, 98, 85, 67, 150, 207, 248, 189, 55, 70, 121, 190, 218, 114, 66, 64, 4, 132, 193, 136, 205, 172, 147, 139, 28, 134, 251, 28, 28, 32, 25, 174, 203, 14, 251, 32, 112, 194, 170, 85, 150, 220, 137, 92, 5, 153, 224, 170, 107, 15, 83, 127, 139, 179, 149, 138, 255, 98, 77, 187, 53, 176, 123, 14, 56, 154, 17, 207, 47, 188, 116, 158, 126, 188, 183, 69, 40, 50, 22, 197, 254, 149, 230, 168, 167, 130, 106, 173, 202, 44, 34, 226, 58, 47, 94, 147, 48, 78, 160, 203, 203, 105, 24, 164, 168, 140, 48, 189, 79, 98, 197, 158, 85, 108, 135, 154, 64, 32, 116, 31, 148, 149, 144, 50, 200, 174, 134, 102, 88, 42, 35, 121, 89, 203, 65, 86, 77, 174, 165, 123, 218, 210, 61, 52, 11, 185, 105, 190, 132, 63, 151, 126, 39, 247, 35, 61, 114, 62, 116, 91, 98, 190, 86, 183, 160, 163, 137, 64, 112, 138, 30, 104, 159, 108, 149, 146, 245, 222, 32, 120, 230, 146, 215, 20, 26, 185, 234, 142, 253, 95, 103, 163, 201, 200, 174, 161, 170, 144, 230, 101, 142, 20, 51, 80, 140, 152, 184, 196, 235, 243, 85, 18, 112, 239, 28, 217, 222, 105, 134, 66, 58, 203, 166, 146, 86, 18, 10, 29, 180, 45, 49, 42, 196, 163, 15, 191, 73, 165, 66, 186, 126, 176, 116, 170, 210, 112, 159, 168, 91, 3, 5, 136, 40, 191, 106, 217, 208, 90, 232, 77, 183, 49, 181, 59, 85, 29, 116, 104, 133, 226, 56, 223, 38, 145, 196, 250, 34, 248, 135, 136, 177, 195, 159, 160, 185, 37, 181, 5, 243, 14, 220, 113, 255, 235, 21, 68, 153, 13, 63, 20, 209, 11, 254, 245, 60, 227, 76, 191, 249, 26, 98, 102, 171, 114, 237, 182, 58, 139, 100, 107, 106, 172, 36, 44, 76, 252, 103, 157, 234, 186, 232, 73, 172, 180, 118, 134, 76, 58, 29, 5, 208, 238, 116, 180, 122, 13, 165, 117, 144, 40, 237, 190, 83, 52, 53, 144, 215, 168, 186, 207, 31, 109, 133, 236, 52, 217, 135, 115, 19, 191, 56, 212, 85, 76, 191, 217, 8, 2, 109, 253, 10, 34, 6, 154, 206, 3, 27, 82, 114, 248, 145, 201, 197, 37, 125, 206, 32, 15, 148, 33, 155, 239, 124, 103, 186, 68, 155, 56, 245, 164, 162, 20, 110, 66, 222, 100, 246, 53, 176, 39, 111, 223, 9, 146, 191, 181, 172, 24, 2, 120, 101, 225, 138, 118, 73, 42, 188, 98, 119, 229, 20, 24, 60, 241, 76, 117, 51, 185, 74, 189, 130, 198, 197, 24, 207, 7, 47, 114, 7, 41, 79, 142, 102, 61, 141, 89, 124, 6, 130, 236, 63, 84, 109, 74, 77, 87, 187, 136, 165, 53, 77, 115, 57, 154, 148, 238, 35, 96, 11, 59, 141, 75, 232, 59, 164, 223, 188, 27, 170, 142, 35, 12, 178, 176, 159, 5, 44, 21, 195, 30, 124, 241, 75, 176, 48, 162, 151, 10, 94, 154, 130, 205, 85, 68, 23, 255, 8, 115, 252, 43, 77, 182, 198, 14, 14, 76, 88, 89, 177, 110, 26, 129, 45, 152, 0, 218, 174, 58, 48, 168, 214, 85, 114, 205, 234, 44, 254, 85, 117, 120, 92, 32, 101, 113, 34, 96, 118, 53, 111, 191, 173, 78, 146, 65, 148, 83, 44, 15, 124, 54, 207, 142, 200, 42, 253, 66, 197, 20, 43, 245, 209, 50, 183, 218, 203, 178, 4, 146, 87, 149, 58, 69, 38, 4, 134, 15, 198, 241, 98, 68, 133, 54, 137, 79, 36, 246, 162, 97, 99, 173, 141, 20, 219, 231, 229, 114, 58, 120, 252, 212, 146, 144, 93, 59, 116, 96, 210, 193, 220, 241, 43, 212, 4, 234, 31, 141, 69, 30, 207, 5, 4, 240, 83, 255, 148, 5, 141, 241, 241, 21, 45, 133, 40, 60, 21, 8, 117, 186, 222, 108, 4, 220, 161, 122, 171, 7, 248, 206, 74, 179, 131, 72, 5, 202, 138, 26, 126, 88, 137, 40, 233, 184, 38, 37, 36, 21, 47, 126, 28, 144, 169, 188, 43, 153, 2, 49, 35, 35, 124, 87, 239, 75, 17, 148, 206, 78, 76, 238, 70, 103, 115, 98, 250, 82, 15, 50, 136, 71, 145, 135, 240, 186, 228, 16, 253, 88, 33, 119, 228, 90, 202, 6, 188, 109, 149, 20, 118, 33, 41, 21, 202, 124, 74, 54, 7, 70, 249, 73, 35, 131, 197, 79, 134, 183, 126, 21, 237, 223, 204, 169, 227, 173, 4, 79, 9, 219, 22, 67, 84, 84, 170, 35, 62, 231, 193, 188, 183, 180, 226, 118, 231, 57, 116, 116, 216, 164, 164, 239, 255, 177, 147, 83, 242, 64, 151, 63, 64, 42, 232, 137, 236, 171, 108, 94, 108, 179, 172, 87, 110, 76, 161, 65, 142, 73, 243, 119, 38, 175, 15, 46, 89, 127, 166, 43, 53, 247, 12, 98, 250, 108, 203, 183, 85, 200, 188, 60, 66, 232, 174, 160, 52, 54, 128, 146, 154, 17, 36, 196, 117, 47, 15, 71, 231, 112, 208, 27, 43, 25, 61, 123, 69, 131, 183, 20, 147, 82, 47, 160, 12, 16, 12, 229, 183, 75, 210, 50, 206, 242, 197, 113, 48, 154, 86, 19, 178, 42, 60, 145, 208, 81, 146, 228, 137, 190, 17, 67, 34, 179, 78, 109, 67, 2, 114, 177, 232, 249, 72, 182, 106, 60, 209, 164, 179, 144, 223, 196, 190, 116, 37, 64, 80, 96, 129, 97, 254, 179, 23, 187, 122, 11, 191, 0, 67, 97, 231, 55, 57, 32, 104, 152, 105, 66, 102, 171, 143, 67, 238, 242, 229, 165, 42, 65, 40, 14, 42, 137, 78, 97, 22, 231, 11, 26, 148, 132, 107, 122, 107, 105, 82, 189, 191, 103, 234, 137, 91, 84, 99, 125, 79, 181, 97, 111, 81, 227, 22, 118, 176, 25, 67, 152, 130, 81, 26, 58, 187, 61, 56, 110, 252, 83, 113, 65, 167, 104, 94, 37, 149, 20, 164, 146, 101, 19, 136, 15, 168, 12, 209, 4, 227, 234, 81, 232, 109, 83, 7, 41, 238, 75, 37, 222, 71, 9, 190, 72, 72, 241, 202, 34, 208, 119, 52, 61, 205, 109, 59, 57, 42, 28, 76, 28, 3, 231, 113, 244, 17, 11, 38, 124, 178, 144, 245, 143, 110, 149, 126, 55, 145, 227, 19, 58, 130, 118, 116, 148, 132, 9, 66, 247, 255, 232, 217, 88, 171, 204, 26, 183, 12, 23, 104, 69, 27, 208, 252, 252, 77, 23, 229, 154, 143, 154, 131, 70, 200, 27, 141, 204, 242, 149, 119, 174, 74, 100, 15, 50, 101, 180, 236, 26, 167, 23, 23, 212, 172, 44, 238, 49, 122, 23, 166, 177, 90, 93, 221, 148, 248, 146, 129, 144, 163, 84, 30, 115, 101, 15, 193, 218, 112, 7, 70, 13, 93, 223, 110, 107, 75, 210, 25, 220, 62, 133, 119, 228, 117, 48, 145, 228, 156, 36, 254, 251, 86, 232, 170, 160, 3, 197, 173, 209, 76, 219, 193, 145, 83, 27, 82, 41, 55, 79, 80, 159, 33, 100, 213, 241, 28, 82, 184, 102, 107, 194, 146, 125, 252, 81, 189, 96, 143, 101, 59, 92, 6, 128, 93, 132, 130, 97, 247, 13, 250, 72, 176, 148, 219, 96, 249, 226, 0, 244, 127, 142, 154, 152, 20, 143, 86, 219, 228, 227, 123, 112, 147, 162, 150, 101, 107, 227, 234, 203, 62, 154, 168, 232, 104, 181, 190, 60, 223, 240, 212, 237, 251, 87, 102, 122, 20, 185, 234, 0, 105, 217, 171, 34, 42, 216, 188, 70, 231, 52, 40, 240, 91, 158, 149, 207, 32, 211, 174, 142, 18, 69, 31, 120, 90, 127, 59, 243, 111, 216, 217, 142, 121, 175, 25, 74, 204, 146, 184, 71, 228, 122, 10, 111, 27, 109, 157, 130, 122, 14, 164, 110, 52, 215, 21, 6, 73, 55, 66, 71, 33, 163, 11, 146, 41, 211, 35, 80, 45, 24, 110, 101, 57, 233, 230, 117, 2, 38, 1, 134, 219, 121, 88, 191, 43, 248, 72, 80, 250, 159, 90, 133, 95, 41, 33, 132, 180, 109, 76, 145, 59, 198, 180, 193, 207, 44, 96, 128, 238, 40, 145, 38, 74, 19, 204, 203, 198, 50, 208, 20, 77, 228, 184, 170, 85, 135, 22, 129, 44, 188, 134, 244, 145, 188, 156, 3, 9, 187, 28, 243, 206, 83, 22, 135, 44, 199, 83, 122, 93, 100, 54, 102, 99, 161, 118, 0, 224, 178, 161, 157, 197, 54, 213, 14, 181, 36, 247, 135, 248, 207, 193, 67, 170, 198, 189, 66, 169, 198, 93, 65, 5, 112, 128, 230, 224, 18, 103, 164, 3, 217, 173, 148, 155, 163, 106, 72, 62, 136, 99, 228, 120, 217, 114, 122, 111, 16, 121, 32, 103, 196, 218, 5, 9, 156, 88, 185, 117, 41, 159, 132, 82, 69, 39, 48, 8, 77, 112, 243, 169, 170, 251, 210, 37, 62, 88, 28, 145, 19, 248, 33, 225, 83, 166, 235, 99, 45, 101, 171, 59, 157, 184, 89, 120, 230, 67, 31, 52, 243, 68, 197, 153, 28, 221, 162, 212, 198, 125, 155, 132, 3, 65, 74, 3, 125, 251, 175, 226, 86, 97, 225, 14, 49, 223, 130, 186, 194, 228, 187, 26, 128, 124, 156, 60, 222, 17, 212, 212, 36, 250, 221, 116, 176, 9, 10, 108, 14, 182, 250, 213, 100, 1, 227, 103, 42, 72, 154, 76, 71, 80, 217, 121, 185, 120, 155, 244, 59, 9, 25, 188, 117, 219, 88, 120, 116, 151, 171, 194, 149, 168, 111, 204, 178, 177, 61, 149, 140, 79, 94, 146, 156, 165, 12, 11, 162, 12, 220, 235, 174, 72, 24, 21, 180, 168, 148, 6, 164, 98, 232, 130, 170, 67, 42, 95, 193, 75, 139, 245, 94, 21, 129, 183, 171, 178, 17, 14, 173, 44, 2, 143, 132, 64, 192, 62, 60, 104, 110, 35, 114, 253, 180, 53, 118, 47, 156, 2, 128, 79, 254, 138, 163, 82, 215, 96, 237, 241, 200, 228, 252, 65, 132, 115, 165, 247, 147, 138, 126, 44, 199, 102, 178, 58, 249, 91, 255, 188, 42, 100, 130, 73, 94, 172, 243, 104, 33, 94, 94, 19, 215, 41, 121, 26, 165, 162, 193, 90, 37, 188, 85, 109, 199, 33, 63, 242, 16, 154, 205, 52, 254, 220, 171, 198, 149, 107, 6, 130, 36, 9, 223, 230, 79, 148, 5, 252, 31, 136, 144, 94, 136, 237, 15, 201, 170, 113, 167, 134, 241, 116, 19, 86, 34, 237, 102, 1, 222, 200, 115, 190, 249, 227, 159, 131, 11, 45, 91, 233, 27, 149, 97, 92, 14, 52, 38, 14, 142, 122, 245, 44, 190, 210, 144, 159, 65, 134, 129, 233, 225, 48, 120, 230, 58, 202, 224, 111, 12, 159, 20, 23, 145, 132, 153, 253, 142, 219, 74, 21, 131, 244, 208, 148, 180, 105, 41, 146, 231, 119, 113, 48, 44, 24, 177, 22, 162, 224, 73, 153, 200, 50, 223, 58, 181, 232, 124, 10, 217, 181, 51, 106, 255, 95, 151, 84, 47, 97, 231, 251, 224, 45, 13, 220, 73, 114, 52, 0, 85, 96, 157, 132, 14, 85, 91, 48, 53, 186, 203, 19, 237, 114, 124, 96, 138, 52, 41, 142, 180, 153, 124, 52, 97, 84, 52, 81, 89, 105, 162, 121, 247, 234, 229, 187, 229, 57, 176, 18, 18, 124, 185, 41, 140, 229, 169, 39, 105, 145, 54, 172, 149, 100, 31, 4, 243, 4, 176, 192, 72, 239, 154, 31, 133, 178, 216, 252, 167, 189, 162, 231, 216, 157, 206, 36, 82, 143, 26, 193, 124, 213, 211, 41, 125, 166, 134, 174, 97, 59, 125, 55, 198, 36, 103, 232, 222, 144, 237, 249, 17, 63, 124, 119, 196, 66, 26, 116, 218, 97, 178, 134, 125, 168, 108, 255, 248, 23, 164, 82, 40, 89, 233, 186, 214, 59, 49, 21, 151, 92, 57, 153, 94, 210, 161, 97, 81, 66, 226, 170, 56, 171, 99, 80, 43, 33, 8, 21, 31, 21, 157, 95, 156, 141, 133, 184, 163, 47, 147, 158, 31, 33, 146, 123, 173, 57, 178, 145, 35, 207, 19, 216, 172, 236, 233, 175, 96, 229, 141, 241, 93, 17, 121, 56, 101, 166, 195, 184, 42, 228, 214, 173, 209, 104, 254, 223, 130, 108, 226, 135, 209, 180, 64, 101, 108, 191, 189, 113, 210, 170, 55, 24, 10, 116, 123, 222, 180, 190, 148, 207, 132, 177, 72, 87, 90, 179, 11, 108, 85, 100, 148, 0, 178, 125, 42, 145, 225, 134, 109, 2, 91, 246, 117, 156, 81, 72, 93, 120, 215, 95, 237, 3, 22, 127, 27, 236, 38, 53, 160, 154, 114, 221, 0, 36, 75, 119, 192, 191, 6, 12, 191, 32, 183, 104, 53, 156, 67, 27, 39, 207, 252, 119, 208, 233, 82, 208, 3, 22, 116, 46, 222, 142, 35, 230, 212, 209, 249, 172, 32, 154, 140, 161, 104, 98, 220, 73, 221, 190, 131, 39, 54, 3, 47, 151, 103, 44, 5, 83, 254, 96, 83, 17, 196, 88, 39, 65, 10, 166, 153, 242, 209, 43, 215, 112, 2, 171, 252, 88, 144, 152, 81, 90, 180, 163, 176, 87, 100, 129, 189, 133, 27, 204, 107, 82, 246, 102, 168, 235, 160, 4, 32, 128, 13, 57, 101, 155, 96, 89, 233, 196, 88, 245, 97, 210, 154, 69, 12, 162, 228, 7, 18, 204, 168, 225, 108, 120, 226, 13, 18, 189, 167, 98, 25, 122, 156, 233, 253, 212, 232, 160, 68, 206, 102, 28, 192, 220, 228, 201, 41, 137, 12, 209, 209, 142, 20, 159, 183, 132, 251, 168, 226, 247, 195, 84, 196, 211, 238, 97, 130, 61, 95, 245, 77, 100, 183, 223, 177, 5, 143, 111, 229, 133, 50, 243, 23, 86, 145, 98, 73, 82, 198, 63, 252, 84, 250, 246, 111, 105, 219, 72, 220, 114, 166, 216, 54, 175, 93, 69, 55, 40, 106, 165, 215, 150, 140, 82, 86, 172, 55, 111, 191, 253, 154, 183, 160, 137, 223, 122, 238, 144, 107, 182, 19, 213, 42, 133, 218, 114, 122, 125, 35, 113, 67, 34, 100, 149, 165, 6, 86, 184, 185, 89, 21, 145, 161, 20, 249, 235, 19, 163, 222, 95, 206, 119, 114, 119, 178, 215, 224, 208, 93, 194, 231, 186, 212, 158, 255, 56, 11, 132, 159, 26, 184, 227, 12, 131, 125, 20, 82, 210, 26, 178, 179, 113, 48, 78, 18, 31, 175, 155, 216, 122, 129, 224, 198, 24, 211, 132, 100, 66, 136, 216, 212, 101, 87, 49, 226, 50, 111, 19, 70, 226, 126, 36, 3, 69, 250, 195, 158, 51, 70, 248, 76, 50, 26, 148, 222, 18, 47, 48, 56, 209, 131, 25, 7, 22, 56, 196, 154, 108, 161, 122, 94, 28, 54, 35, 119, 129, 155, 155, 150, 16, 31, 244, 203, 47, 176, 213, 14, 75, 172, 59, 254, 208, 4, 111, 50, 53, 165, 155, 169, 198, 242, 232, 111, 248, 142, 37, 146, 66, 101, 110, 179, 220, 101, 52, 5, 208, 26, 98, 38, 122, 216, 87, 166, 209, 17, 248, 64, 173, 2, 108, 219, 110, 137, 101, 183, 96, 89, 14, 158, 164, 245, 183, 82, 225, 95, 39, 117, 201, 187, 148, 24, 200, 63, 170, 226, 231, 190, 16, 230, 115, 222, 124, 224, 60, 76, 2, 153, 231, 118, 113, 109, 251, 172, 2, 63, 115, 112, 100, 240, 65, 82, 138, 78, 73, 235, 144, 16, 163, 11, 144, 97, 147, 22, 12, 54, 217, 90, 117, 109, 190, 174, 208, 53, 170, 136, 0, 24, 198, 83, 182, 216, 33, 49, 161, 96, 141, 75, 128, 131, 118, 146, 127, 128, 39, 85, 116, 128, 92, 115, 107, 171, 250, 115, 165, 146, 99, 219, 185, 179, 27, 152, 188, 236, 126, 81, 169, 248, 7, 166, 57, 81, 83, 94, 58, 5, 119, 135, 76, 154, 53, 57, 33, 166, 23, 80, 176, 221, 203, 185, 187, 46, 244, 64, 11, 121, 93, 39, 205, 79, 169, 25, 74, 132, 162, 142, 129, 88, 62, 7, 254, 8, 170, 206, 87, 14, 247, 67, 200, 1, 233, 56, 155, 230, 135, 157, 229, 39, 228, 0, 230, 235, 222, 42, 136, 31, 131, 255, 183, 81, 168, 83, 120, 107, 66, 46, 89, 90, 0, 231, 39, 162, 164, 119, 249, 142, 137, 226, 17, 99, 240, 26, 108, 71, 232, 243, 233, 180, 134, 72, 55, 13, 188, 71, 176, 3, 9, 134, 13, 218, 62, 123, 213, 21, 71, 48, 80, 125, 25, 199, 202, 165, 203, 7, 244, 238, 172, 181, 120, 204, 245, 12, 245, 170, 6, 26, 85, 66, 221, 59, 158, 210, 128, 62, 78, 167, 9, 144, 76, 141, 109, 199, 188, 46, 73, 222, 60, 87, 125, 187, 203, 243, 55, 142, 28, 12, 90, 91, 209, 47, 246, 0, 218, 241, 37, 110, 249, 109, 166, 19, 67, 36, 138, 122, 221, 4, 124, 169, 154, 190, 119, 1, 221, 89, 112, 217, 24, 202, 203, 41, 26, 154, 189, 38, 64, 12, 135, 195, 83, 198, 159, 143, 83, 32, 100, 54, 3, 140, 140, 168, 246, 120, 162, 185, 153, 159, 97, 98, 5, 5, 85, 104, 47, 55, 178, 43, 245, 184, 222, 155, 66, 233, 95, 3, 189, 191, 140, 233, 136, 42, 36, 230, 61, 215, 166, 157, 191, 180, 63, 254, 30, 193, 141, 191, 19, 173, 208, 66, 7, 94, 20, 201, 218, 232, 17, 198, 167, 52, 131, 37, 88, 39, 44, 102, 22, 71, 236, 214, 191, 188, 59, 30, 202, 123, 235, 228, 96, 103, 16, 134, 161, 244, 225, 129, 52, 228, 80, 45, 32, 28, 128, 34, 151, 129, 223, 51, 251, 79, 36, 16, 115, 243, 2, 219, 189, 142, 187, 237, 197, 155, 161, 128, 55, 248, 175, 253, 243, 123, 168, 145, 94, 121, 118, 130, 183, 187, 56, 68, 19, 53, 169, 101, 180, 190, 132, 179, 0, 244, 165, 181, 249, 166, 133, 11, 244, 86, 84, 108, 146, 68, 133, 25, 58, 157, 234, 195, 45, 186, 239, 228, 88, 148, 82, 101, 215, 212, 166, 167, 73, 125, 218, 54, 171, 28, 69, 168, 54, 68, 212, 58, 87, 37, 182, 222, 252, 191, 68, 61, 17, 147, 225, 10, 34, 242, 120, 11, 210, 37, 249, 229, 39, 253, 21, 135, 177, 178, 102, 64, 136, 112, 44, 119, 178, 30, 236, 122, 92, 127, 117, 19, 201, 136, 43, 132, 93, 175, 30, 81, 242, 46, 78, 43, 192, 7, 174, 88, 139, 84, 63, 151, 178, 91, 30, 88, 186, 40, 32, 190, 10, 183, 29, 218, 101, 195, 219, 75, 154, 219, 140, 191, 50, 176, 50, 27, 191, 187, 4, 5, 73, 168, 83, 239, 242, 14, 99, 106, 12, 12, 134, 231, 127, 138, 20, 89, 240, 244, 151, 48, 201, 60, 43, 148, 108, 248, 55, 217, 4, 171, 8, 34, 18, 172, 43, 73, 126, 17, 227, 131, 246, 47, 128, 78, 229, 48, 208, 251, 210, 70, 98, 175, 138, 0, 65, 169, 6, 141, 125, 87, 35, 97, 44, 118, 3, 169, 231, 245, 168, 74, 45, 100, 174, 10, 221, 170, 130, 107, 87, 28, 151, 109, 137, 43, 92, 188, 66, 221, 69, 100, 130, 133, 9, 229, 46, 66, 41, 79, 187, 33, 202, 28, 208, 200, 23, 28, 204, 105, 88, 57, 113, 37, 23, 90, 36, 149, 145, 201, 220, 212, 142, 169, 109, 166, 25, 45, 251, 5, 235, 247, 195, 72, 86, 90, 10, 68, 12, 49, 60, 174, 137, 29, 92, 62, 107, 199, 219, 117, 216, 187, 97, 197, 245, 109, 202, 107, 87, 169, 140, 17, 83, 51, 254, 85, 2, 104, 92, 185, 51, 164, 213, 241, 169, 213, 10, 74, 177, 17, 140, 227, 147, 149, 200, 48, 128, 84, 227, 89, 95, 41, 207, 113, 153, 63, 142, 75, 170, 222, 218, 128, 245, 152, 212, 6, 119, 25, 187, 4, 46, 179, 205, 212, 150, 48, 70, 191, 2, 154, 39, 93, 168, 111, 51, 230, 234, 170, 131, 237, 62, 178, 173, 93, 155, 220, 138, 174, 213, 2, 245, 93, 214, 241, 3, 198, 130, 2, 120, 42, 16, 140, 247, 118, 170, 68, 140, 182, 62, 98, 98, 108, 53, 213, 228, 44, 144, 218, 169, 128, 22, 103, 249, 171, 4, 93, 236, 235, 7, 254, 135, 116, 51, 2, 173, 36, 11, 87, 46, 212, 57, 254, 27, 236, 132, 149, 85, 175, 223, 9, 167, 242, 214, 174, 145, 83, 76, 182, 152, 182, 111, 179, 103, 10, 140, 39, 203, 70, 15, 97, 146, 248, 58, 164, 232, 86, 174, 75, 89, 239, 66, 181, 95, 240, 76, 77, 152, 86, 121, 168, 241, 178, 191, 182, 66, 106, 154, 161, 249, 204, 35, 47, 244, 130, 135, 184, 64, 219, 241, 231, 142, 113, 154, 167, 9, 249, 84, 35, 134, 36, 61, 101, 102, 120, 134, 213, 118, 69, 41, 252, 30, 10, 59, 73, 141, 59, 31, 189, 100, 239, 105, 5, 236, 235, 85, 239, 154, 67, 207, 175, 164, 163, 86, 7, 104, 52, 62, 93, 215, 117, 220, 5, 150, 21, 28, 67, 99, 112, 2, 183, 90, 57, 142, 10, 135, 104, 184, 42, 43, 213, 54, 56, 49, 86, 251, 20, 127, 161, 230, 91, 166, 20, 121, 107, 62, 117, 187, 162, 31, 107, 165, 203, 205, 231, 161, 250, 21, 250, 155, 35, 155, 235, 96, 124, 239, 14, 126, 174, 195, 181, 127, 203, 96, 148, 156, 93, 94, 132, 181, 233, 33, 233, 176, 227, 172, 176, 12, 66, 228, 150, 254, 247, 5, 181, 7, 236, 44, 239, 109, 237, 235, 176, 102, 181, 207, 44, 180, 43, 67, 212, 186, 2, 8, 75, 131, 240, 101, 99, 226, 245, 39, 36, 57, 112, 207, 231, 81, 150, 179, 155, 110, 110, 35, 191, 183, 83, 77, 28, 37, 53, 188, 91, 157, 191, 39, 185, 43, 1, 234, 162, 10, 76, 243, 17, 245, 250, 36, 159, 167, 94, 68, 106, 85, 67, 166, 200, 151, 199, 10, 175, 36, 116, 98, 82, 196, 48, 103, 39, 222, 22, 169, 26, 147, 154, 44, 23, 149, 18, 65, 120, 22, 158, 6, 85, 93, 147, 184, 224, 98, 215, 81, 223, 222, 154, 253, 69, 115, 234, 142, 139, 248, 4, 13, 148, 200, 91, 208, 187, 218, 242, 198, 164, 69, 183, 10, 99, 155, 143, 146, 81, 94, 136, 76, 249, 15, 253, 155, 142, 27, 246, 150, 179, 120, 227, 167, 180, 226, 96, 203, 72, 126, 76, 88, 153, 248, 194, 252, 34, 248, 158, 173, 99, 73, 212, 108, 222, 66, 168, 254, 39, 225, 84, 40, 192, 66, 10, 250, 156, 89, 193, 160, 56, 12, 94, 63, 224, 174, 108, 143, 74, 103, 243, 212, 99, 25, 45, 180, 42, 146, 204, 239, 133, 110, 83, 230, 174, 141, 87, 234, 240, 96, 175, 253, 221, 225, 74, 179, 187, 218, 87, 76, 196, 175, 179, 50, 74, 165, 24, 16, 111, 101, 137, 210, 10, 127, 35, 211, 224, 183, 86, 185, 211, 110, 72, 237, 177, 226, 55, 48, 153, 36, 173, 146, 85, 13, 192, 85, 72, 143, 1, 237, 99, 83, 253, 4, 241, 41, 163, 89, 134, 97, 172, 198, 172, 42, 44, 95, 154, 80, 78, 78, 56, 174, 169, 168, 133, 126, 39, 118, 121, 38, 223, 38, 78, 5, 21, 239, 135, 66, 251, 109, 234, 254, 162, 5, 43, 146, 53, 89, 166, 165, 51, 254, 190, 66, 133, 231, 68, 23, 250, 45, 167, 41, 222, 248, 60, 239, 239, 59, 244, 103, 151, 95, 87, 108, 244, 189, 22, 108, 84, 192, 33, 61, 217, 60, 230, 232, 235, 81, 173, 191, 65, 3, 61, 30, 246, 201, 187, 190, 29, 102, 0, 211, 193, 103, 134, 1, 133, 53, 246, 124, 250, 142, 177, 219, 244, 23, 164, 4, 162, 152, 212, 173, 146, 109, 224, 6, 23, 225, 32, 95, 180, 158, 164, 253, 82, 156, 102, 31, 193, 17, 7, 98, 184, 72, 157, 39, 48, 215, 220, 138, 142, 138, 131, 158, 198, 199, 210, 124, 29, 99, 81, 6, 72, 194, 72, 121, 220, 242, 176, 5, 96, 246, 137, 112, 17, 43, 70, 93, 85, 166, 70, 131, 18, 234, 127, 122, 16, 110, 185, 65, 128, 191, 129, 36, 110, 247, 111, 5, 144, 253, 234, 65, 146, 82, 247, 106, 44, 185, 248, 11, 149, 246, 141, 115, 162, 238, 154, 59, 167, 239, 190, 209, 233, 169, 215, 225, 106, 27, 238, 202, 47, 173, 30, 11, 184, 33, 26, 102, 11, 160, 94, 43, 230, 214, 40, 131, 99, 124, 54, 79, 112, 206, 238, 217, 56, 247, 144, 65, 33, 90, 144, 145, 11, 106, 158, 111, 23, 156, 37, 59, 115, 50, 148, 97, 77, 191, 97, 190, 47, 18, 64, 250, 97, 195, 98, 200, 88, 247, 161, 38, 241, 88, 60, 243, 66, 30, 67, 3, 1, 88, 222, 224, 114, 127, 235, 32, 149, 186, 3, 200, 250, 143, 147, 151, 54, 237, 146, 191, 36, 191, 250, 122, 66, 208, 155, 255, 244, 98, 253, 252, 137, 190, 193, 161, 104, 117, 159, 195, 23, 245, 130, 144, 41, 197, 68, 232, 193, 218, 245, 51, 36, 9, 184, 44, 182, 200, 78, 106, 226, 92, 200, 65, 78, 172, 107, 154, 33, 152, 243, 254, 236, 22, 12, 42, 101, 108, 31, 199, 162, 38, 73, 220, 89, 38, 216, 205, 41, 19, 63, 215, 23, 132, 195, 24, 92, 146, 170, 224, 107, 177, 191, 55, 105, 215, 166, 17], - [71, 216, 160, 130, 235, 179, 52, 209, 71, 63, 170, 24, 122, 165, 152, 74, 102, 36, 65, 197, 114, 49, 36, 48, 175, 17, 182, 88, 207, 42, 211, 140, 73, 12, 81, 1, 202, 106, 79, 161, 113, 197, 180, 59, 227, 5, 207, 108, 231, 19, 20, 2, 32, 121, 147, 77, 115, 75, 217, 133, 91, 217, 127, 89, 102, 204, 26, 210, 87, 72, 183, 235, 110, 141, 36, 24, 199, 119, 77, 114, 32, 121, 49, 170, 27, 58, 210, 219, 117, 154, 185, 90, 94, 1, 73, 65, 152, 122, 225, 79, 82, 213, 225, 193, 216, 62, 223, 83, 11, 36, 144, 24, 101, 167, 167, 97, 176, 9, 143, 60, 182, 117, 165, 130, 137, 134, 31, 79, 31, 168, 46, 134, 207, 216, 100, 37, 233, 227, 112, 248, 142, 169, 10, 111, 2, 208, 115, 115, 9, 96, 123, 112, 31, 212, 91, 114, 213, 169, 9, 141, 245, 106, 76, 40, 42, 111, 46, 137, 146, 184, 203, 33, 58, 136, 139, 212, 24, 237, 122, 180, 22, 120, 101, 206, 204, 212, 142, 161, 201, 76, 111, 231, 236, 85, 142, 210, 240, 31, 221, 236, 114, 5, 88, 72, 215, 68, 230, 38, 231, 213, 41, 112, 198, 59, 161, 67, 98, 247, 23, 126, 115, 96, 144, 45, 66, 44, 219, 58, 236, 190, 70, 226, 136, 226, 61, 90, 172, 109, 145, 155, 253, 18, 31, 156, 214, 102, 4, 42, 141, 176, 98, 84, 185, 14, 133, 135, 11, 81, 89, 197, 87, 207, 100, 208, 6, 26, 150, 141, 172, 202, 60, 173, 153, 58, 23, 153, 157, 0, 228, 204, 182, 126, 127, 57, 211, 151, 70, 38, 249, 19, 195, 120, 204, 92, 75, 116, 248, 34, 11, 113, 248, 117, 169, 159, 40, 152, 158, 188, 29, 182, 185, 152, 179, 14, 199, 85, 227, 13, 127, 30, 239, 42, 183, 80, 9, 39, 169, 70, 182, 209, 8, 5, 136, 64, 112, 200, 154, 89, 176, 131, 251, 126, 117, 47, 222, 206, 51, 145, 136, 100, 53, 106, 182, 24, 223, 85, 238, 26, 157, 238, 57, 115, 60, 125, 243, 221, 31, 14, 144, 255, 80, 115, 16, 84, 176, 4, 98, 117, 221, 254, 111, 47, 56, 15, 117, 65, 206, 115, 251, 85, 184, 226, 3, 156, 85, 90, 46, 148, 97, 118, 144, 166, 220, 82, 250, 197, 18, 123, 182, 157, 144, 241, 98, 16, 93, 149, 105, 183, 232, 238, 235, 172, 136, 101, 233, 32, 221, 137, 110, 228, 74, 110, 161, 69, 191, 133, 34, 14, 229, 116, 73, 244, 7, 22, 3, 198, 111, 39, 218, 142, 161, 208, 124, 143, 199, 122, 174, 112, 39, 109, 125, 82, 168, 193, 90, 5, 225, 93, 188, 27, 50, 5, 233, 104, 110, 57, 98, 110, 253, 228, 253, 151, 245, 250, 177, 174, 182, 189, 193, 43, 169, 216, 4, 95, 226, 194, 203, 160, 202, 93, 199, 131, 146, 143, 132, 46, 30, 2, 84, 119, 34, 214, 236, 94, 22, 49, 64, 218, 100, 157, 113, 200, 44, 231, 151, 39, 141, 142, 45, 134, 115, 177, 134, 168, 179, 21, 169, 226, 61, 228, 135, 61, 100, 13, 198, 176, 71, 140, 52, 59, 250, 88, 103, 50, 188, 206, 159, 7, 157, 40, 33, 107, 152, 77, 16, 79, 42, 151, 92, 107, 54, 200, 78, 156, 239, 239, 32, 97, 151, 54, 73, 98, 101, 179, 183, 150, 143, 150, 163, 14, 81, 213, 31, 179, 191, 223, 200, 85, 148, 235, 132, 185, 84, 7, 83, 20, 137, 79, 166, 145, 163, 84, 12, 190, 131, 7, 200, 198, 141, 28, 7, 127, 162, 14, 87, 118, 241, 207, 222, 168, 43, 51, 101, 72, 229, 59, 216, 130, 69, 143, 115, 196, 228, 20, 139, 113, 133, 121, 148, 235, 30, 229, 240, 186, 3, 233, 39, 223, 192, 36, 164, 92, 248, 194, 126, 65, 159, 199, 66, 149, 237, 124, 249, 111, 88, 169, 74, 45, 24, 219, 112, 19, 211, 16, 156, 5, 218, 130, 74, 204, 191, 210, 108, 4, 41, 143, 114, 149, 43, 198, 242, 175, 142, 239, 63, 49, 8, 129, 192, 238, 103, 218, 124, 215, 168, 188, 220, 0, 97, 7, 149, 161, 158, 111, 16, 37, 168, 130, 100, 86, 99, 233, 32, 247, 174, 59, 81, 51, 78, 154, 164, 182, 208, 246, 204, 8, 5, 109, 154, 180, 168, 218, 104, 19, 79, 181, 239, 114, 33, 174, 231, 59, 134, 188, 100, 254, 14, 224, 208, 105, 108, 36, 203, 246, 18, 119, 162, 117, 148, 20, 56, 71, 71, 221, 72, 108, 18, 98, 219, 94, 184, 191, 89, 2, 227, 132, 225, 112, 123, 14, 240, 60, 1, 13, 188, 228, 240, 32, 239, 129, 180, 252, 137, 126, 12, 8, 41, 23, 104, 21, 25, 109, 63, 87, 167, 96, 97, 192, 177, 28, 23, 125, 232, 75, 245, 193, 67, 147, 144, 182, 228, 194, 101, 168, 120, 112, 160, 216, 81, 149, 231, 162, 173, 77, 208, 165, 229, 7, 169, 106, 164, 175, 26, 166, 222, 33, 185, 158, 93, 238, 184, 190, 119, 190, 56, 31, 209, 153, 131, 136, 56, 173, 164, 194, 246, 217, 238, 191, 214, 104, 48, 229, 114, 54, 94, 58, 23, 87, 30, 186, 31, 31, 90, 197, 39, 31, 79, 17, 120, 15, 52, 176, 227, 110, 166, 42, 142, 52, 76, 154, 215, 129, 104, 148, 111, 211, 184, 118, 64, 19, 214, 14, 132, 8, 252, 186, 195, 70, 204, 67, 230, 88, 31, 34, 170, 168, 197, 186, 125, 136, 90, 197, 2, 90, 114, 73, 85, 77, 114, 93, 175, 113, 185, 191, 57, 125, 63, 171, 173, 99, 69, 28, 119, 51, 82, 241, 185, 72, 10, 212, 29, 55, 252, 29, 88, 169, 35, 201, 149, 28, 169, 103, 178, 77, 188, 145, 122, 242, 165, 160, 146, 246, 41, 159, 23, 134, 76, 140, 100, 67, 212, 82, 127, 29, 78, 250, 192, 94, 146, 173, 47, 31, 118, 141, 244, 241, 51, 71, 24, 238, 151, 171, 222, 252, 126, 19, 146, 8, 215, 27, 159, 40, 188, 84, 219, 106, 137, 182, 195, 15, 186, 171, 166, 130, 79, 214, 149, 216, 10, 107, 155, 124, 194, 217, 247, 66, 14, 51, 231, 241, 71, 204, 42, 5, 87, 65, 228, 237, 23, 167, 63, 77, 163, 163, 51, 93, 174, 234, 27, 175, 103, 62, 1, 74, 79, 213, 225, 102, 202, 86, 179, 164, 60, 181, 224, 102, 16, 114, 118, 217, 208, 32, 44, 110, 222, 65, 115, 26, 196, 141, 58, 38, 153, 134, 10, 40, 94, 89, 195, 103, 179, 87, 96, 204, 89, 117, 171, 79, 241, 163, 99, 36, 113, 36, 174, 225, 41, 171, 160, 210, 50, 88, 105, 192, 251, 196, 137, 254, 231, 115, 62, 213, 251, 62, 219, 239, 121, 197, 68, 23, 101, 151, 197, 112, 81, 207, 202, 86, 141, 126, 253, 122, 140, 177, 107, 118, 109, 118, 50, 32, 252, 178, 245, 244, 166, 121, 144, 94, 93, 45, 92, 199, 5, 41, 143, 5, 213, 58, 47, 101, 7, 82, 34, 32, 90, 174, 121, 130, 148, 18, 152, 160, 111, 15, 179, 90, 244, 199, 154, 151, 227, 152, 89, 92, 125, 121, 204, 92, 42, 173, 245, 215, 253, 150, 19, 138, 169, 165, 135, 96, 138, 214, 203, 132, 82, 78, 254, 242, 32, 64, 71, 246, 68, 18, 129, 57, 235, 231, 239, 183, 121, 223, 221, 96, 192, 116, 182, 249, 152, 49, 243, 47, 145, 96, 101, 136, 175, 25, 243, 29, 68, 19, 152, 3, 54, 180, 250, 3, 238, 131, 114, 221, 58, 136, 236, 104, 177, 15, 113, 33, 236, 104, 77, 229, 232, 155, 239, 73, 190, 49, 237, 103, 185, 84, 49, 239, 187, 8, 169, 70, 198, 91, 117, 242, 180, 71, 96, 37, 56, 48, 92, 68, 50, 85, 95, 230, 253, 113, 230, 245, 18, 45, 181, 248, 174, 97, 79, 161, 183, 142, 105, 13, 46, 204, 23, 236, 225, 121, 59, 14, 168, 63, 22, 30, 90, 142, 30, 52, 54, 70, 1, 116, 147, 21, 241, 95, 18, 50, 184, 123, 11, 181, 200, 31, 152, 92, 104, 18, 66, 179, 0, 237, 207, 2, 178, 236, 60, 144, 155, 67, 80, 180, 158, 252, 80, 59, 51, 156, 246, 208, 225, 227, 35, 14, 94, 210, 163, 131, 128, 203, 168, 80, 182, 140, 199, 94, 111, 193, 231, 215, 215, 166, 95, 109, 167, 82, 58, 95, 160, 228, 220, 240, 146, 84, 167, 2, 166, 171, 24, 53, 126, 251, 166, 176, 212, 182, 101, 18, 60, 155, 37, 93, 38, 156, 130, 119, 247, 26, 157, 219, 32, 207, 145, 145, 2, 140, 198, 176, 151, 230, 242, 200, 62, 181, 14, 202, 113, 208, 209, 221, 97, 194, 126, 251, 204, 245, 133, 114, 76, 229, 185, 47, 5, 24, 77, 139, 39, 177, 10, 11, 93, 46, 149, 156, 111, 155, 196, 224, 83, 170, 83, 91, 22, 207, 73, 190, 252, 87, 209, 22, 79, 191, 4, 41, 3, 7, 193, 158, 214, 47, 110, 114, 238, 53, 81, 37, 113, 89, 100, 245, 123, 133, 126, 136, 38, 129, 143, 254, 136, 92, 183, 49, 223, 243, 231, 128, 228, 221, 133, 109, 12, 67, 105, 162, 244, 38, 194, 207, 192, 232, 144, 211, 183, 158, 92, 200, 152, 158, 69, 32, 215, 61, 149, 78, 229, 47, 67, 231, 160, 58, 97, 17, 154, 13, 145, 235, 130, 36, 160, 29, 92, 163, 144, 5, 61, 191, 100, 68, 48, 87, 116, 245, 139, 19, 48, 117, 148, 2, 196, 82, 64, 244, 30, 230, 228, 156, 98, 128, 140, 98, 97, 198, 158, 23, 64, 152, 116, 205, 111, 51, 60, 210, 102, 53, 41, 40, 206, 24, 210, 137, 239, 162, 16, 23, 18, 94, 107, 222, 165, 79, 135, 140, 197, 15, 174, 132, 45, 25, 90, 214, 95, 73, 68, 157, 196, 106, 61, 179, 136, 12, 249, 50, 147, 144, 195, 247, 241, 142, 47, 5, 73, 95, 173, 184, 13, 63, 56, 131, 146, 143, 234, 250, 68, 242, 209, 163, 56, 150, 208, 118, 238, 138, 164, 193, 253, 104, 240, 136, 39, 241, 65, 192, 216, 97, 35, 103, 229, 199, 16, 112, 107, 116, 163, 130, 251, 35, 17, 251, 214, 175, 238, 81, 46, 215, 222, 11, 228, 8, 52, 231, 195, 226, 64, 61, 244, 152, 79, 163, 44, 58, 147, 20, 93, 161, 246, 208, 156, 31, 234, 230, 187, 52, 29, 180, 92, 141, 68, 85, 55, 81, 76, 81, 130, 123, 39, 120, 66, 197, 54, 34, 102, 74, 73, 33, 88, 105, 80, 89, 62, 85, 11, 250, 5, 165, 108, 177, 3, 224, 138, 61, 55, 65, 191, 167, 167, 123, 173, 243, 141, 147, 168, 117, 150, 172, 165, 216, 147, 169, 218, 119, 69, 150, 252, 26, 8, 97, 83, 92, 177, 130, 215, 253, 39, 188, 90, 17, 225, 180, 124, 211, 230, 88, 124, 134, 113, 73, 219, 73, 250, 231, 251, 38, 193, 101, 57, 220, 41, 236, 27, 225, 187, 102, 83, 173, 41, 228, 255, 181, 164, 113, 80, 174, 175, 79, 203, 196, 151, 109, 113, 4, 80, 184, 42, 36, 234, 82, 37, 84, 177, 95, 72, 123, 237, 207, 131, 66, 112, 139, 239, 122, 30, 174, 47, 53, 30, 62, 134, 95, 72, 235, 173, 101, 114, 121, 235, 105, 36, 250, 85, 243, 197, 137, 10, 254, 175, 156, 203, 158, 11, 185, 44, 148, 245, 156, 96, 46, 219, 191, 27, 237, 192, 20, 51, 198, 139, 225, 92, 153, 159, 236, 215, 240, 198, 55, 157, 68, 44, 234, 196, 94, 43, 74, 44, 58, 105, 16, 242, 89, 171, 211, 1, 26, 69, 55, 45, 241, 131, 141, 16, 8, 168, 19, 21, 237, 107, 153, 11, 202, 132, 29, 40, 22, 120, 190, 110, 199, 3, 251, 34, 9, 74, 70, 77, 195, 253, 30, 196, 41, 252, 175, 211, 200, 79, 16, 31, 139, 162, 97, 109, 216, 181, 37, 24, 118, 200, 71, 218, 56, 83, 224, 12, 11, 195, 134, 238, 84, 113, 193, 3, 197, 102, 107, 13, 86, 216, 12, 10, 120, 211, 179, 110, 115, 249, 133, 41, 40, 39, 251, 191, 159, 235, 41, 178, 250, 73, 239, 95, 152, 9, 12, 139, 200, 74, 82, 48, 227, 206, 208, 224, 176, 107, 59, 107, 60, 249, 194, 77, 59, 235, 232, 242, 26, 114, 241, 136, 15, 2, 41, 155, 212, 187, 84, 228, 89, 163, 14, 171, 208, 167, 129, 238, 101, 230, 146, 229, 179, 35, 166, 205, 237, 218, 118, 78, 28, 199, 123, 81, 200, 117, 160, 95, 154, 163, 185, 113, 239, 167, 37, 181, 157, 190, 243, 199, 13, 34, 71, 209, 114, 7, 8, 247, 110, 179, 244, 37, 48, 249, 220, 199, 158, 128, 56, 175, 175, 88, 58, 137, 163, 155, 6, 233, 94, 96, 252, 248, 197, 91, 250, 205, 103, 148, 64, 195, 107, 34, 251, 248, 6, 6, 165, 106, 230, 26, 27, 165, 87, 160, 164, 107, 172, 164, 201, 190, 242, 44, 103, 44, 149, 93, 50, 17, 157, 223, 180, 79, 79, 153, 89, 55, 158, 225, 39, 95, 5, 144, 130, 172, 112, 135, 88, 101, 31, 136, 19, 30, 93, 55, 98, 46, 252, 242, 237, 245, 241, 244, 27, 255, 83, 236, 43, 99, 229, 89, 81, 73, 254, 42, 231, 243, 122, 84, 170, 101, 146, 10, 233, 29, 84, 11, 189, 202, 200, 151, 154, 14, 201, 218, 70, 152, 129, 82, 168, 213, 95, 124, 220, 202, 154, 57, 75, 211, 87, 166, 67, 89, 40, 115, 239, 154, 26, 171, 144, 86, 8, 190, 14, 182, 220, 202, 237, 160, 204, 83, 253, 150, 181, 27, 1, 250, 218, 142, 57, 92, 166, 4, 147, 53, 192, 166, 222, 248, 183, 131, 31, 15, 69, 21, 75, 140, 165, 141, 96, 79, 40, 236, 219, 122, 196, 116, 31, 26, 119, 80, 153, 208, 134, 20, 131, 158, 163, 238, 28, 195, 33, 204, 42, 61, 66, 211, 191, 40, 40, 61, 243, 127, 177, 59, 88, 96, 92, 253, 173, 132, 239, 122, 255, 117, 169, 231, 51, 147, 144, 39, 180, 76, 94, 132, 70, 183, 209, 51, 34, 100, 130, 221, 14, 203, 178, 251, 196, 111, 52, 119, 225, 145, 87, 193, 230, 24, 232, 123, 43, 170, 77, 160, 247, 137, 66, 210, 29, 243, 78, 185, 75, 202, 223, 126, 207, 104, 28, 222, 197, 31, 126, 144, 183, 171, 33, 148, 201, 188, 92, 55, 238, 79, 235, 211, 144, 150, 212, 236, 122, 71, 212, 252, 70, 27, 195, 25, 32, 108, 101, 155, 166, 8, 179, 126, 98, 154, 99, 76, 250, 166, 171, 219, 68, 50, 58, 37, 133, 56, 73, 31, 12, 219, 23, 124, 89, 140, 241, 31, 131, 48, 111, 161, 79, 145, 184, 194, 22, 113, 252, 243, 193, 112, 19, 82, 60, 176, 161, 37, 27, 98, 114, 248, 168, 154, 98, 197, 126, 204, 181, 51, 76, 203, 243, 131, 199, 47, 109, 208, 9, 18, 4, 220, 37, 4, 196, 138, 200, 131, 216, 77, 54, 102, 195, 205, 84, 89, 42, 51, 18, 119, 243, 129, 114, 201, 205, 29, 141, 104, 154, 187, 43, 156, 60, 203, 26, 166, 58, 17, 176, 174, 191, 74, 79, 144, 81, 128, 192, 152, 32, 147, 255, 166, 121, 32, 226, 243, 209, 23, 61, 254, 200, 206, 187, 138, 234, 114, 224, 177, 8, 93, 246, 141, 60, 15, 17, 86, 26, 130, 99, 133, 145, 193, 245, 192, 108, 43, 71, 93, 167, 242, 155, 40, 131, 223, 174, 231, 177, 106, 24, 102, 200, 165, 40, 243, 224, 178, 242, 167, 225, 130, 143, 193, 161, 199, 219, 122, 70, 34, 130, 61, 119, 161, 11, 80, 238, 240, 61, 162, 176, 129, 33, 168, 108, 213, 28, 135, 174, 179, 126, 117, 118, 182, 2, 64, 232, 103, 132, 71, 115, 252, 161, 123, 67, 102, 202, 115, 74, 191, 162, 73, 167, 125, 247, 46, 165, 175, 1, 35, 68, 238, 255, 228, 1, 133, 30, 244, 26, 22, 216, 246, 38, 31, 166, 83, 253, 63, 191, 159, 250, 192, 254, 12, 78, 76, 32, 126, 16, 93, 71, 218, 179, 146, 50, 191, 70, 69, 234, 224, 248, 4, 171, 241, 154, 209, 194, 233, 140, 77, 34, 56, 89, 61, 214, 19, 76, 34, 36, 70, 117, 214, 127, 40, 93, 162, 173, 24, 23, 49, 33, 240, 234, 85, 23, 42, 223, 191, 10, 32, 128, 54, 168, 96, 214, 37, 137, 92, 61, 160, 182, 90, 190, 226, 235, 209, 149, 167, 233, 152, 30, 70, 137, 84, 34, 71, 161, 116, 233, 91, 54, 170, 45, 132, 179, 62, 1, 7, 231, 22, 172, 79, 198, 30, 208, 103, 175, 54, 85, 186, 220, 207, 63, 217, 169, 248, 68, 176, 68, 224, 112, 220, 222, 52, 162, 199, 77, 242, 99, 251, 135, 141, 56, 35, 185, 18, 48, 43, 208, 167, 137, 17, 191, 17, 114, 16, 219, 92, 87, 129, 166, 254, 132, 31, 154, 78, 104, 190, 101, 3, 97, 119, 128, 118, 163, 127, 254, 39, 71, 111, 92, 82, 131, 210, 168, 230, 38, 99, 156, 229, 110, 104, 92, 94, 187, 72, 127, 154, 79, 147, 178, 199, 178, 222, 49, 13, 142, 196, 29, 72, 10, 112, 251, 253, 1, 2, 48, 76, 95, 113, 60, 227, 102, 126, 119, 139, 185, 101, 27, 183, 217, 127, 64, 65, 33, 131, 218, 113, 202, 51, 15, 219, 68, 47, 116, 251, 109, 128, 197, 80, 220, 103, 142, 192, 24, 117, 212, 216, 248, 243, 40, 9, 0, 32, 87, 21, 75, 114, 134, 208, 57, 212, 51, 28, 8, 251, 213, 106, 132, 167, 221, 184, 19, 211, 122, 112, 43, 95, 233, 245, 164, 176, 85, 12, 63, 77, 67, 224, 37, 168, 42, 99, 197, 6, 196, 79, 112, 128, 209, 227, 1, 153, 188, 215, 217, 253, 182, 118, 76, 101, 27, 193, 163, 135, 53, 21, 213, 226, 109, 174, 219, 214, 74, 103, 113, 54, 19, 143, 201, 171, 62, 189, 196, 64, 227, 5, 154, 190, 154, 141, 124, 201, 249, 120, 176, 191, 16, 198, 241, 150, 207, 91, 234, 45, 193, 87, 157, 123, 208, 90, 135, 144, 77, 201, 234, 46, 156, 5, 69, 116, 105, 70, 58, 136, 78, 182, 56, 222, 32, 190, 4, 94, 214, 211, 84, 73, 206, 128, 157, 250, 243, 207, 139, 209, 237, 64, 22, 59, 172, 61, 38, 90, 172, 69, 150, 45, 121, 47, 171, 73, 92, 219, 185, 245, 237, 216, 133, 182, 67, 237, 72, 105, 86, 245, 41, 231, 147, 110, 171, 241, 225, 75, 54, 81, 126, 145, 120, 108, 178, 116, 180, 53, 43, 73, 37, 158, 199, 233, 210, 36, 245, 255, 250, 2, 75, 28, 67, 188, 145, 149, 173, 33, 115, 91, 183, 38, 6, 169, 234, 232, 30, 20, 4, 56, 210, 143, 56, 86, 154, 70, 143, 0, 185, 0, 170, 11, 227, 116, 178, 24, 179, 42, 94, 46, 228, 157, 12, 125, 204, 80, 225, 73, 245, 19, 15, 44, 219, 141, 135, 205, 62, 255, 62, 15, 138, 48, 205, 201, 106, 165, 249, 99, 63, 175, 115, 1, 190, 217, 146, 38, 136, 25, 152, 66, 26, 200, 217, 52, 223, 196, 94, 231, 155, 95, 198, 54, 124, 196, 21, 87, 25, 79, 80, 168, 150, 85, 114, 222, 166, 19, 151, 221, 89, 194, 254, 81, 15, 55, 254, 45, 155, 148, 37, 192, 245, 193, 52, 240, 134, 163, 233, 70, 215, 134, 41, 208, 243, 111, 217, 56, 110, 130, 38, 218, 187, 147, 188, 79, 167, 179, 240, 40, 3, 224, 5, 7, 227, 42, 146, 187, 151, 21, 174, 223, 110, 73, 175, 169, 101, 157, 178, 118, 196, 122, 67, 138, 116, 73, 114, 124, 92, 121, 27, 231, 200, 20, 116, 196, 85, 14, 115, 185, 38, 219, 213, 5, 43, 109, 110, 239, 180, 118, 46, 146, 197, 254, 196, 46, 235, 107, 61, 106, 185, 22, 199, 213, 120, 207, 145, 83, 68, 185, 188, 242, 184, 240, 138, 202, 210, 9, 18, 163, 19, 166, 86, 189, 56, 96, 183, 171, 136, 231, 165, 50, 152, 139, 146, 236, 182, 79, 237, 186, 182, 203, 170, 23, 190, 38, 134, 88, 244, 172, 214, 166, 84, 45, 132, 57, 71, 106, 163, 7, 111, 100, 53, 59, 122, 143, 133, 218, 204, 183, 192, 29, 227, 73, 132, 183, 16, 118, 2, 153, 134, 188, 197, 21, 46, 201, 183, 247, 242, 54, 249, 4, 29, 65, 46, 116, 239, 135, 67, 58, 165, 129, 166, 39, 44, 203, 75, 169, 233, 184, 30, 179, 212, 26, 227, 201, 220, 129, 54, 22, 184, 85, 220, 93, 203, 150, 148, 235, 44, 22, 150, 60, 146, 49, 154, 222, 58, 245, 37, 22, 41, 133, 242, 20, 226, 53, 149, 30, 164, 57, 8, 6, 3, 219, 189, 246, 136, 77, 190, 135, 9, 116, 41, 216, 142, 99, 67, 96, 151, 95, 21, 9, 87, 31, 4, 111, 1, 103, 206, 192, 184, 123, 24, 5, 97, 128, 20, 250, 229, 249, 161, 197, 221, 204, 245, 231, 207, 195, 246, 191, 142, 159, 57, 45, 113, 60, 254, 205, 225, 202, 234, 199, 222, 116, 108, 226, 218, 71, 74, 204, 46, 218, 189, 31, 182, 180, 86, 50, 153, 179, 0, 223, 223, 31, 100, 250, 196, 107, 182, 244, 32, 142, 201, 172, 209, 25, 171, 191, 87, 51, 1, 138, 95, 28, 69, 39, 196, 34, 68, 246, 116, 164, 27, 15, 125, 85, 101, 42, 169, 247, 192, 114, 198, 34, 252, 215, 10, 37, 230, 177, 206, 217, 6, 15, 218, 180, 99, 12, 20, 140, 120, 62, 174, 13, 241, 66, 127, 241, 20, 249, 166, 102, 117, 183, 129, 198, 209, 102, 146, 16, 152, 24, 99, 53, 251, 76, 171, 116, 150, 44, 206, 112, 185, 67, 5, 65, 95, 58, 55, 143, 31, 241, 110, 132, 240, 238, 219, 239, 160, 155, 132, 67, 32, 217, 207, 28, 1, 237, 149, 52, 215, 60, 94, 76, 146, 128, 57, 143, 70, 134, 106, 186, 181, 95, 227, 43, 111, 139, 121, 114, 51, 121, 41, 229, 135, 222, 166, 189, 98, 249, 160, 38, 216, 139, 113, 71, 124, 139, 243, 144, 115, 135, 31, 27, 111, 184, 225, 165, 73, 176, 242, 208, 132, 22, 145, 184, 255, 175, 10, 219, 28, 52, 210, 153, 53, 227, 225, 139, 181, 17, 103, 220, 187, 246, 109, 188, 74, 45, 40, 212, 54, 56, 52, 197, 13, 223, 243, 51, 238, 43, 36, 143, 224, 248, 126, 237, 166, 150, 8, 9, 84, 191, 134, 142, 88, 194, 105, 136, 228, 203, 40, 79, 12, 231, 195, 97, 189, 170, 89, 82, 109, 132, 231, 50, 194, 122, 170, 168, 137, 182, 61, 4, 82, 97, 131, 178, 183, 120, 95, 23, 101, 211, 163, 127, 5, 49, 254, 187, 185, 72, 85, 40, 128, 63, 53, 208, 64, 48, 63, 66, 65, 215, 127, 246, 193, 180, 0, 255, 174, 185, 113, 233, 17, 61, 154, 106, 51, 123, 73, 248, 88, 129, 1, 211, 85, 208, 112, 251, 210, 252, 117, 207, 22, 44, 67, 147, 199, 61, 182, 129, 200, 180, 131, 215, 89, 230, 85, 118, 245, 84, 160, 25, 53, 44, 147, 204, 128, 248, 24, 144, 158, 241, 117, 55, 43, 90, 75, 156, 209, 122, 171, 55, 182, 241, 73, 218, 220, 196, 118, 138, 220, 135, 67, 135, 161, 39, 228, 235, 162, 107, 118, 107, 17, 200, 176, 207, 151, 173, 248, 207, 104, 64, 230, 158, 96, 100, 210, 153, 208, 250, 30, 61, 201, 113, 179, 221, 35, 116, 186, 162, 5, 104, 110, 183, 95, 184, 230, 84, 164, 235, 127, 92, 118, 32, 37, 55, 60, 29, 56, 8, 234, 219, 143, 162, 112, 80, 134, 119, 213, 42, 207, 209, 202, 199, 42, 147, 77, 88, 236, 53, 163, 187, 79, 10, 136, 52, 48, 21, 195, 13, 157, 161, 80, 136, 247, 233, 79, 108, 207, 229, 204, 155, 176, 219, 103, 91, 118, 44, 31, 38, 222, 73, 156, 146, 131, 170, 152, 105, 42, 131, 6, 244, 40, 145, 252, 112, 198, 205, 238, 40, 102, 45, 67, 122, 36, 118, 103, 124, 59, 29, 48, 74, 104, 64, 146, 106, 73, 84, 125, 183, 215, 164, 198, 7, 109, 93, 7, 226, 244, 77, 247, 7, 39, 28, 10, 168, 105, 32, 250, 5, 80, 99, 192, 65, 7, 253, 164, 130, 110, 254, 9, 130, 143, 95, 56, 164, 1, 55, 23, 126, 111, 39, 228, 244, 98, 36, 41, 144, 98, 188, 117, 231, 11, 67, 77, 43, 213, 123, 230, 197, 168, 127, 217, 231, 135, 72, 157, 102, 221, 229, 194, 242, 216, 27, 14, 77, 103, 228, 35, 134, 77, 200, 7, 136, 23, 3, 62, 28, 192, 31, 22, 138, 187, 59, 213, 56, 113, 37, 79, 22, 63, 81, 96, 194, 11, 139, 61, 4, 142, 60, 115, 91, 122, 72, 189, 184, 118, 241, 109, 114, 160, 240, 121, 250, 109, 243, 49, 179, 167, 180, 124, 152, 191, 29, 156, 21, 234, 73, 100, 40, 30, 189, 204, 35, 253, 41, 191, 132, 53, 25, 234, 73, 118, 122, 119, 92, 92, 7, 234, 193, 44, 116, 99, 254, 250, 152, 21, 99, 216, 35, 176, 23, 82, 134, 194, 184, 14, 29, 161, 16, 232, 50, 251, 59, 185, 174, 174, 105, 247, 194, 231, 251, 117, 54, 141, 107, 131, 134, 247, 251, 207, 53, 205, 96, 6, 183, 230, 191, 80, 223, 42, 149, 197, 242, 221, 255, 88, 54, 255, 119, 127, 35, 193, 153, 118, 106, 128, 214, 122, 4, 218, 179, 179, 208, 158, 227, 150, 53, 245, 93, 38, 19, 236, 136, 24, 195, 153, 73, 19, 85, 135, 47, 210, 54, 19, 242, 163, 41, 173, 135, 210, 82, 238, 52, 168, 84, 42, 197, 8, 114, 199, 223, 239, 109, 53, 128, 249, 220, 82, 134, 145, 20, 125, 40, 135, 136, 8, 223, 123, 88, 63, 163, 16, 228, 102, 90, 169, 73, 223, 65, 178, 147, 137, 173, 243, 15, 110, 235, 160, 173, 23, 159, 53, 92, 136, 65, 94, 209, 232, 142, 183, 230, 39, 177, 18, 31, 203, 171, 218, 34, 205, 58, 236, 127, 236, 67, 211, 220, 171, 132, 152, 238, 55, 216, 153, 118, 140, 196, 78, 171, 192, 73, 138, 119, 16, 214, 213, 181, 197, 51, 164, 189, 193, 191, 183, 83, 84, 145, 185, 230, 47, 19, 209, 80, 239, 174, 244, 99, 20, 210, 247, 176, 28, 31, 102, 160, 243, 30, 151, 62, 22, 41, 105, 175, 101, 60, 149, 97, 232, 170, 124, 76, 42, 129, 22, 245, 109, 100, 7, 111, 219, 107, 162, 130, 226, 95, 127, 110, 237, 118, 231, 155, 201, 226, 169, 254, 162, 145, 219, 253, 216, 223, 183, 136, 59, 106, 175, 122, 159, 70, 189, 6, 35, 69, 139, 98, 158, 50, 77, 117, 245, 115, 11, 144, 65, 179, 93, 218, 50, 234, 230, 73, 86, 79, 142, 98, 141, 29, 78, 184, 75, 40, 121, 53, 1, 196, 200, 186, 136, 203, 237, 115, 55, 20, 28, 11, 62, 19, 253, 29, 250, 207, 46, 211, 116, 141, 169, 191, 194, 4, 190, 73, 194, 135, 153, 13, 204, 212, 77, 246, 124, 64, 99, 4, 73, 152, 117, 43, 43, 78, 82, 75, 217, 129, 28, 116, 56, 196, 202, 255, 128, 201, 91, 42, 69, 163, 158, 140, 49, 173, 40, 147, 179, 10, 32, 168, 182, 11, 130, 149, 237, 90, 125, 67, 177, 149, 48, 47, 31, 60, 194, 54, 179, 139, 170, 65, 185, 219, 207, 245, 247, 71, 97, 235, 71, 174, 42, 100, 66, 20, 60, 180, 116, 124, 17, 163, 83, 151, 224, 151, 132, 175, 222, 217, 117, 151, 228, 20, 98, 74, 237, 237, 23, 88, 16, 150, 146, 23, 183, 220, 176, 29, 25, 142, 48, 40, 185, 192, 198, 206, 131, 40, 79, 200, 51, 121, 122, 81, 109, 200, 133, 15, 52, 63, 56, 25, 18, 130, 187, 28, 166, 91, 51, 253, 84, 252, 213, 75, 114, 136, 232, 179, 128, 205, 236, 14, 180, 13, 10, 151, 115, 0, 227, 91, 148, 148, 109, 9, 205, 95, 149, 112, 247, 20, 68, 37, 48, 254, 74, 65, 5, 60, 6, 209, 71, 64, 248, 145, 150, 224, 224, 105, 117, 248, 151, 135, 103, 162, 172, 88, 225, 142, 210, 37, 162, 202, 127, 217, 112, 161, 80, 188, 69, 69, 52, 101, 223, 60, 52, 0, 22, 91, 2, 3, 192, 102, 203, 131, 183, 140, 166, 224, 241, 163, 255, 130, 128, 128, 96, 164, 44, 72, 30, 73, 64, 196, 165, 129, 41, 196, 186, 239, 56, 147, 117, 178, 193, 107, 137, 134, 90, 85, 116, 67, 220, 35, 253, 241, 64, 55, 235, 47, 140, 247, 19, 238, 189, 200, 185, 215, 100, 24, 106, 60, 88, 48, 253, 181, 96, 72, 84, 15, 7, 161, 175, 110, 227, 170, 149, 186, 101, 76, 134, 254, 123, 16, 28, 65, 194, 22, 164, 164, 189, 229, 81, 48, 138, 49, 4, 197, 179, 18, 211, 113, 116, 246, 14, 58, 15, 39, 16, 220, 104, 102, 234, 8, 144, 176, 152, 107, 232, 144, 55, 183, 65, 134, 218, 29, 6, 230, 107, 138, 225, 252, 170, 207, 230, 144, 168, 223, 64, 117, 19, 53, 145, 117, 57, 223, 103, 194, 128, 72, 42, 113, 25, 119, 137, 204, 236, 2, 149, 158, 188, 246, 94, 112, 159, 225, 31, 160, 40, 189, 22, 231, 36, 154, 178, 130, 147, 221, 108, 178, 151, 11, 125, 144, 202, 158, 7, 113, 141, 212, 227, 150, 239, 136, 133, 3, 14, 42, 97, 41, 84, 215, 23, 198, 170, 26, 243, 254, 81, 156, 26, 137, 234, 39, 49, 42, 132, 39, 184, 153, 199, 57, 200, 72, 176, 89, 185, 47, 0, 12, 71, 222, 4, 83, 105, 74, 199, 232, 179, 189, 110, 36, 94, 32, 9, 114, 215, 228, 203, 10, 14, 235, 241, 163, 221, 122, 17, 32, 100, 145, 227, 156, 125, 155, 8, 15, 26, 166, 47, 185, 132, 76, 201, 63, 222, 103, 125, 144, 53, 226, 129, 74, 131, 16, 62, 43, 39, 202, 96, 150, 123, 219, 8, 246, 102, 53, 82, 26, 125, 189, 154, 242, 11, 56, 29, 50, 88, 29, 33, 195, 114, 140, 200, 6, 111, 234, 186, 84, 153, 211, 190, 225, 230, 106, 242, 178, 175, 249, 37, 165, 46, 68, 109, 241, 165, 158, 121, 63, 239, 239, 32, 180, 48, 247, 98, 42, 145, 138, 214, 140, 48, 60, 131, 151, 241, 229, 50, 234, 92, 225, 165, 239, 45, 170, 152, 51, 114, 239, 26, 220, 178, 83, 157, 158, 44, 222, 86, 20, 59, 247, 76, 132, 196, 3, 120, 178, 209, 75, 32, 67, 101, 105, 107, 108, 1, 71, 30, 37, 2, 47, 34, 132, 202, 169, 72, 118, 242, 129, 12, 81, 139, 225, 113, 143, 190, 56, 19, 167, 54, 211, 11, 188, 63, 106, 93, 88, 217, 86, 138, 251, 141, 57, 72, 184, 175, 179, 186, 158, 253, 247, 174, 24, 241, 155, 116, 59, 24, 115, 11, 41, 196, 37, 191, 253, 119, 125, 148, 245, 198, 240, 157, 191, 243, 155, 133, 20, 27, 38, 106, 216, 19, 105, 88, 78, 150, 47, 34, 102, 230, 224, 25, 130, 14, 141, 178, 212, 144, 24, 29, 104, 249, 185, 130, 28, 73, 201, 48, 124, 32, 39, 0, 133, 41, 244, 1, 145, 25, 29, 166, 234, 57, 210, 43, 214, 146, 166, 25, 125, 113, 185, 140, 173, 11, 44, 255, 46, 41, 134, 22, 102, 96, 214, 118, 87, 255, 254, 8, 245, 246, 150, 239, 208, 223, 230, 10, 7, 24, 19, 41, 250, 189, 104, 54, 197, 47, 121, 195, 182, 110, 166, 56, 176, 95, 58, 244, 176, 247, 149, 112, 214, 74, 147, 115, 0, 196, 210, 115, 181, 183, 159, 45, 1, 208, 220, 0, 208, 73, 55, 38, 150, 241, 54, 172, 121, 83, 27, 211, 250, 238, 66, 242, 8, 165, 11, 56, 44, 75, 26, 214, 132, 217, 188, 45, 69, 251, 231, 153, 208, 143, 85, 143, 222, 137, 29, 131, 136, 130, 167, 114, 237, 95, 220, 29, 160, 125, 37, 50, 175, 162, 181, 64, 142, 48, 5, 229, 206, 122, 11, 229, 11, 213, 108, 0, 137, 70, 8, 225, 125, 142, 133, 219, 127, 34, 187, 64, 246, 128, 228, 210, 9, 197, 229, 252, 170, 248, 145, 28, 241, 216, 93, 98, 185, 9, 76, 80, 136, 154, 208, 229, 234, 20, 25, 77, 143, 4, 48, 45, 250, 33, 208, 12, 245, 211, 127, 160, 90, 243, 190, 77, 123, 51, 10, 156, 121, 166, 29, 141, 148, 11, 178, 170, 149, 155, 163, 200, 107, 196, 93, 228, 207, 125, 75, 207, 178, 251, 85, 44, 191, 131, 130, 148, 30, 166, 215, 233, 18, 152, 49, 70, 74, 136, 33, 197, 85, 28, 245, 146, 29, 239, 44, 28, 194, 112, 6, 185, 30, 50, 75, 45, 97, 247, 98, 104, 1, 12, 203, 124, 238, 154, 221, 247, 135, 81, 133, 212, 143, 113, 50, 251, 9, 14, 52, 114, 40, 207, 105, 118, 30, 4, 133, 145, 248, 21, 188, 215, 194, 137, 2, 219, 18, 13, 171, 147, 108, 226, 50, 147, 241, 85, 22, 38, 112, 181, 167, 162, 239, 39, 222, 244, 198, 182, 101, 244, 233, 174, 47, 109, 232, 242, 127, 125, 35, 59, 96, 48, 69, 151, 106, 240, 99, 243, 32, 72, 91, 11, 64, 226, 209, 6, 116, 57, 71, 238, 95, 113, 52, 22, 194, 44, 23, 25, 50, 194, 95, 29, 19, 213, 208, 212, 140, 3, 222, 81, 196, 161, 114, 217, 30, 224, 162, 39, 112, 50, 41, 187, 203, 5, 124, 118, 47, 11, 146, 204, 64, 26, 196, 136, 106, 194, 26, 209, 114, 188, 195, 177, 195, 201, 62, 183, 22, 151, 191, 186, 25, 130, 1, 98, 222, 12, 93, 101, 13, 220, 52, 159, 118, 115, 11, 193, 83, 107, 106, 56, 40, 161, 78, 178, 57, 215, 88, 250, 17, 179, 118, 155, 132, 7, 166, 190, 121, 250, 166, 182, 189, 211, 111, 41, 225, 44, 176, 8, 201, 211, 251, 93, 171, 208, 114, 85, 68, 99, 106, 10, 20, 233, 216, 164, 29, 95, 97, 216, 26, 102, 194, 187, 177, 171, 104, 226, 90, 67, 200, 241, 246, 4, 148, 85, 104, 58, 217, 157, 232, 48, 219, 138, 96, 201, 66, 45, 62, 69, 174, 0, 192, 129, 166, 79, 251, 243, 20, 201, 111, 218, 192, 230, 143, 176, 199, 132, 159, 202, 245, 48, 189, 219, 230, 44, 59, 117, 77, 71, 204, 218, 161, 241, 217, 9, 135, 54, 234, 213, 143, 12, 228, 181, 243, 227, 141, 93, 4, 110, 198, 67, 27, 100, 236, 98, 90, 147, 184, 141, 106, 254, 129, 236, 230, 191, 196, 49, 153, 50, 3, 107, 90, 88, 229, 44, 250, 98, 247, 150, 51, 134, 219, 243, 109, 191, 193, 143, 57, 215, 180, 123, 16, 97, 138, 117, 89, 78, 112, 123, 161, 85, 252, 96, 96, 36, 137, 97, 234, 206, 129, 29, 227, 175, 98, 237, 57, 5, 40, 230, 194, 91, 56, 99, 39, 101, 135, 69, 244, 253, 231, 126, 171, 222, 97, 145, 150, 187, 10, 103, 49, 54, 50, 31, 42, 158, 73, 255, 23, 31, 172, 247, 156, 174, 2, 140, 67, 97, 70, 85, 23, 240, 124, 23, 96, 50, 154, 104, 100, 74, 246, 166, 181, 130, 193, 151, 92, 254, 20, 126, 12, 161, 125, 191, 23, 188, 8, 213, 70, 11, 222, 125, 178, 224, 198, 82, 27, 99, 136, 62, 34, 168, 96, 31, 137, 183, 27, 179, 205, 229, 130, 13, 3, 0, 198, 136, 172, 206, 228, 63, 2, 185, 34, 229, 219, 41, 220, 15, 223, 153, 147, 224, 248, 117, 56, 180, 36, 227, 57, 226, 247, 176, 68, 78, 189, 30, 151, 212, 109, 135, 62, 134, 120, 52, 226, 25, 86, 129, 50, 80, 35, 57, 99, 176, 248, 8, 167, 51, 241, 87, 246, 120, 189, 206, 234, 228, 198, 124, 64, 68, 247, 215, 205, 46, 22, 91, 239, 142, 230, 86, 241, 177, 232, 195, 6, 57, 18, 186, 7, 48, 51, 176, 44, 250, 27, 184, 62, 144, 232, 8, 121, 89, 184, 91, 40, 45, 251, 84, 242, 239, 27, 40, 58, 38, 83, 34, 246, 77, 254, 232, 73, 25, 59, 49, 107, 94, 85, 246, 248, 63, 215, 103, 1, 201, 253, 223, 29, 50, 27, 4, 37, 247, 138, 220, 206, 244, 163, 173, 106, 110, 159, 241, 119, 234, 251, 80, 108, 76, 28, 203, 85, 141, 118, 156, 13, 249, 84, 222, 25, 168, 187, 67, 111, 200, 30, 175, 191, 28, 115, 37, 168, 171, 113, 86, 29, 41, 133, 135, 208, 175, 147, 173, 38, 41, 45, 136, 50, 55, 173, 21, 180, 232, 59, 171, 33, 231, 36, 212, 225, 101, 11, 205, 176, 132, 71, 91, 167, 112, 155, 82, 17, 68, 91, 109, 23, 169, 138, 179, 188, 223, 118, 166, 39, 25, 46, 253, 215, 200, 211, 215, 190, 105, 229, 35, 201, 46, 9, 175, 242, 223, 138, 33, 149, 143, 230, 94, 219, 199, 212, 121, 92, 33, 90, 170, 109, 162, 218, 205, 95, 96, 158, 107, 186, 213, 217, 174, 70, 86, 211, 32, 26, 124, 114, 245, 113, 35, 231, 234, 238, 58, 160, 73, 112, 182, 166, 229, 230, 33, 17, 20, 15, 250, 160, 86, 5, 6, 73, 55, 117, 111, 35, 171, 49, 198, 62, 100, 25, 184, 54, 136, 16, 55, 108, 23, 206, 4, 63, 129, 247, 140, 190, 172, 57, 91, 13, 41, 163, 43, 216, 167, 64, 43, 185, 240, 69, 48, 155, 19, 210, 92, 156, 241, 191, 103, 77, 128, 158, 228, 118, 125, 191, 175, 81, 176, 4, 191, 238, 17, 235, 237, 169, 165, 191, 96, 214, 97, 36, 148, 131, 179, 253, 198, 133, 76, 8, 109, 53, 227, 221, 80, 116, 33, 116, 91, 32, 3, 166, 191, 205, 245, 206, 109, 147, 10, 247, 239, 93, 3, 62, 29, 174, 179, 238, 158, 133, 111, 195, 239, 45, 241, 21, 121, 102, 245, 114, 221, 177, 178, 189, 210, 237, 121, 143, 69, 241, 132, 65, 93, 132, 81, 222, 41, 175, 15, 63, 126, 95, 175, 170, 128, 76, 146, 248, 117, 160, 170, 238, 132, 255, 164, 57, 133, 113, 1, 34, 188, 210, 250, 187, 159, 35, 129, 5, 84, 145, 18, 15, 225, 80, 227, 55, 147, 252, 42, 148, 127, 150, 238, 0, 176, 247, 110, 6, 244, 134, 63, 68, 165, 88, 234, 82, 29, 155, 232, 101, 100, 174, 193, 46, 107, 65, 6, 14, 103, 116, 167, 13, 32, 35, 135, 244, 229, 170, 180, 132, 86, 123, 157, 0, 81, 49, 103, 33, 220, 51, 45, 248, 191, 203, 255, 64, 106, 190, 108, 54, 158, 243, 65, 4, 164, 253, 129, 230, 220, 77, 148, 244, 11, 152, 113, 150, 106, 190, 16, 125, 241, 61, 246, 224, 118, 153, 45, 216, 173, 42, 39, 64, 208, 216, 58, 136, 104, 163, 131, 13, 13, 91, 149, 8, 200, 181, 125, 67, 128, 64, 189, 236, 133, 129, 251, 220, 123, 219, 119, 34, 247, 90, 62, 148, 9, 133, 210, 113, 194, 186, 98, 193, 134, 214, 43, 235, 47, 197, 222, 149, 40, 165, 250, 128, 26, 240, 140, 56, 186, 81, 11, 61, 158, 221, 218, 12, 33, 94, 94, 90, 132, 44, 198, 148, 29, 97, 137, 189, 70, 205, 6, 168, 49, 212, 182, 97, 242, 15, 151, 94, 98, 84, 14, 70, 31, 177, 254, 192, 43, 25, 105, 194, 48, 173, 76, 15, 192, 222, 26, 87, 242, 103, 252, 13, 126, 119, 44, 243, 148, 210, 44, 252, 38, 126, 46, 0, 136, 59, 238, 153, 53, 58, 148, 123, 99, 13, 32, 88, 58, 168, 182, 177, 177, 238, 22, 40, 41, 43, 108, 38, 30, 77, 20, 242, 124, 185, 215, 39, 254, 173, 8, 250, 33, 58, 38, 11, 237, 237, 107, 200, 225, 203, 59, 229, 224, 186, 190, 124, 98, 91, 57, 85, 96, 240, 136, 98, 11, 74, 119, 128, 92, 15, 235, 120, 188, 235, 134, 14, 178, 123, 215, 105, 207, 204, 177, 112, 49, 62, 43, 168, 34, 210, 240, 216, 77, 139, 225, 129, 109, 7, 53, 75, 235, 103, 232, 177, 249, 84, 188, 91, 157, 223, 214, 81, 177, 219, 218, 103, 174, 13, 114, 193, 137, 220, 116, 174, 5, 47, 216, 196, 247, 151, 96, 25, 163, 188, 242, 172, 97, 60, 66, 120, 149, 100, 58, 130, 180, 109, 168, 196, 193, 34, 222, 32, 78, 36, 64, 38, 112, 204, 210, 28, 15, 114, 115, 147, 137, 43, 68, 223, 175, 101, 7, 195, 115, 174, 89, 24, 185, 186, 126, 18, 64, 191, 50, 244, 114, 89, 162, 11, 69, 151, 201, 34, 181, 108, 11, 204, 235, 197, 160, 164, 64, 209, 75, 95, 92, 86, 149, 194, 108, 247, 67, 89, 82, 162, 105, 64, 108, 136, 210, 35, 33, 29, 233, 54, 78, 23, 254, 115, 211, 45, 206, 224, 93, 113, 24, 176, 252, 5, 79, 32, 164, 179, 94, 222, 56, 76, 160, 20, 61, 51, 43, 141, 19, 226, 54, 22, 148, 248, 54, 237, 211, 168, 169, 189, 21, 11, 223, 104, 53, 218, 53, 246, 95, 70, 213, 157, 173, 249, 135, 6, 139, 116, 136, 33, 132, 127, 135, 218, 61, 161, 19, 26, 139, 172, 140, 203, 241, 114, 132, 139, 78, 122, 215, 58, 88, 62, 235, 99, 92, 232, 22, 121, 21, 43, 13, 39, 235, 199, 245, 169, 123, 244, 248, 15, 29, 143, 65, 228, 89, 115, 86, 214, 154, 152, 114, 10, 132, 151, 113, 189, 111, 230, 94, 215, 167, 205, 23, 136, 29, 11, 74, 87, 254, 76, 150, 90, 127, 170, 14, 202, 83, 120, 54, 3, 78, 123, 214, 125, 115, 86, 64, 94, 100, 154, 185, 229, 80, 114, 188, 236, 252, 75, 194, 33, 121, 76, 89, 8, 110, 87, 98, 52, 226, 123, 193, 111, 148, 33, 13, 232, 254, 239, 122, 104, 41, 34, 21, 42, 66, 56, 196, 24, 86, 208, 0, 252, 35, 233, 97, 88, 155, 198, 173, 10, 230, 126, 46, 12, 171, 0, 153, 164, 73, 164, 25, 181, 119, 154, 250, 224, 164, 45, 98, 243, 231, 78, 81, 203, 169, 178, 69, 31, 43, 121, 179, 156, 254, 83, 54, 229, 114, 160, 57, 23, 2, 183, 131, 125, 187, 210, 147, 222, 228, 148, 19, 176, 103, 123, 134, 140, 122, 175, 77, 9, 242, 127, 10, 242, 240, 241, 17, 35, 112, 80, 181, 38, 127, 186, 53, 180, 50, 27, 220, 52, 175, 148, 131, 237, 11, 111, 214, 77, 242, 249, 169, 188, 130, 244, 26, 192, 92, 117, 216, 95, 48, 125, 113, 65, 92, 224, 243, 168, 122, 176, 233, 16, 252, 34, 155, 82, 32, 225, 210, 15, 6, 239, 238, 84, 111, 88, 54, 29, 231, 69, 124, 253, 42, 248, 206, 148, 77, 119, 236, 233, 251, 230, 87, 130, 205, 118, 27, 242, 95, 5, 25, 169, 245, 88, 12, 254, 197, 73, 8, 71, 50, 121, 210, 198, 161, 227, 248, 214, 27, 246, 17, 132, 40, 142, 197, 102, 241, 137, 2, 1, 112, 134, 59, 54, 21, 25, 166, 138, 108, 140, 35, 58, 236, 205, 137, 167, 222, 217, 251, 81, 130, 218, 244, 240, 99, 4, 50, 163, 66, 129, 187, 231, 4, 175, 238, 244, 0, 76, 141, 253, 187, 108, 28, 170, 197, 150, 158, 38, 118, 224, 46, 175, 124, 244, 88, 145, 170, 235, 102, 191, 27, 149, 3, 139, 126, 232, 95, 240, 147, 28, 42, 8, 204, 112, 201, 251, 222, 249, 239, 65, 55, 239, 195, 170, 206, 170, 128, 7, 201, 244, 158, 143, 157, 121, 201, 7, 68, 241, 165, 85, 76, 247, 22, 115, 15, 229, 172, 3, 49, 19, 156, 78, 176, 87, 229, 188, 185, 198, 13, 37, 186, 3, 84, 92, 115, 122, 22, 148, 230, 223, 92, 243, 123, 72, 204, 29, 147, 165, 19, 85, 191, 112, 87, 116, 198, 179, 20, 76, 39, 122, 27, 70, 18, 155, 220, 4, 182, 34, 16, 171, 190, 235, 173, 83, 248, 119, 198, 49, 159, 150, 223, 77, 48, 224, 63, 156, 201, 230, 108, 144, 210, 12, 184, 207, 240, 134, 248, 231, 246, 13, 226, 24, 41, 56, 200, 50, 216, 0, 175, 141, 176, 121, 247, 32, 173, 15, 47, 226, 22, 244, 135, 235, 230, 181, 60, 175, 143, 97, 220, 227, 25, 28, 250, 51, 12, 194, 173, 110, 242, 69, 78, 69, 244, 100, 217, 109, 5, 72, 139, 247, 136, 94, 101, 214, 231, 32, 75, 226, 244, 254, 135, 152, 92, 105, 6, 9, 120, 183, 153, 219, 202, 177, 247, 122, 206, 103, 37, 72, 84, 167, 232, 131, 14, 2, 24, 93, 206, 245, 145, 126, 191, 196, 71, 187, 183, 71, 126, 51, 77, 128, 1, 220, 185, 37, 64, 8, 85, 250, 174, 232, 19, 225, 152, 15, 35, 47, 209, 74, 108, 7, 131, 23, 59, 127, 4, 91, 97, 1, 149, 154, 54, 49, 46, 79, 77, 36, 21, 196, 121, 36, 179, 2, 165, 43, 50, 221, 82, 248, 98, 114, 109, 18, 101, 14, 200, 24, 28, 151, 180, 172, 88, 148, 4, 30, 99, 231, 101, 104, 185, 115, 170, 100, 138, 196, 187, 90, 10, 95, 23, 172, 215, 156, 193, 52, 207, 107, 57, 160, 93, 173, 119, 235, 16, 192, 3, 77, 255, 178, 241, 101, 119, 166, 94, 223, 22, 212, 48, 38, 94, 83, 12, 224, 100, 101, 171, 119, 137, 208, 101, 93, 118, 231, 114, 80, 117, 151, 106, 255, 148, 49, 246, 106, 220, 187, 59, 218, 3, 53, 177, 59, 4, 247, 53, 207, 213, 175, 122, 90, 130, 199, 23, 173, 45, 19, 102, 167, 131, 35, 242, 36, 102, 112, 19, 60, 221, 223, 59, 191, 248, 176, 247, 190, 178, 7, 212, 45, 245, 183, 211, 149, 179, 146, 139, 133, 252, 144, 27, 237, 241, 113, 23, 60, 13, 154, 35, 97, 12, 123, 6, 196, 213, 152, 130, 20, 168, 89, 159, 89, 10, 247, 85, 200, 19, 185, 31, 38, 95, 35, 35, 62, 133, 224, 44, 86, 105, 236, 112, 185, 77, 186, 192, 216, 14, 53, 128, 3, 253, 204, 7, 146, 155, 94, 108, 44, 203, 79, 127, 101, 56, 125, 10, 0, 55, 238, 52, 208, 255, 120, 93, 231, 119, 181, 141, 250, 3, 27, 129, 120, 84, 100, 242, 69, 122, 39, 152, 250, 67, 245, 153, 156, 167, 171, 10, 13, 46, 204, 182, 238, 186, 252, 172, 42, 78, 26, 117, 226, 209, 199, 236, 229, 154, 210, 43, 73, 160, 0, 52, 170, 65, 158, 135, 127, 196, 177, 61, 181, 42, 37, 14, 51, 225, 157, 10, 154, 166, 60, 236, 126, 105, 138, 236, 232, 73, 242, 246, 230, 9, 207, 15, 148, 120, 53, 199, 78, 241, 168, 103, 137, 3, 61, 92, 21, 32, 29, 219, 151, 33, 228, 204, 160, 161, 107, 28, 136, 248, 213, 230, 202, 153, 179, 135, 183, 89, 126, 225, 220, 254, 145, 216, 30, 102, 96, 244, 243, 213, 95, 8, 153, 111, 33, 156, 246, 127, 163, 206, 155, 207, 172, 52, 254, 230, 121, 70, 177, 109, 172, 49, 59, 44, 229, 48, 254, 52, 188, 33, 252, 117, 14, 172, 33, 247, 149, 98, 180, 188, 250, 130, 165, 244, 62, 83, 216, 56, 201, 197, 192, 3, 112, 98, 59, 130, 105, 0, 58, 174, 210, 84, 151, 16, 71, 141, 157, 46, 59, 76, 116, 147, 77, 42, 25, 62, 211, 206, 151, 213, 191, 206, 93, 52, 77, 246, 60, 235, 183, 94, 237, 149, 229, 168, 201, 128, 230, 56, 190, 42, 30, 122, 168, 106, 170, 123, 104, 245, 143, 253, 163, 125, 96, 90, 143, 12, 164, 25, 198, 17, 21, 16, 127, 184, 96, 210, 179, 1, 38, 75, 115, 233, 138, 156, 77, 1, 101, 184, 187, 24, 250, 52, 183, 127, 199, 9, 234, 17, 195, 7, 212, 103, 26, 48, 250, 121, 48, 65, 161, 217, 102, 198, 101, 163, 118, 193, 168, 229, 61, 209, 55, 248, 197, 64, 87, 161, 51, 205, 47, 60, 72, 208, 91, 236, 119, 216, 13, 92, 62, 224, 216, 168, 226, 53, 141, 23, 253, 183, 180, 51, 200, 70, 246, 129, 63, 26, 20, 187, 179, 51, 203, 76, 54, 14, 42, 121, 136, 255, 40, 59, 33, 123, 32, 105, 141, 106, 110, 224, 96, 184, 206, 203, 65, 120, 130, 51, 226, 121, 255, 255, 110, 169, 95, 98, 72, 15, 41, 109, 57, 61, 214, 126, 188, 59, 228, 83, 15, 123, 36, 233, 91, 76, 128, 225, 6, 234, 57, 191, 125, 163, 201, 117, 3, 214, 200, 82, 26, 192, 118, 165, 35, 244, 31, 4, 221, 192, 57, 85, 146, 229, 209, 229, 1, 43, 64, 145, 74, 135, 249, 14, 234, 11, 179, 78, 11, 118, 68, 54, 210, 128, 50, 157, 190, 43, 161, 99, 77, 143, 54, 189, 199, 131, 141, 80, 173, 148, 112, 127, 109, 63, 124, 32, 57, 51, 196, 140, 41, 176, 115, 123, 211, 186, 116, 157, 237, 73, 68, 185, 231, 199, 92, 106, 55, 8, 234, 214, 144, 156, 126, 251, 42, 88, 125, 245, 49, 238, 28, 38, 171, 111, 113, 12, 78, 75, 93, 255, 135, 13, 97, 159, 185, 249, 92, 19, 188, 28, 91, 76, 81, 147, 169, 38, 31, 54, 158, 92, 105, 98, 212, 183, 64, 144, 188, 103, 87, 62, 2, 163, 221, 47, 67, 86, 246, 3, 118, 89, 37, 225, 223, 3, 11, 138, 135, 80, 107, 247, 44, 58, 67, 94, 205, 38, 50, 117, 13, 154, 39, 34, 73, 172, 169, 250, 17, 174, 146, 206, 68, 100, 36, 208, 71, 99, 194, 135, 64, 145, 229, 71, 112, 216, 21, 137, 134, 243, 127, 128, 60, 27, 81, 182, 194, 232, 134, 184, 117, 52, 91, 82, 244, 235, 214, 47, 183, 143, 152, 166, 23, 215, 103, 4, 47, 233, 52, 226, 97, 224, 138, 133, 108, 45, 167, 123, 16, 21, 191, 88, 14, 98, 144, 194, 214, 153, 152, 48, 232, 35, 154, 203, 218, 223, 38, 155, 77, 71, 133, 116, 59, 146, 104, 94, 33, 229, 177, 35, 85, 48, 110, 154, 73, 102, 58, 135, 237, 3, 229, 228, 243, 188, 159, 203, 76, 128, 49, 28, 37, 145, 104, 151, 163, 119, 248, 11, 97, 88, 127, 220, 177, 170, 7, 179, 144, 152, 133, 207, 14, 119, 47, 131, 167, 23, 152, 162, 91, 136, 199, 221, 194, 215, 124, 156, 33, 54, 233, 181, 225, 241, 42, 34, 214, 42, 235, 117, 37, 114, 92, 192, 165, 146, 165, 227, 25, 33, 241, 73, 86, 152, 184, 114, 80, 210, 32, 135, 115, 26, 13, 61, 101, 49, 153, 233, 87, 25, 32, 117, 132, 180, 162, 101, 233, 118, 164, 179, 198, 137, 87, 92, 117, 249, 127, 178, 92, 42, 122, 239, 193, 26, 169, 249, 195, 58, 208, 79, 219, 217, 220, 4, 252, 165, 143, 60, 242, 110, 107, 12, 6, 112, 255, 204, 208, 56, 172, 158, 110, 215, 237, 60, 218, 18, 150, 114, 90, 157, 115, 121, 130, 59, 84, 254, 139, 68, 207, 27, 197, 51, 38, 2, 113, 6, 197, 124, 253, 10, 36, 127, 47, 82, 192, 185, 37, 100, 185, 67, 202, 214, 118, 240, 255, 69, 159, 70, 143, 41, 50, 88, 18, 193, 55, 220, 214, 121, 114, 2, 156, 18, 99, 26, 232, 181, 33, 32, 144, 199, 102, 103, 208, 68, 45, 104, 217, 4, 135, 228, 169, 207, 38, 91, 213, 13, 249, 150, 149, 9, 109, 45, 56, 10, 41, 223, 98, 36, 225, 81, 102, 44, 8, 93, 213, 71, 251, 220, 111, 40, 114, 139, 198, 243, 111, 92, 49, 77, 200, 79, 18, 231, 210, 174, 238, 86, 49, 207, 196, 184, 155, 181, 2, 71, 102, 70, 128, 177, 143, 31, 84, 31, 144, 131, 57, 95, 153, 45, 151, 10, 204, 109, 127, 32, 88, 101, 218, 6, 231, 74, 95, 187, 152, 160, 169, 206, 74, 124, 28, 172, 184, 213, 51, 50, 199, 222, 53, 83, 175, 210, 60, 26, 184, 161, 154, 230, 20, 229, 109, 70, 190, 195, 18, 233, 19, 105, 93, 1, 24, 179, 214, 31, 60, 211, 123, 16, 236, 176, 221, 183, 13, 87, 209, 30, 252, 95, 202, 139, 69, 92, 148, 198, 243, 246, 216, 96, 249, 246, 96, 55, 3, 178, 75, 136, 234, 99, 146, 147, 218, 15, 186, 140, 213, 6, 95, 159, 174, 218, 244, 4, 227, 47, 244, 59, 84, 129, 211, 207, 67, 172, 214, 139, 4, 31, 227, 48, 22, 113, 156, 20, 173, 108, 67, 147, 169, 91, 63, 190, 64, 217, 200, 240, 62, 224, 40, 42, 33, 8, 68, 215, 189, 0, 118, 69, 19, 99, 252, 164, 99, 6, 219, 252, 213, 255, 53, 75, 53, 249, 236, 165, 13, 148, 21, 244, 212, 203, 75, 32, 27, 236, 246, 178, 24, 152, 7, 24, 170, 176, 57, 21, 205, 250, 77, 27, 129, 107, 171, 226, 202, 135, 82, 173, 233, 79, 77, 249, 94, 249, 75, 224, 149, 211, 146, 92, 77, 50, 193, 183, 142, 229, 59, 97, 101, 159, 247, 173, 139, 67, 60, 11, 95, 53, 50, 211, 243, 163, 40, 223, 255, 180, 130, 169, 184, 169, 99, 201, 95, 57, 194, 42, 19, 129, 28, 229, 197, 55, 51, 186, 150, 158, 159, 101, 224, 25, 87, 145, 86, 87, 190, 194, 209, 131, 60, 93, 171, 162, 171, 43, 104, 141, 42, 96, 221, 94, 236, 94, 33, 166, 178, 114, 31, 216, 201, 226, 126, 32, 141, 25, 234, 67, 39, 177, 163, 38, 12, 17, 151, 203, 201, 141, 235, 122, 107, 223, 224, 221, 99, 145, 73, 253, 84, 241, 224, 195, 116, 65, 73, 72, 226, 85, 170, 174, 213, 75, 245, 249, 78, 132, 27, 231, 204, 125, 145, 43, 97, 123, 50, 230, 179, 153, 96, 177, 67, 86, 18, 41, 182, 149, 92, 96, 254, 49, 127, 208, 159, 236, 74, 249, 173, 130, 40, 39, 178, 7, 136, 85, 227, 210, 242, 84, 135, 17, 77, 58, 43, 188, 204, 89, 162, 28, 231, 14, 70, 1, 50, 157, 68, 38, 4, 155, 244, 98, 153, 173, 25, 184, 11, 160, 69, 77, 192, 134, 27, 224, 122, 239, 52, 154, 44, 227, 103, 80, 113, 3, 233, 97, 90, 49, 151, 158, 190, 123, 194, 212, 153, 147, 135, 171, 127, 60, 168, 114, 212, 118, 86, 243, 126, 205, 58, 198, 134, 101, 94, 42, 156, 204, 228, 146, 218, 49, 44, 193, 40, 45, 113, 15, 4, 33, 37, 122, 4, 94, 101, 115, 91, 173, 213, 60, 225, 172, 172, 218, 41, 16, 89, 10, 196, 141, 36, 75, 50, 178, 174, 179, 160, 121, 223, 211, 170, 44, 131, 66, 77, 205, 198, 149, 42, 72, 218, 125, 166, 223, 140, 98, 97, 108, 237, 249, 166, 57, 126, 176, 230, 193, 75, 211, 43, 236, 145, 23, 36, 200, 239, 156, 159, 111, 235, 108, 215, 133, 13, 60, 100, 216, 195, 76, 63, 106, 207, 15, 240, 3, 30, 145, 201, 111, 212, 232, 130, 36, 45, 58, 178, 29, 115, 245, 194, 127, 236, 218, 193, 25, 64, 162, 120, 179, 115, 201, 242, 174, 49, 74, 97, 232, 132, 120, 245, 127, 77, 1, 28, 49, 138, 114, 85, 68, 242, 4, 99, 0, 197, 36, 207, 186, 129, 129, 134, 152, 143, 166, 191, 210, 247, 21, 94, 118, 129, 164, 138, 149, 245, 170, 131, 210, 191, 115, 241, 191, 19, 17, 154, 207, 128, 45, 249, 26, 6, 87, 102, 5, 126, 233, 169, 201, 219, 188, 245, 90, 163, 25, 225, 59, 71, 201, 67, 49, 218, 64, 152, 16, 165, 68, 76, 143, 40, 206, 82, 198, 100, 64, 50, 141, 240, 110, 47, 250, 49, 176, 24, 253, 151, 70, 73, 214, 74, 4, 227, 96, 60, 139, 44, 150, 167, 161, 169, 10, 247, 216, 95, 155, 17, 229, 173, 254, 142, 202, 232, 246, 17, 200, 22, 163, 29, 145, 2, 154, 202, 243, 113, 65, 228, 142, 133, 8, 70, 113, 172, 239, 26, 107, 41, 249, 99, 104, 217, 213, 77, 20, 1, 103, 204, 167, 174, 43, 182, 39, 120, 119, 194, 131, 133, 222, 5, 91, 235, 169, 87, 24, 119, 73, 12, 77, 10, 238, 239, 150, 218, 71, 217, 253, 10, 90, 13, 246, 122, 18, 71, 40, 97, 152, 73, 124, 187, 22, 3, 99, 205, 88, 16, 23, 145, 131, 251, 62, 197, 21, 203, 7, 215, 195, 192, 226, 119, 138, 139, 94, 88, 178, 106, 147, 11, 171, 71, 101, 98, 134, 60, 195, 192, 97, 27, 66, 26, 110, 171, 182, 156, 222, 215, 222, 15, 162, 72, 201, 205, 237, 30, 172, 145, 98, 86, 254, 56, 213, 198, 121, 152, 33, 108, 120, 80, 207, 179, 113, 68, 21, 18, 57, 230, 88, 55, 236, 240, 137, 94, 21, 114, 146, 166, 76, 109, 128, 180, 197, 107, 210, 226, 254, 169, 169, 237, 99, 99, 5, 87, 218, 153, 247, 70, 240, 21, 243, 213, 21, 91, 149, 78, 59, 68, 37, 75, 99, 246, 36, 110, 41, 153, 92, 195, 70, 60, 240, 176, 140, 161, 167, 214, 203, 138, 184, 232, 243, 248, 43, 12, 127, 190, 161, 148, 206, 113, 23, 133, 69, 72, 174, 97, 169, 226, 182, 67, 24, 163, 132, 136, 181, 9, 94, 181, 92, 88, 41, 116, 221, 71, 32, 50, 30, 151, 8, 150, 135, 66, 208, 134, 169, 133, 252, 149, 246, 172, 35, 147, 149, 228, 179, 114, 230, 53, 159, 121, 127, 130, 195, 160, 128, 151, 178, 243, 96, 33, 138, 238, 191, 144, 231, 149, 207, 237, 33, 86, 251, 209, 110, 249, 88, 73, 75, 179, 90, 7, 62, 76, 200, 186, 22, 225, 40, 154, 121, 173, 212, 22, 195, 227, 159, 65, 145, 237, 80, 109, 93, 233, 34, 6, 91, 181, 165, 210, 72, 216, 59, 22, 204, 207, 75, 67, 36, 98, 152, 3, 131, 72, 54, 192, 166, 129, 110, 125, 233, 84, 191, 75, 53, 163, 69, 93, 205, 101, 119, 130, 14, 15, 146, 99, 212, 102, 146, 214, 243, 41, 191, 50, 24, 9, 172] - ], - "segmentSize": null - }, - { - "encrypted": [ - [173, 83, 247] - ], - "iv": null, - "key": [0, 195, 117, 34, 151, 18, 133, 154, 103, 65, 218, 86, 129, 10, 225, 93, 128, 24, 98, 118, 235, 229, 53, 114, 190, 87, 214, 226, 94, 196, 0, 82], - "modeOfOperation": "ctr", - "plaintext": [ - [184, 146, 37] - ], - "segmentSize": null - }, - { - "encrypted": [ - [187, 32, 40, 5, 22, 143, 180, 147, 150, 234, 57, 21, 17, 180, 232, 158] - ], - "iv": null, - "key": [252, 111, 87, 72, 236, 99, 200, 66, 159, 244, 156, 212, 232, 249, 169, 61, 231, 97, 176, 144, 168, 110, 1, 153, 52, 91, 36, 4, 153, 59, 225, 23], - "modeOfOperation": "ctr", - "plaintext": [ - [96, 146, 201, 56, 8, 169, 99, 88, 234, 251, 220, 168, 95, 69, 159, 6] - ], - "segmentSize": null - }, - { - "encrypted": [ - [52, 213, 210, 71, 76, 254, 246, 56, 209, 97, 139, 42, 83, 143, 162, 254, 143, 25, 229, 215, 41, 222, 69, 239, 96, 154, 226, 65, 12, 193, 169, 245, 250, 218, 49, 47, 254, 41, 139, 189, 112, 118, 144, 149, 147, 121, 229, 172, 71, 155, 133, 45, 105, 106, 197, 65, 122, 150, 231, 8, 22, 37, 144, 33, 36, 116, 3, 23, 170, 122, 111, 255, 171, 157, 167, 236, 208, 244, 15, 244, 13, 202, 117, 26, 110, 145, 162, 233, 107, 142, 167, 26, 172, 52, 125, 75, 237, 38, 186, 187, 246, 105, 53, 44, 96, 30, 187, 14, 245, 88, 187, 213, 49, 156, 127, 123, 240, 68, 36, 74, 194, 69, 235, 133, 174, 203, 8] - ], - "iv": null, - "key": [221, 13, 6, 112, 246, 69, 238, 248, 121, 124, 50, 87, 48, 238, 120, 118, 44, 250, 70, 154, 105, 124, 109, 248, 88, 254, 48, 99, 194, 229, 108, 87], - "modeOfOperation": "ctr", - "plaintext": [ - [203, 25, 219, 31, 152, 142, 245, 29, 54, 124, 128, 104, 4, 114, 109, 22, 209, 15, 87, 57, 169, 27, 126, 144, 184, 105, 128, 144, 195, 187, 184, 177, 44, 229, 60, 240, 224, 236, 121, 160, 242, 27, 9, 51, 37, 148, 1, 23, 167, 176, 75, 91, 161, 35, 157, 160, 52, 217, 77, 164, 115, 46, 1, 36, 83, 70, 181, 182, 168, 225, 14, 12, 171, 131, 190, 96, 57, 201, 99, 115, 100, 180, 59, 96, 104, 10, 79, 61, 199, 19, 242, 93, 137, 151, 63, 61, 15, 192, 5, 154, 171, 255, 179, 116, 128, 227, 252, 105, 100, 28, 210, 250, 243, 161, 225, 219, 53, 201, 175, 142, 69, 220, 102, 145, 202, 154, 155] - ], - "segmentSize": null - }, - { - "encrypted": [ - [76, 152, 18, 38, 175, 39, 125, 251, 88, 63, 126, 230, 175, 176, 56, 89, 72, 192, 178, 168, 48, 55, 113, 143, 156, 0, 154, 157, 46, 21, 57, 111, 216, 156, 160, 217, 213, 187, 230, 240, 227, 240, 79, 26, 38, 77, 247, 143, 69, 166, 8, 190, 236, 103, 209, 254, 10, 50, 2, 187, 34, 97, 138, 85, 183, 228, 206, 214, 253, 134, 205, 34, 113, 55, 53, 39, 29, 20, 74, 246, 183, 3, 99, 249, 54, 15, 132, 7, 202, 114, 46, 113, 211, 162, 40, 99, 3, 132, 32, 206, 114, 25, 184, 141, 8, 9, 46, 177, 95, 208, 222, 166, 55, 144, 206, 249, 131, 44, 97, 17, 232, 37, 102, 85, 100, 194, 174, 140] - ], - "iv": null, - "key": [116, 139, 255, 54, 242, 253, 4, 59, 191, 251, 177, 203, 173, 151, 166, 65, 10, 180, 213, 237, 197, 251, 2, 182, 105, 188, 122, 159, 14, 249, 11, 0], - "modeOfOperation": "ctr", - "plaintext": [ - [227, 168, 65, 163, 90, 69, 84, 91, 213, 118, 247, 2, 131, 199, 156, 85, 90, 220, 201, 100, 56, 139, 189, 22, 3, 69, 213, 146, 76, 73, 54, 120, 100, 106, 31, 135, 54, 217, 159, 21, 6, 54, 133, 42, 75, 174, 248, 229, 51, 104, 147, 44, 43, 13, 80, 92, 227, 59, 3, 226, 20, 70, 242, 142, 114, 219, 88, 52, 229, 90, 95, 2, 90, 139, 25, 221, 1, 36, 90, 208, 113, 140, 241, 48, 15, 157, 25, 248, 189, 212, 146, 75, 94, 38, 90, 36, 8, 26, 47, 250, 181, 189, 237, 57, 17, 8, 212, 193, 202, 92, 170, 36, 12, 87, 45, 176, 177, 246, 171, 249, 232, 36, 131, 27, 24, 150, 160, 8] - ], - "segmentSize": null - }, - { - "encrypted": [ - [225, 76, 115, 42, 205, 191, 185, 12, 63, 5, 6, 134, 154, 61, 56, 103, 88, 85, 186, 133, 59, 164, 241, 206, 24, 158, 57, 213, 52, 131, 98, 84, 226, 153, 255, 39, 221, 70, 38, 170, 6, 64, 15, 117, 178, 48, 61, 114, 180, 254, 48, 196, 230, 58, 174, 233, 86, 39, 9, 47, 241, 35, 184, 144, 185, 29, 17, 21, 96, 141, 213, 74, 209, 200, 129, 203, 166, 8, 47, 157, 42, 68, 66, 120, 22, 43, 54, 25, 201, 241, 88, 186, 177, 17, 85, 93, 120, 235, 18, 170, 89, 129, 170, 114, 106, 20, 101, 219, 135, 37, 135, 122, 189, 35, 100, 221, 119, 191, 236, 229, 110, 10, 1, 187, 25, 91, 9, 227, 255] - ], - "iv": null, - "key": [107, 0, 68, 240, 110, 249, 83, 158, 218, 113, 42, 50, 188, 156, 64, 243, 99, 117, 223, 163, 182, 185, 41, 178, 95, 244, 204, 96, 2, 221, 85, 124], - "modeOfOperation": "ctr", - "plaintext": [ - [51, 44, 102, 164, 109, 86, 234, 187, 207, 22, 219, 235, 25, 45, 209, 38, 186, 93, 237, 101, 153, 79, 61, 214, 244, 217, 195, 147, 180, 242, 44, 212, 131, 52, 98, 19, 244, 47, 54, 43, 130, 29, 240, 162, 228, 201, 165, 146, 7, 175, 69, 7, 93, 74, 90, 134, 25, 227, 250, 251, 230, 151, 111, 129, 200, 63, 19, 127, 15, 230, 190, 165, 43, 106, 186, 65, 31, 84, 150, 196, 160, 230, 104, 6, 123, 11, 11, 202, 150, 62, 22, 158, 168, 163, 133, 201, 91, 205, 190, 109, 72, 90, 31, 75, 221, 50, 200, 224, 161, 66, 134, 11, 220, 179, 96, 68, 100, 12, 42, 188, 198, 222, 86, 91, 142, 110, 219, 24, 168] - ], - "segmentSize": null - }, - { - "encrypted": [ - [12, 203, 106, 2, 196, 227, 168, 142, 55, 236, 118, 246, 206, 196, 100, 81, 168, 58, 111, 66, 80, 152, 75, 116, 18, 229, 139, 176, 176, 165, 23, 25, 251, 254, 161, 56, 209, 86, 183, 212, 170, 203, 82, 236, 77, 124, 111, 58, 14, 16, 221, 176, 221, 37, 146, 159, 239, 90, 110, 156, 75, 89, 81, 228, 252, 62, 217, 97, 116, 228, 129, 253, 92, 142, 22, 192, 90, 107, 201, 109, 211, 68, 182, 117, 27, 165, 101, 168, 245, 99, 125, 158, 201, 37, 173, 255, 214, 224, 9, 93, 143, 126, 234, 67, 179, 201, 94, 178, 151, 17, 101, 47, 188, 220, 227, 192, 169, 150, 96, 41, 238, 19, 183, 15, 70, 81, 33, 244, 87, 154, 195, 250, 154, 113, 253, 197, 0, 36, 229, 11, 67, 131, 28, 103, 242, 56, 32, 46, 107, 60, 95, 152, 88, 61, 194, 0, 139, 134, 48, 53, 119, 35, 232, 229, 117, 181, 101, 166, 177, 205, 106, 78, 112, 103, 105, 212, 68, 202, 187, 202, 214, 113, 194, 255, 197, 158, 133, 197, 155, 216, 160, 94, 198, 34, 170, 244, 181, 82, 145, 174, 132, 170, 112, 39, 126, 107, 31, 122, 79, 166, 63, 184, 56, 106, 155, 90, 129, 54, 63, 193, 33, 44, 165, 0, 38, 29, 115, 97, 79, 50, 168, 34, 140, 33, 232, 126, 187, 60, 247, 73, 85, 196, 244, 134, 147, 77, 49, 168, 193, 115, 229, 80, 37, 19, 248, 245, 27, 34, 117, 6, 192, 147, 92, 103, 134, 87, 200, 99, 207, 111, 59, 158, 210, 22, 166, 150, 56, 73, 183, 157, 234, 46, 97, 33, 222, 205, 138, 144, 116, 252, 219, 15, 223, 195, 107, 166, 199, 102, 14, 101, 165, 61, 243, 204, 75, 172, 109, 91, 117, 197, 57, 120, 89, 107, 248, 239, 105, 212, 160, 209, 132, 60, 129, 234, 196, 234, 227, 13, 168, 237, 244, 229, 95, 96, 107, 215, 98, 12, 108, 54, 127, 111, 0, 71, 73, 97, 117, 22, 14, 224, 21, 149, 177, 185, 20, 203, 54, 25, 95, 225, 91, 244, 5, 6, 86, 229, 40, 209, 178, 44, 89, 82, 47, 253, 127, 19, 143, 37, 25, 124, 43, 160, 115, 8, 197, 187, 16, 42, 200, 158, 206, 119, 227, 224, 192, 174, 102, 64, 216, 198, 55, 220, 238, 163, 212, 107, 0, 88, 58, 88, 122, 179, 76, 7, 167, 124, 36, 73, 113, 145, 110, 100, 177, 108, 23, 56, 227, 164, 135, 125, 141, 56, 245, 137, 24, 233, 122, 250, 61, 94, 187, 240, 147, 134, 119, 192, 203, 146, 14, 207, 129, 116, 232, 10, 25, 255, 170, 164, 139, 209, 50, 227, 12, 97, 102, 127, 141, 251, 64, 105, 77, 11, 26, 110, 139, 166, 232, 157, 93, 124, 100, 126, 138, 40, 131, 130, 75, 174, 47, 50, 56, 92, 107, 58, 17, 82, 188, 17, 118, 188, 238, 184, 212, 164, 220, 166, 27, 129, 76, 210, 79, 61, 171, 204, 32, 238, 95, 132, 156, 177, 40, 232, 13, 182, 107, 139, 30, 239, 184, 163, 164, 215, 205, 222, 231, 195, 140, 128, 81, 190, 9, 9, 244, 242, 210, 66, 101, 18, 247, 172, 51, 54, 243, 199, 12, 4, 141, 12, 95, 141, 22, 108, 228, 141, 43, 185, 51, 22, 84, 132, 228, 214, 169, 35, 243, 50, 222, 225, 121, 1, 10, 246, 36, 228, 31, 136, 59, 147, 146, 40, 155, 16, 86, 3, 57, 204, 130, 33, 150, 239, 126, 60, 156, 149, 146, 228, 14, 205, 217, 15, 107, 62, 200, 98, 94, 141, 104, 185, 64, 46, 15, 226, 30, 177, 194, 15, 58, 231, 33, 232, 225, 186, 168, 99, 161, 220, 223, 93, 221, 53, 96, 176, 97, 191, 127, 61, 14, 189, 181, 116, 156, 22, 92, 211, 221, 234, 110, 30, 119, 214, 96, 157, 218, 114, 9, 67, 130, 61, 243, 32, 196, 181, 152, 15, 76, 52, 95, 202, 56, 103, 224, 7, 17, 15, 200, 25, 223, 148, 185, 72, 225, 240, 72, 123, 155, 167, 106, 54, 45, 164, 212, 207, 48, 19, 217, 67, 194, 234, 168, 235, 66, 54, 223, 62, 225, 252, 36, 53, 131, 208, 156, 54, 25, 137, 115, 91, 240, 57, 37, 233, 6, 182, 182, 27, 43, 0, 24, 249, 30, 185, 159, 29, 16, 170, 101, 13, 84, 132, 1, 93, 233, 248, 167, 198, 59, 169, 33, 175, 149, 19, 6, 211, 192, 152, 68, 151, 235, 50, 131, 171, 58, 233, 201, 87, 181, 47, 63, 77, 18, 24, 101, 206, 58, 220, 111, 188, 161, 47, 97, 44, 69, 226, 52, 37, 122, 197, 84, 133, 185, 27, 116, 111, 223, 175, 13, 229, 234, 136, 161, 151, 134, 157, 133, 246, 179, 198, 83, 91, 190, 118, 42, 148, 221, 98, 231, 59, 2, 157, 0, 129, 69, 109, 10, 170, 24, 180, 160, 148, 126, 76, 159, 63, 70, 242, 233, 23, 173, 79, 87, 154, 220, 186, 214, 248, 207, 108, 128, 94, 216, 218, 179, 159, 28, 179, 126, 250, 169, 204, 233, 253, 112, 184, 234, 99, 251, 75, 243, 147, 10, 90, 201, 203, 135, 209, 113, 50, 125, 19, 52, 228, 135, 97, 167, 78, 238, 57, 222, 118, 31, 85, 49, 112, 70, 5, 11, 9, 132, 236, 134, 234, 182, 176, 27, 80, 225, 153, 177, 129, 51, 62, 59, 191, 190, 9, 134, 107, 187, 104, 226, 88, 106, 63, 104, 103, 240, 129, 184, 57, 102, 8, 45, 191, 206, 135, 31, 219, 195, 181, 13, 151, 75, 91, 54, 222, 70, 85, 111, 252, 111, 117, 15, 145, 9, 199, 64, 15, 255, 174, 82, 188, 166, 45, 207, 199, 35, 125, 243, 229, 71, 55, 48, 246, 225, 34, 140, 54, 198, 139, 237, 188, 230, 87, 46, 4, 213, 137, 23, 245, 232, 248, 175, 51, 22, 135, 41, 201, 175, 133, 85, 115, 125, 169, 93, 234, 134, 231, 237, 240, 28, 208, 208, 54, 14, 130, 41, 71, 2, 84, 240, 134, 131, 9, 84, 117, 77, 10, 50, 60, 108, 79, 84, 112, 39, 165, 89, 172, 169, 148, 119, 10, 243, 135, 103, 196, 27, 64, 120, 2, 221, 143, 50, 83, 78, 98, 224, 89, 66, 102, 159, 222, 198, 246, 212, 161, 59, 104, 75, 176, 78, 187, 171, 196, 201, 214, 197, 82, 71, 207, 147, 11, 151, 113, 68, 152, 113, 238, 79, 163, 144, 233, 238, 153, 179, 187, 12, 172, 167, 25, 160, 161, 248, 149, 50, 92, 156, 151, 156, 175, 251, 45, 101, 15, 218, 121, 102, 109, 181, 249, 185, 239, 208, 217, 34, 195, 54, 114, 223, 208, 217, 0, 200, 53, 92, 182, 163, 38, 70, 78, 99, 151, 145, 129, 230, 97, 20, 59, 27, 253, 191, 214, 117, 216, 102, 45, 26, 224, 57, 152, 169, 164, 240, 66, 10, 51, 160, 58, 236, 34, 13, 125, 209, 87, 142, 216, 176, 185, 225, 72, 74, 235, 35, 37, 238, 169, 39, 86, 2, 64, 147, 111, 244, 184, 167, 99, 199, 40, 22, 162, 33, 64, 80, 145, 219, 226, 103, 51, 11, 126, 91, 211, 207, 85, 206, 2, 226, 1, 119, 16, 112, 101, 107, 82, 6, 66, 71, 187, 198, 250, 190, 218, 88, 43, 166, 204, 154, 248, 215, 195, 41, 158, 84, 6, 175, 161, 79, 28, 64, 79, 67, 47, 61, 141, 37, 230, 229, 45, 235, 74, 48, 127, 69, 234, 45, 15, 225, 246, 47, 227, 3, 96, 46, 230, 200, 164, 5, 123, 47, 134, 165, 102, 252, 95, 172, 199, 118, 34, 135, 153, 9, 206, 47, 35, 189, 74, 194, 52, 139, 182, 187, 158, 78, 177, 111, 113, 45, 166, 58, 86, 18, 237, 255, 174, 24, 155, 36, 187, 6, 246, 56, 117, 3, 69, 36, 175, 33, 24, 86, 115, 15, 89, 25, 163, 79, 151, 165, 90, 207, 197, 246, 216, 201, 153, 63, 16, 181, 157, 225, 188, 198, 184, 2, 220, 87, 244, 179, 34, 199, 1, 43, 18, 87, 222, 255, 154, 227, 4, 236, 5, 7, 59, 27, 144, 250, 49, 141, 202, 143, 191, 136, 52, 233, 60, 124, 201, 107, 73, 144, 240, 156, 57, 52, 105, 190, 218, 187, 46, 206, 164, 84, 240, 67, 118, 224, 132, 85, 138, 62, 222, 247, 27, 150, 190, 177, 49, 144, 162, 183, 23, 9, 222, 39, 234, 118, 146, 5, 134, 63, 76, 42, 242, 33, 12, 104, 161, 137, 93, 217, 49, 105, 71, 213, 122, 155, 72, 86, 50, 1, 139, 214, 104, 113, 47, 99, 155, 4, 43, 29, 27, 197, 214, 50, 151, 196, 59, 161, 140, 243, 190, 244, 23, 225, 78, 218, 24, 107, 78, 59, 160, 89, 27, 104, 154, 192, 66, 129, 90, 144, 221, 141, 53], - [40, 72, 117, 238, 35, 19, 171, 105, 198, 245, 128, 225, 102, 120, 224, 48, 162, 9, 102, 16, 123, 146, 67, 69, 196, 82, 187, 244, 202, 17, 12, 215, 11, 92, 38, 132, 104, 139, 88, 123, 170, 143, 200, 29, 94, 161, 237, 108, 236, 97, 108, 136, 167, 91, 19, 145, 197, 162, 83, 57, 11, 70, 65, 18, 218, 65, 57, 153, 93, 143, 193, 205, 200, 75, 202, 15, 150, 96, 227, 13, 251, 150, 210, 116, 91, 176, 178, 181, 206, 174, 167, 77, 221, 253, 163, 223, 27, 202, 127, 230, 58, 84, 233, 45, 152, 219, 254, 173, 42, 66, 148, 152, 242, 246, 244, 193, 48, 73, 218, 88, 150, 250, 117, 154, 89, 31, 255, 181, 77, 168, 77, 160, 111, 92, 213, 18, 18, 225, 210, 204, 220, 8, 224, 110, 105, 204, 8, 212, 91, 179, 61, 14, 76, 219, 157, 108, 237, 96, 32, 97, 212, 54, 160, 52, 8, 153, 193, 69, 207, 12, 155, 123, 116, 16, 75, 76, 117, 75, 228, 210, 189, 41, 56, 86, 209, 202, 144, 50, 22, 217, 185, 177, 229, 6, 245, 21, 212, 153, 218, 29, 115, 15, 104, 21, 54, 148, 0, 74, 234, 227, 114, 148, 179, 224, 255, 227, 170, 15, 175, 14, 75, 219, 49, 117, 94, 171, 235, 98, 129, 98, 203, 234, 191, 150, 107, 129, 182, 191, 11, 78, 113, 82, 13, 39, 76, 154, 145, 56, 72, 35, 47, 177, 149, 135, 212, 14, 182, 107, 222, 154, 244, 136, 26, 187, 117, 88, 60, 206, 156, 145, 220, 94, 250, 19, 98, 48, 210, 34, 59, 75, 160, 116, 127, 162, 87, 3, 3, 10, 213, 3, 63, 175, 235, 211, 193, 206, 245, 72, 254, 115, 31, 46, 56, 201, 99, 218, 68, 16, 110, 205, 255, 229, 249, 212, 152, 195, 226, 244, 210, 230, 175, 194, 12, 209, 158, 221, 206, 54, 49, 18, 249, 99, 11, 10, 142, 59, 14, 40, 253, 124, 120, 198, 207, 15, 215, 63, 14, 216, 124, 170, 92, 98, 60, 205, 196, 105, 228, 109, 196, 164, 252, 201, 209, 0, 164, 130, 97, 224, 225, 86, 54, 85, 85, 52, 134, 50, 142, 228, 56, 168, 7, 174, 99, 82, 221, 215, 172, 62, 248, 29, 179, 212, 30, 127, 215, 178, 6, 236, 107, 223, 146, 48, 209, 92, 56, 153, 92, 56, 212, 26, 124, 96, 44, 79, 158, 162, 52, 105, 51, 185, 214, 216, 77, 247, 89, 20, 167, 63, 139, 61, 242, 52, 60, 97, 178, 96, 252, 140, 216, 196, 67, 99, 119, 76, 79, 38, 3, 142, 117, 128, 70, 23, 216, 40, 145, 27, 7, 195, 97, 172, 184, 18, 10, 195, 10, 87, 186, 140, 35, 132, 113, 29, 114, 222, 131, 238, 170, 158, 128, 142, 83, 79, 136, 219, 140, 6, 153, 126, 117, 26, 142, 10, 169, 200, 96, 73, 230, 223, 100, 213, 164, 179, 188, 71, 170, 2, 55, 14, 98, 191, 22, 197, 10, 139, 154, 214, 254, 241, 200, 168, 143, 126, 23, 136, 10, 49, 173, 20, 165, 9, 169, 249, 216, 67, 172, 39, 212, 235, 76, 65, 216, 59, 39, 89, 201, 170, 152, 137, 14, 223, 112, 128, 113, 147, 39, 237, 133, 0, 29, 232, 35, 97, 249, 9, 207, 122, 190, 233, 101, 172, 203, 30, 38, 185, 110, 62, 137, 197, 61, 185, 176, 151, 233, 23, 204, 220, 71, 153, 242, 20, 119, 167, 248, 191, 43, 5, 115, 183, 37, 68, 176, 187, 202, 79, 98, 228, 156, 243, 167, 132, 182, 63, 234, 195, 133, 53, 232, 233, 188, 253, 90, 148, 59, 22, 106, 244, 207, 194, 3, 166, 14, 249, 143, 218, 31, 121, 88, 198, 3, 7, 184, 85, 81, 33, 252, 199, 196, 65, 111, 174, 15, 35, 138, 8, 41, 61, 142, 111, 45, 187, 199, 7, 50, 206, 237, 46, 240, 109, 166, 26, 127, 102, 8, 243, 50, 133, 139, 141, 255, 207, 235, 142, 72, 97, 160, 170, 74, 119, 192, 229, 94, 148, 165, 59, 190, 118, 128, 61, 0, 254, 24, 40, 231, 118, 178, 133, 11, 158, 183, 251, 250, 173, 178, 29, 215, 31, 252, 22, 229, 122, 220, 21, 62, 77, 134, 184, 190, 8, 126, 91, 139, 212, 226, 94, 93, 157, 30, 59, 102, 216, 0, 24, 136, 9, 150, 232, 224, 175, 98, 245, 79, 71, 152, 32, 238, 201, 240, 105, 91, 169, 145, 100, 122, 246, 15, 246, 77, 74, 48, 157, 236, 142, 194, 243, 26, 109, 81, 202, 93, 194, 42, 226, 50, 207, 19, 22, 124, 95, 120, 156, 136, 53, 16, 14, 61, 48, 74, 156, 187, 129, 149, 222, 104, 137, 233, 159, 129, 163, 116, 57, 69, 162, 0, 106, 22, 139, 182, 192, 41, 24, 72, 60, 69, 163, 31, 209, 234, 161, 175, 81, 200, 113, 41, 209, 161, 29, 153, 153, 54, 85, 154, 166, 108, 167, 201, 226, 245, 246, 246, 74, 251, 41, 175, 233, 140, 202, 94, 25, 39, 89, 220, 56, 49, 99, 142, 76, 26, 64, 129, 19, 224, 91, 210, 108, 78, 171, 250, 35, 8, 72, 126, 62, 2, 197, 58, 213, 33, 224, 245, 203, 23, 103, 67, 45, 222, 12, 233, 200, 249, 251, 18, 183, 21, 37, 83, 41, 241, 142, 250, 168, 65, 162, 102, 63, 29, 35, 122, 8, 202, 204, 38, 114, 163, 21, 51, 147, 143, 169, 27, 88, 124, 232, 169, 234, 200, 169, 168, 88, 204, 254, 112, 194, 52, 4, 1, 203, 65, 200, 65, 215, 97, 160, 39, 67, 24, 216, 176, 44, 196, 105, 221, 202, 180, 236, 62, 2, 20, 232, 148, 105, 247, 141, 89, 113, 80, 228, 56, 58, 176, 198, 192, 243, 177, 209, 6, 195, 208, 160, 81, 127, 171, 109, 238, 178, 190, 74, 9, 183, 92, 34, 151, 38, 156, 8, 216, 117, 91, 1, 197, 143, 59, 208, 76, 155, 22, 46, 250, 98, 207, 237, 156, 16, 86, 203, 82, 94, 17, 223, 124, 74, 62, 12, 74, 255, 93, 52, 105, 36, 51, 43, 85, 168, 247, 185, 166, 121, 12, 66, 76, 241, 230, 143, 190, 126, 215, 172, 224, 100, 192, 141, 169, 143, 86, 136, 166, 91, 123, 237, 183, 178, 202, 78, 158, 25, 213, 65, 173, 49, 102, 29, 26, 228, 200, 160, 24, 14, 211, 249, 161, 231, 45, 207, 140, 193, 165, 10, 18, 198, 219, 140, 243, 192, 209, 30, 194, 237, 51, 201, 7, 14, 238, 64, 189, 66, 200, 208, 5, 236, 60, 32, 29, 39, 231, 132, 26, 34, 104, 178, 129, 114, 102, 184, 23, 147, 210, 27, 82, 202, 220, 236, 202, 85, 39, 66, 34, 141, 60, 22, 179, 181, 12, 187, 156, 107, 247, 47, 80, 201, 54, 83, 194, 165, 153, 131, 9, 110, 172, 167, 190, 109, 52, 217, 23, 239, 187, 211, 129, 10, 57, 85, 98, 20, 125, 5, 122, 224, 217, 214, 107, 10, 101, 31, 162, 122, 157, 59, 243, 223, 39, 97, 170, 207, 154, 53, 176, 213, 209, 97, 62, 8, 50, 240, 155, 230, 118, 245, 67, 139, 209, 35, 34, 234, 23, 49, 144, 115, 207, 144, 63, 63, 21, 52, 160, 92, 253, 98, 126, 97, 15, 209, 64, 249, 208, 117, 143, 152, 1, 135, 212, 148, 63, 50, 248, 204, 109, 207, 176, 73, 89, 200, 153, 198, 204, 123, 194, 242, 186, 84, 127, 229, 13, 184, 37, 76, 226, 29, 14, 86, 230, 232, 21, 86, 51, 147, 198, 20, 243, 94, 228, 231, 148, 28, 227, 50, 179, 254, 162, 7, 27, 232, 162, 180, 120, 198, 193, 243, 210, 144, 157, 156, 224, 101, 80, 60, 40, 136, 117, 109, 36, 102, 163, 20, 214, 132, 187, 240, 220, 77, 78, 147, 193, 108, 162, 182, 68, 241, 152, 212, 199, 164, 4, 69, 218, 163, 235, 164, 25, 86, 53, 46, 107, 40, 74, 113, 4, 209, 131, 41, 255, 102, 175, 224, 27, 165, 141, 182, 17, 33, 5, 199, 227, 97, 254, 78, 177, 247, 5, 174, 166, 65, 226, 136, 167, 78, 34, 206, 44, 106, 241, 83, 215, 42, 248, 16, 71, 253, 216, 85, 102, 236, 39, 17, 117, 75, 97, 209, 150, 107, 82, 85, 22, 55, 50, 224, 181, 88, 89, 118, 209, 221, 122, 13, 245, 137, 203, 149, 97, 68, 151, 240, 197, 214, 240, 190, 174, 98, 201, 123, 241, 191, 50, 27, 40, 31, 152, 210, 221, 206, 28, 85, 161, 242, 178, 238, 134, 163, 80, 199, 174, 57, 67, 201, 205, 96, 194, 178, 138, 116, 203, 104, 174, 198, 49, 72, 77, 151, 239, 106, 112, 125, 59, 241, 208, 96, 213, 100, 212, 232, 244, 184, 216, 75, 29, 69, 69, 181, 19, 98, 10, 251], - [226, 240, 34, 39, 127, 202, 122, 251, 72, 182, 157, 96, 242, 147, 224, 121, 234, 130, 117, 161, 224, 236, 148, 202, 222, 242, 152, 224, 137, 50, 146, 212, 252, 144, 109, 26, 0, 220, 133, 60, 191, 231, 107, 152, 118, 241, 64, 200, 29, 108, 213, 23, 37, 179, 35, 125, 196, 52, 129, 85, 45, 57, 108, 46, 216, 82, 7, 44, 85, 176, 34, 209, 49, 141, 6, 156, 148, 217, 83, 49, 27, 154, 28, 190, 165, 22, 75, 62, 124, 145, 76, 89, 11, 228, 115, 202, 160, 207, 202, 10, 216, 19, 69, 88, 129, 244, 15, 97, 193, 213, 76, 114, 3, 6, 71, 86, 1, 239, 20, 54, 118, 193, 27, 72, 179, 220, 213, 118, 113, 86, 73, 46, 73, 223, 98, 127, 189, 220, 212, 61, 251, 129, 94, 157, 63, 200, 108, 184, 183, 154, 165, 158, 48, 159, 138, 163, 191, 168, 73, 59, 233, 147, 181, 155, 64, 55, 191, 215, 40, 56, 94, 30, 156, 181, 195, 37, 82, 84, 58, 108, 139, 170, 55, 143, 132, 23, 11, 174, 227, 147, 76, 24, 130, 210, 244, 37, 14, 80, 251, 201, 161, 21, 188, 218, 137, 182, 157, 29, 117, 138, 124, 22, 115, 24, 166, 174, 151, 229, 35, 197, 8, 32, 76, 104, 246, 172, 156, 62, 227, 42, 176, 200, 209, 109, 96, 153, 75, 28, 228, 214, 252, 202, 115, 200, 243, 184, 182, 136, 140, 238, 186, 136, 146, 81, 51, 14, 117, 158, 239, 33, 118, 233, 205, 216, 179, 17, 28, 226, 134, 209, 101, 171, 58, 200, 201, 16, 52, 74, 246, 242, 196, 112, 241, 33, 168, 111, 146, 75, 156, 151, 245, 132, 126, 15, 234, 182, 76, 210, 152, 43, 216, 192, 246, 247, 57, 227, 120, 174, 2, 231, 108, 85, 125, 4, 196, 34, 86, 166, 117, 76, 191, 17, 27, 88, 133, 31, 211, 120, 17, 238, 23, 25, 33, 60, 93, 62, 196, 59, 41, 120, 140, 189, 233, 18, 53, 74, 190, 225, 123, 179, 119, 252, 194, 33, 159, 122, 100, 175, 33, 247, 113, 183, 246, 56, 40, 175, 143, 3, 234, 193, 65, 95, 27, 241, 148, 111, 199, 106, 89, 100, 176, 240, 198, 38, 151, 221, 112, 168, 143, 253, 138, 209, 196, 239, 34, 1, 16, 96, 44, 41, 20, 220, 167, 205, 145, 90, 231, 129, 29, 136, 146, 75, 23, 1, 233, 94, 56, 180, 229, 3, 104, 46, 51, 59, 240, 99, 12, 199, 239, 32, 151, 1, 236, 181, 89, 26, 142, 250, 21, 233, 107, 135, 160, 152, 193, 236, 117, 167, 65, 201, 58, 180, 11, 50, 166, 57, 205, 150, 120, 178, 158, 241, 161, 196, 249, 149, 57, 18, 71, 46, 28, 2, 102, 215, 63, 241, 19, 11, 104, 100, 4, 64, 14, 60, 16, 204, 205, 11, 64, 75, 140, 130, 127, 166, 47, 68, 91, 206, 238, 22, 14, 56, 103, 45, 195, 125, 26, 119, 19, 128, 156, 250, 16, 27, 211, 144, 95, 54, 147, 90, 20, 130, 134, 164, 104, 215, 150, 28, 15, 115, 128, 243, 252, 7, 10, 120, 231, 122, 157, 201, 194, 88, 8, 76, 226, 208, 94, 15, 40, 68, 165, 45, 145, 149, 196, 112, 35, 166, 108, 83, 226, 197, 40, 64, 222, 67, 2, 27, 90, 110, 255, 20, 8, 86, 244, 64, 239, 19, 233, 132, 83, 252, 131, 209, 146, 233, 48, 237, 98, 4, 212, 181, 195, 143, 27, 166, 115, 242, 128, 126, 51, 134, 81, 137, 27, 162, 130, 148, 60, 70, 64, 98, 238, 172, 56, 151, 36, 177, 179, 124, 108, 202, 154, 63, 72, 139, 89, 143, 113, 135, 209, 161, 35, 110, 24, 171, 245, 43, 215, 185, 209, 223, 83, 125, 122, 186, 112, 29, 107, 233, 76, 208, 42, 210, 101, 208, 152, 90, 13, 218, 119, 118, 209, 158, 238, 210, 41, 255, 159, 195, 163, 244, 221, 56, 189, 200, 155, 34, 39, 88, 221, 183, 140, 202, 124, 54, 179, 196, 241, 204, 158, 51, 182, 48, 118, 249, 187, 111, 141, 100, 141, 177, 180, 211, 114, 220, 108, 201, 230, 16, 100, 128, 100, 243, 126, 201, 180, 8, 202, 185, 107, 73, 14, 171, 94, 62, 145, 81, 48, 9, 109, 63, 137, 87, 17, 144, 242, 216, 74, 213, 202, 204, 191, 59, 18, 142, 176, 118, 177, 198, 120, 8, 172, 199, 42, 118, 249, 59, 132, 223, 58, 76, 101, 211, 84, 188, 166, 111, 234, 117, 91, 4, 194, 244, 122, 54, 233, 184, 251, 156, 191, 35, 92, 232, 29, 232, 241, 121, 1, 243, 175, 107, 43, 198, 24, 12, 62, 82, 195, 157, 3, 221, 71, 29, 59, 75, 245, 197, 34, 164, 46, 39, 13, 128, 42, 25, 19, 40, 231, 52, 0, 114, 86, 213, 63, 15, 171, 146, 96, 126, 235, 112, 154, 80, 255, 140, 210, 92, 52, 58, 117, 201, 233, 223, 148, 68, 59, 80, 1, 171, 119, 79, 101, 47, 104, 44, 168, 238, 58, 95, 240, 144, 164, 9, 188, 162, 3, 32, 56, 52, 161, 28, 241, 59, 236, 1, 29, 251, 79, 241, 177, 211, 244, 218, 174, 207, 13, 161, 127, 165, 166, 147, 114, 177, 99, 91, 242, 75, 148, 140, 161, 32, 170, 109, 8, 149, 85, 133, 65, 198, 14, 247, 165, 244, 88, 14, 107, 158, 52, 98, 226, 85, 49, 251, 221, 58, 59, 168, 156, 18, 42, 15, 151, 163, 50, 101, 156, 45, 249, 83, 117, 165, 0, 199, 235, 171, 72, 135, 122, 207, 167, 47, 42, 11, 5, 97, 243, 116, 217, 126, 140, 237, 10, 248, 9, 182, 44, 218, 1, 174, 61, 10, 44, 168, 248, 217, 12, 11, 155, 133, 73, 123, 67, 146, 131, 124, 25, 75, 251, 81, 235, 7, 160, 151, 57, 172, 90, 214, 92, 9, 212, 234, 13, 144, 255, 168, 139, 93, 125, 22, 244, 114, 138, 66, 212, 157, 96, 49, 177, 216, 185, 18, 86, 223, 107, 198, 67, 167, 62, 186, 121, 126, 182, 128, 84, 93, 46, 62, 187, 173, 207, 34, 75, 139, 72, 160, 117, 88, 106, 184, 186, 26, 124, 60, 11, 62, 188, 92, 62, 66, 158, 156, 97, 11, 249, 48, 119, 229, 93, 46, 6, 27, 178, 131, 11, 251, 152, 57, 202, 143, 112, 174, 90, 239, 233, 45, 156, 109, 123, 202, 222, 60, 70, 237, 80, 223, 49, 110, 53, 100, 157, 147, 27, 70, 60, 82, 140, 130, 104, 248, 131, 101, 108, 20, 19, 42, 139, 21, 64, 224, 183, 90, 226, 204, 218, 91, 121, 160, 213, 229, 64, 107, 135, 81, 236, 249, 107, 157, 5, 22, 40, 173, 1, 205, 151, 128, 74, 73, 200, 151, 190, 122, 39, 119, 92, 108, 31, 194, 83, 23, 105, 152, 8, 195, 167, 105, 178, 123, 24, 75, 150, 117, 118, 134, 4, 192, 218, 28, 219, 217, 160, 210, 1, 62, 174, 46, 113, 140, 38, 82, 2, 67, 221, 42, 152, 139, 166, 87, 220, 13, 178, 117, 230, 129, 108, 195, 161, 58, 123, 241, 128, 240, 179, 179, 45, 78, 43, 160, 211, 231, 107, 161, 61, 16, 46, 171, 178, 166, 145, 181, 105, 209, 114, 199, 157, 207, 50, 35, 232, 193, 150, 47, 208, 32, 116, 207, 254, 50, 75, 45, 249, 146, 93, 249, 21, 136, 86, 51, 195, 76, 108, 132, 75, 94, 178, 92, 112, 175, 181, 109, 170, 137, 217, 167, 170, 214, 249, 190, 79, 197, 134, 172, 71, 153, 176, 212, 169, 205, 49, 171, 158, 245, 211, 26, 68, 96, 68, 129, 188, 60, 164, 68, 11, 1, 66, 40, 139, 170, 5, 250, 83, 91, 18, 210, 106, 64, 124, 217, 159, 24, 224, 117, 210, 238, 244, 206, 54, 155, 245, 215, 248, 197, 215, 113, 19, 134, 7, 217, 155, 163, 245, 246, 65, 213, 21, 54, 142, 186, 251, 33, 61, 36, 212, 20, 23, 70, 31, 194, 179, 37, 14, 116, 146, 34, 79, 85, 177, 102, 205, 238, 245, 11, 203, 35, 138, 108, 78, 231, 102, 20, 150, 198, 91, 219, 101, 34, 219, 56, 227, 235, 38, 237, 134, 17, 169, 76, 18, 242, 43, 224, 249, 159, 194, 157, 68, 21, 81, 224, 196, 91, 70, 71, 46, 27, 94, 107, 104, 80, 159, 165, 82, 97, 61, 147, 255, 189, 88, 125, 100, 20, 151, 176, 145, 81, 57, 171, 101, 177, 255, 162, 90, 99, 79, 70, 185, 3, 40, 167, 101, 211, 86, 198, 230, 128, 144, 133, 93, 244, 71, 191, 62, 235, 198, 59, 230, 88, 29, 229, 1, 53, 193, 120, 161, 192, 47, 149, 22, 69, 75, 237, 16, 150, 211, 99, 69, 172, 79, 58, 51, 197, 47, 225, 9, 220, 250, 231, 66, 109, 53, 162], - [127, 159, 29, 137, 234, 184, 159, 68, 215, 187, 15, 201, 3, 231, 199, 215, 235, 164, 82, 198, 191, 205, 26, 48, 152, 119, 1, 116, 168, 50, 27, 118, 238, 50, 78, 156, 187, 202, 36, 227, 149, 78, 113, 0, 230, 167, 193, 252, 195, 145, 206, 58, 107, 239, 192, 181, 132, 244, 216, 33, 5, 63, 245, 193, 75, 57, 61, 82, 63, 13, 110, 51, 12, 50, 191, 165, 93, 55, 114, 73, 121, 27, 86, 171, 240, 136, 58, 61, 73, 58, 119, 50, 33, 59, 181, 11, 172, 110, 229, 50, 155, 56, 106, 121, 40, 172, 72, 253, 148, 17, 139, 98, 73, 145, 244, 93, 116, 133, 240, 44, 89, 134, 203, 167, 157, 33, 207, 154, 141, 149, 45, 69, 157, 211, 160, 153, 57, 69, 84, 222, 112, 65, 225, 24, 38, 16, 161, 76, 159, 215, 160, 7, 225, 154, 122, 232, 160, 222, 241, 131, 55, 15, 112, 141, 219, 131, 227, 247, 101, 208, 113, 239, 30, 121, 52, 84, 68, 37, 148, 8, 255, 198, 147, 158, 178, 255, 220, 11, 230, 20, 29, 200, 121, 192, 133, 191, 191, 192, 71, 167, 19, 169, 65, 52, 235, 116, 219, 142, 108, 218, 58, 212, 232, 126, 144, 137, 22, 105, 92, 187, 87, 163, 147, 127, 219, 128, 159, 26, 161, 98, 42, 146, 41, 62, 54, 105, 153, 45, 147, 16, 167, 38, 189, 19, 1, 171, 147, 190, 106, 120, 103, 190, 141, 28, 131, 180, 107, 118, 44, 129, 126, 58, 100, 28, 10, 5, 32, 69, 255, 252, 231, 41, 176, 247, 158, 159, 171, 43, 159, 212, 53, 78, 108, 112, 32, 59, 96, 118, 98, 255, 44, 122, 210, 173, 26, 248, 113, 111, 22, 235, 173, 183, 1, 71, 124, 224, 197, 142, 162, 231, 220, 191, 113, 47, 111, 174, 52, 78, 209, 157, 132, 16, 217, 124, 81, 121, 115, 114, 49, 202, 122, 239, 227, 236, 23, 37, 213, 7, 212, 150, 28, 15, 172, 8, 198, 174, 31, 50, 181, 122, 22, 146, 165, 197, 105, 122, 148, 23, 51, 231, 221, 88, 142, 169, 127, 40, 46, 219, 228, 208, 241, 198, 200, 98, 174, 59, 70, 232, 53, 120, 175, 58, 233, 180, 48, 152, 252, 133, 244, 172, 146, 154, 74, 217, 219, 25, 79, 17, 189, 88, 244, 245, 89, 195, 134, 112, 102, 61, 198, 191, 161, 142, 202, 56, 192, 162, 196, 189, 255, 169, 0, 241, 42, 185, 243, 8, 179, 228, 211, 127, 12, 47, 117, 29, 41, 208, 142, 191, 187, 166, 32, 69, 96, 156, 144, 186, 171, 71, 97, 231, 75, 116, 118, 130, 239, 213, 138, 246, 168, 181, 85, 93, 213, 116, 207, 74, 173, 171, 186, 54, 66, 135, 146, 60, 235, 64, 215, 42, 73, 82, 89, 230, 110, 45, 122, 197, 34, 152, 178, 98, 211, 79, 30, 136, 193, 158, 146, 228, 38, 202, 195, 171, 0, 234, 167, 85, 38, 130, 157, 17, 248, 177, 242, 1, 115, 144, 42, 196, 173, 231, 239, 21, 90, 168, 46, 10, 114, 8, 174, 246, 60, 116, 187, 186, 17, 151, 174, 176, 89, 212, 30, 177, 31, 117, 134, 239, 223, 12, 48, 146, 48, 15, 83, 53, 240, 135, 156, 177, 230, 211, 249, 120, 146, 183, 246, 5, 46, 78, 55, 164, 95, 131, 112, 89, 101, 23, 140, 50, 133, 95, 106, 212, 28, 97, 114, 32, 3, 28, 66, 188, 88, 194, 55, 239, 32, 44, 104, 159, 187, 193, 58, 74, 101, 44, 84, 100, 21, 18, 55, 248, 83, 211, 219, 142, 189, 199, 11, 240, 166, 211, 95, 133, 12, 180, 221, 11, 199, 103, 88, 97, 78, 22, 143, 237, 5, 189, 223, 94, 64, 179, 199, 70, 59, 136, 140, 201, 57, 194, 26, 153, 188, 0, 76, 111, 52, 129, 1, 38, 99, 244, 67, 129, 217, 195, 35, 254, 200, 51, 240, 120, 184, 166, 202, 156, 126, 182, 197, 237, 8, 53, 218, 223, 111, 55, 254, 196, 142, 219, 201, 65, 47, 37, 51, 216, 84, 203, 85, 185, 223, 185, 138, 248, 215, 95, 114, 204, 66, 53, 188, 225, 194, 38, 148, 167, 124, 42, 176, 224, 180, 87, 173, 141, 168, 146, 148, 54, 212, 20, 224, 111, 92, 150, 70, 164, 149, 105, 204, 61, 252, 63, 163, 178, 22, 120, 229, 225, 223, 22, 152, 240, 76, 230, 11, 253, 78, 230, 127, 55, 57, 167, 67, 185, 30, 204, 44, 128, 136, 101, 232, 23, 41, 79, 69, 205, 145, 107, 191, 196, 96, 215, 207, 204, 246, 169, 245, 43, 151, 249, 185, 163, 107, 98, 231, 185, 83, 186, 69, 102, 98, 61, 17, 241, 222, 177, 132, 129, 99, 26, 13, 141, 154, 237, 186, 183, 70, 71, 65, 177, 90, 162, 84, 146, 92, 23, 179, 204, 172, 1, 168, 202, 54, 138, 161, 188, 181, 51, 91, 235, 27, 168, 53, 139, 32, 15, 77, 174, 88, 99, 116, 218, 180, 69, 12, 42, 70, 179, 73, 218, 114, 252, 152, 212, 242, 203, 149, 204, 111, 230, 167, 245, 63, 138, 242, 206, 204, 245, 63, 66, 88, 245, 170, 220, 73, 101, 95, 234, 198, 154, 18, 65, 120, 13, 35, 175, 107, 22, 192, 26, 203, 219, 70, 167, 15, 56, 62, 66, 39, 150, 185, 36, 66, 131, 185, 94, 76, 41, 152, 68, 169, 45, 75, 118, 254, 64, 5, 227, 105, 21, 224, 19, 198, 194, 141, 154, 226, 163, 251, 17, 20, 154, 71, 60, 241, 160, 154, 224, 221, 231, 254, 195, 0, 200, 9, 33, 135, 56, 87, 15, 250, 198, 172, 128, 23, 43, 184, 19, 85, 231, 137, 204, 38, 184, 164, 151, 69, 161, 87, 78, 173, 206, 68, 24, 24, 34, 5, 178, 102, 196, 209, 28, 51, 126, 170, 154, 18, 74, 191, 240, 14, 138, 194, 118, 138, 31, 197, 113, 176, 118, 119, 114, 82, 4, 224, 109, 183, 42, 218, 35, 124, 15, 73, 133, 214, 181, 249, 172, 44, 229, 185, 53, 229, 45, 19, 19, 99, 83, 75, 91, 172, 42, 70, 191, 239, 166, 204, 203, 80, 108, 63, 101, 203, 130, 253, 227, 29, 236, 56, 39, 215, 50, 239, 102, 210, 175, 141, 155, 195, 163, 128, 109, 231, 175, 203, 91, 254, 231, 153, 33, 19, 174, 247, 100, 98, 82, 127, 52, 24, 6, 120, 172, 111, 97, 251, 240, 177, 16, 32, 167, 145, 8, 211, 24, 23, 55, 167, 53, 32, 154, 88, 78, 96, 54, 243, 166, 158, 115, 63, 120, 212, 181, 178, 151, 42, 184, 189, 74, 175, 71, 218, 155, 84, 3, 164, 40, 7, 18, 5, 233, 52, 95, 207, 237, 26, 88, 96, 6, 113, 100, 251, 88, 158, 180, 237, 1, 153, 84, 5, 210, 121, 189, 139, 119, 222, 117, 155, 26, 229, 247, 120, 81, 167, 116, 130, 222, 23, 155, 158, 188, 183, 89, 250, 238, 246, 106, 253, 203, 68, 9, 106, 61, 175, 140, 126, 13, 211, 110, 184, 89, 158, 144, 45, 53, 164, 40, 56, 167, 25, 42, 140, 13, 113, 67, 20, 209, 98, 111, 205, 23, 114, 142, 174, 63, 53, 43, 207, 153, 97, 100, 66, 201, 47, 1, 154, 133, 39, 108, 188, 236, 15, 34, 96, 148, 45, 55, 126, 192, 26, 146, 141, 8, 191, 171, 241, 167, 30, 89, 91, 147, 111, 49, 250, 38, 99, 93, 208, 60, 181, 68, 229, 238, 234, 13, 81, 7, 24, 113, 159, 98, 200, 165, 197, 42, 192, 235, 194, 135, 168, 0, 10, 11, 178, 115, 253, 234, 52, 231, 114, 223, 26, 163, 30, 105, 86, 10, 70, 214, 92, 175, 12, 66, 9, 244, 180, 171, 95, 141, 186, 50, 13, 62, 94, 99, 47, 19, 110, 183, 27, 164, 28, 48, 149, 53, 185, 109, 148, 209, 58, 49, 31, 46, 181, 111, 169, 235, 112, 86, 22, 231, 105, 169, 184, 171, 159, 20, 102, 87, 153, 76, 168, 62, 170, 164, 69, 48, 151, 222, 88, 120, 229, 143, 8, 71, 107, 142, 41, 22, 110, 207, 59, 7, 14, 66, 137, 118, 75, 75, 138, 163, 150, 240, 173, 146, 109, 244, 248, 189, 109, 3, 32, 165, 88, 67, 160, 171, 241, 36, 141, 9, 221, 138, 194, 232, 211, 84, 104, 104, 161, 31, 198, 254, 149, 116, 235, 213, 229, 163, 54, 78, 216, 143, 138, 13, 171, 127, 23, 80, 4, 4, 36, 237, 254, 203, 78, 22, 204, 104, 103, 173, 53, 168, 111, 195, 217, 23, 228, 230, 52, 44, 89, 216, 159, 182, 111, 12, 12, 128, 42, 103, 33, 14, 130, 154, 129, 232, 245, 176, 99, 21, 68, 83, 190, 212, 168, 186, 51, 229, 44, 190, 3, 124, 145, 251, 66, 139, 142, 110, 69, 86, 47, 254], - [123, 167, 27, 64, 42, 157, 167, 55, 181, 142, 108, 196, 213, 190, 242, 52, 62, 17, 137, 200, 82, 166, 7, 122, 163, 248, 59, 196, 153, 19, 152, 126, 79, 76, 244, 194, 70, 202, 225, 133, 62, 104, 237, 137, 71, 213, 249, 197, 143, 35, 61, 18, 188, 205, 80, 34, 172, 146, 142, 0, 11, 198, 33, 96, 87, 122, 154, 151, 136, 119, 122, 188, 203, 234, 9, 123, 37, 87, 247, 139, 63, 154, 221, 233, 125, 228, 142, 179, 74, 72, 180, 73, 158, 251, 182, 172, 105, 63, 150, 221, 32, 254, 33, 215, 216, 123, 39, 116, 58, 130, 87, 43, 243, 251, 19, 172, 162, 105, 129, 90, 160, 221, 253, 109, 231, 191, 122, 71, 16, 138, 94, 58, 221, 71, 25, 167, 252, 237, 34, 137, 226, 241, 103, 140, 163, 200, 244, 28, 213, 74, 73, 181, 77, 38, 139, 213, 62, 28, 226, 167, 137, 21, 101, 186, 105, 1, 161, 63, 248, 60, 244, 73, 12, 103, 99, 203, 174, 231, 158, 211, 213, 93, 228, 112, 176, 68, 23, 220, 159, 46, 210, 211, 63, 38, 101, 146, 250, 235, 118, 83, 186, 139, 244, 106, 235, 149, 34, 251, 222, 160, 137, 82, 201, 23, 248, 119, 12, 63, 38, 49, 235, 222, 111, 174, 17, 45, 192, 156, 56, 179, 135, 251, 193, 84, 200, 92, 225, 160, 120, 222, 115, 71, 80, 187, 225, 131, 27, 109, 100, 36, 246, 177, 97, 219, 219, 236, 119, 156, 95, 67, 130, 105, 96, 223, 74, 239, 92, 33, 165, 120, 196, 6, 238, 168, 215, 129, 32, 60, 127, 224, 178, 179, 161, 102, 15, 148, 191, 130, 216, 31, 170, 135, 87, 218, 107, 139, 5, 204, 197, 252, 158, 107, 41, 151, 8, 87, 210, 36, 169, 190, 209, 112, 8, 21, 215, 37, 245, 136, 130, 62, 76, 180, 186, 252, 76, 113, 220, 201, 162, 87, 60, 84, 217, 118, 140, 237, 228, 12, 215, 142, 150, 252, 48, 42, 63, 28, 176, 240, 218, 65, 133, 127, 52, 200, 40, 180, 228, 2, 107, 191, 132, 246, 50, 165, 157, 6, 60, 193, 255, 178, 147, 52, 208, 126, 246, 61, 162, 103, 187, 105, 229, 60, 250, 183, 191, 122, 168, 182, 14, 24, 166, 238, 115, 17, 191, 205, 74, 33, 166, 95, 0, 221, 19, 132, 81, 157, 146, 158, 140, 212, 91, 231, 16, 247, 139, 28, 58, 78, 28, 191, 162, 143, 133, 26, 154, 49, 154, 10, 225, 201, 191, 1, 87, 34, 212, 81, 206, 164, 242, 226, 14, 166, 41, 23, 218, 82, 50, 201, 36, 224, 164, 75, 28, 86, 87, 65, 96, 65, 176, 99, 17, 128, 207, 183, 69, 187, 53, 186, 131, 2, 107, 110, 117, 230, 196, 230, 165, 146, 177, 36, 138, 246, 182, 176, 240, 81, 112, 234, 126, 135, 195, 216, 136, 48, 130, 168, 171, 124, 154, 15, 93, 192, 203, 136, 233, 73, 215, 237, 125, 10, 212, 46, 202, 247, 159, 95, 169, 252, 28, 249, 213, 51, 41, 28, 80, 48, 21, 251, 235, 209, 180, 160, 4, 233, 63, 107, 108, 125, 171, 61, 122, 139, 150, 68, 251, 67, 118, 170, 214, 230, 57, 25, 67, 46, 228, 141, 159, 52, 213, 50, 105, 45, 90, 217, 18, 136, 148, 221, 118, 196, 88, 231, 117, 250, 130, 35, 227, 13, 16, 230, 104, 138, 106, 178, 147, 147, 121, 238, 3, 40, 4, 5, 133, 117, 245, 13, 37, 122, 168, 109, 44, 139, 207, 195, 7, 67, 92, 124, 84, 193, 35, 76, 248, 219, 42, 232, 109, 229, 11, 136, 41, 2, 140, 53, 54, 66, 170, 67, 84, 228, 165, 56, 245, 132, 57, 24, 104, 83, 19, 254, 196, 62, 0, 114, 115, 197, 146, 169, 218, 117, 191, 142, 59, 153, 81, 120, 36, 210, 107, 172, 132, 74, 209, 84, 200, 44, 120, 232, 225, 187, 202, 158, 24, 129, 214, 209, 64, 224, 110, 95, 130, 251, 134, 96, 112, 179, 91, 69, 35, 45, 58, 188, 209, 38, 223, 53, 135, 221, 75, 60, 19, 50, 100, 202, 138, 119, 98, 102, 39, 61, 230, 140, 49, 86, 142, 252, 51, 212, 74, 118, 16, 92, 65, 28, 114, 24, 187, 148, 25, 164, 54, 230, 182, 8, 7, 137, 140, 75, 98, 139, 172, 160, 34, 90, 187, 104, 99, 144, 185, 236, 175, 175, 163, 140, 153, 41, 228, 163, 65, 223, 64, 147, 237, 172, 122, 203, 17, 203, 223, 149, 130, 132, 6, 225, 164, 148, 98, 227, 94, 246, 101, 147, 226, 251, 176, 47, 53, 224, 243, 250, 198, 66, 57, 119, 119, 153, 27, 31, 214, 82, 167, 220, 196, 56, 73, 118, 183, 219, 209, 112, 28, 175, 97, 82, 182, 11, 253, 103, 174, 74, 175, 171, 9, 155, 217, 250, 75, 222, 201, 178, 171, 131, 208, 214, 41, 71, 144, 24, 96, 119, 229, 85, 48, 196, 140, 66, 122, 33, 166, 58, 253, 231, 52, 20, 133, 80, 46, 217, 163, 248, 159, 252, 185, 148, 95, 121, 104, 49, 146, 15, 47, 36, 120, 94, 30, 201, 174, 14, 148, 209, 154, 86, 127, 113, 62, 188, 107, 117, 171, 158, 213, 187, 128, 147, 163, 100, 105, 174, 56, 188, 41, 147, 91, 186, 191, 52, 195, 183, 239, 140, 222, 47, 225, 63, 28, 50, 214, 1, 4, 238, 225, 138, 94, 95, 254, 38, 133, 243, 255, 169, 176, 153, 79, 20, 222, 136, 246, 29, 152, 48, 219, 75, 184, 45, 107, 3, 36, 139, 216, 159, 185, 159, 223, 246, 52, 83, 20, 125, 200, 11, 112, 141, 227, 37, 59, 199, 46, 14, 217, 89, 115, 3, 1, 127, 223, 248, 113, 198, 158, 53, 25, 14, 118, 250, 36, 78, 157, 36, 32, 1, 103, 199, 139, 198, 111, 13, 175, 152, 74, 23, 147, 168, 55, 94, 3, 245, 20, 159, 57, 60, 68, 37, 193, 101, 4, 22, 148, 99, 121, 251, 164, 43, 130, 155, 196, 97, 127, 161, 247, 180, 30, 28, 20, 60, 107, 97, 190, 230, 173, 137, 176, 16, 93, 75, 152, 12, 91, 65, 106, 3, 86, 181, 249, 125, 56, 77, 201, 174, 35, 44, 217, 99, 13, 173, 10, 210, 44, 70, 251, 79, 4, 149, 46, 7, 84, 48, 244, 220, 47, 121, 117, 189, 68, 230, 34, 171, 67, 165, 6, 190, 155, 106, 203, 47, 136, 127, 142, 92, 192, 13, 214, 221, 134, 64, 49, 193, 184, 33, 63, 240, 134, 69, 8, 245, 148, 89, 180, 9, 34, 40, 107, 31, 78, 205, 233, 92, 196, 21, 192, 81, 107, 195, 88, 213, 229, 78, 145, 83, 178, 42, 198, 172, 154, 176, 244, 164, 31, 30, 237, 146, 0, 170, 145, 82, 137, 69, 192, 25, 213, 159, 79, 15, 236, 12, 123, 139, 131, 241, 233, 59, 59, 241, 182, 98, 132, 211, 141, 178, 38, 111, 82, 62, 190, 72, 167, 233, 40, 220, 123, 228, 119, 217, 186, 131, 61, 201, 21, 112, 27, 41, 232, 126, 244, 157, 115, 70, 240, 34, 190, 148, 54, 121, 252, 105, 37, 28, 101, 229, 143, 171, 3, 73, 241, 79, 124, 46, 53, 61, 27, 154, 116, 233, 67, 226, 147, 187, 57, 228, 210, 126, 87, 186, 89, 150, 22, 254, 202, 147, 166, 225, 203, 157, 92, 97, 12, 140, 215, 249, 93, 187, 210, 136, 198, 200, 237, 1, 88, 223, 91, 238, 48, 100, 194, 55, 173, 29, 172, 32, 164, 65, 37, 185, 223, 173, 70, 188, 238, 208, 197, 197, 153, 143, 97, 136, 75, 34, 255, 4, 9, 113, 189, 241, 230, 203, 141, 20, 117, 212, 230, 46, 181, 199, 75, 88, 148, 35, 57, 101, 93, 151, 158, 112, 190, 177, 48, 104, 13, 150, 125, 139, 226, 92, 36, 122, 161, 40, 108, 53, 24, 101, 26, 7, 35, 198, 79, 120, 188, 177, 152, 74, 110, 226, 242, 215, 117, 12, 160, 1, 193, 142, 80, 213, 121, 250, 233, 241, 151, 114, 89, 146, 129, 250, 106, 48, 196, 172, 5, 5, 226, 153, 229, 142, 22, 52, 15, 155, 19, 9, 54, 182, 62, 186, 10, 124, 18, 43, 160, 31, 0, 123, 208, 221, 225, 176, 133, 234, 126, 135, 41, 97, 116, 243, 60, 50, 63, 36, 219, 175, 133, 204, 75, 56, 128, 37, 128, 123, 157, 188, 246, 154, 121, 23, 146, 22, 4, 84, 74, 234, 74, 87, 209, 38, 143, 100, 110, 183, 12, 153, 169, 34, 248, 121, 191, 246, 141, 234, 109, 204, 123, 67, 168, 253, 227, 37, 8, 123, 47, 49, 105, 224, 250, 185, 67, 123, 12, 203, 125, 208, 15, 34, 0, 243, 144, 27, 181, 218, 177, 25, 21, 97, 21, 249, 5, 0, 187, 216, 146, 228, 162, 143], - [141, 100, 52, 138, 99, 117, 181, 113, 36, 0, 188, 40, 129, 209, 194, 58, 50, 255, 198, 141, 223, 96, 125, 255, 219, 102, 153, 176, 206, 241, 228, 148, 146, 29, 186, 64, 193, 1, 168, 176, 106, 66, 203, 89, 186, 47, 187, 140, 11, 167, 37, 121, 192, 139, 28, 138, 104, 78, 59, 155, 181, 233, 172, 33, 7, 122, 215, 189, 140, 159, 222, 34, 228, 134, 57, 198, 126, 175, 85, 234, 8, 148, 243, 35, 44, 39, 232, 203, 64, 5, 255, 70, 129, 118, 161, 207, 203, 63, 220, 157, 108, 187, 5, 53, 72, 24, 193, 34, 64, 223, 179, 213, 58, 101, 148, 205, 139, 108, 57, 238, 59, 252, 27, 61, 63, 52, 85, 155, 224, 166, 99, 103, 26, 77, 201, 100, 59, 128, 70, 147, 19, 232, 194, 72, 195, 118, 102, 212, 142, 247, 54, 236, 163, 216, 210, 4, 164, 174, 196, 162, 97, 27, 240, 170, 254, 54, 210, 20, 182, 166, 3, 119, 45, 36, 11, 8, 208, 184, 171, 14, 118, 187, 201, 0, 101, 182, 191, 26, 193, 20, 189, 40, 3, 162, 127, 218, 165, 254, 185, 176, 182, 91, 221, 56, 91, 136, 28, 25, 34, 171, 212, 209, 44, 132, 206, 48, 114, 236, 3, 216, 216, 72, 103, 190, 4, 32, 39, 196, 165, 67, 70, 195, 15, 204, 14, 128, 120, 170, 99, 225, 56, 123, 64, 212, 73, 1, 118, 3, 9, 66, 207, 212, 172, 138, 29, 45, 59, 22, 2, 74, 177, 195, 25, 0, 54, 133, 153, 180, 120, 47, 111, 26, 51, 248, 206, 107, 220, 73, 97, 40, 49, 211, 191, 58, 64, 188, 66, 195, 77, 24, 3, 186, 85, 171, 160, 211, 174, 38, 95, 132, 210, 202, 160, 55, 98, 129, 58, 154, 53, 20, 89, 112, 187, 50, 64, 34, 41, 94, 64, 10, 112, 243, 247, 108, 223, 239, 87, 87, 200, 72, 1, 220, 92, 218, 11, 178, 72, 206, 106, 181, 18, 158, 14, 79, 156, 230, 94, 214, 254, 192, 7, 58, 117, 242, 70, 235, 83, 12, 114, 52, 135, 168, 69, 128, 241, 127, 71, 173, 159, 127, 16, 7, 116, 230, 238, 7, 172, 12, 171, 136, 83, 209, 40, 152, 39, 20, 111, 227, 84, 1, 187, 28, 94, 40, 128, 225, 228, 5, 97, 222, 107, 105, 241, 180, 159, 29, 20, 176, 213, 80, 21, 232, 19, 122, 226, 31, 254, 128, 176, 106, 59, 49, 243, 146, 175, 241, 36, 118, 86, 58, 42, 54, 111, 213, 238, 174, 195, 49, 67, 218, 83, 104, 216, 97, 164, 92, 37, 199, 200, 197, 95, 139, 236, 144, 96, 105, 164, 87, 39, 244, 182, 142, 181, 124, 120, 210, 214, 164, 250, 15, 159, 207, 196, 178, 119, 148, 74, 251, 24, 200, 88, 116, 208, 168, 232, 161, 142, 213, 89, 149, 115, 105, 30, 197, 162, 146, 8, 151, 223, 94, 233, 191, 215, 209, 177, 62, 19, 214, 102, 37, 136, 95, 181, 80, 91, 249, 86, 153, 165, 77, 7, 184, 255, 240, 130, 24, 28, 223, 179, 32, 131, 253, 219, 95, 9, 37, 6, 165, 247, 166, 38, 101, 196, 37, 132, 96, 209, 46, 56, 123, 88, 100, 220, 172, 73, 135, 129, 208, 145, 46, 75, 150, 37, 94, 5, 62, 104, 110, 233, 165, 103, 165, 111, 167, 18, 237, 124, 225, 200, 44, 200, 103, 255, 186, 213, 35, 2, 110, 205, 152, 196, 10, 244, 33, 226, 84, 123, 48, 188, 251, 80, 68, 122, 93, 128, 24, 31, 15, 79, 164, 199, 195, 105, 146, 101, 182, 210, 100, 194, 102, 237, 40, 204, 242, 64, 98, 166, 165, 105, 76, 79, 107, 208, 125, 248, 170, 19, 78, 223, 141, 27, 133, 69, 14, 50, 87, 123, 224, 175, 202, 233, 78, 63, 131, 206, 33, 32, 85, 137, 137, 204, 124, 188, 60, 170, 149, 153, 187, 30, 156, 72, 254, 156, 19, 27, 80, 9, 227, 119, 137, 142, 14, 104, 173, 69, 155, 179, 34, 155, 195, 58, 33, 230, 119, 60, 142, 225, 244, 14, 209, 239, 228, 78, 100, 90, 70, 66, 22, 251, 13, 47, 85, 149, 44, 59, 61, 228, 229, 208, 37, 48, 66, 9, 207, 114, 125, 51, 199, 63, 97, 216, 155, 144, 179, 104, 109, 153, 23, 219, 245, 115, 191, 238, 114, 166, 219, 54, 231, 200, 86, 126, 53, 71, 128, 196, 122, 196, 236, 16, 43, 3, 145, 173, 252, 238, 153, 82, 152, 73, 228, 65, 138, 52, 177, 173, 219, 157, 241, 54, 61, 65, 27, 240, 129, 62, 45, 79, 50, 239, 118, 161, 136, 198, 98, 164, 233, 65, 178, 253, 135, 81, 190, 101, 122, 15, 203, 242, 246, 16, 189, 244, 193, 229, 215, 113, 86, 13, 0, 219, 251, 176, 53, 212, 200, 189, 100, 130, 75, 144, 40, 69, 156, 62, 169, 119, 75, 191, 119, 22, 156, 99, 165, 163, 205, 80, 57, 63, 198, 47, 134, 87, 42, 110, 8, 55, 196, 53, 180, 179, 57, 107, 82, 19, 142, 84, 123, 99, 37, 133, 199, 209, 211, 208, 191, 47, 64, 68, 220, 167, 235, 100, 117, 22, 123, 33, 211, 133, 53, 17, 30, 19, 191, 98, 30, 4, 190, 240, 39, 192, 60, 51, 102, 247, 112, 15, 129, 255, 62, 139, 204, 112, 100, 144, 235, 175, 235, 81, 212, 172, 146, 179, 51, 40, 90, 94, 204, 121, 103, 166, 254, 236, 18, 115, 77, 61, 214, 41, 45, 106, 111, 158, 66, 90, 126, 220, 212, 41, 63, 222, 206, 242, 46, 203, 196, 30, 235, 90, 82, 200, 86, 13, 194, 78, 94, 119, 105, 103, 60, 14, 129, 189, 63, 206, 85, 9, 221, 173, 21, 25, 92, 64, 232, 203, 253, 89, 25, 171, 76, 91, 182, 105, 78, 78, 174, 139, 50, 155, 249, 123, 156, 43, 38, 241, 124, 173, 126, 30, 66, 178, 212, 166, 4, 35, 43, 172, 109, 143, 86, 107, 175, 69, 73, 252, 71, 19, 85, 205, 153, 56, 79, 178, 228, 191, 77, 242, 102, 47, 127, 183, 167, 235, 75, 213, 164, 48, 44, 21, 62, 206, 189, 243, 115, 193, 109, 227, 194, 39, 38, 237, 96, 181, 98, 203, 15, 2, 191, 30, 94, 69, 89, 136, 184, 115, 41, 50, 224, 172, 199, 36, 41, 50, 23, 179, 87, 168, 71, 224, 21, 3, 76, 22, 70, 52, 141, 244, 50, 20, 159, 247, 236, 70, 74, 65, 163, 131, 2, 174, 138, 135, 44, 218, 51, 73, 234, 20, 47, 201, 198, 220, 1, 208, 167, 236, 65, 42, 202, 3, 66, 8, 55, 135, 196, 219, 231, 212, 173, 62, 213, 250, 229, 14, 103, 169, 27, 89, 211, 78, 215, 47, 109, 149, 177, 199, 180, 183, 168, 86, 17, 185, 242, 108, 42, 139, 183, 87, 80, 2, 241, 148, 80, 246, 207, 11, 63, 50, 249, 50, 66, 176, 114, 221, 95, 53, 219, 94, 165, 113, 134, 152, 186, 151, 147, 253, 214, 133, 93, 190, 33, 198, 30, 29, 3, 173, 208, 17, 118, 180, 231, 87, 31, 137, 108, 208, 142, 169, 45, 63, 107, 243, 130, 87, 38, 148, 205, 29, 236, 42, 231, 191, 192, 233, 252, 34, 237, 107, 242, 207, 182, 135, 60, 228, 40, 59, 16, 28, 88, 229, 81, 215, 36, 48, 124, 90, 174, 49, 71, 114, 203, 248, 216, 34, 195, 234, 67, 4, 122, 84, 242, 98, 44, 207, 102, 174, 107, 175, 73, 15, 77, 140, 210, 241, 6, 55, 93, 167, 205, 217, 201, 239, 212, 42, 85, 70, 247, 96, 112, 212, 80, 215, 139, 41, 193, 107, 88, 197, 185, 25, 213, 231, 62, 79, 94, 161, 158, 4, 222, 143, 122, 137, 74, 70, 199, 155, 244, 31, 53, 28, 151, 54, 197, 70, 245, 117, 80, 15, 226, 129, 250, 120, 170, 53, 185, 32, 192, 105, 95, 116, 98, 38, 218, 121, 204, 107, 149, 189, 224, 46, 134, 121, 93, 148, 6, 189, 168, 76, 144, 42, 195, 35, 150, 29, 109, 55, 18, 230, 91, 89, 203, 114, 188, 223, 221, 38, 96, 190, 173, 148, 59, 235, 108, 181, 25, 61, 2, 197, 142, 186, 61, 197, 250, 171, 64, 76, 245, 82, 114, 17, 114, 31, 71, 178, 91, 199, 36, 191, 179, 170, 12, 169, 54, 137, 153, 81, 255, 26, 30, 62, 33, 142, 248, 105, 122, 62, 4, 1, 60, 230, 182, 168, 79, 137, 34, 68, 53, 170, 159, 145, 148, 135, 246, 215, 163, 146, 80, 64, 124, 126, 195, 67, 134, 185, 62, 183, 189, 58, 3, 182, 92, 214, 160, 34, 34, 33, 78, 127, 162, 65, 67, 108, 76, 22, 203, 55, 248, 194, 167, 64, 11, 171, 130, 181, 228, 157, 146, 70, 88, 13, 181, 178, 202] - ], - "iv": null, - "key": [157, 202, 105, 47, 196, 141, 152, 2, 39, 53, 179, 3, 23, 150, 181, 153, 94, 86, 154, 141, 235, 133, 250, 53, 162, 26, 220, 70, 191, 7, 10, 99], - "modeOfOperation": "ctr", - "plaintext": [ - [209, 225, 91, 198, 203, 13, 178, 146, 114, 80, 150, 44, 170, 41, 141, 146, 39, 152, 122, 124, 235, 38, 17, 62, 53, 182, 233, 164, 56, 234, 252, 43, 5, 129, 60, 87, 198, 237, 252, 62, 4, 244, 117, 86, 203, 170, 183, 108, 172, 244, 234, 45, 72, 133, 75, 22, 75, 118, 200, 224, 183, 80, 46, 206, 162, 182, 142, 44, 5, 26, 216, 41, 250, 193, 122, 34, 179, 161, 143, 174, 37, 126, 121, 212, 78, 15, 219, 149, 95, 237, 185, 0, 128, 229, 190, 168, 8, 59, 49, 46, 250, 219, 25, 193, 236, 212, 153, 40, 5, 21, 219, 102, 31, 72, 224, 22, 161, 109, 57, 215, 42, 1, 170, 66, 122, 5, 85, 188, 13, 69, 56, 73, 65, 157, 211, 64, 73, 75, 139, 52, 149, 11, 183, 67, 100, 174, 162, 150, 221, 7, 82, 125, 112, 252, 123, 193, 27, 163, 46, 74, 176, 69, 27, 201, 152, 118, 205, 61, 191, 121, 4, 196, 138, 241, 232, 241, 187, 72, 246, 210, 55, 19, 122, 43, 212, 175, 79, 188, 238, 199, 67, 188, 184, 197, 47, 142, 51, 110, 104, 61, 246, 9, 57, 53, 69, 147, 61, 153, 130, 11, 223, 63, 18, 250, 61, 122, 131, 142, 214, 113, 44, 43, 90, 154, 216, 113, 1, 69, 226, 117, 212, 218, 113, 38, 221, 33, 253, 137, 82, 245, 131, 66, 68, 109, 105, 153, 250, 54, 16, 97, 20, 47, 129, 104, 113, 6, 235, 102, 44, 212, 147, 2, 10, 155, 199, 35, 246, 206, 242, 13, 250, 246, 13, 7, 252, 254, 38, 194, 152, 43, 44, 82, 186, 170, 172, 46, 254, 137, 24, 69, 87, 115, 241, 189, 195, 147, 206, 1, 8, 21, 44, 205, 208, 214, 160, 222, 140, 130, 202, 205, 184, 162, 104, 238, 123, 241, 91, 227, 110, 115, 6, 110, 22, 130, 220, 205, 98, 244, 79, 9, 81, 186, 118, 216, 150, 85, 78, 76, 88, 114, 207, 111, 61, 46, 222, 225, 11, 152, 104, 242, 124, 132, 8, 32, 119, 201, 223, 218, 203, 30, 99, 230, 99, 93, 68, 226, 230, 203, 49, 197, 41, 0, 221, 9, 132, 108, 231, 12, 114, 147, 209, 76, 1, 13, 202, 206, 238, 227, 220, 9, 197, 67, 197, 178, 44, 54, 181, 251, 154, 126, 237, 138, 208, 104, 211, 169, 130, 1, 236, 204, 11, 42, 25, 23, 214, 58, 47, 19, 232, 159, 111, 204, 189, 171, 38, 249, 79, 190, 102, 253, 232, 254, 177, 233, 174, 58, 32, 186, 88, 195, 187, 229, 74, 205, 10, 15, 69, 168, 147, 238, 32, 218, 135, 207, 125, 57, 75, 203, 66, 252, 181, 47, 109, 15, 245, 153, 242, 142, 25, 43, 17, 232, 21, 92, 219, 1, 156, 125, 63, 153, 101, 29, 87, 207, 249, 99, 61, 141, 173, 37, 189, 55, 185, 31, 213, 69, 40, 185, 12, 17, 255, 143, 162, 45, 51, 161, 58, 226, 85, 32, 160, 33, 56, 45, 40, 143, 66, 241, 97, 79, 54, 28, 22, 20, 247, 161, 39, 248, 11, 65, 167, 105, 49, 153, 139, 15, 31, 199, 122, 203, 40, 204, 40, 248, 29, 97, 194, 51, 191, 142, 69, 255, 242, 27, 159, 176, 45, 240, 26, 139, 70, 45, 252, 215, 67, 37, 113, 117, 131, 48, 40, 172, 111, 244, 152, 235, 27, 192, 164, 158, 77, 153, 110, 76, 89, 232, 238, 30, 157, 115, 164, 76, 125, 238, 149, 227, 14, 176, 178, 3, 211, 219, 28, 99, 52, 74, 129, 246, 126, 149, 199, 32, 135, 108, 216, 252, 20, 247, 41, 85, 122, 61, 74, 205, 21, 208, 117, 58, 25, 30, 15, 141, 78, 49, 104, 98, 101, 30, 37, 223, 164, 22, 128, 221, 168, 246, 135, 121, 0, 19, 29, 162, 20, 114, 82, 167, 208, 221, 31, 22, 12, 60, 242, 237, 115, 88, 45, 81, 251, 10, 224, 208, 118, 86, 104, 255, 41, 192, 249, 58, 33, 255, 104, 54, 71, 23, 212, 168, 12, 250, 196, 238, 164, 29, 65, 7, 184, 199, 19, 119, 214, 3, 146, 133, 15, 59, 159, 205, 42, 50, 133, 162, 83, 189, 97, 74, 101, 208, 81, 119, 110, 54, 205, 28, 121, 61, 1, 175, 30, 191, 199, 182, 155, 88, 201, 75, 54, 222, 131, 100, 243, 235, 227, 97, 144, 2, 15, 200, 192, 209, 123, 153, 155, 115, 77, 207, 7, 240, 233, 122, 202, 18, 237, 52, 70, 70, 5, 159, 140, 240, 7, 113, 236, 92, 198, 89, 11, 240, 31, 198, 100, 221, 38, 245, 214, 224, 122, 162, 150, 153, 216, 234, 80, 52, 13, 18, 129, 146, 90, 162, 1, 208, 233, 83, 216, 44, 167, 72, 49, 68, 169, 238, 131, 150, 91, 187, 215, 93, 140, 215, 106, 121, 9, 42, 46, 118, 83, 234, 150, 127, 83, 2, 187, 179, 191, 217, 1, 222, 84, 237, 204, 23, 64, 231, 189, 164, 105, 7, 92, 203, 252, 188, 163, 96, 18, 78, 207, 42, 147, 149, 221, 69, 228, 68, 140, 115, 94, 223, 23, 166, 168, 192, 66, 179, 172, 202, 152, 148, 237, 120, 139, 171, 246, 62, 188, 221, 174, 109, 90, 51, 61, 230, 218, 112, 22, 152, 7, 116, 252, 50, 147, 46, 245, 197, 13, 190, 89, 47, 89, 102, 211, 13, 65, 4, 212, 70, 150, 114, 22, 208, 161, 130, 184, 129, 212, 69, 119, 63, 42, 109, 91, 97, 225, 212, 24, 32, 198, 115, 57, 207, 248, 11, 2, 104, 150, 79, 220, 45, 170, 59, 192, 113, 5, 44, 231, 173, 50, 106, 96, 199, 163, 253, 69, 68, 19, 138, 21, 171, 35, 235, 59, 224, 161, 207, 192, 45, 160, 181, 48, 115, 35, 25, 58, 21, 27, 63, 76, 251, 170, 241, 212, 152, 28, 190, 102, 45, 52, 225, 169, 235, 230, 224, 40, 98, 86, 172, 241, 152, 16, 188, 215, 242, 157, 206, 215, 66, 167, 23, 140, 67, 30, 255, 49, 247, 114, 237, 145, 43, 137, 247, 31, 180, 105, 62, 204, 133, 12, 143, 46, 55, 209, 13, 212, 122, 138, 141, 48, 133, 177, 160, 67, 21, 116, 122, 212, 0, 92, 144, 192, 163, 36, 7, 151, 39, 170, 85, 89, 185, 232, 137, 2, 98, 172, 132, 245, 76, 97, 222, 152, 141, 156, 58, 200, 76, 158, 67, 82, 220, 253, 236, 147, 8, 43, 54, 188, 33, 125, 205, 184, 154, 42, 15, 99, 40, 38, 46, 55, 132, 97, 172, 151, 172, 39, 56, 7, 145, 237, 243, 195, 151, 161, 21, 85, 4, 167, 41, 89, 112, 131, 223, 240, 229, 229, 107, 166, 71, 153, 80, 43, 74, 38, 76, 23, 151, 6, 218, 138, 242, 0, 48, 166, 228, 114, 137, 199, 41, 127, 56, 11, 56, 101, 11, 134, 254, 126, 144, 143, 54, 106, 70, 229, 103, 247, 12, 187, 221, 173, 224, 145, 18, 158, 139, 210, 14, 25, 123, 23, 88, 194, 224, 137, 6, 244, 116, 23, 92, 109, 205, 51, 145, 74, 35, 214, 198, 131, 193, 248, 199, 185, 64, 103, 163, 111, 184, 93, 171, 35, 233, 130, 163, 155, 58, 65, 232, 233, 114, 210, 173, 234, 44, 42, 176, 72, 254, 105, 181, 159, 194, 218, 137, 114, 22, 93, 246, 10, 116, 50, 181, 213, 199, 182, 139, 12, 136, 74, 168, 107, 52, 179, 193, 238, 76, 171, 106, 38, 85, 165, 228, 22, 251, 90, 226, 3, 16, 99, 222, 121, 220, 138, 2, 157, 248, 30, 107, 58, 229, 79, 45, 141, 109, 199, 210, 173, 60, 186, 187, 224, 201, 238, 85, 239, 247, 20, 193, 54, 13, 164, 194, 231, 165, 224, 23, 176, 106, 74, 116, 193, 198, 219, 11, 87, 196, 184, 186, 100, 245, 65, 46, 61, 166, 164, 221, 178, 110, 81, 68, 72, 63, 61, 121, 150, 164, 15, 158, 144, 239, 100, 179, 34, 64, 90, 221, 34, 50, 163, 241, 96, 99, 251, 195, 148, 78, 24, 193, 239, 48, 15, 79, 157, 71, 250, 58, 15, 211, 13, 198, 183, 204, 238, 14, 147, 201, 240, 160, 226, 81, 230, 183, 182, 197, 187, 83, 153, 74, 184, 91, 115, 70, 69, 196, 98, 96, 158, 152, 188, 84, 142, 184, 164, 158, 145, 175, 129, 147, 230, 160, 186, 243, 223, 116, 84, 113, 31, 3, 196, 28, 221, 75, 230, 180, 85, 36, 215, 188, 110, 204, 144, 240, 80, 237, 247, 25, 56, 66, 162, 233, 230, 185, 158, 46, 174, 177, 101, 6, 60, 48, 6, 214, 133, 214, 71, 25, 48, 168, 137, 86, 171, 92, 84, 66, 144, 110, 196, 88, 44, 214, 230, 221, 8, 74, 241, 77, 10, 41, 224, 211, 213, 190, 171, 218, 32, 22, 138, 63, 5, 255, 105, 179, 40, 72], - [54, 55, 127, 211, 203, 53, 5, 103, 218, 147, 230, 18, 206, 17, 45, 163, 207, 130, 167, 111, 104, 206, 33, 214, 52, 250, 166, 156, 96, 92, 55, 57, 156, 23, 132, 216, 243, 157, 11, 176, 202, 82, 122, 229, 137, 7, 153, 160, 99, 223, 23, 117, 92, 25, 206, 126, 169, 177, 93, 161, 32, 148, 120, 34, 152, 88, 54, 163, 4, 96, 12, 57, 124, 183, 35, 158, 38, 4, 69, 39, 109, 73, 84, 108, 63, 57, 32, 91, 79, 252, 27, 148, 19, 135, 247, 27, 147, 36, 37, 58, 159, 91, 36, 64, 112, 105, 58, 223, 120, 75, 15, 20, 200, 107, 176, 191, 162, 169, 200, 230, 7, 66, 153, 61, 93, 88, 54, 240, 2, 75, 171, 113, 208, 214, 244, 63, 56, 255, 170, 115, 101, 246, 12, 117, 179, 140, 247, 225, 87, 161, 245, 13, 97, 31, 120, 13, 205, 1, 217, 139, 97, 173, 62, 145, 125, 185, 210, 163, 82, 141, 240, 239, 211, 171, 196, 40, 133, 228, 10, 166, 226, 85, 190, 128, 100, 51, 120, 25, 47, 161, 254, 2, 38, 39, 247, 125, 222, 169, 133, 22, 65, 28, 121, 142, 184, 197, 206, 91, 32, 182, 86, 114, 192, 4, 91, 20, 121, 215, 93, 148, 92, 69, 16, 172, 200, 155, 21, 248, 122, 56, 84, 95, 244, 138, 245, 140, 64, 24, 5, 135, 228, 104, 91, 160, 103, 49, 109, 41, 201, 150, 198, 75, 171, 224, 60, 0, 116, 122, 210, 48, 145, 137, 169, 30, 135, 86, 161, 226, 161, 158, 111, 129, 11, 29, 222, 129, 46, 107, 146, 150, 169, 231, 216, 99, 50, 74, 218, 213, 4, 93, 3, 140, 224, 126, 134, 223, 193, 227, 28, 3, 204, 61, 234, 171, 79, 85, 239, 3, 79, 255, 96, 85, 171, 58, 195, 135, 212, 99, 149, 130, 8, 250, 233, 34, 54, 29, 93, 240, 56, 240, 56, 28, 99, 56, 145, 28, 138, 64, 103, 215, 164, 182, 152, 117, 203, 178, 45, 230, 217, 215, 50, 123, 132, 168, 97, 151, 42, 61, 200, 194, 197, 75, 29, 232, 155, 242, 122, 171, 125, 206, 131, 157, 233, 55, 162, 219, 204, 216, 159, 44, 221, 204, 220, 70, 65, 111, 250, 241, 222, 92, 23, 92, 101, 255, 56, 59, 49, 135, 71, 233, 226, 117, 246, 254, 144, 127, 213, 188, 173, 245, 14, 75, 57, 60, 197, 245, 234, 229, 113, 178, 146, 225, 58, 16, 193, 65, 124, 6, 29, 69, 240, 106, 26, 234, 192, 128, 47, 248, 50, 52, 160, 169, 108, 11, 61, 94, 105, 237, 4, 12, 187, 189, 212, 206, 43, 4, 39, 186, 171, 65, 181, 43, 92, 136, 107, 4, 31, 34, 101, 214, 220, 237, 61, 178, 160, 140, 144, 190, 128, 198, 72, 185, 213, 191, 221, 187, 19, 242, 14, 210, 163, 142, 55, 143, 59, 162, 43, 108, 181, 4, 116, 193, 179, 108, 53, 62, 178, 22, 208, 227, 151, 85, 226, 86, 221, 186, 105, 158, 167, 216, 238, 120, 223, 112, 89, 30, 164, 246, 153, 23, 124, 51, 23, 117, 125, 227, 43, 123, 216, 170, 30, 19, 226, 81, 219, 119, 189, 104, 74, 237, 21, 124, 60, 46, 100, 181, 56, 145, 93, 85, 172, 6, 120, 1, 153, 232, 152, 203, 100, 119, 211, 120, 11, 191, 130, 85, 187, 192, 2, 11, 126, 212, 21, 122, 127, 207, 230, 195, 109, 2, 122, 157, 167, 80, 246, 172, 224, 13, 43, 5, 140, 0, 121, 13, 154, 198, 19, 121, 220, 55, 249, 157, 134, 74, 119, 145, 145, 77, 55, 216, 171, 26, 178, 57, 110, 96, 41, 223, 0, 155, 111, 51, 124, 156, 84, 18, 1, 237, 112, 22, 71, 34, 184, 63, 115, 120, 139, 252, 235, 97, 73, 129, 170, 157, 212, 113, 46, 38, 60, 3, 127, 139, 213, 243, 157, 13, 241, 156, 161, 136, 27, 90, 78, 194, 78, 242, 212, 155, 161, 75, 105, 72, 243, 169, 2, 160, 50, 155, 123, 108, 31, 44, 97, 178, 129, 112, 75, 212, 194, 10, 177, 118, 66, 17, 117, 107, 101, 244, 86, 146, 66, 84, 116, 196, 57, 169, 167, 34, 130, 160, 170, 35, 74, 74, 6, 12, 188, 22, 246, 162, 105, 161, 30, 201, 247, 8, 117, 170, 222, 27, 45, 207, 155, 50, 82, 66, 85, 29, 118, 174, 208, 174, 208, 158, 201, 31, 71, 89, 222, 202, 3, 227, 58, 189, 12, 67, 80, 150, 200, 64, 156, 195, 79, 187, 26, 236, 126, 41, 176, 104, 25, 190, 13, 21, 240, 110, 49, 175, 244, 78, 10, 140, 249, 124, 122, 245, 79, 234, 227, 123, 183, 206, 133, 76, 110, 138, 0, 224, 167, 28, 0, 113, 40, 143, 148, 21, 102, 241, 26, 116, 249, 79, 33, 167, 94, 229, 195, 63, 252, 195, 22, 10, 184, 214, 192, 141, 68, 146, 21, 100, 149, 171, 235, 211, 115, 253, 150, 234, 167, 16, 57, 108, 148, 3, 127, 84, 230, 162, 105, 132, 214, 213, 56, 215, 65, 146, 154, 198, 101, 178, 166, 120, 194, 238, 74, 171, 127, 169, 199, 116, 248, 236, 81, 28, 77, 59, 219, 235, 18, 16, 236, 77, 163, 118, 1, 0, 243, 79, 223, 66, 73, 96, 171, 171, 71, 175, 39, 153, 237, 211, 18, 73, 160, 70, 221, 222, 64, 228, 101, 174, 26, 52, 221, 232, 196, 18, 4, 93, 44, 200, 85, 69, 127, 193, 248, 124, 33, 1, 156, 51, 73, 150, 77, 62, 147, 180, 232, 135, 169, 21, 129, 144, 68, 140, 116, 243, 178, 77, 26, 45, 220, 216, 247, 191, 93, 154, 152, 136, 203, 75, 188, 193, 9, 78, 175, 211, 52, 163, 166, 216, 19, 104, 246, 210, 189, 247, 187, 20, 146, 11, 193, 74, 96, 191, 68, 182, 105, 225, 48, 1, 153, 66, 244, 60, 145, 228, 67, 232, 192, 131, 90, 151, 38, 4, 163, 77, 32, 35, 166, 161, 88, 62, 238, 47, 82, 181, 223, 129, 150, 181, 227, 115, 43, 115, 59, 159, 25, 214, 237, 136, 98, 63, 216, 87, 129, 249, 31, 217, 242, 214, 51, 115, 165, 134, 64, 205, 84, 1, 9, 61, 130, 146, 64, 25, 183, 26, 140, 6, 52, 74, 77, 200, 86, 234, 110, 247, 196, 89, 171, 57, 194, 236, 34, 165, 238, 217, 58, 167, 4, 204, 182, 220, 143, 125, 62, 18, 118, 203, 182, 212, 193, 205, 62, 49, 18, 143, 219, 175, 35, 40, 137, 24, 67, 17, 187, 207, 197, 130, 126, 204, 3, 21, 89, 0, 129, 84, 85, 102, 0, 156, 107, 216, 29, 174, 38, 125, 61, 119, 29, 151, 52, 51, 89, 84, 112, 5, 101, 201, 18, 231, 107, 23, 181, 12, 106, 181, 50, 91, 214, 63, 249, 71, 216, 102, 131, 145, 144, 255, 18, 4, 96, 30, 165, 165, 73, 184, 210, 2, 26, 212, 153, 84, 91, 46, 223, 145, 18, 214, 120, 211, 36, 242, 188, 164, 191, 228, 72, 22, 54, 137, 35, 139, 92, 152, 199, 130, 161, 177, 85, 215, 58, 11, 167, 0, 103, 77, 254, 80, 166, 102, 135, 140, 207, 150, 114, 176, 235, 249, 45, 42, 196, 251, 188, 253, 17, 129, 107, 70, 96, 124, 105, 45, 20, 148, 184, 138, 242, 188, 139, 114, 106, 85, 103, 205, 29, 156, 52, 212, 27, 112, 72, 200, 234, 237, 193, 182, 215, 64, 132, 208, 11, 24, 26, 41, 54, 241, 68, 97, 52, 1, 59, 244, 170, 107, 250, 48, 17, 151, 185, 26, 204, 167, 79, 201, 115, 68, 217, 202, 37, 224, 229, 11, 112, 100, 232, 56, 35, 225, 114, 108, 200, 30, 115, 141, 148, 230, 146, 183, 217, 72, 65, 153, 4, 59, 134, 72, 31, 51, 213, 124, 83, 37, 123, 106, 93, 145, 81, 187, 12, 172, 30, 228, 226, 74, 63, 236, 193, 126, 114, 233, 124, 242, 164, 254, 104, 7, 16, 169, 182, 247, 29, 35, 183, 74, 169, 24, 109, 17, 34, 111, 42, 188, 203, 27, 222, 229, 3, 152, 228, 81, 207, 7, 239, 20, 123, 129, 142, 253, 161, 48, 153, 129, 99, 17, 237, 127, 226, 7, 223, 17, 25, 61, 34, 227, 189, 63, 239, 112, 10, 150, 193, 183, 10, 92, 28, 177, 98, 191, 161, 172, 129, 54, 24, 92, 168, 198, 160, 49, 86, 126, 104, 76, 213, 228, 201, 0, 134, 180, 230, 86, 91, 214, 11, 148, 168, 183, 19, 113, 238, 146, 75, 22, 223, 43, 139, 197, 8, 79, 17, 214, 43, 97, 26, 41, 189, 51, 92, 79, 251, 202, 18, 35, 101, 222, 156, 169, 122, 124, 59, 229, 147, 77, 234, 168, 96, 191, 168, 38, 254, 163, 227, 48, 216, 202, 234, 97, 64, 243, 3, 69], - [116, 2, 143, 134, 220, 231, 62, 95, 118, 244, 171, 107, 189, 211, 209, 210, 189, 84, 95, 165, 184, 144, 5, 55, 155, 196, 65, 60, 126, 217, 177, 129, 48, 197, 66, 55, 219, 150, 105, 174, 125, 161, 80, 234, 24, 192, 69, 71, 227, 205, 147, 93, 226, 149, 30, 223, 25, 63, 15, 96, 173, 178, 161, 36, 159, 80, 74, 103, 221, 159, 54, 207, 244, 170, 161, 247, 75, 144, 108, 77, 231, 6, 230, 43, 87, 42, 169, 214, 106, 166, 216, 150, 110, 249, 151, 104, 60, 248, 112, 38, 217, 109, 214, 206, 222, 143, 131, 124, 217, 6, 62, 34, 182, 67, 169, 255, 212, 250, 124, 25, 65, 159, 241, 115, 175, 178, 251, 0, 100, 129, 41, 135, 116, 183, 108, 93, 132, 134, 129, 144, 44, 236, 156, 59, 183, 171, 188, 177, 60, 107, 97, 250, 253, 186, 209, 206, 170, 170, 174, 13, 249, 216, 173, 110, 232, 251, 199, 223, 9, 225, 95, 104, 174, 179, 134, 138, 14, 217, 27, 26, 119, 104, 134, 169, 166, 99, 26, 210, 150, 210, 98, 204, 20, 44, 98, 114, 10, 106, 45, 51, 46, 61, 133, 222, 215, 228, 189, 220, 76, 105, 98, 27, 167, 75, 98, 242, 239, 52, 100, 126, 105, 133, 154, 205, 134, 21, 184, 140, 164, 90, 156, 134, 101, 132, 105, 40, 108, 158, 129, 167, 38, 221, 87, 93, 184, 31, 121, 177, 241, 52, 221, 154, 158, 26, 174, 187, 128, 94, 236, 217, 146, 194, 8, 52, 205, 72, 19, 45, 195, 215, 198, 127, 6, 129, 75, 2, 28, 214, 158, 146, 31, 73, 207, 204, 53, 9, 57, 90, 226, 39, 244, 19, 164, 111, 85, 45, 216, 86, 101, 131, 124, 242, 32, 149, 57, 180, 31, 201, 168, 169, 18, 152, 110, 223, 47, 113, 214, 214, 231, 78, 254, 80, 36, 56, 167, 77, 13, 58, 238, 168, 115, 57, 231, 154, 66, 138, 6, 71, 9, 77, 29, 13, 186, 234, 33, 219, 125, 192, 187, 110, 125, 164, 95, 182, 24, 208, 9, 115, 245, 150, 77, 68, 27, 159, 68, 74, 53, 44, 31, 149, 193, 42, 196, 64, 224, 44, 157, 197, 113, 243, 141, 32, 162, 120, 161, 75, 46, 193, 248, 7, 170, 233, 61, 73, 210, 10, 5, 27, 67, 39, 160, 81, 6, 29, 32, 237, 195, 156, 110, 29, 159, 194, 145, 201, 238, 111, 193, 155, 226, 81, 122, 123, 25, 130, 218, 131, 109, 183, 238, 123, 157, 241, 4, 143, 201, 184, 139, 44, 31, 7, 135, 251, 39, 20, 70, 10, 187, 138, 124, 180, 127, 245, 126, 251, 49, 54, 126, 234, 23, 55, 97, 227, 126, 69, 71, 133, 246, 122, 190, 238, 114, 145, 183, 246, 126, 75, 52, 244, 84, 119, 220, 196, 89, 81, 180, 219, 104, 80, 253, 68, 39, 15, 57, 134, 35, 250, 92, 242, 175, 66, 60, 40, 250, 170, 145, 221, 131, 152, 53, 114, 213, 206, 117, 137, 84, 166, 116, 3, 12, 231, 103, 219, 220, 154, 61, 116, 48, 1, 245, 57, 162, 121, 56, 162, 211, 110, 199, 25, 98, 27, 226, 141, 136, 122, 31, 204, 79, 169, 87, 198, 185, 43, 12, 125, 161, 86, 96, 29, 133, 127, 132, 250, 148, 59, 210, 171, 92, 91, 5, 144, 199, 248, 204, 1, 114, 115, 104, 45, 132, 220, 131, 191, 29, 163, 217, 117, 125, 129, 243, 133, 188, 99, 251, 155, 185, 14, 52, 21, 170, 169, 169, 70, 135, 243, 157, 222, 52, 203, 251, 242, 199, 208, 118, 93, 184, 22, 87, 41, 156, 218, 61, 131, 98, 115, 105, 158, 109, 197, 198, 183, 30, 226, 250, 42, 77, 24, 44, 186, 36, 94, 187, 87, 30, 209, 16, 166, 239, 27, 80, 190, 233, 129, 165, 48, 187, 21, 188, 96, 190, 18, 64, 115, 31, 58, 190, 83, 235, 16, 96, 195, 19, 170, 207, 19, 74, 121, 18, 108, 239, 208, 126, 135, 77, 123, 243, 122, 198, 55, 215, 106, 211, 114, 105, 57, 89, 124, 134, 163, 20, 178, 15, 17, 43, 21, 59, 188, 86, 109, 59, 100, 193, 76, 104, 127, 18, 122, 110, 3, 211, 89, 118, 109, 242, 95, 30, 187, 29, 179, 201, 131, 181, 135, 201, 170, 152, 226, 102, 153, 92, 236, 179, 104, 148, 16, 51, 98, 29, 152, 123, 156, 202, 165, 92, 206, 218, 209, 32, 50, 24, 108, 20, 21, 214, 200, 71, 62, 91, 67, 157, 220, 112, 146, 87, 81, 254, 151, 204, 60, 164, 3, 156, 149, 154, 35, 90, 122, 233, 159, 212, 249, 176, 22, 176, 62, 212, 137, 34, 148, 199, 228, 59, 183, 167, 52, 36, 56, 50, 90, 62, 206, 102, 140, 33, 79, 30, 254, 104, 45, 189, 190, 110, 180, 77, 219, 55, 88, 159, 127, 190, 71, 42, 47, 187, 182, 105, 132, 154, 231, 2, 111, 106, 168, 30, 36, 240, 71, 150, 44, 238, 27, 31, 49, 228, 45, 208, 110, 195, 87, 180, 105, 72, 190, 37, 109, 89, 237, 175, 73, 27, 90, 3, 194, 142, 119, 140, 49, 219, 219, 240, 125, 100, 193, 92, 149, 184, 87, 231, 222, 236, 141, 211, 31, 77, 16, 193, 240, 63, 253, 232, 59, 126, 2, 144, 76, 188, 69, 61, 194, 233, 221, 174, 9, 5, 214, 159, 79, 163, 78, 141, 184, 45, 122, 37, 5, 63, 113, 114, 157, 46, 184, 227, 76, 52, 190, 88, 203, 201, 145, 122, 174, 141, 144, 229, 125, 12, 3, 60, 164, 16, 247, 162, 13, 130, 248, 194, 179, 42, 35, 238, 176, 215, 75, 215, 194, 212, 5, 202, 97, 29, 79, 14, 219, 93, 117, 159, 70, 115, 164, 61, 249, 233, 200, 103, 201, 97, 205, 30, 194, 137, 51, 170, 145, 51, 121, 241, 211, 80, 12, 4, 226, 58, 221, 75, 86, 26, 11, 61, 249, 150, 109, 53, 151, 43, 111, 148, 44, 208, 253, 188, 186, 170, 196, 58, 217, 148, 85, 100, 107, 79, 208, 190, 193, 242, 199, 244, 185, 251, 154, 179, 23, 246, 32, 52, 44, 134, 187, 7, 54, 134, 9, 106, 175, 207, 220, 14, 92, 178, 129, 76, 202, 200, 14, 95, 246, 241, 241, 90, 209, 109, 161, 143, 231, 70, 252, 7, 46, 26, 7, 181, 17, 163, 36, 32, 168, 137, 16, 103, 226, 128, 213, 242, 111, 221, 115, 13, 4, 56, 45, 238, 84, 199, 113, 7, 73, 184, 119, 69, 103, 9, 21, 33, 228, 55, 181, 241, 113, 159, 182, 47, 98, 135, 50, 60, 33, 236, 187, 46, 124, 55, 20, 224, 242, 186, 204, 89, 178, 73, 143, 254, 234, 208, 73, 224, 181, 26, 54, 173, 254, 211, 223, 7, 159, 140, 177, 140, 228, 37, 93, 252, 31, 119, 207, 146, 233, 118, 205, 153, 125, 75, 204, 132, 158, 80, 231, 164, 204, 175, 180, 191, 187, 206, 127, 162, 121, 44, 69, 175, 127, 218, 197, 70, 61, 93, 191, 10, 30, 4, 163, 173, 191, 17, 87, 77, 56, 21, 221, 206, 67, 181, 166, 218, 65, 203, 82, 251, 199, 5, 153, 103, 156, 139, 102, 64, 58, 154, 87, 117, 235, 191, 168, 101, 114, 34, 52, 23, 25, 110, 247, 47, 208, 160, 207, 239, 227, 248, 205, 128, 178, 131, 111, 21, 222, 87, 254, 108, 64, 92, 247, 69, 64, 50, 177, 57, 251, 46, 121, 83, 69, 228, 168, 161, 29, 16, 62, 243, 179, 52, 35, 71, 225, 160, 150, 227, 110, 97, 113, 152, 120, 247, 110, 108, 182, 42, 0, 182, 139, 200, 134, 7, 74, 76, 245, 46, 182, 95, 62, 183, 93, 244, 115, 187, 233, 63, 56, 113, 213, 49, 251, 53, 221, 89, 22, 176, 235, 204, 119, 119, 246, 155, 22, 68, 108, 113, 220, 148, 247, 87, 208, 177, 56, 176, 60, 13, 142, 79, 128, 135, 177, 77, 72, 101, 73, 88, 166, 55, 98, 150, 247, 230, 164, 251, 170, 80, 68, 1, 62, 243, 43, 247, 120, 242, 52, 107, 56, 128, 79, 73, 185, 134, 88, 138, 106, 41, 206, 134, 215, 250, 198, 148, 236, 56, 35, 212, 36, 2, 81, 100, 72, 215, 214, 94, 227, 43, 9, 221, 202, 247, 191, 103, 29, 3, 161, 22, 44, 167, 130, 159, 67, 48, 65, 35, 137, 102, 149, 9, 53, 33, 245, 81, 190, 235, 221, 113, 93, 197, 130, 194, 222, 113, 214, 147, 42, 214, 215, 110, 215, 210, 58, 254, 33, 125, 181, 40, 26, 224, 197, 129, 93, 176, 215, 93, 215, 160, 32, 151, 123, 138, 6, 95, 24, 180, 248, 233, 222, 174, 44, 132, 227, 110, 174, 108, 87, 40, 54, 25, 42, 188, 187, 74, 171, 212, 90, 150, 235, 146, 241, 22, 200, 27, 230], - [76, 178, 214, 232, 144, 143, 22, 90, 215, 150, 195, 86, 90, 249, 127, 115, 172, 100, 232, 172, 176, 8, 229, 243, 238, 76, 230, 32, 253, 143, 133, 13, 236, 148, 97, 247, 57, 246, 209, 43, 49, 229, 76, 116, 197, 47, 125, 16, 229, 158, 198, 47, 254, 204, 19, 6, 40, 187, 106, 19, 54, 204, 86, 222, 110, 104, 144, 43, 186, 184, 142, 73, 90, 169, 144, 169, 143, 188, 49, 143, 251, 178, 207, 145, 59, 168, 19, 236, 181, 230, 187, 167, 94, 249, 165, 13, 158, 51, 88, 111, 118, 61, 241, 254, 67, 233, 168, 1, 246, 131, 151, 210, 41, 232, 210, 40, 139, 6, 75, 4, 106, 92, 177, 243, 223, 15, 107, 39, 143, 208, 216, 25, 132, 197, 242, 179, 140, 3, 212, 157, 119, 71, 117, 174, 101, 78, 170, 24, 158, 205, 176, 43, 218, 171, 18, 173, 142, 47, 44, 104, 136, 182, 142, 44, 105, 64, 240, 151, 225, 39, 249, 55, 195, 122, 55, 223, 192, 171, 74, 227, 7, 113, 128, 122, 151, 117, 154, 169, 140, 57, 33, 55, 176, 229, 207, 123, 134, 104, 228, 133, 116, 230, 50, 147, 185, 148, 30, 155, 236, 195, 39, 132, 136, 68, 243, 45, 13, 199, 226, 77, 86, 174, 106, 203, 179, 239, 100, 89, 89, 175, 151, 69, 189, 105, 103, 220, 21, 99, 211, 161, 135, 137, 254, 135, 185, 236, 220, 248, 29, 15, 71, 4, 71, 113, 186, 222, 235, 3, 255, 118, 189, 161, 37, 36, 122, 128, 101, 28, 36, 219, 127, 83, 170, 183, 9, 152, 32, 191, 103, 55, 236, 31, 23, 85, 254, 233, 109, 6, 35, 253, 26, 29, 210, 234, 208, 190, 17, 253, 26, 193, 179, 34, 186, 35, 114, 33, 182, 191, 83, 190, 10, 245, 70, 96, 125, 183, 165, 239, 156, 79, 215, 163, 255, 195, 96, 228, 234, 101, 0, 70, 240, 187, 10, 242, 140, 115, 26, 187, 113, 54, 160, 51, 34, 251, 66, 228, 198, 131, 22, 163, 5, 178, 185, 204, 139, 213, 29, 24, 213, 197, 124, 91, 71, 121, 236, 95, 225, 236, 216, 123, 72, 65, 213, 243, 239, 91, 31, 114, 28, 68, 1, 228, 103, 150, 100, 243, 119, 110, 166, 66, 55, 106, 217, 96, 97, 131, 131, 82, 151, 219, 84, 93, 210, 102, 38, 171, 250, 213, 179, 43, 100, 151, 200, 181, 77, 28, 0, 199, 215, 31, 114, 215, 153, 103, 128, 235, 164, 86, 117, 40, 126, 113, 49, 106, 35, 240, 110, 109, 16, 233, 29, 57, 228, 225, 182, 177, 43, 125, 7, 186, 109, 31, 96, 172, 116, 241, 61, 125, 101, 5, 203, 18, 186, 2, 65, 95, 115, 131, 246, 202, 226, 210, 6, 209, 245, 9, 1, 141, 150, 32, 112, 152, 102, 42, 121, 225, 131, 162, 169, 189, 204, 167, 185, 203, 25, 169, 46, 154, 239, 185, 41, 115, 53, 27, 226, 249, 133, 23, 71, 4, 125, 62, 137, 182, 198, 160, 113, 251, 14, 65, 161, 223, 205, 11, 163, 188, 233, 212, 138, 22, 67, 115, 156, 237, 75, 172, 216, 218, 197, 117, 14, 29, 99, 143, 2, 59, 43, 74, 18, 64, 9, 175, 17, 40, 188, 221, 180, 79, 174, 124, 209, 183, 81, 175, 109, 173, 182, 225, 73, 236, 202, 150, 151, 89, 141, 62, 199, 158, 1, 123, 23, 170, 79, 146, 192, 190, 224, 0, 145, 173, 12, 124, 225, 199, 105, 189, 98, 64, 118, 57, 32, 188, 172, 102, 87, 231, 193, 40, 119, 206, 99, 134, 63, 254, 99, 205, 155, 66, 81, 134, 152, 9, 70, 184, 51, 182, 209, 205, 180, 37, 86, 77, 62, 79, 84, 142, 139, 214, 109, 110, 178, 250, 213, 28, 170, 9, 202, 185, 0, 183, 75, 121, 243, 243, 192, 195, 49, 204, 30, 248, 120, 58, 41, 101, 232, 108, 22, 239, 94, 15, 208, 51, 13, 103, 166, 37, 73, 243, 174, 111, 140, 180, 44, 149, 93, 245, 244, 53, 88, 225, 157, 216, 100, 57, 95, 82, 143, 187, 10, 182, 31, 186, 44, 213, 36, 67, 187, 10, 128, 135, 220, 22, 200, 172, 119, 76, 252, 233, 250, 171, 89, 119, 142, 186, 44, 189, 212, 218, 227, 51, 142, 21, 78, 158, 192, 204, 248, 93, 136, 112, 30, 94, 152, 155, 189, 242, 248, 13, 171, 18, 1, 147, 174, 185, 127, 112, 159, 172, 86, 251, 108, 83, 220, 136, 227, 89, 172, 208, 210, 143, 98, 82, 95, 106, 238, 195, 179, 191, 166, 3, 219, 201, 83, 141, 208, 208, 185, 91, 189, 136, 147, 39, 125, 62, 141, 163, 155, 221, 251, 27, 105, 222, 157, 25, 57, 123, 30, 201, 63, 66, 177, 41, 100, 2, 39, 109, 189, 95, 47, 141, 64, 243, 39, 112, 77, 188, 78, 222, 167, 216, 216, 150, 130, 94, 57, 78, 51, 158, 164, 36, 47, 181, 65, 114, 110, 77, 230, 85, 81, 110, 52, 162, 2, 35, 155, 71, 99, 28, 7, 231, 63, 224, 205, 6, 189, 101, 255, 3, 45, 74, 54, 157, 55, 24, 64, 5, 55, 103, 100, 60, 50, 14, 7, 93, 221, 68, 147, 62, 141, 221, 90, 72, 172, 55, 163, 50, 103, 55, 38, 193, 178, 135, 169, 170, 73, 58, 29, 201, 239, 250, 234, 140, 254, 160, 238, 44, 98, 41, 175, 22, 118, 255, 89, 162, 96, 43, 184, 133, 193, 52, 139, 135, 247, 72, 133, 223, 167, 13, 219, 59, 2, 174, 68, 229, 108, 184, 240, 101, 9, 214, 84, 153, 207, 99, 33, 242, 163, 168, 250, 76, 95, 113, 246, 190, 89, 17, 126, 6, 47, 52, 155, 100, 255, 153, 68, 184, 247, 91, 27, 53, 234, 185, 229, 246, 88, 179, 187, 131, 227, 223, 161, 171, 237, 98, 214, 215, 173, 132, 158, 228, 114, 183, 216, 126, 182, 12, 250, 180, 220, 74, 31, 232, 177, 107, 246, 108, 14, 110, 11, 139, 32, 15, 33, 203, 9, 181, 87, 180, 143, 65, 254, 31, 226, 177, 56, 36, 128, 94, 176, 75, 213, 172, 62, 179, 180, 75, 159, 219, 126, 171, 80, 128, 33, 47, 101, 151, 126, 115, 165, 8, 179, 69, 83, 12, 80, 22, 33, 44, 148, 84, 25, 89, 148, 127, 93, 97, 95, 105, 202, 150, 20, 170, 6, 206, 241, 21, 132, 118, 244, 255, 19, 214, 37, 228, 16, 54, 239, 22, 42, 52, 126, 40, 204, 32, 176, 143, 116, 27, 103, 223, 78, 133, 193, 63, 16, 226, 166, 226, 119, 206, 106, 190, 102, 226, 36, 28, 174, 52, 80, 201, 239, 47, 215, 110, 216, 85, 42, 51, 122, 246, 151, 89, 58, 169, 128, 67, 111, 129, 233, 209, 249, 231, 167, 84, 49, 60, 221, 100, 93, 121, 176, 17, 33, 186, 93, 92, 216, 75, 28, 82, 227, 93, 218, 209, 11, 48, 244, 171, 30, 91, 130, 13, 180, 205, 120, 210, 138, 59, 216, 183, 142, 12, 12, 254, 78, 242, 14, 233, 137, 72, 48, 222, 78, 211, 195, 198, 7, 55, 123, 167, 41, 202, 72, 81, 98, 64, 251, 76, 121, 245, 103, 243, 8, 32, 43, 155, 93, 244, 149, 152, 127, 227, 221, 111, 160, 19, 213, 101, 149, 37, 186, 105, 72, 83, 12, 165, 126, 93, 160, 110, 49, 207, 96, 223, 151, 212, 140, 142, 88, 37, 121, 246, 62, 201, 176, 59, 187, 81, 252, 126, 160, 152, 45, 193, 1, 203, 103, 50, 246, 33, 65, 99, 139, 223, 242, 92, 70, 106, 144, 208, 31, 9, 81, 255, 39, 27, 74, 100, 117, 40, 14, 147, 237, 51, 108, 159, 177, 118, 122, 219, 87, 255, 164, 215, 228, 187, 30, 198, 251, 203, 165, 57, 236, 183, 110, 188, 181, 49, 169, 145, 154, 82, 208, 99, 208, 172, 217, 8, 28, 80, 74, 217, 164, 182, 213, 212, 248, 7, 165, 129, 152, 199, 26, 245, 87, 57, 71, 44, 26, 234, 210, 218, 148, 136, 52, 194, 138, 57, 111, 145, 27, 68, 104, 176, 94, 72, 151, 28, 243, 228, 124, 169, 33, 166, 47, 96, 106, 41, 119, 11, 178, 71, 55, 111, 219, 84, 42, 116, 178, 204, 134, 28, 153, 14, 223, 158, 244, 88, 110, 40, 78, 69, 218, 89, 79, 95, 139, 186, 158, 18, 249, 57, 13, 88, 201, 171, 72, 201, 88, 32, 50, 138, 200, 81, 244, 225, 22, 26, 55, 186, 124, 63, 8, 248, 2, 74, 77, 158, 137, 91, 143, 44, 27, 98, 54, 222, 160, 159, 210, 21, 236, 209, 129, 56, 230, 157, 163, 178, 28, 51, 207, 9, 254, 184, 136, 25, 48, 195, 191, 94, 164, 178, 174, 97, 47, 225, 250, 247, 160, 235, 77, 107, 209, 173, 249, 130, 86, 75, 197, 220], - [38, 82, 138, 99, 106, 161, 81, 246, 73, 233, 61, 173, 142, 137, 195, 171, 26, 219, 105, 199, 160, 170, 162, 20, 205, 239, 113, 33, 177, 47, 219, 110, 129, 107, 125, 197, 51, 114, 147, 127, 15, 173, 96, 31, 201, 142, 104, 165, 179, 200, 250, 178, 85, 117, 213, 171, 249, 147, 179, 53, 52, 130, 119, 3, 145, 209, 216, 45, 21, 230, 26, 76, 44, 110, 73, 60, 199, 59, 156, 241, 123, 19, 104, 117, 184, 133, 145, 102, 21, 61, 229, 160, 73, 186, 230, 221, 217, 237, 218, 183, 39, 241, 230, 209, 18, 184, 255, 16, 109, 105, 244, 97, 246, 95, 97, 68, 96, 164, 78, 181, 160, 212, 2, 218, 58, 169, 153, 186, 236, 28, 217, 24, 131, 231, 14, 255, 124, 209, 154, 16, 53, 155, 181, 156, 163, 84, 152, 176, 110, 171, 15, 119, 133, 115, 129, 45, 89, 53, 252, 117, 43, 82, 57, 116, 30, 11, 229, 7, 168, 121, 113, 191, 207, 129, 124, 185, 160, 115, 90, 240, 28, 5, 68, 204, 235, 213, 98, 204, 214, 184, 120, 213, 175, 145, 208, 20, 117, 45, 75, 28, 169, 168, 129, 23, 217, 182, 40, 97, 159, 193, 107, 139, 252, 124, 123, 60, 241, 180, 32, 248, 231, 201, 142, 46, 229, 186, 41, 118, 46, 182, 196, 237, 74, 207, 228, 218, 52, 98, 38, 104, 146, 211, 51, 73, 185, 63, 98, 153, 80, 116, 27, 69, 108, 137, 31, 1, 43, 111, 253, 207, 61, 25, 97, 17, 204, 109, 40, 146, 190, 104, 108, 186, 172, 45, 254, 80, 243, 14, 10, 162, 145, 48, 54, 59, 100, 16, 129, 16, 7, 247, 56, 247, 247, 234, 154, 197, 181, 255, 178, 170, 31, 110, 210, 88, 126, 104, 121, 148, 143, 201, 29, 159, 252, 76, 66, 49, 41, 173, 39, 68, 202, 46, 123, 158, 111, 10, 11, 6, 237, 27, 228, 135, 129, 84, 60, 38, 98, 89, 211, 160, 171, 233, 110, 138, 233, 109, 28, 234, 38, 51, 34, 182, 21, 51, 184, 120, 5, 55, 207, 94, 102, 90, 44, 187, 18, 29, 20, 78, 105, 181, 98, 103, 220, 148, 167, 105, 103, 25, 59, 190, 173, 61, 116, 97, 16, 6, 121, 233, 174, 119, 74, 70, 240, 253, 59, 220, 61, 57, 89, 130, 118, 241, 148, 22, 196, 202, 57, 60, 72, 58, 44, 119, 46, 73, 16, 147, 171, 4, 69, 152, 151, 238, 40, 125, 81, 165, 0, 250, 141, 6, 221, 182, 217, 24, 232, 119, 3, 30, 110, 167, 132, 83, 35, 157, 248, 54, 116, 227, 219, 12, 47, 248, 13, 102, 21, 218, 179, 196, 79, 162, 118, 64, 202, 214, 167, 146, 14, 72, 9, 67, 40, 233, 154, 4, 16, 61, 144, 36, 149, 78, 7, 21, 176, 77, 25, 200, 29, 89, 57, 181, 181, 187, 241, 208, 64, 41, 73, 78, 204, 146, 50, 154, 59, 35, 90, 187, 172, 78, 255, 114, 144, 72, 117, 134, 170, 100, 80, 186, 0, 161, 249, 115, 121, 177, 44, 109, 70, 74, 217, 246, 42, 205, 7, 203, 39, 145, 97, 115, 154, 0, 193, 31, 84, 150, 88, 194, 39, 122, 7, 14, 127, 226, 164, 131, 136, 164, 117, 221, 205, 196, 213, 42, 177, 44, 237, 218, 216, 58, 153, 146, 188, 98, 75, 19, 120, 119, 132, 130, 203, 59, 21, 3, 153, 181, 64, 1, 231, 66, 154, 24, 119, 233, 192, 254, 57, 207, 48, 77, 94, 81, 141, 62, 14, 207, 67, 123, 106, 107, 170, 255, 96, 101, 203, 208, 70, 27, 99, 201, 185, 94, 64, 118, 245, 62, 46, 220, 95, 212, 163, 196, 1, 190, 3, 216, 177, 222, 16, 221, 60, 84, 153, 44, 107, 240, 244, 46, 76, 122, 29, 15, 226, 234, 209, 65, 166, 105, 25, 197, 136, 33, 66, 125, 26, 202, 99, 184, 58, 104, 236, 136, 78, 28, 63, 229, 37, 199, 51, 230, 153, 28, 102, 203, 63, 31, 249, 17, 87, 255, 196, 179, 178, 165, 136, 176, 231, 120, 191, 67, 28, 47, 51, 1, 72, 230, 44, 182, 215, 13, 76, 246, 119, 238, 61, 147, 6, 226, 127, 224, 42, 100, 179, 138, 44, 57, 237, 228, 255, 155, 15, 147, 194, 9, 158, 148, 57, 219, 59, 249, 200, 189, 112, 139, 159, 40, 68, 35, 6, 42, 28, 164, 203, 11, 216, 109, 33, 16, 39, 66, 27, 9, 194, 57, 219, 164, 76, 29, 143, 34, 8, 136, 66, 55, 155, 23, 25, 192, 98, 53, 188, 13, 78, 41, 92, 43, 104, 194, 167, 28, 69, 150, 202, 135, 164, 32, 131, 49, 133, 35, 217, 245, 44, 29, 114, 88, 65, 91, 21, 19, 120, 220, 249, 115, 252, 11, 96, 101, 156, 157, 105, 85, 166, 186, 136, 229, 200, 96, 212, 190, 78, 39, 226, 166, 22, 80, 237, 16, 174, 207, 103, 245, 169, 67, 166, 100, 70, 128, 245, 205, 77, 3, 96, 176, 194, 245, 142, 38, 30, 91, 225, 59, 134, 67, 48, 211, 25, 234, 240, 245, 127, 16, 18, 66, 35, 159, 75, 15, 94, 146, 227, 205, 233, 133, 88, 11, 146, 17, 167, 183, 241, 80, 134, 143, 61, 117, 191, 208, 203, 121, 236, 135, 81, 165, 101, 25, 12, 88, 132, 116, 65, 80, 32, 34, 135, 242, 195, 83, 139, 2, 80, 222, 159, 227, 133, 63, 47, 251, 39, 153, 153, 37, 75, 241, 183, 207, 33, 16, 140, 199, 84, 219, 117, 96, 45, 182, 78, 102, 209, 200, 4, 234, 30, 227, 47, 42, 146, 115, 37, 162, 161, 226, 58, 48, 72, 244, 109, 224, 189, 173, 180, 217, 165, 72, 68, 57, 77, 213, 177, 17, 83, 206, 156, 158, 97, 153, 54, 17, 245, 39, 29, 53, 22, 122, 65, 22, 152, 9, 150, 207, 95, 111, 126, 49, 102, 72, 95, 34, 66, 192, 19, 199, 60, 99, 29, 82, 209, 175, 10, 145, 163, 113, 207, 85, 162, 93, 123, 68, 207, 89, 132, 38, 182, 167, 156, 149, 199, 131, 131, 231, 90, 65, 126, 42, 167, 108, 110, 10, 29, 138, 189, 176, 63, 159, 142, 237, 8, 145, 37, 10, 29, 194, 59, 54, 44, 99, 224, 154, 202, 144, 98, 219, 104, 56, 146, 115, 5, 71, 226, 137, 177, 14, 78, 207, 146, 120, 191, 68, 106, 131, 157, 102, 2, 163, 227, 86, 125, 183, 4, 1, 169, 158, 141, 201, 237, 38, 28, 144, 98, 22, 108, 200, 61, 222, 211, 190, 90, 167, 164, 23, 20, 44, 196, 110, 182, 219, 65, 247, 70, 42, 124, 11, 84, 40, 236, 207, 38, 251, 208, 20, 158, 221, 69, 148, 24, 172, 198, 15, 78, 202, 57, 113, 21, 122, 142, 215, 127, 181, 86, 213, 91, 198, 251, 50, 129, 65, 181, 199, 225, 188, 145, 93, 193, 104, 214, 234, 232, 112, 69, 103, 25, 40, 75, 243, 35, 97, 12, 254, 71, 61, 126, 66, 216, 177, 40, 245, 118, 84, 40, 188, 127, 121, 219, 40, 157, 135, 5, 176, 107, 186, 114, 100, 167, 175, 8, 172, 20, 81, 45, 81, 6, 169, 196, 134, 141, 166, 144, 169, 166, 25, 237, 219, 231, 237, 139, 172, 196, 8, 223, 218, 92, 219, 225, 35, 170, 102, 175, 4, 21, 157, 99, 133, 41, 94, 89, 200, 112, 117, 4, 21, 239, 188, 176, 156, 63, 37, 35, 209, 141, 175, 20, 115, 190, 25, 67, 200, 77, 187, 113, 219, 230, 10, 169, 42, 89, 7, 71, 102, 162, 145, 149, 47, 40, 163, 231, 227, 73, 63, 182, 216, 56, 145, 226, 175, 197, 155, 13, 103, 112, 99, 182, 216, 105, 127, 97, 249, 102, 184, 148, 164, 96, 191, 168, 52, 220, 177, 248, 164, 186, 196, 112, 78, 250, 49, 186, 115, 144, 85, 218, 146, 122, 25, 10, 255, 20, 162, 63, 193, 194, 55, 17, 225, 124, 220, 80, 73, 228, 169, 242, 116, 222, 18, 47, 97, 78, 163, 48, 198, 143, 202, 249, 125, 72, 158, 172, 194, 235, 59, 96, 35, 236, 184, 171, 31, 49, 73, 175, 63, 116, 169, 146, 148, 219, 60, 149, 120, 115, 103, 244, 132, 77, 84, 52, 186, 144, 179, 213, 238, 254, 52, 227, 25, 55, 165, 217, 251, 158, 127, 110, 228, 247, 17, 110, 125, 101, 55, 103, 60, 63, 77, 76, 119, 105, 0, 4, 56, 155, 171, 92, 134, 1, 20, 209, 159, 172, 49, 56, 151, 50, 196, 83, 82, 248, 240, 25, 202, 201, 13, 114, 45, 218, 237, 41, 177, 243, 23, 157, 74, 206, 114, 229, 237, 62, 251, 30, 127, 19, 30, 219, 39, 16, 62, 9, 66, 21, 203, 122, 242, 40, 243, 200, 56, 33, 165, 20, 88, 7, 2, 90, 201, 115, 90], - [135, 89, 46, 241, 39, 126, 225, 17, 73, 151, 197, 162, 55, 9, 227, 214, 126, 85, 79, 225, 208, 148, 16, 138, 253, 56, 147, 167, 37, 101, 237, 180, 68, 181, 93, 127, 114, 74, 221, 211, 93, 206, 176, 139, 100, 109, 43, 14, 7, 228, 72, 212, 127, 155, 120, 98, 50, 240, 125, 115, 72, 53, 108, 206, 100, 223, 247, 7, 239, 240, 21, 215, 193, 23, 233, 129, 183, 14, 98, 49, 1, 92, 201, 219, 3, 210, 65, 103, 35, 218, 224, 169, 139, 127, 143, 226, 43, 247, 159, 163, 67, 112, 50, 51, 52, 48, 243, 92, 79, 78, 9, 32, 134, 63, 3, 187, 49, 253, 102, 27, 213, 138, 207, 57, 148, 131, 124, 134, 140, 88, 23, 178, 204, 19, 227, 22, 100, 171, 12, 92, 42, 214, 79, 139, 8, 57, 4, 201, 218, 49, 99, 185, 131, 57, 80, 103, 114, 0, 139, 234, 230, 158, 110, 137, 73, 108, 144, 109, 89, 82, 237, 179, 83, 238, 46, 70, 168, 37, 223, 128, 250, 60, 106, 179, 250, 7, 77, 138, 24, 44, 56, 75, 64, 225, 127, 216, 125, 14, 233, 246, 19, 224, 86, 15, 194, 46, 202, 225, 184, 32, 135, 218, 89, 35, 4, 234, 140, 204, 184, 196, 58, 194, 8, 153, 143, 47, 147, 123, 195, 67, 247, 135, 3, 130, 139, 29, 202, 175, 104, 112, 101, 55, 214, 128, 108, 255, 229, 15, 161, 218, 74, 249, 105, 242, 68, 53, 115, 152, 79, 229, 112, 114, 119, 74, 254, 168, 42, 110, 60, 92, 205, 114, 136, 140, 1, 219, 112, 19, 18, 5, 27, 4, 67, 187, 91, 11, 129, 180, 24, 135, 128, 201, 183, 99, 102, 68, 190, 162, 10, 239, 1, 144, 158, 139, 197, 91, 137, 233, 178, 241, 161, 154, 240, 57, 17, 214, 79, 187, 248, 221, 222, 96, 1, 14, 90, 109, 16, 80, 78, 96, 186, 90, 36, 139, 255, 128, 14, 223, 117, 185, 191, 27, 89, 124, 210, 215, 48, 26, 226, 186, 5, 51, 82, 173, 192, 87, 137, 76, 226, 59, 162, 226, 167, 5, 30, 62, 144, 0, 241, 246, 150, 207, 143, 240, 49, 161, 192, 15, 28, 100, 227, 174, 84, 46, 124, 162, 67, 77, 42, 167, 111, 146, 219, 172, 87, 58, 229, 121, 107, 36, 82, 232, 242, 60, 158, 47, 147, 168, 141, 81, 9, 196, 172, 49, 49, 89, 17, 24, 93, 255, 232, 37, 86, 185, 119, 65, 254, 166, 39, 117, 204, 24, 168, 244, 98, 120, 249, 174, 114, 28, 200, 236, 27, 213, 128, 169, 199, 94, 16, 6, 19, 97, 214, 20, 176, 145, 165, 176, 160, 77, 193, 85, 129, 225, 189, 86, 254, 29, 225, 50, 106, 44, 147, 149, 251, 192, 115, 103, 32, 97, 142, 13, 172, 151, 132, 86, 181, 111, 18, 213, 239, 233, 82, 97, 3, 156, 203, 105, 76, 225, 38, 239, 78, 7, 92, 211, 168, 7, 208, 139, 171, 15, 85, 252, 147, 253, 30, 40, 62, 45, 121, 151, 46, 155, 96, 137, 10, 62, 105, 129, 71, 231, 136, 255, 95, 35, 181, 139, 91, 82, 105, 235, 247, 134, 121, 162, 76, 218, 30, 226, 213, 134, 215, 48, 198, 91, 212, 95, 188, 2, 55, 127, 169, 234, 80, 81, 138, 128, 174, 75, 238, 59, 43, 204, 239, 103, 83, 94, 17, 194, 196, 135, 218, 49, 116, 17, 121, 240, 244, 68, 87, 110, 26, 38, 71, 172, 74, 65, 175, 93, 9, 249, 181, 172, 133, 70, 247, 122, 13, 206, 253, 171, 88, 100, 241, 230, 178, 207, 153, 3, 128, 4, 252, 164, 109, 246, 23, 62, 61, 210, 207, 180, 190, 18, 253, 16, 140, 117, 142, 176, 100, 234, 178, 88, 140, 99, 118, 207, 193, 80, 6, 80, 55, 82, 211, 243, 131, 228, 149, 148, 51, 219, 50, 197, 74, 45, 254, 128, 218, 24, 190, 105, 238, 161, 77, 218, 161, 31, 51, 243, 109, 94, 71, 15, 241, 185, 193, 90, 121, 223, 199, 241, 44, 75, 196, 143, 255, 160, 46, 112, 85, 239, 49, 191, 127, 249, 201, 255, 45, 107, 1, 109, 2, 238, 153, 50, 97, 24, 177, 69, 54, 27, 68, 184, 197, 252, 133, 180, 93, 226, 62, 247, 25, 210, 236, 124, 56, 154, 209, 244, 232, 201, 68, 167, 1, 96, 116, 126, 210, 30, 183, 115, 161, 42, 180, 48, 171, 168, 86, 227, 100, 63, 39, 93, 194, 250, 214, 66, 192, 181, 234, 44, 230, 17, 145, 45, 56, 148, 162, 51, 73, 91, 2, 236, 90, 222, 132, 102, 97, 112, 51, 246, 79, 227, 20, 41, 8, 27, 233, 33, 183, 227, 138, 161, 159, 130, 121, 231, 39, 217, 143, 186, 49, 228, 114, 53, 196, 60, 157, 249, 3, 169, 197, 73, 230, 61, 176, 3, 249, 9, 164, 32, 15, 82, 97, 250, 245, 202, 149, 238, 207, 84, 130, 92, 170, 44, 165, 138, 155, 88, 252, 94, 18, 56, 249, 69, 42, 186, 90, 234, 177, 241, 136, 208, 68, 235, 231, 14, 240, 115, 247, 86, 9, 193, 111, 2, 200, 55, 172, 173, 203, 237, 36, 123, 115, 224, 195, 165, 169, 243, 151, 21, 201, 136, 142, 12, 228, 117, 3, 160, 50, 102, 59, 219, 103, 233, 16, 178, 7, 114, 227, 144, 202, 175, 178, 31, 64, 200, 62, 37, 86, 114, 239, 243, 85, 134, 201, 219, 37, 131, 53, 247, 24, 23, 208, 97, 226, 230, 211, 237, 185, 230, 215, 49, 74, 13, 38, 187, 55, 115, 88, 101, 149, 117, 81, 108, 121, 97, 198, 5, 92, 132, 212, 245, 156, 107, 198, 56, 129, 54, 105, 108, 24, 94, 172, 81, 106, 36, 177, 192, 146, 68, 105, 90, 208, 142, 4, 139, 190, 132, 80, 234, 211, 100, 22, 47, 107, 147, 191, 226, 225, 182, 233, 223, 217, 29, 84, 60, 149, 65, 89, 96, 35, 76, 156, 213, 245, 60, 212, 19, 65, 192, 160, 98, 93, 200, 75, 242, 106, 173, 118, 0, 60, 46, 13, 17, 188, 228, 243, 51, 198, 8, 166, 26, 96, 107, 144, 164, 90, 29, 4, 155, 122, 220, 245, 26, 148, 117, 112, 188, 46, 78, 108, 68, 91, 174, 212, 111, 61, 31, 18, 220, 152, 93, 9, 232, 81, 212, 214, 139, 100, 105, 87, 161, 141, 242, 18, 230, 108, 233, 248, 146, 27, 193, 115, 42, 76, 78, 110, 238, 46, 68, 192, 72, 16, 170, 165, 121, 51, 84, 188, 60, 91, 151, 57, 67, 194, 80, 58, 195, 218, 87, 30, 84, 18, 91, 199, 61, 28, 117, 238, 43, 114, 93, 136, 33, 247, 64, 21, 185, 191, 52, 17, 221, 6, 210, 237, 200, 13, 64, 220, 145, 5, 153, 235, 18, 53, 254, 105, 245, 184, 143, 133, 175, 152, 36, 215, 233, 132, 206, 48, 176, 187, 91, 121, 6, 139, 154, 183, 86, 196, 169, 167, 137, 79, 202, 11, 218, 162, 158, 247, 16, 135, 70, 251, 37, 134, 205, 98, 79, 241, 215, 135, 81, 234, 79, 117, 149, 254, 230, 201, 109, 168, 229, 44, 161, 110, 135, 38, 146, 116, 238, 118, 242, 232, 96, 89, 82, 180, 177, 9, 77, 240, 199, 161, 209, 129, 70, 192, 198, 216, 95, 232, 99, 172, 58, 37, 178, 241, 250, 43, 98, 252, 223, 171, 222, 25, 143, 33, 207, 88, 199, 112, 126, 62, 241, 72, 24, 78, 135, 8, 138, 133, 83, 138, 206, 139, 63, 58, 91, 4, 113, 170, 172, 202, 182, 230, 196, 252, 69, 81, 91, 65, 189, 24, 214, 86, 211, 22, 241, 100, 177, 21, 93, 188, 14, 95, 165, 140, 228, 178, 27, 229, 57, 113, 91, 215, 18, 84, 161, 56, 111, 160, 163, 108, 205, 185, 5, 43, 133, 175, 98, 131, 119, 49, 51, 217, 166, 186, 106, 213, 25, 43, 184, 193, 177, 25, 146, 53, 25, 146, 54, 118, 19, 56, 145, 125, 246, 66, 154, 216, 123, 129, 39, 48, 71, 132, 50, 227, 251, 46, 108, 81, 253, 250, 95, 235, 190, 248, 16, 231, 108, 37, 116, 1, 157, 39, 89, 143, 61, 160, 100, 234, 24, 76, 0, 208, 113, 236, 190, 72, 226, 1, 21, 132, 50, 2, 129, 0, 115, 109, 197, 44, 198, 141, 229, 80, 19, 22, 152, 30, 209, 100, 88, 235, 28, 21, 209, 142, 81, 58, 167, 209, 240, 180, 125, 12, 148, 119, 174, 177, 191, 131, 59, 230, 196, 69, 203, 91, 46, 11, 166, 132, 107, 223, 237, 202, 59, 193, 20, 226, 102, 236, 65, 255, 169, 30, 163, 115, 121, 16, 53, 213, 126, 132, 98, 71, 185, 91, 41, 25, 146, 250, 154, 164, 55, 216, 61, 40, 201, 77, 30, 126, 213, 51, 167, 151, 126, 229, 236] - ], - "segmentSize": null - }, - { - "encrypted": [ - [174, 63, 138, 208, 72, 182, 139, 29, 54, 107, 149, 94, 138, 195, 202, 85, 67, 59, 105, 108, 253, 43, 43, 155, 24, 95, 4, 222, 208, 56, 118, 105, 176, 61, 176, 208, 126, 151, 240, 197, 238, 142, 5, 155, 108, 118, 100, 186, 169, 182, 210, 126, 241, 164, 82, 25, 162, 62, 128, 52, 124, 146, 220, 82, 98, 246, 229, 87, 169, 67, 214, 175, 252, 255, 189, 91, 40, 200, 79, 136, 147, 67, 193, 3, 229, 154, 1, 39, 224, 16, 209, 29, 183, 133, 30, 40, 111, 204, 255, 106, 181, 30, 63, 200, 186, 142, 161, 75, 126, 38, 104, 57, 22, 243, 63, 151, 10, 219, 222, 74, 227, 76, 198, 139, 141, 76, 167, 219, 3, 47, 120, 39, 234, 247, 225, 250, 138, 21, 95, 162, 4, 86, 177, 122, 191, 245, 174, 85, 140, 88, 224, 64, 175, 254, 84, 62, 157, 25, 96, 191, 2, 27, 255, 157, 66, 179, 110, 225, 251, 82, 220, 51, 215, 202, 231, 171, 90, 221, 37, 168, 245, 191, 198, 197, 104, 55, 170, 250, 167, 186, 139, 160, 89, 97, 68, 149, 198, 113, 174, 140, 81, 95, 178, 49, 100, 151, 240, 92, 219, 21, 20, 65, 150, 101, 106, 174, 245, 54, 134, 172, 13, 223, 46, 35, 171, 180, 130, 199, 244, 27, 161, 24, 31, 205, 150, 10, 214, 151, 159, 104, 20, 108, 63, 174, 246, 209, 149, 166, 248, 128, 221, 178, 242, 253, 241, 241, 147, 200, 154, 189, 40, 81, 132, 59, 197, 154, 176, 2, 73, 162, 209, 35, 181, 180, 221, 0, 59, 246, 132, 17, 210, 0, 106, 54, 37, 5, 106, 153, 222, 191, 42, 82, 84, 63, 195, 11, 32, 179, 169, 224, 137, 2, 0, 205, 88, 190, 4, 211, 148, 155, 6, 109, 118, 48, 35, 199, 0, 34, 3, 45, 95, 177, 173, 230, 131, 108, 28, 204, 182, 35, 213, 28, 40, 26, 243, 255, 228, 238, 172, 141, 216, 248, 254, 135, 165, 186, 126, 57, 88, 16, 80, 200, 74, 247, 56, 138, 140, 90, 113, 224, 110, 19, 223, 9, 213, 120, 215, 179, 205, 37, 153, 209, 234, 211, 251, 190, 65, 50, 216, 89, 255, 62, 60, 103, 165, 103, 131, 255, 241, 99, 224, 229, 231, 50, 82, 87, 168, 250, 137, 50, 184, 166, 98, 100, 255, 80, 199, 34, 29, 11, 242, 40, 235, 108, 96, 144, 87, 68, 35, 51, 213, 54, 3, 62, 20, 117, 146, 254, 89, 188, 55, 165, 252, 218, 21, 208, 201, 163, 200, 178, 101, 158, 229, 209, 63, 200, 234, 19, 232, 156, 143, 100, 157, 125, 214, 18, 224, 141, 122, 169, 67, 139, 67, 95, 171, 255, 101, 53, 66, 125, 113, 75, 66, 172, 181, 141, 119, 143, 191, 23, 202, 185, 155, 4, 3, 215, 69, 217, 54, 12, 144, 215, 203, 71, 178, 178, 95, 39, 197, 9, 164, 29, 117, 229, 186, 21, 125, 48, 227, 104, 164, 187, 255, 117, 63, 142, 135, 148, 25, 135, 52, 118, 109, 41, 71, 139, 63, 87, 113, 134, 228, 107, 46, 229, 183, 114, 0, 122, 34, 71, 15, 46, 226, 218, 23, 234, 195, 66, 203, 169, 49, 89, 31, 40, 248, 90, 117, 36, 94, 37, 34, 186, 146, 54, 125, 247, 167, 100, 88, 205, 179, 129, 41, 61, 247, 95, 237, 217, 2, 253, 230, 164, 107, 109, 77, 94, 112, 208, 71, 72, 82, 214, 215, 207, 24, 34, 240, 36, 3, 241, 235, 222, 139, 147, 111, 178, 23, 221, 48, 245, 97, 20, 251, 17, 83, 52, 66, 238, 93, 104, 79, 156, 104, 44, 29, 148, 112, 92, 51, 220, 174, 171, 65, 87, 156, 76, 169, 78, 90, 103, 131, 175, 181, 226, 120, 11, 149, 170, 134, 186, 11, 167, 210, 157, 65, 138, 53, 145, 86, 3, 9, 0, 244, 75, 49, 121, 196, 36, 32, 237, 119, 186, 198, 39, 146, 91, 51, 204, 22, 73, 217, 112, 169, 64, 11, 50, 241, 31, 245, 149, 46, 203, 121, 10, 95, 71, 127, 180, 146, 51, 131, 251, 234, 49, 37, 119, 47, 108, 247, 109, 161, 65, 39, 81, 24, 62, 92, 68, 240, 213, 232, 103, 236, 8, 208, 254, 83, 114, 119, 88, 225, 21, 167, 237, 39, 29, 36, 177, 244, 164, 167, 79, 100, 167, 23, 185, 160, 107, 70, 91, 120, 198, 15, 219, 15, 19, 49, 243, 111, 143, 224, 62, 6, 195, 191, 217, 194, 224, 188, 202, 179, 156, 196, 194, 251, 170, 194, 15, 55, 187, 192, 154, 40, 11, 237, 137, 185, 96, 106, 141, 101, 161, 97, 151, 143, 52, 119, 190, 130, 7, 183, 210, 68, 23, 76, 218, 118, 51, 212, 83, 158, 162, 48, 253, 48, 11, 98, 27, 183, 120, 196, 109, 222, 104, 129, 14, 188, 234, 22, 54, 131, 32, 175, 243, 105, 40, 35, 159, 210, 37, 77, 141, 22, 21, 226, 66, 51, 16, 195, 25, 99, 143, 2, 64, 175, 37, 203, 106, 109, 213, 17, 165, 232, 177, 236, 3, 135, 115, 79, 162, 114, 182, 136, 166, 153, 192, 217, 100, 37, 176, 78, 144, 204, 125, 116, 35, 188, 80, 251, 191, 107, 120, 111, 226, 149, 23, 1, 13, 62, 146, 11, 77, 9, 201, 110, 61, 10, 30, 204, 85, 108, 175, 234, 80, 206, 114, 171, 96, 216, 127, 208, 111, 15, 162, 199, 113, 109, 102, 31, 55, 85, 171, 178, 200, 211, 146, 113, 158, 113, 80, 78, 6, 4, 20, 168, 83, 64, 250, 216, 226, 5, 196, 186, 1, 219, 69, 21, 242, 228, 246, 217, 92, 254, 159, 94, 173, 127, 32, 241, 73, 133, 126, 3, 5, 71, 109, 116, 65, 29, 174, 168, 89, 27, 23, 115, 222, 255, 96, 97, 173, 206, 9, 176, 129, 50, 140, 152, 248, 112, 10, 49, 35, 181, 183, 78, 192, 195, 72, 96, 175, 198, 115, 61, 179, 138, 110, 230, 206, 226, 74, 114, 162, 33, 242, 207, 2, 66, 147, 104, 34, 143, 75, 25, 200, 198, 192, 157, 239, 187, 92, 210, 222, 118, 73, 96, 41, 65, 123, 136, 96, 80, 49, 186, 136, 121, 137, 225, 208, 136, 63, 120, 170, 184, 160, 117, 215, 85, 211, 142, 94, 180, 110, 238, 105, 240, 62, 174, 234, 47, 84, 129, 186, 71, 200, 80, 51, 242, 208, 200, 142, 152, 62, 101, 160, 51, 200, 53, 155, 133, 44, 35, 56, 169, 99, 137, 163, 2, 106, 118, 205, 94, 181, 23, 28, 189, 27, 46, 98, 126, 122, 40, 160, 171, 148, 59, 94, 31, 44, 31, 138, 171, 8, 149, 67, 118, 169, 68, 30, 125, 113, 215, 50, 52, 173, 68, 78, 190, 194, 60, 65, 175, 28, 181, 31, 242, 167, 4, 251, 194, 46, 192, 161, 239, 199, 150, 69, 58, 192, 53, 71, 21, 29, 185, 182, 136, 6, 128, 90, 170, 139, 226, 55, 178, 72, 244, 82, 63, 169, 201, 243, 211, 24, 9, 80, 144, 125, 72, 30, 91, 211, 242, 250, 7, 58, 34, 135, 223, 131, 67, 127, 42, 36, 105, 51, 135, 126, 115, 146, 38, 130, 218, 60, 78, 49, 24, 235, 36, 68, 29, 30, 242, 242, 12, 116, 112, 76, 130, 246, 230, 45, 226, 144, 121, 194, 142, 232, 204, 79, 127, 66, 25, 139, 237, 168, 87, 125, 193, 127, 220, 241, 77, 171, 123, 249, 22, 95, 74, 31, 198, 229, 212, 199, 205, 79, 10, 209, 113, 161, 196, 158, 89, 66, 149, 208, 143, 110, 129, 130, 72, 148, 108, 122, 112, 102, 248, 135, 21, 0, 106, 28, 42, 97, 183, 187, 224, 232, 68, 210, 133, 93, 240, 88, 225, 33, 127, 234, 210, 211, 168, 50, 187, 84, 0, 105, 158, 37, 15, 19, 6, 202, 223, 43, 125, 244, 190, 95, 87, 159, 17, 89, 38, 84, 107, 27, 62, 191, 68, 91, 250, 33, 238, 255, 226, 34, 92, 76, 203, 161, 180, 224, 180, 222, 245, 246, 239, 146, 145, 41, 189, 25, 44, 229, 246, 160, 40, 46, 140, 185, 248, 117, 121, 169, 145, 208, 189, 217, 176, 7, 245, 58, 62, 91, 212, 165, 73, 61, 248, 204, 48, 209, 249, 209, 127, 112, 98, 150, 46, 144, 244, 150, 82, 118, 254, 119, 226, 172, 220, 59, 235, 198, 38, 189, 159, 190, 97, 103, 38, 13, 116, 248, 60, 50, 208, 181, 225, 133, 214, 255, 111, 74, 125, 151, 223, 250, 40, 51, 64, 220, 174, 115, 1, 232, 58, 87, 31, 213, 59, 7, 197, 225, 44, 94, 75, 206, 36, 120, 5, 73, 125, 214, 144, 15, 7, 95, 157, 102, 171, 116, 77, 23, 238, 165, 226, 7, 108, 173, 69, 94, 87, 45, 23, 207, 182, 48, 191, 202, 255, 106, 105, 144, 12, 97, 14, 151, 87, 242, 55, 149, 61, 84, 65, 206, 8, 151, 33, 141, 8, 100, 225, 56, 125, 89, 235, 142, 136, 14, 243, 58, 164, 159, 162, 48, 40, 176, 181, 230, 224, 46, 251, 6, 56, 126, 125, 1, 7, 36, 214, 249, 7, 175, 36, 82, 171, 145, 197, 251, 254, 9, 151, 122, 10, 80, 216, 193, 34, 53, 195, 111, 186, 14, 120, 248, 25, 100, 250, 48, 126, 82, 92, 18, 42, 227, 74, 134, 137, 247, 114, 0, 98, 79, 191, 64, 112, 2, 213, 184, 51, 16, 138, 42, 199, 250, 196, 83, 162, 59, 232, 48, 205, 144, 36, 61, 34, 129, 165, 175, 60, 199, 50, 34, 235, 19, 104, 45, 89, 30, 95, 38, 191, 10, 225, 69, 249, 151, 158, 102, 30, 13, 193, 109, 173, 233, 245, 229, 19, 1, 143, 138, 211, 89, 140, 225, 239, 13, 62, 190, 166, 240, 64, 76, 201, 226, 11, 203, 249, 124, 227, 143, 172, 4, 100, 184, 20, 209, 71, 160, 76, 111, 159, 182, 179, 134, 25, 6, 33, 174, 140, 21, 223, 32, 195, 115, 81, 132, 59, 159, 62, 114, 167, 25, 153, 224, 132, 41, 62, 247, 29, 191, 101, 193, 249, 35, 77, 103, 182, 61, 252, 43, 2, 37, 41, 199, 232, 176, 23, 125, 249, 201, 137, 223, 97, 30, 112, 31, 65, 134, 77, 237, 71, 81, 56, 5, 116, 97, 161, 143, 167, 167, 65, 10, 12, 171, 4, 47, 250, 64, 238, 147, 174, 67, 150, 238, 49, 243, 109, 183, 24, 82, 13, 109, 14, 214, 78, 45, 115, 15, 173, 34, 231, 185, 64, 223, 8, 66, 127, 90, 176, 168, 108, 177, 169, 85, 32, 241, 99, 153, 156, 38, 180, 103, 24, 55, 202, 47, 5, 162, 137, 159, 155, 20, 145, 108, 253, 178, 2, 124, 134, 140, 22, 62, 147, 49, 58, 207, 216, 19, 102, 31, 59, 35, 8, 66, 85, 128, 238, 41, 40, 17, 176, 247, 209, 83, 117, 245, 142, 64, 66, 19, 142, 174, 6, 134, 190, 145, 88, 148, 138, 66, 39, 199, 202, 10, 188, 133, 15, 246, 93, 51, 71, 68, 202, 79, 244, 37, 12, 16, 90, 59, 12, 110, 86, 212, 244, 163, 83, 217, 136, 235, 197, 77, 104, 76, 191, 46, 142, 135, 129, 239, 140, 128, 149, 4, 137, 152, 136, 28, 247, 178, 218, 164, 53, 142, 52, 33, 238, 53, 76, 186, 32, 128, 186, 174, 211, 181, 135, 163, 40, 123, 68, 126, 158, 150, 49, 29, 13, 224, 128, 36, 183, 94, 166, 94, 213, 33, 127, 106, 199, 5, 172, 124, 98, 152, 212, 225, 55, 98, 3, 54, 40, 63, 203, 106, 232, 106, 50, 181, 78, 252, 112, 35, 144, 58, 214, 251, 25, 187, 114, 149, 109, 194, 247, 136, 236, 79, 220, 251, 164, 193, 77, 199, 134, 64, 61, 150, 120, 4, 144, 230, 168, 61, 231, 156, 5, 35, 89, 209, 119, 250, 74, 59, 153, 155, 24, 205, 39, 214, 18, 231, 79, 118, 40, 200, 231, 71, 84, 114, 64, 33, 191, 61, 252, 122, 99, 241, 198, 160, 92, 117, 79, 56, 96, 112, 196, 35, 0, 141, 55, 44, 7, 130, 39, 252, 221, 106, 182, 11, 10, 249, 229, 254, 187, 244, 154, 254, 104, 57, 29, 118, 158, 194, 191, 43, 22, 63, 219, 19, 124, 0, 251, 96, 165, 113, 27, 12, 232, 4, 110, 146, 59, 0, 202, 133, 155, 229, 164, 150, 78, 142, 150, 40, 196, 156, 252, 68, 167, 246, 80, 210, 33, 151, 161, 118, 227, 10, 210, 235, 217, 50, 33, 67, 63, 139, 152, 152, 86, 213, 15, 118, 191, 52, 15, 37, 213, 124, 84, 206, 191, 168, 87, 118, 149, 216, 1, 169, 94, 70, 239, 195, 76, 170, 23, 170, 99, 86, 173, 180, 26, 150, 0, 229, 99, 169, 166, 178, 136, 213, 41, 165, 240, 42, 152, 248, 197, 225, 82, 156, 173, 218, 190, 168, 240, 214, 86, 45, 9, 211, 70, 125, 190, 125, 113, 106, 204, 105, 107, 238, 48, 43, 212, 141, 138, 52, 206, 1, 118, 36, 213, 228, 194, 151, 4, 33, 238, 20, 197, 61, 29, 235, 134, 147, 50, 116, 32, 239, 244, 214, 31, 46, 133, 120, 160, 149, 55, 28, 59, 75, 191, 88, 27, 65, 114, 252, 107, 18, 206, 2, 193, 186, 247, 65, 70, 33, 179, 234, 160, 83, 173, 194, 134, 52, 219, 200, 73, 96, 232, 74, 182, 78, 238, 59, 124, 116, 196, 175, 112, 253, 179, 144, 123, 182, 88, 78, 32, 99, 182, 157, 72, 50, 202, 68, 247, 53, 57, 34, 37, 91, 216, 64, 196, 174, 135, 192, 252, 151, 181, 253, 39, 249, 93, 49, 155, 132, 151, 167, 94, 134, 183, 11, 102, 225, 158, 24, 54, 171, 158, 143, 62, 220, 81, 73, 119, 27, 50, 244, 19, 209, 39, 254, 40, 207, 135, 11, 166, 214, 114, 243, 132, 229, 232, 59, 61, 33, 159, 102, 186, 107, 165, 195, 215, 76, 210, 149, 10, 2, 80, 134, 227, 169, 179, 95, 12, 147, 122, 0, 228, 83, 184, 143, 177, 189, 77, 249, 236, 9, 180, 11, 150, 178, 77, 192, 92, 43, 220, 71, 22, 131, 151, 108, 35, 149, 230, 246, 239, 66, 23, 187, 94, 100, 169, 114, 206, 105, 210, 82, 250, 48, 159, 127, 70, 4, 121, 221, 185, 91, 76, 152, 156, 76, 89, 4, 250, 4, 250, 31, 235, 14, 142, 147, 112, 52, 26, 135, 69, 13, 241, 119, 253, 192, 45, 173, 82, 94, 73, 122, 144, 84, 100, 99, 41, 137, 174, 146, 140, 210, 241, 64, 225, 191, 254, 66, 136, 228, 52, 136, 94, 139, 13, 223, 213, 51, 221, 20, 133, 133, 63, 87, 245, 188, 44, 35, 26, 168, 59, 220, 178, 89, 244, 68, 31, 179, 97, 233, 57, 126, 59, 92, 187, 133, 217, 180, 177, 7, 43, 73, 155, 30, 7, 204, 222, 38, 134, 203, 57, 208, 19, 165, 179, 64, 242, 229, 57, 201, 11, 26, 165, 154, 185, 37, 199, 133, 155, 162, 163, 70, 199, 134, 2, 19, 43, 176, 244, 186, 236, 204, 78, 159, 169, 113, 131, 57, 103, 75, 129, 127, 47, 148, 59, 119, 131, 188, 252, 8, 202, 155, 33, 218, 152, 216, 194, 68, 35, 103, 168, 246, 3, 131, 206, 249, 212, 106, 199, 31, 48, 88, 220, 248, 0, 24, 112, 25, 51, 4, 31, 151, 108, 164, 44, 236, 95, 10, 116, 89, 219, 198, 129, 4, 43, 115, 56, 11, 146, 149, 225, 57, 115, 63, 168, 105, 229, 189, 136, 91, 136, 173, 175, 56, 36, 212, 150, 146, 240, 200, 2, 103, 35, 204, 237, 122, 196, 241, 167, 195, 85, 209, 240, 50, 238, 185, 85, 232, 198, 37, 250, 86, 222, 137, 231, 10, 77, 226, 27, 22, 6, 109, 106, 63, 48, 76, 88, 203, 116, 207, 233, 92, 160, 36, 185, 112, 122, 157, 176, 238, 79, 37, 43, 84, 156, 120, 80, 94, 151, 252, 148, 19, 142, 32, 184, 241, 203, 183, 84, 7, 105, 196, 250, 174, 49, 213, 151, 49, 41, 193, 245, 108, 247, 236, 231, 103, 247, 123, 50, 164, 48, 90, 212, 140, 31, 217, 49, 32, 54, 82, 91, 55, 231, 122, 175, 201, 219, 213, 90, 48, 165, 55, 13, 255, 154, 231, 30, 225, 153, 205, 96, 84, 108, 38, 156, 68, 119, 35, 247, 5, 32, 180, 49, 85, 219, 249, 245, 153, 248, 187, 151, 145, 55, 199, 156, 162, 80, 49, 76, 158, 48, 39, 40, 102, 64, 107, 184, 127, 197, 53, 21, 92, 78, 74, 90, 42, 209, 59, 9, 194, 107, 9, 247, 109, 26, 217, 165, 251, 159, 166, 211, 16, 29, 205, 154, 49, 48, 84, 55, 192, 30, 84, 220, 248, 107, 54, 128, 64, 92, 17, 131, 174, 198, 30, 197, 147, 194, 83, 24, 91, 197, 232, 241, 88, 47, 18, 149, 204, 151, 66, 84, 205, 23, 244, 190, 51, 96, 84, 254, 231, 217, 104, 155, 138, 159, 224, 103, 77, 147, 23, 4, 6, 197, 38, 163, 36, 143, 19, 131, 88, 203, 39, 164, 104, 43, 189, 100, 9, 105, 213, 94, 151, 178, 167, 163, 190, 172, 154, 122, 94, 128, 157, 153, 198, 227, 82, 194, 132, 62, 147, 55, 201, 184, 46, 65, 250, 114, 247, 164, 11, 17, 44, 23, 199, 244, 75, 14, 3, 228, 83, 202, 83, 235, 117, 40, 232, 25, 234, 121, 86, 205, 30, 110, 26, 92, 115, 227, 32, 241, 206, 117, 2, 145, 127, 186, 68, 80, 243, 149, 235, 59, 74, 214, 33, 172, 158, 170, 11, 127, 231, 29, 182, 59, 137, 153, 157, 155, 77, 232, 118, 195, 36, 66, 139, 177, 97, 105, 16, 124, 156, 105, 30, 148, 177, 29, 78, 222, 81, 49, 150, 15, 98, 196, 247, 133, 92, 222, 10, 54, 86, 232, 164, 79, 42, 42, 71, 28, 176, 42, 5, 237, 76, 131, 21, 98, 99, 225, 205, 185, 194, 159, 71, 63, 237, 194, 16, 11, 253, 5, 68, 141, 177, 57, 18, 73, 5, 151, 103, 27, 85, 175, 235, 234, 44, 23, 4, 203, 215, 152, 198, 212, 160, 223, 160, 236, 225, 214, 232, 150, 144, 78, 228, 219, 137, 251, 139, 83, 248, 196, 140, 144, 57, 145, 128, 101, 162, 35, 223, 162, 106, 110, 90, 56, 252, 86, 138, 111, 205, 86, 118, 222, 102, 198, 20, 50, 105, 43, 32, 221, 102, 132, 129, 156, 247, 119, 75, 46, 83, 47, 105, 212, 216, 20, 121, 113, 125, 194, 25, 124, 37, 46, 222, 160, 187, 101, 207, 42, 10, 165, 176, 19, 148, 14, 121, 46, 59, 101, 74, 233, 14, 123, 189, 179, 114, 33, 2, 86, 58, 116, 163, 19, 69, 65, 53, 110, 63, 93, 187, 207, 172, 121, 114, 66, 86, 69, 25, 254, 9, 254, 72, 58, 227, 233, 218, 125, 182, 217, 201, 231, 49, 167, 1, 157, 178, 181, 20, 195, 153, 227, 229, 10, 84, 171, 232, 64, 168, 255, 218, 6, 227, 206, 173, 41, 201, 51, 239, 215, 61, 131, 152, 54, 8, 187, 139, 111, 140, 7, 183, 93, 6, 10, 71, 114, 76, 221, 96, 220, 78, 42, 250, 240, 75, 218, 87, 151, 108, 229, 182, 162, 99, 17, 210, 112, 78, 135, 249, 21, 9, 169, 246, 92, 240, 110, 107, 74, 61, 15, 41, 82, 128, 119, 150, 17, 28, 127, 55, 219, 40, 116, 69, 147, 13, 249, 176, 23, 228, 15, 23, 240, 116, 87, 63, 5, 78, 185, 116, 215, 244, 79, 198, 237, 202, 2, 29, 123, 135, 108, 88, 13, 46, 73, 123, 179, 243, 17, 252, 212, 86, 166, 110, 27, 77, 83, 95, 118, 130, 226, 239, 167, 194, 5, 179, 17, 123, 78, 247, 178, 133, 165, 42, 224, 89, 58, 239, 84, 82, 22, 9, 149, 225, 192, 170, 136, 230, 228, 184, 122, 177, 24, 206, 233, 24, 183, 85, 218, 150, 52, 30, 193, 8, 8, 179, 106, 229, 250, 229, 237, 221, 238, 107, 246, 58, 210, 80, 253, 102, 125, 36, 208, 67, 219, 47, 103, 58, 27, 217, 0, 54, 1, 191, 161, 212, 95, 111, 138, 107, 213, 27, 146, 55, 61, 229, 81, 38, 203, 20, 68, 42, 163, 105, 17, 74, 44, 4, 192, 111, 87, 125, 225, 125, 206, 155, 24, 203, 171, 144, 249, 202, 168, 83, 28, 164, 73, 5, 4, 76, 203, 142, 188, 193, 91, 5, 107, 157, 77, 58, 183, 194, 241, 21, 169, 123, 218, 196, 92, 3, 1, 85, 131, 54, 58, 232, 210, 66, 33, 196, 72, 167, 62, 35, 38, 221, 23, 48, 224, 160, 34, 50, 252, 63, 244, 142, 139, 178, 115, 223, 77, 137, 198, 247, 122, 102, 98, 102, 118, 98, 247, 178, 117, 200, 252, 175, 232, 14, 90, 226, 53, 26, 59, 102, 33, 9, 181, 16, 174, 114, 255, 57, 160, 30, 17, 250, 16, 91, 26, 222, 195, 2, 209, 108, 128, 190, 140, 231, 123, 58, 246, 159, 222, 13, 155, 77, 238, 10, 242, 243, 218, 53, 228, 87, 125, 19, 242, 31, 0, 160, 233, 29, 38, 244, 196, 1, 201, 217, 68, 82, 204, 182, 34, 155, 132, 64, 58, 102, 4, 47, 255, 156, 189, 140, 63, 40, 53, 40, 167, 169, 223, 163, 226, 137, 185, 255, 212, 26, 150, 117, 73, 18, 189, 221, 207, 1, 235, 129, 27, 77, 205, 185, 100, 195, 241, 200, 93, 137, 29, 68, 205, 141, 45, 244, 200, 19, 243, 123, 75, 239, 196, 210, 91, 230, 114, 3, 199, 228, 36, 226, 166, 47, 151, 203, 12, 193, 253, 18, 122, 227, 225, 70, 170, 233, 79, 244, 38, 50, 1, 51, 43, 166, 179, 21, 234, 160, 196, 122, 116, 159, 11, 254, 24, 57, 149, 15, 231, 36, 202, 129, 207, 243, 84, 156, 153, 110, 187, 107, 75, 36, 100, 153, 5, 185, 29, 126, 224, 237, 39, 168, 239, 40, 117, 36, 56, 12, 124, 249, 95, 249, 34, 188, 104, 104, 235, 155, 203, 232, 8, 17, 131, 173, 117, 97, 163, 82, 14, 63, 216, 108, 137, 135, 47, 149, 206, 244, 244, 105, 67, 97, 244, 218, 162, 17, 55, 59, 179, 4, 246, 199, 69, 19, 29, 10, 218, 222, 173, 27, 94, 204, 64, 35, 49, 215, 216, 134, 229, 245, 20, 19, 90, 247, 225, 211, 208, 164, 35, 185, 245, 73, 76, 15, 37, 96, 30, 75, 167, 192, 252, 71, 126, 169, 213, 13, 54, 204, 14, 254, 89, 74, 160, 134, 239, 243, 155, 254, 119, 101, 73, 221, 106, 28, 1, 42, 170, 82, 52, 103, 223, 183, 116, 215, 36, 176, 222, 109, 26, 48, 135, 95, 127, 86, 5, 37, 133, 57, 133, 55, 156, 138, 132, 17, 44, 215, 204, 35, 109, 72, 24, 110, 15, 78, 132, 212, 163, 114, 181, 117, 96, 127, 174, 207, 66, 111, 39, 192, 208, 185, 7, 152, 237, 213, 17, 142, 35, 60, 99, 76, 160, 137, 184, 12, 233, 251, 34, 9, 129, 219, 7, 14, 35, 232, 33, 225, 152, 110, 241, 196, 219, 143, 120, 121, 39, 246, 122, 111, 30, 248, 69, 51, 213, 11, 22, 214, 107, 249, 205, 159, 253, 36, 242, 62, 147, 221, 104, 123, 243, 23, 18, 153, 77, 217, 139, 239, 111, 94, 11, 22, 226, 26, 27, 141, 13, 193, 178, 192, 11, 167, 185, 63, 13, 180, 196, 76, 36, 252, 13, 123, 244, 171, 142, 166, 64, 36, 170, 57, 141, 139, 193, 49, 161, 66, 92, 25, 66, 133, 242, 8, 80, 126, 26, 200, 150, 121, 133, 120, 29, 214, 22, 48, 130, 91, 87, 95, 67, 220, 19, 209, 186, 195, 167, 5, 185, 74, 248, 57, 199, 234, 228, 237, 88, 170, 201, 255, 72, 95, 21, 131, 195, 125, 23, 77, 193, 221, 212, 144, 159, 49, 59, 153, 117, 43, 194, 122, 243, 224, 22, 33, 143, 254, 29, 79, 6, 226, 117, 134, 121, 175, 55, 27, 56, 18, 121, 93, 24, 15, 58, 234, 131, 139, 3, 217, 2, 39, 45, 73, 209, 109, 166, 227, 131, 145, 202, 147, 170, 178, 68, 246, 146, 198, 153, 26, 86, 53, 188, 254, 161, 6, 155, 177, 70, 253, 214, 87, 26, 185, 202, 222, 116, 29, 202, 240, 200, 193, 140, 252, 31, 217, 250, 135, 156, 227, 98, 217, 74, 222, 18, 183, 226, 250, 60, 243, 249, 232, 225, 163, 118, 11, 116, 26, 115, 255, 30, 81, 244, 15, 133, 22, 233, 11, 116, 145, 89, 145, 165, 245, 16, 223, 123, 254, 115, 158, 61, 119, 205, 33, 232, 24, 170, 68, 44, 102, 42, 38, 161, 209, 79, 103, 166, 194, 198, 127, 220, 252, 47, 2, 157, 40, 131, 175, 246, 55, 188, 249, 243, 181, 191, 120, 44, 24, 154, 214, 239, 136, 57, 175, 51, 220, 62, 98, 87, 227, 118, 221, 103, 153, 103, 144, 26, 31, 10, 226, 210, 248, 106, 49, 17, 17, 193, 224, 132, 97, 104, 135, 196, 147, 240, 22, 20, 186, 212, 136, 184, 193, 185, 100, 62, 49, 35, 232, 174, 209, 108, 172, 250, 160, 243, 255, 84, 28, 119, 115, 89, 117, 16, 13, 85, 198, 248, 77, 68, 245, 78, 234, 247, 134, 48, 208, 84, 254, 57, 212, 125, 84, 105, 21, 54, 160, 87, 251, 40, 215, 100, 107, 202, 137, 123, 103, 145, 227, 97, 242, 128, 186, 206, 15, 32, 247, 155, 147, 3, 16, 167, 11, 137, 252, 200, 12, 192, 41, 223, 130, 22, 162, 218, 36, 29, 85, 37, 85, 88, 49, 26, 40, 189, 201, 10, 175, 102, 27, 45, 51, 10, 147, 0, 147, 31, 12, 23, 146, 116, 121, 47, 204, 34, 91, 17, 121, 193, 166, 35, 178, 212, 132, 78, 81, 60, 205, 118, 210, 14, 129, 97, 231, 186, 175, 219, 162, 197, 4, 195, 60, 178, 11, 200, 24, 44, 131, 87, 123, 203, 169, 251, 41, 86, 189, 4, 111, 195, 150, 13, 19, 145, 163, 231, 201, 44, 12, 190, 26, 164, 122, 207, 235, 191, 102, 209, 72, 236, 149, 101, 39, 226, 180, 88, 95, 130, 10, 197, 66, 251, 54, 114, 52, 161, 183, 47, 110, 96, 139, 235, 219, 42, 239, 81, 18, 127, 197, 135, 158, 194, 112, 42, 171, 237, 232, 88, 76, 72, 226, 116, 240, 228, 144, 5, 53, 147, 118, 141, 142, 163, 215, 253, 197, 81, 177, 83, 158, 16, 232, 17, 103, 214, 128, 9, 201, 233, 29, 215, 147, 119, 69, 50, 82, 229, 193, 181, 22, 203, 18, 155, 43, 26, 119, 19, 82, 202, 175, 45, 160, 231, 147, 212, 154, 240, 127, 105, 219, 15, 46, 247, 153, 175, 122, 33, 174, 143, 112, 190, 54, 183, 196, 119, 114, 147, 68, 60, 204, 92, 41, 124, 208, 10, 190, 185, 106, 163, 165, 250, 196, 73, 53, 27, 61, 24, 64, 187, 99, 85, 212, 199, 212, 223, 255, 157, 124, 132, 106, 79, 185, 79, 24, 125, 21, 136, 123, 126, 204, 201, 97, 45, 197, 43, 8, 144, 31, 117, 59, 80, 214, 232, 241, 158, 65, 59, 118, 226, 243, 8, 110, 109, 57, 5, 249, 242, 216, 50, 72, 218, 252, 3, 24, 45, 138, 39, 254, 82, 82, 46, 49, 180, 136, 117, 199, 226, 153, 13, 160, 64, 19, 152, 195, 12, 193, 64, 8, 79, 20, 248, 229, 206, 228, 23, 36, 250, 98, 64, 53, 12, 239, 53, 163, 231, 104, 232, 147, 249, 151, 220, 14, 110, 7, 154, 209, 211, 130, 53, 170, 38, 220, 180, 21, 78, 82, 138, 236, 189, 217, 177, 218, 203, 148, 199, 11, 152, 60, 107, 172, 40, 85, 100, 244, 58, 222, 80, 24, 253, 65, 184, 236, 32, 112, 111, 239, 81, 131, 6, 98, 23, 33, 137, 144, 13, 130, 88, 31, 55, 54, 47, 7, 196, 7, 177, 168, 148, 143, 24, 64, 156, 38, 84, 73, 189, 97, 75, 206, 4, 208, 66, 16, 176, 158, 191, 41, 36, 205, 37, 20, 200, 99, 149, 10, 42, 80, 214, 39, 83, 110, 233, 60, 30, 173, 65, 144, 136, 109, 87, 11, 124, 237, 5, 199, 127, 152, 28, 250, 67, 18, 102, 146, 11, 202, 248, 47, 66, 249, 193, 156, 48, 166, 1, 104, 128, 5, 73, 216, 247, 177, 152, 26, 196, 52, 177, 91, 251, 54, 56, 214, 214, 137, 82, 28, 190, 217, 79, 98, 88, 138, 186, 255, 37, 64, 213, 156, 211, 8, 45, 26, 106, 219, 33, 230, 145, 23, 245, 3, 73, 106, 84, 78, 2, 162, 46, 98, 223, 166, 236, 172, 231, 4, 211, 0, 230, 187, 91, 228, 68, 133, 137, 38, 9, 169, 195, 17, 143, 131, 69, 161, 151, 254, 199, 95, 196, 230, 15, 218, 199, 130, 159, 192, 184, 244, 109, 144, 252, 189, 125, 187, 193, 241, 60, 27, 226, 206, 51, 145, 41, 28, 73, 233, 119, 250, 4, 99, 46, 164, 191, 224, 12, 114, 73, 123, 205, 99, 33, 44, 74, 220, 221, 65, 57, 121, 2, 201, 10, 177, 2, 5, 47, 151, 63, 19, 67, 174, 216, 203, 31, 145, 200, 245, 36, 8, 154, 191, 248, 117, 232, 76, 125, 45, 189, 105, 94, 239, 189, 240, 148, 224, 3, 205, 167, 77, 210, 88, 158, 138, 242, 29, 229, 39, 6, 175, 23, 137, 217, 130, 166, 62, 245, 96, 110, 19, 156, 92, 138, 251, 132, 238, 69, 128, 18, 158, 200, 154, 112, 10, 40, 9, 90, 21, 114, 180, 15, 218, 58, 52, 215, 202, 116, 217, 248, 1, 191, 166, 195, 35, 29, 117, 168, 93, 220, 86, 150, 107, 85, 157, 171, 196, 184, 109, 207, 34, 181, 14, 204, 115, 180, 11, 67, 242, 200, 153, 93, 79, 103, 235, 178, 54, 185, 112, 50, 157, 65, 12, 43, 184, 136, 192, 113, 238, 229, 10, 22, 42, 174, 162, 66, 95, 91, 84, 0, 46, 132, 17, 83, 45, 200, 156, 71, 249, 176, 25, 145, 250, 11, 49, 141, 203, 122, 183, 10, 163, 35, 238, 227, 16, 158, 192, 113, 60, 191, 50, 223, 6, 75, 51, 233, 9, 90, 146, 189, 223, 24, 185, 49, 185, 91, 118, 71, 143, 229, 171, 108, 236, 154, 34, 9, 21, 125, 99, 137, 94, 121, 128, 238, 98, 153, 184, 144, 206, 115, 142, 114, 148, 169, 197, 28, 58, 241, 216, 158, 104, 181, 153, 155, 169, 157, 111, 65, 27, 202, 103, 132, 201, 128, 63, 65, 156, 48, 67, 240, 79, 216, 199, 240, 43, 60, 108, 103, 255, 234, 254, 151, 187, 44, 148, 59, 114, 71, 100, 25, 242, 212, 144, 33, 73, 43, 94, 242, 118, 141, 113, 88, 184, 15, 141, 36, 89, 249, 253, 80, 185, 223, 15, 156, 199, 110, 9, 153, 123, 111, 107, 1, 161, 146, 241, 202, 89, 197, 23, 52, 106, 188, 137, 50, 179, 115, 43, 127, 163, 180, 117, 29, 116, 9, 79, 235, 75, 84, 151, 40, 25, 226, 198, 25, 32, 122, 55, 22, 222, 52, 220, 10, 37, 62, 104, 59, 247, 187, 72, 16, 232, 83, 179, 141, 228, 42, 219, 130, 146, 109, 113, 162, 10, 18, 154, 228, 129, 198, 239, 16, 45, 214, 44, 186, 191, 152, 238, 148, 164, 127, 116, 38, 105, 114, 138, 184, 145, 189, 250, 7, 134, 51, 65, 160, 106, 123, 197, 245, 245, 91, 245, 29, 238, 198, 192, 72, 182, 6, 205, 63, 8, 174, 177, 244, 226, 32, 163, 120, 8, 145, 161, 130, 92, 24, 142, 36, 44, 184, 170, 249, 69, 108, 66, 220, 61, 179, 27, 237, 37, 147, 203, 181, 60, 2, 107, 236, 128, 33, 210, 187, 228, 188, 248, 2, 126, 140, 129, 139, 231, 139, 25, 106, 122, 12, 112, 73, 67, 180, 164, 146, 141, 94, 105, 55, 97, 54, 84, 145, 141, 187, 56, 25, 198, 147, 236, 207, 188, 236, 90, 170, 80, 141, 6, 244, 54, 31, 53, 45, 191, 188, 73, 219, 4, 23, 228, 56, 38, 56, 154, 112, 165, 210, 63, 124, 156, 169, 254, 50, 117, 64, 51, 131, 200, 62, 247, 1, 211, 214, 195, 67, 17, 201, 172, 241, 82, 177, 99, 12, 36, 36, 184, 186, 91, 216, 226, 211, 87, 67, 38, 38, 8, 206, 39, 89, 253, 166, 34, 85, 236, 234, 68, 204, 98, 9, 60, 158, 215, 195, 52, 113, 40, 195, 100, 80, 200, 148, 195, 64, 87, 196, 172, 118, 67, 232, 123, 165, 201, 97, 169, 211, 164, 81, 236, 142, 195, 170, 132, 65, 124, 81, 116, 192, 253, 11, 132, 108, 33, 156, 162, 222, 68, 31, 232, 61, 186, 108, 45, 84, 137, 60, 4, 96, 115, 132, 68, 57, 250, 42, 248, 176, 132, 6, 27, 249, 116, 223, 166, 97, 165, 244, 175, 16, 236, 123, 73, 216, 85, 242, 41, 125, 108, 243, 36, 109, 112, 94, 213, 144, 164, 34, 25, 154, 157, 85, 211, 78, 184, 103, 251, 168, 255, 225, 88, 99, 16, 239, 42, 118, 108, 21, 224, 153, 84, 202, 227, 151, 58, 5, 139, 3, 54, 99, 214, 6, 194, 71, 27, 187, 90, 115, 141, 37, 202, 238, 76, 122, 245, 84, 190, 145, 22, 57, 159, 250, 63, 239, 80, 221, 220, 210, 243, 89, 57, 203, 65, 98, 161, 78, 137, 163, 105, 42, 162, 221, 70, 115, 11, 25, 243, 215, 146, 176, 146, 215, 3, 94, 69, 9, 89, 157, 15, 89, 134, 138, 166, 0, 83, 232, 254, 92, 211, 143, 250, 68, 132, 63, 190, 145, 251, 164, 101, 19, 228, 218, 207, 43, 42, 33, 147, 80, 5, 60, 101, 251, 122, 87, 243, 55, 180, 104, 28, 97, 55, 40, 150, 212, 152, 37, 140, 129, 31, 205, 196, 36, 165, 85, 54, 181, 201, 159, 164, 129, 20, 52, 127, 128, 134, 214, 87, 194, 32, 131, 158, 186, 91, 35, 81, 84, 72, 1, 27, 146, 217, 37, 240, 4, 85, 2, 73, 33, 249, 193, 43, 86, 116, 19, 250, 134, 196, 245, 193, 128, 29, 209, 134, 232, 128, 109, 80, 226, 106, 210, 160, 97, 74, 214, 97, 129, 99, 12, 243, 162, 133, 2, 33, 147, 155, 63, 162, 246, 95, 154, 80, 228, 109, 211, 210, 119, 144, 101, 172, 134, 196, 192, 235, 246, 136, 65, 176, 73, 100, 125, 59, 189, 226, 127, 157, 238, 95, 172, 185, 166, 175, 95, 25, 137, 177, 23, 34, 151, 35, 152, 97, 150, 174, 235, 152, 166, 208, 134, 239, 43, 196, 43, 236, 110, 71, 220, 26, 1, 242, 171, 214, 195, 27, 228, 20, 20, 206, 45, 142, 99, 53, 89, 247, 45, 3, 33, 133, 224, 45, 31, 200, 152, 86, 46, 166, 235, 172, 140, 9, 242, 37, 156, 18, 59, 25, 155, 57, 44, 156, 227, 135, 152, 23, 177, 220, 129, 251, 91, 212, 9, 207, 160, 168, 105, 28, 160, 188, 51, 23, 161, 243, 153, 90, 104, 59, 75, 42, 152, 172, 143, 209, 177, 230, 230, 58, 87, 72, 62, 137, 242, 121, 51, 33, 184, 28, 150, 194, 100, 255, 199, 150, 22, 15, 3, 204, 229, 247, 219, 150, 28, 73, 199, 68, 34, 196, 236, 249, 240, 106, 113, 128, 134, 200, 49, 90, 227, 168, 207, 111, 34, 101, 235, 173, 25, 78, 66, 210, 132, 76, 40, 251, 15, 41, 104, 95, 105, 190, 36, 120, 201, 91, 60, 6, 163, 176, 112, 34, 113, 163, 215, 148, 254, 46, 175, 4, 210, 216, 242, 12, 214, 106, 227, 80, 112, 227, 165, 33, 255, 138, 106, 159, 247, 109, 110, 40, 27, 11, 1, 148, 192, 217, 34, 110, 131, 241, 179, 32, 51, 166, 115, 112, 191, 193, 174, 42, 91, 98, 166, 162, 3, 14, 195, 49, 45, 194, 44, 216, 56, 177, 113, 72, 194, 132, 177, 183, 228, 0, 23, 123, 49, 132, 86, 119, 35, 89, 144, 191, 170, 35, 206, 21, 122, 76, 50, 132, 239, 113, 16, 121, 248, 91, 177, 164, 48, 163, 131, 57, 182, 63, 241, 103, 58, 30, 167, 89, 70, 232, 193, 62, 162, 162, 125, 224, 54, 163, 79, 99, 203, 110, 238, 227, 92, 213, 120, 173, 250, 254, 207, 94, 18, 50, 231, 1, 59, 150, 132, 251, 83, 136, 230, 68, 85, 42, 133, 177, 203, 186, 24, 58, 197, 231, 29, 233, 199, 162, 149, 26, 124, 119, 125, 73, 213, 124, 20, 24, 125, 110, 227, 252, 168, 36, 127, 248, 22, 255, 168, 164, 17, 204, 5, 203, 101, 45, 64, 5, 8, 111, 7, 61, 222, 252, 11, 243, 13, 141, 186, 178, 211, 197, 224, 44, 190, 126, 238, 22, 126, 45, 110, 142, 137, 51, 74, 252, 198, 97, 226, 213, 61, 221, 60, 17, 3, 234, 85, 130, 57, 76, 96, 215, 228, 8, 233, 179, 128, 107, 46, 175, 87, 64, 7, 201, 57, 34, 63, 90, 75, 5, 108, 162, 100, 201, 170, 152, 205, 74, 223, 73, 14, 70, 34, 241, 59, 128, 99, 53, 62, 208, 173, 38, 244, 105, 70, 154, 202, 125, 102, 185, 40, 31, 15, 18, 21, 251, 72, 135, 43, 121, 226, 229, 104, 129, 207, 195, 148, 223, 43, 71, 135, 100, 132, 218, 76, 229, 97, 28, 103, 50, 125, 240, 3, 161, 183, 245, 159, 48, 175, 64, 105, 10, 12, 152, 164, 134, 219, 249, 173, 38, 87, 186, 188, 205, 91, 179, 3, 66, 163, 200, 179, 198, 153, 169, 229, 77, 159, 241, 79, 76, 134, 75, 61, 247, 182, 169, 169, 116, 95, 111, 14, 151, 239, 5, 108, 84, 45, 188, 30, 171, 172, 204, 200, 237, 242, 209, 74, 174, 235, 170, 19, 253, 32, 202, 93, 228, 24, 233, 44, 109, 147, 6, 74, 204, 216, 162, 52, 218, 89, 200, 72, 190, 13, 75, 178, 17, 178, 128, 128, 201, 186, 183, 22, 225, 94, 103, 185, 199, 6, 233, 92, 205, 127, 141, 91, 103, 19, 145, 143, 210, 96, 0, 197, 22, 252, 23, 173, 219, 120, 237, 150, 47, 114, 161, 190, 102, 91, 159, 97, 124, 35, 173, 235, 73, 177, 46, 78, 107, 159, 188, 46, 5, 37, 45, 1, 91, 238, 44, 81, 202, 51, 4, 18, 37, 126, 84, 35, 77, 205, 91, 203, 0, 30, 189, 189, 232, 190, 3, 128, 84, 53, 134, 68, 174, 100, 11, 255, 244, 37, 241, 2, 66, 81, 63, 231, 16, 5, 165, 48, 110, 128, 143, 129, 219, 97, 8, 184, 36, 82, 143, 88, 18, 145, 97, 196, 184, 226, 117, 21, 145, 28, 4, 2, 46, 212, 93, 181, 75, 59, 174, 49, 255, 185, 187, 103, 64, 145, 173, 3, 253, 200, 215, 197, 89, 10, 92, 25, 101, 106, 205, 20, 96, 106, 209, 157, 11, 238, 214, 154, 113, 89, 159, 89, 153, 225, 37, 155, 144, 28, 248, 252, 51, 240, 176, 183, 210, 83, 140, 114, 92, 1, 113, 77, 136, 166, 182, 19, 86, 93, 89, 57, 144, 238, 136, 76, 49, 137, 138, 164, 81, 168, 142, 197, 195, 97, 130, 147, 130, 50, 205, 224, 219, 42, 120, 166, 175, 98, 140, 220, 53, 79, 236, 206, 98, 235, 137, 112, 114, 27, 10, 238, 141, 168, 91, 61, 65, 175, 202, 164, 190, 244, 39, 160, 179, 180, 104, 92, 162, 94, 141, 50, 208, 101, 112, 131, 125, 247, 240, 40, 98, 39, 146, 142, 88, 71, 14, 63, 47, 197, 221, 160, 156, 139, 173, 192, 157, 183, 201, 48, 223, 102, 130, 250, 39, 239, 79, 91, 201, 44, 189, 63, 66, 215, 94, 35, 77, 235, 123, 253, 124, 13, 144, 52, 180, 14, 64, 40, 166, 167, 241, 137, 70, 211, 175, 125, 145, 186, 181, 163, 160, 217, 233, 209, 35, 88, 174, 165, 162, 151, 62, 54, 187, 91, 82, 94, 192, 131, 25, 135, 84, 189, 18, 27, 134, 94, 229, 74, 152, 53, 110, 251, 167, 224, 197, 36, 124, 25, 93, 1, 70, 240, 136, 138, 136, 21, 151, 249, 205, 254, 75, 62, 48, 176, 72, 64, 71, 22, 75, 7, 216, 143, 182, 4, 169, 101, 78, 170, 201, 100, 154, 148, 92, 77, 41, 16, 214, 65, 127, 123, 158, 234, 172, 118, 77, 105, 244, 61, 11, 74, 173, 85, 77, 231, 168, 146, 56, 135, 210, 186, 63, 254, 170, 120, 4, 27, 233, 116, 90, 40, 20, 80, 195, 93, 70, 67, 44, 19, 134, 177, 65, 115, 133, 42, 201, 43, 165, 60, 231, 239, 167, 244, 197, 19, 57, 222, 195, 75, 97, 52, 135, 251, 44, 172, 201, 216, 111, 5, 240, 64, 75, 102, 220, 213, 85, 28, 40, 237, 116, 70, 75, 44, 74, 40, 138, 185, 55, 148, 185, 67, 125, 159, 138, 100, 103, 247, 49, 10, 34, 50, 72, 144, 185, 190, 110, 88, 75, 97, 72, 187, 99, 45, 33, 209, 88, 18, 201, 131, 113, 67, 251, 101, 83, 81, 228, 148, 80, 141, 234, 92, 172, 49, 46, 88, 208, 111, 0, 247, 49, 114, 70, 248, 94, 237, 220, 61, 113, 141, 134, 156, 151, 95, 83, 56, 229, 9, 96, 39, 18, 52, 124, 88, 120, 112, 63, 118, 48, 44, 213, 32, 233, 3, 131, 216, 155, 24, 77, 107, 83, 230, 117, 17, 177, 6, 46, 126, 128, 143, 95, 97, 20, 36, 142, 90, 18, 235, 70, 40, 179, 115, 107, 60, 246, 36, 126, 58, 154, 59, 254, 160, 76, 102, 11, 104, 114, 168, 79, 194, 108, 117, 86, 228, 52, 198, 222, 215, 230, 77, 192, 134, 193, 232, 23, 13, 51, 86, 89, 31, 237, 154, 170, 34, 152, 108, 238, 71, 34, 217, 227, 121, 244, 221, 212, 139, 86, 49, 57, 8, 19, 254, 140, 128, 14, 191, 213, 18, 13, 207, 116, 44, 200, 71, 172, 236, 252, 34, 103, 195, 17, 193, 192, 102, 116, 133, 132, 161, 3, 66, 153, 58, 116, 204, 252, 150, 190, 128, 50, 109, 175, 76, 147, 156, 141, 57, 63, 105, 199, 87, 17, 108, 251, 167, 65, 55, 58, 95, 199, 202, 108, 173, 56, 118, 101, 57, 197, 242, 254, 14, 234, 242, 235, 36, 54, 143, 137, 128, 23, 26, 158, 9, 23, 42, 2, 215, 171, 196, 188, 83, 40, 233, 162, 105, 15, 28, 227, 107, 245, 204, 181, 66, 195, 244, 219, 196, 229, 168, 182, 185, 139, 254, 175, 155, 46, 11, 241, 62, 44, 235, 236, 44, 54, 0, 196, 135, 190, 57, 24, 220, 25, 47, 29, 173, 249, 125, 21, 108, 127, 23, 11, 79, 23, 185, 125, 160, 214, 131, 190, 6, 34, 250, 167, 134, 170, 24, 114, 60, 72, 52, 194, 179, 42, 137, 1, 78, 41, 32, 129, 168, 202, 37, 231, 192, 88, 36, 30, 66, 23, 95, 165, 110, 16, 185, 100, 153, 249, 194, 8, 53, 206, 250, 252, 83, 7, 229, 142, 29, 147, 181, 157, 9, 78, 64, 103, 102, 156, 41, 250, 112, 71, 227, 162, 83, 224, 174, 154, 73, 99, 118, 82, 142, 18, 17, 188, 82, 124, 120, 221, 130, 223, 42, 155, 180, 56, 101, 172, 235, 59, 128, 234, 210, 192, 174, 237, 188, 29, 149, 59, 168, 60, 229, 189, 90, 209, 201, 90, 223, 166, 34, 110, 234, 132, 185, 47, 219, 200, 132, 207, 99, 34, 21, 93, 27, 17, 66, 129, 103, 59, 9, 53, 157, 105, 130, 158, 27, 7, 169, 28, 30, 77, 104, 129, 75, 218, 246, 44, 118, 127, 211, 214, 57, 139, 116, 197, 181, 82, 51, 112, 96, 81, 43, 241, 87, 56, 184, 165, 94, 245, 160, 23, 141, 27, 103, 202, 248, 38, 58, 32, 252, 21, 110, 79, 211, 143, 184, 57, 201, 179, 70, 95, 244, 148, 253, 201, 74, 34, 80, 127, 199, 250, 201, 96, 80, 189, 214, 43, 0, 152, 225, 226, 10, 154, 214, 188, 252, 99, 12, 87, 167, 91, 106, 81, 35, 130, 80, 206, 184, 248, 246, 163, 100, 68, 137, 2, 238, 9, 202, 15, 125, 159, 52, 207, 215, 204, 83, 240, 149, 81, 12, 154, 163, 1, 53, 219, 176, 137, 84, 210, 69, 68, 155, 63, 206, 55, 99, 60, 16, 38, 19, 53, 98, 208, 115, 185, 75, 50, 136, 83, 194, 161, 182, 229, 89, 229, 242, 152, 6, 22, 145, 64, 150, 147, 144, 247, 127, 194, 132, 32, 62, 207, 54, 76, 251, 184, 17, 110, 110, 175, 66, 30, 173, 16, 103, 198, 111, 118, 41, 194, 231, 93, 48, 14, 44, 179, 46, 77, 109, 118, 23, 8, 214, 255, 4, 35, 238, 101, 252, 156, 231, 160, 154, 245, 99, 233, 119, 119, 54, 192, 118, 21, 8, 173, 25, 106, 38, 129, 236, 123, 195, 168, 107, 103, 241, 131, 164, 104, 201, 6, 143, 0, 175, 120, 180, 32, 66, 13, 144, 194, 95, 100, 229, 116, 147, 198, 100, 0, 208, 126, 2, 164, 206, 59, 15, 200, 224, 235, 15, 156, 234, 113, 37, 55, 82, 149, 45, 6, 212, 197, 87, 170, 113, 222, 168, 66, 63, 26, 97, 129, 181, 42, 22, 242, 115, 224, 112, 7, 237, 186, 224, 230, 113, 198, 14, 9, 4, 124, 151, 115, 117, 25, 215, 82, 247, 250, 47, 200, 44, 226, 51, 248, 19, 47, 152, 253, 8, 242, 237, 100, 153, 31, 56, 89, 212, 33, 0, 175, 108, 161, 52, 124, 92, 201, 118, 115, 64, 24, 48, 32, 250, 74, 87, 243, 147, 126, 5, 233, 150, 10, 78, 141, 143, 50, 227, 199, 7, 230, 140, 189, 57, 116, 182, 224, 32, 64, 158, 135, 152, 205, 122, 184, 237, 143, 86, 126, 27, 148, 117, 63, 36, 43, 62, 210, 247, 68, 19, 20, 79, 195, 123, 238, 9, 100, 173, 10, 123, 66, 33, 233, 34, 228, 38, 5, 114, 25, 200, 59, 94, 109, 212, 13, 61, 25, 160, 25, 176, 255, 50, 241, 50, 136, 35, 67, 21, 131, 126, 97, 145, 185, 249, 200, 77, 56, 88, 203, 241, 119, 14, 121, 151, 222, 23, 152, 112, 252, 129, 129, 183, 232, 38, 68, 53, 189, 193, 242, 222, 135, 11, 209, 32, 223, 80, 35, 152, 72, 76, 83, 166, 50, 203, 227, 114, 128, 109, 133, 128, 183, 226, 218, 210, 167, 97, 97, 148, 107, 8, 118, 221, 205, 170, 61, 241, 204, 131, 67, 191, 95, 146, 121, 150, 32, 89, 10, 241, 189, 23, 204, 40, 234, 127, 120, 246, 21, 205, 1, 115, 238, 49, 94, 218, 200, 247, 251, 198, 146, 62, 107, 169, 28, 249, 126, 193, 44, 81, 248, 120, 48, 21, 43, 213, 221, 213, 223, 162, 103, 228, 46, 124, 174, 94, 7, 67, 114, 44, 44, 16, 198, 136, 96, 110, 194, 57, 145, 200, 43, 46, 240, 220, 64, 77, 87, 132, 87, 191, 78, 130, 28, 127, 110, 114, 208, 246, 234, 116, 42, 242, 176, 203, 22, 124, 232, 231, 185, 212, 182, 81, 73, 122, 147, 167, 87, 3, 118, 55, 169, 89, 83, 138, 106, 174, 96, 91, 236, 106, 167, 69, 32, 154, 203, 151, 23, 163, 177, 121, 99, 191, 39, 52, 191, 157, 72, 58, 249, 150, 178, 50, 46, 153, 230, 139, 45, 128, 220, 245, 94, 151, 203, 248, 95, 166, 194, 198, 71, 216, 231, 222, 43, 124, 87, 240, 237, 20, 120, 216, 83, 177, 202, 18, 25, 158, 102, 98, 21, 84, 121, 216, 106, 174, 232, 177, 81, 123, 32, 40, 105, 52, 0, 218, 194, 216, 26, 156, 247, 40, 210, 44, 224, 75, 181, 241, 23, 211, 103, 40, 101, 183, 65, 16, 20, 46, 70, 17, 65, 131, 149, 99, 96, 101, 128, 93, 92, 40, 212, 226, 53, 60, 233, 234, 171, 88, 153, 207, 25, 202, 15, 37, 200, 88, 86, 148, 114, 35, 133, 176, 194, 34, 53, 141, 35, 19, 165, 120, 238, 160, 231, 11, 248, 63, 61, 165, 205, 105, 73, 91, 157, 181, 202, 170, 196, 241, 207, 204, 246, 182, 176, 140, 7, 199, 231, 12, 212, 103, 168, 211, 231, 186, 137, 73, 160, 249, 15, 127, 114, 197, 160, 191, 226, 118, 170, 27, 101, 225, 193, 200, 247, 55, 55, 139, 47, 90, 62, 16, 232, 7, 74, 126, 156, 111, 198, 214, 151, 90, 101, 76, 71, 13, 251, 23, 91, 177, 19, 142, 182, 58, 119, 102, 243, 178, 2, 243, 76, 32, 52, 36, 183, 3, 138, 152, 46, 222, 100, 32, 89, 82, 238, 168, 239, 254, 213, 98, 151, 49, 103, 23, 250, 242, 149, 83, 226, 3, 201, 99, 43, 207, 37, 239, 74, 148, 155, 204, 88, 104, 69, 7, 80, 62, 146, 12, 41, 2, 221, 38, 21, 201, 81, 10, 45, 117, 189, 83, 219, 194, 149, 168, 178, 60, 89, 140, 73, 37, 232, 255, 74, 95, 170, 87, 88, 176, 97, 121, 55, 140, 208, 255, 156, 104, 134, 135, 112, 170, 242, 57, 151, 95, 179, 32, 201, 194, 101, 240, 93, 48, 86, 40, 223, 189, 27, 121, 136, 189, 145, 21, 54, 222, 108, 192, 174, 78, 78, 11, 52, 183, 245, 250, 156, 84, 240, 238, 242, 144, 6, 218, 109, 215, 171, 82, 96, 212, 200, 139, 29, 91, 2, 163, 96, 132, 248, 122, 82, 52, 41, 64, 230, 108, 72, 105, 17, 14, 41, 183, 52, 242, 38, 135, 211, 15, 184, 39, 33, 181, 175, 25, 186, 58, 189, 148, 126, 246, 113, 83, 250, 136, 158, 178, 78, 160, 136, 171, 94, 176, 237, 205, 250, 100, 189, 147, 73, 200, 194, 95, 236, 30, 43, 125, 30, 254, 59, 230, 109, 15, 159, 168, 225, 202, 245, 152, 172, 120, 170, 248, 51, 204, 77, 6, 72, 16, 211, 252, 104, 185, 44, 14, 67, 16, 203, 99, 191, 61, 122, 120, 183, 27, 230, 166, 231, 150, 227, 186, 211, 145, 197, 167, 195, 40, 91, 171, 147, 108, 210, 199, 60, 180, 113, 62, 0, 230, 97, 155, 248, 155, 40, 151, 217, 59, 118, 246, 124, 3, 90, 230, 76, 177, 208, 185, 222, 105, 151, 94, 84, 168, 187, 50, 48, 114, 5, 59, 251, 145, 185, 221, 149, 121, 12, 220, 104, 79, 216, 24, 33, 221, 111, 126, 71, 156, 214, 65, 61, 124, 25, 31, 182, 236, 174, 111, 188, 64, 128, 220, 152, 87, 169, 207, 153, 56, 120, 208, 179, 55, 77, 194, 124, 209, 19, 200, 133, 237, 148, 245, 190, 69, 173, 152, 200, 204, 76, 91, 31, 153, 95, 222, 231, 166, 82, 120, 233, 235, 100, 87, 180, 141, 56, 227, 182, 160, 210, 78, 224, 117, 164, 103, 174, 81, 12, 139, 31, 86, 37, 104, 53, 165, 249, 209, 244, 201, 85, 116, 51, 63, 192, 169, 97, 173, 110, 54, 55, 15, 61, 0, 185, 235, 211, 85, 188, 180, 49, 20, 154, 84, 20, 90, 104, 225, 204, 243, 147, 75, 196, 101, 221, 251, 224, 62, 141, 164, 148, 92, 106, 62, 38, 228, 0, 117, 109, 30, 164, 36, 230, 248, 39, 140, 221, 66, 174, 62, 199, 31, 176, 99, 144, 79, 57, 54, 211, 0, 153, 135, 83, 178, 112, 33, 235, 71, 110, 78, 6, 175, 17, 159, 117, 47, 178, 185, 213, 48, 49, 80, 239, 222, 193, 78, 15, 70, 177, 127, 156, 170, 96, 122, 218, 169, 71, 85, 22, 228, 128, 197, 38, 229, 129, 110, 216, 13, 4, 241, 158, 0, 178, 232, 169, 147, 236, 173, 125, 250, 177, 74, 71, 170, 106, 26, 79, 149, 133, 73, 221, 99, 167, 209, 49, 8, 54, 93, 100, 108, 103, 37, 138, 93, 39, 232, 142, 139, 145, 203, 36, 43, 55, 128, 68, 191, 90, 54, 216, 249, 21, 131, 236, 153, 164, 127, 119, 145, 69, 218, 76, 241, 157, 79, 188, 38, 131, 9, 87, 25, 82, 210, 76, 101, 25, 124, 67, 89, 147, 135, 254, 234, 166, 23, 165, 230, 72, 215, 89, 29, 16, 138, 107, 149, 44, 71, 181, 11, 163, 80, 65, 32, 189, 245, 47, 176, 177, 47, 236, 57, 156, 78, 116, 248, 125, 3, 233, 229, 110, 29, 52, 235, 218, 33, 255, 159, 112, 77, 27, 82, 126, 87, 198, 61, 33, 6, 110, 186, 159, 171, 200, 175, 83, 200, 61, 217, 177, 167, 69, 2, 24, 237, 133, 58, 163, 18, 253, 14, 136, 241, 49, 67, 209, 229, 98, 8, 128, 183, 85, 97, 158, 238, 136, 249, 77, 16, 177, 144, 195, 92, 97, 162, 96, 247, 104, 5, 171, 172, 19, 151, 226, 177, 63, 144, 117, 143, 219, 46, 109, 131, 97, 58, 53, 92, 52, 236, 237, 66, 174, 176, 168, 46, 149, 237, 65, 131, 22, 66, 181, 48, 40, 205, 182, 33, 137, 66, 225, 244, 30, 191, 196, 67, 109, 221, 42, 77, 184, 124, 245, 88, 212, 234, 208, 230, 65, 230, 31, 31, 70, 72, 234, 136, 161, 57, 98, 164, 49, 203, 69, 130, 246, 1, 219, 221, 236, 84, 179, 108, 108, 217, 87, 103, 102, 118, 150, 241, 64, 136, 189, 231, 49, 169, 104, 190, 197, 79, 170, 93, 18, 203, 153, 150, 100, 147, 22, 63, 57, 141, 69, 86, 153, 25, 228, 44, 150, 97, 242, 172, 73, 87, 156, 252, 65, 161, 98, 187, 43, 55, 23, 230, 112, 78, 89, 2, 143, 101, 71, 212, 121, 170, 51, 74, 198, 232, 141, 80, 54, 223, 238, 16, 222, 181, 141, 246, 198, 152, 8, 145, 161, 40, 47, 68, 228, 92, 128, 186, 129, 139, 16, 80, 224, 43, 245, 210, 247, 77, 198, 219, 214, 229, 107, 52, 46, 249, 57, 174, 9, 105, 82, 60, 239, 88, 25, 250, 24, 87, 15, 92, 238, 16, 108, 58, 129, 145, 181, 99, 68, 9, 34, 11, 20, 190, 16, 164, 170, 6, 7, 102, 218, 250, 196, 242, 146, 167, 92, 89, 147, 126, 47, 12, 117, 236, 231, 175, 221, 62, 128, 95, 151, 60, 4, 68, 160, 101, 168, 106, 243, 56, 43, 7, 211, 157, 223, 252, 105, 92, 111, 19, 74, 114, 135, 69, 206, 63, 18, 97, 107, 154, 60, 92, 36, 168, 82, 170, 179, 129, 135, 88, 170, 234, 199, 175, 125, 203, 121, 13, 231, 148, 149, 90, 101, 43, 186, 116, 37, 150, 236, 90, 222, 103, 210, 245, 159, 2, 49, 41, 201, 172, 197, 66, 86, 245, 199, 198, 54, 62, 156, 144, 245, 119, 248, 248, 33, 101, 160, 66, 70, 186, 9, 34, 162, 44, 136, 35, 58, 250, 243, 47, 163, 212, 79, 250, 64, 81, 48, 230, 56, 189, 15, 195, 193, 5, 59, 56, 114, 129, 35, 50, 184, 241, 55, 56, 83, 32, 33, 244, 161, 255, 216, 29, 3, 252, 102, 217, 50, 27, 253, 65, 15, 35, 112, 110, 71, 132, 98, 18, 89, 172, 178, 179, 205, 177, 32, 66, 216, 240, 215, 51, 2, 203, 219, 167, 77, 75, 134, 227, 64, 16, 248, 74, 1, 187, 114, 186, 183, 76, 166, 205, 136, 221, 236, 163, 26, 137, 75, 200, 188, 206, 205, 27, 103, 95, 95, 245, 136, 230, 203, 93, 141, 214, 141, 105, 157, 131, 234, 207, 194, 229, 233, 91, 46, 148, 157, 201, 17, 89, 30, 250, 148, 158, 243, 96, 155, 113, 189, 153, 166, 55, 128, 4, 146, 179, 124, 157, 114, 6, 74, 39, 78, 207, 41, 179, 67, 40, 236, 107, 95, 67, 114, 168, 4, 229, 122, 35, 170, 11, 102, 99, 147, 30, 119, 255, 215, 13, 78, 126, 95, 113, 43, 75, 66, 187, 110, 78, 73, 188, 174, 83, 231, 196, 180, 249, 83, 50, 206, 33, 150, 201, 214, 225, 32, 183, 171, 62, 83, 247, 184, 242, 200, 164, 214, 182, 180, 38, 27, 232, 98, 26, 123, 110, 106, 190, 9, 74, 42, 243, 85, 55, 66, 48, 197, 159, 167, 214, 250, 123, 96, 147, 225, 2, 1, 185, 144, 57, 13, 30, 8, 39, 122, 120, 105, 141, 236, 235, 128, 250, 93, 250, 135, 111, 23, 156, 3, 158, 165, 218, 48, 136, 137, 128, 92, 244, 212, 80, 220, 140, 137, 49, 224, 200, 17, 220, 71, 0, 44, 184, 251, 79, 63, 50, 243, 98, 229, 3, 55, 21, 136, 81, 234, 80, 239, 47, 74, 200, 154, 109, 50, 217, 104, 71, 83, 130, 126, 255, 56, 254, 33, 162, 169, 7, 91, 244, 58, 14, 44, 106, 44, 210, 107, 17, 58, 32, 181, 219, 238, 94, 133, 141, 149, 93, 230, 211, 219, 154, 230, 62, 116, 93, 105, 252, 78, 207, 135, 200, 55, 227, 85, 253, 170, 72, 107, 107, 62, 211, 55, 254, 216, 159, 12, 16, 179, 242, 205, 86, 117, 113, 94, 74, 135, 91, 114, 240, 239, 247, 241, 232, 212, 210, 44, 191, 26, 240, 219, 230, 92, 214, 193, 22, 107, 79, 5, 170, 201, 45, 224, 134, 221, 75, 235, 0, 152, 86, 97, 119, 241, 96, 39, 146, 122, 16, 250, 11, 93, 253, 75, 242, 53, 1, 115, 129, 158, 72, 101, 4, 105, 151, 161, 147, 69, 144, 184, 14, 34, 95, 126, 13, 153, 100, 99, 155, 86, 177, 122, 206, 146, 151, 163, 99, 202, 117, 173, 227, 64, 19, 126, 125, 67, 84, 121, 146, 50, 147, 101, 154, 40, 241, 195, 127, 61, 158, 196, 170, 187, 54, 227, 85, 133, 221, 67, 189, 119, 249, 74, 119, 166, 119, 255, 156, 61, 208, 231, 142, 127, 193, 21, 28, 161, 3, 39, 162, 75, 80, 114, 246, 240, 140, 55, 167, 147, 82, 210, 172, 25, 228, 128, 159, 108, 72, 149, 107, 192, 85, 183, 79, 90, 124, 67, 20, 134, 83, 127, 100, 38, 77, 161, 205, 16, 224, 142, 186, 56, 75, 173, 130, 239, 180, 146, 105, 161, 103, 158, 145, 186, 177, 170, 180, 107, 6, 172, 168, 164, 180, 55, 87, 108, 161, 188, 101, 56, 226, 90, 60, 237, 32, 111, 208, 45, 59, 205, 94, 6, 45, 87, 165, 2, 115, 221, 61, 228, 36, 82, 224, 107, 232, 220, 79, 63, 247, 19, 15, 141, 166, 66, 1, 46, 133, 61, 14, 125, 195, 240, 28, 221, 20, 157, 199, 91, 181, 157, 81, 132, 109, 16, 63, 160, 124, 127, 43, 104, 60, 152, 217, 211, 140, 151, 228, 36, 216, 12, 146, 232, 76, 237, 53, 217, 225, 186, 55, 152, 208, 174, 133, 33, 144, 233, 145, 158, 18, 148, 95, 192, 230, 48, 192, 114, 118, 229, 248, 148, 235, 235, 70, 223, 33, 40, 184, 249, 40, 97, 199, 13, 113, 176, 163, 73, 179, 147, 16, 37, 227, 230, 218, 183, 76, 110, 89, 142, 238, 10, 83, 60, 153, 86, 149, 17, 69, 8, 243, 248, 176, 118, 191, 94, 81, 159, 245, 198, 20, 87, 172, 22, 226, 239, 150, 176, 235, 27, 104, 137, 155, 203, 135, 73, 64, 220, 168, 94, 85, 249, 255, 161], - [240, 118, 129, 93, 180, 117, 135, 218, 209, 52, 6, 56, 105, 229, 220, 21, 136, 121, 129, 162, 56, 93, 158, 98, 81, 120, 219, 79, 115, 138, 166, 139, 204, 85, 2, 88, 11, 151, 187, 1, 11, 154, 32, 133, 124, 114, 37, 176, 252, 10, 148, 34, 155, 213, 46, 128, 34, 10, 248, 227, 199, 175, 82, 216, 122, 144, 156, 11, 252, 129, 58, 236, 64, 11, 235, 156, 147, 170, 40, 236, 227, 254, 216, 9, 80, 72, 118, 182, 16, 252, 100, 85, 226, 163, 168, 198, 92, 146, 172, 9, 246, 168, 151, 90, 59, 185, 79, 72, 52, 231, 101, 75, 167, 196, 28, 33, 46, 138, 160, 255, 123, 88, 82, 209, 114, 21, 55, 37, 180, 84, 168, 162, 130, 14, 43, 104, 120, 78, 208, 182, 66, 166, 170, 70, 222, 16, 174, 209, 71, 178, 102, 67, 64, 59, 63, 75, 43, 241, 216, 164, 54, 182, 99, 17, 83, 49, 200, 198, 45, 206, 140, 123, 152, 139, 23, 234, 194, 179, 214, 219, 211, 198, 91, 96, 247, 86, 205, 229, 19, 180, 166, 202, 149, 104, 212, 107, 223, 135, 155, 101, 196, 141, 189, 50, 243, 247, 217, 61, 111, 47, 161, 141, 26, 163, 15, 147, 190, 86, 224, 41, 146, 153, 145, 39, 61, 9, 101, 208, 3, 58, 218, 98, 247, 165, 208, 114, 37, 70, 174, 130, 4, 136, 141, 232, 19, 187, 69, 48, 118, 247, 116, 14, 3, 168, 156, 75, 99, 208, 175, 55, 6, 64, 255, 90, 2, 242, 245, 180, 34, 1, 90, 185, 7, 105, 198, 205, 224, 115, 53, 87, 163, 228, 215, 24, 173, 21, 119, 206, 16, 177, 99, 152, 157, 218, 139, 249, 16, 41, 213, 142, 188, 7, 242, 51, 235, 235, 70, 220, 65, 132, 141, 234, 251, 191, 75, 191, 62, 179, 165, 192, 111, 213, 236, 168, 198, 180, 192, 211, 157, 198, 245, 33, 114, 66, 22, 39, 233, 209, 215, 9, 186, 115, 163, 244, 23, 192, 78, 113, 71, 249, 208, 86, 86, 48, 78, 136, 21, 124, 66, 175, 58, 119, 29, 213, 167, 115, 133, 138, 129, 80, 200, 56, 253, 76, 101, 10, 48, 170, 227, 151, 131, 15, 195, 142, 253, 2, 62, 104, 99, 77, 252, 220, 114, 75, 49, 117, 13, 8, 212, 44, 138, 193, 238, 114, 97, 162, 187, 152, 33, 31, 123, 33, 90, 135, 94, 153, 32, 176, 128, 47, 220, 183, 63, 114, 120, 208, 183, 155, 225, 172, 151, 66, 234, 101, 154, 170, 160, 168, 34, 216, 88, 130, 217, 52, 203, 37, 153, 217, 35, 38, 61, 103, 218, 49, 170, 218, 155, 4, 8, 19, 238, 132, 60, 246, 9, 190, 17, 215, 119, 110, 96, 207, 10, 89, 244, 53, 0, 10, 10, 162, 229, 76, 0, 194, 160, 226, 201, 182, 66, 97, 62, 248, 17, 0, 94, 58, 24, 138, 227, 140, 132, 108, 245, 133, 175, 15, 11, 95, 108, 43, 10, 18, 145, 246, 210, 149, 126, 200, 158, 133, 227, 78, 137, 8, 192, 70, 234, 252, 95, 119, 177, 89, 110, 251, 124, 112, 11, 152, 22, 238, 23, 93, 154, 246, 144, 78, 159, 234, 59, 9, 82, 101, 234, 57, 80, 60, 60, 187, 25, 66, 10, 96, 178, 8, 71, 201, 64, 214, 155, 1, 43, 71, 127, 198, 38, 205, 72, 121, 159, 210, 73, 207, 59, 66, 23, 161, 125, 97, 14, 189, 226, 1, 163, 2, 136, 153, 165, 134, 15, 68, 4, 163, 68, 88, 112, 10, 216, 57, 6, 172, 182, 166, 186, 200, 22, 168, 83, 59, 64, 252, 194, 89, 131, 224, 34, 17, 57, 102, 195, 182, 164, 184, 153, 237, 131, 248, 201, 138, 130, 226, 184, 159, 244, 130, 132, 206, 42, 155, 220, 235, 203, 6, 115, 207, 26, 69, 18, 143, 251, 135, 22, 15, 185, 20, 187, 66, 164, 231, 36, 198, 130, 156, 152, 7, 44, 13, 209, 10, 80, 92, 85, 87, 54, 232, 227, 176, 53, 126, 174, 235, 181, 146, 91, 120, 146, 159, 225, 17, 47, 224, 81, 113, 149, 20, 255, 208, 193, 176, 29, 100, 195, 21, 145, 143, 170, 207, 183, 19, 2, 224, 108, 42, 0, 54, 19, 128, 42, 112, 122, 228, 198, 83, 97, 133, 189, 141, 167, 165, 191, 45, 223, 214, 128, 10, 212, 218, 98, 17, 52, 246, 205, 133, 239, 4, 223, 170, 0, 13, 133, 154, 76, 89, 124, 194, 160, 223, 134, 238, 99, 111, 83, 58, 138, 52, 62, 94, 154, 87, 117, 250, 130, 78, 231, 167, 115, 33, 99, 77, 235, 86, 138, 73, 61, 60, 190, 206, 110, 44, 2, 7, 206, 108, 192, 69, 36, 12, 175, 99, 89, 186, 21, 171, 31, 225, 96, 208, 86, 102, 158, 66, 246, 227, 75, 208, 181, 138, 36, 106, 140, 5, 216, 141, 40, 206, 107, 118, 86, 195, 159, 242, 92, 158, 25, 234, 182, 91, 224, 147, 99, 18, 11, 55, 31, 43, 105, 207, 37, 212, 208, 126, 188, 6, 169, 191, 77, 106, 130, 159, 11, 123, 241, 245, 182, 251, 135, 200, 244, 89, 72, 119, 184, 128, 143, 49, 207, 232, 155, 164, 76, 121, 61, 2, 91, 60, 96, 185, 88, 223, 247, 106, 95, 104, 175, 84, 56, 194, 172, 47, 244, 187, 67, 58, 35, 102, 197, 137, 192, 20, 192, 33, 232, 147, 56, 82, 11, 177, 121, 105, 201, 82, 132, 114, 68, 118, 255, 23, 62, 81, 39, 107, 231, 222, 238, 213, 5, 31, 39, 85, 102, 246, 138, 147, 163, 61, 177, 97, 181, 197, 64, 124, 122, 57, 149, 207, 140, 53, 243, 187, 29, 40, 114, 164, 214, 255, 106, 201, 191, 85, 136, 119, 216, 139, 178, 197, 144, 198, 26, 32, 147, 133, 244, 84, 16, 16, 104, 169, 226, 141, 78, 57, 164, 111, 61, 211, 183, 186, 100, 142, 167, 191, 45, 29, 213, 60, 162, 123, 93, 171, 140, 120, 16, 246, 101, 168, 29, 176, 246, 179, 19, 52, 217, 94, 28, 213, 199, 128, 176, 233, 167, 145, 33, 47, 60, 128, 154, 215, 166, 211, 43, 56, 163, 24, 151, 169, 124, 31, 185, 89, 227, 14, 223, 41, 2, 153, 157, 86, 80, 185, 68, 117, 226, 205, 26, 86, 85, 66, 233, 61, 118, 3, 94, 69, 4, 145, 185, 239, 156, 254, 17, 72, 208, 65, 251, 213, 189, 126, 129, 40, 21, 88, 113, 30, 79, 112, 142, 17, 136, 162, 97, 113, 130, 108, 102, 192, 148, 164, 224, 248, 203, 127, 123, 135, 226, 16, 100, 134, 54, 254, 211, 137, 92, 82, 166, 247, 71, 30, 141, 117, 118, 130, 14, 26, 118, 55, 125, 50, 179, 55, 139, 214, 198, 251, 30, 121, 197, 139, 96, 90, 252, 25, 240, 196, 228, 11, 147, 52, 174, 54, 81, 174, 138, 250, 80, 199, 150, 254, 127, 224, 236, 179, 76, 16, 97, 239, 137, 230, 48, 82, 178, 59, 115, 50, 119, 8, 247, 55, 193, 220, 130, 86, 27, 76, 200, 169, 107, 99, 149, 129, 98, 39, 75, 222, 220, 123, 53, 193, 145, 54, 150, 15, 138, 108, 164, 52, 138, 166, 62, 66, 124, 128, 102, 84, 145, 56, 189, 39, 221, 19, 221, 204, 38, 124, 58, 236, 57, 71, 128, 56, 56, 157, 152, 247, 78, 223, 87, 11, 222, 9, 113, 219, 55, 211, 87, 125, 236, 184, 222, 186, 99, 229, 24, 3, 51, 196, 90, 162, 19, 94, 57, 64, 77, 47, 138, 203, 235, 69, 236, 254, 79, 120, 32, 79, 192, 81, 139, 46, 66, 161, 7, 7, 209, 233, 100, 97, 160, 61, 29, 43, 70, 40, 90, 24, 171, 185, 246, 26, 82, 146, 250, 103, 83, 134, 52, 207, 30, 10, 199, 167, 76, 150, 231, 55, 101, 170, 0, 249, 94, 139, 82, 13, 137, 129, 224, 8, 197, 124, 212, 165, 131, 239, 248, 141, 166, 111, 198, 206, 20, 105, 74, 109, 102, 20, 6, 65, 216, 179, 230, 15, 103, 196, 3, 249, 172, 101, 94, 134, 4, 109, 129, 181, 17, 252, 243, 50, 136, 141, 241, 25, 41, 250, 66, 17, 246, 241, 118, 97, 167, 51, 68, 229, 42, 135, 223, 185, 204, 224, 136, 51, 165, 4, 188, 50, 5, 46, 254, 152, 89, 102, 57, 249, 152, 80, 235, 39, 141, 128, 135, 150, 236, 156, 243, 227, 104, 83, 59, 155, 131, 134, 203, 98, 59, 142, 169, 223, 120, 237, 239, 254, 100, 96, 236, 156, 242, 85, 206, 52, 87, 62, 183, 220, 120, 26, 141, 32, 11, 247, 67, 17, 2, 146, 144, 195, 236, 167, 115, 153, 142, 61, 119, 101, 96, 225, 10, 86, 32, 237, 139, 132, 107, 224, 225, 126, 23, 252, 115, 112, 80, 236, 242, 88, 74, 30, 233, 87, 168, 199, 155, 130, 29, 3, 151, 222, 210, 225, 219, 182, 106, 122, 31, 55, 205, 187, 193, 171, 205, 159, 106, 149, 243, 241, 126, 138, 223, 169, 95, 140, 102, 172, 20, 13, 190, 235, 192, 107, 33, 146, 149, 105, 46, 24, 193, 139, 104, 110, 228, 63, 4, 255, 55, 85, 28, 104, 42, 13, 41, 95, 103, 121, 168, 103, 7, 225, 90, 53, 248, 247, 184, 187, 246, 159, 182, 4, 228, 64, 165, 215, 80, 83, 66, 252, 104, 86, 59, 78, 29, 144, 1, 218, 96, 158, 154, 154, 184, 6, 227, 54, 73, 38, 14, 130, 44, 115, 109, 215, 192, 243, 107, 159, 142, 179, 212, 32, 68, 150, 83, 0, 49, 48, 118, 234, 169, 146, 40, 17, 167, 240, 47, 232, 45, 216, 50, 49, 139, 172, 15, 134, 230, 251, 166, 229, 4, 79, 89, 67, 24, 240, 42, 8, 171, 55, 35, 145, 13, 57, 142, 44, 230, 250, 30, 238, 99, 63, 184, 70, 52, 70, 211, 11, 145, 142, 201, 75, 112, 67, 123, 158, 11, 131, 134, 128, 47, 108, 212, 29, 139, 128, 44, 150, 57, 157, 92, 16, 215, 139, 36, 227, 73, 208, 29, 129, 243, 171, 101, 55, 47, 172, 145, 211, 29, 166, 206, 245, 35, 2, 181, 80, 100, 15, 253, 171, 50, 136, 225, 181, 204, 71, 209, 254, 162, 64, 141, 26, 184, 10, 29, 219, 66, 157, 248, 181, 241, 136, 204, 195, 136, 29, 87, 95, 152, 193, 146, 28, 116, 217, 168, 217, 4, 178, 74, 160, 133, 19, 130, 34, 18, 130, 13, 229, 24, 70, 121, 242, 151, 79, 154, 24, 55, 172, 26, 211, 137, 75, 223, 233, 210, 159, 207, 74, 58, 148, 205, 199, 186, 26, 67, 72, 112, 210, 237, 238, 6, 44, 147, 134, 96, 117, 47, 255, 63, 16, 130, 25, 85, 184, 88, 146, 28, 66, 245, 167, 101, 230, 59, 192, 113, 160, 22, 158, 148, 189, 74, 224, 247, 81, 147, 181, 100, 89, 90, 185, 91, 167, 19, 3, 52, 185, 105, 205, 115, 57, 244, 84, 196, 161, 255, 253, 128, 239, 178, 107, 48, 31, 237, 185, 120, 118, 219, 44, 173, 195, 75, 219, 91, 75, 154, 129, 118, 197, 232, 82, 88, 149, 115, 2, 243, 223, 253, 182, 9, 48, 92, 188, 178, 184, 212, 124, 35, 198, 3, 175, 167, 192, 57, 185, 100, 164, 174, 211, 90, 70, 166, 108, 85, 51, 108, 242, 246, 101, 40, 212, 223, 30, 1, 12, 67, 67, 216, 158, 30, 234, 194, 176, 17, 54, 158, 170, 67, 114, 45, 80, 220, 6, 116, 236, 183, 65, 219, 18, 22, 164, 231, 65, 195, 200, 170, 179, 65, 91, 11, 254, 6, 21, 239, 224, 12, 84, 230, 231, 23, 184, 8, 182, 180, 211, 102, 38, 29, 163, 104, 87, 72, 8, 255, 173, 20, 135, 9, 76, 17, 228, 67, 4, 110, 202, 50, 97, 67, 44, 158, 70, 175, 95, 54, 30, 124, 171, 60, 230, 56, 115, 16, 166, 118, 4, 172, 29, 230, 100, 48, 78, 164, 84, 217, 160, 245, 137, 34, 166, 244, 82, 224, 119, 122, 166, 50, 38, 67, 165, 192, 153, 11, 233, 37, 116, 198, 162, 133, 1, 248, 216, 2, 136, 210, 15, 251, 95, 99, 146, 225, 246, 17, 220, 149, 137, 82, 232, 38, 188, 241, 221, 173, 221, 135, 40, 200, 140, 188, 91, 41, 49, 181, 19, 53, 238, 106, 187, 240, 69, 78, 227, 240, 93, 167, 211, 48, 199, 211, 47, 241, 130, 63, 171, 177, 70, 106, 4, 226, 224, 12, 196, 104, 173, 243, 6, 255, 155, 145, 25, 82, 101, 157, 127, 137, 50, 233, 29, 152, 103, 166, 197, 111, 145, 233, 46, 83, 4, 245, 143, 113, 2, 114, 54, 7, 125, 176, 87, 179, 255, 20, 224, 162, 167, 141, 225, 124, 248, 47, 172, 52, 246, 184, 40, 187, 247, 2, 157, 228, 182, 114, 137, 234, 174, 60, 226, 248, 188, 88, 10, 231, 226, 48, 95, 28, 30, 201, 169, 193, 49, 98, 184, 217, 164, 196, 153, 186, 218, 249, 68, 217, 255, 52, 127, 229, 138, 238, 247, 11, 170, 197, 43, 13, 20, 45, 11, 9, 28, 175, 40, 210, 219, 73, 97, 195, 124, 40, 224, 141, 182, 113, 179, 136, 69, 249, 155, 102, 205, 211, 163, 225, 121, 35, 163, 239, 187, 105, 64, 190, 51, 46, 253, 244, 196, 173, 145, 216, 65, 171, 229, 149, 79, 183, 0, 232, 195, 197, 80, 158, 155, 80, 52, 19, 254, 156, 128, 121, 153, 53, 83, 122, 184, 123, 39, 39, 16, 86, 188, 18, 113, 109, 73, 215, 55, 61, 250, 145, 220, 145, 184, 250, 177, 102, 154, 82, 22, 8, 150, 48, 60, 206, 208, 39, 98, 14, 204, 7, 140, 99, 7, 44, 183, 39, 160, 92, 130, 179, 6, 110, 118, 71, 25, 45, 170, 205, 91, 207, 231, 117, 228, 136, 218, 71, 64, 61, 2, 37, 31, 145, 118, 219, 211, 183, 181, 212, 179, 75, 13, 173, 149, 83, 140, 98, 206, 64, 148, 92, 236, 223, 208, 120, 209, 182, 90, 66, 228, 7, 19, 79, 106, 84, 74, 116, 176, 197, 84, 207, 78, 139, 137, 79, 30, 56, 21, 16, 42, 164, 47, 202, 81, 84, 27, 110, 229, 240, 80, 143, 147, 144, 138, 182, 93, 208, 101, 172, 18, 194, 175, 167, 56, 178, 244, 113, 126, 10, 50, 66, 237, 243, 198, 65, 241, 212, 213, 165, 180, 28, 127, 173, 151, 5, 164, 208, 180, 93, 93, 54, 79, 230, 124, 0, 210, 86, 187, 82, 31, 146, 94, 240, 142, 67, 75, 154, 117, 168, 72, 150, 61, 150, 235, 165, 107, 129, 205, 123, 220, 59, 132, 55, 74, 84, 110, 243, 125, 56, 162, 32, 91, 33, 169, 157, 80, 18, 153, 85, 60, 7, 136, 231, 168, 49, 189, 20, 147, 172, 250, 220, 216, 182, 138, 171, 117, 239, 121, 116, 106, 53, 105, 146, 49, 247, 236, 157, 40, 43, 237, 44, 127, 44, 103, 99, 113, 158, 15, 113, 29, 29, 173, 23, 243, 243, 210, 196, 52, 172, 33, 202, 252, 37, 187, 20, 144, 100, 142, 54, 185, 114, 82, 80, 103, 98, 217, 2, 153, 241, 206, 5, 193, 0, 181, 35, 51, 116, 46, 194, 215, 21, 163, 173, 18, 41, 133, 130, 110, 83, 204, 177, 75, 68, 43, 148, 39, 67, 62, 79, 209, 222, 63, 42, 189, 249, 57, 56, 10, 218, 116, 14, 234, 238, 112, 171, 52, 48, 39, 51, 160, 147, 182, 190, 161, 99, 139, 78, 62, 111, 88, 169, 71, 84, 220, 32, 189, 232, 118, 132, 58, 75, 8, 24, 186, 5, 155, 153, 80, 73, 178, 237, 59, 151, 104, 44, 113, 122, 236, 50, 209, 74, 107, 171, 49, 77, 185, 102, 56, 252, 94, 233, 165, 87, 238, 16, 195, 118, 142, 87, 31, 239, 171, 164, 134, 1, 122, 183, 244, 152, 48, 3, 136, 157, 130, 51, 112, 111, 20, 115, 240, 249, 212, 145, 252, 60, 25, 152, 199, 80, 216, 135, 237, 169, 1, 60, 12, 213, 144, 188, 116, 32, 198, 128, 245, 104, 78, 66, 249, 13, 224, 233, 125, 48, 53, 149, 144, 82, 241, 72, 11, 222, 97, 84, 63, 217, 128, 182, 68, 191, 170, 254, 32, 244, 172, 63, 167, 155, 203, 160, 153, 149, 248, 166, 93, 138, 33, 69, 202, 122, 147, 32, 70, 206, 206, 43, 129, 226, 187, 111, 82, 115, 64, 86, 185, 148, 107, 212, 217, 95, 62, 33, 142, 116, 199, 77, 98, 192, 79, 199, 174, 116, 222, 142, 155, 200, 71, 211, 218, 203, 180, 101, 160, 98, 105, 146, 94, 154, 133, 116, 154, 196, 75, 179, 247, 95, 190, 179, 161, 82, 206, 22, 69, 116, 254, 131, 145, 139, 35, 17, 94, 38, 78, 14, 116, 195, 187, 77, 179, 41, 155, 194, 133, 32, 48, 73, 202, 153, 165, 43, 173, 127, 108, 194, 93, 77, 218, 97, 155, 138, 171, 241, 235, 229, 49, 208, 21, 0, 142, 227, 185, 139, 65, 51, 156, 27, 109, 180, 130, 182, 246, 162, 164, 182, 187, 253, 251, 239, 47, 123, 163, 224, 32, 21, 98, 145, 244, 52, 41, 212, 189, 196, 58, 125, 160, 28, 192, 242, 178, 68, 161, 152, 46, 190, 130, 121, 140, 173, 84, 107, 129, 10, 251, 232, 102, 146, 169, 225, 58, 195, 65, 224, 125, 186, 182, 242, 109, 144, 199, 12, 20, 141, 231, 187, 217, 180, 71, 65, 245, 85, 219, 108, 63, 83, 234, 82, 74, 117, 176, 9, 97, 157, 222, 10, 186, 72, 70, 175, 107, 205, 36, 56, 41, 151, 20, 83, 36, 217, 202, 110, 170, 126, 193, 122, 36, 113, 63, 248, 255, 32, 150, 48, 27, 20, 159, 120, 251, 187, 166, 41, 154, 145, 100, 137, 112, 224, 78, 132, 182, 120, 129, 80, 213, 216, 129, 67, 17, 188, 42, 126, 72, 196, 252, 91, 113, 79, 14, 225, 94, 199, 146, 132, 236, 25, 124, 133, 167, 174, 253, 176, 243, 10, 9, 82, 157, 77, 95, 149, 163, 94, 214, 210, 2, 69, 163, 163, 54, 162, 169, 36, 159, 115, 78, 181, 154, 174, 43, 106, 45, 209, 224, 201, 168, 191, 152, 7, 133, 192, 11, 116, 215, 69, 133, 176, 251, 65, 241, 110, 124, 60, 233, 229, 200, 108, 39, 167, 105, 234, 47, 77, 171, 155, 145, 190, 7, 23, 137, 70, 149, 202, 148, 220, 226, 191, 217, 53, 138, 22, 85, 183, 26, 252, 11, 78, 1, 220, 234, 205, 250, 248, 183, 60, 219, 84, 162, 105, 112, 144, 104, 138, 18, 146, 247, 152, 159, 118, 223, 197, 169, 188, 110, 245, 252, 164, 56, 12, 107, 33, 40, 65, 147, 23, 231, 70, 50, 29, 86, 21, 24, 96, 157, 82, 86, 26, 237, 122, 135, 108, 171, 92, 27, 250, 114, 227, 154, 48, 11, 240, 171, 193, 246, 242, 72, 210, 46, 209, 132, 53, 6, 249, 239, 68, 54, 208, 128, 240, 194, 144, 147, 121, 22, 5, 100, 210, 202, 80, 47, 218, 255, 77, 59, 145, 109, 156, 47, 102, 113, 228, 14, 14, 53, 197, 167, 27, 13, 24, 73, 173, 219, 58, 212, 239, 82, 81, 254, 209, 165, 79, 59, 146, 105, 219, 187, 109, 111, 215, 88, 148, 157, 67, 72, 121, 186, 69, 190, 94, 38, 69, 237, 108, 249, 36, 62, 99, 106, 190, 192, 7, 221, 46, 29, 138, 120, 190, 191, 170, 59, 119, 48, 100, 100, 224, 61, 175, 52, 94, 248, 53, 154, 167, 216, 128, 156, 216, 156, 240, 103, 34, 245, 238, 233, 163, 205, 142, 51, 246, 199, 8, 120, 123, 90, 180, 121, 30, 65, 230, 110, 201, 166, 27, 223, 180, 99, 112, 226, 17, 133, 28, 201, 88, 94, 160, 236, 14, 116, 177, 25, 176, 164, 182, 82, 88, 174, 160, 150, 250, 131, 234, 46, 73, 122, 151, 60, 100, 175, 83, 17, 63, 150, 248, 18, 147, 93, 179, 108, 118, 40, 103, 60, 107, 139, 205, 138, 115, 33, 240, 124, 164, 129, 0, 216, 152, 198, 176, 25, 110, 147, 128, 74, 202, 18, 176, 254, 161, 243, 244, 144, 194, 138, 58, 4, 89, 93, 21, 154, 116, 229, 121, 117, 73, 52, 118, 131, 54, 192, 189, 118, 237, 245, 150, 3, 55, 98, 174, 12, 43, 139, 82, 3, 210, 100, 226, 53, 170, 193, 126, 140, 128, 59, 137, 172, 28, 213, 156, 35, 37, 17, 32, 133, 157, 192, 4, 80, 203, 176, 194, 142, 244, 61, 19, 123, 179, 223, 223, 110, 122, 64, 77, 55, 206, 65, 79, 25, 108, 151, 139, 56, 190, 31, 251, 74, 39, 12, 171, 26, 118, 189, 225, 241, 228, 54, 198, 83, 200, 115, 113, 114, 156, 143, 133, 48, 232, 136, 187, 211, 143, 20, 235, 153, 228, 86, 130, 246, 247, 139, 73, 196, 181, 93, 253, 84, 148, 36, 254, 244, 234, 158, 105, 226, 198, 127, 208, 213, 67, 248, 53, 230, 93, 80, 149, 110, 211, 154, 247, 4, 242, 165, 154, 172, 158, 63, 54, 78, 176, 43, 120, 31, 143, 249, 102, 172, 224, 105, 57, 109, 175, 8, 249, 190, 167, 48, 106, 89, 3, 189, 106, 33, 109, 77, 255, 60, 226, 79, 200, 104, 231, 134, 22, 250, 65, 144, 112, 187, 186, 217, 119, 251, 174, 20, 206, 8, 22, 155, 22, 185, 87, 140, 92, 83, 175, 30, 59, 133, 190, 184, 215, 102, 86, 230, 26, 35, 114, 240, 105, 190, 221, 119, 108, 208, 109, 188, 250, 214, 34, 250, 128, 104, 142, 149, 216, 225, 23, 215, 165, 195, 45, 199, 200, 138, 45, 249, 72, 48, 178, 175, 144, 39, 61, 250, 238, 239, 148, 6, 91, 158, 80, 198, 198, 56, 253, 102, 90, 245, 12, 80, 63, 201, 43, 150, 75, 40, 50, 139, 188, 39, 130, 47, 238, 215, 210, 215, 155, 67, 73, 238, 173, 61, 165, 248, 228, 61, 236, 212, 81, 156, 167, 24, 142, 86, 194, 26, 71, 180, 139, 112, 27, 180, 97, 125, 47, 65, 167, 8, 189, 156, 100, 102, 240, 188, 141, 168, 226, 41, 251, 87, 54, 226, 212, 198, 127, 183, 118, 178, 255, 201, 116, 44, 82, 170, 103, 248, 162, 88, 18, 252, 224, 211, 225, 8, 107, 163, 10, 130, 0, 82, 225, 198, 154, 45, 171, 24, 86, 17, 74, 50, 168, 166, 0, 22, 22, 210, 220, 7, 149, 64, 159, 117, 156, 75, 200, 136, 229, 10, 197, 250, 208, 141, 61, 8, 215, 141, 40, 151, 194, 131, 119, 216, 205, 51, 193, 100, 89, 107, 99, 182, 38, 103, 119, 132, 53, 132, 234, 248, 182, 215, 236, 19, 34, 224, 2, 251, 105, 23, 101, 131, 129, 162, 100, 142, 119, 201, 208, 82, 15, 143, 33, 96, 153, 16, 32, 191, 240, 57, 137, 130, 5, 231, 50, 211, 38, 218, 242, 5, 208, 118, 147, 165, 138, 208, 244, 189, 125, 223, 72, 43, 173, 20, 92, 221, 156, 113, 213, 229, 229, 187, 165, 97, 69, 169, 218, 94, 137, 57, 53, 105, 250, 111, 30, 25, 101, 87, 15, 198, 74, 197, 199, 82, 22, 9, 215, 0, 80, 115, 201, 52, 193, 79, 91, 139, 226, 96, 9, 111, 229, 204, 25, 25, 208, 40, 46, 213, 205, 215, 219, 226, 16, 137, 49, 173, 175, 94, 177, 151, 204, 87, 132, 165, 127, 183, 56, 245, 142, 129, 212, 115, 244, 115, 235, 237, 120, 197, 39, 246, 4, 158, 216, 156, 121, 18, 210, 129, 94, 179, 8, 178, 70, 22, 103, 38, 138, 57, 61, 3, 89, 136, 155, 178, 250, 250, 220, 134, 165, 187, 158, 246, 212, 44, 182, 122, 204, 164, 127, 74, 88, 203, 46, 152, 10, 229, 217, 69, 160, 51, 85, 127, 10, 213, 2, 70, 249, 37, 204, 231, 117, 196, 116, 195, 121, 124, 82, 148, 81, 142, 77, 194, 102, 164, 96, 5, 98, 13, 176, 116, 26, 109, 123, 231, 197, 6, 50, 92, 178, 126, 23, 15, 237, 230, 26, 224, 35, 115, 23, 132, 28, 162, 159, 69, 193, 154, 111, 131, 53, 60, 170, 112, 23, 111, 211, 198, 63, 28, 242, 98, 222, 246, 66, 59, 239, 150, 15, 67, 219, 226, 178, 71, 154, 61, 146, 108, 128, 78, 193, 41, 64, 130, 53, 80, 229, 47, 140, 97, 88, 75, 76, 58, 246, 5, 160, 84, 102, 126, 1, 98, 220, 62, 144, 11, 36, 238, 200, 154, 4, 22, 250, 203, 27, 60, 204, 64, 161, 144, 169, 132, 71, 62, 25, 11, 214, 53, 236, 208, 7, 46, 231, 86, 9, 137, 162, 100, 54, 172, 167, 42, 42, 233, 152, 51, 217, 36, 75, 50, 130, 22, 234, 71, 152, 18, 225, 142, 92, 49, 95, 79, 72, 144, 119, 28, 163, 30, 248, 94, 112, 134, 82, 81, 170, 26, 170, 111, 106, 147, 52, 206, 4, 205, 210, 180, 1, 164, 6, 156, 137, 146, 89, 69, 147, 135, 101, 60, 171, 108, 147, 33, 16, 194, 98, 33, 37, 18, 216, 11, 233, 61, 108, 248, 49, 187, 16, 206, 210, 62, 175, 242, 199, 167, 161, 29, 173, 171, 191, 156, 25, 236, 135, 38, 242, 220, 218, 194, 217, 17, 71, 128, 228, 187, 170, 72, 26, 155, 89, 17, 253, 173, 44, 109, 127, 179, 128, 15, 20, 157, 208, 138, 136, 132, 204, 150, 214, 137, 197, 73, 87, 248, 211, 172, 74, 102, 45, 226, 76, 78, 118, 117, 14, 169, 79, 138, 82, 176, 61, 201, 207, 194, 88, 223, 98, 203, 230, 212, 134, 58, 142, 18, 31, 22, 119, 247, 6, 78, 22, 227, 25, 149, 230, 218, 132, 22, 91, 107, 140, 28, 55, 248, 159, 106, 87, 169, 203, 84, 237, 220, 19, 20, 49, 75, 3, 175, 4, 15, 84, 224, 55, 199, 221, 248, 209, 239, 195, 251, 20, 151, 175, 30, 63, 13, 98, 58, 181, 31, 151, 218, 165, 2, 156, 32, 147, 168, 181, 252, 77, 240, 200, 155, 20, 116, 161, 20, 171, 63, 232, 162, 233, 110, 124, 93, 102, 87, 25, 175, 86, 134, 249, 221, 1, 49, 179, 222, 37, 10, 241, 158, 161, 244, 34, 0, 14, 2, 184, 216, 134, 252, 79, 62, 251, 100, 154, 62, 112, 36, 79, 95, 246, 126, 129, 88, 73, 71, 111, 133, 123, 55, 31, 58, 194, 35, 159, 232, 250, 215, 194, 195, 19, 181, 230, 122, 207, 161, 243, 235, 247, 64, 85, 7, 91, 49, 126, 163, 52, 38, 153, 209, 52, 247, 200, 240, 101, 143, 12, 103, 205, 194, 224, 35, 5, 183, 247, 233, 50, 10, 36, 141, 36, 237, 130, 26, 114, 31, 85, 87, 138, 187, 46, 141, 67, 81, 78, 192, 60, 182, 8, 214, 151, 19, 137, 167, 16, 174, 175, 35, 78, 97, 96, 87, 126, 111, 15, 19, 116, 247, 160, 167, 135, 101, 175, 156, 186, 17, 167, 245, 190, 115, 26, 77, 165, 168, 5, 238, 169, 100, 112, 3, 146, 58, 117, 235, 203, 16, 60, 103, 215, 10, 248, 144, 101, 16, 174, 180, 44, 139, 115, 32, 20, 247, 201, 0, 201, 156, 225, 172, 163, 92, 171, 16, 231, 205, 75, 20, 136, 67, 44, 44, 118, 160, 114, 124, 116, 142, 15, 33, 98, 69, 23, 185, 32, 112, 30, 105, 235, 40, 197, 121, 68, 39, 45, 201, 14, 200, 162, 130, 194, 103, 181, 28, 244, 29, 171, 224, 29, 37, 216, 1, 227, 138, 158, 135, 188, 119, 176, 153, 211, 228, 139, 195, 152, 160, 179, 160, 138, 232, 249, 239, 15, 104, 156, 27, 210, 143, 14, 237, 206, 57, 59, 5, 51, 111, 121, 200, 204, 56, 199, 181, 147, 208, 56, 150, 163, 237, 239, 80, 194, 204, 46, 245, 26, 170, 64, 164, 112, 169, 75, 122, 238, 149, 204, 205, 116, 210, 118, 189, 226, 36, 109, 228, 75, 134, 188, 200, 0, 65, 241, 35, 232, 206, 115, 178, 188, 212, 1, 197, 105, 90, 34, 94, 49, 202, 228, 148, 255, 100, 60, 20, 113, 152, 148, 173, 239, 153, 143, 30, 61, 197, 108, 187, 168, 201, 173, 55, 171, 111, 121, 176, 239, 207, 223, 246, 159, 119, 70, 123, 153, 84, 37, 229, 152, 11, 108, 157, 207, 78, 204, 138, 32, 92, 222, 184, 188, 252, 74, 108, 200, 29, 129, 50, 182, 137, 246, 240, 93, 136, 233, 143, 14, 78, 161, 255, 124, 87, 220, 245, 244, 161, 236, 128, 146, 252, 154, 240, 65, 246, 124, 110, 42, 49, 49, 188, 14, 177, 107, 29, 233, 108, 63, 71, 82, 106, 206, 172, 133, 2, 105, 122, 119, 106, 106, 53, 212, 43, 42, 186, 234, 69, 118, 133, 221, 170, 65, 137, 64, 190, 163, 183, 95, 70, 136, 181, 61, 237, 216, 178, 229, 186, 178, 98, 27, 208, 241, 192, 151, 8, 134, 195, 74, 230, 153, 141, 239, 210, 49, 240, 237, 10, 134, 77, 170, 137, 28, 72, 228, 0, 232, 252, 223, 76, 119, 99, 115, 42, 206, 62, 176, 40, 107, 3, 99, 10, 204, 79, 37, 110, 127, 83, 82, 176, 101, 176, 146, 46, 20, 61, 20, 244, 3, 78, 170, 55, 128, 223, 120, 51, 189, 99, 43, 97, 82, 215, 124, 106, 212, 161, 23, 208, 229, 242, 215, 51, 54, 218, 238, 15, 233, 211, 42, 50, 33, 40, 5, 36, 61, 143, 190, 41, 225, 32, 25, 95, 248, 254, 78, 181, 116, 187, 123, 10, 63, 236, 77, 164, 162, 55, 23, 46, 42, 197, 136, 85, 164, 102, 151, 0, 233, 134, 34, 199, 59, 56, 74, 18, 245, 251, 103, 117, 47, 149, 174, 203, 225, 214, 11, 161, 32, 124, 10, 169, 88, 144, 141, 83, 191, 155, 224, 158, 55, 21, 222, 4, 63, 241, 210, 20, 198, 125, 148, 127, 91, 199, 24, 125, 84, 223, 144, 67, 228, 223, 239, 13, 145, 28, 162, 38, 239, 190, 227, 86, 243, 212, 178, 8, 40, 185, 107, 245, 101, 185, 124, 37, 46, 132, 110, 114, 115, 32, 87, 170, 225, 165, 133, 76, 4, 105, 140, 109, 230, 184, 168, 50, 109, 141, 239, 63, 152, 21, 209, 61, 165, 88, 75, 53, 98, 59, 73, 186, 38, 212, 21, 43, 166, 124, 231, 139, 113, 193, 88, 203, 83, 159, 158, 229, 163, 82, 40, 222, 40, 9, 10, 185, 72, 45, 30, 59, 32, 64, 42, 36, 171, 227, 202, 207, 131, 45, 42, 179, 185, 174, 15, 198, 167, 112, 224, 188, 190, 232, 188, 184, 247, 48, 159, 115, 145, 235, 67, 129, 116, 144, 191, 130, 125, 15, 74, 154, 20, 228, 30, 60, 201, 132, 200, 165, 54, 155, 4, 109, 253, 97, 230, 172, 137, 233, 88, 112, 190, 131, 13, 200, 203, 248, 237, 107, 97, 127, 162, 156, 199, 160, 209, 97, 4, 188, 1, 223, 94, 168, 128, 191, 176, 134, 50, 244, 202, 108, 99, 25, 230, 101, 166, 220, 89, 112, 145, 80, 76, 53, 178, 243, 204, 80, 179, 139, 240, 251, 2, 142, 22, 160, 49, 150, 86, 201, 216, 151, 173, 24, 214, 212, 153, 208, 254, 223, 59, 173, 70, 99, 204, 254, 75, 176, 31, 254, 49, 47, 87, 234, 202, 92, 20, 224, 41, 153, 215, 74, 240, 159, 66, 81, 208, 182, 35, 249, 76, 173, 41, 103, 125, 219, 18, 74, 183, 97, 146, 118, 122, 71, 4, 251, 180, 154, 236, 6, 67, 39, 139, 58, 41, 201, 220, 114, 175, 188, 121, 29, 190, 131, 192, 131, 212, 80, 16, 10, 12, 71, 139, 242, 161, 192, 87, 203, 61, 206, 84, 12, 109, 212, 125, 195, 149, 109, 177, 86, 149, 138, 84, 100, 54, 94, 222, 209, 131, 239, 69, 158, 103, 220, 253, 108, 127, 57, 252, 64, 27, 219, 17, 84, 131, 93, 190, 175, 192, 24, 130, 204, 26, 59, 1, 79, 122, 96, 123, 142, 193, 156, 223, 223, 92, 232, 45, 201, 61, 85, 142, 155, 107, 2, 178, 1, 207, 103, 208, 241, 64, 174, 250, 222, 168, 56, 36, 176, 72, 161, 223, 136, 217, 115, 22, 252, 38, 197, 149, 120, 241, 155, 88, 92, 24, 21, 182, 11, 141, 56, 62, 147, 62, 167, 104, 106, 86, 208, 23, 76, 76, 25, 241, 236, 199, 185, 147, 130, 195, 165, 129, 5, 123, 55, 154, 85, 60, 193, 28, 101, 98, 185, 42, 144, 169, 228, 110, 51, 20, 32, 173, 221, 123, 7, 139, 18, 109, 132, 132, 130, 195, 26, 2, 218, 50, 200, 230, 215, 20, 122, 82, 167, 59, 173, 106, 210, 27, 27, 73, 166, 198, 8, 199, 50, 224, 96, 165, 162, 28, 250, 128, 113, 227, 165, 242, 38, 78, 246, 109, 96, 1, 107, 85, 104, 4, 153, 207, 142, 33, 154, 11, 90, 179, 82, 13, 207, 91, 55, 83, 204, 231, 10, 207, 247, 120, 51, 69, 78, 67, 217, 131, 196, 140, 170, 2, 176, 252, 146, 221, 9, 135, 69, 120, 34, 31, 37, 104, 170, 125, 9, 215, 136, 251, 39, 58, 26, 173, 202, 34, 32, 43, 167, 206, 45, 46, 114, 194, 212, 148, 46, 169, 114, 207, 174, 81, 227, 130, 211, 124, 193, 111, 72, 107, 59, 78, 235, 73, 218, 47, 50, 133, 143, 59, 234, 186, 87, 68, 195, 175, 1, 44, 64, 115, 32, 141, 225, 88, 6, 22, 103, 147, 144, 236, 9, 160, 140, 27, 33, 239, 189, 109, 52, 122, 134, 129, 255, 168, 233, 240, 5, 30, 245, 23, 56, 11, 129, 181, 214, 65, 244, 160, 21, 123, 111, 99, 218, 42, 170, 98, 193, 189, 76, 166, 194, 125, 242, 210, 103, 211, 218, 223, 25, 155, 222, 175, 92, 126, 114, 234, 52, 237, 198, 138, 196, 43, 157, 179, 45, 194, 92, 161, 193, 135, 98, 233, 62, 119, 22, 105, 117, 1, 98, 45, 109, 33, 102, 249, 49, 149, 4, 163, 53, 59, 39, 184, 80, 171, 53, 22, 150, 252, 104, 231, 119, 4, 242, 8, 72, 3, 79, 46, 78, 130, 222, 62, 37, 74, 10, 20, 220, 204, 229, 188, 186, 229, 213, 161, 33, 83, 186, 205, 16, 70, 138, 145, 134, 248, 184, 174, 243, 135, 47, 166, 188, 172, 214, 195, 16, 56, 2, 169, 89, 244, 5, 202, 228, 156, 11, 48, 171, 222, 22, 169, 146, 41, 218, 84, 191, 248, 198, 74, 123, 141, 133, 19, 113, 126, 120, 3, 91, 92, 104, 104, 158, 212, 119, 163, 30, 119, 53, 34, 76, 69, 165, 234, 119, 11, 26, 150, 202, 8, 154, 210, 152, 202, 221, 228, 87, 215, 120, 137, 37, 65, 54, 85, 155, 103, 178, 8, 40, 1, 111, 168, 15, 24, 153, 216, 110, 7, 173, 53, 112, 197, 167, 145, 164, 195, 5, 205, 226, 189, 35, 204, 94, 0, 80, 70, 91, 216, 191, 72, 64, 249, 77, 160, 11, 12, 255, 162, 2, 175, 22, 27, 156, 188, 243, 66, 226, 31, 113, 241, 182, 147, 195, 140, 234, 114, 201, 176, 72, 154, 245, 172, 120, 122, 224, 61, 145, 212, 51, 119, 4, 136, 154, 203, 240, 24, 159, 72, 142, 181, 53, 117, 87, 14, 94, 66, 65, 146, 105, 220, 9, 121, 160, 155, 116, 154, 108, 132, 17, 189, 50, 22, 51, 94, 208, 176, 3, 157, 122, 54, 48, 110, 250, 92, 86, 138, 77, 4, 98, 65, 39, 149, 1, 54, 25, 23, 108, 249, 198, 48, 96, 226, 30, 111, 34, 47, 43, 240, 161, 225, 78, 90, 32, 43, 211, 236, 55, 109, 100, 165, 186, 1, 138, 60, 159, 253, 131, 185, 80, 11, 92, 230, 223, 197, 69, 240, 241, 211, 187, 52, 77, 169, 47, 56, 254, 231, 184, 86, 195, 218, 129, 189, 105, 26, 136, 239, 248, 3, 229, 83, 191, 42, 51, 149, 15, 235, 234, 224, 244, 159, 100, 177, 240, 17, 172, 252, 248, 130, 106, 14, 233, 119, 37, 200, 101, 146, 5, 158, 210, 215, 196, 243, 245, 172, 215, 29, 99, 215, 63, 234, 121, 229, 158, 242, 133, 95, 185, 183, 228, 157, 35, 250, 152, 64, 123, 49, 157, 79, 252, 206, 182, 139, 106, 243, 94, 116, 174, 212, 92, 72, 112, 121, 24, 61, 130, 223, 166, 151, 120, 61, 85, 157, 50, 37, 127, 107, 186, 92, 32, 182, 44, 57, 158, 43, 242, 132, 182, 54, 31, 23, 252, 165, 172, 146, 230, 245, 145, 24, 16, 0, 216, 187, 136, 203, 86, 78, 87, 196, 247, 180, 92, 137, 138, 202, 66, 163, 24, 73, 140, 153, 221, 129, 131, 181, 91, 69, 38, 172, 71, 90, 17, 211, 27, 136, 93, 198, 110, 166, 164, 222, 49, 31, 97, 234, 43, 221, 119, 243, 130, 97, 68, 241, 125, 214, 191, 125, 251, 172, 207, 106, 44, 94, 67, 103, 18, 245, 112, 167, 191, 107, 109, 138, 150, 38, 109, 118, 28, 161, 241, 51, 146, 195, 148, 22, 154, 49, 250, 215, 243, 86, 140, 120, 21, 89, 167, 131, 81, 247, 170, 65, 162, 15, 124, 95, 154, 116, 133, 165, 64, 103, 153, 169, 178, 233, 162, 88, 186, 248, 49, 243, 211, 97, 79, 54, 135, 248, 101, 171, 240, 179, 57, 58, 105, 129, 60, 161, 203, 0, 73, 241, 195, 247, 61, 98, 172, 223, 213, 228, 170, 120, 253, 145, 111, 21, 233, 32, 12, 31, 66, 218, 245, 130, 11, 223, 161, 63, 173, 118, 103, 109, 175, 5, 243, 66, 166, 243, 48, 19, 143, 8, 158, 57, 73, 119, 106, 169, 96, 194, 213, 19, 246, 30, 162, 231, 208, 39, 51, 167, 207, 251, 157, 55, 110, 250, 4, 29, 190, 242, 119, 81, 191, 87, 182, 15, 160, 73, 118, 96, 78, 176, 121, 144, 7, 100, 238, 174, 209, 239, 191, 16, 205, 240, 152, 178, 219, 45, 63, 36, 42, 157, 84, 36, 117, 140, 122, 58, 154, 188, 83, 242, 13, 121, 41, 77, 192, 68, 12, 40, 115, 220, 55, 194, 197, 23, 106, 107, 59, 199, 34, 196, 182, 147, 51, 4, 90, 193, 114, 21, 151, 251, 95, 222, 88, 147, 98, 34, 72, 250, 93, 17, 239, 231, 240, 135, 188, 15, 41, 222, 37, 125, 250, 185, 65, 124, 251, 95, 4, 188, 76, 114, 92, 232, 178, 115, 205, 11, 173, 241, 166, 243, 225, 235, 52, 148, 143, 39, 134, 15, 153, 53, 173, 73, 84, 226, 1, 188, 105, 236, 219, 159, 131, 220, 209, 243, 170, 107, 193, 11, 113, 6, 181, 154, 46, 175, 208, 202, 46, 12, 235, 252, 193, 10, 73, 99, 39, 192, 17, 244, 42, 106, 167, 54, 187, 146, 254, 226, 112, 44, 254, 217, 31, 129, 239, 188, 57, 17, 8, 3, 41, 52, 171, 233, 135, 123, 95, 64, 198, 112, 56, 196, 179, 245, 176, 124, 254, 193, 251, 233, 203, 213, 235, 123, 216, 80, 51, 194, 130, 126, 181, 237, 91, 99, 239, 34, 69, 47, 119, 79, 247, 164, 202, 53, 230, 202, 185, 191, 203, 233, 107, 109, 230, 2, 173, 88, 226, 249, 250, 254, 183, 103, 58, 0, 63, 99, 115, 144, 197, 114, 167, 219, 40, 168, 128, 254, 39, 14, 120, 76, 84, 190, 136, 202, 115, 218, 237, 128, 229, 46, 80, 126, 17, 132, 149, 76, 100, 83, 232, 239, 122, 28, 241, 207, 199, 194, 131, 67, 159, 234, 230, 134, 185, 42, 10, 82, 252, 218, 15, 98, 27, 35, 135, 71, 182, 208, 177, 180, 11, 66, 70, 102, 50, 227, 90, 167, 215, 24, 201, 15, 127, 167, 121, 15, 56, 115, 182, 196, 133, 48, 216, 111, 15, 98, 106, 5, 34, 126, 0, 210, 177, 88, 89, 79, 172, 211, 189, 80, 72, 247, 140, 17, 130, 127, 231, 140, 168, 135, 36, 43, 148, 194, 93, 153, 125, 166, 116, 133, 221, 193, 184, 97, 94, 32, 248, 224, 114, 95, 51, 66, 87, 110, 19, 90, 34, 54, 146, 88, 11, 195, 190, 116, 67, 56, 9, 80, 244, 204, 185, 197, 137, 226, 3, 93, 236, 174, 157, 1, 182, 136, 83, 26, 143, 76, 238, 138, 179, 18, 96, 10, 68, 158, 130, 142, 221, 30, 99, 89, 67, 175, 150, 121, 95, 102, 28, 96, 28, 124, 220, 6, 224, 221, 97, 170, 205, 208, 242, 133, 211, 103, 109, 181, 64, 74, 21, 146, 20, 158, 146, 53, 33, 254, 172, 114, 36, 120, 91, 211, 14, 244, 191, 89, 55, 226, 14, 102, 19, 254, 220, 242, 138, 31, 254, 227, 231, 2, 123, 252, 243, 2, 219, 5, 210, 93, 175, 18, 224, 146, 225, 26, 56, 205, 224, 70, 157, 83, 212, 198, 54, 215, 105, 29, 35, 160, 196, 4, 101, 75, 154, 27, 221, 20, 211, 179, 41, 172, 122, 109, 141, 96, 108, 215, 227, 38, 140, 24, 149, 102, 8, 23, 76, 152, 192, 157, 215, 102, 208, 97, 247, 159, 143, 152, 106, 103, 122, 205, 35, 118, 238, 247, 79, 99, 51, 38, 23, 163, 19, 142, 130, 118, 185, 211, 204, 94, 229, 25, 44, 74, 7, 123, 158, 120, 91, 123, 115, 0, 215, 180, 93, 66, 247, 38, 250, 99, 14, 183, 2, 103, 162, 66, 46, 48, 213, 190, 172, 139, 234, 61, 112, 11, 110, 108, 157, 75, 232, 196, 89, 185, 11, 32, 50, 141, 27, 75, 181, 48, 220, 204, 154, 166, 255, 199, 122, 126, 38, 226, 217, 69, 143, 196, 247, 104, 96, 20, 235, 232, 34, 70, 184, 212, 181, 117, 106, 36, 65, 130, 28, 195, 237, 137, 14, 151, 217, 86, 54, 6, 156, 176, 80, 117, 203, 206, 12, 61, 222, 87, 88, 199, 174, 241, 2, 194, 72, 30, 244, 88, 222, 77, 177, 228, 221, 95, 248, 75, 51, 171, 2, 249, 74, 113, 0, 194, 128, 42, 245, 126, 151, 37, 74, 201, 95, 253, 134, 111, 11, 191, 88, 226, 64, 9, 80, 193, 226, 207, 224, 11, 40, 94, 200, 41, 122, 7, 109, 120, 89, 233, 190, 237, 115, 184, 92, 23, 237, 134, 162, 173, 81, 154, 129, 146, 184, 70, 31, 16, 53, 174, 163, 209, 212, 113, 236, 123, 57, 214, 197, 43, 197, 51, 103, 118, 135, 68, 191, 128, 183, 108, 193, 196, 28, 111, 68, 163, 56, 229, 66, 178, 54, 12, 158, 115, 210, 68, 18, 162, 138, 230, 128, 185, 137, 213, 109, 181, 188, 3, 113, 75, 142, 122, 140, 65, 32, 34, 209, 59, 80, 234, 101, 67, 76, 249, 125, 142, 165, 138, 23, 123, 240, 207, 123, 178, 224, 224, 251, 171, 250, 223, 133, 79, 209, 109, 189, 170, 69, 83, 89, 97, 225, 218, 217, 254, 136, 97, 73, 241, 234, 103, 109, 87, 81, 77, 153, 3, 240, 37, 227, 65, 9, 253, 246, 67, 114, 58, 85, 116, 226, 226, 138, 122, 251, 11, 56, 62, 130, 227, 198, 231, 111, 228, 108, 34, 113, 178, 192, 90, 193, 246, 239, 208, 8, 212, 241, 79, 37, 159, 10, 55, 21, 229, 166, 82, 250, 33, 129, 64, 122, 71, 184, 18, 186, 157, 202, 122, 228, 97, 85, 136, 84, 69, 20, 230, 188, 100, 196, 26, 222, 150, 45, 206, 170, 248, 226, 129, 30, 131, 38, 93, 5, 30, 96, 236, 182, 130, 138, 151, 183, 222, 13, 93, 252, 23, 165, 11, 203, 15, 2, 17, 102, 254, 195, 190, 124, 110, 233, 151, 227, 36, 204, 98, 228, 76, 0, 205, 79, 250, 86, 187, 20, 106, 124, 27, 110, 162, 174, 137, 33, 78, 249, 248, 48, 251, 227, 43, 130, 37, 95, 59, 220, 211, 13, 90, 67, 98, 135, 37, 112, 171, 36, 175, 223, 22, 220, 209, 30, 145, 44, 235, 236, 205, 153, 35, 24, 78, 38, 94, 141, 232, 74, 46, 253, 120, 82, 98, 36, 10, 215, 145, 115, 191, 37, 25, 185, 88, 144, 120, 243, 161, 149, 224, 123, 228, 245, 29, 120, 108, 17, 200, 226, 83, 127, 129, 113, 99, 253, 230, 0, 182, 139, 78, 197, 150, 38, 159, 44, 58, 180, 200, 189, 185, 229, 51, 75, 226, 67, 233, 20, 53, 253, 68, 48, 181, 196, 17, 73, 79, 39, 220, 2, 177, 55, 114, 138, 141, 154, 72, 153, 138, 27, 56, 127, 120, 180, 215, 212, 1, 87, 48, 123, 215, 174, 12, 215, 8, 180, 56, 249, 206, 26, 218, 17, 129, 17, 68, 117, 78, 68, 151, 195, 142, 110, 238, 235, 2, 213, 225, 159, 60, 11, 80, 126, 116, 230, 107, 54, 118, 10, 62, 250, 243, 157, 14, 151, 148, 34, 236, 72, 10, 124, 153, 218, 230, 231, 241, 224, 204, 5, 48, 181, 37, 45, 8, 60, 128, 94, 220, 216, 124, 31, 160, 67, 216, 8, 246, 188, 248, 51, 164, 55, 128, 31, 8, 124, 129, 163, 118, 3, 97, 42, 7, 114, 18, 23, 178, 214, 6, 67, 43, 60, 107, 47, 151, 171, 223, 181, 101, 229, 126, 13, 140, 253, 194, 118, 213, 64, 122, 31, 177, 113, 241, 210, 189, 195, 29, 168, 140, 181, 248, 112, 188, 64, 52, 229, 57, 56, 107, 97, 79, 0, 193, 35, 62, 161, 30, 44, 176, 103, 218, 57, 0, 110, 169, 79, 40, 7, 129, 121, 194, 108, 191, 181, 234, 31, 234, 184, 69, 1, 108, 209, 202, 72, 250, 173, 114, 93, 217, 11, 171, 148, 227, 221, 132, 146, 181, 38, 87, 237, 13, 151, 251, 132, 179, 28, 205, 177, 111, 172, 11, 31, 8, 210, 154, 144, 182, 168, 217, 59, 131, 235, 199, 200, 147, 54, 164, 251, 128, 86, 232, 211, 22, 125, 206, 240, 165, 64, 69, 77, 207, 81, 47, 232, 224, 174, 226, 23, 157, 211, 148, 242, 75, 156, 155, 20, 94, 139, 24, 173, 52, 52, 9, 140, 59, 52, 195, 224, 20, 254, 195, 17, 188, 219, 104, 62, 26, 97, 196, 236, 176, 142, 248, 27, 90, 210, 118, 199, 59, 243, 80, 192, 93, 193, 79, 128, 121, 174, 221, 225, 227, 36, 68, 170, 168, 15, 58, 163, 89, 185, 27, 28, 222, 199, 214, 177, 40, 178, 232, 235, 194, 129, 2, 7, 147, 247, 5, 120, 63, 127, 193, 58, 69, 93, 206, 38, 143, 211, 36, 143, 1, 134, 77, 143, 86, 77, 28, 220, 63, 128, 17, 221, 111, 240, 232, 47, 203, 236, 174, 101, 95, 158, 220, 154, 189, 70, 46, 71, 138, 240, 45, 88, 54, 149, 118, 82, 20, 22, 231, 47, 158, 22, 98, 54, 200, 1, 251, 237, 75, 151, 161, 48, 166, 47, 75, 65, 98, 25, 255, 51, 197, 135, 64, 69, 191, 177, 58, 3, 131, 63, 228, 182, 235, 166, 2, 132, 74, 144, 165, 218, 146, 255, 19, 173, 135, 145, 101, 132, 74, 191, 128, 38, 177, 37, 119, 237, 28, 246, 208, 209, 79, 78, 160, 197, 75, 55, 7, 58, 84, 156, 30, 190, 212, 16, 178, 220, 231, 182, 120, 218, 225, 33, 49, 248, 242, 123, 140, 217, 78, 55, 152, 232, 193, 28, 7, 92, 196, 107, 63, 143, 142, 36, 225, 95, 29, 200, 201, 184, 191, 94, 224, 230, 143, 175, 74, 128, 52, 230, 123, 178, 239, 82, 158, 187, 221, 148, 166, 152, 124, 9, 122, 46, 238, 184, 8, 157, 253, 63, 159, 87, 37, 111, 35, 145, 114, 110, 238, 111, 203, 9, 206, 199, 181, 74, 217, 17, 198, 134, 107, 234, 172, 53, 158, 48, 76, 99, 120, 213, 116, 243, 21, 66, 176, 237, 227, 230, 54, 9, 233, 70, 201, 229, 108, 175, 233, 37, 48, 135, 90, 247, 66, 29, 30, 253, 19, 76, 127, 172, 41, 21, 75, 203, 28, 178, 220, 250, 212, 55, 105, 198, 164, 151, 75, 201, 89, 198, 121, 59, 235, 82, 143, 147, 6, 203, 20, 93, 7, 131, 107, 103, 187, 44, 190, 39, 54, 107, 79, 223, 120, 143, 35, 218, 10, 102, 168, 47, 129, 60, 143, 8, 121, 234, 136, 177, 184, 16, 12, 226, 155, 244, 63, 80, 173, 248, 130, 66, 64, 65, 22, 73, 124, 173, 32, 128, 50, 74, 12, 68, 211, 22, 207, 170, 216, 115, 68, 94, 193, 50, 39, 159, 159, 97, 189, 146, 108, 40, 51, 85, 254, 0, 21, 225, 97, 68, 107, 228, 237, 201, 68, 175, 114, 61, 250, 25, 34, 68, 148, 9, 4, 27, 102, 64, 88, 197, 154, 89, 240, 190, 18, 95, 32, 214, 5, 138, 14, 113, 95, 175, 33, 46, 30, 230, 195, 0, 239, 76, 198, 159, 162, 189, 187, 26, 114, 246, 251, 94, 17, 69, 20, 130, 55, 50, 60, 16, 149, 125, 40, 34, 102, 195, 201, 148, 245, 189, 123, 91, 211, 17, 228, 129, 179, 55, 114, 66, 251, 36, 52, 159, 59, 121, 17, 48, 241, 246, 102, 128, 246, 202, 46, 159, 250, 215, 188, 90, 119, 101, 103, 217, 77, 224, 152, 201, 106, 27, 57, 159, 75, 12, 65, 157, 100, 58, 17, 123, 239, 87, 223, 181, 9, 159, 166, 95, 203, 32, 99, 242, 27, 26, 69, 158, 17, 116, 255, 239, 230, 135, 223, 108, 150, 145, 125, 53, 157, 101, 247, 124, 239, 170, 211, 123, 99, 101, 40, 237, 84, 116, 243, 103, 61, 40, 170, 39, 28, 71, 163, 64, 159, 201, 206, 120, 66, 122, 200, 195, 204, 185, 147, 18, 7, 81, 214, 6, 114, 189, 28, 145, 203, 53, 63, 7, 73, 80, 154, 207, 154, 63, 221, 41, 239, 221, 200, 57, 243, 60, 249, 64, 24, 20, 166, 12, 175, 156, 5, 241, 111, 24, 163, 29, 68, 152, 25, 153, 72, 164, 50, 85, 48, 104, 32, 125, 188, 174, 98, 191, 134, 140, 93, 88, 111, 67, 101, 128, 247, 100, 167, 159, 171, 115, 34, 121, 1, 201, 67, 192, 149, 220, 115, 233, 94, 214, 180, 15, 107, 159, 126, 92, 108, 206, 185, 88, 188, 110, 120, 86, 74, 44, 7, 122, 12, 252, 244, 8, 184, 81, 101, 204, 115, 90, 141, 187, 119, 115, 67, 175, 22, 165, 136, 236, 128, 132, 224, 27, 19, 229, 134, 37, 183, 129, 199, 255, 7, 126, 59, 150, 96, 0, 127, 92, 5, 113, 128, 93, 123, 44, 106, 253, 48, 42, 244, 149, 151, 47, 195, 158, 102, 24, 83, 149, 22, 231, 120, 7, 89, 82, 191, 183, 85, 5, 134, 141, 223, 224, 138, 173, 34, 234, 83, 95, 64, 178, 220, 249, 247, 9, 134, 219, 56, 74, 94, 148, 57, 91, 153, 35, 252, 202, 237, 125, 52, 211, 239, 48, 79, 187, 75, 106, 68, 157, 75, 160, 75, 70, 150, 18, 95, 31, 254, 226, 195, 26, 129, 93, 168, 106, 234, 44, 184, 231, 113, 23, 139, 230, 198, 22, 3, 166, 252, 31, 162, 185, 80, 91, 11, 19, 136, 80, 240, 36, 53, 99, 56, 212, 75, 141, 91, 52, 195, 247, 117, 218, 228, 134, 146, 246, 70, 238, 235, 125, 93, 205, 183, 93, 231, 142, 98, 197, 15, 107, 108, 185, 107, 81, 133, 79, 57, 128, 71, 70, 213, 126, 33, 224, 128, 164, 90, 34, 214, 210, 100, 121, 44, 129, 203, 6, 17, 56, 231, 87, 185, 252, 194, 120, 88, 24, 198, 196, 102, 133, 52, 189, 247, 57, 173, 81, 108, 103, 52, 38, 123, 63, 183, 105, 29, 75, 224, 132, 201, 152, 38, 226, 138, 246, 181, 148, 226, 114, 103, 142, 117, 189, 235, 13, 137, 76, 122, 9, 33, 58, 185, 236, 169, 48, 46, 154, 107, 231, 64, 23, 234, 47, 125, 80, 246, 250, 206, 204, 238, 148, 149, 87, 88, 239, 74, 197, 102, 214, 35, 239, 130, 39, 251, 3, 75, 224, 121, 93, 89, 58, 244, 112, 85, 122, 231, 15, 70, 139, 45, 19, 167, 144, 137, 72, 182, 140, 174, 102, 200, 204, 168, 168, 15, 32, 25, 166, 53, 250, 105, 80, 40, 74, 82, 224, 216, 243, 162, 198, 39, 43, 166, 42, 183, 139, 53, 94, 145, 94, 46, 129, 43, 196, 118, 46, 66, 240, 203, 177, 159, 228, 153, 204, 86, 221, 92, 161, 254, 17, 17, 52, 30, 191, 122, 217, 18, 168, 221, 227, 237, 225, 230, 29, 250, 53, 88, 92, 47, 178, 8, 146, 147, 210, 209, 227, 107, 18, 8, 107, 41, 6, 229, 95, 74, 178, 172, 200, 104, 241, 31, 72, 223, 108, 225, 209, 76, 245, 250, 64, 18, 73, 63, 104, 116, 73, 51, 233, 93, 141, 207, 43, 231, 255, 169, 104, 231, 2, 31, 24, 185, 228, 66, 253, 234, 163, 89, 137, 214, 177, 219, 42, 55, 80, 159, 194, 215, 241, 138, 137, 135, 206, 62, 46, 138, 85, 77, 20, 97, 230, 196, 95, 43, 123, 244, 175, 186, 56, 244, 14, 188, 117, 167, 247, 80, 90, 5, 93, 253, 79, 193, 236, 113, 217, 113, 174, 174, 254, 8, 151, 32, 111, 1, 129, 110, 161, 198, 62, 6, 232, 62, 29, 1, 190, 252, 228, 102, 26, 13, 217, 222, 200, 208, 123, 104, 178, 213, 228, 80, 38, 168, 117, 189, 174, 47, 249, 234, 52, 22, 27, 244, 233, 66, 173, 209, 125, 58, 67, 252, 211, 42, 181, 224, 175, 105, 39, 46, 127, 34, 211, 163, 239, 53, 251, 161, 74, 13, 202, 219, 27, 210, 44, 224, 57, 218, 243, 74, 143, 48, 49, 158, 208, 132, 160, 204, 114, 223, 52, 157, 164, 205, 156, 237, 93, 48, 176, 147, 254, 77, 236, 129, 36, 143, 210, 68, 110, 160, 103, 252, 181, 80, 127, 244, 33, 184, 166, 209, 33, 175, 85, 33, 148, 126, 84, 191, 123, 26, 58, 43, 0, 94, 31, 56, 137, 122, 41, 26, 155, 128, 204, 220, 151, 68, 38, 227, 58, 148, 88, 24, 2, 43, 109, 157, 219, 61, 15, 74, 43, 114, 159, 77, 0, 189, 147, 240, 152, 132, 0, 157, 18, 152, 146, 115, 37, 211, 225, 199, 92, 230, 192, 131, 114, 65, 5, 80, 59, 152, 240, 115, 162, 3, 22, 211, 191, 169, 104, 146, 72, 192, 80, 77, 218, 184, 239, 243, 123, 64, 142, 129, 143, 237, 228, 239, 138, 47, 195, 4, 102, 182, 208, 235, 9, 20, 245, 82, 190, 192, 187, 88, 119, 37, 246, 199, 109, 58, 241, 41, 161, 221, 250, 77, 59, 79, 91, 137, 48, 107, 58, 250, 179, 187, 244, 134, 221, 75, 187, 118, 242, 166, 122, 246, 173, 153, 208, 61, 57, 126, 80, 95, 195, 202, 95, 161, 93, 199, 233, 209, 222, 154, 118, 244, 234, 96, 69, 194, 131, 0, 11, 113, 184, 39, 217, 253, 23, 184, 68, 103, 178, 46, 161, 228, 83, 220, 146, 81, 69, 127, 70, 56, 243, 76, 175, 178, 31, 145, 95, 46, 220, 112, 63, 39, 65, 22, 40, 54, 201, 238, 38, 109, 48, 181, 21, 96, 40, 55, 13, 37, 248, 29, 232, 233, 191, 202, 127, 56, 45, 177, 216, 36, 11, 85, 160, 122, 182, 195, 64, 119, 49, 239, 93, 45, 163, 111, 210, 83, 191, 86, 95, 166, 219, 5, 96, 249, 28, 100, 45, 168, 47, 233, 64, 173, 157, 181, 92, 152, 245, 194, 1, 249, 170, 238, 25, 111, 31, 228, 122, 69, 54, 61, 27, 5, 36, 213, 248, 152, 177, 61, 177, 147, 147, 205, 10, 167, 11, 162, 147, 56, 221, 47, 236, 150, 216, 226, 11, 121, 143, 183, 229, 79, 89, 53, 150, 159, 5, 126, 11, 198, 72, 47, 215, 53, 86, 235, 30, 224, 143, 213, 20, 76, 149, 144, 44, 45, 55, 100, 85, 229, 198, 253, 57, 60, 80, 187, 196, 188, 53, 153, 167, 54, 163, 247, 4, 159, 210, 153, 202, 13, 188, 251, 205, 54, 254, 163, 157, 121, 14, 144, 72, 240, 10, 78, 220, 162, 89, 92, 32, 154, 213, 216, 228, 140, 22, 133, 6, 115, 209, 76, 142, 201, 37, 206, 214, 20, 177, 115, 211, 58, 128, 240, 228, 207, 42, 209, 156, 254, 220, 140, 128, 45, 101, 28, 94, 148, 81, 7, 51, 164, 119, 229, 36, 16, 47, 199, 245, 157, 146, 216, 242, 41, 44, 161, 165, 70, 78, 197, 71, 33, 115, 106, 137, 99, 105, 96, 203, 96, 228, 28, 104, 79, 151, 91, 128, 155, 225, 189, 166, 65, 50, 43, 40, 168, 36, 238, 29, 7, 60, 203, 102, 72, 253, 165, 223, 103, 3, 186, 94, 25, 163, 228, 169, 114, 70, 2, 181, 110, 68, 148, 26, 160, 143, 238, 245, 6, 113, 64, 193, 78, 117, 9, 43, 83, 176, 15, 236, 139, 49, 150, 100, 91, 107, 112, 115, 168, 247, 24, 131, 88, 111, 68, 186, 43, 100, 254, 65, 107, 159, 28, 8, 118, 45, 139, 102, 179, 239, 178, 212, 219, 50, 39, 40, 31, 60, 67, 2, 127, 250, 18, 95, 90, 151, 143, 157, 12, 237, 27, 24, 190, 59, 93, 36, 129, 111, 124, 96, 0, 141, 74, 5, 89, 146, 234, 10, 37, 120, 150, 165, 193, 64, 41, 170, 46, 53, 187, 197, 75, 181, 83, 139, 193, 126, 126, 163, 231, 231, 86, 185, 166, 141, 195, 225, 49, 45, 55, 80, 181, 131, 17, 101, 58, 154, 176, 2, 131, 44, 72, 26, 192, 6, 79, 21, 100, 164, 189, 119, 61, 131, 67, 89, 127, 19, 108, 136, 104, 30, 62, 169, 7, 26, 197, 94, 130, 70, 117, 166, 180, 7, 156, 120, 14, 68, 120, 55, 176, 125, 159, 219, 63, 27, 74, 192, 128, 95, 142, 178, 17, 130, 44, 57, 156, 168, 251, 124, 206, 121, 137, 182, 174, 22, 191, 232, 146, 142, 107, 41, 86, 128, 117, 124, 34, 107, 102, 229, 43, 72, 87, 167, 1, 95, 6, 61, 231, 5, 147, 64, 15, 102, 133, 233, 242, 154, 170, 194, 174, 139, 176, 81, 106, 18, 243, 2, 162, 138, 65, 131, 122, 65, 227, 100, 219, 148, 168, 120, 12, 222, 211, 62, 191, 23, 66, 173, 38, 208, 212, 169, 206, 129, 43, 170, 111, 18, 190, 251, 76, 183, 46, 233, 145, 67, 149, 173, 197, 103, 175, 15, 116, 184, 11, 104, 210, 63, 105, 70, 175, 46, 171, 176, 203, 242, 227, 54, 1, 78, 194, 217, 143, 187, 218, 4, 129, 129, 126, 119, 166, 207, 203, 245, 14, 97, 212, 248, 58, 18, 228, 149, 144, 251, 252, 153, 3, 132, 170, 254, 67, 235, 30, 177, 119, 216, 20, 59, 89, 132, 181, 33, 30, 227, 139, 93, 7, 167, 241, 25, 96, 242, 150, 85, 63, 146, 105, 183, 238, 11, 56, 89, 7, 61, 7, 173, 231, 141, 163, 198, 114, 230, 149, 247, 36, 55, 8, 144, 95, 152, 163, 184, 182, 106, 223, 30, 39, 184, 135, 207, 118, 208, 157, 21, 117, 195, 182, 179, 2, 81, 9, 229, 2, 202, 196, 59, 208, 119, 14, 206, 60, 86, 82, 148, 34, 87, 64, 118], - [155, 156, 47, 23, 216, 174, 49, 24, 95, 26, 145, 129, 47, 72, 10, 67, 171, 60, 247, 176, 90, 170, 21, 33, 229, 224, 35, 34, 116, 31, 155, 194, 252, 48, 190, 2, 47, 18, 239, 12, 53, 39, 93, 225, 245, 93, 182, 165, 186, 78, 131, 181, 58, 17, 55, 74, 211, 157, 133, 73, 83, 245, 140, 0, 48, 114, 56, 202, 213, 169, 231, 70, 77, 79, 243, 94, 90, 149, 76, 113, 203, 249, 115, 161, 160, 227, 39, 134, 40, 68, 10, 210, 145, 250, 175, 174, 144, 0, 226, 246, 245, 231, 123, 240, 132, 129, 81, 149, 28, 155, 242, 28, 172, 62, 103, 41, 168, 62, 26, 15, 31, 220, 16, 172, 79, 210, 80, 4, 110, 200, 188, 159, 158, 230, 80, 94, 248, 223, 47, 132, 101, 136, 243, 248, 159, 114, 219, 52, 140, 76, 235, 237, 251, 229, 6, 38, 112, 73, 13, 204, 252, 91, 210, 195, 252, 58, 76, 185, 164, 31, 249, 46, 41, 4, 242, 249, 115, 20, 11, 248, 47, 254, 243, 216, 108, 147, 153, 32, 60, 42, 209, 52, 162, 48, 40, 155, 138, 202, 223, 243, 99, 162, 177, 62, 136, 253, 125, 49, 29, 250, 153, 117, 25, 173, 52, 151, 21, 210, 198, 241, 214, 8, 219, 46, 41, 129, 255, 17, 186, 148, 189, 222, 185, 78, 82, 255, 39, 128, 120, 142, 136, 159, 2, 246, 142, 254, 49, 139, 224, 12, 61, 55, 237, 205, 48, 102, 186, 252, 36, 243, 35, 190, 233, 213, 87, 132, 178, 113, 229, 66, 146, 144, 31, 165, 85, 40, 24, 44, 251, 194, 185, 69, 26, 95, 36, 133, 225, 88, 80, 245, 62, 242, 220, 82, 226, 14, 23, 254, 244, 112, 15, 196, 160, 68, 236, 161, 142, 56, 26, 168, 109, 24, 226, 10, 140, 54, 10, 62, 36, 1, 70, 69, 219, 166, 221, 165, 124, 136, 248, 51, 229, 37, 28, 154, 211, 145, 195, 55, 64, 218, 150, 177, 38, 77, 220, 55, 92, 120, 22, 148, 142, 113, 169, 51, 28, 147, 11, 0, 88, 221, 16, 170, 106, 25, 95, 28, 59, 168, 237, 130, 175, 10, 201, 1, 232, 246, 102, 81, 104, 213, 89, 27, 115, 13, 171, 98, 90, 14, 189, 66, 221, 181, 222, 139, 167, 173, 243, 65, 31, 239, 186, 53, 156, 201, 119, 197, 136, 111, 246, 254, 68, 204, 211, 212, 90, 27, 191, 85, 144, 206, 75, 120, 185, 99, 137, 160, 251, 211, 21, 141, 1, 156, 129, 48, 200, 171, 191, 200, 79, 226, 202, 63, 136, 49, 66, 234, 124, 148, 16, 100, 34, 145, 64, 135, 204, 126, 15, 75, 131, 46, 76, 172, 138, 198, 120, 48, 92, 80, 243, 133, 74, 23, 169, 237, 188, 186, 205, 143, 237, 122, 244, 23, 43, 7, 240, 50, 117, 153, 163, 231, 169, 58, 156, 147, 215, 243, 218, 74, 217, 15, 117, 17, 34, 19, 38, 136, 225, 210, 183, 43, 157, 201, 43, 73, 26, 198, 115, 201, 135, 166, 37, 221, 230, 224, 171, 74, 2, 100, 98, 176, 56, 64, 15, 71, 71, 76, 219, 73, 215, 16, 155, 112, 9, 223, 173, 65, 37, 93, 175, 60, 25, 253, 40, 228, 145, 69, 136, 119, 233, 150, 154, 56, 95, 250, 96, 174, 13, 187, 173, 1, 92, 63, 228, 38, 133, 8, 25, 62, 192, 126, 103, 94, 34, 8, 23, 88, 177, 202, 218, 193, 216, 156, 241, 23, 235, 188, 39, 93, 165, 62, 246, 67, 98, 237, 148, 43, 24, 171, 12, 68, 94, 180, 121, 200, 219, 192, 30, 134, 242, 23, 35, 111, 140, 198, 93, 241, 232, 82, 108, 165, 148, 5, 74, 2, 107, 211, 253, 176, 206, 197, 12, 89, 153, 253, 1, 36, 204, 97, 191, 143, 136, 187, 59, 79, 145, 65, 35, 53, 59, 14, 99, 45, 139, 144, 244, 130, 55, 233, 121, 0, 253, 99, 237, 171, 165, 73, 15, 30, 125, 228, 76, 99, 137, 49, 37, 113, 89, 237, 255, 128, 233, 136, 211, 237, 67, 163, 134, 6, 243, 105, 82, 152, 84, 94, 36, 111, 125, 46, 162, 72, 239, 140, 147, 121, 239, 240, 58, 188, 43, 151, 161, 104, 68, 88, 85, 169, 169, 51, 212, 62, 1, 32, 204, 162, 61, 49, 186, 45, 239, 202, 40, 227, 93, 142, 130, 183, 152, 97, 144, 98, 92, 22, 155, 128, 154, 156, 134, 78, 184, 130, 227, 47, 35, 75, 205, 28, 223, 134, 62, 164, 187, 192, 187, 69, 138, 45, 83, 156, 15, 198, 192, 196, 99, 99, 32, 77, 193, 251, 164, 205, 96, 49, 132, 162, 216, 226, 63, 254, 214, 81, 242, 129, 158, 83, 176, 87, 218, 56, 144, 238, 180, 7, 138, 23, 94, 56, 43, 186, 108, 98, 54, 242, 202, 198, 172, 67, 106, 28, 83, 253, 193, 157, 139, 238, 95, 62, 91, 233, 203, 57, 217, 65, 19, 28, 251, 55, 194, 105, 115, 185, 63, 255, 4, 79, 211, 235, 14, 223, 176, 238, 211, 148, 44, 12, 93, 55, 3, 204, 155, 189, 147, 64, 68, 56, 188, 150, 15, 36, 238, 49, 30, 159, 212, 26, 111, 152, 103, 168, 248, 217, 93, 243, 30, 148, 120, 33, 73, 57, 118, 162, 147, 93, 241, 171, 41, 20, 234, 35, 212, 218, 131, 154, 40, 139, 186, 56, 6, 108, 134, 77, 101, 238, 234, 47, 182, 169, 77, 103, 193, 94, 120, 32, 60, 119, 138, 162, 121, 41, 244, 16, 12, 81, 177, 196, 108, 6, 217, 193, 192, 32, 15, 250, 219, 119, 14, 58, 118, 110, 53, 38, 252, 101, 160, 135, 152, 86, 77, 254, 184, 228, 28, 58, 178, 81, 9, 72, 132, 129, 123, 18, 204, 108, 33, 227, 128, 74, 220, 30, 151, 240, 28, 194, 172, 57, 107, 144, 252, 100, 226, 40, 50, 154, 145, 22, 211, 66, 224, 90, 36, 170, 121, 151, 166, 60, 23, 136, 252, 95, 174, 10, 105, 155, 50, 14, 147, 105, 237, 21, 181, 136, 5, 30, 120, 86, 103, 148, 96, 89, 179, 116, 148, 95, 138, 151, 23, 103, 116, 208, 82, 113, 136, 111, 87, 134, 102, 120, 158, 252, 21, 75, 13, 66, 233, 202, 101, 39, 170, 121, 51, 20, 132, 32, 187, 37, 255, 143, 70, 152, 255, 236, 213, 110, 128, 56, 50, 56, 207, 1, 129, 208, 107, 99, 64, 212, 125, 36, 98, 235, 178, 173, 247, 57, 176, 175, 248, 19, 203, 1, 22, 135, 163, 151, 152, 228, 82, 162, 135, 135, 53, 251, 239, 36, 119, 151, 148, 203, 157, 49, 20, 140, 17, 243, 32, 192, 255, 33, 200, 186, 153, 4, 87, 63, 170, 29, 54, 61, 92, 253, 83, 229, 75, 159, 122, 252, 61, 235, 34, 108, 45, 150, 81, 199, 227, 74, 61, 157, 38, 184, 179, 247, 67, 11, 20, 226, 124, 96, 255, 218, 16, 152, 143, 18, 138, 27, 151, 48, 231, 200, 52, 145, 64, 17, 82, 14, 72, 123, 198, 215, 183, 34, 98, 63, 44, 3, 45, 163, 22, 221, 148, 250, 141, 81, 171, 112, 27, 64, 6, 214, 119, 93, 60, 206, 67, 47, 74, 193, 228, 185, 103, 13, 69, 249, 104, 216, 146, 230, 8, 64, 153, 8, 23, 127, 7, 112, 180, 242, 206, 61, 28, 245, 187, 43, 103, 172, 213, 94, 56, 227, 194, 174, 87, 230, 222, 249, 154, 139, 229, 136, 215, 52, 254, 101, 235, 109, 220, 239, 161, 16, 206, 159, 189, 255, 89, 90, 25, 89, 8, 49, 233, 214, 210, 179, 85, 48, 8, 162, 0, 50, 228, 114, 192, 79, 9, 96, 182, 81, 137, 250, 218, 145, 146, 54, 131, 90, 128, 238, 174, 232, 237, 73, 248, 95, 111, 98, 53, 189, 82, 209, 72, 247, 224, 90, 254, 224, 41, 7, 225, 82, 169, 245, 195, 29, 141, 104, 24, 42, 164, 27, 19, 101, 216, 126, 183, 26, 33, 43, 1, 232, 242, 204, 236, 196, 51, 199, 105, 229, 59, 10, 29, 59, 109, 15, 210, 0, 82, 244, 72, 163, 245, 208, 211, 233, 4, 156, 155, 45, 255, 116, 197, 52, 178, 186, 148, 221, 221, 228, 96, 47, 46, 49, 120, 186, 28, 249, 241, 134, 34, 235, 2, 195, 63, 66, 144, 126, 58, 133, 213, 22, 222, 131, 122, 119, 232, 110, 109, 119, 174, 242, 141, 172, 143, 76, 216, 38, 48, 183, 109, 254, 79, 84, 70, 71, 5, 7, 93, 94, 157, 18, 211, 84, 32, 248, 29, 208, 67, 29, 254, 42, 71, 148, 83, 60, 211, 246, 60, 79, 98, 178, 145, 128, 227, 203, 151, 171, 162, 155, 64, 130, 235, 180, 18, 62, 66, 67, 235, 83, 165, 161, 244, 108, 51, 140, 65, 214, 202, 49, 239, 143, 74, 22, 85, 206, 85, 34, 247, 46, 105, 66, 48, 112, 114, 63, 179, 39, 185, 193, 249, 160, 35, 67, 105, 249, 242, 99, 252, 10, 53, 107, 36, 49, 177, 206, 3, 196, 140, 113, 27, 239, 200, 158, 13, 219, 35, 208, 75, 239, 197, 87, 214, 109, 247, 208, 78, 83, 218, 94, 163, 131, 132, 115, 19, 234, 107, 99, 64, 33, 69, 85, 215, 185, 87, 236, 148, 51, 219, 3, 78, 143, 44, 125, 48, 131, 177, 229, 79, 160, 135, 70, 131, 223, 138, 22, 238, 38, 70, 208, 38, 106, 22, 206, 101, 133, 244, 227, 172, 168, 201, 46, 246, 60, 22, 240, 181, 207, 122, 133, 62, 254, 92, 51, 14, 229, 248, 87, 170, 35, 104, 29, 130, 57, 247, 128, 251, 154, 69, 162, 230, 164, 66, 71, 53, 59, 94, 22, 238, 134, 172, 168, 202, 226, 43, 134, 20, 186, 241, 123, 163, 52, 159, 92, 170, 193, 15, 70, 18, 172, 233, 28, 163, 236, 28, 228, 55, 17, 148, 198, 62, 36, 250, 196, 233, 13, 21, 126, 4, 149, 203, 212, 13, 140, 246, 180, 177, 187, 241, 147, 243, 254, 236, 213, 93, 33, 199, 137, 145, 1, 159, 50, 184, 105, 166, 55, 120, 251, 18, 186, 165, 218, 228, 30, 70, 133, 128, 102, 215, 240, 74, 151, 54, 176, 215, 91, 88, 123, 160, 108, 39, 197, 124, 123, 243, 80, 5, 139, 212, 101, 222, 131, 98, 232, 83, 28, 71, 4, 132, 79, 78, 3, 84, 142, 98, 83, 151, 233, 29, 77, 96, 73, 252, 85, 245, 48, 78, 110, 135, 175, 42, 156, 171, 72, 243, 87, 242, 70, 33, 255, 142, 20, 35, 34, 157, 150, 160, 116, 210, 108, 102, 231, 55, 228, 44, 59, 184, 222, 205, 70, 158, 33, 40, 170, 79, 195, 64, 205, 190, 132, 231, 165, 68, 66, 234, 61, 235, 8, 240, 197, 38, 54, 129, 138, 161, 231, 93, 62, 37, 1, 241, 216, 158, 73, 251, 207, 2, 119, 107, 73, 174, 205, 106, 54, 183, 157, 1, 106, 91, 152, 222, 159, 66, 197, 63, 47, 225, 93, 40, 150, 234, 128, 139, 98, 97, 249, 211, 236, 182, 86, 132, 15, 210, 79, 63, 219, 161, 114, 159, 211, 218, 46, 145, 141, 90, 86, 179, 196, 6, 8, 15, 220, 14, 35, 128, 148, 13, 189, 96, 236, 6, 3, 119, 179, 123, 140, 37, 232, 76, 213, 180, 153, 27, 156, 18, 20, 150, 241, 189, 153, 121, 73, 94, 226, 237, 172, 177, 247, 50, 239, 122, 225, 52, 236, 145, 147, 70, 153, 228, 177, 176, 177, 30, 92, 66, 5, 171, 214, 87, 247, 201, 139, 145, 63, 71, 222, 86, 214, 29, 147, 98, 103, 85, 54, 220, 116, 218, 213, 15, 202, 114, 236, 78, 75, 127, 31, 38, 130, 188, 115, 99, 161, 177, 53, 185, 100, 139, 155, 74, 160, 44, 230, 192, 24, 204, 20, 210, 135, 248, 170, 206, 57, 149, 190, 137, 183, 241, 253, 47, 174, 131, 60, 3, 59, 164, 137, 146, 4, 52, 113, 146, 72, 51, 16, 232, 37, 153, 200, 16, 120, 182, 224, 124, 87, 165, 186, 58, 75, 102, 165, 137, 8, 28, 103, 18, 210, 214, 240, 232, 63, 35, 113, 2, 83, 182, 5, 30, 25, 113, 93, 128, 154, 10, 35, 153, 33, 23, 122, 133, 33, 254, 227, 0, 12, 28, 18, 54, 82, 55, 247, 109, 145, 41, 0, 57, 183, 123, 97, 98, 241, 67, 249, 19, 243, 75, 158, 41, 186, 226, 178, 212, 255, 238, 1, 156, 194, 54, 66, 63, 38, 152, 124, 159, 13, 207, 195, 59, 68, 130, 193, 86, 161, 90, 26, 180, 40, 108, 109, 169, 16, 204, 66, 19, 97, 192, 155, 177, 224, 204, 120, 55, 238, 70, 153, 86, 215, 36, 79, 181, 83, 126, 116, 160, 203, 172, 222, 4, 145, 59, 201, 150, 30, 240, 84, 77, 175, 99, 147, 212, 233, 99, 93, 151, 54, 78, 220, 24, 202, 2, 118, 227, 164, 40, 73, 56, 118, 48, 9, 141, 235, 220, 14, 36, 220, 69, 131, 116, 72, 249, 31, 32, 15, 36, 110, 190, 50, 242, 154, 75, 166, 14, 5, 16, 2, 169, 106, 100, 153, 254, 7, 45, 139, 17, 106, 233, 230, 178, 12, 63, 192, 4, 117, 12, 87, 223, 48, 47, 220, 180, 90, 13, 8, 200, 46, 56, 113, 134, 73, 128, 30, 124, 111, 22, 154, 208, 78, 33, 199, 150, 33, 224, 119, 132, 222, 9, 170, 226, 82, 50, 233, 126, 61, 137, 27, 72, 122, 24, 90, 197, 119, 44, 61, 252, 209, 30, 115, 30, 82, 209, 41, 155, 104, 118, 153, 161, 37, 212, 101, 60, 179, 215, 190, 119, 97, 45, 58, 68, 226, 108, 64, 205, 159, 116, 250, 76, 159, 11, 253, 193, 46, 250, 177, 107, 133, 11, 168, 156, 177, 193, 124, 214, 63, 104, 22, 173, 228, 78, 24, 4, 20, 177, 52, 210, 223, 28, 108, 198, 128, 177, 84, 75, 221, 32, 2, 203, 31, 22, 255, 230, 110, 178, 229, 210, 148, 215, 47, 177, 192, 243, 194, 31, 121, 54, 185, 88, 83, 170, 16, 172, 86, 24, 21, 188, 69, 152, 64, 164, 106, 127, 12, 16, 190, 55, 112, 249, 141, 65, 186, 208, 63, 204, 186, 155, 92, 13, 139, 160, 13, 29, 94, 253, 205, 219, 109, 74, 124, 194, 201, 59, 72, 17, 138, 202, 42, 47, 170, 60, 230, 113, 66, 91, 15, 67, 152, 29, 172, 137, 158, 43, 42, 39, 57, 165, 217, 12, 19, 252, 174, 87, 69, 31, 217, 115, 254, 211, 56, 200, 251, 55, 150, 181, 178, 2, 251, 16, 236, 216, 116, 191, 242, 156, 103, 130, 123, 99, 154, 4, 199, 20, 236, 213, 209, 99, 219, 188, 190, 25, 35, 238, 199, 39, 13, 249, 179, 79, 29, 8, 126, 53, 75, 158, 51, 11, 150, 133, 215, 82, 10, 200, 241, 99, 228, 245, 126, 47, 84, 147, 207, 35, 185, 177, 53, 113, 92, 179, 176, 95, 21, 39, 31, 67, 100, 124, 3, 26, 126, 172, 61, 142, 197, 8, 225, 159, 190, 159, 112, 135, 36, 8, 201, 33, 184, 70, 148, 40, 5, 78, 234, 94, 66, 140, 191, 161, 239, 204, 152, 50, 33, 204, 225, 123, 109, 245, 121, 134, 44, 19, 102, 94, 91, 242, 76, 251, 154, 127, 193, 156, 182, 99, 243, 83, 53, 26, 137, 154, 180, 127, 209, 155, 30, 215, 13, 20, 169, 133, 194, 40, 196, 16, 126, 177, 232, 177, 71, 160, 95, 86, 139, 255, 252, 4, 76, 65, 139, 157, 226, 26, 209, 167, 190, 2, 178, 25, 197, 108, 227, 233, 8, 142, 187, 189, 58, 28, 76, 73, 0, 47, 118, 146, 161, 142, 92, 242, 227, 161, 236, 87, 2, 175, 88, 47, 81, 108, 2, 13, 145, 111, 215, 219, 224, 37, 168, 228, 44, 234, 216, 111, 8, 57, 121, 244, 2, 47, 79, 18, 120, 167, 150, 237, 88, 11, 151, 235, 188, 61, 58, 235, 153, 25, 110, 146, 4, 136, 110, 84, 40, 187, 227, 132, 171, 120, 5, 38, 4, 83, 131, 171, 231, 193, 136, 69, 213, 50, 69, 249, 130, 143, 213, 44, 131, 74, 245, 140, 94, 197, 186, 88, 121, 87, 204, 125, 213, 90, 252, 40, 113, 123, 212, 244, 33, 37, 152, 239, 157, 175, 185, 130, 122, 53, 113, 202, 71, 215, 162, 169, 175, 184, 187, 68, 60, 163, 22, 68, 239, 111, 130, 103, 15, 118, 99, 51, 173, 207, 21, 61, 90, 183, 27, 194, 16, 37, 24, 49, 33, 226, 107, 72, 126, 49, 126, 150, 242, 191, 30, 109, 219, 91, 190, 127, 50, 251, 183, 98, 154, 132, 49, 190, 146, 206, 72, 197, 240, 223, 76, 231, 32, 180, 177, 141, 172, 17, 93, 124, 142, 53, 219, 86, 209, 76, 242, 103, 118, 94, 243, 152, 110, 127, 69, 144, 20, 172, 55, 243, 203, 123, 28, 204, 55, 57, 25, 116, 63, 230, 181, 152, 106, 41, 56, 16, 231, 101, 58, 58, 140, 60, 137, 24, 68, 94, 134, 248, 197, 16, 25, 178, 116, 204, 2, 60, 19, 43, 88, 138, 136, 154, 36, 238, 35, 11, 202, 80, 71, 150, 177, 211, 232, 231, 219, 241, 165, 77, 35, 83, 81, 222, 23, 123, 89, 135, 48, 21, 195, 148, 127, 214, 25, 72, 104, 222, 120, 166, 23, 209, 46, 64, 138, 51, 114, 219, 13, 213, 207, 95, 36, 60, 79, 203, 105, 253, 196, 252, 80, 13, 206, 185, 148, 96, 60, 233, 117, 191, 110, 66, 223, 146, 117, 29, 239, 63, 213, 207, 26, 245, 236, 163, 240, 218, 245, 101, 176, 186, 45, 84, 77, 136, 11, 83, 52, 184, 230, 41, 16, 209, 154, 82, 84, 21, 186, 213, 159, 246, 191, 152, 46, 41, 15, 60, 81, 55, 217, 214, 101, 0, 6, 143, 48, 139, 223, 191, 144, 140, 65, 44, 211, 92, 43, 174, 29, 157, 157, 28, 80, 33, 145, 117, 108, 52, 80, 17, 219, 134, 117, 178, 165, 49, 50, 28, 189, 105, 100, 166, 192, 108, 209, 243, 160, 49, 188, 154, 1, 69, 248, 98, 212, 98, 226, 250, 242, 47, 137, 68, 65, 250, 210, 127, 19, 50, 128, 120, 78, 73, 56, 188, 15, 213, 187, 193, 121, 62, 88, 155, 187, 128, 213, 226, 207, 201, 155, 197, 217, 141, 224, 84, 84, 9, 71, 252, 246, 211, 166, 252, 214, 134, 58, 68, 192, 147, 207, 57, 216, 38, 230, 254, 158, 223, 32, 193, 75, 240, 64, 80, 75, 213, 192, 210, 235, 202, 163, 62, 21, 89, 203, 136, 185, 118, 128, 176, 195, 92, 37, 163, 193, 116, 92, 95, 3, 172, 173, 154, 135, 61, 21, 31, 31, 33, 89, 175, 18, 171, 133, 222, 185, 26, 239, 218, 104, 88, 83, 153, 164, 244, 60, 15, 48, 204, 12, 207, 102, 89, 144, 74, 67, 84, 31, 110, 86, 166, 6, 78, 69, 40, 6, 15, 224, 99, 115, 28, 90, 172, 240, 49, 26, 79, 192, 229, 206, 79, 16, 125, 247, 125, 113, 39, 191, 15, 11, 109, 79, 13, 90, 234, 54, 1, 241, 6, 201, 185, 249, 107, 48, 50, 18, 159, 43, 234, 87, 7, 73, 172, 170, 177, 166, 121, 145, 142, 178, 196, 105, 159, 158, 148, 113, 119, 50, 167, 106, 10, 105, 27, 44, 58, 140, 255, 24, 174, 85, 221, 197, 185, 169, 249, 152, 173, 137, 87, 253, 65, 167, 183, 78, 203, 7, 136, 45, 170, 74, 244, 56, 193, 45, 207, 212, 25, 70, 147, 201, 208, 56, 212, 45, 158, 104, 208, 228, 16, 45, 44, 116, 47, 45, 195, 129, 108, 249, 236, 5, 145, 234, 178, 208, 29, 154, 177, 236, 224, 201, 240, 27, 239, 135, 116, 160, 141, 101, 55, 6, 147, 0, 185, 189, 148, 89, 3, 62, 36, 156, 73, 81, 219, 133, 73, 12, 124, 70, 252, 1, 192, 32, 16, 91, 155, 4, 59, 216, 135, 202, 198, 7, 162, 110, 38, 150, 67, 43, 25, 212, 184, 34, 9, 157, 96, 223, 155, 171, 195, 71, 50, 194, 15, 235, 188, 11, 115, 213, 88, 112, 126, 150, 119, 102, 194, 251, 210, 235, 194, 246, 2, 219, 123, 214, 190, 121, 76, 201, 106, 125, 238, 140, 63, 143, 60, 247, 238, 10, 55, 37, 123, 124, 161, 21, 95, 84, 102, 216, 61, 152, 152, 171, 218, 89, 194, 78, 8, 122, 145, 35, 103, 173, 65, 78, 63, 48, 185, 107, 46, 24, 158, 10, 23, 43, 114, 169, 194, 251, 132, 105, 86, 181, 239, 195, 50, 32, 149, 42, 113, 251, 42, 19, 114, 70, 72, 228, 40, 61, 52, 77, 116, 208, 175, 13, 225, 17, 110, 232, 132, 143, 169, 180, 31, 19, 217, 202, 100, 73, 181, 116, 110, 194, 186, 50, 85, 33, 76, 230, 8, 21, 73, 235, 98, 189, 230, 151, 120, 106, 225, 120, 150, 242, 16, 58, 67, 104, 35, 88, 50, 247, 163, 105, 231, 182, 83, 149, 179, 35, 77, 8, 211, 73, 192, 88, 241, 141, 7, 35, 107, 31, 48, 250, 52, 230, 72, 87, 158, 71, 168, 99, 82, 36, 154, 25, 204, 92, 172, 229, 250, 206, 77, 57, 175, 225, 81, 244, 242, 103, 64, 217, 146, 80, 41, 168, 59, 32, 179, 157, 224, 47, 232, 207, 74, 229, 126, 246, 140, 203, 69, 138, 85, 213, 193, 147, 12, 111, 98, 210, 204, 148, 105, 219, 188, 8, 93, 134, 1, 181, 36, 94, 64, 15, 87, 131, 124, 66, 17, 184, 119, 131, 77, 165, 192, 166, 13, 90, 90, 214, 74, 219, 38, 63, 0, 219, 53, 42, 190, 213, 140, 249, 95, 140, 232, 61, 204, 54, 143, 200, 8, 211, 58, 141, 225, 214, 68, 87, 145, 209, 33, 63, 180, 116, 78, 166, 105, 164, 1, 4, 104, 190, 152, 20, 183, 243, 69, 91, 20, 168, 138, 180, 34, 195, 125, 44, 226, 205, 199, 83, 242, 181, 152, 46, 152, 225, 38, 167, 50, 225, 127, 205, 181, 142, 15, 196, 222, 231, 43, 76, 34, 5, 248, 71, 78, 126, 22, 139, 70, 214, 187, 183, 109, 10, 201, 242, 222, 214, 179, 63, 233, 94, 113, 91, 226, 27, 126, 90, 102, 4, 249, 203, 42, 214, 192, 39, 120, 66, 203, 252, 67, 129, 129, 169, 151, 21, 2, 136, 211, 76, 33, 204, 212, 76, 45, 204, 117, 215, 247, 116, 51, 235, 1, 187, 201, 26, 58, 73, 19, 163, 124, 62, 137, 62, 48, 83, 126, 45, 194, 23, 248, 91, 242, 182, 157, 63, 73, 231, 122, 36, 161, 247, 75, 63, 109, 42, 243, 243, 45, 114, 119, 224, 170, 52, 153, 119, 184, 9, 66, 11, 6, 171, 197, 139, 250, 145, 114, 26, 240, 106, 98, 6, 58, 117, 240, 115, 120, 96, 26, 47, 191, 101, 121, 45, 168, 24, 177, 168, 105, 37, 204, 18, 199, 164, 204, 238, 200, 132, 62, 190, 50, 89, 149, 244, 244, 133, 67, 33, 70, 100, 58, 246, 205, 92, 79, 154, 53, 243, 77, 122, 198, 110, 108, 79, 70, 67, 77, 166, 151, 62, 147, 110, 179, 42, 236, 58, 162, 217, 243, 179, 42, 162, 244, 73, 66, 51, 145, 28, 86, 210, 39, 131, 221, 106, 224, 154, 10, 99, 149, 187, 132, 198, 226, 50, 65, 151, 229, 138, 239, 187, 62, 22, 217, 161, 149, 128, 192, 126, 57, 229, 6, 200, 143, 178, 215, 216, 29, 201, 19, 189, 125, 107, 229, 205, 139, 126, 0, 255, 146, 251, 63, 110, 115, 95, 156, 233, 153, 132, 2, 78, 136, 212, 63, 197, 186, 33, 102, 246, 64, 110, 64, 229, 252, 146, 121, 136, 235, 44, 97, 150, 190, 224, 28, 179, 59, 72, 20, 237, 94, 138, 72, 124, 214, 186, 119, 14, 186, 121, 75, 238, 242, 29, 26, 9, 188, 132, 98, 21, 22, 234, 16, 59, 25, 201, 32, 27, 68, 14, 209, 206, 137, 45, 214, 178, 241, 194, 35, 43, 44, 99, 206, 26, 6, 140, 98, 94, 61, 176, 119, 221, 191, 18, 16, 10, 172, 105, 39, 15, 233, 24, 28, 25, 9, 136, 233, 180, 234, 108, 1, 190, 115, 222, 211, 72, 8, 59, 39, 198, 154, 109, 174, 166, 152, 206, 62, 154, 191, 146, 189, 6, 158, 194, 188, 144, 24, 185, 61, 123, 0, 90, 203, 93, 199, 68, 150, 4, 178, 114, 87, 50, 114, 47, 219, 5, 222, 89, 33, 217, 223, 11, 66, 207, 209, 204, 180, 98, 134, 71, 53, 22, 245, 194, 214, 42, 236, 121, 135, 89, 48, 165, 170, 232, 136, 254, 75, 1, 6, 1, 181, 252, 237, 180, 9, 186, 230, 186, 47, 107, 41, 5, 212, 48, 184, 24, 123, 42, 146, 56, 53, 252, 17, 136, 249, 52, 202, 88, 157, 193, 28, 62, 29, 190, 55, 194, 51, 73, 27, 115, 82, 157, 71, 227, 40, 108, 130, 125, 69, 31, 158, 116, 141, 26, 132, 167, 194, 84, 38, 3, 142, 15, 210, 50, 138, 30, 46, 100, 90, 68, 109, 26, 177, 225, 217, 137, 77, 116, 56, 215, 52, 57, 152, 234, 30, 201, 98, 164, 135, 194, 117, 115, 32, 100, 5, 27, 16, 229, 5, 133, 3, 62, 247, 132, 166, 210, 203, 96, 218, 80, 235, 105, 19, 92, 154, 118, 25, 214, 100, 254, 27, 222, 73, 191, 154, 225, 217, 104, 156, 5, 134, 177, 62, 34, 77, 178, 24, 195, 118, 165, 126, 42, 36, 179, 176, 212, 162, 140, 252, 246, 61, 92, 169, 75, 2, 254, 149, 176, 79, 61, 188, 42, 129, 100, 173, 186, 230, 25, 124, 72, 131, 36, 130, 200, 84, 35, 2, 99, 190, 59, 134, 57, 106, 246, 134, 132, 97, 1, 184, 216, 31, 65, 127, 209, 111, 98, 32, 113, 193, 208, 77, 198, 5, 255, 80, 57, 184, 86, 118, 138, 219, 181, 252, 121, 42, 137, 244, 236, 205, 191, 75, 91, 125, 208, 191, 246, 178, 249, 198, 2, 89, 180, 216, 3, 86, 145, 36, 96, 229, 110, 212, 227, 243, 170, 91, 64, 15, 167, 82, 247, 217, 83, 122, 115, 244, 117, 21, 85, 78, 78, 72, 216, 249, 60, 196, 214, 152, 109, 211, 229, 73, 196, 195, 186, 53, 228, 91, 93, 11, 221, 84, 215, 183, 122, 119, 240, 227, 182, 223, 106, 221, 75, 37, 117, 193, 119, 88, 93, 164, 133, 52, 66, 146, 196, 218, 93, 28, 217, 26, 0, 86, 124, 42, 224, 236, 17, 223, 91, 7, 194, 162, 238, 44, 80, 249, 165, 92, 83, 16, 97, 46, 100, 31, 10, 58, 182, 41, 161, 244, 227, 129, 253, 192, 128, 176, 207, 37, 83, 140, 160, 121, 173, 183, 33, 122, 181, 76, 44, 6, 121, 91, 62, 122, 220, 97, 156, 88, 215, 135, 253, 144, 97, 0, 126, 115, 156, 255, 85, 233, 175, 83, 80, 152, 206, 55, 101, 93, 211, 11, 1, 27, 76, 197, 107, 145, 239, 236, 242, 202, 145, 80, 124, 114, 177, 207, 52, 146, 18, 192, 250, 87, 213, 145, 87, 183, 152, 242, 151, 67, 78, 67, 77, 128, 172, 226, 79, 15, 14, 254, 204, 109, 228, 20, 120, 207, 17, 225, 113, 142, 66, 5, 27, 12, 157, 230, 54, 98, 165, 66, 216, 54, 26, 219, 29, 172, 217, 162, 194, 31, 17, 12, 195, 215, 11, 15, 27, 51, 69, 228, 113, 255, 8, 119, 16, 32, 43, 212, 158, 199, 120, 72, 220, 36, 158, 207, 97, 245, 4, 162, 148, 93, 226, 41, 251, 145, 67, 255, 238, 247, 213, 172, 97, 123, 177, 9, 23, 213, 37, 163, 190, 188, 203, 117, 93, 115, 24, 215, 27, 255, 130, 132, 159, 53, 165, 238, 125, 161, 224, 35, 234, 53, 157, 226, 132, 141, 231, 7, 112, 197, 134, 47, 192, 55, 63, 195, 38, 6, 181, 57, 162, 212, 50, 26, 249, 32, 15, 253, 48, 9, 118, 60, 249, 109, 123, 21, 82, 72, 122, 89, 170, 170, 152, 182, 97, 71, 241, 179, 84, 236, 90, 226, 153, 187, 85, 43, 70, 35, 106, 84, 30, 9, 106, 82, 139, 68, 121, 246, 184, 148, 72, 94, 206, 236, 1, 5, 147, 1, 119, 213, 43, 42, 2, 47, 30, 183, 84, 63, 142, 61, 238, 251, 156, 221, 235, 73, 78, 112, 233, 28, 238, 37, 42, 227, 7, 100, 125, 221, 142, 53, 220, 208, 117, 214, 243, 132, 113, 34, 240, 116, 53, 103, 45, 106, 248, 20, 120, 38, 192, 37, 152, 71, 21, 193, 72, 57, 27, 24, 58, 196, 72, 247, 249, 222, 91, 155, 94, 178, 86, 153, 227, 185, 139, 210, 97, 55, 122, 232, 187, 47, 223, 103, 230, 255, 64, 148, 90, 207, 40, 110, 103, 110, 114, 229, 66, 255, 54, 45, 13, 105, 147, 104, 2, 243, 129, 191, 205, 55, 82, 53, 116, 49, 237, 232, 218, 47, 77, 92, 40, 37, 217, 72, 224, 14, 127, 53, 73, 35, 18, 223, 186, 106, 217, 112, 31, 111, 169, 252, 115, 233, 83, 21, 250, 229, 6, 177, 132, 174, 142, 229, 149, 113, 216, 25, 158, 241, 34, 155, 9, 99, 21, 128, 84, 49, 108, 199, 64, 124, 208, 199, 211, 16, 198, 215, 237, 227, 197, 69, 51, 90, 246, 153, 60, 62, 255, 177, 220, 178, 164, 19, 205, 147, 183, 246, 47, 23, 219, 237, 19, 228, 149, 42, 6, 65, 44, 140, 118, 80, 176, 119, 158, 89, 141, 102, 210, 46, 174, 104, 2, 127, 101, 67, 189, 213, 170, 160, 218, 70, 30, 94, 118, 203, 136, 222, 156, 232, 241, 70, 31, 95, 238, 180, 228, 236, 238, 70, 237, 139, 242, 169, 74, 161, 72, 4, 61, 103, 202, 96, 36, 20, 224, 157, 51, 236, 24, 69, 249, 42, 32, 89, 213, 34, 101, 178, 255, 141, 163, 115, 50, 216, 105, 249, 230, 41, 70, 135, 165, 250, 69, 62, 130, 51, 5, 102, 98, 10, 235, 149, 114, 34, 153, 161, 220, 163, 200, 121, 29, 143, 28, 132, 163, 147, 192, 8, 16, 113, 180, 178, 8, 177, 79, 173, 100, 182, 20, 217, 184, 230, 246, 168, 25, 143, 187, 121, 244, 255, 186, 64, 117, 134, 116, 136, 230, 162, 194, 82, 240, 164, 89, 195, 52, 30, 93, 186, 69, 110, 114, 47, 202, 9, 82, 54, 159, 174, 195, 185, 231, 112, 105, 183, 223, 123, 171, 50, 236, 84, 147, 68, 63, 188, 254, 185, 221, 102, 218, 248, 80, 232, 216, 211, 200, 67, 212, 55, 121, 136, 150, 230, 101, 85, 157, 244, 196, 98, 214, 190, 41, 130, 12, 185, 62, 169, 236, 236, 59, 180, 128, 137, 76, 80, 238, 94, 199, 51, 156, 194, 128, 171, 241, 78, 158, 178, 181, 154, 48, 146, 10, 10, 218, 244, 59, 175, 216, 225, 94, 63, 47, 223, 131, 165, 222, 53, 29, 61, 119, 78, 112, 228, 20, 167, 83, 61, 78, 118, 227, 140, 249, 133, 169, 28, 145, 233, 229, 202, 120, 153, 62, 149, 203, 246, 67, 238, 203, 117, 138, 22, 85, 75, 135, 8, 2, 193, 202, 174, 149, 214, 107, 209, 130, 149, 255, 233, 211, 94, 220, 223, 46, 80, 60, 179, 112, 96, 252, 150, 233, 252, 124, 143, 231, 159, 58, 128, 104, 195, 16, 10, 48, 208, 220, 53, 178, 239, 154, 156, 138, 0, 61, 78, 9, 125, 173, 38, 217, 17, 31, 92, 193, 19, 69, 8, 206, 173, 171, 143, 22, 209, 31, 76, 167, 22, 168, 130, 137, 33, 64, 178, 190, 129, 216, 152, 23, 188, 210, 167, 134, 1, 93, 233, 55, 172, 170, 148, 21, 146, 77, 1, 33, 82, 130, 129, 22, 157, 225, 91, 196, 162, 205, 185, 239, 58, 95, 131, 84, 201, 7, 221, 121, 217, 242, 129, 58, 178, 103, 229, 81, 175, 105, 217, 90, 172, 119, 139, 222, 102, 180, 188, 99, 186, 207, 179, 33, 77, 107, 2, 216, 238, 198, 91, 193, 241, 235, 241, 55, 87, 99, 61, 240, 57, 103, 132, 35, 148, 25, 60, 129, 251, 246, 101, 180, 22, 100, 64, 14, 31, 205, 112, 254, 42, 42, 146, 86, 245, 14, 176, 108, 168, 160, 6, 185, 125, 208, 156, 181, 195, 121, 83, 102, 231, 166, 215, 50, 3, 232, 246, 238, 152, 124, 166, 238, 230, 30, 211, 146, 169, 147, 39, 196, 168, 130, 181, 201, 4, 0, 55, 130, 220, 142, 13, 43, 113, 26, 56, 110, 55, 120, 109, 72, 125, 223, 218, 64, 247, 132, 113, 29, 140, 173, 154, 222, 240, 27, 129, 34, 87, 125, 0, 105, 62, 48, 45, 89, 80, 99, 119, 98, 115, 184, 203, 129, 82, 128, 65, 37, 77, 181, 65, 67, 255, 27, 149, 250, 91, 51, 28, 140, 155, 107, 149, 245, 112, 42, 20, 190, 135, 41, 179, 128, 190, 145, 42, 255, 105, 230, 35, 237, 250, 139, 125, 215, 128, 237, 208, 12, 30, 72, 229, 246, 200, 96, 52, 243, 19, 93, 17, 187, 17, 123, 251, 111, 244, 219, 25, 43, 206, 214, 39, 91, 138, 121, 37, 83, 141, 11, 214, 230, 239, 168, 243, 61, 135, 134, 146, 9, 86, 134, 172, 39, 157, 249, 91, 241, 127, 193, 57, 139, 215, 161, 30, 226, 144, 226, 250, 33, 130, 128, 121, 15, 251, 255, 150, 188, 206, 71, 122, 63, 196, 2, 103, 188, 81, 112, 186, 174, 30, 184, 64, 219, 82, 178, 244, 64, 0, 165, 188, 137, 142, 28, 68, 16, 178, 121, 138, 104, 202, 119, 68, 119, 91, 235, 53, 208, 28, 7, 114, 146, 195, 131, 205, 192, 12, 125, 101, 255, 98, 49, 95, 84, 33, 235, 249, 27, 34, 242, 217, 56, 2, 36, 161, 53, 127, 240, 214, 170, 176, 55, 41, 56, 180, 247, 143, 20, 244, 62, 126, 35, 95, 41, 220, 167, 131, 191, 103, 66, 101, 20, 11, 196, 64, 93, 131, 196, 80, 231, 87, 202, 94, 125, 92, 14, 79, 215, 217, 179, 27, 193, 169, 124, 126, 153, 181, 16, 34, 139, 96, 79, 247, 125, 157, 103, 249, 200, 19, 224, 121, 215, 156, 18, 224, 105, 69, 247, 140, 238, 192, 181, 129, 114, 172, 83, 172, 222, 142, 230, 125, 128, 251, 73, 134, 20, 43, 69, 112, 1, 13, 147, 23, 141, 46, 126, 33, 73, 156, 58, 68, 27, 201, 178, 69, 2, 102, 137, 150, 62, 82, 51, 248, 31, 71, 21, 148, 221, 176, 136, 123, 1, 7, 78, 66, 85, 7, 139, 192, 188, 254, 234, 77, 68, 230, 165, 79, 206, 245, 222, 49, 186, 70, 105, 235, 151, 234, 221, 221, 253, 92, 241, 217, 217, 66, 14, 185, 173, 56, 170, 176, 184, 215, 63, 123, 253, 236, 97, 221, 81, 177, 232, 50, 24, 230, 112, 240, 109, 159, 214, 64, 144, 50, 85, 20, 83, 55, 148, 22, 33, 229, 68, 34, 177, 190, 201, 219, 34, 15, 185, 235, 70, 7, 201, 195, 186, 116, 53, 102, 247, 51, 108, 130, 67, 137, 20, 58, 98, 166, 226, 231, 22, 244, 70, 149, 163, 149, 52, 93, 120, 51, 58, 109, 12, 249, 189, 32, 27, 195, 67, 10, 173, 123, 240, 152, 57, 207, 134, 214, 57, 237, 107, 79, 197, 214, 148, 184, 91, 130, 233, 212, 206, 143, 177, 231, 95, 230, 24, 116, 29, 18, 226, 172, 215, 68, 109, 230, 224, 211, 84, 88, 60, 118, 42, 127, 105, 250, 131, 48, 176, 42, 146, 145, 3, 186, 91, 36, 247, 218, 155, 30, 90, 1, 16, 88, 114, 61, 187, 250, 197, 92, 172, 119, 87, 250, 214, 22, 77, 222, 51, 206, 236, 88, 225, 90, 186, 200, 156, 79, 152, 231, 16, 229, 67, 211, 52, 191, 61, 233, 122, 100, 236, 43, 39, 251, 58, 156, 155, 246, 99, 144, 145, 231, 253, 43, 207, 186, 162, 138, 56, 165, 239, 247, 174, 200, 142, 51, 171, 173, 193, 34, 108, 157, 165, 211, 53, 226, 55, 19, 242, 1, 204, 96, 54, 119, 66, 157, 93, 64, 30, 20, 38, 49, 98, 153, 55, 62, 170, 243, 226, 144, 215, 69, 235, 145, 168, 89, 27, 117, 69, 153, 106, 202, 22, 160, 93, 170, 15, 141, 14, 45, 97, 216, 26, 93, 78, 185, 127, 51, 170, 54, 139, 76, 112, 20, 195, 172, 152, 107, 62, 135, 170, 85, 122, 213, 204, 194, 120, 214, 179, 140, 69, 102, 153, 179, 202, 44, 234, 68, 107, 102, 74, 130, 169, 147, 72, 48, 107, 17, 3, 143, 163, 197, 122, 129, 100, 29, 227, 120, 179, 175, 53, 59, 173, 107, 114, 61, 185, 231, 130, 46, 92, 57, 212, 78, 48, 120, 46, 131, 31, 138, 219, 36, 235, 25, 17, 64, 243, 125, 114, 61, 227, 33, 246, 104, 107, 80, 105, 30, 45, 56, 38, 1, 200, 43, 179, 36, 135, 39, 222, 166, 52, 137, 109, 247, 210, 103, 148, 45, 79, 6, 186, 214, 247, 96, 145, 199, 58, 112, 173, 227, 3, 217, 167, 114, 182, 20, 208, 53, 188, 133, 158, 69, 98, 6, 211, 102, 187, 121, 67, 16, 64, 213, 255, 72, 16, 255, 238, 222, 68, 126, 229, 138, 179, 130, 34, 240, 132, 26, 189, 236, 13, 250, 56, 17, 20, 114, 34, 127, 248, 42, 202, 234, 75, 181, 50, 255, 241, 190, 11, 171, 60, 109, 242, 196, 228, 231, 142, 230, 234, 59, 134, 148, 138, 29, 15, 135, 236, 53, 128, 63, 15, 26, 151, 85, 184, 214, 198, 136, 234, 115, 249, 237, 95, 108, 173, 43, 164, 81, 136, 244, 29, 152, 156, 45, 226, 44, 6, 120, 128, 221, 152, 215, 244, 190, 32, 122, 230, 39, 86, 48, 155, 2, 153, 41, 154, 177, 222, 52, 206, 75, 100, 27, 201, 88, 245, 70, 81, 144, 53, 245, 186, 189, 244, 230, 49, 194, 242, 71, 244, 16, 157, 21, 154, 108, 193, 134, 229, 136, 68, 18, 147, 30, 63, 79, 196, 63, 213, 124, 74, 105, 87, 24, 68, 209, 41, 128, 210, 60, 139, 106, 79, 87, 80, 101, 217, 17, 8, 167, 255, 174, 69, 237, 197, 38, 96, 51, 174, 48, 150, 183, 110, 150, 27, 192, 151, 227, 54, 154, 222, 218, 42, 243, 29, 159, 106, 143, 85, 63, 112, 177, 218, 77, 234, 249, 243, 114, 239, 179, 4, 35, 29, 101, 172, 236, 129, 45, 49, 89, 104, 142, 239, 152, 47, 79, 218, 131, 162, 181, 63, 235, 174, 98, 15, 118, 218, 6, 59, 117, 166, 1, 253, 175, 94, 196, 32, 62, 90, 13, 245, 42, 124, 213, 52, 137, 8, 236, 143, 125, 162, 243, 232, 88, 9, 101, 53, 134, 226, 74, 10, 235, 176, 252, 183, 5, 134, 156, 179, 224, 210, 41, 176, 130, 17, 200, 211, 43, 49, 238, 67, 129, 89, 24, 238, 98, 40, 193, 46, 15, 181, 68, 237, 24, 160, 0, 178, 162, 223, 64, 243, 96, 232, 146, 13, 46, 95, 126, 95, 211, 21, 137, 120, 131, 67, 151, 32, 80, 62, 137, 33, 198, 125, 131, 126, 162, 190, 110, 66, 228, 166, 159, 11, 239, 84, 89, 147, 165, 248, 142, 173, 184, 209, 41, 222, 59, 116, 232, 3, 221, 165, 167, 84, 169, 240, 48, 7, 118, 175, 157, 143, 229, 241, 153, 11, 219, 13, 156, 37, 114, 74, 29, 64, 233, 133, 195, 94, 192, 53, 173, 174, 189, 105, 181, 214, 165, 64, 165, 5, 169, 207, 84, 94, 14, 15, 103, 82, 94, 222, 217, 144, 233, 192, 240, 231, 57, 193, 5, 67, 105, 169, 157, 243, 23, 239, 77, 97, 247, 36, 179, 96, 172, 152, 172, 230, 194, 49, 46, 159, 175, 192, 198, 75, 205, 112, 16, 249, 223, 248, 150, 168, 39, 146, 34, 141, 183, 105, 74, 222, 71, 75, 166, 57, 14, 4, 48, 55, 106, 206, 14, 174, 139, 60, 103, 154, 1, 184, 219, 53, 67, 17, 155, 42, 207, 6, 203, 99, 227, 255, 28, 28, 54, 59, 59, 173, 68, 8, 47, 208, 24, 176, 70, 123, 218, 116, 69, 91, 79, 237, 103, 206, 211, 56, 112, 184, 91, 96, 28, 235, 136, 149, 156, 232, 242, 215, 223, 190, 6, 183, 124, 126, 25, 212, 52, 251, 176, 58, 94, 125, 244, 117, 224, 74, 172, 245, 103, 249, 177, 130, 166, 215, 240, 130, 67, 27, 40, 61, 88, 252, 14, 181, 252, 219, 25, 178, 149, 67, 93, 233, 132, 216, 24, 176, 9, 71, 100, 98, 36, 121, 242, 17, 127, 14, 183, 1, 21, 170, 6, 86, 227, 246, 176, 194, 86, 4, 198, 88, 145, 143, 4, 119, 81, 240, 161, 236, 127, 163, 193, 193, 30, 141, 120, 64, 237, 180, 80, 164, 252, 125, 19, 25, 19, 106, 100, 171, 78, 68, 171, 219, 216, 51, 198, 253, 43, 234, 197, 207, 28, 77, 155, 145, 152, 248, 101, 34, 138, 3, 70, 135, 39, 251, 207, 206, 81, 188, 248, 38, 173, 1, 58, 232, 209, 204, 204, 21, 150, 102, 112, 163, 221, 244, 73, 198, 143, 244, 169, 98, 248, 190, 219, 72, 188, 224, 149, 239, 150, 70, 49, 203, 81, 231, 7, 169, 216, 89, 2, 147, 247, 39, 255, 15, 15, 194, 37, 21, 36, 191, 235, 192, 113, 157, 234, 122, 188, 225, 127, 92, 211, 169, 12, 110, 157, 183, 194, 200, 135, 159, 247, 82, 31, 152, 126, 235, 202, 83, 129, 61, 3, 12, 152, 54, 143, 217, 197, 183, 240, 42, 108, 243, 167, 210, 203, 245, 98, 72, 1, 167, 36, 194, 48, 21, 51, 252, 118, 194, 225, 120, 138, 49, 84, 105, 142, 217, 154, 18, 163, 69, 252, 228, 57, 32, 60, 219, 113, 30, 226, 90, 137, 124, 62, 33, 209, 54, 172, 153, 179, 226, 77, 150, 95, 247, 83, 70, 212, 173, 52, 74, 2, 38, 101, 37, 119, 31, 191, 95, 127, 193, 103, 186, 196, 183, 64, 183, 159, 14, 77, 77, 23, 53, 69, 210, 79, 137, 121, 95, 154, 78, 223, 163, 220, 126, 59, 197, 189, 224, 116, 239, 166, 54, 44, 132, 32, 108, 208, 81, 50, 83, 115, 82, 114, 225, 127, 203, 233, 23, 19, 123, 73, 243, 68, 210, 61, 164, 8, 108, 57, 245, 211, 124, 134, 15, 38, 142, 177, 232, 84, 204, 132, 251, 194, 26, 208, 73, 122, 91, 147, 147, 157, 151, 10, 5, 60, 205, 211, 128, 15, 241, 29, 21, 135, 179, 232, 38, 189, 163, 172, 93, 150, 235, 54, 141, 32, 186, 86, 185, 51, 252, 66, 208, 147, 246, 74, 79, 197, 162, 250, 163, 246, 27, 209, 129, 48, 187, 157, 223, 214, 36, 18, 235, 64, 6, 145, 45, 77, 218, 131, 184, 175, 97, 25, 68, 186, 118, 230, 135, 3, 8, 38, 242, 53, 12, 145, 116, 177, 143, 101, 38, 101, 2, 202, 222, 185, 244, 235, 26, 246, 221, 206, 154, 203, 56, 109, 246, 49, 51, 49, 62, 24, 75, 101, 64, 192, 22, 117, 220, 140, 193, 184, 11, 127, 234, 52, 71, 18, 197, 25, 162, 221, 44, 242, 0, 201, 80, 52, 254, 69, 35, 66, 18, 49, 129, 53, 247, 142, 90, 80, 39, 133, 229, 184, 169, 181, 39, 37, 60, 113, 41, 19, 253, 94, 193, 85, 47, 18, 218, 38, 72, 98, 87, 48, 8, 41, 140, 64, 171, 198, 58, 188, 34, 208, 37, 243, 74, 173, 96, 114, 27, 28, 67, 224, 5, 195, 101, 255, 18, 89, 32, 74, 248, 239, 174, 74, 229, 143, 185, 113, 148, 128, 190, 113, 86, 187, 46, 174, 23, 89, 229, 222, 160, 63, 168, 105, 160, 142, 206, 162, 230, 94, 228, 6, 168, 203, 151, 60, 89, 209, 227, 125, 127, 208, 81, 153, 162, 196, 131, 150, 154, 197, 30, 143, 245, 233, 186, 91, 107, 17, 98, 74, 94, 142, 20, 253, 0, 143, 57, 231, 123, 197, 79, 222, 207, 158, 199, 12, 126, 237, 79, 197, 17, 214, 114, 51, 234, 134, 138, 158, 173, 22, 227, 189, 184, 233, 208, 153, 159, 144, 129, 44, 113, 35, 196, 140, 218, 44, 233, 47, 198, 107, 219, 22, 48, 232, 241, 40, 70, 219, 219, 114, 77, 204, 71, 123, 234, 208, 246, 30, 199, 102, 0, 116, 19, 255, 67, 124, 215, 237, 25, 102, 207, 43, 93, 11, 84, 216, 21, 243, 102, 207, 255, 223, 178, 15, 202, 245, 43, 238, 117, 86, 132, 174, 150, 105, 230, 176, 153, 204, 194, 205, 17, 19, 45, 214, 186, 88, 19, 170, 161, 163, 220, 71, 214, 53, 99, 128, 18, 191, 200, 25, 50, 171, 5, 58, 179, 79, 161, 116, 45, 22, 46, 79, 229, 61, 105, 27, 152, 32, 142, 100, 49, 250, 201, 16, 110, 194, 57, 192, 191, 91, 155, 255, 122, 172, 197, 96, 96, 195, 164, 59, 31, 147, 250, 226, 241, 174, 6, 242, 75, 235, 225, 159, 231, 219, 61, 171, 237, 126, 13, 144, 233, 67, 246, 165, 174, 160, 72, 215, 91, 65, 7, 171, 121, 207, 1, 239, 80, 210, 79, 87, 84, 75, 225, 207, 15, 230, 41, 215, 75, 105, 47, 10, 170, 115, 226, 94, 250, 219, 164, 215, 188, 106, 100, 196, 69, 24, 204, 49, 78, 186, 75, 231, 133, 13, 68, 19, 149, 101, 255, 156, 12, 140, 44, 148, 88, 138, 208, 130, 194, 243, 121, 74, 55, 244, 223, 65, 44, 81, 219, 100, 155, 83, 47, 122, 61, 134, 187, 41, 163, 38, 235, 0, 154, 51, 27, 168, 122, 139, 165, 44, 56, 235, 14, 88, 158, 47, 17, 113, 6, 115, 244, 167, 118, 67, 39, 67, 94, 126, 213, 181, 187, 110, 201, 86, 186, 96, 28, 216, 84, 84, 244, 222, 8, 177, 147, 89, 144, 218, 22, 142, 93, 206, 32, 167, 103, 185, 169, 71, 25, 87, 20, 137, 244, 74, 225, 211, 69, 176, 240, 231, 164, 75, 254, 223, 196, 18, 242, 217, 104, 69, 143, 180, 30, 200, 103, 62, 108, 21, 170, 23, 182, 174, 159, 1, 48, 34, 119, 87, 218, 188, 174, 195, 227, 210, 199, 247, 113, 125, 140, 115, 222, 63, 51, 11, 226, 45, 97, 237, 77, 78, 75, 215, 220, 17, 194, 160, 137, 114, 27, 6, 232, 77, 122, 225, 110, 208, 112, 57, 22, 10, 29, 234, 229, 85, 100, 194, 114, 160, 117, 244, 131, 110, 42, 206, 198, 96, 39, 162, 47, 245, 45, 202, 209, 23, 182, 81, 76, 72, 115, 118, 160, 137, 132, 244, 78, 11, 89, 74, 239, 247, 112, 203, 161, 222, 168, 182, 223, 170, 132, 51, 180, 106, 47, 102, 50, 252, 44, 15, 42, 17, 97, 251, 226, 127, 232, 80, 146, 8, 38, 80, 0, 123, 255, 241, 53, 130, 61, 228, 122, 164, 42, 4, 71, 120, 247, 158, 54, 185, 91, 112, 96, 220, 94, 17, 34, 225, 133, 136, 208, 8, 1, 67, 253, 254, 25, 190, 208, 200, 21, 10, 45, 84, 210, 138, 130, 218, 24, 17, 181, 123, 132, 70, 67, 196, 3, 241, 49, 243, 102, 248, 234, 236, 190, 173, 147, 187, 162, 218, 82, 103, 77, 194, 233, 98, 125, 90, 235, 182, 60, 61, 156, 143, 60, 183, 4, 83, 22, 61, 141, 149, 68, 249, 186, 229, 2, 180, 54, 121, 6, 94, 56, 248, 0, 86, 237, 113, 63, 197, 84, 213, 187, 251, 136, 64, 97, 168, 163, 229, 147, 137, 54, 148, 68, 1, 92, 42, 204, 153, 215, 62, 154, 149, 99, 71, 133, 10, 189, 152, 15, 45, 198, 224, 199, 33, 182, 52, 91, 144, 71, 197, 221, 223, 92, 64, 112, 250, 147, 182, 151, 70, 227, 3, 202, 243, 236, 54, 174, 107, 83, 220, 167, 8, 192, 114, 185, 174, 248, 89, 192, 141, 209, 192, 184, 156, 182, 84, 63, 50, 244, 250, 45, 178, 13, 232, 36, 149, 93, 41, 83, 34, 25, 126, 95, 203, 254, 190, 254, 65, 49, 249, 36, 233, 213, 91, 239, 67, 116, 150, 48, 239, 7, 21, 131, 11, 117, 202, 44, 117, 90, 101, 120, 203, 4, 224, 108, 152, 253, 144, 105, 20, 94, 101, 159, 70, 48, 91, 25, 76, 187, 194, 42, 239, 255, 13, 192, 64, 241, 44, 250, 220, 5, 148, 254, 181, 80, 177, 136, 144, 115, 176, 82, 172, 6, 29, 197, 98, 112, 98, 221, 79, 98, 244, 246, 34, 112, 206, 80, 47, 84, 122, 175, 64, 75, 229, 187, 5, 182, 46, 158, 210, 22, 26, 181, 172, 214, 120, 12, 185, 220, 43, 29, 55, 251, 25, 120, 194, 142, 71, 181, 25, 92, 213, 166, 142, 107, 189, 228, 44, 98, 180, 8, 174, 120, 116, 210, 178, 231, 109, 48, 156, 80, 5, 68, 30, 15, 7, 249, 107, 204, 151, 30, 219, 230, 15, 123, 41, 38, 157, 165, 233, 255, 4, 30, 201, 247, 134, 202, 67, 126, 29, 40, 13, 207, 51, 8, 97, 23, 26, 151, 152, 18, 166, 110, 218, 32, 134, 72, 127, 231, 123, 98, 175, 54, 20, 169, 225, 124, 209, 237, 200, 126, 100, 253, 170, 223, 217, 6, 14, 174, 186, 192, 160, 95, 99, 119, 100, 202, 73, 105, 223, 154, 129, 22, 177, 181, 43, 171, 197, 131, 64, 20, 54, 226, 90, 71, 250, 188, 149, 75, 84, 60, 104, 132, 133, 25, 185, 54, 126, 153, 17, 43, 113, 136, 82, 58, 151, 0, 164, 195, 229, 140, 43, 65, 252, 39, 43, 145, 134, 136, 170, 140, 9, 163, 182, 192, 214, 205, 241, 79, 164, 202, 87, 146, 222, 105, 4, 111, 131, 227, 192, 24, 226, 88, 214, 201, 75, 241, 35, 50, 244, 203, 142, 248, 129, 4, 239, 186, 210, 181, 47, 146, 100, 126, 33, 92, 104, 18, 21, 163, 78, 229, 23, 45, 10, 188, 228, 235, 5, 71, 87, 103, 124, 241, 104, 185, 147, 27, 87, 33, 124, 68, 129, 253, 96, 150, 159, 59, 168, 231, 63, 124, 28, 42, 220, 189, 114, 129, 157, 239, 244, 207, 219, 59, 201, 41, 13, 7, 0, 217, 28, 146, 180, 236, 90, 158, 142, 215, 213, 95, 137, 191, 158, 118, 28, 59, 204, 166, 15, 16, 151, 19, 73, 231, 180, 166, 224, 202, 24, 109, 94, 254, 39, 43, 206, 53, 15, 108, 88, 218, 88, 255, 194, 30, 53, 38, 82, 242, 42, 106, 201, 135, 175, 158, 60, 211, 108, 68, 30, 196, 245, 208, 177, 33, 116, 160, 233, 132, 79, 22, 119, 218, 166, 142, 215, 177, 176, 90, 178, 117, 18, 223, 254, 158, 80, 149, 53, 241, 60, 90, 169, 198, 150, 98, 125, 41, 247, 81, 58, 183, 206, 172, 131, 176, 163, 87, 203, 247, 208, 157, 194, 207, 192, 113, 147, 221, 195, 184, 194, 128, 103, 196, 69, 245, 220, 142, 195, 119, 232, 206, 90, 232, 161, 121, 138, 228, 244, 58, 16, 157, 20, 69, 51, 203, 199, 42, 52, 115, 78, 137, 94, 182, 174, 149, 140, 180, 10, 171, 167, 174, 108, 243, 57, 128, 210, 51, 112, 214, 204, 67, 153, 54, 121, 216, 247, 72, 150, 59, 214, 0, 99, 153, 247, 175, 114, 121, 239, 92, 119, 60, 201, 178, 239, 41, 217, 76, 171, 41, 4, 169, 47, 192, 46, 81, 169, 200, 160, 225, 96, 237, 31, 247, 234, 128, 66, 25, 175, 234, 41, 200, 200, 7, 124, 43, 20, 218, 10, 200, 51, 179, 88, 3, 196, 134, 212, 55, 17, 219, 184, 28, 202, 227, 106, 118, 169, 84, 208, 43, 45, 21, 53, 133, 199, 140, 239, 201, 37, 98, 151, 133, 137, 76, 231, 149, 143, 67, 222, 85, 225, 221, 93, 24, 103, 233, 105, 150, 187, 214, 87, 224, 173, 45, 134, 168, 144, 51, 231, 65, 127, 124, 116, 166, 81, 142, 5, 250, 211, 134, 4, 8, 65, 115, 53, 202, 165, 50, 15, 222, 201, 28, 91, 53, 63, 85, 237, 25, 202, 108, 251, 9, 226, 71, 182, 130, 162, 70, 115, 218, 35, 175, 46, 87, 83, 68, 217, 189, 159, 75, 41, 31, 95, 98, 2, 202, 53, 34, 222, 35, 53, 61, 176, 169, 71, 53, 222, 35, 37, 29, 151, 219, 2, 134, 52, 184, 5, 214, 150, 82, 36, 185, 194, 109, 13, 131, 28, 20, 153, 219, 167, 90, 195, 31, 34, 95, 174, 239, 129, 2, 58, 246, 198, 165, 97, 74, 82, 98, 111, 22, 105, 157, 48, 89, 183, 171, 39, 4, 123, 93, 168, 125, 61, 120, 63, 46, 229, 248, 66, 62, 138, 31, 96, 61, 166, 13, 120, 201, 129, 135, 88, 254, 214, 72, 72, 147, 10, 171, 50, 176, 31, 156, 134, 180, 215, 220, 119, 245, 224, 193, 32, 167, 225, 232, 45, 228, 136, 208, 58, 202, 204, 94, 98, 230, 175, 46, 52, 226, 82, 122, 107, 142, 14, 126, 151, 69, 23, 90, 179, 165, 88, 86, 202, 95, 188, 102, 97, 148, 162, 53, 171, 61, 239, 155, 69, 207, 160, 210, 152, 200, 102, 81, 129, 42, 203, 208, 164, 141, 59, 104, 222, 100, 197, 239, 87, 18, 38, 7, 90, 31, 55, 99, 189, 116, 139, 49, 36, 6, 72, 230, 151, 208, 255, 126, 155, 87, 201, 128, 181, 122, 16, 16, 61, 129, 13, 158, 172, 58, 232, 62, 116, 97, 129, 230, 32, 92, 33, 66, 130, 250, 175, 180, 102, 116, 167, 180, 149, 48, 137, 104, 245, 98, 231, 134, 255, 179, 26, 186, 203, 68, 182, 225, 31, 210, 65, 220, 89, 226, 25, 102, 176, 203, 143, 19, 200, 97, 176, 18, 32, 190, 53, 195, 226, 152, 182, 7, 167, 27, 234, 100, 113, 79, 183, 204, 168, 25, 237, 29, 103, 109, 79, 15, 80, 144, 49, 188, 6, 106, 134, 222, 147, 2, 179, 163, 137, 251, 127, 151, 145, 81, 212, 236, 79, 10, 207, 95, 83, 13, 108, 19, 223, 16, 193, 120, 18, 227, 137, 2, 138, 49, 215, 206, 53, 39, 124, 17, 177, 169, 217, 181, 29, 98, 251, 225, 244, 101, 104, 87, 186, 112, 137, 161, 186, 17, 250, 117, 179, 11, 161, 217, 171, 191, 51, 47, 8, 55, 129, 234, 140, 91, 124, 53, 126, 23, 108, 172, 61, 46, 170, 170, 51, 147, 138, 23, 28, 212, 201, 160, 148, 229, 147, 237, 13, 229, 2, 74, 167, 169, 138, 12, 63, 142, 113, 59, 150, 103, 110, 231, 69, 34, 248, 123, 186, 85, 180, 238, 251, 228, 3, 179, 131, 143, 95, 166, 23, 53, 48, 14, 137, 119, 37, 56, 170, 124, 212, 7, 96, 45, 207, 212, 82, 194, 159, 44, 226, 189, 169, 229, 115, 136, 186, 26, 158, 247, 103, 190, 224, 205, 234, 7, 173, 59, 124, 179, 72, 18, 174, 37, 2, 185, 101, 67, 58, 109, 170, 111, 170, 218, 111, 148, 46, 84, 147, 127, 216, 64, 72, 62, 140, 27, 90, 90, 160, 108, 89, 197, 133, 85, 207, 149, 19, 47, 234, 130, 60, 130, 107, 148, 200, 94, 209, 48, 224, 118, 59, 175, 128, 100, 187, 133, 28, 67, 98, 68, 237, 141, 71, 50, 215, 229, 29, 58, 3, 74, 123, 10, 76, 209, 253, 174, 232, 220, 204, 240, 19, 9, 167, 60, 118, 177, 63, 66, 206, 127, 215, 13, 75, 122, 235, 25, 67, 48, 195, 232, 80, 4, 192, 123, 208, 55, 64, 201, 9, 97, 56, 45, 213, 34, 82, 1, 101, 136, 129, 245, 96, 234, 24, 224, 58, 104, 34, 8, 108, 113, 112, 223, 133, 139, 157, 55, 154, 8, 52, 17, 27, 183, 225, 72, 212, 5, 227, 108, 32, 85, 88, 47, 57, 232, 103, 129, 155, 198, 120, 199, 69, 38, 233, 135, 173, 226, 182, 182, 144, 249, 178, 200, 129, 254, 208, 255, 246, 12, 96, 170, 164, 48, 63, 18, 101, 221, 153, 162, 15, 23, 75, 249, 96, 102, 170, 45, 56, 161, 253, 198, 188, 177, 216, 224, 30, 108, 88, 80, 136, 110, 255, 235, 104, 103, 249, 19, 19, 124, 252, 178, 6, 2, 157, 50, 35, 241, 225, 152, 12, 153, 241, 171, 194, 2, 150, 123, 78, 245, 17, 232, 32, 250, 56, 188, 174, 119, 125, 202, 88, 12, 164, 67, 117, 44, 76, 253, 102, 158, 226, 255, 74, 9, 5, 191, 176, 43, 237, 183, 98, 192, 9, 154, 225, 173, 185, 129, 50, 231, 95, 165, 120, 17, 163, 198, 120, 45, 236, 39, 2, 184, 153, 121, 10, 204, 17, 101, 191, 57, 137, 57, 218, 125, 25, 143, 171, 27, 221, 165, 159, 23, 145, 178, 182, 70, 162, 161, 87, 112, 129, 199, 149, 9, 122, 197, 0, 200, 17, 101, 77, 238, 240, 94, 198, 59, 138, 51, 114, 151, 169, 165, 142, 114, 170, 191, 225, 28, 64, 137, 249, 101, 145, 226, 118, 116, 220, 90, 104, 120, 181, 204, 11, 244, 178, 87, 55, 130, 155, 26, 187, 76, 103, 134, 123, 149, 80, 174, 221, 76, 205, 228, 105, 118, 132, 201, 232, 112, 61, 210, 99, 119, 166, 199, 12, 39, 198, 104, 7, 31, 111, 18, 148, 48, 51, 48, 37, 37, 21, 38, 241, 214, 222, 145, 39, 239, 21, 243, 131, 162, 246, 245, 16, 216, 25, 103, 224, 56, 198, 166, 134, 83, 14, 228, 170, 146, 69, 205, 85, 165, 91, 99, 130, 186, 164, 221, 121, 157, 5, 124, 211, 156, 109, 41, 9, 234, 15, 105, 230, 193, 117, 229, 117, 147, 66, 252, 28, 124, 21, 206, 182, 142, 201, 20, 199, 154, 254, 170, 86, 170, 112, 180, 237, 56, 41, 148, 9, 83, 126, 174, 48, 216, 27, 56, 42, 49, 193, 92, 43, 150, 202, 46, 159, 152, 197, 176, 50, 143, 229, 153, 231, 221, 45, 165, 158, 103, 78, 241, 8, 206, 224, 216, 45, 136, 251, 113, 150, 194, 157, 193, 22, 40, 62, 8, 126, 202, 162, 203, 127, 122, 76, 92, 33, 70, 186, 208, 16, 17, 62, 50, 166, 97, 154, 193, 31, 138, 207, 5, 129, 213, 45, 53, 103, 249, 191, 72, 40, 22, 226, 223, 254, 213, 110, 3, 207, 0, 184, 116, 159, 255, 23, 240, 185, 96, 17, 224, 71, 184, 213, 250, 252, 143, 161, 62, 168, 56, 85, 3, 142, 34, 117, 118, 195, 24, 14, 155, 27, 6, 247, 87, 204, 239, 76, 62, 144, 85, 49, 123, 231, 35, 26, 123, 95, 163, 156, 162, 215, 94, 194, 53, 166, 115, 255, 160, 244, 129, 29, 188, 28, 178, 188, 82, 235, 120, 41, 229, 161, 13, 71, 120, 167, 250, 152, 134, 242, 5, 213, 92, 53, 70, 142, 136, 230, 46, 149, 66, 143, 128, 116, 44, 14, 12, 85, 43, 76, 245, 69, 199, 201, 161, 109, 30, 170, 190, 229, 4, 47, 11, 4, 136, 88, 197, 109, 26, 219, 163, 1, 90, 35, 63, 183, 58, 209, 166], - [139, 255, 103, 23, 235, 209, 204, 180, 139, 230, 127, 99, 42, 77, 53, 255, 202, 243, 242, 236, 191, 61, 72, 18, 153, 193, 234, 61, 186, 38, 184, 202, 94, 179, 101, 94, 116, 249, 39, 244, 176, 62, 97, 213, 183, 20, 45, 29, 113, 126, 86, 181, 106, 8, 200, 95, 94, 65, 59, 250, 50, 78, 249, 84, 223, 147, 228, 57, 253, 114, 120, 32, 177, 58, 96, 245, 238, 248, 236, 192, 26, 89, 64, 163, 219, 114, 20, 153, 18, 25, 11, 47, 237, 37, 192, 181, 80, 186, 212, 9, 151, 187, 230, 216, 5, 228, 233, 249, 249, 252, 95, 0, 47, 226, 148, 246, 205, 9, 231, 153, 110, 136, 16, 171, 61, 255, 230, 5, 122, 242, 236, 41, 4, 11, 81, 9, 98, 74, 246, 75, 21, 86, 46, 19, 113, 88, 206, 138, 227, 171, 178, 246, 231, 41, 66, 33, 18, 67, 71, 166, 54, 11, 46, 190, 168, 177, 156, 102, 197, 186, 173, 131, 16, 127, 61, 61, 198, 85, 76, 240, 232, 231, 196, 152, 1, 117, 168, 67, 32, 187, 122, 180, 33, 255, 250, 228, 190, 41, 186, 124, 71, 182, 156, 194, 233, 174, 232, 144, 96, 160, 86, 21, 112, 107, 73, 11, 227, 233, 144, 197, 7, 82, 190, 210, 231, 16, 128, 137, 169, 69, 35, 69, 227, 61, 242, 138, 174, 82, 181, 89, 94, 99, 55, 179, 236, 213, 251, 148, 66, 12, 97, 169, 161, 57, 175, 143, 5, 39, 42, 161, 244, 92, 44, 221, 84, 128, 45, 194, 173, 186, 88, 53, 148, 204, 243, 117, 191, 207, 155, 232, 11, 112, 95, 111, 183, 247, 65, 14, 206, 107, 200, 79, 221, 130, 87, 181, 245, 188, 10, 81, 251, 110, 26, 3, 155, 124, 76, 204, 157, 185, 110, 89, 202, 8, 239, 156, 221, 171, 228, 237, 96, 77, 173, 55, 102, 155, 235, 87, 152, 240, 28, 236, 176, 169, 78, 32, 179, 16, 149, 190, 45, 247, 241, 209, 131, 8, 134, 1, 159, 67, 29, 68, 42, 104, 125, 202, 80, 37, 181, 178, 84, 4, 210, 103, 227, 14, 216, 223, 128, 65, 28, 234, 40, 146, 251, 117, 194, 58, 200, 244, 22, 42, 254, 212, 215, 130, 232, 22, 19, 60, 84, 75, 93, 246, 81, 140, 246, 48, 172, 32, 223, 246, 170, 143, 198, 164, 98, 29, 74, 24, 208, 139, 99, 146, 13, 212, 165, 34, 125, 168, 16, 134, 182, 104, 212, 80, 81, 20, 191, 66, 18, 247, 124, 7, 81, 123, 160, 244, 99, 225, 52, 122, 178, 34, 214, 85, 184, 86, 11, 141, 233, 181, 62, 40, 233, 124, 161, 212, 138, 155, 64, 2, 209, 45, 127, 13, 77, 49, 20, 162, 158, 231, 224, 187, 73, 4, 188, 187, 58, 6, 93, 168, 26, 108, 184, 213, 162, 24, 3, 21, 111, 52, 149, 7, 194, 205, 181, 157, 108, 129, 208, 73, 191, 147, 132, 115, 58, 151, 180, 213, 15, 62, 224, 39, 126, 18, 195, 223, 118, 215, 153, 114, 38, 178, 53, 190, 13, 103, 102, 206, 28, 231, 126, 162, 23, 48, 55, 109, 99, 100, 30, 135, 29, 166, 244, 58, 189, 64, 152, 90, 176, 221, 56, 246, 221, 182, 144, 185, 85, 89, 96, 210, 54, 90, 127, 67, 146, 157, 32, 208, 251, 132, 158, 145, 69, 32, 226, 248, 78, 227, 9, 231, 250, 39, 170, 223, 194, 51, 59, 117, 141, 88, 184, 208, 140, 27, 18, 166, 164, 159, 221, 126, 3, 77, 229, 90, 70, 251, 177, 250, 100, 200, 65, 241, 166, 24, 0, 49, 45, 51, 79, 155, 121, 141, 124, 193, 100, 68, 90, 222, 56, 218, 85, 58, 38, 52, 248, 204, 199, 115, 200, 241, 168, 203, 5, 25, 96, 137, 99, 106, 169, 191, 97, 36, 230, 43, 194, 51, 186, 232, 110, 73, 30, 55, 37, 158, 103, 214, 141, 24, 172, 185, 160, 229, 104, 126, 4, 35, 9, 87, 250, 241, 3, 21, 170, 177, 172, 201, 187, 189, 125, 185, 29, 190, 178, 37, 116, 166, 151, 22, 2, 227, 19, 104, 192, 124, 227, 95, 96, 122, 182, 53, 171, 250, 127, 40, 33, 120, 105, 51, 40, 50, 133, 184, 181, 18, 121, 91, 32, 226, 77, 148, 117, 22, 206, 215, 70, 193, 215, 83, 93, 28, 193, 78, 159, 44, 255, 173, 58, 106, 155, 250, 99, 231, 149, 125, 63, 196, 160, 249, 30, 53, 88, 146, 75, 224, 211, 50, 116, 22, 134, 175, 94, 186, 79, 173, 106, 214, 91, 211, 237, 220, 150, 247, 158, 248, 87, 73, 232, 9, 188, 206, 15, 9, 6, 235, 168, 169, 33, 6, 212, 110, 229, 211, 208, 177, 135, 216, 147, 153, 200, 70, 21, 81, 183, 202, 55, 160, 168, 51, 37, 160, 102, 148, 202, 239, 14, 189, 94, 152, 244, 51, 14, 211, 114, 125, 174, 100, 155, 226, 30, 99, 237, 228, 74, 186, 41, 187, 79, 94, 144, 15, 206, 103, 220, 198, 224, 62, 255, 151, 71, 220, 50, 227, 7, 15, 176, 168, 126, 83, 3, 236, 21, 126, 159, 8, 31, 139, 193, 222, 214, 21, 124, 46, 228, 107, 215, 44, 104, 193, 175, 194, 138, 169, 191, 246, 101, 110, 204, 36, 13, 168, 2, 47, 100, 178, 177, 178, 239, 8, 44, 105, 77, 50, 148, 46, 223, 217, 43, 95, 133, 13, 218, 175, 78, 21, 204, 251, 143, 89, 96, 149, 43, 127, 220, 18, 93, 151, 254, 87, 248, 205, 31, 205, 90, 70, 115, 247, 168, 235, 245, 47, 211, 59, 230, 98, 35, 164, 211, 159, 105, 123, 18, 15, 250, 107, 112, 144, 139, 250, 166, 143, 222, 25, 74, 215, 165, 150, 132, 221, 138, 252, 72, 66, 181, 249, 58, 221, 230, 155, 199, 25, 6, 37, 139, 35, 158, 195, 90, 64, 183, 204, 58, 47, 179, 194, 222, 154, 73, 246, 168, 69, 62, 156, 19, 82, 106, 210, 219, 145, 132, 155, 117, 192, 121, 221, 140, 103, 199, 191, 127, 174, 182, 159, 244, 172, 248, 244, 255, 219, 235, 143, 20, 247, 47, 210, 29, 56, 6, 127, 146, 14, 244, 245, 228, 38, 251, 220, 16, 152, 21, 42, 137, 77, 97, 192, 50, 4, 179, 245, 94, 136, 85, 158, 97, 157, 149, 117, 44, 235, 196, 171, 67, 177, 145, 127, 244, 12, 77, 193, 74, 30, 196, 127, 6, 122, 73, 163, 252, 60, 143, 208, 53, 251, 89, 32, 241, 217, 185, 47, 191, 132, 81, 217, 59, 177, 246, 8, 214, 112, 128, 107, 122, 32, 34, 200, 34, 35, 223, 100, 217, 25, 76, 185, 243, 241, 85, 46, 200, 199, 129, 127, 15, 84, 115, 101, 11, 185, 128, 6, 74, 24, 78, 225, 82, 229, 67, 54, 249, 201, 82, 217, 34, 115, 58, 19, 26, 51, 31, 116, 220, 244, 133, 151, 49, 239, 169, 118, 194, 113, 48, 175, 219, 102, 136, 72, 230, 98, 134, 51, 222, 30, 226, 80, 250, 40, 202, 43, 48, 51, 172, 10, 92, 197, 10, 102, 129, 24, 223, 30, 79, 125, 8, 169, 114, 40, 232, 218, 209, 175, 184, 146, 48, 149, 74, 13, 216, 50, 98, 170, 133, 46, 237, 106, 77, 14, 36, 13, 182, 59, 212, 99, 252, 137, 244, 112, 222, 113, 118, 220, 30, 6, 143, 254, 223, 8, 129, 126, 21, 129, 9, 179, 119, 117, 73, 19, 12, 23, 41, 91, 235, 94, 236, 109, 108, 146, 245, 165, 49, 200, 79, 201, 29, 162, 186, 69, 233, 168, 223, 29, 28, 220, 56, 116, 121, 99, 16, 196, 129, 197, 74, 40, 64, 242, 234, 62, 41, 116, 84, 117, 110, 155, 131, 78, 110, 199, 117, 66, 13, 108, 183, 100, 241, 247, 218, 147, 2, 96, 45, 161, 138, 92, 17, 217, 14, 120, 103, 106, 245, 63, 227, 93, 9, 255, 174, 182, 0, 238, 181, 76, 200, 178, 245, 65, 102, 32, 219, 117, 76, 153, 79, 155, 55, 187, 152, 191, 132, 124, 136, 114, 22, 9, 42, 52, 227, 98, 177, 155, 212, 21, 123, 230, 242, 119, 84, 61, 143, 174, 91, 115, 98, 210, 151, 87, 32, 122, 2, 203, 205, 65, 187, 81, 31, 203, 55, 223, 233, 10, 124, 77, 34, 180, 158, 199, 205, 200, 11, 85, 115, 181, 164, 147, 239, 85, 222, 127, 20, 71, 59, 7, 179, 19, 149, 89, 180, 181, 188, 181, 163, 235, 77, 201, 175, 45, 35, 252, 20, 237, 153, 217, 248, 227, 169, 142, 231, 68, 204, 27, 206, 115, 245, 20, 20, 111, 16, 215, 75, 228, 36, 74, 218, 12, 78, 49, 79, 100, 253, 68, 63, 98, 56, 22, 16, 207, 8, 164, 247, 153, 31, 32, 199, 161, 47, 98, 95, 56, 40, 98, 151, 15, 157, 194, 159, 131, 183, 11, 138, 3, 44, 221, 208, 32, 88, 96, 216, 239, 205, 56, 214, 192, 204, 50, 169, 172, 193, 245, 126, 182, 124, 118, 104, 227, 26, 62, 58, 126, 253, 200, 52, 202, 242, 199, 88, 190, 158, 33, 43, 118, 199, 135, 86, 73, 34, 238, 162, 164, 121, 236, 120, 158, 171, 252, 78, 27, 75, 220, 201, 244, 143, 47, 50, 164, 126, 33, 122, 50, 201, 7, 138, 180, 211, 251, 242, 16, 178, 241, 88, 15, 106, 72, 238, 228, 167, 203, 255, 61, 202, 56, 3, 61, 246, 60, 84, 246, 178, 149, 87, 172, 243, 126, 247, 32, 210, 203, 164, 209, 142, 192, 107, 152, 219, 15, 50, 149, 81, 8, 177, 48, 1, 237, 33, 140, 182, 162, 27, 122, 184, 62, 222, 168, 111, 195, 247, 253, 245, 21, 201, 170, 249, 176, 30, 99, 211, 103, 248, 147, 222, 203, 49, 250, 43, 236, 71, 53, 56, 225, 64, 156, 100, 174, 251, 18, 187, 92, 245, 102, 245, 130, 222, 168, 82, 83, 231, 181, 246, 188, 168, 243, 128, 64, 46, 254, 236, 64, 136, 197, 210, 70, 8, 18, 156, 34, 224, 208, 90, 192, 47, 46, 43, 157, 253, 167, 197, 149, 129, 224, 109, 52, 3, 46, 186, 210, 95, 98, 125, 128, 182, 148, 24, 30, 217, 102, 228, 107, 158, 40, 6, 88, 80, 70, 168, 50, 137, 143, 250, 21, 235, 171, 245, 235, 67, 248, 160, 243, 131, 6, 246, 202, 33, 29, 121, 244, 109, 30, 122, 32, 35, 64, 121, 225, 157, 172, 209, 203, 247, 22, 19, 250, 235, 116, 245, 236, 7, 11, 189, 6, 188, 165, 236, 125, 241, 156, 16, 129, 244, 94, 106, 117, 25, 229, 51, 57, 179, 251, 104, 226, 168, 105, 140, 126, 213, 177, 198, 237, 143, 169, 50, 13, 186, 28, 52, 111, 154, 25, 211, 206, 174, 194, 18, 53, 57, 163, 158, 74, 5, 189, 188, 118, 53, 36, 169, 179, 23, 138, 222, 54, 58, 59, 143, 237, 140, 34, 114, 239, 191, 237, 218, 138, 94, 191, 60, 156, 86, 39, 248, 21, 10, 114, 242, 95, 67, 88, 228, 33, 70, 83, 67, 40, 220, 87, 114, 180, 190, 197, 217, 51, 5, 215, 241, 9, 99, 154, 59, 254, 246, 166, 179, 7, 60, 195, 119, 253, 95, 249, 178, 13, 91, 96, 156, 33, 83, 159, 78, 3, 53, 168, 1, 236, 81, 139, 13, 139, 90, 6, 232, 170, 26, 63, 11, 20, 151, 232, 210, 164, 232, 221, 209, 39, 192, 183, 94, 207, 1, 43, 150, 245, 73, 89, 184, 130, 69, 94, 19, 63, 113, 134, 77, 155, 110, 60, 222, 24, 27, 122, 120, 218, 41, 189, 62, 164, 14, 41, 83, 160, 255, 218, 195, 215, 77, 162, 80, 65, 1, 29, 62, 201, 0, 140, 108, 15, 91, 178, 154, 198, 201, 130, 252, 9, 237, 33, 50, 169, 93, 115, 235, 197, 229, 198, 96, 168, 187, 144, 77, 80, 29, 84, 2, 170, 218, 132, 46, 11, 141, 149, 201, 50, 182, 48, 11, 201, 149, 214, 4, 131, 106, 148, 59, 213, 36, 83, 251, 83, 191, 107, 87, 138, 114, 201, 32, 141, 28, 211, 32, 214, 145, 70, 242, 224, 68, 141, 230, 138, 184, 177, 48, 167, 215, 251, 202, 144, 119, 175, 61, 200, 174, 4, 229, 50, 214, 7, 168, 237, 231, 178, 250, 88, 156, 202, 103, 110, 146, 179, 26, 199, 170, 80, 117, 75, 187, 107, 62, 210, 217, 201, 28, 119, 103, 172, 206, 89, 102, 164, 71, 200, 129, 187, 143, 71, 211, 12, 199, 97, 95, 192, 112, 54, 40, 222, 220, 20, 76, 129, 134, 19, 255, 35, 63, 42, 164, 213, 115, 32, 54, 203, 139, 209, 221, 70, 220, 38, 177, 127, 86, 135, 32, 226, 183, 40, 48, 135, 108, 225, 135, 68, 68, 109, 124, 108, 97, 101, 67, 43, 49, 249, 50, 90, 121, 188, 139, 229, 238, 114, 29, 21, 82, 41, 87, 168, 88, 200, 18, 181, 149, 37, 162, 208, 237, 139, 248, 246, 130, 92, 217, 209, 112, 179, 36, 210, 97, 54, 52, 6, 49, 92, 34, 67, 48, 61, 151, 54, 65, 219, 116, 66, 32, 157, 150, 21, 141, 214, 1, 9, 113, 29, 9, 79, 40, 109, 2, 202, 168, 9, 197, 46, 102, 107, 80, 239, 192, 53, 183, 239, 53, 29, 7, 53, 16, 221, 80, 250, 127, 101, 253, 229, 228, 71, 18, 208, 222, 0, 251, 51, 168, 155, 38, 28, 133, 30, 33, 116, 221, 76, 197, 93, 50, 104, 35, 162, 15, 180, 148, 187, 223, 147, 168, 28, 32, 124, 236, 53, 213, 93, 202, 5, 92, 119, 153, 93, 58, 17, 141, 255, 81, 63, 180, 164, 200, 1, 83, 78, 168, 117, 106, 175, 1, 37, 166, 236, 103, 131, 45, 216, 171, 222, 105, 17, 91, 216, 26, 113, 202, 55, 158, 210, 200, 208, 216, 56, 189, 218, 172, 67, 29, 145, 191, 184, 36, 236, 9, 251, 12, 207, 9, 50, 253, 70, 107, 44, 219, 78, 27, 168, 19, 71, 143, 104, 111, 32, 247, 19, 104, 171, 221, 190, 182, 71, 20, 39, 92, 176, 71, 247, 14, 83, 100, 127, 133, 92, 145, 140, 135, 209, 221, 172, 130, 145, 229, 138, 114, 96, 139, 229, 19, 198, 143, 9, 207, 101, 244, 178, 172, 77, 189, 21, 187, 208, 138, 219, 218, 120, 142, 29, 216, 252, 92, 66, 183, 239, 1, 158, 79, 36, 123, 53, 238, 179, 56, 50, 92, 112, 122, 227, 232, 143, 185, 215, 247, 205, 205, 197, 118, 51, 186, 92, 239, 1, 54, 210, 97, 221, 51, 88, 127, 205, 37, 102, 14, 155, 168, 194, 166, 218, 179, 198, 109, 192, 220, 163, 113, 8, 70, 188, 246, 4, 121, 100, 32, 97, 83, 110, 177, 223, 193, 250, 161, 190, 170, 193, 179, 215, 79, 173, 1, 132, 164, 47, 54, 84, 15, 2, 227, 118, 177, 12, 238, 70, 220, 86, 72, 224, 115, 176, 152, 188, 228, 129, 231, 168, 215, 196, 15, 175, 234, 97, 136, 217, 202, 156, 5, 43, 44, 123, 61, 180, 190, 210, 150, 67, 181, 205, 227, 103, 18, 12, 8, 161, 155, 255, 213, 236, 176, 255, 125, 121, 223, 6, 35, 195, 120, 37, 52, 172, 111, 16, 40, 151, 77, 212, 6, 206, 76, 185, 223, 38, 231, 232, 64, 206, 117, 1, 65, 8, 101, 120, 36, 28, 162, 190, 228, 78, 5, 176, 138, 55, 103, 141, 222, 55, 31, 121, 5, 167, 253, 154, 248, 68, 104, 80, 34, 240, 129, 29, 110, 55, 7, 101, 28, 8, 93, 38, 248, 100, 101, 88, 83, 179, 199, 8, 72, 110, 106, 228, 177, 200, 179, 167, 56, 215, 226, 148, 28, 76, 31, 30, 63, 2, 198, 129, 16, 88, 78, 169, 14, 53, 112, 151, 150, 192, 228, 186, 44, 170, 93, 158, 242, 220, 48, 90, 89, 2, 191, 159, 136, 19, 131, 246, 234, 80, 185, 49, 167, 7, 59, 167, 24, 212, 215, 244, 99, 3, 147, 219, 38, 62, 30, 167, 211, 184, 65, 52, 163, 55, 101, 10, 236, 58, 183, 142, 177, 111, 51, 200, 154, 85, 128, 200, 196, 39, 251, 119, 54, 41, 48, 177, 87, 242, 154, 66, 192, 52, 179, 113, 226, 179, 255, 19, 114, 35, 151, 33, 34, 38, 208, 74, 184, 194, 192, 207, 215, 70, 217, 38, 67, 147, 193, 186, 92, 178, 141, 5, 139, 230, 10, 215, 191, 174, 41, 26, 129, 136, 242, 104, 229, 179, 170, 213, 153, 140, 35, 249, 118, 200, 220, 228, 18, 108, 105, 36, 74, 161, 40, 186, 137, 142, 112, 111, 139, 93, 161, 215, 33, 162, 41, 69, 189, 66, 116, 225, 200, 157, 169, 150, 31, 117, 81, 16, 242, 29, 16, 48, 60, 247, 142, 38, 52, 222, 1, 16, 94, 245, 26, 180, 125, 205, 67, 231, 133, 241, 107, 196, 125, 118, 146, 107, 160, 143, 43, 13, 26, 129, 103, 167, 185, 125, 166, 153, 126, 124, 23, 252, 3, 65, 222, 105, 215, 123, 46, 250, 176, 194, 165, 165, 192, 241, 158, 26, 103, 231, 32, 198, 40, 5, 107, 49, 99, 89, 200, 60, 203, 137, 52, 15, 79, 111, 126, 235, 68, 116, 101, 85, 248, 7, 105, 131, 6, 215, 163, 80, 254, 182, 207, 23, 169, 189, 137, 132, 149, 180, 93, 11, 161, 239, 196, 11, 190, 181, 65, 169, 103, 143, 52, 137, 121, 127, 23, 231, 133, 59, 7, 162, 120, 167, 143, 186, 35, 61, 231, 98, 120, 206, 47, 69, 131, 217, 4, 65, 179, 57, 23, 203, 182, 213, 27, 253, 105, 135, 117, 107, 64, 42, 186, 18, 88, 183, 116, 169, 145, 44, 24, 46, 28, 212, 127, 88, 21, 42, 83, 239, 14, 107, 174, 133, 24, 67, 85, 109, 142, 21, 200, 232, 94, 43, 51, 61, 8, 144, 150, 78, 106, 63, 163, 110, 227, 214, 13, 64, 159, 93, 118, 152, 210, 102, 138, 223, 239, 221, 98, 35, 193, 95, 200, 174, 172, 85, 251, 23, 16, 60, 191, 131, 217, 248, 54, 230, 52, 174, 121, 155, 21, 45, 88, 0, 153, 184, 77, 201, 212, 156, 166, 243, 232, 69, 127, 234, 177, 250, 100, 132, 244, 225, 23, 198, 230, 182, 85, 26, 20, 98, 248, 14, 21, 84, 213, 237, 210, 255, 121, 146, 35, 24, 120, 248, 219, 8, 123, 160, 48, 76, 224, 174, 202, 245, 78, 177, 199, 44, 121, 130, 23, 80, 150, 88, 15, 125, 160, 13, 245, 170, 205, 241, 177, 125, 159, 7, 244, 77, 208, 22, 218, 125, 156, 182, 49, 194, 90, 23, 144, 110, 1, 116, 128, 139, 247, 171, 196, 209, 215, 40, 237, 139, 164, 147, 145, 199, 32, 60, 132, 46, 160, 119, 168, 230, 44, 0, 78, 45, 100, 182, 6, 52, 112, 100, 243, 84, 194, 174, 178, 150, 119, 39, 184, 1, 240, 233, 27, 208, 163, 63, 46, 65, 29, 123, 78, 133, 7, 110, 2, 207, 159, 192, 122, 123, 0, 185, 144, 169, 46, 148, 189, 199, 137, 89, 17, 194, 56, 82, 184, 67, 86, 43, 141, 104, 76, 74, 106, 80, 209, 195, 229, 172, 132, 126, 58, 117, 184, 129, 157, 183, 4, 170, 130, 131, 201, 105, 216, 176, 192, 0, 239, 249, 16, 123, 143, 244, 55, 181, 70, 52, 35, 47, 44, 140, 176, 134, 114, 224, 40, 239, 19, 116, 119, 206, 108, 223, 252, 71, 7, 72, 79, 179, 53, 240, 166, 71, 97, 92, 221, 111, 74, 191, 50, 127, 160, 66, 60, 58, 144, 74, 134, 251, 75, 172, 129, 45, 167, 105, 126, 190, 243, 73, 87, 192, 39, 231, 61, 94, 199, 106, 81, 195, 82, 45, 138, 103, 123, 204, 169, 8, 47, 16, 75, 8, 5, 102, 218, 91, 17, 190, 252, 97, 169, 129, 248, 161, 176, 24, 241, 236, 24, 82, 14, 48, 69, 24, 248, 62, 129, 219, 42, 58, 54, 34, 210, 127, 132, 146, 235, 93, 92, 59, 82, 149, 115, 26, 103, 182, 104, 37, 134, 134, 59, 111, 156, 221, 15, 85, 149, 183, 180, 249, 168, 138, 139, 135, 218, 249, 97, 67, 9, 125, 149, 195, 149, 180, 246, 245, 187, 241, 241, 254, 141, 171, 230, 188, 201, 93, 167, 149, 24, 60, 213, 148, 162, 118, 131, 68, 131, 219, 18, 29, 29, 19, 34, 36, 88, 76, 26, 244, 77, 134, 158, 113, 240, 90, 46, 94, 58, 144, 43, 75, 121, 220, 4, 24, 48, 240, 170, 27, 82, 150, 178, 16, 210, 165, 169, 167, 109, 70, 123, 95, 245, 165, 14, 38, 148, 220, 128, 201, 124, 142, 194, 222, 139, 119, 254, 186, 96, 171, 55, 7, 23, 34, 49, 191, 59, 57, 152, 160, 54, 135, 65, 63, 199, 60, 232, 36, 107, 111, 40, 101, 100, 99, 51, 144, 8, 247, 69, 202, 83, 242, 123, 221, 171, 148, 188, 192, 95, 120, 246, 51, 7, 173, 14, 121, 172, 170, 211, 239, 56, 52, 19, 62, 89, 91, 100, 137, 239, 104, 200, 206, 62, 18, 81, 243, 68, 9, 183, 60, 48, 86, 222, 88, 56, 164, 189, 242, 1, 123, 171, 137, 128, 244, 198, 128, 18, 59, 19, 42, 230, 159, 178, 168, 46, 105, 173, 220, 42, 218, 130, 93, 117, 227, 24, 65, 8, 163, 67, 148, 167, 99, 100, 50, 59, 204, 37, 245, 118, 216, 111, 162, 109, 89, 64, 54, 131, 212, 7, 207, 42, 180, 210, 206, 168, 20, 239, 55, 34, 118, 236, 211, 194, 203, 126, 1, 85, 216, 199, 17, 20, 111, 214, 128, 203, 87, 215, 237, 246, 4, 96, 36, 208, 130, 115, 31, 30, 160, 165, 32, 106, 22, 191, 18, 191, 126, 214, 212, 145, 132, 87, 130, 249, 70, 231, 170, 182, 234, 27, 182, 98, 213, 211, 189, 76, 124, 143, 55, 160, 249, 121, 76, 77, 161, 1, 109, 125, 163, 228, 255, 34, 110, 162, 232, 125, 226, 214, 19, 41, 99, 221, 144, 26, 177, 125, 204, 97, 51, 132, 159, 215, 131, 226, 93, 144, 248, 34, 176, 38, 55, 130, 56, 128, 107, 79, 25, 174, 208, 77, 250, 222, 150, 148, 239, 83, 97, 195, 222, 219, 116, 217, 129, 183, 165, 246, 158, 14, 70, 2, 64, 181, 186, 156, 200, 117, 232, 96, 159, 48, 222, 243, 97, 162, 172, 246, 89, 9, 155, 63, 79, 69, 165, 253, 137, 207, 99, 61, 65, 182, 75, 232, 63, 32, 219, 135, 131, 110, 206, 238, 214, 203, 249, 208, 114, 69, 35, 238, 104, 242, 37, 47, 242, 40, 168, 20, 238, 236, 220, 5, 160, 80, 103, 45, 68, 153, 152, 207, 170, 4, 178, 176, 124, 34, 174, 233, 1, 12, 73, 235, 141, 249, 41, 86, 227, 204, 232, 203, 241, 197, 71, 208, 124, 141, 125, 33, 226, 145, 51, 167, 229, 244, 2, 87, 148, 211, 243, 22, 101, 27, 143, 100, 107, 8, 213, 58, 67, 76, 196, 51, 48, 66, 59, 247, 202, 126, 35, 152, 250, 225, 39, 242, 17, 199, 244, 212, 27, 51, 252, 20, 20, 248, 74, 135, 196, 71, 14, 242, 168, 241, 88, 119, 107, 23, 152, 228, 14, 225, 62, 12, 179, 181, 183, 29, 22, 151, 175, 148, 35, 23, 145, 131, 54, 64, 121, 54, 145, 158, 73, 247, 132, 186, 87, 15, 37, 146, 112, 82, 248, 120, 10, 45, 182, 45, 247, 115, 160, 50, 36, 67, 56, 126, 217, 75, 221, 162, 247, 69, 41, 182, 117, 25, 158, 198, 20, 94, 110, 221, 226, 55, 189, 189, 100, 202, 68, 114, 107, 152, 68, 199, 184, 59, 156, 143, 177, 121, 120, 106, 60, 203, 238, 93, 151, 67, 104, 242, 133, 227, 90, 212, 113, 69, 120, 89, 167, 26, 62, 186, 86, 60, 126, 130, 119, 252, 228, 41, 174, 141, 178, 122, 81, 180, 154, 151, 98, 79, 81, 109, 202, 92, 13, 155, 51, 181, 250, 146, 190, 40, 107, 113, 19, 17, 75, 154, 187, 195, 241, 202, 248, 105, 108, 34, 160, 126, 212, 15, 76, 183, 56, 36, 202, 221, 188, 251, 201, 253, 48, 223, 55, 210, 170, 78, 154, 140, 53, 181, 97, 199, 62, 146, 39, 201, 54, 195, 164, 172, 222, 71, 59, 177, 41, 216, 35, 8, 74, 73, 247, 12, 222, 88, 9, 203, 137, 239, 129, 158, 63, 95, 252, 233, 198, 36, 174, 226, 157, 196, 110, 93, 159, 239, 144, 38, 43, 82, 45, 244, 221, 176, 108, 12, 168, 187, 99, 234, 44, 100, 148, 42, 91, 134, 248, 181, 75, 54, 195, 192, 20, 207, 56, 127, 27, 28, 204, 162, 190, 33, 85, 160, 114, 78, 126, 17, 193, 30, 85, 222, 217, 208, 13, 108, 45, 17, 52, 162, 125, 235, 73, 251, 218, 156, 175, 106, 209, 93, 212, 106, 149, 181, 49, 183, 126, 99, 9, 48, 31, 133, 150, 92, 51, 122, 189, 88, 22, 252, 90, 212, 85, 139, 231, 205, 31, 236, 16, 12, 237, 219, 173, 82, 6, 71, 30, 52, 203, 250, 121, 135, 92, 248, 181, 117, 25, 88, 45, 92, 197, 218, 190, 228, 30, 135, 123, 240, 146, 28, 231, 15, 217, 93, 90, 47, 221, 116, 24, 110, 129, 102, 58, 79, 168, 213, 123, 43, 40, 200, 118, 42, 130, 181, 100, 84, 41, 67, 40, 12, 6, 160, 152, 34, 194, 29, 234, 96, 255, 94, 43, 56, 26, 170, 215, 73, 132, 29, 7, 171, 59, 139, 6, 82, 168, 85, 211, 255, 196, 70, 9, 203, 77, 66, 233, 208, 209, 52, 191, 53, 32, 206, 177, 109, 170, 1, 23, 228, 196, 40, 91, 194, 75, 24, 94, 187, 15, 127, 184, 11, 17, 9, 231, 242, 51, 244, 234, 93, 82, 63, 29, 192, 198, 213, 146, 205, 131, 83, 119, 170, 82, 136, 169, 171, 0, 189, 87, 135, 123, 116, 247, 165, 165, 148, 41, 81, 202, 58, 183, 6, 128, 208, 110, 25, 142, 182, 156, 25, 60, 228, 141, 107, 143, 148, 225, 224, 180, 239, 219, 66, 36, 168, 167, 98, 180, 94, 250, 164, 75, 80, 100, 104, 131, 24, 68, 89, 173, 73, 251, 116, 127, 8, 184, 208, 100, 224, 162, 4, 185, 52, 107, 15, 146, 217, 113, 102, 84, 225, 7, 6, 239, 116, 124, 119, 101, 133, 179, 137, 38, 239, 233, 249, 117, 7, 116, 68, 218, 233, 166, 1, 165, 99, 252, 186, 139, 231, 167, 12, 73, 96, 247, 197, 253, 206, 232, 58, 45, 173, 136, 79, 204, 251, 40, 68, 53, 159, 197, 153, 129, 63, 71, 218, 233, 155, 45, 92, 189, 69, 172, 243, 5, 190, 53, 109, 29, 57, 242, 26, 58, 150, 197, 54, 214, 211, 103, 50, 191, 250, 174, 82, 211, 239, 156, 211, 13, 204, 236, 45, 239, 61, 59, 155, 122, 111, 182, 26, 157, 145, 250, 194, 250, 68, 239, 110, 223, 195, 130, 181, 63, 226, 169, 246, 217, 206, 209, 161, 14, 52, 230, 227, 226, 134, 77, 133, 94, 219, 209, 34, 152, 58, 85, 110, 154, 207, 229, 198, 240, 154, 227, 91, 237, 188, 43, 43, 224, 29, 65, 75, 132, 34, 74, 52, 252, 228, 233, 46, 95, 58, 58, 135, 52, 248, 129, 224, 64, 100, 130, 205, 141, 222, 144, 58, 178, 121, 210, 243, 82, 191, 159, 233, 2, 255, 122, 145, 139, 135, 109, 0, 158, 136, 180, 226, 124, 235, 0, 189, 131, 239, 28, 211, 44, 165, 215, 62, 202, 247, 199, 241, 237, 174, 141, 145, 142, 238, 22, 27, 135, 166, 132, 164, 29, 4, 153, 197, 177, 149, 65, 249, 242, 124, 248, 107, 19, 43, 121, 22, 128, 138, 75, 192, 168, 24, 2, 185, 21, 63, 50, 100, 8, 174, 76, 41, 96, 31, 33, 133, 207, 201, 85, 27, 38, 21, 36, 30, 139, 245, 126, 26, 76, 206, 215, 204, 56, 167, 207, 16, 208, 60, 85, 73, 35, 245, 226, 156, 57, 29, 221, 243, 61, 210, 108, 248, 162, 244, 223, 121, 41, 14, 135, 71, 202, 163, 184, 181, 166, 139, 90, 236, 113, 163, 44, 128, 187, 231, 33, 157, 153, 66, 178, 93, 43, 191, 199, 87, 113, 24, 142, 40, 77, 203, 37, 95, 112, 23, 232, 14, 90, 113, 159, 199, 214, 41, 11, 60, 255, 225, 154, 85, 35, 167, 138, 110, 108, 164, 27, 74, 189, 6, 180, 197, 32, 248, 99, 74, 5, 175, 198, 150, 200, 39, 174, 92, 90, 226, 4, 126, 248, 188, 82, 170, 144, 191, 152, 26, 43, 172, 17, 197, 198, 65, 220, 18, 185, 207, 7, 85, 56, 96, 189, 2, 45, 139, 185, 230, 149, 128, 44, 157, 235, 63, 97, 179, 228, 21, 247, 169, 176, 99, 207, 58, 121, 1, 135, 89, 176, 145, 120, 53, 197, 202, 107, 41, 29, 152, 219, 245, 233, 249, 96, 234, 23, 228, 205, 59, 49, 7, 21, 90, 22, 54, 99, 239, 223, 113, 3, 251, 192, 211, 151, 214, 121, 95, 66, 163, 84, 106, 197, 151, 247, 26, 103, 101, 125, 80, 255, 252, 53, 213, 171, 14, 169, 89, 253, 232, 182, 187, 173, 235, 167, 202, 96, 140, 65, 205, 223, 32, 54, 211, 198, 104, 246, 1, 228, 60, 67, 222, 155, 243, 210, 3, 70, 38, 188, 79, 33, 216, 107, 88, 109, 114, 134, 8, 156, 209, 113, 237, 202, 199, 10, 115, 137, 131, 89, 100, 23, 106, 95, 203, 220, 236, 169, 225, 74, 26, 37, 158, 29, 230, 127, 10, 145, 142, 253, 43, 235, 1, 228, 243, 56, 132, 22, 169, 214, 10, 227, 83, 76, 55, 206, 159, 40, 102, 83, 241, 227, 113, 188, 0, 212, 148, 69, 176, 87, 40, 15, 240, 115, 52, 135, 23, 161, 224, 81, 157, 207, 175, 58, 252, 42, 126, 154, 37, 201, 82, 67, 27, 29, 114, 113, 124, 126, 27, 148, 192, 142, 58, 133, 116, 99, 182, 7, 113, 20, 101, 10, 44, 110, 37, 115, 113, 91, 59, 144, 154, 75, 209, 11, 221, 209, 96, 182, 99, 22, 170, 26, 12, 19, 131, 222, 89, 100, 169, 241, 49, 216, 228, 50, 188, 151, 137, 229, 125, 109, 73, 192, 131, 105, 175, 213, 194, 5, 240, 56, 40, 55, 74, 153, 157, 16, 7, 192, 138, 170, 40, 159, 157, 126, 1, 172, 212, 136, 78, 74, 78, 100, 56, 161, 31, 45, 58, 120, 161, 59, 127, 170, 23, 226, 34, 156, 65, 199, 194, 162, 220, 222, 90, 84, 83, 85, 178, 160, 129, 188, 234, 164, 249, 122, 59, 246, 34, 154, 172, 80, 139, 12, 5, 85, 229, 123, 218, 185, 27, 173, 34, 19, 182, 229, 50, 182, 219, 18, 144, 51, 169, 134, 42, 82, 222, 114, 120, 141, 42, 31, 78, 226, 67, 46, 175, 75, 1, 37, 251, 20, 131, 58, 37, 104, 147, 253, 253, 23, 69, 100, 71, 67, 69, 96, 170, 169, 230, 109, 3, 25, 16, 140, 242, 35, 110, 22, 223, 71, 79, 123, 163, 253, 140, 207, 111, 214, 201, 184, 21, 240, 249, 166, 104, 104, 18, 195, 98, 39, 172, 124, 254, 60, 188, 16, 122, 245, 65, 28, 253, 219, 58, 12, 150, 19, 126, 68, 44, 138, 146, 220, 246, 53, 214, 177, 134, 139, 67, 238, 180, 194, 68, 67, 255, 69, 2, 244, 150, 226, 117, 179, 195, 176, 168, 213, 253, 177, 74, 232, 149, 35, 215, 48, 172, 215, 199, 152, 194, 249, 69, 140, 148, 57, 38, 164, 188, 32, 148, 130, 252, 90, 100, 178, 129, 212, 255, 51, 196, 49, 130, 19, 129, 165, 208, 232, 128, 235, 228, 65, 1, 55, 218, 193, 184, 41, 65, 197, 132, 136, 110, 46, 41, 239, 103, 169, 188, 136, 102, 213, 210, 196, 252, 84, 79, 47, 119, 35, 244, 91, 102, 116, 212, 234, 221, 195, 164, 177, 88, 105, 176, 33, 139, 143, 101, 118, 95, 65, 232, 18, 88, 51, 92, 255, 105, 129, 7, 116, 84, 9, 232, 11, 70, 51, 205, 210, 109, 123, 54, 125, 48, 228, 56, 160, 38, 28, 73, 96, 10, 48, 230, 187, 185, 27, 37, 155, 212, 80, 255, 246, 100, 145, 132, 25, 132, 91, 240, 206, 7, 40, 41, 207, 84, 31, 253, 204, 90, 226, 227, 11, 91, 19, 90, 108, 222, 238, 41, 196, 234, 247, 178, 16, 8, 165, 207, 162, 249, 56, 224, 59, 95, 169, 201, 128, 169, 227, 205, 97, 82, 39, 231, 251, 170, 224, 223, 147, 241, 86, 54, 55, 56, 26, 201, 138, 78, 142, 206, 13, 149, 63, 108, 165, 248, 255, 71, 217, 120, 59, 53, 255, 123, 84, 27, 180, 184, 5, 122, 171, 154, 250, 64, 84, 164, 204, 192, 148, 90, 51, 53, 31, 61, 177, 219, 45, 63, 110, 120, 32, 104, 191, 249, 70, 80, 103, 53, 9, 152, 213, 244, 111, 104, 117, 79, 237, 149, 242, 21, 173, 174, 27, 4, 162, 160, 41, 252, 123, 201, 240, 204, 225, 71, 102, 32, 84, 131, 90, 4, 211, 193, 124, 143, 81, 88, 110, 81, 84, 59, 116, 60, 47, 214, 97, 165, 224, 181, 127, 227, 145, 70, 71, 244, 65, 164, 169, 132, 135, 147, 112, 102, 255, 117, 93, 215, 225, 229, 146, 51, 40, 230, 70, 147, 154, 214, 86, 83, 190, 22, 98, 150, 85, 37, 17, 0, 205, 106, 119, 233, 38, 182, 64, 151, 110, 235, 167, 71, 228, 169, 168, 187, 188, 216, 145, 179, 205, 28, 7, 166, 172, 65, 50, 209, 0, 35, 8, 246, 60, 102, 201, 19, 21, 83, 117, 23, 211, 153, 32, 210, 60, 216, 81, 253, 229, 182, 112, 20, 28, 203, 246, 132, 76, 39, 213, 202, 159, 57, 19, 239, 44, 25, 30, 81, 73, 19, 66, 216, 191, 142, 105, 233, 77, 224, 243, 16, 104, 91, 3, 142, 41, 113, 55, 181, 202, 83, 123, 118, 27, 60, 19, 196, 58, 225, 241, 101, 223, 125, 131, 189, 187, 46, 162, 237, 194, 147, 29, 75, 239, 12, 208, 174, 213, 227, 234, 52, 249, 21, 120, 209, 246, 182, 171, 206, 248, 147, 240, 20, 124, 210, 32, 88, 242, 159, 238, 139, 179, 122, 41, 95, 73, 70, 61, 56, 173, 219, 14, 113, 194, 189, 238, 12, 251, 182, 187, 119, 17, 242, 183, 161, 18, 11, 7, 45, 75, 106, 158, 212, 150, 161, 178, 92, 28, 243, 219, 162, 125, 172, 112, 161, 232, 109, 200, 72, 228, 141, 53, 125, 172, 11, 219, 250, 7, 64, 143, 93, 45, 141, 58, 104, 30, 250, 57, 221, 37, 118, 190, 7, 229, 89, 170, 173, 176, 37, 157, 53, 10, 196, 3, 128, 56, 40, 149, 18, 151, 27, 70, 198, 28, 125, 101, 130, 29, 26, 113, 138, 162, 78, 187, 18, 166, 72, 238, 171, 182, 200, 167, 155, 10, 195, 151, 110, 149, 126, 114, 78, 95, 193, 62, 26, 112, 213, 192, 211, 210, 49, 104, 52, 150, 188, 63, 28, 166, 74, 94, 29, 28, 48, 62, 161, 52, 20, 202, 215, 56, 153, 107, 226, 213, 227, 15, 44, 246, 152, 253, 169, 174, 58, 27, 44, 78, 226, 203, 2, 65, 82, 224, 76, 174, 211, 93, 149, 74, 233, 248, 125, 220, 123, 35, 33, 28, 66, 177, 0, 40, 92, 117, 156, 179, 238, 93, 7, 248, 59, 16, 164, 22, 30, 35, 190, 38, 5, 177, 179, 127, 150, 223, 177, 106, 215, 81, 21, 212, 106, 194, 198, 221, 11, 60, 176, 246, 247, 225, 54, 212, 105, 239, 36, 11, 234, 97, 50, 231, 206, 216, 53, 244, 64, 120, 161, 37, 204, 121, 227, 224, 100, 223, 240, 174, 148, 15, 189, 163, 166, 96, 145, 103, 29, 15, 135, 230, 34, 25, 201, 94, 203, 19, 18, 247, 175, 25, 183, 7, 97, 111, 228, 206, 173, 167, 79, 81, 28, 130, 229, 77, 232, 26, 48, 200, 233, 212, 66, 232, 39, 41, 75, 95, 116, 74, 11, 244, 242, 200, 228, 197, 30, 85, 131, 124, 228, 52, 121, 25, 73, 242, 182, 203, 185, 124, 161, 225, 217, 230, 222, 114, 116, 33, 89, 143, 187, 153, 95, 192, 79, 233, 39, 18, 71, 86, 153, 31, 34, 58, 221, 70, 82, 209, 180, 180, 172, 169, 60, 138, 62, 254, 235, 247, 93, 126, 122, 248, 163, 193, 188, 50, 184, 149, 210, 68, 24, 10, 141, 90, 58, 201, 72, 51, 31, 132, 242, 65, 201, 213, 39, 98, 137, 191, 152, 16, 15, 134, 166, 95, 155, 66, 64, 133, 14, 137, 97, 17, 15, 178, 100, 18, 21, 14, 248, 151, 48, 151, 172, 170, 241, 144, 50, 68, 50, 111, 186, 71, 122, 46, 175, 157, 72, 112, 57, 81, 103, 254, 196, 229, 61, 182, 201, 153, 108, 94, 82, 31, 255, 63, 34, 116, 6, 2, 248, 215, 173, 41, 221, 73, 136, 94, 94, 19, 228, 146, 168, 130, 127, 216, 179, 9, 241, 172, 100, 234, 19, 51, 12, 82, 208, 243, 88, 220, 140, 62, 138, 251, 147, 4, 126, 113, 207, 50, 251, 114, 200, 158, 146, 161, 35, 2, 113, 204, 4, 125, 39, 182, 192, 201, 228, 70, 58, 15, 63, 247, 239, 193, 177, 179, 154, 68, 203, 156, 88, 102, 5, 131, 197, 163, 65, 9, 191, 132, 55, 226, 125, 104, 46, 112, 145, 140, 50, 93, 99, 70, 222, 108, 233, 108, 135, 193, 136, 239, 110, 220, 184, 73, 91, 97, 66, 155, 196, 59, 246, 25, 4, 246, 63, 0, 54, 190, 107, 117, 89, 143, 134, 91, 17, 252, 181, 48, 226, 70, 241, 22, 103, 22, 106, 171, 127, 90, 29, 222, 82, 15, 210, 163, 29, 202, 230, 202, 239, 230, 160, 158, 176, 180, 50, 102, 1, 218, 76, 217, 144, 208, 188, 162, 80, 28, 126, 144, 57, 66, 44, 33, 98, 178, 150, 233, 43, 129, 170, 184, 240, 89, 141, 56, 143, 227, 58, 221, 175, 30, 244, 135, 35, 140, 204, 108, 83, 111, 97, 79, 223, 221, 185, 142, 91, 184, 88, 68, 91, 172, 205, 41, 42, 233, 1, 73, 72, 109, 133, 210, 253, 180, 45, 198, 104, 45, 161, 114, 34, 21, 90, 239, 34, 195, 162, 137, 179, 245, 214, 75, 126, 124, 191, 50, 115, 148, 122, 108, 18, 2, 222, 151, 32, 61, 34, 24, 75, 103, 125, 234, 143, 207, 5, 180, 109, 163, 117, 55, 42, 222, 137, 33, 145, 189, 90, 7, 4, 227, 126, 141, 216, 69, 178, 226, 210, 8, 191, 159, 54, 106, 40, 173, 187, 147, 51, 134, 8, 6, 254, 78, 79, 145, 152, 91, 50, 127, 54, 123, 190, 72, 23, 130, 173, 17, 68, 86, 206, 248, 248, 47, 54, 172, 210, 128, 80, 22, 156, 14, 213, 23, 40, 220, 25, 123, 6, 242, 95, 150, 84, 205, 158, 57, 21, 161, 20, 248, 173, 80, 119, 171, 92, 251, 179, 46, 124, 28, 163, 33, 128, 141, 87, 153, 252, 88, 98, 208, 118, 169, 2, 98, 182, 31, 23, 106, 156, 207, 176, 42, 65, 237, 66, 69, 190, 161, 220, 125, 56, 161, 219, 131, 110, 90, 4, 161, 225, 132, 241, 87, 86, 249, 177, 54, 244, 168, 127, 205, 158, 4, 16, 156, 139, 164, 195, 226, 242, 11, 114, 17, 43, 112, 82, 187, 201, 17, 250, 105, 144, 48, 79, 187, 174, 14, 165, 42, 92, 180, 217, 70, 184, 114, 116, 17, 173, 242, 112, 156, 58, 51, 226, 84, 89, 179, 6, 6, 227, 6, 109, 218, 117, 248, 83, 221, 184, 167, 45, 212, 30, 225, 172, 152, 42, 156, 117, 242, 212, 78, 190, 15, 96, 34, 168, 227, 63, 175, 2, 25, 182, 113, 207, 76, 178, 146, 47, 56, 38, 152, 44, 10, 28, 233, 214, 110, 6, 117, 111, 239, 112, 150, 186, 184, 183, 124, 66, 161, 34, 109, 235, 174, 130, 143, 121, 145, 41, 249, 22, 83, 27, 128, 237, 37, 43, 171, 69, 18, 47, 13, 86, 108, 228, 36, 157, 217, 106, 103, 223, 249, 96, 47, 7, 64, 151, 132, 62, 155, 58, 35, 49, 52, 235, 134, 193, 88, 219, 52, 141, 186, 158, 36, 12, 164, 145, 22, 22, 205, 227, 161, 112, 149, 132, 220, 199, 161, 193, 73, 154, 233, 160, 186, 21, 167, 48, 243, 17, 154, 54, 122, 123, 73, 131, 129, 31, 101, 98, 247, 175, 18, 201, 13, 57, 145, 241, 36, 178, 2, 95, 212, 212, 37, 154, 123, 8, 158, 137, 23, 82, 147, 60, 12, 204, 197, 64, 21, 90, 243, 118, 47, 179, 82, 49, 74, 42, 170, 21, 150, 15, 77, 173, 74, 110, 1, 187, 118, 156, 56, 84, 184, 141, 234, 171, 225, 75, 51, 136, 199, 206, 16, 52, 214, 215, 195, 122, 37, 162, 252, 166, 51, 170, 8, 232, 12, 22, 213, 8, 68, 54, 145, 178, 247, 58, 18, 202, 92, 161, 24, 27, 96, 8, 183, 203, 198, 52, 62, 245, 141, 182, 212, 149, 190, 10, 143, 188, 0, 187, 144, 173, 177, 138, 125, 190, 204, 245, 117, 137, 90, 184, 182, 113, 17, 152, 128, 224, 57, 227, 135, 250, 209, 145, 85, 35, 195, 166, 242, 108, 125, 248, 157, 40, 41, 167, 139, 60, 41, 46, 50, 138, 164, 36, 32, 4, 64, 168, 94, 133, 233, 226, 25, 118, 120, 102, 5, 7, 36, 65, 202, 156, 174, 66, 4, 194, 184, 125, 74, 74, 183, 45, 43, 12, 171, 78, 194, 101, 92, 139, 62, 11, 242, 246, 170, 122, 40, 66, 192, 151, 134, 182, 91, 177, 83, 88, 9, 250, 174, 100, 15, 158, 209, 84, 238, 61, 226, 199, 93, 54, 200, 29, 103, 8, 3, 227, 237, 217, 87, 228, 169, 2, 136, 16, 2, 5, 179, 57, 78, 194, 76, 110, 204, 197, 82, 202, 195, 57, 254, 233, 97, 151, 194, 201, 47, 194, 129, 69, 78, 122, 172, 26, 106, 179, 43, 229, 11, 124, 147, 67, 216, 62, 176, 20, 59, 86, 120, 195, 117, 134, 141, 252, 35, 161, 0, 184, 39, 33, 172, 181, 219, 209, 113, 48, 122, 9, 122, 16, 61, 98, 188, 202, 138, 111, 24, 64, 94, 218, 182, 64, 27, 176, 152, 38, 96, 245, 214, 104, 162, 48, 136, 151, 214, 185, 8, 104, 54, 142, 116, 140, 196, 7, 235, 21, 229, 48, 35, 48, 28, 151, 1, 140, 93, 118, 167, 48, 4, 52, 86, 70, 15, 70, 192, 53, 82, 224, 211, 5, 130, 22, 239, 213, 196, 155, 149, 84, 209, 192, 162, 73, 64, 113, 196, 40, 196, 138, 191, 58, 35, 235, 157, 127, 125, 115, 98, 215, 75, 7, 50, 88, 51, 112, 116, 62, 146, 228, 211, 238, 48, 121, 63, 253, 232, 141, 49, 81, 96, 93, 218, 154, 102, 173, 220, 19, 129, 90, 176, 224, 240, 219, 150, 191, 37, 2, 83, 170, 203, 242, 162, 238, 165, 217, 76, 4, 25, 10, 172, 247, 206, 229, 167, 35, 47, 14, 131, 22, 137, 92, 199, 8, 108, 75, 132, 252, 8, 32, 205, 40, 211, 139, 104, 158, 44, 192, 40, 77, 157, 114, 125, 145, 238, 129, 72, 5, 133, 46, 221, 56, 224, 155, 16, 31, 94, 13, 14, 64, 253, 213, 159, 81, 4, 182, 142, 181, 89, 0, 107, 204, 31, 62, 82, 50, 182, 89, 158, 143, 48, 49, 4, 5, 175, 190, 27, 169, 100, 183, 220, 0, 176, 170, 50, 200, 122, 142, 249, 6, 127, 151, 223, 66, 9, 33, 106, 11, 58, 46, 225, 203, 175, 202, 10, 210, 76, 32, 81, 184, 172, 89, 144, 85, 130, 33, 206, 93, 251, 8, 193, 194, 246, 84, 93, 105, 14, 216, 225, 116, 185, 9, 92, 209, 218, 88, 93, 23, 204, 102, 24, 99, 254, 115, 152, 198, 44, 70, 120, 215, 108, 73, 13, 63, 115, 153, 187, 140, 254, 164, 155, 172, 120, 199, 168, 81, 37, 96, 225, 96, 194, 9, 184, 220, 63, 65, 9, 222, 45, 196, 207, 237, 242, 29, 5, 103, 215, 25, 79, 245, 122, 214, 10, 9, 246, 8, 1, 49, 245, 237, 22, 225, 222, 20, 119, 217, 11, 146, 187, 230, 4, 35, 153, 250, 25, 15, 131, 30, 212, 220, 116, 202, 180, 187, 119, 241, 20, 221, 137, 33, 101, 10, 227, 140, 114, 123, 60, 59, 43, 188, 222, 246, 42, 170, 9, 174, 8, 33, 46, 83, 14, 44, 21, 176, 130, 98, 68, 67, 143, 251, 231, 22, 68, 135, 9, 243, 73, 227, 16, 60, 217, 223, 19, 59, 143, 80, 50, 148, 156, 145, 163, 114, 138, 33, 172, 250, 70, 64, 199, 107, 4, 181, 179, 22, 210, 29, 49, 147, 17, 172, 94, 59, 7, 114, 79, 79, 119, 83, 99, 8, 163, 9, 88, 154, 166, 14, 121, 167, 80, 196, 119, 165, 108, 58, 4, 176, 68, 61, 63, 177, 51, 228, 135, 6, 5, 168, 81, 210, 75, 7, 137, 234, 204, 56, 172, 89, 139, 160, 246, 85, 160, 118, 99, 85, 38, 155, 251, 38, 83, 124, 224, 139, 134, 6, 84, 193, 98, 92, 46, 105, 96, 192, 150, 94, 138, 184, 154, 52, 229, 63, 39, 171, 115, 117, 88, 189, 157, 59, 98, 242, 88, 123, 90, 107, 18, 34, 182, 20, 15, 37, 48, 68, 155, 235, 153, 115, 112, 16, 213, 135, 42, 143, 190, 43, 70, 163, 62, 235, 46, 177, 89, 39, 170, 159, 229, 184, 216, 200, 89, 198, 245, 168, 35, 227, 9, 254, 41, 112, 69, 235, 209, 165, 129, 115, 107, 176, 159, 183, 184, 26, 52, 114, 236, 119, 86, 22, 77, 115, 144, 22, 43, 247, 164, 38, 194, 117, 83, 40, 51, 253, 196, 17, 241, 176, 70, 147, 16, 249, 35, 84, 246, 158, 202, 18, 66, 193, 218, 18, 69, 59, 252, 85, 117, 87, 207, 120, 191, 176, 45, 202, 254, 165, 107, 32, 24, 244, 19, 206, 243, 118, 225, 89, 203, 255, 239, 70, 102, 2, 203, 130, 82, 83, 198, 218, 254, 221, 153, 171, 241, 222, 43, 108, 88, 169, 120, 162, 54, 70, 73, 150, 102, 89, 20, 118, 25, 49, 195, 96, 68, 48, 130, 199, 152, 87, 117, 40, 7, 67, 53, 68, 204, 158, 178, 138, 206, 206, 141, 118, 234, 111, 196, 40, 197, 220, 152, 230, 23, 5, 238, 219, 127, 217, 57, 217, 42, 204, 64, 70, 30, 212, 221, 252, 86, 6, 39, 145, 249, 37, 253, 3, 3, 202, 31, 226, 205, 246, 48, 251, 113, 91, 231, 217, 63, 106, 166, 67, 134, 43, 49, 164, 4, 122, 47, 126, 177, 204, 223, 32, 54, 53, 123, 239, 38, 233, 250, 184, 3, 52, 41, 14, 132, 17, 77, 170, 193, 84, 70, 237, 197, 165, 52, 85, 155, 120, 79, 67, 245, 219, 194, 104, 126, 175, 25, 67, 5, 146, 117, 165, 181, 151, 38, 123, 36, 216, 231, 126, 54, 111, 34, 218, 147, 3, 4, 167, 8, 54, 173, 179, 236, 133, 32, 68, 166, 67, 46, 84, 130, 70, 218, 172, 203, 116, 253, 23, 141, 117, 92, 207, 71, 126, 39, 21, 49, 213, 18, 255, 199, 198, 79, 35, 23, 111, 142, 35, 172, 98, 57, 95, 44, 7, 93, 167, 131, 183, 133, 222, 112, 72, 241, 246, 49, 100, 197, 186, 239, 96, 107, 24, 171, 47, 161, 197, 255, 175, 27, 76, 233, 122, 100, 38, 44, 64, 23, 165, 246, 63, 196, 197, 29, 253, 110, 17, 187, 254, 18, 249, 172, 230, 187, 195, 12, 15, 0, 178, 203, 192, 204, 2, 233, 88, 204, 184, 204, 2, 92, 239, 73, 143, 184, 229, 99, 73, 10, 155, 48, 47, 70, 194, 30, 119, 122, 156, 116, 150, 253, 22, 41, 40, 168, 29, 103, 157, 54, 116, 228, 20, 198, 41, 75, 221, 152, 120, 224, 30, 31, 104, 162, 166, 100, 36, 240, 97, 66, 60, 207, 219, 164, 133, 127, 224, 24, 31, 30, 84, 101, 0, 214, 191, 114, 138, 186, 213, 82, 75, 202, 225, 138, 123, 150, 155, 39, 206, 167, 144, 193, 9, 123, 206, 39, 179, 215, 9, 185, 83, 44, 213, 145, 230, 84, 180, 166, 150, 75, 169, 172, 75, 177, 141, 16, 213, 253, 74, 35, 217, 113, 134, 69, 70, 207, 128, 44, 129, 43, 168, 136, 113, 23, 19, 82, 100, 195, 233, 56, 231, 41, 219, 187, 209, 37, 86, 59, 172, 39, 229, 111, 250, 105, 205, 10, 85, 254, 221, 120, 86, 24, 26, 239, 25, 223, 80, 22, 7, 192, 138, 68, 253, 182, 118, 215, 41, 124, 72, 193, 7, 198, 8, 153, 13, 240, 43, 156, 90, 228, 182, 148, 171, 66, 102, 198, 206, 79, 131, 101, 219, 9, 250, 234, 79, 148, 25, 141, 53, 27, 82, 102, 47, 51, 152, 206, 235, 81, 37, 85, 221, 213, 101, 236, 58, 1, 173, 252, 191, 39, 174, 16, 147, 85, 229, 59, 4, 209, 209, 112, 60, 225, 146, 189, 107, 17, 98, 175, 144, 36, 69, 12, 233, 128, 231, 226, 119, 52, 122, 233, 82, 140, 37, 110, 77, 160, 197, 215, 162, 182, 43, 130, 143, 240, 180, 185, 226, 33, 97, 1, 146, 62, 223, 168, 245, 49, 191, 87, 211, 81, 21, 240, 25, 155, 38, 172, 84, 2, 119, 187, 244, 93, 161, 211, 250, 37, 227, 129, 248, 71, 6, 193, 201, 84, 86, 71, 95, 187, 64, 150, 143, 55, 201, 46, 233, 131, 183, 202, 196, 77, 222, 141, 201, 19, 62, 112, 31, 77, 248, 238, 188, 107, 194, 188, 55, 130, 123, 63, 149, 151, 240, 212, 38, 166, 104, 77, 85, 187, 92, 163, 110, 226, 215, 53, 109, 185, 194, 52, 173, 133, 154, 48, 47, 203, 152, 117, 138, 103, 222, 255, 225, 221, 153, 88, 86, 189, 179, 69, 63, 238, 25, 26, 54, 212, 192, 26, 12, 155, 97, 248, 245, 79, 192, 161, 185, 151, 196, 107, 205, 74, 69, 26, 64, 3, 77, 95, 30, 118, 253, 204, 63, 126, 191, 209, 87, 173, 46, 108, 112, 168, 194, 209, 206, 199, 199, 130, 46, 229, 14, 48, 98, 231, 194, 216, 64, 154, 123, 235, 176, 178, 41, 39, 175, 18, 154, 32, 172, 66, 53, 229, 75, 255, 242, 205, 110, 117, 134, 244, 20, 1, 129, 103, 79, 236, 13, 185, 193, 239, 111, 9, 116, 239, 103, 212, 14, 54, 206, 143, 36, 252, 202, 239, 254, 188, 145, 223, 130, 240, 128, 101, 250, 177, 110, 213, 195, 194, 166, 138, 53, 118, 209, 44, 153, 41, 178, 214, 200, 29, 52, 181, 158, 176, 227, 70, 32, 115, 43, 58, 110, 241, 102, 145, 82, 112, 215, 245, 198, 115, 246, 199, 102, 180, 99, 252, 106, 179, 131, 107, 192, 49, 1, 17, 131, 39, 0, 31, 112, 226, 180, 161, 101, 200, 22, 195, 104, 228, 251, 255, 75, 128, 220, 186, 236, 234, 115, 217, 90, 92, 23, 37, 186, 90, 134, 49, 75, 215, 132, 129, 204, 5, 244, 18, 64, 45, 162, 136, 142, 114, 62, 51, 142, 226, 32, 129, 206, 45, 15, 107, 151, 169, 173, 139, 167, 182, 22, 153, 247, 159, 65, 3, 6, 100, 213, 181, 158, 27, 162, 96, 74, 137, 142, 107, 134, 109, 235, 16, 224, 113, 47, 127, 157, 38, 246, 106, 182, 92, 177, 82, 151, 215, 182, 247, 88, 185, 164, 210, 70, 179, 45, 208, 152, 167, 136, 116, 56, 224, 27, 254, 153, 144, 56, 222, 36, 108, 173, 172, 120, 177, 70, 129, 100, 191, 1, 20, 124, 239, 101, 4, 94, 110, 100, 58, 116, 193, 24, 151, 51, 152, 88, 215, 255, 252, 79, 245, 73, 160, 157, 114, 182, 56, 24, 101, 58, 183, 141, 33, 246, 152, 181, 229, 15, 167, 252, 226, 18, 246, 16, 229, 72, 78, 201, 126, 69, 80, 118, 181, 140, 50, 164, 54, 61, 142, 150, 21, 255, 248, 178, 134, 223, 118, 46, 172, 250, 68, 59, 200, 197, 101, 27, 100, 58, 59, 11, 168, 79, 124, 62, 186, 195, 68, 191, 187, 0, 198, 48, 130, 122, 113, 105, 219, 230, 46, 108, 86, 43, 189, 232, 65, 237, 206, 237, 132, 64, 5, 79, 216, 61, 41, 34, 123, 112, 189, 216, 91, 198, 44, 240, 209, 154, 240, 177, 81, 24, 161, 17, 248, 63, 13, 22, 176, 143, 33, 29, 181, 68, 83, 58, 244, 3, 60, 39, 17, 171, 134, 26, 100, 232, 21, 160, 132, 44, 217, 59, 122, 40, 154, 250, 171, 101, 166, 228, 185, 127, 134, 22, 219, 187, 217, 182, 154, 129, 248, 23, 76, 235, 195, 235, 245, 197, 49, 79, 122, 120, 154, 204, 238, 34, 116, 23, 169, 141, 76, 122, 98, 242, 115, 242, 98, 127, 212, 122, 120, 140, 211, 136, 128, 32, 233, 153, 235, 44, 221, 195, 233, 251, 41, 43, 91, 236, 149, 194, 155, 184, 222, 43, 9, 34, 64, 172, 167, 223, 130, 148, 241, 29, 113, 38, 221, 8, 105, 98, 6, 14, 198, 47, 81, 95, 174, 37, 171, 234, 85, 120, 149, 70, 136, 214, 145, 194, 213, 186, 187, 97, 180, 144, 183, 187, 163, 120, 178, 6, 217, 16, 178, 26, 147, 59, 200, 19, 135, 6, 8, 32, 159, 90, 128, 58, 148, 12, 132, 147, 165, 127, 54, 139, 176, 253, 119, 193, 229, 223, 7, 136, 244, 184, 80, 252, 204, 183, 12, 196, 23, 189, 66, 101, 166, 141, 177, 90, 69, 139, 132, 32, 247, 129, 214, 106, 196, 91, 175, 218, 252, 140, 242, 229, 0, 108, 196, 23, 148, 113, 115, 234, 16, 75, 18, 122, 124, 53, 21, 17, 173, 70, 248, 249, 30, 19, 167, 138, 66, 141, 241, 168, 185, 93, 27, 59, 94, 75, 222, 145, 104, 5, 14, 71, 220, 134, 111, 10, 238, 72, 94, 91, 147, 194, 32, 92, 164, 156, 229, 51, 157, 41, 154, 126, 200, 64, 150, 214, 35, 8, 58, 7, 214, 175, 37, 137, 111, 25, 189, 118, 172, 217, 180, 43, 203, 117, 105, 46, 77, 142, 243, 196, 69, 1, 41, 247, 224, 209, 234, 28, 97, 243, 190, 34, 224, 118, 209, 205, 150, 231, 163, 59, 217, 16, 59, 184, 23, 156, 8, 142, 157, 151, 163, 208, 199, 207, 76, 241, 245, 86, 127, 246, 123, 111, 65, 93, 51, 189, 162, 134, 222, 24, 133, 236, 243, 222, 242, 18, 100, 40, 173, 40, 127, 173, 177, 204, 55, 173, 86, 24, 71, 194, 148, 188, 228, 213, 9, 150, 35, 113, 44, 234, 32, 154, 82, 195, 156, 221, 85, 204, 250, 52, 45, 156, 154, 243, 228, 206, 96, 117, 240, 41, 168, 65, 18, 243, 51, 29, 148, 144, 247, 235, 62, 178, 50, 148, 20, 153, 138, 171, 39, 14, 2, 130, 167, 221, 67, 63, 180, 29, 249, 172, 141, 242, 11, 182, 235, 37, 142, 229, 26, 199, 232, 203, 61, 176, 207, 121, 153, 0, 214, 72, 249, 132, 183, 235, 138, 217, 10, 229, 224, 94, 59, 131, 100, 69, 37, 5, 174, 83, 151, 91, 192, 8, 204, 143, 228, 187, 152, 130, 22, 223, 104, 120, 171, 191, 216, 93, 170, 193, 82, 112, 20, 34, 119, 113, 216, 189, 79, 167, 204, 199, 36, 208, 197, 122, 164, 194, 176, 44, 254, 199, 136, 200, 16, 33, 253, 186, 31, 200, 50, 192, 179, 7, 151, 116, 141, 78, 251, 175, 136, 167, 122, 85, 210, 209, 146, 91, 127, 124, 219, 185, 2, 125, 46, 144, 77, 6, 101, 150, 167, 17, 53, 167, 206, 111, 151, 100, 139, 204, 249, 18, 160, 179, 169, 85, 84, 241, 67, 229, 114, 151, 29, 208, 252, 239, 233, 239, 133, 254, 126, 112, 5, 234, 76, 137, 174, 67, 20, 9, 231, 212, 215, 52, 167, 233, 254, 105, 172, 161, 236, 245, 138, 174, 128, 184, 32, 97, 60, 78, 130, 174, 61, 163, 120, 238, 171, 72, 11, 196, 219, 98, 14, 148, 180, 22, 133, 138, 18, 132, 255, 23, 248, 31, 116, 3, 171, 149, 153, 147, 89, 31, 93, 215, 12, 188, 215, 248, 245, 135, 63, 239, 51, 144, 2, 164, 14, 137, 241, 249, 47, 190, 207, 78, 153, 190, 78, 152, 20, 232, 73, 194, 29, 112, 186, 237, 86, 190, 10, 58, 186, 242, 126, 84, 191, 172, 48, 82, 234, 4, 165, 138, 254, 201, 215, 141, 132, 13, 235, 71, 51, 22, 214, 31, 138, 156, 65, 98, 160, 227, 89, 132, 17, 226, 253, 136, 93, 172, 100, 250, 126, 115, 105, 192, 48, 180, 133, 254, 42, 221, 196, 248, 173, 85, 161, 209, 203, 69, 127, 219, 64, 190, 123, 254, 226, 179, 13, 181, 224, 235, 109, 139, 17, 90, 2, 193, 216, 233, 164, 17, 71, 97, 39, 65, 140, 223, 52, 107, 89, 48, 192, 7, 28, 211, 41, 23, 133, 54, 38, 244, 221, 250, 136, 69, 42, 21, 146, 75, 92, 47, 7, 154, 124, 33, 116, 255, 212, 83, 209, 249, 2, 239, 74, 244, 26, 153, 165, 87, 247, 145, 189, 232, 167, 182, 7, 112, 17, 76, 192, 51, 162, 88, 96, 6, 6, 10, 55, 114, 70, 60, 213, 175, 48, 30, 118, 92, 9, 99, 86, 62, 193, 176, 57, 52, 194, 191, 83, 75, 122, 166, 150, 191, 132, 21, 20, 42, 33, 174, 188, 70, 232, 228, 1, 212, 44, 40, 164, 13, 227, 251, 42, 145, 176, 214, 185, 107, 41, 229, 170, 183, 87, 68, 231, 251, 215, 40, 198, 169, 246, 20, 48, 132, 68, 65, 1, 152, 164, 175, 7, 100, 135, 140, 71, 189, 12, 53, 70, 179, 95, 112, 239, 43, 60, 100, 61, 151, 109, 38, 251, 100, 55, 173, 206, 151, 179, 68, 90, 125, 128, 85, 253, 91, 157, 139, 180, 41, 208, 123, 255, 220, 224, 0, 248, 59, 154, 30, 47, 239, 109, 135, 65, 66, 60, 162, 110, 93, 18, 96, 239, 102, 68, 99, 24, 187, 186, 119, 253, 244, 164, 238, 21, 71, 218, 5, 30, 5, 214, 189, 147, 45, 165, 239, 173, 54, 5, 3, 213, 216, 220, 190, 251, 133, 98, 204, 224, 182, 56, 171, 32, 12, 154, 21, 80, 169, 225, 114, 202, 61, 75, 248, 127, 194, 89, 46, 163, 223, 204, 193, 65, 110, 7, 89, 228, 65, 165, 169, 139, 247, 251, 193, 227, 235, 70, 50, 183, 95, 102, 19, 32, 241, 39, 243, 187, 51, 3, 213, 135, 219, 233, 214, 157, 30, 193, 216, 127, 74, 69, 121, 242, 10, 88, 206, 68, 38, 18, 89, 38, 70, 69, 70, 144, 36, 112, 211, 108, 249, 78, 128, 251, 145, 119, 189, 55, 179, 76, 38, 133, 185, 207, 237, 16, 121, 83, 77, 25, 51, 167, 175, 124, 141, 155, 69, 178, 132, 77, 108, 148, 50, 128, 114, 32], - [239, 125, 183, 179, 72, 125, 194, 118, 230, 247, 11, 116, 188, 22, 115, 65, 3, 188, 3, 211, 49, 12, 24, 210, 30, 123, 12, 6, 69, 135, 204, 115, 212, 220, 163, 197, 112, 151, 154, 77, 218, 42, 51, 139, 3, 191, 3, 137, 183, 113, 92, 235, 20, 133, 117, 202, 152, 192, 237, 190, 81, 45, 218, 102, 221, 77, 83, 67, 204, 218, 8, 227, 173, 124, 188, 79, 35, 3, 181, 185, 49, 118, 79, 61, 116, 170, 113, 108, 14, 182, 2, 245, 31, 230, 47, 102, 109, 108, 243, 128, 49, 98, 40, 11, 88, 248, 150, 49, 115, 26, 245, 254, 134, 115, 48, 215, 157, 150, 99, 222, 58, 6, 188, 150, 205, 178, 193, 102, 63, 44, 220, 230, 248, 15, 123, 42, 135, 208, 43, 42, 73, 13, 55, 196, 51, 236, 19, 42, 6, 215, 55, 61, 200, 79, 90, 160, 93, 80, 71, 223, 110, 117, 94, 174, 53, 89, 71, 49, 217, 166, 37, 89, 118, 7, 235, 196, 10, 22, 88, 48, 95, 29, 63, 90, 89, 146, 130, 128, 101, 0, 255, 21, 163, 197, 174, 27, 152, 159, 141, 132, 157, 149, 119, 11, 135, 6, 46, 138, 161, 159, 97, 68, 114, 31, 60, 213, 217, 217, 48, 224, 198, 212, 52, 83, 61, 139, 21, 216, 200, 0, 31, 162, 76, 138, 252, 154, 97, 128, 207, 136, 153, 91, 187, 124, 255, 254, 183, 102, 120, 168, 102, 175, 100, 206, 237, 137, 4, 36, 145, 195, 27, 10, 220, 182, 148, 58, 88, 231, 22, 38, 230, 232, 36, 52, 128, 179, 126, 129, 248, 63, 55, 51, 211, 214, 90, 57, 98, 2, 19, 89, 157, 142, 104, 249, 101, 244, 227, 166, 37, 48, 67, 98, 103, 202, 81, 105, 107, 118, 238, 40, 75, 196, 175, 80, 200, 19, 40, 44, 103, 70, 22, 151, 146, 103, 27, 47, 89, 30, 100, 226, 98, 57, 134, 161, 30, 57, 161, 204, 176, 156, 64, 107, 232, 7, 93, 120, 185, 3, 62, 114, 146, 11, 166, 36, 56, 123, 186, 141, 246, 116, 63, 15, 75, 21, 119, 184, 200, 162, 239, 209, 123, 188, 43, 216, 140, 179, 201, 149, 218, 243, 172, 13, 58, 41, 73, 149, 200, 170, 10, 8, 234, 223, 105, 75, 215, 18, 10, 252, 220, 71, 76, 215, 18, 8, 202, 66, 68, 141, 1, 201, 142, 61, 11, 203, 123, 31, 202, 5, 170, 145, 188, 117, 52, 36, 224, 167, 21, 111, 99, 254, 91, 248, 2, 176, 82, 205, 203, 120, 140, 225, 71, 61, 10, 208, 168, 118, 53, 34, 221, 65, 116, 248, 25, 30, 132, 58, 152, 252, 112, 130, 80, 241, 228, 66, 87, 27, 52, 2, 166, 240, 73, 76, 139, 12, 27, 25, 143, 214, 144, 223, 212, 210, 232, 182, 118, 186, 167, 183, 85, 54, 191, 10, 235, 10, 3, 138, 66, 34, 24, 203, 113, 145, 144, 67, 209, 195, 28, 97, 178, 166, 175, 4, 33, 168, 149, 144, 198, 200, 185, 225, 174, 235, 199, 1, 97, 8, 140, 185, 227, 184, 34, 79, 25, 131, 196, 213, 227, 23, 227, 205, 243, 174, 57, 225, 66, 129, 160, 122, 203, 1, 139, 128, 69, 43, 145, 71, 75, 47, 49, 125, 150, 95, 206, 68, 8, 187, 111, 126, 61, 136, 46, 219, 9, 202, 123, 83, 54, 184, 159, 79, 244, 171, 40, 135, 193, 21, 209, 234, 187, 60, 25, 182, 44, 224, 189, 130, 192, 151, 96, 226, 199, 224, 219, 166, 63, 141, 15, 9, 179, 67, 84, 89, 74, 66, 58, 109, 227, 112, 218, 98, 81, 69, 103, 122, 37, 236, 135, 23, 143, 252, 99, 148, 172, 238, 234, 63, 212, 46, 179, 84, 111, 240, 84, 106, 218, 180, 124, 198, 156, 93, 55, 124, 70, 153, 79, 189, 188, 36, 226, 75, 46, 184, 145, 72, 201, 1, 198, 60, 145, 164, 151, 206, 144, 162, 50, 173, 13, 202, 119, 92, 71, 64, 252, 5, 5, 140, 187, 219, 248, 199, 207, 73, 114, 220, 252, 239, 28, 81, 54, 178, 125, 73, 44, 183, 43, 16, 203, 126, 102, 223, 97, 234, 252, 137, 121, 240, 239, 3, 249, 113, 241, 55, 83, 64, 210, 159, 15, 155, 215, 217, 197, 44, 21, 253, 56, 115, 140, 169, 215, 238, 20, 242, 147, 70, 171, 6, 247, 196, 73, 90, 241, 252, 244, 231, 253, 146, 28, 216, 123, 7, 17, 177, 154, 81, 63, 142, 13, 129, 147, 74, 166, 28, 209, 58, 90, 47, 42, 26, 2, 223, 247, 217, 164, 31, 53, 200, 18, 39, 74, 169, 205, 243, 120, 16, 139, 130, 22, 158, 46, 186, 172, 146, 189, 175, 136, 164, 145, 146, 27, 176, 223, 136, 13, 91, 194, 118, 22, 83, 52, 9, 68, 115, 110, 192, 42, 231, 234, 212, 169, 71, 100, 133, 171, 169, 60, 102, 109, 33, 228, 19, 204, 186, 106, 68, 227, 67, 137, 108, 227, 14, 137, 154, 112, 190, 237, 215, 54, 137, 144, 217, 52, 35, 183, 74, 136, 22, 245, 234, 102, 20, 133, 154, 57, 74, 187, 124, 93, 33, 55, 125, 43, 100, 249, 235, 62, 205, 84, 178, 112, 59, 58, 67, 169, 137, 95, 199, 243, 197, 246, 123, 112, 102, 184, 43, 155, 37, 219, 124, 21, 24, 233, 34, 113, 148, 130, 173, 156, 176, 123, 223, 13, 227, 29, 208, 109, 207, 118, 38, 11, 107, 89, 222, 169, 251, 123, 101, 27, 136, 85, 3, 197, 143, 85, 83, 127, 214, 194, 147, 164, 73, 45, 153, 7, 104, 108, 134, 55, 154, 225, 37, 238, 204, 145, 240, 12, 65, 228, 99, 191, 192, 197, 203, 161, 199, 252, 136, 224, 134, 61, 107, 129, 15, 154, 155, 42, 42, 230, 208, 46, 201, 24, 19, 97, 1, 251, 224, 139, 245, 52, 28, 177, 216, 150, 242, 0, 40, 61, 222, 204, 32, 197, 213, 65, 64, 242, 60, 168, 205, 173, 230, 154, 137, 34, 68, 183, 0, 93, 14, 151, 153, 46, 159, 59, 152, 112, 30, 53, 27, 217, 253, 181, 51, 201, 214, 85, 100, 82, 141, 103, 129, 165, 207, 28, 138, 28, 163, 248, 214, 18, 130, 143, 254, 152, 125, 83, 244, 219, 36, 16, 248, 206, 46, 224, 230, 69, 132, 71, 84, 60, 59, 4, 185, 217, 18, 161, 139, 221, 164, 68, 209, 132, 230, 154, 44, 114, 162, 222, 64, 180, 18, 158, 86, 90, 59, 120, 98, 254, 134, 138, 131, 59, 98, 30, 189, 96, 74, 72, 236, 221, 17, 252, 103, 126, 64, 1, 90, 239, 179, 214, 71, 28, 212, 29, 59, 239, 165, 131, 207, 123, 116, 148, 59, 197, 215, 11, 36, 29, 80, 110, 15, 34, 198, 241, 97, 170, 254, 128, 203, 213, 120, 116, 175, 96, 28, 40, 159, 71, 115, 212, 197, 240, 177, 33, 172, 65, 161, 84, 56, 147, 168, 92, 107, 87, 25, 112, 194, 213, 58, 62, 24, 168, 124, 211, 15, 227, 233, 83, 188, 8, 76, 36, 185, 217, 147, 9, 234, 113, 243, 169, 184, 127, 53, 77, 232, 79, 55, 12, 191, 50, 99, 9, 2, 13, 167, 185, 125, 241, 186, 137, 242, 96, 8, 202, 108, 210, 202, 122, 8, 144, 231, 176, 91, 150, 71, 114, 187, 249, 248, 222, 91, 175, 57, 248, 104, 195, 128, 11, 157, 96, 173, 52, 161, 41, 124, 41, 6, 40, 68, 171, 164, 197, 188, 36, 72, 118, 64, 213, 43, 151, 18, 89, 61, 94, 243, 23, 58, 40, 252, 130, 63, 38, 242, 153, 7, 34, 112, 44, 26, 25, 136, 199, 187, 9, 93, 101, 48, 162, 159, 87, 232, 190, 135, 131, 73, 206, 121, 25, 3, 247, 84, 80, 231, 184, 16, 71, 186, 86, 18, 123, 34, 32, 252, 97, 195, 96, 119, 241, 45, 73, 178, 233, 224, 42, 100, 7, 1, 32, 158, 87, 31, 50, 180, 188, 250, 86, 157, 55, 102, 68, 44, 145, 199, 143, 95, 128, 98, 221, 199, 144, 166, 101, 108, 213, 87, 184, 215, 243, 196, 179, 29, 78, 186, 7, 174, 164, 70, 181, 246, 154, 130, 252, 49, 178, 222, 151, 87, 1, 203, 88, 176, 13, 2, 63, 31, 122, 249, 8, 157, 31, 255, 9, 20, 48, 27, 238, 239, 46, 217, 156, 77, 185, 204, 63, 34, 146, 59, 141, 72, 75, 22, 53, 168, 226, 40, 12, 174, 243, 146, 156, 164, 2, 53, 49, 201, 103, 224, 94, 66, 35, 223, 26, 243, 235, 72, 108, 16, 83, 107, 59, 224, 237, 225, 140, 188, 59, 48, 226, 132, 185, 135, 79, 21, 36, 115, 218, 246, 52, 86, 88, 39, 48, 111, 175, 109, 85, 223, 169, 111, 1, 130, 75, 141, 149, 117, 76, 122, 231, 179, 114, 136, 123, 234, 192, 47, 218, 78, 169, 167, 236, 47, 86, 6, 111, 137, 201, 117, 223, 110, 225, 59, 253, 202, 116, 2, 175, 24, 30, 252, 214, 142, 189, 28, 4, 166, 194, 74, 223, 93, 204, 29, 52, 221, 243, 234, 154, 230, 224, 84, 222, 138, 160, 236, 30, 239, 91, 71, 137, 104, 157, 138, 224, 208, 180, 138, 220, 52, 75, 203, 255, 110, 181, 88, 17, 47, 70, 139, 254, 255, 93, 114, 246, 3, 238, 47, 29, 85, 187, 236, 175, 183, 60, 28, 112, 249, 189, 104, 186, 56, 113, 203, 32, 206, 193, 242, 254, 115, 230, 218, 148, 253, 14, 108, 219, 48, 224, 101, 186, 152, 74, 203, 255, 3, 23, 254, 235, 146, 121, 200, 117, 245, 9, 43, 243, 143, 231, 227, 127, 217, 147, 196, 98, 153, 180, 36, 178, 137, 58, 213, 206, 33, 47, 149, 151, 2, 23, 155, 245, 162, 214, 49, 34, 40, 251, 148, 109, 49, 4, 229, 131, 20, 97, 28, 182, 198, 106, 184, 205, 216, 204, 172, 243, 193, 30, 90, 190, 1, 234, 59, 239, 66, 105, 171, 80, 236, 82, 128, 130, 111, 164, 7, 69, 186, 80, 223, 26, 141, 128, 198, 242, 131, 33, 7, 214, 190, 94, 176, 97, 28, 10, 122, 89, 100, 108, 228, 29, 35, 191, 16, 5, 60, 37, 9, 180, 130, 79, 70, 24, 92, 233, 17, 101, 1, 172, 22, 143, 188, 124, 123, 229, 4, 97, 2, 39, 108, 72, 230, 78, 219, 240, 187, 209, 175, 100, 54, 249, 200, 187, 89, 122, 206, 114, 39, 119, 2, 86, 196, 202, 226, 27, 208, 139, 163, 13, 145, 188, 6, 136, 46, 17, 150, 237, 229, 20, 107, 128, 130, 222, 236, 94, 117, 9, 86, 194, 31, 228, 102, 70, 62, 232, 38, 146, 204, 72, 248, 44, 207, 97, 84, 245, 53, 157, 56, 95, 139, 106, 187, 221, 122, 145, 62, 28, 249, 32, 130, 156, 249, 57, 183, 231, 67, 175, 158, 231, 100, 37, 63, 186, 74, 209, 240, 196, 186, 95, 83, 165, 126, 101, 166, 214, 19, 135, 156, 8, 47, 90, 104, 127, 61, 74, 177, 65, 16, 249, 247, 209, 80, 12, 126, 206, 161, 237, 150, 67, 89, 34, 181, 181, 57, 124, 57, 250, 236, 199, 234, 155, 218, 100, 123, 118, 59, 168, 141, 78, 43, 146, 233, 229, 111, 173, 182, 107, 168, 113, 121, 174, 77, 183, 17, 81, 88, 127, 129, 114, 51, 40, 132, 152, 183, 78, 112, 5, 243, 30, 137, 90, 123, 34, 136, 82, 23, 74, 239, 148, 171, 174, 221, 81, 15, 104, 253, 79, 190, 200, 53, 69, 243, 183, 210, 149, 97, 16, 204, 243, 232, 124, 239, 44, 255, 211, 80, 73, 202, 9, 219, 213, 93, 223, 200, 187, 111, 115, 56, 218, 103, 152, 98, 12, 154, 41, 142, 138, 132, 209, 250, 158, 29, 168, 153, 218, 47, 165, 227, 8, 181, 194, 9, 88, 117, 195, 161, 248, 102, 90, 216, 255, 133, 184, 86, 226, 155, 184, 206, 254, 25, 201, 199, 157, 211, 182, 35, 128, 216, 125, 12, 229, 113, 176, 177, 137, 95, 60, 242, 209, 198, 96, 38, 209, 31, 118, 39, 245, 9, 89, 227, 153, 243, 40, 7, 6, 118, 247, 99, 5, 224, 242, 86, 24, 236, 211, 236, 161, 80, 178, 83, 77, 199, 62, 143, 199, 190, 118, 105, 92, 149, 17, 66, 172, 151, 142, 199, 179, 19, 175, 85, 208, 0, 255, 253, 92, 113, 165, 146, 84, 61, 18, 71, 56, 216, 98, 115, 114, 147, 106, 248, 213, 99, 32, 233, 141, 167, 62, 114, 3, 51, 211, 248, 18, 190, 227, 122, 54, 72, 142, 92, 46, 50, 244, 97, 51, 192, 176, 77, 195, 184, 178, 45, 40, 210, 215, 118, 180, 30, 176, 81, 198, 98, 204, 11, 90, 109, 48, 228, 122, 130, 239, 17, 100, 81, 1, 189, 87, 47, 81, 126, 138, 231, 122, 240, 242, 55, 225, 23, 251, 215, 119, 231, 125, 191, 202, 113, 156, 79, 115, 187, 49, 189, 87, 115, 241, 182, 70, 1, 168, 53, 199, 234, 17, 136, 98, 162, 54, 85, 225, 59, 168, 184, 47, 139, 28, 60, 233, 216, 137, 152, 168, 208, 222, 102, 49, 35, 192, 204, 199, 225, 170, 119, 116, 178, 139, 14, 218, 36, 133, 96, 11, 223, 90, 168, 94, 197, 171, 26, 9, 16, 97, 143, 30, 2, 23, 44, 7, 152, 201, 60, 245, 81, 245, 177, 87, 63, 182, 161, 51, 40, 205, 214, 69, 33, 29, 231, 182, 16, 82, 71, 206, 207, 61, 37, 197, 199, 145, 68, 167, 7, 218, 148, 9, 122, 28, 246, 14, 212, 75, 247, 175, 74, 212, 250, 134, 94, 88, 128, 255, 239, 204, 154, 232, 205, 185, 57, 231, 14, 128, 93, 206, 19, 163, 41, 108, 131, 118, 128, 77, 204, 157, 157, 34, 47, 195, 178, 8, 56, 173, 22, 156, 153, 252, 130, 1, 33, 166, 35, 80, 21, 156, 62, 205, 38, 243, 214, 125, 204, 156, 172, 176, 220, 109, 208, 100, 155, 220, 112, 6, 198, 14, 225, 191, 8, 229, 234, 144, 216, 3, 119, 235, 213, 100, 48, 197, 61, 208, 34, 176, 216, 172, 60, 62, 165, 97, 137, 123, 88, 23, 221, 99, 5, 158, 211, 190, 68, 210, 19, 65, 237, 69, 32, 8, 185, 236, 149, 60, 184, 1, 37, 51, 163, 2, 223, 5, 111, 150, 63, 54, 235, 245, 109, 166, 132, 44, 194, 28, 165, 207, 125, 220, 183, 12, 90, 109, 10, 104, 74, 166, 62, 251, 137, 145, 184, 246, 90, 36, 176, 247, 76, 36, 219, 174, 177, 172, 111, 208, 172, 221, 247, 108, 82, 188, 148, 194, 13, 116, 251, 147, 63, 180, 20, 78, 165, 211, 189, 2, 171, 160, 249, 135, 50, 51, 160, 100, 82, 74, 203, 205, 87, 239, 203, 130, 19, 137, 123, 1, 229, 45, 8, 59, 25, 154, 159, 23, 180, 79, 8, 60, 178, 160, 109, 228, 185, 230, 252, 108, 95, 36, 27, 25, 203, 134, 214, 122, 51, 165, 162, 136, 246, 249, 57, 164, 253, 206, 194, 236, 141, 20, 248, 194, 74, 94, 163, 245, 91, 194, 200, 216, 11, 119, 251, 189, 46, 141, 160, 49, 28, 27, 46, 14, 16, 36, 37, 145, 177, 165, 117, 43, 134, 38, 244, 227, 185, 3, 101, 195, 201, 20, 238, 153, 214, 28, 237, 111, 140, 252, 247, 192, 58, 4, 209, 182, 93, 93, 9, 105, 10, 164, 100, 67, 26, 182, 162, 148, 246, 134, 193, 215, 42, 237, 40, 121, 54, 15, 228, 8, 56, 170, 3, 170, 57, 250, 10, 68, 80, 182, 236, 134, 2, 139, 1, 4, 245, 130, 124, 44, 178, 221, 96, 160, 59, 218, 176, 174, 247, 204, 28, 83, 79, 183, 56, 30, 142, 239, 40, 36, 77, 10, 246, 176, 219, 102, 236, 46, 30, 198, 149, 25, 197, 124, 25, 95, 64, 92, 79, 25, 159, 182, 54, 135, 99, 62, 153, 19, 130, 170, 35, 126, 235, 158, 174, 224, 120, 216, 189, 34, 115, 163, 242, 51, 206, 20, 250, 171, 233, 6, 170, 97, 120, 78, 160, 88, 175, 65, 232, 152, 204, 67, 216, 244, 118, 158, 7, 131, 149, 251, 244, 229, 71, 191, 139, 180, 40, 38, 183, 30, 57, 26, 32, 242, 38, 36, 224, 116, 8, 142, 180, 247, 200, 221, 59, 63, 198, 130, 100, 186, 73, 114, 78, 253, 153, 107, 6, 39, 7, 98, 129, 49, 95, 95, 178, 152, 40, 87, 145, 102, 185, 244, 146, 182, 37, 161, 210, 15, 1, 135, 187, 161, 254, 106, 38, 31, 193, 21, 199, 32, 151, 193, 176, 93, 34, 21, 13, 177, 242, 229, 233, 49, 168, 33, 170, 28, 183, 139, 32, 238, 31, 37, 124, 22, 105, 147, 156, 145, 9, 240, 173, 226, 24, 197, 145, 226, 139, 24, 116, 171, 12, 225, 214, 222, 105, 88, 246, 120, 230, 103, 179, 210, 152, 87, 129, 119, 63, 15, 59, 110, 82, 254, 8, 242, 59, 196, 198, 92, 240, 150, 244, 125, 43, 149, 148, 0, 207, 196, 80, 242, 175, 150, 57, 108, 90, 175, 127, 210, 91, 106, 27, 132, 213, 157, 53, 141, 96, 31, 190, 208, 21, 198, 14, 55, 120, 49, 204, 123, 255, 156, 107, 30, 57, 54, 18, 217, 238, 193, 31, 23, 184, 182, 210, 255, 208, 9, 173, 54, 50, 173, 199, 128, 247, 163, 208, 48, 244, 222, 225, 98, 177, 232, 102, 110, 62, 143, 109, 212, 99, 112, 123, 44, 150, 166, 87, 63, 180, 8, 195, 56, 194, 156, 119, 2, 218, 90, 183, 222, 181, 118, 55, 140, 143, 189, 38, 94, 79, 29, 225, 43, 145, 198, 206, 126, 53, 169, 153, 56, 181, 94, 163, 150, 178, 5, 44, 168, 37, 236, 164, 40, 193, 90, 141, 197, 113, 225, 245, 155, 33, 170, 181, 192, 117, 38, 81, 0, 0, 158, 13, 126, 124, 26, 85, 103, 220, 85, 8, 175, 49, 142, 20, 251, 121, 175, 156, 60, 224, 45, 120, 15, 158, 6, 81, 177, 57, 20, 75, 33, 194, 32, 150, 254, 201, 55, 150, 209, 239, 224, 42, 197, 182, 145, 191, 124, 77, 112, 195, 116, 230, 123, 122, 24, 217, 74, 165, 168, 114, 58, 11, 231, 131, 239, 2, 183, 241, 14, 63, 189, 64, 64, 182, 21, 40, 43, 104, 168, 43, 181, 187, 163, 230, 34, 113, 227, 55, 124, 89, 27, 111, 35, 173, 60, 138, 89, 15, 129, 213, 73, 174, 33, 57, 192, 127, 246, 119, 83, 171, 127, 184, 88, 63, 18, 50, 76, 180, 236, 40, 190, 159, 170, 34, 87, 255, 59, 91, 84, 65, 252, 167, 184, 216, 179, 147, 60, 25, 237, 69, 41, 56, 134, 58, 139, 211, 59, 163, 21, 25, 227, 168, 248, 135, 151, 157, 95, 167, 230, 171, 47, 197, 225, 213, 154, 249, 13, 127, 21, 82, 12, 22, 94, 15, 60, 188, 123, 43, 205, 101, 220, 123, 73, 246, 52, 10, 219, 163, 150, 52, 47, 41, 122, 150, 209, 148, 119, 225, 230, 245, 151, 47, 90, 139, 166, 88, 202, 210, 104, 118, 144, 171, 210, 31, 143, 250, 36, 248, 116, 107, 232, 138, 94, 213, 233, 50, 86, 118, 107, 250, 7, 26, 159, 51, 75, 34, 15, 207, 181, 54, 87, 161, 13, 246, 124, 44, 9, 76, 163, 145, 185, 133, 245, 186, 192, 112, 85, 66, 107, 129, 227, 124, 213, 79, 77, 71, 255, 247, 187, 113, 49, 101, 246, 19, 48, 217, 223, 124, 169, 222, 208, 17, 119, 181, 120, 97, 77, 123, 31, 37, 60, 0, 93, 192, 216, 163, 179, 200, 58, 252, 189, 175, 255, 144, 5, 247, 64, 33, 212, 231, 157, 4, 151, 191, 175, 11, 81, 61, 29, 30, 26, 205, 155, 59, 20, 170, 83, 92, 55, 243, 32, 22, 170, 191, 175, 148, 184, 96, 64, 109, 132, 18, 36, 61, 89, 115, 207, 106, 49, 108, 205, 26, 132, 87, 35, 145, 26, 77, 85, 223, 46, 16, 149, 192, 191, 199, 248, 236, 153, 28, 232, 194, 125, 139, 244, 19, 225, 91, 11, 132, 69, 102, 42, 110, 85, 133, 102, 203, 130, 36, 116, 247, 196, 64, 248, 151, 77, 190, 226, 3, 33, 134, 157, 1, 83, 108, 34, 1, 34, 222, 46, 98, 56, 9, 69, 63, 62, 207, 151, 179, 209, 143, 246, 41, 222, 126, 241, 168, 130, 80, 23, 105, 56, 244, 186, 58, 222, 81, 67, 228, 38, 238, 216, 220, 37, 200, 110, 73, 187, 182, 217, 32, 196, 190, 86, 221, 142, 240, 38, 106, 53, 247, 14, 89, 44, 214, 139, 242, 4, 117, 71, 58, 2, 149, 7, 82, 207, 158, 206, 52, 237, 3, 132, 238, 238, 44, 135, 87, 22, 44, 213, 251, 227, 89, 105, 123, 29, 244, 94, 159, 201, 246, 64, 27, 211, 83, 79, 84, 106, 224, 162, 74, 101, 140, 134, 60, 176, 247, 30, 25, 111, 224, 232, 79, 113, 140, 251, 85, 123, 230, 29, 232, 254, 62, 122, 139, 125, 255, 31, 80, 60, 252, 11, 112, 203, 223, 114, 82, 124, 248, 88, 34, 137, 124, 39, 180, 130, 200, 148, 166, 149, 81, 180, 125, 121, 226, 4, 74, 37, 71, 124, 140, 154, 144, 120, 76, 250, 234, 151, 255, 55, 186, 141, 187, 168, 202, 218, 171, 243, 14, 101, 157, 239, 193, 151, 173, 227, 136, 216, 11, 63, 199, 141, 87, 18, 138, 248, 109, 59, 177, 32, 226, 237, 38, 32, 20, 243, 94, 76, 59, 224, 209, 175, 181, 53, 107, 246, 168, 226, 213, 198, 85, 166, 78, 37, 106, 119, 202, 67, 1, 79, 109, 81, 253, 206, 124, 255, 229, 251, 232, 228, 127, 78, 200, 72, 231, 205, 102, 183, 22, 150, 27, 31, 164, 1, 131, 151, 108, 33, 116, 69, 53, 72, 34, 110, 96, 164, 8, 156, 130, 90, 249, 170, 196, 103, 205, 90, 48, 206, 229, 227, 30, 69, 36, 53, 142, 14, 48, 66, 126, 121, 246, 99, 219, 238, 207, 200, 199, 71, 113, 229, 74, 15, 106, 54, 150, 112, 157, 153, 181, 148, 44, 105, 194, 7, 157, 251, 131, 129, 96, 37, 200, 241, 100, 173, 249, 111, 27, 234, 19, 173, 53, 211, 190, 160, 187, 219, 13, 171, 189, 155, 219, 77, 5, 35, 2, 97, 63, 197, 66, 118, 49, 58, 205, 102, 69, 208, 240, 254, 66, 67, 155, 223, 83, 235, 240, 135, 61, 25, 171, 57, 125, 26, 150, 127, 82, 85, 58, 1, 79, 66, 172, 71, 234, 17, 48, 205, 206, 173, 196, 217, 64, 76, 138, 250, 235, 2, 11, 134, 245, 20, 44, 218, 71, 160, 32, 239, 77, 92, 163, 111, 210, 254, 15, 240, 183, 8, 218, 105, 3, 102, 78, 170, 255, 81, 213, 124, 147, 130, 154, 71, 79, 28, 174, 130, 208, 149, 58, 222, 215, 152, 148, 151, 157, 29, 4, 160, 114, 33, 154, 141, 124, 202, 221, 204, 210, 123, 30, 167, 79, 68, 26, 134, 163, 56, 80, 80, 173, 57, 234, 99, 244, 204, 211, 129, 250, 23, 114, 31, 34, 54, 117, 61, 154, 141, 119, 27, 196, 82, 171, 135, 213, 20, 217, 58, 80, 64, 94, 12, 35, 253, 68, 241, 234, 181, 121, 60, 70, 75, 75, 1, 126, 173, 211, 168, 146, 250, 207, 23, 70, 165, 149, 154, 176, 124, 123, 32, 95, 152, 243, 188, 211, 12, 2, 78, 46, 123, 70, 12, 197, 82, 115, 85, 251, 17, 65, 72, 246, 165, 24, 157, 92, 133, 98, 186, 126, 197, 12, 142, 159, 77, 156, 73, 109, 242, 197, 127, 74, 53, 102, 204, 153, 18, 105, 142, 51, 185, 240, 189, 225, 102, 116, 209, 4, 141, 32, 139, 4, 93, 51, 144, 82, 8, 88, 133, 173, 116, 180, 193, 196, 231, 253, 127, 180, 110, 111, 247, 22, 166, 239, 117, 144, 157, 136, 132, 117, 254, 96, 227, 148, 226, 144, 201, 132, 175, 175, 208, 41, 12, 14, 101, 140, 48, 153, 54, 70, 199, 189, 212, 12, 190, 21, 57, 185, 28, 149, 185, 31, 90, 241, 79, 247, 126, 127, 27, 244, 150, 46, 234, 151, 252, 182, 38, 226, 11, 141, 136, 48, 45, 17, 141, 137, 215, 49, 19, 250, 21, 244, 212, 71, 142, 185, 181, 132, 155, 96, 41, 135, 97, 242, 202, 207, 176, 124, 227, 76, 100, 221, 112, 196, 2, 111, 226, 251, 14, 26, 118, 208, 116, 197, 115, 115, 6, 113, 34, 54, 230, 246, 138, 224, 82, 255, 252, 120, 122, 224, 236, 204, 26, 120, 161, 240, 160, 247, 108, 105, 55, 172, 115, 215, 217, 179, 38, 137, 125, 77, 250, 40, 42, 163, 217, 121, 181, 68, 193, 190, 253, 34, 122, 2, 237, 141, 159, 203, 112, 233, 170, 68, 150, 150, 28, 98, 234, 59, 90, 31, 36, 13, 221, 209, 203, 219, 165, 252, 151, 88, 144, 255, 182, 84, 87, 21, 206, 145, 50, 61, 36, 113, 89, 75, 24, 81, 11, 116, 228, 133, 57, 222, 245, 52, 57, 88, 180, 24, 194, 120, 98, 143, 196, 56, 18, 89, 6, 179, 165, 56, 121, 97, 216, 23, 146, 236, 152, 0, 23, 21, 91, 79, 17, 205, 76, 9, 219, 202, 21, 249, 243, 146, 165, 118, 91, 243, 240, 148, 11, 166, 32, 98, 86, 122, 191, 213, 194, 160, 133, 24, 122, 178, 58, 196, 97, 194, 247, 133, 79, 160, 118, 13, 100, 229, 53, 34, 79, 167, 59, 153, 45, 98, 155, 217, 156, 129, 196, 53, 136, 94, 125, 147, 100, 76, 110, 69, 85, 35, 59, 61, 246, 49, 162, 171, 79, 229, 128, 199, 17, 26, 235, 135, 108, 80, 179, 203, 121, 69, 138, 242, 148, 224, 186, 81, 47, 158, 11, 168, 112, 151, 103, 127, 175, 47, 162, 80, 143, 135, 100, 5, 186, 51, 153, 68, 175, 12, 211, 122, 89, 109, 5, 66, 246, 252, 6, 226, 108, 195, 72, 171, 131, 82, 12, 8, 193, 138, 131, 64, 235, 45, 216, 136, 0, 49, 102, 187, 35, 191, 93, 219, 118, 167, 51, 241, 30, 77, 117, 64, 153, 84, 243, 70, 25, 187, 69, 67, 1, 121, 224, 240, 220, 150, 46, 217, 211, 75, 136, 218, 240, 81, 31, 2, 34, 108, 235, 124, 17, 221, 63, 89, 85, 35, 160, 183, 136, 153, 9, 161, 109, 129, 237, 17, 190, 52, 247, 2, 190, 128, 70, 25, 77, 152, 61, 177, 180, 107, 226, 98, 185, 108, 174, 180, 37, 41, 51, 184, 34, 211, 230, 202, 167, 14, 152, 88, 35, 103, 199, 227, 51, 244, 12, 144, 31, 175, 2, 178, 113, 189, 8, 45, 151, 7, 158, 71, 136, 98, 48, 110, 63, 189, 35, 140, 68, 185, 218, 234, 14, 181, 131, 158, 148, 137, 84, 129, 191, 215, 71, 69, 170, 28, 49, 213, 126, 165, 122, 144, 169, 182, 162, 125, 32, 214, 30, 49, 139, 124, 158, 80, 215, 0, 164, 82, 189, 142, 133, 134, 177, 208, 128, 88, 56, 144, 129, 242, 32, 131, 66, 216, 58, 22, 131, 193, 155, 107, 112, 205, 54, 231, 77, 97, 130, 12, 53, 155, 197, 158, 130, 157, 128, 72, 158, 243, 68, 83, 238, 167, 18, 226, 212, 96, 24, 84, 222, 178, 219, 49, 136, 91, 134, 231, 94, 218, 54, 45, 70, 125, 199, 75, 37, 171, 77, 107, 72, 152, 79, 103, 49, 230, 72, 63, 244, 73, 119, 24, 61, 166, 81, 163, 149, 104, 192, 227, 252, 92, 171, 157, 4, 104, 86, 222, 37, 13, 153, 214, 37, 40, 80, 167, 254, 59, 159, 36, 113, 61, 11, 13, 99, 85, 223, 191, 133, 64, 62, 61, 0, 54, 4, 109, 230, 238, 8, 178, 192, 228, 218, 211, 174, 8, 138, 44, 234, 89, 135, 176, 240, 202, 77, 14, 119, 184, 212, 4, 48, 57, 51, 229, 105, 174, 187, 156, 61, 104, 245, 222, 176, 126, 38, 173, 75, 218, 181, 46, 20, 226, 18, 126, 152, 97, 141, 250, 207, 239, 53, 208, 41, 81, 157, 149, 144, 213, 83, 124, 55, 17, 13, 0, 167, 33, 122, 22, 76, 11, 97, 140, 195, 100, 108, 173, 171, 59, 58, 226, 221, 138, 176, 72, 43, 201, 43, 80, 110, 38, 31, 216, 179, 112, 172, 98, 48, 136, 19, 195, 104, 76, 217, 192, 53, 34, 118, 201, 69, 97, 180, 224, 53, 198, 184, 239, 208, 81, 157, 119, 85, 173, 98, 172, 54, 246, 128, 153, 207, 152, 154, 39, 125, 189, 225, 185, 66, 57, 4, 78, 84, 223, 89, 203, 202, 252, 210, 250, 222, 192, 52, 43, 75, 32, 99, 88, 208, 41, 18, 4, 220, 144, 14, 166, 211, 217, 228, 15, 148, 219, 241, 237, 244, 253, 27, 228, 127, 229, 72, 55, 17, 231, 38, 26, 160, 120, 175, 245, 61, 149, 16, 86, 13, 131, 26, 218, 235, 206, 182, 237, 243, 38, 221, 179, 14, 94, 230, 237, 212, 160, 133, 104, 6, 80, 251, 153, 5, 83, 145, 103, 58, 240, 24, 171, 133, 192, 133, 143, 11, 253, 144, 139, 52, 43, 39, 157, 184, 232, 63, 74, 149, 240, 111, 152, 122, 224, 15, 50, 67, 99, 172, 75, 61, 62, 195, 159, 240, 99, 6, 132, 216, 229, 100, 212, 68, 19, 200, 32, 36, 228, 165, 83, 240, 243, 149, 197, 102, 156, 116, 126, 49, 206, 165, 35, 113, 79, 169, 136, 224, 168, 110, 3, 76, 255, 26, 45, 199, 186, 224, 183, 188, 88, 238, 66, 115, 102, 191, 194, 186, 74, 169, 82, 160, 45, 155, 161, 91, 188, 2, 208, 221, 212, 170, 96, 87, 84, 111, 183, 61, 38, 189, 140, 22, 71, 202, 57, 242, 119, 161, 33, 178, 102, 98, 210, 170, 205, 95, 94, 219, 245, 227, 74, 187, 79, 75, 107, 80, 91, 48, 57, 203, 242, 35, 243, 79, 46, 39, 68, 50, 142, 158, 126, 21, 65, 235, 31, 222, 57, 125, 121, 3, 74, 198, 14, 145, 253, 71, 109, 35, 150, 211, 253, 174, 34, 77, 55, 91, 49, 138, 73, 190, 123, 240, 167, 11, 220, 155, 51, 179, 179, 146, 191, 200, 47, 3, 232, 168, 68, 52, 168, 127, 61, 59, 45, 223, 11, 175, 117, 91, 253, 104, 130, 58, 226, 90, 188, 210, 152, 218, 107, 48, 20, 18, 186, 0, 122, 198, 220, 156, 201, 30, 15, 2, 11, 222, 18, 89, 117, 144, 163, 119, 73, 63, 57, 229, 117, 9, 160, 43, 179, 182, 166, 183, 137, 51, 148, 184, 53, 15, 94, 205, 65, 44, 28, 158, 84, 97, 139, 23, 172, 13, 52, 57, 120, 75, 210, 249, 126, 135, 173, 231, 243, 89, 119, 22, 93, 202, 230, 233, 108, 21, 235, 127, 44, 37, 139, 75, 84, 65, 237, 57, 222, 194, 156, 192, 217, 109, 30, 56, 175, 190, 241, 16, 252, 199, 199, 10, 80, 147, 124, 21, 114, 184, 65, 203, 84, 93, 175, 116, 115, 153, 109, 238, 203, 196, 208, 8, 242, 41, 236, 221, 199, 206, 144, 6, 157, 63, 240, 227, 33, 231, 246, 169, 191, 38, 243, 150, 89, 140, 124, 216, 69, 3, 156, 79, 182, 112, 32, 195, 94, 226, 7, 195, 185, 121, 87, 159, 90, 176, 214, 146, 149, 253, 20, 197, 113, 185, 44, 16, 34, 57, 35, 11, 96, 227, 55, 176, 45, 153, 122, 130, 167, 132, 200, 10, 75, 56, 69, 107, 216, 83, 187, 135, 204, 10, 55, 230, 211, 115, 134, 91, 117, 5, 116, 4, 185, 65, 95, 28, 185, 68, 250, 229, 14, 86, 193, 39, 93, 183, 82, 168, 204, 68, 207, 236, 69, 15, 184, 237, 22, 211, 17, 158, 107, 160, 91, 222, 52, 174, 53, 19, 232, 31, 224, 194, 162, 132, 79, 201, 251, 173, 143, 45, 19, 161, 226, 250, 93, 49, 203, 22, 95, 82, 52, 220, 184, 8, 120, 187, 14, 5, 86, 69, 87, 143, 163, 143, 125, 118, 209, 130, 228, 43, 188, 161, 125, 110, 160, 43, 113, 133, 129, 140, 53, 131, 116, 35, 61, 108, 193, 225, 130, 130, 166, 58, 88, 145, 74, 87, 37, 159, 229, 72, 182, 53, 12, 247, 60, 0, 145, 18, 38, 209, 219, 138, 171, 63, 129, 125, 143, 249, 161, 34, 4, 223, 179, 32, 182, 210, 73, 154, 228, 113, 53, 187, 59, 177, 170, 77, 208, 220, 235, 148, 34, 85, 55, 92, 139, 43, 15, 159, 209, 109, 236, 212, 139, 234, 21, 206, 6, 204, 91, 28, 164, 62, 6, 60, 31, 230, 45, 203, 131, 47, 102, 212, 246, 84, 245, 218, 17, 57, 1, 212, 208, 117, 238, 157, 72, 173, 72, 7, 106, 121, 199, 15, 195, 113, 25, 152, 94, 166, 46, 88, 193, 49, 146, 95, 155, 248, 108, 9, 157, 27, 205, 244, 255, 79, 19, 121, 55, 192, 180, 42, 27, 216, 40, 155, 143, 165, 45, 48, 63, 45, 82, 63, 108, 23, 7, 40, 251, 222, 30, 2, 233, 49, 65, 18, 219, 6, 96, 238, 178, 157, 41, 246, 111, 67, 89, 73, 174, 17, 208, 245, 169, 236, 165, 249, 38, 66, 207, 106, 221, 171, 69, 134, 101, 92, 215, 182, 184, 47, 117, 239, 238, 175, 30, 15, 149, 97, 228, 2, 56, 193, 223, 71, 14, 252, 158, 248, 160, 187, 23, 3, 125, 8, 8, 38, 159, 186, 207, 15, 20, 141, 31, 49, 255, 240, 164, 108, 223, 11, 105, 208, 208, 116, 4, 76, 169, 186, 247, 184, 75, 95, 3, 249, 238, 95, 117, 157, 201, 16, 141, 60, 242, 89, 186, 193, 146, 147, 125, 227, 216, 32, 226, 225, 203, 228, 168, 161, 155, 23, 69, 36, 144, 27, 232, 86, 222, 25, 21, 174, 208, 39, 94, 38, 66, 156, 21, 4, 235, 168, 205, 222, 138, 163, 109, 33, 45, 185, 255, 129, 234, 23, 213, 45, 136, 86, 136, 101, 91, 38, 183, 122, 114, 225, 148, 85, 181, 81, 93, 108, 201, 145, 157, 36, 139, 204, 143, 147, 130, 21, 221, 92, 175, 72, 227, 28, 115, 181, 193, 38, 119, 145, 52, 120, 46, 185, 100, 75, 238, 43, 229, 237, 30, 178, 82, 255, 134, 17, 8, 236, 177, 122, 149, 134, 220, 37, 5, 141, 243, 2, 177, 118, 79, 173, 52, 68, 172, 64, 126, 225, 230, 149, 20, 72, 150, 220, 139, 243, 100, 242, 194, 13, 200, 61, 162, 24, 161, 48, 233, 250, 148, 85, 162, 38, 65, 19, 52, 226, 73, 97, 232, 35, 169, 105, 171, 145, 176, 137, 157, 145, 47, 27, 188, 23, 44, 203, 17, 75, 204, 252, 46, 102, 31, 122, 254, 82, 168, 157, 211, 45, 63, 103, 21, 81, 146, 235, 174, 36, 208, 180, 238, 230, 130, 239, 56, 148, 28, 11, 53, 251, 211, 52, 199, 253, 185, 66, 96, 88, 139, 7, 138, 234, 106, 208, 53, 114, 44, 56, 59, 255, 88, 14, 202, 244, 247, 87, 124, 54, 138, 244, 150, 133, 45, 63, 19, 65, 223, 198, 133, 236, 116, 227, 61, 65, 21, 169, 78, 118, 199, 210, 230, 177, 204, 146, 24, 221, 180, 206, 193, 179, 167, 210, 246, 163, 193, 85, 48, 28, 166, 171, 16, 131, 146, 190, 237, 192, 169, 79, 179, 189, 178, 95, 0, 7, 96, 83, 121, 196, 208, 215, 66, 154, 174, 150, 179, 42, 74, 212, 255, 47, 54, 207, 9, 89, 86, 176, 132, 190, 253, 218, 139, 35, 107, 115, 216, 187, 31, 204, 225, 230, 83, 89, 83, 255, 234, 163, 51, 60, 108, 62, 136, 37, 215, 66, 140, 142, 6, 92, 97, 208, 221, 146, 178, 169, 175, 114, 92, 242, 97, 75, 20, 95, 203, 105, 186, 31, 218, 227, 29, 190, 195, 86, 82, 135, 183, 116, 163, 60, 221, 230, 212, 73, 123, 213, 226, 208, 27, 175, 101, 244, 55, 10, 102, 112, 120, 96, 98, 21, 16, 180, 90, 207, 152, 116, 156, 222, 249, 145, 79, 146, 85, 185, 162, 69, 23, 154, 72, 96, 33, 116, 53, 14, 163, 29, 195, 58, 160, 131, 176, 167, 221, 210, 78, 38, 32, 33, 244, 9, 27, 111, 115, 181, 218, 14, 222, 207, 75, 10, 255, 163, 120, 205, 77, 124, 70, 129, 102, 190, 244, 0, 208, 57, 238, 7, 124, 210, 142, 48, 166, 34, 191, 103, 165, 59, 152, 212, 195, 208, 243, 167, 49, 53, 105, 29, 110, 37, 198, 235, 42, 143, 252, 95, 105, 19, 96, 170, 1, 249, 65, 114, 245, 2, 49, 112, 141, 47, 161, 107, 4, 148, 115, 0, 91, 153, 235, 198, 238, 31, 76, 67, 130, 136, 11, 112, 168, 59, 106, 218, 146, 96, 16, 152, 22, 60, 247, 63, 130, 45, 65, 227, 225, 104, 136, 132, 69, 188, 250, 124, 118, 206, 57, 40, 189, 12, 197, 255, 86, 81, 174, 20, 104, 174, 97, 44, 204, 2, 25, 123, 234, 55, 191, 43, 115, 1, 91, 175, 50, 44, 252, 220, 14, 122, 112, 143, 21, 143, 246, 159, 120, 115, 231, 239, 2, 82, 198, 171, 150, 193, 79, 83, 248, 209, 9, 25, 11, 210, 242, 125, 118, 48, 144, 42, 198, 100, 44, 26, 119, 88, 234, 187, 166, 236, 25, 45, 167, 144, 185, 40, 141, 43, 252, 235, 139, 203, 133, 237, 116, 190, 46, 97, 35, 130, 255, 154, 27, 75, 238, 140, 126, 37, 187, 65, 126, 100, 2, 158, 43, 19, 92, 54, 224, 125, 123, 91, 54, 39, 127, 196, 238, 39, 65, 61, 110, 40, 100, 86, 222, 77, 102, 120, 42, 43, 63, 234, 231, 48, 139, 80, 89, 223, 182, 41, 141, 96, 23, 2, 158, 18, 149, 66, 180, 88, 185, 146, 248, 97, 73, 64, 196, 10, 60, 223, 79, 163, 172, 117, 227, 83, 69, 178, 222, 164, 41, 120, 226, 220, 226, 136, 97, 11, 5, 187, 55, 68, 77, 107, 33, 236, 123, 250, 167, 231, 243, 80, 61, 211, 53, 44, 63, 44, 159, 203, 132, 51, 119, 60, 241, 11, 203, 35, 153, 3, 31, 233, 119, 41, 156, 135, 97, 55, 208, 148, 53, 39, 123, 4, 99, 243, 70, 224, 149, 124, 157, 105, 253, 64, 57, 222, 246, 15, 56, 214, 156, 47, 251, 35, 22, 119, 215, 131, 180, 208, 228, 225, 211, 64, 31, 227, 39, 217, 94, 133, 21, 247, 55, 242, 19, 122, 140, 60, 2, 5, 227, 86, 51, 164, 51, 251, 83, 50, 26, 175, 48, 164, 107, 47, 245, 208, 101, 56, 58, 213, 190, 67, 253, 66, 74, 219, 119, 255, 41, 188, 84, 125, 112, 230, 19, 90, 173, 208, 203, 146, 123, 130, 229, 21, 15, 166, 73, 109, 85, 252, 10, 44, 145, 108, 95, 70, 105, 251, 47, 190, 172, 35, 24, 137, 209, 62, 140, 50, 166, 223, 173, 47, 180, 199, 213, 127, 221, 127, 213, 5, 183, 102, 4, 123, 105, 139, 172, 238, 147, 197, 56, 114, 27, 204, 138, 32, 213, 70, 148, 83, 57, 175, 34, 142, 122, 138, 255, 210, 212, 113, 251, 129, 191, 181, 200, 0, 108, 53, 76, 151, 208, 102, 180, 90, 7, 223, 185, 216, 211, 229, 37, 205, 63, 52, 149, 75, 124, 89, 151, 181, 143, 237, 50, 101, 113, 70, 15, 107, 141, 187, 104, 223, 248, 184, 251, 158, 43, 12, 208, 255, 158, 228, 98, 125, 10, 134, 113, 190, 74, 66, 81, 107, 48, 185, 155, 183, 154, 213, 224, 103, 124, 248, 58, 29, 115, 2, 55, 61, 67, 182, 85, 204, 108, 123, 117, 232, 18, 250, 64, 48, 61, 245, 214, 163, 89, 69, 122, 88, 116, 233, 208, 10, 205, 30, 37, 24, 79, 210, 242, 92, 234, 26, 83, 57, 115, 156, 41, 225, 198, 166, 242, 41, 83, 197, 150, 194, 147, 181, 45, 124, 138, 160, 69, 101, 68, 81, 103, 53, 197, 105, 195, 20, 101, 234, 211, 92, 227, 97, 92, 226, 211, 176, 254, 67, 68, 227, 169, 53, 204, 176, 119, 245, 32, 51, 146, 233, 125, 4, 17, 81, 105, 94, 154, 2, 107, 235, 106, 243, 40, 45, 243, 232, 224, 1, 86, 43, 0, 89, 186, 94, 200, 250, 192, 202, 124, 118, 55, 225, 39, 66, 106, 139, 233, 143, 142, 158, 100, 164, 226, 217, 162, 51, 254, 15, 213, 115, 124, 96, 117, 146, 55, 201, 43, 14, 24, 242, 214, 100, 188, 61, 253, 157, 79, 73, 212, 91, 6, 17, 113, 40, 102, 238, 137, 247, 165, 72, 95, 147, 202, 10, 181, 79, 135, 158, 71, 159, 114, 100, 113, 114, 17, 117, 200, 237, 218, 174, 31, 236, 159, 154, 163, 85, 137, 239, 85, 156, 0, 131, 92, 33, 186, 215, 65, 62, 230, 253, 71, 131, 39, 157, 41, 75, 11, 155, 116, 28, 178, 239, 84, 188, 62, 110, 233, 223, 205, 46, 77, 179, 226, 11, 18, 71, 214, 39, 54, 221, 182, 156, 239, 90, 231, 74, 80, 182, 192, 148, 97, 28, 68, 243, 63, 127, 147, 74, 239, 101, 40, 102, 167, 136, 152, 11, 226, 88, 208, 80, 64, 128, 187, 222, 201, 249, 57, 96, 108, 97, 111, 209, 250, 72, 117, 87, 241, 194, 215, 127, 109, 112, 114, 161, 54, 215, 19, 156, 97, 207, 99, 173, 51, 222, 234, 150, 118, 3, 7, 17, 189, 69, 159, 55, 67, 252, 17, 185, 253, 5, 99, 231, 111, 110, 93, 152, 52, 25, 36, 158, 126, 159, 204, 130, 163, 69, 244, 163, 48, 116, 172, 15, 18, 189, 103, 41, 223, 28, 227, 125, 84, 157, 247, 214, 51, 240, 254, 164, 123, 230, 27, 202, 1, 194, 191, 9, 94, 102, 184, 181, 219, 253, 88, 52, 111, 231, 163, 23, 103, 13, 98, 202, 125, 237, 136, 106, 108, 25, 197, 220, 58, 166, 213, 122, 92, 29, 144, 223, 110, 199, 49, 72, 141, 156, 247, 191, 12, 146, 108, 86, 9, 34, 48, 95, 135, 135, 248, 165, 184, 138, 41, 193, 153, 95, 88, 2, 224, 206, 254, 2, 126, 101, 232, 127, 63, 171, 79, 179, 117, 129, 124, 124, 217, 191, 37, 142, 174, 81, 45, 1, 191, 252, 212, 152, 202, 101, 243, 46, 145, 100, 177, 92, 32, 148, 206, 127, 227, 128, 222, 108, 170, 30, 90, 110, 23, 65, 111, 110, 134, 120, 114, 222, 247, 94, 226, 145, 247, 215, 158, 11, 184, 3, 166, 145, 214, 16, 128, 201, 105, 19, 90, 30, 231, 91, 88, 173, 183, 252, 151, 123, 5, 116, 203, 251, 55, 106, 233, 1, 155, 227, 205, 10, 101, 176, 156, 204, 15, 192, 115, 211, 252, 49, 244, 140, 76, 77, 28, 62, 72, 175, 106, 30, 117, 127, 51, 31, 9, 196, 108, 223, 24, 193, 38, 190, 215, 166, 252, 69, 37, 244, 178, 108, 224, 201, 31, 24, 39, 159, 174, 110, 90, 105, 175, 5, 66, 145, 39, 201, 218, 72, 52, 1, 10, 201, 22, 53, 241, 109, 117, 131, 17, 26, 146, 93, 229, 3, 197, 83, 134, 7, 26, 37, 25, 85, 13, 69, 249, 89, 93, 220, 140, 200, 177, 177, 159, 91, 23, 245, 107, 2, 247, 11, 184, 155, 181, 47, 109, 185, 162, 82, 17, 67, 135, 218, 75, 57, 245, 215, 158, 56, 114, 23, 121, 208, 4, 227, 220, 82, 148, 110, 102, 168, 112, 89, 25, 78, 193, 255, 50, 15, 108, 105, 20, 76, 82, 158, 241, 182, 5, 148, 158, 65, 114, 106, 213, 42, 245, 217, 171, 65, 203, 25, 156, 247, 69, 20, 104, 96, 21, 198, 155, 46, 44, 20, 202, 68, 20, 254, 174, 202, 171, 138, 40, 2, 26, 68, 97, 211, 221, 31, 171, 154, 98, 104, 127, 166, 253, 236, 71, 115, 158, 77, 153, 160, 1, 80, 212, 98, 56, 139, 198, 111, 186, 6, 224, 7, 70, 155, 236, 128, 135, 217, 36, 164, 245, 61, 121, 88, 91, 23, 115, 134, 194, 214, 219, 117, 68, 185, 106, 177, 123, 104, 5, 179, 164, 19, 207, 223, 237, 179, 106, 148, 54, 194, 90, 59, 148, 32, 88, 126, 59, 25, 32, 193, 65, 7, 60, 145, 25, 103, 13, 187, 70, 200, 58, 53, 44, 99, 255, 187, 122, 199, 12, 133, 64, 130, 170, 128, 220, 213, 125, 103, 172, 175, 124, 151, 10, 118, 132, 215, 137, 145, 2, 59, 67, 87, 219, 221, 165, 63, 117, 44, 102, 125, 54, 38, 54, 254, 14, 81, 49, 64, 187, 92, 71, 48, 246, 87, 57, 62, 148, 168, 49, 75, 36, 18, 167, 100, 2, 43, 55, 158, 254, 247, 110, 211, 156, 235, 69, 25, 12, 189, 39, 89, 182, 109, 0, 13, 109, 22, 231, 33, 97, 172, 12, 132, 69, 79, 200, 24, 111, 60, 229, 77, 81, 201, 153, 70, 121, 101, 23, 0, 28, 218, 21, 223, 38, 9, 29, 6, 35, 53, 208, 37, 169, 43, 116, 66, 126, 47, 158, 53, 54, 83, 13, 71, 213, 181, 190, 113, 204, 170, 141, 245, 121, 112, 112, 131, 19, 61, 16, 53, 244, 63, 89, 195, 142, 84, 8, 208, 207, 194, 154, 5, 145, 67, 142, 131, 123, 124, 79, 15, 132, 16, 143, 126, 191, 188, 50, 45, 16, 15, 177, 240, 42, 223, 56, 92, 149, 175, 196, 183, 251, 14, 163, 233, 108, 123, 157, 166, 89, 228, 6, 156, 12, 75, 169, 122, 59, 157, 105, 175, 166, 124, 95, 70, 254, 190, 78, 82, 150, 20, 219, 204, 33, 100, 191, 135, 76, 115, 76, 103, 101, 96, 147, 84, 237, 7, 152, 183, 146, 2, 132, 235, 100, 7, 75, 172, 200, 207, 113, 157, 53, 212, 30, 109, 31, 46, 137, 96, 34, 140, 135, 133, 138, 58, 251, 248, 202, 150, 147, 204, 172, 35, 199, 118, 216, 249, 59, 84, 240, 49, 250, 149, 222, 231, 138, 73, 134, 17, 148, 210, 239, 103, 9, 91, 143, 170, 83, 1, 106, 127, 236, 198, 215, 202, 125, 177, 142, 94, 17, 80, 48, 105, 67, 117, 254, 159, 147, 7, 151, 144, 54, 229, 35, 150, 213, 183, 115, 136, 243, 234, 32, 251, 80, 82, 18, 143, 226, 215, 191, 109, 7, 26, 252, 71, 69, 221, 32, 221, 178, 99, 248, 184, 43, 80, 115, 169, 229, 180, 222, 45, 177, 3, 140, 143, 175, 148, 180, 87, 30, 181, 23, 116, 184, 14, 35, 137, 92, 171, 138, 193, 110, 79, 33, 112, 117, 194, 185, 214, 104, 116, 53, 219, 1, 118, 48, 252, 223, 50, 152, 220, 176, 60, 140, 220, 217, 87, 255, 13, 185, 46, 74, 10, 68, 223, 236, 155, 244, 81, 59, 175, 212, 235, 9, 93, 120, 119, 68, 177, 214, 156, 22, 109, 225, 122, 2, 206, 230, 175, 88, 191, 247, 243, 71, 79, 34, 49, 250, 157, 2, 169, 197, 136, 51, 102, 141, 19, 59, 1, 101, 199, 26, 214, 249, 163, 153, 69, 199, 249, 78, 89, 23, 24, 28, 76, 188, 122, 103, 182, 202, 80, 59, 230, 248, 223, 174, 69, 226, 31, 138, 100, 224, 36, 219, 192, 99, 195, 234, 180, 68, 1, 149, 54, 123, 211, 81, 161, 73, 183, 139, 35, 61, 235, 168, 173, 48, 13, 210, 59, 187, 202, 76, 118, 62, 193, 37, 189, 43, 174, 177, 236, 220, 63, 152, 114, 161, 184, 72, 118, 95, 122, 135, 242, 72, 69, 45, 151, 186, 157, 192, 143, 4, 109, 181, 240, 48, 76, 35, 189, 227, 251, 6, 50, 27, 76, 39, 51, 12, 73, 154, 50, 34, 136, 198, 136, 196, 115, 204, 219, 204, 33, 9, 7, 193, 196, 175, 54, 208, 60, 142, 45, 91, 244, 232, 251, 168, 209, 77, 45, 30, 12, 40, 176, 222, 173, 189, 64, 113, 193, 139, 191, 50, 18, 20, 32, 202, 88, 208, 60, 220, 244, 244, 82, 47, 36, 43, 71, 178, 26, 239, 248, 234, 105, 39, 225, 175, 37, 99, 44, 208, 220, 126, 234, 192, 101, 223, 247, 238, 14, 248, 108, 235, 219, 172, 238, 169, 22, 206, 137, 227, 140, 246, 127, 29, 6, 147, 196, 166, 35, 197, 223, 141, 251, 51, 104, 139, 105, 53, 158, 184, 199, 149, 92, 128, 229, 71, 198, 145, 254, 217, 29, 189, 248, 18, 94, 137, 233, 64, 133, 247, 8, 177, 176, 109, 121, 242, 11, 93, 6, 81, 98, 114, 22, 46, 46, 252, 13, 239, 186, 241, 38, 65, 85, 186, 83, 159, 76, 82, 31, 11, 229, 119, 126, 138, 109, 42, 33, 121, 208, 193, 136, 105, 137, 144, 190, 93, 16, 120, 56, 180, 156, 192, 146, 186, 87, 140, 223, 113, 22, 214, 200, 211, 242, 162, 89, 133, 184, 2, 208, 28, 102, 133, 204, 165, 5, 45, 35, 75, 37, 207, 173, 233, 59, 164, 199, 198, 239, 117, 131, 181, 6, 147, 145, 45, 125, 153, 144, 122, 245, 163, 188, 195, 146, 75, 22, 42, 235, 27, 72, 132, 1, 67, 126, 175, 235, 148, 6, 217, 164, 5, 227, 175, 6, 198, 115, 153, 143, 71, 253, 88, 62, 167, 116, 134, 81, 113, 45, 60, 60, 111, 238, 235, 27, 11, 25, 194, 188, 120, 241, 241, 20, 249, 38, 91, 99, 251, 6, 187, 3, 75, 207, 251, 212, 205, 153, 166, 123, 52, 211, 235, 172, 124, 94, 252, 249, 94, 12, 241, 187, 255, 11, 104, 96, 98, 58, 62, 39, 194, 56, 201, 41, 29, 69, 226, 124, 105, 144, 222, 223, 216, 42, 91, 150, 147, 31, 121, 65, 84, 195, 130, 227, 118, 215, 130, 84, 20, 114, 139, 129, 82, 61, 252, 118, 65, 144, 187, 164, 174, 212, 255, 62, 211, 215, 123, 180, 1, 28, 156, 91, 195, 194, 87, 189, 151, 96, 161, 10, 46, 171, 101, 156, 203, 66, 96, 117, 111, 38, 243, 21, 64, 0, 21, 145, 92, 190, 229, 105, 98, 71, 65, 167, 162, 141, 232, 92, 37, 42, 129, 88, 223, 236, 104, 28, 63, 89, 7, 53, 168, 18, 35, 198, 44, 154, 170, 38, 219, 208, 219, 185, 95, 61, 28, 64, 84, 133, 120, 220, 49, 220, 30, 235, 189, 229, 45, 167, 114, 105, 56, 20, 30, 149, 140, 185, 74, 1, 96, 143, 147, 216, 16, 183, 2, 146, 176, 64, 238, 211, 58, 83, 214, 15, 209, 191, 17, 40, 35, 214, 177, 104, 46, 204, 138, 102, 143, 105, 147, 163, 206, 181, 142, 182, 108, 158, 114, 248, 149, 244, 58, 49, 251, 2, 61, 254, 141, 51, 105, 1, 13, 186, 170, 13, 229, 106, 203, 239, 161, 235, 5, 194, 188, 122, 147, 161, 206, 185, 253, 8, 145, 65, 2, 248, 72, 149, 57, 171, 111, 62, 233, 229, 88, 38, 215, 216, 98, 178, 234, 216, 35, 32, 108, 212, 255, 208, 175, 182, 138, 60, 22, 166, 36, 53, 14, 46, 21, 127, 195, 109, 129, 59, 216, 214, 33, 173, 62, 183, 204, 107, 89, 208, 156, 255, 39, 118, 221, 111, 6, 1, 165, 34, 178, 223, 205, 81, 113, 50, 89, 145, 76, 99, 66, 17, 204, 53, 19, 121, 144, 164, 134, 39, 55, 213, 235, 67, 141, 236, 167, 140, 86, 12, 133, 139, 122, 182, 205, 175, 251, 111, 114, 160, 92, 132, 30, 1, 57, 25, 162, 250, 111, 194, 216, 180, 89, 163, 209, 177, 193, 190, 131, 30, 6, 146, 128, 223, 202, 10, 33, 135, 179, 174, 19, 133, 118, 208, 47, 17, 35, 128, 25, 22, 107, 116, 188, 136, 167, 236, 124, 5, 102, 111, 147, 175, 116, 242, 187, 131, 243, 72, 180, 244, 153, 82, 86, 131, 237, 213, 6, 72, 115, 62, 67, 49, 234, 235, 54, 221, 250, 221, 168, 76, 197, 144, 103, 1, 200, 142, 38, 21, 222, 80, 193, 73, 154, 184, 236, 108, 112, 96, 8, 45, 169, 114, 55, 32, 55, 180, 180, 152, 182, 241, 201, 211, 42, 125, 85, 177, 125, 110, 95, 34, 6, 161, 12, 175, 17, 103, 138, 176, 161, 14, 155, 145, 218, 94, 25, 124, 131, 155, 111, 169, 228, 33, 70, 96, 5, 94, 160, 100, 70, 167, 171, 135, 182, 123, 165, 158, 106, 95, 176, 31, 54, 159, 167, 123, 133, 40, 204, 17, 139, 184, 157, 143, 17, 252, 6, 3, 56, 208, 91, 51, 26, 122, 38, 59, 61, 156, 33, 227, 85, 238, 173, 45, 250, 117, 154, 5, 220, 62, 40, 70, 30, 22, 39, 76, 88, 161, 139, 134, 199, 199, 232, 229, 167, 200, 19, 83, 17, 132, 179, 5, 54, 166, 155, 139, 212, 207, 128, 206, 196, 157, 149, 250, 130, 181, 246, 179, 251, 136, 25, 155, 88, 136, 199, 87, 132, 104, 174, 1, 216, 35, 105, 169, 71, 36, 66, 121, 189, 204, 132, 157, 2, 183, 126, 142, 116, 141, 79, 217, 2, 79, 177, 117, 161, 177, 75, 80, 195, 81, 59, 163, 137, 171, 204, 110, 245, 243, 183, 209, 180, 126, 124, 190, 86, 245, 99, 97, 227, 230, 69, 169, 136, 70, 217, 206, 14, 157, 255, 120, 186, 207, 54, 17, 143, 135, 46, 208, 38, 182, 146, 126, 56, 165, 198, 204, 18, 96, 215, 134, 49, 123, 54, 148, 83, 199, 100, 6, 237, 97, 78, 120, 33, 218, 131, 77, 128, 203, 44, 200, 230, 29, 125, 227, 95, 61, 70, 173, 121, 135, 81, 210, 124, 60, 74, 142, 209, 16, 51, 10, 115, 216, 13, 61, 11, 248, 183, 106, 86, 69, 139, 67, 3, 116, 129, 101, 250, 61, 220, 210, 172, 220, 187, 168, 26, 16, 87, 229, 246, 55, 100, 126, 254, 180, 41, 72, 175, 83, 56, 81, 67, 47, 59, 214, 116, 130, 192, 116, 11, 191, 29, 120, 116, 179, 193, 25, 22, 12, 182, 137, 134, 117, 172, 179, 26, 178, 132, 83, 92, 20, 219, 249, 125, 125, 125, 165, 163, 74, 143, 114, 109, 240, 108, 41, 28, 241, 186, 71, 182, 66, 100, 232, 208, 122, 241, 7, 93, 184, 34, 172, 30, 96, 1, 14, 124, 80, 41, 142, 243, 38, 219, 243, 213, 116, 85, 49, 50, 99, 214, 36, 115, 234, 29, 127, 61, 79, 60, 21, 106, 191, 2, 27, 148, 141, 94, 144, 222, 236, 13, 27, 182, 16, 34, 176, 26, 41, 130, 100, 166, 132, 100, 7, 246, 252, 144, 133, 190, 16, 152, 110, 184, 109, 193, 86, 60, 62, 40, 164, 219, 47, 254, 6, 181, 216, 180, 71, 115, 221, 27, 106, 88, 105, 10, 3, 80, 197, 195, 36, 47, 25, 233, 160, 114, 9, 200, 56, 39, 216, 211, 178, 14, 233, 170, 136, 208, 126, 94, 162, 253, 186, 118, 243, 27, 11, 70, 131, 19, 95, 206, 68, 32, 212, 255, 101, 139, 156, 213, 92, 184, 205, 13, 23, 91, 219, 223, 110, 252, 157, 62, 158, 225, 153, 76, 63, 15, 32, 188, 227, 156, 190, 154, 150, 9, 22, 241, 81, 217, 46, 221, 205, 182, 224, 163, 63, 20, 153, 91, 233, 83, 65, 10, 242, 168, 40, 230, 218, 7, 82, 205, 78, 144, 6, 73, 211, 90, 21, 230, 52, 59, 210, 37, 228, 245, 17, 177, 69, 114, 69, 116, 77, 25, 187, 3, 207, 209, 157, 90, 159, 222, 232, 86, 106, 78, 109, 98, 153, 85, 83, 220, 84, 36, 32, 41, 202, 163, 255, 155, 247, 75, 162, 32, 43, 246, 112, 2, 35, 223, 107, 171, 59, 101, 50, 138, 114, 14, 215, 202, 31, 171, 165, 147, 165, 9, 238, 20, 153, 80, 174, 187, 194, 36, 82, 201, 160, 237, 196, 8, 101, 120, 240, 180, 84, 66, 172, 31, 100, 22, 79, 149, 41, 93, 158, 98, 89, 71, 184, 108, 41, 93, 91, 156, 244, 88, 206, 119, 72, 28, 61, 63, 164, 221, 10, 173, 53, 48, 41, 18, 185, 175, 74, 210, 153, 121, 1, 152, 117, 92, 169, 153, 74, 243, 28, 94, 245, 58, 108, 143, 89, 4, 34, 223, 74, 164, 117, 207, 238, 5, 115, 149, 50, 0, 39, 219, 98, 224, 64, 203, 226, 158, 14, 16, 36, 120, 92, 25, 242, 0, 147, 238, 124, 41, 235, 40, 68, 86, 97, 60, 166, 188, 74, 112, 243, 162, 52, 37, 254, 175, 122, 238, 214, 237, 206, 58, 101, 41, 152, 205, 208, 89, 90, 148, 207, 179, 40, 144, 137, 207, 7, 65, 190, 234, 176, 238, 179, 164, 82, 170, 170, 79, 139, 121, 235, 179, 10, 46, 161, 122, 151, 145, 59, 185, 57, 52, 233, 137, 140, 177, 226, 120, 58, 250, 217, 36, 246, 34, 166, 254, 50, 156, 186, 22, 37, 86, 251, 70, 152, 112, 12, 51, 135, 185, 219, 46, 215, 148, 21, 153, 78, 246, 244, 3, 81, 164, 167, 201, 157, 206, 53, 196, 142, 238, 205, 164, 205, 0, 98, 229, 184, 174, 137, 37, 212, 211, 120, 179, 221, 189, 126, 180, 73, 186, 48, 143, 48, 170, 46, 235, 132, 141, 209, 68, 35, 170, 197, 169, 19, 103, 169, 183, 115, 74, 119, 189, 102, 12, 229, 174, 95, 170, 134, 164, 17, 143, 182, 127, 224, 149, 233, 87, 191, 69, 8, 54, 70, 75, 155, 182, 226, 246, 20, 147, 188, 20, 35, 54, 138, 51, 242, 243, 157, 209, 148, 232, 139, 30, 151, 207, 218, 180, 63, 152, 0, 58, 44, 77, 14, 251, 57, 232, 19, 132, 87, 176, 37, 106, 192, 39, 41, 162, 142, 57, 243, 21, 25, 5, 142, 241, 63, 43, 194, 38, 163, 48, 62, 32, 3, 98, 255, 170, 197, 120, 53, 121, 221, 147, 248, 176, 197, 202, 246, 251, 83, 214, 164, 199, 103, 193, 162, 89, 145, 170, 182, 250, 123, 47, 78, 188, 27, 182, 116, 12, 40, 164, 45, 113, 188, 125, 27, 239, 218, 159, 166, 123, 173, 94, 55, 55, 136, 212, 47, 32, 211, 189, 135, 36, 206, 247, 63, 71, 226, 58, 149, 169, 142, 253, 178, 159, 242, 59, 234, 209, 48, 214, 207, 92, 119, 51, 241, 92, 4, 88, 107, 50, 251, 251, 72, 191, 158, 228, 10, 21, 34, 248, 251, 112, 22, 213, 236, 141, 220, 18, 92, 28, 242, 127, 162, 248, 89, 130, 94, 200, 47, 52, 91, 46, 97, 251, 240, 163, 85, 177, 51, 132, 216, 196, 211, 211, 122, 145, 243, 131, 166, 127, 192, 131, 230, 162, 18, 135, 164, 50, 21, 42, 223, 183, 51, 172, 195, 249, 98, 48, 155, 102, 83, 234, 173, 128, 43, 175, 30, 70, 68, 21, 105, 132, 94, 203, 2, 148, 251, 245, 195, 5, 76, 247, 117, 39, 188, 28, 196, 229, 177, 191, 204, 232, 76, 144, 138, 130, 186, 29, 88, 130, 75, 194, 76, 227, 240, 223, 90, 11, 11, 37, 146, 188, 103, 22, 84, 192, 250, 55, 68, 57, 26, 170, 19, 121, 174, 124, 217, 164, 201, 58, 35, 55, 200, 217, 137, 152, 108, 57, 217, 118, 75, 6, 201, 18], - [7, 77, 54, 218, 4, 230, 114, 210, 210, 194, 174, 226, 205, 232, 79, 206, 229, 114, 233, 24, 103, 51, 1, 106, 93, 253, 62, 186, 10, 118, 65, 37, 118, 122, 109, 101, 79, 116, 103, 97, 34, 118, 192, 13, 183, 160, 245, 255, 65, 209, 155, 60, 178, 39, 255, 191, 187, 34, 57, 62, 200, 14, 127, 192, 247, 127, 136, 107, 98, 255, 105, 33, 21, 223, 60, 17, 19, 120, 179, 84, 79, 134, 67, 168, 159, 20, 88, 75, 148, 20, 90, 99, 119, 153, 218, 17, 236, 158, 39, 197, 233, 112, 233, 37, 171, 51, 2, 233, 181, 96, 148, 171, 76, 35, 227, 160, 95, 205, 165, 27, 40, 41, 10, 18, 7, 175, 139, 233, 5, 160, 145, 40, 131, 110, 200, 1, 33, 128, 210, 222, 207, 89, 225, 140, 182, 78, 12, 83, 51, 27, 59, 129, 86, 100, 7, 153, 107, 103, 122, 117, 208, 117, 36, 113, 190, 92, 57, 69, 131, 33, 23, 46, 249, 1, 159, 143, 13, 215, 43, 136, 115, 60, 65, 71, 52, 115, 83, 10, 239, 80, 44, 37, 92, 147, 230, 77, 78, 83, 79, 51, 153, 70, 86, 219, 224, 204, 217, 68, 137, 252, 163, 100, 20, 141, 216, 129, 151, 29, 166, 5, 199, 196, 1, 48, 216, 245, 55, 211, 109, 65, 54, 153, 166, 111, 15, 10, 92, 59, 236, 142, 89, 163, 238, 140, 66, 34, 105, 194, 71, 99, 186, 54, 187, 63, 131, 125, 66, 198, 172, 59, 186, 3, 217, 229, 11, 194, 159, 68, 104, 83, 220, 229, 243, 244, 125, 171, 7, 139, 9, 184, 62, 111, 221, 30, 82, 185, 83, 6, 242, 44, 112, 102, 0, 240, 39, 244, 96, 77, 150, 245, 143, 242, 93, 167, 39, 47, 129, 11, 9, 106, 237, 112, 90, 69, 4, 44, 157, 49, 152, 251, 133, 114, 122, 95, 225, 33, 207, 168, 94, 15, 49, 49, 160, 228, 127, 129, 190, 42, 62, 221, 115, 104, 58, 248, 23, 150, 227, 168, 62, 93, 236, 76, 124, 93, 173, 53, 130, 97, 116, 107, 133, 100, 51, 214, 68, 60, 220, 45, 9, 218, 210, 175, 41, 244, 123, 227, 179, 142, 246, 226, 235, 70, 185, 123, 12, 140, 31, 216, 135, 21, 33, 230, 99, 218, 8, 236, 244, 134, 205, 223, 47, 50, 161, 239, 211, 206, 226, 192, 193, 63, 110, 248, 20, 25, 239, 59, 134, 148, 3, 102, 136, 136, 13, 138, 61, 158, 144, 79, 237, 224, 187, 188, 132, 71, 250, 65, 60, 163, 34, 13, 102, 226, 200, 173, 75, 118, 224, 169, 91, 210, 13, 17, 131, 57, 49, 246, 201, 167, 75, 132, 247, 7, 29, 100, 76, 240, 203, 213, 48, 206, 221, 107, 109, 33, 26, 246, 239, 12, 244, 189, 60, 224, 163, 83, 70, 233, 138, 181, 67, 53, 124, 151, 254, 233, 235, 47, 209, 31, 170, 9, 125, 221, 142, 177, 223, 117, 10, 84, 30, 132, 0, 41, 200, 179, 83, 114, 180, 12, 82, 88, 4, 222, 129, 151, 203, 44, 205, 175, 77, 211, 209, 61, 1, 25, 89, 214, 9, 61, 195, 111, 173, 242, 104, 9, 43, 105, 86, 45, 245, 248, 241, 116, 105, 119, 83, 80, 153, 13, 111, 98, 110, 238, 34, 129, 129, 160, 71, 191, 42, 87, 20, 120, 112, 161, 247, 225, 48, 65, 129, 64, 10, 200, 210, 226, 212, 153, 110, 95, 215, 47, 233, 61, 94, 242, 182, 163, 3, 240, 0, 120, 197, 201, 119, 72, 60, 103, 218, 95, 188, 136, 87, 199, 221, 115, 98, 158, 138, 20, 22, 70, 90, 250, 180, 251, 116, 162, 108, 238, 112, 99, 197, 49, 30, 179, 25, 48, 55, 65, 97, 223, 133, 117, 173, 243, 210, 196, 131, 126, 134, 215, 237, 75, 114, 154, 114, 239, 188, 64, 236, 73, 211, 20, 110, 12, 159, 148, 129, 158, 191, 76, 96, 151, 124, 113, 243, 245, 223, 58, 141, 2, 220, 191, 210, 53, 149, 62, 111, 14, 221, 253, 211, 164, 71, 48, 23, 244, 131, 121, 67, 42, 216, 122, 118, 155, 144, 227, 174, 82, 1, 44, 200, 0, 118, 17, 141, 24, 182, 12, 96, 154, 46, 102, 153, 163, 212, 133, 200, 243, 246, 150, 179, 121, 188, 113, 122, 111, 40, 150, 138, 123, 70, 90, 28, 48, 105, 192, 220, 214, 93, 141, 136, 98, 171, 201, 193, 95, 199, 64, 62, 16, 221, 221, 136, 235, 111, 25, 201, 79, 196, 109, 21, 217, 99, 70, 15, 11, 113, 246, 97, 118, 164, 249, 156, 90, 31, 191, 188, 155, 177, 218, 196, 238, 10, 220, 119, 148, 162, 244, 134, 78, 190, 73, 222, 240, 98, 247, 85, 85, 77, 11, 0, 71, 40, 34, 22, 241, 19, 133, 172, 251, 53, 107, 103, 61, 79, 244, 31, 224, 206, 253, 155, 187, 66, 65, 225, 136, 74, 162, 144, 237, 32, 198, 97, 6, 165, 37, 140, 196, 42, 190, 231, 91, 153, 214, 84, 96, 205, 148, 8, 79, 47, 116, 62, 249, 206, 77, 117, 20, 229, 90, 7, 163, 139, 145, 253, 14, 235, 123, 241, 49, 230, 55, 59, 114, 174, 62, 198, 15, 187, 44, 150, 202, 77, 125, 179, 149, 35, 18, 210, 87, 29, 69, 41, 56, 230, 172, 54, 13, 162, 125, 155, 98, 4, 228, 30, 194, 130, 161, 173, 236, 30, 142, 11, 115, 143, 136, 124, 93, 188, 134, 245, 171, 72, 23, 75, 209, 102, 211, 81, 203, 46, 239, 224, 219, 149, 140, 176, 233, 244, 166, 30, 241, 227, 69, 32, 9, 49, 136, 27, 176, 4, 88, 130, 96, 70, 187, 157, 47, 217, 123, 240, 154, 44, 236, 247, 232, 32, 57, 108, 98, 134, 210, 223, 249, 96, 137, 43, 158, 136, 59, 189, 108, 195, 199, 171, 60, 208, 134, 83, 152, 140, 150, 37, 201, 170, 7, 112, 26, 190, 22, 65, 49, 128, 111, 218, 33, 8, 144, 245, 188, 20, 124, 69, 129, 223, 73, 101, 238, 170, 106, 0, 110, 233, 225, 49, 225, 69, 17, 12, 162, 246, 249, 163, 142, 68, 60, 80, 67, 117, 50, 110, 20, 46, 164, 90, 190, 208, 18, 236, 66, 9, 51, 39, 224, 238, 48, 44, 17, 28, 237, 146, 103, 251, 63, 156, 194, 116, 251, 103, 174, 50, 7, 230, 56, 20, 180, 247, 201, 205, 115, 96, 6, 39, 18, 234, 119, 177, 248, 68, 95, 64, 62, 52, 142, 30, 56, 223, 124, 104, 54, 74, 80, 48, 193, 202, 3, 151, 213, 168, 161, 142, 111, 79, 42, 110, 237, 97, 165, 215, 162, 50, 75, 7, 221, 134, 138, 21, 136, 115, 182, 61, 230, 104, 245, 144, 51, 81, 36, 115, 127, 34, 217, 150, 224, 155, 104, 245, 249, 199, 83, 166, 138, 207, 16, 111, 103, 179, 138, 74, 94, 15, 13, 208, 84, 197, 246, 21, 101, 141, 197, 253, 205, 190, 169, 128, 159, 10, 158, 86, 72, 82, 7, 8, 147, 86, 45, 78, 196, 241, 13, 95, 202, 81, 156, 149, 3, 218, 212, 128, 37, 114, 67, 171, 129, 192, 224, 209, 138, 21, 63, 105, 19, 68, 245, 17, 174, 235, 183, 148, 24, 122, 41, 93, 161, 58, 179, 196, 201, 45, 142, 199, 83, 247, 155, 154, 141, 76, 121, 197, 78, 18, 0, 37, 107, 46, 151, 116, 64, 111, 129, 18, 78, 109, 215, 100, 229, 16, 185, 76, 41, 243, 18, 228, 245, 150, 223, 56, 191, 226, 57, 46, 252, 18, 107, 166, 46, 54, 29, 17, 51, 185, 64, 95, 17, 140, 76, 121, 43, 204, 111, 187, 229, 67, 102, 9, 8, 231, 47, 231, 17, 242, 102, 7, 29, 213, 76, 139, 206, 244, 155, 176, 47, 198, 89, 146, 189, 139, 206, 246, 171, 166, 230, 185, 143, 10, 205, 138, 247, 84, 173, 81, 203, 58, 174, 229, 253, 189, 102, 43, 224, 119, 32, 232, 139, 17, 27, 208, 249, 159, 227, 17, 134, 3, 195, 80, 143, 139, 224, 13, 16, 213, 249, 182, 88, 32, 86, 200, 47, 215, 130, 46, 116, 251, 3, 154, 0, 57, 35, 249, 161, 151, 142, 162, 25, 223, 96, 231, 30, 190, 8, 221, 234, 188, 211, 189, 164, 99, 162, 231, 244, 148, 198, 151, 179, 112, 29, 16, 97, 212, 28, 36, 9, 111, 220, 203, 12, 235, 180, 43, 231, 20, 133, 52, 253, 228, 151, 56, 172, 121, 201, 229, 17, 186, 164, 228, 26, 150, 157, 124, 78, 74, 249, 83, 108, 245, 51, 40, 155, 45, 151, 27, 33, 36, 56, 115, 197, 175, 17, 175, 122, 145, 167, 144, 177, 138, 223, 254, 127, 27, 244, 40, 219, 147, 56, 206, 128, 2, 164, 17, 108, 62, 244, 46, 108, 83, 82, 16, 103, 173, 49, 191, 13, 15, 209, 228, 153, 145, 34, 110, 253, 61, 38, 220, 81, 135, 10, 66, 77, 234, 68, 60, 98, 43, 94, 125, 44, 124, 220, 80, 141, 104, 20, 184, 54, 67, 252, 7, 74, 160, 16, 249, 255, 202, 118, 116, 253, 193, 64, 37, 97, 9, 3, 252, 82, 27, 83, 183, 193, 66, 106, 1, 123, 172, 41, 80, 37, 122, 98, 164, 65, 221, 78, 47, 76, 78, 195, 192, 90, 217, 178, 249, 236, 52, 20, 71, 156, 5, 51, 67, 63, 169, 204, 76, 108, 13, 52, 163, 88, 172, 130, 222, 167, 235, 6, 128, 153, 123, 85, 247, 45, 238, 100, 218, 194, 125, 33, 173, 204, 8, 214, 218, 174, 125, 136, 85, 94, 2, 190, 88, 173, 128, 65, 112, 13, 109, 168, 168, 45, 57, 237, 15, 191, 192, 59, 163, 83, 142, 180, 89, 84, 221, 137, 210, 46, 199, 99, 147, 115, 44, 34, 67, 222, 144, 65, 95, 177, 70, 30, 185, 212, 140, 98, 153, 59, 65, 245, 22, 221, 89, 97, 61, 95, 192, 85, 24, 189, 220, 153, 54, 237, 54, 17, 120, 10, 142, 5, 173, 82, 156, 185, 235, 72, 218, 244, 228, 190, 52, 155, 36, 103, 229, 123, 83, 32, 80, 166, 217, 199, 234, 50, 54, 63, 41, 82, 54, 128, 169, 64, 20, 1, 64, 116, 233, 29, 98, 153, 54, 190, 21, 248, 43, 141, 32, 85, 183, 226, 132, 107, 6, 25, 38, 160, 41, 75, 184, 166, 97, 218, 194, 202, 90, 205, 169, 239, 217, 226, 41, 75, 8, 19, 67, 171, 80, 68, 168, 149, 56, 231, 159, 225, 217, 251, 35, 118, 86, 13, 58, 55, 145, 247, 93, 40, 36, 207, 8, 60, 27, 139, 66, 91, 4, 193, 149, 79, 192, 92, 136, 39, 137, 226, 56, 217, 102, 155, 18, 37, 84, 74, 133, 110, 217, 28, 223, 142, 173, 90, 87, 224, 142, 47, 46, 93, 196, 124, 239, 240, 2, 87, 198, 147, 87, 184, 89, 146, 29, 221, 86, 129, 60, 197, 227, 83, 161, 163, 31, 140, 119, 148, 206, 89, 56, 43, 127, 131, 71, 7, 116, 254, 51, 163, 65, 186, 194, 165, 106, 19, 36, 110, 178, 20, 24, 91, 96, 142, 127, 0, 5, 51, 127, 117, 83, 239, 89, 79, 68, 232, 38, 19, 249, 6, 202, 60, 87, 77, 91, 130, 147, 135, 57, 229, 118, 137, 95, 33, 129, 176, 163, 101, 23, 231, 39, 254, 206, 152, 106, 246, 54, 116, 91, 163, 222, 204, 234, 65, 86, 34, 141, 86, 169, 147, 58, 80, 97, 198, 124, 164, 123, 9, 116, 208, 205, 243, 119, 112, 72, 94, 131, 144, 210, 139, 111, 167, 125, 92, 38, 65, 37, 247, 182, 31, 45, 73, 213, 129, 239, 250, 154, 173, 23, 171, 136, 91, 85, 239, 36, 90, 41, 81, 151, 6, 237, 109, 171, 174, 63, 98, 70, 225, 141, 152, 136, 238, 122, 64, 24, 160, 5, 94, 97, 243, 145, 160, 188, 59, 117, 49, 171, 123, 72, 14, 154, 156, 168, 40, 20, 208, 99, 253, 95, 230, 123, 190, 91, 36, 200, 78, 56, 11, 141, 208, 35, 1, 146, 209, 248, 92, 50, 190, 71, 175, 40, 230, 62, 7, 103, 219, 132, 28, 219, 197, 78, 117, 130, 187, 123, 45, 228, 152, 241, 212, 110, 212, 117, 109, 230, 56, 116, 228, 104, 144, 207, 88, 59, 191, 154, 212, 9, 62, 145, 44, 152, 114, 41, 75, 78, 220, 133, 142, 180, 238, 147, 205, 56, 102, 105, 233, 96, 165, 224, 26, 154, 137, 52, 116, 3, 76, 162, 70, 121, 88, 16, 82, 51, 129, 53, 145, 243, 65, 168, 246, 114, 67, 224, 199, 45, 158, 62, 252, 42, 128, 196, 119, 28, 60, 93, 118, 47, 10, 54, 33, 219, 168, 75, 18, 63, 25, 24, 198, 194, 13, 154, 61, 23, 36, 145, 209, 104, 87, 42, 250, 182, 72, 247, 202, 188, 232, 102, 189, 110, 138, 117, 229, 106, 44, 2, 124, 241, 159, 223, 253, 156, 84, 23, 206, 197, 106, 11, 191, 162, 152, 61, 172, 133, 48, 89, 178, 74, 182, 239, 48, 45, 228, 9, 25, 141, 203, 245, 166, 33, 6, 126, 40, 130, 21, 103, 2, 193, 240, 23, 145, 81, 93, 182, 211, 104, 156, 163, 43, 76, 111, 24, 156, 197, 221, 12, 135, 17, 134, 179, 82, 144, 243, 38, 242, 13, 61, 230, 229, 96, 168, 86, 211, 42, 242, 21, 40, 55, 243, 137, 141, 204, 36, 152, 215, 59, 202, 54, 200, 248, 73, 61, 62, 5, 67, 46, 77, 133, 61, 69, 218, 226, 134, 66, 143, 200, 0, 29, 211, 98, 43, 89, 13, 61, 32, 191, 84, 4, 50, 152, 82, 202, 148, 77, 78, 35, 69, 154, 183, 26, 169, 51, 10, 18, 80, 74, 92, 236, 54, 44, 75, 1, 75, 253, 239, 127, 117, 78, 36, 3, 236, 25, 216, 108, 72, 232, 45, 246, 212, 208, 189, 142, 235, 22, 201, 60, 35, 84, 16, 69, 2, 30, 163, 132, 202, 45, 119, 251, 44, 248, 244, 40, 23, 71, 164, 234, 230, 67, 214, 62, 233, 53, 207, 251, 98, 240, 211, 168, 72, 36, 239, 242, 233, 221, 15, 126, 12, 157, 222, 207, 180, 227, 132, 97, 212, 43, 83, 80, 127, 134, 232, 182, 222, 165, 158, 165, 235, 107, 46, 215, 78, 86, 244, 83, 196, 65, 98, 46, 186, 226, 97, 60, 231, 112, 10, 155, 213, 33, 133, 219, 39, 85, 45, 182, 247, 202, 191, 6, 74, 222, 193, 252, 73, 151, 184, 255, 191, 20, 162, 184, 37, 178, 51, 81, 138, 47, 46, 200, 215, 208, 119, 16, 195, 66, 116, 181, 62, 218, 128, 118, 12, 56, 245, 97, 142, 144, 213, 39, 182, 140, 119, 187, 47, 227, 164, 170, 228, 228, 13, 240, 74, 235, 136, 82, 243, 8, 47, 119, 164, 46, 129, 172, 188, 226, 16, 192, 23, 242, 246, 151, 78, 191, 228, 127, 105, 18, 61, 223, 114, 62, 192, 247, 43, 67, 140, 102, 1, 195, 184, 245, 96, 125, 90, 140, 15, 59, 204, 247, 115, 185, 88, 30, 92, 43, 153, 216, 168, 44, 103, 253, 247, 127, 235, 227, 132, 67, 182, 249, 47, 195, 239, 148, 111, 117, 28, 58, 27, 135, 137, 50, 198, 198, 84, 56, 82, 64, 215, 1, 142, 182, 232, 120, 229, 95, 26, 198, 67, 100, 124, 58, 82, 31, 30, 48, 38, 108, 248, 167, 206, 96, 227, 1, 78, 236, 103, 76, 24, 49, 21, 140, 153, 31, 50, 162, 161, 252, 197, 195, 57, 113, 209, 95, 149, 170, 37, 29, 137, 91, 116, 169, 180, 16, 62, 45, 103, 134, 56, 213, 210, 217, 150, 144, 178, 59, 89, 130, 133, 90, 211, 226, 36, 159, 13, 4, 120, 134, 110, 174, 180, 111, 207, 174, 193, 116, 79, 150, 141, 232, 241, 93, 192, 240, 189, 132, 204, 119, 53, 123, 180, 150, 223, 222, 124, 250, 237, 39, 150, 208, 207, 144, 191, 123, 85, 51, 132, 63, 77, 124, 212, 1, 119, 87, 11, 117, 164, 3, 244, 172, 170, 198, 107, 204, 203, 145, 0, 31, 48, 64, 234, 61, 43, 57, 13, 142, 152, 201, 153, 243, 10, 141, 74, 7, 224, 15, 71, 57, 194, 46, 23, 124, 115, 215, 25, 70, 128, 221, 154, 22, 179, 53, 187, 3, 4, 37, 75, 92, 242, 122, 155, 70, 12, 31, 91, 135, 27, 151, 174, 211, 224, 22, 1, 76, 47, 180, 47, 53, 9, 204, 56, 117, 34, 112, 16, 51, 37, 57, 249, 143, 251, 18, 22, 0, 166, 239, 54, 172, 148, 10, 227, 44, 77, 186, 78, 37, 183, 24, 180, 42, 107, 1, 121, 40, 33, 119, 89, 25, 55, 23, 174, 9, 166, 222, 225, 245, 94, 142, 217, 243, 70, 104, 83, 143, 193, 182, 141, 253, 16, 53, 112, 65, 219, 119, 149, 193, 9, 208, 119, 183, 248, 166, 83, 84, 185, 78, 134, 50, 202, 198, 147, 239, 242, 91, 124, 159, 242, 192, 249, 212, 231, 161, 196, 86, 112, 110, 184, 190, 43, 185, 84, 16, 14, 91, 125, 92, 191, 91, 117, 124, 111, 1, 226, 74, 19, 35, 231, 157, 86, 67, 95, 43, 247, 144, 85, 164, 11, 219, 94, 50, 254, 30, 106, 2, 175, 102, 80, 100, 149, 250, 205, 70, 8, 64, 214, 63, 71, 11, 218, 136, 245, 18, 14, 228, 58, 33, 196, 248, 82, 16, 38, 23, 20, 56, 189, 55, 97, 113, 165, 53, 34, 61, 229, 59, 187, 63, 8, 29, 52, 118, 46, 59, 188, 163, 248, 88, 79, 86, 241, 238, 95, 29, 91, 100, 112, 72, 216, 5, 251, 98, 217, 129, 198, 115, 93, 16, 43, 84, 99, 180, 231, 140, 26, 162, 0, 253, 165, 114, 254, 110, 105, 1, 254, 127, 155, 45, 110, 36, 25, 94, 61, 214, 195, 176, 224, 227, 65, 226, 172, 96, 151, 161, 25, 245, 55, 16, 172, 176, 134, 22, 247, 135, 5, 17, 43, 160, 21, 169, 125, 61, 140, 120, 130, 234, 218, 194, 104, 222, 236, 4, 103, 236, 249, 149, 221, 255, 10, 17, 36, 76, 121, 180, 160, 144, 177, 164, 74, 42, 66, 96, 184, 66, 44, 64, 76, 250, 147, 136, 135, 142, 206, 194, 142, 74, 164, 50, 23, 7, 231, 215, 176, 186, 22, 127, 170, 153, 22, 255, 133, 68, 253, 120, 191, 140, 154, 243, 147, 229, 4, 125, 47, 244, 161, 107, 55, 0, 78, 96, 38, 5, 34, 79, 109, 167, 58, 148, 200, 236, 173, 181, 220, 40, 177, 227, 142, 66, 174, 48, 171, 140, 85, 196, 88, 181, 175, 37, 52, 173, 165, 125, 45, 206, 69, 52, 214, 173, 66, 106, 202, 136, 58, 241, 99, 41, 245, 5, 106, 6, 195, 66, 51, 65, 2, 88, 124, 171, 114, 205, 58, 70, 20, 247, 225, 65, 25, 249, 29, 116, 254, 109, 149, 71, 156, 172, 68, 239, 104, 247, 244, 250, 26, 10, 55, 148, 196, 213, 147, 59, 181, 170, 233, 191, 64, 52, 8, 51, 88, 65, 61, 133, 233, 80, 233, 122, 8, 60, 132, 240, 60, 220, 91, 115, 160, 243, 97, 83, 35, 79, 185, 215, 132, 199, 77, 40, 37, 62, 196, 194, 113, 155, 254, 253, 3, 52, 136, 79, 117, 105, 10, 2, 88, 155, 209, 171, 173, 43, 62, 124, 53, 210, 178, 61, 19, 84, 155, 124, 252, 108, 144, 3, 213, 251, 133, 100, 108, 46, 220, 1, 139, 120, 167, 157, 43, 16, 37, 64, 234, 247, 21, 61, 143, 212, 163, 78, 132, 157, 217, 235, 29, 172, 67, 136, 158, 61, 35, 62, 219, 37, 33, 128, 101, 216, 111, 118, 205, 220, 3, 134, 248, 131, 227, 43, 108, 151, 177, 225, 212, 124, 114, 102, 163, 51, 27, 101, 37, 73, 159, 206, 144, 175, 76, 223, 172, 19, 252, 112, 128, 29, 60, 131, 155, 44, 209, 53, 96, 73, 41, 212, 37, 187, 151, 209, 232, 38, 43, 246, 153, 86, 203, 229, 19, 210, 254, 91, 245, 30, 30, 62, 249, 114, 192, 68, 60, 131, 111, 171, 240, 134, 130, 179, 0, 249, 200, 70, 103, 116, 20, 23, 226, 1, 109, 191, 204, 157, 107, 200, 145, 64, 23, 119, 123, 89, 236, 173, 89, 171, 14, 122, 152, 15, 112, 2, 90, 183, 86, 65, 97, 212, 47, 80, 106, 183, 32, 104, 118, 119, 238, 25, 104, 29, 195, 221, 165, 60, 159, 73, 239, 151, 120, 186, 31, 74, 137, 225, 250, 37, 59, 64, 205, 79, 68, 148, 99, 131, 163, 39, 56, 42, 57, 216, 97, 81, 216, 229, 80, 43, 207, 66, 43, 27, 100, 18, 150, 113, 253, 165, 77, 244, 206, 48, 27, 192, 43, 154, 33, 185, 175, 71, 81, 6, 78, 52, 101, 172, 104, 89, 136, 236, 136, 251, 111, 12, 23, 172, 217, 92, 213, 231, 70, 90, 2, 11, 145, 68, 249, 111, 21, 210, 224, 126, 9, 135, 41, 19, 175, 237, 235, 243, 226, 34, 10, 10, 251, 127, 110, 220, 0, 43, 163, 188, 26, 87, 53, 32, 144, 88, 82, 177, 74, 22, 33, 202, 240, 24, 48, 94, 36, 113, 249, 249, 221, 31, 237, 153, 161, 158, 115, 254, 90, 219, 184, 60, 227, 148, 32, 155, 109, 242, 133, 226, 187, 104, 56, 139, 196, 92, 115, 176, 125, 251, 74, 175, 93, 247, 130, 230, 251, 189, 246, 104, 55, 13, 175, 74, 244, 33, 54, 47, 192, 98, 127, 174, 62, 50, 208, 5, 234, 176, 88, 126, 125, 216, 236, 61, 129, 139, 224, 146, 60, 244, 128, 226, 65, 136, 180, 52, 176, 201, 125, 100, 101, 175, 50, 158, 70, 217, 238, 142, 11, 22, 247, 78, 64, 158, 6, 227, 173, 107, 169, 86, 98, 202, 163, 150, 97, 31, 175, 0, 230, 143, 110, 12, 169, 1, 100, 92, 117, 135, 210, 177, 208, 4, 24, 142, 192, 44, 83, 68, 115, 102, 100, 154, 102, 134, 54, 229, 203, 31, 39, 117, 232, 179, 250, 234, 181, 34, 114, 192, 190, 12, 55, 114, 227, 171, 221, 147, 119, 3, 86, 237, 86, 181, 55, 12, 147, 28, 246, 146, 198, 15, 156, 37, 134, 167, 221, 108, 38, 120, 166, 147, 124, 101, 138, 201, 115, 98, 245, 51, 121, 95, 219, 72, 77, 168, 225, 36, 85, 5, 187, 156, 1, 128, 163, 176, 188, 78, 200, 136, 47, 123, 31, 36, 212, 77, 64, 145, 228, 126, 150, 231, 184, 2, 161, 147, 90, 36, 243, 214, 219, 119, 61, 76, 253, 136, 106, 241, 18, 92, 8, 122, 17, 239, 213, 100, 113, 248, 98, 134, 22, 157, 136, 249, 9, 154, 173, 49, 130, 205, 124, 251, 196, 147, 201, 204, 49, 140, 250, 74, 92, 55, 77, 43, 110, 237, 111, 115, 216, 40, 218, 213, 17, 18, 116, 147, 32, 176, 234, 50, 125, 108, 200, 21, 229, 231, 73, 145, 205, 36, 87, 222, 54, 248, 224, 94, 167, 20, 86, 8, 118, 3, 78, 25, 211, 107, 14, 45, 120, 85, 170, 11, 204, 90, 195, 150, 80, 229, 110, 30, 32, 4, 225, 144, 186, 71, 236, 125, 164, 117, 233, 246, 41, 177, 117, 69, 148, 43, 133, 76, 126, 129, 123, 153, 42, 82, 92, 158, 25, 62, 235, 134, 100, 207, 252, 100, 184, 246, 88, 174, 23, 100, 250, 17, 132, 38, 255, 17, 76, 101, 64, 23, 80, 172, 185, 199, 105, 105, 246, 224, 158, 46, 233, 129, 164, 117, 156, 8, 19, 98, 174, 15, 148, 226, 126, 45, 120, 54, 106, 87, 112, 62, 44, 86, 238, 162, 180, 221, 189, 99, 213, 199, 228, 154, 245, 250, 89, 93, 67, 113, 140, 56, 91, 49, 11, 110, 67, 161, 250, 93, 84, 108, 53, 184, 149, 14, 213, 252, 54, 238, 124, 255, 27, 99, 32, 207, 116, 45, 42, 86, 186, 226, 123, 126, 114, 39, 81, 112, 20, 191, 225, 210, 158, 131, 49, 217, 135, 51, 120, 172, 183, 54, 160, 33, 225, 23, 179, 98, 105, 173, 46, 10, 143, 26, 104, 34, 22, 254, 164, 146, 11, 19, 79, 168, 77, 168, 180, 55, 243, 91, 144, 204, 201, 233, 87, 138, 180, 220, 190, 137, 241, 208, 70, 59, 217, 109, 171, 108, 219, 199, 5, 65, 92, 21, 244, 102, 249, 150, 86, 181, 16, 163, 39, 50, 146, 76, 91, 250, 199, 40, 253, 68, 140, 81, 171, 241, 200, 146, 12, 98, 244, 173, 115, 63, 247, 125, 20, 137, 90, 165, 242, 98, 155, 252, 0, 1, 29, 208, 85, 129, 197, 43, 22, 114, 85, 239, 28, 88, 193, 108, 95, 167, 164, 14, 133, 103, 27, 133, 97, 151, 119, 68, 75, 47, 123, 230, 196, 161, 49, 225, 239, 176, 242, 39, 58, 75, 200, 253, 194, 247, 101, 232, 108, 135, 118, 90, 133, 205, 18, 75, 120, 222, 81, 69, 61, 206, 178, 240, 38, 184, 140, 113, 147, 150, 137, 105, 158, 151, 170, 49, 145, 206, 21, 170, 225, 76, 193, 7, 163, 174, 68, 253, 225, 135, 23, 51, 100, 178, 148, 139, 37, 219, 245, 157, 148, 203, 160, 75, 248, 64, 21, 116, 78, 35, 189, 86, 243, 173, 44, 227, 158, 225, 102, 209, 129, 62, 189, 121, 140, 165, 240, 83, 191, 127, 0, 146, 173, 194, 34, 191, 188, 173, 83, 174, 9, 62, 93, 220, 234, 17, 194, 16, 5, 171, 151, 203, 240, 186, 208, 161, 47, 136, 112, 182, 166, 244, 23, 90, 64, 166, 75, 128, 250, 119, 134, 145, 103, 56, 58, 134, 32, 177, 209, 12, 133, 2, 32, 92, 43, 234, 217, 136, 245, 203, 232, 236, 250, 6, 201, 33, 204, 96, 134, 219, 110, 30, 83, 63, 140, 163, 59, 223, 42, 114, 173, 121, 62, 12, 199, 216, 20, 91, 191, 11, 179, 27, 220, 89, 20, 183, 6, 19, 48, 191, 137, 137, 62, 178, 121, 100, 65, 107, 168, 133, 56, 100, 11, 155, 40, 220, 135, 227, 8, 219, 221, 92, 106, 235, 177, 119, 168, 98, 147, 212, 121, 23, 111, 138, 84, 123, 186, 29, 172, 125, 72, 12, 199, 23, 205, 190, 158, 248, 238, 203, 113, 67, 59, 12, 46, 48, 149, 170, 172, 120, 173, 133, 7, 9, 112, 250, 202, 22, 214, 25, 73, 241, 139, 130, 125, 185, 221, 162, 158, 242, 35, 128, 246, 163, 211, 208, 51, 129, 23, 77, 186, 154, 129, 110, 221, 211, 177, 69, 136, 186, 181, 36, 96, 215, 192, 23, 172, 220, 222, 169, 16, 203, 230, 88, 121, 206, 85, 122, 245, 227, 138, 81, 168, 238, 217, 94, 60, 148, 4, 193, 99, 110, 188, 190, 106, 73, 214, 26, 156, 19, 181, 108, 145, 166, 59, 151, 102, 177, 64, 65, 2, 224, 245, 51, 165, 214, 156, 102, 99, 24, 189, 77, 216, 12, 201, 183, 154, 193, 68, 61, 198, 58, 251, 41, 234, 124, 89, 155, 149, 178, 73, 28, 147, 51, 113, 224, 73, 8, 55, 153, 61, 229, 235, 66, 45, 224, 120, 6, 55, 191, 154, 218, 68, 203, 162, 28, 21, 216, 33, 107, 184, 75, 8, 104, 232, 154, 150, 190, 88, 109, 93, 220, 224, 177, 240, 123, 109, 119, 8, 23, 205, 121, 242, 26, 115, 164, 72, 143, 144, 163, 7, 107, 62, 80, 144, 117, 130, 147, 76, 236, 133, 160, 111, 60, 49, 59, 34, 114, 128, 111, 55, 219, 137, 159, 22, 85, 188, 80, 197, 124, 86, 43, 52, 106, 227, 35, 109, 236, 223, 183, 202, 122, 143, 19, 183, 80, 90, 243, 188, 132, 122, 65, 236, 26, 205, 173, 209, 177, 41, 101, 9, 50, 152, 176, 250, 38, 228, 140, 33, 93, 207, 129, 85, 84, 25, 204, 113, 30, 10, 1, 131, 71, 20, 139, 50, 73, 43, 97, 177, 220, 224, 226, 137, 16, 169, 45, 153, 23, 54, 145, 5, 55, 197, 168, 111, 109, 162, 208, 170, 103, 232, 137, 222, 245, 19, 25, 128, 214, 91, 65, 8, 130, 166, 3, 109, 41, 55, 206, 73, 237, 170, 178, 5, 13, 9, 103, 165, 83, 136, 245, 33, 61, 57, 91, 114, 110, 221, 12, 200, 224, 255, 44, 251, 192, 220, 61, 248, 16, 239, 45, 104, 200, 151, 10, 65, 247, 125, 42, 255, 160, 183, 9, 238, 36, 121, 57, 248, 101, 92, 219, 78, 61, 34, 213, 164, 170, 170, 125, 30, 134, 49, 167, 174, 34, 103, 251, 144, 247, 106, 89, 169, 199, 195, 155, 54, 47, 36, 41, 141, 184, 164, 9, 135, 237, 241, 198, 45, 172, 31, 116, 232, 176, 130, 201, 206, 146, 97, 212, 222, 210, 204, 243, 34, 211, 252, 103, 205, 1, 23, 212, 193, 73, 229, 205, 37, 203, 133, 120, 141, 249, 211, 209, 232, 94, 94, 113, 254, 177, 247, 180, 84, 135, 60, 128, 244, 2, 29, 199, 61, 85, 28, 137, 145, 24, 229, 95, 87, 92, 252, 71, 98, 134, 173, 56, 250, 199, 159, 64, 129, 104, 111, 17, 100, 252, 171, 168, 20, 157, 234, 160, 236, 80, 11, 33, 58, 14, 121, 91, 138, 118, 31, 111, 55, 236, 43, 144, 97, 236, 179, 208, 174, 224, 100, 153, 160, 2, 129, 220, 46, 165, 51, 1, 211, 154, 224, 111, 204, 159, 230, 205, 217, 225, 133, 24, 224, 17, 100, 67, 67, 132, 31, 41, 160, 230, 31, 168, 111, 77, 119, 254, 252, 73, 250, 219, 96, 168, 237, 188, 249, 99, 254, 47, 176, 3, 252, 207, 54, 71, 18, 245, 203, 70, 226, 55, 35, 230, 16, 121, 228, 134, 44, 152, 252, 173, 222, 96, 33, 63, 96, 183, 132, 82, 46, 100, 39, 148, 23, 44, 98, 184, 59, 50, 228, 30, 54, 19, 180, 236, 64, 50, 189, 91, 44, 236, 68, 90, 156, 77, 38, 67, 142, 252, 183, 186, 175, 84, 37, 162, 35, 124, 128, 233, 74, 24, 234, 120, 51, 13, 42, 246, 211, 56, 200, 10, 26, 225, 94, 211, 118, 36, 202, 140, 85, 201, 22, 212, 161, 128, 189, 165, 207, 243, 27, 247, 101, 31, 17, 17, 185, 243, 48, 228, 81, 76, 210, 225, 249, 73, 161, 3, 193, 184, 226, 95, 14, 152, 187, 98, 92, 216, 79, 199, 131, 244, 44, 154, 101, 176, 87, 68, 114, 32, 194, 178, 97, 2, 139, 217, 42, 146, 56, 217, 120, 34, 180, 96, 46, 118, 4, 185, 192, 26, 190, 48, 235, 114, 148, 115, 64, 159, 231, 209, 128, 98, 220, 184, 121, 223, 42, 177, 148, 42, 202, 42, 178, 234, 54, 217, 9, 170, 239, 216, 11, 15, 5, 171, 144, 226, 162, 26, 1, 177, 45, 11, 220, 68, 23, 120, 77, 97, 173, 137, 188, 16, 34, 87, 173, 158, 39, 100, 167, 183, 65, 125, 194, 145, 7, 7, 3, 176, 107, 15, 17, 216, 245, 22, 97, 126, 176, 51, 168, 181, 201, 237, 251, 7, 170, 204, 218, 5, 202, 222, 194, 213, 76, 23, 8, 158, 161, 28, 27, 192, 106, 236, 190, 192, 159, 163, 73, 95, 38, 35, 66, 118, 112, 243, 61, 142, 233, 88, 159, 160, 229, 80, 165, 104, 52, 104, 215, 139, 182, 114, 52, 103, 31, 159, 254, 75, 240, 245, 39, 126, 171, 39, 124, 223, 89, 133, 76, 194, 95, 88, 70, 235, 24, 63, 68, 25, 32, 202, 45, 40, 115, 116, 92, 27, 188, 199, 51, 149, 106, 79, 161, 168, 222, 155, 126, 152, 114, 58, 242, 50, 180, 17, 61, 196, 172, 118, 78, 249, 222, 103, 130, 180, 242, 143, 255, 169, 93, 153, 247, 65, 142, 91, 227, 149, 38, 141, 178, 123, 26, 91, 35, 26, 213, 11, 175, 134, 159, 48, 148, 74, 242, 166, 95, 119, 23, 101, 16, 74, 125, 9, 21, 238, 240, 191, 220, 41, 178, 150, 199, 215, 147, 44, 116, 68, 159, 237, 43, 193, 70, 166, 255, 133, 208, 55, 84, 92, 19, 217, 187, 48, 245, 47, 65, 31, 19, 85, 237, 87, 196, 66, 135, 219, 203, 250, 251, 221, 55, 43, 158, 159, 125, 17, 179, 9, 114, 46, 69, 121, 165, 113, 2, 198, 228, 23, 169, 161, 220, 206, 167, 211, 26, 222, 224, 244, 83, 0, 57, 120, 61, 98, 13, 188, 175, 43, 93, 95, 210, 82, 68, 12, 239, 84, 223, 2, 193, 206, 51, 133, 207, 57, 134, 180, 124, 166, 166, 212, 171, 177, 21, 92, 131, 39, 22, 148, 150, 111, 38, 110, 210, 162, 145, 253, 225, 57, 58, 157, 20, 197, 88, 196, 241, 54, 118, 238, 209, 161, 69, 147, 147, 66, 93, 42, 114, 76, 140, 190, 176, 39, 14, 198, 163, 140, 124, 53, 146, 154, 236, 99, 129, 34, 148, 199, 198, 76, 79, 183, 44, 211, 162, 233, 172, 140, 212, 80, 242, 172, 236, 157, 155, 221, 61, 217, 106, 26, 131, 85, 94, 237, 101, 228, 224, 188, 210, 197, 248, 178, 94, 130, 92, 235, 238, 109, 125, 134, 31, 48, 77, 50, 54, 217, 11, 166, 28, 162, 111, 52, 126, 240, 196, 238, 94, 107, 242, 82, 230, 162, 162, 51, 239, 76, 75, 235, 59, 23, 57, 6, 124, 238, 114, 161, 254, 141, 10, 41, 60, 188, 22, 220, 207, 46, 148, 105, 177, 21, 10, 45, 169, 167, 184, 62, 137, 162, 65, 245, 115, 177, 20, 171, 118, 29, 141, 148, 227, 79, 218, 95, 227, 42, 224, 49, 197, 170, 86, 84, 240, 33, 192, 121, 44, 182, 60, 96, 151, 100, 42, 241, 219, 77, 15, 144, 10, 220, 184, 105, 58, 139, 240, 154, 33, 151, 181, 177, 101, 82, 242, 117, 122, 9, 134, 243, 40, 39, 149, 71, 64, 167, 4, 146, 73, 182, 159, 129, 252, 50, 38, 210, 40, 52, 59, 220, 226, 73, 117, 80, 227, 255, 151, 193, 212, 31, 62, 92, 137, 163, 111, 114, 72, 3, 235, 163, 250, 116, 148, 137, 227, 25, 3, 64, 170, 75, 29, 158, 248, 174, 189, 189, 68, 204, 25, 132, 87, 203, 75, 163, 44, 45, 6, 32, 236, 99, 238, 221, 149, 5, 153, 9, 155, 197, 16, 206, 36, 186, 165, 230, 48, 194, 253, 139, 197, 217, 143, 65, 178, 74, 154, 184, 76, 195, 143, 165, 99, 12, 9, 203, 18, 44, 73, 86, 228, 21, 7, 206, 15, 172, 205, 118, 160, 149, 17, 41, 226, 129, 132, 84, 79, 217, 76, 250, 225, 139, 46, 123, 51, 164, 210, 228, 182, 75, 23, 225, 182, 136, 100, 87, 233, 241, 31, 38, 17, 70, 183, 166, 71, 121, 145, 58, 21, 225, 103, 72, 61, 66, 231, 214, 207, 138, 45, 50, 41, 131, 132, 4, 60, 42, 224, 119, 36, 70, 139, 229, 142, 128, 12, 117, 95, 199, 21, 192, 124, 221, 220, 142, 106, 220, 93, 176, 54, 181, 117, 32, 21, 195, 106, 183, 148, 252, 139, 32, 63, 121, 156, 196, 16, 20, 56, 84, 14, 45, 248, 54, 118, 35, 7, 110, 209, 10, 150, 38, 82, 232, 35, 7, 244, 29, 39, 64, 245, 217, 87, 33, 227, 189, 4, 14, 87, 58, 9, 206, 207, 20, 60, 160, 138, 10, 174, 208, 141, 159, 175, 27, 44, 175, 48, 150, 17, 141, 161, 47, 73, 0, 76, 197, 215, 148, 201, 207, 220, 74, 113, 238, 215, 92, 80, 225, 170, 222, 226, 33, 151, 84, 89, 39, 109, 111, 236, 35, 7, 63, 208, 30, 84, 24, 24, 146, 202, 58, 206, 245, 160, 148, 245, 165, 153, 174, 233, 117, 12, 130, 185, 126, 253, 214, 250, 184, 30, 9, 145, 56, 81, 23, 145, 162, 206, 164, 173, 60, 135, 170, 121, 27, 184, 129, 61, 15, 216, 40, 183, 235, 63, 109, 155, 9, 95, 210, 196, 13, 223, 174, 249, 230, 124, 183, 208, 229, 102, 0, 50, 164, 135, 10, 51, 203, 182, 93, 15, 216, 40, 227, 81, 226, 35, 15, 181, 228, 155, 141, 148, 70, 16, 168, 243, 162, 235, 255, 245, 193, 21, 192, 60, 228, 16, 18, 217, 194, 148, 225, 96, 71, 44, 212, 201, 126, 90, 236, 217, 170, 77, 218, 209, 65, 196, 145, 141, 58, 130, 25, 65, 40, 118, 90, 243, 137, 146, 128, 66, 56, 122, 33, 154, 42, 106, 119, 172, 104, 114, 161, 233, 45, 148, 101, 217, 91, 5, 248, 224, 12, 218, 178, 148, 250, 224, 206, 111, 65, 188, 41, 237, 49, 236, 136, 1, 42, 87, 74, 216, 87, 93, 26, 123, 69, 81, 65, 201, 18, 147, 221, 203, 168, 26, 80, 90, 120, 97, 6, 175, 75, 225, 22, 152, 255, 139, 92, 189, 193, 71, 1, 42, 197, 167, 7, 110, 236, 58, 68, 71, 15, 93, 185, 231, 185, 244, 86, 176, 145, 73, 148, 9, 117, 41, 203, 243, 150, 133, 216, 84, 129, 182, 0, 58, 119, 161, 57, 228, 11, 158, 213, 252, 195, 134, 230, 244, 120, 167, 175, 216, 127, 104, 107, 124, 103, 221, 73, 215, 55, 253, 105, 123, 107, 89, 100, 212, 150, 94, 61, 33, 22, 211, 34, 36, 73, 13, 5, 249, 205, 160, 207, 18, 40, 58, 116, 181, 190, 128, 226, 168, 30, 130, 201, 97, 215, 124, 239, 126, 167, 244, 183, 42, 47, 126, 69, 211, 194, 143, 94, 228, 155, 97, 154, 31, 181, 44, 84, 50, 13, 1, 105, 54, 96, 104, 151, 82, 30, 27, 196, 95, 160, 157, 221, 196, 182, 164, 40, 237, 168, 21, 196, 71, 188, 189, 7, 17, 134, 105, 115, 90, 70, 197, 9, 82, 235, 204, 23, 95, 1, 205, 253, 175, 59, 191, 29, 253, 154, 88, 227, 164, 254, 48, 27, 33, 24, 113, 142, 112, 204, 64, 43, 237, 77, 214, 229, 193, 150, 48, 208, 71, 84, 96, 52, 163, 129, 31, 142, 151, 193, 86, 122, 79, 74, 228, 227, 124, 101, 35, 191, 36, 107, 29, 185, 16, 246, 77, 226, 6, 63, 246, 200, 253, 227, 153, 54, 239, 67, 91, 223, 183, 138, 21, 241, 29, 93, 151, 77, 247, 110, 82, 71, 17, 37, 214, 115, 46, 236, 178, 185, 237, 15, 176, 116, 72, 225, 11, 214, 182, 244, 250, 146, 120, 248, 82, 129, 254, 120, 163, 34, 35, 172, 203, 228, 17, 124, 134, 76, 200, 171, 238, 231, 204, 84, 46, 218, 145, 194, 164, 241, 88, 255, 154, 183, 103, 103, 53, 157, 33, 146, 161, 66, 31, 235, 60, 64, 171, 129, 173, 255, 159, 140, 46, 33, 115, 205, 185, 227, 215, 110, 31, 161, 23, 63, 20, 160, 195, 39, 142, 19, 105, 23, 166, 192, 236, 248, 3, 164, 34, 177, 98, 232, 62, 93, 236, 37, 202, 237, 145, 38, 3, 146, 49, 134, 90, 167, 229, 247, 187, 107, 17, 29, 184, 185, 119, 112, 244, 4, 242, 120, 36, 66, 86, 126, 218, 186, 77, 91, 114, 44, 228, 54, 140, 144, 36, 28, 43, 107, 200, 117, 143, 40, 19, 27, 113, 128, 53, 123, 3, 169, 97, 26, 10, 154, 206, 80, 62, 9, 248, 114, 0, 238, 74, 90, 178, 139, 45, 101, 229, 149, 102, 237, 54, 49, 178, 31, 186, 126, 189, 97, 175, 120, 99, 71, 139, 144, 188, 203, 219, 151, 94, 17, 125, 90, 0, 251, 86, 141, 60, 215, 17, 3, 72, 15, 5, 139, 41, 245, 31, 170, 62, 29, 24, 33, 209, 202, 115, 72, 244, 250, 155, 112, 15, 36, 158, 113, 120, 193, 191, 154, 50, 18, 7, 251, 0, 134, 174, 34, 142, 23, 19, 253, 148, 231, 7, 51, 24, 229, 21, 209, 220, 197, 97, 242, 15, 93, 82, 58, 113, 107, 12, 244, 24, 86, 84, 94, 91, 45, 78, 251, 201, 109, 133, 169, 159, 247, 253, 161, 192, 242, 177, 203, 32, 216, 82, 128, 121, 161, 54, 218, 134, 84, 248, 201, 9, 151, 215, 175, 98, 10, 233, 242, 75, 36, 50, 139, 96, 70, 193, 13, 62, 43, 250, 202, 119, 171, 202, 5, 92, 243, 252, 74, 75, 226, 129, 196, 92, 142, 247, 151, 3, 55, 228, 86, 105, 85, 228, 49, 61, 248, 187, 147, 198, 34, 239, 63, 222, 165, 168, 92, 195, 163, 118, 143, 54, 87, 27, 32, 124, 63, 219, 239, 21, 95, 254, 100, 76, 119, 14, 156, 212, 170, 129, 239, 196, 253, 250, 128, 165, 101, 53, 170, 234, 149, 157, 10, 136, 113, 32, 141, 6, 192, 37, 52, 135, 2, 186, 137, 112, 10, 242, 74, 143, 159, 145, 166, 39, 188, 73, 155, 227, 3, 4, 95, 94, 111, 223, 147, 23, 251, 211, 177, 111, 230, 153, 190, 21, 194, 164, 28, 42, 156, 196, 120, 60, 229, 127, 217, 187, 67, 119, 249, 32, 132, 183, 16, 141, 76, 116, 36, 104, 24, 189, 193, 94, 139, 46, 79, 127, 228, 190, 0, 213, 113, 181, 173, 56, 13, 143, 212, 122, 85, 200, 229, 217, 14, 150, 22, 30, 209, 91, 8, 245, 23, 50, 50, 120, 254, 55, 119, 67, 17, 101, 242, 154, 201, 239, 13, 55, 90, 97, 219, 123, 84, 191, 194, 66, 204, 110, 66, 171, 13, 10, 90, 146, 28, 175, 184, 96, 191, 71, 109, 141, 173, 118, 12, 208, 186, 47, 62, 60, 117, 1, 113, 87, 43, 209, 234, 179, 160, 137, 102, 171, 30, 179, 220, 38, 251, 57, 149, 80, 219, 87, 140, 102, 151, 106, 28, 244, 190, 209, 157, 74, 47, 241, 114, 47, 89, 91, 71, 179, 168, 34, 226, 137, 86, 177, 147, 150, 53, 7, 75, 245, 185, 17, 245, 218, 139, 173, 168, 250, 70, 205, 95, 254, 22, 108, 211, 147, 90, 99, 116, 233, 78, 248, 137, 188, 54, 52, 166, 186, 138, 252, 163, 206, 48, 135, 229, 65, 105, 132, 168, 8, 102, 7, 71, 104, 204, 165, 129, 145, 125, 58, 14, 164, 117, 222, 160, 180, 217, 137, 220, 193, 248, 82, 37, 237, 243, 114, 73, 216, 215, 95, 211, 122, 75, 239, 84, 114, 163, 212, 98, 107, 233, 119, 217, 184, 210, 47, 123, 250, 62, 237, 206, 164, 29, 95, 26, 192, 189, 183, 120, 233, 115, 128, 240, 114, 27, 77, 84, 220, 87, 48, 93, 209, 27, 195, 155, 63, 246, 29, 172, 69, 71, 194, 154, 103, 103, 187, 143, 20, 106, 175, 186, 38, 233, 108, 29, 187, 133, 173, 47, 165, 233, 224, 203, 100, 118, 65, 124, 34, 178, 217, 9, 134, 249, 57, 88, 33, 187, 145, 1, 178, 33, 127, 34, 70, 78, 245, 149, 191, 188, 145, 170, 211, 125, 51, 89, 176, 64, 69, 29, 40, 43, 222, 107, 94, 93, 0, 29, 254, 167, 102, 133, 144, 183, 119, 91, 71, 48, 15, 244, 65, 113, 110, 49, 42, 162, 138, 177, 65, 40, 215, 185, 66, 234, 76, 83, 32, 44, 198, 245, 158, 251, 20, 17, 83, 18, 150, 126, 237, 241, 54, 89, 100, 18, 248, 110, 143, 223, 67, 144, 21, 108, 162, 251, 85, 5, 13, 187, 56, 6, 32, 225, 247, 127, 78, 233, 60, 41, 104, 77, 87, 242, 17, 63, 129, 254, 249, 212, 12, 60, 21, 91, 115, 204, 50, 139, 221, 132, 66, 35, 212, 44, 175, 151, 39, 244, 213, 86, 35, 138, 112, 127, 177, 49, 23, 40, 142, 23, 59, 109, 237, 191, 177, 120, 235, 109, 137, 15, 65, 178, 194, 212, 190, 244, 37, 141, 44, 66, 148, 52, 190, 237, 5, 152, 54, 115, 159, 192, 219, 44, 226, 171, 199, 174, 120, 11, 197, 181, 174, 192, 190, 245, 24, 11, 49, 138, 212, 107, 50, 67, 6, 43, 126, 128, 48, 26, 55, 101, 143, 231, 10, 33, 28, 40, 195, 74, 9, 170, 8, 53, 186, 89, 75, 9, 55, 201, 127, 208, 141, 156, 124, 241, 239, 142, 5, 152, 130, 197, 168, 80, 173, 71, 220, 123, 195, 108, 4, 21, 227, 185, 139, 43, 24, 93, 42, 38, 14, 44, 21, 187, 236, 220, 64, 186, 239, 242, 131, 84, 114, 58, 19, 195, 246, 194, 209, 157, 74, 127, 158, 178, 22, 15, 112, 162, 70, 70, 102, 17, 0, 184, 172, 27, 24, 0, 75, 136, 24, 37, 206, 196, 10, 68, 152, 94, 233, 150, 57, 246, 232, 71, 166, 240, 194, 157, 197, 32, 30, 109, 102, 206, 212, 69, 140, 74, 6, 245, 15, 55, 194, 254, 244, 27, 188, 2, 138, 201, 97, 130, 177, 151, 219, 189, 219, 224, 213, 64, 71, 38, 230, 27, 89, 30, 124, 209, 200, 29, 245, 255, 30, 134, 73, 15, 67, 52, 168, 241, 27, 29, 171, 117, 75, 109, 187, 183, 18, 82, 220, 88, 4, 88, 94, 234, 168, 249, 141, 93, 38, 66, 226, 161, 187, 251, 23, 240, 202, 174, 9, 219, 224, 93, 164, 212, 148, 159, 219, 138, 243, 191, 116, 202, 35, 73, 223, 101, 27, 47, 19, 9, 174, 118, 242, 230, 103, 243, 75, 170, 241, 159, 5, 128, 171, 13, 100, 220, 160, 226, 34, 129, 111, 84, 110, 62, 60, 38, 64, 89, 107, 92, 204, 129, 71, 116, 98, 187, 228, 44, 128, 121, 201, 59, 63, 112, 2, 172, 112, 212, 87, 129, 129, 203, 248, 126, 89, 152, 118, 48, 225, 225, 14, 184, 71, 96, 71, 96, 161, 23, 163, 55, 26, 4, 70, 47, 128, 8, 245, 181, 71, 40, 35, 4, 212, 151, 221, 127, 232, 110, 92, 107, 19, 113, 226, 9, 202, 238, 2, 146, 251, 86, 23, 37, 196, 240, 109, 114, 144, 146, 153, 254, 143, 73, 254, 132, 138, 238, 182, 74, 26, 32, 37, 157, 152, 244, 207, 216, 141, 13, 189, 134, 101, 34, 39, 14, 80, 79, 75, 12, 235, 0, 169, 56, 171, 237, 130, 16, 211, 11, 179, 123, 211, 95, 185, 210, 115, 21, 6, 13, 42, 18, 43, 162, 125, 145, 40, 10, 15, 112, 72, 255, 116, 85, 0, 236, 64, 125, 19, 208, 223, 135, 54, 219, 46, 135, 6, 79, 39, 147, 191, 71, 197, 11, 115, 199, 174, 97, 57, 11, 90, 106, 171, 36, 73, 101, 4, 225, 185, 31, 51, 47, 234, 208, 194, 47, 233, 177, 243, 171, 46, 191, 235, 138, 39, 190, 215, 146, 167, 33, 9, 25, 227, 101, 111, 209, 60, 0, 130, 146, 11, 3, 81, 66, 36, 136, 198, 237, 186, 128, 8, 244, 99, 147, 202, 148, 37, 93, 141, 121, 158, 126, 94, 243, 48, 142, 253, 199, 43, 237, 13, 227, 46, 174, 65, 47, 255, 18, 55, 100, 138, 85, 92, 212, 53, 116, 42, 240, 77, 78, 172, 189, 66, 229, 7, 161, 250, 177, 57, 101, 188, 151, 166, 172, 200, 25, 237, 237, 106, 175, 110, 32, 71, 200, 198, 188, 136, 106, 122, 127, 118, 175, 108, 182, 202, 127, 33, 140, 229, 185, 117, 25, 51, 235, 120, 184, 74, 237, 62, 246, 217, 75, 76, 170, 62, 15, 54, 101, 111, 6, 179, 245, 221, 35, 209, 232, 252, 64, 8, 65, 207, 39, 149, 61, 79, 9, 222, 76, 12, 203, 211, 75, 178, 183, 129, 108, 152, 141, 211, 48, 133, 236, 174, 253, 165, 189, 220, 79, 151, 215, 181, 113, 212, 177, 172, 91, 183, 223, 226, 3, 140, 181, 61, 128, 48, 151, 21, 19, 206, 42, 174, 209, 20, 142, 138, 192, 230, 125, 113, 224, 80, 147, 106, 179, 109, 50, 100, 187, 22, 230, 118, 214, 161, 92, 64, 66, 57, 55, 22, 151, 98, 253, 71, 205, 85, 151, 68, 241, 181, 104, 46, 35, 4, 43, 254, 3, 145, 37, 174, 190, 230, 80, 236, 252, 90, 41, 239, 168, 135, 136, 227, 78, 150, 5, 15, 191, 225, 63, 240, 184, 62, 106, 211, 139, 127, 73, 223, 8, 3, 3, 252, 3, 244, 10, 248, 139, 94, 182, 150, 91, 10, 185, 242, 35, 251, 38, 152, 209, 114, 252, 145, 248, 155, 152, 49, 119, 247, 60, 86, 190, 203, 107, 113, 216, 218, 249, 217, 167, 37, 25, 127, 118, 183, 11, 237, 159, 29, 134, 5, 73, 75, 103, 174, 215, 33, 67, 68, 231, 87, 243, 205, 246, 72, 95, 163, 101, 30, 117, 190, 232, 30, 17, 164, 52, 31, 106, 57, 189, 199, 165, 213, 43, 173, 192, 114, 8, 2, 33, 131, 32, 171, 154, 230, 134, 87, 172, 93, 79, 195, 16, 227, 179, 131, 97, 28, 52, 88, 156, 160, 67, 20, 189, 72, 165, 79, 170, 74, 199, 31, 34, 102, 185, 109, 219, 253, 188, 238, 136, 36, 143, 10, 220, 15, 94, 28, 58, 14, 159, 202, 32, 130, 14, 170, 151, 201, 21, 231, 147, 163, 49, 77, 241, 20, 71, 44, 212, 16, 188, 127, 88, 228, 237, 105, 214, 190, 254, 31, 151, 162, 102, 26, 9, 26, 174, 51, 203, 49, 73, 174, 108, 29, 200, 59, 86, 254, 163, 154, 88, 106, 28, 219, 102, 70, 59, 197, 115, 12, 212, 169, 213, 104, 238, 172, 71, 167, 26, 90, 22, 134, 18, 56, 194, 128, 248, 155, 251, 186, 62, 119, 225, 78, 143, 236, 50, 150, 98, 58, 137, 209, 0, 202, 91, 198, 44, 240, 221, 147, 106, 55, 219, 92, 169, 97, 112, 227, 217, 232, 233, 239, 34, 186, 40, 66, 0, 46, 4, 15, 124, 180, 109, 200, 23, 137, 98, 3, 34, 122, 84, 99, 213, 10, 199, 187, 53, 197, 28, 191, 183, 220, 226, 57, 60, 167, 246, 133, 99, 186, 102, 2, 11, 113, 78, 0, 182, 98, 132, 249, 127, 179, 89, 62, 226, 217, 227, 77, 75, 159, 221, 173, 214, 180, 166, 162, 131, 19, 65, 228, 69, 234, 167, 210, 248, 173, 93, 173, 86, 54, 104, 216, 135, 208, 142, 100, 255, 145, 49, 224, 215, 97, 105, 66, 3, 49, 215, 236, 32, 142, 223, 203, 121, 90, 161, 129, 124, 145, 122, 53, 169, 6, 87, 78, 40, 200, 122, 196, 170, 89, 244, 71, 247, 215, 148, 59, 49, 57, 143, 148, 227, 100, 114, 134, 78, 235, 85, 8, 39, 76, 42, 170, 136, 125, 163, 152, 115, 46, 34, 162, 105, 144, 67, 91, 222, 129, 160, 34, 167, 27, 183, 8, 113, 15, 106, 225, 7, 126, 88, 180, 154, 75, 190, 93, 255, 86, 179, 133, 216, 92, 27, 145, 75, 248, 224, 184, 215, 249, 167, 5, 143, 116, 92, 185, 175, 23, 41, 172, 44, 161, 162, 96, 91, 190, 144, 206, 57, 82, 15, 45, 195, 198, 94, 177, 192, 183, 140, 37, 228, 156, 236, 201, 159, 5, 90, 79, 224, 56, 116, 167, 210, 39, 61, 68, 83, 155, 211, 42, 10, 184, 227, 156, 152, 166, 207, 176, 65, 25, 211, 172, 108, 135, 239, 200, 140, 40, 227, 91, 166, 5, 95, 115, 241, 226, 72, 155, 45, 198, 192, 44, 238, 119, 224, 23, 228, 48, 12, 179, 120, 109, 35, 152, 181, 132, 63, 9, 29, 43, 197, 125, 61, 113, 14, 175, 76, 255, 237, 189, 229, 7, 130, 125, 64, 100, 12, 84, 56, 59, 159, 117, 89, 198, 60, 164, 13, 60, 60, 39, 67, 164, 187, 10, 80, 104, 50, 245, 232, 66, 42, 177, 76, 1, 64, 70, 239, 10, 168, 21, 32, 253, 183, 69, 112, 146, 239, 146, 204, 217, 32, 91, 161, 203, 249, 33, 64, 168, 60, 217, 78, 89, 19, 172, 66, 228, 145, 38, 151, 112, 79, 14, 51, 187, 71, 202, 151, 69, 190, 19, 99, 39, 159, 49, 159, 230, 85, 186, 149, 71, 27, 151, 70, 1, 60, 245, 79, 183, 67, 76, 238, 58, 211, 46, 241, 63, 38, 133, 92, 22, 33, 120, 135, 38, 75, 102, 87, 243, 146, 101, 35, 71, 112, 110, 138, 94, 96, 188, 113, 35, 58, 139, 49, 141, 226, 98, 178, 97, 178, 40, 165, 24, 125, 58, 74, 168, 230, 164, 50, 26, 84, 62, 190, 187, 59, 28, 119, 66, 157, 159, 208, 2, 169, 71, 235, 129, 117, 134, 48, 209, 240, 243, 239, 60, 109, 130, 136, 4, 162, 33, 58, 243, 100, 210, 38, 240, 225, 88, 60, 114, 208, 27, 58, 143, 137, 193, 130, 105, 255, 159, 111, 151, 138, 165, 141, 146, 15, 78, 111, 65, 176, 30, 178, 243, 89, 171, 188, 78, 141, 137, 18, 31, 100, 204, 46, 199, 6, 154, 181, 89, 132, 160, 97, 88, 52, 245, 184, 76, 213, 171, 37, 237, 65, 51, 203, 3, 193, 56, 131, 186, 2, 29, 153, 239, 39, 132, 84, 103, 154, 120, 158, 55, 25, 8, 129, 110, 27, 209, 126, 128, 8, 151, 18, 187, 128, 118, 87, 133, 118, 91, 152, 123, 104, 70, 160, 132, 115, 6, 150, 48, 13, 143, 54, 43, 99, 32, 141, 7, 34, 85, 115, 163, 118, 68, 129, 191, 207, 22, 57, 82, 228, 138, 118, 120, 11, 70, 208, 62, 139, 138, 132, 77, 230, 62, 50, 249, 78, 205, 215, 205, 59, 208, 219, 98, 73, 200, 139, 153, 1, 146, 99, 46, 29, 244, 160, 17, 51, 82, 4, 195, 160, 76, 206, 109, 135, 70, 111, 215, 118, 249, 255, 130, 101, 95, 234, 197, 231, 25, 6, 24, 19, 98, 107, 131, 106, 71, 1, 238, 8, 26, 206, 26, 23, 46, 235, 83, 146, 218, 103, 140, 26, 18, 177, 168, 139, 133, 109, 100, 80, 144, 1, 98, 82, 191, 172, 212, 31, 171, 156, 219, 55, 68, 23, 151, 189, 210, 78, 253, 172, 183, 30, 73, 151, 90, 244, 18, 82, 245, 109, 156, 159, 87, 38, 67, 203, 46, 21, 135, 189, 247, 65, 202, 52, 165, 111, 105, 114, 206, 121, 81, 2, 143, 144, 195, 240, 45, 200, 186, 255, 101, 107, 105, 231, 16, 103, 147, 162, 173, 19, 22, 36, 110, 222, 58, 33, 114, 194, 90, 132, 141, 72, 198, 100, 193, 25, 142, 160, 104, 5, 230, 179, 109, 48, 58, 61, 84, 16, 7, 97, 93, 58, 156, 93, 7, 62, 51, 144, 121, 184, 193, 229, 103, 38, 219, 96, 72, 125, 117, 167, 196, 189, 22, 133, 192, 199, 176, 253, 208, 21, 52, 36, 116, 217, 98, 113, 140, 214, 207, 8, 172, 33, 67, 38, 120, 13, 67, 255, 156, 23, 59, 103, 154, 73, 192, 28, 212, 106, 245, 233, 192, 168, 147, 163, 51, 92, 67, 24, 72, 104, 22, 16, 152, 14, 32, 113, 181, 8, 205, 167, 225, 72, 109, 126, 73, 64, 126, 1, 251, 97, 250, 255, 153, 158, 180, 73, 173, 143, 179, 225, 48, 128, 139, 243, 96, 119, 107, 177, 100, 37, 68, 31, 243, 204, 103, 116, 178, 14, 152, 242, 55, 121, 205, 70, 254, 156, 238, 250, 103, 193, 238, 124, 238, 209, 80, 85, 18, 93, 22, 82, 168, 179, 99, 109, 232, 214, 27, 196, 93, 158, 139, 240, 10, 247, 44, 62, 86, 130, 96, 40, 28, 78, 23, 13, 60, 10, 136, 134, 156, 201, 74, 125, 240, 254, 14, 86, 170, 19, 226, 193, 1, 119, 152, 39, 163, 1, 30, 5, 224, 61, 24, 180, 11, 178, 166, 200, 83, 90, 91, 52, 196, 203, 222, 77, 161, 37, 190, 74, 8, 27, 73, 132, 176, 74, 111, 147, 40, 66, 234, 184, 115, 222, 55, 35, 143, 213, 117, 47, 83, 203, 191, 208, 96, 242, 149, 178, 57, 26, 134, 1, 14, 34, 154, 185, 45, 77, 194, 53, 72, 142, 201, 209, 132, 63, 113, 87, 218, 156, 92, 124, 20, 53, 163, 138, 165, 251, 179, 214, 204, 88, 120, 21, 30, 151, 172, 143, 189, 16, 125, 166, 5, 150, 84, 239, 110, 112, 163, 188, 230, 226, 238, 77, 168, 174, 243, 123, 141, 134, 130, 129, 4, 211, 95, 168, 35, 128, 101, 22, 86, 130, 171, 252, 227, 115, 248, 160, 131, 191, 5, 159, 31, 174, 174, 38, 10, 24, 38, 4, 213, 76, 250, 27, 158, 111, 23, 225, 73, 243, 23, 87, 205, 25, 238, 171, 216, 170, 20, 73, 47, 172, 198, 51, 21, 13, 189, 153, 55, 121, 30, 146, 72, 84, 175, 221, 202, 71, 146, 239, 53, 159, 208, 153, 3, 168, 74, 52, 127, 186, 208, 240, 66, 207, 67, 81, 213, 200, 235, 181, 5, 70, 27, 215, 224, 145, 246, 205, 55, 107, 165, 52, 135, 102, 125, 29, 235, 14, 224, 39, 225, 99, 83, 133, 248, 212, 118, 239, 135, 80, 40, 95, 54, 4, 61, 159, 75, 114, 140, 181, 14, 172, 218, 106, 163, 206, 66, 225, 64, 28, 177, 32, 118, 142, 122, 89, 92, 227, 158, 233, 165, 205, 50, 190, 13, 251, 51, 52, 4, 145, 148, 175, 223, 5, 177, 155, 182, 191, 114, 27, 62, 234, 117, 196, 145, 162, 157, 72, 153, 33, 230, 73, 175, 91, 48, 158, 119, 242, 214, 123, 160, 228, 135, 54, 228, 22, 145, 40, 233, 47, 110, 210, 180, 40, 39, 244, 59, 4, 137, 15, 21, 166, 207, 212, 222, 252, 104, 81, 116, 141, 21, 202, 10, 152, 242, 208, 119, 109, 217, 140, 244, 76, 212, 71, 66, 36, 32, 16, 213, 151, 236, 228, 134, 59, 173, 209, 79, 185, 232, 242, 230, 36, 117, 188, 192, 140, 99, 99, 229, 151, 217, 79, 197, 117, 206, 31, 179, 206, 168, 139, 60, 64, 41, 145, 2, 145, 75, 102, 94, 150, 57, 171, 137, 75, 78, 6, 157, 147, 128, 224, 94, 116, 244, 74, 208, 143, 123, 3, 1, 160, 19, 42, 253, 44, 164, 174, 226, 234, 83, 75, 15, 7, 57, 11, 51, 145, 170, 192, 166, 184, 203, 169, 28, 131, 168, 126, 43, 64, 125, 162, 118, 129, 13, 78, 52, 63, 3, 126, 41, 203, 20, 91, 7, 239, 178, 146, 207, 14, 75, 162, 84, 115, 204, 8, 193, 142, 183, 75, 112, 222, 95, 198, 124, 10, 241, 209, 229, 233, 210, 84, 107, 113, 52, 123, 251, 243, 4, 14, 148, 180, 133, 208, 143, 67, 18, 194, 23, 142, 196, 130, 44, 244, 0, 222, 162, 194, 235, 215, 240, 150, 103, 207, 121, 4, 102, 0, 49, 188, 66, 137, 148, 141, 182, 32, 172, 181, 175, 65, 2, 35, 248, 87, 65, 58, 249, 108, 189, 56, 187, 194, 219, 111, 214, 35, 125, 75, 189, 91, 131, 117, 219, 181, 29, 31, 82, 235, 203, 124, 88, 242, 155, 180, 169, 223, 197, 244, 41, 179, 78, 101, 183, 28, 90, 147, 98, 104, 49, 201, 90, 110, 237, 171, 26, 5, 162, 53, 5, 109, 131, 214, 121, 90, 219, 2, 58, 168, 75, 147, 224, 1, 50, 57, 238, 117, 224, 43, 238, 38, 65, 248, 41, 37, 50, 97, 0, 55, 223, 86, 56, 17, 90, 52, 230, 5, 225, 41, 151, 16, 10, 120, 100, 153, 51, 249, 39, 178, 193, 171, 226, 91, 87, 43, 203, 150, 223, 41, 243, 50, 60, 140, 203, 186, 100, 131, 249, 242, 117, 236, 180, 120, 150, 210, 65, 127, 25], - [98, 137, 192, 169, 86, 21, 13, 46, 87, 195, 150, 1, 3, 158, 225, 69, 113, 21, 181, 255, 87, 162, 0, 253, 21, 243, 245, 115, 23, 28, 192, 238, 235, 238, 64, 246, 197, 118, 130, 185, 148, 126, 3, 37, 26, 177, 199, 48, 159, 201, 0, 125, 95, 160, 49, 170, 64, 39, 245, 195, 94, 163, 46, 114, 133, 16, 236, 186, 227, 32, 21, 228, 187, 110, 84, 138, 40, 50, 229, 229, 92, 205, 7, 49, 214, 227, 31, 86, 174, 176, 194, 231, 160, 129, 189, 129, 76, 236, 242, 65, 219, 153, 178, 55, 34, 84, 11, 199, 12, 156, 228, 250, 106, 24, 204, 26, 2, 23, 255, 19, 254, 28, 134, 50, 14, 21, 128, 134, 48, 216, 217, 38, 206, 95, 174, 224, 19, 220, 23, 21, 159, 178, 223, 236, 89, 57, 205, 0, 12, 225, 65, 193, 155, 189, 47, 103, 203, 113, 217, 147, 226, 69, 31, 153, 190, 6, 243, 212, 128, 28, 29, 238, 37, 248, 202, 229, 26, 239, 214, 126, 75, 235, 7, 90, 23, 107, 39, 128, 128, 65, 25, 140, 93, 33, 71, 109, 44, 135, 205, 127, 157, 175, 104, 32, 227, 241, 16, 200, 139, 61, 71, 75, 22, 71, 243, 16, 174, 32, 188, 174, 231, 81, 45, 63, 214, 95, 174, 188, 205, 191, 32, 12, 94, 195, 230, 38, 170, 126, 209, 99, 44, 141, 98, 104, 13, 238, 109, 246, 211, 203, 193, 97, 172, 90, 231, 4, 189, 138, 97, 101, 153, 238, 140, 80, 49, 75, 132, 68, 154, 112, 150, 191, 251, 130, 131, 17, 33, 211, 208, 242, 180, 76, 179, 225, 199, 113, 60, 132, 253, 168, 131, 126, 113, 133, 104, 140, 73, 96, 150, 50, 131, 99, 98, 226, 15, 79, 147, 113, 120, 4, 182, 71, 28, 187, 239, 164, 176, 114, 98, 235, 236, 59, 144, 15, 239, 146, 243, 123, 105, 93, 85, 204, 94, 223, 171, 29, 212, 95, 163, 19, 124, 230, 4, 167, 193, 191, 180, 28, 206, 45, 86, 149, 219, 239, 127, 223, 56, 64, 214, 161, 169, 134, 219, 143, 147, 92, 85, 209, 133, 163, 16, 51, 79, 167, 160, 35, 3, 176, 212, 3, 17, 80, 104, 74, 48, 169, 64, 247, 108, 213, 160, 142, 212, 228, 219, 173, 108, 141, 223, 213, 173, 33, 209, 22, 195, 212, 176, 183, 187, 32, 198, 139, 75, 24, 149, 239, 8, 13, 181, 173, 145, 83, 89, 74, 47, 5, 142, 234, 232, 95, 151, 192, 160, 52, 70, 150, 85, 125, 176, 77, 250, 205, 42, 97, 30, 18, 118, 185, 157, 125, 70, 145, 72, 193, 7, 151, 241, 210, 254, 47, 170, 154, 18, 124, 107, 45, 253, 215, 246, 10, 223, 183, 80, 43, 139, 174, 237, 113, 188, 136, 147, 27, 243, 120, 248, 74, 26, 175, 38, 160, 169, 210, 60, 104, 129, 76, 169, 98, 61, 198, 236, 182, 22, 14, 172, 162, 61, 216, 49, 42, 27, 239, 17, 105, 117, 81, 39, 247, 146, 104, 24, 124, 63, 231, 202, 149, 24, 13, 183, 43, 211, 247, 203, 105, 68, 1, 210, 217, 140, 230, 30, 113, 227, 90, 171, 105, 245, 233, 169, 103, 101, 158, 220, 62, 79, 117, 76, 246, 69, 35, 193, 175, 63, 43, 227, 0, 245, 157, 21, 58, 38, 130, 108, 230, 253, 174, 164, 23, 48, 111, 135, 53, 58, 50, 64, 77, 203, 141, 243, 71, 33, 105, 181, 168, 98, 154, 136, 69, 236, 119, 213, 137, 172, 136, 254, 218, 44, 254, 144, 233, 34, 94, 74, 78, 0, 176, 141, 162, 157, 26, 214, 219, 164, 137, 162, 18, 61, 25, 190, 185, 58, 91, 42, 145, 160, 243, 9, 229, 44, 105, 155, 85, 99, 133, 173, 245, 10, 28, 119, 79, 144, 247, 252, 131, 99, 56, 229, 231, 45, 24, 151, 69, 151, 206, 17, 3, 2, 191, 69, 249, 20, 168, 118, 70, 68, 47, 195, 183, 172, 105, 87, 86, 197, 5, 125, 130, 161, 55, 56, 185, 250, 158, 111, 20, 76, 93, 157, 81, 183, 164, 178, 91, 196, 153, 233, 184, 52, 248, 107, 215, 124, 104, 255, 1, 245, 249, 161, 184, 73, 79, 72, 202, 243, 18, 239, 197, 225, 212, 88, 36, 167, 143, 150, 29, 230, 211, 249, 60, 173, 176, 236, 246, 136, 233, 62, 230, 201, 22, 117, 166, 77, 99, 78, 90, 101, 54, 57, 26, 158, 188, 143, 64, 167, 255, 188, 56, 140, 36, 241, 92, 155, 225, 104, 37, 193, 26, 98, 118, 191, 93, 102, 189, 208, 253, 176, 196, 208, 149, 245, 51, 0, 111, 132, 101, 190, 236, 166, 150, 60, 198, 53, 123, 223, 85, 36, 97, 185, 31, 1, 164, 21, 226, 175, 207, 61, 140, 157, 101, 164, 138, 177, 247, 122, 202, 73, 45, 199, 88, 31, 106, 234, 68, 239, 237, 191, 93, 54, 177, 153, 79, 140, 13, 64, 114, 240, 255, 227, 231, 74, 50, 111, 31, 149, 159, 59, 219, 251, 213, 254, 80, 44, 214, 178, 125, 114, 209, 69, 202, 45, 194, 212, 107, 248, 146, 113, 214, 59, 12, 22, 171, 189, 247, 20, 223, 127, 42, 217, 207, 17, 176, 119, 167, 169, 165, 7, 219, 164, 77, 91, 130, 43, 210, 132, 83, 154, 92, 25, 3, 187, 120, 140, 179, 161, 158, 198, 112, 212, 11, 120, 65, 117, 245, 174, 226, 170, 27, 230, 120, 218, 97, 255, 46, 234, 30, 195, 195, 112, 218, 175, 97, 250, 134, 130, 161, 88, 40, 120, 199, 230, 133, 81, 106, 98, 75, 30, 14, 6, 5, 103, 153, 32, 12, 171, 213, 66, 164, 179, 80, 40, 160, 146, 178, 53, 114, 90, 180, 180, 200, 52, 112, 223, 7, 150, 206, 234, 71, 180, 141, 152, 205, 233, 111, 244, 57, 186, 48, 58, 6, 241, 172, 60, 117, 123, 226, 171, 68, 36, 97, 192, 86, 138, 253, 173, 94, 29, 243, 248, 125, 164, 153, 109, 56, 88, 21, 184, 157, 36, 209, 149, 157, 112, 193, 209, 30, 190, 111, 78, 169, 208, 22, 69, 23, 75, 76, 162, 205, 27, 221, 42, 25, 217, 166, 125, 243, 253, 203, 121, 203, 74, 234, 24, 118, 228, 202, 80, 67, 133, 66, 202, 117, 57, 117, 89, 74, 112, 17, 119, 225, 157, 59, 181, 255, 110, 115, 233, 57, 249, 74, 104, 253, 117, 23, 157, 80, 68, 175, 143, 92, 81, 244, 136, 32, 187, 254, 151, 198, 144, 244, 94, 180, 109, 8, 83, 200, 149, 128, 119, 184, 90, 255, 185, 145, 89, 104, 99, 244, 145, 110, 179, 59, 171, 53, 90, 46, 172, 218, 213, 153, 47, 96, 76, 60, 15, 160, 203, 72, 185, 73, 112, 239, 237, 206, 120, 85, 229, 189, 173, 214, 172, 91, 120, 7, 199, 171, 177, 132, 58, 24, 225, 234, 244, 198, 158, 133, 231, 237, 235, 31, 13, 76, 95, 104, 190, 203, 11, 85, 3, 190, 172, 153, 230, 251, 156, 78, 122, 189, 41, 148, 156, 110, 211, 231, 191, 60, 138, 130, 61, 65, 112, 203, 53, 58, 99, 36, 204, 135, 230, 111, 42, 39, 211, 115, 174, 53, 42, 62, 244, 201, 157, 175, 141, 31, 160, 251, 244, 191, 52, 34, 186, 245, 141, 19, 206, 13, 7, 125, 104, 144, 255, 105, 61, 117, 230, 241, 132, 55, 115, 162, 30, 160, 127, 177, 83, 10, 20, 207, 71, 248, 177, 1, 137, 24, 43, 50, 35, 205, 4, 16, 223, 85, 9, 56, 57, 235, 226, 237, 253, 46, 205, 111, 104, 40, 15, 161, 148, 36, 186, 183, 131, 148, 225, 174, 237, 185, 233, 133, 244, 46, 149, 126, 32, 176, 212, 167, 105, 55, 17, 141, 213, 196, 1, 14, 98, 246, 254, 118, 71, 193, 74, 197, 134, 201, 191, 122, 54, 107, 118, 211, 187, 40, 189, 248, 62, 115, 160, 130, 179, 86, 222, 59, 254, 168, 231, 94, 206, 251, 218, 203, 110, 62, 41, 169, 63, 142, 22, 170, 92, 23, 17, 95, 216, 5, 54, 151, 115, 237, 12, 132, 160, 89, 125, 200, 225, 55, 29, 230, 137, 240, 105, 186, 98, 199, 92, 221, 182, 203, 71, 9, 132, 245, 67, 30, 29, 184, 145, 138, 241, 20, 17, 167, 15, 165, 7, 123, 1, 252, 234, 116, 246, 65, 116, 194, 189, 74, 214, 126, 185, 240, 179, 46, 58, 114, 63, 81, 76, 208, 225, 24, 105, 4, 127, 70, 242, 244, 189, 221, 77, 47, 230, 56, 175, 68, 146, 53, 199, 30, 247, 73, 13, 183, 205, 10, 63, 9, 241, 8, 86, 165, 228, 23, 254, 153, 204, 17, 254, 45, 206, 174, 138, 3, 175, 31, 70, 192, 54, 71, 146, 78, 132, 159, 157, 179, 185, 180, 160, 255, 139, 57, 195, 53, 236, 240, 48, 230, 208, 82, 182, 3, 237, 198, 157, 94, 254, 75, 82, 120, 231, 14, 187, 197, 32, 138, 225, 84, 94, 65, 249, 82, 191, 64, 207, 139, 244, 95, 216, 175, 53, 172, 236, 132, 137, 206, 58, 170, 213, 59, 0, 224, 76, 147, 0, 251, 167, 211, 112, 11, 100, 112, 99, 178, 226, 214, 230, 1, 59, 147, 172, 107, 125, 204, 207, 224, 233, 76, 81, 184, 98, 147, 73, 144, 199, 101, 242, 27, 213, 127, 17, 66, 93, 152, 238, 116, 235, 61, 222, 191, 106, 167, 143, 149, 100, 139, 253, 253, 51, 234, 25, 101, 176, 103, 184, 255, 45, 108, 236, 192, 225, 45, 4, 17, 158, 233, 209, 235, 189, 25, 64, 48, 254, 190, 160, 217, 2, 108, 15, 214, 147, 234, 185, 76, 26, 104, 50, 109, 196, 23, 127, 26, 170, 186, 21, 234, 50, 41, 221, 102, 112, 2, 73, 225, 43, 188, 203, 187, 181, 28, 161, 243, 168, 49, 19, 60, 63, 158, 135, 122, 114, 243, 246, 137, 102, 63, 118, 72, 159, 21, 48, 52, 135, 90, 159, 192, 133, 109, 49, 37, 22, 41, 101, 107, 123, 137, 181, 202, 120, 169, 148, 223, 137, 24, 114, 35, 117, 239, 173, 155, 161, 157, 250, 243, 174, 144, 116, 140, 198, 172, 30, 234, 114, 224, 176, 59, 48, 74, 21, 40, 145, 131, 24, 152, 251, 113, 238, 51, 172, 30, 203, 197, 204, 155, 114, 90, 176, 21, 136, 92, 80, 130, 60, 249, 224, 136, 84, 22, 114, 48, 76, 10, 100, 136, 0, 227, 218, 32, 20, 13, 90, 141, 55, 6, 44, 216, 179, 22, 106, 232, 244, 93, 120, 44, 0, 128, 110, 243, 239, 175, 85, 25, 249, 242, 24, 235, 47, 72, 65, 191, 215, 46, 229, 147, 20, 190, 255, 129, 174, 145, 227, 123, 229, 42, 236, 150, 145, 212, 240, 14, 154, 152, 31, 28, 209, 171, 222, 17, 104, 243, 167, 219, 70, 109, 160, 129, 83, 185, 120, 239, 188, 208, 172, 161, 28, 127, 124, 113, 189, 121, 180, 24, 230, 69, 161, 214, 80, 128, 255, 73, 101, 143, 119, 228, 52, 84, 234, 100, 191, 245, 66, 47, 16, 110, 61, 13, 67, 164, 147, 68, 17, 70, 193, 198, 188, 57, 201, 48, 78, 42, 212, 18, 5, 14, 83, 168, 153, 142, 147, 21, 93, 125, 151, 183, 84, 209, 225, 14, 208, 67, 67, 72, 25, 123, 172, 92, 241, 66, 222, 76, 109, 18, 0, 30, 137, 158, 233, 84, 108, 29, 151, 118, 160, 4, 73, 62, 157, 168, 141, 111, 44, 77, 62, 120, 34, 216, 65, 78, 33, 27, 186, 5, 124, 193, 50, 119, 157, 127, 195, 141, 201, 253, 76, 81, 243, 18, 6, 246, 101, 67, 181, 25, 5, 114, 213, 154, 41, 149, 54, 245, 56, 18, 72, 20, 77, 170, 136, 5, 133, 27, 243, 4, 8, 57, 26, 1, 111, 249, 42, 213, 97, 2, 168, 68, 224, 139, 194, 42, 58, 131, 252, 196, 52, 163, 73, 43, 251, 185, 145, 138, 92, 249, 226, 231, 232, 18, 18, 33, 33, 176, 159, 150, 12, 169, 107, 218, 1, 232, 26, 64, 60, 93, 68, 102, 120, 80, 130, 196, 245, 210, 130, 108, 208, 126, 249, 90, 220, 116, 158, 72, 73, 55, 129, 2, 220, 147, 219, 241, 117, 252, 146, 249, 254, 45, 73, 89, 163, 89, 40, 168, 58, 234, 113, 232, 202, 208, 229, 161, 247, 213, 227, 132, 191, 62, 23, 105, 120, 79, 77, 64, 247, 91, 125, 138, 114, 41, 252, 172, 57, 224, 201, 170, 54, 63, 124, 190, 138, 191, 83, 151, 217, 252, 112, 135, 81, 210, 63, 20, 187, 75, 26, 216, 232, 72, 152, 145, 58, 67, 199, 205, 98, 29, 187, 227, 108, 103, 3, 151, 234, 23, 82, 10, 87, 136, 60, 75, 230, 110, 179, 45, 221, 46, 228, 147, 170, 236, 236, 7, 253, 9, 105, 146, 88, 94, 174, 142, 42, 48, 43, 34, 158, 22, 228, 220, 68, 107, 156, 119, 225, 145, 68, 61, 54, 248, 186, 225, 244, 31, 144, 22, 234, 32, 184, 45, 143, 252, 6, 237, 184, 218, 248, 42, 12, 189, 230, 47, 210, 254, 115, 18, 237, 128, 239, 227, 71, 56, 143, 58, 204, 214, 195, 35, 183, 161, 93, 42, 241, 126, 217, 1, 166, 11, 37, 97, 28, 113, 63, 218, 163, 23, 82, 15, 134, 102, 116, 144, 15, 27, 159, 58, 200, 70, 65, 43, 251, 188, 30, 231, 98, 118, 141, 11, 80, 228, 160, 70, 224, 27, 115, 247, 140, 105, 22, 19, 200, 125, 32, 45, 51, 149, 251, 48, 191, 225, 73, 97, 63, 188, 161, 11, 100, 123, 112, 88, 163, 27, 159, 206, 153, 140, 105, 45, 120, 6, 75, 78, 112, 137, 41, 121, 61, 243, 194, 40, 15, 91, 178, 169, 113, 52, 17, 123, 66, 227, 4, 12, 136, 228, 77, 173, 153, 227, 250, 50, 61, 63, 171, 119, 137, 138, 185, 228, 242, 127, 80, 188, 150, 44, 119, 67, 74, 177, 11, 170, 62, 11, 20, 8, 189, 53, 71, 56, 203, 178, 87, 254, 149, 43, 223, 27, 192, 103, 35, 106, 101, 187, 182, 32, 240, 206, 238, 151, 61, 106, 121, 19, 38, 80, 163, 16, 177, 229, 228, 118, 69, 225, 181, 26, 71, 165, 243, 157, 61, 158, 130, 56, 19, 237, 220, 156, 42, 41, 201, 46, 78, 83, 108, 35, 37, 34, 6, 14, 229, 227, 10, 134, 79, 15, 112, 97, 126, 44, 188, 244, 245, 168, 53, 157, 71, 194, 233, 210, 89, 14, 22, 89, 63, 148, 162, 215, 36, 8, 5, 190, 12, 163, 27, 226, 44, 200, 61, 189, 165, 0, 130, 156, 195, 244, 72, 129, 109, 217, 1, 80, 198, 78, 234, 160, 91, 120, 214, 31, 63, 35, 173, 55, 207, 200, 244, 121, 188, 208, 23, 169, 137, 66, 181, 93, 102, 152, 192, 69, 215, 137, 235, 67, 40, 125, 78, 101, 138, 17, 0, 85, 171, 203, 133, 41, 223, 84, 231, 83, 196, 248, 65, 98, 86, 124, 64, 3, 169, 124, 206, 102, 78, 41, 139, 103, 147, 223, 246, 227, 21, 42, 229, 167, 117, 238, 179, 225, 58, 143, 18, 69, 225, 92, 73, 11, 211, 25, 247, 1, 222, 205, 195, 219, 27, 227, 142, 60, 41, 99, 199, 13, 64, 176, 240, 123, 37, 79, 168, 1, 0, 158, 223, 147, 187, 187, 213, 15, 117, 129, 20, 22, 40, 111, 91, 8, 231, 86, 179, 102, 119, 228, 7, 134, 154, 5, 206, 57, 86, 24, 220, 241, 186, 166, 177, 143, 24, 42, 219, 12, 184, 154, 234, 64, 230, 32, 99, 247, 172, 63, 123, 80, 58, 211, 24, 9, 49, 8, 148, 126, 23, 169, 141, 229, 135, 131, 63, 244, 40, 31, 220, 254, 53, 25, 240, 251, 107, 30, 56, 33, 81, 6, 86, 69, 135, 198, 239, 237, 248, 26, 138, 250, 60, 146, 118, 44, 1, 115, 32, 210, 113, 203, 47, 2, 60, 96, 176, 211, 34, 199, 249, 99, 53, 112, 70, 164, 15, 3, 131, 238, 250, 46, 240, 235, 8, 34, 225, 63, 2, 189, 239, 109, 28, 74, 219, 8, 115, 170, 152, 104, 192, 97, 248, 37, 6, 206, 147, 111, 193, 171, 74, 97, 86, 147, 196, 210, 64, 52, 76, 33, 236, 153, 126, 129, 212, 78, 165, 107, 12, 5, 5, 225, 16, 246, 71, 99, 154, 196, 45, 4, 220, 125, 80, 73, 100, 222, 44, 36, 0, 150, 243, 67, 213, 10, 38, 68, 215, 148, 111, 7, 63, 37, 82, 102, 88, 152, 52, 162, 152, 145, 174, 165, 171, 132, 144, 6, 8, 36, 7, 243, 153, 253, 140, 224, 75, 127, 138, 158, 253, 111, 95, 153, 89, 182, 3, 11, 123, 3, 158, 123, 1, 6, 63, 150, 246, 80, 202, 189, 76, 24, 226, 197, 196, 190, 130, 21, 184, 182, 105, 141, 222, 147, 82, 37, 251, 132, 143, 12, 130, 52, 212, 64, 53, 171, 86, 44, 119, 197, 219, 147, 191, 150, 131, 37, 108, 217, 139, 205, 97, 117, 109, 228, 79, 68, 19, 71, 137, 158, 98, 96, 173, 218, 207, 102, 223, 100, 58, 194, 212, 36, 176, 6, 180, 247, 167, 254, 25, 28, 180, 103, 147, 114, 134, 133, 136, 160, 204, 98, 190, 156, 253, 87, 236, 70, 110, 39, 247, 219, 47, 214, 5, 185, 198, 104, 24, 189, 29, 206, 209, 199, 54, 101, 60, 33, 123, 228, 188, 16, 102, 241, 171, 135, 67, 47, 79, 174, 227, 212, 173, 242, 242, 177, 105, 62, 69, 222, 65, 173, 246, 237, 194, 51, 211, 185, 158, 219, 98, 8, 194, 15, 56, 235, 231, 106, 176, 211, 117, 176, 75, 117, 173, 7, 231, 125, 53, 152, 111, 225, 153, 143, 67, 1, 65, 75, 7, 94, 223, 225, 58, 50, 221, 69, 252, 173, 157, 29, 60, 60, 101, 138, 128, 201, 51, 222, 70, 136, 251, 218, 14, 10, 36, 83, 211, 103, 165, 219, 220, 146, 197, 252, 215, 96, 58, 61, 115, 86, 189, 34, 88, 249, 149, 147, 55, 134, 45, 194, 53, 232, 247, 7, 153, 45, 233, 53, 178, 55, 53, 125, 35, 45, 121, 6, 205, 147, 221, 167, 59, 68, 168, 97, 84, 52, 60, 35, 15, 10, 94, 221, 241, 139, 58, 101, 6, 243, 39, 67, 79, 132, 200, 12, 12, 164, 30, 159, 41, 76, 14, 103, 123, 84, 122, 15, 243, 243, 203, 240, 207, 243, 255, 87, 251, 216, 160, 83, 182, 208, 105, 11, 143, 5, 194, 184, 162, 2, 37, 22, 0, 39, 114, 174, 109, 134, 56, 168, 131, 118, 177, 108, 39, 131, 31, 87, 165, 214, 183, 147, 119, 30, 223, 163, 127, 172, 96, 160, 92, 42, 246, 66, 131, 106, 20, 202, 177, 35, 131, 130, 220, 80, 69, 103, 187, 90, 48, 99, 17, 162, 142, 71, 251, 47, 164, 175, 194, 220, 40, 73, 229, 113, 245, 49, 119, 232, 69, 102, 165, 97, 179, 131, 255, 179, 98, 140, 187, 69, 96, 251, 13, 247, 85, 153, 120, 64, 109, 41, 32, 191, 165, 250, 53, 75, 47, 187, 42, 40, 213, 88, 169, 99, 62, 134, 52, 147, 236, 137, 92, 119, 150, 145, 76, 55, 19, 41, 147, 58, 182, 83, 101, 66, 180, 214, 63, 209, 81, 48, 165, 162, 54, 128, 50, 182, 242, 62, 148, 197, 157, 187, 19, 171, 130, 139, 151, 38, 195, 25, 96, 135, 202, 73, 229, 151, 67, 66, 91, 229, 142, 59, 14, 112, 232, 126, 20, 92, 11, 133, 104, 162, 210, 33, 154, 68, 190, 86, 163, 193, 189, 156, 182, 214, 122, 142, 151, 103, 28, 130, 69, 31, 221, 72, 67, 127, 27, 178, 57, 191, 202, 127, 234, 1, 183, 41, 52, 93, 253, 14, 57, 5, 186, 195, 4, 208, 31, 96, 145, 250, 38, 43, 102, 207, 234, 63, 250, 120, 176, 98, 1, 18, 91, 150, 72, 119, 18, 214, 5, 191, 48, 10, 135, 246, 218, 100, 114, 162, 92, 59, 2, 178, 13, 180, 141, 155, 201, 136, 243, 14, 185, 152, 62, 132, 135, 193, 77, 81, 63, 120, 132, 161, 180, 150, 211, 220, 171, 255, 207, 108, 254, 210, 107, 246, 158, 107, 152, 155, 56, 83, 184, 95, 199, 64, 84, 236, 187, 51, 15, 61, 98, 107, 121, 221, 91, 201, 196, 58, 187, 93, 176, 178, 154, 113, 43, 205, 127, 134, 82, 142, 79, 113, 174, 78, 43, 201, 191, 46, 115, 245, 95, 110, 98, 167, 253, 166, 11, 230, 229, 215, 116, 71, 181, 63, 156, 57, 160, 245, 34, 158, 188, 203, 64, 40, 166, 17, 118, 186, 216, 147, 123, 24, 147, 156, 91, 115, 249, 204, 67, 137, 35, 158, 144, 244, 207, 46, 170, 121, 10, 78, 219, 218, 139, 69, 212, 148, 109, 188, 21, 0, 140, 41, 234, 249, 52, 144, 59, 242, 116, 10, 133, 158, 88, 231, 52, 51, 181, 30, 27, 60, 187, 197, 212, 40, 136, 135, 55, 55, 106, 140, 113, 211, 24, 253, 152, 203, 89, 118, 122, 253, 183, 217, 102, 233, 103, 210, 151, 62, 195, 219, 96, 158, 158, 124, 26, 40, 212, 184, 155, 8, 74, 177, 63, 243, 88, 150, 172, 5, 150, 108, 180, 183, 175, 200, 160, 20, 24, 34, 95, 188, 138, 254, 35, 118, 55, 10, 138, 201, 109, 44, 108, 29, 224, 35, 188, 40, 130, 90, 19, 21, 209, 25, 171, 112, 92, 128, 77, 91, 53, 79, 52, 204, 72, 170, 141, 188, 100, 84, 111, 61, 165, 253, 245, 88, 9, 186, 37, 43, 68, 90, 166, 145, 92, 37, 88, 106, 183, 91, 73, 45, 93, 48, 93, 198, 108, 41, 220, 229, 171, 97, 157, 169, 7, 40, 195, 245, 102, 243, 200, 99, 46, 165, 202, 54, 94, 166, 121, 207, 97, 205, 6, 38, 199, 253, 21, 65, 146, 95, 245, 153, 140, 55, 12, 194, 4, 116, 89, 215, 185, 72, 213, 222, 183, 91, 122, 162, 224, 124, 154, 250, 162, 14, 61, 237, 55, 202, 40, 109, 24, 159, 118, 110, 211, 172, 13, 100, 251, 31, 126, 212, 85, 89, 77, 179, 191, 247, 109, 180, 201, 125, 124, 238, 10, 108, 107, 23, 177, 36, 100, 93, 15, 177, 37, 151, 210, 61, 198, 88, 138, 125, 81, 105, 125, 13, 54, 90, 153, 5, 4, 109, 175, 227, 201, 216, 156, 15, 39, 167, 39, 251, 141, 84, 102, 91, 46, 129, 21, 158, 114, 28, 145, 23, 239, 36, 83, 199, 242, 144, 73, 17, 210, 117, 83, 177, 11, 23, 211, 135, 36, 177, 159, 65, 250, 134, 48, 50, 20, 61, 217, 142, 178, 34, 51, 190, 152, 43, 85, 222, 189, 193, 101, 132, 107, 29, 196, 208, 40, 157, 76, 206, 203, 200, 41, 157, 19, 51, 88, 40, 208, 82, 81, 103, 165, 129, 157, 94, 120, 95, 185, 234, 137, 21, 213, 175, 232, 28, 226, 85, 135, 169, 201, 1, 234, 120, 210, 58, 26, 90, 151, 229, 191, 110, 83, 81, 131, 116, 11, 206, 206, 150, 229, 102, 111, 75, 142, 47, 13, 52, 194, 120, 52, 223, 218, 91, 168, 126, 128, 79, 100, 208, 12, 137, 2, 17, 67, 227, 54, 68, 222, 221, 125, 87, 106, 193, 9, 116, 232, 26, 36, 192, 139, 171, 106, 31, 39, 175, 168, 64, 17, 108, 197, 66, 241, 173, 171, 240, 176, 73, 190, 220, 135, 105, 172, 58, 221, 209, 89, 132, 28, 241, 184, 139, 251, 69, 2, 27, 83, 53, 28, 105, 19, 250, 85, 30, 180, 103, 240, 252, 225, 52, 85, 57, 166, 146, 192, 205, 145, 249, 179, 152, 169, 64, 197, 35, 33, 180, 231, 9, 47, 226, 169, 241, 97, 96, 157, 212, 193, 125, 3, 83, 192, 100, 62, 186, 7, 12, 176, 95, 11, 193, 163, 192, 18, 244, 24, 208, 111, 148, 79, 246, 69, 231, 21, 101, 88, 37, 40, 57, 40, 113, 254, 66, 235, 166, 220, 177, 199, 112, 237, 67, 152, 213, 77, 108, 223, 119, 244, 41, 180, 59, 210, 249, 9, 27, 223, 163, 188, 199, 209, 94, 103, 168, 209, 15, 82, 163, 53, 147, 234, 208, 8, 201, 157, 214, 219, 218, 182, 253, 178, 25, 219, 160, 134, 50, 111, 97, 184, 97, 28, 45, 140, 237, 140, 221, 236, 138, 31, 49, 56, 40, 110, 56, 133, 49, 5, 83, 166, 65, 205, 72, 54, 160, 6, 250, 34, 203, 190, 24, 111, 91, 51, 58, 75, 203, 237, 123, 222, 178, 23, 88, 235, 55, 48, 173, 160, 181, 229, 99, 224, 169, 187, 147, 70, 35, 113, 32, 219, 253, 244, 195, 88, 184, 250, 116, 252, 36, 35, 148, 150, 177, 74, 88, 222, 14, 208, 210, 55, 82, 139, 247, 241, 46, 10, 89, 167, 1, 234, 50, 208, 166, 208, 58, 149, 46, 233, 224, 129, 20, 100, 254, 143, 170, 234, 238, 27, 126, 250, 212, 74, 155, 208, 231, 117, 64, 183, 71, 207, 186, 255, 2, 15, 111, 12, 195, 102, 35, 208, 89, 226, 185, 44, 211, 149, 206, 102, 69, 79, 209, 161, 41, 16, 212, 223, 233, 52, 222, 85, 83, 192, 182, 25, 8, 91, 57, 101, 159, 110, 221, 253, 68, 227, 72, 175, 96, 93, 88, 219, 251, 16, 223, 63, 218, 231, 225, 57, 16, 155, 207, 160, 3, 119, 155, 228, 184, 205, 85, 17, 209, 87, 42, 171, 180, 158, 216, 139, 25, 188, 63, 12, 124, 21, 25, 37, 205, 143, 4, 80, 136, 32, 114, 100, 216, 237, 232, 0, 124, 123, 185, 200, 115, 62, 154, 153, 50, 206, 195, 87, 159, 29, 98, 93, 164, 233, 200, 95, 237, 167, 117, 144, 175, 255, 147, 216, 78, 79, 135, 161, 254, 192, 168, 151, 228, 124, 58, 179, 178, 86, 39, 134, 48, 45, 101, 198, 107, 197, 144, 225, 183, 121, 128, 31, 198, 169, 181, 126, 71, 12, 41, 31, 37, 157, 8, 44, 130, 131, 1, 127, 99, 62, 71, 50, 52, 78, 161, 224, 154, 61, 87, 62, 130, 196, 153, 255, 35, 238, 56, 245, 177, 80, 145, 56, 91, 196, 112, 29, 238, 69, 237, 9, 22, 38, 228, 168, 200, 3, 64, 209, 13, 195, 26, 181, 32, 184, 15, 200, 35, 210, 0, 155, 217, 171, 171, 3, 192, 211, 210, 201, 123, 47, 135, 223, 252, 15, 146, 101, 17, 56, 227, 194, 77, 29, 156, 110, 203, 37, 90, 4, 74, 124, 177, 26, 8, 47, 186, 184, 241, 0, 247, 117, 82, 61, 53, 68, 144, 11, 115, 159, 9, 30, 80, 228, 194, 144, 173, 255, 3, 30, 248, 161, 133, 111, 37, 79, 72, 175, 121, 136, 100, 193, 162, 86, 154, 124, 185, 83, 70, 163, 124, 216, 210, 103, 203, 185, 245, 179, 103, 151, 71, 34, 254, 100, 4, 106, 201, 121, 137, 205, 165, 206, 160, 239, 152, 229, 71, 108, 254, 226, 102, 42, 164, 248, 143, 227, 78, 39, 89, 70, 81, 144, 44, 195, 195, 29, 153, 34, 90, 214, 116, 28, 155, 23, 23, 39, 34, 5, 119, 96, 241, 86, 7, 190, 3, 6, 113, 152, 85, 127, 81, 80, 75, 166, 245, 6, 116, 127, 246, 212, 78, 80, 118, 9, 113, 42, 151, 71, 71, 104, 230, 219, 24, 90, 5, 105, 57, 150, 44, 121, 211, 237, 169, 62, 213, 233, 62, 127, 179, 104, 46, 61, 74, 59, 179, 146, 53, 109, 129, 14, 182, 85, 35, 112, 168, 162, 58, 189, 15, 188, 107, 218, 62, 48, 199, 253, 86, 108, 52, 131, 151, 135, 227, 113, 113, 225, 1, 170, 71, 242, 223, 98, 131, 160, 255, 231, 75, 242, 148, 158, 70, 230, 6, 58, 243, 239, 51, 145, 128, 191, 86, 10, 246, 83, 148, 147, 65, 154, 8, 72, 189, 93, 211, 237, 93, 251, 188, 142, 89, 14, 193, 135, 115, 184, 98, 36, 199, 73, 181, 110, 44, 154, 151, 5, 24, 169, 117, 224, 46, 36, 95, 205, 34, 22, 112, 138, 14, 4, 183, 48, 243, 185, 10, 178, 42, 70, 213, 181, 240, 160, 242, 122, 21, 152, 187, 22, 138, 175, 114, 184, 201, 135, 83, 192, 109, 66, 135, 80, 176, 83, 39, 104, 74, 193, 113, 225, 253, 168, 104, 159, 43, 253, 59, 34, 105, 99, 28, 139, 168, 160, 65, 230, 142, 165, 24, 33, 200, 243, 188, 228, 108, 244, 52, 179, 207, 42, 178, 81, 237, 100, 41, 94, 11, 3, 45, 105, 220, 210, 237, 62, 53, 89, 130, 17, 218, 168, 204, 241, 75, 12, 75, 7, 182, 76, 194, 61, 79, 7, 74, 73, 86, 4, 112, 80, 88, 74, 218, 16, 21, 126, 1, 114, 102, 64, 6, 230, 113, 229, 105, 166, 104, 86, 129, 93, 1, 1, 62, 20, 51, 64, 40, 24, 74, 240, 67, 155, 175, 227, 92, 93, 249, 55, 233, 253, 32, 137, 127, 99, 252, 24, 33, 240, 100, 36, 188, 145, 139, 113, 74, 252, 46, 121, 163, 222, 100, 207, 84, 223, 220, 204, 199, 16, 195, 16, 219, 43, 78, 137, 85, 202, 206, 112, 124, 155, 6, 47, 65, 10, 101, 177, 133, 194, 241, 158, 104, 36, 241, 210, 138, 197, 81, 230, 39, 103, 46, 137, 51, 148, 252, 103, 161, 39, 71, 170, 5, 195, 84, 16, 117, 192, 148, 191, 76, 99, 107, 249, 203, 72, 18, 241, 131, 219, 164, 218, 213, 213, 218, 7, 127, 120, 18, 175, 82, 120, 4, 252, 171, 97, 103, 253, 72, 87, 59, 224, 98, 211, 149, 40, 183, 103, 194, 247, 63, 248, 216, 16, 59, 55, 64, 251, 132, 160, 175, 147, 230, 118, 84, 150, 26, 36, 159, 71, 167, 175, 58, 144, 43, 229, 142, 224, 228, 14, 126, 86, 119, 188, 229, 199, 119, 31, 126, 234, 86, 195, 212, 113, 86, 130, 136, 5, 27, 107, 64, 87, 148, 58, 236, 113, 141, 93, 163, 148, 212, 117, 106, 226, 149, 60, 221, 126, 151, 168, 158, 84, 50, 44, 28, 76, 149, 78, 238, 9, 68, 129, 81, 195, 107, 205, 167, 159, 225, 238, 194, 26, 145, 30, 95, 237, 103, 103, 115, 193, 99, 63, 6, 195, 186, 226, 148, 228, 94, 255, 46, 36, 144, 81, 164, 255, 210, 71, 83, 150, 4, 152, 100, 61, 172, 158, 99, 99, 123, 212, 63, 125, 113, 120, 75, 234, 255, 239, 82, 212, 149, 70, 142, 204, 93, 111, 147, 243, 17, 34, 44, 5, 97, 130, 176, 132, 163, 62, 79, 112, 208, 136, 164, 34, 74, 125, 55, 65, 21, 117, 118, 206, 113, 181, 178, 144, 244, 189, 204, 95, 107, 250, 239, 162, 9, 204, 36, 242, 243, 132, 203, 184, 13, 65, 218, 197, 38, 5, 63, 73, 77, 235, 7, 163, 26, 236, 173, 73, 198, 3, 102, 141, 7, 28, 28, 192, 85, 168, 157, 22, 123, 189, 153, 7, 29, 149, 65, 184, 151, 240, 202, 78, 1, 112, 177, 203, 178, 155, 249, 83, 143, 114, 202, 129, 148, 18, 210, 159, 136, 112, 221, 24, 97, 2, 164, 90, 118, 214, 57, 185, 138, 198, 39, 87, 40, 12, 66, 45, 107, 161, 109, 64, 146, 157, 155, 84, 40, 136, 45, 73, 255, 87, 148, 74, 241, 49, 251, 63, 63, 3, 3, 229, 164, 73, 115, 7, 172, 210, 25, 85, 9, 248, 27, 27, 167, 139, 107, 12, 252, 83, 199, 135, 90, 245, 141, 103, 34, 33, 16, 76, 17, 113, 131, 163, 115, 93, 158, 19, 72, 17, 103, 153, 9, 65, 20, 18, 94, 167, 147, 250, 129, 249, 178, 187, 194, 108, 4, 211, 202, 101, 100, 201, 42, 115, 168, 220, 54, 235, 238, 173, 214, 8, 103, 58, 83, 157, 214, 7, 116, 195, 115, 30, 190, 57, 33, 248, 48, 234, 31, 236, 232, 162, 73, 240, 55, 151, 162, 121, 128, 219, 35, 133, 46, 37, 102, 92, 18, 2, 64, 72, 212, 195, 130, 165, 69, 139, 194, 80, 137, 221, 155, 212, 54, 15, 111, 115, 123, 136, 220, 245, 216, 129, 53, 92, 45, 214, 197, 6, 116, 1, 0, 221, 230, 165, 68, 154, 76, 93, 247, 77, 97, 62, 141, 144, 75, 60, 243, 185, 164, 34, 207, 68, 56, 69, 66, 206, 230, 203, 16, 193, 233, 145, 209, 191, 50, 110, 166, 222, 185, 205, 156, 80, 157, 233, 164, 64, 204, 73, 181, 148, 225, 121, 249, 21, 72, 30, 23, 186, 245, 96, 46, 214, 50, 155, 155, 121, 197, 235, 15, 54, 182, 81, 47, 87, 21, 190, 62, 226, 128, 27, 151, 184, 105, 29, 242, 37, 45, 126, 251, 162, 65, 204, 241, 160, 101, 190, 94, 2, 173, 56, 193, 181, 36, 238, 237, 19, 120, 17, 118, 18, 234, 11, 180, 13, 55, 194, 167, 133, 65, 74, 8, 151, 253, 245, 165, 244, 170, 25, 50, 112, 114, 104, 74, 106, 231, 166, 23, 148, 172, 80, 189, 85, 181, 46, 76, 220, 35, 120, 120, 203, 29, 105, 70, 213, 217, 112, 153, 191, 131, 77, 0, 173, 92, 229, 9, 82, 126, 49, 30, 201, 210, 55, 77, 8, 218, 71, 38, 39, 37, 242, 186, 237, 75, 206, 126, 129, 163, 231, 8, 193, 129, 230, 86, 92, 110, 140, 216, 142, 89, 151, 108, 151, 168, 35, 200, 192, 248, 204, 201, 62, 146, 209, 199, 145, 161, 245, 76, 102, 94, 255, 155, 166, 230, 238, 18, 16, 72, 133, 233, 97, 57, 75, 141, 115, 185, 201, 108, 35, 107, 67, 215, 14, 235, 183, 141, 108, 59, 225, 91, 242, 183, 83, 208, 201, 13, 93, 146, 90, 207, 47, 245, 104, 176, 185, 69, 116, 8, 64, 41, 54, 90, 247, 88, 94, 137, 149, 98, 92, 193, 35, 152, 157, 206, 188, 88, 15, 188, 66, 253, 59, 150, 175, 206, 104, 140, 201, 16, 207, 99, 224, 51, 78, 4, 144, 217, 73, 185, 58, 102, 187, 34, 117, 236, 210, 219, 179, 247, 207, 142, 217, 11, 213, 193, 250, 221, 1, 110, 215, 68, 52, 160, 254, 73, 226, 84, 107, 153, 247, 193, 142, 111, 13, 5, 104, 223, 173, 11, 138, 57, 216, 13, 221, 64, 103, 113, 158, 226, 90, 243, 205, 99, 70, 80, 50, 194, 143, 94, 47, 242, 75, 156, 195, 175, 107, 172, 123, 232, 15, 64, 38, 166, 31, 107, 115, 228, 251, 83, 41, 17, 51, 83, 172, 34, 162, 32, 197, 225, 197, 15, 80, 85, 152, 29, 180, 80, 235, 219, 142, 186, 223, 5, 170, 52, 146, 99, 100, 101, 110, 124, 227, 226, 254, 167, 46, 218, 52, 185, 161, 98, 67, 241, 174, 176, 125, 14, 94, 181, 55, 249, 0, 121, 178, 200, 165, 27, 112, 88, 194, 16, 182, 242, 67, 134, 44, 65, 193, 60, 87, 110, 22, 105, 177, 242, 230, 163, 22, 118, 15, 231, 96, 107, 1, 13, 49, 112, 123, 216, 110, 38, 181, 206, 131, 192, 202, 152, 248, 92, 223, 51, 214, 208, 49, 105, 43, 123, 201, 252, 158, 210, 114, 235, 145, 22, 62, 9, 89, 154, 177, 61, 167, 105, 125, 21, 30, 235, 1, 11, 69, 170, 127, 28, 200, 127, 245, 244, 89, 20, 142, 250, 218, 124, 171, 26, 201, 41, 156, 17, 253, 29, 209, 102, 253, 138, 215, 135, 253, 80, 144, 45, 125, 213, 212, 174, 92, 151, 163, 134, 234, 111, 239, 54, 58, 52, 83, 11, 219, 77, 166, 125, 179, 29, 8, 70, 161, 92, 123, 86, 47, 224, 114, 42, 209, 68, 60, 43, 35, 207, 27, 2, 48, 53, 3, 226, 213, 140, 190, 111, 199, 246, 212, 88, 85, 158, 154, 107, 214, 65, 75, 34, 252, 91, 68, 33, 147, 89, 200, 124, 201, 134, 192, 253, 167, 147, 11, 36, 38, 11, 107, 7, 106, 40, 87, 116, 162, 44, 18, 93, 64, 90, 101, 55, 128, 50, 231, 210, 121, 1, 102, 1, 215, 24, 236, 223, 103, 32, 192, 44, 215, 37, 177, 32, 65, 5, 183, 202, 144, 24, 140, 228, 209, 5, 33, 126, 143, 8, 203, 22, 103, 19, 15, 116, 48, 106, 62, 47, 224, 232, 5, 43, 90, 165, 205, 247, 100, 109, 112, 65, 103, 122, 180, 167, 160, 55, 65, 134, 81, 199, 51, 8, 175, 87, 244, 10, 184, 136, 52, 119, 47, 147, 125, 159, 121, 226, 192, 205, 247, 229, 246, 253, 147, 191, 137, 175, 209, 99, 234, 224, 91, 144, 122, 202, 113, 125, 37, 51, 228, 29, 18, 230, 223, 126, 49, 130, 83, 69, 161, 190, 176, 223, 93, 207, 104, 35, 200, 126, 11, 220, 229, 199, 112, 110, 209, 44, 139, 198, 24, 61, 6, 57, 222, 3, 247, 56, 220, 171, 96, 166, 233, 252, 76, 143, 176, 230, 11, 57, 110, 174, 135, 104, 184, 184, 73, 152, 108, 230, 174, 185, 232, 241, 62, 231, 50, 209, 176, 238, 51, 219, 120, 1, 227, 140, 198, 208, 190, 42, 212, 173, 86, 236, 13, 227, 17, 216, 177, 54, 209, 193, 190, 246, 198, 59, 74, 190, 38, 223, 141, 248, 228, 123, 238, 4, 111, 9, 245, 91, 112, 173, 35, 192, 126, 68, 122, 152, 98, 195, 27, 79, 188, 86, 48, 136, 140, 199, 79, 222, 104, 177, 167, 218, 104, 236, 220, 99, 238, 237, 70, 142, 233, 180, 154, 117, 229, 209, 156, 103, 168, 88, 100, 174, 106, 223, 219, 43, 194, 2, 71, 215, 60, 224, 182, 127, 219, 132, 63, 151, 237, 232, 138, 135, 223, 12, 33, 253, 181, 25, 31, 199, 56, 117, 50, 68, 24, 62, 137, 140, 10, 176, 206, 51, 78, 48, 104, 123, 0, 62, 205, 98, 161, 254, 214, 94, 216, 225, 208, 111, 209, 68, 201, 55, 67, 121, 236, 68, 124, 52, 226, 61, 75, 94, 247, 92, 179, 164, 238, 36, 240, 26, 165, 165, 49, 202, 246, 123, 223, 239, 28, 152, 194, 5, 167, 254, 134, 145, 222, 181, 6, 178, 200, 24, 177, 210, 159, 147, 196, 30, 193, 227, 119, 225, 169, 9, 36, 138, 73, 255, 65, 209, 228, 17, 40, 168, 114, 87, 109, 90, 8, 159, 59, 184, 17, 103, 233, 206, 10, 40, 197, 184, 89, 53, 201, 73, 6, 131, 249, 251, 166, 181, 102, 186, 211, 115, 119, 221, 164, 132, 118, 98, 37, 222, 213, 45, 64, 204, 201, 47, 62, 178, 112, 35, 36, 127, 157, 70, 233, 227, 132, 70, 234, 39, 109, 93, 132, 234, 148, 164, 74, 14, 92, 63, 225, 9, 213, 161, 245, 247, 152, 194, 119, 161, 255, 8, 219, 250, 164, 94, 210, 243, 178, 239, 177, 224, 117, 13, 40, 121, 224, 50, 245, 207, 213, 14, 159, 6, 183, 188, 228, 192, 212, 248, 162, 144, 47, 99, 198, 118, 145, 177, 166, 110, 8, 73, 130, 138, 181, 4, 169, 71, 2, 85, 247, 175, 210, 126, 214, 96, 24, 201, 59, 55, 195, 68, 80, 120, 121, 87, 175, 13, 91, 187, 237, 123, 189, 92, 102, 22, 119, 93, 239, 25, 6, 89, 135, 42, 173, 129, 138, 173, 36, 89, 192, 248, 137, 19, 127, 108, 134, 239, 45, 224, 201, 215, 68, 130, 236, 210, 75, 110, 208, 186, 255, 128, 39, 237, 66, 129, 87, 134, 28, 5, 177, 218, 198, 255, 216, 31, 237, 88, 113, 113, 249, 87, 44, 58, 58, 50, 172, 85, 128, 195, 91, 31, 39, 66, 39, 176, 59, 204, 190, 148, 114, 249, 77, 18, 17, 47, 91, 43, 66, 149, 4, 93, 254, 237, 100, 2, 227, 14, 222, 64, 45, 167, 110, 110, 208, 211, 160, 203, 192, 185, 105, 95, 86, 208, 13, 151, 182, 192, 116, 32, 82, 89, 199, 140, 224, 199, 246, 251, 162, 62, 233, 176, 11, 183, 100, 45, 59, 95, 194, 190, 61, 83, 87, 84, 147, 125, 43, 205, 159, 83, 230, 89, 197, 5, 174, 186, 178, 232, 114, 10, 139, 103, 42, 135, 98, 240, 20, 3, 184, 192, 203, 38, 177, 122, 64, 179, 249, 206, 28, 215, 126, 49, 190, 42, 182, 224, 14, 181, 238, 37, 170, 44, 123, 92, 51, 9, 250, 161, 54, 20, 144, 46, 72, 18, 24, 134, 29, 97, 173, 226, 122, 126, 125, 11, 54, 255, 162, 196, 225, 225, 5, 193, 147, 53, 103, 13, 213, 207, 44, 27, 117, 40, 70, 192, 39, 152, 242, 74, 240, 117, 192, 210, 201, 45, 151, 25, 219, 191, 75, 179, 148, 32, 248, 27, 159, 179, 166, 236, 224, 156, 47, 123, 189, 165, 233, 5, 116, 111, 75, 60, 37, 89, 125, 15, 204, 194, 97, 245, 31, 75, 53, 135, 29, 84, 42, 217, 126, 214, 120, 123, 221, 231, 238, 251, 25, 93, 161, 166, 242, 20, 20, 151, 91, 193, 116, 110, 24, 248, 228, 224, 215, 231, 35, 251, 228, 101, 12, 163, 149, 214, 184, 224, 251, 102, 15, 51, 80, 246, 89, 38, 39, 209, 203, 164, 231, 188, 232, 4, 68, 46, 197, 217, 193, 170, 99, 112, 226, 248, 90, 164, 64, 93, 89, 160, 153, 5, 249, 24, 22, 152, 1, 230, 33, 41, 83, 73, 28, 83, 199, 43, 160, 125, 87, 76, 223, 115, 196, 170, 116, 55, 76, 127, 120, 235, 11, 94, 146, 83, 226, 120, 195, 187, 107, 252, 229, 219, 71, 134, 213, 233, 116, 197, 180, 211, 180, 145, 210, 84, 10, 175, 235, 174, 60, 218, 239, 202, 76, 212, 63, 199, 194, 158, 50, 13, 196, 250, 183, 59, 156, 207, 145, 213, 184, 209, 141, 91, 176, 19, 128, 104, 210, 232, 81, 32, 26, 39, 83, 65, 127, 201, 172, 154, 36, 36, 115, 212, 155, 200, 128, 109, 48, 131, 122, 187, 118, 188, 183, 112, 212, 57, 173, 192, 175, 82, 20, 37, 238, 213, 215, 131, 127, 126, 35, 244, 127, 247, 218, 178, 160, 173, 55, 142, 135, 217, 243, 90, 33, 154, 210, 142, 3, 162, 150, 115, 126, 244, 207, 247, 255, 175, 149, 227, 140, 255, 24, 162, 170, 251, 234, 137, 200, 64, 164, 172, 245, 32, 232, 142, 203, 182, 225, 87, 118, 83, 100, 21, 219, 76, 76, 235, 86, 219, 144, 175, 174, 121, 34, 15, 16, 200, 41, 228, 119, 91, 250, 37, 58, 124, 152, 186, 56, 6, 134, 163, 119, 0, 182, 11, 134, 76, 253, 214, 120, 93, 209, 122, 130, 189, 4, 137, 237, 96, 13, 96, 26, 69, 73, 9, 96, 249, 47, 57, 37, 10, 47, 84, 117, 249, 144, 87, 155, 71, 162, 166, 226, 195, 158, 184, 33, 76, 203, 57, 29, 103, 44, 107, 102, 3, 129, 247, 204, 246, 95, 114, 69, 103, 105, 211, 239, 97, 29, 30, 39, 81, 22, 101, 21, 185, 223, 82, 30, 78, 107, 109, 120, 28, 73, 15, 152, 38, 49, 206, 95, 46, 176, 248, 44, 136, 151, 67, 49, 77, 246, 92, 144, 33, 50, 52, 191, 183, 139, 58, 253, 177, 192, 228, 149, 80, 77, 175, 217, 231, 59, 250, 118, 63, 119, 45, 14, 62, 220, 227, 234, 131, 82, 223, 111, 220, 8, 196, 239, 23, 166, 0, 1, 155, 235, 70, 6, 96, 51, 29, 211, 147, 207, 210, 93, 164, 236, 46, 53, 106, 216, 18, 37, 218, 41, 86, 83, 6, 173, 50, 105, 197, 111, 86, 53, 9, 209, 178, 244, 128, 237, 44, 163, 14, 11, 233, 42, 157, 111, 237, 206, 110, 153, 90, 29, 241, 6, 42, 21, 96, 154, 113, 231, 219, 219, 68, 144, 76, 255, 119, 189, 118, 84, 82, 224, 139, 186, 43, 27, 252, 137, 25, 212, 222, 130, 171, 199, 40, 111, 110, 187, 2, 11, 42, 240, 14, 45, 175, 22, 223, 168, 156, 116, 109, 150, 53, 243, 57, 231, 128, 152, 124, 62, 174, 98, 209, 156, 251, 97, 184, 21, 77, 85, 64, 64, 6, 222, 192, 17, 172, 109, 129, 253, 59, 36, 9, 79, 96, 25, 140, 112, 99, 94, 28, 91, 212, 98, 110, 41, 47, 125, 249, 119, 239, 162, 42, 170, 198, 107, 21, 66, 99, 65, 63, 226, 249, 248, 131, 137, 105, 203, 116, 154, 18, 175, 143, 214, 9, 218, 95, 250, 57, 147, 149, 174, 217, 48, 175, 210, 139, 255, 149, 190, 172, 39, 165, 3, 251, 56, 26, 194, 94, 75, 33, 4, 190, 132, 141, 62, 143, 188, 30, 122, 207, 132, 191, 204, 74, 30, 141, 65, 203, 235, 122, 85, 193, 136, 212, 247, 118, 12, 187, 42, 150, 197, 10, 49, 251, 7, 84, 146, 11, 43, 32, 144, 72, 4, 238, 114, 165, 167, 77, 206, 85, 81, 162, 133, 207, 91, 236, 155, 178, 96, 79, 141, 146, 42, 38, 176, 202, 58, 107, 39, 26, 124, 134, 199, 233, 88, 82, 3, 240, 143, 2, 154, 74, 222, 182, 32, 209, 214, 184, 197, 66, 3, 116, 198, 140, 79, 86, 84, 53, 31, 70, 237, 109, 196, 70, 186, 14, 53, 50, 241, 187, 86, 42, 117, 81, 24, 97, 185, 48, 0, 75, 92, 251, 212, 141, 47, 113, 87, 15, 92, 54, 59, 28, 205, 12, 162, 191, 133, 30, 120, 67, 142, 194, 16, 182, 155, 89, 15, 173, 78, 138, 29, 99, 142, 233, 226, 60, 136, 62, 161, 197, 72, 65, 128, 73, 50, 18, 4, 3, 137, 218, 50, 153, 141, 42, 224, 36, 250, 20, 129, 168, 85, 159, 70, 212, 220, 206, 82, 125, 222, 206, 96, 151, 208, 69, 179, 57, 78, 64, 47, 188, 174, 183, 239, 195, 107, 218, 94, 134, 47, 171, 20, 97, 211, 246, 164, 56, 216, 119, 60, 1, 33, 253, 49, 250, 29, 246, 255, 205, 237, 102, 158, 246, 96, 38, 93, 191, 29, 0, 246, 78, 14, 107, 122, 124, 145, 34, 97, 85, 241, 249, 152, 220, 116, 171, 70, 156, 91, 75, 50, 67, 227, 63, 220, 57, 230, 234, 167, 53, 71, 251, 50, 207, 172, 178, 1, 51, 24, 207, 236, 204, 48, 123, 86, 10, 111, 57, 181, 213, 104, 37, 121, 118, 0, 28, 197, 137, 244, 105, 57, 215, 186, 30, 70, 208, 110, 10, 85, 212, 9, 71, 192, 73, 96, 143, 82, 212, 93, 125, 152, 42, 49, 132, 248, 247, 140, 113, 7, 22, 182, 82, 210, 250, 0, 28, 94, 225, 144, 152, 110, 228, 175, 47, 226, 83, 46, 34, 155, 236, 221, 165, 205, 94, 88, 8, 35, 117, 61, 255, 189, 114, 135, 130, 2, 6, 114, 85, 226, 73, 62, 75, 249, 183, 228, 53, 204, 228, 209, 225, 97, 170, 144, 78, 200, 48, 138, 203, 183, 83, 74, 110, 55, 26, 202, 252, 113, 101, 118, 251, 240, 11, 250, 229, 185, 222, 64, 135, 86, 222, 78, 240, 144, 85, 253, 68, 12, 217, 94, 131, 53, 197, 41, 56, 176, 97, 59, 192, 217, 253, 139, 243, 188, 132, 168, 126, 188, 230, 33, 184, 8, 215, 56, 188, 232, 20, 51, 251, 40, 131, 156, 188, 255, 128, 73, 79, 163, 111, 155, 111, 236, 182, 21, 140, 252, 38, 104, 225, 241, 190, 221, 127, 214, 57, 194, 203, 179, 236, 148, 196, 129, 136, 110, 111, 47, 14, 208, 26, 142, 134, 38, 219, 78, 57, 125, 237, 105, 135, 72, 232, 68, 111, 163, 82, 46, 80, 92, 231, 52, 106, 185, 179, 142, 221, 54, 114, 80, 31, 255, 241, 117, 179, 109, 128, 225, 100, 157, 210, 13, 11, 196, 120, 146, 98, 2, 157, 62, 207, 177, 39, 197, 225, 126, 2, 106, 125, 88, 86, 147, 230, 81, 94, 186, 183, 152, 249, 75, 58, 28, 194, 115, 21, 169, 244, 13, 113, 240, 122, 133, 123, 254, 45, 241, 34, 202, 41, 47, 34, 82, 89, 34, 81, 168, 11, 97, 228, 253, 209, 106, 7, 4, 43, 139, 235, 201, 52, 182, 67, 48, 200, 210, 150, 211, 16, 161, 102, 49, 81, 199, 243, 3, 90, 75, 145, 186, 38, 58, 229, 66, 35, 220, 147, 18, 98, 132, 90, 61, 234, 194, 148, 40, 226, 98, 64, 115, 30, 243, 7, 51, 26, 167, 53, 194, 221, 74, 231, 176, 61, 59, 147, 94, 44, 33, 57, 150, 177, 192, 177, 117, 173, 18, 88, 159, 230, 167, 3, 237, 219, 127, 152, 145, 218, 10, 213, 68, 26, 88, 252, 211, 115, 69, 241, 179, 22, 4, 11, 251, 207, 32, 78, 189, 93, 210, 141, 220, 93, 98, 67, 3, 165, 57, 181, 123, 222, 195, 110, 116, 95, 225, 163, 227, 248, 75, 13, 176, 178, 140, 117, 67, 150, 130, 37, 195, 124, 191, 161, 57, 146, 85, 108, 125, 173, 171, 122, 203, 38, 182, 141, 207, 255, 136, 41, 74, 167, 75, 242, 99, 26, 41, 154, 193, 232, 220, 13, 69, 27, 104, 11, 136, 93, 154, 128, 110, 216, 175, 14, 243, 176, 4, 121, 230, 128, 141, 81, 240, 179, 150, 211, 240, 12, 42, 238, 113, 58, 178, 143, 156, 143, 95, 0, 27, 54, 170, 136, 82, 138, 195, 199, 134, 211, 16, 115, 120, 141, 148, 122, 61, 117, 33, 187, 20, 37, 171, 84, 208, 201, 206, 52, 220, 196, 190, 62, 58, 126, 254, 182, 186, 251, 20, 235, 30, 51, 61, 22, 96, 155, 224, 149, 32, 125, 12, 50, 113, 49, 69, 156, 17, 242, 78, 104, 202, 69, 88, 24, 186, 42, 53, 48, 107, 243, 158, 144, 47, 112, 8, 57, 207, 103, 246, 98, 155, 239, 57, 14, 13, 26, 150, 158, 85, 158, 116, 27, 107, 117, 129, 71, 250, 220, 193, 123, 219, 86, 64, 164, 203, 62, 119, 141, 21, 182, 219, 250, 167, 205, 109, 3, 55, 156, 16, 129, 68, 190, 189, 218, 225, 77, 123, 13, 64, 240, 48, 21, 251, 186, 57, 15, 21, 70, 186, 202, 80, 80, 154, 36, 12, 15, 160, 9, 236, 163, 241, 139, 36, 235, 1, 106, 239, 196, 180, 221, 94, 222, 102, 152, 154, 192, 183, 231, 36, 217, 240, 246, 151, 59, 15, 225, 149, 0, 37, 196, 29, 148, 212, 105, 18, 180, 123, 127, 190, 146, 151, 219, 132, 188, 233, 83, 186, 87, 93, 99, 95, 131, 231, 211, 109, 180, 13, 162, 72, 155, 20, 18, 228, 222, 103, 54, 216, 58, 60, 93, 151, 35, 135, 156, 126, 157, 181, 145, 89, 226, 115, 16, 12, 174, 25, 104, 80, 27, 245, 180, 186, 95, 234, 80, 197, 12, 183, 249, 174, 50, 253, 225, 165, 108, 28, 124, 130, 196, 95, 233, 205, 168, 88, 58, 235, 43, 31, 200, 179, 140, 114, 2, 70, 103, 211, 200, 116, 240, 11, 235, 198, 3, 111, 88, 19, 112, 144, 221, 225, 117, 232, 47, 161, 99, 157, 136, 233, 191, 227, 108, 166, 131, 173, 106, 9, 234, 88, 128, 149, 147, 171, 82, 9, 216, 183, 160, 244, 4, 53, 134, 143, 24, 144, 51, 225, 198, 63, 117, 194, 171, 107, 134, 20, 152, 219, 99, 105, 5, 193, 126, 40, 228, 226, 59, 61, 82, 188, 203, 196, 220, 224, 206, 83, 8, 59, 100, 79, 8, 55, 66, 35, 82, 229, 134, 31, 250, 249, 23, 159, 188, 5, 242, 206, 29, 253, 255, 251, 249, 156, 192, 70, 15, 145, 58, 15, 130, 147, 183, 237, 40, 245, 30, 238, 127, 159, 119, 74, 184, 141, 244, 175, 240, 143, 245, 26, 140, 78, 84, 163, 6, 207, 177, 123, 3, 14, 16, 57, 250, 22, 168, 187, 215, 117, 69, 74, 187, 43, 132, 246, 222, 45, 143, 215, 66, 51, 149, 23, 127, 96, 144, 235, 5, 33, 74, 203, 219, 136, 191, 212, 63, 6, 59, 120, 60, 11, 57, 46, 30, 122, 121, 255, 154, 211, 109, 75, 67, 185, 255, 169, 66, 65, 227, 187, 54, 156, 108, 136, 144, 202, 63, 46, 135, 115, 233, 240, 3, 143, 228, 100, 137, 108, 59, 96, 147, 47, 127, 104, 140, 215, 203, 89, 143, 88, 67, 113, 197, 180, 25, 133, 26, 213, 15, 34, 126, 135, 249, 132, 27, 22, 238, 56, 190, 235, 171, 126, 46, 170, 186, 110, 229, 131, 93, 41, 240, 25, 58, 115, 17, 221, 141, 117, 108, 157, 154, 89, 162, 215, 136, 13, 128, 122, 27, 82, 49, 238, 146, 53, 231, 165, 179, 159, 210, 251, 125, 127, 90, 165, 61, 226, 147, 32, 129, 196, 142, 56, 226, 0, 229, 85, 157, 67, 155, 48, 104, 89, 22, 190, 83, 219, 233, 203, 104, 126, 79, 194, 150, 81, 248, 28, 135, 235, 1, 62, 219, 1, 249, 182, 53, 47, 184, 61, 8, 94, 151, 92, 29, 179, 185, 167, 205, 39, 26, 57, 61, 75, 236, 144, 73, 182, 174, 84, 11, 104, 201, 36, 51, 216, 108, 104, 6, 24, 155, 174, 50, 191, 245, 63, 102, 105, 241, 108, 222, 229, 229, 162, 74, 84, 74, 177, 162, 6, 54, 105, 254, 128, 97, 169, 226, 173, 221, 33, 185, 246, 72, 48, 139, 231, 1, 94, 227, 13, 74, 248, 122, 119, 177, 143, 25, 32, 206, 75, 10, 171, 135, 109, 168, 3, 239, 209, 2, 27, 166, 99, 86, 156, 151, 235, 221, 3, 185, 110, 222, 132, 69, 112, 183, 242, 41, 207, 200, 233, 208, 227, 247, 102, 121, 2, 17, 27, 31, 175, 35, 123, 84, 194, 248, 20, 56, 51, 251, 232, 180, 81, 119, 35, 160, 177, 223, 240, 239, 224, 240, 210, 107, 44, 120, 60, 77, 58, 74, 250, 93, 49, 236, 31, 121, 43, 111, 103, 212, 14, 33, 141, 251, 159, 102, 196, 22, 78, 28, 229, 255, 143, 91, 149, 110, 246, 226, 194, 105, 5, 194, 254, 3, 117, 112, 27, 248, 240, 83, 4, 169, 212, 197, 61, 209, 125, 112, 1, 163, 167, 218, 87, 97, 162, 70, 206, 7, 167, 212, 232, 47, 143, 175, 137, 185, 95, 182, 188, 203, 241, 12, 66, 159, 34, 191, 79, 110, 50, 219, 33, 45, 51, 187, 14, 251, 245, 3, 235, 171, 199, 85, 190, 48, 97, 234, 248, 127, 93, 184, 138, 205, 12, 81, 236, 91, 226, 200, 215, 176, 88, 221, 126, 28, 117, 197, 75, 95, 65, 46, 252, 174, 39, 14, 137, 66, 16, 185, 227, 147, 179, 219, 50, 227, 16, 177, 254, 24, 124, 198, 136, 117, 105, 88, 140, 20, 172, 94, 20, 33, 168, 12, 200, 16, 208, 142, 153, 35, 38, 170, 36, 237, 198, 248, 186, 212, 114, 100, 215, 58, 12, 70, 239, 172, 51, 143, 224, 221, 215, 13, 244, 17, 236, 134, 65, 19, 124, 26, 182, 62, 176, 231, 91, 165, 69, 7, 90, 199, 159, 254, 147, 55, 146, 83, 218, 35, 154, 200, 92, 27, 195, 194, 38, 38, 235, 188, 95, 2, 115, 55, 219, 23, 38, 149, 3, 178, 97, 80, 213, 132, 215, 48, 87, 58, 113, 48, 215, 121, 136, 28, 25, 234, 161, 123, 254, 10, 188, 150, 57, 224, 166, 105, 29, 53, 129, 125, 253, 210, 85, 212, 19, 7, 230, 226, 199, 123, 228, 120, 161, 30, 180, 65, 45, 128, 102, 89, 211, 5, 6, 42, 14, 27, 191, 120, 165, 132, 67, 168, 233, 47, 197, 74, 174, 81, 181, 235, 105, 175, 4, 37, 231, 54, 37, 119, 7, 252, 117, 14, 160, 136, 60, 215, 119, 145, 13, 175, 240, 146, 102, 71, 184, 177, 53, 194, 105, 218, 167, 245, 134, 92, 247, 248, 213, 91, 206, 206, 105, 38, 8, 194, 146, 246, 149, 150, 97, 86, 166, 113, 253, 227, 162, 91, 29, 4, 212, 252, 154, 245, 223, 70, 22, 160, 103, 47, 166, 155, 253, 173, 46, 27, 245, 48, 17, 189, 185, 189, 162, 87, 173, 156, 168, 62, 246, 182, 152, 200, 157, 225, 249, 65, 13, 81, 129, 83, 31, 2, 108, 77, 5, 219, 137, 34, 190, 231, 246, 173, 76, 24, 113, 150, 188, 229, 112, 178, 98, 0, 1, 205, 165, 154, 61, 28, 177, 126, 228, 92, 71, 106, 231, 84, 181, 82, 97, 26, 34, 44, 194, 81, 97, 73, 177, 114, 113, 91, 205, 113, 152, 139, 95, 231, 192, 28, 86, 7, 112, 192, 176, 147, 142, 150, 166, 166, 115, 100, 201, 239, 142, 250, 9, 226, 197, 10, 53, 18, 90, 115, 41, 8, 167, 79, 82, 241, 244, 10, 149, 35, 178, 143, 72, 4, 207, 19, 20, 23, 218, 169, 109, 248, 136, 34, 255, 13, 187, 107, 208, 51, 164, 80, 84, 59, 91, 129, 121, 10, 140, 93, 53, 72, 202, 132, 55, 138, 144, 112, 43, 198, 238, 78, 196, 22, 75, 154, 105, 34, 175, 149, 175, 102, 156, 212, 100, 138, 33, 189, 177, 186, 105, 1, 14, 249, 5, 101, 145, 254, 210, 169, 140, 159, 130, 137, 79, 114, 63, 58, 14, 249, 8, 92, 207, 58, 226, 89, 83, 247, 156, 97, 54, 47, 225, 71, 143, 198, 225, 189, 21, 148, 35, 176, 116, 133, 109, 158, 82, 245, 84, 22, 2, 100, 241, 4, 243, 213, 5, 68, 184, 146, 109, 111, 32, 24, 179, 159, 62, 254, 52, 241, 70, 62, 179, 11, 90, 190, 111, 217, 192, 103, 180, 172, 176, 194, 248, 252, 144, 191, 144, 236, 250, 220, 78, 36, 166, 71, 254, 146, 17, 184, 194, 23, 57, 124, 244, 20, 47, 253, 223, 50, 232, 109, 96, 201, 206, 147, 31, 88, 62, 183, 183, 214, 10, 28, 124, 176, 52, 241, 213, 88, 229, 61, 180, 249, 149, 85, 212, 61, 204, 165, 213, 231, 212, 177, 89, 145, 153, 20, 68, 39, 212, 243, 92, 17, 20, 187, 91, 131, 205, 210, 52, 226, 199, 140, 87, 113, 172, 142, 125, 24, 146, 185, 54, 82, 154, 33, 51, 128, 149, 214, 188, 13, 202, 37, 254, 106, 124, 66, 100, 146, 142, 63, 20, 178, 119, 11, 230, 39, 235, 56, 150, 206, 234, 183, 252, 17, 195, 204, 164, 225, 111, 197, 201, 209, 61, 55, 131, 173, 181, 195, 222, 185, 80, 106, 54, 191, 126, 35, 210, 233, 164, 110, 188, 128, 37, 108, 177, 99, 149, 102, 205, 82, 199, 74, 188, 237, 102, 122, 188, 140, 114, 91, 2, 228, 239, 19, 148, 207, 87, 207, 250, 42, 59, 139, 132, 85, 68, 134, 19, 224, 58, 214, 219, 234, 127, 11, 173, 121, 180, 63, 166, 37, 26, 234, 39, 233, 97, 211, 21, 22, 76, 108, 243, 11, 109, 235, 216, 47, 30, 172, 1, 235, 21, 215, 209, 250, 22, 137, 59, 238, 52, 200, 112, 179, 242, 237, 178, 100, 147, 204, 211, 63, 132, 47, 4, 246, 112, 225, 197, 175, 151, 47, 159, 112, 7, 35, 243, 155, 217, 154, 63, 237, 66, 209, 3, 193, 160, 60, 210, 61, 129, 146, 118, 56, 193, 206, 151, 64, 228, 41, 82, 13, 18, 174, 168, 211, 190, 0, 96, 154, 209, 32, 145, 142, 228, 163, 11, 94, 97, 13] - ], - "iv": null, - "key": [37, 193, 235, 17, 207, 78, 43, 47, 183, 238, 230, 112, 113, 9, 94, 193, 225, 111, 52, 210, 126, 40, 77, 59, 146, 76, 240, 107, 160, 97, 149, 168], - "modeOfOperation": "ctr", - "plaintext": [ - [254, 6, 56, 79, 47, 143, 226, 218, 73, 231, 57, 12, 87, 133, 215, 151, 24, 50, 253, 152, 187, 195, 16, 214, 158, 124, 37, 65, 219, 17, 8, 76, 115, 170, 154, 135, 44, 241, 214, 218, 243, 151, 187, 249, 89, 202, 180, 96, 198, 94, 23, 37, 43, 92, 71, 22, 212, 56, 45, 175, 188, 29, 45, 249, 5, 133, 22, 36, 204, 68, 80, 189, 118, 152, 12, 196, 66, 61, 220, 36, 166, 250, 159, 156, 203, 139, 31, 99, 23, 65, 63, 158, 40, 140, 228, 69, 84, 21, 116, 46, 171, 57, 185, 117, 79, 54, 118, 71, 119, 191, 138, 156, 153, 253, 93, 67, 162, 115, 163, 126, 71, 194, 134, 123, 91, 2, 152, 166, 163, 85, 203, 254, 150, 136, 196, 111, 229, 190, 71, 181, 156, 211, 127, 165, 101, 95, 230, 141, 90, 240, 5, 148, 197, 75, 0, 100, 194, 35, 216, 26, 185, 75, 232, 159, 77, 166, 23, 19, 28, 79, 154, 51, 88, 148, 134, 200, 195, 255, 131, 133, 253, 138, 205, 43, 77, 12, 164, 121, 144, 185, 101, 214, 86, 79, 100, 201, 90, 238, 43, 192, 169, 227, 10, 150, 209, 23, 156, 194, 53, 94, 209, 177, 80, 165, 188, 220, 63, 49, 162, 134, 172, 249, 157, 249, 81, 94, 39, 83, 47, 100, 253, 71, 88, 227, 33, 115, 49, 24, 82, 120, 155, 233, 38, 173, 23, 62, 189, 133, 212, 210, 196, 240, 132, 241, 122, 183, 163, 30, 112, 142, 248, 55, 113, 203, 110, 112, 168, 146, 229, 194, 152, 152, 111, 223, 70, 155, 28, 59, 146, 207, 145, 230, 205, 209, 201, 24, 227, 245, 219, 237, 193, 178, 163, 244, 186, 90, 37, 60, 253, 21, 145, 177, 181, 210, 236, 178, 228, 215, 93, 77, 30, 215, 7, 115, 185, 165, 42, 199, 125, 155, 213, 28, 141, 197, 49, 150, 169, 180, 208, 25, 247, 122, 92, 130, 141, 100, 207, 146, 240, 215, 112, 223, 93, 237, 183, 198, 185, 21, 213, 138, 93, 87, 26, 241, 150, 177, 202, 39, 202, 1, 106, 5, 255, 26, 193, 38, 84, 57, 8, 166, 17, 62, 54, 250, 166, 128, 159, 148, 197, 208, 168, 97, 37, 100, 154, 179, 77, 207, 253, 135, 8, 46, 166, 190, 7, 236, 34, 61, 124, 148, 145, 147, 75, 44, 93, 180, 155, 168, 30, 25, 8, 145, 97, 214, 65, 124, 218, 226, 65, 89, 135, 90, 205, 224, 56, 97, 220, 154, 23, 46, 80, 228, 215, 190, 227, 106, 28, 173, 23, 125, 245, 214, 200, 107, 112, 151, 183, 84, 121, 228, 190, 121, 246, 102, 219, 241, 207, 79, 183, 244, 180, 48, 227, 49, 166, 111, 228, 135, 210, 125, 2, 129, 233, 88, 149, 43, 36, 208, 129, 113, 92, 88, 168, 66, 105, 125, 216, 224, 251, 116, 223, 166, 97, 167, 102, 69, 25, 26, 118, 230, 143, 255, 250, 151, 21, 121, 162, 183, 58, 199, 122, 120, 121, 153, 108, 20, 43, 192, 42, 114, 28, 165, 216, 12, 45, 34, 94, 127, 25, 200, 70, 138, 116, 25, 97, 134, 226, 90, 75, 212, 195, 128, 27, 115, 204, 181, 120, 7, 140, 127, 213, 75, 71, 57, 130, 16, 163, 89, 35, 62, 116, 44, 249, 13, 203, 101, 233, 237, 69, 137, 102, 241, 56, 56, 78, 220, 23, 127, 102, 98, 222, 246, 170, 103, 13, 46, 87, 133, 37, 166, 171, 126, 86, 29, 203, 135, 251, 83, 138, 59, 80, 169, 16, 165, 241, 238, 111, 204, 13, 157, 200, 229, 251, 41, 186, 68, 235, 21, 194, 188, 134, 228, 237, 65, 55, 150, 56, 216, 81, 20, 6, 206, 120, 72, 124, 27, 129, 0, 128, 55, 122, 212, 127, 9, 38, 176, 60, 187, 151, 235, 168, 118, 104, 141, 173, 80, 254, 122, 97, 125, 222, 250, 69, 231, 48, 204, 204, 143, 109, 166, 41, 195, 146, 127, 14, 178, 222, 174, 120, 6, 189, 239, 108, 241, 249, 231, 171, 24, 210, 172, 184, 162, 4, 203, 84, 217, 127, 206, 145, 91, 97, 3, 90, 172, 112, 196, 165, 32, 207, 31, 25, 146, 111, 115, 143, 217, 41, 71, 208, 122, 76, 100, 70, 114, 175, 109, 87, 0, 110, 195, 219, 58, 195, 81, 212, 246, 180, 213, 100, 131, 26, 14, 240, 206, 91, 144, 149, 118, 15, 207, 68, 161, 120, 120, 142, 130, 186, 206, 222, 249, 163, 245, 236, 54, 218, 192, 181, 153, 129, 33, 211, 133, 164, 222, 194, 104, 237, 16, 131, 96, 149, 217, 9, 141, 202, 115, 174, 136, 206, 245, 110, 193, 253, 144, 231, 100, 126, 62, 78, 125, 79, 5, 59, 197, 195, 146, 233, 231, 7, 138, 76, 204, 11, 191, 146, 193, 105, 136, 70, 35, 176, 90, 94, 53, 221, 73, 227, 10, 161, 174, 62, 120, 34, 66, 18, 161, 25, 24, 89, 215, 6, 69, 243, 205, 219, 242, 116, 68, 110, 167, 67, 15, 30, 163, 153, 27, 185, 168, 64, 234, 28, 120, 172, 197, 118, 38, 109, 16, 123, 223, 29, 205, 179, 124, 163, 82, 125, 176, 248, 168, 230, 63, 69, 16, 79, 98, 29, 193, 6, 3, 172, 124, 39, 225, 216, 189, 69, 97, 20, 149, 9, 33, 200, 152, 187, 69, 131, 17, 191, 126, 117, 216, 146, 168, 178, 107, 232, 175, 142, 118, 244, 197, 235, 112, 202, 6, 195, 59, 143, 146, 77, 38, 183, 54, 189, 69, 76, 11, 220, 60, 144, 20, 66, 206, 197, 204, 99, 236, 75, 100, 212, 166, 134, 246, 98, 157, 243, 136, 33, 114, 69, 192, 133, 128, 207, 180, 243, 209, 177, 69, 98, 171, 143, 189, 138, 178, 202, 215, 9, 79, 237, 150, 121, 54, 96, 49, 86, 40, 53, 103, 174, 88, 219, 62, 105, 142, 78, 247, 102, 129, 242, 252, 81, 205, 11, 155, 155, 132, 71, 68, 101, 207, 86, 231, 57, 169, 23, 55, 17, 184, 62, 144, 115, 254, 63, 222, 140, 32, 168, 138, 167, 93, 85, 153, 163, 20, 11, 253, 115, 112, 70, 93, 3, 121, 160, 229, 237, 181, 229, 239, 201, 214, 162, 18, 232, 111, 182, 119, 249, 140, 180, 226, 249, 160, 1, 225, 196, 131, 202, 157, 129, 107, 155, 240, 187, 152, 187, 63, 127, 79, 246, 202, 89, 104, 126, 79, 172, 154, 111, 188, 212, 72, 228, 192, 1, 141, 147, 1, 202, 251, 221, 166, 165, 101, 180, 32, 31, 106, 45, 37, 79, 120, 103, 245, 109, 149, 182, 78, 227, 87, 254, 56, 57, 7, 250, 10, 180, 7, 105, 176, 186, 103, 91, 161, 127, 17, 224, 40, 248, 203, 253, 251, 90, 217, 185, 115, 239, 200, 19, 174, 74, 8, 77, 75, 73, 88, 217, 189, 19, 103, 215, 166, 171, 168, 139, 52, 234, 159, 251, 206, 181, 249, 72, 107, 219, 231, 237, 145, 9, 114, 228, 110, 37, 78, 223, 106, 206, 53, 233, 201, 81, 244, 180, 149, 174, 232, 18, 156, 12, 162, 243, 211, 230, 244, 23, 240, 74, 41, 217, 181, 161, 100, 104, 98, 147, 218, 139, 225, 151, 153, 123, 200, 246, 208, 252, 232, 81, 25, 26, 28, 60, 94, 225, 59, 227, 191, 125, 250, 224, 63, 37, 21, 107, 88, 53, 179, 117, 103, 243, 181, 253, 103, 210, 210, 110, 101, 65, 51, 104, 138, 43, 185, 192, 189, 31, 58, 63, 213, 120, 229, 79, 141, 177, 19, 150, 100, 111, 231, 255, 253, 27, 17, 104, 154, 120, 74, 60, 81, 162, 176, 23, 250, 40, 18, 181, 45, 76, 24, 245, 247, 47, 51, 83, 183, 105, 233, 99, 173, 246, 164, 181, 224, 40, 239, 47, 120, 222, 89, 35, 187, 203, 121, 50, 58, 252, 139, 50, 64, 205, 250, 164, 33, 97, 108, 59, 98, 16, 98, 171, 25, 109, 39, 166, 161, 138, 31, 77, 45, 232, 78, 46, 142, 169, 198, 110, 169, 16, 77, 114, 176, 61, 93, 68, 190, 125, 224, 30, 9, 10, 5, 206, 58, 63, 237, 156, 118, 82, 119, 86, 8, 64, 217, 116, 87, 178, 113, 48, 214, 24, 78, 29, 70, 178, 189, 56, 211, 255, 70, 110, 180, 241, 234, 108, 162, 19, 151, 74, 62, 48, 195, 196, 46, 40, 60, 152, 234, 223, 220, 198, 145, 47, 11, 103, 4, 3, 33, 73, 156, 249, 181, 167, 141, 146, 42, 131, 57, 8, 142, 17, 119, 21, 124, 165, 213, 48, 55, 76, 240, 195, 157, 41, 117, 205, 44, 163, 55, 208, 42, 42, 78, 117, 159, 87, 134, 81, 23, 211, 164, 205, 155, 185, 167, 159, 219, 50, 243, 53, 36, 237, 4, 197, 243, 115, 201, 181, 131, 72, 124, 227, 243, 154, 26, 70, 236, 252, 70, 195, 15, 77, 48, 11, 15, 99, 38, 185, 129, 138, 227, 188, 182, 186, 133, 91, 66, 53, 209, 53, 42, 25, 10, 126, 154, 33, 72, 156, 153, 239, 248, 8, 212, 140, 163, 76, 224, 156, 104, 185, 169, 103, 182, 96, 144, 120, 128, 248, 107, 204, 199, 54, 205, 132, 60, 81, 248, 230, 189, 156, 251, 36, 211, 193, 193, 245, 157, 104, 243, 193, 205, 20, 11, 50, 101, 25, 18, 196, 247, 201, 75, 242, 83, 15, 218, 251, 150, 31, 131, 27, 77, 13, 74, 155, 152, 175, 158, 32, 78, 89, 128, 143, 111, 125, 166, 27, 222, 216, 222, 146, 62, 27, 233, 214, 253, 4, 251, 243, 118, 29, 249, 241, 99, 153, 132, 145, 59, 151, 93, 37, 229, 12, 80, 128, 8, 48, 71, 121, 129, 154, 27, 185, 116, 42, 155, 119, 53, 6, 218, 218, 202, 46, 91, 242, 236, 200, 102, 207, 10, 55, 58, 227, 164, 190, 158, 44, 94, 237, 201, 253, 135, 60, 182, 5, 228, 251, 78, 168, 250, 123, 249, 160, 236, 253, 25, 250, 149, 131, 215, 10, 202, 116, 94, 128, 219, 194, 132, 18, 123, 184, 94, 70, 126, 76, 228, 103, 117, 248, 71, 117, 235, 129, 168, 195, 126, 197, 222, 61, 135, 69, 107, 93, 54, 206, 211, 72, 6, 29, 183, 77, 221, 29, 128, 224, 80, 20, 63, 231, 143, 233, 90, 221, 135, 126, 197, 185, 29, 232, 74, 101, 70, 230, 150, 22, 216, 65, 153, 219, 64, 125, 92, 51, 9, 98, 80, 16, 43, 90, 127, 45, 247, 5, 47, 190, 82, 83, 19, 102, 211, 127, 251, 87, 225, 52, 215, 10, 99, 153, 25, 192, 99, 53, 81, 15, 99, 70, 123, 196, 0, 144, 251, 13, 150, 189, 116, 159, 204, 110, 73, 90, 236, 128, 219, 215, 136, 107, 135, 169, 180, 178, 45, 215, 6, 245, 251, 237, 55, 36, 51, 49, 85, 253, 235, 119, 158, 111, 156, 107, 126, 94, 89, 124, 170, 33, 25, 166, 93, 69, 194, 36, 133, 134, 92, 220, 202, 218, 223, 98, 146, 53, 215, 51, 93, 18, 7, 24, 239, 243, 100, 38, 118, 212, 213, 9, 99, 173, 114, 184, 115, 228, 69, 249, 79, 255, 225, 160, 38, 80, 162, 217, 196, 65, 199, 125, 151, 240, 88, 207, 7, 99, 11, 178, 106, 135, 228, 104, 92, 52, 120, 184, 174, 24, 185, 159, 18, 247, 7, 188, 60, 203, 71, 229, 38, 105, 10, 46, 98, 169, 101, 190, 229, 107, 147, 55, 189, 138, 68, 209, 56, 168, 172, 28, 215, 45, 123, 229, 205, 24, 21, 89, 165, 209, 153, 116, 14, 203, 249, 76, 90, 93, 231, 214, 239, 164, 28, 123, 133, 18, 133, 221, 75, 244, 178, 109, 87, 154, 127, 40, 176, 74, 85, 94, 68, 78, 78, 197, 211, 162, 66, 167, 218, 108, 226, 61, 99, 227, 237, 130, 182, 215, 150, 77, 23, 47, 247, 243, 66, 15, 24, 218, 212, 239, 237, 164, 172, 254, 61, 186, 173, 99, 117, 128, 181, 140, 228, 39, 79, 227, 47, 14, 63, 143, 45, 185, 15, 44, 47, 190, 99, 218, 250, 205, 85, 55, 192, 217, 54, 109, 130, 229, 168, 187, 32, 145, 162, 131, 105, 247, 115, 132, 241, 116, 154, 134, 69, 139, 98, 122, 225, 191, 72, 223, 2, 150, 191, 76, 140, 62, 137, 32, 25, 169, 80, 96, 74, 144, 239, 118, 249, 75, 83, 176, 191, 208, 88, 124, 12, 254, 193, 160, 11, 7, 255, 70, 45, 15, 213, 164, 191, 203, 192, 236, 14, 149, 9, 122, 170, 23, 18, 8, 213, 62, 214, 73, 73, 172, 132, 199, 12, 44, 78, 20, 98, 238, 4, 255, 176, 122, 188, 186, 167, 234, 51, 87, 92, 9, 53, 248, 142, 189, 144, 231, 3, 122, 222, 249, 32, 225, 117, 142, 153, 142, 243, 60, 188, 39, 182, 72, 59, 217, 49, 61, 0, 104, 221, 153, 59, 13, 76, 0, 115, 243, 232, 11, 130, 249, 253, 169, 124, 53, 25, 190, 50, 142, 232, 211, 13, 191, 48, 64, 154, 33, 178, 21, 154, 194, 118, 186, 197, 79, 230, 162, 38, 215, 71, 229, 244, 146, 184, 13, 141, 208, 64, 51, 35, 122, 178, 71, 146, 35, 58, 209, 208, 185, 5, 210, 114, 172, 135, 88, 75, 121, 22, 136, 223, 233, 207, 69, 171, 118, 185, 26, 103, 209, 24, 255, 223, 220, 75, 91, 24, 121, 96, 52, 151, 102, 207, 198, 68, 177, 249, 166, 209, 46, 167, 22, 99, 223, 37, 166, 77, 65, 54, 138, 28, 59, 209, 49, 148, 116, 148, 131, 155, 226, 44, 163, 10, 237, 186, 106, 249, 70, 165, 0, 94, 78, 150, 119, 81, 127, 67, 0, 155, 67, 97, 24, 188, 76, 128, 250, 118, 74, 42, 194, 144, 169, 178, 204, 81, 241, 110, 222, 189, 60, 35, 9, 83, 223, 49, 6, 135, 107, 139, 150, 31, 103, 45, 7, 219, 76, 98, 100, 227, 53, 60, 7, 119, 64, 6, 167, 198, 213, 135, 174, 163, 76, 27, 42, 55, 141, 125, 110, 216, 70, 204, 139, 0, 44, 237, 60, 73, 5, 160, 113, 223, 53, 63, 2, 89, 116, 206, 17, 250, 56, 22, 163, 106, 29, 187, 222, 112, 205, 216, 109, 189, 153, 106, 139, 119, 22, 163, 150, 183, 167, 148, 92, 133, 136, 103, 64, 104, 166, 15, 81, 233, 123, 118, 171, 236, 47, 22, 250, 43, 63, 236, 208, 188, 130, 205, 31, 5, 64, 22, 153, 228, 252, 160, 196, 133, 152, 106, 17, 245, 142, 8, 185, 254, 133, 221, 212, 138, 229, 27, 93, 174, 140, 47, 54, 59, 13, 30, 142, 48, 251, 223, 171, 140, 121, 91, 213, 149, 228, 111, 14, 17, 133, 118, 202, 128, 66, 177, 85, 193, 127, 254, 121, 238, 10, 90, 48, 69, 29, 59, 87, 146, 215, 110, 247, 105, 102, 79, 177, 150, 91, 172, 189, 71, 36, 58, 120, 12, 176, 99, 150, 172, 246, 14, 73, 205, 197, 252, 220, 120, 92, 171, 107, 195, 57, 155, 95, 17, 92, 193, 62, 147, 94, 52, 16, 81, 47, 2, 22, 110, 30, 20, 12, 115, 175, 149, 69, 84, 106, 6, 201, 156, 52, 29, 106, 192, 123, 52, 217, 173, 130, 194, 209, 61, 72, 101, 162, 198, 124, 63, 59, 167, 232, 98, 252, 32, 183, 228, 242, 93, 226, 216, 100, 186, 7, 84, 63, 142, 134, 184, 123, 96, 174, 36, 105, 67, 137, 45, 32, 222, 109, 201, 154, 198, 152, 246, 102, 7, 174, 85, 72, 182, 22, 75, 126, 238, 89, 244, 63, 66, 218, 208, 123, 82, 54, 176, 170, 190, 132, 122, 33, 9, 197, 26, 202, 7, 75, 81, 170, 74, 108, 198, 26, 55, 184, 32, 119, 146, 55, 24, 122, 62, 101, 164, 194, 196, 26, 254, 220, 109, 95, 124, 200, 212, 143, 121, 6, 183, 121, 102, 102, 50, 46, 232, 178, 196, 181, 94, 179, 239, 13, 167, 199, 33, 38, 112, 109, 70, 246, 34, 187, 86, 134, 250, 51, 238, 121, 126, 239, 43, 162, 169, 113, 106, 46, 240, 153, 186, 112, 52, 219, 47, 107, 10, 217, 17, 70, 221, 128, 150, 15, 155, 137, 180, 56, 31, 170, 232, 212, 189, 90, 115, 90, 134, 158, 117, 235, 118, 192, 5, 27, 28, 36, 64, 57, 20, 152, 223, 151, 137, 78, 14, 32, 29, 232, 19, 130, 243, 29, 121, 14, 209, 49, 52, 116, 174, 23, 247, 152, 134, 192, 53, 203, 123, 163, 119, 244, 191, 196, 111, 19, 64, 189, 69, 8, 149, 56, 7, 137, 233, 209, 94, 137, 172, 187, 182, 79, 55, 103, 88, 11, 142, 224, 72, 188, 112, 181, 239, 23, 4, 14, 78, 168, 227, 227, 135, 149, 121, 233, 182, 99, 0, 166, 1, 59, 64, 238, 179, 99, 70, 121, 137, 149, 194, 10, 186, 119, 142, 111, 69, 183, 109, 177, 41, 137, 74, 172, 11, 19, 150, 44, 167, 203, 126, 88, 194, 98, 16, 181, 241, 92, 204, 43, 250, 154, 251, 176, 108, 80, 254, 147, 233, 100, 91, 206, 165, 102, 9, 3, 213, 113, 109, 65, 253, 216, 219, 232, 107, 91, 88, 77, 51, 20, 23, 69, 67, 124, 45, 138, 138, 108, 35, 208, 178, 167, 216, 181, 5, 40, 54, 162, 30, 237, 90, 242, 6, 188, 181, 3, 172, 146, 217, 71, 86, 137, 7, 40, 59, 98, 158, 48, 111, 171, 188, 135, 10, 149, 125, 243, 68, 120, 122, 25, 72, 136, 92, 222, 71, 106, 100, 212, 132, 126, 126, 149, 164, 170, 80, 146, 57, 70, 254, 41, 27, 116, 43, 178, 83, 71, 228, 53, 7, 227, 226, 208, 112, 157, 78, 217, 79, 14, 205, 228, 218, 69, 179, 131, 183, 235, 75, 236, 148, 94, 63, 121, 69, 27, 223, 45, 141, 138, 66, 229, 17, 12, 206, 56, 219, 33, 62, 183, 204, 23, 187, 177, 56, 71, 65, 245, 215, 69, 153, 42, 94, 51, 159, 61, 184, 59, 232, 199, 8, 20, 129, 166, 210, 241, 247, 154, 38, 170, 88, 80, 156, 132, 191, 83, 216, 168, 103, 33, 52, 165, 53, 79, 43, 245, 162, 230, 219, 148, 24, 22, 10, 155, 20, 48, 226, 93, 54, 244, 160, 242, 186, 189, 78, 50, 78, 73, 191, 99, 171, 254, 33, 237, 30, 237, 76, 60, 49, 123, 211, 50, 205, 7, 179, 208, 92, 135, 115, 202, 60, 93, 191, 169, 135, 47, 183, 240, 147, 197, 130, 85, 92, 173, 236, 12, 243, 157, 156, 112, 106, 236, 18, 165, 217, 44, 11, 97, 247, 63, 200, 218, 46, 7, 178, 60, 52, 156, 41, 14, 95, 108, 163, 154, 248, 73, 205, 72, 177, 116, 7, 83, 126, 131, 50, 103, 117, 19, 255, 235, 222, 225, 38, 65, 12, 50, 25, 154, 239, 141, 245, 63, 213, 74, 242, 1, 205, 78, 117, 59, 196, 94, 3, 131, 40, 120, 59, 68, 101, 139, 107, 222, 48, 201, 81, 100, 36, 100, 138, 151, 120, 91, 213, 150, 51, 57, 17, 166, 94, 226, 48, 136, 217, 150, 147, 87, 166, 20, 48, 59, 12, 97, 212, 243, 65, 229, 230, 156, 162, 250, 112, 198, 11, 245, 3, 67, 169, 84, 93, 254, 121, 214, 140, 77, 190, 88, 115, 193, 254, 136, 139, 38, 230, 144, 76, 69, 237, 133, 31, 249, 115, 188, 98, 190, 38, 2, 167, 42, 73, 69, 227, 246, 11, 21, 173, 204, 250, 81, 87, 98, 10, 4, 15, 16, 100, 167, 3, 54, 74, 224, 221, 59, 2, 205, 185, 237, 87, 219, 178, 80, 167, 225, 58, 175, 9, 91, 15, 158, 9, 48, 58, 200, 245, 45, 103, 38, 103, 166, 81, 154, 69, 158, 95, 54, 41, 46, 103, 94, 250, 13, 255, 141, 27, 149, 116, 0, 96, 255, 2, 163, 0, 121, 17, 236, 114, 51, 196, 208, 116, 132, 170, 76, 138, 52, 252, 76, 45, 64, 126, 215, 182, 128, 111, 185, 145, 247, 185, 38, 37, 134, 40, 111, 173, 68, 227, 30, 182, 106, 81, 217, 84, 33, 17, 46, 88, 91, 84, 64, 70, 206, 39, 57, 71, 85, 48, 209, 181, 191, 194, 50, 215, 232, 100, 98, 221, 201, 63, 153, 135, 121, 25, 203, 114, 203, 207, 71, 116, 230, 189, 226, 109, 129, 138, 179, 114, 223, 16, 197, 89, 106, 166, 203, 193, 203, 64, 209, 83, 193, 87, 54, 194, 27, 234, 121, 71, 33, 29, 60, 144, 124, 164, 222, 96, 81, 118, 162, 23, 249, 173, 82, 27, 162, 51, 176, 103, 145, 101, 103, 148, 38, 171, 31, 139, 198, 225, 42, 220, 236, 37, 75, 160, 244, 99, 19, 205, 116, 143, 114, 64, 111, 125, 41, 195, 246, 17, 99, 76, 196, 205, 118, 188, 251, 56, 53, 16, 49, 22, 100, 61, 36, 49, 135, 11, 232, 147, 181, 247, 38, 166, 179, 76, 40, 93, 29, 243, 226, 169, 5, 116, 67, 42, 246, 192, 149, 38, 55, 59, 26, 228, 246, 77, 130, 161, 168, 143, 239, 195, 41, 140, 40, 196, 142, 140, 35, 90, 180, 10, 91, 41, 239, 247, 40, 8, 119, 237, 203, 189, 21, 192, 144, 209, 90, 209, 161, 99, 148, 199, 22, 240, 134, 241, 90, 182, 172, 218, 16, 1, 219, 102, 112, 128, 98, 28, 179, 85, 203, 51, 54, 86, 81, 16, 134, 234, 78, 77, 160, 60, 21, 255, 191, 34, 228, 245, 131, 247, 128, 154, 107, 18, 166, 203, 99, 81, 3, 78, 215, 50, 237, 235, 142, 244, 214, 208, 188, 97, 124, 55, 149, 197, 232, 134, 165, 177, 49, 77, 7, 201, 237, 203, 215, 55, 16, 169, 34, 35, 152, 57, 22, 194, 231, 143, 212, 85, 16, 227, 29, 175, 24, 129, 85, 168, 219, 157, 219, 172, 190, 204, 42, 107, 84, 52, 237, 36, 143, 3, 240, 19, 107, 64, 151, 154, 74, 215, 81, 246, 29, 7, 207, 85, 117, 171, 136, 233, 189, 170, 217, 229, 133, 231, 185, 0, 187, 206, 22, 5, 11, 31, 219, 162, 140, 239, 171, 212, 7, 82, 59, 177, 204, 219, 179, 43, 154, 153, 43, 227, 21, 11, 246, 156, 70, 194, 167, 64, 180, 128, 112, 115, 58, 119, 120, 154, 243, 211, 62, 209, 232, 12, 56, 60, 16, 97, 62, 203, 210, 104, 211, 37, 242, 120, 253, 60, 68, 39, 141, 230, 27, 188, 45, 133, 228, 46, 169, 171, 204, 244, 94, 9, 58, 185, 188, 47, 243, 195, 51, 106, 121, 10, 104, 64, 87, 100, 28, 85, 61, 147, 145, 155, 117, 68, 65, 227, 91, 250, 227, 188, 149, 190, 16, 133, 163, 21, 134, 245, 26, 169, 100, 178, 166, 168, 194, 235, 44, 11, 223, 111, 247, 32, 213, 184, 167, 51, 101, 151, 101, 105, 58, 44, 74, 191, 163, 17, 153, 83, 198, 216, 147, 76, 12, 190, 26, 145, 136, 172, 180, 38, 45, 127, 214, 204, 167, 39, 44, 207, 79, 122, 39, 58, 169, 158, 177, 197, 103, 38, 203, 148, 186, 115, 77, 50, 191, 111, 248, 24, 113, 65, 38, 22, 32, 125, 198, 217, 46, 2, 54, 29, 140, 63, 212, 202, 214, 105, 91, 0, 124, 88, 194, 1, 161, 151, 126, 193, 212, 149, 220, 237, 65, 66, 22, 10, 200, 94, 93, 132, 214, 36, 13, 152, 62, 121, 125, 61, 127, 47, 49, 38, 133, 97, 217, 44, 98, 1, 199, 52, 116, 7, 126, 57, 54, 159, 8, 47, 254, 36, 120, 96, 225, 110, 71, 45, 69, 202, 93, 161, 208, 175, 143, 67, 110, 7, 197, 97, 70, 143, 78, 5, 228, 252, 50, 195, 247, 86, 29, 48, 100, 50, 72, 255, 141, 16, 165, 226, 149, 111, 223, 175, 199, 114, 254, 137, 5, 77, 91, 177, 172, 174, 228, 117, 104, 72, 157, 153, 98, 206, 122, 138, 167, 186, 113, 188, 73, 106, 242, 128, 222, 72, 186, 185, 128, 97, 218, 181, 242, 135, 94, 35, 109, 96, 107, 49, 113, 67, 51, 15, 208, 5, 17, 135, 168, 250, 34, 177, 222, 147, 239, 164, 13, 20, 222, 135, 154, 145, 203, 170, 124, 53, 11, 225, 107, 26, 26, 248, 159, 241, 184, 208, 61, 151, 58, 51, 235, 86, 231, 170, 232, 172, 122, 104, 148, 14, 116, 239, 230, 162, 125, 44, 92, 25, 162, 165, 225, 130, 25, 42, 21, 136, 224, 19, 244, 93, 66, 61, 7, 216, 94, 196, 195, 119, 181, 197, 11, 206, 206, 89, 171, 215, 191, 96, 56, 101, 182, 12, 52, 58, 23, 160, 226, 56, 245, 104, 189, 254, 185, 119, 155, 37, 230, 97, 53, 19, 68, 243, 123, 134, 191, 24, 136, 39, 1, 36, 22, 76, 167, 38, 183, 86, 229, 136, 50, 227, 72, 178, 76, 92, 182, 238, 104, 232, 75, 139, 132, 6, 130, 228, 60, 103, 54, 22, 1, 89, 180, 221, 223, 19, 220, 220, 96, 128, 197, 108, 49, 76, 178, 2, 225, 39, 0, 168, 200, 194, 43, 2, 124, 60, 42, 186, 235, 37, 93, 139, 40, 140, 14, 140, 80, 60, 110, 246, 90, 7, 130, 66, 98, 234, 112, 81, 200, 49, 176, 38, 57, 121, 176, 18, 95, 166, 48, 25, 253, 251, 44, 251, 28, 21, 121, 161, 192, 150, 231, 95, 188, 251, 252, 120, 28, 179, 19, 227, 123, 134, 95, 55, 147, 58, 110, 93, 177, 102, 146, 31, 95, 217, 79, 156, 48, 211, 194, 148, 242, 240, 58, 3, 119, 252, 239, 195, 130, 43, 191, 89, 74, 121, 148, 44, 17, 129, 141, 100, 225, 102, 103, 49, 163, 9, 124, 87, 207, 16, 3, 216, 122, 191, 118, 119, 75, 228, 229, 238, 156, 106, 15, 158, 213, 53, 121, 248, 85, 100, 87, 99, 233, 204, 211, 104, 24, 196, 65, 170, 252, 182, 15, 248, 86, 61, 22, 178, 240, 212, 217, 132, 157, 163, 133, 58, 13, 66, 50, 185, 242, 148, 172, 152, 90, 229, 212, 135, 85, 170, 235, 164, 90, 195, 191, 172, 56, 254, 197, 84, 45, 76, 126, 208, 37, 151, 45, 247, 106, 85, 232, 81, 22, 208, 40, 80, 43, 61, 187, 140, 119, 253, 109, 206, 39, 211, 138, 6, 125, 224, 70, 47, 139, 35, 15, 11, 92, 186, 13, 249, 164, 205, 122, 167, 11, 62, 191, 71, 127, 173, 242, 15, 236, 95, 23, 156, 149, 109, 18, 17, 19, 23, 208, 104, 25, 229, 104, 205, 25, 186, 198, 189, 203, 227, 80, 230, 97, 176, 251, 54, 169, 93, 216, 197, 240, 208, 123, 113, 187, 18, 179, 105, 189, 104, 239, 6, 64, 72, 184, 79, 154, 161, 201, 51, 219, 20, 140, 4, 220, 140, 47, 56, 34, 78, 214, 221, 64, 112, 110, 135, 198, 197, 191, 124, 17, 21, 253, 142, 32, 51, 153, 171, 79, 104, 181, 168, 111, 27, 192, 224, 77, 37, 118, 107, 106, 169, 112, 194, 175, 126, 167, 76, 198, 80, 132, 47, 117, 229, 15, 185, 6, 235, 190, 167, 107, 158, 10, 77, 237, 165, 56, 79, 146, 78, 28, 150, 6, 86, 139, 245, 107, 212, 228, 108, 237, 51, 77, 103, 171, 232, 58, 19, 134, 76, 126, 188, 243, 166, 74, 231, 126, 140, 121, 222, 46, 8, 250, 165, 76, 190, 179, 169, 231, 75, 167, 67, 43, 212, 84, 203, 164, 241, 194, 47, 76, 13, 185, 154, 104, 250, 243, 57, 27, 155, 249, 223, 161, 25, 172, 210, 238, 92, 92, 37, 132, 166, 31, 58, 91, 215, 100, 54, 30, 74, 204, 91, 118, 183, 144, 45, 221, 83, 23, 172, 17, 67, 186, 11, 138, 58, 111, 30, 204, 43, 184, 129, 54, 199, 214, 49, 103, 222, 124, 230, 2, 27, 216, 151, 4, 14, 11, 168, 246, 250, 12, 107, 0, 188, 166, 94, 90, 227, 105, 117, 197, 151, 55, 115, 37, 218, 108, 236, 168, 252, 6, 81, 108, 183, 240, 113, 211, 130, 89, 141, 7, 169, 140, 88, 33, 178, 83, 250, 203, 131, 121, 170, 103, 115, 139, 148, 72, 243, 56, 227, 164, 253, 230, 87, 213, 36, 138, 59, 80, 240, 253, 205, 58, 200, 19, 126, 3, 30, 251, 210, 129, 189, 49, 31, 113, 8, 16, 84, 232, 93, 240, 129, 31, 19, 233, 90, 25, 162, 156, 154, 192, 50, 127, 196, 76, 22, 43, 93, 177, 181, 198, 187, 90, 250, 107, 231, 14, 253, 234, 251, 87, 145, 59, 39, 25, 200, 137, 181, 221, 216, 129, 227, 82, 183, 174, 65, 124, 4, 6, 72, 74, 120, 116, 57, 179, 37, 168, 91, 103, 123, 212, 174, 47, 64, 28, 53, 14, 182, 106, 21, 12, 25, 46, 163, 48, 29, 224, 83, 138, 91, 239, 69, 157, 109, 111, 121, 86, 52, 71, 66, 210, 110, 184, 70, 240, 57, 34, 80, 195, 154, 22, 159, 206, 38, 180, 149, 43, 155, 6, 74, 253, 252, 35, 185, 141, 53, 242, 167, 20, 162, 20, 238, 227, 9, 227, 78, 235, 8, 129, 163, 65, 100, 43, 45, 135, 179, 238, 83, 91, 108, 13, 2, 27, 191, 165, 223, 61, 80, 222, 73, 150, 65, 178, 222, 91, 1, 76, 145, 246, 84, 230, 136, 121, 121, 72, 81, 123, 246, 51, 86, 163, 124, 158, 81, 49, 201, 10, 189, 101, 15, 180, 63, 115, 74, 20, 255, 136, 161, 49, 55, 21, 197, 232, 21, 136, 159, 17, 103, 55, 125, 58, 147, 71, 140, 255, 177, 169, 88, 64, 163, 87, 102, 197, 99, 211, 128, 112, 104, 117, 43, 123, 99, 58, 120, 119, 151, 233, 171, 234, 232, 41, 96, 105, 57, 67, 153, 25, 233, 19, 151, 189, 153, 28, 109, 82, 146, 48, 97, 88, 131, 213, 25, 139, 37, 59, 208, 201, 21, 219, 213, 152, 45, 63, 162, 227, 122, 53, 59, 192, 1, 189, 186, 175, 249, 178, 196, 41, 32, 68, 186, 100, 218, 79, 23, 64, 150, 246, 81, 78, 226, 237, 180, 91, 80, 202, 75, 160, 6, 48, 225, 200, 187, 216, 179, 39, 125, 56, 28, 167, 129, 206, 104, 198, 198, 69, 108, 171, 4, 16, 38, 33, 156, 73, 108, 243, 167, 244, 222, 142, 174, 204, 72, 31, 19, 111, 194, 184, 129, 183, 255, 26, 204, 42, 18, 92, 219, 34, 37, 154, 172, 45, 104, 51, 157, 143, 187, 101, 69, 5, 57, 226, 171, 90, 165, 185, 130, 31, 173, 137, 198, 63, 179, 153, 93, 13, 60, 136, 184, 190, 158, 66, 213, 40, 108, 191, 24, 170, 134, 6, 17, 76, 1, 179, 71, 132, 211, 130, 74, 148, 240, 112, 235, 139, 96, 140, 86, 85, 90, 18, 26, 98, 151, 147, 53, 191, 115, 159, 240, 203, 161, 98, 214, 162, 145, 148, 12, 222, 205, 14, 186, 58, 49, 25, 26, 135, 179, 139, 19, 75, 176, 35, 135, 171, 14, 148, 119, 221, 70, 168, 126, 131, 252, 88, 5, 90, 163, 126, 231, 65, 59, 5, 244, 222, 4, 5, 246, 255, 26, 219, 102, 50, 141, 199, 138, 64, 154, 58, 6, 131, 19, 99, 192, 14, 47, 11, 210, 46, 29, 193, 163, 61, 128, 161, 242, 4, 156, 195, 222, 148, 69, 129, 166, 94, 31, 247, 128, 137, 221, 15, 89, 51, 66, 47, 160, 239, 50, 98, 60, 62, 39, 74, 133, 133, 182, 153, 169, 12, 72, 181, 203, 12, 132, 21, 32, 201, 109, 218, 84, 28, 52, 210, 7, 68, 151, 115, 207, 138, 237, 227, 76, 103, 244, 194, 59, 77, 142, 51, 207, 133, 230, 196, 85, 161, 103, 88, 31, 173, 45, 240, 10, 187, 242, 111, 184, 61, 141, 117, 201, 254, 238, 137, 204, 131, 201, 185, 228, 0, 192, 249, 246, 71, 169, 4, 27, 92, 198, 152, 158, 31, 75, 100, 4, 24, 78, 9, 97, 51, 67, 126, 16, 93, 163, 119, 156, 209, 229, 118, 72, 86, 146, 10, 83, 25, 69, 212, 18, 191, 84, 244, 18, 123, 254, 128, 99, 27, 200, 234, 122, 168, 153, 1, 117, 122, 101, 48, 246, 65, 138, 222, 103, 18, 242, 30, 66, 193, 6, 231, 117, 29, 85, 131, 1, 104, 145, 205, 89, 42, 84, 205, 221, 79, 115, 153, 189, 30, 45, 194, 198, 246, 184, 29, 52, 153, 150, 156, 240, 58, 81, 229, 92, 187, 144, 114, 50, 136, 216, 197, 192, 92, 79, 178, 27, 64, 115, 108, 242, 159, 243, 13, 130, 75, 224, 49, 193, 180, 17, 118, 50, 5, 16, 48, 74, 185, 175, 44, 87, 66, 99, 41, 186, 245, 193, 164, 60, 251, 219, 8, 162, 76, 34, 240, 147, 105, 162, 4, 215, 230, 189, 9, 150, 66, 43, 207, 50, 111, 232, 62, 192, 52, 88, 27, 36, 134, 23, 192, 29, 210, 123, 229, 111, 163, 246, 86, 240, 179, 5, 122, 175, 40, 100, 163, 149, 207, 120, 34, 172, 245, 198, 80, 237, 15, 212, 205, 163, 190, 216, 143, 233, 222, 53, 239, 61, 39, 182, 218, 99, 129, 212, 211, 145, 249, 103, 31, 159, 74, 249, 238, 130, 241, 127, 44, 181, 120, 77, 148, 154, 165, 213, 89, 90, 117, 3, 221, 31, 229, 133, 71, 122, 219, 25, 139, 158, 12, 54, 126, 82, 30, 153, 35, 140, 42, 9, 74, 15, 124, 65, 87, 23, 132, 179, 11, 137, 54, 69, 53, 105, 10, 189, 224, 134, 5, 216, 132, 206, 13, 118, 43, 69, 88, 184, 210, 86, 46, 109, 111, 141, 6, 31, 97, 82, 154, 117, 254, 8, 21, 133, 76, 254, 21, 162, 233, 91, 179, 203, 161, 146, 17, 8, 106, 150, 206, 8, 168, 223, 179, 73, 47, 143, 151, 185, 247, 34, 19, 132, 44, 166, 245, 41, 87, 72, 148, 62, 121, 194, 69, 6, 235, 230, 2, 242, 1, 67, 237, 183, 183, 252, 70, 190, 57, 195, 195, 73, 116, 27, 199, 180, 103, 30, 19, 227, 0, 158, 252, 91, 120, 35, 19, 109, 157, 8, 219, 155, 195, 69, 243, 36, 238, 163, 170, 47, 76, 128, 239, 31, 74, 51, 144, 31, 81, 227, 53, 75, 101, 47, 20, 128, 134, 246, 222, 154, 27, 43, 69, 165, 164, 138, 16, 87, 149, 143, 220, 195, 27, 228, 157, 246, 73, 186, 80, 164, 128, 82, 255, 251, 7, 248, 228, 146, 70, 193, 63, 223, 31, 120, 16, 65, 17, 159, 119, 157, 198, 116, 79, 142, 122, 115, 86, 78, 241, 145, 32, 51, 36, 251, 111, 233, 216, 28, 132, 29, 84, 131, 101, 66, 184, 179, 237, 253, 191, 135, 31, 152, 27, 218, 203, 240, 135, 242, 139, 158, 6, 200, 109, 105, 158, 157, 120, 139, 171, 119, 58, 236, 135, 96, 193, 91, 149, 154, 188, 89, 231, 105, 156, 56, 156, 84, 169, 135, 79, 40, 156, 169, 226, 4, 25, 63, 16, 220, 6, 221, 217, 108, 28, 192, 208, 165, 206, 2, 132, 197, 220, 152, 186, 149, 87, 179, 76, 23, 159, 124, 78, 244, 162, 144, 241, 161, 68, 225, 125, 157, 53, 85, 162, 175, 227, 123, 146, 47, 129, 88, 233, 252, 227, 138, 61, 150, 142, 48, 130, 251, 175, 30, 93, 183, 79, 122, 15, 198, 204, 80, 181, 191, 94, 92, 239, 5, 56, 32, 200, 2, 143, 159, 11, 165, 144, 121, 24, 107, 33, 150, 125, 130, 115, 10, 188, 230, 82, 234, 208, 144, 44, 81, 56, 211, 74, 49, 107, 98, 143, 84, 201, 109, 93, 215, 206, 189, 206, 61, 79, 4, 66, 130, 210, 239, 73, 221, 89, 115, 230, 64, 254, 23, 65, 219, 183, 246, 211, 133, 245, 116, 222, 75, 147, 129, 232, 199, 246, 156, 217, 212, 208, 232, 86, 139, 242, 132, 46, 16, 41, 153, 65, 237, 100, 167, 218, 193, 230, 187, 131, 0, 46, 210, 126, 97, 150, 79, 76, 111, 203, 103, 71, 157, 105, 202, 16, 140, 191, 243, 16, 27, 33, 12, 160, 183, 177, 32, 91, 220, 69, 196, 76, 53, 220, 153, 81, 203, 141, 160, 188, 202, 103, 33, 196, 26, 84, 137, 83, 148, 56, 43, 98, 47, 243, 81, 57, 72, 121, 127, 50, 60, 140, 145, 53, 8, 115, 35, 237, 59, 111, 210, 128, 114, 184, 67, 100, 220, 214, 173, 157, 190, 62, 118, 128, 139, 238, 20, 167, 254, 181, 254, 75, 81, 187, 129, 89, 191, 236, 186, 166, 182, 67, 179, 106, 255, 7, 56, 55, 9, 120, 158, 7, 184, 212, 175, 130, 123, 203, 52, 170, 243, 254, 203, 254, 43, 48, 24, 140, 139, 33, 226, 11, 243, 191, 52, 34, 5, 241, 189, 133, 213, 135, 254, 251, 248, 186, 235, 252, 43, 23, 228, 86, 17, 42, 173, 163, 76, 38, 166, 34, 243, 157, 210, 59, 61, 147, 238, 72, 55, 76, 40, 175, 221, 117, 233, 12, 177, 105, 182, 209, 172, 40, 5, 2, 147, 130, 66, 216, 63, 218, 100, 113, 253, 124, 51, 40, 49, 141, 191, 247, 216, 63, 63, 187, 164, 181, 230, 130, 12, 247, 229, 253, 138, 3, 42, 158, 253, 58, 96, 75, 244, 249, 154, 154, 153, 180, 76, 180, 231, 133, 137, 248, 255, 130, 23, 46, 105, 118, 70, 204, 211, 16, 162, 131, 234, 133, 79, 63, 80, 81, 87, 167, 255, 38, 47, 77, 90, 207, 252, 90, 212, 59, 58, 147, 48, 96, 91, 76, 169, 225, 210, 26, 131, 119, 208, 130, 202, 109, 188, 13, 215, 37, 146, 134, 149, 222, 181, 74, 3, 128, 243, 171, 147, 118, 210, 222, 14, 170, 133, 167, 112, 236, 197, 184, 55, 223, 189, 66, 202, 138, 72, 48, 53, 3, 67, 176, 69, 176, 191, 178, 9, 147, 245, 250, 225, 173, 13, 155, 36, 72, 158, 234, 53, 162, 234, 161, 168, 138, 66, 26, 81, 88, 244, 165, 36, 14, 235, 181, 56, 43, 108, 4, 131, 198, 98, 129, 146, 135, 205, 86, 186, 219, 186, 146, 118, 43, 77, 84, 243, 144, 63, 191, 78, 92, 243, 25, 248, 138, 156, 202, 80, 241, 147, 92, 166, 87, 183, 198, 42, 161, 48, 52, 228, 47, 186, 42, 127, 182, 63, 170, 222, 142, 181, 143, 227, 94, 196, 253, 18, 125, 102, 152, 137, 7, 159, 166, 30, 130, 51, 18, 46, 92, 224, 135, 33, 171, 229, 92, 123, 163, 57, 205, 173, 64, 29, 197, 36, 89, 97, 234, 90, 216, 42, 47, 5, 253, 65, 198, 8, 198, 119, 185, 227, 214, 176, 227, 151, 145, 126, 62, 225, 30, 209, 24, 85, 155, 156, 203, 14, 72, 127, 65, 244, 46, 173, 70, 81, 216, 163, 42, 99, 130, 118, 139, 45, 87, 204, 193, 155, 105, 84, 189, 200, 220, 183, 64, 109, 234, 146, 78, 30, 33, 80, 95, 241, 64, 125, 29, 186, 23, 106, 37, 92, 150, 121, 10, 11, 178, 207, 121, 5, 51, 2, 35, 156, 232, 199, 242, 162, 194, 152, 25, 165, 123, 36, 249, 193, 74, 222, 60, 206, 246, 162, 160, 196, 191, 80, 25, 167, 243, 51, 64, 34, 185, 148, 124, 43, 0, 195, 107, 196, 90, 166, 124, 199, 144, 110, 212, 130, 198, 56, 99, 17, 25, 89, 132, 11, 179, 54, 126, 235, 154, 2, 75, 115, 166, 63, 125, 239, 93, 215, 66, 195, 147, 32, 131, 244, 143, 165, 126, 195, 178, 17, 183, 30, 1, 8, 82, 153, 98, 190, 216, 237, 217, 100, 76, 210, 63, 53, 27, 232, 231, 61, 176, 165, 244, 205, 193, 52, 234, 153, 107, 215, 101, 193, 130, 106, 197, 116, 186, 106, 246, 130, 173, 250, 174, 2, 0, 169, 53, 224, 6, 148, 129, 61, 69, 131, 166, 198, 192, 94, 192, 186, 67, 79, 44, 158, 210, 170, 98, 155, 102, 50, 217, 253, 160, 148, 74, 145, 236, 213, 201, 31, 160, 205, 193, 9, 218, 245, 31, 74, 80, 168, 110, 200, 217, 226, 85, 210, 27, 158, 233, 115, 185, 84, 175, 1, 151, 230, 229, 151, 119, 188, 237, 184, 231, 103, 168, 39, 75, 39, 111, 124, 234, 94, 148, 121, 190, 180, 143, 200, 18, 120, 193, 16, 197, 68, 27, 106, 64, 2, 27, 181, 196, 80, 226, 231, 5, 25, 208, 200, 0, 84, 155, 28, 124, 204, 76, 214, 87, 49, 27, 170, 9, 172, 138, 192, 160, 228, 32, 39, 206, 5, 55, 14, 133, 138, 251, 210, 141, 124, 211, 199, 119, 51, 170, 145, 175, 7, 116, 94, 124, 182, 244, 237, 34, 164, 151, 76, 220, 157, 12, 146, 98, 169, 112, 223, 231, 35, 249, 194, 235, 202, 3, 157, 233, 107, 236, 208, 131, 45, 4, 190, 103, 106, 92, 184, 26, 26, 62, 135, 171, 43, 191, 158, 24, 199, 121, 41, 160, 146, 195, 138, 76, 23, 146, 75, 3, 175, 182, 144, 83, 91, 234, 63, 168, 178, 197, 156, 94, 252, 244, 234, 176, 125, 61, 227, 58, 188, 181, 74, 129, 76, 127, 237, 230, 249, 95, 56, 85, 46, 221, 196, 161, 185, 123, 171, 76, 8, 137, 173, 67, 184, 31, 174, 252, 23, 42, 213, 237, 81, 103, 50, 190, 137, 166, 98, 100, 12, 125, 182, 47, 32, 1, 100, 228, 48, 116, 88, 241, 163, 115, 87, 249, 87, 76, 97, 12, 95, 24, 173, 144, 148, 249, 200, 127, 22, 129, 69, 203, 250, 122, 234, 37, 74, 154, 119, 20, 105, 30, 90, 40, 248, 241, 42, 156, 64, 17, 169, 254, 121, 136, 105, 50, 88, 90, 181, 53, 17, 86, 45, 104, 61, 35, 13, 89, 173, 66, 157, 177, 184, 88, 78, 173, 97, 146, 188, 178, 69, 177, 24, 50, 113, 212, 221, 215, 41, 201, 201, 163, 24, 79, 37, 200, 32, 98, 181, 238, 67, 18, 80, 8, 74, 108, 6, 154, 144, 200, 244, 8, 123, 31, 152, 121, 203, 254, 247, 84, 237, 72, 116, 80, 98, 195, 213, 15, 144, 65, 158, 185, 117, 2, 163, 62, 194, 248, 198, 189, 188, 199, 25, 12, 118, 141, 85, 204, 224, 221, 208, 190, 248, 177, 7, 26, 20, 118, 107, 210, 179, 185, 147, 207, 236, 14, 193, 204, 252, 203, 146, 241, 74, 2, 14, 75, 254, 110, 156, 113, 72, 204, 103, 210, 30, 217, 161, 141, 160, 32, 151, 101, 214, 128, 113, 102, 157, 147, 145, 105, 46, 41, 239, 104, 16, 79, 167, 107, 254, 145, 229, 18, 160, 139, 167, 199, 245, 230, 45, 64, 254, 91, 164, 99, 88, 175, 182, 74, 21, 195, 163, 133, 152, 133, 155, 234, 236, 127, 226, 227, 82, 131, 229, 43, 102, 32, 65, 179, 42, 231, 252, 79, 139, 238, 2, 219, 134, 151, 111, 153, 108, 236, 170, 225, 213, 30, 99, 59, 241, 82, 236, 148, 183, 192, 117, 242, 226, 84, 20, 0, 163, 53, 224, 126, 54, 54, 223, 205, 32, 235, 156, 173, 185, 136, 253, 6, 96, 253, 87, 28, 146, 185, 34, 234, 83, 64, 88, 40, 21, 160, 55, 65, 76, 170, 253, 188, 73, 172, 248, 8, 15, 214, 120, 154, 139, 171, 208, 191, 119, 3, 222, 112, 158, 228, 174, 211, 198, 92, 178, 212, 194, 238, 171, 36, 110, 38, 194, 175, 140, 67, 35, 238, 198, 219, 184, 234, 84, 127, 135, 130, 208, 185, 163, 64, 105, 83, 152, 199, 238, 178, 238, 138, 57, 56, 131, 130, 244, 191, 181, 27, 63, 242, 131, 41, 82, 80, 43, 39, 140, 20, 126, 130, 42, 184, 54, 100, 204, 63, 146, 103, 216, 172, 159, 239, 48, 61, 67, 79, 35, 32, 7, 138, 10, 3, 115, 49, 1, 135, 241, 31, 58, 117, 28, 136, 130, 244, 136, 111, 136, 247, 87, 229, 233, 174, 38, 100, 209, 252, 24, 79, 165, 230, 27, 13, 92, 221, 64, 1, 95, 73, 145, 225, 6, 112, 102, 140, 177, 215, 38, 132, 215, 180, 51, 129, 63, 91, 253, 102, 128, 217, 124, 119, 182, 167, 120, 236, 44, 236, 111, 106, 143, 135, 160, 189, 64, 26, 167, 83, 41, 11, 76, 103, 64, 215, 206, 116, 198, 199, 10, 178, 162, 87, 231, 136, 28, 69, 51, 45, 154, 190, 198, 20, 144, 135, 55, 87, 82, 244, 220, 251, 204, 214, 112, 1, 94, 125, 60, 113, 54, 155, 134, 114, 134, 47, 135, 124, 44, 9, 238, 202, 8, 163, 58, 111, 23, 151, 180, 92, 18, 1, 194, 181, 35, 162, 218, 44, 56, 159, 217, 180, 73, 88, 72, 86, 25, 68, 22, 19, 52, 43, 91, 0, 219, 12, 250, 199, 238, 112, 23, 68, 13, 244, 27, 188, 188, 114, 6, 33, 29, 241, 222, 103, 173, 110, 102, 38, 153, 3, 233, 39, 121, 174, 71, 128, 60, 184, 126, 44, 65, 163, 157, 116, 22, 93, 176, 14, 7, 212, 202, 54, 25, 126, 8, 64, 73, 234, 139, 177, 254, 204, 229, 112, 183, 133, 104, 71, 213, 89, 148, 141, 121, 65, 52, 139, 224, 163, 248, 72, 68, 178, 40, 223, 139, 203, 41, 124, 206, 63, 44, 78, 55, 219, 84, 36, 158, 54, 221, 153, 53, 111, 111, 225, 19, 189, 194, 213, 222, 244, 39, 113, 123, 39, 131, 91, 187, 193, 27, 70, 168, 29, 7, 159, 241, 136, 105, 202, 81, 86, 135, 90, 227, 207, 55, 237, 179, 115, 93, 146, 23, 18, 68, 172, 43, 199, 191, 64, 135, 89, 253, 241, 77, 157, 202, 131, 181, 180, 61, 181, 76, 201, 38, 243, 137, 8, 132, 138, 131, 200, 167, 150, 138, 85, 62, 95, 206, 180, 108, 202, 237, 195, 173, 13, 115, 99, 176, 208, 4, 4, 40, 213, 12, 146, 104, 250, 125, 57, 120, 192, 142, 140, 69, 181, 64, 252, 245, 65, 15, 26, 180, 231, 88, 52, 44, 18, 77, 151, 177, 200, 216, 12, 19, 176, 196, 14, 18, 204, 52, 12, 144, 169, 38, 205, 161, 197, 65, 30, 226, 102, 214, 233, 189, 163, 166, 59, 174, 17, 158, 164, 218, 147, 99, 178, 38, 134, 175, 23, 240, 123, 220, 119, 43, 166, 44, 212, 160, 7, 82, 225, 89, 194, 98, 86, 98, 96, 68, 200, 21, 248, 39, 54, 227, 190, 106, 171, 13, 85, 26, 193, 246, 168, 13, 16, 114, 249, 252, 111, 152, 67, 59, 248, 216, 239, 184, 213, 9, 238, 139, 156, 46, 166, 159, 136, 26, 114, 219, 22, 165, 189, 110, 84, 115, 240, 196, 213, 136, 211, 22, 190, 144, 90, 34, 137, 46, 92, 123, 83, 216, 175, 62, 42, 163, 194, 77, 35, 106, 30, 238, 70, 212, 147, 54, 174, 15, 203, 220, 119, 167, 62, 11, 234, 54, 196, 175, 33, 30, 72, 203, 242, 210, 181, 54, 90, 130, 67, 167, 65, 61, 111, 236, 145, 200, 144, 234, 55, 98, 148, 229, 65, 16, 183, 61, 36, 95, 114, 213, 77, 231, 39, 86, 140, 148, 175, 9, 16, 35, 229, 193, 244, 103, 84, 255, 248, 84, 52, 46, 51, 94, 217, 4, 41, 142, 115, 115, 5, 67, 78, 147, 86, 141, 254, 197, 249, 141, 69, 108, 203, 84, 132, 242, 152, 24, 152, 55, 159, 155, 77, 193, 76, 41, 1, 238, 22, 178, 12, 192, 13, 118, 224, 136, 198, 127, 147, 200, 153, 245, 66, 178, 48, 135, 82, 93, 12, 61, 178, 39, 182, 95, 198, 119, 5, 53, 82, 65, 42, 26, 33, 14, 185, 117, 140, 204, 119, 179, 66, 215, 199, 95, 138, 248, 18, 198, 70, 2, 24, 164, 254, 152, 249, 75, 137, 178, 192, 248, 167, 76, 90, 81, 17, 156, 237, 213, 47, 103, 193, 157, 55, 123, 69, 102, 46, 50, 252, 171, 121, 171, 130, 28, 37, 148, 188, 198, 57, 51, 190, 95, 65, 59, 154, 11, 60, 17, 131, 239, 244, 151, 77, 231, 226, 154, 140, 0, 181, 10, 53, 210, 8, 81, 159, 165, 97, 26, 255, 86, 139, 50, 50, 1, 24, 171, 218, 189, 209, 205, 18, 65, 9, 134, 94, 118, 81, 172, 198, 189, 178, 36, 13, 138, 223, 83, 58, 32, 18, 2, 215, 254, 131, 185, 232, 16, 45, 234, 12, 72, 49, 215, 66, 147, 221, 183, 192, 38, 173, 126, 44, 205, 228, 49, 135, 250, 219, 108, 84, 21, 178, 88, 42, 68, 142, 78, 105, 138, 224, 169, 144, 11, 13, 37, 28, 163, 78, 155, 237, 92, 97, 211, 153, 150, 45, 220, 3, 45, 11, 254, 113, 142, 4, 63, 94, 221, 130, 214, 133, 73, 95, 240, 51, 199, 106, 196, 199, 16, 246, 142, 187, 170, 73, 67, 1, 90, 155, 29, 93, 93, 128, 6, 235, 197, 108, 121, 8, 129, 145, 101, 14, 228, 51, 157, 163, 136, 30, 20, 52, 26, 183, 83, 46, 134, 89, 97, 237, 38, 69, 168, 29, 215, 103, 249, 208, 224, 166, 195, 169, 150, 131, 113, 62, 157, 213, 244, 45, 155, 202, 81, 139, 202, 28, 209, 25, 101, 224, 12, 4, 125, 206, 234, 66, 138, 151, 129, 204, 61, 181, 158, 184, 13, 100, 29, 236, 248, 40, 1, 144, 142, 218, 166, 122, 94, 104, 136, 227, 185, 103, 202, 38, 87, 220, 103, 128, 228, 87, 189, 95, 148, 136, 236, 134, 182, 81, 51, 187, 130, 83, 206, 16, 160, 170, 177, 198, 89, 68, 231, 171, 86, 14, 5, 53, 29, 224, 113, 162, 121, 205, 23, 174, 96, 122, 157, 142, 41, 111, 247, 235, 64, 41, 198, 35, 240, 201, 93, 36, 114, 18, 32, 159, 106, 244, 157, 35, 201, 15, 91, 66, 218, 174, 6, 50, 45, 101, 71, 213, 125, 51, 20, 81, 243, 182, 38, 88, 52, 216, 27, 119, 54, 183, 82, 10, 44, 118, 5, 214, 157, 11, 161, 120, 75, 165, 9, 31, 108, 11, 167, 26, 151, 225, 154, 6, 135, 181, 98, 111, 217, 17, 211, 173, 9, 12, 152, 8, 46, 16, 130, 78, 115, 113, 235, 72, 2, 82, 200, 224, 65, 242, 67, 35, 207, 199, 189, 106, 156, 206, 211, 245, 115, 105, 47, 13, 198, 215, 239, 216, 239, 64, 96, 50, 255, 97, 8, 157, 246, 112, 118, 215, 51, 221, 0, 181, 135, 152, 161, 233, 35, 10, 56, 73, 129, 111, 98, 196, 60, 129, 193, 237, 114, 38, 117, 17, 59, 134, 175, 37, 74, 218, 57, 117, 144, 131, 203, 213, 40, 183, 146, 113, 52, 129, 224, 59, 52, 62, 68, 70, 225, 77, 63, 87, 113, 249, 58, 136, 145, 48, 192, 134, 234, 205, 233, 21, 111, 97, 227, 86, 240, 218, 244, 143, 251, 96, 254, 246, 155, 17, 101, 65, 56, 253, 6, 160, 147, 92, 121, 116, 255, 189, 86, 12, 181, 182, 160, 41, 26, 221, 38, 203, 224, 126, 158, 97, 23, 43, 226, 218, 121, 180, 41, 149, 110, 14, 97, 228, 88, 109, 128, 94, 41, 35, 5, 84, 226, 179, 100, 5, 246, 137, 39, 124, 120, 204, 69, 115, 217, 24, 6, 150, 175, 29, 229, 34, 240, 80, 68, 33, 0, 29, 154, 210, 169, 186, 80, 115, 136, 150, 71, 154, 28, 93, 155, 242, 4, 52, 173, 151, 89, 247, 199, 129, 4, 43, 65, 1, 51, 82, 18, 61, 11, 119, 248, 21, 177, 204, 20, 107, 61, 84, 147, 124, 71, 229, 18, 64, 186, 41, 100, 35, 133, 206, 148, 242, 241, 38, 235, 55, 121, 255, 70, 62, 178, 20, 167, 56, 248, 145, 218, 244, 39, 141, 86, 236, 194, 144, 203, 210, 192, 166, 165, 251, 131, 175, 212, 148, 106, 43, 16, 68, 183, 121, 232, 208, 163, 88, 123, 199, 69, 248, 255, 153, 45, 69, 25, 17, 126, 26, 10, 128, 242, 135, 108, 198, 5, 103, 127, 106, 201, 10, 52, 36, 13, 175, 118, 137, 53, 146, 38, 214, 228, 249, 105, 184, 109, 113, 11, 112, 47, 79, 235, 119, 230, 224, 7, 28, 216, 207, 182, 223, 2, 140, 177, 60, 229, 121, 203, 236, 225, 214, 255, 45, 65, 185, 39, 73, 122, 84, 125, 121, 194, 93, 1, 89, 51, 120, 202, 196, 89, 46, 75, 227, 219, 249, 68, 239, 29, 106, 156, 132, 148, 4, 71, 182, 139, 12, 74, 195, 65, 245, 140, 95, 56, 126, 29, 219, 109, 230, 181, 172, 144, 86, 154, 176, 128, 9, 178, 137, 160, 246, 195, 125, 230, 123, 217, 2, 53, 200, 96, 248, 6, 239, 196, 189, 77, 175, 236, 66, 209, 42, 232, 58, 119, 20, 30, 88, 73, 9, 110, 252, 147, 229, 53, 183, 38, 228, 145, 175, 65, 20, 203, 84, 227, 14, 91, 88, 132, 90, 5, 11, 250, 213, 143, 181, 98, 204, 105, 168, 112, 211, 119, 248, 23, 97, 161, 209, 243, 123, 74, 252, 83, 15, 214, 20, 163, 195, 217, 10, 44, 164, 113, 15, 64, 226, 15, 236, 11, 94, 185, 182, 182, 242, 133, 96, 44, 243, 41, 0, 98, 153, 94, 100, 19, 216, 39, 21, 0, 48, 153, 23, 71, 210, 194, 145, 114, 185, 178, 204, 70, 187, 3, 103, 137, 142, 32, 100, 154, 215, 0, 26, 231, 158, 151, 252, 230, 226, 150, 162, 161, 194, 56, 150, 176, 231, 15, 75, 180, 167, 129, 40, 241, 180, 12, 47, 41, 21, 166, 116, 132, 253, 149, 104, 212, 91, 221, 254, 251, 34, 148, 112, 39, 251, 133, 165, 187, 108, 2, 228, 230, 80, 31, 95, 15, 193, 177, 168, 191, 94, 97, 5, 215, 248, 97, 202, 113, 26, 187, 247, 36, 135, 103, 163, 7, 31, 99, 44, 195, 15, 232, 237, 94, 98, 185, 255, 99, 108, 75, 88, 52, 31, 150, 89, 221, 38, 88, 27, 130, 0, 91, 37, 157, 188, 61, 254, 93, 6, 4, 14, 168, 224, 93, 76, 65, 76, 28, 180, 131, 186, 119, 170, 162, 129, 56, 78, 39, 130, 119, 202, 62, 173, 66, 123, 80, 111, 59, 251, 233, 144, 78, 153, 36, 225, 122, 21, 237, 67, 38, 3, 159, 115, 39, 245, 188, 198, 36, 249, 194, 27, 110, 184, 255, 73, 236, 209, 111, 89, 122, 200, 126, 71, 21, 131, 157, 140, 157, 76, 66, 54, 51, 196, 42, 222, 120, 23, 145, 3, 144, 243, 103, 149, 219, 125, 255, 58, 220, 207, 10, 194, 10, 19, 93, 35, 144, 96, 49, 84, 21, 20, 132, 250, 229, 154, 214, 173, 251, 120, 214, 90, 53, 219, 55, 192, 209, 126, 150, 178, 226, 131, 194, 48, 88, 164, 251, 209, 63, 66, 121, 177, 59, 202, 142, 99, 240, 223, 218, 233, 172, 155, 221, 99, 123, 183, 159, 54, 128, 43, 97, 208, 51, 152, 44, 81, 243, 107, 17, 198, 149, 19, 77, 100, 97, 249, 223, 188, 158, 161, 124, 65, 130, 49, 33, 29, 63, 144, 113, 77, 219, 218, 189, 125, 185, 27, 82, 122, 43, 122, 233, 117, 148, 134, 125, 245, 72, 68, 197, 250, 36, 82, 255, 135, 166, 249, 200, 112, 148, 157, 164, 76, 165, 148, 64, 9, 75, 34, 64, 239, 254, 255, 138, 7, 224, 165, 136, 164, 229, 219, 167, 93, 192, 103, 65, 164, 194, 117, 57, 138, 252, 150, 163, 133, 8, 136, 164, 34, 176, 124, 218, 249, 96, 89, 85, 24, 134, 213, 120, 246, 208, 224, 71, 202, 123, 193, 201, 174, 35, 17, 53, 91, 76, 113, 26, 47, 199, 209, 106, 172, 123, 9, 233, 9, 55, 5, 242, 254, 193, 207, 117, 223, 54, 180, 229, 124, 250, 198, 21, 254, 226, 3, 79, 255, 231, 161, 20, 103, 66, 23, 10, 185, 59, 200, 189, 18, 5, 38, 141, 67, 218, 140, 220, 41, 227, 185, 3, 3, 64, 192, 247, 86, 225, 219, 93, 143, 89, 150, 167, 160, 196, 149, 132, 89, 123, 141, 183, 119, 255, 53, 177, 7, 143, 15, 179, 188, 58, 149, 146, 77, 113, 215, 185, 252, 127, 9, 9, 83, 57, 165, 187, 122, 215, 99, 176, 179, 115, 4, 156, 109, 55, 255, 42, 41, 87, 62, 205, 119, 16, 123, 41, 206, 90, 151, 181, 66, 125, 171, 160, 173, 190, 31, 225, 175, 146, 74, 217, 51, 78, 75, 24, 40, 67, 79, 22, 139, 230, 77, 253, 173, 43, 133, 93, 51, 206, 14, 135, 3, 78, 129, 20, 191, 103, 180, 169, 78, 35, 113, 189, 122, 31, 174, 175, 168, 105, 126, 137, 110, 108, 47, 91, 19, 162, 153, 208, 209, 96, 27, 43, 181, 51, 89, 218, 6, 188, 102, 7, 254, 87, 131, 199, 4, 93, 235, 1, 236, 175, 222, 206, 65, 46, 164, 57, 8, 3, 165, 205, 40, 19, 89, 27, 127, 44, 52, 96, 93, 248, 125, 232, 226, 179, 36, 43, 28, 122, 56, 215, 196, 138, 229, 193, 169, 234, 160, 141, 208, 111, 148, 191, 169, 156, 60, 165, 62, 6, 84, 128, 209, 22, 163, 86, 191, 243, 141, 185, 126, 202, 67, 172, 175, 28, 131, 164, 164, 151, 59, 88, 94, 251, 64, 31, 198, 173, 233, 229, 216, 14, 222, 156, 156, 126, 251, 200, 102, 29, 58, 178, 16, 32, 55, 180, 106, 191, 7, 234, 111, 219, 86, 178, 59, 141, 225, 192, 2, 141, 27, 202, 61, 7, 100, 8, 99, 6, 197, 189, 146, 110, 111, 19, 5, 79, 152, 237, 209, 211, 223, 159, 86, 113, 183, 82, 103, 121, 132, 102, 116, 198, 177, 54, 77, 111, 252, 246, 140, 123, 247, 83, 175, 227, 221, 179, 152, 204, 85, 55, 118, 230, 208, 47, 152, 146, 136, 38, 139, 189, 196, 69, 224, 190, 175, 38, 255, 103, 130, 92, 161, 244, 109, 13, 15, 118, 55, 230, 87, 203, 158, 152, 67, 16, 80, 195, 52, 105, 138, 64, 22, 82, 119, 248, 247, 109, 83, 151, 96, 165, 91, 0, 142, 28, 143, 140, 16, 16, 128, 75, 199, 124, 30, 26, 197, 97, 15, 128, 223, 121, 90, 154, 137, 93, 107, 241, 45, 124, 28, 153, 69, 222, 2, 217, 177, 219, 153, 63, 174, 30, 117, 139, 86, 159, 1, 7, 11, 92, 49, 157, 109, 70, 23, 251, 173, 162, 137, 204, 149, 171, 102, 153, 208, 154, 236, 152, 36, 196, 93, 110, 4, 193, 199, 203, 41, 237, 246, 100, 91, 14, 1, 74, 174, 237, 124, 133, 84, 252, 173, 128, 237, 98, 91, 241, 239, 249, 102, 134, 3, 28, 31, 181, 210, 137, 7, 204, 46, 17, 64, 219, 102, 225, 144, 232, 140, 152, 227, 246, 115, 244, 223, 2, 157, 39, 27, 96, 10, 79, 36, 69, 229, 103, 37, 134, 190, 137, 105, 63, 241, 184, 201, 65, 86, 70, 85, 201, 39, 104, 58, 205, 147, 163, 160, 178, 162, 249, 81, 217, 225, 71, 121, 54, 170, 21, 65, 64, 230, 119, 157, 4, 243, 179, 248, 15, 67, 215, 236, 7, 248, 51, 39, 199, 123, 73, 2, 96, 169, 197, 138, 224, 210, 109, 172, 163, 132, 75, 132, 61, 174, 195, 73, 183, 146, 211, 163, 30, 228, 233, 167, 142, 155, 210, 43, 8, 226, 90, 0, 199], - [102, 220, 95, 79, 236, 245, 246, 85, 218, 140, 246, 165, 188, 229, 246, 0, 60, 216, 175, 37, 193, 151, 24, 177, 99, 198, 227, 61, 235, 39, 0, 155, 213, 41, 85, 25, 96, 87, 178, 122, 121, 73, 66, 129, 2, 12, 149, 34, 222, 108, 104, 226, 214, 1, 18, 40, 214, 89, 98, 9, 39, 6, 248, 66, 154, 94, 173, 153, 168, 95, 44, 186, 99, 147, 221, 71, 19, 28, 241, 20, 74, 172, 202, 249, 54, 192, 162, 209, 57, 46, 156, 82, 170, 222, 27, 53, 250, 35, 200, 166, 47, 6, 43, 47, 90, 87, 49, 67, 122, 40, 192, 42, 11, 116, 65, 22, 209, 195, 110, 152, 235, 150, 233, 23, 134, 43, 230, 70, 219, 148, 145, 166, 174, 209, 79, 78, 202, 119, 125, 209, 198, 110, 176, 225, 23, 88, 126, 220, 250, 23, 239, 159, 175, 112, 209, 216, 45, 34, 241, 53, 144, 171, 181, 31, 175, 84, 46, 127, 15, 166, 143, 6, 66, 34, 41, 204, 213, 0, 230, 84, 145, 55, 0, 27, 86, 123, 78, 248, 249, 127, 228, 51, 114, 38, 172, 196, 171, 64, 233, 236, 140, 199, 143, 165, 148, 233, 161, 228, 194, 93, 37, 150, 0, 179, 147, 52, 32, 55, 105, 49, 243, 201, 31, 199, 40, 35, 221, 252, 167, 182, 240, 221, 31, 69, 235, 222, 45, 24, 44, 196, 216, 254, 28, 77, 247, 23, 42, 253, 31, 239, 122, 183, 96, 61, 220, 53, 67, 18, 1, 132, 47, 247, 120, 49, 163, 79, 46, 209, 81, 22, 34, 29, 167, 87, 77, 56, 126, 28, 29, 249, 63, 179, 177, 96, 93, 159, 166, 98, 176, 74, 102, 253, 248, 26, 124, 33, 127, 100, 134, 113, 141, 223, 0, 119, 129, 179, 17, 143, 23, 233, 211, 91, 161, 97, 13, 223, 230, 174, 187, 8, 96, 233, 147, 68, 102, 113, 254, 222, 105, 243, 238, 2, 185, 226, 17, 170, 19, 194, 57, 79, 192, 62, 158, 77, 48, 177, 92, 22, 80, 95, 224, 152, 95, 3, 150, 248, 152, 246, 233, 214, 82, 89, 246, 215, 138, 100, 176, 120, 146, 35, 179, 60, 75, 183, 117, 207, 54, 26, 130, 234, 18, 190, 47, 172, 79, 243, 183, 98, 220, 137, 162, 43, 124, 45, 36, 136, 135, 125, 74, 180, 27, 147, 167, 5, 72, 239, 94, 105, 80, 61, 255, 92, 139, 235, 211, 36, 27, 147, 220, 119, 195, 147, 28, 99, 191, 234, 40, 9, 157, 59, 58, 91, 239, 131, 25, 11, 125, 68, 14, 67, 116, 203, 30, 10, 234, 107, 127, 138, 90, 27, 218, 78, 208, 143, 120, 199, 226, 76, 25, 178, 116, 159, 191, 241, 17, 126, 56, 125, 181, 242, 149, 28, 70, 55, 155, 216, 10, 175, 65, 8, 14, 161, 248, 40, 100, 150, 161, 225, 185, 11, 22, 57, 141, 195, 183, 200, 194, 104, 107, 208, 111, 3, 83, 254, 40, 154, 69, 161, 24, 0, 123, 81, 237, 253, 37, 165, 90, 33, 170, 45, 67, 81, 106, 150, 11, 25, 130, 103, 225, 242, 17, 173, 42, 46, 162, 156, 138, 25, 73, 153, 239, 130, 17, 137, 107, 239, 199, 143, 212, 135, 208, 155, 255, 195, 180, 117, 227, 19, 49, 116, 182, 11, 61, 191, 218, 38, 234, 13, 235, 46, 248, 226, 244, 62, 18, 8, 111, 68, 224, 153, 83, 165, 68, 212, 107, 144, 18, 6, 82, 224, 231, 60, 216, 132, 100, 16, 242, 217, 71, 42, 52, 165, 216, 37, 55, 103, 23, 170, 194, 204, 167, 176, 96, 252, 202, 58, 102, 72, 7, 211, 210, 32, 112, 212, 106, 15, 113, 14, 143, 76, 113, 122, 218, 128, 231, 203, 190, 164, 228, 251, 166, 35, 206, 41, 120, 45, 144, 251, 129, 169, 174, 254, 136, 136, 0, 91, 139, 89, 184, 221, 160, 177, 41, 7, 233, 77, 50, 158, 158, 133, 246, 207, 23, 58, 188, 49, 88, 235, 228, 38, 61, 225, 135, 51, 230, 207, 136, 44, 148, 105, 178, 128, 183, 245, 145, 93, 174, 11, 235, 59, 22, 80, 93, 136, 214, 159, 102, 225, 38, 60, 69, 208, 158, 131, 112, 19, 209, 253, 167, 201, 176, 246, 74, 114, 246, 194, 235, 106, 233, 248, 220, 53, 93, 175, 104, 213, 165, 173, 117, 124, 48, 173, 243, 185, 172, 195, 175, 70, 158, 108, 92, 115, 85, 173, 144, 7, 229, 119, 207, 113, 92, 131, 2, 79, 201, 47, 49, 46, 88, 69, 58, 207, 71, 153, 233, 252, 31, 142, 95, 26, 134, 136, 229, 211, 102, 103, 57, 20, 160, 149, 156, 106, 153, 53, 141, 180, 9, 189, 35, 29, 109, 211, 179, 70, 134, 138, 255, 129, 60, 208, 210, 13, 50, 164, 30, 219, 231, 5, 82, 162, 51, 104, 43, 77, 75, 81, 172, 198, 60, 150, 124, 137, 58, 208, 2, 72, 4, 98, 158, 166, 83, 169, 93, 214, 177, 133, 155, 241, 250, 237, 81, 49, 89, 125, 38, 72, 239, 65, 183, 128, 177, 119, 237, 34, 60, 132, 61, 238, 84, 15, 133, 82, 115, 169, 127, 116, 64, 94, 149, 77, 196, 157, 183, 147, 37, 214, 149, 81, 125, 158, 233, 74, 136, 8, 99, 244, 175, 165, 156, 168, 174, 32, 251, 54, 33, 167, 74, 207, 223, 47, 204, 194, 30, 205, 76, 83, 193, 166, 138, 46, 38, 66, 146, 120, 205, 47, 124, 160, 229, 56, 68, 190, 134, 49, 90, 73, 52, 174, 87, 195, 225, 158, 216, 209, 253, 133, 25, 3, 75, 198, 34, 145, 98, 69, 212, 10, 143, 17, 12, 190, 217, 182, 105, 35, 178, 182, 210, 248, 224, 217, 34, 30, 186, 57, 8, 125, 216, 246, 122, 182, 175, 105, 126, 17, 180, 145, 238, 195, 228, 68, 192, 96, 159, 37, 22, 229, 156, 32, 231, 78, 140, 34, 144, 122, 121, 76, 3, 217, 148, 13, 159, 194, 153, 167, 75, 163, 239, 85, 33, 136, 23, 171, 206, 95, 191, 124, 152, 170, 199, 77, 249, 21, 165, 252, 250, 122, 163, 42, 208, 0, 217, 246, 175, 181, 137, 129, 200, 191, 1, 111, 199, 72, 3, 17, 252, 19, 180, 178, 35, 60, 62, 165, 88, 14, 116, 50, 65, 211, 124, 52, 222, 191, 145, 157, 29, 224, 22, 134, 88, 67, 211, 192, 8, 53, 205, 130, 54, 110, 175, 69, 183, 138, 200, 101, 104, 50, 94, 84, 3, 11, 24, 51, 110, 228, 158, 160, 250, 188, 197, 146, 180, 56, 2, 20, 183, 137, 73, 178, 211, 41, 244, 13, 214, 19, 251, 40, 176, 141, 154, 46, 46, 99, 53, 131, 131, 187, 60, 106, 111, 78, 74, 149, 149, 106, 84, 2, 60, 27, 124, 222, 9, 66, 113, 246, 163, 50, 2, 118, 132, 127, 182, 187, 214, 179, 50, 229, 188, 254, 70, 185, 33, 251, 165, 82, 229, 228, 24, 226, 10, 93, 51, 152, 21, 89, 245, 160, 30, 246, 146, 12, 85, 162, 112, 60, 119, 88, 85, 21, 66, 51, 97, 224, 69, 18, 122, 207, 22, 189, 105, 251, 217, 80, 32, 252, 93, 72, 206, 96, 142, 173, 235, 124, 127, 70, 158, 116, 27, 21, 72, 33, 47, 63, 246, 252, 94, 71, 5, 151, 111, 139, 163, 57, 247, 234, 185, 172, 134, 137, 120, 147, 200, 163, 41, 99, 50, 146, 181, 179, 147, 132, 35, 121, 99, 228, 72, 214, 39, 20, 178, 37, 5, 222, 13, 144, 114, 192, 78, 189, 91, 162, 224, 191, 112, 146, 216, 148, 125, 8, 248, 150, 187, 184, 23, 16, 150, 0, 72, 98, 44, 156, 168, 56, 138, 185, 155, 106, 235, 208, 133, 94, 150, 119, 103, 249, 248, 33, 110, 223, 195, 253, 49, 232, 161, 44, 108, 229, 83, 230, 81, 17, 185, 46, 162, 26, 113, 164, 21, 65, 33, 246, 150, 47, 31, 227, 8, 65, 217, 235, 102, 252, 105, 45, 144, 34, 106, 56, 170, 140, 47, 22, 80, 248, 109, 147, 30, 71, 29, 164, 188, 217, 160, 60, 26, 154, 72, 169, 121, 217, 229, 163, 221, 246, 224, 83, 205, 40, 237, 101, 197, 34, 233, 149, 35, 244, 71, 12, 243, 16, 63, 0, 204, 129, 188, 60, 168, 240, 201, 219, 153, 190, 157, 142, 183, 104, 65, 88, 76, 51, 167, 39, 55, 2, 242, 23, 96, 72, 233, 50, 228, 41, 199, 78, 18, 101, 202, 150, 174, 40, 132, 174, 203, 249, 200, 40, 169, 20, 100, 190, 8, 175, 247, 248, 21, 12, 22, 192, 51, 127, 203, 59, 164, 159, 78, 83, 220, 74, 16, 157, 38, 2, 6, 181, 149, 23, 124, 1, 107, 189, 214, 111, 101, 219, 242, 39, 69, 206, 104, 233, 15, 167, 3, 105, 109, 85, 107, 36, 47, 209, 201, 211, 24, 177, 144, 34, 45, 90, 81, 98, 186, 166, 113, 226, 133, 167, 99, 150, 64, 230, 195, 251, 94, 88, 92, 112, 94, 56, 25, 202, 75, 109, 32, 178, 19, 96, 5, 190, 244, 138, 192, 58, 6, 23, 237, 81, 68, 21, 2, 27, 243, 0, 78, 212, 104, 81, 109, 98, 137, 67, 124, 139, 7, 61, 26, 179, 239, 99, 12, 50, 55, 121, 133, 242, 100, 51, 69, 54, 254, 229, 111, 27, 44, 45, 119, 234, 194, 57, 117, 82, 6, 21, 87, 108, 65, 39, 122, 100, 15, 121, 224, 210, 199, 163, 176, 85, 42, 108, 65, 90, 191, 241, 186, 185, 10, 191, 40, 17, 154, 216, 234, 45, 176, 133, 3, 3, 198, 169, 50, 109, 128, 94, 255, 97, 144, 175, 137, 71, 234, 124, 225, 253, 115, 114, 13, 142, 49, 12, 46, 163, 253, 118, 161, 118, 70, 30, 239, 213, 251, 44, 198, 103, 192, 234, 155, 160, 162, 231, 53, 72, 67, 210, 217, 62, 15, 18, 160, 108, 106, 93, 18, 174, 191, 210, 224, 179, 20, 222, 194, 178, 94, 246, 48, 22, 202, 69, 103, 35, 103, 87, 168, 10, 166, 247, 47, 12, 123, 136, 158, 2, 12, 62, 102, 123, 216, 212, 188, 146, 2, 2, 161, 138, 137, 234, 75, 88, 54, 41, 77, 243, 115, 102, 88, 126, 136, 223, 206, 222, 51, 46, 139, 107, 221, 5, 228, 56, 22, 72, 55, 16, 66, 253, 159, 188, 102, 32, 129, 176, 46, 55, 0, 53, 45, 73, 223, 18, 72, 8, 249, 176, 176, 3, 97, 87, 154, 160, 200, 15, 193, 125, 13, 146, 2, 130, 160, 25, 193, 14, 139, 235, 244, 177, 136, 253, 150, 117, 83, 190, 26, 97, 146, 9, 249, 215, 197, 99, 68, 239, 92, 249, 102, 30, 176, 39, 171, 142, 8, 129, 121, 245, 179, 224, 53, 177, 232, 170, 195, 181, 146, 95, 51, 128, 96, 109, 193, 226, 57, 165, 150, 155, 147, 59, 177, 53, 44, 151, 16, 227, 144, 178, 190, 243, 245, 144, 30, 198, 82, 236, 19, 101, 25, 41, 199, 39, 79, 242, 242, 60, 136, 165, 237, 122, 144, 8, 249, 131, 128, 36, 154, 172, 52, 206, 217, 3, 58, 162, 166, 4, 104, 213, 23, 151, 77, 154, 61, 61, 125, 56, 185, 238, 57, 125, 254, 78, 241, 213, 61, 255, 97, 107, 201, 177, 84, 133, 232, 206, 198, 155, 148, 34, 167, 231, 74, 83, 116, 142, 29, 44, 228, 132, 8, 29, 13, 136, 182, 162, 118, 148, 163, 63, 69, 67, 159, 126, 88, 244, 184, 217, 50, 143, 167, 226, 107, 238, 170, 243, 165, 83, 122, 88, 63, 238, 147, 62, 175, 155, 42, 1, 204, 94, 253, 84, 148, 35, 76, 154, 101, 165, 116, 170, 203, 216, 198, 44, 85, 82, 78, 16, 248, 214, 34, 148, 107, 202, 89, 244, 100, 45, 38, 7, 91, 100, 93, 124, 76, 125, 32, 186, 176, 189, 53, 47, 201, 17, 157, 58, 192, 55, 182, 238, 162, 152, 64, 138, 22, 214, 200, 5, 226, 95, 141, 123, 159, 85, 105, 195, 222, 117, 120, 3, 34, 20, 70, 229, 238, 118, 167, 79, 78, 48, 40, 236, 233, 69, 215, 47, 40, 188, 228, 246, 27, 236, 88, 117, 33, 174, 197, 234, 10, 49, 61, 38, 221, 44, 121, 65, 117, 33, 93, 235, 88, 122, 244, 226, 199, 53, 152, 105, 92, 244, 123, 92, 208, 119, 10, 59, 155, 65, 252, 229, 98, 217, 218, 72, 122, 223, 224, 171, 252, 163, 153, 199, 36, 202, 130, 216, 171, 217, 166, 122, 52, 184, 1, 174, 3, 178, 201, 94, 167, 154, 50, 226, 191, 109, 172, 170, 188, 7, 207, 170, 44, 247, 238, 2, 82, 226, 130, 216, 119, 203, 163, 76, 36, 242, 81, 5, 245, 142, 5, 30, 38, 57, 13, 162, 27, 48, 246, 20, 212, 170, 65, 162, 156, 27, 93, 55, 223, 237, 148, 79, 226, 202, 80, 97, 102, 144, 223, 5, 1, 15, 77, 121, 35, 69, 62, 177, 10, 103, 134, 31, 14, 142, 255, 65, 13, 228, 161, 117, 237, 76, 165, 219, 31, 47, 7, 144, 55, 72, 132, 39, 16, 108, 23, 157, 155, 71, 166, 90, 127, 118, 103, 40, 40, 167, 87, 64, 216, 96, 117, 166, 219, 50, 80, 175, 173, 226, 125, 217, 88, 248, 85, 126, 97, 127, 93, 116, 194, 83, 85, 21, 243, 120, 38, 110, 216, 214, 110, 23, 110, 101, 92, 218, 138, 113, 165, 69, 14, 115, 71, 90, 78, 198, 147, 253, 50, 67, 51, 103, 141, 32, 88, 84, 66, 40, 150, 211, 21, 97, 18, 160, 13, 119, 96, 161, 135, 118, 167, 141, 190, 87, 247, 213, 11, 36, 145, 105, 251, 151, 217, 51, 101, 245, 213, 47, 214, 44, 33, 127, 101, 106, 103, 68, 239, 182, 96, 172, 168, 5, 108, 231, 48, 202, 106, 170, 6, 43, 117, 246, 33, 73, 48, 213, 51, 22, 49, 45, 36, 182, 133, 32, 198, 252, 44, 86, 90, 17, 88, 51, 15, 253, 252, 109, 126, 130, 172, 246, 160, 189, 241, 37, 72, 25, 158, 139, 121, 128, 22, 222, 64, 88, 35, 232, 43, 211, 57, 162, 145, 143, 162, 130, 151, 220, 144, 235, 23, 245, 229, 202, 70, 233, 38, 216, 66, 100, 20, 129, 111, 237, 69, 222, 64, 91, 133, 253, 60, 63, 64, 82, 164, 244, 189, 19, 74, 237, 12, 68, 46, 97, 130, 185, 211, 20, 158, 154, 16, 224, 131, 210, 151, 60, 69, 48, 31, 193, 200, 157, 37, 146, 174, 127, 224, 147, 29, 72, 251, 0, 35, 86, 139, 170, 205, 47, 168, 177, 14, 237, 137, 222, 148, 223, 58, 59, 138, 175, 5, 164, 73, 52, 191, 80, 246, 98, 121, 216, 196, 129, 15, 235, 215, 216, 60, 104, 150, 55, 190, 43, 218, 60, 173, 226, 153, 229, 169, 131, 197, 98, 112, 20, 245, 147, 50, 42, 58, 135, 178, 40, 248, 225, 237, 40, 134, 188, 137, 122, 4, 203, 175, 122, 5, 148, 245, 84, 217, 68, 72, 5, 175, 33, 137, 214, 238, 28, 32, 253, 141, 97, 125, 110, 72, 231, 233, 118, 215, 243, 22, 85, 133, 103, 191, 115, 43, 203, 84, 47, 137, 212, 35, 53, 150, 254, 43, 7, 228, 54, 224, 61, 102, 9, 152, 68, 58, 17, 131, 111, 90, 47, 48, 129, 201, 122, 244, 175, 225, 94, 85, 116, 50, 7, 203, 19, 35, 183, 255, 96, 28, 227, 125, 135, 18, 27, 174, 156, 172, 110, 222, 244, 235, 2, 247, 13, 128, 122, 38, 194, 132, 123, 40, 131, 76, 224, 100, 183, 156, 37, 229, 174, 71, 149, 1, 114, 68, 92, 37, 100, 217, 137, 201, 179, 119, 27, 65, 20, 183, 142, 123, 198, 204, 128, 65, 195, 214, 180, 56, 38, 219, 104, 210, 181, 252, 137, 139, 217, 183, 22, 180, 93, 22, 148, 61, 108, 225, 195, 57, 36, 111, 231, 127, 184, 194, 122, 103, 236, 43, 226, 166, 82, 241, 207, 90, 91, 219, 76, 86, 16, 93, 91, 184, 240, 168, 116, 206, 71, 36, 127, 250, 184, 87, 243, 167, 73, 94, 34, 141, 2, 44, 71, 29, 193, 185, 42, 12, 167, 47, 152, 123, 101, 122, 245, 38, 152, 39, 131, 166, 51, 54, 237, 236, 167, 144, 106, 15, 160, 59, 28, 47, 229, 6, 198, 225, 157, 214, 187, 53, 171, 213, 199, 170, 174, 45, 92, 35, 249, 81, 214, 142, 143, 156, 246, 13, 2, 84, 27, 221, 95, 228, 198, 145, 203, 185, 160, 155, 174, 20, 246, 20, 193, 48, 110, 177, 104, 185, 220, 212, 91, 129, 110, 223, 144, 153, 90, 57, 201, 51, 162, 69, 90, 102, 50, 45, 27, 246, 6, 255, 13, 248, 140, 85, 78, 137, 127, 168, 169, 6, 44, 208, 216, 112, 159, 5, 218, 50, 7, 99, 27, 206, 17, 100, 251, 47, 185, 231, 59, 8, 225, 117, 113, 30, 224, 234, 89, 61, 103, 171, 251, 166, 183, 239, 221, 72, 47, 199, 228, 246, 239, 20, 77, 152, 66, 148, 89, 90, 179, 147, 237, 246, 197, 205, 82, 123, 214, 195, 234, 31, 11, 61, 66, 236, 218, 146, 176, 141, 225, 103, 29, 199, 185, 42, 89, 115, 84, 42, 90, 238, 93, 120, 5, 218, 25, 86, 61, 249, 217, 78, 185, 41, 143, 68, 8, 26, 176, 146, 121, 109, 173, 154, 67, 0, 216, 27, 116, 192, 78, 143, 48, 96, 89, 215, 53, 158, 183, 10, 181, 121, 115, 35, 107, 245, 192, 80, 87, 19, 148, 218, 232, 72, 95, 93, 138, 136, 9, 213, 50, 142, 118, 225, 161, 103, 199, 252, 116, 166, 164, 29, 223, 254, 37, 178, 253, 213, 146, 182, 83, 40, 87, 184, 7, 4, 13, 229, 134, 238, 160, 159, 37, 200, 144, 95, 124, 116, 9, 55, 47, 190, 41, 132, 51, 174, 209, 150, 237, 1, 233, 134, 227, 197, 153, 144, 15, 212, 67, 196, 109, 69, 163, 3, 37, 23, 133, 206, 103, 3, 27, 105, 111, 48, 209, 136, 16, 182, 193, 67, 19, 126, 2, 3, 176, 1, 5, 141, 100, 51, 172, 88, 190, 42, 128, 36, 12, 154, 69, 247, 95, 39, 233, 183, 9, 193, 28, 47, 6, 197, 218, 183, 228, 13, 72, 140, 151, 214, 184, 165, 200, 32, 49, 156, 10, 196, 99, 68, 58, 218, 161, 202, 36, 215, 227, 71, 126, 129, 96, 132, 81, 24, 79, 137, 210, 21, 187, 132, 160, 25, 90, 11, 13, 223, 28, 55, 99, 7, 249, 55, 115, 84, 213, 41, 4, 41, 49, 65, 217, 252, 239, 8, 18, 164, 72, 216, 225, 109, 252, 99, 94, 131, 22, 86, 11, 54, 226, 247, 192, 29, 134, 227, 100, 179, 250, 40, 150, 66, 158, 14, 99, 164, 245, 113, 8, 218, 169, 111, 45, 21, 172, 62, 71, 88, 52, 139, 170, 155, 96, 191, 148, 201, 191, 0, 164, 141, 68, 105, 244, 93, 108, 125, 141, 57, 93, 119, 129, 2, 61, 67, 81, 183, 170, 14, 61, 162, 178, 34, 173, 74, 107, 149, 212, 119, 223, 68, 215, 227, 190, 59, 13, 171, 21, 231, 78, 239, 169, 2, 223, 249, 11, 101, 28, 71, 234, 252, 61, 20, 227, 53, 166, 255, 206, 246, 89, 27, 171, 128, 42, 224, 131, 255, 172, 240, 14, 168, 108, 197, 253, 19, 221, 179, 61, 74, 193, 197, 3, 194, 242, 85, 217, 72, 202, 240, 18, 38, 211, 171, 76, 26, 165, 224, 240, 51, 2, 103, 169, 161, 15, 67, 47, 78, 226, 180, 58, 248, 46, 234, 61, 35, 74, 103, 232, 217, 5, 146, 61, 101, 151, 125, 156, 40, 201, 16, 106, 16, 33, 193, 251, 33, 10, 255, 157, 179, 133, 205, 218, 65, 136, 133, 98, 250, 114, 145, 85, 212, 8, 235, 159, 201, 42, 171, 79, 182, 11, 166, 166, 229, 154, 229, 167, 255, 109, 82, 80, 18, 236, 16, 96, 176, 143, 240, 194, 233, 19, 96, 72, 190, 41, 239, 65, 127, 137, 48, 135, 1, 82, 64, 116, 39, 95, 251, 16, 64, 88, 72, 121, 145, 163, 51, 222, 66, 116, 240, 135, 14, 141, 101, 121, 69, 50, 185, 12, 95, 19, 206, 81, 203, 65, 148, 65, 99, 46, 145, 112, 8, 136, 190, 242, 201, 189, 230, 200, 129, 90, 76, 111, 201, 188, 62, 173, 17, 121, 77, 15, 72, 41, 248, 30, 93, 177, 208, 131, 90, 184, 241, 147, 226, 53, 236, 46, 127, 192, 170, 91, 64, 27, 185, 16, 151, 221, 67, 201, 182, 182, 122, 118, 160, 60, 220, 97, 208, 133, 211, 63, 221, 9, 178, 194, 53, 10, 252, 57, 188, 229, 200, 250, 161, 128, 145, 69, 236, 190, 249, 133, 81, 228, 77, 236, 49, 233, 200, 205, 209, 56, 99, 190, 42, 46, 245, 253, 23, 66, 180, 181, 236, 85, 221, 152, 135, 30, 254, 34, 17, 133, 173, 56, 167, 230, 198, 105, 219, 183, 144, 156, 164, 228, 49, 108, 144, 30, 94, 100, 146, 61, 120, 169, 146, 70, 11, 138, 71, 31, 23, 216, 249, 118, 215, 229, 155, 114, 121, 48, 157, 66, 104, 16, 82, 152, 147, 38, 68, 68, 175, 54, 139, 104, 25, 48, 31, 241, 146, 137, 200, 59, 54, 161, 15, 23, 46, 136, 82, 212, 125, 146, 167, 29, 1, 82, 162, 127, 245, 144, 58, 132, 82, 245, 131, 180, 94, 88, 77, 0, 227, 6, 85, 202, 5, 20, 70, 208, 69, 201, 88, 46, 49, 67, 219, 167, 194, 193, 238, 36, 209, 193, 125, 121, 222, 117, 57, 19, 133, 62, 103, 224, 105, 175, 13, 75, 205, 188, 247, 201, 152, 133, 240, 19, 125, 232, 244, 104, 5, 237, 53, 145, 217, 194, 83, 89, 111, 201, 108, 159, 246, 204, 218, 145, 149, 162, 122, 16, 155, 163, 238, 170, 168, 107, 84, 96, 208, 185, 10, 97, 121, 151, 240, 121, 88, 226, 35, 29, 62, 121, 47, 118, 49, 14, 216, 99, 52, 11, 231, 226, 144, 151, 247, 212, 159, 81, 208, 19, 198, 20, 128, 201, 166, 34, 244, 42, 77, 119, 114, 62, 80, 190, 20, 177, 230, 243, 214, 204, 195, 218, 26, 68, 125, 21, 224, 240, 207, 85, 65, 151, 93, 213, 37, 130, 101, 0, 155, 94, 10, 78, 178, 148, 150, 3, 217, 24, 3, 217, 204, 4, 81, 75, 4, 147, 104, 44, 104, 40, 112, 182, 117, 81, 94, 169, 68, 159, 102, 233, 107, 187, 115, 179, 189, 90, 126, 240, 172, 66, 186, 146, 164, 136, 188, 88, 182, 137, 12, 200, 194, 137, 28, 36, 249, 198, 142, 183, 172, 47, 28, 138, 50, 20, 200, 151, 160, 254, 242, 62, 209, 188, 68, 28, 206, 128, 113, 196, 51, 26, 49, 137, 73, 156, 3, 215, 65, 35, 175, 57, 191, 177, 55, 60, 35, 44, 230, 16, 239, 254, 241, 133, 247, 18, 173, 120, 211, 99, 121, 128, 239, 201, 218, 213, 215, 107, 178, 97, 46, 182, 97, 214, 220, 210, 36, 14, 145, 8, 139, 59, 41, 215, 45, 1, 113, 36, 98, 140, 96, 126, 250, 20, 198, 148, 25, 250, 106, 155, 208, 38, 103, 205, 200, 27, 250, 68, 1, 43, 21, 216, 87, 193, 127, 214, 106, 183, 122, 100, 27, 33, 88, 157, 167, 207, 102, 183, 197, 47, 10, 206, 253, 9, 235, 104, 212, 72, 171, 147, 148, 48, 181, 161, 159, 210, 158, 241, 27, 195, 46, 43, 228, 131, 88, 98, 55, 84, 42, 40, 179, 166, 96, 131, 0, 219, 157, 213, 220, 213, 131, 145, 195, 205, 76, 84, 212, 186, 194, 234, 205, 212, 108, 106, 196, 12, 66, 25, 161, 194, 227, 139, 234, 15, 94, 182, 119, 134, 20, 78, 245, 78, 97, 219, 189, 165, 104, 154, 255, 223, 248, 220, 37, 7, 127, 24, 119, 0, 12, 35, 124, 108, 211, 231, 208, 136, 96, 38, 9, 225, 152, 29, 196, 120, 11, 169, 45, 94, 208, 190, 180, 183, 217, 49, 201, 64, 45, 77, 181, 249, 118, 114, 31, 228, 137, 128, 224, 119, 255, 210, 248, 193, 246, 72, 76, 239, 217, 248, 181, 90, 125, 6, 175, 2, 56, 47, 11, 203, 201, 110, 41, 77, 19, 148, 8, 59, 212, 138, 64, 95, 50, 197, 92, 168, 242, 29, 172, 183, 200, 22, 145, 43, 144, 65, 181, 101, 100, 59, 94, 90, 35, 0, 45, 96, 109, 85, 66, 4, 20, 141, 40, 91, 78, 29, 227, 207, 4, 16, 14, 191, 101, 62, 202, 107, 250, 55, 196, 19, 28, 147, 225, 78, 68, 220, 120, 78, 126, 90, 32, 24, 138, 124, 129, 212, 175, 105, 31, 81, 152, 199, 174, 103, 187, 197, 124, 131, 245, 199, 26, 163, 22, 74, 207, 49, 170, 180, 90, 13, 146, 174, 163, 117, 22, 79, 71, 166, 33, 56, 20, 218, 214, 184, 79, 153, 219, 33, 39, 22, 58, 54, 129, 229, 2, 204, 137, 39, 233, 241, 52, 159, 19, 93, 232, 112, 236, 217, 167, 73, 173, 205, 146, 171, 77, 101, 57, 178, 64, 179, 195, 183, 234, 192, 9, 7, 36, 117, 63, 168, 161, 149, 66, 254, 103, 193, 119, 247, 166, 157, 161, 62, 102, 255, 138, 240, 179, 4, 25, 33, 229, 2, 164, 192, 180, 106, 73, 238, 133, 0, 95, 198, 114, 79, 173, 22, 209, 49, 32, 160, 181, 169, 92, 126, 36, 163, 70, 255, 130, 132, 20, 157, 247, 51, 138, 198, 12, 177, 128, 19, 188, 27, 64, 116, 116, 173, 15, 6, 181, 80, 64, 207, 224, 236, 12, 0, 231, 26, 44, 242, 156, 41, 9, 117, 162, 216, 15, 45, 47, 213, 90, 251, 55, 26, 91, 61, 143, 134, 154, 228, 195, 176, 120, 194, 179, 194, 17, 246, 245, 96, 234, 31, 27, 216, 255, 8, 238, 125, 142, 109, 90, 213, 120, 237, 11, 104, 102, 203, 101, 40, 75, 31, 33, 114, 59, 73, 191, 105, 98, 58, 84, 229, 220, 168, 145, 210, 190, 217, 47, 14, 123, 234, 231, 45, 82, 178, 250, 102, 251, 10, 189, 123, 67, 90, 10, 93, 166, 232, 172, 36, 37, 97, 205, 226, 160, 48, 118, 231, 100, 60, 164, 142, 109, 41, 62, 196, 116, 33, 130, 101, 224, 113, 3, 240, 230, 220, 79, 108, 53, 185, 72, 226, 232, 3, 174, 55, 1, 83, 24, 26, 150, 11, 131, 91, 37, 250, 218, 158, 20, 191, 199, 44, 174, 1, 189, 118, 23, 155, 245, 143, 149, 42, 146, 188, 149, 124, 78, 232, 135, 157, 33, 213, 187, 28, 225, 134, 59, 152, 230, 196, 220, 62, 97, 159, 208, 19, 85, 159, 69, 197, 49, 51, 85, 114, 102, 6, 21, 170, 44, 64, 0, 225, 77, 208, 170, 20, 106, 88, 0, 168, 29, 253, 178, 230, 95, 140, 107, 119, 197, 154, 167, 226, 131, 239, 9, 161, 116, 153, 223, 233, 102, 106, 130, 65, 134, 23, 99, 169, 44, 232, 112, 199, 101, 215, 15, 83, 156, 28, 131, 21, 118, 237, 46, 84, 24, 123, 8, 210, 116, 235, 213, 78, 56, 228, 234, 120, 94, 214, 67, 134, 62, 190, 40, 226, 148, 230, 5, 243, 67, 241, 230, 238, 227, 65, 166, 205, 1, 48, 194, 38, 249, 124, 162, 30, 69, 222, 26, 229, 70, 74, 234, 181, 53, 231, 250, 78, 71, 196, 181, 16, 74, 87, 30, 216, 155, 49, 25, 153, 124, 44, 160, 30, 10, 144, 164, 233, 51, 69, 182, 39, 106, 77, 41, 232, 18, 26, 122, 53, 186, 173, 126, 156, 185, 237, 13, 118, 40, 165, 134, 50, 134, 116, 134, 234, 36, 40, 156, 143, 202, 48, 169, 193, 75, 86, 173, 229, 39, 74, 85, 202, 205, 158, 65, 127, 177, 60, 92, 137, 45, 119, 80, 144, 247, 53, 42, 237, 47, 142, 139, 121, 202, 0, 83, 188, 119, 251, 209, 206, 203, 60, 94, 225, 111, 255, 129, 199, 168, 158, 68, 58, 196, 138, 165, 158, 41, 139, 139, 136, 255, 184, 142, 22, 54, 89, 152, 209, 36, 196, 60, 53, 125, 240, 53, 222, 34, 116, 210, 140, 137, 103, 62, 91, 17, 253, 176, 0, 51, 38, 238, 100, 180, 72, 86, 99, 198, 100, 245, 222, 141, 118, 47, 220, 102, 213, 87, 0, 210, 172, 136, 182, 220, 191, 111, 124, 90, 113, 153, 210, 180, 52, 159, 225, 77, 29, 74, 136, 156, 72, 159, 236, 246, 65, 144, 138, 181, 140, 79, 217, 224, 117, 47, 193, 47, 28, 16, 203, 239, 2, 197, 209, 225, 139, 248, 6, 25, 11, 5, 32, 252, 46, 128, 136, 98, 171, 54, 126, 208, 38, 94, 166, 55, 30, 34, 38, 90, 170, 113, 39, 181, 152, 82, 32, 54, 237, 15, 184, 173, 61, 46, 109, 146, 106, 137, 106, 210, 235, 8, 92, 51, 165, 26, 228, 146, 186, 65, 140, 253, 73, 72, 149, 146, 167, 196, 157, 80, 107, 180, 102, 229, 238, 126, 142, 109, 116, 171, 112, 178, 240, 216, 134, 131, 173, 47, 126, 225, 207, 6, 189, 98, 186, 242, 173, 74, 233, 7, 78, 183, 144, 36, 117, 25, 155, 241, 135, 2, 224, 57, 177, 169, 206, 135, 215, 226, 154, 137, 179, 156, 42, 245, 92, 107, 206, 216, 24, 47, 133, 249, 154, 84, 193, 107, 186, 121, 250, 10, 190, 73, 36, 182, 146, 191, 105, 55, 233, 29, 35, 113, 170, 17, 219, 86, 208, 19, 217, 160, 201, 50, 109, 63, 209, 154, 177, 56, 49, 224, 111, 35, 25, 68, 123, 113, 221, 117, 216, 255, 77, 177, 69, 184, 95, 163, 220, 54, 20, 196, 58, 230, 70, 186, 42, 75, 91, 52, 219, 233, 50, 233, 87, 23, 249, 115, 62, 241, 173, 194, 253, 187, 202, 223, 48, 217, 216, 120, 244, 222, 223, 33, 56, 138, 164, 20, 122, 148, 243, 99, 197, 152, 67, 207, 41, 90, 162, 35, 54, 81, 134, 155, 147, 29, 9, 70, 237, 24, 14, 118, 22, 198, 245, 174, 27, 76, 218, 205, 20, 45, 71, 105, 83, 130, 4, 64, 113, 105, 105, 180, 221, 153, 122, 62, 249, 18, 242, 106, 218, 128, 105, 246, 68, 49, 203, 172, 227, 193, 249, 4, 162, 90, 238, 243, 133, 98, 97, 70, 44, 41, 14, 148, 105, 8, 22, 179, 79, 166, 18, 169, 129, 87, 81, 199, 85, 34, 16, 0, 104, 78, 206, 34, 191, 206, 39, 101, 87, 19, 76, 135, 51, 127, 190, 80, 27, 227, 94, 174, 84, 94, 156, 156, 60, 212, 51, 68, 16, 107, 202, 167, 47, 250, 213, 200, 89, 107, 166, 83, 8, 161, 168, 139, 194, 201, 145, 68, 114, 251, 224, 205, 67, 199, 139, 194, 224, 58, 30, 20, 89, 73, 183, 145, 209, 166, 141, 107, 89, 120, 231, 237, 133, 120, 166, 1, 95, 147, 39, 145, 22, 143, 114, 171, 223, 143, 222, 100, 113, 125, 164, 172, 164, 244, 41, 163, 173, 165, 213, 22, 191, 251, 152, 78, 140, 23, 134, 39, 247, 47, 109, 19, 250, 234, 202, 124, 214, 3, 164, 238, 125, 176, 29, 184, 104, 11, 145, 192, 156, 92, 195, 225, 128, 215, 114, 83, 39, 11, 184, 162, 192, 91, 159, 97, 106, 166, 41, 13, 220, 4, 74, 45, 118, 235, 29, 228, 7, 113, 98, 251, 45, 128, 20, 65, 30, 214, 134, 212, 227, 188, 68, 13, 107, 118, 144, 80, 88, 116, 251, 176, 108, 230, 17, 77, 206, 46, 9, 159, 177, 184, 200, 157, 147, 144, 56, 159, 163, 8, 26, 208, 190, 91, 227, 231, 96, 173, 114, 8, 149, 65, 136, 147, 209, 203, 216, 101, 152, 74, 44, 192, 240, 52, 94, 2, 63, 0, 96, 65, 135, 105, 7, 20, 243, 90, 12, 178, 163, 50, 7, 55, 49, 184, 193, 105, 2, 192, 163, 171, 193, 139, 101, 75, 208, 28, 140, 100, 24, 228, 106, 57, 152, 253, 221, 47, 34, 251, 109, 22, 30, 207, 95, 79, 59, 169, 115, 1, 125, 172, 118, 44, 132, 103, 231, 227, 206, 36, 246, 190, 104, 240, 54, 201, 165, 4, 178, 116, 20, 99, 84, 97, 55, 64, 38, 63, 2, 211, 6, 104, 214, 34, 59, 73, 131, 62, 187, 206, 245, 137, 144, 192, 237, 164, 73, 226, 98, 44, 56, 12, 155, 81, 246, 147, 221, 199, 136, 124, 32, 170, 135, 146, 219, 43, 209, 145, 63, 254, 209, 114, 17, 61, 69, 183, 92, 26, 71, 103, 173, 159, 74, 60, 78, 110, 126, 207, 126, 220, 121, 134, 64, 187, 96, 86, 61, 122, 102, 78, 70, 33, 245, 31, 134, 78, 42, 34, 171, 137, 67, 12, 234, 141, 177, 59, 202, 70, 118, 31, 142, 51, 53, 207, 69, 0, 8, 79, 150, 23, 183, 174, 79, 175, 248, 60, 225, 115, 74, 188, 212, 159, 199, 38, 219, 30, 141, 251, 136, 120, 224, 84, 111, 84, 47, 69, 242, 29, 59, 68, 129, 169, 234, 139, 172, 181, 49, 180, 71, 22, 217, 207, 157, 29, 3, 29, 3, 165, 128, 209, 42, 68, 227, 21, 16, 54, 14, 56, 184, 113, 14, 12, 44, 85, 79, 231, 39, 161, 45, 129, 96, 251, 68, 140, 212, 255, 79, 85, 41, 3, 66, 170, 198, 87, 67, 119, 171, 151, 19, 211, 53, 131, 155, 203, 63, 187, 43, 99, 255, 80, 251, 98, 47, 2, 128, 160, 12, 118, 223, 87, 125, 228, 8, 226, 121, 247, 103, 230, 191, 167, 90, 241, 239, 217, 123, 226, 223, 31, 141, 178, 184, 235, 68, 230, 223, 176, 232, 64, 216, 76, 121, 11, 83, 130, 144, 225, 91, 247, 81, 53, 50, 197, 88, 208, 1, 116, 142, 144, 177, 217, 115, 221, 12, 78, 46, 53, 1, 154, 107, 186, 90, 170, 208, 236, 222, 119, 54, 67, 212, 9, 40, 23, 153, 8, 59, 189, 119, 210, 28, 137, 253, 186, 196, 244, 147, 45, 149, 131, 180, 173, 97, 129, 160, 210, 247, 19, 216, 227, 7, 218, 95, 108, 93, 113, 89, 125, 99, 108, 172, 139, 115, 254, 82, 111, 82, 226, 11, 171, 163, 94, 93, 213, 175, 98, 55, 249, 165, 194, 169, 208, 8, 59, 216, 58, 154, 143, 49, 17, 182, 57, 133, 227, 106, 187, 100, 35, 229, 235, 132, 210, 190, 220, 140, 184, 56, 224, 213, 151, 122, 75, 50, 89, 232, 62, 207, 196, 190, 152, 48, 169, 202, 42, 206, 9, 168, 29, 191, 170, 59, 102, 114, 151, 74, 88, 64, 76, 79, 202, 184, 9, 100, 49, 57, 246, 84, 200, 189, 19, 239, 109, 204, 163, 94, 195, 207, 36, 65, 208, 108, 38, 17, 47, 253, 227, 91, 115, 141, 140, 175, 169, 69, 157, 149, 131, 189, 99, 125, 188, 93, 108, 7, 234, 168, 74, 215, 164, 69, 227, 78, 111, 144, 114, 178, 180, 41, 230, 121, 167, 77, 107, 194, 114, 5, 184, 106, 77, 107, 87, 158, 145, 197, 58, 185, 111, 88, 100, 148, 53, 11, 185, 247, 153, 129, 203, 32, 119, 49, 213, 224, 113, 150, 130, 163, 233, 133, 21, 125, 183, 49, 239, 39, 45, 73, 46, 238, 194, 87, 221, 33, 122, 39, 95, 106, 95, 49, 95, 185, 171, 112, 4, 118, 32, 34, 192, 195, 152, 118, 225, 94, 32, 137, 221, 29, 245, 155, 238, 220, 1, 177, 95, 137, 194, 161, 179, 36, 57, 31, 184, 235, 2, 25, 236, 103, 97, 164, 15, 31, 85, 237, 205, 24, 31, 89, 243, 211, 69, 162, 110, 151, 55, 162, 7, 236, 131, 91, 48, 38, 91, 216, 41, 47, 124, 103, 209, 129, 68, 153, 22, 186, 16, 25, 193, 108, 197, 18, 11, 161, 29, 125, 150, 208, 214, 89, 79, 164, 139, 182, 106, 121, 237, 169, 7, 130, 79, 106, 195, 248, 107, 140, 93, 221, 87, 179, 61, 133, 152, 102, 127, 253, 163, 213, 223, 210, 235, 4, 17, 118, 143, 26, 185, 127, 151, 56, 1, 112, 26, 49, 240, 185, 240, 107, 236, 108, 250, 222, 50, 8, 253, 153, 29, 63, 103, 237, 232, 244, 252, 252, 161, 230, 31, 11, 35, 110, 126, 17, 81, 252, 135, 27, 58, 64, 152, 18, 148, 68, 132, 137, 190, 57, 36, 86, 205, 108, 4, 109, 36, 155, 177, 39, 129, 19, 38, 7, 189, 15, 125, 173, 200, 130, 7, 93, 62, 24, 216, 128, 42, 30, 116, 132, 134, 137, 28, 84, 243, 232, 34, 51, 252, 239, 136, 158, 93, 57, 13, 124, 140, 191, 166, 209, 23, 85, 236, 45, 155, 82, 87, 40, 236, 247, 171, 202, 70, 87, 85, 60, 183, 249, 103, 238, 75, 211, 90, 82, 16, 36, 224, 54, 132, 136, 20, 109, 126, 159, 128, 146, 226, 102, 160, 241, 137, 220, 242, 207, 77, 92, 58, 245, 162, 60, 88, 168, 207, 203, 143, 225, 245, 134, 102, 22, 210, 91, 43, 176, 244, 157, 245, 94, 73, 3, 248, 173, 161, 156, 107, 203, 41, 198, 170, 4, 21, 177, 164, 228, 128, 111, 58, 98, 23, 185, 137, 198, 15, 83, 36, 0, 122, 118, 215, 91, 97, 3, 154, 41, 145, 237, 242, 197, 85, 118, 243, 142, 7, 198, 186, 9, 202, 148, 44, 139, 184, 4, 191, 34, 24, 11, 130, 37, 223, 154, 43, 113, 79, 254, 159, 218, 162, 151, 35, 93, 108, 100, 156, 70, 124, 251, 27, 39, 110, 104, 61, 165, 211, 117, 159, 14, 27, 214, 182, 186, 39, 78, 56, 24, 218, 200, 254, 212, 19, 105, 105, 104, 143, 103, 7, 97, 7, 95, 146, 73, 206, 238, 24, 20, 181, 213, 9, 91, 187, 142, 207, 174, 123, 45, 183, 84, 186, 130, 181, 245, 76, 68, 67, 36, 69, 23, 188, 240, 114, 197, 65, 198, 25, 192, 189, 72, 37, 145, 53, 236, 36, 199, 83, 85, 63, 218, 207, 157, 211, 194, 198, 121, 167, 252, 20, 102, 196, 158, 96, 131, 9, 137, 202, 20, 92, 160, 186, 171, 37, 204, 159, 242, 222, 161, 158, 10, 75, 160, 109, 180, 92, 35, 244, 199, 23, 228, 158, 35, 207, 167, 132, 98, 99, 56, 222, 121, 13, 72, 192, 102, 3, 24, 127, 15, 238, 6, 110, 93, 170, 65, 207, 135, 20, 160, 109, 177, 142, 91, 137, 112, 33, 97, 158, 141, 26, 251, 180, 125, 41, 31, 33, 58, 156, 100, 26, 16, 140, 239, 155, 229, 188, 36, 27, 146, 198, 120, 207, 186, 149, 255, 179, 32, 225, 79, 167, 78, 76, 94, 129, 228, 16, 2, 152, 199, 193, 66, 29, 55, 19, 208, 18, 114, 116, 237, 72, 164, 41, 241, 239, 86, 43, 111, 85, 154, 71, 108, 142, 98, 17, 77, 210, 99, 113, 194, 218, 83, 129, 139, 221, 109, 220, 41, 48, 177, 146, 193, 197, 247, 181, 251, 129, 139, 1, 164, 5, 103, 40, 250, 227, 92, 212, 35, 159, 52, 166, 205, 12, 143, 239, 125, 173, 57, 122, 212, 120, 200, 89, 59, 155, 12, 146, 205, 11, 199, 51, 0, 31, 223, 66, 94, 150, 25, 138, 205, 234, 58, 57, 174, 111, 42, 24, 46, 232, 28, 87, 36, 11, 126, 41, 15, 141, 245, 2, 118, 249, 30, 107, 2, 200, 78, 124, 160, 18, 12, 220, 121, 136, 176, 3, 43, 24, 86, 209, 188, 111, 223, 254, 251, 227, 26, 92, 236, 151, 250, 120, 134, 119, 211, 176, 151, 141, 21, 80, 77, 21, 169, 93, 65, 188, 110, 159, 58, 225, 222, 169, 46, 118, 187, 137, 145, 103, 143, 167, 243, 239, 148, 223, 106, 169, 132, 187, 147, 252, 44, 101, 54, 218, 65, 75, 1, 248, 186, 103, 57, 164, 146, 22, 14, 197, 42, 0, 247, 22, 183, 179, 87, 162, 192, 42, 228, 45, 99, 87, 67, 2, 233, 112, 247, 126, 57, 183, 140, 124, 248, 229, 238, 94, 148, 249, 181, 77, 9, 232, 69, 189, 216, 216, 138, 2, 254, 2, 184, 97, 59, 34, 91, 26, 153, 73, 134, 30, 69, 249, 76, 0, 251, 51, 41, 17, 204, 49, 153, 11, 219, 204, 77, 92, 138, 29, 163, 183, 190, 46, 189, 2, 59, 126, 83, 220, 65, 97, 185, 255, 58, 158, 236, 5, 189, 211, 184, 61, 13, 253, 104, 103, 132, 23, 212, 131, 190, 141, 208, 9, 128, 105, 68, 52, 136, 29, 146, 102, 114, 22, 42, 181, 238, 52, 203, 44, 6, 117, 177, 44, 244, 75, 88, 112, 68, 170, 216, 186, 177, 212, 144, 87, 73, 99, 247, 75, 102, 57, 134, 62, 21, 80, 254, 129, 120, 65, 145, 249, 182, 180, 135, 120, 52, 64, 116, 15, 132, 191, 63, 206, 45, 43, 45, 68, 83, 13, 108, 97, 161, 166, 75, 158, 80, 0, 253, 232, 70, 89, 235, 177, 211, 242, 113, 198, 248, 12, 95, 190, 114, 217, 69, 233, 8, 235, 45, 147, 186, 188, 31, 185, 7, 96, 107, 125, 202, 35, 225, 69, 57, 236, 232, 136, 10, 113, 227, 138, 7, 196, 201, 246, 240, 177, 35, 96, 102, 131, 143, 195, 96, 75, 221, 19, 192, 50, 25, 210, 107, 220, 13, 227, 99, 80, 66, 157, 132, 48, 234, 195, 200, 154, 172, 243, 44, 134, 233, 89, 154, 19, 112, 72, 17, 226, 116, 122, 234, 240, 67, 144, 90, 162, 62, 242, 98, 204, 49, 158, 125, 196, 2, 40, 134, 255, 206, 253, 16, 143, 209, 246, 107, 134, 215, 83, 242, 44, 240, 119, 101, 161, 229, 70, 172, 65, 218, 134, 48, 224, 199, 185, 63, 197, 236, 198, 193, 27, 101, 59, 70, 93, 191, 58, 178, 56, 79, 57, 128, 88, 74, 11, 255, 188, 22, 27, 252, 71, 120, 132, 104, 3, 63, 189, 33, 39, 44, 186, 67, 141, 83, 191, 133, 235, 216, 121, 13, 200, 201, 153, 204, 193, 242, 143, 151, 73, 127, 168, 102, 130, 36, 43, 185, 221, 149, 99, 14, 138, 16, 31, 249, 220, 81, 80, 201, 44, 80, 8, 158, 177, 118, 121, 93, 239, 105, 140, 147, 252, 12, 108, 220, 105, 7, 198, 248, 13, 76, 6, 217, 63, 111, 168, 130, 195, 81, 116, 34, 213, 98, 182, 2, 142, 44, 20, 132, 107, 59, 59, 38, 244, 54, 250, 29, 74, 37, 151, 186, 146, 176, 174, 70, 4, 28, 62, 154, 21, 44, 54, 183, 124, 123, 27, 85, 193, 219, 92, 251, 177, 187, 247, 227, 36, 28, 7, 163, 146, 156, 15, 177, 54, 137, 131, 180, 233, 63, 44, 84, 162, 135, 124, 68, 23, 32, 253, 133, 49, 88, 67, 103, 95, 163, 74, 110, 181, 32, 186, 103, 11, 163, 101, 172, 247, 99, 207, 98, 147, 136, 163, 122, 238, 182, 133, 32, 46, 143, 7, 195, 190, 62, 125, 37, 53, 240, 119, 11, 177, 233, 166, 70, 142, 148, 134, 244, 100, 96, 74, 122, 207, 178, 71, 238, 64, 9, 162, 72, 216, 127, 144, 203, 183, 223, 166, 26, 193, 202, 121, 254, 80, 118, 119, 6, 9, 228, 179, 233, 238, 32, 126, 82, 86, 220, 162, 156, 79, 242, 253, 97, 212, 90, 152, 47, 196, 14, 26, 65, 87, 146, 124, 46, 18, 52, 71, 91, 172, 22, 241, 214, 228, 152, 38, 128, 45, 152, 20, 123, 181, 121, 42, 70, 78, 57, 57, 250, 147, 139, 11, 206, 126, 42, 66, 214, 160, 253, 140, 228, 28, 52, 184, 226, 37, 220, 163, 218, 160, 1, 105, 165, 47, 175, 50, 40, 105, 8, 12, 212, 119, 165, 118, 12, 143, 42, 138, 125, 236, 245, 170, 197, 2, 71, 189, 113, 224, 164, 164, 173, 80, 162, 48, 253, 201, 117, 221, 77, 61, 223, 36, 137, 210, 54, 201, 85, 134, 106, 114, 218, 79, 230, 253, 71, 152, 251, 234, 111, 149, 111, 199, 175, 89, 201, 237, 9, 124, 247, 226, 208, 38, 231, 93, 29, 140, 43, 240, 206, 186, 122, 71, 132, 108, 61, 143, 195, 59, 230, 113, 127, 153, 23, 36, 5, 114, 227, 162, 197, 185, 185, 29, 167, 159, 203, 134, 135, 237, 43, 99, 6, 20, 191, 18, 77, 103, 209, 124, 88, 76, 48, 142, 56, 46, 219, 129, 186, 230, 191, 34, 87, 22, 148, 29, 42, 110, 66, 125, 55, 42, 167, 45, 43, 235, 144, 217, 87, 156, 31, 220, 27, 123, 253, 74, 173, 208, 92, 225, 252, 215, 174, 192, 82, 118, 208, 130, 195, 140, 94, 65, 200, 45, 178, 235, 94, 154, 238, 157, 70, 124, 217, 233, 237, 238, 108, 58, 122, 89, 121, 115, 201, 29, 228, 67, 49, 214, 42, 52, 67, 218, 41, 215, 180, 213, 38, 185, 24, 140, 158, 50, 104, 81, 128, 134, 235, 125, 2, 182, 89, 28, 179, 71, 192, 8, 79, 102, 133, 231, 120, 42, 203, 105, 140, 89, 159, 246, 157, 246, 120, 32, 88, 209, 165, 78, 118, 220, 200, 179, 23, 146, 82, 192, 197, 254, 177, 148, 175, 217, 93, 109, 252, 233, 172, 126, 115, 7, 82, 161, 164, 139, 226, 71, 147, 244, 96, 217, 217, 37, 61, 105, 254, 255, 118, 230, 241, 12, 159, 186, 147, 137, 142, 254, 103, 139, 86, 245, 83, 63, 244, 255, 10, 172, 79, 110, 167, 60, 107, 211, 53, 130, 3, 32, 42, 152, 189, 76, 179, 56, 9, 135, 3, 127, 176, 67, 127, 58, 9, 152, 253, 241, 23, 55, 74, 140, 97, 95, 84, 235, 13, 161, 40, 179, 5, 210, 36, 219, 61, 130, 118, 165, 82, 15, 201, 106, 83, 157, 13, 170, 120, 72, 157, 130, 131, 53, 0, 155, 127, 218, 254, 214, 46, 193, 5, 123, 53, 232, 51, 103, 233, 29, 138, 98, 139, 61, 85, 47, 233, 29, 180, 185, 197, 114, 38, 161, 124, 215, 158, 19, 125, 3, 23, 194, 237, 170, 20, 73, 146, 11, 113, 181, 163, 193, 3, 70, 231, 160, 107, 115, 179, 110, 105, 204, 246, 139, 201, 100, 15, 115, 198, 73, 133, 98, 147, 168, 225, 106, 200, 4, 106, 137, 58, 49, 207, 156, 90, 109, 161, 143, 88, 189, 145, 64, 7, 113, 19, 183, 254, 144, 49, 23, 203, 99, 207, 127, 244, 249, 251, 5, 82, 111, 144, 51, 98, 160, 97, 232, 42, 244, 160, 25, 61, 105, 213, 221, 199, 246, 178, 26, 10, 149, 19, 57, 49, 184, 211, 185, 86, 101, 45, 69, 196, 212, 153, 15, 110, 61, 63, 136, 222, 39, 53, 112, 239, 8, 166, 133, 136, 155, 77, 203, 46, 229, 52, 82, 18, 235, 145, 61, 253, 147, 69, 107, 184, 39, 104, 150, 118, 196, 172, 17, 31, 56, 79, 9, 66, 220, 82, 236, 145, 152, 113, 123, 201, 231, 20, 105, 114, 112, 107, 180, 193, 8, 190, 245, 34, 62, 52, 187, 61, 75, 1, 113, 92, 118, 211, 160, 9, 58, 52, 235, 193, 212, 60, 185, 213, 16, 205, 54, 58, 245, 53, 126, 19, 206, 151, 97, 197, 142, 191, 180, 134, 51, 117, 193, 172, 128, 145, 225, 23, 5, 122, 242, 139, 18, 82, 7, 118, 107, 69, 181, 195, 152, 250, 53, 63, 57, 234, 103, 164, 228, 134, 129, 236, 34, 122, 104, 81, 48, 121, 68, 12, 169, 18, 23, 98, 122, 78, 62, 193, 12, 208, 89, 164, 223, 38, 138, 74, 85, 131, 232, 249, 152, 68, 128, 114, 234, 32, 147, 152, 2, 208, 101, 34, 240, 31, 203, 126, 236, 213, 193, 211, 173, 41, 189, 26, 241, 66, 205, 7, 8, 164, 167, 93, 198, 136, 12, 141, 6, 160, 182, 73, 254, 203, 59, 244, 166, 190, 80, 145, 136, 181, 28, 250, 193, 176, 129, 167, 173, 172, 164, 42, 45, 214, 236, 51, 197, 250, 223, 255, 203, 195, 192, 224, 128, 42, 61, 97, 216, 172, 23, 218, 144, 30, 135, 130, 165, 140, 128, 121, 71, 75, 255, 99, 113, 201, 15, 145, 215, 249, 43, 245, 46, 127, 169, 80, 27, 221, 35, 123, 71, 238, 129, 188, 124, 116, 55, 251, 147, 252, 227, 131, 116, 29, 236, 44, 105, 233, 37, 143, 53, 132, 107, 153, 183, 136, 143, 213, 250, 94, 151, 192, 125, 104, 109, 143, 69, 22, 82, 22, 90, 181, 241, 54, 64, 83, 223, 194, 25, 223, 241, 162, 203, 141, 9, 90, 143, 56, 208, 1, 66, 120, 138, 177, 151, 109, 72, 38, 208, 50, 240, 30, 159, 84, 115, 219, 66, 58, 161, 178, 131, 153, 229, 210, 244, 118, 105, 220, 75, 113, 226, 187, 227, 198, 211, 225, 225, 145, 21, 130, 83, 111, 73, 72, 110, 43, 161, 9, 55, 13, 116, 214, 149, 171, 221, 46, 91, 1, 83, 182, 104, 118, 62, 160, 174, 74, 96, 13, 213, 148, 148, 7, 216, 212, 85, 57, 98, 123, 81, 215, 194, 217, 196, 25, 203, 244, 97, 62, 216, 160, 185, 148, 91, 6, 204, 203, 36, 171, 250, 223, 93, 229, 11, 70, 247, 245, 106, 187, 162, 22, 76, 172, 99, 14, 243, 181, 168, 35, 155, 155, 86, 172, 6, 169, 21, 212, 142, 165, 246, 59, 230, 182, 236, 241, 145, 203, 217, 112, 116, 130, 183, 82, 156, 249, 164, 120, 21, 69, 140, 46, 154, 222, 76, 91, 18, 108, 121, 44, 97, 138, 119, 227, 246, 17, 66, 54, 193, 66, 225, 85, 38, 196, 74, 96, 72, 129, 194, 115, 78, 100, 2, 7, 139, 140, 5, 83, 217, 177, 194, 165, 119, 20, 5, 50, 117, 116, 68, 193, 24, 183, 14, 188, 113, 152, 87, 97, 52, 150, 130, 120, 32, 249, 34, 57, 2, 234, 12, 59, 107, 178, 151, 151, 156, 88, 0, 154, 203, 235, 28, 85, 191, 52, 241, 184, 171, 25, 46, 212, 40, 71, 168, 247, 65, 156, 181, 131, 182, 80, 47, 181, 123, 96, 10, 219, 92, 255, 187, 152, 200, 160, 248, 54, 178, 7, 91, 107, 31, 96, 136, 31, 150, 106, 126, 228, 187, 210, 177, 62, 184, 200, 195, 53, 148, 125, 239, 67, 37, 137, 105, 54, 162, 19, 194, 89, 226, 144, 244, 162, 228, 21, 21, 55, 105, 205, 68, 14, 134, 111, 196, 251, 190, 35, 219, 28, 161, 64, 205, 94, 100, 50, 238, 122, 188, 109, 68, 50, 228, 191, 127, 144, 162, 93, 186, 146, 59, 152, 198, 44, 8, 116, 229, 172, 162, 91, 200, 125, 248, 175, 209, 192, 208, 118, 120, 48, 143, 200, 212, 203, 84, 159, 112, 10, 175, 198, 24, 198, 108, 151, 94, 204, 24, 136, 144, 55, 249, 22, 251, 68, 7, 244, 124, 134, 236, 76, 251, 14, 114, 161, 91, 64, 73, 54, 123, 239, 245, 94, 229, 109, 105, 29, 20, 137, 169, 221, 87, 42, 197, 81, 33, 203, 3, 86, 212, 184, 128, 43, 221, 159, 89, 227, 106, 159, 27, 224, 25, 124, 154, 27, 47, 113, 5, 30, 145, 219, 95, 73, 72, 114, 218, 182, 52, 149, 222, 50, 116, 115, 84, 198, 211, 77, 177, 163, 125, 213, 72, 124, 148, 220, 222, 192, 73, 185, 63, 163, 67, 192, 254, 68, 144, 91, 45, 124, 133, 20, 186, 231, 228, 90, 210, 123, 79, 15, 216, 155, 192, 189, 52, 78, 66, 50, 166, 122, 45, 133, 206, 99, 54, 199, 142, 51, 72, 221, 174, 164, 234, 187, 81, 215, 185, 7, 62, 36, 8, 95, 182, 74, 129, 153, 167, 191, 135, 75, 26, 248, 61, 240, 109, 250, 122, 183, 202, 76, 241, 66, 169, 116, 73, 214, 111, 110, 1, 245, 167, 145, 112, 207, 39, 69, 164, 255, 160, 88, 40, 104, 123, 44, 205, 252, 253, 123, 10, 62, 21, 189, 117, 166, 179, 214, 199, 106, 90, 198, 248, 186, 209, 1, 237, 8, 45, 160, 246, 45, 245, 56, 181, 205, 98, 119, 205, 173, 247, 225, 197, 202, 157, 239, 203, 183, 120, 175, 79, 130, 226, 94, 219, 199, 243, 163, 73, 77, 143, 72, 113, 229, 78, 134, 102, 35, 58, 244, 59, 169, 228, 221, 39, 243, 245, 34, 26, 230, 67, 138, 235, 144, 220, 176, 63, 103, 159, 166, 131, 167, 144, 58, 27, 39, 45, 17, 16, 136, 123, 122, 12, 27, 70, 83, 60, 13, 161, 253, 97, 109, 212, 10, 203, 4, 218, 255, 182, 56, 166, 209, 132, 68, 57, 13, 237, 31, 74, 141, 13, 205, 118, 227, 241, 206, 69, 32, 239, 40, 72, 38, 251, 175, 228, 173, 117, 67, 182, 134, 67, 128, 177, 192, 255, 20, 62, 93, 109, 28, 139, 181, 123, 217, 190, 248, 185, 127, 238, 149, 135, 199, 110, 89, 6, 166, 178, 112, 123, 33, 240, 7, 67, 67, 189, 115, 198, 75, 24, 42, 196, 208, 31, 125, 4, 211, 31, 254, 191, 214, 123, 37, 35, 166, 231, 196, 193, 135, 130, 74, 12, 98, 0, 64, 243, 50, 98, 94, 57, 242, 231, 99, 40, 191, 99, 39, 105, 74, 57, 112, 171, 199, 52, 120, 130, 190, 62, 208, 58, 3, 248, 165, 21, 155, 162, 226, 39, 6, 36, 223, 189, 200, 14, 64, 161, 73, 3, 202, 56, 236, 213, 165, 185, 224, 209, 169, 56, 228, 12, 45, 66, 76, 106, 224, 148, 245, 245, 151, 84, 155, 68, 51, 244, 129, 77, 248, 251, 64, 9, 38, 238, 42, 187, 94, 38, 125, 78, 109, 240, 252, 121, 60, 75, 211, 212, 230, 3, 5, 239, 29, 75, 185, 104, 219, 36, 73, 129, 1, 153, 9, 55, 79, 110, 0, 197, 107, 163, 110, 140, 209, 122, 136, 92, 227, 208, 49, 19, 156, 177, 190, 158, 234, 22, 66, 246, 176, 142, 194, 120, 219, 226, 69, 200, 227, 53, 19, 142, 25, 22, 119, 139, 220, 79, 73, 217, 76, 234, 252, 162, 24, 244, 253, 33, 104, 171, 165, 54, 160, 60, 227, 212, 162, 255, 153, 175, 81, 55, 215, 43, 39, 235, 138, 87, 177, 82, 82, 163, 204, 18, 95, 220, 56, 149, 45, 54, 180, 221, 45, 233, 64, 131, 101, 58, 229, 182, 176, 69, 253, 171, 56, 81, 184, 186, 51, 155, 187, 79, 134, 42, 62, 87, 247, 15, 230, 138, 251, 6, 222, 234, 207, 91, 123, 5, 75, 173, 19, 6, 132, 28, 143, 246, 146, 20, 133, 102, 43, 81, 47, 228, 3, 154, 222, 235, 6, 44, 243, 41, 223, 85, 26, 96, 89, 101, 92, 55, 228, 196, 142, 45, 55, 205, 238, 167, 16, 93, 146, 113, 25, 90, 96, 177, 138, 26, 87, 130, 237, 4, 69, 202, 147, 155, 46, 66, 58, 124, 36, 232, 211, 202, 164, 63, 3, 40, 175, 117, 125, 72, 213, 66, 56, 209, 86, 130, 16, 4, 144, 152, 46, 197, 88, 112, 165, 191, 231, 168, 0, 76, 164, 48, 214, 184, 136, 44, 63, 149, 143, 219, 81, 22, 85, 113, 33, 51, 230, 224, 100, 254, 16, 107, 242, 116, 169, 254, 30, 117, 219, 220, 251, 133, 114, 161, 210, 231, 238, 4, 250, 84, 113, 195, 159, 188, 32, 74, 56, 109, 199, 10, 121, 57, 196, 20, 166, 99, 160, 154, 153, 137, 162, 170, 179, 120, 234, 248, 72, 111, 72, 23, 252, 127, 170, 228, 34, 237, 16, 17, 154, 182, 136, 209, 136, 51, 30, 251, 237, 122, 112, 135, 199, 25, 48, 4, 176, 182, 3, 116, 199, 132, 182, 209, 137, 241, 226, 89, 94, 106, 99, 12, 245, 196, 189, 121, 138, 55, 113, 182, 131, 93, 200, 100, 47, 10, 37, 239, 220, 185, 196, 20, 73, 195, 17, 37, 248, 97, 93, 69, 227, 173, 70, 181, 132, 215, 174, 225, 42, 22, 224, 8, 16, 148, 88, 17, 157, 80, 35, 219, 69, 120, 181, 143, 13, 20, 138, 52, 158, 192, 71, 140, 106, 237, 15, 189, 82, 206, 198, 246, 41, 72, 72, 99, 119, 58, 222, 168, 141, 15, 145, 234, 101, 20, 89, 224, 178, 138, 247, 232, 180, 127, 211, 209, 115, 147, 90, 249, 149, 49, 159, 62, 168, 21, 36, 212, 163, 26, 173, 153, 192, 12, 120, 127, 190, 178, 96, 169, 241, 206, 81, 104, 198, 165, 197, 233, 244, 206, 137, 137, 132, 125, 165, 28, 175, 105, 249, 80, 87, 214, 142, 203, 23, 235, 61, 158, 31, 132, 69, 189, 41, 196, 94, 16, 190, 49, 166, 65, 45, 229, 160, 172, 23, 77, 196, 46, 26, 179, 220, 216, 9, 141, 16, 59, 66, 23, 206, 245, 223, 206, 90, 238, 131, 184, 162, 240, 143, 223, 191, 15, 108, 61, 127, 26, 4, 116, 248, 168, 253, 53, 25, 175, 133, 207, 4, 175, 17, 143, 18, 129, 200, 70, 81, 187, 63, 103, 115, 83, 92, 140, 17, 120, 249, 61, 97, 19, 35, 182, 130, 249, 236, 217, 235, 101, 54, 17, 112, 2, 239, 235, 80, 91, 21, 90, 107, 18, 229, 140, 124, 70, 235, 22, 78, 109, 160, 19, 55, 165, 208, 215, 168, 96, 245, 117, 95, 112, 6, 151, 34, 34, 192, 126, 100, 214, 3, 139, 180, 64, 177, 143, 183, 113, 129, 188, 130, 217, 34, 91, 13, 147, 36, 98, 162, 226, 195, 18, 213, 183, 4, 96, 146, 123, 174, 107, 139, 4, 11, 60, 40, 158, 67, 201, 164, 210, 180, 223, 90, 34, 217, 191, 39, 218, 74, 151, 102, 57, 120, 225, 15, 104, 40, 19, 188, 122, 238, 147, 247, 218, 225, 34, 34, 194, 195, 117, 82, 220, 14, 231, 134, 117, 139, 122, 155, 208, 199, 46, 192, 128, 233, 6, 13, 109, 53, 85, 38, 247, 2, 48, 228, 13, 88, 66, 169, 98, 25, 104, 86, 197, 23, 115, 150, 42, 121, 146, 181, 239, 208, 174, 94, 119, 254, 251, 230, 250, 150, 97, 155, 153, 133, 248, 134, 135, 134, 125, 217, 105, 203, 83, 39, 249, 12, 126, 182, 143, 97, 125, 13, 206, 124, 229, 21, 160, 78, 210, 128, 209, 239, 71, 18, 148, 119, 248, 112, 103, 82, 189, 28, 20, 169, 105, 215, 20, 60, 130, 143, 159, 33, 237, 85, 65, 54, 30, 100, 112, 158, 100, 16, 184, 111, 139, 225, 36, 219, 226, 172, 71, 151, 77, 145, 121, 108, 193, 84, 54, 117, 68, 240, 50, 97, 49, 26, 251, 250, 168, 198, 81, 176, 109, 71, 223, 233, 10, 211, 76, 169, 40, 108, 17, 109, 182, 183, 124, 8, 113, 54, 50, 100, 180, 118, 157, 34, 205, 234, 212, 190, 78, 74, 61, 152, 56, 35, 16, 182, 71, 171, 42, 241, 15, 249, 145, 186, 42, 86, 4, 242, 82, 17, 206, 114, 172, 125, 127, 172, 45, 54, 29, 186, 95, 120, 151, 49, 215, 211, 123, 118, 83, 131, 77, 214, 88, 159, 194, 228, 188, 21, 235, 22, 218, 202, 108, 229, 230, 186, 64, 26, 75, 6, 188, 59, 132, 101, 190, 185, 247, 139, 93, 102, 186, 136, 168, 0, 194, 117, 190, 241, 92, 126, 69, 40], - [26, 135, 120, 119, 168, 81, 18, 222, 43, 100, 152, 149, 133, 202, 200, 246, 111, 31, 120, 32, 48, 41, 22, 22, 31, 198, 127, 167, 120, 26, 83, 19, 186, 60, 92, 206, 100, 75, 149, 116, 82, 135, 35, 76, 93, 171, 9, 154, 195, 146, 254, 148, 246, 202, 38, 202, 237, 104, 104, 1, 225, 2, 31, 212, 142, 43, 253, 110, 0, 151, 169, 206, 134, 153, 105, 112, 31, 129, 193, 178, 146, 75, 156, 199, 151, 72, 125, 101, 32, 85, 111, 6, 162, 31, 75, 236, 252, 211, 94, 21, 46, 185, 197, 245, 27, 131, 151, 178, 227, 177, 170, 156, 50, 161, 10, 245, 179, 235, 128, 4, 179, 12, 184, 41, 83, 180, 21, 135, 208, 19, 231, 90, 174, 24, 142, 145, 142, 22, 152, 119, 236, 186, 39, 158, 180, 13, 243, 82, 242, 245, 45, 225, 6, 249, 249, 250, 21, 68, 140, 115, 84, 131, 248, 59, 251, 162, 195, 17, 29, 244, 50, 120, 4, 240, 26, 5, 31, 228, 213, 181, 178, 114, 235, 137, 236, 75, 153, 169, 135, 249, 43, 176, 240, 157, 200, 251, 45, 22, 206, 235, 171, 181, 235, 121, 88, 119, 115, 54, 102, 39, 120, 47, 19, 17, 123, 197, 3, 52, 35, 188, 156, 197, 115, 102, 214, 106, 142, 142, 124, 109, 160, 208, 229, 223, 208, 134, 69, 82, 221, 117, 228, 111, 88, 58, 248, 204, 146, 59, 172, 24, 26, 1, 119, 136, 156, 170, 89, 173, 143, 218, 125, 249, 100, 175, 114, 188, 198, 172, 8, 76, 88, 170, 247, 98, 8, 252, 190, 229, 64, 38, 209, 54, 51, 211, 158, 46, 122, 102, 89, 169, 14, 11, 25, 198, 139, 200, 43, 159, 136, 91, 104, 200, 60, 109, 176, 163, 119, 69, 133, 10, 96, 66, 0, 162, 142, 1, 166, 113, 242, 118, 246, 244, 237, 81, 250, 5, 80, 67, 114, 81, 186, 159, 71, 208, 69, 164, 255, 128, 107, 207, 53, 66, 72, 132, 162, 170, 67, 240, 111, 68, 212, 183, 21, 218, 242, 108, 205, 46, 83, 87, 173, 240, 30, 194, 123, 84, 57, 91, 37, 117, 4, 148, 159, 128, 73, 190, 49, 132, 38, 73, 236, 195, 194, 101, 35, 72, 173, 9, 48, 100, 82, 178, 189, 63, 134, 92, 136, 33, 212, 240, 192, 205, 110, 138, 193, 142, 229, 239, 13, 175, 106, 5, 217, 10, 197, 199, 130, 127, 136, 185, 87, 140, 162, 12, 78, 199, 20, 82, 91, 141, 137, 165, 247, 185, 168, 118, 124, 211, 237, 228, 60, 60, 193, 123, 190, 241, 136, 75, 212, 252, 26, 232, 7, 216, 113, 107, 132, 239, 83, 67, 100, 168, 55, 88, 73, 39, 247, 188, 114, 240, 203, 230, 102, 7, 181, 11, 194, 46, 170, 196, 47, 173, 170, 159, 198, 253, 166, 197, 120, 12, 231, 201, 84, 10, 226, 141, 225, 12, 236, 71, 47, 187, 119, 65, 76, 72, 171, 88, 61, 176, 129, 220, 7, 209, 60, 130, 96, 73, 253, 125, 31, 34, 144, 126, 183, 84, 47, 85, 5, 156, 72, 208, 238, 196, 242, 245, 97, 30, 121, 250, 112, 35, 38, 170, 20, 75, 207, 172, 36, 106, 5, 11, 214, 179, 207, 194, 97, 145, 205, 179, 221, 224, 247, 220, 38, 40, 189, 193, 56, 57, 165, 52, 1, 38, 52, 56, 2, 151, 77, 135, 54, 31, 74, 152, 243, 11, 6, 201, 31, 234, 216, 73, 234, 164, 84, 63, 33, 27, 150, 140, 15, 142, 36, 3, 18, 64, 21, 206, 230, 116, 222, 158, 59, 90, 117, 145, 230, 10, 160, 155, 42, 32, 27, 43, 34, 160, 186, 125, 9, 4, 221, 148, 132, 254, 171, 64, 177, 79, 186, 151, 217, 73, 201, 145, 203, 126, 21, 223, 189, 200, 249, 160, 213, 116, 164, 205, 152, 51, 241, 21, 222, 124, 229, 46, 29, 123, 241, 167, 36, 200, 36, 127, 90, 237, 230, 91, 116, 230, 185, 161, 44, 138, 180, 177, 112, 48, 194, 236, 23, 189, 168, 87, 170, 160, 80, 164, 70, 134, 49, 102, 198, 73, 26, 201, 236, 172, 10, 189, 157, 144, 64, 95, 163, 172, 185, 103, 206, 227, 196, 154, 90, 125, 151, 68, 201, 148, 206, 224, 152, 63, 150, 96, 7, 235, 207, 172, 168, 193, 14, 28, 57, 106, 247, 197, 47, 92, 171, 202, 80, 112, 23, 172, 116, 10, 62, 254, 184, 130, 170, 48, 38, 109, 148, 237, 166, 29, 119, 47, 33, 244, 149, 168, 205, 44, 161, 223, 38, 150, 184, 162, 250, 180, 243, 211, 129, 133, 174, 32, 173, 186, 228, 115, 133, 171, 206, 130, 115, 141, 129, 239, 177, 243, 66, 147, 40, 39, 135, 63, 215, 95, 205, 34, 65, 45, 179, 60, 43, 130, 69, 85, 140, 202, 245, 15, 4, 91, 72, 164, 228, 34, 226, 68, 48, 178, 232, 19, 196, 100, 214, 230, 175, 16, 179, 236, 186, 207, 39, 240, 40, 141, 127, 150, 27, 166, 61, 174, 198, 186, 63, 32, 191, 176, 2, 170, 43, 9, 66, 238, 145, 75, 140, 89, 101, 103, 0, 201, 167, 194, 125, 87, 218, 133, 204, 136, 184, 125, 209, 41, 66, 53, 119, 132, 95, 62, 216, 240, 130, 216, 83, 84, 123, 183, 239, 104, 146, 47, 123, 123, 167, 216, 126, 180, 232, 117, 131, 84, 59, 233, 34, 0, 106, 71, 203, 220, 90, 137, 126, 237, 121, 69, 149, 152, 218, 169, 160, 242, 42, 188, 119, 54, 5, 44, 50, 142, 202, 238, 131, 213, 240, 175, 119, 157, 67, 12, 52, 64, 82, 61, 86, 186, 21, 238, 195, 9, 236, 93, 136, 199, 21, 207, 164, 223, 82, 37, 153, 212, 172, 11, 15, 233, 121, 106, 220, 90, 237, 228, 88, 177, 254, 176, 22, 194, 229, 123, 213, 18, 148, 227, 38, 206, 229, 29, 198, 194, 34, 176, 39, 139, 110, 6, 42, 155, 48, 220, 145, 51, 214, 207, 239, 229, 169, 27, 57, 131, 25, 54, 123, 110, 10, 218, 133, 82, 63, 156, 181, 103, 225, 79, 44, 222, 81, 162, 56, 243, 30, 63, 55, 54, 205, 6, 72, 172, 36, 244, 201, 20, 33, 167, 34, 244, 35, 153, 154, 6, 12, 55, 59, 149, 139, 221, 89, 92, 37, 235, 219, 34, 242, 122, 27, 136, 199, 77, 55, 166, 185, 56, 237, 150, 11, 225, 120, 228, 152, 247, 190, 140, 67, 89, 0, 188, 190, 222, 192, 121, 238, 125, 68, 246, 13, 28, 224, 9, 157, 184, 55, 167, 129, 39, 94, 100, 8, 76, 227, 50, 120, 235, 34, 224, 60, 47, 105, 5, 0, 251, 12, 74, 61, 77, 183, 145, 209, 47, 138, 156, 133, 120, 29, 248, 184, 125, 160, 92, 25, 51, 240, 43, 107, 250, 95, 248, 83, 187, 167, 173, 89, 148, 140, 59, 172, 253, 124, 116, 219, 171, 89, 9, 134, 168, 118, 44, 154, 239, 95, 204, 237, 154, 111, 241, 122, 15, 175, 151, 252, 115, 115, 220, 37, 118, 178, 237, 95, 248, 207, 65, 83, 40, 146, 82, 162, 61, 218, 237, 121, 129, 35, 172, 6, 174, 227, 74, 159, 226, 29, 39, 213, 153, 75, 212, 23, 26, 51, 179, 138, 180, 254, 42, 249, 50, 44, 209, 201, 9, 32, 36, 167, 230, 135, 184, 232, 8, 205, 20, 99, 124, 164, 134, 255, 78, 94, 126, 114, 162, 210, 57, 155, 116, 248, 207, 108, 89, 179, 38, 160, 85, 60, 208, 91, 206, 116, 4, 58, 156, 80, 106, 33, 160, 243, 38, 64, 93, 227, 220, 206, 162, 45, 92, 27, 1, 176, 80, 46, 246, 156, 159, 45, 15, 12, 84, 123, 127, 248, 101, 95, 213, 168, 48, 76, 11, 45, 132, 74, 102, 226, 203, 147, 120, 84, 232, 215, 161, 8, 231, 155, 244, 114, 167, 217, 54, 218, 231, 27, 89, 8, 108, 57, 43, 215, 0, 140, 122, 255, 72, 27, 124, 186, 114, 34, 235, 250, 20, 64, 53, 115, 80, 132, 219, 61, 84, 214, 216, 254, 29, 33, 184, 65, 115, 126, 55, 14, 251, 169, 157, 143, 73, 193, 50, 223, 149, 136, 25, 8, 194, 41, 179, 15, 145, 246, 3, 236, 104, 66, 18, 208, 39, 1, 245, 172, 161, 65, 100, 79, 89, 179, 227, 186, 139, 151, 29, 87, 52, 151, 189, 172, 66, 183, 175, 63, 98, 92, 185, 30, 1, 3, 6, 205, 233, 68, 231, 145, 233, 1, 142, 221, 193, 63, 75, 192, 250, 134, 78, 193, 65, 196, 0, 253, 69, 148, 180, 250, 168, 181, 72, 133, 60, 168, 179, 64, 106, 108, 97, 139, 173, 28, 119, 156, 70, 252, 24, 68, 134, 246, 19, 69, 50, 213, 18, 165, 238, 90, 130, 129, 248, 149, 243, 165, 179, 86, 58, 12, 169, 24, 44, 80, 216, 240, 133, 134, 240, 73, 245, 240, 145, 62, 34, 244, 7, 176, 81, 64, 240, 22, 212, 153, 250, 183, 191, 210, 17, 177, 113, 189, 168, 32, 162, 54, 147, 125, 13, 189, 84, 142, 94, 137, 109, 199, 104, 188, 91, 188, 137, 14, 188, 141, 196, 103, 101, 92, 44, 114, 200, 27, 165, 230, 213, 136, 143, 190, 101, 9, 252, 155, 210, 255, 17, 223, 21, 99, 119, 92, 28, 67, 162, 26, 58, 63, 171, 79, 56, 69, 77, 173, 245, 248, 42, 249, 247, 211, 240, 66, 76, 204, 206, 42, 187, 238, 3, 64, 104, 237, 181, 140, 128, 242, 132, 95, 233, 247, 125, 49, 85, 144, 77, 137, 217, 226, 20, 214, 89, 2, 46, 223, 110, 90, 31, 246, 99, 53, 190, 132, 7, 40, 220, 227, 34, 23, 241, 177, 213, 215, 144, 206, 75, 118, 53, 121, 32, 103, 133, 187, 56, 103, 19, 186, 139, 53, 26, 55, 72, 72, 78, 38, 86, 217, 230, 148, 124, 42, 104, 252, 123, 142, 101, 174, 16, 92, 58, 149, 243, 194, 178, 103, 26, 146, 61, 94, 81, 223, 120, 24, 53, 51, 54, 61, 207, 202, 20, 100, 204, 188, 46, 181, 41, 218, 153, 146, 81, 32, 213, 211, 38, 82, 202, 144, 94, 212, 238, 2, 243, 90, 181, 38, 193, 84, 199, 179, 76, 93, 192, 186, 26, 6, 46, 139, 94, 157, 31, 52, 209, 66, 20, 59, 194, 179, 220, 247, 240, 208, 158, 48, 249, 150, 97, 253, 65, 46, 216, 155, 64, 138, 82, 216, 218, 11, 114, 233, 193, 170, 0, 91, 130, 122, 179, 172, 87, 4, 1, 29, 251, 136, 104, 38, 55, 170, 182, 188, 240, 125, 139, 239, 59, 106, 56, 86, 3, 224, 193, 187, 129, 62, 80, 158, 221, 209, 158, 166, 130, 95, 9, 59, 139, 73, 45, 213, 52, 180, 160, 219, 237, 85, 4, 245, 78, 12, 39, 31, 10, 58, 73, 244, 231, 110, 218, 239, 178, 119, 72, 24, 161, 32, 15, 247, 63, 142, 59, 177, 126, 125, 52, 77, 66, 150, 41, 180, 46, 17, 74, 7, 124, 116, 207, 71, 45, 190, 184, 136, 141, 62, 32, 129, 226, 192, 22, 22, 148, 4, 239, 108, 25, 47, 141, 179, 165, 157, 215, 172, 150, 236, 37, 88, 76, 10, 171, 184, 132, 83, 234, 116, 30, 112, 14, 243, 132, 188, 211, 198, 108, 200, 166, 62, 206, 84, 45, 109, 89, 202, 122, 184, 57, 201, 191, 147, 146, 218, 61, 55, 217, 231, 104, 171, 206, 135, 107, 89, 74, 65, 141, 95, 227, 252, 81, 243, 151, 114, 94, 21, 245, 220, 167, 113, 128, 251, 147, 55, 232, 26, 84, 85, 158, 128, 240, 105, 246, 200, 70, 147, 27, 178, 8, 168, 122, 109, 129, 136, 6, 148, 23, 87, 174, 139, 45, 191, 106, 2, 87, 206, 197, 103, 100, 223, 97, 128, 46, 104, 227, 151, 178, 246, 181, 30, 6, 3, 240, 228, 56, 197, 122, 143, 101, 153, 3, 131, 7, 17, 21, 216, 12, 135, 73, 28, 59, 128, 61, 95, 209, 159, 218, 244, 140, 2, 136, 152, 101, 165, 234, 81, 148, 8, 221, 179, 101, 191, 44, 161, 7, 103, 239, 60, 151, 44, 135, 38, 111, 86, 23, 197, 178, 41, 22, 163, 238, 166, 60, 49, 177, 234, 15, 37, 2, 200, 115, 252, 124, 17, 167, 1, 38, 102, 5, 3, 235, 28, 138, 191, 209, 66, 65, 213, 94, 199, 245, 69, 30, 143, 68, 51, 91, 35, 125, 208, 123, 116, 48, 244, 30, 198, 251, 66, 223, 238, 106, 85, 80, 96, 126, 117, 208, 232, 239, 231, 249, 8, 127, 125, 134, 204, 39, 134, 249, 96, 246, 116, 141, 173, 225, 126, 243, 220, 104, 170, 75, 188, 163, 85, 121, 23, 166, 159, 157, 186, 79, 159, 216, 113, 67, 136, 3, 248, 222, 19, 132, 119, 252, 30, 254, 188, 220, 31, 29, 225, 221, 157, 47, 132, 50, 246, 50, 209, 239, 192, 176, 85, 248, 197, 33, 235, 93, 213, 214, 121, 33, 193, 52, 21, 223, 96, 145, 34, 203, 186, 194, 173, 205, 57, 56, 18, 8, 209, 86, 37, 132, 193, 244, 183, 56, 157, 121, 117, 141, 193, 146, 81, 207, 67, 241, 121, 207, 88, 228, 64, 119, 223, 44, 69, 109, 165, 254, 67, 199, 62, 253, 224, 209, 239, 25, 26, 30, 145, 250, 255, 2, 37, 203, 69, 111, 114, 98, 21, 91, 149, 196, 89, 163, 165, 165, 204, 104, 41, 203, 101, 255, 208, 177, 30, 81, 5, 41, 221, 55, 219, 57, 93, 41, 54, 145, 86, 183, 69, 224, 108, 240, 127, 113, 161, 220, 147, 159, 11, 149, 188, 155, 54, 65, 58, 213, 3, 240, 230, 180, 254, 19, 20, 83, 90, 142, 187, 254, 194, 140, 52, 162, 200, 51, 16, 243, 138, 111, 54, 74, 61, 194, 68, 199, 98, 156, 141, 244, 204, 113, 218, 106, 67, 165, 255, 108, 169, 58, 55, 163, 229, 121, 4, 209, 15, 216, 60, 29, 185, 33, 150, 27, 232, 33, 79, 31, 220, 66, 182, 212, 254, 214, 38, 24, 38, 227, 132, 238, 8, 57, 208, 235, 52, 139, 82, 202, 134, 48, 40, 111, 215, 80, 124, 211, 251, 121, 25, 47, 153, 50, 203, 84, 151, 160, 26, 232, 184, 246, 218, 56, 131, 176, 58, 240, 168, 113, 217, 230, 108, 123, 81, 19, 71, 252, 49, 105, 186, 176, 77, 217, 243, 223, 154, 213, 150, 221, 17, 207, 224, 190, 46, 90, 172, 203, 206, 63, 163, 92, 129, 230, 0, 102, 233, 181, 122, 178, 220, 21, 216, 130, 27, 182, 181, 28, 9, 238, 96, 226, 145, 69, 119, 221, 253, 166, 65, 4, 243, 106, 183, 228, 194, 117, 131, 65, 145, 31, 3, 128, 131, 62, 215, 113, 50, 159, 218, 227, 225, 164, 10, 114, 48, 145, 194, 228, 86, 12, 241, 172, 179, 55, 62, 180, 78, 182, 80, 136, 118, 200, 28, 158, 113, 157, 21, 245, 231, 63, 34, 68, 175, 204, 165, 108, 220, 95, 108, 132, 247, 35, 174, 66, 55, 65, 163, 93, 205, 126, 137, 181, 218, 76, 208, 124, 26, 78, 29, 180, 140, 190, 248, 12, 8, 150, 5, 23, 61, 208, 151, 241, 102, 169, 87, 20, 89, 191, 251, 165, 97, 66, 60, 54, 22, 213, 121, 36, 241, 214, 168, 238, 181, 22, 189, 147, 254, 174, 164, 67, 127, 201, 34, 82, 212, 2, 135, 154, 39, 92, 47, 44, 80, 223, 112, 80, 27, 127, 83, 164, 27, 90, 201, 148, 19, 52, 165, 98, 83, 52, 89, 27, 35, 107, 71, 213, 200, 157, 1, 165, 221, 239, 199, 65, 118, 51, 236, 241, 16, 236, 231, 42, 64, 79, 34, 51, 100, 146, 95, 150, 23, 183, 160, 123, 116, 9, 91, 29, 17, 222, 49, 72, 221, 231, 171, 48, 191, 233, 30, 138, 134, 245, 77, 132, 230, 172, 13, 144, 222, 49, 218, 90, 184, 227, 100, 195, 82, 194, 71, 151, 128, 21, 165, 21, 126, 85, 154, 119, 30, 64, 82, 182, 235, 47, 13, 99, 92, 177, 57, 9, 103, 241, 142, 38, 105, 198, 170, 30, 244, 98, 74, 52, 69, 159, 33, 131, 112, 27, 100, 93, 92, 179, 118, 232, 231, 242, 174, 70, 67, 164, 37, 10, 169, 160, 7, 38, 244, 229, 92, 185, 160, 65, 133, 82, 83, 96, 212, 146, 164, 225, 69, 151, 227, 247, 191, 183, 185, 241, 90, 247, 72, 109, 153, 197, 68, 203, 13, 186, 250, 225, 184, 28, 192, 236, 90, 225, 90, 73, 117, 124, 120, 115, 37, 68, 76, 108, 218, 40, 178, 53, 127, 59, 129, 124, 201, 138, 77, 125, 32, 128, 92, 119, 96, 121, 66, 216, 79, 214, 216, 192, 173, 161, 64, 86, 253, 139, 189, 225, 230, 127, 183, 71, 105, 91, 243, 170, 26, 7, 33, 236, 104, 255, 38, 223, 159, 18, 87, 222, 13, 82, 214, 165, 205, 30, 166, 251, 206, 244, 187, 234, 131, 44, 24, 189, 185, 43, 129, 220, 115, 53, 82, 165, 139, 250, 248, 154, 23, 60, 199, 186, 227, 30, 229, 111, 239, 75, 87, 85, 168, 8, 212, 20, 230, 49, 111, 82, 207, 21, 81, 79, 61, 156, 42, 55, 233, 200, 216, 118, 49, 139, 227, 83, 237, 93, 156, 147, 166, 5, 141, 29, 125, 65, 1, 86, 46, 62, 6, 217, 36, 202, 115, 0, 188, 96, 47, 81, 120, 121, 3, 14, 102, 181, 121, 145, 40, 76, 220, 227, 146, 20, 64, 27, 48, 48, 229, 208, 176, 231, 204, 187, 170, 122, 7, 79, 156, 139, 137, 73, 13, 35, 79, 116, 249, 211, 248, 203, 26, 104, 41, 88, 172, 11, 234, 141, 108, 187, 187, 80, 187, 147, 108, 95, 238, 207, 250, 195, 164, 27, 98, 81, 84, 26, 81, 144, 255, 67, 250, 35, 30, 144, 229, 175, 46, 85, 217, 45, 219, 116, 124, 223, 33, 18, 23, 160, 226, 193, 252, 75, 91, 170, 128, 126, 112, 236, 33, 221, 95, 155, 189, 199, 60, 0, 73, 86, 186, 70, 37, 16, 99, 48, 137, 184, 14, 123, 166, 130, 168, 203, 211, 51, 26, 106, 144, 208, 228, 86, 87, 4, 200, 213, 29, 119, 176, 70, 191, 132, 217, 145, 22, 132, 37, 165, 86, 98, 31, 214, 27, 200, 5, 46, 122, 242, 23, 106, 185, 34, 182, 13, 60, 3, 124, 218, 39, 164, 12, 134, 53, 218, 231, 172, 133, 85, 246, 68, 64, 253, 97, 154, 152, 133, 27, 230, 218, 6, 54, 125, 51, 14, 228, 100, 235, 46, 116, 73, 232, 209, 84, 134, 102, 36, 207, 121, 128, 68, 111, 83, 24, 47, 27, 60, 152, 139, 245, 217, 194, 237, 67, 54, 57, 249, 3, 148, 245, 52, 149, 185, 213, 244, 217, 195, 97, 119, 204, 103, 66, 138, 166, 14, 115, 180, 88, 200, 146, 251, 29, 138, 93, 0, 58, 248, 92, 241, 187, 89, 162, 62, 243, 66, 241, 86, 127, 158, 178, 201, 74, 30, 178, 60, 0, 82, 22, 139, 57, 249, 108, 98, 152, 137, 109, 123, 154, 55, 116, 48, 44, 175, 184, 149, 232, 178, 144, 12, 206, 4, 9, 236, 78, 136, 15, 229, 151, 99, 196, 215, 211, 181, 244, 103, 254, 108, 106, 200, 62, 79, 95, 185, 42, 218, 113, 116, 253, 214, 103, 106, 87, 62, 121, 177, 37, 222, 222, 2, 253, 189, 19, 225, 67, 132, 46, 225, 64, 150, 43, 100, 209, 196, 38, 169, 153, 10, 191, 167, 222, 248, 45, 139, 180, 8, 162, 110, 17, 20, 52, 109, 105, 129, 90, 169, 22, 237, 201, 198, 251, 181, 148, 79, 249, 141, 195, 120, 23, 217, 64, 94, 102, 179, 37, 227, 72, 134, 11, 173, 1, 17, 248, 5, 196, 3, 15, 201, 213, 0, 176, 95, 130, 24, 17, 131, 166, 209, 234, 236, 27, 167, 188, 93, 197, 78, 78, 132, 86, 89, 6, 60, 35, 202, 109, 8, 156, 54, 135, 218, 110, 15, 149, 253, 229, 119, 196, 49, 182, 232, 165, 144, 126, 223, 55, 190, 89, 85, 113, 75, 123, 24, 49, 174, 125, 237, 127, 202, 219, 156, 40, 105, 197, 4, 166, 106, 161, 15, 105, 5, 86, 193, 72, 204, 19, 151, 75, 113, 36, 58, 69, 204, 252, 143, 149, 188, 1, 140, 48, 87, 14, 155, 118, 82, 138, 9, 239, 88, 63, 195, 209, 228, 33, 155, 226, 108, 29, 46, 117, 251, 160, 213, 207, 128, 102, 181, 158, 192, 64, 111, 71, 88, 56, 209, 54, 144, 90, 202, 193, 220, 9, 61, 34, 202, 226, 171, 9, 201, 89, 134, 210, 38, 115, 11, 253, 49, 202, 32, 0, 170, 32, 235, 67, 168, 145, 102, 41, 8, 244, 101, 60, 223, 255, 79, 142, 75, 196, 208, 214, 38, 27, 100, 94, 213, 8, 203, 39, 49, 78, 44, 151, 157, 65, 175, 196, 185, 150, 115, 167, 181, 237, 127, 191, 207, 219, 150, 81, 185, 30, 72, 63, 64, 62, 231, 54, 213, 113, 252, 44, 18, 47, 129, 19, 92, 229, 86, 71, 48, 79, 249, 34, 143, 249, 112, 185, 119, 36, 170, 22, 26, 181, 230, 254, 182, 60, 186, 206, 38, 249, 93, 67, 251, 192, 80, 197, 174, 137, 167, 124, 198, 240, 195, 143, 68, 233, 176, 29, 216, 252, 104, 23, 150, 170, 69, 46, 193, 222, 114, 175, 67, 218, 159, 31, 222, 125, 176, 51, 24, 74, 30, 23, 80, 132, 80, 150, 220, 223, 253, 84, 142, 189, 199, 221, 157, 155, 158, 72, 151, 245, 224, 93, 74, 15, 47, 181, 73, 222, 9, 162, 140, 185, 42, 232, 216, 201, 185, 69, 166, 12, 97, 174, 27, 2, 143, 198, 130, 132, 145, 66, 185, 73, 203, 118, 165, 226, 64, 134, 47, 25, 45, 234, 9, 145, 103, 117, 179, 160, 54, 224, 140, 111, 177, 195, 59, 126, 170, 41, 255, 196, 7, 143, 42, 75, 146, 192, 249, 250, 5, 3, 149, 217, 224, 56, 110, 41, 99, 42, 152, 130, 151, 135, 180, 171, 210, 87, 116, 2, 38, 106, 240, 54, 123, 91, 42, 187, 248, 242, 9, 173, 80, 231, 91, 31, 199, 83, 120, 224, 4, 213, 77, 167, 221, 27, 199, 171, 65, 197, 38, 137, 64, 14, 45, 206, 59, 253, 167, 55, 253, 146, 25, 245, 124, 174, 145, 128, 243, 40, 250, 132, 81, 62, 141, 37, 93, 220, 236, 60, 41, 90, 165, 153, 2, 245, 28, 231, 25, 63, 28, 205, 117, 38, 156, 199, 73, 35, 136, 111, 54, 58, 206, 203, 240, 99, 223, 8, 65, 239, 111, 22, 231, 99, 125, 39, 134, 255, 249, 249, 134, 208, 82, 26, 185, 98, 66, 155, 203, 73, 209, 112, 173, 216, 69, 102, 62, 134, 179, 217, 2, 216, 14, 212, 36, 208, 194, 94, 59, 102, 60, 86, 218, 76, 182, 162, 84, 22, 225, 44, 238, 185, 177, 107, 96, 207, 236, 18, 160, 60, 97, 228, 248, 162, 93, 126, 21, 142, 215, 183, 206, 63, 248, 156, 7, 136, 203, 52, 0, 38, 120, 14, 12, 103, 71, 133, 157, 154, 65, 75, 133, 49, 166, 47, 114, 108, 143, 144, 142, 46, 25, 255, 2, 206, 200, 86, 202, 114, 91, 251, 50, 169, 68, 238, 107, 183, 164, 183, 104, 208, 98, 105, 109, 88, 132, 83, 61, 16, 222, 221, 205, 152, 122, 72, 252, 140, 170, 19, 215, 213, 52, 6, 55, 212, 191, 106, 66, 29, 235, 221, 35, 87, 208, 120, 144, 110, 122, 98, 234, 139, 59, 192, 105, 119, 169, 202, 185, 10, 213, 208, 59, 16, 122, 91, 112, 106, 162, 18, 56, 111, 69, 242, 124, 243, 221, 96, 2, 175, 96, 27, 196, 121, 118, 190, 228, 176, 9, 246, 127, 179, 23, 84, 96, 179, 54, 89, 175, 68, 9, 199, 88, 194, 247, 66, 44, 85, 1, 155, 120, 250, 216, 159, 184, 119, 102, 59, 77, 206, 209, 204, 236, 54, 213, 97, 23, 173, 88, 74, 201, 5, 75, 5, 87, 248, 42, 203, 80, 211, 88, 153, 224, 206, 148, 184, 161, 12, 224, 158, 62, 140, 251, 97, 103, 202, 123, 252, 121, 37, 113, 107, 195, 20, 69, 58, 123, 0, 188, 239, 156, 115, 136, 211, 175, 27, 194, 47, 129, 68, 172, 136, 33, 59, 167, 106, 32, 181, 132, 219, 233, 173, 50, 124, 41, 184, 127, 177, 55, 133, 56, 234, 254, 153, 197, 44, 173, 247, 100, 111, 233, 66, 106, 135, 2, 249, 201, 75, 1, 27, 75, 218, 175, 196, 186, 12, 133, 201, 116, 237, 157, 111, 251, 30, 179, 19, 132, 152, 96, 213, 21, 147, 173, 60, 85, 134, 64, 49, 221, 88, 254, 22, 156, 23, 160, 26, 117, 202, 88, 154, 52, 37, 165, 127, 62, 131, 57, 177, 132, 192, 126, 218, 195, 243, 27, 248, 3, 235, 215, 159, 184, 71, 110, 217, 206, 126, 66, 12, 173, 159, 64, 147, 177, 195, 19, 141, 142, 173, 163, 246, 202, 183, 42, 39, 209, 111, 252, 131, 68, 144, 61, 23, 209, 206, 216, 76, 68, 179, 223, 148, 230, 55, 74, 8, 113, 186, 185, 184, 140, 54, 232, 23, 43, 212, 166, 245, 81, 148, 120, 110, 29, 92, 231, 183, 237, 166, 136, 157, 245, 74, 56, 115, 82, 221, 92, 87, 209, 208, 107, 26, 4, 144, 54, 159, 115, 194, 47, 249, 99, 154, 156, 11, 108, 151, 101, 136, 130, 55, 22, 89, 214, 73, 60, 175, 168, 101, 218, 31, 177, 5, 211, 241, 215, 134, 125, 134, 48, 193, 229, 212, 241, 106, 207, 90, 176, 87, 223, 17, 182, 57, 84, 54, 17, 71, 108, 23, 102, 210, 107, 111, 120, 156, 172, 90, 140, 93, 28, 109, 77, 236, 213, 128, 62, 11, 155, 218, 11, 172, 60, 235, 225, 205, 188, 167, 228, 49, 4, 205, 113, 17, 109, 99, 134, 176, 18, 217, 233, 188, 158, 203, 130, 137, 212, 218, 202, 225, 206, 225, 111, 100, 111, 158, 184, 107, 230, 79, 159, 77, 188, 138, 242, 30, 212, 41, 212, 125, 8, 56, 103, 125, 205, 145, 44, 152, 111, 111, 10, 149, 186, 127, 158, 167, 122, 249, 220, 173, 181, 48, 128, 107, 156, 35, 88, 165, 42, 100, 230, 77, 218, 114, 118, 24, 37, 160, 130, 109, 19, 138, 147, 126, 37, 190, 32, 4, 67, 43, 188, 219, 16, 12, 197, 43, 64, 82, 157, 61, 224, 129, 9, 52, 226, 34, 76, 172, 99, 121, 109, 118, 106, 101, 86, 232, 152, 82, 212, 249, 143, 247, 95, 175, 182, 181, 102, 109, 212, 7, 50, 137, 5, 242, 149, 221, 60, 114, 235, 224, 212, 97, 214, 119, 216, 111, 141, 92, 243, 57, 149, 211, 19, 163, 221, 88, 235, 79, 50, 122, 205, 198, 101, 190, 131, 38, 128, 251, 124, 182, 238, 94, 113, 211, 90, 200, 179, 113, 74, 146, 98, 212, 232, 28, 27, 24, 124, 45, 41, 145, 81, 84, 225, 152, 107, 76, 164, 105, 150, 126, 216, 128, 37, 110, 53, 93, 178, 85, 183, 122, 230, 192, 209, 51, 190, 213, 215, 165, 178, 198, 7, 8, 252, 64, 177, 105, 9, 147, 140, 222, 96, 132, 171, 87, 206, 249, 202, 24, 80, 170, 84, 63, 151, 171, 226, 35, 198, 145, 70, 111, 45, 136, 68, 126, 180, 64, 159, 132, 71, 91, 55, 35, 8, 195, 39, 19, 242, 154, 145, 43, 155, 174, 250, 249, 128, 123, 104, 192, 152, 181, 198, 255, 239, 35, 144, 201, 193, 54, 232, 179, 128, 121, 151, 184, 148, 62, 30, 190, 62, 99, 243, 6, 105, 46, 247, 84, 230, 68, 2, 36, 228, 176, 247, 148, 156, 2, 218, 148, 160, 118, 197, 132, 118, 241, 82, 134, 248, 58, 92, 151, 242, 151, 233, 171, 233, 15, 20, 152, 210, 45, 235, 211, 100, 91, 37, 64, 237, 116, 7, 13, 150, 110, 37, 118, 249, 249, 63, 13, 221, 102, 186, 71, 49, 199, 140, 99, 150, 103, 183, 70, 172, 67, 212, 76, 98, 163, 137, 148, 222, 96, 192, 63, 11, 36, 128, 21, 219, 221, 92, 49, 116, 226, 219, 83, 200, 129, 150, 209, 12, 124, 244, 189, 0, 239, 135, 108, 157, 36, 163, 211, 139, 12, 155, 104, 211, 70, 155, 171, 35, 32, 32, 247, 187, 39, 100, 3, 186, 173, 188, 193, 105, 182, 197, 127, 219, 252, 63, 224, 75, 8, 195, 80, 206, 11, 148, 137, 173, 93, 28, 12, 232, 51, 82, 239, 66, 11, 50, 15, 120, 194, 41, 119, 93, 33, 23, 153, 23, 112, 59, 29, 169, 149, 234, 221, 55, 28, 196, 101, 195, 255, 205, 61, 205, 160, 244, 29, 93, 240, 43, 147, 82, 235, 115, 191, 20, 67, 76, 191, 23, 214, 176, 56, 188, 59, 69, 1, 5, 78, 226, 128, 195, 65, 88, 231, 98, 41, 129, 162, 46, 170, 204, 73, 50, 229, 140, 194, 64, 139, 34, 119, 242, 172, 254, 249, 245, 150, 43, 118, 240, 159, 167, 174, 110, 17, 238, 179, 61, 19, 18, 105, 14, 85, 79, 56, 70, 248, 154, 38, 56, 100, 250, 8, 80, 152, 103, 40, 115, 68, 206, 129, 158, 149, 18, 92, 238, 195, 163, 188, 112, 40, 132, 71, 71, 95, 220, 57, 61, 37, 107, 70, 237, 154, 116, 7, 88, 225, 169, 170, 38, 174, 134, 129, 11, 164, 86, 89, 129, 64, 130, 119, 94, 153, 226, 79, 247, 176, 97, 181, 144, 176, 55, 41, 237, 191, 217, 116, 177, 153, 238, 240, 152, 116, 212, 24, 4, 170, 174, 194, 38, 194, 129, 203, 180, 45, 93, 43, 74, 183, 8, 29, 174, 63, 7, 165, 29, 18, 80, 234, 21, 108, 44, 198, 65, 197, 20, 127, 146, 236, 242, 99, 48, 21, 168, 228, 60, 12, 161, 122, 148, 163, 189, 217, 241, 178, 172, 1, 92, 161, 206, 231, 47, 20, 23, 71, 218, 11, 54, 131, 222, 175, 194, 241, 215, 44, 237, 40, 169, 104, 79, 114, 120, 196, 116, 245, 175, 237, 75, 151, 57, 3, 248, 68, 30, 188, 117, 110, 238, 92, 108, 10, 61, 106, 254, 148, 48, 208, 37, 95, 43, 21, 86, 77, 98, 224, 21, 52, 14, 139, 200, 76, 152, 247, 69, 57, 131, 3, 24, 237, 82, 1, 15, 8, 155, 99, 110, 154, 203, 172, 247, 188, 236, 15, 139, 27, 247, 49, 2, 183, 15, 97, 205, 174, 1, 207, 107, 172, 187, 31, 33, 88, 138, 108, 47, 159, 36, 69, 89, 90, 64, 253, 22, 140, 189, 67, 214, 192, 206, 15, 195, 231, 139, 69, 159, 34, 243, 241, 26, 180, 51, 65, 244, 35, 124, 152, 2, 130, 104, 54, 135, 30, 223, 1, 23, 46, 246, 76, 192, 155, 212, 30, 207, 167, 166, 212, 31, 49, 133, 99, 114, 78, 24, 235, 147, 180, 48, 70, 39, 179, 9, 96, 91, 45, 161, 49, 125, 249, 117, 131, 248, 9, 75, 213, 201, 116, 24, 40, 125, 148, 233, 74, 156, 218, 223, 35, 19, 117, 111, 108, 208, 53, 62, 200, 185, 234, 109, 246, 207, 251, 184, 242, 232, 117, 230, 241, 91, 220, 210, 224, 250, 5, 246, 238, 122, 66, 208, 196, 87, 73, 194, 226, 24, 141, 245, 90, 110, 52, 150, 119, 241, 237, 109, 108, 73, 230, 249, 124, 114, 132, 74, 120, 92, 39, 165, 145, 192, 147, 93, 243, 75, 189, 22, 109, 16, 23, 43, 51, 114, 88, 193, 164, 232, 148, 83, 118, 101, 248, 171, 243, 104, 240, 131, 50, 252, 27, 45, 206, 251, 183, 29, 169, 145, 121, 246, 38, 118, 17, 212, 82, 141, 139, 51, 194, 195, 177, 231, 128, 112, 62, 192, 53, 251, 110, 25, 213, 18, 50, 170, 152, 36, 215, 241, 79, 133, 135, 44, 17, 181, 220, 132, 67, 86, 62, 79, 78, 139, 1, 104, 125, 88, 88, 10, 12, 129, 153, 58, 211, 28, 115, 167, 105, 120, 19, 16, 137, 80, 189, 134, 179, 95, 65, 133, 4, 191, 232, 20, 64, 137, 199, 52, 57, 185, 120, 192, 17, 88, 62, 29, 236, 29, 0, 150, 84, 81, 214, 218, 252, 225, 35, 91, 135, 53, 131, 21, 150, 161, 86, 217, 211, 133, 41, 210, 158, 96, 128, 201, 178, 22, 34, 30, 162, 196, 182, 27, 135, 206, 184, 107, 89, 72, 85, 207, 154, 171, 130, 90, 123, 140, 59, 193, 86, 234, 210, 217, 244, 218, 228, 96, 65, 101, 74, 48, 59, 148, 50, 16, 254, 68, 108, 252, 91, 208, 69, 128, 98, 24, 193, 215, 207, 183, 76, 18, 252, 252, 203, 2, 205, 85, 64, 241, 47, 59, 116, 18, 33, 71, 43, 207, 136, 113, 232, 104, 72, 56, 3, 207, 201, 98, 163, 115, 233, 20, 248, 28, 226, 77, 39, 31, 168, 80, 62, 151, 241, 231, 222, 105, 138, 24, 64, 38, 114, 234, 178, 60, 204, 153, 143, 122, 47, 140, 78, 194, 4, 253, 37, 110, 71, 60, 179, 183, 241, 20, 150, 72, 116, 246, 150, 175, 7, 47, 184, 101, 72, 151, 162, 187, 57, 248, 104, 2, 220, 196, 100, 148, 62, 156, 68, 204, 161, 164, 176, 166, 214, 185, 231, 247, 162, 47, 135, 9, 4, 96, 211, 154, 223, 9, 246, 220, 31, 48, 75, 230, 9, 184, 177, 240, 219, 61, 138, 193, 4, 241, 255, 50, 128, 112, 218, 89, 212, 222, 58, 101, 132, 217, 97, 137, 90, 222, 69, 16, 186, 53, 223, 54, 36, 157, 1, 77, 12, 77, 9, 89, 121, 154, 82, 219, 122, 242, 220, 1, 197, 34, 255, 10, 105, 125, 47, 107, 57, 150, 144, 197, 169, 122, 16, 241, 151, 203, 23, 250, 83, 171, 150, 247, 215, 214, 245, 6, 215, 172, 83, 119, 95, 11, 243, 11, 227, 114, 10, 154, 150, 255, 1, 233, 86, 88, 4, 16, 3, 247, 18, 119, 111, 254, 21, 209, 75, 241, 249, 233, 158, 204, 75, 34, 89, 215, 1, 250, 26, 205, 184, 16, 22, 74, 135, 241, 148, 87, 246, 75, 22, 158, 250, 106, 70, 89, 44, 230, 37, 217, 116, 158, 170, 63, 196, 157, 220, 69, 119, 238, 74, 36, 248, 207, 161, 162, 169, 70, 85, 212, 183, 183, 72, 31, 146, 87, 45, 129, 195, 219, 46, 18, 48, 84, 134, 139, 176, 109, 234, 147, 177, 51, 51, 79, 252, 175, 249, 194, 170, 110, 80, 39, 158, 29, 116, 18, 192, 184, 120, 102, 197, 53, 22, 4, 238, 231, 252, 48, 164, 136, 151, 229, 134, 240, 56, 187, 142, 141, 51, 1, 166, 176, 224, 118, 29, 133, 70, 167, 190, 73, 177, 140, 92, 201, 147, 20, 146, 182, 45, 82, 190, 236, 165, 219, 67, 131, 158, 45, 213, 84, 210, 24, 211, 191, 34, 156, 199, 237, 92, 156, 214, 53, 103, 239, 195, 158, 140, 195, 120, 21, 106, 57, 214, 124, 135, 97, 208, 108, 171, 158, 8, 27, 12, 80, 202, 69, 134, 196, 250, 205, 119, 232, 104, 194, 52, 56, 25, 186, 212, 38, 161, 209, 226, 3, 118, 25, 219, 224, 62, 9, 154, 36, 235, 27, 118, 209, 14, 142, 121, 30, 149, 5, 203, 253, 176, 136, 165, 8, 47, 242, 115, 68, 3, 251, 220, 146, 160, 158, 199, 117, 19, 56, 36, 61, 51, 72, 212, 66, 174, 236, 60, 97, 194, 129, 20, 38, 237, 170, 89, 87, 253, 231, 116, 34, 11, 20, 152, 75, 225, 114, 5, 185, 80, 138, 162, 76, 49, 247, 202, 46, 94, 75, 50, 90, 211, 241, 20, 18, 146, 172, 245, 35, 137, 181, 15, 238, 63, 80, 50, 121, 180, 125, 94, 143, 244, 206, 86, 221, 111, 175, 249, 137, 91, 126, 148, 249, 216, 55, 242, 157, 88, 66, 215, 240, 204, 165, 208, 57, 226, 115, 207, 20, 166, 56, 93, 180, 222, 210, 223, 158, 252, 157, 76, 93, 80, 48, 241, 230, 20, 127, 146, 127, 39, 106, 224, 35, 212, 34, 20, 205, 16, 18, 77, 210, 241, 166, 95, 203, 113, 36, 202, 205, 120, 167, 88, 189, 248, 74, 75, 33, 243, 97, 101, 205, 66, 188, 86, 12, 130, 137, 52, 110, 229, 250, 48, 194, 118, 152, 235, 25, 7, 229, 225, 99, 184, 64, 177, 231, 228, 131, 130, 156, 149, 253, 14, 77, 229, 151, 137, 191, 108, 211, 195, 97, 165, 209, 83, 231, 220, 0, 93, 152, 116, 119, 191, 90, 68, 31, 49, 129, 145, 187, 238, 50, 20, 44, 114, 196, 98, 165, 48, 42, 96, 167, 31, 11, 247, 97, 0, 8, 4, 105, 152, 42, 161, 52, 109, 113, 216, 183, 219, 175, 138, 82, 72, 116, 2, 157, 194, 253, 102, 203, 254, 239, 162, 26, 54, 87, 149, 208, 157, 184, 245, 94, 217, 164, 11, 177, 53, 37, 181, 134, 65, 84, 19, 136, 125, 116, 129, 87, 199, 59, 16, 28, 208, 19, 173, 126, 238, 7, 228, 168, 237, 64, 142, 143, 97, 194, 81, 26, 166, 137, 209, 159, 239, 43, 97, 177, 132, 51, 145, 7, 119, 244, 196, 2, 143, 2, 202, 133, 11, 237, 214, 114, 163, 199, 44, 132, 228, 142, 39, 104, 166, 94, 184, 162, 138, 163, 214, 134, 30, 188, 199, 178, 147, 189, 80, 35, 172, 42, 160, 254, 172, 4, 194, 189, 173, 119, 220, 44, 125, 176, 139, 95, 122, 155, 187, 168, 238, 93, 79, 154, 192, 7, 249, 255, 19, 70, 136, 107, 168, 135, 72, 25, 142, 82, 77, 200, 73, 55, 190, 130, 54, 87, 222, 161, 14, 46, 35, 255, 186, 150, 74, 238, 58, 77, 205, 128, 10, 153, 192, 232, 148, 178, 193, 80, 105, 144, 7, 59, 138, 206, 135, 50, 21, 10, 173, 229, 87, 119, 220, 145, 52, 173, 86, 145, 107, 164, 238, 191, 78, 247, 242, 104, 34, 123, 211, 178, 133, 213, 183, 183, 25, 16, 86, 72, 148, 245, 80, 65, 41, 129, 214, 254, 73, 249, 172, 169, 199, 214, 184, 241, 24, 153, 245, 152, 2, 26, 103, 116, 71, 187, 169, 208, 232, 40, 33, 94, 147, 76, 249, 199, 203, 160, 225, 190, 229, 131, 51, 199, 207, 101, 48, 58, 178, 147, 66, 82, 237, 137, 39, 186, 86, 83, 199, 13, 26, 191, 98, 223, 213, 7, 38, 23, 81, 137, 168, 60, 87, 189, 63, 227, 110, 221, 189, 199, 201, 146, 51, 2, 1, 159, 172, 178, 191, 70, 123, 23, 120, 112, 207, 233, 23, 233, 191, 9, 233, 49, 7, 100, 115, 175, 228, 2, 93, 223, 224, 245, 209, 216, 235, 236, 155, 67, 83, 243, 174, 95, 139, 72, 1, 196, 151, 180, 149, 176, 239, 45, 10, 62, 184, 179, 237, 36, 38, 42, 181, 57, 7, 3, 195, 212, 238, 199, 49, 63, 156, 68, 90, 44, 170, 113, 62, 195, 96, 44, 164, 137, 169, 160, 63, 2, 26, 155, 185, 46, 165, 116, 247, 160, 181, 205, 180, 35, 142, 76, 106, 66, 248, 179, 6, 32, 37, 143, 222, 235, 21, 82, 187, 138, 179, 252, 51, 157, 195, 102, 239, 251, 30, 107, 68, 165, 85, 167, 119, 251, 176, 90, 67, 176, 102, 97, 62, 170, 198, 230, 240, 55, 18, 15, 13, 213, 207, 108, 112, 11, 208, 180, 6, 195, 138, 171, 51, 113, 181, 232, 60, 216, 128, 190, 186, 123, 144, 108, 0, 26, 196, 224, 219, 170, 97, 254, 72, 5, 116, 198, 158, 117, 87, 187, 172, 181, 10, 173, 46, 103, 215, 111, 54, 170, 166, 197, 77, 205, 52, 153, 90, 119, 43, 211, 215, 223, 143, 163, 63, 112, 103, 55, 250, 147, 122, 214, 19, 131, 123, 231, 48, 159, 107, 198, 35, 9, 3, 159, 86, 100, 1, 230, 227, 33, 72, 118, 194, 244, 233, 75, 76, 221, 47, 240, 56, 30, 234, 136, 0, 98, 232, 207, 196, 145, 97, 62, 6, 191, 5, 113, 114, 163, 217, 239, 87, 219, 140, 65, 243, 238, 219, 133, 73, 220, 23, 77, 26, 67, 10, 74, 56, 87, 37, 54, 97, 197, 83, 134, 93, 31, 146, 62, 2, 174, 38, 43, 12, 197, 165, 42, 75, 23, 139, 173, 77, 103, 253, 101, 91, 173, 14, 80, 213, 196, 42, 14, 151, 91, 209, 67, 108, 181, 36, 224, 67, 3, 138, 201, 111, 160, 49, 151, 15, 19, 65, 101, 210, 74, 10, 200, 3, 38, 135, 23, 174, 114, 71, 234, 179, 246, 186, 218, 174, 219, 243, 175, 181, 138, 88, 233, 119, 61, 11, 72, 84, 191, 184, 160, 97, 86, 6, 26, 90, 121, 136, 70, 197, 152, 95, 232, 189, 142, 105, 156, 13, 23, 22, 201, 190, 178, 176, 78, 112, 228, 96, 227, 220, 60, 164, 190, 84, 235, 115, 151, 233, 220, 243, 6, 203, 183, 0, 6, 204, 3, 75, 35, 156, 13, 88, 137, 52, 46, 109, 114, 114, 222, 65, 74, 145, 174, 66, 74, 58, 109, 202, 89, 14, 154, 93, 48, 250, 140, 106, 65, 52, 191, 41, 180, 110, 17, 114, 15, 250, 82, 24, 252, 206, 220, 130, 84, 69, 90, 68, 32, 172, 20, 176, 135, 104, 188, 98, 129, 182, 170, 240, 119, 150, 172, 235, 218, 105, 196, 57, 121, 127, 190, 126, 210, 186, 72, 28, 122, 6, 11, 180, 3, 80, 171, 166, 91, 153, 13, 119, 233, 91, 240, 233, 49, 132, 7, 181, 43, 248, 145, 246, 159, 193, 183, 154, 14, 204, 125, 106, 104, 37, 5, 53, 106, 209, 142, 132, 36, 233, 89, 46, 245, 159, 102, 126, 191, 239, 14, 229, 156, 30, 16, 90, 103, 57, 104, 68, 175, 86, 85, 244, 179, 26, 59, 26, 221, 190, 28, 33, 39, 120, 191, 227, 80, 145, 145, 145, 68, 211, 174, 179, 8, 127, 198, 211, 20, 151, 39, 177, 88, 182, 54, 85, 86, 105, 216, 80, 27, 3, 173, 172, 180, 120, 179, 194, 122, 63, 215, 98, 211, 65, 157, 128, 53, 35, 87, 37, 231, 22, 125, 199, 251, 91, 65, 155, 133, 142, 188, 69, 32, 10, 19, 66, 81, 200, 249, 87, 235, 209, 15, 51, 136, 219, 22, 174, 70, 84, 114, 116, 140, 204, 3, 173, 55, 172, 229, 171, 154, 117, 190, 166, 137, 179, 92, 166, 247, 148, 18, 231, 181, 91, 107, 143, 251, 68, 7, 180, 80, 146, 5, 32, 58, 137, 246, 23, 129, 83, 167, 201, 46, 13, 211, 126, 134, 216, 67, 99, 116, 254, 127, 150, 89, 154, 207, 80, 177, 165, 226, 199, 244, 64, 236, 38, 200, 98, 36, 187, 58, 43, 200, 150, 17, 48, 73, 156, 241, 92, 162, 157, 191, 114, 73, 200, 82, 50, 136, 181, 46, 106, 30, 38, 25, 18, 183, 139, 152, 76, 67, 203, 220, 81, 219, 115, 144, 70, 24, 199, 253, 17, 106, 179, 112, 254, 228, 245, 78, 17, 134, 251, 181, 221, 25, 135, 104, 164, 76, 162, 63, 141, 138, 219, 233, 215, 60, 250, 119, 200, 182, 249, 199, 225, 21, 95, 33, 221, 78, 184, 153, 186, 170, 84, 37, 185, 181, 46, 66, 147, 201, 229, 217, 106, 105, 168, 17, 246, 106, 116, 4, 136, 220, 137, 120, 151, 74, 29, 171, 117, 226, 59, 193, 177, 168, 51, 153, 220, 95, 192, 216, 249, 106, 181, 60, 206, 246, 15, 74, 17, 205, 229, 0, 14, 123, 92, 227, 220, 178, 8, 196, 98, 254, 12, 125, 99, 94, 161, 159, 31, 115, 129, 184, 9, 193, 5, 217, 73, 240, 218, 124, 130, 251, 92, 188, 93, 78, 68, 218, 150, 185, 243, 19, 78, 122, 53, 131, 153, 95, 226, 241, 154, 160, 29, 251, 239, 115, 177, 19, 37, 5, 176, 134, 124, 139, 225, 92, 68, 162, 84, 82, 71, 22, 111, 249, 129, 204, 63, 56, 164, 244, 158, 197, 23, 144, 89, 147, 13, 210, 72, 60, 238, 182, 177, 65, 119, 247, 214, 182, 217, 131, 176, 142, 157, 236, 57, 59, 89, 152, 18, 44, 5, 185, 23, 117, 139, 107, 169, 5, 22, 10, 64, 43, 78, 185, 149, 179, 204, 237, 183, 213, 233, 41, 233, 183, 107, 28, 77, 243, 31, 37, 106, 225, 68, 150, 164, 210, 144, 9, 223, 80, 226, 162, 221, 187, 13, 70, 85, 229, 158, 25, 8, 184, 167, 4, 104, 178, 224, 65, 111, 191, 55, 145, 102, 124, 185, 170, 35, 231, 24, 179, 135, 122, 216, 185, 249, 240, 140, 128, 109, 10, 160, 131, 251, 186, 148, 88, 48, 34, 165, 235, 23, 218, 204, 89, 169, 79, 148, 235, 247, 90, 106, 207, 150, 51, 35, 116, 214, 52, 138, 176, 11, 160, 194, 238, 143, 241, 17, 253, 90, 78, 101, 71, 197, 243, 235, 50, 241, 176, 40, 247, 125, 67, 172, 165, 192, 86, 59, 204, 155, 183, 135, 168, 232, 212, 0, 190, 100, 52, 143, 246, 108, 81, 80, 9, 16, 34, 119, 112, 79, 202, 8, 237, 174, 117, 130, 253, 85, 194, 186, 133, 146, 145, 205, 6, 156, 73, 66, 82, 86, 44, 223, 238, 94, 9, 3, 17, 125, 110, 10, 240, 92, 92, 82, 197, 207, 9, 191, 212, 255, 63, 136, 17, 138, 10, 97, 72, 195, 65, 146, 227, 178, 187, 206, 206, 22, 212, 13, 96, 110, 211, 128, 26, 61, 96, 227, 35, 148, 223, 166, 16, 61, 225, 132, 138, 191, 170, 115, 234, 88, 45, 146, 247, 125, 93, 51, 64, 38, 228, 6, 25, 60, 48, 57, 222, 117, 243, 246, 247, 46, 37, 107, 75, 42, 209, 49, 239, 31, 52, 41, 240, 79, 132, 234, 149, 211, 182, 40, 22, 6, 70, 244, 21, 101, 173, 153, 19, 174, 153, 95, 177, 81, 154, 152, 179, 216, 107, 88, 91, 7, 57, 73, 38, 19, 176, 216, 6, 73, 157, 6, 83, 194, 6, 7, 112, 131, 240, 22, 7, 216, 59, 175, 221, 79, 104, 227, 86, 143, 78, 47, 148, 47, 56, 126, 27, 64, 232, 105, 102, 18, 54, 68, 159, 154, 33, 43, 245, 96, 55, 60, 8, 77, 151, 62, 47, 72, 158, 4, 107, 3, 54, 40, 149, 252, 166, 72, 237, 77, 94, 168, 193, 255, 207, 209, 184, 176, 105, 141, 242, 53, 248, 206, 241, 91, 23, 198, 5, 60, 50, 139, 111, 137, 191, 234, 240, 176, 142, 213, 113, 58, 28, 114, 76, 153, 128, 41, 139, 95, 105, 24, 188, 226, 215, 236, 16, 125, 102, 224, 38, 77, 69, 13, 225, 12, 48, 61, 110, 153, 255, 83, 124, 185, 121, 74, 4, 23, 161, 184, 102, 68, 74, 18, 81, 186, 180, 171, 83, 231, 148, 249, 188, 86, 132, 140, 220, 51, 56, 186, 159, 188, 173, 226, 87, 186, 52, 137, 122, 138, 25, 53, 213, 188, 202, 158, 203, 166, 131, 60, 182, 190, 78, 20, 114, 78, 108, 112, 178, 77, 102, 81, 170, 135, 238, 180, 27, 7, 187, 172, 50, 117, 239, 162, 177, 228, 160, 148, 169, 4, 132, 238, 118, 191, 201, 17, 50, 159, 120, 204, 44, 26, 219, 100, 70, 161, 184, 252, 95, 64, 225, 211, 60, 88, 128, 96, 176, 208, 84, 115, 220, 56, 231, 8, 86, 205, 229, 166, 58, 78, 227, 66, 233, 16, 4, 243, 107, 104, 43, 121, 223, 0, 46, 178, 86, 218, 132, 17, 33, 151, 104, 216, 86, 124, 217, 182, 121, 27, 47, 5, 43, 50, 120, 27, 161, 7, 203, 118, 247, 85, 165, 166, 214, 210, 243, 85, 55, 18, 146, 210, 99, 40, 249, 141, 231, 169, 19, 49, 40, 169, 200, 37, 2, 158, 97, 147, 217, 20, 11, 151, 64, 41, 69, 229, 1, 22, 161, 106, 238, 216, 84, 191, 132, 57, 182, 129, 146, 67, 4, 149, 11, 12, 29, 219, 202, 207, 58, 142, 84, 157, 116, 24, 214, 154, 59, 132, 243, 48, 163, 169, 112, 247, 35, 18, 52, 189, 180, 26, 68, 173, 12, 131, 50, 48, 238, 129, 174, 249, 54, 255, 211, 21, 159, 244, 132, 183, 49, 188, 235, 149, 215, 152, 33, 237, 162, 168, 186, 63, 165, 63, 217, 1, 65, 2, 132, 182, 113, 207, 135, 166, 68, 241, 110, 51, 224, 80, 219, 208, 223, 141, 71, 35, 247, 207, 160, 52, 218, 91, 171, 45, 136, 145, 160, 253, 102, 66, 75, 65, 106, 98, 128, 15, 112, 0, 121, 167, 189, 123, 144, 143, 121, 70, 183, 226, 192, 170, 13, 65, 110, 20, 28, 21, 43, 82, 229, 225, 6, 223, 12, 199, 100, 21, 166, 18, 243, 184, 130, 130, 236, 159, 12, 172, 68, 242, 21, 198, 121, 119, 228, 2, 152, 109, 127, 144, 151, 171, 75, 246, 189, 173, 48, 47, 42, 7, 14, 207, 154, 68, 34, 194, 207, 129, 62, 142, 112, 66, 1, 20, 174, 196, 185, 213, 170, 118, 34, 96, 40, 164, 125, 99, 49, 168, 221, 85, 61, 22, 180, 104, 253, 195, 162, 105, 144, 20, 29, 251, 224, 66, 64, 37, 198, 93, 131, 34, 132, 66, 219, 108, 15, 114, 207, 13, 206, 97, 18, 119, 195, 18, 184, 117, 196, 1, 19, 185, 32, 1, 249, 73, 243, 105, 41, 105, 198, 200, 233, 1, 222, 83, 37, 112, 201, 115, 109, 71, 235, 72, 41, 150, 168, 197, 249, 32, 161, 29, 164, 147, 198, 18, 130, 33, 147, 93, 165, 59, 76, 204, 138, 27, 2, 147, 197, 27, 152, 207, 56, 21, 136, 66, 201, 12, 117, 39, 242, 90, 203, 70, 26, 89, 215, 223, 223, 37, 174, 218, 128, 66, 238, 116, 91, 189, 222, 47, 11, 231, 71, 170, 158, 177, 216, 30, 32, 47, 198, 133, 159, 199, 68, 49, 218, 122, 46, 214, 216, 236, 113, 85, 244, 153, 220, 112, 86, 39, 174, 133, 197, 21, 146, 34, 154, 198, 47, 152, 12, 151, 15, 159, 204, 12, 4, 244, 234, 199, 24, 205, 62, 220, 180, 177, 16, 37, 69, 209, 85, 41, 195, 224, 66, 236, 219, 35, 244, 79, 114, 9, 13, 66, 234, 209, 92, 34, 195, 46, 56, 206, 33, 231, 143, 197, 239, 26, 149, 97, 89, 99, 250, 16, 16, 84, 165, 235, 184, 9, 205, 95, 7, 13, 161, 219, 61, 106, 221, 250, 45, 134, 250, 168, 132, 116, 186, 63, 78, 39, 31, 229, 55, 182, 56, 161, 126, 78, 8, 12, 33, 195, 113, 144, 96, 248, 44, 37, 70, 194, 18, 62, 233, 162, 164, 244, 84, 16, 140, 172, 42, 62, 44, 124, 124, 248, 142, 99, 17, 90, 187, 129, 190, 60, 222, 82, 113, 107, 72, 160, 219, 164, 206, 181, 39, 160, 144, 44, 190, 74, 6, 122, 193, 59, 20, 34, 128, 194, 96, 45, 235, 134, 221, 149, 64, 220, 180, 163, 126, 96, 213, 116, 167, 65, 6, 175, 132, 31, 193, 216, 178, 8, 95, 213, 51, 37, 21, 24, 93, 29, 53, 78, 189, 54, 90, 225, 197, 164, 197, 245, 181, 35, 10, 125, 76, 172, 134, 183, 246, 252, 165, 25, 75, 105, 157, 67, 220, 137, 63, 103, 197, 248, 197, 85, 52, 222, 12, 135, 108, 145, 137, 130, 182, 111, 32, 50, 151, 189, 239, 253, 247, 234, 184, 189, 163, 114, 233, 254, 139, 117, 14, 148, 65, 138, 158, 114, 51, 153, 146, 7, 146, 162, 158, 200, 26, 129, 220, 122, 183, 37, 115, 164, 214, 27, 104, 186, 54, 109, 226, 8, 81, 228, 186, 237, 28, 78, 11, 235, 13, 9, 217, 85, 44, 157, 249, 38, 178, 214, 16, 81, 67, 136, 105, 241, 26, 196, 225, 157, 39, 117, 125, 92, 150, 64, 23, 232, 30, 122, 117, 134, 132, 121, 88, 21, 60, 161, 13, 165, 147, 142, 124, 19, 227, 223, 127, 51, 208, 251, 72, 50, 246, 7, 45, 86, 227, 222, 11, 71, 187, 208, 97, 146, 54, 14, 22, 108, 237, 91, 236, 4, 32, 71, 176, 105, 178, 148, 7, 139, 117, 62, 90, 73, 134, 145, 14, 162, 7, 143, 226, 179, 32, 189, 84, 169, 173, 144, 169, 215, 252, 164, 203, 247, 227, 57, 105, 101, 81, 34, 2, 224, 221, 4, 161, 12, 181, 40, 206, 8, 178, 153, 31, 31, 140, 90, 4, 129, 41, 233, 208, 89, 158, 185, 58, 70, 72, 249, 236, 249, 77, 177, 63, 211, 22, 57, 1, 157, 13, 172, 140, 203, 135, 223, 60, 241, 110, 224, 210, 123, 44, 224, 28, 207, 121, 241, 148, 116, 164, 48, 56, 116, 227, 39, 97, 170, 140, 196, 210, 227, 189, 144, 249, 183, 204, 179, 20, 220, 38, 117, 31, 58, 166, 13, 131, 232, 55, 152, 46, 115, 195, 193, 52, 198, 136, 27, 218, 39, 100, 239, 10, 185, 229, 19, 15, 14, 252, 53, 162, 56, 50, 153, 180, 181, 78, 191, 111, 207, 59, 222, 156, 222, 202, 153, 219, 66, 37, 149, 200, 205, 215, 229, 251, 28, 109, 160, 125, 18, 101, 113, 242, 145, 164, 31, 5, 160, 41, 27, 50, 126, 115, 239, 168, 125, 233, 80, 94, 76, 38, 210, 186, 33, 85, 152, 32, 29, 143, 23, 216, 103, 110, 84, 74, 59, 200, 25, 21, 248, 132, 189, 2, 194, 118, 172, 120, 126, 121, 219, 201, 62, 66, 164, 34, 223, 25, 215, 153, 18, 24, 220, 19, 106, 156, 12, 204, 228, 212, 188, 156, 240, 157, 244, 25, 49, 24, 138, 220, 224, 203, 187, 155, 125, 94, 1, 126, 234, 12, 126, 148, 34, 24, 168, 12, 188, 155, 32, 138, 67, 2, 174, 196, 219, 114, 5, 142, 156, 179, 92, 66, 245, 247, 160, 115, 156, 241, 141, 167, 142, 35, 210, 94, 216, 56, 88, 146, 147, 88, 133, 66, 86, 156, 174, 159, 62, 218, 149, 8, 235, 43, 139, 129, 144, 230, 175, 102, 148, 217, 52, 156, 236, 65, 133, 68, 30, 48, 3, 21, 182, 22, 57, 47, 140, 183, 247, 125, 200, 7, 233, 214, 130, 220, 136, 31, 31, 255, 173, 27, 55, 82, 111, 46, 210, 8, 26, 70, 253, 17, 131, 130, 27, 166, 168, 176, 15, 97, 252, 50, 232, 9, 168, 44, 14, 89, 104, 9, 241, 169, 210, 9, 24, 246, 88, 25, 140, 207, 175, 229, 88, 147, 14, 57, 206, 111, 26, 2, 117, 131, 213, 69, 14, 153, 107, 225, 93, 19, 206, 68, 246, 145, 137, 186, 28, 150, 54, 234, 165, 67, 170, 27, 77, 4, 14, 166, 252, 66, 103, 21, 107, 142, 243, 140, 110, 121, 30, 215, 166, 101, 121, 226, 222, 200, 101, 169, 168, 2, 153, 62, 187, 239, 208, 140, 48, 33, 118, 83, 68, 71, 80, 13, 64, 179, 31, 62, 161, 241, 7, 120, 104, 151, 11, 148, 65, 73, 23, 194, 236, 130, 12, 17, 158, 44, 235, 12, 125, 189, 41, 16, 149, 81, 40, 193, 255, 57, 190, 145, 207, 46, 255, 217, 237, 173, 150, 207, 135, 178, 232, 140, 76, 59, 103, 12, 88, 32, 44, 254, 10, 8, 186, 183, 42, 42, 175, 80, 228, 108, 255, 28, 54, 210, 68, 155, 193, 141, 178, 16, 104, 128, 79, 71, 207, 49, 73, 226, 154, 149, 144, 108, 47, 18, 87, 80, 173, 83, 199, 176, 99, 147, 248, 81, 128, 123, 40, 92, 69, 168, 149, 177, 209, 190, 244, 122, 10, 101, 23, 204, 191, 11, 104, 188, 42, 37, 205, 48, 198, 152, 166, 129, 218, 92, 223, 134, 4, 25, 200, 143, 100, 105, 29, 183, 186, 216, 122, 45, 48, 195, 209, 77, 29, 216, 245, 3, 15, 89, 216, 245, 20, 181, 138, 220, 99, 225, 81, 192, 231, 27, 234, 169, 146, 36, 144, 160, 60, 181, 146, 114, 186, 211, 253, 71, 190, 16, 43, 8, 171, 36, 242, 66, 132, 16, 81, 60, 144, 27, 55, 113, 165, 248, 173, 254, 206, 144, 218, 185, 141, 133, 98, 233, 13, 239, 246, 241, 70, 175, 194, 48, 75, 169, 10, 240, 203, 178, 147, 227, 27, 124, 16, 3, 223, 175, 103, 107, 82, 248, 34, 56, 86, 220, 124, 59, 98, 153, 65, 77, 90, 119, 101, 85, 116, 114, 148, 144, 129, 188, 227, 32, 148, 26, 175, 0, 119, 208, 158, 109, 189, 34, 145, 207, 226, 61, 210, 15, 74, 88, 167, 128, 121, 126, 134, 112, 130, 183, 119, 20, 32, 138, 63, 15, 21, 126, 93, 153, 119, 129, 38, 15, 155, 194, 147, 166, 223, 204, 147, 243, 56, 155, 206, 233, 227, 168, 147, 222, 40, 176, 26, 194, 109, 86, 159, 26, 155, 205, 114, 92, 85, 196, 78, 31, 236, 128, 149, 233, 123, 117, 25, 101, 112, 48, 245, 162, 255, 189, 234, 241, 244, 25, 14, 111, 232, 107, 178, 46, 197, 181, 145, 12, 0, 179, 197, 161, 83, 213, 94, 152, 208, 131, 21, 221, 132, 55, 129, 120, 93, 185, 149, 161, 202, 236, 123, 113, 140, 235, 113, 163, 89, 253, 179, 154, 234, 148, 72, 76, 205, 149, 17, 244, 45, 36, 132, 182, 11, 208, 242, 130, 94, 135, 195, 25, 189, 222, 18, 237, 217, 1, 40, 76, 59, 66, 109, 197, 8, 55, 7, 57, 232, 131, 232, 227, 239, 29, 221, 61, 152, 117, 160, 231, 218, 36, 234, 42, 15, 167, 86, 170, 206, 134, 89, 98, 206, 201, 137, 200, 51, 127, 202, 250, 113, 18, 253, 10, 119, 27, 226, 46, 6, 4, 13, 157, 47, 134, 242, 210, 208, 214, 234, 239, 216, 244, 167, 152, 90, 96, 249, 65, 199, 226, 177, 93, 238, 50, 48, 46, 248, 253, 217, 206, 48, 253, 201, 208, 67, 104, 13, 225, 84, 92, 38, 229, 162, 84, 169, 203, 47, 184, 226, 187, 152, 250, 128, 8, 171, 143, 22, 55, 35, 244, 84, 51, 112, 65, 34, 234, 140, 177, 172, 255, 146, 76, 148, 165, 199, 35, 49, 88, 4, 156, 105, 161, 254, 203, 63, 115, 157, 179, 129, 102, 34, 162, 138, 200, 25, 20, 77, 247, 8, 32, 75, 244, 33, 209, 67, 121, 121, 123, 97, 45, 21, 152, 205, 125, 61, 243, 159, 50, 114, 49, 202, 175, 218, 156, 101, 73, 241, 80, 101, 71, 70, 76, 163, 47, 203, 203, 154, 192, 150, 251, 195, 91, 249, 254, 152, 60, 20, 120, 31, 70, 14, 227, 246, 9, 123, 146, 14, 208, 151, 198, 2, 154, 249, 100, 241, 128, 219, 196, 227, 112, 244, 120, 205, 232, 243, 63, 234, 176, 242, 233, 134, 242, 56, 105, 136, 141, 141, 25, 33, 20, 14, 66, 75, 199, 91, 187, 57, 254, 168, 91, 254, 197, 97, 42, 52, 114, 201, 3, 62, 136, 208, 172, 129, 210, 95, 206, 81, 115, 182, 182, 117, 149, 31, 106, 67, 227, 206, 204, 42, 240, 80, 240, 11, 131, 80, 91, 105, 252, 184, 208, 255, 18, 31, 35, 143, 218, 208, 242, 252, 44, 170, 238, 129, 225], - [164, 83, 133, 164, 224, 34, 227, 139, 113, 220, 57, 242, 209, 44, 240, 251, 134, 136, 195, 51, 100, 166, 247, 165, 231, 3, 148, 85, 65, 66, 95, 206, 173, 184, 107, 107, 211, 14, 212, 88, 85, 250, 232, 92, 63, 115, 212, 193, 187, 113, 73, 249, 110, 115, 254, 242, 219, 229, 91, 190, 158, 126, 138, 197, 232, 178, 238, 225, 60, 191, 205, 95, 118, 3, 170, 234, 157, 59, 54, 85, 185, 111, 68, 126, 73, 158, 203, 244, 71, 186, 147, 101, 78, 174, 192, 142, 158, 91, 3, 170, 232, 61, 124, 146, 109, 23, 178, 84, 179, 246, 116, 191, 242, 113, 13, 233, 46, 219, 158, 16, 246, 224, 129, 109, 167, 14, 132, 228, 28, 209, 134, 157, 139, 142, 129, 64, 213, 230, 29, 176, 14, 171, 159, 243, 8, 104, 20, 103, 133, 14, 172, 171, 230, 71, 86, 66, 139, 15, 172, 108, 203, 133, 78, 154, 149, 48, 33, 2, 235, 67, 113, 55, 178, 221, 219, 132, 143, 174, 213, 89, 20, 116, 126, 146, 218, 156, 17, 103, 233, 167, 38, 96, 174, 132, 150, 147, 125, 22, 104, 146, 196, 126, 240, 212, 208, 71, 119, 85, 164, 87, 30, 165, 165, 7, 133, 32, 38, 200, 93, 136, 177, 131, 103, 211, 250, 251, 95, 178, 138, 206, 64, 87, 124, 128, 37, 186, 122, 214, 164, 12, 3, 221, 159, 112, 248, 248, 89, 54, 68, 118, 143, 102, 127, 232, 126, 191, 123, 74, 23, 243, 122, 104, 186, 130, 191, 49, 249, 35, 74, 83, 172, 83, 70, 141, 40, 14, 4, 7, 252, 182, 110, 63, 46, 147, 231, 107, 162, 45, 8, 227, 79, 188, 150, 241, 90, 54, 119, 230, 221, 95, 97, 43, 79, 104, 16, 234, 92, 67, 107, 186, 159, 76, 140, 60, 253, 181, 123, 64, 104, 181, 142, 203, 73, 137, 2, 10, 21, 160, 223, 173, 130, 39, 224, 22, 80, 81, 237, 17, 94, 79, 153, 214, 52, 138, 25, 191, 202, 134, 64, 235, 158, 125, 224, 77, 23, 76, 236, 157, 7, 247, 39, 102, 88, 3, 117, 91, 104, 164, 92, 189, 199, 164, 141, 254, 42, 125, 134, 127, 203, 27, 21, 156, 14, 87, 38, 132, 109, 144, 37, 205, 9, 189, 195, 140, 156, 95, 235, 247, 2, 134, 216, 241, 107, 112, 33, 154, 133, 20, 191, 102, 158, 82, 135, 180, 79, 190, 255, 28, 224, 176, 190, 144, 21, 142, 166, 183, 206, 149, 7, 159, 163, 67, 36, 84, 159, 158, 208, 10, 65, 168, 160, 43, 103, 208, 63, 209, 29, 234, 55, 141, 49, 234, 169, 255, 98, 62, 12, 183, 146, 5, 243, 49, 50, 200, 209, 92, 30, 162, 106, 132, 30, 14, 114, 204, 144, 174, 11, 214, 84, 62, 206, 122, 190, 233, 232, 54, 112, 224, 5, 67, 196, 118, 155, 34, 170, 41, 173, 87, 56, 177, 65, 106, 127, 189, 103, 40, 184, 182, 185, 156, 113, 168, 61, 139, 59, 22, 240, 170, 241, 18, 64, 91, 108, 62, 17, 124, 160, 12, 109, 0, 165, 13, 250, 28, 159, 63, 131, 165, 111, 196, 36, 182, 200, 123, 92, 252, 121, 72, 70, 58, 212, 202, 39, 9, 25, 63, 176, 110, 100, 165, 253, 145, 5, 62, 191, 9, 91, 177, 236, 238, 37, 46, 91, 73, 194, 230, 148, 133, 149, 141, 72, 44, 95, 238, 2, 27, 120, 87, 220, 66, 111, 238, 163, 38, 83, 187, 57, 1, 201, 45, 246, 90, 40, 250, 124, 210, 222, 21, 23, 60, 55, 42, 159, 18, 101, 253, 81, 42, 65, 194, 115, 17, 197, 134, 113, 141, 205, 53, 77, 232, 8, 220, 53, 92, 152, 142, 40, 4, 180, 20, 126, 86, 19, 231, 145, 79, 183, 239, 15, 1, 77, 255, 47, 251, 33, 66, 196, 71, 176, 129, 230, 143, 174, 65, 146, 221, 97, 210, 89, 64, 133, 140, 181, 11, 223, 21, 128, 174, 160, 84, 143, 221, 52, 92, 137, 132, 25, 133, 193, 119, 189, 52, 18, 124, 177, 23, 229, 253, 237, 39, 51, 76, 141, 30, 241, 24, 95, 164, 155, 225, 11, 180, 13, 142, 33, 157, 199, 213, 213, 126, 2, 183, 242, 205, 55, 99, 83, 228, 251, 63, 198, 91, 236, 123, 97, 25, 195, 27, 187, 222, 28, 99, 51, 105, 250, 39, 194, 130, 31, 124, 156, 98, 207, 1, 247, 34, 211, 117, 27, 43, 76, 112, 94, 230, 108, 179, 195, 87, 7, 56, 27, 175, 86, 89, 170, 85, 144, 222, 80, 216, 153, 205, 214, 184, 234, 114, 121, 179, 146, 64, 118, 129, 117, 15, 194, 73, 72, 99, 130, 76, 211, 166, 1, 120, 102, 10, 207, 183, 13, 109, 227, 149, 106, 248, 177, 84, 158, 64, 172, 140, 16, 77, 195, 95, 59, 135, 107, 144, 68, 51, 221, 108, 171, 33, 192, 18, 160, 84, 198, 123, 36, 136, 67, 118, 73, 251, 105, 171, 204, 52, 199, 152, 199, 157, 75, 104, 195, 56, 87, 137, 23, 73, 251, 8, 60, 47, 246, 53, 102, 98, 166, 56, 125, 60, 119, 161, 188, 49, 121, 244, 107, 105, 42, 244, 74, 8, 175, 143, 11, 171, 7, 250, 201, 97, 135, 29, 12, 78, 242, 230, 111, 26, 201, 167, 178, 240, 74, 255, 56, 97, 231, 131, 27, 169, 53, 154, 34, 158, 200, 57, 205, 124, 188, 3, 215, 211, 20, 2, 49, 8, 225, 102, 133, 143, 77, 187, 35, 139, 35, 143, 119, 76, 57, 233, 86, 84, 222, 149, 224, 82, 181, 137, 190, 53, 32, 10, 151, 165, 120, 14, 235, 99, 150, 151, 128, 60, 228, 33, 100, 163, 24, 231, 62, 49, 6, 84, 118, 181, 98, 240, 91, 183, 251, 167, 206, 246, 235, 28, 253, 219, 205, 248, 32, 84, 135, 68, 95, 226, 179, 249, 117, 42, 222, 209, 225, 64, 98, 163, 128, 196, 159, 91, 128, 243, 235, 108, 0, 8, 223, 75, 86, 75, 201, 18, 117, 193, 172, 151, 17, 233, 69, 69, 164, 184, 23, 211, 33, 68, 196, 122, 83, 98, 228, 38, 181, 202, 153, 23, 1, 11, 20, 194, 10, 192, 245, 181, 46, 85, 78, 71, 160, 218, 180, 133, 242, 46, 81, 10, 188, 216, 49, 240, 211, 105, 89, 220, 156, 1, 61, 97, 143, 29, 25, 165, 0, 149, 32, 152, 99, 101, 198, 124, 209, 234, 95, 237, 94, 90, 88, 20, 181, 119, 79, 225, 26, 150, 240, 118, 203, 177, 138, 106, 146, 41, 54, 118, 251, 167, 140, 240, 236, 199, 161, 129, 229, 233, 213, 115, 13, 246, 156, 33, 210, 207, 204, 136, 43, 161, 40, 196, 252, 171, 74, 89, 243, 84, 215, 138, 182, 159, 254, 189, 126, 171, 102, 177, 16, 233, 136, 157, 56, 217, 107, 40, 174, 240, 97, 105, 109, 38, 193, 130, 178, 130, 29, 91, 23, 74, 55, 169, 11, 215, 19, 250, 236, 215, 223, 250, 120, 70, 237, 1, 212, 5, 234, 138, 100, 233, 39, 14, 124, 101, 173, 32, 90, 78, 244, 7, 78, 58, 170, 5, 144, 22, 93, 124, 181, 178, 168, 73, 128, 252, 140, 231, 17, 210, 243, 113, 9, 103, 170, 60, 53, 116, 42, 191, 211, 188, 253, 227, 14, 235, 169, 48, 3, 94, 194, 51, 24, 34, 44, 68, 236, 102, 207, 118, 77, 2, 128, 155, 253, 226, 234, 223, 235, 168, 73, 176, 255, 182, 66, 120, 148, 66, 5, 98, 42, 44, 216, 161, 110, 236, 169, 24, 212, 77, 166, 253, 42, 65, 122, 208, 23, 207, 203, 23, 31, 72, 157, 219, 203, 74, 94, 226, 25, 177, 197, 224, 176, 145, 25, 85, 229, 225, 179, 14, 81, 112, 169, 96, 234, 227, 89, 53, 137, 73, 15, 172, 242, 138, 17, 182, 139, 101, 52, 7, 99, 103, 28, 30, 212, 189, 3, 219, 197, 173, 112, 96, 36, 10, 253, 117, 124, 52, 147, 89, 68, 2, 140, 108, 131, 115, 225, 248, 1, 37, 110, 179, 181, 244, 131, 59, 156, 10, 107, 241, 115, 175, 37, 28, 139, 140, 243, 232, 144, 238, 127, 47, 219, 104, 1, 123, 135, 60, 41, 96, 78, 228, 24, 157, 91, 195, 238, 65, 6, 36, 248, 64, 6, 97, 107, 160, 5, 56, 49, 244, 46, 9, 231, 217, 192, 247, 148, 46, 8, 45, 60, 96, 67, 23, 214, 62, 218, 13, 58, 205, 177, 190, 122, 119, 190, 218, 188, 91, 186, 73, 139, 173, 166, 63, 184, 154, 254, 212, 199, 135, 240, 139, 170, 55, 173, 148, 56, 132, 176, 75, 155, 56, 52, 40, 93, 50, 104, 88, 192, 42, 184, 82, 160, 134, 22, 3, 154, 254, 230, 165, 163, 46, 173, 1, 158, 35, 208, 244, 131, 240, 234, 116, 226, 51, 183, 51, 170, 31, 1, 135, 51, 189, 117, 205, 242, 39, 122, 50, 185, 87, 70, 244, 130, 224, 223, 36, 111, 4, 78, 184, 219, 101, 54, 232, 97, 180, 206, 126, 219, 166, 7, 238, 128, 107, 103, 126, 105, 217, 211, 53, 158, 241, 12, 104, 93, 30, 160, 127, 3, 212, 191, 172, 48, 223, 231, 27, 71, 160, 121, 207, 7, 192, 15, 52, 206, 225, 252, 5, 118, 5, 158, 28, 71, 179, 71, 104, 249, 73, 37, 163, 122, 247, 250, 81, 229, 108, 27, 91, 8, 220, 147, 228, 14, 69, 183, 228, 153, 206, 234, 110, 152, 249, 157, 11, 180, 171, 248, 136, 27, 29, 101, 67, 218, 137, 150, 35, 14, 0, 152, 169, 146, 80, 66, 112, 61, 25, 78, 249, 123, 36, 178, 1, 3, 246, 6, 13, 204, 166, 129, 25, 69, 93, 126, 53, 49, 179, 8, 45, 5, 49, 29, 84, 182, 84, 184, 157, 226, 248, 5, 194, 184, 82, 45, 137, 7, 140, 33, 113, 116, 141, 246, 185, 187, 153, 254, 14, 157, 61, 32, 37, 22, 211, 187, 192, 234, 146, 240, 48, 16, 82, 175, 242, 124, 116, 155, 56, 208, 134, 63, 83, 48, 129, 139, 47, 47, 233, 220, 198, 160, 98, 8, 187, 15, 194, 59, 217, 174, 76, 211, 242, 9, 33, 28, 74, 129, 123, 158, 112, 81, 184, 240, 9, 188, 77, 149, 70, 195, 134, 71, 72, 239, 41, 126, 131, 146, 192, 11, 98, 154, 242, 236, 33, 158, 109, 23, 59, 134, 231, 177, 211, 83, 147, 122, 59, 15, 64, 249, 162, 79, 197, 86, 85, 182, 108, 91, 71, 67, 213, 27, 235, 91, 180, 69, 252, 152, 33, 136, 120, 50, 167, 38, 38, 234, 109, 190, 156, 208, 219, 167, 157, 109, 58, 218, 173, 190, 49, 195, 4, 93, 80, 82, 183, 217, 122, 16, 82, 137, 151, 64, 215, 44, 159, 33, 111, 69, 96, 95, 26, 239, 25, 17, 131, 166, 5, 255, 153, 221, 35, 99, 217, 20, 100, 241, 249, 119, 104, 112, 134, 84, 153, 234, 59, 26, 57, 133, 185, 182, 54, 105, 85, 142, 94, 59, 80, 136, 228, 242, 99, 180, 156, 180, 145, 70, 199, 124, 108, 178, 154, 65, 115, 43, 28, 133, 241, 226, 147, 39, 102, 19, 69, 63, 111, 219, 78, 91, 131, 165, 58, 123, 180, 192, 67, 160, 246, 160, 123, 46, 154, 161, 204, 37, 125, 3, 254, 223, 49, 232, 194, 163, 246, 226, 110, 181, 180, 196, 5, 49, 111, 3, 211, 73, 218, 118, 53, 61, 147, 23, 199, 17, 247, 190, 90, 190, 231, 254, 251, 211, 231, 232, 198, 186, 184, 201, 168, 241, 15, 241, 107, 163, 44, 10, 117, 131, 162, 156, 135, 217, 229, 45, 151, 94, 62, 244, 104, 126, 5, 5, 234, 26, 183, 197, 107, 97, 207, 172, 57, 206, 160, 187, 144, 58, 152, 13, 145, 32, 60, 156, 70, 126, 75, 8, 20, 59, 147, 86, 10, 38, 238, 241, 230, 126, 199, 113, 136, 110, 22, 138, 67, 171, 30, 12, 161, 40, 55, 164, 240, 84, 106, 237, 81, 81, 147, 58, 60, 96, 218, 253, 136, 136, 255, 203, 103, 213, 49, 230, 184, 121, 159, 92, 179, 103, 106, 136, 70, 217, 42, 155, 129, 137, 248, 239, 18, 175, 185, 204, 161, 194, 90, 18, 37, 150, 142, 58, 146, 50, 190, 134, 32, 28, 93, 14, 149, 236, 40, 184, 0, 140, 225, 186, 222, 54, 1, 135, 132, 237, 56, 90, 31, 64, 245, 108, 176, 240, 186, 208, 64, 80, 168, 73, 171, 161, 97, 236, 15, 71, 80, 31, 107, 32, 240, 209, 184, 118, 121, 15, 43, 19, 148, 56, 243, 5, 214, 65, 52, 103, 249, 101, 204, 115, 92, 83, 28, 159, 85, 145, 39, 194, 179, 28, 164, 149, 29, 234, 194, 199, 113, 160, 226, 156, 189, 200, 100, 46, 122, 218, 67, 52, 135, 182, 223, 24, 9, 19, 211, 58, 119, 251, 104, 209, 182, 95, 84, 242, 207, 234, 204, 86, 130, 135, 8, 191, 118, 132, 189, 142, 200, 28, 231, 135, 136, 26, 38, 45, 239, 147, 238, 159, 52, 58, 25, 84, 14, 239, 132, 180, 75, 106, 57, 136, 79, 51, 179, 242, 109, 188, 238, 121, 12, 241, 84, 248, 129, 167, 122, 186, 215, 102, 84, 25, 144, 235, 223, 37, 235, 14, 127, 146, 208, 145, 87, 59, 184, 216, 155, 90, 252, 227, 250, 27, 224, 189, 218, 77, 116, 39, 0, 61, 107, 49, 3, 25, 242, 118, 240, 18, 171, 196, 161, 150, 159, 83, 39, 85, 66, 34, 66, 250, 226, 88, 136, 185, 139, 30, 114, 89, 251, 199, 22, 91, 112, 254, 125, 46, 16, 86, 254, 98, 175, 65, 53, 73, 47, 50, 17, 175, 155, 191, 166, 220, 173, 229, 128, 19, 76, 89, 243, 95, 94, 94, 117, 247, 199, 16, 182, 122, 139, 152, 37, 69, 121, 215, 74, 128, 145, 208, 19, 77, 148, 253, 11, 75, 218, 96, 27, 26, 152, 156, 117, 51, 4, 136, 187, 81, 170, 1, 53, 216, 43, 30, 177, 168, 205, 202, 242, 235, 109, 95, 139, 174, 119, 239, 18, 60, 5, 66, 227, 130, 99, 44, 70, 137, 228, 30, 118, 198, 128, 1, 65, 88, 116, 210, 140, 175, 200, 162, 88, 95, 155, 144, 114, 132, 179, 53, 93, 7, 121, 240, 218, 244, 197, 147, 163, 122, 104, 145, 49, 40, 196, 156, 45, 70, 227, 95, 240, 137, 217, 167, 38, 213, 19, 12, 240, 212, 213, 102, 228, 128, 116, 74, 82, 23, 225, 116, 248, 46, 71, 202, 12, 113, 53, 130, 66, 30, 67, 48, 85, 233, 135, 251, 199, 222, 63, 142, 237, 141, 121, 87, 251, 4, 89, 109, 228, 223, 164, 212, 178, 23, 123, 100, 87, 101, 206, 56, 160, 234, 196, 9, 34, 166, 251, 121, 99, 56, 35, 68, 15, 15, 88, 232, 2, 45, 230, 10, 235, 103, 36, 54, 112, 17, 69, 159, 62, 181, 41, 243, 176, 12, 153, 183, 159, 47, 197, 214, 115, 27, 211, 115, 131, 190, 76, 20, 135, 61, 47, 110, 155, 59, 129, 93, 97, 75, 21, 249, 183, 79, 77, 231, 76, 197, 245, 120, 28, 154, 129, 22, 55, 30, 103, 6, 123, 93, 195, 235, 61, 35, 77, 32, 7, 132, 140, 221, 185, 10, 9, 55, 173, 253, 104, 138, 33, 159, 159, 171, 155, 39, 162, 53, 12, 58, 1, 122, 145, 165, 209, 186, 228, 56, 64, 155, 139, 91, 234, 54, 62, 234, 98, 151, 35, 128, 168, 224, 138, 142, 65, 134, 15, 5, 198, 119, 68, 241, 170, 2, 141, 232, 160, 10, 204, 148, 12, 195, 212, 197, 19, 151, 170, 231, 88, 83, 136, 190, 143, 90, 234, 127, 71, 19, 143, 157, 77, 37, 247, 128, 163, 61, 84, 101, 236, 249, 170, 199, 198, 190, 54, 26, 120, 140, 161, 214, 111, 14, 175, 94, 250, 232, 36, 81, 197, 122, 156, 186, 207, 59, 182, 179, 249, 185, 56, 144, 234, 190, 164, 54, 25, 167, 86, 9, 31, 187, 226, 120, 20, 233, 127, 168, 242, 234, 231, 190, 211, 53, 93, 117, 187, 137, 212, 241, 161, 147, 241, 215, 174, 77, 230, 194, 33, 10, 209, 164, 166, 59, 80, 171, 15, 18, 108, 188, 239, 115, 206, 59, 138, 51, 240, 137, 69, 56, 86, 168, 158, 136, 201, 162, 7, 38, 221, 249, 7, 188, 244, 152, 149, 73, 189, 194, 164, 57, 241, 193, 45, 114, 6, 22, 212, 88, 106, 228, 6, 255, 232, 237, 252, 10, 132, 188, 226, 162, 207, 196, 223, 205, 11, 145, 241, 76, 4, 179, 115, 249, 141, 143, 88, 118, 159, 47, 85, 165, 215, 228, 210, 148, 125, 98, 101, 66, 178, 62, 207, 38, 249, 210, 140, 72, 137, 94, 72, 252, 0, 155, 88, 148, 2, 251, 40, 86, 10, 17, 255, 75, 64, 50, 101, 254, 64, 9, 182, 77, 128, 12, 51, 168, 190, 58, 122, 93, 235, 1, 88, 39, 47, 50, 227, 60, 223, 198, 71, 201, 241, 213, 34, 35, 100, 84, 168, 207, 194, 86, 37, 39, 215, 48, 235, 237, 47, 139, 8, 20, 168, 233, 215, 19, 94, 233, 90, 67, 233, 107, 225, 136, 206, 8, 58, 78, 151, 150, 97, 252, 220, 71, 252, 222, 216, 66, 184, 170, 97, 171, 191, 177, 52, 161, 51, 123, 134, 127, 164, 56, 91, 218, 26, 14, 0, 20, 64, 240, 91, 192, 17, 10, 232, 244, 240, 70, 196, 44, 121, 102, 54, 233, 236, 92, 169, 42, 211, 0, 132, 59, 99, 212, 92, 252, 104, 216, 24, 99, 88, 160, 110, 116, 142, 136, 113, 75, 49, 65, 77, 5, 0, 141, 76, 103, 162, 113, 164, 225, 229, 117, 206, 108, 253, 72, 28, 228, 78, 231, 154, 34, 192, 25, 251, 215, 227, 229, 156, 253, 26, 175, 26, 249, 43, 132, 208, 21, 177, 117, 68, 51, 105, 153, 35, 13, 132, 38, 124, 240, 80, 210, 77, 204, 64, 62, 231, 113, 90, 160, 123, 166, 48, 128, 233, 97, 121, 237, 82, 197, 130, 39, 132, 163, 207, 38, 28, 121, 18, 118, 245, 163, 145, 123, 178, 237, 86, 104, 229, 100, 16, 107, 99, 55, 47, 185, 193, 123, 199, 116, 27, 64, 92, 88, 133, 21, 212, 252, 73, 28, 224, 153, 242, 93, 21, 201, 154, 53, 200, 149, 197, 132, 183, 172, 130, 55, 154, 122, 140, 69, 166, 136, 39, 25, 144, 127, 55, 22, 105, 126, 213, 182, 44, 169, 97, 93, 180, 112, 191, 157, 81, 157, 144, 103, 127, 175, 193, 69, 79, 56, 201, 232, 31, 164, 177, 55, 144, 106, 206, 70, 155, 72, 25, 192, 94, 212, 138, 164, 198, 23, 83, 104, 238, 69, 216, 207, 26, 211, 43, 104, 141, 189, 189, 15, 68, 25, 36, 7, 249, 115, 4, 115, 240, 222, 68, 235, 51, 30, 204, 134, 10, 112, 73, 4, 111, 85, 83, 162, 18, 88, 4, 178, 249, 153, 103, 238, 191, 244, 137, 86, 131, 181, 56, 245, 170, 215, 113, 54, 151, 141, 238, 212, 54, 31, 31, 27, 173, 231, 3, 162, 122, 195, 142, 144, 29, 204, 39, 249, 10, 92, 113, 44, 207, 218, 111, 101, 122, 91, 158, 28, 109, 38, 98, 146, 53, 226, 141, 59, 130, 243, 224, 49, 75, 8, 8, 55, 213, 40, 213, 254, 4, 179, 118, 3, 231, 88, 212, 60, 42, 206, 240, 211, 219, 63, 67, 182, 100, 203, 146, 54, 138, 0, 247, 138, 46, 216, 15, 219, 112, 212, 161, 228, 52, 43, 76, 110, 103, 236, 202, 90, 46, 124, 76, 243, 18, 211, 102, 21, 154, 125, 112, 55, 182, 223, 80, 49, 0, 23, 236, 161, 252, 188, 64, 55, 131, 193, 195, 54, 132, 228, 174, 89, 94, 98, 238, 135, 154, 139, 37, 69, 63, 6, 38, 23, 152, 184, 214, 170, 142, 223, 174, 99, 172, 119, 231, 138, 177, 57, 237, 126, 121, 124, 143, 214, 232, 225, 184, 208, 208, 134, 12, 82, 57, 193, 160, 233, 253, 220, 2, 194, 42, 15, 157, 222, 53, 206, 140, 253, 168, 239, 12, 224, 186, 36, 68, 209, 152, 252, 79, 130, 140, 163, 95, 253, 89, 194, 64, 242, 81, 167, 158, 248, 235, 141, 209, 81, 4, 231, 248, 99, 132, 46, 167, 72, 214, 144, 5, 158, 59, 170, 109, 84, 70, 83, 146, 29, 44, 124, 130, 237, 174, 186, 229, 141, 234, 115, 48, 193, 91, 229, 62, 151, 203, 232, 32, 126, 210, 213, 92, 227, 31, 124, 171, 106, 29, 14, 87, 29, 40, 245, 8, 240, 130, 108, 79, 8, 95, 130, 224, 101, 194, 184, 110, 48, 117, 179, 220, 36, 237, 48, 70, 159, 205, 238, 77, 246, 96, 51, 35, 9, 227, 115, 82, 220, 62, 202, 195, 120, 89, 158, 121, 169, 31, 243, 126, 140, 159, 91, 13, 195, 246, 58, 172, 30, 182, 121, 97, 240, 205, 246, 227, 46, 252, 2, 63, 166, 53, 179, 77, 92, 161, 97, 134, 13, 150, 255, 110, 220, 155, 24, 150, 219, 182, 232, 181, 119, 174, 92, 175, 180, 223, 123, 209, 250, 37, 132, 215, 240, 193, 231, 21, 122, 176, 100, 103, 176, 158, 139, 226, 181, 75, 130, 119, 92, 238, 251, 137, 104, 39, 205, 221, 88, 204, 206, 82, 254, 196, 101, 177, 92, 88, 30, 170, 144, 210, 176, 88, 249, 171, 69, 9, 163, 190, 123, 50, 21, 8, 255, 146, 254, 217, 11, 195, 70, 7, 234, 143, 207, 226, 22, 202, 86, 72, 125, 226, 117, 41, 220, 71, 3, 37, 64, 227, 229, 12, 14, 191, 22, 212, 148, 210, 176, 156, 211, 213, 108, 46, 217, 99, 32, 50, 107, 217, 18, 124, 227, 4, 194, 13, 115, 175, 201, 185, 193, 149, 149, 80, 242, 59, 45, 4, 176, 155, 3, 241, 173, 203, 244, 125, 217, 128, 25, 62, 144, 127, 11, 26, 224, 239, 213, 52, 162, 44, 121, 225, 90, 219, 35, 218, 71, 95, 133, 31, 89, 25, 21, 113, 68, 147, 183, 140, 92, 72, 209, 231, 217, 154, 210, 210, 75, 164, 202, 0, 4, 9, 171, 159, 229, 69, 227, 245, 192, 186, 226, 221, 236, 1, 13, 128, 173, 81, 215, 212, 55, 194, 140, 70, 53, 107, 199, 147, 24, 230, 207, 123, 104, 86, 57, 94, 18, 222, 64, 253, 93, 169, 97, 22, 73, 69, 50, 60, 174, 50, 13, 149, 52, 126, 133, 137, 233, 65, 63, 208, 161, 25, 169, 40, 2, 159, 193, 253, 78, 210, 180, 72, 180, 205, 125, 188, 168, 88, 217, 77, 235, 150, 101, 99, 99, 180, 190, 15, 50, 1, 168, 129, 200, 250, 75, 98, 254, 84, 147, 65, 41, 94, 220, 35, 223, 229, 80, 79, 38, 203, 225, 206, 68, 204, 207, 118, 156, 173, 180, 122, 78, 201, 136, 224, 87, 131, 12, 224, 122, 42, 223, 249, 188, 228, 134, 38, 217, 221, 175, 87, 145, 109, 18, 95, 36, 114, 3, 57, 121, 227, 38, 202, 100, 223, 206, 0, 24, 172, 133, 31, 55, 137, 245, 94, 72, 24, 135, 206, 240, 44, 120, 240, 228, 2, 178, 197, 169, 123, 44, 22, 179, 7, 161, 3, 167, 17, 85, 4, 99, 3, 229, 231, 119, 84, 177, 255, 177, 109, 144, 115, 38, 218, 110, 52, 179, 221, 14, 143, 29, 203, 86, 159, 83, 108, 26, 238, 169, 15, 28, 205, 53, 179, 28, 80, 222, 145, 255, 10, 158, 64, 11, 69, 223, 37, 247, 155, 135, 42, 188, 128, 249, 125, 246, 125, 108, 146, 234, 172, 166, 106, 147, 121, 49, 154, 123, 58, 189, 70, 198, 0, 110, 206, 213, 211, 75, 25, 203, 19, 108, 69, 250, 212, 161, 88, 5, 239, 107, 73, 127, 121, 148, 119, 248, 241, 134, 83, 251, 217, 0, 200, 129, 41, 141, 216, 185, 121, 60, 95, 55, 227, 9, 54, 69, 48, 70, 184, 88, 51, 52, 186, 135, 139, 17, 191, 163, 145, 169, 251, 90, 197, 128, 2, 58, 6, 70, 212, 239, 16, 175, 82, 4, 210, 165, 211, 141, 146, 172, 40, 49, 42, 4, 223, 45, 213, 109, 189, 78, 57, 32, 38, 9, 51, 134, 164, 195, 43, 23, 227, 94, 144, 160, 38, 10, 171, 109, 34, 215, 152, 203, 158, 56, 184, 35, 112, 40, 75, 153, 29, 200, 184, 245, 167, 252, 245, 30, 40, 213, 232, 161, 58, 93, 161, 75, 227, 218, 43, 157, 53, 194, 71, 163, 249, 28, 203, 125, 168, 82, 167, 249, 237, 150, 7, 225, 31, 64, 111, 106, 122, 200, 89, 241, 59, 237, 78, 193, 148, 152, 69, 210, 60, 136, 198, 189, 195, 159, 79, 106, 249, 240, 15, 205, 123, 18, 14, 87, 142, 57, 99, 205, 16, 177, 63, 245, 103, 70, 210, 108, 35, 232, 141, 229, 122, 43, 123, 211, 92, 134, 226, 151, 106, 9, 50, 50, 155, 241, 247, 222, 152, 72, 63, 114, 104, 60, 235, 169, 113, 67, 248, 214, 50, 174, 143, 140, 131, 42, 222, 35, 119, 217, 59, 38, 146, 126, 189, 106, 141, 218, 245, 211, 12, 150, 44, 242, 95, 120, 2, 142, 70, 215, 25, 238, 64, 114, 242, 54, 22, 6, 36, 71, 245, 97, 78, 63, 50, 67, 230, 132, 130, 49, 210, 112, 67, 16, 55, 60, 187, 51, 171, 0, 68, 129, 139, 221, 60, 185, 198, 181, 20, 179, 186, 75, 241, 75, 227, 197, 113, 57, 124, 86, 16, 116, 140, 13, 225, 23, 85, 162, 205, 130, 46, 27, 146, 86, 116, 23, 57, 196, 252, 99, 234, 249, 1, 105, 47, 79, 166, 136, 179, 78, 124, 97, 119, 154, 129, 79, 217, 163, 154, 241, 37, 125, 79, 71, 234, 206, 223, 62, 199, 111, 5, 167, 224, 161, 40, 251, 153, 103, 228, 128, 118, 200, 101, 50, 103, 236, 2, 236, 214, 179, 172, 15, 79, 157, 85, 54, 176, 149, 126, 20, 242, 38, 209, 45, 28, 71, 4, 214, 37, 76, 156, 40, 123, 182, 223, 183, 69, 217, 22, 61, 80, 138, 105, 232, 49, 248, 214, 217, 225, 194, 149, 70, 219, 126, 4, 73, 5, 156, 14, 25, 161, 145, 94, 244, 117, 162, 136, 149, 252, 169, 130, 24, 182, 30, 21, 107, 255, 111, 226, 54, 155, 250, 63, 122, 162, 45, 15, 189, 0, 230, 121, 152, 60, 40, 204, 230, 87, 202, 171, 232, 62, 61, 6, 245, 102, 176, 189, 78, 42, 40, 113, 196, 14, 82, 56, 154, 94, 3, 222, 150, 145, 29, 55, 177, 36, 29, 125, 52, 130, 153, 200, 128, 130, 189, 173, 50, 183, 11, 174, 115, 149, 106, 48, 155, 112, 169, 218, 155, 249, 127, 171, 224, 176, 93, 151, 209, 211, 127, 45, 14, 23, 48, 168, 118, 160, 70, 67, 41, 252, 151, 159, 99, 142, 235, 187, 24, 158, 139, 169, 127, 61, 199, 81, 59, 10, 88, 11, 181, 11, 153, 239, 229, 249, 57, 185, 70, 49, 234, 165, 135, 193, 5, 231, 49, 20, 90, 183, 48, 173, 41, 253, 38, 192, 56, 201, 6, 15, 93, 174, 170, 60, 118, 231, 216, 81, 131, 181, 223, 45, 62, 247, 66, 253, 99, 0, 108, 129, 74, 41, 219, 4, 65, 88, 88, 7, 0, 64, 242, 179, 222, 51, 230, 43, 172, 143, 228, 9, 126, 147, 212, 14, 134, 57, 231, 51, 77, 159, 92, 139, 16, 4, 151, 18, 213, 127, 233, 179, 169, 0, 11, 157, 204, 80, 163, 132, 216, 140, 128, 118, 167, 44, 36, 167, 24, 186, 198, 163, 96, 233, 73, 237, 16, 136, 114, 62, 157, 223, 8, 0, 87, 182, 18, 63, 111, 179, 63, 9, 79, 49, 31, 204, 226, 98, 238, 180, 47, 74, 14, 248, 18, 35, 92, 17, 167, 52, 99, 170, 114, 181, 226, 171, 140, 253, 78, 167, 4, 179, 18, 94, 137, 242, 213, 45, 19, 77, 177, 95, 223, 48, 190, 112, 157, 204, 75, 23, 216, 135, 80, 58, 70, 211, 13, 212, 152, 54, 14, 29, 59, 214, 82, 33, 234, 94, 204, 163, 229, 43, 227, 128, 225, 206, 80, 76, 93, 16, 155, 241, 96, 164, 245, 118, 61, 176, 3, 44, 196, 156, 20, 172, 44, 50, 96, 37, 17, 7, 212, 169, 126, 241, 132, 114, 246, 188, 189, 255, 76, 79, 2, 80, 111, 129, 255, 254, 76, 44, 158, 252, 71, 174, 60, 145, 244, 140, 104, 188, 132, 136, 224, 246, 164, 192, 30, 41, 148, 7, 66, 235, 148, 132, 84, 186, 26, 127, 110, 217, 114, 229, 67, 16, 0, 180, 153, 1, 37, 29, 51, 20, 250, 218, 188, 31, 62, 224, 110, 223, 199, 199, 175, 57, 120, 142, 220, 24, 79, 248, 177, 16, 250, 49, 152, 137, 190, 227, 163, 134, 38, 225, 156, 167, 165, 248, 88, 32, 70, 111, 51, 62, 231, 162, 89, 235, 240, 33, 70, 144, 54, 129, 240, 22, 103, 250, 225, 31, 201, 254, 217, 201, 189, 176, 207, 195, 109, 169, 58, 22, 176, 49, 101, 25, 141, 77, 110, 0, 13, 209, 4, 2, 152, 121, 148, 130, 39, 169, 132, 243, 183, 8, 40, 168, 50, 182, 130, 43, 94, 194, 5, 43, 197, 170, 215, 178, 22, 159, 182, 35, 84, 226, 15, 180, 105, 44, 219, 129, 105, 0, 69, 80, 84, 123, 47, 2, 79, 240, 135, 151, 44, 128, 226, 81, 92, 111, 249, 53, 0, 189, 131, 176, 84, 109, 0, 178, 168, 202, 62, 70, 19, 123, 23, 245, 220, 233, 204, 182, 210, 229, 19, 150, 203, 12, 67, 6, 92, 195, 218, 68, 173, 172, 146, 242, 182, 194, 177, 209, 240, 183, 156, 223, 145, 89, 255, 65, 24, 72, 1, 27, 4, 242, 131, 132, 217, 140, 25, 212, 73, 147, 211, 71, 2, 199, 7, 108, 55, 247, 212, 238, 173, 142, 117, 240, 127, 184, 182, 185, 100, 102, 90, 225, 96, 96, 146, 177, 251, 102, 48, 166, 219, 136, 119, 88, 238, 90, 250, 180, 30, 12, 140, 213, 50, 93, 99, 19, 108, 37, 126, 254, 92, 34, 202, 133, 130, 102, 2, 84, 188, 89, 171, 156, 239, 143, 132, 25, 55, 148, 141, 175, 115, 182, 150, 189, 222, 151, 102, 47, 231, 121, 82, 22, 29, 185, 153, 229, 83, 247, 27, 198, 206, 133, 84, 187, 70, 207, 233, 150, 101, 171, 128, 126, 146, 50, 161, 153, 200, 125, 117, 221, 115, 105, 157, 130, 132, 180, 87, 41, 217, 247, 255, 245, 220, 250, 159, 118, 172, 182, 161, 95, 221, 76, 71, 0, 128, 47, 20, 245, 112, 67, 192, 52, 13, 163, 18, 88, 223, 34, 81, 232, 177, 36, 219, 220, 149, 238, 70, 211, 38, 83, 214, 229, 105, 135, 169, 198, 224, 37, 103, 219, 29, 167, 180, 28, 69, 51, 16, 87, 128, 223, 209, 39, 130, 32, 149, 24, 89, 47, 185, 124, 154, 111, 54, 101, 152, 8, 240, 88, 251, 58, 59, 69, 234, 38, 223, 167, 230, 245, 245, 127, 47, 61, 110, 12, 137, 106, 38, 175, 204, 172, 75, 89, 220, 200, 187, 96, 99, 46, 231, 179, 240, 137, 29, 82, 98, 75, 229, 27, 140, 145, 106, 45, 154, 162, 231, 6, 205, 254, 249, 177, 145, 229, 220, 70, 6, 30, 95, 33, 144, 222, 159, 198, 95, 121, 156, 84, 143, 146, 21, 67, 205, 222, 172, 105, 255, 194, 230, 32, 134, 226, 3, 43, 5, 210, 150, 16, 168, 125, 50, 201, 15, 96, 242, 173, 0, 86, 19, 208, 40, 19, 182, 134, 102, 43, 2, 102, 176, 202, 122, 177, 159, 218, 225, 244, 237, 243, 232, 205, 176, 10, 213, 30, 24, 159, 144, 133, 164, 45, 144, 252, 186, 155, 117, 12, 234, 89, 205, 18, 177, 188, 88, 227, 237, 115, 153, 255, 215, 173, 4, 123, 144, 208, 58, 249, 9, 3, 56, 236, 36, 13, 188, 182, 123, 201, 189, 164, 217, 74, 16, 56, 226, 174, 61, 74, 162, 244, 148, 11, 184, 167, 6, 145, 58, 52, 43, 138, 233, 102, 254, 149, 249, 212, 81, 121, 16, 103, 191, 123, 99, 12, 251, 149, 41, 90, 240, 211, 75, 186, 173, 129, 86, 157, 182, 222, 127, 152, 206, 30, 169, 60, 157, 24, 128, 194, 139, 65, 84, 106, 78, 176, 22, 109, 204, 54, 118, 20, 177, 34, 181, 17, 196, 202, 93, 49, 15, 140, 153, 249, 111, 31, 127, 41, 96, 229, 71, 231, 123, 149, 138, 187, 161, 28, 146, 8, 1, 25, 28, 188, 7, 201, 245, 139, 137, 204, 109, 84, 8, 213, 246, 171, 167, 175, 16, 71, 47, 68, 212, 143, 193, 165, 176, 226, 198, 231, 20, 195, 29, 111, 151, 229, 13, 176, 91, 234, 121, 202, 177, 62, 88, 202, 160, 234, 201, 3, 242, 170, 18, 142, 48, 49, 75, 64, 120, 58, 164, 153, 56, 29, 13, 205, 33, 185, 182, 223, 67, 162, 11, 179, 171, 106, 69, 255, 114, 54, 89, 30, 250, 7, 37, 203, 245, 16, 212, 190, 36, 80, 46, 85, 199, 79, 205, 227, 132, 155, 90, 105, 104, 78, 1, 253, 25, 160, 151, 29, 211, 70, 194, 127, 176, 134, 10, 155, 126, 163, 153, 89, 193, 133, 220, 215, 112, 221, 85, 23, 224, 170, 158, 182, 38, 186, 99, 203, 166, 187, 206, 29, 89, 251, 17, 24, 166, 137, 34, 61, 60, 225, 231, 80, 180, 232, 201, 173, 123, 94, 137, 147, 140, 135, 231, 239, 98, 83, 213, 248, 97, 212, 222, 74, 179, 52, 148, 37, 206, 99, 198, 56, 18, 183, 240, 165, 93, 135, 22, 69, 6, 230, 209, 253, 208, 229, 44, 149, 162, 84, 108, 184, 6, 11, 170, 166, 253, 173, 142, 20, 153, 238, 229, 165, 70, 184, 107, 132, 58, 157, 89, 126, 54, 137, 2, 238, 149, 132, 10, 251, 140, 167, 84, 236, 69, 11, 8, 227, 70, 169, 126, 62, 152, 107, 12, 190, 119, 62, 15, 50, 159, 54, 223, 49, 20, 156, 19, 120, 230, 168, 101, 105, 200, 126, 205, 74, 13, 221, 26, 48, 51, 206, 1, 126, 132, 233, 171, 123, 180, 200, 43, 181, 212, 60, 140, 150, 198, 173, 27, 245, 34, 141, 191, 178, 48, 243, 129, 73, 64, 17, 100, 175, 139, 171, 199, 55, 120, 233, 238, 13, 68, 160, 74, 2, 69, 88, 240, 152, 67, 158, 141, 196, 67, 81, 166, 188, 32, 175, 91, 2, 116, 227, 58, 143, 33, 38, 154, 56, 15, 142, 225, 85, 239, 24, 187, 242, 229, 14, 168, 78, 239, 6, 169, 177, 112, 11, 31, 98, 9, 206, 67, 109, 159, 204, 224, 38, 246, 14, 210, 23, 219, 93, 101, 118, 152, 38, 100, 233, 115, 87, 167, 92, 225, 52, 205, 185, 99, 249, 88, 165, 245, 29, 253, 161, 39, 54, 218, 62, 101, 46, 148, 119, 238, 157, 241, 182, 232, 145, 133, 168, 253, 78, 234, 234, 117, 227, 141, 21, 139, 123, 174, 121, 83, 95, 159, 165, 89, 115, 194, 79, 146, 231, 112, 74, 136, 97, 88, 217, 81, 99, 186, 103, 174, 91, 2, 165, 174, 19, 64, 155, 240, 63, 26, 32, 133, 106, 243, 179, 173, 93, 47, 235, 209, 116, 174, 9, 234, 153, 149, 115, 31, 109, 65, 203, 224, 129, 135, 127, 89, 138, 173, 177, 239, 222, 224, 46, 75, 100, 66, 67, 52, 34, 27, 17, 137, 127, 150, 0, 71, 4, 175, 45, 6, 140, 157, 247, 124, 156, 66, 2, 98, 0, 247, 109, 207, 193, 3, 175, 28, 125, 187, 78, 74, 51, 125, 70, 217, 83, 35, 205, 197, 230, 70, 171, 151, 182, 208, 231, 179, 26, 127, 206, 113, 112, 203, 47, 38, 72, 3, 137, 129, 174, 177, 204, 146, 59, 50, 122, 182, 23, 27, 164, 185, 50, 206, 41, 28, 198, 247, 49, 51, 51, 30, 100, 31, 239, 21, 128, 253, 149, 105, 187, 111, 160, 29, 132, 174, 38, 50, 124, 218, 149, 188, 194, 138, 105, 239, 86, 77, 13, 195, 178, 184, 69, 237, 86, 51, 172, 79, 175, 8, 65, 120, 199, 116, 180, 174, 108, 67, 211, 46, 91, 48, 224, 112, 99, 206, 109, 172, 81, 69, 210, 145, 154, 21, 226, 104, 185, 78, 230, 184, 91, 83, 5, 159, 74, 119, 221, 181, 33, 196, 170, 45, 204, 145, 25, 16, 92, 30, 35, 143, 88, 17, 36, 182, 0, 223, 0, 105, 62, 60, 153, 105, 183, 171, 68, 35, 186, 90, 105, 247, 158, 229, 248, 62, 93, 55, 61, 163, 111, 180, 197, 60, 2, 74, 61, 254, 178, 52, 90, 193, 102, 26, 236, 181, 201, 233, 38, 62, 55, 153, 130, 117, 8, 124, 143, 19, 7, 86, 27, 187, 206, 22, 198, 131, 163, 97, 49, 36, 30, 137, 43, 117, 244, 51, 54, 84, 37, 104, 228, 164, 189, 106, 76, 78, 251, 251, 213, 225, 245, 30, 193, 195, 221, 201, 22, 60, 21, 180, 62, 15, 131, 246, 238, 194, 183, 242, 189, 135, 54, 195, 239, 44, 137, 60, 142, 64, 166, 208, 117, 15, 43, 230, 126, 109, 52, 170, 201, 15, 89, 245, 74, 245, 246, 102, 61, 86, 8, 133, 175, 173, 209, 2, 200, 84, 53, 162, 135, 15, 189, 77, 161, 62, 209, 194, 180, 45, 141, 99, 80, 12, 84, 82, 144, 68, 54, 70, 31, 131, 65, 182, 10, 214, 195, 171, 159, 188, 190, 210, 204, 239, 249, 129, 149, 29, 142, 86, 31, 180, 87, 157, 232, 25, 72, 205, 53, 221, 148, 169, 189, 82, 215, 136, 42, 248, 231, 254, 158, 69, 49, 84, 97, 86, 74, 188, 43, 93, 121, 233, 38, 87, 186, 117, 129, 99, 88, 156, 206, 201, 165, 217, 34, 202, 212, 113, 114, 151, 53, 205, 7, 46, 117, 17, 121, 246, 105, 33, 52, 164, 250, 156, 236, 28, 66, 73, 119, 59, 145, 179, 55, 21, 0, 116, 208, 253, 115, 113, 78, 66, 114, 205, 216, 214, 226, 126, 105, 237, 235, 202, 84, 112, 214, 143, 75, 37, 5, 198, 103, 232, 213, 53, 91, 75, 168, 227, 154, 155, 191, 32, 98, 183, 157, 31, 80, 215, 57, 185, 4, 212, 136, 33, 63, 244, 138, 30, 156, 215, 223, 226, 208, 246, 223, 238, 229, 78, 171, 240, 171, 117, 132, 245, 159, 76, 33, 178, 49, 164, 72, 59, 98, 4, 1, 250, 149, 47, 139, 215, 129, 17, 86, 13, 113, 234, 182, 227, 40, 11, 4, 166, 172, 28, 134, 158, 110, 249, 117, 220, 102, 148, 186, 53, 119, 30, 158, 203, 23, 21, 227, 180, 131, 197, 254, 226, 179, 164, 210, 160, 159, 142, 53, 216, 236, 5, 39, 85, 233, 94, 127, 56, 91, 156, 45, 215, 75, 26, 203, 198, 158, 190, 117, 55, 161, 124, 59, 38, 123, 84, 38, 232, 195, 74, 210, 38, 217, 229, 73, 53, 77, 135, 22, 169, 187, 227, 21, 6, 64, 22, 145, 132, 210, 93, 193, 34, 172, 213, 65, 37, 137, 67, 26, 29, 94, 237, 41, 53, 225, 200, 116, 78, 105, 155, 199, 153, 138, 232, 140, 123, 21, 38, 177, 216, 171, 101, 191, 199, 116, 133, 7, 158, 29, 12, 36, 170, 166, 83, 70, 236, 120, 239, 32, 190, 8, 81, 215, 175, 124, 108, 216, 252, 75, 252, 85, 21, 123, 230, 225, 205, 19, 172, 123, 244, 82, 194, 129, 165, 117, 115, 200, 65, 237, 208, 251, 97, 16, 131, 41, 81, 85, 187, 178, 11, 252, 223, 205, 150, 57, 84, 1, 25, 31, 246, 201, 232, 6, 59, 195, 128, 21, 5, 108, 234, 214, 5, 175, 136, 222, 37, 192, 104, 200, 252, 46, 86, 237, 17, 180, 54, 126, 121, 119, 255, 254, 161, 168, 99, 80, 78, 45, 134, 242, 231, 99, 106, 58, 198, 59, 92, 167, 213, 144, 115, 15, 17, 124, 209, 192, 44, 214, 26, 250, 1, 189, 231, 61, 76, 149, 211, 138, 177, 255, 207, 52, 191, 183, 205, 49, 169, 63, 128, 202, 28, 55, 132, 146, 186, 48, 17, 36, 110, 44, 137, 161, 185, 138, 69, 86, 205, 105, 178, 62, 247, 253, 156, 207, 215, 155, 78, 42, 138, 232, 151, 231, 93, 241, 204, 243, 228, 201, 180, 117, 84, 29, 96, 94, 99, 103, 215, 179, 26, 205, 188, 231, 172, 156, 182, 41, 142, 208, 97, 237, 147, 242, 0, 130, 232, 191, 237, 72, 104, 221, 219, 246, 59, 166, 105, 102, 84, 191, 35, 149, 2, 237, 117, 107, 251, 211, 26, 113, 132, 245, 85, 37, 172, 164, 124, 233, 107, 122, 9, 219, 140, 181, 152, 243, 217, 26, 6, 118, 208, 159, 233, 113, 116, 69, 145, 25, 156, 43, 212, 38, 89, 192, 209, 89, 166, 92, 64, 92, 0, 98, 241, 171, 62, 19, 91, 12, 39, 183, 219, 248, 54, 109, 20, 106, 73, 170, 36, 90, 28, 155, 34, 191, 196, 125, 159, 229, 17, 228, 254, 43, 58, 239, 66, 84, 9, 187, 18, 62, 120, 169, 46, 163, 108, 243, 45, 48, 128, 165, 174, 12, 169, 149, 12, 134, 89, 7, 189, 251, 140, 121, 129, 211, 233, 126, 23, 208, 102, 121, 80, 196, 61, 115, 51, 244, 140, 66, 223, 25, 112, 94, 137, 164, 123, 161, 115, 241, 224, 144, 32, 4, 182, 75, 128, 196, 154, 145, 242, 114, 239, 165, 118, 157, 181, 143, 106, 229, 191, 64, 184, 21, 110, 250, 117, 178, 2, 55, 71, 61, 23, 172, 20, 156, 248, 139, 64, 228, 105, 104, 237, 202, 127, 177, 137, 208, 78, 140, 45, 79, 106, 196, 92, 148, 202, 104, 146, 253, 124, 108, 82, 98, 123, 210, 114, 185, 222, 88, 129, 250, 98, 20, 111, 208, 236, 103, 79, 255, 121, 14, 208, 206, 81, 156, 137, 232, 101, 161, 174, 176, 249, 233, 43, 217, 91, 94, 50, 16, 26, 107, 154, 92, 185, 84, 234, 218, 217, 192, 8, 134, 195, 99, 214, 168, 128, 69, 119, 1, 140, 51, 150, 160, 73, 241, 159, 1, 1, 241, 37, 193, 31, 9, 230, 249, 234, 69, 164, 225, 6, 232, 194, 130, 121, 153, 211, 167, 100, 214, 200, 105, 71, 243, 217, 149, 115, 96, 150, 166, 107, 112, 108, 236, 136, 57, 240, 186, 163, 225, 8, 49, 15, 135, 5, 227, 121, 84, 10, 193, 48, 11, 181, 163, 236, 79, 205, 216, 1, 163, 199, 72, 228, 185, 143, 25, 37, 171, 209, 65, 121, 211, 49, 230, 235, 32, 197, 150, 247, 8, 151, 248, 15, 90, 143, 244, 72, 210, 176, 25, 59, 80, 231, 83, 217, 94, 116, 93, 230, 52, 186, 43, 101, 175, 235, 253, 155, 39, 101, 176, 87, 200, 219, 194, 147, 68, 233, 197, 114, 59, 183, 61, 74, 79, 254, 4, 251, 157, 68, 67, 48, 26, 125, 51, 174, 241, 73, 123, 12, 111, 198, 72, 141, 148, 45, 210, 240, 120, 247, 173, 12, 218, 245, 26, 139, 224, 157, 6, 195, 13, 25, 118, 91, 138, 86, 149, 139, 36, 70, 15, 44, 198, 247, 127, 174, 203, 232, 174, 42, 135, 190, 187, 227, 180, 244, 107, 22, 9, 17, 119, 150, 181, 235, 187, 131, 24, 95, 157, 51, 123, 174, 126, 90, 94, 177, 45, 68, 139, 19, 208, 32, 206, 105, 51, 90, 142, 224, 171, 154, 59, 26, 203, 60, 172, 68, 123, 168, 39, 40, 151, 197, 219, 125, 235, 15, 21, 21, 143, 192, 100, 108, 140, 92, 11, 24, 146, 101, 151, 117, 206, 68, 162, 95, 176, 78, 78, 124, 174, 142, 218, 160, 150, 25, 200, 55, 145, 18, 136, 212, 102, 176, 103, 120, 254, 114, 107, 203, 235, 215, 241, 7, 12, 222, 244, 135, 119, 69, 80, 223, 87, 185, 91, 22, 152, 234, 92, 62, 19, 193, 159, 47, 19, 142, 175, 192, 7, 86, 255, 92, 198, 202, 73, 116, 114, 66, 114, 232, 182, 45, 66, 112, 253, 208, 155, 54, 163, 67, 28, 113, 177, 154, 213, 201, 152, 113, 3, 183, 44, 35, 65, 173, 150, 115, 64, 106, 111, 56, 167, 4, 116, 49, 35, 187, 207, 176, 41, 192, 185, 163, 208, 158, 85, 198, 18, 151, 226, 198, 232, 131, 131, 105, 183, 129, 168, 50, 123, 98, 51, 188, 229, 31, 57, 31, 210, 143, 126, 116, 228, 221, 82, 97, 246, 106, 213, 83, 11, 158, 132, 6, 110, 216, 79, 55, 1, 1, 252, 102, 151, 32, 232, 49, 207, 179, 183, 184, 190, 175, 167, 215, 117, 120, 27, 113, 177, 167, 253, 142, 113, 131, 227, 220, 9, 250, 174, 119, 216, 88, 80, 100, 208, 184, 111, 50, 3, 137, 208, 158, 22, 50, 241, 204, 126, 47, 154, 9, 77, 250, 175, 152, 50, 81, 93, 252, 79, 254, 117, 66, 99, 249, 71, 80, 228, 179, 33, 210, 55, 216, 217, 14, 173, 49, 75, 173, 53, 148, 60, 127, 149, 97, 60, 120, 174, 245, 30, 38, 91, 160, 58, 211, 148, 206, 127, 107, 92, 177, 169, 81, 13, 198, 93, 140, 111, 66, 210, 196, 33, 86, 100, 191, 45, 125, 69, 216, 252, 38, 217, 17, 184, 234, 234, 187, 100, 39, 229, 15, 253, 78, 81, 129, 253, 122, 203, 123, 29, 134, 16, 212, 59, 30, 7, 69, 239, 167, 0, 118, 118, 197, 129, 233, 19, 190, 187, 207, 78, 38, 90, 36, 142, 160, 97, 30, 114, 191, 97, 138, 250, 217, 136, 204, 155, 30, 165, 237, 11, 236, 36, 153, 130, 215, 138, 4, 65, 142, 132, 51, 250, 14, 220, 192, 28, 225, 61, 159, 73, 145, 0, 20, 43, 211, 82, 179, 5, 50, 251, 105, 81, 86, 138, 93, 47, 3, 152, 9, 251, 81, 255, 116, 40, 216, 153, 211, 119, 147, 148, 31, 159, 167, 101, 122, 219, 142, 94, 41, 162, 159, 137, 130, 136, 29, 210, 38, 50, 170, 74, 174, 175, 238, 227, 157, 2, 17, 37, 105, 80, 131, 41, 174, 82, 16, 42, 100, 59, 221, 52, 61, 5, 191, 175, 88, 172, 29, 37, 220, 245, 180, 112, 249, 47, 232, 48, 25, 169, 189, 105, 181, 196, 228, 161, 9, 52, 54, 56, 229, 93, 50, 210, 108, 173, 142, 203, 240, 2, 114, 63, 245, 88, 235, 240, 213, 236, 40, 39, 40, 151, 210, 51, 125, 40, 0, 102, 13, 28, 68, 155, 22, 199, 137, 139, 21, 42, 212, 210, 32, 70, 146, 86, 65, 23, 21, 195, 177, 159, 82, 94, 252, 178, 228, 64, 66, 52, 60, 227, 162, 51, 251, 139, 144, 44, 78, 27, 11, 30, 142, 248, 106, 246, 245, 29, 17, 197, 75, 215, 2, 202, 54, 93, 40, 176, 136, 97, 44, 64, 8, 220, 164, 150, 36, 61, 213, 246, 196, 186, 170, 119, 82, 112, 223, 89, 200, 140, 91, 9, 171, 83, 149, 133, 168, 86, 121, 41, 40, 4, 161, 65, 93, 121, 61, 180, 184, 54, 140, 178, 167, 149, 134, 227, 113, 228, 53, 144, 78, 37, 183, 181, 137, 169, 9, 206, 166, 101, 179, 240, 191, 59, 117, 39, 227, 99, 177, 167, 152, 32, 169, 244, 122, 201, 139, 255, 149, 34, 247, 201, 109, 147, 230, 174, 63, 211, 15, 75, 178, 135, 229, 97, 167, 69, 253, 122, 225, 178, 228, 78, 30, 218, 252, 77, 17, 238, 170, 39, 139, 87, 69, 21, 187, 88, 19, 30, 146, 82, 140, 88, 241, 47, 230, 89, 128, 174, 252, 4, 26, 251, 142, 130, 89, 197, 153, 221, 28, 107, 43, 70, 176, 229, 90, 250, 231, 11, 141, 175, 53, 90, 42, 211, 238, 158, 16, 201, 171, 211, 231, 226, 58, 27, 90, 120, 90, 158, 232, 37, 115, 74, 76, 128, 16, 240, 55, 95, 31, 187, 237, 115, 73, 91, 44, 92, 53, 129, 112, 153, 151, 84, 127, 92, 12, 134, 137, 180, 65, 11, 11, 218, 171, 185, 57, 150, 188, 41, 118, 180, 248, 217, 18, 69, 171, 181, 198, 29, 28, 132, 197, 167, 151, 108, 65, 218, 90, 75, 87, 142, 57, 158, 60, 52, 253, 192, 0, 61, 80, 220, 34, 37, 154, 200, 208, 137, 59, 102, 28, 76, 66, 233, 101, 112, 127, 78, 191, 49, 29, 197, 116, 143, 165, 29, 38, 88, 212, 25, 92, 217, 29, 0, 234, 57, 84, 9, 28, 91, 139, 56, 17, 211, 183, 114, 63, 41, 75, 60, 213, 130, 79, 174, 231, 9, 96, 117, 71, 139, 244, 159, 240, 112, 60, 17, 139, 246, 115, 8, 36, 203, 38, 164, 198, 215, 208, 169, 121, 75, 62, 229, 203, 108, 29, 246, 4, 12, 8, 15, 245, 235, 224, 115, 172, 107, 111, 68, 206, 67, 36, 90, 155, 208, 135, 233, 251, 13, 135, 155, 18, 42, 7, 36, 130, 193, 90, 188, 214, 200, 166, 63, 118, 39, 70, 186, 53, 247, 32, 248, 24, 78, 81, 234, 115, 186, 56, 170, 92, 46, 39, 98, 210, 237, 34, 32, 187, 246, 189, 108, 0, 82, 4, 54, 92, 20, 206, 225, 83, 238, 254, 254, 191, 1, 57, 149, 141, 119, 99, 179, 164, 168, 117, 2, 65, 25, 129, 11, 44, 36, 230, 140, 134, 62, 243, 184, 34, 227, 159, 218, 243, 94, 43, 255, 161, 53, 59, 214, 222, 52, 117, 75, 82, 1, 187, 19, 96, 5, 59, 96, 210, 209, 7, 239, 207, 216, 181, 58, 224, 130, 5, 4, 63, 151, 86, 240, 156, 227, 208, 60, 170, 25, 167, 86, 100, 173, 38, 20, 120, 218, 60, 24, 60, 40, 181, 191, 253, 161, 131, 105, 53, 220, 136, 83, 228, 210, 44, 69, 72, 44, 157, 79, 180, 54, 146, 19, 35, 229, 207, 139, 211, 223, 179, 181, 102, 55, 92, 141, 69, 210, 178, 132, 123, 134, 132, 151, 180, 52, 180, 86, 32, 18, 138, 163, 180, 103, 119, 188, 80, 79, 89, 147, 80, 139, 83, 189, 33, 147, 255, 42, 59, 226, 118, 244, 91, 70, 209, 225, 182, 180, 177, 67, 230, 92, 241, 95, 84, 218, 8, 207, 250, 168, 243, 137, 76, 109, 220, 192, 109, 27, 192, 108, 121, 239, 222, 146, 145, 226, 68, 177, 215, 48, 75, 61, 101, 226, 151, 162, 152, 236, 154, 142, 156, 85, 213, 229, 36, 54, 225, 16, 48, 5, 8, 203, 223, 124, 137, 241, 186, 168, 254, 250, 137, 86, 197, 228, 22, 9, 27, 143, 228, 50, 9, 8, 243, 181, 224, 144, 175, 125, 140, 198, 147, 231, 116, 254, 114, 117, 125, 109, 234, 225, 152, 204, 2, 165, 114, 251, 77, 218, 182, 169, 78, 129, 130, 85, 38, 55, 4, 195, 81, 26, 207, 124, 108, 235, 119, 229, 102, 105, 80, 40, 61, 236, 65, 37, 46, 96, 233, 58, 253, 130, 156, 137, 160, 130, 216, 128, 154, 44, 74, 156, 35, 111, 100, 26, 58, 65, 123, 86, 111, 115, 87, 66, 52, 9, 146, 140, 219, 209, 51, 247, 21, 222, 129, 207, 161, 31, 138, 24, 145, 149, 199, 225, 26, 31, 139, 155, 208, 96, 189, 238, 29, 58, 186, 156, 181, 104, 151, 107, 56, 33, 39, 11, 210, 145, 136, 89, 175, 77, 218, 238, 148, 157, 114, 60, 193, 206, 28, 137, 127, 133, 145, 54, 8, 193, 97, 255, 205, 102, 71, 95, 77, 53, 156, 133, 16, 61, 210, 81, 81, 166, 78, 118, 163, 113, 25, 95, 28, 22, 227, 135, 138, 214, 160, 79, 92, 7, 72, 216, 219, 77, 247, 161, 94, 208, 79, 25, 78, 107, 249, 114, 18, 150, 196, 254, 162, 212, 37, 239, 219, 178, 62, 163, 209, 37, 82, 250, 114, 117, 55, 151, 32, 134, 58, 54, 211, 91, 78, 167, 19, 70, 105, 40, 24, 66, 176, 231, 177, 130, 137, 219, 187, 150, 107, 11, 234, 129, 139, 128, 36, 211, 83, 141, 25, 205, 196, 135, 194, 62, 8, 79, 176, 52, 18, 110, 66, 238, 130, 173, 252, 154, 228, 228, 58, 98, 29, 139, 246, 176, 178, 95, 76, 214, 106, 105, 82, 45, 23, 0, 119, 98, 171, 162, 40, 192, 250, 162, 74, 245, 27, 76, 224, 91, 73, 68, 132, 48, 133, 181, 156, 102, 1, 125, 107, 138, 191, 193, 118, 247, 144, 139, 172, 36, 177, 127, 205, 139, 14, 229, 124, 61, 47, 239, 15, 35, 3, 88, 205, 5, 161, 60, 91, 7, 4, 238, 96, 133, 33, 162, 131, 3, 61, 9, 241, 221, 86, 243, 41, 48, 184, 34, 46, 192, 36, 23, 4, 119, 110, 73, 184, 207, 223, 25, 132, 108, 60, 75, 202, 116, 167, 67, 192, 104, 237, 208, 161, 113, 212, 25, 159, 53, 204, 18, 39, 10, 49, 139, 173, 138, 13, 126, 249, 7, 3, 197, 71, 254, 58, 77, 92, 150, 10, 130, 6, 78, 230, 25, 207, 67, 130, 52, 63, 163, 119, 244, 217, 208, 139, 59, 36, 59, 27, 24, 252, 187, 98, 47, 92, 133, 224, 244, 2, 148, 252, 68, 181, 31, 54, 142, 226, 27, 2, 244, 90, 236, 130, 114, 198, 53, 202, 169, 36, 28, 84, 116, 54, 182, 232, 126, 9, 177, 193, 24, 186, 108, 233, 8, 28, 64, 7, 59, 89, 214, 47, 234, 19, 0, 216, 101, 220, 19, 160, 161, 71, 114, 171, 159, 230, 250, 8, 9, 173, 157, 67, 78, 176, 123, 116, 84, 249, 115, 241, 210, 52, 237, 242, 60, 219, 130, 61, 221, 25, 47, 141, 27, 142, 24, 214, 232, 139, 117, 180, 131, 81, 124, 109, 253, 90, 208, 166, 7, 219, 247, 229, 33, 99, 52, 104, 166, 106, 6, 54, 189, 57, 171, 157, 252, 219, 245, 212, 237, 185, 244, 197, 110, 59, 105, 232, 200, 87, 194, 174, 113, 236, 110, 66, 73, 48, 249, 136, 236, 32, 247, 164, 57, 19, 9, 189, 125, 16, 43, 200, 21, 248, 242, 66, 43, 55, 178, 217, 250, 36, 11, 67, 1, 132, 218, 235, 62, 9, 98, 26, 190, 34, 95, 241, 153, 222, 239, 54, 84, 4, 238, 188, 201, 148, 20, 179, 52, 72, 18, 216, 147, 147, 91, 234, 196, 167, 253, 119, 19, 239, 239, 74, 57, 37, 201, 30, 41, 83, 128, 59, 164, 254, 95, 250, 56, 222, 6, 192, 224, 101, 126, 5, 155, 64, 87, 29, 20, 14, 215, 240, 81, 112, 216, 41, 226, 53, 12, 81, 213, 209, 17, 133, 225, 15, 31, 238, 157, 109, 255, 210, 114, 69, 94, 129, 125, 216, 19, 41, 150, 209, 103, 40, 142, 50, 65, 90, 206, 226, 124, 245, 110, 101, 68, 138, 205, 214, 36, 32, 229, 247, 72, 219, 104, 195, 35, 145, 53, 235, 119, 50, 180, 139, 82, 211, 182, 224, 200, 248, 196, 252, 35, 248, 65, 121, 61, 24, 168, 91, 218, 99, 159, 37, 206, 45, 126, 0, 198, 201, 241, 170, 38, 52, 160, 44, 183, 165, 237, 4, 173, 173, 205, 25, 232, 237, 204, 0, 214, 53, 62, 247, 91, 145, 27, 97, 115, 12, 80, 198, 237, 64, 134, 30, 215, 218, 89, 207, 100, 178, 115, 80, 216, 56, 17, 71, 130, 29, 66, 104, 234, 172, 170, 34, 37, 145, 191, 24, 215, 191, 179, 11, 205, 96, 160, 69, 188, 166, 246, 17, 196, 196, 208, 42, 168, 99, 111, 178, 134, 164, 37, 153, 190, 88, 99, 170, 183, 186, 49, 64, 85, 174, 144, 25, 19, 228, 75, 247, 85, 200, 30, 188, 240, 32, 230, 183, 197, 144, 247, 217, 34, 244, 6, 36, 207, 198, 226, 181, 176, 192, 146, 111, 218, 154, 151, 28, 203, 42, 142, 125, 44, 43, 122, 186, 83, 77, 77, 157, 113, 246, 49, 182, 253, 126, 249, 188, 238, 132, 71, 154, 229, 143, 244, 148, 245, 6, 188, 187, 60, 136, 50, 224, 132, 204, 252, 123, 209, 127, 88, 80, 153, 40, 96, 66, 209, 109, 6, 170, 151, 152, 206, 242, 79, 88, 144, 86, 71, 200, 36, 25, 87, 58, 50, 144, 87, 193, 163, 149, 11, 140, 97, 151, 139, 232, 167, 177, 202, 242, 179, 32, 157, 114, 36, 3, 87, 3, 77, 68, 87, 4, 142, 126, 250, 49, 156, 54, 17, 127, 233, 193, 114, 197, 14, 109, 130, 220, 38, 31, 208, 33, 127, 209, 61, 73, 202, 184, 116, 18, 100, 161, 49, 132, 85, 208, 248, 91, 121, 5, 12, 219, 140, 221, 230, 206, 140, 204, 16, 218, 65, 103, 102, 180, 165, 21, 73, 104, 27, 24, 177, 67, 163, 154, 10, 0, 200, 35, 66, 52, 224, 221, 226, 152, 105, 83, 34, 125, 216, 168, 81, 126, 137, 190, 30, 246, 234, 27, 106, 8, 161, 83, 16, 246, 11, 232, 38, 156, 59, 171, 103, 179, 127, 98, 99, 202, 163, 82, 248, 33, 211, 199, 53, 118, 12, 131, 78, 111, 54, 72, 226, 103, 211, 219, 182, 250, 136, 139, 185, 118, 83, 39, 96, 220, 64, 110, 213, 239, 40, 87, 56, 180, 92, 76, 102, 130, 0, 146, 226, 25, 246, 246, 248, 57, 15, 102, 105, 221, 252, 171, 181, 136, 185, 54, 163, 94, 87, 227, 39, 112, 92, 124, 208, 169, 8, 188, 89, 149, 172, 10, 141, 36, 149, 170, 77, 189, 85, 219, 109, 208, 63, 35, 18, 240, 4, 216, 214, 128, 135, 237, 93, 71, 159, 195, 27, 134, 163, 152, 17, 137, 216, 17, 177, 170, 117, 129, 165, 239, 72, 229, 83, 65, 165, 144, 122, 56, 199, 95, 147, 41, 247, 26, 116, 15, 175, 16, 227, 126, 93, 213, 85, 11, 185, 38, 72, 151, 179, 56, 85, 110, 114, 48, 4, 17, 233, 16, 56, 8, 20, 190, 83, 137, 6, 5, 59, 109, 45, 84, 69, 22, 135, 168, 20, 4, 112, 109, 2, 231, 237, 97, 18, 241, 26, 101, 72, 144, 52, 241, 44, 248, 90, 199, 59, 200, 243, 211, 112, 59, 116, 92, 120, 59, 108, 220, 242, 80, 144, 112, 60, 89, 231, 132, 175, 233, 86, 134, 50, 78, 216, 29, 191, 124, 226, 250, 78, 227, 139, 14, 20, 154, 136, 128, 35, 44, 20, 116, 145, 76, 45, 162, 167, 178, 13, 150, 251, 1, 67, 126, 71, 127, 25, 55, 238, 104, 150, 59, 124, 62, 61, 184, 1, 4, 217, 243, 26, 179, 142, 136, 146, 32, 119, 79, 41, 41, 135, 42, 243, 40, 222, 57, 54, 41, 46, 36, 162, 77, 154, 99, 138, 39, 232, 66, 158, 1, 178, 193, 73, 195, 117, 148, 253, 59, 121, 28, 0, 61, 151, 139, 124, 6, 21, 155, 205, 220, 252, 27, 48, 83, 59, 0, 104, 176, 247, 127, 115, 202, 182, 99, 247, 45, 25, 69, 60, 192, 185, 6, 56, 74, 151, 149, 9, 83, 56, 64, 57, 80, 113, 210, 90, 180, 86, 115, 16, 210, 118, 135, 92, 198, 99, 145, 137, 173, 217, 18, 188], - [17, 201, 123, 145, 134, 114, 182, 247, 64, 160, 137, 18, 117, 134, 108, 1, 119, 25, 236, 246, 17, 102, 70, 138, 228, 156, 227, 18, 251, 50, 173, 138, 52, 59, 248, 185, 174, 226, 43, 15, 117, 57, 123, 200, 105, 185, 80, 226, 199, 15, 179, 202, 209, 245, 202, 34, 235, 194, 33, 139, 180, 254, 111, 133, 192, 140, 60, 114, 253, 42, 48, 88, 129, 70, 35, 77, 62, 18, 234, 82, 19, 30, 42, 223, 21, 233, 10, 57, 17, 76, 6, 144, 168, 16, 36, 19, 196, 88, 203, 229, 139, 239, 80, 172, 130, 107, 202, 209, 56, 6, 230, 198, 159, 6, 58, 152, 198, 183, 146, 100, 26, 14, 253, 162, 115, 10, 177, 61, 234, 198, 64, 52, 117, 88, 199, 100, 44, 244, 157, 108, 151, 84, 243, 12, 88, 64, 179, 223, 37, 115, 120, 14, 126, 27, 182, 41, 238, 128, 254, 91, 117, 12, 202, 72, 15, 45, 146, 7, 250, 60, 10, 233, 233, 94, 147, 199, 132, 65, 176, 222, 50, 76, 2, 5, 209, 167, 209, 34, 88, 153, 117, 27, 83, 138, 15, 189, 52, 9, 93, 68, 16, 86, 238, 217, 249, 63, 131, 230, 162, 247, 132, 174, 170, 42, 167, 25, 87, 186, 90, 85, 31, 166, 5, 228, 33, 96, 134, 59, 43, 108, 192, 65, 46, 215, 225, 160, 82, 27, 148, 92, 56, 24, 33, 137, 230, 35, 233, 222, 224, 46, 130, 156, 129, 144, 192, 42, 223, 73, 31, 184, 235, 251, 55, 198, 130, 13, 131, 23, 183, 6, 169, 170, 148, 176, 198, 82, 235, 214, 204, 165, 218, 203, 126, 17, 219, 60, 234, 122, 232, 120, 137, 113, 149, 91, 159, 218, 107, 165, 76, 100, 42, 48, 247, 52, 104, 201, 201, 194, 196, 162, 240, 67, 87, 15, 155, 75, 227, 91, 54, 114, 17, 111, 30, 145, 13, 200, 41, 227, 145, 79, 138, 168, 181, 73, 138, 207, 129, 191, 66, 121, 244, 88, 11, 154, 190, 56, 89, 246, 6, 108, 191, 102, 212, 193, 32, 218, 144, 172, 61, 166, 38, 15, 43, 184, 94, 244, 133, 234, 137, 243, 80, 54, 117, 18, 147, 173, 128, 67, 124, 237, 41, 22, 249, 101, 51, 132, 57, 240, 89, 10, 196, 218, 9, 175, 175, 102, 10, 30, 111, 242, 135, 23, 96, 54, 78, 120, 223, 114, 246, 15, 225, 193, 139, 15, 47, 73, 52, 98, 97, 29, 245, 31, 105, 153, 96, 245, 191, 177, 222, 158, 12, 97, 71, 175, 185, 147, 33, 78, 60, 68, 212, 212, 148, 191, 253, 235, 242, 168, 230, 238, 120, 129, 176, 138, 71, 214, 44, 169, 82, 208, 144, 206, 251, 158, 35, 196, 85, 16, 4, 234, 186, 103, 68, 48, 201, 62, 79, 154, 146, 97, 252, 79, 104, 87, 77, 227, 202, 197, 83, 57, 46, 232, 197, 255, 152, 196, 229, 209, 99, 196, 117, 45, 252, 141, 23, 219, 135, 60, 48, 68, 122, 185, 165, 24, 255, 248, 33, 44, 17, 1, 135, 203, 171, 121, 243, 30, 114, 220, 115, 22, 150, 54, 59, 131, 114, 91, 79, 235, 43, 162, 254, 171, 72, 74, 242, 63, 53, 134, 81, 117, 26, 212, 135, 79, 13, 186, 199, 151, 201, 106, 178, 17, 209, 244, 16, 75, 239, 157, 191, 76, 147, 70, 156, 153, 221, 57, 23, 127, 50, 38, 200, 89, 156, 122, 41, 139, 87, 97, 202, 122, 131, 254, 43, 17, 209, 227, 11, 41, 191, 31, 47, 242, 38, 158, 178, 156, 16, 26, 52, 34, 162, 196, 237, 243, 221, 45, 220, 225, 176, 220, 67, 39, 196, 251, 112, 58, 77, 215, 188, 114, 155, 248, 199, 82, 196, 85, 215, 108, 157, 113, 65, 135, 198, 170, 2, 223, 122, 253, 193, 3, 202, 209, 205, 71, 184, 130, 181, 204, 7, 212, 8, 26, 126, 150, 197, 39, 186, 179, 218, 62, 114, 215, 150, 212, 70, 210, 248, 6, 112, 171, 108, 54, 97, 238, 61, 112, 50, 75, 185, 83, 69, 1, 22, 156, 49, 215, 57, 98, 12, 158, 100, 204, 56, 181, 36, 38, 175, 60, 137, 212, 52, 123, 135, 199, 68, 79, 191, 94, 7, 25, 47, 168, 140, 12, 87, 154, 47, 172, 174, 101, 118, 235, 188, 212, 133, 241, 212, 67, 46, 131, 186, 169, 249, 49, 74, 217, 27, 194, 238, 131, 196, 70, 155, 233, 119, 204, 66, 188, 168, 60, 50, 110, 189, 132, 214, 197, 107, 23, 247, 95, 233, 239, 237, 248, 18, 121, 75, 255, 70, 22, 140, 100, 224, 91, 137, 158, 180, 147, 255, 48, 225, 224, 254, 149, 82, 215, 56, 24, 15, 125, 63, 193, 37, 199, 107, 61, 238, 233, 166, 126, 179, 218, 152, 110, 92, 28, 199, 152, 167, 123, 43, 207, 92, 144, 21, 47, 139, 218, 254, 255, 255, 127, 208, 108, 185, 38, 129, 108, 22, 153, 173, 206, 242, 17, 200, 5, 90, 230, 224, 12, 206, 226, 62, 213, 219, 68, 34, 219, 78, 246, 41, 8, 226, 156, 102, 6, 60, 83, 71, 198, 87, 140, 126, 99, 102, 234, 15, 102, 64, 70, 246, 138, 240, 172, 28, 216, 10, 207, 49, 58, 104, 29, 4, 114, 178, 145, 109, 243, 53, 145, 118, 78, 19, 230, 35, 97, 144, 73, 145, 5, 104, 177, 121, 252, 175, 3, 84, 28, 68, 186, 122, 202, 38, 147, 140, 192, 94, 184, 17, 176, 68, 147, 221, 203, 91, 167, 170, 119, 223, 156, 44, 36, 16, 58, 197, 51, 108, 162, 81, 250, 188, 163, 120, 106, 79, 231, 4, 166, 255, 104, 24, 214, 188, 203, 16, 54, 170, 119, 242, 20, 80, 202, 113, 204, 237, 39, 155, 251, 50, 21, 126, 40, 159, 69, 133, 57, 204, 23, 193, 139, 16, 16, 6, 44, 27, 112, 65, 82, 102, 1, 241, 65, 106, 54, 211, 182, 130, 102, 74, 48, 104, 98, 54, 32, 45, 41, 230, 30, 248, 6, 110, 128, 36, 161, 217, 154, 227, 41, 44, 95, 97, 197, 23, 170, 180, 33, 80, 155, 167, 86, 67, 249, 76, 249, 187, 79, 123, 96, 207, 225, 216, 57, 162, 129, 157, 85, 125, 250, 148, 141, 134, 120, 88, 57, 116, 78, 168, 108, 134, 68, 29, 209, 144, 78, 223, 98, 133, 198, 198, 247, 47, 214, 208, 240, 53, 89, 26, 32, 19, 51, 44, 184, 4, 99, 223, 69, 148, 2, 159, 84, 60, 163, 2, 8, 239, 212, 21, 49, 12, 33, 4, 85, 238, 100, 253, 175, 31, 172, 237, 24, 62, 22, 104, 249, 200, 68, 110, 16, 40, 87, 227, 224, 156, 146, 5, 107, 38, 53, 37, 249, 138, 190, 113, 149, 43, 253, 108, 230, 26, 173, 107, 103, 207, 88, 226, 81, 96, 147, 19, 154, 167, 1, 131, 223, 231, 163, 236, 228, 118, 182, 23, 243, 249, 3, 155, 89, 218, 152, 221, 155, 132, 180, 214, 252, 211, 69, 81, 165, 172, 142, 51, 10, 167, 18, 102, 28, 105, 64, 243, 250, 189, 133, 120, 69, 172, 185, 145, 156, 172, 22, 81, 28, 92, 10, 10, 7, 131, 192, 140, 213, 224, 162, 4, 232, 204, 129, 91, 174, 224, 36, 61, 162, 15, 68, 201, 91, 149, 10, 143, 143, 145, 153, 150, 98, 172, 156, 155, 105, 39, 35, 142, 40, 172, 127, 93, 30, 90, 77, 204, 5, 189, 116, 238, 243, 80, 7, 3, 248, 70, 97, 232, 251, 135, 168, 87, 106, 45, 223, 253, 131, 137, 110, 192, 143, 215, 51, 89, 32, 242, 225, 5, 243, 203, 251, 220, 24, 252, 168, 213, 42, 238, 0, 7, 182, 203, 137, 215, 62, 52, 43, 44, 201, 37, 175, 189, 142, 164, 165, 188, 97, 217, 68, 212, 100, 12, 213, 167, 251, 191, 3, 46, 238, 138, 114, 226, 75, 111, 39, 160, 70, 110, 165, 166, 205, 255, 71, 98, 99, 233, 31, 144, 164, 62, 196, 208, 84, 235, 247, 83, 84, 120, 252, 177, 153, 219, 231, 215, 166, 166, 223, 111, 71, 22, 171, 224, 45, 126, 102, 134, 5, 142, 12, 244, 134, 71, 103, 87, 233, 222, 91, 130, 241, 160, 113, 197, 97, 164, 169, 184, 246, 111, 146, 188, 110, 73, 210, 28, 144, 147, 145, 112, 242, 13, 100, 70, 255, 143, 199, 173, 162, 57, 141, 178, 113, 247, 28, 189, 93, 190, 152, 18, 128, 23, 162, 55, 242, 27, 125, 160, 12, 229, 50, 86, 141, 222, 11, 162, 148, 236, 119, 141, 117, 159, 222, 59, 255, 198, 92, 99, 10, 23, 208, 69, 255, 214, 255, 78, 132, 100, 149, 224, 80, 83, 254, 200, 219, 5, 32, 238, 78, 128, 168, 81, 165, 218, 125, 218, 216, 227, 14, 145, 118, 120, 201, 157, 128, 210, 96, 22, 56, 81, 79, 58, 52, 133, 48, 239, 189, 232, 36, 55, 174, 38, 242, 94, 159, 46, 125, 135, 99, 214, 197, 37, 206, 140, 60, 90, 213, 234, 103, 2, 9, 27, 221, 74, 228, 124, 127, 74, 132, 210, 80, 241, 166, 5, 255, 190, 255, 15, 9, 171, 103, 69, 223, 142, 44, 248, 81, 32, 198, 194, 47, 134, 236, 188, 9, 66, 213, 209, 219, 221, 175, 48, 194, 46, 20, 81, 135, 234, 117, 4, 117, 5, 72, 175, 114, 19, 77, 186, 91, 68, 142, 223, 101, 192, 119, 121, 102, 248, 136, 89, 91, 155, 139, 146, 125, 247, 182, 107, 16, 158, 32, 20, 15, 234, 112, 2, 92, 63, 133, 146, 87, 211, 145, 34, 6, 95, 76, 112, 84, 163, 96, 48, 104, 218, 63, 180, 227, 98, 114, 48, 156, 70, 53, 175, 18, 12, 197, 242, 240, 120, 113, 73, 198, 142, 9, 63, 3, 219, 190, 186, 251, 246, 27, 14, 179, 29, 103, 235, 117, 246, 220, 124, 48, 11, 245, 177, 169, 224, 238, 182, 50, 226, 162, 195, 215, 150, 161, 69, 223, 174, 147, 3, 79, 115, 170, 131, 46, 176, 247, 80, 235, 95, 222, 160, 238, 135, 28, 237, 217, 190, 65, 162, 252, 186, 85, 8, 78, 244, 52, 136, 216, 186, 69, 220, 0, 10, 86, 41, 174, 88, 254, 222, 148, 238, 139, 224, 251, 10, 168, 69, 194, 224, 157, 177, 0, 207, 208, 137, 211, 197, 3, 96, 132, 164, 123, 55, 166, 163, 202, 249, 53, 124, 149, 254, 28, 76, 25, 157, 58, 57, 224, 26, 205, 78, 84, 53, 146, 186, 178, 45, 178, 1, 151, 18, 168, 33, 18, 153, 219, 23, 108, 228, 158, 136, 144, 93, 193, 38, 94, 55, 101, 56, 55, 185, 122, 36, 102, 44, 87, 112, 41, 235, 60, 163, 155, 66, 60, 171, 242, 71, 188, 191, 84, 195, 151, 190, 61, 5, 28, 247, 107, 130, 227, 138, 109, 137, 224, 250, 143, 230, 51, 166, 185, 27, 137, 50, 1, 78, 92, 1, 11, 6, 115, 87, 89, 119, 224, 233, 163, 61, 3, 156, 4, 227, 229, 196, 85, 149, 21, 39, 206, 10, 55, 48, 20, 71, 62, 232, 194, 164, 17, 102, 22, 28, 128, 201, 138, 64, 194, 157, 168, 111, 49, 127, 204, 199, 76, 243, 73, 3, 41, 7, 240, 187, 122, 207, 87, 254, 108, 44, 18, 206, 252, 169, 100, 206, 255, 72, 228, 173, 44, 40, 110, 21, 48, 16, 10, 137, 28, 3, 143, 54, 13, 61, 121, 158, 185, 56, 203, 125, 91, 15, 47, 204, 185, 99, 33, 130, 120, 118, 0, 132, 145, 188, 32, 130, 67, 28, 186, 124, 217, 158, 79, 198, 192, 35, 65, 140, 241, 40, 154, 117, 89, 233, 195, 18, 20, 53, 242, 160, 39, 239, 3, 17, 8, 98, 229, 156, 158, 55, 126, 69, 85, 23, 54, 5, 233, 226, 131, 34, 138, 227, 46, 70, 116, 87, 179, 93, 151, 14, 140, 166, 41, 117, 93, 136, 51, 242, 249, 31, 176, 102, 245, 209, 89, 210, 128, 67, 84, 118, 229, 156, 98, 116, 128, 255, 81, 141, 14, 195, 94, 250, 83, 74, 64, 6, 135, 239, 167, 5, 23, 250, 99, 132, 126, 233, 174, 146, 163, 135, 112, 93, 148, 120, 89, 72, 255, 21, 244, 205, 151, 103, 219, 41, 186, 22, 37, 90, 27, 51, 76, 210, 181, 60, 190, 228, 217, 195, 195, 188, 126, 90, 167, 214, 111, 233, 140, 63, 234, 131, 149, 28, 155, 159, 84, 137, 154, 119, 73, 132, 204, 184, 85, 187, 133, 57, 93, 187, 98, 16, 109, 120, 35, 81, 79, 121, 207, 238, 172, 62, 42, 160, 184, 135, 16, 96, 125, 202, 243, 34, 219, 115, 102, 171, 234, 37, 223, 10, 2, 38, 12, 226, 158, 129, 194, 129, 110, 109, 87, 167, 99, 17, 74, 207, 65, 66, 78, 165, 200, 236, 213, 72, 77, 105, 144, 156, 18, 234, 3, 232, 14, 41, 244, 137, 100, 66, 165, 23, 61, 45, 94, 115, 239, 173, 79, 33, 153, 111, 87, 52, 70, 129, 21, 195, 193, 142, 203, 242, 125, 4, 21, 164, 40, 68, 113, 21, 194, 61, 144, 9, 47, 136, 171, 87, 250, 208, 9, 228, 10, 249, 185, 22, 190, 16, 214, 68, 109, 66, 86, 27, 10, 190, 10, 216, 254, 142, 52, 252, 71, 80, 158, 71, 172, 109, 230, 99, 94, 137, 57, 186, 158, 40, 25, 155, 216, 238, 174, 216, 230, 69, 135, 52, 179, 202, 26, 42, 198, 203, 171, 155, 17, 107, 156, 121, 196, 199, 195, 188, 153, 129, 184, 3, 180, 207, 131, 174, 47, 36, 93, 248, 194, 172, 239, 88, 90, 37, 8, 23, 3, 11, 18, 63, 33, 181, 146, 210, 195, 39, 60, 32, 136, 39, 62, 14, 48, 123, 72, 136, 160, 234, 171, 13, 162, 143, 178, 69, 127, 144, 253, 16, 58, 211, 114, 69, 91, 193, 19, 46, 55, 105, 205, 68, 78, 182, 158, 70, 244, 41, 247, 96, 173, 124, 15, 7, 224, 81, 164, 121, 127, 63, 72, 191, 183, 154, 24, 209, 56, 38, 245, 178, 66, 34, 5, 222, 138, 230, 247, 167, 104, 0, 32, 219, 18, 26, 62, 86, 155, 24, 98, 22, 227, 166, 157, 18, 224, 144, 184, 2, 51, 221, 56, 178, 172, 206, 235, 31, 81, 119, 140, 240, 15, 100, 38, 226, 217, 3, 124, 228, 104, 125, 147, 57, 225, 218, 46, 119, 55, 120, 215, 193, 239, 222, 152, 94, 130, 173, 96, 90, 68, 13, 220, 77, 21, 14, 41, 89, 113, 241, 187, 135, 213, 250, 100, 115, 221, 238, 252, 126, 123, 105, 108, 138, 214, 103, 78, 128, 203, 32, 8, 219, 8, 237, 210, 254, 150, 34, 142, 102, 59, 61, 168, 247, 216, 133, 17, 212, 115, 113, 183, 156, 64, 130, 171, 34, 49, 151, 95, 199, 87, 26, 110, 145, 25, 227, 36, 215, 71, 136, 217, 236, 248, 63, 188, 126, 202, 134, 123, 205, 11, 29, 189, 228, 235, 165, 16, 215, 127, 53, 116, 150, 67, 11, 44, 251, 228, 216, 149, 245, 142, 30, 38, 205, 77, 118, 7, 100, 218, 226, 68, 1, 195, 119, 158, 235, 106, 185, 195, 113, 220, 159, 151, 184, 250, 29, 253, 249, 189, 152, 24, 78, 54, 161, 210, 52, 59, 212, 97, 19, 153, 176, 79, 77, 195, 41, 80, 221, 72, 1, 38, 91, 215, 119, 247, 170, 64, 154, 6, 83, 173, 70, 210, 61, 28, 82, 227, 125, 206, 245, 244, 120, 117, 180, 192, 130, 60, 243, 240, 147, 37, 203, 93, 38, 249, 223, 42, 143, 225, 106, 176, 50, 53, 204, 170, 226, 65, 155, 98, 243, 210, 146, 35, 82, 136, 238, 37, 85, 70, 231, 3, 246, 37, 244, 217, 187, 203, 211, 50, 48, 127, 31, 63, 15, 153, 2, 114, 149, 25, 149, 243, 190, 16, 156, 35, 199, 43, 127, 179, 86, 70, 239, 164, 231, 167, 50, 247, 21, 85, 0, 192, 34, 186, 118, 163, 213, 148, 51, 206, 131, 213, 14, 55, 1, 235, 24, 178, 99, 255, 235, 12, 110, 63, 217, 209, 70, 37, 224, 33, 18, 93, 87, 69, 144, 127, 250, 72, 170, 3, 24, 225, 212, 22, 138, 40, 74, 112, 2, 118, 77, 193, 118, 24, 242, 91, 30, 143, 42, 98, 42, 4, 62, 31, 245, 52, 53, 229, 131, 111, 113, 238, 15, 191, 139, 252, 40, 116, 162, 23, 174, 49, 155, 32, 131, 218, 6, 192, 207, 87, 61, 174, 129, 197, 30, 80, 239, 95, 85, 25, 12, 78, 116, 162, 20, 28, 243, 193, 180, 24, 212, 7, 189, 212, 1, 173, 102, 83, 180, 144, 119, 153, 85, 155, 42, 49, 149, 5, 89, 14, 241, 102, 6, 252, 135, 40, 254, 132, 15, 210, 172, 31, 248, 60, 156, 114, 225, 123, 197, 156, 175, 254, 109, 232, 65, 46, 120, 227, 23, 44, 229, 148, 57, 139, 225, 215, 91, 66, 13, 140, 79, 151, 166, 90, 186, 61, 166, 47, 62, 49, 84, 190, 6, 38, 69, 163, 161, 133, 254, 11, 226, 14, 212, 253, 205, 36, 114, 41, 53, 22, 169, 12, 125, 243, 147, 169, 233, 164, 225, 232, 6, 34, 86, 94, 36, 88, 220, 252, 146, 18, 225, 167, 203, 246, 255, 104, 53, 254, 178, 91, 219, 118, 95, 43, 231, 136, 183, 113, 147, 43, 18, 20, 8, 162, 214, 197, 118, 50, 226, 18, 8, 88, 150, 164, 154, 92, 221, 172, 231, 140, 152, 29, 95, 72, 248, 3, 5, 152, 39, 52, 198, 71, 234, 176, 219, 129, 221, 235, 247, 39, 185, 190, 107, 175, 219, 219, 32, 8, 8, 28, 66, 9, 245, 15, 221, 240, 194, 151, 32, 12, 168, 135, 139, 5, 19, 195, 221, 229, 217, 219, 204, 172, 205, 120, 119, 161, 29, 113, 67, 84, 167, 32, 242, 191, 136, 193, 93, 72, 50, 125, 143, 88, 61, 242, 86, 224, 92, 6, 139, 8, 198, 49, 149, 22, 202, 61, 32, 2, 72, 32, 106, 160, 227, 79, 183, 31, 210, 248, 127, 23, 91, 108, 42, 246, 156, 177, 227, 198, 253, 136, 181, 229, 210, 8, 131, 102, 184, 76, 222, 70, 86, 247, 34, 43, 255, 145, 129, 133, 107, 1, 212, 91, 105, 129, 70, 60, 255, 11, 59, 121, 55, 4, 121, 201, 253, 209, 225, 183, 57, 52, 44, 119, 96, 176, 56, 208, 91, 127, 129, 42, 33, 225, 112, 66, 214, 45, 149, 78, 79, 20, 184, 98, 61, 96, 245, 120, 236, 42, 90, 165, 16, 110, 49, 203, 3, 213, 137, 185, 99, 37, 2, 214, 170, 214, 19, 185, 67, 86, 45, 119, 181, 13, 203, 223, 174, 15, 108, 126, 220, 85, 230, 141, 169, 240, 38, 40, 149, 153, 151, 29, 225, 104, 163, 24, 181, 137, 119, 110, 78, 222, 252, 12, 238, 73, 137, 238, 179, 183, 201, 4, 52, 205, 50, 85, 0, 211, 210, 153, 16, 1, 140, 167, 198, 142, 50, 30, 144, 186, 102, 33, 8, 151, 128, 202, 109, 177, 114, 212, 153, 31, 219, 147, 25, 103, 244, 101, 79, 132, 243, 29, 115, 143, 183, 136, 128, 83, 64, 252, 198, 19, 59, 12, 101, 112, 237, 56, 219, 185, 204, 203, 190, 181, 69, 203, 31, 177, 85, 154, 63, 158, 136, 140, 81, 103, 231, 160, 252, 3, 138, 45, 254, 2, 180, 172, 2, 235, 170, 148, 203, 235, 228, 204, 158, 110, 198, 14, 44, 196, 241, 220, 215, 120, 9, 41, 227, 158, 155, 254, 251, 70, 173, 96, 31, 93, 14, 208, 105, 215, 27, 58, 37, 52, 148, 255, 42, 224, 32, 64, 190, 136, 214, 73, 238, 145, 138, 13, 168, 41, 147, 233, 214, 94, 0, 187, 243, 181, 206, 47, 11, 158, 38, 99, 222, 125, 41, 30, 220, 100, 109, 139, 210, 146, 56, 241, 234, 197, 15, 171, 210, 180, 101, 234, 78, 107, 12, 64, 229, 4, 113, 185, 82, 160, 159, 104, 40, 46, 203, 49, 231, 14, 31, 172, 238, 82, 227, 187, 90, 143, 136, 153, 93, 205, 123, 52, 199, 77, 213, 46, 42, 147, 240, 177, 208, 77, 25, 66, 175, 27, 97, 42, 209, 151, 186, 188, 14, 25, 83, 178, 21, 170, 131, 10, 131, 138, 82, 15, 115, 198, 156, 83, 196, 88, 224, 223, 133, 111, 251, 16, 150, 241, 2, 26, 211, 137, 219, 122, 61, 210, 89, 40, 240, 111, 245, 116, 209, 197, 20, 220, 238, 175, 25, 248, 136, 166, 62, 157, 133, 163, 248, 82, 177, 33, 81, 212, 67, 124, 254, 75, 163, 2, 53, 41, 113, 181, 90, 211, 157, 73, 223, 34, 199, 112, 205, 124, 151, 64, 127, 5, 117, 46, 76, 59, 159, 104, 21, 219, 71, 185, 82, 185, 209, 61, 28, 238, 66, 15, 29, 157, 189, 17, 242, 142, 120, 178, 110, 218, 83, 69, 230, 56, 35, 130, 208, 201, 198, 99, 74, 72, 184, 68, 242, 67, 204, 93, 30, 216, 98, 60, 2, 114, 205, 3, 144, 41, 51, 197, 160, 205, 142, 50, 74, 166, 59, 90, 136, 2, 235, 128, 33, 255, 199, 200, 31, 84, 43, 61, 226, 125, 186, 29, 138, 38, 134, 71, 152, 109, 9, 9, 172, 44, 101, 35, 57, 183, 106, 138, 58, 79, 187, 180, 38, 68, 35, 120, 199, 160, 251, 192, 87, 169, 237, 0, 189, 206, 86, 192, 176, 235, 221, 217, 74, 61, 30, 166, 141, 78, 241, 156, 49, 84, 167, 38, 140, 105, 252, 72, 75, 104, 205, 30, 182, 201, 136, 143, 26, 42, 224, 255, 173, 60, 74, 148, 66, 90, 38, 209, 154, 240, 223, 63, 27, 4, 193, 208, 19, 17, 153, 16, 116, 91, 237, 65, 47, 175, 110, 174, 59, 238, 38, 11, 154, 179, 180, 18, 49, 187, 201, 169, 117, 204, 52, 192, 116, 29, 236, 165, 81, 102, 181, 139, 115, 29, 122, 118, 202, 44, 134, 205, 175, 163, 169, 140, 161, 21, 34, 143, 86, 205, 94, 140, 15, 161, 8, 204, 251, 126, 25, 106, 26, 167, 151, 117, 203, 162, 35, 129, 206, 92, 252, 107, 102, 51, 234, 123, 33, 168, 206, 172, 233, 73, 178, 183, 99, 65, 51, 196, 40, 244, 68, 181, 52, 203, 206, 253, 90, 185, 97, 220, 178, 163, 39, 213, 176, 55, 182, 39, 145, 199, 84, 115, 85, 168, 33, 46, 56, 229, 152, 245, 204, 247, 115, 155, 41, 195, 123, 192, 207, 74, 177, 89, 84, 66, 207, 65, 37, 197, 203, 242, 158, 249, 21, 20, 60, 232, 40, 6, 165, 167, 4, 240, 139, 33, 97, 169, 5, 42, 190, 222, 58, 164, 187, 62, 107, 0, 181, 99, 195, 226, 57, 33, 155, 43, 22, 59, 193, 237, 150, 67, 42, 205, 124, 35, 240, 158, 191, 1, 130, 22, 225, 206, 231, 221, 159, 207, 153, 145, 234, 36, 191, 150, 32, 97, 207, 173, 183, 221, 18, 128, 184, 107, 248, 93, 201, 77, 215, 88, 149, 124, 204, 101, 139, 231, 25, 197, 135, 139, 10, 156, 142, 210, 196, 16, 174, 123, 156, 88, 159, 2, 111, 154, 135, 110, 186, 184, 128, 210, 71, 28, 106, 188, 122, 152, 139, 27, 63, 107, 231, 212, 2, 227, 248, 129, 226, 33, 66, 43, 122, 124, 174, 87, 40, 221, 183, 138, 24, 72, 95, 48, 224, 24, 185, 147, 89, 200, 46, 222, 245, 45, 90, 73, 89, 32, 56, 187, 206, 171, 161, 133, 41, 155, 189, 7, 180, 175, 182, 228, 230, 91, 86, 13, 89, 88, 25, 30, 194, 180, 21, 237, 113, 97, 59, 83, 67, 236, 201, 14, 205, 29, 80, 116, 59, 176, 100, 148, 236, 28, 234, 223, 152, 221, 75, 114, 124, 30, 168, 57, 26, 14, 151, 108, 228, 29, 164, 160, 154, 59, 118, 36, 179, 252, 183, 203, 35, 74, 112, 106, 128, 8, 236, 13, 83, 163, 185, 198, 45, 50, 95, 184, 255, 81, 116, 131, 160, 73, 236, 219, 1, 178, 173, 254, 63, 217, 226, 29, 27, 125, 198, 135, 181, 114, 158, 78, 176, 25, 80, 217, 1, 229, 100, 103, 45, 190, 28, 196, 110, 234, 226, 167, 253, 170, 203, 97, 61, 168, 15, 255, 141, 148, 182, 190, 44, 215, 168, 196, 146, 242, 97, 213, 237, 117, 241, 53, 23, 234, 65, 197, 115, 243, 232, 138, 11, 153, 225, 25, 246, 246, 33, 252, 170, 143, 156, 216, 165, 159, 54, 208, 167, 103, 251, 124, 70, 7, 53, 177, 198, 227, 108, 51, 105, 180, 2, 37, 54, 23, 209, 86, 220, 191, 113, 186, 210, 174, 12, 42, 16, 56, 168, 169, 187, 182, 64, 160, 42, 220, 174, 29, 26, 199, 159, 218, 125, 53, 3, 118, 229, 84, 108, 187, 163, 215, 33, 89, 170, 83, 172, 66, 106, 163, 106, 46, 170, 68, 103, 153, 225, 200, 227, 118, 26, 147, 98, 243, 236, 141, 195, 85, 72, 3, 143, 8, 131, 78, 155, 105, 135, 199, 14, 158, 3, 133, 44, 121, 127, 49, 24, 191, 234, 57, 84, 95, 200, 77, 247, 249, 209, 216, 63, 198, 222, 183, 62, 83, 90, 231, 116, 80, 104, 113, 251, 165, 132, 138, 97, 187, 221, 205, 40, 70, 21, 87, 19, 37, 217, 54, 91, 214, 121, 209, 178, 200, 153, 252, 119, 159, 85, 165, 209, 46, 155, 164, 1, 160, 161, 86, 199, 49, 61, 211, 208, 185, 179, 101, 248, 157, 198, 7, 222, 154, 137, 116, 12, 120, 188, 186, 85, 20, 171, 84, 109, 167, 185, 174, 94, 39, 243, 130, 215, 27, 26, 44, 201, 232, 233, 200, 62, 51, 116, 140, 4, 109, 43, 201, 224, 0, 135, 245, 114, 253, 50, 132, 248, 86, 80, 137, 134, 249, 241, 120, 173, 114, 226, 181, 206, 149, 193, 74, 192, 119, 51, 197, 6, 219, 81, 200, 171, 179, 210, 184, 188, 162, 116, 68, 194, 15, 0, 0, 98, 109, 88, 254, 203, 145, 237, 180, 79, 102, 32, 123, 252, 54, 243, 85, 51, 97, 143, 167, 7, 206, 29, 255, 39, 244, 155, 129, 108, 179, 64, 82, 58, 42, 14, 80, 131, 12, 41, 219, 25, 49, 101, 250, 68, 45, 23, 61, 92, 216, 9, 116, 192, 88, 49, 251, 253, 24, 149, 74, 87, 101, 179, 96, 91, 68, 94, 78, 139, 199, 156, 84, 177, 41, 205, 217, 188, 56, 155, 191, 116, 109, 165, 187, 230, 168, 101, 168, 150, 246, 249, 72, 70, 164, 151, 99, 56, 75, 25, 15, 179, 122, 108, 253, 29, 116, 245, 166, 98, 20, 118, 179, 206, 170, 174, 97, 135, 97, 155, 37, 178, 73, 16, 153, 161, 149, 164, 136, 179, 98, 102, 216, 222, 65, 229, 15, 219, 75, 53, 208, 248, 11, 54, 73, 38, 175, 144, 190, 42, 1, 101, 230, 156, 230, 254, 178, 86, 53, 39, 172, 203, 212, 123, 101, 231, 249, 23, 215, 30, 141, 80, 41, 244, 210, 157, 41, 204, 67, 134, 253, 171, 220, 88, 22, 197, 5, 92, 147, 61, 202, 247, 50, 186, 78, 124, 175, 142, 102, 182, 185, 229, 72, 174, 32, 253, 137, 19, 130, 223, 175, 22, 67, 221, 66, 36, 182, 192, 1, 130, 26, 47, 218, 224, 100, 125, 248, 34, 121, 70, 185, 191, 247, 203, 69, 236, 31, 148, 13, 152, 123, 36, 218, 125, 208, 18, 100, 157, 104, 106, 214, 133, 251, 204, 224, 227, 133, 169, 101, 85, 194, 50, 87, 43, 156, 183, 240, 186, 145, 185, 107, 98, 117, 131, 233, 222, 191, 222, 20, 39, 118, 140, 86, 214, 56, 159, 133, 251, 250, 104, 59, 140, 243, 64, 243, 233, 216, 45, 182, 208, 26, 85, 4, 36, 130, 47, 162, 218, 168, 186, 185, 50, 179, 198, 191, 213, 130, 0, 199, 229, 141, 5, 217, 111, 253, 202, 181, 60, 55, 228, 161, 140, 173, 95, 239, 218, 170, 135, 60, 247, 221, 147, 170, 150, 41, 17, 246, 121, 187, 30, 163, 187, 113, 245, 93, 155, 21, 111, 103, 102, 153, 33, 119, 211, 138, 47, 180, 167, 169, 219, 181, 241, 5, 143, 105, 111, 150, 151, 92, 208, 221, 190, 245, 167, 3, 176, 211, 100, 71, 46, 225, 3, 252, 139, 113, 254, 175, 196, 175, 77, 251, 233, 27, 5, 140, 238, 62, 180, 19, 40, 210, 16, 191, 214, 107, 117, 44, 92, 123, 194, 172, 168, 51, 112, 40, 31, 169, 137, 31, 217, 21, 43, 148, 13, 178, 84, 254, 232, 3, 110, 16, 25, 78, 49, 6, 247, 68, 71, 239, 36, 19, 0, 91, 49, 217, 153, 18, 120, 135, 202, 217, 241, 41, 72, 149, 55, 31, 106, 154, 113, 7, 64, 114, 223, 222, 157, 238, 253, 102, 176, 51, 218, 153, 176, 174, 107, 134, 85, 146, 89, 138, 119, 143, 17, 27, 49, 5, 79, 125, 182, 73, 177, 104, 128, 31, 190, 79, 183, 231, 190, 34, 245, 191, 228, 211, 75, 40, 20, 60, 254, 169, 252, 162, 130, 171, 94, 1, 161, 20, 113, 152, 223, 128, 8, 50, 176, 77, 191, 52, 134, 52, 75, 73, 178, 255, 40, 65, 101, 166, 198, 56, 67, 177, 118, 165, 125, 51, 111, 240, 189, 98, 137, 246, 6, 13, 98, 14, 190, 209, 40, 129, 64, 229, 4, 96, 163, 4, 38, 46, 208, 48, 62, 1, 2, 242, 22, 175, 243, 249, 62, 74, 125, 21, 29, 18, 220, 149, 204, 37, 151, 184, 24, 245, 15, 150, 78, 245, 193, 71, 7, 208, 198, 204, 197, 112, 216, 233, 142, 125, 91, 253, 250, 88, 65, 142, 214, 13, 206, 36, 113, 9, 232, 117, 87, 147, 29, 72, 124, 253, 188, 0, 191, 25, 3, 31, 192, 225, 5, 13, 172, 42, 9, 46, 223, 74, 49, 163, 118, 227, 144, 251, 52, 203, 53, 23, 227, 197, 7, 134, 7, 126, 168, 104, 108, 157, 180, 119, 147, 120, 94, 152, 100, 224, 67, 224, 60, 107, 5, 200, 67, 181, 20, 222, 58, 103, 97, 185, 214, 29, 156, 72, 186, 14, 9, 102, 249, 50, 180, 193, 175, 225, 51, 148, 62, 37, 175, 69, 237, 40, 86, 70, 69, 210, 52, 85, 70, 35, 191, 207, 106, 232, 164, 141, 224, 18, 121, 230, 4, 193, 49, 112, 24, 75, 130, 5, 150, 71, 105, 135, 105, 11, 237, 88, 103, 233, 131, 63, 43, 213, 141, 67, 2, 147, 11, 116, 79, 97, 183, 214, 180, 250, 215, 91, 139, 14, 99, 224, 232, 230, 66, 251, 178, 81, 162, 10, 226, 128, 225, 156, 164, 170, 84, 229, 79, 186, 155, 230, 241, 235, 40, 32, 207, 229, 29, 251, 83, 17, 50, 176, 70, 88, 45, 7, 116, 221, 204, 40, 241, 110, 248, 185, 160, 103, 64, 98, 135, 62, 68, 197, 72, 242, 234, 103, 114, 216, 52, 135, 212, 192, 52, 162, 210, 42, 249, 218, 26, 33, 182, 90, 117, 57, 161, 208, 98, 8, 174, 138, 123, 23, 72, 107, 149, 4, 186, 227, 205, 0, 38, 39, 24, 226, 226, 208, 65, 7, 107, 9, 212, 55, 233, 190, 173, 55, 209, 187, 159, 138, 164, 156, 228, 187, 255, 38, 108, 191, 21, 191, 23, 96, 109, 74, 35, 44, 1, 126, 22, 222, 134, 77, 55, 62, 235, 245, 209, 212, 142, 87, 12, 192, 2, 123, 57, 21, 192, 153, 244, 50, 236, 209, 215, 237, 111, 98, 89, 166, 45, 222, 208, 57, 142, 39, 249, 22, 161, 102, 221, 225, 166, 46, 205, 185, 6, 84, 128, 98, 121, 3, 179, 132, 18, 232, 23, 3, 12, 0, 40, 76, 200, 35, 187, 254, 117, 155, 180, 161, 66, 235, 29, 31, 167, 72, 113, 209, 195, 157, 37, 9, 70, 152, 132, 198, 162, 242, 111, 221, 124, 188, 41, 135, 232, 31, 240, 17, 80, 26, 84, 72, 139, 22, 180, 47, 176, 118, 87, 3, 44, 76, 252, 131, 155, 127, 222, 137, 151, 47, 56, 28, 158, 84, 108, 116, 5, 12, 77, 165, 216, 240, 247, 13, 131, 165, 78, 74, 215, 136, 24, 145, 15, 119, 255, 159, 227, 80, 196, 47, 39, 53, 162, 54, 13, 29, 8, 151, 24, 173, 61, 117, 69, 62, 54, 237, 227, 80, 213, 81, 228, 247, 170, 249, 123, 202, 36, 121, 27, 163, 241, 68, 173, 59, 106, 126, 33, 238, 236, 132, 126, 36, 153, 26, 183, 23, 91, 93, 125, 46, 107, 224, 13, 113, 91, 179, 219, 172, 77, 120, 79, 34, 7, 138, 24, 0, 15, 88, 13, 64, 67, 183, 16, 42, 165, 197, 205, 131, 90, 21, 24, 29, 52, 59, 254, 85, 115, 119, 141, 41, 152, 167, 93, 127, 215, 20, 196, 136, 239, 165, 102, 172, 227, 231, 82, 115, 25, 216, 94, 153, 74, 236, 151, 69, 211, 141, 222, 24, 174, 183, 173, 172, 172, 3, 67, 74, 217, 102, 86, 80, 211, 248, 145, 168, 184, 95, 197, 225, 155, 68, 70, 31, 189, 141, 193, 233, 247, 18, 204, 154, 5, 23, 213, 120, 22, 70, 170, 228, 167, 116, 177, 148, 129, 43, 114, 129, 195, 103, 188, 0, 245, 55, 40, 181, 88, 125, 149, 190, 86, 4, 232, 162, 236, 35, 198, 34, 74, 126, 179, 57, 23, 30, 25, 227, 242, 132, 5, 22, 200, 50, 21, 207, 211, 227, 99, 119, 35, 224, 148, 1, 43, 40, 32, 97, 130, 24, 238, 241, 218, 75, 247, 96, 78, 201, 66, 151, 63, 146, 155, 190, 24, 70, 187, 40, 177, 80, 239, 150, 241, 74, 214, 116, 80, 118, 202, 27, 144, 147, 81, 230, 110, 91, 43, 231, 66, 81, 232, 21, 78, 18, 247, 160, 133, 64, 46, 143, 82, 164, 60, 224, 65, 4, 67, 46, 172, 219, 89, 221, 164, 87, 213, 14, 131, 97, 219, 45, 228, 184, 24, 173, 96, 213, 68, 4, 121, 189, 85, 215, 217, 156, 224, 104, 148, 48, 246, 45, 237, 121, 249, 251, 209, 66, 12, 72, 70, 25, 207, 132, 150, 42, 147, 22, 42, 214, 99, 4, 114, 73, 223, 144, 238, 0, 5, 77, 118, 30, 128, 250, 172, 237, 157, 223, 58, 63, 185, 164, 35, 253, 108, 127, 141, 125, 74, 99, 73, 68, 106, 233, 180, 152, 21, 152, 134, 215, 198, 44, 192, 22, 152, 79, 109, 131, 212, 173, 102, 104, 248, 235, 185, 64, 170, 136, 220, 15, 216, 160, 105, 232, 247, 249, 97, 117, 226, 135, 221, 71, 2, 200, 148, 228, 252, 132, 128, 111, 135, 65, 212, 245, 147, 69, 132, 134, 50, 170, 173, 62, 38, 129, 42, 71, 169, 239, 190, 28, 188, 45, 81, 87, 61, 194, 117, 238, 138, 172, 103, 138, 177, 247, 194, 169, 204, 239, 202, 59, 122, 1, 33, 143, 76, 81, 121, 209, 88, 5, 203, 33, 60, 162, 105, 147, 119, 15, 167, 85, 227, 12, 11, 149, 146, 110, 72, 194, 174, 217, 158, 255, 220, 96, 31, 68, 103, 236, 22, 249, 80, 237, 41, 251, 148, 159, 104, 103, 103, 248, 184, 41, 131, 216, 117, 85, 148, 32, 179, 23, 148, 62, 26, 107, 154, 144, 217, 12, 40, 246, 165, 41, 74, 156, 199, 17, 138, 234, 155, 129, 194, 123, 40, 78, 91, 115, 95, 175, 231, 184, 4, 179, 91, 22, 139, 56, 219, 100, 165, 92, 79, 251, 17, 36, 14, 236, 229, 9, 254, 56, 117, 210, 240, 96, 102, 139, 99, 95, 95, 238, 129, 50, 172, 1, 6, 33, 5, 102, 46, 145, 53, 185, 151, 56, 118, 55, 33, 128, 102, 36, 155, 48, 4, 73, 35, 202, 211, 30, 28, 51, 189, 149, 213, 169, 21, 57, 169, 87, 30, 44, 217, 186, 184, 144, 57, 89, 99, 219, 219, 0, 136, 85, 13, 205, 3, 102, 55, 117, 212, 247, 132, 102, 104, 35, 133, 138, 51, 86, 169, 213, 37, 251, 24, 130, 224, 151, 104, 10, 171, 242, 115, 130, 75, 218, 177, 208, 99, 231, 35, 90, 35, 62, 215, 42, 80, 241, 253, 48, 119, 19, 166, 231, 75, 137, 160, 225, 85, 110, 17, 138, 84, 123, 98, 73, 128, 210, 179, 204, 72, 190, 165, 109, 227, 101, 93, 188, 221, 124, 170, 251, 148, 152, 159, 118, 156, 17, 241, 252, 86, 24, 171, 189, 141, 205, 156, 6, 207, 138, 23, 221, 16, 111, 233, 9, 103, 180, 201, 202, 175, 92, 162, 99, 219, 32, 4, 60, 123, 164, 92, 33, 97, 126, 177, 235, 22, 253, 110, 154, 111, 250, 157, 107, 114, 36, 149, 82, 104, 21, 73, 71, 226, 38, 125, 99, 135, 212, 65, 129, 96, 9, 81, 15, 194, 219, 251, 8, 177, 126, 251, 184, 14, 60, 25, 27, 73, 224, 21, 72, 210, 58, 66, 242, 236, 190, 190, 187, 175, 247, 115, 65, 12, 199, 172, 183, 52, 84, 67, 200, 212, 32, 159, 111, 8, 48, 64, 39, 215, 45, 137, 26, 83, 158, 156, 69, 120, 62, 200, 107, 108, 67, 121, 200, 223, 115, 93, 122, 23, 125, 177, 84, 84, 135, 113, 62, 108, 196, 251, 117, 226, 216, 75, 212, 2, 197, 248, 208, 16, 210, 221, 0, 189, 174, 212, 224, 83, 137, 108, 95, 127, 184, 115, 112, 254, 250, 8, 55, 97, 28, 162, 168, 182, 155, 75, 39, 117, 182, 185, 179, 82, 109, 90, 149, 255, 91, 143, 133, 220, 238, 124, 21, 88, 67, 225, 108, 168, 66, 252, 164, 241, 29, 212, 249, 16, 9, 52, 196, 176, 168, 191, 209, 104, 191, 238, 202, 131, 67, 161, 60, 205, 87, 221, 226, 4, 14, 248, 148, 231, 98, 17, 242, 88, 179, 173, 211, 57, 233, 103, 131, 194, 248, 195, 161, 135, 96, 45, 121, 71, 204, 216, 108, 102, 160, 90, 139, 64, 129, 160, 31, 91, 48, 98, 101, 17, 85, 158, 236, 86, 180, 190, 123, 27, 83, 94, 233, 227, 129, 46, 30, 254, 99, 163, 5, 237, 15, 213, 8, 168, 93, 74, 3, 104, 142, 224, 89, 229, 101, 93, 232, 99, 15, 88, 104, 56, 17, 74, 205, 174, 164, 9, 86, 1, 158, 123, 190, 242, 56, 83, 173, 72, 106, 57, 167, 30, 174, 13, 187, 103, 221, 163, 152, 91, 194, 75, 16, 126, 144, 207, 147, 106, 251, 163, 26, 242, 89, 27, 113, 217, 35, 11, 241, 212, 5, 199, 173, 139, 64, 182, 209, 182, 208, 189, 107, 27, 108, 61, 227, 139, 32, 10, 237, 205, 67, 183, 240, 156, 247, 183, 96, 176, 100, 69, 200, 2, 163, 179, 174, 8, 143, 161, 136, 138, 158, 172, 201, 170, 171, 161, 149, 187, 224, 139, 78, 228, 98, 193, 6, 107, 155, 63, 7, 184, 112, 167, 53, 112, 97, 159, 148, 42, 252, 162, 192, 142, 246, 173, 182, 1, 18, 72, 34, 221, 98, 93, 141, 186, 122, 20, 17, 198, 17, 88, 107, 99, 93, 199, 32, 221, 137, 252, 45, 116, 56, 254, 69, 202, 39, 239, 241, 52, 243, 79, 178, 137, 223, 44, 245, 144, 25, 149, 51, 150, 22, 168, 225, 187, 115, 248, 154, 138, 192, 15, 46, 189, 218, 122, 250, 111, 151, 177, 134, 124, 189, 83, 161, 131, 21, 44, 44, 252, 35, 27, 243, 100, 254, 152, 192, 228, 212, 43, 226, 217, 84, 211, 191, 169, 79, 163, 217, 205, 80, 135, 105, 107, 109, 184, 210, 19, 221, 157, 5, 26, 169, 140, 117, 185, 22, 85, 161, 212, 106, 116, 1, 15, 30, 24, 43, 173, 9, 99, 227, 4, 152, 243, 131, 197, 194, 194, 174, 25, 105, 92, 191, 164, 20, 137, 87, 231, 208, 225, 252, 155, 207, 193, 45, 219, 128, 151, 99, 43, 159, 241, 160, 54, 1, 158, 212, 111, 78, 75, 135, 158, 112, 197, 213, 48, 9, 89, 130, 181, 198, 229, 20, 110, 61, 208, 74, 233, 146, 148, 49, 34, 191, 78, 191, 91, 194, 8, 34, 31, 73, 56, 191, 231, 208, 122, 12, 52, 188, 41, 168, 231, 68, 64, 64, 181, 124, 100, 40, 8, 127, 79, 112, 10, 48, 80, 17, 137, 41, 198, 81, 217, 213, 194, 244, 113, 40, 29, 201, 199, 192, 120, 208, 89, 231, 130, 51, 58, 191, 98, 77, 149, 247, 170, 37, 163, 224, 207, 189, 97, 211, 164, 165, 244, 183, 12, 134, 187, 196, 128, 193, 210, 116, 187, 134, 34, 220, 101, 249, 54, 183, 95, 4, 17, 247, 53, 30, 103, 206, 126, 187, 231, 72, 112, 169, 238, 169, 52, 20, 72, 143, 214, 110, 173, 43, 84, 90, 58, 138, 11, 75, 60, 30, 190, 37, 95, 152, 220, 241, 196, 15, 87, 69, 53, 127, 166, 211, 193, 135, 122, 154, 238, 77, 178, 109, 155, 162, 18, 132, 174, 152, 65, 30, 255, 180, 246, 30, 134, 158, 201, 204, 114, 140, 29, 187, 183, 113, 220, 39, 59, 97, 75, 223, 161, 45, 242, 103, 236, 10, 57, 80, 173, 188, 178, 195, 17, 200, 134, 214, 63, 4, 255, 177, 170, 247, 0, 245, 9, 98, 98, 92, 245, 208, 140, 202, 58, 116, 95, 155, 80, 109, 13, 87, 252, 209, 61, 190, 82, 4, 77, 192, 117, 17, 48, 20, 130, 55, 35, 209, 7, 38, 49, 141, 153, 169, 2, 17, 22, 243, 85, 68, 25, 48, 68, 221, 76, 5, 167, 227, 163, 187, 59, 136, 162, 203, 33, 77, 242, 26, 243, 123, 103, 212, 158, 16, 237, 110, 172, 179, 145, 217, 44, 99, 21, 138, 189, 176, 80, 194, 29, 18, 107, 194, 78, 112, 22, 94, 81, 142, 154, 33, 55, 197, 254, 123, 149, 44, 163, 85, 201, 158, 198, 61, 237, 37, 230, 241, 77, 50, 31, 90, 1, 79, 58, 24, 160, 67, 120, 52, 233, 59, 25, 13, 90, 91, 75, 210, 157, 92, 28, 6, 110, 228, 194, 78, 40, 119, 155, 132, 75, 63, 155, 180, 171, 214, 252, 126, 105, 26, 254, 110, 74, 248, 162, 250, 90, 41, 113, 2, 144, 15, 67, 41, 206, 240, 221, 175, 238, 224, 214, 98, 0, 181, 125, 1, 59, 139, 139, 53, 62, 207, 54, 241, 208, 137, 40, 73, 199, 199, 241, 239, 201, 225, 201, 98, 215, 196, 163, 177, 3, 95, 134, 23, 97, 133, 147, 194, 147, 120, 146, 204, 239, 126, 96, 238, 49, 195, 193, 65, 50, 57, 222, 5, 203, 62, 224, 119, 207, 83, 59, 118, 234, 232, 248, 59, 13, 10, 122, 162, 49, 80, 148, 146, 113, 153, 96, 142, 186, 39, 2, 181, 36, 55, 56, 93, 94, 227, 16, 14, 152, 173, 122, 178, 160, 110, 255, 16, 30, 246, 180, 14, 12, 113, 209, 3, 44, 185, 24, 197, 66, 75, 27, 161, 206, 251, 152, 55, 159, 137, 175, 249, 46, 134, 176, 75, 158, 59, 135, 154, 184, 53, 84, 201, 128, 232, 228, 254, 184, 2, 115, 218, 42, 4, 202, 35, 132, 197, 108, 245, 106, 221, 55, 204, 237, 179, 245, 0, 105, 184, 35, 6, 31, 157, 44, 12, 219, 169, 136, 220, 34, 88, 130, 182, 69, 206, 254, 235, 223, 2, 14, 126, 84, 190, 79, 204, 38, 54, 4, 204, 167, 86, 231, 147, 108, 214, 118, 166, 248, 102, 178, 227, 186, 21, 2, 143, 188, 19, 46, 250, 97, 213, 25, 162, 229, 17, 149, 188, 99, 76, 213, 221, 107, 124, 171, 179, 193, 146, 48, 96, 218, 85, 243, 191, 95, 96, 207, 216, 77, 216, 210, 57, 218, 45, 121, 182, 123, 208, 104, 188, 134, 15, 166, 117, 120, 170, 45, 178, 131, 213, 136, 32, 98, 158, 145, 140, 200, 176, 223, 77, 91, 45, 56, 172, 238, 14, 188, 64, 117, 45, 252, 145, 45, 202, 199, 1, 170, 87, 156, 181, 113, 77, 248, 251, 8, 122, 202, 42, 182, 203, 170, 234, 147, 154, 42, 196, 5, 218, 198, 232, 225, 242, 202, 114, 198, 20, 232, 10, 160, 68, 131, 155, 253, 139, 28, 145, 232, 62, 197, 12, 23, 243, 175, 158, 140, 136, 135, 86, 233, 24, 232, 151, 143, 255, 174, 39, 2, 189, 163, 218, 9, 237, 247, 114, 19, 215, 233, 47, 180, 61, 81, 94, 139, 105, 13, 24, 29, 176, 244, 89, 154, 195, 190, 182, 228, 59, 248, 114, 211, 252, 141, 7, 241, 197, 196, 84, 191, 25, 236, 91, 97, 63, 71, 78, 24, 6, 102, 213, 58, 82, 211, 117, 217, 42, 25, 209, 144, 56, 158, 125, 104, 216, 109, 237, 217, 193, 226, 219, 164, 34, 69, 177, 212, 5, 140, 252, 246, 235, 220, 21, 195, 70, 211, 182, 146, 111, 142, 55, 115, 171, 49, 103, 171, 19, 130, 220, 126, 198, 59, 89, 83, 214, 147, 57, 15, 80, 201, 235, 167, 74, 230, 212, 3, 142, 219, 35, 233, 53, 195, 138, 88, 134, 199, 6, 210, 153, 96, 108, 255, 21, 218, 207, 232, 85, 195, 30, 89, 152, 202, 166, 236, 238, 48, 112, 142, 240, 217, 58, 117, 197, 221, 153, 224, 22, 123, 185, 129, 233, 32, 2, 185, 238, 50, 123, 204, 117, 9, 173, 223, 162, 119, 101, 37, 134, 1, 145, 118, 99, 72, 33, 82, 51, 248, 206, 39, 234, 132, 216, 31, 226, 203, 31, 4, 67, 121, 126, 116, 83, 0, 104, 47, 122, 18, 235, 15, 31, 51, 40, 131, 13, 159, 19, 78, 102, 221, 158, 1, 105, 164, 232, 153, 69, 185, 0, 233, 135, 4, 83, 240, 241, 64, 71, 62, 66, 227, 239, 78, 195, 148, 210, 139, 202, 253, 112, 163, 236, 240, 72, 183, 217, 231, 216, 8, 113, 13, 113, 104, 81, 167, 13, 128, 8, 136, 117, 25, 212, 47, 45, 39, 142, 107, 130, 254, 143, 67, 117, 78, 249, 84, 240, 82, 28, 221, 92, 203, 245, 245, 107, 74, 77, 152, 10, 178, 12, 98, 64, 61, 218, 178, 60, 127, 104, 104, 230, 252, 114, 36, 33, 235, 118, 231, 214, 96, 111, 144, 139, 22, 88, 215, 61, 117, 55, 31, 239, 225, 142, 73, 208, 7, 101, 135, 132, 162, 64, 114, 183, 66, 202, 100, 237, 159, 113, 204, 234, 3, 203, 38, 199, 136, 191, 149, 177, 253, 58, 179, 145, 99, 70, 108, 12, 173, 239, 15, 132, 175, 45, 46, 83, 162, 166, 51, 141, 209, 29, 208, 249, 108, 66, 200, 111, 34, 46, 28, 91, 17, 140, 70, 174, 225, 175, 123, 236, 175, 100, 102, 134, 98, 219, 76, 65, 184, 186, 191, 199, 52, 248, 126, 170, 160, 197, 191, 95, 44, 96, 211, 114, 90, 180, 202, 96, 189, 210, 193, 27, 134, 0, 120, 202, 25, 241, 95, 148, 75, 248, 152, 205, 95, 120, 196, 180, 224, 187, 25, 9, 228, 246, 154, 96, 38, 194, 65, 165, 93, 16, 231, 248, 245, 37, 7, 39, 64, 42, 93, 149, 3, 231, 173, 190, 140, 48, 72, 196, 25, 147, 171, 71, 183, 199, 205, 241, 131, 114, 176, 7, 80, 8, 233, 147, 221, 179, 99, 123, 99, 223, 209, 142, 209, 11, 188, 163, 73, 223, 27, 182, 176, 208, 148, 63, 230, 10, 222, 176, 90, 2, 35, 141, 97, 34, 47, 89, 129, 75, 2, 94, 73, 0, 199, 31, 115, 151, 37, 52, 83, 25, 252, 85, 230, 90, 135, 136, 17, 183, 247, 113, 237, 47, 95, 190, 230, 119, 206, 161, 110, 64, 17, 239, 44, 16, 59, 118, 95, 201, 62, 113, 183, 113, 137, 255, 50, 72, 135, 154, 97, 3, 125, 164, 53, 151, 101, 188, 103, 74, 125, 246, 127, 14, 199, 255, 152, 100, 176, 238, 193, 9, 70, 63, 111, 66, 155, 29, 20, 47, 133, 124, 237, 44, 16, 198, 222, 237, 183, 115, 65, 130, 11, 151, 148, 132, 149, 209, 216, 241, 138, 82, 207, 18, 128, 80, 124, 72, 25, 14, 16, 165, 196, 203, 196, 167, 91, 6, 164, 150, 143, 123, 74, 211, 165, 121, 218, 225, 1, 104, 24, 99, 114, 1, 179, 118, 139, 237, 203, 89, 152, 224, 66, 136, 246, 10, 161, 225, 70, 116, 60, 135, 73, 135, 231, 216, 133, 146, 18, 49, 78, 205, 225, 64, 142, 158, 8, 43, 241, 121, 68, 216, 2, 238, 214, 149, 135, 101, 15, 95, 210, 18, 3, 149, 188, 135, 111, 166, 89, 110, 59, 236, 238, 106, 167, 57, 239, 133, 60, 251, 149, 25, 239, 161, 253, 209, 24, 113, 206, 40, 218, 147, 255, 227, 124, 254, 250, 136, 175, 44, 65, 228, 62, 195, 177, 9, 109, 8, 158, 124, 25, 166, 100, 27, 246, 63, 17, 96, 34, 253, 62, 121, 45, 207, 161, 231, 109, 203, 171, 146, 98, 186, 205, 31, 20, 161, 210, 112, 185, 1, 37, 101, 159, 80, 223, 246, 203, 191, 59, 229, 124, 244, 84, 190, 83, 7, 46, 189, 120, 58, 203, 132, 146, 242, 113, 234, 121, 16, 215, 42, 0, 183, 188, 26, 105, 26, 99, 204, 74, 253, 59, 207, 117, 211, 98, 99, 211, 99, 42, 159, 182, 77, 237, 76, 64, 233, 214, 20, 251, 134, 10, 135, 84, 54, 14, 133, 100, 111, 121, 119, 41, 188, 83, 30, 142, 109, 228, 69, 206, 235, 52, 203, 131, 45, 73, 131, 40, 164, 205, 39, 229, 226, 88, 110, 161, 65, 58, 183, 43, 151, 169, 237, 67, 11, 163, 226, 197, 80, 212, 192, 238, 120, 223, 218, 145, 118, 164, 31, 214, 209, 177, 218, 157, 209, 214, 233, 182, 157, 77, 255, 212, 220, 162, 250, 124, 222, 187, 6, 208, 77, 109, 244, 83, 135, 238, 217, 205, 170, 221, 172, 189, 246, 115, 64, 168, 224, 153, 173, 122, 52, 155, 176, 225, 233, 30, 163, 114, 145, 141, 232, 19, 8, 118, 34, 226, 203, 64, 87, 36, 26, 217, 34, 91, 113, 32, 141, 74, 24, 213, 29, 60, 52, 163, 83, 234, 56, 19, 12, 107, 35, 121, 84, 88, 30, 141, 80, 181, 33, 93, 68, 150, 212, 112, 228, 208, 102, 5, 183, 27, 67, 218, 205, 81, 16, 50, 244, 46, 162, 90, 142, 42, 231, 119, 238, 50, 67, 8, 137, 228, 143, 146, 228, 225, 226, 119, 42, 145, 109, 111, 151, 95, 17, 226, 217, 35, 249, 212, 248, 47, 186, 218, 50, 134, 76, 223, 88, 221, 16, 136, 31, 131, 203, 152, 107, 211, 136, 129, 120, 93, 170, 187, 165, 246, 86, 180, 94, 90, 203, 38, 34, 227, 253, 161, 61, 68, 62, 153, 241, 10, 23, 54, 89, 139, 199, 214, 46, 119, 228, 2, 25, 35, 130, 57, 21, 199, 219, 54, 151, 222, 196, 149, 119, 227, 252, 215, 239, 241, 200, 31, 241, 180, 156, 243, 122, 61, 130, 112, 223, 115, 29, 13, 58, 98, 154, 234, 158, 126, 164, 135, 8, 33, 206, 43, 147, 229, 147, 119, 20, 215, 150, 208, 125, 9, 0, 223, 50, 9, 123, 137, 164, 146, 190, 229, 211, 171, 201, 191, 250, 206, 131, 35, 104, 173, 111, 48, 107, 114, 245, 53, 110, 29, 184, 186, 105, 183, 161, 118, 190, 42, 43, 143, 216, 26, 164, 235, 156, 151, 60, 5, 128, 55, 133, 197, 167, 61, 68, 145, 199, 10, 111, 166, 106, 154, 202, 163, 133, 179, 180, 184, 162, 79, 25, 8, 232, 9, 194, 252, 88, 101, 170, 0, 87, 110, 148, 99, 114, 67, 163, 172, 68, 135, 125, 171, 92, 175, 50, 63, 118, 199, 192, 196, 49, 169, 254, 111, 23, 8, 192, 19, 210, 106, 150, 222, 195, 254, 89, 70, 197, 8, 37, 193, 155, 48, 6, 42, 92, 160, 149, 150, 140, 10, 212, 0, 76, 34, 172, 188, 65, 177, 171, 52, 79, 8, 151, 167, 179, 170, 172, 186, 110, 63, 239, 59, 236, 49, 50, 100, 201, 128, 181, 77, 22, 94, 250, 25, 14, 119, 227, 163, 227, 154, 212, 56, 216, 161, 28, 12, 71, 157, 101, 71, 247, 223, 167, 115, 105, 31, 7, 80, 43, 179, 168, 101, 170, 94, 180, 187, 2, 133, 108, 200, 128, 96, 16, 139, 192, 7, 183, 118, 198, 130, 71, 56, 60, 121, 11, 212, 150, 141, 148, 228, 148, 8, 59, 9, 142, 43, 74, 255, 179, 171, 105, 40, 175, 230, 41, 195, 167, 150, 106, 11, 49, 111, 134, 134, 144, 22, 53, 230, 221, 10, 212, 235, 228, 41, 122, 178, 152, 126, 179, 194, 180, 14, 201, 77, 180, 233, 114, 10, 182, 40, 249, 138, 73, 1, 25, 122, 61, 235, 182, 222, 36, 172, 33, 155, 74, 6, 188, 215, 114, 237, 93, 68, 48, 50, 59, 97, 181, 81, 254, 82, 125, 147, 98, 215, 164, 19, 49, 104, 210, 63, 49, 132, 160, 13, 138, 200, 44, 107, 196, 15, 93, 159, 197, 197, 50, 37, 57, 203, 119, 231, 97, 172, 182, 49, 141, 143, 109, 106, 94, 34, 155, 12, 82, 189, 175, 75, 186, 156, 28, 98, 34, 9, 144, 168, 69, 223, 52, 15, 162, 172, 52, 6, 44, 158, 65, 234, 43, 172, 63, 102, 170, 209, 60, 194, 108, 51, 49, 208, 224, 39, 122, 147, 140, 134, 116, 54, 87, 77, 191, 210, 123, 56, 253, 161, 253, 188, 252, 254, 141, 184, 235, 159, 116, 211, 253, 204, 184, 15, 199, 149, 0, 176, 146, 57, 205, 71, 243, 168, 160, 239, 235, 58, 180, 2, 217, 163, 157, 240, 30, 101, 164, 243, 87, 9, 47, 198, 15, 128, 228, 87, 39, 21, 110, 145, 10, 247, 125, 245, 211, 199, 135, 112, 71, 85, 57, 148, 11, 74, 193, 36, 183, 90, 195, 14, 144, 216, 213, 223, 34, 99, 60, 193, 179, 30, 49, 197, 209, 140, 13, 30, 209, 221, 45, 79, 249, 77, 145, 62, 43, 123, 227, 56, 53, 35, 214, 203, 50, 252, 226, 70, 48, 161, 169, 23, 52, 194, 127, 232, 112, 245, 226, 213, 17, 244, 133, 68, 56, 224, 145, 62, 144, 227, 146, 196, 201, 222, 157, 214, 166, 217, 82, 227, 248, 62, 16, 177, 128, 155, 105, 118, 216, 53, 58, 35, 118, 18, 24, 62, 204, 137, 64, 136, 98, 23, 198, 154, 100, 168, 44, 239, 109, 201, 64, 90, 32, 116, 156, 62, 126, 168, 136, 21, 5, 110, 249, 60, 237, 110, 194, 211, 91, 177, 107, 232, 204, 215, 248, 156, 231, 237, 241, 46, 140, 88, 145, 119, 173, 119, 208, 169, 44, 235, 118, 225, 23, 214, 138, 12, 53, 253, 161, 2, 192, 90, 100, 31, 204, 244, 204, 178, 60, 214, 200, 19, 232, 243, 155, 252, 54, 112, 190, 135, 215, 211, 181, 66, 179, 115, 191, 193, 196, 141, 68, 206, 179, 167, 47, 187, 195, 5, 13, 154, 9, 59, 148, 118, 250, 185, 71, 193, 153, 136, 145, 82, 89, 167, 90, 135, 127, 85, 113, 231, 242, 218, 228, 38, 219, 8, 235, 49, 114, 187, 17, 251, 176, 250, 223, 89, 37, 73, 86, 32, 203, 243, 86, 61, 106, 111, 113, 127, 90, 16, 93, 107, 135, 178, 204, 188, 17, 131, 77, 187, 161, 19, 243, 183, 245, 240, 3, 1, 193, 141, 127, 130, 221, 11, 82, 200, 41, 71, 2, 90, 75, 149, 209, 101, 2, 246, 53, 127, 51, 141, 83, 231, 181, 100, 132, 6, 115, 179, 80, 9, 165, 52, 14, 242, 243, 167, 104, 110, 24, 96, 103, 2, 179, 104, 33, 103, 49, 150, 219, 27, 204, 85, 119, 3, 129, 148, 26, 109, 120, 187, 27, 91, 227, 60, 110, 23, 41, 133, 141, 99, 45, 41, 182, 253, 156, 215, 169, 108, 204, 225, 72, 248, 34, 108, 222, 114, 77, 112, 132, 39, 31, 126, 14, 16, 197, 111, 232, 50, 97, 88, 141, 255, 170, 9, 41, 242, 181, 39, 33, 141, 241, 60, 191, 155, 88, 251, 57, 10, 171, 82, 70, 158, 214, 241, 247, 113, 227, 129, 85, 253, 244, 250, 91, 63, 60, 113, 202, 45, 30, 209, 94, 24, 125, 16, 235, 217, 77, 173, 109, 29, 172, 5, 50, 212, 74, 176, 79, 199, 32, 80, 177, 236, 58, 38, 13, 105, 240, 95, 10, 107, 111, 13, 20, 251, 60, 189, 33, 180, 150, 191, 63, 22, 1, 79, 215, 225, 125, 209, 55, 242, 184, 229, 123, 167, 94, 27, 155, 22, 6, 92, 188, 140, 130, 135, 76, 237, 60, 141, 20, 145, 73, 79, 2, 192, 96, 151, 57, 58, 104, 174, 81, 0, 143, 192, 118, 17, 205, 249, 90, 236, 70, 52, 159, 55, 157, 62, 47, 82, 16, 116, 80, 82, 251, 120, 245, 174, 187, 63, 16, 14, 76, 128, 218, 4, 26, 245, 125, 66, 248, 105, 60, 111, 28, 176, 70, 89, 212, 14, 240, 29, 209, 31, 72, 194, 207, 177, 184, 100, 218, 75, 164, 214, 212, 222, 153, 186, 62, 169, 43, 166, 147, 166, 32, 207, 20, 57, 236, 180, 219, 129, 101, 231, 20, 154, 73, 26, 220, 58, 211, 195, 17, 26, 112, 238, 211, 156, 92, 1, 126, 140, 134, 209, 214, 122, 51, 101, 19, 27, 86, 92, 21, 140, 117, 72, 78, 128, 9, 182, 5, 84, 88, 107, 238, 138, 72, 53, 177, 10, 65, 27, 248, 224, 159, 216, 169, 7, 219, 250, 188, 152, 187, 255, 140, 202, 21, 9, 98, 165, 254, 82, 222, 186, 49, 174, 114, 130, 53, 252, 117, 13, 246, 12, 118, 56, 178, 27, 150, 220, 149, 159, 0, 88, 138, 49, 11, 40, 248, 221, 154, 205, 199, 161, 218, 166, 0, 44, 241, 196, 2, 27, 182, 228, 231, 159, 211, 209, 15, 255, 223, 74, 156, 162, 179, 18, 100, 115, 185, 49, 125, 148, 3, 171, 90, 206, 23, 15, 43, 128, 236, 113, 59, 21, 179, 162, 163, 3, 138, 231, 73, 70, 234, 225, 62, 78, 218, 169, 215, 148, 167, 126, 243, 55, 213, 49, 222, 93, 254, 16, 161, 59, 243, 201, 73, 56, 113, 71, 199, 6, 111, 249, 243, 245, 26, 154, 48, 150, 185, 153, 142, 189, 35, 18, 104, 214, 94, 2, 36, 243, 85, 47, 155, 208, 4, 112, 49, 193, 105, 102, 161, 165, 79, 131, 43, 228, 214, 137, 185, 94, 228, 175, 154, 99, 164, 227, 234, 195, 145, 176, 196, 206, 151, 84, 66, 203, 103, 21, 89, 27, 99, 234, 119, 255, 181, 11, 144, 151, 252, 238, 54, 30, 144, 137, 137, 177, 136, 180, 84, 62, 250, 101, 49, 5, 113, 18, 58, 15, 148, 106, 125, 252, 42, 48, 49, 203, 245, 250, 153, 8, 219, 56, 13, 152, 24, 65, 132, 239, 11, 151, 235, 170, 192, 232, 2, 117, 70, 116, 40, 126, 192, 55, 13, 143, 210, 75, 11, 134, 211, 43, 242, 25, 139, 168, 137, 176, 21, 161, 186, 174, 243, 128, 239, 34, 227, 161, 203, 79, 174, 49, 221, 86, 215, 44, 244, 62, 236, 98, 143, 197, 161, 130, 105, 114, 13, 136, 34, 158, 78, 98, 157, 177, 44, 140, 238, 133, 86], - [16, 46, 173, 29, 213, 238, 98, 19, 208, 251, 57, 173, 247, 240, 142, 126, 115, 43, 173, 239, 12, 241, 15, 135, 113, 201, 244, 120, 192, 55, 48, 107, 126, 160, 62, 191, 235, 167, 91, 71, 171, 65, 176, 7, 150, 125, 72, 142, 196, 186, 234, 12, 194, 192, 189, 20, 210, 47, 250, 17, 85, 219, 101, 171, 15, 92, 234, 123, 61, 54, 68, 252, 171, 175, 71, 108, 130, 167, 109, 253, 106, 229, 38, 185, 134, 56, 140, 10, 60, 166, 198, 90, 84, 104, 129, 218, 86, 116, 127, 172, 110, 94, 77, 55, 105, 155, 58, 34, 25, 41, 50, 172, 96, 19, 179, 152, 181, 25, 20, 202, 65, 189, 36, 51, 50, 124, 65, 199, 33, 150, 17, 156, 143, 166, 211, 208, 99, 93, 192, 26, 222, 113, 137, 55, 155, 134, 14, 133, 225, 15, 12, 22, 149, 158, 90, 9, 88, 208, 129, 15, 4, 104, 21, 227, 89, 132, 215, 176, 240, 111, 28, 30, 196, 169, 164, 174, 178, 66, 46, 221, 77, 206, 193, 244, 40, 60, 166, 185, 92, 37, 231, 139, 44, 151, 125, 144, 86, 146, 5, 29, 219, 253, 105, 100, 154, 107, 73, 65, 9, 122, 99, 228, 119, 217, 241, 101, 232, 104, 82, 248, 19, 108, 223, 145, 220, 216, 83, 29, 238, 82, 226, 115, 52, 100, 237, 92, 250, 197, 186, 73, 191, 114, 170, 227, 158, 23, 226, 53, 181, 211, 168, 227, 239, 106, 151, 67, 40, 82, 230, 141, 137, 61, 72, 216, 79, 178, 19, 206, 56, 76, 89, 249, 25, 12, 196, 20, 65, 240, 116, 57, 104, 77, 252, 55, 230, 165, 92, 176, 232, 66, 29, 95, 52, 123, 60, 31, 212, 61, 60, 13, 58, 149, 254, 183, 131, 153, 37, 44, 244, 113, 168, 119, 135, 69, 89, 148, 38, 198, 245, 243, 21, 242, 30, 240, 135, 193, 0, 162, 175, 58, 201, 34, 96, 89, 226, 181, 95, 72, 116, 188, 85, 60, 179, 117, 73, 126, 80, 1, 210, 149, 254, 21, 93, 199, 225, 53, 200, 44, 111, 71, 63, 224, 155, 0, 16, 143, 206, 168, 251, 89, 235, 220, 11, 104, 24, 25, 56, 217, 134, 161, 230, 134, 222, 47, 114, 233, 229, 92, 254, 26, 57, 10, 190, 127, 139, 144, 12, 238, 253, 151, 107, 244, 4, 152, 34, 129, 53, 13, 213, 11, 29, 50, 86, 240, 43, 48, 241, 223, 253, 231, 252, 119, 74, 67, 11, 142, 213, 122, 76, 240, 193, 242, 59, 19, 112, 114, 183, 131, 71, 59, 27, 56, 16, 15, 170, 56, 181, 216, 79, 41, 168, 117, 55, 146, 228, 225, 54, 124, 162, 69, 52, 95, 101, 254, 197, 205, 200, 100, 147, 62, 115, 28, 213, 253, 78, 116, 60, 51, 127, 118, 114, 236, 35, 119, 2, 177, 52, 251, 120, 15, 77, 229, 86, 151, 253, 143, 38, 13, 156, 6, 85, 92, 154, 246, 93, 173, 36, 233, 235, 120, 17, 186, 3, 205, 10, 85, 114, 9, 229, 248, 201, 177, 95, 95, 204, 16, 71, 23, 150, 118, 34, 152, 252, 36, 168, 223, 201, 154, 188, 12, 249, 253, 230, 192, 189, 59, 78, 168, 158, 180, 6, 70, 165, 49, 63, 109, 110, 74, 67, 50, 245, 236, 151, 184, 88, 87, 178, 31, 247, 98, 36, 174, 126, 2, 13, 146, 255, 184, 227, 132, 146, 208, 250, 198, 101, 23, 131, 130, 84, 204, 130, 202, 109, 3, 145, 31, 250, 198, 29, 114, 1, 176, 109, 201, 10, 82, 49, 226, 169, 229, 163, 145, 188, 22, 97, 165, 53, 180, 13, 52, 48, 190, 118, 129, 104, 184, 29, 76, 112, 222, 160, 2, 18, 242, 206, 87, 33, 99, 130, 244, 185, 151, 27, 213, 100, 65, 186, 68, 4, 115, 14, 179, 182, 52, 251, 198, 219, 213, 92, 88, 106, 60, 247, 236, 134, 181, 168, 36, 43, 213, 62, 26, 77, 63, 167, 181, 62, 35, 157, 37, 82, 40, 234, 233, 5, 5, 193, 60, 167, 237, 15, 205, 70, 165, 89, 107, 63, 214, 255, 188, 186, 241, 77, 72, 182, 43, 172, 193, 25, 173, 223, 147, 128, 202, 104, 200, 211, 53, 37, 153, 146, 121, 184, 7, 162, 22, 122, 241, 234, 237, 227, 86, 146, 147, 134, 149, 217, 27, 180, 254, 142, 21, 7, 77, 182, 164, 197, 77, 228, 217, 126, 107, 19, 192, 35, 99, 105, 64, 242, 127, 75, 190, 164, 221, 63, 55, 222, 91, 82, 252, 36, 4, 28, 12, 15, 93, 223, 22, 133, 149, 221, 240, 30, 33, 164, 43, 237, 173, 219, 232, 221, 108, 248, 25, 222, 147, 25, 67, 148, 185, 165, 115, 128, 61, 115, 206, 97, 129, 120, 11, 23, 213, 99, 234, 251, 94, 197, 182, 243, 70, 219, 194, 97, 37, 231, 155, 129, 41, 223, 99, 38, 98, 172, 151, 231, 164, 129, 189, 249, 207, 215, 19, 88, 202, 134, 204, 226, 106, 182, 169, 175, 216, 100, 60, 231, 90, 56, 168, 19, 17, 232, 180, 44, 155, 12, 19, 193, 42, 40, 201, 120, 133, 207, 12, 4, 220, 223, 81, 43, 112, 152, 167, 124, 72, 51, 59, 97, 125, 145, 190, 232, 142, 53, 207, 41, 15, 96, 33, 29, 55, 239, 78, 113, 138, 126, 88, 247, 253, 159, 99, 62, 33, 74, 162, 176, 184, 45, 18, 119, 98, 216, 77, 254, 72, 30, 119, 47, 250, 41, 233, 171, 148, 184, 158, 59, 71, 97, 110, 90, 19, 80, 157, 82, 23, 176, 77, 244, 77, 88, 127, 215, 114, 214, 250, 122, 87, 28, 241, 134, 67, 196, 210, 96, 3, 40, 160, 239, 243, 71, 80, 54, 222, 8, 249, 125, 65, 45, 75, 104, 162, 59, 74, 139, 98, 101, 221, 168, 137, 228, 6, 212, 176, 162, 6, 143, 174, 139, 80, 87, 236, 222, 207, 35, 56, 234, 201, 95, 210, 146, 105, 116, 111, 60, 250, 133, 20, 143, 160, 57, 234, 21, 89, 153, 55, 238, 116, 241, 34, 55, 228, 193, 128, 140, 149, 247, 194, 14, 127, 221, 24, 229, 64, 210, 245, 252, 51, 120, 201, 164, 165, 244, 209, 61, 194, 74, 39, 121, 61, 228, 9, 98, 36, 130, 105, 6, 34, 61, 199, 210, 42, 166, 172, 15, 231, 72, 213, 211, 44, 9, 6, 253, 217, 162, 176, 175, 170, 220, 123, 206, 119, 167, 64, 203, 30, 150, 13, 141, 41, 190, 104, 252, 88, 152, 152, 208, 220, 255, 20, 182, 246, 225, 95, 225, 134, 135, 0, 51, 252, 71, 32, 91, 163, 172, 51, 156, 151, 199, 209, 111, 156, 129, 134, 47, 158, 191, 226, 59, 207, 193, 46, 201, 25, 190, 217, 111, 147, 73, 221, 156, 159, 8, 6, 56, 173, 193, 90, 45, 59, 223, 60, 70, 210, 165, 174, 251, 248, 212, 49, 11, 112, 109, 26, 237, 65, 105, 137, 35, 44, 117, 16, 124, 37, 245, 195, 158, 185, 123, 204, 189, 8, 50, 202, 212, 62, 37, 160, 83, 55, 40, 211, 37, 65, 250, 195, 3, 178, 127, 72, 192, 92, 179, 156, 120, 228, 87, 246, 134, 129, 43, 97, 37, 142, 242, 106, 227, 12, 72, 216, 150, 203, 126, 201, 249, 97, 72, 157, 230, 119, 162, 19, 76, 243, 110, 218, 143, 214, 37, 179, 82, 114, 118, 23, 19, 249, 122, 43, 32, 253, 170, 116, 236, 69, 246, 28, 196, 141, 105, 106, 167, 165, 249, 128, 243, 100, 28, 242, 172, 49, 93, 228, 37, 67, 61, 134, 79, 215, 164, 155, 207, 63, 198, 84, 114, 61, 244, 44, 94, 44, 220, 1, 118, 17, 164, 50, 213, 69, 211, 32, 146, 224, 17, 34, 195, 44, 96, 15, 190, 219, 249, 33, 208, 130, 93, 227, 109, 218, 202, 118, 137, 51, 151, 211, 17, 85, 184, 161, 115, 168, 24, 222, 118, 195, 46, 233, 179, 195, 194, 232, 255, 77, 215, 181, 3, 84, 156, 4, 38, 162, 196, 34, 237, 255, 156, 233, 19, 218, 25, 98, 206, 255, 244, 191, 255, 79, 35, 239, 78, 23, 62, 212, 84, 206, 185, 146, 197, 85, 255, 210, 168, 101, 17, 125, 64, 24, 249, 235, 41, 16, 82, 215, 44, 60, 155, 195, 74, 234, 30, 96, 180, 22, 20, 201, 239, 214, 54, 83, 67, 248, 153, 173, 170, 50, 109, 71, 162, 58, 157, 151, 116, 27, 247, 91, 26, 200, 85, 247, 90, 218, 102, 21, 239, 243, 241, 130, 181, 165, 229, 201, 36, 146, 188, 106, 211, 71, 99, 233, 86, 176, 157, 236, 81, 248, 172, 73, 251, 108, 142, 241, 22, 101, 56, 237, 188, 46, 145, 18, 64, 137, 4, 96, 106, 127, 176, 4, 211, 48, 89, 196, 131, 146, 221, 156, 211, 215, 82, 225, 9, 164, 249, 181, 194, 25, 18, 143, 40, 233, 26, 147, 145, 160, 244, 143, 71, 24, 77, 209, 82, 21, 124, 40, 8, 126, 81, 227, 11, 89, 0, 11, 132, 87, 174, 16, 178, 251, 1, 147, 7, 165, 9, 239, 165, 157, 201, 47, 47, 254, 241, 147, 108, 230, 142, 31, 164, 10, 123, 182, 141, 38, 190, 28, 203, 96, 197, 238, 1, 216, 179, 176, 145, 111, 128, 23, 244, 90, 174, 175, 141, 171, 239, 227, 191, 251, 196, 99, 104, 226, 215, 17, 99, 241, 174, 36, 64, 247, 27, 68, 147, 108, 135, 153, 116, 127, 138, 209, 235, 156, 154, 191, 169, 94, 114, 33, 168, 231, 38, 231, 124, 150, 136, 227, 240, 164, 25, 169, 48, 159, 173, 224, 129, 25, 225, 105, 161, 204, 31, 99, 126, 49, 76, 168, 246, 214, 224, 33, 210, 78, 4, 180, 144, 167, 98, 90, 4, 221, 241, 203, 252, 120, 244, 103, 233, 31, 253, 56, 85, 214, 1, 131, 19, 168, 193, 1, 66, 101, 91, 97, 222, 96, 204, 182, 92, 158, 220, 217, 199, 77, 88, 163, 241, 142, 71, 179, 146, 183, 227, 241, 225, 112, 146, 18, 59, 64, 244, 30, 161, 252, 76, 115, 133, 241, 194, 238, 149, 235, 19, 165, 41, 234, 107, 125, 21, 88, 205, 238, 210, 132, 251, 101, 28, 125, 18, 182, 121, 55, 181, 195, 156, 13, 75, 158, 219, 165, 186, 175, 73, 135, 177, 90, 20, 20, 203, 70, 147, 31, 166, 232, 8, 16, 127, 195, 235, 163, 164, 60, 138, 239, 103, 41, 8, 199, 211, 214, 144, 202, 155, 228, 54, 74, 87, 28, 203, 14, 143, 143, 17, 93, 49, 158, 102, 231, 49, 107, 73, 30, 228, 164, 139, 140, 211, 144, 11, 136, 244, 118, 122, 55, 184, 240, 57, 136, 24, 236, 163, 95, 145, 147, 96, 90, 3, 230, 96, 37, 133, 172, 79, 153, 100, 234, 43, 0, 60, 192, 235, 205, 51, 191, 140, 107, 164, 9, 124, 31, 51, 26, 211, 107, 125, 112, 193, 179, 225, 216, 93, 147, 213, 103, 51, 194, 205, 148, 52, 55, 20, 195, 208, 54, 162, 39, 101, 123, 167, 99, 173, 125, 15, 159, 250, 252, 246, 192, 243, 224, 126, 74, 254, 56, 225, 71, 163, 253, 229, 167, 119, 65, 136, 68, 210, 132, 58, 214, 233, 17, 128, 222, 27, 6, 223, 134, 114, 53, 88, 201, 158, 28, 242, 209, 192, 80, 216, 25, 67, 250, 109, 57, 51, 228, 233, 83, 53, 79, 142, 177, 46, 144, 220, 244, 70, 213, 37, 64, 26, 232, 76, 81, 12, 215, 211, 117, 252, 67, 142, 115, 54, 235, 196, 187, 172, 189, 52, 247, 154, 186, 17, 175, 90, 108, 69, 218, 242, 166, 122, 21, 187, 17, 144, 29, 211, 152, 86, 135, 76, 208, 251, 104, 125, 112, 174, 100, 225, 166, 40, 16, 159, 53, 98, 82, 252, 82, 61, 190, 187, 250, 72, 107, 182, 209, 101, 139, 232, 149, 221, 42, 234, 237, 198, 121, 31, 56, 116, 214, 7, 217, 199, 160, 14, 248, 78, 85, 101, 189, 141, 41, 126, 55, 58, 157, 206, 13, 105, 153, 218, 103, 198, 166, 19, 232, 78, 211, 173, 230, 185, 222, 12, 242, 115, 104, 175, 135, 209, 42, 52, 106, 63, 137, 191, 226, 65, 226, 60, 210, 20, 182, 191, 79, 167, 167, 90, 220, 210, 179, 131, 213, 140, 54, 142, 230, 238, 206, 211, 167, 186, 181, 42, 72, 205, 165, 238, 148, 210, 104, 202, 60, 201, 162, 219, 159, 99, 85, 109, 67, 217, 169, 140, 101, 70, 185, 122, 185, 236, 148, 93, 119, 103, 223, 70, 10, 35, 206, 220, 105, 223, 154, 197, 4, 81, 231, 37, 42, 127, 56, 74, 156, 242, 225, 133, 97, 51, 108, 189, 209, 55, 175, 200, 122, 205, 240, 197, 229, 107, 74, 233, 131, 127, 150, 129, 32, 7, 244, 174, 246, 253, 14, 5, 30, 172, 98, 98, 18, 248, 195, 248, 3, 92, 83, 62, 122, 98, 40, 11, 127, 200, 91, 157, 44, 29, 23, 110, 181, 64, 176, 115, 254, 165, 55, 13, 178, 24, 70, 105, 96, 202, 38, 26, 74, 4, 113, 137, 148, 146, 188, 5, 126, 64, 192, 8, 15, 16, 236, 158, 137, 28, 20, 174, 241, 236, 165, 144, 39, 156, 224, 37, 4, 189, 113, 56, 32, 85, 38, 215, 128, 57, 36, 69, 97, 184, 25, 33, 212, 74, 17, 31, 128, 173, 100, 91, 103, 120, 181, 117, 107, 174, 187, 91, 210, 100, 52, 155, 180, 23, 10, 4, 37, 157, 115, 22, 86, 196, 9, 49, 218, 221, 210, 53, 5, 55, 129, 62, 91, 55, 189, 227, 202, 7, 213, 213, 189, 56, 143, 205, 22, 79, 112, 218, 73, 202, 220, 232, 101, 62, 172, 178, 49, 100, 237, 254, 117, 124, 75, 52, 15, 214, 218, 139, 197, 246, 214, 30, 243, 47, 209, 50, 43, 106, 157, 194, 53, 66, 255, 254, 189, 98, 25, 56, 4, 114, 36, 5, 78, 197, 245, 93, 38, 38, 166, 157, 169, 65, 220, 55, 130, 47, 146, 182, 92, 232, 18, 137, 111, 15, 178, 188, 201, 237, 236, 105, 146, 131, 82, 93, 182, 246, 238, 247, 199, 41, 197, 131, 23, 15, 210, 59, 66, 196, 232, 144, 20, 81, 148, 145, 18, 28, 184, 86, 203, 115, 19, 43, 70, 138, 82, 104, 5, 74, 105, 67, 6, 36, 212, 173, 168, 208, 2, 202, 227, 122, 65, 23, 241, 133, 68, 242, 86, 138, 173, 67, 244, 80, 4, 210, 62, 130, 216, 240, 23, 29, 96, 251, 64, 7, 155, 112, 185, 29, 92, 64, 151, 201, 103, 114, 206, 152, 78, 94, 88, 206, 130, 62, 174, 48, 181, 205, 77, 87, 56, 237, 77, 134, 35, 119, 36, 176, 127, 62, 150, 228, 13, 15, 78, 164, 171, 32, 218, 61, 61, 83, 38, 206, 58, 44, 169, 97, 238, 89, 86, 149, 91, 103, 113, 55, 174, 192, 154, 88, 63, 89, 147, 21, 124, 247, 139, 145, 218, 191, 136, 119, 163, 48, 36, 156, 40, 234, 112, 189, 23, 12, 214, 147, 72, 205, 192, 161, 151, 178, 202, 33, 172, 210, 111, 105, 109, 6, 78, 67, 72, 110, 24, 239, 151, 26, 60, 228, 54, 39, 238, 70, 183, 89, 94, 162, 0, 43, 187, 11, 34, 91, 108, 94, 250, 141, 188, 27, 144, 55, 153, 105, 21, 42, 143, 59, 251, 251, 92, 254, 53, 2, 162, 247, 17, 110, 26, 52, 40, 201, 168, 143, 233, 234, 17, 62, 136, 16, 188, 68, 159, 23, 40, 67, 71, 112, 196, 251, 186, 217, 27, 114, 35, 130, 209, 145, 60, 211, 55, 202, 237, 80, 68, 236, 21, 133, 244, 209, 190, 164, 68, 142, 132, 103, 173, 240, 243, 99, 173, 91, 228, 8, 221, 50, 21, 179, 255, 163, 136, 156, 32, 10, 201, 203, 215, 6, 170, 93, 2, 250, 200, 146, 229, 113, 234, 81, 25, 88, 146, 3, 231, 206, 10, 112, 211, 145, 175, 72, 20, 59, 44, 108, 119, 86, 187, 205, 98, 16, 240, 229, 124, 154, 161, 250, 230, 206, 9, 246, 21, 245, 69, 166, 126, 80, 97, 63, 91, 51, 55, 146, 218, 159, 173, 226, 175, 156, 78, 95, 125, 166, 114, 213, 36, 18, 250, 208, 176, 153, 255, 72, 148, 12, 251, 168, 52, 218, 85, 32, 129, 107, 112, 233, 25, 123, 106, 66, 247, 125, 221, 210, 4, 244, 64, 248, 115, 121, 113, 97, 226, 79, 69, 120, 218, 109, 87, 235, 59, 9, 237, 114, 79, 217, 210, 243, 136, 109, 236, 67, 224, 253, 134, 168, 55, 15, 113, 71, 198, 235, 246, 242, 252, 35, 26, 192, 123, 55, 227, 141, 26, 42, 157, 21, 114, 66, 24, 225, 36, 166, 57, 107, 143, 67, 249, 35, 147, 37, 228, 196, 253, 6, 98, 175, 72, 102, 127, 151, 248, 165, 34, 240, 80, 203, 207, 172, 141, 193, 50, 103, 137, 113, 11, 116, 186, 92, 144, 166, 143, 86, 117, 251, 78, 146, 71, 74, 175, 241, 158, 143, 210, 221, 36, 22, 216, 233, 9, 43, 173, 97, 225, 122, 193, 16, 231, 218, 99, 117, 13, 137, 76, 72, 210, 67, 173, 116, 246, 231, 202, 81, 73, 72, 133, 16, 76, 134, 44, 119, 79, 191, 227, 75, 63, 238, 68, 107, 59, 157, 147, 85, 147, 255, 90, 22, 155, 144, 223, 254, 64, 157, 206, 149, 4, 31, 83, 224, 89, 61, 41, 248, 205, 139, 230, 174, 57, 144, 208, 24, 49, 219, 13, 33, 158, 149, 145, 131, 72, 154, 73, 146, 109, 246, 79, 154, 84, 254, 186, 13, 64, 254, 159, 107, 248, 207, 44, 79, 32, 215, 241, 211, 78, 157, 254, 137, 161, 16, 217, 201, 234, 113, 184, 20, 41, 199, 236, 38, 57, 209, 149, 181, 19, 172, 208, 141, 214, 88, 89, 30, 155, 229, 239, 73, 208, 22, 65, 88, 211, 19, 214, 169, 180, 139, 91, 100, 176, 201, 60, 215, 142, 64, 201, 61, 44, 82, 41, 231, 70, 171, 13, 83, 206, 204, 244, 125, 52, 31, 68, 149, 110, 4, 14, 203, 1, 32, 41, 69, 11, 41, 23, 214, 226, 153, 116, 170, 19, 69, 11, 162, 105, 151, 80, 195, 217, 138, 195, 39, 129, 154, 100, 82, 175, 54, 124, 125, 78, 136, 120, 89, 188, 130, 142, 25, 23, 227, 37, 15, 6, 141, 134, 28, 37, 238, 157, 89, 33, 19, 27, 180, 230, 241, 66, 116, 175, 60, 224, 17, 156, 39, 94, 227, 192, 229, 196, 87, 35, 148, 189, 116, 113, 147, 162, 43, 75, 69, 226, 60, 209, 59, 245, 255, 120, 19, 237, 208, 54, 150, 59, 138, 85, 141, 92, 44, 223, 165, 173, 72, 88, 153, 149, 186, 43, 9, 202, 163, 86, 226, 152, 164, 246, 85, 254, 83, 40, 194, 121, 0, 162, 162, 37, 104, 176, 183, 140, 110, 25, 97, 176, 138, 7, 160, 237, 251, 108, 97, 14, 107, 32, 113, 196, 125, 218, 217, 80, 139, 112, 27, 90, 23, 68, 210, 95, 61, 234, 191, 228, 181, 164, 0, 90, 19, 160, 116, 51, 13, 95, 138, 235, 239, 64, 244, 227, 214, 115, 47, 27, 86, 148, 13, 169, 66, 11, 24, 3, 193, 125, 34, 21, 193, 163, 208, 31, 243, 232, 88, 193, 74, 133, 70, 18, 184, 46, 116, 105, 24, 114, 63, 208, 121, 148, 218, 150, 5, 103, 72, 167, 83, 61, 117, 224, 190, 56, 15, 201, 55, 151, 154, 179, 0, 20, 185, 44, 29, 142, 195, 113, 137, 215, 192, 11, 181, 161, 225, 28, 60, 155, 246, 89, 252, 216, 156, 210, 1, 180, 125, 71, 229, 91, 244, 194, 235, 92, 163, 38, 245, 24, 33, 23, 113, 180, 169, 49, 224, 34, 142, 229, 173, 128, 138, 249, 7, 112, 183, 39, 178, 198, 182, 246, 35, 27, 201, 188, 27, 66, 157, 194, 181, 166, 128, 26, 82, 49, 200, 96, 153, 177, 125, 101, 238, 58, 185, 103, 69, 169, 179, 133, 87, 246, 201, 193, 35, 175, 18, 253, 143, 43, 157, 163, 83, 99, 76, 191, 117, 192, 97, 132, 142, 213, 3, 161, 4, 121, 13, 64, 137, 223, 42, 134, 137, 115, 8, 64, 124, 128, 38, 239, 68, 26, 119, 202, 192, 255, 75, 145, 190, 28, 55, 217, 68, 117, 238, 204, 128, 94, 64, 226, 156, 167, 216, 136, 160, 56, 194, 129, 80, 98, 139, 155, 124, 147, 227, 215, 185, 11, 157, 100, 120, 231, 225, 108, 124, 121, 8, 43, 2, 238, 228, 207, 164, 210, 111, 109, 203, 22, 224, 166, 42, 162, 252, 14, 129, 121, 108, 84, 61, 108, 13, 51, 158, 63, 245, 153, 77, 4, 24, 168, 128, 95, 89, 204, 218, 87, 32, 183, 235, 87, 44, 49, 181, 172, 93, 66, 190, 154, 183, 1, 110, 52, 199, 92, 71, 142, 12, 197, 141, 200, 129, 108, 107, 221, 176, 226, 41, 225, 87, 53, 34, 245, 185, 227, 28, 212, 195, 47, 121, 132, 241, 123, 24, 130, 185, 16, 108, 229, 34, 123, 1, 9, 51, 242, 220, 237, 10, 186, 87, 114, 188, 154, 146, 146, 147, 81, 79, 12, 59, 91, 2, 170, 1, 129, 180, 133, 77, 80, 116, 240, 179, 112, 244, 184, 224, 18, 19, 199, 135, 82, 139, 23, 176, 55, 83, 24, 236, 192, 150, 139, 103, 52, 189, 42, 169, 244, 43, 67, 174, 97, 161, 142, 153, 16, 198, 157, 255, 130, 154, 46, 35, 97, 196, 115, 254, 32, 104, 51, 215, 117, 141, 137, 46, 36, 140, 217, 55, 10, 44, 213, 157, 222, 120, 104, 12, 155, 111, 34, 82, 234, 64, 24, 213, 73, 222, 166, 42, 188, 24, 39, 7, 49, 31, 34, 45, 220, 193, 99, 184, 235, 15, 73, 25, 48, 236, 194, 91, 230, 192, 144, 93, 237, 118, 75, 209, 238, 24, 7, 92, 91, 168, 240, 31, 54, 139, 87, 233, 143, 155, 220, 182, 29, 195, 228, 126, 96, 119, 23, 18, 246, 11, 185, 254, 97, 17, 248, 58, 185, 143, 133, 38, 156, 206, 139, 1, 138, 6, 55, 196, 3, 120, 57, 218, 175, 181, 216, 223, 254, 46, 236, 4, 108, 125, 217, 94, 183, 209, 200, 17, 205, 141, 152, 103, 104, 171, 12, 92, 46, 14, 130, 30, 89, 65, 125, 34, 133, 28, 66, 208, 83, 50, 171, 6, 114, 237, 242, 61, 37, 14, 233, 27, 246, 122, 93, 224, 35, 24, 157, 18, 84, 130, 136, 5, 32, 224, 136, 212, 136, 115, 52, 24, 211, 152, 108, 97, 190, 218, 112, 160, 180, 85, 192, 23, 129, 188, 112, 92, 123, 240, 77, 84, 15, 250, 117, 224, 254, 21, 218, 214, 234, 228, 67, 37, 205, 85, 208, 154, 92, 232, 77, 199, 25, 54, 233, 106, 150, 231, 194, 179, 186, 230, 148, 213, 81, 98, 215, 12, 253, 38, 172, 162, 126, 4, 10, 84, 248, 115, 228, 67, 177, 37, 77, 245, 208, 171, 150, 251, 111, 151, 173, 15, 85, 51, 246, 164, 255, 176, 120, 93, 99, 84, 53, 66, 139, 238, 178, 179, 254, 154, 61, 92, 190, 67, 172, 167, 68, 21, 254, 213, 85, 135, 35, 198, 241, 99, 209, 19, 131, 66, 34, 56, 170, 213, 105, 1, 149, 197, 210, 53, 203, 103, 99, 248, 176, 168, 153, 59, 165, 176, 175, 185, 75, 37, 192, 49, 34, 250, 118, 95, 151, 99, 244, 79, 231, 243, 87, 182, 103, 15, 211, 116, 252, 28, 181, 123, 254, 102, 198, 223, 166, 232, 220, 255, 211, 161, 204, 120, 131, 4, 208, 233, 235, 248, 207, 8, 88, 193, 50, 252, 67, 204, 115, 78, 196, 67, 31, 52, 137, 31, 3, 196, 119, 14, 236, 114, 132, 209, 156, 59, 133, 183, 31, 192, 162, 71, 100, 235, 251, 196, 180, 54, 18, 47, 57, 134, 4, 190, 78, 78, 208, 164, 139, 69, 145, 29, 154, 57, 17, 4, 129, 237, 228, 45, 70, 115, 110, 45, 231, 139, 87, 178, 115, 19, 36, 15, 65, 184, 182, 179, 27, 243, 195, 145, 59, 0, 27, 32, 49, 229, 48, 97, 209, 116, 19, 215, 192, 91, 164, 57, 33, 90, 116, 191, 52, 232, 194, 11, 83, 175, 139, 207, 149, 40, 118, 139, 118, 66, 198, 56, 154, 183, 7, 18, 123, 114, 155, 52, 230, 65, 46, 35, 133, 181, 71, 164, 242, 30, 249, 233, 22, 98, 252, 85, 122, 155, 133, 12, 99, 26, 87, 254, 198, 196, 168, 13, 123, 152, 42, 156, 57, 195, 194, 80, 70, 224, 158, 148, 7, 230, 217, 49, 98, 189, 31, 244, 128, 14, 12, 143, 75, 114, 20, 193, 14, 99, 189, 2, 104, 178, 253, 105, 33, 79, 115, 181, 240, 49, 235, 209, 163, 40, 198, 235, 198, 125, 28, 15, 93, 138, 210, 71, 38, 157, 146, 180, 201, 50, 29, 4, 214, 109, 0, 16, 174, 55, 0, 145, 233, 144, 71, 46, 136, 200, 235, 69, 123, 156, 74, 248, 177, 144, 214, 87, 135, 255, 26, 210, 67, 162, 126, 40, 200, 32, 14, 166, 130, 249, 9, 228, 126, 186, 201, 249, 101, 174, 234, 180, 140, 231, 189, 219, 169, 181, 142, 75, 219, 114, 236, 252, 165, 2, 23, 195, 29, 166, 233, 49, 164, 213, 248, 213, 171, 121, 249, 158, 12, 70, 251, 141, 20, 233, 20, 212, 5, 172, 218, 176, 143, 74, 89, 130, 56, 124, 172, 95, 59, 224, 182, 174, 119, 30, 46, 109, 6, 191, 9, 215, 57, 196, 158, 155, 54, 196, 33, 206, 55, 162, 37, 241, 230, 105, 80, 26, 206, 41, 133, 187, 198, 205, 249, 108, 76, 220, 93, 190, 248, 10, 11, 233, 171, 47, 228, 138, 101, 247, 138, 215, 228, 167, 138, 91, 229, 85, 249, 201, 135, 222, 134, 55, 50, 33, 224, 115, 76, 122, 191, 226, 228, 61, 176, 65, 163, 100, 10, 33, 143, 181, 1, 250, 41, 75, 1, 199, 151, 39, 132, 249, 30, 196, 57, 70, 19, 126, 145, 114, 102, 77, 145, 53, 172, 138, 251, 221, 4, 20, 18, 113, 91, 46, 164, 195, 173, 221, 20, 27, 140, 2, 54, 11, 237, 108, 28, 53, 230, 168, 213, 20, 153, 16, 126, 200, 221, 75, 210, 157, 171, 43, 1, 83, 131, 170, 171, 171, 169, 8, 125, 208, 145, 85, 54, 131, 220, 149, 185, 111, 214, 80, 4, 60, 95, 27, 233, 75, 80, 10, 83, 173, 219, 134, 142, 202, 18, 119, 16, 246, 29, 202, 152, 156, 79, 165, 202, 31, 74, 98, 139, 44, 22, 0, 99, 93, 54, 112, 120, 134, 154, 28, 143, 89, 219, 107, 179, 248, 132, 85, 189, 186, 124, 11, 204, 228, 154, 162, 89, 100, 117, 227, 240, 164, 90, 10, 219, 193, 209, 129, 71, 197, 10, 157, 64, 155, 242, 64, 63, 62, 207, 192, 210, 169, 61, 151, 105, 98, 117, 60, 249, 97, 95, 236, 167, 88, 18, 163, 236, 140, 108, 144, 185, 120, 67, 202, 95, 108, 150, 232, 180, 246, 230, 94, 148, 131, 22, 1, 198, 219, 28, 35, 139, 237, 214, 146, 56, 220, 24, 9, 8, 134, 83, 33, 184, 215, 183, 99, 194, 40, 11, 54, 148, 200, 254, 88, 151, 194, 180, 17, 48, 129, 219, 61, 0, 170, 183, 92, 53, 65, 39, 212, 223, 167, 141, 182, 253, 8, 19, 145, 243, 190, 217, 86, 16, 237, 12, 132, 183, 76, 221, 148, 102, 138, 118, 195, 175, 12, 243, 109, 25, 68, 239, 81, 184, 183, 177, 201, 165, 27, 216, 160, 7, 12, 119, 10, 30, 141, 220, 234, 193, 189, 48, 240, 85, 32, 57, 167, 172, 124, 236, 245, 190, 154, 235, 152, 93, 87, 225, 27, 36, 165, 242, 107, 43, 80, 180, 114, 227, 190, 215, 166, 148, 228, 82, 72, 22, 20, 59, 218, 38, 70, 49, 94, 238, 158, 177, 215, 140, 235, 40, 82, 43, 17, 104, 32, 18, 240, 143, 66, 129, 244, 183, 217, 219, 13, 248, 13, 64, 62, 105, 45, 44, 51, 197, 209, 169, 203, 138, 10, 55, 51, 53, 122, 49, 119, 107, 228, 218, 134, 221, 244, 241, 22, 172, 184, 195, 193, 9, 31, 212, 100, 44, 11, 235, 19, 64, 2, 40, 50, 192, 197, 12, 29, 141, 213, 12, 169, 121, 180, 43, 168, 240, 197, 223, 108, 175, 132, 63, 201, 158, 248, 29, 74, 216, 14, 66, 120, 250, 243, 80, 105, 194, 106, 221, 131, 230, 209, 80, 127, 166, 24, 75, 182, 222, 153, 200, 221, 174, 11, 117, 85, 57, 172, 82, 66, 164, 126, 201, 182, 213, 162, 255, 151, 155, 68, 149, 54, 98, 107, 65, 70, 23, 25, 192, 123, 4, 5, 133, 99, 204, 76, 109, 227, 158, 21, 38, 74, 4, 71, 155, 79, 141, 215, 222, 34, 70, 134, 58, 61, 138, 55, 76, 59, 120, 96, 113, 174, 97, 54, 230, 27, 113, 18, 162, 220, 138, 4, 201, 70, 204, 94, 173, 96, 83, 68, 196, 203, 55, 70, 196, 147, 108, 54, 49, 186, 14, 159, 6, 30, 164, 130, 39, 120, 206, 21, 24, 136, 171, 127, 49, 4, 57, 233, 141, 195, 240, 162, 229, 36, 121, 247, 217, 242, 141, 154, 213, 194, 233, 209, 33, 112, 193, 106, 213, 10, 1, 27, 71, 198, 131, 31, 148, 18, 230, 149, 132, 208, 5, 35, 222, 100, 216, 254, 221, 74, 236, 10, 101, 156, 145, 46, 121, 134, 3, 242, 0, 121, 122, 66, 15, 66, 162, 44, 60, 169, 174, 120, 175, 238, 239, 50, 13, 236, 23, 205, 230, 65, 199, 0, 197, 239, 222, 99, 61, 101, 161, 50, 165, 126, 81, 147, 51, 252, 223, 216, 124, 20, 157, 4, 129, 141, 121, 149, 241, 84, 215, 71, 151, 66, 115, 189, 176, 49, 62, 41, 204, 85, 43, 134, 68, 131, 128, 105, 210, 185, 7, 232, 3, 14, 255, 215, 171, 225, 152, 188, 104, 251, 161, 235, 52, 35, 213, 152, 56, 83, 87, 235, 226, 190, 194, 4, 128, 247, 17, 207, 28, 132, 38, 23, 22, 47, 37, 111, 83, 192, 72, 201, 164, 155, 194, 181, 117, 130, 209, 196, 131, 21, 81, 249, 44, 219, 146, 237, 147, 64, 48, 80, 243, 105, 92, 157, 246, 60, 203, 190, 144, 44, 172, 243, 53, 13, 194, 88, 254, 221, 73, 189, 127, 104, 117, 119, 117, 108, 99, 156, 224, 181, 203, 169, 76, 111, 242, 40, 60, 255, 189, 84, 238, 3, 104, 12, 101, 142, 13, 22, 101, 7, 156, 80, 53, 55, 55, 239, 174, 56, 13, 254, 168, 28, 93, 49, 171, 174, 119, 254, 148, 204, 113, 109, 158, 82, 158, 82, 170, 137, 50, 130, 142, 84, 17, 79, 80, 15, 46, 117, 75, 91, 196, 60, 197, 195, 78, 190, 198, 56, 41, 208, 230, 217, 239, 136, 99, 168, 71, 57, 37, 159, 12, 242, 119, 187, 156, 108, 117, 152, 244, 95, 233, 64, 148, 107, 108, 212, 63, 229, 101, 234, 196, 16, 207, 111, 169, 69, 105, 100, 177, 34, 106, 197, 225, 63, 40, 107, 207, 8, 153, 110, 83, 100, 189, 17, 23, 56, 56, 60, 160, 246, 69, 144, 107, 3, 204, 167, 8, 221, 146, 173, 130, 102, 85, 74, 144, 224, 4, 89, 16, 2, 219, 44, 61, 214, 94, 85, 143, 24, 45, 121, 131, 94, 5, 65, 254, 55, 204, 110, 32, 38, 63, 204, 227, 170, 117, 247, 60, 82, 131, 65, 203, 183, 1, 176, 109, 17, 160, 164, 67, 88, 244, 23, 173, 126, 237, 241, 48, 107, 182, 148, 168, 115, 187, 209, 221, 96, 200, 175, 227, 204, 117, 210, 6, 139, 252, 196, 68, 146, 56, 246, 164, 189, 169, 42, 217, 231, 238, 221, 252, 17, 114, 186, 154, 179, 72, 49, 232, 199, 194, 1, 152, 43, 38, 198, 129, 202, 179, 54, 110, 204, 60, 254, 24, 24, 109, 230, 184, 109, 82, 198, 157, 127, 196, 182, 51, 106, 215, 146, 39, 143, 181, 104, 254, 179, 126, 245, 224, 174, 22, 247, 156, 217, 70, 241, 41, 50, 238, 161, 40, 69, 204, 235, 95, 205, 74, 237, 165, 150, 34, 61, 14, 52, 200, 50, 30, 32, 221, 252, 235, 49, 24, 224, 57, 1, 163, 92, 246, 41, 209, 59, 157, 101, 99, 160, 254, 148, 188, 253, 57, 61, 42, 11, 195, 236, 252, 112, 200, 5, 70, 238, 186, 253, 177, 144, 232, 124, 42, 30, 183, 147, 177, 80, 215, 147, 151, 113, 154, 168, 223, 55, 70, 123, 15, 202, 66, 186, 118, 249, 248, 131, 128, 251, 140, 104, 201, 228, 180, 143, 41, 162, 105, 9, 171, 31, 200, 205, 245, 73, 211, 150, 164, 147, 254, 106, 228, 2, 41, 3, 223, 143, 185, 190, 32, 232, 197, 2, 188, 186, 111, 15, 248, 20, 110, 240, 170, 131, 225, 163, 46, 72, 121, 13, 241, 144, 130, 174, 30, 193, 78, 172, 157, 25, 101, 238, 0, 169, 52, 97, 40, 156, 140, 65, 66, 193, 11, 66, 177, 140, 253, 241, 142, 33, 152, 90, 26, 49, 10, 248, 60, 89, 111, 235, 225, 69, 17, 53, 161, 118, 103, 140, 191, 170, 128, 170, 132, 248, 119, 127, 98, 22, 181, 192, 200, 172, 5, 99, 142, 61, 56, 177, 48, 138, 106, 19, 77, 114, 232, 223, 12, 174, 36, 219, 195, 153, 15, 112, 87, 236, 9, 252, 108, 103, 144, 17, 229, 3, 213, 179, 254, 96, 112, 140, 207, 13, 195, 215, 108, 82, 183, 132, 60, 124, 67, 253, 202, 55, 198, 176, 59, 28, 98, 131, 108, 59, 225, 170, 52, 85, 197, 168, 10, 166, 208, 211, 136, 24, 121, 192, 250, 74, 24, 15, 84, 241, 227, 171, 213, 137, 244, 41, 99, 218, 103, 134, 200, 243, 148, 39, 210, 124, 244, 206, 106, 14, 140, 170, 35, 29, 74, 29, 141, 68, 114, 115, 86, 131, 3, 182, 172, 162, 196, 95, 56, 187, 62, 134, 122, 59, 88, 86, 74, 135, 54, 201, 209, 218, 94, 30, 160, 72, 118, 63, 226, 214, 168, 223, 206, 108, 177, 49, 118, 217, 106, 219, 144, 121, 94, 220, 112, 68, 109, 149, 75, 201, 97, 22, 118, 245, 166, 145, 66, 98, 20, 78, 144, 192, 32, 130, 188, 100, 208, 82, 167, 49, 250, 184, 222, 171, 144, 121, 141, 72, 183, 52, 97, 82, 92, 220, 213, 45, 22, 73, 238, 157, 153, 212, 141, 12, 102, 19, 147, 237, 22, 55, 190, 178, 231, 54, 83, 227, 0, 105, 2, 34, 29, 239, 168, 126, 75, 106, 19, 1, 134, 3, 68, 189, 195, 55, 90, 9, 27, 9, 47, 10, 42, 153, 25, 209, 114, 185, 47, 211, 236, 13, 8, 253, 127, 79, 149, 71, 88, 13, 148, 77, 175, 132, 241, 10, 143, 151, 66, 187, 125, 43, 196, 125, 18, 16, 188, 150, 84, 36, 161, 49, 123, 18, 25, 62, 248, 122, 63, 88, 10, 151, 173, 203, 69, 93, 200, 234, 1, 158, 156, 78, 58, 136, 174, 185, 147, 208, 155, 74, 37, 17, 200, 160, 95, 143, 254, 125, 19, 85, 81, 88, 104, 6, 79, 148, 222, 254, 75, 15, 179, 38, 112, 54, 85, 80, 105, 76, 248, 73, 101, 24, 254, 237, 116, 166, 186, 37, 163, 218, 236, 49, 64, 25, 242, 247, 118, 250, 254, 167, 24, 31, 3, 226, 240, 197, 92, 193, 134, 240, 95, 64, 231, 189, 52, 167, 222, 151, 190, 136, 244, 51, 15, 94, 120, 2, 205, 51, 207, 3, 147, 51, 253, 84, 114, 149, 225, 179, 195, 62, 173, 7, 131, 3, 154, 161, 234, 142, 163, 60, 7, 147, 239, 160, 31, 140, 255, 255, 21, 102, 68, 161, 156, 77, 65, 95, 205, 36, 250, 215, 55, 98, 31, 4, 109, 64, 25, 54, 255, 200, 138, 23, 48, 139, 233, 44, 97, 13, 177, 125, 60, 169, 137, 98, 51, 104, 150, 55, 143, 84, 60, 244, 177, 84, 36, 216, 249, 24, 155, 191, 244, 58, 75, 22, 154, 93, 73, 139, 105, 163, 251, 23, 154, 106, 91, 67, 133, 237, 90, 251, 213, 43, 125, 162, 94, 239, 68, 39, 0, 65, 147, 212, 135, 5, 32, 14, 46, 122, 46, 188, 141, 37, 13, 68, 255, 84, 204, 56, 149, 178, 14, 207, 72, 84, 173, 60, 157, 18, 130, 124, 227, 111, 109, 93, 154, 205, 186, 90, 173, 129, 237, 1, 71, 10, 41, 62, 200, 205, 226, 231, 244, 143, 178, 16, 134, 112, 143, 205, 70, 205, 193, 66, 87, 122, 53, 131, 235, 169, 48, 56, 47, 18, 168, 147, 66, 6, 28, 36, 120, 73, 8, 222, 157, 221, 121, 140, 169, 195, 6, 143, 36, 59, 173, 251, 45, 244, 229, 217, 246, 144, 138, 117, 243, 85, 172, 144, 139, 250, 136, 24, 69, 88, 223, 255, 148, 0, 187, 121, 133, 110, 219, 22, 115, 206, 99, 19, 99, 211, 69, 237, 105, 38, 115, 15, 218, 175, 110, 34, 181, 81, 9, 171, 53, 34, 247, 199, 5, 107, 242, 44, 121, 83, 28, 187, 225, 25, 161, 212, 29, 38, 37, 220, 185, 68, 54, 102, 101, 86, 6, 199, 151, 238, 153, 179, 169, 117, 147, 64, 135, 211, 49, 19, 248, 128, 64, 73, 203, 78, 87, 53, 59, 245, 37, 29, 23, 56, 201, 130, 90, 88, 255, 154, 92, 91, 186, 190, 68, 65, 34, 85, 207, 98, 230, 54, 32, 90, 114, 183, 66, 134, 16, 217, 75, 223, 156, 159, 231, 252, 106, 45, 170, 224, 89, 249, 191, 38, 227, 57, 84, 49, 92, 233, 52, 114, 232, 180, 144, 32, 200, 13, 30, 209, 70, 109, 135, 169, 107, 74, 238, 45, 9, 135, 116, 189, 93, 122, 14, 85, 40, 181, 154, 193, 225, 190, 162, 128, 12, 160, 13, 104, 82, 171, 118, 54, 215, 119, 31, 185, 209, 41, 90, 170, 206, 157, 186, 82, 201, 169, 229, 191, 43, 93, 135, 149, 186, 172, 184, 123, 68, 255, 220, 34, 236, 56, 246, 189, 137, 72, 86, 30, 126, 224, 166, 56, 53, 6, 111, 201, 206, 97, 222, 86, 72, 96, 127, 107, 228, 215, 208, 27, 106, 184, 136, 37, 10, 194, 207, 129, 233, 53, 248, 45, 139, 152, 37, 93, 253, 151, 186, 157, 90, 143, 196, 123, 146, 249, 64, 67, 146, 10, 8, 154, 219, 42, 81, 84, 191, 16, 134, 236, 199, 192, 234, 0, 76, 162, 13, 70, 54, 19, 151, 211, 248, 250, 207, 75, 253, 92, 172, 111, 116, 37, 136, 107, 61, 230, 244, 43, 239, 26, 116, 74, 210, 121, 107, 47, 126, 178, 71, 207, 232, 84, 3, 217, 92, 45, 90, 242, 238, 248, 152, 133, 33, 196, 8, 250, 52, 26, 129, 172, 160, 174, 86, 75, 40, 136, 48, 48, 195, 112, 149, 51, 95, 127, 18, 242, 15, 112, 138, 210, 10, 48, 164, 218, 115, 107, 112, 14, 211, 232, 25, 138, 56, 156, 59, 107, 112, 136, 228, 229, 229, 232, 249, 57, 123, 222, 79, 159, 118, 17, 169, 177, 73, 98, 8, 140, 203, 17, 109, 84, 81, 121, 15, 104, 197, 23, 186, 233, 145, 244, 248, 24, 48, 196, 193, 177, 14, 232, 98, 205, 75, 56, 162, 72, 208, 217, 128, 177, 156, 159, 45, 63, 32, 1, 234, 223, 99, 127, 181, 198, 210, 28, 180, 224, 226, 55, 69, 141, 215, 174, 3, 135, 77, 195, 243, 232, 184, 173, 177, 250, 144, 53, 23, 238, 15, 148, 193, 77, 211, 243, 190, 83, 66, 148, 186, 52, 170, 170, 64, 103, 126, 207, 105, 0, 183, 73, 209, 55, 180, 51, 165, 14, 151, 134, 67, 73, 208, 13, 237, 11, 238, 13, 146, 77, 209, 235, 110, 114, 197, 2, 206, 85, 144, 255, 104, 87, 140, 209, 95, 84, 26, 121, 149, 14, 240, 22, 226, 215, 141, 85, 36, 89, 216, 92, 46, 29, 213, 207, 80, 232, 78, 102, 104, 78, 148, 98, 71, 47, 61, 100, 127, 23, 85, 42, 163, 224, 89, 195, 181, 243, 123, 198, 166, 87, 122, 242, 223, 117, 116, 218, 17, 82, 51, 36, 153, 147, 214, 184, 32, 192, 233, 253, 137, 225, 19, 127, 209, 30, 79, 144, 8, 163, 103, 113, 151, 72, 253, 5, 33, 33, 46, 72, 59, 5, 186, 143, 220, 105, 115, 122, 61, 71, 226, 210, 248, 239, 254, 130, 254, 185, 116, 60, 162, 38, 41, 244, 250, 120, 107, 243, 249, 237, 249, 16, 95, 24, 150, 175, 241, 117, 236, 42, 157, 143, 11, 194, 247, 53, 153, 77, 27, 23, 236, 185, 182, 212, 97, 9, 108, 33, 117, 114, 231, 226, 115, 84, 185, 126, 238, 59, 220, 123, 190, 64, 155, 46, 15, 198, 96, 21, 35, 205, 126, 241, 48, 126, 137, 56, 171, 89, 142, 241, 222, 236, 131, 64, 252, 164, 70, 250, 213, 5, 95, 26, 193, 27, 28, 13, 95, 248, 100, 176, 252, 62, 190, 127, 106, 133, 37, 169, 121, 219, 105, 152, 201, 237, 24, 11, 97, 60, 110, 107, 107, 33, 57, 99, 22, 183, 17, 227, 240, 238, 94, 91, 17, 42, 233, 165, 78, 239, 109, 124, 246, 105, 187, 65, 196, 60, 223, 47, 36, 142, 241, 63, 78, 252, 90, 136, 35, 173, 20, 232, 90, 224, 251, 28, 251, 225, 248, 89, 189, 226, 168, 216, 198, 204, 199, 163, 108, 144, 193, 29, 21, 79, 37, 216, 178, 92, 228, 221, 199, 226, 225, 236, 131, 134, 190, 191, 198, 236, 117, 58, 1, 91, 17, 187, 94, 78, 61, 236, 50, 123, 43, 215, 235, 231, 8, 38, 130, 174, 192, 56, 11, 60, 119, 40, 221, 31, 56, 234, 74, 0, 125, 233, 43, 55, 199, 201, 89, 176, 66, 135, 174, 215, 227, 178, 64, 165, 137, 139, 131, 57, 193, 243, 141, 232, 176, 38, 167, 204, 66, 91, 128, 72, 189, 41, 19, 52, 142, 11, 175, 17, 48, 65, 121, 133, 110, 222, 86, 251, 7, 83, 170, 156, 78, 126, 26, 55, 200, 148, 70, 120, 135, 212, 175, 103, 197, 53, 19, 58, 27, 215, 22, 196, 200, 186, 23, 141, 42, 252, 235, 29, 179, 125, 56, 234, 164, 123, 173, 154, 212, 182, 146, 18, 204, 36, 111, 142, 220, 114, 75, 65, 41, 146, 61, 222, 98, 74, 183, 250, 221, 53, 113, 48, 186, 6, 119, 53, 235, 67, 66, 243, 85, 86, 122, 96, 82, 12, 72, 246, 29, 170, 59, 22, 127, 31, 190, 171, 43, 26, 127, 100, 99, 206, 185, 217, 86, 72, 25, 68, 229, 236, 221, 237, 145, 248, 237, 10, 0, 252, 50, 195, 187, 200, 195, 51, 99, 156, 225, 78, 96, 200, 80, 9, 243, 69, 11, 206, 44, 208, 95, 244, 218, 248, 61, 33, 148, 80, 141, 106, 48, 170, 19, 8, 215, 184, 84, 151, 0, 94, 130, 98, 162, 253, 40, 112, 89, 126, 148, 249, 209, 185, 253, 249, 66, 183, 203, 214, 189, 94, 201, 15, 236, 128, 120, 26, 159, 148, 69, 40, 139, 5, 23, 120, 46, 148, 202, 57, 154, 178, 208, 132, 233, 145, 198, 201, 216, 207, 253, 192, 24, 232, 172, 93, 43, 132, 103, 234, 61, 34, 88, 106, 133, 252, 145, 208, 106, 80, 237, 113, 1, 6, 46, 137, 32, 89, 137, 169, 158, 154, 53, 26, 16, 205, 226, 149, 233, 157, 189, 81, 210, 230, 194, 95, 95, 155, 60, 75, 236, 166, 7, 41, 19, 33, 143, 61, 96, 190, 88, 231, 186, 1, 39, 239, 117, 247, 15, 170, 248, 209, 101, 78, 211, 187, 156, 34, 196, 235, 120, 131, 139, 49, 151, 122, 243, 146, 120, 242, 140, 216, 140, 78, 255, 135, 109, 164, 253, 63, 116, 254, 164, 137, 55, 152, 93, 93, 132, 242, 49, 224, 184, 129, 108, 104, 72, 209, 236, 178, 172, 37, 16, 210, 212, 48, 131, 213, 103, 154, 96, 105, 171, 112, 240, 189, 169, 142, 169, 72, 81, 59, 207, 157, 109, 16, 169, 51, 183, 183, 170, 117, 75, 50, 57, 106, 240, 109, 106, 10, 29, 22, 40, 129, 119, 171, 148, 106, 74, 75, 246, 174, 175, 148, 97, 164, 205, 155, 119, 89, 89, 74, 199, 32, 109, 90, 241, 27, 112, 179, 40, 73, 50, 36, 214, 199, 71, 30, 106, 133, 57, 96, 46, 30, 196, 221, 7, 93, 23, 211, 57, 182, 71, 184, 37, 123, 139, 122, 142, 241, 25, 100, 149, 246, 192, 241, 4, 94, 184, 91, 89, 173, 98, 157, 86, 181, 210, 19, 3, 68, 86, 29, 233, 37, 11, 218, 248, 39, 138, 79, 140, 79, 121, 132, 50, 149, 79, 14, 143, 120, 24, 95, 244, 243, 85, 140, 21, 8, 137, 255, 31, 206, 169, 157, 235, 176, 4, 193, 180, 228, 230, 165, 108, 135, 216, 50, 38, 225, 19, 236, 245, 0, 79, 171, 116, 153, 235, 35, 228, 148, 142, 192, 19, 232, 49, 106, 137, 94, 124, 75, 170, 6, 214, 87, 245, 138, 218, 222, 250, 124, 149, 52, 170, 83, 38, 174, 9, 191, 233, 123, 42, 11, 40, 252, 91, 81, 235, 171, 147, 16, 234, 142, 205, 105, 18, 74, 143, 155, 246, 5, 91, 48, 186, 225, 134, 232, 238, 204, 30, 2, 55, 242, 230, 255, 50, 248, 89, 48, 246, 47, 157, 238, 240, 118, 192, 104, 59, 255, 158, 49, 194, 218, 26, 111, 9, 214, 207, 56, 9, 230, 163, 20, 15, 85, 251, 98, 182, 144, 4, 185, 10, 226, 99, 24, 215, 165, 208, 111, 152, 204, 39, 81, 1, 174, 188, 32, 94, 44, 171, 84, 99, 52, 76, 76, 173, 213, 174, 7, 95, 156, 39, 182, 138, 218, 0, 75, 58, 98, 152, 205, 73, 102, 142, 196, 135, 111, 68, 243, 107, 51, 99, 68, 152, 246, 232, 157, 191, 176, 4, 131, 102, 228, 219, 35, 101, 154, 186, 107, 92, 203, 42, 243, 52, 148, 38, 92, 204, 22, 163, 124, 185, 213, 121, 153, 109, 0, 86, 142, 48, 19, 34, 132, 29, 208, 88, 109, 218, 140, 164, 166, 215, 206, 135, 145, 2, 175, 32, 158, 90, 91, 21, 209, 188, 115, 163, 1, 10, 77, 252, 96, 234, 151, 34, 30, 242, 40, 1, 102, 200, 180, 62, 179, 190, 114, 107, 83, 127, 37, 109, 22, 11, 147, 124, 96, 54, 149, 231, 133, 217, 117, 167, 113, 3, 137, 132, 148, 60, 92, 91, 145, 29, 9, 6, 254, 151, 130, 247, 37, 133, 13, 212, 201, 107, 166, 138, 126, 94, 47, 123, 216, 157, 141, 223, 164, 96, 243, 126, 242, 229, 33, 142, 31, 86, 200, 124, 14, 222, 110, 192, 101, 132, 185, 94, 80, 14, 48, 133, 164, 92, 61, 15, 123, 111, 94, 171, 5, 239, 43, 151, 112, 139, 84, 80, 238, 177, 95, 242, 47, 197, 147, 17, 241, 109, 239, 20, 53, 244, 127, 175, 125, 89, 19, 167, 242, 169, 118, 19, 203, 50, 93, 202, 49, 148, 92, 163, 115, 244, 246, 126, 115, 67, 59, 125, 197, 90, 125, 76, 98, 121, 13, 129, 176, 245, 1, 145, 83, 222, 82, 200, 190, 157, 200, 241, 212, 254, 252, 121, 68, 107, 129, 214, 81, 175, 38, 209, 233, 231, 62, 65, 148, 8, 223, 183, 214, 55, 26, 76, 79, 154, 45, 110, 146, 173, 157, 106, 240, 15, 174, 46, 72, 182, 87, 68, 228, 81, 77, 211, 57, 94, 207, 146, 127, 222, 61, 76, 93, 231, 233, 243, 204, 104, 136, 13, 163, 181, 31, 4, 252, 74, 233, 182, 173, 51, 131, 33, 10, 23, 7, 25, 27, 22, 76, 107, 249, 92, 100, 68, 9, 105, 123, 246, 88, 184, 37, 102, 107, 177, 203, 234, 246, 194, 163, 84, 112, 186, 79, 133, 137, 42, 12, 150, 91, 82, 143, 179, 228, 116, 74, 100, 108, 242, 109, 120, 6, 48, 54, 46, 176, 185, 147, 224, 237, 251, 188, 213, 220, 130, 169, 169, 243, 47, 100, 74, 181, 21, 133, 25, 63, 62, 186, 231, 50, 46, 181, 65, 141, 79, 64, 34, 175, 64, 20, 196, 176, 199, 135, 238, 37, 139, 133, 134, 184, 10, 9, 223, 205, 225, 67, 137, 96, 66, 200, 223, 91, 145, 225, 171, 79, 92, 248, 196, 51, 101, 85, 88, 32, 84, 84, 229, 225, 17, 125, 122, 139, 68, 253, 254, 161, 37, 8, 200, 249, 103, 40, 194, 155, 74, 135, 180, 184, 116, 186, 70, 255, 75, 123, 180, 16, 109, 92, 217, 140, 66, 136, 32, 247, 50, 58, 59, 79, 154, 117, 157, 158, 217, 166, 157, 25, 184, 68, 0, 240, 128, 143, 150, 61, 214, 59, 21, 102, 222, 224, 249, 74, 66, 63, 224, 251, 227, 13, 169, 63, 16, 93, 129, 168, 109, 251, 77, 170, 52, 194, 198, 77, 238, 123, 142, 79, 153, 33, 160, 6, 170, 103, 38, 129, 20, 195, 37, 232, 150, 198, 2, 200, 209, 190, 117, 229, 56, 11, 65, 253, 18, 145, 81, 214, 198, 44, 64, 27, 137, 190, 78, 223, 9, 2, 188, 194, 82, 78, 107, 148, 113, 210, 117, 90, 197, 102, 240, 139, 34, 126, 247, 193, 178, 240, 183, 164, 111, 196, 172, 253, 44, 99, 101, 242, 191, 124, 205, 98, 155, 181, 155, 171, 238, 174, 155, 223, 242, 40, 76, 178, 9, 10, 125, 129, 213, 52, 136, 127, 243, 245, 32, 166, 84, 182, 76, 212, 181, 190, 158, 90, 92, 72, 29, 57, 99, 146, 191, 150, 184, 211, 7, 180, 236, 132, 184, 188, 254, 36, 157, 100, 210, 131, 233, 245, 2, 41, 188, 42, 27, 48, 108, 250, 185, 72, 101, 130, 159, 227, 83, 146, 60, 40, 251, 97, 160, 62, 186, 187, 226, 154, 195, 18, 247, 122, 127, 56, 174, 71, 163, 114, 191, 5, 170, 120, 168, 179, 65, 165, 51, 234, 219, 91, 91, 89, 255, 28, 199, 214, 172, 125, 150, 200, 129, 166, 224, 171, 231, 30, 190, 149, 202, 182, 130, 51, 231, 212, 229, 29, 210, 64, 130, 196, 36, 135, 203, 13, 209, 45, 76, 42, 223, 127, 44, 52, 200, 183, 154, 86, 56, 48, 143, 47, 167, 112, 28, 143, 108, 165, 10, 69, 185, 84, 214, 53, 221, 171, 152, 91, 140, 220, 229, 177, 44, 181, 149, 222, 29, 82, 164, 210, 70, 120, 205, 148, 123, 95, 4, 34, 139, 220, 68, 205, 80, 19, 228, 123, 186, 34, 92, 95, 99, 141, 202, 225, 186, 25, 219, 177, 181, 88, 33, 173, 244, 94, 161, 54, 122, 14, 112, 183, 166, 201, 133, 48, 129, 57, 184, 181, 229, 199, 243, 90, 48, 168, 131, 213, 5, 201, 59, 6, 213, 34, 211, 137, 43, 116, 192, 130, 56, 99, 196, 159, 225, 104, 165, 208, 165, 159, 25, 146, 222, 57, 140, 119, 128, 255, 81, 158, 6, 22, 142, 241, 150, 152, 250, 151, 138, 4, 8, 157, 217, 114, 142, 133, 122, 196, 59, 45, 82, 23, 218, 230, 170, 132, 254, 6, 141, 79, 169, 174, 202, 158, 13, 19, 139, 96, 126, 217, 62, 126, 220, 78, 66, 28, 42, 124, 119, 166, 35, 207, 76, 17, 6, 51, 174, 42, 219, 223, 219, 234, 24, 174, 18, 12, 44, 29, 193, 249, 50, 111, 47, 230, 118, 193, 249, 88, 52, 53, 243, 121, 41, 67, 96, 254, 66, 116, 225, 218, 80, 193, 237, 233, 227, 224, 215, 140, 185, 96, 53, 247, 103, 142, 214, 1, 123, 93, 106, 19, 29, 57, 177, 94, 241, 101, 221, 51, 83, 41, 116, 99, 161, 149, 103, 20, 126, 247, 70, 76, 73, 78, 255, 218, 204, 120, 149, 10, 160, 223, 25, 86, 3, 254, 6, 3, 149, 4, 135, 186, 155, 84, 253, 8, 82, 80, 176, 102, 24, 208, 139, 151, 182, 160, 155, 109, 0, 103, 94, 46, 12, 4, 55, 174, 38, 103, 162, 33, 212, 247, 90, 248, 32, 162, 136, 21, 9, 101, 161, 36, 26, 188, 249, 170, 184, 142, 136, 55, 236, 238, 82, 98, 1, 75, 119, 139, 150, 13, 196, 246, 101, 180, 32, 243, 239, 200, 27, 157, 76, 122, 95, 13, 194, 60, 174, 167, 51, 192, 146, 249, 16, 162, 0, 224, 2, 34, 61, 244, 73, 38, 212, 45, 204, 85, 180, 174, 88, 18, 84, 233, 10, 129, 112, 160, 146, 12, 92, 88, 248, 235, 249, 44, 9, 9, 86, 167, 88, 58, 138, 129, 109, 6, 29, 176, 233, 147, 186, 190, 105, 80, 175, 42, 146, 232, 193, 194, 201, 186, 22, 128, 144, 216, 107, 33, 71, 24, 13, 4, 45, 143, 219, 226, 140, 32, 89, 57, 222, 123, 162, 6, 167, 116, 223, 93, 211, 65, 38, 183, 105, 180, 246, 175, 239, 81, 238, 174, 225, 12, 63, 79, 114, 79, 206, 96, 177, 113, 96, 124, 190, 36, 180, 176, 64, 42, 221, 242, 224, 53, 206, 48, 178, 120, 237, 234, 194, 39, 67, 188, 41, 114, 243, 164, 58, 210, 223, 110, 29, 186, 241, 239, 226, 148, 236, 97, 44, 8, 15, 54, 49, 177, 47, 122, 89, 126, 253, 231, 2, 221, 211, 43, 158, 217, 198, 49, 0, 225, 85, 106, 132, 142, 114, 80, 26, 143, 127, 138, 134, 77, 170, 11, 214, 50, 176, 251, 204, 139, 86, 250, 222, 169, 238, 103, 180, 20, 111, 128, 252, 25, 121, 68, 11, 132, 51, 207, 130, 206, 200, 170, 89, 119, 71, 142, 132, 87, 105, 99, 27, 82, 162, 26, 177, 200, 169, 33, 200, 145, 140, 64, 24, 180, 119, 154, 2, 215, 117, 196, 59, 87, 36, 98, 121, 69, 20, 148, 62, 113, 125, 159, 136, 116, 158, 85, 183, 72, 224, 118, 145, 161, 131, 214, 115, 152, 104, 130, 134, 49, 49, 15, 146, 3, 120, 187, 59, 196, 245, 42, 157, 87, 249, 13, 240, 205, 125, 158, 12, 188, 2, 96, 51, 186, 233, 71, 34, 71, 143, 78, 62, 11, 239, 221, 196, 71, 215, 43, 9, 95, 2, 129, 8, 240, 84, 80, 124, 15, 101, 213, 19, 105, 216, 65, 29, 235, 94, 124, 133, 208, 231, 99, 188, 184, 119, 44, 114, 192, 110, 245, 155, 97, 47, 39, 79, 92, 173, 53, 153, 46, 115, 229, 42, 192, 165, 40, 25, 245, 133, 119, 50, 240, 34, 198, 42, 214, 238, 44, 224, 250, 186, 52, 244, 227, 24, 101, 50, 247, 129, 113, 9, 85, 127, 55, 213, 70, 188, 39, 109, 100, 83, 84, 226, 161, 188, 251, 13, 64, 222, 39, 76, 0, 240, 174, 93, 129, 7, 65, 126, 205, 54, 241, 21, 100, 165, 91, 83, 232, 121, 176, 101, 251, 228, 228, 236, 237, 76, 192, 23, 195, 124, 243, 205, 16, 217, 124, 114, 170, 140, 114, 31, 158, 155, 5, 53, 208, 147, 135, 182, 23, 143, 37, 98, 123, 1, 67, 145, 16, 88, 154, 86, 88, 189, 71, 130, 254, 62, 95, 85, 160, 181, 67, 191, 156, 251, 239, 187, 206, 10, 118, 19, 113, 85, 142, 160, 222, 222, 198, 143, 149, 109, 160, 107, 45, 4, 141, 137, 110, 1, 88, 184, 70, 211, 135, 204, 213, 136, 192, 160, 205, 68, 144, 63, 47, 199, 34, 41, 125, 92, 172, 140, 226, 174, 133, 42, 86, 240, 168, 36, 92, 186, 178, 39, 155, 63, 253, 129, 151, 98, 17, 211, 40, 174, 40, 8, 176, 240, 162, 83, 168, 117, 43, 45, 64, 2, 109, 171, 143, 182, 41, 202, 189, 159, 189, 211, 1, 55, 222, 186, 162, 147, 255, 31, 165, 195, 251, 204, 19, 204, 202, 130, 128, 92, 57, 179, 224, 62, 253, 67, 154, 232, 160, 96, 210, 35, 136, 228, 191, 89, 149, 45, 148, 211, 132, 44, 118, 38, 26, 50, 192, 47, 184, 169, 13, 134, 54, 203, 65, 133, 40, 12, 100, 124, 189, 137, 52, 119, 16, 0, 109, 103, 153, 161, 37, 246, 208, 141, 243, 1, 5, 229, 42, 140, 7, 206, 151, 247, 232, 224, 197, 141, 103, 80, 15, 10, 248, 110, 8, 182, 118, 230, 246, 153, 2, 94, 45, 73, 23, 3, 221, 44, 205, 89, 114, 47, 60, 97, 71, 26, 239, 223, 109, 6, 154, 40, 155, 101, 229, 226, 6, 57, 52, 254, 62, 151, 215, 147, 251, 190, 50, 164, 110, 50, 159, 216, 235, 56, 134, 231, 236, 119, 211, 245, 125, 51, 139, 252, 153, 85, 59, 90, 68, 158, 239, 100, 216, 142, 23, 187, 66, 163, 220, 1, 226, 240, 121, 56, 53, 211, 104, 176, 149, 162, 59, 124, 46, 96, 25, 111, 137, 55, 32, 177, 185, 91, 137, 190, 200, 54, 247, 150, 141, 115, 144, 13, 223, 163, 178, 116, 183, 46, 31, 105, 163, 206, 250, 93, 252, 156, 35, 107, 40, 111, 3, 215, 57, 249, 192, 240, 242, 44, 90, 199, 97, 207, 197, 224, 201, 108, 18, 121, 162, 157, 199, 183, 204, 172, 178, 62, 83, 157, 51, 81, 130, 123, 5, 35, 78, 169, 170, 58, 120, 10, 99, 209, 36, 195, 150, 192, 105, 150, 47, 127, 185, 49, 24, 56, 46, 16, 155, 240, 2, 131, 151, 183, 209, 214, 175, 65, 212, 101, 70, 202, 53, 9, 166, 26, 38, 86, 220, 6, 102, 208, 33, 126, 241, 1, 189, 142, 83, 120, 20, 24, 255, 20, 38, 71, 70, 170, 74, 118, 56, 125, 91, 245, 51, 151, 152, 244, 212, 240, 208, 165, 194, 78, 33, 99, 144, 230, 13, 26, 44, 49, 79, 250, 77, 83, 110, 45, 200, 193, 138, 236, 101, 235, 167, 134, 14, 118, 145, 255, 27, 172, 98, 40, 38, 208, 1, 207, 255, 21, 238, 114, 230, 229, 185, 129, 73, 198, 90, 50, 153, 19, 108, 147, 92, 173, 237, 110, 32, 58, 121, 62, 105, 226, 112, 234, 157, 102, 74, 227, 153, 32, 60, 73, 200, 250, 98, 69, 53, 161, 210, 51, 44, 223, 182, 61, 120, 172, 20, 20, 203, 182, 166, 169, 114, 163, 95, 69, 231, 226, 103, 220, 246, 203, 35, 232, 8, 121, 24, 208, 34, 70, 115, 119, 245, 168, 249, 125, 172, 127, 116, 220, 152, 183, 220, 179, 45, 148, 13, 48, 163, 239, 32, 120, 141, 100, 241, 30, 46, 209, 254, 104, 244, 249, 138, 177, 116, 136, 122, 66, 134, 118, 182, 38, 58, 186, 75, 52, 75, 216, 252, 86, 183, 125, 242, 222, 197, 234, 26, 250, 54, 117, 151, 140, 240, 34, 29, 80, 177, 174, 28, 225, 66, 75, 229, 144, 99, 229, 190, 65, 62, 17, 16, 185, 227, 140, 43, 87, 236, 174, 42, 40, 62, 247, 231, 179, 30, 6, 130, 139, 238, 119, 0, 155, 146, 66, 173, 30, 83, 58, 211, 16, 186, 124, 205, 227, 10, 229, 184, 104, 65, 143, 45, 106, 249, 53, 124, 57, 208, 185, 111, 16, 147, 168], - [67, 228, 246, 220, 136, 169, 159, 227, 15, 137, 242, 255, 237, 109, 235, 59, 108, 31, 59, 215, 47, 160, 112, 225, 6, 58, 61, 199, 131, 254, 18, 24, 52, 71, 72, 223, 165, 164, 73, 176, 189, 65, 150, 221, 202, 150, 140, 89, 144, 119, 215, 203, 133, 95, 193, 115, 83, 244, 188, 215, 143, 35, 253, 178, 102, 57, 110, 180, 209, 145, 100, 238, 237, 78, 144, 222, 164, 178, 105, 112, 3, 125, 229, 166, 133, 123, 39, 38, 46, 188, 211, 166, 175, 107, 114, 14, 232, 137, 24, 198, 182, 165, 36, 122, 254, 20, 146, 107, 143, 102, 95, 159, 239, 53, 3, 177, 128, 250, 0, 87, 16, 65, 174, 129, 100, 113, 112, 117, 187, 16, 159, 89, 197, 116, 88, 134, 118, 74, 116, 244, 89, 124, 205, 211, 246, 218, 88, 20, 152, 247, 172, 134, 201, 56, 42, 240, 49, 208, 93, 243, 68, 70, 111, 233, 189, 223, 199, 35, 104, 163, 155, 207, 108, 206, 97, 255, 57, 153, 103, 43, 23, 140, 72, 116, 103, 43, 188, 248, 178, 187, 172, 126, 93, 140, 148, 116, 109, 22, 195, 84, 58, 131, 150, 216, 69, 175, 120, 236, 203, 241, 130, 6, 173, 83, 155, 229, 150, 39, 134, 225, 6, 252, 204, 38, 11, 108, 119, 140, 205, 206, 205, 146, 143, 96, 11, 203, 122, 78, 117, 172, 100, 217, 55, 188, 3, 212, 119, 172, 10, 63, 185, 75, 239, 119, 68, 185, 17, 175, 146, 0, 42, 112, 240, 162, 236, 136, 129, 220, 192, 227, 75, 168, 192, 126, 129, 100, 230, 18, 228, 87, 203, 230, 74, 166, 36, 67, 34, 0, 9, 167, 11, 156, 14, 48, 54, 47, 182, 61, 110, 215, 51, 20, 160, 58, 178, 192, 36, 48, 224, 109, 202, 206, 39, 173, 237, 66, 204, 125, 80, 188, 139, 148, 172, 25, 130, 43, 252, 176, 117, 253, 164, 45, 143, 73, 95, 238, 73, 213, 149, 248, 189, 51, 52, 175, 236, 220, 76, 80, 13, 20, 199, 33, 147, 57, 105, 156, 66, 83, 40, 174, 122, 215, 41, 60, 117, 137, 52, 9, 232, 19, 13, 248, 64, 178, 85, 163, 161, 28, 75, 35, 166, 16, 146, 235, 121, 181, 51, 155, 214, 222, 217, 87, 203, 109, 240, 127, 4, 56, 110, 35, 253, 196, 145, 219, 9, 6, 47, 6, 71, 30, 165, 180, 118, 59, 188, 220, 127, 177, 48, 140, 224, 229, 199, 167, 37, 45, 72, 67, 159, 178, 81, 241, 5, 3, 255, 201, 188, 183, 190, 38, 105, 197, 117, 9, 57, 46, 227, 84, 113, 118, 66, 3, 150, 102, 166, 248, 112, 20, 75, 119, 36, 102, 254, 27, 103, 12, 195, 167, 171, 84, 107, 83, 212, 28, 230, 147, 161, 127, 126, 224, 26, 140, 199, 46, 140, 187, 232, 192, 248, 43, 112, 211, 116, 102, 34, 116, 156, 191, 225, 219, 193, 251, 232, 163, 238, 69, 104, 89, 207, 142, 227, 164, 159, 225, 209, 208, 154, 61, 79, 139, 180, 106, 110, 205, 194, 143, 88, 11, 156, 75, 226, 38, 160, 1, 176, 47, 2, 213, 34, 71, 8, 187, 70, 92, 127, 122, 133, 193, 219, 46, 203, 181, 7, 43, 191, 34, 106, 250, 176, 39, 123, 119, 239, 218, 167, 125, 49, 102, 42, 124, 85, 242, 201, 8, 156, 7, 87, 249, 235, 80, 140, 85, 121, 64, 120, 179, 83, 215, 127, 86, 59, 76, 165, 128, 253, 16, 217, 83, 163, 202, 113, 33, 72, 243, 224, 92, 156, 135, 25, 4, 100, 61, 31, 91, 250, 101, 212, 114, 23, 28, 7, 34, 97, 26, 102, 150, 71, 129, 170, 74, 164, 197, 243, 154, 29, 198, 215, 79, 222, 40, 201, 82, 171, 169, 89, 94, 137, 109, 2, 19, 106, 111, 146, 157, 27, 194, 9, 251, 253, 137, 105, 193, 189, 215, 25, 248, 74, 38, 135, 157, 110, 200, 118, 189, 67, 7, 40, 31, 249, 96, 170, 185, 76, 153, 210, 42, 67, 136, 148, 68, 230, 108, 85, 0, 197, 149, 61, 186, 128, 253, 123, 121, 227, 60, 114, 201, 167, 13, 212, 196, 174, 156, 110, 153, 120, 6, 89, 106, 168, 53, 65, 40, 220, 30, 231, 147, 95, 197, 45, 46, 119, 172, 9, 55, 100, 93, 54, 41, 70, 181, 35, 210, 215, 215, 43, 153, 104, 9, 186, 75, 121, 68, 206, 143, 195, 205, 49, 201, 133, 197, 234, 194, 190, 55, 134, 97, 33, 233, 33, 31, 9, 248, 127, 3, 223, 66, 204, 203, 9, 199, 10, 222, 105, 192, 249, 193, 31, 50, 228, 32, 40, 6, 15, 55, 231, 34, 76, 91, 43, 151, 182, 152, 208, 108, 2, 146, 125, 60, 124, 175, 235, 51, 29, 204, 167, 106, 7, 218, 166, 12, 186, 121, 71, 29, 162, 74, 147, 91, 177, 67, 187, 78, 203, 52, 246, 63, 108, 109, 14, 154, 69, 4, 204, 110, 180, 9, 109, 57, 12, 83, 7, 250, 74, 144, 111, 152, 61, 31, 87, 184, 69, 16, 99, 38, 46, 121, 2, 138, 73, 19, 126, 218, 237, 183, 131, 239, 254, 19, 213, 142, 224, 51, 85, 144, 109, 37, 252, 252, 7, 85, 240, 206, 54, 97, 62, 37, 225, 76, 244, 195, 19, 97, 26, 33, 131, 25, 152, 13, 176, 64, 248, 155, 203, 102, 78, 107, 114, 105, 242, 170, 200, 254, 27, 236, 107, 23, 163, 231, 199, 200, 181, 137, 175, 188, 196, 14, 50, 117, 7, 102, 5, 174, 114, 254, 132, 207, 14, 156, 173, 115, 127, 205, 137, 180, 71, 92, 134, 247, 134, 67, 85, 85, 81, 180, 6, 138, 154, 125, 217, 145, 25, 12, 169, 73, 232, 26, 14, 47, 138, 138, 183, 148, 123, 106, 243, 131, 111, 229, 73, 240, 33, 127, 219, 185, 70, 235, 30, 179, 37, 49, 70, 133, 236, 168, 207, 248, 27, 173, 102, 129, 252, 15, 168, 196, 75, 252, 234, 191, 212, 166, 93, 13, 139, 129, 22, 223, 76, 206, 226, 56, 165, 172, 115, 117, 24, 168, 174, 52, 241, 113, 134, 88, 81, 53, 201, 83, 151, 28, 56, 117, 174, 221, 186, 48, 110, 118, 212, 224, 192, 77, 190, 136, 172, 171, 61, 80, 166, 14, 253, 196, 86, 144, 63, 50, 55, 235, 121, 191, 104, 113, 166, 202, 28, 249, 76, 40, 56, 248, 76, 227, 187, 38, 85, 205, 158, 84, 254, 177, 204, 236, 24, 58, 15, 127, 89, 69, 119, 23, 178, 63, 29, 205, 59, 250, 100, 203, 168, 35, 89, 178, 148, 92, 134, 47, 93, 178, 204, 125, 198, 54, 4, 12, 16, 174, 242, 38, 44, 19, 170, 51, 48, 9, 94, 1, 78, 164, 36, 75, 31, 38, 64, 16, 171, 133, 163, 57, 147, 128, 65, 217, 155, 62, 59, 54, 70, 83, 128, 21, 185, 219, 58, 115, 18, 145, 46, 254, 66, 111, 216, 184, 131, 216, 49, 55, 79, 187, 82, 249, 191, 216, 204, 185, 27, 125, 161, 167, 42, 234, 138, 167, 51, 154, 32, 150, 26, 130, 199, 249, 169, 168, 113, 174, 12, 107, 3, 159, 4, 184, 230, 213, 95, 241, 230, 97, 216, 239, 9, 140, 20, 217, 181, 12, 13, 150, 80, 113, 131, 27, 131, 120, 101, 249, 130, 6, 116, 127, 152, 145, 169, 68, 206, 166, 79, 113, 200, 38, 49, 212, 0, 165, 138, 231, 145, 183, 109, 133, 158, 109, 31, 100, 120, 189, 18, 100, 245, 110, 210, 195, 69, 165, 234, 200, 23, 52, 55, 100, 239, 29, 21, 75, 131, 175, 64, 114, 225, 169, 6, 148, 203, 60, 107, 16, 74, 216, 151, 123, 239, 51, 83, 97, 62, 115, 17, 227, 249, 125, 56, 146, 153, 45, 151, 182, 94, 153, 65, 162, 15, 224, 83, 228, 216, 214, 78, 255, 132, 181, 26, 247, 216, 151, 28, 27, 220, 32, 235, 39, 202, 233, 8, 247, 224, 91, 14, 87, 49, 170, 33, 141, 61, 215, 25, 125, 158, 224, 89, 18, 130, 78, 81, 34, 242, 158, 123, 137, 69, 179, 195, 194, 206, 83, 33, 40, 106, 162, 72, 19, 160, 145, 64, 121, 2, 178, 60, 146, 174, 204, 73, 78, 9, 145, 195, 66, 129, 254, 4, 73, 138, 235, 238, 147, 125, 142, 61, 140, 177, 154, 79, 93, 99, 75, 104, 237, 3, 237, 115, 75, 65, 164, 95, 203, 63, 22, 130, 74, 194, 59, 181, 91, 224, 184, 4, 77, 110, 249, 219, 101, 249, 118, 229, 13, 129, 43, 131, 4, 35, 246, 159, 149, 131, 16, 93, 64, 62, 184, 215, 189, 29, 24, 232, 154, 231, 1, 134, 238, 220, 236, 77, 42, 209, 233, 54, 138, 213, 145, 225, 235, 148, 3, 56, 216, 112, 222, 194, 29, 243, 102, 81, 167, 60, 102, 221, 103, 98, 151, 145, 30, 52, 54, 37, 115, 149, 145, 174, 241, 203, 226, 82, 0, 154, 196, 197, 168, 253, 198, 11, 106, 214, 200, 3, 40, 216, 91, 161, 145, 119, 10, 117, 126, 116, 10, 142, 1, 63, 11, 119, 131, 237, 238, 188, 243, 89, 18, 87, 183, 247, 178, 51, 199, 181, 21, 67, 243, 118, 115, 50, 86, 242, 217, 170, 78, 192, 89, 87, 235, 19, 10, 34, 150, 39, 44, 218, 136, 205, 148, 14, 184, 109, 19, 26, 128, 18, 180, 88, 138, 66, 189, 15, 137, 202, 197, 81, 205, 26, 254, 120, 122, 55, 114, 171, 26, 215, 85, 238, 149, 112, 137, 29, 225, 189, 170, 228, 65, 28, 28, 128, 189, 99, 169, 139, 235, 126, 38, 56, 78, 73, 136, 108, 108, 71, 15, 144, 103, 218, 245, 107, 87, 157, 199, 160, 73, 52, 4, 168, 76, 171, 28, 172, 48, 158, 59, 239, 48, 199, 70, 188, 52, 161, 165, 224, 149, 218, 12, 225, 188, 92, 241, 219, 44, 93, 188, 159, 30, 24, 71, 103, 119, 31, 98, 157, 119, 191, 132, 7, 216, 75, 249, 3, 123, 55, 93, 81, 30, 145, 77, 46, 90, 160, 33, 33, 113, 12, 142, 49, 151, 90, 134, 81, 111, 187, 241, 40, 253, 244, 160, 229, 141, 83, 190, 5, 255, 126, 25, 139, 195, 85, 237, 254, 103, 13, 73, 32, 170, 192, 83, 114, 115, 184, 185, 92, 224, 251, 202, 33, 146, 2, 56, 104, 73, 92, 214, 98, 93, 113, 205, 83, 160, 102, 172, 19, 154, 144, 31, 9, 106, 53, 67, 76, 76, 111, 51, 49, 216, 11, 195, 149, 26, 131, 192, 117, 250, 15, 47, 252, 72, 137, 1, 63, 100, 135, 50, 136, 72, 45, 229, 159, 41, 20, 231, 18, 25, 222, 22, 216, 29, 76, 57, 29, 177, 233, 250, 212, 212, 24, 141, 103, 106, 40, 76, 205, 195, 6, 235, 200, 9, 21, 44, 181, 25, 135, 102, 70, 241, 206, 179, 151, 219, 225, 135, 93, 108, 193, 177, 102, 26, 60, 89, 40, 74, 59, 247, 41, 58, 15, 36, 193, 234, 19, 135, 18, 47, 36, 132, 194, 177, 242, 47, 95, 192, 188, 38, 23, 179, 12, 44, 23, 155, 213, 246, 106, 134, 67, 148, 195, 17, 248, 235, 45, 52, 94, 23, 80, 230, 241, 231, 82, 49, 127, 242, 121, 203, 187, 113, 136, 179, 40, 204, 149, 203, 118, 83, 161, 141, 107, 61, 120, 73, 169, 112, 94, 104, 210, 19, 214, 3, 188, 5, 195, 250, 76, 145, 52, 77, 211, 145, 64, 103, 149, 81, 10, 129, 48, 171, 24, 27, 219, 165, 182, 44, 210, 221, 95, 246, 218, 114, 71, 245, 42, 73, 177, 205, 58, 240, 50, 180, 13, 92, 113, 97, 69, 207, 156, 161, 143, 186, 162, 191, 92, 200, 75, 17, 162, 147, 143, 80, 241, 190, 99, 90, 171, 34, 210, 147, 185, 151, 116, 251, 88, 204, 75, 154, 7, 218, 203, 12, 58, 63, 235, 63, 155, 208, 72, 141, 106, 105, 182, 29, 196, 224, 42, 204, 146, 234, 27, 84, 33, 218, 93, 243, 156, 100, 190, 250, 128, 228, 171, 239, 201, 101, 244, 41, 82, 24, 120, 59, 244, 139, 40, 136, 105, 135, 33, 123, 2, 145, 143, 196, 198, 81, 20, 145, 220, 81, 19, 133, 155, 249, 22, 187, 2, 80, 175, 27, 125, 192, 240, 21, 204, 144, 64, 66, 156, 215, 128, 18, 243, 9, 83, 150, 115, 6, 160, 39, 54, 103, 10, 84, 31, 35, 135, 187, 67, 58, 64, 72, 82, 61, 33, 109, 76, 205, 186, 244, 144, 217, 90, 121, 44, 119, 128, 72, 34, 42, 241, 97, 182, 77, 230, 116, 85, 197, 201, 241, 63, 248, 194, 153, 169, 252, 20, 195, 32, 17, 70, 109, 147, 24, 4, 28, 167, 44, 115, 132, 11, 44, 216, 126, 85, 171, 31, 189, 2, 143, 48, 205, 76, 4, 83, 205, 111, 105, 96, 144, 233, 53, 201, 68, 101, 30, 149, 146, 188, 87, 109, 167, 220, 56, 120, 106, 113, 103, 25, 93, 29, 146, 170, 31, 18, 86, 0, 131, 176, 56, 193, 218, 108, 62, 212, 146, 117, 92, 225, 112, 135, 154, 198, 46, 220, 106, 176, 242, 165, 83, 252, 146, 177, 211, 129, 212, 242, 254, 143, 88, 56, 170, 90, 207, 77, 216, 1, 65, 117, 117, 207, 25, 85, 111, 106, 139, 121, 93, 122, 202, 0, 20, 108, 41, 147, 72, 86, 157, 163, 48, 114, 90, 202, 165, 56, 248, 64, 10, 212, 117, 89, 147, 84, 205, 77, 112, 185, 90, 156, 78, 250, 155, 222, 161, 32, 114, 244, 173, 26, 35, 58, 50, 106, 13, 147, 184, 105, 154, 202, 3, 77, 126, 102, 106, 180, 136, 26, 61, 69, 128, 186, 228, 231, 222, 131, 53, 199, 14, 113, 240, 112, 150, 73, 185, 76, 202, 245, 241, 12, 189, 57, 213, 4, 97, 52, 195, 123, 12, 38, 91, 89, 220, 21, 85, 125, 83, 17, 229, 108, 17, 243, 6, 29, 243, 229, 81, 231, 34, 117, 50, 226, 178, 22, 56, 103, 66, 197, 97, 118, 135, 141, 82, 226, 35, 131, 151, 123, 150, 208, 96, 180, 57, 251, 234, 30, 63, 116, 18, 87, 216, 3, 228, 179, 152, 5, 37, 113, 253, 251, 233, 5, 133, 100, 123, 176, 125, 22, 141, 247, 223, 238, 35, 78, 225, 21, 177, 206, 75, 168, 46, 192, 189, 139, 195, 93, 119, 54, 27, 78, 191, 231, 141, 39, 228, 183, 6, 91, 183, 147, 153, 211, 132, 209, 150, 128, 80, 203, 54, 10, 159, 77, 201, 19, 216, 173, 254, 175, 94, 250, 223, 239, 141, 70, 56, 181, 21, 129, 133, 152, 201, 245, 133, 133, 56, 180, 43, 68, 227, 80, 43, 84, 232, 36, 21, 245, 223, 33, 163, 82, 5, 122, 158, 79, 212, 132, 5, 81, 226, 150, 192, 189, 6, 3, 106, 124, 44, 2, 126, 183, 252, 48, 92, 151, 199, 97, 38, 233, 180, 255, 7, 23, 103, 225, 169, 82, 131, 68, 255, 159, 42, 127, 179, 82, 227, 66, 128, 81, 40, 149, 124, 36, 133, 207, 90, 32, 180, 50, 100, 227, 121, 48, 21, 45, 125, 98, 21, 104, 159, 150, 89, 82, 148, 88, 124, 200, 118, 226, 146, 56, 130, 216, 208, 149, 200, 254, 10, 18, 165, 90, 96, 176, 186, 106, 67, 227, 122, 244, 129, 114, 109, 123, 152, 138, 201, 99, 207, 212, 8, 39, 17, 217, 30, 78, 43, 134, 157, 71, 57, 205, 65, 17, 36, 127, 142, 50, 160, 123, 9, 143, 184, 141, 97, 232, 99, 65, 104, 66, 24, 74, 165, 230, 148, 0, 80, 21, 232, 35, 208, 40, 48, 151, 154, 185, 29, 243, 207, 117, 129, 56, 192, 82, 193, 176, 200, 195, 87, 133, 60, 40, 83, 204, 34, 34, 48, 7, 8, 171, 202, 5, 177, 4, 93, 116, 233, 25, 247, 20, 78, 111, 101, 58, 152, 174, 181, 94, 22, 184, 134, 54, 158, 178, 119, 103, 42, 13, 79, 55, 32, 144, 175, 190, 34, 47, 96, 54, 172, 147, 20, 207, 136, 52, 73, 201, 195, 160, 176, 52, 3, 52, 28, 133, 3, 1, 6, 145, 185, 222, 59, 95, 134, 91, 13, 117, 180, 63, 137, 126, 24, 82, 97, 146, 110, 117, 143, 198, 150, 199, 36, 76, 212, 114, 194, 242, 117, 233, 175, 206, 152, 62, 151, 9, 131, 204, 251, 145, 38, 68, 231, 171, 233, 223, 137, 157, 194, 196, 63, 214, 247, 109, 189, 226, 77, 255, 148, 104, 41, 118, 226, 210, 98, 35, 42, 181, 56, 80, 153, 193, 31, 96, 229, 33, 38, 45, 182, 245, 211, 199, 167, 124, 71, 198, 45, 188, 111, 176, 10, 111, 175, 141, 83, 84, 77, 81, 157, 213, 71, 112, 139, 54, 57, 12, 161, 239, 117, 171, 211, 235, 194, 170, 15, 204, 208, 106, 155, 73, 118, 80, 122, 85, 142, 144, 103, 71, 146, 69, 215, 51, 244, 99, 175, 158, 202, 5, 72, 222, 238, 16, 164, 8, 106, 73, 116, 1, 24, 202, 41, 180, 95, 44, 165, 243, 99, 164, 10, 15, 70, 4, 188, 101, 100, 167, 244, 213, 163, 251, 233, 124, 168, 121, 114, 225, 249, 53, 155, 230, 119, 126, 152, 224, 138, 109, 53, 67, 135, 100, 135, 1, 146, 185, 150, 17, 78, 106, 64, 37, 86, 181, 4, 53, 192, 52, 7, 90, 215, 17, 123, 13, 4, 26, 104, 8, 145, 178, 72, 12, 33, 66, 148, 103, 170, 193, 21, 107, 84, 129, 191, 91, 196, 30, 22, 127, 103, 252, 33, 40, 146, 43, 22, 207, 130, 170, 195, 222, 60, 107, 158, 17, 12, 247, 26, 27, 34, 17, 194, 56, 81, 21, 151, 23, 195, 216, 12, 73, 89, 103, 213, 153, 106, 131, 3, 186, 193, 227, 145, 119, 219, 177, 118, 174, 121, 50, 52, 184, 144, 220, 153, 117, 78, 101, 34, 83, 183, 7, 104, 217, 88, 248, 40, 233, 160, 30, 185, 157, 221, 221, 163, 61, 59, 112, 255, 171, 29, 146, 121, 162, 135, 96, 228, 240, 223, 189, 180, 83, 239, 192, 16, 92, 49, 58, 216, 209, 20, 217, 110, 43, 198, 162, 231, 98, 246, 114, 83, 30, 179, 116, 185, 153, 66, 238, 118, 147, 2, 223, 100, 134, 235, 38, 131, 117, 39, 150, 214, 100, 27, 206, 210, 16, 123, 34, 75, 213, 242, 221, 24, 152, 75, 110, 55, 62, 1, 132, 187, 70, 96, 23, 153, 249, 14, 157, 214, 209, 154, 230, 205, 221, 128, 111, 88, 97, 245, 1, 61, 49, 142, 217, 5, 144, 237, 40, 248, 168, 227, 160, 183, 123, 6, 94, 213, 163, 46, 7, 135, 223, 185, 121, 32, 100, 171, 4, 99, 105, 221, 181, 194, 33, 33, 136, 52, 129, 137, 78, 197, 26, 66, 251, 177, 251, 31, 9, 143, 184, 225, 112, 202, 212, 196, 47, 235, 51, 202, 169, 94, 14, 21, 108, 52, 249, 65, 85, 93, 86, 128, 196, 132, 33, 249, 35, 138, 43, 87, 13, 117, 22, 45, 93, 31, 167, 131, 84, 231, 190, 255, 54, 114, 206, 36, 236, 175, 92, 157, 36, 107, 113, 120, 31, 30, 246, 141, 16, 134, 132, 232, 57, 145, 248, 143, 151, 25, 0, 27, 192, 241, 174, 207, 244, 31, 97, 250, 57, 118, 176, 206, 207, 158, 17, 93, 77, 25, 183, 102, 135, 124, 95, 22, 63, 16, 164, 7, 174, 98, 232, 173, 216, 3, 176, 250, 12, 60, 253, 137, 41, 155, 50, 254, 100, 68, 219, 152, 100, 156, 226, 163, 88, 96, 38, 191, 216, 56, 67, 127, 104, 111, 20, 117, 48, 244, 208, 52, 57, 192, 145, 60, 33, 254, 45, 119, 46, 3, 227, 87, 213, 34, 52, 242, 131, 212, 71, 253, 71, 184, 12, 14, 93, 150, 129, 5, 102, 212, 243, 97, 36, 123, 236, 129, 188, 146, 114, 145, 209, 233, 248, 128, 132, 77, 196, 171, 163, 160, 87, 30, 207, 226, 36, 216, 72, 0, 205, 153, 171, 238, 228, 98, 128, 174, 201, 189, 128, 252, 117, 246, 202, 52, 136, 232, 250, 154, 29, 255, 139, 41, 121, 188, 159, 176, 105, 49, 70, 177, 6, 2, 63, 158, 200, 214, 189, 118, 87, 82, 127, 20, 126, 166, 206, 189, 113, 50, 192, 153, 136, 138, 239, 235, 220, 11, 119, 171, 34, 58, 179, 177, 46, 12, 152, 46, 248, 155, 61, 202, 226, 98, 50, 175, 153, 19, 156, 179, 11, 218, 207, 7, 107, 169, 32, 189, 187, 107, 100, 249, 197, 163, 253, 78, 222, 92, 176, 215, 167, 9, 48, 226, 140, 69, 150, 255, 122, 79, 240, 192, 187, 183, 185, 48, 167, 213, 223, 171, 243, 151, 227, 36, 161, 130, 166, 97, 139, 240, 229, 204, 248, 186, 188, 253, 149, 195, 162, 115, 108, 200, 3, 136, 50, 216, 83, 197, 232, 98, 27, 6, 37, 45, 102, 88, 1, 116, 240, 100, 204, 56, 239, 122, 92, 196, 96, 1, 182, 82, 245, 164, 189, 164, 98, 128, 127, 12, 41, 131, 170, 6, 65, 178, 70, 5, 70, 203, 225, 83, 136, 2, 21, 151, 93, 129, 138, 34, 16, 235, 126, 211, 186, 16, 236, 78, 118, 2, 255, 215, 119, 195, 6, 153, 223, 139, 179, 59, 90, 228, 124, 85, 43, 175, 197, 236, 82, 168, 213, 148, 184, 68, 113, 92, 59, 136, 8, 95, 114, 230, 127, 229, 30, 147, 230, 104, 135, 157, 198, 112, 208, 107, 58, 103, 156, 188, 189, 215, 244, 89, 212, 140, 97, 53, 230, 35, 14, 37, 214, 61, 126, 151, 249, 195, 160, 49, 95, 220, 230, 240, 10, 115, 116, 103, 92, 230, 132, 165, 20, 114, 204, 72, 189, 187, 83, 161, 187, 7, 152, 186, 231, 9, 242, 226, 134, 228, 193, 187, 233, 30, 139, 44, 25, 109, 116, 90, 253, 24, 213, 179, 164, 229, 165, 240, 99, 36, 52, 65, 183, 47, 168, 67, 14, 226, 236, 252, 169, 4, 102, 88, 41, 169, 112, 1, 139, 30, 35, 48, 150, 238, 23, 198, 102, 145, 186, 206, 48, 122, 159, 94, 122, 217, 111, 185, 207, 134, 115, 119, 140, 104, 13, 191, 215, 77, 201, 98, 91, 82, 217, 2, 68, 138, 173, 248, 253, 114, 176, 249, 28, 253, 39, 30, 17, 189, 143, 44, 80, 239, 97, 25, 51, 110, 192, 177, 36, 127, 220, 119, 214, 162, 83, 127, 181, 194, 255, 53, 59, 25, 40, 57, 240, 233, 63, 125, 85, 12, 210, 250, 193, 208, 154, 234, 113, 252, 64, 98, 26, 224, 155, 55, 80, 214, 229, 183, 104, 4, 2, 240, 245, 178, 104, 186, 232, 211, 4, 25, 26, 78, 177, 48, 133, 58, 142, 94, 40, 102, 14, 147, 57, 194, 186, 130, 159, 138, 1, 125, 199, 250, 127, 144, 150, 72, 72, 218, 246, 143, 126, 65, 58, 212, 107, 245, 51, 136, 236, 248, 239, 65, 144, 208, 234, 72, 245, 214, 104, 43, 175, 18, 244, 191, 167, 38, 20, 11, 238, 13, 212, 57, 43, 51, 251, 82, 200, 80, 10, 17, 254, 150, 208, 118, 190, 150, 253, 4, 17, 106, 131, 3, 234, 168, 30, 23, 13, 26, 133, 133, 94, 229, 243, 194, 157, 115, 129, 190, 139, 70, 214, 83, 43, 255, 211, 100, 147, 198, 43, 203, 223, 255, 46, 52, 15, 35, 228, 215, 250, 90, 17, 51, 240, 35, 66, 187, 116, 115, 79, 23, 63, 9, 105, 159, 67, 161, 61, 46, 197, 47, 119, 158, 180, 240, 77, 127, 188, 113, 25, 133, 204, 176, 120, 160, 57, 58, 24, 239, 16, 142, 35, 44, 130, 87, 249, 52, 180, 130, 126, 10, 73, 1, 112, 247, 165, 25, 95, 55, 117, 205, 131, 177, 112, 11, 84, 145, 72, 25, 184, 122, 198, 4, 95, 40, 70, 122, 162, 215, 62, 202, 132, 183, 205, 162, 11, 152, 214, 241, 195, 20, 151, 163, 125, 228, 96, 40, 244, 176, 28, 223, 162, 209, 101, 166, 147, 53, 229, 115, 166, 254, 219, 113, 30, 183, 43, 40, 224, 64, 189, 191, 101, 169, 224, 4, 194, 84, 213, 198, 154, 40, 88, 158, 103, 86, 26, 59, 114, 46, 61, 144, 19, 99, 162, 25, 142, 74, 126, 158, 41, 85, 159, 187, 202, 99, 178, 178, 164, 157, 59, 189, 131, 217, 233, 181, 249, 91, 160, 225, 222, 14, 253, 90, 98, 254, 147, 238, 143, 36, 90, 37, 74, 177, 184, 158, 89, 66, 157, 237, 12, 218, 73, 70, 114, 15, 62, 122, 77, 40, 197, 116, 179, 3, 195, 230, 83, 185, 200, 92, 230, 74, 131, 18, 210, 17, 203, 84, 104, 78, 198, 142, 248, 254, 69, 47, 44, 73, 183, 171, 76, 203, 163, 241, 6, 28, 93, 238, 70, 80, 174, 191, 77, 120, 19, 235, 63, 122, 16, 187, 238, 252, 189, 213, 98, 31, 133, 58, 68, 235, 60, 104, 110, 174, 150, 112, 156, 49, 84, 236, 249, 254, 31, 169, 244, 2, 5, 184, 218, 4, 95, 121, 70, 78, 91, 82, 229, 101, 173, 20, 99, 109, 131, 246, 206, 51, 123, 145, 211, 249, 171, 165, 57, 222, 193, 8, 28, 119, 191, 232, 99, 12, 203, 66, 229, 186, 227, 95, 31, 15, 193, 109, 90, 35, 48, 217, 124, 210, 87, 10, 101, 132, 173, 208, 111, 137, 38, 5, 4, 244, 21, 125, 193, 225, 4, 143, 110, 90, 80, 166, 237, 215, 167, 165, 233, 109, 0, 228, 153, 207, 22, 254, 110, 109, 2, 72, 41, 245, 187, 141, 142, 182, 44, 201, 127, 119, 135, 84, 72, 119, 101, 112, 156, 97, 70, 34, 226, 129, 245, 129, 164, 89, 187, 94, 37, 167, 70, 116, 151, 240, 168, 158, 178, 238, 77, 80, 16, 242, 217, 38, 162, 169, 47, 5, 165, 67, 10, 167, 59, 50, 71, 247, 148, 12, 57, 77, 23, 236, 173, 67, 187, 241, 212, 37, 207, 26, 52, 98, 169, 217, 180, 220, 226, 209, 160, 243, 18, 43, 77, 160, 36, 237, 239, 138, 217, 150, 25, 108, 203, 115, 168, 204, 99, 210, 82, 1, 63, 191, 223, 198, 149, 172, 60, 102, 233, 173, 147, 193, 79, 184, 60, 126, 64, 172, 157, 205, 170, 8, 120, 200, 208, 96, 92, 129, 145, 112, 8, 90, 236, 82, 205, 55, 147, 12, 144, 88, 4, 39, 99, 176, 149, 64, 189, 111, 11, 175, 1, 90, 164, 1, 156, 196, 12, 16, 203, 20, 134, 85, 70, 135, 185, 156, 141, 213, 95, 94, 29, 199, 178, 29, 50, 166, 84, 44, 200, 131, 12, 251, 136, 150, 175, 189, 39, 198, 148, 33, 131, 201, 105, 240, 52, 108, 34, 193, 247, 9, 172, 14, 216, 165, 107, 46, 162, 203, 75, 157, 240, 37, 63, 211, 216, 28, 62, 117, 191, 51, 226, 130, 146, 134, 73, 78, 120, 33, 72, 76, 96, 150, 38, 91, 138, 232, 62, 138, 122, 23, 200, 41, 129, 107, 225, 83, 28, 67, 235, 69, 66, 164, 127, 134, 30, 29, 67, 164, 73, 38, 225, 189, 162, 198, 208, 160, 46, 56, 173, 206, 60, 53, 160, 255, 226, 28, 107, 146, 219, 169, 233, 106, 38, 118, 29, 214, 71, 33, 223, 1, 84, 73, 14, 206, 195, 38, 33, 50, 158, 200, 246, 22, 240, 246, 3, 25, 160, 12, 104, 127, 146, 116, 106, 40, 82, 209, 84, 14, 237, 225, 0, 21, 250, 32, 197, 154, 227, 23, 52, 227, 247, 199, 27, 120, 201, 163, 69, 167, 155, 191, 49, 229, 241, 26, 120, 4, 77, 15, 100, 176, 148, 240, 37, 177, 224, 143, 102, 130, 1, 167, 40, 246, 52, 203, 35, 52, 190, 23, 6, 170, 141, 135, 206, 110, 187, 55, 22, 6, 3, 153, 129, 34, 237, 152, 74, 192, 121, 198, 123, 94, 107, 219, 11, 37, 112, 212, 237, 104, 9, 223, 218, 153, 3, 251, 124, 116, 239, 104, 60, 132, 166, 155, 67, 55, 46, 166, 253, 143, 194, 58, 97, 168, 110, 35, 151, 119, 255, 35, 133, 39, 164, 215, 105, 23, 188, 10, 52, 37, 33, 145, 102, 114, 110, 218, 98, 21, 181, 183, 34, 136, 13, 250, 35, 56, 155, 18, 14, 195, 14, 74, 103, 70, 148, 95, 137, 169, 207, 240, 6, 106, 186, 139, 58, 9, 196, 30, 29, 145, 106, 198, 153, 116, 109, 197, 97, 177, 93, 195, 27, 73, 144, 123, 132, 136, 213, 221, 137, 66, 181, 229, 230, 41, 184, 191, 231, 194, 208, 213, 24, 116, 45, 127, 119, 191, 96, 142, 197, 187, 171, 144, 138, 143, 225, 235, 207, 111, 210, 76, 130, 18, 177, 241, 10, 38, 89, 153, 204, 255, 251, 118, 98, 23, 25, 68, 134, 29, 28, 139, 161, 38, 153, 228, 57, 197, 238, 178, 185, 93, 205, 174, 110, 77, 212, 70, 36, 6, 236, 147, 1, 143, 68, 254, 223, 56, 214, 138, 63, 216, 55, 233, 40, 62, 15, 90, 203, 65, 34, 160, 148, 170, 78, 32, 160, 223, 128, 235, 100, 43, 99, 248, 72, 177, 243, 95, 102, 67, 119, 93, 228, 2, 141, 61, 89, 205, 201, 43, 4, 166, 149, 102, 255, 111, 155, 67, 168, 159, 160, 130, 234, 168, 13, 142, 254, 233, 204, 137, 224, 160, 53, 12, 46, 9, 47, 168, 211, 118, 189, 112, 230, 171, 119, 171, 9, 182, 70, 194, 34, 41, 26, 78, 135, 20, 167, 83, 37, 7, 162, 112, 255, 149, 101, 1, 77, 114, 69, 136, 103, 59, 206, 1, 228, 85, 215, 84, 225, 137, 53, 35, 12, 165, 203, 119, 173, 230, 167, 29, 57, 73, 173, 62, 114, 4, 35, 248, 115, 108, 97, 194, 19, 3, 62, 143, 205, 188, 2, 247, 170, 100, 253, 32, 81, 106, 131, 35, 11, 168, 223, 124, 128, 138, 77, 134, 65, 105, 101, 220, 62, 84, 1, 72, 61, 204, 204, 76, 51, 42, 27, 185, 225, 7, 18, 222, 22, 188, 164, 23, 175, 5, 81, 63, 222, 190, 190, 202, 205, 202, 189, 136, 77, 105, 76, 137, 55, 12, 73, 67, 52, 90, 83, 148, 222, 162, 179, 186, 1, 156, 221, 216, 34, 89, 200, 157, 189, 68, 167, 71, 147, 68, 58, 177, 189, 170, 144, 145, 28, 104, 88, 106, 105, 3, 28, 137, 43, 58, 27, 10, 144, 45, 123, 158, 42, 34, 98, 173, 95, 199, 5, 98, 26, 221, 189, 38, 83, 138, 12, 90, 186, 3, 38, 231, 21, 76, 235, 114, 14, 16, 195, 43, 110, 218, 194, 119, 69, 143, 165, 206, 83, 148, 171, 19, 186, 102, 32, 128, 181, 106, 0, 112, 80, 91, 46, 254, 40, 153, 235, 147, 115, 244, 108, 117, 239, 5, 236, 2, 117, 104, 201, 110, 24, 123, 179, 124, 67, 10, 248, 73, 106, 205, 36, 164, 175, 178, 13, 75, 162, 195, 111, 238, 228, 60, 126, 138, 214, 211, 130, 82, 63, 26, 167, 147, 240, 92, 21, 131, 12, 215, 196, 78, 240, 87, 192, 85, 219, 147, 215, 134, 48, 167, 237, 102, 188, 85, 42, 223, 238, 227, 200, 202, 253, 192, 157, 224, 214, 47, 178, 8, 240, 47, 29, 183, 180, 5, 164, 95, 104, 224, 100, 55, 78, 20, 192, 127, 132, 148, 138, 136, 73, 217, 221, 83, 42, 253, 205, 159, 3, 117, 190, 133, 185, 232, 57, 247, 24, 205, 10, 109, 236, 248, 248, 116, 3, 221, 159, 25, 46, 65, 92, 81, 116, 68, 55, 11, 168, 174, 252, 126, 13, 66, 199, 33, 142, 254, 234, 192, 185, 47, 181, 147, 11, 238, 119, 194, 222, 178, 39, 170, 174, 104, 238, 6, 80, 202, 212, 198, 48, 75, 63, 150, 125, 46, 135, 215, 209, 206, 128, 26, 193, 27, 217, 88, 234, 118, 61, 177, 192, 162, 59, 112, 151, 107, 157, 214, 175, 52, 248, 170, 210, 73, 160, 5, 3, 56, 139, 123, 237, 172, 247, 36, 229, 66, 142, 128, 211, 28, 32, 171, 75, 163, 102, 106, 172, 93, 135, 9, 215, 244, 148, 227, 62, 58, 99, 117, 171, 59, 127, 161, 124, 212, 72, 122, 103, 107, 123, 68, 126, 140, 31, 42, 247, 80, 86, 32, 122, 60, 67, 218, 67, 97, 218, 181, 103, 230, 209, 204, 44, 137, 210, 101, 204, 59, 113, 107, 43, 7, 197, 153, 137, 134, 84, 80, 222, 138, 3, 15, 30, 3, 82, 141, 161, 200, 202, 169, 37, 233, 19, 173, 6, 97, 233, 174, 56, 204, 65, 46, 110, 94, 229, 229, 144, 4, 168, 84, 15, 221, 49, 195, 104, 144, 163, 48, 184, 192, 253, 189, 111, 28, 169, 148, 137, 75, 44, 93, 135, 53, 47, 111, 132, 195, 113, 13, 63, 66, 1, 71, 89, 210, 147, 41, 231, 122, 81, 193, 24, 166, 234, 230, 172, 95, 187, 164, 179, 72, 108, 246, 130, 107, 102, 110, 122, 186, 66, 27, 59, 10, 34, 123, 144, 62, 8, 222, 146, 1, 223, 25, 165, 216, 18, 157, 1, 149, 217, 89, 170, 89, 15, 242, 16, 143, 67, 133, 185, 92, 100, 44, 93, 156, 76, 171, 203, 190, 51, 89, 37, 198, 10, 27, 184, 228, 104, 246, 13, 145, 27, 83, 70, 99, 26, 152, 30, 204, 222, 117, 99, 135, 115, 40, 186, 194, 187, 143, 68, 102, 82, 34, 156, 105, 103, 95, 10, 56, 214, 46, 187, 221, 98, 112, 174, 51, 254, 156, 83, 124, 184, 192, 155, 222, 220, 3, 31, 253, 42, 136, 196, 175, 91, 186, 160, 110, 212, 25, 214, 77, 71, 33, 194, 166, 115, 19, 126, 108, 113, 27, 70, 75, 214, 186, 74, 133, 151, 246, 47, 81, 98, 159, 57, 92, 254, 26, 0, 57, 141, 121, 172, 127, 129, 110, 174, 47, 41, 218, 66, 243, 143, 171, 27, 253, 23, 59, 243, 14, 40, 80, 197, 255, 93, 160, 13, 208, 177, 216, 21, 171, 25, 146, 81, 183, 36, 29, 71, 184, 15, 173, 188, 97, 166, 136, 180, 56, 70, 73, 177, 120, 180, 8, 59, 88, 154, 165, 225, 218, 12, 133, 187, 134, 219, 95, 213, 24, 10, 249, 186, 14, 7, 227, 16, 17, 144, 189, 164, 106, 23, 54, 61, 42, 0, 70, 91, 179, 118, 131, 8, 17, 143, 210, 247, 244, 187, 165, 200, 181, 85, 60, 242, 208, 88, 136, 160, 191, 178, 231, 173, 213, 229, 87, 119, 99, 164, 6, 112, 5, 46, 120, 68, 227, 83, 200, 124, 181, 205, 91, 24, 4, 16, 67, 15, 140, 13, 147, 252, 224, 119, 74, 213, 121, 59, 247, 112, 225, 154, 116, 69, 2, 53, 13, 223, 164, 38, 35, 6, 242, 96, 201, 81, 29, 190, 10, 42, 137, 34, 126, 196, 142, 234, 253, 215, 133, 248, 179, 140, 42, 242, 156, 127, 61, 68, 170, 166, 126, 114, 20, 66, 18, 11, 154, 229, 38, 29, 80, 117, 165, 196, 230, 143, 79, 72, 187, 14, 90, 216, 185, 70, 61, 228, 109, 156, 27, 88, 17, 32, 114, 120, 26, 118, 42, 216, 143, 58, 238, 203, 121, 182, 135, 159, 255, 213, 43, 136, 243, 248, 69, 53, 236, 157, 14, 6, 60, 179, 151, 10, 1, 220, 21, 221, 70, 54, 138, 35, 24, 59, 201, 88, 116, 192, 192, 222, 232, 233, 223, 128, 117, 75, 151, 51, 222, 133, 65, 159, 25, 209, 12, 48, 227, 89, 64, 125, 3, 169, 191, 129, 233, 71, 174, 102, 235, 66, 188, 140, 251, 159, 234, 246, 25, 99, 150, 32, 170, 101, 185, 130, 206, 98, 77, 108, 46, 48, 166, 219, 28, 97, 144, 51, 176, 159, 98, 67, 139, 41, 159, 245, 73, 190, 35, 60, 175, 98, 97, 70, 60, 227, 64, 89, 194, 210, 17, 93, 45, 121, 204, 71, 45, 248, 187, 200, 7, 143, 75, 35, 26, 252, 195, 163, 127, 12, 177, 41, 159, 86, 193, 30, 47, 72, 219, 65, 28, 179, 69, 51, 122, 61, 180, 9, 105, 77, 115, 65, 212, 67, 71, 34, 234, 52, 142, 191, 254, 248, 65, 169, 118, 49, 72, 214, 114, 17, 196, 193, 105, 43, 12, 151, 11, 228, 145, 186, 243, 38, 136, 216, 198, 217, 245, 224, 220, 103, 169, 205, 38, 134, 157, 107, 196, 58, 102, 175, 3, 5, 235, 42, 160, 226, 196, 105, 66, 87, 29, 37, 96, 82, 58, 201, 81, 12, 70, 182, 255, 218, 54, 22, 107, 210, 193, 40, 211, 87, 152, 189, 67, 145, 216, 141, 36, 152, 9, 97, 69, 105, 133, 213, 110, 239, 218, 134, 36, 138, 42, 209, 31, 99, 113, 75, 144, 252, 46, 42, 3, 18, 217, 245, 86, 239, 49, 196, 186, 20, 50, 100, 122, 180, 253, 34, 165, 146, 71, 5, 134, 76, 192, 157, 119, 2, 142, 99, 70, 161, 217, 81, 59, 171, 19, 10, 131, 208, 77, 4, 226, 5, 192, 235, 37, 92, 157, 122, 24, 110, 194, 171, 216, 104, 145, 47, 156, 67, 67, 36, 66, 121, 30, 157, 102, 140, 36, 32, 10, 56, 173, 33, 119, 229, 45, 40, 96, 110, 223, 139, 70, 200, 87, 232, 97, 88, 183, 120, 152, 149, 242, 6, 247, 96, 39, 173, 93, 11, 183, 159, 218, 65, 220, 205, 7, 167, 65, 128, 118, 79, 15, 227, 18, 235, 53, 54, 25, 129, 64, 233, 173, 101, 209, 125, 59, 100, 46, 250, 92, 204, 8, 97, 206, 114, 121, 157, 155, 250, 154, 67, 231, 106, 203, 66, 188, 226, 131, 111, 235, 180, 136, 107, 102, 60, 10, 76, 20, 238, 199, 149, 103, 27, 233, 175, 154, 129, 63, 18, 86, 40, 78, 136, 101, 176, 176, 18, 30, 143, 157, 81, 129, 172, 93, 107, 73, 58, 49, 61, 42, 56, 127, 2, 255, 148, 215, 190, 102, 87, 228, 100, 217, 109, 25, 20, 130, 67, 231, 138, 215, 12, 160, 83, 80, 242, 87, 250, 65, 244, 102, 4, 6, 58, 152, 116, 154, 192, 49, 176, 170, 95, 122, 159, 55, 119, 162, 66, 11, 96, 183, 62, 247, 28, 80, 99, 198, 112, 245, 7, 200, 149, 171, 152, 127, 219, 23, 134, 232, 213, 29, 194, 7, 168, 180, 75, 91, 223, 255, 167, 153, 213, 89, 207, 253, 67, 39, 14, 215, 5, 27, 56, 175, 192, 187, 118, 124, 240, 21, 153, 186, 125, 114, 74, 89, 246, 203, 226, 84, 192, 69, 191, 109, 251, 17, 234, 237, 98, 66, 253, 103, 32, 129, 127, 155, 43, 2, 111, 141, 248, 215, 14, 197, 62, 42, 206, 178, 167, 176, 149, 157, 131, 135, 215, 23, 198, 99, 42, 23, 78, 105, 114, 103, 96, 238, 216, 155, 71, 78, 163, 41, 203, 224, 164, 180, 161, 100, 69, 240, 36, 232, 205, 147, 35, 45, 73, 82, 128, 22, 84, 171, 124, 54, 95, 179, 227, 184, 68, 5, 233, 85, 159, 169, 139, 179, 48, 251, 58, 158, 91, 209, 45, 83, 138, 49, 239, 222, 200, 158, 28, 244, 26, 143, 111, 66, 46, 19, 105, 175, 250, 31, 151, 141, 135, 68, 173, 64, 74, 115, 8, 207, 55, 174, 155, 100, 104, 41, 62, 79, 159, 147, 191, 43, 171, 92, 58, 218, 220, 121, 23, 113, 160, 94, 149, 248, 171, 149, 235, 101, 229, 164, 210, 203, 188, 165, 63, 166, 20, 70, 144, 254, 121, 65, 126, 84, 13, 199, 197, 48, 50, 254, 199, 103, 102, 9, 148, 101, 182, 204, 51, 171, 232, 86, 205, 128, 181, 58, 241, 37, 184, 208, 244, 116, 198, 83, 128, 68, 37, 165, 146, 135, 151, 190, 159, 0, 47, 156, 251, 108, 48, 242, 124, 3, 43, 210, 78, 39, 174, 13, 74, 128, 252, 75, 22, 112, 73, 18, 145, 26, 94, 219, 135, 21, 9, 220, 117, 199, 10, 169, 179, 108, 214, 253, 79, 78, 142, 81, 50, 215, 172, 163, 187, 6, 12, 15, 126, 19, 249, 72, 191, 135, 124, 228, 52, 153, 11, 226, 210, 147, 91, 241, 21, 12, 41, 116, 177, 110, 248, 236, 51, 91, 224, 21, 112, 28, 1, 140, 221, 71, 202, 61, 229, 180, 180, 80, 194, 19, 129, 52, 53, 135, 253, 189, 56, 2, 39, 158, 117, 58, 171, 44, 240, 230, 62, 38, 40, 228, 165, 26, 57, 8, 69, 26, 46, 173, 180, 253, 129, 97, 64, 236, 46, 136, 166, 41, 187, 37, 43, 94, 185, 236, 192, 68, 77, 62, 161, 190, 81, 230, 147, 156, 136, 129, 197, 103, 80, 26, 16, 134, 99, 119, 210, 94, 187, 61, 6, 252, 217, 88, 124, 117, 130, 29, 225, 99, 230, 139, 89, 57, 51, 47, 244, 72, 210, 13, 144, 92, 118, 141, 113, 151, 32, 35, 114, 160, 134, 155, 132, 203, 139, 72, 239, 191, 99, 89, 227, 224, 176, 212, 193, 154, 144, 210, 192, 119, 66, 158, 120, 177, 15, 216, 70, 160, 95, 74, 252, 28, 179, 66, 161, 232, 29, 227, 217, 175, 177, 0, 90, 51, 4, 2, 87, 229, 8, 59, 72, 250, 77, 172, 187, 244, 174, 1, 45, 155, 100, 128, 145, 144, 167, 245, 18, 104, 65, 223, 15, 215, 7, 75, 238, 72, 114, 62, 241, 18, 169, 232, 251, 178, 132, 248, 182, 214, 142, 233, 29, 248, 180, 100, 27, 30, 228, 190, 148, 1, 207, 197, 42, 56, 93, 238, 88, 232, 3, 18, 25, 229, 179, 192, 140, 46, 236, 104, 36, 67, 104, 156, 147, 200, 179, 130, 142, 171, 63, 65, 171, 51, 97, 85, 235, 73, 8, 60, 82, 87, 102, 216, 70, 233, 255, 92, 84, 17, 169, 41, 133, 108, 194, 206, 244, 184, 106, 163, 23, 192, 60, 184, 30, 1, 75, 201, 149, 100, 164, 60, 162, 167, 123, 149, 194, 133, 133, 3, 194, 203, 204, 172, 89, 44, 32, 189, 22, 114, 56, 116, 15, 66, 0, 82, 244, 70, 80, 224, 212, 248, 82, 199, 183, 16, 238, 199, 224, 251, 44, 203, 158, 210, 151, 162, 217, 31, 110, 143, 101, 2, 109, 43, 24, 204, 11, 196, 5, 195, 120, 49, 56, 202, 251, 224, 216, 137, 215, 180, 34, 58, 163, 226, 185, 64, 156, 40, 143, 35, 160, 220, 254, 255, 95, 86, 157, 85, 38, 253, 36, 105, 69, 210, 42, 31, 221, 28, 239, 235, 43, 179, 144, 221, 240, 194, 213, 46, 215, 206, 20, 12, 220, 7, 158, 112, 230, 96, 176, 42, 69, 84, 121, 42, 153, 7, 127, 152, 88, 189, 152, 180, 167, 198, 7, 43, 60, 166, 202, 15, 95, 134, 219, 63, 58, 45, 225, 220, 45, 66, 79, 133, 191, 221, 248, 27, 230, 19, 208, 162, 89, 54, 233, 233, 106, 55, 111, 232, 9, 21, 164, 173, 192, 133, 60, 176, 188, 196, 254, 24, 238, 64, 253, 141, 237, 230, 170, 113, 71, 35, 141, 163, 0, 197, 184, 134, 246, 53, 2, 197, 120, 151, 140, 17, 176, 230, 32, 52, 135, 239, 108, 13, 224, 77, 247, 86, 118, 71, 117, 208, 79, 145, 246, 154, 136, 185, 221, 176, 169, 188, 178, 160, 70, 143, 192, 176, 109, 249, 240, 210, 134, 44, 134, 206, 164, 135, 195, 214, 11, 68, 217, 200, 227, 174, 215, 113, 78, 78, 195, 33, 247, 229, 208, 178, 169, 53, 142, 204, 135, 58, 252, 210, 86, 254, 225, 71, 28, 43, 4, 52, 246, 235, 217, 152, 169, 111, 56, 131, 41, 1, 101, 244, 186, 243, 239, 73, 172, 131, 235, 62, 87, 219, 116, 93, 183, 63, 130, 139, 3, 9, 19, 152, 232, 116, 222, 54, 171, 175, 100, 244, 243, 190, 231, 215, 56, 168, 53, 201, 155, 250, 102, 64, 69, 96, 218, 173, 249, 254, 143, 253, 184, 14, 117, 85, 208, 29, 57, 21, 2, 75, 7, 58, 204, 90, 41, 253, 15, 30, 123, 177, 96, 86, 19, 228, 169, 14, 230, 145, 188, 167, 224, 221, 228, 51, 222, 81, 12, 136, 101, 42, 108, 145, 7, 154, 33, 121, 165, 1, 101, 118, 55, 144, 233, 68, 142, 215, 2, 229, 91, 24, 80, 98, 17, 196, 53, 49, 73, 111, 174, 34, 170, 136, 37, 249, 84, 65, 16, 62, 239, 69, 188, 4, 253, 63, 24, 201, 218, 173, 250, 92, 109, 66, 158, 23, 78, 204, 170, 128, 217, 204, 192, 223, 162, 254, 188, 24, 197, 12, 137, 48, 68, 115, 223, 192, 137, 132, 48, 105, 120, 107, 232, 222, 135, 66, 79, 160, 83, 121, 88, 230, 73, 125, 2, 121, 209, 100, 201, 117, 198, 22, 196, 216, 157, 107, 13, 43, 74, 93, 108, 73, 56, 169, 22, 124, 68, 63, 97, 237, 36, 243, 22, 192, 226, 82, 33, 147, 242, 95, 232, 105, 178, 103, 154, 22, 200, 185, 53, 40, 185, 17, 210, 195, 180, 195, 50, 53, 121, 84, 143, 22, 126, 183, 80, 137, 214, 198, 139, 245, 39, 116, 59, 197, 231, 230, 151, 81, 164, 191, 149, 121, 249, 40, 6, 76, 67, 174, 231, 30, 113, 87, 252, 239, 3, 76, 117, 209, 5, 148, 237, 162, 188, 87, 190, 58, 144, 223, 16, 76, 56, 50, 156, 253, 142, 29, 191, 215, 14, 168, 182, 192, 207, 88, 162, 128, 139, 41, 94, 37, 112, 108, 2, 7, 106, 129, 184, 254, 71, 45, 10, 38, 209, 165, 43, 192, 132, 149, 149, 105, 233, 219, 253, 34, 191, 180, 238, 1, 98, 196, 191, 32, 62, 241, 146, 248, 215, 5, 43, 65, 22, 24, 16, 243, 51, 138, 75, 207, 251, 24, 153, 111, 155, 149, 136, 5, 9, 158, 25, 201, 194, 222, 126, 221, 232, 38, 176, 12, 69, 30, 62, 237, 136, 73, 179, 208, 50, 6, 54, 250, 96, 0, 166, 112, 144, 60, 58, 200, 108, 199, 156, 169, 30, 231, 39, 239, 79, 136, 89, 67, 173, 92, 192, 245, 142, 198, 77, 96, 242, 188, 238, 54, 163, 155, 134, 242, 35, 222, 15, 85, 73, 21, 12, 232, 156, 177, 193, 73, 127, 208, 200, 152, 222, 145, 51, 31, 71, 225, 143, 183, 141, 132, 20, 133, 192, 39, 129, 63, 188, 183, 33, 22, 203, 86, 68, 234, 174, 72, 24, 20, 51, 91, 92, 137, 9, 83, 145, 130, 215, 215, 225, 72, 74, 155, 246, 255, 100, 187, 91, 56, 159, 33, 89, 52, 51, 77, 38, 101, 185, 18, 28, 75, 204, 29, 80, 121, 125, 160, 190, 27, 72, 87, 169, 248, 59, 72, 55, 77, 92, 176, 231, 24, 80, 6, 175, 183, 97, 131, 1, 236, 231, 114, 112, 4, 108, 149, 151, 213, 225, 223, 103, 215, 150, 104, 84, 128, 132, 240, 98, 86, 56, 64, 22, 204, 172, 220, 43, 175, 27, 63, 176, 72, 227, 88, 39, 109, 191, 248, 183, 245, 39, 49, 32, 44, 196, 0, 17, 79, 247, 38, 121, 102, 238, 145, 88, 178, 95, 179, 119, 72, 199, 242, 21, 177, 0, 125, 61, 206, 50, 101, 163, 75, 255, 134, 37, 122, 253, 11, 176, 161, 4, 197, 76, 187, 202, 63, 220, 147, 151, 40, 202, 174, 244, 93, 180, 145, 95, 74, 246, 228, 141, 160, 78, 216, 67, 210, 250, 186, 34, 166, 153, 136, 119, 104, 32, 5, 119, 186, 179, 219, 27, 29, 38, 162, 9, 144, 14, 24, 96, 238, 34, 109, 14, 99, 207, 229, 59, 98, 81, 140, 94, 122, 145, 149, 220, 111, 211, 158, 161, 253, 231, 225, 30, 15, 115, 210, 163, 111, 244, 165, 236, 29, 37, 32, 242, 95, 122, 174, 46, 155, 249, 190, 66, 157, 172, 228, 92, 68, 29, 198, 53, 158, 17, 176, 20, 3, 120, 192, 60, 160, 249, 102, 247, 67, 131, 64, 39, 99, 101, 24, 236, 165, 83, 227, 51, 178, 32, 78, 41, 181, 231, 196, 33, 167, 86, 244, 238, 142, 87, 255, 0, 223, 19, 166, 87, 162, 1, 145, 151, 60, 191, 11, 73, 253, 199, 156, 76, 189, 55, 223, 41, 2, 170, 227, 86, 145, 19, 24, 210, 174, 114, 107, 2, 178, 236, 196, 140, 59, 64, 137, 172, 20, 114, 1, 227, 127, 222, 134, 158, 209, 30, 184, 115, 81, 1, 85, 240, 125, 181, 110, 33, 157, 206, 36, 42, 243, 118, 248, 247, 16, 192, 133, 22, 236, 86, 86, 72, 151, 45, 212, 129, 239, 67, 198, 75, 206, 228, 65, 249, 216, 65, 119, 179, 114, 8, 3, 69, 114, 134, 246, 66, 160, 180, 189, 11, 246, 122, 141, 90, 128, 116, 248, 212, 56, 113, 5, 107, 254, 0, 75, 107, 12, 216, 144, 83, 170, 143, 175, 58, 35, 172, 40, 208, 138, 250, 177, 39, 199, 0, 41, 248, 212, 245, 149, 91, 172, 159, 87, 112, 139, 54, 127, 125, 116, 200, 164, 151, 108, 55, 55, 163, 239, 245, 131, 53, 64, 129, 124, 15, 195, 192, 255, 18, 41, 146, 239, 86, 56, 238, 156, 128, 131, 181, 124, 9, 47, 114, 4, 148, 21, 212, 169, 195, 180, 118, 77, 175, 245, 255, 27, 16, 125, 56, 97, 130, 237, 221, 243, 165, 247, 201, 192, 76, 220, 62, 115, 120, 235, 87, 65, 176, 20, 69, 161, 179, 253, 30, 135, 150, 176, 137, 173, 116, 127, 81, 53, 199, 210, 99, 213, 93, 17, 44, 80, 237, 195, 3, 48, 143, 78, 121, 93, 17, 60, 223, 167, 174, 244, 49, 17, 193, 196, 237, 144, 253, 232, 95, 5, 41, 173, 44, 68, 253, 66, 234, 190, 109, 28, 97, 124, 235, 75, 255, 24, 234, 143, 40, 167, 174, 246, 187, 194, 105, 198, 29, 192, 45, 32, 183, 122, 16, 137, 83, 235, 218, 231, 93, 115, 236, 159, 166, 220, 250, 148, 207, 159, 104, 208, 141, 143, 76, 19, 245, 161, 44, 229, 10, 244, 112, 95, 154, 131, 16, 69, 94, 255, 41, 116, 249, 77, 115, 228, 20, 247, 226, 20, 213, 161, 93, 78, 72, 63, 114, 196, 36, 98, 66, 235, 58, 142, 255, 229, 200, 109, 136, 38, 165, 90, 236, 41, 162, 162, 223, 146, 233, 70, 249, 30, 215, 8, 247, 190, 216, 115, 78, 213, 51, 219, 46, 97, 162, 0, 19, 112, 40, 132, 239, 251, 164, 42, 94, 148, 117, 166, 57, 9, 161, 179, 76, 180, 17, 81, 219, 196, 226, 55, 120, 184, 22, 134, 194, 141, 87, 103, 205, 38, 32, 78, 49, 16, 57, 31, 17, 71, 66, 230, 97, 89, 57, 159, 45, 232, 114, 74, 114, 51, 235, 127, 9, 132, 40, 101, 190, 240, 156, 195, 8, 177, 6, 238, 26, 112, 59, 163, 195, 208, 226, 87, 7, 227, 188, 136, 108, 221, 51, 204, 60, 133, 217, 18, 119, 207, 243, 162, 214, 201, 175, 32, 33, 107, 211, 34, 128, 249, 131, 78, 73, 208, 239, 102, 212, 77, 15, 39, 144, 148, 78, 199, 244, 84, 244, 139, 252, 254, 63, 200, 227, 181, 245, 27, 46, 45, 96, 148, 193, 48, 33, 149, 188, 101, 86, 32, 64, 253, 202, 207, 140, 252, 158, 198, 183, 234, 210, 25, 56, 249, 86, 196, 101, 71, 149, 148, 128, 155, 251, 31, 59, 33, 53, 134, 102, 5, 166, 18, 108, 19, 99, 116, 85, 104, 93, 127, 246, 239, 89, 48, 37, 89, 86, 51, 167, 225, 19, 143, 237, 113, 5, 15, 141, 228, 117, 128, 230, 69, 242, 164, 78, 206, 83, 221, 44, 193, 193, 79, 212, 160, 126, 214, 186, 123, 151, 249, 93, 243, 182, 50, 255, 70, 37, 34, 111, 193, 95, 93, 1, 107, 112, 116, 111, 189, 187, 112, 148, 63, 224, 202, 88, 174, 227, 211, 72, 115, 107, 196, 108, 197, 47, 237, 255, 200, 176, 212, 239, 51, 137, 223, 132, 65, 206, 141, 218, 121, 9, 119, 68, 30, 19, 101, 80, 171, 159, 221, 41, 189, 246, 132, 51, 230, 140, 90, 13, 122, 120, 68, 193, 193, 156, 93, 165, 38, 187, 185, 74, 146, 109, 105, 180, 190, 39, 20, 134, 59, 175, 124, 66, 48, 134, 230, 151, 165, 143, 185, 80, 196, 107, 1, 53, 134, 153, 76, 229, 10, 208, 234, 184, 87, 255, 149, 38, 140, 243, 72, 71, 12, 192, 38, 125, 27, 33, 62, 148, 244, 129, 64, 44, 88, 105, 255, 105, 22, 122, 181, 100, 163, 8, 184, 43, 239, 79, 113, 3, 247, 178, 111, 221, 139, 190, 125, 151, 246, 25, 38, 90, 42, 65, 165, 143, 123, 203, 176, 101, 85, 243, 168, 54, 45, 133, 124, 150, 88, 83, 13, 161, 51, 185, 124, 185, 47, 13, 49, 205, 28, 42, 148, 156, 231, 142, 234, 212, 154, 174, 136, 123, 201, 24, 252, 200, 187, 250, 200, 87, 8, 45, 185, 114, 197, 34, 127, 96, 113, 179, 202, 102, 67, 135, 93, 180, 227, 201, 60, 12, 178, 138, 4, 66, 53, 156, 68, 1, 154, 129, 11, 4, 34, 8, 87, 90, 252, 243, 147, 73, 192, 30, 76, 19, 15, 108, 33, 74, 37, 247, 241, 192, 87, 118, 3, 96, 65, 37, 109, 37, 43, 73, 73, 16, 47, 14, 10, 250, 225, 13, 220, 2, 56, 117, 131, 86, 3, 255, 204, 192, 252, 3, 132, 126, 110, 66, 106, 23, 92, 60, 131, 173, 129, 196, 93, 230, 9, 52, 224, 160, 43, 94, 111, 62, 216, 191, 104, 76, 171, 117, 23, 199, 233, 73, 233, 213, 209, 228, 179, 103, 40, 125, 56, 104, 37, 128, 170, 12, 82, 217, 75, 95, 87, 248, 149, 161, 20, 142, 13, 83, 58, 139, 248, 48, 114, 117, 48, 235, 17, 31, 164, 197, 135, 52, 112, 36, 127, 52, 85, 46, 114, 124, 126, 72, 115, 209, 249, 34, 65, 165, 158, 207, 254, 234, 236, 45, 176, 96, 230, 244, 90, 50, 183, 91, 8, 233, 220, 92, 141, 224, 50, 176, 92, 62, 123, 144, 166, 20, 193, 143, 228, 88, 13, 32, 141, 196, 172, 103, 67, 155, 156, 47, 243, 53, 99, 204, 22, 26, 62, 12, 222, 9, 112, 14, 119, 69, 82, 66, 204, 51, 35, 159, 221, 45, 235, 78, 212, 18, 242, 181, 228, 17, 3, 164, 249, 205, 44, 249, 82, 162, 47, 101, 175, 4, 185, 16, 67, 248, 162, 112, 130, 68, 141, 72, 171, 2, 7, 118, 143, 72, 170, 246, 164, 126, 233, 82, 40, 148, 93, 84, 162, 214, 9, 50, 217, 136, 141, 44, 149, 131, 106, 171, 19, 113, 97, 86, 181, 241, 48, 144, 66, 65, 96, 248, 72, 232, 28, 142, 205, 129, 73, 66, 177, 248, 32, 223, 239, 194, 190, 9, 38, 171, 72, 44, 26, 159, 144, 21, 77, 120, 186, 12, 214, 16, 41, 153, 112, 244, 30, 232, 160, 197, 198, 14, 247, 135, 218, 22, 148, 1, 37, 97, 181, 78, 101, 186, 171, 62, 13, 196, 50, 152, 179, 104, 127, 151, 77, 69, 192, 199, 127, 135, 205, 128, 131, 24, 153, 136, 157, 194, 0, 87, 92, 73, 121, 73, 150, 86, 137, 209, 56, 143, 180, 100, 74, 96, 78, 73, 21, 117, 200, 138, 86, 165, 125, 125, 180, 207, 4, 249, 61, 252, 18, 25, 246, 129, 95, 213, 77, 86, 250, 157, 143, 90, 249, 213, 145, 67, 175, 146, 73, 252, 212, 1, 204, 177, 81, 207, 24, 185, 202, 5, 200, 66, 234, 164, 54, 124, 207, 87, 173, 140, 137, 74, 38, 175, 106, 72, 201, 188, 32, 187, 184, 132, 31, 181, 3, 159, 102, 128, 200, 16, 162, 125, 116, 81, 198, 253, 38, 144, 28, 34, 238, 154, 99, 22, 188, 248, 248, 145, 190, 60, 69, 168, 170, 14, 177, 185, 110, 20, 70, 87, 30, 97, 87, 150, 98, 208, 152, 155, 41, 54, 54, 110, 121, 240, 60, 229, 191, 55, 94, 43, 84, 163, 202, 229, 250, 203, 206, 52, 240, 176, 199, 127, 175, 104, 221, 105, 157, 53, 110, 157, 144, 149, 24, 81, 161, 51, 225, 50, 241, 201, 217, 24, 214, 27, 83, 231, 26, 161, 94, 140, 106, 51, 174, 88, 24, 27, 35, 35, 174, 180, 106, 66, 109, 87, 18, 228, 0, 227, 153, 105, 88, 88, 203, 157, 104, 187, 18, 234, 76, 199, 79, 156, 69, 100, 245, 207, 76, 44, 115, 175, 219, 160, 99, 234, 25, 56, 241, 98, 206, 74, 255, 73, 174, 150, 216, 108, 221, 212, 44, 242, 192, 92, 46, 32, 179, 140, 224, 191, 107, 4, 48, 117, 126, 156, 61, 87, 158, 89, 115, 25, 77, 239, 83, 0, 59, 251, 28, 119, 61, 102, 170, 67, 121, 118, 166, 95, 62, 230, 234, 157, 133, 100, 45, 167, 84, 255, 184, 134, 163, 98, 248, 4, 44, 210, 94, 161, 7, 178, 249, 53, 27, 135, 150, 107, 42, 122, 42, 44, 3, 10, 50, 86, 16, 180, 139, 165, 88, 93, 192, 235, 161, 69, 199, 95, 208, 1, 124, 115, 14, 193, 255, 68, 215, 75, 102, 204, 209, 181, 142, 226, 147, 159, 35, 52, 185, 137, 79, 7, 152, 140, 3, 239, 3, 155, 140, 129, 171, 17, 229, 110, 73, 204, 203, 188, 155, 168, 52, 177, 202, 108, 1, 186, 86, 72, 244, 234, 242, 182, 65, 4, 11, 8, 88, 136, 158, 239, 95, 242, 160, 97, 138, 87, 41, 181, 145, 1, 233, 46, 114, 31, 247, 73, 126, 230, 35, 232, 40, 30, 124, 71, 191, 115, 89, 27, 201, 219, 149, 188, 205, 208, 201, 167, 207, 105, 221, 144, 198, 47, 161, 43, 14, 136, 58, 165, 147, 20, 196, 159, 25, 218, 59, 18, 177, 203, 105, 84, 165, 139, 139, 241, 45, 116, 58, 185, 245, 98, 50, 81, 148, 96, 29, 126, 251, 2, 10, 213, 203, 105, 232, 8, 133, 227, 108, 83, 89, 65, 1, 239, 229, 144, 3, 162, 24, 76, 225, 176, 53, 61, 58, 112, 44, 132, 176, 4, 143, 28, 78, 225, 83, 166, 77, 200, 146, 222, 229, 151, 106, 184, 180, 233, 5, 224, 64, 212, 234, 32, 226, 132, 127, 100, 67, 129, 112, 214, 9, 37, 183, 244, 232, 41, 170, 84, 64, 65, 53, 97, 61, 32, 147, 15, 158, 123, 164, 112, 222, 233, 39, 213, 78, 221, 253, 103, 0, 177, 150, 110, 246, 77, 70, 124, 80, 144, 10, 246, 223, 244, 87, 107, 195, 157, 5, 125, 166, 203, 140, 241, 251, 157, 60, 22, 30, 94, 113, 232, 214, 0, 167, 218, 70, 186, 88, 206, 240, 218, 111, 214, 80, 36, 60, 221, 103, 25, 33, 238, 26, 196, 237, 118, 140, 199, 195, 235, 120, 86, 102, 81, 224, 22, 66, 190, 169, 70, 112, 129, 180, 216, 226, 200, 90, 220, 250, 55, 128, 131, 52, 179, 233, 5, 56, 2, 141, 33, 99, 37, 140, 33, 6, 179, 105, 177, 16, 247, 92, 241, 17, 52, 48, 18, 109, 238, 210, 30, 62, 109, 242, 96, 226, 208, 216, 200, 78, 32, 125, 210, 112, 2, 84, 1, 111, 95, 213, 20, 209, 3, 171, 146, 18] - ], - "segmentSize": null - }, - { - "encrypted": [ - [203, 131, 70, 100, 168] - ], - "iv": [42, 103, 65, 60, 245, 121, 219, 136, 76, 100, 103, 123, 151, 168, 152, 60], - "key": [24, 67, 225, 172, 137, 236, 102, 107, 215, 141, 80, 247, 175, 22, 92, 31], - "modeOfOperation": "cfb", - "plaintext": [ - [61, 218, 164, 127, 195] - ], - "segmentSize": 1 - }, - { - "encrypted": [ - [208, 208, 49, 235, 253, 89, 37, 81, 163, 125], - [163, 39, 182, 80, 5, 243, 93, 75, 155, 110] - ], - "iv": [37, 82, 59, 203, 36, 188, 72, 53, 238, 246, 249, 147, 60, 65, 31, 190], - "key": [56, 124, 194, 251, 165, 101, 13, 72, 254, 189, 213, 238, 46, 79, 29, 106], - "modeOfOperation": "cfb", - "plaintext": [ - [95, 41, 229, 212, 141, 216, 171, 5, 167, 104], - [14, 122, 86, 93, 136, 167, 8, 60, 68, 107] - ], - "segmentSize": 2 - }, - { - "encrypted": [ - [243, 195, 225, 175, 120, 18, 89, 149, 96, 181, 67, 90, 203, 108, 197], - [40, 211, 80, 97, 152, 207, 41, 205, 202, 93, 39, 180, 74, 189, 88], - [34, 134, 74, 122, 50, 73, 245, 51, 69, 255, 61, 230, 141, 71, 236] - ], - "iv": [112, 194, 194, 41, 77, 157, 143, 141, 212, 70, 93, 25, 194, 5, 1, 164], - "key": [221, 173, 39, 51, 128, 98, 2, 175, 130, 19, 247, 167, 48, 43, 190, 87], - "modeOfOperation": "cfb", - "plaintext": [ - [204, 218, 20, 133, 249, 91, 252, 184, 76, 38, 227, 93, 239, 82, 90], - [209, 213, 66, 201, 87, 91, 216, 108, 224, 71, 106, 75, 127, 33, 91], - [203, 184, 185, 70, 189, 222, 66, 7, 125, 100, 134, 204, 87, 119, 189] - ], - "segmentSize": 3 - }, - { - "encrypted": [ - [240, 70, 188, 30, 146, 163, 178, 39, 208, 23, 72, 156, 247, 193, 245, 138, 70, 54, 88, 199], - [94, 154, 167, 89, 118, 211, 195, 93, 118, 65, 77, 220, 119, 205, 230, 2, 166, 201, 147, 165], - [32, 96, 36, 114, 100, 41, 156, 179, 202, 171, 74, 101, 47, 202, 135, 57, 200, 55, 254, 18], - [43, 101, 124, 195, 133, 128, 251, 21, 101, 100, 190, 99, 74, 138, 38, 90, 204, 162, 199, 138] - ], - "iv": [88, 121, 94, 224, 251, 15, 114, 20, 81, 23, 91, 159, 142, 148, 194, 87], - "key": [29, 78, 103, 71, 13, 73, 81, 159, 48, 42, 120, 29, 233, 147, 11, 83], - "modeOfOperation": "cfb", - "plaintext": [ - [160, 132, 105, 63, 51, 96, 99, 199, 154, 100, 68, 118, 241, 114, 76, 134, 89, 178, 233, 49], - [137, 65, 20, 157, 174, 119, 61, 252, 130, 119, 203, 23, 62, 3, 4, 153, 94, 178, 255, 156], - [109, 211, 88, 201, 60, 228, 56, 176, 39, 51, 91, 29, 37, 12, 208, 215, 60, 149, 93, 68], - [33, 250, 126, 129, 150, 7, 246, 94, 176, 207, 243, 13, 254, 244, 92, 15, 221, 27, 153, 81] - ], - "segmentSize": 4 - }, - { - "encrypted": [ - [12, 34, 228, 197, 73, 9, 221, 152, 130, 199, 212, 150, 42, 171, 184, 91, 84, 254, 99, 90, 250, 160, 194, 233, 69], - [47, 32, 53, 222, 169, 49, 72, 87, 149, 190, 78, 206, 64, 142, 45, 184, 123, 75, 20, 91, 136, 6, 35, 166, 74], - [244, 9, 225, 161, 15, 224, 245, 240, 84, 42, 79, 15, 3, 100, 49, 195, 101, 169, 163, 247, 28, 42, 82, 49, 154], - [162, 188, 56, 12, 82, 171, 160, 108, 72, 252, 225, 78, 225, 14, 134, 203, 150, 109, 133, 73, 160, 0, 31, 188, 249], - [133, 8, 156, 204, 125, 189, 18, 42, 74, 24, 143, 41, 190, 142, 44, 243, 207, 185, 101, 39, 57, 190, 108, 104, 61] - ], - "iv": [21, 246, 132, 112, 126, 115, 133, 169, 93, 65, 167, 23, 128, 206, 241, 91], - "key": [186, 214, 84, 24, 155, 15, 238, 95, 79, 165, 73, 109, 183, 160, 44, 12], - "modeOfOperation": "cfb", - "plaintext": [ - [17, 245, 8, 90, 218, 209, 14, 61, 110, 129, 21, 79, 17, 55, 8, 170, 78, 102, 7, 183, 83, 59, 61, 218, 217], - [121, 147, 182, 254, 145, 97, 107, 178, 150, 159, 139, 135, 37, 147, 185, 229, 235, 169, 137, 138, 15, 113, 192, 6, 149], - [163, 199, 136, 115, 201, 230, 5, 112, 209, 138, 171, 230, 54, 227, 65, 174, 134, 255, 206, 77, 252, 206, 206, 42, 96], - [164, 150, 239, 245, 156, 104, 248, 172, 151, 250, 202, 180, 91, 149, 129, 133, 118, 127, 81, 222, 66, 163, 128, 142, 159], - [155, 166, 225, 205, 167, 118, 134, 123, 142, 153, 68, 31, 18, 170, 178, 183, 31, 63, 174, 186, 17, 4, 68, 216, 192] - ], - "segmentSize": 5 - }, - { - "encrypted": [ - [22, 11, 100, 54, 171, 131, 253, 96, 1, 216, 152, 170, 255, 127, 58, 144, 100, 206, 1, 39, 163, 170, 111, 252, 252, 95, 139, 184, 132, 207], - [188, 251, 241, 65, 189, 205, 20, 165, 80, 184, 205, 227, 81, 247, 148, 173, 53, 159, 167, 85, 154, 174, 243, 214, 119, 78, 22, 59, 222, 48], - [189, 57, 159, 202, 206, 158, 147, 107, 197, 42, 205, 166, 66, 15, 52, 197, 116, 153, 218, 25, 198, 121, 52, 242, 156, 64, 47, 86, 89, 8], - [104, 195, 229, 176, 74, 188, 11, 220, 255, 207, 86, 202, 105, 36, 3, 206, 70, 32, 38, 85, 39, 172, 162, 173, 28, 68, 83, 48, 182, 176], - [159, 8, 221, 127, 240, 183, 210, 159, 116, 82, 231, 145, 58, 178, 205, 115, 103, 88, 2, 177, 78, 148, 100, 78, 78, 48, 95, 127, 182, 225], - [103, 247, 221, 16, 200, 28, 76, 82, 117, 249, 17, 54, 164, 13, 244, 141, 232, 59, 181, 40, 76, 241, 140, 194, 232, 141, 179, 116, 132, 18] - ], - "iv": [205, 81, 79, 124, 3, 173, 168, 18, 206, 253, 97, 34, 209, 35, 221, 123], - "key": [184, 166, 114, 77, 138, 140, 103, 0, 9, 102, 25, 226, 228, 157, 201, 183], - "modeOfOperation": "cfb", - "plaintext": [ - [231, 237, 239, 27, 65, 142, 59, 1, 42, 102, 94, 198, 239, 176, 145, 212, 77, 141, 114, 110, 186, 42, 230, 97, 88, 105, 225, 199, 152, 92], - [145, 161, 253, 255, 213, 9, 206, 177, 138, 85, 133, 212, 147, 4, 216, 191, 234, 202, 111, 100, 24, 128, 241, 88, 136, 117, 45, 198, 90, 250], - [31, 21, 10, 81, 207, 155, 8, 195, 89, 116, 234, 124, 30, 74, 255, 192, 173, 238, 108, 41, 173, 201, 51, 12, 114, 206, 48, 67, 220, 7], - [128, 79, 187, 27, 151, 45, 101, 170, 9, 80, 61, 156, 171, 136, 178, 2, 136, 161, 250, 194, 59, 168, 52, 186, 241, 124, 247, 173, 61, 55], - [212, 71, 15, 14, 167, 238, 94, 90, 7, 2, 44, 162, 199, 104, 187, 21, 63, 201, 232, 1, 173, 24, 3, 28, 47, 44, 152, 184, 107, 64], - [72, 110, 162, 160, 108, 201, 38, 13, 106, 192, 20, 228, 87, 182, 219, 97, 27, 110, 86, 173, 131, 60, 84, 204, 249, 24, 45, 143, 46, 149] - ], - "segmentSize": 6 - }, - { - "encrypted": [ - [70, 213, 167, 47, 27, 88, 64, 63, 132, 93, 109, 73, 171, 251, 209, 157, 80, 42, 247, 41, 253, 2, 48, 128, 126, 63, 195, 123, 227, 198, 133, 99, 204, 143, 210], - [14, 13, 93, 177, 62, 115, 245, 157, 231, 52, 64, 97, 140, 227, 81, 35, 77, 153, 17, 228, 138, 121, 141, 221, 78, 23, 26, 180, 161, 144, 108, 225, 10, 160, 249], - [102, 94, 114, 225, 12, 154, 14, 116, 15, 130, 64, 207, 119, 233, 14, 50, 182, 162, 183, 73, 107, 32, 65, 211, 28, 75, 212, 101, 89, 151, 201, 6, 197, 180, 170], - [42, 41, 159, 242, 125, 78, 23, 102, 253, 27, 118, 80, 126, 109, 178, 115, 54, 161, 8, 7, 31, 249, 222, 97, 75, 167, 16, 196, 228, 29, 91, 26, 181, 235, 91], - [123, 151, 213, 189, 172, 113, 123, 121, 42, 111, 27, 143, 32, 57, 211, 231, 54, 219, 123, 53, 192, 8, 102, 202, 194, 40, 159, 107, 47, 93, 5, 33, 96, 208, 4], - [192, 180, 79, 146, 126, 223, 184, 64, 110, 168, 109, 76, 172, 4, 41, 230, 177, 3, 154, 255, 108, 68, 91, 118, 4, 153, 248, 51, 165, 214, 135, 229, 235, 32, 227], - [97, 133, 169, 177, 146, 249, 176, 8, 108, 106, 171, 188, 240, 25, 97, 127, 154, 113, 155, 178, 248, 171, 161, 99, 118, 171, 135, 12, 149, 8, 231, 37, 19, 123, 19] - ], - "iv": [57, 78, 0, 122, 62, 61, 45, 120, 159, 215, 224, 127, 38, 180, 38, 179], - "key": [36, 206, 146, 131, 145, 192, 144, 93, 170, 132, 147, 118, 224, 129, 134, 224], - "modeOfOperation": "cfb", - "plaintext": [ - [234, 35, 60, 5, 237, 45, 155, 223, 14, 54, 248, 46, 106, 156, 34, 66, 36, 32, 166, 182, 154, 70, 127, 176, 127, 90, 24, 7, 206, 80, 84, 173, 138, 38, 166], - [33, 110, 160, 114, 214, 138, 50, 103, 170, 191, 105, 94, 154, 253, 58, 200, 125, 231, 196, 19, 143, 163, 156, 105, 211, 215, 139, 160, 216, 152, 41, 104, 73, 136, 207], - [133, 149, 190, 153, 168, 8, 254, 121, 42, 186, 70, 58, 186, 176, 216, 155, 196, 182, 105, 87, 185, 63, 64, 121, 172, 34, 21, 131, 167, 83, 129, 28, 168, 20, 239], - [1, 24, 141, 23, 197, 208, 9, 166, 44, 182, 62, 222, 68, 150, 48, 17, 171, 36, 39, 148, 176, 130, 147, 157, 233, 215, 29, 94, 202, 95, 245, 61, 163, 81, 142], - [117, 200, 110, 243, 207, 87, 158, 172, 206, 149, 13, 197, 209, 227, 63, 175, 36, 125, 57, 84, 45, 193, 234, 244, 151, 124, 43, 135, 40, 110, 57, 108, 96, 142, 213], - [62, 143, 166, 48, 245, 235, 206, 42, 13, 143, 76, 8, 95, 106, 235, 164, 92, 100, 228, 195, 74, 2, 184, 227, 127, 114, 96, 220, 196, 118, 130, 225, 255, 141, 20], - [166, 23, 19, 222, 60, 116, 176, 252, 132, 126, 243, 128, 57, 185, 166, 101, 247, 171, 177, 172, 11, 142, 248, 122, 180, 190, 181, 194, 80, 181, 119, 63, 151, 2, 38] - ], - "segmentSize": 7 - }, - { - "encrypted": [ - [190, 250, 138, 231, 99] - ], - "iv": [199, 127, 150, 199, 252, 147, 102, 4, 187, 213, 109, 151, 234, 24, 167, 77], - "key": [179, 36, 212, 60, 214, 17, 222, 211, 159, 127, 72, 74, 23, 4, 53, 187, 226, 21, 21, 150, 134, 210, 10, 172], - "modeOfOperation": "cfb", - "plaintext": [ - [203, 25, 99, 37, 183] - ], - "segmentSize": 1 - }, - { - "encrypted": [ - [61, 247, 250, 97, 106, 86, 211, 220, 199, 249], - [34, 163, 10, 203, 116, 213, 124, 152, 134, 182] - ], - "iv": [165, 190, 139, 243, 159, 51, 15, 23, 218, 141, 206, 97, 51, 225, 216, 88], - "key": [79, 240, 52, 177, 194, 182, 215, 191, 61, 47, 230, 142, 188, 28, 80, 111, 239, 112, 162, 3, 156, 18, 65, 123], - "modeOfOperation": "cfb", - "plaintext": [ - [168, 18, 63, 243, 123, 102, 250, 176, 38, 122], - [126, 194, 173, 128, 10, 118, 221, 1, 190, 232] - ], - "segmentSize": 2 - }, - { - "encrypted": [ - [217, 23, 242, 50, 209, 127, 173, 38, 119, 81, 87, 187, 121, 138, 186], - [192, 147, 57, 239, 218, 79, 181, 84, 76, 12, 85, 11, 123, 169, 11], - [132, 71, 108, 181, 170, 183, 0, 169, 32, 36, 110, 133, 244, 183, 127] - ], - "iv": [80, 96, 98, 105, 240, 172, 236, 42, 54, 144, 221, 80, 176, 10, 20, 167], - "key": [55, 115, 189, 144, 31, 134, 207, 129, 223, 150, 203, 229, 145, 58, 189, 132, 53, 84, 195, 114, 63, 156, 61, 34], - "modeOfOperation": "cfb", - "plaintext": [ - [108, 7, 190, 118, 228, 162, 57, 8, 48, 50, 164, 186, 40, 18, 211], - [171, 30, 254, 119, 91, 68, 54, 143, 51, 21, 177, 229, 89, 98, 155], - [161, 46, 3, 249, 197, 61, 124, 182, 198, 224, 110, 16, 112, 229, 238] - ], - "segmentSize": 3 - }, - { - "encrypted": [ - [100, 142, 148, 56, 205, 73, 160, 207, 150, 187, 229, 226, 66, 15, 196, 48, 8, 34, 214, 169], - [64, 229, 4, 226, 243, 251, 34, 39, 100, 234, 255, 249, 179, 113, 193, 28, 172, 25, 212, 48], - [191, 0, 114, 15, 122, 71, 107, 101, 77, 153, 230, 89, 14, 158, 167, 190, 174, 127, 129, 89], - [114, 221, 110, 84, 109, 198, 250, 7, 80, 102, 219, 193, 150, 88, 79, 6, 226, 34, 151, 101] - ], - "iv": [115, 185, 162, 142, 140, 97, 99, 111, 18, 23, 60, 231, 75, 249, 79, 184], - "key": [0, 200, 241, 17, 42, 135, 161, 215, 236, 144, 95, 174, 97, 136, 47, 206, 177, 203, 152, 7, 85, 26, 68, 186], - "modeOfOperation": "cfb", - "plaintext": [ - [174, 252, 132, 98, 194, 121, 23, 111, 73, 102, 198, 58, 89, 12, 207, 177, 84, 248, 110, 71], - [128, 113, 51, 169, 120, 96, 58, 66, 191, 116, 28, 224, 211, 108, 7, 31, 64, 81, 240, 33], - [142, 67, 177, 227, 199, 138, 90, 20, 115, 105, 162, 89, 19, 146, 130, 97, 132, 231, 225, 186], - [234, 183, 4, 67, 41, 133, 79, 8, 81, 58, 21, 249, 175, 126, 101, 225, 2, 190, 241, 211] - ], - "segmentSize": 4 - }, - { - "encrypted": [ - [63, 146, 148, 148, 176, 98, 56, 61, 27, 107, 124, 140, 80, 113, 162, 42, 86, 105, 98, 130, 190, 189, 186, 34, 61], - [209, 64, 250, 29, 29, 184, 21, 5, 193, 208, 2, 252, 17, 220, 171, 223, 54, 226, 229, 27, 131, 124, 164, 179, 75], - [168, 206, 59, 137, 125, 214, 240, 241, 221, 30, 86, 102, 129, 71, 42, 173, 201, 156, 206, 63, 170, 246, 188, 75, 45], - [73, 203, 249, 44, 91, 146, 206, 97, 118, 79, 34, 20, 140, 41, 92, 178, 42, 84, 2, 179, 253, 231, 114, 148, 201], - [81, 16, 106, 47, 118, 208, 165, 126, 110, 152, 77, 146, 193, 12, 51, 141, 36, 102, 194, 255, 42, 25, 83, 123, 245] - ], - "iv": [119, 48, 253, 227, 11, 91, 37, 251, 172, 32, 155, 202, 167, 151, 205, 241], - "key": [229, 247, 35, 47, 163, 244, 34, 37, 209, 15, 206, 191, 248, 178, 248, 183, 178, 187, 71, 52, 32, 22, 194, 243], - "modeOfOperation": "cfb", - "plaintext": [ - [189, 227, 190, 199, 196, 42, 144, 238, 203, 179, 72, 41, 62, 209, 166, 242, 245, 152, 215, 89, 168, 19, 198, 40, 60], - [144, 202, 88, 195, 171, 44, 66, 255, 251, 88, 183, 250, 143, 193, 108, 92, 197, 197, 64, 96, 18, 7, 135, 91, 168], - [234, 126, 22, 209, 77, 159, 114, 157, 148, 45, 218, 136, 236, 150, 62, 196, 100, 190, 28, 254, 127, 156, 241, 81, 43], - [101, 253, 18, 224, 237, 249, 1, 248, 221, 171, 207, 101, 27, 56, 221, 83, 126, 246, 223, 126, 173, 97, 42, 123, 201], - [152, 29, 71, 144, 32, 222, 245, 253, 112, 67, 209, 27, 146, 123, 142, 239, 50, 16, 172, 233, 113, 147, 231, 141, 109] - ], - "segmentSize": 5 - }, - { - "encrypted": [ - [115, 19, 209, 144, 238, 42, 196, 221, 232, 211, 248, 211, 199, 92, 187, 213, 234, 74, 20, 158, 213, 93, 184, 111, 110, 31, 152, 254, 213, 249], - [226, 86, 216, 12, 206, 100, 82, 45, 233, 4, 194, 129, 169, 15, 1, 167, 171, 5, 42, 218, 78, 143, 230, 215, 113, 36, 12, 48, 249, 124], - [171, 199, 6, 113, 74, 133, 131, 100, 210, 235, 205, 127, 163, 65, 49, 211, 203, 138, 114, 62, 100, 231, 23, 47, 214, 42, 137, 217, 169, 12], - [215, 188, 10, 205, 128, 30, 227, 59, 62, 128, 39, 26, 203, 108, 78, 120, 147, 31, 157, 235, 165, 96, 104, 42, 116, 28, 68, 204, 248, 75], - [63, 155, 73, 195, 8, 158, 211, 149, 120, 107, 27, 221, 154, 246, 92, 147, 38, 186, 254, 102, 113, 108, 137, 151, 11, 93, 63, 84, 198, 109], - [169, 149, 225, 52, 175, 139, 57, 191, 182, 136, 185, 223, 61, 84, 75, 151, 232, 50, 28, 249, 76, 244, 85, 244, 82, 127, 169, 207, 87, 23] - ], - "iv": [81, 148, 165, 249, 76, 219, 128, 44, 215, 152, 40, 233, 248, 68, 138, 202], - "key": [127, 121, 194, 95, 34, 175, 135, 192, 233, 136, 41, 163, 108, 153, 213, 215, 123, 64, 232, 122, 178, 105, 134, 171], - "modeOfOperation": "cfb", - "plaintext": [ - [209, 68, 106, 131, 187, 132, 2, 97, 34, 166, 179, 162, 171, 19, 105, 113, 119, 174, 190, 157, 139, 20, 116, 136, 184, 35, 169, 216, 132, 102], - [156, 174, 248, 130, 25, 44, 41, 179, 129, 231, 138, 141, 140, 230, 11, 76, 190, 207, 91, 250, 195, 99, 81, 85, 28, 113, 214, 57, 245, 117], - [230, 155, 123, 186, 146, 243, 107, 137, 220, 250, 108, 141, 223, 55, 234, 195, 146, 119, 62, 121, 30, 80, 71, 125, 98, 70, 22, 255, 187, 149], - [50, 243, 229, 86, 237, 77, 116, 145, 92, 215, 12, 248, 143, 177, 111, 143, 166, 144, 199, 37, 136, 141, 23, 129, 186, 97, 223, 92, 40, 125], - [198, 194, 123, 168, 106, 179, 133, 244, 108, 99, 11, 12, 202, 208, 201, 218, 191, 118, 133, 8, 77, 171, 135, 86, 105, 220, 28, 101, 37, 45], - [56, 8, 230, 171, 135, 55, 93, 185, 148, 101, 94, 78, 166, 182, 174, 240, 146, 192, 13, 171, 243, 241, 26, 207, 53, 248, 52, 171, 131, 39] - ], - "segmentSize": 6 - }, - { - "encrypted": [ - [198, 244, 170, 22, 5, 132, 185, 159, 37, 160, 7, 233, 153, 4, 239, 23, 103, 161, 211, 209, 178, 19, 68, 16, 110, 47, 180, 100, 51, 203, 112, 155, 235, 54, 191], - [84, 99, 183, 218, 209, 119, 254, 98, 171, 43, 103, 234, 110, 225, 46, 144, 125, 145, 147, 247, 171, 92, 119, 226, 88, 205, 68, 115, 243, 42, 233, 78, 156, 187, 33], - [5, 237, 157, 80, 87, 177, 205, 120, 158, 67, 245, 233, 49, 146, 211, 66, 213, 242, 12, 26, 78, 214, 171, 211, 205, 54, 79, 122, 3, 53, 46, 167, 239, 152, 24], - [245, 98, 207, 195, 87, 230, 130, 144, 18, 145, 171, 71, 234, 66, 76, 81, 161, 234, 201, 66, 36, 144, 103, 151, 40, 148, 251, 114, 236, 181, 252, 96, 183, 199, 220], - [201, 254, 184, 21, 19, 52, 91, 236, 102, 22, 32, 77, 194, 201, 81, 233, 122, 154, 37, 209, 90, 146, 31, 142, 184, 93, 51, 79, 158, 201, 164, 148, 62, 130, 98], - [150, 45, 150, 141, 146, 227, 186, 230, 138, 38, 111, 32, 232, 8, 191, 63, 120, 177, 202, 1, 247, 219, 84, 4, 243, 136, 128, 255, 125, 87, 121, 237, 162, 255, 115], - [59, 244, 202, 242, 216, 105, 242, 183, 72, 34, 175, 19, 115, 209, 195, 186, 202, 92, 184, 151, 247, 175, 247, 67, 149, 164, 91, 30, 122, 84, 245, 25, 235, 69, 101] - ], - "iv": [50, 225, 1, 244, 97, 103, 23, 234, 115, 26, 16, 61, 107, 53, 14, 20], - "key": [111, 143, 252, 253, 234, 17, 0, 255, 235, 24, 156, 37, 160, 119, 220, 171, 236, 58, 98, 63, 252, 123, 163, 92], - "modeOfOperation": "cfb", - "plaintext": [ - [121, 78, 76, 241, 143, 144, 194, 240, 133, 90, 219, 142, 234, 247, 21, 29, 82, 226, 198, 119, 171, 145, 221, 58, 188, 73, 52, 91, 169, 7, 120, 183, 223, 128, 120], - [115, 0, 203, 174, 202, 198, 239, 11, 9, 5, 24, 200, 106, 113, 134, 232, 67, 83, 134, 113, 77, 42, 44, 130, 215, 164, 225, 135, 51, 157, 230, 74, 230, 4, 221], - [189, 0, 136, 43, 88, 226, 216, 112, 246, 80, 123, 16, 0, 133, 139, 11, 112, 221, 175, 193, 201, 248, 45, 57, 153, 185, 153, 155, 177, 193, 211, 63, 92, 70, 254], - [43, 183, 97, 93, 177, 47, 142, 40, 67, 130, 97, 236, 47, 131, 178, 20, 141, 66, 110, 143, 139, 84, 71, 141, 232, 243, 39, 174, 231, 119, 228, 3, 140, 67, 110], - [246, 8, 8, 192, 179, 218, 128, 220, 42, 154, 238, 51, 194, 252, 79, 81, 111, 219, 246, 120, 76, 101, 21, 150, 59, 156, 27, 224, 58, 132, 70, 228, 244, 25, 69], - [158, 189, 99, 209, 105, 226, 120, 112, 208, 249, 251, 135, 182, 114, 116, 107, 201, 11, 207, 90, 112, 214, 144, 59, 159, 223, 246, 48, 229, 223, 207, 253, 123, 70, 52], - [71, 131, 142, 240, 56, 109, 203, 15, 250, 61, 245, 221, 25, 59, 236, 78, 155, 144, 151, 238, 85, 92, 123, 118, 121, 228, 149, 128, 142, 15, 49, 161, 234, 4, 87] - ], - "segmentSize": 7 - }, - { - "encrypted": [ - [200, 80, 243, 145, 125] - ], - "iv": [75, 234, 59, 17, 46, 147, 142, 73, 210, 222, 201, 65, 23, 131, 157, 73], - "key": [118, 237, 71, 106, 39, 82, 101, 236, 12, 243, 56, 152, 192, 244, 70, 222, 135, 134, 232, 233, 89, 57, 30, 191, 222, 107, 48, 137, 250, 194, 144, 149], - "modeOfOperation": "cfb", - "plaintext": [ - [169, 62, 235, 188, 114] - ], - "segmentSize": 1 - }, - { - "encrypted": [ - [141, 154, 181, 89, 246, 59, 238, 18, 11, 98], - [32, 161, 23, 115, 35, 90, 17, 130, 7, 97] - ], - "iv": [43, 204, 46, 198, 125, 108, 23, 212, 192, 94, 89, 197, 237, 5, 123, 79], - "key": [247, 34, 194, 108, 204, 61, 141, 29, 177, 136, 20, 128, 147, 124, 224, 64, 52, 55, 157, 47, 97, 175, 170, 174, 180, 203, 5, 153, 176, 186, 92, 115], - "modeOfOperation": "cfb", - "plaintext": [ - [151, 234, 59, 40, 40, 207, 209, 20, 100, 0], - [170, 130, 220, 141, 177, 247, 155, 141, 92, 178] - ], - "segmentSize": 2 - }, - { - "encrypted": [ - [187, 225, 60, 158, 84, 246, 65, 128, 219, 109, 194, 137, 110, 50, 173], - [99, 57, 204, 185, 159, 223, 230, 146, 84, 57, 144, 109, 104, 84, 162], - [133, 22, 145, 118, 88, 248, 83, 167, 172, 240, 5, 26, 80, 213, 207] - ], - "iv": [180, 189, 187, 183, 57, 103, 8, 57, 213, 17, 241, 37, 96, 187, 123, 7], - "key": [174, 193, 216, 161, 66, 68, 128, 198, 104, 107, 219, 118, 138, 117, 54, 32, 5, 240, 147, 33, 51, 90, 252, 153, 23, 72, 184, 147, 216, 152, 136, 208], - "modeOfOperation": "cfb", - "plaintext": [ - [200, 243, 40, 126, 62, 34, 145, 84, 241, 4, 199, 232, 46, 120, 174], - [108, 86, 5, 118, 138, 50, 249, 252, 216, 175, 224, 131, 86, 66, 24], - [182, 18, 219, 233, 199, 193, 26, 148, 47, 208, 211, 97, 48, 254, 97] - ], - "segmentSize": 3 - }, - { - "encrypted": [ - [29, 221, 39, 36, 3, 252, 253, 189, 166, 145, 32, 119, 56, 242, 236, 123, 146, 252, 69, 226], - [45, 14, 119, 34, 189, 218, 104, 88, 137, 137, 103, 50, 20, 220, 122, 128, 75, 101, 228, 0], - [207, 241, 115, 124, 247, 72, 34, 234, 147, 16, 79, 247, 208, 108, 151, 37, 131, 4, 189, 186], - [156, 237, 222, 199, 188, 187, 36, 134, 253, 158, 74, 118, 101, 57, 69, 88, 230, 136, 0, 144] - ], - "iv": [171, 160, 95, 151, 169, 88, 137, 166, 0, 227, 66, 147, 67, 44, 210, 210], - "key": [180, 200, 72, 77, 213, 122, 51, 81, 66, 103, 39, 83, 62, 4, 107, 173, 51, 131, 223, 84, 128, 65, 189, 133, 188, 228, 247, 144, 75, 82, 147, 202], - "modeOfOperation": "cfb", - "plaintext": [ - [137, 12, 204, 154, 32, 131, 239, 254, 79, 58, 219, 64, 78, 231, 144, 192, 108, 167, 141, 173], - [23, 92, 23, 244, 136, 52, 46, 21, 27, 144, 138, 17, 228, 159, 205, 199, 217, 115, 7, 46], - [169, 55, 180, 42, 168, 139, 183, 197, 52, 162, 4, 163, 198, 60, 93, 143, 189, 177, 171, 37], - [113, 55, 56, 13, 164, 184, 86, 221, 31, 147, 30, 139, 207, 204, 72, 161, 102, 201, 167, 110] - ], - "segmentSize": 4 - }, - { - "encrypted": [ - [13, 168, 54, 24, 149, 223, 226, 14, 105, 115, 6, 241, 146, 187, 47, 8, 67, 211, 68, 169, 245, 234, 114, 50, 145], - [80, 49, 0, 140, 91, 172, 116, 59, 139, 186, 253, 113, 212, 93, 28, 11, 51, 92, 43, 216, 66, 93, 51, 51, 82], - [138, 217, 234, 114, 131, 6, 29, 136, 98, 251, 29, 126, 121, 70, 178, 126, 236, 49, 126, 95, 205, 25, 179, 78, 45], - [190, 5, 165, 17, 255, 67, 24, 191, 240, 250, 191, 130, 107, 180, 113, 20, 82, 253, 24, 30, 254, 54, 193, 105, 140], - [144, 184, 23, 165, 156, 213, 157, 188, 133, 74, 53, 78, 38, 209, 94, 184, 144, 181, 161, 135, 45, 99, 130, 69, 123] - ], - "iv": [1, 217, 88, 56, 58, 139, 39, 83, 113, 180, 215, 18, 44, 3, 73, 138], - "key": [72, 24, 173, 55, 195, 69, 229, 188, 110, 124, 203, 166, 248, 37, 127, 251, 209, 91, 11, 242, 51, 244, 236, 174, 139, 123, 70, 154, 124, 41, 131, 109], - "modeOfOperation": "cfb", - "plaintext": [ - [105, 97, 68, 207, 178, 57, 230, 204, 142, 191, 242, 118, 43, 136, 160, 242, 106, 245, 46, 252, 195, 36, 240, 214, 19], - [134, 121, 55, 119, 230, 223, 93, 52, 205, 30, 245, 204, 0, 187, 18, 16, 126, 149, 212, 196, 44, 104, 157, 195, 67], - [65, 35, 72, 119, 232, 63, 111, 67, 178, 127, 124, 4, 99, 70, 171, 91, 195, 106, 237, 78, 110, 30, 254, 178, 67], - [80, 120, 15, 167, 106, 231, 68, 68, 243, 246, 77, 35, 68, 242, 194, 13, 140, 214, 209, 85, 179, 96, 212, 161, 10], - [183, 153, 60, 14, 76, 165, 188, 194, 236, 172, 168, 111, 244, 237, 209, 65, 216, 203, 153, 87, 158, 251, 123, 115, 100] - ], - "segmentSize": 5 - }, - { - "encrypted": [ - [130, 89, 6, 147, 214, 221, 244, 14, 109, 100, 235, 80, 100, 212, 89, 168, 110, 238, 75, 18, 105, 88, 17, 187, 148, 79, 166, 157, 137, 75], - [99, 75, 51, 123, 92, 48, 73, 43, 16, 196, 182, 196, 145, 96, 170, 56, 33, 50, 237, 142, 53, 95, 103, 6, 107, 142, 50, 135, 72, 68], - [172, 52, 73, 97, 45, 241, 123, 47, 1, 232, 155, 200, 203, 207, 109, 107, 105, 181, 5, 93, 40, 246, 76, 29, 30, 83, 210, 122, 71, 121], - [158, 132, 9, 144, 252, 242, 182, 2, 8, 74, 49, 141, 244, 27, 201, 216, 219, 16, 198, 148, 38, 76, 175, 202, 27, 185, 104, 90, 66, 94], - [221, 31, 34, 186, 129, 222, 64, 39, 134, 177, 235, 160, 12, 12, 168, 38, 177, 110, 100, 146, 63, 91, 41, 239, 57, 9, 77, 150, 121, 150], - [118, 32, 161, 15, 194, 129, 144, 153, 209, 24, 110, 62, 40, 114, 230, 253, 16, 163, 243, 77, 112, 5, 53, 137, 4, 146, 13, 139, 249, 236] - ], - "iv": [82, 47, 65, 109, 27, 89, 86, 167, 239, 98, 253, 185, 52, 52, 7, 223], - "key": [35, 232, 159, 138, 72, 245, 41, 235, 111, 201, 125, 140, 126, 62, 17, 41, 55, 95, 102, 107, 175, 51, 154, 218, 171, 72, 199, 202, 222, 46, 58, 85], - "modeOfOperation": "cfb", - "plaintext": [ - [119, 59, 107, 12, 189, 181, 243, 181, 51, 95, 138, 116, 81, 105, 193, 9, 19, 113, 168, 96, 194, 121, 7, 231, 167, 99, 247, 156, 200, 226], - [133, 60, 252, 55, 242, 106, 54, 53, 11, 9, 197, 15, 151, 209, 32, 154, 226, 92, 21, 160, 2, 8, 27, 120, 25, 163, 217, 232, 234, 25], - [41, 168, 87, 1, 167, 127, 204, 15, 226, 151, 133, 114, 215, 63, 134, 2, 224, 203, 201, 2, 146, 96, 183, 47, 15, 6, 6, 224, 67, 142], - [252, 205, 9, 162, 54, 65, 181, 178, 6, 114, 113, 28, 222, 193, 169, 40, 23, 114, 254, 107, 70, 205, 40, 31, 124, 147, 56, 11, 148, 111], - [254, 226, 199, 33, 49, 190, 249, 45, 28, 52, 7, 219, 176, 27, 134, 195, 13, 145, 105, 11, 123, 108, 115, 39, 9, 42, 74, 50, 91, 245], - [18, 94, 99, 216, 118, 148, 72, 183, 249, 239, 208, 216, 122, 244, 242, 37, 131, 247, 107, 35, 183, 78, 159, 55, 206, 201, 20, 236, 242, 203] - ], - "segmentSize": 6 - }, - { - "encrypted": [ - [22, 165, 42, 127, 80, 99, 199, 9, 3, 218, 71, 229, 20, 210, 29, 103, 118, 196, 230, 92, 222, 113, 147, 103, 191, 183, 166, 232, 243, 6, 78, 206, 85, 209, 175], - [174, 19, 239, 76, 200, 134, 29, 106, 197, 118, 43, 27, 184, 82, 245, 113, 54, 112, 102, 159, 115, 182, 34, 12, 106, 7, 244, 11, 23, 225, 71, 90, 72, 197, 204], - [234, 191, 147, 113, 53, 173, 5, 165, 235, 206, 79, 39, 45, 218, 225, 211, 215, 147, 67, 84, 205, 155, 24, 91, 52, 142, 128, 217, 149, 140, 82, 35, 38, 114, 254], - [43, 231, 19, 17, 70, 6, 42, 117, 211, 83, 149, 4, 23, 146, 71, 215, 248, 230, 171, 24, 133, 70, 39, 94, 65, 30, 136, 7, 25, 238, 22, 57, 63, 42, 175], - [114, 137, 51, 109, 73, 153, 48, 6, 24, 253, 185, 63, 88, 102, 115, 163, 248, 152, 222, 13, 74, 110, 198, 30, 179, 34, 127, 178, 155, 57, 213, 194, 64, 210, 123], - [49, 9, 143, 60, 53, 128, 209, 193, 242, 193, 145, 30, 10, 26, 195, 132, 223, 121, 217, 97, 158, 76, 81, 239, 32, 195, 13, 84, 146, 99, 69, 188, 167, 111, 252], - [253, 183, 140, 179, 148, 60, 104, 92, 189, 229, 86, 88, 16, 28, 102, 232, 161, 148, 228, 163, 45, 170, 100, 134, 127, 110, 254, 204, 126, 31, 178, 185, 56, 114, 73] - ], - "iv": [221, 13, 162, 156, 70, 144, 133, 50, 72, 37, 4, 218, 121, 176, 181, 200], - "key": [18, 44, 225, 254, 119, 85, 20, 1, 125, 223, 199, 233, 171, 153, 188, 189, 251, 20, 52, 63, 173, 127, 29, 89, 135, 6, 56, 164, 217, 55, 239, 216], - "modeOfOperation": "cfb", - "plaintext": [ - [105, 207, 212, 120, 130, 90, 76, 49, 96, 18, 65, 82, 164, 100, 38, 69, 204, 138, 23, 163, 225, 249, 11, 201, 234, 214, 26, 183, 30, 178, 42, 117, 197, 195, 252], - [13, 59, 65, 115, 94, 253, 254, 251, 147, 204, 206, 151, 174, 98, 246, 35, 236, 187, 29, 72, 242, 23, 178, 130, 234, 60, 18, 30, 167, 55, 225, 158, 193, 225, 152], - [188, 78, 150, 236, 74, 215, 23, 247, 128, 215, 75, 108, 122, 206, 20, 6, 205, 158, 32, 90, 20, 112, 82, 53, 232, 116, 245, 115, 40, 255, 123, 75, 204, 28, 125], - [121, 76, 231, 250, 237, 27, 227, 212, 180, 108, 62, 219, 145, 153, 152, 40, 3, 79, 114, 71, 227, 199, 189, 242, 47, 136, 197, 156, 252, 75, 41, 166, 136, 7, 216], - [26, 52, 123, 173, 170, 101, 48, 64, 14, 14, 234, 110, 31, 68, 19, 213, 52, 152, 244, 26, 221, 145, 97, 1, 168, 163, 12, 183, 161, 146, 130, 5, 230, 179, 236], - [202, 14, 158, 5, 32, 61, 230, 112, 115, 94, 119, 236, 40, 171, 168, 60, 69, 125, 47, 94, 23, 81, 232, 199, 234, 115, 41, 141, 79, 18, 252, 42, 165, 71, 239], - [106, 3, 139, 205, 91, 237, 60, 239, 200, 148, 222, 22, 143, 124, 60, 59, 233, 103, 252, 229, 180, 96, 217, 187, 214, 24, 95, 94, 220, 70, 60, 79, 219, 235, 91] - ], - "segmentSize": 7 - }, - { - "encrypted": [ - [238, 137, 153, 254, 19, 133, 199, 143, 51, 179, 209, 4, 58, 30, 13, 36] - ], - "iv": null, - "key": [149, 247, 127, 217, 110, 243, 90, 121, 103, 128, 168, 40, 131, 161, 44, 224], - "modeOfOperation": "ecb", - "plaintext": [ - [159, 159, 3, 191, 237, 238, 255, 42, 44, 168, 223, 100, 82, 73, 17, 87] - ], - "segmentSize": null - }, - { - "encrypted": [ - [250, 99, 42, 88, 14, 43, 25, 172, 16, 177, 136, 69, 20, 165, 175, 224], - [47, 204, 175, 233, 135, 246, 60, 143, 94, 208, 139, 227, 22, 138, 165, 37] - ], - "iv": null, - "key": [222, 114, 182, 185, 97, 102, 83, 205, 247, 127, 139, 210, 178, 208, 35, 61], - "modeOfOperation": "ecb", - "plaintext": [ - [139, 208, 109, 202, 32, 26, 15, 164, 16, 21, 22, 71, 5, 118, 179, 254], - [175, 161, 198, 159, 24, 192, 14, 60, 207, 68, 63, 143, 101, 75, 185, 167] - ], - "segmentSize": null - }, - { - "encrypted": [ - [177, 173, 151, 206, 220, 162, 50, 243, 96, 22, 217, 30, 85, 244, 75, 85], - [97, 96, 151, 11, 242, 235, 237, 113, 67, 51, 81, 99, 137, 239, 228, 179], - [171, 162, 120, 41, 124, 167, 184, 125, 38, 117, 154, 149, 50, 65, 215, 200] - ], - "iv": null, - "key": [59, 161, 149, 163, 44, 83, 126, 247, 28, 46, 17, 113, 153, 54, 178, 196], - "modeOfOperation": "ecb", - "plaintext": [ - [185, 223, 213, 102, 65, 188, 123, 74, 7, 183, 159, 43, 208, 101, 172, 197], - [165, 239, 5, 79, 137, 60, 153, 90, 228, 89, 168, 16, 205, 129, 253, 128], - [137, 17, 31, 154, 25, 94, 84, 155, 97, 53, 156, 153, 51, 133, 206, 129] - ], - "segmentSize": null - }, - { - "encrypted": [ - [187, 240, 187, 170, 47, 206, 153, 14, 205, 212, 61, 152, 60, 24, 158, 170], - [132, 25, 139, 106, 130, 204, 65, 53, 138, 114, 172, 122, 232, 22, 65, 208], - [83, 174, 3, 231, 174, 66, 187, 102, 152, 11, 43, 90, 205, 230, 16, 213], - [91, 85, 200, 136, 228, 230, 232, 101, 58, 150, 72, 89, 65, 65, 25, 142] - ], - "iv": null, - "key": [251, 156, 107, 7, 121, 197, 67, 14, 137, 33, 221, 69, 254, 146, 148, 57], - "modeOfOperation": "ecb", - "plaintext": [ - [108, 66, 3, 68, 0, 23, 156, 165, 191, 252, 45, 163, 69, 13, 50, 171], - [93, 249, 46, 131, 218, 148, 72, 234, 159, 207, 154, 145, 253, 129, 27, 245], - [130, 169, 83, 11, 13, 95, 107, 86, 20, 19, 174, 23, 86, 14, 101, 117], - [67, 13, 200, 108, 16, 123, 13, 164, 33, 80, 190, 226, 87, 179, 176, 148] - ], - "segmentSize": null - }, - { - "encrypted": [ - [242, 140, 79, 103, 134, 192, 188, 136, 254, 90, 233, 244, 251, 145, 218, 112], - [59, 189, 45, 232, 254, 137, 63, 13, 48, 48, 79, 88, 16, 245, 149, 170], - [27, 198, 193, 221, 128, 34, 152, 128, 15, 210, 128, 185, 163, 157, 9, 161], - [150, 242, 217, 48, 34, 11, 21, 132, 181, 230, 66, 73, 211, 165, 242, 179], - [240, 63, 113, 255, 200, 138, 171, 93, 206, 173, 237, 200, 98, 240, 4, 102] - ], - "iv": null, - "key": [33, 38, 153, 122, 2, 186, 175, 108, 233, 154, 200, 214, 45, 174, 31, 241], - "modeOfOperation": "ecb", - "plaintext": [ - [71, 18, 153, 218, 157, 4, 49, 177, 55, 46, 218, 163, 97, 163, 58, 219], - [24, 65, 73, 58, 70, 206, 70, 192, 136, 107, 215, 42, 61, 143, 131, 83], - [111, 212, 116, 34, 29, 166, 66, 28, 207, 209, 224, 17, 96, 155, 70, 233], - [67, 54, 31, 52, 10, 161, 228, 9, 88, 105, 167, 147, 86, 53, 194, 146], - [194, 56, 50, 198, 159, 128, 94, 248, 108, 251, 63, 229, 195, 223, 207, 90] - ], - "segmentSize": null - }, - { - "encrypted": [ - [84, 141, 156, 25, 60, 48, 116, 111, 196, 141, 239, 98, 151, 110, 65, 112], - [235, 143, 239, 212, 204, 24, 208, 49, 111, 194, 228, 199, 9, 25, 179, 175], - [35, 44, 114, 249, 11, 162, 77, 153, 193, 29, 245, 213, 223, 187, 136, 213], - [122, 38, 7, 97, 85, 72, 106, 196, 221, 56, 31, 3, 101, 227, 216, 223], - [5, 133, 230, 209, 224, 105, 140, 30, 108, 4, 196, 46, 47, 124, 60, 231], - [4, 91, 180, 218, 132, 88, 118, 24, 193, 219, 66, 119, 243, 233, 89, 136] - ], - "iv": null, - "key": [79, 58, 62, 195, 207, 104, 220, 123, 255, 139, 108, 131, 121, 177, 51, 213], - "modeOfOperation": "ecb", - "plaintext": [ - [234, 60, 146, 106, 166, 117, 114, 103, 29, 48, 26, 43, 175, 47, 113, 70], - [29, 243, 16, 2, 137, 57, 145, 112, 150, 130, 29, 179, 247, 148, 24, 36], - [152, 33, 100, 7, 249, 46, 180, 121, 142, 119, 190, 166, 70, 58, 54, 137], - [101, 130, 34, 245, 124, 60, 162, 203, 48, 16, 247, 117, 139, 218, 98, 50], - [220, 0, 246, 168, 16, 167, 218, 66, 182, 123, 91, 188, 167, 213, 252, 105], - [172, 239, 138, 220, 148, 71, 206, 190, 23, 77, 2, 132, 210, 247, 105, 198] - ], - "segmentSize": null - }, - { - "encrypted": [ - [252, 160, 175, 125, 134, 48, 54, 171, 136, 65, 192, 227, 77, 108, 225, 77], - [209, 185, 2, 231, 242, 145, 63, 254, 247, 199, 119, 145, 166, 138, 33, 249], - [67, 224, 146, 99, 241, 99, 247, 85, 38, 230, 215, 180, 168, 214, 50, 189], - [170, 116, 113, 77, 116, 35, 208, 169, 97, 118, 122, 224, 25, 199, 172, 56], - [244, 241, 33, 127, 127, 163, 211, 16, 122, 251, 253, 27, 10, 38, 115, 73], - [46, 102, 54, 21, 133, 189, 112, 132, 203, 83, 134, 23, 240, 188, 244, 58], - [128, 0, 102, 47, 28, 236, 47, 134, 186, 49, 226, 221, 62, 23, 106, 157] - ], - "iv": null, - "key": [203, 22, 239, 161, 198, 185, 32, 84, 126, 125, 3, 75, 157, 139, 201, 69], - "modeOfOperation": "ecb", - "plaintext": [ - [232, 152, 228, 130, 200, 42, 107, 174, 172, 191, 151, 208, 112, 26, 201, 85], - [222, 154, 27, 152, 37, 130, 132, 211, 85, 198, 25, 205, 35, 237, 237, 52], - [116, 211, 49, 2, 206, 173, 60, 111, 13, 144, 68, 135, 71, 92, 155, 200], - [6, 5, 15, 248, 23, 56, 75, 244, 193, 12, 204, 219, 80, 218, 47, 226], - [9, 176, 16, 215, 40, 107, 53, 211, 38, 253, 126, 229, 71, 80, 88, 254], - [153, 138, 29, 246, 160, 8, 169, 203, 67, 119, 206, 5, 209, 20, 141, 227], - [138, 131, 238, 180, 35, 30, 215, 99, 240, 116, 235, 128, 51, 137, 43, 150] - ], - "segmentSize": null - }, - { - "encrypted": [ - [79, 153, 243, 175, 218, 242, 199, 216, 36, 134, 108, 167, 110, 240, 21, 10] - ], - "iv": null, - "key": [198, 153, 96, 115, 62, 213, 197, 187, 79, 151, 113, 224, 26, 200, 233, 8, 59, 0, 87, 182, 163, 9, 235, 233], - "modeOfOperation": "ecb", - "plaintext": [ - [121, 247, 250, 27, 233, 197, 249, 67, 203, 96, 45, 94, 101, 122, 153, 229] - ], - "segmentSize": null - }, - { - "encrypted": [ - [43, 105, 119, 171, 72, 34, 231, 67, 159, 177, 49, 6, 176, 169, 181, 205], - [140, 113, 66, 196, 80, 93, 93, 122, 196, 53, 252, 16, 75, 173, 51, 243] - ], - "iv": null, - "key": [123, 62, 68, 166, 123, 141, 54, 207, 241, 86, 66, 173, 216, 253, 177, 176, 141, 223, 43, 183, 142, 95, 16, 134], - "modeOfOperation": "ecb", - "plaintext": [ - [165, 234, 172, 223, 52, 43, 103, 221, 110, 187, 188, 107, 250, 167, 175, 24], - [197, 176, 124, 202, 224, 62, 51, 140, 235, 238, 140, 173, 23, 127, 102, 216] - ], - "segmentSize": null - }, - { - "encrypted": [ - [152, 60, 92, 179, 43, 185, 253, 229, 115, 238, 183, 54, 61, 130, 78, 196], - [47, 192, 63, 102, 45, 49, 66, 179, 227, 233, 226, 35, 7, 27, 99, 20], - [17, 189, 110, 44, 108, 128, 222, 213, 198, 129, 147, 10, 111, 223, 132, 183] - ], - "iv": null, - "key": [232, 90, 86, 253, 25, 240, 31, 98, 48, 40, 136, 118, 158, 230, 232, 210, 110, 235, 117, 204, 89, 195, 207, 62], - "modeOfOperation": "ecb", - "plaintext": [ - [76, 133, 164, 178, 40, 102, 119, 253, 163, 110, 187, 74, 198, 150, 146, 172], - [171, 10, 140, 118, 54, 155, 100, 50, 136, 74, 220, 63, 5, 200, 86, 236], - [159, 80, 51, 49, 248, 187, 151, 82, 47, 163, 130, 165, 235, 244, 107, 167] - ], - "segmentSize": null - }, - { - "encrypted": [ - [64, 112, 193, 203, 238, 191, 138, 13, 8, 164, 15, 173, 152, 234, 227, 37], - [223, 1, 32, 255, 93, 209, 67, 28, 140, 170, 74, 217, 171, 40, 111, 108], - [138, 97, 124, 152, 217, 222, 44, 27, 253, 249, 120, 99, 118, 62, 125, 196], - [181, 135, 154, 201, 84, 189, 81, 147, 127, 72, 188, 232, 83, 249, 89, 242] - ], - "iv": null, - "key": [106, 199, 69, 49, 181, 125, 136, 182, 149, 2, 202, 56, 6, 213, 239, 223, 119, 60, 50, 172, 8, 94, 213, 34], - "modeOfOperation": "ecb", - "plaintext": [ - [65, 152, 47, 139, 85, 62, 216, 124, 32, 146, 208, 184, 91, 57, 211, 173], - [11, 4, 39, 46, 162, 143, 145, 145, 6, 7, 133, 110, 67, 65, 188, 52], - [121, 138, 28, 8, 225, 121, 61, 64, 86, 227, 253, 247, 193, 75, 235, 126], - [83, 48, 5, 94, 57, 246, 226, 200, 12, 248, 42, 145, 3, 174, 212, 115] - ], - "segmentSize": null - }, - { - "encrypted": [ - [99, 45, 107, 229, 205, 91, 95, 150, 60, 101, 15, 25, 71, 48, 2, 180], - [121, 174, 221, 158, 12, 151, 59, 157, 199, 24, 139, 123, 128, 145, 173, 103], - [239, 156, 100, 30, 241, 8, 122, 0, 15, 52, 174, 221, 37, 176, 186, 38], - [231, 32, 6, 51, 57, 111, 90, 231, 9, 10, 214, 71, 199, 238, 241, 69], - [166, 150, 198, 190, 11, 114, 22, 233, 61, 47, 213, 224, 73, 206, 169, 38] - ], - "iv": null, - "key": [88, 16, 143, 55, 8, 230, 63, 91, 161, 83, 199, 242, 243, 146, 114, 187, 219, 44, 227, 105, 96, 69, 214, 26], - "modeOfOperation": "ecb", - "plaintext": [ - [199, 100, 13, 243, 240, 151, 216, 26, 91, 3, 160, 183, 246, 105, 40, 97], - [218, 37, 197, 17, 183, 137, 197, 130, 190, 185, 108, 3, 244, 191, 206, 234], - [168, 67, 41, 115, 208, 49, 77, 96, 41, 139, 182, 207, 33, 141, 11, 14], - [35, 168, 246, 25, 160, 25, 130, 192, 203, 227, 234, 14, 17, 87, 94, 255], - [7, 183, 66, 62, 194, 155, 85, 44, 181, 124, 182, 200, 141, 216, 101, 239] - ], - "segmentSize": null - }, - { - "encrypted": [ - [116, 49, 215, 52, 104, 37, 58, 211, 37, 37, 209, 252, 43, 221, 240, 0], - [250, 234, 132, 52, 2, 30, 228, 185, 22, 189, 118, 227, 245, 91, 4, 87], - [87, 109, 113, 243, 109, 125, 39, 70, 69, 147, 24, 116, 75, 165, 161, 109], - [133, 97, 94, 96, 167, 46, 75, 110, 123, 26, 144, 19, 38, 147, 212, 228], - [81, 85, 23, 18, 188, 174, 85, 52, 228, 97, 55, 38, 93, 222, 96, 3], - [85, 11, 96, 249, 16, 221, 104, 25, 123, 238, 117, 55, 99, 88, 169, 162] - ], - "iv": null, - "key": [7, 26, 91, 166, 232, 254, 37, 233, 185, 128, 20, 11, 54, 201, 40, 108, 172, 218, 128, 48, 52, 81, 246, 102], - "modeOfOperation": "ecb", - "plaintext": [ - [236, 42, 204, 38, 54, 139, 56, 106, 242, 63, 190, 118, 161, 217, 192, 50], - [0, 148, 164, 63, 206, 123, 86, 107, 202, 151, 29, 82, 223, 94, 88, 80], - [147, 69, 60, 105, 100, 109, 179, 253, 132, 1, 92, 168, 76, 205, 103, 157], - [245, 249, 18, 118, 242, 138, 149, 218, 249, 152, 31, 96, 226, 152, 150, 106], - [156, 8, 40, 38, 43, 120, 26, 29, 179, 13, 130, 41, 167, 54, 57, 207], - [240, 167, 199, 58, 156, 46, 133, 223, 151, 4, 240, 188, 47, 81, 50, 36] - ], - "segmentSize": null - }, - { - "encrypted": [ - [41, 178, 248, 75, 33, 203, 132, 185, 148, 94, 126, 122, 171, 24, 208, 214], - [40, 24, 118, 228, 185, 206, 120, 128, 175, 143, 105, 242, 59, 233, 98, 130], - [167, 81, 35, 41, 253, 65, 160, 117, 62, 73, 171, 88, 45, 68, 213, 161], - [236, 193, 192, 166, 8, 232, 183, 135, 155, 241, 178, 236, 110, 8, 22, 154], - [137, 31, 2, 29, 181, 105, 105, 176, 251, 69, 10, 70, 182, 71, 209, 76], - [38, 36, 190, 71, 75, 112, 39, 82, 109, 165, 182, 227, 53, 213, 21, 27], - [207, 156, 120, 79, 88, 3, 15, 112, 59, 151, 207, 6, 100, 99, 150, 250] - ], - "iv": null, - "key": [248, 46, 138, 165, 248, 16, 124, 46, 85, 217, 207, 77, 228, 201, 181, 55, 180, 213, 47, 95, 113, 37, 197, 104], - "modeOfOperation": "ecb", - "plaintext": [ - [233, 37, 135, 136, 165, 59, 62, 242, 5, 240, 237, 126, 114, 231, 4, 34], - [92, 224, 14, 98, 51, 240, 76, 60, 94, 147, 240, 63, 79, 11, 81, 195], - [101, 228, 161, 43, 139, 250, 7, 222, 202, 242, 193, 140, 135, 49, 233, 83], - [51, 123, 19, 173, 52, 249, 15, 238, 88, 10, 129, 197, 253, 203, 168, 26], - [113, 249, 47, 148, 130, 60, 118, 82, 149, 35, 236, 176, 174, 150, 203, 164], - [161, 240, 6, 148, 228, 201, 201, 73, 117, 38, 233, 100, 5, 151, 103, 164], - [15, 144, 224, 91, 250, 35, 235, 210, 251, 169, 134, 71, 82, 39, 42, 42] - ], - "segmentSize": null - }, - { - "encrypted": [ - [221, 254, 206, 56, 6, 182, 124, 75, 33, 169, 219, 149, 43, 162, 111, 129] - ], - "iv": null, - "key": [152, 136, 222, 79, 197, 188, 93, 21, 26, 91, 84, 69, 126, 95, 144, 216, 221, 130, 18, 95, 206, 160, 225, 100, 8, 211, 209, 176, 159, 138, 211, 52], - "modeOfOperation": "ecb", - "plaintext": [ - [129, 85, 184, 122, 24, 32, 216, 37, 56, 185, 129, 185, 203, 218, 118, 51] - ], - "segmentSize": null - }, - { - "encrypted": [ - [171, 187, 255, 199, 143, 153, 121, 24, 177, 115, 174, 25, 50, 240, 163, 72], - [54, 8, 63, 40, 227, 87, 208, 9, 59, 239, 183, 57, 119, 93, 21, 106] - ], - "iv": null, - "key": [242, 95, 195, 42, 94, 197, 23, 170, 29, 159, 11, 13, 129, 75, 95, 130, 39, 36, 13, 253, 157, 254, 244, 76, 63, 1, 109, 226, 203, 77, 60, 227], - "modeOfOperation": "ecb", - "plaintext": [ - [237, 0, 224, 155, 79, 133, 63, 71, 58, 0, 158, 221, 95, 179, 252, 69], - [101, 122, 253, 253, 6, 4, 146, 217, 91, 116, 228, 137, 1, 10, 93, 2] - ], - "segmentSize": null - }, - { - "encrypted": [ - [181, 137, 119, 90, 51, 91, 116, 198, 25, 49, 229, 206, 165, 9, 45, 171], - [141, 212, 40, 164, 183, 234, 250, 170, 37, 135, 199, 207, 231, 17, 80, 238], - [30, 250, 145, 145, 3, 178, 225, 121, 55, 195, 111, 225, 31, 159, 37, 43] - ], - "iv": null, - "key": [188, 157, 44, 56, 60, 110, 3, 61, 46, 160, 90, 56, 91, 102, 186, 82, 49, 246, 23, 27, 120, 85, 74, 135, 158, 108, 13, 29, 102, 103, 161, 29], - "modeOfOperation": "ecb", - "plaintext": [ - [34, 35, 221, 130, 27, 172, 18, 110, 160, 196, 70, 130, 95, 23, 127, 149], - [17, 250, 234, 92, 145, 159, 177, 25, 171, 129, 88, 237, 40, 183, 153, 109], - [55, 72, 175, 182, 251, 145, 46, 193, 24, 187, 89, 40, 81, 172, 87, 110] - ], - "segmentSize": null - }, - { - "encrypted": [ - [90, 230, 219, 60, 112, 16, 80, 50, 187, 84, 40, 58, 2, 113, 132, 169], - [13, 38, 192, 171, 201, 223, 186, 247, 35, 225, 83, 203, 78, 177, 1, 170], - [150, 98, 26, 26, 136, 199, 59, 48, 204, 26, 142, 149, 229, 146, 228, 147], - [55, 117, 214, 228, 144, 64, 25, 6, 234, 185, 182, 104, 15, 241, 156, 113] - ], - "iv": null, - "key": [227, 184, 196, 9, 94, 229, 56, 30, 59, 31, 159, 85, 77, 71, 156, 160, 60, 87, 174, 198, 190, 203, 133, 100, 174, 49, 228, 168, 217, 153, 212, 236], - "modeOfOperation": "ecb", - "plaintext": [ - [86, 76, 48, 28, 155, 97, 101, 104, 146, 34, 220, 15, 249, 40, 91, 3], - [118, 220, 252, 67, 16, 228, 26, 162, 142, 132, 180, 172, 52, 195, 128, 239], - [96, 152, 182, 233, 90, 251, 30, 94, 12, 81, 141, 67, 162, 248, 150, 12], - [164, 229, 251, 9, 30, 107, 87, 178, 101, 121, 190, 114, 178, 247, 38, 208] - ], - "segmentSize": null - }, - { - "encrypted": [ - [91, 26, 210, 89, 224, 229, 23, 204, 54, 30, 4, 32, 61, 208, 3, 125], - [119, 44, 138, 22, 252, 121, 4, 4, 246, 143, 16, 59, 11, 68, 60, 158], - [84, 57, 118, 136, 238, 205, 76, 201, 150, 206, 148, 227, 162, 28, 109, 238], - [113, 68, 94, 48, 84, 237, 50, 159, 242, 56, 66, 144, 230, 41, 152, 211], - [17, 133, 228, 4, 60, 11, 211, 69, 22, 36, 255, 62, 42, 114, 27, 244] - ], - "iv": null, - "key": [102, 75, 123, 214, 62, 247, 28, 187, 8, 112, 33, 153, 50, 91, 32, 255, 88, 76, 186, 76, 24, 85, 116, 50, 55, 17, 57, 176, 203, 147, 85, 236], - "modeOfOperation": "ecb", - "plaintext": [ - [41, 27, 98, 15, 158, 15, 208, 138, 239, 55, 130, 82, 211, 124, 84, 171], - [203, 43, 146, 73, 71, 201, 179, 49, 70, 206, 208, 68, 95, 75, 145, 54], - [246, 230, 224, 93, 199, 207, 48, 18, 43, 44, 228, 186, 174, 250, 61, 87], - [53, 62, 181, 217, 71, 215, 227, 201, 182, 207, 115, 133, 194, 56, 92, 246], - [224, 242, 142, 163, 211, 125, 220, 14, 138, 224, 204, 190, 132, 102, 77, 154] - ], - "segmentSize": null - }, - { - "encrypted": [ - [86, 144, 251, 13, 205, 80, 244, 179, 222, 3, 111, 179, 18, 174, 180, 29], - [34, 26, 35, 36, 32, 81, 96, 136, 72, 139, 48, 60, 190, 41, 4, 16], - [144, 98, 16, 134, 188, 254, 99, 191, 26, 65, 148, 110, 174, 1, 18, 216], - [184, 216, 115, 28, 187, 217, 87, 250, 108, 134, 1, 180, 25, 35, 15, 86], - [53, 144, 155, 20, 135, 7, 58, 190, 5, 103, 164, 113, 169, 200, 73, 244], - [17, 152, 20, 159, 204, 130, 144, 106, 157, 174, 41, 11, 1, 165, 46, 199] - ], - "iv": null, - "key": [36, 233, 241, 48, 207, 147, 200, 223, 115, 79, 200, 119, 37, 35, 161, 254, 248, 14, 50, 83, 184, 196, 81, 125, 172, 218, 46, 146, 9, 127, 78, 223], - "modeOfOperation": "ecb", - "plaintext": [ - [213, 30, 59, 254, 140, 16, 228, 194, 146, 10, 244, 73, 249, 140, 216, 111], - [59, 58, 178, 10, 221, 177, 17, 237, 90, 77, 193, 44, 86, 15, 253, 129], - [60, 45, 229, 88, 71, 135, 64, 198, 162, 145, 101, 129, 79, 11, 65, 194], - [179, 119, 178, 176, 66, 44, 58, 132, 161, 50, 45, 140, 56, 155, 190, 154], - [42, 13, 67, 143, 19, 211, 218, 113, 138, 70, 46, 179, 118, 62, 25, 196], - [39, 129, 105, 15, 150, 216, 65, 38, 201, 38, 192, 63, 198, 168, 201, 34] - ], - "segmentSize": null - }, - { - "encrypted": [ - [251, 232, 84, 176, 44, 104, 19, 173, 160, 201, 119, 205, 226, 57, 96, 86], - [81, 149, 162, 158, 255, 33, 156, 68, 187, 162, 44, 119, 116, 136, 226, 127], - [196, 101, 18, 140, 104, 160, 163, 53, 142, 136, 108, 19, 101, 2, 195, 102], - [55, 143, 65, 25, 224, 221, 242, 173, 210, 200, 67, 0, 138, 135, 70, 115], - [52, 152, 112, 172, 183, 180, 245, 77, 162, 241, 53, 107, 129, 87, 156, 50], - [231, 146, 18, 129, 1, 208, 17, 232, 245, 230, 7, 157, 204, 29, 89, 179], - [172, 241, 52, 174, 0, 75, 115, 139, 70, 240, 102, 104, 11, 137, 32, 254] - ], - "iv": null, - "key": [21, 119, 216, 22, 24, 185, 182, 119, 225, 29, 6, 69, 211, 13, 214, 27, 123, 86, 8, 35, 78, 171, 228, 118, 193, 146, 30, 10, 9, 217, 243, 119], - "modeOfOperation": "ecb", - "plaintext": [ - [139, 79, 65, 81, 227, 198, 250, 93, 88, 149, 195, 73, 5, 102, 144, 120], - [60, 127, 38, 81, 124, 170, 182, 0, 132, 111, 99, 243, 144, 16, 49, 172], - [104, 181, 246, 205, 222, 4, 217, 204, 83, 63, 26, 70, 166, 8, 195, 95], - [153, 105, 66, 122, 100, 3, 172, 32, 73, 32, 71, 105, 246, 150, 9, 123], - [205, 69, 173, 119, 151, 163, 191, 68, 88, 237, 148, 243, 223, 220, 230, 208], - [182, 109, 143, 84, 170, 10, 147, 7, 23, 235, 244, 175, 247, 204, 10, 68], - [191, 125, 187, 247, 197, 109, 165, 252, 252, 225, 143, 197, 210, 45, 233, 31] - ], - "segmentSize": null - }, - { - "encrypted": [ - [143, 117, 13, 66, 72, 189, 72, 112, 217, 82, 210, 215, 106, 201, 174, 203] - ], - "iv": [49, 193, 6, 173, 133, 148, 25, 35, 185, 209, 221, 246, 52, 25, 94, 94], - "key": [146, 107, 201, 126, 185, 196, 18, 126, 211, 15, 252, 143, 70, 167, 218, 184], - "modeOfOperation": "ofb", - "plaintext": [ - [61, 46, 81, 179, 218, 132, 149, 134, 65, 178, 98, 159, 251, 219, 43, 224] - ], - "segmentSize": null - }, - { - "encrypted": [ - [255, 143, 66, 139, 126, 156, 105, 30, 50, 233, 100, 220, 140, 225, 127, 46], - [40, 66, 232, 12, 246, 231, 201, 131, 234, 170, 14, 177, 121, 62, 107, 230] - ], - "iv": [217, 65, 110, 115, 16, 42, 113, 148, 165, 212, 81, 230, 126, 71, 207, 95], - "key": [161, 74, 0, 27, 40, 74, 89, 107, 202, 203, 104, 86, 223, 141, 102, 197], - "modeOfOperation": "ofb", - "plaintext": [ - [34, 25, 218, 26, 153, 132, 247, 158, 158, 217, 208, 207, 195, 214, 72, 208], - [159, 5, 215, 181, 192, 171, 88, 62, 110, 185, 59, 223, 60, 181, 106, 81] - ], - "segmentSize": null - }, - { - "encrypted": [ - [204, 200, 189, 173, 39, 20, 63, 207, 157, 107, 52, 160, 5, 39, 34, 184], - [152, 159, 74, 17, 38, 67, 140, 12, 109, 226, 7, 174, 6, 176, 201, 54], - [229, 4, 226, 156, 67, 12, 72, 0, 198, 98, 187, 128, 145, 224, 0, 16] - ], - "iv": [55, 55, 175, 186, 172, 61, 44, 3, 34, 29, 215, 223, 22, 59, 117, 10], - "key": [122, 122, 61, 106, 176, 81, 90, 203, 49, 6, 92, 199, 51, 215, 228, 153], - "modeOfOperation": "ofb", - "plaintext": [ - [59, 231, 3, 22, 162, 38, 249, 7, 114, 101, 48, 214, 167, 243, 33, 34], - [91, 201, 76, 144, 205, 118, 46, 65, 160, 156, 51, 196, 96, 236, 52, 198], - [159, 27, 156, 92, 133, 154, 161, 21, 33, 83, 240, 13, 162, 194, 136, 115] - ], - "segmentSize": null - }, - { - "encrypted": [ - [105, 151, 127, 75, 5, 61, 200, 57, 68, 210, 10, 142, 215, 249, 112, 175], - [205, 75, 52, 59, 62, 238, 212, 64, 149, 246, 95, 63, 149, 140, 134, 130], - [194, 148, 50, 231, 92, 172, 38, 231, 220, 106, 104, 115, 23, 185, 161, 149], - [161, 235, 99, 173, 14, 44, 29, 128, 101, 1, 154, 123, 178, 179, 93, 39] - ], - "iv": [177, 249, 193, 222, 112, 134, 59, 221, 26, 25, 72, 17, 239, 2, 247, 109], - "key": [192, 191, 32, 38, 246, 30, 44, 173, 201, 27, 1, 147, 255, 200, 152, 179], - "modeOfOperation": "ofb", - "plaintext": [ - [166, 117, 134, 21, 5, 35, 138, 82, 11, 158, 42, 36, 34, 114, 139, 85], - [205, 167, 178, 254, 49, 151, 125, 97, 246, 4, 29, 187, 111, 190, 224, 235], - [79, 52, 197, 102, 114, 108, 131, 188, 177, 190, 24, 194, 229, 254, 178, 128], - [69, 39, 193, 133, 77, 85, 219, 249, 23, 174, 229, 218, 186, 216, 96, 91] - ], - "segmentSize": null - }, - { - "encrypted": [ - [255, 132, 52, 239, 86, 103, 87, 207, 92, 195, 88, 96, 125, 226, 131, 11], - [100, 77, 109, 7, 176, 94, 103, 208, 154, 255, 207, 48, 197, 103, 220, 126], - [164, 113, 97, 252, 33, 84, 180, 135, 208, 114, 126, 175, 34, 127, 180, 180], - [133, 164, 85, 119, 26, 198, 109, 36, 82, 56, 97, 176, 240, 250, 242, 177], - [193, 240, 183, 200, 66, 161, 81, 42, 36, 182, 27, 38, 13, 38, 121, 140] - ], - "iv": [147, 167, 236, 160, 63, 159, 158, 44, 141, 203, 240, 17, 51, 198, 208, 8], - "key": [32, 98, 51, 149, 177, 52, 204, 235, 134, 132, 218, 168, 146, 210, 49, 100], - "modeOfOperation": "ofb", - "plaintext": [ - [121, 211, 221, 32, 202, 152, 126, 38, 165, 214, 50, 71, 32, 61, 158, 194], - [70, 40, 35, 35, 5, 7, 12, 224, 49, 184, 133, 227, 3, 193, 80, 255], - [18, 106, 228, 219, 204, 138, 1, 250, 162, 12, 124, 1, 79, 146, 217, 88], - [158, 161, 48, 239, 119, 165, 64, 225, 252, 178, 61, 250, 225, 180, 137, 112], - [252, 36, 1, 157, 147, 207, 174, 59, 81, 137, 6, 91, 151, 8, 131, 193] - ], - "segmentSize": null - }, - { - "encrypted": [ - [230, 209, 191, 176, 1, 78, 72, 3, 113, 9, 32, 178, 209, 120, 215, 34], - [11, 59, 51, 210, 25, 2, 143, 25, 115, 195, 169, 31, 122, 105, 69, 169], - [31, 116, 228, 192, 3, 176, 45, 242, 65, 254, 167, 54, 112, 33, 231, 92], - [104, 19, 20, 249, 50, 189, 20, 225, 230, 183, 232, 30, 93, 51, 194, 156], - [13, 77, 184, 166, 245, 60, 35, 205, 124, 10, 244, 147, 195, 243, 101, 193], - [89, 233, 90, 17, 48, 39, 81, 45, 129, 153, 91, 249, 15, 215, 144, 39] - ], - "iv": [43, 114, 33, 142, 75, 226, 174, 190, 214, 115, 132, 121, 105, 66, 167, 115], - "key": [0, 206, 213, 165, 160, 53, 90, 149, 224, 34, 99, 205, 227, 120, 132, 93], - "modeOfOperation": "ofb", - "plaintext": [ - [92, 129, 113, 26, 124, 114, 169, 141, 39, 107, 151, 107, 220, 123, 6, 254], - [36, 200, 79, 31, 128, 139, 169, 94, 20, 28, 134, 42, 243, 233, 78, 109], - [66, 117, 183, 7, 177, 202, 157, 86, 14, 146, 37, 70, 2, 60, 212, 107], - [224, 205, 100, 105, 109, 73, 231, 96, 114, 148, 147, 182, 239, 202, 222, 225], - [88, 198, 91, 90, 31, 15, 197, 60, 81, 37, 66, 3, 145, 161, 145, 98], - [54, 60, 229, 65, 35, 90, 119, 40, 161, 59, 159, 120, 147, 211, 69, 201] - ], - "segmentSize": null - }, - { - "encrypted": [ - [213, 78, 133, 107, 8, 242, 7, 171, 226, 1, 107, 222, 57, 93, 13, 222], - [225, 13, 78, 53, 249, 25, 122, 239, 35, 245, 136, 154, 91, 196, 254, 27], - [240, 184, 5, 252, 120, 221, 125, 243, 4, 190, 44, 229, 94, 178, 74, 161], - [136, 181, 6, 75, 220, 38, 160, 239, 44, 1, 36, 82, 107, 37, 118, 33], - [183, 174, 78, 240, 237, 17, 44, 234, 254, 219, 129, 187, 96, 92, 127, 60], - [187, 1, 50, 118, 190, 89, 107, 176, 94, 156, 186, 127, 244, 132, 173, 173], - [77, 7, 178, 231, 201, 12, 85, 51, 138, 90, 88, 132, 117, 239, 234, 40] - ], - "iv": [28, 209, 61, 135, 83, 75, 196, 243, 191, 173, 171, 61, 147, 27, 186, 81], - "key": [20, 153, 187, 66, 245, 197, 185, 154, 46, 210, 151, 158, 135, 208, 216, 23], - "modeOfOperation": "ofb", - "plaintext": [ - [227, 101, 20, 92, 148, 249, 87, 103, 0, 104, 75, 61, 209, 237, 170, 82], - [156, 99, 5, 170, 161, 129, 227, 193, 176, 122, 85, 224, 17, 103, 42, 109], - [39, 31, 168, 226, 129, 190, 129, 252, 202, 175, 73, 216, 108, 107, 209, 174], - [251, 204, 48, 121, 81, 218, 39, 184, 39, 141, 93, 136, 249, 137, 34, 129], - [165, 155, 13, 96, 101, 103, 120, 99, 16, 145, 210, 157, 235, 3, 27, 1], - [64, 115, 228, 30, 224, 159, 52, 217, 131, 52, 82, 250, 105, 160, 233, 201], - [122, 234, 199, 64, 137, 173, 253, 43, 125, 45, 184, 49, 114, 28, 219, 95] - ], - "segmentSize": null - }, - { - "encrypted": [ - [35, 218, 81, 224, 164, 251, 111, 62, 78, 1, 121, 212, 12, 162, 137, 104] - ], - "iv": [0, 200, 133, 254, 13, 13, 150, 35, 126, 45, 246, 165, 110, 105, 219, 199], - "key": [104, 157, 112, 153, 214, 46, 247, 129, 149, 45, 24, 47, 209, 229, 53, 18, 18, 147, 213, 224, 7, 88, 26, 77], - "modeOfOperation": "ofb", - "plaintext": [ - [226, 217, 159, 34, 18, 46, 117, 194, 107, 127, 189, 177, 92, 237, 70, 248] - ], - "segmentSize": null - }, - { - "encrypted": [ - [18, 106, 7, 46, 192, 246, 244, 82, 166, 43, 244, 230, 90, 128, 245, 26], - [192, 0, 191, 72, 232, 76, 169, 199, 1, 110, 225, 12, 195, 63, 28, 150] - ], - "iv": [61, 209, 126, 97, 148, 117, 51, 217, 76, 184, 145, 192, 84, 174, 207, 170], - "key": [158, 162, 238, 170, 85, 60, 17, 161, 3, 63, 232, 16, 236, 119, 195, 214, 146, 11, 82, 72, 175, 198, 86, 66], - "modeOfOperation": "ofb", - "plaintext": [ - [121, 25, 30, 73, 34, 235, 171, 123, 64, 150, 193, 162, 63, 115, 254, 57], - [38, 2, 158, 13, 19, 209, 105, 234, 128, 185, 20, 215, 135, 105, 131, 62] - ], - "segmentSize": null - }, - { - "encrypted": [ - [109, 232, 38, 132, 98, 211, 75, 45, 186, 223, 231, 25, 137, 150, 111, 103], - [93, 238, 0, 121, 155, 235, 166, 183, 133, 125, 209, 161, 180, 209, 217, 76], - [43, 194, 131, 157, 142, 22, 56, 105, 205, 242, 239, 9, 103, 123, 29, 216] - ], - "iv": [218, 81, 233, 219, 17, 247, 95, 110, 203, 117, 217, 168, 124, 6, 241, 84], - "key": [76, 68, 103, 102, 143, 176, 247, 93, 82, 226, 77, 117, 50, 156, 253, 87, 45, 138, 224, 48, 111, 61, 224, 48], - "modeOfOperation": "ofb", - "plaintext": [ - [74, 44, 205, 92, 67, 11, 249, 155, 226, 14, 218, 208, 201, 231, 134, 80], - [141, 184, 131, 180, 134, 30, 200, 21, 48, 200, 159, 58, 192, 188, 111, 117], - [121, 86, 208, 158, 222, 131, 169, 117, 140, 175, 241, 155, 83, 216, 243, 82] - ], - "segmentSize": null - }, - { - "encrypted": [ - [129, 201, 247, 102, 34, 155, 189, 53, 231, 172, 210, 160, 167, 97, 244, 118], - [136, 228, 84, 210, 144, 109, 39, 251, 116, 61, 178, 170, 23, 142, 155, 120], - [59, 87, 169, 205, 234, 81, 218, 83, 56, 69, 217, 134, 235, 135, 38, 58], - [126, 153, 79, 135, 203, 223, 156, 75, 103, 185, 132, 113, 72, 201, 154, 112] - ], - "iv": [95, 233, 146, 83, 115, 133, 92, 102, 186, 139, 200, 18, 228, 129, 240, 212], - "key": [219, 119, 22, 157, 30, 46, 186, 92, 219, 99, 74, 106, 237, 144, 76, 47, 129, 248, 4, 189, 221, 204, 238, 210], - "modeOfOperation": "ofb", - "plaintext": [ - [135, 14, 46, 72, 255, 213, 204, 153, 188, 194, 28, 171, 58, 203, 21, 109], - [198, 81, 106, 108, 180, 176, 236, 151, 225, 178, 130, 241, 45, 131, 178, 84], - [145, 255, 180, 220, 134, 196, 48, 97, 64, 22, 25, 101, 57, 12, 215, 95], - [150, 255, 234, 193, 57, 136, 188, 117, 106, 229, 250, 166, 85, 19, 28, 138] - ], - "segmentSize": null - }, - { - "encrypted": [ - [14, 149, 203, 96, 111, 42, 235, 59, 218, 65, 92, 76, 255, 72, 45, 234], - [61, 32, 0, 39, 183, 126, 66, 249, 238, 59, 67, 204, 83, 67, 200, 175], - [138, 158, 103, 207, 21, 14, 85, 87, 20, 9, 115, 241, 88, 228, 146, 75], - [54, 215, 116, 214, 16, 13, 38, 61, 81, 125, 147, 173, 40, 38, 11, 120], - [188, 79, 77, 19, 88, 207, 104, 101, 114, 98, 152, 30, 29, 118, 128, 115] - ], - "iv": [7, 0, 36, 215, 235, 234, 110, 215, 252, 175, 89, 46, 171, 177, 146, 193], - "key": [202, 123, 26, 109, 67, 87, 54, 22, 53, 33, 242, 29, 1, 146, 158, 136, 146, 164, 163, 178, 23, 51, 107, 205], - "modeOfOperation": "ofb", - "plaintext": [ - [76, 231, 61, 62, 234, 26, 13, 73, 249, 63, 79, 180, 203, 31, 91, 162], - [243, 70, 202, 133, 106, 125, 160, 178, 175, 130, 19, 105, 208, 40, 74, 174], - [187, 175, 154, 253, 78, 174, 148, 225, 185, 62, 146, 132, 116, 26, 70, 168], - [156, 57, 80, 208, 142, 21, 24, 200, 147, 145, 85, 243, 70, 39, 189, 113], - [145, 109, 161, 203, 21, 126, 99, 130, 167, 62, 231, 216, 58, 82, 117, 229] - ], - "segmentSize": null - }, - { - "encrypted": [ - [91, 82, 0, 176, 192, 252, 58, 4, 120, 48, 163, 215, 226, 115, 163, 101], - [80, 182, 201, 123, 179, 94, 179, 106, 166, 101, 149, 124, 72, 93, 171, 174], - [56, 243, 20, 156, 246, 108, 58, 237, 178, 5, 31, 63, 197, 31, 207, 109], - [42, 252, 62, 105, 190, 111, 141, 68, 40, 101, 62, 84, 237, 49, 29, 2], - [58, 72, 14, 151, 218, 123, 227, 27, 109, 139, 235, 86, 192, 151, 150, 230], - [171, 96, 66, 172, 163, 147, 112, 217, 252, 57, 210, 45, 127, 164, 228, 123] - ], - "iv": [246, 101, 140, 62, 108, 26, 206, 45, 161, 188, 1, 14, 75, 184, 47, 186], - "key": [140, 173, 35, 224, 30, 220, 106, 246, 1, 54, 135, 2, 109, 160, 111, 255, 144, 88, 85, 246, 30, 77, 221, 152], - "modeOfOperation": "ofb", - "plaintext": [ - [192, 208, 185, 175, 166, 6, 99, 112, 115, 31, 204, 199, 27, 239, 221, 16], - [241, 81, 56, 192, 0, 77, 173, 60, 223, 88, 180, 226, 107, 161, 189, 165], - [176, 98, 91, 191, 247, 243, 120, 159, 109, 34, 66, 202, 210, 212, 136, 108], - [208, 86, 124, 60, 125, 225, 50, 100, 32, 82, 248, 216, 83, 128, 70, 237], - [55, 202, 104, 133, 31, 232, 14, 125, 124, 197, 50, 17, 128, 199, 143, 32], - [109, 105, 135, 193, 10, 94, 67, 206, 129, 138, 180, 136, 9, 213, 4, 56] - ], - "segmentSize": null - }, - { - "encrypted": [ - [196, 148, 56, 177, 103, 7, 253, 145, 209, 100, 4, 174, 235, 169, 54, 213], - [124, 215, 60, 1, 218, 45, 204, 237, 255, 14, 90, 87, 236, 82, 231, 70], - [174, 187, 226, 132, 183, 19, 127, 136, 150, 203, 110, 95, 126, 189, 131, 28], - [252, 214, 124, 250, 242, 14, 129, 61, 231, 100, 13, 228, 132, 226, 158, 190], - [225, 165, 133, 91, 216, 44, 54, 19, 110, 144, 163, 100, 44, 10, 229, 46], - [153, 188, 106, 94, 55, 104, 214, 17, 80, 225, 203, 162, 152, 219, 123, 54], - [24, 103, 139, 22, 14, 233, 172, 2, 135, 49, 185, 99, 92, 49, 77, 113] - ], - "iv": [254, 204, 26, 106, 197, 120, 207, 71, 211, 14, 168, 218, 133, 233, 247, 181], - "key": [151, 88, 195, 13, 32, 97, 20, 153, 148, 19, 202, 20, 216, 42, 171, 142, 69, 242, 118, 181, 124, 86, 109, 117], - "modeOfOperation": "ofb", - "plaintext": [ - [16, 165, 203, 122, 192, 49, 77, 64, 36, 229, 215, 76, 163, 132, 252, 202], - [100, 49, 212, 32, 32, 101, 159, 245, 48, 147, 164, 31, 213, 115, 84, 143], - [157, 27, 237, 224, 134, 238, 232, 223, 106, 143, 91, 158, 99, 94, 230, 45], - [161, 62, 174, 255, 34, 83, 134, 228, 177, 200, 104, 6, 247, 252, 183, 45], - [99, 207, 155, 1, 9, 6, 54, 185, 55, 143, 80, 196, 177, 142, 0, 243], - [0, 205, 232, 153, 138, 177, 198, 219, 219, 99, 97, 67, 53, 120, 179, 29], - [14, 143, 74, 226, 234, 22, 49, 229, 159, 53, 64, 165, 39, 170, 160, 171] - ], - "segmentSize": null - }, - { - "encrypted": [ - [81, 133, 126, 225, 184, 209, 166, 142, 164, 232, 192, 49, 48, 215, 38, 241] - ], - "iv": [38, 58, 133, 19, 240, 20, 244, 160, 32, 136, 192, 176, 204, 141, 148, 42], - "key": [59, 171, 45, 149, 198, 162, 79, 39, 151, 253, 12, 6, 91, 71, 145, 80, 76, 151, 169, 233, 10, 251, 213, 7, 110, 233, 29, 5, 241, 181, 139, 27], - "modeOfOperation": "ofb", - "plaintext": [ - [157, 194, 50, 5, 116, 6, 132, 14, 149, 169, 118, 181, 212, 201, 157, 115] - ], - "segmentSize": null - }, - { - "encrypted": [ - [188, 48, 86, 209, 118, 100, 62, 30, 85, 136, 153, 248, 21, 84, 174, 43], - [234, 175, 182, 114, 74, 37, 130, 21, 109, 5, 167, 182, 230, 252, 160, 212] - ], - "iv": [218, 45, 231, 244, 219, 22, 240, 221, 76, 246, 186, 221, 247, 210, 14, 41], - "key": [174, 126, 140, 137, 131, 118, 63, 240, 143, 184, 82, 127, 8, 152, 10, 7, 105, 167, 88, 138, 9, 17, 136, 189, 201, 192, 52, 167, 194, 119, 255, 245], - "modeOfOperation": "ofb", - "plaintext": [ - [223, 71, 115, 98, 228, 91, 178, 239, 162, 20, 10, 132, 204, 40, 35, 223], - [42, 176, 226, 130, 82, 191, 166, 114, 239, 10, 30, 109, 174, 128, 147, 149] - ], - "segmentSize": null - }, - { - "encrypted": [ - [20, 188, 3, 111, 107, 129, 188, 162, 229, 144, 143, 251, 33, 119, 61, 126], - [253, 122, 249, 183, 84, 159, 66, 169, 80, 195, 172, 231, 112, 107, 247, 145], - [179, 11, 185, 97, 16, 6, 164, 184, 110, 75, 93, 69, 116, 130, 185, 162] - ], - "iv": [187, 34, 183, 249, 46, 63, 95, 136, 215, 254, 165, 216, 152, 243, 155, 253], - "key": [115, 218, 205, 236, 94, 172, 110, 163, 164, 63, 187, 223, 197, 188, 66, 126, 139, 117, 255, 127, 43, 121, 209, 211, 199, 109, 169, 177, 62, 26, 194, 80], - "modeOfOperation": "ofb", - "plaintext": [ - [213, 77, 179, 63, 15, 214, 196, 91, 244, 138, 146, 81, 29, 193, 3, 108], - [133, 75, 15, 48, 114, 63, 39, 176, 5, 59, 145, 29, 201, 111, 74, 48], - [24, 86, 204, 172, 218, 134, 238, 159, 129, 243, 95, 8, 78, 99, 83, 194] - ], - "segmentSize": null - }, - { - "encrypted": [ - [141, 106, 255, 77, 44, 183, 231, 108, 204, 18, 147, 34, 176, 15, 40, 134], - [154, 79, 120, 10, 193, 228, 167, 224, 96, 234, 53, 72, 190, 234, 34, 26], - [195, 78, 42, 159, 99, 102, 146, 169, 231, 249, 44, 125, 1, 228, 221, 47], - [155, 69, 129, 172, 47, 117, 96, 170, 116, 27, 210, 5, 66, 22, 213, 117] - ], - "iv": [254, 143, 183, 230, 113, 172, 61, 15, 149, 60, 21, 139, 177, 63, 215, 188], - "key": [223, 165, 221, 204, 123, 199, 246, 103, 97, 193, 102, 170, 31, 16, 29, 80, 208, 173, 8, 18, 212, 103, 153, 93, 7, 180, 65, 226, 237, 16, 73, 188], - "modeOfOperation": "ofb", - "plaintext": [ - [148, 183, 28, 172, 196, 233, 14, 72, 65, 250, 160, 183, 123, 172, 58, 24], - [176, 146, 77, 152, 55, 51, 157, 206, 52, 32, 186, 103, 201, 20, 189, 6], - [23, 83, 158, 71, 43, 155, 166, 138, 217, 231, 242, 88, 119, 32, 71, 169], - [90, 248, 242, 213, 95, 36, 244, 53, 74, 103, 237, 118, 139, 126, 35, 113] - ], - "segmentSize": null - }, - { - "encrypted": [ - [172, 34, 202, 233, 38, 44, 2, 91, 116, 73, 82, 179, 125, 173, 172, 51], - [131, 160, 136, 253, 236, 222, 18, 6, 37, 105, 187, 253, 139, 228, 2, 174], - [104, 163, 48, 217, 61, 126, 48, 89, 182, 217, 210, 142, 84, 206, 128, 180], - [168, 107, 114, 142, 64, 82, 162, 77, 4, 251, 244, 74, 43, 124, 184, 226], - [88, 32, 143, 239, 158, 180, 239, 208, 7, 214, 212, 93, 185, 159, 104, 212] - ], - "iv": [147, 229, 153, 204, 241, 146, 175, 177, 168, 173, 154, 216, 147, 20, 110, 217], - "key": [95, 36, 249, 70, 238, 167, 11, 128, 221, 96, 87, 125, 115, 2, 46, 210, 66, 93, 24, 72, 153, 229, 5, 113, 194, 131, 123, 12, 71, 216, 247, 205], - "modeOfOperation": "ofb", - "plaintext": [ - [51, 144, 73, 54, 74, 1, 146, 211, 97, 81, 133, 170, 138, 74, 220, 186], - [180, 51, 167, 179, 49, 70, 221, 254, 219, 160, 174, 117, 169, 136, 209, 197], - [30, 119, 30, 36, 22, 120, 115, 210, 128, 185, 126, 78, 66, 201, 85, 96], - [50, 225, 63, 46, 229, 193, 137, 8, 45, 252, 235, 188, 144, 101, 217, 147], - [72, 181, 200, 8, 0, 252, 123, 77, 230, 32, 1, 10, 50, 91, 85, 96] - ], - "segmentSize": null - }, - { - "encrypted": [ - [28, 66, 88, 137, 52, 23, 235, 198, 68, 78, 20, 27, 60, 167, 140, 146], - [223, 224, 100, 31, 60, 49, 130, 9, 83, 175, 201, 43, 153, 242, 102, 161], - [76, 2, 131, 181, 171, 241, 236, 40, 90, 44, 55, 173, 77, 110, 150, 64], - [246, 76, 132, 116, 64, 13, 222, 29, 106, 76, 252, 208, 39, 212, 60, 182], - [230, 100, 181, 236, 204, 113, 179, 5, 216, 130, 127, 61, 119, 14, 122, 18], - [68, 74, 2, 121, 123, 42, 69, 45, 148, 43, 161, 54, 25, 237, 75, 62] - ], - "iv": [109, 153, 206, 16, 228, 28, 233, 183, 216, 65, 69, 17, 92, 145, 194, 239], - "key": [56, 225, 132, 73, 114, 69, 245, 85, 178, 20, 72, 179, 80, 199, 14, 83, 26, 0, 145, 106, 204, 66, 84, 181, 46, 187, 103, 239, 165, 253, 117, 16], - "modeOfOperation": "ofb", - "plaintext": [ - [37, 25, 71, 198, 231, 72, 133, 72, 61, 222, 143, 115, 151, 105, 164, 141], - [43, 51, 203, 24, 16, 49, 10, 67, 22, 168, 96, 12, 234, 170, 221, 85], - [10, 89, 9, 160, 23, 120, 28, 255, 49, 228, 169, 5, 199, 33, 39, 40], - [249, 20, 141, 1, 45, 175, 192, 113, 158, 66, 62, 27, 249, 40, 57, 235], - [214, 81, 201, 146, 144, 109, 62, 134, 253, 80, 254, 16, 225, 239, 217, 93], - [159, 225, 194, 110, 134, 213, 41, 61, 59, 3, 119, 46, 204, 167, 157, 237] - ], - "segmentSize": null - }, - { - "encrypted": [ - [90, 91, 216, 54, 126, 182, 213, 57, 200, 30, 244, 175, 205, 133, 208, 142], - [59, 252, 51, 24, 174, 150, 173, 35, 210, 181, 131, 0, 180, 63, 126, 145], - [18, 56, 213, 36, 75, 16, 207, 185, 190, 156, 72, 47, 227, 227, 162, 204], - [175, 0, 108, 8, 154, 239, 106, 192, 137, 45, 243, 185, 149, 171, 92, 157], - [111, 169, 189, 245, 101, 76, 13, 169, 77, 208, 68, 247, 184, 197, 124, 68], - [159, 168, 131, 18, 101, 176, 155, 113, 6, 89, 228, 80, 238, 5, 135, 87], - [242, 246, 33, 1, 0, 78, 31, 219, 59, 96, 185, 224, 122, 177, 6, 3] - ], - "iv": [236, 148, 77, 48, 188, 90, 121, 25, 121, 25, 60, 216, 133, 211, 120, 1], - "key": [20, 68, 162, 60, 150, 232, 237, 118, 72, 229, 135, 65, 152, 254, 145, 36, 106, 124, 115, 113, 53, 17, 107, 57, 141, 75, 201, 17, 102, 91, 3, 68], - "modeOfOperation": "ofb", - "plaintext": [ - [8, 189, 248, 189, 236, 221, 163, 228, 241, 192, 143, 176, 83, 170, 189, 106], - [201, 159, 204, 32, 159, 76, 53, 181, 152, 76, 176, 32, 14, 57, 252, 100], - [55, 207, 144, 18, 122, 165, 120, 192, 102, 158, 168, 101, 177, 165, 77, 214], - [208, 236, 157, 133, 133, 58, 254, 122, 14, 121, 47, 118, 43, 58, 33, 203], - [37, 172, 13, 23, 233, 135, 80, 38, 170, 133, 11, 200, 163, 192, 58, 87], - [89, 129, 214, 68, 191, 144, 117, 77, 242, 253, 91, 26, 218, 220, 4, 216], - [195, 181, 238, 210, 129, 205, 116, 162, 181, 8, 209, 46, 223, 240, 70, 144] - ], - "segmentSize": null - } -] diff --git a/node_modules/aes-js/test/test.html b/node_modules/aes-js/test/test.html deleted file mode 100644 index 348d45a..0000000 --- a/node_modules/aes-js/test/test.html +++ /dev/null @@ -1,104 +0,0 @@ - - -
- - - - diff --git a/node_modules/aes-js/~/.grip/style-cache/github-fff66249e57e12b5b264967f6a4d21f8923d59247f86c4419d1e3092660fe54b.css b/node_modules/aes-js/~/.grip/style-cache/github-fff66249e57e12b5b264967f6a4d21f8923d59247f86c4419d1e3092660fe54b.css deleted file mode 100644 index 835de95..0000000 --- a/node_modules/aes-js/~/.grip/style-cache/github-fff66249e57e12b5b264967f6a4d21f8923d59247f86c4419d1e3092660fe54b.css +++ /dev/null @@ -1,3 +0,0 @@ -/*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}input,select,textarea,button{font:13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"}body{min-width:1020px;font:13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";color:#333;background-color:#fff}a{color:#4183c4;text-decoration:none}a:hover,a:active{text-decoration:underline}hr,.rule{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid #ddd}hr:before,.rule:before{display:table;content:""}hr:after,.rule:after{display:table;clear:both;content:""}h1,h2,h3,h4,h5,h6{margin-top:15px;margin-bottom:15px;line-height:1.1}h1{font-size:30px}h2{font-size:21px}h3{font-size:16px}h4{font-size:14px}h5{font-size:12px}h6{font-size:11px}small{font-size:90%}blockquote{margin:0}.lead{margin-bottom:30px;font-size:20px;font-weight:300;color:#555}.text-muted{color:#999}.text-danger{color:#bd2c00}.text-emphasized{font-weight:bold;color:#333}ul,ol{padding:0;margin-top:0;margin-bottom:0}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}dd{margin-left:0}tt,code{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px}pre{margin-top:0;margin-bottom:0;font:12px Consolas, "Liberation Mono", Menlo, Courier, monospace}.container{width:980px;margin-right:auto;margin-left:auto}.container:before{display:table;content:""}.container:after{display:table;clear:both;content:""}.columns{margin-right:-10px;margin-left:-10px}.columns:before{display:table;content:""}.columns:after{display:table;clear:both;content:""}.column{float:left;padding-right:10px;padding-left:10px}.one-third{width:33%}.two-thirds{width:67%}.one-fourth{width:25%}.one-half{width:50%}.three-fourths{width:75%}.one-fifth{width:20%}.four-fifths{width:80%}.single-column{padding-right:10px;padding-left:10px}.table-column{display:table-cell;width:1%;padding-right:10px;padding-left:10px;vertical-align:top}fieldset{padding:0;margin:0;border:0}label{font-size:13px;font-weight:bold}.form-control,input[type="text"],input[type="password"],input[type="email"],input[type="number"],input[type="tel"],input[type="url"],textarea{min-height:34px;padding:7px 8px;font-size:13px;color:#333;vertical-align:middle;background-color:#fff;background-repeat:no-repeat;background-position:right center;border:1px solid #ccc;border-radius:3px;outline:none;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075)}.form-control.focus,.form-control:focus,input[type="text"].focus,input[type="text"]:focus,.focused .drag-and-drop,input[type="password"].focus,input[type="password"]:focus,input[type="email"].focus,input[type="email"]:focus,input[type="number"].focus,input[type="number"]:focus,input[type="tel"].focus,input[type="tel"]:focus,input[type="url"].focus,input[type="url"]:focus,textarea.focus,textarea:focus{border-color:#51a7e8;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(81,167,232,0.5)}input.input-contrast,.input-contrast{background-color:#fafafa}input.input-contrast:focus,.input-contrast:focus{background-color:#fff}::-webkit-input-placeholder,:-moz-placeholder{color:#aaa}::-webkit-validation-bubble-message{font-size:12px;color:#fff;background:#9c2400;border:0;border-radius:3px;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.1)}input::-webkit-validation-bubble-icon{display:none}::-webkit-validation-bubble-arrow{background-color:#9c2400;border:solid 1px #9c2400;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.1)}input.input-mini{min-height:26px;padding-top:4px;padding-bottom:4px;font-size:12px}input.input-large{padding:6px 10px;font-size:16px}.input-block{display:block;width:100%}.input-monospace{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace}dl.form{margin:15px 0}dl.form input[type="text"],dl.form input[type="password"],dl.form input[type="email"],dl.form input[type="url"],dl.form textarea{background-color:#fafafa}dl.form input[type="text"]:focus,dl.form .focused .drag-and-drop,.focused dl.form .drag-and-drop,dl.form input[type="password"]:focus,dl.form input[type="email"]:focus,dl.form input[type="url"]:focus,dl.form textarea:focus{background-color:#fff}dl.form>dt{margin:0 0 6px}dl.form>dt label{position:relative}dl.form.flattened>dt{float:left;margin:0;line-height:32px}dl.form.flattened>dd{line-height:32px}dl.form>dd input[type="text"],dl.form>dd input[type="password"],dl.form>dd input[type="email"],dl.form>dd input[type="url"]{width:440px;max-width:100%;margin-right:5px;background-position-x:98%}dl.form>dd input.shorter{width:130px}dl.form>dd input.short{width:250px}dl.form>dd input.long{width:100%}dl.form>dd textarea{width:100%;height:200px;min-height:200px}dl.form>dd textarea.short{height:50px;min-height:50px}dl.form>dd h4{margin:4px 0 0}dl.form>dd h4.is-error{color:#bd2c00}dl.form>dd h4.is-success{color:#6cc644}dl.form>dd h4+p.note{margin-top:0}dl.form.required>dt>label:after{padding-left:5px;color:#9f1006;content:"*"}.note{min-height:17px;margin:4px 0 2px;font-size:12px;color:#777}.note .spinner{margin-right:3px;vertical-align:middle}.form-checkbox{padding-left:20px;margin:15px 0;vertical-align:middle}.form-checkbox label em.highlight{position:relative;left:-4px;padding:2px 4px;font-style:normal;background:#fffbdc;border-radius:3px}.form-checkbox input[type=checkbox],.form-checkbox input[type=radio]{float:left;margin:2px 0 0 -20px;vertical-align:middle}.form-checkbox .note{display:block;margin:0;font-size:12px;font-weight:normal;color:#666}dl.form .success,dl.form .error,dl.form .indicator{display:none;font-size:12px;font-weight:bold}dl.form.loading{opacity:0.5}dl.form.loading .indicator{display:inline}dl.form.loading .spinner{display:inline-block;vertical-align:middle}dl.form.successful .success{display:inline;color:#390}dl.form.errored>dt label{color:#900}dl.form.errored .error{display:inline;color:#900}dl.form.errored dd.error,dl.form.errored dd.warning{display:inline-block;padding:5px;font-size:11px;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}dl.form.warn .warning{display:inline;color:#900}dl.form.warn dd.warning{display:inline-block;padding:5px;font-size:11px;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}dl.form .form-note{display:inline-block;padding:5px;margin-top:-1px;font-size:11px;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.hfields{margin:15px 0}.hfields:before{display:table;content:""}.hfields:after{display:table;clear:both;content:""}.hfields dl.form{float:left;margin:0 30px 0 0}.hfields dl.form>dt label{display:inline-block;margin:5px 0 0;color:#666}.hfields dl.form>dt label img{position:relative;top:-2px}.hfields .button{float:left;margin:28px 25px 0 -20px}.hfields select{margin-top:5px}html.no-dnd-uploads .drag-and-drop{min-height:32px}html.no-dnd-uploads .drag-and-drop .default{display:none}html.no-dnd-uploads .upload-enabled textarea{border-bottom:1px solid #ddd}.drag-and-drop{padding:7px 10px;margin:0;font-size:13px;line-height:16px;color:#aaa;background-color:#fafafa;border:1px solid #ccc;border-top:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.drag-and-drop .default,.drag-and-drop .loading,.drag-and-drop .error{display:none}.drag-and-drop .error{color:#bd2c00}.drag-and-drop img{vertical-align:top}.is-default .drag-and-drop .default{display:inline-block}.is-uploading .drag-and-drop .loading{display:inline-block}.is-bad-file .drag-and-drop .bad-file{display:inline-block}.is-too-big .drag-and-drop .too-big{display:inline-block}.is-empty .drag-and-drop .empty{display:inline-block}.is-bad-browser .drag-and-drop .bad-browser{display:inline-block}.drag-and-drop-error-info{font-weight:normal;color:#aaa}.drag-and-drop-error-info a{color:#4183c4}.is-failed .drag-and-drop .failed-request{display:inline-block}.manual-file-chooser{position:absolute;width:240px;padding:5px;margin-left:-80px;cursor:pointer;opacity:0.0001}.manual-file-chooser:hover+.manual-file-chooser-text{text-decoration:underline}.button .manual-file-chooser{top:0;padding:0;line-height:34px}.upload-enabled textarea{display:block;border-bottom:1px dashed #ddd;border-bottom-right-radius:0;border-bottom-left-radius:0}.focused .drag-and-drop{box-shadow:rgba(81,167,232,0.5) 0 0 3px}.dragover textarea,.dragover .drag-and-drop{box-shadow:#c9ff00 0 0 3px}.previewable-comment-form{position:relative}.previewable-comment-form .tabnav{position:relative;padding:10px 10px 0}.previewable-comment-form .comment{border:1px solid #cacaca}.previewable-comment-form .comment-header .comment-header-actions{display:none}.previewable-comment-form .comment-form-error{margin-bottom:10px}.previewable-comment-form .write-content,.previewable-comment-form .preview-content{display:none;padding:0 10px 10px}.previewable-comment-form.write-selected .write-content,.previewable-comment-form.preview-selected .preview-content{display:block}.previewable-comment-form textarea{display:block;width:100%;min-height:100px;max-height:500px;padding:10px;resize:vertical}.previewable-comment-form textarea.fullscreen-contents:focus{border:0;box-shadow:none}div.composer{margin-top:0;border:0}.composer .comment-form-textarea{height:200px;min-height:200px}.composer-infobar{height:35px;padding:0 10px;margin-bottom:10px;border-bottom:1px solid #eee}.composer .tabnav{margin:0 0 10px}.infobar-widget.milestone{position:relative;float:right}.infobar-widget.milestone .select-menu-modal-holder{right:0}.infobar-widget.assignee{float:left}.infobar-widget.assignee .css-truncate-target{max-width:110px}.infobar-widget .text,.infobar-widget .avatar,.infobar-widget .select-menu{display:inline-block;vertical-align:top}.infobar-widget .text{margin-top:3px}.infobar-widget .text a{font-weight:bold;color:#333}.infobar-widget .progress-bar{width:200px;overflow:hidden;line-height:18px}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.input-group{display:table}.input-group input{position:relative;width:100%}.input-group input:focus{z-index:2}.input-group input[type="text"]+.minibutton{margin-left:0}.input-group.inline{display:inline-table}.input-group input,.input-group-button{display:table-cell}.input-group-button{width:1%;vertical-align:middle}.input-group input:first-child,.input-group-button:first-child .button,.input-group-button:first-child .minibutton{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-button:first-child .button,.input-group-button:first-child .minibutton{margin-right:-1px}.input-group input:last-child,.input-group-button:last-child .button,.input-group-button:last-child .minibutton{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-button:last-child .button,.input-group-button:last-child .minibutton{margin-left:-1px}h2.account{margin:15px 0 0;font-size:18px;font-weight:normal;color:#666}p.explain{position:relative;font-size:12px;color:#666}p.explain strong{color:#333}p.explain .octicon{margin-right:5px;color:#bbb}p.explain .minibutton{top:-4px;float:right}.options-content p.explain{padding:10px 10px 0;margin-top:0;border-top:1px solid #ddd}.form-actions{padding-bottom:5px;text-align:right}.form-actions .cancel{float:left;margin-top:5px}.form-actions .button.cancel{margin-top:0;margin-left:2px}.form-actions .minibutton.cancel{margin-top:0}.form-actions .optional{float:left;padding-top:8px;margin-right:15px}.form-actions .optional span.text{padding:0 3px}.form-actions .optional input{position:relative;top:-1px}.form-warning{padding:8px 10px;margin:10px 0;font-size:14px;color:#333;background:#ffffe2;border:1px solid #e7e4c2;border-radius:4px}.form-warning p{margin:0;line-height:1.5}.form-warning strong{color:#000}.form-warning a{font-weight:bold}.status-indicator{font:normal normal 16px/1 "octicons";display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased;margin-left:5px}.status-indicator-success:before{color:#6cc644;content:"\f03a"}.status-indicator-failed:before{color:#bd2c00;content:"\f02d"}.clearfix:before{display:table;content:""}.clearfix:after{display:table;clear:both;content:""}.right{float:right}.left{float:left}.text-right{text-align:right}.text-left{text-align:left}.danger{color:#c00}.mute{color:#000}.text-diff-added{color:#55a532}.text-diff-deleted{color:#bd2c00}.text-open,.text-success{color:#6cc644}.text-closed{color:#bd2c00}.text-reverted{color:#bd2c00}.text-merged{color:#6e5494}.text-renamed{color:#fffa5d}.text-pending{color:#cea61b}.text-error,.text-failure{color:#bd2c00}.muted-link{color:#777}.muted-link:hover{color:#4183c4;text-decoration:none}.hidden{display:none}.warning{padding:0.5em;margin-bottom:0.8em;font-weight:bold;background-color:#fffccc}.error_box{padding:1em;font-weight:bold;background-color:#ffebe8;border:1px solid #dd3c10}.flash-messages{margin-top:15px;margin-bottom:15px}.flash,.flash-global{position:relative;font-size:14px;line-height:1.6;color:#246;background-color:#e2eef9;border:solid 1px #bac6d3}.flash.flash-warn,.flash-global.flash-warn{color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}.flash.flash-error,.flash-global.flash-error{color:#911;background-color:#fcdede;border-color:#d2b2b2}.flash .flash-close,.flash-global .flash-close{float:right;padding:17px;margin-top:-15px;margin-right:-15px;margin-left:20px;color:inherit;text-decoration:none;cursor:pointer;opacity:0.6}.flash .flash-close:hover,.flash-global .flash-close:hover{opacity:1}.flash p:last-child,.flash-global p:last-child{margin-bottom:0}.flash .flash-action,.flash-global .flash-action{float:right;margin-top:-4px;margin-left:20px}.flash a,.flash-global a{font-weight:bold}.flash{padding:15px;border-radius:3px}.flash+.flash{margin-top:5px}.flash-with-icon{padding-left:40px}.flash-with-icon>.octicon{float:left;margin-top:3px;margin-left:-25px}.flash-global{padding:10px;border-width:0 0 1px}.flash-global h2,.flash-global p{margin-top:0;margin-bottom:0;font-size:14px;line-height:1.4}.flash-global .flash-action{margin-top:5px}.flash-title{margin-top:0;margin-bottom:5px}.avatar{display:inline-block;overflow:hidden;line-height:1;vertical-align:middle;border-radius:3px}.avatar-small{border-radius:2px}.avatar-link{float:left;line-height:1}.avatar-group-item{display:inline-block;margin-bottom:3px}.avatar-parent-child{position:relative}.avatar-child{position:absolute;right:-15%;bottom:-9%;border-radius:2px;box-shadow:-2px -2px 0 rgba(255,255,255,0.8)}.blankslate{position:relative;padding:30px;text-align:center;background-color:#fafafa;border:1px solid #e5e5e5;border-radius:3px;box-shadow:inset 0 0 10px rgba(0,0,0,0.05)}.blankslate.clean-background{background:none;border:0;box-shadow:none}.blankslate.capped{border-radius:0 0 3px 3px}.blankslate.spacious{padding:100px 60px 120px}.blankslate.has-fixed-width{width:485px;margin:0 auto}.blankslate.large-format h3{margin:0.75em 0;font-size:20px}.blankslate.large-format p{font-size:16px}.blankslate.large-format p.has-fixed-width{width:540px;margin:0 auto;text-align:left}.blankslate.large-format .mega-octicon{width:40px;height:40px;font-size:40px;color:#aaa}.blankslate.large-format .octicon-inbox{font-size:48px;line-height:40px}.blankslate code{padding:2px 5px 3px;font-size:14px;background:#fff;border:1px solid #eee;border-radius:3px}.blankslate>.mega-octicon{color:#aaa}.blankslate .mega-octicon+.mega-octicon{margin-left:10px}.tabnav+.blankslate{margin-top:20px}.blankslate .context-loader.large-format-loader{padding-top:50px}.spinner-forking{display:block;margin:20px auto 40px}.forking-repo{margin:40px 0;text-align:center}.forking-repo h3{margin-bottom:10px;font-size:28px;font-weight:300}.forking-repo h4{margin:0 0 30px;font-size:16px;font-weight:300}.counter{display:inline-block;padding:2px 5px;font-size:11px;font-weight:bold;line-height:1;color:#777;background-color:#eee;border-radius:20px}.button,.minibutton{position:relative;display:inline-block;padding:7px 12px;font-size:13px;font-weight:bold;color:#333;text-shadow:0 1px 0 rgba(255,255,255,0.9);white-space:nowrap;vertical-align:middle;cursor:pointer;background-color:#eee;background-image:-webkit-linear-gradient(#fcfcfc, #eee);background-image:linear-gradient(#fcfcfc, #eee);background-repeat:repeat-x;border:1px solid #d5d5d5;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none}.button i,.minibutton i{font-style:normal;font-weight:500;opacity:0.6}.button:focus,.minibutton:focus{text-decoration:none;border-color:#51a7e8;outline:none;box-shadow:0 0 5px rgba(81,167,232,0.5)}.button:hover,.button:active,.button.zeroclipboard-is-hover,.button.zeroclipboard-is-active,.minibutton:hover,.minibutton:active,.minibutton.zeroclipboard-is-hover,.minibutton.zeroclipboard-is-active{text-decoration:none;background-color:#ddd;background-image:-webkit-linear-gradient(#eee, #ddd);background-image:linear-gradient(#eee, #ddd);background-repeat:repeat-x;border-color:#ccc}.button:active,.button.selected,.button.selected:hover,.button.zeroclipboard-is-active,.minibutton:active,.minibutton.selected,.minibutton.selected:hover,.minibutton.zeroclipboard-is-active{background-color:#dcdcdc;background-image:none;border-color:#b5b5b5;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.button:disabled,.button:disabled:hover,.button.disabled,.button.disabled:hover,.minibutton:disabled,.minibutton:disabled:hover,.minibutton.disabled,.minibutton.disabled:hover{color:rgba(102,102,102,0.5);text-shadow:0 1px 0 rgba(255,255,255,0.9);cursor:default;background-color:rgba(229,229,229,0.5);background-image:none;border-color:rgba(197,197,197,0.5);box-shadow:none}.button.primary,.minibutton.primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#60b044;background-image:-webkit-linear-gradient(#8add6d, #60b044);background-image:linear-gradient(#8add6d, #60b044);background-repeat:repeat-x;border-color:#5ca941}.button.primary:hover,.minibutton.primary:hover{color:#fff;background-color:#569e3d;background-image:-webkit-linear-gradient(#79d858, #569e3d);background-image:linear-gradient(#79d858, #569e3d);background-repeat:repeat-x;border-color:#4a993e}.button.primary:active,.button.primary.selected,.minibutton.primary:active,.minibutton.primary.selected{background-color:#569e3d;background-image:none;border-color:#418737}.button.primary:disabled,.button.primary:disabled:hover,.button.primary.disabled,.button.primary.disabled:hover,.minibutton.primary:disabled,.minibutton.primary:disabled:hover,.minibutton.primary.disabled,.minibutton.primary.disabled:hover{color:#fefefe;text-shadow:0 -1px 0 rgba(39,39,39,0.25);background-color:#add39f;background-image:-webkit-linear-gradient(#c3ecb4, #add39f);background-image:linear-gradient(#c3ecb4, #add39f);background-repeat:repeat-x;border-color:#b9dcac #b9dcac #a7c89b}.button.danger,.minibutton.danger{color:#900}.button.danger:hover,.minibutton.danger:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.3);background-color:#b33630;background-image:-webkit-linear-gradient(#dc5f59, #b33630);background-image:linear-gradient(#dc5f59, #b33630);background-repeat:repeat-x;border-color:#cd504a}.button.danger:active,.button.danger.selected,.minibutton.danger:active,.minibutton.danger.selected{color:#fff;background-color:#b33630;background-image:none;border-color:#9f312c}.button.danger:disabled,.button.danger:disabled:hover,.button.danger.disabled,.button.danger.disabled:hover,.minibutton.danger:disabled,.minibutton.danger:disabled:hover,.minibutton.danger.disabled,.minibutton.danger.disabled:hover{color:#cb7f7f;text-shadow:0 1px 0 rgba(255,255,255,0.9);background-color:#efefef;background-image:-webkit-linear-gradient(#fefefe, #efefef);background-image:linear-gradient(#fefefe, #efefef);background-repeat:repeat-x;border-color:#e1e1e1}.button.with-count,.minibutton.with-count{float:left;border-top-right-radius:0;border-bottom-right-radius:0}.button>.octicon,.minibutton>.octicon{vertical-align:-1px}.button>.octicon-arrow-right,.minibutton>.octicon-arrow-right{float:right;margin-left:5px}.minibutton>.octicon-arrow-right{margin-top:4px}.minibutton{padding:0 10px;line-height:24px}.hidden-text-expander{display:block}.hidden-text-expander.inline{position:relative;top:-1px;display:inline-block;margin-left:5px;line-height:0}.hidden-text-expander a{display:inline-block;height:12px;padding:0 5px;font-size:12px;font-weight:bold;line-height:6px;color:#555;text-decoration:none;vertical-align:middle;background:#ddd;border-radius:1px}.hidden-text-expander a:hover{text-decoration:none;background-color:#ccc}.hidden-text-expander a:active{color:#fff;background-color:#4183c4}.social-count{float:left;padding:0 7px;font-size:11px;font-weight:bold;line-height:24px;color:#333;vertical-align:middle;background-color:#fff;border:1px solid #ddd;border-left:0;border-top-right-radius:3px;border-bottom-right-radius:3px}.social-count:hover{color:#4183c4;text-decoration:none;cursor:pointer}.button-block{display:block;width:100%;text-align:center}.button-group{display:inline-block;vertical-align:middle}.button-group:before{display:table;content:""}.button-group:after{display:table;clear:both;content:""}.button-group .button,.button-group .minibutton,.button-group .button-outline{position:relative;float:left;border-radius:0}.button-group .button:first-child,.button-group .minibutton:first-child,.button-group .button-outline:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.button-group .button:last-child,.button-group .minibutton:last-child,.button-group .button-outline:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.button-group .button:hover,.button-group .button:focus,.button-group .button:active,.button-group .button.selected,.button-group .minibutton:hover,.button-group .minibutton:focus,.button-group .minibutton:active,.button-group .minibutton.selected,.button-group .button-outline:hover,.button-group .button-outline:focus,.button-group .button-outline:active,.button-group .button-outline.selected{z-index:2}.button-group .button+.button,.button-group .minibutton+.minibutton{margin-left:-1px;box-shadow:inset 1px 0 0 rgba(255,255,255,0.2)}.button-group .button+.button:hover,.button-group .minibutton+.minibutton:hover{box-shadow:none}.button-group .button+.button:active,.button-group .button+.button.selected,.button-group .minibutton+.minibutton:active,.button-group .minibutton+.minibutton.selected{box-shadow:inset 0 3px 5px rgba(0,0,0,0.15)}.button-group .button-outline+.button-outline,.button-group .button_to+.button_to{margin-left:-1px}.button-group .button_to{float:left}.button-group .button_to .button,.button-group .button_to .minibutton,.button-group .button_to .button-outline{border-radius:0}.button-group .button_to:first-child .button,.button-group .button_to:first-child .minibutton,.button-group .button_to:first-child .button-outline{border-top-left-radius:3px;border-bottom-left-radius:3px}.button-group .button_to:last-child .button,.button-group .button_to:last-child .minibutton,.button-group .button_to:last-child .button-outline{border-top-right-radius:3px;border-bottom-right-radius:3px}.button-group+.button-group,.button-group+.button,.button-group+.minibutton{margin-left:5px}.button-link{display:inline;padding:0;font-size:inherit;color:#4183c4;white-space:nowrap;cursor:pointer;background-color:transparent;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none}.button-link:hover,.button-link:focus{text-decoration:underline}.button-link:focus{outline:none}.button-outline{display:inline-block;padding:7px 12px;font-size:13px;font-weight:bold;color:#4183c4;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #e5e5e5;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none}.button-outline:hover,.button-outline.zeroclipboard-is-hover{color:#fff;text-decoration:none;background-color:#4183c4;border-color:#4183c4}.button-outline:disabled,.button-outline.disabled,.button-outline:disabled:hover,.button-outline.disabled:hover{color:#777;cursor:default;background-color:#f5f5f5;border-color:#e5e5e5}.menu{margin-bottom:15px;list-style:none;background-color:#fff;border:1px solid #d8d8d8;border-radius:3px}.menu-item{position:relative;display:block;padding:8px 10px;text-shadow:0 1px 0 #fff;border-bottom:1px solid #eee}.menu-item:first-child{border-top:0;border-top-right-radius:2px;border-top-left-radius:2px}.menu-item:first-child:before{border-top-left-radius:2px}.menu-item:last-child{border-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.menu-item:last-child:before{border-bottom-left-radius:2px}.menu-item:hover{text-decoration:none;background-color:#f9f9f9}.menu-item.selected{font-weight:bold;color:#222;cursor:default;background-color:#fff}.menu-item.selected:before{position:absolute;top:0;left:0;bottom:0;width:2px;content:"";background-color:#d26911}.menu-item .octicon{margin-right:5px;width:16px;color:#333;text-align:center}.menu-item .counter{float:right;margin-left:5px}.menu-item .menu-warning{float:right;color:#d26911}.menu-item .avatar{float:left;margin-right:5px}.menu-item.alert .counter{color:#bd2c00}.menu-heading{display:block;padding:8px 10px;margin-top:0;margin-bottom:0;font-size:13px;font-weight:bold;line-height:20px;color:#555;background-color:#f7f7f7;border-bottom:1px solid #eee}.menu-heading:hover{text-decoration:none}.menu-heading:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.menu-heading:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px;border-bottom:0}.tabnav{margin:0 0 15px;border-bottom:1px solid #ddd}.tabnav .counter{margin-left:5px}.tabnav-tabs{display:inline-block}.tabnav-tabs>li{display:inline-block;margin-bottom:-1px}.tabnav-tab{display:inline-block;padding:8px 12px 7px;font-size:14px;line-height:20px;color:#666;text-decoration:none;border:1px solid transparent;border-bottom:0}.tabnav-tab.selected{color:#333;background-color:#fff;border-color:#ddd;border-radius:3px 3px 0 0}.tabnav-tab:hover{text-decoration:none}.tabnav-right{position:relative;float:right}.tabnav-widget{display:inline-block;vertical-align:top}.tabnav-widget+.tabnav-tabs{margin-left:10px}.tabnav-widget.search .spinner{position:absolute;top:7px;left:-22px;margin-right:8px;vertical-align:middle}.tabnav-widget.search .search-link{display:inline-block;height:26px;padding-right:5px;font-size:13px;font-weight:200;line-height:26px;color:#666;vertical-align:top}.tabnav-widget.search .fieldwrap{display:inline-block;height:26px;border-radius:4px}.tabnav-widget.search .fieldwrap>input,.tabnav-widget.search .fieldwrap>button{display:inline-block}.tabnav-widget.search input{min-height:26px;padding:0 4px;font-size:12px;vertical-align:top;border-radius:3px 0 0 3px}.tabnav-widget.search .minibutton{position:relative;height:24px;padding:0 8px;margin-left:0;vertical-align:top;border-left:0;border-radius:0 3px 3px 0}.tabnav-widget.search .minibutton:hover{color:#fff}.tabnav-widget.text{margin-top:12px;font-size:11px;color:#666}.tabnav-extras{display:inline-block;margin-left:10px}.tabnav-extras .octicon{float:left;margin-top:-1px;margin-right:5px}.tabnav-extras:hover{color:#4183c4;text-decoration:none}.filter-list{list-style-type:none}.filter-list.small .filter-item{padding:4px 10px;margin:0 0 2px;font-size:12px}.filter-list.pjax-active .filter-item{color:#777;background-color:transparent}.filter-list.pjax-active .filter-item.pjax-active{color:#fff;background-color:#4183c4}.filter-item{position:relative;display:block;padding:8px 10px;margin-bottom:5px;overflow:hidden;font-size:14px;color:#777;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-radius:3px}.filter-item:hover{text-decoration:none;background-color:#eee}.filter-item.selected{color:#fff;background-color:#4183c4}.filter-item.selected .octicon-remove-close{float:right;opacity:0.8}.filter-item .count{float:right;font-weight:bold}.filter-item .bar{position:absolute;top:2px;right:0;bottom:2px;z-index:-1;display:inline-block;background-color:#f1f1f1}.state{display:inline-block;padding:4px 8px;font-weight:bold;line-height:20px;color:#fff;text-align:center;border-radius:3px;background-color:#999}.state-open,.state-proposed,.state-reopened{background-color:#6cc644}.state-merged{background-color:#6e5494}.state-closed{background-color:#bd2c00}.state-renamed{background-color:#fffa5d}.tooltipped{position:relative}.tooltipped:after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font:normal normal 11px/1.5 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:rgba(0,0,0,0.8);border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tooltipped:before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:rgba(0,0,0,0.8);pointer-events:none;content:"";border:5px solid transparent}.tooltipped:hover:before,.tooltipped:hover:after,.tooltipped:active:before,.tooltipped:active:after,.tooltipped:focus:before,.tooltipped:focus:after{display:inline-block;text-decoration:none}.tooltipped-multiline:hover:after,.tooltipped-multiline:active:after,.tooltipped-multiline:focus:after{display:table-cell}.tooltipped-s:after,.tooltipped-se:after,.tooltipped-sw:after{top:100%;right:50%;margin-top:5px}.tooltipped-s:before,.tooltipped-se:before,.tooltipped-sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,0.8)}.tooltipped-se:after{right:auto;left:50%;margin-left:-15px}.tooltipped-sw:after{margin-right:-15px}.tooltipped-n:after,.tooltipped-ne:after,.tooltipped-nw:after{right:50%;bottom:100%;margin-bottom:5px}.tooltipped-n:before,.tooltipped-ne:before,.tooltipped-nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,0.8)}.tooltipped-ne:after{right:auto;left:50%;margin-left:-15px}.tooltipped-nw:after{margin-right:-15px}.tooltipped-s:after,.tooltipped-n:after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%)}.tooltipped-w:after{right:100%;bottom:50%;margin-right:5px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%)}.tooltipped-w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,0.8)}.tooltipped-e:after{bottom:50%;left:100%;margin-left:5px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%)}.tooltipped-e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,0.8)}.tooltipped-multiline:after{width:-moz-max-content;width:-webkit-max-content;max-width:250px;word-break:break-word;word-wrap:normal;white-space:pre-line;border-collapse:separate}.tooltipped-multiline.tooltipped-s:after,.tooltipped-multiline.tooltipped-n:after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltipped-multiline.tooltipped-w:after,.tooltipped-multiline.tooltipped-e:after{right:100%}@media screen and (min-width: 0\0){.tooltipped-multiline:after{width:250px}}.tooltipped-sticky:before,.tooltipped-sticky:after{display:inline-block}.tooltipped-sticky.tooltipped-multiline:after{display:table-cell}.fullscreen-overlay-enabled.dark-theme .tooltipped:after{color:#000;background:rgba(255,255,255,0.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-s:before,.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-se:before,.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-sw:before{border-bottom-color:rgba(255,255,255,0.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-n:before,.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-ne:before,.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-nw:before{border-top-color:rgba(255,255,255,0.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-e:before{border-right-color:rgba(255,255,255,0.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-w:before{border-left-color:rgba(255,255,255,0.8)}.flex-table{display:table}.flex-table-item{display:table-cell;width:1%;white-space:nowrap;vertical-align:middle}.flex-table-item-primary{width:99%}.css-truncate.css-truncate-target,.css-truncate .css-truncate-target{display:inline-block;max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.css-truncate.expandable.zeroclipboard-is-hover .css-truncate-target,.css-truncate.expandable.zeroclipboard-is-hover.css-truncate-target,.css-truncate.expandable:hover .css-truncate-target,.css-truncate.expandable:hover.css-truncate-target{max-width:10000px !important}.sunken-menu{position:relative;padding-top:15px;padding-bottom:15px;background-image:-webkit-linear-gradient(left, #f6f6f6 0%, #fff 8px);background-image:linear-gradient(to right, #f6f6f6 0%, #fff 8px);box-shadow:inset 1px 0 0 #eee}.sunken-menu:before,.sunken-menu:after{position:absolute;left:0;width:100%;height:15px;content:"";background-color:transparent}.sunken-menu:before{top:0;background-color:transparent;background-image:-webkit-linear-gradient(#fff, rgba(255,255,255,0));background-image:linear-gradient(#fff, rgba(255,255,255,0))}.sunken-menu:after{bottom:0;background-color:transparent;background-image:-webkit-linear-gradient(rgba(255,255,255,0), #fff);background-image:linear-gradient(rgba(255,255,255,0), #fff)}.sunken-menu-separator{position:relative;height:5px;margin:8px 0 6px 1px;background-image:-webkit-radial-gradient(farthest-side at left top, #f4f4f4, rgba(244,244,244,0));background-image:radial-gradient(farthest-side at left top, #f4f4f4, rgba(244,244,244,0))}.sunken-menu-separator:before{position:absolute;top:0;width:100%;height:1px;content:"";background-image:-webkit-linear-gradient(left, #eee 70%, #fff 100%);background-image:linear-gradient(to right, #eee 70%, #fff 100%);border-top:1px solid #eee\9}.sunken-menu-group{list-style-type:none}.sunken-menu-item{display:block;padding:8px 10px;margin-top:5px;margin-bottom:5px;border:1px solid transparent;outline:0}.sunken-menu-item .counter{position:absolute;top:8px;right:10px}.sunken-menu-item .octicon{left:-1px;width:16px;color:#999;text-align:center}.sunken-menu-item .mini-loader{position:absolute;top:9px;left:11px;display:none}.sunken-menu-item:focus,.sunken-menu-item:hover{text-decoration:none;box-shadow:inset 2px 0 0 #ccc}.sunken-menu-item:focus .octicon,.sunken-menu-item:hover .octicon{color:#333}.sunken-menu-item.selected{font-weight:bold;color:#333;background-color:#fff;border-color:#eee #eee #eee transparent;border-radius:0 3px 3px 0;box-shadow:1px 1px 3px rgba(0,0,0,0.05)}.sunken-menu-item.selected:after{position:absolute;top:0;right:0;bottom:0;width:3px;content:"";background-color:#d26911;border-radius:0 3px 3px 0}.sunken-menu-item.selected .octicon{color:#333}.sunken-menu-item.is-loading .mini-loader{display:inline-block;-webkit-animation:mini-nav-loader, 0.4s, forwards;animation:mini-nav-loader, 0.4s, forwards}.sunken-menu-item.is-loading .octicon{color:#fff}@-webkit-keyframes mini-nav-loader{0%, - 90%{opacity:0}100%{opacity:1}}@keyframes mini-nav-loader{0%, - 90%{opacity:0}100%{opacity:1}}@font-face{font-family:'octicons';src:url(/assets/octicons/octicons/octicons-d5329fb2f700a56fe0b9ae5c301fabbdf5d77c1293b1fa1d35de9357530e2326.eot?#iefix) format("embedded-opentype"),url(/assets/octicons/octicons/octicons-70c2cafa59738740d1ad6d66d46342bafdc6ca63ade3e44c24bed1e6f7b1db71.woff) format("woff"),url(/assets/octicons/octicons/octicons-39c6d7739e9153806ef211d2a0f75044891634c4f67425e6250b0d8c6283c2c7.ttf) format("truetype"),url(/assets/octicons/octicons/octicons-c11b1be24a2862c1dc8880c22867d8d01315c9d7da5167c42119eb1bcce2e33c.svg#octicons) format("svg");font-weight:normal;font-style:normal}.octicon,.mega-octicon{font:normal normal normal 16px/1 octicons;display:inline-block;text-decoration:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mega-octicon{font-size:32px}.octicon-alert:before{content:'\f02d'}.octicon-alignment-align:before{content:'\f08a'}.octicon-alignment-aligned-to:before{content:'\f08e'}.octicon-alignment-unalign:before{content:'\f08b'}.octicon-arrow-down:before{content:'\f03f'}.octicon-arrow-left:before{content:'\f040'}.octicon-arrow-right:before{content:'\f03e'}.octicon-arrow-small-down:before{content:'\f0a0'}.octicon-arrow-small-left:before{content:'\f0a1'}.octicon-arrow-small-right:before{content:'\f071'}.octicon-arrow-small-up:before{content:'\f09f'}.octicon-arrow-up:before{content:'\f03d'}.octicon-beer:before{content:'\f069'}.octicon-book:before{content:'\f007'}.octicon-bookmark:before{content:'\f07b'}.octicon-briefcase:before{content:'\f0d3'}.octicon-broadcast:before{content:'\f048'}.octicon-browser:before{content:'\f0c5'}.octicon-bug:before{content:'\f091'}.octicon-calendar:before{content:'\f068'}.octicon-check:before{content:'\f03a'}.octicon-checklist:before{content:'\f076'}.octicon-chevron-down:before{content:'\f0a3'}.octicon-chevron-left:before{content:'\f0a4'}.octicon-chevron-right:before{content:'\f078'}.octicon-chevron-up:before{content:'\f0a2'}.octicon-circle-slash:before{content:'\f084'}.octicon-circuit-board:before{content:'\f0d6'}.octicon-clippy:before{content:'\f035'}.octicon-clock:before{content:'\f046'}.octicon-cloud-download:before{content:'\f00b'}.octicon-cloud-upload:before{content:'\f00c'}.octicon-code:before{content:'\f05f'}.octicon-color-mode:before{content:'\f065'}.octicon-comment-add:before,.octicon-comment:before{content:'\f02b'}.octicon-comment-discussion:before{content:'\f04f'}.octicon-credit-card:before{content:'\f045'}.octicon-dash:before{content:'\f0ca'}.octicon-dashboard:before{content:'\f07d'}.octicon-database:before{content:'\f096'}.octicon-device-camera:before{content:'\f056'}.octicon-device-camera-video:before{content:'\f057'}.octicon-device-desktop:before{content:'\f27c'}.octicon-device-mobile:before{content:'\f038'}.octicon-diff:before{content:'\f04d'}.octicon-diff-added:before{content:'\f06b'}.octicon-diff-ignored:before{content:'\f099'}.octicon-diff-modified:before{content:'\f06d'}.octicon-diff-removed:before{content:'\f06c'}.octicon-diff-renamed:before{content:'\f06e'}.octicon-ellipsis:before{content:'\f09a'}.octicon-eye-unwatch:before,.octicon-eye-watch:before,.octicon-eye:before{content:'\f04e'}.octicon-file-binary:before{content:'\f094'}.octicon-file-code:before{content:'\f010'}.octicon-file-directory:before{content:'\f016'}.octicon-file-media:before{content:'\f012'}.octicon-file-pdf:before{content:'\f014'}.octicon-file-submodule:before{content:'\f017'}.octicon-file-symlink-directory:before{content:'\f0b1'}.octicon-file-symlink-file:before{content:'\f0b0'}.octicon-file-text:before{content:'\f011'}.octicon-file-zip:before{content:'\f013'}.octicon-flame:before{content:'\f0d2'}.octicon-fold:before{content:'\f0cc'}.octicon-gear:before{content:'\f02f'}.octicon-gift:before{content:'\f042'}.octicon-gist:before{content:'\f00e'}.octicon-gist-secret:before{content:'\f08c'}.octicon-git-branch-create:before,.octicon-git-branch-delete:before,.octicon-git-branch:before{content:'\f020'}.octicon-git-commit:before{content:'\f01f'}.octicon-git-compare:before{content:'\f0ac'}.octicon-git-merge:before{content:'\f023'}.octicon-git-pull-request-abandoned:before,.octicon-git-pull-request:before{content:'\f009'}.octicon-globe:before{content:'\f0b6'}.octicon-graph:before{content:'\f043'}.octicon-heart:before{content:'\2665'}.octicon-history:before{content:'\f07e'}.octicon-home:before{content:'\f08d'}.octicon-horizontal-rule:before{content:'\f070'}.octicon-hourglass:before{content:'\f09e'}.octicon-hubot:before{content:'\f09d'}.octicon-inbox:before{content:'\f0cf'}.octicon-info:before{content:'\f059'}.octicon-issue-closed:before{content:'\f028'}.octicon-issue-opened:before{content:'\f026'}.octicon-issue-reopened:before{content:'\f027'}.octicon-jersey:before{content:'\f019'}.octicon-jump-down:before{content:'\f072'}.octicon-jump-left:before{content:'\f0a5'}.octicon-jump-right:before{content:'\f0a6'}.octicon-jump-up:before{content:'\f073'}.octicon-key:before{content:'\f049'}.octicon-keyboard:before{content:'\f00d'}.octicon-law:before{content:'\f0d8'}.octicon-light-bulb:before{content:'\f000'}.octicon-link:before{content:'\f05c'}.octicon-link-external:before{content:'\f07f'}.octicon-list-ordered:before{content:'\f062'}.octicon-list-unordered:before{content:'\f061'}.octicon-location:before{content:'\f060'}.octicon-gist-private:before,.octicon-mirror-private:before,.octicon-git-fork-private:before,.octicon-lock:before{content:'\f06a'}.octicon-logo-github:before{content:'\f092'}.octicon-mail:before{content:'\f03b'}.octicon-mail-read:before{content:'\f03c'}.octicon-mail-reply:before{content:'\f051'}.octicon-mark-github:before{content:'\f00a'}.octicon-markdown:before{content:'\f0c9'}.octicon-megaphone:before{content:'\f077'}.octicon-mention:before{content:'\f0be'}.octicon-microscope:before{content:'\f089'}.octicon-milestone:before{content:'\f075'}.octicon-mirror-public:before,.octicon-mirror:before{content:'\f024'}.octicon-mortar-board:before{content:'\f0d7'}.octicon-move-down:before{content:'\f0a8'}.octicon-move-left:before{content:'\f074'}.octicon-move-right:before{content:'\f0a9'}.octicon-move-up:before{content:'\f0a7'}.octicon-mute:before{content:'\f080'}.octicon-no-newline:before{content:'\f09c'}.octicon-octoface:before{content:'\f008'}.octicon-organization:before{content:'\f037'}.octicon-package:before{content:'\f0c4'}.octicon-paintcan:before{content:'\f0d1'}.octicon-pencil:before{content:'\f058'}.octicon-person-add:before,.octicon-person-follow:before,.octicon-person:before{content:'\f018'}.octicon-pin:before{content:'\f041'}.octicon-playback-fast-forward:before{content:'\f0bd'}.octicon-playback-pause:before{content:'\f0bb'}.octicon-playback-play:before{content:'\f0bf'}.octicon-playback-rewind:before{content:'\f0bc'}.octicon-plug:before{content:'\f0d4'}.octicon-repo-create:before,.octicon-gist-new:before,.octicon-file-directory-create:before,.octicon-file-add:before,.octicon-plus:before{content:'\f05d'}.octicon-podium:before{content:'\f0af'}.octicon-primitive-dot:before{content:'\f052'}.octicon-primitive-square:before{content:'\f053'}.octicon-pulse:before{content:'\f085'}.octicon-puzzle:before{content:'\f0c0'}.octicon-question:before{content:'\f02c'}.octicon-quote:before{content:'\f063'}.octicon-radio-tower:before{content:'\f030'}.octicon-repo-delete:before,.octicon-repo:before{content:'\f001'}.octicon-repo-clone:before{content:'\f04c'}.octicon-repo-force-push:before{content:'\f04a'}.octicon-gist-fork:before,.octicon-repo-forked:before{content:'\f002'}.octicon-repo-pull:before{content:'\f006'}.octicon-repo-push:before{content:'\f005'}.octicon-rocket:before{content:'\f033'}.octicon-rss:before{content:'\f034'}.octicon-ruby:before{content:'\f047'}.octicon-screen-full:before{content:'\f066'}.octicon-screen-normal:before{content:'\f067'}.octicon-search-save:before,.octicon-search:before{content:'\f02e'}.octicon-server:before{content:'\f097'}.octicon-settings:before{content:'\f07c'}.octicon-log-in:before,.octicon-sign-in:before{content:'\f036'}.octicon-log-out:before,.octicon-sign-out:before{content:'\f032'}.octicon-split:before{content:'\f0c6'}.octicon-squirrel:before{content:'\f0b2'}.octicon-star-add:before,.octicon-star-delete:before,.octicon-star:before{content:'\f02a'}.octicon-steps:before{content:'\f0c7'}.octicon-stop:before{content:'\f08f'}.octicon-repo-sync:before,.octicon-sync:before{content:'\f087'}.octicon-tag-remove:before,.octicon-tag-add:before,.octicon-tag:before{content:'\f015'}.octicon-telescope:before{content:'\f088'}.octicon-terminal:before{content:'\f0c8'}.octicon-three-bars:before{content:'\f05e'}.octicon-thumbsdown:before{content:'\f0db'}.octicon-thumbsup:before{content:'\f0da'}.octicon-tools:before{content:'\f031'}.octicon-trashcan:before{content:'\f0d0'}.octicon-triangle-down:before{content:'\f05b'}.octicon-triangle-left:before{content:'\f044'}.octicon-triangle-right:before{content:'\f05a'}.octicon-triangle-up:before{content:'\f0aa'}.octicon-unfold:before{content:'\f039'}.octicon-unmute:before{content:'\f0ba'}.octicon-versions:before{content:'\f064'}.octicon-remove-close:before,.octicon-x:before{content:'\f081'}.octicon-zap:before{content:'\26A1'}.date_selector{width:225px;text-align:left;text-decoration:none;z-index:9;display:none}.date_selector .month_nav,.date_selector .year_nav{margin-top:5px;margin-bottom:5px;padding:0;display:block;position:relative;text-align:center;line-height:20px}.date_selector .month_nav{float:left;width:55%}.date_selector .year_nav{float:right;width:35%}.date_selector .date-button{position:absolute;top:0;width:18px;height:18px;padding:4px;color:#4183c4;font-size:12px;cursor:pointer;line-height:12px}.date_selector .prev{left:0}.date_selector .next{right:0}.date_selector table{width:100%;clear:both}.date_selector tr{font-size:0}.date_selector th,.date_selector td{width:32px;height:32px;line-height:28px;padding:0;text-align:center;font-weight:normal;display:inline-block;font-size:12px;margin-top:-1px;margin-left:-1px}.date_selector td{border:1px solid #ccc;color:#4183c4;background:#fff;cursor:default}.date_selector td.today{background:#eee}.date_selector td.selected,.date_selector td.selectable_day:hover{background:#4183c4;color:#fff;border-color:#3269a0;z-index:10;position:relative;cursor:pointer}.date_selector td.unselected_month{color:#ccc}.jcrop-holder{direction:ltr;text-align:left;-ms-touch-action:none}.jcrop-vline,.jcrop-hline{background:#fff url(/images/spinners/Jcrop.gif);font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px !important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px !important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{height:100%;width:100%;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none}.jcrop-handle{background-color:#333;border:1px #eee solid;width:7px;height:7px;font-size:1px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-vline,.jcrop-light .jcrop-hline{background:#fff;filter:alpha(opacity=70) !important;opacity:0.7 !important}.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-vline,.jcrop-dark .jcrop-hline{background:#000;filter:alpha(opacity=70) !important;opacity:0.7 !important}.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#fff;border-color:#000;border-radius:3px}.jcrop-holder img,img.jcrop-preview{max-width:none}.code-frequency .addition{fill-opacity:1;fill:#6cc644}.code-frequency .deletion{fill-opacity:1;fill:#bd2c00}.cadd{font-weight:bold;color:#6cc644}.cdel{font-weight:bold;color:#bd2c00}.commit-activity-graphs .dots{display:none}#commit-activity-master{margin-top:20px}.is-graph-loading #commit-activity-master{display:none}rect{shape-rendering:crispedges}rect.max{fill:#ffc644}g.bar{fill:#1db34f}g.mini{fill:#f17f49}g.active rect{fill:#bd380f}circle.focus{fill:#555}.dot text{stroke:none;fill:#555}.tint-box{border-radius:6px;background:#f3f3f3;position:relative;margin-bottom:10px}.tint-box.transparent{background:#fff}.tint-box .activity{margin-top:0;padding-top:100px}.contrib-data{margin:0 0 10px;list-style:none;padding:0}#contributors .capped-card .avatar{float:left;width:32px;height:32px;margin-right:5px}#contributors .capped-card h3{font-weight:normal}#contributors .capped-card .ameta{display:block;font-size:12px;color:#ccc}#contributors .capped-card .rank{float:right;color:#999;font-size:13px}#contributors .capped-card .cmt{color:#999}#contributors .capped-card path{fill:#f17f49}#contributors .capped-card .midlabel{fill:#ccc}.d{color:#bd2c00}.a{color:#6cc644}.axis{fill:#aaa;font-size:10px}.axis line{shape-rendering:crispedges;stroke:#eee}.axis path{display:none}.axis .zero line{stroke-width:1.5;stroke:#4183c4;stroke-dasharray:3 3}.graphs .is-graph-loading{min-height:500px}.graphs.wheader h2{padding:1px}.graphs .area{fill:#1db34f;fill-opacity:0.5}.graphs .path{stroke:#1db34f;stroke-width:2px;stroke-opacity:1;fill:none}.graphs .dot{fill:#1db34f;stroke:#16873c;stroke-width:2px}.graphs .dot.padded{stroke:#fff;stroke-width:1px}.graphs .dot.padded circle:hover{fill:#4183c4}.graphs .d3-tip{fill:#333}.graphs .d3-tip text{fill:#fff;font-size:11px}.graphs .dir{font-size:12px;font-weight:normal;color:#555;line-height:100%;padding-top:5px;float:right}.graphs .selection rect{fill:#333;fill-opacity:0.1;stroke:#333;stroke-width:1px;stroke-opacity:0.4;shape-rendering:crispedges;stroke-dasharray:3 3}.graph-filter h3{display:inline-block;margin:10px 0 0;font-weight:300;font-size:24px}.graph-filter .info{margin-top:5px;margin-bottom:20px;color:#777}.graph-filter .select-menu{float:right;margin-top:13px}h2.ghead:after{content:".";height:0;display:block;visibility:hidden;clear:both}.graph-canvas .activity{text-align:center;width:400px;margin:100px auto 0;color:#444;border-radius:3px;padding:10px}.graph-canvas .error{color:#900;background:#feeaea;padding:10px;border-radius:3px}.graph-canvas .dots{margin:0 auto}.graph-canvas>.activity{display:none}.graph-loading,.graph-error,.graph-empty{display:none}.graph-canvas.is-graph-loading>.activity,.graph-canvas.is-graph-empty>.activity{display:block}.is-graph-loading .graph-loading,.is-graph-empty .graph-empty,.is-graph-load-error .graph-error{display:block}.svg-tip{padding:10px;background:rgba(0,0,0,0.8);color:#bbb;font-size:12px;position:absolute;z-index:99999;text-align:center;border-radius:3px}.svg-tip strong{color:#ddd}.svg-tip.is-visible{display:block}.svg-tip:after{box-sizing:border-box;position:absolute;left:50%;height:5px;width:5px;bottom:-10px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,0.8)}.svg-tip.comparison{text-align:left;pointer-events:none;padding:0}.svg-tip.comparison .title{display:block;padding:10px;margin:0;line-height:1;font-weight:bold;pointer-events:none}.svg-tip.comparison ul{list-style:none;margin:0;white-space:nowrap}.svg-tip.comparison li{display:inline-block;padding:10px}.svg-tip.comparison li:first-child{border-top:3px solid #1db34f;border-right:1px solid #333}.svg-tip.comparison li:last-child{border-top:3px solid #1d7fb3}.svg-tip-one-line{white-space:nowrap}.day-name{fill:#555}circle.day{stroke-width:0;fill:#444}circle.day:hover{fill:#4183c4}line.axis{stroke-width:1;stroke:#eee;shape-rendering:crispedges}line.axis.even{stroke:#e0e0e0}.traffic-graph{min-height:150px}.traffic-graph .activity{margin-top:0}.traffic-graph .activity .dots{margin-top:40px}.traffic-graph .path{fill:none;stroke-width:2}.traffic-graph path.total{stroke:#1db34f}.traffic-graph path.unique{stroke:#1d7fb3}.traffic-graph .x.axis .tick:first-child line{stroke:#1db34f;stroke-width:2px}.traffic-graph .y line{stroke:#1db34f}.traffic-graph .y.unique line{stroke:#1d7fb3}.traffic-graph .overlay{fill-opacity:0}.uniques-graph .x.axis .tick:nth-child(14) line{stroke:#1d7fb3;stroke-width:2px}.svg-tip .date{color:#fff}#top-domains .dots{margin:167px auto 0;display:block}#top-domains .favicon{width:16px;height:16px}table.capped-list{width:100%;line-height:100%}table.capped-list th{text-align:left;padding:8px;border-bottom:1px solid #ddd;background:#f4f4f4}table.capped-list td{padding:8px;border-bottom:1px solid #eee;font-size:12px}table.capped-list th.middle,table.capped-list td.middle{text-align:center}table.capped-list .favicon{width:16px;height:16px;vertical-align:middle;margin:0 5px}table.capped-list .octicon{margin-right:10px;vertical-align:-1px;color:#555}table.capped-list tr:nth-child(even){background-color:#fcfcfc}table.capped-list.mini-icons .mini-icon{margin-right:5px;color:#555}.capped-list-label{overflow:hidden;white-space:nowrap;max-width:200px;text-overflow:ellipsis}.traffic-graph-stats{border-top:1px solid #ddd}.traffic-graph-stats .summary-stats{width:100%}.traffic-graph-stats .summary-stats:before{display:table;content:""}.traffic-graph-stats .summary-stats:after{display:table;clear:both;content:""}.traffic-graph-stats .summary-stats li{width:50%;display:block;float:left;padding-bottom:10px}.totals circle{fill:#1db34f;stroke:#fff;stroke-width:2}.uniques circle{fill:#1d7fb3;stroke:#fff;stroke-width:2}.top-lists .is-loading{text-align:center;margin:40px}ul.web-views li{width:140px}ul.clones li{width:170px}.markdown-body{overflow:hidden;font-family:"Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;font-size:16px;line-height:1.6;word-wrap:break-word}.markdown-body>*:first-child{margin-top:0 !important}.markdown-body>*:last-child{margin-bottom:0 !important}.markdown-body a:not(:link):not(:visited){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown-body .anchor:focus{outline:none}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:bold;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{display:inline-block}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{font-size:inherit}.markdown-body h1{padding-bottom:0.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown-body h1 .anchor{line-height:1}.markdown-body h2{padding-bottom:0.3em;font-size:1.75em;line-height:1.225;border-bottom:1px solid #eee}.markdown-body h2 .anchor{line-height:1}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h3 .anchor{line-height:1.2}.markdown-body h4{font-size:1.25em}.markdown-body h4 .anchor{line-height:1.2}.markdown-body h5{font-size:1em}.markdown-body h5 .anchor{line-height:1.1}.markdown-body h6{font-size:1em;color:#777}.markdown-body h6 .anchor{line-height:1.1}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre{margin-top:0;margin-bottom:16px}.markdown-body hr{height:4px;padding:0;margin:16px 0;background-color:#e7e7e7;border:0 none}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:bold}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:border-box}.markdown-body .emoji{max-width:none}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:0;padding-top:0.2em;padding-bottom:0.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,0.04);border-radius:3px}.markdown-body code:before,.markdown-body code:after,.markdown-body tt:before,.markdown-body tt:after{letter-spacing:-0.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:before,.markdown-body pre code:after,.markdown-body pre tt:before,.markdown-body pre tt:after{content:normal}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.pl-c{color:#969896}.pl-c1,.pl-mdh,.pl-mm,.pl-mp,.pl-mr,.pl-s1 .pl-v,.pl-s3,.pl-sc,.pl-sv{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s1 .pl-s2,.pl-smi,.pl-smp,.pl-stj,.pl-vo,.pl-vpf{color:#333}.pl-ent{color:#63a35c}.pl-k,.pl-s,.pl-st{color:#a71d5d}.pl-pds,.pl-s1,.pl-s1 .pl-pse .pl-s2,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#183691}.pl-v{color:#ed6a43}.pl-id{color:#b52a1d}.pl-ii{background-color:#b52a1d;color:#f8f8f8}.pl-sr .pl-cce{color:#63a35c;font-weight:bold}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{color:#1d3e81;font-weight:bold}.pl-mq{color:#008080}.pl-mi{color:#333;font-style:italic}.pl-mb{color:#333;font-weight:bold}.pl-md,.pl-mdhf{background-color:#ffecec;color:#bd2c00}.pl-mdht,.pl-mi1{background-color:#eaffea;color:#55a532}.pl-mdr{color:#795da3;font-weight:bold}.pl-mo{color:#1d3e81}.ace_gutter{background:#ffffff;color:#999999}.ace_print-margin{width:1px;background:#e8e8e8}.ace-github-light{background-color:#ffffff;color:#333333}.ace_cursor{color:#000000}.ace_marker-layer .ace_selection{background:#c8c8fa}.ace_multiselect .ace_selection.ace_start{box-shadow:0 0 3px 0px #ffffff;border-radius:2px}.ace_marker-layer .ace_step{background:#c6dbae}.ace_marker-layer .ace_bracket{margin:-1px 0 0 -1px;border:1px solid #c0c0c0}.ace_marker-layer .ace_active-line{background:#f5f5f5}.ace_gutter-active-line{background-color:#f5f5f5}.ace_marker-layer .ace_selected-word{border:1px solid #c8c8fa}.ace_fold{background-color:#a71d5d;border-color:#333333}.ace_keyword{color:#a71d5d}.ace_constant{color:#0086b3}.ace_support{color:#0086b3}.ace_support.ace_constant{color:#0086b3}.ace_support.ace_type{color:#a71d5d}.ace_storage{color:#a71d5d}.ace_storage.ace_type{color:#a71d5d}.ace_invalid.ace_illegal{text-decoration:underline;font-style:italic;color:#f8f8f8;background-color:#b52a1d}.ace_invalid.ace_deprecated{text-decoration:underline;font-style:italic;color:#b52a1d}.ace_string{color:#183691}.ace_string.ace_regexp{color:#183691}.ace_comment{color:#969896}.ace_variable{color:#ed6a43}.ace_entity.ace_name{color:#795da3}.ace_entity.ace_name.ace_tag{color:#63a35c}.ace_markup.ace_heading{color:#1d3e81}.ace_markup.ace_list{color:#693a17}body{word-wrap:break-word}.focus-content{width:620px}#site-container>.container:first-child{margin-top:20px}.emoji-icon{display:inline-block;height:20px;width:20px;vertical-align:middle;background-repeat:no-repeat;background-size:20px 20px}.labels{position:relative}.label{display:inline-block;padding:3px 4px;font-size:11px;font-weight:bold;line-height:1;color:#fff;border-radius:2px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.12)}.label:hover{text-decoration:none}.label-admin{color:#999;background-color:#eee}.label-legacy-contributor{margin-top:-1px;margin-bottom:-1px;font-weight:normal;color:#999;background-color:transparent;border:1px solid #eee;box-shadow:none}.label-neutral{color:#fff;background-color:#999}a.label-link{border:1px solid transparent}a.label-link:hover{text-decoration:none}.label-membership-pending{background-color:#f93}.facebox{position:absolute;top:0;left:0;z-index:100;padding-bottom:40px}.facebox ul{margin-left:25px;margin-bottom:15px}.facebox .facebox-staff-links{margin:-15px -15px 15px;padding:10px 15px;background-color:#f5f5f5;border-bottom:1px solid #e5e5e5}.facebox .facebox-staff-links li{display:inline-block;margin-right:10px;color:#999;list-style:none}.facebox .facebox-staff-links a{font-weight:bold}.facebox pre{padding:10px;background-color:#eee;border:1px solid #ddd;border-radius:3px}.facebox .shortcuts{width:860px}.facebox .facebox-user-list{margin-left:0;margin-bottom:0;max-height:400px;overflow:auto}.facebox .lineprofiler{width:900px}.facebox .lineprofiler pre{overflow-x:scroll;white-space:pre;word-wrap:normal}.facebox-popup{position:relative;background-color:#fff;border:1px solid rgba(0,0,0,0.25);border-radius:5px;box-shadow:0 0 18px rgba(0,0,0,0.4);background-clip:padding-box}.facebox-content{width:455px;padding:15px}.facebox-content:before{display:table;content:""}.facebox-content:after{display:table;clear:both;content:""}.facebox-close{position:absolute;top:8px;right:5px;padding:10px;-webkit-appearance:none;background-color:transparent;border:0;opacity:0.25;cursor:pointer}.facebox-close:hover{opacity:1}.facebox-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.facebox-overlay-hide{z-index:-100}.facebox-overlay-active{z-index:99;background-color:#000}.facebox-loading{min-height:64px;background-image:url(/images/spinners/octocat-spinner-64.gif);background-position:center center;background-repeat:no-repeat}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 2dppx){.facebox-loading{background-image:url(/images/spinners/octocat-spinner-128.gif);background-size:64px 64px}}.facebox-header{margin:-15px -15px 15px;padding:15px;border-bottom:1px solid #e5e5e5;font-size:18px;font-weight:normal}.facebox-footer{margin:0 -15px -15px;padding:10px 15px;border-top:1px solid #e5e5e5;border-bottom-right-radius:5px;border-bottom-left-radius:5px;background:#fafafa;text-align:right}.facebox-footer .help{margin:0;text-align:center;color:#777}.facebox-alert,.facebox-danger{margin:-16px -15px 15px;padding:10px 15px;border-style:solid;border-width:1px 0}.facebox-alert{color:#796620;background-color:#f8eec7;border-color:#f2e09a}.facebox-danger{padding-left:40px;color:#9c342e;background-color:#f7d9d7;border-color:#f2c4c2}.facebox-danger .octicon{float:left;margin-left:-25px}.facebox-separator{margin:20px -15px}.facebox-staff-search .hfields{margin-top:0;margin-bottom:0}.facebox-staff-search .hfields input[type="text"]{width:340px;margin-right:0}.facebox-staff-search .hfields .button{margin-top:29px;margin-right:0}.facebox-staff-search .status-check-list{float:none;margin:15px 0 0}#facebox .billing-credit-cards{margin:0 0 15px}#facebox .billing-credit-cards li{margin:0 4px 0 0}.keyboard-shortcuts{float:right;font-size:11px;color:#999}.keyboard-shortcuts .mini-icon{position:relative;top:2px;margin-left:5px}.keyboard-mappings{font-size:12px;color:#555}.keyboard-mappings th{padding-top:25px;font-size:14px;line-height:1.5;color:#333;text-align:left}.keyboard-mappings tbody:first-child tr:first-child th{padding-top:0}.keyboard-mappings td{padding-top:3px;padding-bottom:3px;vertical-align:top;line-height:20px}.keyboard-mappings .keys{padding-right:10px;color:#999;text-align:right;white-space:nowrap}.keyboard-mappings .platform-mac{display:none}.macintosh .keyboard-mappings .platform-mac{display:inline}.macintosh .keyboard-mappings .platform-other{display:none}.facebox-user-list-item{padding:3px 0;list-style:none;font-weight:bold;vertical-align:middle}.facebox-user-list-item a{color:#000}.facebox-user-list-item img{margin-right:5px;border-radius:3px;vertical-align:middle}.linejump .linejump-input{width:340px;background-color:#fafafa}.linejump .linejump-input,.linejump .button{font-size:16px;padding:10px 15px}.linejump+.facebox-close{top:18px}.repo-transfer-tip{margin-bottom:0}.user-mention,.team-mention{font-weight:bold;color:#333;white-space:nowrap}dl.form>dd input[type="text"].is-autocheck-loading,dl.form>dd input[type="password"].is-autocheck-loading,dl.form>dd input[type="email"].is-autocheck-loading{background-image:url(/images/spinners/octocat-spinner-32.gif);background-size:16px}dl.form>dd input[type="text"].is-autocheck-successful,dl.form>dd input[type="password"].is-autocheck-successful,dl.form>dd input[type="email"].is-autocheck-successful{background-image:url(/images/modules/ajax/success.png)}dl.form>dd input[type="text"].is-autocheck-errored,dl.form>dd input[type="password"].is-autocheck-errored,dl.form>dd input[type="email"].is-autocheck-errored{background-image:url(/images/modules/ajax/error.png)}.form-cards{height:31px;margin:0 0 15px}.form-cards .card{float:left;width:47px;height:31px;text-indent:-9999px;background-image:url(/images/modules/pricing/credit-cards-@1x.png);background-position:0 0;opacity:0.6}.form-cards .card.visa{background-position:0 0}.form-cards .card.amex{background-position:-50px 0}.form-cards .card.mastercard{background-position:-100px 0}.form-cards .card.discover{background-position:-150px 0}.form-cards .card.jcb{background-position:-200px 0}.form-cards .card.dinersclub{background-position:-250px 0}.form-cards .card.enabled{opacity:1}.form-cards .card.disabled{opacity:0.2}.form-cards>.cards{margin:0}.form-cards>.cards>li{float:left;margin:0 4px 0 0;list-style-type:none}.form-cards>.cards>li.text{font-size:11px;line-height:31px;color:#999}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 2dppx){.form-cards>.cards .card{background-image:url(/images/modules/pricing/credit-cards-@2x.png);background-size:300px 31px}}.status-indicator-loading{position:relative;top:3px;width:16px;height:16px;margin-top:-4px;background:url(/images/spinners/octocat-spinner-32-EAF2F5.gif) 0 0 no-repeat;background-size:16px}.inline-form{display:inline-block}.callout{padding:10px;margin:15px 0;font-size:13px;color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2;border-radius:3px}.callout strong{font-weight:bold;color:#000}.callout h2{margin:0;font-size:16px;font-weight:300}.callout p:last-child{margin-bottom:0}.callout p:first-child{margin-top:0}.callout hr{width:100%;padding:0 10px;margin:10px 0 10px -10px;background:transparent;border-top:1px solid #e5e2c8;border-bottom:1px solid #fff}.infotip{padding:10px;margin:15px 0;font-size:12px;color:#4c4a42;background-color:#fff9ea;border:1px solid #dfd8c2;border-radius:3px}.infotip p{margin:0}.infotip p+p{margin-top:15px}.dashboard-notice{position:relative;padding:15px 15px 15px 55px;margin-bottom:20px;font-size:14px;background-color:#fafafa;border:solid 1px #d8d8d8;border-radius:3px}.dashboard-notice .dismiss{position:absolute;top:10px;right:10px;width:16px;height:16px;color:#bbb;cursor:pointer}.dashboard-notice .dismiss:hover{color:#666}.dashboard-notice .mega-octicon{position:absolute;top:15px;left:15px}.dashboard-notice .octicon-organization{color:#4183c4}.dashboard-notice h2{margin-top:9px;margin-bottom:16px;font-size:18px;font-weight:normal;color:#000}.dashboard-notice p{margin-top:0}.dashboard-notice p.no-title{padding-right:5px;margin-top:0}.dashboard-notice .inset-figure{float:right;margin-bottom:15px;margin-left:20px}.dashboard-notice ul{margin-left:18px}.dashboard-notice li{padding-bottom:15px}.dashboard-notice .coupon{padding:10px;margin:15px 0;font-size:20px;font-weight:bold;text-align:center;background:#fff;border:1px dashed #d1e5ff}kbd{display:inline-block;padding:3px 5px;font:11px Consolas, "Liberation Mono", Menlo, Courier, monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.badmono{font-family:sans-serif;font-weight:bold}.select-menu-button:after{display:inline-block;width:0;height:0;content:"";vertical-align:-2px;border:4px solid;border-right-color:transparent;border-left-color:transparent;border-bottom-color:transparent}.select-menu-button.icon-only{padding-left:7px}.select-menu-button.primary:after{border-top-color:#fff}.select-menu-button.primary:after:active{background-color:#4a993e}.select-menu .spinner{float:left;margin:4px 0 0 -24px}.select-menu.active .select-menu-modal-holder{display:block}.select-menu.right-aligned{float:right;position:relative}.select-menu.right-aligned .select-menu-modal-holder{right:0}.select-menu .select-menu-clear-item{display:block}.select-menu .select-menu-clear-item .octicon{color:inherit}.select-menu .select-menu-clear-item+.select-menu-no-results{display:none !important}.select-menu.is-loading .select-menu-loading-overlay{display:block}.select-menu.is-loading .select-menu-modal{min-height:200px}.select-menu-loading-overlay{display:none;text-indent:100%;height:100%;width:100%;position:absolute;top:0;z-index:5;border-radius:5px;border:1px solid transparent;background-color:rgba(255,255,255,0.8);-webkit-animation:pulse 2s infinite linear;animation:pulse 2s infinite linear}.select-menu-loading-overlay:before{position:absolute;left:50%;top:50%;margin:-16px 0 0 -16px;width:32px;content:"\f008";font:normal normal 32px/1 "octicons";display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased;text-indent:0}@-webkit-keyframes pulse{0%{color:rgba(170,170,170,0.1)}10%{color:#aaaaaa}100%{color:rgba(170,170,170,0.1)}}@keyframes pulse{0%{color:rgba(170,170,170,0.1)}10%{color:#aaaaaa}100%{color:rgba(170,170,170,0.1)}}.select-menu-modal-holder{position:absolute;display:none;z-index:21}.select-menu-modal{position:relative;width:300px;margin-top:4px;margin-bottom:20px;overflow:hidden;font-size:12px;color:#666;background-color:#fff;background-clip:padding-box;border:1px solid rgba(200,200,200,0.4);border-radius:3px;box-shadow:0 3px 12px rgba(0,0,0,0.15)}.select-menu-header{padding:8px 10px;background:#f5f5f5;border-bottom:1px solid rgba(200,200,200,0.4)}.select-menu-header .select-menu-title{font-weight:bold;color:#333;text-shadow:0 1px 0 #fff}.select-menu-header .octicon{display:block;float:right;color:#ccc;cursor:pointer}.select-menu-header .octicon:hover{color:#555}.select-menu-filters{background-color:#f8f8f8}.select-menu-text-filter{padding:10px 10px 0}.select-menu-text-filter:first-child:last-child{padding-bottom:10px;border-bottom:1px solid #ddd}.select-menu-text-filter input{display:block;width:100%;max-width:100%;padding:5px;border:1px solid #ddd;border-radius:3px}.select-menu-text-filter input::-webkit-input-placeholder,.select-menu-text-filter input:-moz-placeholder{color:#aaa}.select-menu-tabs{height:33px;border-bottom:1px solid #ddd}.select-menu-tabs ul{overflow:hidden;padding:14px 10px 0}.select-menu-tabs .select-menu-tab{display:inline-block}.select-menu-tabs a{height:20px;padding:5px 8px;font-size:11px;font-weight:bold;color:#888;text-decoration:none;line-height:20px;border-radius:3px 3px 0 0;cursor:pointer}.select-menu-tabs a:hover{color:#333}.select-menu-tabs a.selected{padding:4px 5px;border:1px solid #ddd;border-bottom:1px solid #fff;background-color:#fff;color:#333}.select-menu-list{max-height:400px;overflow:auto;position:relative}.select-menu-list.select-menu-tab-bucket{display:none}.select-menu-list.select-menu-tab-bucket.selected{display:block}.select-menu-list.is-showing-new-item-form .select-menu-new-item-form{display:table}.select-menu-list.is-showing-new-item-form .select-menu-no-results,.select-menu-list.is-showing-new-item-form .select-menu-clear-item{display:none}.select-menu-item{cursor:pointer;border-bottom:1px solid #eee;display:table;table-layout:fixed;width:100%;overflow:hidden;color:inherit}.select-menu-item:hover{text-decoration:none}.select-menu-item.select-menu-item-template{display:none}.select-menu-item.disabled,.select-menu-item.disabled.selected{color:#999}.select-menu-item.disabled .select-menu-item-gravatar,.select-menu-item.disabled.selected .select-menu-item-gravatar{opacity:0.5}.select-menu-item .octicon{vertical-align:middle}.select-menu-item .octicon-check{visibility:hidden}.select-menu-item input[type="radio"]{display:none}.select-menu-item .select-menu-item-icon{display:table-cell;color:transparent;vertical-align:top;padding:8px 0 8px 8px;width:24px;text-align:center}.select-menu-item.navigation-focus,.select-menu-item.navigation-focus.selected,.select-menu-item.navigation-focus.select-menu-action,.select-menu-item.navigation-focus .description-inline{background-color:#4183c4;color:#fff}.select-menu-item.navigation-focus>.octicon,.select-menu-item.navigation-focus.selected>.octicon,.select-menu-item.navigation-focus.select-menu-action>.octicon,.select-menu-item.navigation-focus .description-inline>.octicon{color:#fff}.select-menu-item.navigation-focus .text-danger,.select-menu-item.navigation-focus .description,.select-menu-item.navigation-focus.selected .text-danger,.select-menu-item.navigation-focus.selected .description,.select-menu-item.navigation-focus.select-menu-action .text-danger,.select-menu-item.navigation-focus.select-menu-action .description,.select-menu-item.navigation-focus .description-inline .text-danger,.select-menu-item.navigation-focus .description-inline .description{color:#fff}.select-menu-item>.octicon-dash{display:none}.select-menu-item.indeterminate>.octicon-check{display:none}.select-menu-item.indeterminate>.octicon-dash{display:table-cell}.select-menu-item.select-menu-action,.select-menu-item.selected{color:#333}.select-menu-item.select-menu-action .description,.select-menu-item.selected .description{color:#666}.select-menu-item.select-menu-action .octicon-check,.select-menu-item.selected .octicon-check{visibility:visible}.select-menu-item.select-menu-action>.octicon,.select-menu-item.selected>.octicon{color:#333}.select-menu-item.select-menu-action .select-menu-item-text{font-weight:bold}.select-menu[data-multiple] .select-menu-item:active{background-color:transparent !important}.select-menu-item a{color:inherit;text-decoration:none}.select-menu-item .hidden-select-button-text{display:none}.select-menu-item .css-truncate-target{display:table-cell;max-width:100%}form.select-menu-item>div:first-child{display:none !important}.select-menu-item.last-visible,.select-menu-list:last-child .select-menu-item:last-child{border-bottom:0;border-radius:0 0 3px 3px}.select-menu-actions .select-menu-item:hover{background-color:#4183c4;color:#fff}.select-menu-actions .select-menu-item:hover>.octicon{color:#fff}.select-menu-actions .select-menu-item:hover .description{color:#fff}.select-menu-no-results{padding:9px;display:none;cursor:auto;color:#999}.select-menu-list.filterable-empty .select-menu-no-results,.select-menu-no-results:only-child{display:block}.select-menu-button-gravatar,.select-menu-item-gravatar{overflow:hidden;line-height:0;width:20px}.select-menu-button-gravatar img,.select-menu-item-gravatar img{height:20px;width:20px;display:inline-block;border-radius:3px}.select-menu-item-gravatar{display:table-cell;padding:6px 0 6px 8px;vertical-align:top;width:28px}.select-menu-button-gravatar{display:inline-block;margin:6px 3px 6px 0;margin-right:5px;vertical-align:middle}.select-menu-item-text{display:table-cell;vertical-align:top;padding:8px 0 8px 8px;text-align:left}.select-menu-item-text:first-child{margin-left:5px}.select-menu-item-text .description{color:#999;font-size:12px;max-width:265px;display:block;margin-top:3px}.select-menu-item-text .description-inline{color:#999;font-size:10px}.select-menu-item-heading{display:block;margin-top:0;margin-bottom:0;font-size:14px;font-weight:bold;line-height:1.1}.select-menu-item-heading .description{font-weight:normal;display:inline}.select-menu-footer{padding:8px;font-weight:bold;border-top:1px solid #eee}.select-menu-footer a{display:inline-block;margin-top:1px;vertical-align:top}.select-menu-footer .octicon{color:#666}.select-menu-new-item-form{display:none}.select-menu-new-item-form .octicon{color:#4183c4}.modal-backdrop{display:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.menu-active .modal-backdrop{display:block;position:fixed;top:0;left:0;height:100%;width:100%;z-index:20}.dropdown{position:relative}.dropdown-caret{display:inline-block;width:0;height:0;content:"";vertical-align:-2px;border:4px solid;border-right-color:transparent;border-left-color:transparent;border-bottom-color:transparent}.dropdown-menu{position:absolute;top:100%;left:50%;z-index:100;width:160px;margin-top:2px;margin-left:-80px;padding-top:5px;padding-bottom:5px;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:4px;box-shadow:0 3px 12px rgba(0,0,0,0.15)}.dropdown-menu:before{position:absolute;top:-16px;left:72px;display:inline-block;content:"";border:8px solid transparent;border-bottom-color:#ccc;border-bottom-color:rgba(0,0,0,0.15)}.dropdown-menu:after{position:absolute;top:-14px;left:73px;display:inline-block;content:"";border:7px solid transparent;border-bottom-color:#fff}.dropdown-menu>li>a{display:block;padding:4px 10px 4px 38px;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropdown-menu>li>a>.octicon{float:left;margin-top:1px;margin-left:-23px;opacity:0.5}.dropdown-menu>li>a:hover,.dropdown-menu>li>a.zeroclipboard-is-hover{color:#fff;text-decoration:none;background-color:#4183c4}.dropdown-menu>li>a:hover>.octicon,.dropdown-menu>li>a.zeroclipboard-is-hover>.octicon{color:inherit;opacity:1}.dropdown-divider{height:1px;margin:8px 1px;background-color:#e5e5e5}.dropdown-header{padding:4px 15px;font-size:12px;color:#999}.dropdown-menu-content{display:none}.dropdown-menu-w{top:0;left:auto;right:100%;width:auto;margin-top:0;margin-left:0;margin-right:10px}.dropdown-menu-w:before{top:10px;right:-16px;left:auto;border-color:transparent;border-left-color:#ccc;border-left-color:rgba(0,0,0,0.15)}.dropdown-menu-w:after{top:11px;right:-14px;left:auto;border-color:transparent;border-left-color:#fff}.dropdown-menu-e{top:0;left:100%;width:auto;margin-top:0;margin-left:10px}.dropdown-menu-e:before{top:10px;left:-16px;border-color:transparent;border-right-color:#ccc;border-right-color:rgba(0,0,0,0.15)}.dropdown-menu-e:after{top:11px;left:-14px;border-color:transparent;border-right-color:#fff}include-fragment,poll-include-fragment{display:block}.pagination:before{display:table;content:""}.pagination:after{display:table;clear:both;content:""}.pagination a,.pagination span,.pagination em{position:relative;float:left;margin-left:-1px;font-size:13px;font-weight:bold;font-style:normal;padding:7px 12px;color:#4183c4;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #e5e5e5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pagination a:first-child,.pagination span:first-child,.pagination em:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination a:last-child,.pagination span:last-child,.pagination em:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.pagination a:hover,.pagination a:focus,.pagination span:hover,.pagination span:focus,.pagination em:hover,.pagination em:focus{z-index:2;background-color:#e7e7e7;border-color:#e5e5e5;text-decoration:none}.pagination .selected{z-index:3}.pagination .current,.pagination .current:hover{z-index:3;color:#fff;background-color:#4183c4;border-color:#4183c4}.pagination .gap,.pagination .disabled,.pagination .gap:hover,.pagination .disabled:hover{background-color:#fafafa;cursor:default;color:#d3d3d3}.ajax_paginate{display:block;margin-top:20px}.ajax_paginate a{float:none;display:block;padding:6px;text-align:center}.ajax_paginate.loading a{text-indent:-3000px;background-color:#eaeaea;background-image:url(/images/spinners/octocat-spinner-16px-EAF2F5.gif);background-repeat:no-repeat;background-position:center center;border-color:#c5c5c5}@media screen and (-webkit-min-device-pixel-ratio: 2), screen and (max--moz-device-pixel-ratio: 2){.ajax_paginate.loading a{background-image:url(/images/spinners/octocat-spinner-32-EAF2F5.gif);background-size:16px auto}}.paginate-container{margin-top:20px;margin-bottom:15px;text-align:center}.paginate-container .pagination{display:inline-block}.header{padding-top:10px;padding-bottom:10px;min-width:1000px;background-color:#f5f5f5;border-bottom:1px solid #e5e5e5}.header-logged-out{padding-top:15px;padding-bottom:15px}.header-logo-invertocat{float:left;margin-right:10px;margin-left:-2px;color:#333;white-space:nowrap}.header-logo-invertocat .octicon-mark-github{float:left;width:28px;height:28px;font-size:28px}.header-logo-invertocat:hover{color:#4183c4;text-decoration:none}.logo-subbrand{float:left;margin-left:6px;font-size:16px;font-weight:bold;line-height:28px}.header-logo-wordmark{position:relative;float:left;height:26px;margin-right:15px;color:#333}.header-logo-wordmark:hover{color:#4183c4}.header-logo-wordmark .octicon-logo-github{height:26px;font-size:32px}.notification-indicator .mail-status{position:absolute;top:-2px;right:2px;z-index:2;display:none;width:14px;height:14px;color:#fff;text-align:center;background-color:#4183c4;background-image:-webkit-linear-gradient(#7ba9d6, #4183c4);background-image:linear-gradient(#7ba9d6, #4183c4);background-repeat:repeat-x;background-clip:padding-box;border-radius:50%;border:2px solid #f3f3f3}.notification-indicator .mail-status.unread{display:inline-block}.notification-indicator:hover .mail-status{background-color:#4183c4}.site-search{position:relative;float:left}.site-search form{position:relative;float:left;width:360px;margin-right:10px}.site-search input[type="text"]{position:relative;width:100%;min-height:28px;padding:4px 20px 4px 8px;font-size:12px}.site-search .scope-badge{position:absolute;top:3px;left:3px;bottom:3px;z-index:10;display:none;padding:3px 6px;font-size:12px;color:#777;background-color:#eee;border-radius:2px;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.site-search.repo-scope .scope-badge{display:block}.site-search.repo-scope input[type="text"]{padding-left:100px}.site-search.repo-scope input[type="text"]:focus+.scope-badge,.site-search.repo-scope .focused .drag-and-drop+.scope-badge,.focused .site-search.repo-scope .drag-and-drop+.scope-badge{background-color:#e4eef7;color:#4183c4}.header-nav{list-style:none}.header-nav-item{float:left}.header-nav-item.active .dropdown-menu-content{display:block}.header-nav-item.active .tooltipped:before,.header-nav-item.active .tooltipped:after{display:none}.header-nav-link{display:block;padding:4px 8px;font-size:13px;font-weight:bold;line-height:20px;color:#333}.header-nav-link:hover,.header-nav-link:focus{color:#4183c4;text-decoration:none}.header-nav-link:hover .dropdown-caret,.header-nav-link:focus .dropdown-caret{border-top-color:#4183c4}.user-nav{margin-right:-8px}.user-nav .header-nav-link{height:28px}.user-nav .octicon{width:18px;height:18px;text-align:center}.user-nav .octicon-inbox{font-size:20px}.user-nav .octicon-sign-out{padding-top:2px}.user-nav .octicon-plus{float:left;width:16px;height:18px;font-size:18px}.user-nav .avatar{float:left;margin-right:5px}.user-nav .name{float:left;white-space:nowrap}.sign-out-button{background:none;border:0}.header-actions{float:right;margin-top:-3px;margin-bottom:-3px}.header-actions .button{margin-left:5px}.enterprise .header{background-color:#2a2c2e;border-bottom-color:#121213}.is-stats .enterprise .header{box-shadow:inset 0 1px 0 rgba(255,255,255,0.05)}.enterprise .header-logo-wordmark,.enterprise .header-logo-invertocat,.enterprise .header-nav-link{color:#c8c8ca}.enterprise .header-logo-wordmark:hover,.enterprise .header-logo-wordmark:focus,.enterprise .header-logo-invertocat:hover,.enterprise .header-logo-invertocat:focus,.enterprise .header-nav-link:hover,.enterprise .header-nav-link:focus{color:#fafafa}.enterprise .header-nav-link:hover .dropdown-caret,.enterprise .header-nav-link:focus .dropdown-caret{border-top-color:#fafafa}.enterprise .notification-indicator .mail-status{border-color:#2a2c2e}.enterprise .notification-indicator:hover .mail-status{background-color:#d26911}.enterprise .header-actions .button{border:0;box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 1px rgba(0,0,0,0.5)}.enterprise .site-search .scope-badge{background-color:#5b5f63;color:#c8c8ca}.enterprise .site-search input[type="text"]{color:#fafafa;background-color:#4f5256;border-color:#121213}.enterprise .site-search input[type="text"]:focus,.enterprise .site-search .focused .drag-and-drop,.focused .enterprise .site-search .drag-and-drop{background-color:#55595d;border-color:#000;box-shadow:inset 0 1px 0 rgba(0,0,0,0.075)}.enterprise .site-search input[type="text"]:focus+.scope-badge,.enterprise .site-search .focused .drag-and-drop+.scope-badge,.focused .enterprise .site-search .drag-and-drop+.scope-badge{background-color:#676c71;color:#fff}.unsupported-browser{padding:15px 0;color:#211e14;background-color:#fae692;background-image:-webkit-linear-gradient(#feefae, #fae692);background-image:linear-gradient(#feefae, #fae692);background-repeat:repeat-x;border-bottom:1px solid #b3a569}.unsupported-browser .container{background:url(/images/icons/ie-notice.png) no-repeat 0 5px}.unsupported-browser h5{font-size:13px;margin:5px 0 2px;padding-left:48px}.unsupported-browser p{margin:0;padding-left:48px}.unsupported-browser .button{float:right;margin-top:5px;margin-left:8px}.mobile-banner button.switch-to-mobile{display:block;width:100%;padding:30px 0 45px;border:0;background-color:#444;color:#eaeaea;font-size:60px;text-align:center;font-weight:bold}.mobile-banner button.switch-to-mobile .mega-octicon{position:relative;top:-8px;margin-right:5px;color:#ddd;font-size:48px}.outdated-dns p{text-align:center}.accessibility-aid{height:1px;width:1px;clip:rect(1px, 1px, 1px, 1px);overflow:hidden;position:absolute;margin:0}.accessibility-aid:focus{height:auto;width:auto;clip:auto;z-index:1;top:0;line-height:49px;padding:0 10px;background:#f5f5f5;font-weight:bold;text-decoration:none;color:#333}.is-stats .accessibility-aid:focus{top:34px}.site-footer{position:relative;margin-top:40px;padding-top:40px;padding-bottom:40px;font-size:12px;line-height:1.5;color:#777;border-top:1px solid #eee}.site-footer:before{display:table;content:""}.site-footer:after{display:table;clear:both;content:""}.site-footer .octicon-mark-github{position:absolute;top:38px;left:50%;height:24px;width:24px;margin-left:-12px;font-size:24px;color:#ccc}.site-footer .octicon-mark-github:hover{color:#bbb}.site-footer-links{margin:0;list-style:none}.site-footer-links li{display:inline-block;line-height:16px}.site-footer-links li+li{margin-left:10px}.billing-plans tbody td{width:25%;vertical-align:middle}.billing-plans .current{background-color:#f2ffed}.billing-plans .name{font-size:14px;font-weight:bold;color:#333}.billing-plans .coupon{font-size:12px}.billing-plans .coupon td{color:#fff;background-color:#6cc644}.billing-plans .coupon .text-right{white-space:nowrap}.billing-plans .coupon.expiring td{background-color:#df6e00}.billing-plans .coupon.expiring .coupon-label:after{border-bottom-color:#df6e00}.billing-plans tbody>.selected{background-color:#fdffce}.coupon-label{position:relative;padding:9px;margin:-9px}.coupon-label:after{position:absolute;bottom:100%;left:15px;width:0;height:0;pointer-events:none;content:" ";border:solid transparent;border-width:5px;border-bottom-color:#6cc644}.boxed-group-table .toggle-currency{font-size:11px;font-weight:normal}.is-hidden,.has-removed-contents{display:none}.currency-notice{margin-bottom:10px}.org-login{margin-top:-30px;margin-bottom:30px}.org-login img{width:450px;padding:1px;margin:10px -25px;border:1px solid #ccc}.plan-notice{border-top:1px solid #eee;margin-bottom:0;padding:10px}.auth-form{width:400px;margin:60px auto}.auth-form .note{margin:15px 0;text-align:center}.auth-form-header{position:relative;padding:10px 20px;margin:0;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.3);background-color:#829aa8;border:1px solid #768995;border-radius:3px 3px 0 0}.auth-form-header h1{margin-top:0;margin-bottom:0;font-size:16px}.auth-form-header h1 a{color:#fff}.auth-form-header .octicon{position:absolute;top:10px;right:20px;color:rgba(0,0,0,0.4);text-shadow:0 1px 0 rgba(255,255,255,0.1)}.auth-form-body{padding:20px;font-size:14px;background-color:#fff;border:1px solid #d8dee2;border-top:0;border-radius:0 0 3px 3px}.auth-form-body .input-block{margin-top:5px;margin-bottom:15px}.auth-form-body p{margin:0 0 10px}.two-factor-help{position:relative;padding:10px 10px 10px 36px;margin:60px 0 auto auto;border:1px solid #eaeaea;border-radius:3px}.two-factor-help .octicon{position:absolute;top:10px;left:10px}.two-factor-help .minibutton{float:right}.two-factor-help ul{list-style-type:none}.flash.sms-error,.flash.sms-success{display:none;margin:0 0 10px}.is-sent .sms-success{display:block}.is-sent .sms-error{display:none}.is-not-sent .sms-success{display:none}.is-not-sent .sms-error{display:block}.autocomplete-results{position:absolute;z-index:99;display:none;max-height:20em;overflow-y:auto;font-size:13px;list-style:none;background:#fff;border:1px solid #c1c1c1;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,0.3)}.autocomplete-results .no-results{display:none}.autocomplete-group{width:100%;overflow:hidden}.autocomplete-item{display:block;padding:5px;overflow:hidden;font-weight:bold;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.autocomplete-item.selected,.autocomplete-item.navigation-focus{color:#fff;text-decoration:none;background-color:#4183c4}.autocomplete-item.selected .organization-member,.autocomplete-item.selected .ldap-group-dn,.autocomplete-item.navigation-focus .organization-member,.autocomplete-item.navigation-focus .ldap-group-dn{color:#f2f2f2}.autocomplete-item .secondary-label{font-weight:normal}.autocomplete-item .organization-member{float:right;padding-top:1px;color:#808080}.suggester-container{position:absolute;top:58px;left:10px;z-index:30}.comment-content .suggester-container{top:46px}.timeline-new-comment .suggester-container{top:52px}.is-comment-editing .suggester-container{top:49px}.merge-branch-form .suggester-container{top:39px}.wiki-wrapper .suggester-container{top:93px;left:-2px}.suggester{position:relative;top:0;left:0;display:none;min-width:180px;margin-top:20px;background:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,0.1)}.suggester.active{display:block}.suggester ul{padding:0;margin:0;list-style:none}.suggester li{display:block;padding:5px 10px;font-weight:bold;border-bottom:1px solid #ddd}.suggester li small{font-weight:normal;color:#777}.suggester li:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.suggester li:first-child a{border-top-left-radius:3px;border-top-right-radius:3px}.suggester li.navigation-focus{color:#fff;text-decoration:none;background:#4183c4}.suggester li.navigation-focus small{color:#fff}.breadcrumb{margin-top:5px;margin-bottom:5px;font-size:18px;color:#999}.breadcrumb .separator:before,.breadcrumb .separator:after{content:" "}.breadcrumb strong.final-path{color:#000}.breadcrumb .new-file-no-branch{color:#ccc}.breadcrumb .new-file-no-branch:hover{color:#4183c4}.breadcrumb .zeroclipboard-button{display:inline-block;margin-left:5px}.breadcrumb .repo-root{font-weight:bold}.editor-license-template,.editor-gitignore-template{position:relative;top:3px;display:none;float:right;font-size:14px}.editor-license-template.is-visible,.editor-gitignore-template.is-visible{display:block}.editor-license-template .select-menu-git-ignore,.editor-license-template .select-menu-license-picker,.editor-gitignore-template .select-menu-git-ignore,.editor-gitignore-template .select-menu-license-picker{right:0}.editor-abort{display:inline;font-size:14px}.new-file-link{display:inline-block;color:#4183c4;cursor:pointer}.blob-interaction-bar{position:relative;background-color:#f2f2f2;border-bottom:1px solid #e5e5e5}.blob-interaction-bar:before{display:table;content:""}.blob-interaction-bar:after{display:table;clear:both;content:""}.blob-interaction-bar .octicon-search{position:absolute;top:10px;left:10px;font-size:12px;color:#999}input.blob-filter{padding:4px 20px 5px 30px;width:100%;font-size:12px;border:0;border-radius:0;outline:none}input.blob-filter:focus{outline:none}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:bold;background:#f8f8f8;border-top:0}.too-long-message{display:none;color:#cea61b}.is-too-long-error .too-long-message{display:block}.check-for-fork{display:inline-block}.check-for-fork img{vertical-align:text-bottom}.check-for-fork.is-error .check-for-fork-loading{display:none}.check-for-fork.is-error .check-for-fork-error{display:inline-block}.check-for-fork-error{display:none}.file-commit-form{padding-left:64px}.file-commit-form .commit-form-avatar{float:left;margin-left:-64px;border-radius:4px}.file-commit-form .commit-form{position:relative;padding:15px;margin-bottom:10px;border:1px solid #ddd;border-radius:3px}.file-commit-form .commit-form:after,.file-commit-form .commit-form:before{position:absolute;top:11px;left:-16px;right:100%;width:0;height:0;display:block;content:" ";border-color:transparent;border-style:solid solid outset;pointer-events:none}.file-commit-form .commit-form:after{border-width:7px;border-right-color:#fff;margin-top:1px;margin-left:2px}.file-commit-form .commit-form:before{border-right-color:#ddd;border-width:8px}.file-commit-form .commit-message{min-height:100px}.file-commit-form-heading{margin-top:0;margin-bottom:10px}.quick-pull-choice .form-checkbox{padding-left:25px;margin:10px 0}.quick-pull-choice .form-checkbox label{font-weight:normal}.quick-pull-choice .form-checkbox .octicon{width:16px;margin-right:3px;text-align:center}.quick-pull-choice dl.form,.quick-pull-choice .form-checkbox:last-child{margin-bottom:0}.quick-pull-choice .quick-pull-branch-name{display:none;padding-left:48px;margin-top:5px}.quick-pull-choice .new-branch-name-input{position:relative;margin-top:5px}.quick-pull-choice .new-branch-name-input input{width:240px;padding-left:26px;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace}.quick-pull-choice .new-branch-name-input .quick-pull-new-branch-icon{position:absolute;top:9px;left:10px;color:#b0c4ce}.quick-pull-choice.will-normalize-ref .quick-pull-normalization-info{display:inline-block}.quick-pull-choice.will-create-branch .quick-pull-branch-name{display:inline-block}.quick-pull-normalization-info{position:absolute;top:34px;left:0;z-index:10;display:none;padding:5px;font-size:11px;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.merge-pr{padding-top:10px;margin:20px 0 0;border-top:1px solid #ddd}.merge-pr.open .merge-branch-form{display:block}.merge-pr.open .branch-action{display:none}.branch-status{padding:10px 0 0;border:solid #eee;border-width:0 0 1px}.branch-status.branch-status-next{padding:0;border-width:0}.branch-status .octicon{width:16px;text-align:center}.branch-status.open>.build-statuses-list{max-height:370px;border-width:1px 0}.branch-status.open .statuses-toggle-opened{display:inline}.branch-status.open .statuses-toggle-closed{display:none}.status-description{display:block;padding:0 15px 10px 12px}.branch-status-next .status-description{padding:12px 15px 10px 12px;font-weight:bold;position:relative}.branch-status-next .status-description .button-link,.branch-status-next .status-description a.right{color:#bbb;display:block;position:absolute;text-align:right;top:0;right:0;bottom:0;padding:8px 12px}.branch-status-next .status-description .button-link .octicon,.branch-status-next .status-description a.right .octicon{position:absolute;right:12px;top:18px}.branch-status-next .status-description .button-link:hover,.branch-status-next .status-description a.right:hover{color:#999}.branch-status-next .status-description strong{display:block;line-height:1}.branch-status-header{display:table;width:100%;table-layout:fixed}.branch-status-header .status-description{display:table-cell;width:100%;border:1px solid #eee;border-width:0 0 1px 1px}.branch-status-header .status-description:first-child{border-left-width:0;border-radius:3px 0 0}.branch-status-header .status-description:last-child{border-radius:0 3px 0 0}.branch-status-header .open .statuses-toggle-opened{display:block}.branch-status-header .open .statuses-toggle-closed{display:none}.completeness-indicator{width:30px;height:30px;margin:-1px 8px 0 0;float:left}.completeness-indicator span{display:none}.completeness-indicator .failure{fill:#bd2c00}.completeness-indicator .pending{fill:#cea61b}.completeness-indicator .success{fill:#6cc644}.completeness-indicator .error{fill:#999}.completeness-indicator.success,.build-status-single .completeness-indicator{background:#6cc644;border-radius:100%;color:#fff;text-align:center}.completeness-indicator.success span,.build-status-single .completeness-indicator span{display:inline-block;margin-top:7px}.build-status-single .completeness-indicator.failure{background:#bd2c00}.build-status-single .completeness-indicator.pending{background:#cea61b}.build-status-single .completeness-indicator.error{background:#999}.build-status-single .css-truncate-target{width:80%;max-width:80%}.branch-status-header .build-status-single a{line-height:1;font-weight:normal}.build-statuses-list,.status-tabs-content{max-height:0;margin-bottom:-1px;overflow-y:auto;border:solid #eee;border-width:1px 0 0;padding:0;-webkit-transition:max-height 0.25s ease-in-out;transition:max-height 0.25s ease-in-out}.status-tabs-container.open .build-statuses-list,.status-tabs-container.open .status-tabs-content{max-height:370px}.status-tabs-content{border-width:0;margin-bottom:0}.status-tabs-content .build-statuses-list{border-width:0 0 1px;margin-bottom:0}.status-tabs-container.open .status-tabs-content{max-height:370px;border-width:0}.status-tabs-content-view{padding:10px 12px;background:#fafafa;border-bottom:1px solid #eee;display:none}.status-tabs-content-view .octicon{color:#ccc}.status-tabs-content-view .octicon:hover{color:#555}.status-tabs-content-view.open{display:block}.status-tabs-content-view.build-statuses-list{padding:0;border-bottom:1px solid #eee}.statuses-toggle-opened{display:none}.build-status-item{padding:10px 15px 10px 12px;background-color:#fafafa;border-bottom:1px solid #eee}.build-status-item:last-child{border-bottom:0}.build-status-item .css-truncate-target{width:80%;max-width:80%}.build-status-icon{width:16px;text-align:center}.build-status-details{margin-left:10px}.merge-pr-more-commits{margin-top:10px;margin-bottom:10px;margin-left:64px;font-size:12px;color:#777}.branch-action{padding-left:64px;margin-top:15px;margin-bottom:15px}.branch-action .merge-branch-heading{margin-bottom:2px}.branch-action .delete-branch-failure{display:none;padding:15px}.branch-action.error .delete-branch-failure{display:block}.branch-action.error .merge-message{display:none}.branch-action-icon{float:left;width:48px;height:48px;margin-left:-64px;line-height:48px;color:#fff;text-align:center;border-radius:3px}.branch-action-body{position:relative;background-color:#fff;border:1px solid #e5e5e5;border-radius:3px}.branch-action-body:after,.branch-action-body:before{position:absolute;top:11px;left:-16px;right:100%;width:0;height:0;display:block;content:" ";border-color:transparent;border-style:solid solid outset;pointer-events:none}.branch-action-body:after{border-width:7px;border-right-color:#fff;margin-top:1px;margin-left:2px}.branch-action-body:before{border-right-color:#ddd;border-width:8px}.branch-action-body .spinner{display:block;float:left;width:32px;height:32px;margin-right:15px;background:url(/images/spinners/octocat-spinner-32.gif) no-repeat}.branch-action-body .merge-message,.branch-action-body .merge-branch-form{padding:15px}.branch-action-state-clean .branch-action-icon{background-color:#6cc644}.branch-action-state-clean .branch-action-body{border-color:#95c97e}.branch-action-state-clean .branch-action-body:before{border-right-color:#95c97e}.branch-action-state-unknown .branch-action-icon,.branch-action-state-unstable .branch-action-icon{background-color:#cea61b}.branch-action-state-unknown .branch-action-body,.branch-action-state-unstable .branch-action-body{border-color:#e2cc7a}.branch-action-state-unknown .branch-action-body:before,.branch-action-state-unstable .branch-action-body:before{border-right-color:#e2cc7a}.branch-action-state-merged .branch-action-icon{background-color:#6e5494}.branch-action-state-merged .branch-action-body{border-color:#886ead}.branch-action-state-merged .branch-action-body:before{border-right-color:#886ead}.branch-action-state-dirty .branch-action-icon,.branch-action-state-closed-dirty .branch-action-icon{background-color:#888}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 2dppx){.branch-action-body .spinner{background-image:url(/images/spinners/octocat-spinner-64.gif);background-size:32px 32px}}.collected-todos{padding-left:64px;margin-top:15px;margin-bottom:15px}.collected-todos .status-tabs-content-view{border:1px solid #eee;border-width:1px 0 0;border-radius:0 0 3px 3px}.collected-todos .open .statuses-toggle-opened{display:block}.collected-todos .open .statuses-toggle-closed{display:none}.collected-todos-body{position:relative;background-color:#fff;border:1px solid #e5e5e5;border-radius:3px}.merge-branch-form{display:none;margin:15px 0}.merge-branch-form .commit-form{border-color:#95c97e}.merge-branch-form .commit-form:before{border-right-color:#95c97e}.merge-branch-form.error .commit-form{border-color:#e97a74}.merge-branch-form.error .commit-form:before{border-right-color:#e97a74}.merge-branch-form .merge-form-failed{display:none}.merge-branch-form.error .merge-form-failed{display:block}.merge-branch-form.error .merge-form-contents{display:none}.merge-button-matrix-merge-form .merge-branch-form{display:block}.merge-button-matrix-merge-form .merge-branch-form .merge-form-contents{display:block}.merge-button-matrix-merge-failed .merge-branch-form{display:block}.merge-button-matrix-merge-failed .merge-branch-form .merge-form-failed{display:block}.merge-button-matrix-merge-failed .merge-branch-form .merge-form-contents{display:none}p.recently-touched-branches-description{margin:0;font-size:11px;color:#888}.recently-touched-branches{padding:0;margin:5px 0 10px;color:#4c4a42;background-color:#fff9ea;border:solid 1px #dfd8c2;border-radius:3px}.recently-touched-branches a.branch-link{font-weight:bold}.recently-touched-branches li{height:36px;padding:5px;margin:0;line-height:23px;list-style-type:none;border-bottom:1px solid #e5e2c8}.recently-touched-branches li:last-child{border-bottom:0}.recently-pushed-branch-actions{float:right}.recently-pushed-branch-details{display:inline-block;margin:0 0 0 7px;font-size:13px;line-height:26px;color:#a19e7f}.recently-pushed-branch-details a{color:#6b694f}.recently-pushed-branch-details .css-truncate-target{max-width:400px}.branch-name{display:inline-block;padding:2px 6px;font:12px Consolas, "Liberation Mono", Menlo, Courier, monospace;color:rgba(0,0,0,0.5);background-color:rgba(209,227,237,0.5);border-radius:3px}.branch-name .octicon{margin:1px -2px 0 0;color:#b0c4ce}a.branch-name{color:#4183c4}.range-editor{position:relative;padding:15px 15px 15px 45px;margin-bottom:10px;background-color:#fafafa;border:1px solid #eee;border-radius:3px}.range-editor .range{position:relative}.range-editor .range p{margin:0 0 8px;font-size:12px;color:#999}.range-editor .range .dots{margin:0 4px;font-size:16px;color:#999}.range-editor .range .select-menu{position:relative;display:inline-block}.range-editor .range .select-menu.fork-suggester{display:none}.range-editor .range .branch-name{line-height:22px}.is-cross-repo .range-editor .range .select-menu.fork-suggester{display:inline-block}.is-cross-repo .range-editor .range .cross-repo-text{display:none}.range-editor .range .branch .css-truncate-target,.range-editor .range .fork-suggester .css-truncate-target{max-width:180px}.range-editor-icon{float:left;margin-left:-30px;color:#666}.range-cross-repo-pair{display:inline-block;white-space:nowrap}ul.comparison-list{width:350px;margin:25px auto 15px;font-size:14px;text-align:left;background:#fff;border:1px solid #ddd;border-radius:3px}ul.comparison-list>li{padding:7px 10px;list-style-type:none;border-top:1px solid #eee}ul.comparison-list>li a{font-weight:bold}ul.comparison-list>li em{float:right;font-style:normal;color:#999}ul.comparison-list>li .octicon{position:relative;top:1px;color:#aaa}ul.comparison-list>li .css-truncate-target{max-width:200px}ul.comparison-list>li.title{font-size:12px;font-weight:bold;color:#aaa;text-transform:uppercase;background:#fafafa;border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.recently-touched-branches-wrapper{margin:15px 0}.starring-container .unstarred,.starring-container.on .starred{display:block}.starring-container.on .unstarred,.starring-container .starred{display:none}.starring-container.loading{opacity:0.5}.user-following-container .follow,.user-following-container.on .unfollow{display:inline-block}.user-following-container.on .follow,.user-following-container .unfollow{display:none}.user-following-container.loading{opacity:0.5}.members .user-following-container{float:right}.close-button{background:transparent;border:0;padding:0;outline:none}.code-list .file-box{border:1px solid #ddd;border-radius:3px}.code-list em{background-color:rgba(255,255,140,0.5);padding:3px;border-radius:3px;font-weight:bold;font-style:normal;color:#333}.code-list .title{margin:-3px 0 10px 38px;min-height:24px;font-weight:bold;line-height:1.2}.code-list .repo-specific .title,.code-list .repo-specific .full-path{margin-left:0}.code-list .match-count,.code-list .updated-at{margin:0;font-size:11px;color:#999;font-weight:normal}.code-list .language{float:right;color:rgba(51,51,51,0.75);font-size:12px;margin-left:10px}.code-list .avatar{float:left}.code-list .code-list-item+.code-list-item{margin-top:20px;padding-top:20px;border-top:1px solid #eee;margin-bottom:10px}.code-list .blob-num{padding:0}.code-list .blob-num:before{content:normal}.code-list .blob-num a{color:inherit;padding:0 10px}.code-list .blob-num a:hover{color:#4183c4}.code-list .blob-code{white-space:pre-wrap}.code-list .divider .blob-num,.code-list .divider .blob-code{background-color:#f8fafd;padding-top:0;padding-bottom:0;cursor:default}.code-list .divider .blob-num{background-color:#f0f5fa;line-height:15px;padding:0 10px;height:18px}.code-list .full-path{margin:0 0 0 40px}.code-list .full-path .octicon-repo{color:#666}.code-list .full-path .octicon-lock{color:#e9dba4}.code-list .full-path a{color:#999}.code-list-item-private .file-box{border:1px solid #fadda5}.code-list-item-private .blob-num{background-color:#fff9ea;border-right:1px solid #fadda5}.code-list-item-private .blob-num a{color:#a1882b}.code-list-item-private .divider .blob-num,.code-list-item-private .divider .blob-code{background-color:#fff9ea;color:#a1882b}.codesearch-head{padding-bottom:20px}.codesearch-head.pagehead h1{float:left;width:250px;line-height:33px}.advanced-search-form h3{margin-top:20px}.advanced-search-form .flattened dt{width:230px}.advanced-search-form .flattened dt label{font-weight:normal}.advanced-search-form .flattened dd{margin-left:250px}.advanced-search-form .form-checkbox{margin-left:250px}.advanced-search-form fieldset{border-bottom:1px solid #f1f1f1;padding-bottom:20px;margin-bottom:30px}.codesearch-results .large-format-loader{padding-top:5%}.codesearch-results .repo-list{margin-top:-20px}.codesearch-results .repo-list-name{font-weight:normal}.codesearch-results .repo-list-name a,.codesearch-results .code-list .title a{word-wrap:break-word}.codesearch-results .repo-list-name em,.codesearch-results .repo-list-description em{padding:3px;font-style:normal;font-weight:bold;background-color:rgba(255,255,140,0.5);border-radius:3px}.codesearch-results .search-foot-note{color:#999;text-align:center}.meta-search-links{margin-top:20px}.meta-search-links a{margin-right:10px}.codesearch-aside .menu .octicon{width:16px;text-align:center;margin-right:5px}.codesearch-aside .meta-search-links{margin-top:20px}.codesearch-aside .meta-search-links a{margin-right:10px}.codesearch-aside .filter-list{border-bottom:1px solid #f1f1f1;margin-bottom:20px;padding-bottom:20px}.codesearch-aside .filter-list li{position:relative}.codesearch-aside .filter-list li span.bar{background:#f1f1f1;display:inline-block;position:absolute;z-index:-1;top:2px;bottom:2px;right:0}.simple-search-page{width:740px;padding-top:100px;padding-bottom:100px}.simple-search-page h2{font-weight:normal}.simple-search-page h2 .mega-octicon{vertical-align:middle}.search-form-fluid{position:relative}.search-form-fluid .flex-table-item-primary{padding-right:10px}.search-form-fluid .completed-query{position:absolute;top:7px;left:8px;right:8px;z-index:1;margin:0;overflow:hidden;white-space:nowrap}.search-form-fluid .completed-query span{opacity:0}.search-form-fluid .search-page-label{position:relative;display:block;font-weight:normal;cursor:text}.search-form-fluid .search-page-label.focus .completed-query{opacity:0.6}.search-form-fluid .search-page-input{position:relative;z-index:2;min-height:0;margin:0;padding:0;background:none;border:0;box-shadow:none}.search-form-fluid .search-page-input:focus{box-shadow:none}.token-warning{position:absolute;top:10px;right:85px;color:#000}.sort-bar{border-bottom:1px solid #f1f1f1;margin-bottom:20px;padding-bottom:20px}.sort-bar .sort-label{padding-right:5px;font-weight:200;font-size:13px;color:#666}.sort-bar .select-menu{float:right}.sort-bar h3{margin:0}.sort-bar .sort-form{float:right}.sort-bar .sort-link{font-weight:bold;color:#8a8a8a;text-decoration:none;margin-top:4px}.sort-form .sort-icon{border:5px solid #8a8a8a;height:0;width:0;display:inline-block;margin-left:5px}.sort-form .sort-desc .sort-icon{border-color:#8a8a8a transparent transparent;border-width:5px 4px 2px}.sort-form .sort-asc .sort-icon{border-color:transparent transparent #8a8a8a;border-width:2px 4px 5px}.file-editor-textarea{width:100%;padding:5px 4px;font:12px Consolas, "Liberation Mono", Menlo, Courier, monospace;resize:vertical;border:0;border-radius:0;outline:none}.container-preview .tabnav-tabs{margin:-6px 0 -5px -11px}.container-preview .tabnav-tabs .tabnav-tab{padding:12px 15px;border-radius:0}.container-preview .tabnav-tabs>li:first-child .selected{border-top-left-radius:3px}.container-preview .tabnav-tabs .selected{font-weight:bold}.container-preview.show-code .commit-create,.container-preview.show-code .actions{display:block}.container-preview.show-code .commit-preview,.container-preview.show-code .loading-preview-msg,.container-preview.show-code .no-changes-preview-msg,.container-preview.show-code .error-preview-msg{display:none}.container-preview:not(.show-code) .commit-create,.container-preview:not(.show-code) .actions{display:none}.container-preview.loading-preview .loading-preview-msg{display:block}.container-preview.loading-preview .no-changes-preview-msg,.container-preview.loading-preview .error-preview-msg,.container-preview.loading-preview .commit-preview{display:none}.container-preview.show-preview .commit-preview{display:block}.container-preview.show-preview .loading-preview-msg,.container-preview.show-preview .no-changes-preview-msg,.container-preview.show-preview .error-preview-msg{display:none}.container-preview.no-changes-preview .no-changes-preview-msg{display:block}.container-preview.no-changes-preview .loading-preview-msg,.container-preview.no-changes-preview .error-preview-msg,.container-preview.no-changes-preview .commit-preview{display:none}.container-preview.error-preview .error-preview-msg{display:block}.container-preview.error-preview .loading-preview-msg,.container-preview.error-preview .no-changes-preview-msg,.container-preview.error-preview .commit-preview{display:none}.container-preview p.preview-msg{padding:30px;font-size:16px}.ace_editor.ace-github-light{position:relative;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;line-height:18px}.ace_editor.ace-github-light .ace_scroller.ace_scroll-left{box-shadow:none}.ace_gutter{border-right:1px solid #eee}.ace_gutter-layer{min-width:50px}.ace_nobold .ace_line>span{font-weight:normal !important}.ace_marker-layer .ace_step{background-color:#fcff00}.ace_marker-layer .ace_stack{background-color:#a4e565}.ace_marker-layer .ace_selected-word{background-color:#fafaff}.ace_indent-guide{box-shadow:inset -1px 0 0 rgba(0,0,0,0.1)}.details-collapse .collapse{position:relative;display:none;height:0;overflow:hidden;-webkit-transition:height 0.35s ease-in-out;transition:height 0.35s ease-in-out}.details-collapse.open .collapse{display:block;height:auto;overflow:visible}.comment.is-comment-editing .timeline-comment-actions,.comment.is-comment-editing .edit-comment-hide{display:none}.comment.is-comment-editing .form-content{display:block}.comment.is-comment-loading .context-loader{display:block}.comment.is-comment-loading .form-content{opacity:0.5}.comment.is-comment-stale .comment-form-stale{display:block}.comment.is-comment-stale .comment-content{padding-top:10px}.comment.is-comment-stale .form-content{opacity:0.75}.comment .email-format{line-height:1.5}.comment .context-loader{display:none}.comment-body{width:100%;padding:15px;overflow:visible;font-size:14px}.comment-body .highlight{overflow:visible !important;background-color:transparent}.form-actions:before{display:table;content:""}.form-actions:after{display:table;clear:both;content:""}.form-actions .button,.form-actions .minibutton{float:right;margin-left:5px}.form-actions .left .button,.form-actions .left .minibutton{margin-left:0}.form-content{display:none;padding:10px}.form-content .form-actions{margin-top:10px}.comment-form-textarea{width:100%;max-width:100%;height:100px;min-height:100px;margin:0;font-size:14px;line-height:1.6;-webkit-transform:translateZ(0)}.comment-form-textarea.dragover{border:solid 1px #4183c4}.discussion-topic-header{position:relative;padding:10px;word-wrap:break-word}.discussion-hidden{opacity:0.75}.comment-form-error,.comment-form-stale{display:none;padding:5px 10px;margin:0 10px;font-weight:bold;color:#900;background-color:#ffeaea;border:1px solid #e2a0a0}.comment-form-error.comment-form-bottom,.comment-form-stale.comment-form-bottom{margin-bottom:10px}.comment-form-stale{margin-top:0}.email-format{line-height:1.5em !important}.email-format div{white-space:pre-wrap}.email-format .email-hidden-reply{display:none;white-space:pre-wrap}.email-format .email-quoted-reply,.email-format .email-signature-reply{padding:0 15px;margin:15px 0;color:#777;border-left:4px solid #ddd}.email-format .email-hidden-toggle a{display:inline-block;height:12px;padding:0 9px;font-size:12px;font-weight:bold;line-height:6px;color:#555;text-decoration:none;vertical-align:middle;background:#ddd;border-radius:1px}.email-format .email-hidden-toggle a:hover{background-color:#ccc}.email-format .email-hidden-toggle a:active{color:#fff;background-color:#4183c4}.comment-email-format div{white-space:normal}.comment-email-format .email-hidden-reply{display:none;white-space:normal}.comment-email-format blockquote,.comment-email-format p{margin:0}.blankslate.conversation-limited{padding:20px 0 10px;margin:15px}.locked-conversation .write-tab,.locked-conversation .preview-tab{color:#ccc}.commit-sha{padding:0.2em 0.4em;font-size:90%;font-weight:normal;background-color:#f5f5f5;border:1px solid #eee;border-radius:0.2em}.commit-partial-notice{margin-top:20px;margin-bottom:20px}.commit-paginate-container{float:right;margin:-5px 0 0;text-align:inherit}.commit .commit-title,.commit .commit-title a{color:#4e575b}.commit .commit-title.blank,.commit .commit-title.blank a{color:#9cabb1}.commit .commit-title .issue-link{font-weight:bold;color:#4183c4}.commit .sha-block,.commit .sha{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px}.commit.open .commit-desc{display:block}.commit-link{font-weight:normal;color:#4183c4}.commit-email-flash{display:inline}.commit-desc{display:none}.commit-desc pre{max-width:700px;margin:10px 0;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:13px;line-height:1.45;color:#596063;white-space:pre-wrap}.commit-desc+.commit-branches{padding-top:8px;margin-top:2px;border-top:solid 1px #d1e2eb}.commit-tease{padding:8px 8px 0;background:#e6f1f6;border:1px solid #b7c7cf;border-bottom-color:#d8e6ec;border-top-left-radius:3px;border-top-right-radius:3px}.commit-tease p.commit-title{margin:0 0 6px}.commit-tease .commit-desc{margin:-3px 0 10px}.commit-tease .commit-desc pre{font-size:11px}.commit-tease .commit-meta{padding:8px;margin-right:-8px;margin-left:-8px;background:#fff;border-top:1px solid #d8e6ec}.commit-tease .commit-meta .loader-loading{margin:0 0 -9px}.commit-tease .zeroclipboard-link{float:right;margin-top:-2px;margin-left:5px}.commit-tease .sha-block{float:right;color:#888}.commit-tease .sha-block>.sha{color:#444}.commit-tease .sha-block>a{color:#444;text-decoration:none}.commit-tease .authorship{margin:-2px 0 -4px -4px;font-size:12px;color:#999}.commit-tease .authorship a{font-weight:bold;color:#444;text-decoration:none}.commit-tease .authorship a:hover{text-decoration:underline}.commit-tease .authorship .avatar{margin:-2px 3px 0 0}.commit-tease .authorship .author-name{color:#444}.commit-tease .authorship .committer{display:block;margin-left:30px;font-size:11px}.comment-count{float:right;margin-top:1px;font-size:11px;color:#7f9199}.comment-count .octicon{margin-left:5px;vertical-align:middle}.commits-listing{position:relative;padding-bottom:20px;margin-bottom:15px}.commits-listing:before{position:absolute;top:0;bottom:0;left:14px;z-index:-1;display:block;width:2px;content:"";background-color:#f3f3f3}.commits-listing .discussion-item-icon{margin-right:5px;margin-left:-1px}.commits-listing .timeline-commits{padding-left:8px;margin-bottom:20px}.commits-listing .timeline-commits:last-child{margin-bottom:0}.commits-listing-padded{padding-left:39px}.commit-group{margin-top:10px;list-style-type:none}.commit-group-title{margin-top:15px;margin-left:-31px;color:#777}.commit-group-title .octicon-git-commit{margin-right:17px;color:#ccc;background:#fff}.commits-list-item.navigation-focus{background:#f7fbfc}.commits-list-item .commit-title{margin:0;font-size:15px;font-weight:bold;color:#333}.commits-list-item .commit-meta{margin-top:1px;font-weight:normal;color:#999}.commits-list-item .deployment-indicator{color:#bbb}.commits-list-item .status .octicon{height:14px;line-height:14px}.commits-list-item .commit-author{color:#777}.commits-list-item .octicon-arrow-right{margin:0 3px}.commits-list-item .button-outline{padding:5px 8px;margin-top:4px}.commits-list-item .octicon-clippy,.commits-list-item .octicon-code{display:block}.commits-list-item .commit-desc pre{padding-left:8px;margin-top:5px;margin-bottom:10px;font-size:12px;color:#596063;border-left:1px solid #e5e5e5}.commits-list-item .commit-desc pre a{word-break:break-word}.commits-comments-link{margin-top:9px;color:#999;vertical-align:middle}.commits-comments-link:hover{color:#4183c4;text-decoration:none}.commit-avatar-cell{width:47px}.commit-avatar-cell.table-list-cell{padding-right:0}.commit-indicator{margin-left:5px}.commit-links-cell{width:230px;text-align:right}.commit-links-group{margin-right:5px}.timeline-commits{width:100%;margin-top:5px;border-collapse:separate}.timeline-commits+.timeline-commits{margin-top:15px}.timeline-commits td{padding-top:4px;padding-right:8px;padding-bottom:4px;font-size:12px;line-height:16px;vertical-align:top;background-color:transparent}.discussion-item .timeline-commits .commit-author{display:none}.timeline-commits .commit-gravatar{width:16px;padding-left:10px}.timeline-commits .commit-author{width:200px;padding-right:20px;white-space:nowrap}.timeline-commits .author{font-weight:bold;color:#555}.timeline-commits .commit-message{min-height:0}.timeline-commits .commit-message a{color:#555}.timeline-commits .commit-message a:hover{color:#4183c4}.timeline-commits .commit-desc pre{padding-left:10px;font-size:11px;color:#777;border-left:1px solid #eee}.timeline-commits .commit-desc pre a{word-break:break-word}.timeline-commits .hidden-text-expander{margin-top:3px;margin-left:0;vertical-align:top}.timeline-commits .hidden-text-expander a{height:13px;background-color:#eee}.timeline-commits .hidden-text-expander a:hover{color:#fff;background-color:#4183c4}.timeline-commits .commit-meta{text-align:right;white-space:nowrap}.timeline-commits .commit-meta .status{width:16px;text-align:center}.timeline-commits .commit-meta .status.status-pending{color:#cea61b}.timeline-commits .commit-meta .octicon{margin-right:1px;margin-left:1px}.commit-icon{display:table-cell;width:16px;color:#ccc}.commit-icon .octicon{background-color:#fff}.commit-id{color:#bbb}.commit-id:hover{color:#4183c4}.full-commit{padding:8px 8px 0;margin:10px 0;background:#e6f1f6;border:1px solid #c5d5dd;border-radius:3px}.full-commit:first-child{margin-top:0}.full-commit .button-outline{background:none;border:1px solid #cedee5}.full-commit .button-outline:hover{color:#4183c4;border:1px solid #4183c4}.full-commit p.commit-title{margin:0 0 8px;font-size:18px;font-weight:bold;color:#213f4d;text-shadow:0 1px rgba(255,255,255,0.5)}.full-commit .branches-list{display:inline-block;margin-right:10px;vertical-align:middle;list-style:none}.full-commit .branches-list li{display:inline-block;padding-left:3px;font-weight:bold;color:#596063}.full-commit .branches-list li:before{padding-right:6px;font-weight:normal;content:"+"}.full-commit .branches-list li:first-child{padding-left:0}.full-commit .branches-list li:first-child:before{padding-right:0;content:""}.full-commit .branches-list li.loading{font-weight:normal;color:#818c90}.full-commit .branches-list li.pull-request{font-weight:normal;color:#818c90}.full-commit .branches-list li.pull-request:before{margin-left:-8px;content:""}.full-commit .branches-list li.pull-request-error{margin-bottom:-1px}.full-commit .branches-list li a{color:inherit}.full-commit .commit-meta{padding:8px;margin-right:-8px;margin-left:-8px;background:#fff;border-top:1px solid #d8e6ec;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.full-commit .sha-block{float:right;margin-left:15px;font-size:12px;color:#888}.full-commit.merge-commit .sha-block{clear:right}.full-commit.merge-commit .sha-block+.sha-block{margin-top:2px}.full-commit .sha-block>.sha{color:#444}.full-commit .sha-block>a{color:#444;text-decoration:none;border-bottom:1px dotted #ccc}.full-commit .sha-block>a:hover{border-bottom:1px solid #444}.full-commit .authorship{margin-top:-2px;margin-bottom:-4px;margin-left:-4px;font-size:14px;color:#999}.full-commit .authorship .gravatar{margin-top:-2px;margin-right:3px;vertical-align:middle;border-radius:3px}.full-commit .authorship a{font-weight:bold;color:#444;text-decoration:none}.full-commit .authorship a:hover{text-decoration:underline}.full-commit .authorship .author-name{color:#444}.full-commit .authorship .hint a{color:#4183c4}.full-commit .authorship .committer{display:block;margin-top:-2px;margin-left:34px;font-size:12px}.branches-tag-list{display:inline-block;margin-right:10px;vertical-align:middle;list-style:none}.branches-tag-list .more-commit-details,.branches-tag-list.open .hidden-text-expander{display:none}.branches-tag-list.open .more-commit-details{display:inline-block}.branches-tag-list li{display:inline-block;padding-left:3px}.branches-tag-list li:first-child{padding-left:0;font-weight:bold;color:#596063}.branches-tag-list li.loading{font-weight:normal;color:#818c90}.branches-tag-list li.abbrev-tags{cursor:pointer}.branches-tag-list li a{color:inherit}.branches-tag-list li .hidden-text-expander a{background-color:#dae5eb}.branches-tag-list li .hidden-text-expander a:hover{background-color:#d1dbe0}.commit-branches{min-height:18px;margin-top:-6px;margin-bottom:8px;font-size:12px;color:#818c90;vertical-align:middle}.commit-branches .octicon{vertical-align:middle}.full-commit .commit-desc,.commit-desc-container .commit-desc{display:block;margin:-5px 0 10px}.full-commit .commit-desc pre,.commit-desc-container .commit-desc pre{max-width:100%;overflow:visible;text-shadow:0 1px rgba(255,255,255,0.5);word-wrap:break-word}.commit-loader .loader-error{display:none;margin:0;font-size:12px;font-weight:bold;color:#bd2c00}.commit-loader.error .loader-loading{display:none}.commit-loader.error .loader-error{display:block}.historical-banner{padding:15px 20px 15px 130px;margin-bottom:20px;overflow:hidden;color:#333;background:#fff;border:1px solid #e5e5e5;border-radius:5px}.historical-banner h2{margin:0 0 5px}.historical-banner p{margin:0}.historical-banner .illustration{position:absolute;top:12px;left:20px;color:rgba(0,0,0,0.1)}.roses-divider{margin-bottom:20px;text-align:center}.file-history-tease{margin-bottom:10px;font-size:14px;color:#7b878c;background:#e7ecee;border:1px solid #d2d9dd;border-radius:3px}.file-history-tease .author a{font-weight:bold;color:#000}.file-history-tease .commit-title{display:inline}.file-history-tease .sha{font-size:13px}.file-history-tease .loader-loading,.file-history-tease .loader-error{margin:0}.file-history-tease .loader-loading img,.file-history-tease .loader-error img{vertical-align:middle}.file-history-tease .participation{padding:5px 8px;font-size:12px;font-weight:normal;line-height:20px;color:#666;background-color:#fff;border-top:1px solid #d8e6ec;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.file-history-tease .participation:before{display:table;content:""}.file-history-tease .participation:after{display:table;clear:both;content:""}.file-history-tease .participation .quickstat{float:left;margin:0 10px 0 0}.file-history-tease .participation .quickstat strong{color:#000}.file-history-tease .participation a{color:#888;text-decoration:none}.file-history-tease .participation .avatar-link{margin-right:3px}.file-history-tease-header{padding:5px 8px;line-height:24px}.file-history-tease-header .avatar{float:left;margin-right:5px}.toggle-line-notes-below{color:#777}.commit-comments-heading h3{display:inline-block;margin-right:15px}.commit-build-statuses{position:relative;display:inline-block;text-align:left}.commit-build-statuses.active .dropdown-menu-content{display:block}.commit-build-statuses.active .tooltipped:before,.commit-build-statuses.active .tooltipped:after{display:none}.commit-build-statuses .dropdown-menu{min-width:400px;max-width:500px;padding-top:0;padding-bottom:0}.commit-build-statuses .dropdown-menu .build-statuses-list{max-height:170px;border-bottom:0}.commit-build-statuses .dropdown-menu-w,.commit-build-statuses .dropdown-menu-e{top:-11px}.commit-build-statuses .status-description .button-link{display:none}.commit-build-statuses .build-status-item:last-child{border-radius:0 0 2px 2px}.commit-ref{position:relative;display:inline-block;padding:0 5px;border-radius:3px;font:0.75em/2 Consolas, "Liberation Mono", Menlo, Courier, monospace;color:#336479;white-space:nowrap;background-color:#e8f0f8}.commit-ref .user{color:#598a9f}a.commit-ref:hover{text-shadow:-1px -1px 0 rgba(0,0,0,0.2);background-color:#2a5177;background-image:-webkit-linear-gradient(#74a4d4, #2a5177);background-image:linear-gradient(#74a4d4, #2a5177);background-repeat:repeat-x;border-color:#2a5177;text-decoration:none}.compare-cutoff,.diff-cutoff{margin:5px 0;padding:8px 0;font-weight:bold;text-align:center;border-radius:3px;color:#4c4a42;background-color:#fff9ea;border:solid 1px #dfd8c2}.table-of-contents{margin:15px 0}.table-of-contents li{padding:7px 0;list-style-type:none}.table-of-contents li+li{border-top:1px solid #eee}.table-of-contents li>.octicon{margin-right:3px;vertical-align:-1px}.table-of-contents .octicon-diff-removed{color:#bd2c00}.table-of-contents .octicon-diff-renamed{color:#677a85}.table-of-contents .octicon-diff-modified{color:#d0b44c}.table-of-contents .octicon-diff-added{color:#6cc644}.toc-diff-stats{padding-left:20px;line-height:26px}.toc-diff-stats .octicon{float:left;margin-top:3px;margin-left:-20px;color:#ccc}.toc-diff-stats .button-link{font-weight:bold}.toc-diff-stats+.content{padding-top:5px}span.no-nl-marker{position:relative;top:1px;color:#bd2c00;margin-left:4px;vertical-align:middle}.symlink .no-nl-marker{display:none}.existing-pull{margin:10px 0}.existing-pull .list-group-item:before{display:table;content:""}.existing-pull .list-group-item:after{display:table;clear:both;content:""}.existing-pull .existing-pull-contents{float:left;width:680px}.existing-pull .existing-pull-button{float:right;margin-top:3px}.existing-pull .existing-pull-number{font-weight:normal;color:#aaa}.existing-pull .css-truncate{max-width:700px}.existing-pull .css-truncate p{display:inline}.compare-pr-placeholder{margin:10px 0;padding:15px;font-size:14px;color:#4c4a42;background-color:#fff9ea;border:solid 1px #dfd8c2;border-radius:3px}.compare-pr-placeholder p{margin:7px 0;color:#6d6c60}.compare-pr-placeholder .button{margin-right:10px;margin-bottom:-2px}.compare-pr-placeholder .button .octicon{vertical-align:-1px}.compare-pr-placeholder .help-link{margin-top:5px;margin-right:-3px;padding:3px;color:#9c997d;text-decoration:none}.compare-pr .pull-request-composer{display:none}.compare-pr .contributing{display:none}.compare-pr.open .compare-pr-placeholder{display:none}.compare-pr.open .pull-request-composer{display:block}.compare-pr.open .contributing{display:block}.contributing{padding:15px;margin:15px 0;font-size:14px;color:#4c4a42;background-color:#fff9ea;border:1px solid #dfd8c2;border-radius:3px}.pull-request-composer{position:relative;margin-bottom:15px;border:1px solid #ddd;border-radius:3px}.pull-request-composer .preview-content{min-height:120px}.discussion-topic{float:left;width:80%;border-right:1px solid #ddd}.composer-meta{float:left;width:20%;padding-right:10px;padding-left:10px;text-align:center}.composer-meta .branch-action-icon{display:inline-block;float:none;margin:15px 0}.composer-meta .merge-branch-heading{font-size:14px}.composer-meta .merge-branch-description{margin:10px 0;font-size:12px}.composer-meta .branch-action-state-clean .merge-branch-heading{color:#6cc644}.composer-submit{position:absolute;right:1%;bottom:10px;width:18%}#contact-github textarea{height:100px;resize:vertical}.heartocat{display:block;margin:50px auto 0}.documentation-results-wrapper{position:relative;top:-19px}.documentation-results{position:absolute;top:0;z-index:2;width:400px;margin-top:5px;clear:both;box-shadow:0 0 5px rgba(0,0,0,0.2)}.documentation-results ul{width:100%}.documentation-results ul li:first-child a{border-top-left-radius:3px;border-top-right-radius:3px}.documentation-results .documentation-results-footer a{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.documentation-results a{outline:none;padding:5px 10px;display:block;color:#333;font-weight:bold;cursor:pointer;text-decoration:none;border:solid #ddd;border-width:0 1px 1px;background-color:#fff}.documentation-results a:hover{background-color:#3586c3;color:#fff}.documentation-results a.selected{background-color:#3586c3;color:#fff}ul.documentation-results-group{list-style-type:none}.contact-form-extras{display:none}.context-loader-container .context-loader{display:none}.context-loader-container .context-loader.is-context-loading{display:block;white-space:nowrap}.context-loader-container .context-loader-overlay{opacity:1;-webkit-transition:opacity 0.25s ease-in-out;transition:opacity 0.25s ease-in-out}.context-loader-container .context-loader-overlay.is-context-loading{opacity:0.5}.page-context-loader{margin-left:10px;display:none}.page-context-loader.is-context-loading{display:inline-block}body.disables-context-loader .page-context-loader,body.disables-context-loader .context-loader{display:none !important}.contributions-tab{margin-top:20px}.calendar-graph{padding:5px 0 0;height:126px;text-align:center}.calendar-graph.days-selected rect.day{opacity:0.5}.calendar-graph.days-selected rect.day.active{opacity:1}.calendar-graph .activity{margin-top:0}.calendar-graph .dots{margin:20px auto 0;width:64px;height:64px}.calendar-graph text.month{font-size:10px;fill:#aaa}.calendar-graph text.wday{fill:#ccc;font-size:9px}#contributions-calendar rect.day{shape-rendering:crispedges}#contributions-calendar rect.day.empty:hover{stroke:none}#contributions-calendar rect.day:hover{stroke:#555;stroke-width:1px}.contrib-column{padding:15px 0;text-align:center;border-left:1px solid #ddd;border-top:1px solid #ddd;font-size:11px}.contrib-column-first{border-left:0}.contrib-number{font-weight:300;line-height:1.3em;font-size:24px;display:block;color:#333}.contrib-footer{font-size:11px;padding:0 10px 12px}.contrib-legend{font-size:11px;color:#999;float:right}.contrib-legend .legend{display:inline-block;list-style:none;margin:0 5px;position:relative;bottom:-1px}.contrib-legend .legend li{display:inline-block;width:10px;height:10px}.new-user-contrib-intro{border-top:solid 1px #ddd;padding:5px 20px;font-size:16px}.contrib-square{color:#d6e685;font-size:22px;line-height:1}.contribution-activity h2{font-size:18px;font-weight:normal;margin:30px 0 15px}.contribution-activity .select-menu-button{position:relative;top:-4px}.contribution-activity.loading .contribution-activity-listing{display:none}.contribution-activity.loading .contribution-activity-spinner{display:block}.contribution-activity-spinner{margin:20px auto 0;width:64px;height:64px;display:none}ul.simple-conversation-list a.meta{color:#777}li.contribution{list-style:none;padding:10px 0}li.contribution:last-child{border-bottom:0}li.contribution h3{font-size:14px;display:inline-block;margin:0}li.contribution h3 a{color:#4183c4}li.contribution .cmeta{display:block;font-size:12px;color:#aaa;font-weight:normal}li.contribution .cmeta a{color:#666}li.contribution .cmt{color:#999}li.contribution .d{color:#c00}li.contribution .a{color:#8cac29}li.contribution .num{color:#777}.subscribe-feed{display:inline-block;color:#333}.subscribe-feed .octicon{margin-right:5px}.new-user-panel{position:relative;padding:18px;margin-bottom:30px;font-size:16px;border:dashed 2px #ccc;border-radius:3px}.new-user-panel-close{position:absolute;top:10px;right:18px;color:#ccc}.new-user-panel-close:hover{color:#666}.new-user-intro{margin:0 120px;font-size:36px;font-weight:normal;line-height:1.3;text-align:center}.new-user-heading-small{margin:5px 170px 20px;font-size:20px;color:#888;text-align:center}.button-hello-world{font-size:16px;padding:10px 50px}.welcome-guides{position:relative;padding:30px;margin-bottom:30px;border:2px dashed #ddd;border-radius:3px}.welcome-guides h1{margin-top:0;margin-bottom:0;text-align:center}.welcome-guides .lead{margin-top:0;margin-bottom:20px;text-align:center}.welcome-guides .guides-list-item{color:#777}.welcome-guides .guides-list-item:hover{color:#4183c4;text-decoration:none}.welcome-guides .guides-list-item p{margin-bottom:0}.welcome-guides .dismiss-guides{position:absolute;top:30px;right:28px;display:block;padding-left:5px;color:#ccc}.welcome-guides .dismiss-guides:hover{color:#4183c4}.guides-bootcamp{text-align:center}.guides-bootcamp p{margin-top:0;margin-bottom:0}.guides-bootcamp .guides-list-item{padding-right:15px;padding-left:15px}.guides-bootcamp .guides-image{display:block;width:auto;height:100px;margin:10px auto 20px}.guides-bootcamp .guides-list-title{margin-top:0;margin-bottom:5px;color:#4183c4}.bootcamp{margin:0 0 20px}.bootcamp h1{position:relative;padding:8px 10px;margin:0;font-size:16px;font-weight:bold;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.4);background-color:#829aa8;border:1px solid #677c89;border-bottom-color:#6b808d;border-radius:3px 3px 0 0}.bootcamp h1 a{color:#fff;text-decoration:none}.bootcamp .octicon-x{position:relative;top:-2px;font-size:16px;line-height:16px}.bootcamp .dismiss-bootcamp{position:absolute;top:9px;right:9px;display:block;width:16px;height:16px;background-repeat:no-repeat;background-position:0 0}.bootcamp .dismiss-bootcamp:hover{background-position:0 -19px}.bootcamp .bootcamp-body{padding:10px 1%;overflow:hidden;background-color:#e9f1f4;border-color:#e9f1f4 #d8dee2 #d8dee2;border-style:solid;border-width:1px;border-radius:0 0 3px 3px}.bootcamp ul li{background-color:#f5f3b4;background-image:-webkit-linear-gradient(#fffff5, #f5f3b4);background-image:linear-gradient(#fffff5, #f5f3b4);background-repeat:repeat-x;position:relative;display:block;float:left;width:24.25%;height:215px;margin:0 1% 0 0;overflow:hidden;font-size:13px;font-weight:normal;color:#666;border:1px solid #dfddb5;border-radius:3px;box-shadow:0 1px 0 #fff}.bootcamp ul li.be-social{margin-right:0}.bootcamp ul li:hover{background-color:#f1eea3;background-image:-webkit-linear-gradient(#fcfce9, #f1eea3);background-image:linear-gradient(#fcfce9, #f1eea3);background-repeat:repeat-x;border:1px solid #d6d4ad}.bootcamp ul li a{color:#666;text-decoration:none}.bootcamp .image{position:relative;display:block;height:133px;background-repeat:no-repeat;background-position:center center}.bootcamp .setup .image{background-image:url(/images/modules/dashboard/bootcamp/octocat_setup.png);background-size:129px 96px}.bootcamp .create-a-repo .image{background-image:url(/images/modules/dashboard/bootcamp/octocat_repo.png);background-size:129px 96px}.bootcamp .fork-a-repo .image{background-image:url(/images/modules/dashboard/bootcamp/octocat_fork.png);background-size:178px 96px}.bootcamp .be-social .image{background-image:url(/images/modules/dashboard/bootcamp/octocat_collabocats.png);background-position:center 27px;background-size:207px 96px}.bootcamp .desc{position:relative;z-index:2;padding:10px 15px 20px;overflow:hidden;text-align:center;background-repeat:no-repeat}.bootcamp .desc>h2{padding:0;margin:0 0 5px;font-size:15px;color:#393939}.bootcamp .desc p{padding:0;margin:0;line-height:1.2em}.bootcamp .step-number{position:absolute;top:-1px;left:10px;font-size:36px;font-weight:bold;color:#e4e1a8;opacity:0.75}.first-run{width:800px;margin:25px auto;text-align:center}.first-run-heading{font-size:36px;font-weight:normal}.first-run-subheading{font-size:16px;font-weight:normal;color:#999}.first-run-survey{width:800px;padding:0;margin:0 auto}.first-run-survey .button+.button{margin-left:12px}.first-run-survey ul.guides{list-style-type:none}.first-run-small-wrapper{box-sizing:border-box;padding:35px 25px;margin-top:25px;background-color:#f0f7fd;border:1px solid #d2d8dd;border-radius:3px}.first-run-survey-question p{margin:0 0 25px;font-size:22px;font-weight:500;line-height:1}.first-run-survey-progress{margin-top:25px}.first-run-survey-progress .circle{display:inline-block;width:10px;height:10px;margin:0 4px;border:1px solid #d1d1d1;border-radius:52%}.first-run-survey-progress .current{background-color:#4183c4;border-color:#4183c4}.first-run-survey-progress .completed{background-color:#d1d1d1;border-color:#d1d1d1}.first-run-survey-other{width:230px;margin:16px auto auto}.first-run-skip{padding:15px 0 0;margin-top:30px;font-size:14px;border-top:1px solid #e9e9e9}.first-run-skip span{font-weight:500}.first-run-get-started{box-sizing:border-box;padding:0 2px;margin:25px 0;overflow:hidden;clear:both;border:1px solid #e5e5e5;border-radius:3px;box-shadow:0 1px 1px rgba(0,0,0,0.01)}.first-run-get-started div{float:left;width:50%;box-sizing:border-box;padding:18px 20px 22px 18px;text-align:left}.first-run-get-started .mega-octicon{float:left;color:#cccccc}.first-run-get-started p{padding:0 0 0 47px;margin:5px 0;color:#333}.first-run-get-started h2{padding:0 0 0 47px;margin:0 0 10px;font-size:18px;font-weight:bold;color:#333}.first-run-get-started a{margin-top:12px;margin-left:47px}.first-run-get-started .first-box{border-right:1px solid #eee}.first-run-help-link{color:#999}.user-repos .mini-repo-list-item{padding-right:6px}.user-repos .mini-repo-list-item .repo-and-owner{max-width:100%}.user-repos .mini-repo-list-item .owner{max-width:145px}#example_octofication{float:right;width:335px;margin:0}.octofication{margin-bottom:15px}.octofication .message{min-height:56px;padding:10px 10px 10px 50px;border:solid 1px #4183c4;border-radius:3px}.octofication .message h3{margin:1px 20px 3px 0;font-size:14px;line-height:1.2}.octofication .message p{padding:0;margin:0;font-size:12px;color:#555}.octofication .message p+p{margin-top:15px}.octofication .broadcast-icon{position:relative;float:left;margin-left:-40px;color:#4183c4}.octofication .broadcast-icon-mask{position:absolute;top:0;width:10px;height:16px;background-color:#fff;opacity:0;-webkit-animation:broadCastMaskFade 1s ease-in-out 2s 2;animation:broadCastMaskFade 1s ease-in-out 2s 2}.octofication .broadcast-icon-mask.left{left:0}.octofication .broadcast-icon-mask.right{right:0}.octofication .notice-dismiss{position:relative;top:-2px;float:right;color:#bbb}.octofication .notice-dismiss:hover{color:#666}.octofication-more{margin:5px 0;font-size:11px;text-align:right}@-webkit-keyframes broadCastMaskFade{0%{opacity:0}30%{opacity:1}70%{opacity:1}100%{opacity:0}}@keyframes broadCastMaskFade{0%{opacity:0}30%{opacity:1}70%{opacity:1}100%{opacity:0}}.github-jobs-promotion{margin-bottom:15px}.github-jobs-promotion p{background-color:#e4f0ff;background-image:-webkit-linear-gradient(#f5fbff, #e4f0ff);background-image:linear-gradient(#f5fbff, #e4f0ff);background-repeat:repeat-x;position:relative;padding:10px 18px;font-size:12px;color:#1b3650;text-align:center;border:1px solid #cee0e7;border-radius:3px}.github-jobs-promotion p a{color:#1b3650}.github-jobs-promotion a.jobs-logo{display:block;font-size:11px;color:#999;text-align:center}.github-jobs-promotion a.jobs-logo:hover{text-decoration:none}.github-jobs-promotion a.jobs-logo strong{display:inline-block;width:62px;height:12px;text-indent:-9999px;vertical-align:middle;background:url(/images/modules/jobs/logo.png) 0 0 no-repeat;background-size:62px auto}.github-jobs-promotion .job-location{white-space:nowrap}.github-jobs-promotion a.octicon-info{position:absolute;right:5px;bottom:5px;color:#a9b8be;color:#a9b8be;text-decoration:none;cursor:pointer;opacity:0.8}.github-jobs-promotion p:hover .octicon-info{opacity:1}#dashboard h1{margin-bottom:0.5em;font-size:160%}#dashboard h1 a{font-size:70%;font-weight:normal}#dashboard .notice{padding:15px;margin-top:0;margin-bottom:0;text-align:center}.news .release{margin-top:0;margin-bottom:0}.news blockquote{color:#666}.news h1{margin-bottom:0}.news .alert{position:relative;padding:0 0 1em 45px;overflow:hidden;border-top:1px solid #f1f1f1}.news .alert .commits{padding-left:40px}.news .alert .css-truncate.css-truncate-target,.news .alert .css-truncate .css-truncate-target{max-width:180px}.news .alert p{margin:0}.news .alert .markdown-body blockquote{padding:0 0 0 40px;border:0 none}.news .alert .mega-octicon{position:absolute;top:14px;left:0;width:32px;height:32px;padding:3px;color:#bbb}.news .alert .mega-octicon::before{color:inherit}.news .alert .octicon{width:16px;height:16px;color:#bbb}.news .alert .body{padding:1em 0 0;overflow:hidden;font-size:14px;border-bottom:0}.news .alert .time{font-size:12px;color:#bbb}.news .alert .title{padding:0;font-weight:bold}.news .alert .title .subtle{color:#bbb}.news .alert .gravatar{float:left;margin-right:0.6em;line-height:0;background-color:#fff;border-radius:3px}.news .alert .simple>.octicon{position:absolute !important;left:11px;width:16px;height:16px}.news .alert .simple .title{display:inline-block;font-size:13px;font-weight:normal;color:#666}.news .alert .simple .time{display:inline-block}.news .alert .pull-info,.news .alert .branch-link{display:inline-block;padding:3px 7px;margin-top:5px;font-size:12px;color:rgba(0,0,0,0.5);background:#e8f1f6;border-radius:3px}.news .alert .pull-info em,.news .alert .branch-link em{font-style:normal;font-weight:bold}.news .alert .branch-link{position:relative;top:-2px;margin:0;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace}.news .alert .branch-link .octicon{color:#b0c4ce}.news .alert:first-child{border-top:0}.news .alert:first-child .body{padding-top:0}.news .alert:first-child .mega-octicon{top:0}.news .git_hub .done{color:#666;text-decoration:line-through}.news .commits li{margin-top:0.15em;list-style-type:none}.news .commits li.more{padding-top:2px;font-size:11px}.news .commits li .committer{display:none;padding-left:0.5em}.news .commits li img{margin:0 1px 0 0;vertical-align:middle;background-color:#fff;border-radius:2px}.news .commits li img.emoji{padding:0;margin:0;border:0}.news .commits li .message{display:inline-block;max-width:390px;margin-top:2px;overflow:hidden;font-size:13px;line-height:1.3;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.news div.message,.news li blockquote{display:inline;font-size:13px;color:#666}.release-assets{padding-left:40px}.release-assets li{margin-top:0.15em;list-style-type:none}.release-assets .more{padding-top:2px;font-size:11px}.news-full,.page-profile .news{float:none;width:auto}.activity-tab .blankslate{margin-top:10px}.activity-tab .news .markdown-body blockquote,.activity-tab .news .alert .commits{padding-left:0}.activity-tab .news a.gravatar,.activity-tab .news div.gravatar{display:none}.saml-signed-out-notice{position:relative;width:450px;padding:10px 10px 10px 70px;margin:50px auto 30px;border:1px solid #eee;border-radius:3px}.saml-signed-out-notice .mega-octicon{position:absolute;top:30px;left:20px;color:#ddd}.saml-signed-out-notice h3{margin-bottom:0}.saml-signed-out-notice p{margin-top:5px}.dashboards-overview-lead{width:700px}.dashboards-overview-cards .boxed-group{margin:10px 0;width:100%}.dashboards-overview-cards .boxed-group path{stroke:#1db34f;stroke-opacity:0.5}.dashboards-overview-cards .blankslate{border:0;background-color:#fff;box-shadow:none;padding-top:47px}.dashboards-overview-cards .octicon-arrow-down{color:#bd2c00}.dashboards-overview-cards .octicon-arrow-up{color:#1db34f}.dashboards-overview-cards .graph-canvas .dots{padding:43px 0}.dashboards-overview-cards .summary-stats{height:78px}.dashboards-overview-cards .summary-stats .created_at{color:#1db34f}.dashboards-overview-cards .summary-stats .closed_at,.dashboards-overview-cards .summary-stats .merged_at{color:#4183c4}.dashboards-overview-cards .summary-stats .totals-num{margin:0 7px}.dashboards-overview-cards .summary-stats .single{width:100%}.dashboards-overview-graph{height:160px}.dashboards-overview-graph .path{fill:none;stroke-width:2}.dashboards-overview-graph path.created_at{stroke:#1db34f}.dashboards-overview-graph path.merged_at,.dashboards-overview-graph path.closed_at{stroke:#1d7fb3}.dashboards-overview-graph .y line{stroke:#1db34f}.dashboards-overview-graph .y.unique line{stroke:#1d7fb3}.dashboards-overview-graph .overlay{fill-opacity:0}.created_at circle{fill:#1db34f;stroke:#fff;stroke-width:2}.merged_at circle,.closed_at circle{fill:#1d7fb3;stroke:#fff;stroke-width:2}.diffstat{font-size:12px;font-weight:bold;color:#666;white-space:nowrap;cursor:default}.diffstat-bar{display:inline-block;margin-left:3px;font-size:16px;color:#ddd;letter-spacing:1px;text-align:left;text-decoration:none;font:normal normal 16px/1 "octicons";display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased}.discussion-timeline{position:relative;width:760px;float:left}.discussion-timeline:before{display:block;content:"";position:absolute;top:0;bottom:0;left:79px;width:2px;background-color:#f3f3f3;z-index:-1}.discussion-sidebar{position:-webkit-sticky;position:sticky;top:0;z-index:21;float:right;width:140px}.discussion-sidebar-item{padding-top:15px;font-size:12px;color:#999}.discussion-sidebar-item .minibutton .octicon{margin-right:0}.discussion-sidebar-item .button-block{margin-bottom:8px}.discussion-sidebar-item+.discussion-sidebar-item{margin-top:15px;border-top:1px solid #eee}.discussion-sidebar-item .select-menu{position:relative}.discussion-sidebar-item .select-menu-modal-holder{top:25px;left:auto;right:-1px}.discussion-sidebar-heading{margin-top:0;margin-bottom:10px;font-size:12px;line-height:16px;color:#777}.discussion-sidebar-toggle{padding:5px;margin:-5px -5px 5px}.discussion-sidebar-toggle .octicon{float:right;padding:5px;margin:-6px -5px -5px 5px;color:#ccc}.discussion-sidebar-toggle:hover{color:#4183c4;text-decoration:none;cursor:pointer}.discussion-sidebar-toggle:hover .octicon{color:inherit}button.discussion-sidebar-toggle{display:block;width:150px;font-weight:bold;text-align:left;background:none;border:0}.sidebar-labels .labels .label{display:block;max-width:100%;padding:6px 10px;font-size:12px;box-shadow:none}.sidebar-labels .labels .label+.label{margin-top:3px}.sidebar-milestone .progress-bar{margin-bottom:2px;border-radius:2px;height:8px}.milestone-name{display:block;margin-top:5px;font-weight:bold;color:#555}.milestone-name .css-truncate-target{max-width:100%}.milestone-name:hover{color:#4183c4;text-decoration:none}.sidebar-assignee .css-truncate-target{max-width:110px}.sidebar-assignee .avatar{margin-top:-1px;margin-right:2px;border-radius:2px}.sidebar-assignee .assignee{color:#555;font-weight:bold}.sidebar-assignee .assignee:hover{color:#4183c4;text-decoration:none}.sidebar-notifications{position:relative}.sidebar-notifications .thread-subscription-status{margin:0;padding:0;border:0}.sidebar-notifications .thread-subscription-status .thread-subscribe-form{display:block}.sidebar-notifications .thread-subscription-status .mega-octicon{display:none}.sidebar-notifications .thread-subscription-status .reason{padding:0;margin:5px 0 0;font-size:11px;color:#999}.sidebar-notifications .thread-subscription-status .minibutton{display:block;width:100%}.participation .participant-avatar{float:left;margin:3px 0 0 3px}.participation a{color:#999}.participation a:hover{color:#4183c4;text-decoration:none}.participation-avatars{margin-left:-3px}.participation-avatars:before{display:table;content:""}.participation-avatars:after{display:table;clear:both;content:""}.participation-more{float:left;margin:6px 0 0;line-height:14px}.lock-toggle-link{color:#777;font-weight:bold}.lock-toggle-link:hover{color:#4183c4;text-decoration:none}.inline-comment-form .form-actions,.timeline-new-comment .form-actions{padding:0 10px 10px}.form-content .form-actions{padding:0}.gh-header-actions{float:right;margin-top:3px}.gh-header-actions .minibutton{float:left;margin-left:5px}.gh-header-actions .minibutton .octicon{margin-right:0}.gh-header .gh-header-edit{display:none}.gh-header.open .gh-header-show{display:none}.gh-header.open .gh-header-edit{display:block}.gh-header-title{margin-top:0;margin-bottom:0;margin-right:150px;font-weight:normal;line-height:1.1;word-wrap:break-word}.gh-header-no-access .gh-header-title{margin-right:0}.gh-header-number{font-weight:300;color:#aaa;letter-spacing:-1px}.gh-header-edit{margin-top:-5px}.gh-header-edit:before{display:table;content:""}.gh-header-edit:after{display:table;clear:both;content:""}.gh-header-edit .edit-issue-title{float:left;width:760px;padding:6px 10px;margin-right:10px;font-size:16px;background-color:#fafafa}.gh-header-edit .edit-issue-title:focus{background-color:#fff}.gh-header-edit .button{float:left;padding:8px 15px}.gh-header-edit .button-link{float:left;margin:10px}.gh-header-meta{margin-top:9px;font-size:14px;line-height:20px;color:#777;padding-bottom:20px;border-bottom:1px solid #eee}.gh-header.issue .gh-header-meta{margin-bottom:15px}.gh-header.pull .gh-header-meta{border-bottom:0;padding-bottom:0}.gh-header-meta.discussions-header-meta{margin-top:6px;padding-bottom:15px}.gh-header-meta .flex-table-item{vertical-align:top}.gh-header-meta .flex-table-item-primary{padding-top:4px;white-space:normal;word-wrap:break-word}.gh-header-meta .flex-table-item-primary .commit-ref .css-truncate-target,.gh-header-meta .flex-table-item-primary .commit-ref:hover .css-truncate-target{max-width:780px !important}.gh-header-meta .state{margin-right:8px}.gh-header-meta .avatar{float:left;margin-top:-3px;margin-right:5px}.gh-header-meta .author{color:#555;font-weight:bold}.gh-header-meta .noun{text-transform:lowercase}.tabnav-pr{margin:15px 0 20px;border-color:#e5e5e5}.tabnav-pr .tabnav-tab{padding:9px 14px;font-size:13px;color:#777}.tabnav-pr .tabnav-tab.selected{color:#333;border-color:#e5e5e5}.tabnav-pr .diffstat-bar{padding-bottom:3px}.timeline-comment-wrapper>.timeline-comment:after,.timeline-comment-wrapper>.timeline-comment:before,.timeline-new-comment .timeline-comment:after,.timeline-new-comment .timeline-comment:before{position:absolute;top:11px;left:-16px;right:100%;width:0;height:0;display:block;content:" ";border-color:transparent;border-style:solid solid outset;pointer-events:none}.timeline-comment-wrapper>.timeline-comment:after,.timeline-new-comment .timeline-comment:after{border-width:7px;border-right-color:#f7f7f7;margin-top:1px;margin-left:2px}.timeline-comment-wrapper>.timeline-comment:before,.timeline-new-comment .timeline-comment:before{border-right-color:#ddd;border-width:8px}.timeline-comment-wrapper{position:relative;padding-left:64px;margin-top:15px;margin-bottom:15px;border-top:2px solid #fff;border-bottom:2px solid #fff}.timeline-comment-wrapper:first-child{margin-top:0}.discussion-timeline-actions .timeline-comment-wrapper:first-child{margin-top:15px}.timeline-comment-wrapper .timeline-comment.unread-item:after,.timeline-comment-wrapper .timeline-comment.unread-item:before{position:absolute;top:11px;left:-16px;right:100%;width:0;height:0;display:block;content:" ";border-color:transparent;border-style:solid solid outset;pointer-events:none}.timeline-comment-wrapper .timeline-comment.unread-item:after{border-width:7px;border-right-color:#fff9ea;margin-top:1px;margin-left:2px}.timeline-comment-wrapper .timeline-comment.unread-item:before{border-right-color:#dfd8c2;border-width:8px}.timeline-comment-avatar{float:left;margin-left:-64px;border-radius:3px}.timeline-comment{position:relative;background-color:#fff;border:1px solid #ddd;border-radius:3px}.timeline-comment.current-user{border-color:#bfccd1}.timeline-comment.current-user:after{border-right-color:#f2f8fa}.timeline-comment.current-user:before{border-right-color:#bfccd1}.timeline-comment.current-user .timeline-comment-header{color:#8e9597;background-color:#f2f8fa;border-bottom-color:#e1edf1}.timeline-comment.will-transition-once{-webkit-transition:border-color 0.65s ease-in-out;transition:border-color 0.65s ease-in-out}.timeline-comment.will-transition-once .timeline-comment-header{-webkit-transition:background-color 0.65s ease, border-bottom-color 0.65s ease-in-out;transition:background-color 0.65s ease, border-bottom-color 0.65s ease-in-out}.timeline-comment.will-transition-once .timeline-comment-label{-webkit-transition:border-color 0.65s ease-in-out;transition:border-color 0.65s ease-in-out}.timeline-comment.will-transition-once:before,.timeline-comment.will-transition-once:after{-webkit-transition:border-right-color 0.65s ease-in-out;transition:border-right-color 0.65s ease-in-out}.timeline-comment.unread-item{border-color:#dfd8c2}.timeline-comment.unread-item .timeline-comment-header{background-color:#fff9ea;border-bottom-color:#f1ede3}.timeline-comment.unread-item .timeline-comment-label{border-color:#dfd8c2}.timeline-comment:empty{display:none}.timeline-comment .comment+.comment{border-top:1px solid #e5e5e5}.timeline-comment .comment+.comment:before,.timeline-comment .comment+.comment:after{display:none}.timeline-comment .comment+.comment .timeline-comment-header{border-top-left-radius:0;border-top-right-radius:0}.timeline-comment-header{padding-left:15px;padding-right:15px;color:#999;background-color:#f7f7f7;border-bottom:1px solid #eee;border-top-left-radius:3px;border-top-right-radius:3px}.timeline-comment-header .author{font-weight:bold;color:#555}.timeline-comment-header .timestamp{white-space:nowrap;color:inherit}.timeline-comment-header code{word-break:break-all}.comment-type-icon{color:inherit}.timeline-comment-label{float:right;margin:8px 0 0 10px;padding:2px 5px;font-size:12px;border:1px solid rgba(0,0,0,0.1);border-radius:3px}.timeline-comment-label-spammy{color:#bd2c00;border-color:#bd2c00}.timeline-comment-header-text{max-width:78%;padding-top:10px;padding-bottom:10px}.timeline-comment-header-text code a{color:#555}.timeline-comment-header-avatar{float:left;margin-top:10px;margin-right:5px}.timeline-comment-actions{float:right;margin-right:-5px;margin-left:10px}.timeline-comment-action{display:inline-block;padding:10px 5px;color:inherit;opacity:0.5}.timeline-comment-action:hover{opacity:1;color:#4183c4;text-decoration:none}.timeline-comment-action .octicon-check{height:16px;font-size:18px}.compare-tab-comments .timeline-comment-actions{display:none}.discussion-item-ref .commit-gravatar{padding-left:2px;padding-right:5px}.discussion-item-ref .task-progress{display:block;margin-bottom:-2px}.discussion-item-ref .task-progress .progress-bar{margin-bottom:0}.discussion-item-ref .task-progress .octicon{font-size:16px}.discussion-item-ref .discussion-item-body .title{margin-top:10px}.discussion-item-ref .state{padding:1px 5px;margin-top:-4px;margin-left:8px;font-size:12px}.discussion-item-ref .state .octicon{width:1em;font-size:14px}.timeline-new-comment{max-width:780px;margin-bottom:0}.timeline-new-comment .comment-form-head{margin-bottom:10px}.timeline-new-comment .previewable-comment-form .comment-body{padding:5px 5px 15px;border-bottom:1px solid #eee}.discussion-item{position:relative;margin:15px 0 15px 79px;padding-left:25px}.discussion-item+.discussion-item{padding-top:15px;border-top:1px solid #f5f5f5}.discussion-item .author{color:#555;font-weight:bold}.discussion-item .timestamp{color:inherit;white-space:nowrap}.discussion-item .label-color{padding:2px 4px;font-size:12px;font-weight:bold;border-radius:2px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.12)}.discussion-item .label-color a:hover{text-decoration:none}.discussion-item-icon{float:left;width:32px;height:32px;margin-top:-7px;margin-left:-40px;line-height:28px;color:#666;text-align:center;background-color:#f3f3f3;border:2px solid #fff;border-radius:50%}.discussion-item-icon.octicon-pencil{font-size:14px}.discussion-item-header{min-height:30px;padding-top:5px;padding-bottom:5px;color:#777;line-height:20px;word-wrap:break-word}.discussion-item-header .avatar{float:left;margin-top:2px;margin-right:5px}.discussion-item-header .discussion-item-private{vertical-align:-1px}.discussion-item-header:last-child{padding-bottom:0}.discussion-item-header .commit-ref{font-size:85%;vertical-align:baseline}.discussion-item-header .button-outline{float:right;padding:4px 8px;margin-top:-5px}.discussion-item-body{margin-top:5px}.discussion-item-link{color:#777}.discussion-item-link:hover{color:#4183c4}.discussion-item-entity{font-weight:bold;color:#333}.discussion-item-entity:hover{color:#4183c4;text-decoration:none}.discussion-item-ref-title{margin-top:0;margin-bottom:0;line-height:1.2}.discussion-item-ref-title .issue-num{font-weight:normal;color:#999}.discussion-item-ref-title .title-link{color:#333}.discussion-item-ref-title .title-link:hover{color:#4183c4;text-decoration:none}.discussion-item-ref-title .title-link:hover .issue-num{color:inherit}.discussion-item-context-icon{display:inline-block;line-height:22px;margin-top:-2px;margin-left:10px}.discussion-item-help{color:#999}.discussion-item-help:hover{color:#4183c4}.discussion-item-private{color:#a1882b}.discussion-item-rollup-ref .state{margin-top:2px}.discussion-item-rollup-ref .discussion-item-context-icon{margin-top:2px}.discussion-item-reopened .discussion-item-icon{color:#fff;background-color:#6cc644}.discussion-item-merged .discussion-item-icon{padding-left:2px;color:#fff;background-color:#6e5494}.discussion-item-closed .discussion-item-icon{color:#fff;background-color:#bd2c00}.discussion-item-head_ref_deleted .discussion-item-icon{padding-left:2px;color:#fff;background-color:#999}.discussion-item-locked .discussion-item-icon,.discussion-item-unlocked .discussion-item-icon{color:#fff;background-color:#333}.discussion-item .renamed-was,.discussion-item .renamed-is{color:#333;font-weight:bold}.discussion-commits .discussion-item-icon{padding-top:1px}.discussion-commits .discussion-item-body{margin-top:0;margin-left:-31px}.discussion-item-toggle-open{display:none}.discussion-item-toggle{float:right;color:#777}.discussion-item-toggle:hover{color:#4183c4;text-decoration:none}.discussion-item-toggle .octicon{vertical-align:middle}.outdated-diff-comment-container .discussion-item-body{display:none}.outdated-diff-comment-container.open .discussion-item-body,.outdated-diff-comment-container.open .discussion-item-toggle-open{display:block}.outdated-diff-comment-container.open .discussion-item-toggle-closed{display:none}.new-discussion-timeline .form-content textarea{font-size:14px;line-height:1.6}.new-discussion-timeline .previewable-comment-form .comment-form-head.tabnav{background:#f7f7f7;padding:6px 10px 0;border-radius:3px 3px 0 0}.new-discussion-timeline .previewable-comment-form .draft-indicator{position:relative;top:-1px}.new-discussion-timeline .previewable-comment-form .comment{border:0}.new-discussion-timeline .previewable-comment-form .comment-body{padding:5px 5px 15px;border-bottom:1px solid #eee;background-color:transparent}.new-discussion-timeline .previewable-comment-form .timeline-comment .timeline-comment-actions{display:none}.new-discussion-timeline .closed-banner{position:relative;margin:15px 0 -15px;height:19px;overflow:visible;background:#f3f3f3;border-radius:0;border-bottom:15px solid #fff}.new-discussion-timeline .discussion-hidden{background:#fff;opacity:1;position:relative}.new-discussion-timeline .discussion-hidden .comment-header{background:#fff}.new-discussion-timeline .discussion-hidden .comment-snippet p{vertical-align:middle}.new-discussion-timeline .composer .timeline-comment{margin-bottom:10px}.new-discussion-timeline .composer .timeline-comment:after{border-right-color:#fff}.new-discussion-timeline .composer .comment-form-head.tabnav{padding-top:0;background-color:#fff}.discussion-timeline-actions{border-top:2px solid #f3f3f3;background-color:#fff}.discussion-timeline-actions .merge-pr{padding-top:0;border-top:0}.discussion-timeline-actions .thread-subscription-status{margin-top:20px}.discussion-timeline-actions .thread-subscription-status .mega-octicon{display:none}.discussions-header{margin-bottom:20px}.discussions-header .select-menu,.discussions-header .primary{float:left;margin-left:5px}.discussions-header-title{margin-top:0;margin-bottom:0;line-height:26px}.discussions-new{max-width:800px;padding:15px}.blankslate.discussions{padding:115px 0}.discussions{margin:0 0 20px}.discussions .discussion{font-size:13px;list-style-type:none;padding:12px 0 12px 72px;border-bottom:1px solid #eee;position:relative;min-height:74px}.discussions .discussion:before{display:table;content:""}.discussions .discussion:after{display:table;clear:both;content:""}.discussions .discussion.navigation-focus{background:#f9f9f9}.discussions .discussion.selected{background-color:#f9f9f9}.discussions .discussion.selected:before{background:#999}.discussions .discussion input[type="checkbox"]{top:27px}.discussions .discussion:before{position:absolute;display:block;content:"";top:-1px;left:0;bottom:0;width:3px}.discussions .discussion.spammy:before{background:#bd2c00}.discussions .discussion h3{font-size:17px;margin:4px 0 0;padding-bottom:5px}.discussions .discussion h3 span{font-weight:300;color:#c5c5c5}.discussions .discussion h3 a{color:#333;font-weight:bold}.discussions .discussion h4{margin-top:1px;margin-bottom:2px;font-size:12px;line-height:18px;color:#666}.discussions .discussion p{margin:0 0 5px}.discussions .discussion p.muted{color:#999;padding:5px 0}.discussions .discussion .pull-info{background:#e8f1f6;border-radius:3px;color:rgba(0,0,0,0.5);display:inline-block;font-size:12px;margin-top:5px;padding:3px 7px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.12)}.discussions .discussion .pull-info em{font-style:normal}.discussions .discussion:first-child{border-top:1px solid #eee}.discussions .discussion.unread:before{position:absolute;display:block;content:"";top:-1px;bottom:-1px;left:0;width:3px;background:#4183c4}.discussion-username{color:#333;font-weight:normal}.discussions-avatar{position:absolute;left:12px}.discussion-issue-number{color:#bbb}.discussion-body p{color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:13px}.discussion-meta{font-size:12px;line-height:17px}.discussion-meta:before{display:table;content:""}.discussion-meta:after{display:table;clear:both;content:""}.discussion-meta a{color:#999}.discussion-meta p{color:#999;padding:0;margin:0}.discussion-meta .octicon-comment{font-size:14px;color:#bbb;margin-left:4px}.discussion-participants{float:left;width:150px;margin-left:30px;color:#999}.discussion-participants .avatar-link{margin-right:3px}.discussion-last-comment{float:left;width:150px;margin-left:30px}.discussion-last-comment .avatar{float:left;margin-right:3px}.discussion-description{float:left;width:474px}.discussion-timeline .email-hidden-container{margin:3px 0}.discussion-hidden{background:#fff}.discussion-hidden .timeline-comment-content{border:1px solid #ddd;opacity:0.8;margin-left:64px}.discussion-hidden .timeline-comment-content:hover{-webkit-transition:opacity 0.25s ease-in-out;transition:opacity 0.25s ease-in-out;opacity:1}.discussion-hidden .timeline-comment-header{background:none;border-bottom:0;line-height:33px}.discussion-hidden .timeline-comment-header:before{display:table;content:""}.discussion-hidden .timeline-comment-header:after{display:table;clear:both;content:""}.discussion-hidden .timeline-comment-header .octicon{margin:0 3px}.discussion-hidden .timeline-comment-header .comment-snippet{display:inline-block;position:relative;top:-1px}.discussion-hidden .timeline-comment-header .comment-snippet p{width:370px;overflow:hidden;text-overflow:ellipsis;display:inline-block;white-space:nowrap;margin:0 0 0 3px;line-height:1}.discussion-hidden+.discussion-hidden{margin-top:-1px}.comment-header-right{float:right}.comment-header-actions{list-style-type:none}.comment-header-actions:before{display:table;content:""}.comment-header-actions:after{display:table;clear:both;content:""}.comment-header-actions li{float:left;font-size:11px;line-height:33px;margin:0 0 0 10px}.discussion-comment-label{background:#eee;border-radius:3px;color:#666;padding:2px 4px;margin:0 5px 0 0}.explore-head .container{position:relative}.explore-content{margin-top:-15px}.explore-content .blankslate{margin-top:15px}.repo-collection>ul{list-style-type:none;background:#f7f7f7;border:1px solid #ddd;border-radius:3px}.repo-collection .author-gravatar{float:left;margin-right:10px;background:#fff;border-radius:3px}.collection-stat{float:right;margin-left:10px;font-size:12px;color:#444}.collection-stat .octicon{margin-right:5px;color:#a7a7a7}.collection-item{position:relative;float:left;width:50%;height:70px;padding:15px}.collection-item .octicon-x{position:absolute;top:10px;right:10px;color:#ccc;text-decoration:none}.collection-item .repo-name{display:block;font-size:16px;font-weight:bold}.collection-item .css-truncate-target{max-width:380px}.collection-item .repo-description{margin:0}.explore-collection h2{margin:0 0 10px;font-size:18px;font-weight:normal;color:#2a2a2a}.explore-collection h2 .select-menu{position:relative;display:inline-block}.explore-collection h2 .select-menu-button{font-weight:bold;cursor:pointer}.explore-collection h2 .mega-octicon{vertical-align:middle}.explore-collection .see-more-link{float:right;margin-top:7px}.explore-page .see-more-link{font-size:14px;color:inherit}.explore-page .see-more-link .octicon{margin-left:5px}.explore-page.marketing-section{border-bottom:0}.explore-page.marketing-section .thread-subscription-status{border:0}.explore-page.marketing-section .signed-out-comment{margin-left:0}.explore-page .language-filter-list{margin-bottom:10px}.explore-section{position:relative;padding:40px 0;border-bottom:1px solid #eee}.explore-section:nth-child(even){background:#f9f9f9}.explore-section:nth-child(even) .repo-collection>ul{background:#fff}.explore-section:first-child{padding-top:0}.explore-section:nth-child(odd):last-child{padding-bottom:0;border-bottom:0}.explore-pjax-container{position:relative}.user-leaderboard-list .follow-list-info{margin-top:12px;margin-bottom:0;font-size:12px;color:#666}.user-leaderboard-list .follow-list-info .css-truncate.css-truncate-target{max-width:none}.user-leaderboard-list .repo-list-item{padding-top:10px;padding-bottom:0;padding-left:21px;border-top:0}.user-leaderboard-list .repo-list-item .repo-description,.user-leaderboard-list .repo-list-item .repo-and-owner{max-width:530px}.user-leaderboard-list .repo-list-item .repo{color:#5c5c5c}.leaderboard-list{margin:0;list-style-type:none}.user-leaderboard-list-name{margin:0;font-size:18px;font-weight:normal}.user-leaderboard-list-name .full-name{margin-left:5px;font-weight:bold;color:#5c5c5c}.repo-snipit{display:inline-block;margin-top:7px}.repo-snipit:hover{text-decoration:none}.repo-snipit .octicon{font-size:14px;color:#999}.repo-snipit-name{max-width:200px;color:#666}.repo-snipit-description{max-width:300px;color:#999}.repo-snipit:hover .repo-snipit-name,.repo-snipit:hover .repo-snipit-description{color:#4183c4}.leaderboard-action{float:right;margin-top:-3px;margin-left:10px}.leaderboard-list-rank{position:absolute;top:25px;left:0;width:20px;font-size:11px;font-weight:300;color:#b9b9b9;text-align:right;text-transform:uppercase}.leaderboard-list-item{position:relative;padding-top:20px;padding-bottom:20px;padding-left:35px;border-bottom:1px solid #eee}.leaderboard-list-item:last-child{border-bottom:0}.leaderboard-gravatar{float:left;width:48px;height:48px;border-radius:3px}.leaderboard-list-content{min-height:48px;margin-left:58px}.collection-page .signed-out-comment{margin-left:0}.explore-mail-tease{padding-top:20px;overflow:hidden;background:#202021 url(/images/modules/home/octicons-bg.png) center repeat;border-bottom:1px solid #ddd}.explore-mail-tease h3{color:#fff;text-align:center}.explore-mail-tease img{margin-bottom:-5px}.newsletter-frequency-choice{display:-ms-flexbox;display:-webkit-flex;display:-webkit-box;display:flex;margin:40px 0;list-style-type:none;-webkit-flex-flow:row wrap;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.newsletter-frequency-choice .choice{position:relative;width:25%}.newsletter-frequency-choice .choice>label{display:block;height:100%;margin:0 10px;font-weight:normal;text-align:center;cursor:pointer;background:#fff;border:3px solid #eee;border-radius:4px}.newsletter-frequency-choice .choice:hover label{border-color:#4183c4}.newsletter-frequency-choice .choice:hover h3{color:#fff;background:#4183c4;border-color:#4183c4}.newsletter-frequency-choice .choice.selected label{border-color:#6cc644;box-shadow:0 0 5px rgba(0,0,0,0.2)}.newsletter-frequency-choice .choice.selected h3{color:#fff;background:#6cc644;border-color:#6cc644}.newsletter-frequency-choice .choice.selected p{color:#333}.newsletter-frequency-choice .choice .notice{position:absolute;right:0;bottom:1em;left:0;z-index:-1;font-weight:bold;color:#6cc644;text-align:center;opacity:0}.newsletter-frequency-choice .choice .notice.visible{bottom:-2em;opacity:1;-webkit-transition:opacity 0.15s ease-in-out;transition:opacity 0.15s ease-in-out}.newsletter-frequency-choice h3{padding:10px;margin:0;font-weight:normal;background:#fafafa;border-bottom:1px solid #eee}.newsletter-frequency-choice h3 input{position:relative;top:-2px;margin:0 3px 0 -19px}.newsletter-frequency-choice p{height:7em;margin:15px;color:#777;text-align:left}.explore-signup-entice{position:relative;padding:15px;font-size:14px;background:#f7f7f7;border:1px solid #ddd;border-radius:3px}.explore-signup-entice h3{margin-bottom:10px;font-size:18px}.explore-signup-entice-inner{position:absolute;top:3px;right:3px;bottom:3px;left:3px;padding-top:30px;text-align:center;background:rgba(247,247,247,0.9)}.explore-signup-entice-wrapper{max-width:500px;padding:5px;margin:0 auto;background:rgba(247,247,247,0.6)}.explore-signup-cta{margin-right:-10px;font-size:13px;vertical-align:middle}.explore-signup-cta a{font-weight:bold}.explore-signup-cta .button,.explore-signup-cta .minibutton{position:relative;top:-1px}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}.explore-marketing-header{margin:10px auto 30px;text-align:center}.explore-marketing-header.is-animating{-webkit-animation:fadein 1s;animation:fadein 1s}.explore-marketing-header h2{margin:0 0 5px;font-size:32px;font-weight:normal}.explore-marketing-header .lead{margin:5px 0 0}.linux .show-mac,.macintosh .show-mac{display:block}.linux .hide-mac,.macintosh .hide-mac{display:none}.windows .show-mac{display:none}.homepage .container{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif}.homepage .header-logged-out .primary{display:none}.homepage .site-footer{border-top:0;margin-top:0}.marketing-section-depth{position:absolute;right:0;bottom:0;left:0;z-index:10;height:30px;background-image:-webkit-linear-gradient(transparent, rgba(0,0,0,0.15));box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}.marketing-section-signup{text-shadow:0 1px 3px #222;background:#202021 url(/images/modules/home/octicons-bg.png) center repeat;padding-top:80px;padding-bottom:80px;position:relative}.marketing-section-signup .heading{margin-top:0;padding-top:10px;font-size:70px;font-weight:normal;line-height:1;color:#fff;letter-spacing:-1px}.marketing-section-signup .subheading{margin:10px 0 0;font-size:21px;line-height:1.5;color:#fff}.marketing-section-signup .subheading a{font-weight:500}.form-signup-home{float:right;width:320px;margin-left:40px}.form-signup-home .text-muted:last-child{margin-bottom:0}.form-signup-home dl.form{position:relative;margin-top:0;margin-bottom:10px}.form-signup-home dl.form dd+.text-muted{margin-top:5px}.form-signup-home .button,.form-signup-home dl.form input[type="text"],.form-signup-home dl.form input[type="password"]{padding:10px;font-size:16px;border-radius:5px}.form-signup-home .button{border:0}.form-signup-home .button:focus{box-shadow:0 1px 3px rgba(0,0,0,0.05),0 0 12px rgba(255,255,255,0.75)}.form-signup-home dl.form input[type="text"],.form-signup-home dl.form input[type="password"]{width:100%;margin-right:0;border-color:#fff}.form-signup-home dl.form input[type="text"]:focus,.form-signup-home dl.form .focused .drag-and-drop,.focused .form-signup-home dl.form .drag-and-drop,.form-signup-home dl.form input[type="password"]:focus{background-color:#fff;border-color:#fff;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 12px rgba(255,255,255,0.75)}.form-signup-home dl.form.errored dd.error,.form-signup-home dl.form.errored dd.warning{position:absolute;top:100%;left:0;right:0;z-index:5;margin-top:2px;font-size:12px;font-weight:normal;padding:10px;border:0;text-align:left;border-radius:3px;background-color:#333;color:#fff}.form-signup-home dl.form.errored dd.error:after,.form-signup-home dl.form.errored dd.warning:after{position:absolute;left:10px;bottom:100%;height:0;width:0;content:"";border:solid transparent;border-bottom-color:#333;border-width:8px;pointer-events:none}.form-signup-home dl.form.errored dd.error:empty,.form-signup-home dl.form.errored dd.warning:empty{display:none}.form-signup-home dl.form dd input.is-autocheck-successful,.form-signup-home dl.form dd input.is-autocheck-errored,.form-signup-home dl.form dd input.is-autocheck-loading{background-image:none}.form-signup-home dl.successed:after,.form-signup-home dl.errored:after{position:absolute;top:15px;right:10px;text-shadow:none;font:normal normal 16px/1 "octicons";display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased}.form-signup-home dl.successed:after{content:"\f03a";color:#6cc644}.form-signup-home dl.errored:after{content:"\f02d";color:#bd2c00}.form-signup-home dl.is-loading:after{position:absolute;top:15px;right:10px;display:block;width:16px;height:16px;content:"";background-image:url(/images/spinners/octocat-spinner-16px.gif)}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 2dppx){.form-signup-home dl.is-loading:after{background-image:url(/images/spinners/octocat-spinner-32.gif);background-size:16px 16px}}.text-muted .notice-highlight{color:#fff}.text-center{text-align:center}.marketing-section-img{display:block;max-width:980px;margin:40px auto;border-radius:5px;border:1px solid rgba(0,0,0,0.25);box-shadow:0 5px 15px rgba(0,0,0,0.15)}.marketing-section-enterprise{overflow:hidden;max-height:375px;padding-bottom:20px;margin-top:-1px;text-shadow:0 1px 2px rgba(0,0,0,0.3);background-color:#614381;background-image:-webkit-linear-gradient(#202d5f, #614381);background-image:linear-gradient(#202d5f, #614381);background-repeat:repeat-x;border-bottom:0;box-shadow:inset 0 10px 20px rgba(0,0,0,0.1);color:#fff}.marketing-section-enterprise.marketing-inline{margin-bottom:30px}.marketing-section-enterprise h1>a{color:inherit;text-decoration:none}.marketing-section-enterprise .marketing-header .lead{color:#cecbda}.marketing-section-enterprise .marketing-button{display:inline-block;margin-top:20px;margin-bottom:20px;padding:9px 15px;border-radius:4px;font-size:18px;background-color:#1d6ac8;background-image:-webkit-linear-gradient(#45b3f3, #1d6ac8);background-image:linear-gradient(#45b3f3, #1d6ac8);background-repeat:repeat-x;box-shadow:0 1px 1px rgba(0,0,0,0.25);text-shadow:0 -1px 0 rgba(0,0,0,0.25);text-decoration:none;color:#fff}.marketing-section-enterprise .marketing-button:hover{background-position:0 -10px}.aws-section{background:#515d81 url(/images/modules/aws/aws-bg.jpg) no-repeat center top;background-size:cover;overflow:hidden;text-shadow:0 1px 1px rgba(0,0,0,0.1)}.aws-section .container{position:relative}.aws-section .content{position:relative;z-index:9;padding:80px 0;color:#fff;text-align:center}.aws-section h2{margin-top:0;font-size:36px;font-weight:300;color:#fff}.aws-section p{margin-bottom:15px;font-size:15px;font-weight:300}.aws-section .aws-button{display:inline-block;padding:7px 15px;font-size:16px;color:#fff;text-shadow:none;border:1px solid #fff;border-radius:5px}.aws-section .aws-button:hover{color:#fff;text-decoration:none;background-color:#2a2b55;border-color:#2a2b55}.aws-section .bg-animation{position:absolute;top:0;left:0;width:100%;height:100%}.aws-section .cloud{position:absolute}.aws-section .cloud-1{top:10px;right:20px;-webkit-animation:cloud1animation 6s ease-out 1s;animation:cloud1animation 6s ease-out 1s}.aws-section .cloud-2{top:10px;left:-60px;-webkit-animation:cloud2animation 6s ease-out 1s;animation:cloud2animation 6s ease-out 1s}.aws-section .cloud-3{bottom:50px;right:-255px;-webkit-animation:cloud3animation 14s ease-out 1s;animation:cloud3animation 14s ease-out 1s}.aws-section .cloud-4{bottom:-96px;left:-470px;-webkit-animation:cloud4animation 9s ease-out 1s;animation:cloud4animation 9s ease-out 1s}.aws-section .cloud-5{bottom:-120px;right:-160px;-webkit-animation:cloud5animation 14s ease-out 1s;animation:cloud5animation 14s ease-out 1s}.aws-section .cloud-6{bottom:-100px;right:-600px;-webkit-animation:cloud6animation 8s ease-out 1s;animation:cloud6animation 8s ease-out 1s}@-webkit-keyframes cloud1animation{0%{-webkit-transform:translateX(-70px);transform:translateX(-70px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes cloud1animation{0%{-webkit-transform:translateX(-70px);transform:translateX(-70px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes cloud2animation{0%{-webkit-transform:translateX(50px);transform:translateX(50px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes cloud2animation{0%{-webkit-transform:translateX(50px);transform:translateX(50px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes cloud3animation{0%{-webkit-transform:translateX(-150px);transform:translateX(-150px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes cloud3animation{0%{-webkit-transform:translateX(-150px);transform:translateX(-150px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes cloud4animation{0%{-webkit-transform:translateX(125px);transform:translateX(125px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes cloud4animation{0%{-webkit-transform:translateX(125px);transform:translateX(125px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes cloud5animation{0%{-webkit-transform:translateX(-80px);transform:translateX(-80px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes cloud5animation{0%{-webkit-transform:translateX(-80px);transform:translateX(-80px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes cloud6animation{0%{-webkit-transform:translateX(-200px);transform:translateX(-200px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes cloud6animation{0%{-webkit-transform:translateX(-200px);transform:translateX(-200px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.issue-list em{font-weight:bold;background-color:rgba(255,255,140,0.5);padding:3px;border-radius:3px;font-style:normal}.issue-list .title{padding:0;min-height:24px;font-weight:normal;font-size:18px;line-height:24px;margin:0 80px 10px 0;word-wrap:break-word}.issue-list .title .mega-octicon{position:absolute;top:-4px;left:0;width:32px;color:#888;text-align:center}.issue-list .title .closed.mega-octicon{color:#bd2c00}.issue-list .title .open.mega-octicon{color:#6cc644}.issue-list .title .merged.mega-octicon{color:#6e5494}.issue-list .description{margin:0 0 10px;line-height:20px;overflow:hidden}.issue-list-meta{margin:0;list-style-type:none;font-size:11px;color:#999}.issue-list-meta:before{display:table;content:""}.issue-list-meta:after{display:table;clear:both;content:""}.issue-list-meta>li{display:inline-block;margin-right:10px}.issue-list-meta a{color:#333}.issue-list-meta .octicon{color:#838383;vertical-align:middle}.issue-list-item{border-bottom:1px solid #f1f1f1;padding:0 0 20px 40px;margin:0 0 20px;position:relative}.labels-list-item .table-list-cell{width:100%}.labels-list-item .label{display:inline-block;height:34px;padding:0 10px;margin-right:5px;font-size:16px;font-weight:bold;line-height:34px;text-align:center;border-radius:3px;-webkit-transition:all 0.2s linear;transition:all 0.2s linear}.labels-list-item .label .octicon{margin-right:3px}.labels-list-item .label:hover{opacity:0.85}.labels-list-item.open .label,.labels-list-item.open .label-description,.labels-list-item.open .labels-list-action{display:none}.labels-list-item.open .label-delete{display:block;text-align:left}.labels-list-item.edit .label,.labels-list-item.edit .label-description,.labels-list-item.edit .labels-list-action{display:none}.labels-list-item.edit .label-edit{display:block}.label-description{padding:8px 10px;color:#999}.label-delete-confirmation{line-height:34px}.labels-list-actions{margin-left:60px}.labels-list-action{float:left;display:block;color:#999;padding:8px 10px}.labels-list-action .octicon{margin-right:2px}.labels-list-action .octicon-pencil{font-size:14px}.labels-list-action:hover{color:#4183c4;cursor:pointer}.new-label{display:none;padding:10px;margin-bottom:15px;background-color:#fafafa;border:1px solid #e5e5e5;border-radius:3px}.new-label .label-edit{display:block}.new-label .label-edit:before{display:table;content:""}.new-label .label-edit:after{display:table;clear:both;content:""}.new-label-actions{float:right}.open .new-label{display:block}.label-spinner{display:none;float:left;margin-left:-35px;margin-top:9px}.label-edit:before{display:table;content:""}.label-edit:after{display:table;clear:both;content:""}.label-edit label{display:block;margin-bottom:5px}.label-edit .error{float:left;margin-top:8px;margin-left:10px;color:#f00}.label-edit.is-valid .color-editor .octicon-check{display:block}.label-edit.loading .label-spinner{display:block}.color-editor{position:relative;float:left;width:100px}.color-editor.open .label-colors{display:block}.color-editor-bg{position:absolute;left:0;z-index:10;width:20px;height:20px;margin-top:7px;margin-left:7px;cursor:pointer;border-radius:3px}input.color-editor-input{width:100px;padding-left:34px;border-color:#ccc !important}input.color-editor-input:focus{border-color:#51a7e8 !important}input.color-editor-input:focus ~ .label-colors{display:block}.invalid-color-indicator{display:none;position:absolute;top:7px;left:7px;z-index:11;width:20px;height:20px;line-height:20px;font-weight:bold;color:#fff;text-align:center}.label-edit-name{width:40%;float:left;margin-right:10px}.label-colors{position:absolute;left:0;float:left;display:none;width:auto;margin-left:0;padding:5px}.label-colors:before{left:8px}.label-colors:after{left:9px}.label-edit,.label-delete{display:none}.label-delete-form{display:inline}.label-delete-form.loading .label-delete-spinner{display:block}.label-delete-spinner{display:none;margin-top:10px;margin-right:10px;float:left}.color-chooser{display:table-row;height:25px;list-style:none}.color-chooser li{display:table-cell;width:1%}.color-chooser li:hover{position:relative;z-index:2;outline:2px solid #fff;box-shadow:0 0 5px 2px rgba(0,0,0,0.25)}.color-chooser .color-cooser-color{display:block;width:25px;height:25px;text-align:center;cursor:pointer}.repository-lang-stats{position:relative}.repository-lang-stats ol.repository-lang-stats-numbers li{display:table-cell;width:1%;border-bottom:0;text-align:center;padding:11px 5px;white-space:nowrap}.repository-lang-stats ol.repository-lang-stats-numbers li span.percent{float:none}.repository-lang-stats ol.repository-lang-stats-numbers li>a,.repository-lang-stats ol.repository-lang-stats-numbers li>span{color:#999;text-decoration:none;font-weight:bold}.repository-lang-stats ol.repository-lang-stats-numbers li .lang{color:#333}.repository-lang-stats ol.repository-lang-stats-numbers li .language-color{display:inline-block;width:10px;height:10px;border-radius:50%}.repository-lang-stats ol.repository-lang-stats-numbers li a:hover{background:transparent}.stats-switcher-viewport{overflow:hidden;height:38px}.stats-switcher-viewport .stats-switcher-wrapper{position:relative;top:0;-webkit-transition:top 0.25s ease-in-out;transition:top 0.25s ease-in-out}.stats-switcher-viewport.is-revealing-lang-stats .stats-switcher-wrapper{top:-38px}.repository-lang-stats-graph{display:block;width:100%;height:auto;line-height:12px;white-space:nowrap;border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow:hidden}.repository-lang-stats-graph span{display:inline-block;height:8px;background:#ccc;text-indent:-9999px}.repository-lang-stats-graph .language-color{height:auto;line-height:12px;vertical-align:top}.repository-lang-stats-graph .language-color:first-child{border-bottom-left-radius:3px}.repository-lang-stats-graph .language-color:last-child{border-bottom-right-radius:3px}.language-color{background-color:#ccc}.list-group-item{position:relative;display:block;margin-bottom:-1px;padding:8px 10px 10px 40px;border:1px solid #e5e5e5}.list-group-item a:hover{text-decoration:none}.list-group-item:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.list-group-item:last-child{margin-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.list-group-item.closed{background-color:#fcfcfc}.list-group-item.selectable{padding-left:60px}.list-group-item.selected{background-color:#ffffef}.list-group-item.navigation-focus{background-color:#f5f9fc}.list-group-item .list-group-item-summary a{color:#666}.list-group-item .list-group-item-summary a.quiet{color:#999}.list-group-item .status{position:relative;top:2px;margin-right:-9px;float:right}.list-group-item .type-icon{vertical-align:middle;position:relative;top:1px;width:16px;text-align:center}.list-group-item .assignee{float:right}.list-group-item .assignee img{display:block;border-radius:2px}.list-group-item .labels{display:inline-block;top:-2px;margin-bottom:-2px;margin-left:4px}.list-group-item-name{margin:0 60px 2px 0;font-size:15px;line-height:1.3;word-wrap:break-word}.list-group-item-name .type-icon{float:left;margin-top:1px;margin-left:-24px}.list-group-item-link{color:#333}.closed.octicon,.reverted.octicon{color:#bd2c00}.open.octicon{color:#6cc644}.merged.octicon{color:#6e5494}.list-group-item-summary{margin-top:2px}.list-group-item-summary p{margin:0 0 5px}.standalone .list-group-item-summary p{margin-bottom:0}.animated-ellipsis-container{display:inline-block;overflow:hidden;height:12px;width:12px;-webkit-transform:translateZ(0)}.animated-ellipsis-container>.animated-ellipsis{overflow:hidden;display:inline-block;vertical-align:bottom}@-webkit-keyframes ellipsis{from{width:2px}to{width:12px}}@keyframes ellipsis{from{width:2px}to{width:12px}}.large-loading-area{text-align:center;padding:100px 0}.context-loader.large-format-loader{position:fixed;display:none;top:0;left:0;bottom:0;right:0;margin:0;width:auto;padding:190px 0 0;font-weight:normal;background:rgba(255,255,255,0.8);border:0;z-index:9999;text-align:center;color:#999}.context-loader.large-format-loader.is-loading{display:block}.requested-reviewer{text-align:left;list-style-type:none;margin-bottom:4px}.requested-reviewer .octicon-jersey{margin-left:3px;margin-right:5px}.request-reviewers{border-top:solid 1px #ddd;padding:10px 10px 0}.request-reviewers .autocomplete-results{display:block;border:0}.request-reviewers .autocomplete-results .typeahead-result{display:block;width:300px}.request-reviewers .avatar,.request-reviewers .octicon-jersey{float:left;margin-right:10px}.request-reviewers .reviewer-suggestion-info{width:75%;overflow:hidden;margin-bottom:0;margin-top:4px;white-space:nowrap;text-overflow:ellipsis}dl.form-request-reviewers{display:inline-block;margin-top:0;margin-bottom:0}dl.form-request-reviewers>dd input[type="text"]{width:300px;margin-bottom:10px;display:inline-block}.suggested-reviewers{margin-left:5px;display:inline-block;vertical-align:super;color:#999}.suggested-reviewers .requested-reviewer-suggestion{margin-left:3px}.requested-reviewer-item{float:left;margin-bottom:10px;margin-right:4px;height:32px;padding:5px 8px;font-size:12px;line-height:18px;color:#555;background:#eee;border-radius:3px}.requested-reviewer-item .avatar,.requested-reviewer-item .octicon-jersey{float:none;margin-right:2px}.requested-reviewer-item .octicon-jersey{margin-top:4px}.requested-reviewer-item .remove-reviewer{color:#bbb;margin-top:2px;display:inline-block;margin-left:2px}.requested-reviewer-item .remove-reviewer .octicon-x{vertical-align:middle}#quick-issue-modal{display:none}.quick-issue-modal-footer{margin-bottom:0}.quick-issue-thanks{display:none;font-size:18px}.quick-issue-link{margin-left:30px}.quick-issue-body{display:block;width:100%}.quick-issue-form{position:relative}.quick-issue-form .suggestions{margin-left:0;margin-bottom:0}.quick-issue-form .drag-and-drop{font-size:10px} diff --git a/node_modules/aes-js/~/.grip/style-cache/github2-27099ff875724b3da49fac6911968f783aa96ed08970c77185d963ce6c21af75.css b/node_modules/aes-js/~/.grip/style-cache/github2-27099ff875724b3da49fac6911968f783aa96ed08970c77185d963ce6c21af75.css deleted file mode 100644 index 04837ba..0000000 --- a/node_modules/aes-js/~/.grip/style-cache/github2-27099ff875724b3da49fac6911968f783aa96ed08970c77185d963ce6c21af75.css +++ /dev/null @@ -1 +0,0 @@ -.marketing .pagehead h1{font-size:30px}.marketing .pagehead p{margin-top:4px;margin-bottom:0;font-size:14px;color:#777}.marketing .pagehead ul.actions{margin-top:10px}.marketing h2 .secure{float:right;padding:1px 0;font-size:11px;font-weight:bold;text-transform:uppercase;color:#6cc644}.marketing .questions p{font-size:14px}.marketing-header{margin-bottom:40px}.marketing-header h1{margin-top:0;margin-bottom:0;font-size:42px;font-weight:300}.marketing-header .lead{color:#777;max-width:750px;margin:10px auto 0}.marketing-header .button{margin-top:15px;padding:12px 20px;font-size:18px;font-weight:normal;border-radius:6px}.marketing-section{position:relative;padding-top:80px;padding-bottom:80px;border-bottom:1px solid #e5e5e5;text-align:center;font-size:16px;line-height:1.5}.marketing-section:before{display:table;content:""}.marketing-section:after{display:table;clear:both;content:""}.marketing-section h3{font-size:21px;font-weight:normal}.marketing-section-stripe{background-color:#f5f5f5}.marketing-hero-octicon{width:100px;height:100px;border-radius:50px;text-align:center;border:solid 1px #e5e5e5;margin:0 auto 15px}.marketing-hero-octicon .mega-octicon{color:#4183c4;font-size:48px;line-height:100px}.marketing-hero-octicon .octicon-checklist{position:relative;right:-3px}.marketing-grid{font-size:14px}.marketing-grid .column{padding:20px 25px 40px}.marketing-grid p{margin:0 auto;max-width:90%;color:#5a5a5a}.marketing-grid .mega-octicon{color:#4183c4}.read-it{padding-top:50px;text-align:center;border-top:1px solid #eee}.contact-form .input-block{margin-top:10px;margin-bottom:10px}.contact-form textarea{height:200px}.checklist{margin:20px 0;font-size:12px}.checklist>li{margin:15px 0 15px 18px;list-style-position:outside}.hanging-list li,.hanging-icon-list li{margin:10px 0;font-size:14px}.hanging-list li{margin-left:12px;list-style-position:inside}.hanging-icon-list li{padding-left:25px;list-style-type:none}.hanging-icon-list .octicon{float:left;margin-left:-20px;color:#999}.hanging-icon-list .octicon-check{color:#6cc644}.hanging-icon-list .octicon-x{color:#bd2c00}.logos-page h3{font-size:18px}.logos-download{position:relative;display:block;float:left;width:32%;height:290px;margin-bottom:30px;padding-top:20px;text-align:center;border:1px solid #ddd;border-radius:6px}.logos-download+.logos-download{margin-left:2%}.logos-download .gh-logo{margin-top:70px}.logos-download .gh-octocat{margin-top:10px}.logos-download-link{position:absolute;right:0;bottom:0;left:0;display:block;padding:15px 20px;font-size:16px;font-weight:bold;background-color:#f5f5f5;border-top:1px solid #ddd;border-radius:0 0 5px 5px}.logos-download-link .octicon{vertical-align:2px}.logos-download:hover{text-decoration:none}.logos-download:hover .logos-download-link{background-color:#eee}.nonprofit-head{padding:100px 0 120px;border-bottom:1px solid #eee;text-align:center;position:relative;overflow:hidden}.nonprofit-head .title{font-weight:300;font-size:30px;color:#777;margin-bottom:20px;display:inline-block;border-bottom:1px solid #ccc}.nonprofit-head .title .mega-octicon{color:#333}.nonprofit-head .logo{vertical-align:middle}.nonprofit h1{font-weight:300;font-size:28px;line-height:1.5em;position:relative}.nonprofit h2{font-weight:normal}.heart{width:12px;height:12px;background:#83d6c0;box-shadow:140px 30px 0 #efa, 120px -120px 0 #aded84, 220px -60px 0 #ded, 30px 240px 0 #ada, 60px -60px 0 #d76666, 60px -30px 0 #ff846f, 60px 0 0 #f9a7a7, 60px 30px 0 #ffc8c8, 60px 60px 0 #ffd8d8, 30px 60px 0 #baf2ca, 30px 30px 0 #98eaac, 30px 0 0 #80d896, 30px -30px 0 #6dd085, 30px -60px 0 #55be6f, 0 -60px 0 #4cc2a7, 0 -30px 0 #73d3b9, 0 30px 0 #93e3cd, 0 60px 0 #adf9e4, -30px 60px 0 #ffe1b9, -30px 30px 0 #ffd194, -30px 0 0 #ffc86f, -60px 0 0 #fd9ff0, -60px 30px 0 #ffbaf7, -60px 60px 0 #fccdf7, -180px 60px 0 #9df;position:absolute;left:50%;top:40%;margin-left:400px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.heart.left{margin-left:-400px;-webkit-transform:rotate(-45deg),scaleX(-1);-ms-transform:rotate(-45deg),scaleX(-1);transform:rotate(-45deg),scaleX(-1)}.octo-earth{position:absolute;left:50%;bottom:-150px;margin-left:-120px;-webkit-animation:rotate 20s infinite linear;animation:rotate 20s infinite linear}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.nonprofit-steps{margin-left:30px;font-size:20px;font-weight:300}.nonprofit-steps li{margin-bottom:10px}.nonprofit-steps ul{margin:15px 0 0 20px;list-style:square}.nonprofit-section{padding:50px 0;background:#f5f5f5}.nonprofit-section.feature-line{text-align:center}.nonprofit-section .dialog{width:640px;background:#fff;margin:30px auto 0;text-align:left;padding:30px}.nonprofit-section .dialog h2:first-child{margin-top:0}.nonprofit-section .dialog p:last-child{margin-bottom:0}.nonprofit-section .dialog .notice{background:#fee;margin:20px 0 0;padding:15px}.dialog.edu-callout{border:5px solid #aec;padding:25px}.dialog.edu-callout p{margin-top:0}.dialog.edu-callout .mega-octicon{color:#418f65;height:54px;width:54px;padding:10px 0;margin:0 15px 0 0;text-align:center;vertical-align:top;float:left;border-radius:30px}.integrations{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif}.integrations .site-footer{border-top:1px solid rgba(255,255,255,0.2);margin-top:-99px}.integrations .site-footer,.integrations .site-footer a,.integrations .site-footer .octicon-mark-github{color:#fff}.integrations-illustration-container{display:block;height:100%;width:100%;color:#fff;background:url(/images/modules/integrations/circuits@2x.png) center bottom/1780px 295px no-repeat transparent}.integrations-illustration-container .lead{color:#0a4568;width:550px}.integrations-illustration-container a{color:#0a4568;text-decoration:underline}.integrations-intro{background:url(/images/modules/integrations/circuits-animated.gif) center 238px/500px 350px no-repeat #1781c0;padding-bottom:0}.integrations-intro .lead{margin-bottom:350px}.integrations-intro .marketing-header{margin-bottom:0}.integrations-outro{background:url(/images/modules/integrations/circuits-animated-flipped.gif) center -74px/350px 262px no-repeat #1781c0;padding-top:0;padding-bottom:218px}.integrations-outro .integrations-illustration-container{background:url(/images/modules/integrations/circuits-flipped@2x.png) center top/1685px 174px no-repeat transparent;padding-top:240px}.button.outro-button{font-size:20px;font-weight:200;background:#0a4568;border:0;padding:10px 15px;color:#fafafa;text-decoration:none;text-shadow:none}.integrations-contact-info{color:#0a4568;margin:40px auto 0}.slideshow-nav{list-style:none;margin-top:100px}.slideshow-nav>li{display:inline-block;margin:0 15px}.slideshow-nav>li>a{display:block;height:50px;text-indent:-999em;opacity:0.7;-webkit-transition:opacity 0.15s ease-in-out;transition:opacity 0.15s ease-in-out}.slideshow-nav>li>a:hover{opacity:1}.slideshow-nav .active>a{background-position:0 -50px;opacity:1}.integrations-tab-asana{background-image:url(/images/modules/integrations/logos/asana@2x.png);background-size:137px 100px;width:137px;position:relative;bottom:-8px}.integrations-tab-pivotaltracker{background-image:url(/images/modules/integrations/logos/pivotaltracker@2x.png);background-size:278px 100px;width:278px}.integrations-tab-zendesk{background-image:url(/images/modules/integrations/logos/zendesk@2x.png);background-size:154px 100px;width:154px}.integrations-slide-content{height:370px;list-style:none;position:relative}.integrations-slide-content>li{position:absolute;visibility:hidden;-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;-webkit-transform:translateY(50px),scale(0.95);-ms-transform:translateY(50px),scale(0.95);transform:translateY(50px),scale(0.95);opacity:0}.integrations-slide-content>.active{visibility:visible;-webkit-transform:translateY(0),scale(1);-ms-transform:translateY(0),scale(1);transform:translateY(0),scale(1);opacity:1}.integrations-screenshot{margin-top:20px;max-width:100%}.integrations-slide-description{max-width:600px;display:inline-block;-webkit-backface-visibility:hidden}.integrations-logo-container{min-height:70px;margin-bottom:20px}.integrations-imagelist{list-style:none}.integrations-imagelist>li{margin-top:90px;margin-bottom:50px}.integrations-imagelist>li>p{max-width:470px;text-align:left;display:inline-block;vertical-align:middle}.integrations-logo-left{margin-right:40px}.integrations-logo-right{margin-left:40px}.features-next .lead strong{color:#444}.features-next .native-mobile-screens{list-style-type:none;border-bottom:solid 1px #d9d9d9;line-height:0;padding-left:0}.features-next .native-mobile-screens li{display:inline;margin:0 5px 30px}.team-org-chart{margin:30px auto;width:470px}.team-org-chart .mega-octicon{vertical-align:middle}.team-org-group{border:solid 1px #ccc;background-color:#fff;text-align:center;font-size:16px;padding:10px;margin-bottom:13px;border-radius:3px}.team-org-group strong{color:#333}.team-org-team{width:147px;height:120px;display:inline-block;vertical-align:top}.team-org-team+.team-org-team{margin-left:10px}.octicon-jersey-red{color:#bd2c00}.octicon-jersey-green{color:#6cc644}.octicon-jersey-orange{color:#f93}.team-org-members{margin-top:15px}.team-org-members .octicon{color:#aaa}.team-org-repos .mega-octicon{color:#bbb;margin:0 5px}.team-animation{-webkit-animation-duration:12s;animation-duration:12s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.team-design{-webkit-animation-name:teamDesign;animation-name:teamDesign}.team-dev{-webkit-animation-name:teamDev;animation-name:teamDev}.team-marketing{-webkit-animation-name:teamMarketing;animation-name:teamMarketing}.team-dev-design{-webkit-animation-name:teamDevDesign;animation-name:teamDevDesign}.team-dev-design-marketing{-webkit-animation-name:teamDevDesignMarketing;animation-name:teamDevDesignMarketing}.features-section img{max-width:100%}.features-section code{font-size:0.9em}.features-section p{max-width:750px;margin-right:auto;margin-left:auto}.features-repo-count{white-space:nowrap}.features-content-right{float:right;width:470px;text-align:left}.features-content-left{float:left;width:470px;text-align:left}.diagram-icon{position:absolute;border-radius:50px;border:solid 4px #4183c4;background-color:#fff;width:53px;height:53px;text-align:center;line-height:55px;color:#4183c4}.diagram-icon-small{position:absolute;color:#4183c4;margin-top:2px\9}.diagram-icon-branch{top:-13px;left:81px;-webkit-animation:bounceIn 0.6s ease-in-out 0.25s 1 normal both;animation:bounceIn 0.6s ease-in-out 0.25s 1 normal both}.diagram-icon-pr{top:89px;left:405px;-webkit-animation:bounceIn 0.6s ease-in-out 1.8s 1 normal both;animation:bounceIn 0.6s ease-in-out 1.8s 1 normal both}.diagram-icon-merge{top:-13px;left:843px;-webkit-animation:bounceIn 0.6s ease-in-out 3.7s 1 normal both;animation:bounceIn 0.6s ease-in-out 3.7s 1 normal both}.diagram-icon-commit-1{top:101px;left:240px;-webkit-animation:bounceIn 0.6s ease-in-out 1.3s 1 normal both;animation:bounceIn 0.6s ease-in-out 1.3s 1 normal both;background-color:#fff}.diagram-icon-commit-2{top:101px;left:295px;-webkit-animation:bounceIn 0.6s ease-in-out 1.4s 1 normal both;animation:bounceIn 0.6s ease-in-out 1.4s 1 normal both;background-color:#fff}.diagram-icon-commit-3{top:101px;left:350px;-webkit-animation:bounceIn 0.6s ease-in-out 1.5s 1 normal both;animation:bounceIn 0.6s ease-in-out 1.5s 1 normal both;background-color:#fff}.diagram-icon-discussion-1{top:79px;left:488px;-webkit-animation:bounceIn 0.6s ease-in-out 2s 1 normal both;animation:bounceIn 0.6s ease-in-out 2s 1 normal both;opacity:0.3}.diagram-icon-commit-4{top:101px;left:515px;-webkit-animation:bounceIn 0.6s ease-in-out 2.1s 1 normal both;animation:bounceIn 0.6s ease-in-out 2.1s 1 normal both;background-color:#fff}.diagram-icon-discussion-2{top:131px;left:542px;-webkit-animation:bounceIn 0.6s ease-in-out 2.2s 1 normal both;animation:bounceIn 0.6s ease-in-out 2.2s 1 normal both;opacity:0.3}.diagram-icon-commit-5{top:101px;left:570px;-webkit-animation:bounceIn 0.6s ease-in-out 2.3s 1 normal both;animation:bounceIn 0.6s ease-in-out 2.3s 1 normal both;background-color:#fff}.diagram-icon-discussion-3{top:79px;left:597px;-webkit-animation:bounceIn 0.6s ease-in-out 2.4s 1 normal both;animation:bounceIn 0.6s ease-in-out 2.4s 1 normal both;opacity:0.3}.diagram-icon-commit-6{top:101px;left:625px;-webkit-animation:bounceIn 0.6s ease-in-out 2.5s 1 normal both;animation:bounceIn 0.6s ease-in-out 2.5s 1 normal both;background-color:#fff}.diagram-icon-discussion-4{top:131px;left:652px;-webkit-animation:bounceIn 0.6s ease-in-out 2.6s 1 normal both;animation:bounceIn 0.6s ease-in-out 2.6s 1 normal both;opacity:0.3}.diagram-icon-commit-7{top:101px;left:680px;-webkit-animation:bounceIn 0.6s ease-in-out 2.7s 1 normal both;animation:bounceIn 0.6s ease-in-out 2.7s 1 normal both;background-color:#fff}.diagram-icon-discussion-5{top:79px;left:707px;-webkit-animation:bounceIn 0.6s ease-in-out 2.8s 1 normal both;animation:bounceIn 0.6s ease-in-out 2.8s 1 normal both;opacity:0.3}.features-branch-diagram{position:relative;margin-top:40px;margin-bottom:50px}.preload .diagram-animation{-webkit-animation:none !important;animation:none !important;opacity:0}.mobile .diagram-animation{-webkit-animation:none !important;animation:none !important;opacity:1}.features-highlight{margin:8px 0;display:inline-block;background-color:#e7e7e7;padding:10px;border-radius:3px}.features-highlight i{font-style:normal;color:#4183c4}.features-callout{border:solid 1px #eee;border-radius:3px;padding:10px;margin-top:15px;margin-bottom:45px;display:inline-block;color:#777;font-size:14px;line-height:1.4;text-align:left;width:450px}.features-callout>p{margin-top:0;margin-bottom:0}.features-callout .left{margin-right:10px;vertical-align:center}.features-copy-minor{font-size:12px;color:#555}.svn-callout{clear:both;padding-top:30px;padding-left:217px;line-height:0.8;text-align:left}.svn-callout-heading{font-size:18px;margin-bottom:0;color:#444}.svn-callout-logo{margin-left:-70px;margin-top:-1px;float:left}@-webkit-keyframes teamDev{3%{border-color:#bd2c00;color:#bd2c00}27%{border-color:#bd2c00;color:#bd2c00}30%{border-color:#ccc;color:#bbb}}@keyframes teamDev{3%{border-color:#bd2c00;color:#bd2c00}27%{border-color:#bd2c00;color:#bd2c00}30%{border-color:#ccc;color:#bbb}}@-webkit-keyframes teamDesign{34%{border-color:#ccc;color:#bbb}37%{border-color:#6cc644;color:#6cc644}60%{border-color:#6cc644;color:#6cc644}63%{border-color:#ccc;color:#bbb}}@keyframes teamDesign{34%{border-color:#ccc;color:#bbb}37%{border-color:#6cc644;color:#6cc644}60%{border-color:#6cc644;color:#6cc644}63%{border-color:#ccc;color:#bbb}}@-webkit-keyframes teamMarketing{67%{border-color:#ccc;color:#bbb}70%{border-color:#f93;color:#f93}94%{border-color:#f93;color:#f93}}@keyframes teamMarketing{67%{border-color:#ccc;color:#bbb}70%{border-color:#f93;color:#f93}94%{border-color:#f93;color:#f93}}@-webkit-keyframes teamDevDesign{3%{border-color:#bd2c00;color:#bd2c00}27%{border-color:#bd2c00;color:#bd2c00}30%{border-color:#ccc;color:#bbb}34%{border-color:#ccc;color:#bbb}37%{border-color:#6cc644;color:#6cc644}60%{border-color:#6cc644;color:#6cc644}63%{border-color:#ccc;color:#bbb}}@keyframes teamDevDesign{3%{border-color:#bd2c00;color:#bd2c00}27%{border-color:#bd2c00;color:#bd2c00}30%{border-color:#ccc;color:#bbb}34%{border-color:#ccc;color:#bbb}37%{border-color:#6cc644;color:#6cc644}60%{border-color:#6cc644;color:#6cc644}63%{border-color:#ccc;color:#bbb}}@-webkit-keyframes teamDevDesignMarketing{3%{border-color:#bd2c00;color:#bd2c00}27%{border-color:#bd2c00;color:#bd2c00}30%{border-color:#ccc;color:#bbb}34%{border-color:#ccc;color:#bbb}37%{border-color:#6cc644;color:#6cc644}60%{border-color:#6cc644;color:#6cc644}63%{border-color:#ccc;color:#bbb}67%{border-color:#ccc;color:#bbb}70%{border-color:#f93;color:#f93}94%{border-color:#f93;color:#f93}}@keyframes teamDevDesignMarketing{3%{border-color:#bd2c00;color:#bd2c00}27%{border-color:#bd2c00;color:#bd2c00}30%{border-color:#ccc;color:#bbb}34%{border-color:#ccc;color:#bbb}37%{border-color:#6cc644;color:#6cc644}60%{border-color:#6cc644;color:#6cc644}63%{border-color:#ccc;color:#bbb}67%{border-color:#ccc;color:#bbb}70%{border-color:#f93;color:#f93}94%{border-color:#f93;color:#f93}}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(0.3);transform:scale(0.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(0.9);transform:scale(0.9)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(0.3);transform:scale(0.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(0.9);transform:scale(0.9)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.segmented-nav-tab{display:none;margin-top:40px}.segmented-nav-tab:before{display:table;content:""}.segmented-nav-tab:after{display:table;clear:both;content:""}.segmented-nav-tab.active{display:block}.octicon-list{list-style:none;margin-left:26px;margin-bottom:28px}.octicon-list li{margin-bottom:20px;position:relative}.octicon-list .octicon{position:absolute;margin-left:-22px;top:3px;color:#4183c4}.segmented-nav{margin:20px auto;list-style:none;display:inline-block}.segmented-nav>li{float:left;border:1px solid #ddd;position:relative;z-index:1}.segmented-nav>li>a{display:inline-block;height:32px;margin:0 auto;padding:6px 20px 7px;font-size:15px;line-height:20px;color:#555;text-align:center;text-decoration:none}.segmented-nav>li+li{margin-left:-1px}.segmented-nav>li:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.segmented-nav>li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.segmented-nav>li.active{position:relative;border-color:#4183c4;color:#fff;background-color:#4183c4;z-index:2}.segmented-nav>li.active a,.segmented-nav>li.active a:hover{color:#fff}.segmented-nav>li:hover{border-color:#4183c4;z-index:2}.segmented-nav>li:hover a{color:#4183c4}.table-list{display:table;table-layout:fixed;width:100%;color:#999;border-bottom:1px solid #e5e5e5}.table-list-bordered .table-list-cell:first-child{border-left:1px solid #e5e5e5}.table-list-bordered .table-list-cell:last-child{border-right:1px solid #e5e5e5}.table-list-item{position:relative;list-style:none;display:table-row}.table-list-item.unread .table-list-cell-checkbox{border-left-color:#4183c4;box-shadow:2px 0 0 #4183c4 inset}.table-list-item.selected .table-list-cell-checkbox{border-left-color:#999;box-shadow:2px 0 0 #999 inset}.table-list-cell{position:relative;display:table-cell;padding:8px 10px;font-size:12px;vertical-align:top;border-top:1px solid #eee}.table-list-cell.flush-left{padding-left:0}.table-list-cell.flush-right{padding-right:0}.table-list-divider{background-color:#f8f8f8}.table-list-divider .table-list-section-title{color:#777;white-space:nowrap}.table-list-cell-checkbox{width:30px;padding-left:0;padding-right:0;text-align:center}.select-toggle-check{margin-top:7px}.table-list-cell-type{padding-top:10px;padding-left:0;padding-right:0;width:20px;text-align:center}.table-list-cell-type>a{display:inline-block}.table-list-cell-type .octicon{margin-top:3px}.table-list-cell-type:first-child{padding-left:10px}.table-list-cell-avatar{padding-left:0;padding-right:0;width:16px}.table-list-header{position:relative;z-index:22;margin-top:20px;margin-bottom:-1px;background-color:#f8f8f8;border:1px solid #e5e5e5;border-radius:3px 3px 0 0}.table-list-header:before{display:table;content:""}.table-list-header:after{display:table;clear:both;content:""}.table-list-header .button-link{position:relative;display:inline-block;padding-top:13px;padding-bottom:13px;font-weight:normal}.table-list-heading{margin-left:10px}.table-list-header-select-all{float:left;width:30px;padding:12px 10px;margin-right:5px;margin-left:-1px;text-align:center}.table-list-header-meta{display:inline-block;padding-top:13px;padding-bottom:13px;color:#777}.table-list-filters:first-child .table-list-header-toggle:first-child{padding-left:10px}.table-list-header-toggle.states .selected{font-weight:bold}.table-list-header-toggle .button-link{color:#777}.table-list-header-toggle .button-link .octicon{margin-right:2px}.table-list-header-toggle .button-link:hover{color:#222;text-decoration:none}.table-list-header-toggle .button-link.selected,.table-list-header-toggle .button-link.selected:hover{color:#222}.table-list-header-toggle .button-link+.button-link{margin-left:10px}.table-list-header-toggle .select-menu{position:relative}.table-list-header-toggle .select-menu-item.selected{font-weight:bold}.table-list-header-toggle .select-menu-button{padding-right:15px;padding-left:15px}.table-list-header-toggle .select-menu-button:hover,.table-list-header-toggle .select-menu-button.selected,.table-list-header-toggle .select-menu-button.selected:hover{color:#222}.table-list-header-toggle .select-menu-modal-holder{right:10px}.table-list-header-toggle .select-menu-modal-holder .select-menu-modal{margin-top:-1px}.table-list-triage{display:none}.triage-mode .table-list-filters{display:none}.triage-mode .table-list-triage{display:block}.subhead{padding-bottom:20px;margin-top:10px;margin-bottom:20px;border-bottom:1px solid #eee}.subhead-heading{margin-top:0;margin-bottom:0}.subhead-description{margin-top:5px;margin-bottom:0;font-size:14px;color:#777}.subnav{margin-bottom:20px}.subnav:before{display:table;content:""}.subnav:after{display:table;clear:both;content:""}.subnav>.right{margin-left:10px}.subnav-bordered{padding-bottom:20px;border-bottom:1px solid #eee}.subnav-flush{margin-bottom:0}.subnav-item{position:relative;float:left;padding:7px 14px;font-weight:bold;color:#666;border:1px solid #e5e5e5}.subnav-item+.subnav-item{margin-left:-1px}.subnav-item:hover,.subnav-item:focus{text-decoration:none;background-color:#f5f5f5}.subnav-item.selected,.subnav-item.selected:hover,.subnav-item.selected:focus{z-index:2;color:#fff;background-color:#4183c4;border-color:#4183c4}.subnav-item:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.subnav-item:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.subnav-search{position:relative;margin-left:10px}input.subnav-search-input{width:320px;padding-left:30px;color:#777;border-color:#d5d5d5}input.subnav-search-input-wide{width:500px}.subnav-search-icon{position:absolute;top:0;left:1px;display:block;width:30px;height:34px;line-height:34px;color:#ccc;text-align:center}.subnav-search-context .button{color:#555;border-top-right-radius:0;border-bottom-right-radius:0}.subnav-search-context .button:hover,.subnav-search-context .button:focus,.subnav-search-context .button:active,.subnav-search-context .button.selected{z-index:2}.subnav-search-context+.subnav-search{margin-left:-1px}.subnav-search-context+.subnav-search .subnav-search-input{border-top-left-radius:0;border-bottom-left-radius:0}.subnav-search-context .select-menu-modal-holder{z-index:30}.subnav-search-context .select-menu-modal{width:220px}.subnav-search-context .select-menu-item-icon{color:inherit}.subnav-divider-right{padding-right:10px;border-right:1px solid #eee}.boxed-group{position:relative;border-radius:3px;margin-bottom:30px}.boxed-group .counter{color:#fff;background-color:#babec0}.boxed-group.flush .boxed-group-inner{padding:0}.boxed-group.condensed .boxed-group-inner{font-size:12px;padding:0}.boxed-group>h3,.boxed-group .heading{background-color:#f5f5f5;margin:0;border-radius:3px 3px 0 0;border:1px solid #d8d8d8;border-bottom:0;padding:9px 10px 10px;font-size:14px;line-height:17px;display:block}.boxed-group>h3 a,.boxed-group .heading a{color:inherit}.boxed-group>h3 a.boxed-group-breadcrumb,.boxed-group .heading a.boxed-group-breadcrumb{color:#666;font-weight:normal;text-decoration:none}.boxed-group>h3 .avatar,.boxed-group .heading .avatar{margin-top:-4px}.boxed-group .tabnav.heading{padding:0}.boxed-group .tabnav.heading .tabnav-tab.selected{border-top:0}.boxed-group .tabnav.heading li:first-child .selected{border-left-color:#fff;border-top-left-radius:3px}.boxed-group .tabnav-tabs a{border-radius:0;border-top:0}.boxed-group code.heading{font-size:12px}.boxed-group.dangerzone>h3{background-color:#df3e3e;border:1px solid #a00;color:#fff;text-shadow:0 -1px 0 #900}.boxed-group.dangerzone .boxed-group-inner{border-top:0}.boxed-group.condensed>h3{padding:6px 6px 7px;font-size:12px}.boxed-group.condensed>h3 .octicon{padding:0 6px 0 2px}.one-half .boxed-group,.dashboard-sidebar .boxed-group{margin-bottom:20px}.boxed-group .bleed-flush{width:100%;padding:0 10px;margin-left:-10px}.boxed-group .compact{margin-top:10px;margin-bottom:10px}.boxed-group-inner{padding:1px 10px;background:#fff;border:1px solid #d8d8d8;border-bottom-left-radius:3px;border-bottom-right-radius:3px;color:#666;font-size:13px}.boxed-group-inner .markdown-body{padding:20px 10px 10px;font-size:13px}.boxed-group-inner.markdown-body{padding-top:10px;padding-bottom:10px}.boxed-group-inner.seamless{padding:0}.boxed-group-inner h4{margin:15px 0 -5px;font-size:14px;color:#000}.boxed-group-inner .tabnav{margin-left:-10px;margin-right:-10px;padding-left:10px;padding-right:10px}.boxed-group-inner .tabnav-tab.selected{border-top:1px solid #ddd}.boxed-group-inner .help{clear:both;margin:1em -10px 0;padding:1em 10px 1em 35px;border-top:1px solid #ddd;color:#999}.boxed-group-inner .help .octicon{margin-left:-25px;margin-right:5px}.boxed-group-inner .flash-global{margin-left:-10px;margin-right:-10px;border-top:0}.boxed-action{float:right;margin-left:10px}.boxed-group-action{float:right;margin:6px 10px 0 0;position:relative;z-index:2}.boxed-group-action.flush{margin-top:0;margin-right:0}.boxed-group-action>.octicon{color:#999;margin-top:4px}.boxed-group-action>button{background-color:transparent;border:0;-webkit-appearance:none}.field-with-errors{display:inline}.compact-options{margin:-6px 0 13px}.compact-options>li{margin:0 12px 0 0;display:inline-block;list-style-type:none;font-weight:bold}.compact-options>li label{float:left}.compact-options>li .spinner{float:left;width:16px;height:16px;margin-left:5px;display:block}.boxed-group-list{list-style:none;margin:0}.boxed-group-list>li{display:block;margin-left:-10px;margin-right:-10px;padding:5px 10px;line-height:23px;border-bottom:1px solid #e5e5e5}.boxed-group-list>li:hover{background:#ffe}.boxed-group-list>li:first-child{border-top:1px solid #ddd}.boxed-group-list>li:last-of-type{border-bottom:0}.boxed-group-list>li.selected{background:#e5f9e2}.boxed-group-list>li.approved .minibutton,.boxed-group-list>li.rejected .minibutton{display:none}.boxed-group-list>li.approved:before{margin-right:5px;font:normal normal 16px/1 "octicons";display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased;content:"\f03a";color:#5ec051}.boxed-group-list>li.rejected:before{margin-right:5px;font:normal normal 16px/1 "octicons";display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased;content:"\f050";color:#bc0000}.boxed-group-list>li.rejected a{text-decoration:line-through}.boxed-group-list>li img{margin-top:-2px;margin-right:4px;vertical-align:middle;border-radius:3px}.boxed-group-list>li .minibutton{float:right;margin:-1px 0 0 10px}.boxed-group-list>li .button-group{float:right}.boxed-group-list>li .button-group .minibutton{float:left}.boxed-group.flush .boxed-group-list li{margin-left:0;width:auto;padding-left:0;padding-right:0}.boxed-group-list.standalone{margin-top:-1px}.boxed-group-list.standalone>li:first-child{border-top:0}.boxed-group-table{width:100%;text-align:left}.boxed-group-table tr:last-child td{border-bottom:0}.boxed-group-table th{padding:9px;border-bottom:1px solid #eee;background-color:#fafafa}.boxed-group-table td{padding:9px;border-bottom:1px solid #eee;vertical-align:top}#ajax-error-message{display:none;position:fixed;top:-200px;left:50%;width:974px;z-index:9999;margin:0 3px;margin-left:-487px;-webkit-transition:top 0.5s ease-in-out;transition:top 0.5s ease-in-out}#ajax-error-message.visible{top:0}#ajax-error-message>.octicon-alert{vertical-align:text-top}.boxed-group-success,.boxed-group-warning{padding:10px 15px;margin:-1px -10px 0;border-style:solid;border-width:1px 0}.boxed-group-success .minibutton,.boxed-group-warning .minibutton{margin:-5px 0}.boxed-group-success:first-child,.boxed-group-warning:first-child{border-top:0}.boxed-group-success{color:#22662c;background-color:#e2f9e5;border-color:#bad3be}.boxed-group-warning{color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}.avatar-stack .avatar{float:right;width:20px;height:20px;margin-left:-17px;border-radius:2px;-webkit-transition:margin 0.2s ease-in-out;transition:margin 0.2s ease-in-out;background-color:#fff;border-right:1px solid #fff}.avatar-stack .avatar:last-child{margin-left:3px}.avatar-stack:hover .avatar{margin-left:3px}.conversation-list-heading{margin:35px 0 10px;height:0;text-align:center;font-size:16px;font-weight:normal;color:#999;border-bottom:1px solid #ddd}.conversation-list-heading .inner{display:inline-block;position:relative;top:-10px;padding:0 5px;background:#fff}.simple-conversation-list{margin:15px 0;font-size:13px;color:#999}.simple-conversation-list>li{margin:0;padding:11px 0 8px;list-style-type:none;border-top:1px solid #eee}.simple-conversation-list>li:first-child{border-top:0}.simple-conversation-list>li .title{font-weight:bold}.simple-conversation-list>li .num{color:#999}.simple-conversation-list>li .state{margin-right:3px;margin-top:-3px;padding-top:2px;padding-bottom:2px}.simple-conversation-list>li .meta{float:right;margin-left:10px}.simple-conversation-list.varied-states>li{padding-left:90px}.simple-conversation-list.varied-states>li:before{display:table;content:""}.simple-conversation-list.varied-states>li:after{display:table;clear:both;content:""}.simple-conversation-list.varied-states>li .state{float:left;width:80px;margin-left:-90px}.pagehead{position:relative;padding-top:20px;padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid #eee}.pagehead.admin{background:url(/images/modules/pagehead/background-yellowhatch-v3.png) 0 0 repeat-x}.pagehead .account-switcher{display:inline-block;margin-top:-2px;margin-bottom:-6px}.pagehead ul.pagehead-actions{z-index:21;float:right;margin:0}.pagehead ul.pagehead-actions .feed-icon{margin-top:5px}.pagehead .path-divider{margin:0 0.25em}.pagehead h1{margin-top:0;margin-bottom:0;font-size:20px;font-weight:normal;line-height:28px}.pagehead h1 strong{font-weight:bold}.pagehead h1 a{white-space:nowrap}.pagehead h1 .avatar{margin-top:-2px;margin-right:9px;margin-bottom:-2px}.pagehead-actions>li{float:left;margin:0 10px 0 0;font-size:11px;color:#333;list-style-type:none}.pagehead-actions>li:last-child{margin-right:0}.pagehead-actions .octicon-mute{color:#c00}.context-loader{position:absolute;top:0;left:50%;z-index:20;width:154px;padding:10px 10px 10px 30px;margin-left:-75px;font-size:12px;font-weight:bold;color:#666;background:url(/images/spinners/octocat-spinner-16px.gif) 10px 50% no-repeat #eee;border:1px solid #ddd;border-top:1px solid #fff;border-radius:5px;border-top-left-radius:0;border-top-right-radius:0}@media screen and (-webkit-min-device-pixel-ratio: 2), screen and (max--moz-device-pixel-ratio: 2){.context-loader{background:url(/images/spinners/octocat-spinner-32-EAF2F5.gif) 10px 50% no-repeat #eee;background-size:16px auto}}.pagehead-nav{float:right;margin-bottom:-20px}.pagehead-nav-item{float:left;padding:6px 10px 21px;margin-left:20px;font-size:14px;color:#777}.pagehead-nav-item:hover{color:#333;text-decoration:none}.pagehead-nav-item.selected{color:#333;border-bottom:2px solid #d26911}.pagehead-nav-item+.button-outline{margin-top:-1px;margin-left:20px}.progress-bar{display:block;overflow:hidden;background-color:#eee;border-radius:3px;height:15px}.progress-bar .progress{height:100%;display:block;background-color:#6cc644}.protip{margin-top:20px;text-align:center}.protip code{padding:2px;background-color:#f4f4f4;border-radius:3px}.protip-callout{padding:8px 10px;margin-bottom:20px;color:#4c4a42;text-align:left;border:solid 1px #eee;border-radius:3px}.repo-list{position:relative}.repo-list .participation-graph{position:absolute;right:0;bottom:0;left:0;z-index:-1}.repo-list .participation-graph.disabled{display:none}.repo-list .participation-graph .bars{position:absolute;bottom:0}.repo-list-item{position:relative;padding-top:30px;padding-bottom:30px;list-style:none;border-bottom:1px solid #eee}.repo-list-name{margin:0 0 8px;font-size:20px;line-height:1.2}.repo-list-name .prefix,.repo-list-name .slash{font-weight:normal}.repo-list-name .slash{margin-right:-4px;margin-left:-4px}.repo-list-description{max-width:550px;margin-top:8px;margin-bottom:0;font-size:14px;color:#666}.repo-list-stats{margin-top:6px;float:right;font-size:12px;font-weight:bold;color:#888}.repo-list-stats .repo-list-stat-item{margin-left:8px;display:inline-block;color:#888;text-decoration:none}.repo-list-stats .repo-list-stat-item:hover{color:#4183c4}.repo-list-stats .repo-list-stat-item>.octicon{font-size:14px}.repo-list-info{display:inline-block;height:100%;margin-top:0;margin-bottom:0;font-size:12px;color:#888;vertical-align:middle}.repo-list-info .octicon{margin-top:-3px;font-size:12px;vertical-align:middle}.repo-list-meta{display:block;margin-top:8px;margin-bottom:0;font-size:13px;color:#888}.repo-list-meta .avatar{margin-top:-2px}.repo-list-meta a:hover{text-decoration:none}.task-list-item{list-style-type:none}.task-list-item label{font-weight:normal}.task-list-item.enabled label{cursor:pointer}.task-list-item+.task-list-item{margin-top:3px}.task-list-item-checkbox{margin:0 0.35em 0.25em -1.6em;vertical-align:middle}.about-header{height:300px;background-color:#111;background-image:url(/images/modules/about/about-header.jpg);background-size:cover;background-position:50%}.about-header.team{background-image:url(/images/modules/about/team-header.jpg)}.about-header.press{background-image:url(/images/modules/about/press-header.jpg)}.about-header.jobs{background-image:url(/images/modules/about/jobs-header.jpg)}.about-menu{margin-bottom:40px;border-bottom:1px solid #eee}.about-menu-link{float:left;width:25%;padding:20px 20px 17px;font-size:18px;color:#777;text-align:center;border-bottom:3px solid #fff}.about-menu-link:hover{color:#4183c4;text-decoration:none;border-bottom-color:#f5f5f5}.about-menu-link.selected{font-weight:bold;color:#333;border-bottom-color:#d26911}.about-content{padding:0;font-size:18px;font-weight:300;line-height:1.5}.about-content p{margin-top:0}.about-content hr{margin-top:30px;margin-bottom:30px;border-bottom-color:#eee}.about-lead{padding-left:10%;padding-right:10%;margin-bottom:40px;font-size:24px;text-align:center}.press-mentions{margin-top:10px}.press-mentions li{margin-bottom:15px;list-style-type:none}.press-mentions cite{font-style:normal;font-weight:normal;display:block;font-size:13px;color:#666}.press-date{margin-top:25px;margin-bottom:0;color:#808080}.press-info{margin:20px 0 30px}.press-info:before{display:table;content:""}.press-info:after{display:table;clear:both;content:""}.press-info-link{position:relative;display:block;padding:10px 15px;font-weight:normal;line-height:2;background-color:#fafafa;border:1px solid #ddd}.press-info-link:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.press-info-link:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.press-info-link+.press-info-link{margin-top:-1px}.press-info-link .mega-octicon{width:32px;text-align:center;margin-right:7px;color:#aec0d0;vertical-align:middle}.press-info-link:hover{z-index:2;color:#fff;text-decoration:none;border-color:#4183c4;background-color:#4183c4}.press-info-link:hover .mega-octicon{color:inherit}.hubbers-list{margin:-6px;list-style:none}.hubbers-list:before{display:table;content:""}.hubbers-list:after{display:table;clear:both;content:""}.hubbers-list-item{display:block;float:left;width:128px;height:128px;margin:6px;text-align:center}.hubbers-list-item img{display:block;width:100%;height:100%;background-color:#fff}.hubbers-list-item .hubber-name{position:absolute;top:0;right:0;bottom:0;left:0;display:block;padding-top:100px;font-size:12px;font-weight:bold;color:#fff;text-align:center;text-shadow:0 0 4px #000;background-color:rgba(0,0,0,0.25);background-image:-webkit-linear-gradient(rgba(0,0,0,0.01) 50%, rgba(0,0,0,0.25));background-image:linear-gradient(rgba(0,0,0,0.01) 50%, rgba(0,0,0,0.25));background-repeat:repeat-x;background-color:transparent;opacity:0;-webkit-transition:opacity 0.25s ease-in-out;transition:opacity 0.25s ease-in-out}.hubbers-list-item a{position:absolute;display:block;width:128px;height:128px}.hubbers-list-item a:hover .hubber-name{opacity:1}.jobs-open-positions{background-color:#f1f6fb;border:solid 1px #d0e5f8;border-radius:3px;padding:20px;margin-top:10px}.jobs-open-positions ul{margin-top:24px;list-style:none}.account-membership-form .become-a-member,.account-membership-form .already-a-member{display:none}.account-membership-form.is-member .already-a-member{display:block}.account-membership-form.is-not-member .become-a-member{display:block}.cvv-hint{position:relative;padding-right:15px}.cvv-hint:hover .cvv-hint-tooltip{display:block}.cvv-hint-tooltip{display:none;position:absolute;border:1px solid #d0d0d0;padding:15px;z-index:1000;background-color:#fff;left:100%;top:-150px;box-shadow:0 0 5px #ebebeb, 0 0 5px #ebebeb, 0 0 5px #ebebeb, 0 0 5px #ebebeb, 0 0 5px #ebebeb}.credit-card{border:1px solid #ddd;width:250px;padding:20px;height:150px;position:relative;margin-top:5px;border-radius:10px}.credit-card.amex{margin-top:15px}.credit-card.amex .title{color:#fff;font-family:"Arial Black", "Arial Bold", Gadget, sans-serif;text-shadow:1px 0 0 #ddd, -1px 0 0 #ddd, 0 1px 0 #ddd, 0 -1px 0 #ddd, -1px -1px 0 #ddd, 1px 1px 0 #ddd, -1px 1px 0 #ddd, 1px -1px 0 #ddd;position:relative;z-index:1;top:-5px;text-align:center;letter-spacing:1px;-webkit-transform:scale(1.3, 1);-ms-transform:scale(1.3, 1);transform:scale(1.3, 1)}.credit-card.amex .card-number{margin-top:40px;font-size:15px;display:inline-block;white-space:nowrap;position:relative}.credit-card.amex .gladiator{position:absolute;left:50%;top:50px;margin-left:-35px;height:80px;width:70px;border:3px solid #fff;box-shadow:0 0 1px #aaa;border-top-left-radius:35px 40px;border-bottom-left-radius:35px 40px;border-top-right-radius:35px 40px;border-bottom-right-radius:35px 40px;background-color:#e0e0e0}.credit-card.normal .strap{background-color:#555;height:20px;margin:-5px -20px 15px}.credit-card.normal .signature{display:inline-block;background-color:#e9e9e9;white-space:nowrap;font-family:"Brush Script MT", cursive;height:30px;width:150px;font-size:17px;color:#aaa;letter-spacing:-1px;line-height:33px;text-indent:10px}.credit-card .cvv{left:-7px;top:-10px;border:2px solid #f00;padding:2px 5px;line-height:1;font-family:monospace;font-size:10px;border-top-left-radius:20px 10px;border-bottom-left-radius:20px 10px;border-top-right-radius:20px 10px;border-bottom-right-radius:20px 10px;text-align:center;position:relative;display:inline-block}.credit-card .cvv span{position:absolute;right:100%;margin-right:5px;color:#999}.credit-card .text{text-transform:uppercase;font-size:7px;display:block;line-height:1.1;font-weight:bold;font-family:monospace}.billing-seats table input{width:5em}.billing-seats table td{vertical-align:middle;border-bottom:0}.billing-seats table td.fixed{width:150px}.billing-seats table td.black{color:#000}.billing-seats table tr{border-bottom:1px solid #eee}.billing-seats table tr:last-child{border-bottom:0}.billing-seats table tr:nth-child(even){background-color:#fafafa}.billing-seats table tr.total-row{background-color:#fff}.billing-seats .new-seats{margin-left:5px}.billing-seats .seat-cost{color:#999}.billing-seats .form-submit,.billing-seats .payment-method{margin-left:10px}.billing-seats .payment-summary{margin-left:10px;margin-right:10px}.billing-credit-card .javascript-disabled-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;display:none;background-color:#fff;opacity:0.5}.billing-credit-card.disabled .javascript-disabled-overlay,.billing-credit-card.unsupported .javascript-disabled-overlay{display:block}.billing-actions{padding-bottom:10px}.help.billing-next-payment-help{margin-top:0}.billing-extra-box{border-left:3px solid #eee;padding-left:10px;margin:10px 0 0}.billing-section{border-bottom:1px solid #eee;padding:15px 10px;line-height:1.5em}.billing-section.oneliner{padding-bottom:14px}.billing-section.oneliner .action-button{margin-top:-4px;margin-bottom:-4px}.billing-section p{margin:10px 0 0}.billing-section .disabled-message{color:#bd2c00}.billing-section .action-button{float:right;margin-bottom:5px;margin-left:10px}.billing-section .octicon-button{float:right;padding:4px;margin-left:5px}.billing-section .section-label{width:85px;color:#777;font-weight:normal;text-align:right;position:absolute}.billing-section .section-content{color:#333;margin-left:100px}.billing-section .external-asset-info{margin-bottom:15px}.billing-section .external-asset-info:last-child{margin-bottom:5px}.billing-section .external-asset-info.asset-packs-purchased{margin-bottom:20px}.billing-section .usage-bar{margin:5px 0 0;background:#eee;border-radius:20px;max-width:304px;width:100%}.billing-section .usage-bar.exceeded .progress{background:#bd2c00}.billing-section .usage-bar .progress{max-width:100%;border-radius:20px;height:5px;background:#67d07c;position:relative}.billing-section .usage-bar .progress.no-highlight{background:#999}.billing-section .pending-invitations-link{color:#999}.billing-section:last-child{border-bottom:0}.billing-section.info-section{background:#f9f9f9;border-bottom:0;color:#777;overflow:hidden}.billing-section.info-section .octicon-info{font-size:30px;color:#ddd}.setup-wrapper .paypal-container{margin-bottom:30px}.setup-wrapper .paypal-logged-in .paypal-container{margin-bottom:10px}.payment-methods{position:relative}.payment-methods .selected-payment-method{display:none}.payment-methods .selected-payment-method:before{display:table;content:""}.payment-methods .selected-payment-method:after{display:table;clear:both;content:""}.payment-methods .selected-payment-method.active{display:block}.payment-methods .pay-with-header{margin:5px 0}.payment-methods .pay-with-paypal .setup-creditcard-form,.payment-methods .pay-with-paypal .paypal-form-actions,.payment-methods .pay-with-paypal .terms,.payment-methods .pay-with-paypal .paypal-signed-in,.payment-methods .pay-with-paypal .paypal-down-flash,.payment-methods .pay-with-paypal .loading-paypal-spinner{display:none}.payment-methods.paypal-loading .loading-paypal-spinner{display:block}.payment-methods.paypal-down .paypal-down-flash{display:block}.payment-methods.paypal-logged-in .paypal-sign-in{display:none}.payment-methods.paypal-logged-in .setup-creditcard-form,.payment-methods.paypal-logged-in .paypal-form-actions,.payment-methods.paypal-logged-in .terms,.payment-methods.paypal-logged-in .paypal-signed-in{display:block}.payment-methods.has-paypal-account .paypal-sign-in{display:none}.payment-methods.has-paypal-account .paypal-signed-in{display:block}.paypal-label{font-weight:bold;margin:15px 0 10px}.paypal-container{margin-bottom:15px;vertical-align:top;display:inline-block;background-color:#f9f9f9;border-radius:4px}#braintree-paypal-loggedin{background-position:12px 50% !important;border:1px solid #ddd !important;padding:11px 16px !important;border-radius:4px}#bt-pp-name{margin-left:20px !important}#bt-pp-email{margin-left:15px !important}#bt-pp-cancel{font-size:0 !important;color:#a00 !important;text-decoration:none !important;font-family:octicons !important;line-height:1 !important;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#bt-pp-cancel:before{font-size:16px !important;content:"\f081"}.payment-history .no-payments{margin:10px}.payment-history .id,.payment-history .date,.payment-history .plan,.payment-history .receipt,.payment-history .status,.payment-history .amount{width:1%;white-space:nowrap}.payment-history .receipt{text-align:center}.payment-history .status{color:#999}.payment-history .status-icon{width:14px;text-align:center}.payment-history .succeeded .status{color:#6cc644}.payment-history .refunded,.payment-history .failed{background:#f9f9f9}.payment-history .refunded td,.payment-history .failed td{opacity:0.5}.payment-history .refunded .receipt,.payment-history .refunded .status,.payment-history .failed .receipt,.payment-history .failed .status{opacity:1}.payment-history .refunded .status{color:#999}.payment-history .failed .status{color:#bd2c00}.paypal-icon{vertical-align:middle;margin:0 2px 0 1px}.inline-form-action{display:inline}.boxed-group .boxed-group-content{margin:10px}.billing-container{width:500px;margin-top:80px;margin-bottom:80px}.billing-step{margin-bottom:50px}.billing-step-title{font-weight:400;padding-bottom:10px;border-bottom:1px solid #e0e0e0;margin-bottom:15px}.currency-container .local-currency,.currency-container .local-currency-block{display:none}.currency-container.open .local-currency{display:inline}.currency-container.open .local-currency-block{display:block}.currency-container.open .default-currency{display:none}.plan-chooser{margin:10px auto 20px}.plan-chooser.on-free .toggle-currency,.plan-chooser.on-free .currency-notice,.plan-chooser.on-free .plan-price-group,.plan-chooser.on-free .coupon-notice{display:none}.strong-label{font-weight:bold;margin-bottom:5px;display:inline-block}.plan-chooser-repo-menu{margin-bottom:15px}.plan-chooser-repo-menu .price-label{display:none}.plan-chooser-repo-menu .button-block{text-align:left}.discounted-original-price,.per-repo.has-coupon .original-price{text-decoration:line-through;color:#999;font-weight:normal}.heat1{background-color:#ffeca7}.heat2{background-color:#ffdd8c}.heat3{background-color:#ffdd7c}.heat4{background-color:#fba447}.heat5{background-color:#f68736}.heat6{background-color:#f37636}.heat7{background-color:#ca6632}.heat8{background-color:#c0513f}.heat9{background-color:#a2503a}.heat10{background-color:#793738}.blame-breadcrumb .css-truncate-target{max-width:680px}.blame-commit,.blame-commit+.blame-line{border-top:1px solid #e9e9e9}.blame-container{margin-top:-1px}.blame-blob-num{background-color:#fdfdfd}.blame-commit-info{position:relative;width:350px;min-width:350px;max-width:350px;padding:8px 10px;vertical-align:top}.blame-commit-avatar{float:left;margin-right:5px}.blame-commit-title{font-weight:bold;color:#333;max-width:230px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1;vertical-align:top}.blame-sha{font:11px Consolas, "Liberation Mono", Menlo, Courier, monospace;float:right}.blame-commit-meta{color:#999;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1}.line-age{width:2px;padding:0 1px}.line-age-legend{float:right;margin-top:-25px;font-size:12px;color:#777}.line-age-legend ol{display:inline-block;list-style:none;margin:0 5px}.line-age-legend ol li{display:inline-block;width:8px;height:10px}#blog-main .pagehead h1{margin-top:3px;font-size:24px}.blog-title{color:#333}.blog-search{position:relative;float:right}.blog-search .blog-search-input{padding-left:28px;width:200px}.blog-search .octicon-search{position:absolute;left:7px;top:9px;z-index:5;color:#999}.blog-search-results em{background-color:#faffa6;padding:0.1em}.blog-aside{float:right;width:200px}.blog-aside .button{margin-bottom:20px;text-align:center}.blog-aside .menu-container{float:none;margin-bottom:30px}.blog-aside .rss{display:inline-block;margin-left:5px;color:#999}.blog-aside .rss .octicon{float:left;margin-right:5px;color:#f93}.blog-content{width:685px;font-family:"Helvetica Neue", Helvetica, Arial, freesans, sans-serif}.blog-content h1,.blog-content h2,.blog-content h3{font-weight:500}.blog-content .markdown-body h2{font-size:20px}.blog-content .markdown-body h3{font-size:18px}.blog-draft-indicator{color:#bd2c00}.blog-post{margin-bottom:60px}.blog-post-meta{list-style:none;margin-bottom:20px;color:#999}.blog-post-meta .meta-item{display:inline;padding-right:20px}.blog-post-meta a{color:#999}.blog-post-meta .octicon,.blog-post-meta .author-avatar{vertical-align:top;border-radius:3px}.blog-post-title{margin-top:0;margin-bottom:10px;font-size:32px}#blog-home{color:#ccc;font-size:15px;font-weight:100;margin-right:10px;margin-left:-25px;vertical-align:middle}#blog-home:hover{color:#999}.blog-post-body{font-size:16px;line-height:1.6;color:#444}.blog-post-body img{padding:3px;border:1px solid #d8d8d8}.blog-post-body img.emoji{border:0;padding:0}.blog-post-body iframe{border:0;width:100%}.blog-feedback{margin:50px 0;background-color:#fafafa;border:1px solid #ddd;border-bottom-color:#ccc;border-radius:3px;box-shadow:inset 0 1px 0 #fff, 0 1px 5px #f1f1f1}.blog-feedback-header{margin:0;padding:10px;border-bottom:1px solid #ddd;box-shadow:0 1px 0 #fff;font-size:14px;font-weight:bold}.blog-feedback-header.with-twitter{background:url(/images/icons/twitter.png) 648px 1px no-repeat;background-size:32px auto}.blog-feedback-description{margin:0;padding:10px;color:#999}.branches .page-header{margin-bottom:20px}.branches .clear-search{display:none}.branches .loading-overlay{display:none;position:absolute;top:0;width:100%;height:100%;padding-top:50px;z-index:20;background-color:rgba(255,255,255,0.7);text-align:center}.branches .loading-overlay .spinner{display:inline-block}.branches.is-search-mode .clear-search{display:inline-block}.branches.is-loading .loading-overlay{display:block}.branches .status{display:inline-block;width:16px;text-align:center}.branches .status .octicon{position:relative;top:2px}.branches .pull-request-link{top:0;display:inline;padding:2px 5px;line-height:1em}.branches .branch-actions{float:right;position:relative;top:-3px;right:-4px}.branches .branch-actions form{display:inline}.branches .branch-actions .octicon{width:16px;text-align:center}.branch-groups{position:relative}.branch-group{margin-bottom:20px;width:100%;border-radius:3px}.branch-group:before{display:table;content:""}.branch-group:after{display:table;clear:both;content:""}.branch-group-heading{border:1px solid #ddd;border-bottom:0;padding:6px 12px;background:#f5f5f5;text-shadow:0 1px 0 #fff}.branch-group-heading+.branch-summary{border-top:1px solid #ddd}.branch-group-name{color:#666;font-weight:bold}.branch-group-heading:first-child,.branch-summary:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.branch-group-heading:last-child,.branch-summary:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.branches-view-switcher{display:inline-block;vertical-align:middle}.branch-search{position:relative;float:right;vertical-align:middle}.branch-search .clear-search{position:absolute;right:12px;top:9px;color:#999}.branch-search-field{width:250px;padding-right:25px}.no-results-message{padding:12px;border:1px solid #ddd;border-radius:0 0 3px 3px;color:rgba(0,0,0,0.5);text-align:center}.branch-summary{padding:12px;border:1px solid #ddd;border-bottom:0;color:rgba(0,0,0,0.5)}.branch-summary:last-child{border-bottom:1px solid #ddd}.branch-summary .branch-spinner{display:none;vertical-align:text-bottom}.branch-summary.loading .branch-delete-icon{display:none}.branch-summary.loading .branch-spinner{display:inline-block}.branch-summary.is-deleted .existing-branch-summary{display:none}.branch-summary.is-deleted .deleted-branch-summary{display:block}.deleted-branch-summary{display:none}.deleted-branch-summary .css-truncate-target{max-width:500px}.deleted-branch-summary .branch-name{opacity:0.5;text-decoration:line-through}.deleted-branch-summary .branch-spinner{float:right;position:relative;top:4px;right:5px}.pr-details{display:inline-block;width:144px;text-align:right}.pr-details .state{padding:1px 5px;font-size:12px;width:75px;margin-left:5px;text-decoration:none}.pr-details .state .octicon{font-size:14px}.branch-delete{display:inline-block;color:#bd2c00;margin:4px 2px 0 8px}.branch-delete.disabled{color:#ddd}.more-branches{display:block;padding:6px;width:100%;border:1px solid #dae5eb;border-radius:0 0 3px 3px;text-align:center;text-decoration:none;background:#f1f7fa;color:#4183c4}.more-branches:hover{background:#e6f1f6}.more-branches .octicon{position:relative;top:1px;margin-left:5px}.branch-details{display:inline-block;width:490px;margin-right:10px}.branch-details .css-truncate-target{max-width:240px}.branch-meta{color:#aaa;font-size:12px;line-height:20px}.default-label{width:180px;text-align:center;display:inline-block}@-webkit-keyframes branch-bar-slide{from{width:0%}to{width:100%}}@keyframes branch-bar-slide{from{width:0%}to{width:100%}}.branch-a-b-count{display:inline-block;vertical-align:middle}.branch-a-b-count .count-half{float:left;width:90px;text-align:right;padding-bottom:6px;position:relative}.branch-a-b-count .count-half:last-child{text-align:left;border-left:1px solid #bbb}.branch-a-b-count .count-value{position:relative;top:-1px;display:block;padding:0 3px;font-size:10px}.branch-a-b-count .bar{position:absolute;min-width:3px;height:4px}.branch-a-b-count .meter{position:absolute;height:4px;background-color:#ccc;-webkit-animation:branch-bar-slide 0.3s ease forwards 0.5s;animation:branch-bar-slide 0.3s ease forwards 0.5s}.branch-a-b-count .meter.zero{background-color:transparent}.branch-a-b-count .bar-behind{right:0;border-radius:3px 0 0 3px}.branch-a-b-count .bar-behind .meter{right:0;border-radius:3px 0 0 3px}.branch-a-b-count .bar-ahead{left:0;border-radius:0 3px 3px 0}.branch-a-b-count .bar-ahead .meter{border-radius:0 3px 3px 0}.branch-a-b-count .bar-ahead.even,.branch-a-b-count .bar-behind.even{background:#eee;min-width:2px}.capped-cards{list-style:none}.capped-cards .capped-card{float:left;width:450px}.capped-card{border-radius:2px;border:1px solid #ddd;list-style:none;margin:10px}.capped-card:before{display:table;content:""}.capped-card:after{display:table;clear:both;content:""}.capped-card:nth-child(odd){margin-left:0}.capped-card:nth-child(even){margin-right:0}.capped-card h3{margin:0;border-bottom:1px solid #eee;line-height:100%;padding:10px}.capped-card>p{border-bottom:1px solid #eee;color:#999;display:block;font-size:15px;line-height:100%;margin:0;padding:0 10px 10px}.capped-card-content{background:#f7f7f7;display:block}.capped-card-content:before{display:table;content:""}.capped-card-content:after{display:table;clear:both;content:""}.clone-url h5{margin-top:0;margin-bottom:10px}.clone-url .input-group{width:100%}.clone-url input.input-mini{font-size:11px;color:#999}.commit-form{position:relative;padding:15px;border:1px solid #ddd;border-radius:3px}.commit-form:after,.commit-form:before{position:absolute;top:11px;left:-16px;right:100%;width:0;height:0;display:block;content:" ";border-color:transparent;border-style:solid solid outset;pointer-events:none}.commit-form:after{border-width:7px;border-right-color:#fff;margin-top:1px;margin-left:2px}.commit-form:before{border-right-color:#ddd;border-width:8px}.commit-form .input-block{margin-top:10px;margin-bottom:10px}.commit-form-avatar{float:left;margin-left:-64px;border-radius:3px}.commit-form-actions{text-align:right}.commit-form-actions:before{display:table;content:""}.commit-form-actions:after{display:table;clear:both;content:""}.commit-form-actions .button{float:right;margin-left:5px}.commit-form-actions .check-for-fork{line-height:34px}.copyable-terminal{position:relative;padding:10px 55px 10px 10px;background-color:#f7f7f7;border-radius:3px}.copyable-terminal-content{overflow:auto}.copyable-terminal-button{position:absolute;top:5px;right:5px}.copyable-terminal-button .zeroclipboard-button{float:right}.copyable-terminal-button .zeroclipboard-button .octicon{padding-left:1px;margin:0 auto}.logged_out.enter-coupon{background-color:#f9f9f9}.logged_out.enter-coupon .coupon-form-body{margin-bottom:-20px;background-image:none;box-shadow:0 1px 3px rgba(0,0,0,0.075),inset 1px 0 #fff,0 0 200px #fff}.logged_out.enter-coupon .header-logged-out{background-color:#fff}.logged_out.enter-coupon .site-footer{border-top:0}.coupons .setup-plans td img{vertical-align:middle;margin-top:-2px}.coupons .coupon-form-body{width:230px;margin:100px auto 60px;padding:20px;font-size:14px;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;text-align:center;background-color:#fff;background-image:-webkit-linear-gradient(#fefefe, #fafafa);background-image:linear-gradient(#fefefe, #fafafa);border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.075),inset 1px 0 #fff}.coupons .coupon-form-body .input-block{margin-bottom:15px}.coupons .coupon-form-body .button{display:block;width:100%}.coupon-icon{width:80px;height:80px;margin:0 auto 15px;color:#4183c4;border:1px solid #dedede;border-radius:40px}.coupon-icon .mega-octicon{margin-left:2px;font-size:48px;line-height:80px}.coupon-signin-title{margin-top:40px}.coupon-title{margin-bottom:20px;font-weight:500}.coupons-list-options{margin-bottom:15px}.coupons-list-options .select-menu,.coupons-list-options .button-group{display:inline-block;margin-right:10px}.coupons-list-options .pagination{float:right;margin:0}dl.form.developer-select-account{margin-top:0}.developer-wrapper .setup-info-module .features-list{margin-left:16px}.developer-wrapper .setup-info-module .features-list .octicon{margin-left:-17px}.developer-thanks h2{font-size:38px;font-weight:normal}.developer-thanks .hook{margin-top:2px;margin-bottom:30px;font-size:18px;font-weight:300;color:#666}.developer-thanks-image{position:relative;bottom:-45px;float:left;width:400px}.developer-thanks-section{margin:130px 0 0 470px}.developer-next-steps{list-style:none;font-size:18px;font-weight:300}.developer-next-steps li{margin-top:10px}.developer-next-steps li:first-child{margin-top:0}.developer-next-steps .mega-octicon{position:relative;top:5px;margin-right:10px;font-size:32px;color:#6cc644}.blob-wrapper{overflow-x:auto;overflow-y:hidden;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.tab-size-1{-moz-tab-size:1;-o-tab-size:1;tab-size:1}.tab-size-2{-moz-tab-size:2;-o-tab-size:2;tab-size:2}.tab-size-3{-moz-tab-size:3;-o-tab-size:3;tab-size:3}.tab-size-4{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.tab-size-5{-moz-tab-size:5;-o-tab-size:5;tab-size:5}.tab-size-6{-moz-tab-size:6;-o-tab-size:6;tab-size:6}.tab-size-7{-moz-tab-size:7;-o-tab-size:7;tab-size:7}.tab-size-8{-moz-tab-size:8;-o-tab-size:8;tab-size:8}.tab-size-9{-moz-tab-size:9;-o-tab-size:9;tab-size:9}.tab-size-10{-moz-tab-size:10;-o-tab-size:10;tab-size:10}.tab-size-11{-moz-tab-size:11;-o-tab-size:11;tab-size:11}.tab-size-12{-moz-tab-size:12;-o-tab-size:12;tab-size:12}.diff-table{width:100%;border-collapse:separate}.diff-table .line-comments{padding:10px;vertical-align:top}.diff-table .line-comments:first-child+.empty-cell{border-left-width:1px}.diff-table tr:not(:last-child) .line-comments{border-top:1px solid #eee;border-bottom:1px solid #eee}.blob-num{width:1%;min-width:50px;padding-left:10px;padding-right:10px;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;line-height:18px;color:rgba(0,0,0,0.3);vertical-align:top;text-align:right;border:solid #eee;border-width:0 1px 0 0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.blob-num:hover{color:rgba(0,0,0,0.6)}.blob-num:before{content:attr(data-line-number)}.blob-num.non-expandable{cursor:default}.blob-num.non-expandable:hover{color:rgba(0,0,0,0.3)}.blob-code{position:relative;padding-left:10px;padding-right:10px;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;color:#333;vertical-align:top;white-space:pre;overflow:visible;word-wrap:normal}.blob-code .x-first{border-top-left-radius:0.2em;border-bottom-left-radius:0.2em}.blob-code .x-last{border-top-right-radius:0.2em;border-bottom-right-radius:0.2em}.soft-wrap .blob-code{word-wrap:break-word;white-space:pre-wrap;padding-left:18px;text-indent:-7px}.soft-wrap .blob-code .no-nl-marker{display:none}.soft-wrap .add-line-comment{margin-left:-28px}.blob-num-hunk,.blob-code-hunk,.blob-num-expandable,.blob-code-expandable{vertical-align:middle;color:rgba(0,0,0,0.3);border-color:#d5e4f2}.blob-num-hunk,.blob-num-expandable{background-color:#f0f5fa}.blob-code-hunk,.blob-code-expandable{padding-top:4px;padding-bottom:4px;background-color:#f8fafd;border-width:1px 0}.blob-expanded .blob-num,.blob-expanded .blob-code{background-color:#fafafa}.blob-expanded+tr:not(.blob-expanded) .blob-num,.blob-expanded+tr:not(.blob-expanded) .blob-code{border-top:1px solid #eee}.blob-expanded .blob-num-hunk{border-top:1px solid #eee}tr:not(.blob-expanded)+.blob-expanded .blob-num,tr:not(.blob-expanded)+.blob-expanded .blob-code{border-top:1px solid #eee}.blob-num-expandable{padding:0;font-size:12px;text-align:center}.blob-num-expandable .diff-expander{display:block;width:auto;height:auto;margin-right:-1px;padding:4px 11px 4px 10px;cursor:pointer;color:#999}.blob-num-expandable .diff-expander:hover{color:#fff;text-shadow:none;background-color:#4183c4;border-color:#4183c4}.blob-code-addition{background-color:#eaffea}.blob-code-addition .x{background-color:#a6f3a6}.blob-num-addition{background-color:#dbffdb;border-color:#c1e9c1}.blob-code-deletion{background-color:#ffecec}.blob-code-deletion .x{background-color:#f8cbcb}.blob-num-deletion{background-color:#ffdddd;border-color:#f1c0c0}.selected-line.blob-code{background-color:#f8eec7}.selected-line.blob-code .x{background-color:transparent}.selected-line.blob-num{background-color:#f6e8b5;border-color:#f0db88}.add-line-comment{position:relative;z-index:5;float:left;width:20px;height:20px;margin:-1px -10px -1px -20px;line-height:20px;color:#fff;text-align:center;text-indent:0;cursor:pointer;background-color:#4183c4;background-color:#4183c4;background-image:-webkit-linear-gradient(#5490ca, #4183c4);background-image:linear-gradient(#5490ca, #4183c4);background-repeat:repeat-x;border-radius:3px;box-shadow:0 1px 4px rgba(0,0,0,0.15);opacity:0;-webkit-transform:scale(0.8, 0.8);-ms-transform:scale(0.8, 0.8);transform:scale(0.8, 0.8);-webkit-transition:-webkit-transform 0.1s ease-in-out;transition:transform 0.1s ease-in-out}.add-line-comment:hover{-webkit-transform:scale(1, 1);-ms-transform:scale(1, 1);transform:scale(1, 1)}.is-hovered .add-line-comment{opacity:1}.inline-comment-form{border:1px solid #ddd;border-radius:3px}.inline-review-comment{margin-top:0 !important;margin-bottom:10px !important}.inline-review-comment .gc:first-child+tr .blob-num,.inline-review-comment .gc:first-child+tr .blob-code{padding-top:5px}.inline-review-comment tr:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.inline-review-comment tr:last-child .blob-num,.inline-review-comment tr:last-child .blob-code{padding-bottom:8px}.inline-review-comment tr:last-child .blob-num:first-child,.inline-review-comment tr:last-child .blob-code:first-child{border-bottom-left-radius:2px}.inline-review-comment tr:last-child .blob-num:last-child,.inline-review-comment tr:last-child .blob-code:last-child{border-bottom-right-radius:2px}.timeline-inline-comments{width:100%;table-layout:fixed}.timeline-inline-comments .inline-comments,.show-inline-notes .inline-comments{display:table-row}.inline-comments{display:none}.inline-comments .line-comments+.blob-num{border-left-width:1px}.inline-comments .line-comments .comment-content{position:relative}.inline-comments .line-comments .comment-content .suggester-container{top:10px}.inline-comments .timeline-comment{margin-bottom:10px}.inline-comments .inline-comment-form,.inline-comments .inline-comment-form-container{max-width:780px}.inline-comments .ajax-indicator{display:none;vertical-align:bottom}.inline-comments form.loading .ajax-indicator{display:inline-block}.comment-holder{max-width:780px}.line-comments+.line-comments,.empty-cell+.line-comments{border-left:1px solid #eee}.inline-comment-form-container .inline-comment-form,.inline-comment-form-container.open .add-line-note-button{display:none}.inline-comment-form-container .add-line-note-button,.inline-comment-form-container.open .inline-comment-form{display:block}.only-commit-comments .inline-comment{display:none}body.split-diff .header>.container,body.split-diff .repohead>.container,body.split-diff .site>.container{width:100%;padding-left:30px;padding-right:30px}body.split-diff .repository-with-sidebar{padding-right:60px}body.split-diff .repository-with-sidebar .repository-sidebar{margin-right:-60px}body.split-diff .repository-content{width:100%}.file-diff-split .blob-code{width:49%;white-space:pre-wrap;word-break:break-word}.file-diff-split .blob-code+.blob-num{border-left-width:1px}.file-diff-split .empty-cell{cursor:default;background-color:#fafafa;border-right-color:#eee}.ghe-license-status{padding:40px 0;font-size:16px;text-align:center}.ghe-license-status .octocat{width:225px;margin-bottom:20px}.ghe-license-status h1{margin-bottom:10px}.ghe-license-status p{margin-top:0;margin-bottom:5px;color:#777}.ghe-license-expiry-icon{margin:5px 10px 0 0;color:#ddb38a}.fakelogin{text-align:center;font-size:14px;line-height:34px;background-color:#b33630;background-image:-webkit-linear-gradient(#dc5f59, #b33630);background-image:linear-gradient(#dc5f59, #b33630);background-repeat:repeat-x;border-bottom:1px solid #900;color:#fff;position:fixed;top:0;z-index:1000;width:100%;text-shadow:0 -1px 0 rgba(153,0,0,0.25)}.fakelogin+.header{margin-top:35px}.fakelogin+#serverstats{margin-top:35px}.fakelogin a{color:#f3d9d7;text-decoration:underline}.fakelogin a:hover{color:#fff}.file{position:relative;margin-top:20px;margin-bottom:15px;border:1px solid #ddd;border-radius:3px}.file .data.empty{padding:5px 10px;color:#777}.file .data.suppressed,.file.open .image{display:none}.file.open .data.suppressed{display:block}.file .image{position:relative;padding:30px;text-align:center;background-color:#ddd}.file .image table{margin:0 auto}.file .image td{text-align:center;color:#888;padding:0 5px;vertical-align:top}.file .image td img{max-width:100%}.file .image .border-wrap{position:relative;display:inline-block;line-height:0;background-color:#fff;border:1px solid #999}.file .image a{display:inline-block;line-height:0}.file .image img,.file .image canvas{max-width:600px;background:url(/images/modules/commit/trans_bg.gif) right bottom #eee;border:1px solid #fff}.file .image .view img,.file .image .view canvas{position:relative;top:0;right:0;background:url(/images/modules/commit/trans_bg.gif) right bottom #eee;max-width:inherit}.file .image .view>span{vertical-align:middle}.file .hidden{display:none !important}.file .empty{background:none}.file-header{padding:5px 10px;background-color:#f7f7f7;border-bottom:1px solid #d8d8d8;border-top-left-radius:2px;border-top-right-radius:2px}.file-header:before{display:table;content:""}.file-header:after{display:table;clear:both;content:""}.file-actions{float:right;line-height:32px}.file-actions select{margin-left:5px}.file-info{float:left;line-height:32px}.file-info-divider{display:inline-block;width:1px;height:18px;margin-right:3px;margin-left:3px;vertical-align:middle;background-color:#ddd}.file-mode{text-transform:capitalize}.show-file-notes{display:none}.has-inline-notes .show-file-notes{display:inline-block;margin-right:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.file-blankslate{border:0;border-radius:0 0 2px 2px}.octicon-button{display:inline-block;margin-left:5px;padding-right:5px;padding-left:5px;color:#777;vertical-align:middle}.octicon-button:hover{color:#4183c4}.octicon-button.danger:hover{color:#bd2c00}.octicon-button.disabled{color:#bbb;cursor:default}.octicon-button.disabled:hover{color:#bbb}.enable-fullscreen.minibutton{display:inline-block;margin-top:4px;margin-left:5px;padding:0 6px}.enable-fullscreen.minibutton .octicon{margin-right:0}.new-file .enable-fullscreen{margin-left:11px}.write-content{position:relative}.write-content .enable-fullscreen{position:absolute;top:5px;right:16px;color:#333;opacity:0.5;line-height:1em}.write-content .enable-fullscreen:hover{opacity:1}.fullscreen-overlay{display:none;position:fixed;top:0;bottom:0;left:0;right:0;background:#fff;text-shadow:none;z-index:1000}.fullscreen-overlay .fullscreen-container{max-width:800px;height:100%;margin:0 auto;padding:30px 0}.fullscreen-overlay .textarea-wrap{width:100%;height:100%;position:relative}.fullscreen-overlay textarea{width:100%;height:100%;padding:20px;border:0;background:#fff;color:#999999;font-size:21px;line-height:1.6em;resize:none;-webkit-transition:color 0.15s ease-in-out;transition:color 0.15s ease-in-out;box-shadow:none}.fullscreen-overlay textarea:focus,.fullscreen-overlay textarea:hover{outline:none;color:#333}.fullscreen-overlay .fullscreen-sidebar{position:absolute;top:30px;right:30px;text-align:right;z-index:1002}.fullscreen-overlay .fullscreen-sidebar .exit-fullscreen,.fullscreen-overlay .fullscreen-sidebar .theme-switcher{color:#b3b3b3;float:right;clear:right;margin-bottom:15px}.fullscreen-overlay .fullscreen-sidebar .exit-fullscreen:hover,.fullscreen-overlay .fullscreen-sidebar .theme-switcher:hover{color:#333;text-shadow:0 0 10px #fff}.fullscreen-overlay .fullscreen-sidebar .theme-switcher{margin-right:8px}.fullscreen-overlay.dark-theme{background:#1d1f21}.fullscreen-overlay.dark-theme textarea{background:#1d1f21;color:#a4b1b1}.fullscreen-overlay.dark-theme textarea:focus,.fullscreen-overlay.dark-theme textarea:hover{color:#dbe0e0}.fullscreen-overlay.dark-theme .fullscreen-sidebar{color:#dbe0e0}.fullscreen-overlay.dark-theme .fullscreen-sidebar .exit-fullscreen,.fullscreen-overlay.dark-theme .fullscreen-sidebar .theme-switcher{color:#a4b1b1}.fullscreen-overlay.dark-theme .fullscreen-sidebar .exit-fullscreen:hover,.fullscreen-overlay.dark-theme .fullscreen-sidebar .theme-switcher:hover{color:#dbe0e0;text-shadow:0 0 10px #000}.fullscreen-overlay .suggester-container{top:5px;left:0}.fullscreen-overlay-enabled .wrapper,.fullscreen-overlay-enabled #footer{display:none}.fullscreen-overlay-enabled .fullscreen-overlay{display:block}.previewable-comment-form .upload-enabled .fullscreen-overlay textarea{max-height:none;border:0;border-radius:0}#gollum-editor{margin:10px 0 50px;padding:10px 0 0;border:0}#gollum-editor .comment-form-head.tabnav{border:1px solid #ddd}#gollum-editor #gollum-editor-body{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;line-height:22px;margin:13px 0 5px;height:390px;resize:vertical}#gollum-editor #gollum-editor-body+.collapsed,#gollum-editor #gollum-editor-body+.expanded{border-top:1px solid #ddd;margin-top:7px}#gollum-editor .collapsed,#gollum-editor .expanded{border-bottom:1px solid #ddd;display:block;overflow:hidden;padding:10px 0 5px}#gollum-editor .collapsed a.button,#gollum-editor .expanded a.button{border:1px solid #ddd;color:#333;display:block;float:left;height:25px;overflow:hidden;margin:2px 5px 7px 0;padding:0;text-shadow:0 1px 0 #fff;width:25px;background-color:#eaeaea;background-image:-webkit-linear-gradient(#fafafa, #eaeaea);background-image:linear-gradient(#fafafa, #eaeaea);background-repeat:repeat-x;border-radius:3px}#gollum-editor .collapsed a.button:hover,#gollum-editor .expanded a.button:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.3);text-decoration:none;background-color:#3072b3;background-image:-webkit-linear-gradient(#599bdc, #3072b3);background-image:linear-gradient(#599bdc, #3072b3);background-repeat:repeat-x}#gollum-editor .collapsed a.button span,#gollum-editor .expanded a.button span{margin:4px}#gollum-editor .collapsed h4,#gollum-editor .expanded h4{font-size:16px;float:left;margin:0;padding:6px 0 0 4px;text-shadow:0 -1px 0 #fff}#gollum-editor .collapsed a.button span.octicon-triangle-right{display:inline-block}#gollum-editor .collapsed textarea,#gollum-editor .collapsed a.button span.octicon-triangle-down{display:none}#gollum-editor .expanded a.button span.octicon-triangle-down{display:inline-block}#gollum-editor .expanded a.button span.octicon-triangle-right{display:none}#gollum-editor .expanded textarea{border:1px solid #ddd;clear:both;display:block;font-size:12px;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;height:84px;margin:8px 0;padding:6px;width:883px;resize:vertical}#gollum-editor a.gollum-minibutton,#gollum-editor a.gollum-minibutton:visited{border:1px solid #d4d4d4;color:#333;cursor:pointer;display:block;font-size:12px;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight:bold;margin:0 0 0 9px;padding:5px 12px;text-shadow:0 1px 0 #fff;background-color:#eaeaea;background-image:-webkit-linear-gradient(#fafafa, #eaeaea);background-image:linear-gradient(#fafafa, #eaeaea);background-repeat:repeat-x;border-radius:3px}#gollum-editor a.gollum-minibutton:hover,#gollum-editor a.gollum-minibutton:visited:hover{border-color:#518cc6 #518cc6 #2a65a0;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.3);text-decoration:none;background-color:#3072b3;background-image:-webkit-linear-gradient(#599bdc, #3072b3);background-image:linear-gradient(#599bdc, #3072b3);background-repeat:repeat-x}.singleline{display:block;margin:20px 0}.singleline label{display:block;margin-bottom:6px}#gollum-editor-title-field{border-bottom:0;margin:0 0 10px}.gollum-editor-page-title{font-weight:bold;margin-top:0}.gollum-editor-page-title.ph{color:#000}#gollum-editor-function-bar{height:26px;padding-bottom:10px;border-bottom:1px solid #ddd;margin:10px 0;border:0}#gollum-editor-function-bar #gollum-editor-function-buttons{display:none;float:left}#gollum-editor-function-bar.active #gollum-editor-function-buttons{display:block}#gollum-editor-function-bar #gollum-editor-format-selector{padding-top:5px;float:left;margin-left:20px}#gollum-editor-function-bar #gollum-editor-format-selector select{margin:0}#gollum-editor-function-bar #gollum-editor-format-selector label{color:#999;font-size:11px;font-weight:bold;line-height:17px;padding:0 5px 0 0}#gollum-editor-function-buttons .minibutton{width:30px;padding-left:0;padding-right:0;text-align:center}#gollum-editor-function-buttons .minibutton .octicon{margin-right:0}#gollum-error-message{display:none;padding-top:12px;font-size:1.8em;color:#f33}#gollum-editor-help{overflow:hidden;padding:0;border:1px solid #ddd;border-radius:3px}#gollum-editor-help-parent,#gollum-editor-help-list{display:block;float:left;height:170px;list-style-type:none;overflow:auto;margin:0;padding:10px 0;width:160px;border-right:1px solid #eee}#gollum-editor-help-parent li,#gollum-editor-help-list li{font-size:12px;line-height:1.6;margin:0;padding:0}#gollum-editor-help-parent li a,#gollum-editor-help-list li a{border:1px solid transparent;border-width:1px 0;display:block;font-weight:bold;padding:2px 12px;text-shadow:0 -1px 0 #fff}#gollum-editor-help-parent li a:hover,#gollum-editor-help-list li a:hover{background:#fff;border-color:#f0f0f0;text-decoration:none;box-shadow:none}#gollum-editor-help-parent li a.selected,#gollum-editor-help-list li a.selected{border:1px solid #eee;border-bottom-color:#e7e7e7;border-width:1px 0;background:#fff;color:#000;box-shadow:0 1px 2px #f0f0f0}#gollum-editor-help-list{background:#fafafa}#gollum-editor-help-wrapper{background:#fff;overflow:auto;height:170px;padding:10px}#gollum-editor-help-content{font-size:12px;margin:0 10px 0 5px;padding:0;line-height:1.8}#gollum-editor-help-content p{margin:0 0 10px;padding:0}.ie #gollum-editor .singleline input{padding-top:0.25em;padding-bottom:0.75em}#gollum-footer{font-size:12px;line-height:19px}#gollum-dialog-dialog h4{border-bottom:1px solid #ddd;color:#333;font-size:16px;line-height:normal;font-weight:bold;margin:0 0 12px;padding:0 0 6px;text-shadow:0 -1px 0 #f7f7f7}#gollum-dialog-dialog-body{font-size:12px;line-height:16px;margin:0;padding:0}#gollum-dialog-dialog-body fieldset{display:block;border:0;margin:0;overflow:hidden;padding:0 12px}#gollum-dialog-dialog-body fieldset .field{margin:0 0 18px;padding:0}#gollum-dialog-dialog-body fieldset .field:last-child{margin:0 0 12px}#gollum-dialog-dialog-body fieldset label{color:#666;display:block;font-size:14px;font-weight:bold;line-height:1.6;margin:0;padding:0;min-width:80px}#gollum-dialog-dialog-body fieldset input[type="text"]{display:block;margin:3px 0 0;width:100%}#gollum-dialog-dialog-body fieldset input.code{font-family:'Monaco', 'Courier New', Courier, monospace}#gollum-dialog-dialog-buttons{border-top:1px solid #ddd;overflow:hidden;margin:14px 0 0;padding:12px 0 0}a.gollum-minibutton,a.gollum-minibutton:visited{border:1px solid #d4d4d4;color:#333;cursor:pointer;display:inline;font-size:12px;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight:bold;float:right;width:auto;margin:0 0 0 9px;padding:4px 12px;text-shadow:0 1px 0 #fff;background-color:#eaeaea;background-image:-webkit-linear-gradient(#fafafa, #eaeaea);background-image:linear-gradient(#fafafa, #eaeaea);background-repeat:repeat-x;border-radius:3px}a.gollum-minibutton:hover,a.gollum-minibutton:visited:hover{border-color:#518cc6 #518cc6 #2a65a0;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.3);text-decoration:none;background-color:#3072b3;background-image:-webkit-linear-gradient(#599bdc, #3072b3);background-image:linear-gradient(#599bdc, #3072b3);background-repeat:repeat-x}.wiki-wrapper .ie #gollum-editor{padding-bottom:1em}.wiki-wrapper #wiki-content .enable-fullscreen{right:4px}.wiki-wrapper #wiki-content .previewable-comment-form.write-selected .write-content,.wiki-wrapper #wiki-content .previewable-comment-form.preview-selected .preview-content{padding:0}.wiki-wrapper #wiki-content .comment-body{padding:5px 0 20px}.wiki-wrapper hr{margin:25px 0 20px}.wiki-wrapper.comment-body{width:920px}.hooks-listing .boxed-group-action.select-menu{z-index:auto}.hook-item a:hover{text-decoration:none}.hook-item .item-status{float:left;margin-right:8px;width:16px;text-align:center}.hook-item .description{color:#999}.hook-item .description .css-truncate-target{max-width:160px}.hook-item .icon-for-success,.hook-item .icon-for-failure,.hook-item .icon-for-pending,.hook-item .icon-for-inactive{display:none}.hook-item.success .icon-for-success{display:inline-block;color:#6cc644}.hook-item.failure .icon-for-failure{display:inline-block;color:#bd2c00}.hook-item.pending .icon-for-pending{display:inline-block;color:#999}.hook-item.inactive .icon-for-inactive{display:inline-block;color:#999}.hook-url.css-truncate-target{max-width:360px}.hook-events-field .hook-event-selector{display:none}.hook-events-field.is-custom .hook-event-selector{display:block}.hook-event-selector{margin-left:10px}.hook-event{display:inline-block;width:310px;margin:0;padding:5px 0 5px 30px}.hook-event .note{font-size:11px;margin:0;color:#aaa}.hook-event-choice{font-weight:normal}.hook-form.is-ssl .ssl-hook-fields{display:block}.hook-form .ssl-hook-fields{display:none}.hook-form .ssl-hook-fields #disable-ssl-verification-modal,.hook-form .ssl-hook-fields .enable-ssl-verification{display:none}.hook-form .ssl-hook-fields.is-not-verifying-ssl .enable-ssl-verification{display:block}.hook-form .ssl-hook-fields.is-not-verifying-ssl .disable-ssl-verification{display:none}.hook-form .disable-ssl-verification .actions{margin-top:-4px}.hook-form .invalid-url-notice{display:none;padding:7px 4px}.hook-form .invalid-url-notice .octicon-alert{position:relative;top:1px}.hook-form.is-invalid-url .invalid-url-notice{display:block}.hooks-oap-warning{margin-top:0}.hooks-oap-warning ul{margin:10px 0}.hooks-oap-warning ul li{margin-left:16px}.hook-secret .hook-secret-standin{display:block}.hook-secret .hook-secret-field{display:none}.hook-secret.open .hook-secret-standin{display:none}.hook-secret.open .hook-secret-field{display:block}.hook-deliveries-list .loading-message{display:block}.hook-deliveries-list .error-message{display:none}.hook-deliveries-list.is-error .loading-message{display:none}.hook-deliveries-list.is-error .error-message{display:block}.hook-deliveries-list .spinner{display:inline-block;vertical-align:top;margin:0}.hook-deliveries-list .hook-delivery-item:hover{background-color:transparent}.hook-deliveries-list .item-status{display:inline-block;margin-right:5px;width:16px;text-align:center}.hook-deliveries-list .item-status .icon-for-success,.hook-deliveries-list .item-status .icon-for-failure,.hook-deliveries-list .item-status .icon-for-pending{display:none}.hook-deliveries-list .item-status.success{visibility:visible;color:#6cc644}.hook-deliveries-list .item-status.success .icon-for-success{display:inline-block}.hook-deliveries-list .item-status.failure{color:#bd2c00}.hook-deliveries-list .item-status.failure .icon-for-failure{display:inline-block}.hook-deliveries-list .item-status.pending{color:#999}.hook-deliveries-list .item-status.pending .icon-for-pending{display:inline-block}.hook-deliveries-pagination-loading-message{display:none}.hook-deliveries-pagination-loading-message .animated-ellipsis-container{text-align:left}.hook-deliveries-pagination.loading .hook-deliveries-pagination-button{display:none}.hook-deliveries-pagination.loading .hook-deliveries-pagination-loading-message{display:block}.boxed-group-list li.hook-delivery-item{padding:10px}.hook-delivery-item .hook-delivery-details{display:none}.hook-delivery-item .hook-delivery-details .loading-message,.hook-delivery-item .hook-delivery-details .error-message{display:none}.hook-delivery-item .hook-delivery-details.is-loading .loading-message{display:block}.hook-delivery-item .hook-delivery-details.has-error .error-message{display:block}.hook-delivery-item.open .hook-delivery-details{display:block}.hook-delivery-item .loading-message{text-align:center}.hook-delivery-time{float:right;margin-right:10px;color:#999;font-size:10px}.hook-delivery-summary{text-decoration:none}.hook-delivery-guid{display:inline-block;padding:2px 6px;color:rgba(0,0,0,0.5);font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;background-color:rgba(209,227,237,0.5);border-radius:3px}.hook-delivery-guid .octicon{margin:1px -2px 0 0;color:#b0c4ce}.hook-delivery-actions{padding-top:1px}.boxed-group-list>li.hook-delivery-item .minibutton{margin:0}.boxed-group-list>li.hook-delivery-item .hook-delivery-details .redeliver.minibutton{margin:5px 0 0}.hook-deliveries-list .error-message,.hook-delivery-details .error-message{margin:10px 0;padding:7px 4px}.hook-deliveries-list .error-message .octicon,.hook-delivery-details .error-message .octicon{position:relative;top:1px}.boxed-group span.animated-ellipsis-container,.boxed-group span.animated-ellipsis{padding:0}.boxed-group .animated-ellipsis-container{line-height:1.3}.hook-delivery-details{clear:right}.hook-delivery-details .tabnav-widget.text{margin-top:7px}.hook-delivery-details .error-message{margin-bottom:0}.hook-delivery-details .tabnav-tabcontent{display:none}.hook-delivery-details .tabnav-tabcontent.selected{display:block}.hook-delivery-details hr{margin:10px 0}.hook-delivery-details pre{padding:7px 12px;margin:10px 0;background-color:#f8f8f8;border:1px solid #ddd;border-radius:3px;font-size:13px;line-height:1.5;overflow:auto}.hook-delivery-details .tabnav{margin:10px 0}.hook-delivery-details .redeliver-hook-delivery-button{margin-top:5px}.hook-delivery-details h4.remote-call-header{border-bottom:1px solid #999;margin:20px 0 10px}.hook-delivery-response-status{display:inline-block;padding:4px 6px 3px;color:#fff;background-color:#bd2c00;border-radius:3px;font-size:10px;line-height:1.1;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace}.hook-delivery-response-status[data-response-status^="2"]{background-color:#6cc644}.redelivery-dialog .pending-message{display:block}.redelivery-dialog .failure-message{display:none}.redelivery-dialog.failed{color:#9c2400;background-color:#efd0d0;background-image:-webkit-linear-gradient(#f8d8d8, #efd0d0);background-image:linear-gradient(#f8d8d8, #efd0d0);background-repeat:repeat-x;border-color:#da9797}.redelivery-dialog.failed .pending-message{display:none}.redelivery-dialog.failed .failure-message{display:block}.redelivering-hook-delivery .error-message{display:none}.redelivering-hook-delivery.is-error .loading-message{display:none}.redelivering-hook-delivery.is-error .error-message{display:block}.test-hook-button .pending-message{display:none}.test-hook-button.disabled .default-message{display:none}.test-hook-button.disabled .pending-message{display:inline}.test-hook-message .success-message,.test-hook-message .error-message{display:none;margin-top:10px}.test-hook-message.success .success-message{display:block}.test-hook-message.error .error-message{display:block}.issues-reset-query-wrapper{margin-bottom:20px}.issues-reset-query{font-weight:bold;color:#777}.issues-reset-query .octicon-x{width:20px;height:20px;margin-right:3px;line-height:20px;color:#fff;text-align:center;background-color:#777;border-radius:3px}.issues-reset-query:hover{color:#4183c4;text-decoration:none}.issues-reset-query:hover .octicon-x{background-color:#4183c4}.table-list-milestones .table-list-cell{padding:15px 20px}.table-list-milestones .stat{display:inline-block;font-size:14px;font-weight:bold;line-height:1.2;color:#555;white-space:nowrap}.table-list-milestones .stat+.stat{margin-left:15px}.table-list-milestones .stat-label{font-weight:normal;color:#999}.milestone-title{width:500px}.milestone-title-link{margin-top:0;margin-bottom:5px;font-size:24px;font-weight:normal;line-height:1.2}.milestone-title-link a{color:#333}.milestone-title-link a:hover{color:#4183c4}.milestone-progress{width:420px}.milestone-progress .progress-bar{margin-top:7px;margin-bottom:12px}.milestone-meta{font-size:14px}.milestone-meta-item{display:inline-block;margin-right:10px}.milestone-meta-item .octicon{width:16px;text-align:center}.milestone-description-html{display:none}.milestone-description{margin-top:5px}.milestone-description .expand-more{color:#4183c4;cursor:pointer}.milestone-description .expand-more:hover{text-decoration:underline}.milestone-description.open .milestone-description-plaintext{display:none}.milestone-description.open .milestone-description-html{display:block}.milestone-actions{margin-top:8px;font-size:13px}.milestone-action{display:inline-block;margin-right:10px}.task-progress{color:#999;text-decoration:none}.task-progress .octicon{margin-right:5px;color:#ccc;vertical-align:middle}.task-progress .progress-bar{display:inline-block;width:120px;height:5px;vertical-align:2px;background-color:#eee}.task-progress .progress-bar .progress{background-color:#ccc}.task-progress-counts{display:inline-block;margin-right:6px;margin-left:-2px;font-size:12px}a.task-progress:hover{color:#4183c4}a.task-progress:hover .octicon{color:inherit}a.task-progress:hover .progress-bar .progress{background-color:#4183c4}.issues-listing{position:relative}.issues-listing .octocat-search{position:absolute;right:0;height:250px;margin:-132px -4px;-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.issues-listing .table-list-issues .selectable:hover,.issues-listing .table-list-issues .navigation-focus{background-color:#f9f9f9}.issues-listing .table-list-issues .issue-title{width:740px;padding-top:12px}.issues-listing .table-list-issues .labels{display:inline-block;margin-bottom:2px;vertical-align:1px}.issues-listing .table-list-issues .table-list-cell-avatar{padding-top:13px}.issues-listing .table-list-issues .table-list-cell-avatar a{display:inline-block}.issues-listing .table-list-issues .table-list-cell-avatar img{border-radius:2px}.issue-title-link{display:inline-block;padding-right:3px;margin-bottom:2px;font-size:15px;font-weight:bold;line-height:1.2;color:#333;word-break:break-word}.issue-title-link:hover{color:#4183c4;text-decoration:none}.issue-title-link:hover .num{color:inherit}.issue-nwo-link{color:#777}.issue-pr-status{display:inline-block;margin-right:3px;vertical-align:-1px}.issue-meta{margin-top:1px;margin-bottom:2px;font-weight:normal;color:#999}.issue-meta-section{margin-right:10px}.issue-milestone{max-width:240px}.issue-comments{width:60px;padding-top:13px;font-weight:bold;text-align:right;white-space:nowrap}.issue-comments .octicon{margin-right:1px}.issue-comments-no-comment{color:#eee}.milestone-link{color:#999}.milestone-link .octicon{font-size:14px;color:#ccc}.milestone-link:hover{color:#4183c4;text-decoration:none}.milestone-link:hover .octicon{color:inherit}.signoff-link{display:inline-block;float:right;padding:2px 4px;margin-top:1px;font-size:11px;line-height:1;color:#cea61b;border:solid 1px #cea61b;border-radius:2px}.signoff-link:hover{text-decoration:none}.signoff-link-approved{color:#6cc644;border-color:#6cc644}.new-issue-form{padding-top:20px;margin-top:20px;border-top:1px solid #ddd}.new-issue-form .discussion-timeline:before{display:none}.label-select-menu .color{display:inline-block;width:14px;height:14px;margin-right:2px;margin-bottom:2px;vertical-align:middle;border-radius:3px}.label-select-menu .selected .select-menu-item-icon{color:inherit !important}.label-select-menu .selected:active{background-color:transparent !important}.label-select-menu .select-menu-item.navigation-focus{color:inherit;background-color:#f4f4f4}.label-select-menu .select-menu-item.navigation-focus .select-menu-item-icon{color:transparent}.label-select-menu .select-menu-item .octicon-x{display:none;float:right;margin:1px 10px 0 0;opacity:0.6}.label-select-menu .select-menu-item.selected .octicon-x{display:block;color:inherit}.label-select-menu>form{position:relative}.closed-banner{height:7px;margin:15px 0 15px 60px;overflow:hidden;background:url(/images/modules/comments/closed_pattern.gif);border-radius:3px}.merge-branch-heading{margin:0}.merge-branch-description{margin-top:0;margin-right:160px;margin-bottom:0;color:#777}.merge-branch-description .zeroclipboard-link .octicon{top:2px}.merge-branch-action,.desktop-app-action{float:right;margin-left:5px}.desktop-app-action{padding-left:10px;padding-right:10px}.merged .merge-branch-description .commit-ref .css-truncate-target{max-width:180px}.merge-branch-form{padding-left:64px;display:none}.merge-branch.open .merge-branch-form{display:block}.merge-branch.open .merge-message{display:none}.merge-branch-manually{display:none;margin-top:14px;padding-top:15px;border-top:1px solid #ddd}.merge-branch-manually h3,.merge-branch-manually p{margin:0}.merge-branch-manually .intro{margin-top:0;padding-bottom:10px}.merge-branch-manually .step{margin:15px 0 5px}.merge-branch-manually .url-box{margin-left:0;padding:0;border:0}.merge-branch-manually .clone-urls{width:100%}.open>.merge-branch-manually{display:block;max-width:585px}.milestone-calender-container{margin-left:30px}.edit-milestone .form-actions .button{margin-left:5px}.edit-milestone .form-actions .cancel{float:left}#network .network-tree{vertical-align:middle}#network .gravatar{margin-right:4px;border-radius:3px;vertical-align:middle}#network .octicon{margin-left:2px;vertical-align:middle;width:16px;display:inline-block;text-align:center}#network .current-repository{background-color:#fff6a9}#network .network-graph-container{position:relative;margin-bottom:20px;border:1px solid #ddd;border-radius:3px;overflow:hidden}#network .network-graph-container .large-loading-area{position:absolute;top:0;right:0;left:0}.page-new-repo .octicon-repo{color:#bbb}.page-new-repo .octicon-lock{color:#e9dba5}.page-new-repo ul.repo-templates{margin:10px 0}.page-new-repo ul.repo-templates>li{list-style-type:none;display:inline-block;margin:0 10px 0 0}.page-new-repo ul.repo-templates .select-menu{float:left}.page-new-repo .team-select{display:none}.page-new-repo .form-checkbox .mega-octicon{font-size:24px;float:left;margin-right:5px}.page-new-repo .license-info{float:left;margin-top:5px;margin-left:10px;color:#ccc}.new-repo-container{width:700px;margin:0 auto;padding-top:20px}.new-repo-container h2{font-size:22px;font-weight:normal;color:#666;border-bottom:1px solid #ddd;padding-bottom:5px;margin-bottom:0.5em}.owner-reponame{position:relative}.owner-reponame dl.form{margin-top:5px;margin-bottom:0}.owner-reponame .slash{float:left;font-size:21px;color:#666;padding-top:32px;margin:0 8px}.owner-reponame .icon-preview{display:none;font-size:32px;position:absolute;text-align:right;width:100px;top:23px;left:-115px}.owner-reponame .icon-preview.icon-preview-public{top:25px}.reponame-suggestion{color:#34631a;cursor:pointer}.upgrade-upsell{padding-left:33px}.cc-upgrade{padding-left:20px}.featured-license{font-weight:bold}.license-container{border-left:1px solid #ccc;padding-left:15px}.notification-routing .notification-email .edit-link{margin-right:10px;font-weight:bold}.notification-routing .notification-email .minibutton{float:none;margin:-2px 0 0}.notification-routing .notification-email .edit-form{display:none}.notification-routing .notification-email.open .edit-form{display:block}.notification-routing .notification-email.open .email-display{display:none}.notifications .list-group-item{padding-top:8px;padding-bottom:8px;padding-left:35px;border-width:1px 0 0}.notifications .list-group-item:first-child{border:0}.notifications .list-group-item-name{display:block;max-width:400px;font-size:14px;line-height:1.5em}.notifications .list-group-item-name a{display:block;max-width:460px}.notifications .notifications-more{padding:0}.notifications .notifications-more>a{display:block;padding:10px 15px;font-weight:bold;color:#4183c4;text-align:center}.notifications .notifications-more>a:hover{text-decoration:underline}.notifications .read .type-icon{color:#999}.notifications .read .list-group-item-name>a{color:#777}.notifications .read .notification-actions{color:#999}.notifications .read .avatar-stack{opacity:0.5}.notifications .read .undo{display:block}.notifications .read .delete{visibility:hidden}.notifications .read.navigation-focus{background-color:#f5f9fc}.type-icon-state-none{color:#777}.type-icon-state-open{color:#6cc644}.type-icon-state-closed{color:#bd2c00}.type-icon-state-merged{color:#6e5494}.notifications-list{float:left;width:100%}.notifications-list .notifications-repo-link{max-width:500px}.notifications-list .boxed-group .text-success{position:absolute;color:#6cc644;right:3px;width:210px;margin-top:4px;text-align:right;opacity:0;visibility:hidden;-webkit-transition:opacity 0.35s ease-in-out, -webkit-transform 0.35s ease-in-out;transition:opacity 0.35s ease-in-out, transform 0.35s ease-in-out;-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}.notifications-list .mark-all-as-read{margin-right:0;margin-top:0;padding:2px 6px 5px 10px;line-height:20px;color:#777}.notifications-list .mark-all-as-read-confirmed .text-success{visibility:visible;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);opacity:1}.notifications-list .mark-all-as-read-confirmed .mark-all-as-read{visibility:hidden}.notifications-list .confirmation{color:#666;text-align:center;padding:0;-webkit-transition:all 0.4s ease-in-out;transition:all 0.4s ease-in-out;max-height:0;opacity:0;overflow:hidden}.notifications-list .confirmation+.list-group-item{margin-top:-1px;border-top-color:#d5d5d5}.notifications-list .confirmation.mark-all-as-read-confirmed{padding:10px 0;max-height:300px;opacity:1}.notification-actions{position:absolute;right:10px;top:8px;list-style:none}.notification-actions li{float:right;margin-left:10px;font-size:16px;line-height:20px}.notification-actions .age{width:120px;font-size:12px;color:#999}.notification-actions .undo{display:none;position:absolute;top:0}.notification-actions .button-link{padding-left:5px;padding-right:5px;color:#999;line-height:inherit}.notification-actions .button-link:hover{color:#4183c4;text-decoration:none}.repo-subscription-container{margin:0 auto;width:600px}.repo-subscription-container .spinner{float:right}.repo-subscription-container h2{font-size:22px;margin-bottom:-10px;font-weight:normal}.repo-subscription-container .intro{font-size:14px;color:#666}.repo-subscription-label{display:inline-block}.subscriptions-content .repo-icon{vertical-align:middle;color:#666;margin-right:5px}.subscriptions-content .repo-list form{display:inline}.subscriptions-content .repo-list .only-loading{display:none}.subscriptions-content .repo-list .loading .only-loading{display:inline-block}.subscriptions-content .repo-list .only-unsubed{display:none}.subscriptions-content .repo-list .unsubscribed .only-unsubed{display:inline}.subscriptions-content .repo-list .unsubscribed .only-subed{display:none}.subscriptions-content .repo-list .only-unignored{display:none}.subscriptions-content .repo-list .unsubscribed .only-unignored{display:inline}.subscriptions-content .repo-list .unsubscribed .only-ignored{display:none}.thread-subscription-status{margin:40px 0 20px;padding:10px;color:#777;background-color:#fff;border:1px solid #eee;border-radius:3px}.thread-subscription-status .mega-octicon{vertical-align:middle;margin-right:10px;margin-left:4px;color:#ccc}.thread-subscription-status .minibutton>.octicon{margin-right:1px}.thread-subscription-status .reason{display:inline-block;margin:0 10px;vertical-align:middle}.thread-subscription-status .thread-subscribe-form{display:inline-block;vertical-align:middle}.subscription .loading{opacity:0.5}.oauth-connection-illustration{position:relative;float:right;width:200px;margin-top:10px;margin-right:10px;margin-left:40px}.oauth-connection-illustration .oauth-image{float:left;padding:5px;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);border-radius:6px}.oauth-connection-illustration .oauth-image img{display:block;width:75px;height:75px;border-radius:3px}.oauth-connection-illustration .oauth-image.oauth-image-user{margin-top:20px;margin-left:-20px}.setup-wrapper .oauth-permissions{margin-bottom:25px;border:1px solid #ddd;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.setup-wrapper .oauth-permissions-details{background-color:#fff}.setup-wrapper.oauth-restriction-wrapper{padding-top:0}.ellipsis-button{display:inline-block;height:12px;padding:0 5px;margin-left:2px;font-size:12px;font-weight:bold;line-height:6px;color:#555;text-decoration:none;vertical-align:middle;background-color:#ddd;border-radius:1px}.ellipsis-button:hover{text-decoration:none;background-color:#ccc}.ellipsis-button:before{content:"\2026"}.oauth-permissions-details{position:relative;padding:15px;margin:0;list-style:none;border-bottom:1px solid #f2f2f2}.oauth-permissions-details:first-child{border-radius:3px 3px 0 0}.oauth-permissions-details:last-child{border:0;border-radius:0 0 3px 3px}.oauth-permissions-details.oauth-public-data-only{border-radius:3px}.oauth-permissions-details .markdown-body{font-size:13px}.oauth-permissions-details .content{display:none;margin-left:45px}.oauth-permissions-details .content .form-checkbox{margin-left:0}.oauth-permissions-details .content .form-checkbox:last-child{margin-bottom:0}.oauth-permissions-details .mega-octicon{float:left;width:32px;margin-top:1px;margin-left:0;color:#777;text-align:center}.oauth-permissions-details .permission-help{font-size:13px}.oauth-permissions-details .permission-help ul{padding-left:20px;margin:1em 0}.oauth-permissions-details .permission-summary{margin-left:45px}.oauth-permissions-details .permission-summary .access-details{position:relative;color:#777}.oauth-permissions-details .permission-summary em.highlight{position:relative;padding:2px 3px;margin-right:-2px;margin-left:-3px;font-style:normal;color:#4c4a42;background:#fff9ea;border-radius:3px}.oauth-permissions-details .permission-title{display:block;color:#000}.oauth-permissions-details a.minibutton{float:right;margin-top:4px}.oauth-permissions-details.open a.minibutton{background-color:#dcdcdc;background-image:none;border-color:#b5b5b5;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.oauth-permissions-details.open .content{display:block}.oauth-permissions-details.default:not(.delete) .no-access,.oauth-permissions-details.default:not(.delete) .default-access,.oauth-permissions-details.none .no-access,.oauth-permissions-details.none .default-access{display:inline}.oauth-permissions-details.default:not(.delete) .access-details,.oauth-permissions-details.default:not(.delete) .permission-title,.oauth-permissions-details.none .access-details,.oauth-permissions-details.none .permission-title{color:#999}.oauth-permissions-details.default:not(.delete) .mega-octicon,.oauth-permissions-details.none .mega-octicon{color:#ccc}.oauth-permissions-details.default .default-access{display:inline}.oauth-permissions-details.full .full-access{display:inline}.oauth-details-toggle{position:absolute;top:0;right:0;padding:20px 10px}.oauth-details-toggle .mega-octicon{font-size:22px}.oauth-details-toggle .octicon-chevron-up{display:none}.open .oauth-details-toggle .octicon-chevron-down{display:none}.open .oauth-details-toggle .octicon-chevron-up{display:block}.oauth-user-permissions .full-access,.oauth-user-permissions .limited-access,.oauth-user-permissions .limited-access-none,.oauth-user-permissions .limited-access-followers,.oauth-user-permissions .limited-access-emails,.oauth-user-permissions .no-access{display:none}.oauth-user-permissions.limited .limited-access-none{display:inline}.oauth-user-permissions.limited.limited-email .limited-access,.oauth-user-permissions.limited.limited-email .limited-access-none{display:none}.oauth-user-permissions.limited.limited-email .limited-access-emails{display:inline}.oauth-user-permissions.limited.limited-email.limited-follow .limited-access{display:inline}.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-none,.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-followers{display:none}.oauth-user-permissions.limited.limited-follow .limited-access,.oauth-user-permissions.limited.limited-follow .limited-access-none{display:none}.oauth-user-permissions.limited.limited-follow .limited-access-followers{display:inline}.oauth-repo-permissions .default-access,.oauth-repo-permissions .public-access,.oauth-repo-permissions .full-access{display:none}.oauth-repo-permissions.public .public-access{display:inline}.oauth-delete-repo-permissions .octicon-alert{color:#bd2c00}.oauth-repo-status-permissions .no-access,.oauth-repo-status-permissions .full-access,.oauth-repo-deployment-permissions .no-access,.oauth-repo-deployment-permissions .full-access{display:none}.oauth-notifications-permissions .no-access,.oauth-notifications-permissions .read-access,.oauth-notifications-permissions .via-public-access,.oauth-notifications-permissions .via-full-access{display:none}.oauth-notifications-permissions.read .read-access{display:inline}.oauth-notifications-permissions.via-public .via-public-access{display:inline}.oauth-notifications-permissions.via-public .octicon{display:none}.oauth-notifications-permissions.via-full .via-full-access{display:inline}.oauth-gist-permissions .no-access,.oauth-gist-permissions .full-access{display:none}.oauth-granular-permissions .no-access,.oauth-granular-permissions .read-access,.oauth-granular-permissions .write-access,.oauth-granular-permissions .full-access{display:none}.oauth-granular-permissions.none .no-access{display:inline}.oauth-granular-permissions.read .read-access{display:inline}.oauth-granular-permissions.write .write-access{display:inline}.oauth-granular-permissions.full .full-access{display:inline}.oauth-secondary .setup-info-module{margin-top:0}.oauth-secondary .setup-info-module .no-description{color:#999}.oauth-secondary .setup-info-module .features-list{padding-bottom:0}.oauth-no-description{color:#999}.oauth-org-access-details a:hover{text-decoration:none}.oauth-org-access-details .boxed-group-list>li{line-height:24px}.oauth-org-access-details .boxed-group-list>li .loading-indicator{display:none;margin:4px}.oauth-org-access-details .boxed-group-list>li.on{background:#fff}.oauth-org-access-details .boxed-group-list>li.on:hover{background:#ffe}.oauth-org-access-details .boxed-group-list>li.on .authorized-tools{display:block}.oauth-org-access-details .boxed-group-list>li.on .unauthorized-tools{display:none}.oauth-org-access-details .boxed-group-list>li.on strong{color:#333}.oauth-org-access-details .boxed-group-list>li.on .octicon-check{display:inline}.oauth-org-access-details .boxed-group-list>li.on .octicon-x{display:none}.oauth-org-access-details .boxed-group-list>li.loading .unauthorized-tools,.oauth-org-access-details .boxed-group-list>li.loading .authorized-tools{display:none}.oauth-org-access-details .boxed-group-list>li.loading .loading-indicator{display:block}.oauth-org-access-details .boxed-group-list>li .authorized-tools{display:none}.oauth-org-access-details .boxed-group-list>li .unauthorized-tools{display:block}.oauth-org-access-details .boxed-group-list>li .button-outline,.oauth-org-access-details .boxed-group-list>li .minibutton{padding:0 10px;margin-left:15px;line-height:24px}.oauth-org-access-details .octicon{color:#979797}.oauth-org-access-details .octicon-check{display:none;color:#6cc644}.oauth-org-access-details .octicon-x{display:inline}.oauth-org-access-details .octicon-x.org-access-denied{color:#bd2c00}.deleted-permission{color:#bd2c00}.added-permission{color:#6cc644}.permission-title{margin-top:0}.oauth-application-whitelist .request-info{display:block;margin-left:25px;color:#9b9b9b}.oauth-application-whitelist .request-info strong{color:#333}.oauth-application-whitelist .request-info .application-description{display:none}.oauth-application-whitelist .request-info.open .application-description{display:block}.oauth-application-whitelist .avatar{margin-top:0}.oauth-application-whitelist .requestor{font-weight:bold}.oauth-application-whitelist .octicon-alert{color:#f93}.oauth-application-whitelist .octicon-check,.oauth-application-whitelist .approved-request{color:#6cc644}.oauth-application-whitelist .denied-request{color:#bd2c00}.oauth-application-whitelist .request-indicator{margin-left:10px}.oauth-application-whitelist .edit-link{color:#999}.oauth-application-whitelist .edit-link:hover{color:#4183c4}.oauth-application-whitelist .boxed-group-list{margin-top:1em;margin-bottom:-1em}.oauth-application-whitelist .boxed-group-list li{padding:10px}.oauth-application-info{min-height:70px;padding-top:10px;margin-bottom:10px}.oauth-application-info .application-title,.oauth-application-info .application-description,.oauth-application-info .application-meta-info{margin-left:70px}.oauth-application-info .application-title{font-size:14px;font-weight:bold;color:#333}.oauth-application-info .application-description{margin-top:3px;margin-bottom:3px;color:#777}.oauth-application-info .octicon{color:#999}.oauth-application-info .app-info{display:inline-block;margin-right:10px;color:#666}.oauth-application-info .application-meta-info{font-size:12px}.oauth-application-info .application-meta-info strong,.oauth-application-info .application-meta-info .requestor{color:#666}.oauth-application-info .app-denied,.oauth-application-info .app-approved{margin-left:10px;font-weight:normal;white-space:nowrap}.oauth-application-info .app-approved,.oauth-application-info .octicon-check{color:#6cc644}.oauth-application-info .app-denied,.oauth-application-info .octicon-x{color:#f93}.restrict-oauth-access-button{margin-right:20px}.restrict-oauth-access-info{margin-bottom:40px;font-size:15px}.restrict-oauth-access-list{padding-left:25px}.restrict-oauth-access-list li{margin-bottom:10px}.restrict-oauth-access-list li:last-child{margin-bottom:0}.app-transfer-actions form{display:inline}.application-authorizations:target li{background-color:#ffe}.oauth-access-application-details .features-list-oauth{margin-top:1em;margin-bottom:-1em}.org-header{margin-bottom:20px;color:#666;border-bottom:1px solid #eee;background-color:#fcfcfc}.org-header .edit-org{position:relative;top:-6px;display:inline-block;padding:3px 5px;font-size:14px;color:#aaa;border:1px solid #e5e5e5;border-radius:3px}.org-header .edit-org:hover{color:#4183c4;background-color:#fff}.org-header .edit-org .octicon{font-size:14px}.org-header-wrapper{display:table;width:680px;padding-top:20px;padding-bottom:20px}.org-header-wrapper .avatar{display:table-cell;width:100px;height:100px}.org-header-info{display:table-cell;vertical-align:middle;width:560px}.org-name{margin-top:0;margin-bottom:5px;color:#333;font-size:36px;font-weight:normal}.org-description{margin-top:0;margin-bottom:8px;font-size:16px;line-height:1.25}.org-header-meta{font-size:12px;line-height:1.5;list-style:none}.org-header-meta .meta-item{display:inline-block;padding-right:18px;overflow:hidden;max-width:100%;text-overflow:ellipsis;white-space:nowrap}.org-header-meta .meta-item .meta-link{color:#666}.org-header-meta .octicon{position:relative;top:1px;margin-right:2px;color:#ccc}.org-header-meta.has-email.has-blog .meta-item,.org-header-meta.has-email.has-location .meta-item,.org-header-meta.has-blog.has-email .org-header-meta.has-blog.has-location .meta-item,.org-header-meta.has-location.has-blog .meta-item,.org-header-meta.has-location.has-email .meta-item{max-width:278px}.org-header-meta.has-email.has-blog.has-location .meta-item{max-width:186px}.org-link{color:#333}.org-link:hover{color:#4183c4;text-decoration:none}.org-main{float:left;width:640px}.org-sidebar{position:relative;z-index:1;float:right;width:280px;margin-top:-112px}.org-sidebar .member-badge{display:block;padding-top:0;padding-bottom:0;border-top:0}.simple-box{padding:15px;margin-bottom:20px;border:1px solid #ddd;background-color:#fff;border-radius:3px}.simple-box-title{margin:-15px -15px 0;font-size:18px;padding:15px;border-bottom:1px solid #eee}.simple-box-footer{margin:10px -15px -15px;padding:15px;border-top:1px solid #eee;background-color:#fcfcfc;border-radius:0 0 3px 3px}.orgs-help-shelf{margin-top:-20px;margin-bottom:20px;padding-top:20px;padding-bottom:20px;border-bottom:1px solid #eee;background-color:#fefefe}.orgs-help-shelf .orgs-help-title{font-size:30px;font-weight:normal}.orgs-help-shelf-content{width:800px;margin:50px auto;text-align:center}.orgs-help-shelf-content .orgs-help-lead,.orgs-help-shelf-content .orgs-help-description{font-size:18px}.orgs-help-shelf-content .orgs-help-lead{padding-left:45px;padding-right:45px}.orgs-help-shelf-content .orgs-help-divider{width:150px;margin:40px auto;display:block;border-top:1px solid #ddd;content:""}.orgs-help-lead{margin-bottom:30px}.orgs-help-items{margin-bottom:40px}.orgs-help-item-octicon{width:70px;height:70px;margin:0 auto 15px;text-align:center;border:solid 1px #e5e5e5;border-radius:50px;background-color:#fff}.orgs-help-item-octicon .mega-octicon{color:#4183c4;font-size:26px;line-height:68px}.orgs-help-item-title{margin-bottom:10px;font-weight:normal}.orgs-help-item-content{margin-top:0;color:#666;font-size:14px}.orgs-help-dismiss{margin-top:5px;margin-right:10px;float:right;font-size:12px;color:#999}.orgs-help-dismiss:hover{color:#4183c4;text-decoration:none}.orgs-help-dismiss .octicon{position:relative;top:1px}#revoke_all_repo_access,#revoke_active_repo_access{display:none}.orgs-help-title{margin-top:0;margin-bottom:0}.orgs-help-description{font-size:14px}.orgs-help-lead,.orgs-help-description{margin-top:10px;color:#666}.orgs-help-button{margin-right:10px}.org-module-title{margin:-15px -15px 0;font-size:18px;border-bottom:1px solid #eee}.org-module-link{display:block;padding:15px;color:#333}.org-module-link:hover,.org-module-link:hover .org-stats{text-decoration:none;color:#4183c4}.org-stats{margin-top:3px;float:right;font-size:14px;color:#999}.org-members-title{margin-bottom:0;border-bottom:0}.member-avatar-group{margin:-1px}.member-avatar-group:before{display:table;content:""}.member-avatar-group:after{display:table;clear:both;content:""}.member-avatar{float:left;margin:1px}.member-row{display:block;padding-bottom:15px;margin-bottom:15px;margin-top:15px;font-size:14px;color:#333;border-bottom:1px solid #eee}.member-row:before{display:table;content:""}.member-row:after{display:table;clear:both;content:""}.member-row:hover{color:#4183c4;text-decoration:none}.member-row:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}.member-row .avatar{float:left;margin-right:10px}.member-row .member-name{display:block}.member-fullname{color:#777}.org-no-members{text-align:center;color:#777;margin-top:20px;margin-bottom:10px}.org .no-results{padding:10px;color:#999}.org-teams-nav{margin-top:15px}.org-teams-nav .autocomplete-results li{display:block}.org-teams-list{list-style:none;margin-bottom:-10px}.org-teams-list .team{display:block;overflow:hidden;padding-top:15px;padding-bottom:15px;color:#333;border-top:1px solid #eee}.org-teams-list .team:hover{text-decoration:none}.org-teams-list .team:hover .team-name{color:#4183c4}.org-teams-list .org-teams-list-item:first-child .team{border-top:0}.org-teams-list .team-name{display:block;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.org-teams-list .team-meta{margin-top:0;margin-bottom:0;color:#777}.org-toolbar.disabled{pointer-events:none}.org-toolbar .subnav-search{width:320px;margin-left:0}.org-toolbar .non-admin-search .subnav-divider-right{padding-right:0;border-width:0}.org-toolbar .subnav-search-context+.subnav-search{margin-left:-1px}.org-toolbar input.subnav-search-input{width:100%}.member-list-select-all-label{font-weight:normal}.member-list-select-all-label .some-selected{display:none}.member-list-select-all-label.has-selected-members .some-selected{display:inline}.member-list-select-all-label.has-selected-members .none-selected{display:none}.pending-invitations-link{padding-left:15px;padding-right:15px}.member-toolbar-actions{margin-top:9px;margin-right:9px}.member-action{margin-right:5px}.member-role-select{display:inline}.member-role-select .select-menu-modal{left:-190px;width:310px}.member-role-menu .select-menu-item-text{padding-right:8px}.legacy-contributor-note{padding:10px;color:#999;font-size:11px;background-color:#f8f8f8;border-bottom:1px solid #eee}.legacy-contributor-note-content{margin-top:0;margin-bottom:0}.auto-search-group{position:relative}.auto-search-group .auto-search-input{padding-left:30px}.auto-search-group .spinner,.auto-search-group>.octicon{position:absolute;left:10px;width:16px;height:16px;z-index:5}.auto-search-group .spinner{top:9px;background-color:#fff}.auto-search-group>.octicon{top:10px;font-size:14px;color:#bbb;text-align:center}.org-list .list-item{position:relative;padding-top:15px;padding-bottom:15px;border-bottom:1px solid #eee}.org-list .list-item:before{display:table;content:""}.org-list .list-item:after{display:table;clear:both;content:""}.org-list .cancel-link{color:#777}.org-repos .blankslate{margin-top:15px}.org-repos-mini{padding:0;margin:0}.org-repos-mini .org-repo-mini-item:first-child .org-repo-mini-cell{border-top:0}.org-repos-mini .org-repo-name{margin-top:0;margin-bottom:0;font-size:14px;word-wrap:break-word}.org-repos-mini .org-repo-name .octicon-repo{color:#999}.org-repos-mini .org-repo-name .octicon-lock{color:#e9dba5}.org-repos-mini .org-repo-name .repo-prefix{font-weight:normal;text-transform:lowercase}.org-repos-mini .org-repo-name .repo-slash{display:inline-block;margin-left:-4px;margin-right:-4px}.org-repos-mini .org-repo-forked{max-width:270px;margin-top:0;margin-bottom:0;display:inline-block;font-weight:normal;font-size:12px}.org-repo-mini-cell{padding-top:15px;padding-bottom:15px;vertical-align:middle}.org-repo-meta{width:165px}.org-repo-meta .access-level{cursor:default}.org-repo-meta .button-group{float:right}.org-repo-meta.not-team-admin{text-align:right}.org-repo-access-level{text-align:center}.org-repo-manage{width:270px}.org-repo-higher-access{margin-left:16px;margin-top:2px;font-size:11px}.org-higher-access-member .manage-access{font-size:12px;position:relative;top:2px}.permission-level-cell .select-menu-button{width:100px}.permission-level-cell .select-menu-button:after{position:absolute;top:10px;right:10px}.permission-level-cell .spinner,.permission-level-cell .permission-success-icon{position:absolute;margin-left:15px;display:inline-block;opacity:0;-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.permission-level-cell .permission-success-icon{margin-top:4px;color:#6cc644}.permission-level-cell .is-updating .spinner,.permission-level-cell .was-successful .permission-success-icon{opacity:1}.permission-level-cell .select-menu-modal .description{padding-right:20px}.permission-level-cell .select-menu-option-title{margin-top:0;margin-bottom:0}.permission-level-cell .navigation-focus .select-menu-option-title{color:#fff}.add-member-wrapper{position:relative;width:680px;margin:40px auto}.add-member-wrapper .owners-team-info{position:relative;padding-top:10px;padding-left:42px;color:#777;border-top:1px solid #e5e5e5}.add-member-wrapper .owners-team-info .octicon-info{position:absolute;left:8px;color:#999;font-size:18px}.add-member-wrapper .available-seats{color:#999}.add-member-wrapper .buy-more-link{margin-right:5px}.add-member-wrapper .send-invitation-button{float:none}.invitation-role-group{padding-top:25px;padding-bottom:30px}.invitation-role-group:before{display:table;content:""}.invitation-role-group:after{display:table;clear:both;content:""}.invitation-role{position:relative;padding:15px 10px;display:block;font-weight:normal;text-align:center;cursor:pointer}.invitation-role:first-child{margin-left:0}.invitation-role .invitation-role-item-border{position:absolute;top:0;right:0;bottom:0;left:0;border:1px solid #eee;border-radius:3px;-webkit-transition:border 0.15s ease-in-out;transition:border 0.15s ease-in-out}.invitation-role input{display:block;margin-right:auto;margin-left:auto}.invitation-role input:checked ~ .invitation-role-item-border{border:1px solid #3b99fc;box-shadow:0 0 5px rgba(59,153,252,0.4)}.invitation-role-title{margin-top:5px;margin-bottom:5px}.invitation-role-description{margin-top:0;color:#777}.add-member-title{margin-bottom:0;font-size:30px;font-weight:normal}.add-member-lead{margin-top:5px;margin-bottom:0;padding-bottom:15px;border-bottom:1px solid #eee}.add-member-lead.no-border{padding-bottom:0;border-bottom:0}.add-member-team-list{margin-bottom:15px;list-style:none}.add-member-team-list .team{display:block;padding:15px 0;font-weight:normal;cursor:pointer}.add-member-team-list .team:first-child{border-top:1px solid #f2f2f2}.add-member-team-list .team .minibutton{float:right}.add-member-team-list .team-info{max-width:80%;color:#000;text-decoration:none}.add-member-team-list .team-info:hover{color:#4183c4}.add-member-team-list .team-name{font-size:14px}.add-member-team-list .team-meta{color:#777;margin-top:2px;margin-bottom:2px}.add-member-team-list .team-description{margin-top:2px;margin-bottom:2px;color:#333}.add-member-team-list .team-toggler .turn-on{display:inline-block}.add-member-team-list .team-toggler.on .turn-off{display:inline-block}.add-member-team-list .team-toggler .turn-off{display:none}.add-member-team-list .team-toggler.on .turn-on{display:none}.team-list-footer .show-all-link .octicon{margin-left:5px;color:#777}.invite-team-member-list .team{display:table-row;cursor:default}.invite-team-member-list .team:first-child .table-list-cell{border-top:0}.invite-team-member-list .team .table-list-cell{padding-top:15px;padding-bottom:15px}.invite-team-member-list .table-list-cell-checkbox{width:42px}.invite-team-member-list .team-info{width:250px;vertical-align:middle;color:#222}.invite-team-member-list .team-description{display:block;padding-top:0;padding-bottom:0;font-weight:normal}.invite-team-member-list .team-meta{width:100px;text-align:left;vertical-align:middle}.invite-team-member-list .team-link{text-align:right;color:#4183c4}.member-list-item .table-list-cell{vertical-align:middle;padding-top:10px;padding-bottom:10px}.member-list-item .table-list-cell-checkbox{width:30px}.member-list-item.adminable .member-info{padding-left:5px}.member-list-item .member-link{display:block;text-decoration:none}.member-list-item .member-link:hover .member-username{color:#4183c4}.member-visibility .octicon{font-size:14px}.member-info{padding-left:10px;font-size:14px}.member-info .member-list-avatar{float:left;margin-right:15px}.member-info .member-fullname{font-weight:normal;color:#777}.member-username{margin-top:4px;display:block;color:#333}.member-username .octicon{position:relative;top:-2px;margin-left:2px;font-size:12px;color:#aaa}.member-username.css-truncate-target{display:block}.member-security .octicon{color:#f93;font-size:14px}.member-meta{width:140px;font-size:11px;color:#777;text-align:center}.member-meta .access-link{color:#777}.member-meta .access-link:hover{color:#4183c4;text-decoration:none}.member-meta .button-link{color:#777}.member-meta .button-link:hover{color:#4183c4;text-decoration:none}.member-meta .select-menu-modal{width:310px}.member-meta .select-menu-modal-holder{right:0;text-align:left}.member-meta .octicon{font-size:14px}.non-member-meta{width:270px}.member-follow{text-align:right}.member-selected-actions{display:inline}.org-people-blankslate{margin-top:-20px;border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.migrate-org-flash{margin-top:-1px;border-width:1px 0}.migrate-owners-wrapper{width:500px;padding-top:30px;margin:0 auto;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif}.migrate-owners-wrapper .setup-header{margin-bottom:20px}.migrate-owners-wrapper .setup-header .lead{margin-top:5px;margin-bottom:0;font-size:18px}.migrate-owners-wrapper .migrate-owners-title{font-size:30px}.rename-owners-error span{display:inline-block;padding:5px;margin-bottom:10px;font-size:11px;font-weight:bold;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.rename-owners-spinner{position:absolute;top:30px;right:30px}.delete-owners-button{color:#777}.delete-owners-button:hover{color:#bd2c00}.rename-owners-team-form .rename-owners-team-input{font-size:22px;font-weight:bold}.rename-owners-team-form .note{margin-top:5px;margin-bottom:15px;color:#777}.legacy-contributors-title{margin-top:30px;margin-bottom:0;font-size:24px;font-weight:normal}.legacy-contributors-lead{margin-top:10px;font-size:16px;line-height:24px}.migration-help-collabs{margin-top:145px}.migration-help-robots{margin-top:80px}.migration-help-teams{margin-top:50px}.migration-help-title{margin-top:0;margin-bottom:0;font-size:14px}.migration-help-content{margin-top:5px;margin-bottom:5px;color:#777}.migrate-org-roles{width:100%;margin-top:30px;margin-bottom:10px;display:table;border:1px solid #ddd;border-radius:3px}.migrate-org-roles .tooltipped:after{width:300px;white-space:normal}.migrate-org-roles-item{display:table-cell;width:33.33%;border-right:1px solid #ddd}.migrate-org-roles-item:last-child{border-right:0}.repo-creation-content{font-size:14px;color:#777}.repo-setting-check{margin-top:1px;margin-right:8px;margin-bottom:15px;float:left}.repo-setting-saved,.repo-setting-spinner{float:right}.repo-setting-saved{color:#6cc644;font-weight:bold}.migrate-ability-list{margin:15px 0;list-style:none}.migrate-ability-list-item{padding-top:5px;padding-bottom:5px;margin:0 20px;font-size:14px}.migrate-ability-list-item:first-child{border-top:0}.migrate-ability-list-item .octicon-check,.migrate-ability-list-item .octicon-x{width:15px}.migrate-ability-list-item .octicon-check{color:#6cc644}.migrate-ability-list-item .octicon-x{color:#aaa}.migrate-ability-list-item .octicon-question{color:#555;font-size:12px}.migrate-org-roles-legacy-item{background-color:#f8f8f8}.migrate-ability-not-possible{color:#999}.members-can-create-repositories .octicon-x{display:none}.members-can-create-repositories.migrate-ability-not-possible .octicon-x{display:inline-block}.members-can-create-repositories.migrate-ability-not-possible .octicon-check{display:none}.migrate-org-roles-header{padding:15px 20px;border-bottom:1px solid #ddd}.migrate-org-roles-title{margin-top:0;margin-bottom:0;font-size:18px;font-weight:normal}.migrate-org-roles-lead{margin-top:4px;margin-bottom:0;font-size:14px;color:#777}.migrate-org-badge{padding:3px 5px;color:#333;font-size:10px;letter-spacing:1px;text-transform:uppercase;border:1px solid #ddd;border-radius:3px}.migrate-org-roles-count{padding:10px 20px;color:#777;border-top:1px solid #ddd}.migrate-org-create-repos-wrapper .repo-setting-saved{display:none}.migrate-org-create-repos-wrapper.loading .spinner{display:inline-block}.migrate-org-create-repos-wrapper.success .repo-setting-saved{display:inline}.migrate-org-create-repos-wrapper .disabled{opacity:0.5;pointer-events:none}.migrate-org-create-repos-wrapper .note{margin-top:0;margin-bottom:0}.legacy-contributor-list{margin-bottom:15px}.legacy-contributor-actions{width:395px;text-align:right}.legacy-contributor-button{display:inline}.legacy-contributor-button:last-child{margin-left:5px}.legacy-contributor-cell,.legacy-contributor-cell-contents{-webkit-transition:all 0.25s ease-in-out;transition:all 0.25s ease-in-out}.legacy-contributor-cell-contents{max-height:80px}.hide-legacy-contributor .legacy-contributor-cell{padding-top:0;padding-bottom:0;opacity:0}.hide-legacy-contributor .legacy-contributor-cell-contents{max-height:0;overflow:hidden}.load-more-contributors{font-size:14px;font-weight:bold}.migrate-back-step{margin-top:9px;float:left}.team-grid{position:relative;margin-left:-10px;margin-right:-10px}.team-grid:before{display:table;content:""}.team-grid:after{display:table;clear:both;content:""}.team-grid .team{position:relative;float:left;width:480px;height:127px;padding:15px;margin-bottom:20px;margin-left:10px;margin-right:10px;border:1px solid #eee;border-radius:3px}.team-grid .team-link{display:block;text-decoration:none}.team-grid .team-link:focus .team-name,.team-grid .team-link:hover .team-name{color:#4183c4}.team-grid .team-link:focus{outline:none}.team-grid .team-link:hover{text-decoration:none}.team-grid .team-name{display:inline-block;margin:0;color:#333;font-size:18px}.team-grid .team-description{overflow:hidden;max-width:80%;margin-top:5px;font-size:14px;color:#777;text-overflow:ellipsis;white-space:nowrap}.team-grid .team-label-ldap{float:right}.team-grid .team-members{width:478px;padding:10px 15px;margin:0 -15px -15px;border-top:1px solid #eee;border-radius:0 0 3px 3px;background-color:#f8f8f8}.team-grid .team-members .minibutton{margin-top:2px;margin-bottom:2px}.team-grid .team-member{display:inline-block;vertical-align:top;width:30px;height:30px}.team-grid .team-member:hover{text-decoration:none}.team-grid .blankslate{margin-left:10px;margin-right:10px}.team-grid .team-actions-form{float:right}.team-label-ldap{display:inline-block;padding:0 9px;line-height:25px;border:1px solid #eaeaea;border-radius:3px;box-shadow:none;color:#999;font-size:11px;text-transform:uppercase;cursor:default}.team-label-ldap.header-label-ldap{padding:3px 5px}.team-member-ellipsis{display:inline-block;vertical-align:top;width:30px;height:30px;line-height:24px;color:#777;font-weight:bold;text-align:center;background-color:#ddd;border-radius:3px}.team-member-ellipsis:hover{color:#333;text-decoration:none}.typeahead-result{position:relative;display:block;min-width:100%;padding:10px;margin-top:0;color:#333;cursor:pointer}.typeahead-result:before{display:table;content:""}.typeahead-result:after{display:table;clear:both;content:""}.typeahead-result:first-child{border-top:0}.typeahead-result:focus,.typeahead-result:hover,.typeahead-result.navigation-focus{text-decoration:none}.typeahead-result:hover,.typeahead-result.navigation-focus{color:#fff;background-color:#4183c4}.typeahead-result:hover .octicon-plus,.typeahead-result.navigation-focus .octicon-plus{color:#fff}.member-suggestion{padding-left:44px}.member-suggestion .avatar{float:left;margin-left:-34px;margin-right:10px}.member-suggestion .member-suggestion-info{width:75%;overflow:hidden;margin-top:2px;margin-bottom:0;white-space:nowrap;text-overflow:ellipsis}.member-suggestion .member-name{color:#777;font-size:12px}.member-suggestion .octicon-plus,.member-suggestion .octicon-check{position:absolute;top:50%;right:15px;margin-top:-8px;color:#ddd}.member-suggestion .already-member-note,.member-suggestion .non-member-note,.member-suggestion .non-member-action{margin-top:0;margin-bottom:0;color:#777;font-size:11px}.member-suggestion .non-member-action{display:none}.member-suggestion:hover .member-name,.member-suggestion:hover .non-member-note,.member-suggestion:hover .already-member-note,.member-suggestion:hover .non-member-action,.member-suggestion.navigation-focus .member-name,.member-suggestion.navigation-focus .non-member-note,.member-suggestion.navigation-focus .already-member-note,.member-suggestion.navigation-focus .non-member-action{color:#fff}.member-suggestion:hover .non-member-note,.member-suggestion.navigation-focus .non-member-note{display:none}.member-suggestion:hover .non-member-action,.member-suggestion.navigation-focus .non-member-action{display:block}.member-suggestion:hover .octicon-plus,.member-suggestion:hover .octicon-check,.member-suggestion.navigation-focus .octicon-plus,.member-suggestion.navigation-focus .octicon-check{color:#fff}.member-suggestion.not-a-member .member-info,.member-suggestion.disabled .member-info{margin-top:-2px}.member-suggestion.disabled{opacity:0.5}.repo-access-add-team .team-name{font-size:13px}.repo-access-add-team .team-description{display:block}.repo-access-add-team .team-size,.repo-access-add-team .team-description{color:#777}.repo-access-add-team.navigation-focus .team-size,.repo-access-add-team.navigation-focus .team-description{color:#fff}.team-info-card{position:relative;margin-bottom:20px}.team-info-card .team-label-ldap{font-size:13px;line-height:32px}.team-info-card .team-description{margin-top:10px;color:#666;font-size:14px;line-height:20px;word-break:break-word}.team-info-card .team-description .link{color:#999;cursor:pointer}.team-info-card .team-description .link:hover{text-decoration:underline}.team-info-card .description-toggler .turn-on{display:inline-block}.team-info-card .description-toggler.on .turn-off{display:inline-block}.team-info-card .description-toggler .turn-off{display:none}.team-info-card .description-toggler.on .turn-on{display:none}.team-title{margin-top:0;margin-bottom:0;font-size:22px;line-height:26px}.team-stats{margin-right:-15px;margin-bottom:-10px;margin-left:-15px;padding-right:15px;padding-left:15px;border-top:1px solid #eee}.stats-group{display:table;table-layout:fixed;width:100%}.stats-group-stat{display:table-cell;padding-top:10px;padding-bottom:10px;padding-left:15px;font-size:12px;color:#999;text-transform:uppercase}.stats-group-stat:hover,.stats-group-stat:hover .stat-number{color:#4183c4;text-decoration:none}.stats-group-stat:first-child{padding-left:0;border-right:1px solid #eee}.stats-group-stat.no-link:hover{color:#999}.stats-group-stat.no-link:hover .stat-number{color:#333}.stat-number{display:block;color:#333;font-size:16px}.team-description-form{width:100%;margin-top:10px;margin-bottom:20px}.team-description-field{width:100%;height:100px;margin-bottom:10px;font-size:14px}.team-actions .octicon{margin-right:0}.team-actions-form{display:inline-block}.org-team-sidebar{float:left;width:280px}.org-team-sidebar .team-note{color:#777;font-size:13px;text-align:center}.org-team-sidebar .team-note .note-emphasis{color:#333}.org-team-main{float:right;width:660px}.owners-member-title{margin-top:10px;margin-bottom:0;font-size:18px;color:#777;font-weight:normal}.owners-notice{background-color:#f0f8ff}.owners-notice-title{margin-top:0;margin-bottom:0;font-size:18px}.owners-notice-link{margin-top:10px}.owners-team-repo-note{margin-top:12px;margin-bottom:0}.owners-team-repo-note .octicon{font-size:14px}.team-member-list{list-style:none}.team-member-list .team-member-content{margin-left:50px}.team-member-list .team-member-username{font-weight:bold;margin:0;font-size:14px;line-height:20px}.team-member-list .team-member-description{color:#777;margin:0;font-size:14px;line-height:20px}.team-member-list .label-admin,.team-member-list .label-legacy-contributor{cursor:default}.team-member-list .manage-team-member{float:right;margin-top:10px}.team-member-list .manage-team-member .select-menu-modal{width:225px;left:-176px}.team-member-list .manage-team-member .select-menu-item.disabled{color:#bbb;cursor:not-allowed}.team-member-list .manage-team-member .select-menu-item .button-link{width:100%;margin-left:0;color:#bd2c00}.team-member-list .manage-team-member .navigation-focus.disabled{color:#bbb;background-color:#fff}.team-member-list .manage-team-member .navigation-focus .button-link{color:#fff;text-decoration:none}.team-member-list-avatar{float:left;margin-right:10px}.loading .legacy-contributor-button .minibutton{opacity:0.5;pointer-events:none}.org-team-form{width:440px;margin:0 auto}.org-team-form .disabled{opacity:0.5}.org-validate-group{position:relative}.org-validate-group .octicon,.org-validate-group .spinner{position:absolute;top:9px;right:10px}.org-validate-group .octicon-check{color:#6cc644}.org-validate-group .octicon-alert{color:#bd2c00}.team-members{margin-bottom:20px}#team-member-container .table-list{border-bottom:0}.confirm-removal-container .private-fork-count{margin-top:0;color:#777;font-weight:normal;font-size:12px}.confirm-removal-container .deleting-private-forks-warning{position:relative;padding-left:26px}.confirm-removal-container .deleting-private-forks-warning .octicon{position:absolute;top:2px;left:0;color:#bd2c00}.confirm-removal-list-container{border:1px solid #eaeaea;border-radius:3px;margin-bottom:15px}.facebox .confirm-removal-list{margin-left:0;margin-bottom:0;padding-left:0;max-height:182px;overflow:auto}.confirm-removal-list-item{font-size:14px;font-weight:bold;margin:0;padding:10px;border-top:1px solid #eaeaea}.confirm-removal-list-item:first-child{border-top:0}.confirm-removal-team .octicon,.confirm-removal-repo .octicon{margin-right:3px;color:#999}.org-blankslate{display:none}.org-section.is-empty .org-blankslate{display:block}.manage-user-info{margin-left:-15px;margin-right:-15px;padding-right:15px;padding-bottom:10px;padding-left:15px;border-bottom:1px solid #eee}.manage-user-info:before{display:table;content:""}.manage-user-info:after{display:table;clear:both;content:""}.manage-user-info .member-username{margin-top:0}.manage-user-info .member-username,.manage-user-info .member-fullname{display:block;overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.manage-user-info .avatar{margin-top:2px;margin-right:10px}.manage-user-role{position:relative;padding-top:15px;padding-bottom:5px}.manage-user-role .select-menu-item-text .description{font-size:12px;line-height:16px}.manage-user-role .non-member-info{color:#777}.manage-member-meta{list-style:none}.manage-member-meta-item{margin-top:12px;color:#777}.manage-member-meta-item:first-child{margin-top:0}.manage-member-meta-item .button-link{color:#777}.manage-member-meta-item>.octicon{width:14px;text-align:center;margin-right:5px;color:#999}.manage-member-meta-item>.octicon-alert{color:#f93}.member-two-factor-disabled{color:#bd2c00}.manage-member-button{margin-bottom:10px;display:block;text-align:center}.org-person-repo-header{margin-top:0}.org-person-repo-search{margin-top:5px;margin-right:5px}.org-user-notice-title{margin-top:0;margin-bottom:0}.org-user-notice-content{margin-top:10px;margin-bottom:10px;font-size:14px}.org-user-notice-content strong{color:#333}.org-user-notice-content:last-child{margin-bottom:0}.org-user-notice-content .octicon{color:#777}.org-user-notice-icon{margin:10px 10px 20px;float:right;font-size:45px;color:#ccc}.org-migration-list{margin-left:20px;margin-bottom:20px;font-size:14px}.org-migration-list-item{margin-bottom:5px}.org-migration-actions:before{display:table;content:""}.org-migration-actions:after{display:table;clear:both;content:""}.org-migration-actions form{margin-right:10px;float:left}.manage-repo-access-wrapper{width:750px}.manage-repo-access-header{margin-top:30px;margin-bottom:30px}.manage-repo-access-header:before{display:table;content:""}.manage-repo-access-header:after{display:table;clear:both;content:""}.manage-repo-access-header .button{margin-top:8px}.manage-repo-access-heading{margin-top:-2px;margin-bottom:0;font-weight:normal;font-size:24px}.manage-repo-access-lead{margin-top:3px;margin-bottom:0;font-size:16px;color:#777}.manage-access-team-list{border-bottom:0}.manage-access-team-list-item:first-child .table-list-cell{border-top:0}.manage-access-team-info{padding-top:15px;width:350px}.manage-access-team-description{margin-top:3px;color:#777}.manage-access-team-meta{padding-top:25px;padding-bottom:25px;padding-right:20px;text-align:right}.manage-access-icons-cell{width:50px;text-align:center;padding-right:0;padding-top:18px}.manage-access-icons{padding:10px;margin-top:-5px;display:inline-block;border:1px solid #eee;border-radius:5px}.manage-access-icons .octicon{float:left;width:16px;text-align:center}.access-inactive{opacity:0.6}.ldap-group-dn{display:block;color:#aaa;font-weight:normal}.ldap-import-groups-container .blankslate{display:none}.ldap-import-groups-container.is-empty .blankslate{display:block}.ldap-import-groups-container.is-empty .ldap-memberships-list{display:none}.ldap-import-groups-container .team-name-exists{display:none}.ldap-import-groups-container .is-exists .ldap-mention-as{color:#bd2c00}.ldap-import-groups-container .is-exists .team-name-exists{position:absolute;z-index:1;display:inline-block;padding:5px;font-size:11px;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.ldap-memberships-list{margin-bottom:30px}.ldap-memberships-list .table-list-cell{font-size:13px;padding-bottom:10px;padding-top:10px;vertical-align:middle}.ldap-memberships-list .table-list-cell:last-child{width:92px}.ldap-memberships-list .ldap-group-form{display:table;width:100%}.ldap-memberships-list .ldap-group-form>div:not(.table-list-cell){display:none !important}.ldap-memberships-list .team-name-exists{bottom:-19px;left:10px}.ldap-memberships-list .ldap-list-team-name{width:380px}.ldap-memberships-list .ldap-group-dn{font-size:11px}.ldap-memberships-list .ldap-mention-as{width:260px}.ldap-memberships-list .edit{position:absolute;padding:10px;margin-left:-33px;color:#4183c4;cursor:pointer}.ldap-memberships-list .edit-fields{display:none}.ldap-memberships-list .is-editing .edit-hide{display:none}.ldap-memberships-list .is-editing .edit-fields{display:block}.ldap-memberships-list .is-editing .spinner{margin-left:15px;vertical-align:middle}.ldap-memberships-list .is-removing{opacity:0.25}.ldap-memberships-list .is-removing .edit{opacity:0.5}.team-name-field{height:33px}.ldap-import-form-actions{margin-top:30px}.is-importing .team-ldap-group-adder-button .spinner{display:inline;float:left}.team-ldap-group-adder{position:relative;float:left}.team-ldap-group-adder .team-name-exists{bottom:-27px}.team-ldap-group-adder .subnav-search-input{border-radius:4px 0 0 4px}.team-ldap-group-adder-button{border-radius:0 4px 4px 0;margin-left:-1px;width:90px}.team-ldap-group-adder-button .loading-indicator{display:none}#pending-invitations{display:none}.pending-team-invitations-link{display:block;padding-top:15px;padding-bottom:15px;border-bottom:1px solid #eee}.invited .team-member-list{margin:-10px 0 0}.invited .team-member-list .list-item{padding:10px 0;border-bottom:1px solid #eee}.invited .team-member-list .list-item:before{display:table;content:""}.invited .team-member-list .list-item:after{display:table;clear:both;content:""}.invited .team-member-list .list-item:last-of-type{border:0}.invited .team-member-list .list-item .edit-invitation,.invited .team-member-list .list-item .cancel-invitation{margin-top:6px;float:right}.invited-banner{margin-top:10px;padding:10px;border:1px solid #eaeaea;border-radius:4px;background-color:#fff}.invited-banner:before{display:table;content:""}.invited-banner:after{display:table;clear:both;content:""}.invited-banner .minibutton{float:right;margin-left:5px;margin-top:-3px}.invited-banner p{color:#333;margin:0;font-size:15px}.invited-banner .inviter-link{color:#333;font-weight:bold}.invitation-container{width:600px;margin:40px auto;padding:20px;border:1px solid #ddd;border-radius:3px}.invitation-container h3{font-size:16px;font-weight:normal}.invitation-disclosure{position:relative;padding:10px 0 10px 24px;list-style:none;color:#777;text-align:center}.invitation-disclosure .octicon{color:#999;text-align:center;display:inline-block;margin-right:5px}.invitation-header{position:relative;text-align:center}.invitation-header .avatar{margin-bottom:20px}.invitation-header .invitation-title{font-size:18px;font-weight:normal;line-height:16px;margin:0}.invitation-header .inviter{font-size:13px;color:#999;margin:5px 0 10px}.invitation-footer{margin:40px 0 20px}.invitation-footer form{display:inline-block;margin-right:10px}.outline-box-group{border-radius:3px}.outline-box{padding:20px;border:solid 1px #d8d8d8}.outline-box:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.outline-box:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.outline-box+.outline-box{border-top:0}.outline-box-highlighted{background-color:#f7fafd;border-color:#c9d6e3}.owner-select-grid{margin-left:-8px}.owner-select-grid:before{display:table;content:""}.owner-select-grid:after{display:table;clear:both;content:""}.owner-select-target{float:left;padding:10px;margin:0 8px 10px;text-align:center;background-color:#f2f2f2;border-radius:3px}.owner-select-target .css-truncate-target{max-width:90px}.owner-select-target.disabled{color:#999;cursor:not-allowed}.owner-select-target.enabled{font-weight:bold;cursor:pointer}.owner-select-target.enabled .owner-select-avatar{opacity:1}.owner-select-target.enabled:hover{color:#fff;background-color:#4183c4}.owner-select-target.enabled:active{color:#fff;background-color:#3269a0}.owner-select-avatar{display:block;margin-bottom:9px;opacity:0.3}.owner-select-grid-no-facebox h2{padding-right:0;padding-left:0;margin-right:0;margin-left:0}.page-notice{margin:15px auto;width:400px;padding:20px;color:#333;font-size:14px;background:#fffeeb;border:1px solid #ddd;border-radius:3px}.page-notice h2{margin:0;font-size:16px;color:#000}.page-notice p:last-child{margin-bottom:0}#editor-body-buffer{display:none}#pages-composer{padding-bottom:5px;margin-bottom:20px;border-bottom:1px solid #eee}#pages-composer label{display:inline-block;margin-bottom:10px;font-size:16px}#pages-composer input{margin-bottom:15px}#pages-composer p{margin-top:-10px;margin-bottom:10px;color:#777}#pages-composer #gollum-editor-function-bar{margin-top:0}#pages-composer #gollum-editor{margin:0;padding:0;border:0}#pages-composer #gollum-editor-body{margin-top:10px}.gollum-readme{display:inline-block;margin-left:10px}#gollum-editor-function-bar #undo-load-readme{display:none}.theme-picker{margin-bottom:-1px;background-color:#fff;background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,0.1);box-shadow:0 5px 10px rgba(0,0,0,0.1)}.theme-picker>.container{position:relative;overflow:hidden;text-align:center}.theme-picker-thumbs{border-bottom:1px solid #eee}.theme-picker-footer{position:relative;padding-bottom:15px}.theme-toggle{width:32px;height:32px;color:#ccc;padding:0;background:none;border:0}.theme-toggle:hover{color:#0084c8;text-decoration:none}.theme-toggle.disabled,.theme-toggle.disabled:hover{color:#ccc;opacity:0.3;cursor:not-allowed}.theme-toggle-full-left,.theme-toggle-full-right{position:absolute;top:50px;width:32px;height:32px;overflow:hidden}.theme-toggle-full-left{left:0}.theme-toggle-full-right{right:0}.theme-selector{height:102px;margin:15px 46px;white-space:nowrap;overflow:hidden}.theme-selector-thumbnail{display:inline-block;padding:2px;border:1px solid #ddd;border-radius:3px}.theme-selector-thumbnail+.theme-selector-thumbnail{margin-left:15px}.theme-selector-thumbnail:hover{text-decoration:none;background-color:#f5f5f5}.theme-selector-thumbnail.selected{padding:3px;background-color:#4183c4;border:0}.theme-selector-thumbnail.selected .theme-selector-img{border:1px solid #fff}.theme-selector-img{display:block;width:126px;height:96px;border-radius:1px}.theme-selector-name{display:none}.theme-picker-spinner{position:absolute;top:16px;left:50%;margin-left:-16px;opacity:0;-webkit-transition:0.2s, opacity ease-in-out;transition:0.2s, opacity ease-in-out;background-color:#fff}.theme-picker-spinner.visible{opacity:1}.theme-picker-spinner.visible ~ .theme-picker-controls .theme-name{opacity:0}.theme-selector-actions{padding-top:15px;text-align:right}.theme-selector-actions:before{display:table;content:""}.theme-selector-actions:after{display:table;clear:both;content:""}.theme-selector-actions .page-edit,.theme-selector-actions .page-publish{display:inline-block;margin-left:5px}.theme-picker-view-toggle{float:left}.theme-picker-view-toggle .for-hiding{display:none}.theme-picker-view-toggle.open .for-hiding{display:inline}.theme-picker-view-toggle.open .for-showing{display:none}.theme-picker-controls{position:absolute;top:15px;left:50%;display:none;width:220px;margin-left:-110px;line-height:34px;text-align:center}.theme-picker-controls .theme-toggle{vertical-align:middle}.theme-name{display:inline-block;margin-left:10px;margin-right:10px;font-size:20px;vertical-align:middle;line-height:1}#page-preview{position:relative;z-index:-100;display:block;width:100%;height:100%;padding:0;background-color:#fff;border:0}.feed-icon a{display:block;width:18px;height:18px;background:#f37538;color:#fff;border-radius:3px;padding:1px;text-align:center}body.page-profile .select-menu-modal{width:130px}body.page-profile .select-menu-modal-holder{right:0}body.page-profile .tab-content{position:relative}body.page-profile .feed-icon{position:absolute;right:0;z-index:2}.profilecols .orgs h3{margin:0 0 5px;font-size:12px}.profilecols .orgs h3 a{font-weight:normal;margin-left:5px}.profilecols .tabnav{position:relative}.profilecols .tabnav .pagehead-actions{float:none;top:0}.profilecols .tabnav .pagehead-actions li.text{display:inline-block;margin-top:12px}.profilecols .tabnav .subnav li:first-child{margin-left:10px}.profilecols .repo-search{display:inline}.profilecols .filter-bar{position:relative;border-bottom:1px solid #ddd;background:#fff;padding:0 0 10px}.profilecols .filter-bar .new-repo{float:right;margin-left:15px}.profilecols .filter-bar .filter_input{width:260px}.profilecols .filter-bar .repo_filterer{float:right;margin-top:8px}.profilecols .filter-bar li{position:relative;float:right;list-style:none;margin-left:10px;font-size:14px}.profilecols .filter-bar li a{display:inline-block}.profilecols .filter-bar li .filter-selected{color:#000;font-weight:bold}.profilecols .blankslate{margin-top:30px}.vcard-avatar{position:relative;display:block}.vcard-avatar .avatar{border-radius:6px}.vcard-names{margin-top:5px;line-height:1}.vcard-fullname{display:block;overflow:hidden;width:100%;font-size:26px;line-height:30px;text-overflow:ellipsis}.vcard-username{display:block;overflow:hidden;width:100%;font-size:20px;font-style:normal;font-weight:300;line-height:24px;color:#666;text-overflow:ellipsis}.vcard-details{list-style:none;padding-top:15px;padding-bottom:15px;border-top:1px solid #eee}.vcard-detail{width:100%;padding:2px 0 2px 24px;overflow-x:hidden;white-space:nowrap;font-size:14px;text-overflow:ellipsis}.vcard-detail .octicon{float:left;width:16px;text-align:center;margin-left:-24px;color:#ccc}.vcard .staff-badge{position:relative;top:-1px;padding:2px 5px;font-size:10px;font-weight:bold;color:#fff;text-transform:uppercase;background-color:#4183c4;border-radius:3px}.member-badge{display:block;padding:10px 0 8px 24px;font-size:14px;color:#4183c4;border-top:1px solid #eee}.member-badge .octicon{float:left;width:16px;margin-left:-24px;color:#ccc;text-align:center}.member-badge+.member-badge{padding-top:0;margin-top:-3px;border-top:0}.vcard-stats{margin-bottom:10px;padding-top:15px;padding-bottom:15px;text-align:center;border-top:1px solid #eee;border-bottom:1px solid #eee}.vcard-stats:before{display:table;content:""}.vcard-stats:after{display:table;clear:both;content:""}.vcard-stat{float:left;width:33.333%;font-size:11px;text-transform:capitalize}.vcard-stat-count{display:block;font-size:28px;font-weight:bold;line-height:1}.vcard-stat:hover{text-decoration:none}.vcard-stat:hover .text-muted{color:inherit}.new-user-avatar-cta{padding:8px 16px;margin-bottom:20px;background-color:#f1f6fb;color:#244f79;border:solid 1px #d0e5f8;border-radius:3px;font-size:14px}.new-user-avatar-cta .minibutton{float:right;margin-left:30px}.steps{width:100%;display:table;margin:30px auto 0;padding:0;overflow:hidden;list-style:none;border:1px solid #ddd;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.steps li{display:table-cell;width:33.3%;padding:10px 15px;color:#ccc;cursor:default;border-left:1px solid #ddd;background-color:#fafafa}.steps li.current{background-color:#fff;color:#333}.steps li.current .mega-octicon{color:#4183c4}.steps li .mega-octicon{float:left;margin-right:15px;padding-bottom:5px}.steps li .step{display:block}.steps li:first-child{border-left:0}.steps .complete{color:#777}.steps .complete .mega-octicon{color:#6cc644}.prose-diff .anchor{display:none}.prose-diff .show-rich-diff{cursor:pointer;color:#4183c4;text-decoration:none}.prose-diff .show-rich-diff:hover{text-decoration:underline}.prose-diff.collapsed .rich-diff-level-zero.expandable{cursor:pointer}.prose-diff.collapsed .rich-diff-level-zero.expandable .vicinity{display:block}.prose-diff.collapsed .rich-diff-level-zero.expandable .unchanged:not(.vicinity){display:none}.prose-diff.collapsed .rich-diff-level-zero.expandable:first-child::before{margin-top:1em}.prose-diff.collapsed .rich-diff-level-zero.expandable:before{font-family:"octicons";content:"\f039";color:#d3d3d3;display:block;text-align:center;font-size:24px;letter-spacing:2px;line-height:0;margin-top:1em;margin-bottom:1em;padding:0}.prose-diff.collapsed .rich-diff-level-zero.expandable:hover:before{color:#000}.prose-diff.collapsed .rich-diff-level-zero.expandable:only-child:before{content:"Sorry, no visible changes to display.";color:#d3d3d3;font-size:18px}.prose-diff.collapsed .rich-diff-level-zero.expandable:only-child:hover:before{color:#000}.prose-diff.collapsed .rich-diff-level-zero.expandable>.removed,.prose-diff.collapsed .rich-diff-level-zero.expandable>del{text-decoration:none;display:none}.prose-diff .markdown-body{padding:30px;padding-left:15px}.prose-diff .markdown-body>ins{box-shadow:inset 4px 0 0 #7fcb5c}.prose-diff .markdown-body>del{box-shadow:inset 4px 0 0 #c94114;text-decoration:none}.prose-diff .markdown-body>ins,.prose-diff .markdown-body>del{display:block;border-radius:0}.prose-diff .markdown-body>ins>.rich-diff-level-zero,.prose-diff .markdown-body>ins>.rich-diff-level-one,.prose-diff .markdown-body>del>.rich-diff-level-zero,.prose-diff .markdown-body>del>.rich-diff-level-one{margin-left:15px}.prose-diff .markdown-body>ins:first-child *,.prose-diff .markdown-body>del:first-child *{margin-top:0}.prose-diff .rich-diff-level-zero.added{box-shadow:inset 4px 0 0 #7fcb5c}.prose-diff .rich-diff-level-zero.removed{box-shadow:inset 4px 0 0 #c94114}.prose-diff .rich-diff-level-zero.changed{box-shadow:inset 4px 0 0 #ffc045}.prose-diff .rich-diff-level-zero.unchanged,.prose-diff .rich-diff-level-zero.vicinity{margin-left:15px}.prose-diff .rich-diff-level-zero.added,.prose-diff .rich-diff-level-zero.removed,.prose-diff .rich-diff-level-zero.changed{display:block;border-radius:0}.prose-diff .rich-diff-level-zero.added>.rich-diff-level-one,.prose-diff .rich-diff-level-zero.removed>.rich-diff-level-one,.prose-diff .rich-diff-level-zero.changed>.rich-diff-level-one{margin-left:15px}.prose-diff .rich-diff-level-zero.added:first-child *,.prose-diff .rich-diff-level-zero.removed:first-child *,.prose-diff .rich-diff-level-zero.changed:first-child *{margin-top:0}.prose-diff :not(.changed)>:not(.github-user-ins):not(.github-user-del)>.removed,.prose-diff :not(.changed)>:not(.github-user-ins):not(.github-user-del)>del{text-decoration:none}.prose-diff .changed del,.prose-diff .changed del pre,.prose-diff .changed del code,.prose-diff .changed del>div,.prose-diff .changed .removed,.prose-diff .changed .removed pre,.prose-diff .changed .removed code,.prose-diff .changed .removed>div{text-decoration:line-through;color:#a33;background:#ffeaea}.prose-diff .changed ins,.prose-diff .changed ins code,.prose-diff .changed ins pre,.prose-diff .changed .added{background:#eaffea;border-bottom:1px solid MediumSeaGreen}.prose-diff>.markdown-body .github-user-ins{text-decoration:underline}.prose-diff>.markdown-body .github-user-del{text-decoration:line-through}.prose-diff>.markdown-body li ul.added{background:#eaffea}.prose-diff>.markdown-body li ul.removed{color:#a33;background:#ffeaea}.prose-diff>.markdown-body li ul.removed:not(.github-user-ins){text-decoration:line-through}.prose-diff>.markdown-body li.added.moved-up:before{font-family:"octicons";content:"\f03d ";color:#d3d3d3}.prose-diff>.markdown-body li.added.moved-down:before{font-family:"octicons";content:"\f03f ";color:#d3d3d3}.prose-diff>.markdown-body li.added.moved{background:#ffffea}.prose-diff>.markdown-body li.removed.moved{display:none}.prose-diff>.markdown-body pre{padding:10px 20px}.prose-diff>.markdown-body th.changed,.prose-diff>.markdown-body td.changed{border-left-color:#ddd;background:#ffffea}.prose-diff>.markdown-body :not(li.moved).removed{color:#a33;text-decoration:line-through;background:#ffeaea}.prose-diff>.markdown-body :not(.github-user-ins):not(li.moved).removed{text-decoration:line-through}.prose-diff>.markdown-body :not(li.moved).added,.prose-diff>.markdown-body li:not(.moved).added{background:#eaffea}.prose-diff>.markdown-body :not(.github-user-del):not(li.moved).added li:not(.moved):not(.github-user-del).added{text-decoration:none}.prose-diff>.markdown-body li:not(.moved).removed{color:#a33;background:#ffeaea}.prose-diff>.markdown-body li:not(.moved):not(.github-user-ins).removed{text-decoration:line-through}.prose-diff>.markdown-body .added,.prose-diff>.markdown-body ins+.added,.prose-diff>.markdown-body ins{border-bottom:0;border-top:0}.prose-diff>.markdown-body .added:not(.github-user-del):not(.github-user-ins),.prose-diff>.markdown-body ins+.added:not(.github-user-del):not(.github-user-ins),.prose-diff>.markdown-body ins:not(.github-user-del):not(.github-user-ins){text-decoration:none}.prose-diff>.markdown-body img.added,.prose-diff>.markdown-body img.removed{border-width:1px;border-style:solid}.prose-diff>.markdown-body ins pre:not(.github-user-del):not(.github-user-ins),.prose-diff>.markdown-body ins code:not(.github-user-del):not(.github-user-ins),.prose-diff>.markdown-body ins>div:not(.github-user-del):not(.github-user-ins){text-decoration:none}.prose-diff>.markdown-body ul>ins,.prose-diff>.markdown-body ul>del{display:block;padding:0}.prose-diff>.markdown-body .added>li,.prose-diff>.markdown-body .removed>li{margin-top:0;margin-bottom:0}span.changed_tag,em.changed_tag,strong.changed_tag,b.changed_tag,i.changed_tag,code.changed_tag{border-bottom:1px dotted #808080;border-radius:0}a.added_href,a.changed_href,span.removed_href{border-bottom:1px dotted #808080;border-radius:0}.diff-view .file-type-prose .rich-diff{display:none}.diff-view .file-type-prose.display-rich-diff .rich-diff{display:block}.diff-view .file-type-prose.display-rich-diff .file-diff{display:none}.pull-request-tab-content{display:none}.pull-request-tab-content.is-visible{display:block}.discussion-timeline p.explain{margin:0;font-size:12px}.pull-request-ref-restore{display:none}.pull-request-ref-restore .animated-ellipsis-container{line-height:16px}.pull-request-ref-restore-text{display:block}.pull-discussion-timeline.is-pull-restorable .pull-request-ref-restore.last{display:block}.signed-out-comment{margin-top:15px;margin-left:64px;padding:15px;background-color:#fff9ea;border:solid 1px #dfd8c2;border-radius:3px}.signed-out-comment .button{vertical-align:baseline;margin-right:3px}.inline-comment-form .signed-out-comment{margin:5px;padding:0;background-color:transparent;border:0}.stale-files-tab{display:none;margin-bottom:10px}.files-bucket{margin-bottom:15px}.files-bucket.is-stale .stale-files-tab{display:block}.pull-request-link{float:left;margin-right:5px;font-size:13px;font-weight:bold;padding:0 8px;height:26px;line-height:26px;border:1px solid rgba(65,131,196,0.5);border-radius:3px}.pull-request-link:hover{background:#4183c4;border-color:#4183c4;color:#fff;text-decoration:none}.header-with-actions{position:relative}.header-with-actions h3{margin-top:5px}.header-with-actions .select-menu{float:right;margin-top:-5px}.header-with-actions .select-menu-modal-holder{right:0}.header-with-actions .select-menu-modal{width:140px}.pulse-blankslate{margin-top:20px}.diffstat-summary{font-size:16px;vertical-align:middle;border-radius:3px;color:#777;line-height:1.8;text-align:left;padding:0 20px 0 0}.diffstat-summary a{color:#555}.diffstat-summary strong{color:#333}.pulse-graph{border-bottom:1px solid #eee;float:left;width:50%;padding:15px 15px 0}.pulse-graph:first-child{border-right:1px solid #eee}.authors-and-code .insertions{color:#6cc644}.authors-and-code .deletions{color:#bd2c00}.authors-and-code .section{height:150px;display:table-cell;width:459px}.pulse-authors-graph{position:relative;height:150px}.pulse-authors-graph>svg{width:100%}.pulse-authors-graph .dots{position:absolute;top:40px;left:0;right:0;margin:0 auto;width:64px;height:64px}.pulse-authors-graph .bar rect{fill:#f93;fill-opacity:0.7}.pulse-authors-graph .bar rect:hover{fill-opacity:1}.summary-stats li{list-style-type:none;display:table-cell;margin:0;width:229px;text-align:center;color:#999;border-left:1px solid #eee}.summary-stats li a{display:block;text-decoration:none;color:#999;padding-bottom:10px}.summary-stats li a:hover{background:#fafafa}.summary-stats li .octicon-git-pull-request{color:#6e5494}.summary-stats li .octicon-git-branch{color:#6cc644}.summary-stats li .octicon-issue-closed{color:#bd2c00}.summary-stats li .octicon-issue-opened{color:#6cc644}.summary-stats li:first-child{border-left:0;border-bottom-left-radius:3px}.summary-stats li .num{display:block;padding-top:10px;font-size:16px;font-weight:bold;color:#000}.pulse-sections{clear:both;margin-top:20px}.pulse-section{clear:both;padding:0;font-size:14px;color:#666}.pulse-section p{margin-top:20px}.radio-group:before{display:table;content:""}.radio-group:after{display:table;clear:both;content:""}.radio-label{padding:0 10px;height:34px;line-height:34px;padding-left:34px;border:1px solid #d9d9d9;margin-left:-1px;color:#333;cursor:pointer;float:left}:checked+.radio-label{z-index:1;position:relative;border-color:#4183c4}.radio-label .octicon{padding-right:5px}.radio-label:first-of-type{border-top-left-radius:3px;border-bottom-left-radius:3px;margin-left:0}.radio-label:last-of-type{border-top-right-radius:3px;border-bottom-right-radius:3px;padding-right:16px}.radio-input{position:absolute;height:34px;margin-left:12px;z-index:3}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}.file #readme .markdown-body{border:0;padding:30px;border-radius:0}.file #readme table[data-table-type="yaml-metadata"]{line-height:1;font-size:12px}.file #readme table[data-table-type="yaml-metadata"] table{margin:0}.user-recommendations-header{width:550px;margin-top:40px}.recommendations-intro-wrapper{height:96px}.recommendations-outro{padding:0 100px;color:#666;border:solid 1px #eee;border-radius:3px}.recommendations-complete{display:none;height:104px;padding:14px 20px;margin:30px 0 45px;font-size:16px;border:solid 1px #eee;border-radius:3px}.user-recommendations-form{margin:30px 0}.user-interests-label{display:block;margin-bottom:10px;font-size:17px;font-weight:bold}.user-interests-input[type="text"]{width:100%;min-height:40px;font-size:16px}.user-interests-examples-wrapper{height:21px;margin-top:13px}.user-interests-examples{margin:0;color:#777}.user-interests-examples a{color:#444}.user-interests-list-wrapper{height:41px}.skip-button-wrapper{display:block;text-align:center}.button-skip{height:30px;padding:0 12px;margin:0 auto;font-size:13px;font-weight:normal;line-height:30px;color:#666;background-color:transparent;background-image:none;border:1px solid rgba(0,0,0,0.1);border-radius:3px}.button-skip:hover{background-color:#f5f5f5;background-image:none;border-color:rgba(0,0,0,0.15)}.user-interests-list{width:100%;text-align:left;list-style:none}.user-interests-item{position:relative;float:left;height:41px;min-height:41px;padding:5px 8px 5px 10px;margin:8px;font-size:16px;line-height:30px;background-color:#f5f5f5;border-left:solid 10px #4183c4;border-radius:3px}.user-interests-item.hidden{visibility:hidden}.user-interests-item.loading{border-left:solid 10px #ddd}.user-interests-item .spinner{display:inline-block;width:16px;height:16px;position:relative;top:1px}.user-interests-item .octicon-x{color:#aaa}.user-interests-item .octicon-x:hover{color:#4183c4;text-decoration:none}.remove-user-interest-form{display:inline-block}.user-interests-item-remove{border:0;background-color:transparent;outline:none}.recommendations-wrapper{display:table;width:100%;margin-top:30px;border-collapse:collapse;border-top:solid 1px #eee}.recommendations-wrapper h2{margin-top:30px;font-size:18px}.recommendations-wrapper.disabled{color:#ccc}.recommendations-wrapper.no_users .recommendations-people{display:none}.recommendations-wrapper.only_repos_users .recommendations-guides,.recommendations-wrapper.only_repos_users .recommendations-showcases{display:none}.recommendations-wrapper.only_repos .recommendations-people,.recommendations-wrapper.only_repos .recommendations-guides,.recommendations-wrapper.only_repos .recommendations-showcases{display:none}.recommendations-left{display:table-cell;width:50%;padding-top:10px;padding-right:30px}.recommendations-right{display:table-cell;width:50%;padding-top:10px;padding-left:30px}.recommended-repos{min-height:500px;margin-top:20px;list-style:none}.recommended-repo-item{position:relative;padding-right:80px;padding-left:50px;margin-bottom:30px}.recommended-repo-item .starring-container{position:absolute;top:0;right:0;float:right}.recommended-repo-item .author-avatar{float:left;margin-top:5px;margin-left:-50px;border-radius:3px}.recommended-repo-item .repo-meta{margin-top:5px;font-size:13px;color:#999}.recommended-repo-item .meta-info{margin-right:10px}.recommended-repo-item .repo-title{margin-bottom:4px;font-size:23px}.recommended-repo-item .repo-title .repo-author{font-weight:normal}.recommended-repo-item .repo-title .separator{margin:0 3px;font-weight:normal;color:#666}.recommended-repo-item .repo-description{margin-bottom:4px;font-size:15px;line-height:1.4}.recommended-repo-item.placeholder .author-avatar{width:40px;height:40px;border:dashed 2px #ccc}.recommended-repo-item.placeholder .repo-info{position:relative;top:4px;display:block;height:100px;border:dashed 2px #ccc;border-radius:3px}.language-circle{position:relative;top:-2px;display:inline-block;width:12px;height:12px;vertical-align:middle;border-radius:50%}.recommended-guides{margin-top:22px;list-style:none}.recommended-guide-item{margin-bottom:10px;font-size:23px}.recommended-guide-item .mega-octicon{position:relative;top:-2px;color:#aaa;vertical-align:middle}.recommended-guide-item.placeholder{height:48px;border:dashed 2px #ccc;border-radius:3px}.recommended-people-wrapper{display:table;width:100%;border-collapse:collapse}.recommended-people-left,.recommended-people-right{display:table-cell;width:48%}.recommended-people-left{padding-right:2%}.recommended-people-right{padding-left:2%}.recommended-people{list-style:none}.recommended-person-item{padding-left:50px;margin-bottom:20px;font-size:18px}.recommended-person-item .user-following-container{margin-top:5px}.recommended-person-item .avatar{position:relative;top:5px;float:left;margin-left:-50px}.recommended-person-item .person-meta{margin-top:4px;font-size:13px;color:#999}.recommended-person-item .meta-info{margin-right:10px}.recommended-person-item.placeholder .avatar{width:40px;height:40px;border:dashed 2px #ccc}.recommended-person-item.placeholder .person-placeholder{position:relative;top:5px;display:inline-block;width:140px;height:40px;border:dashed 2px #ccc;border-radius:3px}.recommended-showcase-link{display:table;float:left;width:48%;margin-bottom:4%;color:#fff}.recommended-showcase-link:nth-child(2n+1){margin-left:4%}.recommended-showcase{display:table-cell;height:100px;font-size:16px;text-align:center;vertical-align:middle;border-radius:3px}.releases-tag-list{width:100%;margin-bottom:20px;border-top:1px solid #eee}.releases-tag-list tr{border-bottom:1px solid #eee}.releases-tag-list td{padding:12px 0;vertical-align:top}.releases-tag-list td.date{padding-right:10px;white-space:nowrap}.releases-tag-list td.date a{color:#999}.releases-tag-list td.main{padding-right:10px}.releases-tag-list td.ancillary{white-space:nowrap;text-align:right}.releases-tag-list h4{margin:0;font-size:14px}.releases-tag-list p{margin:0;color:#999;font-size:13px}.releases-tag-list p a{color:#666;font-weight:bold}.tag-info h3{margin-top:0;margin-bottom:0;font-size:14px;line-height:20px}.tag-info h3 a{color:#666}.tag-info h3 a .tag-name{color:#000}.tag-references{margin:0;list-style-type:none;font-size:13px}.tag-references>li{margin-right:10px;display:inline-block}.tag-references>li.commit{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;line-height:20px}.tag-references>li a{color:#999;text-decoration:none}.tag-references>li a:hover{color:#4183c4}.release-downloads-header{margin-top:30px}.release-downloads{margin-top:10px;font-size:14px;border-top:1px solid #eee}.release-downloads li{display:block;padding-top:8px;padding-bottom:8px;border-bottom:1px solid #eee}.release-downloads .octicon{margin-top:2px;margin-right:5px}.release-timeline{position:relative;border-top:1px solid #eee}.release-timeline-tags{list-style-type:none}.release-timeline-tags>li{display:block}.release-timeline-tags>li:before{display:table;content:""}.release-timeline-tags>li:after{display:table;clear:both;content:""}.release-timeline-tags .date,.release-timeline-tags .main{position:relative;float:left;padding:20px}.release-timeline-tags .main{width:80%;border-left:2px solid #eee}.release-timeline-tags .date{width:20%;line-height:40px;text-align:right;color:#999;padding-left:0}.release-timeline-tags .date:after{box-sizing:border-box;content:" ";display:block;position:absolute;top:50%;right:-7px;z-index:10;width:12px;height:12px;margin-top:-6px;background-color:#eee;border:2px solid #fff;border-radius:6px}.release-timeline-tags .octicon-tag{padding-left:5px;color:#ccc}.release-timeline-tags .expander{position:relative;display:none}.release-timeline-tags .expander .date{padding-right:35px;line-height:20px}.release-timeline-tags .expander .date:after{display:none}.release-timeline-tags .expander .main{padding-left:35px;line-height:20px}.release-timeline-tags.is-collapsed .expander{display:block}.release-timeline-tags.is-collapsed>.collapsable{display:none}.release-timeline-tags .expander-dots{position:absolute;top:18px;left:-22px;width:44px;text-align:center;background-color:#eee;border:2px solid #fff;border-radius:4px;z-index:10;cursor:pointer}.release-timeline-tags .expander-dots .expander-dot{display:inline-block;margin-top:-2px;width:4px;height:4px;vertical-align:middle;border-radius:2px;background-color:#999}.release-timeline-tags .expander-text{font-weight:bold;color:#666;cursor:pointer}.release-timeline-tags .expander-text:hover{color:#4183c4}.release-timeline-tags .expander-text:hover .expander-dots{background-color:#4183c4}.release-timeline-tags .expander-text:hover .expander-dots .expander-dot{background-color:#fff}.release:before{display:table;content:""}.release:after{display:table;clear:both;content:""}.release .tag-references{margin-top:8px}.release .tag-references>li{display:block;margin:0 0 5px}.release-meta{float:left;width:20%;padding:40px 20px;text-align:right;vertical-align:top}.release-body{float:left;width:80%;padding:40px 20px;border-left:2px solid #eee}.release-body .commit-desc pre{white-space:pre-line}.release-title{margin:0 60px 0 0}.release-edit{float:right}.release-authorship{margin-top:5px;margin-bottom:20px;font-size:14px;color:#999}.release-authorship a{font-weight:bold;color:#666}.release-label{display:inline-block;margin-top:1px;margin-bottom:10px;padding:5px 10px;font-size:14px;font-weight:bold;color:#fff;background-color:#000;border-radius:3px}.release-label.latest{background-color:#6cc644}.release-label.draft{background-color:#bd2c00}.release-label.prerelease{background-color:#f93}.release-label a{color:#fff}.tag-detail{margin:20px 0;padding:12px 0 0 50px;border-top:1px solid #ddd}.tag-detail .octicon-tag{float:left;margin:10px 0 0 -50px;color:#bbb}.tag-detail h2{margin:10px 0 5px;font-size:20px;font-weight:normal}.tag-detail h2 .tag-name{font-weight:bold}.tag-detail p{margin:0 0 15px;font-size:16px;color:#999}.tag-detail .rule{margin-top:25px;border-color:#eee}.tag-detail .downloads .minibutton{margin-right:10px}.tag-detail .downloads .octicon{margin-right:0;vertical-align:0}.tag-detail .tag-references{margin:15px 0;font-size:14px;font-weight:bold}.tag-detail .tag-references>li{margin-right:20px}.tag-detail .tag-references>li a{color:#4183c4}.new-release .sidebar h3{margin:40px 0 -10px;font-size:14px}.new-release .sidebar h3:first-child{margin-top:15px}.new-release .default,.new-release .saved,.new-release .saving,.new-release .error{display:none}.new-release .error{color:#bd2c00}.new-release .is-default .default{display:inline-block}.new-release .is-saving .saving{display:inline-block}.new-release .is-saving .saving img{vertical-align:top}.new-release .is-saved .saved{display:inline-block}.drop-target .mega-octicon{vertical-align:middle;color:#e5e5e5}.drop-target p{padding:16px 0;height:65px;font-size:14px;text-align:center;border-color:#ddd;border-style:dashed}.drop-target .octospinner{vertical-align:middle}.uploaded-files{background:#fff;border-top-right-radius:3px;border-top-left-radius:3px}.uploaded-files.not-populated+.drop-target p{border-top-right-radius:3px;border-top-left-radius:3px;border-top:dashed 1px #ccc}.uploaded-files.is-populated{border:1px solid #ddd;border-bottom-color:#e5e5e5}.uploaded-files.is-populated+.drop-target p{border-top-right-radius:0;border-top-left-radius:0;border-top:0}.uploaded-files>li{list-style-type:none;margin:0;padding:8px 10px;border-top:1px solid #eee;line-height:22px}.uploaded-files>li.template{display:none}.uploaded-files>li .delete-pending{display:none}.uploaded-files>li.delete{background:#f9f9f9;color:#999}.uploaded-files>li.delete:nth-child(2){border-top-right-radius:3px;border-top-left-radius:3px}.uploaded-files>li.delete .delete-pending{display:block}.uploaded-files>li.delete .live{display:none}.uploaded-files>li.delete .filename{color:#bd2c00}.uploaded-files>li:nth-child(2){border-top:0}.uploaded-files .filename{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:11px}.uploaded-files .filesize{font-size:12px;color:#999}.uploaded-files input[type=text]{width:490px;margin-right:6px;padding:2px 4px;border-radius:2px}.uploaded-files .remove{float:right;margin-top:2px;color:#999}.uploaded-files .remove:hover{color:#bd2c00}.uploaded-files .undo{float:right}.upload-progress{background:#fff;border:0;border-radius:30px;box-shadow:0 1px 1px #fff,inset 0 1px 1px rgba(255,255,255,0.5);height:3px;margin-top:3px;position:relative}.upload-progress .upload-meter{background-color:#58b8f4;background-image:-webkit-linear-gradient(#8dd2f7, #58b8f4);background-image:linear-gradient(#8dd2f7, #58b8f4);background-repeat:repeat-x;border-radius:30px;height:100%;position:absolute;top:0}.release-body-form .previewable-comment-form .comment-form-head.tabnav{padding:0;background-color:transparent}.release-body-form .previewable-comment-form .write-content,.release-body-form .previewable-comment-form .preview-content{padding:0 0 10px}.release-tag-form .for-loading,.release-tag-form .for-empty,.release-tag-form .for-valid,.release-tag-form .for-invalid,.release-tag-form .for-duplicate,.release-tag-form .for-pending{display:none}.release-tag-form.is-loading .for-loading{display:block}.release-tag-form.is-empty .for-empty{display:block}.release-tag-form.is-valid .for-valid{display:block}.release-tag-form.is-invalid .for-invalid{display:block}.release-tag-form.is-duplicate .for-duplicate{display:block}.release-tag-form.is-pending .for-pending{display:block}.release-target-wrapper{display:inline-block}.release-target-wrapper.hidden{display:none}.releases-target-menu{display:inline-block;margin-left:5px}.releases-target-menu .minibutton{line-height:32px}.releases-target-menu .select-menu-button:before{top:14px}.release-show{border-top:1px solid #eee}.release-show .release-edit{display:none}.render-container{background:#ddd;text-align:center;padding:30px;line-height:0}.render-container .render-viewer{border:0;display:none;width:100%;height:100%}.render-container .octospinner{display:none}.render-container .render-viewer-error,.render-container .render-viewer-fatal,.render-container .render-viewer-invalid{display:none}.render-container.is-render-automatic .octospinner{display:inline-block}.render-container.is-render-requested .octospinner{display:inline-block}.render-container.is-render-requested.is-render-failed .render-viewer-error{display:inline-block}.render-container.is-render-requested.is-render-failed .render-viewer,.render-container.is-render-requested.is-render-failed .render-viewer-fatal,.render-container.is-render-requested.is-render-failed .render-viewer-invalid,.render-container.is-render-requested.is-render-failed .octospinner{display:none}.render-container.is-render-requested.is-render-failed-fatal .render-viewer-fatal{display:inline-block}.render-container.is-render-requested.is-render-failed-fatal .render-viewer,.render-container.is-render-requested.is-render-failed-fatal .render-viewer-error,.render-container.is-render-requested.is-render-failed-fatal .render-viewer-invalid .octospinner{display:none}.render-container.is-render-requested.is-render-failed-invalid .render-viewer-invalid{display:inline-block}.render-container.is-render-requested.is-render-failed-invalid .render-viewer,.render-container.is-render-requested.is-render-failed-invalid .render-viewer-error,.render-container.is-render-requested.is-render-failed-invalid .render-viewer-fatal,.render-container.is-render-requested.is-render-failed-invalid .octospinner{display:none}.render-container.is-render-ready.is-render-requested:not(.is-render-failed){background:none;height:500px;padding:0}.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer{display:block}.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer-error,.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer-fatal,.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .octospinner{display:none}.render-notice{padding:20px 15px;font-size:14px;color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}.pagehead.repohead.mirror h1,.pagehead.repohead.fork h1{margin-top:-5px;margin-bottom:15px;height:auto}.pagehead.repohead h1{color:#666;padding-left:34px;position:relative;float:left}.pagehead.repohead h1.private .mega-octicon:before{color:#e9dba5}.pagehead.repohead h1 .octicon-lock,.pagehead.repohead h1 .octicon-repo,.pagehead.repohead h1 .octicon-mirror,.pagehead.repohead h1 .octicon-repo-forked,.pagehead.repohead h1 .octicon-gist,.pagehead.repohead h1 .octicon-gist-secret{position:absolute;left:0;top:12px;line-height:32px;margin-top:-13px;color:#bbb}.pagehead.repohead .octicon-mirror{left:-3px}.pagehead.repohead .octicon-lock{top:10px}.pagehead.repohead span.fork-flag,.pagehead.repohead span.mirror-flag{display:block;font-size:11px;line-height:10px;white-space:nowrap}.mini-repo-list{list-style:none}.mini-repo-list>li:first-child .mini-repo-list-item{border-top:0}.mini-repo-list>li:last-child .mini-repo-list-item{border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.mini-repo-list .no-repo{padding:15px;color:#999;text-align:center}.mini-repo-list .repo-name{font-weight:bold}.mini-repo-list-item{position:relative;display:block;padding:6px 64px 6px 30px;font-size:14px;border-top:1px solid #e5e5e5}.mini-repo-list-item:hover{text-decoration:none}.mini-repo-list-item:hover .repo,.mini-repo-list-item:hover .owner{text-decoration:underline}.mini-repo-list-item .repo-icon{float:left;margin-top:2px;margin-left:-20px;color:#666}.mini-repo-list-item .repo-and-owner{max-width:220px}.mini-repo-list-item .owner{max-width:110px}.mini-repo-list-item .repo{font-weight:bold}.mini-repo-list-item .stars{position:absolute;top:0;right:10px;margin-top:6px;font-size:12px;color:#888}.mini-repo-list-item .repo-description{display:block;max-width:100%;font-size:12px;color:#777;line-height:21px}.popular-repos .mini-repo-list-item .stars{margin-top:16px}.popular-repos .no-description .mini-repo-list-item{padding-top:17px;padding-bottom:16px}.private .mini-repo-list-item{background-color:#fff9ea}.private .mini-repo-list-item .repo-icon{color:#a1882b}.filter-bar{padding:10px;background-color:#fafafa;border-bottom:1px solid #e5e5e5}.filter-bar:before{display:table;content:""}.filter-bar:after{display:table;clear:both;content:""}.filter-bar .filter-input{width:100%;min-height:26px;padding:3px 10px;font-size:11px;border-radius:12px}.user-repos .filter-bar{text-align:center}.filter-repos{padding-bottom:0}.repo-filterer{display:inline-block;margin-top:6px;list-style:none}.repo-filterer li{display:inline-block}.repo-filterer .repo-filter{display:inline-block;padding:5px 5px 6px;margin-right:5px;font-size:11px;color:#777;border-bottom:2px solid transparent}.repo-filterer .repo-filter:hover{text-decoration:none;border-bottom-color:#e5e5e5}.repo-filterer .repo-filter.filter-selected{color:#333;text-decoration:none;border-bottom-color:#d26911;outline:none}.more-repos{text-align:center;box-shadow:inset 0 1px 0 #e5e5e5}.more-repos img{margin:11px auto}.more-repos-link{display:block;padding:10px;color:#7ba9d6}.more-repos-link:hover{color:#4183c4;text-decoration:none}.more-repos-link.is-loading{text-indent:-9999px;cursor:default;background-image:url(/images/spinners/octocat-spinner-16px.gif);background-repeat:no-repeat;background-position:center center}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 2dppx){.more-repos-link.is-loading{background-image:url(/images/spinners/octocat-spinner-32.gif);background-size:16px 16px}}.empty-repo{font-size:14px}.empty-repo .url-box{display:block;width:100%;height:auto;padding:0;margin:0;border:0}.empty-repo .clone-urls{width:100%}.empty-repo .or-text{margin-right:5px;margin-left:5px}.empty-repo-setup-option .copyable-terminal-content{font-size:14px}.empty-repo-setup-option h3{margin-top:0}.empty-repo-setup-option p:last-child{margin-bottom:0}.give-access-setup-option{margin-bottom:20px}#change_default_branch{clear:left}#change_default_branch dt,#change_default_branch dd{float:left}#change_default_branch dt{margin:0 30px 0 0}.timeout{width:auto;height:300px;padding:0;margin:20px 0;background-color:transparent;border:0}.timeout h3{padding-top:100px;color:#999}.repo-container{min-height:345px}.repo-nav .counter{display:none}.repo-nav .full-word{display:none}.with-full-navigation .repo-nav .counter{display:block}.with-full-navigation .repo-nav .full-word{display:inline-block;width:128px;vertical-align:top}.only-with-full-nav{display:none}.with-full-navigation .only-with-full-nav{display:block}.repository-with-sidebar:before{display:table;content:""}.repository-with-sidebar:after{display:table;clear:both;content:""}.repository-with-sidebar .repository-sidebar{float:right;width:38px}.repository-with-sidebar .repository-sidebar .sidebar-button{width:100%;margin:0 0 10px;text-align:center}.repository-with-sidebar .repository-sidebar h3{margin-bottom:5px;font-size:11px;font-weight:normal;color:#999}.repository-with-sidebar .repository-sidebar .clone-url{display:none;margin-top:-5px}.repository-with-sidebar .repository-sidebar .clone-url.open{display:block}.repository-with-sidebar .repository-sidebar .clone-options{margin:8px 0 15px;font-size:11px;color:#666}.repository-with-sidebar .repository-sidebar .clone-options .octicon-question{position:relative;bottom:1px;font-size:11px;color:#000;cursor:pointer}.repository-with-sidebar .repository-content{float:left;width:920px}.repository-with-sidebar.with-full-navigation .repository-content{width:790px}.repository-with-sidebar.with-full-navigation .repository-sidebar{width:170px}.repository-with-sidebar.with-full-navigation .sunken-menu-group .tooltipped:before,.repository-with-sidebar.with-full-navigation .sunken-menu-group .tooltipped:after{display:none}.overall-summary{position:relative;margin-bottom:10px;border:1px solid #ddd;border-radius:3px}.overall-summary-bottomless{margin-bottom:0;border-bottom:0;border-radius:3px 3px 0 0}.numbers-summary li{display:table-cell;width:1%;padding:0;margin:0;text-align:center;white-space:nowrap;list-style-type:none}.numbers-summary a,.numbers-summary .nolink{display:block;padding:10px 0;color:#999;text-decoration:none}.numbers-summary .octicon{opacity:0.5}.numbers-summary a:hover{color:#4183c4}.numbers-summary a:hover .num{color:inherit}.repo-private-label{display:inline-block;padding:4px 5px 3px;font-size:11px;font-weight:300;line-height:11px;color:#a1882b;text-transform:uppercase;vertical-align:middle;background-color:#ffefc6;border-radius:3px}.repository-meta{margin:0 0 13px}.repository-meta:before{display:table;content:""}.repository-meta:after{display:table;clear:both;content:""}.repository-meta p{margin:0}.repository-meta .repository-description{display:inline;font-size:16px;color:#666;word-wrap:break-word}.repository-meta .repository-website{display:inline-block;font-size:16px}.repository-meta .edit-link{font-size:16px;color:#999}.repository-meta .edit-link a{color:#999}.repository-meta .repo-description-field{width:380px}.repository-meta .repo-website-field{width:270px}.repository-meta .edit-repository-meta{display:none;margin-bottom:5px}.repository-meta .edit-repository-meta .field{display:inline-block;margin-right:5px}.repository-meta .edit-repository-meta label{display:block;margin-bottom:6px;font-weight:bold;color:#333}.repository-meta.open .repository-description,.repository-meta.open .repository-website,.repository-meta.open .edit-link{display:none}.repository-meta.open .edit-repository-meta{display:block}.file-navigation:before{display:table;content:""}.file-navigation:after{display:table;clear:both;content:""}.file-navigation .select-menu,.file-navigation .button-group,.file-navigation .breadcrumb{margin-bottom:10px}.file-navigation.in-mid-page{margin-top:10px}.file-navigation .select-menu{margin-right:10px}.file-navigation .breadcrumb{float:left;margin-top:0}.file-navigation .breadcrumb .octicon-button.disabled{color:#bbb;cursor:default}.file-navigation .breadcrumb .octicon-button.disabled:hover{color:#bbb}.file-navigation .button-group{margin-left:10px}.file-navigation .compare-button{margin-right:5px}.minibutton.compact .octicon{margin-right:2px}.iconbutton .octicon{margin-right:0}.file-wrap{margin-bottom:10px;border:1px solid #ddd;border-top:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.file-wrap .include-fragment-error{display:none}.file-wrap.is-error .include-fragment-error{display:table-row}table.files{width:100%;background:#f8f8f8;border-radius:2px}table.files td{padding:6px 3px;line-height:20px;border-top:1px solid #eee}table.files td.icon{width:17px;padding-right:2px;padding-left:10px;color:#777}table.files td.icon .octicon-file-directory{color:#80a6cd}table.files td.icon .spinner{position:relative;top:3px;display:none;margin-top:-3px;margin-left:-2px}table.files td .simplified-path{color:#888}table.files td .css-truncate{max-width:100%}table.files td.content{max-width:180px}table.files td.message{max-width:442px;padding-left:10px;overflow:hidden;color:#888}table.files td.message .emoji{vertical-align:top}table.files td.message a{color:#888}table.files td.message a:hover{color:#4183c4}table.files td.age{max-width:140px;padding-right:10px;color:#888;text-align:right;white-space:nowrap}table.files tr.is-loading td.icon .octicon{display:none}table.files tr.is-loading td.icon .spinner{display:inline-block}table.files tr.up-tree{border-bottom:1px solid #eee}table.files tr.up-tree a{padding:3px 6px;margin-left:-3px;font-weight:bold;border-radius:2px}table.files tr.up-tree a:hover{background-color:#eee}table.files tbody tr:first-child td{border-top:0}.branch-infobar{padding:8px 8px 7px;font-size:11px;font-weight:bold;color:#999;background:#fafafa;border:1px solid #ccc;border-top-left-radius:3px;border-top-right-radius:3px}.branch-infobar p{float:left;margin:0}.branch-infobar .lightweight-actions{float:right;list-style-type:none}.branch-infobar .lightweight-actions>li{display:inline-block;margin:0 0 0 10px}.branch-infobar .lightweight-actions>li a{color:#999;text-decoration:none}.branch-infobar .lightweight-actions>li a:hover{color:#333}.branch-infobar .lightweight-actions>li .octicon{font-size:14px;color:#bbb}.branch-infobar+.commit-tease{border-top:0;border-radius:0}.url-box{width:100%;margin-top:10px;margin-left:-10px;padding:10px 10px 0;border-top:1px solid #ddd;height:26px}.url-box p{float:left;margin:0 0 0 5px;height:26px;line-height:26px;font-size:11px;color:#666}.url-box p strong{color:#000}.clone-urls{display:table;float:left;width:585px}.clone-url-button{display:table-cell;width:1%;vertical-align:top}.clone-url-button:first-child a{border-top-left-radius:3px;border-bottom-left-radius:3px}.clone-url-button>a{position:relative;display:block;padding:0 9px;margin-right:-1px;font-size:11px;font-weight:bold;line-height:24px;color:#333;text-decoration:none;text-shadow:0 1px 0 #fff;background-color:#eaeaea;background-image:-webkit-linear-gradient(#fafafa, #eaeaea);background-image:linear-gradient(#fafafa, #eaeaea);background-repeat:repeat-x;border:1px solid #ccc;white-space:nowrap;cursor:pointer}.clone-url-button>a:hover,.clone-url-button>a:active{z-index:3;color:#fff;text-decoration:none;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#3072b3;background-image:-webkit-linear-gradient(#599bcd, #3072b3);background-image:linear-gradient(#599bcd, #3072b3);background-repeat:repeat-x;border-color:#2a65a0}.clone-url-button>a:active{background-color:#3072b3;background-image:none;border-color:#25588c;box-shadow:inset 0 3px 5px rgba(0,0,0,0.15)}.clone-url-button+.clone-url-button>a{box-shadow:inset 1px 0 0 #fff}.clone-url-button+.clone-url-button>a:hover{box-shadow:none}.clone-url-button+.clone-url-button>a:active{box-shadow:inset 0 3px 5px rgba(0,0,0,0.15)}.clone-url-button.selected>a,.clone-url-button.selected>a:hover{z-index:2;color:#333;text-shadow:0 1px 0 rgba(255,255,255,0.6);border-color:#bbb;background-image:none;background-color:#ccc;background-color:#d5d5d5;background-image:-webkit-linear-gradient(#ccc, #d5d5d5);background-image:linear-gradient(#ccc, #d5d5d5);background-repeat:repeat-x;box-shadow:inset 0 2px 3px rgba(0,0,0,0.075)}input.url-field{position:relative;width:100%;min-height:26px;padding:0 5px;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;border-radius:0}input.url-field:focus{z-index:2}.url-box-clippy .zeroclipboard-button{border-radius:0 3px 3px 0;border-left:0;margin-left:0 !important}.pagehead.repohead .select-menu-button.with-count{float:none}.pagehead.repohead .select-menu .social-count{float:right}.pagehead.repohead .select-menu .select-menu-modal-holder{z-index:25}.auth-overview .sum{font-weight:bold}.auth-section{padding:15px 0;border-top:1px solid #eee}.auth-section:first-child{border-top:0}.auth-section:last-child{padding-bottom:0}.auth-section .inline-error{color:#999}.audit-log-activity{height:75px}.audit-log-activity .audit-day rect{fill:#1db34f;shape-rendering:crispedges}.audit-log-activity .audit-day .bar-base{fill:#777}.audit-log-activity text{fill:#777;font-size:10px;text-anchor:middle}.audit-log-map-container{position:relative;margin-bottom:10px}.audit-log-map-container .activity{position:absolute;text-align:center;z-index:99999;top:120px;left:450px;display:none}.audit-log-map-container .is-graph-loading .activity{display:block}.audit-search-form{position:relative;background:#fff;border-radius:2px}.audit-search-form:before{display:table;content:""}.audit-search-form:after{display:table;clear:both;content:""}.audit-search-form .suggester-container{top:0;left:0}.audit-log-map{overflow:hidden;height:325px;border-radius:3px;box-shadow:inset 1px 1px 0 rgba(0,0,0,0.2);background-color:#4183c4}.map-background{fill:#4183c4;cursor:-webkit-grab;cursor:-ie-grab;cursor:grab;pointer-events:all}.land{fill:none;stroke:#256aae;stroke-width:2;shape-rendering:crispedges}.country{cursor:pointer;fill:#d7c7ad;shape-rendering:crispedges}.country.hk{stroke:#a5967e}.country:hover{fill:#c8b28e}.country.active{fill:#f6e5ca}.borders{fill:none;stroke:#a5967e;shape-rendering:crispedges}.graticule{pointer-events:none;fill:none;stroke:#fff;stroke-opacity:0.2;shape-rendering:crispedges}.graticule :nth-child(2n){stroke-dasharray:2,2}.security-map-legend circle{stroke:#fff;stroke-width:1.5;fill-opacity:0}.security-map-legend text{fill:#fff;font-size:10px;text-anchor:end}.security-map-legend .link{stroke-width:1.5;stroke:#fff}.audit-point{pointer-events:none;fill:#bd2c00;fill-opacity:0.8;stroke:#bd2c00}.country-info{opacity:0;position:absolute;top:10px;right:10px;padding:10px;pointer-events:none;background:rgba(255,255,255,0.9);border-radius:2px}.audit-log-search{position:relative;margin-top:25px}.audit-log-search .member-info{width:500px}.audit-log-search .member-info .member-avatar{float:left;margin-right:15px}.audit-log-search .member-info .member-link{display:inline-block}.audit-log-search .member-info .member-list-avatar{margin-right:0}.audit-log-search .member-info .ghost{color:#777;display:inline-block}.audit-log-search .audit-action-info{margin-left:50px}.audit-log-search .audit-action-info a{color:#4183c4}.audit-log-search .blankslate{border-top-left-radius:0;border-top-right-radius:0}.audit-results-header{padding:15px 10px 15px 15px;border:1px solid #dcdcdc;border-bottom:0;background-color:#f7f7f7;border-top-left-radius:3px;border-top-right-radius:3px}.audit-results-header h2{display:inline-block;padding:0;margin:0;font-size:16px}.audit-results-header .audit-search-form{margin-top:-8px}.audit-search-clear{padding:10px;border:1px solid #e5e5e5;border-bottom:0}.audit-search-clear .issues-reset-query{margin-bottom:0}.audit-action-info{margin-top:3px;font-weight:normal;font-size:12px;color:#999}.audit-action-info .context{color:#333}.audit-type{width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.audit-type .octicon{float:left;margin-right:3px;font-weight:normal}.audit-type .repo{color:#f93}.audit-type .team{color:#6cc644}.audit-type .user{color:#6e5494}.audit-type .oauth_access{color:#bd2c00}.audit-type .hook{color:#e1bf4e}.export-actions{display:inline-block;margin-left:15px}.export-actions a{color:#999;margin-top:-3px}.export-actions a:hover{color:#4183c4;text-decoration:none}.export-status{display:inline-block;width:300px;margin-left:5px;font-size:12px;color:#777}.export-status span{display:none}.export-status .loader{display:none;float:left;margin-right:5px}.export-status.is-aggregating .aggregating-message,.export-status.is-uploading .upload-message,.export-status.is-downloading .downloading-message,.export-status.is-error .error-message,.export-status.is-loading .loader{display:block}.export-phrase{margin-top:5px}.export-phrase pre{border-left:1px solid #eee;color:#666;font-size:11px;padding-left:10px;white-space:pre-wrap;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace}.audit-export-form{padding:20px}.audit-export-form #date-pickers:before{display:table;content:""}.audit-export-form #date-pickers:after{display:table;clear:both;content:""}.audit-export-form #date-pickers label{font-size:14px}.audit-export-form #date-pickers dl{float:left}.audit-export-form #date-pickers #start-date .form{margin-right:50px}.context-loader-container .large-format-loader{position:fixed;top:0;left:0;bottom:0;right:0;padding-top:190px;background:rgba(255,255,255,0.8);z-index:9999;text-align:center;color:#999}.profile-picture{margin:10px 0 0}.profile-picture p{float:left;margin-top:7px}.profile-picture img{float:left;margin:0 10px 0 0;border-radius:3px}.app-owner{margin:10px 0 -10px}.edit-profile-avatar .drag-and-drop{padding:0;color:#666;border-width:0}.edit-profile-avatar input{cursor:pointer}.edit-profile-avatar.is-bad-file{border:0}.edit-profile-avatar .manual-file-chooser{position:absolute;top:0;left:0;width:146px;height:34px;margin-left:0;padding:0;cursor:pointer}.button-change-profile-picture{overflow:hidden}.croppable-avatar{display:none}.profile-picture-cropper{max-width:400px;text-align:center;margin:0 auto 15px}.profile-picture-cropper>img{max-width:100%}.profile-picture-cropper .jcrop-holder{display:inline-block}.profile-picture-spinner{display:inline-block;background-image:url(/images/spinners/octocat-spinner-128.gif);background-repeat:no-repeat;background-position:center;background-size:64px 64px}.profile-picture-spinner.hidden{display:none}.avatar-upload{float:left;width:340px;margin-left:20px}.avatar-upload .flash{width:100%;padding:30px 15px;border:dashed 1px #bd2c00;box-shadow:none}.avatar-upload .upload-state{display:none;padding:10px 0}.avatar-upload .upload-state p{margin:0;font-size:12px;color:#999}.avatar-upload .avatar-upload .octicon{display:inline-block}.is-default .avatar-upload .default{display:block}.is-uploading .avatar-upload .loading{display:block;padding:0}.is-uploading .avatar-upload .loading img{vertical-align:top}.is-uploading .avatar-upload .button-change-profile-picture{display:none}.is-bad-file .avatar-upload .bad-file{display:block;margin:0}.is-too-big .avatar-upload .too-big{display:block;margin:0}.is-bad-dimensions .avatar-upload .bad-dimensions{display:block;margin:0}.is-failed .avatar-upload .failed-request{display:block;margin:0}.is-empty .avatar-upload .file-empty{display:block;margin:0}.is-bad-browser .avatar-upload .bad-browser{display:block;margin:0}dl.new-email-form{padding:10px 10px 0;margin:0 -10px 10px;border-top:1px solid #e5e5e5}span.label.default{margin-left:4px;padding:4px 6px;background-color:#6cc644;color:#fff;border-radius:3px}span.label.visibility{margin-left:4px;padding:4px 6px;background-color:#999;color:#fff;border-radius:3px}.email-actions{float:right}.email-actions>span{float:left}.email-actions form{display:inline}.email-actions span.label{font-size:13px;color:#999;padding:0 10px}.email-actions .octicon-alert{color:#ca5633}.boxed-group .fork-flag{margin-left:16px;font-size:12px;color:#999}li.ssh-key{position:relative;line-height:18px;padding:15px}li.ssh-key .button{float:right;margin-top:4px}li.ssh-key .team-label-ldap{float:right}li.ssh-key .ssh-key-state-indicator{float:left;width:8px;height:8px;margin-top:10px;border-radius:5px}li.ssh-key .ssh-key-state-indicator.recent{background-color:#6cc644;box-shadow:0 0 10px rgba(108,198,68,0.5)}li.ssh-key .ssh-key-state-indicator.not-recent{box-shadow:0 1px 0 #fff;background-color:#ccc;background-image:-webkit-linear-gradient(#aaa, #ccc);background-image:linear-gradient(#aaa, #ccc);background-repeat:repeat-x}li.ssh-key .ssh-key-icon{float:left;width:32px;margin-top:1px;margin-left:15px;text-align:center}.ssh-key-details{position:relative;margin-left:70px;margin-right:150px}.ssh-key-details .ssh-key-title{display:block;max-width:360px}.ssh-key-fingerprint{display:block;font-weight:normal;color:#999}#notification-center .overview{padding:0 10px 10px;border-bottom:1px solid #ddd}.oauth-stats dl.keys{float:right;margin:0;text-align:right}.oauth-stats dl.keys dt{color:#999;font-weight:bold}.oauth-stats dl.keys dd{color:#333;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace}.user-count{float:left;margin:12px 0 0;font-size:36px;color:#999;font-weight:300}.access-token-group .boxed-group-inner .help{margin-top:0}.access-token .zeroclipboard-link{display:inline-block}.access-token.new-token{background-color:rgba(108,198,68,0.1)}.access-token.new-token .octicon-check{color:#6cc644}.access-token .token-description{max-width:450px}.access-token .token{font-size:14px}.token-scope{display:inline-block;width:220px;margin:0;padding:5px 0 5px 20px;color:#333}.boxed-group.authorized-applications .boxed-action{color:#999;font-size:12px;line-height:25px}.callback-urls dl dd input[type=text]{width:100%}.callback-urls.has-many .callback-url-action-cell{display:table-cell}.callback-description{margin-top:20px}.callback-description .octicon{padding-left:0}.callback-url .label{display:none;width:64px;text-align:center}.callback-url.is-default-callback .label{display:inline-block}.callback-url.is-default-callback .button{display:none}.callback-url-wrap{display:table;width:100%}.callback-url-field-cell{display:table-cell}.callback-url-action-cell{display:none;width:70px;text-align:right}.boxed-group.application-show-group .logo-upload{float:right;width:142px;background-color:#eee;position:relative}.boxed-group.application-show-group .logo-upload a.delete{position:absolute;right:0;padding:5px;display:none}.boxed-group.application-show-group .logo-upload a.delete:hover{color:#bd2c00}.boxed-group.application-show-group .logo-box{border:1px solid #ccc;border-top-left-radius:3px;border-top-right-radius:3px;height:140px}.boxed-group.application-show-group .logo-box img{height:140px;width:140px;border-radius:2px 2px 0 0;display:none}.boxed-group.application-show-group .logo-placeholder{height:140px;width:140px;color:#999;text-align:center;text-shadow:0 1px 0 #fff}.boxed-group.application-show-group .logo-placeholder span{margin:45px 0 0}.boxed-group.application-show-group .logo-placeholder p{margin:0;font-size:16px}.boxed-group.application-show-group .has-uploaded-logo .logo-placeholder,.boxed-group.application-show-group .has-uploaded-logo .or{display:none}.boxed-group.application-show-group .has-uploaded-logo:hover a.delete{display:block}.boxed-group.application-show-group .has-uploaded-logo .logo-box img{display:block}.boxed-group.application-show-group dl.form>dd input[type="text"].wide{width:460px}.boxed-group.application-show-group dl.form>dd input[type="textarea"].short{height:50px;min-height:50px}.application-show-group .errored .note{display:none}.application-show-group .drag-and-drop{padding:8px 5px 7px;text-align:center}.application-show-group .drag-and-drop img{vertical-align:bottom;margin-bottom:1px}.application-show-group .drag-and-drop span{padding:0}.application-show-group .dragover .logo-box{box-shadow:#c9ff00 0 0 3px}.application-show-group .is-uploading .loading{display:block}.application-show-group .is-uploading .default{display:none}.application-show-group .is-failed .failed-request{display:block}.application-show-group .is-failed .default{display:none}.application-show-group .is-bad-file .bad-file{display:block}.application-show-group .is-bad-file .default{display:none}.application-show-group .is-too-big .file-too-big{display:block}.application-show-group .is-too-big .default{display:none}.application-show-group .is-default .default{display:block}.security-history .security-history-timestamp{float:right;color:#999}table.security-history-detail{width:100%;font-size:12px}table.security-history-detail td{max-width:200px;word-wrap:break-word}.org-two-factor .button{float:right;margin:10px 0 0 20px}.org-two-factor .flash-global{margin-top:0}.two-factor-disabled .flash-global{display:block}.settings-email .email-actions .settings-remove-email{float:right;margin-left:5px;padding-right:7px;padding-left:7px;line-height:24px;color:#bd2c00}.settings-email .email-actions .settings-disabled-remove-email{display:none}.settings-email:only-child .email-actions .settings-remove-email{display:none}.settings-email:only-child .email-actions .settings-disabled-remove-email{display:block;cursor:default;color:#999}.settings-email .octicon-info{padding-left:5px}.settings-email .public.label{display:inline}.settings-email .private.label{display:none}.settings-email.private .public.label{display:none}.settings-email.private .private.label{display:inline}.two-factor-intro{width:675px;margin:40px auto 0}.two-factor-intro .two-factor-graphic{margin:20px 0}.two-factor-intro .two-factor-explain{margin:0 0 40px;padding:0;font-size:13px;list-style:none}.two-factor-intro .two-factor-explain li{float:left;margin:0;padding:0}.two-factor-intro .two-factor-explain .step-one{width:185px;margin-right:36px}.two-factor-intro .two-factor-explain .step-two{width:230px;margin-right:42px}.two-factor-intro .two-factor-explain .step-three{width:180px}.two-factor-graphic{background-image:url(/images/modules/settings/2fa_guide.png);background-repeat:no-repeat;width:675px;height:135px}.two-factor-recovery-codes{height:240px;margin-top:15px;padding-left:60px}.two-factor-recovery-code{display:inline-block;width:49%;line-height:1.1}.two-factor-recovery-code::before{content:"\25a1";font-size:26px;margin-right:10px;color:#eaeaea;position:relative;top:1px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 2dppx){.two-factor-graphic{background-image:url(/images/modules/settings/2fa_guide@2x.png);background-size:675px 135px}}.yubicat-box .yubicat-device{margin-bottom:10px}.yubicat-box .yubicat-device .yubicat-device-success{margin-left:10px;color:#55a532}.yubicat-box .yubicat-device .yubicat-device-success .octicon{color:#6cc644}.yubicat-box .yubicat-device .yubicat-device-details{display:inline-block;vertical-align:middle;background-color:#e8f0f8;border-radius:3px;line-height:26px;color:rgba(0,0,0,0.5);padding:0 8px}.yubicat-box .yubicat-device .yubicat-device-details .yubicat-device-id{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-weight:bold}.yubicat-box .yubicat-device .yubicat-device-details .octicon{position:relative;top:1px}.yubicat-box .yubicat-device .yubicat-delete{text-decoration:none}.yubicat-box .yubicat-device .yubicat-delete .octicon{width:16px;text-align:center}.yubicat-box .yubicat-device.is-sending .yubicat-delete{display:none}.yubicat-box .yubicat-device.is-sending .spinner{position:relative;top:3px}.yubicat-box .new-yubicat{position:relative}.yubicat-box .new-yubicat .yubicat-otp-field{width:320px}.yubicat-box .new-yubicat .add-yubicat-form{display:none}.yubicat-box .new-yubicat.is-active .add-yubicat-link{display:none}.yubicat-box .new-yubicat.is-active .add-yubicat-form{display:block}.yubicat-box .new-yubicat.is-sending .spinner{position:absolute;top:8px;left:296px}.yubicat-box .new-yubicat.is-showing-error .fallback-error-message{display:block}.yubicat-box .new-yubicat .flash{padding:10px;margin-bottom:10px}.markdown-body .sms-or-app{width:100%;margin:0;padding:40px 0 0;border-top:1px solid #ddd}.markdown-body .sms-or-app:before{display:table;content:""}.markdown-body .sms-or-app:after{display:table;clear:both;content:""}.markdown-body .sms-or-app li{float:left;width:325px;padding:0;list-style:none}.markdown-body .sms-or-app li:first-child{margin-right:25px}.markdown-body .sms-or-app li .button{display:block;text-align:center;margin:10px 0;padding-top:12px;padding-bottom:12px;font-size:15px;height:100%;width:100%}.markdown-body .sms-or-app small{font-size:80%}.markdown-body .app-only{padding:20px 0 0}.markdown-body .app-only li{float:none;width:auto}.markdown-body .app-only li .button{display:inline-block;width:auto;padding-left:20px;padding-right:20px}.two-factor-setup-container{width:600px;margin:0 auto}.two-factor-setup-container .form label{font-style:normal}.two-factor-setup-container .form dd{margin:0;padding:0}.two-factor-setup-container .octicon-alert{color:#bd2c00}.two-factor-setup-container .error-icon{position:relative;left:5px;top:2px;color:#bd2c00}.two-factor-setup-container .sent-message{position:relative;left:5px;top:2px;color:#6cc644}.two-factor-setup-container .select-menu{float:left}.two-factor-setup-container .select-menu .minibutton{padding-top:4px;padding-bottom:4px;margin-right:5px}.two-factor-setup-container .select-menu .minibutton input[type="radio"],.two-factor-setup-container .select-menu .minibutton .country{display:none}.two-factor-setup-container .select-menu .minibutton .country-code{width:auto}.two-factor-setup-container .select-menu .select-menu-button:before{top:14px}.two-factor-setup-container .select-menu .country-code{display:inline-block;margin-right:8px;width:35px}.container.two-factor-toggle{width:700px}.two-factor-step-container{margin:0 0 20px;font-size:86.6667%}.two-factor-step-container .sms-form .form{margin-left:15px}.two-factor-step-container .form label{color:#777}.two-factor-step-container:last-of-type{margin-bottom:0;padding-bottom:0;border-bottom:0}.two-factor-step-container h4{margin:0;font-size:13px}.two-factor-step-container p:last-child{margin-bottom:0}.two-factor-toggle{margin-top:40px}.two-factor-toggle .two-factor-status{padding:20px 0;margin:0 0 20px;border-bottom:1px solid #eaeaea;color:#777}.two-factor-toggle .two-factor-status p{margin:0}.two-factor-toggle .two-factor-status button{position:relative;top:-3px;float:right;background:none;border:0;color:#4183c4;font-weight:normal}.two-factor-toggle .two-factor-on{margin-right:5px;padding:3px 5px;border-radius:2px;background-color:#6cc644;color:#fff;text-shadow:0 1px 1px rgba(0,0,0,0.1)}.two-factor-settings-group{position:relative;margin:0 0 20px;padding:0 0 20px 220px;border-bottom:1px solid #ddd}.two-factor-settings-group h3{position:absolute;top:-15px;left:0;width:200px;font-size:14px}.two-factor-settings-group h3 .octicon{position:absolute;left:-24px;color:#bd2c00}.two-factor-settings-group li{list-style:none;line-height:1.5}.github-access-banner{position:relative;margin:0 0 20px;padding:10px 20px 10px 70px;border:1px solid #ddd;border-radius:3px;font-size:14px}.github-access-banner .mega-octicon{position:absolute;left:20px;top:20px;color:#bd2c00}.error-icon,.spinner,.sent-message,.sms-error-message,.fallback-error-message,#text-code{display:none}.is-sending .spinner{display:inline-block}.is-sent .sent-message{display:inline-block}.is-not-sent .sms-error-message{display:block}.is-not-sent .error-icon{display:inline-block}.two-factor-secret{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:13px}.markdown-body .qr-code-table,.qr-code-table{width:auto;float:right;margin:0 0 0 40px;border:1px solid #ddd}.markdown-body .qr-code-table tr,.qr-code-table tr{background:transparent;border:0}.markdown-body .qr-code-table th,.markdown-body .qr-code-table td,.qr-code-table th,.qr-code-table td{border:0;padding:0}.markdown-body .qr-code-table td,.qr-code-table td{width:3px;height:3px}.markdown-body .qr-code-table .black,.qr-code-table .black{background:#000}.markdown-body .qr-code-table .white,.qr-code-table .white{background:#fff}.markdown-body .two-factor-actions{clear:both;padding:20px 0 0;margin:20px 0 0;border-top:1px solid #eaeaea;font-size:13px}.markdown-body .two-factor-actions ul{width:600px;margin:0;padding:0}.markdown-body .two-factor-actions li{list-style:none;display:inline-block;margin-right:10px}.two-factor-banner{position:relative;padding-left:60px;margin:40px auto;width:700px;background:#fff;border:1px solid #ddd;color:#444}.two-factor-banner:hover{border-color:#ddd}.two-factor-banner .mega-octicon{position:absolute;top:15px;left:15px;color:#bd2c00}.two-factor-banner h2{margin-top:0;line-height:32px}.two-factor-banner p{margin-top:0}.two-factor-mini-banner{display:block;width:100%;margin:0 0 20px;padding:15px 15px 15px 42px;background:#fff}.two-factor-mini-banner .minibutton{position:relative;top:-4px;float:right}.two-factor-mini-banner p{margin-bottom:0;line-height:1.5}.two-factor-mini-banner .octicon{position:absolute;top:15px;left:15px;color:#bd2c00}.orgs-settings{margin-bottom:15px}.confirmation-phrase{font-weight:normal;font-style:italic}.do-not-copy-me{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}li.session-device{position:relative;line-height:18px;padding:15px;background-color:#fafafa;color:#999}li.session-device .button{float:right;margin-top:4px}li.session-device .session-state-indicator{float:left;width:8px;height:8px;margin-top:10px;border-radius:5px}li.session-device .session-state-indicator.recent{background-color:#6cc644;box-shadow:0 0 10px rgba(108,198,68,0.5)}li.session-device .session-state-indicator.not-recent{box-shadow:0 1px 0 #fff;background-color:#ccc;background-image:-webkit-linear-gradient(#aaa, #ccc);background-image:linear-gradient(#aaa, #ccc);background-repeat:repeat-x}li.session-device .session-icon{float:left;width:32px;margin-top:1px;margin-left:15px;text-align:center;color:#bbb}li.session-device .sessions-more-info{position:relative;display:none;margin-top:10px}li.session-device.session-current{background-color:#fff}li.session-device.session-current .session-last-accessed{color:#777}li.session-device.session-current .sessions-more-info{color:#777}li.session-device.session-current .sessions-more-info:after{border-top-color:#fff}li.session-device.session-current .mega-octicon{color:#777}.session-details{position:relative;width:350px;margin-left:70px}.session-details:hover .octicon{color:#4183c4;cursor:pointer}.session-details.open .sessions-more-info{display:block}.session-title{display:block}.collaborators .collab-list{border-bottom-width:0}.collaborators .collab-list-item:first-child .collab-list-cell{border-top-width:0}.collaborators .collab-list-cell{padding-top:15px;padding-bottom:15px;vertical-align:middle}.collaborators .collab-meta{width:140px}.collaborators .collab-permission{text-align:center}.collaborators .collab-remove{padding-right:20px;text-align:right}.collaborators .collab-remove .remove-link{color:#999}.collaborators .collab-remove .remove-link:hover{color:#bd2c00}.collaborators .collab-team-link{width:300px}.collaborators .collab-team-link:hover{text-decoration:none}.collaborators .collab-team-link .avatar{float:left;margin-top:1px;margin-right:10px}.collaborators .collab-team-link.disabled{pointer-events:none}.collaborators .collab-info{color:#666}.collaborators .collab-info .description{padding-right:50px;margin-top:3px;margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collaborators .collab-info .collab-name{display:block;font-size:14px}.access-sub-heading{float:right;font-weight:normal;line-height:1.4;color:#777}.access-form-wrapper{padding:10px;background-color:#fcfcfc;border-top:1px solid #ddd;border-radius:0 0 3px 3px}.access-flash{margin-bottom:10px;margin-left:10px;margin-right:10px;padding:8px}.repo-access-group .blankslate{display:none}.repo-access-group.is-empty .blankslate{display:block}.repo-access-group.no-form .add-team-form{display:none}.repo-access-group .select-menu-item.has-access{display:none}.access-scope-label{display:inline-block;border-radius:4px;padding:3px 5px;color:#fff;text-shadow:-1px -1px 0 rgba(0,0,0,0.2);margin:5px 2px;opacity:0.8}.access-scope-label.repo-scope{background:#e80c02}.access-scope-label.public-repo-scope{background:#ff9e00}.access-scope-label.user-scope{background:#666}.access-scope-label.gist-scope{background:#6cc644}.oauth-pending-deletion-list-item{background-color:#fafafa;box-shadow:inset 0 0 8px #eee}.oauth-pending-deletion-list-item:hover{background-color:#fafafa}.oauth-pending-deletion-list-item .oauth-pending-deletion{display:inline}.oauth-pending-deletion-list-item .active,.oauth-pending-deletion-list-item .oauth-application-users{display:none}.oauth-pending-deletion{display:none;width:100%}.boxed-group-list .access-level{color:#999}.boxed-group-list .access-level.css-truncate-target{max-width:500px}.logged_out.signup .header-logged-out .container,.logged_out.signup .site-footer{width:750px}.logged_out.signup .site-footer{margin-right:auto;margin-left:auto}.logged_out.signup .site-footer .octicon-mark-github{top:30px}.logged_out.signup .header-actions .primary,.logged_out.signup .site-footer-links,.logged_out.signup .site-search{display:none}.setup-wrapper{width:750px;padding-top:30px;margin:0 auto;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif}.setup-header{overflow:hidden;padding-bottom:20px;margin:0 auto 30px;text-align:left;text-shadow:0 1px 0 white;border-bottom:1px solid #ddd}.setup-header h1{margin-top:0;margin-bottom:0;font-size:45px;font-weight:normal;letter-spacing:-1px}.setup-header h1 .mega-octicon{color:#bbb}.setup-header .lead{margin-top:2px;margin-bottom:0;font-size:21px}.setup-header .lead a{color:#777}.setup-header .lead a:hover{color:#4183c4;text-decoration:none}.setup-org{padding-bottom:0;border-bottom:0}.setup-main{float:left;width:450px}.setup-main.without-secondary{margin-left:150px}.setup-secondary{float:right;width:250px}.setup-secondary .info{padding-top:0;padding-bottom:0;margin-top:-10px;color:#777;font-size:12px;line-height:18px;text-align:center}.setup-info-module{margin-bottom:30px;background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.075)}.setup-info-module h2{padding:15px;margin-top:0;margin-bottom:15px;overflow:hidden;font-size:16px;border-bottom:1px solid #ddd}.setup-info-module h2 .price{float:right;font-weight:bold;color:#777}.setup-info-module h3{padding:0 15px;margin:0 0 -7px;font-size:14px}.setup-info-module p{padding:0 15px;margin:15px 0}.setup-info-module .setup-section-title{margin-bottom:10px}.features-list{padding:0 15px 15px;margin:0;font-size:14px;list-style:none}.features-list li{margin-top:10px}.features-list li:first-child{margin-top:0}.features-list .list-divider{margin:15px -15px;border-top:1px solid #eee}.features-list .octicon{margin-right:5px;color:#60b044}.features-list.features-list-org{padding-bottom:0}.setup-form-container .setup-form-title{margin-top:0;font-size:16px}.setup-form-container .secure{float:right;margin-top:2px;color:#60b044;font-size:11px;text-transform:uppercase}.setup-form-container hr{margin-top:25px;margin-bottom:25px}.setup-form-container .form-actions{padding-top:0;padding-bottom:0;text-align:left}.team-member-container{margin-bottom:20px}.team-member-container .team-member-username{line-height:1.2}.setup-form{padding-bottom:15px}.setup-form .form dd input[type="text"],.setup-form .form dd input[type="password"],.setup-form .form dd input[type="email"]{width:100%}.setup-form .form dd input[type="text"].short,.setup-form .form dd input[type="password"].short,.setup-form .form dd input[type="email"].short{width:250px}.setup-form dd{position:relative}.setup-form dd .octicon{position:absolute;right:25px;top:8px}.setup-form .octicon-alert:before{color:#bd2c00}.setup-form .octicon-check:before{color:#6cc644}.setup-form .text-muted{margin-top:5px}.setup-form .tos-info,.setup-form .setup-organization-next{margin:15px 0;border-top:1px solid #eee;border-bottom:1px solid #eee}.setup-form .tos-info{padding:15px 0}.setup-form .setup-organization-next{padding-top:15px;padding-bottom:15px}.setup-form .setup-plans{margin-bottom:25px;border:solid 1px #ccc;border-collapse:separate;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.075);overflow:hidden}.setup-form .setup-plans tr.selected{background-color:#f0f7fd}.setup-form .setup-plans th,.setup-form .setup-plans td{vertical-align:middle;border-bottom:1px solid #ccc}.setup-form .setup-plans .name{font-weight:bold}.setup-form .setup-plans .choose_plan input[type=radio]{display:none}.setup-creditcard-form .cc-extras{margin-bottom:15px}.setup-creditcard-form .expiration-form{width:120px}.setup-creditcard-form .expiration-form dd{line-height:32px}.setup-creditcard-form .expiration-form,.setup-creditcard-form .cvv-form,.setup-creditcard-form .country-form,.setup-creditcard-form .state-form{word-wrap:normal;float:left;margin:0}.setup-creditcard-form .form dd input.input-cvv{width:130px}.setup-creditcard-form .form select.select-country{width:162px;margin-right:5px}.setup-creditcard-form .form select.select-state{width:84px}.setup-creditcard-form.is-vat-country .vat-field{display:block}.setup-creditcard-form.is-international .form select.select-country{width:250px}.setup-creditcard-form.is-international .state-form{display:none}.setup-creditcard-form dd .octicon-credit-card{position:inherit}.setup-creditcard-form .enter-new-card{display:none}.setup-creditcard-form.has-credit-card .enter-new-card{display:inline-block}.setup-creditcard-form.has-credit-card .card-select-number-field,.setup-creditcard-form.has-credit-card .cancel-enter-new-card,.setup-creditcard-form.has-credit-card .cards-select{display:none}.setup-creditcard-form .vat-field{display:none}.setup-creditcard-form .vat-field.prefilled{display:block}.setup-creditcard-form .help-text{font-size:80%;font-weight:normal;color:#777}.collection-head{height:225px;margin-top:-20px;margin-bottom:20px;background:#555 url(/images/modules/home/octicons-bg.png) center repeat;box-shadow:inset 0 10px 20px rgba(0,0,0,0.1);text-shadow:0 1px 2px rgba(0,0,0,0.3);color:#fff}.collection-head .collection-info{margin:0}.collection-head .collection-info .meta-info{margin-right:15px}.collection-head .collection-info .avatar{background-color:rgba(255,255,255,0.7);border:1px solid rgba(255,255,255,0.7)}.collection-head .container{position:relative}.collection-head .draft-tag{position:absolute;top:0;left:0}.collection-title{display:table-cell;height:225px;vertical-align:middle}.collection-header{margin-top:0;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:45px;font-weight:normal}.collection-description{position:relative;font-size:16px}.collection-page .collection-info{margin-top:10px;margin-bottom:20px;font-size:13px;color:#999}.collection-page .column.main{margin-right:260px !important}.collection-page .column.sidebar{width:240px}.collection-page .other-content{padding:20px 0 20px 20px;border-left:1px solid #f1f1f1}.collection-page .other-content .subnav-search{margin-left:0}.collection-page .other-content input.subnav-search-input{width:100%}.collection-page .other-content-title{margin-top:40px}.collection-page .other-content-title:first-child{margin-top:0}.side-collection-list{margin:0;list-style-type:none}.side-collection-link{display:table;width:100%;height:100px;color:#fff}.side-collection-item-title{font-size:16px;font-weight:100}.side-collection-image{background:#555 url(/images/modules/home/octicons-bg.png) center repeat;box-shadow:inset 0 10px 20px rgba(0,0,0,0.1);text-shadow:0 1px 2px rgba(0,0,0,0.3);color:#fff;display:table-cell;width:100%;height:100%;margin-bottom:5px;text-align:center;vertical-align:middle;border-radius:3px}.side-collection-list-item{margin-bottom:20px}.collection-tools{list-style-type:none;margin-bottom:10px;font-size:15px}.collection-tools .edit-link{color:#333}.collection-tools .edit-link:hover{color:#4183c4;cursor:pointer}.collection-tools .octicon{margin-right:5px}.collection-tools .select-menu-button{position:relative;display:inline-block;color:#333}.collection-tools .select-menu-button:hover{color:#4183c4;cursor:pointer}.collection-tool{margin-left:20px}.collection-search-results em{padding:0.1em;background-color:#faffa6}.collection-search-result{margin-bottom:40px;list-style-type:none}.collection-search-result-title{margin-top:0}.collection-search-page .search-results-info{line-height:33px;float:right;margin-left:10px;font-size:15px}.draft-tag{padding:5px 10px;font-weight:bold;color:#eee;background-color:#404040}.collection-card{position:relative;float:left;width:313px;margin-right:20px;margin-bottom:20px;list-style-type:none;background:#f7f7f7;border:1px solid #ddd;border-radius:3px}.collection-card .draft-tag{position:absolute;top:-1px;left:10px}.collection-card:nth-child(3n+3){margin-right:0}.collection-card-title{padding:0 15px;margin:10px 0;display:table-cell;width:100%;height:100%;font-size:19px;font-weight:bold;text-align:center;vertical-align:middle}.collection-card-body{padding:0 15px;margin:10px 0;height:6em;margin-top:0;overflow:hidden;font-size:15px;line-height:1.5em}.collection-card-image{position:relative;display:table;width:313px;height:120px;margin:-1px;margin-bottom:15px;background:#555 url(/images/modules/home/octicons-bg.png) center repeat;box-shadow:inset 0 10px 20px rgba(0,0,0,0.1);text-shadow:0 1px 2px rgba(0,0,0,0.3);color:#fff;border-top-right-radius:3px;border-top-left-radius:3px}.collection-card-meta{padding:0 15px;margin-top:5px;margin-bottom:15px;color:#777}.collection-card-meta .meta-info{margin-right:10px}.collection-card-meta .last-updated{float:right;margin-right:0}.collection-listing-search{margin-bottom:20px}.collection-listing-search .subnav-search{margin-left:0;margin-right:25%}.collection-feed-icon{float:right;margin-top:28px}.featured-grid{position:relative;list-style:none;margin-top:-10px}.featured-grid-outer{position:relative;height:100%}.featured-grid-more-info{padding:20px}.featured-showcase-meta{position:absolute;bottom:15px;left:20px}.featured-showcase-meta .meta-info{margin-right:10px}.featured-grid-link{display:table;width:100%;height:100%;border-radius:5px;background:#555 url(/images/modules/home/octicons-bg.png) center repeat;box-shadow:inset 0 10px 20px rgba(0,0,0,0.1);text-shadow:0 1px 2px rgba(0,0,0,0.3);color:#fff}.featured-grid-inner{display:table-cell;padding:10px 20px;font-size:15px;text-align:center;vertical-align:middle}.grid-item{position:relative;display:block;float:left;width:25%;height:122.5px;padding:10px}.grid-item-0{position:absolute;width:50%;height:245px}.grid-item-1,.grid-item-2{margin-right:25%;margin-left:50%}.grid-item-3{height:245px}.grid-item-4{width:50%;height:245px}.grid-item-7{position:absolute;top:0;right:0;height:245px}.showcase-featured .see-more{text-align:center}.showcase-featured .in-yo-face .featured-grid-outer{overflow:hidden}.showcase-featured .in-yo-face .showcase-info{position:absolute;right:0;bottom:-20%;left:0;padding:10px 20px;font-size:13px;text-align:left;background:rgba(0,0,0,0.6);border-bottom-right-radius:3px;border-bottom-left-radius:3px;opacity:0;visibility:hidden;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.showcase-featured .in-yo-face .showcase-name{font-size:25px;color:#fff}.showcase-featured .in-yo-face .meta-info{margin-right:10px}.showcase-featured .in-yo-face:hover .showcase-info{bottom:0;opacity:1;visibility:visible}.showcase-featured .mo-info .featured-grid-outer{background:#f7f7f7;border:1px solid #ddd;border-radius:3px}.showcase-featured .mo-info .featured-grid-link{width:225px;height:102px;margin-top:-1px;margin-right:-1px;margin-left:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.showcase-featured .normal-intensity .showcase-info{position:absolute;top:0;right:0;bottom:0;left:0;padding-top:43px;font-size:13px;text-align:center;vertical-align:middle;background:rgba(0,0,0,0.6);border-radius:3px;opacity:0;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out}.showcase-featured .normal-intensity .octicon{display:inline}.showcase-featured .normal-intensity .meta-info{margin-right:10px}.showcase-featured .normal-intensity .text{display:none}.showcase-featured .normal-intensity .name-text{display:block}.showcase-featured .normal-intensity a:hover{text-decoration:none}.showcase-featured .normal-intensity:hover .showcase-info{opacity:1}.showcase-featured .normal-intensity:hover .name-text{color:transparent;text-shadow:0 0 5px rgba(255,255,255,0.8)}.showcase-featured .normal-intensity .showcase-name,.showcase-featured .mo-info .showcase-name{font-size:16px;font-weight:100}.signup-plans-actions{margin:-10px 0 20px}.button.plans-signup-button{padding:12px 50px;font-size:16px}.signup-plans-or{margin:0 5px 0 8px}.signup-plans-collabocat{float:right;width:300px;margin-left:30px}.signup-plans{width:100%;margin:20px 0 40px;border-collapse:separate}.signup-plans th,.signup-plans td{padding:9px;font-size:14px;border:solid #e5e5e5}.signup-plans th{padding:14px 9px;font-size:20px;border-width:1px 0 1px 1px}.signup-plans th small{display:block;font-size:14px;color:#7a7a7a}.signup-plans thead .empty{border-width:0}.signup-plans thead .plan-free{border-radius:5px 0 0}.signup-plans thead th:last-child{border-right-width:1px;border-radius:0 5px 0 0}.signup-plans tbody tr:first-child td:first-child{border-top-width:1px;border-radius:5px 0 0}.signup-plans td{text-align:center;border-width:0 0 1px 1px}.signup-plans td:last-child{border-right-width:1px}.signup-plans tr:last-child td:first-child{border-radius:0 0 0 5px}.signup-plans tr:last-child td:last-child{border-radius:0 0 5px}.signup-plans tr:nth-child(odd) td{background-color:#f5f5f5}.signup-plans .row-label{width:18%;font-weight:bold;text-align:right}.signup-plans-personal th{color:#4183c4}.signup-plans-personal tr:nth-child(odd) td{background-color:#f0f5fa}.signup-plans-orgs th{color:#6cc644}.signup-plans-orgs tr:nth-child(odd) td{background-color:#f6fcf4}.signup-plans-toggle-currency{float:right}.signup-plans-currency-notice{margin:10px auto 30px;width:800px;text-align:center}.simple-stacked-bar{display:table;height:10px;width:100%;background-color:#eee}.bar-section{display:table-cell}.bar-section[style='width:0.0%']{display:none}.bar-section-positive{background-color:#6cc644}.bar-section-negative{background-color:#bd2c00}.bar-section-alt{background-color:#6e5494}.stars-browser .sort-bar .sort-form{margin-top:7px}.stars-browser .sort-bar .filter_input{width:400px}.stars-browser .repo-list{margin-top:-20px}.facebox .sudo{padding:0}.facebox .sudo .auth-form-header{border-width:0 0 1px}.facebox .sudo .auth-form-header .mini-icon{display:none}.facebox .sudo .auth-form-body{border-width:0}.facebox .sudo+.facebox-close{padding:5px;color:#fff}.sudo-prompt,.sudo-error{display:none}.tree-browser{width:100%;margin:0;border-bottom:1px solid #cacaca;border-left:0;border-right:0}.tree-browser td{background:#f8f8f8;border-bottom:1px solid #eee;padding:7px 3px;color:#484848;vertical-align:middle;white-space:nowrap}.tree-browser td.icon{width:17px;padding-right:2px;padding-left:10px}.tree-browser td:first-child{border-left:1px solid #cacaca}.tree-browser td:last-child{border-right:1px solid #cacaca}.tree-browser td a.message{color:#484848}.tree-browser td span.ref{color:#aaa}.tree-browser img{vertical-align:text-bottom}.tree-browser tbody tr:last-child td{border-bottom:0}.tree-browser .history{float:right;padding-right:5px}.tree-browser .octicon-chevron-right{color:transparent}.tree-browser tr.navigation-focus td{background-color:#fff}.tree-browser tr.navigation-focus td .octicon-chevron-right{color:#4183c4}.tree-browser .octicon-file-directory{color:#80a6cd}.tree-browser .octicon-file-submodule{color:#3cbf5e}.tree-browser .octicon-file-text{color:#777}.tree-browser .content{max-width:220px}.tree-browser .message{max-width:420px}.tree-browser .css-truncate-target{max-width:100%}.tree-browser-result-template{display:none}.tree-browser-result .css-truncate-target{max-width:870px}.tree-browser-result mark{background-color:transparent;color:#4183c4;font-weight:bold}input.tree-finder-input,input.tree-finder-input:focus{position:relative;top:1px;border:0;padding:0;outline:none;font-size:100%;box-shadow:none;min-height:0;height:22px;line-height:1px;vertical-align:top;-webkit-appearance:none;margin-left:5px}.tree-finder .no-results{display:none}.tree-finder .no-results th{text-align:center}.tree-finder tr td.icon{cursor:pointer}.tree-finder .tree-browser{border-top:1px solid #cacaca}.tree-finder .filterable-empty+.no-results{display:block}#user-content-toc{overflow:visible}#user-content-toc tr{border-top:0}#user-content-toc td{padding:0 20px;background-color:#f7f7f7;border:0;border-radius:3px}#user-content-toc ul{padding-left:0;font-weight:bold;list-style:none}#user-content-toc ul li{padding-left:0.2em}#user-content-toc ul ul{font-weight:normal}#user-content-toc ul ul li:before{float:left;margin-top:-0.2em;margin-right:0.2em;font-size:1.2em;line-height:1;color:#aaa;content:"\231e"}#user-content-toc ul ul ul{padding-left:0.9em}#user-content-toctitle h2{margin-top:1em;margin-bottom:0.5em;font-size:1.25em;border-bottom:0}.user-list em{font-weight:bold;background-color:rgba(255,255,140,0.5);padding:3px;border-radius:3px;font-style:normal}.user-list .tabnav-widget{clear:right;float:right;margin-top:0}.user-list .avatar{position:absolute;top:0;left:0}.user-list-info{padding:0;min-height:48px;font-weight:normal;font-size:18px;line-height:20px}.user-list-meta{font-size:11px;margin:8px 0 0;list-style-type:none;overflow:hidden;color:#999}.user-list-meta>li{float:left;margin-right:10px}.user-list-meta a{color:#333}.user-list-item{border-bottom:1px solid #f1f1f1;padding:0 0 20px 58px;margin:0 0 20px;position:relative}.follow-list{list-style-type:none}.follow-list .follow-list-container{margin-left:90px}.follow-list .follow-list-item{float:left;width:305px;padding-bottom:20px;margin-bottom:20px;margin-right:20px;border-bottom:1px solid #eee}.repository-with-sidebar .follow-list .follow-list-item{width:285px}.follow-list .follow-list-name{font-weight:normal;margin:0 0 5px}.follow-list .follow-list-name a{color:inherit}.follow-list .follow-list-info{margin-top:0;margin-bottom:0.6em;font-size:12px;color:#666}.follow-list .css-truncate.css-truncate-target{max-width:195px}.repository-with-sidebar .follow-list .css-truncate.css-truncate-target{max-width:170px}.follow-list .gravatar{float:left;display:block;width:75px;height:75px}#wiki-body{margin-top:20px}#wiki-body .markdown-body{padding:0 30px;margin:0 -30px}#wiki-rightbar{float:right;width:230px}#wiki-rightbar .markdown-body{font-size:13px}#wiki-rightbar .markdown-body .anchor{display:none}#wiki-rightbar .markdown-body h1{padding-bottom:5px;font-size:1.6em;line-height:1.2;border-color:#eee}#wiki-rightbar .markdown-body h2{padding-bottom:5px;font-size:1.4em;line-height:1.2;border-color:#eee}#wiki-rightbar .markdown-body h3,#wiki-rightbar .markdown-body h4,#wiki-rightbar .markdown-body h5,#wiki-rightbar .markdown-body h6{font-size:1.2em;line-height:1.2;border-color:#eee}#wiki-rightbar .boxed-group>h3{cursor:pointer}#wiki-rightbar .boxed-group .caret-collapsed{display:none}#wiki-rightbar .boxed-group.collapsed .caret-expanded{display:none}#wiki-rightbar .boxed-group.collapsed .caret-collapsed{display:inline}#wiki-rightbar .boxed-group.collapsed>h3{border-bottom:1px solid #d8d8d8;border-radius:3px}#wiki-rightbar .boxed-group.collapsed .boxed-group-inner{display:none}#wiki-rightbar p:last-child,#wiki-rightbar ul:last-child,#wiki-rightbar ol:last-child{margin-bottom:0}.wiki-pages{padding:0;margin:0;list-style-type:none}.wiki-page-link{display:block;padding:6px 10px;word-wrap:break-word}.has-rightbar #wiki-body,.has-rightbar #wiki-footer{margin-right:280px}#wiki-footer{margin:20px 0 50px;clear:both}#wiki-footer .markdown-body{font-size:13px}.wiki-wrapper .blankslate.wiki{padding:115px 0}.wiki-wrapper .blankslate.wiki p.has-fixed-width{text-align:center}.wiki-wrapper .gh-header .divider{padding:0 3px 0 2px}.wiki-wrapper .gh-header-meta{padding-bottom:15px;margin-top:6px}.wiki-wrapper a.history{color:inherit}.wiki-wrapper a.history:hover{color:#555}.wiki-wrapper.edit h1{font-weight:normal;color:inherit}.wiki-wrapper.edit h1 strong{color:#000}.wiki-wrapper .wiki-empty-box{display:block;padding:10px 0;margin:20px 0;color:#999;text-align:center;border:1px dashed #ddd;border-radius:3px;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.wiki-wrapper .wiki-empty-box .octicon-plus{margin-right:4px;opacity:0.4}.wiki-wrapper .wiki-empty-box:hover{color:#777;text-decoration:none;border-color:#ccc}.wiki-wrapper .wiki-auxiliary-content{background-color:#f1f1f1;background-image:-webkit-linear-gradient(#fafafa, #f1f1f1);background-image:linear-gradient(#fafafa, #f1f1f1);background-repeat:repeat-x;background-repeat:no-repeat;background-size:100% 50px;box-shadow:0 1px 2px rgba(0,0,0,0.06)}.wiki-wrapper .wiki-auxiliary-content.markdown-body.wiki-writable>*:nth-child(2){margin-top:0 !important}.wiki-wrapper .wiki-auxiliary-content .wiki-edit-link{position:relative;z-index:2;float:right;color:#777;opacity:0.2;-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.wiki-wrapper .wiki-auxiliary-content .wiki-edit-link:hover{text-decoration:none;opacity:1}.wiki-wrapper .wiki-auxiliary-content-no-bg{background:#fff}.wiki-wrapper .wiki-custom-sidebar{padding:10px;margin-bottom:20px;border:solid 1px #e2e2e2;border-radius:3px}.wiki-wrapper .wiki-custom-sidebar>:nth-child(2){margin-top:0}.wiki-wrapper .wiki-custom-sidebar .octicon-pencil{position:relative;z-index:10;float:right;margin-left:15px;color:#999}.wiki-wrapper .wiki-custom-sidebar .octicon-pencil:hover{color:#333;text-decoration:none}.wiki-wrapper #wiki-footer{margin:30px 30px 0;clear:none}.wiki-wrapper #wiki-footer .markdown-body{padding:10px 15px}.wiki-wrapper #wiki-footer .wiki-empty-box{margin:0 -30px}.wiki-wrapper #wiki-footer .wiki-edit-link{right:-5px}.wiki-wrapper.compare .gh-header{margin-bottom:20px}.wiki-wrapper .wiki-history{margin-top:20px}.wiki-wrapper .wiki-history .checkbox{width:30px;text-align:center}.wiki-wrapper .wiki-history .author{width:200px}.wiki-wrapper .wiki-history .author img{display:block;float:left;margin-right:6px}.wiki-wrapper .wiki-history .date{color:#bbb;white-space:nowrap}.wiki-wrapper .wiki-history .commit{max-width:450px;overflow:hidden;text-overflow:ellipsis}.wiki-wrapper .wiki-history .commit-meta{width:160px;padding-right:10px;text-align:right;white-space:nowrap}.wiki-wrapper .wiki-history .commit-meta code{display:inline-block;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;line-height:16px;vertical-align:top}.wiki-wrapper .wiki-history .commit-id{color:#bbb}.wiki-wrapper .wiki-history .commit-id:hover{color:#4183c4}.wiki-wrapper #wiki-rightbar .sidebar-button{margin-top:10px}.wiki-wrapper #wiki-content{clear:both}.wiki-wrapper #wiki-content .markdown-body{word-break:break-word}.wiki-wrapper #wiki-content #gollum-editor-title-field{margin:0 0 14px}.wiki-wrapper #wiki-content .file-wrap{margin-top:20px;border-top:1px solid #ddd;border-radius:3px}.wiki-wrapper #wiki-content .file-wrap .files{border-radius:3px}.wiki-pages-box .wiki-more-pages{display:none}.wiki-pages-box.wiki-show-more .wiki-more-pages,.wiki-pages-box .filterable-active .wiki-more-pages{display:block}.wiki-pages-box.wiki-show-more .wiki-more-pages-link,.wiki-pages-box .filterable-active .wiki-more-pages-link{display:none}.wiki-pages-box .wiki-more-pages-link{box-shadow:inset 0 1px 0 #e5e5e5}.wiki-pages-box .wiki-more-pages-link a{display:block;padding:3px;color:#7ba9d6;text-align:center}.wiki-pages-box .wiki-more-pages-link a:hover{color:#4183c4;text-decoration:none}.wiki-wrapper.history #gollum-footer ul.actions li{margin:0 0.6em 0 0}.wiki-wrapper.results #results{border-bottom:1px solid #ccc;margin-bottom:2em;padding-bottom:2em}.wiki-wrapper #results ul{margin:2em 0 0;padding:0}.wiki-wrapper #results li{font-size:1.2em;line-height:1.6em;list-style-position:outside;padding:0.2em 0}.wiki-wrapper #results .count{color:#999}.wiki-wrapper .results #no-results{font-size:1.2em;line-height:1.6em;margin-top:2em}.wiki-actions{display:block;list-style-type:none;overflow:hidden;padding:0}.results .wiki-actions li{margin:0 1em 0 0}.compare .wiki-actions{margin-bottom:1.4em}.compare .wiki-actions li{margin-left:0;margin-right:0.6em}.wiki-wrapper .file .data .line_numbers{width:1%;font-size:12px}.zeroclipboard-link{color:#4183c4;cursor:pointer;background:none;border:0;padding:0;margin:0}.zeroclipboard-link .octicon{display:block} diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js deleted file mode 100644 index 4906755..0000000 --- a/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -module.exports = function () { - return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g; -}; diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/ansi-regex/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json deleted file mode 100644 index 4acb3a5..0000000 --- a/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "_args": [ - [ - "ansi-regex@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/has-ansi" - ] - ], - "_from": "ansi-regex@>=2.0.0 <3.0.0", - "_id": "ansi-regex@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/ansi-regex", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.11.2", - "_phantomChildren": {}, - "_requested": { - "name": "ansi-regex", - "raw": "ansi-regex@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/has-ansi", - "/strip-ansi" - ], - "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "_shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107", - "_shrinkwrap": null, - "_spec": "ansi-regex@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/has-ansi", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/ansi-regex/issues" - }, - "dependencies": {}, - "description": "Regular expression for matching ANSI escape codes", - "devDependencies": { - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107", - "tarball": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "57c3f2941a73079fa8b081e02a522e3d29913e2f", - "homepage": "https://github.com/sindresorhus/ansi-regex", - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - { - "email": "jappelman@xebia.com", - "name": "jbnicolai" - } - ], - "name": "ansi-regex", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/ansi-regex.git" - }, - "scripts": { - "test": "mocha test/test.js", - "view-supported": "node test/viewCodes.js" - }, - "version": "2.0.0" -} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md deleted file mode 100644 index 1a4894e..0000000 --- a/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,31 +0,0 @@ -# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex) - -> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install --save ansi-regex -``` - - -## Usage - -```js -var ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001b[4mcake\u001b[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001b[4mcake\u001b[0m'.match(ansiRegex()); -//=> ['\u001b[4m', '\u001b[0m'] -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js deleted file mode 100644 index 7894527..0000000 --- a/node_modules/ansi-styles/index.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -function assembleStyles () { - var styles = { - modifiers: { - reset: [0, 0], - bold: [1, 22], // 21 isn't widely supported and 22 does the same thing - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - colors: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - gray: [90, 39] - }, - bgColors: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49] - } - }; - - // fix humans - styles.colors.grey = styles.colors.gray; - - Object.keys(styles).forEach(function (groupName) { - var group = styles[groupName]; - - Object.keys(group).forEach(function (styleName) { - var style = group[styleName]; - - styles[styleName] = group[styleName] = { - open: '\u001b[' + style[0] + 'm', - close: '\u001b[' + style[1] + 'm' - }; - }); - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - }); - - return styles; -} - -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/ansi-styles/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json deleted file mode 100644 index ccc438c..0000000 --- a/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_args": [ - [ - "ansi-styles@^2.2.1", - "/Users/jbaylina/git/MVP/node_modules/chalk" - ] - ], - "_from": "ansi-styles@>=2.2.1 <3.0.0", - "_id": "ansi-styles@2.2.1", - "_inCache": true, - "_installable": true, - "_location": "/ansi-styles", - "_nodeVersion": "4.3.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/ansi-styles-2.2.1.tgz_1459197317833_0.9694824463222176" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "3.8.3", - "_phantomChildren": {}, - "_requested": { - "name": "ansi-styles", - "raw": "ansi-styles@^2.2.1", - "rawSpec": "^2.2.1", - "scope": null, - "spec": ">=2.2.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/chalk" - ], - "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "_shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe", - "_shrinkwrap": null, - "_spec": "ansi-styles@^2.2.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/chalk", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/chalk/ansi-styles/issues" - }, - "dependencies": {}, - "description": "ANSI escape codes for styling strings in the terminal", - "devDependencies": { - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe", - "tarball": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "95c59b23be760108b6530ca1c89477c21b258032", - "homepage": "https://github.com/chalk/ansi-styles#readme", - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "ansi-styles", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/chalk/ansi-styles.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "2.2.1" -} diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md deleted file mode 100644 index 3f933f6..0000000 --- a/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,86 +0,0 @@ -# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) - -> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal - -You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. - -![](screenshot.png) - - -## Install - -``` -$ npm install --save ansi-styles -``` - - -## Usage - -```js -var ansi = require('ansi-styles'); - -console.log(ansi.green.open + 'Hello world!' + ansi.green.close); -``` - - -## API - -Each style has an `open` and `close` property. - - -## Styles - -### Modifiers - -- `reset` -- `bold` -- `dim` -- `italic` *(not widely supported)* -- `underline` -- `inverse` -- `hidden` -- `strikethrough` *(not widely supported)* - -### Colors - -- `black` -- `red` -- `green` -- `yellow` -- `blue` -- `magenta` -- `cyan` -- `white` -- `gray` - -### Background colors - -- `bgBlack` -- `bgRed` -- `bgGreen` -- `bgYellow` -- `bgBlue` -- `bgMagenta` -- `bgCyan` -- `bgWhite` - - -## Advanced usage - -By default you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. - -- `ansi.modifiers` -- `ansi.colors` -- `ansi.bgColors` - - -###### Example - -```js -console.log(ansi.colors.green.open); -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/asn1/.npmignore b/node_modules/asn1/.npmignore deleted file mode 100644 index eb03e3e..0000000 --- a/node_modules/asn1/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -*.log diff --git a/node_modules/asn1/.travis.yml b/node_modules/asn1/.travis.yml deleted file mode 100644 index 09d3ef3..0000000 --- a/node_modules/asn1/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.8 - - 0.10 diff --git a/node_modules/asn1/LICENSE b/node_modules/asn1/LICENSE deleted file mode 100644 index 9b5dcdb..0000000 --- a/node_modules/asn1/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Mark Cavage, All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE diff --git a/node_modules/asn1/README.md b/node_modules/asn1/README.md deleted file mode 100644 index 7cebf7a..0000000 --- a/node_modules/asn1/README.md +++ /dev/null @@ -1,50 +0,0 @@ -node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. -Currently BER encoding is supported; at some point I'll likely have to do DER. - -## Usage - -Mostly, if you're *actually* needing to read and write ASN.1, you probably don't -need this readme to explain what and why. If you have no idea what ASN.1 is, -see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -The source is pretty much self-explanatory, and has read/write methods for the -common types out there. - -### Decoding - -The following reads an ASN.1 sequence with a boolean. - - var Ber = require('asn1').Ber; - - var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff])); - - reader.readSequence(); - console.log('Sequence len: ' + reader.length); - if (reader.peek() === Ber.Boolean) - console.log(reader.readBoolean()); - -### Encoding - -The following generates the same payload as above. - - var Ber = require('asn1').Ber; - - var writer = new Ber.Writer(); - - writer.startSequence(); - writer.writeBoolean(true); - writer.endSequence(); - - console.log(writer.buffer); - -## Installation - - npm install asn1 - -## License - -MIT. - -## Bugs - -See . diff --git a/node_modules/asn1/lib/ber/errors.js b/node_modules/asn1/lib/ber/errors.js deleted file mode 100644 index ff21d4f..0000000 --- a/node_modules/asn1/lib/ber/errors.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - - -module.exports = { - - newInvalidAsn1Error: function(msg) { - var e = new Error(); - e.name = 'InvalidAsn1Error'; - e.message = msg || ''; - return e; - } - -}; diff --git a/node_modules/asn1/lib/ber/index.js b/node_modules/asn1/lib/ber/index.js deleted file mode 100644 index 4fb90ae..0000000 --- a/node_modules/asn1/lib/ber/index.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -var errors = require('./errors'); -var types = require('./types'); - -var Reader = require('./reader'); -var Writer = require('./writer'); - - -///--- Exports - -module.exports = { - - Reader: Reader, - - Writer: Writer - -}; - -for (var t in types) { - if (types.hasOwnProperty(t)) - module.exports[t] = types[t]; -} -for (var e in errors) { - if (errors.hasOwnProperty(e)) - module.exports[e] = errors[e]; -} diff --git a/node_modules/asn1/lib/ber/reader.js b/node_modules/asn1/lib/ber/reader.js deleted file mode 100644 index 0a00e98..0000000 --- a/node_modules/asn1/lib/ber/reader.js +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -var assert = require('assert'); - -var ASN1 = require('./types'); -var errors = require('./errors'); - - -///--- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - - - -///--- API - -function Reader(data) { - if (!data || !Buffer.isBuffer(data)) - throw new TypeError('data must be a node Buffer'); - - this._buf = data; - this._size = data.length; - - // These hold the "current" state - this._len = 0; - this._offset = 0; -} - -Object.defineProperty(Reader.prototype, 'length', { - enumerable: true, - get: function () { return (this._len); } -}); - -Object.defineProperty(Reader.prototype, 'offset', { - enumerable: true, - get: function () { return (this._offset); } -}); - -Object.defineProperty(Reader.prototype, 'remain', { - get: function () { return (this._size - this._offset); } -}); - -Object.defineProperty(Reader.prototype, 'buffer', { - get: function () { return (this._buf.slice(this._offset)); } -}); - - -/** - * Reads a single byte and advances offset; you can pass in `true` to make this - * a "peek" operation (i.e., get the byte, but don't advance the offset). - * - * @param {Boolean} peek true means don't move offset. - * @return {Number} the next byte, null if not enough data. - */ -Reader.prototype.readByte = function(peek) { - if (this._size - this._offset < 1) - return null; - - var b = this._buf[this._offset] & 0xff; - - if (!peek) - this._offset += 1; - - return b; -}; - - -Reader.prototype.peek = function() { - return this.readByte(true); -}; - - -/** - * Reads a (potentially) variable length off the BER buffer. This call is - * not really meant to be called directly, as callers have to manipulate - * the internal buffer afterwards. - * - * As a result of this call, you can call `Reader.length`, until the - * next thing called that does a readLength. - * - * @return {Number} the amount of offset to advance the buffer. - * @throws {InvalidAsn1Error} on bad ASN.1 - */ -Reader.prototype.readLength = function(offset) { - if (offset === undefined) - offset = this._offset; - - if (offset >= this._size) - return null; - - var lenB = this._buf[offset++] & 0xff; - if (lenB === null) - return null; - - if ((lenB & 0x80) == 0x80) { - lenB &= 0x7f; - - if (lenB == 0) - throw newInvalidAsn1Error('Indefinite length not supported'); - - if (lenB > 4) - throw newInvalidAsn1Error('encoding too long'); - - if (this._size - offset < lenB) - return null; - - this._len = 0; - for (var i = 0; i < lenB; i++) - this._len = (this._len << 8) + (this._buf[offset++] & 0xff); - - } else { - // Wasn't a variable length - this._len = lenB; - } - - return offset; -}; - - -/** - * Parses the next sequence in this BER buffer. - * - * To get the length of the sequence, call `Reader.length`. - * - * @return {Number} the sequence's tag. - */ -Reader.prototype.readSequence = function(tag) { - var seq = this.peek(); - if (seq === null) - return null; - if (tag !== undefined && tag !== seq) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + seq.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - this._offset = o; - return seq; -}; - - -Reader.prototype.readInt = function() { - return this._readTag(ASN1.Integer); -}; - - -Reader.prototype.readBoolean = function() { - return (this._readTag(ASN1.Boolean) === 0 ? false : true); -}; - - -Reader.prototype.readEnumeration = function() { - return this._readTag(ASN1.Enumeration); -}; - - -Reader.prototype.readString = function(tag, retbuf) { - if (!tag) - tag = ASN1.OctetString; - - var b = this.peek(); - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - - if (o === null) - return null; - - if (this.length > this._size - o) - return null; - - this._offset = o; - - if (this.length === 0) - return retbuf ? new Buffer(0) : ''; - - var str = this._buf.slice(this._offset, this._offset + this.length); - this._offset += this.length; - - return retbuf ? str : str.toString('utf8'); -}; - -Reader.prototype.readOID = function(tag) { - if (!tag) - tag = ASN1.OID; - - var b = this.readString(tag, true); - if (b === null) - return null; - - var values = []; - var value = 0; - - for (var i = 0; i < b.length; i++) { - var byte = b[i] & 0xff; - - value <<= 7; - value += byte & 0x7f; - if ((byte & 0x80) == 0) { - values.push(value); - value = 0; - } - } - - value = values.shift(); - values.unshift(value % 40); - values.unshift((value / 40) >> 0); - - return values.join('.'); -}; - - -Reader.prototype._readTag = function(tag) { - assert.ok(tag !== undefined); - - var b = this.peek(); - - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - if (this.length > 4) - throw newInvalidAsn1Error('Integer too long: ' + this.length); - - if (this.length > this._size - o) - return null; - this._offset = o; - - var fb = this._buf[this._offset]; - var value = 0; - - for (var i = 0; i < this.length; i++) { - value <<= 8; - value |= (this._buf[this._offset++] & 0xff); - } - - if ((fb & 0x80) == 0x80 && i !== 4) - value -= (1 << (i * 8)); - - return value >> 0; -}; - - - -///--- Exported API - -module.exports = Reader; diff --git a/node_modules/asn1/lib/ber/types.js b/node_modules/asn1/lib/ber/types.js deleted file mode 100644 index 8aea000..0000000 --- a/node_modules/asn1/lib/ber/types.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - - -module.exports = { - EOC: 0, - Boolean: 1, - Integer: 2, - BitString: 3, - OctetString: 4, - Null: 5, - OID: 6, - ObjectDescriptor: 7, - External: 8, - Real: 9, // float - Enumeration: 10, - PDV: 11, - Utf8String: 12, - RelativeOID: 13, - Sequence: 16, - Set: 17, - NumericString: 18, - PrintableString: 19, - T61String: 20, - VideotexString: 21, - IA5String: 22, - UTCTime: 23, - GeneralizedTime: 24, - GraphicString: 25, - VisibleString: 26, - GeneralString: 28, - UniversalString: 29, - CharacterString: 30, - BMPString: 31, - Constructor: 32, - Context: 128 -}; diff --git a/node_modules/asn1/lib/ber/writer.js b/node_modules/asn1/lib/ber/writer.js deleted file mode 100644 index d9d99af..0000000 --- a/node_modules/asn1/lib/ber/writer.js +++ /dev/null @@ -1,316 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -var assert = require('assert'); -var ASN1 = require('./types'); -var errors = require('./errors'); - - -///--- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - -var DEFAULT_OPTS = { - size: 1024, - growthFactor: 8 -}; - - -///--- Helpers - -function merge(from, to) { - assert.ok(from); - assert.equal(typeof(from), 'object'); - assert.ok(to); - assert.equal(typeof(to), 'object'); - - var keys = Object.getOwnPropertyNames(from); - keys.forEach(function(key) { - if (to[key]) - return; - - var value = Object.getOwnPropertyDescriptor(from, key); - Object.defineProperty(to, key, value); - }); - - return to; -} - - - -///--- API - -function Writer(options) { - options = merge(DEFAULT_OPTS, options || {}); - - this._buf = new Buffer(options.size || 1024); - this._size = this._buf.length; - this._offset = 0; - this._options = options; - - // A list of offsets in the buffer where we need to insert - // sequence tag/len pairs. - this._seq = []; -} - -Object.defineProperty(Writer.prototype, 'buffer', { - get: function () { - if (this._seq.length) - throw new InvalidAsn1Error(this._seq.length + ' unended sequence(s)'); - - return (this._buf.slice(0, this._offset)); - } -}); - -Writer.prototype.writeByte = function(b) { - if (typeof(b) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(1); - this._buf[this._offset++] = b; -}; - - -Writer.prototype.writeInt = function(i, tag) { - if (typeof(i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof(tag) !== 'number') - tag = ASN1.Integer; - - var sz = 4; - - while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) && - (sz > 1)) { - sz--; - i <<= 8; - } - - if (sz > 4) - throw new InvalidAsn1Error('BER ints cannot be > 0xffffffff'); - - this._ensure(2 + sz); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = sz; - - while (sz-- > 0) { - this._buf[this._offset++] = ((i & 0xff000000) >>> 24); - i <<= 8; - } - -}; - - -Writer.prototype.writeNull = function() { - this.writeByte(ASN1.Null); - this.writeByte(0x00); -}; - - -Writer.prototype.writeEnumeration = function(i, tag) { - if (typeof(i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof(tag) !== 'number') - tag = ASN1.Enumeration; - - return this.writeInt(i, tag); -}; - - -Writer.prototype.writeBoolean = function(b, tag) { - if (typeof(b) !== 'boolean') - throw new TypeError('argument must be a Boolean'); - if (typeof(tag) !== 'number') - tag = ASN1.Boolean; - - this._ensure(3); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = 0x01; - this._buf[this._offset++] = b ? 0xff : 0x00; -}; - - -Writer.prototype.writeString = function(s, tag) { - if (typeof(s) !== 'string') - throw new TypeError('argument must be a string (was: ' + typeof(s) + ')'); - if (typeof(tag) !== 'number') - tag = ASN1.OctetString; - - var len = Buffer.byteLength(s); - this.writeByte(tag); - this.writeLength(len); - if (len) { - this._ensure(len); - this._buf.write(s, this._offset); - this._offset += len; - } -}; - - -Writer.prototype.writeBuffer = function(buf, tag) { - if (typeof(tag) !== 'number') - throw new TypeError('tag must be a number'); - if (!Buffer.isBuffer(buf)) - throw new TypeError('argument must be a buffer'); - - this.writeByte(tag); - this.writeLength(buf.length); - this._ensure(buf.length); - buf.copy(this._buf, this._offset, 0, buf.length); - this._offset += buf.length; -}; - - -Writer.prototype.writeStringArray = function(strings) { - if ((!strings instanceof Array)) - throw new TypeError('argument must be an Array[String]'); - - var self = this; - strings.forEach(function(s) { - self.writeString(s); - }); -}; - -// This is really to solve DER cases, but whatever for now -Writer.prototype.writeOID = function(s, tag) { - if (typeof(s) !== 'string') - throw new TypeError('argument must be a string'); - if (typeof(tag) !== 'number') - tag = ASN1.OID; - - if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) - throw new Error('argument is not a valid OID string'); - - function encodeOctet(bytes, octet) { - if (octet < 128) { - bytes.push(octet); - } else if (octet < 16384) { - bytes.push((octet >>> 7) | 0x80); - bytes.push(octet & 0x7F); - } else if (octet < 2097152) { - bytes.push((octet >>> 14) | 0x80); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else if (octet < 268435456) { - bytes.push((octet >>> 21) | 0x80); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else { - bytes.push(((octet >>> 28) | 0x80) & 0xFF); - bytes.push(((octet >>> 21) | 0x80) & 0xFF); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } - } - - var tmp = s.split('.'); - var bytes = []; - bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); - tmp.slice(2).forEach(function(b) { - encodeOctet(bytes, parseInt(b, 10)); - }); - - var self = this; - this._ensure(2 + bytes.length); - this.writeByte(tag); - this.writeLength(bytes.length); - bytes.forEach(function(b) { - self.writeByte(b); - }); -}; - - -Writer.prototype.writeLength = function(len) { - if (typeof(len) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(4); - - if (len <= 0x7f) { - this._buf[this._offset++] = len; - } else if (len <= 0xff) { - this._buf[this._offset++] = 0x81; - this._buf[this._offset++] = len; - } else if (len <= 0xffff) { - this._buf[this._offset++] = 0x82; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else if (len <= 0xffffff) { - this._buf[this._offset++] = 0x83; - this._buf[this._offset++] = len >> 16; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else { - throw new InvalidAsn1ERror('Length too long (> 4 bytes)'); - } -}; - -Writer.prototype.startSequence = function(tag) { - if (typeof(tag) !== 'number') - tag = ASN1.Sequence | ASN1.Constructor; - - this.writeByte(tag); - this._seq.push(this._offset); - this._ensure(3); - this._offset += 3; -}; - - -Writer.prototype.endSequence = function() { - var seq = this._seq.pop(); - var start = seq + 3; - var len = this._offset - start; - - if (len <= 0x7f) { - this._shift(start, len, -2); - this._buf[seq] = len; - } else if (len <= 0xff) { - this._shift(start, len, -1); - this._buf[seq] = 0x81; - this._buf[seq + 1] = len; - } else if (len <= 0xffff) { - this._buf[seq] = 0x82; - this._buf[seq + 1] = len >> 8; - this._buf[seq + 2] = len; - } else if (len <= 0xffffff) { - this._shift(start, len, 1); - this._buf[seq] = 0x83; - this._buf[seq + 1] = len >> 16; - this._buf[seq + 2] = len >> 8; - this._buf[seq + 3] = len; - } else { - throw new InvalidAsn1Error('Sequence too long'); - } -}; - - -Writer.prototype._shift = function(start, len, shift) { - assert.ok(start !== undefined); - assert.ok(len !== undefined); - assert.ok(shift); - - this._buf.copy(this._buf, start + shift, start, start + len); - this._offset += shift; -}; - -Writer.prototype._ensure = function(len) { - assert.ok(len); - - if (this._size - this._offset < len) { - var sz = this._size * this._options.growthFactor; - if (sz - this._offset < len) - sz += len; - - var buf = new Buffer(sz); - - this._buf.copy(buf, 0, 0, this._offset); - this._buf = buf; - this._size = sz; - } -}; - - - -///--- Exported API - -module.exports = Writer; diff --git a/node_modules/asn1/lib/index.js b/node_modules/asn1/lib/index.js deleted file mode 100644 index d1766e7..0000000 --- a/node_modules/asn1/lib/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -// If you have no idea what ASN.1 or BER is, see this: -// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -var Ber = require('./ber/index'); - - - -///--- Exported API - -module.exports = { - - Ber: Ber, - - BerReader: Ber.Reader, - - BerWriter: Ber.Writer - -}; diff --git a/node_modules/asn1/package.json b/node_modules/asn1/package.json deleted file mode 100644 index 52664ca..0000000 --- a/node_modules/asn1/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "asn1@~0.2.3", - "/Users/jbaylina/git/MVP/node_modules/sshpk" - ] - ], - "_from": "asn1@>=0.2.3 <0.3.0", - "_id": "asn1@0.2.3", - "_inCache": true, - "_installable": true, - "_location": "/asn1", - "_npmUser": { - "email": "patrick.f.mooney@gmail.com", - "name": "pfmooney" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "asn1", - "raw": "asn1@~0.2.3", - "rawSpec": "~0.2.3", - "scope": null, - "spec": ">=0.2.3 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "_shasum": "dac8787713c9966849fc8180777ebe9c1ddf3b86", - "_shrinkwrap": null, - "_spec": "asn1@~0.2.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/sshpk", - "author": { - "email": "mcavage@gmail.com", - "name": "Mark Cavage" - }, - "bugs": { - "url": "https://github.com/mcavage/node-asn1/issues" - }, - "contributors": [ - { - "email": "loki@animata.net", - "name": "David Gwynne" - }, - { - "email": "yunong@joyent.com", - "name": "Yunong Xiao" - }, - { - "email": "alex.wilson@joyent.com", - "name": "Alex Wilson" - } - ], - "dependencies": {}, - "description": "Contains parsers and serializers for ASN.1 (currently BER only)", - "devDependencies": { - "tap": "0.4.8" - }, - "directories": {}, - "dist": { - "shasum": "dac8787713c9966849fc8180777ebe9c1ddf3b86", - "tarball": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz" - }, - "homepage": "https://github.com/mcavage/node-asn1", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "mcavage@gmail.com", - "name": "mcavage" - }, - { - "email": "patrick.f.mooney@gmail.com", - "name": "pfmooney" - } - ], - "name": "asn1", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/mcavage/node-asn1.git" - }, - "scripts": { - "test": "tap ./tst" - }, - "version": "0.2.3" -} diff --git a/node_modules/asn1/tst/ber/reader.test.js b/node_modules/asn1/tst/ber/reader.test.js deleted file mode 100644 index 062fd7e..0000000 --- a/node_modules/asn1/tst/ber/reader.test.js +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -var test = require('tap').test; - - - -///--- Globals - -var BerReader; - - - -///--- Tests - -test('load library', function(t) { - BerReader = require('../../lib/index').BerReader; - t.ok(BerReader); - try { - new BerReader(); - t.fail('Should have thrown'); - } catch (e) { - t.ok(e instanceof TypeError, 'Should have been a type error'); - } - t.end(); -}); - - -test('read byte', function(t) { - var reader = new BerReader(new Buffer([0xde])); - t.ok(reader); - t.equal(reader.readByte(), 0xde, 'wrong value'); - t.end(); -}); - - -test('read 1 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x01, 0x03])); - t.ok(reader); - t.equal(reader.readInt(), 0x03, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read 2 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x02, 0x7e, 0xde])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede, 'wrong value'); - t.equal(reader.length, 0x02, 'wrong length'); - t.end(); -}); - - -test('read 3 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x03, 0x7e, 0xde, 0x03])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede03, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.end(); -}); - - -test('read 4 byte int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x04, 0x7e, 0xde, 0x03, 0x01])); - t.ok(reader); - t.equal(reader.readInt(), 0x7ede0301, 'wrong value'); - t.equal(reader.length, 0x04, 'wrong length'); - t.end(); -}); - - -test('read 1 byte negative int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x01, 0xdc])); - t.ok(reader); - t.equal(reader.readInt(), -36, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read 2 byte negative int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x02, 0xc0, 0x4e])); - t.ok(reader); - t.equal(reader.readInt(), -16306, 'wrong value'); - t.equal(reader.length, 0x02, 'wrong length'); - t.end(); -}); - - -test('read 3 byte negative int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x03, 0xff, 0x00, 0x19])); - t.ok(reader); - t.equal(reader.readInt(), -65511, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.end(); -}); - - -test('read 4 byte negative int', function(t) { - var reader = new BerReader(new Buffer([0x02, 0x04, 0x91, 0x7c, 0x22, 0x1f])); - t.ok(reader); - t.equal(reader.readInt(), -1854135777, 'wrong value'); - t.equal(reader.length, 0x04, 'wrong length'); - t.end(); -}); - - -test('read boolean true', function(t) { - var reader = new BerReader(new Buffer([0x01, 0x01, 0xff])); - t.ok(reader); - t.equal(reader.readBoolean(), true, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read boolean false', function(t) { - var reader = new BerReader(new Buffer([0x01, 0x01, 0x00])); - t.ok(reader); - t.equal(reader.readBoolean(), false, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read enumeration', function(t) { - var reader = new BerReader(new Buffer([0x0a, 0x01, 0x20])); - t.ok(reader); - t.equal(reader.readEnumeration(), 0x20, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('read string', function(t) { - var dn = 'cn=foo,ou=unit,o=test'; - var buf = new Buffer(dn.length + 2); - buf[0] = 0x04; - buf[1] = Buffer.byteLength(dn); - buf.write(dn, 2); - var reader = new BerReader(buf); - t.ok(reader); - t.equal(reader.readString(), dn, 'wrong value'); - t.equal(reader.length, dn.length, 'wrong length'); - t.end(); -}); - - -test('read sequence', function(t) { - var reader = new BerReader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff])); - t.ok(reader); - t.equal(reader.readSequence(), 0x30, 'wrong value'); - t.equal(reader.length, 0x03, 'wrong length'); - t.equal(reader.readBoolean(), true, 'wrong value'); - t.equal(reader.length, 0x01, 'wrong length'); - t.end(); -}); - - -test('anonymous LDAPv3 bind', function(t) { - var BIND = new Buffer(14); - BIND[0] = 0x30; // Sequence - BIND[1] = 12; // len - BIND[2] = 0x02; // ASN.1 Integer - BIND[3] = 1; // len - BIND[4] = 0x04; // msgid (make up 4) - BIND[5] = 0x60; // Bind Request - BIND[6] = 7; // len - BIND[7] = 0x02; // ASN.1 Integer - BIND[8] = 1; // len - BIND[9] = 0x03; // v3 - BIND[10] = 0x04; // String (bind dn) - BIND[11] = 0; // len - BIND[12] = 0x80; // ContextSpecific (choice) - BIND[13] = 0; // simple bind - - // Start testing ^^ - var ber = new BerReader(BIND); - t.equal(ber.readSequence(), 48, 'Not an ASN.1 Sequence'); - t.equal(ber.length, 12, 'Message length should be 12'); - t.equal(ber.readInt(), 4, 'Message id should have been 4'); - t.equal(ber.readSequence(), 96, 'Bind Request should have been 96'); - t.equal(ber.length, 7, 'Bind length should have been 7'); - t.equal(ber.readInt(), 3, 'LDAP version should have been 3'); - t.equal(ber.readString(), '', 'Bind DN should have been empty'); - t.equal(ber.length, 0, 'string length should have been 0'); - t.equal(ber.readByte(), 0x80, 'Should have been ContextSpecific (choice)'); - t.equal(ber.readByte(), 0, 'Should have been simple bind'); - t.equal(null, ber.readByte(), 'Should be out of data'); - t.end(); -}); - - -test('long string', function(t) { - var buf = new Buffer(256); - var o; - var s = - '2;649;CN=Red Hat CS 71GA Demo,O=Red Hat CS 71GA Demo,C=US;' + - 'CN=RHCS Agent - admin01,UID=admin01,O=redhat,C=US [1] This is ' + - 'Teena Vradmin\'s description.'; - buf[0] = 0x04; - buf[1] = 0x81; - buf[2] = 0x94; - buf.write(s, 3); - var ber = new BerReader(buf.slice(0, 3 + s.length)); - t.equal(ber.readString(), s); - t.end(); -}); diff --git a/node_modules/asn1/tst/ber/writer.test.js b/node_modules/asn1/tst/ber/writer.test.js deleted file mode 100644 index d87cb7b..0000000 --- a/node_modules/asn1/tst/ber/writer.test.js +++ /dev/null @@ -1,370 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -var test = require('tap').test; -var sys = require('sys'); - -///--- Globals - -var BerWriter; - -var BerReader; - - -///--- Tests - -test('load library', function(t) { - BerWriter = require('../../lib/index').BerWriter; - t.ok(BerWriter); - t.ok(new BerWriter()); - t.end(); -}); - - -test('write byte', function(t) { - var writer = new BerWriter(); - - writer.writeByte(0xC2); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 1, 'Wrong length'); - t.equal(ber[0], 0xC2, 'value wrong'); - - t.end(); -}); - - -test('write 1 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7f); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 3, 'Wrong length for an int: ' + ber.length); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong (2) -> ' + ber[0]); - t.equal(ber[1], 0x01, 'length wrong(1) -> ' + ber[1]); - t.equal(ber[2], 0x7f, 'value wrong(3) -> ' + ber[2]); - - t.end(); -}); - - -test('write 2 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffe); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 4, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x02, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xfe, 'value wrong (byte 2)'); - - t.end(); -}); - - -test('write 3 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffffe); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 5, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x03, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xff, 'value wrong (byte 2)'); - t.equal(ber[4], 0xfe, 'value wrong (byte 3)'); - - t.end(); -}); - - -test('write 4 byte int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(0x7ffffffe); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 6, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x04, 'length wrong'); - t.equal(ber[2], 0x7f, 'value wrong (byte 1)'); - t.equal(ber[3], 0xff, 'value wrong (byte 2)'); - t.equal(ber[4], 0xff, 'value wrong (byte 3)'); - t.equal(ber[5], 0xfe, 'value wrong (byte 4)'); - - t.end(); -}); - - -test('write 1 byte negative int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(-128); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 3, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x01, 'length wrong'); - t.equal(ber[2], 0x80, 'value wrong (byte 1)'); - - t.end(); -}); - - -test('write 2 byte negative int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(-22400); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 4, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x02, 'length wrong'); - t.equal(ber[2], 0xa8, 'value wrong (byte 1)'); - t.equal(ber[3], 0x80, 'value wrong (byte 2)'); - - t.end(); -}); - - -test('write 3 byte negative int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(-481653); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 5, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x03, 'length wrong'); - t.equal(ber[2], 0xf8, 'value wrong (byte 1)'); - t.equal(ber[3], 0xa6, 'value wrong (byte 2)'); - t.equal(ber[4], 0x8b, 'value wrong (byte 3)'); - - t.end(); -}); - - -test('write 4 byte negative int', function(t) { - var writer = new BerWriter(); - - writer.writeInt(-1522904131); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 6, 'Wrong length for an int'); - t.equal(ber[0], 0x02, 'ASN.1 tag wrong'); - t.equal(ber[1], 0x04, 'length wrong'); - t.equal(ber[2], 0xa5, 'value wrong (byte 1)'); - t.equal(ber[3], 0x3a, 'value wrong (byte 2)'); - t.equal(ber[4], 0x53, 'value wrong (byte 3)'); - t.equal(ber[5], 0xbd, 'value wrong (byte 4)'); - - t.end(); -}); - - -test('write boolean', function(t) { - var writer = new BerWriter(); - - writer.writeBoolean(true); - writer.writeBoolean(false); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 6, 'Wrong length'); - t.equal(ber[0], 0x01, 'tag wrong'); - t.equal(ber[1], 0x01, 'length wrong'); - t.equal(ber[2], 0xff, 'value wrong'); - t.equal(ber[3], 0x01, 'tag wrong'); - t.equal(ber[4], 0x01, 'length wrong'); - t.equal(ber[5], 0x00, 'value wrong'); - - t.end(); -}); - - -test('write string', function(t) { - var writer = new BerWriter(); - writer.writeString('hello world'); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 13, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - -test('write buffer', function(t) { - var writer = new BerWriter(); - // write some stuff to start with - writer.writeString('hello world'); - var ber = writer.buffer; - var buf = new Buffer([0x04, 0x0b, 0x30, 0x09, 0x02, 0x01, 0x0f, 0x01, 0x01, - 0xff, 0x01, 0x01, 0xff]); - writer.writeBuffer(buf.slice(2, buf.length), 0x04); - ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 26, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value'); - t.equal(ber[13], buf[0], 'wrong tag'); - t.equal(ber[14], buf[1], 'wrong length'); - for (var i = 13, j = 0; i < ber.length && j < buf.length; i++, j++) { - t.equal(ber[i], buf[j], 'buffer contents not identical'); - } - t.end(); -}); - -test('write string array', function(t) { - var writer = new BerWriter(); - writer.writeStringArray(['hello world', 'fubar!']); - var ber = writer.buffer; - - t.ok(ber); - - t.equal(ber.length, 21, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value'); - - t.equal(ber[13], 0x04, 'wrong tag'); - t.equal(ber[14], 6, 'wrong length'); - t.equal(ber.slice(15).toString('utf8'), 'fubar!', 'wrong value'); - - t.end(); -}); - - -test('resize internal buffer', function(t) { - var writer = new BerWriter({size: 2}); - writer.writeString('hello world'); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 13, 'wrong length'); - t.equal(ber[0], 0x04, 'wrong tag'); - t.equal(ber[1], 11, 'wrong length'); - t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('sequence', function(t) { - var writer = new BerWriter({size: 25}); - writer.startSequence(); - writer.writeString('hello world'); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - console.log(ber); - t.equal(ber.length, 15, 'wrong length'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 13, 'wrong length'); - t.equal(ber[2], 0x04, 'wrong tag'); - t.equal(ber[3], 11, 'wrong length'); - t.equal(ber.slice(4).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('nested sequence', function(t) { - var writer = new BerWriter({size: 25}); - writer.startSequence(); - writer.writeString('hello world'); - writer.startSequence(); - writer.writeString('hello world'); - writer.endSequence(); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 30, 'wrong length'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 28, 'wrong length'); - t.equal(ber[2], 0x04, 'wrong tag'); - t.equal(ber[3], 11, 'wrong length'); - t.equal(ber.slice(4, 15).toString('utf8'), 'hello world', 'wrong value'); - t.equal(ber[15], 0x30, 'wrong tag'); - t.equal(ber[16], 13, 'wrong length'); - t.equal(ber[17], 0x04, 'wrong tag'); - t.equal(ber[18], 11, 'wrong length'); - t.equal(ber.slice(19, 30).toString('utf8'), 'hello world', 'wrong value'); - - t.end(); -}); - - -test('LDAP bind message', function(t) { - var dn = 'cn=foo,ou=unit,o=test'; - var writer = new BerWriter(); - writer.startSequence(); - writer.writeInt(3); // msgid = 3 - writer.startSequence(0x60); // ldap bind - writer.writeInt(3); // ldap v3 - writer.writeString(dn); - writer.writeByte(0x80); - writer.writeByte(0x00); - writer.endSequence(); - writer.endSequence(); - var ber = writer.buffer; - - t.ok(ber); - t.equal(ber.length, 35, 'wrong length (buffer)'); - t.equal(ber[0], 0x30, 'wrong tag'); - t.equal(ber[1], 33, 'wrong length'); - t.equal(ber[2], 0x02, 'wrong tag'); - t.equal(ber[3], 1, 'wrong length'); - t.equal(ber[4], 0x03, 'wrong value'); - t.equal(ber[5], 0x60, 'wrong tag'); - t.equal(ber[6], 28, 'wrong length'); - t.equal(ber[7], 0x02, 'wrong tag'); - t.equal(ber[8], 1, 'wrong length'); - t.equal(ber[9], 0x03, 'wrong value'); - t.equal(ber[10], 0x04, 'wrong tag'); - t.equal(ber[11], dn.length, 'wrong length'); - t.equal(ber.slice(12, 33).toString('utf8'), dn, 'wrong value'); - t.equal(ber[33], 0x80, 'wrong tag'); - t.equal(ber[34], 0x00, 'wrong len'); - - t.end(); -}); - - -test('Write OID', function(t) { - var oid = '1.2.840.113549.1.1.1'; - var writer = new BerWriter(); - writer.writeOID(oid); - - var ber = writer.buffer; - t.ok(ber); - console.log(require('util').inspect(ber)); - console.log(require('util').inspect(new Buffer([0x06, 0x09, 0x2a, 0x86, - 0x48, 0x86, 0xf7, 0x0d, - 0x01, 0x01, 0x01]))); - - t.end(); -}); diff --git a/node_modules/assert-plus/AUTHORS b/node_modules/assert-plus/AUTHORS deleted file mode 100644 index 1923524..0000000 --- a/node_modules/assert-plus/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -Dave Eddy -Fred Kuo -Lars-Magnus Skog -Mark Cavage -Patrick Mooney -Rob Gulewich diff --git a/node_modules/assert-plus/CHANGES.md b/node_modules/assert-plus/CHANGES.md deleted file mode 100644 index d249d9b..0000000 --- a/node_modules/assert-plus/CHANGES.md +++ /dev/null @@ -1,8 +0,0 @@ -# assert-plus Changelog - -## 0.2.0 - -- Fix `assert.object(null)` so it throws -- Fix optional/arrayOf exports for non-type-of asserts -- Add optiona/arrayOf exports for Stream/Date/Regex/uuid -- Add basic unit test coverage diff --git a/node_modules/assert-plus/README.md b/node_modules/assert-plus/README.md deleted file mode 100644 index 0b39593..0000000 --- a/node_modules/assert-plus/README.md +++ /dev/null @@ -1,155 +0,0 @@ -# assert-plus - -This library is a super small wrapper over node's assert module that has two -things: (1) the ability to disable assertions with the environment variable -NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like -`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks -like this: - -```javascript - var assert = require('assert-plus'); - - function fooAccount(options, callback) { - assert.object(options, 'options'); - assert.number(options.id, 'options.id'); - assert.bool(options.isManager, 'options.isManager'); - assert.string(options.name, 'options.name'); - assert.arrayOfString(options.email, 'options.email'); - assert.func(callback, 'callback'); - - // Do stuff - callback(null, {}); - } -``` - -# API - -All methods that *aren't* part of node's core assert API are simply assumed to -take an argument, and then a string 'name' that's not a message; `AssertionError` -will be thrown if the assertion fails with a message like: - - AssertionError: foo (string) is required - at test (/home/mark/work/foo/foo.js:3:9) - at Object. (/home/mark/work/foo/foo.js:15:1) - at Module._compile (module.js:446:26) - at Object..js (module.js:464:10) - at Module.load (module.js:353:31) - at Function._load (module.js:311:12) - at Array.0 (module.js:484:10) - at EventEmitter._tickCallback (node.js:190:38) - -from: - -```javascript - function test(foo) { - assert.string(foo, 'foo'); - } -``` - -There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: - -```javascript - function test(foo) { - assert.arrayOfString(foo, 'foo'); - } -``` - -You can assert IFF an argument is not `undefined` (i.e., an optional arg): - -```javascript - assert.optionalString(foo, 'foo'); -``` - -Lastly, you can opt-out of assertion checking altogether by setting the -environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have -lots of assertions, and don't want to pay `typeof ()` taxes to v8 in -production. Be advised: The standard functions re-exported from `assert` are -also disabled in assert-plus if NDEBUG is specified. Using them directly from -the `assert` module avoids this behavior. - -The complete list of APIs is: - -* assert.array -* assert.bool -* assert.buffer -* assert.func -* assert.number -* assert.object -* assert.string -* assert.stream -* assert.date -* assert.regex -* assert.uuid -* assert.arrayOfArray -* assert.arrayOfBool -* assert.arrayOfBuffer -* assert.arrayOfFunc -* assert.arrayOfNumber -* assert.arrayOfObject -* assert.arrayOfString -* assert.arrayOfStream -* assert.arrayOfDate -* assert.arrayOfUuid -* assert.optionalArray -* assert.optionalBool -* assert.optionalBuffer -* assert.optionalFunc -* assert.optionalNumber -* assert.optionalObject -* assert.optionalString -* assert.optionalStream -* assert.optionalDate -* assert.optionalUuid -* assert.optionalArrayOfArray -* assert.optionalArrayOfBool -* assert.optionalArrayOfBuffer -* assert.optionalArrayOfFunc -* assert.optionalArrayOfNumber -* assert.optionalArrayOfObject -* assert.optionalArrayOfString -* assert.optionalArrayOfStream -* assert.optionalArrayOfDate -* assert.optionalArrayOfUuid -* assert.AssertionError -* assert.fail -* assert.ok -* assert.equal -* assert.notEqual -* assert.deepEqual -* assert.notDeepEqual -* assert.strictEqual -* assert.notStrictEqual -* assert.throws -* assert.doesNotThrow -* assert.ifError - -# Installation - - npm install assert-plus - -## License - -The MIT License (MIT) -Copyright (c) 2012 Mark Cavage - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -## Bugs - -See . diff --git a/node_modules/assert-plus/assert.js b/node_modules/assert-plus/assert.js deleted file mode 100644 index 6bce4d8..0000000 --- a/node_modules/assert-plus/assert.js +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright (c) 2012, Mark Cavage. All rights reserved. -// Copyright 2015 Joyent, Inc. - -var assert = require('assert'); -var Stream = require('stream').Stream; -var util = require('util'); - - -///--- Globals - -/* JSSTYLED */ -var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; - - -///--- Internal - -function _capitalize(str) { - return (str.charAt(0).toUpperCase() + str.slice(1)); -} - -function _toss(name, expected, oper, arg, actual) { - throw new assert.AssertionError({ - message: util.format('%s (%s) is required', name, expected), - actual: (actual === undefined) ? typeof (arg) : actual(arg), - expected: expected, - operator: oper || '===', - stackStartFunction: _toss.caller - }); -} - -function _getClass(arg) { - return (Object.prototype.toString.call(arg).slice(8, -1)); -} - -function noop() { - // Why even bother with asserts? -} - - -///--- Exports - -var types = { - bool: { - check: function (arg) { return typeof (arg) === 'boolean'; } - }, - func: { - check: function (arg) { return typeof (arg) === 'function'; } - }, - string: { - check: function (arg) { return typeof (arg) === 'string'; } - }, - object: { - check: function (arg) { - return typeof (arg) === 'object' && arg !== null; - } - }, - number: { - check: function (arg) { - return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); - } - }, - buffer: { - check: function (arg) { return Buffer.isBuffer(arg); }, - operator: 'Buffer.isBuffer' - }, - array: { - check: function (arg) { return Array.isArray(arg); }, - operator: 'Array.isArray' - }, - stream: { - check: function (arg) { return arg instanceof Stream; }, - operator: 'instanceof', - actual: _getClass - }, - date: { - check: function (arg) { return arg instanceof Date; }, - operator: 'instanceof', - actual: _getClass - }, - regexp: { - check: function (arg) { return arg instanceof RegExp; }, - operator: 'instanceof', - actual: _getClass - }, - uuid: { - check: function (arg) { - return typeof (arg) === 'string' && UUID_REGEXP.test(arg); - }, - operator: 'isUUID' - } -}; - -function _setExports(ndebug) { - var keys = Object.keys(types); - var out; - - /* re-export standard assert */ - if (process.env.NODE_NDEBUG) { - out = noop; - } else { - out = function (arg, msg) { - if (!arg) { - _toss(msg, 'true', arg); - } - }; - } - - /* standard checks */ - keys.forEach(function (k) { - if (ndebug) { - out[k] = noop; - return; - } - var type = types[k]; - out[k] = function (arg, msg) { - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* optional checks */ - keys.forEach(function (k) { - var name = 'optional' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* arrayOf checks */ - keys.forEach(function (k) { - var name = 'arrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* optionalArrayOf checks */ - keys.forEach(function (k) { - var name = 'optionalArrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* re-export built-in assertions */ - Object.keys(assert).forEach(function (k) { - if (k === 'AssertionError') { - out[k] = assert[k]; - return; - } - if (ndebug) { - out[k] = noop; - return; - } - out[k] = assert[k]; - }); - - /* export ourselves (for unit tests _only_) */ - out._setExports = _setExports; - - return out; -} - -module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/node_modules/assert-plus/package.json b/node_modules/assert-plus/package.json deleted file mode 100644 index a4241d6..0000000 --- a/node_modules/assert-plus/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "assert-plus@^0.2.0", - "/Users/jbaylina/git/MVP/node_modules/http-signature" - ] - ], - "_from": "assert-plus@>=0.2.0 <0.3.0", - "_id": "assert-plus@0.2.0", - "_inCache": true, - "_installable": true, - "_location": "/assert-plus", - "_nodeVersion": "0.10.36", - "_npmUser": { - "email": "patrick.f.mooney@gmail.com", - "name": "pfmooney" - }, - "_npmVersion": "3.3.8", - "_phantomChildren": {}, - "_requested": { - "name": "assert-plus", - "raw": "assert-plus@^0.2.0", - "rawSpec": "^0.2.0", - "scope": null, - "spec": ">=0.2.0 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/http-signature" - ], - "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "_shasum": "d74e1b87e7affc0db8aadb7021f3fe48101ab234", - "_shrinkwrap": null, - "_spec": "assert-plus@^0.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/http-signature", - "author": { - "email": "mcavage@gmail.com", - "name": "Mark Cavage" - }, - "bugs": { - "url": "https://github.com/mcavage/node-assert-plus/issues" - }, - "contributors": [ - { - "email": "dave@daveeddy.com", - "name": "Dave Eddy" - }, - { - "email": "fred.kuo@joyent.com", - "name": "Fred Kuo" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "Lars-Magnus Skog" - }, - { - "email": "mcavage@gmail.com", - "name": "Mark Cavage" - }, - { - "email": "pmooney@pfmooney.com", - "name": "Patrick Mooney" - }, - { - "email": "robert.gulewich@joyent.com", - "name": "Rob Gulewich" - } - ], - "dependencies": {}, - "description": "Extra assertions on top of node's assert module", - "devDependencies": { - "faucet": "0.0.1", - "tape": "4.2.2" - }, - "directories": {}, - "dist": { - "shasum": "d74e1b87e7affc0db8aadb7021f3fe48101ab234", - "tarball": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz" - }, - "engines": { - "node": ">=0.8" - }, - "homepage": "https://github.com/mcavage/node-assert-plus#readme", - "license": "MIT", - "main": "./assert.js", - "maintainers": [ - { - "email": "mcavage@gmail.com", - "name": "mcavage" - }, - { - "email": "patrick.f.mooney@gmail.com", - "name": "pfmooney" - } - ], - "name": "assert-plus", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mcavage/node-assert-plus.git" - }, - "scripts": { - "test": "tape tests/*.js | ./node_modules/.bin/faucet" - }, - "version": "0.2.0" -} diff --git a/node_modules/async-eventemitter/.npmignore b/node_modules/async-eventemitter/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/async-eventemitter/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/async-eventemitter/Gruntfile.js b/node_modules/async-eventemitter/Gruntfile.js deleted file mode 100644 index d2267f3..0000000 --- a/node_modules/async-eventemitter/Gruntfile.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict'; - -module.exports = function(grunt) { - var files = ['Gruntfile.js', 'package.json', 'index.js', 'lib/*.js', 'test/*.js']; - - grunt.initConfig({ - jshint: { - // Pre-test - sloppy: { - options: { - curly: true, - eqeqeq: true, - eqnull: true, - globalstrict: true, - node: true, - camelcase: true, - newcap: true, - proto: true - }, - files: { - src: files - } - }, - // Post-test - strict: { - options: { - curly: true, - eqeqeq: true, - eqnull: true, - globalstrict: true, - node: true, - camelcase: true, - indent: 2, - immed: true, - latedef: 'nofunc', - newcap: true, - quotmark: true, - undef: true, - unused: true, - trailing: true - }, - files: { - src: files - } - } - }, - mochaTest: { - options: { - globals: ['should'] - }, - all: { src: ['test/**/*.js'] } - }, - watch: { - files: ['**/*.js', '!**/node_modules/**'], - tasks: ['test'] - } - }); - - // npm tasks - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-mocha-test'); - grunt.loadNpmTasks('grunt-contrib-watch'); - - // Default task. - grunt.registerTask('test', ['jshint:sloppy', 'mochaTest', 'jshint:strict']); - grunt.registerTask('default', ['test', 'watch']); -}; diff --git a/node_modules/async-eventemitter/Makefile b/node_modules/async-eventemitter/Makefile deleted file mode 100644 index edbf5d6..0000000 --- a/node_modules/async-eventemitter/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -test: - grunt test - -.PHONY: test diff --git a/node_modules/async-eventemitter/README.md b/node_modules/async-eventemitter/README.md deleted file mode 100644 index 4218a52..0000000 --- a/node_modules/async-eventemitter/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# AsyncEventEmitter - -> An EventEmitter that supports serial execution of asynchronous event listeners. -> It also supports event listeners without callbacks (synchronous), as well as -> interrupting the call-chain (similar to the DOM's e.stopPropagation()). - - -## Example - -```javascript -var AsyncEventEmitter = require('async-eventemitter'); -var events = new AsyncEventEmitter(); - -events.on('test', function (e, next) { - // The next event listener will wait til this is done - setTimeout(next, 1000); -}); - -events - .on('test', function (e) { - // This is behaves a synchronous event listener (note the lack of a second - // callback argument) - console.log(e); - // { data: 'data' } - }) - .on('test', function (e, next) { - // Even if you're not truly asynchronous you can use next() to stop propagation - next(new Error('You shall not pass')); - }); - -events.trigger('test', { data: 'data' }, function (err) { - // This is run after all of the event listeners are done - console.log(err); - // [Error: You shall not pass] -}); -``` - -More examples are found in the `test`-folder. - - -## Important differences between AsyncEventEmitter the native EventEmitter - -The API and behavior of AsyncEventEmitter is as far as possible and meaningful -identical to that of the native EventEmitter. However there are some important -differences which should be noted. - -* Data sent to event listeners (`eg emit(data)`) must always be **zero** or - **one** argument, and can *not* be a function. -* Event listeners will always recieve the data object, which may or may not be - undefined. -* The second argument can only be a callback, and will only be supplied if - the event listener has an arity of two or more (eg `function(e, next){}`). -* Event listeners with an arity of one or zero (eg without a callback argument - specified) will be treated as synchronous. -* Even if all event listeners are synchronous, they will still be executed - asynchronously (through setImmediate) and thus code suceeding `.emit()` will - be executed before any event listeners. -* Interupt the callback chain in async listeners by calling the callback with - the error as the first parameter; in sync listeners by throwing an Error. - - -## Usage - -### Unchanged - -For `addListener() on() once() removeListener() removeAllListeners() -setMaxListeners() listeners()` see the [EventEmitter docs](nodejs.org/api/events.html), -nothing new here. - - -### `emit(event, [data], [callback])` - -Executes all listeners for the event in order with the supplied data argument. -The optional callback is called when all of the listeners are done. - -### `.first(event, new)` - -Adds a listener to the beginning of the listeners array for the specified event. - -### `.at(event, index, listener)` - -Adds a listener at the specified index in the listeners array for the specified -event. - -### `.before(event, target, listener)` - -Adds a listener before the target listener in the listeners array for the -specified event. - -### `.after(event, target, listener)` - -Adds a listener after the target listener in the listeners array for the -specified event. - - -## Contribution - -1. Create an issue and tell me what you're gonna do, just to make sure there's - no duplicate work -2. Fork and branch your feature-branch of the develop branch -3. Write tests for changed/added functionality and make sure you don't break - existing ones -4. Adhere to existing code style -5. Submit a pull-request to the develop branch - - -## License - -**The MIT License (MIT)** - -Copyright © 2013 Andreas Hultgren diff --git a/node_modules/async-eventemitter/index.js b/node_modules/async-eventemitter/index.js deleted file mode 100644 index 0456425..0000000 --- a/node_modules/async-eventemitter/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./lib/AsyncEventEmitter'); diff --git a/node_modules/async-eventemitter/lib/AsyncEventEmitter.js b/node_modules/async-eventemitter/lib/AsyncEventEmitter.js deleted file mode 100644 index a95e238..0000000 --- a/node_modules/async-eventemitter/lib/AsyncEventEmitter.js +++ /dev/null @@ -1,178 +0,0 @@ -'use strict'; - -var EventEmitter = require('events').EventEmitter, - util = require('util'), - async = require('async'), - AsyncEventEmitter; - - -module.exports = exports = AsyncEventEmitter = function AsyncEventEmitter () { - EventEmitter.call(this); -}; - -util.inherits(AsyncEventEmitter, EventEmitter); - - -/* Public methods -============================================================================= */ - -AsyncEventEmitter.prototype.emit = function(event, data, callback) { - var self = this, - listeners = self._events[event] || []; - - // Optional data argument - if(!callback && typeof data === 'function') { - callback = data; - data = undefined; - } - - // Special treatment of internal newListener and removeListener events - if(event === 'newListener' || event === 'removeListener') { - data = { - event: data, - fn: callback - }; - - callback = undefined; - } - - // A single listener is just a function not an array... - listeners = Array.isArray(listeners) ? listeners : [listeners]; - - async.eachSeries(listeners, function (fn, next) { - var err; - - // Support synchronous functions - if(fn.length < 2) { - try { - fn.call(self, data); - } - catch (e) { - err = e; - } - - return next(err); - } - - // Async - fn.call(self, data, next); - }, callback); - - return self; -}; - - -AsyncEventEmitter.prototype.once = function (type, listener) { - var self = this, - g; - - if (typeof listener !== 'function') { - throw new TypeError('listener must be a function'); - } - - // Hack to support set arity - if(listener.length >= 2) { - g = function (e, next) { - self.removeListener(type, g); - listener(e, next); - }; - } - else { - g = function (e) { - self.removeListener(type, g); - listener(e); - }; - } - - g.listener = listener; - self.on(type, g); - - return self; -}; - - -AsyncEventEmitter.prototype.first = function(event, listener) { - var listeners = this._events[event] || []; - - // Contract - if(typeof listener !== 'function') { - throw new TypeError('listener must be a function'); - } - - // Listeners are not always an array - if(!Array.isArray(listeners)) { - this._events[event] = listeners = [listeners]; - } - - listeners.unshift(listener); - - return this; -}; - - -AsyncEventEmitter.prototype.at = function(event, index, listener) { - var listeners = this._events[event] || []; - - // Contract - if(typeof listener !== 'function') { - throw new TypeError('listener must be a function'); - } - if(typeof index !== 'number' || index < 0) { - throw new TypeError('index must be a non-negative integer'); - } - - // Listeners are not always an array - if(!Array.isArray(listeners)) { - this._events[event] = listeners = [listeners]; - } - - listeners.splice(index, 0, listener); - - return this; -}; - - -AsyncEventEmitter.prototype.before = function(event, target, listener) { - return this._beforeOrAfter(event, target, listener); -}; - - -AsyncEventEmitter.prototype.after = function(event, target, listener) { - return this._beforeOrAfter(event, target, listener, 'after'); -}; - - -/* Private methods -============================================================================= */ - -AsyncEventEmitter.prototype._beforeOrAfter = function(event, target, listener, beforeOrAfter) { - var listeners = this._events[event] || [], - i, index, - add = beforeOrAfter === 'after' ? 1 : 0; - - // Contract - if(typeof listener !== 'function') { - throw new TypeError('listener must be a function'); - } - if(typeof target !== 'function') { - throw new TypeError('target must be a function'); - } - - // Listeners are not always an array - if(!Array.isArray(listeners)) { - this._events[event] = listeners = [listeners]; - } - - index = listeners.length; - - for(i = listeners.length; i--;) { - if(listeners[i] === target) { - index = i + add; - break; - } - } - - listeners.splice(index, 0, listener); - - return this; -}; diff --git a/node_modules/async-eventemitter/node_modules/async/LICENSE b/node_modules/async-eventemitter/node_modules/async/LICENSE deleted file mode 100644 index b7f9d50..0000000 --- a/node_modules/async-eventemitter/node_modules/async/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Caolan McMahon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/async-eventemitter/node_modules/async/README.md b/node_modules/async-eventemitter/node_modules/async/README.md deleted file mode 100644 index 951f76e..0000000 --- a/node_modules/async-eventemitter/node_modules/async/README.md +++ /dev/null @@ -1,1425 +0,0 @@ -# Async.js - -Async is a utility module which provides straight-forward, powerful functions -for working with asynchronous JavaScript. Although originally designed for -use with [node.js](http://nodejs.org), it can also be used directly in the -browser. Also supports [component](https://github.com/component/component). - -Async provides around 20 functions that include the usual 'functional' -suspects (map, reduce, filter, each…) as well as some common patterns -for asynchronous control flow (parallel, series, waterfall…). All these -functions assume you follow the node.js convention of providing a single -callback as the last argument of your async function. - - -## Quick Examples - -```javascript -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); - -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); - -async.parallel([ - function(){ ... }, - function(){ ... } -], callback); - -async.series([ - function(){ ... }, - function(){ ... } -]); -``` - -There are many more functions available so take a look at the docs below for a -full list. This module aims to be comprehensive, so if you feel anything is -missing please create a GitHub issue for it. - -## Common Pitfalls - -### Binding a context to an iterator - -This section is really about bind, not about async. If you are wondering how to -make async execute your iterators in a given context, or are confused as to why -a method of another library isn't working as an iterator, study this example: - -```js -// Here is a simple object with an (unnecessarily roundabout) squaring method -var AsyncSquaringLibrary = { - squareExponent: 2, - square: function(number, callback){ - var result = Math.pow(number, this.squareExponent); - setTimeout(function(){ - callback(null, result); - }, 200); - } -}; - -async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){ - // result is [NaN, NaN, NaN] - // This fails because the `this.squareExponent` expression in the square - // function is not evaluated in the context of AsyncSquaringLibrary, and is - // therefore undefined. -}); - -async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){ - // result is [1, 4, 9] - // With the help of bind we can attach a context to the iterator before - // passing it to async. Now the square function will be executed in its - // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent` - // will be as expected. -}); -``` - -## Download - -The source is available for download from -[GitHub](http://github.com/caolan/async). -Alternatively, you can install using Node Package Manager (npm): - - npm install async - -__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed - -## In the Browser - -So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage: - -```html - - -``` - -## Documentation - -### Collections - -* [each](#each) -* [eachSeries](#eachSeries) -* [eachLimit](#eachLimit) -* [map](#map) -* [mapSeries](#mapSeries) -* [mapLimit](#mapLimit) -* [filter](#filter) -* [filterSeries](#filterSeries) -* [reject](#reject) -* [rejectSeries](#rejectSeries) -* [reduce](#reduce) -* [reduceRight](#reduceRight) -* [detect](#detect) -* [detectSeries](#detectSeries) -* [sortBy](#sortBy) -* [some](#some) -* [every](#every) -* [concat](#concat) -* [concatSeries](#concatSeries) - -### Control Flow - -* [series](#series) -* [parallel](#parallel) -* [parallelLimit](#parallellimittasks-limit-callback) -* [whilst](#whilst) -* [doWhilst](#doWhilst) -* [until](#until) -* [doUntil](#doUntil) -* [forever](#forever) -* [waterfall](#waterfall) -* [compose](#compose) -* [applyEach](#applyEach) -* [applyEachSeries](#applyEachSeries) -* [queue](#queue) -* [cargo](#cargo) -* [auto](#auto) -* [iterator](#iterator) -* [apply](#apply) -* [nextTick](#nextTick) -* [times](#times) -* [timesSeries](#timesSeries) - -### Utils - -* [memoize](#memoize) -* [unmemoize](#unmemoize) -* [log](#log) -* [dir](#dir) -* [noConflict](#noConflict) - - -## Collections - - - -### each(arr, iterator, callback) - -Applies an iterator function to each item in an array, in parallel. -The iterator is called with an item from the list and a callback for when it -has finished. If the iterator passes an error to this callback, the main -callback for the each function is immediately called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err) which must be called once it has - completed. If no error has occured, the callback should be run without - arguments or with an explicit null argument. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - ---------------------------------------- - - - -### eachSeries(arr, iterator, callback) - -The same as each only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. This means the iterator functions will complete in order. - - ---------------------------------------- - - - -### eachLimit(arr, limit, iterator, callback) - -The same as each only no more than "limit" iterators will be simultaneously -running at any time. - -Note that the items are not processed in batches, so there is no guarantee that - the first "limit" iterator functions will complete before any others are -started. - -__Arguments__ - -* arr - An array to iterate over. -* limit - The maximum number of iterators to run at any time. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err) which must be called once it has - completed. If no error has occured, the callback should be run without - arguments or with an explicit null argument. -* callback(err) - A callback which is called after all the iterator functions - have finished, or an error has occurred. - -__Example__ - -```js -// Assume documents is an array of JSON objects and requestApi is a -// function that interacts with a rate-limited REST api. - -async.eachLimit(documents, 20, requestApi, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - ---------------------------------------- - - -### map(arr, iterator, callback) - -Produces a new array of values by mapping each value in the given array through -the iterator function. The iterator is called with an item from the array and a -callback for when it has finished processing. The callback takes 2 arguments, -an error and the transformed item from the array. If the iterator passes an -error to this callback, the main callback for the map function is immediately -called with the error. - -Note, that since this function applies the iterator to each item in parallel -there is no guarantee that the iterator functions will complete in order, however -the results array will be in the same order as the original array. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, transformed) which must be called once - it has completed with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - ---------------------------------------- - - -### mapSeries(arr, iterator, callback) - -The same as map only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - ---------------------------------------- - - -### mapLimit(arr, limit, iterator, callback) - -The same as map only no more than "limit" iterators will be simultaneously -running at any time. - -Note that the items are not processed in batches, so there is no guarantee that - the first "limit" iterator functions will complete before any others are -started. - -__Arguments__ - -* arr - An array to iterate over. -* limit - The maximum number of iterators to run at any time. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, transformed) which must be called once - it has completed with an error (which can be null) and a transformed item. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array of the - transformed items from the original array. - -__Example__ - -```js -async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - ---------------------------------------- - - -### filter(arr, iterator, callback) - -__Alias:__ select - -Returns a new array of all the values which pass an async truth test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(results) - A callback which is called after all the iterator - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - ---------------------------------------- - - -### filterSeries(arr, iterator, callback) - -__alias:__ selectSeries - -The same as filter only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - ---------------------------------------- - - -### reject(arr, iterator, callback) - -The opposite of filter. Removes values that pass an async truth test. - ---------------------------------------- - - -### rejectSeries(arr, iterator, callback) - -The same as reject, only the iterator is applied to each item in the array -in series. - - ---------------------------------------- - - -### reduce(arr, memo, iterator, callback) - -__aliases:__ inject, foldl - -Reduces a list of values into a single value using an async iterator to return -each successive step. Memo is the initial state of the reduction. This -function only operates in series. For performance reasons, it may make sense to -split a call to this function into a parallel map, then use the normal -Array.prototype.reduce on the results. This function is for situations where -each step in the reduction needs to be async, if you can get the data before -reducing it then it's probably a good idea to do so. - -__Arguments__ - -* arr - An array to iterate over. -* memo - The initial state of the reduction. -* iterator(memo, item, callback) - A function applied to each item in the - array to produce the next step in the reduction. The iterator is passed a - callback(err, reduction) which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main callback is - immediately called with the error. -* callback(err, result) - A callback which is called after all the iterator - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - - -### reduceRight(arr, memo, iterator, callback) - -__Alias:__ foldr - -Same as reduce, only operates on the items in the array in reverse order. - - ---------------------------------------- - - -### detect(arr, iterator, callback) - -Returns the first value in a list that passes an async truth test. The -iterator is applied in parallel, meaning the first iterator to return true will -fire the detect callback with that result. That means the result might not be -the first item in the original array (in terms of order) that passes the test. - -If order within the original array is important then look at detectSeries. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value undefined if none passed. - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - ---------------------------------------- - - -### detectSeries(arr, iterator, callback) - -The same as detect, only the iterator is applied to each item in the array -in series. This means the result is always the first in the original array (in -terms of array order) that passes the truth test. - - ---------------------------------------- - - -### sortBy(arr, iterator, callback) - -Sorts a list by the results of running each value through an async iterator. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, sortValue) which must be called once it - has completed with an error (which can be null) and a value to use as the sort - criteria. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is the items from - the original array sorted by the values returned by the iterator calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - ---------------------------------------- - - -### some(arr, iterator, callback) - -__Alias:__ any - -Returns true if at least one element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. Once any iterator -call returns true, the main callback is immediately called. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called as soon as any iterator returns - true, or after all the iterator functions have finished. Result will be - either true or false depending on the values of the async tests. - -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - ---------------------------------------- - - -### every(arr, iterator, callback) - -__Alias:__ all - -Returns true if every element in the array satisfies an async test. -_The callback for each iterator call only accepts a single argument of true or -false, it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like fs.exists. - -__Arguments__ - -* arr - An array to iterate over. -* iterator(item, callback) - A truth test to apply to each item in the array. - The iterator is passed a callback(truthValue) which must be called with a - boolean argument once it has completed. -* callback(result) - A callback which is called after all the iterator - functions have finished. Result will be either true or false depending on - the values of the async tests. - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - ---------------------------------------- - - -### concat(arr, iterator, callback) - -Applies an iterator to each item in a list, concatenating the results. Returns the -concatenated list. The iterators are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of the arguments passed to the iterator function. - -__Arguments__ - -* arr - An array to iterate over -* iterator(item, callback) - A function to apply to each item in the array. - The iterator is passed a callback(err, results) which must be called once it - has completed with an error (which can be null) and an array of results. -* callback(err, results) - A callback which is called after all the iterator - functions have finished, or an error has occurred. Results is an array containing - the concatenated results of the iterator function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - ---------------------------------------- - - -### concatSeries(arr, iterator, callback) - -Same as async.concat, but executes in series instead of parallel. - - -## Control Flow - - -### series(tasks, [callback]) - -Run an array of functions in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run and the callback for the series is -immediately called with the value of the error. Once the tasks have completed, -the results are passed to the final callback as an array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.series. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - - -### parallel(tasks, [callback]) - -Run an array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main callback is immediately called with the value of the error. -Once the tasks have completed, the results are passed to the final callback as an -array. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final callback as an object -instead of an array. This can be a more readable way of handling results from -async.parallel. - - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - - -### parallelLimit(tasks, limit, [callback]) - -The same as parallel only the tasks are executed in parallel with a maximum of "limit" -tasks executing at any time. - -Note that the tasks are not executed in batches, so there is no guarantee that -the first "limit" tasks will complete before any others are started. - -__Arguments__ - -* tasks - An array or object containing functions to run, each function is passed - a callback(err, result) it must call on completion with an error (which can - be null) and an optional result value. -* limit - The maximum number of tasks to run at any time. -* callback(err, results) - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - ---------------------------------------- - - -### whilst(test, fn, callback) - -Repeatedly call fn, while test returns true. Calls the callback when stopped, -or an error occurs. - -__Arguments__ - -* test() - synchronous truth test to perform before each execution of fn. -* fn(callback) - A function to call each time the test passes. The function is - passed a callback(err) which must be called once it has completed with an - optional error argument. -* callback(err) - A callback which is called after the test fails and repeated - execution of fn has stopped. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - - -### doWhilst(fn, test, callback) - -The post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - - -### until(test, fn, callback) - -Repeatedly call fn, until test returns true. Calls the callback when stopped, -or an error occurs. - -The inverse of async.whilst. - ---------------------------------------- - - -### doUntil(fn, test, callback) - -Like doWhilst except the test is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - - -### forever(fn, callback) - -Calls the asynchronous function 'fn' repeatedly, in series, indefinitely. -If an error is passed to fn's callback then 'callback' is called with the -error, otherwise it will never be called. - ---------------------------------------- - - -### waterfall(tasks, [callback]) - -Runs an array of functions in series, each passing their results to the next in -the array. However, if any of the functions pass an error to the callback, the -next function is not executed and the main callback is immediately called with -the error. - -__Arguments__ - -* tasks - An array of functions to run, each function is passed a - callback(err, result1, result2, ...) it must call on completion. The first - argument is an error (which can be null) and any further arguments will be - passed as arguments in order to the next task. -* callback(err, [results]) - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback){ - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback){ - callback(null, 'three'); - }, - function(arg1, callback){ - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` - ---------------------------------------- - -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions f(), g() and h() would produce the result of -f(g(h())), only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* functions... - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- - -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling the -callback after all functions have completed. If you only provide the first -argument then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* fns - the asynchronous functions to all call with the same arguments -* args... - any number of separate arguments to pass to the function -* callback - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - ---------------------------------------- - - -### applyEachSeries(arr, iterator, callback) - -The same as applyEach only the functions are applied in series. - ---------------------------------------- - - -### queue(worker, concurrency) - -Creates a queue object with the specified concurrency. Tasks added to the -queue will be processed in parallel (up to the concurrency limit). If all -workers are in progress, the task is queued until one is available. Once -a worker has completed a task, the task's callback is called. - -__Arguments__ - -* worker(task, callback) - An asynchronous function for processing a queued - task, which must call its callback(err) argument when finished, with an - optional error as an argument. -* concurrency - An integer for determining how many worker functions should be - run in parallel. - -__Queue objects__ - -The queue object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* concurrency - an integer for determining how many worker functions should be - run in parallel. This property can be changed after a queue is created to - alter the concurrency on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* unshift(task, [callback]) - add a new task to the front of the queue. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing bar'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - ---------------------------------------- - - -### cargo(worker, [payload]) - -Creates a cargo object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the payload limit). If the -worker is in progress, the task is queued until it is available. Once -the worker has completed some tasks, each callback of those tasks is called. - -__Arguments__ - -* worker(tasks, callback) - An asynchronous function for processing an array of - queued tasks, which must call its callback(err) argument when finished, with - an optional error as an argument. -* payload - An optional integer for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The cargo object returned by this function has the following properties and -methods: - -* length() - a function returning the number of items waiting to be processed. -* payload - an integer for determining how many tasks should be - process per round. This property can be changed after a cargo is created to - alter the payload on-the-fly. -* push(task, [callback]) - add a new task to the queue, the callback is called - once the worker has finished processing the task. - instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list. -* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued -* empty - a callback that is called when the last item from the queue is given to a worker -* drain - a callback that is called when the last item from the queue has returned from the worker - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i -### auto(tasks, [callback]) - -Determines the best order for running functions based on their requirements. -Each function can optionally depend on other functions being completed first, -and each function is run as soon as its requirements are satisfied. If any of -the functions pass an error to their callback, that function will not complete -(so any other functions depending on it will not run) and the main callback -will be called immediately with the error. Functions also receive an object -containing the results of functions which have completed so far. - -Note, all functions are called with a results object as a second argument, -so it is unsafe to pass functions in the tasks object which cannot handle the -extra argument. For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling readFile with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to readFile in a function which does not forward the -results object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* tasks - An object literal containing named functions or an array of - requirements, with the function itself the last item in the array. The key - used for each function or array is used when specifying requirements. The - function receives two arguments: (1) a callback(err, result) which must be - called when finished, passing an error (which can be null) and the result of - the function's execution, and (2) a results object, containing the results of - the previously executed functions. -* callback(err, results) - An optional callback which is called when all the - tasks have been completed. The callback will receive an error as an argument - if any tasks pass an error to their callback. Results will always be passed - but if an error occurred, no other tasks will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - // async code to get some data - }, - make_folder: function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - }, - write_file: ['get_data', 'make_folder', function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, filename); - }], - email_link: ['write_file', function(callback, results){ - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - }] -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - // async code to get some data - }, - function(callback){ - // async code to create a directory to store a file in - // this is run at the same time as getting the data - } -], -function(err, results){ - async.series([ - function(callback){ - // once there is some data and the directory exists, - // write the data to a file in the directory - }, - function(callback){ - // once the file is written let's email a link to it... - } - ]); -}); -``` - -For a complicated series of async tasks using the auto function makes adding -new tasks much easier and makes the code more readable. - - ---------------------------------------- - - -### iterator(tasks) - -Creates an iterator function which calls the next function in the array, -returning a continuation to call the next one after that. It's also possible to -'peek' the next iterator by doing iterator.next(). - -This function is used internally by the async module but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* tasks - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - - -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied, a useful -shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - - -### nextTick(callback) - -Calls the callback on a later loop around the event loop. In node.js this just -calls process.nextTick, in the browser it falls back to setImmediate(callback) -if available, otherwise setTimeout(callback, 0), which means other higher priority -events may precede the execution of the callback. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* callback - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - - -### times(n, callback) - -Calls the callback n times and accumulates results in the same manner -you would use with async.map. - -__Arguments__ - -* n - The number of times to run the function. -* callback - The function to call n times. - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - - -### timesSeries(n, callback) - -The same as times only the iterator is applied to each item in the array in -series. The next iterator is only called once the current one has completed -processing. The results array will be in the same order as the original. - - -## Utils - - -### memoize(fn, [hasher]) - -Caches the results of an async function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* fn - the function you to proxy and cache results from. -* hasher - an optional function for generating a custom hash for storing - results, it has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - - -### unmemoize(fn) - -Undoes a memoized function, reverting it to the original, unmemoized -form. Comes handy in tests. - -__Arguments__ - -* fn - the memoized function - - -### log(function, arguments) - -Logs the result of an async function to the console. Only works in node.js or -in browsers that support console.log and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.log is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - - -### dir(function, arguments) - -Logs the result of an async function to the console using console.dir to -display the properties of the resulting object. Only works in node.js or -in browsers that support console.dir and console.error (such as FF and Chrome). -If multiple arguments are returned from the async function, console.dir is -called on each argument in order. - -__Arguments__ - -* function - The function you want to eventually apply all arguments to. -* arguments... - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - - -### noConflict() - -Changes the value of async back to its original value, returning a reference to the -async object. diff --git a/node_modules/async-eventemitter/node_modules/async/component.json b/node_modules/async-eventemitter/node_modules/async/component.json deleted file mode 100644 index bbb0115..0000000 --- a/node_modules/async-eventemitter/node_modules/async/component.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "async", - "repo": "caolan/async", - "description": "Higher-order functions and common patterns for asynchronous code", - "version": "0.1.23", - "keywords": [], - "dependencies": {}, - "development": {}, - "main": "lib/async.js", - "scripts": [ "lib/async.js" ] -} diff --git a/node_modules/async-eventemitter/node_modules/async/lib/async.js b/node_modules/async-eventemitter/node_modules/async/lib/async.js deleted file mode 100755 index 1eebb15..0000000 --- a/node_modules/async-eventemitter/node_modules/async/lib/async.js +++ /dev/null @@ -1,958 +0,0 @@ -/*global setImmediate: false, setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root, previous_async; - - root = this; - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - var called = false; - return function() { - if (called) throw new Error("Callback was already called."); - called = true; - fn.apply(root, arguments); - } - } - - //// cross-browser compatiblity functions //// - - var _each = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _each(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _each(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - if (typeof setImmediate === 'function') { - async.nextTick = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - async.setImmediate = async.nextTick; - } - else { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - async.setImmediate = async.nextTick; - } - } - else { - async.nextTick = process.nextTick; - if (typeof setImmediate !== 'undefined') { - async.setImmediate = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - } - else { - async.setImmediate = async.nextTick; - } - } - - async.each = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _each(arr, function (x) { - iterator(x, only_once(function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - } - })); - }); - }; - async.forEach = async.each; - - async.eachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - async.forEachSeries = async.eachSeries; - - async.eachLimit = function (arr, limit, iterator, callback) { - var fn = _eachLimit(limit); - fn.apply(null, [arr, iterator, callback]); - }; - async.forEachLimit = async.eachLimit; - - var _eachLimit = function (limit) { - - return function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; - - (function replenish () { - if (completed >= arr.length) { - return callback(); - } - - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed >= arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.each].concat(args)); - }; - }; - var doParallelLimit = function(limit, fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [_eachLimit(limit)].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.eachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = function (arr, limit, iterator, callback) { - return _mapLimit(limit)(arr, iterator, callback); - }; - - var _mapLimit = function(limit) { - return doParallelLimit(limit, _asyncMap); - }; - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.eachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var results = {}; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _each(listeners.slice(0), function (fn) { - fn(); - }); - }; - - addListener(function () { - if (_keys(results).length === keys.length) { - callback(null, results); - callback = function () {}; - } - }); - - _each(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _each(_keys(results), function(rkey) { - safeResults[rkey] = results[rkey]; - }); - safeResults[k] = args; - callback(err, safeResults); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor !== Array) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback.apply(null, arguments); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.setImmediate(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - var _parallel = function(eachfn, tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - eachfn.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - eachfn.each(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.parallel = function (tasks, callback) { - _parallel({ map: async.map, each: async.each }, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback); - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.eachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doWhilst = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (test()) { - async.doWhilst(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doUntil = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (!test()) { - async.doUntil(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.queue = function (worker, concurrency) { - if (concurrency === undefined) { - concurrency = 1; - } - function _insert(q, data, pos, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - var item = { - data: task, - callback: typeof callback === 'function' ? callback : null - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.saturated && q.tasks.length === concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - if (workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if (q.empty && q.tasks.length === 0) { - q.empty(); - } - workers += 1; - var next = function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if (q.drain && q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - var cb = only_once(next); - worker(task.data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - } - }; - return q; - }; - - async.cargo = function (worker, payload) { - var working = false, - tasks = []; - - var cargo = { - tasks: tasks, - payload: payload, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - if (cargo.saturated && tasks.length === payload) { - cargo.saturated(); - } - }); - async.setImmediate(cargo.process); - }, - process: function process() { - if (working) return; - if (tasks.length === 0) { - if(cargo.drain) cargo.drain(); - return; - } - - var ts = typeof payload === 'number' - ? tasks.splice(0, payload) - : tasks.splice(0); - - var ds = _map(ts, function (task) { - return task.data; - }); - - if(cargo.empty) cargo.empty(); - working = true; - worker(ds, function () { - working = false; - - var args = arguments; - _each(ts, function (data) { - if (data.callback) { - data.callback.apply(null, args); - } - }); - - process(); - }); - }, - length: function () { - return tasks.length; - }, - running: function () { - return working; - } - }; - return cargo; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _each(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - async.times = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.map(counter, iterator, callback); - }; - - async.timesSeries = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.mapSeries(counter, iterator, callback); - }; - - async.compose = function (/* functions... */) { - var fns = Array.prototype.reverse.call(arguments); - return function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([function () { - var err = arguments[0]; - var nextargs = Array.prototype.slice.call(arguments, 1); - cb(err, nextargs); - }])) - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }; - }; - - var _applyEach = function (eachfn, fns /*args...*/) { - var go = function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - return eachfn(fns, function (fn, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }; - if (arguments.length > 2) { - var args = Array.prototype.slice.call(arguments, 2); - return go.apply(this, args); - } - else { - return go; - } - }; - async.applyEach = doParallel(_applyEach); - async.applyEachSeries = doSeries(_applyEach); - - async.forever = function (fn, callback) { - function next(err) { - if (err) { - if (callback) { - return callback(err); - } - throw err; - } - fn(next); - } - next(); - }; - - // AMD / RequireJS - if (typeof define !== 'undefined' && define.amd) { - define([], function () { - return async; - }); - } - // Node.js - else if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - // included directly via -``` - -For [Node.js](http://nodejs.org), the library is available from the [npm](https://npmjs.org/) registry - - $ npm install bignumber.js - -```javascript -var BigNumber = require('bignumber.js'); -``` - -To load with AMD loader libraries such as [requireJS](http://requirejs.org/): - -```javascript -require(['path/to/bignumber'], function(BigNumber) { - // Use BigNumber here in local scope. No global BigNumber. -}); -``` - -## Use - -*In all examples below, `var`, semicolons and `toString` calls are not shown. -If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* - -The library exports a single function: `BigNumber`, the constructor of BigNumber instances. - -It accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object, - -```javascript -x = new BigNumber(123.4567) -y = BigNumber('123456.7e-3') -z = new BigNumber(x) -x.equals(y) && y.equals(z) && x.equals(z) // true -``` - - -and a base from 2 to 64 inclusive can be specified. - -```javascript -x = new BigNumber(1011, 2) // "11" -y = new BigNumber('zz.9', 36) // "1295.25" -z = x.plus(y) // "1306.25" -``` - -A BigNumber is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new BigNumber(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a BigNumber can be chained. - -```javascript -x.dividedBy(y).plus(z).times(9).floor() -x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil() -``` - -Many method names have a shorter alias. - -```javascript -x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true -x.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true -``` - -Like JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods - -```javascript -x = new BigNumber(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -x.toNumber() // 255.5 -``` - - and a base can be specified for `toString`. - - ```javascript - x.toString(16) // "ff.8" - ``` - -There is also a `toFormat` method which may be useful for internationalisation - -```javascript -y = new BigNumber('1234567.898765') -y.toFormat(2) // "1,234,567.90" -``` - -The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor. - -The other arithmetic operations always give the exact result. - -```javascript -BigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) -// Alternatively, BigNumber.config( 10, 4 ); - -x = new BigNumber(2); -y = new BigNumber(3); -z = x.div(y) // "0.6666666667" -z.sqrt() // "0.8164965809" -z.pow(-3) // "3.3749999995" -z.toString(2) // "0.1010101011" -z.times(z) // "0.44444444448888888889" -z.times(z).round(10) // "0.4444444445" -``` - -There is a `toFraction` method with an optional *maximum denominator* argument - -```javascript -y = new BigNumber(355) -pi = y.dividedBy(113) // "3.1415929204" -pi.toFraction() // [ "7853982301", "2500000000" ] -pi.toFraction(1000) // [ "355", "113" ] -``` - -and `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values. - -```javascript -x = new BigNumber(NaN) // "NaN" -y = new BigNumber(Infinity) // "Infinity" -x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true -``` - -The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - - -```javascript -x = new BigNumber(-123.456); -x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - - -Multiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it. - -```javascript -// Set DECIMAL_PLACES for the original BigNumber constructor -BigNumber.config({ DECIMAL_PLACES: 10 }) - -// Create another BigNumber constructor, optionally passing in a configuration object -BN = BigNumber.another({ DECIMAL_PLACES: 5 }) - -x = new BigNumber(1) -y = new BN(1) - -x.div(3) // '0.3333333333' -y.div(3) // '0.33333' -``` - -For futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. - -## Test - -The *test* directory contains the test scripts for each method. - -The tests can be run with Node or a browser. For Node use - - $ npm test - -or - - $ node test/every-test - -To test a single method, e.g. - - $ node test/toFraction - -For the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. - -*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. - -## Versions - -This is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported. - -## Performance - -See the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory. - -## Build - -For Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed - - npm install uglify-js -g - -then - - npm run build - -will create *bignumber.min.js*. - -A source map will also be created in the root directory. - -## Feedback - -Open an issue, or email - -Michael - -M8ch88l@gmail.com - -## Licence - -MIT. - -See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE). - -## Change Log - -####2.4.0 -* 14/07/2016 -* #97 Add exports to support ES6 imports. - -####2.3.0 -* 07/03/2016 -* #86 Add modulus parameter to `toPower`. - -####2.2.0 -* 03/03/2016 -* #91 Permit larger JS integers. - -####2.1.4 -* 15/12/2015 -* Correct UMD. - -####2.1.3 -* 13/12/2015 -* Refactor re global object and crypto availability when bundling. - -####2.1.2 -* 10/12/2015 -* Bugfix: `window.crypto` not assigned to `crypto`. - -####2.1.1 -* 09/12/2015 -* Prevent code bundler from adding `crypto` shim. - -####2.1.0 -* 26/10/2015 -* For `valueOf` and `toJSON`, include the minus sign with negative zero. - -####2.0.8 -* 2/10/2015 -* Internal round function bugfix. - -####2.0.6 -* 31/03/2015 -* Add bower.json. Tweak division after in-depth review. - -####2.0.5 -* 25/03/2015 -* Amend README. Remove bitcoin address. - -####2.0.4 -* 25/03/2015 -* Critical bugfix #58: division. - -####2.0.3 -* 18/02/2015 -* Amend README. Add source map. - -####2.0.2 -* 18/02/2015 -* Correct links. - -####2.0.1 -* 18/02/2015 -* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods. -* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. -* Add an `another` method to enable multiple independent constructors to be created. -* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. -* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. -* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. -* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. -* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. -* Improve code quality. -* Improve documentation. - -####2.0.0 -* 29/12/2014 -* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. -* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. -* Store a BigNumber's coefficient in base 1e14, rather than base 10. -* Add fast path for integers to BigNumber constructor. -* Incorporate the library into the online documentation. - -####1.5.0 -* 13/11/2014 -* Add `toJSON` and `decimalPlaces` methods. - -####1.4.1 -* 08/06/2014 -* Amend README. - -####1.4.0 -* 08/05/2014 -* Add `toNumber`. - -####1.3.0 -* 08/11/2013 -* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. -* Maximum radix to 64. - -####1.2.1 -* 17/10/2013 -* Sign of zero when x < 0 and x + (-x) = 0. - -####1.2.0 -* 19/9/2013 -* Throw Error objects for stack. - -####1.1.1 -* 22/8/2013 -* Show original value in constructor error message. - -####1.1.0 -* 1/8/2013 -* Allow numbers with trailing radix point. - -####1.0.1 -* Bugfix: error messages with incorrect method name - -####1.0.0 -* 8/11/2012 -* Initial release diff --git a/node_modules/bignumber.js/bignumber.js b/node_modules/bignumber.js/bignumber.js deleted file mode 100644 index 027c3c1..0000000 --- a/node_modules/bignumber.js/bignumber.js +++ /dev/null @@ -1,2737 +0,0 @@ -/*! bignumber.js v2.4.0 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (globalObj) { - 'use strict'; - - /* - bignumber.js v2.4.0 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2016 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, cryptoObj, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - if ( typeof crypto != 'undefined' ) cryptoObj = crypto; - - - /* - * Create and return a BigNumber constructor. - */ - function constructorFactory(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 && ( n > MAX_SAFE_INTEGER || n !== mathfloor(n) ) ) { - raise( id, tooManyDigits, x.s * n ); - } - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = constructorFactory; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && cryptoObj ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', cryptoObj ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( cryptoObj && cryptoObj.getRandomValues ) { - - a = cryptoObj.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = cryptoObj.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( cryptoObj && cryptoObj.randomBytes ) { - - // buffer - a = cryptoObj.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - cryptoObj.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', cryptoObj ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor( base / ( yc[0] + 1 ) ); - - // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1. - // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) { - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder. - // Trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while ( compare( prod, rem, prodL, remL ) == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if ( n == 0 ) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while ( compare( yc, rem, yL, remL ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ ( LOG_BASE - sd % LOG_BASE ) % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - return +this; - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If m is present, return the result modulo m. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using - * ROUNDING_MODE. - * - * The modular power operation works efficiently when x, n, and m are positive integers, - * otherwise it is equivalent to calculating x.toPower(n).modulo(m) (with POW_PRECISION 0). - * - * n {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * [m] {number|string|BigNumber} The modulus. - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - * - * Performs 54 loop iterations for n of 9007199254740991. - */ - P.toPower = P.pow = function ( n, m ) { - var k, y, z, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - if ( m != null ) { - id = 23; - m = new BigNumber(m); - } - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) || n == 0 ) { - k = Math.pow( +x, n ); - return new BigNumber( m ? k % m : k ); - } - - if (m) { - if ( n > 1 && x.gt(ONE) && x.isInt() && m.gt(ONE) && m.isInt() ) { - x = x.mod(m); - } else { - z = m; - - // Nullify m so only a single mod operation is performed at the end. - m = null; - } - } else if (POW_PRECISION) { - - // Truncating each coefficient array to a length of k after each multiplication - // equates to truncating significant digits to POW_PRECISION + [28, 41], - // i.e. there will be a minimum of 28 guard digits retained. - // (Using + 1.5 would give [9, 21] guard digits.) - k = mathceil( POW_PRECISION / LOG_BASE + 2 ); - } - - y = new BigNumber(ONE); - - for ( ; ; ) { - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if (k) { - if ( y.c.length > k ) y.c.length = k; - } else if (m) { - y = y.mod(m); - } - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - x = x.times(x); - if (k) { - if ( x.c && x.c.length > k ) x.c.length = k; - } else if (m) { - x = x.mod(m); - } - } - - if (m) return y; - if ( n < 0 ) y = ONE.div(y); - - return z ? y.mod(z) : k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument, and include the minus sign for - * negative zero. - */ - P.valueOf = P.toJSON = function () { - var str, - n = this, - e = n.e; - - if ( e === null ) return n.toString(); - - str = coeffToString( n.c ); - - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - - return n.s < 0 ? '-' + str : str; - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = constructorFactory(); - BigNumber.default = BigNumber.BigNumber = BigNumber; - - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node.js and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - - // Split string stops browserify adding crypto shim. - if ( !cryptoObj ) try { cryptoObj = require('cry' + 'pto'); } catch (e) {} - - // Browser. - } else { - if ( !globalObj ) globalObj = typeof self != 'undefined' ? self : Function('return this')(); - globalObj.BigNumber = BigNumber; - } -})(this); diff --git a/node_modules/bignumber.js/bignumber.js.map b/node_modules/bignumber.js/bignumber.js.map deleted file mode 100644 index 0a45181..0000000 --- a/node_modules/bignumber.js/bignumber.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bignumber.min.js","sources":["bignumber.js"],"names":["globalObj","constructorFactory","configObj","BigNumber","n","b","c","e","i","num","len","str","x","this","ERRORS","raise","isValidInt","id","round","DECIMAL_PLACES","ROUNDING_MODE","RegExp","ALPHABET","slice","test","parseNumeric","s","replace","length","tooManyDigits","charCodeAt","convertBase","isNumeric","indexOf","search","substring","MAX_SAFE_INTEGER","mathfloor","MAX_EXP","MIN_EXP","LOG_BASE","push","baseOut","baseIn","sign","d","k","r","xc","y","dp","rm","toLowerCase","POW_PRECISION","pow","toBaseOut","toFixedPoint","coeffToString","pop","div","unshift","charAt","format","caller","c0","ne","roundingMode","toString","TO_EXP_NEG","toExponential","maxOrMin","args","method","m","isArray","call","intValidatorWithErrors","min","max","name","truncate","normalise","j","msg","val","error","Error","sd","ni","rd","pows10","POWS_TEN","out","mathceil","BASE","P","prototype","ONE","TO_EXP_POS","CRYPTO","MODULO_MODE","FORMAT","decimalSeparator","groupSeparator","groupSize","secondaryGroupSize","fractionGroupSeparator","fractionGroupSize","another","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","v","p","a","arguments","o","has","hasOwnProperty","MAX","intValidatorNoErrors","notBool","cryptoObj","lt","gt","random","pow2_53","random53bitInt","Math","rand","getRandomValues","Uint32Array","randomBytes","copy","shift","multiply","base","temp","xlo","xhi","carry","klo","SQRT_BASE","khi","compare","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","yc","NaN","bitFloor","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","isNaN","p1","p2","absoluteValue","abs","ceil","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","divToInt","equals","eq","floor","greaterThan","greaterThanOrEqualTo","gte","isFinite","isInteger","isInt","isNegative","isNeg","isZero","lessThan","lessThanOrEqualTo","lte","minus","sub","t","xLTy","plus","xe","ye","reverse","modulo","mod","times","negated","neg","add","precision","z","squareRoot","sqrt","rep","half","mul","xcL","ycL","ylo","yhi","zc","sqrtBase","toDigits","toFixed","toFormat","arr","split","g1","g2","intPart","fractionPart","intDigits","substr","toFraction","md","d0","d2","exp","n0","n1","d1","toNumber","toPower","parseFloat","toPrecision","truncated","trunc","valueOf","toJSON","l","obj","Object","arrL","crypto","define","amd","module","exports","require","self","Function"],"mappings":";CAEC,SAAWA,GACR,YAuCA,SAASC,GAAmBC,GAiHxB,QAASC,GAAWC,EAAGC,GACnB,GAAIC,GAAGC,EAAGC,EAAGC,EAAKC,EAAKC,EACnBC,EAAIC,IAGR,MAAQD,YAAaT,IAIjB,MADIW,IAAQC,EAAO,GAAI,+BAAgCX,GAChD,GAAID,GAAWC,EAAGC,EAK7B,IAAU,MAALA,GAAcW,EAAYX,EAAG,EAAG,GAAIY,EAAI,QA4BtC,CAMH,GALAZ,EAAQ,EAAJA,EACJM,EAAMP,EAAI,GAIA,IAALC,EAED,MADAO,GAAI,GAAIT,GAAWC,YAAaD,GAAYC,EAAIO,GACzCO,EAAON,EAAGO,EAAiBP,EAAEL,EAAI,EAAGa,EAK/C,KAAOX,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,IAC7C,GAAMiB,QAAQ,OAAUf,EAAI,IAAMgB,EAASC,MAAO,EAAGlB,GAAM,MAC1D,SAAWC,EAAI,MAAU,GAAJD,EAAS,IAAM,IAAOmB,KAAKb,GAChD,MAAOc,GAAcb,EAAGD,EAAKF,EAAKJ,EAGlCI,IACAG,EAAEc,EAAY,EAAR,EAAItB,GAAUO,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAE1CT,GAAUH,EAAIgB,QAAS,YAAa,IAAKC,OAAS,IAGnDb,EAAOE,EAAIY,EAAezB,GAI9BK,GAAM,GAENG,EAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAGlEZ,EAAMoB,EAAapB,EAAK,GAAIN,EAAGO,EAAEc,OA9DmB,CAGpD,GAAKtB,YAAaD,GAKd,MAJAS,GAAEc,EAAItB,EAAEsB,EACRd,EAAEL,EAAIH,EAAEG,EACRK,EAAEN,GAAMF,EAAIA,EAAEE,GAAMF,EAAEmB,QAAUnB,OAChCa,EAAK,EAIT,KAAOR,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,EAAI,CAIhD,GAHAQ,EAAEc,EAAY,EAAR,EAAItB,GAAUA,GAAKA,EAAG,IAAO,EAG9BA,MAAQA,EAAI,CACb,IAAMG,EAAI,EAAGC,EAAIJ,EAAGI,GAAK,GAAIA,GAAK,GAAID,KAItC,MAHAK,GAAEL,EAAIA,EACNK,EAAEN,GAAKF,QACPa,EAAK,GAITN,EAAMP,EAAI,OACP,CACH,IAAM4B,EAAUR,KAAMb,EAAMP,EAAI,IAAO,MAAOqB,GAAcb,EAAGD,EAAKF,EACpEG,GAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,GAwDtE,KAhBOhB,EAAII,EAAIsB,QAAQ,MAAS,KAAKtB,EAAMA,EAAIgB,QAAS,IAAK,MAGtDnB,EAAIG,EAAIuB,OAAQ,OAAW,GAGrB,EAAJ3B,IAAQA,EAAIC,GACjBD,IAAMI,EAAIY,MAAOf,EAAI,GACrBG,EAAMA,EAAIwB,UAAW,EAAG3B,IACZ,EAAJD,IAGRA,EAAII,EAAIiB,QAINpB,EAAI,EAAyB,KAAtBG,EAAImB,WAAWtB,GAAWA,KAGvC,IAAME,EAAMC,EAAIiB,OAAkC,KAA1BjB,EAAImB,aAAapB,KAGzC,GAFAC,EAAMA,EAAIY,MAAOf,EAAGE,EAAM,GActB,GAXAA,EAAMC,EAAIiB,OAILnB,GAAOK,GAAUJ,EAAM,KAAQN,EAAIgC,GAAoBhC,IAAMiC,EAAUjC,KACxEW,EAAOE,EAAIY,EAAejB,EAAEc,EAAItB,GAGpCG,EAAIA,EAAIC,EAAI,EAGPD,EAAI+B,EAGL1B,EAAEN,EAAIM,EAAEL,EAAI,SAGT,IAASgC,EAAJhC,EAGRK,EAAEN,GAAMM,EAAEL,EAAI,OACX,CAWH,GAVAK,EAAEL,EAAIA,EACNK,EAAEN,KAMFE,GAAMD,EAAI,GAAMiC,EACP,EAAJjC,IAAQC,GAAKgC,GAET9B,EAAJF,EAAU,CAGX,IAFIA,GAAGI,EAAEN,EAAEmC,MAAO9B,EAAIY,MAAO,EAAGf,IAE1BE,GAAO8B,EAAc9B,EAAJF,GACnBI,EAAEN,EAAEmC,MAAO9B,EAAIY,MAAOf,EAAGA,GAAKgC,GAGlC7B,GAAMA,EAAIY,MAAMf,GAChBA,EAAIgC,EAAW7B,EAAIiB,WAEnBpB,IAAKE,CAGT,MAAQF,IAAKG,GAAO,KACpBC,EAAEN,EAAEmC,MAAO9B,OAKfC,GAAEN,GAAMM,EAAEL,EAAI,EAGlBU,GAAK,EAgVT,QAASc,GAAapB,EAAK+B,EAASC,EAAQC,GACxC,GAAIC,GAAGtC,EAAGuC,EAAGC,EAAGnC,EAAGoC,EAAIC,EACnBzC,EAAIG,EAAIsB,QAAS,KACjBiB,EAAK/B,EACLgC,EAAK/B,CA0BT,KAxBc,GAATuB,IAAchC,EAAMA,EAAIyC,eAGxB5C,GAAK,IACNsC,EAAIO,EAGJA,EAAgB,EAChB1C,EAAMA,EAAIgB,QAAS,IAAK,IACxBsB,EAAI,GAAI9C,GAAUwC,GAClB/B,EAAIqC,EAAEK,IAAK3C,EAAIiB,OAASpB,GACxB6C,EAAgBP,EAIhBG,EAAE3C,EAAIiD,EAAWC,EAAcC,EAAe7C,EAAEN,GAAKM,EAAEL,GAAK,GAAImC,GAChEO,EAAE1C,EAAI0C,EAAE3C,EAAEsB,QAIdoB,EAAKO,EAAW5C,EAAKgC,EAAQD,GAC7BnC,EAAIuC,EAAIE,EAAGpB,OAGQ,GAAXoB,IAAKF,GAASE,EAAGU,OACzB,IAAMV,EAAG,GAAK,MAAO,GA2BrB,IAzBS,EAAJxC,IACCD,GAEFK,EAAEN,EAAI0C,EACNpC,EAAEL,EAAIA,EAGNK,EAAEc,EAAIkB,EACNhC,EAAI+C,EAAK/C,EAAGqC,EAAGC,EAAIC,EAAIT,GACvBM,EAAKpC,EAAEN,EACPyC,EAAInC,EAAEmC,EACNxC,EAAIK,EAAEL,GAGVsC,EAAItC,EAAI2C,EAAK,EAGb1C,EAAIwC,EAAGH,GACPC,EAAIJ,EAAU,EACdK,EAAIA,GAAS,EAAJF,GAAsB,MAAbG,EAAGH,EAAI,GAEzBE,EAAS,EAALI,GAAgB,MAAL3C,GAAauC,KAAe,GAANI,GAAWA,IAAQvC,EAAEc,EAAI,EAAI,EAAI,IACzDlB,EAAIsC,GAAKtC,GAAKsC,IAAY,GAANK,GAAWJ,GAAW,GAANI,GAAuB,EAAZH,EAAGH,EAAI,IACtDM,IAAQvC,EAAEc,EAAI,EAAI,EAAI,IAE1B,EAAJmB,IAAUG,EAAG,GAGdrC,EAAMoC,EAAIS,EAAc,KAAMN,GAAO,QAClC,CAGH,GAFAF,EAAGpB,OAASiB,EAERE,EAGA,MAAQL,IAAWM,IAAKH,GAAKH,GACzBM,EAAGH,GAAK,EAEFA,MACAtC,EACFyC,EAAGY,QAAQ,GAMvB,KAAMd,EAAIE,EAAGpB,QAASoB,IAAKF,KAG3B,IAAMtC,EAAI,EAAGG,EAAM,GAASmC,GAALtC,EAAQG,GAAOW,EAASuC,OAAQb,EAAGxC,OAC1DG,EAAM6C,EAAc7C,EAAKJ,GAI7B,MAAOI,GA4QX,QAASmD,GAAQ1D,EAAGI,EAAG2C,EAAIY,GACvB,GAAIC,GAAIzD,EAAG0D,EAAIvD,EAAKC,CAKpB,IAHAwC,EAAW,MAANA,GAAcnC,EAAYmC,EAAI,EAAG,EAAGY,EAAQG,GACxC,EAALf,EAAS/B,GAEPhB,EAAEE,EAAI,MAAOF,GAAE+D,UAIrB,IAHAH,EAAK5D,EAAEE,EAAE,GACT2D,EAAK7D,EAAEG,EAEG,MAALC,EACDG,EAAM8C,EAAerD,EAAEE,GACvBK,EAAgB,IAAVoD,GAA0B,IAAVA,GAAsBK,GAANH,EAClCI,EAAe1D,EAAKsD,GACpBT,EAAc7C,EAAKsD,OAevB,IAbA7D,EAAIc,EAAO,GAAIf,GAAUC,GAAII,EAAG2C,GAGhC5C,EAAIH,EAAEG,EAENI,EAAM8C,EAAerD,EAAEE,GACvBI,EAAMC,EAAIiB,OAOK,IAAVmC,GAA0B,IAAVA,IAAuBxD,GAALC,GAAe4D,GAAL7D,GAAoB,CAGjE,KAAcC,EAANE,EAASC,GAAO,IAAKD,KAC7BC,EAAM0D,EAAe1D,EAAKJ,OAQ1B,IAJAC,GAAKyD,EACLtD,EAAM6C,EAAc7C,EAAKJ,GAGpBA,EAAI,EAAIG,GACT,KAAOF,EAAI,EAAI,IAAMG,GAAO,IAAKH,IAAKG,GAAO,UAG7C,IADAH,GAAKD,EAAIG,EACJF,EAAI,EAEL,IADKD,EAAI,GAAKG,IAAMC,GAAO,KACnBH,IAAKG,GAAO,KAMpC,MAAOP,GAAEsB,EAAI,GAAKsC,EAAK,IAAMrD,EAAMA,EAKvC,QAAS2D,GAAUC,EAAMC,GACrB,GAAIC,GAAGrE,EACHI,EAAI,CAKR,KAHKkE,EAASH,EAAK,MAAOA,EAAOA,EAAK,IACtCE,EAAI,GAAItE,GAAWoE,EAAK,MAEd/D,EAAI+D,EAAK3C,QAAU,CAIzB,GAHAxB,EAAI,GAAID,GAAWoE,EAAK/D,KAGlBJ,EAAEsB,EAAI,CACR+C,EAAIrE,CACJ,OACQoE,EAAOG,KAAMF,EAAGrE,KACxBqE,EAAIrE,GAIZ,MAAOqE,GAQX,QAASG,GAAwBxE,EAAGyE,EAAKC,EAAKf,EAAQgB,GAMlD,OALSF,EAAJzE,GAAWA,EAAI0E,GAAO1E,GAAK4E,EAAS5E,KACrCW,EAAOgD,GAAUgB,GAAQ,mBACjBF,EAAJzE,GAAWA,EAAI0E,EAAM,gBAAkB,mBAAqB1E,IAG7D,EAQX,QAAS6E,GAAW7E,EAAGE,EAAGC,GAKtB,IAJA,GAAIC,GAAI,EACJ0E,EAAI5E,EAAEsB,QAGDtB,IAAI4E,GAAI5E,EAAEoD,OAGnB,IAAMwB,EAAI5E,EAAE,GAAI4E,GAAK,GAAIA,GAAK,GAAI1E,KAkBlC,OAfOD,EAAIC,EAAID,EAAIiC,EAAW,GAAMF,EAGhClC,EAAEE,EAAIF,EAAEG,EAAI,KAGAgC,EAAJhC,EAGRH,EAAEE,GAAMF,EAAEG,EAAI,IAEdH,EAAEG,EAAIA,EACNH,EAAEE,EAAIA,GAGHF,EAmDX,QAASW,GAAOgD,EAAQoB,EAAKC,GACzB,GAAIC,GAAQ,GAAIC,QACZ,gBACA,MACA,SACA,MACA,WACA,KACA,KACA,MACA,KACA,MACA,QACA,MACA,OACA,YACA,SACA,QACA,QACA,QACA,WACA,gBACA,UACA,WACA,aACA,MACA,cACA,WACA,aACFvB,GAAU,MAAQoB,EAAM,KAAOC,EAIjC,MAFAC,GAAMN,KAAO,kBACb9D,EAAK,EACCoE,EAQV,QAASnE,GAAON,EAAG2E,EAAIpC,EAAIJ,GACvB,GAAIF,GAAGrC,EAAG0E,EAAGpC,EAAG1C,EAAGoF,EAAIC,EACnBzC,EAAKpC,EAAEN,EACPoF,EAASC,CAGb,IAAI3C,EAAI,CAQJ4C,EAAK,CAGD,IAAM/C,EAAI,EAAGC,EAAIE,EAAG,GAAIF,GAAK,GAAIA,GAAK,GAAID,KAI1C,GAHArC,EAAI+E,EAAK1C,EAGA,EAAJrC,EACDA,GAAKgC,EACL0C,EAAIK,EACJnF,EAAI4C,EAAIwC,EAAK,GAGbC,EAAKrF,EAAIsF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,MAIpC,IAFAM,EAAKK,GAAYrF,EAAI,GAAMgC,GAEtBgD,GAAMxC,EAAGpB,OAAS,CAEnB,IAAImB,EASA,KAAM6C,EANN,MAAQ5C,EAAGpB,QAAU4D,EAAIxC,EAAGP,KAAK,IACjCrC,EAAIqF,EAAK,EACT5C,EAAI,EACJrC,GAAKgC,EACL0C,EAAI1E,EAAIgC,EAAW,MAIpB,CAIH,IAHApC,EAAI0C,EAAIE,EAAGwC,GAGL3C,EAAI,EAAGC,GAAK,GAAIA,GAAK,GAAID,KAG/BrC,GAAKgC,EAIL0C,EAAI1E,EAAIgC,EAAWK,EAGnB4C,EAAS,EAAJP,EAAQ,EAAI9E,EAAIsF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,EAmBxD,GAfAnC,EAAIA,GAAU,EAALwC,GAKO,MAAdvC,EAAGwC,EAAK,KAAoB,EAAJN,EAAQ9E,EAAIA,EAAIsF,EAAQ7C,EAAIqC,EAAI,IAE1DnC,EAAS,EAALI,GACEsC,GAAM1C,KAAe,GAANI,GAAWA,IAAQvC,EAAEc,EAAI,EAAI,EAAI,IAClD+D,EAAK,GAAW,GAANA,IAAmB,GAANtC,GAAWJ,GAAW,GAANI,IAGnC3C,EAAI,EAAI0E,EAAI,EAAI9E,EAAIsF,EAAQ7C,EAAIqC,GAAM,EAAIlC,EAAGwC,EAAK,IAAO,GAAO,GAClErC,IAAQvC,EAAEc,EAAI,EAAI,EAAI,IAElB,EAAL6D,IAAWvC,EAAG,GAiBf,MAhBAA,GAAGpB,OAAS,EAERmB,GAGAwC,GAAM3E,EAAEL,EAAI,EAGZyC,EAAG,GAAK0C,GAAUlD,EAAW+C,EAAK/C,GAAaA,GAC/C5B,EAAEL,GAAKgF,GAAM,GAIbvC,EAAG,GAAKpC,EAAEL,EAAI,EAGXK,CAkBX,IAdU,GAALJ,GACDwC,EAAGpB,OAAS4D,EACZ1C,EAAI,EACJ0C,MAEAxC,EAAGpB,OAAS4D,EAAK,EACjB1C,EAAI4C,EAAQlD,EAAWhC,GAIvBwC,EAAGwC,GAAMN,EAAI,EAAI7C,EAAWjC,EAAIsF,EAAQ7C,EAAIqC,GAAMQ,EAAOR,IAAOpC,EAAI,GAIpEC,EAEA,OAAY,CAGR,GAAW,GAANyC,EAAU,CAGX,IAAMhF,EAAI,EAAG0E,EAAIlC,EAAG,GAAIkC,GAAK,GAAIA,GAAK,GAAI1E,KAE1C,IADA0E,EAAIlC,EAAG,IAAMF,EACPA,EAAI,EAAGoC,GAAK,GAAIA,GAAK,GAAIpC,KAG1BtC,GAAKsC,IACNlC,EAAEL,IACGyC,EAAG,IAAM8C,IAAO9C,EAAG,GAAK,GAGjC,OAGA,GADAA,EAAGwC,IAAO1C,EACLE,EAAGwC,IAAOM,EAAO,KACtB9C,GAAGwC,KAAQ,EACX1C,EAAI,EAMhB,IAAMtC,EAAIwC,EAAGpB,OAAoB,IAAZoB,IAAKxC,GAAUwC,EAAGU,QAItC9C,EAAEL,EAAI+B,EACP1B,EAAEN,EAAIM,EAAEL,EAAI,KAGJK,EAAEL,EAAIgC,IACd3B,EAAEN,GAAMM,EAAEL,EAAI,IAItB,MAAOK,GAnzCX,GAAI+C,GAGA1C,EAAK,EACL8E,EAAI5F,EAAU6F,UACdC,EAAM,GAAI9F,GAAU,GAYpBgB,EAAiB,GAejBC,EAAgB,EAMhBgD,EAAa,GAIb8B,EAAa,GAMb3D,EAAU,KAKVD,EAAU,IAGVxB,GAAS,EAGTE,EAAa4D,EAGbuB,GAAS,EAoBTC,EAAc,EAId/C,EAAgB,IAGhBgD,GACIC,iBAAkB,IAClBC,eAAgB,IAChBC,UAAW,EACXC,mBAAoB,EACpBC,uBAAwB,IACxBC,kBAAmB,EAi3E3B,OA5rEAxG,GAAUyG,QAAU3G,EAEpBE,EAAU0G,SAAW,EACrB1G,EAAU2G,WAAa,EACvB3G,EAAU4G,WAAa,EACvB5G,EAAU6G,YAAc,EACxB7G,EAAU8G,cAAgB,EAC1B9G,EAAU+G,gBAAkB,EAC5B/G,EAAUgH,gBAAkB,EAC5BhH,EAAUiH,gBAAkB,EAC5BjH,EAAUkH,iBAAmB,EAC7BlH,EAAUmH,OAAS,EAoCnBnH,EAAUoH,OAAS,WACf,GAAIC,GAAGC,EACHjH,EAAI,EACJuC,KACA2E,EAAIC,UACJC,EAAIF,EAAE,GACNG,EAAMD,GAAiB,gBAALA,GACd,WAAc,MAAKA,GAAEE,eAAeL,GAA4B,OAAdD,EAAII,EAAEH,IAA1C,QACd,WAAc,MAAKC,GAAE9F,OAASpB,EAA6B,OAAhBgH,EAAIE,EAAElH,MAAnC,OA6GtB,OAxGKqH,GAAKJ,EAAI,mBAAsBzG,EAAYwG,EAAG,EAAGO,EAAK,EAAGN,KAC1DtG,EAAqB,EAAJqG,GAErBzE,EAAE0E,GAAKtG,EAKF0G,EAAKJ,EAAI,kBAAqBzG,EAAYwG,EAAG,EAAG,EAAG,EAAGC,KACvDrG,EAAoB,EAAJoG,GAEpBzE,EAAE0E,GAAKrG,EAMFyG,EAAKJ,EAAI,oBAEL/C,EAAQ8C,GACJxG,EAAYwG,EAAE,IAAKO,EAAK,EAAG,EAAGN,IAAOzG,EAAYwG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACnErD,EAAoB,EAAPoD,EAAE,GACftB,EAAoB,EAAPsB,EAAE,IAEXxG,EAAYwG,GAAIO,EAAKA,EAAK,EAAGN,KACrCrD,IAAgB8B,EAAkC,GAAf,EAAJsB,GAASA,EAAIA,MAGpDzE,EAAE0E,IAAOrD,EAAY8B,GAOhB2B,EAAKJ,EAAI,WAEL/C,EAAQ8C,GACJxG,EAAYwG,EAAE,IAAKO,EAAK,GAAI,EAAGN,IAAOzG,EAAYwG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACpElF,EAAiB,EAAPiF,EAAE,GACZlF,EAAiB,EAAPkF,EAAE,IAERxG,EAAYwG,GAAIO,EAAKA,EAAK,EAAGN,KAC5B,EAAJD,EAAQjF,IAAaD,EAA+B,GAAf,EAAJkF,GAASA,EAAIA,IAC1C1G,GAAQC,EAAO,EAAG0G,EAAI,kBAAmBD,KAG1DzE,EAAE0E,IAAOlF,EAASD,GAIbuF,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBvG,EAAK,EACLD,GAAeF,IAAW0G,GAAM5C,EAAyBoD,GAClDlH,GACPC,EAAO,EAAG0G,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAK3G,EAKF+G,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBrB,KAAaqB,IAAKU,GACbV,IAAMrB,GAAUrF,GAASC,EAAO,EAAG,qBAAsBmH,IACvDpH,GACPC,EAAO,EAAG0G,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKtB,EAKF0B,EAAKJ,EAAI,gBAAmBzG,EAAYwG,EAAG,EAAG,EAAG,EAAGC,KACrDrB,EAAkB,EAAJoB,GAElBzE,EAAE0E,GAAKrB,EAKFyB,EAAKJ,EAAI,kBAAqBzG,EAAYwG,EAAG,EAAGO,EAAK,EAAGN,KACzDpE,EAAoB,EAAJmE,GAEpBzE,EAAE0E,GAAKpE,EAIFwE,EAAKJ,EAAI,YAEO,gBAALD,GACRnB,EAASmB,EACF1G,GACPC,EAAO,EAAG0G,EAAI,iBAAkBD,IAGxCzE,EAAE0E,GAAKpB,EAEAtD,GASX5C,EAAU2E,IAAM,WAAc,MAAOR,GAAUqD,UAAW5B,EAAEoC,KAQ5DhI,EAAU0E,IAAM,WAAc,MAAOP,GAAUqD,UAAW5B,EAAEqC,KAc5DjI,EAAUkI,OAAS,WACf,GAAIC,GAAU,iBAMVC,EAAkBC,KAAKH,SAAWC,EAAW,QAC7C,WAAc,MAAOjG,GAAWmG,KAAKH,SAAWC,IAChD,WAAc,MAA2C,UAAlB,WAAhBE,KAAKH,SAAwB,IACjC,QAAhBG,KAAKH,SAAsB,GAElC,OAAO,UAAUnF,GACb,GAAIwE,GAAGrH,EAAGE,EAAGuC,EAAG0E,EACZhH,EAAI,EACJF,KACAmI,EAAO,GAAItI,GAAU8F,EAKzB,IAHA/C,EAAW,MAANA,GAAelC,EAAYkC,EAAI,EAAG6E,EAAK,IAA6B,EAAL7E,EAAjB/B,EACnD2B,EAAI+C,EAAU3C,EAAKV,GAEf2D,EAGA,GAAK+B,GAAaA,EAAUQ,gBAAkB,CAI1C,IAFAhB,EAAIQ,EAAUQ,gBAAiB,GAAIC,aAAa7F,GAAK,IAEzCA,EAAJtC,GAQJgH,EAAW,OAAPE,EAAElH,IAAgBkH,EAAElH,EAAI,KAAO,IAM9BgH,GAAK,MACNnH,EAAI6H,EAAUQ,gBAAiB,GAAIC,aAAY,IAC/CjB,EAAElH,GAAKH,EAAE,GACTqH,EAAElH,EAAI,GAAKH,EAAE,KAKbC,EAAEmC,KAAM+E,EAAI,MACZhH,GAAK,EAGbA,GAAIsC,EAAI,MAGL,IAAKoF,GAAaA,EAAUU,YAAc,CAK7C,IAFAlB,EAAIQ,EAAUU,YAAa9F,GAAK,GAEpBA,EAAJtC,GAMJgH,EAAsB,iBAAP,GAAPE,EAAElH,IAA6C,cAAXkH,EAAElH,EAAI,GAC/B,WAAXkH,EAAElH,EAAI,GAAkC,SAAXkH,EAAElH,EAAI,IACnCkH,EAAElH,EAAI,IAAM,KAASkH,EAAElH,EAAI,IAAM,GAAMkH,EAAElH,EAAI,GAEhDgH,GAAK,KACNU,EAAUU,YAAY,GAAGC,KAAMnB,EAAGlH,IAIlCF,EAAEmC,KAAM+E,EAAI,MACZhH,GAAK,EAGbA,GAAIsC,EAAI,MACDhC,IACPC,EAAO,GAAI,qBAAsBmH,EAKzC,KAAK1H,EAED,KAAYsC,EAAJtC,GACJgH,EAAIe,IACK,KAAJf,IAAWlH,EAAEE,KAAOgH,EAAI,KAcrC,KAVA1E,EAAIxC,IAAIE,GACR0C,GAAMV,EAGDM,GAAKI,IACNsE,EAAI7B,EAASnD,EAAWU,GACxB5C,EAAEE,GAAK6B,EAAWS,EAAI0E,GAAMA,GAIf,IAATlH,EAAEE,GAAUF,EAAEoD,MAAOlD,KAG7B,GAAS,EAAJA,EACDF,GAAMC,EAAI,OACP,CAGH,IAAMA,EAAI,GAAc,IAATD,EAAE,GAAUA,EAAEwI,QAASvI,GAAKiC,GAG3C,IAAMhC,EAAI,EAAGgH,EAAIlH,EAAE,GAAIkH,GAAK,GAAIA,GAAK,GAAIhH,KAGhCgC,EAAJhC,IAAeD,GAAKiC,EAAWhC,GAKxC,MAFAiI,GAAKlI,EAAIA,EACTkI,EAAKnI,EAAIA,EACFmI,MAqGf9E,EAAM,WAGF,QAASoF,GAAUnI,EAAGkC,EAAGkG,GACrB,GAAIvE,GAAGwE,EAAMC,EAAKC,EACdC,EAAQ,EACR5I,EAAII,EAAEgB,OACNyH,EAAMvG,EAAIwG,EACVC,EAAMzG,EAAIwG,EAAY,CAE1B,KAAM1I,EAAIA,EAAEW,QAASf,KACjB0I,EAAMtI,EAAEJ,GAAK8I,EACbH,EAAMvI,EAAEJ,GAAK8I,EAAY,EACzB7E,EAAI8E,EAAML,EAAMC,EAAME,EACtBJ,EAAOI,EAAMH,EAAUzE,EAAI6E,EAAcA,EAAcF,EACvDA,GAAUH,EAAOD,EAAO,IAAQvE,EAAI6E,EAAY,GAAMC,EAAMJ,EAC5DvI,EAAEJ,GAAKyI,EAAOD,CAKlB,OAFII,IAAOxI,EAAEgD,QAAQwF,GAEdxI,EAGX,QAAS4I,GAAS9B,EAAGrH,EAAGoJ,EAAIC,GACxB,GAAIlJ,GAAGmJ,CAEP,IAAKF,GAAMC,EACPC,EAAMF,EAAKC,EAAK,EAAI,OAGpB,KAAMlJ,EAAImJ,EAAM,EAAOF,EAAJjJ,EAAQA,IAEvB,GAAKkH,EAAElH,IAAMH,EAAEG,GAAK,CAChBmJ,EAAMjC,EAAElH,GAAKH,EAAEG,GAAK,EAAI,EACxB,OAIZ,MAAOmJ,GAGX,QAASC,GAAUlC,EAAGrH,EAAGoJ,EAAIT,GAIzB,IAHA,GAAIxI,GAAI,EAGAiJ,KACJ/B,EAAE+B,IAAOjJ,EACTA,EAAIkH,EAAE+B,GAAMpJ,EAAEoJ,GAAM,EAAI,EACxB/B,EAAE+B,GAAMjJ,EAAIwI,EAAOtB,EAAE+B,GAAMpJ,EAAEoJ,EAIjC,OAAS/B,EAAE,IAAMA,EAAE9F,OAAS,EAAG8F,EAAEoB,UAIrC,MAAO,UAAWlI,EAAGqC,EAAGC,EAAIC,EAAI6F,GAC5B,GAAIW,GAAKpJ,EAAGC,EAAGqJ,EAAMzJ,EAAG0J,EAAMC,EAAOC,EAAGC,EAAIC,EAAKC,EAAMC,EAAMC,EAAIC,EAAIC,EACjEC,EAAIC,EACJ/I,EAAId,EAAEc,GAAKuB,EAAEvB,EAAI,EAAI,GACrBsB,EAAKpC,EAAEN,EACPoK,EAAKzH,EAAE3C,CAGX,MAAM0C,GAAOA,EAAG,IAAO0H,GAAOA,EAAG,IAE7B,MAAO,IAAIvK,GAGRS,EAAEc,GAAMuB,EAAEvB,IAAOsB,GAAK0H,GAAM1H,EAAG,IAAM0H,EAAG,GAAMA,GAG7C1H,GAAe,GAATA,EAAG,KAAY0H,EAAS,EAAJhJ,EAAQA,EAAI,EAHciJ,IAoB5D,KAbAX,EAAI,GAAI7J,GAAUuB,GAClBuI,EAAKD,EAAE1J,KACPC,EAAIK,EAAEL,EAAI0C,EAAE1C,EACZmB,EAAIwB,EAAK3C,EAAI,EAEPyI,IACFA,EAAOlD,EACPvF,EAAIqK,EAAUhK,EAAEL,EAAIiC,GAAaoI,EAAU3H,EAAE1C,EAAIiC,GACjDd,EAAIA,EAAIc,EAAW,GAKjBhC,EAAI,EAAGkK,EAAGlK,KAAQwC,EAAGxC,IAAM,GAAKA,KAGtC,GAFKkK,EAAGlK,IAAOwC,EAAGxC,IAAM,IAAMD,IAErB,EAAJmB,EACDuI,EAAGxH,KAAK,GACRoH,GAAO,MACJ,CAwBH,IAvBAS,EAAKtH,EAAGpB,OACR4I,EAAKE,EAAG9I,OACRpB,EAAI,EACJkB,GAAK,EAILtB,EAAIiC,EAAW2G,GAAS0B,EAAG,GAAK,IAI3BtK,EAAI,IACLsK,EAAK3B,EAAU2B,EAAItK,EAAG4I,GACtBhG,EAAK+F,EAAU/F,EAAI5C,EAAG4I,GACtBwB,EAAKE,EAAG9I,OACR0I,EAAKtH,EAAGpB,QAGZyI,EAAKG,EACLN,EAAMlH,EAAGzB,MAAO,EAAGiJ,GACnBL,EAAOD,EAAItI,OAGI4I,EAAPL,EAAWD,EAAIC,KAAU,GACjCM,EAAKC,EAAGnJ,QACRkJ,EAAG7G,QAAQ,GACX2G,EAAMG,EAAG,GACJA,EAAG,IAAM1B,EAAO,GAAIuB,GAIzB,GAAG,CAOC,GANAnK,EAAI,EAGJuJ,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,GAGjB,EAANR,EAAU,CAkBX,GAdAS,EAAOF,EAAI,GACNM,GAAML,IAAOC,EAAOA,EAAOpB,GAASkB,EAAI,IAAM,IAGnD9J,EAAIiC,EAAW+H,EAAOG,GAUjBnK,EAAI,EAeL,IAZIA,GAAK4I,IAAM5I,EAAI4I,EAAO,GAG1Bc,EAAOf,EAAU2B,EAAItK,EAAG4I,GACxBe,EAAQD,EAAKlI,OACbuI,EAAOD,EAAItI,OAOkC,GAArC4H,EAASM,EAAMI,EAAKH,EAAOI,IAC/B/J,IAGAwJ,EAAUE,EAAWC,EAALS,EAAaC,EAAKC,EAAIX,EAAOf,GAC7Ce,EAAQD,EAAKlI,OACb+H,EAAM,MAQA,IAALvJ,IAGDuJ,EAAMvJ,EAAI,GAId0J,EAAOY,EAAGnJ,QACVwI,EAAQD,EAAKlI,MAUjB,IAPauI,EAARJ,GAAeD,EAAKlG,QAAQ,GAGjCgG,EAAUM,EAAKJ,EAAMK,EAAMnB,GAC3BmB,EAAOD,EAAItI,OAGC,IAAP+H,EAMD,KAAQH,EAASkB,EAAIR,EAAKM,EAAIL,GAAS,GACnC/J,IAGAwJ,EAAUM,EAAUC,EAALK,EAAYC,EAAKC,EAAIP,EAAMnB,GAC1CmB,EAAOD,EAAItI,WAGH,KAAR+H,IACRvJ,IACA8J,GAAO,GAIXD,GAAGzJ,KAAOJ,EAGL8J,EAAI,GACLA,EAAIC,KAAUnH,EAAGqH,IAAO,GAExBH,GAAQlH,EAAGqH,IACXF,EAAO,UAEHE,IAAOC,GAAgB,MAAVJ,EAAI,KAAgBxI,IAE7CmI,GAAiB,MAAVK,EAAI,GAGLD,EAAG,IAAKA,EAAGnB,QAGrB,GAAKE,GAAQlD,EAAO,CAGhB,IAAMtF,EAAI,EAAGkB,EAAIuI,EAAG,GAAIvI,GAAK,GAAIA,GAAK,GAAIlB,KAC1CU,EAAO8I,EAAG9G,GAAO8G,EAAEzJ,EAAIC,EAAID,EAAIiC,EAAW,GAAM,EAAGW,EAAI0G,OAIvDG,GAAEzJ,EAAIA,EACNyJ,EAAEjH,GAAK8G,CAGX,OAAOG,OAgJfvI,EAAe,WACX,GAAIoJ,GAAa,8BACbC,EAAW,cACXC,EAAY,cACZC,EAAkB,qBAClBC,EAAmB,4BAEvB,OAAO,UAAWrK,EAAGD,EAAKF,EAAKJ,GAC3B,GAAI2I,GACAtH,EAAIjB,EAAME,EAAMA,EAAIgB,QAASsJ,EAAkB,GAGnD,IAAKD,EAAgBxJ,KAAKE,GACtBd,EAAEc,EAAIwJ,MAAMxJ,GAAK,KAAW,EAAJA,EAAQ,GAAK,MAClC,CACH,IAAMjB,IAGFiB,EAAIA,EAAEC,QAASkJ,EAAY,SAAWpG,EAAG0G,EAAIC,GAEzC,MADApC,GAAoC,MAA3BoC,EAAKA,EAAGhI,eAAyB,GAAW,KAANgI,EAAY,EAAI,EACvD/K,GAAKA,GAAK2I,EAAYvE,EAAL0G,IAGzB9K,IACA2I,EAAO3I,EAGPqB,EAAIA,EAAEC,QAASmJ,EAAU,MAAOnJ,QAASoJ,EAAW,SAGnDpK,GAAOe,GAAI,MAAO,IAAIvB,GAAWuB,EAAGsH,EAKzClI,IAAQC,EAAOE,EAAI,SAAYZ,EAAI,SAAWA,EAAI,IAAO,UAAWM,GACxEC,EAAEc,EAAI,KAGVd,EAAEN,EAAIM,EAAEL,EAAI,KACZU,EAAK,MAmNb8E,EAAEsF,cAAgBtF,EAAEuF,IAAM,WACtB,GAAI1K,GAAI,GAAIT,GAAUU,KAEtB,OADKD,GAAEc,EAAI,IAAId,EAAEc,EAAI,GACdd,GAQXmF,EAAEwF,KAAO,WACL,MAAOrK,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAWnDwF,EAAEyF,WAAazF,EAAE4D,IAAM,SAAW1G,EAAG5C,GAEjC,MADAY,GAAK,EACEuI,EAAS3I,KAAM,GAAIV,GAAW8C,EAAG5C,KAQ5C0F,EAAE0F,cAAgB1F,EAAE7C,GAAK,WACrB,GAAI9C,GAAGoH,EACHlH,EAAIO,KAAKP,CAEb,KAAMA,EAAI,MAAO,KAIjB,IAHAF,IAAQoH,EAAIlH,EAAEsB,OAAS,GAAMgJ,EAAU/J,KAAKN,EAAIiC,IAAeA,EAG1DgF,EAAIlH,EAAEkH,GAAK,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIpH,KAG9C,MAFS,GAAJA,IAAQA,EAAI,GAEVA,GAwBX2F,EAAE2F,UAAY3F,EAAEpC,IAAM,SAAWV,EAAG5C,GAEhC,MADAY,GAAK,EACE0C,EAAK9C,KAAM,GAAIV,GAAW8C,EAAG5C,GAAKc,EAAgBC,IAQ7D2E,EAAE4F,mBAAqB5F,EAAE6F,SAAW,SAAW3I,EAAG5C,GAE9C,MADAY,GAAK,EACE0C,EAAK9C,KAAM,GAAIV,GAAW8C,EAAG5C,GAAK,EAAG,IAQhD0F,EAAE8F,OAAS9F,EAAE+F,GAAK,SAAW7I,EAAG5C,GAE5B,MADAY,GAAK,EAC6C,IAA3CuI,EAAS3I,KAAM,GAAIV,GAAW8C,EAAG5C,KAQ5C0F,EAAEgG,MAAQ,WACN,MAAO7K,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDwF,EAAEiG,YAAcjG,EAAEqC,GAAK,SAAWnF,EAAG5C,GAEjC,MADAY,GAAK,EACEuI,EAAS3I,KAAM,GAAIV,GAAW8C,EAAG5C,IAAQ,GAQpD0F,EAAEkG,qBAAuBlG,EAAEmG,IAAM,SAAWjJ,EAAG5C,GAE3C,MADAY,GAAK,EACqD,KAAjDZ,EAAImJ,EAAS3I,KAAM,GAAIV,GAAW8C,EAAG5C,MAAuB,IAANA,GAQnE0F,EAAEoG,SAAW,WACT,QAAStL,KAAKP,GAOlByF,EAAEqG,UAAYrG,EAAEsG,MAAQ,WACpB,QAASxL,KAAKP,GAAKsK,EAAU/J,KAAKN,EAAIiC,GAAa3B,KAAKP,EAAEsB,OAAS,GAOvEmE,EAAEmF,MAAQ,WACN,OAAQrK,KAAKa,GAOjBqE,EAAEuG,WAAavG,EAAEwG,MAAQ,WACrB,MAAO1L,MAAKa,EAAI,GAOpBqE,EAAEyG,OAAS,WACP,QAAS3L,KAAKP,GAAkB,GAAbO,KAAKP,EAAE,IAQ9ByF,EAAE0G,SAAW1G,EAAEoC,GAAK,SAAWlF,EAAG5C,GAE9B,MADAY,GAAK,EACEuI,EAAS3I,KAAM,GAAIV,GAAW8C,EAAG5C,IAAQ,GAQpD0F,EAAE2G,kBAAoB3G,EAAE4G,IAAM,SAAW1J,EAAG5C,GAExC,MADAY,GAAK,EACqD,MAAjDZ,EAAImJ,EAAS3I,KAAM,GAAIV,GAAW8C,EAAG5C,MAAwB,IAANA,GAwBpE0F,EAAE6G,MAAQ7G,EAAE8G,IAAM,SAAW5J,EAAG5C,GAC5B,GAAIG,GAAG0E,EAAG4H,EAAGC,EACTnM,EAAIC,KACJ6G,EAAI9G,EAAEc,CAOV,IALAT,EAAK,GACLgC,EAAI,GAAI9C,GAAW8C,EAAG5C,GACtBA,EAAI4C,EAAEvB,GAGAgG,IAAMrH,EAAI,MAAO,IAAIF,GAAUwK,IAGrC,IAAKjD,GAAKrH,EAEN,MADA4C,GAAEvB,GAAKrB,EACAO,EAAEoM,KAAK/J,EAGlB,IAAIgK,GAAKrM,EAAEL,EAAIiC,EACX0K,EAAKjK,EAAE1C,EAAIiC,EACXQ,EAAKpC,EAAEN,EACPoK,EAAKzH,EAAE3C,CAEX,KAAM2M,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO1H,IAAOC,EAAEvB,GAAKrB,EAAG4C,GAAM,GAAI9C,GAAWuK,EAAK9J,EAAI+J,IAGxE,KAAM3H,EAAG,KAAO0H,EAAG,GAGf,MAAOA,GAAG,IAAOzH,EAAEvB,GAAKrB,EAAG4C,GAAM,GAAI9C,GAAW6C,EAAG,GAAKpC,EAGrC,GAAjBQ,GAAsB,EAAI,GASpC,GALA6L,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGzB,QAGHmG,EAAIuF,EAAKC,EAAK,CAaf,KAXKH,EAAW,EAAJrF,IACRA,GAAKA,EACLoF,EAAI9J,IAEJkK,EAAKD,EACLH,EAAIpC,GAGRoC,EAAEK,UAGI9M,EAAIqH,EAAGrH,IAAKyM,EAAErK,KAAK,IACzBqK,EAAEK,cAMF,KAFAjI,GAAM6H,GAASrF,EAAI1E,EAAGpB,SAAavB,EAAIqK,EAAG9I,SAAa8F,EAAIrH,EAErDqH,EAAIrH,EAAI,EAAO6E,EAAJ7E,EAAOA,IAEpB,GAAK2C,EAAG3C,IAAMqK,EAAGrK,GAAK,CAClB0M,EAAO/J,EAAG3C,GAAKqK,EAAGrK,EAClB,OAYZ,GANI0M,IAAMD,EAAI9J,EAAIA,EAAK0H,EAAIA,EAAKoC,EAAG7J,EAAEvB,GAAKuB,EAAEvB,GAE5CrB,GAAM6E,EAAIwF,EAAG9I,SAAapB,EAAIwC,EAAGpB,QAI5BvB,EAAI,EAAI,KAAQA,IAAK2C,EAAGxC,KAAO,GAIpC,IAHAH,EAAIyF,EAAO,EAGHZ,EAAIwC,GAAK,CAEb,GAAK1E,IAAKkC,GAAKwF,EAAGxF,GAAK,CACnB,IAAM1E,EAAI0E,EAAG1E,IAAMwC,IAAKxC,GAAIwC,EAAGxC,GAAKH,KAClC2C,EAAGxC,GACLwC,EAAGkC,IAAMY,EAGb9C,EAAGkC,IAAMwF,EAAGxF,GAIhB,KAAiB,GAATlC,EAAG,GAASA,EAAG8F,UAAWoE,GAGlC,MAAMlK,GAAG,GAWFiC,EAAWhC,EAAGD,EAAIkK,IAPrBjK,EAAEvB,EAAqB,GAAjBN,EAAqB,GAAK,EAChC6B,EAAE3C,GAAM2C,EAAE1C,EAAI,GACP0C,IA8Bf8C,EAAEqH,OAASrH,EAAEsH,IAAM,SAAWpK,EAAG5C,GAC7B,GAAI2J,GAAGtI,EACHd,EAAIC,IAMR,OAJAI,GAAK,GACLgC,EAAI,GAAI9C,GAAW8C,EAAG5C,IAGhBO,EAAEN,IAAM2C,EAAEvB,GAAKuB,EAAE3C,IAAM2C,EAAE3C,EAAE,GACtB,GAAIH,GAAUwK,MAGZ1H,EAAE3C,GAAKM,EAAEN,IAAMM,EAAEN,EAAE,GACrB,GAAIH,GAAUS,IAGL,GAAfwF,GAID1E,EAAIuB,EAAEvB,EACNuB,EAAEvB,EAAI,EACNsI,EAAIrG,EAAK/C,EAAGqC,EAAG,EAAG,GAClBA,EAAEvB,EAAIA,EACNsI,EAAEtI,GAAKA,GAEPsI,EAAIrG,EAAK/C,EAAGqC,EAAG,EAAGmD,GAGfxF,EAAEgM,MAAO5C,EAAEsD,MAAMrK,MAQ5B8C,EAAEwH,QAAUxH,EAAEyH,IAAM,WAChB,GAAI5M,GAAI,GAAIT,GAAUU,KAEtB,OADAD,GAAEc,GAAKd,EAAEc,GAAK,KACPd,GAwBXmF,EAAEiH,KAAOjH,EAAE0H,IAAM,SAAWxK,EAAG5C,GAC3B,GAAIyM,GACAlM,EAAIC,KACJ6G,EAAI9G,EAAEc,CAOV,IALAT,EAAK,GACLgC,EAAI,GAAI9C,GAAW8C,EAAG5C,GACtBA,EAAI4C,EAAEvB,GAGAgG,IAAMrH,EAAI,MAAO,IAAIF,GAAUwK,IAGpC,IAAKjD,GAAKrH,EAEP,MADA4C,GAAEvB,GAAKrB,EACAO,EAAEgM,MAAM3J,EAGnB,IAAIgK,GAAKrM,EAAEL,EAAIiC,EACX0K,EAAKjK,EAAE1C,EAAIiC,EACXQ,EAAKpC,EAAEN,EACPoK,EAAKzH,EAAE3C,CAEX,KAAM2M,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO,IAAIvK,GAAWuH,EAAI,EAI5C,KAAM1E,EAAG,KAAO0H,EAAG,GAAK,MAAOA,GAAG,GAAKzH,EAAI,GAAI9C,GAAW6C,EAAG,GAAKpC,EAAQ,EAAJ8G,GAQ1E,GALAuF,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGzB,QAGHmG,EAAIuF,EAAKC,EAAK,CAUf,IATKxF,EAAI,GACLwF,EAAKD,EACLH,EAAIpC,IAEJhD,GAAKA,EACLoF,EAAI9J,GAGR8J,EAAEK,UACMzF,IAAKoF,EAAErK,KAAK,IACpBqK,EAAEK,UAUN,IAPAzF,EAAI1E,EAAGpB,OACPvB,EAAIqK,EAAG9I,OAGM,EAAR8F,EAAIrH,IAAQyM,EAAIpC,EAAIA,EAAK1H,EAAIA,EAAK8J,EAAGzM,EAAIqH,GAGxCA,EAAI,EAAGrH,GACTqH,GAAM1E,IAAK3C,GAAK2C,EAAG3C,GAAKqK,EAAGrK,GAAKqH,GAAM5B,EAAO,EAC7C9C,EAAG3C,IAAMyF,CAUb,OAPI4B,KACA1E,EAAGY,QAAQ8D,KACTwF,GAKCjI,EAAWhC,EAAGD,EAAIkK,IAS7BnH,EAAE2H,UAAY3H,EAAER,GAAK,SAAUoI,GAC3B,GAAIvN,GAAGoH,EACH5G,EAAIC,KACJP,EAAIM,EAAEN,CAQV,IALU,MAALqN,GAAaA,MAAQA,GAAW,IAANA,GAAiB,IAANA,IAClC7M,GAAQC,EAAO,GAAI,WAAakH,EAAS0F,GACxCA,KAAOA,IAAIA,EAAI,QAGlBrN,EAAI,MAAO,KAIjB,IAHAkH,EAAIlH,EAAEsB,OAAS,EACfxB,EAAIoH,EAAIhF,EAAW,EAEdgF,EAAIlH,EAAEkH,GAAK,CAGZ,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIpH,KAG9B,IAAMoH,EAAIlH,EAAE,GAAIkH,GAAK,GAAIA,GAAK,GAAIpH,MAKtC,MAFKuN,IAAK/M,EAAEL,EAAI,EAAIH,IAAIA,EAAIQ,EAAEL,EAAI,GAE3BH,GAiBX2F,EAAE7E,MAAQ,SAAWgC,EAAIC,GACrB,GAAI/C,GAAI,GAAID,GAAUU,KAOtB,QALW,MAANqC,GAAclC,EAAYkC,EAAI,EAAG6E,EAAK,MACvC7G,EAAOd,IAAK8C,EAAKrC,KAAKN,EAAI,EAAS,MAAN4C,GAC1BnC,EAAYmC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB/B,GAG3ChB,GAgBX2F,EAAE+C,MAAQ,SAAUhG,GAChB,GAAI1C,GAAIS,IACR,OAAOG,GAAY8B,GAAIV,EAAkBA,EAAkB,GAAI,YAG3DhC,EAAEkN,MAAO,KAAOtI,EAASlC,IACzB,GAAI3C,GAAWC,EAAEE,GAAKF,EAAEE,EAAE,MAAa8B,EAALU,GAAyBA,EAAIV,GAC7DhC,EAAEsB,GAAU,EAAJoB,EAAQ,EAAI,EAAI,GACxB1C,IAeV2F,EAAE6H,WAAa7H,EAAE8H,KAAO,WACpB,GAAIpJ,GAAGrE,EAAG2C,EAAG+K,EAAKhB,EACdlM,EAAIC,KACJP,EAAIM,EAAEN,EACNoB,EAAId,EAAEc,EACNnB,EAAIK,EAAEL,EACN2C,EAAK/B,EAAiB,EACtB4M,EAAO,GAAI5N,GAAU,MAGzB,IAAW,IAANuB,IAAYpB,IAAMA,EAAE,GACrB,MAAO,IAAIH,IAAYuB,GAAS,EAAJA,KAAYpB,GAAKA,EAAE,IAAOqK,IAAMrK,EAAIM,EAAI,EAAI,EA8B5E,IA1BAc,EAAI8G,KAAKqF,MAAOjN,GAIN,GAALc,GAAUA,GAAK,EAAI,GACpBtB,EAAIqD,EAAcnD,IACXF,EAAEwB,OAASrB,GAAM,GAAK,IAAIH,GAAK,KACtCsB,EAAI8G,KAAKqF,KAAKzN,GACdG,EAAIqK,GAAYrK,EAAI,GAAM,IAAY,EAAJA,GAASA,EAAI,GAE1CmB,GAAK,EAAI,EACVtB,EAAI,KAAOG,GAEXH,EAAIsB,EAAE2C,gBACNjE,EAAIA,EAAEmB,MAAO,EAAGnB,EAAE6B,QAAQ,KAAO,GAAM1B,GAG3CwC,EAAI,GAAI5C,GAAUC,IAElB2C,EAAI,GAAI5C,GAAWuB,EAAI,IAOtBqB,EAAEzC,EAAE,GAML,IALAC,EAAIwC,EAAExC,EACNmB,EAAInB,EAAI2C,EACC,EAAJxB,IAAQA,EAAI,KAOb,GAHAoL,EAAI/J,EACJA,EAAIgL,EAAKT,MAAOR,EAAEE,KAAMrJ,EAAK/C,EAAGkM,EAAG5J,EAAI,KAElCO,EAAeqJ,EAAExM,GAAMiB,MAAO,EAAGG,MAAUtB,EAC3CqD,EAAeV,EAAEzC,IAAMiB,MAAO,EAAGG,GAAM,CAWxC,GANKqB,EAAExC,EAAIA,KAAMmB,EACjBtB,EAAIA,EAAEmB,MAAOG,EAAI,EAAGA,EAAI,GAKd,QAALtB,IAAgB0N,GAAY,QAAL1N,GAgBrB,IAIIA,KAAOA,EAAEmB,MAAM,IAAqB,KAAfnB,EAAEyD,OAAO,MAGjC3C,EAAO6B,EAAGA,EAAExC,EAAIY,EAAiB,EAAG,GACpCsD,GAAK1B,EAAEuK,MAAMvK,GAAG+I,GAAGlL,GAGvB,OAvBA,IAAMkN,IACF5M,EAAO4L,EAAGA,EAAEvM,EAAIY,EAAiB,EAAG,GAE/B2L,EAAEQ,MAAMR,GAAGhB,GAAGlL,IAAK,CACpBmC,EAAI+J,CACJ,OAIR5J,GAAM,EACNxB,GAAK,EACLoM,EAAM,EAkBtB,MAAO5M,GAAO6B,EAAGA,EAAExC,EAAIY,EAAiB,EAAGC,EAAeqD,IAwB9DsB,EAAEuH,MAAQvH,EAAEiI,IAAM,SAAW/K,EAAG5C,GAC5B,GAAIC,GAAGC,EAAGC,EAAG0E,EAAGpC,EAAG2B,EAAGwJ,EAAK/E,EAAKC,EAAK+E,EAAKC,EAAKC,EAAKC,EAChDrF,EAAMsF,EACN1N,EAAIC,KACJmC,EAAKpC,EAAEN,EACPoK,GAAOzJ,EAAK,GAAIgC,EAAI,GAAI9C,GAAW8C,EAAG5C,IAAMC,CAGhD,MAAM0C,GAAO0H,GAAO1H,EAAG,IAAO0H,EAAG,IAmB7B,OAhBM9J,EAAEc,IAAMuB,EAAEvB,GAAKsB,IAAOA,EAAG,KAAO0H,GAAMA,IAAOA,EAAG,KAAO1H,EACzDC,EAAE3C,EAAI2C,EAAE1C,EAAI0C,EAAEvB,EAAI,MAElBuB,EAAEvB,GAAKd,EAAEc,EAGHsB,GAAO0H,GAKTzH,EAAE3C,GAAK,GACP2C,EAAE1C,EAAI,GALN0C,EAAE3C,EAAI2C,EAAE1C,EAAI,MASb0C,CAYX,KATA1C,EAAIqK,EAAUhK,EAAEL,EAAIiC,GAAaoI,EAAU3H,EAAE1C,EAAIiC,GACjDS,EAAEvB,GAAKd,EAAEc,EACTuM,EAAMjL,EAAGpB,OACTsM,EAAMxD,EAAG9I,OAGEsM,EAAND,IAAYI,EAAKrL,EAAIA,EAAK0H,EAAIA,EAAK2D,EAAI7N,EAAIyN,EAAKA,EAAMC,EAAKA,EAAM1N,GAGhEA,EAAIyN,EAAMC,EAAKG,KAAS7N,IAAK6N,EAAG5L,KAAK,IAK3C,IAHAuG,EAAOlD,EACPwI,EAAWhF,EAEL9I,EAAI0N,IAAO1N,GAAK,GAAK,CAKvB,IAJAF,EAAI,EACJ6N,EAAMzD,EAAGlK,GAAK8N,EACdF,EAAM1D,EAAGlK,GAAK8N,EAAW,EAEnBxL,EAAImL,EAAK/I,EAAI1E,EAAIsC,EAAGoC,EAAI1E,GAC1B0I,EAAMlG,IAAKF,GAAKwL,EAChBnF,EAAMnG,EAAGF,GAAKwL,EAAW,EACzB7J,EAAI2J,EAAMlF,EAAMC,EAAMgF,EACtBjF,EAAMiF,EAAMjF,EAAUzE,EAAI6J,EAAaA,EAAaD,EAAGnJ,GAAK5E,EAC5DA,GAAM4I,EAAMF,EAAO,IAAQvE,EAAI6J,EAAW,GAAMF,EAAMjF,EACtDkF,EAAGnJ,KAAOgE,EAAMF,CAGpBqF,GAAGnJ,GAAK5E,EASZ,MANIA,KACEC,EAEF8N,EAAGvF,QAGA7D,EAAWhC,EAAGoL,EAAI9N,IAgB7BwF,EAAEwI,SAAW,SAAWhJ,EAAIpC,GACxB,GAAI/C,GAAI,GAAID,GAAUU,KAGtB,OAFA0E,GAAW,MAANA,GAAevE,EAAYuE,EAAI,EAAGwC,EAAK,GAAI,aAA4B,EAALxC,EAAP,KAChEpC,EAAW,MAANA,GAAenC,EAAYmC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB/B,EACxDmE,EAAKrE,EAAOd,EAAGmF,EAAIpC,GAAO/C,GAgBrC2F,EAAE1B,cAAgB,SAAWnB,EAAIC,GAC7B,MAAOW,GAAQjD,KACP,MAANqC,GAAclC,EAAYkC,EAAI,EAAG6E,EAAK,MAAS7E,EAAK,EAAI,KAAMC,EAAI,KAmBxE4C,EAAEyI,QAAU,SAAWtL,EAAIC,GACvB,MAAOW,GAAQjD,KAAY,MAANqC,GAAclC,EAAYkC,EAAI,EAAG6E,EAAK,MACrD7E,EAAKrC,KAAKN,EAAI,EAAI,KAAM4C,EAAI,KA0BtC4C,EAAE0I,SAAW,SAAWvL,EAAIC,GACxB,GAAIxC,GAAMmD,EAAQjD,KAAY,MAANqC,GAAclC,EAAYkC,EAAI,EAAG6E,EAAK,MACxD7E,EAAKrC,KAAKN,EAAI,EAAI,KAAM4C,EAAI,GAElC,IAAKtC,KAAKP,EAAI,CACV,GAAIE,GACAkO,EAAM/N,EAAIgO,MAAM,KAChBC,GAAMvI,EAAOG,UACbqI,GAAMxI,EAAOI,mBACbF,EAAiBF,EAAOE,eACxBuI,EAAUJ,EAAI,GACdK,EAAeL,EAAI,GACnBnC,EAAQ1L,KAAKa,EAAI,EACjBsN,EAAYzC,EAAQuC,EAAQvN,MAAM,GAAKuN,EACvCpO,EAAMsO,EAAUpN,MAIpB,IAFIiN,IAAIrO,EAAIoO,EAAIA,EAAKC,EAAIA,EAAKrO,EAAGE,GAAOF,GAEnCoO,EAAK,GAAKlO,EAAM,EAAI,CAIrB,IAHAF,EAAIE,EAAMkO,GAAMA,EAChBE,EAAUE,EAAUC,OAAQ,EAAGzO,GAEnBE,EAAJF,EAASA,GAAKoO,EAClBE,GAAWvI,EAAiByI,EAAUC,OAAQzO,EAAGoO,EAGhDC,GAAK,IAAIC,GAAWvI,EAAiByI,EAAUzN,MAAMf,IACtD+L,IAAOuC,EAAU,IAAMA,GAG/BnO,EAAMoO,EACFD,EAAUzI,EAAOC,mBAAuBuI,GAAMxI,EAAOM,mBACnDoI,EAAapN,QAAS,GAAIN,QAAQ,OAASwN,EAAK,OAAQ,KACxD,KAAOxI,EAAOK,wBACdqI,GACFD,EAGR,MAAOnO,IAgBXoF,EAAEmJ,WAAa,SAAUC,GACrB,GAAIT,GAAKU,EAAIC,EAAI9O,EAAG+O,EAAKlP,EAAGmP,EAAIvF,EAAGtI,EAC/BoB,EAAIhC,EACJF,EAAIC,KACJmC,EAAKpC,EAAEN,EACPuC,EAAI,GAAI1C,GAAU8F,GAClBuJ,EAAKJ,EAAK,GAAIjP,GAAU8F,GACxBwJ,EAAKF,EAAK,GAAIpP,GAAU8F,EAoB5B,IAlBW,MAANkJ,IACDrO,GAAS,EACTV,EAAI,GAAID,GAAUgP,GAClBrO,EAASgC,KAEDA,EAAI1C,EAAEiM,UAAajM,EAAE+H,GAAGlC,MAExBnF,GACAC,EAAO,GACL,oBAAuB+B,EAAI,eAAiB,kBAAoBqM,GAKtEA,GAAMrM,GAAK1C,EAAEE,GAAKY,EAAOd,EAAGA,EAAEG,EAAI,EAAG,GAAI2L,IAAIjG,GAAO7F,EAAI,QAI1D4C,EAAK,MAAOpC,GAAEuD,UAgBpB,KAfAzC,EAAI+B,EAAcT,GAIlBzC,EAAIsC,EAAEtC,EAAImB,EAAEE,OAAShB,EAAEL,EAAI,EAC3BsC,EAAEvC,EAAE,GAAKqF,GAAY2J,EAAM/O,EAAIiC,GAAa,EAAIA,EAAW8M,EAAMA,GACjEH,GAAMA,GAAM/O,EAAEuJ,IAAI9G,GAAK,EAAMtC,EAAI,EAAIsC,EAAI2M,EAAOpP,EAEhDkP,EAAMhN,EACNA,EAAU,EAAI,EACdlC,EAAI,GAAID,GAAUuB,GAGlB6N,EAAGjP,EAAE,GAAK,EAGN0J,EAAIrG,EAAKvD,EAAGyC,EAAG,EAAG,GAClBwM,EAAKD,EAAGpC,KAAMhD,EAAEsD,MAAMmC,IACH,GAAdJ,EAAG1F,IAAIwF,IACZC,EAAKK,EACLA,EAAKJ,EACLG,EAAKD,EAAGvC,KAAMhD,EAAEsD,MAAO+B,EAAKG,IAC5BD,EAAKF,EACLxM,EAAIzC,EAAEwM,MAAO5C,EAAEsD,MAAO+B,EAAKxM,IAC3BzC,EAAIiP,CAgBR,OAbAA,GAAK1L,EAAKwL,EAAGvC,MAAMwC,GAAKK,EAAI,EAAG,GAC/BF,EAAKA,EAAGvC,KAAMqC,EAAG/B,MAAMkC,IACvBJ,EAAKA,EAAGpC,KAAMqC,EAAG/B,MAAMmC,IACvBF,EAAG7N,EAAI8N,EAAG9N,EAAId,EAAEc,EAChBnB,GAAK,EAGLmO,EAAM/K,EAAK6L,EAAIC,EAAIlP,EAAGa,GAAgBwL,MAAMhM,GAAG0K,MAAM3B,IAC/ChG,EAAK4L,EAAIH,EAAI7O,EAAGa,GAAgBwL,MAAMhM,GAAG0K,OAAU,GAC7CkE,EAAGrL,WAAYsL,EAAGtL,aAClBoL,EAAGpL,WAAYiL,EAAGjL,YAE9B7B,EAAUgN,EACHZ,GAOX3I,EAAE2J,SAAW,WACT,OAAQ7O,MAsBZkF,EAAE4J,QAAU5J,EAAEzC,IAAM,SAAWlD,EAAGqE,GAC9B,GAAI3B,GAAGG,EAAG0K,EACNnN,EAAI6B,EAAe,EAAJjC,GAASA,GAAKA,GAC7BQ,EAAIC,IAQR,IANU,MAAL4D,IACDxD,EAAK,GACLwD,EAAI,GAAItE,GAAUsE,KAIhBzD,EAAYZ,GAAIgC,EAAkBA,EAAkB,GAAI,eACzD+J,SAAS/L,IAAMI,EAAI4B,IAAsBhC,GAAK,IAC/CwP,WAAWxP,IAAMA,KAAQA,EAAIuK,OAAgB,GAALvK,EAExC,MADA0C,GAAI0F,KAAKlF,KAAM1C,EAAGR,GACX,GAAID,GAAWsE,EAAI3B,EAAI2B,EAAI3B,EAuBtC,KApBI2B,EACKrE,EAAI,GAAKQ,EAAEwH,GAAGnC,IAAQrF,EAAEyL,SAAW5H,EAAE2D,GAAGnC,IAAQxB,EAAE4H,QACnDzL,EAAIA,EAAEyM,IAAI5I,IAEVkJ,EAAIlJ,EAGJA,EAAI,MAEDpB,IAMPP,EAAI+C,EAAUxC,EAAgBb,EAAW,IAG7CS,EAAI,GAAI9C,GAAU8F,KAEN,CACR,GAAKzF,EAAI,EAAI,CAET,GADAyC,EAAIA,EAAEqK,MAAM1M,IACNqC,EAAE3C,EAAI,KACRwC,GACKG,EAAE3C,EAAEsB,OAASkB,IAAIG,EAAE3C,EAAEsB,OAASkB,GAC5B2B,IACPxB,EAAIA,EAAEoK,IAAI5I,IAKlB,GADAjE,EAAI6B,EAAW7B,EAAI,IACbA,EAAI,KACVI,GAAIA,EAAE0M,MAAM1M,GACRkC,EACKlC,EAAEN,GAAKM,EAAEN,EAAEsB,OAASkB,IAAIlC,EAAEN,EAAEsB,OAASkB,GACnC2B,IACP7D,EAAIA,EAAEyM,IAAI5I,IAIlB,MAAIA,GAAUxB,GACL,EAAJ7C,IAAQ6C,EAAIgD,EAAItC,IAAIV,IAElB0K,EAAI1K,EAAEoK,IAAIM,GAAK7K,EAAI5B,EAAO+B,EAAGI,EAAejC,GAAkB6B,IAkBzE8C,EAAE8J,YAAc,SAAWtK,EAAIpC,GAC3B,MAAOW,GAAQjD,KAAY,MAAN0E,GAAcvE,EAAYuE,EAAI,EAAGwC,EAAK,GAAI,aACtD,EAALxC,EAAS,KAAMpC,EAAI,KAgB3B4C,EAAE5B,SAAW,SAAU9D,GACnB,GAAIM,GACAP,EAAIS,KACJa,EAAItB,EAAEsB,EACNnB,EAAIH,EAAEG,CAyBV,OAtBW,QAANA,EAEGmB,GACAf,EAAM,WACG,EAAJe,IAAQf,EAAM,IAAMA,IAEzBA,EAAM,OAGVA,EAAM8C,EAAerD,EAAEE,GAOnBK,EALM,MAALN,GAAcW,EAAYX,EAAG,EAAG,GAAI,GAAI,QAKnC0B,EAAayB,EAAc7C,EAAKJ,GAAS,EAAJF,EAAO,GAAIqB,GAJ3C0C,GAAL7D,GAAmBA,GAAK2F,EAC1B7B,EAAe1D,EAAKJ,GACpBiD,EAAc7C,EAAKJ,GAKlB,EAAJmB,GAAStB,EAAEE,EAAE,KAAKK,EAAM,IAAMA,IAGhCA,GAQXoF,EAAE+J,UAAY/J,EAAEgK,MAAQ,WACpB,MAAO7O,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IASnDwF,EAAEiK,QAAUjK,EAAEkK,OAAS,WACnB,GAAItP,GACAP,EAAIS,KACJN,EAAIH,EAAEG,CAEV,OAAW,QAANA,EAAoBH,EAAE+D,YAE3BxD,EAAM8C,EAAerD,EAAEE,GAEvBK,EAAWyD,GAAL7D,GAAmBA,GAAK2F,EACxB7B,EAAe1D,EAAKJ,GACpBiD,EAAc7C,EAAKJ,GAElBH,EAAEsB,EAAI,EAAI,IAAMf,EAAMA,IAcf,MAAbT,GAAoBC,EAAUoH,OAAOrH,GAEnCC,EAOX,QAASyK,GAASxK,GACd,GAAII,GAAQ,EAAJJ,CACR,OAAOA,GAAI,GAAKA,IAAMI,EAAIA,EAAIA,EAAI,EAKtC,QAASiD,GAAciE,GAMnB,IALA,GAAIhG,GAAGiM,EACHnN,EAAI,EACJ0E,EAAIwC,EAAE9F,OACNmB,EAAI2E,EAAE,GAAK,GAEHxC,EAAJ1E,GAAS,CAGb,IAFAkB,EAAIgG,EAAElH,KAAO,GACbmN,EAAInL,EAAWd,EAAEE,OACT+L,IAAKjM,EAAI,IAAMA,GACvBqB,GAAKrB,EAIT,IAAMwD,EAAInC,EAAEnB,OAA8B,KAAtBmB,EAAEjB,aAAaoD,KACnC,MAAOnC,GAAExB,MAAO,EAAG2D,EAAI,GAAK,GAKhC,QAASsE,GAAS5I,EAAGqC,GACjB,GAAIyE,GAAGrH,EACH2C,EAAKpC,EAAEN,EACPoK,EAAKzH,EAAE3C,EACPE,EAAII,EAAEc,EACNwD,EAAIjC,EAAEvB,EACNoB,EAAIlC,EAAEL,EACN2P,EAAIjN,EAAE1C,CAGV,KAAMC,IAAM0E,EAAI,MAAO,KAMvB,IAJAwC,EAAI1E,IAAOA,EAAG,GACd3C,EAAIqK,IAAOA,EAAG,GAGThD,GAAKrH,EAAI,MAAOqH,GAAIrH,EAAI,GAAK6E,EAAI1E,CAGtC,IAAKA,GAAK0E,EAAI,MAAO1E,EAMrB,IAJAkH,EAAQ,EAAJlH,EACJH,EAAIyC,GAAKoN,GAGHlN,IAAO0H,EAAK,MAAOrK,GAAI,GAAK2C,EAAK0E,EAAI,EAAI,EAG/C,KAAMrH,EAAI,MAAOyC,GAAIoN,EAAIxI,EAAI,EAAI,EAKjC,KAHAxC,GAAMpC,EAAIE,EAAGpB,SAAasO,EAAIxF,EAAG9I,QAAWkB,EAAIoN,EAG1C1P,EAAI,EAAO0E,EAAJ1E,EAAOA,IAAM,GAAKwC,EAAGxC,IAAMkK,EAAGlK,GAAK,MAAOwC,GAAGxC,GAAKkK,EAAGlK,GAAKkH,EAAI,EAAI,EAG/E,OAAO5E,IAAKoN,EAAI,EAAIpN,EAAIoN,EAAIxI,EAAI,EAAI,GASxC,QAASM,GAAsB5H,EAAGyE,EAAKC,GACnC,OAAS1E,EAAI4E,EAAS5E,KAAQyE,GAAYC,GAAL1E,EAIzC,QAASsE,GAAQyL,GACb,MAA8C,kBAAvCC,OAAOpK,UAAU7B,SAASQ,KAAKwL,GAS1C,QAAS5M,GAAW5C,EAAKgC,EAAQD,GAO7B,IANA,GAAIwC,GAEAmL,EADA3B,GAAO,GAEPlO,EAAI,EACJE,EAAMC,EAAIiB,OAEFlB,EAAJF,GAAW,CACf,IAAM6P,EAAO3B,EAAI9M,OAAQyO,IAAQ3B,EAAI2B,IAAS1N,GAG9C,IAFA+L,EAAKxJ,EAAI,IAAO5D,EAASW,QAAStB,EAAIkD,OAAQrD,MAEtC0E,EAAIwJ,EAAI9M,OAAQsD,IAEfwJ,EAAIxJ,GAAKxC,EAAU,IACD,MAAdgM,EAAIxJ,EAAI,KAAawJ,EAAIxJ,EAAI,GAAK,GACvCwJ,EAAIxJ,EAAI,IAAMwJ,EAAIxJ,GAAKxC,EAAU,EACjCgM,EAAIxJ,IAAMxC,GAKtB,MAAOgM,GAAIvB,UAIf,QAAS9I,GAAe1D,EAAKJ,GACzB,OAASI,EAAIiB,OAAS,EAAIjB,EAAIkD,OAAO,GAAK,IAAMlD,EAAIY,MAAM,GAAKZ,IACvD,EAAJJ,EAAQ,IAAM,MAASA,EAI/B,QAASiD,GAAc7C,EAAKJ,GACxB,GAAIG,GAAKiN,CAGT,IAAS,EAAJpN,EAAQ,CAGT,IAAMoN,EAAI,OAAQpN,EAAGoN,GAAK,KAC1BhN,EAAMgN,EAAIhN,MAOV,IAHAD,EAAMC,EAAIiB,SAGHrB,EAAIG,EAAM,CACb,IAAMiN,EAAI,IAAKpN,GAAKG,IAAOH,EAAGoN,GAAK,KACnChN,GAAOgN,MACKjN,GAAJH,IACRI,EAAMA,EAAIY,MAAO,EAAGhB,GAAM,IAAMI,EAAIY,MAAMhB,GAIlD,OAAOI,GAIX,QAASqE,GAAS5E,GAEd,MADAA,GAAIwP,WAAWxP,GACJ,EAAJA,EAAQyF,EAASzF,GAAKiC,EAAUjC,GAvoF3C,GAAID,GAAW+H,EAAWzG,EACtBO,EAAY,uCACZ6D,EAAW2C,KAAK+C,KAChBlJ,EAAYmG,KAAKuD,MACjB9D,EAAU,iCACV/D,EAAe,gBACfrC,EAAgB,kDAChBP,EAAW,mEACXwE,EAAO,KACPtD,EAAW,GACXJ,EAAmB,iBAEnBuD,GAAY,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAC7E2D,EAAY,IAOZvB,EAAM,GA+nFV,IA7nFsB,mBAAVuI,UAAwBpI,EAAYoI,QAwnFhDnQ,EAAYF,IACZE,EAAAA,WAAoBA,EAAUA,UAAYA,EAIpB,kBAAVoQ,SAAwBA,OAAOC,IACvCD,OAAQ,WAAc,MAAOpQ,SAG1B,IAAsB,mBAAVsQ,SAAyBA,OAAOC,SAI/C,GAHAD,OAAOC,QAAUvQ,GAGX+H,EAAY,IAAMA,EAAYyI,QAAQ,UAAkB,MAAOpQ,SAI/DP,KAAYA,EAA2B,mBAAR4Q,MAAsBA,KAAOC,SAAS,kBAC3E7Q,EAAUG,UAAYA,GAE3BU"} \ No newline at end of file diff --git a/node_modules/bignumber.js/bignumber.min.js b/node_modules/bignumber.js/bignumber.min.js deleted file mode 100644 index a0ef22c..0000000 --- a/node_modules/bignumber.js/bignumber.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* bignumber.js v2.4.0 https://github.com/MikeMcl/bignumber.js/LICENCE */ -!function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,B);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+b.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,N,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&(e>S||e!==m(e))&&L(M,N,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=B;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=b.charAt(g[d++]));e=l(e,u)}return e}function F(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:B,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&k>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||k>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function _(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[(y-n%y)%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==O&&(a[0]=1));break}if(a[l]+=s,a[l]!=O)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(B=0|e),r[n]=B,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(k=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(k=-($=0|(0>e?-e:e)))),r[n]=[k,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?x:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return _(arguments,T.lt)},a.min=function(){return _(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,N,b,S,R,A,E,D,F,_,x=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*x:x/0:NaN);for(v=new a(x),N=v.c=[],c=i.e-o.e,x=u+c+1,f||(f=O,c=t(i.e/y)-t(o.e/y),x=x/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>x)N.push(1),g=!0;else{for(E=I.length,F=L.length,h=0,x+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),F=L.length,E=I.length),A=F,b=I.slice(0,F),S=b.length;F>S;b[S++]=0);_=L.slice(),_.unshift(0),D=L[0],L[1]>=f/2&&D++;do{if(p=0,l=n(L,b,F,S),0>l){if(R=b[0],F!=S&&(R=R*f+(b[1]||0)),p=m(R/D),p>1)for(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=b.length;1==n(d,b,w,S);)p--,r(d,w>F?_:L,w,f),w=d.length,l=1;else 0==p&&(l=p=1),d=L.slice(),w=d.length;if(S>w&&d.unshift(0),r(b,d,S,f),S=b.length,-1==l)for(;n(L,b,F,S)<1;)p++,r(b,S>F?_:L,S,f),S=b.length}else 0===l&&(p++,b=[0]);N[h++]=p,b[0]?b[S++]=I[A]||0:(b=[I[A]],S=1)}while((A++=10;x/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])(?=\w[\w.]*$)/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,B)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(NaN);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:NaN);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==B?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=O-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/O|0,f[n]%=O;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:B),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?NaN:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=b,b=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=O,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=b[--s]%v,h=b[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:B,e?U(t,e,n):t},T.toExponential=function(e,n){return F(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return F(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=F(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,B).minus(g).abs().cmp(C(f,t,o,B).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){return+this},T.toPower=T.pow=function(e,n){var t,r,i,o=m(0>e?-e:+e),u=this;if(null!=n&&(M=23,n=new a(n)),!H(e,-S,S,23,"exponent")&&(!isFinite(e)||o>S&&(e/=0)||parseFloat(e)!=e&&!(e=NaN))||0==e)return t=Math.pow(+u,e),new a(n?t%n:t);for(n?e>1&&u.gt(q)&&u.isInt()&&n.gt(q)&&n.isInt()?u=u.mod(n):(i=n,n=null):J&&(t=d(J/y+2)),r=new a(q);;){if(o%2){if(r=r.times(u),!r.c)break;t?r.c.length>t&&(r.c.length=t):n&&(r=r.mod(n))}if(o=m(o/2),!o)break;u=u.times(u),t?u.c&&u.c.length>t&&(u.c.length=t):n&&(u=u.mod(n))}return n?r:(0>e&&(r=q.div(r)),i?r.mod(i):t?U(r,J,B):r)},T.toPrecision=function(e,n){return F(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):k>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){var e,n=this,t=n.e;return null===t?n.toString():(e=r(n.c),e=k>=t||t>=$?f(e,t):l(e,t),n.s<0?"-"+e:e)},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=b.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",N="number type has more than 15 significant digits",b="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",O=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if("undefined"!=typeof crypto&&(h=crypto),a=n(),a["default"]=a.BigNumber=a,"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e||(e="undefined"!=typeof self?self:Function("return this")()),e.BigNumber=a}(this); -//# sourceMappingURL=bignumber.js.map \ No newline at end of file diff --git a/node_modules/bignumber.js/bower.json b/node_modules/bignumber.js/bower.json deleted file mode 100644 index e2418f0..0000000 --- a/node_modules/bignumber.js/bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "bignumber.js", - "main": "bignumber.js", - "version": "2.4.0", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "authors": [ - "Michael Mclaughlin " - ], - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "ignore": [ - ".*", - "*.json", - "test" - ] -} - diff --git a/node_modules/bignumber.js/doc/API.html b/node_modules/bignumber.js/doc/API.html deleted file mode 100644 index ffdaea6..0000000 --- a/node_modules/bignumber.js/doc/API.html +++ /dev/null @@ -1,2175 +0,0 @@ - - - - - - -bignumber.js API - - - - - - -
- -

bignumber.js

- -

A JavaScript library for arbitrary-precision arithmetic.

-

Hosted on GitHub.

- -

API

- -

- See the README on GitHub for a - quick-start introduction. -

-

- In all examples below, var and semicolons are not shown, and if a commented-out - value is in quotes it means toString has been called on the preceding expression. -

- - -

CONSTRUCTOR

- -
- BigNumberBigNumber(value [, base]) ⇒ BigNumber -
-
-
value
-
- number|string|BigNumber: see RANGE for - range. -
-
- A numeric value. -
-
- Legitimate values include ±0, ±Infinity and - NaN. -
-
- Values of type number with more than 15 significant digits are - considered invalid (if ERRORS is true) as calling - toString or valueOf on - such numbers may not result in the intended value. -
console.log( 823456789123456.3 );    // 823456789123456.2
-
-
- There is no limit to the number of digits of a value of type string (other than - that of JavaScript's maximum array size). -
-
- Decimal string values may be in exponential, as well as normal (fixed-point) notation. - Non-decimal values must be in normal notation. -
-
- String values in hexadecimal literal form, e.g. '0xff', are valid, as are - string values with the octal and binary prefixs '0o' and '0b'. - String values in octal literal form without the prefix will be interpreted as - decimals, e.g. '011' is interpreted as 11, not 9. -
-
Values in any base may have fraction digits.
-
- For bases from 10 to 36, lower and/or upper case letters can be - used to represent values from 10 to 35. -
-
- For bases above 36, a-z represents values from 10 to - 35, A-Z from 36 to 61, and - $ and _ represent 62 and 63 respectively - (this can be changed by editing the ALPHABET variable near the top of the - source file). -
-
-
-
base
-
- number: integer, 2 to 64 inclusive -
-
The base of value.
-
- If base is omitted, or is null or undefined, base - 10 is assumed. -
-
-
-

Returns a new instance of a BigNumber object.

-

- If a base is specified, the value is rounded according to - the current DECIMAL_PLACES and - ROUNDING_MODE configuration. -

-

- See Errors for the treatment of an invalid value or - base. -

-
-x = new BigNumber(9)                       // '9'
-y = new BigNumber(x)                       // '9'
-
-// 'new' is optional if ERRORS is false
-BigNumber(435.345)                         // '435.345'
-
-new BigNumber('5032485723458348569331745.33434346346912144534543')
-new BigNumber('4.321e+4')                  // '43210'
-new BigNumber('-735.0918e-430')            // '-7.350918e-428'
-new BigNumber(Infinity)                    // 'Infinity'
-new BigNumber(NaN)                         // 'NaN'
-new BigNumber('.5')                        // '0.5'
-new BigNumber('+2')                        // '2'
-new BigNumber(-10110100.1, 2)              // '-180.5'
-new BigNumber(-0b10110100.1)               // '-180.5'
-new BigNumber('123412421.234324', 5)       // '607236.557696'
-new BigNumber('ff.8', 16)                  // '255.5'
-new BigNumber('0xff.8')                    // '255.5'
-

- The following throws 'not a base 2 number' if - ERRORS is true, otherwise it returns a BigNumber with value - NaN. -

-
new BigNumber(9, 2)
-

- The following throws 'number type has more than 15 significant digits' if - errors is true, otherwise it returns a BigNumber with value - 96517860459076820. -

-
new BigNumber(96517860459076817.4395)
-

- The following throws 'not a number' if ERRORS - is true, otherwise it returns a BigNumber with value NaN. -

-
new BigNumber('blurgh')
-

- A value is only rounded by the constructor if a base is specified. -

-
BigNumber.config({ DECIMAL_PLACES: 5 })
-new BigNumber(1.23456789)                  // '1.23456789'
-new BigNumber(1.23456789, 10)              // '1.23457'
- - - -

Methods

-

The static methods of a BigNumber constructor.

- - - - -
- another.another([obj]) ⇒ BigNumber constructor -
-

obj: object

-

- Returns a new independent BigNumber constructor with configuration as described by - obj (see config), or with the default - configuration if obj is null or undefined. -

-
BigNumber.config({ DECIMAL_PLACES: 5 })
-BN = BigNumber.another({ DECIMAL_PLACES: 9 })
-
-x = new BigNumber(1)
-y = new BN(1)
-
-x.div(3)                        // 0.33333
-y.div(3)                        // 0.333333333
-
-// BN = BigNumber.another({ DECIMAL_PLACES: 9 }) is equivalent to:
-BN = BigNumber.another()
-BN.config({ DECIMAL_PLACES: 9 })
- - - -
configconfig([obj]) ⇒ object
-

- obj: object: an object that contains some or all of the following - properties. -

-

Configures the 'global' settings for this particular BigNumber constructor.

-

Note: the configuration can also be supplied as an argument list, see below.

-
-
DECIMAL_PLACES
-
- number: integer, 0 to 1e+9 inclusive
- Default value: 20 -
-
- The maximum number of decimal places of the results of operations involving - division, i.e. division, square root and base conversion operations, and power - operations with negative exponents.
-
-
-
BigNumber.config({ DECIMAL_PLACES: 5 })
-BigNumber.config(5)    // equivalent
-
- - - -
ROUNDING_MODE
-
- number: integer, 0 to 8 inclusive
- Default value: 4 (ROUND_HALF_UP) -
-
- The rounding mode used in the above operations and the default rounding mode of - round, - toExponential, - toFixed, - toFormat and - toPrecision. -
-
The modes are available as enumerated properties of the BigNumber constructor.
-
-
BigNumber.config({ ROUNDING_MODE: 0 })
-BigNumber.config(null, BigNumber.ROUND_UP)    // equivalent
-
- - - -
EXPONENTIAL_AT
-
- number: integer, magnitude 0 to 1e+9 inclusive, or -
- number[]: [ integer -1e+9 to 0 inclusive, integer - 0 to 1e+9 inclusive ]
- Default value: [-7, 20] -
-
- The exponent value(s) at which toString returns exponential notation. -
-
- If a single number is assigned, the value is the exponent magnitude.
- If an array of two numbers is assigned then the first number is the negative exponent - value at and beneath which exponential notation is used, and the second number is the - positive exponent value at and above which the same. -
-
- For example, to emulate JavaScript numbers in terms of the exponent values at which they - begin to use exponential notation, use [-7, 20]. -
-
-
BigNumber.config({ EXPONENTIAL_AT: 2 })
-new BigNumber(12.3)         // '12.3'        e is only 1
-new BigNumber(123)          // '1.23e+2'
-new BigNumber(0.123)        // '0.123'       e is only -1
-new BigNumber(0.0123)       // '1.23e-2'
-
-BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
-new BigNumber(123456789)    // '123456789'   e is only 8
-new BigNumber(0.000000123)  // '1.23e-7'
-
-// Almost never return exponential notation:
-BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
-
-// Always return exponential notation:
-BigNumber.config({ EXPONENTIAL_AT: 0 })
-
-
- Regardless of the value of EXPONENTIAL_AT, the toFixed method - will always return a value in normal notation and the toExponential method - will always return a value in exponential form. -
-
- Calling toString with a base argument, e.g. toString(10), will - also always return normal notation. -
- - - -
RANGE
-
- number: integer, magnitude 1 to 1e+9 inclusive, or -
- number[]: [ integer -1e+9 to -1 inclusive, integer - 1 to 1e+9 inclusive ]
- Default value: [-1e+9, 1e+9] -
-
- The exponent value(s) beyond which overflow to Infinity and underflow to - zero occurs. -
-
- If a single number is assigned, it is the maximum exponent magnitude: values wth a - positive exponent of greater magnitude become Infinity and those with a - negative exponent of greater magnitude become zero. -
- If an array of two numbers is assigned then the first number is the negative exponent - limit and the second number is the positive exponent limit. -
-
- For example, to emulate JavaScript numbers in terms of the exponent values at which they - become zero and Infinity, use [-324, 308]. -
-
-
BigNumber.config({ RANGE: 500 })
-BigNumber.config().RANGE     // [ -500, 500 ]
-new BigNumber('9.999e499')   // '9.999e+499'
-new BigNumber('1e500')       // 'Infinity'
-new BigNumber('1e-499')      // '1e-499'
-new BigNumber('1e-500')      // '0'
-
-BigNumber.config({ RANGE: [-3, 4] })
-new BigNumber(99999)         // '99999'      e is only 4
-new BigNumber(100000)        // 'Infinity'   e is 5
-new BigNumber(0.001)         // '0.01'       e is only -3
-new BigNumber(0.0001)        // '0'          e is -4
-
-
- The largest possible magnitude of a finite BigNumber is - 9.999...e+1000000000.
- The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. -
- - - -
ERRORS
-
- boolean|number: true, false, 0 or - 1.
- Default value: true -
-
- The value that determines whether BigNumber Errors are thrown.
- If ERRORS is false, no errors will be thrown. -
-
See Errors.
-
BigNumber.config({ ERRORS: false })
- - - -
CRYPTO
-
- boolean|number: true, false, 0 or - 1.
- Default value: false -
-
- The value that determines whether cryptographically-secure pseudo-random number - generation is used. -
-
- If CRYPTO is set to true then the - random method will generate random digits using - crypto.getRandomValues in browsers that support it, or - crypto.randomBytes if using a version of Node.js that supports it. -
-
- If neither function is supported by the host environment then attempting to set - CRYPTO to true will fail, and if ERRORS - is true an exception will be thrown. -
-
- If CRYPTO is false then the source of randomness used will be - Math.random (which is assumed to generate at least 30 bits of - randomness). -
-
See random.
-
-
BigNumber.config({ CRYPTO: true })
-BigNumber.config().CRYPTO       // true
-BigNumber.random()              // 0.54340758610486147524
-
- - - -
MODULO_MODE
-
- number: integer, 0 to 9 inclusive
- Default value: 1 (ROUND_DOWN) -
-
The modulo mode used when calculating the modulus: a mod n.
-
- The quotient, q = a / n, is calculated according to the - ROUNDING_MODE that corresponds to the chosen - MODULO_MODE. -
-
The remainder, r, is calculated as: r = a - n * q.
-
- The modes that are most commonly used for the modulus/remainder operation are shown in - the following table. Although the other rounding modes can be used, they may not give - useful results. -
-
- - - - - - - - - - - - - - - - - - - - - - -
PropertyValueDescription
ROUND_UP0 - The remainder is positive if the dividend is negative, otherwise it is negative. -
ROUND_DOWN1 - The remainder has the same sign as the dividend.
- This uses 'truncating division' and matches the behaviour of JavaScript's - remainder operator %. -
ROUND_FLOOR3 - The remainder has the same sign as the divisor.
- This matches Python's % operator. -
ROUND_HALF_EVEN6The IEEE 754 remainder function.
EUCLID9 - The remainder is always positive. Euclidian division:
- q = sign(n) * floor(a / abs(n)) -
-
-
- The rounding/modulo modes are available as enumerated properties of the BigNumber - constructor. -
-
See modulo.
-
-
BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
-BigNumber.config({ MODULO_MODE: 9 })          // equivalent
-
- - - -
POW_PRECISION
-
- number: integer, 0 to 1e+9 inclusive.
- Default value: 100 -
-
- The maximum number of significant digits of the result of the power operation - (unless a modulus is specified). -
-
If set to 0, the number of signifcant digits will not be limited.
-
See toPower.
-
BigNumber.config({ POW_PRECISION: 100 })
- - - -
FORMAT
-
object
-
- The FORMAT object configures the format of the string returned by the - toFormat method. -
-
- The example below shows the properties of the FORMAT object that are - recognised, and their default values. -
-
- Unlike the other configuration properties, the values of the properties of the - FORMAT object will not be checked for validity. The existing - FORMAT object will simply be replaced by the object that is passed in. - Note that all the properties shown below do not have to be included. -
-
See toFormat for examples of usage.
-
-
-BigNumber.config({
-    FORMAT: {
-        // the decimal separator
-        decimalSeparator: '.',
-        // the grouping separator of the integer part
-        groupSeparator: ',',
-        // the primary grouping size of the integer part
-        groupSize: 3,
-        // the secondary grouping size of the integer part
-        secondaryGroupSize: 0,
-        // the grouping separator of the fraction part
-        fractionGroupSeparator: ' ',
-        // the grouping size of the fraction part
-        fractionGroupSize: 0
-    }
-});
-
-
-
-

Returns an object with the above properties and their current values.

-

- If the value to be assigned to any of the above properties is null or - undefined it is ignored. -

-

See Errors for the treatment of invalid values.

-
-BigNumber.config({
-    DECIMAL_PLACES: 40,
-    ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
-    EXPONENTIAL_AT: [-10, 20],
-    RANGE: [-500, 500],
-    ERRORS: true,
-    CRYPTO: true,
-    MODULO_MODE: BigNumber.ROUND_FLOOR,
-    POW_PRECISION: 80,
-    FORMAT: {
-        groupSize: 3,
-        groupSeparator: ' ',
-        decimalSeparator: ','
-    }
-});
-
-// Alternatively but equivalently (excluding FORMAT):
-BigNumber.config( 40, 7, [-10, 20], 500, 1, 1, 3, 80 )
-
-obj = BigNumber.config();
-obj.ERRORS       // true
-obj.RANGE        // [-500, 500]
- - - -
- max.max([arg1 [, arg2, ...]]) ⇒ BigNumber -
-

- arg1, arg2, ...: number|string|BigNumber
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the maximum of arg1, - arg2,... . -

-

The argument to this method can also be an array of values.

-

The return value is always exact and unrounded.

-
x = new BigNumber('3257869345.0378653')
-BigNumber.max(4e9, x, '123456789.9')          // '4000000000'
-
-arr = [12, '13', new BigNumber(14)]
-BigNumber.max(arr)                            // '14'
- - - -
- min.min([arg1 [, arg2, ...]]) ⇒ BigNumber -
-

- arg1, arg2, ...: number|string|BigNumber
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the minimum of arg1, - arg2,... . -

-

The argument to this method can also be an array of values.

-

The return value is always exact and unrounded.

-
x = new BigNumber('3257869345.0378653')
-BigNumber.min(4e9, x, '123456789.9')          // '123456789.9'
-
-arr = [2, new BigNumber(-14), '-15.9999', -12]
-BigNumber.min(arr)                            // '-15.9999'
- - - -
- random.random([dp]) ⇒ BigNumber -
-

dp: number: integer, 0 to 1e+9 inclusive

-

- Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and - less than 1. -

-

- The return value will have dp decimal places (or less if trailing zeros are - produced).
- If dp is omitted then the number of decimal places will default to the current - DECIMAL_PLACES setting. -

-

- Depending on the value of this BigNumber constructor's - CRYPTO setting and the support for the - crypto object in the host environment, the random digits of the return value are - generated by either Math.random (fastest), crypto.getRandomValues - (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). -

-

- If CRYPTO is true, i.e. one of the - crypto methods is to be used, the value of a returned BigNumber should be - cryptographically-secure and statistically indistinguishable from a random value. -

-
BigNumber.config({ DECIMAL_PLACES: 10 })
-BigNumber.random()              // '0.4117936847'
-BigNumber.random(20)            // '0.78193327636914089009'
- - - -

Properties

-

- The library's enumerated rounding modes are stored as properties of the constructor.
- (They are not referenced internally by the library itself.) -

-

- Rounding modes 0 to 6 (inclusive) are the same as those of Java's - BigDecimal class. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyValueDescription
ROUND_UP0Rounds away from zero
ROUND_DOWN1Rounds towards zero
ROUND_CEIL2Rounds towards Infinity
ROUND_FLOOR3Rounds towards -Infinity
ROUND_HALF_UP4 - Rounds towards nearest neighbour.
- If equidistant, rounds away from zero -
ROUND_HALF_DOWN5 - Rounds towards nearest neighbour.
- If equidistant, rounds towards zero -
ROUND_HALF_EVEN6 - Rounds towards nearest neighbour.
- If equidistant, rounds towards even neighbour -
ROUND_HALF_CEIL7 - Rounds towards nearest neighbour.
- If equidistant, rounds towards Infinity -
ROUND_HALF_FLOOR8 - Rounds towards nearest neighbour.
- If equidistant, rounds towards -Infinity -
-
-BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
-BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
- - -

INSTANCE

- -

Methods

-

The methods inherited by a BigNumber instance from its constructor's prototype object.

-

A BigNumber is immutable in the sense that it is not changed by its methods.

-

- The treatment of ±0, ±Infinity and NaN is - consistent with how JavaScript treats these values. -

-

- Many method names have a shorter alias.
- (Internally, the library always uses the shorter method names.) -

- - - -
absoluteValue.abs() ⇒ BigNumber
-

- Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of - this BigNumber. -

-

The return value is always exact and unrounded.

-
-x = new BigNumber(-0.8)
-y = x.absoluteValue()           // '0.8'
-z = y.abs()                     // '0.8'
- - - -
ceil.ceil() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber rounded to - a whole number in the direction of positive Infinity. -

-
-x = new BigNumber(1.3)
-x.ceil()                        // '2'
-y = new BigNumber(-1.8)
-y.ceil()                        // '-1'
- - - -
comparedTo.cmp(n [, base]) ⇒ number
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

- - - - - - - - - - - - - - - - - - -
Returns 
1If the value of this BigNumber is greater than the value of n
-1If the value of this BigNumber is less than the value of n
0If this BigNumber and n have the same value
nullIf the value of either this BigNumber or n is NaN
-
-x = new BigNumber(Infinity)
-y = new BigNumber(5)
-x.comparedTo(y)                 // 1
-x.comparedTo(x.minus(1))        // 0
-y.cmp(NaN)                      // null
-y.cmp('110', 2)                 // -1
- - - -
decimalPlaces.dp() ⇒ number
-

- Return the number of decimal places of the value of this BigNumber, or null if - the value of this BigNumber is ±Infinity or NaN. -

-
-x = new BigNumber(123.45)
-x.decimalPlaces()               // 2
-y = new BigNumber('9.9e-101')
-y.dp()                          // 102
- - - -
dividedBy.div(n [, base]) ⇒ BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the value of this BigNumber divided by - n, rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

-
-x = new BigNumber(355)
-y = new BigNumber(113)
-x.dividedBy(y)                  // '3.14159292035398230088'
-x.div(5)                        // '71'
-x.div(47, 16)                   // '5'
- - - -
- dividedToIntegerBy.divToInt(n [, base]) ⇒ - BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Return a BigNumber whose value is the integer part of dividing the value of this BigNumber by - n. -

-
-x = new BigNumber(5)
-y = new BigNumber(3)
-x.dividedToIntegerBy(y)         // '1'
-x.divToInt(0.7)                 // '7'
-x.divToInt('0.f', 16)           // '5'
- - - -
equals.eq(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber equals the value of n, - otherwise returns false.
- As with JavaScript, NaN does not equal NaN. -

-

Note: This method uses the comparedTo method internally.

-
-0 === 1e-324                    // true
-x = new BigNumber(0)
-x.equals('1e-324')              // false
-BigNumber(-0).eq(x)             // true  ( -0 === 0 )
-BigNumber(255).eq('ff', 16)     // true
-
-y = new BigNumber(NaN)
-y.equals(NaN)                   // false
- - - -
floor.floor() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber rounded to a whole number in - the direction of negative Infinity. -

-
-x = new BigNumber(1.8)
-x.floor()                       // '1'
-y = new BigNumber(-1.3)
-y.floor()                       // '-2'
- - - -
greaterThan.gt(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is greater than the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-0.1 > (0.3 - 0.2)                           // true
-x = new BigNumber(0.1)
-x.greaterThan(BigNumber(0.3).minus(0.2))    // false
-BigNumber(0).gt(x)                          // false
-BigNumber(11, 3).gt(11.1, 2)                // true
- - - -
- greaterThanOrEqualTo.gte(n [, base]) ⇒ boolean -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is greater than or equal to the value - of n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-(0.3 - 0.2) >= 0.1                   // false
-x = new BigNumber(0.3).minus(0.2)
-x.greaterThanOrEqualTo(0.1)          // true
-BigNumber(1).gte(x)                  // true
-BigNumber(10, 18).gte('i', 36)       // true
- - - -
isFinite.isFinite() ⇒ boolean
-

- Returns true if the value of this BigNumber is a finite number, otherwise - returns false. -

-

- The only possible non-finite values of a BigNumber are NaN, Infinity - and -Infinity. -

-
-x = new BigNumber(1)
-x.isFinite()                    // true
-y = new BigNumber(Infinity)
-y.isFinite()                    // false
-

- Note: The native method isFinite() can be used if - n <= Number.MAX_VALUE. -

- - - -
isInteger.isInt() ⇒ boolean
-

- Returns true if the value of this BigNumber is a whole number, otherwise returns - false. -

-
-x = new BigNumber(1)
-x.isInteger()                   // true
-y = new BigNumber(123.456)
-y.isInt()                       // false
- - - -
isNaN.isNaN() ⇒ boolean
-

- Returns true if the value of this BigNumber is NaN, otherwise - returns false. -

-
-x = new BigNumber(NaN)
-x.isNaN()                       // true
-y = new BigNumber('Infinity')
-y.isNaN()                       // false
-

Note: The native method isNaN() can also be used.

- - - -
isNegative.isNeg() ⇒ boolean
-

- Returns true if the value of this BigNumber is negative, otherwise returns - false. -

-
-x = new BigNumber(-0)
-x.isNegative()                  // true
-y = new BigNumber(2)
-y.isNeg()                       // false
-

Note: n < 0 can be used if n <= -Number.MIN_VALUE.

- - - -
isZero.isZero() ⇒ boolean
-

- Returns true if the value of this BigNumber is zero or minus zero, otherwise - returns false. -

-
-x = new BigNumber(-0)
-x.isZero() && x.isNeg()         // true
-y = new BigNumber(Infinity)
-y.isZero()                      // false
-

Note: n == 0 can be used if n >= Number.MIN_VALUE.

- - - -
lessThan.lt(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is less than the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-(0.3 - 0.2) < 0.1                     // true
-x = new BigNumber(0.3).minus(0.2)
-x.lessThan(0.1)                       // false
-BigNumber(0).lt(x)                    // true
-BigNumber(11.1, 2).lt(11, 3)          // true
- - - -
- lessThanOrEqualTo.lte(n [, base]) ⇒ boolean -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is less than or equal to the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-0.1 <= (0.3 - 0.2)                                // false
-x = new BigNumber(0.1)
-x.lessThanOrEqualTo(BigNumber(0.3).minus(0.2))    // true
-BigNumber(-1).lte(x)                              // true
-BigNumber(10, 18).lte('i', 36)                    // true
- - - -
- minus.minus(n [, base]) ⇒ BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the value of this BigNumber minus n.

-

The return value is always exact and unrounded.

-
-0.3 - 0.1                       // 0.19999999999999998
-x = new BigNumber(0.3)
-x.minus(0.1)                    // '0.2'
-x.minus(0.6, 20)                // '0'
- - - -
modulo.mod(n [, base]) ⇒ BigNumber
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. - the integer remainder of dividing this BigNumber by n. -

-

- The value returned, and in particular its sign, is dependent on the value of the - MODULO_MODE setting of this BigNumber constructor. - If it is 1 (default value), the result will have the same sign as this BigNumber, - and it will match that of Javascript's % operator (within the limits of double - precision) and BigDecimal's remainder method. -

-

The return value is always exact and unrounded.

-

- See MODULO_MODE for a description of the other - modulo modes. -

-
-1 % 0.9                         // 0.09999999999999998
-x = new BigNumber(1)
-x.modulo(0.9)                   // '0.1'
-y = new BigNumber(33)
-y.mod('a', 33)                  // '3'
- - - -
negated.neg() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by - -1. -

-
-x = new BigNumber(1.8)
-x.negated()                     // '-1.8'
-y = new BigNumber(-1.3)
-y.neg()                         // '1.3'
- - - -
plus.plus(n [, base]) ⇒ BigNumber
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the value of this BigNumber plus n.

-

The return value is always exact and unrounded.

-
-0.1 + 0.2                       // 0.30000000000000004
-x = new BigNumber(0.1)
-y = x.plus(0.2)                 // '0.3'
-BigNumber(0.7).plus(x).plus(y)  // '1'
-x.plus('0.1', 8)                // '0.225'
- - - -
precision.sd([z]) ⇒ number
-

- z: boolean|number: true, false, 0 - or 1 -

-

Returns the number of significant digits of the value of this BigNumber.

-

- If z is true or 1 then any trailing zeros of the - integer part of a number are counted as significant digits, otherwise they are not. -

-
-x = new BigNumber(1.234)
-x.precision()                   // 4
-y = new BigNumber(987000)
-y.sd()                          // 3
-y.sd(true)                      // 6
- - - -
round.round([dp [, rm]]) ⇒ BigNumber
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - rm to a maximum of dp decimal places. -

-

- if dp is omitted, or is null or undefined, the - return value is n rounded to a whole number.
- if rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - dp or rm values. -

-
-x = 1234.56
-Math.round(x)                             // 1235
-
-y = new BigNumber(x)
-y.round()                                 // '1235'
-y.round(1)                                // '1234.6'
-y.round(2)                                // '1234.56'
-y.round(10)                               // '1234.56'
-y.round(0, 1)                             // '1234'
-y.round(0, 6)                             // '1235'
-y.round(1, 1)                             // '1234.5'
-y.round(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
-y                                         // '1234.56'
- - - -
shift.shift(n) ⇒ BigNumber
-

- n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

-

- Returns a BigNumber whose value is the value of this BigNumber shifted n places. -

- The shift is of the decimal point, i.e. of powers of ten, and is to the left if n - is negative or to the right if n is positive. -

-

The return value is always exact and unrounded.

-
-x = new BigNumber(1.23)
-x.shift(3)                      // '1230'
-x.shift(-3)                     // '0.00123'
- - - -
squareRoot.sqrt() ⇒ BigNumber
-

- Returns a BigNumber whose value is the square root of the value of this BigNumber, - rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

-

- The return value will be correctly rounded, i.e. rounded as if the result was first calculated - to an infinite number of correct digits before rounding. -

-
-x = new BigNumber(16)
-x.squareRoot()                  // '4'
-y = new BigNumber(3)
-y.sqrt()                        // '1.73205080756887729353'
- - - -
times.times(n [, base]) ⇒ BigNumber
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the value of this BigNumber times n.

-

The return value is always exact and unrounded.

-
-0.6 * 3                         // 1.7999999999999998
-x = new BigNumber(0.6)
-y = x.times(3)                  // '1.8'
-BigNumber('7e+500').times(y)    // '1.26e+501'
-x.times('-a', 16)               // '-6'
- - - -
- toDigits.toDigits([sd [, rm]]) ⇒ BigNumber -
-

- sd: number: integer, 1 to 1e+9 inclusive.
- rm: number: integer, 0 to 8 inclusive. -

-

- Returns a BigNumber whose value is the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

-

- If sd is omitted or is null or undefined, the return - value will not be rounded.
- If rm is omitted or is null or undefined, - ROUNDING_MODE will be used. -

-

- See Errors for the treatment of other non-integer or out of range - sd or rm values. -

-
-BigNumber.config({ precision: 5, rounding: 4 })
-x = new BigNumber(9876.54321)
-
-x.toDigits()                          // '9876.5'
-x.toDigits(6)                         // '9876.54'
-x.toDigits(6, BigNumber.ROUND_UP)     // '9876.55'
-x.toDigits(2)                         // '9900'
-x.toDigits(2, 1)                      // '9800'
-x                                     // '9876.54321'
- - - -
- toExponential.toExponential([dp [, rm]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber in exponential notation rounded - using rounding mode rm to dp decimal places, i.e with one digit - before the decimal point and dp digits after it. -

-

- If the value of this BigNumber in exponential notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

-

- If dp is omitted, or is null or undefined, the number - of digits after the decimal point defaults to the minimum number of digits necessary to - represent the value exactly.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - dp or rm values. -

-
-x = 45.6
-y = new BigNumber(x)
-x.toExponential()               // '4.56e+1'
-y.toExponential()               // '4.56e+1'
-x.toExponential(0)              // '5e+1'
-y.toExponential(0)              // '5e+1'
-x.toExponential(1)              // '4.6e+1'
-y.toExponential(1)              // '4.6e+1'
-y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
-x.toExponential(3)              // '4.560e+1'
-y.toExponential(3)              // '4.560e+1'
- - - -
- toFixed.toFixed([dp [, rm]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm. -

-

- If the value of this BigNumber in normal notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

-

- Unlike Number.prototype.toFixed, which returns exponential notation if a number - is greater or equal to 1021, this method will always return normal - notation. -

-

- If dp is omitted or is null or undefined, the return - value will be unrounded and in normal notation. This is also unlike - Number.prototype.toFixed, which returns the value to zero decimal places.
- It is useful when fixed-point notation is required and the current - EXPONENTIAL_AT setting causes - toString to return exponential notation.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - dp or rm values. -

-
-x = 3.456
-y = new BigNumber(x)
-x.toFixed()                     // '3'
-y.toFixed()                     // '3.456'
-y.toFixed(0)                    // '3'
-x.toFixed(2)                    // '3.46'
-y.toFixed(2)                    // '3.46'
-y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
-x.toFixed(5)                    // '3.45600'
-y.toFixed(5)                    // '3.45600'
- - - -
- toFormat.toFormat([dp [, rm]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

-

- Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm, and formatted - according to the properties of the FORMAT object. -

-

- See the examples below for the properties of the - FORMAT object, their types and their usage. -

-

- If dp is omitted or is null or undefined, then the - return value is not rounded to a fixed number of decimal places.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - dp or rm values. -

-
-format = {
-    decimalSeparator: '.',
-    groupSeparator: ',',
-    groupSize: 3,
-    secondaryGroupSize: 0,
-    fractionGroupSeparator: ' ',
-    fractionGroupSize: 0
-}
-BigNumber.config({ FORMAT: format })
-
-x = new BigNumber('123456789.123456789')
-x.toFormat()                    // '123,456,789.123456789'
-x.toFormat(1)                   // '123,456,789.1'
-
-// If a reference to the object assigned to FORMAT has been retained,
-// the format properties can be changed directly
-format.groupSeparator = ' '
-format.fractionGroupSize = 5
-x.toFormat()                    // '123 456 789.12345 6789'
-
-BigNumber.config({
-    FORMAT: {
-        decimalSeparator = ',',
-        groupSeparator = '.',
-        groupSize = 3,
-        secondaryGroupSize = 2
-    }
-})
-
-x.toFormat(6)                   // '12.34.56.789,123'
- - - -
- toFraction.toFraction([max]) ⇒ [string, string] -
-

- max: number|string|BigNumber: integer >= 1 and < - Infinity -

-

- Returns a string array representing the value of this BigNumber as a simple fraction with an - integer numerator and an integer denominator. The denominator will be a positive non-zero - value less than or equal to max. -

-

- If a maximum denominator, max, is not specified, or is null or - undefined, the denominator will be the lowest value necessary to represent the - number exactly. -

-

- See Errors for the treatment of other non-integer or out of range - max values. -

-
-x = new BigNumber(1.75)
-x.toFraction()                  // '7, 4'
-
-pi = new BigNumber('3.14159265358')
-pi.toFraction()                 // '157079632679,50000000000'
-pi.toFraction(100000)           // '312689, 99532'
-pi.toFraction(10000)            // '355, 113'
-pi.toFraction(100)              // '311, 99'
-pi.toFraction(10)               // '22, 7'
-pi.toFraction(1)                // '3, 1'
- - - -
toJSON.toJSON() ⇒ string
-

As valueOf.

-
-x = new BigNumber('177.7e+457')
-y = new BigNumber(235.4325)
-z = new BigNumber('0.0098074')
-
-// Serialize an array of three BigNumbers
-str = JSON.stringify( [x, y, z] )
-// "["1.777e+459","235.4325","0.0098074"]"
-
-// Return an array of three BigNumbers
-JSON.parse(str, function (key, val) {
-    return key === '' ? val : new BigNumber(val)
-})
- - - -
toNumber.toNumber() ⇒ number
-

Returns the value of this BigNumber as a JavaScript number primitive.

-

- Type coercion with, for example, the unary plus operator will also work, except that a - BigNumber with the value minus zero will be converted to positive zero. -

-
-x = new BigNumber(456.789)
-x.toNumber()                    // 456.789
-+x                              // 456.789
-
-y = new BigNumber('45987349857634085409857349856430985')
-y.toNumber()                    // 4.598734985763409e+34
-
-z = new BigNumber(-0)
-1 / +z                          // Infinity
-1 / z.toNumber()                // -Infinity
- - - -
toPower.pow(n [, m]) ⇒ BigNumber
-

- n: number: integer, - -9007199254740991 to 9007199254740991 inclusive
- m: number|string|BigNumber -

-

- Returns a BigNumber whose value is the value of this BigNumber raised to the power - n, and optionally modulo a modulus m. -

-

- If n is negative the result is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

-

- If n is not an integer or is out of range: -

-

- If ERRORS is true a BigNumber Error is thrown,
- else if n is greater than 9007199254740991, it is interpreted as - Infinity;
- else if n is less than -9007199254740991, it is interpreted as - -Infinity;
- else if n is otherwise a number, it is truncated to an integer;
- else it is interpreted as NaN. -

-

- As the number of digits of the result of the power operation can grow so large so quickly, - e.g. 123.45610000 has over 50000 digits, the number of significant - digits calculated is limited to the value of the - POW_PRECISION setting (default value: - 100) unless a modulus m is specified. -

-

- Set POW_PRECISION to 0 for an - unlimited number of significant digits to be calculated (this will cause the method to slow - dramatically for larger exponents). -

-

- Negative exponents will be calculated to the number of decimal places specified by - DECIMAL_PLACES (but not to more than - POW_PRECISION significant digits). -

-

- If m is specified and the value of m, n and this - BigNumber are positive integers, then a fast modular exponentiation algorithm is used, - otherwise if any of the values is not a positive integer the operation will simply be - performed as x.toPower(n).modulo(m) with a - POW_PRECISION of 0. -

-
-Math.pow(0.7, 2)                // 0.48999999999999994
-x = new BigNumber(0.7)
-x.toPower(2)                    // '0.49'
-BigNumber(3).pow(-2)            // '0.11111111111111111111'
- - - -
- toPrecision.toPrecision([sd [, rm]]) ⇒ string -
-

- sd: number: integer, 1 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

-

- If sd is less than the number of digits necessary to represent the integer part - of the value in normal (fixed-point) notation, then exponential notation is used. -

-

- If sd is omitted, or is null or undefined, then the - return value is the same as n.toString().
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - sd or rm values. -

-
-x = 45.6
-y = new BigNumber(x)
-x.toPrecision()                 // '45.6'
-y.toPrecision()                 // '45.6'
-x.toPrecision(1)                // '5e+1'
-y.toPrecision(1)                // '5e+1'
-y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
-y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
-x.toPrecision(5)                // '45.600'
-y.toPrecision(5)                // '45.600'
- - - -
toString.toString([base]) ⇒ string
-

base: number: integer, 2 to 64 inclusive

-

- Returns a string representing the value of this BigNumber in the specified base, or base - 10 if base is omitted or is null or - undefined. -

-

- For bases above 10, values from 10 to 35 are - represented by a-z (as with Number.prototype.toString), - 36 to 61 by A-Z, and 62 and - 63 by $ and _ respectively. -

-

- If a base is specified the value is rounded according to the current - DECIMAL_PLACES - and ROUNDING_MODE configuration. -

-

- If a base is not specified, and this BigNumber has a positive - exponent that is equal to or greater than the positive component of the - current EXPONENTIAL_AT setting, - or a negative exponent equal to or less than the negative component of the - setting, then exponential notation is returned. -

-

If base is null or undefined it is ignored.

-

- See Errors for the treatment of other non-integer or out of range - base values. -

-
-x = new BigNumber(750000)
-x.toString()                    // '750000'
-BigNumber.config({ EXPONENTIAL_AT: 5 })
-x.toString()                    // '7.5e+5'
-
-y = new BigNumber(362.875)
-y.toString(2)                   // '101101010.111'
-y.toString(9)                   // '442.77777777777777777778'
-y.toString(32)                  // 'ba.s'
-
-BigNumber.config({ DECIMAL_PLACES: 4 });
-z = new BigNumber('1.23456789')
-z.toString()                    // '1.23456789'
-z.toString(10)                  // '1.2346'
- - - -
truncated.trunc() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber truncated to a whole number. -

-
-x = new BigNumber(123.456)
-x.truncated()                   // '123'
-y = new BigNumber(-12.3)
-y.trunc()                       // '-12'
- - - -
valueOf.valueOf() ⇒ string
-

- As toString, but does not accept a base argument and includes the minus sign - for negative zero. -

-
-x = new BigNumber('-0')
-x.toString()                    // '0'
-x.valueOf()                     // '-0'
-y = new BigNumber('1.777e+457')
-y.valueOf()                     // '1.777e+457'
- - - -

Properties

-

A BigNumber is an object with three properties:

- - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescriptionTypeValue
ccoefficient*number[] Array of base 1e14 numbers
eexponentnumberInteger, -1000000000 to 1000000000 inclusive
ssignnumber-1 or 1
-

*significand

-

The value of any of the three properties may also be null.

-

- From v2.0.0 of this library, the value of the coefficient of a BigNumber is stored in a - normalised base 100000000000000 floating point format, as opposed to the base - 10 format used in v1.x.x -

-

- This change means the properties of a BigNumber are now best considered to be read-only. - Previously it was acceptable to change the exponent of a BigNumber by writing to its exponent - property directly, but this is no longer recommended as the number of digits in the first - element of the coefficient array is dependent on the exponent, so the coefficient would also - need to be altered. -

-

- Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are - not necessarily preserved. -

-
x = new BigNumber(0.123)              // '0.123'
-x.toExponential()                     // '1.23e-1'
-x.c                                   // '1,2,3'
-x.e                                   // -1
-x.s                                   // 1
-
-y = new Number(-123.4567000e+2)       // '-12345.67'
-y.toExponential()                     // '-1.234567e+4'
-z = new BigNumber('-123.4567000e+2')  // '-12345.67'
-z.toExponential()                     // '-1.234567e+4'
-z.c                                   // '1,2,3,4,5,6,7'
-z.e                                   // 4
-z.s                                   // -1
- - - -

Zero, NaN and Infinity

-

- The table below shows how ±0, NaN and - ±Infinity are stored. -

- - - - - - - - - - - - - - - - - - - - - - - - - -
ces
±0[0]0±1
NaNnullnullnull
±Infinitynullnull±1
-
-x = new Number(-0)              // 0
-1 / x == -Infinity              // true
-
-y = new BigNumber(-0)           // '0'
-y.c                             // '0' ( [0].toString() )
-y.e                             // 0
-y.s                             // -1
- - - -

Errors

-

- The errors that are thrown are generic Error objects with name - BigNumber Error. -

-

- The table below shows the errors that may be thrown if ERRORS is - true, and the action taken if ERRORS is false. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Method(s)ERRORS: true
Throw BigNumber Error
ERRORS: false
Action on invalid argument
- - BigNumber
- comparedTo
- dividedBy
- dividedToIntegerBy
- equals
- greaterThan
- greaterThanOrEqualTo
- lessThan
- lessThanOrEqualTo
- minus
- modulo
- plus
- times -
number type has more than
15 significant digits
Accept.
not a base... numberSubstitute NaN.
base not an integerTruncate to integer.
Ignore if not a number.
base out of rangeIgnore.
not a number*Substitute NaN.
anothernot an objectIgnore.
configDECIMAL_PLACES not an integerTruncate to integer.
Ignore if not a number.
DECIMAL_PLACES out of rangeIgnore.
ROUNDING_MODE not an integerTruncate to integer.
Ignore if not a number.
ROUNDING_MODE out of rangeIgnore.
EXPONENTIAL_AT not an integer
or not [integer, integer]
Truncate to integer(s).
Ignore if not number(s).
EXPONENTIAL_AT out of range
or not [negative, positive]
Ignore.
RANGE not an integer
or not [integer, integer]
Truncate to integer(s).
Ignore if not number(s).
RANGE cannot be zeroIgnore.
RANGE out of range
or not [negative, positive]
Ignore.
ERRORS not a boolean
or binary digit
Ignore.
CRYPTO not a boolean
or binary digit
Ignore.
CRYPTO crypto unavailableIgnore.
MODULO_MODE not an integerTruncate to integer.
Ignore if not a number.
MODULO_MODE out of rangeIgnore.
POW_PRECISION not an integerTruncate to integer.
Ignore if not a number.
POW_PRECISION out of rangeIgnore.
FORMAT not an objectIgnore.
precisionargument not a boolean
or binary digit
Ignore.
rounddecimal places not an integerTruncate to integer.
Ignore if not a number.
decimal places out of rangeIgnore.
rounding mode not an integerTruncate to integer.
Ignore if not a number.
rounding mode out of rangeIgnore.
shiftargument not an integerTruncate to integer.
Ignore if not a number.
argument out of rangeSubstitute ±Infinity. -
- toExponential
- toFixed
- toFormat -
decimal places not an integerTruncate to integer.
Ignore if not a number.
decimal places out of rangeIgnore.
rounding mode not an integerTruncate to integer.
Ignore if not a number.
rounding mode out of rangeIgnore.
toFractionmax denominator not an integerTruncate to integer.
Ignore if not a number.
max denominator out of rangeIgnore.
- toDigits
- toPrecision -
precision not an integerTruncate to integer.
Ignore if not a number.
precision out of rangeIgnore.
rounding mode not an integerTruncate to integer.
Ignore if not a number.
rounding mode out of rangeIgnore.
toPowerexponent not an integerTruncate to integer.
Substitute NaN if not a number.
exponent out of rangeSubstitute ±Infinity. -
toStringbase not an integerTruncate to integer.
Ignore if not a number.
base out of rangeIgnore.
-

*No error is thrown if the value is NaN or 'NaN'.

-

- The message of a BigNumber Error will also contain the name of the method from which - the error originated. -

-

To determine if an exception is a BigNumber Error:

-
-try {
-    // ...
-} catch (e) {
-    if ( e instanceof Error && e.name == 'BigNumber Error' ) {
-        // ...
-    }
-}
- - - -

FAQ

- -
Why are trailing fractional zeros removed from BigNumbers?
-

- Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the - precision of a value. This can be useful but the results of arithmetic operations can be - misleading. -

-
-x = new BigDecimal("1.0")
-y = new BigDecimal("1.1000")
-z = x.add(y)                      // 2.1000
-
-x = new BigDecimal("1.20")
-y = new BigDecimal("3.45000")
-z = x.multiply(y)                 // 4.1400000
-

- To specify the precision of a value is to specify that the value lies - within a certain range. -

-

- In the first example, x has a value of 1.0. The trailing zero shows - the precision of the value, implying that it is in the range 0.95 to - 1.05. Similarly, the precision indicated by the trailing zeros of y - indicates that the value is in the range 1.09995 to 1.10005. -

-

- If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, - and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the - range of the result of the addition implied by the precision of its operands is - 2.04995 to 2.15005. -

-

- The result given by BigDecimal of 2.1000 however, indicates that the value is in - the range 2.09995 to 2.10005 and therefore the precision implied by - its trailing zeros may be misleading. -

-

- In the second example, the true range is 4.122744 to 4.157256 yet - the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 - to 4.14000005. Again, the precision implied by the trailing zeros may be - misleading. -

-

- This library, like binary floating point and most calculators, does not retain trailing - fractional zeros. Instead, the toExponential, toFixed and - toPrecision methods enable trailing zeros to be added if and when required.
-

-
- - - diff --git a/node_modules/bignumber.js/package.json b/node_modules/bignumber.js/package.json deleted file mode 100644 index 68e1760..0000000 --- a/node_modules/bignumber.js/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "bignumber.js@^2.1.4", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "bignumber.js@>=2.1.4 <3.0.0", - "_id": "bignumber.js@2.4.0", - "_inCache": true, - "_installable": true, - "_location": "/bignumber.js", - "_nodeVersion": "5.7.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/bignumber.js-2.4.0.tgz_1468524978236_0.18423767434433103" - }, - "_npmUser": { - "email": "M8ch88l@gmail.com", - "name": "mikemcl" - }, - "_npmVersion": "3.8.1", - "_phantomChildren": {}, - "_requested": { - "name": "bignumber.js", - "raw": "bignumber.js@^2.1.4", - "rawSpec": "^2.1.4", - "scope": null, - "spec": ">=2.1.4 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc" - ], - "_resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", - "_shasum": "838a992da9f9d737e0f4b2db0be62bb09dd0c5e8", - "_shrinkwrap": null, - "_spec": "bignumber.js@^2.1.4", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "email": "M8ch88l@gmail.com", - "name": "Michael Mclaughlin" - }, - "bugs": { - "url": "https://github.com/MikeMcl/bignumber.js/issues" - }, - "dependencies": {}, - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "838a992da9f9d737e0f4b2db0be62bb09dd0c5e8", - "tarball": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz" - }, - "engines": { - "node": "*" - }, - "gitHead": "4bc0fe696c65bf0647db9d9493043d284c383a47", - "homepage": "https://github.com/MikeMcl/bignumber.js#readme", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "main": "bignumber.js", - "maintainers": [ - { - "email": "M8ch88l@gmail.com", - "name": "mikemcl" - } - ], - "name": "bignumber.js", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/MikeMcl/bignumber.js.git" - }, - "scripts": { - "build": "uglifyjs bignumber.js --source-map bignumber.js.map -c -m -o bignumber.min.js --preamble \"/* bignumber.js v2.4.0 https://github.com/MikeMcl/bignumber.js/LICENCE */\"", - "test": "node ./test/every-test.js" - }, - "version": "2.4.0" -} diff --git a/node_modules/bindings/README.md b/node_modules/bindings/README.md deleted file mode 100644 index 585cf51..0000000 --- a/node_modules/bindings/README.md +++ /dev/null @@ -1,97 +0,0 @@ -node-bindings -============= -### Helper module for loading your native module's .node file - -This is a helper module for authors of Node.js native addon modules. -It is basically the "swiss army knife" of `require()`ing your native module's -`.node` file. - -Throughout the course of Node's native addon history, addons have ended up being -compiled in a variety of different places, depending on which build tool and which -version of node was used. To make matters worse, now the _gyp_ build tool can -produce either a _Release_ or _Debug_ build, each being built into different -locations. - -This module checks _all_ the possible locations that a native addon would be built -at, and returns the first one that loads successfully. - - -Installation ------------- - -Install with `npm`: - -``` bash -$ npm install bindings -``` - -Or add it to the `"dependencies"` section of your _package.json_ file. - - -Example -------- - -`require()`ing the proper bindings file for the current node version, platform -and architecture is as simple as: - -``` js -var bindings = require('bindings')('binding.node') - -// Use your bindings defined in your C files -bindings.your_c_function() -``` - - -Nice Error Output ------------------ - -When the `.node` file could not be loaded, `node-bindings` throws an Error with -a nice error message telling you exactly what was tried. You can also check the -`err.tries` Array property. - -``` -Error: Could not load the bindings file. Tried: - → /Users/nrajlich/ref/build/binding.node - → /Users/nrajlich/ref/build/Debug/binding.node - → /Users/nrajlich/ref/build/Release/binding.node - → /Users/nrajlich/ref/out/Debug/binding.node - → /Users/nrajlich/ref/Debug/binding.node - → /Users/nrajlich/ref/out/Release/binding.node - → /Users/nrajlich/ref/Release/binding.node - → /Users/nrajlich/ref/build/default/binding.node - → /Users/nrajlich/ref/compiled/0.8.2/darwin/x64/binding.node - at bindings (/Users/nrajlich/ref/node_modules/bindings/bindings.js:84:13) - at Object. (/Users/nrajlich/ref/lib/ref.js:5:47) - at Module._compile (module.js:449:26) - at Object.Module._extensions..js (module.js:467:10) - at Module.load (module.js:356:32) - at Function.Module._load (module.js:312:12) - ... -``` - - -License -------- - -(The MIT License) - -Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/bindings/bindings.js b/node_modules/bindings/bindings.js deleted file mode 100644 index 93dcf85..0000000 --- a/node_modules/bindings/bindings.js +++ /dev/null @@ -1,166 +0,0 @@ - -/** - * Module dependencies. - */ - -var fs = require('fs') - , path = require('path') - , join = path.join - , dirname = path.dirname - , exists = fs.existsSync || path.existsSync - , defaults = { - arrow: process.env.NODE_BINDINGS_ARROW || ' → ' - , compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled' - , platform: process.platform - , arch: process.arch - , version: process.versions.node - , bindings: 'bindings.node' - , try: [ - // node-gyp's linked version in the "build" dir - [ 'module_root', 'build', 'bindings' ] - // node-waf and gyp_addon (a.k.a node-gyp) - , [ 'module_root', 'build', 'Debug', 'bindings' ] - , [ 'module_root', 'build', 'Release', 'bindings' ] - // Debug files, for development (legacy behavior, remove for node v0.9) - , [ 'module_root', 'out', 'Debug', 'bindings' ] - , [ 'module_root', 'Debug', 'bindings' ] - // Release files, but manually compiled (legacy behavior, remove for node v0.9) - , [ 'module_root', 'out', 'Release', 'bindings' ] - , [ 'module_root', 'Release', 'bindings' ] - // Legacy from node-waf, node <= 0.4.x - , [ 'module_root', 'build', 'default', 'bindings' ] - // Production "Release" buildtype binary (meh...) - , [ 'module_root', 'compiled', 'version', 'platform', 'arch', 'bindings' ] - ] - } - -/** - * The main `bindings()` function loads the compiled bindings for a given module. - * It uses V8's Error API to determine the parent filename that this function is - * being invoked from, which is then used to find the root directory. - */ - -function bindings (opts) { - - // Argument surgery - if (typeof opts == 'string') { - opts = { bindings: opts } - } else if (!opts) { - opts = {} - } - opts.__proto__ = defaults - - // Get the module root - if (!opts.module_root) { - opts.module_root = exports.getRoot(exports.getFileName()) - } - - // Ensure the given bindings name ends with .node - if (path.extname(opts.bindings) != '.node') { - opts.bindings += '.node' - } - - var tries = [] - , i = 0 - , l = opts.try.length - , n - , b - , err - - for (; i=1.2.1 <2.0.0", - "_id": "bindings@1.2.1", - "_inCache": true, - "_installable": true, - "_location": "/bindings", - "_npmUser": { - "email": "nathan@tootallnate.net", - "name": "tootallnate" - }, - "_npmVersion": "1.4.14", - "_phantomChildren": {}, - "_requested": { - "name": "bindings", - "raw": "bindings@^1.2.1", - "rawSpec": "^1.2.1", - "scope": null, - "spec": ">=1.2.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/secp256k1" - ], - "_resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", - "_shasum": "14ad6113812d2d37d72e67b4cacb4bb726505f11", - "_shrinkwrap": null, - "_spec": "bindings@^1.2.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/secp256k1", - "author": { - "email": "nathan@tootallnate.net", - "name": "Nathan Rajlich", - "url": "http://tootallnate.net" - }, - "bugs": { - "url": "https://github.com/TooTallNate/node-bindings/issues" - }, - "dependencies": {}, - "description": "Helper module for loading your native module's .node file", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "14ad6113812d2d37d72e67b4cacb4bb726505f11", - "tarball": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz" - }, - "gitHead": "e404152ee27f8478ccbc7122ee051246e8e5ec02", - "homepage": "https://github.com/TooTallNate/node-bindings", - "keywords": [ - "native", - "addon", - "bindings", - "gyp", - "waf", - "c", - "c++" - ], - "license": "MIT", - "main": "./bindings.js", - "maintainers": [ - { - "email": "nathan@tootallnate.net", - "name": "TooTallNate" - }, - { - "email": "nathan@tootallnate.net", - "name": "tootallnate" - } - ], - "name": "bindings", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/node-bindings.git" - }, - "scripts": {}, - "version": "1.2.1" -} diff --git a/node_modules/bip39/.npmignore b/node_modules/bip39/.npmignore deleted file mode 100644 index 74022a3..0000000 --- a/node_modules/bip39/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -bip39.js diff --git a/node_modules/bip39/.travis.yml b/node_modules/bip39/.travis.yml deleted file mode 100644 index 84af85e..0000000 --- a/node_modules/bip39/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -before_install: - - "npm install npm -g" -node_js: - - "0.11" - - "0.10" diff --git a/node_modules/bip39/LICENSE b/node_modules/bip39/LICENSE deleted file mode 100644 index 5e22cbe..0000000 --- a/node_modules/bip39/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2014, Wei Lu and Daniel Cousens - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/bip39/README.md b/node_modules/bip39/README.md deleted file mode 100644 index 730dcb7..0000000 --- a/node_modules/bip39/README.md +++ /dev/null @@ -1,46 +0,0 @@ -BIP39 -===== - -[![Build Status](https://travis-ci.org/bitcoinjs/bip39.png?branch=master)](https://travis-ci.org/bitcoinjs/bip39) -[![Version](http://img.shields.io/npm/v/bip39.svg)](https://www.npmjs.org/package/bip39) - -JavaScript implementation of [Bitcoin BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki): Mnemonic code for generating deterministic keys - -## Usage - -`npm install bip39` - -```javascript -var bip39 = require('bip39') - -var mnemonic = bip39.entropyToMnemonic('133755ff') // hex input, defaults to BIP39 English word list -// 'basket rival lemon' - - -bip39.mnemonicToEntropy(mnemonic) // hex input, defaults to BIP39 English word list -// '133755ff' - -// Generate a random mnemonic using crypto.randomBytes -mnemonic = bip39.generateMnemonic() // strength defaults to 128 bits -// 'seed sock milk update focus rotate barely fade car face mechanic mercy' - -bip39.mnemonicToSeedHex('basket actual') -// '5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f' - -bip39.mnemonicToSeed('basket actual') -// - -bip39.validateMnemonic(mnemonic) -// true - -bip39.validateMnemonic('basket actual') -// false -``` - -### Browser - -Compile `bip39.js` with the following command: - - $ npm run compile - -After loading this file in your browser, you will be able to use the global `bip39` object. diff --git a/node_modules/bip39/index.js b/node_modules/bip39/index.js deleted file mode 100644 index 820ff6e..0000000 --- a/node_modules/bip39/index.js +++ /dev/null @@ -1,129 +0,0 @@ -var assert = require('assert') -var createHash = require('create-hash') -var pbkdf2 = require('pbkdf2').pbkdf2Sync -var randomBytes = require('randombytes') -var unorm = require('unorm') - -var DEFAULT_WORDLIST = require('./wordlists/en.json') - -function mnemonicToSeed(mnemonic, password) { - var mnemonicBuffer = new Buffer(mnemonic, 'utf8') - var saltBuffer = new Buffer(salt(password), 'utf8') - - return pbkdf2(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512') -} - -function mnemonicToSeedHex(mnemonic, password) { - return mnemonicToSeed(mnemonic, password).toString('hex') -} - -function mnemonicToEntropy(mnemonic, wordlist) { - wordlist = wordlist || DEFAULT_WORDLIST - - var words = mnemonic.split(' ') - assert(words.length % 3 === 0, 'Invalid mnemonic') - - var belongToList = words.every(function(word) { - return wordlist.indexOf(word) > -1 - }) - - assert(belongToList, 'Invalid mnemonic') - - // convert word indices to 11 bit binary strings - var bits = words.map(function(word) { - var index = wordlist.indexOf(word) - return lpad(index.toString(2), '0', 11) - }).join('') - - // split the binary string into ENT/CS - var dividerIndex = Math.floor(bits.length / 33) * 32 - var entropy = bits.slice(0, dividerIndex) - var checksum = bits.slice(dividerIndex) - - // calculate the checksum and compare - var entropyBytes = entropy.match(/(.{1,8})/g).map(function(bin) { - return parseInt(bin, 2) - }) - var entropyBuffer = new Buffer(entropyBytes) - var newChecksum = checksumBits(entropyBuffer) - - assert(newChecksum === checksum, 'Invalid mnemonic checksum') - - return entropyBuffer.toString('hex') -} - -function entropyToMnemonic(entropy, wordlist) { - wordlist = wordlist || DEFAULT_WORDLIST - - var entropyBuffer = new Buffer(entropy, 'hex') - var entropyBits = bytesToBinary([].slice.call(entropyBuffer)) - var checksum = checksumBits(entropyBuffer) - - var bits = entropyBits + checksum - var chunks = bits.match(/(.{1,11})/g) - - var words = chunks.map(function(binary) { - var index = parseInt(binary, 2) - - return wordlist[index] - }) - - return words.join(' ') -} - -function generateMnemonic(strength, rng, wordlist) { - strength = strength || 128 - rng = rng || randomBytes - - var hex = rng(strength / 8).toString('hex') - return entropyToMnemonic(hex, wordlist) -} - -function validateMnemonic(mnemonic, wordlist) { - try { - mnemonicToEntropy(mnemonic, wordlist) - } catch (e) { - return false - } - - return true -} - -function checksumBits(entropyBuffer) { - var hash = createHash('sha256').update(entropyBuffer).digest() - - // Calculated constants from BIP39 - var ENT = entropyBuffer.length * 8 - var CS = ENT / 32 - - return bytesToBinary([].slice.call(hash)).slice(0, CS) -} - -function salt(password) { - return 'mnemonic' + (unorm.nfkd(password) || '') // Use unorm until String.prototype.normalize gets better browser support -} - -//=========== helper methods from bitcoinjs-lib ======== - -function bytesToBinary(bytes) { - return bytes.map(function(x) { - return lpad(x.toString(2), '0', 8) - }).join(''); -} - -function lpad(str, padString, length) { - while (str.length < length) str = padString + str; - return str; -} - -module.exports = { - mnemonicToSeed: mnemonicToSeed, - mnemonicToSeedHex: mnemonicToSeedHex, - mnemonicToEntropy: mnemonicToEntropy, - entropyToMnemonic: entropyToMnemonic, - generateMnemonic: generateMnemonic, - validateMnemonic: validateMnemonic, - wordlists: { - EN: DEFAULT_WORDLIST - } -} diff --git a/node_modules/bip39/package.json b/node_modules/bip39/package.json deleted file mode 100644 index 6478493..0000000 --- a/node_modules/bip39/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "bip39@^2.2.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "bip39@>=2.2.0 <3.0.0", - "_id": "bip39@2.2.0", - "_inCache": true, - "_installable": true, - "_location": "/bip39", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "luwei.here@gmail.com", - "name": "weilu" - }, - "_npmVersion": "2.13.2", - "_phantomChildren": {}, - "_requested": { - "name": "bip39", - "raw": "bip39@^2.2.0", - "rawSpec": "^2.2.0", - "scope": null, - "spec": ">=2.2.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc" - ], - "_resolved": "https://registry.npmjs.org/bip39/-/bip39-2.2.0.tgz", - "_shasum": "40e73f70674c267f148cdbf8374f2a50be166b0d", - "_shrinkwrap": null, - "_spec": "bip39@^2.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "name": "Wei Lu" - }, - "bugs": { - "url": "https://github.com/weilu/bip39/issues" - }, - "contributors": [ - { - "email": "email@dcousens.com", - "name": "Daniel Cousens", - "url": "http://dcousens.com" - } - ], - "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.0", - "randombytes": "^2.0.1", - "unorm": "^1.3.3" - }, - "description": "Bitcoin BIP39: Mnemonic code for generating deterministic keys", - "devDependencies": { - "browserify": "^9.0.0", - "mocha": "^2.2.0", - "mock-require": "^1.0.5" - }, - "directories": {}, - "dist": { - "shasum": "40e73f70674c267f148cdbf8374f2a50be166b0d", - "tarball": "https://registry.npmjs.org/bip39/-/bip39-2.2.0.tgz" - }, - "gitHead": "79f873b7ad1e1132ea86cc39d5593486068cb3ec", - "homepage": "https://github.com/weilu/bip39#readme", - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "luwei.here@gmail.com", - "name": "weilu" - }, - { - "email": "email@dcousens.com", - "name": "dcousens" - } - ], - "name": "bip39", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/weilu/bip39.git" - }, - "scripts": { - "compile": "browserify index.js -s bip39 > bip39.js", - "test": "mocha --reporter list test/*.js" - }, - "version": "2.2.0" -} diff --git a/node_modules/bip39/test/index.js b/node_modules/bip39/test/index.js deleted file mode 100644 index 5ad117a..0000000 --- a/node_modules/bip39/test/index.js +++ /dev/null @@ -1,182 +0,0 @@ -var assert = require('assert') -var mock = require('mock-require') - -mock('randombytes', function(size) { - return new Buffer('qwertyuiopasdfghjklzxcvbnm[];,./'.slice(0, size)) -}) - -var BIP39 = require('../index.js') - -var wordlists = { - english: require('../wordlists/en.json'), - custom: require('./wordlist.json') -} - -var vectors = require('./vectors.json') - -describe('BIP39', function() { - describe('mnemonicToSeedHex', function() { - this.timeout(20000) - - vectors.english.forEach(function(v, i) { - it('works for tests vector ' + i, function() { - assert.equal(BIP39.mnemonicToSeedHex(v[1], 'TREZOR'), v[2]) - }) - }) - }) - - describe('mnemonicToEntropy', function() { - vectors.english.forEach(function(v, i) { - it('works for tests vector ' + i, function() { - assert.equal(BIP39.mnemonicToEntropy(v[1]), v[0]) - }) - }) - - vectors.custom.forEach(function(v, i) { - it('works for custom test vector ' + i, function() { - assert.equal(BIP39.mnemonicToEntropy(v[1], wordlists.custom), v[0]) - }) - }) - }) - - describe('entropyToMnemonic', function() { - vectors.english.forEach(function(v, i) { - it('works for tests vector ' + i, function() { - assert.equal(BIP39.entropyToMnemonic(v[0]), v[1]) - }) - }) - - vectors.custom.forEach(function(v, i) { - it('works for custom test vector ' + i, function() { - assert.equal(BIP39.entropyToMnemonic(v[0], wordlists.custom), v[1]) - }) - }) - }) - - describe('generateMnemonic', function() { - vectors.english.forEach(function(v, i) { - it('works for tests vector ' + i, function() { - function rng() { return new Buffer(v[0], 'hex') } - - assert.equal(BIP39.generateMnemonic(undefined, rng), v[1]) - }) - }) - - it('can vary generated entropy bit length', function() { - var mnemonic = BIP39.generateMnemonic(96) - var words = mnemonic.split(' ') - - assert.equal(words.length, 9) - }) - - it('defaults to randombytes for the RNG', function() { - assert.equal(BIP39.generateMnemonic(32), 'imitate robot frequent') - }) - - it('allows a custom RNG to be used', function() { - var rng = function(size) { - var buffer = new Buffer(size) - buffer.fill(4) // guaranteed random - return buffer - } - - var mnemonic = BIP39.generateMnemonic(64, rng) - assert.equal(mnemonic, 'advice cage absurd amount doctor act') - }) - - it('adheres to a custom wordlist', function() { - var rng = function(size) { - var buffer = new Buffer(size) - buffer.fill(4) // guaranteed random - return buffer - } - - var mnemonic = BIP39.generateMnemonic(64, rng, wordlists.custom) - assert.equal(mnemonic, 'adv1c3 cag3 ab5urd am0unt d0ct0r act') - }) - }) - - describe('validateMnemonic', function() { - vectors.english.forEach(function(v, i) { - - it('passes check ' + i, function() { - assert(BIP39.validateMnemonic(v[1])) - }) - }) - - describe('with a custom wordlist', function() { - vectors.custom.forEach(function(v, i) { - - it('passes custom check ' + i, function() { - assert(BIP39.validateMnemonic(v[1], wordlists.custom)) - }) - }) - }) - - it('fails for mnemonics of wrong length', function() { - assert(!BIP39.validateMnemonic('sleep kitten')) - assert(!BIP39.validateMnemonic('sleep kitten sleep kitten sleep kitten')) - }) - - it('fails for mnemonics that contains words not from the word list', function() { - assert(!BIP39.validateMnemonic("turtle front uncle idea crush write shrug there lottery flower risky shell")) - }) - - it('fails for mnemonics of invalid checksum', function() { - assert(!BIP39.validateMnemonic('sleep kitten sleep kitten sleep kitten sleep kitten sleep kitten sleep kitten')) - }) - }) - - describe('utf8 passwords', function() { - vectors.japanese.forEach(function(v) { - it ('creates the correct seed', function() { - var utf8Password = "㍍ガバヴァぱばぐゞちぢ十人十色" - assert.equal(BIP39.mnemonicToSeedHex(v[1], utf8Password), v[2]) - }) - - it ('works with already normalized password', function() { - var normalizedPassword = "メートルガバヴァぱばぐゞちぢ十人十色" - assert.equal(BIP39.mnemonicToSeedHex(v[1], normalizedPassword), v[2]) - }) - }) - }) - - describe('Examples in readme', function() { - var bip39 = BIP39 - - var mnemonic = bip39.entropyToMnemonic('133755ff') // hex input, defaults to BIP39 English word list - // 'basket rival lemon' - assert.ok((/^\w+ \w+ \w+$/).test(mnemonic)) - - var temp = bip39.mnemonicToEntropy(mnemonic) // hex input, defaults to BIP39 English word list - // '133755ff' - assert.equal(temp, '133755ff') - - // Generate a random mnemonic using crypto.randomBytes - mnemonic = bip39.generateMnemonic() // strength defaults to 128 bits - //'bench maximum balance appear cousin negative muscle inform enjoy chief vocal hello' - assert.ok(/^(\w+ ){11}\w+$/.test(mnemonic)) - - var str = bip39.mnemonicToSeedHex('basket actual') - //'5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f' - assert.equal(str, '5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f') - - var buff = bip39.mnemonicToSeed('basket actual') - var fiveC = 5*16+12 - assert.equal(buff[0], fiveC) - // - - var bool = bip39.validateMnemonic(mnemonic) - // true - assert.ok(bool) - - bool = bip39.validateMnemonic('basket actual') - // false - assert.ok(! bool) - }) - - it('exposes standard wordlists', function () { - assert(BIP39.wordlists.EN) - assert.equal(BIP39.wordlists.EN.length, 2048) - }) -}) diff --git a/node_modules/bip39/test/vectors.json b/node_modules/bip39/test/vectors.json deleted file mode 100644 index 052b638..0000000 --- a/node_modules/bip39/test/vectors.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "english": [ - [ - "00000000000000000000000000000000", - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", - "c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04" - ], - [ - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", - "legal winner thank year wave sausage worth useful legal winner thank yellow", - "2e8905819b8723fe2c1d161860e5ee1830318dbf49a83bd451cfb8440c28bd6fa457fe1296106559a3c80937a1c1069be3a3a5bd381ee6260e8d9739fce1f607" - ], - [ - "80808080808080808080808080808080", - "letter advice cage absurd amount doctor acoustic avoid letter advice cage above", - "d71de856f81a8acc65e6fc851a38d4d7ec216fd0796d0a6827a3ad6ed5511a30fa280f12eb2e47ed2ac03b5c462a0358d18d69fe4f985ec81778c1b370b652a8" - ], - [ - "ffffffffffffffffffffffffffffffff", - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong", - "ac27495480225222079d7be181583751e86f571027b0497b5b5d11218e0a8a13332572917f0f8e5a589620c6f15b11c61dee327651a14c34e18231052e48c069" - ], - [ - "000000000000000000000000000000000000000000000000", - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent", - "035895f2f481b1b0f01fcf8c289c794660b289981a78f8106447707fdd9666ca06da5a9a565181599b79f53b844d8a71dd9f439c52a3d7b3e8a79c906ac845fa" - ], - [ - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", - "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will", - "f2b94508732bcbacbcc020faefecfc89feafa6649a5491b8c952cede496c214a0c7b3c392d168748f2d4a612bada0753b52a1c7ac53c1e93abd5c6320b9e95dd" - ], - [ - "808080808080808080808080808080808080808080808080", - "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always", - "107d7c02a5aa6f38c58083ff74f04c607c2d2c0ecc55501dadd72d025b751bc27fe913ffb796f841c49b1d33b610cf0e91d3aa239027f5e99fe4ce9e5088cd65" - ], - [ - "ffffffffffffffffffffffffffffffffffffffffffffffff", - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when", - "0cd6e5d827bb62eb8fc1e262254223817fd068a74b5b449cc2f667c3f1f985a76379b43348d952e2265b4cd129090758b3e3c2c49103b5051aac2eaeb890a528" - ], - [ - "0000000000000000000000000000000000000000000000000000000000000000", - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art", - "bda85446c68413707090a52022edd26a1c9462295029f2e60cd7c4f2bbd3097170af7a4d73245cafa9c3cca8d561a7c3de6f5d4a10be8ed2a5e608d68f92fcc8" - ], - [ - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", - "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title", - "bc09fca1804f7e69da93c2f2028eb238c227f2e9dda30cd63699232578480a4021b146ad717fbb7e451ce9eb835f43620bf5c514db0f8add49f5d121449d3e87" - ], - [ - "8080808080808080808080808080808080808080808080808080808080808080", - "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic bless", - "c0c519bd0e91a2ed54357d9d1ebef6f5af218a153624cf4f2da911a0ed8f7a09e2ef61af0aca007096df430022f7a2b6fb91661a9589097069720d015e4e982f" - ], - [ - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo vote", - "dd48c104698c30cfe2b6142103248622fb7bb0ff692eebb00089b32d22484e1613912f0a5b694407be899ffd31ed3992c456cdf60f5d4564b8ba3f05a69890ad" - ], - [ - "77c2b00716cec7213839159e404db50d", - "jelly better achieve collect unaware mountain thought cargo oxygen act hood bridge", - "b5b6d0127db1a9d2226af0c3346031d77af31e918dba64287a1b44b8ebf63cdd52676f672a290aae502472cf2d602c051f3e6f18055e84e4c43897fc4e51a6ff" - ], - [ - "b63a9c59a6e641f288ebc103017f1da9f8290b3da6bdef7b", - "renew stay biology evidence goat welcome casual join adapt armor shuffle fault little machine walk stumble urge swap", - "9248d83e06f4cd98debf5b6f010542760df925ce46cf38a1bdb4e4de7d21f5c39366941c69e1bdbf2966e0f6e6dbece898a0e2f0a4c2b3e640953dfe8b7bbdc5" - ], - [ - "3e141609b97933b66a060dcddc71fad1d91677db872031e85f4c015c5e7e8982", - "dignity pass list indicate nasty swamp pool script soccer toe leaf photo multiply desk host tomato cradle drill spread actor shine dismiss champion exotic", - "ff7f3184df8696d8bef94b6c03114dbee0ef89ff938712301d27ed8336ca89ef9635da20af07d4175f2bf5f3de130f39c9d9e8dd0472489c19b1a020a940da67" - ], - [ - "0460ef47585604c5660618db2e6a7e7f", - "afford alter spike radar gate glance object seek swamp infant panel yellow", - "65f93a9f36b6c85cbe634ffc1f99f2b82cbb10b31edc7f087b4f6cb9e976e9faf76ff41f8f27c99afdf38f7a303ba1136ee48a4c1e7fcd3dba7aa876113a36e4" - ], - [ - "72f60ebac5dd8add8d2a25a797102c3ce21bc029c200076f", - "indicate race push merry suffer human cruise dwarf pole review arch keep canvas theme poem divorce alter left", - "3bbf9daa0dfad8229786ace5ddb4e00fa98a044ae4c4975ffd5e094dba9e0bb289349dbe2091761f30f382d4e35c4a670ee8ab50758d2c55881be69e327117ba" - ], - [ - "2c85efc7f24ee4573d2b81a6ec66cee209b2dcbd09d8eddc51e0215b0b68e416", - "clutch control vehicle tonight unusual clog visa ice plunge glimpse recipe series open hour vintage deposit universe tip job dress radar refuse motion taste", - "fe908f96f46668b2d5b37d82f558c77ed0d69dd0e7e043a5b0511c48c2f1064694a956f86360c93dd04052a8899497ce9e985ebe0c8c52b955e6ae86d4ff4449" - ], - [ - "eaebabb2383351fd31d703840b32e9e2", - "turtle front uncle idea crush write shrug there lottery flower risk shell", - "bdfb76a0759f301b0b899a1e3985227e53b3f51e67e3f2a65363caedf3e32fde42a66c404f18d7b05818c95ef3ca1e5146646856c461c073169467511680876c" - ], - [ - "7ac45cfe7722ee6c7ba84fbc2d5bd61b45cb2fe5eb65aa78", - "kiss carry display unusual confirm curtain upgrade antique rotate hello void custom frequent obey nut hole price segment", - "ed56ff6c833c07982eb7119a8f48fd363c4a9b1601cd2de736b01045c5eb8ab4f57b079403485d1c4924f0790dc10a971763337cb9f9c62226f64fff26397c79" - ], - [ - "4fa1a8bc3e6d80ee1316050e862c1812031493212b7ec3f3bb1b08f168cabeef", - "exile ask congress lamp submit jacket era scheme attend cousin alcohol catch course end lucky hurt sentence oven short ball bird grab wing top", - "095ee6f817b4c2cb30a5a797360a81a40ab0f9a4e25ecd672a3f58a0b5ba0687c096a6b14d2c0deb3bdefce4f61d01ae07417d502429352e27695163f7447a8c" - ], - [ - "18ab19a9f54a9274f03e5209a2ac8a91", - "board flee heavy tunnel powder denial science ski answer betray cargo cat", - "6eff1bb21562918509c73cb990260db07c0ce34ff0e3cc4a8cb3276129fbcb300bddfe005831350efd633909f476c45c88253276d9fd0df6ef48609e8bb7dca8" - ], - [ - "18a2e1d81b8ecfb2a333adcb0c17a5b9eb76cc5d05db91a4", - "board blade invite damage undo sun mimic interest slam gaze truly inherit resist great inject rocket museum chief", - "f84521c777a13b61564234bf8f8b62b3afce27fc4062b51bb5e62bdfecb23864ee6ecf07c1d5a97c0834307c5c852d8ceb88e7c97923c0a3b496bedd4e5f88a9" - ], - [ - "15da872c95a13dd738fbf50e427583ad61f18fd99f628c417a61cf8343c90419", - "beyond stage sleep clip because twist token leaf atom beauty genius food business side grid unable middle armed observe pair crouch tonight away coconut", - "b15509eaa2d09d3efd3e006ef42151b30367dc6e3aa5e44caba3fe4d3e352e65101fbdb86a96776b91946ff06f8eac594dc6ee1d3e82a42dfe1b40fef6bcc3fd" - ] - ], - "custom": [ - [ - "00000000000000000000000000000000", - "aband0n aband0n aband0n aband0n aband0n aband0n aband0n aband0n aband0n aband0n aband0n ab0ut", - "c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04" - ], - [ - "15da872c95a13dd738fbf50e427583ad61f18fd99f628c417a61cf8343c90419", - "b3y0nd 5tag3 5l33p cl1p b3cau53 tw15t t0k3n l3af at0m b3auty g3n1u5 f00d bu51n355 51d3 gr1d unabl3 m1ddl3 arm3d 0b53rv3 pa1r cr0uch t0n1ght away c0c0nut", - "b15509eaa2d09d3efd3e006ef42151b30367dc6e3aa5e44caba3fe4d3e352e65101fbdb86a96776b91946ff06f8eac594dc6ee1d3e82a42dfe1b40fef6bcc3fd" - ] - ], - "japanese": [ - [ - "00000000000000000000000000000000", - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", - "ba553eedefe76e67e2602dc20184c564010859faada929a090dd2c57aacb204ceefd15404ab50ef3e8dbeae5195aeae64b0def4d2eead1cdc728a33ced520ffd" - ] - ] -} diff --git a/node_modules/bip39/test/wordlist.json b/node_modules/bip39/test/wordlist.json deleted file mode 100644 index ae3416d..0000000 --- a/node_modules/bip39/test/wordlist.json +++ /dev/null @@ -1,2050 +0,0 @@ -[ - "aband0n", - "ab1l1ty", - "abl3", - "ab0ut", - "ab0v3", - "ab53nt", - "ab50rb", - "ab5tract", - "ab5urd", - "abu53", - "acc355", - "acc1d3nt", - "acc0unt", - "accu53", - "ach13v3", - "ac1d", - "ac0u5t1c", - "acqu1r3", - "acr055", - "act", - "act10n", - "act0r", - "actr355", - "actual", - "adapt", - "add", - "add1ct", - "addr355", - "adju5t", - "adm1t", - "adult", - "advanc3", - "adv1c3", - "a3r0b1c", - "affa1r", - "aff0rd", - "afra1d", - "aga1n", - "ag3", - "ag3nt", - "agr33", - "ah3ad", - "a1m", - "a1r", - "a1rp0rt", - "a15l3", - "alarm", - "album", - "alc0h0l", - "al3rt", - "al13n", - "all", - "all3y", - "all0w", - "alm05t", - "al0n3", - "alpha", - "alr3ady", - "al50", - "alt3r", - "alway5", - "amat3ur", - "amaz1ng", - "am0ng", - "am0unt", - "amu53d", - "analy5t", - "anch0r", - "anc13nt", - "ang3r", - "angl3", - "angry", - "an1mal", - "ankl3", - "ann0unc3", - "annual", - "an0th3r", - "an5w3r", - "ant3nna", - "ant1qu3", - "anx13ty", - "any", - "apart", - "ap0l0gy", - "app3ar", - "appl3", - "appr0v3", - "apr1l", - "arch", - "arct1c", - "ar3a", - "ar3na", - "argu3", - "arm", - "arm3d", - "arm0r", - "army", - "ar0und", - "arrang3", - "arr35t", - "arr1v3", - "arr0w", - "art", - "art3fact", - "art15t", - "artw0rk", - "a5k", - "a5p3ct", - "a55ault", - "a553t", - "a5515t", - "a55um3", - "a5thma", - "athl3t3", - "at0m", - "attack", - "att3nd", - "att1tud3", - "attract", - "auct10n", - "aud1t", - "augu5t", - "aunt", - "auth0r", - "aut0", - "autumn", - "av3rag3", - "av0cad0", - "av01d", - "awak3", - "awar3", - "away", - "aw350m3", - "awful", - "awkward", - "ax15", - "baby", - "bach3l0r", - "bac0n", - "badg3", - "bag", - "balanc3", - "balc0ny", - "ball", - "bamb00", - "banana", - "bann3r", - "bar", - "bar3ly", - "barga1n", - "barr3l", - "ba53", - "ba51c", - "ba5k3t", - "battl3", - "b3ach", - "b3an", - "b3auty", - "b3cau53", - "b3c0m3", - "b33f", - "b3f0r3", - "b3g1n", - "b3hav3", - "b3h1nd", - "b3l13v3", - "b3l0w", - "b3lt", - "b3nch", - "b3n3f1t", - "b35t", - "b3tray", - "b3tt3r", - "b3tw33n", - "b3y0nd", - "b1cycl3", - "b1d", - "b1k3", - "b1nd", - "b10l0gy", - "b1rd", - "b1rth", - "b1tt3r", - "black", - "blad3", - "blam3", - "blank3t", - "bla5t", - "bl3ak", - "bl355", - "bl1nd", - "bl00d", - "bl0550m", - "bl0u53", - "blu3", - "blur", - "blu5h", - "b0ard", - "b0at", - "b0dy", - "b01l", - "b0mb", - "b0n3", - "b0nu5", - "b00k", - "b005t", - "b0rd3r", - "b0r1ng", - "b0rr0w", - "b055", - "b0tt0m", - "b0unc3", - "b0x", - "b0y", - "brack3t", - "bra1n", - "brand", - "bra55", - "brav3", - "br3ad", - "br33z3", - "br1ck", - "br1dg3", - "br13f", - "br1ght", - "br1ng", - "br15k", - "br0cc0l1", - "br0k3n", - "br0nz3", - "br00m", - "br0th3r", - "br0wn", - "bru5h", - "bubbl3", - "buddy", - "budg3t", - "buffal0", - "bu1ld", - "bulb", - "bulk", - "bull3t", - "bundl3", - "bunk3r", - "burd3n", - "burg3r", - "bur5t", - "bu5", - "bu51n355", - "bu5y", - "butt3r", - "buy3r", - "buzz", - "cabbag3", - "cab1n", - "cabl3", - "cactu5", - "cag3", - "cak3", - "call", - "calm", - "cam3ra", - "camp", - "can", - "canal", - "canc3l", - "candy", - "cann0n", - "can03", - "canva5", - "cany0n", - "capabl3", - "cap1tal", - "capta1n", - "car", - "carb0n", - "card", - "carg0", - "carp3t", - "carry", - "cart", - "ca53", - "ca5h", - "ca51n0", - "ca5tl3", - "ca5ual", - "cat", - "catal0g", - "catch", - "cat3g0ry", - "cattl3", - "caught", - "cau53", - "caut10n", - "cav3", - "c31l1ng", - "c3l3ry", - "c3m3nt", - "c3n5u5", - "c3ntury", - "c3r3al", - "c3rta1n", - "cha1r", - "chalk", - "champ10n", - "chang3", - "cha05", - "chapt3r", - "charg3", - "cha53", - "chat", - "ch3ap", - "ch3ck", - "ch3353", - "ch3f", - "ch3rry", - "ch35t", - "ch1ck3n", - "ch13f", - "ch1ld", - "ch1mn3y", - "ch01c3", - "ch0053", - "chr0n1c", - "chuckl3", - "chunk", - "churn", - "c1gar", - "c1nnam0n", - "c1rcl3", - "c1t1z3n", - "c1ty", - "c1v1l", - "cla1m", - "clap", - "clar1fy", - "claw", - "clay", - "cl3an", - "cl3rk", - "cl3v3r", - "cl1ck", - "cl13nt", - "cl1ff", - "cl1mb", - "cl1n1c", - "cl1p", - "cl0ck", - "cl0g", - "cl053", - "cl0th", - "cl0ud", - "cl0wn", - "club", - "clump", - "clu5t3r", - "clutch", - "c0ach", - "c0a5t", - "c0c0nut", - "c0d3", - "c0ff33", - "c01l", - "c01n", - "c0ll3ct", - "c0l0r", - "c0lumn", - "c0mb1n3", - "c0m3", - "c0mf0rt", - "c0m1c", - "c0mm0n", - "c0mpany", - "c0nc3rt", - "c0nduct", - "c0nf1rm", - "c0ngr355", - "c0nn3ct", - "c0n51d3r", - "c0ntr0l", - "c0nv1nc3", - "c00k", - "c00l", - "c0pp3r", - "c0py", - "c0ral", - "c0r3", - "c0rn", - "c0rr3ct", - "c05t", - "c0tt0n", - "c0uch", - "c0untry", - "c0upl3", - "c0ur53", - "c0u51n", - "c0v3r", - "c0y0t3", - "crack", - "cradl3", - "craft", - "cram", - "cran3", - "cra5h", - "crat3r", - "crawl", - "crazy", - "cr3am", - "cr3d1t", - "cr33k", - "cr3w", - "cr1ck3t", - "cr1m3", - "cr15p", - "cr1t1c", - "cr0p", - "cr055", - "cr0uch", - "cr0wd", - "cruc1al", - "cru3l", - "cru153", - "crumbl3", - "crunch", - "cru5h", - "cry", - "cry5tal", - "cub3", - "cultur3", - "cup", - "cupb0ard", - "cur10u5", - "curr3nt", - "curta1n", - "curv3", - "cu5h10n", - "cu5t0m", - "cut3", - "cycl3", - "dad", - "damag3", - "damp", - "danc3", - "dang3r", - "dar1ng", - "da5h", - "daught3r", - "dawn", - "day", - "d3al", - "d3bat3", - "d3br15", - "d3cad3", - "d3c3mb3r", - "d3c1d3", - "d3cl1n3", - "d3c0rat3", - "d3cr3a53", - "d33r", - "d3f3n53", - "d3f1n3", - "d3fy", - "d3gr33", - "d3lay", - "d3l1v3r", - "d3mand", - "d3m153", - "d3n1al", - "d3nt15t", - "d3ny", - "d3part", - "d3p3nd", - "d3p051t", - "d3pth", - "d3puty", - "d3r1v3", - "d35cr1b3", - "d353rt", - "d351gn", - "d35k", - "d35pa1r", - "d35tr0y", - "d3ta1l", - "d3t3ct", - "d3v3l0p", - "d3v1c3", - "d3v0t3", - "d1agram", - "d1al", - "d1am0nd", - "d1ary", - "d1c3", - "d1353l", - "d13t", - "d1ff3r", - "d1g1tal", - "d1gn1ty", - "d1l3mma", - "d1nn3r", - "d1n05aur", - "d1r3ct", - "d1rt", - "d15agr33", - "d15c0v3r", - "d153a53", - "d15h", - "d15m155", - "d150rd3r", - "d15play", - "d15tanc3", - "d1v3rt", - "d1v1d3", - "d1v0rc3", - "d1zzy", - "d0ct0r", - "d0cum3nt", - "d0g", - "d0ll", - "d0lph1n", - "d0ma1n", - "d0nat3", - "d0nk3y", - "d0n0r", - "d00r", - "d053", - "d0ubl3", - "d0v3", - "draft", - "drag0n", - "drama", - "dra5t1c", - "draw", - "dr3am", - "dr355", - "dr1ft", - "dr1ll", - "dr1nk", - "dr1p", - "dr1v3", - "dr0p", - "drum", - "dry", - "duck", - "dumb", - "dun3", - "dur1ng", - "du5t", - "dutch", - "duty", - "dwarf", - "dynam1c", - "3ag3r", - "3agl3", - "3arly", - "3arn", - "3arth", - "3a51ly", - "3a5t", - "3a5y", - "3ch0", - "3c0l0gy", - "3c0n0my", - "3dg3", - "3d1t", - "3ducat3", - "3ff0rt", - "3gg", - "31ght", - "31th3r", - "3lb0w", - "3ld3r", - "3l3ctr1c", - "3l3gant", - "3l3m3nt", - "3l3phant", - "3l3vat0r", - "3l1t3", - "3l53", - "3mbark", - "3mb0dy", - "3mbrac3", - "3m3rg3", - "3m0t10n", - "3mpl0y", - "3mp0w3r", - "3mpty", - "3nabl3", - "3nact", - "3nd", - "3ndl355", - "3nd0r53", - "3n3my", - "3n3rgy", - "3nf0rc3", - "3ngag3", - "3ng1n3", - "3nhanc3", - "3nj0y", - "3nl15t", - "3n0ugh", - "3nr1ch", - "3nr0ll", - "3n5ur3", - "3nt3r", - "3nt1r3", - "3ntry", - "3nv3l0p3", - "3p150d3", - "3qual", - "3qu1p", - "3ra", - "3ra53", - "3r0d3", - "3r0510n", - "3rr0r", - "3rupt", - "35cap3", - "355ay", - "3553nc3", - "35tat3", - "3t3rnal", - "3th1c5", - "3v1d3nc3", - "3v1l", - "3v0k3", - "3v0lv3", - "3xact", - "3xampl3", - "3xc355", - "3xchang3", - "3xc1t3", - "3xclud3", - "3xcu53", - "3x3cut3", - "3x3rc153", - "3xhau5t", - "3xh1b1t", - "3x1l3", - "3x15t", - "3x1t", - "3x0t1c", - "3xpand", - "3xp3ct", - "3xp1r3", - "3xpla1n", - "3xp053", - "3xpr355", - "3xt3nd", - "3xtra", - "3y3", - "3y3br0w", - "fabr1c", - "fac3", - "faculty", - "fad3", - "fa1nt", - "fa1th", - "fall", - "fal53", - "fam3", - "fam1ly", - "fam0u5", - "fan", - "fancy", - "fanta5y", - "farm", - "fa5h10n", - "fat", - "fatal", - "fath3r", - "fat1gu3", - "fault", - "fav0r1t3", - "f3atur3", - "f3bruary", - "f3d3ral", - "f33", - "f33d", - "f33l", - "f3mal3", - "f3nc3", - "f35t1val", - "f3tch", - "f3v3r", - "f3w", - "f1b3r", - "f1ct10n", - "f13ld", - "f1gur3", - "f1l3", - "f1lm", - "f1lt3r", - "f1nal", - "f1nd", - "f1n3", - "f1ng3r", - "f1n15h", - "f1r3", - "f1rm", - "f1r5t", - "f15cal", - "f15h", - "f1t", - "f1tn355", - "f1x", - "flag", - "flam3", - "fla5h", - "flat", - "flav0r", - "fl33", - "fl1ght", - "fl1p", - "fl0at", - "fl0ck", - "fl00r", - "fl0w3r", - "flu1d", - "flu5h", - "fly", - "f0am", - "f0cu5", - "f0g", - "f01l", - "f0ld", - "f0ll0w", - "f00d", - "f00t", - "f0rc3", - "f0r35t", - "f0rg3t", - "f0rk", - "f0rtun3", - "f0rum", - "f0rward", - "f0551l", - "f05t3r", - "f0und", - "f0x", - "frag1l3", - "fram3", - "fr3qu3nt", - "fr35h", - "fr13nd", - "fr1ng3", - "fr0g", - "fr0nt", - "fr05t", - "fr0wn", - "fr0z3n", - "fru1t", - "fu3l", - "fun", - "funny", - "furnac3", - "fury", - "futur3", - "gadg3t", - "ga1n", - "galaxy", - "gall3ry", - "gam3", - "gap", - "garag3", - "garbag3", - "gard3n", - "garl1c", - "garm3nt", - "ga5", - "ga5p", - "gat3", - "gath3r", - "gaug3", - "gaz3", - "g3n3ral", - "g3n1u5", - "g3nr3", - "g3ntl3", - "g3nu1n3", - "g35tur3", - "gh05t", - "g1ant", - "g1ft", - "g1ggl3", - "g1ng3r", - "g1raff3", - "g1rl", - "g1v3", - "glad", - "glanc3", - "glar3", - "gla55", - "gl1d3", - "gl1mp53", - "gl0b3", - "gl00m", - "gl0ry", - "gl0v3", - "gl0w", - "glu3", - "g0at", - "g0dd355", - "g0ld", - "g00d", - "g0053", - "g0r1lla", - "g05p3l", - "g0551p", - "g0v3rn", - "g0wn", - "grab", - "grac3", - "gra1n", - "grant", - "grap3", - "gra55", - "grav1ty", - "gr3at", - "gr33n", - "gr1d", - "gr13f", - "gr1t", - "gr0c3ry", - "gr0up", - "gr0w", - "grunt", - "guard", - "gu355", - "gu1d3", - "gu1lt", - "gu1tar", - "gun", - "gym", - "hab1t", - "ha1r", - "half", - "hamm3r", - "ham5t3r", - "hand", - "happy", - "harb0r", - "hard", - "har5h", - "harv35t", - "hat", - "hav3", - "hawk", - "hazard", - "h3ad", - "h3alth", - "h3art", - "h3avy", - "h3dg3h0g", - "h31ght", - "h3ll0", - "h3lm3t", - "h3lp", - "h3n", - "h3r0", - "h1dd3n", - "h1gh", - "h1ll", - "h1nt", - "h1p", - "h1r3", - "h15t0ry", - "h0bby", - "h0ck3y", - "h0ld", - "h0l3", - "h0l1day", - "h0ll0w", - "h0m3", - "h0n3y", - "h00d", - "h0p3", - "h0rn", - "h0rr0r", - "h0r53", - "h05p1tal", - "h05t", - "h0t3l", - "h0ur", - "h0v3r", - "hub", - "hug3", - "human", - "humbl3", - "hum0r", - "hundr3d", - "hungry", - "hunt", - "hurdl3", - "hurry", - "hurt", - "hu5band", - "hybr1d", - "1c3", - "1c0n", - "1d3a", - "1d3nt1fy", - "1dl3", - "1gn0r3", - "1ll", - "1ll3gal", - "1lln355", - "1mag3", - "1m1tat3", - "1mm3n53", - "1mmun3", - "1mpact", - "1mp053", - "1mpr0v3", - "1mpul53", - "1nch", - "1nclud3", - "1nc0m3", - "1ncr3a53", - "1nd3x", - "1nd1cat3", - "1nd00r", - "1ndu5try", - "1nfant", - "1nfl1ct", - "1nf0rm", - "1nhal3", - "1nh3r1t", - "1n1t1al", - "1nj3ct", - "1njury", - "1nmat3", - "1nn3r", - "1nn0c3nt", - "1nput", - "1nqu1ry", - "1n5an3", - "1n53ct", - "1n51d3", - "1n5p1r3", - "1n5tall", - "1ntact", - "1nt3r35t", - "1nt0", - "1nv35t", - "1nv1t3", - "1nv0lv3", - "1r0n", - "15land", - "150lat3", - "155u3", - "1t3m", - "1v0ry", - "jack3t", - "jaguar", - "jar", - "jazz", - "j3al0u5", - "j3an5", - "j3lly", - "j3w3l", - "j0b", - "j01n", - "j0k3", - "j0urn3y", - "j0y", - "judg3", - "ju1c3", - "jump", - "jungl3", - "jun10r", - "junk", - "ju5t", - "kangar00", - "k33n", - "k33p", - "k3tchup", - "k3y", - "k1ck", - "k1d", - "k1dn3y", - "k1nd", - "k1ngd0m", - "k155", - "k1t", - "k1tch3n", - "k1t3", - "k1tt3n", - "k1w1", - "kn33", - "kn1f3", - "kn0ck", - "kn0w", - "lab", - "lab3l", - "lab0r", - "ladd3r", - "lady", - "lak3", - "lamp", - "languag3", - "lapt0p", - "larg3", - "lat3r", - "lat1n", - "laugh", - "laundry", - "lava", - "law", - "lawn", - "law5u1t", - "lay3r", - "lazy", - "l3ad3r", - "l3af", - "l3arn", - "l3av3", - "l3ctur3", - "l3ft", - "l3g", - "l3gal", - "l3g3nd", - "l315ur3", - "l3m0n", - "l3nd", - "l3ngth", - "l3n5", - "l30pard", - "l3550n", - "l3tt3r", - "l3v3l", - "l1ar", - "l1b3rty", - "l1brary", - "l1c3n53", - "l1f3", - "l1ft", - "l1ght", - "l1k3", - "l1mb", - "l1m1t", - "l1nk", - "l10n", - "l1qu1d", - "l15t", - "l1ttl3", - "l1v3", - "l1zard", - "l0ad", - "l0an", - "l0b5t3r", - "l0cal", - "l0ck", - "l0g1c", - "l0n3ly", - "l0ng", - "l00p", - "l0tt3ry", - "l0ud", - "l0ung3", - "l0v3", - "l0yal", - "lucky", - "luggag3", - "lumb3r", - "lunar", - "lunch", - "luxury", - "lyr1c5", - "mach1n3", - "mad", - "mag1c", - "magn3t", - "ma1d", - "ma1l", - "ma1n", - "maj0r", - "mak3", - "mammal", - "man", - "manag3", - "mandat3", - "mang0", - "man510n", - "manual", - "mapl3", - "marbl3", - "march", - "marg1n", - "mar1n3", - "mark3t", - "marr1ag3", - "ma5k", - "ma55", - "ma5t3r", - "match", - "mat3r1al", - "math", - "matr1x", - "matt3r", - "max1mum", - "maz3", - "m3ad0w", - "m3an", - "m3a5ur3", - "m3at", - "m3chan1c", - "m3dal", - "m3d1a", - "m3l0dy", - "m3lt", - "m3mb3r", - "m3m0ry", - "m3nt10n", - "m3nu", - "m3rcy", - "m3rg3", - "m3r1t", - "m3rry", - "m35h", - "m355ag3", - "m3tal", - "m3th0d", - "m1ddl3", - "m1dn1ght", - "m1lk", - "m1ll10n", - "m1m1c", - "m1nd", - "m1n1mum", - "m1n0r", - "m1nut3", - "m1racl3", - "m1rr0r", - "m153ry", - "m155", - "m15tak3", - "m1x", - "m1x3d", - "m1xtur3", - "m0b1l3", - "m0d3l", - "m0d1fy", - "m0m", - "m0m3nt", - "m0n1t0r", - "m0nk3y", - "m0n5t3r", - "m0nth", - "m00n", - "m0ral", - "m0r3", - "m0rn1ng", - "m05qu1t0", - "m0th3r", - "m0t10n", - "m0t0r", - "m0unta1n", - "m0u53", - "m0v3", - "m0v13", - "much", - "muff1n", - "mul3", - "mult1ply", - "mu5cl3", - "mu53um", - "mu5hr00m", - "mu51c", - "mu5t", - "mutual", - "my53lf", - "my5t3ry", - "myth", - "na1v3", - "nam3", - "napk1n", - "narr0w", - "na5ty", - "nat10n", - "natur3", - "n3ar", - "n3ck", - "n33d", - "n3gat1v3", - "n3gl3ct", - "n31th3r", - "n3ph3w", - "n3rv3", - "n35t", - "n3t", - "n3tw0rk", - "n3utral", - "n3v3r", - "n3w5", - "n3xt", - "n1c3", - "n1ght", - "n0bl3", - "n0153", - "n0m1n33", - "n00dl3", - "n0rmal", - "n0rth", - "n053", - "n0tabl3", - "n0t3", - "n0th1ng", - "n0t1c3", - "n0v3l", - "n0w", - "nucl3ar", - "numb3r", - "nur53", - "nut", - "0ak", - "0b3y", - "0bj3ct", - "0bl1g3", - "0b5cur3", - "0b53rv3", - "0bta1n", - "0bv10u5", - "0ccur", - "0c3an", - "0ct0b3r", - "0d0r", - "0ff", - "0ff3r", - "0ff1c3", - "0ft3n", - "01l", - "0kay", - "0ld", - "0l1v3", - "0lymp1c", - "0m1t", - "0nc3", - "0n3", - "0n10n", - "0nl1n3", - "0nly", - "0p3n", - "0p3ra", - "0p1n10n", - "0pp053", - "0pt10n", - "0rang3", - "0rb1t", - "0rchard", - "0rd3r", - "0rd1nary", - "0rgan", - "0r13nt", - "0r1g1nal", - "0rphan", - "05tr1ch", - "0th3r", - "0utd00r", - "0ut3r", - "0utput", - "0ut51d3", - "0val", - "0v3n", - "0v3r", - "0wn", - "0wn3r", - "0xyg3n", - "0y5t3r", - "0z0n3", - "pact", - "paddl3", - "pag3", - "pa1r", - "palac3", - "palm", - "panda", - "pan3l", - "pan1c", - "panth3r", - "pap3r", - "parad3", - "par3nt", - "park", - "parr0t", - "party", - "pa55", - "patch", - "path", - "pat13nt", - "patr0l", - "patt3rn", - "pau53", - "pav3", - "paym3nt", - "p3ac3", - "p3anut", - "p3ar", - "p3a5ant", - "p3l1can", - "p3n", - "p3nalty", - "p3nc1l", - "p30pl3", - "p3pp3r", - "p3rf3ct", - "p3rm1t", - "p3r50n", - "p3t", - "ph0n3", - "ph0t0", - "phra53", - "phy51cal", - "p1an0", - "p1cn1c", - "p1ctur3", - "p13c3", - "p1g", - "p1g30n", - "p1ll", - "p1l0t", - "p1nk", - "p10n33r", - "p1p3", - "p15t0l", - "p1tch", - "p1zza", - "plac3", - "plan3t", - "pla5t1c", - "plat3", - "play", - "pl3a53", - "pl3dg3", - "pluck", - "plug", - "plung3", - "p03m", - "p03t", - "p01nt", - "p0lar", - "p0l3", - "p0l1c3", - "p0nd", - "p0ny", - "p00l", - "p0pular", - "p0rt10n", - "p051t10n", - "p0551bl3", - "p05t", - "p0tat0", - "p0tt3ry", - "p0v3rty", - "p0wd3r", - "p0w3r", - "pract1c3", - "pra153", - "pr3d1ct", - "pr3f3r", - "pr3par3", - "pr353nt", - "pr3tty", - "pr3v3nt", - "pr1c3", - "pr1d3", - "pr1mary", - "pr1nt", - "pr10r1ty", - "pr150n", - "pr1vat3", - "pr1z3", - "pr0bl3m", - "pr0c355", - "pr0duc3", - "pr0f1t", - "pr0gram", - "pr0j3ct", - "pr0m0t3", - "pr00f", - "pr0p3rty", - "pr05p3r", - "pr0t3ct", - "pr0ud", - "pr0v1d3", - "publ1c", - "pudd1ng", - "pull", - "pulp", - "pul53", - "pumpk1n", - "punch", - "pup1l", - "puppy", - "purcha53", - "pur1ty", - "purp053", - "pur53", - "pu5h", - "put", - "puzzl3", - "pyram1d", - "qual1ty", - "quantum", - "quart3r", - "qu35t10n", - "qu1ck", - "qu1t", - "qu1z", - "qu0t3", - "rabb1t", - "racc00n", - "rac3", - "rack", - "radar", - "rad10", - "ra1l", - "ra1n", - "ra153", - "rally", - "ramp", - "ranch", - "rand0m", - "rang3", - "rap1d", - "rar3", - "rat3", - "rath3r", - "rav3n", - "raw", - "raz0r", - "r3ady", - "r3al", - "r3a50n", - "r3b3l", - "r3bu1ld", - "r3call", - "r3c31v3", - "r3c1p3", - "r3c0rd", - "r3cycl3", - "r3duc3", - "r3fl3ct", - "r3f0rm", - "r3fu53", - "r3g10n", - "r3gr3t", - "r3gular", - "r3j3ct", - "r3lax", - "r3l3a53", - "r3l13f", - "r3ly", - "r3ma1n", - "r3m3mb3r", - "r3m1nd", - "r3m0v3", - "r3nd3r", - "r3n3w", - "r3nt", - "r30p3n", - "r3pa1r", - "r3p3at", - "r3plac3", - "r3p0rt", - "r3qu1r3", - "r35cu3", - "r353mbl3", - "r3515t", - "r350urc3", - "r35p0n53", - "r35ult", - "r3t1r3", - "r3tr3at", - "r3turn", - "r3un10n", - "r3v3al", - "r3v13w", - "r3ward", - "rhythm", - "r1b", - "r1bb0n", - "r1c3", - "r1ch", - "r1d3", - "r1dg3", - "r1fl3", - "r1ght", - "r1g1d", - "r1ng", - "r10t", - "r1ppl3", - "r15k", - "r1tual", - "r1val", - "r1v3r", - "r0ad", - "r0a5t", - "r0b0t", - "r0bu5t", - "r0ck3t", - "r0manc3", - "r00f", - "r00k13", - "r00m", - "r053", - "r0tat3", - "r0ugh", - "r0und", - "r0ut3", - "r0yal", - "rubb3r", - "rud3", - "rug", - "rul3", - "run", - "runway", - "rural", - "5ad", - "5addl3", - "5adn355", - "5af3", - "5a1l", - "5alad", - "5alm0n", - "5al0n", - "5alt", - "5alut3", - "5am3", - "5ampl3", - "5and", - "5at15fy", - "5at05h1", - "5auc3", - "5au5ag3", - "5av3", - "5ay", - "5cal3", - "5can", - "5car3", - "5catt3r", - "5c3n3", - "5ch3m3", - "5ch00l", - "5c13nc3", - "5c1550r5", - "5c0rp10n", - "5c0ut", - "5crap", - "5cr33n", - "5cr1pt", - "5crub", - "53a", - "53arch", - "53a50n", - "53at", - "53c0nd", - "53cr3t", - "53ct10n", - "53cur1ty", - "533d", - "533k", - "53gm3nt", - "53l3ct", - "53ll", - "53m1nar", - "53n10r", - "53n53", - "53nt3nc3", - "53r135", - "53rv1c3", - "535510n", - "53ttl3", - "53tup", - "53v3n", - "5had0w", - "5haft", - "5hall0w", - "5har3", - "5h3d", - "5h3ll", - "5h3r1ff", - "5h13ld", - "5h1ft", - "5h1n3", - "5h1p", - "5h1v3r", - "5h0ck", - "5h03", - "5h00t", - "5h0p", - "5h0rt", - "5h0uld3r", - "5h0v3", - "5hr1mp", - "5hrug", - "5huffl3", - "5hy", - "51bl1ng", - "51ck", - "51d3", - "513g3", - "51ght", - "51gn", - "51l3nt", - "51lk", - "51lly", - "51lv3r", - "51m1lar", - "51mpl3", - "51nc3", - "51ng", - "51r3n", - "515t3r", - "51tuat3", - "51x", - "51z3", - "5kat3", - "5k3tch", - "5k1", - "5k1ll", - "5k1n", - "5k1rt", - "5kull", - "5lab", - "5lam", - "5l33p", - "5l3nd3r", - "5l1c3", - "5l1d3", - "5l1ght", - "5l1m", - "5l0gan", - "5l0t", - "5l0w", - "5lu5h", - "5mall", - "5mart", - "5m1l3", - "5m0k3", - "5m00th", - "5nack", - "5nak3", - "5nap", - "5n1ff", - "5n0w", - "50ap", - "50cc3r", - "50c1al", - "50ck", - "50da", - "50ft", - "50lar", - "50ld13r", - "50l1d", - "50lut10n", - "50lv3", - "50m30n3", - "50ng", - "500n", - "50rry", - "50rt", - "50ul", - "50und", - "50up", - "50urc3", - "50uth", - "5pac3", - "5par3", - "5pat1al", - "5pawn", - "5p3ak", - "5p3c1al", - "5p33d", - "5p3ll", - "5p3nd", - "5ph3r3", - "5p1c3", - "5p1d3r", - "5p1k3", - "5p1n", - "5p1r1t", - "5pl1t", - "5p01l", - "5p0n50r", - "5p00n", - "5p0rt", - "5p0t", - "5pray", - "5pr3ad", - "5pr1ng", - "5py", - "5quar3", - "5qu33z3", - "5qu1rr3l", - "5tabl3", - "5tad1um", - "5taff", - "5tag3", - "5ta1r5", - "5tamp", - "5tand", - "5tart", - "5tat3", - "5tay", - "5t3ak", - "5t33l", - "5t3m", - "5t3p", - "5t3r30", - "5t1ck", - "5t1ll", - "5t1ng", - "5t0ck", - "5t0mach", - "5t0n3", - "5t00l", - "5t0ry", - "5t0v3", - "5trat3gy", - "5tr33t", - "5tr1k3", - "5tr0ng", - "5truggl3", - "5tud3nt", - "5tuff", - "5tumbl3", - "5tyl3", - "5ubj3ct", - "5ubm1t", - "5ubway", - "5ucc355", - "5uch", - "5udd3n", - "5uff3r", - "5ugar", - "5ugg35t", - "5u1t", - "5umm3r", - "5un", - "5unny", - "5un53t", - "5up3r", - "5upply", - "5upr3m3", - "5ur3", - "5urfac3", - "5urg3", - "5urpr153", - "5urr0und", - "5urv3y", - "5u5p3ct", - "5u5ta1n", - "5wall0w", - "5wamp", - "5wap", - "5warm", - "5w3ar", - "5w33t", - "5w1ft", - "5w1m", - "5w1ng", - "5w1tch", - "5w0rd", - "5ymb0l", - "5ympt0m", - "5yrup", - "5y5t3m", - "tabl3", - "tackl3", - "tag", - "ta1l", - "tal3nt", - "talk", - "tank", - "tap3", - "targ3t", - "ta5k", - "ta5t3", - "tatt00", - "tax1", - "t3ach", - "t3am", - "t3ll", - "t3n", - "t3nant", - "t3nn15", - "t3nt", - "t3rm", - "t35t", - "t3xt", - "thank", - "that", - "th3m3", - "th3n", - "th30ry", - "th3r3", - "th3y", - "th1ng", - "th15", - "th0ught", - "thr33", - "thr1v3", - "thr0w", - "thumb", - "thund3r", - "t1ck3t", - "t1d3", - "t1g3r", - "t1lt", - "t1mb3r", - "t1m3", - "t1ny", - "t1p", - "t1r3d", - "t155u3", - "t1tl3", - "t0a5t", - "t0bacc0", - "t0day", - "t0ddl3r", - "t03", - "t0g3th3r", - "t01l3t", - "t0k3n", - "t0mat0", - "t0m0rr0w", - "t0n3", - "t0ngu3", - "t0n1ght", - "t00l", - "t00th", - "t0p", - "t0p1c", - "t0ppl3", - "t0rch", - "t0rnad0", - "t0rt0153", - "t055", - "t0tal", - "t0ur15t", - "t0ward", - "t0w3r", - "t0wn", - "t0y", - "track", - "trad3", - "traff1c", - "trag1c", - "tra1n", - "tran5f3r", - "trap", - "tra5h", - "trav3l", - "tray", - "tr3at", - "tr33", - "tr3nd", - "tr1al", - "tr1b3", - "tr1ck", - "tr1gg3r", - "tr1m", - "tr1p", - "tr0phy", - "tr0ubl3", - "truck", - "tru3", - "truly", - "trump3t", - "tru5t", - "truth", - "try", - "tub3", - "tu1t10n", - "tumbl3", - "tuna", - "tunn3l", - "turk3y", - "turn", - "turtl3", - "tw3lv3", - "tw3nty", - "tw1c3", - "tw1n", - "tw15t", - "tw0", - "typ3", - "typ1cal", - "ugly", - "umbr3lla", - "unabl3", - "unawar3", - "uncl3", - "unc0v3r", - "und3r", - "und0", - "unfa1r", - "unf0ld", - "unhappy", - "un1f0rm", - "un1qu3", - "un1t", - "un1v3r53", - "unkn0wn", - "unl0ck", - "unt1l", - "unu5ual", - "unv31l", - "updat3", - "upgrad3", - "uph0ld", - "up0n", - "upp3r", - "up53t", - "urban", - "urg3", - "u5ag3", - "u53", - "u53d", - "u53ful", - "u53l355", - "u5ual", - "ut1l1ty", - "vacant", - "vacuum", - "vagu3", - "val1d", - "vall3y", - "valv3", - "van", - "van15h", - "vap0r", - "var10u5", - "va5t", - "vault", - "v3h1cl3", - "v3lv3t", - "v3nd0r", - "v3ntur3", - "v3nu3", - "v3rb", - "v3r1fy", - "v3r510n", - "v3ry", - "v3553l", - "v3t3ran", - "v1abl3", - "v1brant", - "v1c10u5", - "v1ct0ry", - "v1d30", - "v13w", - "v1llag3", - "v1ntag3", - "v10l1n", - "v1rtual", - "v1ru5", - "v15a", - "v151t", - "v15ual", - "v1tal", - "v1v1d", - "v0cal", - "v01c3", - "v01d", - "v0lcan0", - "v0lum3", - "v0t3", - "v0yag3", - "wag3", - "wag0n", - "wa1t", - "walk", - "wall", - "walnut", - "want", - "warfar3", - "warm", - "warr10r", - "wa5h", - "wa5p", - "wa5t3", - "wat3r", - "wav3", - "way", - "w3alth", - "w3ap0n", - "w3ar", - "w3a53l", - "w3ath3r", - "w3b", - "w3dd1ng", - "w33k3nd", - "w31rd", - "w3lc0m3", - "w35t", - "w3t", - "whal3", - "what", - "wh3at", - "wh33l", - "wh3n", - "wh3r3", - "wh1p", - "wh15p3r", - "w1d3", - "w1dth", - "w1f3", - "w1ld", - "w1ll", - "w1n", - "w1nd0w", - "w1n3", - "w1ng", - "w1nk", - "w1nn3r", - "w1nt3r", - "w1r3", - "w15d0m", - "w153", - "w15h", - "w1tn355", - "w0lf", - "w0man", - "w0nd3r", - "w00d", - "w00l", - "w0rd", - "w0rk", - "w0rld", - "w0rry", - "w0rth", - "wrap", - "wr3ck", - "wr35tl3", - "wr15t", - "wr1t3", - "wr0ng", - "yard", - "y3ar", - "y3ll0w", - "y0u", - "y0ung", - "y0uth", - "z3bra", - "z3r0", - "z0n3", - "z00" -] diff --git a/node_modules/bip39/wordlists/en.json b/node_modules/bip39/wordlists/en.json deleted file mode 100644 index 5bc5c63..0000000 --- a/node_modules/bip39/wordlists/en.json +++ /dev/null @@ -1,2050 +0,0 @@ -[ - "abandon", - "ability", - "able", - "about", - "above", - "absent", - "absorb", - "abstract", - "absurd", - "abuse", - "access", - "accident", - "account", - "accuse", - "achieve", - "acid", - "acoustic", - "acquire", - "across", - "act", - "action", - "actor", - "actress", - "actual", - "adapt", - "add", - "addict", - "address", - "adjust", - "admit", - "adult", - "advance", - "advice", - "aerobic", - "affair", - "afford", - "afraid", - "again", - "age", - "agent", - "agree", - "ahead", - "aim", - "air", - "airport", - "aisle", - "alarm", - "album", - "alcohol", - "alert", - "alien", - "all", - "alley", - "allow", - "almost", - "alone", - "alpha", - "already", - "also", - "alter", - "always", - "amateur", - "amazing", - "among", - "amount", - "amused", - "analyst", - "anchor", - "ancient", - "anger", - "angle", - "angry", - "animal", - "ankle", - "announce", - "annual", - "another", - "answer", - "antenna", - "antique", - "anxiety", - "any", - "apart", - "apology", - "appear", - "apple", - "approve", - "april", - "arch", - "arctic", - "area", - "arena", - "argue", - "arm", - "armed", - "armor", - "army", - "around", - "arrange", - "arrest", - "arrive", - "arrow", - "art", - "artefact", - "artist", - "artwork", - "ask", - "aspect", - "assault", - "asset", - "assist", - "assume", - "asthma", - "athlete", - "atom", - "attack", - "attend", - "attitude", - "attract", - "auction", - "audit", - "august", - "aunt", - "author", - "auto", - "autumn", - "average", - "avocado", - "avoid", - "awake", - "aware", - "away", - "awesome", - "awful", - "awkward", - "axis", - "baby", - "bachelor", - "bacon", - "badge", - "bag", - "balance", - "balcony", - "ball", - "bamboo", - "banana", - "banner", - "bar", - "barely", - "bargain", - "barrel", - "base", - "basic", - "basket", - "battle", - "beach", - "bean", - "beauty", - "because", - "become", - "beef", - "before", - "begin", - "behave", - "behind", - "believe", - "below", - "belt", - "bench", - "benefit", - "best", - "betray", - "better", - "between", - "beyond", - "bicycle", - "bid", - "bike", - "bind", - "biology", - "bird", - "birth", - "bitter", - "black", - "blade", - "blame", - "blanket", - "blast", - "bleak", - "bless", - "blind", - "blood", - "blossom", - "blouse", - "blue", - "blur", - "blush", - "board", - "boat", - "body", - "boil", - "bomb", - "bone", - "bonus", - "book", - "boost", - "border", - "boring", - "borrow", - "boss", - "bottom", - "bounce", - "box", - "boy", - "bracket", - "brain", - "brand", - "brass", - "brave", - "bread", - "breeze", - "brick", - "bridge", - "brief", - "bright", - "bring", - "brisk", - "broccoli", - "broken", - "bronze", - "broom", - "brother", - "brown", - "brush", - "bubble", - "buddy", - "budget", - "buffalo", - "build", - "bulb", - "bulk", - "bullet", - "bundle", - "bunker", - "burden", - "burger", - "burst", - "bus", - "business", - "busy", - "butter", - "buyer", - "buzz", - "cabbage", - "cabin", - "cable", - "cactus", - "cage", - "cake", - "call", - "calm", - "camera", - "camp", - "can", - "canal", - "cancel", - "candy", - "cannon", - "canoe", - "canvas", - "canyon", - "capable", - "capital", - "captain", - "car", - "carbon", - "card", - "cargo", - "carpet", - "carry", - "cart", - "case", - "cash", - "casino", - "castle", - "casual", - "cat", - "catalog", - "catch", - "category", - "cattle", - "caught", - "cause", - "caution", - "cave", - "ceiling", - "celery", - "cement", - "census", - "century", - "cereal", - "certain", - "chair", - "chalk", - "champion", - "change", - "chaos", - "chapter", - "charge", - "chase", - "chat", - "cheap", - "check", - "cheese", - "chef", - "cherry", - "chest", - "chicken", - "chief", - "child", - "chimney", - "choice", - "choose", - "chronic", - "chuckle", - "chunk", - "churn", - "cigar", - "cinnamon", - "circle", - "citizen", - "city", - "civil", - "claim", - "clap", - "clarify", - "claw", - "clay", - "clean", - "clerk", - "clever", - "click", - "client", - "cliff", - "climb", - "clinic", - "clip", - "clock", - "clog", - "close", - "cloth", - "cloud", - "clown", - "club", - "clump", - "cluster", - "clutch", - "coach", - "coast", - "coconut", - "code", - "coffee", - "coil", - "coin", - "collect", - "color", - "column", - "combine", - "come", - "comfort", - "comic", - "common", - "company", - "concert", - "conduct", - "confirm", - "congress", - "connect", - "consider", - "control", - "convince", - "cook", - "cool", - "copper", - "copy", - "coral", - "core", - "corn", - "correct", - "cost", - "cotton", - "couch", - "country", - "couple", - "course", - "cousin", - "cover", - "coyote", - "crack", - "cradle", - "craft", - "cram", - "crane", - "crash", - "crater", - "crawl", - "crazy", - "cream", - "credit", - "creek", - "crew", - "cricket", - "crime", - "crisp", - "critic", - "crop", - "cross", - "crouch", - "crowd", - "crucial", - "cruel", - "cruise", - "crumble", - "crunch", - "crush", - "cry", - "crystal", - "cube", - "culture", - "cup", - "cupboard", - "curious", - "current", - "curtain", - "curve", - "cushion", - "custom", - "cute", - "cycle", - "dad", - "damage", - "damp", - "dance", - "danger", - "daring", - "dash", - "daughter", - "dawn", - "day", - "deal", - "debate", - "debris", - "decade", - "december", - "decide", - "decline", - "decorate", - "decrease", - "deer", - "defense", - "define", - "defy", - "degree", - "delay", - "deliver", - "demand", - "demise", - "denial", - "dentist", - "deny", - "depart", - "depend", - "deposit", - "depth", - "deputy", - "derive", - "describe", - "desert", - "design", - "desk", - "despair", - "destroy", - "detail", - "detect", - "develop", - "device", - "devote", - "diagram", - "dial", - "diamond", - "diary", - "dice", - "diesel", - "diet", - "differ", - "digital", - "dignity", - "dilemma", - "dinner", - "dinosaur", - "direct", - "dirt", - "disagree", - "discover", - "disease", - "dish", - "dismiss", - "disorder", - "display", - "distance", - "divert", - "divide", - "divorce", - "dizzy", - "doctor", - "document", - "dog", - "doll", - "dolphin", - "domain", - "donate", - "donkey", - "donor", - "door", - "dose", - "double", - "dove", - "draft", - "dragon", - "drama", - "drastic", - "draw", - "dream", - "dress", - "drift", - "drill", - "drink", - "drip", - "drive", - "drop", - "drum", - "dry", - "duck", - "dumb", - "dune", - "during", - "dust", - "dutch", - "duty", - "dwarf", - "dynamic", - "eager", - "eagle", - "early", - "earn", - "earth", - "easily", - "east", - "easy", - "echo", - "ecology", - "economy", - "edge", - "edit", - "educate", - "effort", - "egg", - "eight", - "either", - "elbow", - "elder", - "electric", - "elegant", - "element", - "elephant", - "elevator", - "elite", - "else", - "embark", - "embody", - "embrace", - "emerge", - "emotion", - "employ", - "empower", - "empty", - "enable", - "enact", - "end", - "endless", - "endorse", - "enemy", - "energy", - "enforce", - "engage", - "engine", - "enhance", - "enjoy", - "enlist", - "enough", - "enrich", - "enroll", - "ensure", - "enter", - "entire", - "entry", - "envelope", - "episode", - "equal", - "equip", - "era", - "erase", - "erode", - "erosion", - "error", - "erupt", - "escape", - "essay", - "essence", - "estate", - "eternal", - "ethics", - "evidence", - "evil", - "evoke", - "evolve", - "exact", - "example", - "excess", - "exchange", - "excite", - "exclude", - "excuse", - "execute", - "exercise", - "exhaust", - "exhibit", - "exile", - "exist", - "exit", - "exotic", - "expand", - "expect", - "expire", - "explain", - "expose", - "express", - "extend", - "extra", - "eye", - "eyebrow", - "fabric", - "face", - "faculty", - "fade", - "faint", - "faith", - "fall", - "false", - "fame", - "family", - "famous", - "fan", - "fancy", - "fantasy", - "farm", - "fashion", - "fat", - "fatal", - "father", - "fatigue", - "fault", - "favorite", - "feature", - "february", - "federal", - "fee", - "feed", - "feel", - "female", - "fence", - "festival", - "fetch", - "fever", - "few", - "fiber", - "fiction", - "field", - "figure", - "file", - "film", - "filter", - "final", - "find", - "fine", - "finger", - "finish", - "fire", - "firm", - "first", - "fiscal", - "fish", - "fit", - "fitness", - "fix", - "flag", - "flame", - "flash", - "flat", - "flavor", - "flee", - "flight", - "flip", - "float", - "flock", - "floor", - "flower", - "fluid", - "flush", - "fly", - "foam", - "focus", - "fog", - "foil", - "fold", - "follow", - "food", - "foot", - "force", - "forest", - "forget", - "fork", - "fortune", - "forum", - "forward", - "fossil", - "foster", - "found", - "fox", - "fragile", - "frame", - "frequent", - "fresh", - "friend", - "fringe", - "frog", - "front", - "frost", - "frown", - "frozen", - "fruit", - "fuel", - "fun", - "funny", - "furnace", - "fury", - "future", - "gadget", - "gain", - "galaxy", - "gallery", - "game", - "gap", - "garage", - "garbage", - "garden", - "garlic", - "garment", - "gas", - "gasp", - "gate", - "gather", - "gauge", - "gaze", - "general", - "genius", - "genre", - "gentle", - "genuine", - "gesture", - "ghost", - "giant", - "gift", - "giggle", - "ginger", - "giraffe", - "girl", - "give", - "glad", - "glance", - "glare", - "glass", - "glide", - "glimpse", - "globe", - "gloom", - "glory", - "glove", - "glow", - "glue", - "goat", - "goddess", - "gold", - "good", - "goose", - "gorilla", - "gospel", - "gossip", - "govern", - "gown", - "grab", - "grace", - "grain", - "grant", - "grape", - "grass", - "gravity", - "great", - "green", - "grid", - "grief", - "grit", - "grocery", - "group", - "grow", - "grunt", - "guard", - "guess", - "guide", - "guilt", - "guitar", - "gun", - "gym", - "habit", - "hair", - "half", - "hammer", - "hamster", - "hand", - "happy", - "harbor", - "hard", - "harsh", - "harvest", - "hat", - "have", - "hawk", - "hazard", - "head", - "health", - "heart", - "heavy", - "hedgehog", - "height", - "hello", - "helmet", - "help", - "hen", - "hero", - "hidden", - "high", - "hill", - "hint", - "hip", - "hire", - "history", - "hobby", - "hockey", - "hold", - "hole", - "holiday", - "hollow", - "home", - "honey", - "hood", - "hope", - "horn", - "horror", - "horse", - "hospital", - "host", - "hotel", - "hour", - "hover", - "hub", - "huge", - "human", - "humble", - "humor", - "hundred", - "hungry", - "hunt", - "hurdle", - "hurry", - "hurt", - "husband", - "hybrid", - "ice", - "icon", - "idea", - "identify", - "idle", - "ignore", - "ill", - "illegal", - "illness", - "image", - "imitate", - "immense", - "immune", - "impact", - "impose", - "improve", - "impulse", - "inch", - "include", - "income", - "increase", - "index", - "indicate", - "indoor", - "industry", - "infant", - "inflict", - "inform", - "inhale", - "inherit", - "initial", - "inject", - "injury", - "inmate", - "inner", - "innocent", - "input", - "inquiry", - "insane", - "insect", - "inside", - "inspire", - "install", - "intact", - "interest", - "into", - "invest", - "invite", - "involve", - "iron", - "island", - "isolate", - "issue", - "item", - "ivory", - "jacket", - "jaguar", - "jar", - "jazz", - "jealous", - "jeans", - "jelly", - "jewel", - "job", - "join", - "joke", - "journey", - "joy", - "judge", - "juice", - "jump", - "jungle", - "junior", - "junk", - "just", - "kangaroo", - "keen", - "keep", - "ketchup", - "key", - "kick", - "kid", - "kidney", - "kind", - "kingdom", - "kiss", - "kit", - "kitchen", - "kite", - "kitten", - "kiwi", - "knee", - "knife", - "knock", - "know", - "lab", - "label", - "labor", - "ladder", - "lady", - "lake", - "lamp", - "language", - "laptop", - "large", - "later", - "latin", - "laugh", - "laundry", - "lava", - "law", - "lawn", - "lawsuit", - "layer", - "lazy", - "leader", - "leaf", - "learn", - "leave", - "lecture", - "left", - "leg", - "legal", - "legend", - "leisure", - "lemon", - "lend", - "length", - "lens", - "leopard", - "lesson", - "letter", - "level", - "liar", - "liberty", - "library", - "license", - "life", - "lift", - "light", - "like", - "limb", - "limit", - "link", - "lion", - "liquid", - "list", - "little", - "live", - "lizard", - "load", - "loan", - "lobster", - "local", - "lock", - "logic", - "lonely", - "long", - "loop", - "lottery", - "loud", - "lounge", - "love", - "loyal", - "lucky", - "luggage", - "lumber", - "lunar", - "lunch", - "luxury", - "lyrics", - "machine", - "mad", - "magic", - "magnet", - "maid", - "mail", - "main", - "major", - "make", - "mammal", - "man", - "manage", - "mandate", - "mango", - "mansion", - "manual", - "maple", - "marble", - "march", - "margin", - "marine", - "market", - "marriage", - "mask", - "mass", - "master", - "match", - "material", - "math", - "matrix", - "matter", - "maximum", - "maze", - "meadow", - "mean", - "measure", - "meat", - "mechanic", - "medal", - "media", - "melody", - "melt", - "member", - "memory", - "mention", - "menu", - "mercy", - "merge", - "merit", - "merry", - "mesh", - "message", - "metal", - "method", - "middle", - "midnight", - "milk", - "million", - "mimic", - "mind", - "minimum", - "minor", - "minute", - "miracle", - "mirror", - "misery", - "miss", - "mistake", - "mix", - "mixed", - "mixture", - "mobile", - "model", - "modify", - "mom", - "moment", - "monitor", - "monkey", - "monster", - "month", - "moon", - "moral", - "more", - "morning", - "mosquito", - "mother", - "motion", - "motor", - "mountain", - "mouse", - "move", - "movie", - "much", - "muffin", - "mule", - "multiply", - "muscle", - "museum", - "mushroom", - "music", - "must", - "mutual", - "myself", - "mystery", - "myth", - "naive", - "name", - "napkin", - "narrow", - "nasty", - "nation", - "nature", - "near", - "neck", - "need", - "negative", - "neglect", - "neither", - "nephew", - "nerve", - "nest", - "net", - "network", - "neutral", - "never", - "news", - "next", - "nice", - "night", - "noble", - "noise", - "nominee", - "noodle", - "normal", - "north", - "nose", - "notable", - "note", - "nothing", - "notice", - "novel", - "now", - "nuclear", - "number", - "nurse", - "nut", - "oak", - "obey", - "object", - "oblige", - "obscure", - "observe", - "obtain", - "obvious", - "occur", - "ocean", - "october", - "odor", - "off", - "offer", - "office", - "often", - "oil", - "okay", - "old", - "olive", - "olympic", - "omit", - "once", - "one", - "onion", - "online", - "only", - "open", - "opera", - "opinion", - "oppose", - "option", - "orange", - "orbit", - "orchard", - "order", - "ordinary", - "organ", - "orient", - "original", - "orphan", - "ostrich", - "other", - "outdoor", - "outer", - "output", - "outside", - "oval", - "oven", - "over", - "own", - "owner", - "oxygen", - "oyster", - "ozone", - "pact", - "paddle", - "page", - "pair", - "palace", - "palm", - "panda", - "panel", - "panic", - "panther", - "paper", - "parade", - "parent", - "park", - "parrot", - "party", - "pass", - "patch", - "path", - "patient", - "patrol", - "pattern", - "pause", - "pave", - "payment", - "peace", - "peanut", - "pear", - "peasant", - "pelican", - "pen", - "penalty", - "pencil", - "people", - "pepper", - "perfect", - "permit", - "person", - "pet", - "phone", - "photo", - "phrase", - "physical", - "piano", - "picnic", - "picture", - "piece", - "pig", - "pigeon", - "pill", - "pilot", - "pink", - "pioneer", - "pipe", - "pistol", - "pitch", - "pizza", - "place", - "planet", - "plastic", - "plate", - "play", - "please", - "pledge", - "pluck", - "plug", - "plunge", - "poem", - "poet", - "point", - "polar", - "pole", - "police", - "pond", - "pony", - "pool", - "popular", - "portion", - "position", - "possible", - "post", - "potato", - "pottery", - "poverty", - "powder", - "power", - "practice", - "praise", - "predict", - "prefer", - "prepare", - "present", - "pretty", - "prevent", - "price", - "pride", - "primary", - "print", - "priority", - "prison", - "private", - "prize", - "problem", - "process", - "produce", - "profit", - "program", - "project", - "promote", - "proof", - "property", - "prosper", - "protect", - "proud", - "provide", - "public", - "pudding", - "pull", - "pulp", - "pulse", - "pumpkin", - "punch", - "pupil", - "puppy", - "purchase", - "purity", - "purpose", - "purse", - "push", - "put", - "puzzle", - "pyramid", - "quality", - "quantum", - "quarter", - "question", - "quick", - "quit", - "quiz", - "quote", - "rabbit", - "raccoon", - "race", - "rack", - "radar", - "radio", - "rail", - "rain", - "raise", - "rally", - "ramp", - "ranch", - "random", - "range", - "rapid", - "rare", - "rate", - "rather", - "raven", - "raw", - "razor", - "ready", - "real", - "reason", - "rebel", - "rebuild", - "recall", - "receive", - "recipe", - "record", - "recycle", - "reduce", - "reflect", - "reform", - "refuse", - "region", - "regret", - "regular", - "reject", - "relax", - "release", - "relief", - "rely", - "remain", - "remember", - "remind", - "remove", - "render", - "renew", - "rent", - "reopen", - "repair", - "repeat", - "replace", - "report", - "require", - "rescue", - "resemble", - "resist", - "resource", - "response", - "result", - "retire", - "retreat", - "return", - "reunion", - "reveal", - "review", - "reward", - "rhythm", - "rib", - "ribbon", - "rice", - "rich", - "ride", - "ridge", - "rifle", - "right", - "rigid", - "ring", - "riot", - "ripple", - "risk", - "ritual", - "rival", - "river", - "road", - "roast", - "robot", - "robust", - "rocket", - "romance", - "roof", - "rookie", - "room", - "rose", - "rotate", - "rough", - "round", - "route", - "royal", - "rubber", - "rude", - "rug", - "rule", - "run", - "runway", - "rural", - "sad", - "saddle", - "sadness", - "safe", - "sail", - "salad", - "salmon", - "salon", - "salt", - "salute", - "same", - "sample", - "sand", - "satisfy", - "satoshi", - "sauce", - "sausage", - "save", - "say", - "scale", - "scan", - "scare", - "scatter", - "scene", - "scheme", - "school", - "science", - "scissors", - "scorpion", - "scout", - "scrap", - "screen", - "script", - "scrub", - "sea", - "search", - "season", - "seat", - "second", - "secret", - "section", - "security", - "seed", - "seek", - "segment", - "select", - "sell", - "seminar", - "senior", - "sense", - "sentence", - "series", - "service", - "session", - "settle", - "setup", - "seven", - "shadow", - "shaft", - "shallow", - "share", - "shed", - "shell", - "sheriff", - "shield", - "shift", - "shine", - "ship", - "shiver", - "shock", - "shoe", - "shoot", - "shop", - "short", - "shoulder", - "shove", - "shrimp", - "shrug", - "shuffle", - "shy", - "sibling", - "sick", - "side", - "siege", - "sight", - "sign", - "silent", - "silk", - "silly", - "silver", - "similar", - "simple", - "since", - "sing", - "siren", - "sister", - "situate", - "six", - "size", - "skate", - "sketch", - "ski", - "skill", - "skin", - "skirt", - "skull", - "slab", - "slam", - "sleep", - "slender", - "slice", - "slide", - "slight", - "slim", - "slogan", - "slot", - "slow", - "slush", - "small", - "smart", - "smile", - "smoke", - "smooth", - "snack", - "snake", - "snap", - "sniff", - "snow", - "soap", - "soccer", - "social", - "sock", - "soda", - "soft", - "solar", - "soldier", - "solid", - "solution", - "solve", - "someone", - "song", - "soon", - "sorry", - "sort", - "soul", - "sound", - "soup", - "source", - "south", - "space", - "spare", - "spatial", - "spawn", - "speak", - "special", - "speed", - "spell", - "spend", - "sphere", - "spice", - "spider", - "spike", - "spin", - "spirit", - "split", - "spoil", - "sponsor", - "spoon", - "sport", - "spot", - "spray", - "spread", - "spring", - "spy", - "square", - "squeeze", - "squirrel", - "stable", - "stadium", - "staff", - "stage", - "stairs", - "stamp", - "stand", - "start", - "state", - "stay", - "steak", - "steel", - "stem", - "step", - "stereo", - "stick", - "still", - "sting", - "stock", - "stomach", - "stone", - "stool", - "story", - "stove", - "strategy", - "street", - "strike", - "strong", - "struggle", - "student", - "stuff", - "stumble", - "style", - "subject", - "submit", - "subway", - "success", - "such", - "sudden", - "suffer", - "sugar", - "suggest", - "suit", - "summer", - "sun", - "sunny", - "sunset", - "super", - "supply", - "supreme", - "sure", - "surface", - "surge", - "surprise", - "surround", - "survey", - "suspect", - "sustain", - "swallow", - "swamp", - "swap", - "swarm", - "swear", - "sweet", - "swift", - "swim", - "swing", - "switch", - "sword", - "symbol", - "symptom", - "syrup", - "system", - "table", - "tackle", - "tag", - "tail", - "talent", - "talk", - "tank", - "tape", - "target", - "task", - "taste", - "tattoo", - "taxi", - "teach", - "team", - "tell", - "ten", - "tenant", - "tennis", - "tent", - "term", - "test", - "text", - "thank", - "that", - "theme", - "then", - "theory", - "there", - "they", - "thing", - "this", - "thought", - "three", - "thrive", - "throw", - "thumb", - "thunder", - "ticket", - "tide", - "tiger", - "tilt", - "timber", - "time", - "tiny", - "tip", - "tired", - "tissue", - "title", - "toast", - "tobacco", - "today", - "toddler", - "toe", - "together", - "toilet", - "token", - "tomato", - "tomorrow", - "tone", - "tongue", - "tonight", - "tool", - "tooth", - "top", - "topic", - "topple", - "torch", - "tornado", - "tortoise", - "toss", - "total", - "tourist", - "toward", - "tower", - "town", - "toy", - "track", - "trade", - "traffic", - "tragic", - "train", - "transfer", - "trap", - "trash", - "travel", - "tray", - "treat", - "tree", - "trend", - "trial", - "tribe", - "trick", - "trigger", - "trim", - "trip", - "trophy", - "trouble", - "truck", - "true", - "truly", - "trumpet", - "trust", - "truth", - "try", - "tube", - "tuition", - "tumble", - "tuna", - "tunnel", - "turkey", - "turn", - "turtle", - "twelve", - "twenty", - "twice", - "twin", - "twist", - "two", - "type", - "typical", - "ugly", - "umbrella", - "unable", - "unaware", - "uncle", - "uncover", - "under", - "undo", - "unfair", - "unfold", - "unhappy", - "uniform", - "unique", - "unit", - "universe", - "unknown", - "unlock", - "until", - "unusual", - "unveil", - "update", - "upgrade", - "uphold", - "upon", - "upper", - "upset", - "urban", - "urge", - "usage", - "use", - "used", - "useful", - "useless", - "usual", - "utility", - "vacant", - "vacuum", - "vague", - "valid", - "valley", - "valve", - "van", - "vanish", - "vapor", - "various", - "vast", - "vault", - "vehicle", - "velvet", - "vendor", - "venture", - "venue", - "verb", - "verify", - "version", - "very", - "vessel", - "veteran", - "viable", - "vibrant", - "vicious", - "victory", - "video", - "view", - "village", - "vintage", - "violin", - "virtual", - "virus", - "visa", - "visit", - "visual", - "vital", - "vivid", - "vocal", - "voice", - "void", - "volcano", - "volume", - "vote", - "voyage", - "wage", - "wagon", - "wait", - "walk", - "wall", - "walnut", - "want", - "warfare", - "warm", - "warrior", - "wash", - "wasp", - "waste", - "water", - "wave", - "way", - "wealth", - "weapon", - "wear", - "weasel", - "weather", - "web", - "wedding", - "weekend", - "weird", - "welcome", - "west", - "wet", - "whale", - "what", - "wheat", - "wheel", - "when", - "where", - "whip", - "whisper", - "wide", - "width", - "wife", - "wild", - "will", - "win", - "window", - "wine", - "wing", - "wink", - "winner", - "winter", - "wire", - "wisdom", - "wise", - "wish", - "witness", - "wolf", - "woman", - "wonder", - "wood", - "wool", - "word", - "work", - "world", - "worry", - "worth", - "wrap", - "wreck", - "wrestle", - "wrist", - "write", - "wrong", - "yard", - "year", - "yellow", - "you", - "young", - "youth", - "zebra", - "zero", - "zone", - "zoo" -] diff --git a/node_modules/bip66/LICENSE b/node_modules/bip66/LICENSE deleted file mode 100644 index bba5218..0000000 --- a/node_modules/bip66/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Daniel Cousens - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/bip66/README.md b/node_modules/bip66/README.md deleted file mode 100644 index a710664..0000000 --- a/node_modules/bip66/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# bip66 - -[![NPM Package](https://img.shields.io/npm/v/bip66.svg?style=flat-square)](https://www.npmjs.org/package/bip66) -[![Build Status](https://img.shields.io/travis/bitcoinjs/bip66.svg?branch=master&style=flat-square)](https://travis-ci.org/bitcoinjs/bip66) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -Strict DER signature encoding/decoding. - -See [bip66](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki). - -- This module **works only with [two's complement](https://en.wikipedia.org/wiki/Two's_complement) numbers**. -- BIP66 doesn't check that `r` or `s` are fully valid. - - `check`/`decode` doesn't check that `r` or `s` great than 33 bytes or that this number represent valid point on elliptic curve. - - `encode` doesn't check that `r`/`s` represent valid point on elliptic curve. - -## Example - -``` javascript -var bip66 = require('bip66') -var r = new Buffer('1ea1fdff81b3a271659df4aad19bc4ef83def389131a36358fe64b245632e777', 'hex') -var s = new Buffer('29e164658be9ce810921bf81d6b86694785a79ea1e52dbfa5105148d1f0bc1', 'hex') - -bip66.encode(r, s) -// Buffer <30 43 02 20 1e a1 fd ff 81 b3 a2 71 65 9d f4 aa d1 9b c4 ef 83 de f3 89 13 1a 36 35 8f e6 4b 24 56 32 e7 77 02 1f 29 e1 64 65 8b e9 ce 81 09 21 bf 81 d6 b8 66 94 78 5a 79 ea 1e 52 db fa 51 05 14 8d 1f 0b c1> - -var signature = new Buffer('304302201ea1fdff81b3a271659df4aad19bc4ef83def389131a36358fe64b245632e777021f29e164658be9ce810921bf81d6b86694785a79ea1e52dbfa5105148d1f0bc1', 'hex') -bip66.decode(signature) -// => { -// r: Buffer <1e a1 fd ff 81 b3 a2 71 65 9d f4 aa d1 9b c4 ef 83 de f3 89 13 1a 36 35 8f e6 4b 24 56 32 e7 77>, -// s: Buffer <29 e1 64 65 8b e9 ce 81 09 21 bf 81 d6 b8 66 94 78 5a 79 ea 1e 52 db fa 51 05 14 8d 1f 0b c1> -// } -``` - -A catch-all exception regex: -``` javascript -/Expected DER (integer|sequence)|(R|S) value (excessively padded|is negative)|(R|S|DER sequence) length is (zero|too short|too long|invalid)/ -``` - -## LICENSE [MIT](LICENSE) diff --git a/node_modules/bip66/index.js b/node_modules/bip66/index.js deleted file mode 100644 index d750c6c..0000000 --- a/node_modules/bip66/index.js +++ /dev/null @@ -1,111 +0,0 @@ -// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki -// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] -// NOTE: SIGHASH byte ignored AND restricted, truncate before use - -function check (buffer) { - if (buffer.length < 8) return false - if (buffer.length > 72) return false - if (buffer[0] !== 0x30) return false - if (buffer[1] !== buffer.length - 2) return false - if (buffer[2] !== 0x02) return false - - var lenR = buffer[3] - if (lenR === 0) return false - if (5 + lenR >= buffer.length) return false - if (buffer[4 + lenR] !== 0x02) return false - - var lenS = buffer[5 + lenR] - if (lenS === 0) return false - if ((6 + lenR + lenS) !== buffer.length) return false - - if (buffer[4] & 0x80) return false - if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false - - if (buffer[lenR + 6] & 0x80) return false - if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false - return true -} - -function decode (buffer) { - if (buffer.length < 8) throw new Error('DER sequence length is too short') - if (buffer.length > 72) throw new Error('DER sequence length is too long') - if (buffer[0] !== 0x30) throw new Error('Expected DER sequence') - if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid') - if (buffer[2] !== 0x02) throw new Error('Expected DER integer') - - var lenR = buffer[3] - if (lenR === 0) throw new Error('R length is zero') - if (5 + lenR >= buffer.length) throw new Error('R length is too long') - if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)') - - var lenS = buffer[5 + lenR] - if (lenS === 0) throw new Error('S length is zero') - if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid') - - if (buffer[4] & 0x80) throw new Error('R value is negative') - if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded') - - if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative') - if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded') - - // non-BIP66 - extract R, S values - return { - r: buffer.slice(4, 4 + lenR), - s: buffer.slice(6 + lenR) - } -} - -/* - * Expects r and s to be positive DER integers. - * - * The DER format uses the most significant bit as a sign bit (& 0x80). - * If the significant bit is set AND the integer is positive, a 0x00 is prepended. - * - * Examples: - * - * 0 => 0x00 - * 1 => 0x01 - * -1 => 0xff - * 127 => 0x7f - * -127 => 0x81 - * 128 => 0x0080 - * -128 => 0x80 - * 255 => 0x00ff - * -255 => 0xff01 - * 16300 => 0x3fac - * -16300 => 0xc054 - * 62300 => 0x00f35c - * -62300 => 0xff0ca4 -*/ -function encode (r, s) { - var lenR = r.length - var lenS = s.length - if (lenR === 0) throw new Error('R length is zero') - if (lenS === 0) throw new Error('S length is zero') - if (lenR > 33) throw new Error('R length is too long') - if (lenS > 33) throw new Error('S length is too long') - if (r[0] & 0x80) throw new Error('R value is negative') - if (s[0] & 0x80) throw new Error('S value is negative') - if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded') - if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded') - - var signature = new Buffer(6 + lenR + lenS) - - // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] - signature[0] = 0x30 - signature[1] = signature.length - 2 - signature[2] = 0x02 - signature[3] = r.length - r.copy(signature, 4) - signature[4 + lenR] = 0x02 - signature[5 + lenR] = s.length - s.copy(signature, 6 + lenR) - - return signature -} - -module.exports = { - check: check, - decode: decode, - encode: encode -} diff --git a/node_modules/bip66/package.json b/node_modules/bip66/package.json deleted file mode 100644 index b673464..0000000 --- a/node_modules/bip66/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "bip66@^1.1.3", - "/Users/jbaylina/git/MVP/node_modules/secp256k1" - ] - ], - "_from": "bip66@>=1.1.3 <2.0.0", - "_id": "bip66@1.1.4", - "_inCache": true, - "_installable": true, - "_location": "/bip66", - "_nodeVersion": "5.11.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/bip66-1.1.4.tgz_1461738558360_0.0511821040417999" - }, - "_npmUser": { - "email": "email@dcousens.com", - "name": "dcousens" - }, - "_npmVersion": "3.8.7", - "_phantomChildren": {}, - "_requested": { - "name": "bip66", - "raw": "bip66@^1.1.3", - "rawSpec": "^1.1.3", - "scope": null, - "spec": ">=1.1.3 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/secp256k1" - ], - "_resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.4.tgz", - "_shasum": "8a59f8ae16eccb94681c3c2a7b224774605aadfb", - "_shrinkwrap": null, - "_spec": "bip66@^1.1.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/secp256k1", - "author": { - "name": "Daniel Cousens" - }, - "bugs": { - "url": "https://github.com/bitcoinjs/bip66/issues" - }, - "dependencies": {}, - "description": "Strict DER signature encoding/decoding.", - "devDependencies": { - "nyc": "^6.4.0", - "standard": "^6.0.8", - "tape": "^4.5.1" - }, - "directories": {}, - "dist": { - "shasum": "8a59f8ae16eccb94681c3c2a7b224774605aadfb", - "tarball": "https://registry.npmjs.org/bip66/-/bip66-1.1.4.tgz" - }, - "files": [ - "index.js" - ], - "gitHead": "52147a4b365ac24bb3d77d5af50d300498dda0ff", - "homepage": "https://github.com/bitcoinjs/bip66", - "keywords": [ - "bip66", - "bitcoin" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "email@dcousens.com", - "name": "dcousens" - } - ], - "name": "bip66", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/bitcoinjs/bip66.git" - }, - "scripts": { - "coverage": "nyc --check-coverage --branches 100 --functions 100 tape test/*.js", - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "tape test/*.js" - }, - "version": "1.1.4" -} diff --git a/node_modules/bl/.jshintrc b/node_modules/bl/.jshintrc deleted file mode 100644 index c8ef3ca..0000000 --- a/node_modules/bl/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "predef": [ ] - , "bitwise": false - , "camelcase": false - , "curly": false - , "eqeqeq": false - , "forin": false - , "immed": false - , "latedef": false - , "noarg": true - , "noempty": true - , "nonew": true - , "plusplus": false - , "quotmark": true - , "regexp": false - , "undef": true - , "unused": true - , "strict": false - , "trailing": true - , "maxlen": 120 - , "asi": true - , "boss": true - , "debug": true - , "eqnull": true - , "esnext": true - , "evil": true - , "expr": true - , "funcscope": false - , "globalstrict": false - , "iterator": false - , "lastsemic": true - , "laxbreak": true - , "laxcomma": true - , "loopfunc": true - , "multistr": false - , "onecase": false - , "proto": false - , "regexdash": false - , "scripturl": true - , "smarttabs": false - , "shadow": false - , "sub": true - , "supernew": false - , "validthis": true - , "browser": true - , "couch": false - , "devel": false - , "dojo": false - , "mootools": false - , "node": true - , "nonstandard": true - , "prototypejs": false - , "rhino": false - , "worker": true - , "wsh": false - , "nomen": false - , "onevar": false - , "passfail": false -} \ No newline at end of file diff --git a/node_modules/bl/.npmignore b/node_modules/bl/.npmignore deleted file mode 100644 index 40b878d..0000000 --- a/node_modules/bl/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ \ No newline at end of file diff --git a/node_modules/bl/.travis.yml b/node_modules/bl/.travis.yml deleted file mode 100644 index 5cb0480..0000000 --- a/node_modules/bl/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -sudo: false -language: node_js -node_js: - - '0.10' - - '0.12' - - '4' - - '5' -branches: - only: - - master -notifications: - email: - - rod@vagg.org diff --git a/node_modules/bl/LICENSE.md b/node_modules/bl/LICENSE.md deleted file mode 100644 index ccb2479..0000000 --- a/node_modules/bl/LICENSE.md +++ /dev/null @@ -1,13 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2014 bl contributors ----------------------------------- - -*bl contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/bl/README.md b/node_modules/bl/README.md deleted file mode 100644 index f7044db..0000000 --- a/node_modules/bl/README.md +++ /dev/null @@ -1,200 +0,0 @@ -# bl *(BufferList)* - -[![Build Status](https://travis-ci.org/rvagg/bl.svg?branch=master)](https://travis-ci.org/rvagg/bl) - -**A Node.js Buffer list collector, reader and streamer thingy.** - -[![NPM](https://nodei.co/npm/bl.png?downloads=true&downloadRank=true)](https://nodei.co/npm/bl/) -[![NPM](https://nodei.co/npm-dl/bl.png?months=6&height=3)](https://nodei.co/npm/bl/) - -**bl** is a storage object for collections of Node Buffers, exposing them with the main Buffer readable API. Also works as a duplex stream so you can collect buffers from a stream that emits them and emit buffers to a stream that consumes them! - -The original buffers are kept intact and copies are only done as necessary. Any reads that require the use of a single original buffer will return a slice of that buffer only (which references the same memory as the original buffer). Reads that span buffers perform concatenation as required and return the results transparently. - -```js -const BufferList = require('bl') - -var bl = new BufferList() -bl.append(new Buffer('abcd')) -bl.append(new Buffer('efg')) -bl.append('hi') // bl will also accept & convert Strings -bl.append(new Buffer('j')) -bl.append(new Buffer([ 0x3, 0x4 ])) - -console.log(bl.length) // 12 - -console.log(bl.slice(0, 10).toString('ascii')) // 'abcdefghij' -console.log(bl.slice(3, 10).toString('ascii')) // 'defghij' -console.log(bl.slice(3, 6).toString('ascii')) // 'def' -console.log(bl.slice(3, 8).toString('ascii')) // 'defgh' -console.log(bl.slice(5, 10).toString('ascii')) // 'fghij' - -// or just use toString! -console.log(bl.toString()) // 'abcdefghij\u0003\u0004' -console.log(bl.toString('ascii', 3, 8)) // 'defgh' -console.log(bl.toString('ascii', 5, 10)) // 'fghij' - -// other standard Buffer readables -console.log(bl.readUInt16BE(10)) // 0x0304 -console.log(bl.readUInt16LE(10)) // 0x0403 -``` - -Give it a callback in the constructor and use it just like **[concat-stream](https://github.com/maxogden/node-concat-stream)**: - -```js -const bl = require('bl') - , fs = require('fs') - -fs.createReadStream('README.md') - .pipe(bl(function (err, data) { // note 'new' isn't strictly required - // `data` is a complete Buffer object containing the full data - console.log(data.toString()) - })) -``` - -Note that when you use the *callback* method like this, the resulting `data` parameter is a concatenation of all `Buffer` objects in the list. If you want to avoid the overhead of this concatenation (in cases of extreme performance consciousness), then avoid the *callback* method and just listen to `'end'` instead, like a standard Stream. - -Or to fetch a URL using [hyperquest](https://github.com/substack/hyperquest) (should work with [request](http://github.com/mikeal/request) and even plain Node http too!): -```js -const hyperquest = require('hyperquest') - , bl = require('bl') - , url = 'https://raw.github.com/rvagg/bl/master/README.md' - -hyperquest(url).pipe(bl(function (err, data) { - console.log(data.toString()) -})) -``` - -Or, use it as a readable stream to recompose a list of Buffers to an output source: - -```js -const BufferList = require('bl') - , fs = require('fs') - -var bl = new BufferList() -bl.append(new Buffer('abcd')) -bl.append(new Buffer('efg')) -bl.append(new Buffer('hi')) -bl.append(new Buffer('j')) - -bl.pipe(fs.createWriteStream('gibberish.txt')) -``` - -## API - - * new BufferList([ callback ]) - * bl.length - * bl.append(buffer) - * bl.get(index) - * bl.slice([ start[, end ] ]) - * bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ]) - * bl.duplicate() - * bl.consume(bytes) - * bl.toString([encoding, [ start, [ end ]]]) - * bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8() - * Streams - --------------------------------------------------------- - -### new BufferList([ callback | Buffer | Buffer array | BufferList | BufferList array | String ]) -The constructor takes an optional callback, if supplied, the callback will be called with an error argument followed by a reference to the **bl** instance, when `bl.end()` is called (i.e. from a piped stream). This is a convenient method of collecting the entire contents of a stream, particularly when the stream is *chunky*, such as a network stream. - -Normally, no arguments are required for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` object. - -`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with: - -```js -var bl = require('bl') -var myinstance = bl() - -// equivilant to: - -var BufferList = require('bl') -var myinstance = new BufferList() -``` - --------------------------------------------------------- - -### bl.length -Get the length of the list in bytes. This is the sum of the lengths of all of the buffers contained in the list, minus any initial offset for a semi-consumed buffer at the beginning. Should accurately represent the total number of bytes that can be read from the list. - --------------------------------------------------------- - -### bl.append(Buffer | Buffer array | BufferList | BufferList array | String) -`append(buffer)` adds an additional buffer or BufferList to the internal list. `this` is returned so it can be chained. - --------------------------------------------------------- - -### bl.get(index) -`get()` will return the byte at the specified index. - --------------------------------------------------------- - -### bl.slice([ start, [ end ] ]) -`slice()` returns a new `Buffer` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively. - -If the requested range spans a single internal buffer then a slice of that buffer will be returned which shares the original memory range of that Buffer. If the range spans multiple buffers then copy operations will likely occur to give you a uniform Buffer. - --------------------------------------------------------- - -### bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ]) -`copy()` copies the content of the list in the `dest` buffer, starting from `destStart` and containing the bytes within the range specified with `srcStart` to `srcEnd`. `destStart`, `start` and `end` are optional and will default to the beginning of the `dest` buffer, and the beginning and end of the list respectively. - --------------------------------------------------------- - -### bl.duplicate() -`duplicate()` performs a **shallow-copy** of the list. The internal Buffers remains the same, so if you change the underlying Buffers, the change will be reflected in both the original and the duplicate. This method is needed if you want to call `consume()` or `pipe()` and still keep the original list.Example: - -```js -var bl = new BufferList() - -bl.append('hello') -bl.append(' world') -bl.append('\n') - -bl.duplicate().pipe(process.stdout, { end: false }) - -console.log(bl.toString()) -``` - --------------------------------------------------------- - -### bl.consume(bytes) -`consume()` will shift bytes *off the start of the list*. The number of bytes consumed don't need to line up with the sizes of the internal Buffers—initial offsets will be calculated accordingly in order to give you a consistent view of the data. - --------------------------------------------------------- - -### bl.toString([encoding, [ start, [ end ]]]) -`toString()` will return a string representation of the buffer. The optional `start` and `end` arguments are passed on to `slice()`, while the `encoding` is passed on to `toString()` of the resulting Buffer. See the [Buffer#toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end) documentation for more information. - --------------------------------------------------------- - -### bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8() - -All of the standard byte-reading methods of the `Buffer` interface are implemented and will operate across internal Buffer boundaries transparently. - -See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work. - --------------------------------------------------------- - -### Streams -**bl** is a Node **[Duplex Stream](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_duplex)**, so it can be read from and written to like a standard Node stream. You can also `pipe()` to and from a **bl** instance. - --------------------------------------------------------- - -## Contributors - -**bl** is brought to you by the following hackers: - - * [Rod Vagg](https://github.com/rvagg) - * [Matteo Collina](https://github.com/mcollina) - * [Jarett Cruger](https://github.com/jcrugzz) - -======= - - -## License & copyright - -Copyright (c) 2013-2014 bl contributors (listed above). - -bl is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/node_modules/bl/bl.js b/node_modules/bl/bl.js deleted file mode 100644 index f585df1..0000000 --- a/node_modules/bl/bl.js +++ /dev/null @@ -1,243 +0,0 @@ -var DuplexStream = require('readable-stream/duplex') - , util = require('util') - - -function BufferList (callback) { - if (!(this instanceof BufferList)) - return new BufferList(callback) - - this._bufs = [] - this.length = 0 - - if (typeof callback == 'function') { - this._callback = callback - - var piper = function piper (err) { - if (this._callback) { - this._callback(err) - this._callback = null - } - }.bind(this) - - this.on('pipe', function onPipe (src) { - src.on('error', piper) - }) - this.on('unpipe', function onUnpipe (src) { - src.removeListener('error', piper) - }) - } else { - this.append(callback) - } - - DuplexStream.call(this) -} - - -util.inherits(BufferList, DuplexStream) - - -BufferList.prototype._offset = function _offset (offset) { - var tot = 0, i = 0, _t - for (; i < this._bufs.length; i++) { - _t = tot + this._bufs[i].length - if (offset < _t) - return [ i, offset - tot ] - tot = _t - } -} - - -BufferList.prototype.append = function append (buf) { - var i = 0 - , newBuf - - if (Array.isArray(buf)) { - for (; i < buf.length; i++) - this.append(buf[i]) - } else if (buf instanceof BufferList) { - // unwrap argument into individual BufferLists - for (; i < buf._bufs.length; i++) - this.append(buf._bufs[i]) - } else if (buf != null) { - // coerce number arguments to strings, since Buffer(number) does - // uninitialized memory allocation - if (typeof buf == 'number') - buf = buf.toString() - - newBuf = Buffer.isBuffer(buf) ? buf : new Buffer(buf) - this._bufs.push(newBuf) - this.length += newBuf.length - } - - return this -} - - -BufferList.prototype._write = function _write (buf, encoding, callback) { - this.append(buf) - - if (typeof callback == 'function') - callback() -} - - -BufferList.prototype._read = function _read (size) { - if (!this.length) - return this.push(null) - - size = Math.min(size, this.length) - this.push(this.slice(0, size)) - this.consume(size) -} - - -BufferList.prototype.end = function end (chunk) { - DuplexStream.prototype.end.call(this, chunk) - - if (this._callback) { - this._callback(null, this.slice()) - this._callback = null - } -} - - -BufferList.prototype.get = function get (index) { - return this.slice(index, index + 1)[0] -} - - -BufferList.prototype.slice = function slice (start, end) { - return this.copy(null, 0, start, end) -} - - -BufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) { - if (typeof srcStart != 'number' || srcStart < 0) - srcStart = 0 - if (typeof srcEnd != 'number' || srcEnd > this.length) - srcEnd = this.length - if (srcStart >= this.length) - return dst || new Buffer(0) - if (srcEnd <= 0) - return dst || new Buffer(0) - - var copy = !!dst - , off = this._offset(srcStart) - , len = srcEnd - srcStart - , bytes = len - , bufoff = (copy && dstStart) || 0 - , start = off[1] - , l - , i - - // copy/slice everything - if (srcStart === 0 && srcEnd == this.length) { - if (!copy) // slice, just return a full concat - return Buffer.concat(this._bufs) - - // copy, need to copy individual buffers - for (i = 0; i < this._bufs.length; i++) { - this._bufs[i].copy(dst, bufoff) - bufoff += this._bufs[i].length - } - - return dst - } - - // easy, cheap case where it's a subset of one of the buffers - if (bytes <= this._bufs[off[0]].length - start) { - return copy - ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) - : this._bufs[off[0]].slice(start, start + bytes) - } - - if (!copy) // a slice, we need something to copy in to - dst = new Buffer(len) - - for (i = off[0]; i < this._bufs.length; i++) { - l = this._bufs[i].length - start - - if (bytes > l) { - this._bufs[i].copy(dst, bufoff, start) - } else { - this._bufs[i].copy(dst, bufoff, start, start + bytes) - break - } - - bufoff += l - bytes -= l - - if (start) - start = 0 - } - - return dst -} - -BufferList.prototype.toString = function toString (encoding, start, end) { - return this.slice(start, end).toString(encoding) -} - -BufferList.prototype.consume = function consume (bytes) { - while (this._bufs.length) { - if (bytes >= this._bufs[0].length) { - bytes -= this._bufs[0].length - this.length -= this._bufs[0].length - this._bufs.shift() - } else { - this._bufs[0] = this._bufs[0].slice(bytes) - this.length -= bytes - break - } - } - return this -} - - -BufferList.prototype.duplicate = function duplicate () { - var i = 0 - , copy = new BufferList() - - for (; i < this._bufs.length; i++) - copy.append(this._bufs[i]) - - return copy -} - - -BufferList.prototype.destroy = function destroy () { - this._bufs.length = 0 - this.length = 0 - this.push(null) -} - - -;(function () { - var methods = { - 'readDoubleBE' : 8 - , 'readDoubleLE' : 8 - , 'readFloatBE' : 4 - , 'readFloatLE' : 4 - , 'readInt32BE' : 4 - , 'readInt32LE' : 4 - , 'readUInt32BE' : 4 - , 'readUInt32LE' : 4 - , 'readInt16BE' : 2 - , 'readInt16LE' : 2 - , 'readUInt16BE' : 2 - , 'readUInt16LE' : 2 - , 'readInt8' : 1 - , 'readUInt8' : 1 - } - - for (var m in methods) { - (function (m) { - BufferList.prototype[m] = function (offset) { - return this.slice(offset, offset + methods[m])[m](0) - } - }(m)) - } -}()) - - -module.exports = BufferList diff --git a/node_modules/bl/node_modules/isarray/.npmignore b/node_modules/bl/node_modules/isarray/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/bl/node_modules/isarray/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/bl/node_modules/isarray/.travis.yml b/node_modules/bl/node_modules/isarray/.travis.yml deleted file mode 100644 index cc4dba2..0000000 --- a/node_modules/bl/node_modules/isarray/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/bl/node_modules/isarray/Makefile b/node_modules/bl/node_modules/isarray/Makefile deleted file mode 100644 index 787d56e..0000000 --- a/node_modules/bl/node_modules/isarray/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -test: - @node_modules/.bin/tape test.js - -.PHONY: test - diff --git a/node_modules/bl/node_modules/isarray/README.md b/node_modules/bl/node_modules/isarray/README.md deleted file mode 100644 index 16d2c59..0000000 --- a/node_modules/bl/node_modules/isarray/README.md +++ /dev/null @@ -1,60 +0,0 @@ - -# isarray - -`Array#isArray` for older browsers. - -[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) -[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) - -[![browser support](https://ci.testling.com/juliangruber/isarray.png) -](https://ci.testling.com/juliangruber/isarray) - -## Usage - -```js -var isArray = require('isarray'); - -console.log(isArray([])); // => true -console.log(isArray({})); // => false -``` - -## Installation - -With [npm](http://npmjs.org) do - -```bash -$ npm install isarray -``` - -Then bundle for the browser with -[browserify](https://github.com/substack/browserify). - -With [component](http://component.io) do - -```bash -$ component install juliangruber/isarray -``` - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/bl/node_modules/isarray/component.json b/node_modules/bl/node_modules/isarray/component.json deleted file mode 100644 index 9e31b68..0000000 --- a/node_modules/bl/node_modules/isarray/component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name" : "isarray", - "description" : "Array#isArray for older browsers", - "version" : "0.0.1", - "repository" : "juliangruber/isarray", - "homepage": "https://github.com/juliangruber/isarray", - "main" : "index.js", - "scripts" : [ - "index.js" - ], - "dependencies" : {}, - "keywords": ["browser","isarray","array"], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT" -} diff --git a/node_modules/bl/node_modules/isarray/index.js b/node_modules/bl/node_modules/isarray/index.js deleted file mode 100644 index a57f634..0000000 --- a/node_modules/bl/node_modules/isarray/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; diff --git a/node_modules/bl/node_modules/isarray/package.json b/node_modules/bl/node_modules/isarray/package.json deleted file mode 100644 index 518626b..0000000 --- a/node_modules/bl/node_modules/isarray/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "isarray@~1.0.0", - "/Users/jbaylina/git/MVP/node_modules/bl/node_modules/readable-stream" - ] - ], - "_from": "isarray@>=1.0.0 <1.1.0", - "_id": "isarray@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/bl/isarray", - "_nodeVersion": "5.1.0", - "_npmUser": { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "isarray", - "raw": "isarray@~1.0.0", - "rawSpec": "~1.0.0", - "scope": null, - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/bl/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "_shasum": "bb935d48582cba168c06834957a54a3e07124f11", - "_shrinkwrap": null, - "_spec": "isarray@~1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/bl/node_modules/readable-stream", - "author": { - "email": "mail@juliangruber.com", - "name": "Julian Gruber", - "url": "http://juliangruber.com" - }, - "bugs": { - "url": "https://github.com/juliangruber/isarray/issues" - }, - "dependencies": {}, - "description": "Array#isArray for older browsers", - "devDependencies": { - "tape": "~2.13.4" - }, - "directories": {}, - "dist": { - "shasum": "bb935d48582cba168c06834957a54a3e07124f11", - "tarball": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - }, - "gitHead": "2a23a281f369e9ae06394c0fb4d2381355a6ba33", - "homepage": "https://github.com/juliangruber/isarray", - "keywords": [ - "browser", - "isarray", - "array" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - } - ], - "name": "isarray", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/isarray.git" - }, - "scripts": { - "test": "tape test.js" - }, - "testling": { - "browsers": [ - "ie/8..latest", - "firefox/17..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ], - "files": "test.js" - }, - "version": "1.0.0" -} diff --git a/node_modules/bl/node_modules/isarray/test.js b/node_modules/bl/node_modules/isarray/test.js deleted file mode 100644 index e0c3444..0000000 --- a/node_modules/bl/node_modules/isarray/test.js +++ /dev/null @@ -1,20 +0,0 @@ -var isArray = require('./'); -var test = require('tape'); - -test('is array', function(t){ - t.ok(isArray([])); - t.notOk(isArray({})); - t.notOk(isArray(null)); - t.notOk(isArray(false)); - - var obj = {}; - obj[0] = true; - t.notOk(isArray(obj)); - - var arr = []; - arr.foo = 'bar'; - t.ok(isArray(arr)); - - t.end(); -}); - diff --git a/node_modules/bl/node_modules/readable-stream/.npmignore b/node_modules/bl/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f8..0000000 --- a/node_modules/bl/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/bl/node_modules/readable-stream/.travis.yml b/node_modules/bl/node_modules/readable-stream/.travis.yml deleted file mode 100644 index 1b82118..0000000 --- a/node_modules/bl/node_modules/readable-stream/.travis.yml +++ /dev/null @@ -1,52 +0,0 @@ -sudo: false -language: node_js -before_install: - - npm install -g npm@2 - - npm install -g npm -notifications: - email: false -matrix: - fast_finish: true - allow_failures: - - env: TASK=browser BROWSER_NAME=ipad BROWSER_VERSION="6.0..latest" - - env: TASK=browser BROWSER_NAME=iphone BROWSER_VERSION="6.0..latest" - include: - - node_js: '0.8' - env: TASK=test - - node_js: '0.10' - env: TASK=test - - node_js: '0.11' - env: TASK=test - - node_js: '0.12' - env: TASK=test - - node_js: 1 - env: TASK=test - - node_js: 2 - env: TASK=test - - node_js: 3 - env: TASK=test - - node_js: 4 - env: TASK=test - - node_js: 5 - env: TASK=test - - node_js: 5 - env: TASK=browser BROWSER_NAME=android BROWSER_VERSION="4.0..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=ie BROWSER_VERSION="9..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=opera BROWSER_VERSION="11..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=chrome BROWSER_VERSION="-3..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=firefox BROWSER_VERSION="-3..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=ipad BROWSER_VERSION="6.0..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=iphone BROWSER_VERSION="6.0..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=safari BROWSER_VERSION="5..latest" -script: "npm run $TASK" -env: - global: - - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= - - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_modules/bl/node_modules/readable-stream/.zuul.yml b/node_modules/bl/node_modules/readable-stream/.zuul.yml deleted file mode 100644 index 96d9cfb..0000000 --- a/node_modules/bl/node_modules/readable-stream/.zuul.yml +++ /dev/null @@ -1 +0,0 @@ -ui: tape diff --git a/node_modules/bl/node_modules/readable-stream/LICENSE b/node_modules/bl/node_modules/readable-stream/LICENSE deleted file mode 100644 index e3d4e69..0000000 --- a/node_modules/bl/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/node_modules/bl/node_modules/readable-stream/README.md b/node_modules/bl/node_modules/readable-stream/README.md deleted file mode 100644 index 86b95a3..0000000 --- a/node_modules/bl/node_modules/readable-stream/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# readable-stream - -***Node-core v5.8.0 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) - - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) - -```bash -npm install --save readable-stream -``` - -***Node-core streams for userland*** - -This package is a mirror of the Streams2 and Streams3 implementations in -Node-core, including [documentation](doc/stream.markdown). - -If you want to guarantee a stable streams base, regardless of what version of -Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). - -As of version 2.0.0 **readable-stream** uses semantic versioning. - -# Streams WG Team Members - -* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> - - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B -* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> - - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D -* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> -* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> diff --git a/node_modules/bl/node_modules/readable-stream/doc/stream.markdown b/node_modules/bl/node_modules/readable-stream/doc/stream.markdown deleted file mode 100644 index 0bc3819..0000000 --- a/node_modules/bl/node_modules/readable-stream/doc/stream.markdown +++ /dev/null @@ -1,1760 +0,0 @@ -# Stream - - Stability: 2 - Stable - -A stream is an abstract interface implemented by various objects in -Node.js. For example a [request to an HTTP server][http-incoming-message] is a -stream, as is [`process.stdout`][]. Streams are readable, writable, or both. All -streams are instances of [`EventEmitter`][]. - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for [Readable][] streams, [Writable][] -streams, [Duplex][] streams, and [Transform][] streams. - -This document is split up into 3 sections: - -1. The first section explains the parts of the API that you need to be - aware of to use streams in your programs. -2. The second section explains the parts of the API that you need to - use if you implement your own custom streams yourself. The API is designed to - make this easy for you to do. -3. The third section goes into more depth about how streams work, - including some of the internal mechanisms and functions that you - should probably not modify unless you definitely know what you are - doing. - - -## API for Stream Consumers - - - -Streams can be either [Readable][], [Writable][], or both ([Duplex][]). - -All streams are EventEmitters, but they also have other custom methods -and properties depending on whether they are Readable, Writable, or -Duplex. - -If a stream is both Readable and Writable, then it implements all of -the methods and events. So, a [Duplex][] or [Transform][] stream is -fully described by this API, though their implementation may be -somewhat different. - -It is not necessary to implement Stream interfaces in order to consume -streams in your programs. If you **are** implementing streaming -interfaces in your own program, please also refer to -[API for Stream Implementors][]. - -Almost all Node.js programs, no matter how simple, use Streams in some -way. Here is an example of using Streams in an Node.js program: - -```js -const http = require('http'); - -var server = http.createServer( (req, res) => { - // req is an http.IncomingMessage, which is a Readable Stream - // res is an http.ServerResponse, which is a Writable Stream - - var body = ''; - // we want to get the data as utf8 strings - // If you don't set an encoding, then you'll get Buffer objects - req.setEncoding('utf8'); - - // Readable streams emit 'data' events once a listener is added - req.on('data', (chunk) => { - body += chunk; - }); - - // the end event tells you that you have entire body - req.on('end', () => { - try { - var data = JSON.parse(body); - } catch (er) { - // uh oh! bad json! - res.statusCode = 400; - return res.end(`error: ${er.message}`); - } - - // write back something interesting to the user: - res.write(typeof data); - res.end(); - }); -}); - -server.listen(1337); - -// $ curl localhost:1337 -d '{}' -// object -// $ curl localhost:1337 -d '"foo"' -// string -// $ curl localhost:1337 -d 'not json' -// error: Unexpected token o -``` - -### Class: stream.Duplex - -Duplex streams are streams that implement both the [Readable][] and -[Writable][] interfaces. - -Examples of Duplex streams include: - -* [TCP sockets][] -* [zlib streams][zlib] -* [crypto streams][crypto] - -### Class: stream.Readable - - - -The Readable stream interface is the abstraction for a *source* of -data that you are reading from. In other words, data comes *out* of a -Readable stream. - -A Readable stream will not start emitting data until you indicate that -you are ready to receive it. - -Readable streams have two "modes": a **flowing mode** and a **paused -mode**. When in flowing mode, data is read from the underlying system -and provided to your program as fast as possible. In paused mode, you -must explicitly call [`stream.read()`][stream-read] to get chunks of data out. -Streams start out in paused mode. - -**Note**: If no data event handlers are attached, and there are no -[`stream.pipe()`][] destinations, and the stream is switched into flowing -mode, then data will be lost. - -You can switch to flowing mode by doing any of the following: - -* Adding a [`'data'`][] event handler to listen for data. -* Calling the [`stream.resume()`][stream-resume] method to explicitly open the - flow. -* Calling the [`stream.pipe()`][] method to send the data to a [Writable][]. - -You can switch back to paused mode by doing either of the following: - -* If there are no pipe destinations, by calling the - [`stream.pause()`][stream-pause] method. -* If there are pipe destinations, by removing any [`'data'`][] event - handlers, and removing all pipe destinations by calling the - [`stream.unpipe()`][] method. - -Note that, for backwards compatibility reasons, removing [`'data'`][] -event handlers will **not** automatically pause the stream. Also, if -there are piped destinations, then calling [`stream.pause()`][stream-pause] will -not guarantee that the stream will *remain* paused once those -destinations drain and ask for more data. - -Examples of readable streams include: - -* [HTTP responses, on the client][http-incoming-message] -* [HTTP requests, on the server][http-incoming-message] -* [fs read streams][] -* [zlib streams][zlib] -* [crypto streams][crypto] -* [TCP sockets][] -* [child process stdout and stderr][] -* [`process.stdin`][] - -#### Event: 'close' - -Emitted when the stream and any of its underlying resources (a file -descriptor, for example) have been closed. The event indicates that -no more events will be emitted, and no further computation will occur. - -Not all streams will emit the `'close'` event. - -#### Event: 'data' - -* `chunk` {Buffer|String} The chunk of data. - -Attaching a `'data'` event listener to a stream that has not been -explicitly paused will switch the stream into flowing mode. Data will -then be passed as soon as it is available. - -If you just want to get all the data out of the stream as fast as -possible, this is the best way to do so. - -```js -var readable = getReadableStreamSomehow(); -readable.on('data', (chunk) => { - console.log('got %d bytes of data', chunk.length); -}); -``` - -#### Event: 'end' - -This event fires when there will be no more data to read. - -Note that the `'end'` event **will not fire** unless the data is -completely consumed. This can be done by switching into flowing mode, -or by calling [`stream.read()`][stream-read] repeatedly until you get to the -end. - -```js -var readable = getReadableStreamSomehow(); -readable.on('data', (chunk) => { - console.log('got %d bytes of data', chunk.length); -}); -readable.on('end', () => { - console.log('there will be no more data.'); -}); -``` - -#### Event: 'error' - -* {Error Object} - -Emitted if there was an error receiving data. - -#### Event: 'readable' - -When a chunk of data can be read from the stream, it will emit a -`'readable'` event. - -In some cases, listening for a `'readable'` event will cause some data -to be read into the internal buffer from the underlying system, if it -hadn't already. - -```javascript -var readable = getReadableStreamSomehow(); -readable.on('readable', () => { - // there is some data to read now -}); -``` - -Once the internal buffer is drained, a `'readable'` event will fire -again when more data is available. - -The `'readable'` event is not emitted in the "flowing" mode with the -sole exception of the last one, on end-of-stream. - -The `'readable'` event indicates that the stream has new information: -either new data is available or the end of the stream has been reached. -In the former case, [`stream.read()`][stream-read] will return that data. In the -latter case, [`stream.read()`][stream-read] will return null. For instance, in -the following example, `foo.txt` is an empty file: - -```js -const fs = require('fs'); -var rr = fs.createReadStream('foo.txt'); -rr.on('readable', () => { - console.log('readable:', rr.read()); -}); -rr.on('end', () => { - console.log('end'); -}); -``` - -The output of running this script is: - -``` -$ node test.js -readable: null -end -``` - -#### readable.isPaused() - -* Return: {Boolean} - -This method returns whether or not the `readable` has been **explicitly** -paused by client code (using [`stream.pause()`][stream-pause] without a -corresponding [`stream.resume()`][stream-resume]). - -```js -var readable = new stream.Readable - -readable.isPaused() // === false -readable.pause() -readable.isPaused() // === true -readable.resume() -readable.isPaused() // === false -``` - -#### readable.pause() - -* Return: `this` - -This method will cause a stream in flowing mode to stop emitting -[`'data'`][] events, switching out of flowing mode. Any data that becomes -available will remain in the internal buffer. - -```js -var readable = getReadableStreamSomehow(); -readable.on('data', (chunk) => { - console.log('got %d bytes of data', chunk.length); - readable.pause(); - console.log('there will be no more data for 1 second'); - setTimeout(() => { - console.log('now data will start flowing again'); - readable.resume(); - }, 1000); -}); -``` - -#### readable.pipe(destination[, options]) - -* `destination` {stream.Writable} The destination for writing data -* `options` {Object} Pipe options - * `end` {Boolean} End the writer when the reader ends. Default = `true` - -This method pulls all the data out of a readable stream, and writes it -to the supplied destination, automatically managing the flow so that -the destination is not overwhelmed by a fast readable stream. - -Multiple destinations can be piped to safely. - -```js -var readable = getReadableStreamSomehow(); -var writable = fs.createWriteStream('file.txt'); -// All the data from readable goes into 'file.txt' -readable.pipe(writable); -``` - -This function returns the destination stream, so you can set up pipe -chains like so: - -```js -var r = fs.createReadStream('file.txt'); -var z = zlib.createGzip(); -var w = fs.createWriteStream('file.txt.gz'); -r.pipe(z).pipe(w); -``` - -For example, emulating the Unix `cat` command: - -```js -process.stdin.pipe(process.stdout); -``` - -By default [`stream.end()`][stream-end] is called on the destination when the -source stream emits [`'end'`][], so that `destination` is no longer writable. -Pass `{ end: false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - -```js -reader.pipe(writer, { end: false }); -reader.on('end', () => { - writer.end('Goodbye\n'); -}); -``` - -Note that [`process.stderr`][] and [`process.stdout`][] are never closed until -the process exits, regardless of the specified options. - -#### readable.read([size]) - -* `size` {Number} Optional argument to specify how much data to read. -* Return {String|Buffer|Null} - -The `read()` method pulls some data out of the internal buffer and -returns it. If there is no data available, then it will return -`null`. - -If you pass in a `size` argument, then it will return that many -bytes. If `size` bytes are not available, then it will return `null`, -unless we've ended, in which case it will return the data remaining -in the buffer. - -If you do not specify a `size` argument, then it will return all the -data in the internal buffer. - -This method should only be called in paused mode. In flowing mode, -this method is called automatically until the internal buffer is -drained. - -```js -var readable = getReadableStreamSomehow(); -readable.on('readable', () => { - var chunk; - while (null !== (chunk = readable.read())) { - console.log('got %d bytes of data', chunk.length); - } -}); -``` - -If this method returns a data chunk, then it will also trigger the -emission of a [`'data'`][] event. - -Note that calling [`stream.read([size])`][stream-read] after the [`'end'`][] -event has been triggered will return `null`. No runtime error will be raised. - -#### readable.resume() - -* Return: `this` - -This method will cause the readable stream to resume emitting [`'data'`][] -events. - -This method will switch the stream into flowing mode. If you do *not* -want to consume the data from a stream, but you *do* want to get to -its [`'end'`][] event, you can call [`stream.resume()`][stream-resume] to open -the flow of data. - -```js -var readable = getReadableStreamSomehow(); -readable.resume(); -readable.on('end', () => { - console.log('got to the end, but did not read anything'); -}); -``` - -#### readable.setEncoding(encoding) - -* `encoding` {String} The encoding to use. -* Return: `this` - -Call this function to cause the stream to return strings of the specified -encoding instead of Buffer objects. For example, if you do -`readable.setEncoding('utf8')`, then the output data will be interpreted as -UTF-8 data, and returned as strings. If you do `readable.setEncoding('hex')`, -then the data will be encoded in hexadecimal string format. - -This properly handles multi-byte characters that would otherwise be -potentially mangled if you simply pulled the Buffers directly and -called [`buf.toString(encoding)`][] on them. If you want to read the data -as strings, always use this method. - -Also you can disable any encoding at all with `readable.setEncoding(null)`. -This approach is very useful if you deal with binary data or with large -multi-byte strings spread out over multiple chunks. - -```js -var readable = getReadableStreamSomehow(); -readable.setEncoding('utf8'); -readable.on('data', (chunk) => { - assert.equal(typeof chunk, 'string'); - console.log('got %d characters of string data', chunk.length); -}); -``` - -#### readable.unpipe([destination]) - -* `destination` {stream.Writable} Optional specific stream to unpipe - -This method will remove the hooks set up for a previous [`stream.pipe()`][] -call. - -If the destination is not specified, then all pipes are removed. - -If the destination is specified, but no pipe is set up for it, then -this is a no-op. - -```js -var readable = getReadableStreamSomehow(); -var writable = fs.createWriteStream('file.txt'); -// All the data from readable goes into 'file.txt', -// but only for the first second -readable.pipe(writable); -setTimeout(() => { - console.log('stop writing to file.txt'); - readable.unpipe(writable); - console.log('manually close the file stream'); - writable.end(); -}, 1000); -``` - -#### readable.unshift(chunk) - -* `chunk` {Buffer|String} Chunk of data to unshift onto the read queue - -This is useful in certain cases where a stream is being consumed by a -parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source, so that the stream can be -passed on to some other party. - -Note that `stream.unshift(chunk)` cannot be called after the [`'end'`][] event -has been triggered; a runtime error will be raised. - -If you find that you must often call `stream.unshift(chunk)` in your -programs, consider implementing a [Transform][] stream instead. (See [API -for Stream Implementors][].) - -```js -// Pull off a header delimited by \n\n -// use unshift() if we get too much -// Call the callback with (error, header, stream) -const StringDecoder = require('string_decoder').StringDecoder; -function parseHeader(stream, callback) { - stream.on('error', callback); - stream.on('readable', onReadable); - var decoder = new StringDecoder('utf8'); - var header = ''; - function onReadable() { - var chunk; - while (null !== (chunk = stream.read())) { - var str = decoder.write(chunk); - if (str.match(/\n\n/)) { - // found the header boundary - var split = str.split(/\n\n/); - header += split.shift(); - var remaining = split.join('\n\n'); - var buf = new Buffer(remaining, 'utf8'); - if (buf.length) - stream.unshift(buf); - stream.removeListener('error', callback); - stream.removeListener('readable', onReadable); - // now the body of the message can be read from the stream. - callback(null, header, stream); - } else { - // still reading the header. - header += str; - } - } - } -} -``` - -Note that, unlike [`stream.push(chunk)`][stream-push], `stream.unshift(chunk)` -will not end the reading process by resetting the internal reading state of the -stream. This can cause unexpected results if `unshift()` is called during a -read (i.e. from within a [`stream._read()`][stream-_read] implementation on a -custom stream). Following the call to `unshift()` with an immediate -[`stream.push('')`][stream-push] will reset the reading state appropriately, -however it is best to simply avoid calling `unshift()` while in the process of -performing a read. - -#### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -Versions of Node.js prior to v0.10 had streams that did not implement the -entire Streams API as it is today. (See [Compatibility][] for -more information.) - -If you are using an older Node.js library that emits [`'data'`][] events and -has a [`stream.pause()`][stream-pause] method that is advisory only, then you -can use the `wrap()` method to create a [Readable][] stream that uses the old -stream as its data source. - -You will very rarely ever need to call this function, but it exists -as a convenience for interacting with old Node.js programs and libraries. - -For example: - -```js -const OldReader = require('./old-api-module.js').OldReader; -const Readable = require('stream').Readable; -const oreader = new OldReader; -const myReader = new Readable().wrap(oreader); - -myReader.on('readable', () => { - myReader.read(); // etc. -}); -``` - -### Class: stream.Transform - -Transform streams are [Duplex][] streams where the output is in some way -computed from the input. They implement both the [Readable][] and -[Writable][] interfaces. - -Examples of Transform streams include: - -* [zlib streams][zlib] -* [crypto streams][crypto] - -### Class: stream.Writable - - - -The Writable stream interface is an abstraction for a *destination* -that you are writing data *to*. - -Examples of writable streams include: - -* [HTTP requests, on the client][] -* [HTTP responses, on the server][] -* [fs write streams][] -* [zlib streams][zlib] -* [crypto streams][crypto] -* [TCP sockets][] -* [child process stdin][] -* [`process.stdout`][], [`process.stderr`][] - -#### Event: 'drain' - -If a [`stream.write(chunk)`][stream-write] call returns `false`, then the -`'drain'` event will indicate when it is appropriate to begin writing more data -to the stream. - -```js -// Write the data to the supplied writable stream one million times. -// Be attentive to back-pressure. -function writeOneMillionTimes(writer, data, encoding, callback) { - var i = 1000000; - write(); - function write() { - var ok = true; - do { - i -= 1; - if (i === 0) { - // last time! - writer.write(data, encoding, callback); - } else { - // see if we should continue, or wait - // don't pass the callback, because we're not done yet. - ok = writer.write(data, encoding); - } - } while (i > 0 && ok); - if (i > 0) { - // had to stop early! - // write some more once it drains - writer.once('drain', write); - } - } -} -``` - -#### Event: 'error' - -* {Error} - -Emitted if there was an error when writing or piping data. - -#### Event: 'finish' - -When the [`stream.end()`][stream-end] method has been called, and all data has -been flushed to the underlying system, this event is emitted. - -```javascript -var writer = getWritableStreamSomehow(); -for (var i = 0; i < 100; i ++) { - writer.write('hello, #${i}!\n'); -} -writer.end('this is the end\n'); -writer.on('finish', () => { - console.error('all writes are now complete.'); -}); -``` - -#### Event: 'pipe' - -* `src` {stream.Readable} source stream that is piping to this writable - -This is emitted whenever the [`stream.pipe()`][] method is called on a readable -stream, adding this writable to its set of destinations. - -```js -var writer = getWritableStreamSomehow(); -var reader = getReadableStreamSomehow(); -writer.on('pipe', (src) => { - console.error('something is piping into the writer'); - assert.equal(src, reader); -}); -reader.pipe(writer); -``` - -#### Event: 'unpipe' - -* `src` {[Readable][] Stream} The source stream that - [unpiped][`stream.unpipe()`] this writable - -This is emitted whenever the [`stream.unpipe()`][] method is called on a -readable stream, removing this writable from its set of destinations. - -```js -var writer = getWritableStreamSomehow(); -var reader = getReadableStreamSomehow(); -writer.on('unpipe', (src) => { - console.error('something has stopped piping into the writer'); - assert.equal(src, reader); -}); -reader.pipe(writer); -reader.unpipe(writer); -``` - -#### writable.cork() - -Forces buffering of all writes. - -Buffered data will be flushed either at [`stream.uncork()`][] or at -[`stream.end()`][stream-end] call. - -#### writable.end([chunk][, encoding][, callback]) - -* `chunk` {String|Buffer} Optional data to write -* `encoding` {String} The encoding, if `chunk` is a String -* `callback` {Function} Optional callback for when the stream is finished - -Call this method when no more data will be written to the stream. If supplied, -the callback is attached as a listener on the [`'finish'`][] event. - -Calling [`stream.write()`][stream-write] after calling -[`stream.end()`][stream-end] will raise an error. - -```js -// write 'hello, ' and then end with 'world!' -var file = fs.createWriteStream('example.txt'); -file.write('hello, '); -file.end('world!'); -// writing more now is not allowed! -``` - -#### writable.setDefaultEncoding(encoding) - -* `encoding` {String} The new default encoding - -Sets the default encoding for a writable stream. - -#### writable.uncork() - -Flush all data, buffered since [`stream.cork()`][] call. - -#### writable.write(chunk[, encoding][, callback]) - -* `chunk` {String|Buffer} The data to write -* `encoding` {String} The encoding, if `chunk` is a String -* `callback` {Function} Callback for when this chunk of data is flushed -* Returns: {Boolean} `true` if the data was handled completely. - -This method writes some data to the underlying system, and calls the -supplied callback once the data has been fully handled. - -The return value indicates if you should continue writing right now. -If the data had to be buffered internally, then it will return -`false`. Otherwise, it will return `true`. - -This return value is strictly advisory. You MAY continue to write, -even if it returns `false`. However, writes will be buffered in -memory, so it is best not to do this excessively. Instead, wait for -the [`'drain'`][] event before writing more data. - - -## API for Stream Implementors - - - -To implement any sort of stream, the pattern is the same: - -1. Extend the appropriate parent class in your own subclass. (The - [`util.inherits()`][] method is particularly helpful for this.) -2. Call the appropriate parent class constructor in your constructor, - to be sure that the internal mechanisms are set up properly. -3. Implement one or more specific methods, as detailed below. - -The class to extend and the method(s) to implement depend on the sort -of stream class you are writing: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Use-case

-
-

Class

-
-

Method(s) to implement

-
-

Reading only

-
-

[Readable](#stream_class_stream_readable_1)

-
-

[_read][stream-_read]

-
-

Writing only

-
-

[Writable](#stream_class_stream_writable_1)

-
-

[_write][stream-_write], [_writev][stream-_writev]

-
-

Reading and writing

-
-

[Duplex](#stream_class_stream_duplex_1)

-
-

[_read][stream-_read], [_write][stream-_write], [_writev][stream-_writev]

-
-

Operate on written data, then read the result

-
-

[Transform](#stream_class_stream_transform_1)

-
-

[_transform][stream-_transform], [_flush][stream-_flush]

-
- -In your implementation code, it is very important to never call the methods -described in [API for Stream Consumers][]. Otherwise, you can potentially cause -adverse side effects in programs that consume your streaming interfaces. - -### Class: stream.Duplex - - - -A "duplex" stream is one that is both Readable and Writable, such as a TCP -socket connection. - -Note that `stream.Duplex` is an abstract class designed to be extended -with an underlying implementation of the [`stream._read(size)`][stream-_read] -and [`stream._write(chunk, encoding, callback)`][stream-_write] methods as you -would with a Readable or Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this class -prototypally inherits from Readable, and then parasitically from Writable. It is -thus up to the user to implement both the low-level -[`stream._read(n)`][stream-_read] method as well as the low-level -[`stream._write(chunk, encoding, callback)`][stream-_write] method on extension -duplex classes. - -#### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default = `true`. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - * `readableObjectMode` {Boolean} Default = `false`. Sets `objectMode` - for readable side of the stream. Has no effect if `objectMode` - is `true`. - * `writableObjectMode` {Boolean} Default = `false`. Sets `objectMode` - for writable side of the stream. Has no effect if `objectMode` - is `true`. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### Class: stream.PassThrough - -This is a trivial implementation of a [Transform][] stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy as a building block for novel sorts of streams. - -### Class: stream.Readable - - - -`stream.Readable` is an abstract class designed to be extended with an -underlying implementation of the [`stream._read(size)`][stream-_read] method. - -Please see [API for Stream Consumers][] for how to consume -streams in your programs. What follows is an explanation of how to -implement Readable streams in your programs. - -#### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default = `16384` (16kb), or `16` for `objectMode` streams - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default = `null` - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that [`stream.read(n)`][stream-read] returns - a single value instead of a Buffer of size n. Default = `false` - * `read` {Function} Implementation for the [`stream._read()`][stream-_read] - method. - -In classes that extend the Readable class, make sure to call the -Readable constructor so that the buffering settings can be properly -initialized. - -#### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **Implement this method, but do NOT call it directly.** - -This method is prefixed with an underscore because it is internal to the -class that defines it and should only be called by the internal Readable -class methods. All Readable stream implementations must provide a \_read -method to fetch data from the underlying resource. - -When `_read()` is called, if data is available from the resource, the `_read()` -implementation should start pushing that data into the read queue by calling -[`this.push(dataChunk)`][stream-push]. `_read()` should continue reading from -the resource and pushing data until push returns `false`, at which point it -should stop reading from the resource. Only when `_read()` is called again after -it has stopped should it start reading more data from the resource and pushing -that data onto the queue. - -Note: once the `_read()` method is called, it will not be called again until -the [`stream.push()`][stream-push] method is called. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling [`stream.push(chunk)`][stream-push]. - -#### readable.push(chunk[, encoding]) - - -* `chunk` {Buffer|Null|String} Chunk of data to push into the read queue -* `encoding` {String} Encoding of String chunks. Must be a valid - Buffer encoding, such as `'utf8'` or `'ascii'` -* return {Boolean} Whether or not more pushes should be performed - -Note: **This method should be called by Readable implementors, NOT -by consumers of Readable streams.** - -If a value other than null is passed, The `push()` method adds a chunk of data -into the queue for subsequent stream processors to consume. If `null` is -passed, it signals the end of the stream (EOF), after which no more data -can be written. - -The data added with `push()` can be pulled out by calling the -[`stream.read()`][stream-read] method when the [`'readable'`][] event fires. - -This API is designed to be as flexible as possible. For example, -you may be wrapping a lower-level source which has some sort of -pause/resume mechanism, and a data callback. In those cases, you -could wrap the low-level source object by doing something like this: - -```js -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -util.inherits(SourceWrapper, Readable); - -function SourceWrapper(options) { - Readable.call(this, options); - - this._source = getLowlevelSourceObject(); - - // Every time there's data, we push it into the internal buffer. - this._source.ondata = (chunk) => { - // if push() returns false, then we need to stop reading from source - if (!this.push(chunk)) - this._source.readStop(); - }; - - // When the source ends, we push the EOF-signaling `null` chunk - this._source.onend = () => { - this.push(null); - }; -} - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -SourceWrapper.prototype._read = function(size) { - this._source.readStart(); -}; -``` - -#### Example: A Counting Stream - - - -This is a basic example of a Readable stream. It emits the numerals -from 1 to 1,000,000 in ascending order, and then ends. - -```js -const Readable = require('stream').Readable; -const util = require('util'); -util.inherits(Counter, Readable); - -function Counter(opt) { - Readable.call(this, opt); - this._max = 1000000; - this._index = 1; -} - -Counter.prototype._read = function() { - var i = this._index++; - if (i > this._max) - this.push(null); - else { - var str = '' + i; - var buf = new Buffer(str, 'ascii'); - this.push(buf); - } -}; -``` - -#### Example: SimpleProtocol v1 (Sub-optimal) - -This is similar to the `parseHeader` function described -[here](#stream_readable_unshift_chunk), but implemented as a custom stream. -Also, note that this implementation does not convert the incoming data to a -string. - -However, this would be better implemented as a [Transform][] stream. See -[SimpleProtocol v2][] for a better implementation. - -```js -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// NOTE: This can be done more simply as a Transform stream! -// Using Readable directly for this is sub-optimal. See the -// alternative example below under the Transform section. - -const Readable = require('stream').Readable; -const util = require('util'); - -util.inherits(SimpleProtocol, Readable); - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(source, options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', () => { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', () => { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - // calling unshift by itself does not reset the reading state - // of the stream; since we're inside _read, doing an additional - // push('') will reset the state appropriately. - this.push(''); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -// var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a [zlib][] stream or a -[crypto][] stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will produce output -that is either much smaller or much larger than its input. - -Rather than implement the [`stream._read()`][stream-_read] and -[`stream._write()`][stream-_write] methods, Transform classes must implement the -[`stream._transform()`][stream-_transform] method, and may optionally -also implement the [`stream._flush()`][stream-_flush] method. (See below.) - -#### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `transform` {Function} Implementation for the - [`stream._transform()`][stream-_transform] method. - * `flush` {Function} Implementation for the [`stream._flush()`][stream-_flush] - method. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -#### Events: 'finish' and 'end' - -The [`'finish'`][] and [`'end'`][] events are from the parent Writable -and Readable classes respectively. The `'finish'` event is fired after -[`stream.end()`][stream-end] is called and all chunks have been processed by -[`stream._transform()`][stream-_transform], `'end'` is fired after all data has -been output which is after the callback in [`stream._flush()`][stream-_flush] -has been called. - -#### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush()` method, which will be -called at the very end, after all the written data is consumed, but -before emitting [`'end'`][] to signal the end of the readable side. Just -like with [`stream._transform()`][stream-_transform], call -`transform.push(chunk)` zero or more times, as appropriate, and call `callback` -when the flush operation is complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -#### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer|String} The chunk to be transformed. Will **always** - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. If chunk is a buffer, then this is the special - value - 'buffer', ignore it in this case. -* `callback` {Function} Call this function (optionally with an error - argument and data) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform()` -method to accept input and produce output. - -`_transform()` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. If you supply a second argument to the callback -it will be passed to the push method. In other words the following are -equivalent: - -```js -transform.prototype._transform = function (data, encoding, callback) { - this.push(data); - callback(); -}; - -transform.prototype._transform = function (data, encoding, callback) { - callback(null, data); -}; -``` - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -#### Example: `SimpleProtocol` parser v2 - -The example [here](#stream_example_simpleprotocol_v1_sub_optimal) of a simple -protocol parser can be implemented simply by using the higher level -[Transform][] stream class, similar to the `parseHeader` and `SimpleProtocol -v1` examples. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node.js stream -approach. - -```javascript -const util = require('util'); -const Transform = require('stream').Transform; -util.inherits(SimpleProtocol, Transform); - -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(chunk.slice(split)); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(chunk); - } - done(); -}; - -// Usage: -// var parser = new SimpleProtocol(); -// source.pipe(parser) -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### Class: stream.Writable - - - -`stream.Writable` is an abstract class designed to be extended with an -underlying implementation of the -[`stream._write(chunk, encoding, callback)`][stream-_write] method. - -Please see [API for Stream Consumers][] for how to consume -writable streams in your programs. What follows is an explanation of -how to implement Writable streams in your programs. - -#### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when - [`stream.write()`][stream-write] starts returning `false`. Default = `16384` - (16kb), or `16` for `objectMode` streams. - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to [`stream._write()`][stream-_write]. - Default = `true` - * `objectMode` {Boolean} Whether or not the - [`stream.write(anyObj)`][stream-write] is a valid operation. If set you can - write arbitrary data instead of only `Buffer` / `String` data. - Default = `false` - * `write` {Function} Implementation for the - [`stream._write()`][stream-_write] method. - * `writev` {Function} Implementation for the - [`stream._writev()`][stream-_writev] method. - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -#### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer|String} The chunk to be written. Will **always** - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. If chunk is a buffer, then this is the special - value - 'buffer', ignore it in this case. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a -[`stream._write()`][stream-_write] method to send data to the underlying -resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -#### writable.\_writev(chunks, callback) - -* `chunks` {Array} The chunks to be written. Each chunk has following - format: `{ chunk: ..., encoding: ... }`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunks. - -Note: **This function MUST NOT be called directly.** It may be -implemented by child classes, and called by the internal Writable -class methods only. - -This function is completely optional to implement. In most cases it is -unnecessary. If implemented, it will be called with all the chunks -that are buffered in the write queue. - - -## Simplified Constructor API - - - -In simple cases there is now the added benefit of being able to construct a -stream without inheritance. - -This can be done by passing the appropriate methods as constructor options: - -Examples: - -### Duplex - -```js -var duplex = new stream.Duplex({ - read: function(n) { - // sets this._read under the hood - - // push data onto the read queue, passing null - // will signal the end of the stream (EOF) - this.push(chunk); - }, - write: function(chunk, encoding, next) { - // sets this._write under the hood - - // An optional error can be passed as the first argument - next() - } -}); - -// or - -var duplex = new stream.Duplex({ - read: function(n) { - // sets this._read under the hood - - // push data onto the read queue, passing null - // will signal the end of the stream (EOF) - this.push(chunk); - }, - writev: function(chunks, next) { - // sets this._writev under the hood - - // An optional error can be passed as the first argument - next() - } -}); -``` - -### Readable - -```js -var readable = new stream.Readable({ - read: function(n) { - // sets this._read under the hood - - // push data onto the read queue, passing null - // will signal the end of the stream (EOF) - this.push(chunk); - } -}); -``` - -### Transform - -```js -var transform = new stream.Transform({ - transform: function(chunk, encoding, next) { - // sets this._transform under the hood - - // generate output as many times as needed - // this.push(chunk); - - // call when the current chunk is consumed - next(); - }, - flush: function(done) { - // sets this._flush under the hood - - // generate output as many times as needed - // this.push(chunk); - - done(); - } -}); -``` - -### Writable - -```js -var writable = new stream.Writable({ - write: function(chunk, encoding, next) { - // sets this._write under the hood - - // An optional error can be passed as the first argument - next() - } -}); - -// or - -var writable = new stream.Writable({ - writev: function(chunks, next) { - // sets this._writev under the hood - - // An optional error can be passed as the first argument - next() - } -}); -``` - -## Streams: Under the Hood - - - -### Buffering - - - -Both Writable and Readable streams will buffer data on an internal -object which can be retrieved from `_writableState.getBuffer()` or -`_readableState.buffer`, respectively. - -The amount of data that will potentially be buffered depends on the -`highWaterMark` option which is passed into the constructor. - -Buffering in Readable streams happens when the implementation calls -[`stream.push(chunk)`][stream-push]. If the consumer of the Stream does not -call [`stream.read()`][stream-read], then the data will sit in the internal -queue until it is consumed. - -Buffering in Writable streams happens when the user calls -[`stream.write(chunk)`][stream-write] repeatedly, even when it returns `false`. - -The purpose of streams, especially with the [`stream.pipe()`][] method, is to -limit the buffering of data to acceptable levels, so that sources and -destinations of varying speed will not overwhelm the available memory. - -### Compatibility with Older Node.js Versions - - - -In versions of Node.js prior to v0.10, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the [`stream.read()`][stream-read] method, - [`'data'`][] events would start emitting immediately. If you needed to do - some I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The [`stream.pause()`][stream-pause] method was advisory, rather than - guaranteed. This meant that you still had to be prepared to receive - [`'data'`][] events even when the stream was in a paused state. - -In Node.js v0.10, the [Readable][] class was added. -For backwards compatibility with older Node.js programs, Readable streams -switch into "flowing mode" when a [`'data'`][] event handler is added, or -when the [`stream.resume()`][stream-resume] method is called. The effect is -that, even if you are not using the new [`stream.read()`][stream-read] method -and [`'readable'`][] event, you no longer have to worry about losing -[`'data'`][] chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No [`'data'`][] event handler is added. -* The [`stream.resume()`][stream-resume] method is never called. -* The stream is not piped to any writable destination. - -For example, consider the following code: - -```js -// WARNING! BROKEN! -net.createServer((socket) => { - - // we add an 'end' method, but never consume the data - socket.on('end', () => { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of Node.js prior to v0.10, the incoming message data would be -simply discarded. However, in Node.js v0.10 and beyond, -the socket will remain paused forever. - -The workaround in this situation is to call the -[`stream.resume()`][stream-resume] method to start the flow of data: - -```js -// Workaround -net.createServer((socket) => { - - socket.on('end', () => { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into flowing mode, -pre-v0.10 style streams can be wrapped in a Readable class using the -[`stream.wrap()`][] method. - - -### Object Mode - - - -Normally, Streams operate on Strings and Buffers exclusively. - -Streams that are in **object mode** can emit generic JavaScript values -other than Buffers and Strings. - -A Readable stream in object mode will always return a single item from -a call to [`stream.read(size)`][stream-read], regardless of what the size -argument is. - -A Writable stream in object mode will always ignore the `encoding` -argument to [`stream.write(data, encoding)`][stream-write]. - -The special value `null` still retains its special value for object -mode streams. That is, for object mode readable streams, `null` as a -return value from [`stream.read()`][stream-read] indicates that there is no more -data, and [`stream.push(null)`][stream-push] will signal the end of stream data -(`EOF`). - -No streams in Node.js core are object mode streams. This pattern is only -used by userland streaming libraries. - -You should set `objectMode` in your stream child class constructor on -the options object. Setting `objectMode` mid-stream is not safe. - -For Duplex streams `objectMode` can be set exclusively for readable or -writable side with `readableObjectMode` and `writableObjectMode` -respectively. These options can be used to implement parsers and -serializers with Transform streams. - -```js -const util = require('util'); -const StringDecoder = require('string_decoder').StringDecoder; -const Transform = require('stream').Transform; -util.inherits(JSONParseStream, Transform); - -// Gets \n-delimited JSON string data, and emits the parsed objects -function JSONParseStream() { - if (!(this instanceof JSONParseStream)) - return new JSONParseStream(); - - Transform.call(this, { readableObjectMode : true }); - - this._buffer = ''; - this._decoder = new StringDecoder('utf8'); -} - -JSONParseStream.prototype._transform = function(chunk, encoding, cb) { - this._buffer += this._decoder.write(chunk); - // split on newlines - var lines = this._buffer.split(/\r?\n/); - // keep the last partial line buffered - this._buffer = lines.pop(); - for (var l = 0; l < lines.length; l++) { - var line = lines[l]; - try { - var obj = JSON.parse(line); - } catch (er) { - this.emit('error', er); - return; - } - // push the parsed object out to the readable consumer - this.push(obj); - } - cb(); -}; - -JSONParseStream.prototype._flush = function(cb) { - // Just handle any leftover - var rem = this._buffer.trim(); - if (rem) { - try { - var obj = JSON.parse(rem); - } catch (er) { - this.emit('error', er); - return; - } - // push the parsed object out to the readable consumer - this.push(obj); - } - cb(); -}; -``` - -### `stream.read(0)` - -There are some cases where you want to trigger a refresh of the -underlying readable stream mechanisms, without actually consuming any -data. In that case, you can call `stream.read(0)`, which will always -return null. - -If the internal read buffer is below the `highWaterMark`, and the -stream is not currently reading, then calling `stream.read(0)` will trigger -a low-level [`stream._read()`][stream-_read] call. - -There is almost never a need to do this. However, you will see some -cases in Node.js's internals where this is done, particularly in the -Readable stream class internals. - -### `stream.push('')` - -Pushing a zero-byte string or Buffer (when not in [Object mode][]) has an -interesting side effect. Because it *is* a call to -[`stream.push()`][stream-push], it will end the `reading` process. However, it -does *not* add any data to the readable buffer, so there's nothing for -a user to consume. - -Very rarely, there are cases where you have no data to provide now, -but the consumer of your stream (or, perhaps, another bit of your own -code) will know when to check again, by calling [`stream.read(0)`][stream-read]. -In those cases, you *may* call `stream.push('')`. - -So far, the only use case for this functionality is in the -[`tls.CryptoStream`][] class, which is deprecated in Node.js/io.js v1.0. If you -find that you have to use `stream.push('')`, please consider another -approach, because it almost certainly indicates that something is -horribly wrong. - -[`'data'`]: #stream_event_data -[`'drain'`]: #stream_event_drain -[`'end'`]: #stream_event_end -[`'finish'`]: #stream_event_finish -[`'readable'`]: #stream_event_readable -[`buf.toString(encoding)`]: https://nodejs.org/docs/v5.8.0/api/buffer.html#buffer_buf_tostring_encoding_start_end -[`EventEmitter`]: https://nodejs.org/docs/v5.8.0/api/events.html#events_class_eventemitter -[`process.stderr`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stderr -[`process.stdin`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stdin -[`process.stdout`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stdout -[`stream.cork()`]: #stream_writable_cork -[`stream.pipe()`]: #stream_readable_pipe_destination_options -[`stream.uncork()`]: #stream_writable_uncork -[`stream.unpipe()`]: #stream_readable_unpipe_destination -[`stream.wrap()`]: #stream_readable_wrap_stream -[`tls.CryptoStream`]: https://nodejs.org/docs/v5.8.0/api/tls.html#tls_class_cryptostream -[`util.inherits()`]: https://nodejs.org/docs/v5.8.0/api/util.html#util_util_inherits_constructor_superconstructor -[API for Stream Consumers]: #stream_api_for_stream_consumers -[API for Stream Implementors]: #stream_api_for_stream_implementors -[child process stdin]: https://nodejs.org/docs/v5.8.0/api/child_process.html#child_process_child_stdin -[child process stdout and stderr]: https://nodejs.org/docs/v5.8.0/api/child_process.html#child_process_child_stdout -[Compatibility]: #stream_compatibility_with_older_node_js_versions -[crypto]: crypto.html -[Duplex]: #stream_class_stream_duplex -[fs read streams]: https://nodejs.org/docs/v5.8.0/api/fs.html#fs_class_fs_readstream -[fs write streams]: https://nodejs.org/docs/v5.8.0/api/fs.html#fs_class_fs_writestream -[HTTP requests, on the client]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_clientrequest -[HTTP responses, on the server]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_serverresponse -[http-incoming-message]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_incomingmessage -[Object mode]: #stream_object_mode -[Readable]: #stream_class_stream_readable -[SimpleProtocol v2]: #stream_example_simpleprotocol_parser_v2 -[stream-_flush]: #stream_transform_flush_callback -[stream-_read]: #stream_readable_read_size_1 -[stream-_transform]: #stream_transform_transform_chunk_encoding_callback -[stream-_write]: #stream_writable_write_chunk_encoding_callback_1 -[stream-_writev]: #stream_writable_writev_chunks_callback -[stream-end]: #stream_writable_end_chunk_encoding_callback -[stream-pause]: #stream_readable_pause -[stream-push]: #stream_readable_push_chunk_encoding -[stream-read]: #stream_readable_read_size -[stream-resume]: #stream_readable_resume -[stream-write]: #stream_writable_write_chunk_encoding_callback -[TCP sockets]: https://nodejs.org/docs/v5.8.0/api/net.html#net_class_net_socket -[Transform]: #stream_class_stream_transform -[Writable]: #stream_class_stream_writable -[zlib]: zlib.html diff --git a/node_modules/bl/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_modules/bl/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md deleted file mode 100644 index 83275f1..0000000 --- a/node_modules/bl/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +++ /dev/null @@ -1,60 +0,0 @@ -# streams WG Meeting 2015-01-30 - -## Links - -* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg -* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 -* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ - -## Agenda - -Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. - -* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) -* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) -* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) -* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) - -## Minutes - -### adopt a charter - -* group: +1's all around - -### What versioning scheme should be adopted? -* group: +1’s 3.0.0 -* domenic+group: pulling in patches from other sources where appropriate -* mikeal: version independently, suggesting versions for io.js -* mikeal+domenic: work with TC to notify in advance of changes -simpler stream creation - -### streamline creation of streams -* sam: streamline creation of streams -* domenic: nice simple solution posted - but, we lose the opportunity to change the model - may not be backwards incompatible (double check keys) - - **action item:** domenic will check - -### remove implicit flowing of streams on(‘data’) -* add isFlowing / isPaused -* mikeal: worrying that we’re documenting polyfill methods – confuses users -* domenic: more reflective API is probably good, with warning labels for users -* new section for mad scientists (reflective stream access) -* calvin: name the “third state” -* mikeal: maybe borrow the name from whatwg? -* domenic: we’re missing the “third state” -* consensus: kind of difficult to name the third state -* mikeal: figure out differences in states / compat -* mathias: always flow on data – eliminates third state - * explore what it breaks - -**action items:** -* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) -* ask rod/build for infrastructure -* **chris**: explore the “flow on data” approach -* add isPaused/isFlowing -* add new docs section -* move isPaused to that section - - diff --git a/node_modules/bl/node_modules/readable-stream/duplex.js b/node_modules/bl/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af..0000000 --- a/node_modules/bl/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index 736693b..0000000 --- a/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,75 +0,0 @@ -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -'use strict'; - -/**/ - -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - keys.push(key); - }return keys; -}; -/**/ - -module.exports = Duplex; - -/**/ -var processNextTick = require('process-nextick-args'); -/**/ - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); - -util.inherits(Duplex, Readable); - -var keys = objectKeys(Writable.prototype); -for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) this.readable = false; - - if (options && options.writable === false) this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; - - this.once('end', onend); -} - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) return; - - // no more data can be written. - // But allow more writes to happen in this tick. - processNextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -function forEach(xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} \ No newline at end of file diff --git a/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index d06f71f..0000000 --- a/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,26 +0,0 @@ -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; \ No newline at end of file diff --git a/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 54a9d5c..0000000 --- a/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,880 +0,0 @@ -'use strict'; - -module.exports = Readable; - -/**/ -var processNextTick = require('process-nextick-args'); -/**/ - -/**/ -var isArray = require('isarray'); -/**/ - -/**/ -var Buffer = require('buffer').Buffer; -/**/ - -Readable.ReadableState = ReadableState; - -var EE = require('events'); - -/**/ -var EElistenerCount = function (emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ -var Stream; -(function () { - try { - Stream = require('st' + 'ream'); - } catch (_) {} finally { - if (!Stream) Stream = require('events').EventEmitter; - } -})(); -/**/ - -var Buffer = require('buffer').Buffer; - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -/**/ -var debugUtil = require('util'); -var debug = undefined; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ - -var StringDecoder; - -util.inherits(Readable, Stream); - -var Duplex; -function ReadableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; - - // cast to ints. - this.highWaterMark = ~ ~this.highWaterMark; - - this.buffer = []; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -var Duplex; -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - if (!(this instanceof Readable)) return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - if (options && typeof options.read === 'function') this._read = options.read; - - Stream.call(this); -} - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - - if (!state.objectMode && typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = new Buffer(chunk, encoding); - encoding = ''; - } - } - - return readableAddChunk(this, state, chunk, encoding, false); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); -}; - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var e = new Error('stream.unshift() after end event'); - stream.emit('error', e); - } else { - var skipAdd; - if (state.decoder && !addToFront && !encoding) { - chunk = state.decoder.write(chunk); - skipAdd = !state.objectMode && chunk.length === 0; - } - - if (!addToFront) state.reading = false; - - // Don't add to the buffer if we've decoded to an empty string chunk and - // we're not in object mode - if (!skipAdd) { - // if we want the data now, just emit it. - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - - if (state.needReadable) emitReadable(stream); - } - } - - maybeReadMore(stream, state); - } - } else if (!addToFront) { - state.reading = false; - } - - return needMoreData(state); -} - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); -} - -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; - -// Don't raise the hwm > 8MB -var MAX_HWM = 0x800000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} - -function howMuchToRead(n, state) { - if (state.length === 0 && state.ended) return 0; - - if (state.objectMode) return n === 0 ? 0 : 1; - - if (n === null || isNaN(n)) { - // only flow one buffer at a time - if (state.flowing && state.buffer.length) return state.buffer[0].length;else return state.length; - } - - if (n <= 0) return 0; - - // If we're asking for more than the target buffer level, - // then raise the water mark. Bump up to the next highest - // power of 2, to prevent increasing it excessively in tiny - // amounts. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - - // don't have that much. return null, unless we've ended. - if (n > state.length) { - if (!state.ended) { - state.needReadable = true; - return 0; - } else { - return state.length; - } - } - - return n; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - var state = this._readableState; - var nOrig = n; - - if (typeof n !== 'number' || n > 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } - - if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - } - - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (doRead && !state.reading) n = howMuchToRead(nOrig, state); - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = true; - n = 0; - } - - state.length -= n; - - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (state.length === 0 && !state.ended) state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended && state.length === 0) endReadable(this); - - if (ret !== null) this.emit('data', ret); - - return ret; -}; - -function chunkInvalid(state, chunk) { - var er = null; - if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - -function onEofChunk(stream, state) { - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - processNextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break;else len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - this.emit('error', new Error('not implemented')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - - var endFn = doEnd ? onend : cleanup; - if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable) { - debug('onunpipe'); - if (readable === src) { - cleanup(); - } - } - - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', cleanup); - src.removeListener('data', ondata); - - cleanedUp = true; - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - if (false === ret) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - if (state.pipesCount === 1 && state.pipes[0] === dest && src.listenerCount('data') === 1 && !cleanedUp) { - debug('false write response, pause', src._readableState.awaitDrain); - src._readableState.awaitDrain++; - } - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); - } - // This is a brutally ugly hack to make sure that our error handler - // is attached before any userland ones. NEVER DO THIS. - if (!dest._events || !dest._events.error) dest.on('error', onerror);else if (isArray(dest._events.error)) dest._events.error.unshift(onerror);else dest._events.error = [onerror, dest._events.error]; - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function () { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - - if (!dest) dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var _i = 0; _i < len; _i++) { - dests[_i].emit('unpipe', this); - }return this; - } - - // try to find the right one. - var i = indexOf(state.pipes, dest); - if (i === -1) return this; - - state.pipes.splice(i, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - - dest.emit('unpipe', this); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - // If listening to data, and it has not explicitly been paused, - // then call resume to start the flow of data on the next tick. - if (ev === 'data' && false !== this._readableState.flowing) { - this.resume(); - } - - if (ev === 'readable' && !this._readableState.endEmitted) { - var state = this._readableState; - if (!state.readableListening) { - state.readableListening = true; - state.emittedReadable = false; - state.needReadable = true; - if (!state.reading) { - processNextTick(nReadingNextTick, this); - } else if (state.length) { - emitReadable(this, state); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - processNextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - if (!state.reading) { - debug('resume read 0'); - stream.read(0); - } - - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - if (state.flowing) { - do { - var chunk = stream.read(); - } while (null !== chunk && state.flowing); - } -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var state = this._readableState; - var paused = false; - - var self = this; - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) self.push(chunk); - } - - self.push(null); - }); - - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = self.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function (method) { - return function () { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - - // proxy certain important events. - var events = ['error', 'close', 'destroy', 'pause', 'resume']; - forEach(events, function (ev) { - stream.on(ev, self.emit.bind(self, ev)); - }); - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - self._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - - return self; -}; - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -function fromList(n, state) { - var list = state.buffer; - var length = state.length; - var stringMode = !!state.decoder; - var objectMode = !!state.objectMode; - var ret; - - // nothing in the list, definitely empty. - if (list.length === 0) return null; - - if (length === 0) ret = null;else if (objectMode) ret = list.shift();else if (!n || n >= length) { - // read it all, truncate the array. - if (stringMode) ret = list.join('');else if (list.length === 1) ret = list[0];else ret = Buffer.concat(list, length); - list.length = 0; - } else { - // read just some of it. - if (n < list[0].length) { - // just take a part of the first list item. - // slice is the same for buffers and strings. - var buf = list[0]; - ret = buf.slice(0, n); - list[0] = buf.slice(n); - } else if (n === list[0].length) { - // first list is a perfect match - ret = list.shift(); - } else { - // complex case. - // we have enough to cover it, but it spans past the first buffer. - if (stringMode) ret = '';else ret = new Buffer(n); - - var c = 0; - for (var i = 0, l = list.length; i < l && c < n; i++) { - var buf = list[0]; - var cpy = Math.min(n - c, buf.length); - - if (stringMode) ret += buf.slice(0, cpy);else buf.copy(ret, c, 0, cpy); - - if (cpy < buf.length) list[0] = buf.slice(cpy);else list.shift(); - - c += cpy; - } - } - } - - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) throw new Error('endReadable called on non-empty stream'); - - if (!state.endEmitted) { - state.ended = true; - processNextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } -} - -function forEach(xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} \ No newline at end of file diff --git a/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 625cdc1..0000000 --- a/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,180 +0,0 @@ -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -'use strict'; - -module.exports = Transform; - -var Duplex = require('./_stream_duplex'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(Transform, Duplex); - -function TransformState(stream) { - this.afterTransform = function (er, data) { - return afterTransform(stream, er, data); - }; - - this.needTransform = false; - this.transforming = false; - this.writecb = null; - this.writechunk = null; - this.writeencoding = null; -} - -function afterTransform(stream, er, data) { - var ts = stream._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); - - ts.writechunk = null; - ts.writecb = null; - - if (data !== null && data !== undefined) stream.push(data); - - cb(er); - - var rs = stream._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - stream._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - - Duplex.call(this, options); - - this._transformState = new TransformState(this); - - // when the writable side finishes, then flush out anything remaining. - var stream = this; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - - if (typeof options.flush === 'function') this._flush = options.flush; - } - - this.once('prefinish', function () { - if (typeof this._flush === 'function') this._flush(function (er) { - done(stream, er); - });else done(stream); - }); -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - throw new Error('not implemented'); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -function done(stream, er) { - if (er) return stream.emit('error', er); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - var ws = stream._writableState; - var ts = stream._transformState; - - if (ws.length) throw new Error('calling transform done when ws.length != 0'); - - if (ts.transforming) throw new Error('calling transform done when still transforming'); - - return stream.push(null); -} \ No newline at end of file diff --git a/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 95916c9..0000000 --- a/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,516 +0,0 @@ -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. - -'use strict'; - -module.exports = Writable; - -/**/ -var processNextTick = require('process-nextick-args'); -/**/ - -/**/ -var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; -/**/ - -/**/ -var Buffer = require('buffer').Buffer; -/**/ - -Writable.WritableState = WritableState; - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -/**/ -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ -var Stream; -(function () { - try { - Stream = require('st' + 'ream'); - } catch (_) {} finally { - if (!Stream) Stream = require('events').EventEmitter; - } -})(); -/**/ - -var Buffer = require('buffer').Buffer; - -util.inherits(Writable, Stream); - -function nop() {} - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - -var Duplex; -function WritableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; - - // cast to ints. - this.highWaterMark = ~ ~this.highWaterMark; - - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function (er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; - - // count buffered requests - this.bufferedRequestCount = 0; - - // create the two objects needed to store the corked requests - // they are not a linked list, as no new elements are inserted in there - this.corkedRequestsFree = new CorkedRequest(this); - this.corkedRequestsFree.next = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function writableStateGetBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function () { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') - }); - } catch (_) {} -})(); - -var Duplex; -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options); - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - - if (typeof options.writev === 'function') this._writev = options.writev; - } - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function () { - this.emit('error', new Error('Cannot pipe. Not readable.')); -}; - -function writeAfterEnd(stream, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - processNextTick(cb, er); -} - -// If we get something that is not a buffer, string, null, or undefined, -// and we're not in objectMode, then that's an error. -// Otherwise stream chunks are all considered to be of length=1, and the -// watermarks determine how many objects to keep in the buffer, rather than -// how many bytes or characters. -function validChunk(stream, state, chunk, cb) { - var valid = true; - - if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { - var er = new TypeError('Invalid non-string/buffer chunk'); - stream.emit('error', er); - processNextTick(cb, er); - valid = false; - } - return valid; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - - if (typeof cb !== 'function') cb = nop; - - if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function () { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); - this._writableState.defaultEncoding = encoding; -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = new Buffer(chunk, encoding); - } - return chunk; -} - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, chunk, encoding, cb) { - chunk = decodeChunk(state, chunk, encoding); - - if (Buffer.isBuffer(chunk)) encoding = 'buffer'; - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - if (sync) processNextTick(cb, er);else cb(er); - - stream._writableState.errorEmitted = true; - stream.emit('error', er); -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state); - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - /**/ - asyncWrite(afterWrite, stream, state, finished, cb); - /**/ - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - - var count = 0; - while (entry) { - buffer[count] = entry; - entry = entry.next; - count += 1; - } - - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is always async, defer these to save a bit of time - // as the hot path ends with doWrite - state.pendingcb++; - state.lastBufferedRequest = null; - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequestCount = 0; - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new Error('not implemented')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) endWritable(this, state, cb); -}; - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} - -function prefinish(stream, state) { - if (!state.prefinished) { - state.prefinished = true; - stream.emit('prefinish'); - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - if (state.pendingcb === 0) { - prefinish(stream, state); - state.finished = true; - stream.emit('finish'); - } else { - prefinish(stream, state); - } - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) processNextTick(cb);else stream.once('finish', cb); - } - state.ended = true; - stream.writable = false; -} - -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - - this.finish = function (err) { - var entry = _this.entry; - _this.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - if (state.corkedRequestsFree) { - state.corkedRequestsFree.next = _this; - } else { - state.corkedRequestsFree = _this; - } - }; -} \ No newline at end of file diff --git a/node_modules/bl/node_modules/readable-stream/package.json b/node_modules/bl/node_modules/readable-stream/package.json deleted file mode 100644 index ddc57be..0000000 --- a/node_modules/bl/node_modules/readable-stream/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "readable-stream@~2.0.5", - "/Users/jbaylina/git/MVP/node_modules/bl" - ] - ], - "_from": "readable-stream@>=2.0.5 <2.1.0", - "_id": "readable-stream@2.0.6", - "_inCache": true, - "_installable": true, - "_location": "/bl/readable-stream", - "_nodeVersion": "5.7.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/readable-stream-2.0.6.tgz_1457893507709_0.369257491780445" - }, - "_npmUser": { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - "_npmVersion": "3.6.0", - "_phantomChildren": {}, - "_requested": { - "name": "readable-stream", - "raw": "readable-stream@~2.0.5", - "rawSpec": "~2.0.5", - "scope": null, - "spec": ">=2.0.5 <2.1.0", - "type": "range" - }, - "_requiredBy": [ - "/bl" - ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "_shasum": "8f90341e68a53ccc928788dacfcd11b36eb9b78e", - "_shrinkwrap": null, - "_spec": "readable-stream@~2.0.5", - "_where": "/Users/jbaylina/git/MVP/node_modules/bl", - "browser": { - "util": false - }, - "bugs": { - "url": "https://github.com/nodejs/readable-stream/issues" - }, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - }, - "description": "Streams3, a user-land copy of the stream library from Node.js", - "devDependencies": { - "tap": "~0.2.6", - "tape": "~4.5.1", - "zuul": "~3.9.0" - }, - "directories": {}, - "dist": { - "shasum": "8f90341e68a53ccc928788dacfcd11b36eb9b78e", - "tarball": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz" - }, - "gitHead": "01fb5608a970b42c900b96746cadc13d27dd9d7e", - "homepage": "https://github.com/nodejs/readable-stream#readme", - "keywords": [ - "readable", - "stream", - "pipe" - ], - "license": "MIT", - "main": "readable.js", - "maintainers": [ - { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - { - "email": "nathan@tootallnate.net", - "name": "tootallnate" - }, - { - "email": "rod@vagg.org", - "name": "rvagg" - }, - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - } - ], - "name": "readable-stream", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/nodejs/readable-stream.git" - }, - "scripts": { - "browser": "npm run write-zuul && zuul -- test/browser.js", - "test": "tap test/parallel/*.js test/ours/*.js", - "write-zuul": "printf \"ui: tape\nbrowsers:\n - name: $BROWSER_NAME\n version: $BROWSER_VERSION\n\">.zuul.yml" - }, - "version": "2.0.6" -} diff --git a/node_modules/bl/node_modules/readable-stream/passthrough.js b/node_modules/bl/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a..0000000 --- a/node_modules/bl/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/bl/node_modules/readable-stream/readable.js b/node_modules/bl/node_modules/readable-stream/readable.js deleted file mode 100644 index 6222a57..0000000 --- a/node_modules/bl/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,12 +0,0 @@ -var Stream = (function (){ - try { - return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify - } catch(_){} -}()); -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = Stream || exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/bl/node_modules/readable-stream/transform.js b/node_modules/bl/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f0..0000000 --- a/node_modules/bl/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/bl/node_modules/readable-stream/writable.js b/node_modules/bl/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efd..0000000 --- a/node_modules/bl/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/bl/package.json b/node_modules/bl/package.json deleted file mode 100644 index 5b5a5dc..0000000 --- a/node_modules/bl/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "bl@~1.1.2", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "bl@>=1.1.2 <1.2.0", - "_id": "bl@1.1.2", - "_inCache": true, - "_installable": true, - "_location": "/bl", - "_nodeVersion": "5.3.0", - "_npmOperationalInternal": { - "host": "packages-9-west.internal.npmjs.com", - "tmp": "tmp/bl-1.1.2.tgz_1455246621698_0.6300242957659066" - }, - "_npmUser": { - "email": "rod@vagg.org", - "name": "rvagg" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - }, - "_requested": { - "name": "bl", - "raw": "bl@~1.1.2", - "rawSpec": "~1.1.2", - "scope": null, - "spec": ">=1.1.2 <1.2.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "_shasum": "fdca871a99713aa00d19e3bbba41c44787a65398", - "_shrinkwrap": null, - "_spec": "bl@~1.1.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "authors": [ - "Rod Vagg (https://github.com/rvagg)", - "Matteo Collina (https://github.com/mcollina)", - "Jarett Cruger (https://github.com/jcrugzz)" - ], - "bugs": { - "url": "https://github.com/rvagg/bl/issues" - }, - "dependencies": { - "readable-stream": "~2.0.5" - }, - "description": "Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!", - "devDependencies": { - "faucet": "0.0.1", - "hash_file": "~0.1.1", - "tape": "~4.4.0" - }, - "directories": {}, - "dist": { - "shasum": "fdca871a99713aa00d19e3bbba41c44787a65398", - "tarball": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz" - }, - "gitHead": "ea42021059dc65fc60d7f4b9217c73431f09d23d", - "homepage": "https://github.com/rvagg/bl", - "keywords": [ - "buffer", - "buffers", - "stream", - "awesomesauce" - ], - "license": "MIT", - "main": "bl.js", - "maintainers": [ - { - "email": "rod@vagg.org", - "name": "rvagg" - } - ], - "name": "bl", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/rvagg/bl.git" - }, - "scripts": { - "test": "node test/test.js | faucet" - }, - "version": "1.1.2" -} diff --git a/node_modules/bl/test/test.js b/node_modules/bl/test/test.js deleted file mode 100644 index c95b1ba..0000000 --- a/node_modules/bl/test/test.js +++ /dev/null @@ -1,640 +0,0 @@ -var tape = require('tape') - , crypto = require('crypto') - , fs = require('fs') - , hash = require('hash_file') - , BufferList = require('../') - - , encodings = - ('hex utf8 utf-8 ascii binary base64' - + (process.browser ? '' : ' ucs2 ucs-2 utf16le utf-16le')).split(' ') - -tape('single bytes from single buffer', function (t) { - var bl = new BufferList() - bl.append(new Buffer('abcd')) - - t.equal(bl.length, 4) - - t.equal(bl.get(0), 97) - t.equal(bl.get(1), 98) - t.equal(bl.get(2), 99) - t.equal(bl.get(3), 100) - - t.end() -}) - -tape('single bytes from multiple buffers', function (t) { - var bl = new BufferList() - bl.append(new Buffer('abcd')) - bl.append(new Buffer('efg')) - bl.append(new Buffer('hi')) - bl.append(new Buffer('j')) - - t.equal(bl.length, 10) - - t.equal(bl.get(0), 97) - t.equal(bl.get(1), 98) - t.equal(bl.get(2), 99) - t.equal(bl.get(3), 100) - t.equal(bl.get(4), 101) - t.equal(bl.get(5), 102) - t.equal(bl.get(6), 103) - t.equal(bl.get(7), 104) - t.equal(bl.get(8), 105) - t.equal(bl.get(9), 106) - t.end() -}) - -tape('multi bytes from single buffer', function (t) { - var bl = new BufferList() - bl.append(new Buffer('abcd')) - - t.equal(bl.length, 4) - - t.equal(bl.slice(0, 4).toString('ascii'), 'abcd') - t.equal(bl.slice(0, 3).toString('ascii'), 'abc') - t.equal(bl.slice(1, 4).toString('ascii'), 'bcd') - - t.end() -}) - -tape('multiple bytes from multiple buffers', function (t) { - var bl = new BufferList() - - bl.append(new Buffer('abcd')) - bl.append(new Buffer('efg')) - bl.append(new Buffer('hi')) - bl.append(new Buffer('j')) - - t.equal(bl.length, 10) - - t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') - t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') - t.equal(bl.slice(3, 6).toString('ascii'), 'def') - t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') - t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') - - t.end() -}) - -tape('multiple bytes from multiple buffer lists', function (t) { - var bl = new BufferList() - - bl.append(new BufferList([ new Buffer('abcd'), new Buffer('efg') ])) - bl.append(new BufferList([ new Buffer('hi'), new Buffer('j') ])) - - t.equal(bl.length, 10) - - t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') - - t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') - t.equal(bl.slice(3, 6).toString('ascii'), 'def') - t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') - t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') - - t.end() -}) - -// same data as previous test, just using nested constructors -tape('multiple bytes from crazy nested buffer lists', function (t) { - var bl = new BufferList() - - bl.append(new BufferList([ - new BufferList([ - new BufferList(new Buffer('abc')) - , new Buffer('d') - , new BufferList(new Buffer('efg')) - ]) - , new BufferList([ new Buffer('hi') ]) - , new BufferList(new Buffer('j')) - ])) - - t.equal(bl.length, 10) - - t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') - - t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') - t.equal(bl.slice(3, 6).toString('ascii'), 'def') - t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') - t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') - - t.end() -}) - -tape('append accepts arrays of Buffers', function (t) { - var bl = new BufferList() - bl.append(new Buffer('abc')) - bl.append([ new Buffer('def') ]) - bl.append([ new Buffer('ghi'), new Buffer('jkl') ]) - bl.append([ new Buffer('mnop'), new Buffer('qrstu'), new Buffer('vwxyz') ]) - t.equal(bl.length, 26) - t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') - t.end() -}) - -tape('append accepts arrays of BufferLists', function (t) { - var bl = new BufferList() - bl.append(new Buffer('abc')) - bl.append([ new BufferList('def') ]) - bl.append(new BufferList([ new Buffer('ghi'), new BufferList('jkl') ])) - bl.append([ new Buffer('mnop'), new BufferList([ new Buffer('qrstu'), new Buffer('vwxyz') ]) ]) - t.equal(bl.length, 26) - t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') - t.end() -}) - -tape('append chainable', function (t) { - var bl = new BufferList() - t.ok(bl.append(new Buffer('abcd')) === bl) - t.ok(bl.append([ new Buffer('abcd') ]) === bl) - t.ok(bl.append(new BufferList(new Buffer('abcd'))) === bl) - t.ok(bl.append([ new BufferList(new Buffer('abcd')) ]) === bl) - t.end() -}) - -tape('append chainable (test results)', function (t) { - var bl = new BufferList('abc') - .append([ new BufferList('def') ]) - .append(new BufferList([ new Buffer('ghi'), new BufferList('jkl') ])) - .append([ new Buffer('mnop'), new BufferList([ new Buffer('qrstu'), new Buffer('vwxyz') ]) ]) - - t.equal(bl.length, 26) - t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') - t.end() -}) - -tape('consuming from multiple buffers', function (t) { - var bl = new BufferList() - - bl.append(new Buffer('abcd')) - bl.append(new Buffer('efg')) - bl.append(new Buffer('hi')) - bl.append(new Buffer('j')) - - t.equal(bl.length, 10) - - t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') - - bl.consume(3) - t.equal(bl.length, 7) - t.equal(bl.slice(0, 7).toString('ascii'), 'defghij') - - bl.consume(2) - t.equal(bl.length, 5) - t.equal(bl.slice(0, 5).toString('ascii'), 'fghij') - - bl.consume(1) - t.equal(bl.length, 4) - t.equal(bl.slice(0, 4).toString('ascii'), 'ghij') - - bl.consume(1) - t.equal(bl.length, 3) - t.equal(bl.slice(0, 3).toString('ascii'), 'hij') - - bl.consume(2) - t.equal(bl.length, 1) - t.equal(bl.slice(0, 1).toString('ascii'), 'j') - - t.end() -}) - -tape('complete consumption', function (t) { - var bl = new BufferList() - - bl.append(new Buffer('a')) - bl.append(new Buffer('b')) - - bl.consume(2) - - t.equal(bl.length, 0) - t.equal(bl._bufs.length, 0) - - t.end() -}) - -tape('test readUInt8 / readInt8', function (t) { - var buf1 = new Buffer(1) - , buf2 = new Buffer(3) - , buf3 = new Buffer(3) - , bl = new BufferList() - - buf2[1] = 0x3 - buf2[2] = 0x4 - buf3[0] = 0x23 - buf3[1] = 0x42 - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readUInt8(2), 0x3) - t.equal(bl.readInt8(2), 0x3) - t.equal(bl.readUInt8(3), 0x4) - t.equal(bl.readInt8(3), 0x4) - t.equal(bl.readUInt8(4), 0x23) - t.equal(bl.readInt8(4), 0x23) - t.equal(bl.readUInt8(5), 0x42) - t.equal(bl.readInt8(5), 0x42) - t.end() -}) - -tape('test readUInt16LE / readUInt16BE / readInt16LE / readInt16BE', function (t) { - var buf1 = new Buffer(1) - , buf2 = new Buffer(3) - , buf3 = new Buffer(3) - , bl = new BufferList() - - buf2[1] = 0x3 - buf2[2] = 0x4 - buf3[0] = 0x23 - buf3[1] = 0x42 - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readUInt16BE(2), 0x0304) - t.equal(bl.readUInt16LE(2), 0x0403) - t.equal(bl.readInt16BE(2), 0x0304) - t.equal(bl.readInt16LE(2), 0x0403) - t.equal(bl.readUInt16BE(3), 0x0423) - t.equal(bl.readUInt16LE(3), 0x2304) - t.equal(bl.readInt16BE(3), 0x0423) - t.equal(bl.readInt16LE(3), 0x2304) - t.equal(bl.readUInt16BE(4), 0x2342) - t.equal(bl.readUInt16LE(4), 0x4223) - t.equal(bl.readInt16BE(4), 0x2342) - t.equal(bl.readInt16LE(4), 0x4223) - t.end() -}) - -tape('test readUInt32LE / readUInt32BE / readInt32LE / readInt32BE', function (t) { - var buf1 = new Buffer(1) - , buf2 = new Buffer(3) - , buf3 = new Buffer(3) - , bl = new BufferList() - - buf2[1] = 0x3 - buf2[2] = 0x4 - buf3[0] = 0x23 - buf3[1] = 0x42 - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readUInt32BE(2), 0x03042342) - t.equal(bl.readUInt32LE(2), 0x42230403) - t.equal(bl.readInt32BE(2), 0x03042342) - t.equal(bl.readInt32LE(2), 0x42230403) - t.end() -}) - -tape('test readFloatLE / readFloatBE', function (t) { - var buf1 = new Buffer(1) - , buf2 = new Buffer(3) - , buf3 = new Buffer(3) - , bl = new BufferList() - - buf2[1] = 0x00 - buf2[2] = 0x00 - buf3[0] = 0x80 - buf3[1] = 0x3f - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readFloatLE(2), 0x01) - t.end() -}) - -tape('test readDoubleLE / readDoubleBE', function (t) { - var buf1 = new Buffer(1) - , buf2 = new Buffer(3) - , buf3 = new Buffer(10) - , bl = new BufferList() - - buf2[1] = 0x55 - buf2[2] = 0x55 - buf3[0] = 0x55 - buf3[1] = 0x55 - buf3[2] = 0x55 - buf3[3] = 0x55 - buf3[4] = 0xd5 - buf3[5] = 0x3f - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readDoubleLE(2), 0.3333333333333333) - t.end() -}) - -tape('test toString', function (t) { - var bl = new BufferList() - - bl.append(new Buffer('abcd')) - bl.append(new Buffer('efg')) - bl.append(new Buffer('hi')) - bl.append(new Buffer('j')) - - t.equal(bl.toString('ascii', 0, 10), 'abcdefghij') - t.equal(bl.toString('ascii', 3, 10), 'defghij') - t.equal(bl.toString('ascii', 3, 6), 'def') - t.equal(bl.toString('ascii', 3, 8), 'defgh') - t.equal(bl.toString('ascii', 5, 10), 'fghij') - - t.end() -}) - -tape('test toString encoding', function (t) { - var bl = new BufferList() - , b = new Buffer('abcdefghij\xff\x00') - - bl.append(new Buffer('abcd')) - bl.append(new Buffer('efg')) - bl.append(new Buffer('hi')) - bl.append(new Buffer('j')) - bl.append(new Buffer('\xff\x00')) - - encodings.forEach(function (enc) { - t.equal(bl.toString(enc), b.toString(enc), enc) - }) - - t.end() -}) - -!process.browser && tape('test stream', function (t) { - var random = crypto.randomBytes(65534) - , rndhash = hash(random, 'md5') - , md5sum = crypto.createHash('md5') - , bl = new BufferList(function (err, buf) { - t.ok(Buffer.isBuffer(buf)) - t.ok(err === null) - t.equal(rndhash, hash(bl.slice(), 'md5')) - t.equal(rndhash, hash(buf, 'md5')) - - bl.pipe(fs.createWriteStream('/tmp/bl_test_rnd_out.dat')) - .on('close', function () { - var s = fs.createReadStream('/tmp/bl_test_rnd_out.dat') - s.on('data', md5sum.update.bind(md5sum)) - s.on('end', function() { - t.equal(rndhash, md5sum.digest('hex'), 'woohoo! correct hash!') - t.end() - }) - }) - - }) - - fs.writeFileSync('/tmp/bl_test_rnd.dat', random) - fs.createReadStream('/tmp/bl_test_rnd.dat').pipe(bl) -}) - -tape('instantiation with Buffer', function (t) { - var buf = crypto.randomBytes(1024) - , buf2 = crypto.randomBytes(1024) - , b = BufferList(buf) - - t.equal(buf.toString('hex'), b.slice().toString('hex'), 'same buffer') - b = BufferList([ buf, buf2 ]) - t.equal(b.slice().toString('hex'), Buffer.concat([ buf, buf2 ]).toString('hex'), 'same buffer') - t.end() -}) - -tape('test String appendage', function (t) { - var bl = new BufferList() - , b = new Buffer('abcdefghij\xff\x00') - - bl.append('abcd') - bl.append('efg') - bl.append('hi') - bl.append('j') - bl.append('\xff\x00') - - encodings.forEach(function (enc) { - t.equal(bl.toString(enc), b.toString(enc)) - }) - - t.end() -}) - -tape('test Number appendage', function (t) { - var bl = new BufferList() - , b = new Buffer('1234567890') - - bl.append(1234) - bl.append(567) - bl.append(89) - bl.append(0) - - encodings.forEach(function (enc) { - t.equal(bl.toString(enc), b.toString(enc)) - }) - - t.end() -}) - -tape('write nothing, should get empty buffer', function (t) { - t.plan(3) - BufferList(function (err, data) { - t.notOk(err, 'no error') - t.ok(Buffer.isBuffer(data), 'got a buffer') - t.equal(0, data.length, 'got a zero-length buffer') - t.end() - }).end() -}) - -tape('unicode string', function (t) { - t.plan(2) - var inp1 = '\u2600' - , inp2 = '\u2603' - , exp = inp1 + ' and ' + inp2 - , bl = BufferList() - bl.write(inp1) - bl.write(' and ') - bl.write(inp2) - t.equal(exp, bl.toString()) - t.equal(new Buffer(exp).toString('hex'), bl.toString('hex')) -}) - -tape('should emit finish', function (t) { - var source = BufferList() - , dest = BufferList() - - source.write('hello') - source.pipe(dest) - - dest.on('finish', function () { - t.equal(dest.toString('utf8'), 'hello') - t.end() - }) -}) - -tape('basic copy', function (t) { - var buf = crypto.randomBytes(1024) - , buf2 = new Buffer(1024) - , b = BufferList(buf) - - b.copy(buf2) - t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer') - t.end() -}) - -tape('copy after many appends', function (t) { - var buf = crypto.randomBytes(512) - , buf2 = new Buffer(1024) - , b = BufferList(buf) - - b.append(buf) - b.copy(buf2) - t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer') - t.end() -}) - -tape('copy at a precise position', function (t) { - var buf = crypto.randomBytes(1004) - , buf2 = new Buffer(1024) - , b = BufferList(buf) - - b.copy(buf2, 20) - t.equal(b.slice().toString('hex'), buf2.slice(20).toString('hex'), 'same buffer') - t.end() -}) - -tape('copy starting from a precise location', function (t) { - var buf = crypto.randomBytes(10) - , buf2 = new Buffer(5) - , b = BufferList(buf) - - b.copy(buf2, 0, 5) - t.equal(b.slice(5).toString('hex'), buf2.toString('hex'), 'same buffer') - t.end() -}) - -tape('copy in an interval', function (t) { - var rnd = crypto.randomBytes(10) - , b = BufferList(rnd) // put the random bytes there - , actual = new Buffer(3) - , expected = new Buffer(3) - - rnd.copy(expected, 0, 5, 8) - b.copy(actual, 0, 5, 8) - - t.equal(actual.toString('hex'), expected.toString('hex'), 'same buffer') - t.end() -}) - -tape('copy an interval between two buffers', function (t) { - var buf = crypto.randomBytes(10) - , buf2 = new Buffer(10) - , b = BufferList(buf) - - b.append(buf) - b.copy(buf2, 0, 5, 15) - - t.equal(b.slice(5, 15).toString('hex'), buf2.toString('hex'), 'same buffer') - t.end() -}) - -tape('duplicate', function (t) { - t.plan(2) - - var bl = new BufferList('abcdefghij\xff\x00') - , dup = bl.duplicate() - - t.equal(bl.prototype, dup.prototype) - t.equal(bl.toString('hex'), dup.toString('hex')) -}) - -tape('destroy no pipe', function (t) { - t.plan(2) - - var bl = new BufferList('alsdkfja;lsdkfja;lsdk') - bl.destroy() - - t.equal(bl._bufs.length, 0) - t.equal(bl.length, 0) -}) - -!process.browser && tape('destroy with pipe before read end', function (t) { - t.plan(2) - - var bl = new BufferList() - fs.createReadStream(__dirname + '/test.js') - .pipe(bl) - - bl.destroy() - - t.equal(bl._bufs.length, 0) - t.equal(bl.length, 0) - -}) - -!process.browser && tape('destroy with pipe before read end with race', function (t) { - t.plan(2) - - var bl = new BufferList() - fs.createReadStream(__dirname + '/test.js') - .pipe(bl) - - setTimeout(function () { - bl.destroy() - setTimeout(function () { - t.equal(bl._bufs.length, 0) - t.equal(bl.length, 0) - }, 500) - }, 500) -}) - -!process.browser && tape('destroy with pipe after read end', function (t) { - t.plan(2) - - var bl = new BufferList() - fs.createReadStream(__dirname + '/test.js') - .on('end', onEnd) - .pipe(bl) - - function onEnd () { - bl.destroy() - - t.equal(bl._bufs.length, 0) - t.equal(bl.length, 0) - } -}) - -!process.browser && tape('destroy with pipe while writing to a destination', function (t) { - t.plan(4) - - var bl = new BufferList() - , ds = new BufferList() - - fs.createReadStream(__dirname + '/test.js') - .on('end', onEnd) - .pipe(bl) - - function onEnd () { - bl.pipe(ds) - - setTimeout(function () { - bl.destroy() - - t.equals(bl._bufs.length, 0) - t.equals(bl.length, 0) - - ds.destroy() - - t.equals(bl._bufs.length, 0) - t.equals(bl.length, 0) - - }, 100) - } -}) - -!process.browser && tape('handle error', function (t) { - t.plan(2) - fs.createReadStream('/does/not/exist').pipe(BufferList(function (err, data) { - t.ok(err instanceof Error, 'has error') - t.notOk(data, 'no data') - })) -}) diff --git a/node_modules/bn.js/.npmignore b/node_modules/bn.js/.npmignore deleted file mode 100644 index 6d1eebb..0000000 --- a/node_modules/bn.js/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -benchmarks/ -coverage/ -node_modules/ -npm-debug.log -1.js -logo.png diff --git a/node_modules/bn.js/.travis.yml b/node_modules/bn.js/.travis.yml deleted file mode 100644 index 936b7b7..0000000 --- a/node_modules/bn.js/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -node_js: - - "0.10" - - "0.12" - - "4" - - "5" -env: - matrix: - - TEST_SUITE=unit -matrix: - include: - - node_js: "4" - env: TEST_SUITE=lint -script: npm run $TEST_SUITE diff --git a/node_modules/bn.js/README.md b/node_modules/bn.js/README.md deleted file mode 100644 index fee65ba..0000000 --- a/node_modules/bn.js/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# bn.js - -> BigNum in pure javascript - -[![Build Status](https://secure.travis-ci.org/indutny/bn.js.png)](http://travis-ci.org/indutny/bn.js) - -## Install -`npm install --save bn.js` - -## Usage - -```js -const BN = require('bn.js'); - -var a = new BN('dead', 16); -var b = new BN('101010', 2); - -var res = a.add(b); -console.log(res.toString(10)); // 57047 -``` - -**Note**: decimals are not supported in this library. - -## Notation - -### Prefixes - -There are several prefixes to instructions that affect the way the work. Here -is the list of them in the order of appearance in the function name: - -* `i` - perform operation in-place, storing the result in the host object (on - which the method was invoked). Might be used to avoid number allocation costs -* `u` - unsigned, ignore the sign of operands when performing operation, or - always return positive value. Second case applies to reduction operations - like `mod()`. In such cases if the result will be negative - modulo will be - added to the result to make it positive - -### Postfixes - -The only available postfix at the moment is: - -* `n` - which means that the argument of the function must be a plain JavaScript - number - -### Examples - -* `a.iadd(b)` - perform addition on `a` and `b`, storing the result in `a` -* `a.pmod(b)` - reduce `a` modulo `b`, returning positive value -* `a.iushln(13)` - shift bits of `a` left by 13 - -## Instructions - -Prefixes/postfixes are put in parens at the of the line. `endian` - could be -either `le` (little-endian) or `be` (big-endian). - -### Utilities - -* `a.clone()` - clone number -* `a.toString(base, length)` - convert to base-string and pad with zeroes -* `a.toNumber()` - convert to Javascript Number (limited to 53 bits) -* `a.toJSON()` - convert to JSON compatible hex string (alias of `toString(16)`) -* `a.toArray(endian, length)` - convert to byte `Array`, and optionally zero - pad to length, throwing if already exceeding -* `a.toArrayLike(type, endian, length)` - convert to an instance of `type`, - which must behave like an `Array` -* `a.toBuffer(endian, length)` - convert to Node.js Buffer (if available) -* `a.bitLength()` - get number of bits occupied -* `a.zeroBits()` - return number of less-significant consequent zero bits - (example: `1010000` has 4 zero bits) -* `a.byteLength()` - return number of bytes occupied -* `a.isNeg()` - true if the number is negative -* `a.isEven()` - no comments -* `a.isOdd()` - no comments -* `a.isZero()` - no comments -* `a.cmp(b)` - compare numbers and return `-1` (a `<` b), `0` (a `==` b), or `1` (a `>` b) - depending on the comparison result (`ucmp`, `cmpn`) -* `a.lt(b)` - `a` less than `b` (`n`) -* `a.lte(b)` - `a` less than or equals `b` (`n`) -* `a.gt(b)` - `a` greater than `b` (`n`) -* `a.gte(b)` - `a` greater than or equals `b` (`n`) -* `a.eq(b)` - `a` equals `b` (`n`) -* `a.toTwos(width)` - convert to two's complement representation, where `width` is bit width -* `a.fromTwos(width)` - convert from two's complement representation, where `width` is the bit width -* `a.isBN(object)` - returns true if the supplied `object` is a BN.js instance - -### Arithmetics - -* `a.neg()` - negate sign (`i`) -* `a.abs()` - absolute value (`i`) -* `a.add(b)` - addition (`i`, `n`, `in`) -* `a.sub(b)` - subtraction (`i`, `n`, `in`) -* `a.mul(b)` - multiply (`i`, `n`, `in`) -* `a.sqr()` - square (`i`) -* `a.pow(b)` - raise `a` to the power of `b` -* `a.div(b)` - divide (`divn`, `idivn`) -* `a.mod(b)` - reduct (`u`, `n`) (but no `umodn`) -* `a.divRound(b)` - rounded division - -### Bit operations - -* `a.or(b)` - or (`i`, `u`, `iu`) -* `a.and(b)` - and (`i`, `u`, `iu`, `andln`) (NOTE: `andln` is going to be replaced - with `andn` in future) -* `a.xor(b)` - xor (`i`, `u`, `iu`) -* `a.setn(b)` - set specified bit to `1` -* `a.shln(b)` - shift left (`i`, `u`, `iu`) -* `a.shrn(b)` - shift right (`i`, `u`, `iu`) -* `a.testn(b)` - test if specified bit is set -* `a.maskn(b)` - clear bits with indexes higher or equal to `b` (`i`) -* `a.bincn(b)` - add `1 << b` to the number -* `a.notn(w)` - not (for the width specified by `w`) (`i`) - -### Reduction - -* `a.gcd(b)` - GCD -* `a.egcd(b)` - Extended GCD results (`{ a: ..., b: ..., gcd: ... }`) -* `a.invm(b)` - inverse `a` modulo `b` - -## Fast reduction - -When doing lots of reductions using the same modulo, it might be beneficial to -use some tricks: like [Montgomery multiplication][0], or using special algorithm -for [Mersenne Prime][1]. - -### Reduction context - -To enable this tricks one should create a reduction context: - -```js -var red = BN.red(num); -``` -where `num` is just a BN instance. - -Or: - -```js -var red = BN.red(primeName); -``` - -Where `primeName` is either of these [Mersenne Primes][1]: - -* `'k256'` -* `'p224'` -* `'p192'` -* `'p25519'` - -Or: - -```js -var red = BN.mont(num); -``` - -To reduce numbers with [Montgomery trick][1]. `.mont()` is generally faster than -`.red(num)`, but slower than `BN.red(primeName)`. - -### Converting numbers - -Before performing anything in reduction context - numbers should be converted -to it. Usually, this means that one should: - -* Convert inputs to reducted ones -* Operate on them in reduction context -* Convert outputs back from the reduction context - -Here is how one may convert numbers to `red`: - -```js -var redA = a.toRed(red); -``` -Where `red` is a reduction context created using instructions above - -Here is how to convert them back: - -```js -var a = redA.fromRed(); -``` - -### Red instructions - -Most of the instructions from the very start of this readme have their -counterparts in red context: - -* `a.redAdd(b)`, `a.redIAdd(b)` -* `a.redSub(b)`, `a.redISub(b)` -* `a.redShl(num)` -* `a.redMul(b)`, `a.redIMul(b)` -* `a.redSqr()`, `a.redISqr()` -* `a.redSqrt()` - square root modulo reduction context's prime -* `a.redInvm()` - modular inverse of the number -* `a.redNeg()` -* `a.redPow(b)` - modular exponentiation - -## LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2015. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -[0]: https://en.wikipedia.org/wiki/Montgomery_modular_multiplication -[1]: https://en.wikipedia.org/wiki/Mersenne_prime diff --git a/node_modules/bn.js/lib/bn.js b/node_modules/bn.js/lib/bn.js deleted file mode 100644 index 29a4c51..0000000 --- a/node_modules/bn.js/lib/bn.js +++ /dev/null @@ -1,3427 +0,0 @@ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buf' + 'fer').Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); diff --git a/node_modules/bn.js/package.json b/node_modules/bn.js/package.json deleted file mode 100644 index c3aa6d2..0000000 --- a/node_modules/bn.js/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "bn.js@^4.8.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-util" - ] - ], - "_from": "bn.js@>=4.8.0 <5.0.0", - "_id": "bn.js@4.11.6", - "_inCache": true, - "_installable": true, - "_location": "/bn.js", - "_nodeVersion": "6.3.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/bn.js-4.11.6.tgz_1470100429753_0.28054949711076915" - }, - "_npmUser": { - "email": "fedor@indutny.com", - "name": "indutny" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "bn.js", - "raw": "bn.js@^4.8.0", - "rawSpec": "^4.8.0", - "scope": null, - "spec": ">=4.8.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/elliptic", - "/ethereumjs-util", - "/secp256k1" - ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "_shasum": "53344adb14617a13f6e8dd2ce28905d1c0ba3215", - "_shrinkwrap": null, - "_spec": "bn.js@^4.8.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-util", - "author": { - "email": "fedor@indutny.com", - "name": "Fedor Indutny" - }, - "bugs": { - "url": "https://github.com/indutny/bn.js/issues" - }, - "dependencies": {}, - "description": "Big number implementation in pure javascript", - "devDependencies": { - "istanbul": "^0.3.5", - "mocha": "^2.1.0", - "semistandard": "^7.0.4" - }, - "directories": {}, - "dist": { - "shasum": "53344adb14617a13f6e8dd2ce28905d1c0ba3215", - "tarball": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" - }, - "gitHead": "e4a82134c89ed85b0c3a03da7fabc016206898a4", - "homepage": "https://github.com/indutny/bn.js", - "keywords": [ - "BN", - "BigNum", - "Big number", - "Modulo", - "Montgomery" - ], - "license": "MIT", - "main": "lib/bn.js", - "maintainers": [ - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - { - "email": "email@dcousens.com", - "name": "dcousens" - }, - { - "email": "fedor@indutny.com", - "name": "indutny" - } - ], - "name": "bn.js", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/bn.js.git" - }, - "scripts": { - "lint": "semistandard", - "test": "npm run lint && npm run unit", - "unit": "mocha --reporter=spec test/*-test.js" - }, - "version": "4.11.6" -} diff --git a/node_modules/bn.js/test/arithmetic-test.js b/node_modules/bn.js/test/arithmetic-test.js deleted file mode 100644 index c3a0d7d..0000000 --- a/node_modules/bn.js/test/arithmetic-test.js +++ /dev/null @@ -1,635 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; -var fixtures = require('./fixtures'); - -describe('BN.js/Arithmetic', function () { - describe('.add()', function () { - it('should add numbers', function () { - assert.equal(new BN(14).add(new BN(26)).toString(16), '28'); - var k = new BN(0x1234); - var r = k; - - for (var i = 0; i < 257; i++) { - r = r.add(k); - } - - assert.equal(r.toString(16), '125868'); - }); - - it('should handle carry properly (in-place)', function () { - var k = new BN('abcdefabcdefabcdef', 16); - var r = new BN('deadbeef', 16); - - for (var i = 0; i < 257; i++) { - r.iadd(k); - } - - assert.equal(r.toString(16), 'ac79bd9b79be7a277bde'); - }); - - it('should properly do positive + negative', function () { - var a = new BN('abcd', 16); - var b = new BN('-abce', 16); - - assert.equal(a.iadd(b).toString(16), '-1'); - - a = new BN('abcd', 16); - b = new BN('-abce', 16); - - assert.equal(a.add(b).toString(16), '-1'); - assert.equal(b.add(a).toString(16), '-1'); - }); - }); - - describe('.iaddn()', function () { - it('should allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should add negative number', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(-200); - - assert.equal(a.toString(), '-300'); - }); - - it('should allow neg + pos with big number', function () { - var a = new BN('-1000000000', 10); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.toString(), '-999999800'); - }); - - it('should carry limb', function () { - var a = new BN('3ffffff', 16); - - assert.equal(a.iaddn(1).toString(16), '4000000'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).iaddn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.sub()', function () { - it('should subtract small numbers', function () { - assert.equal(new BN(26).sub(new BN(14)).toString(16), 'c'); - assert.equal(new BN(14).sub(new BN(26)).toString(16), '-c'); - assert.equal(new BN(26).sub(new BN(26)).toString(16), '0'); - assert.equal(new BN(-26).sub(new BN(26)).toString(16), '-34'); - }); - - var a = new BN( - '31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384' + - 'a7d8daef41395491e2', - 16); - var b = new BN( - '6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000', - 16); - var r = new BN( - '31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a67' + - '76281f34583ddb91e2', - 16); - - it('should subtract big numbers', function () { - assert.equal(a.sub(b).cmp(r), 0); - }); - - it('should subtract numbers in place', function () { - assert.equal(b.clone().isub(a).neg().cmp(r), 0); - }); - - it('should subtract with carry', function () { - // Carry and copy - var a = new BN('12345', 16); - var b = new BN('1000000000000', 16); - assert.equal(a.isub(b).toString(16), '-fffffffedcbb'); - - a = new BN('12345', 16); - b = new BN('1000000000000', 16); - assert.equal(b.isub(a).toString(16), 'fffffffedcbb'); - }); - }); - - describe('.isubn()', function () { - it('should subtract negative number', function () { - var r = new BN( - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16); - assert.equal(r.isubn(-1).toString(16), - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c'); - }); - - it('should work for positive numbers', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(200); - assert.equal(a.negative, 1); - assert.equal(a.toString(), '-300'); - }); - - it('should not allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(-200); - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should change sign on small numbers at 0', function () { - var a = new BN(0).subn(2); - assert.equal(a.toString(), '-2'); - }); - - it('should change sign on small numbers at 1', function () { - var a = new BN(1).subn(2); - assert.equal(a.toString(), '-1'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).isubn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - function testMethod (name, mul) { - describe(name, function () { - it('should multiply numbers of different signs', function () { - var offsets = [ - 1, // smallMulTo - 250, // comb10MulTo - 1000, // bigMulTo - 15000 // jumboMulTo - ]; - - for (var i = 0; i < offsets.length; ++i) { - var x = new BN(1).ishln(offsets[i]); - - assert.equal(mul(x, x).isNeg(), false); - assert.equal(mul(x, x.neg()).isNeg(), true); - assert.equal(mul(x.neg(), x).isNeg(), true); - assert.equal(mul(x.neg(), x.neg()).isNeg(), false); - } - }); - - it('should multiply with carry', function () { - var n = new BN(0x1001); - var r = n; - - for (var i = 0; i < 4; i++) { - r = mul(r, n); - } - - assert.equal(r.toString(16), '100500a00a005001'); - }); - - it('should correctly multiply big numbers', function () { - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal( - mul(n, n).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40'); - assert.equal( - mul(mul(n, n), n).toString(16), - '1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b' + - '46e0cf2cb11667f795d5569482640fe5f628939467a01a612b02350' + - '0d0161e9730279a7561043af6197798e41b7432458463e64fa81158' + - '907322dc330562697d0d600'); - }); - - it('should multiply neg number on 0', function () { - assert.equal( - mul(new BN('-100000000000'), new BN('3').div(new BN('4'))) - .toString(16), - '0' - ); - }); - - it('should regress mul big numbers', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - assert.equal(mul(q, q).toString(16), qs); - }); - }); - } - - testMethod('.mul()', function (x, y) { - return BN.prototype.mul.apply(x, [ y ]); - }); - - testMethod('.mulf()', function (x, y) { - return BN.prototype.mulf.apply(x, [ y ]); - }); - - describe('.imul()', function () { - it('should multiply numbers in-place', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('deadbeefa551edebabba8', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - - a = new BN('abcdef01234567890abcd214a25123f512361e6d236', 16); - b = new BN('deadbeefa551edebabba8121234fd21bac0341324dd', 16); - c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should multiply by 0', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('0', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should regress mul big numbers in-place', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - - assert.equal(q.isqr().toString(16), qs); - }); - }); - - describe('.muln()', function () { - it('should multiply number by small number', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('dead', 16); - var c = a.mul(b); - - assert.equal(a.muln(0xdead).toString(16), c.toString(16)); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).imuln(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.pow()', function () { - it('should raise number to the power', function () { - var a = new BN('ab', 16); - var b = new BN('13', 10); - var c = a.pow(b); - - assert.equal(c.toString(16), '15963da06977df51909c9ba5b'); - }); - }); - - describe('.div()', function () { - it('should divide small numbers (<=26 bits)', function () { - assert.equal(new BN('256').div(new BN(10)).toString(10), - '25'); - assert.equal(new BN('-256').div(new BN(10)).toString(10), - '-25'); - assert.equal(new BN('256').div(new BN(-10)).toString(10), - '-25'); - assert.equal(new BN('-256').div(new BN(-10)).toString(10), - '25'); - - assert.equal(new BN('10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('10').div(new BN(-256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(-256)).toString(10), - '0'); - }); - - it('should divide large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').div(new BN('611111124969028')) - .toString(10), '1'); - assert.equal(new BN('-1222222225255589').div(new BN('611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('1222222225255589').div(new BN('-611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('-1222222225255589').div(new BN('-611111124969028')) - .toString(10), '1'); - - assert.equal(new BN('611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - }); - - it('should divide numbers', function () { - assert.equal(new BN('69527932928').div(new BN('16974594')).toString(16), - 'fff'); - assert.equal(new BN('-69527932928').div(new BN('16974594')).toString(16), - '-fff'); - - var b = new BN( - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40', - 16); - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal(b.div(n).toString(16), n.toString(16)); - - assert.equal(new BN('1').div(new BN('-5')).toString(10), '0'); - }); - - it('should not fail on regression after moving to _wordDiv', function () { - // Regression after moving to word div - var p = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', - 16); - var a = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16); - var as = a.sqr(); - assert.equal( - as.div(p).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9'); - - p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.div(p).toString(16), - 'ffffffff00000002000000000000000000000001000000000000000000000001'); - }); - }); - - describe('.idivn()', function () { - it('should divide numbers in-place', function () { - assert.equal(new BN('10', 16).idivn(3).toString(16), '5'); - assert.equal(new BN('12', 16).idivn(3).toString(16), '6'); - assert.equal(new BN('10000000000000000').idivn(3).toString(10), - '3333333333333333'); - assert.equal( - new BN('100000000000000000000000000000').idivn(3).toString(10), - '33333333333333333333333333333'); - - var t = new BN(3); - assert.equal( - new BN('12345678901234567890123456', 16).idivn(3).toString(16), - new BN('12345678901234567890123456', 16).div(t).toString(16)); - }); - }); - - describe('.divRound()', function () { - it('should divide numbers with rounding', function () { - assert.equal(new BN(9).divRound(new BN(20)).toString(10), - '0'); - assert.equal(new BN(10).divRound(new BN(20)).toString(10), - '1'); - assert.equal(new BN(150).divRound(new BN(20)).toString(10), - '8'); - assert.equal(new BN(149).divRound(new BN(20)).toString(10), - '7'); - assert.equal(new BN(149).divRound(new BN(17)).toString(10), - '9'); - assert.equal(new BN(144).divRound(new BN(17)).toString(10), - '8'); - assert.equal(new BN(-144).divRound(new BN(17)).toString(10), - '-8'); - }); - - it('should return 1 on exact division', function () { - assert.equal(new BN(144).divRound(new BN(144)).toString(10), '1'); - }); - }); - - describe('.mod()', function () { - it('should modulo small numbers (<=26 bits)', function () { - assert.equal(new BN('256').mod(new BN(10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(10)).toString(10), - '-6'); - assert.equal(new BN('256').mod(new BN(-10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(-10)).toString(10), - '-6'); - - assert.equal(new BN('10').mod(new BN(256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(256)).toString(10), - '-10'); - assert.equal(new BN('10').mod(new BN(-256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(-256)).toString(10), - '-10'); - }); - - it('should modulo large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').mod(new BN('611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('611111124969028')) - .toString(10), '-611111100286561'); - assert.equal(new BN('1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '-611111100286561'); - - assert.equal(new BN('611111124969028').mod(new BN('1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('1222222225255589')) - .toString(10), '-611111124969028'); - assert.equal(new BN('611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '-611111124969028'); - }); - - it('should mod numbers', function () { - assert.equal(new BN('10').mod(new BN(256)).toString(16), - 'a'); - assert.equal(new BN('69527932928').mod(new BN('16974594')).toString(16), - '102f302'); - - // 178 = 10 * 17 + 8 - assert.equal(new BN(178).div(new BN(10)).toNumber(), 17); - assert.equal(new BN(178).mod(new BN(10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(10)).toNumber(), 8); - - // -178 = 10 * (-17) + (-8) - assert.equal(new BN(-178).div(new BN(10)).toNumber(), -17); - assert.equal(new BN(-178).mod(new BN(10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(10)).toNumber(), 2); - - // 178 = -10 * (-17) + 8 - assert.equal(new BN(178).div(new BN(-10)).toNumber(), -17); - assert.equal(new BN(178).mod(new BN(-10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(-10)).toNumber(), 8); - - // -178 = -10 * (17) + (-8) - assert.equal(new BN(-178).div(new BN(-10)).toNumber(), 17); - assert.equal(new BN(-178).mod(new BN(-10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(-10)).toNumber(), 2); - - // -4 = 1 * (-3) + -1 - assert.equal(new BN(-4).div(new BN(-3)).toNumber(), 1); - assert.equal(new BN(-4).mod(new BN(-3)).toNumber(), -1); - - // -4 = -1 * (3) + -1 - assert.equal(new BN(-4).mod(new BN(3)).toNumber(), -1); - // -4 = 1 * (-3) + (-1 + 3) - assert.equal(new BN(-4).umod(new BN(-3)).toNumber(), 2); - - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.mod(p).toString(16), - '0'); - }); - - it('should properly carry the sign inside division', function () { - var a = new BN('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex'); - var b = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe', - 'hex'); - - assert.equal(a.mul(b).mod(a).cmpn(0), 0); - }); - }); - - describe('.modn()', function () { - it('should act like .mod() on small numbers', function () { - assert.equal(new BN('10', 16).modn(256).toString(16), '10'); - assert.equal(new BN('100', 16).modn(256).toString(16), '0'); - assert.equal(new BN('1001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(257).toString(16), - new BN('100000000001', 16).mod(new BN(257)).toString(16)); - assert.equal(new BN('123456789012', 16).modn(3).toString(16), - new BN('123456789012', 16).mod(new BN(3)).toString(16)); - }); - }); - - describe('.abs()', function () { - it('should return absolute value', function () { - assert.equal(new BN(0x1001).abs().toString(), '4097'); - assert.equal(new BN(-0x1001).abs().toString(), '4097'); - assert.equal(new BN('ffffffff', 16).abs().toString(), '4294967295'); - }); - }); - - describe('.invm()', function () { - it('should invert relatively-prime numbers', function () { - var p = new BN(257); - var a = new BN(3); - var b = a.invm(p); - assert.equal(a.mul(b).mod(p).toString(16), '1'); - - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - a = new BN('deadbeef', 16); - b = a.invm(p192); - assert.equal(a.mul(b).mod(p192).toString(16), '1'); - - // Even base - var phi = new BN('872d9b030ba368706b68932cf07a0e0c', 16); - var e = new BN(65537); - var d = e.invm(phi); - assert.equal(e.mul(d).mod(phi).toString(16), '1'); - - // Even base (take #2) - a = new BN('5'); - b = new BN('6'); - var r = a.invm(b); - assert.equal(r.mul(a).mod(b).toString(16), '1'); - }); - }); - - describe('.gcd()', function () { - it('should return GCD', function () { - assert.equal(new BN(3).gcd(new BN(2)).toString(10), '1'); - assert.equal(new BN(18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(-12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(0)).toString(10), '18'); - assert.equal(new BN(0).gcd(new BN(-18)).toString(10), '18'); - assert.equal(new BN(2).gcd(new BN(0)).toString(10), '2'); - assert.equal(new BN(0).gcd(new BN(3)).toString(10), '3'); - assert.equal(new BN(0).gcd(new BN(0)).toString(10), '0'); - }); - }); - - describe('.egcd()', function () { - it('should return EGCD', function () { - assert.equal(new BN(3).egcd(new BN(2)).gcd.toString(10), '1'); - assert.equal(new BN(18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(-18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(0).egcd(new BN(12)).gcd.toString(10), '12'); - }); - it('should not allow 0 input', function () { - assert.throws(function () { - new BN(1).egcd(0); - }, /^Error: Assertion failed$/); - }); - it('should not allow negative input', function () { - assert.throws(function () { - new BN(1).egcd(-1); - }, /^Error: Assertion failed$/); - }); - }); - - describe('BN.max(a, b)', function () { - it('should return maximum', function () { - assert.equal(BN.max(new BN(3), new BN(2)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(3)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.max(new BN(2), new BN(-2)).toString(16), '2'); - }); - }); - - describe('BN.min(a, b)', function () { - it('should return minimum', function () { - assert.equal(BN.min(new BN(3), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(3)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(-2)).toString(16), '-2'); - }); - }); - - describe('BN.ineg', function () { - it('shouldn\'t change sign for zero', function () { - assert.equal(new BN(0).ineg().toString(10), '0'); - }); - }); -}); diff --git a/node_modules/bn.js/test/binary-test.js b/node_modules/bn.js/test/binary-test.js deleted file mode 100644 index 37b6421..0000000 --- a/node_modules/bn.js/test/binary-test.js +++ /dev/null @@ -1,233 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Binary', function () { - describe('.shl()', function () { - it('should shl numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').shln(45).toString(16), - '206060200000000000000'); - }); - - it('should ushl numbers', function () { - assert.equal(new BN('69527932928').ushln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').ushln(45).toString(16), - '206060200000000000000'); - }); - }); - - describe('.shr()', function () { - it('should shr numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').shrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').shrn(256).toString(16), - '0'); - }); - - it('should ushr numbers', function () { - assert.equal(new BN('69527932928').ushrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').ushrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').ushrn(256).toString(16), - '0'); - }); - }); - - describe('.bincn()', function () { - it('should increment bit', function () { - assert.equal(new BN(0).bincn(1).toString(16), '2'); - assert.equal(new BN(2).bincn(1).toString(16), '4'); - assert.equal(new BN(2).bincn(1).bincn(1).toString(16), - new BN(2).bincn(2).toString(16)); - assert.equal(new BN(0xffffff).bincn(1).toString(16), '1000001'); - assert.equal(new BN(2).bincn(63).toString(16), - '8000000000000002'); - }); - }); - - describe('.imaskn()', function () { - it('should mask bits in-place', function () { - assert.equal(new BN(0).imaskn(1).toString(16), '0'); - assert.equal(new BN(3).imaskn(1).toString(16), '1'); - assert.equal(new BN('123456789', 16).imaskn(4).toString(16), '9'); - assert.equal(new BN('123456789', 16).imaskn(16).toString(16), '6789'); - assert.equal(new BN('123456789', 16).imaskn(28).toString(16), '3456789'); - }); - - it('should not mask when number is bigger than length', function () { - assert.equal(new BN(0xe3).imaskn(56).toString(16), 'e3'); - assert.equal(new BN(0xe3).imaskn(26).toString(16), 'e3'); - }); - }); - - describe('.testn()', function () { - it('should support test specific bit', function () { - [ - 'ff', - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' - ].forEach(function (hex) { - var bn = new BN(hex, 16); - var bl = bn.bitLength(); - - for (var i = 0; i < bl; ++i) { - assert.equal(bn.testn(i), true); - } - - // test off the end - assert.equal(bn.testn(bl), false); - }); - - var xbits = '01111001010111001001000100011101' + - '11010011101100011000111001011101' + - '10010100111000000001011000111101' + - '01011111001111100100011110000010' + - '01011010100111010001010011000100' + - '01101001011110100001001111100110' + - '001110010111'; - - var x = new BN( - '23478905234580795234378912401239784125643978256123048348957342' - ); - for (var i = 0; i < x.bitLength(); ++i) { - assert.equal(x.testn(i), (xbits.charAt(i) === '1'), 'Failed @ bit ' + i); - } - }); - - it('should have short-cuts', function () { - var x = new BN('abcd', 16); - assert(!x.testn(128)); - }); - }); - - describe('.and()', function () { - it('should and numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .and(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .and(new BN('abcd', 16)).toString(16), - 'abcd'); - }); - }); - - describe('.iand()', function () { - it('should iand numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .iand(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - assert.equal(new BN('1000000000000000000000000000000000000001', 2) - .iand(new BN('1', 2)) - .toString(2), '1'); - assert.equal(new BN('1', 2) - .iand(new BN('1000000000000000000000000000000000000001', 2)) - .toString(2), '1'); - }); - }); - - describe('.or()', function () { - it('should or numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .or(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - }); - - it('should or numbers of different limb-length', function () { - assert.equal( - new BN('abcd00000000', 16) - .or(new BN('abcd', 16)).toString(16), - 'abcd0000abcd'); - }); - }); - - describe('.ior()', function () { - it('should ior numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .ior(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - assert.equal(new BN('1000000000000000000000000000000000000000', 2) - .ior(new BN('1', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - assert.equal(new BN('1', 2) - .ior(new BN('1000000000000000000000000000000000000000', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - }); - }); - - describe('.xor()', function () { - it('should xor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .xor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - }); - }); - - describe('.ixor()', function () { - it('should ixor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1', 2)) - .toString(2), '11001100110011001100110011001101'); - assert.equal(new BN('1', 2) - .ixor(new BN('11001100110011001100110011001100', 2)) - .toString(2), '11001100110011001100110011001101'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .xor(new BN('abcd', 16)).toString(16), - 'abcd00005432'); - }); - }); - - describe('.setn()', function () { - it('should allow single bits to be set', function () { - assert.equal(new BN(0).setn(2, true).toString(2), '100'); - assert.equal(new BN(0).setn(27, true).toString(2), - '1000000000000000000000000000'); - assert.equal(new BN(0).setn(63, true).toString(16), - new BN(1).iushln(63).toString(16)); - assert.equal(new BN('1000000000000000000000000001', 2).setn(27, false) - .toString(2), '1'); - assert.equal(new BN('101', 2).setn(2, false).toString(2), '1'); - }); - }); - - describe('.notn()', function () { - it('should allow bitwise negation', function () { - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(32).toString(2), - '11111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(32).toString(2), - '11111111111111111111111111000111'); - assert.equal(new BN('111000111', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111111000111'); - }); - }); -}); diff --git a/node_modules/bn.js/test/constructor-test.js b/node_modules/bn.js/test/constructor-test.js deleted file mode 100644 index 11c7df0..0000000 --- a/node_modules/bn.js/test/constructor-test.js +++ /dev/null @@ -1,149 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Constructor', function () { - describe('with Smi input', function () { - it('should accept one limb number', function () { - assert.equal(new BN(12345).toString(16), '3039'); - }); - - it('should accept two-limb number', function () { - assert.equal(new BN(0x4123456).toString(16), '4123456'); - }); - - it('should accept 52 bits of precision', function () { - var num = Math.pow(2, 52); - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should accept max safe integer', function () { - var num = Math.pow(2, 53) - 1; - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should not accept an unsafe integer', function () { - var num = Math.pow(2, 53); - - assert.throws(function () { - return new BN(num, 10); - }, /^Error: Assertion failed$/); - }); - - it('should accept two-limb LE number', function () { - assert.equal(new BN(0x4123456, null, 'le').toString(16), '56341204'); - }); - }); - - describe('with String input', function () { - it('should accept base-16', function () { - assert.equal(new BN('1A6B765D8CDF', 16).toString(16), '1a6b765d8cdf'); - assert.equal(new BN('1A6B765D8CDF', 16).toString(), '29048849665247'); - }); - - it('should accept base-hex', function () { - assert.equal(new BN('FF', 'hex').toString(), '255'); - }); - - it('should accept base-16 with spaces', function () { - var num = 'a89c e5af8724 c0a23e0e 0ff77500'; - assert.equal(new BN(num, 16).toString(16), num.replace(/ /g, '')); - }); - - it('should accept long base-16', function () { - var num = '123456789abcdef123456789abcdef123456789abcdef'; - assert.equal(new BN(num, 16).toString(16), num); - }); - - it('should accept positive base-10', function () { - assert.equal(new BN('10654321').toString(), '10654321'); - assert.equal(new BN('29048849665247').toString(16), '1a6b765d8cdf'); - }); - - it('should accept negative base-10', function () { - assert.equal(new BN('-29048849665247').toString(16), '-1a6b765d8cdf'); - }); - - it('should accept long base-10', function () { - var num = '10000000000000000'; - assert.equal(new BN(num).toString(10), num); - }); - - it('should accept base-2', function () { - var base2 = '11111111111111111111111111111111111111111111111111111'; - assert.equal(new BN(base2, 2).toString(2), base2); - }); - - it('should accept base-36', function () { - var base36 = 'zzZzzzZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; - assert.equal(new BN(base36, 36).toString(36), base36.toLowerCase()); - }); - - it('should not overflow limbs during base-10', function () { - var num = '65820182292848241686198767302293' + - '20890292528855852623664389292032'; - assert(new BN(num).words[0] < 0x4000000); - }); - - it('should accept base-16 LE integer', function () { - assert.equal(new BN('1A6B765D8CDF', 16, 'le').toString(16), - 'df8c5d766b1a'); - }); - }); - - describe('with Array input', function () { - it('should not fail on empty array', function () { - assert.equal(new BN([]).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN([ 1, 2, 3 ]).toString(16), '10203'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toString(16), '1020304'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ]).toString(16), '102030405'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toString(16), - '102030405060708'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray().join(','), '1,2,3,4'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray().join(','), - '1,2,3,4,5,6,7,8'); - }); - - it('should import little endian', function () { - assert.equal(new BN([ 1, 2, 3 ], 10, 'le').toString(16), '30201'); - assert.equal(new BN([ 1, 2, 3, 4 ], 10, 'le').toString(16), '4030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 10, 'le').toString(16), - '504030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ], 'le').toString(16), - '807060504030201'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray('le').join(','), '4,3,2,1'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray('le').join(','), - '8,7,6,5,4,3,2,1'); - }); - - it('should import big endian with implicit base', function () { - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 'le').toString(16), '504030201'); - }); - }); - - // the Array code is able to handle Buffer - describe('with Buffer input', function () { - it('should not fail on empty Buffer', function () { - assert.equal(new BN(new Buffer(0)).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex')).toString(16), '10203'); - }); - - it('should import little endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex'), 'le').toString(16), '30201'); - }); - }); - - describe('with BN input', function () { - it('should clone BN', function () { - var num = new BN(12345); - assert.equal(new BN(num).toString(10), '12345'); - }); - }); -}); diff --git a/node_modules/bn.js/test/fixtures.js b/node_modules/bn.js/test/fixtures.js deleted file mode 100644 index 39fd661..0000000 --- a/node_modules/bn.js/test/fixtures.js +++ /dev/null @@ -1,264 +0,0 @@ -exports.dhGroups = { - p16: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199' + - 'ffffffffffffffff', - priv: '6d5923e6449122cbbcc1b96093e0b7e4fd3e469f58daddae' + - '53b49b20664f4132675df9ce98ae0cfdcac0f4181ccb643b' + - '625f98104dcf6f7d8e81961e2cab4b5014895260cb977c7d' + - '2f981f8532fb5da60b3676dfe57f293f05d525866053ac7e' + - '65abfd19241146e92e64f309a97ef3b529af4d6189fa416c' + - '9e1a816c3bdf88e5edf48fbd8233ef9038bb46faa95122c0' + - '5a426be72039639cd2d53d37254b3d258960dcb33c255ede' + - '20e9d7b4b123c8b4f4b986f53cdd510d042166f7dd7dca98' + - '7c39ab36381ba30a5fdd027eb6128d2ef8e5802a2194d422' + - 'b05fe6e1cb4817789b923d8636c1ec4b7601c90da3ddc178' + - '52f59217ae070d87f2e75cbfb6ff92430ad26a71c8373452' + - 'ae1cc5c93350e2d7b87e0acfeba401aaf518580937bf0b6c' + - '341f8c49165a47e49ce50853989d07171c00f43dcddddf72' + - '94fb9c3f4e1124e98ef656b797ef48974ddcd43a21fa06d0' + - '565ae8ce494747ce9e0ea0166e76eb45279e5c6471db7df8' + - 'cc88764be29666de9c545e72da36da2f7a352fb17bdeb982' + - 'a6dc0193ec4bf00b2e533efd6cd4d46e6fb237b775615576' + - 'dd6c7c7bbc087a25e6909d1ebc6e5b38e5c8472c0fc429c6' + - 'f17da1838cbcd9bbef57c5b5522fd6053e62ba21fe97c826' + - 'd3889d0cc17e5fa00b54d8d9f0f46fb523698af965950f4b' + - '941369e180f0aece3870d9335f2301db251595d173902cad' + - '394eaa6ffef8be6c', - pub: 'd53703b7340bc89bfc47176d351e5cf86d5a18d9662eca3c' + - '9759c83b6ccda8859649a5866524d77f79e501db923416ca' + - '2636243836d3e6df752defc0fb19cc386e3ae48ad647753f' + - 'bf415e2612f8a9fd01efe7aca249589590c7e6a0332630bb' + - '29c5b3501265d720213790556f0f1d114a9e2071be3620bd' + - '4ee1e8bb96689ac9e226f0a4203025f0267adc273a43582b' + - '00b70b490343529eaec4dcff140773cd6654658517f51193' + - '13f21f0a8e04fe7d7b21ffeca85ff8f87c42bb8d9cb13a72' + - 'c00e9c6e9dfcedda0777af951cc8ccab90d35e915e707d8e' + - '4c2aca219547dd78e9a1a0730accdc9ad0b854e51edd1e91' + - '4756760bab156ca6e3cb9c625cf0870def34e9ac2e552800' + - 'd6ce506d43dbbc75acfa0c8d8fb12daa3c783fb726f187d5' + - '58131779239c912d389d0511e0f3a81969d12aeee670e48f' + - 'ba41f7ed9f10705543689c2506b976a8ffabed45e33795b0' + - '1df4f6b993a33d1deab1316a67419afa31fbb6fdd252ee8c' + - '7c7d1d016c44e3fcf6b41898d7f206aa33760b505e4eff2e' + - 'c624bc7fe636b1d59e45d6f904fc391419f13d1f0cdb5b6c' + - '2378b09434159917dde709f8a6b5dc30994d056e3f964371' + - '11587ac7af0a442b8367a7bd940f752ddabf31cf01171e24' + - 'd78df136e9681cd974ce4f858a5fb6efd3234a91857bb52d' + - '9e7b414a8bc66db4b5a73bbeccfb6eb764b4f0cbf0375136' + - 'b024b04e698d54a5' - }, - p17: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934028492' + - '36c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bd' + - 'f8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831' + - '179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1b' + - 'db7f1447e6cc254b332051512bd7af426fb8f401378cd2bf' + - '5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6' + - 'd55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f3' + - '23a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aa' + - 'cc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be328' + - '06a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55c' + - 'da56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee' + - '12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff', - priv: '6017f2bc23e1caff5b0a8b4e1fc72422b5204415787801dc' + - '025762b8dbb98ab57603aaaa27c4e6bdf742b4a1726b9375' + - 'a8ca3cf07771779589831d8bd18ddeb79c43e7e77d433950' + - 'e652e49df35b11fa09644874d71d62fdaffb580816c2c88c' + - '2c4a2eefd4a660360316741b05a15a2e37f236692ad3c463' + - 'fff559938fc6b77176e84e1bb47fb41af691c5eb7bb81bd8' + - 'c918f52625a1128f754b08f5a1403b84667231c4dfe07ed4' + - '326234c113931ce606037e960f35a2dfdec38a5f057884d3' + - '0af8fab3be39c1eeb390205fd65982191fc21d5aa30ddf51' + - 'a8e1c58c0c19fc4b4a7380ea9e836aaf671c90c29bc4bcc7' + - '813811aa436a7a9005de9b507957c56a9caa1351b6efc620' + - '7225a18f6e97f830fb6a8c4f03b82f4611e67ab9497b9271' + - 'd6ac252793cc3e5538990dbd894d2dbc2d152801937d9f74' + - 'da4b741b50b4d40e4c75e2ac163f7b397fd555648b249f97' + - 'ffe58ffb6d096aa84534c4c5729cff137759bd34e80db4ab' + - '47e2b9c52064e7f0bf677f72ac9e5d0c6606943683f9d12f' + - '180cf065a5cb8ec3179a874f358847a907f8471d15f1e728' + - '7023249d6d13c82da52628654438f47b8b5cdf4761fbf6ad' + - '9219eceac657dbd06cf2ab776ad4c968f81c3d039367f0a4' + - 'd77c7ec4435c27b6c147071665100063b5666e06eb2fb2cc' + - '3159ba34bc98ca346342195f6f1fb053ddc3bc1873564d40' + - '1c6738cdf764d6e1ff25ca5926f80102ea6593c17170966b' + - 'b5d7352dd7fb821230237ea3ebed1f920feaadbd21be295a' + - '69f2083deae9c5cdf5f4830eb04b7c1f80cc61c17232d79f' + - '7ecc2cc462a7965f804001c89982734e5abba2d31df1b012' + - '152c6b226dff34510b54be8c2cd68d795def66c57a3abfb6' + - '896f1d139e633417f8c694764974d268f46ece3a8d6616ea' + - 'a592144be48ee1e0a1595d3e5edfede5b27cec6c48ceb2ff' + - 'b42cb44275851b0ebf87dfc9aa2d0cb0805e9454b051dfe8' + - 'a29fadd82491a4b4c23f2d06ba45483ab59976da1433c9ce' + - '500164b957a04cf62dd67595319b512fc4b998424d1164dd' + - 'bbe5d1a0f7257cbb04ec9b5ed92079a1502d98725023ecb2', - pub: '3bf836229c7dd874fe37c1790d201e82ed8e192ed61571ca' + - '7285264974eb2a0171f3747b2fc23969a916cbd21e14f7e2' + - 'f0d72dcd2247affba926f9e7bb99944cb5609aed85e71b89' + - 'e89d2651550cb5bd8281bd3144066af78f194032aa777739' + - 'cccb7862a1af401f99f7e5c693f25ddce2dedd9686633820' + - 'd28d0f5ed0c6b5a094f5fe6170b8e2cbc9dff118398baee6' + - 'e895a6301cb6e881b3cae749a5bdf5c56fc897ff68bc73f2' + - '4811bb108b882872bade1f147d886a415cda2b93dd90190c' + - 'be5c2dd53fe78add5960e97f58ff2506afe437f4cf4c912a' + - '397c1a2139ac6207d3ab76e6b7ffd23bb6866dd7f87a9ae5' + - '578789084ff2d06ea0d30156d7a10496e8ebe094f5703539' + - '730f5fdbebc066de417be82c99c7da59953071f49da7878d' + - 'a588775ff2a7f0084de390f009f372af75cdeba292b08ea8' + - '4bd13a87e1ca678f9ad148145f7cef3620d69a891be46fbb' + - 'cad858e2401ec0fd72abdea2f643e6d0197b7646fbb83220' + - '0f4cf7a7f6a7559f9fb0d0f1680822af9dbd8dec4cd1b5e1' + - '7bc799e902d9fe746ddf41da3b7020350d3600347398999a' + - 'baf75d53e03ad2ee17de8a2032f1008c6c2e6618b62f225b' + - 'a2f350179445debe68500fcbb6cae970a9920e321b468b74' + - '5fb524fb88abbcacdca121d737c44d30724227a99745c209' + - 'b970d1ff93bbc9f28b01b4e714d6c9cbd9ea032d4e964d8e' + - '8fff01db095160c20b7646d9fcd314c4bc11bcc232aeccc0' + - 'fbedccbc786951025597522eef283e3f56b44561a0765783' + - '420128638c257e54b972a76e4261892d81222b3e2039c61a' + - 'ab8408fcaac3d634f848ab3ee65ea1bd13c6cd75d2e78060' + - 'e13cf67fbef8de66d2049e26c0541c679fff3e6afc290efe' + - '875c213df9678e4a7ec484bc87dae5f0a1c26d7583e38941' + - 'b7c68b004d4df8b004b666f9448aac1cc3ea21461f41ea5d' + - 'd0f7a9e6161cfe0f58bcfd304bdc11d78c2e9d542e86c0b5' + - '6985cc83f693f686eaac17411a8247bf62f5ccc7782349b5' + - 'cc1f20e312fa2acc0197154d1bfee507e8db77e8f2732f2d' + - '641440ccf248e8643b2bd1e1f9e8239356ab91098fcb431d', - q: 'a899c59999bf877d96442d284359783bdc64b5f878b688fe' + - '51407f0526e616553ad0aaaac4d5bed3046f10a1faaf42bb' + - '2342dc4b7908eea0c46e4c4576897675c2bfdc4467870d3d' + - 'cd90adaed4359237a4bc6924bfb99aa6bf5f5ede15b574ea' + - 'e977eac096f3c67d09bda574c6306c6123fa89d2f086b8dc' + - 'ff92bc570c18d83fe6c810ccfd22ce4c749ef5e6ead3fffe' + - 'c63d95e0e3fde1df9db6a35fa1d107058f37e41957769199' + - 'd945dd7a373622c65f0af3fd9eb1ddc5c764bbfaf7a3dc37' + - '2548e683b970dac4aa4b9869080d2376c9adecebb84e172c' + - '09aeeb25fb8df23e60033260c4f8aac6b8b98ab894b1fb84' + - 'ebb83c0fb2081c3f3eee07f44e24d8fabf76f19ed167b0d7' + - 'ff971565aa4efa3625fce5a43ceeaa3eebb3ce88a00f597f' + - '048c69292b38dba2103ecdd5ec4ccfe3b2d87fa6202f334b' + - 'c1cab83b608dfc875b650b69f2c7e23c0b2b4adf149a6100' + - 'db1b6dbad4679ecb1ea95eafaba3bd00db11c2134f5a8686' + - '358b8b2ab49a1b2e85e1e45caeac5cd4dc0b3b5fffba8871' + - '1c6baf399edd48dad5e5c313702737a6dbdcede80ca358e5' + - '1d1c4fe42e8948a084403f61baed38aa9a1a5ce2918e9f33' + - '100050a430b47bc592995606440272a4994677577a6aaa1b' + - 'a101045dbec5a4e9566dab5445d1af3ed19519f07ac4e2a8' + - 'bd0a84b01978f203a9125a0be020f71fab56c2c9e344d4f4' + - '12d53d3cd8eb74ca5122002e931e3cb0bd4b7492436be17a' + - 'd7ebe27148671f59432c36d8c56eb762655711cfc8471f70' + - '83a8b7283bcb3b1b1d47d37c23d030288cfcef05fbdb4e16' + - '652ee03ee7b77056a808cd700bc3d9ef826eca9a59be959c' + - '947c865d6b372a1ca2d503d7df6d7611b12111665438475a' + - '1c64145849b3da8c2d343410df892d958db232617f9896f1' + - 'de95b8b5a47132be80dd65298c7f2047858409bf762dbc05' + - 'a62ca392ac40cfb8201a0607a2cae07d99a307625f2b2d04' + - 'fe83fbd3ab53602263410f143b73d5b46fc761882e78c782' + - 'd2c36e716a770a7aefaf7f76cea872db7bffefdbc4c2f9e0' + - '39c19adac915e7a63dcb8c8c78c113f29a3e0bc10e100ce0', - qs: '6f0a2fb763eaeb8eb324d564f03d4a55fdcd709e5f1b65e9' + - '5702b0141182f9f945d71bc3e64a7dfdae7482a7dd5a4e58' + - 'bc38f78de2013f2c468a621f08536969d2c8d011bb3bc259' + - '2124692c91140a5472cad224acdacdeae5751dadfdf068b8' + - '77bfa7374694c6a7be159fc3d24ff9eeeecaf62580427ad8' + - '622d48c51a1c4b1701d768c79d8c819776e096d2694107a2' + - 'f3ec0c32224795b59d32894834039dacb369280afb221bc0' + - '90570a93cf409889b818bb30cccee98b2aa26dbba0f28499' + - '08e1a3cd43fa1f1fb71049e5c77c3724d74dc351d9989057' + - '37bbda3805bd6b1293da8774410fb66e3194e18cdb304dd9' + - 'a0b59b583dcbc9fc045ac9d56aea5cfc9f8a0b95da1e11b7' + - '574d1f976e45fe12294997fac66ca0b83fc056183549e850' + - 'a11413cc4abbe39a211e8c8cbf82f2a23266b3c10ab9e286' + - '07a1b6088909cddff856e1eb6b2cde8bdac53fa939827736' + - 'ca1b892f6c95899613442bd02dbdb747f02487718e2d3f22' + - 'f73734d29767ed8d0e346d0c4098b6fdcb4df7d0c4d29603' + - '5bffe80d6c65ae0a1b814150d349096baaf950f2caf298d2' + - 'b292a1d48cf82b10734fe8cedfa16914076dfe3e9b51337b' + - 'ed28ea1e6824bb717b641ca0e526e175d3e5ed7892aebab0' + - 'f207562cc938a821e2956107c09b6ce4049adddcd0b7505d' + - '49ae6c69a20122461102d465d93dc03db026be54c303613a' + - 'b8e5ce3fd4f65d0b6162ff740a0bf5469ffd442d8c509cd2' + - '3b40dab90f6776ca17fc0678774bd6eee1fa85ababa52ec1' + - 'a15031eb677c6c488661dddd8b83d6031fe294489ded5f08' + - '8ad1689a14baeae7e688afa3033899c81f58de39b392ca94' + - 'af6f15a46f19fa95c06f9493c8b96a9be25e78b9ea35013b' + - 'caa76de6303939299d07426a88a334278fc3d0d9fa71373e' + - 'be51d3c1076ab93a11d3d0d703366ff8cde4c11261d488e5' + - '60a2bdf3bfe2476032294800d6a4a39d306e65c6d7d8d66e' + - '5ec63eee94531e83a9bddc458a2b508285c0ee10b7bd94da' + - '2815a0c5bd5b2e15cbe66355e42f5af8955cdfc0b3a4996d' + - '288db1f4b32b15643b18193e378cb7491f3c3951cdd044b1' + - 'a519571bffac2da986f5f1d506c66530a55f70751e24fa8e' + - 'd83ac2347f4069fb561a5565e78c6f0207da24e889a93a96' + - '65f717d9fe8a2938a09ab5f81be7ccecf466c0397fc15a57' + - '469939793f302739765773c256a3ca55d0548afd117a7cae' + - '98ca7e0d749a130c7b743d376848e255f8fdbe4cb4480b63' + - 'cd2c015d1020cf095d175f3ca9dcdfbaf1b2a6e6468eee4c' + - 'c750f2132a77f376bd9782b9d0ff4da98621b898e251a263' + - '4301ba2214a8c430b2f7a79dbbfd6d7ff6e9b0c137b025ff' + - '587c0bf912f0b19d4fff96b1ecd2ca990c89b386055c60f2' + - '3b94214bd55096f17a7b2c0fa12b333235101cd6f28a128c' + - '782e8a72671adadebbd073ded30bd7f09fb693565dcf0bf3' + - '090c21d13e5b0989dd8956f18f17f4f69449a13549c9d80a' + - '77e5e61b5aeeee9528634100e7bc390672f0ded1ca53555b' + - 'abddbcf700b9da6192255bddf50a76b709fbed251dce4c7e' + - '1ca36b85d1e97c1bc9d38c887a5adf140f9eeef674c31422' + - 'e65f63cae719f8c1324e42fa5fd8500899ef5aa3f9856aa7' + - 'ce10c85600a040343204f36bfeab8cfa6e9deb8a2edd2a8e' + - '018d00c7c9fa3a251ad0f57183c37e6377797653f382ec7a' + - '2b0145e16d3c856bc3634b46d90d7198aff12aff88a30e34' + - 'e2bfaf62705f3382576a9d3eeb0829fca2387b5b654af46e' + - '5cf6316fb57d59e5ea6c369061ac64d99671b0e516529dd5' + - 'd9c48ea0503e55fee090d36c5ea8b5954f6fcc0060794e1c' + - 'b7bc24aa1e5c0142fd4ce6e8fd5aa92a7bf84317ea9e1642' + - 'b6995bac6705adf93cbce72433ed0871139970d640f67b78' + - 'e63a7a6d849db2567df69ac7d79f8c62664ac221df228289' + - 'd0a4f9ebd9acb4f87d49da64e51a619fd3f3baccbd9feb12' + - '5abe0cc2c8d17ed1d8546da2b6c641f4d3020a5f9b9f26ac' + - '16546c2d61385505612275ea344c2bbf1ce890023738f715' + - '5e9eba6a071678c8ebd009c328c3eb643679de86e69a9fa5' + - '67a9e146030ff03d546310a0a568c5ba0070e0da22f2cef8' + - '54714b04d399bbc8fd261f9e8efcd0e83bdbc3f5cfb2d024' + - '3e398478cc598e000124eb8858f9df8f52946c2a1ca5c400' - } -}; diff --git a/node_modules/bn.js/test/pummel/dh-group-test.js b/node_modules/bn.js/test/pummel/dh-group-test.js deleted file mode 100644 index 37a259f..0000000 --- a/node_modules/bn.js/test/pummel/dh-group-test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../../').BN; -var fixtures = require('../fixtures'); - -describe('BN.js/Slow DH test', function () { - var groups = fixtures.dhGroups; - Object.keys(groups).forEach(function (name) { - it('should match public key for ' + name + ' group', function () { - var group = groups[name]; - - this.timeout(3600 * 1000); - - var base = new BN(2); - var mont = BN.red(new BN(group.prime, 16)); - var priv = new BN(group.priv, 16); - var multed = base.toRed(mont).redPow(priv).fromRed(); - var actual = new Buffer(multed.toArray()); - assert.equal(actual.toString('hex'), group.pub); - }); - }); -}); diff --git a/node_modules/bn.js/test/red-test.js b/node_modules/bn.js/test/red-test.js deleted file mode 100644 index fc2498c..0000000 --- a/node_modules/bn.js/test/red-test.js +++ /dev/null @@ -1,263 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Reduction context', function () { - function testMethod (name, fn) { - describe(name + ' method', function () { - it('should support add, iadd, sub, isub operations', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(123).toRed(m); - var b = new BN(231).toRed(m); - - assert.equal(a.redAdd(b).fromRed().toString(10), '97'); - assert.equal(a.redSub(b).fromRed().toString(10), '149'); - assert.equal(b.redSub(a).fromRed().toString(10), '108'); - - assert.equal(a.clone().redIAdd(b).fromRed().toString(10), '97'); - assert.equal(a.clone().redISub(b).fromRed().toString(10), '149'); - assert.equal(b.clone().redISub(a).fromRed().toString(10), '108'); - }); - - it('should support pow and mul operations', function () { - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p192); - var a = new BN(123); - var b = new BN(231); - var c = a.toRed(m).redMul(b.toRed(m)).fromRed(); - assert(c.cmp(a.mul(b).mod(p192)) === 0); - - assert.equal(a.toRed(m).redPow(new BN(3)).fromRed() - .cmp(a.sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(4)).fromRed() - .cmp(a.sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(8)).fromRed() - .cmp(a.sqr().sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(9)).fromRed() - .cmp(a.sqr().sqr().sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(17)).fromRed() - .cmp(a.sqr().sqr().sqr().sqr().mul(a)), 0); - assert.equal( - a.toRed(m).redPow(new BN('deadbeefabbadead', 16)).fromRed() - .toString(16), - '3aa0e7e304e320b68ef61592bcb00341866d6fa66e11a4d6'); - }); - - it('should sqrtm numbers', function () { - var p = new BN(263); - var m = fn(p); - var q = new BN(11).toRed(m); - - var qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - m = fn(p); - - q = new BN(13).toRed(m); - qr = q.redSqrt(true, p); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(false, p); - assert.equal(qr.redSqr().cmp(q), 0); - - // Tonelli-shanks - p = new BN(13); - m = fn(p); - q = new BN(10).toRed(m); - assert.equal(q.redSqrt().fromRed().toString(10), '7'); - }); - - it('should invm numbers', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(3).toRed(m); - var b = a.redInvm(); - assert.equal(a.redMul(b).fromRed().toString(16), '1'); - }); - - it('should invm numbers (regression)', function () { - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'e1d969b8192fbac73ea5b7921896d6a2263d4d4077bb8e5055361d1f7f8163f3', - 16); - - var m = fn(p); - a = a.toRed(m); - - assert.equal(a.redInvm().fromRed().negative, 0); - }); - - it('should imul numbers', function () { - var p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p); - - var a = new BN('deadbeefabbadead', 16); - var b = new BN('abbadeadbeefdead', 16); - var c = a.mul(b).mod(p); - - assert.equal(a.toRed(m).redIMul(b.toRed(m)).fromRed().toString(16), - c.toString(16)); - }); - - it('should pow(base, 0) == 1', function () { - var base = new BN(256).toRed(BN.red('k256')); - var exponent = new BN(0); - var result = base.redPow(exponent); - assert.equal(result.toString(), '1'); - }); - - it('should shl numbers', function () { - var base = new BN(256).toRed(BN.red('k256')); - var result = base.redShl(1); - assert.equal(result.toString(), '512'); - }); - - it('should reduce when converting to red', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(5).toRed(m); - - assert.doesNotThrow(function () { - var b = a.redISub(new BN(512).toRed(m)); - b.redISub(new BN(512).toRed(m)); - }); - }); - - it('redNeg and zero value', function () { - var a = new BN(0).toRed(BN.red('k256')).redNeg(); - assert.equal(a.isZero(), true); - }); - - it('should not allow modulus <= 1', function () { - assert.throws(function () { - BN.red(new BN(0)); - }, /^Error: modulus must be greater than 1$/); - - assert.throws(function () { - BN.red(new BN(1)); - }, /^Error: modulus must be greater than 1$/); - - assert.doesNotThrow(function () { - BN.red(new BN(2)); - }); - }); - }); - } - - testMethod('Plain', BN.red); - testMethod('Montgomery', BN.mont); - - describe('Pseudo-Mersenne Primes', function () { - it('should reduce numbers mod k256', function () { - var p = BN._prime('k256'); - - assert.equal(p.ireduce(new BN(0xdead)).toString(16), 'dead'); - assert.equal(p.ireduce(new BN('deadbeef', 16)).toString(16), 'deadbeef'); - - var num = new BN('fedcba9876543210fedcba9876543210dead' + - 'fedcba9876543210fedcba9876543210dead', - 16); - var exp = num.mod(p.p).toString(16); - assert.equal(p.ireduce(num).toString(16), exp); - - var regr = new BN('f7e46df64c1815962bf7bc9c56128798' + - '3f4fcef9cb1979573163b477eab93959' + - '335dfb29ef07a4d835d22aa3b6797760' + - '70a8b8f59ba73d56d01a79af9', - 16); - exp = regr.mod(p.p).toString(16); - - assert.equal(p.ireduce(regr).toString(16), exp); - }); - - it('should not fail to invm number mod k256', function () { - var regr2 = new BN( - '6c150c4aa9a8cf1934485d40674d4a7cd494675537bda36d49405c5d2c6f496f', 16); - regr2 = regr2.toRed(BN.red('k256')); - assert.equal(regr2.redInvm().redMul(regr2).fromRed().cmpn(1), 0); - }); - - it('should correctly square the number', function () { - var p = BN._prime('k256').p; - var red = BN.red('k256'); - - var n = new BN('9cd8cb48c3281596139f147c1364a3ed' + - 'e88d3f310fdb0eb98c924e599ca1b3c9', - 16); - var expected = n.sqr().mod(p); - var actual = n.toRed(red).redSqr().fromRed(); - - assert.equal(actual.toString(16), expected.toString(16)); - }); - - it('redISqr should return right result', function () { - var n = new BN('30f28939', 16); - var actual = n.toRed(BN.red('k256')).redISqr().fromRed(); - assert.equal(actual.toString(16), '95bd93d19520eb1'); - }); - }); - - it('should avoid 4.1.0 regresion', function () { - function bits2int (obits, q) { - var bits = new BN(obits); - var shift = (obits.length << 3) - q.bitLength(); - if (shift > 0) { - bits.ishrn(shift); - } - return bits; - } - var t = new Buffer('aff1651e4cd6036d57aa8b2a05ccf1a9d5a40166340ecbbdc55' + - 'be10b568aa0aa3d05ce9a2fcec9df8ed018e29683c6051cb83e' + - '46ce31ba4edb045356a8d0d80b', 'hex'); - var g = new BN('5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670' + - '716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1' + - 'aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a' + - '338661d10461c0d135472085057f3494309ffa73c611f78b32adbb574' + - '0c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097b' + - 'c5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a3' + - '3afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd24871' + - '99874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f9' + - '96bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7', - 16); - var p = new BN('9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642' + - 'f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55' + - '757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9' + - 'f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b99' + - '3e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368' + - '213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca283716' + - '21cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d' + - '3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256' + - 'a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b', - 16); - var q = new BN('f2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde' + - '9998c1f', 16); - var k = bits2int(t, q); - var expectedR = '89ec4bb1400eccff8e7d9aa515cd1de7803f2daff09693ee7fd1353e' + - '90a68307'; - var r = g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); - assert.equal(r.toString(16), expectedR); - }); - - it('K256.split for 512 bits number should return equal numbers', function () { - var red = BN.red('k256'); - var input = new BN(1).iushln(512).subn(1); - assert.equal(input.bitLength(), 512); - var output = new BN(0); - red.prime.split(input, output); - assert.equal(input.cmp(output), 0); - }); -}); diff --git a/node_modules/bn.js/test/utils-test.js b/node_modules/bn.js/test/utils-test.js deleted file mode 100644 index 8571905..0000000 --- a/node_modules/bn.js/test/utils-test.js +++ /dev/null @@ -1,345 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Utils', function () { - describe('.toString()', function () { - describe('binary padding', function () { - it('should have a length of 256', function () { - var a = new BN(0); - - assert.equal(a.toString(2, 256).length, 256); - }); - }); - describe('hex padding', function () { - it('should have length of 8 from leading 15', function () { - var a = new BN('ffb9602', 16); - - assert.equal(a.toString('hex', 2).length, 8); - }); - - it('should have length of 8 from leading zero', function () { - var a = new BN('fb9604', 16); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 8 from leading zeros', function () { - var a = new BN(0); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 64 from leading 15', function () { - var a = new BN( - 'ffb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 2).length, 64); - }); - - it('should have length of 64 from leading zero', function () { - var a = new BN( - 'fb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 64).length, 64); - }); - }); - }); - - describe('.isNeg()', function () { - it('should return true for negative numbers', function () { - assert.equal(new BN(-1).isNeg(), true); - assert.equal(new BN(1).isNeg(), false); - assert.equal(new BN(0).isNeg(), false); - assert.equal(new BN('-0', 10).isNeg(), false); - }); - }); - - describe('.isOdd()', function () { - it('should return true for odd numbers', function () { - assert.equal(new BN(0).isOdd(), false); - assert.equal(new BN(1).isOdd(), true); - assert.equal(new BN(2).isOdd(), false); - assert.equal(new BN('-0', 10).isOdd(), false); - assert.equal(new BN('-1', 10).isOdd(), true); - assert.equal(new BN('-2', 10).isOdd(), false); - }); - }); - - describe('.isEven()', function () { - it('should return true for even numbers', function () { - assert.equal(new BN(0).isEven(), true); - assert.equal(new BN(1).isEven(), false); - assert.equal(new BN(2).isEven(), true); - assert.equal(new BN('-0', 10).isEven(), true); - assert.equal(new BN('-1', 10).isEven(), false); - assert.equal(new BN('-2', 10).isEven(), true); - }); - }); - - describe('.isZero()', function () { - it('should return true for zero', function () { - assert.equal(new BN(0).isZero(), true); - assert.equal(new BN(1).isZero(), false); - assert.equal(new BN(0xffffffff).isZero(), false); - }); - }); - - describe('.bitLength()', function () { - it('should return proper bitLength', function () { - assert.equal(new BN(0).bitLength(), 0); - assert.equal(new BN(0x1).bitLength(), 1); - assert.equal(new BN(0x2).bitLength(), 2); - assert.equal(new BN(0x3).bitLength(), 2); - assert.equal(new BN(0x4).bitLength(), 3); - assert.equal(new BN(0x8).bitLength(), 4); - assert.equal(new BN(0x10).bitLength(), 5); - assert.equal(new BN(0x100).bitLength(), 9); - assert.equal(new BN(0x123456).bitLength(), 21); - assert.equal(new BN('123456789', 16).bitLength(), 33); - assert.equal(new BN('8023456789', 16).bitLength(), 40); - }); - }); - - describe('.byteLength()', function () { - it('should return proper byteLength', function () { - assert.equal(new BN(0).byteLength(), 0); - assert.equal(new BN(0x1).byteLength(), 1); - assert.equal(new BN(0x2).byteLength(), 1); - assert.equal(new BN(0x3).byteLength(), 1); - assert.equal(new BN(0x4).byteLength(), 1); - assert.equal(new BN(0x8).byteLength(), 1); - assert.equal(new BN(0x10).byteLength(), 1); - assert.equal(new BN(0x100).byteLength(), 2); - assert.equal(new BN(0x123456).byteLength(), 3); - assert.equal(new BN('123456789', 16).byteLength(), 5); - assert.equal(new BN('8023456789', 16).byteLength(), 5); - }); - }); - - describe('.toArray()', function () { - it('should return [ 0 ] for `0`', function () { - var n = new BN(0); - assert.deepEqual(n.toArray('be'), [ 0 ]); - assert.deepEqual(n.toArray('le'), [ 0 ]); - }); - - it('should zero pad to desired lengths', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toArray('be', 5), [ 0x00, 0x00, 0x12, 0x34, 0x56 ]); - assert.deepEqual(n.toArray('le', 5), [ 0x56, 0x34, 0x12, 0x00, 0x00 ]); - }); - - it('should throw when naturally larger than desired length', function () { - var n = new BN(0x123456); - assert.throws(function () { - n.toArray('be', 2); - }, /^Error: byte array longer than desired length$/); - }); - }); - - describe('.toBuffer', function () { - it('should return proper Buffer', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toBuffer('be', 5).toString('hex'), '0000123456'); - assert.deepEqual(n.toBuffer('le', 5).toString('hex'), '5634120000'); - }); - }); - - describe('.toNumber()', function () { - it('should return proper Number if below the limit', function () { - assert.deepEqual(new BN(0x123456).toNumber(), 0x123456); - assert.deepEqual(new BN(0x3ffffff).toNumber(), 0x3ffffff); - assert.deepEqual(new BN(0x4000000).toNumber(), 0x4000000); - assert.deepEqual(new BN(0x10000000000000).toNumber(), 0x10000000000000); - assert.deepEqual(new BN(0x10040004004000).toNumber(), 0x10040004004000); - assert.deepEqual(new BN(-0x123456).toNumber(), -0x123456); - assert.deepEqual(new BN(-0x3ffffff).toNumber(), -0x3ffffff); - assert.deepEqual(new BN(-0x4000000).toNumber(), -0x4000000); - assert.deepEqual(new BN(-0x10000000000000).toNumber(), -0x10000000000000); - assert.deepEqual(new BN(-0x10040004004000).toNumber(), -0x10040004004000); - }); - - it('should throw when number exceeds 53 bits', function () { - var n = new BN(1).iushln(54); - assert.throws(function () { - n.toNumber(); - }, /^Error: Number can only safely store up to 53 bits$/); - }); - }); - - describe('.zeroBits()', function () { - it('should return proper zeroBits', function () { - assert.equal(new BN(0).zeroBits(), 0); - assert.equal(new BN(0x1).zeroBits(), 0); - assert.equal(new BN(0x2).zeroBits(), 1); - assert.equal(new BN(0x3).zeroBits(), 0); - assert.equal(new BN(0x4).zeroBits(), 2); - assert.equal(new BN(0x8).zeroBits(), 3); - assert.equal(new BN(0x10).zeroBits(), 4); - assert.equal(new BN(0x100).zeroBits(), 8); - assert.equal(new BN(0x1000000).zeroBits(), 24); - assert.equal(new BN(0x123456).zeroBits(), 1); - }); - }); - - describe('.toJSON', function () { - it('should return hex string', function () { - assert.equal(new BN(0x123).toJSON(), '123'); - }); - }); - - describe('.cmpn', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmpn(42), 0); - assert.equal(new BN(42).cmpn(43), -1); - assert.equal(new BN(42).cmpn(41), 1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffe), 0); - assert.equal(new BN(0x3fffffe).cmpn(0x3ffffff), -1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffd), 1); - assert.throws(function () { - new BN(0x3fffffe).cmpn(0x4000000); - }, /^Error: Number is too big$/); - assert.equal(new BN(42).cmpn(-42), 1); - assert.equal(new BN(-42).cmpn(42), -1); - assert.equal(new BN(-42).cmpn(-42), 0); - assert.equal(1 / new BN(-42).cmpn(-42), Infinity); - }); - }); - - describe('.cmp', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmp(new BN(42)), 0); - assert.equal(new BN(42).cmp(new BN(43)), -1); - assert.equal(new BN(42).cmp(new BN(41)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffe)), 0); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3ffffff)), -1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffd)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x4000000)), -1); - assert.equal(new BN(42).cmp(new BN(-42)), 1); - assert.equal(new BN(-42).cmp(new BN(42)), -1); - assert.equal(new BN(-42).cmp(new BN(-42)), 0); - assert.equal(1 / new BN(-42).cmp(new BN(-42)), Infinity); - }); - }); - - describe('comparison shorthands', function () { - it('.gtn greater than', function () { - assert.equal(new BN(3).gtn(2), true); - assert.equal(new BN(3).gtn(3), false); - assert.equal(new BN(3).gtn(4), false); - }); - it('.gt greater than', function () { - assert.equal(new BN(3).gt(new BN(2)), true); - assert.equal(new BN(3).gt(new BN(3)), false); - assert.equal(new BN(3).gt(new BN(4)), false); - }); - it('.gten greater than or equal', function () { - assert.equal(new BN(3).gten(3), true); - assert.equal(new BN(3).gten(2), true); - assert.equal(new BN(3).gten(4), false); - }); - it('.gte greater than or equal', function () { - assert.equal(new BN(3).gte(new BN(3)), true); - assert.equal(new BN(3).gte(new BN(2)), true); - assert.equal(new BN(3).gte(new BN(4)), false); - }); - it('.ltn less than', function () { - assert.equal(new BN(2).ltn(3), true); - assert.equal(new BN(2).ltn(2), false); - assert.equal(new BN(2).ltn(1), false); - }); - it('.lt less than', function () { - assert.equal(new BN(2).lt(new BN(3)), true); - assert.equal(new BN(2).lt(new BN(2)), false); - assert.equal(new BN(2).lt(new BN(1)), false); - }); - it('.lten less than or equal', function () { - assert.equal(new BN(3).lten(3), true); - assert.equal(new BN(3).lten(2), false); - assert.equal(new BN(3).lten(4), true); - }); - it('.lte less than or equal', function () { - assert.equal(new BN(3).lte(new BN(3)), true); - assert.equal(new BN(3).lte(new BN(2)), false); - assert.equal(new BN(3).lte(new BN(4)), true); - }); - it('.eqn equal', function () { - assert.equal(new BN(3).eqn(3), true); - assert.equal(new BN(3).eqn(2), false); - assert.equal(new BN(3).eqn(4), false); - }); - it('.eq equal', function () { - assert.equal(new BN(3).eq(new BN(3)), true); - assert.equal(new BN(3).eq(new BN(2)), false); - assert.equal(new BN(3).eq(new BN(4)), false); - }); - }); - - describe('.fromTwos', function () { - it('should convert from two\'s complement to negative number', function () { - assert.equal(new BN('00000000', 16).fromTwos(32).toNumber(), 0); - assert.equal(new BN('00000001', 16).fromTwos(32).toNumber(), 1); - assert.equal(new BN('7fffffff', 16).fromTwos(32).toNumber(), 2147483647); - assert.equal(new BN('80000000', 16).fromTwos(32).toNumber(), -2147483648); - assert.equal(new BN('f0000000', 16).fromTwos(32).toNumber(), -268435456); - assert.equal(new BN('f1234567', 16).fromTwos(32).toNumber(), -249346713); - assert.equal(new BN('ffffffff', 16).fromTwos(32).toNumber(), -1); - assert.equal(new BN('fffffffe', 16).fromTwos(32).toNumber(), -2); - assert.equal(new BN('fffffffffffffffffffffffffffffffe', 16) - .fromTwos(128).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffe', 16).fromTwos(256).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toNumber(), -1); - assert.equal(new BN('7fffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toString(10), - new BN('5789604461865809771178549250434395392663499' + - '2332820282019728792003956564819967', 10).toString(10)); - assert.equal(new BN('80000000000000000000000000000000' + - '00000000000000000000000000000000', 16).fromTwos(256).toString(10), - new BN('-578960446186580977117854925043439539266349' + - '92332820282019728792003956564819968', 10).toString(10)); - }); - }); - - describe('.toTwos', function () { - it('should convert from negative number to two\'s complement', function () { - assert.equal(new BN(0).toTwos(32).toString(16), '0'); - assert.equal(new BN(1).toTwos(32).toString(16), '1'); - assert.equal(new BN(2147483647).toTwos(32).toString(16), '7fffffff'); - assert.equal(new BN('-2147483648', 10).toTwos(32).toString(16), '80000000'); - assert.equal(new BN('-268435456', 10).toTwos(32).toString(16), 'f0000000'); - assert.equal(new BN('-249346713', 10).toTwos(32).toString(16), 'f1234567'); - assert.equal(new BN('-1', 10).toTwos(32).toString(16), 'ffffffff'); - assert.equal(new BN('-2', 10).toTwos(32).toString(16), 'fffffffe'); - assert.equal(new BN('-2', 10).toTwos(128).toString(16), - 'fffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-2', 10).toTwos(256).toString(16), - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-1', 10).toTwos(256).toString(16), - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('5789604461865809771178549250434395392663' + - '4992332820282019728792003956564819967', 10).toTwos(256).toString(16), - '7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('-578960446186580977117854925043439539266' + - '34992332820282019728792003956564819968', 10).toTwos(256).toString(16), - '8000000000000000000000000000000000000000000000000000000000000000'); - }); - }); - - describe('.isBN', function () { - it('should return true for BN', function () { - assert.equal(BN.isBN(new BN()), true); - }); - - it('should return false for everything else', function () { - assert.equal(BN.isBN(1), false); - assert.equal(BN.isBN([]), false); - assert.equal(BN.isBN({}), false); - }); - }); -}); diff --git a/node_modules/bn.js/util/genCombMulTo.js b/node_modules/bn.js/util/genCombMulTo.js deleted file mode 100644 index 8b456c7..0000000 --- a/node_modules/bn.js/util/genCombMulTo.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -// NOTE: This could be potentionally used to generate loop-less multiplications -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('var w' + k + ' = c;'); - src.push('c = 0;'); - for (var j = minJ; j <= maxJ; j++) { - i = k - j; - - src.push('lo = Math.imul(al' + i + ', bl' + j + ');'); - src.push('mid = Math.imul(al' + i + ', bh' + j + ');'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = Math.imul(ah' + i + ', bh' + j + ');'); - - src.push('w' + k + ' = (w' + k + ' + lo) | 0;'); - src.push('w' + k + ' = (w' + k + ' + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (c + hi) | 0;'); - src.push('c = (c + (mid >>> 13)) | 0;'); - src.push('c = (c + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/node_modules/bn.js/util/genCombMulTo10.js b/node_modules/bn.js/util/genCombMulTo10.js deleted file mode 100644 index cf2e6e8..0000000 --- a/node_modules/bn.js/util/genCombMulTo10.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('lo = Math.imul(al' + (k - minJ) + ', bl' + minJ + ');'); - src.push('mid = Math.imul(al' + (k - minJ) + ', bh' + minJ + ');'); - src.push( - 'mid = (mid + Math.imul(ah' + (k - minJ) + ', bl' + minJ + ')) | 0;'); - src.push('hi = Math.imul(ah' + (k - minJ) + ', bh' + minJ + ');'); - - for (var j = minJ + 1; j <= maxJ; j++) { - i = k - j; - - src.push('lo = (lo + Math.imul(al' + i + ', bl' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(al' + i + ', bh' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = (hi + Math.imul(ah' + i + ', bh' + j + ')) | 0;'); - } - - src.push('var w' + k + ' = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (((hi + (mid >>> 13)) | 0) + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/node_modules/boom/.npmignore b/node_modules/boom/.npmignore deleted file mode 100644 index 77ba16c..0000000 --- a/node_modules/boom/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/boom/.travis.yml b/node_modules/boom/.travis.yml deleted file mode 100755 index dd1b24f..0000000 --- a/node_modules/boom/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js - -node_js: - - 0.10 - - 4.0 - -sudo: false - diff --git a/node_modules/boom/CONTRIBUTING.md b/node_modules/boom/CONTRIBUTING.md deleted file mode 100644 index 8928361..0000000 --- a/node_modules/boom/CONTRIBUTING.md +++ /dev/null @@ -1 +0,0 @@ -Please view our [hapijs contributing guide](https://github.com/hapijs/hapi/blob/master/CONTRIBUTING.md). diff --git a/node_modules/boom/LICENSE b/node_modules/boom/LICENSE deleted file mode 100755 index 3946889..0000000 --- a/node_modules/boom/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2012-2014, Walmart and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/boom/graphs/contributors \ No newline at end of file diff --git a/node_modules/boom/README.md b/node_modules/boom/README.md deleted file mode 100755 index cbd91c9..0000000 --- a/node_modules/boom/README.md +++ /dev/null @@ -1,652 +0,0 @@ -![boom Logo](https://raw.github.com/hapijs/boom/master/images/boom.png) - -HTTP-friendly error objects - -[![Build Status](https://secure.travis-ci.org/hapijs/boom.png)](http://travis-ci.org/hapijs/boom) -[![Current Version](https://img.shields.io/npm/v/boom.svg)](https://www.npmjs.com/package/boom) - -Lead Maintainer: [Adam Bretz](https://github.com/arb) - -**boom** provides a set of utilities for returning HTTP errors. Each utility returns a `Boom` error response -object (instance of `Error`) which includes the following properties: -- `isBoom` - if `true`, indicates this is a `Boom` object instance. -- `isServer` - convenience bool indicating status code >= 500. -- `message` - the error message. -- `output` - the formatted response. Can be directly manipulated after object construction to return a custom - error response. Allowed root keys: - - `statusCode` - the HTTP status code (typically 4xx or 5xx). - - `headers` - an object containing any HTTP headers where each key is a header name and value is the header content. - - `payload` - the formatted object used as the response payload (stringified). Can be directly manipulated but any - changes will be lost - if `reformat()` is called. Any content allowed and by default includes the following content: - - `statusCode` - the HTTP status code, derived from `error.output.statusCode`. - - `error` - the HTTP status message (e.g. 'Bad Request', 'Internal Server Error') derived from `statusCode`. - - `message` - the error message derived from `error.message`. -- inherited `Error` properties. - -The `Boom` object also supports the following method: -- `reformat()` - rebuilds `error.output` using the other object properties. - -## Overview - -- Helper methods - - [`wrap(error, [statusCode], [message])`](#wraperror-statuscode-message) - - [`create(statusCode, [message], [data])`](#createstatuscode-message-data) -- HTTP 4xx Errors - - 400: [`Boom.badRequest([message], [data])`](#boombadrequestmessage-data) - - 401: [`Boom.unauthorized([message], [scheme], [attributes])`](#boomunauthorizedmessage-scheme-attributes) - - 403: [`Boom.forbidden([message], [data])`](#boomforbiddenmessage-data) - - 404: [`Boom.notFound([message], [data])`](#boomnotfoundmessage-data) - - 405: [`Boom.methodNotAllowed([message], [data])`](#boommethodnotallowedmessage-data) - - 406: [`Boom.notAcceptable([message], [data])`](#boomnotacceptablemessage-data) - - 407: [`Boom.proxyAuthRequired([message], [data])`](#boomproxyauthrequiredmessage-data) - - 408: [`Boom.clientTimeout([message], [data])`](#boomclienttimeoutmessage-data) - - 409: [`Boom.conflict([message], [data])`](#boomconflictmessage-data) - - 410: [`Boom.resourceGone([message], [data])`](#boomresourcegonemessage-data) - - 411: [`Boom.lengthRequired([message], [data])`](#boomlengthrequiredmessage-data) - - 412: [`Boom.preconditionFailed([message], [data])`](#boompreconditionfailedmessage-data) - - 413: [`Boom.entityTooLarge([message], [data])`](#boomentitytoolargemessage-data) - - 414: [`Boom.uriTooLong([message], [data])`](#boomuritoolongmessage-data) - - 415: [`Boom.unsupportedMediaType([message], [data])`](#boomunsupportedmediatypemessage-data) - - 416: [`Boom.rangeNotSatisfiable([message], [data])`](#boomrangenotsatisfiablemessage-data) - - 417: [`Boom.expectationFailed([message], [data])`](#boomexpectationfailedmessage-data) - - 422: [`Boom.badData([message], [data])`](#boombaddatamessage-data) - - 428: [`Boom.preconditionRequired([message], [data])`](#boompreconditionrequiredmessage-data) - - 429: [`Boom.tooManyRequests([message], [data])`](#boomtoomanyrequestsmessage-data) -- HTTP 5xx Errors - - 500: [`Boom.badImplementation([message], [data])`](#boombadimplementationmessage-data) - - 501: [`Boom.notImplemented([message], [data])`](#boomnotimplementedmessage-data) - - 502: [`Boom.badGateway([message], [data])`](#boombadgatewaymessage-data) - - 503: [`Boom.serverTimeout([message], [data])`](#boomservertimeoutmessage-data) - - 504: [`Boom.gatewayTimeout([message], [data])`](#boomgatewaytimeoutmessage-data) -- [FAQ](#faq) - - -## Helper Methods - -### `wrap(error, [statusCode], [message])` - -Decorates an error with the **boom** properties where: -- `error` - the error object to wrap. If `error` is already a **boom** object, returns back the same object. -- `statusCode` - optional HTTP status code. Defaults to `500`. -- `message` - optional message string. If the error already has a message, it adds the message as a prefix. - Defaults to no message. - -```js -var error = new Error('Unexpected input'); -Boom.wrap(error, 400); -``` - -### `create(statusCode, [message], [data])` - -Generates an `Error` object with the **boom** decorations where: -- `statusCode` - an HTTP error code number. Must be greater or equal 400. -- `message` - optional message string. -- `data` - additional error data set to `error.data` property. - -```js -var error = Boom.create(400, 'Bad request', { timestamp: Date.now() }); -``` - -## HTTP 4xx Errors - -### `Boom.badRequest([message], [data])` - -Returns a 400 Bad Request error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.badRequest('invalid query'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 400, - "error": "Bad Request", - "message": "invalid query" -} -``` - -### `Boom.unauthorized([message], [scheme], [attributes])` - -Returns a 401 Unauthorized error where: -- `message` - optional message. -- `scheme` can be one of the following: - - an authentication scheme name - - an array of string values. These values will be separated by ', ' and set to the 'WWW-Authenticate' header. -- `attributes` - an object of values to use while setting the 'WWW-Authenticate' header. This value is only used - when `schema` is a string, otherwise it is ignored. Every key/value pair will be included in the - 'WWW-Authenticate' in the format of 'key="value"' as well as in the response payload under the `attributes` key. - `null` and `undefined` will be replaced with an empty string. If `attributes` is set, `message` will be used as - the 'error' segment of the 'WWW-Authenticate' header. If `message` is unset, the 'error' segment of the header - will not be present and `isMissing` will be true on the error object. - -If either `scheme` or `attributes` are set, the resultant `Boom` object will have the 'WWW-Authenticate' header set for the response. - -```js -Boom.unauthorized('invalid password'); -``` - -Generates the following response: - -```json -"payload": { - "statusCode": 401, - "error": "Unauthorized", - "message": "invalid password" -}, -"headers" {} -``` - -```js -Boom.unauthorized('invalid password', 'sample'); -``` - -Generates the following response: - -```json -"payload": { - "statusCode": 401, - "error": "Unauthorized", - "message": "invalid password", - "attributes": { - "error": "invalid password" - } -}, -"headers" { - "WWW-Authenticate": "sample error=\"invalid password\"" -} -``` - -```js -Boom.unauthorized('invalid password', 'sample', { ttl: 0, cache: null, foo: 'bar' }); -``` - -Generates the following response: - -```json -"payload": { - "statusCode": 401, - "error": "Unauthorized", - "message": "invalid password", - "attributes": { - "error": "invalid password", - "ttl": 0, - "cache": "", - "foo": "bar" - } -}, -"headers" { - "WWW-Authenticate": "sample ttl=\"0\", cache=\"\", foo=\"bar\", error=\"invalid password\"" -} -``` - -### `Boom.forbidden([message], [data])` - -Returns a 403 Forbidden error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.forbidden('try again some time'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 403, - "error": "Forbidden", - "message": "try again some time" -} -``` - -### `Boom.notFound([message], [data])` - -Returns a 404 Not Found error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.notFound('missing'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 404, - "error": "Not Found", - "message": "missing" -} -``` - -### `Boom.methodNotAllowed([message], [data])` - -Returns a 405 Method Not Allowed error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.methodNotAllowed('that method is not allowed'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 405, - "error": "Method Not Allowed", - "message": "that method is not allowed" -} -``` - -### `Boom.notAcceptable([message], [data])` - -Returns a 406 Not Acceptable error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.notAcceptable('unacceptable'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 406, - "error": "Not Acceptable", - "message": "unacceptable" -} -``` - -### `Boom.proxyAuthRequired([message], [data])` - -Returns a 407 Proxy Authentication Required error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.proxyAuthRequired('auth missing'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 407, - "error": "Proxy Authentication Required", - "message": "auth missing" -} -``` - -### `Boom.clientTimeout([message], [data])` - -Returns a 408 Request Time-out error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.clientTimeout('timed out'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 408, - "error": "Request Time-out", - "message": "timed out" -} -``` - -### `Boom.conflict([message], [data])` - -Returns a 409 Conflict error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.conflict('there was a conflict'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 409, - "error": "Conflict", - "message": "there was a conflict" -} -``` - -### `Boom.resourceGone([message], [data])` - -Returns a 410 Gone error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.resourceGone('it is gone'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 410, - "error": "Gone", - "message": "it is gone" -} -``` - -### `Boom.lengthRequired([message], [data])` - -Returns a 411 Length Required error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.lengthRequired('length needed'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 411, - "error": "Length Required", - "message": "length needed" -} -``` - -### `Boom.preconditionFailed([message], [data])` - -Returns a 412 Precondition Failed error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.preconditionFailed(); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 412, - "error": "Precondition Failed" -} -``` - -### `Boom.entityTooLarge([message], [data])` - -Returns a 413 Request Entity Too Large error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.entityTooLarge('too big'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 413, - "error": "Request Entity Too Large", - "message": "too big" -} -``` - -### `Boom.uriTooLong([message], [data])` - -Returns a 414 Request-URI Too Large error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.uriTooLong('uri is too long'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 414, - "error": "Request-URI Too Large", - "message": "uri is too long" -} -``` - -### `Boom.unsupportedMediaType([message], [data])` - -Returns a 415 Unsupported Media Type error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.unsupportedMediaType('that media is not supported'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 415, - "error": "Unsupported Media Type", - "message": "that media is not supported" -} -``` - -### `Boom.rangeNotSatisfiable([message], [data])` - -Returns a 416 Requested Range Not Satisfiable error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.rangeNotSatisfiable(); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 416, - "error": "Requested Range Not Satisfiable" -} -``` - -### `Boom.expectationFailed([message], [data])` - -Returns a 417 Expectation Failed error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.expectationFailed('expected this to work'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 417, - "error": "Expectation Failed", - "message": "expected this to work" -} -``` - -### `Boom.badData([message], [data])` - -Returns a 422 Unprocessable Entity error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.badData('your data is bad and you should feel bad'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 422, - "error": "Unprocessable Entity", - "message": "your data is bad and you should feel bad" -} -``` - -### `Boom.preconditionRequired([message], [data])` - -Returns a 428 Precondition Required error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.preconditionRequired('you must supply an If-Match header'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 428, - "error": "Precondition Required", - "message": "you must supply an If-Match header" -} -``` - -### `Boom.tooManyRequests([message], [data])` - -Returns a 429 Too Many Requests error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.tooManyRequests('you have exceeded your request limit'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 429, - "error": "Too Many Requests", - "message": "you have exceeded your request limit" -} -``` - -## HTTP 5xx Errors - -All 500 errors hide your message from the end user. Your message is recorded in the server log. - -### `Boom.badImplementation([message], [data])` - -Returns a 500 Internal Server Error error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.badImplementation('terrible implementation'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 500, - "error": "Internal Server Error", - "message": "An internal server error occurred" -} -``` - -### `Boom.notImplemented([message], [data])` - -Returns a 501 Not Implemented error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.notImplemented('method not implemented'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 501, - "error": "Not Implemented", - "message": "method not implemented" -} -``` - -### `Boom.badGateway([message], [data])` - -Returns a 502 Bad Gateway error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.badGateway('that is a bad gateway'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 502, - "error": "Bad Gateway", - "message": "that is a bad gateway" -} -``` - -### `Boom.serverTimeout([message], [data])` - -Returns a 503 Service Unavailable error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.serverTimeout('unavailable'); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 503, - "error": "Service Unavailable", - "message": "unavailable" -} -``` - -### `Boom.gatewayTimeout([message], [data])` - -Returns a 504 Gateway Time-out error where: -- `message` - optional message. -- `data` - optional additional error data. - -```js -Boom.gatewayTimeout(); -``` - -Generates the following response payload: - -```json -{ - "statusCode": 504, - "error": "Gateway Time-out" -} -``` - -## F.A.Q. - -###### How do I include extra information in my responses? `output.payload` is missing `data`, what gives? - -There is a reason the values passed back in the response payloads are pretty locked down. It's mostly for security and to not leak any important information back to the client. This means you will need to put in a little more effort to include extra information about your custom error. Check out the ["Error transformation"](https://github.com/hapijs/hapi/blob/master/API.md#error-transformation) section in the hapi documentation. diff --git a/node_modules/boom/images/boom.png b/node_modules/boom/images/boom.png deleted file mode 100755 index 373bc13..0000000 Binary files a/node_modules/boom/images/boom.png and /dev/null differ diff --git a/node_modules/boom/lib/index.js b/node_modules/boom/lib/index.js deleted file mode 100755 index 6bdea69..0000000 --- a/node_modules/boom/lib/index.js +++ /dev/null @@ -1,318 +0,0 @@ -// Load modules - -var Http = require('http'); -var Hoek = require('hoek'); - - -// Declare internals - -var internals = {}; - -exports.wrap = function (error, statusCode, message) { - - Hoek.assert(error instanceof Error, 'Cannot wrap non-Error object'); - return (error.isBoom ? error : internals.initialize(error, statusCode || 500, message)); -}; - - -exports.create = function (statusCode, message, data) { - - return internals.create(statusCode, message, data, exports.create); -}; - -internals.create = function (statusCode, message, data, ctor) { - - var error = new Error(message ? message : undefined); // Avoids settings null message - Error.captureStackTrace(error, ctor); // Filter the stack to our external API - error.data = data || null; - internals.initialize(error, statusCode); - return error; -}; - -internals.initialize = function (error, statusCode, message) { - - var numberCode = parseInt(statusCode, 10); - Hoek.assert(!isNaN(numberCode) && numberCode >= 400, 'First argument must be a number (400+):', statusCode); - - error.isBoom = true; - error.isServer = numberCode >= 500; - - if (!error.hasOwnProperty('data')) { - error.data = null; - } - - error.output = { - statusCode: numberCode, - payload: {}, - headers: {} - }; - - error.reformat = internals.reformat; - error.reformat(); - - if (!message && - !error.message) { - - message = error.output.payload.error; - } - - if (message) { - error.message = (message + (error.message ? ': ' + error.message : '')); - } - - return error; -}; - - -internals.reformat = function () { - - this.output.payload.statusCode = this.output.statusCode; - this.output.payload.error = Http.STATUS_CODES[this.output.statusCode] || 'Unknown'; - - if (this.output.statusCode === 500) { - this.output.payload.message = 'An internal server error occurred'; // Hide actual error from user - } - else if (this.message) { - this.output.payload.message = this.message; - } -}; - - -// 4xx Client Errors - -exports.badRequest = function (message, data) { - - return internals.create(400, message, data, exports.badRequest); -}; - - -exports.unauthorized = function (message, scheme, attributes) { // Or function (message, wwwAuthenticate[]) - - var err = internals.create(401, message, undefined, exports.unauthorized); - - if (!scheme) { - return err; - } - - var wwwAuthenticate = ''; - var i = 0; - var il = 0; - - if (typeof scheme === 'string') { - - // function (message, scheme, attributes) - - wwwAuthenticate = scheme; - - if (attributes || message) { - err.output.payload.attributes = {}; - } - - if (attributes) { - var names = Object.keys(attributes); - for (i = 0, il = names.length; i < il; ++i) { - var name = names[i]; - if (i) { - wwwAuthenticate += ','; - } - - var value = attributes[name]; - if (value === null || - value === undefined) { // Value can be zero - - value = ''; - } - wwwAuthenticate += ' ' + name + '="' + Hoek.escapeHeaderAttribute(value.toString()) + '"'; - err.output.payload.attributes[name] = value; - } - } - - if (message) { - if (attributes) { - wwwAuthenticate += ','; - } - wwwAuthenticate += ' error="' + Hoek.escapeHeaderAttribute(message) + '"'; - err.output.payload.attributes.error = message; - } - else { - err.isMissing = true; - } - } - else { - - // function (message, wwwAuthenticate[]) - - var wwwArray = scheme; - for (i = 0, il = wwwArray.length; i < il; ++i) { - if (i) { - wwwAuthenticate += ', '; - } - - wwwAuthenticate += wwwArray[i]; - } - } - - err.output.headers['WWW-Authenticate'] = wwwAuthenticate; - - return err; -}; - - -exports.forbidden = function (message, data) { - - return internals.create(403, message, data, exports.forbidden); -}; - - -exports.notFound = function (message, data) { - - return internals.create(404, message, data, exports.notFound); -}; - - -exports.methodNotAllowed = function (message, data) { - - return internals.create(405, message, data, exports.methodNotAllowed); -}; - - -exports.notAcceptable = function (message, data) { - - return internals.create(406, message, data, exports.notAcceptable); -}; - - -exports.proxyAuthRequired = function (message, data) { - - return internals.create(407, message, data, exports.proxyAuthRequired); -}; - - -exports.clientTimeout = function (message, data) { - - return internals.create(408, message, data, exports.clientTimeout); -}; - - -exports.conflict = function (message, data) { - - return internals.create(409, message, data, exports.conflict); -}; - - -exports.resourceGone = function (message, data) { - - return internals.create(410, message, data, exports.resourceGone); -}; - - -exports.lengthRequired = function (message, data) { - - return internals.create(411, message, data, exports.lengthRequired); -}; - - -exports.preconditionFailed = function (message, data) { - - return internals.create(412, message, data, exports.preconditionFailed); -}; - - -exports.entityTooLarge = function (message, data) { - - return internals.create(413, message, data, exports.entityTooLarge); -}; - - -exports.uriTooLong = function (message, data) { - - return internals.create(414, message, data, exports.uriTooLong); -}; - - -exports.unsupportedMediaType = function (message, data) { - - return internals.create(415, message, data, exports.unsupportedMediaType); -}; - - -exports.rangeNotSatisfiable = function (message, data) { - - return internals.create(416, message, data, exports.rangeNotSatisfiable); -}; - - -exports.expectationFailed = function (message, data) { - - return internals.create(417, message, data, exports.expectationFailed); -}; - -exports.badData = function (message, data) { - - return internals.create(422, message, data, exports.badData); -}; - - -exports.preconditionRequired = function (message, data) { - - return internals.create(428, message, data, exports.preconditionRequired); -}; - - -exports.tooManyRequests = function (message, data) { - - return internals.create(429, message, data, exports.tooManyRequests); -}; - - -// 5xx Server Errors - -exports.internal = function (message, data, statusCode) { - - return internals.serverError(message, data, statusCode, exports.internal); -}; - -internals.serverError = function (message, data, statusCode, ctor) { - - var error; - if (data instanceof Error) { - error = exports.wrap(data, statusCode, message); - } else { - error = internals.create(statusCode || 500, message, undefined, ctor); - error.data = data; - } - - return error; -}; - - -exports.notImplemented = function (message, data) { - - return internals.serverError(message, data, 501, exports.notImplemented); -}; - - -exports.badGateway = function (message, data) { - - return internals.serverError(message, data, 502, exports.badGateway); -}; - - -exports.serverTimeout = function (message, data) { - - return internals.serverError(message, data, 503, exports.serverTimeout); -}; - - -exports.gatewayTimeout = function (message, data) { - - return internals.serverError(message, data, 504, exports.gatewayTimeout); -}; - - -exports.badImplementation = function (message, data) { - - var err = internals.serverError(message, data, 500, exports.badImplementation); - err.isDeveloperError = true; - return err; -}; diff --git a/node_modules/boom/package.json b/node_modules/boom/package.json deleted file mode 100644 index 04536c3..0000000 --- a/node_modules/boom/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "boom@2.x.x", - "/Users/jbaylina/git/MVP/node_modules/hawk" - ] - ], - "_from": "boom@>=2.0.0 <3.0.0", - "_id": "boom@2.10.1", - "_inCache": true, - "_installable": true, - "_location": "/boom", - "_nodeVersion": "0.10.40", - "_npmUser": { - "email": "arbretz@gmail.com", - "name": "arb" - }, - "_npmVersion": "2.11.1", - "_phantomChildren": {}, - "_requested": { - "name": "boom", - "raw": "boom@2.x.x", - "rawSpec": "2.x.x", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/cryptiles", - "/hawk" - ], - "_resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "_shasum": "39c8918ceff5799f83f9492a848f625add0c766f", - "_shrinkwrap": null, - "_spec": "boom@2.x.x", - "_where": "/Users/jbaylina/git/MVP/node_modules/hawk", - "bugs": { - "url": "https://github.com/hapijs/boom/issues" - }, - "dependencies": { - "hoek": "2.x.x" - }, - "description": "HTTP-friendly error objects", - "devDependencies": { - "code": "1.x.x", - "lab": "7.x.x" - }, - "directories": {}, - "dist": { - "shasum": "39c8918ceff5799f83f9492a848f625add0c766f", - "tarball": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" - }, - "engines": { - "node": ">=0.10.40" - }, - "gitHead": "ff1a662a86b39426cdd18f4441b112d307a34a6f", - "homepage": "https://github.com/hapijs/boom#readme", - "keywords": [ - "error", - "http" - ], - "license": "BSD-3-Clause", - "main": "lib/index.js", - "maintainers": [ - { - "email": "eran@hueniverse.com", - "name": "hueniverse" - }, - { - "email": "wpreul@gmail.com", - "name": "wyatt" - }, - { - "email": "arbretz@gmail.com", - "name": "arb" - } - ], - "name": "boom", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/hapijs/boom.git" - }, - "scripts": { - "test": "lab -a code -t 100 -L", - "test-cov-html": "lab -a code -r html -o coverage.html -L" - }, - "version": "2.10.1" -} diff --git a/node_modules/boom/test/index.js b/node_modules/boom/test/index.js deleted file mode 100755 index 79a59e9..0000000 --- a/node_modules/boom/test/index.js +++ /dev/null @@ -1,654 +0,0 @@ -// Load modules - -var Code = require('code'); -var Boom = require('../lib'); -var Lab = require('lab'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var lab = exports.lab = Lab.script(); -var describe = lab.describe; -var it = lab.it; -var expect = Code.expect; - - -it('returns the same object when already boom', function (done) { - - var error = Boom.badRequest(); - var wrapped = Boom.wrap(error); - expect(error).to.equal(wrapped); - done(); -}); - -it('returns an error with info when constructed using another error', function (done) { - - var error = new Error('ka-boom'); - error.xyz = 123; - var err = Boom.wrap(error); - expect(err.xyz).to.equal(123); - expect(err.message).to.equal('ka-boom'); - expect(err.output).to.deep.equal({ - statusCode: 500, - payload: { - statusCode: 500, - error: 'Internal Server Error', - message: 'An internal server error occurred' - }, - headers: {} - }); - expect(err.data).to.equal(null); - done(); -}); - -it('does not override data when constructed using another error', function (done) { - - var error = new Error('ka-boom'); - error.data = { useful: 'data' }; - var err = Boom.wrap(error); - expect(err.data).to.equal(error.data); - done(); -}); - -it('sets new message when none exists', function (done) { - - var error = new Error(); - var wrapped = Boom.wrap(error, 400, 'something bad'); - expect(wrapped.message).to.equal('something bad'); - done(); -}); - -it('throws when statusCode is not a number', function (done) { - - expect(function () { - - Boom.create('x'); - }).to.throw('First argument must be a number (400+): x'); - done(); -}); - -it('will cast a number-string to an integer', function (done) { - - var codes = [ - { input: '404', result: 404 }, - { input: '404.1', result: 404 }, - { input: 400, result: 400 }, - { input: 400.123, result: 400 }]; - for (var i = 0, il = codes.length; i < il; ++i) { - var code = codes[i]; - var err = Boom.create(code.input); - expect(err.output.statusCode).to.equal(code.result); - } - - done(); -}); - -it('throws when statusCode is not finite', function (done) { - - expect(function () { - - Boom.create(1 / 0); - }).to.throw('First argument must be a number (400+): null'); - done(); -}); - -it('sets error code to unknown', function (done) { - - var err = Boom.create(999); - expect(err.output.payload.error).to.equal('Unknown'); - done(); -}); - -describe('create()', function () { - - it('does not sets null message', function (done) { - - var error = Boom.unauthorized(null); - expect(error.output.payload.message).to.not.exist(); - expect(error.isServer).to.be.false(); - done(); - }); - - it('sets message and data', function (done) { - - var error = Boom.badRequest('Missing data', { type: 'user' }); - expect(error.data.type).to.equal('user'); - expect(error.output.payload.message).to.equal('Missing data'); - done(); - }); -}); - -describe('isBoom()', function () { - - it('returns true for Boom object', function (done) { - - expect(Boom.badRequest().isBoom).to.equal(true); - done(); - }); - - it('returns false for Error object', function (done) { - - expect((new Error()).isBoom).to.not.exist(); - done(); - }); -}); - -describe('badRequest()', function () { - - it('returns a 400 error statusCode', function (done) { - - var error = Boom.badRequest(); - - expect(error.output.statusCode).to.equal(400); - expect(error.isServer).to.be.false(); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.badRequest('my message').message).to.equal('my message'); - done(); - }); - - it('sets the message to HTTP status if none provided', function (done) { - - expect(Boom.badRequest().message).to.equal('Bad Request'); - done(); - }); -}); - -describe('unauthorized()', function () { - - it('returns a 401 error statusCode', function (done) { - - var err = Boom.unauthorized(); - expect(err.output.statusCode).to.equal(401); - expect(err.output.headers).to.deep.equal({}); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.unauthorized('my message').message).to.equal('my message'); - done(); - }); - - it('returns a WWW-Authenticate header when passed a scheme', function (done) { - - var err = Boom.unauthorized('boom', 'Test'); - expect(err.output.statusCode).to.equal(401); - expect(err.output.headers['WWW-Authenticate']).to.equal('Test error="boom"'); - done(); - }); - - it('returns a WWW-Authenticate header set to the schema array value', function (done) { - - var err = Boom.unauthorized(null, ['Test','one','two']); - expect(err.output.statusCode).to.equal(401); - expect(err.output.headers['WWW-Authenticate']).to.equal('Test, one, two'); - done(); - }); - - it('returns a WWW-Authenticate header when passed a scheme and attributes', function (done) { - - var err = Boom.unauthorized('boom', 'Test', { a: 1, b: 'something', c: null, d: 0 }); - expect(err.output.statusCode).to.equal(401); - expect(err.output.headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0", error="boom"'); - expect(err.output.payload.attributes).to.deep.equal({ a: 1, b: 'something', c: '', d: 0, error: 'boom' }); - done(); - }); - - it('returns a WWW-Authenticate header when passed attributes, missing error', function (done) { - - var err = Boom.unauthorized(null, 'Test', { a: 1, b: 'something', c: null, d: 0 }); - expect(err.output.statusCode).to.equal(401); - expect(err.output.headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0"'); - expect(err.isMissing).to.equal(true); - done(); - }); - - it('sets the isMissing flag when error message is empty', function (done) { - - var err = Boom.unauthorized('', 'Basic'); - expect(err.isMissing).to.equal(true); - done(); - }); - - it('does not set the isMissing flag when error message is not empty', function (done) { - - var err = Boom.unauthorized('message', 'Basic'); - expect(err.isMissing).to.equal(undefined); - done(); - }); - - it('sets a WWW-Authenticate when passed as an array', function (done) { - - var err = Boom.unauthorized('message', ['Basic', 'Example e="1"', 'Another x="3", y="4"']); - expect(err.output.headers['WWW-Authenticate']).to.equal('Basic, Example e="1", Another x="3", y="4"'); - done(); - }); -}); - - -describe('methodNotAllowed()', function () { - - it('returns a 405 error statusCode', function (done) { - - expect(Boom.methodNotAllowed().output.statusCode).to.equal(405); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.methodNotAllowed('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('notAcceptable()', function () { - - it('returns a 406 error statusCode', function (done) { - - expect(Boom.notAcceptable().output.statusCode).to.equal(406); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.notAcceptable('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('proxyAuthRequired()', function () { - - it('returns a 407 error statusCode', function (done) { - - expect(Boom.proxyAuthRequired().output.statusCode).to.equal(407); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.proxyAuthRequired('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('clientTimeout()', function () { - - it('returns a 408 error statusCode', function (done) { - - expect(Boom.clientTimeout().output.statusCode).to.equal(408); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.clientTimeout('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('conflict()', function () { - - it('returns a 409 error statusCode', function (done) { - - expect(Boom.conflict().output.statusCode).to.equal(409); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.conflict('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('resourceGone()', function () { - - it('returns a 410 error statusCode', function (done) { - - expect(Boom.resourceGone().output.statusCode).to.equal(410); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.resourceGone('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('lengthRequired()', function () { - - it('returns a 411 error statusCode', function (done) { - - expect(Boom.lengthRequired().output.statusCode).to.equal(411); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.lengthRequired('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('preconditionFailed()', function () { - - it('returns a 412 error statusCode', function (done) { - - expect(Boom.preconditionFailed().output.statusCode).to.equal(412); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.preconditionFailed('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('entityTooLarge()', function () { - - it('returns a 413 error statusCode', function (done) { - - expect(Boom.entityTooLarge().output.statusCode).to.equal(413); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.entityTooLarge('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('uriTooLong()', function () { - - it('returns a 414 error statusCode', function (done) { - - expect(Boom.uriTooLong().output.statusCode).to.equal(414); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.uriTooLong('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('unsupportedMediaType()', function () { - - it('returns a 415 error statusCode', function (done) { - - expect(Boom.unsupportedMediaType().output.statusCode).to.equal(415); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.unsupportedMediaType('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('rangeNotSatisfiable()', function () { - - it('returns a 416 error statusCode', function (done) { - - expect(Boom.rangeNotSatisfiable().output.statusCode).to.equal(416); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.rangeNotSatisfiable('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('expectationFailed()', function () { - - it('returns a 417 error statusCode', function (done) { - - expect(Boom.expectationFailed().output.statusCode).to.equal(417); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.expectationFailed('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('badData()', function () { - - it('returns a 422 error statusCode', function (done) { - - expect(Boom.badData().output.statusCode).to.equal(422); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.badData('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('preconditionRequired()', function () { - - it('returns a 428 error statusCode', function (done) { - - expect(Boom.preconditionRequired().output.statusCode).to.equal(428); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.preconditionRequired('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('tooManyRequests()', function () { - - it('returns a 429 error statusCode', function (done) { - - expect(Boom.tooManyRequests().output.statusCode).to.equal(429); - done(); - }); - - it('sets the message with the passed-in message', function (done) { - - expect(Boom.tooManyRequests('my message').message).to.equal('my message'); - done(); - }); -}); - -describe('serverTimeout()', function () { - - it('returns a 503 error statusCode', function (done) { - - expect(Boom.serverTimeout().output.statusCode).to.equal(503); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.serverTimeout('my message').message).to.equal('my message'); - done(); - }); -}); - -describe('forbidden()', function () { - - it('returns a 403 error statusCode', function (done) { - - expect(Boom.forbidden().output.statusCode).to.equal(403); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.forbidden('my message').message).to.equal('my message'); - done(); - }); -}); - -describe('notFound()', function () { - - it('returns a 404 error statusCode', function (done) { - - expect(Boom.notFound().output.statusCode).to.equal(404); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.notFound('my message').message).to.equal('my message'); - done(); - }); -}); - -describe('internal()', function () { - - it('returns a 500 error statusCode', function (done) { - - expect(Boom.internal().output.statusCode).to.equal(500); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - var err = Boom.internal('my message'); - expect(err.message).to.equal('my message'); - expect(err.isServer).to.true(); - expect(err.output.payload.message).to.equal('An internal server error occurred'); - done(); - }); - - it('passes data on the callback if its passed in', function (done) { - - expect(Boom.internal('my message', { my: 'data' }).data.my).to.equal('data'); - done(); - }); - - it('returns an error with composite message', function (done) { - - try { - JSON.parse('{'); - } - catch (err) { - var boom = Boom.internal('Someting bad', err); - expect(boom.message).to.equal('Someting bad: Unexpected end of input'); - expect(boom.isServer).to.be.true(); - done(); - } - }); -}); - -describe('notImplemented()', function () { - - it('returns a 501 error statusCode', function (done) { - - expect(Boom.notImplemented().output.statusCode).to.equal(501); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.notImplemented('my message').message).to.equal('my message'); - done(); - }); -}); - - -describe('badGateway()', function () { - - it('returns a 502 error statusCode', function (done) { - - expect(Boom.badGateway().output.statusCode).to.equal(502); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.badGateway('my message').message).to.equal('my message'); - done(); - }); -}); - -describe('gatewayTimeout()', function () { - - it('returns a 504 error statusCode', function (done) { - - expect(Boom.gatewayTimeout().output.statusCode).to.equal(504); - done(); - }); - - it('sets the message with the passed in message', function (done) { - - expect(Boom.gatewayTimeout('my message').message).to.equal('my message'); - done(); - }); -}); - -describe('badImplementation()', function () { - - it('returns a 500 error statusCode', function (done) { - - var err = Boom.badImplementation(); - expect(err.output.statusCode).to.equal(500); - expect(err.isDeveloperError).to.equal(true); - expect(err.isServer).to.be.true(); - done(); - }); -}); - -describe('stack trace', function () { - - it('should omit lib', function (done) { - - ['badRequest', 'unauthorized', 'forbidden', 'notFound', 'methodNotAllowed', - 'notAcceptable', 'proxyAuthRequired', 'clientTimeout', 'conflict', - 'resourceGone', 'lengthRequired', 'preconditionFailed', 'entityTooLarge', - 'uriTooLong', 'unsupportedMediaType', 'rangeNotSatisfiable', 'expectationFailed', - 'badData', 'preconditionRequired', 'tooManyRequests', - - // 500s - 'internal', 'notImplemented', 'badGateway', 'serverTimeout', 'gatewayTimeout', - 'badImplementation' - ].forEach(function (name) { - - var err = Boom[name](); - expect(err.stack).to.not.match(/\/lib\/index\.js/); - }); - - done(); - }); -}); diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md deleted file mode 100644 index 1793929..0000000 --- a/node_modules/brace-expansion/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# brace-expansion - -[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), -as known from sh/bash, in JavaScript. - -[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) -[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) - -[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) - -## Example - -```js -var expand = require('brace-expansion'); - -expand('file-{a,b,c}.jpg') -// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] - -expand('-v{,,}') -// => ['-v', '-v', '-v'] - -expand('file{0..2}.jpg') -// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] - -expand('file-{a..c}.jpg') -// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] - -expand('file{2..0}.jpg') -// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] - -expand('file{0..4..2}.jpg') -// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] - -expand('file-{a..e..2}.jpg') -// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] - -expand('file{00..10..5}.jpg') -// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] - -expand('{{A..C},{a..c}}') -// => ['A', 'B', 'C', 'a', 'b', 'c'] - -expand('ppp{,config,oe{,conf}}') -// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] -``` - -## API - -```js -var expand = require('brace-expansion'); -``` - -### var expanded = expand(str) - -Return an array of all possible and valid expansions of `str`. If none are -found, `[str]` is returned. - -Valid expansions are: - -```js -/^(.*,)+(.+)?$/ -// {a,b,...} -``` - -A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. - -```js -/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ -// {x..y[..incr]} -``` - -A numeric sequence from `x` to `y` inclusive, with optional increment. -If `x` or `y` start with a leading `0`, all the numbers will be padded -to have equal length. Negative numbers and backwards iteration work too. - -```js -/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ -// {x..y[..incr]} -``` - -An alphabetic sequence from `x` to `y` inclusive, with optional increment. -`x` and `y` must be exactly one character, and if given, `incr` must be a -number. - -For compatibility reasons, the string `${` is not eligible for brace expansion. - -## Installation - -With [npm](https://npmjs.org) do: - -```bash -npm install brace-expansion -``` - -## Contributors - -- [Julian Gruber](https://github.com/juliangruber) -- [Isaac Z. Schlueter](https://github.com/isaacs) - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js deleted file mode 100644 index 955f27c..0000000 --- a/node_modules/brace-expansion/index.js +++ /dev/null @@ -1,201 +0,0 @@ -var concatMap = require('concat-map'); -var balanced = require('balanced-match'); - -module.exports = expandTop; - -var escSlash = '\0SLASH'+Math.random()+'\0'; -var escOpen = '\0OPEN'+Math.random()+'\0'; -var escClose = '\0CLOSE'+Math.random()+'\0'; -var escComma = '\0COMMA'+Math.random()+'\0'; -var escPeriod = '\0PERIOD'+Math.random()+'\0'; - -function numeric(str) { - return parseInt(str, 10) == str - ? parseInt(str, 10) - : str.charCodeAt(0); -} - -function escapeBraces(str) { - return str.split('\\\\').join(escSlash) - .split('\\{').join(escOpen) - .split('\\}').join(escClose) - .split('\\,').join(escComma) - .split('\\.').join(escPeriod); -} - -function unescapeBraces(str) { - return str.split(escSlash).join('\\') - .split(escOpen).join('{') - .split(escClose).join('}') - .split(escComma).join(',') - .split(escPeriod).join('.'); -} - - -// Basically just str.split(","), but handling cases -// where we have nested braced sections, which should be -// treated as individual members, like {a,{b,c},d} -function parseCommaParts(str) { - if (!str) - return ['']; - - var parts = []; - var m = balanced('{', '}', str); - - if (!m) - return str.split(','); - - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(','); - - p[p.length-1] += '{' + body + '}'; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length-1] += postParts.shift(); - p.push.apply(p, postParts); - } - - parts.push.apply(parts, p); - - return parts; -} - -function expandTop(str) { - if (!str) - return []; - - // I don't know why Bash 4.3 does this, but it does. - // Anything starting with {} will have the first two bytes preserved - // but *only* at the top level, so {},a}b will not expand to anything, - // but a{},b}c will be expanded to [a}c,abc]. - // One could argue that this is a bug in Bash, but since the goal of - // this module is to match Bash's rules, we escape a leading {} - if (str.substr(0, 2) === '{}') { - str = '\\{\\}' + str.substr(2); - } - - return expand(escapeBraces(str), true).map(unescapeBraces); -} - -function identity(e) { - return e; -} - -function embrace(str) { - return '{' + str + '}'; -} -function isPadded(el) { - return /^-?0\d/.test(el); -} - -function lte(i, y) { - return i <= y; -} -function gte(i, y) { - return i >= y; -} - -function expand(str, isTop) { - var expansions = []; - - var m = balanced('{', '}', str); - if (!m || /\$$/.test(m.pre)) return [str]; - - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = /^(.*,)+(.+)?$/.test(m.body); - if (!isSequence && !isOptions) { - // {a},b} - if (m.post.match(/,.*\}/)) { - str = m.pre + '{' + m.body + escClose + m.post; - return expand(str); - } - return [str]; - } - - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - // x{{a,b}}y ==> x{a}y x{b}y - n = expand(n[0], false).map(embrace); - if (n.length === 1) { - var post = m.post.length - ? expand(m.post, false) - : ['']; - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } - } - - // at this point, n is the parts, and we know it's not a comma set - // with a single entry. - - // no need to expand pre, since it is guaranteed to be free of brace-sets - var pre = m.pre; - var post = m.post.length - ? expand(m.post, false) - : ['']; - - var N; - - if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); - var width = Math.max(n[0].length, n[1].length) - var incr = n.length == 3 - ? Math.abs(numeric(n[2])) - : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; - } - var pad = n.some(isPadded); - - N = []; - - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === '\\') - c = ''; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join('0'); - if (i < 0) - c = '-' + z + c.slice(1); - else - c = z + c; - } - } - } - N.push(c); - } - } else { - N = concatMap(n, function(el) { return expand(el, false) }); - } - - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) - expansions.push(expansion); - } - } - - return expansions; -} - diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json deleted file mode 100644 index 33569b5..0000000 --- a/node_modules/brace-expansion/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "brace-expansion@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/minimatch" - ] - ], - "_from": "brace-expansion@>=1.0.0 <2.0.0", - "_id": "brace-expansion@1.1.6", - "_inCache": true, - "_installable": true, - "_location": "/brace-expansion", - "_nodeVersion": "4.4.7", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/brace-expansion-1.1.6.tgz_1469047715600_0.9362958471756428" - }, - "_npmUser": { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - "_npmVersion": "2.15.8", - "_phantomChildren": {}, - "_requested": { - "name": "brace-expansion", - "raw": "brace-expansion@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/minimatch" - ], - "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", - "_shasum": "7197d7eaa9b87e648390ea61fc66c84427420df9", - "_shrinkwrap": null, - "_spec": "brace-expansion@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/minimatch", - "author": { - "email": "mail@juliangruber.com", - "name": "Julian Gruber", - "url": "http://juliangruber.com" - }, - "bugs": { - "url": "https://github.com/juliangruber/brace-expansion/issues" - }, - "dependencies": { - "balanced-match": "^0.4.1", - "concat-map": "0.0.1" - }, - "description": "Brace expansion as known from sh/bash", - "devDependencies": { - "tape": "^4.6.0" - }, - "directories": {}, - "dist": { - "shasum": "7197d7eaa9b87e648390ea61fc66c84427420df9", - "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" - }, - "gitHead": "791262fa06625e9c5594cde529a21d82086af5f2", - "homepage": "https://github.com/juliangruber/brace-expansion", - "keywords": [], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - { - "email": "isaacs@npmjs.com", - "name": "isaacs" - } - ], - "name": "brace-expansion", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/brace-expansion.git" - }, - "scripts": { - "gentest": "bash test/generate.sh", - "test": "tape test/*.js" - }, - "testling": { - "browsers": [ - "ie/8..latest", - "firefox/20..latest", - "firefox/nightly", - "chrome/25..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ], - "files": "test/*.js" - }, - "version": "1.1.6" -} diff --git a/node_modules/brorand/.npmignore b/node_modules/brorand/.npmignore deleted file mode 100644 index 1ca9571..0000000 --- a/node_modules/brorand/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log diff --git a/node_modules/brorand/README.md b/node_modules/brorand/README.md deleted file mode 100644 index f80437d..0000000 --- a/node_modules/brorand/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Brorand - -#### LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2014. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/brorand/index.js b/node_modules/brorand/index.js deleted file mode 100644 index 17f0855..0000000 --- a/node_modules/brorand/index.js +++ /dev/null @@ -1,57 +0,0 @@ -var r; - -module.exports = function rand(len) { - if (!r) - r = new Rand(null); - - return r.generate(len); -}; - -function Rand(rand) { - this.rand = rand; -} -module.exports.Rand = Rand; - -Rand.prototype.generate = function generate(len) { - return this._rand(len); -}; - -if (typeof window === 'object') { - if (window.crypto && window.crypto.getRandomValues) { - // Modern browsers - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - window.crypto.getRandomValues(arr); - return arr; - }; - } else if (window.msCrypto && window.msCrypto.getRandomValues) { - // IE - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - window.msCrypto.getRandomValues(arr); - return arr; - }; - } else { - // Old junk - Rand.prototype._rand = function() { - throw new Error('Not implemented yet'); - }; - } -} else { - // Node.js or Web worker - try { - var crypto = require('crypto'); - - Rand.prototype._rand = function _rand(n) { - return crypto.randomBytes(n); - }; - } catch (e) { - // Emulate crypto API using randy - Rand.prototype._rand = function _rand(n) { - var res = new Uint8Array(n); - for (var i = 0; i < res.length; i++) - res[i] = this.rand.getByte(); - return res; - }; - } -} diff --git a/node_modules/brorand/package.json b/node_modules/brorand/package.json deleted file mode 100644 index 7aa2723..0000000 --- a/node_modules/brorand/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_args": [ - [ - "brorand@^1.0.1", - "/Users/jbaylina/git/MVP/node_modules/elliptic" - ] - ], - "_from": "brorand@>=1.0.1 <2.0.0", - "_id": "brorand@1.0.6", - "_inCache": true, - "_installable": true, - "_location": "/brorand", - "_nodeVersion": "6.3.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/brorand-1.0.6.tgz_1473323651066_0.41867022518999875" - }, - "_npmUser": { - "email": "fedor@indutny.com", - "name": "indutny" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "brorand", - "raw": "brorand@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/elliptic" - ], - "_resolved": "https://registry.npmjs.org/brorand/-/brorand-1.0.6.tgz", - "_shasum": "4028706b915f91f7b349a2e0bf3c376039d216e5", - "_shrinkwrap": null, - "_spec": "brorand@^1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/elliptic", - "author": { - "email": "fedor@indutny.com", - "name": "Fedor Indutny" - }, - "browser": { - "crypto": false - }, - "bugs": { - "url": "https://github.com/indutny/brorand/issues" - }, - "dependencies": {}, - "description": "Random number generator for browsers and node.js", - "devDependencies": { - "mocha": "^2.0.1" - }, - "directories": {}, - "dist": { - "shasum": "4028706b915f91f7b349a2e0bf3c376039d216e5", - "tarball": "https://registry.npmjs.org/brorand/-/brorand-1.0.6.tgz" - }, - "gitHead": "f077f0a95c627f2707d7b7699ccddca308a58d15", - "homepage": "https://github.com/indutny/brorand", - "keywords": [ - "Random", - "RNG", - "browser", - "crypto" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "fedor@indutny.com", - "name": "indutny" - } - ], - "name": "brorand", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/brorand.git" - }, - "scripts": { - "test": "mocha --reporter=spec test/**/*-test.js" - }, - "version": "1.0.6" -} diff --git a/node_modules/brorand/test/api-test.js b/node_modules/brorand/test/api-test.js deleted file mode 100644 index b6c876d..0000000 --- a/node_modules/brorand/test/api-test.js +++ /dev/null @@ -1,8 +0,0 @@ -var brorand = require('../'); -var assert = require('assert'); - -describe('Brorand', function() { - it('should generate random numbers', function() { - assert.equal(brorand(100).length, 100); - }); -}); diff --git a/node_modules/browserify-aes/.eslintrc b/node_modules/browserify-aes/.eslintrc deleted file mode 100644 index bed248a..0000000 --- a/node_modules/browserify-aes/.eslintrc +++ /dev/null @@ -1,132 +0,0 @@ -{ - "ecmaFeatures": { - "modules": true, - "experimentalObjectRestSpread": true - }, - - "env": { - "browser": false, - "es6": true, - "node": true - }, - - "plugins": [ - "standard" - ], - - "globals": { - "document": false, - "navigator": false, - "window": false - }, - - "rules": { - "accessor-pairs": 2, - "arrow-spacing": [2, { "before": true, "after": true }], - "block-spacing": [2, "always"], - "brace-style": [2, "1tbs", { "allowSingleLine": true }], - "comma-dangle": [2, "never"], - "comma-spacing": [2, { "before": false, "after": true }], - "comma-style": [2, "last"], - "constructor-super": 2, - "curly": [2, "multi-line"], - "dot-location": [2, "property"], - "eol-last": 2, - "eqeqeq": [2, "allow-null"], - "generator-star-spacing": [2, { "before": true, "after": true }], - "handle-callback-err": [2, "^(err|error)$" ], - "indent": [2, 2, { "SwitchCase": 1 }], - "key-spacing": [2, { "beforeColon": false, "afterColon": true }], - "new-cap": [2, { "newIsCap": true, "capIsNew": false }], - "new-parens": 2, - "no-array-constructor": 2, - "no-caller": 2, - "no-class-assign": 2, - "no-cond-assign": 2, - "no-const-assign": 2, - "no-control-regex": 2, - "no-debugger": 2, - "no-delete-var": 2, - "no-dupe-args": 2, - "no-dupe-class-members": 2, - "no-dupe-keys": 2, - "no-duplicate-case": 2, - "no-empty-character-class": 2, - "no-empty-label": 2, - "no-eval": 2, - "no-ex-assign": 2, - "no-extend-native": 2, - "no-extra-bind": 2, - "no-extra-boolean-cast": 2, - "no-extra-parens": [2, "functions"], - "no-fallthrough": 2, - "no-floating-decimal": 2, - "no-func-assign": 2, - "no-implied-eval": 2, - "no-inner-declarations": [2, "functions"], - "no-invalid-regexp": 2, - "no-irregular-whitespace": 2, - "no-iterator": 2, - "no-label-var": 2, - "no-labels": 2, - "no-lone-blocks": 2, - "no-mixed-spaces-and-tabs": 2, - "no-multi-spaces": 2, - "no-multi-str": 2, - "no-multiple-empty-lines": [2, { "max": 1 }], - "no-native-reassign": 2, - "no-negated-in-lhs": 2, - "no-new": 2, - "no-new-func": 2, - "no-new-object": 2, - "no-new-require": 2, - "no-new-wrappers": 2, - "no-obj-calls": 2, - "no-octal": 2, - "no-octal-escape": 2, - "no-proto": 2, - "no-redeclare": 2, - "no-regex-spaces": 2, - "no-return-assign": 2, - "no-self-compare": 2, - "no-sequences": 2, - "no-shadow-restricted-names": 2, - "no-spaced-func": 2, - "no-sparse-arrays": 2, - "no-this-before-super": 2, - "no-throw-literal": 2, - "no-trailing-spaces": 2, - "no-undef": 2, - "no-undef-init": 2, - "no-unexpected-multiline": 2, - "no-unneeded-ternary": [2, { "defaultAssignment": false }], - "no-unreachable": 2, - "no-unused-vars": [2, { "vars": "all", "args": "none" }], - "no-useless-call": 2, - "no-with": 2, - "one-var": [2, { "initialized": "never" }], - "operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }], - "padded-blocks": [2, "never"], - "quotes": [2, "single", "avoid-escape"], - "radix": 2, - "semi": [2, "never"], - "semi-spacing": [2, { "before": false, "after": true }], - "space-after-keywords": [2, "always"], - "space-before-blocks": [2, "always"], - "space-before-function-paren": [2, "always"], - "space-before-keywords": [2, "always"], - "space-in-parens": [2, "never"], - "space-infix-ops": 2, - "space-return-throw-case": 2, - "space-unary-ops": [2, { "words": true, "nonwords": false }], - "spaced-comment": [2, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!", ","] }], - "use-isnan": 2, - "valid-typeof": 2, - "wrap-iife": [2, "any"], - "yoda": [2, "never"], - - "standard/object-curly-even-spacing": [2, "either"], - "standard/array-bracket-even-spacing": [2, "either"], - "standard/computed-property-even-spacing": [2, "even"] - } -} diff --git a/node_modules/browserify-aes/.npmignore b/node_modules/browserify-aes/.npmignore deleted file mode 100644 index 65e3ba2..0000000 --- a/node_modules/browserify-aes/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test/ diff --git a/node_modules/browserify-aes/.travis.yml b/node_modules/browserify-aes/.travis.yml deleted file mode 100644 index eb83acd..0000000 --- a/node_modules/browserify-aes/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.12" - - "iojs" diff --git a/node_modules/browserify-aes/LICENSE b/node_modules/browserify-aes/LICENSE deleted file mode 100644 index 924b38b..0000000 --- a/node_modules/browserify-aes/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015 browserify-aes contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/browserify-aes/aes.js b/node_modules/browserify-aes/aes.js deleted file mode 100644 index 4829057..0000000 --- a/node_modules/browserify-aes/aes.js +++ /dev/null @@ -1,177 +0,0 @@ -// based on the aes implimentation in triple sec -// https://github.com/keybase/triplesec - -// which is in turn based on the one from crypto-js -// https://code.google.com/p/crypto-js/ - -var uint_max = Math.pow(2, 32) -function fixup_uint32 (x) { - var ret, x_pos - ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x - return ret -} -function scrub_vec (v) { - for (var i = 0; i < v.length; v++) { - v[i] = 0 - } - return false -} - -function Global () { - this.SBOX = [] - this.INV_SBOX = [] - this.SUB_MIX = [[], [], [], []] - this.INV_SUB_MIX = [[], [], [], []] - this.init() - this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] -} - -Global.prototype.init = function () { - var d, i, sx, t, x, x2, x4, x8, xi, _i - d = (function () { - var _i, _results - _results = [] - for (i = _i = 0; _i < 256; i = ++_i) { - if (i < 128) { - _results.push(i << 1) - } else { - _results.push((i << 1) ^ 0x11b) - } - } - return _results - })() - x = 0 - xi = 0 - for (i = _i = 0; _i < 256; i = ++_i) { - sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 - this.SBOX[x] = sx - this.INV_SBOX[sx] = x - x2 = d[x] - x4 = d[x2] - x8 = d[x4] - t = (d[sx] * 0x101) ^ (sx * 0x1010100) - this.SUB_MIX[0][x] = (t << 24) | (t >>> 8) - this.SUB_MIX[1][x] = (t << 16) | (t >>> 16) - this.SUB_MIX[2][x] = (t << 8) | (t >>> 24) - this.SUB_MIX[3][x] = t - t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) - this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) - this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) - this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) - this.INV_SUB_MIX[3][sx] = t - if (x === 0) { - x = xi = 1 - } else { - x = x2 ^ d[d[d[x8 ^ x2]]] - xi ^= d[d[xi]] - } - } - return true -} - -var G = new Global() - -AES.blockSize = 4 * 4 - -AES.prototype.blockSize = AES.blockSize - -AES.keySize = 256 / 8 - -AES.prototype.keySize = AES.keySize - -function bufferToArray (buf) { - var len = buf.length / 4 - var out = new Array(len) - var i = -1 - while (++i < len) { - out[i] = buf.readUInt32BE(i * 4) - } - return out -} -function AES (key) { - this._key = bufferToArray(key) - this._doReset() -} - -AES.prototype._doReset = function () { - var invKsRow, keySize, keyWords, ksRow, ksRows, t - keyWords = this._key - keySize = keyWords.length - this._nRounds = keySize + 6 - ksRows = (this._nRounds + 1) * 4 - this._keySchedule = [] - for (ksRow = 0; ksRow < ksRows; ksRow++) { - this._keySchedule[ksRow] = ksRow < keySize ? keyWords[ksRow] : (t = this._keySchedule[ksRow - 1], (ksRow % keySize) === 0 ? (t = (t << 8) | (t >>> 24), t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff], t ^= G.RCON[(ksRow / keySize) | 0] << 24) : keySize > 6 && ksRow % keySize === 4 ? t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff] : void 0, this._keySchedule[ksRow - keySize] ^ t) - } - this._invKeySchedule = [] - for (invKsRow = 0; invKsRow < ksRows; invKsRow++) { - ksRow = ksRows - invKsRow - t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)] - this._invKeySchedule[invKsRow] = invKsRow < 4 || ksRow <= 4 ? t : G.INV_SUB_MIX[0][G.SBOX[t >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(t >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(t >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[t & 0xff]] - } - return true -} - -AES.prototype.encryptBlock = function (M) { - M = bufferToArray(new Buffer(M)) - var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX) - var buf = new Buffer(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[1], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[3], 12) - return buf -} - -AES.prototype.decryptBlock = function (M) { - M = bufferToArray(new Buffer(M)) - var temp = [M[3], M[1]] - M[1] = temp[0] - M[3] = temp[1] - var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX) - var buf = new Buffer(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[3], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[1], 12) - return buf -} - -AES.prototype.scrub = function () { - scrub_vec(this._keySchedule) - scrub_vec(this._invKeySchedule) - scrub_vec(this._key) -} - -AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) { - var ksRow, s0, s1, s2, s3, t0, t1, t2, t3 - - s0 = M[0] ^ keySchedule[0] - s1 = M[1] ^ keySchedule[1] - s2 = M[2] ^ keySchedule[2] - s3 = M[3] ^ keySchedule[3] - ksRow = 4 - for (var round = 1; round < this._nRounds; round++) { - t0 = SUB_MIX[0][s0 >>> 24] ^ SUB_MIX[1][(s1 >>> 16) & 0xff] ^ SUB_MIX[2][(s2 >>> 8) & 0xff] ^ SUB_MIX[3][s3 & 0xff] ^ keySchedule[ksRow++] - t1 = SUB_MIX[0][s1 >>> 24] ^ SUB_MIX[1][(s2 >>> 16) & 0xff] ^ SUB_MIX[2][(s3 >>> 8) & 0xff] ^ SUB_MIX[3][s0 & 0xff] ^ keySchedule[ksRow++] - t2 = SUB_MIX[0][s2 >>> 24] ^ SUB_MIX[1][(s3 >>> 16) & 0xff] ^ SUB_MIX[2][(s0 >>> 8) & 0xff] ^ SUB_MIX[3][s1 & 0xff] ^ keySchedule[ksRow++] - t3 = SUB_MIX[0][s3 >>> 24] ^ SUB_MIX[1][(s0 >>> 16) & 0xff] ^ SUB_MIX[2][(s1 >>> 8) & 0xff] ^ SUB_MIX[3][s2 & 0xff] ^ keySchedule[ksRow++] - s0 = t0 - s1 = t1 - s2 = t2 - s3 = t3 - } - t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] - t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] - t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] - t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] - return [ - fixup_uint32(t0), - fixup_uint32(t1), - fixup_uint32(t2), - fixup_uint32(t3) - ] -} - -exports.AES = AES diff --git a/node_modules/browserify-aes/authCipher.js b/node_modules/browserify-aes/authCipher.js deleted file mode 100644 index 1107a01..0000000 --- a/node_modules/browserify-aes/authCipher.js +++ /dev/null @@ -1,97 +0,0 @@ -var aes = require('./aes') -var Transform = require('cipher-base') -var inherits = require('inherits') -var GHASH = require('./ghash') -var xor = require('buffer-xor') -inherits(StreamCipher, Transform) -module.exports = StreamCipher - -function StreamCipher (mode, key, iv, decrypt) { - if (!(this instanceof StreamCipher)) { - return new StreamCipher(mode, key, iv) - } - Transform.call(this) - this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])]) - iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])]) - this._cipher = new aes.AES(key) - this._prev = new Buffer(iv.length) - this._cache = new Buffer('') - this._secCache = new Buffer('') - this._decrypt = decrypt - this._alen = 0 - this._len = 0 - iv.copy(this._prev) - this._mode = mode - var h = new Buffer(4) - h.fill(0) - this._ghash = new GHASH(this._cipher.encryptBlock(h)) - this._authTag = null - this._called = false -} -StreamCipher.prototype._update = function (chunk) { - if (!this._called && this._alen) { - var rump = 16 - (this._alen % 16) - if (rump < 16) { - rump = new Buffer(rump) - rump.fill(0) - this._ghash.update(rump) - } - } - this._called = true - var out = this._mode.encrypt(this, chunk) - if (this._decrypt) { - this._ghash.update(chunk) - } else { - this._ghash.update(out) - } - this._len += chunk.length - return out -} -StreamCipher.prototype._final = function () { - if (this._decrypt && !this._authTag) { - throw new Error('Unsupported state or unable to authenticate data') - } - var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) - if (this._decrypt) { - if (xorTest(tag, this._authTag)) { - throw new Error('Unsupported state or unable to authenticate data') - } - } else { - this._authTag = tag - } - this._cipher.scrub() -} -StreamCipher.prototype.getAuthTag = function getAuthTag () { - if (!this._decrypt && Buffer.isBuffer(this._authTag)) { - return this._authTag - } else { - throw new Error('Attempting to get auth tag in unsupported state') - } -} -StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { - if (this._decrypt) { - this._authTag = tag - } else { - throw new Error('Attempting to set auth tag in unsupported state') - } -} -StreamCipher.prototype.setAAD = function setAAD (buf) { - if (!this._called) { - this._ghash.update(buf) - this._alen += buf.length - } else { - throw new Error('Attempting to set AAD in unsupported state') - } -} -function xorTest (a, b) { - var out = 0 - if (a.length !== b.length) { - out++ - } - var len = Math.min(a.length, b.length) - var i = -1 - while (++i < len) { - out += (a[i] ^ b[i]) - } - return out -} diff --git a/node_modules/browserify-aes/browser.js b/node_modules/browserify-aes/browser.js deleted file mode 100644 index a058a84..0000000 --- a/node_modules/browserify-aes/browser.js +++ /dev/null @@ -1,11 +0,0 @@ -var ciphers = require('./encrypter') -exports.createCipher = exports.Cipher = ciphers.createCipher -exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv -var deciphers = require('./decrypter') -exports.createDecipher = exports.Decipher = deciphers.createDecipher -exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv -var modes = require('./modes') -function getCiphers () { - return Object.keys(modes) -} -exports.listCiphers = exports.getCiphers = getCiphers diff --git a/node_modules/browserify-aes/decrypter.js b/node_modules/browserify-aes/decrypter.js deleted file mode 100644 index b7b8bb0..0000000 --- a/node_modules/browserify-aes/decrypter.js +++ /dev/null @@ -1,137 +0,0 @@ -var aes = require('./aes') -var Transform = require('cipher-base') -var inherits = require('inherits') -var modes = require('./modes') -var StreamCipher = require('./streamCipher') -var AuthCipher = require('./authCipher') -var ebtk = require('evp_bytestokey') - -inherits(Decipher, Transform) -function Decipher (mode, key, iv) { - if (!(this instanceof Decipher)) { - return new Decipher(mode, key, iv) - } - Transform.call(this) - this._cache = new Splitter() - this._last = void 0 - this._cipher = new aes.AES(key) - this._prev = new Buffer(iv.length) - iv.copy(this._prev) - this._mode = mode - this._autopadding = true -} -Decipher.prototype._update = function (data) { - this._cache.add(data) - var chunk - var thing - var out = [] - while ((chunk = this._cache.get(this._autopadding))) { - thing = this._mode.decrypt(this, chunk) - out.push(thing) - } - return Buffer.concat(out) -} -Decipher.prototype._final = function () { - var chunk = this._cache.flush() - if (this._autopadding) { - return unpad(this._mode.decrypt(this, chunk)) - } else if (chunk) { - throw new Error('data not multiple of block length') - } -} -Decipher.prototype.setAutoPadding = function (setTo) { - this._autopadding = !!setTo - return this -} -function Splitter () { - if (!(this instanceof Splitter)) { - return new Splitter() - } - this.cache = new Buffer('') -} -Splitter.prototype.add = function (data) { - this.cache = Buffer.concat([this.cache, data]) -} - -Splitter.prototype.get = function (autoPadding) { - var out - if (autoPadding) { - if (this.cache.length > 16) { - out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - } else { - if (this.cache.length >= 16) { - out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - } - return null -} -Splitter.prototype.flush = function () { - if (this.cache.length) { - return this.cache - } -} -function unpad (last) { - var padded = last[15] - var i = -1 - while (++i < padded) { - if (last[(i + (16 - padded))] !== padded) { - throw new Error('unable to decrypt data') - } - } - if (padded === 16) { - return - } - return last.slice(0, 16 - padded) -} - -var modelist = { - ECB: require('./modes/ecb'), - CBC: require('./modes/cbc'), - CFB: require('./modes/cfb'), - CFB8: require('./modes/cfb8'), - CFB1: require('./modes/cfb1'), - OFB: require('./modes/ofb'), - CTR: require('./modes/ctr'), - GCM: require('./modes/ctr') -} - -function createDecipheriv (suite, password, iv) { - var config = modes[suite.toLowerCase()] - if (!config) { - throw new TypeError('invalid suite type') - } - if (typeof iv === 'string') { - iv = new Buffer(iv) - } - if (typeof password === 'string') { - password = new Buffer(password) - } - if (password.length !== config.key / 8) { - throw new TypeError('invalid key length ' + password.length) - } - if (iv.length !== config.iv) { - throw new TypeError('invalid iv length ' + iv.length) - } - if (config.type === 'stream') { - return new StreamCipher(modelist[config.mode], password, iv, true) - } else if (config.type === 'auth') { - return new AuthCipher(modelist[config.mode], password, iv, true) - } - return new Decipher(modelist[config.mode], password, iv) -} - -function createDecipher (suite, password) { - var config = modes[suite.toLowerCase()] - if (!config) { - throw new TypeError('invalid suite type') - } - var keys = ebtk(password, false, config.key, config.iv) - return createDecipheriv(suite, keys.key, keys.iv) -} -exports.createDecipher = createDecipher -exports.createDecipheriv = createDecipheriv diff --git a/node_modules/browserify-aes/encrypter.js b/node_modules/browserify-aes/encrypter.js deleted file mode 100644 index 3d3f561..0000000 --- a/node_modules/browserify-aes/encrypter.js +++ /dev/null @@ -1,122 +0,0 @@ -var aes = require('./aes') -var Transform = require('cipher-base') -var inherits = require('inherits') -var modes = require('./modes') -var ebtk = require('evp_bytestokey') -var StreamCipher = require('./streamCipher') -var AuthCipher = require('./authCipher') -inherits(Cipher, Transform) -function Cipher (mode, key, iv) { - if (!(this instanceof Cipher)) { - return new Cipher(mode, key, iv) - } - Transform.call(this) - this._cache = new Splitter() - this._cipher = new aes.AES(key) - this._prev = new Buffer(iv.length) - iv.copy(this._prev) - this._mode = mode - this._autopadding = true -} -Cipher.prototype._update = function (data) { - this._cache.add(data) - var chunk - var thing - var out = [] - while ((chunk = this._cache.get())) { - thing = this._mode.encrypt(this, chunk) - out.push(thing) - } - return Buffer.concat(out) -} -Cipher.prototype._final = function () { - var chunk = this._cache.flush() - if (this._autopadding) { - chunk = this._mode.encrypt(this, chunk) - this._cipher.scrub() - return chunk - } else if (chunk.toString('hex') !== '10101010101010101010101010101010') { - this._cipher.scrub() - throw new Error('data not multiple of block length') - } -} -Cipher.prototype.setAutoPadding = function (setTo) { - this._autopadding = !!setTo - return this -} - -function Splitter () { - if (!(this instanceof Splitter)) { - return new Splitter() - } - this.cache = new Buffer('') -} -Splitter.prototype.add = function (data) { - this.cache = Buffer.concat([this.cache, data]) -} - -Splitter.prototype.get = function () { - if (this.cache.length > 15) { - var out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - return null -} -Splitter.prototype.flush = function () { - var len = 16 - this.cache.length - var padBuff = new Buffer(len) - - var i = -1 - while (++i < len) { - padBuff.writeUInt8(len, i) - } - var out = Buffer.concat([this.cache, padBuff]) - return out -} -var modelist = { - ECB: require('./modes/ecb'), - CBC: require('./modes/cbc'), - CFB: require('./modes/cfb'), - CFB8: require('./modes/cfb8'), - CFB1: require('./modes/cfb1'), - OFB: require('./modes/ofb'), - CTR: require('./modes/ctr'), - GCM: require('./modes/ctr') -} - -function createCipheriv (suite, password, iv) { - var config = modes[suite.toLowerCase()] - if (!config) { - throw new TypeError('invalid suite type') - } - if (typeof iv === 'string') { - iv = new Buffer(iv) - } - if (typeof password === 'string') { - password = new Buffer(password) - } - if (password.length !== config.key / 8) { - throw new TypeError('invalid key length ' + password.length) - } - if (iv.length !== config.iv) { - throw new TypeError('invalid iv length ' + iv.length) - } - if (config.type === 'stream') { - return new StreamCipher(modelist[config.mode], password, iv) - } else if (config.type === 'auth') { - return new AuthCipher(modelist[config.mode], password, iv) - } - return new Cipher(modelist[config.mode], password, iv) -} -function createCipher (suite, password) { - var config = modes[suite.toLowerCase()] - if (!config) { - throw new TypeError('invalid suite type') - } - var keys = ebtk(password, false, config.key, config.iv) - return createCipheriv(suite, keys.key, keys.iv) -} - -exports.createCipheriv = createCipheriv -exports.createCipher = createCipher diff --git a/node_modules/browserify-aes/ghash.js b/node_modules/browserify-aes/ghash.js deleted file mode 100644 index 0ca143c..0000000 --- a/node_modules/browserify-aes/ghash.js +++ /dev/null @@ -1,98 +0,0 @@ -var zeros = new Buffer(16) -zeros.fill(0) -module.exports = GHASH -function GHASH (key) { - this.h = key - this.state = new Buffer(16) - this.state.fill(0) - this.cache = new Buffer('') -} -// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html -// by Juho Vähä-Herttua -GHASH.prototype.ghash = function (block) { - var i = -1 - while (++i < block.length) { - this.state[i] ^= block[i] - } - this._multiply() -} - -GHASH.prototype._multiply = function () { - var Vi = toArray(this.h) - var Zi = [0, 0, 0, 0] - var j, xi, lsb_Vi - var i = -1 - while (++i < 128) { - xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0 - if (xi) { - // Z_i+1 = Z_i ^ V_i - Zi = xor(Zi, Vi) - } - - // Store the value of LSB(V_i) - lsb_Vi = (Vi[3] & 1) !== 0 - - // V_i+1 = V_i >> 1 - for (j = 3; j > 0; j--) { - Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) - } - Vi[0] = Vi[0] >>> 1 - - // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R - if (lsb_Vi) { - Vi[0] = Vi[0] ^ (0xe1 << 24) - } - } - this.state = fromArray(Zi) -} -GHASH.prototype.update = function (buf) { - this.cache = Buffer.concat([this.cache, buf]) - var chunk - while (this.cache.length >= 16) { - chunk = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - this.ghash(chunk) - } -} -GHASH.prototype.final = function (abl, bl) { - if (this.cache.length) { - this.ghash(Buffer.concat([this.cache, zeros], 16)) - } - this.ghash(fromArray([ - 0, abl, - 0, bl - ])) - return this.state -} - -function toArray (buf) { - return [ - buf.readUInt32BE(0), - buf.readUInt32BE(4), - buf.readUInt32BE(8), - buf.readUInt32BE(12) - ] -} -function fromArray (out) { - out = out.map(fixup_uint32) - var buf = new Buffer(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[1], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[3], 12) - return buf -} -var uint_max = Math.pow(2, 32) -function fixup_uint32 (x) { - var ret, x_pos - ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x - return ret -} -function xor (a, b) { - return [ - a[0] ^ b[0], - a[1] ^ b[1], - a[2] ^ b[2], - a[3] ^ b[3] - ] -} diff --git a/node_modules/browserify-aes/index.js b/node_modules/browserify-aes/index.js deleted file mode 100644 index 58fa883..0000000 --- a/node_modules/browserify-aes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -var crypto = require('crypto') - -exports.createCipher = exports.Cipher = crypto.createCipher -exports.createCipheriv = exports.Cipheriv = crypto.createCipheriv -exports.createDecipher = exports.Decipher = crypto.createDecipher -exports.createDecipheriv = exports.Decipheriv = crypto.createDecipheriv -exports.listCiphers = exports.getCiphers = crypto.getCiphers diff --git a/node_modules/browserify-aes/modes.js b/node_modules/browserify-aes/modes.js deleted file mode 100644 index c070086..0000000 --- a/node_modules/browserify-aes/modes.js +++ /dev/null @@ -1,171 +0,0 @@ -exports['aes-128-ecb'] = { - cipher: 'AES', - key: 128, - iv: 0, - mode: 'ECB', - type: 'block' -} -exports['aes-192-ecb'] = { - cipher: 'AES', - key: 192, - iv: 0, - mode: 'ECB', - type: 'block' -} -exports['aes-256-ecb'] = { - cipher: 'AES', - key: 256, - iv: 0, - mode: 'ECB', - type: 'block' -} -exports['aes-128-cbc'] = { - cipher: 'AES', - key: 128, - iv: 16, - mode: 'CBC', - type: 'block' -} -exports['aes-192-cbc'] = { - cipher: 'AES', - key: 192, - iv: 16, - mode: 'CBC', - type: 'block' -} -exports['aes-256-cbc'] = { - cipher: 'AES', - key: 256, - iv: 16, - mode: 'CBC', - type: 'block' -} -exports['aes128'] = exports['aes-128-cbc'] -exports['aes192'] = exports['aes-192-cbc'] -exports['aes256'] = exports['aes-256-cbc'] -exports['aes-128-cfb'] = { - cipher: 'AES', - key: 128, - iv: 16, - mode: 'CFB', - type: 'stream' -} -exports['aes-192-cfb'] = { - cipher: 'AES', - key: 192, - iv: 16, - mode: 'CFB', - type: 'stream' -} -exports['aes-256-cfb'] = { - cipher: 'AES', - key: 256, - iv: 16, - mode: 'CFB', - type: 'stream' -} -exports['aes-128-cfb8'] = { - cipher: 'AES', - key: 128, - iv: 16, - mode: 'CFB8', - type: 'stream' -} -exports['aes-192-cfb8'] = { - cipher: 'AES', - key: 192, - iv: 16, - mode: 'CFB8', - type: 'stream' -} -exports['aes-256-cfb8'] = { - cipher: 'AES', - key: 256, - iv: 16, - mode: 'CFB8', - type: 'stream' -} -exports['aes-128-cfb1'] = { - cipher: 'AES', - key: 128, - iv: 16, - mode: 'CFB1', - type: 'stream' -} -exports['aes-192-cfb1'] = { - cipher: 'AES', - key: 192, - iv: 16, - mode: 'CFB1', - type: 'stream' -} -exports['aes-256-cfb1'] = { - cipher: 'AES', - key: 256, - iv: 16, - mode: 'CFB1', - type: 'stream' -} -exports['aes-128-ofb'] = { - cipher: 'AES', - key: 128, - iv: 16, - mode: 'OFB', - type: 'stream' -} -exports['aes-192-ofb'] = { - cipher: 'AES', - key: 192, - iv: 16, - mode: 'OFB', - type: 'stream' -} -exports['aes-256-ofb'] = { - cipher: 'AES', - key: 256, - iv: 16, - mode: 'OFB', - type: 'stream' -} -exports['aes-128-ctr'] = { - cipher: 'AES', - key: 128, - iv: 16, - mode: 'CTR', - type: 'stream' -} -exports['aes-192-ctr'] = { - cipher: 'AES', - key: 192, - iv: 16, - mode: 'CTR', - type: 'stream' -} -exports['aes-256-ctr'] = { - cipher: 'AES', - key: 256, - iv: 16, - mode: 'CTR', - type: 'stream' -} -exports['aes-128-gcm'] = { - cipher: 'AES', - key: 128, - iv: 12, - mode: 'GCM', - type: 'auth' -} -exports['aes-192-gcm'] = { - cipher: 'AES', - key: 192, - iv: 12, - mode: 'GCM', - type: 'auth' -} -exports['aes-256-gcm'] = { - cipher: 'AES', - key: 256, - iv: 12, - mode: 'GCM', - type: 'auth' -} diff --git a/node_modules/browserify-aes/modes/cbc.js b/node_modules/browserify-aes/modes/cbc.js deleted file mode 100644 index b133e40..0000000 --- a/node_modules/browserify-aes/modes/cbc.js +++ /dev/null @@ -1,17 +0,0 @@ -var xor = require('buffer-xor') - -exports.encrypt = function (self, block) { - var data = xor(block, self._prev) - - self._prev = self._cipher.encryptBlock(data) - return self._prev -} - -exports.decrypt = function (self, block) { - var pad = self._prev - - self._prev = block - var out = self._cipher.decryptBlock(block) - - return xor(out, pad) -} diff --git a/node_modules/browserify-aes/modes/cfb.js b/node_modules/browserify-aes/modes/cfb.js deleted file mode 100644 index 0bfe4fa..0000000 --- a/node_modules/browserify-aes/modes/cfb.js +++ /dev/null @@ -1,31 +0,0 @@ -var xor = require('buffer-xor') - -exports.encrypt = function (self, data, decrypt) { - var out = new Buffer('') - var len - - while (data.length) { - if (self._cache.length === 0) { - self._cache = self._cipher.encryptBlock(self._prev) - self._prev = new Buffer('') - } - - if (self._cache.length <= data.length) { - len = self._cache.length - out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) - data = data.slice(len) - } else { - out = Buffer.concat([out, encryptStart(self, data, decrypt)]) - break - } - } - - return out -} -function encryptStart (self, data, decrypt) { - var len = data.length - var out = xor(data, self._cache) - self._cache = self._cache.slice(len) - self._prev = Buffer.concat([self._prev, decrypt ? data : out]) - return out -} diff --git a/node_modules/browserify-aes/modes/cfb1.js b/node_modules/browserify-aes/modes/cfb1.js deleted file mode 100644 index 335542e..0000000 --- a/node_modules/browserify-aes/modes/cfb1.js +++ /dev/null @@ -1,34 +0,0 @@ -function encryptByte (self, byteParam, decrypt) { - var pad - var i = -1 - var len = 8 - var out = 0 - var bit, value - while (++i < len) { - pad = self._cipher.encryptBlock(self._prev) - bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 - value = pad[0] ^ bit - out += ((value & 0x80) >> (i % 8)) - self._prev = shiftIn(self._prev, decrypt ? bit : value) - } - return out -} -exports.encrypt = function (self, chunk, decrypt) { - var len = chunk.length - var out = new Buffer(len) - var i = -1 - while (++i < len) { - out[i] = encryptByte(self, chunk[i], decrypt) - } - return out -} -function shiftIn (buffer, value) { - var len = buffer.length - var i = -1 - var out = new Buffer(buffer.length) - buffer = Buffer.concat([buffer, new Buffer([value])]) - while (++i < len) { - out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) - } - return out -} diff --git a/node_modules/browserify-aes/modes/cfb8.js b/node_modules/browserify-aes/modes/cfb8.js deleted file mode 100644 index c967a95..0000000 --- a/node_modules/browserify-aes/modes/cfb8.js +++ /dev/null @@ -1,15 +0,0 @@ -function encryptByte (self, byteParam, decrypt) { - var pad = self._cipher.encryptBlock(self._prev) - var out = pad[0] ^ byteParam - self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])]) - return out -} -exports.encrypt = function (self, chunk, decrypt) { - var len = chunk.length - var out = new Buffer(len) - var i = -1 - while (++i < len) { - out[i] = encryptByte(self, chunk[i], decrypt) - } - return out -} diff --git a/node_modules/browserify-aes/modes/ctr.js b/node_modules/browserify-aes/modes/ctr.js deleted file mode 100644 index 0ef2278..0000000 --- a/node_modules/browserify-aes/modes/ctr.js +++ /dev/null @@ -1,31 +0,0 @@ -var xor = require('buffer-xor') - -function incr32 (iv) { - var len = iv.length - var item - while (len--) { - item = iv.readUInt8(len) - if (item === 255) { - iv.writeUInt8(0, len) - } else { - item++ - iv.writeUInt8(item, len) - break - } - } -} - -function getBlock (self) { - var out = self._cipher.encryptBlock(self._prev) - incr32(self._prev) - return out -} - -exports.encrypt = function (self, chunk) { - while (self._cache.length < chunk.length) { - self._cache = Buffer.concat([self._cache, getBlock(self)]) - } - var pad = self._cache.slice(0, chunk.length) - self._cache = self._cache.slice(chunk.length) - return xor(chunk, pad) -} diff --git a/node_modules/browserify-aes/modes/ecb.js b/node_modules/browserify-aes/modes/ecb.js deleted file mode 100644 index 4dd97e7..0000000 --- a/node_modules/browserify-aes/modes/ecb.js +++ /dev/null @@ -1,6 +0,0 @@ -exports.encrypt = function (self, block) { - return self._cipher.encryptBlock(block) -} -exports.decrypt = function (self, block) { - return self._cipher.decryptBlock(block) -} diff --git a/node_modules/browserify-aes/modes/ofb.js b/node_modules/browserify-aes/modes/ofb.js deleted file mode 100644 index bd87558..0000000 --- a/node_modules/browserify-aes/modes/ofb.js +++ /dev/null @@ -1,16 +0,0 @@ -var xor = require('buffer-xor') - -function getBlock (self) { - self._prev = self._cipher.encryptBlock(self._prev) - return self._prev -} - -exports.encrypt = function (self, chunk) { - while (self._cache.length < chunk.length) { - self._cache = Buffer.concat([self._cache, getBlock(self)]) - } - - var pad = self._cache.slice(0, chunk.length) - self._cache = self._cache.slice(chunk.length) - return xor(chunk, pad) -} diff --git a/node_modules/browserify-aes/package.json b/node_modules/browserify-aes/package.json deleted file mode 100644 index 2c9c237..0000000 --- a/node_modules/browserify-aes/package.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "_args": [ - [ - "browserify-aes@^1.0.6", - "/Users/jbaylina/git/MVP/node_modules/drbg.js" - ] - ], - "_from": "browserify-aes@>=1.0.6 <2.0.0", - "_id": "browserify-aes@1.0.6", - "_inCache": true, - "_installable": true, - "_location": "/browserify-aes", - "_nodeVersion": "5.4.0", - "_npmUser": { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "browserify-aes", - "raw": "browserify-aes@^1.0.6", - "rawSpec": "^1.0.6", - "scope": null, - "spec": ">=1.0.6 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/drbg.js" - ], - "_resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", - "_shasum": "5e7725dbdef1fd5930d4ebab48567ce451c48a0a", - "_shrinkwrap": null, - "_spec": "browserify-aes@^1.0.6", - "_where": "/Users/jbaylina/git/MVP/node_modules/drbg.js", - "author": "", - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/browserify-aes/issues" - }, - "dependencies": { - "buffer-xor": "^1.0.2", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "inherits": "^2.0.1" - }, - "description": "aes, for browserify", - "devDependencies": { - "standard": "^3.7.3", - "tap-spec": "^1.0.0", - "tape": "^3.0.0" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "5e7725dbdef1fd5930d4ebab48567ce451c48a0a", - "tarball": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz" - }, - "gitHead": "51f8b9055371c045af448fa07bacaae3df6c8e51", - "homepage": "https://github.com/crypto-browserify/browserify-aes", - "keywords": [ - "aes", - "crypto", - "browserify" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - { - "email": "email@dcousens.com", - "name": "dcousens" - }, - { - "email": "dominic.tarr@gmail.com", - "name": "dominictarr" - }, - { - "email": "jprichardson@gmail.com", - "name": "jprichardson" - }, - { - "email": "fedor@indutny.com", - "name": "indutny" - } - ], - "name": "browserify-aes", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/crypto-browserify/browserify-aes.git" - }, - "scripts": { - "test": "standard && node test/index.js|tspec" - }, - "version": "1.0.6" -} diff --git a/node_modules/browserify-aes/populateFixtures.js b/node_modules/browserify-aes/populateFixtures.js deleted file mode 100644 index ac31eb3..0000000 --- a/node_modules/browserify-aes/populateFixtures.js +++ /dev/null @@ -1,25 +0,0 @@ -var modes = require('./modes') -var fixtures = require('./test/fixtures.json') -var crypto = require('crypto') -var types = ['aes-128-cfb1', 'aes-192-cfb1', 'aes-256-cfb1'] -var ebtk = require('./EVP_BytesToKey') -var fs = require('fs') - -fixtures.forEach(function (fixture) { - types.forEach(function (cipher) { - var suite = crypto.createCipher(cipher, new Buffer(fixture.password)) - var buf = new Buffer('') - buf = Buffer.concat([buf, suite.update(new Buffer(fixture.text))]) - buf = Buffer.concat([buf, suite.final()]) - fixture.results.ciphers[cipher] = buf.toString('hex') - if (modes[cipher].mode === 'ECB') { - return - } - var suite2 = crypto.createCipheriv(cipher, ebtk(crypto, fixture.password, modes[cipher].key).key, new Buffer(fixture.iv, 'hex')) - var buf2 = new Buffer('') - buf2 = Buffer.concat([buf2, suite2.update(new Buffer(fixture.text))]) - buf2 = Buffer.concat([buf2, suite2.final()]) - fixture.results.cipherivs[cipher] = buf2.toString('hex') - }) -}) -fs.writeFileSync('./test/fixturesNew.json', JSON.stringify(fixtures, false, 4)) diff --git a/node_modules/browserify-aes/readme.md b/node_modules/browserify-aes/readme.md deleted file mode 100644 index 1d7b085..0000000 --- a/node_modules/browserify-aes/readme.md +++ /dev/null @@ -1,18 +0,0 @@ -browserify-aes -==== - -[![Build Status](https://travis-ci.org/crypto-browserify/browserify-aes.svg)](https://travis-ci.org/crypto-browserify/browserify-aes) - -Node style aes for use in the browser. Implements: - - - createCipher - - createCipheriv - - createDecipher - - createDecipheriv - - getCiphers - -In node.js, the `crypto` implementation is used, in browsers it falls back to a pure JavaScript implementation. - -Much of this library has been taken from the aes implementation in [triplesec](https://github.com/keybase/triplesec), a partial derivation of [crypto-js](https://code.google.com/p/crypto-js/). - -`EVP_BytesToKey` is a straight up port of the same function from OpenSSL as there is literally no documenation on it beyond it using 'undocumented extensions' for longer keys. diff --git a/node_modules/browserify-aes/streamCipher.js b/node_modules/browserify-aes/streamCipher.js deleted file mode 100644 index a55c762..0000000 --- a/node_modules/browserify-aes/streamCipher.js +++ /dev/null @@ -1,25 +0,0 @@ -var aes = require('./aes') -var Transform = require('cipher-base') -var inherits = require('inherits') - -inherits(StreamCipher, Transform) -module.exports = StreamCipher -function StreamCipher (mode, key, iv, decrypt) { - if (!(this instanceof StreamCipher)) { - return new StreamCipher(mode, key, iv) - } - Transform.call(this) - this._cipher = new aes.AES(key) - this._prev = new Buffer(iv.length) - this._cache = new Buffer('') - this._secCache = new Buffer('') - this._decrypt = decrypt - iv.copy(this._prev) - this._mode = mode -} -StreamCipher.prototype._update = function (chunk) { - return this._mode.encrypt(this, chunk, this._decrypt) -} -StreamCipher.prototype._final = function () { - this._cipher.scrub() -} diff --git a/node_modules/browserify-sha3/.travis.yml b/node_modules/browserify-sha3/.travis.yml deleted file mode 100644 index de0175c..0000000 --- a/node_modules/browserify-sha3/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.12" diff --git a/node_modules/browserify-sha3/README.md b/node_modules/browserify-sha3/README.md deleted file mode 100644 index 70b435f..0000000 --- a/node_modules/browserify-sha3/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# browserify-sha3 [![Build Status](https://travis-ci.org/wanderer/browserify-sha3.svg)](https://travis-ci.org/wanderer/browserify-sha3) -[node-sha3](https://github.com/phusion/node-sha3) compatability for browserify diff --git a/node_modules/browserify-sha3/benchmark/index.js b/node_modules/browserify-sha3/benchmark/index.js deleted file mode 100644 index 26ff352..0000000 --- a/node_modules/browserify-sha3/benchmark/index.js +++ /dev/null @@ -1,35 +0,0 @@ -var Benchmark = require('benchmark') -var SHA3 = require('sha3'); -var jsSha3 = require('js-sha3') -var cryptojsSha3 = require('crypto-js/sha3'); -var encHex = require("crypto-js/enc-hex"); -var crypto = require('crypto') - -var suite = new Benchmark.Suite; - -// add tests -suite.add('node sha3', function() { - var d = new SHA3.SHA3Hash() - d.update(crypto.randomBytes(64)) - d.digest('hex') - -}) -.add('cryptojs', function() { - var data = encHex.parse(crypto.randomBytes(64).toString('hex')) - cryptojsSha3(data, { - outputLength: 512 - }).toString(); -}) -.add('js-sha3', function(){ - jsSha3.sha3_512(crypto.randomBytes(64)); -}) - -// add listeners -.on('cycle', function(event) { - console.log(String(event.target)); -}) -.on('complete', function() { - console.log('Fastest is ' + this.filter('fastest').pluck('name')); -}) -// run async -.run({ 'async': true }); diff --git a/node_modules/browserify-sha3/benchmark/package.json b/node_modules/browserify-sha3/benchmark/package.json deleted file mode 100644 index 989d096..0000000 --- a/node_modules/browserify-sha3/benchmark/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "benchmark": "^1.0.0", - "crypto-js": "^3.1.5", - "js-sha3": "^0.3.1" - } -} diff --git a/node_modules/browserify-sha3/index.js b/node_modules/browserify-sha3/index.js deleted file mode 100644 index 8e8cdff..0000000 --- a/node_modules/browserify-sha3/index.js +++ /dev/null @@ -1,34 +0,0 @@ -const Sha3 = require('js-sha3') - -const hashLengths = [ 224, 256, 384, 512 ] - -var hash = function (bitcount) { - if (bitcount !== undefined && hashLengths.indexOf(bitcount) == -1) - throw new Error('Unsupported hash length') - this.content = [] - this.bitcount = bitcount ? 'keccak_' + bitcount : 'keccak_512' -} - -hash.prototype.update = function (i) { - if (Buffer.isBuffer(i)) - this.content.push(i) - else if (typeof i === 'string') - this.content.push(new Buffer(i)) - else - throw new Error('Unsupported argument to update') - return this -} - -hash.prototype.digest = function (encoding) { - var result = Sha3[this.bitcount](Buffer.concat(this.content)) - if (encoding === 'hex') - return result - else if (encoding === 'binary' || encoding === undefined) - return new Buffer(result, 'hex').toString('binary') - else - throw new Error('Unsupported encoding for digest: ' + encoding) -} - -module.exports = { - SHA3Hash: hash -} diff --git a/node_modules/browserify-sha3/package.json b/node_modules/browserify-sha3/package.json deleted file mode 100644 index 07a7fb5..0000000 --- a/node_modules/browserify-sha3/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_args": [ - [ - "browserify-sha3@^0.0.1", - "/Users/jbaylina/git/MVP/node_modules/keccakjs" - ] - ], - "_from": "browserify-sha3@>=0.0.1 <0.0.2", - "_id": "browserify-sha3@0.0.1", - "_inCache": true, - "_installable": true, - "_location": "/browserify-sha3", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "mjbecze@gmail.com", - "name": "null_radix" - }, - "_npmVersion": "3.3.8", - "_phantomChildren": {}, - "_requested": { - "name": "browserify-sha3", - "raw": "browserify-sha3@^0.0.1", - "rawSpec": "^0.0.1", - "scope": null, - "spec": ">=0.0.1 <0.0.2", - "type": "range" - }, - "_requiredBy": [ - "/keccakjs" - ], - "_resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", - "_shasum": "3ff34a3006ef15c0fb3567e541b91a2340123d11", - "_shrinkwrap": null, - "_spec": "browserify-sha3@^0.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/keccakjs", - "author": { - "email": "mjbecze@gmail.com", - "name": "mjbecze" - }, - "bugs": { - "url": "https://github.com/wanderer/browserify-sha3/issues" - }, - "dependencies": { - "js-sha3": "^0.3.1" - }, - "description": "node-sha3 compatability for browserify", - "devDependencies": { - "sha3": "^1.1.0", - "tape": "^4.0.1" - }, - "directories": {}, - "dist": { - "shasum": "3ff34a3006ef15c0fb3567e541b91a2340123d11", - "tarball": "http://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz" - }, - "gitHead": "a1d94177d1ef17295ae9d6f00e8e9c347527ad12", - "homepage": "https://github.com/wanderer/browserify-sha3#readme", - "keywords": [ - "sha3", - "browserify" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mjbecze@gmail.com", - "name": "null_radix" - } - ], - "name": "browserify-sha3", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/wanderer/browserify-sha3.git" - }, - "scripts": { - "test": "node ./tests" - }, - "version": "0.0.1" -} diff --git a/node_modules/browserify-sha3/tests/index.js b/node_modules/browserify-sha3/tests/index.js deleted file mode 100644 index 0e8fdaf..0000000 --- a/node_modules/browserify-sha3/tests/index.js +++ /dev/null @@ -1,54 +0,0 @@ -var SHA3 = require('sha3') -var BSHA3 = require('../index.js') -var tape = require('tape') -var crypto = require('crypto') - -tape('basic test', function (t) { - t.plan(2) - // Generate 512-bit digest. - var d = new SHA3.SHA3Hash() - d.update('foo') - - // Generate 512-bit digest. - var bd = new BSHA3.SHA3Hash() - bd.update('foo') - t.equal(d.digest('hex'), bd.digest('hex')) - - // Generate 224-bit digest. - var d = new SHA3.SHA3Hash(224) - d.update('foo') - - // Generate 224-bit digest. - var bd = new BSHA3.SHA3Hash(224) - bd.update('foo') - t.equal(d.digest('hex'), bd.digest('hex')) -}) - -tape('encoding', function (t) { - t.plan(1) - - // Generate 224-bit digest. - var d = new SHA3.SHA3Hash(224) - d.update('foo') - - // Generate 224-bit digest. - var bd = new BSHA3.SHA3Hash(224) - bd.update('foo') - t.equal(d.digest().toString(), bd.digest().toString()) -}) - -tape('random test', function (t) { - t.plan(10) - - for (var i = 0; i < 10; i++) { - var data = crypto.randomBytes(32) - // Generate 512-bit digest. - var d = new SHA3.SHA3Hash() - d.update(data) - - // Generate 512-bit digest. - var bd = new BSHA3.SHA3Hash() - bd.update(data) - t.equal(d.digest('hex'), bd.digest('hex')) - } -}) diff --git a/node_modules/bs58/.npmignore b/node_modules/bs58/.npmignore deleted file mode 100644 index 3c5ae6d..0000000 --- a/node_modules/bs58/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -.gitignore -test/ -.DS_Store -Makefile -coverage/ -.min-wd -.travis.yml \ No newline at end of file diff --git a/node_modules/bs58/CHANGELOG.md b/node_modules/bs58/CHANGELOG.md deleted file mode 100644 index d757a23..0000000 --- a/node_modules/bs58/CHANGELOG.md +++ /dev/null @@ -1,53 +0,0 @@ -2.0.1 / 2014-12-23 ------------------- -- performance boost in `encode()` [#10](https://github.com/cryptocoinjs/bs58/pull/10) - -2.0.0 / 2014-10-03 ------------------- -- `decode` now returns an `Array` instead of `Buffer` to keep things simple. [Daniel Cousens / #9](https://github.com/cryptocoinjs/bs58/pull/9) - -1.2.1 / 2014-07-24 ------------------- -* speed optimizations [Daniel Cousens / #8](https://github.com/cryptocoinjs/bs58/pull/8) - -1.2.0 / 2014-06-29 ------------------- -* removed `bigi` dep, implemented direct byte conversion [Jared Deckard / #6](https://github.com/cryptocoinjs/bs58/pull/6) - -1.1.0 / 2014-06-26 ------------------- -* user `Buffer` internally for calculations, providing cleaner code and a performance increase. [Daniel Cousens](https://github.com/cryptocoinjs/bs58/commit/129c71de8bc1e36f113bce06da0616066f41c5ca) - -1.0.0 / 2014-05-27 ------------------- -* removed `binstring` dep, `Buffer` now only input to `encode()` and output of `decode()` -* update `bigi` from `~0.3.0` to `^1.1.0` -* added travis-ci support -* added coveralls support -* modified tests and library to handle fixture style testing (thanks to bitcoinjs-lib devs and [Daniel Cousens](https://github.com/dcousens)) - - -0.3.0 / 2014-02-24 ------------------- -* duck type input to `encode` and change output of `decode` to `Buffer`. - - -0.2.1 / 2014-02-24 ------------------- -* removed bower and component support. Closes #1 -* convert from 4 spaces to 2 - - -0.2.0 / 2013-12-07 ------------------- -* renamed from `cryptocoin-base58` to `bs58` - - -0.1.0 / 2013-11-20 ------------------- -* removed AMD support - - -0.0.1 / 2013-11-04 ------------------- -* initial release diff --git a/node_modules/bs58/README.md b/node_modules/bs58/README.md deleted file mode 100644 index 10fc3e8..0000000 --- a/node_modules/bs58/README.md +++ /dev/null @@ -1,21 +0,0 @@ - -[![build status](https://secure.travis-ci.org/cryptocoinjs/bs58.png)](http://travis-ci.org/cryptocoinjs/bs58) -[![Coverage Status](https://img.shields.io/coveralls/cryptocoinjs/bs58.svg)](https://coveralls.io/r/cryptocoinjs/bs58) - -bs58 -==== - -JavaScript component to compute base 58 encoding. This encoding is typically used for crypto currencies such as Bitcoin. - -### Documentation - -http://cryptocoinjs.com/modules/misc/bs58/ - - -Credits -------- -- [Mike Hearn](https://github.com/mikehearn) for original Java implementation -- [Stefan Thomas](https://github.com/justmoon) for porting to JavaScript -- [Stephan Pair](https://github.com/gasteve) for buffer improvements -- [Daniel Cousens](https://github.com/dcousens) for cleanup and merging improvements from bitcoinjs-lib -- [Jared Deckard](https://github.com/deckar01) for killing `bigi` as a dependency diff --git a/node_modules/bs58/lib/bs58.js b/node_modules/bs58/lib/bs58.js deleted file mode 100644 index b7363cc..0000000 --- a/node_modules/bs58/lib/bs58.js +++ /dev/null @@ -1,85 +0,0 @@ -// Base58 encoding/decoding -// Originally written by Mike Hearn for BitcoinJ -// Copyright (c) 2011 Google Inc -// Ported to JavaScript by Stefan Thomas -// Merged Buffer refactorings from base58-native by Stephen Pair -// Copyright (c) 2013 BitPay Inc - -var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' -var ALPHABET_MAP = {} -for(var i = 0; i < ALPHABET.length; i++) { - ALPHABET_MAP[ALPHABET.charAt(i)] = i -} -var BASE = 58 - -function encode(buffer) { - if (buffer.length === 0) return '' - - var i, j, digits = [0] - for (i = 0; i < buffer.length; i++) { - for (j = 0; j < digits.length; j++) digits[j] <<= 8 - - digits[0] += buffer[i] - - var carry = 0 - for (j = 0; j < digits.length; ++j) { - digits[j] += carry - - carry = (digits[j] / BASE) | 0 - digits[j] %= BASE - } - - while (carry) { - digits.push(carry % BASE) - - carry = (carry / BASE) | 0 - } - } - - // deal with leading zeros - for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0) - - // convert digits to a string - var stringOutput = "" - for (var i = digits.length - 1; i >= 0; i--) { - stringOutput = stringOutput + ALPHABET[digits[i]] - } - return stringOutput -} - -function decode(string) { - if (string.length === 0) return [] - - var i, j, bytes = [0] - for (i = 0; i < string.length; i++) { - var c = string[i] - if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character') - - for (j = 0; j < bytes.length; j++) bytes[j] *= BASE - bytes[0] += ALPHABET_MAP[c] - - var carry = 0 - for (j = 0; j < bytes.length; ++j) { - bytes[j] += carry - - carry = bytes[j] >> 8 - bytes[j] &= 0xff - } - - while (carry) { - bytes.push(carry & 0xff) - - carry >>= 8 - } - } - - // deal with leading zeros - for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0) - - return bytes.reverse() -} - -module.exports = { - encode: encode, - decode: decode -} diff --git a/node_modules/bs58/package.json b/node_modules/bs58/package.json deleted file mode 100644 index a022d0f..0000000 --- a/node_modules/bs58/package.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "_args": [ - [ - "bs58@^2.0.1", - "/Users/jbaylina/git/MVP/node_modules/bs58check" - ] - ], - "_from": "bs58@>=2.0.1 <3.0.0", - "_id": "bs58@2.0.1", - "_inCache": true, - "_installable": true, - "_location": "/bs58", - "_nodeVersion": "0.10.26", - "_npmUser": { - "email": "jprichardson@gmail.com", - "name": "jp" - }, - "_npmVersion": "2.1.11", - "_phantomChildren": {}, - "_requested": { - "name": "bs58", - "raw": "bs58@^2.0.1", - "rawSpec": "^2.0.1", - "scope": null, - "spec": ">=2.0.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/bs58check", - "/coinstring" - ], - "_resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz", - "_shasum": "55908d58f1982aba2008fa1bed8f91998a29bf8d", - "_shrinkwrap": null, - "_spec": "bs58@^2.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/bs58check", - "bugs": { - "url": "https://github.com/cryptocoinjs/bs58/issues" - }, - "dependencies": {}, - "description": "Base 58 encoding / decoding", - "devDependencies": { - "coveralls": "^2.11.2", - "istanbul": "^0.2.10", - "jshint": "2.5.1", - "mocha": "^1.21.4", - "mocha-lcov-reporter": "0.0.1", - "mochify": "^2.1.0" - }, - "directories": {}, - "dist": { - "shasum": "55908d58f1982aba2008fa1bed8f91998a29bf8d", - "tarball": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz" - }, - "gitHead": "d3ee704d5f6e9d450333395ba17ce5c654f19d72", - "homepage": "https://github.com/cryptocoinjs/bs58", - "keywords": [ - "base58", - "bitcoin", - "crypto", - "crytography", - "decode", - "decoding", - "encode", - "encoding", - "litecoin" - ], - "main": "./lib/bs58.js", - "maintainers": [ - { - "email": "jprichardson@gmail.com", - "name": "jp" - }, - { - "email": "boydb@midnightdesign.ws", - "name": "midnightlightning" - }, - { - "email": "sidazhang89@gmail.com", - "name": "sidazhang" - }, - { - "email": "npm@shesek.info", - "name": "nadav" - } - ], - "name": "bs58", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/cryptocoinjs/bs58.git" - }, - "scripts": { - "browser-test": "mochify --wd -R spec", - "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js", - "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info", - "jshint": "jshint --config jshint.json lib/*.js ; true", - "test": "npm run-script unit", - "unit": "mocha" - }, - "version": "2.0.1" -} diff --git a/node_modules/bs58check/.npmignore b/node_modules/bs58check/.npmignore deleted file mode 100644 index da23d0d..0000000 --- a/node_modules/bs58check/.npmignore +++ /dev/null @@ -1,25 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# Deployed apps should consider commenting this line out: -# see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git -node_modules diff --git a/node_modules/bs58check/.travis.yml b/node_modules/bs58check/.travis.yml deleted file mode 100644 index f3ece20..0000000 --- a/node_modules/bs58check/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -sudo: false -language: node_js -node_js: - - "0.12" - - "iojs" -env: - - TEST_SUITE=coverage - - TEST_SUITE=standard - - TEST_SUITE=unit -script: "npm run-script $TEST_SUITE" diff --git a/node_modules/bs58check/LICENSE b/node_modules/bs58check/LICENSE deleted file mode 100644 index 2fcbe9e..0000000 --- a/node_modules/bs58check/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Daniel Cousens - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/node_modules/bs58check/README.md b/node_modules/bs58check/README.md deleted file mode 100644 index 32372a4..0000000 --- a/node_modules/bs58check/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# bs58check - -[![Build Status](https://travis-ci.org/bitcoinjs/bs58check.png?branch=master)](https://travis-ci.org/bitcoinjs/bs58check) - -[![NPM](https://nodei.co/npm/bs58check.png)](https://nodei.co/npm/bs58check/) - -A straight forward implementation of base58check extending upon bs58. - - -## Example - -``` javascript -var bs58check = require('bs58check') - -var decoded = bs58check.decode('5Kd3NBUAdUnhyzenEwVLy9pBKxSwXvE9FMPyR4UKZvpe6E3AgLr') - -console.log(decoded) -// => - -console.log(bs58check.encode(decoded)) -// => 5Kd3NBUAdUnhyzenEwVLy9pBKxSwXvE9FMPyR4UKZvpe6E3AgLr -``` - - -## License - -This library is free and open-source software released under the MIT license. diff --git a/node_modules/bs58check/index.js b/node_modules/bs58check/index.js deleted file mode 100644 index 1b40ce3..0000000 --- a/node_modules/bs58check/index.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' - -var base58 = require('bs58') -var createHash = require('create-hash') - -// SHA256(SHA256(buffer)) -function sha256x2 (buffer) { - var tmp = createHash('sha256').update(buffer).digest() - return createHash('sha256').update(tmp).digest() -} - -// Encode a buffer as a base58-check encoded string -function encode (payload) { - var checksum = sha256x2(payload) - - return base58.encode(Buffer.concat([ - payload, - checksum - ], payload.length + 4)) -} - -// Decode a base58-check encoded string to a buffer -function decode (string) { - var buffer = new Buffer(base58.decode(string)) - - var payload = buffer.slice(0, -4) - var checksum = buffer.slice(-4) - var newChecksum = sha256x2(payload) - - if (checksum[0] ^ newChecksum[0] | - checksum[1] ^ newChecksum[1] | - checksum[2] ^ newChecksum[2] | - checksum[3] ^ newChecksum[3]) throw new Error('Invalid checksum') - - return payload -} - -module.exports = { - encode: encode, - decode: decode -} diff --git a/node_modules/bs58check/package.json b/node_modules/bs58check/package.json deleted file mode 100644 index 529ff61..0000000 --- a/node_modules/bs58check/package.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "_args": [ - [ - "bs58check@^1.0.8", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet" - ] - ], - "_from": "bs58check@>=1.0.8 <2.0.0", - "_id": "bs58check@1.0.8", - "_inCache": true, - "_installable": true, - "_location": "/bs58check", - "_nodeVersion": "5.4.1", - "_npmUser": { - "email": "email@dcousens.com", - "name": "dcousens" - }, - "_npmVersion": "3.5.3", - "_phantomChildren": {}, - "_requested": { - "name": "bs58check", - "raw": "bs58check@^1.0.8", - "rawSpec": "^1.0.8", - "scope": null, - "spec": ">=1.0.8 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-wallet" - ], - "_resolved": "https://registry.npmjs.org/bs58check/-/bs58check-1.0.8.tgz", - "_shasum": "5a5142369e66f3fcb5e507f0daafc1310edff472", - "_shrinkwrap": null, - "_spec": "bs58check@^1.0.8", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet", - "author": { - "name": "Daniel Cousens" - }, - "bugs": { - "url": "https://github.com/bitcoinjs/bs58check/issues" - }, - "config": { - "blanket": { - "data-cover-never": [ - "node_modules", - "test" - ], - "pattern": [ - "" - ] - }, - "travis-cov": { - "threshold": 100 - } - }, - "dependencies": { - "bs58": "^2.0.1", - "create-hash": "^1.1.0" - }, - "description": "A straightforward implementation of base58-check encoding", - "devDependencies": { - "blanket": "*", - "mocha": "*", - "standard": "*", - "travis-cov": "*" - }, - "directories": {}, - "dist": { - "shasum": "5a5142369e66f3fcb5e507f0daafc1310edff472", - "tarball": "https://registry.npmjs.org/bs58check/-/bs58check-1.0.8.tgz" - }, - "gitHead": "e28e2df22b88610d63314e3989873c300f51ec08", - "homepage": "https://github.com/bitcoinjs/bs58check", - "keywords": [ - "base58", - "base58check", - "bitcoin", - "bs58", - "decode", - "decoding", - "encode", - "encoding", - "litecoin" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "email@dcousens.com", - "name": "dcousens" - } - ], - "name": "bs58check", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/bitcoinjs/bs58check.git" - }, - "scripts": { - "coverage": "mocha --require blanket -R travis-cov", - "coverage-local": "mocha --require blanket -R html-cov", - "standard": "standard", - "test": "npm run standard && npm run unit", - "unit": "mocha" - }, - "version": "1.0.8" -} diff --git a/node_modules/bs58check/test/fixtures.json b/node_modules/bs58check/test/fixtures.json deleted file mode 100644 index ab7ac45..0000000 --- a/node_modules/bs58check/test/fixtures.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "valid": [ - { - "string": "1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", - "payload": "0065a16059864a2fdbc7c99a4723a8395bc6f188eb" - }, - { - "string": "3CMNFxN1oHBc4R1EpboAL5yzHGgE611Xou", - "payload": "0574f209f6ea907e2ea48f74fae05782ae8a665257" - }, - { - "string": "mo9ncXisMeAoXwqcV5EWuyncbmCcQN4rVs", - "payload": "6f53c0307d6851aa0ce7825ba883c6bd9ad242b486" - }, - { - "string": "2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br", - "payload": "c46349a418fc4578d10a372b54b45c280cc8c4382f" - }, - { - "string": "5Kd3NBUAdUnhyzenEwVLy9pBKxSwXvE9FMPyR4UKZvpe6E3AgLr", - "payload": "80eddbdc1168f1daeadbd3e44c1e3f8f5a284c2029f78ad26af98583a499de5b19" - }, - { - "string": "Kz6UJmQACJmLtaQj5A3JAge4kVTNQ8gbvXuwbmCj7bsaabudb3RD", - "payload": "8055c9bccb9ed68446d1b75273bbce89d7fe013a8acd1625514420fb2aca1a21c401" - }, - { - "string": "9213qJab2HNEpMpYNBa7wHGFKKbkDn24jpANDs2huN3yi4J11ko", - "payload": "ef36cb93b9ab1bdabf7fb9f2c04f1b9cc879933530ae7842398eef5a63a56800c2" - }, - { - "string": "cTpB4YiyKiBcPxnefsDpbnDxFDffjqJob8wGCEDXxgQ7zQoMXJdH", - "payload": "efb9f4892c9e8282028fea1d2667c4dc5213564d41fc5783896a0d843fc15089f301" - }, - { - "string": "1Ax4gZtb7gAit2TivwejZHYtNNLT18PUXJ", - "payload": "006d23156cbbdcc82a5a47eee4c2c7c583c18b6bf4" - }, - { - "string": "3QjYXhTkvuj8qPaXHTTWb5wjXhdsLAAWVy", - "payload": "05fcc5460dd6e2487c7d75b1963625da0e8f4c5975" - }, - { - "string": "n3ZddxzLvAY9o7184TB4c6FJasAybsw4HZ", - "payload": "6ff1d470f9b02370fdec2e6b708b08ac431bf7a5f7" - }, - { - "string": "2NBFNJTktNa7GZusGbDbGKRZTxdK9VVez3n", - "payload": "c4c579342c2c4c9220205e2cdc285617040c924a0a" - }, - { - "string": "5K494XZwps2bGyeL71pWid4noiSNA2cfCibrvRWqcHSptoFn7rc", - "payload": "80a326b95ebae30164217d7a7f57d72ab2b54e3be64928a19da0210b9568d4015e" - }, - { - "string": "L1RrrnXkcKut5DEMwtDthjwRcTTwED36thyL1DebVrKuwvohjMNi", - "payload": "807d998b45c219a1e38e99e7cbd312ef67f77a455a9b50c730c27f02c6f730dfb401" - }, - { - "string": "93DVKyFYwSN6wEo3E2fCrFPUp17FtrtNi2Lf7n4G3garFb16CRj", - "payload": "efd6bca256b5abc5602ec2e1c121a08b0da2556587430bcf7e1898af2224885203" - }, - { - "string": "cTDVKtMGVYWTHCb1AFjmVbEbWjvKpKqKgMaR3QJxToMSQAhmCeTN", - "payload": "efa81ca4e8f90181ec4b61b6a7eb998af17b2cb04de8a03b504b9e34c4c61db7d901" - }, - { - "string": "1C5bSj1iEGUgSTbziymG7Cn18ENQuT36vv", - "payload": "007987ccaa53d02c8873487ef919677cd3db7a6912" - }, - { - "string": "3AnNxabYGoTxYiTEZwFEnerUoeFXK2Zoks", - "payload": "0563bcc565f9e68ee0189dd5cc67f1b0e5f02f45cb" - }, - { - "string": "n3LnJXCqbPjghuVs8ph9CYsAe4Sh4j97wk", - "payload": "6fef66444b5b17f14e8fae6e7e19b045a78c54fd79" - }, - { - "string": "2NB72XtkjpnATMggui83aEtPawyyKvnbX2o", - "payload": "c4c3e55fceceaa4391ed2a9677f4a4d34eacd021a0" - }, - { - "string": "5KaBW9vNtWNhc3ZEDyNCiXLPdVPHCikRxSBWwV9NrpLLa4LsXi9", - "payload": "80e75d936d56377f432f404aabb406601f892fd49da90eb6ac558a733c93b47252" - }, - { - "string": "L1axzbSyynNYA8mCAhzxkipKkfHtAXYF4YQnhSKcLV8YXA874fgT", - "payload": "808248bd0375f2f75d7e274ae544fb920f51784480866b102384190b1addfbaa5c01" - }, - { - "string": "927CnUkUbasYtDwYwVn2j8GdTuACNnKkjZ1rpZd2yBB1CLcnXpo", - "payload": "ef44c4f6a096eac5238291a94cc24c01e3b19b8d8cef72874a079e00a242237a52" - }, - { - "string": "cUcfCMRjiQf85YMzzQEk9d1s5A4K7xL5SmBCLrezqXFuTVefyhY7", - "payload": "efd1de707020a9059d6d3abaf85e17967c6555151143db13dbb06db78df0f15c6901" - }, - { - "string": "1Gqk4Tv79P91Cc1STQtU3s1W6277M2CVWu", - "payload": "00adc1cc2081a27206fae25792f28bbc55b831549d" - }, - { - "string": "33vt8ViH5jsr115AGkW6cEmEz9MpvJSwDk", - "payload": "05188f91a931947eddd7432d6e614387e32b244709" - }, - { - "string": "mhaMcBxNh5cqXm4aTQ6EcVbKtfL6LGyK2H", - "payload": "6f1694f5bc1a7295b600f40018a618a6ea48eeb498" - }, - { - "string": "2MxgPqX1iThW3oZVk9KoFcE5M4JpiETssVN", - "payload": "c43b9b3fd7a50d4f08d1a5b0f62f644fa7115ae2f3" - }, - { - "string": "5HtH6GdcwCJA4ggWEL1B3jzBBUB8HPiBi9SBc5h9i4Wk4PSeApR", - "payload": "80091035445ef105fa1bb125eccfb1882f3fe69592265956ade751fd095033d8d0" - }, - { - "string": "L2xSYmMeVo3Zek3ZTsv9xUrXVAmrWxJ8Ua4cw8pkfbQhcEFhkXT8", - "payload": "80ab2b4bcdfc91d34dee0ae2a8c6b6668dadaeb3a88b9859743156f462325187af01" - }, - { - "string": "92xFEve1Z9N8Z641KQQS7ByCSb8kGjsDzw6fAmjHN1LZGKQXyMq", - "payload": "efb4204389cef18bbe2b353623cbf93e8678fbc92a475b664ae98ed594e6cf0856" - }, - { - "string": "cVM65tdYu1YK37tNoAyGoJTR13VBYFva1vg9FLuPAsJijGvG6NEA", - "payload": "efe7b230133f1b5489843260236b06edca25f66adb1be455fbd38d4010d48faeef01" - }, - { - "string": "1JwMWBVLtiqtscbaRHai4pqHokhFCbtoB4", - "payload": "00c4c1b72491ede1eedaca00618407ee0b772cad0d" - }, - { - "string": "3QCzvfL4ZRvmJFiWWBVwxfdaNBT8EtxB5y", - "payload": "05f6fe69bcb548a829cce4c57bf6fff8af3a5981f9" - }, - { - "string": "mizXiucXRCsEriQCHUkCqef9ph9qtPbZZ6", - "payload": "6f261f83568a098a8638844bd7aeca039d5f2352c0" - }, - { - "string": "2NEWDzHWwY5ZZp8CQWbB7ouNMLqCia6YRda", - "payload": "c4e930e1834a4d234702773951d627cce82fbb5d2e" - }, - { - "string": "5KQmDryMNDcisTzRp3zEq9e4awRmJrEVU1j5vFRTKpRNYPqYrMg", - "payload": "80d1fab7ab7385ad26872237f1eb9789aa25cc986bacc695e07ac571d6cdac8bc0" - }, - { - "string": "L39Fy7AC2Hhj95gh3Yb2AU5YHh1mQSAHgpNixvm27poizcJyLtUi", - "payload": "80b0bbede33ef254e8376aceb1510253fc3550efd0fcf84dcd0c9998b288f166b301" - }, - { - "string": "91cTVUcgydqyZLgaANpf1fvL55FH53QMm4BsnCADVNYuWuqdVys", - "payload": "ef037f4192c630f399d9271e26c575269b1d15be553ea1a7217f0cb8513cef41cb" - }, - { - "string": "cQspfSzsgLeiJGB2u8vrAiWpCU4MxUT6JseWo2SjXy4Qbzn2fwDw", - "payload": "ef6251e205e8ad508bab5596bee086ef16cd4b239e0cc0c5d7c4e6035441e7d5de01" - }, - { - "string": "19dcawoKcZdQz365WpXWMhX6QCUpR9SY4r", - "payload": "005eadaf9bb7121f0f192561a5a62f5e5f54210292" - }, - { - "string": "37Sp6Rv3y4kVd1nQ1JV5pfqXccHNyZm1x3", - "payload": "053f210e7277c899c3a155cc1c90f4106cbddeec6e" - }, - { - "string": "myoqcgYiehufrsnnkqdqbp69dddVDMopJu", - "payload": "6fc8a3c2a09a298592c3e180f02487cd91ba3400b5" - }, - { - "string": "2N7FuwuUuoTBrDFdrAZ9KxBmtqMLxce9i1C", - "payload": "c499b31df7c9068d1481b596578ddbb4d3bd90baeb" - }, - { - "string": "5KL6zEaMtPRXZKo1bbMq7JDjjo1bJuQcsgL33je3oY8uSJCR5b4", - "payload": "80c7666842503db6dc6ea061f092cfb9c388448629a6fe868d068c42a488b478ae" - }, - { - "string": "KwV9KAfwbwt51veZWNscRTeZs9CKpojyu1MsPnaKTF5kz69H1UN2", - "payload": "8007f0803fc5399e773555ab1e8939907e9badacc17ca129e67a2f5f2ff84351dd01" - }, - { - "string": "93N87D6uxSBzwXvpokpzg8FFmfQPmvX4xHoWQe3pLdYpbiwT5YV", - "payload": "efea577acfb5d1d14d3b7b195c321566f12f87d2b77ea3a53f68df7ebf8604a801" - }, - { - "string": "cMxXusSihaX58wpJ3tNuuUcZEQGt6DKJ1wEpxys88FFaQCYjku9h", - "payload": "ef0b3b34f0958d8a268193a9814da92c3e8b58b4a4378a542863e34ac289cd830c01" - }, - { - "string": "13p1ijLwsnrcuyqcTvJXkq2ASdXqcnEBLE", - "payload": "001ed467017f043e91ed4c44b4e8dd674db211c4e6" - }, - { - "string": "3ALJH9Y951VCGcVZYAdpA3KchoP9McEj1G", - "payload": "055ece0cadddc415b1980f001785947120acdb36fc" - } - ], - "invalid": [ - "Z9inZq4e2HGQRZQezDjFMmqgUE8NwMRok", - "3HK7MezAm6qEZQUMPRf8jX7wDv6zig6Ky8", - "3AW8j12DUk8mgA7kkfZ1BrrzCVFuH1LsXS" - ] -} diff --git a/node_modules/bs58check/test/index.js b/node_modules/bs58check/test/index.js deleted file mode 100644 index 3d5b3f3..0000000 --- a/node_modules/bs58check/test/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/* global describe it */ - -var assert = require('assert') -var base58check = require('../') - -var fixtures = require('./fixtures') - -describe('bs58check', function () { - describe('decode', function () { - fixtures.valid.forEach(function (f) { - it('can decode ' + f.string, function () { - var actual = base58check.decode(f.string).toString('hex') - - assert.equal(actual, f.payload) - }) - }) - - fixtures.invalid.forEach(function (f) { - it('throws on ' + f, function () { - assert.throws(function () { - base58check.decode(f) - }, /Invalid checksum/) - }) - }) - }) - - describe('encode', function () { - fixtures.valid.forEach(function (f) { - it('can encode ' + f.string, function () { - var actual = base58check.encode(new Buffer(f.payload, 'hex')) - - assert.strictEqual(actual, f.string) - }) - }) - }) -}) diff --git a/node_modules/buffer-shims/index.js b/node_modules/buffer-shims/index.js deleted file mode 100644 index 1cab4c0..0000000 --- a/node_modules/buffer-shims/index.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict'; - -var buffer = require('buffer'); -var Buffer = buffer.Buffer; -var SlowBuffer = buffer.SlowBuffer; -var MAX_LEN = buffer.kMaxLength || 2147483647; -exports.alloc = function alloc(size, fill, encoding) { - if (typeof Buffer.alloc === 'function') { - return Buffer.alloc(size, fill, encoding); - } - if (typeof encoding === 'number') { - throw new TypeError('encoding must not be number'); - } - if (typeof size !== 'number') { - throw new TypeError('size must be a number'); - } - if (size > MAX_LEN) { - throw new RangeError('size is too large'); - } - var enc = encoding; - var _fill = fill; - if (_fill === undefined) { - enc = undefined; - _fill = 0; - } - var buf = new Buffer(size); - if (typeof _fill === 'string') { - var fillBuf = new Buffer(_fill, enc); - var flen = fillBuf.length; - var i = -1; - while (++i < size) { - buf[i] = fillBuf[i % flen]; - } - } else { - buf.fill(_fill); - } - return buf; -} -exports.allocUnsafe = function allocUnsafe(size) { - if (typeof Buffer.allocUnsafe === 'function') { - return Buffer.allocUnsafe(size); - } - if (typeof size !== 'number') { - throw new TypeError('size must be a number'); - } - if (size > MAX_LEN) { - throw new RangeError('size is too large'); - } - return new Buffer(size); -} -exports.from = function from(value, encodingOrOffset, length) { - if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) { - return Buffer.from(value, encodingOrOffset, length); - } - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number'); - } - if (typeof value === 'string') { - return new Buffer(value, encodingOrOffset); - } - if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { - var offset = encodingOrOffset; - if (arguments.length === 1) { - return new Buffer(value); - } - if (typeof offset === 'undefined') { - offset = 0; - } - var len = length; - if (typeof len === 'undefined') { - len = value.byteLength - offset; - } - if (offset >= value.byteLength) { - throw new RangeError('\'offset\' is out of bounds'); - } - if (len > value.byteLength - offset) { - throw new RangeError('\'length\' is out of bounds'); - } - return new Buffer(value.slice(offset, offset + len)); - } - if (Buffer.isBuffer(value)) { - var out = new Buffer(value.length); - value.copy(out, 0, 0, value.length); - return out; - } - if (value) { - if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) { - return new Buffer(value); - } - if (value.type === 'Buffer' && Array.isArray(value.data)) { - return new Buffer(value.data); - } - } - - throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.'); -} -exports.allocUnsafeSlow = function allocUnsafeSlow(size) { - if (typeof Buffer.allocUnsafeSlow === 'function') { - return Buffer.allocUnsafeSlow(size); - } - if (typeof size !== 'number') { - throw new TypeError('size must be a number'); - } - if (size >= MAX_LEN) { - throw new RangeError('size is too large'); - } - return new SlowBuffer(size); -} diff --git a/node_modules/buffer-shims/license.md b/node_modules/buffer-shims/license.md deleted file mode 100644 index 01cfaef..0000000 --- a/node_modules/buffer-shims/license.md +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016 Calvin Metcalf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.** diff --git a/node_modules/buffer-shims/package.json b/node_modules/buffer-shims/package.json deleted file mode 100644 index 3bb6ff8..0000000 --- a/node_modules/buffer-shims/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_args": [ - [ - "buffer-shims@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/readable-stream" - ] - ], - "_from": "buffer-shims@>=1.0.0 <2.0.0", - "_id": "buffer-shims@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/buffer-shims", - "_nodeVersion": "5.11.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/buffer-shims-1.0.0.tgz_1462560889323_0.8640750856138766" - }, - "_npmUser": { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "buffer-shims", - "raw": "buffer-shims@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "_shasum": "9978ce317388c649ad8793028c3477ef044a8b51", - "_shrinkwrap": null, - "_spec": "buffer-shims@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/readable-stream", - "bugs": { - "url": "https://github.com/calvinmetcalf/buffer-shims/issues" - }, - "dependencies": {}, - "description": "some shims for node buffers", - "devDependencies": { - "tape": "^4.5.1" - }, - "directories": {}, - "dist": { - "shasum": "9978ce317388c649ad8793028c3477ef044a8b51", - "tarball": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz" - }, - "files": [ - "index.js" - ], - "gitHead": "ea89b3857ab5b8203957922a84e9a48cf4c47e0a", - "homepage": "https://github.com/calvinmetcalf/buffer-shims#readme", - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - } - ], - "name": "buffer-shims", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/calvinmetcalf/buffer-shims.git" - }, - "scripts": { - "test": "tape test/*.js" - }, - "version": "1.0.0" -} diff --git a/node_modules/buffer-shims/readme.md b/node_modules/buffer-shims/readme.md deleted file mode 100644 index 7ea6475..0000000 --- a/node_modules/buffer-shims/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -buffer-shims -=== - -functions to make sure the new buffer methods work in older browsers. - -```js -var bufferShim = require('buffer-shims'); -bufferShim.from('foo'); -bufferShim.alloc(9, 'cafeface', 'hex'); -bufferShim.allocUnsafe(15); -bufferShim.allocUnsafeSlow(21); -``` - -should just use the original in newer nodes and on older nodes uses fallbacks. - -Known Issues -=== -- this does not patch the buffer object, only the constructor stuff -- it's actually a polyfill - -![](https://i.imgur.com/zxII3jJ.gif) diff --git a/node_modules/buffer-xor/.npmignore b/node_modules/buffer-xor/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/buffer-xor/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/buffer-xor/.travis.yml b/node_modules/buffer-xor/.travis.yml deleted file mode 100644 index d9f695b..0000000 --- a/node_modules/buffer-xor/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -before_install: - - "npm install npm -g" -node_js: - - "0.12" -env: - - TEST_SUITE=standard - - TEST_SUITE=unit -script: "npm run-script $TEST_SUITE" diff --git a/node_modules/buffer-xor/LICENSE b/node_modules/buffer-xor/LICENSE deleted file mode 100644 index bba5218..0000000 --- a/node_modules/buffer-xor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Daniel Cousens - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/buffer-xor/README.md b/node_modules/buffer-xor/README.md deleted file mode 100644 index 007f058..0000000 --- a/node_modules/buffer-xor/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# buffer-xor - -[![TRAVIS](https://secure.travis-ci.org/crypto-browserify/buffer-xor.png)](http://travis-ci.org/crypto-browserify/buffer-xor) -[![NPM](http://img.shields.io/npm/v/buffer-xor.svg)](https://www.npmjs.org/package/buffer-xor) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -A simple module for bitwise-xor on buffers. - - -## Examples - -``` javascript -var xor = require("buffer-xor") -var a = new Buffer('00ff0f', 'hex') -var b = new Buffer('f0f0', 'hex') - -console.log(xor(a, b)) -// => -``` - - -Or for those seeking those few extra cycles, perform the operation in place: - -``` javascript -var xorInplace = require("buffer-xor/inplace") -var a = new Buffer('00ff0f', 'hex') -var b = new Buffer('f0f0', 'hex') - -console.log(xorInplace(a, b)) -// => -// NOTE: xorInplace will return the shorter slice of its parameters - -// See that a has been mutated -console.log(a) -// => -``` - - -## License [MIT](LICENSE) - diff --git a/node_modules/buffer-xor/index.js b/node_modules/buffer-xor/index.js deleted file mode 100644 index 85ee6f6..0000000 --- a/node_modules/buffer-xor/index.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = function xor (a, b) { - var length = Math.min(a.length, b.length) - var buffer = new Buffer(length) - - for (var i = 0; i < length; ++i) { - buffer[i] = a[i] ^ b[i] - } - - return buffer -} diff --git a/node_modules/buffer-xor/inline.js b/node_modules/buffer-xor/inline.js deleted file mode 100644 index 8797570..0000000 --- a/node_modules/buffer-xor/inline.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./inplace') diff --git a/node_modules/buffer-xor/inplace.js b/node_modules/buffer-xor/inplace.js deleted file mode 100644 index d71c172..0000000 --- a/node_modules/buffer-xor/inplace.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = function xorInplace (a, b) { - var length = Math.min(a.length, b.length) - - for (var i = 0; i < length; ++i) { - a[i] = a[i] ^ b[i] - } - - return a.slice(0, length) -} diff --git a/node_modules/buffer-xor/package.json b/node_modules/buffer-xor/package.json deleted file mode 100644 index 6760c4d..0000000 --- a/node_modules/buffer-xor/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "buffer-xor@^1.0.2", - "/Users/jbaylina/git/MVP/node_modules/browserify-aes" - ] - ], - "_from": "buffer-xor@>=1.0.2 <2.0.0", - "_id": "buffer-xor@1.0.3", - "_inCache": true, - "_installable": true, - "_location": "/buffer-xor", - "_nodeVersion": "4.1.1", - "_npmUser": { - "email": "email@dcousens.com", - "name": "dcousens" - }, - "_npmVersion": "3.3.3", - "_phantomChildren": {}, - "_requested": { - "name": "buffer-xor", - "raw": "buffer-xor@^1.0.2", - "rawSpec": "^1.0.2", - "scope": null, - "spec": ">=1.0.2 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/browserify-aes" - ], - "_resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "_shasum": "26e61ed1422fb70dd42e6e36729ed51d855fe8d9", - "_shrinkwrap": null, - "_spec": "buffer-xor@^1.0.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/browserify-aes", - "author": { - "name": "Daniel Cousens" - }, - "bugs": { - "url": "https://github.com/crypto-browserify/buffer-xor/issues" - }, - "dependencies": {}, - "description": "A simple module for bitwise-xor on buffers", - "devDependencies": { - "mocha": "*", - "standard": "*" - }, - "directories": {}, - "dist": { - "shasum": "26e61ed1422fb70dd42e6e36729ed51d855fe8d9", - "tarball": "http://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - }, - "gitHead": "8f92b79a8b8133c26a7ae1af09b2c84ec6e3f426", - "homepage": "https://github.com/crypto-browserify/buffer-xor", - "keywords": [ - "bits", - "bitwise", - "buffer", - "buffer-xor", - "crypto", - "inline", - "math", - "memory", - "performance", - "xor" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "email@dcousens.com", - "name": "dcousens" - } - ], - "name": "buffer-xor", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/buffer-xor.git" - }, - "scripts": { - "standard": "standard", - "test": "npm run-script unit", - "unit": "mocha" - }, - "version": "1.0.3" -} diff --git a/node_modules/buffer-xor/test/fixtures.json b/node_modules/buffer-xor/test/fixtures.json deleted file mode 100644 index 6f3431e..0000000 --- a/node_modules/buffer-xor/test/fixtures.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "a": "000f", - "b": "f0ff", - "expected": "f0f0" - }, - { - "a": "000f0f", - "b": "f0ff", - "mutated": "f0f00f", - "expected": "f0f0" - }, - { - "a": "000f", - "b": "f0ffff", - "expected": "f0f0" - }, - { - "a": "000000", - "b": "000000", - "expected": "000000" - } -] diff --git a/node_modules/buffer-xor/test/index.js b/node_modules/buffer-xor/test/index.js deleted file mode 100644 index 06eacab..0000000 --- a/node_modules/buffer-xor/test/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/* global describe, it */ - -var assert = require('assert') -var xor = require('../') -var xorInplace = require('../inplace') -var fixtures = require('./fixtures') - -describe('xor', function () { - fixtures.forEach(function (f) { - it('returns ' + f.expected + ' for ' + f.a + '/' + f.b, function () { - var a = new Buffer(f.a, 'hex') - var b = new Buffer(f.b, 'hex') - var actual = xor(a, b) - - assert.equal(actual.toString('hex'), f.expected) - - // a/b unchanged - assert.equal(a.toString('hex'), f.a) - assert.equal(b.toString('hex'), f.b) - }) - }) -}) - -describe('xor/inplace', function () { - fixtures.forEach(function (f) { - it('returns ' + f.expected + ' for ' + f.a + '/' + f.b, function () { - var a = new Buffer(f.a, 'hex') - var b = new Buffer(f.b, 'hex') - var actual = xorInplace(a, b) - - assert.equal(actual.toString('hex'), f.expected) - - // a mutated, b unchanged - assert.equal(a.toString('hex'), f.mutated || f.expected) - assert.equal(b.toString('hex'), f.b) - }) - }) -}) diff --git a/node_modules/builtin-modules/builtin-modules.json b/node_modules/builtin-modules/builtin-modules.json deleted file mode 100644 index 72670f6..0000000 --- a/node_modules/builtin-modules/builtin-modules.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - "assert", - "buffer", - "child_process", - "cluster", - "console", - "constants", - "crypto", - "dgram", - "dns", - "domain", - "events", - "fs", - "http", - "https", - "module", - "net", - "os", - "path", - "process", - "punycode", - "querystring", - "readline", - "repl", - "stream", - "string_decoder", - "timers", - "tls", - "tty", - "url", - "util", - "v8", - "vm", - "zlib" -] diff --git a/node_modules/builtin-modules/index.js b/node_modules/builtin-modules/index.js deleted file mode 100644 index 9ef35ab..0000000 --- a/node_modules/builtin-modules/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var blacklist = [ - 'freelist', - 'sys' -]; - -module.exports = Object.keys(process.binding('natives')).filter(function (el) { - return !/^_|^internal|\//.test(el) && blacklist.indexOf(el) === -1; -}).sort(); diff --git a/node_modules/builtin-modules/license b/node_modules/builtin-modules/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/builtin-modules/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/builtin-modules/package.json b/node_modules/builtin-modules/package.json deleted file mode 100644 index 493baed..0000000 --- a/node_modules/builtin-modules/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "builtin-modules@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/is-builtin-module" - ] - ], - "_from": "builtin-modules@>=1.0.0 <2.0.0", - "_id": "builtin-modules@1.1.1", - "_inCache": true, - "_installable": true, - "_location": "/builtin-modules", - "_nodeVersion": "5.3.0", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "builtin-modules", - "raw": "builtin-modules@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/is-builtin-module" - ], - "_resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "_shasum": "270f076c5a72c02f5b65a47df94c5fe3a278892f", - "_shrinkwrap": null, - "_spec": "builtin-modules@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/is-builtin-module", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/builtin-modules/issues" - }, - "dependencies": {}, - "description": "List of the Node.js builtin modules", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "270f076c5a72c02f5b65a47df94c5fe3a278892f", - "tarball": "http://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "static.js", - "builtin-modules.json" - ], - "gitHead": "0ea253452b1d8cb3a70d16464f909dbc0bc370fe", - "homepage": "https://github.com/sindresorhus/builtin-modules#readme", - "keywords": [ - "builtin", - "built-in", - "builtins", - "node", - "modules", - "core", - "bundled", - "list", - "array", - "names" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "builtin-modules", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/builtin-modules.git" - }, - "scripts": { - "make": "node make.js", - "test": "xo && ava" - }, - "version": "1.1.1" -} diff --git a/node_modules/builtin-modules/readme.md b/node_modules/builtin-modules/readme.md deleted file mode 100644 index f1894b1..0000000 --- a/node_modules/builtin-modules/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -# builtin-modules [![Build Status](https://travis-ci.org/sindresorhus/builtin-modules.svg?branch=master)](https://travis-ci.org/sindresorhus/builtin-modules) - -> List of the Node.js builtin modules - -The list is just a [JSON file](builtin-modules.json) and can be used wherever. - - -## Install - -``` -$ npm install --save builtin-modules -``` - - -## Usage - -```js -var builtinModules = require('builtin-modules'); - -console.log(builinModules); -//=> ['assert', 'buffer', ...] -``` - - -## API - -Returns an array of builtin modules fetched from the running Node.js version. - -### Static list - -This module also comes bundled with a static array of builtin modules generated from the latest Node.js version. You can get it with `require('builtin-modules/static');` - - -## Related - -- [is-builtin-module](https://github.com/sindresorhus/is-builtin-module) - Check if a string matches the name of a Node.js builtin module - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/builtin-modules/static.js b/node_modules/builtin-modules/static.js deleted file mode 100644 index 9508f8f..0000000 --- a/node_modules/builtin-modules/static.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -module.exports = require('./builtin-modules.json'); diff --git a/node_modules/camelcase/index.js b/node_modules/camelcase/index.js deleted file mode 100644 index 5670f73..0000000 --- a/node_modules/camelcase/index.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -function preserveCamelCase(str) { - var isLastCharLower = false; - - for (var i = 0; i < str.length; i++) { - var c = str.charAt(i); - - if (isLastCharLower && (/[a-zA-Z]/).test(c) && c.toUpperCase() === c) { - str = str.substr(0, i) + '-' + str.substr(i); - isLastCharLower = false; - i++; - } else { - isLastCharLower = (c.toLowerCase() === c); - } - } - - return str; -} - -module.exports = function () { - var str = [].map.call(arguments, function (str) { - return str.trim(); - }).filter(function (str) { - return str.length; - }).join('-'); - - if (!str.length) { - return ''; - } - - if (str.length === 1) { - return str.toLowerCase(); - } - - if (!(/[_.\- ]+/).test(str)) { - if (str === str.toUpperCase()) { - return str.toLowerCase(); - } - - if (str[0] !== str[0].toLowerCase()) { - return str[0].toLowerCase() + str.slice(1); - } - - return str; - } - - str = preserveCamelCase(str); - - return str - .replace(/^[_.\- ]+/, '') - .toLowerCase() - .replace(/[_.\- ]+(\w|$)/g, function (m, p1) { - return p1.toUpperCase(); - }); -}; diff --git a/node_modules/camelcase/license b/node_modules/camelcase/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/camelcase/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/camelcase/package.json b/node_modules/camelcase/package.json deleted file mode 100644 index 7c58826..0000000 --- a/node_modules/camelcase/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "camelcase@^3.0.0", - "/Users/jbaylina/git/MVP/node_modules/yargs-parser" - ] - ], - "_from": "camelcase@>=3.0.0 <4.0.0", - "_id": "camelcase@3.0.0", - "_inCache": true, - "_installable": true, - "_location": "/camelcase", - "_nodeVersion": "4.4.2", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/camelcase-3.0.0.tgz_1462383205197_0.03801905922591686" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "3.8.9", - "_phantomChildren": {}, - "_requested": { - "name": "camelcase", - "raw": "camelcase@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/yargs-parser" - ], - "_resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "_shasum": "32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a", - "_shrinkwrap": null, - "_spec": "camelcase@^3.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/yargs-parser", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "http://sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/camelcase/issues" - }, - "dependencies": {}, - "description": "Convert a dash/dot/underscore/space separated string to camelCase: foo-bar → fooBar", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a", - "tarball": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "d4de0e37b625e38a880efc6517194917a5beda01", - "homepage": "https://github.com/sindresorhus/camelcase#readme", - "keywords": [ - "camelcase", - "camel-case", - "camel", - "case", - "dash", - "hyphen", - "dot", - "underscore", - "separator", - "string", - "text", - "convert" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "camelcase", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/camelcase.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "3.0.0" -} diff --git a/node_modules/camelcase/readme.md b/node_modules/camelcase/readme.md deleted file mode 100644 index 080b2a1..0000000 --- a/node_modules/camelcase/readme.md +++ /dev/null @@ -1,57 +0,0 @@ -# camelcase [![Build Status](https://travis-ci.org/sindresorhus/camelcase.svg?branch=master)](https://travis-ci.org/sindresorhus/camelcase) - -> Convert a dash/dot/underscore/space separated string to camelCase: `foo-bar` → `fooBar` - - -## Install - -``` -$ npm install --save camelcase -``` - - -## Usage - -```js -const camelCase = require('camelcase'); - -camelCase('foo-bar'); -//=> 'fooBar' - -camelCase('foo_bar'); -//=> 'fooBar' - -camelCase('Foo-Bar'); -//=> 'fooBar' - -camelCase('--foo.bar'); -//=> 'fooBar' - -camelCase('__foo__bar__'); -//=> 'fooBar' - -camelCase('foo bar'); -//=> 'fooBar' - -console.log(process.argv[3]); -//=> '--foo-bar' -camelCase(process.argv[3]); -//=> 'fooBar' - -camelCase('foo', 'bar'); -//=> 'fooBar' - -camelCase('__foo__', '--bar'); -//=> 'fooBar' -``` - - -## Related - -- [decamelize](https://github.com/sindresorhus/decamelize) - The inverse of this module -- [uppercamelcase](https://github.com/SamVerschueren/uppercamelcase) - Like this module, but to PascalCase instead of camelCase - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/caseless/LICENSE b/node_modules/caseless/LICENSE deleted file mode 100644 index 61789f4..0000000 --- a/node_modules/caseless/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Definitions. -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: -You must give any other recipients of the Work or Derivative Works a copy of this License; and -You must cause any modified files to carry prominent notices stating that You changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/caseless/README.md b/node_modules/caseless/README.md deleted file mode 100644 index e5077a2..0000000 --- a/node_modules/caseless/README.md +++ /dev/null @@ -1,45 +0,0 @@ -## Caseless -- wrap an object to set and get property with caseless semantics but also preserve caseing. - -This library is incredibly useful when working with HTTP headers. It allows you to get/set/check for headers in a caseless manner while also preserving the caseing of headers the first time they are set. - -## Usage - -```javascript -var headers = {} - , c = caseless(headers) - ; -c.set('a-Header', 'asdf') -c.get('a-header') === 'asdf' -``` - -## has(key) - -Has takes a name and if it finds a matching header will return that header name with the preserved caseing it was set with. - -```javascript -c.has('a-header') === 'a-Header' -``` - -## set(key, value[, clobber=true]) - -Set is fairly straight forward except that if the header exists and clobber is disabled it will add `','+value` to the existing header. - -```javascript -c.set('a-Header', 'fdas') -c.set('a-HEADER', 'more', false) -c.get('a-header') === 'fdsa,more' -``` - -## swap(key) - -Swaps the casing of a header with the new one that is passed in. - -```javascript -var headers = {} - , c = caseless(headers) - ; -c.set('a-Header', 'fdas') -c.swap('a-HEADER') -c.has('a-header') === 'a-HEADER' -headers === {'a-HEADER': 'fdas'} -``` diff --git a/node_modules/caseless/index.js b/node_modules/caseless/index.js deleted file mode 100644 index d86a70e..0000000 --- a/node_modules/caseless/index.js +++ /dev/null @@ -1,66 +0,0 @@ -function Caseless (dict) { - this.dict = dict || {} -} -Caseless.prototype.set = function (name, value, clobber) { - if (typeof name === 'object') { - for (var i in name) { - this.set(i, name[i], value) - } - } else { - if (typeof clobber === 'undefined') clobber = true - var has = this.has(name) - - if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value - else this.dict[has || name] = value - return has - } -} -Caseless.prototype.has = function (name) { - var keys = Object.keys(this.dict) - , name = name.toLowerCase() - ; - for (var i=0;i=0.11.0 <0.12.0", - "_id": "caseless@0.11.0", - "_inCache": true, - "_installable": true, - "_location": "/caseless", - "_nodeVersion": "1.8.1", - "_npmUser": { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - }, - "_npmVersion": "2.8.3", - "_phantomChildren": {}, - "_requested": { - "name": "caseless", - "raw": "caseless@~0.11.0", - "rawSpec": "~0.11.0", - "scope": null, - "spec": ">=0.11.0 <0.12.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "_shasum": "715b96ea9841593cc33067923f5ec60ebda4f7d7", - "_shrinkwrap": null, - "_spec": "caseless@~0.11.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "mikeal.rogers@gmail.com", - "name": "Mikeal Rogers" - }, - "bugs": { - "url": "https://github.com/mikeal/caseless/issues" - }, - "dependencies": {}, - "description": "Caseless object set/get/has, very useful when working with HTTP headers.", - "devDependencies": { - "tape": "^2.10.2" - }, - "directories": {}, - "dist": { - "shasum": "715b96ea9841593cc33067923f5ec60ebda4f7d7", - "tarball": "http://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz" - }, - "gitHead": "c578232a02cc2b46b6da8851caf57fdbfac89ff5", - "homepage": "https://github.com/mikeal/caseless#readme", - "keywords": [ - "headers", - "http", - "caseless" - ], - "license": "Apache-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - }, - { - "email": "jnylen@gmail.com", - "name": "nylen" - }, - { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - } - ], - "name": "caseless", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mikeal/caseless.git" - }, - "scripts": { - "test": "node test.js" - }, - "test": "node test.js", - "version": "0.11.0" -} diff --git a/node_modules/caseless/test.js b/node_modules/caseless/test.js deleted file mode 100644 index 084bbaf..0000000 --- a/node_modules/caseless/test.js +++ /dev/null @@ -1,40 +0,0 @@ -var tape = require('tape') - , caseless = require('./') - ; - -tape('set get has', function (t) { - var headers = {} - , c = caseless(headers) - ; - t.plan(17) - c.set('a-Header', 'asdf') - t.equal(c.get('a-header'), 'asdf') - t.equal(c.has('a-header'), 'a-Header') - t.ok(!c.has('nothing')) - // old bug where we used the wrong regex - t.ok(!c.has('a-hea')) - c.set('a-header', 'fdsa') - t.equal(c.get('a-header'), 'fdsa') - t.equal(c.get('a-Header'), 'fdsa') - c.set('a-HEADER', 'more', false) - t.equal(c.get('a-header'), 'fdsa,more') - - t.deepEqual(headers, {'a-Header': 'fdsa,more'}) - c.swap('a-HEADER') - t.deepEqual(headers, {'a-HEADER': 'fdsa,more'}) - - c.set('deleteme', 'foobar') - t.ok(c.has('deleteme')) - t.ok(c.del('deleteme')) - t.notOk(c.has('deleteme')) - t.notOk(c.has('idonotexist')) - t.ok(c.del('idonotexist')) - - c.set('tva', 'test1') - c.set('tva-header', 'test2') - t.equal(c.has('tva'), 'tva') - t.notOk(c.has('header')) - - t.equal(c.get('tva'), 'test1') - -}) diff --git a/node_modules/chalk/index.js b/node_modules/chalk/index.js deleted file mode 100644 index 2d85a91..0000000 --- a/node_modules/chalk/index.js +++ /dev/null @@ -1,116 +0,0 @@ -'use strict'; -var escapeStringRegexp = require('escape-string-regexp'); -var ansiStyles = require('ansi-styles'); -var stripAnsi = require('strip-ansi'); -var hasAnsi = require('has-ansi'); -var supportsColor = require('supports-color'); -var defineProps = Object.defineProperties; -var isSimpleWindowsTerm = process.platform === 'win32' && !/^xterm/i.test(process.env.TERM); - -function Chalk(options) { - // detect mode if not set manually - this.enabled = !options || options.enabled === undefined ? supportsColor : options.enabled; -} - -// use bright blue on Windows as the normal blue color is illegible -if (isSimpleWindowsTerm) { - ansiStyles.blue.open = '\u001b[94m'; -} - -var styles = (function () { - var ret = {}; - - Object.keys(ansiStyles).forEach(function (key) { - ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); - - ret[key] = { - get: function () { - return build.call(this, this._styles.concat(key)); - } - }; - }); - - return ret; -})(); - -var proto = defineProps(function chalk() {}, styles); - -function build(_styles) { - var builder = function () { - return applyStyle.apply(builder, arguments); - }; - - builder._styles = _styles; - builder.enabled = this.enabled; - // __proto__ is used because we must return a function, but there is - // no way to create a function with a different prototype. - /* eslint-disable no-proto */ - builder.__proto__ = proto; - - return builder; -} - -function applyStyle() { - // support varags, but simply cast to string in case there's only one arg - var args = arguments; - var argsLen = args.length; - var str = argsLen !== 0 && String(arguments[0]); - - if (argsLen > 1) { - // don't slice `arguments`, it prevents v8 optimizations - for (var a = 1; a < argsLen; a++) { - str += ' ' + args[a]; - } - } - - if (!this.enabled || !str) { - return str; - } - - var nestedStyles = this._styles; - var i = nestedStyles.length; - - // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, - // see https://github.com/chalk/chalk/issues/58 - // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. - var originalDim = ansiStyles.dim.open; - if (isSimpleWindowsTerm && (nestedStyles.indexOf('gray') !== -1 || nestedStyles.indexOf('grey') !== -1)) { - ansiStyles.dim.open = ''; - } - - while (i--) { - var code = ansiStyles[nestedStyles[i]]; - - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - str = code.open + str.replace(code.closeRe, code.open) + code.close; - } - - // Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue. - ansiStyles.dim.open = originalDim; - - return str; -} - -function init() { - var ret = {}; - - Object.keys(styles).forEach(function (name) { - ret[name] = { - get: function () { - return build.call(this, [name]); - } - }; - }); - - return ret; -} - -defineProps(Chalk.prototype, init()); - -module.exports = new Chalk(); -module.exports.styles = ansiStyles; -module.exports.hasColor = hasAnsi; -module.exports.stripColor = stripAnsi; -module.exports.supportsColor = supportsColor; diff --git a/node_modules/chalk/license b/node_modules/chalk/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/chalk/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/chalk/package.json b/node_modules/chalk/package.json deleted file mode 100644 index 102c701..0000000 --- a/node_modules/chalk/package.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "_args": [ - [ - "chalk@^1.1.1", - "/Users/jbaylina/git/MVP/node_modules/har-validator" - ] - ], - "_from": "chalk@>=1.1.1 <2.0.0", - "_id": "chalk@1.1.3", - "_inCache": true, - "_installable": true, - "_location": "/chalk", - "_nodeVersion": "0.10.32", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/chalk-1.1.3.tgz_1459210604109_0.3892582862172276" - }, - "_npmUser": { - "email": "i.am.qix@gmail.com", - "name": "qix" - }, - "_npmVersion": "2.14.2", - "_phantomChildren": {}, - "_requested": { - "name": "chalk", - "raw": "chalk@^1.1.1", - "rawSpec": "^1.1.1", - "scope": null, - "spec": ">=1.1.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/har-validator" - ], - "_resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "_shasum": "a8115c55e4a702fe4d150abd3872822a7e09fc98", - "_shrinkwrap": null, - "_spec": "chalk@^1.1.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/har-validator", - "bugs": { - "url": "https://github.com/chalk/chalk/issues" - }, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "description": "Terminal string styling done right. Much color.", - "devDependencies": { - "coveralls": "^2.11.2", - "matcha": "^0.6.0", - "mocha": "*", - "nyc": "^3.0.0", - "require-uncached": "^1.0.2", - "resolve-from": "^1.0.0", - "semver": "^4.3.3", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "a8115c55e4a702fe4d150abd3872822a7e09fc98", - "tarball": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "0d8d8c204eb87a4038219131ad4d8369c9f59d24", - "homepage": "https://github.com/chalk/chalk#readme", - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "str", - "ansi", - "style", - "styles", - "tty", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "license": "MIT", - "maintainers": [ - { - "email": "i.am.qix@gmail.com", - "name": "qix" - }, - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - { - "email": "sindresorhus+unicorn@gmail.com", - "name": "unicorn" - } - ], - "name": "chalk", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/chalk/chalk.git" - }, - "scripts": { - "bench": "matcha benchmark.js", - "coverage": "nyc npm test && nyc report", - "coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls", - "test": "xo && mocha" - }, - "version": "1.1.3", - "xo": { - "envs": [ - "node", - "mocha" - ] - } -} diff --git a/node_modules/chalk/readme.md b/node_modules/chalk/readme.md deleted file mode 100644 index 5cf111e..0000000 --- a/node_modules/chalk/readme.md +++ /dev/null @@ -1,213 +0,0 @@ -

-
-
- chalk -
-
-
-

- -> Terminal string styling done right - -[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) -[![Coverage Status](https://coveralls.io/repos/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/r/chalk/chalk?branch=master) -[![](http://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) - - -[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68). Although there are other ones, they either do too much or not enough. - -**Chalk is a clean and focused alternative.** - -![](https://github.com/chalk/ansi-styles/raw/master/screenshot.png) - - -## Why - -- Highly performant -- Doesn't extend `String.prototype` -- Expressive API -- Ability to nest styles -- Clean and focused -- Auto-detects color support -- Actively maintained -- [Used by ~4500 modules](https://www.npmjs.com/browse/depended/chalk) as of July 15, 2015 - - -## Install - -``` -$ npm install --save chalk -``` - - -## Usage - -Chalk comes with an easy to use composable API where you just chain and nest the styles you want. - -```js -var chalk = require('chalk'); - -// style a string -chalk.blue('Hello world!'); - -// combine styled and normal strings -chalk.blue('Hello') + 'World' + chalk.red('!'); - -// compose multiple styles using the chainable API -chalk.blue.bgRed.bold('Hello world!'); - -// pass in multiple arguments -chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'); - -// nest styles -chalk.red('Hello', chalk.underline.bgBlue('world') + '!'); - -// nest styles of the same type even (color, underline, background) -chalk.green( - 'I am a green line ' + - chalk.blue.underline.bold('with a blue substring') + - ' that becomes green again!' -); -``` - -Easily define your own themes. - -```js -var chalk = require('chalk'); -var error = chalk.bold.red; -console.log(error('Error!')); -``` - -Take advantage of console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data). - -```js -var name = 'Sindre'; -console.log(chalk.green('Hello %s'), name); -//=> Hello Sindre -``` - - -## API - -### chalk.` - - -
-
-

- all files / ethereumjs-block/ header.js -

-
-
- 42.42% - Statements - 28/66 -
-
- 15.15% - Branches - 5/33 -
-
- 37.5% - Functions - 3/8 -
-
- 42.42% - Lines - 28/66 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 - - - -  -  -  -  -  - -3159× -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -3159× -  -  - -1579× -1579× -1579× -  -1579× -1579× -1579× -877× -  -702× -702× -  -  -702× -  -  -  -1579× -1579× -1544× -  -1579× -  -  -  - -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - - -  -  - -  -  - 
const utils = require('ethereumjs-util')
-const params = require('ethereum-common')
-const BN = utils.BN
-const rlp = utils.rlp
-  /**
-   * Represents a Block Header
-   * @constructor
-   * @param {Array} data raw data, deserialized
-   */
-var BlockHeader = module.exports = function (data) {
-  var fields = [{
-    name: 'parentHash',
-    length: 32,
-    default: utils.zeros(32)
-  }, {
-    name: 'uncleHash',
-    default: utils.SHA3_RLP_ARRAY
-  }, {
-    name: 'coinbase',
-    length: 20,
-    default: utils.zeros(20)
-  }, {
-    name: 'stateRoot',
-    length: 32,
-    default: utils.zeros(32)
-  }, {
-    name: 'transactionsTrie',
-    length: 32,
-    default: utils.SHA3_RLP
-  }, {
-    name: 'receiptTrie',
-    length: 32,
-    default: utils.SHA3_RLP
-  }, {
-    name: 'bloom',
-    default: utils.zeros(256)
-  }, {
-    name: 'difficulty',
-    default: new Buffer([])
-  }, {
-    name: 'number',
-    default: new Buffer([])
-  }, {
-    name: 'gasLimit',
-    default: new Buffer([])
-  }, {
-    name: 'gasUsed',
-    empty: true,
-    default: new Buffer([])
-  }, {
-    name: 'timestamp',
-    default: new Buffer([])
-  }, {
-    name: 'extraData',
-    allowZero: true,
-    empty: true,
-    default: new Buffer([])
-  }, {
-    name: 'mixHash',
-    default: utils.zeros(32)
-      // length: 32
-  }, {
-    name: 'nonce',
-    default: new Buffer([]) // sha3(42)
-  }]
-  utils.defineProperties(this, fields, data)
-}
- 
-BlockHeader.prototype.canonicalDifficulty = function (parentBlock) {
-  const blockTs = utils.bufferToInt(this.timestamp)
-  const parentTs = utils.bufferToInt(parentBlock.header.timestamp)
-  const parentDif = new BN(parentBlock.header.difficulty)
- 
-  var offset = parentDif.div(new BN(params.difficultyBoundDivisor.v))
-  var dif
-  if (blockTs < parentTs + params.durationLimit.v) {
-    dif = offset.add(parentDif)
-  } else {
-    const minimumDifficulty = new BN(params.minimumDifficulty.v)
-    Iif (new BN(this.difficulty).cmp(minimumDifficulty) === -1) {
-      dif = minimumDifficulty
-    } else {
-      dif = parentDif.sub(offset)
-    }
-  }
- 
-  var exp = new BN(this.number).divn(100000).sub(new BN(2))
-  if (!exp.isNeg()) {
-    dif.iadd(new BN(2).pow(exp))
-  }
-  return dif
-}
- 
-// check the block for the canical difficulty
-BlockHeader.prototype.validateDifficulty = function (parentBlock) {
-  const dif = this.canonicalDifficulty(parentBlock)
-  return !Boolean(dif.cmp(new BN(this.difficulty)))
-}
- 
-BlockHeader.prototype.validateGasLimit = function (parentBlock) {
-  const pGasLimit = utils.bufferToInt(parentBlock.header.gasLimit)
-  const gasLimit = utils.bufferToInt(this.gasLimit)
-  const a = Math.floor(pGasLimit / params.gasLimitBoundDivisor.v)
-  const maxGasLimit = pGasLimit + a
-  const minGasLimit = pGasLimit - a
- 
-  return maxGasLimit > gasLimit && minGasLimit < gasLimit && params.minGasLimit.v < gasLimit
-}
- 
-/**
- * Validates the entire block headers
- * @method validate
- * @param {Blockchain} blockChain the blockchain that this block is validating against
- * @param {Bignum} [height] if this is an uncle header, this is the height of the block that is including it
- * @param {Function} cb the callback function
- */
-BlockHeader.prototype.validate = function (blockchain, height, cb) {
-  var self = this
-  if (arguments.length === 2) {
-    cb = height
-    height = false
-  }
- 
-  if (this.isGenesis()) {
-    return cb()
-  }
- 
-  // find the blocks parent
-  blockchain.getBlock(self.parentHash, function (err, parentBlock) {
-    if (err) {
-      return cb('could not find parent block')
-    }
- 
-    self.parentBlock = parentBlock
- 
-    var number = new BN(self.number)
-    if (number.cmp(new BN(parentBlock.header.number).addn(1)) !== 0) {
-      return cb('invalid number')
-    }
- 
-    if (height) {
-      var dif = height.sub(new BN(parentBlock.header.number))
-      if (!(dif.cmpn(8) === -1 && dif.cmpn(1) === 1)) {
-        return cb('uncle block has a parent that is too old or to young')
-      }
-    }
- 
-    if (!self.validateDifficulty(parentBlock)) {
-      return cb('invalid Difficulty')
-    }
- 
-    if (!self.validateGasLimit(parentBlock)) {
-      return cb('invalid gas limit')
-    }
- 
-    if (utils.bufferToInt(parentBlock.header.number) + 1 !== utils.bufferToInt(self.number)) {
-      return cb('invalid heigth')
-    }
- 
-    if (utils.bufferToInt(self.timestamp) <= utils.bufferToInt(parentBlock.header.timestamp)) {
-      return cb('invalid timestamp')
-    }
- 
-    if (self.extraData.length > params.maximumExtraDataSize.v) {
-      return cb('invalid amount of extra data')
-    }
- 
-    cb()
-  })
-}
- 
-BlockHeader.prototype.hash = function () {
-  return utils.sha3(rlp.encode(this.raw))
-}
- 
-BlockHeader.prototype.isGenesis = function () {
-  return this.number.toString('hex') === ''
-}
- 
-
-
- - - - - - - diff --git a/node_modules/ethereumjs-block/coverage/lcov-report/ethereumjs-block/index.html b/node_modules/ethereumjs-block/coverage/lcov-report/ethereumjs-block/index.html deleted file mode 100644 index f72e603..0000000 --- a/node_modules/ethereumjs-block/coverage/lcov-report/ethereumjs-block/index.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Code coverage report for ethereumjs-block/ - - - - - - - -
-
-

- all files ethereumjs-block/ -

-
-
- 42.7% - Statements - 76/178 -
-
- 14.49% - Branches - 10/69 -
-
- 21.21% - Functions - 7/33 -
-
- 42.7% - Lines - 76/178 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
header.js
42.42%28/6615.15%5/3337.5%3/842.42%28/66
index.js
42.86%48/11213.89%5/3616%4/2542.86%48/112
-
-
- - - - - - - diff --git a/node_modules/ethereumjs-block/coverage/lcov-report/ethereumjs-block/index.js.html b/node_modules/ethereumjs-block/coverage/lcov-report/ethereumjs-block/index.js.html deleted file mode 100644 index ed5dda3..0000000 --- a/node_modules/ethereumjs-block/coverage/lcov-report/ethereumjs-block/index.js.html +++ /dev/null @@ -1,860 +0,0 @@ - - - - Code coverage report for ethereumjs-block/index.js - - - - - - - -
-
-

- all files / ethereumjs-block/ index.js -

-
-
- 42.86% - Statements - 48/112 -
-
- 13.89% - Branches - 5/36 -
-
- 16% - Functions - 4/25 -
-
- 42.86% - Lines - 48/112 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 - - - - - - - - -  -  -  -  -  -  - -3159× -3159× -3159× -3159× -  -3159× -  -  -  -  -  -3159× -  -  -3159× -3159× -  -  -3159× -  -  -  -3159× -3159× -3159× -3159× -  -  -  -  -  -  -  -3159× -  -  -  -  -3159× -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  - -  -  -  - - - - - - -  -  -  -  -  -  -  - - -  -  -  -  - - -  -  - -  -  -  - -  -  -  - -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
require('es6-shim')
-const ethUtil = require('ethereumjs-util')
-const Tx = require('ethereumjs-tx')
-const Trie = require('merkle-patricia-tree')
-const BN = ethUtil.BN
-const rlp = ethUtil.rlp
-const async = require('async')
-const BlockHeader = require('./header')
-const params = require('ethereum-common')
- 
-/**
- * Represents a block
- * @constructor
- * @param {Array} data raw data, deserialized
- */
-var Block = module.exports = function (data) {
-  this.transactions = []
-  this.uncleHeaders = []
-  this._inBlockChain = false
-  this.txTrie = new Trie()
- 
-  Object.defineProperty(this, 'raw', {
-    get: function () {
-      return this.serialize(false)
-    }
-  })
- 
-  var rawTransactions, rawUncleHeaders
- 
-  // defaults
-  Eif (!data) {
-    data = [[], [], []]
-  }
- 
-  Iif (Buffer.isBuffer(data)) {
-    data = rlp.decode(data)
-  }
- 
-  Eif (Array.isArray(data)) {
-    this.header = new BlockHeader(data[0])
-    rawTransactions = data[1]
-    rawUncleHeaders = data[2]
-  } else {
-    this.header = new BlockHeader(data.header)
-    rawTransactions = data.transactions
-    rawUncleHeaders = data.uncleHeaders
-  }
- 
-  // parse uncle headers
-  for (var i = 0; i < rawUncleHeaders.length; i++) {
-    this.uncleHeaders.push(new BlockHeader(rawUncleHeaders[i]))
-  }
- 
-  // parse transactions
-  for (i = 0; i < rawTransactions.length; i++) {
-    this.transactions.push(new Tx(rawTransactions[i]))
-  }
-}
- 
-/**
- * Produces a hash the RLP of the block
- * @method hash
- */
-Block.prototype.hash = function () {
-  return this.header.hash()
-}
- 
-/**
- * Determines if a given block is the genesis block
- * @method isGenisis
- * @return Boolean
- */
-Block.prototype.isGenesis = function () {
-  return this.header.isGenesis()
-}
- 
-Block.prototype.setGenesisParams = function () {
-  this.header.gasLimit = params.genesisGasLimit.v
-  this.header.difficulty = params.genesisDifficulty.v
-  this.header.extraData = params.genesisExtraData.v
-  this.header.nonce = params.genesisNonce.v
-  this.header.stateRoot = params.genesisStateRoot.v
-}
- 
-/**
- * Produces a serialization of the block.
- * @method serialize
- * @param {Boolean} rlpEncode whether to rlp encode the block or not
- */
-Block.prototype.serialize = function (rlpEncode) {
-  var raw = [this.header.raw, [],
-    []
-  ]
- 
-  // rlpEnode defaults to true
-  Eif (typeof rlpEncode === 'undefined') {
-    rlpEncode = true
-  }
- 
-  this.transactions.forEach(function (tx) {
-    raw[1].push(tx.raw)
-  })
- 
-  this.uncleHeaders.forEach(function (uncle) {
-    raw[2].push(uncle.raw)
-  })
- 
-  return rlpEncode ? rlp.encode(raw) : raw
-}
- 
-/**
- * Generate transaction trie. The tx trie must be generated before the block can
- * be validated
- * @method genTxTrie
- * @param {Function} cb
- */
-Block.prototype.genTxTrie = function (cb) {
-  var i = 0
-  var self = this
- 
-  async.eachSeries(this.transactions, function (tx, done) {
-    self.txTrie.put(rlp.encode(i), tx.serialize(), done)
-    i++
-  }, cb)
-}
- 
-/**
- * Validates the transaction trie
- * @method validateTransactionTrie
- * @return {Boolean}
- */
-Block.prototype.validateTransactionsTrie = function () {
-  var txT = this.header.transactionsTrie.toString('hex')
-  if (this.transactions.length) {
-    return txT === this.txTrie.root.toString('hex')
-  } else {
-    return txT === ethUtil.SHA3_RLP.toString('hex')
-  }
-}
- 
-/**
- * Validates the transactions
- * @method validateTransactions
- * @return {Boolean}
- */
-Block.prototype.validateTransactions = function () {
-  var validTxs = true
-  this.transactions.forEach(function (tx) {
-    validTxs &= tx.validate()
-  })
-  return validTxs
-}
- 
-/**
- * Validates the block
- * @method validate
- * @param {BlockChain} blockChain the blockchain that this block wants to be part of
- * @param {Function} cb the callback which is given a `String` if the block is not valid
- */
-Block.prototype.validate = function (blockChain, cb) {
-  var self = this
- 
-  async.parallel([
-    // validate uncles
-    self.validateUncles.bind(self, blockChain),
-    // validate block
-    self.header.validate.bind(self.header, blockChain),
-    // generate the transaction trie
-    self.genTxTrie.bind(self)
-  ], function (err) {
-    if (!err) {
-      if (!self.validateTransactionsTrie()) {
-        err = 'invalid transaction true'
-      }
- 
-      if (!self.validateTransactions()) {
-        err = 'invalid transaction'
-      }
- 
-      if (!self.validateUnclesHash()) {
-        err = 'invild uncle hash'
-      }
-    }
- 
-    if (!err) {
-      self.parentBlock = self.header.parentBlock
-    }
- 
-    cb(err)
-  })
-}
- 
-Block.prototype.validateUnclesHash = function () {
-  var raw = []
-  this.uncleHeaders.forEach(function (uncle) {
-    raw.push(uncle.raw)
-  })
- 
-  raw = rlp.encode(raw)
-  return ethUtil.sha3(raw).toString('hex') === this.header.uncleHash.toString('hex')
-}
- 
-Block.prototype.validateUncles = function (blockChain, cb) {
-  if (this.isGenesis()) {
-    return cb()
-  }
- 
-  var self = this
- 
-  if (self.uncleHeaders.length > 2) {
-    return cb('too many uncle headers')
-  }
- 
-  var uncleHashes = self.uncleHeaders.map(function (header) {
-    return header.hash().toString('hex')
-  })
- 
-  if (!((new Set(uncleHashes)).size === uncleHashes.length)) {
-    return cb('dublicate unlces')
-  }
- 
-  async.each(self.uncleHeaders, function (uncle, cb2) {
-    var height = new BN(self.header.number)
-    async.parallel([
-      uncle.validate.bind(uncle, blockChain, height),
-      // check to make sure the uncle is not already in the blockchain
-      function (cb3) {
-        blockChain.getDetails(uncle.hash(), function (err, blockInfo) {
-          // TODO: remove uncles from BC
-          if (blockInfo && blockInfo.isUncle) {
-            cb3(err || 'uncle already included')
-          } else {
-            cb3()
-          }
-        })
-      }
-    ], cb2)
-  }, cb)
-}
- 
-/**
- * Converts the block toJSON
- * @method toJSON
- * @param {Bool} array whether to create a object or an array
- */
-Block.prototype.toJSON = function (labeled) {
-  if (labeled) {
-    var obj = {
-      header: this.header.toJSON(true),
-      transactions: [],
-      uncleHeaders: []
-    }
- 
-    this.transactions.forEach(function (tx) {
-      obj.transactions.push(tx.toJSON(labeled))
-    })
- 
-    this.uncleHeaders.forEach(function (uh) {
-      obj.uncleHeaders.push(uh.toJSON())
-    })
-    return obj
-  } else {
-    return ethUtil.baToJSON(this.raw)
-  }
-}
- 
-
-
- - - - - - - diff --git a/node_modules/ethereumjs-block/coverage/lcov-report/index.html b/node_modules/ethereumjs-block/coverage/lcov-report/index.html deleted file mode 100644 index 1664dae..0000000 --- a/node_modules/ethereumjs-block/coverage/lcov-report/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for All files - - - - - - - -
-
-

- / -

-
-
- 42.7% - Statements - 76/178 -
-
- 14.49% - Branches - 10/69 -
-
- 21.21% - Functions - 7/33 -
-
- 42.7% - Lines - 76/178 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
ethereumjs-block/
42.7%76/17814.49%10/6921.21%7/3342.7%76/178
-
-
- - - - - - - diff --git a/node_modules/ethereumjs-block/coverage/lcov-report/prettify.css b/node_modules/ethereumjs-block/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/node_modules/ethereumjs-block/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/ethereumjs-block/coverage/lcov-report/prettify.js b/node_modules/ethereumjs-block/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/node_modules/ethereumjs-block/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/ethereumjs-block/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/ethereumjs-block/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a..0000000 Binary files a/node_modules/ethereumjs-block/coverage/lcov-report/sort-arrow-sprite.png and /dev/null differ diff --git a/node_modules/ethereumjs-block/coverage/lcov-report/sorter.js b/node_modules/ethereumjs-block/coverage/lcov-report/sorter.js deleted file mode 100644 index 6c5034e..0000000 --- a/node_modules/ethereumjs-block/coverage/lcov-report/sorter.js +++ /dev/null @@ -1,158 +0,0 @@ -var addSorting = (function () { - "use strict"; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { return document.querySelector('.coverage-summary'); } - // returns the thead element of the summary table - function getTableHeader() { return getTable().querySelector('thead tr'); } - // returns the tbody element of the summary table - function getTableBody() { return getTable().querySelector('tbody'); } - // returns the th element for nth column - function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/node_modules/ethereumjs-block/coverage/lcov.info b/node_modules/ethereumjs-block/coverage/lcov.info deleted file mode 100644 index c35ce28..0000000 --- a/node_modules/ethereumjs-block/coverage/lcov.info +++ /dev/null @@ -1,331 +0,0 @@ -TN: -SF:/home/null/code/ethereumjs-block/index.js -FN:16,(anonymous_1) -FN:23,(anonymous_2) -FN:64,(anonymous_3) -FN:73,(anonymous_4) -FN:77,(anonymous_5) -FN:90,(anonymous_6) -FN:100,(anonymous_7) -FN:104,(anonymous_8) -FN:117,(anonymous_9) -FN:121,(anonymous_10) -FN:132,(anonymous_11) -FN:146,(anonymous_12) -FN:148,(anonymous_13) -FN:160,(anonymous_14) -FN:170,(anonymous_15) -FN:193,(anonymous_16) -FN:195,(anonymous_17) -FN:203,(anonymous_18) -FN:214,(anonymous_19) -FN:222,(anonymous_20) -FN:227,(anonymous_21) -FN:228,(anonymous_22) -FN:246,(anonymous_23) -FN:254,(anonymous_24) -FN:258,(anonymous_25) -FNF:25 -FNH:4 -FNDA:3159,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:1,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:1,(anonymous_5) -FNDA:1,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -FNDA:0,(anonymous_23) -FNDA:0,(anonymous_24) -FNDA:0,(anonymous_25) -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:7,1 -DA:8,1 -DA:9,1 -DA:16,1 -DA:17,3159 -DA:18,3159 -DA:19,3159 -DA:20,3159 -DA:22,3159 -DA:24,0 -DA:28,3159 -DA:31,3159 -DA:32,3159 -DA:35,3159 -DA:36,0 -DA:39,3159 -DA:40,3159 -DA:41,3159 -DA:42,3159 -DA:44,0 -DA:45,0 -DA:46,0 -DA:50,3159 -DA:51,0 -DA:55,3159 -DA:56,0 -DA:64,1 -DA:65,1 -DA:73,1 -DA:74,0 -DA:77,1 -DA:78,1 -DA:79,1 -DA:80,1 -DA:81,1 -DA:82,1 -DA:90,1 -DA:91,1 -DA:96,1 -DA:97,1 -DA:100,1 -DA:101,0 -DA:104,1 -DA:105,0 -DA:108,1 -DA:117,1 -DA:118,0 -DA:119,0 -DA:121,0 -DA:122,0 -DA:123,0 -DA:132,1 -DA:133,0 -DA:134,0 -DA:135,0 -DA:137,0 -DA:146,1 -DA:147,0 -DA:148,0 -DA:149,0 -DA:151,0 -DA:160,1 -DA:161,0 -DA:163,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:176,0 -DA:177,0 -DA:180,0 -DA:181,0 -DA:185,0 -DA:186,0 -DA:189,0 -DA:193,1 -DA:194,0 -DA:195,0 -DA:196,0 -DA:199,0 -DA:200,0 -DA:203,1 -DA:204,0 -DA:205,0 -DA:208,0 -DA:210,0 -DA:211,0 -DA:214,0 -DA:215,0 -DA:218,0 -DA:219,0 -DA:222,0 -DA:223,0 -DA:224,0 -DA:228,0 -DA:230,0 -DA:231,0 -DA:233,0 -DA:246,1 -DA:247,0 -DA:248,0 -DA:254,0 -DA:255,0 -DA:258,0 -DA:259,0 -DA:261,0 -DA:263,0 -LF:112 -LH:48 -BRDA:31,1,0,3159 -BRDA:31,1,1,0 -BRDA:35,2,0,0 -BRDA:35,2,1,3159 -BRDA:39,3,0,3159 -BRDA:39,3,1,0 -BRDA:96,4,0,1 -BRDA:96,4,1,0 -BRDA:108,5,0,1 -BRDA:108,5,1,0 -BRDA:134,6,0,0 -BRDA:134,6,1,0 -BRDA:171,7,0,0 -BRDA:171,7,1,0 -BRDA:172,8,0,0 -BRDA:172,8,1,0 -BRDA:176,9,0,0 -BRDA:176,9,1,0 -BRDA:180,10,0,0 -BRDA:180,10,1,0 -BRDA:185,11,0,0 -BRDA:185,11,1,0 -BRDA:204,12,0,0 -BRDA:204,12,1,0 -BRDA:210,13,0,0 -BRDA:210,13,1,0 -BRDA:218,14,0,0 -BRDA:218,14,1,0 -BRDA:230,15,0,0 -BRDA:230,15,1,0 -BRDA:230,16,0,0 -BRDA:230,16,1,0 -BRDA:231,17,0,0 -BRDA:231,17,1,0 -BRDA:247,18,0,0 -BRDA:247,18,1,0 -BRF:36 -BRH:5 -end_of_record -TN: -SF:/home/null/code/ethereumjs-block/header.js -FN:10,(anonymous_1) -FN:69,(anonymous_2) -FN:95,(anonymous_3) -FN:100,(anonymous_4) -FN:117,(anonymous_5) -FN:129,(anonymous_6) -FN:172,(anonymous_7) -FN:176,(anonymous_8) -FNF:8 -FNH:3 -FNDA:3159,(anonymous_1) -FNDA:1579,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:1,(anonymous_7) -FNDA:0,(anonymous_8) -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:10,1 -DA:11,3159 -DA:66,3159 -DA:69,1 -DA:70,1579 -DA:71,1579 -DA:72,1579 -DA:74,1579 -DA:75,1579 -DA:76,1579 -DA:77,877 -DA:79,702 -DA:80,702 -DA:81,0 -DA:83,702 -DA:87,1579 -DA:88,1579 -DA:89,1544 -DA:91,1579 -DA:95,1 -DA:96,0 -DA:97,0 -DA:100,1 -DA:101,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:107,0 -DA:117,1 -DA:118,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:124,0 -DA:125,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:134,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:141,0 -DA:142,0 -DA:143,0 -DA:144,0 -DA:148,0 -DA:149,0 -DA:152,0 -DA:153,0 -DA:156,0 -DA:157,0 -DA:160,0 -DA:161,0 -DA:164,0 -DA:165,0 -DA:168,0 -DA:172,1 -DA:173,1 -DA:176,1 -DA:177,0 -LF:66 -LH:28 -BRDA:76,1,0,877 -BRDA:76,1,1,702 -BRDA:80,2,0,0 -BRDA:80,2,1,702 -BRDA:88,3,0,1544 -BRDA:88,3,1,35 -BRDA:107,4,0,0 -BRDA:107,4,1,0 -BRDA:107,4,2,0 -BRDA:119,5,0,0 -BRDA:119,5,1,0 -BRDA:124,6,0,0 -BRDA:124,6,1,0 -BRDA:130,7,0,0 -BRDA:130,7,1,0 -BRDA:137,8,0,0 -BRDA:137,8,1,0 -BRDA:141,9,0,0 -BRDA:141,9,1,0 -BRDA:143,10,0,0 -BRDA:143,10,1,0 -BRDA:143,11,0,0 -BRDA:143,11,1,0 -BRDA:148,12,0,0 -BRDA:148,12,1,0 -BRDA:152,13,0,0 -BRDA:152,13,1,0 -BRDA:156,14,0,0 -BRDA:156,14,1,0 -BRDA:160,15,0,0 -BRDA:160,15,1,0 -BRDA:164,16,0,0 -BRDA:164,16,1,0 -BRF:33 -BRH:5 -end_of_record diff --git a/node_modules/ethereumjs-block/docs/index.md b/node_modules/ethereumjs-block/docs/index.md deleted file mode 100644 index 1bc3955..0000000 --- a/node_modules/ethereumjs-block/docs/index.md +++ /dev/null @@ -1,227 +0,0 @@ -# Block - -[index.js:19-64](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L19-L64 "Source code on GitHub") - -Creates a new block object - -**Parameters** - -- `data` **Array or Buffer or Object** - -**Properties** - -- `header` **Header** the block's header -- `uncleList` **Array<Header>** an array of uncle headers -- `raw` **Array<Buffer>** an array of buffers containing the raw blocks. - -## genTxTrie - -[index.js:137-145](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L137-L145 "Source code on GitHub") - -Generate transaction trie. The tx trie must be generated before the transaction trie can -be validated with `validateTransactionTrie` - -**Parameters** - -- `cb` **Function** the callback - -## hash - -[index.js:70-72](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L70-L72 "Source code on GitHub") - -Produces a hash the RLP of the block - -## isGenesis - -[index.js:79-81](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L79-L81 "Source code on GitHub") - -Determines if a given block is the genesis block - -Returns **** Boolean - -## isHomestead - -[index.js:88-90](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L88-L90 "Source code on GitHub") - -Determines if a given block part of homestead or not - -Returns **** Boolean - -## serialize - -[index.js:110-129](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L110-L129 "Source code on GitHub") - -Produces a serialization of the block. - -**Parameters** - -- `rlpEncode` **Boolean** whether to rlp encode the block or not - -## setGenesisParams - -[index.js:96-103](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L96-L103 "Source code on GitHub") - -turns the block in to the canonical genesis block - -## toJSON - -[index.js:289-308](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L289-L308 "Source code on GitHub") - -Converts the block toJSON - -**Parameters** - -- `labeled` **Bool** whether to create an labeled object or an array - -Returns **Object** - -## validate - -[index.js:191-222](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L191-L222 "Source code on GitHub") - -Validates the entire block. Returns a string to the callback if block is invalid - -**Parameters** - -- `blockChain` **BlockChain** the blockchain that this block wants to be part of -- `cb` **Function** the callback which is given a `String` if the block is not valid - -## validateTransactions - -[index.js:167-183](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L167-L183 "Source code on GitHub") - -Validates the transactions - -**Parameters** - -- `stringError` **[Boolean]** whether to return a string with a dscription of why the validation failed or return a Bloolean (optional, default `false`) - -Returns **Boolean** - -## validateTransactionsTrie - -[index.js:152-159](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L152-L159 "Source code on GitHub") - -Validates the transaction trie - -Returns **Boolean** - -## validateUncles - -[index.js:245-281](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L245-L281 "Source code on GitHub") - -Validates the uncles that are in the block if any. Returns a string to the callback if uncles are invalid - -**Parameters** - -- `blockChaina` **Blockchain** an instance of the Blockchain -- `blockChain` -- `cb` **Function** the callback - -## validateUnclesHash - -[index.js:229-237](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/index.js#L229-L237 "Source code on GitHub") - -Validates the uncle's hash - -Returns **Boolean** - -# BlockHeader - -[header.js:23-80](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/header.js#L23-L80 "Source code on GitHub") - -An object that repersents the block header - -**Parameters** - -- `data` **Array** raw data, deserialized - -**Properties** - -- `parentHash` **Buffer** the blocks' parent's hash -- `uncleHash` **Buffer** sha3(rlp_encode(uncle_list)) -- `coinbase` **Buffer** the miner address -- `stateRoot` **Buffer** The root of a Merkle Patricia tree -- `transactionTrie` **Buffer** the root of a Trie containing the transactions -- `receiptTrie` **Buffer** the root of a Trie containing the transaction Reciept -- `bloom` **Buffer** -- `difficulty` **Buffer** -- `number` **Buffer** the block's height -- `gasLimit` **Buffer** -- `gasUsed` **Buffer** -- `timestamp` **Buffer** -- `extraData` **Buffer** -- `raw` **Array<Buffer>** an array of buffers containing the raw blocks. - -## canonicalDifficulty - -[header.js:88-125](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/header.js#L88-L125 "Source code on GitHub") - -Returns the canoncical difficulty of the block - -**Parameters** - -- `parentBlock` **Block** the parent `Block` of the this header - -Returns **BN** - -## hash - -[header.js:221-223](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/header.js#L221-L223 "Source code on GitHub") - -Returns the sha3 hash of the blockheader - -Returns **Buffer** - -## isGenesis - -[header.js:230-232](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/header.js#L230-L232 "Source code on GitHub") - -checks if the blockheader is a genesis header - -Returns **Boolean** - -## isHomestead - -[header.js:239-241](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/header.js#L239-L241 "Source code on GitHub") - -Determines if a given block part of homestead or not - -Returns **** Boolean - -## validate - -[header.js:161-214](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/header.js#L161-L214 "Source code on GitHub") - -Validates the entire block header - -**Parameters** - -- `blockChain` **Blockchain** the blockchain that this block is validating against -- `blockchain` -- `height` **[Bignum]** if this is an uncle header, this is the height of the block that is including it -- `cb` **Function** the callback function. The callback is given an `error` if the block is invalid - -## validateDifficulty - -[header.js:133-136](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/header.js#L133-L136 "Source code on GitHub") - -checks that the block's `difficuly` matches the canonical difficulty - -**Parameters** - -- `parentBlock` **Block** this block's parent - -Returns **Boolean** - -## validateGasLimit - -[header.js:144-152](https://github.com/ethereum/ethereumjs-block/blob/16fb366efed89b87591c971e86a3bbdc842a13b1/header.js#L144-L152 "Source code on GitHub") - -Validates the gasLimit - -**Parameters** - -- `parentBlock` **Block** this block's parent - -Returns **Boolean** diff --git a/node_modules/ethereumjs-block/header.js b/node_modules/ethereumjs-block/header.js deleted file mode 100644 index 2db7711..0000000 --- a/node_modules/ethereumjs-block/header.js +++ /dev/null @@ -1,241 +0,0 @@ -const utils = require('ethereumjs-util') -const params = require('ethereum-common') -const BN = utils.BN - /** - * An object that repersents the block header - * @constructor - * @param {Array} data raw data, deserialized - * @prop {Buffer} parentHash the blocks' parent's hash - * @prop {Buffer} uncleHash sha3(rlp_encode(uncle_list)) - * @prop {Buffer} coinbase the miner address - * @prop {Buffer} stateRoot The root of a Merkle Patricia tree - * @prop {Buffer} transactionTrie the root of a Trie containing the transactions - * @prop {Buffer} receiptTrie the root of a Trie containing the transaction Reciept - * @prop {Buffer} bloom - * @prop {Buffer} difficulty - * @prop {Buffer} number the block's height - * @prop {Buffer} gasLimit - * @prop {Buffer} gasUsed - * @prop {Buffer} timestamp - * @prop {Buffer} extraData - * @prop {Array.} raw an array of buffers containing the raw blocks. - */ -var BlockHeader = module.exports = function (data) { - var fields = [{ - name: 'parentHash', - length: 32, - default: utils.zeros(32) - }, { - name: 'uncleHash', - default: utils.SHA3_RLP_ARRAY - }, { - name: 'coinbase', - length: 20, - default: utils.zeros(20) - }, { - name: 'stateRoot', - length: 32, - default: utils.zeros(32) - }, { - name: 'transactionsTrie', - length: 32, - default: utils.SHA3_RLP - }, { - name: 'receiptTrie', - length: 32, - default: utils.SHA3_RLP - }, { - name: 'bloom', - default: utils.zeros(256) - }, { - name: 'difficulty', - default: new Buffer([]) - }, { - name: 'number', - default: utils.intToBuffer(params.homeSteadForkNumber.v) - }, { - name: 'gasLimit', - default: new Buffer('ffffffffffffff', 'hex') - }, { - name: 'gasUsed', - empty: true, - default: new Buffer([]) - }, { - name: 'timestamp', - default: new Buffer([]) - }, { - name: 'extraData', - allowZero: true, - empty: true, - default: new Buffer([]) - }, { - name: 'mixHash', - default: utils.zeros(32) - // length: 32 - }, { - name: 'nonce', - default: new Buffer([]) // sha3(42) - }] - utils.defineProperties(this, fields, data) -} - -/** - * Returns the canoncical difficulty of the block - * @method canonicalDifficulty - * @param {Block} parentBlock the parent `Block` of the this header - * @return {BN} - */ -BlockHeader.prototype.canonicalDifficulty = function (parentBlock) { - const blockTs = new BN(this.timestamp) - const parentTs = new BN(parentBlock.header.timestamp) - const parentDif = new BN(parentBlock.header.difficulty) - const minimumDifficulty = new BN(params.minimumDifficulty.v) - var offset = parentDif.div(new BN(params.difficultyBoundDivisor.v)) - var dif - - if (this.isHomestead()) { - // homestead - // 1 - (block_timestamp - parent_timestamp) // 10 - var a = blockTs.sub(parentTs).divn(10).neg().addn(1) - var cutoff = new BN(-99) - // MAX(cutoff, a) - if (cutoff.cmp(a) === 1) { - a = cutoff - } - dif = parentDif.add(offset.mul(a)) - } else { - // prehomestead - if (parentTs.addn(params.durationLimit.v).cmp(blockTs) === 1) { - dif = offset.add(parentDif) - } else { - dif = parentDif.sub(offset) - } - } - - var exp = new BN(this.number).divn(100000).subn(2) - if (!exp.isNeg()) { - dif.iadd(new BN(2).pow(exp)) - } - - if (dif.cmp(minimumDifficulty) === -1) { - dif = minimumDifficulty - } - - return dif -} - -/** - * checks that the block's `difficuly` matches the canonical difficulty - * @method validateDifficulty - * @param {Block} parentBlock this block's parent - * @return {Boolean} - */ -BlockHeader.prototype.validateDifficulty = function (parentBlock) { - const dif = this.canonicalDifficulty(parentBlock) - return dif.cmp(new BN(this.difficulty)) === 0 -} - -/** - * Validates the gasLimit - * @method validateGasLimit - * @param {Block} parentBlock this block's parent - * @returns {Boolean} - */ -BlockHeader.prototype.validateGasLimit = function (parentBlock) { - const pGasLimit = utils.bufferToInt(parentBlock.header.gasLimit) - const gasLimit = utils.bufferToInt(this.gasLimit) - const a = Math.floor(pGasLimit / params.gasLimitBoundDivisor.v) - const maxGasLimit = pGasLimit + a - const minGasLimit = pGasLimit - a - - return maxGasLimit > gasLimit && minGasLimit < gasLimit && params.minGasLimit.v <= gasLimit -} - -/** - * Validates the entire block header - * @method validate - * @param {Blockchain} blockChain the blockchain that this block is validating against - * @param {Bignum} [height] if this is an uncle header, this is the height of the block that is including it - * @param {Function} cb the callback function. The callback is given an `error` if the block is invalid - */ -BlockHeader.prototype.validate = function (blockchain, height, cb) { - var self = this - if (arguments.length === 2) { - cb = height - height = false - } - - if (this.isGenesis()) { - return cb() - } - - // find the blocks parent - blockchain.getBlock(self.parentHash, function (err, parentBlock) { - if (err) { - return cb('could not find parent block') - } - - self.parentBlock = parentBlock - - var number = new BN(self.number) - if (number.cmp(new BN(parentBlock.header.number).addn(1)) !== 0) { - return cb('invalid number') - } - - if (height) { - var dif = height.sub(new BN(parentBlock.header.number)) - if (!(dif.cmpn(8) === -1 && dif.cmpn(1) === 1)) { - return cb('uncle block has a parent that is too old or to young') - } - } - - if (!self.validateDifficulty(parentBlock)) { - return cb('invalid Difficulty') - } - - if (!self.validateGasLimit(parentBlock)) { - return cb('invalid gas limit') - } - - if (utils.bufferToInt(parentBlock.header.number) + 1 !== utils.bufferToInt(self.number)) { - return cb('invalid heigth') - } - - if (utils.bufferToInt(self.timestamp) <= utils.bufferToInt(parentBlock.header.timestamp)) { - return cb('invalid timestamp') - } - - if (self.extraData.length > params.maximumExtraDataSize.v) { - return cb('invalid amount of extra data') - } - - cb() - }) -} - -/** - * Returns the sha3 hash of the blockheader - * @method hash - * @return {Buffer} - */ -BlockHeader.prototype.hash = function () { - return utils.rlphash(this.raw) -} - -/** - * checks if the blockheader is a genesis header - * @method isGenesis - * @return {Boolean} - */ -BlockHeader.prototype.isGenesis = function () { - return this.number.toString('hex') === '' -} - -/** - * Determines if a given block part of homestead or not - * @method isHomestead - * @return Boolean - */ -BlockHeader.prototype.isHomestead = function () { - return utils.bufferToInt(this.number) >= params.homeSteadForkNumber.v -} diff --git a/node_modules/ethereumjs-block/index.js b/node_modules/ethereumjs-block/index.js deleted file mode 100644 index 4ed3642..0000000 --- a/node_modules/ethereumjs-block/index.js +++ /dev/null @@ -1,321 +0,0 @@ -const ethUtil = require('ethereumjs-util') -const Tx = require('ethereumjs-tx') -const Trie = require('merkle-patricia-tree') -const BN = ethUtil.BN -const rlp = ethUtil.rlp -const async = require('async') -const BlockHeader = require('./header') -const params = require('ethereum-common') - -/** - * Creates a new block object - * @constructor the raw serialized or the deserialized block. - * @param {Array|Buffer|Object} data - * @prop {Header} header the block's header - * @prop {Array.
} uncleList an array of uncle headers - * @prop {Array.} raw an array of buffers containing the raw blocks. - */ -var Block = module.exports = function (data) { - this.transactions = [] - this.uncleHeaders = [] - this._inBlockChain = false - this.txTrie = new Trie() - - Object.defineProperty(this, 'raw', { - get: function () { - return this.serialize(false) - } - }) - - var rawTransactions, rawUncleHeaders - - // defaults - if (!data) { - data = [[], [], []] - } - - if (Buffer.isBuffer(data)) { - data = rlp.decode(data) - } - - if (Array.isArray(data)) { - this.header = new BlockHeader(data[0]) - rawTransactions = data[1] - rawUncleHeaders = data[2] - } else { - this.header = new BlockHeader(data.header) - rawTransactions = data.transactions - rawUncleHeaders = data.uncleHeaders - } - - // parse uncle headers - for (var i = 0; i < rawUncleHeaders.length; i++) { - this.uncleHeaders.push(new BlockHeader(rawUncleHeaders[i])) - } - - var homestead = this.isHomestead() - // parse transactions - for (i = 0; i < rawTransactions.length; i++) { - var tx = new Tx(rawTransactions[i]) - tx._homestead = homestead - this.transactions.push(tx) - } -} - -Block.Header = BlockHeader - -/** - * Produces a hash the RLP of the block - * @method hash - */ -Block.prototype.hash = function () { - return this.header.hash() -} - -/** - * Determines if a given block is the genesis block - * @method isGenisis - * @return Boolean - */ -Block.prototype.isGenesis = function () { - return this.header.isGenesis() -} - -/** - * Determines if a given block part of homestead or not - * @method isHomestead - * @return Boolean - */ -Block.prototype.isHomestead = function () { - return this.header.isHomestead() -} - -/** - * turns the block in to the canonical genesis block - * @method setGenesisParams - */ -Block.prototype.setGenesisParams = function () { - this.header.gasLimit = params.genesisGasLimit.v - this.header.difficulty = params.genesisDifficulty.v - this.header.extraData = params.genesisExtraData.v - this.header.nonce = params.genesisNonce.v - this.header.stateRoot = params.genesisStateRoot.v - this.header.number = new Buffer([]) -} - -/** - * Produces a serialization of the block. - * @method serialize - * @param {Boolean} rlpEncode whether to rlp encode the block or not - */ -Block.prototype.serialize = function (rlpEncode) { - var raw = [this.header.raw, [], - [] - ] - - // rlpEnode defaults to true - if (typeof rlpEncode === 'undefined') { - rlpEncode = true - } - - this.transactions.forEach(function (tx) { - raw[1].push(tx.raw) - }) - - this.uncleHeaders.forEach(function (uncle) { - raw[2].push(uncle.raw) - }) - - return rlpEncode ? rlp.encode(raw) : raw -} - -/** - * Generate transaction trie. The tx trie must be generated before the transaction trie can - * be validated with `validateTransactionTrie` - * @method genTxTrie - * @param {Function} cb the callback - */ -Block.prototype.genTxTrie = function (cb) { - var i = 0 - var self = this - - async.eachSeries(this.transactions, function (tx, done) { - self.txTrie.put(rlp.encode(i), tx.serialize(), done) - i++ - }, cb) -} - -/** - * Validates the transaction trie - * @method validateTransactionTrie - * @return {Boolean} - */ -Block.prototype.validateTransactionsTrie = function () { - var txT = this.header.transactionsTrie.toString('hex') - if (this.transactions.length) { - return txT === this.txTrie.root.toString('hex') - } else { - return txT === ethUtil.SHA3_RLP.toString('hex') - } -} - -/** - * Validates the transactions - * @method validateTransactions - * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean - * @return {Boolean} - */ -Block.prototype.validateTransactions = function (stringError) { - var errors = [] - - this.transactions.forEach(function (tx, i) { - var error = tx.validate(true) - if (error) { - errors.push(error + ' at tx ' + i) - } - }) - - if (stringError === undefined || stringError === false) { - return errors.length === 0 - } else { - return arrayToString(errors) - } -} - -/** - * Validates the entire block. Returns a string to the callback if block is invalid - * @method validate - * @param {BlockChain} blockChain the blockchain that this block wants to be part of - * @param {Function} cb the callback which is given a `String` if the block is not valid - */ -Block.prototype.validate = function (blockChain, cb) { - var self = this - var errors = [] - - async.parallel([ - // validate uncles - self.validateUncles.bind(self, blockChain), - // validate block - self.header.validate.bind(self.header, blockChain), - // generate the transaction trie - self.genTxTrie.bind(self) - ], function (err) { - if (err) { - errors.push(err) - } - - if (!self.validateTransactionsTrie()) { - errors.push('invalid transaction true') - } - - var txErrors = self.validateTransactions(true) - if (txErrors !== '') { - errors.push(txErrors) - } - - if (!self.validateUnclesHash()) { - errors.push('invild uncle hash') - } - - cb(arrayToString(errors)) - }) -} - -/** - * Validates the uncle's hash - * @method validateUncleHash - * @return {Boolean} - */ -Block.prototype.validateUnclesHash = function () { - var raw = [] - this.uncleHeaders.forEach(function (uncle) { - raw.push(uncle.raw) - }) - - raw = rlp.encode(raw) - return ethUtil.sha3(raw).toString('hex') === this.header.uncleHash.toString('hex') -} - -/** - * Validates the uncles that are in the block if any. Returns a string to the callback if uncles are invalid - * @method validateUncles - * @param {Blockchain} blockChaina an instance of the Blockchain - * @param {Function} cb the callback - */ -Block.prototype.validateUncles = function (blockChain, cb) { - if (this.isGenesis()) { - return cb() - } - - var self = this - - if (self.uncleHeaders.length > 2) { - return cb('too many uncle headers') - } - - var uncleHashes = self.uncleHeaders.map(function (header) { - return header.hash().toString('hex') - }) - - if (!((new Set(uncleHashes)).size === uncleHashes.length)) { - return cb('dublicate unlces') - } - - async.each(self.uncleHeaders, function (uncle, cb2) { - var height = new BN(self.header.number) - async.parallel([ - uncle.validate.bind(uncle, blockChain, height), - // check to make sure the uncle is not already in the blockchain - function (cb3) { - blockChain.getDetails(uncle.hash(), function (err, blockInfo) { - // TODO: remove uncles from BC - if (blockInfo && blockInfo.isUncle) { - cb3(err || 'uncle already included') - } else { - cb3() - } - }) - } - ], cb2) - }, cb) -} - -/** - * Converts the block toJSON - * @method toJSON - * @param {Bool} labeled whether to create an labeled object or an array - * @return {Object} - */ -Block.prototype.toJSON = function (labeled) { - if (labeled) { - var obj = { - header: this.header.toJSON(true), - transactions: [], - uncleHeaders: [] - } - - this.transactions.forEach(function (tx) { - obj.transactions.push(tx.toJSON(labeled)) - }) - - this.uncleHeaders.forEach(function (uh) { - obj.uncleHeaders.push(uh.toJSON()) - }) - return obj - } else { - return ethUtil.baToJSON(this.raw) - } -} - -function arrayToString (array) { - try { - return array.reduce(function (str, err) { - if (str) { - str += ' ' - } - return str + err - }) - } catch (e) { - return '' - } -} diff --git a/node_modules/ethereumjs-block/karma.conf.js b/node_modules/ethereumjs-block/karma.conf.js deleted file mode 100644 index bd8bdea..0000000 --- a/node_modules/ethereumjs-block/karma.conf.js +++ /dev/null @@ -1,37 +0,0 @@ -process.env.ethTest = 'BasicTests' - -module.exports = function (config) { - config.set({ - browserNoActivityTimeout: 60000, - frameworks: ['browserify', 'detectBrowsers', 'tap'], - files: [ - './tests/difficulty.js' - ], - preprocessors: { - 'tests/*.js': ['browserify', 'env'] - }, - singleRun: true, - plugins: [ - 'karma-browserify', - 'karma-chrome-launcher', - 'karma-env-preprocessor', - 'karma-tap', - 'karma-firefox-launcher', - 'karma-detect-browsers' - ], - detectBrowsers: { - enabled: true, - usePhantomJS: false, - postDetection: function (availableBrowser) { - if (process.env.TRAVIS) { - return ['Firefox'] - } - - var browsers = ['Chrome', 'Firefox'] - return browsers.filter(function (browser) { - return availableBrowser.indexOf(browser) !== -1 - }) - } - } - }) -} diff --git a/node_modules/ethereumjs-block/package.json b/node_modules/ethereumjs-block/package.json deleted file mode 100644 index 052c78b..0000000 --- a/node_modules/ethereumjs-block/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "ethereumjs-block@^1.2.2", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "ethereumjs-block@>=1.2.2 <2.0.0", - "_id": "ethereumjs-block@1.3.1", - "_inCache": true, - "_installable": true, - "_location": "/ethereumjs-block", - "_nodeVersion": "7.0.0-pre", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/ethereumjs-block-1.3.1.tgz_1476444127018_0.869645272847265" - }, - "_npmUser": { - "email": "null_radix@riseup.net", - "name": "null_radix" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "ethereumjs-block", - "raw": "ethereumjs-block@^1.2.2", - "rawSpec": "^1.2.2", - "scope": null, - "spec": ">=1.2.2 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc", - "/ethereumjs-vm", - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.3.1.tgz", - "_shasum": "3b9156ccafec23355741be2e95317349f6076b53", - "_shrinkwrap": null, - "_spec": "ethereumjs-block@^1.2.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "name": "mjbecze", - "url": "mb@ethdev.com" - }, - "bugs": { - "url": "https://github.com/ethereumjs/ethereumjs-block/issues" - }, - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.0.17", - "ethereumjs-tx": "^1.0.0", - "ethereumjs-util": "^4.0.1", - "merkle-patricia-tree": "^2.1.2" - }, - "description": "Provides Block serialization and help functions", - "devDependencies": { - "browserify": "^13.0.0", - "coveralls": "^2.11.6", - "documentation": "^3.0.4", - "ethereumjs-testing": "0.0.1", - "istanbul": "^0.4.2", - "karma": "^1.3.0", - "karma-browserify": "^5.1.0", - "karma-chrome-launcher": "^2.0.0", - "karma-detect-browsers": "^2.0.2", - "karma-env-preprocessor": "^0.1.1", - "karma-firefox-launcher": "^1.0.0", - "karma-tap": "^3.1.0", - "standard": "^8.4.0", - "tape": "^4.2.0" - }, - "directories": {}, - "dist": { - "shasum": "3b9156ccafec23355741be2e95317349f6076b53", - "tarball": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.3.1.tgz" - }, - "gitHead": "663cee69a2fa304d2b68b50405103c82b343a6a3", - "homepage": "https://github.com/ethereumjs/ethereumjs-block#readme", - "keywords": [ - "ethereum", - "block" - ], - "license": "MPL-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mjbecze@gmail.com", - "name": "null_radix" - } - ], - "name": "ethereumjs-block", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ethereumjs/ethereumjs-block.git" - }, - "scripts": { - "build:docs": "documentation --github -f md ./index.js > ./docs/index.md", - "coverage": "istanbul cover ./tests/index.js", - "coveralls": "npm run coverage && coveralls < coverage/lcov.info", - "lint": "standard", - "test": "npm run test:node && npm run test:browser", - "test:browser": "karma start karma.conf.js", - "test:node": "tape ./tests/index.js" - }, - "version": "1.3.1" -} diff --git a/node_modules/ethereumjs-block/test.js b/node_modules/ethereumjs-block/test.js deleted file mode 100644 index 29494cf..0000000 --- a/node_modules/ethereumjs-block/test.js +++ /dev/null @@ -1,5 +0,0 @@ -const Block = require('./index.js') - -const rlp = '0xf90219f90214a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000850400000000808213888080a011bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82faa00000000000000000000000000000000000000000000000000000000000000000880000000000000042c0c0' - -const block = new Block(new Buffer(rlp.slice(2)), 'hex') diff --git a/node_modules/ethereumjs-block/tests/block.js b/node_modules/ethereumjs-block/tests/block.js deleted file mode 100644 index 46fc7c3..0000000 --- a/node_modules/ethereumjs-block/tests/block.js +++ /dev/null @@ -1,40 +0,0 @@ -const tape = require('tape') -const utils = require('ethereumjs-util') -const Block = require('../index.js') -const params = require('ethereum-common') - -tape('[Block]: Block functions', function (t) { - t.test('should create with default constructor', function (st) { - var block = new Block() - - var header = block.header - st.deepEqual(header.parentHash, utils.zeros(32)) - st.equal(header.uncleHash.toString('hex'), utils.SHA3_RLP_ARRAY_S) - st.deepEqual(header.coinbase, utils.zeros(20)) - st.deepEqual(header.stateRoot, utils.zeros(32)) - st.equal(header.transactionsTrie.toString('hex'), utils.SHA3_RLP_S) - st.equal(header.receiptTrie.toString('hex'), utils.SHA3_RLP_S) - st.deepEqual(header.bloom, utils.zeros(256)) - st.deepEqual(header.difficulty, new Buffer([])) - st.deepEqual(header.number, utils.intToBuffer(params.homeSteadForkNumber.v)) - st.deepEqual(header.gasLimit, new Buffer('ffffffffffffff', 'hex')) - st.deepEqual(header.gasUsed, new Buffer([])) - st.deepEqual(header.timestamp, new Buffer([])) - st.deepEqual(header.extraData, new Buffer([])) - st.deepEqual(header.mixHash, utils.zeros(32)) - st.deepEqual(header.nonce, new Buffer([])) - - st.equal(block.uncleHeaders.length, 0) - st.equal(block.transactions.length, 0) - - st.end() - }) - - t.test('should be true for isGenesis', function (st) { - var block = new Block() - st.equal(block.isGenesis(), false) - block.header.number = new Buffer([]) - st.equal(block.isGenesis(), true) - st.end() - }) -}) diff --git a/node_modules/ethereumjs-block/tests/difficulty.js b/node_modules/ethereumjs-block/tests/difficulty.js deleted file mode 100644 index 832e09b..0000000 --- a/node_modules/ethereumjs-block/tests/difficulty.js +++ /dev/null @@ -1,49 +0,0 @@ -const testing = require('ethereumjs-testing') -const ethUtil = require('ethereumjs-util') -const basicTests = testing.tests.basicTests -const tape = require('tape') -const Block = require('../') -const BN = ethUtil.BN - -function addHomesteadFlag (tests) { - Object.keys(tests).map(function (q) { - tests[q].homestead = true - }) - return tests -} - -function normilize (data) { - Object.keys(data).map(function (i) { - if (i !== 'homestead') { - data[i] = ethUtil.isHexPrefixed(data[i]) ? new BN(ethUtil.toBuffer(data[i])) : new BN(data[i]) - } - }) -} - -testing.runTests(function (data, st, cb) { - normilize(data) - var parentBlock = new Block() - parentBlock.header.timestamp = data.parentTimestamp - parentBlock.header.difficulty = data.parentDifficulty - - var block = new Block() - if (data.homestead) { - block.header.isHomestead = function () { - return true - } - } else { - block.header.isHomestead = function () { - return false - } - } - block.header.timestamp = data.currentTimestamp - block.header.difficulty = data.currentDifficulty - block.header.number = data.currentBlockNumber - - var dif = block.header.canonicalDifficulty(parentBlock) - st.equal(dif.toString(), data.currentDifficulty.toString()) - cb() -}, { - difficulty: basicTests.difficulty, - difficultyHomestead: addHomesteadFlag(basicTests.difficultyHomestead) -}, tape) diff --git a/node_modules/ethereumjs-block/tests/genesis.js b/node_modules/ethereumjs-block/tests/genesis.js deleted file mode 100644 index 74f9968..0000000 --- a/node_modules/ethereumjs-block/tests/genesis.js +++ /dev/null @@ -1,14 +0,0 @@ -const genesisData = require('ethereumjs-testing').tests.basicTests.genesishashestest -const tape = require('tape') -const Block = require('../') - -tape('[Common]: genesis hashes tests', function (t) { - t.test('should generete the genesis correctly', function (st) { - var blockGenesis = new Block() - blockGenesis.setGenesisParams() - var rlpGenesis = blockGenesis.serialize() - st.strictEqual(rlpGenesis.toString('hex'), genesisData.genesis_rlp_hex, 'rlp hex mismatch') - st.strictEqual(blockGenesis.hash().toString('hex'), genesisData.genesis_hash) - st.end() - }) -}) diff --git a/node_modules/ethereumjs-block/tests/header.js b/node_modules/ethereumjs-block/tests/header.js deleted file mode 100644 index c20c8ef..0000000 --- a/node_modules/ethereumjs-block/tests/header.js +++ /dev/null @@ -1,35 +0,0 @@ -const tape = require('tape') -const params = require('ethereum-common') -const utils = require('ethereumjs-util') -const Header = require('../header.js') - -tape('[Block]: Header functions', function (t) { - t.test('should create with default constructor', function (st) { - var header = new Header() - st.deepEqual(header.parentHash, utils.zeros(32)) - st.equal(header.uncleHash.toString('hex'), utils.SHA3_RLP_ARRAY_S) - st.deepEqual(header.coinbase, utils.zeros(20)) - st.deepEqual(header.stateRoot, utils.zeros(32)) - st.equal(header.transactionsTrie.toString('hex'), utils.SHA3_RLP_S) - st.equal(header.receiptTrie.toString('hex'), utils.SHA3_RLP_S) - st.deepEqual(header.bloom, utils.zeros(256)) - st.deepEqual(header.difficulty, new Buffer([])) - st.deepEqual(header.number, utils.intToBuffer(params.homeSteadForkNumber.v)) - st.deepEqual(header.gasLimit, new Buffer('ffffffffffffff', 'hex')) - st.deepEqual(header.gasUsed, new Buffer([])) - st.deepEqual(header.timestamp, new Buffer([])) - st.deepEqual(header.extraData, new Buffer([])) - st.deepEqual(header.mixHash, utils.zeros(32)) - st.deepEqual(header.nonce, new Buffer([])) - - st.end() - }) - - t.test('should be true for isGenesis', function (st) { - var header = new Header() - st.equal(header.isGenesis(), false) - header.number = new Buffer([]) - st.equal(header.isGenesis(), true) - st.end() - }) -}) diff --git a/node_modules/ethereumjs-block/tests/index.js b/node_modules/ethereumjs-block/tests/index.js deleted file mode 100644 index ab8a816..0000000 --- a/node_modules/ethereumjs-block/tests/index.js +++ /dev/null @@ -1,4 +0,0 @@ -require('./header.js') -require('./block.js') -require('./genesis.js') -require('./difficulty.js') diff --git a/node_modules/ethereumjs-block/tests/tmp.py b/node_modules/ethereumjs-block/tests/tmp.py deleted file mode 100644 index 23f2dd0..0000000 --- a/node_modules/ethereumjs-block/tests/tmp.py +++ /dev/null @@ -1,11 +0,0 @@ -parent_diff = 0x83c50442e932a5dc -parent_timestamp = 0x7fd000e2d9055ed6 -block_timestamp = 0x7fd000e2d9055ee0 -block_number = 0x01 - -print(1 - (block_timestamp - parent_timestamp) // 10) -print(max(1 - (block_timestamp - parent_timestamp) // 10, -99)) - -block_diff = parent_diff + parent_diff // 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99) + int(2**((block_number // 100000) - 2)) - -print(block_diff) diff --git a/node_modules/ethereumjs-testrpc/.dockerignore b/node_modules/ethereumjs-testrpc/.dockerignore deleted file mode 100644 index 85dcc16..0000000 --- a/node_modules/ethereumjs-testrpc/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -.git -node_modules diff --git a/node_modules/ethereumjs-testrpc/.npmignore b/node_modules/ethereumjs-testrpc/.npmignore deleted file mode 100644 index 0d3e0aa..0000000 --- a/node_modules/ethereumjs-testrpc/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -TODO -*.log -.eslintrc.js -.tern-project diff --git a/node_modules/ethereumjs-testrpc/Dockerfile b/node_modules/ethereumjs-testrpc/Dockerfile deleted file mode 100644 index c4f0ef9..0000000 --- a/node_modules/ethereumjs-testrpc/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM mhart/alpine-node:5.10 - -WORKDIR /src -ADD . . - -RUN apk add --no-cache make gcc g++ python git bash -RUN npm install - -EXPOSE 8545 - -ENTRYPOINT ["node", "./bin/testrpc"] diff --git a/node_modules/ethereumjs-testrpc/ISSUE_TEMPLATE.md b/node_modules/ethereumjs-testrpc/ISSUE_TEMPLATE.md deleted file mode 100644 index b1be05d..0000000 --- a/node_modules/ethereumjs-testrpc/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,33 +0,0 @@ - - -## Expected Behavior - - - -## Current Behavior - - - -## Possible Solution - - - -## Steps to Reproduce (for bugs) - - -1. -2. -3. -4. - -## Context - - - -## Your Environment - -* Version used: -* Environment name and version (e.g. PHP 5.4 on nginx 1.9.1): -* Server type and version: -* Operating System and version: -* Link to your project: diff --git a/node_modules/ethereumjs-testrpc/LICENSE b/node_modules/ethereumjs-testrpc/LICENSE deleted file mode 100644 index a5a4e4d..0000000 --- a/node_modules/ethereumjs-testrpc/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Iuri Matias - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/node_modules/ethereumjs-testrpc/README.md b/node_modules/ethereumjs-testrpc/README.md deleted file mode 100644 index c9d4de6..0000000 --- a/node_modules/ethereumjs-testrpc/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# Welcome to `testrpc` - -`testrpc` is a Node.js based Ethereum client for testing and development. It uses ethereumjs to simulate full client behavior and make developing Ethereum applications much faster. It also includes all popular RPC functions and features (like events) and can be run deterministically to make development a breeze. - -# INSTALL - -`testrpc` is written in Javascript and distributed as a Node package via `npm`. Make sure you have Node.js installed, and your environment is capable of installing and compiling `npm` modules. - -```Bash -npm install -g ethereumjs-testrpc -``` - -**Using Windows?** See our [Windows install instructions](https://github.com/ethereumjs/testrpc/wiki/Installing-TestRPC-on-Windows). - -**Ubuntu User?** Follow the basic instructions for installing [Node.js](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions) and make sure that you have `npm` installed, as well as the `build-essential` `apt` package (it supplies `make` which you will need to compile most things). Use the official Node.js packages, *do not use the package supplied by your distribution.* - -Having problems? Be sure to check out the [FAQ](https://github.com/ethereumjs/testrpc/wiki/FAQ) and if you're still having issues and you're sure its a problem with `testrpc` please open an issue. - -# USAGE - -##### Command Line - -```Bash -$ testrpc -``` - -Options: - -* `-a` or `--accounts`: Specify the number of accounts to generate at startup. -* `-b` or `--blocktime`: Specify blocktime in seconds for automatic mining. Default is 0 and no auto-mining. -* `-d` or `--deterministic`: Generate deterministic addresses based on a pre-defined mnemonic. -* `-m` or `--mnemonic`: Use a specific HD wallet mnemonic to generate initial addresses. -* `-p` or `--port`: Port number to listen on. Defaults to 8545. -* `-h` or `--hostname`: Hostname to listen on. Defaults to Node's `server.listen()` [default](https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback). -* `-s` or `--seed`: Use arbitrary data to generate the HD wallet mnemonic to be used. -* `-g` or `--gasPrice`: Use a custom Gas Price (defaults to 1) -* `-l` or `--gasLimit`: Use a custom Gas Limit (defaults to 0x47E7C4) -* `-f` or `--fork`: Fork from another currently running Ethereum client at a given block. Input should be the HTTP location and port of the other client, e.g. `http://localhost:8545`. You can optionally specify the block to fork from using an `@` sign: `http://localhost:8545@1599200`. -* `--debug`: Output VM opcodes for debugging - -You can also specify `--account=...` (no 's') any number of times passing arbitrary private keys and their associated balances to generate initial addresses: - -``` -$ testrpc --account=",balance" [--account=",balance"] -``` - -Note that private keys are 64 characters long, and must be input as a 0x-prefixed hex string. Balance can either be input as an integer or 0x-prefixed hex value specifying the amount of wei in that account. - -An HD wallet will not be created for you when using `--account`. - -##### Library - -As a Web3 provider: - -```javascript -var TestRPC = require("ethereumjs-testrpc"); -web3.setProvider(TestRPC.provider()); -``` - -As a general http server: - -```javascript -var TestRPC = require("ethereumjs-testrpc"); -var server = TestRPC.server(); -server.listen(port, function(err, blockchain) {...}); -``` - -Both `.provider()` and `.server()` take a single object which allows you to specify behavior of the TestRPC. This parameter is optional. Available options are: - -* `"accounts"`: `Array` of `Object`'s. Each object should have a balance key with a hexadecimal value. The key `secretKey` can also be specified, which represents the account's private key. If no `secretKey`, the address is auto-generated with the given balance. If specified, the key is used to determine the account's address. -* `"debug"`: `boolean` - Output VM opcodes for debugging -* `"logger"`: `Object` - Object, like `console`, that implements a `log()` function. -* `"mnemonic"`: Use a specific HD wallet mnemonic to generate initial addresses. -* `"port"`: Port number to listen on when running as a server. -* `"seed"`: Use arbitrary data to generate the HD wallet mnemonic to be used. -* `"total_accounts"`: `number` - Number of accounts to generate at startup. -* `"fork"`: `string` - Same as `--fork` option above. -* `"time"`: `Date` - Date that the first block should start. Use this feature, along with the `evm_increaseTime` method to test time-dependent code. - -# IMPLEMENTED METHODS - -The RPC methods currently implemented are: - - -* `eth_accounts` -* `eth_blockNumber` -* `eth_call` -* `eth_coinbase` -* `eth_compileSolidity` -* `eth_estimateGas` -* `eth_gasPrice` -* `eth_getBalance` -* `eth_getBlockByNumber` -* `eth_getBlockByHash` -* `eth_getCode` (only supports block number “latest”) -* `eth_getCompilers` -* `eth_getFilterChanges` -* `eth_getFilterLogs` -* `eth_getLogs` -* `eth_getStorageAt` -* `eth_getTransactionByHash` -* `eth_getTransactionCount` -* `eth_getTransactionReceipt` -* `eth_hashrate` -* `eth_mining` -* `eth_newBlockFilter` -* `eth_newFilter` (includes log/event filters) -* `eth_sendTransaction` -* `eth_sendRawTransaction` -* `eth_sign` -* `eth_syncing` -* `eth_uninstallFilter` -* `net_listening` -* `net_peerCount` -* `net_version` -* `web3_clientVersion` -* `web3_sha3` - -There’s also special non-standard methods that aren’t included within the original RPC specification: - -* `evm_snapshot` : Snapshot the state of the blockchain at the current block. Takes no parameters. Returns the integer id of the snapshot created. -* `evm_revert` : Revert the state of the blockchain to a previous snapshot. Takes a single parameter, which is the snapshot id to revert to. If no snapshot id is passed it will revert to the latest snapshot. Returns `true`. -* `evm_increaseTime` : Jump forward in time. Takes one parameter, which is the amount of time to increase in seconds. Returns the total time adjustment, in seconds. -* `evm_mine` : Force a block to be mined. Takes no parameters. - -# TESTING - -Run tests via: - -``` -$ npm test -``` - -# LICENSE -[MPL-2.0](https://tldrlegal.com/license/mozilla-public-license-2.0-(mpl-2)) diff --git a/node_modules/ethereumjs-testrpc/bin/testrpc b/node_modules/ethereumjs-testrpc/bin/testrpc deleted file mode 100755 index 370f7e6..0000000 --- a/node_modules/ethereumjs-testrpc/bin/testrpc +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env node -var argv = require('yargs').argv; -var TestRPC = require('..'); -var pkg = require("../package.json"); -var util = require("ethereumjs-util"); -var URL = require("url"); -var Web3 = require("web3"); -var web3 = new Web3(); // Used only for its BigNumber library. - -function parseAccounts(accounts) { - function splitAccount(account) { - account = account.split(',') - return { - secretKey: account[0], - balance: account[1] - }; - } - - if (typeof accounts === 'string') - return [ splitAccount(accounts) ]; - else if (!Array.isArray(accounts)) - return; - - var ret = [] - for (var i = 0; i < accounts.length; i++) { - ret.push(splitAccount(accounts[i])); - } - return ret; -} - -if (argv.d || argv.deterministic) { - argv.s = "TestRPC is awesome!"; -} - -var options = { - port: argv.p || argv.port || "8545", - hostname: argv.h || argv.hostname, - debug: argv.debug, - seed: argv.s || argv.seed, - mnemonic: argv.m || argv.mnemonic, - total_accounts: argv.a || argv.accounts, - blocktime: argv.b || argv.blocktime, - gasPrice: argv.g || argv.gasPrice, - gasLimit: argv.l || argv.gasLimit, - accounts: parseAccounts(argv.account), - fork: argv.f || argv.fork || false, - network_id: argv.i || argv.networkId, - verbose: argv.v || argv.verbose, - logger: console -} - -var fork_address; - -// If we're forking from another client, don't try to use the same port. -if (options.fork) { - var split = options.fork.split("@"); - fork_address = split[0]; - var block; - if (split.length > 1) { - block = split[1]; - } - - if (URL.parse(fork_address).port == options.port) { - options.port = (parseInt(options.port) + 1); - } - - options.fork = fork_address + (block != null ? "@" + block : ""); -} - -var server = TestRPC.server(options); - -console.log("EthereumJS TestRPC v" + pkg.version); - -server.listen(options.port, options.hostname, function(err, state) { - if (err) { - console.log(err); - return; - } - console.log(""); - console.log("Available Accounts"); - console.log("=================="); - - var accounts = state.accounts; - var addresses = Object.keys(accounts); - - addresses.forEach(function(address, index) { - console.log("(" + index + ") " + address); - }); - - console.log(""); - console.log("Private Keys"); - console.log("=================="); - - addresses.forEach(function(address, index) { - console.log("(" + index + ") " + accounts[address].secretKey.toString("hex")); - }); - - if (options.accounts == null) { - console.log(""); - console.log("HD Wallet"); - console.log("=================="); - console.log("Mnemonic: " + state.mnemonic); - console.log("Base HD Path: " + state.wallet_hdpath + "{account_index}") - } - - if (options.gasPrice) { - console.log(""); - console.log("Gas Price"); - console.log("=================="); - console.log(options.gasPrice); - } - - if (options.gasLimit) { - console.log(""); - console.log("Gas Limit"); - console.log("=================="); - console.log(options.gasLimit); - } - - if (options.fork) { - console.log(""); - console.log("Forked Chain"); - console.log("=================="); - console.log("Location: " + fork_address); - console.log("Block: " + web3.toBigNumber(state.blockchain.fork_block_number).toString(10)); - console.log("Network ID: " + state.net_version); - console.log("Time: " + (state.blockchain.startTime || new Date()).toString()); - } - - console.log(""); - console.log("Listening on " + (options.hostname || "localhost") + ":" + options.port); -}); diff --git a/node_modules/ethereumjs-testrpc/index.js b/node_modules/ethereumjs-testrpc/index.js deleted file mode 100644 index 500e6eb..0000000 --- a/node_modules/ethereumjs-testrpc/index.js +++ /dev/null @@ -1,13 +0,0 @@ -var Interface = require('./lib/interface.js'); - -var TestRPC = { - server: function(options) { - return Interface.server(options); - }, - - provider: function(options) { - return Interface.provider(options); - } -} - -module.exports = TestRPC; diff --git a/node_modules/ethereumjs-testrpc/lib/blockchain_double.js b/node_modules/ethereumjs-testrpc/lib/blockchain_double.js deleted file mode 100644 index 059dbca..0000000 --- a/node_modules/ethereumjs-testrpc/lib/blockchain_double.js +++ /dev/null @@ -1,462 +0,0 @@ -var inherits = require("util").inherits; -var to = require("./utils/to.js"); -var Account = require('ethereumjs-account'); -var Block = require('ethereumjs-block'); -var Log = require("./utils/log"); -var Receipt = require("./utils/receipt"); -var VM = require('ethereumjs-vm'); -var Trie = require("merkle-patricia-tree"); -var Web3 = require("web3"); -var utils = require("ethereumjs-util"); -var async = require('async'); - -function BlockchainDouble(options) { - var self = this; - - options = options || {}; - - this.logger = options.logger || console; - - this.stateTrie = options.trie || new Trie(); - - this.vm = options.vm || new VM(this.stateTrie, this, { - enableHomestead: true, - activatePrecompiles: true - }); - - this.blocks = []; - this.blockHashes = {}; - this.blockLogs = []; - this.pending_transactions = []; - this.transactions = {}; - this.transactionReceipts = {}; - - if (options.debug == true) { - this.vm.on('step', function(info){ - self.logger.log(info.opcode.name) - }); - } - - // Homestead Gas Limit is 4712388 / 0x47E7C4 - this.gasLimit = options.gasLimit || '0x47E7C4'; - this.timeAdjustment = options.timeAdjustment || 0; - - if (options.time) { - this.setTime(options.time); - } -}; - -BlockchainDouble.prototype.initialize = function(accounts, block, callback) { - var self = this; - - if (typeof block == "function") { - callback = block; - block = this.createBlock(); - } - - accounts = accounts || []; - - async.eachSeries(accounts, function(account_data, finished) { - self.putAccount(account_data.account, account_data.address, finished); - }, function(err) { - if (err) return callback(err); - - // Create first block - self.putBlock(block); - - callback(); - }); -}; - -BlockchainDouble.prototype.latestBlock = function() { - return this.blocks[this.blocks.length - 1]; -} - -// number accepts number (integer, hex) or tag (e.g., "latest") -BlockchainDouble.prototype.getEffectiveBlockNumber = function(number, callback) { - if (typeof number != "string") { - number = to.hex(number); - } - - // If we have a hex number - if (number.indexOf("0x") >= 0) { - number = to.number(number); - } else { - if (number == "latest" || number == "pending") { - number = this.getHeight(); - } else if (number == "earliest") { - number = 0; - } - } - - return number; -}; - -// number accepts number (integer, hex), tag (e.g., "latest") or block hash -// This function is used by ethereumjs-vm -BlockchainDouble.prototype.getBlock = function(number, callback){ - var block; - - if (typeof number != "string") { - number = to.hex(number); - } - - // If we have a hex number or a block hash - if (number.indexOf("0x") >= 0) { - var hash = number; - - // block hash - if (hash.length > 40) { - block = this.blockHashes[to.hex(hash)]; - } else { - // Block number - block = this.blocks[to.number(hash)] - } - } else { - if (number == "latest" || number == "pending") { - block = this.latestBlock(); - } else if (number == "earliest") { - block = this.blocks[0]; - } - } - - if (block == null) { - return callback(new Error("Couldn't find block by reference: " + number)); - } - - callback(null, block); -}; - -BlockchainDouble.prototype.putBlock = function(block, logs, receipts) { - var self = this; - - // Lock in the state root for this block. - block.header.stateRoot = this.stateTrie.root; - - logs = logs || []; - receipts = receipts || [] - - this.blocks.push(block); - this.blockLogs.push(logs); - this.blockHashes[to.hex(block.hash())] = block; - - block.transactions.forEach(function(tx, index) { - self.transactions[to.hex(tx.hash())] = tx; - self.transactionReceipts[to.hex(tx.hash())] = receipts[index]; - }); -}; - -BlockchainDouble.prototype.popBlock = function() { - var self = this; - - if (this.blocks.length == 0) return null; - - var block = this.blocks.pop(); - - this.blockLogs.pop(); - delete this.blockHashes[to.hex(block.hash())]; - - block.transactions.forEach(function(tx, index) { - delete self.transactions[to.hex(tx.hash())]; - delete self.transactionReceipts[to.hex(tx.hash())]; - }); - - this._revertTrie(); - - return block; -}; - -BlockchainDouble.prototype.putAccount = function(account, address, callback) { - address = utils.toBuffer(address); - - this.stateTrie.put(address, account.serialize(), callback); -}; - -BlockchainDouble.prototype.createBlock = function() { - var block = new Block(); - var parent = this.blocks.length > 0 ? this.latestBlock() : null; - - block.header.gasLimit = this.gasLimit; - - // Ensure we have the right block number for the VM. - block.header.number = to.hex(this.getHeight() + 1); - - // Set the timestamp before processing txs - block.header.timestamp = to.hex(this.currentTime()); - - if (parent != null) { - block.header.parentHash = to.hex(parent.hash()); - } - - return block; -}; - -BlockchainDouble.prototype.getQueuedNonce = function(address, callback) { - var nonce = 0; - - this.pending_transactions.forEach(function(tx) { - if (tx.from != address) return; - - var pending_nonce = to.number(tx.nonce); - if (pending_nonce > nonce) { - nonce = pending_nonce; - } - }); - - if (nonce > 0) return callback(null, nonce); - - this.stateTrie.get(address, function(err, val) { - if (err) return callback(err); - - var account = new Account(val); - callback(null, account.nonce); - }); -}; - -BlockchainDouble.prototype.queueTransaction = function(tx) { - this.pending_transactions.push(tx); -}; - -BlockchainDouble.prototype.processNextBlock = function(callback) { - var self = this; - var block = this.createBlock(); - - Array.prototype.push.apply(block.transactions, this.pending_transactions); - - this._checkpointTrie(); - - this.vm.runBlock({ - block: block, - generate: true, - }, function(err, results) { - self.pending_transactions = []; - - if (err || results.error) { - err = err || results.error; - - if (err instanceof Error == false) { - err = new Error("VM error: " + err); - } - - self._revertTrie(); - //block.transactions.pop(); - - callback(err); - return; - } - - - var logs = []; - var receipts = []; - - var totalBlockGasUsage = 0; - - results.results.forEach(function(result) { - totalBlockGasUsage += to.number(result.gasUsed); - }); - - block.header.gasUsed = utils.toBuffer(to.hex(totalBlockGasUsage)); - - for (var v = 0; v < results.receipts.length; v++) { - var result = results.results[v]; - var receipt = results.receipts[v]; - var tx = block.transactions[v]; - var tx_hash = tx.hash(); - var tx_logs = []; - - for (var i = 0; i < receipt.logs.length; i++) { - var log = receipt.logs[i]; - var address = to.hex(log[0]); - var topics = [] - - for (var j = 0; j < log[1].length; j++) { - topics.push(to.hex(log[1][j])); - } - - var data = to.hex(log[2]); - - var log = new Log({ - logIndex: to.hex(i), - transactionIndex: to.hex(v), - transactionHash: tx_hash, - block: block, - address: address, - data: data, - topics: topics, - type: "mined" - }); - - logs.push(log); - tx_logs.push(log); - } - - receipts.push(new Receipt(tx, block, tx_logs, receipt.gasUsed, result.createdAddress)); - } - - self.putBlock(block, logs, receipts); - - callback(null, results); - }); -}; - -BlockchainDouble.prototype.getAccount = function(address, number, callback) { - var self = this; - - this.getBlock(number, function(err, block) { - if (err) return callback(err); - - var trie = self.stateTrie; - - // Manipulate the state root in place to maintain checkpoints - var currentStateRoot = trie.root; - self.stateTrie.root = block.header.stateRoot; - - trie.get(utils.toBuffer(address), function(err, data) { - // Finally, put the stateRoot back for good - trie.root = currentStateRoot; - - if (err) return callback(err); - - var account = new Account(data); - - account.exists = !!data; - - callback(null, account); - }); - }); -}; - -BlockchainDouble.prototype.getNonce = function(address, number, callback) { - this.getAccount(address, number, function(err, account) { - if (err) return callback(err); - callback(null, account.nonce); - }); -}; - -BlockchainDouble.prototype.getBalance = function(address, number, callback) { - this.getAccount(address, number, function(err, account) { - if (err) return callback(err); - - callback(null, account.balance); - }); -}; - -// Note! Storage values are returned RLP encoded! -BlockchainDouble.prototype.getStorage = function(address, position, number, callback) { - var self = this; - - this.getBlock(number, function(err, block) { - if (err) return callback(err); - - var trie = self.stateTrie; - - // Manipulate the state root in place to maintain checkpoints - var currentStateRoot = trie.root; - self.stateTrie.root = block.header.stateRoot; - - trie.get(utils.toBuffer(address), function(err, data) { - if (err != null) { - // Put the stateRoot back if there's an error - trie.root = currentStateRoot; - return callback(err); - } - - var account = new Account(data); - - trie.root = account.stateRoot; - - trie.get(utils.toBuffer(position), function(err, value) { - // Finally, put the stateRoot back for good - trie.root = currentStateRoot; - - if (err != null) { - return callback(err); - } - - callback(null, value); - }); - - }); - }); -} - -BlockchainDouble.prototype.getCode = function(address, number, callback) { - var self = this; - - this.getBlock(number, function(err, block) { - if (err) return callback(err); - - var trie = self.stateTrie; - - // Manipulate the state root in place to maintain checkpoints - var currentStateRoot = trie.root; - self.stateTrie.root = block.header.stateRoot; - - trie.get(utils.toBuffer(address), function(err, data) { - if (err != null) { - // Put the stateRoot back if there's an error - trie.root = currentStateRoot; - return callback(err); - } - - var account = new Account(data); - - account.getCode(trie, function(err, code) { - // Finally, put the stateRoot back for good - trie.root = currentStateRoot; - - if (err) return callback(err); - - callback(null, code); - }); - }); - }); -}; - -BlockchainDouble.prototype.getTransaction = function(hash, callback) { - hash = to.hex(hash); - - callback(null, this.transactions[hash]); -}; - -BlockchainDouble.prototype.getTransactionReceipt = function(hash, callback) { - hash = to.hex(hash); - - callback(null, this.transactionReceipts[hash]); -}; - -BlockchainDouble.prototype._checkpointTrie = function() { - this.vm.stateManager.checkpoint(); -}; - -BlockchainDouble.prototype._revertTrie = function() { - this.vm.stateManager.revert(function() {}); -}; - -BlockchainDouble.prototype.getBlockLogs = function(number, callback) { - var self = this; - number = this.getEffectiveBlockNumber(number); - callback(null, this.blockLogs[number]); -}; - -BlockchainDouble.prototype.getHeight = function() { - return this.blocks.length - 1; -}; - -BlockchainDouble.prototype.currentTime = function() { - return (new Date().getTime() / 1000 | 0) + this.timeAdjustment; -}; - -BlockchainDouble.prototype.increaseTime = function(seconds) { - if (seconds < 0) seconds = 0; - this.timeAdjustment += seconds; - return this.timeAdjustment; -}; - -BlockchainDouble.prototype.setTime = function(date) { - var now = new Date().getTime() / 1000 | 0; - var start = date.getTime() / 1000 | 0; - this.timeAdjustment = start - now; -} - -module.exports = BlockchainDouble; diff --git a/node_modules/ethereumjs-testrpc/lib/interface.js b/node_modules/ethereumjs-testrpc/lib/interface.js deleted file mode 100644 index 6b4b9ea..0000000 --- a/node_modules/ethereumjs-testrpc/lib/interface.js +++ /dev/null @@ -1,224 +0,0 @@ -var http = require("http"); - -var ProviderEngine = require("web3-provider-engine"); -var FilterSubprovider = require('web3-provider-engine/subproviders/filters.js'); -var VmSubprovider = require('web3-provider-engine/subproviders/vm.js'); -var SolcSubprovider = require('web3-provider-engine/subproviders/solc.js') - -var BlockchainDouble = require('./blockchain_double.js'); - -var RequestFunnel = require('./subproviders/requestfunnel.js'); -var DelayedBlockFilter = require("./subproviders/delayedblockfilter.js"); -var ReactiveBlockTracker = require("./subproviders/reactiveblocktracker.js"); -var GethDefaults = require("./subproviders/gethdefaults.js"); -var GethApiDouble = require('./subproviders/geth_api_double.js'); - -var Interface = { - server: function(options) { - if (options == null) { - options = {}; - } - - if (options.logger == null) { - options.logger = { - log: function() {} - }; - } - - var logger = options.logger; - var provider = this.provider(options); - var server = http.createServer(function(request, response) { - - var headers = request.headers; - var method = request.method; - var url = request.url; - var body = []; - - request.on('error', function(err) { - // console.error(err); - }).on('data', function(chunk) { - body.push(chunk); - }).on('end', function() { - body = Buffer.concat(body).toString(); - // At this point, we have the headers, method, url and body, and can now - // do whatever we need to in order to respond to this request. - - var headers = { - "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept", - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "*" - }; - - switch (method) { - case "OPTIONS": - headers["Content-Type"] = "text/plain" - response.writeHead(200, headers); - response.end(""); - break; - case "POST": - //console.log("Request coming in:", body); - - var payload; - try { - payload = JSON.parse(body); - } catch(e) { - headers["Content-Type"] = "text/plain"; - response.writeHead(400, headers); - response.end("400 Bad Request"); - return; - } - - // Log messages that come into the TestRPC via http - if (payload instanceof Array) { - // Batch request - for (var i = 0; i < payload.length; i++) { - var item = payload[i]; - logger.log(item.method); - } - } else { - logger.log(payload.method); - } - - provider.sendAsync(payload, function(err, result) { - headers["Content-Type"] = "application/json"; - response.writeHead(200, headers); - response.end(JSON.stringify(result)); - }); - - break; - default: - response.writeHead(400, { - "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept", - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "*", - "Content-Type": "text/plain" - }); - response.end("400 Bad Request"); - break; - } - }); - }); - - var oldListen = server.listen; - - server.listen = function() { - var args = Array.prototype.slice.call(arguments); - var callback = function() {}; - if (args.length > 0) { - var last = args[args.length - 1]; - if (typeof last == "function") { - callback = args.pop(); - } - } - - var intermediary = function(err) { - if (err) return callback(err); - server.provider.manager.waitForInitialization(function(err, accounts) { - callback(err, accounts); - }); - }; - - args.push(intermediary); - - oldListen.apply(server, args); - } - - server.provider = provider; - - // // TODO: the reviver option is a hack to allow batches to work with jayson - // // it become unecessary after the fix of this bug https://github.com/ethereum/web3.js/issues/345 - // var server = jayson.server(functions, { - // reviver: function(key, val) { - // if (typeof val === 'object' && val.hasOwnProperty('method') && - // val.method === 'eth_call' && val.hasOwnProperty('params') && - // val.params.constructor === Array && val.params.length === 1) - // val.params.push('latest'); - // return val; - // } - // }); - - return server; - }, - - // TODO: Make this class-like to allow for multiple providers? - provider: function(options) { - var self = this; - - if (options == null) { - options = {}; - } - - if (options.logger == null) { - options.logger = { - log: function() {} - }; - } - - options.blockchain = new BlockchainDouble(options); - - var engine = new ProviderEngine(); - - var gethApiDouble = new GethApiDouble(options); - - engine.manager = gethApiDouble; - engine.addProvider(new RequestFunnel()); - engine.addProvider(new ReactiveBlockTracker()); - engine.addProvider(new DelayedBlockFilter()); - engine.addProvider(new FilterSubprovider()); - engine.addProvider(new GethDefaults()); - engine.addProvider(new VmSubprovider()); - engine.addProvider(new SolcSubprovider()); - engine.addProvider(gethApiDouble); - - engine.setMaxListeners(100); - engine.start(); - - var externalize = function(payload) { - var clone = {}; - var keys = Object.keys(payload); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - clone[key] = payload[key]; - } - clone.external = true; - return clone; - }; - - // Mimic the provider interface, marking requests as external. - return { - manager: gethApiDouble, - sendAsync: function(payload, callback) { - if (Array.isArray(payload)) { - for (var i = 0; i < payload.length; i++) { - payload[i] = externalize(payload[i]); - } - } else { - payload = externalize(payload); - } - - // if (options.fallback) { - // console.log("payload", JSON.stringify(payload, null, 2)); - // } - - if (options.verbose) { - options.logger.log(" > " + JSON.stringify(payload, null, 2).split("\n").join("\n > ")); - - var oldCallback = callback; - callback = function(err, result) { - if (!err) { - options.logger.log(" < " + JSON.stringify(result, null, 2).split("\n").join("\n < ")); - } - oldCallback(err, result); - }; - } - - engine.sendAsync(payload, callback); - }, - send: function() { - throw new Error("Synchronous requests are not supported."); - } - }; - } -} - -module.exports = Interface; diff --git a/node_modules/ethereumjs-testrpc/lib/statemanager.js b/node_modules/ethereumjs-testrpc/lib/statemanager.js deleted file mode 100644 index 55d5996..0000000 --- a/node_modules/ethereumjs-testrpc/lib/statemanager.js +++ /dev/null @@ -1,464 +0,0 @@ -var Account = require('ethereumjs-account'); -var Block = require('ethereumjs-block'); -var VM = require('ethereumjs-vm'); -var Trie = require('merkle-patricia-tree'); -var FakeTransaction = require('ethereumjs-tx/fake.js'); -var utils = require('ethereumjs-util'); -var seedrandom = require('seedrandom'); -var bip39 = require('bip39'); -var hdkey = require('ethereumjs-wallet/hdkey'); -var async = require("async"); -var BlockchainDouble = require("./blockchain_double.js"); -var ForkedBlockchain = require("./utils/forkedblockchain.js"); -var Web3 = require('web3'); - -var to = require('./utils/to'); -var random = require('./utils/random'); -var txhelper = require('./utils/txhelper'); - -StateManager = function(options) { - var self = this; - - if (options == null) { - options = {}; - } - - if (options.fork) { - this.blockchain = new ForkedBlockchain(options); - } else { - this.blockchain = new BlockchainDouble(options); - } - - this.vm = this.blockchain.vm; - this.stateTrie = this.blockchain.stateTrie; - - this.accounts = {}; - this.coinbase = null; - - this.latest_filter_id = 1; - this.transaction_queue = []; - this.transaction_processing == false; - this.snapshots = []; - this.logger = options.logger || console; - this.net_version = options.network_id; - this.rng = seedrandom(options.seed); - this.mnemonic = options.mnemonic || bip39.entropyToMnemonic(random.randomBytes(16, this.rng)); - this.wallet = hdkey.fromMasterSeed(bip39.mnemonicToSeed(this.mnemonic)); - this.wallet_hdpath = "m/44'/60'/0'/0/"; - - this.gasPriceVal = '1'; - - if (options.gasPrice) { - this.gasPriceVal = utils.stripHexPrefix(utils.intToHex(options.gasPrice)); - } -} - -StateManager.prototype.initialize = function(options, callback) { - var self = this; - - var accounts = []; - - var total_accounts = this.total_accounts || 10; - - if (options.accounts) { - accounts = options.accounts.map(this.createAccount.bind(this)); - } else { - for (var i = 0; i < total_accounts; i++) { - accounts.push(self.createAccount({ - index: i - })); - } - } - - this.coinbase = to.hex(accounts[0].address); - this.accounts = {}; - - accounts.forEach(function(data) { - self.accounts[data.address] = data; - }); - - this.blockchain.initialize(accounts, function(err) { - if (err) return callback(err); - - // If the user didn't pass a specific version id in, then use the - // forked blockchain's version (if it exists) or create our own. - if (!self.net_version) { - self.net_version = self.blockchain.fork_version || new Date().getTime(); - } - - if (options.blocktime) { - self.blocktime = options.blocktime; - setTimeout(self.mineOnInterval.bind(self), self.blocktime * 1000); - } - - callback(); - }); -}; - -StateManager.prototype.mineOnInterval = function() { - var self = this; - - // Queue up to mine the block once the transaction is finished. - if (this.transaction_processing == true) { - setTimeout(this.mineOnInterval.bind(this), 100); - } else { - this.blockchain.processNextBlock(function(err) { - // TODO: What do we do with the errors? - setTimeout(self.mineOnInterval.bind(self), self.blocktime * 1000); - }); - } -}; - -StateManager.prototype.createAccount = function(opts) { - var secretKey; - var balance; - - if (opts.secretKey) { - secretKey = utils.toBuffer(to.hex(opts.secretKey)); - } else { - var acct = this.wallet.derivePath(this.wallet_hdpath + opts.index) // index is a number - secretKey = acct.getWallet().getPrivateKey() // Buffer - } - - var publicKey = utils.privateToPublic(secretKey); - var address = utils.publicToAddress(publicKey); - - var account = new Account(); - - if (opts.balance) { - account.balance = to.hex(opts.balance) - } else { - account.balance = "0x0000000000000056bc75e2d63100000"; - } - - var data = { - secretKey: secretKey, - publicKey: publicKey, - address: to.hex(address), - account: account - }; - - return data; -}; - -StateManager.prototype.blockNumber = function() { - return this.blockchain.getHeight(); -}; - -StateManager.prototype.gasPrice = function() { - return this.gasPriceVal; -} - -StateManager.prototype.getBalance = function(address, number, callback) { - this.blockchain.getBalance(address, number, function(err, balance) { - if (balance) { - balance = to.hex(balance); - } - callback(err, balance); - }); -} - -StateManager.prototype.getTransactionCount = function(address, number, callback) { - this.blockchain.getNonce(address, number, function(err, nonce) { - if (nonce) { - nonce = to.hex(nonce); - } - callback(err, nonce); - }); -} - -StateManager.prototype.getCode = function(address, number, callback) { - this.blockchain.getCode(address, number, function(err, code) { - if (code) { - code = to.hex(code); - } - callback(err, code); - }); -} - -StateManager.prototype.queueRawTransaction = function(rawTx, callback) { - var data = new Buffer(utils.stripHexPrefix(rawTx), 'hex'); - - var tx = new FakeTransaction(data); - var txParams = { - from: (tx.from && tx.from.length ) ? '0x'+tx.from.toString('hex') : null, - to: (tx.to && tx.to.length ) ? '0x'+tx.to.toString('hex') : null, - gas: (tx.gas && tx.gas.length ) ? '0x'+tx.gas.toString('hex') : null, - gasPrice: (tx.gasPrice && tx.gasPrice.length) ? '0x'+tx.gasPrice.toString('hex') : null, - value: (tx.value && tx.value.length ) ? '0x'+tx.value.toString('hex') : null, - data: (tx.data && tx.data.length ) ? '0x'+tx.data.toString('hex') : null, - } - - this.queueTransaction("eth_sendRawTransaction", txParams, callback); -}; - -StateManager.prototype.queueStorage = function(address, position, block, callback) { - this.transaction_queue.push({ - method: "eth_getStorageAt", - address: utils.addHexPrefix(address), - position: utils.addHexPrefix(position), - block: block, - callback: callback - }); - - // We know there's work, so get started. - this.processNextAction(); -} - -StateManager.prototype.queueTransaction = function(method, tx_params, callback) { - if (tx_params.from == null) { - callback(new Error("from not found; is required")); - return; - } - - tx_params.from = utils.addHexPrefix(tx_params.from); - - if (method == "eth_sendTransaction" && Object.keys(this.accounts).indexOf(tx_params.from) < 0) { - return callback(new Error("could not unlock signer account")); - } - - var rawTx = { - gasPrice: "0x1", - gasLimit: this.blockchain.gasLimit, - value: '0x0', - data: '' - }; - - if (tx_params.gas != null) { - rawTx.gasLimit = utils.addHexPrefix(tx_params.gas); - } - - if (tx_params.gasPrice != null) { - rawTx.gasPrice = utils.addHexPrefix(tx_params.gasPrice); - } - - if (tx_params.to != null) { - rawTx.to = utils.addHexPrefix(tx_params.to); - } - - if (tx_params.value != null) { - rawTx.value = utils.addHexPrefix(tx_params.value); - } - - if (tx_params.data != null) { - rawTx.data = utils.addHexPrefix(tx_params.data); - } - - if (tx_params.nonce != null) { - rawTx.nonce = utils.addHexPrefix(tx_params.nonce); - } - - // Error checks - if (rawTx.to && typeof rawTx.to != "string") { - return callback(new Error("Invalid to address")); - } - - // Get the nonce for this address, taking account any transactions already queued. - var self = this; - var address = utils.toBuffer(tx_params.from); - this.blockchain.getQueuedNonce(address, function(err, nonce) { - // If the user specified a nonce, use that instead. - if (rawTx.nonce == null) { - rawTx.nonce = to.hex(nonce); - } - - // Edit: Why is this here? - if (rawTx.to == '0x0') { - delete rawTx.to - } - - var tx = new FakeTransaction(rawTx); - tx.from = address; - - self.transaction_queue.push({ - method: method, - from: tx_params.from, - tx: tx, - callback: callback - }); - - // We know there's work, so get started. - self.processNextAction(); - }); -}; - -StateManager.prototype.processNextAction = function(override) { - var self = this; - - if (override != true) { - if (this.transaction_processing == true || this.transaction_queue.length == 0) { - return; - } - } - - var queued = this.transaction_queue.shift(); - - this.transaction_processing = true; - - var intermediary = function(err, result) { - queued.callback(err, result); - - if (self.transaction_queue.length > 0) { - self.processNextAction(true); - } else { - self.transaction_processing = false; - } - }; - - if (queued.method == "eth_getStorageAt") { - this.blockchain.getStorage(queued.address, queued.position, queued.block, function(err, result) { - if (err) return intermediary(err); - - if (result) { - result = utils.rlp.decode(result); - } - - result = to.hex(result || 0); - intermediary(null, result); - }); - } else if (queued.method == "eth_sendTransaction" || queued.method == "eth_sendRawTransaction") { - this.processTransaction(queued.from, queued.tx, intermediary); - } -}; - -StateManager.prototype.sign = function(address, dataToSign) { - var secretKey = this.accounts[to.hex(address)].secretKey; - var sgn = utils.ecsign(new Buffer(dataToSign.replace('0x',''), 'hex'), new Buffer(secretKey)); - var r = utils.fromSigned(sgn.r); - var s = utils.fromSigned(sgn.s); - var v = utils.bufferToInt(sgn.v) - 27; - r = utils.toUnsigned(r).toString('hex'); - s = utils.toUnsigned(s).toString('hex'); - v = utils.stripHexPrefix(utils.intToHex(v)); - return utils.addHexPrefix(r.concat(s, v)); -}; - -StateManager.prototype.processTransaction = function(from, tx, callback) { - var self = this; - - this.blockchain.queueTransaction(tx); - - this.blockchain.processNextBlock(function(err, results) { - if (err) return callback(err); - - var tx_hash = to.hex(tx.hash()); - - var result = results.results[0]; - - if (result.vm.exception != 1) { - callback(new Error("VM Exception while executing transaction: " + result.vm.exceptionError)); - return; - } - - var block = self.blockchain.latestBlock(); - - self.blockchain.getTransactionReceipt(tx_hash, function(err, receipt) { - receipt = receipt.toJSON(); - - self.logger.log(""); - self.logger.log(" Transaction: " + tx_hash); - - if (receipt.contractAddress != null) { - self.logger.log(" Contract created: " + receipt.contractAddress); - } - - self.logger.log(" Gas usage: " + receipt.gasUsed); - self.logger.log(" Block Number: " + receipt.blockNumber); - self.logger.log(" Block Time: " + new Date(to.number(block.header.timestamp) * 1000).toString()); - self.logger.log(""); - - callback(null, tx_hash); - }); - }); -}; - -StateManager.prototype.getTransactionReceipt = function(hash, callback) { - this.blockchain.getTransactionReceipt(hash, callback); -}; - -StateManager.prototype.getLogs = function(filter, callback) { - var self = this; - - var expectedAddress = filter.address; - var fromBlock = this.blockchain.getEffectiveBlockNumber(filter.fromBlock || "latest"); - var toBlock = this.blockchain.getEffectiveBlockNumber(filter.toBlock || "latest"); - - var logs = []; - var current = fromBlock; - - async.whilst(function() { - return current <= toBlock; - }, function(finished) { - self.blockchain.getBlockLogs(current, function(err, blockLogs) { - if (err) return finished(err); - - var filtered = blockLogs.filter(function(log) { - return expectedAddress == null || log.address == expectedAddress; - }); - - logs.push.apply(logs, filtered); - - current += 1; - finished(); - }); - }, function(err) { - if (err) return callback(err); - - logs = logs.map(function(log) { - return log.toJSON(); - }); - - callback(err, logs); - }); -}; - -// Note: Snapshots have 1-based ids. -StateManager.prototype.snapshot = function(callback) { - var self = this; - - this.snapshots.push({ - blockNumber: self.blockchain.getHeight() - }); - - this.logger.log("Saved snapshot #" + self.snapshots.length); - - return to.hex(self.snapshots.length); -}; - -StateManager.prototype.revert = function(snapshot_id, callback) { - var self = this; - - // Convert from hex. - snapshot_id = utils.bufferToInt(snapshot_id); - - this.logger.log("Reverting to snapshot #" + snapshot_id); - - if (snapshot_id > this.snapshots.length) { - return false; - } - - // Convert to zero based. - snapshot_id = snapshot_id - 1; - - while (self.snapshots.length > snapshot_id) { - var snapshot = this.snapshots.pop(); - - while (self.blockchain.getHeight() > snapshot.blockNumber) { - self.blockchain.popBlock(); - } - } - - return true; -}; - -StateManager.prototype.hasContractCode = function(address, callback) { - this.vm.stateManager.getContractCode( address, function( err, result ) { - if( err != null ) { - callback( err, false ); - } else { - callback( null, true ); - } - }); -} - -module.exports = StateManager; diff --git a/node_modules/ethereumjs-testrpc/lib/subproviders/delayedblockfilter.js b/node_modules/ethereumjs-testrpc/lib/subproviders/delayedblockfilter.js deleted file mode 100644 index 33d0cd5..0000000 --- a/node_modules/ethereumjs-testrpc/lib/subproviders/delayedblockfilter.js +++ /dev/null @@ -1,122 +0,0 @@ -// It's unforutnate we have to have this subprovider, but it's because -// we instamine, and web3 isn't written in a way that supports instamining -// (i.e., it sets up the filter after the transaction has been processed). -// This block filter will ensure that each block filter will always see -// the change from the last block to the current block. -// -// Note: An added benefit of this is that it shaves off a signifcant -// amount of time from tests that use web3 and block filters. - -var Subprovider = require('web3-provider-engine/subproviders/subprovider.js'); -var inherits = require("util").inherits; -var async = require("async"); -var to = require("../utils/to"); - -inherits(DelayedBlockFilter, Subprovider); - -module.exports = DelayedBlockFilter; - -function DelayedBlockFilter() { - this.watching = {}; -}; - -DelayedBlockFilter.prototype.handleRequest = function(payload, next, end) { - if (payload.method == "eth_newBlockFilter") return this.handleNewBlockFilter(payload, next, end); - if (payload.method == "eth_getFilterChanges") return this.handleGetFilterChanges(payload, next, end); - - next(); -}; - -DelayedBlockFilter.prototype.handleNewBlockFilter = function(payload, next, end) { - var self = this; - - // Let this filter process and add it to our watch list. - next(function(err, result, cb) { - if (err) return cb(); - self.watching[result] = true; - cb(); - }); -} - -DelayedBlockFilter.prototype.handleGetFilterChanges = function(payload, next, end) { - var self = this; - var filter_id = payload.params[0]; - - if (!this.watching[filter_id]) return next(); - - // Get the changes, and then alter the result. - next(function(err, result, cb) { - if (err) return cb(); - - var currentBlockHash; - var previousBlockHash; - - async.series([ - function(c) { - // If we have a result, use it. - if (result.length != 0) { - currentBlockHash = result[0]; - c(); - } else { - // Otherwise, get the current block number. - self.emitPayload({ - method: "eth_blockNumber" - }, function(err, res) { - if (err) return c(err); - blockNumber = to.number(res.result); - c(); - }); - } - }, - function(c) { - // If we got a block number above, meaning, we didn't get a block hash, - // skip this step. - if (blockNumber) return c(); - - // If not skipped, then we got a block hash, and we need to get a block number from it. - self.emitPayload({ - method: "eth_getBlockByHash", - params: [currentBlockHash, false] - }, function(err, res) { - if (err) return c(err); - blockNumber = to.number(res.result.number); - c(); - }) - }, - function(c) { - // If we're at block 0, return no changes. See final function below. - if (blockNumber == 0) { - previousBlockHash = undefined; - return c(); - } - - // If at this point, we do have a block number, so let's subtract one - // from it and get the block hash of the block before it. - blockNumber = blockNumber - 1; - self.emitPayload({ - method: "eth_getBlockByNumber", - params: [blockNumber, false] - }, function(err, res) { - if (err) return c(err); - previousBlockHash = res.result.hash; - c(); - }); - } - ], function(err) { - if (err) { - // Unfortunately the subprovider code doesn't let us return an error - // through the callback cb(). So we'll just ignore it.... (famous last words). - } - - // If we got the previous block, use it. Otherwise do nothing. - // Then stop watching because we only want on getFilterChanges to react this way. - if (previousBlockHash) { - result[0] = previousBlockHash; - } - - delete self.watching[filter_id]; - cb(); - }) - }); - -}; diff --git a/node_modules/ethereumjs-testrpc/lib/subproviders/geth_api_double.js b/node_modules/ethereumjs-testrpc/lib/subproviders/geth_api_double.js deleted file mode 100644 index 11b9ba5..0000000 --- a/node_modules/ethereumjs-testrpc/lib/subproviders/geth_api_double.js +++ /dev/null @@ -1,270 +0,0 @@ -var utils = require('ethereumjs-util'); -var fs = require('fs'); -var async = require('async'); -var inherits = require('util').inherits; -var StateManager = require('../statemanager.js'); -var to = require('../utils/to'); -var txhelper = require('../utils/txhelper'); -var pkg = require('../../package.json'); - -var Subprovider = require('web3-provider-engine/subproviders/subprovider.js'); - -inherits(GethApiDouble, Subprovider) - -function GethApiDouble(options) { - var self = this; - - this.state = options.state || new StateManager(options); - this.options = options; - this.initialized = false; - - this.state.initialize(this.options, function() { - self.initialized = true; - }); -} - -GethApiDouble.prototype.waitForInitialization = function(callback) { - var self = this; - if (this.initialized == false) { - setTimeout(function() { - self.waitForInitialization(callback); - }, 100); - } else { - callback(null, this.state); - } -} - -// Function to not pass methods through until initialization is finished -GethApiDouble.prototype.handleRequest = function(payload, next, end) { - var self = this; - - if (this.initialized == false) { - setTimeout(this.getDelayedHandler(payload, next, end), 100); - return; - } - - var method = this[payload.method]; - - if (method == null) { - return end(new Error("RPC method " + payload.method + " not supported.")); - } - - var params = payload.params; - var args = []; - Array.prototype.push.apply(args, params); - - if (this.requiresDefaultBlockParameter(payload.method) && args.length < method.length - 1) { - args.push("latest"); - } - - args.push(end); - method.apply(this, args); -}; - -GethApiDouble.prototype.getDelayedHandler = function(payload, next, end) { - var self = this; - return function() { - self.handleRequest(payload, next, end); - } -} - -GethApiDouble.prototype.requiresDefaultBlockParameter = function(method) { - // object for O(1) lookup. - var methods = { - "eth_getBalance": true, - "eth_getCode": true, - "eth_getTransactionCount": true, - "eth_getStorageAt": true, - "eth_call": true - }; - - return methods[method] === true; -}; - -// Handle individual requests. - -GethApiDouble.prototype.eth_accounts = function(callback) { - callback(null, Object.keys(this.state.accounts)); -}; - -GethApiDouble.prototype.eth_blockNumber = function(callback) { - callback(null, to.hex(this.state.blockNumber())); -}; - -GethApiDouble.prototype.eth_coinbase = function(callback) { - callback(null, this.state.coinbase); -}; - -GethApiDouble.prototype.eth_mining = function(callback) { - callback(null, true); -}; - -GethApiDouble.prototype.eth_hashrate = function(callback) { - callback(null, '0x0'); -}; - -GethApiDouble.prototype.eth_gasPrice = function(callback) { - callback(null, utils.addHexPrefix(this.state.gasPrice())); -}; - -GethApiDouble.prototype.eth_getBalance = function(address, block_number, callback) { - this.state.getBalance(address, block_number, callback); -}; - -GethApiDouble.prototype.eth_getCode = function(address, block_number, callback) { - this.state.getCode(address, block_number, callback); -}; - -GethApiDouble.prototype.eth_getBlockByNumber = function(block_number, include_transactions, callback) { - this.state.blockchain.getBlock(block_number, function(err, block) { - if (err) return callback(err); - - callback(null, { - number: to.hex(block.header.number), - hash: to.hex(block.hash()), - parentHash: to.hex(block.header.parentHash), - nonce: to.hex(block.header.nonce), - sha3Uncles: to.hex(block.header.uncleHash), - logsBloom: to.hex(block.header.bloom), - transactionsRoot: to.hex(block.header.transactionsTrie), - stateRoot: to.hex(block.header.stateRoot), - receiptRoot: to.hex(block.header.receiptTrie), - miner: to.hex(block.header.coinbase), - difficulty: to.hex(block.header.difficulty), - totalDifficulty: to.hex(block.header.difficulty), // TODO: Figure out what to do here. - extraData: to.hex(block.header.extraData), - size: to.hex(1000), // TODO: Do something better here - gasLimit: to.hex(block.header.gasLimit), - gasUsed: to.hex(block.header.gasUsed), - timestamp: to.hex(block.header.timestamp), - transactions: block.transactions.map(function(tx) {return txhelper.toJSON(tx, block)}), - uncles: []//block.uncleHeaders.map(function(uncleHash) {return to.hex(uncleHash)}) - }); - }); -}; - -GethApiDouble.prototype.eth_getBlockByHash = function(tx_hash, include_transactions, callback) { - this.eth_getBlockByNumber.apply(this, arguments); -}; - -GethApiDouble.prototype.eth_getTransactionReceipt = function(hash, callback) { - this.state.getTransactionReceipt(hash, function(err, receipt) { - if (err) return callback(err); - - var result = null; - - if (receipt){ - result = receipt.toJSON(); - } - callback(null, result); - }); -}; - -GethApiDouble.prototype.eth_getTransactionByHash = function(hash, callback) { - this.state.getTransactionReceipt(hash, function(err, receipt) { - if (err) return callback(err); - - var result = null; - - if (receipt) { - result = txhelper.toJSON(receipt.tx, receipt.block) - } - - callback(null, result); - }); -} - -GethApiDouble.prototype.eth_getTransactionCount = function(address, block_number, callback) { - this.state.getTransactionCount(address, block_number, callback); -} - -GethApiDouble.prototype.eth_sign = function(address, dataToSign, callback) { - callback(null, this.state.sign(address, dataToSign)); -}; - -GethApiDouble.prototype.eth_sendTransaction = function(tx_data, callback) { - this.state.queueTransaction("eth_sendTransaction", tx_data, callback); -}; - -GethApiDouble.prototype.eth_sendRawTransaction = function(rawTx, callback) { - this.state.queueRawTransaction(rawTx, callback); -}; - -GethApiDouble.prototype.eth_getStorageAt = function(address, position, block_number, callback) { - this.state.queueStorage(address, position, block_number, callback); -} - -GethApiDouble.prototype.eth_newBlockFilter = function(callback) { - var filter_id = utils.addHexPrefix(utils.intToHex(this.state.latest_filter_id)); - this.state.latest_filter_id += 1; - callback(null, filter_id); -}; - -GethApiDouble.prototype.eth_getFilterChanges = function(filter_id, callback) { - var blockHash = this.state.latestBlock().hash().toString("hex"); - // Mine a block after each request to getFilterChanges so block filters work. - this.state.mine(); - callback(null, [blockHash]); -}; - -GethApiDouble.prototype.eth_getLogs = function(filter, callback) { - this.state.getLogs(filter, callback); -}; - -GethApiDouble.prototype.eth_uninstallFilter = function(filter_id, callback) { - callback(null, true); -}; - -GethApiDouble.prototype.eth_getCompilers = function(callback) { - callback(null, ["solidity"]); -} - -GethApiDouble.prototype.eth_syncing = function(callback) { - callback(null, false); -}; - -GethApiDouble.prototype.net_listening = function(callback) { - callback(null, true); -}; - -GethApiDouble.prototype.net_peerCount = function(callback) { - callback(null, 0); -}; - -GethApiDouble.prototype.web3_clientVersion = function(callback) { - callback(null, "EthereumJS TestRPC/v" + pkg.version + "/ethereum-js") -}; - -GethApiDouble.prototype.web3_sha3 = function(string, callback) { - callback(null, to.hex(utils.sha3(string))); -}; - -GethApiDouble.prototype.net_version = function(callback) { - // net_version returns a string containing a base 10 integer. - callback(null, this.state.net_version + ""); -}; - -/* Functions for testing purposes only. */ - -GethApiDouble.prototype.evm_snapshot = function(callback) { - callback(null, this.state.snapshot()); -}; - -GethApiDouble.prototype.evm_revert = function(snapshot_id, callback) { - callback(null, this.state.revert(snapshot_id)); -}; - -GethApiDouble.prototype.evm_increaseTime = function(seconds, callback) { - callback(null, this.state.blockchain.increaseTime(seconds)); -}; - -GethApiDouble.prototype.evm_mine = function(callback) { - this.state.blockchain.processNextBlock(function(err) { - // Remove the VM result objects from the return value. - callback(err); - }); -}; - - - -module.exports = GethApiDouble; diff --git a/node_modules/ethereumjs-testrpc/lib/subproviders/gethdefaults.js b/node_modules/ethereumjs-testrpc/lib/subproviders/gethdefaults.js deleted file mode 100644 index 09e5756..0000000 --- a/node_modules/ethereumjs-testrpc/lib/subproviders/gethdefaults.js +++ /dev/null @@ -1,36 +0,0 @@ -var Subprovider = require('web3-provider-engine/subproviders/subprovider.js'); -var inherits = require("util").inherits; - -inherits(GethDefaults, Subprovider); - -module.exports = GethDefaults; - -function GethDefaults() {}; - -// Massage eth_estimateGas requests, setting default data (e.g., from) if -// not specified. This is here specifically to make the testrpc -// react like Geth. -GethDefaults.prototype.handleRequest = function(payload, next, end) { - var self = this; - - if (payload.method != "eth_estimateGas" && payload.method != "eth_call") { - return next(); - } - - var params = payload.params[0]; - - if (params.from == null) { - this.emitPayload({ - method: "eth_coinbase" - }, function(err, result) { - if (err) return end(err); - - var coinbase = result.result; - - params.from = coinbase; - next(); - }); - } else { - next(); - } -}; diff --git a/node_modules/ethereumjs-testrpc/lib/subproviders/reactiveblocktracker.js b/node_modules/ethereumjs-testrpc/lib/subproviders/reactiveblocktracker.js deleted file mode 100644 index 782f1c6..0000000 --- a/node_modules/ethereumjs-testrpc/lib/subproviders/reactiveblocktracker.js +++ /dev/null @@ -1,47 +0,0 @@ -var Subprovider = require('web3-provider-engine/subproviders/subprovider.js'); -var inherits = require("util").inherits; - -inherits(ReactiveBlockTracker, Subprovider); - -module.exports = ReactiveBlockTracker; - -function ReactiveBlockTracker() { - this.methods = { - "eth_call": "before", - "eth_getStorageAt": "before", - "eth_getLogs": "before" - }; -}; - -// Fetch the block before certain requests to make sure we're completely updated -// before those methods are processed. Also, fetch the block after certain requests -// to speed things up. -ReactiveBlockTracker.prototype.handleRequest = function(payload, next, end) { - var self = this; - - var when = this.methods[payload.method]; - - if (when == null) { - return next(); - } - - function fetchBlock(cb) { - self.engine._fetchBlock("latest", function(err, block) { - if (err) return end(err); - if (!self.engine.currentBlock || 0 !== self.engine.currentBlock.hash.compare(block.hash)) { - self.engine._setCurrentBlock(block); - } - cb(); - }); - } - - if (when == "before") { - fetchBlock(function() { - next(); - }); - } else { - next(function(error, result, cb) { - fetchBlock(cb); - }); - } -}; diff --git a/node_modules/ethereumjs-testrpc/lib/subproviders/requestfunnel.js b/node_modules/ethereumjs-testrpc/lib/subproviders/requestfunnel.js deleted file mode 100644 index 3022a8a..0000000 --- a/node_modules/ethereumjs-testrpc/lib/subproviders/requestfunnel.js +++ /dev/null @@ -1,60 +0,0 @@ -var Subprovider = require('web3-provider-engine/subproviders/subprovider.js'); -var inherits = require("util").inherits; - -inherits(RequestFunnel, Subprovider); - -module.exports = RequestFunnel; - -// See if any payloads for the specified methods are marked as external. -// If they are external, and match the method list, process them one at -// a time. -function RequestFunnel() { - // We use an object here for O(1) lookups (speed). - this.methods = { - "eth_call": true, - "eth_getStorageAt": true, - "eth_sendTransaction": true, - "eth_sendRawTransaction": true, - - // Ensure block filter and filter changes are process one at a time - // as well so filter requests that come in after a transaction get - // processed once that transaction has finished processing. - "eth_newBlockFilter": true, - "eth_getFilterChanges": true, - "eth_getFilterLogs": true - }; - this.queue = []; - this.isWorking = false; -}; - -RequestFunnel.prototype.handleRequest = function(payload, next, end) { - if (payload.external != true || this.methods[payload.method] != true) { - return next(); - } - - this.queue.push([payload, next]); - - if (this.isWorking == false) { - this.processNext(); - } -}; - -RequestFunnel.prototype.processNext = function() { - var self = this; - - if (this.queue.length == 0) { - this.isWorking = false; - return; - } - - this.isWorking = true; - - var item = this.queue.shift(); - var payload = item[0]; - var next = item[1]; - - next(function(error, request, cb) { - cb(); - self.processNext(); - }); -}; diff --git a/node_modules/ethereumjs-testrpc/lib/utils/forkedblockchain.js b/node_modules/ethereumjs-testrpc/lib/utils/forkedblockchain.js deleted file mode 100644 index 6152c41..0000000 --- a/node_modules/ethereumjs-testrpc/lib/utils/forkedblockchain.js +++ /dev/null @@ -1,500 +0,0 @@ -var BlockchainDouble = require("../blockchain_double.js"); -var VM = require("ethereumjs-vm"); -var Account = require("ethereumjs-account"); -var Block = require("ethereumjs-block"); -var Log = require("./log.js"); -var Receipt = require("./receipt.js"); -var utils = require("ethereumjs-util"); -var ForkedStorageTrie = require("./forkedstoragetrie.js"); -var FakeTransaction = require('ethereumjs-tx/fake.js'); -var Web3 = require("web3"); -var to = require("./to.js"); -var async = require("async"); -var txhelper = require("./txhelper.js") - -var inherits = require("util").inherits; - -inherits(ForkedBlockchain, BlockchainDouble); - -function ForkedBlockchain(options) { - var self = this; - - options = options || {}; - - if (options.fork == null) { - throw new Error("ForkedBlockchain must be passed a fork parameter."); - } - - this.fork = options.fork; - this.fork_block_number = options.fork_block_number; - this.fork_version = null; - - if (typeof this.fork == "string") { - if (this.fork.indexOf("@") >= 0) { - var split = this.fork.split("@"); - this.fork = split[0]; - this.fork_block_number = parseInt(split[1]); - } - - this.fork = new Web3.providers.HttpProvider(this.fork); - } - - this.time = options.time; - this.storageTrieCache = {}; - - options.trie = new ForkedStorageTrie(null, null, { - fork: this.fork, - fork_block_number: this.fork_block_number, - blockchain: this - }); - - BlockchainDouble.call(this, options); - - // Unfortunately this requires a bit of monkey patching, but it gets the job done. - //this.vm.stateManager._getStorageTrie = this.lookupStorageTrie.bind(this); - this.vm.stateManager._lookupStorageTrie = this.lookupStorageTrie.bind(this); - this.vm.stateManager.cache._lookupAccount = this.getAccount.bind(this); - this.vm.stateManager.getContractCode = this.getCode.bind(this); - this.vm.stateManager.putContractCode = this.putCode.bind(this); - - this.web3 = new Web3(this.fork); -}; - -ForkedBlockchain.prototype.initialize = function(accounts, callback) { - var self = this; - - var blockNumber = this.fork_block_number || "latest"; - - this.web3.version.getNetwork(function(err, version) { - if (err) return callback(err); - - self.fork_version = version; - - self.web3.eth.getBlock(blockNumber, function(err, json) { - if (err) return callback(err); - - var block = self.createBlock(); - block.header.parentHash = utils.toBuffer(json.hash); - - // If no start time was passed, set the time to where we forked from. - // We only want to do this if a block was explicitly passed. If a block - // number wasn't passed, then we're using the last block and the current time. - if (!self.time && self.fork_block_number) { - self.time = new Date(to.number(json.timestamp) * 1000); - self.setTime(self.time); - } - - // Update the relevant block numbers - self.fork_block_number = to.hex(json.number); - self.stateTrie.fork_block_number = to.hex(json.number); - - BlockchainDouble.prototype.initialize.call(self, accounts, block, callback); - }); - }); -}; - -ForkedBlockchain.prototype.createForkedStorageTrie = function(address) { - address = to.hex(address); - - var trie = new ForkedStorageTrie(null, null, { - address: address, - stateTrie: this.stateTrie, - blockchain: this, - fork: this.fork, - fork_block_number: this.fork_block_number - }); - - this.storageTrieCache[address] = trie; - - return trie; -}; - -ForkedBlockchain.prototype.lookupStorageTrie = function(address, callback) { - var self = this - - address = to.hex(address); - - if (this.storageTrieCache[address] != null) { - return callback(null, this.storageTrieCache[address]); - } - - callback(null, this.createForkedStorageTrie(address)); -}; - -ForkedBlockchain.prototype.getBlock = function(number, callback) { - var self = this; - - function isBlockHash(value) { - return typeof value == "string" && value.indexOf("0x") == 0 && value.length > 42; - } - - function isFallbackBlockHash(value) { - return isBlockHash(value) && self.blockHashes[value] == null; - } - - function isFallbackBlock(value) { - value = self.getEffectiveBlockNumber(value); - return value <= to.number(self.fork_block_number); - } - - function getFallbackBlock(number_or_hash, cb) { - self.web3.eth.getBlock(number_or_hash, function(err, json) { - if (err) return cb(err); - - if (json == null) return cb(); - - var block = new Block(); - - block.header.parentHash = utils.toBuffer(json.parentHash); - block.header.uncleHash = utils.toBuffer(json.sha3Uncles); - block.header.coinbase = utils.toBuffer(json.miner); - block.header.stateRoot = utils.toBuffer(json.stateRoot); // Should we include the following three? - block.header.transactionTrie = utils.toBuffer(json.transactionsRoot); - block.header.receiptTrie = utils.toBuffer(json.receiptRoot); - block.header.bloom = utils.toBuffer(json.logsBloom); - block.header.difficulty = utils.toBuffer("0x" + json.totalDifficulty.toString(16)); // BigNumber - block.header.number = utils.toBuffer(json.number); - block.header.gasLimit = utils.toBuffer(json.gasLimit); - block.header.gasUsed = utils.toBuffer(json.gasUsed); - block.header.timestamp = utils.toBuffer(json.timestamp); - block.header.extraData = utils.toBuffer(json.extraData); - - (json.transactions || []).forEach(function(tx_json, index) { - block.transactions.push(txhelper.fromJSON(tx_json)); - }); - - // Fake block. Let's do the worst. - // TODO: Attempt to fill out all block data so as to produce the same hash! (can we?) - block.hash = function() { - return utils.toBuffer(json.hash); - } - - cb(null, block); - }); - } - - if (isFallbackBlockHash(number) || isFallbackBlock(number)) { - return getFallbackBlock(number, callback); - } else { - if (!isBlockHash(number)) { - number = this.getRelativeBlockNumber(number); - } - - return BlockchainDouble.prototype.getBlock.call(this, number, callback); - } -}; - -ForkedBlockchain.prototype.getStorage = function(address, key, number, callback) { - this.lookupStorageTrie(address, function(err, trie) { - if (err) return callback(err); - trie.get(key, callback); - }); -}; - -ForkedBlockchain.prototype.getCode = function(address, number, callback) { - var self = this; - - if (typeof number == "function") { - callback = number; - number = this.getEffectiveBlockNumber("latest"); - } - - if (!number) { - number = this.getEffectiveBlockNumber("latest"); - } - - number = this.getEffectiveBlockNumber(number); - - this.stateTrie.keyExists(address, function(err, exists) { - if (exists && number > to.number(self.fork_block_number)) { - BlockchainDouble.prototype.getCode.call(self, address, number, callback); - } else { - - if (number > to.number(self.fork_block_number)) { - number = "latest"; - } - - self.fetchCodeFromFallback(address, number, function(err, code) { - if (code) { - code = utils.toBuffer(code); - } - callback(err, code); - }); - } - }); -}; - -ForkedBlockchain.prototype.putCode = function(address, value, callback) { - // This is a bit of a hack. We need to bypass the vm's - // _lookupAccount call that vm.stateManager.putContractCode() uses. - // This means we have to do somethings ourself. The last call - // to self.stateTrie.put() at the bottom is important because - // we can't just be satisfied putting it in the cache. - - var self = this; - address = utils.toBuffer(address); - this.stateTrie.get(address, function(err, data) { - if (err) return callback(err); - - var account = new Account(data); - account.setCode(self.stateTrie, value, function(err, result) { - if (err) return callback(err); - - self.stateTrie.put(address, account.serialize(), function(err) { - if (err) return callback(err); - - // Ensure the cache updates as well. - self.vm.stateManager._putAccount(address, account, callback); - }); - }); - }) -}; - -ForkedBlockchain.prototype.getAccount = function(address, number, callback) { - var self = this; - - if (typeof number == "function") { - callback = number; - number = "latest"; - } - - // If the account doesn't exist in our state trie, get it off the wire. - this.stateTrie.keyExists(address, function(err, exists) { - if (err) return callback(err); - - if (exists && self.getEffectiveBlockNumber(number) > to.number(self.fork_block_number)) { - BlockchainDouble.prototype.getAccount.call(self, address, number, function(err, acc) { - if (err) return callback(err); - callback(null, acc); - }); - } else { - self.fetchAccountFromFallback(address, number, callback); - } - }); -}; - -ForkedBlockchain.prototype.getTransaction = function(hash, callback) { - var self = this; - BlockchainDouble.prototype.getTransaction.call(this, hash, function(err, tx) { - if (err) return callback(err); - if (tx != null) return callback(null, tx); - - self.web3.eth.getTransaction(hash, function(err, result) { - if (err) return callback(err); - - if (result) { - result = txhelper.fromJSON(result); - } - - callback(null, result); - }); - }); -}; - -ForkedBlockchain.prototype.getTransactionReceipt = function(hash, callback) { - var self = this; - BlockchainDouble.prototype.getTransactionReceipt.call(this, hash, function(err, receipt) { - if (err) return callback(err); - if (receipt) return callback(null, receipt); - - self.web3.eth.getTransactionReceipt(hash, function(err, receipt_json) { - if (err) return callback(err); - if (!receipt_json) return callback(); - - async.parallel({ - tx: self.getTransaction.bind(self, hash), - block: self.getBlock.bind(self, receipt_json.blockNumber) - }, function(err, result) { - if (err) return callback(err); - - var logs = receipt_json.logs.map(function(log) { - return new Log(log); - }); - - var receipt = new Receipt(result.tx, result.block, logs, receipt_json.cumulativeGasUsed, receipt_json.contractAddress); - - callback(null, receipt); - }); - }); - }); -}; - -ForkedBlockchain.prototype.fetchAccountFromFallback = function(address, block_number, callback) { - var self = this; - address = to.hex(address); - - async.parallel({ - code: this.fetchCodeFromFallback.bind(this, address, block_number), - balance: this.fetchBalanceFromFallback.bind(this, address, block_number), - nonce: this.fetchNonceFromFallback.bind(this, address, block_number) - }, function(err, results) { - if (err) return callback(err); - - var code = results.code; - var balance = results.balance; - var nonce = results.nonce; - - var account = new Account({ - nonce: nonce, - balance: balance - }); - - account.exists = code != "0x0" || balance != "0x0" || nonce != "0x0"; - - // This puts the code on the trie, keyed by the hash of the code. - // It does not actually link an account to code in the trie. - account.setCode(self.stateTrie, utils.toBuffer(code), function(err) { - if (err) return callback(err); - callback(null, account); - }); - }); -}; - -ForkedBlockchain.prototype.fetchCodeFromFallback = function(address, block_number, callback) { - var self = this; - address = to.hex(address); - - // Allow an optional block_number - if (typeof block_number == "function") { - callback = block_number; - block_number = this.fork_block_number; - } - - block_number = this.getSafeFallbackBlockNumber(block_number); - - this.web3.eth.getCode(address, block_number, function(err, code) { - if (err) return callback(err); - - code = "0x" + utils.toBuffer(code).toString("hex"); - callback(null, code); - }); -} - -ForkedBlockchain.prototype.fetchBalanceFromFallback = function(address, block_number, callback) { - var self = this; - address = to.hex(address); - - // Allow an optional block_number - if (typeof block_number == "function") { - callback = block_number; - block_number = this.fork_block_number; - } - - block_number = this.getSafeFallbackBlockNumber(block_number); - - this.web3.eth.getBalance(address, block_number, function(err, balance) { - if (err) return callback(err); - - balance = "0x" + balance.toString(16); // BigNumber - callback(null, balance); - }); -} - -ForkedBlockchain.prototype.fetchNonceFromFallback = function(address, block_number, callback) { - var self = this; - address = to.hex(address); - - // Allow an optional block_number - if (typeof block_number == "function") { - callback = block_number; - block_number = this.fork_block_number; - } - - block_number = this.getSafeFallbackBlockNumber(block_number); - - this.web3.eth.getTransactionCount(address, block_number, function(err, nonce) { - if (err) return callback(err); - - nonce = "0x" + self.web3.toBigNumber(nonce).toString(16); - callback(null, nonce); - }); -} - -ForkedBlockchain.prototype.getHeight = function() { - return to.number(this.fork_block_number) + this.blocks.length; -}; - -ForkedBlockchain.prototype.getRelativeBlockNumber = function(number) { - number = this.getEffectiveBlockNumber(number); - return number - to.number(this.fork_block_number) - 1; -}; - -ForkedBlockchain.prototype.getSafeFallbackBlockNumber = function(block_number) { - var fork_block_number = to.number(this.fork_block_number); - - if (block_number == null) return fork_block_number; - - var number = this.getEffectiveBlockNumber(block_number); - - if (number > fork_block_number) { - number = fork_block_number - } - - return number; -}; - -ForkedBlockchain.prototype.getBlockLogs = function(number, callback) { - var self = this; - - number = this.getEffectiveBlockNumber(number); - var relative = this.getRelativeBlockNumber(number); - - if (relative < 0) { - this.getBlock(number, function(err, block) { - if (err) return callback(err); - - self.web3.currentProvider.sendAsync({ - jsonrpc: "2.0", - method: "eth_getLogs", - params: [{ - fromBlock: to.hex(number), - toBlock: to.hex(number) - }], - id: new Date().getTime() - }, function(err, res) { - if (err) return callback(err); - - var logs = res.result.map(function(log) { - // To make this result masquerade as the right information. - log.block = block; - return new Log(log); - }); - - callback(null, logs); - }); - }); - } else { - BlockchainDouble.prototype.getBlockLogs.call(this, relative, callback); - } -}; - -ForkedBlockchain.prototype._checkpointTrie = function() { - var self = this; - - BlockchainDouble.prototype._checkpointTrie.call(this); - - Object.keys(this.storageTrieCache).forEach(function(address) { - var trie = self.storageTrieCache[address]; - trie.customCheckpoint(); - }); -}; - -ForkedBlockchain.prototype._revertTrie = function() { - var self = this; - - BlockchainDouble.prototype._revertTrie.call(this); - - Object.keys(this.storageTrieCache).forEach(function(address) { - var trie = self.storageTrieCache[address]; - - // We're trying to revert to a point before this trie was created. - // Let's just remove the trie. - if (trie.checkpoints.length == 0) { - delete self.storageTrieCache[address]; - } else { - trie.customRevert(); - } - }); -}; - -module.exports = ForkedBlockchain; diff --git a/node_modules/ethereumjs-testrpc/lib/utils/forkedstoragetrie.js b/node_modules/ethereumjs-testrpc/lib/utils/forkedstoragetrie.js deleted file mode 100644 index 28745e6..0000000 --- a/node_modules/ethereumjs-testrpc/lib/utils/forkedstoragetrie.js +++ /dev/null @@ -1,93 +0,0 @@ -var MerklePatriciaTree = require("merkle-patricia-tree"); -var Account = require("ethereumjs-account"); -var utils = require('ethereumjs-util') -var inherits = require("util").inherits; -var Web3 = require("web3"); -var to = require("./to.js"); -var async = require("async"); - -inherits(ForkedStorageTrie, MerklePatriciaTree) - -function ForkedStorageTrie(db, root, options) { - MerklePatriciaTree.call(this, db, root); - - this.address = options.address; - - this.fork = options.fork; - this.fork_block_number = options.fork_block_number; - - this.blockchain = options.blockchain; - - this.web3 = new Web3(); - this.web3.setProvider(this.fork); - - this.checkpoints = []; -} - -ForkedStorageTrie.prototype.keyExists = function(key, callback) { - key = utils.toBuffer(key); - - this._findPath(key, function (err, node, remainder, stack) { - var exists = false; - if (node && remainder.length === 0) { - exists = true; - } - callback(err, exists) - }) -}; - -// Note: This overrides a standard method whereas the other methods do not. -ForkedStorageTrie.prototype.get = function(key, block_number, callback) { - var self = this; - - // Allow an optional block_number - if (typeof block_number == "function") { - callback = block_number; - block_number = self.fork_block_number; - } - - key = utils.toBuffer(key); - - // If the account doesn't exist in our state trie, get it off the wire. - this.keyExists(key, function(err, exists) { - if (err) return callback(err); - - if (exists) { - MerklePatriciaTree.prototype.get.call(self, key, function(err, r) { - callback(err, r); - }); - } else { - // If this is the main trie, get the whole account. - if (self.address == null) { - self.blockchain.fetchAccountFromFallback(key, block_number, function(err, account) { - if (err) return callback(err); - - callback(null, account.serialize()); - }); - } else { - self.web3.eth.getStorageAt(to.hex(self.address), to.hex(key), block_number, function(err, value) { - if (err) return callback(err); - - value = utils.toBuffer(value); - value = utils.rlp.encode(value); - - callback(null, value); - }); - } - } - }); -}; - -// I don't want checkpoints to be removed by commits. -// Note: For some reason, naming this function checkpoint() -// -- overriding the default function -- prevents it from -// being called. -ForkedStorageTrie.prototype.customCheckpoint = function() { - this.checkpoints.push(this.root); -}; - -ForkedStorageTrie.prototype.customRevert = function() { - this.root = this.checkpoints.pop(); -}; - -module.exports = ForkedStorageTrie; diff --git a/node_modules/ethereumjs-testrpc/lib/utils/log.js b/node_modules/ethereumjs-testrpc/lib/utils/log.js deleted file mode 100644 index a563005..0000000 --- a/node_modules/ethereumjs-testrpc/lib/utils/log.js +++ /dev/null @@ -1,35 +0,0 @@ -var to = require("./to.js"); - -// Expects: -// -// logIndex: ... -// transactionIndex: ... -// transactionHash: ... -// block: ... -// address: ... -// data: ... -// topics: ... -// type: ... - -function Log(data) { - var self = this; - Object.keys(data).forEach(function(key) { - self[key] = data[key]; - }); -} - -Log.prototype.toJSON = function() { - return { - logIndex: this.logIndex, - transactionIndex: to.hex(this.transactionIndex), - transactionHash: to.hex(this.transactionHash), - blockHash: to.hex(this.block.hash()), - blockNumber: to.hex(this.block.header.number), - address: to.hex(this.address), - data: to.hex(this.data), - topics: this.topics, - type: "mined" - }; -}; - -module.exports = Log; diff --git a/node_modules/ethereumjs-testrpc/lib/utils/random.js b/node_modules/ethereumjs-testrpc/lib/utils/random.js deleted file mode 100644 index 0098bb5..0000000 --- a/node_modules/ethereumjs-testrpc/lib/utils/random.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - // Mimics crypto.random bytes, but takes in a random number generator - // as its second parameter. rng is expected to be a function that takes - // no parameters and returns a result like Math.random(). - // This is important because it allows for a seeded random number generator. - // Since this is a mock RPC library, the rng doesn't need to be cryptographically secure. - randomBytes: function(length, rng) { - var buf = []; - - for (var i = 0; i < length; i++) { - buf.push(rng()*255); - } - - return new Buffer(buf); - } -} diff --git a/node_modules/ethereumjs-testrpc/lib/utils/receipt.js b/node_modules/ethereumjs-testrpc/lib/utils/receipt.js deleted file mode 100644 index dddf6a4..0000000 --- a/node_modules/ethereumjs-testrpc/lib/utils/receipt.js +++ /dev/null @@ -1,36 +0,0 @@ -var to = require("./to"); - -function Receipt(tx, block, logs, gasUsed, contractAddress) { - this.tx = tx; - this.block = block; - this.logs = logs; - this.gasUsed = gasUsed; - this.contractAddress = contractAddress; - - this.transactionIndex = 0; - - for (var i = 0; i < block.transactions.length; i++) { - var current = block.transactions[i]; - if (current.hash() == tx.hash()) { - this.transactionIndex = index; - break; - } - } -} - -Receipt.prototype.toJSON = function() { - if (this.data != null) return data; - - return { - transactionHash: to.hex(this.tx.hash()), - transactionIndex: to.hex(this.transactionIndex), - blockHash: to.hex(this.block.hash()), - blockNumber: to.hex(this.block.header.number), - gasUsed: to.hex(this.gasUsed), - cumulativeGasUsed: to.hex(this.block.header.gasUsed), - contractAddress: this.contractAddress != null ? to.hex(this.contractAddress) : null, - logs: this.logs.map(function(log) {return log.toJSON()}) - } -}; - -module.exports = Receipt; diff --git a/node_modules/ethereumjs-testrpc/lib/utils/to.js b/node_modules/ethereumjs-testrpc/lib/utils/to.js deleted file mode 100644 index c666e0f..0000000 --- a/node_modules/ethereumjs-testrpc/lib/utils/to.js +++ /dev/null @@ -1,34 +0,0 @@ -var utils = require("ethereumjs-util"); - -module.exports = { - // Note: Do not use to.hex() when you really mean utils.addHexPrefix(). - hex: function(val) { - if (typeof val == "string") { - if (val.indexOf("0x") == 0) { - return val; - } else { - val = new utils.BN(val); - } - } - - if (typeof val == "number") { - val = utils.intToHex(val); - } - - // Support Buffer, BigInteger and BN library - // Hint: BN is used in ethereumjs - if (typeof val == "object") { - val = val.toString("hex"); - - if (val == "") { - val = "0"; - } - } - - return utils.addHexPrefix(val); - }, - - number: function(val) { - return utils.bufferToInt(utils.toBuffer(val)); - } -}; diff --git a/node_modules/ethereumjs-testrpc/lib/utils/txhelper.js b/node_modules/ethereumjs-testrpc/lib/utils/txhelper.js deleted file mode 100644 index a75915a..0000000 --- a/node_modules/ethereumjs-testrpc/lib/utils/txhelper.js +++ /dev/null @@ -1,41 +0,0 @@ -var to = require("./to"); -var FakeTransaction = require('ethereumjs-tx/fake.js'); -var utils = require("ethereumjs-util"); - -module.exports = { - toJSON: function(tx, block) { - return { - hash: to.hex(tx.hash()), - nonce: to.hex(tx.nonce), - blockHash: to.hex(block.hash()), - blockNumber: to.hex(block.header.number), - transactionIndex: "0x0", - from: to.hex(tx.getSenderAddress()), - to: to.hex(tx.to), - value: to.hex(tx.value), // 520464 - gas: to.hex(tx.gasLimit), // 520464 - gasPrice: to.hex(tx.gasPrice), - input: to.hex(tx.data), - }; - }, - - fromJSON: function(json) { - var tx = new FakeTransaction({ - nonce: utils.toBuffer(json.nonce), - from: utils.toBuffer(json.from), - value: utils.toBuffer("0x" + json.value.toString(16)), - gasLimit: utils.toBuffer(json.gas), - gasPrice: utils.toBuffer("0x" + json.gasPrice.toString(16)), - data: utils.toBuffer(json.input) - }); - - // Remove all padding and make it easily comparible. - var to = utils.bufferToInt(utils.toBuffer(json.to)); - - if (json.to && to != 0) { - tx.to = utils.setLengthLeft(utils.toBuffer(json.to), 20); - } - - return tx; - } -}; diff --git a/node_modules/ethereumjs-testrpc/node_modules/async/CHANGELOG.md b/node_modules/ethereumjs-testrpc/node_modules/async/CHANGELOG.md deleted file mode 100644 index f15e081..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/async/CHANGELOG.md +++ /dev/null @@ -1,125 +0,0 @@ -# v1.5.2 -- Allow using `"consructor"` as an argument in `memoize` (#998) -- Give a better error messsage when `auto` dependency checking fails (#994) -- Various doc updates (#936, #956, #979, #1002) - -# v1.5.1 -- Fix issue with `pause` in `queue` with concurrency enabled (#946) -- `while` and `until` now pass the final result to callback (#963) -- `auto` will properly handle concurrency when there is no callback (#966) -- `auto` will now properly stop execution when an error occurs (#988, #993) -- Various doc fixes (#971, #980) - -# v1.5.0 - -- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) (#892) -- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. (#873) -- `auto` now accepts an optional `concurrency` argument to limit the number of running tasks (#637) -- Added `queue#workersList()`, to retrieve the list of currently running tasks. (#891) -- Various code simplifications (#896, #904) -- Various doc fixes :scroll: (#890, #894, #903, #905, #912) - -# v1.4.2 - -- Ensure coverage files don't get published on npm (#879) - -# v1.4.1 - -- Add in overlooked `detectLimit` method (#866) -- Removed unnecessary files from npm releases (#861) -- Removed usage of a reserved word to prevent :boom: in older environments (#870) - -# v1.4.0 - -- `asyncify` now supports promises (#840) -- Added `Limit` versions of `filter` and `reject` (#836) -- Add `Limit` versions of `detect`, `some` and `every` (#828, #829) -- `some`, `every` and `detect` now short circuit early (#828, #829) -- Improve detection of the global object (#804), enabling use in WebWorkers -- `whilst` now called with arguments from iterator (#823) -- `during` now gets called with arguments from iterator (#824) -- Code simplifications and optimizations aplenty ([diff](https://github.com/caolan/async/compare/v1.3.0...v1.4.0)) - - -# v1.3.0 - -New Features: -- Added `constant` -- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. (#671, #806) -- Added `during` and `doDuring`, which are like `whilst` with an async truth test. (#800) -- `retry` now accepts an `interval` parameter to specify a delay between retries. (#793) -- `async` should work better in Web Workers due to better `root` detection (#804) -- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` (#642) -- Various internal updates (#786, #801, #802, #803) -- Various doc fixes (#790, #794) - -Bug Fixes: -- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. (#740, #744, #783) - - -# v1.2.1 - -Bug Fix: - -- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782) - - -# v1.2.0 - -New Features: - -- Added `timesLimit` (#743) -- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. (#747, #772) - -Bug Fixes: - -- Fixed a regression in `each` and family with empty arrays that have additional properties. (#775, #777) - - -# v1.1.1 - -Bug Fix: - -- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782) - - -# v1.1.0 - -New Features: - -- `cargo` now supports all of the same methods and event callbacks as `queue`. -- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. (#769) -- Optimized `map`, `eachOf`, and `waterfall` families of functions -- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array (#667). -- The callback is now optional for the composed results of `compose` and `seq`. (#618) -- Reduced file size by 4kb, (minified version by 1kb) -- Added code coverage through `nyc` and `coveralls` (#768) - -Bug Fixes: - -- `forever` will no longer stack overflow with a synchronous iterator (#622) -- `eachLimit` and other limit functions will stop iterating once an error occurs (#754) -- Always pass `null` in callbacks when there is no error (#439) -- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue (#668) -- `each` and family will properly handle an empty array (#578) -- `eachSeries` and family will finish if the underlying array is modified during execution (#557) -- `queue` will throw if a non-function is passed to `q.push()` (#593) -- Doc fixes (#629, #766) - - -# v1.0.0 - -No known breaking changes, we are simply complying with semver from here on out. - -Changes: - -- Start using a changelog! -- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) (#168 #704 #321) -- Detect deadlocks in `auto` (#663) -- Better support for require.js (#527) -- Throw if queue created with concurrency `0` (#714) -- Fix unneeded iteration in `queue.resume()` (#758) -- Guard against timer mocking overriding `setImmediate` (#609 #611) -- Miscellaneous doc fixes (#542 #596 #615 #628 #631 #690 #729) -- Use single noop function internally (#546) -- Optimize internal `_each`, `_map` and `_keys` functions. diff --git a/node_modules/ethereumjs-testrpc/node_modules/async/LICENSE b/node_modules/ethereumjs-testrpc/node_modules/async/LICENSE deleted file mode 100644 index 8f29698..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/async/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010-2014 Caolan McMahon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/ethereumjs-testrpc/node_modules/async/README.md b/node_modules/ethereumjs-testrpc/node_modules/async/README.md deleted file mode 100644 index 316c405..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/async/README.md +++ /dev/null @@ -1,1877 +0,0 @@ -# Async.js - -[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async) -[![NPM version](http://img.shields.io/npm/v/async.svg)](https://www.npmjs.org/package/async) -[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master) -[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - - -Async is a utility module which provides straight-forward, powerful functions -for working with asynchronous JavaScript. Although originally designed for -use with [Node.js](http://nodejs.org) and installable via `npm install async`, -it can also be used directly in the browser. - -Async is also installable via: - -- [bower](http://bower.io/): `bower install async` -- [component](https://github.com/component/component): `component install - caolan/async` -- [jam](http://jamjs.org/): `jam install async` -- [spm](http://spmjs.io/): `spm install async` - -Async provides around 20 functions that include the usual 'functional' -suspects (`map`, `reduce`, `filter`, `each`…) as well as some common patterns -for asynchronous control flow (`parallel`, `series`, `waterfall`…). All these -functions assume you follow the Node.js convention of providing a single -callback as the last argument of your `async` function. - - -## Quick Examples - -```javascript -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); - -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); - -async.parallel([ - function(){ ... }, - function(){ ... } -], callback); - -async.series([ - function(){ ... }, - function(){ ... } -]); -``` - -There are many more functions available so take a look at the docs below for a -full list. This module aims to be comprehensive, so if you feel anything is -missing please create a GitHub issue for it. - -## Common Pitfalls [(StackOverflow)](http://stackoverflow.com/questions/tagged/async.js) -### Synchronous iteration functions - -If you get an error like `RangeError: Maximum call stack size exceeded.` or other stack overflow issues when using async, you are likely using a synchronous iterator. By *synchronous* we mean a function that calls its callback on the same tick in the javascript event loop, without doing any I/O or using any timers. Calling many callbacks iteratively will quickly overflow the stack. If you run into this issue, just defer your callback with `async.setImmediate` to start a new call stack on the next tick of the event loop. - -This can also arise by accident if you callback early in certain cases: - -```js -async.eachSeries(hugeArray, function iterator(item, callback) { - if (inCache(item)) { - callback(null, cache[item]); // if many items are cached, you'll overflow - } else { - doSomeIO(item, callback); - } -}, function done() { - //... -}); -``` - -Just change it to: - -```js -async.eachSeries(hugeArray, function iterator(item, callback) { - if (inCache(item)) { - async.setImmediate(function () { - callback(null, cache[item]); - }); - } else { - doSomeIO(item, callback); - //... -``` - -Async guards against synchronous functions in some, but not all, cases. If you are still running into stack overflows, you can defer as suggested above, or wrap functions with [`async.ensureAsync`](#ensureAsync) Functions that are asynchronous by their nature do not have this problem and don't need the extra callback deferral. - -If JavaScript's event loop is still a bit nebulous, check out [this article](http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/) or [this talk](http://2014.jsconf.eu/speakers/philip-roberts-what-the-heck-is-the-event-loop-anyway.html) for more detailed information about how it works. - - -### Multiple callbacks - -Make sure to always `return` when calling a callback early, otherwise you will cause multiple callbacks and unpredictable behavior in many cases. - -```js -async.waterfall([ - function (callback) { - getSomething(options, function (err, result) { - if (err) { - callback(new Error("failed getting something:" + err.message)); - // we should return here - } - // since we did not return, this callback still will be called and - // `processData` will be called twice - callback(null, result); - }); - }, - processData -], done) -``` - -It is always good practice to `return callback(err, result)` whenever a callback call is not the last statement of a function. - - -### Binding a context to an iterator - -This section is really about `bind`, not about `async`. If you are wondering how to -make `async` execute your iterators in a given context, or are confused as to why -a method of another library isn't working as an iterator, study this example: - -```js -// Here is a simple object with an (unnecessarily roundabout) squaring method -var AsyncSquaringLibrary = { - squareExponent: 2, - square: function(number, callback){ - var result = Math.pow(number, this.squareExponent); - setTimeout(function(){ - callback(null, result); - }, 200); - } -}; - -async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){ - // result is [NaN, NaN, NaN] - // This fails because the `this.squareExponent` expression in the square - // function is not evaluated in the context of AsyncSquaringLibrary, and is - // therefore undefined. -}); - -async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){ - // result is [1, 4, 9] - // With the help of bind we can attach a context to the iterator before - // passing it to async. Now the square function will be executed in its - // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent` - // will be as expected. -}); -``` - -## Download - -The source is available for download from -[GitHub](https://github.com/caolan/async/blob/master/lib/async.js). -Alternatively, you can install using Node Package Manager (`npm`): - - npm install async - -As well as using Bower: - - bower install async - -__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed - -## In the Browser - -So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. - -Usage: - -```html - - -``` - -## Documentation - -Some functions are also available in the following forms: -* `Series` - the same as `` but runs only a single async operation at a time -* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time - -### Collections - -* [`each`](#each), `eachSeries`, `eachLimit` -* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit` -* [`map`](#map), `mapSeries`, `mapLimit` -* [`filter`](#filter), `filterSeries`, `filterLimit` -* [`reject`](#reject), `rejectSeries`, `rejectLimit` -* [`reduce`](#reduce), [`reduceRight`](#reduceRight) -* [`detect`](#detect), `detectSeries`, `detectLimit` -* [`sortBy`](#sortBy) -* [`some`](#some), `someLimit` -* [`every`](#every), `everyLimit` -* [`concat`](#concat), `concatSeries` - -### Control Flow - -* [`series`](#seriestasks-callback) -* [`parallel`](#parallel), `parallelLimit` -* [`whilst`](#whilst), [`doWhilst`](#doWhilst) -* [`until`](#until), [`doUntil`](#doUntil) -* [`during`](#during), [`doDuring`](#doDuring) -* [`forever`](#forever) -* [`waterfall`](#waterfall) -* [`compose`](#compose) -* [`seq`](#seq) -* [`applyEach`](#applyEach), `applyEachSeries` -* [`queue`](#queue), [`priorityQueue`](#priorityQueue) -* [`cargo`](#cargo) -* [`auto`](#auto) -* [`retry`](#retry) -* [`iterator`](#iterator) -* [`times`](#times), `timesSeries`, `timesLimit` - -### Utils - -* [`apply`](#apply) -* [`nextTick`](#nextTick) -* [`memoize`](#memoize) -* [`unmemoize`](#unmemoize) -* [`ensureAsync`](#ensureAsync) -* [`constant`](#constant) -* [`asyncify`](#asyncify) -* [`wrapSync`](#wrapSync) -* [`log`](#log) -* [`dir`](#dir) -* [`noConflict`](#noConflict) - -## Collections - - - -### each(arr, iterator, [callback]) - -Applies the function `iterator` to each item in `arr`, in parallel. -The `iterator` is called with an item from the list, and a callback for when it -has finished. If the `iterator` passes an error to its `callback`, the main -`callback` (for the `each` function) is immediately called with the error. - -Note, that since this function applies `iterator` to each item in parallel, -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err)` which must be called once it has - completed. If no error has occurred, the `callback` should be run without - arguments or with an explicit `null` argument. The array index is not passed - to the iterator. If you need the index, use [`forEachOf`](#forEachOf). -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions - have finished, or an error occurs. - -__Examples__ - - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - -```js -// assuming openFiles is an array of file names - -async.each(openFiles, function(file, callback) { - - // Perform operation on file here. - console.log('Processing file ' + file); - - if( file.length > 32 ) { - console.log('This file name is too long'); - callback('File name too long'); - } else { - // Do work to process file here - console.log('File processed'); - callback(); - } -}, function(err){ - // if any of the file processing produced an error, err would equal that error - if( err ) { - // One of the iterations produced an error. - // All processing will now stop. - console.log('A file failed to process'); - } else { - console.log('All files have been processed successfully'); - } -}); -``` - -__Related__ - -* eachSeries(arr, iterator, [callback]) -* eachLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - - -### forEachOf(obj, iterator, [callback]) - -Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator. - -__Arguments__ - -* `obj` - An object or array to iterate over. -* `iterator(item, key, callback)` - A function to apply to each item in `obj`. -The `key` is the item's key, or index in the case of an array. The iterator is -passed a `callback(err)` which must be called once it has completed. If no -error has occurred, the callback should be run without arguments or with an -explicit `null` argument. -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs. - -__Example__ - -```js -var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; -var configs = {}; - -async.forEachOf(obj, function (value, key, callback) { - fs.readFile(__dirname + value, "utf8", function (err, data) { - if (err) return callback(err); - try { - configs[key] = JSON.parse(data); - } catch (e) { - return callback(e); - } - callback(); - }) -}, function (err) { - if (err) console.error(err.message); - // configs is now a map of JSON data - doSomethingWith(configs); -}) -``` - -__Related__ - -* forEachOfSeries(obj, iterator, [callback]) -* forEachOfLimit(obj, limit, iterator, [callback]) - ---------------------------------------- - - -### map(arr, iterator, [callback]) - -Produces a new array of values by mapping each value in `arr` through -the `iterator` function. The `iterator` is called with an item from `arr` and a -callback for when it has finished processing. Each of these callback takes 2 arguments: -an `error`, and the transformed item from `arr`. If `iterator` passes an error to its -callback, the main `callback` (for the `map` function) is immediately called with the error. - -Note, that since this function applies the `iterator` to each item in parallel, -there is no guarantee that the `iterator` functions will complete in order. -However, the results array will be in the same order as the original `arr`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, transformed)` which must be called once - it has completed with an error (which can be `null`) and a transformed item. -* `callback(err, results)` - *Optional* A callback which is called when all `iterator` - functions have finished, or an error occurs. Results is an array of the - transformed items from the `arr`. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - -__Related__ -* mapSeries(arr, iterator, [callback]) -* mapLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - -### filter(arr, iterator, [callback]) - -__Alias:__ `select` - -Returns a new array of all the values in `arr` which pass an async truth test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The `iterator` is passed a `callback(truthValue)`, which must be called with a - boolean argument once it has completed. -* `callback(results)` - *Optional* A callback which is called after all the `iterator` - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - -__Related__ - -* filterSeries(arr, iterator, [callback]) -* filterLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reject(arr, iterator, [callback]) - -The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. - -__Related__ - -* rejectSeries(arr, iterator, [callback]) -* rejectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reduce(arr, memo, iterator, [callback]) - -__Aliases:__ `inject`, `foldl` - -Reduces `arr` into a single value using an async `iterator` to return -each successive step. `memo` is the initial state of the reduction. -This function only operates in series. - -For performance reasons, it may make sense to split a call to this function into -a parallel map, and then use the normal `Array.prototype.reduce` on the results. -This function is for situations where each step in the reduction needs to be async; -if you can get the data before reducing it, then it's probably a good idea to do so. - -__Arguments__ - -* `arr` - An array to iterate over. -* `memo` - The initial state of the reduction. -* `iterator(memo, item, callback)` - A function applied to each item in the - array to produce the next step in the reduction. The `iterator` is passed a - `callback(err, reduction)` which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main `callback` is - immediately called with the error. -* `callback(err, result)` - *Optional* A callback which is called after all the `iterator` - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - - -### reduceRight(arr, memo, iterator, [callback]) - -__Alias:__ `foldr` - -Same as [`reduce`](#reduce), only operates on `arr` in reverse order. - - ---------------------------------------- - - -### detect(arr, iterator, [callback]) - -Returns the first value in `arr` that passes an async truth test. The -`iterator` is applied in parallel, meaning the first iterator to return `true` will -fire the detect `callback` with that result. That means the result might not be -the first item in the original `arr` (in terms of order) that passes the test. - -If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The iterator is passed a `callback(truthValue)` which must be called with a - boolean argument once it has completed. **Note: this callback does not take an error as its first argument.** -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the `iterator` functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value `undefined` if none passed. **Note: this callback does not take an error as its first argument.** - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - -__Related__ - -* detectSeries(arr, iterator, [callback]) -* detectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### sortBy(arr, iterator, [callback]) - -Sorts a list by the results of running each `arr` value through an async `iterator`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, sortValue)` which must be called once it - has completed with an error (which can be `null`) and a value to use as the sort - criteria. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is the items from - the original `arr` sorted by the values returned by the `iterator` calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - -__Sort Order__ - -By modifying the callback parameter the sorting order can be influenced: - -```js -//ascending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x); -}, function(err,result){ - //result callback -} ); - -//descending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x*-1); //<- x*-1 instead of x, turns the order around -}, function(err,result){ - //result callback -} ); -``` - ---------------------------------------- - - -### some(arr, iterator, [callback]) - -__Alias:__ `any` - -Returns `true` if at least one element in the `arr` satisfies an async test. -_The callback for each iterator call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. Once any iterator -call returns `true`, the main `callback` is immediately called. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)`` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - -__Related__ - -* someLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### every(arr, iterator, [callback]) - -__Alias:__ `all` - -Returns `true` if every element in `arr` satisfies an async test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `false`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - -__Related__ - -* everyLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### concat(arr, iterator, [callback]) - -Applies `iterator` to each item in `arr`, concatenating the results. Returns the -concatenated list. The `iterator`s are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of `arr` passed to the `iterator` function. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, results)` which must be called once it - has completed with an error (which can be `null`) and an array of results. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is an array containing - the concatenated results of the `iterator` function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - -__Related__ - -* concatSeries(arr, iterator, [callback]) - - -## Control Flow - - -### series(tasks, [callback]) - -Run the functions in the `tasks` array in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run, and `callback` is immediately called with the value of the error. -Otherwise, `callback` receives an array of results when `tasks` have completed. - -It is also possible to use an object instead of an array. Each property will be -run as a function, and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`series`](#series). - -**Note** that while many implementations preserve the order of object properties, the -[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) -explicitly states that - -> The mechanics and order of enumerating the properties is not specified. - -So if you rely on the order in which your series of functions are executed, and want -this to work on all platforms, consider using an array. - -__Arguments__ - -* `tasks` - An array or object containing functions to run, each function is passed - a `callback(err, result)` it must call on completion with an error `err` (which can - be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the `task` callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - - -### parallel(tasks, [callback]) - -Run the `tasks` array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main `callback` is immediately called with the value of the error. -Once the `tasks` have completed, the results are passed to the final `callback` as an -array. - -**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`parallel`](#parallel). - - -__Arguments__ - -* `tasks` - An array or object containing functions to run. Each function is passed - a `callback(err, result)` which it must call on completion with an error `err` - (which can be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed successfully. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - -__Related__ - -* parallelLimit(tasks, limit, [callback]) - ---------------------------------------- - - -### whilst(test, fn, callback) - -Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, -or an error occurs. - -__Arguments__ - -* `test()` - synchronous truth test to perform before each execution of `fn`. -* `fn(callback)` - A function which is called each time `test` passes. The function is - passed a `callback(err)`, which must be called once it has completed with an - optional `err` argument. -* `callback(err, [results])` - A callback which is called after the test - function has failed and repeated execution of `fn` has stopped. `callback` - will be passed an error and any arguments passed to the final `fn`'s callback. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(function () { - callback(null, count); - }, 1000); - }, - function (err, n) { - // 5 seconds have passed, n = 5 - } -); -``` - ---------------------------------------- - - -### doWhilst(fn, test, callback) - -The post-check version of [`whilst`](#whilst). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - - -### until(test, fn, callback) - -Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, -or an error occurs. `callback` will be passed an error and any arguments passed -to the final `fn`'s callback. - -The inverse of [`whilst`](#whilst). - ---------------------------------------- - - -### doUntil(fn, test, callback) - -Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - - -### during(test, fn, callback) - -Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error. - -__Example__ - -```js -var count = 0; - -async.during( - function (callback) { - return callback(null, count < 5); - }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - - -### doDuring(fn, test, callback) - -The post-check version of [`during`](#during). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function. - ---------------------------------------- - - -### forever(fn, [errback]) - -Calls the asynchronous function `fn` with a callback parameter that allows it to -call itself again, in series, indefinitely. - -If an error is passed to the callback then `errback` is called with the -error, and execution stops, otherwise it will never be called. - -```js -async.forever( - function(next) { - // next is suitable for passing to things that need a callback(err [, whatever]); - // it will result in this function being called again. - }, - function(err) { - // if next is called with a value in its first parameter, it will appear - // in here as 'err', and execution will stop. - } -); -``` - ---------------------------------------- - - -### waterfall(tasks, [callback]) - -Runs the `tasks` array of functions in series, each passing their results to the next in -the array. However, if any of the `tasks` pass an error to their own callback, the -next function is not executed, and the main `callback` is immediately called with -the error. - -__Arguments__ - -* `tasks` - An array of functions to run, each function is passed a - `callback(err, result1, result2, ...)` it must call on completion. The first - argument is an error (which can be `null`) and any further arguments will be - passed as arguments in order to the next task. -* `callback(err, [results])` - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback) { - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); - }, - function(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` -Or, with named functions: - -```js -async.waterfall([ - myFirstFunction, - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(callback) { - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - -Or, if you need to pass any argument to the first function: - -```js -async.waterfall([ - async.apply(myFirstFunction, 'zero'), - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(arg1, callback) { - // arg1 now equals 'zero' - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - ---------------------------------------- - -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions `f()`, `g()`, and `h()` would produce the result of -`f(g(h()))`, only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- - -### seq(fn1, fn2...) - -Version of the compose function that is more natural to read. -Each function consumes the return value of the previous function. -It is the equivalent of [`compose`](#compose) with the arguments reversed. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -// Requires lodash (or underscore), express3 and dresende's orm2. -// Part of an app, that fetches cats of the logged user. -// This example uses `seq` function to avoid overnesting and error -// handling clutter. -app.get('/cats', function(request, response) { - var User = request.models.User; - async.seq( - _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) - function(user, fn) { - user.getCats(fn); // 'getCats' has signature (callback(err, data)) - } - )(req.session.user_id, function (err, cats) { - if (err) { - console.error(err); - response.json({ status: 'error', message: err.message }); - } else { - response.json({ status: 'ok', message: 'Cats found', data: cats }); - } - }); -}); -``` - ---------------------------------------- - -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling -`callback` after all functions have completed. If you only provide the first -argument, then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* `fns` - the asynchronous functions to all call with the same arguments -* `args...` - any number of separate arguments to pass to the function -* `callback` - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - -__Related__ - -* applyEachSeries(tasks, args..., [callback]) - ---------------------------------------- - - -### queue(worker, [concurrency]) - -Creates a `queue` object with the specified `concurrency`. Tasks added to the -`queue` are processed in parallel (up to the `concurrency` limit). If all -`worker`s are in progress, the task is queued until one becomes available. -Once a `worker` completes a `task`, that `task`'s callback is called. - -__Arguments__ - -* `worker(task, callback)` - An asynchronous function for processing a queued - task, which must call its `callback(err)` argument when finished, with an - optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`. -* `concurrency` - An `integer` for determining how many `worker` functions should be - run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown. - -__Queue objects__ - -The `queue` object returned by this function has the following properties and -methods: - -* `length()` - a function returning the number of items waiting to be processed. -* `started` - a function returning whether or not any items have been pushed and processed by the queue -* `running()` - a function returning the number of items currently being processed. -* `workersList()` - a function returning the array of items currently being processed. -* `idle()` - a function returning false if there are items waiting or being processed, or true if not. -* `concurrency` - an integer for determining how many `worker` functions should be - run in parallel. This property can be changed after a `queue` is created to - alter the concurrency on-the-fly. -* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once - the `worker` has finished processing the task. Instead of a single task, a `tasks` array - can be submitted. The respective callback is used for every task in the list. -* `unshift(task, [callback])` - add a new task to the front of the `queue`. -* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, - and further tasks will be queued. -* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. -* `paused` - a boolean for determining whether the queue is in a paused state -* `pause()` - a function that pauses the processing of tasks until `resume()` is called. -* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. -* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle. - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing item'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - - ---------------------------------------- - - -### priorityQueue(worker, concurrency) - -The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: - -* `push(task, priority, [callback])` - `priority` should be a number. If an array of - `tasks` is given, all tasks will be assigned the same priority. -* The `unshift` method was removed. - ---------------------------------------- - - -### cargo(worker, [payload]) - -Creates a `cargo` object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the `payload` limit). If the -`worker` is in progress, the task is queued until it becomes available. Once -the `worker` has completed some tasks, each callback of those tasks is called. -Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work. - -While [queue](#queue) passes only one task to one of a group of workers -at a time, cargo passes an array of tasks to a single worker, repeating -when the worker is finished. - -__Arguments__ - -* `worker(tasks, callback)` - An asynchronous function for processing an array of - queued tasks, which must call its `callback(err)` argument when finished, with - an optional `err` argument. -* `payload` - An optional `integer` for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The `cargo` object returned by this function has the following properties and -methods: - -* `length()` - A function returning the number of items waiting to be processed. -* `payload` - An `integer` for determining how many tasks should be - process per round. This property can be changed after a `cargo` is created to - alter the payload on-the-fly. -* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called - once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` - can be submitted. The respective callback is used for every task in the list. -* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. -* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. -* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue) - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i -### auto(tasks, [concurrency], [callback]) - -Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied. - -If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far. - -Note, all functions are called with a `results` object as a second argument, -so it is unsafe to pass functions in the `tasks` object which cannot handle the -extra argument. - -For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling `readFile` with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to `readFile` in a function which does not forward the -`results` object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* `tasks` - An object. Each of its properties is either a function or an array of - requirements, with the function itself the last item in the array. The object's key - of a property serves as the name of the task defined by that property, - i.e. can be used when specifying requirements for other tasks. - The function receives two arguments: (1) a `callback(err, result)` which must be - called when finished, passing an `error` (which can be `null`) and the result of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions. -* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible. -* `callback(err, results)` - An optional callback which is called when all the - tasks have been completed. It receives the `err` argument if any `tasks` - pass an error to their callback. Results are always returned; however, if - an error occurs, no further `tasks` will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - make_folder: function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - }, - write_file: ['get_data', 'make_folder', function(callback, results){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, 'filename'); - }], - email_link: ['write_file', function(callback, results){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - callback(null, {'file':results.write_file, 'email':'user@example.com'}); - }] -}, function(err, results) { - console.log('err = ', err); - console.log('results = ', results); -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - } -], -function(err, results){ - async.series([ - function(callback){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - results.push('filename'); - callback(null); - }, - function(callback){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - callback(null, {'file':results.pop(), 'email':'user@example.com'}); - } - ]); -}); -``` - -For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding -new tasks much easier (and the code more readable). - - ---------------------------------------- - - -### retry([opts = {times: 5, interval: 0}| 5], task, [callback]) - -Attempts to get a successful response from `task` no more than `times` times before -returning an error. If the task is successful, the `callback` will be passed the result -of the successful task. If all attempts fail, the callback will be passed the error and -result (if any) of the final attempt. - -__Arguments__ - -* `opts` - Can be either an object with `times` and `interval` or a number. - * `times` - The number of attempts to make before giving up. The default is `5`. - * `interval` - The time to wait between retries, in milliseconds. The default is `0`. - * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. -* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` - which must be called when finished, passing `err` (which can be `null`) and the `result` of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions (if nested inside another control flow). -* `callback(err, results)` - An optional callback which is called when the - task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. - -The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below: - -```js -// try calling apiMethod 3 times -async.retry(3, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod 3 times, waiting 200 ms between each retry -async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod the default 5 times no delay between each retry -async.retry(apiMethod, function(err, result) { - // do something with the result -}); -``` - -It can also be embedded within other control flow functions to retry individual methods -that are not as reliable, like this: - -```js -async.auto({ - users: api.getUsers.bind(api), - payments: async.retry(3, api.getPayments.bind(api)) -}, function(err, results) { - // do something with the results -}); -``` - - ---------------------------------------- - - -### iterator(tasks) - -Creates an iterator function which calls the next function in the `tasks` array, -returning a continuation to call the next one after that. It's also possible to -“peek” at the next iterator with `iterator.next()`. - -This function is used internally by the `async` module, but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* `tasks` - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - - -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied. - -Useful as a shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - - -### nextTick(callback), setImmediate(callback) - -Calls `callback` on a later loop around the event loop. In Node.js this just -calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` -if available, otherwise `setTimeout(callback, 0)`, which means other higher priority -events may precede the execution of `callback`. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* `callback` - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - - -### times(n, iterator, [callback]) - -Calls the `iterator` function `n` times, and accumulates results in the same manner -you would use with [`map`](#map). - -__Arguments__ - -* `n` - The number of times to run the function. -* `iterator` - The function to call `n` times. -* `callback` - see [`map`](#map) - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -__Related__ - -* timesSeries(n, iterator, [callback]) -* timesLimit(n, limit, iterator, [callback]) - - -## Utils - - -### memoize(fn, [hasher]) - -Caches the results of an `async` function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* `fn` - The function to proxy and cache results from. -* `hasher` - An optional function for generating a custom hash for storing - results. It has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - - -### unmemoize(fn) - -Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized -form. Handy for testing. - -__Arguments__ - -* `fn` - the memoized function - ---------------------------------------- - - -### ensureAsync(fn) - -Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained. - -__Arguments__ - -* `fn` - an async function, one that expects a node-style callback as its last argument - -Returns a wrapped function with the exact same call signature as the function passed in. - -__Example__ - -```js -function sometimesAsync(arg, callback) { - if (cache[arg]) { - return callback(null, cache[arg]); // this would be synchronous!! - } else { - doSomeIO(arg, callback); // this IO would be asynchronous - } -} - -// this has a risk of stack overflows if many results are cached in a row -async.mapSeries(args, sometimesAsync, done); - -// this will defer sometimesAsync's callback if necessary, -// preventing stack overflows -async.mapSeries(args, async.ensureAsync(sometimesAsync), done); - -``` - ---------------------------------------- - - -### constant(values...) - -Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`. - -__Example__ - -```js -async.waterfall([ - async.constant(42), - function (value, next) { - // value === 42 - }, - //... -], callback); - -async.waterfall([ - async.constant(filename, "utf8"), - fs.readFile, - function (fileData, next) { - //... - } - //... -], callback); - -async.auto({ - hostname: async.constant("https://server.net/"), - port: findFreePort, - launchServer: ["hostname", "port", function (cb, options) { - startServer(options, cb); - }], - //... -}, callback); - -``` - ---------------------------------------- - - - -### asyncify(func) - -__Alias:__ `wrapSync` - -Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback. - -__Example__ - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(JSON.parse), - function (data, next) { - // data is the result of parsing the text. - // If there was a parsing error, it would have been caught. - } -], callback) -``` - -If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example: - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(function (contents) { - return db.model.create(contents); - }), - function (model, next) { - // `model` is the instantiated model object. - // If there was an error, this function would be skipped. - } -], callback) -``` - -This also means you can asyncify ES2016 `async` functions. - -```js -var q = async.queue(async.asyncify(async function (file) { - var intermediateStep = await processFile(file); - return await somePromise(intermediateStep) -})); - -q.push(files); -``` - ---------------------------------------- - - -### log(function, arguments) - -Logs the result of an `async` function to the `console`. Only works in Node.js or -in browsers that support `console.log` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.log` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - - -### dir(function, arguments) - -Logs the result of an `async` function to the `console` using `console.dir` to -display the properties of the resulting object. Only works in Node.js or -in browsers that support `console.dir` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.dir` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - - -### noConflict() - -Changes the value of `async` back to its original value, returning a reference to the -`async` object. diff --git a/node_modules/ethereumjs-testrpc/node_modules/async/dist/async.js b/node_modules/ethereumjs-testrpc/node_modules/async/dist/async.js deleted file mode 100644 index 31e7620..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/async/dist/async.js +++ /dev/null @@ -1,1265 +0,0 @@ -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -(function () { - - var async = {}; - function noop() {} - function identity(v) { - return v; - } - function toBool(v) { - return !!v; - } - function notId(v) { - return !v; - } - - // global on the server, window in the browser - var previous_async; - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self === 'object' && self.self === self && self || - typeof global === 'object' && global.global === global && global || - this; - - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - return function() { - if (fn === null) throw new Error("Callback was already called."); - fn.apply(this, arguments); - fn = null; - }; - } - - function _once(fn) { - return function() { - if (fn === null) return; - fn.apply(this, arguments); - fn = null; - }; - } - - //// cross-browser compatiblity functions //// - - var _toString = Object.prototype.toString; - - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; - - // Ported from underscore.js isObject - var _isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - function _isArrayLike(arr) { - return _isArray(arr) || ( - // has a positive integer length property - typeof arr.length === "number" && - arr.length >= 0 && - arr.length % 1 === 0 - ); - } - - function _arrayEach(arr, iterator) { - var index = -1, - length = arr.length; - - while (++index < length) { - iterator(arr[index], index, arr); - } - } - - function _map(arr, iterator) { - var index = -1, - length = arr.length, - result = Array(length); - - while (++index < length) { - result[index] = iterator(arr[index], index, arr); - } - return result; - } - - function _range(count) { - return _map(Array(count), function (v, i) { return i; }); - } - - function _reduce(arr, iterator, memo) { - _arrayEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - } - - function _forEachOf(object, iterator) { - _arrayEach(_keys(object), function (key) { - iterator(object[key], key); - }); - } - - function _indexOf(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === item) return i; - } - return -1; - } - - var _keys = Object.keys || function (obj) { - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - function _keyIterator(coll) { - var i = -1; - var len; - var keys; - if (_isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? i : null; - }; - } else { - keys = _keys(coll); - len = keys.length; - return function next() { - i++; - return i < len ? keys[i] : null; - }; - } - } - - // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) - // This accumulates the arguments passed into an array, after a given index. - // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). - function _restParam(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0); - var rest = Array(length); - for (var index = 0; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - } - // Currently unused but handle cases outside of the switch statement: - // var args = Array(startIndex + 1); - // for (index = 0; index < startIndex; index++) { - // args[index] = arguments[index]; - // } - // args[startIndex] = rest; - // return func.apply(this, args); - }; - } - - function _withoutIndex(iterator) { - return function (value, index, callback) { - return iterator(value, callback); - }; - } - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - - // capture the global reference to guard against fakeTimer mocks - var _setImmediate = typeof setImmediate === 'function' && setImmediate; - - var _delay = _setImmediate ? function(fn) { - // not a direct alias for IE10 compatibility - _setImmediate(fn); - } : function(fn) { - setTimeout(fn, 0); - }; - - if (typeof process === 'object' && typeof process.nextTick === 'function') { - async.nextTick = process.nextTick; - } else { - async.nextTick = _delay; - } - async.setImmediate = _setImmediate ? _delay : async.nextTick; - - - async.forEach = - async.each = function (arr, iterator, callback) { - return async.eachOf(arr, _withoutIndex(iterator), callback); - }; - - async.forEachSeries = - async.eachSeries = function (arr, iterator, callback) { - return async.eachOfSeries(arr, _withoutIndex(iterator), callback); - }; - - - async.forEachLimit = - async.eachLimit = function (arr, limit, iterator, callback) { - return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); - }; - - async.forEachOf = - async.eachOf = function (object, iterator, callback) { - callback = _once(callback || noop); - object = object || []; - - var iter = _keyIterator(object); - var key, completed = 0; - - while ((key = iter()) != null) { - completed += 1; - iterator(object[key], key, only_once(done)); - } - - if (completed === 0) callback(null); - - function done(err) { - completed--; - if (err) { - callback(err); - } - // Check key is null in case iterator isn't exhausted - // and done resolved synchronously. - else if (key === null && completed <= 0) { - callback(null); - } - } - }; - - async.forEachOfSeries = - async.eachOfSeries = function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - var key = nextKey(); - function iterate() { - var sync = true; - if (key === null) { - return callback(null); - } - iterator(obj[key], key, only_once(function (err) { - if (err) { - callback(err); - } - else { - key = nextKey(); - if (key === null) { - return callback(null); - } else { - if (sync) { - async.setImmediate(iterate); - } else { - iterate(); - } - } - } - })); - sync = false; - } - iterate(); - }; - - - - async.forEachOfLimit = - async.eachOfLimit = function (obj, limit, iterator, callback) { - _eachOfLimit(limit)(obj, iterator, callback); - }; - - function _eachOfLimit(limit) { - - return function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - if (limit <= 0) { - return callback(null); - } - var done = false; - var running = 0; - var errored = false; - - (function replenish () { - if (done && running <= 0) { - return callback(null); - } - - while (running < limit && !errored) { - var key = nextKey(); - if (key === null) { - done = true; - if (running <= 0) { - callback(null); - } - return; - } - running += 1; - iterator(obj[key], key, only_once(function (err) { - running -= 1; - if (err) { - callback(err); - errored = true; - } - else { - replenish(); - } - })); - } - })(); - }; - } - - - function doParallel(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOf, obj, iterator, callback); - }; - } - function doParallelLimit(fn) { - return function (obj, limit, iterator, callback) { - return fn(_eachOfLimit(limit), obj, iterator, callback); - }; - } - function doSeries(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOfSeries, obj, iterator, callback); - }; - } - - function _asyncMap(eachfn, arr, iterator, callback) { - callback = _once(callback || noop); - arr = arr || []; - var results = _isArrayLike(arr) ? [] : {}; - eachfn(arr, function (value, index, callback) { - iterator(value, function (err, v) { - results[index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = doParallelLimit(_asyncMap); - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.inject = - async.foldl = - async.reduce = function (arr, memo, iterator, callback) { - async.eachOfSeries(arr, function (x, i, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - - async.foldr = - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, identity).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - - async.transform = function (arr, memo, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = memo; - memo = _isArray(arr) ? [] : {}; - } - - async.eachOf(arr, function(v, k, cb) { - iterator(memo, v, k, cb); - }, function(err) { - callback(err, memo); - }); - }; - - function _filter(eachfn, arr, iterator, callback) { - var results = []; - eachfn(arr, function (x, index, callback) { - iterator(x, function (v) { - if (v) { - results.push({index: index, value: x}); - } - callback(); - }); - }, function () { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - } - - async.select = - async.filter = doParallel(_filter); - - async.selectLimit = - async.filterLimit = doParallelLimit(_filter); - - async.selectSeries = - async.filterSeries = doSeries(_filter); - - function _reject(eachfn, arr, iterator, callback) { - _filter(eachfn, arr, function(value, cb) { - iterator(value, function(v) { - cb(!v); - }); - }, callback); - } - async.reject = doParallel(_reject); - async.rejectLimit = doParallelLimit(_reject); - async.rejectSeries = doSeries(_reject); - - function _createTester(eachfn, check, getResult) { - return function(arr, limit, iterator, cb) { - function done() { - if (cb) cb(getResult(false, void 0)); - } - function iteratee(x, _, callback) { - if (!cb) return callback(); - iterator(x, function (v) { - if (cb && check(v)) { - cb(getResult(true, x)); - cb = iterator = false; - } - callback(); - }); - } - if (arguments.length > 3) { - eachfn(arr, limit, iteratee, done); - } else { - cb = iterator; - iterator = limit; - eachfn(arr, iteratee, done); - } - }; - } - - async.any = - async.some = _createTester(async.eachOf, toBool, identity); - - async.someLimit = _createTester(async.eachOfLimit, toBool, identity); - - async.all = - async.every = _createTester(async.eachOf, notId, notId); - - async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - - function _findGetResult(v, x) { - return x; - } - async.detect = _createTester(async.eachOf, identity, _findGetResult); - async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); - async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - callback(null, _map(results.sort(comparator), function (x) { - return x.value; - })); - } - - }); - - function comparator(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - } - }; - - async.auto = function (tasks, concurrency, callback) { - if (typeof arguments[1] === 'function') { - // concurrency is optional, shift the args. - callback = concurrency; - concurrency = null; - } - callback = _once(callback || noop); - var keys = _keys(tasks); - var remainingTasks = keys.length; - if (!remainingTasks) { - return callback(null); - } - if (!concurrency) { - concurrency = remainingTasks; - } - - var results = {}; - var runningTasks = 0; - - var hasError = false; - - var listeners = []; - function addListener(fn) { - listeners.unshift(fn); - } - function removeListener(fn) { - var idx = _indexOf(listeners, fn); - if (idx >= 0) listeners.splice(idx, 1); - } - function taskComplete() { - remainingTasks--; - _arrayEach(listeners.slice(0), function (fn) { - fn(); - }); - } - - addListener(function () { - if (!remainingTasks) { - callback(null, results); - } - }); - - _arrayEach(keys, function (k) { - if (hasError) return; - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = _restParam(function(err, args) { - runningTasks--; - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _forEachOf(results, function(val, rkey) { - safeResults[rkey] = val; - }); - safeResults[k] = args; - hasError = true; - - callback(err, safeResults); - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }); - var requires = task.slice(0, task.length - 1); - // prevent dead-locks - var len = requires.length; - var dep; - while (len--) { - if (!(dep = tasks[requires[len]])) { - throw new Error('Has nonexistent dependency in ' + requires.join(', ')); - } - if (_isArray(dep) && _indexOf(dep, k) >= 0) { - throw new Error('Has cyclic dependencies'); - } - } - function ready() { - return runningTasks < concurrency && _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - } - if (ready()) { - runningTasks++; - task[task.length - 1](taskCallback, results); - } - else { - addListener(listener); - } - function listener() { - if (ready()) { - runningTasks++; - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - } - }); - }; - - - - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var attempts = []; - - var opts = { - times: DEFAULT_TIMES, - interval: DEFAULT_INTERVAL - }; - - function parseTimes(acc, t){ - if(typeof t === 'number'){ - acc.times = parseInt(t, 10) || DEFAULT_TIMES; - } else if(typeof t === 'object'){ - acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; - acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; - } else { - throw new Error('Unsupported argument type for \'times\': ' + typeof t); - } - } - - var length = arguments.length; - if (length < 1 || length > 3) { - throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); - } else if (length <= 2 && typeof times === 'function') { - callback = task; - task = times; - } - if (typeof times !== 'function') { - parseTimes(opts, times); - } - opts.callback = callback; - opts.task = task; - - function wrappedTask(wrappedCallback, wrappedResults) { - function retryAttempt(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - } - - function retryInterval(interval){ - return function(seriesCallback){ - setTimeout(function(){ - seriesCallback(null); - }, interval); - }; - } - - while (opts.times) { - - var finalAttempt = !(opts.times-=1); - attempts.push(retryAttempt(opts.task, finalAttempt)); - if(!finalAttempt && opts.interval > 0){ - attempts.push(retryInterval(opts.interval)); - } - } - - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || opts.callback)(data.err, data.result); - }); - } - - // If a callback is passed, run this as a controll flow - return opts.callback ? wrappedTask() : wrappedTask; - }; - - async.waterfall = function (tasks, callback) { - callback = _once(callback || noop); - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - function wrapIterator(iterator) { - return _restParam(function (err, args) { - if (err) { - callback.apply(null, [err].concat(args)); - } - else { - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - ensureAsync(iterator).apply(null, args); - } - }); - } - wrapIterator(async.iterator(tasks))(); - }; - - function _parallel(eachfn, tasks, callback) { - callback = callback || noop; - var results = _isArrayLike(tasks) ? [] : {}; - - eachfn(tasks, function (task, key, callback) { - task(_restParam(function (err, args) { - if (args.length <= 1) { - args = args[0]; - } - results[key] = args; - callback(err); - })); - }, function (err) { - callback(err, results); - }); - } - - async.parallel = function (tasks, callback) { - _parallel(async.eachOf, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel(_eachOfLimit(limit), tasks, callback); - }; - - async.series = function(tasks, callback) { - _parallel(async.eachOfSeries, tasks, callback); - }; - - async.iterator = function (tasks) { - function makeCallback(index) { - function fn() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - } - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - } - return makeCallback(0); - }; - - async.apply = _restParam(function (fn, args) { - return _restParam(function (callArgs) { - return fn.apply( - null, args.concat(callArgs) - ); - }); - }); - - function _concat(eachfn, arr, fn, callback) { - var result = []; - eachfn(arr, function (x, index, cb) { - fn(x, function (err, y) { - result = result.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, result); - }); - } - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - callback = callback || noop; - if (test()) { - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else if (test.apply(this, args)) { - iterator(next); - } else { - callback.apply(null, [null].concat(args)); - } - }); - iterator(next); - } else { - callback(null); - } - }; - - async.doWhilst = function (iterator, test, callback) { - var calls = 0; - return async.whilst(function() { - return ++calls <= 1 || test.apply(this, arguments); - }, iterator, callback); - }; - - async.until = function (test, iterator, callback) { - return async.whilst(function() { - return !test.apply(this, arguments); - }, iterator, callback); - }; - - async.doUntil = function (iterator, test, callback) { - return async.doWhilst(iterator, function() { - return !test.apply(this, arguments); - }, callback); - }; - - async.during = function (test, iterator, callback) { - callback = callback || noop; - - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else { - args.push(check); - test.apply(this, args); - } - }); - - var check = function(err, truth) { - if (err) { - callback(err); - } else if (truth) { - iterator(next); - } else { - callback(null); - } - }; - - test(check); - }; - - async.doDuring = function (iterator, test, callback) { - var calls = 0; - async.during(function(next) { - if (calls++ < 1) { - next(null, true); - } else { - test.apply(this, arguments); - } - }, iterator, callback); - }; - - function _queue(worker, concurrency, payload) { - if (concurrency == null) { - concurrency = 1; - } - else if(concurrency === 0) { - throw new Error('Concurrency must not be zero'); - } - function _insert(q, data, pos, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0 && q.idle()) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - callback: callback || noop - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - }); - async.setImmediate(q.process); - } - function _next(q, tasks) { - return function(){ - workers -= 1; - - var removed = false; - var args = arguments; - _arrayEach(tasks, function (task) { - _arrayEach(workersList, function (worker, index) { - if (worker === task && !removed) { - workersList.splice(index, 1); - removed = true; - } - }); - - task.callback.apply(task, args); - }); - if (q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - var workers = 0; - var workersList = []; - var q = { - tasks: [], - concurrency: concurrency, - payload: payload, - saturated: noop, - empty: noop, - drain: noop, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = noop; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - while(!q.paused && workers < q.concurrency && q.tasks.length){ - - var tasks = q.payload ? - q.tasks.splice(0, q.payload) : - q.tasks.splice(0, q.tasks.length); - - var data = _map(tasks, function (task) { - return task.data; - }); - - if (q.tasks.length === 0) { - q.empty(); - } - workers += 1; - workersList.push(tasks[0]); - var cb = only_once(_next(q, tasks)); - worker(data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - workersList: function () { - return workersList; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - q.paused = true; - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - var resumeCount = Math.min(q.concurrency, q.tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - async.setImmediate(q.process); - } - } - }; - return q; - } - - async.queue = function (worker, concurrency) { - var q = _queue(function (items, cb) { - worker(items[0], cb); - }, concurrency, 1); - - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - } - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : noop - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; - - return q; - }; - - async.cargo = function (worker, payload) { - return _queue(worker, 1, payload); - }; - - function _console_fn(name) { - return _restParam(function (fn, args) { - fn.apply(null, args.concat([_restParam(function (err, args) { - if (typeof console === 'object') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _arrayEach(args, function (x) { - console[name](x); - }); - } - } - })])); - }); - } - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - var has = Object.prototype.hasOwnProperty; - hasher = hasher || identity; - var memoized = _restParam(function memoized(args) { - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has.call(memo, key)) { - async.setImmediate(function () { - callback.apply(null, memo[key]); - }); - } - else if (has.call(queues, key)) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([_restParam(function (args) { - memo[key] = args; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, args); - } - })])); - } - }); - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - function _times(mapper) { - return function (count, iterator, callback) { - mapper(_range(count), iterator, callback); - }; - } - - async.times = _times(async.map); - async.timesSeries = _times(async.mapSeries); - async.timesLimit = function (count, limit, iterator, callback) { - return async.mapLimit(_range(count), limit, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return _restParam(function (args) { - var that = this; - - var callback = args[args.length - 1]; - if (typeof callback == 'function') { - args.pop(); - } else { - callback = noop; - } - - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { - cb(err, nextargs); - })])); - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }); - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - - function _applyEach(eachfn) { - return _restParam(function(fns, args) { - var go = _restParam(function(args) { - var that = this; - var callback = args.pop(); - return eachfn(fns, function (fn, _, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }); - if (args.length) { - return go.apply(this, args); - } - else { - return go; - } - }); - } - - async.applyEach = _applyEach(async.eachOf); - async.applyEachSeries = _applyEach(async.eachOfSeries); - - - async.forever = function (fn, callback) { - var done = only_once(callback || noop); - var task = ensureAsync(fn); - function next(err) { - if (err) { - return done(err); - } - task(next); - } - next(); - }; - - function ensureAsync(fn) { - return _restParam(function (args) { - var callback = args.pop(); - args.push(function () { - var innerArgs = arguments; - if (sync) { - async.setImmediate(function () { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - }); - var sync = true; - fn.apply(this, args); - sync = false; - }); - } - - async.ensureAsync = ensureAsync; - - async.constant = _restParam(function(values) { - var args = [null].concat(values); - return function (callback) { - return callback.apply(this, args); - }; - }); - - async.wrapSync = - async.asyncify = function asyncify(func) { - return _restParam(function (args) { - var callback = args.pop(); - var result; - try { - result = func.apply(this, args); - } catch (e) { - return callback(e); - } - // if result is Promise object - if (_isObject(result) && typeof result.then === "function") { - result.then(function(value) { - callback(null, value); - })["catch"](function(err) { - callback(err.message ? err : new Error(err)); - }); - } else { - callback(null, result); - } - }); - }; - - // Node.js - if (typeof module === 'object' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define === 'function' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via -``` - -For [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry - - $ npm install bignumber.js - -```javascript -var BigNumber = require('bignumber.js'); -``` - -To load with AMD loader libraries such as [requireJS](http://requirejs.org/): - -```javascript -require(['path/to/bignumber'], function(BigNumber) { - // Use BigNumber here in local scope. No global BigNumber. -}); -``` - -## Use - -*In all examples below, `var`, semicolons and `toString` calls are not shown. -If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* - -The library exports a single function: `BigNumber`, the constructor of BigNumber instances. - -It accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object, - -```javascript -x = new BigNumber(123.4567) -y = BigNumber('123456.7e-3') -z = new BigNumber(x) -x.equals(y) && y.equals(z) && x.equals(z) // true -``` - - -and a base from 2 to 64 inclusive can be specified. - -```javascript -x = new BigNumber(1011, 2) // "11" -y = new BigNumber('zz.9', 36) // "1295.25" -z = x.plus(y) // "1306.25" -``` - -A BigNumber is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new BigNumber(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a BigNumber can be chained. - -```javascript -x.dividedBy(y).plus(z).times(9).floor() -x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil() -``` - -Many method names have a shorter alias. - -```javascript -x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true -x.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true -``` - -Like JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods - -```javascript -x = new BigNumber(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -x.toNumber() // 255.5 -``` - - and a base can be specified for `toString`. - - ```javascript - x.toString(16) // "ff.8" - ``` - -There is also a `toFormat` method which may be useful for internationalisation - -```javascript -y = new BigNumber('1234567.898765') -y.toFormat(2) // "1,234,567.90" -``` - -The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor. - -The other arithmetic operations always give the exact result. - -```javascript -BigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) -// Alternatively, BigNumber.config( 10, 4 ); - -x = new BigNumber(2); -y = new BigNumber(3); -z = x.div(y) // "0.6666666667" -z.sqrt() // "0.8164965809" -z.pow(-3) // "3.3749999995" -z.toString(2) // "0.1010101011" -z.times(z) // "0.44444444448888888889" -z.times(z).round(10) // "0.4444444445" -``` - -There is a `toFraction` method with an optional *maximum denominator* argument - -```javascript -y = new BigNumber(355) -pi = y.dividedBy(113) // "3.1415929204" -pi.toFraction() // [ "7853982301", "2500000000" ] -pi.toFraction(1000) // [ "355", "113" ] -``` - -and `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values. - -```javascript -x = new BigNumber(NaN) // "NaN" -y = new BigNumber(Infinity) // "Infinity" -x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true -``` - -The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - - -```javascript -x = new BigNumber(-123.456); -x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - - -Multiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it. - -```javascript -// Set DECIMAL_PLACES for the original BigNumber constructor -BigNumber.config({ DECIMAL_PLACES: 10 }) - -// Create another BigNumber constructor, optionally passing in a configuration object -BN = BigNumber.another({ DECIMAL_PLACES: 5 }) - -x = new BigNumber(1) -y = new BN(1) - -x.div(3) // '0.3333333333' -y.div(3) // '0.33333' -``` - -For futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. - -## Test - -The *test* directory contains the test scripts for each method. - -The tests can be run with Node or a browser. For Node use - - $ npm test - -or - - $ node test/every-test - -To test a single method, e.g. - - $ node test/toFraction - -For the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. - -*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. - -## Versions - -This is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported. - -## Performance - -See the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory. - -## Build - -For Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed - - npm install uglify-js -g - -then - - npm run build - -will create *bignumber.min.js*. - -A source map will also be created in the *doc* directory. - -## Feedback - -Open an issue, or email - -Michael - -M8ch88l@gmail.com - -## Licence - -MIT. - -See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE). - -## Change Log - -####2.0.5 -* 25/03/2015 -* Amend README. Remove bitcoin address. - -####2.0.4 -* 25/03/2015 -* Critical bugfix #58: division. - -####2.0.3 -* 18/02/2015 -* Amend README. Add source map. - -####2.0.2 -* 18/02/2015 -* Correct links. - -####2.0.1 -* 18/02/2015 -* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods. -* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. -* Add an `another` method to enable multiple independent constructors to be created. -* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. -* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. -* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. -* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. -* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. -* Improve code quality. -* Improve documentation. - -####2.0.0 -* 29/12/2014 -* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. -* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. -* Store a BigNumber's coefficient in base 1e14, rather than base 10. -* Add fast path for integers to BigNumber constructor. -* Incorporate the library into the online documentation. - -####1.5.0 -* 13/11/2014 -* Add `toJSON` and `decimalPlaces` methods. - -####1.4.1 -* 08/06/2014 -* Amend README. - -####1.4.0 -* 08/05/2014 -* Add `toNumber`. - -####1.3.0 -* 08/11/2013 -* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. -* Maximum radix to 64. - -####1.2.1 -* 17/10/2013 -* Sign of zero when x < 0 and x + (-x) = 0. - -####1.2.0 -* 19/9/2013 -* Throw Error objects for stack. - -####1.1.1 -* 22/8/2013 -* Show original value in constructor error message. - -####1.1.0 -* 1/8/2013 -* Allow numbers with trailing radix point. - -####1.0.1 -* Bugfix: error messages with incorrect method name - -####1.0.0 -* 8/11/2012 -* Initial release diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/bignumber.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/bignumber.js deleted file mode 100644 index 4dbe3cd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/bignumber.js +++ /dev/null @@ -1,2667 +0,0 @@ -/*! bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.5 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base/2 - - n = mathfloor( base / ( yc[0] + 1 ) ); - - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - cmp = compare( prod, rem, prodL, remL ); - - // product > remainder. - if ( cmp == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - } - } else { - - // cmp is -1. - // If n is 0, there is no need to compare yc and rem again - // below, so change cmp to 1 to avoid it. - // If n is 1, compare yc and rem again below. - if ( n == 0 ) cmp = n = 1; - prod = yc.slice(); - } - - prodL = prod.length; - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - while ( ( cmp = compare( yc, rem, yL, remL ) ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( cmp && rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/bignumber.min.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/bignumber.min.js deleted file mode 100644 index 982112e..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/bignumber.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */ -!function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,k);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+O.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,b,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&L(M,b,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=k;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=O.charAt(g[d++]));e=l(e,u)}return e}function _(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:k,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&B>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||B>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function x(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[n%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==N&&(a[0]=1));break}if(a[l]+=s,a[l]!=N)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(k=0|e),r[n]=k,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(B=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(B=-($=0|(0>e?-e:e)))),r[n]=[B,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?F:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h||"object"!=typeof h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return x(arguments,T.lt)},a.min=function(){return x(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,b,O,S,R,A,E,D,_,x,F=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*F:F/0:0/0);for(v=new a(F),b=v.c=[],c=i.e-o.e,F=u+c+1,f||(f=N,c=t(i.e/y)-t(o.e/y),F=F/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>F)b.push(1),g=!0;else{for(E=I.length,_=L.length,h=0,F+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),_=L.length,E=I.length),A=_,O=I.slice(0,_),S=O.length;_>S;O[S++]=0);x=L.slice(),x.unshift(0),D=L[0],L[1]>=f/2&&D++;do{if(p=0,l=n(L,O,_,S),0>l){if(R=O[0],_!=S&&(R=R*f+(O[1]||0)),p=m(R/D),p>1?(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=O.length,l=n(d,O,w,S),1==l&&(p--,r(d,w>_?x:L,w,f))):(0==p&&(l=p=1),d=L.slice()),w=d.length,S>w&&d.unshift(0),r(O,d,S,f),S=O.length,-1==l)for(;(l=n(L,O,_,S))<1;)p++,r(O,S>_?x:L,S,f),S=O.length}else 0===l&&(p++,O=[0]);b[h++]=p,l&&O[0]?O[S++]=I[A]||0:(O=[I[A]],S=1)}while((A++=10;F/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])(?=\w[\w.]*$)/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,k)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(0/0);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:0/0);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==k?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=N-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/N|0,f[n]%=N;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:k),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?0/0:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=O,O=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=N,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=O[--s]%v,h=O[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:k,e?U(t,e,n):t},T.toExponential=function(e,n){return _(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return _(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=_(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,k).minus(g).abs().cmp(C(f,t,o,k).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){var e=this;return+e||(e.s?0*e.s:0/0)},T.toPower=T.pow=function(e){var n,t,r=m(0>e?-e:+e),i=this;if(!H(e,-S,S,23,"exponent")&&(!isFinite(e)||r>S&&(e/=0)||parseFloat(e)!=e&&!(e=0/0)))return new a(Math.pow(+i,e));for(n=J?d(J/y+2):0,t=new a(q);;){if(r%2){if(t=t.times(i),!t.c)break;n&&t.c.length>n&&(t.c.length=n)}if(r=m(r/2),!r)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>e&&(t=q.div(t)),n?U(t,J,k):t},T.toPrecision=function(e,n){return _(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):B>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=O.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",b="number type has more than 15 significant digits",O="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",N=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if(a=n(),"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e.BigNumber=a}(this); -//# sourceMappingURL=doc/bignumber.js.map \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/doc/API.html b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/doc/API.html deleted file mode 100644 index e0b173f..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/doc/API.html +++ /dev/null @@ -1,2160 +0,0 @@ - - - - - - -bignumber.js API - - - - - - -
- -

bignumber.js

- -

A JavaScript library for arbitrary-precision arithmetic.

-

Hosted on GitHub.

- -

API

- -

- See the README on GitHub for a - quick-start introduction. -

-

- In all examples below, var and semicolons are not shown, and if a commented-out - value is in quotes it means toString has been called on the preceding expression. -

- - -

CONSTRUCTOR

- -
- BigNumberBigNumber(value [, base]) ⇒ BigNumber -
-
-
value
-
- number|string|BigNumber: see RANGE for - range. -
-
- A numeric value. -
-
- Legitimate values include ±0, ±Infinity and - NaN. -
-
- Values of type number with more than 15 significant digits are - considered invalid (if ERRORS is true) as calling - toString or valueOf on - such numbers may not result in the intended value. -
console.log( 823456789123456.3 );    // 823456789123456.2
-
-
- There is no limit to the number of digits of a value of type string (other than - that of JavaScript's maximum array size). -
-
- Decimal string values may be in exponential, as well as normal (fixed-point) notation. - Non-decimal values must be in normal notation. -
-
- String values in hexadecimal literal form, e.g. '0xff', are valid, as are - string values with the octal and binary prefixs '0o' and '0b'. - String values in octal literal form without the prefix will be interpreted as - decimals, e.g. '011' is interpreted as 11, not 9. -
-
Values in any base may have fraction digits.
-
- For bases from 10 to 36, lower and/or upper case letters can be - used to represent values from 10 to 35. -
-
- For bases above 36, a-z represents values from 10 to - 35, A-Z from 36 to 61, and - $ and _ represent 62 and 63 respectively - (this can be changed by editing the ALPHABET variable near the top of the - source file). -
-
-
-
base
-
- number: integer, 2 to 64 inclusive -
-
The base of value.
-
- If base is omitted, or is null or undefined, base - 10 is assumed. -
-
-
-

Returns a new instance of a BigNumber object.

-

- If a base is specified, the value is rounded according to - the current DECIMAL_PLACES and - ROUNDING_MODE configuration. -

-

- See Errors for the treatment of an invalid value or - base. -

-
-x = new BigNumber(9)                       // '9'
-y = new BigNumber(x)                       // '9'
-
-// 'new' is optional if ERRORS is false
-BigNumber(435.345)                         // '435.345'
-
-new BigNumber('5032485723458348569331745.33434346346912144534543')
-new BigNumber('4.321e+4')                  // '43210'
-new BigNumber('-735.0918e-430')            // '-7.350918e-428'
-new BigNumber(Infinity)                    // 'Infinity'
-new BigNumber(NaN)                         // 'NaN'
-new BigNumber('.5')                        // '0.5'
-new BigNumber('+2')                        // '2'
-new BigNumber(-10110100.1, 2)              // '-180.5'
-new BigNumber(-0b10110100.1)               // '-180.5'
-new BigNumber('123412421.234324', 5)       // '607236.557696'
-new BigNumber('ff.8', 16)                  // '255.5'
-new BigNumber('0xff.8')                    // '255.5'
-

- The following throws 'not a base 2 number' if - ERRORS is true, otherwise it returns a BigNumber with value - NaN. -

-
new BigNumber(9, 2)
-

- The following throws 'number type has more than 15 significant digits' if - errors is true, otherwise it returns a BigNumber with value - 96517860459076820. -

-
new BigNumber(96517860459076817.4395)
-

- The following throws 'not a number' if ERRORS - is true, otherwise it returns a BigNumber with value NaN. -

-
new BigNumber('blurgh')
-

- A value is only rounded by the constructor if a base is specified. -

-
BigNumber.config({ DECIMAL_PLACES: 5 })
-new BigNumber(1.23456789)                  // '1.23456789'
-new BigNumber(1.23456789, 10)              // '1.23457'
- - - -

Methods

-

The static methods of a BigNumber constructor.

- - - - -
- another.another([obj]) ⇒ BigNumber constructor -
-

obj: object

-

- Returns a new independent BigNumber constructor with configuration as described by - obj (see config), or with the default - configuration if obj is null or undefined. -

-
BigNumber.config({ DECIMAL_PLACES: 5 })
-BN = BigNumber.another({ DECIMAL_PLACES: 9 })
-
-x = new BigNumber(1)
-y = new BN(1)
-
-x.div(3)                        // 0.33333
-y.div(3)                        // 0.333333333
-
-// BN = BigNumber.another({ DECIMAL_PLACES: 9 }) is equivalent to:
-BN = BigNumber.another()
-BN.config({ DECIMAL_PLACES: 9 })
- - - -
configconfig([obj]) ⇒ object
-

- obj: object: an object that contains some or all of the following - properties. -

-

Configures the 'global' settings for this particular BigNumber constructor.

-

Note: the configuration can also be supplied as an argument list, see below.

-
-
DECIMAL_PLACES
-
- number: integer, 0 to 1e+9 inclusive
- Default value: 20 -
-
- The maximum number of decimal places of the results of operations involving - division, i.e. division, square root and base conversion operations, and power - operations with negative exponents.
-
-
-
BigNumber.config({ DECIMAL_PLACES: 5 })
-BigNumber.config(5)    // equivalent
-
- - - -
ROUNDING_MODE
-
- number: integer, 0 to 8 inclusive
- Default value: 4 (ROUND_HALF_UP) -
-
- The rounding mode used in the above operations and the default rounding mode of - round, - toExponential, - toFixed, - toFormat and - toPrecision. -
-
The modes are available as enumerated properties of the BigNumber constructor.
-
-
BigNumber.config({ ROUNDING_MODE: 0 })
-BigNumber.config(null, BigNumber.ROUND_UP)    // equivalent
-
- - - -
EXPONENTIAL_AT
-
- number: integer, magnitude 0 to 1e+9 inclusive, or -
- number[]: [ integer -1e+9 to 0 inclusive, integer - 0 to 1e+9 inclusive ]
- Default value: [-7, 20] -
-
- The exponent value(s) at which toString returns exponential notation. -
-
- If a single number is assigned, the value is the exponent magnitude.
- If an array of two numbers is assigned then the first number is the negative exponent - value at and beneath which exponential notation is used, and the second number is the - positive exponent value at and above which the same. -
-
- For example, to emulate JavaScript numbers in terms of the exponent values at which they - begin to use exponential notation, use [-7, 20]. -
-
-
BigNumber.config({ EXPONENTIAL_AT: 2 })
-new BigNumber(12.3)         // '12.3'        e is only 1
-new BigNumber(123)          // '1.23e+2'
-new BigNumber(0.123)        // '0.123'       e is only -1
-new BigNumber(0.0123)       // '1.23e-2'
-
-BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
-new BigNumber(123456789)    // '123456789'   e is only 8
-new BigNumber(0.000000123)  // '1.23e-7'
-
-// Almost never return exponential notation:
-BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
-
-// Always return exponential notation:
-BigNumber.config({ EXPONENTIAL_AT: 0 })
-
-
- Regardless of the value of EXPONENTIAL_AT, the toFixed method - will always return a value in normal notation and the toExponential method - will always return a value in exponential form. -
-
- Calling toString with a base argument, e.g. toString(10), will - also always return normal notation. -
- - - -
RANGE
-
- number: integer, magnitude 1 to 1e+9 inclusive, or -
- number[]: [ integer -1e+9 to -1 inclusive, integer - 1 to 1e+9 inclusive ]
- Default value: [-1e+9, 1e+9] -
-
- The exponent value(s) beyond which overflow to Infinity and underflow to - zero occurs. -
-
- If a single number is assigned, it is the maximum exponent magnitude: values wth a - positive exponent of greater magnitude become Infinity and those with a - negative exponent of greater magnitude become zero. -
- If an array of two numbers is assigned then the first number is the negative exponent - limit and the second number is the positive exponent limit. -
-
- For example, to emulate JavaScript numbers in terms of the exponent values at which they - become zero and Infinity, use [-324, 308]. -
-
-
BigNumber.config({ RANGE: 500 })
-BigNumber.config().RANGE     // [ -500, 500 ]
-new BigNumber('9.999e499')   // '9.999e+499'
-new BigNumber('1e500')       // 'Infinity'
-new BigNumber('1e-499')      // '1e-499'
-new BigNumber('1e-500')      // '0'
-
-BigNumber.config({ RANGE: [-3, 4] })
-new BigNumber(99999)         // '99999'      e is only 4
-new BigNumber(100000)        // 'Infinity'   e is 5
-new BigNumber(0.001)         // '0.01'       e is only -3
-new BigNumber(0.0001)        // '0'          e is -4
-
-
- The largest possible magnitude of a finite BigNumber is - 9.999...e+1000000000.
- The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. -
- - - -
ERRORS
-
- boolean|number: true, false, 0 or - 1.
- Default value: true -
-
- The value that determines whether BigNumber Errors are thrown.
- If ERRORS is false, no errors will be thrown. -
-
See Errors.
-
BigNumber.config({ ERRORS: false })
- - - -
CRYPTO
-
- boolean|number: true, false, 0 or - 1.
- Default value: false -
-
- The value that determines whether cryptographically-secure pseudo-random number - generation is used. -
-
- If CRYPTO is set to true then the - random method will generate random digits using - crypto.getRandomValues in browsers that support it, or - crypto.randomBytes if using a version of Node.js that supports it. -
-
- If neither function is supported by the host environment then attempting to set - CRYPTO to true will fail, and if ERRORS - is true an exception will be thrown. -
-
- If CRYPTO is false then the source of randomness used will be - Math.random (which is assumed to generate at least 30 bits of - randomness). -
-
See random.
-
-
BigNumber.config({ CRYPTO: true })
-BigNumber.config().CRYPTO       // true
-BigNumber.random()              // 0.54340758610486147524
-
- - - -
MODULO_MODE
-
- number: integer, 0 to 9 inclusive
- Default value: 1 (ROUND_DOWN) -
-
The modulo mode used when calculating the modulus: a mod n.
-
- The quotient, q = a / n, is calculated according to the - ROUNDING_MODE that corresponds to the chosen - MODULO_MODE. -
-
The remainder, r, is calculated as: r = a - n * q.
-
- The modes that are most commonly used for the modulus/remainder operation are shown in - the following table. Although the other rounding modes can be used, they may not give - useful results. -
-
- - - - - - - - - - - - - - - - - - - - - - -
PropertyValueDescription
ROUND_UP0 - The remainder is positive if the dividend is negative, otherwise it is negative. -
ROUND_DOWN1 - The remainder has the same sign as the dividend.
- This uses 'truncating division' and matches the behaviour of JavaScript's - remainder operator %. -
ROUND_FLOOR3 - The remainder has the same sign as the divisor.
- This matches Python's % operator. -
ROUND_HALF_EVEN6The IEEE 754 remainder function.
EUCLID9 - The remainder is always positive. Euclidian division:
- q = sign(n) * floor(a / abs(n)) -
-
-
- The rounding/modulo modes are available as enumerated properties of the BigNumber - constructor. -
-
See modulo.
-
-
BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
-BigNumber.config({ MODULO_MODE: 9 })          // equivalent
-
- - - -
POW_PRECISION
-
- number: integer, 0 to 1e+9 inclusive.
- Default value: 100 -
-
- The maximum number of significant digits of the result of the power operation. -
-
If set to 0, the number of signifcant digits will not be limited.
-
See toPower.
-
BigNumber.config({ POW_PRECISION: 100 })
- - - -
FORMAT
-
object
-
- The FORMAT object configures the format of the string returned by the - toFormat method. -
-
- The example below shows the properties of the FORMAT object that are - recognised, and their default values. -
-
- Unlike the other configuration properties, the values of the properties of the - FORMAT object will not be checked for validity. The existing - FORMAT object will simply be replaced by the object that is passed in. - Note that all the properties shown below do not have to be included. -
-
See toFormat for examples of usage.
-
-
-BigNumber.config({
-    FORMAT: {
-        // the decimal separator
-        decimalSeparator: '.',
-        // the grouping separator of the integer part
-        groupSeparator: ',',
-        // the primary grouping size of the integer part
-        groupSize: 3,
-        // the secondary grouping size of the integer part
-        secondaryGroupSize: 0,
-        // the grouping separator of the fraction part
-        fractionGroupSeparator: ' ',
-        // the grouping size of the fraction part
-        fractionGroupSize: 0
-    }
-});
-
-
-
-

Returns an object with the above properties and their current values.

-

- If the value to be assigned to any of the above properties is null or - undefined it is ignored. -

-

See Errors for the treatment of invalid values.

-
-BigNumber.config({
-    DECIMAL_PLACES: 40,
-    ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
-    EXPONENTIAL_AT: [-10, 20],
-    RANGE: [-500, 500],
-    ERRORS: true,
-    CRYPTO: true,
-    MODULO_MODE: BigNumber.ROUND_FLOOR,
-    POW_PRECISION: 80,
-    FORMAT: {
-        groupSize: 3,
-        groupSeparator: ' ',
-        decimalSeparator: ','
-    }
-});
-
-// Alternatively but equivalently (excluding FORMAT):
-BigNumber.config( 40, 7, [-10, 20], 500, 1, 1, 3, 80 )
-
-obj = BigNumber.config();
-obj.ERRORS       // true
-obj.RANGE        // [-500, 500]
- - - -
- max.max([arg1 [, arg2, ...]]) ⇒ BigNumber -
-

- arg1, arg2, ...: number|string|BigNumber
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the maximum of arg1, - arg2,... . -

-

The argument to this method can also be an array of values.

-

The return value is always exact and unrounded.

-
x = new BigNumber('3257869345.0378653')
-BigNumber.max(4e9, x, '123456789.9')          // '4000000000'
-
-arr = [12, '13', new BigNumber(14)]
-BigNumber.max(arr)                            // '14'
- - - -
- min.min([arg1 [, arg2, ...]]) ⇒ BigNumber -
-

- arg1, arg2, ...: number|string|BigNumber
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the minimum of arg1, - arg2,... . -

-

The argument to this method can also be an array of values.

-

The return value is always exact and unrounded.

-
x = new BigNumber('3257869345.0378653')
-BigNumber.min(4e9, x, '123456789.9')          // '123456789.9'
-
-arr = [2, new BigNumber(-14), '-15.9999', -12]
-BigNumber.min(arr)                            // '-15.9999'
- - - -
- random.random([dp]) ⇒ BigNumber -
-

dp: number: integer, 0 to 1e+9 inclusive

-

- Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and - less than 1. -

-

- The return value will have dp decimal places (or less if trailing zeros are - produced).
- If dp is omitted then the number of decimal places will default to the current - DECIMAL_PLACES setting. -

-

- Depending on the value of this BigNumber constructor's - CRYPTO setting and the support for the - crypto object in the host environment, the random digits of the return value are - generated by either Math.random (fastest), crypto.getRandomValues - (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). -

-

- If CRYPTO is true, i.e. one of the - crypto methods is to be used, the value of a returned BigNumber should be - cryptographically-secure and statistically indistinguishable from a random value. -

-
BigNumber.config({ DECIMAL_PLACES: 10 })
-BigNumber.random()              // '0.4117936847'
-BigNumber.random(20)            // '0.78193327636914089009'
- - - -

Properties

-

- The library's enumerated rounding modes are stored as properties of the constructor.
- (They are not referenced internally by the library itself.) -

-

- Rounding modes 0 to 6 (inclusive) are the same as those of Java's - BigDecimal class. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyValueDescription
ROUND_UP0Rounds away from zero
ROUND_DOWN1Rounds towards zero
ROUND_CEIL2Rounds towards Infinity
ROUND_FLOOR3Rounds towards -Infinity
ROUND_HALF_UP4 - Rounds towards nearest neighbour.
- If equidistant, rounds away from zero -
ROUND_HALF_DOWN5 - Rounds towards nearest neighbour.
- If equidistant, rounds towards zero -
ROUND_HALF_EVEN6 - Rounds towards nearest neighbour.
- If equidistant, rounds towards even neighbour -
ROUND_HALF_CEIL7 - Rounds towards nearest neighbour.
- If equidistant, rounds towards Infinity -
ROUND_HALF_FLOOR8 - Rounds towards nearest neighbour.
- If equidistant, rounds towards -Infinity -
-
-BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
-BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
- - -

INSTANCE

- -

Methods

-

The methods inherited by a BigNumber instance from its constructor's prototype object.

-

A BigNumber is immutable in the sense that it is not changed by its methods.

-

- The treatment of ±0, ±Infinity and NaN is - consistent with how JavaScript treats these values. -

-

- Many method names have a shorter alias.
- (Internally, the library always uses the shorter method names.) -

- - - -
absoluteValue.abs() ⇒ BigNumber
-

- Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of - this BigNumber. -

-

The return value is always exact and unrounded.

-
-x = new BigNumber(-0.8)
-y = x.absoluteValue()           // '0.8'
-z = y.abs()                     // '0.8'
- - - -
ceil.ceil() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber rounded to - a whole number in the direction of positive Infinity. -

-
-x = new BigNumber(1.3)
-x.ceil()                        // '2'
-y = new BigNumber(-1.8)
-y.ceil()                        // '-1'
- - - -
comparedTo.cmp(n [, base]) ⇒ number
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

- - - - - - - - - - - - - - - - - - -
Returns 
1If the value of this BigNumber is greater than the value of n
-1If the value of this BigNumber is less than the value of n
0If this BigNumber and n have the same value
nullIf the value of either this BigNumber or n is NaN
-
-x = new BigNumber(Infinity)
-y = new BigNumber(5)
-x.comparedTo(y)                 // 1
-x.comparedTo(x.minus(1))        // 0
-y.cmp(NaN)                      // null
-y.cmp('110', 2)                 // -1
- - - -
decimalPlaces.dp() ⇒ number
-

- Return the number of decimal places of the value of this BigNumber, or null if - the value of this BigNumber is ±Infinity or NaN. -

-
-x = new BigNumber(123.45)
-x.decimalPlaces()               // 2
-y = new BigNumber('9.9e-101')
-y.dp()                          // 102
- - - -
dividedBy.div(n [, base]) ⇒ BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the value of this BigNumber divided by - n, rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

-
-x = new BigNumber(355)
-y = new BigNumber(113)
-x.dividedBy(y)                  // '3.14159292035398230088'
-x.div(5)                        // '71'
-x.div(47, 16)                   // '5'
- - - -
- dividedToIntegerBy.divToInt(n [, base]) ⇒ - BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Return a BigNumber whose value is the integer part of dividing the value of this BigNumber by - n. -

-
-x = new BigNumber(5)
-y = new BigNumber(3)
-x.dividedToIntegerBy(y)         // '1'
-x.divToInt(0.7)                 // '7'
-x.divToInt('0.f', 16)           // '5'
- - - -
equals.eq(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber equals the value of n, - otherwise returns false.
- As with JavaScript, NaN does not equal NaN. -

-

Note: This method uses the comparedTo method internally.

-
-0 === 1e-324                    // true
-x = new BigNumber(0)
-x.equals('1e-324')              // false
-BigNumber(-0).eq(x)             // true  ( -0 === 0 )
-BigNumber(255).eq('ff', 16)     // true
-
-y = new BigNumber(NaN)
-y.equals(NaN)                   // false
- - - -
floor.floor() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber rounded to a whole number in - the direction of negative Infinity. -

-
-x = new BigNumber(1.8)
-x.floor()                       // '1'
-y = new BigNumber(-1.3)
-y.floor()                       // '-2'
- - - -
greaterThan.gt(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is greater than the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-0.1 > (0.3 - 0.2)                           // true
-x = new BigNumber(0.1)
-x.greaterThan(BigNumber(0.3).minus(0.2))    // false
-BigNumber(0).gt(x)                          // false
-BigNumber(11, 3).gt(11.1, 2)                // true
- - - -
- greaterThanOrEqualTo.gte(n [, base]) ⇒ boolean -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is greater than or equal to the value - of n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-(0.3 - 0.2) >= 0.1                   // false
-x = new BigNumber(0.3).minus(0.2)
-x.greaterThanOrEqualTo(0.1)          // true
-BigNumber(1).gte(x)                  // true
-BigNumber(10, 18).gte('i', 36)       // true
- - - -
isFinite.isFinite() ⇒ boolean
-

- Returns true if the value of this BigNumber is a finite number, otherwise - returns false. -

-

- The only possible non-finite values of a BigNumber are NaN, Infinity - and -Infinity. -

-
-x = new BigNumber(1)
-x.isFinite()                    // true
-y = new BigNumber(Infinity)
-y.isFinite()                    // false
-

- Note: The native method isFinite() can be used if - n <= Number.MAX_VALUE. -

- - - -
isInteger.isInt() ⇒ boolean
-

- Returns true if the value of this BigNumber is a whole number, otherwise returns - false. -

-
-x = new BigNumber(1)
-x.isInteger()                   // true
-y = new BigNumber(123.456)
-y.isInt()                       // false
- - - -
isNaN.isNaN() ⇒ boolean
-

- Returns true if the value of this BigNumber is NaN, otherwise - returns false. -

-
-x = new BigNumber(NaN)
-x.isNaN()                       // true
-y = new BigNumber('Infinity')
-y.isNaN()                       // false
-

Note: The native method isNaN() can also be used.

- - - -
isNegative.isNeg() ⇒ boolean
-

- Returns true if the value of this BigNumber is negative, otherwise returns - false. -

-
-x = new BigNumber(-0)
-x.isNegative()                  // true
-y = new BigNumber(2)
-y.isNeg                         // false
-

Note: n < 0 can be used if n <= -Number.MIN_VALUE.

- - - -
isZero.isZero() ⇒ boolean
-

- Returns true if the value of this BigNumber is zero or minus zero, otherwise - returns false. -

-
-x = new BigNumber(-0)
-x.isZero() && x.isNeg()         // true
-y = new BigNumber(Infinity)
-y.isZero()                      // false
-

Note: n == 0 can be used if n >= Number.MIN_VALUE.

- - - -
lessThan.lt(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is less than the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-(0.3 - 0.2) < 0.1                     // true
-x = new BigNumber(0.3).minus(0.2)
-x.lessThan(0.1)                       // false
-BigNumber(0).lt(x)                    // true
-BigNumber(11.1, 2).lt(11, 3)          // true
- - - -
- lessThanOrEqualTo.lte(n [, base]) ⇒ boolean -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is less than or equal to the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-0.1 <= (0.3 - 0.2)                                // false
-x = new BigNumber(0.1)
-x.lessThanOrEqualTo(BigNumber(0.3).minus(0.2))    // true
-BigNumber(-1).lte(x)                              // true
-BigNumber(10, 18).lte('i', 36)                    // true
- - - -
- minus.minus(n [, base]) ⇒ BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the value of this BigNumber minus n.

-

The return value is always exact and unrounded.

-
-0.3 - 0.1                       // 0.19999999999999998
-x = new BigNumber(0.3)
-x.minus(0.1)                    // '0.2'
-x.minus(0.6, 20)                // '0'
- - - -
modulo.mod(n [, base]) ⇒ BigNumber
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. - the integer remainder of dividing this BigNumber by n. -

-

- The value returned, and in particular its sign, is dependent on the value of the - MODULO_MODE setting of this BigNumber constructor. - If it is 1 (default value), the result will have the same sign as this BigNumber, - and it will match that of Javascript's % operator (within the limits of double - precision) and BigDecimal's remainder method. -

-

The return value is always exact and unrounded.

-

- See MODULO_MODE for a description of the other - modulo modes. -

-
-1 % 0.9                         // 0.09999999999999998
-x = new BigNumber(1)
-x.modulo(0.9)                   // '0.1'
-y = new BigNumber(33)
-y.mod('a', 33)                  // '3'
- - - -
negated.neg() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by - -1. -

-
-x = new BigNumber(1.8)
-x.negated()                     // '-1.8'
-y = new BigNumber(-1.3)
-y.neg()                         // '1.3'
- - - -
plus.plus(n [, base]) ⇒ BigNumber
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the value of this BigNumber plus n.

-

The return value is always exact and unrounded.

-
-0.1 + 0.2                       // 0.30000000000000004
-x = new BigNumber(0.1)
-y = x.plus(0.2)                 // '0.3'
-BigNumber(0.7).plus(x).plus(y)  // '1'
-x.plus('0.1', 8)                // '0.225'
- - - -
precision.sd([z]) ⇒ number
-

- z: boolean|number: true, false, 0 - or 1 -

-

Returns the number of significant digits of the value of this BigNumber.

-

- If z is true or 1 then any trailing zeros of the - integer part of a number are counted as significant digits, otherwise they are not. -

-
-x = new BigNumber(1.234)
-x.precision()                   // 4
-y = new BigNumber(987000)
-y.sd()                          // 3
-y.sd(true)                      // 6
- - - -
round.round([dp [, rm]]) ⇒ BigNumber
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - rm to a maximum of dp decimal places. -

-

- if dp is omitted, or is null or undefined, the - return value is n rounded to a whole number.
- if rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - dp or rm values. -

-
-x = 1234.56
-Math.round(x)                             // 1235
-
-y = new BigNumber(x)
-y.round()                                 // '1235'
-y.round(1)                                // '1234.6'
-y.round(2)                                // '1234.56'
-y.round(10)                               // '1234.56'
-y.round(0, 1)                             // '1234'
-y.round(0, 6)                             // '1235'
-y.round(1, 1)                             // '1234.5'
-y.round(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
-y                                         // '1234.56'
- - - -
shift.shift(n) ⇒ BigNumber
-

- n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

-

- Returns a BigNumber whose value is the value of this BigNumber shifted n places. -

- The shift is of the decimal point, i.e. of powers of ten, and is to the left if n - is negative or to the right if n is positive. -

-

The return value is always exact and unrounded.

-
-x = new BigNumber(1.23)
-x.shift(3)                      // '1230'
-x.shift(-3)                     // '0.00123'
- - - -
squareRoot.sqrt() ⇒ BigNumber
-

- Returns a BigNumber whose value is the square root of the value of this BigNumber, - rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

-

- The return value will be correctly rounded, i.e. rounded as if the result was first calculated - to an infinite number of correct digits before rounding. -

-
-x = new BigNumber(16)
-x.squareRoot()                  // '4'
-y = new BigNumber(3)
-y.sqrt()                        // '1.73205080756887729353'
- - - -
times.times(n [, base]) ⇒ BigNumber
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the value of this BigNumber times n.

-

The return value is always exact and unrounded.

-
-0.6 * 3                         // 1.7999999999999998
-x = new BigNumber(0.6)
-y = x.times(3)                  // '1.8'
-BigNumber('7e+500').times(y)    // '1.26e+501'
-x.times('-a', 16)               // '-6'
- - - -
- toDigits.toDigits([sd [, rm]]) ⇒ BigNumber -
-

- sd: number: integer, 1 to 1e+9 inclusive.
- rm: number: integer, 0 to 8 inclusive. -

-

- Returns a BigNumber whose value is the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

-

- If sd is omitted or is null or undefined, the return - value will not be rounded.
- If rm is omitted or is null or undefined, - ROUNDING_MODE will be used. -

-

- See Errors for the treatment of other non-integer or out of range - sd or rm values. -

-
-BigNumber.config({ precision: 5, rounding: 4 })
-x = new BigNumber(9876.54321)
-
-x.toSignificantDigits()                          // '9876.5'
-x.toSignificantDigits(6)                         // '9876.54'
-x.toSignificantDigits(6, BigNumber.ROUND_UP)     // '9876.55'
-x.toSD(2)                                        // '9900'
-x.toSD(2, 1)                                     // '9800'
-x                                                // '9876.54321'
- - - -
- toExponential.toExponential([dp [, rm]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber in exponential notation rounded - using rounding mode rm to dp decimal places, i.e with one digit - before the decimal point and dp digits after it. -

-

- If the value of this BigNumber in exponential notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

-

- If dp is omitted, or is null or undefined, the number - of digits after the decimal point defaults to the minimum number of digits necessary to - represent the value exactly.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - dp or rm values. -

-
-x = 45.6
-y = new BigNumber(x)
-x.toExponential()               // '4.56e+1'
-y.toExponential()               // '4.56e+1'
-x.toExponential(0)              // '5e+1'
-y.toExponential(0)              // '5e+1'
-x.toExponential(1)              // '4.6e+1'
-y.toExponential(1)              // '4.6e+1'
-y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
-x.toExponential(3)              // '4.560e+1'
-y.toExponential(3)              // '4.560e+1'
- - - -
- toFixed.toFixed([dp [, rm]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm. -

-

- If the value of this BigNumber in normal notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

-

- Unlike Number.prototype.toFixed, which returns exponential notation if a number - is greater or equal to 1021, this method will always return normal - notation. -

-

- If dp is omitted or is null or undefined, the return - value will be unrounded and in normal notation. This is also unlike - Number.prototype.toFixed, which returns the value to zero decimal places.
- It is useful when fixed-point notation is required and the current - EXPONENTIAL_AT setting causes - toString to return exponential notation.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - dp or rm values. -

-
-x = 3.456
-y = new BigNumber(x)
-x.toFixed()                     // '3'
-y.toFixed()                     // '3.456'
-y.toFixed(0)                    // '3'
-x.toFixed(2)                    // '3.46'
-y.toFixed(2)                    // '3.46'
-y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
-x.toFixed(5)                    // '3.45600'
-y.toFixed(5)                    // '3.45600'
- - - -
- toFormat.toFormat([dp [, rm]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

-

- Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm, and formatted - according to the properties of the FORMAT object. -

-

- See the examples below for the properties of the - FORMAT object, their types and their usage. -

-

- If dp is omitted or is null or undefined, then the - return value is not rounded to a fixed number of decimal places.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - dp or rm values. -

-
-format = {
-    decimalSeparator: '.',
-    groupSeparator: ',',
-    groupSize: 3,
-    secondaryGroupSize: 0,
-    fractionGroupSeparator: ' ',
-    fractionGroupSize: 0
-}
-BigNumber.config({ FORMAT: format })
-
-x = new BigNumber('123456789.123456789')
-x.toFormat()                    // '123,456,789.123456789'
-x.toFormat(1)                   // '123,456,789.1'
-
-// If a reference to the object assigned to FORMAT has been retained,
-// the format properties can be changed directly
-format.groupSeparator = ' '
-format.fractionGroupSize = 5
-x.toFormat()                    // '123 456 789.12345 6789'
-
-BigNumber.config({
-    FORMAT: {
-        decimalSeparator = ',',
-        groupSeparator = '.',
-        groupSize = 3,
-        secondaryGroupSize = 2
-    }
-})
-
-x.toFormat(6)                   // '12.34.56.789,123'
- - - -
- toFraction.toFraction([max]) ⇒ [string, string] -
-

- max: number|string|BigNumber: integer >= 1 and < - Infinity -

-

- Returns a string array representing the value of this BigNumber as a simple fraction with an - integer numerator and an integer denominator. The denominator will be a positive non-zero - value less than or equal to max. -

-

- If a maximum denominator, max, is not specified, or is null or - undefined, the denominator will be the lowest value necessary to represent the - number exactly. -

-

- See Errors for the treatment of other non-integer or out of range - max values. -

-
-x = new BigNumber(1.75)
-x.toFraction()                  // '7, 4'
-
-pi = new BigNumber('3.14159265358')
-pi.toFraction()                 // '157079632679,50000000000'
-pi.toFraction(100000)           // '312689, 99532'
-pi.toFraction(10000)            // '355, 113'
-pi.toFraction(100)              // '311, 99'
-pi.toFraction(10)               // '22, 7'
-pi.toFraction(1)                // '3, 1'
- - - -
toJSON.toJSON() ⇒ string
-

As valueOf.

-
-x = new BigNumber('177.7e+457')
-y = new BigNumber(235.4325)
-z = new BigNumber('0.0098074')
-
-// Serialize an array of three BigNumbers
-str = JSON.stringify( [x, y, z] )
-// "["1.777e+459","235.4325","0.0098074"]"
-
-// Return an array of three BigNumbers
-JSON.parse(str, function (key, val) {
-    return key === '' ? val : new BigNumber(val)
-})
- - - -
toNumber.toNumber() ⇒ number
-

Returns the value of this BigNumber as a JavaScript number primitive.

-

- Type coercion with, for example, the unary plus operator will also work, except that a - BigNumber with the value minus zero will be converted to positive zero. -

-
-x = new BigNumber(456.789)
-x.toNumber()                    // 456.789
-+x                              // 456.789
-
-y = new BigNumber('45987349857634085409857349856430985')
-y.toNumber()                    // 4.598734985763409e+34
-
-z = new BigNumber(-0)
-1 / +z                          // Infinity
-1 / z.toNumber()                // -Infinity
- - - -
toPower.pow(n) ⇒ BigNumber
-

- n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

-

- Returns a BigNumber whose value is the value of this BigNumber raised to the power - n. -

-

- If n is negative the result is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

-

- If n is not an integer or is out of range: -

-

- If ERRORS is true a BigNumber Error is thrown,
- else if n is greater than 9007199254740991, it is interpreted as - Infinity;
- else if n is less than -9007199254740991, it is interpreted as - -Infinity;
- else if n is otherwise a number, it is truncated to an integer;
- else it is interpreted as NaN. -

-

- As the number of digits of the result of the power operation can grow so large so quickly, - e.g. 123.45610000 has over 50000 digits, the number of significant - digits calculated is limited to the value of the - POW_PRECISION setting (default value: - 100). -

-

- Set POW_PRECISION to 0 for an - unlimited number of significant digits to be calculated (this will cause the method to slow - dramatically for larger exponents). -

-

- Negative exponents will be calculated to the number of decimal places specified by - DECIMAL_PLACES (but not to more than - POW_PRECISION significant digits). -

-
-Math.pow(0.7, 2)                // 0.48999999999999994
-x = new BigNumber(0.7)
-x.toPower(2)                    // '0.49'
-BigNumber(3).pow(-2)            // '0.11111111111111111111'
- - - -
- toPrecision.toPrecision([sd [, rm]]) ⇒ string -
-

- sd: number: integer, 1 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

-

- If sd is less than the number of digits necessary to represent the integer part - of the value in normal (fixed-point) notation, then exponential notation is used. -

-

- If sd is omitted, or is null or undefined, then the - return value is the same as n.toString().
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- See Errors for the treatment of other non-integer or out of range - sd or rm values. -

-
-x = 45.6
-y = new BigNumber(x)
-x.toPrecision()                 // '45.6'
-y.toPrecision()                 // '45.6'
-x.toPrecision(1)                // '5e+1'
-y.toPrecision(1)                // '5e+1'
-y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
-y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
-x.toPrecision(5)                // '45.600'
-y.toPrecision(5)                // '45.600'
- - - -
toString.toString([base]) ⇒ string
-

base: number: integer, 2 to 64 inclusive

-

- Returns a string representing the value of this BigNumber in the specified base, or base - 10 if base is omitted or is null or - undefined. -

-

- For bases above 10, values from 10 to 35 are - represented by a-z (as with Number.prototype.toString), - 36 to 61 by A-Z, and 62 and - 63 by $ and _ respectively. -

-

- If a base is specified the value is rounded according to the current - DECIMAL_PLACES - and ROUNDING_MODE configuration. -

-

- If a base is not specified, and this BigNumber has a positive - exponent that is equal to or greater than the positive component of the - current EXPONENTIAL_AT setting, - or a negative exponent equal to or less than the negative component of the - setting, then exponential notation is returned. -

-

If base is null or undefined it is ignored.

-

- See Errors for the treatment of other non-integer or out of range - base values. -

-
-x = new BigNumber(750000)
-x.toString()                    // '750000'
-BigNumber.config({ EXPONENTIAL_AT: 5 })
-x.toString()                    // '7.5e+5'
-
-y = new BigNumber(362.875)
-y.toString(2)                   // '101101010.111'
-y.toString(9)                   // '442.77777777777777777778'
-y.toString(32)                  // 'ba.s'
-
-BigNumber.config({ DECIMAL_PLACES: 4 });
-z = new BigNumber('1.23456789')
-z.toString()                    // '1.23456789'
-z.toString(10)                  // '1.2346'
- - - -
truncated.trunc() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber truncated to a whole number. -

-
-x = new BigNumber(123.456)
-x.truncated()                   // '123'
-y = new BigNumber(-12.3)
-y.trunc()                       // '-12'
- - - -
valueOf.valueOf() ⇒ string
-

As toString, but does not accept a base argument.

-
-x = new BigNumber('1.777e+457')
-x.valueOf()                     // '1.777e+457'
- - - -

Properties

-

A BigNumber is an object with three properties:

- - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescriptionTypeValue
ccoefficient*number[] Array of base 1e14 numbers
eexponentnumberInteger, -1000000000 to 1000000000 inclusive
ssignnumber-1 or 1
-

*significand

-

The value of any of the three properties may also be null.

-

- From v2.0.0 of this library, the value of the coefficient of a BigNumber is stored in a - normalised base 100000000000000 floating point format, as opposed to the base - 10 format used in v1.x.x -

-

- This change means the properties of a BigNumber are now best considered to be read-only. - Previously it was acceptable to change the exponent of a BigNumber by writing to its exponent - property directly, but this is no longer recommended as the number of digits in the first - element of the coefficient array is dependent on the exponent, so the coefficient would also - need to be altered. -

-

- Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are - not necessarily preserved. -

-
x = new BigNumber(0.123)              // '0.123'
-x.toExponential()                     // '1.23e-1'
-x.c                                   // '1,2,3'
-x.e                                   // -1
-x.s                                   // 1
-
-y = new Number(-123.4567000e+2)       // '-12345.67'
-y.toExponential()                     // '-1.234567e+4'
-z = new BigNumber('-123.4567000e+2')  // '-12345.67'
-z.toExponential()                     // '-1.234567e+4'
-z.c                                   // '1,2,3,4,5,6,7'
-z.e                                   // 4
-z.s                                   // -1
- - - -

Zero, NaN and Infinity

-

- The table below shows how ±0, NaN and - ±Infinity are stored. -

- - - - - - - - - - - - - - - - - - - - - - - - - -
ces
±0[0]0±1
NaNnullnullnull
±Infinitynullnull±1
-
-x = new Number(-0)              // 0
-1 / x == -Infinity              // true
-
-y = new BigNumber(-0)           // '0'
-y.c                             // '0' ( [0].toString() )
-y.e                             // 0
-y.s                             // -1
- - - -

Errors

-

- The errors that are thrown are generic Error objects with name - BigNumber Error. -

-

- The table below shows the errors that may be thrown if ERRORS is - true, and the action taken if ERRORS is false. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Method(s)ERRORS: true
Throw BigNumber Error
ERRORS: false
Action on invalid argument
- - BigNumber
- comparedTo
- dividedBy
- dividedToIntegerBy
- equals
- greaterThan
- greaterThanOrEqualTo
- lessThan
- lessThanOrEqualTo
- minus
- modulo
- plus
- times -
number type has more than
15 significant digits
Accept.
not a base... numberSubstitute NaN.
base not an integerTruncate to integer.
Ignore if not a number.
base out of rangeIgnore.
not a number*Substitute NaN.
anothernot an objectIgnore.
configDECIMAL_PLACES not an integerTruncate to integer.
Ignore if not a number.
DECIMAL_PLACES out of rangeIgnore.
ROUNDING_MODE not an integerTruncate to integer.
Ignore if not a number.
ROUNDING_MODE out of rangeIgnore.
EXPONENTIAL_AT not an integer
or not [integer, integer]
Truncate to integer(s).
Ignore if not number(s).
EXPONENTIAL_AT out of range
or not [negative, positive]
Ignore.
RANGE not an integer
or not [integer, integer]
Truncate to integer(s).
Ignore if not number(s).
RANGE cannot be zeroIgnore.
RANGE out of range
or not [negative, positive]
Ignore.
ERRORS not a boolean
or binary digit
Ignore.
CRYPTO not a boolean
or binary digit
Ignore.
CRYPTO crypto unavailableIgnore.
MODULO_MODE not an integerTruncate to integer.
Ignore if not a number.
MODULO_MODE out of rangeIgnore.
POW_PRECISION not an integerTruncate to integer.
Ignore if not a number.
POW_PRECISION out of rangeIgnore.
FORMAT not an objectIgnore.
precisionargument not a boolean
or binary digit
Ignore.
rounddecimal places not an integerTruncate to integer.
Ignore if not a number.
decimal places out of rangeIgnore.
rounding mode not an integerTruncate to integer.
Ignore if not a number.
rounding mode out of rangeIgnore.
shiftargument not an integerTruncate to integer.
Ignore if not a number.
argument out of rangeSubstitute ±Infinity. -
- toExponential
- toFixed
- toFormat -
decimal places not an integerTruncate to integer.
Ignore if not a number.
decimal places out of rangeIgnore.
rounding mode not an integerTruncate to integer.
Ignore if not a number.
rounding mode out of rangeIgnore.
toFractionmax denominator not an integerTruncate to integer.
Ignore if not a number.
max denominator out of rangeIgnore.
- toDigits
- toPrecision -
precision not an integerTruncate to integer.
Ignore if not a number.
precision out of rangeIgnore.
rounding mode not an integerTruncate to integer.
Ignore if not a number.
rounding mode out of rangeIgnore.
toPowerexponent not an integerTruncate to integer.
Substitute NaN if not a number.
exponent out of rangeSubstitute ±Infinity. -
toStringbase not an integerTruncate to integer.
Ignore if not a number.
base out of rangeIgnore.
-

*No error is thrown if the value is NaN or 'NaN'.

-

- The message of a BigNumber Error will also contain the name of the method from which - the error originated. -

-

To determine if an exception is a BigNumber Error:

-
-try {
-    // ...
-} catch (e) {
-    if ( e instanceof Error && e.name == 'BigNumber Error' ) {
-        // ...
-    }
-}
- - - -

FAQ

- -
Why are trailing fractional zeros removed from BigNumbers?
-

- Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the - precision of a value. This can be useful but the results of arithmetic operations can be - misleading. -

-
-x = new BigDecimal("1.0")
-y = new BigDecimal("1.1000")
-z = x.add(y)                      // 2.1000
-
-x = new BigDecimal("1.20")
-y = new BigDecimal("3.45000")
-z = x.multiply(y)                 // 4.1400000
-

- To specify the precision of a value is to specify that the value lies - within a certain range. -

-

- In the first example, x has a value of 1.0. The trailing zero shows - the precision of the value, implying that it is in the range 0.95 to - 1.05. Similarly, the precision indicated by the trailing zeros of y - indicates that the value is in the range 1.09995 to 1.10005. -

-

- If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, - and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the - range of the result of the addition implied by the precision of its operands is - 2.04995 to 2.15005. -

-

- The result given by BigDecimal of 2.1000 however, indicates that the value is in - the range 2.09995 to 2.10005 and therefore the precision implied by - its trailing zeros may be misleading. -

-

- In the second example, the true range is 4.122744 to 4.157256 yet - the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 - to 4.14000005. Again, the precision implied by the trailing zeros may be - misleading. -

-

- This library, like binary floating point and most calculators, does not retain trailing - fractional zeros. Instead, the toExponential, toFixed and - toPrecision methods enable trailing zeros to be added if and when required.
-

-
- - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map deleted file mode 100644 index 120ed53..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bignumber.min.js","sources":["bignumber.js"],"names":["global","another","configObj","BigNumber","n","b","c","e","i","num","len","str","x","this","ERRORS","raise","isValidInt","id","round","DECIMAL_PLACES","ROUNDING_MODE","RegExp","ALPHABET","slice","test","parseNumeric","s","replace","length","tooManyDigits","charCodeAt","convertBase","isNumeric","indexOf","search","substring","MAX_EXP","MIN_EXP","LOG_BASE","push","baseOut","baseIn","sign","d","k","r","xc","y","dp","rm","toLowerCase","POW_PRECISION","pow","toBaseOut","toFixedPoint","coeffToString","pop","div","unshift","charAt","format","caller","c0","ne","roundingMode","toString","TO_EXP_NEG","toExponential","maxOrMin","args","method","m","isArray","call","intValidatorWithErrors","min","max","name","truncate","normalise","j","msg","val","error","Error","sd","ni","rd","pows10","POWS_TEN","out","mathceil","mathfloor","BASE","P","prototype","ONE","TO_EXP_POS","CRYPTO","MODULO_MODE","FORMAT","decimalSeparator","groupSeparator","groupSize","secondaryGroupSize","fractionGroupSeparator","fractionGroupSize","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","v","p","a","arguments","o","has","hasOwnProperty","MAX","intValidatorNoErrors","notBool","crypto","lt","gt","random","pow2_53","random53bitInt","Math","rand","getRandomValues","Uint32Array","randomBytes","copy","shift","multiply","base","temp","xlo","xhi","carry","klo","SQRT_BASE","khi","compare","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","yc","NaN","bitFloor","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","isNaN","p1","p2","absoluteValue","abs","ceil","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","divToInt","equals","eq","floor","greaterThan","greaterThanOrEqualTo","gte","isFinite","isInteger","isInt","isNegative","isNeg","isZero","lessThan","lessThanOrEqualTo","lte","minus","sub","t","xLTy","plus","xe","ye","reverse","modulo","mod","times","negated","neg","add","precision","z","MAX_SAFE_INTEGER","squareRoot","sqrt","rep","half","mul","xcL","ycL","ylo","yhi","zc","sqrtBase","toDigits","toFixed","toFormat","arr","split","g1","g2","intPart","fractionPart","intDigits","substr","toFraction","md","d0","d2","exp","n0","n1","d1","toNumber","toPower","parseFloat","toPrecision","truncated","trunc","valueOf","toJSON","l","obj","Object","arrL","define","amd","module","exports","require"],"mappings":";CAEC,SAAWA,GACR,YAqCA,SAASC,GAAQC,GAiHb,QAASC,GAAWC,EAAGC,GACnB,GAAIC,GAAGC,EAAGC,EAAGC,EAAKC,EAAKC,EACnBC,EAAIC,IAGR,MAAQD,YAAaT,IAIjB,MADIW,IAAQC,EAAO,GAAI,+BAAgCX,GAChD,GAAID,GAAWC,EAAGC,EAK7B,IAAU,MAALA,GAAcW,EAAYX,EAAG,EAAG,GAAIY,EAAI,QA4BtC,CAMH,GALAZ,EAAQ,EAAJA,EACJM,EAAMP,EAAI,GAIA,IAALC,EAED,MADAO,GAAI,GAAIT,GAAWC,YAAaD,GAAYC,EAAIO,GACzCO,EAAON,EAAGO,EAAiBP,EAAEL,EAAI,EAAGa,EAK/C,KAAOX,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,IAC7C,GAAMiB,QAAQ,OAAUf,EAAI,IAAMgB,EAASC,MAAO,EAAGlB,GAAM,MAC1D,SAAWC,EAAI,MAAU,GAAJD,EAAS,IAAM,IAAOmB,KAAKb,GAChD,MAAOc,GAAcb,EAAGD,EAAKF,EAAKJ,EAGlCI,IACAG,EAAEc,EAAY,EAAR,EAAItB,GAAUO,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAE1CT,GAAUH,EAAIgB,QAAS,YAAa,IAAKC,OAAS,IAGnDb,EAAOE,EAAIY,EAAezB,GAI9BK,GAAM,GAENG,EAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAGlEZ,EAAMoB,EAAapB,EAAK,GAAIN,EAAGO,EAAEc,OA9DmB,CAGpD,GAAKtB,YAAaD,GAKd,MAJAS,GAAEc,EAAItB,EAAEsB,EACRd,EAAEL,EAAIH,EAAEG,EACRK,EAAEN,GAAMF,EAAIA,EAAEE,GAAMF,EAAEmB,QAAUnB,OAChCa,EAAK,EAIT,KAAOR,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,EAAI,CAIhD,GAHAQ,EAAEc,EAAY,EAAR,EAAItB,GAAUA,GAAKA,EAAG,IAAO,EAG9BA,MAAQA,EAAI,CACb,IAAMG,EAAI,EAAGC,EAAIJ,EAAGI,GAAK,GAAIA,GAAK,GAAID,KAItC,MAHAK,GAAEL,EAAIA,EACNK,EAAEN,GAAKF,QACPa,EAAK,GAITN,EAAMP,EAAI,OACP,CACH,IAAM4B,EAAUR,KAAMb,EAAMP,EAAI,IAAO,MAAOqB,GAAcb,EAAGD,EAAKF,EACpEG,GAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,GAwDtE,KAhBOhB,EAAII,EAAIsB,QAAQ,MAAS,KAAKtB,EAAMA,EAAIgB,QAAS,IAAK,MAGtDnB,EAAIG,EAAIuB,OAAQ,OAAW,GAGrB,EAAJ3B,IAAQA,EAAIC,GACjBD,IAAMI,EAAIY,MAAOf,EAAI,GACrBG,EAAMA,EAAIwB,UAAW,EAAG3B,IACZ,EAAJD,IAGRA,EAAII,EAAIiB,QAINpB,EAAI,EAAyB,KAAtBG,EAAImB,WAAWtB,GAAWA,KAGvC,IAAME,EAAMC,EAAIiB,OAAkC,KAA1BjB,EAAImB,aAAapB,KAGzC,GAFAC,EAAMA,EAAIY,MAAOf,EAAGE,EAAM,GAYtB,GATAA,EAAMC,EAAIiB,OAILnB,GAAOK,GAAUJ,EAAM,IAAKK,EAAOE,EAAIY,EAAejB,EAAEc,EAAItB,GAEjEG,EAAIA,EAAIC,EAAI,EAGPD,EAAI6B,EAGLxB,EAAEN,EAAIM,EAAEL,EAAI,SAGT,IAAS8B,EAAJ9B,EAGRK,EAAEN,GAAMM,EAAEL,EAAI,OACX,CAWH,GAVAK,EAAEL,EAAIA,EACNK,EAAEN,KAMFE,GAAMD,EAAI,GAAM+B,EACP,EAAJ/B,IAAQC,GAAK8B,GAET5B,EAAJF,EAAU,CAGX,IAFIA,GAAGI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAO,EAAGf,IAE1BE,GAAO4B,EAAc5B,EAAJF,GACnBI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAOf,EAAGA,GAAK8B,GAGlC3B,GAAMA,EAAIY,MAAMf,GAChBA,EAAI8B,EAAW3B,EAAIiB,WAEnBpB,IAAKE,CAGT,MAAQF,IAAKG,GAAO,KACpBC,EAAEN,EAAEiC,MAAO5B,OAKfC,GAAEN,GAAMM,EAAEL,EAAI,EAGlBU,GAAK,EAgVT,QAASc,GAAapB,EAAK6B,EAASC,EAAQC,GACxC,GAAIC,GAAGpC,EAAGqC,EAAGC,EAAGjC,EAAGkC,EAAIC,EACnBvC,EAAIG,EAAIsB,QAAS,KACjBe,EAAK7B,EACL8B,EAAK7B,CA0BT,KAxBc,GAATqB,IAAc9B,EAAMA,EAAIuC,eAGxB1C,GAAK,IACNoC,EAAIO,EAGJA,EAAgB,EAChBxC,EAAMA,EAAIgB,QAAS,IAAK,IACxBoB,EAAI,GAAI5C,GAAUsC,GAClB7B,EAAImC,EAAEK,IAAKzC,EAAIiB,OAASpB,GACxB2C,EAAgBP,EAIhBG,EAAEzC,EAAI+C,EAAWC,EAAcC,EAAe3C,EAAEN,GAAKM,EAAEL,GAAK,GAAIiC,GAChEO,EAAExC,EAAIwC,EAAEzC,EAAEsB,QAIdkB,EAAKO,EAAW1C,EAAK8B,EAAQD,GAC7BjC,EAAIqC,EAAIE,EAAGlB,OAGQ,GAAXkB,IAAKF,GAASE,EAAGU,OACzB,IAAMV,EAAG,GAAK,MAAO,GA2BrB,IAzBS,EAAJtC,IACCD,GAEFK,EAAEN,EAAIwC,EACNlC,EAAEL,EAAIA,EAGNK,EAAEc,EAAIgB,EACN9B,EAAI6C,EAAK7C,EAAGmC,EAAGC,EAAIC,EAAIT,GACvBM,EAAKlC,EAAEN,EACPuC,EAAIjC,EAAEiC,EACNtC,EAAIK,EAAEL,GAGVoC,EAAIpC,EAAIyC,EAAK,EAGbxC,EAAIsC,EAAGH,GACPC,EAAIJ,EAAU,EACdK,EAAIA,GAAS,EAAJF,GAAsB,MAAbG,EAAGH,EAAI,GAEzBE,EAAS,EAALI,GAAgB,MAALzC,GAAaqC,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IACzDlB,EAAIoC,GAAKpC,GAAKoC,IAAY,GAANK,GAAWJ,GAAW,GAANI,GAAuB,EAAZH,EAAGH,EAAI,IACtDM,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAE1B,EAAJiB,IAAUG,EAAG,GAGdnC,EAAMkC,EAAIS,EAAc,KAAMN,GAAO,QAClC,CAGH,GAFAF,EAAGlB,OAASe,EAERE,EAGA,MAAQL,IAAWM,IAAKH,GAAKH,GACzBM,EAAGH,GAAK,EAEFA,MACApC,EACFuC,EAAGY,QAAQ,GAMvB,KAAMd,EAAIE,EAAGlB,QAASkB,IAAKF,KAG3B,IAAMpC,EAAI,EAAGG,EAAM,GAASiC,GAALpC,EAAQG,GAAOW,EAASqC,OAAQb,EAAGtC,OAC1DG,EAAM2C,EAAc3C,EAAKJ,GAI7B,MAAOI,GA4PX,QAASiD,GAAQxD,EAAGI,EAAGyC,EAAIY,GACvB,GAAIC,GAAIvD,EAAGwD,EAAIrD,EAAKC,CAKpB,IAHAsC,EAAW,MAANA,GAAcjC,EAAYiC,EAAI,EAAG,EAAGY,EAAQG,GACxC,EAALf,EAAS7B,GAEPhB,EAAEE,EAAI,MAAOF,GAAE6D,UAIrB,IAHAH,EAAK1D,EAAEE,EAAE,GACTyD,EAAK3D,EAAEG,EAEG,MAALC,EACDG,EAAM4C,EAAenD,EAAEE,GACvBK,EAAgB,IAAVkD,GAA0B,IAAVA,GAAsBK,GAANH,EAClCI,EAAexD,EAAKoD,GACpBT,EAAc3C,EAAKoD,OAevB,IAbA3D,EAAIc,EAAO,GAAIf,GAAUC,GAAII,EAAGyC,GAGhC1C,EAAIH,EAAEG,EAENI,EAAM4C,EAAenD,EAAEE,GACvBI,EAAMC,EAAIiB,OAOK,IAAViC,GAA0B,IAAVA,IAAuBtD,GAALC,GAAe0D,GAAL3D,GAAoB,CAGjE,KAAcC,EAANE,EAASC,GAAO,IAAKD,KAC7BC,EAAMwD,EAAexD,EAAKJ,OAQ1B,IAJAC,GAAKuD,EACLpD,EAAM2C,EAAc3C,EAAKJ,GAGpBA,EAAI,EAAIG,GACT,KAAOF,EAAI,EAAI,IAAMG,GAAO,IAAKH,IAAKG,GAAO,UAG7C,IADAH,GAAKD,EAAIG,EACJF,EAAI,EAEL,IADKD,EAAI,GAAKG,IAAMC,GAAO,KACnBH,IAAKG,GAAO,KAMpC,MAAOP,GAAEsB,EAAI,GAAKoC,EAAK,IAAMnD,EAAMA,EAKvC,QAASyD,GAAUC,EAAMC,GACrB,GAAIC,GAAGnE,EACHI,EAAI,CAKR,KAHKgE,EAASH,EAAK,MAAOA,EAAOA,EAAK,IACtCE,EAAI,GAAIpE,GAAWkE,EAAK,MAEd7D,EAAI6D,EAAKzC,QAAU,CAIzB,GAHAxB,EAAI,GAAID,GAAWkE,EAAK7D,KAGlBJ,EAAEsB,EAAI,CACR6C,EAAInE,CACJ,OACQkE,EAAOG,KAAMF,EAAGnE,KACxBmE,EAAInE,GAIZ,MAAOmE,GAQX,QAASG,GAAwBtE,EAAGuE,EAAKC,EAAKf,EAAQgB,GAMlD,OALSF,EAAJvE,GAAWA,EAAIwE,GAAOxE,GAAK0E,EAAS1E,KACrCW,EAAO8C,GAAUgB,GAAQ,mBACjBF,EAAJvE,GAAWA,EAAIwE,EAAM,gBAAkB,mBAAqBxE,IAG7D,EAQX,QAAS2E,GAAW3E,EAAGE,EAAGC,GAKtB,IAJA,GAAIC,GAAI,EACJwE,EAAI1E,EAAEsB,QAGDtB,IAAI0E,GAAI1E,EAAEkD,OAGnB,IAAMwB,EAAI1E,EAAE,GAAI0E,GAAK,GAAIA,GAAK,GAAIxE,KAkBlC,OAfOD,EAAIC,EAAID,EAAI+B,EAAW,GAAMF,EAGhChC,EAAEE,EAAIF,EAAEG,EAAI,KAGA8B,EAAJ9B,EAGRH,EAAEE,GAAMF,EAAEG,EAAI,IAEdH,EAAEG,EAAIA,EACNH,EAAEE,EAAIA,GAGHF,EAmDX,QAASW,GAAO8C,EAAQoB,EAAKC,GACzB,GAAIC,GAAQ,GAAIC,QACZ,gBACA,MACA,SACA,MACA,WACA,KACA,KACA,MACA,KACA,MACA,QACA,MACA,OACA,YACA,SACA,QACA,QACA,QACA,WACA,gBACA,UACA,WACA,aACA,MACA,cACA,WACA,aACFvB,GAAU,MAAQoB,EAAM,KAAOC,EAIjC,MAFAC,GAAMN,KAAO,kBACb5D,EAAK,EACCkE,EAQV,QAASjE,GAAON,EAAGyE,EAAIpC,EAAIJ,GACvB,GAAIF,GAAGnC,EAAGwE,EAAGpC,EAAGxC,EAAGkF,EAAIC,EACnBzC,EAAKlC,EAAEN,EACPkF,EAASC,CAGb,IAAI3C,EAAI,CAQJ4C,EAAK,CAGD,IAAM/C,EAAI,EAAGC,EAAIE,EAAG,GAAIF,GAAK,GAAIA,GAAK,GAAID,KAI1C,GAHAnC,EAAI6E,EAAK1C,EAGA,EAAJnC,EACDA,GAAK8B,EACL0C,EAAIK,EACJjF,EAAI0C,EAAIwC,EAAK,GAGbC,EAAKnF,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,MAIpC,IAFAM,EAAKK,GAAYnF,EAAI,GAAM8B,GAEtBgD,GAAMxC,EAAGlB,OAAS,CAEnB,IAAIiB,EASA,KAAM6C,EANN,MAAQ5C,EAAGlB,QAAU0D,EAAIxC,EAAGP,KAAK,IACjCnC,EAAImF,EAAK,EACT5C,EAAI,EACJnC,GAAK8B,EACL0C,EAAIxE,EAAI8B,EAAW,MAIpB,CAIH,IAHAlC,EAAIwC,EAAIE,EAAGwC,GAGL3C,EAAI,EAAGC,GAAK,GAAIA,GAAK,GAAID,KAG/BnC,GAAK8B,EAIL0C,EAAIxE,EAAI8B,EAAWK,EAGnB4C,EAAS,EAAJP,EAAQ,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,EAmBxD,GAfAnC,EAAIA,GAAU,EAALwC,GAKO,MAAdvC,EAAGwC,EAAK,KAAoB,EAAJN,EAAQ5E,EAAIA,EAAIoF,EAAQ7C,EAAIqC,EAAI,IAE1DnC,EAAS,EAALI,GACEsC,GAAM1C,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAClD6D,EAAK,GAAW,GAANA,IAAmB,GAANtC,GAAWJ,GAAW,GAANI,IAGnCzC,EAAI,EAAIwE,EAAI,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,GAAM,EAAIlC,EAAGwC,EAAK,IAAO,GAAO,GAClErC,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAElB,EAAL2D,IAAWvC,EAAG,GAiBf,MAhBAA,GAAGlB,OAAS,EAERiB,GAGAwC,GAAMzE,EAAEL,EAAI,EAGZuC,EAAG,GAAK0C,EAAQH,EAAK/C,GACrB1B,EAAEL,GAAK8E,GAAM,GAIbvC,EAAG,GAAKlC,EAAEL,EAAI,EAGXK,CAkBX,IAdU,GAALJ,GACDsC,EAAGlB,OAAS0D,EACZ1C,EAAI,EACJ0C,MAEAxC,EAAGlB,OAAS0D,EAAK,EACjB1C,EAAI4C,EAAQlD,EAAW9B,GAIvBsC,EAAGwC,GAAMN,EAAI,EAAIY,EAAWxF,EAAIoF,EAAQ7C,EAAIqC,GAAMQ,EAAOR,IAAOpC,EAAI,GAIpEC,EAEA,OAAY,CAGR,GAAW,GAANyC,EAAU,CAGX,IAAM9E,EAAI,EAAGwE,EAAIlC,EAAG,GAAIkC,GAAK,GAAIA,GAAK,GAAIxE,KAE1C,IADAwE,EAAIlC,EAAG,IAAMF,EACPA,EAAI,EAAGoC,GAAK,GAAIA,GAAK,GAAIpC,KAG1BpC,GAAKoC,IACNhC,EAAEL,IACGuC,EAAG,IAAM+C,IAAO/C,EAAG,GAAK,GAGjC,OAGA,GADAA,EAAGwC,IAAO1C,EACLE,EAAGwC,IAAOO,EAAO,KACtB/C,GAAGwC,KAAQ,EACX1C,EAAI,EAMhB,IAAMpC,EAAIsC,EAAGlB,OAAoB,IAAZkB,IAAKtC,GAAUsC,EAAGU,QAItC5C,EAAEL,EAAI6B,EACPxB,EAAEN,EAAIM,EAAEL,EAAI,KAGJK,EAAEL,EAAI8B,IACdzB,EAAEN,GAAMM,EAAEL,EAAI,IAItB,MAAOK,GAjyCX,GAAI6C,GAGAxC,EAAK,EACL6E,EAAI3F,EAAU4F,UACdC,EAAM,GAAI7F,GAAU,GAYpBgB,EAAiB,GAejBC,EAAgB,EAMhB8C,EAAa,GAIb+B,EAAa,GAMb5D,EAAU,KAKVD,EAAU,IAGVtB,GAAS,EAGTE,EAAa0D,EAGbwB,GAAS,EAoBTC,EAAc,EAIdhD,EAAgB,IAGhBiD,GACIC,iBAAkB,IAClBC,eAAgB,IAChBC,UAAW,EACXC,mBAAoB,EACpBC,uBAAwB,IACxBC,kBAAmB,EAkzE3B,OA/nEAvG,GAAUF,QAAUA,EAEpBE,EAAUwG,SAAW,EACrBxG,EAAUyG,WAAa,EACvBzG,EAAU0G,WAAa,EACvB1G,EAAU2G,YAAc,EACxB3G,EAAU4G,cAAgB,EAC1B5G,EAAU6G,gBAAkB,EAC5B7G,EAAU8G,gBAAkB,EAC5B9G,EAAU+G,gBAAkB,EAC5B/G,EAAUgH,iBAAmB,EAC7BhH,EAAUiH,OAAS,EAoCnBjH,EAAUkH,OAAS,WACf,GAAIC,GAAGC,EACH/G,EAAI,EACJqC,KACA2E,EAAIC,UACJC,EAAIF,EAAE,GACNG,EAAMD,GAAiB,gBAALA,GACd,WAAc,MAAKA,GAAEE,eAAeL,GAA4B,OAAdD,EAAII,EAAEH,IAA1C,QACd,WAAc,MAAKC,GAAE5F,OAASpB,EAA6B,OAAhB8G,EAAIE,EAAEhH,MAAnC,OA6GtB,OAxGKmH,GAAKJ,EAAI,mBAAsBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KAC1DpG,EAAqB,EAAJmG,GAErBzE,EAAE0E,GAAKpG,EAKFwG,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACvDnG,EAAoB,EAAJkG,GAEpBzE,EAAE0E,GAAKnG,EAMFuG,EAAKJ,EAAI,oBAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,EAAG,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACnErD,EAAoB,EAAPoD,EAAE,GACfrB,EAAoB,EAAPqB,EAAE,IAEXtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KACrCrD,IAAgB+B,EAAkC,GAAf,EAAJqB,GAASA,EAAIA,MAGpDzE,EAAE0E,IAAOrD,EAAY+B,GAOhB0B,EAAKJ,EAAI,WAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,GAAI,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACpElF,EAAiB,EAAPiF,EAAE,GACZlF,EAAiB,EAAPkF,EAAE,IAERtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KAC5B,EAAJD,EAAQjF,IAAaD,EAA+B,GAAf,EAAJkF,GAASA,EAAIA,IAC1CxG,GAAQC,EAAO,EAAGwG,EAAI,kBAAmBD,KAG1DzE,EAAE0E,IAAOlF,EAASD,GAIbuF,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBrG,EAAK,EACLD,GAAeF,IAAWwG,GAAM5C,EAAyBoD,GAClDhH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKzG,EAKF6G,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBpB,KAAaoB,IAAKU,GAA2B,gBAAVA,IAC9BV,IAAMpB,GAAUpF,GAASC,EAAO,EAAG,qBAAsBiH,IACvDlH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKrB,EAKFyB,EAAKJ,EAAI,gBAAmBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACrDpB,EAAkB,EAAJmB,GAElBzE,EAAE0E,GAAKpB,EAKFwB,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KACzDpE,EAAoB,EAAJmE,GAEpBzE,EAAE0E,GAAKpE,EAIFwE,EAAKJ,EAAI,YAEO,gBAALD,GACRlB,EAASkB,EACFxG,GACPC,EAAO,EAAGwG,EAAI,iBAAkBD,IAGxCzE,EAAE0E,GAAKnB,EAEAvD,GASX1C,EAAUyE,IAAM,WAAc,MAAOR,GAAUqD,UAAW3B,EAAEmC,KAQ5D9H,EAAUwE,IAAM,WAAc,MAAOP,GAAUqD,UAAW3B,EAAEoC,KAc5D/H,EAAUgI,OAAS,WACf,GAAIC,GAAU,iBAMVC,EAAkBC,KAAKH,SAAWC,EAAW,QAC7C,WAAc,MAAOxC,GAAW0C,KAAKH,SAAWC,IAChD,WAAc,MAA2C,UAAlB,WAAhBE,KAAKH,SAAwB,IACjC,QAAhBG,KAAKH,SAAsB,GAElC,OAAO,UAAUnF,GACb,GAAIwE,GAAGnH,EAAGE,EAAGqC,EAAG0E,EACZ9G,EAAI,EACJF,KACAiI,EAAO,GAAIpI,GAAU6F,EAKzB,IAHAhD,EAAW,MAANA,GAAehC,EAAYgC,EAAI,EAAG6E,EAAK,IAA6B,EAAL7E,EAAjB7B,EACnDyB,EAAI+C,EAAU3C,EAAKV,GAEf4D,EAGA,GAAK8B,GAAUA,EAAOQ,gBAAkB,CAIpC,IAFAhB,EAAIQ,EAAOQ,gBAAiB,GAAIC,aAAa7F,GAAK,IAEtCA,EAAJpC,GAQJ8G,EAAW,OAAPE,EAAEhH,IAAgBgH,EAAEhH,EAAI,KAAO,IAM9B8G,GAAK,MACNjH,EAAI2H,EAAOQ,gBAAiB,GAAIC,aAAY,IAC5CjB,EAAEhH,GAAKH,EAAE,GACTmH,EAAEhH,EAAI,GAAKH,EAAE,KAKbC,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MAGL,IAAKoF,GAAUA,EAAOU,YAAc,CAKvC,IAFAlB,EAAIQ,EAAOU,YAAa9F,GAAK,GAEjBA,EAAJpC,GAMJ8G,EAAsB,iBAAP,GAAPE,EAAEhH,IAA6C,cAAXgH,EAAEhH,EAAI,GAC/B,WAAXgH,EAAEhH,EAAI,GAAkC,SAAXgH,EAAEhH,EAAI,IACnCgH,EAAEhH,EAAI,IAAM,KAASgH,EAAEhH,EAAI,IAAM,GAAMgH,EAAEhH,EAAI,GAEhD8G,GAAK,KACNU,EAAOU,YAAY,GAAGC,KAAMnB,EAAGhH,IAI/BF,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MACD9B,IACPC,EAAO,GAAI,qBAAsBiH,EAKzC,KAAKxH,EAED,KAAYoC,EAAJpC,GACJ8G,EAAIe,IACK,KAAJf,IAAWhH,EAAEE,KAAO8G,EAAI,KAcrC,KAVA1E,EAAItC,IAAIE,GACRwC,GAAMV,EAGDM,GAAKI,IACNsE,EAAI7B,EAASnD,EAAWU,GACxB1C,EAAEE,GAAKoF,EAAWhD,EAAI0E,GAAMA,GAIf,IAAThH,EAAEE,GAAUF,EAAEkD,MAAOhD,KAG7B,GAAS,EAAJA,EACDF,GAAMC,EAAI,OACP,CAGH,IAAMA,EAAI,GAAc,IAATD,EAAE,GAAUA,EAAEsI,QAASrI,GAAK+B,GAG3C,IAAM9B,EAAI,EAAG8G,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAI9G,KAGhC8B,EAAJ9B,IAAeD,GAAK+B,EAAW9B,GAKxC,MAFA+H,GAAKhI,EAAIA,EACTgI,EAAKjI,EAAIA,EACFiI,MAqGf9E,EAAM,WAGF,QAASoF,GAAUjI,EAAGgC,EAAGkG,GACrB,GAAIvE,GAAGwE,EAAMC,EAAKC,EACdC,EAAQ,EACR1I,EAAII,EAAEgB,OACNuH,EAAMvG,EAAIwG,EACVC,EAAMzG,EAAIwG,EAAY,CAE1B,KAAMxI,EAAIA,EAAEW,QAASf,KACjBwI,EAAMpI,EAAEJ,GAAK4I,EACbH,EAAMrI,EAAEJ,GAAK4I,EAAY,EACzB7E,EAAI8E,EAAML,EAAMC,EAAME,EACtBJ,EAAOI,EAAMH,EAAUzE,EAAI6E,EAAcA,EAAcF,EACvDA,GAAUH,EAAOD,EAAO,IAAQvE,EAAI6E,EAAY,GAAMC,EAAMJ,EAC5DrI,EAAEJ,GAAKuI,EAAOD,CAKlB,OAFII,IAAOtI,EAAE8C,QAAQwF,GAEdtI,EAGX,QAAS0I,GAAS9B,EAAGnH,EAAGkJ,EAAIC,GACxB,GAAIhJ,GAAGiJ,CAEP,IAAKF,GAAMC,EACPC,EAAMF,EAAKC,EAAK,EAAI,OAGpB,KAAMhJ,EAAIiJ,EAAM,EAAOF,EAAJ/I,EAAQA,IAEvB,GAAKgH,EAAEhH,IAAMH,EAAEG,GAAK,CAChBiJ,EAAMjC,EAAEhH,GAAKH,EAAEG,GAAK,EAAI,EACxB,OAIZ,MAAOiJ,GAGX,QAASC,GAAUlC,EAAGnH,EAAGkJ,EAAIT,GAIzB,IAHA,GAAItI,GAAI,EAGA+I,KACJ/B,EAAE+B,IAAO/I,EACTA,EAAIgH,EAAE+B,GAAMlJ,EAAEkJ,GAAM,EAAI,EACxB/B,EAAE+B,GAAM/I,EAAIsI,EAAOtB,EAAE+B,GAAMlJ,EAAEkJ,EAIjC,OAAS/B,EAAE,IAAMA,EAAE5F,OAAS,EAAG4F,EAAEoB,UAIrC,MAAO,UAAWhI,EAAGmC,EAAGC,EAAIC,EAAI6F,GAC5B,GAAIW,GAAKlJ,EAAGC,EAAGmJ,EAAMvJ,EAAGwJ,EAAMC,EAAOC,EAAGC,EAAIC,EAAKC,EAAMC,EAAMC,EAAIC,EAAIC,EACjEC,EAAIC,EACJ7I,EAAId,EAAEc,GAAKqB,EAAErB,EAAI,EAAI,GACrBoB,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAGX,MAAMwC,GAAOA,EAAG,IAAO0H,GAAOA,EAAG,IAE7B,MAAO,IAAIrK,GAGRS,EAAEc,GAAMqB,EAAErB,IAAOoB,GAAK0H,GAAM1H,EAAG,IAAM0H,EAAG,GAAMA,GAG7C1H,GAAe,GAATA,EAAG,KAAY0H,EAAS,EAAJ9I,EAAQA,EAAI,EAHc+I,IAoB5D,KAbAX,EAAI,GAAI3J,GAAUuB,GAClBqI,EAAKD,EAAExJ,KACPC,EAAIK,EAAEL,EAAIwC,EAAExC,EACZmB,EAAIsB,EAAKzC,EAAI,EAEPuI,IACFA,EAAOjD,EACPtF,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDZ,EAAIA,EAAIY,EAAW,GAKjB9B,EAAI,EAAGgK,EAAGhK,KAAQsC,EAAGtC,IAAM,GAAKA,KAGtC,GAFKgK,EAAGhK,IAAOsC,EAAGtC,IAAM,IAAMD,IAErB,EAAJmB,EACDqI,EAAGxH,KAAK,GACRoH,GAAO,MACJ,CAsBH,IArBAS,EAAKtH,EAAGlB,OACR0I,EAAKE,EAAG5I,OACRpB,EAAI,EACJkB,GAAK,EAILtB,EAAIwF,EAAWkD,GAAS0B,EAAG,GAAK,IAE3BpK,EAAI,IACLoK,EAAK3B,EAAU2B,EAAIpK,EAAG0I,GACtBhG,EAAK+F,EAAU/F,EAAI1C,EAAG0I,GACtBwB,EAAKE,EAAG5I,OACRwI,EAAKtH,EAAGlB,QAGZuI,EAAKG,EACLN,EAAMlH,EAAGvB,MAAO,EAAG+I,GACnBL,EAAOD,EAAIpI,OAGI0I,EAAPL,EAAWD,EAAIC,KAAU,GACjCM,EAAKC,EAAGjJ,QACRgJ,EAAG7G,QAAQ,GACX2G,EAAMG,EAAG,GACJA,EAAG,IAAM1B,EAAO,GAAIuB,GAEzB,GAAG,CAOC,GANAjK,EAAI,EAGJqJ,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,GAGjB,EAANR,GAuDD,GAnDAS,EAAOF,EAAI,GACNM,GAAML,IAAOC,EAAOA,EAAOpB,GAASkB,EAAI,IAAM,IAGnD5J,EAAIwF,EAAWsE,EAAOG,GAUjBjK,EAAI,GAEDA,GAAK0I,IAAM1I,EAAI0I,EAAO,GAG1Bc,EAAOf,EAAU2B,EAAIpK,EAAG0I,GACxBe,EAAQD,EAAKhI,OACbqI,EAAOD,EAAIpI,OAGX6H,EAAMH,EAASM,EAAMI,EAAKH,EAAOI,GAGrB,GAAPR,IACDrJ,IAGAsJ,EAAUE,EAAWC,EAALS,EAAaC,EAAKC,EAAIX,EAAOf,MAQvC,GAAL1I,IAASqJ,EAAMrJ,EAAI,GACxBwJ,EAAOY,EAAGjJ,SAGdsI,EAAQD,EAAKhI,OACAqI,EAARJ,GAAeD,EAAKlG,QAAQ,GAGjCgG,EAAUM,EAAKJ,EAAMK,EAAMnB,GAC3BmB,EAAOD,EAAIpI,OAGC,IAAP6H,EAID,MAAUA,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,IAAW,GAC7C7J,IAGAsJ,EAAUM,EAAUC,EAALK,EAAYC,EAAKC,EAAIP,EAAMnB,GAC1CmB,EAAOD,EAAIpI,WAGH,KAAR6H,IACRrJ,IACA4J,GAAO,GAIXD,GAAGvJ,KAAOJ,EAGLqJ,GAAOO,EAAI,GACZA,EAAIC,KAAUnH,EAAGqH,IAAO,GAExBH,GAAQlH,EAAGqH,IACXF,EAAO,UAEHE,IAAOC,GAAgB,MAAVJ,EAAI,KAAgBtI,IAE7CiI,GAAiB,MAAVK,EAAI,GAGLD,EAAG,IAAKA,EAAGnB,QAGrB,GAAKE,GAAQjD,EAAO,CAGhB,IAAMrF,EAAI,EAAGkB,EAAIqI,EAAG,GAAIrI,GAAK,GAAIA,GAAK,GAAIlB,KAC1CU,EAAO4I,EAAG9G,GAAO8G,EAAEvJ,EAAIC,EAAID,EAAI+B,EAAW,GAAM,EAAGW,EAAI0G,OAIvDG,GAAEvJ,EAAIA,EACNuJ,EAAEjH,GAAK8G,CAGX,OAAOG,OAgJfrI,EAAe,WACX,GAAIkJ,GAAa,8BACbC,EAAW,cACXC,EAAY,cACZC,EAAkB,qBAClBC,EAAmB,4BAEvB,OAAO,UAAWnK,EAAGD,EAAKF,EAAKJ,GAC3B,GAAIyI,GACApH,EAAIjB,EAAME,EAAMA,EAAIgB,QAASoJ,EAAkB,GAGnD,IAAKD,EAAgBtJ,KAAKE,GACtBd,EAAEc,EAAIsJ,MAAMtJ,GAAK,KAAW,EAAJA,EAAQ,GAAK,MAClC,CACH,IAAMjB,IAGFiB,EAAIA,EAAEC,QAASgJ,EAAY,SAAWpG,EAAG0G,EAAIC,GAEzC,MADApC,GAAoC,MAA3BoC,EAAKA,EAAGhI,eAAyB,GAAW,KAANgI,EAAY,EAAI,EACvD7K,GAAKA,GAAKyI,EAAYvE,EAAL0G,IAGzB5K,IACAyI,EAAOzI,EAGPqB,EAAIA,EAAEC,QAASiJ,EAAU,MAAOjJ,QAASkJ,EAAW,SAGnDlK,GAAOe,GAAI,MAAO,IAAIvB,GAAWuB,EAAGoH,EAKzChI,IAAQC,EAAOE,EAAI,SAAYZ,EAAI,SAAWA,EAAI,IAAO,UAAWM,GACxEC,EAAEc,EAAI,KAGVd,EAAEN,EAAIM,EAAEL,EAAI,KACZU,EAAK,MAmNb6E,EAAEqF,cAAgBrF,EAAEsF,IAAM,WACtB,GAAIxK,GAAI,GAAIT,GAAUU,KAEtB,OADKD,GAAEc,EAAI,IAAId,EAAEc,EAAI,GACdd,GAQXkF,EAAEuF,KAAO,WACL,MAAOnK,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAWnDuF,EAAEwF,WAAaxF,EAAE2D,IAAM,SAAW1G,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAEyF,cAAgBzF,EAAE9C,GAAK,WACrB,GAAI5C,GAAGkH,EACHhH,EAAIO,KAAKP,CAEb,KAAMA,EAAI,MAAO,KAIjB,IAHAF,IAAQkH,EAAIhH,EAAEsB,OAAS,GAAM8I,EAAU7J,KAAKN,EAAI+B,IAAeA,EAG1DgF,EAAIhH,EAAEgH,GAAK,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9C,MAFS,GAAJA,IAAQA,EAAI,GAEVA,GAwBX0F,EAAE0F,UAAY1F,EAAErC,IAAM,SAAWV,EAAG1C,GAEhC,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAKc,EAAgBC,IAQ7D0E,EAAE2F,mBAAqB3F,EAAE4F,SAAW,SAAW3I,EAAG1C,GAE9C,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAK,EAAG,IAQhDyF,EAAE6F,OAAS7F,EAAE8F,GAAK,SAAW7I,EAAG1C,GAE5B,MADAY,GAAK,EAC6C,IAA3CqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAE+F,MAAQ,WACN,MAAO3K,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEgG,YAAchG,EAAEoC,GAAK,SAAWnF,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAEiG,qBAAuBjG,EAAEkG,IAAM,SAAWjJ,EAAG1C,GAE3C,MADAY,GAAK,EACqD,KAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAuB,IAANA,GAQnEyF,EAAEmG,SAAW,WACT,QAASpL,KAAKP,GAOlBwF,EAAEoG,UAAYpG,EAAEqG,MAAQ,WACpB,QAAStL,KAAKP,GAAKoK,EAAU7J,KAAKN,EAAI+B,GAAazB,KAAKP,EAAEsB,OAAS,GAOvEkE,EAAEkF,MAAQ,WACN,OAAQnK,KAAKa,GAOjBoE,EAAEsG,WAAatG,EAAEuG,MAAQ,WACrB,MAAOxL,MAAKa,EAAI,GAOpBoE,EAAEwG,OAAS,WACP,QAASzL,KAAKP,GAAkB,GAAbO,KAAKP,EAAE,IAQ9BwF,EAAEyG,SAAWzG,EAAEmC,GAAK,SAAWlF,EAAG1C,GAE9B,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAE0G,kBAAoB1G,EAAE2G,IAAM,SAAW1J,EAAG1C,GAExC,MADAY,GAAK,EACqD,MAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAwB,IAANA,GAwBpEyF,EAAE4G,MAAQ5G,EAAE6G,IAAM,SAAW5J,EAAG1C,GAC5B,GAAIG,GAAGwE,EAAG4H,EAAGC,EACTjM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGrC,IAAKjD,GAAKnH,EAEN,MADA0C,GAAErB,GAAKrB,EACAO,EAAEkM,KAAK/J,EAGlB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO1H,IAAOC,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAWqK,EAAK5J,EAAI6J,IAGxE,KAAM3H,EAAG,KAAO0H,EAAG,GAGf,MAAOA,GAAG,IAAOzH,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAW2C,EAAG,GAAKlC,EAGrC,GAAjBQ,GAAsB,EAAI,GASpC,GALA2L,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAaf,KAXKH,EAAW,EAAJrF,IACRA,GAAKA,EACLoF,EAAI9J,IAEJkK,EAAKD,EACLH,EAAIpC,GAGRoC,EAAEK,UAGI5M,EAAImH,EAAGnH,IAAKuM,EAAErK,KAAK,IACzBqK,EAAEK,cAMF,KAFAjI,GAAM6H,GAASrF,EAAI1E,EAAGlB,SAAavB,EAAImK,EAAG5I,SAAa4F,EAAInH,EAErDmH,EAAInH,EAAI,EAAO2E,EAAJ3E,EAAOA,IAEpB,GAAKyC,EAAGzC,IAAMmK,EAAGnK,GAAK,CAClBwM,EAAO/J,EAAGzC,GAAKmK,EAAGnK,EAClB,OAYZ,GANIwM,IAAMD,EAAI9J,EAAIA,EAAK0H,EAAIA,EAAKoC,EAAG7J,EAAErB,GAAKqB,EAAErB,GAE5CrB,GAAM2E,EAAIwF,EAAG5I,SAAapB,EAAIsC,EAAGlB,QAI5BvB,EAAI,EAAI,KAAQA,IAAKyC,EAAGtC,KAAO,GAIpC,IAHAH,EAAIwF,EAAO,EAGHb,EAAIwC,GAAK,CAEb,GAAK1E,IAAKkC,GAAKwF,EAAGxF,GAAK,CACnB,IAAMxE,EAAIwE,EAAGxE,IAAMsC,IAAKtC,GAAIsC,EAAGtC,GAAKH,KAClCyC,EAAGtC,GACLsC,EAAGkC,IAAMa,EAGb/C,EAAGkC,IAAMwF,EAAGxF,GAIhB,KAAiB,GAATlC,EAAG,GAASA,EAAG8F,UAAWoE,GAGlC,MAAMlK,GAAG,GAWFiC,EAAWhC,EAAGD,EAAIkK,IAPrBjK,EAAErB,EAAqB,GAAjBN,EAAqB,GAAK,EAChC2B,EAAEzC,GAAMyC,EAAExC,EAAI,GACPwC,IA8Bf+C,EAAEoH,OAASpH,EAAEqH,IAAM,SAAWpK,EAAG1C,GAC7B,GAAIyJ,GAAGpI,EACHd,EAAIC,IAMR,OAJAI,GAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAGhBO,EAAEN,IAAMyC,EAAErB,GAAKqB,EAAEzC,IAAMyC,EAAEzC,EAAE,GACtB,GAAIH,GAAUsK,MAGZ1H,EAAEzC,GAAKM,EAAEN,IAAMM,EAAEN,EAAE,GACrB,GAAIH,GAAUS,IAGL,GAAfuF,GAIDzE,EAAIqB,EAAErB,EACNqB,EAAErB,EAAI,EACNoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAG,GAClBA,EAAErB,EAAIA,EACNoI,EAAEpI,GAAKA,GAEPoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAGoD,GAGfvF,EAAE8L,MAAO5C,EAAEsD,MAAMrK,MAQ5B+C,EAAEuH,QAAUvH,EAAEwH,IAAM,WAChB,GAAI1M,GAAI,GAAIT,GAAUU,KAEtB,OADAD,GAAEc,GAAKd,EAAEc,GAAK,KACPd,GAwBXkF,EAAEgH,KAAOhH,EAAEyH,IAAM,SAAWxK,EAAG1C,GAC3B,GAAIuM,GACAhM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGpC,IAAKjD,GAAKnH,EAEP,MADA0C,GAAErB,GAAKrB,EACAO,EAAE8L,MAAM3J,EAGnB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO,IAAIrK,GAAWqH,EAAI,EAI5C,KAAM1E,EAAG,KAAO0H,EAAG,GAAK,MAAOA,GAAG,GAAKzH,EAAI,GAAI5C,GAAW2C,EAAG,GAAKlC,EAAQ,EAAJ4G,GAQ1E,GALAuF,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAUf,IATKxF,EAAI,GACLwF,EAAKD,EACLH,EAAIpC,IAEJhD,GAAKA,EACLoF,EAAI9J,GAGR8J,EAAEK,UACMzF,IAAKoF,EAAErK,KAAK,IACpBqK,EAAEK,UAUN,IAPAzF,EAAI1E,EAAGlB,OACPvB,EAAImK,EAAG5I,OAGM,EAAR4F,EAAInH,IAAQuM,EAAIpC,EAAIA,EAAK1H,EAAIA,EAAK8J,EAAGvM,EAAImH,GAGxCA,EAAI,EAAGnH,GACTmH,GAAM1E,IAAKzC,GAAKyC,EAAGzC,GAAKmK,EAAGnK,GAAKmH,GAAM3B,EAAO,EAC7C/C,EAAGzC,IAAMwF,CAUb,OAPI2B,KACA1E,EAAGY,QAAQ8D,KACTwF,GAKCjI,EAAWhC,EAAGD,EAAIkK,IAS7BlH,EAAE0H,UAAY1H,EAAET,GAAK,SAAUoI,GAC3B,GAAIrN,GAAGkH,EACH1G,EAAIC,KACJP,EAAIM,EAAEN,CAQV,IALU,MAALmN,GAAaA,MAAQA,GAAW,IAANA,GAAiB,IAANA,IAClC3M,GAAQC,EAAO,GAAI,WAAagH,EAAS0F,GACxCA,KAAOA,IAAIA,EAAI,QAGlBnN,EAAI,MAAO,KAIjB,IAHAgH,EAAIhH,EAAEsB,OAAS,EACfxB,EAAIkH,EAAIhF,EAAW,EAEdgF,EAAIhH,EAAEgH,GAAK,CAGZ,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9B,IAAMkH,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAIlH,MAKtC,MAFKqN,IAAK7M,EAAEL,EAAI,EAAIH,IAAIA,EAAIQ,EAAEL,EAAI,GAE3BH,GAiBX0F,EAAE5E,MAAQ,SAAW8B,EAAIC,GACrB,GAAI7C,GAAI,GAAID,GAAUU,KAOtB,QALW,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACvC3G,EAAOd,IAAK4C,EAAKnC,KAAKN,EAAI,EAAS,MAAN0C,GAC1BjC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,GAG3ChB,GAgBX0F,EAAE8C,MAAQ,SAAUhG,GAChB,GAAIxC,GAAIS,IACR,OAAOG,GAAY4B,GAAI8K,EAAkBA,EAAkB,GAAI,YAG3DtN,EAAEgN,MAAO,KAAOtI,EAASlC,IACzB,GAAIzC,GAAWC,EAAEE,GAAKF,EAAEE,EAAE,MAAaoN,EAAL9K,GAAyBA,EAAI8K,GAC7DtN,EAAEsB,GAAU,EAAJkB,EAAQ,EAAI,EAAI,GACxBxC,IAeV0F,EAAE6H,WAAa7H,EAAE8H,KAAO,WACpB,GAAIrJ,GAAGnE,EAAGyC,EAAGgL,EAAKjB,EACdhM,EAAIC,KACJP,EAAIM,EAAEN,EACNoB,EAAId,EAAEc,EACNnB,EAAIK,EAAEL,EACNyC,EAAK7B,EAAiB,EACtB2M,EAAO,GAAI3N,GAAU,MAGzB,IAAW,IAANuB,IAAYpB,IAAMA,EAAE,GACrB,MAAO,IAAIH,IAAYuB,GAAS,EAAJA,KAAYpB,GAAKA,EAAE,IAAOmK,IAAMnK,EAAIM,EAAI,EAAI,EA8B5E,IA1BAc,EAAI4G,KAAKsF,MAAOhN,GAIN,GAALc,GAAUA,GAAK,EAAI,GACpBtB,EAAImD,EAAcjD,IACXF,EAAEwB,OAASrB,GAAM,GAAK,IAAIH,GAAK,KACtCsB,EAAI4G,KAAKsF,KAAKxN,GACdG,EAAImK,GAAYnK,EAAI,GAAM,IAAY,EAAJA,GAASA,EAAI,GAE1CmB,GAAK,EAAI,EACVtB,EAAI,KAAOG,GAEXH,EAAIsB,EAAEyC,gBACN/D,EAAIA,EAAEmB,MAAO,EAAGnB,EAAE6B,QAAQ,KAAO,GAAM1B,GAG3CsC,EAAI,GAAI1C,GAAUC,IAElByC,EAAI,GAAI1C,GAAWuB,EAAI,IAOtBmB,EAAEvC,EAAE,GAML,IALAC,EAAIsC,EAAEtC,EACNmB,EAAInB,EAAIyC,EACC,EAAJtB,IAAQA,EAAI,KAOb,GAHAkL,EAAI/J,EACJA,EAAIiL,EAAKV,MAAOR,EAAEE,KAAMrJ,EAAK7C,EAAGgM,EAAG5J,EAAI,KAElCO,EAAeqJ,EAAEtM,GAAMiB,MAAO,EAAGG,MAAUtB,EAC3CmD,EAAeV,EAAEvC,IAAMiB,MAAO,EAAGG,GAAM,CAWxC,GANKmB,EAAEtC,EAAIA,KAAMmB,EACjBtB,EAAIA,EAAEmB,MAAOG,EAAI,EAAGA,EAAI,GAKd,QAALtB,IAAgByN,GAAY,QAALzN,GAgBrB,IAIIA,KAAOA,EAAEmB,MAAM,IAAqB,KAAfnB,EAAEuD,OAAO,MAGjCzC,EAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAG,GACpCoD,GAAK1B,EAAEuK,MAAMvK,GAAG+I,GAAGhL,GAGvB,OAvBA,IAAMiN,IACF3M,EAAO0L,EAAGA,EAAErM,EAAIY,EAAiB,EAAG,GAE/ByL,EAAEQ,MAAMR,GAAGhB,GAAGhL,IAAK,CACpBiC,EAAI+J,CACJ,OAIR5J,GAAM,EACNtB,GAAK,EACLmM,EAAM,EAkBtB,MAAO3M,GAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAGC,EAAemD,IAwB9DuB,EAAEsH,MAAQtH,EAAEiI,IAAM,SAAWhL,EAAG1C,GAC5B,GAAIC,GAAGC,EAAGC,EAAGwE,EAAGpC,EAAG2B,EAAGyJ,EAAKhF,EAAKC,EAAKgF,EAAKC,EAAKC,EAAKC,EAChDtF,EAAMuF,EACNzN,EAAIC,KACJiC,EAAKlC,EAAEN,EACPkK,GAAOvJ,EAAK,GAAI8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAAMC,CAGhD,MAAMwC,GAAO0H,GAAO1H,EAAG,IAAO0H,EAAG,IAmB7B,OAhBM5J,EAAEc,IAAMqB,EAAErB,GAAKoB,IAAOA,EAAG,KAAO0H,GAAMA,IAAOA,EAAG,KAAO1H,EACzDC,EAAEzC,EAAIyC,EAAExC,EAAIwC,EAAErB,EAAI,MAElBqB,EAAErB,GAAKd,EAAEc,EAGHoB,GAAO0H,GAKTzH,EAAEzC,GAAK,GACPyC,EAAExC,EAAI,GALNwC,EAAEzC,EAAIyC,EAAExC,EAAI,MASbwC,CAYX,KATAxC,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDS,EAAErB,GAAKd,EAAEc,EACTsM,EAAMlL,EAAGlB,OACTqM,EAAMzD,EAAG5I,OAGEqM,EAAND,IAAYI,EAAKtL,EAAIA,EAAK0H,EAAIA,EAAK4D,EAAI5N,EAAIwN,EAAKA,EAAMC,EAAKA,EAAMzN,GAGhEA,EAAIwN,EAAMC,EAAKG,KAAS5N,IAAK4N,EAAG7L,KAAK,IAK3C,IAHAuG,EAAOjD,EACPwI,EAAWjF,EAEL5I,EAAIyN,IAAOzN,GAAK,GAAK,CAKvB,IAJAF,EAAI,EACJ4N,EAAM1D,EAAGhK,GAAK6N,EACdF,EAAM3D,EAAGhK,GAAK6N,EAAW,EAEnBzL,EAAIoL,EAAKhJ,EAAIxE,EAAIoC,EAAGoC,EAAIxE,GAC1BwI,EAAMlG,IAAKF,GAAKyL,EAChBpF,EAAMnG,EAAGF,GAAKyL,EAAW,EACzB9J,EAAI4J,EAAMnF,EAAMC,EAAMiF,EACtBlF,EAAMkF,EAAMlF,EAAUzE,EAAI8J,EAAaA,EAAaD,EAAGpJ,GAAK1E,EAC5DA,GAAM0I,EAAMF,EAAO,IAAQvE,EAAI8J,EAAW,GAAMF,EAAMlF,EACtDmF,EAAGpJ,KAAOgE,EAAMF,CAGpBsF,GAAGpJ,GAAK1E,EASZ,MANIA,KACEC,EAEF6N,EAAGxF,QAGA7D,EAAWhC,EAAGqL,EAAI7N,IAgB7BuF,EAAEwI,SAAW,SAAWjJ,EAAIpC,GACxB,GAAI7C,GAAI,GAAID,GAAUU,KAGtB,OAFAwE,GAAW,MAANA,GAAerE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aAA4B,EAALxC,EAAP,KAChEpC,EAAW,MAANA,GAAejC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,EACxDiE,EAAKnE,EAAOd,EAAGiF,EAAIpC,GAAO7C,GAgBrC0F,EAAE3B,cAAgB,SAAWnB,EAAIC,GAC7B,MAAOW,GAAQ/C,KACP,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MAAS7E,EAAK,EAAI,KAAMC,EAAI,KAmBxE6C,EAAEyI,QAAU,SAAWvL,EAAIC,GACvB,MAAOW,GAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACrD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,KA0BtC6C,EAAE0I,SAAW,SAAWxL,EAAIC,GACxB,GAAItC,GAAMiD,EAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACxD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,GAElC,IAAKpC,KAAKP,EAAI,CACV,GAAIE,GACAiO,EAAM9N,EAAI+N,MAAM,KAChBC,GAAMvI,EAAOG,UACbqI,GAAMxI,EAAOI,mBACbF,EAAiBF,EAAOE,eACxBuI,EAAUJ,EAAI,GACdK,EAAeL,EAAI,GACnBpC,EAAQxL,KAAKa,EAAI,EACjBqN,EAAY1C,EAAQwC,EAAQtN,MAAM,GAAKsN,EACvCnO,EAAMqO,EAAUnN,MAIpB,IAFIgN,IAAIpO,EAAImO,EAAIA,EAAKC,EAAIA,EAAKpO,EAAGE,GAAOF,GAEnCmO,EAAK,GAAKjO,EAAM,EAAI,CAIrB,IAHAF,EAAIE,EAAMiO,GAAMA,EAChBE,EAAUE,EAAUC,OAAQ,EAAGxO,GAEnBE,EAAJF,EAASA,GAAKmO,EAClBE,GAAWvI,EAAiByI,EAAUC,OAAQxO,EAAGmO,EAGhDC,GAAK,IAAIC,GAAWvI,EAAiByI,EAAUxN,MAAMf,IACtD6L,IAAOwC,EAAU,IAAMA,GAG/BlO,EAAMmO,EACFD,EAAUzI,EAAOC,mBAAuBuI,GAAMxI,EAAOM,mBACnDoI,EAAanN,QAAS,GAAIN,QAAQ,OAASuN,EAAK,OAAQ,KACxD,KAAOxI,EAAOK,wBACdqI,GACFD,EAGR,MAAOlO,IAgBXmF,EAAEmJ,WAAa,SAAUC,GACrB,GAAIT,GAAKU,EAAIC,EAAI7O,EAAG8O,EAAKjP,EAAGkP,EAAIxF,EAAGpI,EAC/BkB,EAAI9B,EACJF,EAAIC,KACJiC,EAAKlC,EAAEN,EACPqC,EAAI,GAAIxC,GAAU6F,GAClBuJ,EAAKJ,EAAK,GAAIhP,GAAU6F,GACxBwJ,EAAKF,EAAK,GAAInP,GAAU6F,EAoB5B,IAlBW,MAANkJ,IACDpO,GAAS,EACTV,EAAI,GAAID,GAAU+O,GAClBpO,EAAS8B,KAEDA,EAAIxC,EAAE+L,UAAa/L,EAAE6H,GAAGjC,MAExBlF,GACAC,EAAO,GACL,oBAAuB6B,EAAI,eAAiB,kBAAoBsM,GAKtEA,GAAMtM,GAAKxC,EAAEE,GAAKY,EAAOd,EAAGA,EAAEG,EAAI,EAAG,GAAIyL,IAAIhG,GAAO5F,EAAI,QAI1D0C,EAAK,MAAOlC,GAAEqD,UAgBpB,KAfAvC,EAAI6B,EAAcT,GAIlBvC,EAAIoC,EAAEpC,EAAImB,EAAEE,OAAShB,EAAEL,EAAI,EAC3BoC,EAAErC,EAAE,GAAKmF,GAAY4J,EAAM9O,EAAI+B,GAAa,EAAIA,EAAW+M,EAAMA,GACjEH,GAAMA,GAAM9O,EAAEqJ,IAAI9G,GAAK,EAAMpC,EAAI,EAAIoC,EAAI4M,EAAOnP,EAEhDiP,EAAMjN,EACNA,EAAU,EAAI,EACdhC,EAAI,GAAID,GAAUuB,GAGlB4N,EAAGhP,EAAE,GAAK,EAGNwJ,EAAIrG,EAAKrD,EAAGuC,EAAG,EAAG,GAClByM,EAAKD,EAAGrC,KAAMhD,EAAEsD,MAAMoC,IACH,GAAdJ,EAAG3F,IAAIyF,IACZC,EAAKK,EACLA,EAAKJ,EACLG,EAAKD,EAAGxC,KAAMhD,EAAEsD,MAAOgC,EAAKG,IAC5BD,EAAKF,EACLzM,EAAIvC,EAAEsM,MAAO5C,EAAEsD,MAAOgC,EAAKzM,IAC3BvC,EAAIgP,CAgBR,OAbAA,GAAK3L,EAAKyL,EAAGxC,MAAMyC,GAAKK,EAAI,EAAG,GAC/BF,EAAKA,EAAGxC,KAAMsC,EAAGhC,MAAMmC,IACvBJ,EAAKA,EAAGrC,KAAMsC,EAAGhC,MAAMoC,IACvBF,EAAG5N,EAAI6N,EAAG7N,EAAId,EAAEc,EAChBnB,GAAK,EAGLkO,EAAMhL,EAAK8L,EAAIC,EAAIjP,EAAGa,GAAgBsL,MAAM9L,GAAGwK,MAAM3B,IAC/ChG,EAAK6L,EAAIH,EAAI5O,EAAGa,GAAgBsL,MAAM9L,GAAGwK,OAAU,GAC7CmE,EAAGtL,WAAYuL,EAAGvL,aAClBqL,EAAGrL,WAAYkL,EAAGlL,YAE9B7B,EAAUiN,EACHZ,GAOX3I,EAAE2J,SAAW,WACT,GAAI7O,GAAIC,IAGR,QAAQD,IAAOA,EAAEc,EAAU,EAANd,EAAEc,EAAQ+I,MAenC3E,EAAE4J,QAAU5J,EAAE1C,IAAM,SAAUhD,GAC1B,GAAIwC,GAAGG,EACHvC,EAAIoF,EAAe,EAAJxF,GAASA,GAAKA,GAC7BQ,EAAIC,IAGR,KAAMG,EAAYZ,GAAIsN,EAAkBA,EAAkB,GAAI,eACzDzB,SAAS7L,IAAMI,EAAIkN,IAAsBtN,GAAK,IAC/CuP,WAAWvP,IAAMA,KAAQA,EAAIqK,MAC7B,MAAO,IAAItK,GAAWmI,KAAKlF,KAAMxC,EAAGR,GASxC,KAHAwC,EAAIO,EAAgBwC,EAAUxC,EAAgBb,EAAW,GAAM,EAC/DS,EAAI,GAAI5C,GAAU6F,KAEN,CAER,GAAKxF,EAAI,EAAI,CAET,GADAuC,EAAIA,EAAEqK,MAAMxM,IACNmC,EAAEzC,EAAI,KACPsC,IAAKG,EAAEzC,EAAEsB,OAASgB,IAAIG,EAAEzC,EAAEsB,OAASgB,GAI5C,GADApC,EAAIoF,EAAWpF,EAAI,IACbA,EAAI,KAEVI,GAAIA,EAAEwM,MAAMxM,GACPgC,GAAKhC,EAAEN,GAAKM,EAAEN,EAAEsB,OAASgB,IAAIhC,EAAEN,EAAEsB,OAASgB,GAInD,MADS,GAAJxC,IAAQ2C,EAAIiD,EAAIvC,IAAIV,IAClBH,EAAI1B,EAAO6B,EAAGI,EAAe/B,GAAkB2B,GAkB1D+C,EAAE8J,YAAc,SAAWvK,EAAIpC,GAC3B,MAAOW,GAAQ/C,KAAY,MAANwE,GAAcrE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aACtD,EAALxC,EAAS,KAAMpC,EAAI,KAgB3B6C,EAAE7B,SAAW,SAAU5D,GACnB,GAAIM,GACAP,EAAIS,KACJa,EAAItB,EAAEsB,EACNnB,EAAIH,EAAEG,CAyBV,OAtBW,QAANA,EAEGmB,GACAf,EAAM,WACG,EAAJe,IAAQf,EAAM,IAAMA,IAEzBA,EAAM,OAGVA,EAAM4C,EAAenD,EAAEE,GAOnBK,EALM,MAALN,GAAcW,EAAYX,EAAG,EAAG,GAAI,GAAI,QAKnC0B,EAAauB,EAAc3C,EAAKJ,GAAS,EAAJF,EAAO,GAAIqB,GAJ3CwC,GAAL3D,GAAmBA,GAAK0F,EAC1B9B,EAAexD,EAAKJ,GACpB+C,EAAc3C,EAAKJ,GAKlB,EAAJmB,GAAStB,EAAEE,EAAE,KAAKK,EAAM,IAAMA,IAGhCA,GAQXmF,EAAE+J,UAAY/J,EAAEgK,MAAQ,WACpB,MAAO5O,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEiK,QAAUjK,EAAEkK,OAAS,WACnB,MAAOnP,MAAKoD,YAcE,MAAb/D,GAAoBC,EAAUkH,OAAOnH,GAEnCC,EAOX,QAASuK,GAAStK,GACd,GAAII,GAAQ,EAAJJ,CACR,OAAOA,GAAI,GAAKA,IAAMI,EAAIA,EAAIA,EAAI,EAKtC,QAAS+C,GAAciE,GAMnB,IALA,GAAI9F,GAAG+L,EACHjN,EAAI,EACJwE,EAAIwC,EAAE5F,OACNiB,EAAI2E,EAAE,GAAK,GAEHxC,EAAJxE,GAAS,CAGb,IAFAkB,EAAI8F,EAAEhH,KAAO,GACbiN,EAAInL,EAAWZ,EAAEE,OACT6L,IAAK/L,EAAI,IAAMA,GACvBmB,GAAKnB,EAIT,IAAMsD,EAAInC,EAAEjB,OAA8B,KAAtBiB,EAAEf,aAAakD,KACnC,MAAOnC,GAAEtB,MAAO,EAAGyD,EAAI,GAAK,GAKhC,QAASsE,GAAS1I,EAAGmC,GACjB,GAAIyE,GAAGnH,EACHyC,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,EACPE,EAAII,EAAEc,EACNsD,EAAIjC,EAAErB,EACNkB,EAAIhC,EAAEL,EACN0P,EAAIlN,EAAExC,CAGV,KAAMC,IAAMwE,EAAI,MAAO,KAMvB,IAJAwC,EAAI1E,IAAOA,EAAG,GACdzC,EAAImK,IAAOA,EAAG,GAGThD,GAAKnH,EAAI,MAAOmH,GAAInH,EAAI,GAAK2E,EAAIxE,CAGtC,IAAKA,GAAKwE,EAAI,MAAOxE,EAMrB,IAJAgH,EAAQ,EAAJhH,EACJH,EAAIuC,GAAKqN,GAGHnN,IAAO0H,EAAK,MAAOnK,GAAI,GAAKyC,EAAK0E,EAAI,EAAI,EAG/C,KAAMnH,EAAI,MAAOuC,GAAIqN,EAAIzI,EAAI,EAAI,EAKjC,KAHAxC,GAAMpC,EAAIE,EAAGlB,SAAaqO,EAAIzF,EAAG5I,QAAWgB,EAAIqN,EAG1CzP,EAAI,EAAOwE,EAAJxE,EAAOA,IAAM,GAAKsC,EAAGtC,IAAMgK,EAAGhK,GAAK,MAAOsC,GAAGtC,GAAKgK,EAAGhK,GAAKgH,EAAI,EAAI,EAG/E,OAAO5E,IAAKqN,EAAI,EAAIrN,EAAIqN,EAAIzI,EAAI,EAAI,GASxC,QAASM,GAAsB1H,EAAGuE,EAAKC,GACnC,OAASxE,EAAI0E,EAAS1E,KAAQuE,GAAYC,GAALxE,EAIzC,QAASoE,GAAQ0L,GACb,MAA8C,kBAAvCC,OAAOpK,UAAU9B,SAASQ,KAAKyL,GAS1C,QAAS7M,GAAW1C,EAAK8B,EAAQD,GAO7B,IANA,GAAIwC,GAEAoL,EADA3B,GAAO,GAEPjO,EAAI,EACJE,EAAMC,EAAIiB,OAEFlB,EAAJF,GAAW,CACf,IAAM4P,EAAO3B,EAAI7M,OAAQwO,IAAQ3B,EAAI2B,IAAS3N,GAG9C,IAFAgM,EAAKzJ,EAAI,IAAO1D,EAASW,QAAStB,EAAIgD,OAAQnD,MAEtCwE,EAAIyJ,EAAI7M,OAAQoD,IAEfyJ,EAAIzJ,GAAKxC,EAAU,IACD,MAAdiM,EAAIzJ,EAAI,KAAayJ,EAAIzJ,EAAI,GAAK,GACvCyJ,EAAIzJ,EAAI,IAAMyJ,EAAIzJ,GAAKxC,EAAU,EACjCiM,EAAIzJ,IAAMxC,GAKtB,MAAOiM,GAAIxB,UAIf,QAAS9I,GAAexD,EAAKJ,GACzB,OAASI,EAAIiB,OAAS,EAAIjB,EAAIgD,OAAO,GAAK,IAAMhD,EAAIY,MAAM,GAAKZ,IACvD,EAAJJ,EAAQ,IAAM,MAASA,EAI/B,QAAS+C,GAAc3C,EAAKJ,GACxB,GAAIG,GAAK+M,CAGT,IAAS,EAAJlN,EAAQ,CAGT,IAAMkN,EAAI,OAAQlN,EAAGkN,GAAK,KAC1B9M,EAAM8M,EAAI9M,MAOV,IAHAD,EAAMC,EAAIiB,SAGHrB,EAAIG,EAAM,CACb,IAAM+M,EAAI,IAAKlN,GAAKG,IAAOH,EAAGkN,GAAK,KACnC9M,GAAO8M,MACK/M,GAAJH,IACRI,EAAMA,EAAIY,MAAO,EAAGhB,GAAM,IAAMI,EAAIY,MAAMhB,GAIlD,OAAOI,GAIX,QAASmE,GAAS1E,GAEd,MADAA,GAAIuP,WAAWvP,GACJ,EAAJA,EAAQuF,EAASvF,GAAKwF,EAAUxF,GAtkF3C,GAAID,GAAW6H,EAAQvG,EACnBO,EAAY,uCACZ2D,EAAW2C,KAAK+C,KAChBzF,EAAY0C,KAAKuD,MACjB9D,EAAU,iCACV/D,EAAe,gBACfnC,EAAgB,kDAChBP,EAAW,mEACXuE,EAAO,KACPvD,EAAW,GACXoL,EAAmB,iBAEnBjI,GAAY,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAC7E2D,EAAY,IAOZvB,EAAM,GA4jFV,IAHA1H,EAAYF,IAGU,kBAAVoQ,SAAwBA,OAAOC,IACvCD,OAAQ,WAAc,MAAOlQ,SAG1B,IAAsB,mBAAVoQ,SAAyBA,OAAOC,SAE/C,GADAD,OAAOC,QAAUrQ,GACX6H,EAAS,IAAMA,EAASyI,QAAQ,UAAa,MAAOlQ,SAI1DP,GAAOG,UAAYA,GAExBU"} \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/package.json b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/package.json deleted file mode 100644 index bc020c1..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/bignumber.js/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "bignumber.js", - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "version": "2.0.5", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "repository" : { - "type": "git", - "url": "https://github.com/MikeMcl/bignumber.js.git" - }, - "main": "bignumber", - "author": { - "name": "Michael Mclaughlin", - "email": "M8ch88l@gmail.com" - }, - "engines": { - "node": "*" - }, - "license": "MIT", - "scripts": { - "test": "node ./test/every-test.js", - "build": "uglifyjs bignumber.js --source-map doc/bignumber.js.map -c -m -o bignumber.min.js --preamble \"/* bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */\"" - } -} \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/.bower.json b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/.bower.json deleted file mode 100644 index f3eb4c2..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/.bower.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {}, - "ignore": [], - "_release": "3.1.4", - "_resolution": { - "type": "version", - "tag": "3.1.4", - "commit": "9cc7f829741eddabe693a704f10f972fb9c0d5a6" - }, - "_source": "git://github.com/brix/crypto-js.git", - "_target": "~3.1.4", - "_originalSource": "crypto-js" -} \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/CONTRIBUTING.md b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/CONTRIBUTING.md deleted file mode 100644 index 09bf774..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/CONTRIBUTING.md +++ /dev/null @@ -1,28 +0,0 @@ -# Contribution - -# Git Flow - -The crypto-js project uses [git flow](https://github.com/nvie/gitflow) to manage branches. -Do your changes on the `develop` or even better on a `feature/*` branch. Don't do any changes on the `master` branch. - -# Pull request - -Target your pull request on `develop` branch. Other pull request won't be accepted. - -# How to build - -1. Clone - -2. Run - - ```sh - npm install - ``` - -3. Run - - ```sh - npm run build - ``` - -4. Check `build` folder \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/README.md b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/README.md deleted file mode 100644 index 5ead0a0..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# crypto-js - -Modularized port of googlecode project crypto-js. - -## Node.js (Install) - -Requirements: - -- Node.js -- npm (Node.js package manager) - -```bash -npm install crypto-js -``` - -### Usage - -Modular include: - -```javascript -var AES = require("crypto-js/aes"); -var SHA256 = require("crypto-js/sha256"); -... -console.log(SHA256("Message")); -``` - -Including all libraries, for access to extra methods: - -```javascript -var CryptoJS = require("crypto-js"); -console.log(CryptoJS.HmacSHA1("Message", "Key")); -``` - -## Client (browser) - -Requirements: - -- Node.js -- Bower (package manager for frontend) - -```bash -bower install crypto-js -``` - -### Usage - -Modular include: - -```javascript -require.config({ - packages: [ - { - name: 'crypto-js', - location: 'path-to/bower_components/crypto-js', - main: 'index' - } - ] -}); - -require(["crypto-js/aes", "crypto-js/sha256"], function (AES, SHA256) { - console.log(SHA256("Message")); -}); -``` - -Including all libraries, for access to extra methods: - -```javascript -// Above-mentioned will work or use this simple form -require.config({ - paths: { - 'require-js': 'path-to/bower_components/crypto-js/crypto-js' - } -}); - -require(["crypto-js"], function (CryptoJS) { - console.log(CryptoJS.HmacSHA1("Message", "Key")); -}); -``` - -### Usage without RequireJS - -```html - - - -## API - -See: https://code.google.com/p/crypto-js - -### List of modules - - -- ```crypto-js/core``` -- ```crypto-js/x64-core``` -- ```crypto-js/lib-typedarrays``` - ---- - -- ```crypto-js/md5``` -- ```crypto-js/sha1``` -- ```crypto-js/sha256``` -- ```crypto-js/sha224``` -- ```crypto-js/sha512``` -- ```crypto-js/sha384``` -- ```crypto-js/sha3``` -- ```crypto-js/ripemd160``` - ---- - -- ```crypto-js/hmac-md5``` -- ```crypto-js/hmac-sha1``` -- ```crypto-js/hmac-sha256``` -- ```crypto-js/hmac-sha224``` -- ```crypto-js/hmac-sha512``` -- ```crypto-js/hmac-sha384``` -- ```crypto-js/hmac-sha3``` -- ```crypto-js/hmac-ripemd160``` - ---- - -- ```crypto-js/pbkdf2``` - ---- - -- ```crypto-js/aes``` -- ```crypto-js/tripledes``` -- ```crypto-js/rc4``` -- ```crypto-js/rabbit``` -- ```crypto-js/rabbit-legacy``` -- ```crypto-js/evpkdf``` - ---- - -- ```crypto-js/format-openssl``` -- ```crypto-js/format-hex``` - ---- - -- ```crypto-js/enc-latin1``` -- ```crypto-js/enc-utf8``` -- ```crypto-js/enc-hex``` -- ```crypto-js/enc-utf16``` -- ```crypto-js/enc-base64``` - ---- - -- ```crypto-js/mode-cfb``` -- ```crypto-js/mode-ctr``` -- ```crypto-js/mode-ctr-gladman``` -- ```crypto-js/mode-ofb``` -- ```crypto-js/mode-ecb``` - ---- - -- ```crypto-js/pad-pkcs7``` -- ```crypto-js/pad-ansix923``` -- ```crypto-js/pad-iso10126``` -- ```crypto-js/pad-iso97971``` -- ```crypto-js/pad-zeropadding``` -- ```crypto-js/pad-nopadding``` - -## License - -[The MIT License (MIT)](http://opensource.org/licenses/MIT) - -Copyright (c) 2009-2013 Jeff Mott -Copyright (c) 2013-2015 Evan Vosberg - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/aes.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/aes.js deleted file mode 100644 index ff0d208..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/aes.js +++ /dev/null @@ -1,227 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/bower.json b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/bower.json deleted file mode 100644 index 32c13d0..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/bower.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {}, - "ignore": [] -} diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/cipher-core.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/cipher-core.js deleted file mode 100644 index 4fad569..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/cipher-core.js +++ /dev/null @@ -1,875 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/core.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/core.js deleted file mode 100644 index b39b0fd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/core.js +++ /dev/null @@ -1,745 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else if (thatWords.length > 0xffff) { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } else { - // Copy all words at once - thisWords.push.apply(thisWords, thatWords); - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/crypto-js.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/crypto-js.js deleted file mode 100644 index e961277..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/crypto-js.js +++ /dev/null @@ -1,5951 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else if (thatWords.length > 0xffff) { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } else { - // Copy all words at once - thisWords.push.apply(thisWords, thatWords); - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki deleted file mode 100644 index 6b20199..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki +++ /dev/null @@ -1,470 +0,0 @@ - - ----- - -= Quick-start Guide = - -== Hashers == - -=== The Hasher Algorithms === - -==== MD5 ==== - -MD5 is a widely used hash function. It's been used in a variety of security applications and is also commonly used to check the integrity of files. Though, MD5 is not collision resistant, and it isn't suitable for applications like SSL certificates or digital signatures that rely on this property. - -{{{ - - -}}} - -==== SHA-1 ==== - -The SHA hash functions were designed by the National Security Agency (NSA). SHA-1 is the most established of the existing SHA hash functions, and it's used in a variety of security applications and protocols. Though, SHA-1's collision resistance has been weakening as new attacks are discovered or improved. - -{{{ - - -}}} - -==== SHA-2 ==== - -SHA-256 is one of the four variants in the SHA-2 set. It isn't as widely used as SHA-1, though it appears to provide much better security. - -{{{ - - -}}} - -SHA-512 is largely identical to SHA-256 but operates on 64-bit words rather than 32. - -{{{ - - -}}} - -CryptoJS also supports SHA-224 and SHA-384, which are largely identical but truncated versions of SHA-256 and SHA-512 respectively. - -==== SHA-3 ==== - -SHA-3 is the winner of a five-year competition to select a new cryptographic hash algorithm where 64 competing designs were evaluated. - -{{{ - - -}}} - -SHA-3 can be configured to output hash lengths of one of 224, 256, 384, or 512 bits. The default is 512 bits. - -{{{ - - -}}} - -==== RIPEMD-160 ==== - -{{{ - - -}}} - -=== The Hasher Input === - -The hash algorithms accept either strings or instances of CryptoJS.lib.WordArray. A WordArray object represents an array of 32-bit words. When you pass a string, it's automatically converted to a WordArray encoded as UTF-8. - -=== The Hasher Output === - -The hash you get back isn't a string yet. It's a WordArray object. When you use a WordArray object in a string context, it's automatically converted to a hex string. - -{{{ - - -}}} - -You can convert a WordArray object to other formats by explicitly calling the toString method and passing an encoder. - -{{{ - - - -}}} - -=== Progressive Hashing === - -{{{ - - -}}} - -== HMAC == - -Keyed-hash message authentication codes (HMAC) is a mechanism for message authentication using cryptographic hash functions. - -HMAC can be used in combination with any iterated cryptographic hash function. - -{{{ - - - - - -}}} - -=== Progressive HMAC Hashing === - -{{{ - - -}}} - -== PBKDF2 == - -PBKDF2 is a password-based key derivation function. In many applications of cryptography, user security is ultimately dependent on a password, and because a password usually can't be used directly as a cryptographic key, some processing is required. - -A salt provides a large set of keys for any given password, and an iteration count increases the cost of producing keys from a password, thereby also increasing the difficulty of attack. - -{{{ - - -}}} - -== Ciphers == - -=== The Cipher Algorithms === - -==== AES ==== - -The Advanced Encryption Standard (AES) is a U.S. Federal Information Processing Standard (FIPS). It was selected after a 5-year process where 15 competing designs were evaluated. - -{{{ - - -}}} - -CryptoJS supports AES-128, AES-192, and AES-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key. - -==== DES, Triple DES ==== - -DES is a previously dominant algorithm for encryption, and was published as an official Federal Information Processing Standard (FIPS). DES is now considered to be insecure due to the small key size. - -{{{ - - -}}} - -Triple DES applies DES three times to each block to increase the key size. The algorithm is believed to be secure in this form. - -{{{ - - -}}} - -==== Rabbit ==== - -Rabbit is a high-performance stream cipher and a finalist in the eSTREAM Portfolio. It is one of the four designs selected after a 3 1/2-year process where 22 designs were evaluated. - -{{{ - - -}}} - -==== RC4, RC4Drop ==== - -RC4 is a widely-used stream cipher. It's used in popular protocols such as SSL and WEP. Although remarkable for its simplicity and speed, the algorithm's history doesn't inspire confidence in its security. - -{{{ - - -}}} - -It was discovered that the first few bytes of keystream are strongly non-random and leak information about the key. We can defend against this attack by discarding the initial portion of the keystream. This modified algorithm is traditionally called RC4-drop. - -By default, 192 words (768 bytes) are dropped, but you can configure the algorithm to drop any number of words. - -{{{ - - -}}} - -=== Custom Key and IV === - -{{{ - - -}}} - -=== Block Modes and Padding === - -{{{ - - - - -}}} - -CryptoJS supports the following modes: - - * CBC (the default) - * CFB - * CTR - * OFB - * ECB - -And CryptoJS supports the following padding schemes: - - * Pkcs7 (the default) - * Iso97971 - * AnsiX923 - * Iso10126 - * ZeroPadding - * NoPadding - -=== The Cipher Input === - -For the plaintext message, the cipher algorithms accept either strings or instances of CryptoJS.lib.WordArray. - -For the key, when you pass a string, it's treated as a passphrase and used to derive an actual key and IV. Or you can pass a WordArray that represents the actual key. If you pass the actual key, you must also pass the actual IV. - -For the ciphertext, the cipher algorithms accept either strings or instances of CryptoJS.lib.CipherParams. A CipherParams object represents a collection of parameters such as the IV, a salt, and the raw ciphertext itself. When you pass a string, it's automatically converted to a CipherParams object according to a configurable format strategy. - -=== The Cipher Output === - -The plaintext you get back after decryption is a WordArray object. See Hashers' Output for more detail. - -The ciphertext you get back after encryption isn't a string yet. It's a CipherParams object. A CipherParams object gives you access to all the parameters used during encryption. When you use a CipherParams object in a string context, it's automatically converted to a string according to a format strategy. The default is an OpenSSL-compatible format. - -{{{ - - -}}} - -You can define your own formats in order to be compatible with other crypto implementations. A format is an object with two methods—stringify and parse—that converts between CipherParams objects and ciphertext strings. - -Here's how you might write a JSON formatter: - -{{{ - - -}}} - -=== Progressive Ciphering === - -{{{ - - -}}} - -=== Interoperability === - -==== With OpenSSL ==== - -Encrypt with OpenSSL: - -{{{ -openssl enc -aes-256-cbc -in infile -out outfile -pass pass:"Secret Passphrase" -e -base64 -}}} - -Decrypt with CryptoJS: - -{{{ - - -}}} - -== Encoders == - -CryptoJS can convert from encoding formats such as Base64, Latin1 or Hex to WordArray objects and vica versa. - -{{{ - - - - -}}} \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-base64.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-base64.js deleted file mode 100644 index cb1b79c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-base64.js +++ /dev/null @@ -1,123 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-hex.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-hex.js deleted file mode 100644 index 88161ff..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-hex.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Hex; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-latin1.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-latin1.js deleted file mode 100644 index ade56dc..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-latin1.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Latin1; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-utf16.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-utf16.js deleted file mode 100644 index 7de6245..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-utf16.js +++ /dev/null @@ -1,149 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-utf8.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-utf8.js deleted file mode 100644 index e7a251d..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/enc-utf8.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Utf8; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/evpkdf.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/evpkdf.js deleted file mode 100644 index 3fe5c01..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/evpkdf.js +++ /dev/null @@ -1,132 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/format-hex.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/format-hex.js deleted file mode 100644 index 2e9a861..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/format-hex.js +++ /dev/null @@ -1,66 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/format-openssl.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/format-openssl.js deleted file mode 100644 index 3373edc..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/format-openssl.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.format.OpenSSL; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-md5.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-md5.js deleted file mode 100644 index ad7a90a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-md5.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./md5"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./md5", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacMD5; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-ripemd160.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-ripemd160.js deleted file mode 100644 index 73d55a7..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-ripemd160.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./ripemd160"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./ripemd160", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacRIPEMD160; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha1.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha1.js deleted file mode 100644 index 0b570cb..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha1.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA1; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha224.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha224.js deleted file mode 100644 index 3778863..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha224.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./sha224"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./sha224", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA224; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha256.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha256.js deleted file mode 100644 index 33b0c9f..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha256.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA256; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha3.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha3.js deleted file mode 100644 index 467495c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha3.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha3"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha3", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJSHmacSHA3; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha384.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha384.js deleted file mode 100644 index 0036e2b..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha384.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./sha384"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512", "./sha384", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA384; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha512.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha512.js deleted file mode 100644 index c1005b6..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac-sha512.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA512; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac.js deleted file mode 100644 index 8c09851..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/hmac.js +++ /dev/null @@ -1,143 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/index.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/index.js deleted file mode 100644 index c93556a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/index.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/lib-typedarrays.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/lib-typedarrays.js deleted file mode 100644 index 264b210..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/lib-typedarrays.js +++ /dev/null @@ -1,76 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/md5.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/md5.js deleted file mode 100644 index 12b0fdd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/md5.js +++ /dev/null @@ -1,268 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-cfb.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-cfb.js deleted file mode 100644 index 86231f1..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-cfb.js +++ /dev/null @@ -1,78 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js deleted file mode 100644 index bbc5687..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js +++ /dev/null @@ -1,116 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ctr.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ctr.js deleted file mode 100644 index c3d470a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ctr.js +++ /dev/null @@ -1,58 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ecb.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ecb.js deleted file mode 100644 index ff06921..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ecb.js +++ /dev/null @@ -1,40 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ofb.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ofb.js deleted file mode 100644 index c01314c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/mode-ofb.js +++ /dev/null @@ -1,54 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/package.json b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/package.json deleted file mode 100644 index a20bf4c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "author": { - "name": "Evan Vosberg", - "url": "http://github.com/evanvosberg" - }, - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {} -} diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-ansix923.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-ansix923.js deleted file mode 100644 index f01f21e..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-ansix923.js +++ /dev/null @@ -1,49 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-iso10126.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-iso10126.js deleted file mode 100644 index 6e2aefd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-iso10126.js +++ /dev/null @@ -1,44 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-iso97971.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-iso97971.js deleted file mode 100644 index 41049b4..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-iso97971.js +++ /dev/null @@ -1,40 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-nopadding.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-nopadding.js deleted file mode 100644 index c7787c9..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-nopadding.js +++ /dev/null @@ -1,30 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-pkcs7.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-pkcs7.js deleted file mode 100644 index 3555168..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-pkcs7.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.pad.Pkcs7; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-zeropadding.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-zeropadding.js deleted file mode 100644 index 0e8a859..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pad-zeropadding.js +++ /dev/null @@ -1,45 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pbkdf2.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pbkdf2.js deleted file mode 100644 index 1258251..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/pbkdf2.js +++ /dev/null @@ -1,145 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rabbit-legacy.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rabbit-legacy.js deleted file mode 100644 index e118b6b..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rabbit-legacy.js +++ /dev/null @@ -1,190 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rabbit.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rabbit.js deleted file mode 100644 index 1b06833..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rabbit.js +++ /dev/null @@ -1,192 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rc4.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rc4.js deleted file mode 100644 index 0e4bdff..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/rc4.js +++ /dev/null @@ -1,139 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/ripemd160.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/ripemd160.js deleted file mode 100644 index 24feb47..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/ripemd160.js +++ /dev/null @@ -1,267 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha1.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha1.js deleted file mode 100644 index 6691149..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha1.js +++ /dev/null @@ -1,150 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha224.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha224.js deleted file mode 100644 index d8ce988..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha224.js +++ /dev/null @@ -1,80 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha256.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha256.js deleted file mode 100644 index de2d7fc..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha256.js +++ /dev/null @@ -1,199 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha3.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha3.js deleted file mode 100644 index 4fb27fe..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha3.js +++ /dev/null @@ -1,323 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha384.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha384.js deleted file mode 100644 index a0b95bf..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha384.js +++ /dev/null @@ -1,83 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha512.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha512.js deleted file mode 100644 index 3359315..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/sha512.js +++ /dev/null @@ -1,323 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/tripledes.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/tripledes.js deleted file mode 100644 index c7becf3..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/tripledes.js +++ /dev/null @@ -1,770 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/x64-core.js b/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/x64-core.js deleted file mode 100644 index 57dcc14..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/bower/crypto-js/x64-core.js +++ /dev/null @@ -1,304 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/coverage.json b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/coverage.json deleted file mode 100644 index 10cacdd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js","s":{"1":1,"2":1,"3":0,"4":1},"b":{"1":[0,1],"2":[1,0]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"2":{"start":{"line":4,"column":0},"end":{"line":6,"column":1}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":23}},"4":{"start":{"line":8,"column":0},"end":{"line":8,"column":22}}},"branchMap":{"1":{"line":4,"type":"if","locations":[{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},{"start":{"line":4,"column":0},"end":{"line":4,"column":0}}]},"2":{"line":4,"type":"binary-expr","locations":[{"start":{"line":4,"column":4},"end":{"line":4,"column":33}},{"start":{"line":4,"column":37},"end":{"line":4,"column":71}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":154,"18":154,"19":154,"20":154,"21":154,"22":154,"23":154,"24":154,"25":154,"26":154,"27":154,"28":1,"29":1,"30":25,"31":25,"32":1,"33":13,"34":13,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":154,"53":1,"54":0,"55":1,"56":4,"57":1},"b":{"1":[0,0]},"f":{"1":154,"2":25,"3":13,"4":1,"5":154,"6":0,"7":4},"fnMap":{"1":{"name":"Web3","line":46,"loc":{"start":{"line":46,"column":0},"end":{"line":46,"column":25}}},"2":{"name":"(anonymous_2)","line":73,"loc":{"start":{"line":73,"column":29},"end":{"line":73,"column":49}}},"3":{"name":"(anonymous_3)","line":78,"loc":{"start":{"line":78,"column":23},"end":{"line":78,"column":48}}},"4":{"name":"(anonymous_4)","line":100,"loc":{"start":{"line":100,"column":26},"end":{"line":100,"column":42}}},"5":{"name":"(anonymous_5)","line":105,"loc":{"start":{"line":105,"column":17},"end":{"line":105,"column":29}}},"6":{"name":"(anonymous_6)","line":129,"loc":{"start":{"line":129,"column":29},"end":{"line":129,"column":39}}},"7":{"name":"(anonymous_7)","line":133,"loc":{"start":{"line":133,"column":29},"end":{"line":133,"column":41}}}},"statementMap":{"1":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"2":{"start":{"line":29,"column":0},"end":{"line":29,"column":34}},"3":{"start":{"line":30,"column":0},"end":{"line":30,"column":40}},"4":{"start":{"line":31,"column":0},"end":{"line":31,"column":38}},"5":{"start":{"line":32,"column":0},"end":{"line":32,"column":40}},"6":{"start":{"line":33,"column":0},"end":{"line":33,"column":40}},"7":{"start":{"line":34,"column":0},"end":{"line":34,"column":42}},"8":{"start":{"line":35,"column":0},"end":{"line":35,"column":40}},"9":{"start":{"line":36,"column":0},"end":{"line":36,"column":37}},"10":{"start":{"line":37,"column":0},"end":{"line":37,"column":35}},"11":{"start":{"line":38,"column":0},"end":{"line":38,"column":38}},"12":{"start":{"line":39,"column":0},"end":{"line":39,"column":36}},"13":{"start":{"line":40,"column":0},"end":{"line":40,"column":42}},"14":{"start":{"line":41,"column":0},"end":{"line":41,"column":50}},"15":{"start":{"line":42,"column":0},"end":{"line":42,"column":48}},"16":{"start":{"line":46,"column":0},"end":{"line":65,"column":1}},"17":{"start":{"line":47,"column":4},"end":{"line":47,"column":56}},"18":{"start":{"line":48,"column":4},"end":{"line":48,"column":36}},"19":{"start":{"line":49,"column":4},"end":{"line":49,"column":29}},"20":{"start":{"line":50,"column":4},"end":{"line":50,"column":27}},"21":{"start":{"line":51,"column":4},"end":{"line":51,"column":29}},"22":{"start":{"line":52,"column":4},"end":{"line":52,"column":29}},"23":{"start":{"line":53,"column":4},"end":{"line":53,"column":35}},"24":{"start":{"line":54,"column":4},"end":{"line":56,"column":6}},"25":{"start":{"line":57,"column":4},"end":{"line":60,"column":6}},"26":{"start":{"line":61,"column":4},"end":{"line":61,"column":32}},"27":{"start":{"line":62,"column":4},"end":{"line":64,"column":7}},"28":{"start":{"line":68,"column":0},"end":{"line":71,"column":2}},"29":{"start":{"line":73,"column":0},"end":{"line":76,"column":2}},"30":{"start":{"line":74,"column":4},"end":{"line":74,"column":47}},"31":{"start":{"line":75,"column":4},"end":{"line":75,"column":36}},"32":{"start":{"line":78,"column":0},"end":{"line":81,"column":2}},"33":{"start":{"line":79,"column":4},"end":{"line":79,"column":46}},"34":{"start":{"line":80,"column":4},"end":{"line":80,"column":35}},"35":{"start":{"line":83,"column":0},"end":{"line":83,"column":35}},"36":{"start":{"line":84,"column":0},"end":{"line":84,"column":39}},"37":{"start":{"line":85,"column":0},"end":{"line":85,"column":37}},"38":{"start":{"line":86,"column":0},"end":{"line":86,"column":43}},"39":{"start":{"line":87,"column":0},"end":{"line":87,"column":41}},"40":{"start":{"line":88,"column":0},"end":{"line":88,"column":43}},"41":{"start":{"line":89,"column":0},"end":{"line":89,"column":47}},"42":{"start":{"line":90,"column":0},"end":{"line":90,"column":47}},"43":{"start":{"line":91,"column":0},"end":{"line":91,"column":35}},"44":{"start":{"line":92,"column":0},"end":{"line":92,"column":39}},"45":{"start":{"line":93,"column":0},"end":{"line":93,"column":43}},"46":{"start":{"line":94,"column":0},"end":{"line":94,"column":37}},"47":{"start":{"line":95,"column":0},"end":{"line":95,"column":27}},"48":{"start":{"line":100,"column":0},"end":{"line":103,"column":2}},"49":{"start":{"line":101,"column":4},"end":{"line":101,"column":30}},"50":{"start":{"line":102,"column":4},"end":{"line":102,"column":26}},"51":{"start":{"line":105,"column":0},"end":{"line":127,"column":2}},"52":{"start":{"line":106,"column":4},"end":{"line":126,"column":6}},"53":{"start":{"line":129,"column":0},"end":{"line":131,"column":2}},"54":{"start":{"line":130,"column":4},"end":{"line":130,"column":72}},"55":{"start":{"line":133,"column":0},"end":{"line":135,"column":2}},"56":{"start":{"line":134,"column":4},"end":{"line":134,"column":27}},"57":{"start":{"line":137,"column":0},"end":{"line":137,"column":22}}},"branchMap":{"1":{"line":130,"type":"binary-expr","locations":[{"start":{"line":130,"column":12},"end":{"line":130,"column":32}},{"start":{"line":130,"column":36},"end":{"line":130,"column":70}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":156,"7":156,"8":1,"9":76,"10":7,"11":7,"12":69,"13":69,"14":69,"15":0,"16":69,"17":1,"18":75,"19":0,"20":75,"21":75,"22":72,"23":1,"24":71,"25":0,"26":71,"27":1,"28":4,"29":0,"30":4,"31":4,"32":4,"33":0,"34":4,"35":0,"36":4,"37":1,"38":9,"39":9,"40":0,"41":1,"42":12,"43":12,"44":12,"45":10,"46":10,"47":10,"48":0,"49":1,"50":181,"51":181,"52":11,"53":181,"54":181,"55":135,"56":7,"57":7,"58":7,"59":1,"60":24,"61":24,"62":6,"63":24,"64":0,"65":1},"b":{"1":[7,69],"2":[0,69],"3":[0,75],"4":[1,71],"5":[0,71],"6":[0,4],"7":[0,4],"8":[0,4],"9":[9,0],"10":[12,0],"11":[10,0],"12":[0,10],"13":[11,170],"14":[135,46],"15":[181,135],"16":[7,0],"17":[7,0],"18":[7,7],"19":[0,24]},"f":{"1":156,"2":76,"3":75,"4":72,"5":4,"6":4,"7":9,"8":12,"9":10,"10":181,"11":7,"12":24,"13":6},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":21},"end":{"line":38,"column":41}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":32},"end":{"line":50,"column":48}}},"3":{"name":"(anonymous_3)","line":73,"loc":{"start":{"line":73,"column":37},"end":{"line":73,"column":63}}},"4":{"name":"(anonymous_4)","line":78,"loc":{"start":{"line":78,"column":37},"end":{"line":78,"column":60}}},"5":{"name":"(anonymous_5)","line":98,"loc":{"start":{"line":98,"column":37},"end":{"line":98,"column":63}}},"6":{"name":"(anonymous_6)","line":104,"loc":{"start":{"line":104,"column":37},"end":{"line":104,"column":61}}},"7":{"name":"(anonymous_7)","line":125,"loc":{"start":{"line":125,"column":43},"end":{"line":125,"column":73}}},"8":{"name":"(anonymous_8)","line":144,"loc":{"start":{"line":144,"column":46},"end":{"line":144,"column":70}}},"9":{"name":"(anonymous_9)","line":152,"loc":{"start":{"line":152,"column":11},"end":{"line":152,"column":32}}},"10":{"name":"(anonymous_10)","line":171,"loc":{"start":{"line":171,"column":39},"end":{"line":171,"column":52}}},"11":{"name":"(anonymous_11)","line":182,"loc":{"start":{"line":182,"column":41},"end":{"line":182,"column":62}}},"12":{"name":"(anonymous_12)","line":196,"loc":{"start":{"line":196,"column":33},"end":{"line":196,"column":58}}},"13":{"name":"(anonymous_13)","line":201,"loc":{"start":{"line":201,"column":44},"end":{"line":201,"column":56}}}},"statementMap":{"1":{"start":{"line":27,"column":0},"end":{"line":27,"column":35}},"2":{"start":{"line":28,"column":0},"end":{"line":28,"column":38}},"3":{"start":{"line":29,"column":0},"end":{"line":29,"column":35}},"4":{"start":{"line":30,"column":0},"end":{"line":30,"column":33}},"5":{"start":{"line":38,"column":0},"end":{"line":41,"column":2}},"6":{"start":{"line":39,"column":4},"end":{"line":39,"column":31}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":28}},"8":{"start":{"line":50,"column":0},"end":{"line":64,"column":2}},"9":{"start":{"line":51,"column":4},"end":{"line":54,"column":5}},"10":{"start":{"line":52,"column":8},"end":{"line":52,"column":48}},"11":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"12":{"start":{"line":56,"column":4},"end":{"line":56,"column":76}},"13":{"start":{"line":57,"column":4},"end":{"line":57,"column":45}},"14":{"start":{"line":59,"column":4},"end":{"line":61,"column":5}},"15":{"start":{"line":60,"column":8},"end":{"line":60,"column":45}},"16":{"start":{"line":63,"column":4},"end":{"line":63,"column":25}},"17":{"start":{"line":73,"column":0},"end":{"line":89,"column":2}},"18":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"19":{"start":{"line":75,"column":8},"end":{"line":75,"column":50}},"20":{"start":{"line":77,"column":4},"end":{"line":77,"column":76}},"21":{"start":{"line":78,"column":4},"end":{"line":88,"column":7}},"22":{"start":{"line":79,"column":8},"end":{"line":81,"column":9}},"23":{"start":{"line":80,"column":12},"end":{"line":80,"column":33}},"24":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"25":{"start":{"line":84,"column":12},"end":{"line":84,"column":60}},"26":{"start":{"line":87,"column":8},"end":{"line":87,"column":38}},"27":{"start":{"line":98,"column":0},"end":{"line":115,"column":2}},"28":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"29":{"start":{"line":100,"column":8},"end":{"line":100,"column":50}},"30":{"start":{"line":103,"column":4},"end":{"line":103,"column":61}},"31":{"start":{"line":104,"column":4},"end":{"line":114,"column":7}},"32":{"start":{"line":105,"column":8},"end":{"line":107,"column":9}},"33":{"start":{"line":106,"column":12},"end":{"line":106,"column":33}},"34":{"start":{"line":109,"column":8},"end":{"line":111,"column":9}},"35":{"start":{"line":110,"column":12},"end":{"line":110,"column":61}},"36":{"start":{"line":113,"column":8},"end":{"line":113,"column":31}},"37":{"start":{"line":125,"column":0},"end":{"line":135,"column":2}},"38":{"start":{"line":126,"column":4},"end":{"line":134,"column":5}},"39":{"start":{"line":127,"column":8},"end":{"line":130,"column":10}},"40":{"start":{"line":133,"column":8},"end":{"line":133,"column":87}},"41":{"start":{"line":144,"column":0},"end":{"line":163,"column":1}},"42":{"start":{"line":145,"column":4},"end":{"line":145,"column":21}},"43":{"start":{"line":147,"column":4},"end":{"line":162,"column":5}},"44":{"start":{"line":149,"column":8},"end":{"line":160,"column":11}},"45":{"start":{"line":154,"column":12},"end":{"line":156,"column":13}},"46":{"start":{"line":155,"column":16},"end":{"line":155,"column":47}},"47":{"start":{"line":158,"column":12},"end":{"line":159,"column":38}},"48":{"start":{"line":159,"column":16},"end":{"line":159,"column":38}},"49":{"start":{"line":171,"column":0},"end":{"line":189,"column":2}},"50":{"start":{"line":172,"column":4},"end":{"line":172,"column":21}},"51":{"start":{"line":175,"column":4},"end":{"line":176,"column":21}},"52":{"start":{"line":176,"column":8},"end":{"line":176,"column":21}},"53":{"start":{"line":178,"column":4},"end":{"line":178,"column":22}},"54":{"start":{"line":181,"column":4},"end":{"line":188,"column":5}},"55":{"start":{"line":182,"column":8},"end":{"line":187,"column":11}},"56":{"start":{"line":183,"column":12},"end":{"line":186,"column":13}},"57":{"start":{"line":184,"column":16},"end":{"line":185,"column":105}},"58":{"start":{"line":185,"column":20},"end":{"line":185,"column":105}},"59":{"start":{"line":196,"column":0},"end":{"line":209,"column":2}},"60":{"start":{"line":197,"column":4},"end":{"line":197,"column":21}},"61":{"start":{"line":201,"column":4},"end":{"line":203,"column":7}},"62":{"start":{"line":202,"column":8},"end":{"line":202,"column":37}},"63":{"start":{"line":207,"column":4},"end":{"line":208,"column":30}},"64":{"start":{"line":208,"column":8},"end":{"line":208,"column":30}},"65":{"start":{"line":211,"column":0},"end":{"line":211,"column":32}}},"branchMap":{"1":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"2":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":4},"end":{"line":59,"column":4}},{"start":{"line":59,"column":4},"end":{"line":59,"column":4}}]},"3":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":74,"column":4}},{"start":{"line":74,"column":4},"end":{"line":74,"column":4}}]},"4":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":8},"end":{"line":79,"column":8}},{"start":{"line":79,"column":8},"end":{"line":79,"column":8}}]},"5":{"line":83,"type":"if","locations":[{"start":{"line":83,"column":8},"end":{"line":83,"column":8}},{"start":{"line":83,"column":8},"end":{"line":83,"column":8}}]},"6":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"7":{"line":105,"type":"if","locations":[{"start":{"line":105,"column":8},"end":{"line":105,"column":8}},{"start":{"line":105,"column":8},"end":{"line":105,"column":8}}]},"8":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"9":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":126,"column":4}},{"start":{"line":126,"column":4},"end":{"line":126,"column":4}}]},"10":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"11":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":12},"end":{"line":154,"column":12}},{"start":{"line":154,"column":12},"end":{"line":154,"column":12}}]},"12":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":12},"end":{"line":158,"column":12}},{"start":{"line":158,"column":12},"end":{"line":158,"column":12}}]},"13":{"line":175,"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":175,"column":4}},{"start":{"line":175,"column":4},"end":{"line":175,"column":4}}]},"14":{"line":181,"type":"if","locations":[{"start":{"line":181,"column":4},"end":{"line":181,"column":4}},{"start":{"line":181,"column":4},"end":{"line":181,"column":4}}]},"15":{"line":181,"type":"binary-expr","locations":[{"start":{"line":181,"column":7},"end":{"line":181,"column":20}},{"start":{"line":181,"column":24},"end":{"line":181,"column":40}}]},"16":{"line":183,"type":"if","locations":[{"start":{"line":183,"column":12},"end":{"line":183,"column":12}},{"start":{"line":183,"column":12},"end":{"line":183,"column":12}}]},"17":{"line":184,"type":"if","locations":[{"start":{"line":184,"column":16},"end":{"line":184,"column":16}},{"start":{"line":184,"column":16},"end":{"line":184,"column":16}}]},"18":{"line":184,"type":"binary-expr","locations":[{"start":{"line":184,"column":19},"end":{"line":184,"column":66}},{"start":{"line":184,"column":70},"end":{"line":184,"column":126}}]},"19":{"line":207,"type":"if","locations":[{"start":{"line":207,"column":4},"end":{"line":207,"column":4}},{"start":{"line":207,"column":4},"end":{"line":207,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js","s":{"1":1,"2":301,"3":300,"4":1,"5":1,"6":1,"7":298,"8":298,"9":1,"10":158,"11":0,"12":158,"13":1,"14":157,"15":1,"16":6,"17":6,"18":10,"19":1},"b":{"1":[300,1],"2":[0,158],"3":[158,15],"4":[157,156,154,152,150]},"f":{"1":301,"2":298,"3":158,"4":157,"5":6,"6":10},"fnMap":{"1":{"name":"(anonymous_1)","line":23,"loc":{"start":{"line":23,"column":14},"end":{"line":23,"column":26}}},"2":{"name":"(anonymous_2)","line":36,"loc":{"start":{"line":36,"column":22},"end":{"line":36,"column":34}}},"3":{"name":"(anonymous_3)","line":49,"loc":{"start":{"line":49,"column":30},"end":{"line":49,"column":56}}},"4":{"name":"(anonymous_4)","line":68,"loc":{"start":{"line":68,"column":36},"end":{"line":68,"column":56}}},"5":{"name":"(anonymous_5)","line":83,"loc":{"start":{"line":83,"column":35},"end":{"line":83,"column":55}}},"6":{"name":"(anonymous_6)","line":85,"loc":{"start":{"line":85,"column":24},"end":{"line":85,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":31,"column":2}},"2":{"start":{"line":25,"column":4},"end":{"line":27,"column":5}},"3":{"start":{"line":26,"column":8},"end":{"line":26,"column":51}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":47}},"5":{"start":{"line":30,"column":4},"end":{"line":30,"column":23}},"6":{"start":{"line":36,"column":0},"end":{"line":39,"column":2}},"7":{"start":{"line":37,"column":4},"end":{"line":37,"column":33}},"8":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"9":{"start":{"line":49,"column":0},"end":{"line":59,"column":2}},"10":{"start":{"line":50,"column":4},"end":{"line":51,"column":61}},"11":{"start":{"line":51,"column":8},"end":{"line":51,"column":61}},"12":{"start":{"line":53,"column":4},"end":{"line":58,"column":6}},"13":{"start":{"line":68,"column":0},"end":{"line":74,"column":2}},"14":{"start":{"line":69,"column":4},"end":{"line":73,"column":38}},"15":{"start":{"line":83,"column":0},"end":{"line":88,"column":2}},"16":{"start":{"line":84,"column":4},"end":{"line":84,"column":20}},"17":{"start":{"line":85,"column":4},"end":{"line":87,"column":7}},"18":{"start":{"line":86,"column":8},"end":{"line":86,"column":62}},"19":{"start":{"line":90,"column":0},"end":{"line":90,"column":25}}},"branchMap":{"1":{"line":25,"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":25,"column":4}},{"start":{"line":25,"column":4},"end":{"line":25,"column":4}}]},"2":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"3":{"line":56,"type":"binary-expr","locations":[{"start":{"line":56,"column":16},"end":{"line":56,"column":22}},{"start":{"line":56,"column":26},"end":{"line":56,"column":28}}]},"4":{"line":69,"type":"binary-expr","locations":[{"start":{"line":69,"column":11},"end":{"line":69,"column":21}},{"start":{"line":70,"column":8},"end":{"line":70,"column":23}},{"start":{"line":71,"column":8},"end":{"line":71,"column":34}},{"start":{"line":72,"column":8},"end":{"line":72,"column":39}},{"start":{"line":73,"column":8},"end":{"line":73,"column":37}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js","s":{"1":2,"2":2,"3":2,"4":2,"5":205,"6":2,"7":38,"8":2,"9":10,"10":10,"11":10,"12":3,"13":10,"14":133,"15":133,"16":2,"17":131,"18":10,"19":2,"20":5,"21":5,"22":5,"23":5,"24":5,"25":110,"26":110,"27":5,"28":2,"29":25,"30":25,"31":25,"32":291,"33":291,"34":2,"35":289,"36":289,"37":25,"38":2,"39":10,"40":10,"41":236,"42":236,"43":236,"44":10,"45":2,"46":105,"47":48,"48":57,"49":136,"50":57,"51":2,"52":101,"53":101,"54":2,"55":94,"56":94,"57":2,"58":193,"59":2,"60":160,"61":160,"62":160,"63":2,"64":126,"65":2,"66":124,"67":1,"68":123,"69":2,"70":121,"71":62,"72":5,"73":57,"74":42,"75":15,"76":5,"77":69,"78":2,"79":39,"80":39,"81":39,"82":1,"83":38,"84":2,"85":12,"86":12,"87":2,"88":27,"89":26,"90":2,"91":705,"92":705,"93":47,"94":658,"95":208,"96":450,"97":2,"98":205,"99":205,"100":5,"101":200,"102":2,"103":78,"104":2,"105":24,"106":2,"107":0,"108":0,"109":0,"110":0,"111":0,"112":2,"113":875,"114":2,"115":832,"116":2,"117":358,"118":2,"119":286,"120":2,"121":126,"122":2,"123":453,"124":2,"125":9,"126":9,"127":5,"128":2},"b":{"1":[0,205],"2":[0,38],"3":[3,7],"4":[2,131],"5":[5,0],"6":[2,289],"7":[0,289],"8":[31,205],"9":[48,57],"10":[101,0],"11":[94,0],"12":[17,143],"13":[2,124],"14":[1,123],"15":[2,121],"16":[62,59],"17":[5,57],"18":[42,15],"19":[5,10],"20":[39,0],"21":[1,38],"22":[0,12],"23":[0,26],"24":[705,40],"25":[47,658],"26":[208,450],"27":[658,234,45],"28":[5,200],"29":[0,0],"30":[0,0],"31":[875,826,780,780],"32":[832,505,459,459]},"f":{"1":205,"2":38,"3":10,"4":5,"5":25,"6":10,"7":105,"8":136,"9":101,"10":94,"11":193,"12":160,"13":126,"14":39,"15":12,"16":27,"17":705,"18":205,"19":78,"20":24,"21":0,"22":875,"23":832,"24":358,"25":286,"26":126,"27":453,"28":9},"fnMap":{"1":{"name":"(anonymous_1)","line":76,"loc":{"start":{"line":76,"column":14},"end":{"line":76,"column":45}}},"2":{"name":"(anonymous_2)","line":89,"loc":{"start":{"line":89,"column":15},"end":{"line":89,"column":46}}},"3":{"name":"(anonymous_3)","line":100,"loc":{"start":{"line":100,"column":13},"end":{"line":100,"column":27}}},"4":{"name":"(anonymous_4)","line":124,"loc":{"start":{"line":124,"column":14},"end":{"line":124,"column":28}}},"5":{"name":"(anonymous_5)","line":147,"loc":{"start":{"line":147,"column":15},"end":{"line":147,"column":29}}},"6":{"name":"(anonymous_6)","line":169,"loc":{"start":{"line":169,"column":16},"end":{"line":169,"column":30}}},"7":{"name":"(anonymous_7)","line":187,"loc":{"start":{"line":187,"column":26},"end":{"line":187,"column":42}}},"8":{"name":"(anonymous_8)","line":192,"loc":{"start":{"line":192,"column":35},"end":{"line":192,"column":46}}},"9":{"name":"(anonymous_9)","line":203,"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":41}}},"10":{"name":"(anonymous_10)","line":209,"loc":{"start":{"line":209,"column":22},"end":{"line":209,"column":38}}},"11":{"name":"(anonymous_11)","line":222,"loc":{"start":{"line":222,"column":16},"end":{"line":222,"column":33}}},"12":{"name":"(anonymous_12)","line":233,"loc":{"start":{"line":233,"column":18},"end":{"line":233,"column":35}}},"13":{"name":"(anonymous_13)","line":249,"loc":{"start":{"line":249,"column":12},"end":{"line":249,"column":27}}},"14":{"name":"(anonymous_14)","line":282,"loc":{"start":{"line":282,"column":21},"end":{"line":282,"column":37}}},"15":{"name":"(anonymous_15)","line":312,"loc":{"start":{"line":312,"column":14},"end":{"line":312,"column":37}}},"16":{"name":"(anonymous_16)","line":339,"loc":{"start":{"line":339,"column":12},"end":{"line":339,"column":35}}},"17":{"name":"(anonymous_17)","line":352,"loc":{"start":{"line":352,"column":18},"end":{"line":352,"column":35}}},"18":{"name":"(anonymous_18)","line":372,"loc":{"start":{"line":372,"column":23},"end":{"line":372,"column":41}}},"19":{"name":"(anonymous_19)","line":387,"loc":{"start":{"line":387,"column":22},"end":{"line":387,"column":41}}},"20":{"name":"(anonymous_20)","line":398,"loc":{"start":{"line":398,"column":16},"end":{"line":398,"column":35}}},"21":{"name":"(anonymous_21)","line":409,"loc":{"start":{"line":409,"column":16},"end":{"line":409,"column":35}}},"22":{"name":"(anonymous_22)","line":428,"loc":{"start":{"line":428,"column":18},"end":{"line":428,"column":36}}},"23":{"name":"(anonymous_23)","line":440,"loc":{"start":{"line":440,"column":15},"end":{"line":440,"column":33}}},"24":{"name":"(anonymous_24)","line":452,"loc":{"start":{"line":452,"column":17},"end":{"line":452,"column":35}}},"25":{"name":"(anonymous_25)","line":463,"loc":{"start":{"line":463,"column":15},"end":{"line":463,"column":33}}},"26":{"name":"(anonymous_26)","line":474,"loc":{"start":{"line":474,"column":16},"end":{"line":474,"column":34}}},"27":{"name":"(anonymous_27)","line":485,"loc":{"start":{"line":485,"column":14},"end":{"line":485,"column":32}}},"28":{"name":"(anonymous_28)","line":496,"loc":{"start":{"line":496,"column":13},"end":{"line":496,"column":28}}}},"statementMap":{"1":{"start":{"line":37,"column":0},"end":{"line":37,"column":40}},"2":{"start":{"line":38,"column":0},"end":{"line":38,"column":27}},"3":{"start":{"line":40,"column":0},"end":{"line":65,"column":2}},"4":{"start":{"line":76,"column":0},"end":{"line":78,"column":2}},"5":{"start":{"line":77,"column":4},"end":{"line":77,"column":81}},"6":{"start":{"line":89,"column":0},"end":{"line":91,"column":2}},"7":{"start":{"line":90,"column":4},"end":{"line":90,"column":83}},"8":{"start":{"line":100,"column":0},"end":{"line":115,"column":2}},"9":{"start":{"line":102,"column":4},"end":{"line":102,"column":17}},"10":{"start":{"line":103,"column":4},"end":{"line":103,"column":30}},"11":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"12":{"start":{"line":105,"column":8},"end":{"line":105,"column":14}},"13":{"start":{"line":107,"column":4},"end":{"line":112,"column":5}},"14":{"start":{"line":108,"column":8},"end":{"line":108,"column":50}},"15":{"start":{"line":109,"column":8},"end":{"line":110,"column":18}},"16":{"start":{"line":110,"column":12},"end":{"line":110,"column":18}},"17":{"start":{"line":111,"column":8},"end":{"line":111,"column":41}},"18":{"start":{"line":114,"column":4},"end":{"line":114,"column":28}},"19":{"start":{"line":124,"column":0},"end":{"line":137,"column":2}},"20":{"start":{"line":126,"column":4},"end":{"line":126,"column":17}},"21":{"start":{"line":127,"column":4},"end":{"line":127,"column":30}},"22":{"start":{"line":128,"column":4},"end":{"line":130,"column":5}},"23":{"start":{"line":129,"column":8},"end":{"line":129,"column":14}},"24":{"start":{"line":131,"column":4},"end":{"line":134,"column":5}},"25":{"start":{"line":132,"column":8},"end":{"line":132,"column":50}},"26":{"start":{"line":133,"column":8},"end":{"line":133,"column":41}},"27":{"start":{"line":136,"column":4},"end":{"line":136,"column":15}},"28":{"start":{"line":147,"column":0},"end":{"line":159,"column":2}},"29":{"start":{"line":148,"column":4},"end":{"line":148,"column":27}},"30":{"start":{"line":149,"column":4},"end":{"line":149,"column":17}},"31":{"start":{"line":150,"column":4},"end":{"line":156,"column":5}},"32":{"start":{"line":151,"column":8},"end":{"line":151,"column":37}},"33":{"start":{"line":152,"column":8},"end":{"line":153,"column":18}},"34":{"start":{"line":153,"column":12},"end":{"line":153,"column":18}},"35":{"start":{"line":154,"column":8},"end":{"line":154,"column":34}},"36":{"start":{"line":155,"column":8},"end":{"line":155,"column":42}},"37":{"start":{"line":158,"column":4},"end":{"line":158,"column":22}},"38":{"start":{"line":169,"column":0},"end":{"line":178,"column":2}},"39":{"start":{"line":170,"column":4},"end":{"line":170,"column":17}},"40":{"start":{"line":171,"column":4},"end":{"line":175,"column":5}},"41":{"start":{"line":172,"column":8},"end":{"line":172,"column":37}},"42":{"start":{"line":173,"column":8},"end":{"line":173,"column":34}},"43":{"start":{"line":174,"column":8},"end":{"line":174,"column":42}},"44":{"start":{"line":177,"column":4},"end":{"line":177,"column":22}},"45":{"start":{"line":187,"column":0},"end":{"line":194,"column":2}},"46":{"start":{"line":188,"column":4},"end":{"line":190,"column":5}},"47":{"start":{"line":189,"column":8},"end":{"line":189,"column":25}},"48":{"start":{"line":192,"column":4},"end":{"line":192,"column":72}},"49":{"start":{"line":192,"column":47},"end":{"line":192,"column":61}},"50":{"start":{"line":193,"column":4},"end":{"line":193,"column":44}},"51":{"start":{"line":203,"column":0},"end":{"line":206,"column":2}},"52":{"start":{"line":204,"column":4},"end":{"line":204,"column":35}},"53":{"start":{"line":205,"column":4},"end":{"line":205,"column":57}},"54":{"start":{"line":209,"column":0},"end":{"line":213,"column":2}},"55":{"start":{"line":211,"column":4},"end":{"line":211,"column":35}},"56":{"start":{"line":212,"column":4},"end":{"line":212,"column":105}},"57":{"start":{"line":222,"column":0},"end":{"line":224,"column":2}},"58":{"start":{"line":223,"column":4},"end":{"line":223,"column":41}},"59":{"start":{"line":233,"column":0},"end":{"line":238,"column":2}},"60":{"start":{"line":234,"column":4},"end":{"line":234,"column":36}},"61":{"start":{"line":235,"column":4},"end":{"line":235,"column":37}},"62":{"start":{"line":237,"column":4},"end":{"line":237,"column":73}},"63":{"start":{"line":249,"column":0},"end":{"line":272,"column":2}},"64":{"start":{"line":252,"column":4},"end":{"line":253,"column":33}},"65":{"start":{"line":253,"column":8},"end":{"line":253,"column":33}},"66":{"start":{"line":255,"column":4},"end":{"line":256,"column":32}},"67":{"start":{"line":256,"column":8},"end":{"line":256,"column":32}},"68":{"start":{"line":258,"column":4},"end":{"line":259,"column":45}},"69":{"start":{"line":259,"column":8},"end":{"line":259,"column":45}},"70":{"start":{"line":262,"column":4},"end":{"line":269,"column":5}},"71":{"start":{"line":263,"column":8},"end":{"line":268,"column":34}},"72":{"start":{"line":264,"column":12},"end":{"line":264,"column":36}},"73":{"start":{"line":265,"column":13},"end":{"line":268,"column":34}},"74":{"start":{"line":266,"column":12},"end":{"line":266,"column":23}},"75":{"start":{"line":267,"column":13},"end":{"line":268,"column":34}},"76":{"start":{"line":268,"column":12},"end":{"line":268,"column":34}},"77":{"start":{"line":271,"column":4},"end":{"line":271,"column":28}},"78":{"start":{"line":282,"column":0},"end":{"line":289,"column":2}},"79":{"start":{"line":283,"column":4},"end":{"line":283,"column":47}},"80":{"start":{"line":284,"column":4},"end":{"line":284,"column":34}},"81":{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},"82":{"start":{"line":286,"column":8},"end":{"line":286,"column":131}},"83":{"start":{"line":288,"column":4},"end":{"line":288,"column":40}},"84":{"start":{"line":312,"column":0},"end":{"line":316,"column":2}},"85":{"start":{"line":313,"column":4},"end":{"line":313,"column":74}},"86":{"start":{"line":315,"column":4},"end":{"line":315,"column":72}},"87":{"start":{"line":339,"column":0},"end":{"line":343,"column":2}},"88":{"start":{"line":340,"column":4},"end":{"line":340,"column":70}},"89":{"start":{"line":342,"column":4},"end":{"line":342,"column":72}},"90":{"start":{"line":352,"column":0},"end":{"line":363,"column":2}},"91":{"start":{"line":354,"column":4},"end":{"line":354,"column":25}},"92":{"start":{"line":355,"column":4},"end":{"line":356,"column":22}},"93":{"start":{"line":356,"column":8},"end":{"line":356,"column":22}},"94":{"start":{"line":358,"column":4},"end":{"line":360,"column":5}},"95":{"start":{"line":359,"column":8},"end":{"line":359,"column":58}},"96":{"start":{"line":362,"column":4},"end":{"line":362,"column":50}},"97":{"start":{"line":372,"column":0},"end":{"line":378,"column":2}},"98":{"start":{"line":373,"column":4},"end":{"line":373,"column":40}},"99":{"start":{"line":374,"column":4},"end":{"line":376,"column":5}},"100":{"start":{"line":375,"column":8},"end":{"line":375,"column":125}},"101":{"start":{"line":377,"column":4},"end":{"line":377,"column":21}},"102":{"start":{"line":387,"column":0},"end":{"line":389,"column":2}},"103":{"start":{"line":388,"column":4},"end":{"line":388,"column":45}},"104":{"start":{"line":398,"column":0},"end":{"line":400,"column":2}},"105":{"start":{"line":399,"column":4},"end":{"line":399,"column":48}},"106":{"start":{"line":409,"column":0},"end":{"line":419,"column":2}},"107":{"start":{"line":410,"column":4},"end":{"line":412,"column":5}},"108":{"start":{"line":411,"column":8},"end":{"line":411,"column":23}},"109":{"start":{"line":414,"column":4},"end":{"line":416,"column":5}},"110":{"start":{"line":415,"column":8},"end":{"line":415,"column":30}},"111":{"start":{"line":418,"column":4},"end":{"line":418,"column":56}},"112":{"start":{"line":428,"column":0},"end":{"line":431,"column":2}},"113":{"start":{"line":429,"column":4},"end":{"line":430,"column":82}},"114":{"start":{"line":440,"column":0},"end":{"line":443,"column":2}},"115":{"start":{"line":441,"column":4},"end":{"line":442,"column":79}},"116":{"start":{"line":452,"column":0},"end":{"line":454,"column":2}},"117":{"start":{"line":453,"column":4},"end":{"line":453,"column":40}},"118":{"start":{"line":463,"column":0},"end":{"line":465,"column":2}},"119":{"start":{"line":464,"column":4},"end":{"line":464,"column":38}},"120":{"start":{"line":474,"column":0},"end":{"line":476,"column":2}},"121":{"start":{"line":475,"column":4},"end":{"line":475,"column":39}},"122":{"start":{"line":485,"column":0},"end":{"line":487,"column":2}},"123":{"start":{"line":486,"column":4},"end":{"line":486,"column":35}},"124":{"start":{"line":496,"column":0},"end":{"line":502,"column":2}},"125":{"start":{"line":497,"column":4},"end":{"line":501,"column":5}},"126":{"start":{"line":498,"column":8},"end":{"line":498,"column":33}},"127":{"start":{"line":500,"column":8},"end":{"line":500,"column":21}},"128":{"start":{"line":504,"column":0},"end":{"line":531,"column":2}}},"branchMap":{"1":{"line":77,"type":"cond-expr","locations":[{"start":{"line":77,"column":60},"end":{"line":77,"column":64}},{"start":{"line":77,"column":67},"end":{"line":77,"column":70}}]},"2":{"line":90,"type":"cond-expr","locations":[{"start":{"line":90,"column":70},"end":{"line":90,"column":74}},{"start":{"line":90,"column":77},"end":{"line":90,"column":80}}]},"3":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":104,"column":4}},{"start":{"line":104,"column":4},"end":{"line":104,"column":4}}]},"4":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"5":{"line":128,"type":"if","locations":[{"start":{"line":128,"column":4},"end":{"line":128,"column":4}},{"start":{"line":128,"column":4},"end":{"line":128,"column":4}}]},"6":{"line":152,"type":"if","locations":[{"start":{"line":152,"column":8},"end":{"line":152,"column":8}},{"start":{"line":152,"column":8},"end":{"line":152,"column":8}}]},"7":{"line":155,"type":"cond-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":37}},{"start":{"line":155,"column":40},"end":{"line":155,"column":41}}]},"8":{"line":174,"type":"cond-expr","locations":[{"start":{"line":174,"column":30},"end":{"line":174,"column":37}},{"start":{"line":174,"column":40},"end":{"line":174,"column":41}}]},"9":{"line":188,"type":"if","locations":[{"start":{"line":188,"column":4},"end":{"line":188,"column":4}},{"start":{"line":188,"column":4},"end":{"line":188,"column":4}}]},"10":{"line":205,"type":"cond-expr","locations":[{"start":{"line":205,"column":27},"end":{"line":205,"column":49}},{"start":{"line":205,"column":52},"end":{"line":205,"column":56}}]},"11":{"line":212,"type":"cond-expr","locations":[{"start":{"line":212,"column":27},"end":{"line":212,"column":99}},{"start":{"line":212,"column":102},"end":{"line":212,"column":104}}]},"12":{"line":237,"type":"cond-expr","locations":[{"start":{"line":237,"column":32},"end":{"line":237,"column":56}},{"start":{"line":237,"column":59},"end":{"line":237,"column":72}}]},"13":{"line":252,"type":"if","locations":[{"start":{"line":252,"column":4},"end":{"line":252,"column":4}},{"start":{"line":252,"column":4},"end":{"line":252,"column":4}}]},"14":{"line":255,"type":"if","locations":[{"start":{"line":255,"column":4},"end":{"line":255,"column":4}},{"start":{"line":255,"column":4},"end":{"line":255,"column":4}}]},"15":{"line":258,"type":"if","locations":[{"start":{"line":258,"column":4},"end":{"line":258,"column":4}},{"start":{"line":258,"column":4},"end":{"line":258,"column":4}}]},"16":{"line":262,"type":"if","locations":[{"start":{"line":262,"column":4},"end":{"line":262,"column":4}},{"start":{"line":262,"column":4},"end":{"line":262,"column":4}}]},"17":{"line":263,"type":"if","locations":[{"start":{"line":263,"column":8},"end":{"line":263,"column":8}},{"start":{"line":263,"column":8},"end":{"line":263,"column":8}}]},"18":{"line":265,"type":"if","locations":[{"start":{"line":265,"column":13},"end":{"line":265,"column":13}},{"start":{"line":265,"column":13},"end":{"line":265,"column":13}}]},"19":{"line":267,"type":"if","locations":[{"start":{"line":267,"column":13},"end":{"line":267,"column":13}},{"start":{"line":267,"column":13},"end":{"line":267,"column":13}}]},"20":{"line":283,"type":"cond-expr","locations":[{"start":{"line":283,"column":18},"end":{"line":283,"column":36}},{"start":{"line":283,"column":39},"end":{"line":283,"column":46}}]},"21":{"line":285,"type":"if","locations":[{"start":{"line":285,"column":4},"end":{"line":285,"column":4}},{"start":{"line":285,"column":4},"end":{"line":285,"column":4}}]},"22":{"line":315,"type":"cond-expr","locations":[{"start":{"line":315,"column":33},"end":{"line":315,"column":44}},{"start":{"line":315,"column":47},"end":{"line":315,"column":71}}]},"23":{"line":342,"type":"cond-expr","locations":[{"start":{"line":342,"column":33},"end":{"line":342,"column":44}},{"start":{"line":342,"column":47},"end":{"line":342,"column":71}}]},"24":{"line":354,"type":"binary-expr","locations":[{"start":{"line":354,"column":13},"end":{"line":354,"column":19}},{"start":{"line":354,"column":23},"end":{"line":354,"column":24}}]},"25":{"line":355,"type":"if","locations":[{"start":{"line":355,"column":4},"end":{"line":355,"column":4}},{"start":{"line":355,"column":4},"end":{"line":355,"column":4}}]},"26":{"line":358,"type":"if","locations":[{"start":{"line":358,"column":4},"end":{"line":358,"column":4}},{"start":{"line":358,"column":4},"end":{"line":358,"column":4}}]},"27":{"line":358,"type":"binary-expr","locations":[{"start":{"line":358,"column":8},"end":{"line":358,"column":24}},{"start":{"line":358,"column":29},"end":{"line":358,"column":55}},{"start":{"line":358,"column":59},"end":{"line":358,"column":86}}]},"28":{"line":374,"type":"if","locations":[{"start":{"line":374,"column":4},"end":{"line":374,"column":4}},{"start":{"line":374,"column":4},"end":{"line":374,"column":4}}]},"29":{"line":410,"type":"if","locations":[{"start":{"line":410,"column":4},"end":{"line":410,"column":4}},{"start":{"line":410,"column":4},"end":{"line":410,"column":4}}]},"30":{"line":414,"type":"if","locations":[{"start":{"line":414,"column":4},"end":{"line":414,"column":4}},{"start":{"line":414,"column":4},"end":{"line":414,"column":4}}]},"31":{"line":429,"type":"binary-expr","locations":[{"start":{"line":429,"column":11},"end":{"line":429,"column":38}},{"start":{"line":430,"column":9},"end":{"line":430,"column":15}},{"start":{"line":430,"column":19},"end":{"line":430,"column":37}},{"start":{"line":430,"column":41},"end":{"line":430,"column":80}}]},"32":{"line":441,"type":"binary-expr","locations":[{"start":{"line":441,"column":11},"end":{"line":441,"column":37}},{"start":{"line":442,"column":9},"end":{"line":442,"column":15}},{"start":{"line":442,"column":19},"end":{"line":442,"column":37}},{"start":{"line":442,"column":41},"end":{"line":442,"column":77}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":38,"column":0},"end":{"line":38,"column":40}},"2":{"start":{"line":40,"column":0},"end":{"line":68,"column":2}},"3":{"start":{"line":70,"column":0},"end":{"line":78,"column":2}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js","s":{"1":3,"2":4,"3":0,"4":7,"5":6,"6":6},"b":{"1":[2,4],"2":[6,2,2]},"f":{"1":4,"2":0,"3":7,"4":6},"fnMap":{"1":{"name":"(anonymous_1)","line":24,"loc":{"start":{"line":24,"column":27},"end":{"line":24,"column":39}}},"2":{"name":"(anonymous_2)","line":27,"loc":{"start":{"line":27,"column":23},"end":{"line":27,"column":38}}},"3":{"name":"(anonymous_3)","line":30,"loc":{"start":{"line":30,"column":21},"end":{"line":30,"column":33}}},"4":{"name":"(anonymous_4)","line":33,"loc":{"start":{"line":33,"column":21},"end":{"line":33,"column":38}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":37,"column":2}},"2":{"start":{"line":25,"column":8},"end":{"line":25,"column":63}},"3":{"start":{"line":28,"column":8},"end":{"line":28,"column":84}},"4":{"start":{"line":31,"column":8},"end":{"line":31,"column":56}},"5":{"start":{"line":34,"column":8},"end":{"line":34,"column":155}},"6":{"start":{"line":35,"column":8},"end":{"line":35,"column":34}}},"branchMap":{"1":{"line":34,"type":"cond-expr","locations":[{"start":{"line":34,"column":77},"end":{"line":34,"column":97}},{"start":{"line":34,"column":100},"end":{"line":34,"column":154}}]},"2":{"line":34,"type":"binary-expr","locations":[{"start":{"line":34,"column":22},"end":{"line":34,"column":30}},{"start":{"line":34,"column":34},"end":{"line":34,"column":48}},{"start":{"line":34,"column":52},"end":{"line":34,"column":74}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js","s":{"1":1,"2":1,"3":15,"4":15,"5":11,"6":15,"7":1,"8":21,"9":21,"10":21,"11":21,"12":21,"13":661,"14":661,"15":450,"16":211,"17":1,"18":21,"19":21,"20":158,"21":158,"22":21,"23":1,"24":113,"25":1,"26":5,"27":5,"28":5,"29":5,"30":1,"31":6,"32":6,"33":6,"34":6,"35":1,"36":1,"37":1,"38":18,"39":18,"40":1,"41":99,"42":1,"43":19,"44":1,"45":2,"46":1,"47":0,"48":1,"49":1,"50":1,"51":1,"52":1,"53":10,"54":10,"55":10,"56":10,"57":0,"58":1,"59":0,"60":1},"b":{"1":[450,211],"2":[661,450],"3":[99,15],"4":[19,1],"5":[1,0],"6":[1,0],"7":[10,0]},"f":{"1":15,"2":21,"3":661,"4":21,"5":113,"6":5,"7":6,"8":1,"9":18,"10":99,"11":19,"12":2,"13":0,"14":1,"15":1,"16":10,"17":0},"fnMap":{"1":{"name":"(anonymous_1)","line":25,"loc":{"start":{"line":25,"column":14},"end":{"line":25,"column":39}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":22},"end":{"line":41,"column":38}}},"3":{"name":"(anonymous_3)","line":48,"loc":{"start":{"line":48,"column":30},"end":{"line":48,"column":41}}},"4":{"name":"(anonymous_4)","line":66,"loc":{"start":{"line":66,"column":14},"end":{"line":66,"column":30}}},"5":{"name":"(anonymous_5)","line":83,"loc":{"start":{"line":83,"column":11},"end":{"line":83,"column":27}}},"6":{"name":"(anonymous_6)","line":94,"loc":{"start":{"line":94,"column":19},"end":{"line":94,"column":38}}},"7":{"name":"(anonymous_7)","line":110,"loc":{"start":{"line":110,"column":16},"end":{"line":110,"column":32}}},"8":{"name":"(anonymous_8)","line":126,"loc":{"start":{"line":126,"column":22},"end":{"line":126,"column":41}}},"9":{"name":"(anonymous_9)","line":137,"loc":{"start":{"line":137,"column":15},"end":{"line":137,"column":31}}},"10":{"name":"(anonymous_10)","line":148,"loc":{"start":{"line":148,"column":25},"end":{"line":148,"column":37}}},"11":{"name":"(anonymous_11)","line":159,"loc":{"start":{"line":159,"column":26},"end":{"line":159,"column":38}}},"12":{"name":"(anonymous_12)","line":169,"loc":{"start":{"line":169,"column":28},"end":{"line":169,"column":40}}},"13":{"name":"(anonymous_13)","line":180,"loc":{"start":{"line":180,"column":26},"end":{"line":180,"column":38}}},"14":{"name":"(anonymous_14)","line":191,"loc":{"start":{"line":191,"column":29},"end":{"line":191,"column":41}}},"15":{"name":"(anonymous_15)","line":202,"loc":{"start":{"line":202,"column":24},"end":{"line":202,"column":36}}},"16":{"name":"(anonymous_16)","line":212,"loc":{"start":{"line":212,"column":25},"end":{"line":212,"column":37}}},"17":{"name":"(anonymous_17)","line":222,"loc":{"start":{"line":222,"column":26},"end":{"line":222,"column":38}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":40}},"2":{"start":{"line":25,"column":0},"end":{"line":31,"column":2}},"3":{"start":{"line":26,"column":4},"end":{"line":26,"column":24}},"4":{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},"5":{"start":{"line":28,"column":8},"end":{"line":28,"column":31}},"6":{"start":{"line":30,"column":4},"end":{"line":30,"column":18}},"7":{"start":{"line":41,"column":0},"end":{"line":57,"column":2}},"8":{"start":{"line":42,"column":4},"end":{"line":42,"column":30}},"9":{"start":{"line":43,"column":4},"end":{"line":43,"column":30}},"10":{"start":{"line":45,"column":4},"end":{"line":45,"column":30}},"11":{"start":{"line":46,"column":4},"end":{"line":46,"column":45}},"12":{"start":{"line":48,"column":4},"end":{"line":56,"column":16}},"13":{"start":{"line":49,"column":8},"end":{"line":49,"column":35}},"14":{"start":{"line":50,"column":8},"end":{"line":55,"column":9}},"15":{"start":{"line":52,"column":12},"end":{"line":52,"column":33}},"16":{"start":{"line":54,"column":12},"end":{"line":54,"column":21}},"17":{"start":{"line":66,"column":0},"end":{"line":76,"column":2}},"18":{"start":{"line":67,"column":4},"end":{"line":68,"column":14}},"19":{"start":{"line":70,"column":4},"end":{"line":73,"column":5}},"20":{"start":{"line":71,"column":8},"end":{"line":71,"column":38}},"21":{"start":{"line":72,"column":8},"end":{"line":72,"column":77}},"22":{"start":{"line":75,"column":4},"end":{"line":75,"column":40}},"23":{"start":{"line":83,"column":0},"end":{"line":85,"column":2}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":22}},"25":{"start":{"line":94,"column":0},"end":{"line":99,"column":2}},"26":{"start":{"line":95,"column":4},"end":{"line":95,"column":42}},"27":{"start":{"line":96,"column":4},"end":{"line":96,"column":35}},"28":{"start":{"line":97,"column":4},"end":{"line":97,"column":37}},"29":{"start":{"line":98,"column":4},"end":{"line":98,"column":47}},"30":{"start":{"line":110,"column":0},"end":{"line":117,"column":2}},"31":{"start":{"line":111,"column":4},"end":{"line":111,"column":27}},"32":{"start":{"line":113,"column":4},"end":{"line":113,"column":72}},"33":{"start":{"line":114,"column":4},"end":{"line":114,"column":56}},"34":{"start":{"line":116,"column":4},"end":{"line":116,"column":53}},"35":{"start":{"line":126,"column":0},"end":{"line":128,"column":2}},"36":{"start":{"line":127,"column":4},"end":{"line":127,"column":75}},"37":{"start":{"line":137,"column":0},"end":{"line":140,"column":2}},"38":{"start":{"line":138,"column":4},"end":{"line":138,"column":27}},"39":{"start":{"line":139,"column":4},"end":{"line":139,"column":23}},"40":{"start":{"line":148,"column":0},"end":{"line":151,"column":2}},"41":{"start":{"line":149,"column":4},"end":{"line":150,"column":51}},"42":{"start":{"line":159,"column":0},"end":{"line":161,"column":2}},"43":{"start":{"line":160,"column":4},"end":{"line":160,"column":64}},"44":{"start":{"line":169,"column":0},"end":{"line":171,"column":2}},"45":{"start":{"line":170,"column":4},"end":{"line":170,"column":36}},"46":{"start":{"line":180,"column":0},"end":{"line":182,"column":2}},"47":{"start":{"line":181,"column":4},"end":{"line":181,"column":35}},"48":{"start":{"line":191,"column":0},"end":{"line":193,"column":2}},"49":{"start":{"line":192,"column":4},"end":{"line":192,"column":60}},"50":{"start":{"line":202,"column":0},"end":{"line":204,"column":2}},"51":{"start":{"line":203,"column":4},"end":{"line":203,"column":58}},"52":{"start":{"line":212,"column":0},"end":{"line":220,"column":2}},"53":{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},"54":{"start":{"line":214,"column":8},"end":{"line":214,"column":42}},"55":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"56":{"start":{"line":216,"column":8},"end":{"line":216,"column":46}},"57":{"start":{"line":219,"column":4},"end":{"line":219,"column":14}},"58":{"start":{"line":222,"column":0},"end":{"line":224,"column":2}},"59":{"start":{"line":223,"column":4},"end":{"line":223,"column":22}},"60":{"start":{"line":226,"column":0},"end":{"line":226,"column":22}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":8},"end":{"line":50,"column":8}},{"start":{"line":50,"column":8},"end":{"line":50,"column":8}}]},"2":{"line":50,"type":"binary-expr","locations":[{"start":{"line":50,"column":12},"end":{"line":50,"column":21}},{"start":{"line":50,"column":25},"end":{"line":50,"column":34}}]},"3":{"line":149,"type":"binary-expr","locations":[{"start":{"line":149,"column":11},"end":{"line":149,"column":75}},{"start":{"line":150,"column":8},"end":{"line":150,"column":50}}]},"4":{"line":160,"type":"binary-expr","locations":[{"start":{"line":160,"column":11},"end":{"line":160,"column":35}},{"start":{"line":160,"column":39},"end":{"line":160,"column":63}}]},"5":{"line":192,"type":"cond-expr","locations":[{"start":{"line":192,"column":31},"end":{"line":192,"column":54}},{"start":{"line":192,"column":57},"end":{"line":192,"column":59}}]},"6":{"line":203,"type":"cond-expr","locations":[{"start":{"line":203,"column":31},"end":{"line":203,"column":52}},{"start":{"line":203,"column":55},"end":{"line":203,"column":57}}]},"7":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":4},"end":{"line":213,"column":4}},{"start":{"line":213,"column":4},"end":{"line":213,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":6,"13":1,"14":4,"15":1,"16":6,"17":1,"18":6,"19":1,"20":6,"21":1,"22":154,"23":154,"24":154,"25":3696,"26":3696,"27":154,"28":1078,"29":1078,"30":154,"31":154,"32":1,"33":5,"34":0,"35":0,"36":1,"37":0,"38":0,"39":0,"40":1,"41":154,"42":154,"43":154,"44":154,"45":6,"46":154,"47":154,"48":154,"49":154,"50":154,"51":154,"52":154,"53":154,"54":154,"55":154,"56":154,"57":154,"58":154,"59":154,"60":154,"61":154,"62":154,"63":154,"64":154,"65":154,"66":154,"67":1,"68":154,"69":1,"70":27,"71":27,"72":1,"73":0,"74":1,"75":2,"76":1},"b":{"1":[2,4],"2":[6,2],"3":[2,2],"4":[4,2],"5":[2,4],"6":[6,2],"7":[2,4],"8":[6,4],"9":[2,4],"10":[6,4]},"f":{"1":6,"2":4,"3":6,"4":6,"5":6,"6":154,"7":3696,"8":1078,"9":5,"10":0,"11":0,"12":0,"13":154,"14":6,"15":154,"16":27,"17":0,"18":2},"fnMap":{"1":{"name":"(anonymous_1)","line":37,"loc":{"start":{"line":37,"column":16},"end":{"line":37,"column":32}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":31},"end":{"line":41,"column":47}}},"3":{"name":"(anonymous_3)","line":45,"loc":{"start":{"line":45,"column":16},"end":{"line":45,"column":32}}},"4":{"name":"(anonymous_4)","line":49,"loc":{"start":{"line":49,"column":35},"end":{"line":49,"column":51}}},"5":{"name":"(anonymous_5)","line":53,"loc":{"start":{"line":53,"column":21},"end":{"line":53,"column":37}}},"6":{"name":"Eth","line":57,"loc":{"start":{"line":57,"column":0},"end":{"line":57,"column":19}}},"7":{"name":"(anonymous_7)","line":62,"loc":{"start":{"line":62,"column":22},"end":{"line":62,"column":39}}},"8":{"name":"(anonymous_8)","line":67,"loc":{"start":{"line":67,"column":25},"end":{"line":67,"column":37}}},"9":{"name":"(anonymous_9)","line":78,"loc":{"start":{"line":78,"column":9},"end":{"line":78,"column":21}}},"10":{"name":"(anonymous_10)","line":81,"loc":{"start":{"line":81,"column":9},"end":{"line":81,"column":24}}},"11":{"name":"(anonymous_11)","line":88,"loc":{"start":{"line":88,"column":9},"end":{"line":88,"column":21}}},"12":{"name":"(anonymous_12)","line":91,"loc":{"start":{"line":91,"column":9},"end":{"line":91,"column":24}}},"13":{"name":"(anonymous_13)","line":97,"loc":{"start":{"line":97,"column":14},"end":{"line":97,"column":26}}},"14":{"name":"(anonymous_14)","line":124,"loc":{"start":{"line":124,"column":63},"end":{"line":124,"column":78}}},"15":{"name":"(anonymous_15)","line":320,"loc":{"start":{"line":320,"column":17},"end":{"line":320,"column":29}}},"16":{"name":"(anonymous_16)","line":357,"loc":{"start":{"line":357,"column":25},"end":{"line":357,"column":40}}},"17":{"name":"(anonymous_17)","line":362,"loc":{"start":{"line":362,"column":24},"end":{"line":362,"column":36}}},"18":{"name":"(anonymous_18)","line":366,"loc":{"start":{"line":366,"column":28},"end":{"line":366,"column":40}}}},"statementMap":{"1":{"start":{"line":26,"column":0},"end":{"line":26,"column":42}},"2":{"start":{"line":27,"column":0},"end":{"line":27,"column":41}},"3":{"start":{"line":28,"column":0},"end":{"line":28,"column":38}},"4":{"start":{"line":29,"column":0},"end":{"line":29,"column":34}},"5":{"start":{"line":30,"column":0},"end":{"line":30,"column":38}},"6":{"start":{"line":31,"column":0},"end":{"line":31,"column":48}},"7":{"start":{"line":32,"column":0},"end":{"line":32,"column":38}},"8":{"start":{"line":33,"column":0},"end":{"line":33,"column":36}},"9":{"start":{"line":34,"column":0},"end":{"line":34,"column":30}},"10":{"start":{"line":35,"column":0},"end":{"line":35,"column":38}},"11":{"start":{"line":37,"column":0},"end":{"line":39,"column":2}},"12":{"start":{"line":38,"column":4},"end":{"line":38,"column":116}},"13":{"start":{"line":41,"column":0},"end":{"line":43,"column":2}},"14":{"start":{"line":42,"column":4},"end":{"line":42,"column":154}},"15":{"start":{"line":45,"column":0},"end":{"line":47,"column":2}},"16":{"start":{"line":46,"column":4},"end":{"line":46,"column":142}},"17":{"start":{"line":49,"column":0},"end":{"line":51,"column":2}},"18":{"start":{"line":50,"column":4},"end":{"line":50,"column":148}},"19":{"start":{"line":53,"column":0},"end":{"line":55,"column":2}},"20":{"start":{"line":54,"column":4},"end":{"line":54,"column":136}},"21":{"start":{"line":57,"column":0},"end":{"line":75,"column":1}},"22":{"start":{"line":58,"column":4},"end":{"line":58,"column":48}},"23":{"start":{"line":60,"column":4},"end":{"line":60,"column":20}},"24":{"start":{"line":62,"column":4},"end":{"line":65,"column":7}},"25":{"start":{"line":63,"column":8},"end":{"line":63,"column":36}},"26":{"start":{"line":64,"column":8},"end":{"line":64,"column":55}},"27":{"start":{"line":67,"column":4},"end":{"line":70,"column":7}},"28":{"start":{"line":68,"column":8},"end":{"line":68,"column":31}},"29":{"start":{"line":69,"column":8},"end":{"line":69,"column":50}},"30":{"start":{"line":73,"column":4},"end":{"line":73,"column":21}},"31":{"start":{"line":74,"column":4},"end":{"line":74,"column":57}},"32":{"start":{"line":77,"column":0},"end":{"line":85,"column":3}},"33":{"start":{"line":79,"column":8},"end":{"line":79,"column":30}},"34":{"start":{"line":82,"column":8},"end":{"line":82,"column":29}},"35":{"start":{"line":83,"column":8},"end":{"line":83,"column":19}},"36":{"start":{"line":87,"column":0},"end":{"line":95,"column":3}},"37":{"start":{"line":89,"column":8},"end":{"line":89,"column":32}},"38":{"start":{"line":92,"column":8},"end":{"line":92,"column":31}},"39":{"start":{"line":93,"column":8},"end":{"line":93,"column":19}},"40":{"start":{"line":97,"column":0},"end":{"line":317,"column":2}},"41":{"start":{"line":98,"column":4},"end":{"line":104,"column":7}},"42":{"start":{"line":106,"column":4},"end":{"line":111,"column":7}},"43":{"start":{"line":113,"column":4},"end":{"line":118,"column":7}},"44":{"start":{"line":120,"column":4},"end":{"line":126,"column":7}},"45":{"start":{"line":124,"column":80},"end":{"line":124,"column":93}},"46":{"start":{"line":128,"column":4},"end":{"line":135,"column":7}},"47":{"start":{"line":137,"column":4},"end":{"line":143,"column":7}},"48":{"start":{"line":145,"column":4},"end":{"line":151,"column":7}},"49":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"50":{"start":{"line":160,"column":4},"end":{"line":166,"column":7}},"51":{"start":{"line":168,"column":4},"end":{"line":173,"column":7}},"52":{"start":{"line":175,"column":4},"end":{"line":181,"column":7}},"53":{"start":{"line":183,"column":4},"end":{"line":188,"column":7}},"54":{"start":{"line":190,"column":4},"end":{"line":195,"column":7}},"55":{"start":{"line":197,"column":4},"end":{"line":202,"column":7}},"56":{"start":{"line":204,"column":4},"end":{"line":209,"column":7}},"57":{"start":{"line":211,"column":4},"end":{"line":217,"column":7}},"58":{"start":{"line":219,"column":4},"end":{"line":223,"column":7}},"59":{"start":{"line":225,"column":4},"end":{"line":229,"column":7}},"60":{"start":{"line":231,"column":4},"end":{"line":235,"column":7}},"61":{"start":{"line":237,"column":4},"end":{"line":241,"column":7}},"62":{"start":{"line":243,"column":4},"end":{"line":247,"column":7}},"63":{"start":{"line":249,"column":4},"end":{"line":253,"column":7}},"64":{"start":{"line":255,"column":4},"end":{"line":261,"column":7}},"65":{"start":{"line":265,"column":4},"end":{"line":288,"column":7}},"66":{"start":{"line":291,"column":4},"end":{"line":316,"column":6}},"67":{"start":{"line":320,"column":0},"end":{"line":355,"column":2}},"68":{"start":{"line":321,"column":4},"end":{"line":354,"column":6}},"69":{"start":{"line":357,"column":0},"end":{"line":360,"column":2}},"70":{"start":{"line":358,"column":4},"end":{"line":358,"column":42}},"71":{"start":{"line":359,"column":4},"end":{"line":359,"column":19}},"72":{"start":{"line":362,"column":0},"end":{"line":364,"column":2}},"73":{"start":{"line":363,"column":4},"end":{"line":363,"column":72}},"74":{"start":{"line":366,"column":0},"end":{"line":368,"column":2}},"75":{"start":{"line":367,"column":4},"end":{"line":367,"column":68}},"76":{"start":{"line":371,"column":0},"end":{"line":371,"column":21}}},"branchMap":{"1":{"line":38,"type":"cond-expr","locations":[{"start":{"line":38,"column":70},"end":{"line":38,"column":90}},{"start":{"line":38,"column":93},"end":{"line":38,"column":115}}]},"2":{"line":38,"type":"binary-expr","locations":[{"start":{"line":38,"column":12},"end":{"line":38,"column":35}},{"start":{"line":38,"column":39},"end":{"line":38,"column":66}}]},"3":{"line":42,"type":"cond-expr","locations":[{"start":{"line":42,"column":70},"end":{"line":42,"column":109}},{"start":{"line":42,"column":112},"end":{"line":42,"column":153}}]},"4":{"line":42,"type":"binary-expr","locations":[{"start":{"line":42,"column":12},"end":{"line":42,"column":35}},{"start":{"line":42,"column":39},"end":{"line":42,"column":66}}]},"5":{"line":46,"type":"cond-expr","locations":[{"start":{"line":46,"column":70},"end":{"line":46,"column":103}},{"start":{"line":46,"column":106},"end":{"line":46,"column":141}}]},"6":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":12},"end":{"line":46,"column":35}},{"start":{"line":46,"column":39},"end":{"line":46,"column":66}}]},"7":{"line":50,"type":"cond-expr","locations":[{"start":{"line":50,"column":70},"end":{"line":50,"column":106}},{"start":{"line":50,"column":109},"end":{"line":50,"column":147}}]},"8":{"line":50,"type":"binary-expr","locations":[{"start":{"line":50,"column":12},"end":{"line":50,"column":35}},{"start":{"line":50,"column":39},"end":{"line":50,"column":66}}]},"9":{"line":54,"type":"cond-expr","locations":[{"start":{"line":54,"column":70},"end":{"line":54,"column":100}},{"start":{"line":54,"column":103},"end":{"line":54,"column":135}}]},"10":{"line":54,"type":"binary-expr","locations":[{"start":{"line":54,"column":12},"end":{"line":54,"column":35}},{"start":{"line":54,"column":39},"end":{"line":54,"column":66}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js","s":{"1":1,"2":1,"3":1,"4":1,"5":26,"6":1,"7":67,"8":1,"9":55,"10":20,"11":35,"12":1,"13":67,"14":0,"15":67,"16":15,"17":52,"18":1,"19":15,"20":15,"21":4,"22":15,"23":15,"24":15,"25":60,"26":18,"27":15,"28":1,"29":13,"30":13,"31":13,"32":11,"33":13,"34":52,"35":24,"36":13,"37":1,"38":12,"39":11,"40":12,"41":11,"42":12,"43":12,"44":12,"45":12,"46":12,"47":1,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":2,"55":2,"56":4,"57":2,"58":1,"59":15,"60":15,"61":15,"62":15,"63":15,"64":14,"65":15,"66":15,"67":15,"68":12,"69":20,"70":4,"71":15,"72":1,"73":5,"74":7,"75":2,"76":5,"77":5,"78":5,"79":0,"80":5,"81":5,"82":7,"83":5,"84":5,"85":0,"86":5,"87":1,"88":16,"89":13,"90":16,"91":13,"92":16,"93":13,"94":16,"95":1,"96":5,"97":5,"98":5,"99":5,"100":0,"101":5,"102":6,"103":5,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":0,"111":1,"112":2,"113":1,"114":1,"115":80,"116":80,"117":8,"118":72,"119":58,"120":14,"121":9,"122":5,"123":1,"124":0,"125":0,"126":0,"127":0,"128":1},"b":{"1":[67,59,53],"2":[20,35],"3":[0,67],"4":[15,52],"5":[15,11],"6":[4,11],"7":[15,0],"8":[13,0],"9":[11,2],"10":[11,1],"11":[11,1],"12":[2,0],"13":[2,0],"14":[2,0],"15":[14,1],"16":[12,3],"17":[4,16],"18":[2,5],"19":[7,5],"20":[5,0],"21":[5,1],"22":[0,7],"23":[0,5],"24":[5,4],"25":[13,3],"26":[13,3],"27":[13,3],"28":[0,5],"29":[0,0],"30":[0,6],"31":[0,1],"32":[8,72],"33":[80,8],"34":[58,14],"35":[9,5]},"f":{"1":26,"2":67,"3":55,"4":67,"5":15,"6":60,"7":18,"8":13,"9":52,"10":24,"11":12,"12":2,"13":4,"14":15,"15":20,"16":5,"17":7,"18":7,"19":16,"20":5,"21":6,"22":1,"23":2,"24":80,"25":0},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":31},"end":{"line":35,"column":49}}},"2":{"name":"(anonymous_2)","line":39,"loc":{"start":{"line":39,"column":30},"end":{"line":39,"column":53}}},"3":{"name":"(anonymous_3)","line":43,"loc":{"start":{"line":43,"column":39},"end":{"line":43,"column":62}}},"4":{"name":"(anonymous_4)","line":50,"loc":{"start":{"line":50,"column":32},"end":{"line":50,"column":55}}},"5":{"name":"(anonymous_5)","line":66,"loc":{"start":{"line":66,"column":25},"end":{"line":66,"column":43}}},"6":{"name":"(anonymous_6)","line":78,"loc":{"start":{"line":78,"column":49},"end":{"line":78,"column":64}}},"7":{"name":"(anonymous_7)","line":80,"loc":{"start":{"line":80,"column":15},"end":{"line":80,"column":28}}},"8":{"name":"(anonymous_8)","line":94,"loc":{"start":{"line":94,"column":32},"end":{"line":94,"column":50}}},"9":{"name":"(anonymous_9)","line":103,"loc":{"start":{"line":103,"column":49},"end":{"line":103,"column":64}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":15},"end":{"line":105,"column":28}}},"11":{"name":"(anonymous_11)","line":119,"loc":{"start":{"line":119,"column":33},"end":{"line":119,"column":46}}},"12":{"name":"(anonymous_12)","line":138,"loc":{"start":{"line":138,"column":40},"end":{"line":138,"column":58}}},"13":{"name":"(anonymous_13)","line":147,"loc":{"start":{"line":147,"column":40},"end":{"line":147,"column":53}}},"14":{"name":"(anonymous_14)","line":162,"loc":{"start":{"line":162,"column":27},"end":{"line":162,"column":43}}},"15":{"name":"(anonymous_15)","line":176,"loc":{"start":{"line":176,"column":35},"end":{"line":176,"column":49}}},"16":{"name":"(anonymous_16)","line":192,"loc":{"start":{"line":192,"column":24},"end":{"line":192,"column":42}}},"17":{"name":"(anonymous_17)","line":193,"loc":{"start":{"line":193,"column":18},"end":{"line":193,"column":33}}},"18":{"name":"(anonymous_18)","line":208,"loc":{"start":{"line":208,"column":40},"end":{"line":208,"column":55}}},"19":{"name":"(anonymous_19)","line":227,"loc":{"start":{"line":227,"column":25},"end":{"line":227,"column":39}}},"20":{"name":"(anonymous_20)","line":245,"loc":{"start":{"line":245,"column":25},"end":{"line":245,"column":40}}},"21":{"name":"(anonymous_21)","line":258,"loc":{"start":{"line":258,"column":34},"end":{"line":258,"column":49}}},"22":{"name":"(anonymous_22)","line":273,"loc":{"start":{"line":273,"column":26},"end":{"line":273,"column":40}}},"23":{"name":"(anonymous_23)","line":290,"loc":{"start":{"line":290,"column":34},"end":{"line":290,"column":49}}},"24":{"name":"(anonymous_24)","line":297,"loc":{"start":{"line":297,"column":28},"end":{"line":297,"column":47}}},"25":{"name":"(anonymous_25)","line":310,"loc":{"start":{"line":310,"column":29},"end":{"line":310,"column":46}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":40}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":29}},"4":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"5":{"start":{"line":36,"column":4},"end":{"line":36,"column":37}},"6":{"start":{"line":39,"column":0},"end":{"line":41,"column":2}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":95}},"8":{"start":{"line":43,"column":0},"end":{"line":48,"column":2}},"9":{"start":{"line":44,"column":4},"end":{"line":46,"column":5}},"10":{"start":{"line":45,"column":8},"end":{"line":45,"column":35}},"11":{"start":{"line":47,"column":4},"end":{"line":47,"column":50}},"12":{"start":{"line":50,"column":0},"end":{"line":57,"column":2}},"13":{"start":{"line":51,"column":4},"end":{"line":55,"column":5}},"14":{"start":{"line":52,"column":8},"end":{"line":52,"column":25}},"15":{"start":{"line":53,"column":11},"end":{"line":55,"column":5}},"16":{"start":{"line":54,"column":8},"end":{"line":54,"column":27}},"17":{"start":{"line":56,"column":4},"end":{"line":56,"column":36}},"18":{"start":{"line":66,"column":0},"end":{"line":85,"column":2}},"19":{"start":{"line":68,"column":4},"end":{"line":68,"column":57}},"20":{"start":{"line":70,"column":4},"end":{"line":72,"column":5}},"21":{"start":{"line":71,"column":8},"end":{"line":71,"column":59}},"22":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"23":{"start":{"line":75,"column":8},"end":{"line":75,"column":55}},"24":{"start":{"line":78,"column":4},"end":{"line":82,"column":7}},"25":{"start":{"line":79,"column":8},"end":{"line":79,"column":42}},"26":{"start":{"line":81,"column":8},"end":{"line":81,"column":55}},"27":{"start":{"line":84,"column":4},"end":{"line":84,"column":19}},"28":{"start":{"line":94,"column":0},"end":{"line":110,"column":2}},"29":{"start":{"line":96,"column":4},"end":{"line":96,"column":57}},"30":{"start":{"line":97,"column":4},"end":{"line":97,"column":55}},"31":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"32":{"start":{"line":100,"column":8},"end":{"line":100,"column":55}},"33":{"start":{"line":103,"column":4},"end":{"line":107,"column":7}},"34":{"start":{"line":104,"column":8},"end":{"line":104,"column":42}},"35":{"start":{"line":106,"column":8},"end":{"line":106,"column":55}},"36":{"start":{"line":109,"column":4},"end":{"line":109,"column":19}},"37":{"start":{"line":119,"column":0},"end":{"line":129,"column":2}},"38":{"start":{"line":120,"column":4},"end":{"line":121,"column":57}},"39":{"start":{"line":121,"column":8},"end":{"line":121,"column":57}},"40":{"start":{"line":122,"column":4},"end":{"line":123,"column":67}},"41":{"start":{"line":123,"column":8},"end":{"line":123,"column":67}},"42":{"start":{"line":124,"column":4},"end":{"line":124,"column":41}},"43":{"start":{"line":125,"column":4},"end":{"line":125,"column":37}},"44":{"start":{"line":126,"column":4},"end":{"line":126,"column":49}},"45":{"start":{"line":127,"column":4},"end":{"line":127,"column":43}},"46":{"start":{"line":128,"column":4},"end":{"line":128,"column":14}},"47":{"start":{"line":138,"column":0},"end":{"line":153,"column":2}},"48":{"start":{"line":139,"column":4},"end":{"line":140,"column":67}},"49":{"start":{"line":140,"column":8},"end":{"line":140,"column":67}},"50":{"start":{"line":141,"column":4},"end":{"line":142,"column":77}},"51":{"start":{"line":142,"column":8},"end":{"line":142,"column":77}},"52":{"start":{"line":143,"column":4},"end":{"line":143,"column":75}},"53":{"start":{"line":144,"column":4},"end":{"line":144,"column":55}},"54":{"start":{"line":146,"column":4},"end":{"line":150,"column":5}},"55":{"start":{"line":147,"column":8},"end":{"line":149,"column":11}},"56":{"start":{"line":148,"column":12},"end":{"line":148,"column":43}},"57":{"start":{"line":152,"column":4},"end":{"line":152,"column":19}},"58":{"start":{"line":162,"column":0},"end":{"line":183,"column":2}},"59":{"start":{"line":165,"column":4},"end":{"line":165,"column":53}},"60":{"start":{"line":166,"column":4},"end":{"line":166,"column":51}},"61":{"start":{"line":167,"column":4},"end":{"line":167,"column":45}},"62":{"start":{"line":168,"column":4},"end":{"line":168,"column":55}},"63":{"start":{"line":169,"column":4},"end":{"line":170,"column":53}},"64":{"start":{"line":170,"column":8},"end":{"line":170,"column":53}},"65":{"start":{"line":172,"column":4},"end":{"line":172,"column":59}},"66":{"start":{"line":173,"column":4},"end":{"line":173,"column":69}},"67":{"start":{"line":175,"column":4},"end":{"line":180,"column":5}},"68":{"start":{"line":176,"column":8},"end":{"line":179,"column":11}},"69":{"start":{"line":177,"column":12},"end":{"line":178,"column":56}},"70":{"start":{"line":178,"column":16},"end":{"line":178,"column":56}},"71":{"start":{"line":182,"column":4},"end":{"line":182,"column":17}},"72":{"start":{"line":192,"column":0},"end":{"line":218,"column":2}},"73":{"start":{"line":193,"column":4},"end":{"line":204,"column":6}},"74":{"start":{"line":195,"column":8},"end":{"line":196,"column":24}},"75":{"start":{"line":196,"column":12},"end":{"line":196,"column":24}},"76":{"start":{"line":198,"column":8},"end":{"line":198,"column":30}},"77":{"start":{"line":200,"column":8},"end":{"line":203,"column":41}},"78":{"start":{"line":201,"column":12},"end":{"line":201,"column":25}},"79":{"start":{"line":203,"column":12},"end":{"line":203,"column":41}},"80":{"start":{"line":207,"column":4},"end":{"line":207,"column":42}},"81":{"start":{"line":208,"column":4},"end":{"line":210,"column":7}},"82":{"start":{"line":209,"column":8},"end":{"line":209,"column":76}},"83":{"start":{"line":212,"column":4},"end":{"line":212,"column":19}},"84":{"start":{"line":214,"column":4},"end":{"line":215,"column":59}},"85":{"start":{"line":215,"column":8},"end":{"line":215,"column":59}},"86":{"start":{"line":217,"column":4},"end":{"line":217,"column":19}},"87":{"start":{"line":227,"column":0},"end":{"line":236,"column":2}},"88":{"start":{"line":228,"column":4},"end":{"line":229,"column":59}},"89":{"start":{"line":229,"column":8},"end":{"line":229,"column":59}},"90":{"start":{"line":230,"column":4},"end":{"line":231,"column":69}},"91":{"start":{"line":231,"column":8},"end":{"line":231,"column":69}},"92":{"start":{"line":232,"column":4},"end":{"line":233,"column":53}},"93":{"start":{"line":233,"column":8},"end":{"line":233,"column":53}},"94":{"start":{"line":235,"column":4},"end":{"line":235,"column":15}},"95":{"start":{"line":245,"column":0},"end":{"line":264,"column":2}},"96":{"start":{"line":248,"column":4},"end":{"line":248,"column":43}},"97":{"start":{"line":249,"column":4},"end":{"line":249,"column":59}},"98":{"start":{"line":250,"column":4},"end":{"line":250,"column":53}},"99":{"start":{"line":253,"column":4},"end":{"line":255,"column":5}},"100":{"start":{"line":254,"column":8},"end":{"line":254,"column":55}},"101":{"start":{"line":258,"column":4},"end":{"line":261,"column":7}},"102":{"start":{"line":260,"column":8},"end":{"line":260,"column":75}},"103":{"start":{"line":263,"column":4},"end":{"line":263,"column":16}},"104":{"start":{"line":273,"column":0},"end":{"line":295,"column":2}},"105":{"start":{"line":275,"column":4},"end":{"line":275,"column":47}},"106":{"start":{"line":276,"column":4},"end":{"line":276,"column":43}},"107":{"start":{"line":277,"column":4},"end":{"line":277,"column":41}},"108":{"start":{"line":278,"column":4},"end":{"line":278,"column":55}},"109":{"start":{"line":287,"column":4},"end":{"line":289,"column":5}},"110":{"start":{"line":288,"column":8},"end":{"line":288,"column":25}},"111":{"start":{"line":290,"column":4},"end":{"line":292,"column":7}},"112":{"start":{"line":291,"column":8},"end":{"line":291,"column":36}},"113":{"start":{"line":294,"column":4},"end":{"line":294,"column":16}},"114":{"start":{"line":297,"column":0},"end":{"line":307,"column":2}},"115":{"start":{"line":298,"column":4},"end":{"line":298,"column":33}},"116":{"start":{"line":299,"column":4},"end":{"line":305,"column":5}},"117":{"start":{"line":300,"column":8},"end":{"line":300,"column":37}},"118":{"start":{"line":301,"column":11},"end":{"line":305,"column":5}},"119":{"start":{"line":302,"column":8},"end":{"line":302,"column":23}},"120":{"start":{"line":303,"column":11},"end":{"line":305,"column":5}},"121":{"start":{"line":304,"column":8},"end":{"line":304,"column":30}},"122":{"start":{"line":306,"column":4},"end":{"line":306,"column":28}},"123":{"start":{"line":310,"column":0},"end":{"line":317,"column":2}},"124":{"start":{"line":312,"column":4},"end":{"line":312,"column":65}},"125":{"start":{"line":313,"column":4},"end":{"line":313,"column":63}},"126":{"start":{"line":314,"column":4},"end":{"line":314,"column":63}},"127":{"start":{"line":316,"column":4},"end":{"line":316,"column":18}},"128":{"start":{"line":319,"column":0},"end":{"line":334,"column":2}}},"branchMap":{"1":{"line":40,"type":"binary-expr","locations":[{"start":{"line":40,"column":11},"end":{"line":40,"column":35}},{"start":{"line":40,"column":39},"end":{"line":40,"column":64}},{"start":{"line":40,"column":68},"end":{"line":40,"column":94}}]},"2":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"3":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"4":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":11},"end":{"line":53,"column":11}},{"start":{"line":53,"column":11},"end":{"line":53,"column":11}}]},"5":{"line":68,"type":"binary-expr","locations":[{"start":{"line":68,"column":19},"end":{"line":68,"column":31}},{"start":{"line":68,"column":35},"end":{"line":68,"column":56}}]},"6":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":4},"end":{"line":70,"column":4}},{"start":{"line":70,"column":4},"end":{"line":70,"column":4}}]},"7":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":74,"column":4}},{"start":{"line":74,"column":4},"end":{"line":74,"column":4}}]},"8":{"line":96,"type":"binary-expr","locations":[{"start":{"line":96,"column":19},"end":{"line":96,"column":31}},{"start":{"line":96,"column":35},"end":{"line":96,"column":56}}]},"9":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"10":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":4}},{"start":{"line":120,"column":4},"end":{"line":120,"column":4}}]},"11":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":122,"column":4}},{"start":{"line":122,"column":4},"end":{"line":122,"column":4}}]},"12":{"line":139,"type":"if","locations":[{"start":{"line":139,"column":4},"end":{"line":139,"column":4}},{"start":{"line":139,"column":4},"end":{"line":139,"column":4}}]},"13":{"line":141,"type":"if","locations":[{"start":{"line":141,"column":4},"end":{"line":141,"column":4}},{"start":{"line":141,"column":4},"end":{"line":141,"column":4}}]},"14":{"line":146,"type":"if","locations":[{"start":{"line":146,"column":4},"end":{"line":146,"column":4}},{"start":{"line":146,"column":4},"end":{"line":146,"column":4}}]},"15":{"line":169,"type":"if","locations":[{"start":{"line":169,"column":4},"end":{"line":169,"column":4}},{"start":{"line":169,"column":4},"end":{"line":169,"column":4}}]},"16":{"line":175,"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":175,"column":4}},{"start":{"line":175,"column":4},"end":{"line":175,"column":4}}]},"17":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":12},"end":{"line":177,"column":12}},{"start":{"line":177,"column":12},"end":{"line":177,"column":12}}]},"18":{"line":195,"type":"if","locations":[{"start":{"line":195,"column":8},"end":{"line":195,"column":8}},{"start":{"line":195,"column":8},"end":{"line":195,"column":8}}]},"19":{"line":195,"type":"binary-expr","locations":[{"start":{"line":195,"column":11},"end":{"line":195,"column":25}},{"start":{"line":195,"column":29},"end":{"line":195,"column":57}}]},"20":{"line":200,"type":"if","locations":[{"start":{"line":200,"column":8},"end":{"line":200,"column":8}},{"start":{"line":200,"column":8},"end":{"line":200,"column":8}}]},"21":{"line":207,"type":"binary-expr","locations":[{"start":{"line":207,"column":21},"end":{"line":207,"column":35}},{"start":{"line":207,"column":39},"end":{"line":207,"column":41}}]},"22":{"line":209,"type":"cond-expr","locations":[{"start":{"line":209,"column":40},"end":{"line":209,"column":58}},{"start":{"line":209,"column":61},"end":{"line":209,"column":75}}]},"23":{"line":214,"type":"if","locations":[{"start":{"line":214,"column":4},"end":{"line":214,"column":4}},{"start":{"line":214,"column":4},"end":{"line":214,"column":4}}]},"24":{"line":214,"type":"binary-expr","locations":[{"start":{"line":214,"column":7},"end":{"line":214,"column":22}},{"start":{"line":214,"column":26},"end":{"line":214,"column":59}}]},"25":{"line":228,"type":"if","locations":[{"start":{"line":228,"column":4},"end":{"line":228,"column":4}},{"start":{"line":228,"column":4},"end":{"line":228,"column":4}}]},"26":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":4},"end":{"line":230,"column":4}},{"start":{"line":230,"column":4},"end":{"line":230,"column":4}}]},"27":{"line":232,"type":"if","locations":[{"start":{"line":232,"column":4},"end":{"line":232,"column":4}},{"start":{"line":232,"column":4},"end":{"line":232,"column":4}}]},"28":{"line":253,"type":"if","locations":[{"start":{"line":253,"column":4},"end":{"line":253,"column":4}},{"start":{"line":253,"column":4},"end":{"line":253,"column":4}}]},"29":{"line":254,"type":"cond-expr","locations":[{"start":{"line":254,"column":36},"end":{"line":254,"column":49}},{"start":{"line":254,"column":52},"end":{"line":254,"column":54}}]},"30":{"line":260,"type":"cond-expr","locations":[{"start":{"line":260,"column":45},"end":{"line":260,"column":50}},{"start":{"line":260,"column":53},"end":{"line":260,"column":74}}]},"31":{"line":287,"type":"if","locations":[{"start":{"line":287,"column":4},"end":{"line":287,"column":4}},{"start":{"line":287,"column":4},"end":{"line":287,"column":4}}]},"32":{"line":299,"type":"if","locations":[{"start":{"line":299,"column":4},"end":{"line":299,"column":4}},{"start":{"line":299,"column":4},"end":{"line":299,"column":4}}]},"33":{"line":299,"type":"binary-expr","locations":[{"start":{"line":299,"column":8},"end":{"line":299,"column":22}},{"start":{"line":299,"column":26},"end":{"line":299,"column":41}}]},"34":{"line":301,"type":"if","locations":[{"start":{"line":301,"column":11},"end":{"line":301,"column":11}},{"start":{"line":301,"column":11},"end":{"line":301,"column":11}}]},"35":{"line":303,"type":"if","locations":[{"start":{"line":303,"column":11},"end":{"line":303,"column":11}},{"start":{"line":303,"column":11},"end":{"line":303,"column":11}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js","s":{"1":1,"2":1,"3":1,"4":5096,"5":5096,"6":5096,"7":5096,"8":5096,"9":5096,"10":1,"11":4930,"12":1,"13":117,"14":1,"15":116,"16":57,"17":1,"18":117,"19":2,"20":1,"21":115,"22":23,"23":92,"24":166,"25":1,"26":115,"27":115,"28":6,"29":10,"30":109,"31":1,"32":113,"33":113,"34":113,"35":113,"36":113,"37":1,"38":4930,"39":4930,"40":4930,"41":4930,"42":462,"43":462,"44":4468,"45":1,"46":4930,"47":4930,"48":109,"49":109,"50":51,"51":51,"52":58,"53":4930,"54":4930,"55":1,"56":4,"57":4,"58":4,"59":1},"b":{"1":[5096,780],"2":[31,86],"3":[57,59],"4":[2,115],"5":[23,92],"6":[158,8],"7":[6,109],"8":[3,7],"9":[10,3],"10":[58,51],"11":[109,59],"12":[462,4468],"13":[462,154],"14":[51,58]},"f":{"1":5096,"2":4930,"3":117,"4":116,"5":117,"6":115,"7":166,"8":115,"9":10,"10":113,"11":4930,"12":4930,"13":109,"14":51,"15":4},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":13},"end":{"line":26,"column":32}}},"2":{"name":"(anonymous_2)","line":35,"loc":{"start":{"line":35,"column":37},"end":{"line":35,"column":51}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":27},"end":{"line":46,"column":43}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":35},"end":{"line":57,"column":51}}},"5":{"name":"(anonymous_5)","line":70,"loc":{"start":{"line":70,"column":32},"end":{"line":70,"column":48}}},"6":{"name":"(anonymous_6)","line":83,"loc":{"start":{"line":83,"column":31},"end":{"line":83,"column":47}}},"7":{"name":"(anonymous_7)","line":88,"loc":{"start":{"line":88,"column":35},"end":{"line":88,"column":63}}},"8":{"name":"(anonymous_8)","line":100,"loc":{"start":{"line":100,"column":32},"end":{"line":100,"column":50}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":26},"end":{"line":104,"column":39}}},"10":{"name":"(anonymous_10)","line":119,"loc":{"start":{"line":119,"column":29},"end":{"line":119,"column":45}}},"11":{"name":"(anonymous_11)","line":132,"loc":{"start":{"line":132,"column":34},"end":{"line":132,"column":49}}},"12":{"name":"(anonymous_12)","line":144,"loc":{"start":{"line":144,"column":29},"end":{"line":144,"column":40}}},"13":{"name":"(anonymous_13)","line":146,"loc":{"start":{"line":146,"column":15},"end":{"line":146,"column":27}}},"14":{"name":"(anonymous_14)","line":149,"loc":{"start":{"line":149,"column":60},"end":{"line":149,"column":83}}},"15":{"name":"(anonymous_15)","line":166,"loc":{"start":{"line":166,"column":27},"end":{"line":166,"column":39}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":33,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":29}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":29}},"6":{"start":{"line":29,"column":4},"end":{"line":29,"column":38}},"7":{"start":{"line":30,"column":4},"end":{"line":30,"column":49}},"8":{"start":{"line":31,"column":4},"end":{"line":31,"column":51}},"9":{"start":{"line":32,"column":4},"end":{"line":32,"column":31}},"10":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"11":{"start":{"line":36,"column":4},"end":{"line":36,"column":29}},"12":{"start":{"line":46,"column":0},"end":{"line":48,"column":2}},"13":{"start":{"line":47,"column":4},"end":{"line":47,"column":69}},"14":{"start":{"line":57,"column":0},"end":{"line":61,"column":2}},"15":{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},"16":{"start":{"line":59,"column":8},"end":{"line":59,"column":26}},"17":{"start":{"line":70,"column":0},"end":{"line":74,"column":2}},"18":{"start":{"line":71,"column":4},"end":{"line":73,"column":5}},"19":{"start":{"line":72,"column":8},"end":{"line":72,"column":45}},"20":{"start":{"line":83,"column":0},"end":{"line":91,"column":2}},"21":{"start":{"line":84,"column":4},"end":{"line":86,"column":5}},"22":{"start":{"line":85,"column":8},"end":{"line":85,"column":20}},"23":{"start":{"line":88,"column":4},"end":{"line":90,"column":7}},"24":{"start":{"line":89,"column":8},"end":{"line":89,"column":64}},"25":{"start":{"line":100,"column":0},"end":{"line":110,"column":2}},"26":{"start":{"line":101,"column":4},"end":{"line":101,"column":21}},"27":{"start":{"line":103,"column":4},"end":{"line":109,"column":5}},"28":{"start":{"line":104,"column":8},"end":{"line":106,"column":11}},"29":{"start":{"line":105,"column":12},"end":{"line":105,"column":83}},"30":{"start":{"line":108,"column":8},"end":{"line":108,"column":86}},"31":{"start":{"line":119,"column":0},"end":{"line":130,"column":2}},"32":{"start":{"line":120,"column":4},"end":{"line":120,"column":34}},"33":{"start":{"line":121,"column":4},"end":{"line":121,"column":46}},"34":{"start":{"line":122,"column":4},"end":{"line":122,"column":40}},"35":{"start":{"line":123,"column":4},"end":{"line":123,"column":30}},"36":{"start":{"line":125,"column":4},"end":{"line":129,"column":6}},"37":{"start":{"line":132,"column":0},"end":{"line":142,"column":2}},"38":{"start":{"line":133,"column":4},"end":{"line":133,"column":32}},"39":{"start":{"line":134,"column":4},"end":{"line":134,"column":26}},"40":{"start":{"line":135,"column":4},"end":{"line":135,"column":36}},"41":{"start":{"line":136,"column":4},"end":{"line":141,"column":5}},"42":{"start":{"line":137,"column":8},"end":{"line":137,"column":42}},"43":{"start":{"line":138,"column":8},"end":{"line":138,"column":37}},"44":{"start":{"line":140,"column":8},"end":{"line":140,"column":28}},"45":{"start":{"line":144,"column":0},"end":{"line":157,"column":2}},"46":{"start":{"line":145,"column":4},"end":{"line":145,"column":22}},"47":{"start":{"line":146,"column":4},"end":{"line":154,"column":6}},"48":{"start":{"line":147,"column":8},"end":{"line":147,"column":78}},"49":{"start":{"line":148,"column":8},"end":{"line":152,"column":9}},"50":{"start":{"line":149,"column":12},"end":{"line":151,"column":15}},"51":{"start":{"line":150,"column":16},"end":{"line":150,"column":67}},"52":{"start":{"line":153,"column":8},"end":{"line":153,"column":72}},"53":{"start":{"line":155,"column":4},"end":{"line":155,"column":43}},"54":{"start":{"line":156,"column":4},"end":{"line":156,"column":16}},"55":{"start":{"line":166,"column":0},"end":{"line":170,"column":2}},"56":{"start":{"line":167,"column":4},"end":{"line":167,"column":72}},"57":{"start":{"line":168,"column":4},"end":{"line":168,"column":50}},"58":{"start":{"line":169,"column":4},"end":{"line":169,"column":19}},"59":{"start":{"line":172,"column":0},"end":{"line":172,"column":24}}},"branchMap":{"1":{"line":29,"type":"binary-expr","locations":[{"start":{"line":29,"column":18},"end":{"line":29,"column":32}},{"start":{"line":29,"column":36},"end":{"line":29,"column":37}}]},"2":{"line":47,"type":"cond-expr","locations":[{"start":{"line":47,"column":41},"end":{"line":47,"column":56}},{"start":{"line":47,"column":59},"end":{"line":47,"column":68}}]},"3":{"line":58,"type":"if","locations":[{"start":{"line":58,"column":4},"end":{"line":58,"column":4}},{"start":{"line":58,"column":4},"end":{"line":58,"column":4}}]},"4":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":71,"column":4}},{"start":{"line":71,"column":4},"end":{"line":71,"column":4}}]},"5":{"line":84,"type":"if","locations":[{"start":{"line":84,"column":4},"end":{"line":84,"column":4}},{"start":{"line":84,"column":4},"end":{"line":84,"column":4}}]},"6":{"line":89,"type":"cond-expr","locations":[{"start":{"line":89,"column":27},"end":{"line":89,"column":49}},{"start":{"line":89,"column":52},"end":{"line":89,"column":63}}]},"7":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]},"8":{"line":105,"type":"cond-expr","locations":[{"start":{"line":105,"column":50},"end":{"line":105,"column":76}},{"start":{"line":105,"column":79},"end":{"line":105,"column":82}}]},"9":{"line":105,"type":"binary-expr","locations":[{"start":{"line":105,"column":19},"end":{"line":105,"column":40}},{"start":{"line":105,"column":44},"end":{"line":105,"column":47}}]},"10":{"line":108,"type":"cond-expr","locations":[{"start":{"line":108,"column":48},"end":{"line":108,"column":76}},{"start":{"line":108,"column":79},"end":{"line":108,"column":85}}]},"11":{"line":108,"type":"binary-expr","locations":[{"start":{"line":108,"column":15},"end":{"line":108,"column":35}},{"start":{"line":108,"column":39},"end":{"line":108,"column":45}}]},"12":{"line":136,"type":"if","locations":[{"start":{"line":136,"column":4},"end":{"line":136,"column":4}},{"start":{"line":136,"column":4},"end":{"line":136,"column":4}}]},"13":{"line":137,"type":"binary-expr","locations":[{"start":{"line":137,"column":23},"end":{"line":137,"column":35}},{"start":{"line":137,"column":39},"end":{"line":137,"column":41}}]},"14":{"line":148,"type":"if","locations":[{"start":{"line":148,"column":8},"end":{"line":148,"column":8}},{"start":{"line":148,"column":8},"end":{"line":148,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js","s":{"1":1,"2":1,"3":2004,"4":2004,"5":2004,"6":2004,"7":2004,"8":2004,"9":1,"10":2004,"11":1,"12":0,"13":1,"14":20,"15":1,"16":2,"17":2,"18":1,"19":2004,"20":2004,"21":2004,"22":2004,"23":616,"24":616,"25":616,"26":2004,"27":2004,"28":1,"29":2004,"30":1,"31":2004,"32":2004,"33":17,"34":1,"35":2004,"36":2004,"37":1,"38":1,"39":2004,"40":2004,"41":1,"42":2,"43":2,"44":2,"45":1},"b":{"1":[0,0],"2":[8,12],"3":[20,11],"4":[2,0],"5":[616,1388],"6":[616,0]},"f":{"1":2004,"2":2004,"3":0,"4":20,"5":2,"6":2004,"7":2004,"8":2004,"9":17,"10":2004,"11":1,"12":1,"13":2},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":15},"end":{"line":26,"column":34}}},"2":{"name":"(anonymous_2)","line":35,"loc":{"start":{"line":35,"column":39},"end":{"line":35,"column":53}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":33},"end":{"line":46,"column":48}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":34},"end":{"line":57,"column":52}}},"5":{"name":"(anonymous_5)","line":68,"loc":{"start":{"line":68,"column":37},"end":{"line":68,"column":53}}},"6":{"name":"(anonymous_6)","line":82,"loc":{"start":{"line":82,"column":36},"end":{"line":82,"column":51}}},"7":{"name":"(anonymous_7)","line":100,"loc":{"start":{"line":100,"column":22},"end":{"line":100,"column":38}}},"8":{"name":"(anonymous_8)","line":104,"loc":{"start":{"line":104,"column":30},"end":{"line":104,"column":42}}},"9":{"name":"get","line":106,"loc":{"start":{"line":106,"column":11},"end":{"line":106,"column":26}}},"10":{"name":"(anonymous_10)","line":113,"loc":{"start":{"line":113,"column":35},"end":{"line":113,"column":47}}},"11":{"name":"(anonymous_11)","line":115,"loc":{"start":{"line":115,"column":14},"end":{"line":115,"column":34}}},"12":{"name":"(anonymous_12)","line":118,"loc":{"start":{"line":118,"column":11},"end":{"line":118,"column":34}}},"13":{"name":"(anonymous_13)","line":133,"loc":{"start":{"line":133,"column":29},"end":{"line":133,"column":41}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":26,"column":0},"end":{"line":33,"column":2}},"3":{"start":{"line":27,"column":4},"end":{"line":27,"column":29}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":33}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":33}},"6":{"start":{"line":30,"column":4},"end":{"line":30,"column":51}},"7":{"start":{"line":31,"column":4},"end":{"line":31,"column":49}},"8":{"start":{"line":32,"column":4},"end":{"line":32,"column":31}},"9":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"10":{"start":{"line":36,"column":4},"end":{"line":36,"column":29}},"11":{"start":{"line":46,"column":0},"end":{"line":48,"column":2}},"12":{"start":{"line":47,"column":4},"end":{"line":47,"column":64}},"13":{"start":{"line":57,"column":0},"end":{"line":59,"column":2}},"14":{"start":{"line":58,"column":4},"end":{"line":58,"column":91}},"15":{"start":{"line":68,"column":0},"end":{"line":72,"column":2}},"16":{"start":{"line":69,"column":4},"end":{"line":71,"column":5}},"17":{"start":{"line":70,"column":8},"end":{"line":70,"column":26}},"18":{"start":{"line":82,"column":0},"end":{"line":98,"column":2}},"19":{"start":{"line":83,"column":4},"end":{"line":86,"column":6}},"20":{"start":{"line":88,"column":4},"end":{"line":88,"column":37}},"21":{"start":{"line":89,"column":4},"end":{"line":89,"column":24}},"22":{"start":{"line":90,"column":4},"end":{"line":94,"column":5}},"23":{"start":{"line":91,"column":8},"end":{"line":91,"column":44}},"24":{"start":{"line":92,"column":8},"end":{"line":92,"column":28}},"25":{"start":{"line":93,"column":8},"end":{"line":93,"column":24}},"26":{"start":{"line":96,"column":4},"end":{"line":96,"column":44}},"27":{"start":{"line":97,"column":4},"end":{"line":97,"column":54}},"28":{"start":{"line":100,"column":0},"end":{"line":102,"column":2}},"29":{"start":{"line":101,"column":4},"end":{"line":101,"column":64}},"30":{"start":{"line":104,"column":0},"end":{"line":111,"column":2}},"31":{"start":{"line":105,"column":4},"end":{"line":105,"column":24}},"32":{"start":{"line":106,"column":4},"end":{"line":110,"column":6}},"33":{"start":{"line":107,"column":8},"end":{"line":109,"column":12}},"34":{"start":{"line":113,"column":0},"end":{"line":124,"column":2}},"35":{"start":{"line":114,"column":4},"end":{"line":114,"column":24}},"36":{"start":{"line":115,"column":4},"end":{"line":121,"column":6}},"37":{"start":{"line":116,"column":8},"end":{"line":120,"column":11}},"38":{"start":{"line":119,"column":12},"end":{"line":119,"column":57}},"39":{"start":{"line":122,"column":4},"end":{"line":122,"column":42}},"40":{"start":{"line":123,"column":4},"end":{"line":123,"column":15}},"41":{"start":{"line":133,"column":0},"end":{"line":141,"column":2}},"42":{"start":{"line":134,"column":4},"end":{"line":138,"column":6}},"43":{"start":{"line":139,"column":4},"end":{"line":139,"column":50}},"44":{"start":{"line":140,"column":4},"end":{"line":140,"column":19}},"45":{"start":{"line":143,"column":0},"end":{"line":143,"column":26}}},"branchMap":{"1":{"line":47,"type":"cond-expr","locations":[{"start":{"line":47,"column":33},"end":{"line":47,"column":57}},{"start":{"line":47,"column":60},"end":{"line":47,"column":63}}]},"2":{"line":58,"type":"cond-expr","locations":[{"start":{"line":58,"column":53},"end":{"line":58,"column":81}},{"start":{"line":58,"column":84},"end":{"line":58,"column":90}}]},"3":{"line":58,"type":"binary-expr","locations":[{"start":{"line":58,"column":11},"end":{"line":58,"column":31}},{"start":{"line":58,"column":35},"end":{"line":58,"column":50}}]},"4":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]},"5":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":4}},{"start":{"line":90,"column":4},"end":{"line":90,"column":4}}]},"6":{"line":91,"type":"binary-expr","locations":[{"start":{"line":91,"column":24},"end":{"line":91,"column":37}},{"start":{"line":91,"column":41},"end":{"line":91,"column":43}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js","s":{"1":1,"2":1,"3":1,"4":1,"5":308,"6":308,"7":308,"8":308,"9":308,"10":1,"11":308,"12":1,"13":308,"14":308,"15":308,"16":308,"17":0,"18":0,"19":308,"20":1,"21":308,"22":308,"23":7,"24":7,"25":1},"b":{"1":[308,0],"2":[0,308],"3":[0,0]},"f":{"1":308,"2":308,"3":308,"4":308,"5":7},"fnMap":{"1":{"name":"(anonymous_1)","line":30,"loc":{"start":{"line":30,"column":16},"end":{"line":30,"column":35}}},"2":{"name":"(anonymous_2)","line":39,"loc":{"start":{"line":39,"column":44},"end":{"line":39,"column":58}}},"3":{"name":"(anonymous_3)","line":44,"loc":{"start":{"line":44,"column":41},"end":{"line":44,"column":56}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":36},"end":{"line":57,"column":47}}},"5":{"name":"(anonymous_5)","line":60,"loc":{"start":{"line":60,"column":11},"end":{"line":60,"column":21}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":48}},"4":{"start":{"line":30,"column":0},"end":{"line":36,"column":2}},"5":{"start":{"line":31,"column":4},"end":{"line":31,"column":29}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":39}},"7":{"start":{"line":33,"column":4},"end":{"line":33,"column":43}},"8":{"start":{"line":34,"column":4},"end":{"line":34,"column":53}},"9":{"start":{"line":35,"column":4},"end":{"line":35,"column":31}},"10":{"start":{"line":39,"column":0},"end":{"line":41,"column":2}},"11":{"start":{"line":40,"column":4},"end":{"line":40,"column":29}},"12":{"start":{"line":44,"column":0},"end":{"line":54,"column":2}},"13":{"start":{"line":45,"column":4},"end":{"line":45,"column":32}},"14":{"start":{"line":46,"column":4},"end":{"line":46,"column":26}},"15":{"start":{"line":47,"column":4},"end":{"line":47,"column":36}},"16":{"start":{"line":48,"column":4},"end":{"line":53,"column":5}},"17":{"start":{"line":49,"column":8},"end":{"line":49,"column":42}},"18":{"start":{"line":50,"column":8},"end":{"line":50,"column":37}},"19":{"start":{"line":52,"column":8},"end":{"line":52,"column":28}},"20":{"start":{"line":57,"column":0},"end":{"line":70,"column":2}},"21":{"start":{"line":58,"column":4},"end":{"line":58,"column":21}},"22":{"start":{"line":60,"column":4},"end":{"line":69,"column":6}},"23":{"start":{"line":61,"column":8},"end":{"line":66,"column":11}},"24":{"start":{"line":68,"column":8},"end":{"line":68,"column":69}},"25":{"start":{"line":72,"column":0},"end":{"line":72,"column":31}}},"branchMap":{"1":{"line":34,"type":"binary-expr","locations":[{"start":{"line":34,"column":25},"end":{"line":34,"column":46}},{"start":{"line":34,"column":50},"end":{"line":34,"column":52}}]},"2":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":48,"column":4}},{"start":{"line":48,"column":4},"end":{"line":48,"column":4}}]},"3":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":23},"end":{"line":49,"column":35}},{"start":{"line":49,"column":39},"end":{"line":49,"column":41}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js","s":{"1":1,"2":1,"3":1,"4":10,"5":10,"6":10,"7":1,"8":10,"9":10,"10":1,"11":10,"12":10,"13":4,"14":10,"15":4,"16":10,"17":0,"18":1,"19":10,"20":10,"21":5,"22":5,"23":5,"24":5,"25":5,"26":1,"27":7,"28":7,"29":1,"30":10,"31":10,"32":10,"33":10,"34":1,"35":6,"36":1,"37":10,"38":10,"39":10,"40":0,"41":10,"42":0,"43":0,"44":0,"45":0,"46":0,"47":10,"48":10,"49":9,"50":9,"51":9,"52":7,"53":0,"54":10,"55":0,"56":1},"b":{"1":[10,0],"2":[4,6],"3":[4,6],"4":[0,10],"5":[5,5],"6":[10,6],"7":[5,0],"8":[7,0],"9":[7,7,7],"10":[0,10],"11":[0,10],"12":[10,5,5,0],"13":[0,0],"14":[10,0],"15":[9,0],"16":[9,9]},"f":{"1":10,"2":10,"3":10,"4":10,"5":5,"6":7,"7":10,"8":6,"9":10,"10":0,"11":0,"12":9,"13":7},"fnMap":{"1":{"name":"(anonymous_1)","line":28,"loc":{"start":{"line":28,"column":15},"end":{"line":28,"column":34}}},"2":{"name":"(anonymous_2)","line":49,"loc":{"start":{"line":49,"column":42},"end":{"line":49,"column":58}}},"3":{"name":"(anonymous_3)","line":63,"loc":{"start":{"line":63,"column":39},"end":{"line":63,"column":55}}},"4":{"name":"(anonymous_4)","line":85,"loc":{"start":{"line":85,"column":38},"end":{"line":85,"column":54}}},"5":{"name":"(anonymous_5)","line":92,"loc":{"start":{"line":92,"column":56},"end":{"line":92,"column":84}}},"6":{"name":"(anonymous_6)","line":108,"loc":{"start":{"line":108,"column":39},"end":{"line":108,"column":57}}},"7":{"name":"(anonymous_7)","line":121,"loc":{"start":{"line":121,"column":36},"end":{"line":121,"column":52}}},"8":{"name":"(anonymous_8)","line":138,"loc":{"start":{"line":138,"column":37},"end":{"line":138,"column":56}}},"9":{"name":"(anonymous_9)","line":148,"loc":{"start":{"line":148,"column":35},"end":{"line":148,"column":46}}},"10":{"name":"(anonymous_10)","line":162,"loc":{"start":{"line":162,"column":11},"end":{"line":162,"column":32}}},"11":{"name":"(anonymous_11)","line":164,"loc":{"start":{"line":164,"column":29},"end":{"line":164,"column":42}}},"12":{"name":"(anonymous_12)","line":176,"loc":{"start":{"line":176,"column":55},"end":{"line":176,"column":78}}},"13":{"name":"(anonymous_13)","line":181,"loc":{"start":{"line":181,"column":78},"end":{"line":181,"column":99}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"3":{"start":{"line":28,"column":0},"end":{"line":38,"column":2}},"4":{"start":{"line":29,"column":4},"end":{"line":29,"column":19}},"5":{"start":{"line":30,"column":4},"end":{"line":30,"column":25}},"6":{"start":{"line":32,"column":4},"end":{"line":37,"column":5}},"7":{"start":{"line":49,"column":0},"end":{"line":53,"column":2}},"8":{"start":{"line":50,"column":4},"end":{"line":52,"column":5}},"9":{"start":{"line":51,"column":8},"end":{"line":51,"column":26}},"10":{"start":{"line":63,"column":0},"end":{"line":75,"column":2}},"11":{"start":{"line":64,"column":4},"end":{"line":64,"column":49}},"12":{"start":{"line":66,"column":4},"end":{"line":67,"column":26}},"13":{"start":{"line":67,"column":8},"end":{"line":67,"column":26}},"14":{"start":{"line":69,"column":4},"end":{"line":70,"column":32}},"15":{"start":{"line":70,"column":8},"end":{"line":70,"column":32}},"16":{"start":{"line":72,"column":4},"end":{"line":74,"column":5}},"17":{"start":{"line":73,"column":8},"end":{"line":73,"column":45}},"18":{"start":{"line":85,"column":0},"end":{"line":98,"column":2}},"19":{"start":{"line":86,"column":4},"end":{"line":86,"column":49}},"20":{"start":{"line":88,"column":4},"end":{"line":90,"column":5}},"21":{"start":{"line":89,"column":8},"end":{"line":89,"column":20}},"22":{"start":{"line":92,"column":4},"end":{"line":94,"column":7}},"23":{"start":{"line":93,"column":8},"end":{"line":93,"column":68}},"24":{"start":{"line":95,"column":4},"end":{"line":95,"column":35}},"25":{"start":{"line":97,"column":4},"end":{"line":97,"column":25}},"26":{"start":{"line":108,"column":0},"end":{"line":112,"column":2}},"27":{"start":{"line":109,"column":4},"end":{"line":109,"column":49}},"28":{"start":{"line":111,"column":4},"end":{"line":111,"column":116}},"29":{"start":{"line":121,"column":0},"end":{"line":130,"column":2}},"30":{"start":{"line":122,"column":4},"end":{"line":122,"column":48}},"31":{"start":{"line":123,"column":4},"end":{"line":123,"column":41}},"32":{"start":{"line":124,"column":4},"end":{"line":124,"column":31}},"33":{"start":{"line":126,"column":4},"end":{"line":129,"column":6}},"34":{"start":{"line":138,"column":0},"end":{"line":140,"column":2}},"35":{"start":{"line":139,"column":4},"end":{"line":139,"column":77}},"36":{"start":{"line":148,"column":0},"end":{"line":194,"column":2}},"37":{"start":{"line":149,"column":4},"end":{"line":149,"column":21}},"38":{"start":{"line":150,"column":4},"end":{"line":150,"column":73}},"39":{"start":{"line":153,"column":4},"end":{"line":154,"column":117}},"40":{"start":{"line":154,"column":8},"end":{"line":154,"column":117}},"41":{"start":{"line":158,"column":4},"end":{"line":171,"column":5}},"42":{"start":{"line":159,"column":8},"end":{"line":170,"column":11}},"43":{"start":{"line":163,"column":12},"end":{"line":169,"column":13}},"44":{"start":{"line":164,"column":16},"end":{"line":166,"column":19}},"45":{"start":{"line":165,"column":20},"end":{"line":165,"column":67}},"46":{"start":{"line":168,"column":16},"end":{"line":168,"column":36}},"47":{"start":{"line":174,"column":4},"end":{"line":193,"column":83}},"48":{"start":{"line":176,"column":8},"end":{"line":187,"column":11}},"49":{"start":{"line":177,"column":12},"end":{"line":186,"column":13}},"50":{"start":{"line":178,"column":16},"end":{"line":178,"column":34}},"51":{"start":{"line":181,"column":16},"end":{"line":183,"column":19}},"52":{"start":{"line":182,"column":20},"end":{"line":182,"column":76}},"53":{"start":{"line":185,"column":16},"end":{"line":185,"column":36}},"54":{"start":{"line":190,"column":8},"end":{"line":190,"column":20}},"55":{"start":{"line":193,"column":8},"end":{"line":193,"column":83}},"56":{"start":{"line":196,"column":0},"end":{"line":196,"column":30}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"2":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":4},"end":{"line":66,"column":4}},{"start":{"line":66,"column":4},"end":{"line":66,"column":4}}]},"3":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]},"4":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":4},"end":{"line":72,"column":4}},{"start":{"line":72,"column":4},"end":{"line":72,"column":4}}]},"5":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":4}},{"start":{"line":88,"column":4},"end":{"line":88,"column":4}}]},"6":{"line":88,"type":"binary-expr","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":21}},{"start":{"line":88,"column":25},"end":{"line":88,"column":53}}]},"7":{"line":93,"type":"cond-expr","locations":[{"start":{"line":93,"column":27},"end":{"line":93,"column":51}},{"start":{"line":93,"column":54},"end":{"line":93,"column":67}}]},"8":{"line":111,"type":"cond-expr","locations":[{"start":{"line":111,"column":70},"end":{"line":111,"column":106}},{"start":{"line":111,"column":109},"end":{"line":111,"column":115}}]},"9":{"line":111,"type":"binary-expr","locations":[{"start":{"line":111,"column":12},"end":{"line":111,"column":24}},{"start":{"line":111,"column":28},"end":{"line":111,"column":56}},{"start":{"line":111,"column":60},"end":{"line":111,"column":66}}]},"10":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":4}},{"start":{"line":153,"column":4},"end":{"line":153,"column":4}}]},"11":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":4}},{"start":{"line":158,"column":4},"end":{"line":158,"column":4}}]},"12":{"line":158,"type":"binary-expr","locations":[{"start":{"line":158,"column":7},"end":{"line":158,"column":35}},{"start":{"line":158,"column":39},"end":{"line":158,"column":72}},{"start":{"line":158,"column":76},"end":{"line":158,"column":121}},{"start":{"line":158,"column":125},"end":{"line":158,"column":162}}]},"13":{"line":163,"type":"if","locations":[{"start":{"line":163,"column":12},"end":{"line":163,"column":12}},{"start":{"line":163,"column":12},"end":{"line":163,"column":12}}]},"14":{"line":174,"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":174,"column":4}},{"start":{"line":174,"column":4},"end":{"line":174,"column":4}}]},"15":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":12},"end":{"line":177,"column":12}},{"start":{"line":177,"column":12},"end":{"line":177,"column":12}}]},"16":{"line":177,"type":"binary-expr","locations":[{"start":{"line":177,"column":15},"end":{"line":177,"column":19}},{"start":{"line":177,"column":23},"end":{"line":177,"column":29}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":26,"13":91,"14":68,"15":68,"16":1,"17":26,"18":91,"19":26,"20":26,"21":26,"22":22,"23":22,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":1,"52":27,"53":27,"54":27,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":0,"71":1,"72":1,"73":0,"74":0,"75":0,"76":0,"77":1,"78":1,"79":26,"80":26,"81":26,"82":26,"83":0,"84":26,"85":1,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":1,"95":27,"96":27,"97":27,"98":27,"99":1},"b":{"1":[1,0],"2":[1,1],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,0],"16":[1,1],"17":[1,0],"18":[0,1],"19":[0,26],"20":[0,0],"21":[0,0]},"f":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":26,"7":91,"8":68,"9":68,"10":26,"11":91,"12":22,"13":0,"14":0,"15":0,"16":0,"17":27,"18":1,"19":1,"20":26,"21":0,"22":27},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":30},"end":{"line":35,"column":53}}},"2":{"name":"(anonymous_2)","line":36,"loc":{"start":{"line":36,"column":22},"end":{"line":36,"column":38}}},"3":{"name":"(anonymous_3)","line":38,"loc":{"start":{"line":38,"column":11},"end":{"line":38,"column":27}}},"4":{"name":"(anonymous_4)","line":39,"loc":{"start":{"line":39,"column":31},"end":{"line":39,"column":48}}},"5":{"name":"(anonymous_5)","line":42,"loc":{"start":{"line":42,"column":11},"end":{"line":42,"column":28}}},"6":{"name":"(anonymous_6)","line":54,"loc":{"start":{"line":54,"column":29},"end":{"line":54,"column":49}}},"7":{"name":"(anonymous_7)","line":55,"loc":{"start":{"line":55,"column":24},"end":{"line":55,"column":40}}},"8":{"name":"(anonymous_8)","line":57,"loc":{"start":{"line":57,"column":11},"end":{"line":57,"column":27}}},"9":{"name":"(anonymous_9)","line":59,"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":28}}},"10":{"name":"(anonymous_10)","line":71,"loc":{"start":{"line":71,"column":26},"end":{"line":71,"column":46}}},"11":{"name":"(anonymous_11)","line":72,"loc":{"start":{"line":72,"column":37},"end":{"line":72,"column":53}}},"12":{"name":"(anonymous_12)","line":79,"loc":{"start":{"line":79,"column":15},"end":{"line":79,"column":31}}},"13":{"name":"(anonymous_13)","line":94,"loc":{"start":{"line":94,"column":30},"end":{"line":94,"column":58}}},"14":{"name":"(anonymous_14)","line":99,"loc":{"start":{"line":99,"column":48},"end":{"line":99,"column":59}}},"15":{"name":"(anonymous_15)","line":117,"loc":{"start":{"line":117,"column":78},"end":{"line":117,"column":98}}},"16":{"name":"(anonymous_16)","line":120,"loc":{"start":{"line":120,"column":71},"end":{"line":120,"column":88}}},"17":{"name":"(anonymous_17)","line":163,"loc":{"start":{"line":163,"column":22},"end":{"line":163,"column":42}}},"18":{"name":"(anonymous_18)","line":191,"loc":{"start":{"line":191,"column":32},"end":{"line":191,"column":44}}},"19":{"name":"(anonymous_19)","line":214,"loc":{"start":{"line":214,"column":42},"end":{"line":214,"column":63}}},"20":{"name":"(anonymous_20)","line":246,"loc":{"start":{"line":246,"column":31},"end":{"line":246,"column":60}}},"21":{"name":"(anonymous_21)","line":265,"loc":{"start":{"line":265,"column":36},"end":{"line":265,"column":48}}},"22":{"name":"(anonymous_22)","line":287,"loc":{"start":{"line":287,"column":15},"end":{"line":287,"column":44}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":41}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":39}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":45}},"5":{"start":{"line":35,"column":0},"end":{"line":45,"column":2}},"6":{"start":{"line":36,"column":4},"end":{"line":44,"column":16}},"7":{"start":{"line":37,"column":8},"end":{"line":37,"column":83}},"8":{"start":{"line":39,"column":8},"end":{"line":41,"column":11}},"9":{"start":{"line":40,"column":12},"end":{"line":40,"column":30}},"10":{"start":{"line":43,"column":8},"end":{"line":43,"column":49}},"11":{"start":{"line":54,"column":0},"end":{"line":62,"column":2}},"12":{"start":{"line":55,"column":4},"end":{"line":61,"column":7}},"13":{"start":{"line":56,"column":8},"end":{"line":56,"column":40}},"14":{"start":{"line":58,"column":8},"end":{"line":58,"column":75}},"15":{"start":{"line":60,"column":8},"end":{"line":60,"column":37}},"16":{"start":{"line":71,"column":0},"end":{"line":83,"column":2}},"17":{"start":{"line":72,"column":4},"end":{"line":74,"column":7}},"18":{"start":{"line":73,"column":8},"end":{"line":73,"column":37}},"19":{"start":{"line":76,"column":4},"end":{"line":76,"column":101}},"20":{"start":{"line":77,"column":4},"end":{"line":77,"column":41}},"21":{"start":{"line":79,"column":4},"end":{"line":82,"column":7}},"22":{"start":{"line":80,"column":8},"end":{"line":80,"column":90}},"23":{"start":{"line":81,"column":8},"end":{"line":81,"column":38}},"24":{"start":{"line":94,"column":0},"end":{"line":155,"column":2}},"25":{"start":{"line":95,"column":4},"end":{"line":96,"column":30}},"26":{"start":{"line":99,"column":4},"end":{"line":154,"column":7}},"27":{"start":{"line":100,"column":8},"end":{"line":153,"column":9}},"28":{"start":{"line":101,"column":12},"end":{"line":101,"column":20}},"29":{"start":{"line":104,"column":12},"end":{"line":152,"column":13}},"30":{"start":{"line":106,"column":16},"end":{"line":106,"column":38}},"31":{"start":{"line":107,"column":16},"end":{"line":107,"column":37}},"32":{"start":{"line":109,"column":16},"end":{"line":112,"column":95}},"33":{"start":{"line":110,"column":20},"end":{"line":110,"column":99}},"34":{"start":{"line":112,"column":20},"end":{"line":112,"column":95}},"35":{"start":{"line":117,"column":16},"end":{"line":151,"column":19}},"36":{"start":{"line":118,"column":20},"end":{"line":150,"column":21}},"37":{"start":{"line":120,"column":24},"end":{"line":149,"column":27}},"38":{"start":{"line":123,"column":28},"end":{"line":124,"column":39}},"39":{"start":{"line":124,"column":32},"end":{"line":124,"column":39}},"40":{"start":{"line":126,"column":28},"end":{"line":126,"column":50}},"41":{"start":{"line":127,"column":28},"end":{"line":127,"column":49}},"42":{"start":{"line":129,"column":28},"end":{"line":148,"column":29}},"43":{"start":{"line":133,"column":32},"end":{"line":133,"column":75}},"44":{"start":{"line":136,"column":32},"end":{"line":136,"column":65}},"45":{"start":{"line":137,"column":32},"end":{"line":137,"column":62}},"46":{"start":{"line":140,"column":32},"end":{"line":141,"column":61}},"47":{"start":{"line":141,"column":36},"end":{"line":141,"column":61}},"48":{"start":{"line":144,"column":32},"end":{"line":147,"column":124}},"49":{"start":{"line":145,"column":36},"end":{"line":145,"column":128}},"50":{"start":{"line":147,"column":36},"end":{"line":147,"column":124}},"51":{"start":{"line":163,"column":0},"end":{"line":168,"column":2}},"52":{"start":{"line":164,"column":4},"end":{"line":164,"column":19}},"53":{"start":{"line":165,"column":4},"end":{"line":165,"column":19}},"54":{"start":{"line":167,"column":4},"end":{"line":167,"column":47}},"55":{"start":{"line":191,"column":0},"end":{"line":235,"column":2}},"56":{"start":{"line":192,"column":4},"end":{"line":192,"column":52}},"57":{"start":{"line":195,"column":4},"end":{"line":195,"column":21}},"58":{"start":{"line":196,"column":4},"end":{"line":196,"column":17}},"59":{"start":{"line":198,"column":4},"end":{"line":198,"column":53}},"60":{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},"61":{"start":{"line":200,"column":8},"end":{"line":200,"column":30}},"62":{"start":{"line":203,"column":4},"end":{"line":203,"column":37}},"63":{"start":{"line":204,"column":4},"end":{"line":206,"column":5}},"64":{"start":{"line":205,"column":8},"end":{"line":205,"column":29}},"65":{"start":{"line":208,"column":4},"end":{"line":208,"column":56}},"66":{"start":{"line":209,"column":4},"end":{"line":209,"column":26}},"67":{"start":{"line":211,"column":4},"end":{"line":232,"column":5}},"68":{"start":{"line":214,"column":8},"end":{"line":226,"column":11}},"69":{"start":{"line":215,"column":12},"end":{"line":225,"column":13}},"70":{"start":{"line":216,"column":16},"end":{"line":216,"column":30}},"71":{"start":{"line":219,"column":16},"end":{"line":219,"column":48}},"72":{"start":{"line":222,"column":16},"end":{"line":222,"column":41}},"73":{"start":{"line":224,"column":16},"end":{"line":224,"column":60}},"74":{"start":{"line":228,"column":8},"end":{"line":228,"column":53}},"75":{"start":{"line":230,"column":8},"end":{"line":230,"column":40}},"76":{"start":{"line":231,"column":8},"end":{"line":231,"column":42}},"77":{"start":{"line":234,"column":4},"end":{"line":234,"column":20}},"78":{"start":{"line":246,"column":0},"end":{"line":258,"column":2}},"79":{"start":{"line":247,"column":4},"end":{"line":247,"column":61}},"80":{"start":{"line":251,"column":4},"end":{"line":251,"column":37}},"81":{"start":{"line":252,"column":4},"end":{"line":252,"column":34}},"82":{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},"83":{"start":{"line":255,"column":8},"end":{"line":255,"column":33}},"84":{"start":{"line":257,"column":4},"end":{"line":257,"column":20}},"85":{"start":{"line":265,"column":0},"end":{"line":278,"column":2}},"86":{"start":{"line":266,"column":4},"end":{"line":266,"column":21}},"87":{"start":{"line":267,"column":4},"end":{"line":267,"column":53}},"88":{"start":{"line":269,"column":4},"end":{"line":269,"column":37}},"89":{"start":{"line":270,"column":4},"end":{"line":272,"column":5}},"90":{"start":{"line":271,"column":8},"end":{"line":271,"column":29}},"91":{"start":{"line":274,"column":4},"end":{"line":274,"column":56}},"92":{"start":{"line":275,"column":4},"end":{"line":275,"column":26}},"93":{"start":{"line":277,"column":4},"end":{"line":277,"column":24}},"94":{"start":{"line":287,"column":0},"end":{"line":292,"column":2}},"95":{"start":{"line":288,"column":4},"end":{"line":288,"column":20}},"96":{"start":{"line":289,"column":4},"end":{"line":289,"column":32}},"97":{"start":{"line":290,"column":4},"end":{"line":290,"column":27}},"98":{"start":{"line":291,"column":4},"end":{"line":291,"column":19}},"99":{"start":{"line":294,"column":0},"end":{"line":294,"column":33}}},"branchMap":{"1":{"line":36,"type":"binary-expr","locations":[{"start":{"line":36,"column":11},"end":{"line":44,"column":9}},{"start":{"line":44,"column":13},"end":{"line":44,"column":15}}]},"2":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":15},"end":{"line":37,"column":42}},{"start":{"line":37,"column":46},"end":{"line":37,"column":82}}]},"3":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":8},"end":{"line":100,"column":8}},{"start":{"line":100,"column":8},"end":{"line":100,"column":8}}]},"4":{"line":100,"type":"binary-expr","locations":[{"start":{"line":100,"column":12},"end":{"line":100,"column":14}},{"start":{"line":100,"column":18},"end":{"line":100,"column":32}}]},"5":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":12},"end":{"line":104,"column":12}},{"start":{"line":104,"column":12},"end":{"line":104,"column":12}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":16},"end":{"line":109,"column":16}},{"start":{"line":109,"column":16},"end":{"line":109,"column":16}}]},"7":{"line":118,"type":"if","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":20}},{"start":{"line":118,"column":20},"end":{"line":118,"column":20}}]},"8":{"line":118,"type":"binary-expr","locations":[{"start":{"line":118,"column":23},"end":{"line":118,"column":30}},{"start":{"line":118,"column":34},"end":{"line":118,"column":48}}]},"9":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":28},"end":{"line":123,"column":28}},{"start":{"line":123,"column":28},"end":{"line":123,"column":28}}]},"10":{"line":123,"type":"binary-expr","locations":[{"start":{"line":123,"column":31},"end":{"line":123,"column":44}},{"start":{"line":123,"column":48},"end":{"line":123,"column":53}}]},"11":{"line":129,"type":"if","locations":[{"start":{"line":129,"column":28},"end":{"line":129,"column":28}},{"start":{"line":129,"column":28},"end":{"line":129,"column":28}}]},"12":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":32},"end":{"line":140,"column":32}},{"start":{"line":140,"column":32},"end":{"line":140,"column":32}}]},"13":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":32},"end":{"line":144,"column":32}},{"start":{"line":144,"column":32},"end":{"line":144,"column":32}}]},"14":{"line":199,"type":"if","locations":[{"start":{"line":199,"column":4},"end":{"line":199,"column":4}},{"start":{"line":199,"column":4},"end":{"line":199,"column":4}}]},"15":{"line":204,"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":4}},{"start":{"line":204,"column":4},"end":{"line":204,"column":4}}]},"16":{"line":204,"type":"binary-expr","locations":[{"start":{"line":204,"column":8},"end":{"line":204,"column":28}},{"start":{"line":204,"column":32},"end":{"line":204,"column":52}}]},"17":{"line":211,"type":"if","locations":[{"start":{"line":211,"column":4},"end":{"line":211,"column":4}},{"start":{"line":211,"column":4},"end":{"line":211,"column":4}}]},"18":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":12},"end":{"line":215,"column":12}},{"start":{"line":215,"column":12},"end":{"line":215,"column":12}}]},"19":{"line":254,"type":"if","locations":[{"start":{"line":254,"column":4},"end":{"line":254,"column":4}},{"start":{"line":254,"column":4},"end":{"line":254,"column":4}}]},"20":{"line":270,"type":"if","locations":[{"start":{"line":270,"column":4},"end":{"line":270,"column":4}},{"start":{"line":270,"column":4},"end":{"line":270,"column":4}}]},"21":{"line":270,"type":"binary-expr","locations":[{"start":{"line":270,"column":8},"end":{"line":270,"column":28}},{"start":{"line":270,"column":32},"end":{"line":270,"column":52}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":267,"15":2403,"16":267,"17":0,"18":267,"19":1,"20":64,"21":1,"22":107,"23":107,"24":135,"25":107,"26":135,"27":135,"28":135,"29":107,"30":107,"31":1,"32":107,"33":107,"34":107,"35":270,"36":107,"37":135,"38":43,"39":43,"40":43,"41":92,"42":107,"43":135,"44":43,"45":43,"46":43,"47":107,"48":1,"49":287,"50":287,"51":42,"52":42,"53":42,"54":42,"55":42,"56":42,"57":42,"58":0,"59":0,"60":0,"61":42,"62":42,"63":82,"64":82,"65":42,"66":245,"67":13,"68":13,"69":13,"70":13,"71":13,"72":1,"73":1,"74":1,"75":2,"76":2,"77":13,"78":13,"79":27,"80":27,"81":13,"82":232,"83":1,"84":68,"85":1,"86":106,"87":106,"88":106,"89":132,"90":1,"91":106,"92":132,"93":106,"94":29,"95":106,"96":132,"97":132,"98":1,"99":213,"100":213,"101":267,"102":1,"103":1},"b":{"1":[0,267],"2":[270,230],"3":[43,92],"4":[43,92],"5":[42,245],"6":[0,42],"7":[0,0],"8":[13,232],"9":[1,12],"10":[2,1],"11":[2,1]},"f":{"1":1,"2":267,"3":2403,"4":64,"5":107,"6":135,"7":135,"8":107,"9":270,"10":135,"11":135,"12":287,"13":42,"14":42,"15":42,"16":13,"17":1,"18":13,"19":68,"20":106,"21":132,"22":106,"23":132,"24":132,"25":213,"26":267},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":20},"end":{"line":38,"column":37}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":39},"end":{"line":50,"column":55}}},"3":{"name":"(anonymous_3)","line":51,"loc":{"start":{"line":51,"column":42},"end":{"line":51,"column":55}}},"4":{"name":"(anonymous_4)","line":70,"loc":{"start":{"line":70,"column":38},"end":{"line":70,"column":61}}},"5":{"name":"(anonymous_5)","line":82,"loc":{"start":{"line":82,"column":39},"end":{"line":82,"column":64}}},"6":{"name":"(anonymous_6)","line":85,"loc":{"start":{"line":85,"column":37},"end":{"line":85,"column":68}}},"7":{"name":"(anonymous_7)","line":89,"loc":{"start":{"line":89,"column":45},"end":{"line":89,"column":81}}},"8":{"name":"(anonymous_8)","line":100,"loc":{"start":{"line":100,"column":48},"end":{"line":100,"column":105}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":20},"end":{"line":104,"column":33}}},"10":{"name":"(anonymous_10)","line":108,"loc":{"start":{"line":108,"column":18},"end":{"line":108,"column":37}}},"11":{"name":"(anonymous_11)","line":121,"loc":{"start":{"line":121,"column":18},"end":{"line":121,"column":37}}},"12":{"name":"(anonymous_12)","line":132,"loc":{"start":{"line":132,"column":43},"end":{"line":132,"column":90}}},"13":{"name":"(anonymous_13)","line":135,"loc":{"start":{"line":135,"column":16},"end":{"line":135,"column":28}}},"14":{"name":"(anonymous_14)","line":141,"loc":{"start":{"line":141,"column":13},"end":{"line":141,"column":25}}},"15":{"name":"(anonymous_15)","line":152,"loc":{"start":{"line":152,"column":13},"end":{"line":152,"column":25}}},"16":{"name":"(anonymous_16)","line":163,"loc":{"start":{"line":163,"column":16},"end":{"line":163,"column":28}}},"17":{"name":"(anonymous_17)","line":170,"loc":{"start":{"line":170,"column":17},"end":{"line":170,"column":29}}},"18":{"name":"(anonymous_18)","line":180,"loc":{"start":{"line":180,"column":13},"end":{"line":180,"column":25}}},"19":{"name":"(anonymous_19)","line":202,"loc":{"start":{"line":202,"column":38},"end":{"line":202,"column":61}}},"20":{"name":"(anonymous_20)","line":214,"loc":{"start":{"line":214,"column":39},"end":{"line":214,"column":63}}},"21":{"name":"(anonymous_21)","line":218,"loc":{"start":{"line":218,"column":29},"end":{"line":218,"column":60}}},"22":{"name":"(anonymous_22)","line":223,"loc":{"start":{"line":223,"column":37},"end":{"line":223,"column":69}}},"23":{"name":"(anonymous_23)","line":224,"loc":{"start":{"line":224,"column":37},"end":{"line":224,"column":68}}},"24":{"name":"(anonymous_24)","line":233,"loc":{"start":{"line":233,"column":23},"end":{"line":233,"column":48}}},"25":{"name":"(anonymous_25)","line":240,"loc":{"start":{"line":240,"column":43},"end":{"line":240,"column":60}}},"26":{"name":"(anonymous_26)","line":242,"loc":{"start":{"line":242,"column":21},"end":{"line":242,"column":37}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":32}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":47}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":41}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":39}},"5":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"6":{"start":{"line":29,"column":0},"end":{"line":29,"column":57}},"7":{"start":{"line":30,"column":0},"end":{"line":30,"column":45}},"8":{"start":{"line":31,"column":0},"end":{"line":31,"column":41}},"9":{"start":{"line":32,"column":0},"end":{"line":32,"column":43}},"10":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"11":{"start":{"line":38,"column":0},"end":{"line":40,"column":2}},"12":{"start":{"line":39,"column":4},"end":{"line":39,"column":24}},"13":{"start":{"line":50,"column":0},"end":{"line":60,"column":2}},"14":{"start":{"line":51,"column":4},"end":{"line":53,"column":10}},"15":{"start":{"line":52,"column":8},"end":{"line":52,"column":30}},"16":{"start":{"line":55,"column":4},"end":{"line":57,"column":5}},"17":{"start":{"line":56,"column":8},"end":{"line":56,"column":55}},"18":{"start":{"line":59,"column":4},"end":{"line":59,"column":24}},"19":{"start":{"line":70,"column":0},"end":{"line":72,"column":2}},"20":{"start":{"line":71,"column":4},"end":{"line":71,"column":46}},"21":{"start":{"line":82,"column":0},"end":{"line":98,"column":2}},"22":{"start":{"line":83,"column":4},"end":{"line":83,"column":53}},"23":{"start":{"line":85,"column":4},"end":{"line":87,"column":7}},"24":{"start":{"line":86,"column":8},"end":{"line":86,"column":64}},"25":{"start":{"line":89,"column":4},"end":{"line":93,"column":10}},"26":{"start":{"line":90,"column":8},"end":{"line":90,"column":75}},"27":{"start":{"line":91,"column":8},"end":{"line":91,"column":84}},"28":{"start":{"line":92,"column":8},"end":{"line":92,"column":45}},"29":{"start":{"line":95,"column":4},"end":{"line":95,"column":91}},"30":{"start":{"line":97,"column":4},"end":{"line":97,"column":18}},"31":{"start":{"line":100,"column":0},"end":{"line":129,"column":2}},"32":{"start":{"line":101,"column":4},"end":{"line":101,"column":20}},"33":{"start":{"line":102,"column":4},"end":{"line":102,"column":20}},"34":{"start":{"line":104,"column":4},"end":{"line":106,"column":6}},"35":{"start":{"line":105,"column":7},"end":{"line":105,"column":100}},"36":{"start":{"line":108,"column":4},"end":{"line":119,"column":7}},"37":{"start":{"line":109,"column":8},"end":{"line":116,"column":9}},"38":{"start":{"line":110,"column":12},"end":{"line":110,"column":63}},"39":{"start":{"line":111,"column":12},"end":{"line":111,"column":98}},"40":{"start":{"line":112,"column":12},"end":{"line":112,"column":42}},"41":{"start":{"line":115,"column":12},"end":{"line":115,"column":100}},"42":{"start":{"line":121,"column":4},"end":{"line":127,"column":7}},"43":{"start":{"line":122,"column":8},"end":{"line":126,"column":9}},"44":{"start":{"line":123,"column":12},"end":{"line":123,"column":98}},"45":{"start":{"line":124,"column":12},"end":{"line":124,"column":42}},"46":{"start":{"line":125,"column":12},"end":{"line":125,"column":24}},"47":{"start":{"line":128,"column":4},"end":{"line":128,"column":18}},"48":{"start":{"line":132,"column":0},"end":{"line":192,"column":2}},"49":{"start":{"line":133,"column":4},"end":{"line":133,"column":20}},"50":{"start":{"line":134,"column":4},"end":{"line":189,"column":5}},"51":{"start":{"line":135,"column":8},"end":{"line":160,"column":13}},"52":{"start":{"line":137,"column":12},"end":{"line":137,"column":59}},"53":{"start":{"line":138,"column":12},"end":{"line":138,"column":83}},"54":{"start":{"line":139,"column":12},"end":{"line":139,"column":36}},"55":{"start":{"line":141,"column":12},"end":{"line":149,"column":17}},"56":{"start":{"line":142,"column":16},"end":{"line":142,"column":39}},"57":{"start":{"line":143,"column":16},"end":{"line":148,"column":17}},"58":{"start":{"line":144,"column":20},"end":{"line":147,"column":21}},"59":{"start":{"line":145,"column":24},"end":{"line":145,"column":68}},"60":{"start":{"line":146,"column":24},"end":{"line":146,"column":119}},"61":{"start":{"line":152,"column":12},"end":{"line":157,"column":17}},"62":{"start":{"line":153,"column":16},"end":{"line":156,"column":17}},"63":{"start":{"line":154,"column":20},"end":{"line":154,"column":54}},"64":{"start":{"line":155,"column":20},"end":{"line":155,"column":122}},"65":{"start":{"line":159,"column":12},"end":{"line":159,"column":26}},"66":{"start":{"line":162,"column":11},"end":{"line":189,"column":5}},"67":{"start":{"line":163,"column":8},"end":{"line":188,"column":13}},"68":{"start":{"line":164,"column":12},"end":{"line":164,"column":59}},"69":{"start":{"line":165,"column":12},"end":{"line":165,"column":83}},"70":{"start":{"line":166,"column":12},"end":{"line":166,"column":28}},"71":{"start":{"line":169,"column":12},"end":{"line":178,"column":13}},"72":{"start":{"line":170,"column":16},"end":{"line":177,"column":21}},"73":{"start":{"line":171,"column":20},"end":{"line":171,"column":43}},"74":{"start":{"line":172,"column":20},"end":{"line":176,"column":21}},"75":{"start":{"line":174,"column":24},"end":{"line":174,"column":74}},"76":{"start":{"line":175,"column":24},"end":{"line":175,"column":119}},"77":{"start":{"line":180,"column":12},"end":{"line":185,"column":17}},"78":{"start":{"line":181,"column":16},"end":{"line":184,"column":17}},"79":{"start":{"line":182,"column":20},"end":{"line":182,"column":54}},"80":{"start":{"line":183,"column":20},"end":{"line":183,"column":117}},"81":{"start":{"line":187,"column":12},"end":{"line":187,"column":26}},"82":{"start":{"line":191,"column":4},"end":{"line":191,"column":19}},"83":{"start":{"line":202,"column":0},"end":{"line":204,"column":2}},"84":{"start":{"line":203,"column":4},"end":{"line":203,"column":47}},"85":{"start":{"line":214,"column":0},"end":{"line":221,"column":2}},"86":{"start":{"line":215,"column":4},"end":{"line":215,"column":53}},"87":{"start":{"line":216,"column":4},"end":{"line":216,"column":56}},"88":{"start":{"line":218,"column":4},"end":{"line":220,"column":7}},"89":{"start":{"line":219,"column":8},"end":{"line":219,"column":80}},"90":{"start":{"line":223,"column":0},"end":{"line":238,"column":2}},"91":{"start":{"line":224,"column":4},"end":{"line":226,"column":7}},"92":{"start":{"line":225,"column":8},"end":{"line":225,"column":59}},"93":{"start":{"line":228,"column":4},"end":{"line":231,"column":5}},"94":{"start":{"line":230,"column":8},"end":{"line":230,"column":37}},"95":{"start":{"line":233,"column":4},"end":{"line":237,"column":7}},"96":{"start":{"line":235,"column":8},"end":{"line":235,"column":83}},"97":{"start":{"line":236,"column":8},"end":{"line":236,"column":41}},"98":{"start":{"line":240,"column":0},"end":{"line":245,"column":2}},"99":{"start":{"line":241,"column":4},"end":{"line":241,"column":20}},"100":{"start":{"line":242,"column":4},"end":{"line":244,"column":7}},"101":{"start":{"line":243,"column":8},"end":{"line":243,"column":39}},"102":{"start":{"line":247,"column":0},"end":{"line":257,"column":3}},"103":{"start":{"line":259,"column":0},"end":{"line":259,"column":23}}},"branchMap":{"1":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":55,"column":4}},{"start":{"line":55,"column":4},"end":{"line":55,"column":4}}]},"2":{"line":105,"type":"binary-expr","locations":[{"start":{"line":105,"column":14},"end":{"line":105,"column":55}},{"start":{"line":105,"column":59},"end":{"line":105,"column":99}}]},"3":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"4":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":8},"end":{"line":122,"column":8}},{"start":{"line":122,"column":8},"end":{"line":122,"column":8}}]},"5":{"line":134,"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":134,"column":4}},{"start":{"line":134,"column":4},"end":{"line":134,"column":4}}]},"6":{"line":143,"type":"if","locations":[{"start":{"line":143,"column":16},"end":{"line":143,"column":16}},{"start":{"line":143,"column":16},"end":{"line":143,"column":16}}]},"7":{"line":145,"type":"binary-expr","locations":[{"start":{"line":145,"column":42},"end":{"line":145,"column":62}},{"start":{"line":145,"column":66},"end":{"line":145,"column":67}}]},"8":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":11},"end":{"line":162,"column":11}},{"start":{"line":162,"column":11},"end":{"line":162,"column":11}}]},"9":{"line":169,"type":"if","locations":[{"start":{"line":169,"column":12},"end":{"line":169,"column":12}},{"start":{"line":169,"column":12},"end":{"line":169,"column":12}}]},"10":{"line":174,"type":"binary-expr","locations":[{"start":{"line":174,"column":42},"end":{"line":174,"column":68}},{"start":{"line":174,"column":72},"end":{"line":174,"column":73}}]},"11":{"line":174,"type":"binary-expr","locations":[{"start":{"line":174,"column":44},"end":{"line":174,"column":58}},{"start":{"line":174,"column":62},"end":{"line":174,"column":64}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":205,"7":205,"8":205,"9":1,"10":15,"11":15,"12":15,"13":15,"14":1,"15":9,"16":9,"17":9,"18":9,"19":9,"20":1,"21":14,"22":14,"23":14,"24":14,"25":14,"26":1,"27":15,"28":15,"29":1,"30":7,"31":1,"32":61,"33":1,"34":61,"35":61,"36":3,"37":58,"38":1,"39":45,"40":45,"41":1,"42":7,"43":1,"44":0,"45":1,"46":12,"47":1,"48":10,"49":1,"50":15,"51":15,"52":1,"53":7,"54":7,"55":1,"56":26,"57":26,"58":1},"b":{"1":[7,8],"2":[61,0],"3":[3,58],"4":[45,0],"5":[6,6]},"f":{"1":205,"2":15,"3":9,"4":14,"5":15,"6":7,"7":61,"8":61,"9":45,"10":7,"11":0,"12":12,"13":10,"14":15,"15":7,"16":26},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":21},"end":{"line":38,"column":38}}},"2":{"name":"(anonymous_2)","line":51,"loc":{"start":{"line":51,"column":23},"end":{"line":51,"column":40}}},"3":{"name":"(anonymous_3)","line":65,"loc":{"start":{"line":65,"column":30},"end":{"line":65,"column":47}}},"4":{"name":"(anonymous_4)","line":80,"loc":{"start":{"line":80,"column":24},"end":{"line":80,"column":41}}},"5":{"name":"(anonymous_5)","line":95,"loc":{"start":{"line":95,"column":22},"end":{"line":95,"column":39}}},"6":{"name":"(anonymous_6)","line":108,"loc":{"start":{"line":108,"column":22},"end":{"line":108,"column":39}}},"7":{"name":"(anonymous_7)","line":119,"loc":{"start":{"line":119,"column":23},"end":{"line":119,"column":40}}},"8":{"name":"(anonymous_8)","line":130,"loc":{"start":{"line":130,"column":22},"end":{"line":130,"column":39}}},"9":{"name":"(anonymous_9)","line":148,"loc":{"start":{"line":148,"column":23},"end":{"line":148,"column":40}}},"10":{"name":"(anonymous_10)","line":160,"loc":{"start":{"line":160,"column":23},"end":{"line":160,"column":40}}},"11":{"name":"(anonymous_11)","line":171,"loc":{"start":{"line":171,"column":24},"end":{"line":171,"column":41}}},"12":{"name":"(anonymous_12)","line":182,"loc":{"start":{"line":182,"column":23},"end":{"line":182,"column":40}}},"13":{"name":"(anonymous_13)","line":193,"loc":{"start":{"line":193,"column":24},"end":{"line":193,"column":41}}},"14":{"name":"(anonymous_14)","line":204,"loc":{"start":{"line":204,"column":31},"end":{"line":204,"column":48}}},"15":{"name":"(anonymous_15)","line":216,"loc":{"start":{"line":216,"column":25},"end":{"line":216,"column":42}}},"16":{"name":"(anonymous_16)","line":228,"loc":{"start":{"line":228,"column":26},"end":{"line":228,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":40}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":35}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":39}},"5":{"start":{"line":38,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":39,"column":4},"end":{"line":39,"column":52}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":87}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":37}},"9":{"start":{"line":51,"column":0},"end":{"line":56,"column":2}},"10":{"start":{"line":52,"column":4},"end":{"line":52,"column":46}},"11":{"start":{"line":53,"column":4},"end":{"line":53,"column":50}},"12":{"start":{"line":54,"column":4},"end":{"line":54,"column":44}},"13":{"start":{"line":55,"column":4},"end":{"line":55,"column":37}},"14":{"start":{"line":65,"column":0},"end":{"line":71,"column":2}},"15":{"start":{"line":66,"column":4},"end":{"line":66,"column":46}},"16":{"start":{"line":67,"column":4},"end":{"line":67,"column":35}},"17":{"start":{"line":68,"column":4},"end":{"line":68,"column":50}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":44}},"19":{"start":{"line":70,"column":4},"end":{"line":70,"column":68}},"20":{"start":{"line":80,"column":0},"end":{"line":86,"column":2}},"21":{"start":{"line":81,"column":4},"end":{"line":81,"column":49}},"22":{"start":{"line":82,"column":4},"end":{"line":82,"column":35}},"23":{"start":{"line":83,"column":4},"end":{"line":83,"column":50}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":44}},"25":{"start":{"line":85,"column":4},"end":{"line":85,"column":68}},"26":{"start":{"line":95,"column":0},"end":{"line":98,"column":2}},"27":{"start":{"line":96,"column":4},"end":{"line":96,"column":106}},"28":{"start":{"line":97,"column":4},"end":{"line":97,"column":37}},"29":{"start":{"line":108,"column":0},"end":{"line":110,"column":2}},"30":{"start":{"line":109,"column":4},"end":{"line":109,"column":81}},"31":{"start":{"line":119,"column":0},"end":{"line":121,"column":2}},"32":{"start":{"line":120,"column":4},"end":{"line":120,"column":84}},"33":{"start":{"line":130,"column":0},"end":{"line":139,"column":2}},"34":{"start":{"line":131,"column":4},"end":{"line":131,"column":42}},"35":{"start":{"line":135,"column":4},"end":{"line":137,"column":5}},"36":{"start":{"line":136,"column":8},"end":{"line":136,"column":142}},"37":{"start":{"line":138,"column":4},"end":{"line":138,"column":36}},"38":{"start":{"line":148,"column":0},"end":{"line":151,"column":2}},"39":{"start":{"line":149,"column":4},"end":{"line":149,"column":42}},"40":{"start":{"line":150,"column":4},"end":{"line":150,"column":36}},"41":{"start":{"line":160,"column":0},"end":{"line":162,"column":2}},"42":{"start":{"line":161,"column":4},"end":{"line":161,"column":71}},"43":{"start":{"line":171,"column":0},"end":{"line":173,"column":2}},"44":{"start":{"line":172,"column":4},"end":{"line":172,"column":72}},"45":{"start":{"line":182,"column":0},"end":{"line":184,"column":2}},"46":{"start":{"line":183,"column":4},"end":{"line":183,"column":116}},"47":{"start":{"line":193,"column":0},"end":{"line":195,"column":2}},"48":{"start":{"line":194,"column":4},"end":{"line":194,"column":37}},"49":{"start":{"line":204,"column":0},"end":{"line":207,"column":2}},"50":{"start":{"line":205,"column":4},"end":{"line":205,"column":86}},"51":{"start":{"line":206,"column":4},"end":{"line":206,"column":57}},"52":{"start":{"line":216,"column":0},"end":{"line":219,"column":2}},"53":{"start":{"line":217,"column":4},"end":{"line":217,"column":86}},"54":{"start":{"line":218,"column":4},"end":{"line":218,"column":64}},"55":{"start":{"line":228,"column":0},"end":{"line":231,"column":2}},"56":{"start":{"line":229,"column":4},"end":{"line":229,"column":35}},"57":{"start":{"line":230,"column":4},"end":{"line":230,"column":63}},"58":{"start":{"line":233,"column":0},"end":{"line":249,"column":2}}},"branchMap":{"1":{"line":96,"type":"cond-expr","locations":[{"start":{"line":96,"column":95},"end":{"line":96,"column":98}},{"start":{"line":96,"column":101},"end":{"line":96,"column":104}}]},"2":{"line":131,"type":"binary-expr","locations":[{"start":{"line":131,"column":16},"end":{"line":131,"column":34}},{"start":{"line":131,"column":38},"end":{"line":131,"column":41}}]},"3":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":4},"end":{"line":135,"column":4}},{"start":{"line":135,"column":4},"end":{"line":135,"column":4}}]},"4":{"line":149,"type":"binary-expr","locations":[{"start":{"line":149,"column":16},"end":{"line":149,"column":34}},{"start":{"line":149,"column":38},"end":{"line":149,"column":41}}]},"5":{"line":183,"type":"cond-expr","locations":[{"start":{"line":183,"column":103},"end":{"line":183,"column":107}},{"start":{"line":183,"column":110},"end":{"line":183,"column":115}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js","s":{"1":1,"2":1,"3":434,"4":434,"5":1,"6":0,"7":1,"8":0,"9":1,"10":0,"11":1,"12":668,"13":1,"14":0,"15":1,"16":389,"17":389,"18":0,"19":1,"20":279,"21":1,"22":235,"23":1,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1},"b":{"1":[434,0],"2":[0,0],"3":[389,0],"4":[44,235],"5":[0,0]},"f":{"1":434,"2":0,"3":0,"4":0,"5":668,"6":0,"7":389,"8":279,"9":235,"10":0,"11":0,"12":0,"13":0},"fnMap":{"1":{"name":"(anonymous_1)","line":29,"loc":{"start":{"line":29,"column":20},"end":{"line":29,"column":45}}},"2":{"name":"(anonymous_2)","line":40,"loc":{"start":{"line":40,"column":44},"end":{"line":40,"column":56}}},"3":{"name":"(anonymous_3)","line":51,"loc":{"start":{"line":51,"column":37},"end":{"line":51,"column":55}}},"4":{"name":"(anonymous_4)","line":63,"loc":{"start":{"line":63,"column":34},"end":{"line":63,"column":51}}},"5":{"name":"(anonymous_5)","line":74,"loc":{"start":{"line":74,"column":36},"end":{"line":74,"column":48}}},"6":{"name":"(anonymous_6)","line":84,"loc":{"start":{"line":84,"column":40},"end":{"line":84,"column":52}}},"7":{"name":"(anonymous_7)","line":94,"loc":{"start":{"line":94,"column":37},"end":{"line":94,"column":49}}},"8":{"name":"(anonymous_8)","line":107,"loc":{"start":{"line":107,"column":38},"end":{"line":107,"column":50}}},"9":{"name":"(anonymous_9)","line":117,"loc":{"start":{"line":117,"column":33},"end":{"line":117,"column":45}}},"10":{"name":"(anonymous_10)","line":128,"loc":{"start":{"line":128,"column":27},"end":{"line":128,"column":45}}},"11":{"name":"(anonymous_11)","line":132,"loc":{"start":{"line":132,"column":34},"end":{"line":132,"column":51}}},"12":{"name":"(anonymous_12)","line":142,"loc":{"start":{"line":142,"column":31},"end":{"line":142,"column":56}}},"13":{"name":"(anonymous_13)","line":144,"loc":{"start":{"line":144,"column":27},"end":{"line":144,"column":52}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":29,"column":0},"end":{"line":32,"column":2}},"3":{"start":{"line":30,"column":4},"end":{"line":30,"column":29}},"4":{"start":{"line":31,"column":4},"end":{"line":31,"column":25}},"5":{"start":{"line":40,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":41}},"7":{"start":{"line":51,"column":0},"end":{"line":53,"column":2}},"8":{"start":{"line":52,"column":4},"end":{"line":52,"column":49}},"9":{"start":{"line":63,"column":0},"end":{"line":65,"column":2}},"10":{"start":{"line":64,"column":4},"end":{"line":64,"column":55}},"11":{"start":{"line":74,"column":0},"end":{"line":76,"column":2}},"12":{"start":{"line":75,"column":4},"end":{"line":75,"column":37}},"13":{"start":{"line":84,"column":0},"end":{"line":86,"column":2}},"14":{"start":{"line":85,"column":4},"end":{"line":85,"column":104}},"15":{"start":{"line":94,"column":0},"end":{"line":99,"column":2}},"16":{"start":{"line":95,"column":4},"end":{"line":97,"column":5}},"17":{"start":{"line":96,"column":8},"end":{"line":96,"column":26}},"18":{"start":{"line":98,"column":4},"end":{"line":98,"column":32}},"19":{"start":{"line":107,"column":0},"end":{"line":109,"column":2}},"20":{"start":{"line":108,"column":4},"end":{"line":108,"column":46}},"21":{"start":{"line":117,"column":0},"end":{"line":119,"column":2}},"22":{"start":{"line":118,"column":4},"end":{"line":118,"column":50}},"23":{"start":{"line":128,"column":0},"end":{"line":147,"column":2}},"24":{"start":{"line":131,"column":4},"end":{"line":131,"column":41}},"25":{"start":{"line":132,"column":4},"end":{"line":139,"column":7}},"26":{"start":{"line":133,"column":8},"end":{"line":135,"column":9}},"27":{"start":{"line":134,"column":12},"end":{"line":134,"column":25}},"28":{"start":{"line":136,"column":8},"end":{"line":136,"column":33}},"29":{"start":{"line":137,"column":8},"end":{"line":137,"column":49}},"30":{"start":{"line":138,"column":8},"end":{"line":138,"column":40}},"31":{"start":{"line":142,"column":4},"end":{"line":146,"column":12}},"32":{"start":{"line":143,"column":8},"end":{"line":143,"column":44}},"33":{"start":{"line":145,"column":8},"end":{"line":145,"column":43}},"34":{"start":{"line":151,"column":0},"end":{"line":151,"column":31}}},"branchMap":{"1":{"line":30,"type":"binary-expr","locations":[{"start":{"line":30,"column":17},"end":{"line":30,"column":22}},{"start":{"line":30,"column":26},"end":{"line":30,"column":28}}]},"2":{"line":85,"type":"cond-expr","locations":[{"start":{"line":85,"column":31},"end":{"line":85,"column":33}},{"start":{"line":85,"column":36},"end":{"line":85,"column":103}}]},"3":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":4},"end":{"line":95,"column":4}},{"start":{"line":95,"column":4},"end":{"line":95,"column":4}}]},"4":{"line":108,"type":"cond-expr","locations":[{"start":{"line":108,"column":30},"end":{"line":108,"column":40}},{"start":{"line":108,"column":43},"end":{"line":108,"column":45}}]},"5":{"line":133,"type":"if","locations":[{"start":{"line":133,"column":8},"end":{"line":133,"column":8}},{"start":{"line":133,"column":8},"end":{"line":133,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":100,"12":1},"b":{},"f":{"1":1,"2":267,"3":100},"fnMap":{"1":{"name":"(anonymous_1)","line":14,"loc":{"start":{"line":14,"column":26},"end":{"line":14,"column":38}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":39},"end":{"line":22,"column":55}}},"3":{"name":"(anonymous_3)","line":26,"loc":{"start":{"line":26,"column":49},"end":{"line":26,"column":65}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":14,"column":0},"end":{"line":17,"column":2}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":50}},"6":{"start":{"line":19,"column":0},"end":{"line":19,"column":53}},"7":{"start":{"line":20,"column":0},"end":{"line":20,"column":64}},"8":{"start":{"line":22,"column":0},"end":{"line":24,"column":2}},"9":{"start":{"line":23,"column":4},"end":{"line":23,"column":50}},"10":{"start":{"line":26,"column":0},"end":{"line":28,"column":2}},"11":{"start":{"line":27,"column":4},"end":{"line":27,"column":45}},"12":{"start":{"line":30,"column":0},"end":{"line":30,"column":37}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js","s":{"1":1,"2":1,"3":1,"4":9,"5":9,"6":1,"7":0,"8":1,"9":0,"10":1,"11":1029,"12":1029,"13":1,"14":619,"15":619,"16":1,"17":678,"18":678,"19":123,"20":555,"21":1,"22":128,"23":128,"24":0,"25":128,"26":1,"27":338,"28":1,"29":2454,"30":1,"31":201,"32":201,"33":22,"34":22,"35":22,"36":22,"37":22,"38":22,"39":43,"40":22,"41":179,"42":11,"43":11,"44":11,"45":11,"46":11,"47":23,"48":11,"49":168,"50":1,"51":216,"52":216,"53":21,"54":21,"55":21,"56":21,"57":21,"58":21,"59":21,"60":21,"61":21,"62":37,"63":21,"64":195,"65":19,"66":19,"67":19,"68":19,"69":19,"70":19,"71":19,"72":19,"73":47,"74":19,"75":176,"76":22,"77":22,"78":22,"79":22,"80":22,"81":154,"82":154,"83":1},"b":{"1":[1029,186],"2":[619,43],"3":[123,555],"4":[123,54],"5":[0,128],"6":[22,179],"7":[11,168],"8":[21,195],"9":[19,176],"10":[22,154]},"f":{"1":9,"2":0,"3":0,"4":1029,"5":619,"6":678,"7":128,"8":338,"9":2454,"10":201,"11":22,"12":43,"13":11,"14":216,"15":21,"16":19,"17":22},"fnMap":{"1":{"name":"(anonymous_1)","line":7,"loc":{"start":{"line":7,"column":19},"end":{"line":7,"column":37}}},"2":{"name":"(anonymous_2)","line":19,"loc":{"start":{"line":19,"column":32},"end":{"line":19,"column":48}}},"3":{"name":"(anonymous_3)","line":30,"loc":{"start":{"line":30,"column":42},"end":{"line":30,"column":58}}},"4":{"name":"(anonymous_4)","line":44,"loc":{"start":{"line":44,"column":40},"end":{"line":44,"column":56}}},"5":{"name":"(anonymous_5)","line":59,"loc":{"start":{"line":59,"column":39},"end":{"line":59,"column":55}}},"6":{"name":"(anonymous_6)","line":78,"loc":{"start":{"line":78,"column":43},"end":{"line":78,"column":59}}},"7":{"name":"(anonymous_7)","line":99,"loc":{"start":{"line":99,"column":36},"end":{"line":99,"column":52}}},"8":{"name":"(anonymous_8)","line":117,"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":51}}},"9":{"name":"(anonymous_9)","line":132,"loc":{"start":{"line":132,"column":37},"end":{"line":132,"column":53}}},"10":{"name":"(anonymous_10)","line":145,"loc":{"start":{"line":145,"column":32},"end":{"line":145,"column":55}}},"11":{"name":"(anonymous_11)","line":149,"loc":{"start":{"line":149,"column":16},"end":{"line":149,"column":28}}},"12":{"name":"(anonymous_12)","line":156,"loc":{"start":{"line":156,"column":26},"end":{"line":156,"column":39}}},"13":{"name":"(anonymous_13)","line":165,"loc":{"start":{"line":165,"column":16},"end":{"line":165,"column":28}}},"14":{"name":"(anonymous_14)","line":191,"loc":{"start":{"line":191,"column":32},"end":{"line":191,"column":63}}},"15":{"name":"(anonymous_15)","line":196,"loc":{"start":{"line":196,"column":16},"end":{"line":196,"column":28}}},"16":{"name":"(anonymous_16)","line":215,"loc":{"start":{"line":215,"column":16},"end":{"line":215,"column":28}}},"17":{"name":"(anonymous_17)","line":232,"loc":{"start":{"line":232,"column":16},"end":{"line":232,"column":28}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"3":{"start":{"line":7,"column":0},"end":{"line":10,"column":2}},"4":{"start":{"line":8,"column":4},"end":{"line":8,"column":49}},"5":{"start":{"line":9,"column":4},"end":{"line":9,"column":51}},"6":{"start":{"line":19,"column":0},"end":{"line":21,"column":2}},"7":{"start":{"line":20,"column":4},"end":{"line":20,"column":64}},"8":{"start":{"line":30,"column":0},"end":{"line":32,"column":2}},"9":{"start":{"line":31,"column":4},"end":{"line":31,"column":65}},"10":{"start":{"line":44,"column":0},"end":{"line":47,"column":2}},"11":{"start":{"line":45,"column":4},"end":{"line":45,"column":45}},"12":{"start":{"line":46,"column":4},"end":{"line":46,"column":85}},"13":{"start":{"line":59,"column":0},"end":{"line":62,"column":2}},"14":{"start":{"line":60,"column":4},"end":{"line":60,"column":45}},"15":{"start":{"line":61,"column":4},"end":{"line":61,"column":86}},"16":{"start":{"line":78,"column":0},"end":{"line":84,"column":2}},"17":{"start":{"line":79,"column":4},"end":{"line":79,"column":45}},"18":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"19":{"start":{"line":81,"column":7},"end":{"line":81,"column":85}},"20":{"start":{"line":83,"column":4},"end":{"line":83,"column":13}},"21":{"start":{"line":99,"column":0},"end":{"line":107,"column":2}},"22":{"start":{"line":101,"column":4},"end":{"line":101,"column":45}},"23":{"start":{"line":102,"column":4},"end":{"line":104,"column":5}},"24":{"start":{"line":103,"column":8},"end":{"line":103,"column":20}},"25":{"start":{"line":106,"column":4},"end":{"line":106,"column":84}},"26":{"start":{"line":117,"column":0},"end":{"line":119,"column":2}},"27":{"start":{"line":118,"column":4},"end":{"line":118,"column":17}},"28":{"start":{"line":132,"column":0},"end":{"line":135,"column":2}},"29":{"start":{"line":134,"column":4},"end":{"line":134,"column":39}},"30":{"start":{"line":145,"column":0},"end":{"line":180,"column":2}},"31":{"start":{"line":146,"column":4},"end":{"line":146,"column":20}},"32":{"start":{"line":147,"column":4},"end":{"line":177,"column":5}},"33":{"start":{"line":149,"column":8},"end":{"line":161,"column":13}},"34":{"start":{"line":150,"column":12},"end":{"line":150,"column":38}},"35":{"start":{"line":151,"column":12},"end":{"line":151,"column":51}},"36":{"start":{"line":153,"column":12},"end":{"line":153,"column":28}},"37":{"start":{"line":154,"column":12},"end":{"line":154,"column":59}},"38":{"start":{"line":156,"column":12},"end":{"line":158,"column":15}},"39":{"start":{"line":157,"column":16},"end":{"line":157,"column":56}},"40":{"start":{"line":160,"column":12},"end":{"line":160,"column":26}},"41":{"start":{"line":163,"column":11},"end":{"line":177,"column":5}},"42":{"start":{"line":165,"column":8},"end":{"line":175,"column":13}},"43":{"start":{"line":166,"column":12},"end":{"line":166,"column":54}},"44":{"start":{"line":167,"column":12},"end":{"line":167,"column":51}},"45":{"start":{"line":169,"column":12},"end":{"line":169,"column":28}},"46":{"start":{"line":170,"column":12},"end":{"line":172,"column":13}},"47":{"start":{"line":171,"column":16},"end":{"line":171,"column":63}},"48":{"start":{"line":174,"column":12},"end":{"line":174,"column":26}},"49":{"start":{"line":179,"column":4},"end":{"line":179,"column":54}},"50":{"start":{"line":191,"column":0},"end":{"line":243,"column":2}},"51":{"start":{"line":192,"column":4},"end":{"line":192,"column":20}},"52":{"start":{"line":194,"column":4},"end":{"line":239,"column":5}},"53":{"start":{"line":196,"column":8},"end":{"line":211,"column":13}},"54":{"start":{"line":197,"column":12},"end":{"line":197,"column":76}},"55":{"start":{"line":198,"column":12},"end":{"line":198,"column":76}},"56":{"start":{"line":199,"column":12},"end":{"line":199,"column":46}},"57":{"start":{"line":201,"column":12},"end":{"line":201,"column":51}},"58":{"start":{"line":202,"column":12},"end":{"line":202,"column":75}},"59":{"start":{"line":203,"column":12},"end":{"line":203,"column":100}},"60":{"start":{"line":204,"column":12},"end":{"line":204,"column":28}},"61":{"start":{"line":206,"column":12},"end":{"line":208,"column":13}},"62":{"start":{"line":207,"column":16},"end":{"line":207,"column":76}},"63":{"start":{"line":210,"column":12},"end":{"line":210,"column":26}},"64":{"start":{"line":213,"column":11},"end":{"line":239,"column":5}},"65":{"start":{"line":215,"column":8},"end":{"line":229,"column":13}},"66":{"start":{"line":216,"column":12},"end":{"line":216,"column":54}},"67":{"start":{"line":217,"column":12},"end":{"line":217,"column":36}},"68":{"start":{"line":219,"column":12},"end":{"line":219,"column":51}},"69":{"start":{"line":220,"column":12},"end":{"line":220,"column":75}},"70":{"start":{"line":221,"column":12},"end":{"line":221,"column":100}},"71":{"start":{"line":222,"column":12},"end":{"line":222,"column":28}},"72":{"start":{"line":224,"column":12},"end":{"line":226,"column":13}},"73":{"start":{"line":225,"column":16},"end":{"line":225,"column":76}},"74":{"start":{"line":228,"column":12},"end":{"line":228,"column":26}},"75":{"start":{"line":230,"column":11},"end":{"line":239,"column":5}},"76":{"start":{"line":232,"column":8},"end":{"line":238,"column":13}},"77":{"start":{"line":233,"column":12},"end":{"line":233,"column":78}},"78":{"start":{"line":234,"column":12},"end":{"line":234,"column":78}},"79":{"start":{"line":235,"column":12},"end":{"line":235,"column":63}},"80":{"start":{"line":237,"column":12},"end":{"line":237,"column":123}},"81":{"start":{"line":241,"column":4},"end":{"line":241,"column":45}},"82":{"start":{"line":242,"column":4},"end":{"line":242,"column":90}},"83":{"start":{"line":245,"column":0},"end":{"line":245,"column":30}}},"branchMap":{"1":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":11},"end":{"line":46,"column":24}},{"start":{"line":46,"column":28},"end":{"line":46,"column":84}}]},"2":{"line":61,"type":"binary-expr","locations":[{"start":{"line":61,"column":11},"end":{"line":61,"column":24}},{"start":{"line":61,"column":28},"end":{"line":61,"column":85}}]},"3":{"line":80,"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":80,"column":4}},{"start":{"line":80,"column":4},"end":{"line":80,"column":4}}]},"4":{"line":81,"type":"binary-expr","locations":[{"start":{"line":81,"column":23},"end":{"line":81,"column":78}},{"start":{"line":81,"column":82},"end":{"line":81,"column":83}}]},"5":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"6":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"7":{"line":163,"type":"if","locations":[{"start":{"line":163,"column":11},"end":{"line":163,"column":11}},{"start":{"line":163,"column":11},"end":{"line":163,"column":11}}]},"8":{"line":194,"type":"if","locations":[{"start":{"line":194,"column":4},"end":{"line":194,"column":4}},{"start":{"line":194,"column":4},"end":{"line":194,"column":4}}]},"9":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":11},"end":{"line":213,"column":11}},{"start":{"line":213,"column":11},"end":{"line":213,"column":11}}]},"10":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":11},"end":{"line":230,"column":11}},{"start":{"line":230,"column":11},"end":{"line":230,"column":11}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":44,"12":1},"b":{},"f":{"1":1,"2":267,"3":44},"fnMap":{"1":{"name":"(anonymous_1)","line":14,"loc":{"start":{"line":14,"column":23},"end":{"line":14,"column":35}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":36},"end":{"line":22,"column":52}}},"3":{"name":"(anonymous_3)","line":26,"loc":{"start":{"line":26,"column":46},"end":{"line":26,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":14,"column":0},"end":{"line":17,"column":2}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":45}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":47}},"6":{"start":{"line":19,"column":0},"end":{"line":19,"column":50}},"7":{"start":{"line":20,"column":0},"end":{"line":20,"column":58}},"8":{"start":{"line":22,"column":0},"end":{"line":24,"column":2}},"9":{"start":{"line":23,"column":4},"end":{"line":23,"column":49}},"10":{"start":{"line":26,"column":0},"end":{"line":28,"column":2}},"11":{"start":{"line":27,"column":4},"end":{"line":27,"column":45}},"12":{"start":{"line":30,"column":0},"end":{"line":30,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":234,"12":1},"b":{},"f":{"1":1,"2":267,"3":234},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":22},"end":{"line":20,"column":34}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":35},"end":{"line":28,"column":51}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":45},"end":{"line":32,"column":61}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":44}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":46}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":49}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":56}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":57}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":33}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":139,"12":1},"b":{},"f":{"1":1,"2":267,"3":139},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":23},"end":{"line":20,"column":35}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":36},"end":{"line":28,"column":52}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":46},"end":{"line":32,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":44}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":47}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":58}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":37,"12":1,"13":33,"14":1},"b":{},"f":{"1":1,"2":267,"3":37,"4":33},"fnMap":{"1":{"name":"(anonymous_1)","line":4,"loc":{"start":{"line":4,"column":31},"end":{"line":4,"column":43}}},"2":{"name":"(anonymous_2)","line":12,"loc":{"start":{"line":12,"column":44},"end":{"line":12,"column":60}}},"3":{"name":"(anonymous_3)","line":16,"loc":{"start":{"line":16,"column":54},"end":{"line":16,"column":70}}},"4":{"name":"(anonymous_4)","line":20,"loc":{"start":{"line":20,"column":51},"end":{"line":20,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"4":{"start":{"line":5,"column":4},"end":{"line":5,"column":53}},"5":{"start":{"line":6,"column":4},"end":{"line":6,"column":55}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":58}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":74}},"8":{"start":{"line":12,"column":0},"end":{"line":14,"column":2}},"9":{"start":{"line":13,"column":4},"end":{"line":13,"column":50}},"10":{"start":{"line":16,"column":0},"end":{"line":18,"column":2}},"11":{"start":{"line":17,"column":4},"end":{"line":17,"column":45}},"12":{"start":{"line":20,"column":0},"end":{"line":22,"column":2}},"13":{"start":{"line":21,"column":4},"end":{"line":21,"column":16}},"14":{"start":{"line":24,"column":0},"end":{"line":24,"column":42}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":28,"12":1,"13":35,"14":1},"b":{},"f":{"1":1,"2":267,"3":28,"4":35},"fnMap":{"1":{"name":"(anonymous_1)","line":4,"loc":{"start":{"line":4,"column":25},"end":{"line":4,"column":37}}},"2":{"name":"(anonymous_2)","line":12,"loc":{"start":{"line":12,"column":38},"end":{"line":12,"column":54}}},"3":{"name":"(anonymous_3)","line":16,"loc":{"start":{"line":16,"column":48},"end":{"line":16,"column":64}}},"4":{"name":"(anonymous_4)","line":20,"loc":{"start":{"line":20,"column":45},"end":{"line":20,"column":57}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"4":{"start":{"line":5,"column":4},"end":{"line":5,"column":47}},"5":{"start":{"line":6,"column":4},"end":{"line":6,"column":49}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":52}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":62}},"8":{"start":{"line":12,"column":0},"end":{"line":14,"column":2}},"9":{"start":{"line":13,"column":4},"end":{"line":13,"column":51}},"10":{"start":{"line":16,"column":0},"end":{"line":18,"column":2}},"11":{"start":{"line":17,"column":4},"end":{"line":17,"column":45}},"12":{"start":{"line":20,"column":0},"end":{"line":22,"column":2}},"13":{"start":{"line":21,"column":4},"end":{"line":21,"column":16}},"14":{"start":{"line":24,"column":0},"end":{"line":24,"column":36}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":28,"12":1},"b":{},"f":{"1":1,"2":267,"3":28},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":23},"end":{"line":20,"column":35}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":36},"end":{"line":28,"column":52}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":46},"end":{"line":32,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":45}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":47}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":56}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":0,"12":1},"b":{},"f":{"1":1,"2":267,"3":0},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":24},"end":{"line":20,"column":36}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":37},"end":{"line":28,"column":53}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":47},"end":{"line":32,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":45}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":51}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":60}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":59}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":38,"12":38,"13":38,"14":1},"b":{},"f":{"1":1,"2":267,"3":38},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":24},"end":{"line":20,"column":36}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":37},"end":{"line":28,"column":53}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":47},"end":{"line":32,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":46}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":51}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":60}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":61}},"10":{"start":{"line":32,"column":0},"end":{"line":36,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":47}},"12":{"start":{"line":34,"column":4},"end":{"line":34,"column":36}},"13":{"start":{"line":35,"column":4},"end":{"line":35,"column":47}},"14":{"start":{"line":38,"column":0},"end":{"line":38,"column":35}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":61,"8":61,"9":61,"10":61,"11":61,"12":61,"13":61,"14":1,"15":16,"16":50,"17":25,"18":1,"19":30,"20":1,"21":22,"22":1,"23":2,"24":1,"25":12,"26":12,"27":12,"28":12,"29":24,"30":4,"31":12,"32":12,"33":11,"34":9,"35":11,"36":21,"37":16,"38":16,"39":6,"40":10,"41":1,"42":2,"43":9,"44":11,"45":12,"46":12,"47":1,"48":8,"49":8,"50":8,"51":8,"52":1,"53":1,"54":1,"55":1,"56":0,"57":0,"58":1,"59":1,"60":1,"61":7,"62":7,"63":7,"64":8,"65":8,"66":12,"67":8,"68":8,"69":8,"70":8,"71":8,"72":8,"73":8,"74":25,"75":25,"76":8,"77":8,"78":8,"79":1,"80":3,"81":3,"82":3,"83":1,"84":3,"85":1,"86":3,"87":3,"88":3,"89":1,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":1,"98":48,"99":48,"100":48,"101":26,"102":22,"103":22,"104":22,"105":22,"106":1},"b":{"1":[35,26],"2":[30,22],"3":[12,1],"4":[12,2],"5":[11,1],"6":[9,2],"7":[6,10],"8":[16,11],"9":[1,9],"10":[8,1],"11":[8,2],"12":[1,7],"13":[0,1],"14":[1,7],"15":[12,13],"16":[3,0],"17":[1,2],"18":[0,0],"19":[0,0],"20":[26,22],"21":[22,0]},"f":{"1":61,"2":16,"3":50,"4":25,"5":30,"6":22,"7":2,"8":12,"9":24,"10":4,"11":21,"12":16,"13":2,"14":8,"15":1,"16":12,"17":25,"18":3,"19":3,"20":0,"21":0,"22":48},"fnMap":{"1":{"name":"(anonymous_1)","line":33,"loc":{"start":{"line":33,"column":20},"end":{"line":33,"column":72}}},"2":{"name":"(anonymous_2)","line":51,"loc":{"start":{"line":51,"column":32},"end":{"line":51,"column":59}}},"3":{"name":"(anonymous_3)","line":52,"loc":{"start":{"line":52,"column":25},"end":{"line":52,"column":38}}},"4":{"name":"(anonymous_4)","line":54,"loc":{"start":{"line":54,"column":11},"end":{"line":54,"column":24}}},"5":{"name":"(anonymous_5)","line":66,"loc":{"start":{"line":66,"column":38},"end":{"line":66,"column":54}}},"6":{"name":"(anonymous_6)","line":76,"loc":{"start":{"line":76,"column":35},"end":{"line":76,"column":47}}},"7":{"name":"(anonymous_7)","line":86,"loc":{"start":{"line":86,"column":36},"end":{"line":86,"column":48}}},"8":{"name":"(anonymous_8)","line":97,"loc":{"start":{"line":97,"column":33},"end":{"line":97,"column":52}}},"9":{"name":"(anonymous_9)","line":103,"loc":{"start":{"line":103,"column":36},"end":{"line":103,"column":49}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":15},"end":{"line":105,"column":28}}},"11":{"name":"(anonymous_11)","line":118,"loc":{"start":{"line":118,"column":48},"end":{"line":118,"column":61}}},"12":{"name":"(anonymous_12)","line":120,"loc":{"start":{"line":120,"column":15},"end":{"line":120,"column":28}}},"13":{"name":"(anonymous_13)","line":127,"loc":{"start":{"line":127,"column":33},"end":{"line":127,"column":46}}},"14":{"name":"(anonymous_14)","line":149,"loc":{"start":{"line":149,"column":33},"end":{"line":149,"column":49}}},"15":{"name":"(anonymous_15)","line":158,"loc":{"start":{"line":158,"column":38},"end":{"line":158,"column":51}}},"16":{"name":"(anonymous_16)","line":179,"loc":{"start":{"line":179,"column":36},"end":{"line":179,"column":54}}},"17":{"name":"(anonymous_17)","line":189,"loc":{"start":{"line":189,"column":40},"end":{"line":189,"column":64}}},"18":{"name":"(anonymous_18)","line":208,"loc":{"start":{"line":208,"column":34},"end":{"line":208,"column":63}}},"19":{"name":"(anonymous_19)","line":233,"loc":{"start":{"line":233,"column":34},"end":{"line":233,"column":63}}},"20":{"name":"(anonymous_20)","line":260,"loc":{"start":{"line":260,"column":40},"end":{"line":260,"column":67}}},"21":{"name":"(anonymous_21)","line":268,"loc":{"start":{"line":268,"column":11},"end":{"line":268,"column":32}}},"22":{"name":"(anonymous_22)","line":289,"loc":{"start":{"line":289,"column":43},"end":{"line":289,"column":63}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":41}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":41}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":36}},"5":{"start":{"line":28,"column":0},"end":{"line":28,"column":45}},"6":{"start":{"line":33,"column":0},"end":{"line":41,"column":2}},"7":{"start":{"line":34,"column":4},"end":{"line":34,"column":42}},"8":{"start":{"line":35,"column":4},"end":{"line":35,"column":28}},"9":{"start":{"line":36,"column":4},"end":{"line":36,"column":22}},"10":{"start":{"line":37,"column":4},"end":{"line":37,"column":70}},"11":{"start":{"line":38,"column":4},"end":{"line":38,"column":31}},"12":{"start":{"line":39,"column":4},"end":{"line":39,"column":37}},"13":{"start":{"line":40,"column":4},"end":{"line":40,"column":34}},"14":{"start":{"line":51,"column":0},"end":{"line":57,"column":2}},"15":{"start":{"line":52,"column":4},"end":{"line":56,"column":7}},"16":{"start":{"line":53,"column":8},"end":{"line":53,"column":37}},"17":{"start":{"line":55,"column":8},"end":{"line":55,"column":22}},"18":{"start":{"line":66,"column":0},"end":{"line":68,"column":2}},"19":{"start":{"line":67,"column":4},"end":{"line":67,"column":56}},"20":{"start":{"line":76,"column":0},"end":{"line":78,"column":2}},"21":{"start":{"line":77,"column":4},"end":{"line":77,"column":45}},"22":{"start":{"line":86,"column":0},"end":{"line":88,"column":2}},"23":{"start":{"line":87,"column":4},"end":{"line":87,"column":28}},"24":{"start":{"line":97,"column":0},"end":{"line":140,"column":2}},"25":{"start":{"line":98,"column":4},"end":{"line":98,"column":28}},"26":{"start":{"line":99,"column":4},"end":{"line":99,"column":35}},"27":{"start":{"line":100,"column":4},"end":{"line":100,"column":20}},"28":{"start":{"line":103,"column":4},"end":{"line":107,"column":7}},"29":{"start":{"line":104,"column":8},"end":{"line":104,"column":40}},"30":{"start":{"line":106,"column":8},"end":{"line":106,"column":69}},"31":{"start":{"line":109,"column":4},"end":{"line":109,"column":23}},"32":{"start":{"line":112,"column":4},"end":{"line":135,"column":5}},"33":{"start":{"line":114,"column":8},"end":{"line":116,"column":9}},"34":{"start":{"line":115,"column":12},"end":{"line":115,"column":56}},"35":{"start":{"line":118,"column":8},"end":{"line":132,"column":11}},"36":{"start":{"line":119,"column":12},"end":{"line":119,"column":38}},"37":{"start":{"line":121,"column":12},"end":{"line":121,"column":40}},"38":{"start":{"line":122,"column":12},"end":{"line":124,"column":13}},"39":{"start":{"line":123,"column":16},"end":{"line":123,"column":28}},"40":{"start":{"line":126,"column":12},"end":{"line":130,"column":13}},"41":{"start":{"line":127,"column":16},"end":{"line":129,"column":19}},"42":{"start":{"line":128,"column":20},"end":{"line":128,"column":63}},"43":{"start":{"line":131,"column":12},"end":{"line":131,"column":59}},"44":{"start":{"line":134,"column":8},"end":{"line":134,"column":60}},"45":{"start":{"line":137,"column":4},"end":{"line":137,"column":35}},"46":{"start":{"line":139,"column":4},"end":{"line":139,"column":18}},"47":{"start":{"line":149,"column":0},"end":{"line":198,"column":2}},"48":{"start":{"line":150,"column":4},"end":{"line":150,"column":41}},"49":{"start":{"line":151,"column":4},"end":{"line":151,"column":32}},"50":{"start":{"line":152,"column":4},"end":{"line":152,"column":36}},"51":{"start":{"line":155,"column":4},"end":{"line":176,"column":5}},"52":{"start":{"line":157,"column":8},"end":{"line":157,"column":49}},"53":{"start":{"line":158,"column":8},"end":{"line":160,"column":14}},"54":{"start":{"line":159,"column":12},"end":{"line":159,"column":69}},"55":{"start":{"line":162,"column":8},"end":{"line":165,"column":9}},"56":{"start":{"line":163,"column":12},"end":{"line":163,"column":54}},"57":{"start":{"line":164,"column":12},"end":{"line":164,"column":24}},"58":{"start":{"line":167,"column":8},"end":{"line":167,"column":48}},"59":{"start":{"line":168,"column":8},"end":{"line":168,"column":30}},"60":{"start":{"line":169,"column":8},"end":{"line":169,"column":36}},"61":{"start":{"line":173,"column":8},"end":{"line":173,"column":26}},"62":{"start":{"line":174,"column":8},"end":{"line":174,"column":30}},"63":{"start":{"line":175,"column":8},"end":{"line":175,"column":36}},"64":{"start":{"line":178,"column":4},"end":{"line":178,"column":67}},"65":{"start":{"line":179,"column":4},"end":{"line":179,"column":92}},"66":{"start":{"line":179,"column":56},"end":{"line":179,"column":79}},"67":{"start":{"line":180,"column":4},"end":{"line":180,"column":82}},"68":{"start":{"line":182,"column":4},"end":{"line":182,"column":44}},"69":{"start":{"line":183,"column":4},"end":{"line":183,"column":89}},"70":{"start":{"line":185,"column":4},"end":{"line":185,"column":53}},"71":{"start":{"line":186,"column":4},"end":{"line":186,"column":42}},"72":{"start":{"line":187,"column":4},"end":{"line":187,"column":34}},"73":{"start":{"line":189,"column":4},"end":{"line":192,"column":11}},"74":{"start":{"line":190,"column":8},"end":{"line":190,"column":95}},"75":{"start":{"line":191,"column":8},"end":{"line":191,"column":19}},"76":{"start":{"line":194,"column":4},"end":{"line":194,"column":23}},"77":{"start":{"line":195,"column":4},"end":{"line":195,"column":25}},"78":{"start":{"line":197,"column":4},"end":{"line":197,"column":18}},"79":{"start":{"line":208,"column":0},"end":{"line":223,"column":2}},"80":{"start":{"line":210,"column":4},"end":{"line":216,"column":5}},"81":{"start":{"line":211,"column":8},"end":{"line":211,"column":51}},"82":{"start":{"line":213,"column":8},"end":{"line":215,"column":9}},"83":{"start":{"line":214,"column":12},"end":{"line":214,"column":27}},"84":{"start":{"line":218,"column":4},"end":{"line":222,"column":6}},"85":{"start":{"line":233,"column":0},"end":{"line":248,"column":2}},"86":{"start":{"line":235,"column":4},"end":{"line":235,"column":51}},"87":{"start":{"line":236,"column":4},"end":{"line":245,"column":7}},"88":{"start":{"line":247,"column":4},"end":{"line":247,"column":93}},"89":{"start":{"line":260,"column":0},"end":{"line":281,"column":2}},"90":{"start":{"line":262,"column":4},"end":{"line":262,"column":51}},"91":{"start":{"line":264,"column":4},"end":{"line":275,"column":5}},"92":{"start":{"line":265,"column":8},"end":{"line":274,"column":11}},"93":{"start":{"line":269,"column":12},"end":{"line":273,"column":13}},"94":{"start":{"line":270,"column":16},"end":{"line":270,"column":62}},"95":{"start":{"line":272,"column":16},"end":{"line":272,"column":37}},"96":{"start":{"line":277,"column":4},"end":{"line":280,"column":27}},"97":{"start":{"line":289,"column":0},"end":{"line":309,"column":2}},"98":{"start":{"line":290,"column":4},"end":{"line":290,"column":42}},"99":{"start":{"line":293,"column":4},"end":{"line":293,"column":58}},"100":{"start":{"line":296,"column":4},"end":{"line":307,"column":5}},"101":{"start":{"line":297,"column":8},"end":{"line":297,"column":37}},"102":{"start":{"line":302,"column":8},"end":{"line":302,"column":45}},"103":{"start":{"line":303,"column":8},"end":{"line":305,"column":9}},"104":{"start":{"line":304,"column":12},"end":{"line":304,"column":44}},"105":{"start":{"line":306,"column":8},"end":{"line":306,"column":83}},"106":{"start":{"line":311,"column":0},"end":{"line":311,"column":31}}},"branchMap":{"1":{"line":37,"type":"cond-expr","locations":[{"start":{"line":37,"column":31},"end":{"line":37,"column":62}},{"start":{"line":37,"column":65},"end":{"line":37,"column":69}}]},"2":{"line":67,"type":"binary-expr","locations":[{"start":{"line":67,"column":36},"end":{"line":67,"column":40}},{"start":{"line":67,"column":44},"end":{"line":67,"column":54}}]},"3":{"line":98,"type":"binary-expr","locations":[{"start":{"line":98,"column":14},"end":{"line":98,"column":21}},{"start":{"line":98,"column":25},"end":{"line":98,"column":27}}]},"4":{"line":99,"type":"binary-expr","locations":[{"start":{"line":99,"column":14},"end":{"line":99,"column":28}},{"start":{"line":99,"column":32},"end":{"line":99,"column":34}}]},"5":{"line":112,"type":"if","locations":[{"start":{"line":112,"column":4},"end":{"line":112,"column":4}},{"start":{"line":112,"column":4},"end":{"line":112,"column":4}}]},"6":{"line":114,"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":114,"column":8}},{"start":{"line":114,"column":8},"end":{"line":114,"column":8}}]},"7":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":12},"end":{"line":122,"column":12}},{"start":{"line":122,"column":12},"end":{"line":122,"column":12}}]},"8":{"line":122,"type":"binary-expr","locations":[{"start":{"line":122,"column":16},"end":{"line":122,"column":35}},{"start":{"line":122,"column":39},"end":{"line":122,"column":53}}]},"9":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":12},"end":{"line":126,"column":12}},{"start":{"line":126,"column":12},"end":{"line":126,"column":12}}]},"10":{"line":151,"type":"binary-expr","locations":[{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},{"start":{"line":151,"column":29},"end":{"line":151,"column":31}}]},"11":{"line":152,"type":"binary-expr","locations":[{"start":{"line":152,"column":18},"end":{"line":152,"column":29}},{"start":{"line":152,"column":33},"end":{"line":152,"column":35}}]},"12":{"line":155,"type":"if","locations":[{"start":{"line":155,"column":4},"end":{"line":155,"column":4}},{"start":{"line":155,"column":4},"end":{"line":155,"column":4}}]},"13":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":8},"end":{"line":162,"column":8}},{"start":{"line":162,"column":8},"end":{"line":162,"column":8}}]},"14":{"line":178,"type":"cond-expr","locations":[{"start":{"line":178,"column":32},"end":{"line":178,"column":43}},{"start":{"line":178,"column":46},"end":{"line":178,"column":66}}]},"15":{"line":190,"type":"cond-expr","locations":[{"start":{"line":190,"column":46},"end":{"line":190,"column":67}},{"start":{"line":190,"column":70},"end":{"line":190,"column":94}}]},"16":{"line":210,"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":4}},{"start":{"line":210,"column":4},"end":{"line":210,"column":4}}]},"17":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":8},"end":{"line":213,"column":8}},{"start":{"line":213,"column":8},"end":{"line":213,"column":8}}]},"18":{"line":264,"type":"if","locations":[{"start":{"line":264,"column":4},"end":{"line":264,"column":4}},{"start":{"line":264,"column":4},"end":{"line":264,"column":4}}]},"19":{"line":269,"type":"if","locations":[{"start":{"line":269,"column":12},"end":{"line":269,"column":12}},{"start":{"line":269,"column":12},"end":{"line":269,"column":12}}]},"20":{"line":296,"type":"if","locations":[{"start":{"line":296,"column":4},"end":{"line":296,"column":4}},{"start":{"line":296,"column":4},"end":{"line":296,"column":4}}]},"21":{"line":303,"type":"if","locations":[{"start":{"line":303,"column":8},"end":{"line":303,"column":8}},{"start":{"line":303,"column":8},"end":{"line":303,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js","s":{"1":1,"2":1,"3":1,"4":42,"5":2,"6":2,"7":2,"8":42},"b":{"1":[2,40],"2":[42,2],"3":[2,0],"4":[2,2]},"f":{"1":42},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":17},"end":{"line":26,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":36}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":37}},"3":{"start":{"line":26,"column":0},"end":{"line":37,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":32,"column":5}},"5":{"start":{"line":28,"column":8},"end":{"line":30,"column":9}},"6":{"start":{"line":29,"column":12},"end":{"line":29,"column":36}},"7":{"start":{"line":31,"column":8},"end":{"line":31,"column":46}},"8":{"start":{"line":34,"column":4},"end":{"line":36,"column":18}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":4}},{"start":{"line":27,"column":4},"end":{"line":27,"column":4}}]},"2":{"line":27,"type":"binary-expr","locations":[{"start":{"line":27,"column":8},"end":{"line":27,"column":15}},{"start":{"line":27,"column":19},"end":{"line":27,"column":45}}]},"3":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":8},"end":{"line":28,"column":8}},{"start":{"line":28,"column":8},"end":{"line":28,"column":8}}]},"4":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":12},"end":{"line":28,"column":28}},{"start":{"line":28,"column":32},"end":{"line":28,"column":59}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":68,"7":68,"8":94,"9":68,"10":42,"11":68,"12":68,"13":68,"14":1,"15":16,"16":4,"17":1,"18":8,"19":2,"20":1,"21":16,"22":16,"23":9,"24":16,"25":16,"26":16,"27":1,"28":16,"29":1,"30":9,"31":0,"32":9,"33":9,"34":9,"35":1,"36":8,"37":14,"38":8,"39":8,"40":8,"41":8,"42":7,"43":7,"44":1,"45":1,"46":1,"47":1,"48":5,"49":16,"50":5,"51":5,"52":5,"53":4,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":0,"62":1,"63":0,"64":0,"65":0,"66":1,"67":68,"68":1,"69":68,"70":1,"71":2,"72":2,"73":2,"74":2,"75":2,"76":1,"77":9,"78":9,"79":3,"80":6,"81":1,"82":68,"83":68,"84":68,"85":68,"86":68,"87":68,"88":68,"89":68,"90":67,"91":68,"92":1},"b":{"1":[4,12],"2":[2,6],"3":[8,4],"4":[9,7],"5":[16,9],"6":[0,9],"7":[9,0],"8":[9,0],"9":[7,1],"10":[4,1],"11":[1,0],"12":[2,0],"13":[3,6],"14":[67,1]},"f":{"1":68,"2":94,"3":42,"4":16,"5":8,"6":16,"7":16,"8":9,"9":8,"10":14,"11":1,"12":5,"13":16,"14":1,"15":0,"16":68,"17":68,"18":2,"19":9,"20":68},"fnMap":{"1":{"name":"(anonymous_1)","line":31,"loc":{"start":{"line":31,"column":23},"end":{"line":31,"column":53}}},"2":{"name":"(anonymous_2)","line":33,"loc":{"start":{"line":33,"column":39},"end":{"line":33,"column":52}}},"3":{"name":"(anonymous_3)","line":36,"loc":{"start":{"line":36,"column":41},"end":{"line":36,"column":54}}},"4":{"name":"(anonymous_4)","line":44,"loc":{"start":{"line":44,"column":45},"end":{"line":44,"column":61}}},"5":{"name":"(anonymous_5)","line":50,"loc":{"start":{"line":50,"column":49},"end":{"line":50,"column":65}}},"6":{"name":"(anonymous_6)","line":63,"loc":{"start":{"line":63,"column":39},"end":{"line":63,"column":55}}},"7":{"name":"(anonymous_7)","line":79,"loc":{"start":{"line":79,"column":39},"end":{"line":79,"column":51}}},"8":{"name":"(anonymous_8)","line":84,"loc":{"start":{"line":84,"column":42},"end":{"line":84,"column":60}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":34},"end":{"line":104,"column":46}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":60},"end":{"line":105,"column":73}}},"11":{"name":"(anonymous_11)","line":117,"loc":{"start":{"line":117,"column":42},"end":{"line":117,"column":67}}},"12":{"name":"(anonymous_12)","line":127,"loc":{"start":{"line":127,"column":45},"end":{"line":127,"column":57}}},"13":{"name":"(anonymous_13)","line":128,"loc":{"start":{"line":128,"column":60},"end":{"line":128,"column":73}}},"14":{"name":"(anonymous_14)","line":144,"loc":{"start":{"line":144,"column":41},"end":{"line":144,"column":53}}},"15":{"name":"(anonymous_15)","line":162,"loc":{"start":{"line":162,"column":37},"end":{"line":162,"column":49}}},"16":{"name":"(anonymous_16)","line":175,"loc":{"start":{"line":175,"column":41},"end":{"line":175,"column":53}}},"17":{"name":"(anonymous_17)","line":185,"loc":{"start":{"line":185,"column":38},"end":{"line":185,"column":50}}},"18":{"name":"(anonymous_18)","line":195,"loc":{"start":{"line":195,"column":37},"end":{"line":195,"column":49}}},"19":{"name":"(anonymous_19)","line":214,"loc":{"start":{"line":214,"column":37},"end":{"line":214,"column":49}}},"20":{"name":"(anonymous_20)","line":232,"loc":{"start":{"line":232,"column":46},"end":{"line":232,"column":66}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":41}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":36}},"5":{"start":{"line":31,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":20}},"7":{"start":{"line":33,"column":4},"end":{"line":35,"column":7}},"8":{"start":{"line":34,"column":8},"end":{"line":34,"column":22}},"9":{"start":{"line":36,"column":4},"end":{"line":38,"column":7}},"10":{"start":{"line":37,"column":8},"end":{"line":37,"column":22}},"11":{"start":{"line":39,"column":4},"end":{"line":39,"column":35}},"12":{"start":{"line":40,"column":4},"end":{"line":40,"column":49}},"13":{"start":{"line":41,"column":4},"end":{"line":41,"column":28}},"14":{"start":{"line":44,"column":0},"end":{"line":48,"column":2}},"15":{"start":{"line":45,"column":4},"end":{"line":47,"column":5}},"16":{"start":{"line":46,"column":8},"end":{"line":46,"column":26}},"17":{"start":{"line":50,"column":0},"end":{"line":54,"column":2}},"18":{"start":{"line":51,"column":4},"end":{"line":53,"column":5}},"19":{"start":{"line":52,"column":8},"end":{"line":52,"column":71}},"20":{"start":{"line":63,"column":0},"end":{"line":71,"column":2}},"21":{"start":{"line":64,"column":4},"end":{"line":64,"column":21}},"22":{"start":{"line":65,"column":4},"end":{"line":67,"column":5}},"23":{"start":{"line":66,"column":8},"end":{"line":66,"column":40}},"24":{"start":{"line":68,"column":4},"end":{"line":68,"column":31}},"25":{"start":{"line":69,"column":4},"end":{"line":69,"column":88}},"26":{"start":{"line":70,"column":4},"end":{"line":70,"column":19}},"27":{"start":{"line":79,"column":0},"end":{"line":81,"column":2}},"28":{"start":{"line":80,"column":4},"end":{"line":80,"column":40}},"29":{"start":{"line":84,"column":0},"end":{"line":92,"column":2}},"30":{"start":{"line":85,"column":4},"end":{"line":87,"column":5}},"31":{"start":{"line":86,"column":8},"end":{"line":86,"column":15}},"32":{"start":{"line":89,"column":4},"end":{"line":89,"column":59}},"33":{"start":{"line":90,"column":4},"end":{"line":90,"column":63}},"34":{"start":{"line":91,"column":4},"end":{"line":91,"column":52}},"35":{"start":{"line":104,"column":0},"end":{"line":120,"column":2}},"36":{"start":{"line":105,"column":4},"end":{"line":105,"column":101}},"37":{"start":{"line":105,"column":74},"end":{"line":105,"column":97}},"38":{"start":{"line":106,"column":4},"end":{"line":106,"column":46}},"39":{"start":{"line":107,"column":4},"end":{"line":107,"column":54}},"40":{"start":{"line":108,"column":4},"end":{"line":108,"column":39}},"41":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"42":{"start":{"line":112,"column":8},"end":{"line":112,"column":59}},"43":{"start":{"line":113,"column":8},"end":{"line":113,"column":41}},"44":{"start":{"line":116,"column":4},"end":{"line":116,"column":20}},"45":{"start":{"line":117,"column":4},"end":{"line":119,"column":7}},"46":{"start":{"line":118,"column":8},"end":{"line":118,"column":51}},"47":{"start":{"line":127,"column":0},"end":{"line":137,"column":2}},"48":{"start":{"line":128,"column":4},"end":{"line":128,"column":101}},"49":{"start":{"line":128,"column":74},"end":{"line":128,"column":97}},"50":{"start":{"line":129,"column":4},"end":{"line":129,"column":46}},"51":{"start":{"line":130,"column":4},"end":{"line":130,"column":39}},"52":{"start":{"line":132,"column":4},"end":{"line":134,"column":5}},"53":{"start":{"line":133,"column":8},"end":{"line":133,"column":50}},"54":{"start":{"line":136,"column":4},"end":{"line":136,"column":49}},"55":{"start":{"line":144,"column":0},"end":{"line":154,"column":2}},"56":{"start":{"line":145,"column":4},"end":{"line":145,"column":53}},"57":{"start":{"line":146,"column":4},"end":{"line":146,"column":46}},"58":{"start":{"line":147,"column":4},"end":{"line":147,"column":39}},"59":{"start":{"line":149,"column":4},"end":{"line":151,"column":5}},"60":{"start":{"line":150,"column":8},"end":{"line":150,"column":46}},"61":{"start":{"line":153,"column":4},"end":{"line":153,"column":45}},"62":{"start":{"line":162,"column":0},"end":{"line":167,"column":2}},"63":{"start":{"line":163,"column":4},"end":{"line":163,"column":53}},"64":{"start":{"line":164,"column":4},"end":{"line":164,"column":39}},"65":{"start":{"line":166,"column":4},"end":{"line":166,"column":24}},"66":{"start":{"line":175,"column":0},"end":{"line":177,"column":2}},"67":{"start":{"line":176,"column":4},"end":{"line":176,"column":48}},"68":{"start":{"line":185,"column":0},"end":{"line":187,"column":2}},"69":{"start":{"line":186,"column":4},"end":{"line":186,"column":45}},"70":{"start":{"line":195,"column":0},"end":{"line":207,"column":2}},"71":{"start":{"line":196,"column":4},"end":{"line":196,"column":53}},"72":{"start":{"line":197,"column":4},"end":{"line":197,"column":46}},"73":{"start":{"line":198,"column":4},"end":{"line":198,"column":39}},"74":{"start":{"line":199,"column":4},"end":{"line":199,"column":46}},"75":{"start":{"line":201,"column":4},"end":{"line":206,"column":6}},"76":{"start":{"line":214,"column":0},"end":{"line":224,"column":2}},"77":{"start":{"line":215,"column":4},"end":{"line":215,"column":38}},"78":{"start":{"line":218,"column":4},"end":{"line":220,"column":5}},"79":{"start":{"line":219,"column":8},"end":{"line":219,"column":87}},"80":{"start":{"line":223,"column":4},"end":{"line":223,"column":72}},"81":{"start":{"line":232,"column":0},"end":{"line":244,"column":2}},"82":{"start":{"line":233,"column":4},"end":{"line":233,"column":42}},"83":{"start":{"line":234,"column":4},"end":{"line":234,"column":46}},"84":{"start":{"line":235,"column":4},"end":{"line":235,"column":40}},"85":{"start":{"line":236,"column":4},"end":{"line":236,"column":62}},"86":{"start":{"line":237,"column":4},"end":{"line":237,"column":54}},"87":{"start":{"line":238,"column":4},"end":{"line":238,"column":46}},"88":{"start":{"line":239,"column":4},"end":{"line":239,"column":41}},"89":{"start":{"line":240,"column":4},"end":{"line":242,"column":5}},"90":{"start":{"line":241,"column":8},"end":{"line":241,"column":40}},"91":{"start":{"line":243,"column":4},"end":{"line":243,"column":53}},"92":{"start":{"line":246,"column":0},"end":{"line":246,"column":34}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":4},"end":{"line":45,"column":4}},{"start":{"line":45,"column":4},"end":{"line":45,"column":4}}]},"2":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"3":{"line":51,"type":"binary-expr","locations":[{"start":{"line":51,"column":8},"end":{"line":51,"column":45}},{"start":{"line":51,"column":49},"end":{"line":51,"column":86}}]},"4":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]},"5":{"line":65,"type":"binary-expr","locations":[{"start":{"line":65,"column":8},"end":{"line":65,"column":45}},{"start":{"line":65,"column":49},"end":{"line":65,"column":85}}]},"6":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":4},"end":{"line":85,"column":4}},{"start":{"line":85,"column":4},"end":{"line":85,"column":4}}]},"7":{"line":89,"type":"cond-expr","locations":[{"start":{"line":89,"column":34},"end":{"line":89,"column":49}},{"start":{"line":89,"column":52},"end":{"line":89,"column":58}}]},"8":{"line":91,"type":"cond-expr","locations":[{"start":{"line":91,"column":33},"end":{"line":91,"column":42}},{"start":{"line":91,"column":45},"end":{"line":91,"column":51}}]},"9":{"line":111,"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":111,"column":4}},{"start":{"line":111,"column":4},"end":{"line":111,"column":4}}]},"10":{"line":132,"type":"if","locations":[{"start":{"line":132,"column":4},"end":{"line":132,"column":4}},{"start":{"line":132,"column":4},"end":{"line":132,"column":4}}]},"11":{"line":149,"type":"if","locations":[{"start":{"line":149,"column":4},"end":{"line":149,"column":4}},{"start":{"line":149,"column":4},"end":{"line":149,"column":4}}]},"12":{"line":202,"type":"cond-expr","locations":[{"start":{"line":202,"column":33},"end":{"line":202,"column":43}},{"start":{"line":202,"column":46},"end":{"line":202,"column":67}}]},"13":{"line":218,"type":"if","locations":[{"start":{"line":218,"column":4},"end":{"line":218,"column":4}},{"start":{"line":218,"column":4},"end":{"line":218,"column":4}}]},"14":{"line":240,"type":"if","locations":[{"start":{"line":240,"column":4},"end":{"line":240,"column":4}},{"start":{"line":240,"column":4},"end":{"line":240,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":70}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":65}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":72}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":70}},"5":{"start":{"line":29,"column":0},"end":{"line":38,"column":2}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":0,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":0,"16":1,"17":1,"18":1,"19":1},"b":{"1":[0,1],"2":[0,1],"3":[1,0]},"f":{"1":1,"2":0,"3":0,"4":1},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":15},"end":{"line":35,"column":57}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":47},"end":{"line":50,"column":71}}},"3":{"name":"(anonymous_3)","line":65,"loc":{"start":{"line":65,"column":24},"end":{"line":65,"column":66}}},"4":{"name":"(anonymous_4)","line":83,"loc":{"start":{"line":83,"column":14},"end":{"line":83,"column":64}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":29}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":61}},"3":{"start":{"line":35,"column":0},"end":{"line":54,"column":2}},"4":{"start":{"line":36,"column":4},"end":{"line":36,"column":28}},"5":{"start":{"line":37,"column":4},"end":{"line":39,"column":5}},"6":{"start":{"line":38,"column":8},"end":{"line":38,"column":48}},"7":{"start":{"line":41,"column":4},"end":{"line":43,"column":5}},"8":{"start":{"line":42,"column":8},"end":{"line":42,"column":77}},"9":{"start":{"line":45,"column":4},"end":{"line":48,"column":5}},"10":{"start":{"line":46,"column":8},"end":{"line":46,"column":65}},"11":{"start":{"line":47,"column":8},"end":{"line":47,"column":65}},"12":{"start":{"line":50,"column":4},"end":{"line":52,"column":7}},"13":{"start":{"line":51,"column":8},"end":{"line":51,"column":75}},"14":{"start":{"line":65,"column":0},"end":{"line":71,"column":2}},"15":{"start":{"line":66,"column":4},"end":{"line":70,"column":17}},"16":{"start":{"line":83,"column":0},"end":{"line":89,"column":2}},"17":{"start":{"line":84,"column":4},"end":{"line":84,"column":26}},"18":{"start":{"line":85,"column":4},"end":{"line":88,"column":17}},"19":{"start":{"line":91,"column":0},"end":{"line":91,"column":26}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":4}},{"start":{"line":37,"column":4},"end":{"line":37,"column":4}}]},"2":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":4}},{"start":{"line":41,"column":4},"end":{"line":41,"column":4}}]},"3":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":4},"end":{"line":45,"column":4}},{"start":{"line":45,"column":4},"end":{"line":45,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js","s":{"1":1,"2":1,"3":154,"4":154,"5":154,"6":616,"7":616,"8":1,"9":154,"10":154,"11":154,"12":154,"13":154,"14":1},"b":{},"f":{"1":154,"2":616,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":25,"loc":{"start":{"line":25,"column":9},"end":{"line":25,"column":25}}},"2":{"name":"(anonymous_2)","line":30,"loc":{"start":{"line":30,"column":22},"end":{"line":30,"column":39}}},"3":{"name":"(anonymous_3)","line":36,"loc":{"start":{"line":36,"column":14},"end":{"line":36,"column":26}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":34}},"2":{"start":{"line":25,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":26,"column":4},"end":{"line":26,"column":48}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":20}},"5":{"start":{"line":30,"column":4},"end":{"line":33,"column":7}},"6":{"start":{"line":31,"column":8},"end":{"line":31,"column":36}},"7":{"start":{"line":32,"column":8},"end":{"line":32,"column":55}},"8":{"start":{"line":36,"column":0},"end":{"line":64,"column":2}},"9":{"start":{"line":37,"column":4},"end":{"line":41,"column":7}},"10":{"start":{"line":43,"column":4},"end":{"line":47,"column":7}},"11":{"start":{"line":49,"column":4},"end":{"line":53,"column":7}},"12":{"start":{"line":55,"column":4},"end":{"line":59,"column":7}},"13":{"start":{"line":61,"column":4},"end":{"line":63,"column":6}},"14":{"start":{"line":66,"column":0},"end":{"line":66,"column":20}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js","s":{"1":1,"2":1,"3":1,"4":1,"5":154,"6":154,"7":154,"8":924,"9":924,"10":1,"11":154,"12":154,"13":154,"14":154,"15":154,"16":154,"17":154,"18":154,"19":1},"b":{},"f":{"1":154,"2":924,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":28,"loc":{"start":{"line":28,"column":10},"end":{"line":28,"column":26}}},"2":{"name":"(anonymous_2)","line":33,"loc":{"start":{"line":33,"column":22},"end":{"line":33,"column":39}}},"3":{"name":"(anonymous_3)","line":40,"loc":{"start":{"line":40,"column":14},"end":{"line":40,"column":26}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":34}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":42}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":48}},"4":{"start":{"line":28,"column":0},"end":{"line":37,"column":2}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":48}},"6":{"start":{"line":31,"column":4},"end":{"line":31,"column":20}},"7":{"start":{"line":33,"column":4},"end":{"line":36,"column":7}},"8":{"start":{"line":34,"column":8},"end":{"line":34,"column":36}},"9":{"start":{"line":35,"column":8},"end":{"line":35,"column":55}},"10":{"start":{"line":40,"column":0},"end":{"line":103,"column":2}},"11":{"start":{"line":42,"column":4},"end":{"line":47,"column":7}},"12":{"start":{"line":49,"column":4},"end":{"line":53,"column":7}},"13":{"start":{"line":55,"column":4},"end":{"line":59,"column":7}},"14":{"start":{"line":61,"column":4},"end":{"line":65,"column":7}},"15":{"start":{"line":67,"column":4},"end":{"line":71,"column":7}},"16":{"start":{"line":73,"column":4},"end":{"line":79,"column":7}},"17":{"start":{"line":82,"column":4},"end":{"line":93,"column":7}},"18":{"start":{"line":95,"column":4},"end":{"line":102,"column":6}},"19":{"start":{"line":105,"column":0},"end":{"line":105,"column":21}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js","s":{"1":1,"2":1,"3":1,"4":154,"5":154,"6":154,"7":308,"8":308,"9":1,"10":154,"11":1},"b":{},"f":{"1":154,"2":308,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":10},"end":{"line":26,"column":26}}},"2":{"name":"(anonymous_2)","line":31,"loc":{"start":{"line":31,"column":25},"end":{"line":31,"column":37}}},"3":{"name":"(anonymous_3)","line":38,"loc":{"start":{"line":38,"column":17},"end":{"line":38,"column":29}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":26,"column":0},"end":{"line":35,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":48}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":20}},"6":{"start":{"line":31,"column":4},"end":{"line":34,"column":7}},"7":{"start":{"line":32,"column":8},"end":{"line":32,"column":31}},"8":{"start":{"line":33,"column":8},"end":{"line":33,"column":50}},"9":{"start":{"line":38,"column":0},"end":{"line":50,"column":2}},"10":{"start":{"line":39,"column":4},"end":{"line":49,"column":6}},"11":{"start":{"line":52,"column":0},"end":{"line":52,"column":21}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js","s":{"1":1,"2":167,"3":167,"4":1},"b":{},"f":{"1":167},"fnMap":{"1":{"name":"(anonymous_1)","line":3,"loc":{"start":{"line":3,"column":15},"end":{"line":3,"column":27}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":6,"column":2}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":33}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":36}},"4":{"start":{"line":8,"column":0},"end":{"line":8,"column":26}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":154,"7":157,"8":157,"9":1,"10":1,"11":1,"12":156,"13":157,"14":2,"15":2,"16":2,"17":157,"18":156,"19":618,"20":618,"21":154,"22":154,"23":154,"24":154,"25":154,"26":1},"b":{"1":[1,156],"2":[1,0],"3":[2,155],"4":[156,1]},"f":{"1":154,"2":157,"3":2,"4":618},"fnMap":{"1":{"name":"(anonymous_1)","line":8,"loc":{"start":{"line":8,"column":13},"end":{"line":8,"column":29}}},"2":{"name":"(anonymous_2)","line":10,"loc":{"start":{"line":10,"column":13},"end":{"line":10,"column":34}}},"3":{"name":"(anonymous_3)","line":23,"loc":{"start":{"line":23,"column":38},"end":{"line":23,"column":56}}},"4":{"name":"(anonymous_4)","line":30,"loc":{"start":{"line":30,"column":41},"end":{"line":30,"column":61}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":40}},"3":{"start":{"line":3,"column":0},"end":{"line":3,"column":33}},"4":{"start":{"line":4,"column":0},"end":{"line":4,"column":37}},"5":{"start":{"line":8,"column":0},"end":{"line":43,"column":2}},"6":{"start":{"line":10,"column":4},"end":{"line":35,"column":6}},"7":{"start":{"line":12,"column":8},"end":{"line":12,"column":27}},"8":{"start":{"line":13,"column":8},"end":{"line":20,"column":9}},"9":{"start":{"line":14,"column":12},"end":{"line":16,"column":13}},"10":{"start":{"line":15,"column":16},"end":{"line":15,"column":46}},"11":{"start":{"line":17,"column":12},"end":{"line":17,"column":54}},"12":{"start":{"line":19,"column":12},"end":{"line":19,"column":34}},"13":{"start":{"line":22,"column":8},"end":{"line":27,"column":9}},"14":{"start":{"line":23,"column":12},"end":{"line":26,"column":15}},"15":{"start":{"line":24,"column":16},"end":{"line":24,"column":54}},"16":{"start":{"line":25,"column":16},"end":{"line":25,"column":63}},"17":{"start":{"line":29,"column":8},"end":{"line":34,"column":9}},"18":{"start":{"line":30,"column":12},"end":{"line":33,"column":15}},"19":{"start":{"line":31,"column":16},"end":{"line":31,"column":56}},"20":{"start":{"line":32,"column":16},"end":{"line":32,"column":65}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":31}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":21}},"23":{"start":{"line":39,"column":4},"end":{"line":39,"column":23}},"24":{"start":{"line":40,"column":4},"end":{"line":40,"column":27}},"25":{"start":{"line":42,"column":4},"end":{"line":42,"column":14}},"26":{"start":{"line":47,"column":0},"end":{"line":47,"column":24}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":8},"end":{"line":13,"column":8}},{"start":{"line":13,"column":8},"end":{"line":13,"column":8}}]},"2":{"line":14,"type":"if","locations":[{"start":{"line":14,"column":12},"end":{"line":14,"column":12}},{"start":{"line":14,"column":12},"end":{"line":14,"column":12}}]},"3":{"line":22,"type":"if","locations":[{"start":{"line":22,"column":8},"end":{"line":22,"column":8}},{"start":{"line":22,"column":8},"end":{"line":22,"column":8}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":29,"column":8}},{"start":{"line":29,"column":8},"end":{"line":29,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js","s":{"1":1,"2":1,"3":1,"4":4,"5":4,"6":1,"7":8,"8":1,"9":4,"10":4,"11":4,"12":4,"13":8,"14":8,"15":8,"16":2,"17":6,"18":1},"b":{"1":[4,0],"2":[8,0],"3":[8,0],"4":[2,6],"5":[6,0]},"f":{"1":4,"2":8,"3":4,"4":4,"5":8,"6":8},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":12},"end":{"line":26,"column":28}}},"2":{"name":"(anonymous_2)","line":37,"loc":{"start":{"line":37,"column":22},"end":{"line":37,"column":41}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":26},"end":{"line":46,"column":38}}},"4":{"name":"(anonymous_4)","line":48,"loc":{"start":{"line":48,"column":44},"end":{"line":48,"column":68}}},"5":{"name":"(anonymous_5)","line":50,"loc":{"start":{"line":50,"column":21},"end":{"line":50,"column":47}}},"6":{"name":"(anonymous_6)","line":52,"loc":{"start":{"line":52,"column":19},"end":{"line":52,"column":44}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":35}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":29,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":47}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":23}},"6":{"start":{"line":37,"column":0},"end":{"line":39,"column":2}},"7":{"start":{"line":38,"column":4},"end":{"line":38,"column":32}},"8":{"start":{"line":46,"column":0},"end":{"line":63,"column":2}},"9":{"start":{"line":47,"column":4},"end":{"line":47,"column":33}},"10":{"start":{"line":48,"column":4},"end":{"line":62,"column":7}},"11":{"start":{"line":49,"column":8},"end":{"line":49,"column":32}},"12":{"start":{"line":50,"column":8},"end":{"line":61,"column":11}},"13":{"start":{"line":51,"column":12},"end":{"line":51,"column":40}},"14":{"start":{"line":53,"column":12},"end":{"line":60,"column":13}},"15":{"start":{"line":55,"column":16},"end":{"line":57,"column":17}},"16":{"start":{"line":56,"column":20},"end":{"line":56,"column":84}},"17":{"start":{"line":59,"column":16},"end":{"line":59,"column":129}},"18":{"start":{"line":65,"column":0},"end":{"line":65,"column":23}}},"branchMap":{"1":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":18},"end":{"line":49,"column":25}},{"start":{"line":49,"column":29},"end":{"line":49,"column":31}}]},"2":{"line":51,"type":"binary-expr","locations":[{"start":{"line":51,"column":19},"end":{"line":51,"column":33}},{"start":{"line":51,"column":37},"end":{"line":51,"column":39}}]},"3":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":12},"end":{"line":53,"column":12}},{"start":{"line":53,"column":12},"end":{"line":53,"column":12}}]},"4":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":16},"end":{"line":55,"column":16}},{"start":{"line":55,"column":16},"end":{"line":55,"column":16}}]},"5":{"line":59,"type":"cond-expr","locations":[{"start":{"line":59,"column":73},"end":{"line":59,"column":110}},{"start":{"line":59,"column":113},"end":{"line":59,"column":126}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js","s":{"1":2,"2":2,"3":2,"4":0,"5":2,"6":0,"7":2,"8":2,"9":3,"10":2,"11":3,"12":3,"13":3,"14":3,"15":2,"16":2,"17":2,"18":2,"19":0,"20":2,"21":2,"22":2,"23":0,"24":2,"25":2,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":0,"34":1,"35":1,"36":1,"37":0,"38":2,"39":1,"40":1,"41":1,"42":0,"43":2},"b":{"1":[0,2],"2":[2,0],"3":[0,2],"4":[2,0],"5":[3,3],"6":[1,0]},"f":{"1":3,"2":3,"3":2,"4":1,"5":1,"6":1},"fnMap":{"1":{"name":"(anonymous_1)","line":48,"loc":{"start":{"line":48,"column":19},"end":{"line":48,"column":35}}},"2":{"name":"(anonymous_2)","line":59,"loc":{"start":{"line":59,"column":40},"end":{"line":59,"column":57}}},"3":{"name":"(anonymous_3)","line":73,"loc":{"start":{"line":73,"column":30},"end":{"line":73,"column":49}}},"4":{"name":"(anonymous_4)","line":100,"loc":{"start":{"line":100,"column":35},"end":{"line":100,"column":64}}},"5":{"name":"(anonymous_5)","line":103,"loc":{"start":{"line":103,"column":33},"end":{"line":103,"column":44}}},"6":{"name":"(anonymous_6)","line":131,"loc":{"start":{"line":131,"column":37},"end":{"line":131,"column":48}}}},"statementMap":{"1":{"start":{"line":27,"column":0},"end":{"line":27,"column":33}},"2":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"3":{"start":{"line":33,"column":0},"end":{"line":43,"column":1}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":66}},"5":{"start":{"line":37,"column":7},"end":{"line":43,"column":1}},"6":{"start":{"line":38,"column":4},"end":{"line":38,"column":43}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":62}},"8":{"start":{"line":48,"column":0},"end":{"line":50,"column":2}},"9":{"start":{"line":49,"column":4},"end":{"line":49,"column":48}},"10":{"start":{"line":59,"column":0},"end":{"line":64,"column":2}},"11":{"start":{"line":60,"column":4},"end":{"line":60,"column":39}},"12":{"start":{"line":61,"column":4},"end":{"line":61,"column":43}},"13":{"start":{"line":62,"column":4},"end":{"line":62,"column":64}},"14":{"start":{"line":63,"column":4},"end":{"line":63,"column":19}},"15":{"start":{"line":73,"column":0},"end":{"line":91,"column":2}},"16":{"start":{"line":74,"column":4},"end":{"line":74,"column":45}},"17":{"start":{"line":76,"column":4},"end":{"line":80,"column":5}},"18":{"start":{"line":77,"column":8},"end":{"line":77,"column":46}},"19":{"start":{"line":79,"column":8},"end":{"line":79,"column":50}},"20":{"start":{"line":82,"column":4},"end":{"line":82,"column":38}},"21":{"start":{"line":84,"column":4},"end":{"line":88,"column":5}},"22":{"start":{"line":85,"column":8},"end":{"line":85,"column":36}},"23":{"start":{"line":87,"column":8},"end":{"line":87,"column":59}},"24":{"start":{"line":90,"column":4},"end":{"line":90,"column":18}},"25":{"start":{"line":100,"column":0},"end":{"line":123,"column":2}},"26":{"start":{"line":101,"column":4},"end":{"line":101,"column":44}},"27":{"start":{"line":103,"column":4},"end":{"line":116,"column":6}},"28":{"start":{"line":104,"column":8},"end":{"line":115,"column":9}},"29":{"start":{"line":105,"column":12},"end":{"line":105,"column":46}},"30":{"start":{"line":106,"column":12},"end":{"line":106,"column":29}},"31":{"start":{"line":108,"column":12},"end":{"line":112,"column":13}},"32":{"start":{"line":109,"column":16},"end":{"line":109,"column":44}},"33":{"start":{"line":111,"column":16},"end":{"line":111,"column":69}},"34":{"start":{"line":114,"column":12},"end":{"line":114,"column":36}},"35":{"start":{"line":118,"column":4},"end":{"line":122,"column":5}},"36":{"start":{"line":119,"column":8},"end":{"line":119,"column":46}},"37":{"start":{"line":121,"column":8},"end":{"line":121,"column":54}},"38":{"start":{"line":131,"column":0},"end":{"line":143,"column":2}},"39":{"start":{"line":132,"column":4},"end":{"line":142,"column":5}},"40":{"start":{"line":133,"column":8},"end":{"line":138,"column":11}},"41":{"start":{"line":139,"column":8},"end":{"line":139,"column":20}},"42":{"start":{"line":141,"column":8},"end":{"line":141,"column":21}},"43":{"start":{"line":145,"column":0},"end":{"line":145,"column":30}}},"branchMap":{"1":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},{"start":{"line":33,"column":0},"end":{"line":33,"column":0}}]},"2":{"line":33,"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":33}},{"start":{"line":33,"column":37},"end":{"line":33,"column":52}}]},"3":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":7},"end":{"line":37,"column":7}},{"start":{"line":37,"column":7},"end":{"line":37,"column":7}}]},"4":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":11},"end":{"line":37,"column":40}},{"start":{"line":37,"column":44},"end":{"line":37,"column":65}}]},"5":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":16},"end":{"line":49,"column":20}},{"start":{"line":49,"column":24},"end":{"line":49,"column":47}}]},"6":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":8}},{"start":{"line":104,"column":8},"end":{"line":104,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js","s":{"1":2,"2":2,"3":2,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5,"10":5,"11":2,"12":2,"13":2,"14":0,"15":0,"16":0,"17":2,"18":2,"19":0,"20":0,"21":0,"22":2,"23":1,"24":1,"25":2,"26":5,"27":5,"28":0,"29":5,"30":0,"31":5,"32":0,"33":2,"34":2,"35":2,"36":2,"37":2,"38":0,"39":2,"40":2,"41":2,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":1,"55":1,"56":1,"57":1,"58":2,"59":0,"60":0,"61":0,"62":0,"63":2,"64":3,"65":3,"66":2,"67":3,"68":2,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":0,"77":1,"78":0,"79":2,"80":1,"81":1,"82":1,"83":1,"84":2,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":2,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":2,"102":0,"103":0,"104":0,"105":0,"106":0,"107":2,"108":0,"109":0,"110":0,"111":0,"112":0,"113":2},"b":{"1":[0,2],"2":[0,0],"3":[0,2],"4":[2,0],"5":[0,0],"6":[1,1],"7":[0,2],"8":[2,0],"9":[1,0],"10":[1,0],"11":[0,0],"12":[2,1],"13":[1,0],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0]},"f":{"1":5,"2":2,"3":2,"4":0,"5":0,"6":5,"7":0,"8":0,"9":0,"10":2,"11":2,"12":0,"13":1,"14":0,"15":3,"16":1,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0},"fnMap":{"1":{"name":"(anonymous_1)","line":29,"loc":{"start":{"line":29,"column":18},"end":{"line":29,"column":39}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":31},"end":{"line":41,"column":46}}},"3":{"name":"(anonymous_3)","line":44,"loc":{"start":{"line":44,"column":54},"end":{"line":44,"column":70}}},"4":{"name":"(anonymous_4)","line":50,"loc":{"start":{"line":50,"column":31},"end":{"line":50,"column":45}}},"5":{"name":"(anonymous_5)","line":60,"loc":{"start":{"line":60,"column":52},"end":{"line":60,"column":70}}},"6":{"name":"(anonymous_6)","line":79,"loc":{"start":{"line":79,"column":41},"end":{"line":79,"column":51}}},"7":{"name":"(anonymous_7)","line":82,"loc":{"start":{"line":82,"column":32},"end":{"line":82,"column":43}}},"8":{"name":"(anonymous_8)","line":86,"loc":{"start":{"line":86,"column":30},"end":{"line":86,"column":40}}},"9":{"name":"(anonymous_9)","line":90,"loc":{"start":{"line":90,"column":34},"end":{"line":90,"column":44}}},"10":{"name":"(anonymous_10)","line":101,"loc":{"start":{"line":101,"column":39},"end":{"line":101,"column":54}}},"11":{"name":"(anonymous_11)","line":113,"loc":{"start":{"line":113,"column":26},"end":{"line":113,"column":40}}},"12":{"name":"(anonymous_12)","line":130,"loc":{"start":{"line":130,"column":48},"end":{"line":130,"column":58}}},"13":{"name":"(anonymous_13)","line":156,"loc":{"start":{"line":156,"column":45},"end":{"line":156,"column":73}}},"14":{"name":"(anonymous_14)","line":169,"loc":{"start":{"line":169,"column":33},"end":{"line":169,"column":44}}},"15":{"name":"(anonymous_15)","line":184,"loc":{"start":{"line":184,"column":36},"end":{"line":184,"column":47}}},"16":{"name":"(anonymous_16)","line":194,"loc":{"start":{"line":194,"column":29},"end":{"line":194,"column":48}}},"17":{"name":"(anonymous_17)","line":218,"loc":{"start":{"line":218,"column":34},"end":{"line":218,"column":63}}},"18":{"name":"(anonymous_18)","line":235,"loc":{"start":{"line":235,"column":27},"end":{"line":235,"column":53}}},"19":{"name":"(anonymous_19)","line":258,"loc":{"start":{"line":258,"column":39},"end":{"line":258,"column":65}}},"20":{"name":"(anonymous_20)","line":263,"loc":{"start":{"line":263,"column":47},"end":{"line":263,"column":66}}},"21":{"name":"(anonymous_21)","line":281,"loc":{"start":{"line":281,"column":43},"end":{"line":281,"column":59}}},"22":{"name":"(anonymous_22)","line":298,"loc":{"start":{"line":298,"column":30},"end":{"line":298,"column":50}}}},"statementMap":{"1":{"start":{"line":25,"column":0},"end":{"line":25,"column":38}},"2":{"start":{"line":26,"column":0},"end":{"line":26,"column":33}},"3":{"start":{"line":29,"column":0},"end":{"line":72,"column":2}},"4":{"start":{"line":30,"column":4},"end":{"line":30,"column":21}},"5":{"start":{"line":31,"column":4},"end":{"line":31,"column":32}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":36}},"7":{"start":{"line":33,"column":4},"end":{"line":33,"column":21}},"8":{"start":{"line":35,"column":4},"end":{"line":35,"column":53}},"9":{"start":{"line":37,"column":4},"end":{"line":37,"column":28}},"10":{"start":{"line":41,"column":4},"end":{"line":71,"column":7}},"11":{"start":{"line":44,"column":8},"end":{"line":70,"column":11}},"12":{"start":{"line":46,"column":12},"end":{"line":46,"column":26}},"13":{"start":{"line":49,"column":12},"end":{"line":56,"column":13}},"14":{"start":{"line":50,"column":16},"end":{"line":53,"column":19}},"15":{"start":{"line":51,"column":20},"end":{"line":52,"column":37}},"16":{"start":{"line":52,"column":24},"end":{"line":52,"column":37}},"17":{"start":{"line":55,"column":16},"end":{"line":55,"column":31}},"18":{"start":{"line":59,"column":12},"end":{"line":69,"column":13}},"19":{"start":{"line":60,"column":16},"end":{"line":63,"column":19}},"20":{"start":{"line":61,"column":20},"end":{"line":62,"column":47}},"21":{"start":{"line":62,"column":24},"end":{"line":62,"column":47}},"22":{"start":{"line":66,"column":19},"end":{"line":69,"column":13}},"23":{"start":{"line":67,"column":16},"end":{"line":67,"column":58}},"24":{"start":{"line":68,"column":16},"end":{"line":68,"column":51}},"25":{"start":{"line":79,"column":0},"end":{"line":93,"column":2}},"26":{"start":{"line":80,"column":4},"end":{"line":80,"column":21}},"27":{"start":{"line":82,"column":4},"end":{"line":84,"column":7}},"28":{"start":{"line":83,"column":8},"end":{"line":83,"column":25}},"29":{"start":{"line":86,"column":4},"end":{"line":88,"column":7}},"30":{"start":{"line":87,"column":8},"end":{"line":87,"column":25}},"31":{"start":{"line":90,"column":4},"end":{"line":92,"column":7}},"32":{"start":{"line":91,"column":8},"end":{"line":91,"column":25}},"33":{"start":{"line":101,"column":0},"end":{"line":147,"column":2}},"34":{"start":{"line":102,"column":4},"end":{"line":103,"column":26}},"35":{"start":{"line":106,"column":4},"end":{"line":111,"column":23}},"36":{"start":{"line":113,"column":4},"end":{"line":144,"column":7}},"37":{"start":{"line":116,"column":8},"end":{"line":117,"column":42}},"38":{"start":{"line":117,"column":12},"end":{"line":117,"column":42}},"39":{"start":{"line":119,"column":8},"end":{"line":119,"column":26}},"40":{"start":{"line":121,"column":8},"end":{"line":136,"column":9}},"41":{"start":{"line":122,"column":12},"end":{"line":122,"column":38}},"42":{"start":{"line":126,"column":12},"end":{"line":126,"column":35}},"43":{"start":{"line":129,"column":12},"end":{"line":129,"column":49}},"44":{"start":{"line":130,"column":12},"end":{"line":133,"column":26}},"45":{"start":{"line":131,"column":16},"end":{"line":131,"column":32}},"46":{"start":{"line":132,"column":16},"end":{"line":132,"column":51}},"47":{"start":{"line":135,"column":12},"end":{"line":135,"column":19}},"48":{"start":{"line":139,"column":8},"end":{"line":139,"column":45}},"49":{"start":{"line":140,"column":8},"end":{"line":140,"column":31}},"50":{"start":{"line":142,"column":8},"end":{"line":143,"column":38}},"51":{"start":{"line":143,"column":12},"end":{"line":143,"column":38}},"52":{"start":{"line":146,"column":4},"end":{"line":146,"column":24}},"53":{"start":{"line":156,"column":0},"end":{"line":162,"column":2}},"54":{"start":{"line":157,"column":4},"end":{"line":157,"column":41}},"55":{"start":{"line":158,"column":4},"end":{"line":158,"column":53}},"56":{"start":{"line":160,"column":4},"end":{"line":160,"column":42}},"57":{"start":{"line":161,"column":4},"end":{"line":161,"column":47}},"58":{"start":{"line":169,"column":0},"end":{"line":176,"column":2}},"59":{"start":{"line":170,"column":4},"end":{"line":175,"column":5}},"60":{"start":{"line":171,"column":8},"end":{"line":174,"column":9}},"61":{"start":{"line":172,"column":12},"end":{"line":172,"column":76}},"62":{"start":{"line":173,"column":12},"end":{"line":173,"column":47}},"63":{"start":{"line":184,"column":0},"end":{"line":192,"column":2}},"64":{"start":{"line":185,"column":4},"end":{"line":185,"column":21}},"65":{"start":{"line":188,"column":4},"end":{"line":189,"column":53}},"66":{"start":{"line":189,"column":8},"end":{"line":189,"column":53}},"67":{"start":{"line":191,"column":4},"end":{"line":191,"column":38}},"68":{"start":{"line":194,"column":0},"end":{"line":216,"column":2}},"69":{"start":{"line":196,"column":4},"end":{"line":215,"column":5}},"70":{"start":{"line":197,"column":8},"end":{"line":197,"column":19}},"71":{"start":{"line":200,"column":8},"end":{"line":201,"column":55}},"72":{"start":{"line":201,"column":12},"end":{"line":201,"column":55}},"73":{"start":{"line":203,"column":8},"end":{"line":203,"column":70}},"74":{"start":{"line":205,"column":8},"end":{"line":209,"column":9}},"75":{"start":{"line":206,"column":12},"end":{"line":206,"column":38}},"76":{"start":{"line":208,"column":12},"end":{"line":208,"column":47}},"77":{"start":{"line":211,"column":8},"end":{"line":211,"column":22}},"78":{"start":{"line":214,"column":8},"end":{"line":214,"column":143}},"79":{"start":{"line":218,"column":0},"end":{"line":226,"column":2}},"80":{"start":{"line":220,"column":4},"end":{"line":221,"column":51}},"81":{"start":{"line":221,"column":8},"end":{"line":221,"column":51}},"82":{"start":{"line":224,"column":4},"end":{"line":224,"column":51}},"83":{"start":{"line":225,"column":4},"end":{"line":225,"column":49}},"84":{"start":{"line":235,"column":0},"end":{"line":249,"column":2}},"85":{"start":{"line":237,"column":4},"end":{"line":238,"column":77}},"86":{"start":{"line":238,"column":8},"end":{"line":238,"column":77}},"87":{"start":{"line":240,"column":4},"end":{"line":248,"column":5}},"88":{"start":{"line":242,"column":12},"end":{"line":242,"column":54}},"89":{"start":{"line":243,"column":12},"end":{"line":243,"column":18}},"90":{"start":{"line":246,"column":12},"end":{"line":246,"column":47}},"91":{"start":{"line":247,"column":12},"end":{"line":247,"column":18}},"92":{"start":{"line":258,"column":0},"end":{"line":273,"column":2}},"93":{"start":{"line":259,"column":4},"end":{"line":259,"column":21}},"94":{"start":{"line":261,"column":4},"end":{"line":272,"column":5}},"95":{"start":{"line":263,"column":12},"end":{"line":266,"column":15}},"96":{"start":{"line":264,"column":16},"end":{"line":265,"column":65}},"97":{"start":{"line":265,"column":20},"end":{"line":265,"column":65}},"98":{"start":{"line":267,"column":12},"end":{"line":267,"column":18}},"99":{"start":{"line":270,"column":12},"end":{"line":270,"column":59}},"100":{"start":{"line":271,"column":12},"end":{"line":271,"column":18}},"101":{"start":{"line":281,"column":0},"end":{"line":291,"column":2}},"102":{"start":{"line":282,"column":4},"end":{"line":290,"column":5}},"103":{"start":{"line":284,"column":12},"end":{"line":284,"column":44}},"104":{"start":{"line":285,"column":12},"end":{"line":285,"column":18}},"105":{"start":{"line":288,"column":12},"end":{"line":288,"column":53}},"106":{"start":{"line":289,"column":12},"end":{"line":289,"column":18}},"107":{"start":{"line":298,"column":0},"end":{"line":306,"column":2}},"108":{"start":{"line":299,"column":4},"end":{"line":299,"column":20}},"109":{"start":{"line":300,"column":4},"end":{"line":300,"column":36}},"110":{"start":{"line":302,"column":4},"end":{"line":302,"column":48}},"111":{"start":{"line":303,"column":4},"end":{"line":303,"column":46}},"112":{"start":{"line":305,"column":4},"end":{"line":305,"column":28}},"113":{"start":{"line":308,"column":0},"end":{"line":308,"column":29}}},"branchMap":{"1":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":12},"end":{"line":49,"column":12}},{"start":{"line":49,"column":12},"end":{"line":49,"column":12}}]},"2":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":20},"end":{"line":51,"column":20}},{"start":{"line":51,"column":20},"end":{"line":51,"column":20}}]},"3":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":12},"end":{"line":59,"column":12}},{"start":{"line":59,"column":12},"end":{"line":59,"column":12}}]},"4":{"line":59,"type":"binary-expr","locations":[{"start":{"line":59,"column":15},"end":{"line":59,"column":18}},{"start":{"line":59,"column":22},"end":{"line":59,"column":58}}]},"5":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":20},"end":{"line":61,"column":20}},{"start":{"line":61,"column":20},"end":{"line":61,"column":20}}]},"6":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":19},"end":{"line":66,"column":19}},{"start":{"line":66,"column":19},"end":{"line":66,"column":19}}]},"7":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":8}},{"start":{"line":116,"column":8},"end":{"line":116,"column":8}}]},"8":{"line":142,"type":"if","locations":[{"start":{"line":142,"column":8},"end":{"line":142,"column":8}},{"start":{"line":142,"column":8},"end":{"line":142,"column":8}}]},"9":{"line":157,"type":"binary-expr","locations":[{"start":{"line":157,"column":13},"end":{"line":157,"column":23}},{"start":{"line":157,"column":27},"end":{"line":157,"column":40}}]},"10":{"line":158,"type":"binary-expr","locations":[{"start":{"line":158,"column":17},"end":{"line":158,"column":31}},{"start":{"line":158,"column":35},"end":{"line":158,"column":52}}]},"11":{"line":171,"type":"if","locations":[{"start":{"line":171,"column":8},"end":{"line":171,"column":8}},{"start":{"line":171,"column":8},"end":{"line":171,"column":8}}]},"12":{"line":188,"type":"if","locations":[{"start":{"line":188,"column":4},"end":{"line":188,"column":4}},{"start":{"line":188,"column":4},"end":{"line":188,"column":4}}]},"13":{"line":196,"type":"if","locations":[{"start":{"line":196,"column":4},"end":{"line":196,"column":4}},{"start":{"line":196,"column":4},"end":{"line":196,"column":4}}]},"14":{"line":200,"type":"if","locations":[{"start":{"line":200,"column":8},"end":{"line":200,"column":8}},{"start":{"line":200,"column":8},"end":{"line":200,"column":8}}]},"15":{"line":220,"type":"if","locations":[{"start":{"line":220,"column":4},"end":{"line":220,"column":4}},{"start":{"line":220,"column":4},"end":{"line":220,"column":4}}]},"16":{"line":237,"type":"if","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":4}},{"start":{"line":237,"column":4},"end":{"line":237,"column":4}}]},"17":{"line":240,"type":"switch","locations":[{"start":{"line":241,"column":8},"end":{"line":243,"column":18}},{"start":{"line":245,"column":8},"end":{"line":247,"column":18}}]},"18":{"line":261,"type":"switch","locations":[{"start":{"line":262,"column":8},"end":{"line":267,"column":18}},{"start":{"line":269,"column":8},"end":{"line":271,"column":18}}]},"19":{"line":264,"type":"if","locations":[{"start":{"line":264,"column":16},"end":{"line":264,"column":16}},{"start":{"line":264,"column":16},"end":{"line":264,"column":16}}]},"20":{"line":282,"type":"switch","locations":[{"start":{"line":283,"column":8},"end":{"line":285,"column":18}},{"start":{"line":287,"column":8},"end":{"line":289,"column":18}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":1,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":1,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":1,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":1,"113":1,"114":1,"115":1,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":1,"125":1,"126":0,"127":0,"128":1,"129":1,"130":1,"131":0,"132":0,"133":0,"134":0,"135":0},"b":{"1":[1,1],"2":[1,1,1,1],"3":[1,1],"4":[0,1],"5":[1,1],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,1],"29":[1,0,0],"30":[1,0],"31":[1,1],"32":[1,0],"33":[0,0]},"f":{"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"fnMap":{"1":{"name":"(anonymous_1)","line":2,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":17}}},"2":{"name":"ucs2decode","line":23,"loc":{"start":{"line":23,"column":1},"end":{"line":23,"column":29}}},"3":{"name":"ucs2encode","line":50,"loc":{"start":{"line":50,"column":1},"end":{"line":50,"column":28}}},"4":{"name":"checkScalarValue","line":67,"loc":{"start":{"line":67,"column":1},"end":{"line":67,"column":38}}},"5":{"name":"createByte","line":77,"loc":{"start":{"line":77,"column":1},"end":{"line":77,"column":39}}},"6":{"name":"encodeCodePoint","line":81,"loc":{"start":{"line":81,"column":1},"end":{"line":81,"column":37}}},"7":{"name":"utf8encode","line":103,"loc":{"start":{"line":103,"column":1},"end":{"line":103,"column":29}}},"8":{"name":"readContinuationByte","line":118,"loc":{"start":{"line":118,"column":1},"end":{"line":118,"column":33}}},"9":{"name":"decodeSymbol","line":134,"loc":{"start":{"line":134,"column":1},"end":{"line":134,"column":25}}},"10":{"name":"utf8decode","line":200,"loc":{"start":{"line":200,"column":1},"end":{"line":200,"column":33}}},"11":{"name":"(anonymous_11)","line":227,"loc":{"start":{"line":227,"column":9},"end":{"line":227,"column":20}}}},"statementMap":{"1":{"start":{"line":2,"column":1},"end":{"line":244,"column":9}},"2":{"start":{"line":5,"column":1},"end":{"line":5,"column":57}},"3":{"start":{"line":8,"column":1},"end":{"line":9,"column":42}},"4":{"start":{"line":13,"column":1},"end":{"line":13,"column":54}},"5":{"start":{"line":14,"column":1},"end":{"line":16,"column":2}},"6":{"start":{"line":15,"column":2},"end":{"line":15,"column":20}},"7":{"start":{"line":20,"column":1},"end":{"line":20,"column":46}},"8":{"start":{"line":23,"column":1},"end":{"line":47,"column":2}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":18}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":18}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":29}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":12}},"13":{"start":{"line":28,"column":2},"end":{"line":28,"column":12}},"14":{"start":{"line":29,"column":2},"end":{"line":45,"column":3}},"15":{"start":{"line":30,"column":3},"end":{"line":30,"column":40}},"16":{"start":{"line":31,"column":3},"end":{"line":44,"column":4}},"17":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"18":{"start":{"line":34,"column":4},"end":{"line":41,"column":5}},"19":{"start":{"line":35,"column":5},"end":{"line":35,"column":70}},"20":{"start":{"line":39,"column":5},"end":{"line":39,"column":24}},"21":{"start":{"line":40,"column":5},"end":{"line":40,"column":15}},"22":{"start":{"line":43,"column":4},"end":{"line":43,"column":23}},"23":{"start":{"line":46,"column":2},"end":{"line":46,"column":16}},"24":{"start":{"line":50,"column":1},"end":{"line":65,"column":2}},"25":{"start":{"line":51,"column":2},"end":{"line":51,"column":28}},"26":{"start":{"line":52,"column":2},"end":{"line":52,"column":17}},"27":{"start":{"line":53,"column":2},"end":{"line":53,"column":12}},"28":{"start":{"line":54,"column":2},"end":{"line":54,"column":18}},"29":{"start":{"line":55,"column":2},"end":{"line":63,"column":3}},"30":{"start":{"line":56,"column":3},"end":{"line":56,"column":24}},"31":{"start":{"line":57,"column":3},"end":{"line":61,"column":4}},"32":{"start":{"line":58,"column":4},"end":{"line":58,"column":21}},"33":{"start":{"line":59,"column":4},"end":{"line":59,"column":64}},"34":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"35":{"start":{"line":62,"column":3},"end":{"line":62,"column":39}},"36":{"start":{"line":64,"column":2},"end":{"line":64,"column":16}},"37":{"start":{"line":67,"column":1},"end":{"line":74,"column":2}},"38":{"start":{"line":68,"column":2},"end":{"line":73,"column":3}},"39":{"start":{"line":69,"column":3},"end":{"line":72,"column":5}},"40":{"start":{"line":77,"column":1},"end":{"line":79,"column":2}},"41":{"start":{"line":78,"column":2},"end":{"line":78,"column":66}},"42":{"start":{"line":81,"column":1},"end":{"line":101,"column":2}},"43":{"start":{"line":82,"column":2},"end":{"line":84,"column":3}},"44":{"start":{"line":83,"column":3},"end":{"line":83,"column":40}},"45":{"start":{"line":85,"column":2},"end":{"line":85,"column":18}},"46":{"start":{"line":86,"column":2},"end":{"line":98,"column":3}},"47":{"start":{"line":87,"column":3},"end":{"line":87,"column":65}},"48":{"start":{"line":89,"column":7},"end":{"line":98,"column":3}},"49":{"start":{"line":90,"column":3},"end":{"line":90,"column":31}},"50":{"start":{"line":91,"column":3},"end":{"line":91,"column":66}},"51":{"start":{"line":92,"column":3},"end":{"line":92,"column":38}},"52":{"start":{"line":94,"column":7},"end":{"line":98,"column":3}},"53":{"start":{"line":95,"column":3},"end":{"line":95,"column":66}},"54":{"start":{"line":96,"column":3},"end":{"line":96,"column":39}},"55":{"start":{"line":97,"column":3},"end":{"line":97,"column":38}},"56":{"start":{"line":99,"column":2},"end":{"line":99,"column":58}},"57":{"start":{"line":100,"column":2},"end":{"line":100,"column":16}},"58":{"start":{"line":103,"column":1},"end":{"line":114,"column":2}},"59":{"start":{"line":104,"column":2},"end":{"line":104,"column":38}},"60":{"start":{"line":105,"column":2},"end":{"line":105,"column":33}},"61":{"start":{"line":106,"column":2},"end":{"line":106,"column":17}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":16}},"63":{"start":{"line":108,"column":2},"end":{"line":108,"column":22}},"64":{"start":{"line":109,"column":2},"end":{"line":112,"column":3}},"65":{"start":{"line":110,"column":3},"end":{"line":110,"column":33}},"66":{"start":{"line":111,"column":3},"end":{"line":111,"column":44}},"67":{"start":{"line":113,"column":2},"end":{"line":113,"column":20}},"68":{"start":{"line":118,"column":1},"end":{"line":132,"column":2}},"69":{"start":{"line":119,"column":2},"end":{"line":121,"column":3}},"70":{"start":{"line":120,"column":3},"end":{"line":120,"column":37}},"71":{"start":{"line":123,"column":2},"end":{"line":123,"column":53}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":14}},"73":{"start":{"line":126,"column":2},"end":{"line":128,"column":3}},"74":{"start":{"line":127,"column":3},"end":{"line":127,"column":34}},"75":{"start":{"line":131,"column":2},"end":{"line":131,"column":43}},"76":{"start":{"line":134,"column":1},"end":{"line":195,"column":2}},"77":{"start":{"line":135,"column":2},"end":{"line":135,"column":12}},"78":{"start":{"line":136,"column":2},"end":{"line":136,"column":12}},"79":{"start":{"line":137,"column":2},"end":{"line":137,"column":12}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":12}},"81":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}},"82":{"start":{"line":141,"column":2},"end":{"line":143,"column":3}},"83":{"start":{"line":142,"column":3},"end":{"line":142,"column":37}},"84":{"start":{"line":145,"column":2},"end":{"line":147,"column":3}},"85":{"start":{"line":146,"column":3},"end":{"line":146,"column":16}},"86":{"start":{"line":150,"column":2},"end":{"line":150,"column":38}},"87":{"start":{"line":151,"column":2},"end":{"line":151,"column":14}},"88":{"start":{"line":154,"column":2},"end":{"line":156,"column":3}},"89":{"start":{"line":155,"column":3},"end":{"line":155,"column":16}},"90":{"start":{"line":159,"column":2},"end":{"line":167,"column":3}},"91":{"start":{"line":160,"column":3},"end":{"line":160,"column":38}},"92":{"start":{"line":161,"column":3},"end":{"line":161,"column":45}},"93":{"start":{"line":162,"column":3},"end":{"line":166,"column":4}},"94":{"start":{"line":163,"column":4},"end":{"line":163,"column":21}},"95":{"start":{"line":165,"column":4},"end":{"line":165,"column":45}},"96":{"start":{"line":170,"column":2},"end":{"line":180,"column":3}},"97":{"start":{"line":171,"column":3},"end":{"line":171,"column":34}},"98":{"start":{"line":172,"column":3},"end":{"line":172,"column":34}},"99":{"start":{"line":173,"column":3},"end":{"line":173,"column":61}},"100":{"start":{"line":174,"column":3},"end":{"line":179,"column":4}},"101":{"start":{"line":175,"column":4},"end":{"line":175,"column":32}},"102":{"start":{"line":176,"column":4},"end":{"line":176,"column":21}},"103":{"start":{"line":178,"column":4},"end":{"line":178,"column":45}},"104":{"start":{"line":183,"column":2},"end":{"line":192,"column":3}},"105":{"start":{"line":184,"column":3},"end":{"line":184,"column":34}},"106":{"start":{"line":185,"column":3},"end":{"line":185,"column":34}},"107":{"start":{"line":186,"column":3},"end":{"line":186,"column":34}},"108":{"start":{"line":187,"column":3},"end":{"line":188,"column":28}},"109":{"start":{"line":189,"column":3},"end":{"line":191,"column":4}},"110":{"start":{"line":190,"column":4},"end":{"line":190,"column":21}},"111":{"start":{"line":194,"column":2},"end":{"line":194,"column":40}},"112":{"start":{"line":197,"column":1},"end":{"line":197,"column":15}},"113":{"start":{"line":198,"column":1},"end":{"line":198,"column":15}},"114":{"start":{"line":199,"column":1},"end":{"line":199,"column":15}},"115":{"start":{"line":200,"column":1},"end":{"line":210,"column":2}},"116":{"start":{"line":201,"column":2},"end":{"line":201,"column":37}},"117":{"start":{"line":202,"column":2},"end":{"line":202,"column":31}},"118":{"start":{"line":203,"column":2},"end":{"line":203,"column":16}},"119":{"start":{"line":204,"column":2},"end":{"line":204,"column":22}},"120":{"start":{"line":205,"column":2},"end":{"line":205,"column":10}},"121":{"start":{"line":206,"column":2},"end":{"line":208,"column":3}},"122":{"start":{"line":207,"column":3},"end":{"line":207,"column":24}},"123":{"start":{"line":209,"column":2},"end":{"line":209,"column":32}},"124":{"start":{"line":214,"column":1},"end":{"line":218,"column":3}},"125":{"start":{"line":222,"column":1},"end":{"line":242,"column":2}},"126":{"start":{"line":227,"column":2},"end":{"line":229,"column":5}},"127":{"start":{"line":228,"column":3},"end":{"line":228,"column":15}},"128":{"start":{"line":230,"column":8},"end":{"line":242,"column":2}},"129":{"start":{"line":231,"column":2},"end":{"line":239,"column":3}},"130":{"start":{"line":232,"column":3},"end":{"line":232,"column":29}},"131":{"start":{"line":234,"column":3},"end":{"line":234,"column":19}},"132":{"start":{"line":235,"column":3},"end":{"line":235,"column":46}},"133":{"start":{"line":236,"column":3},"end":{"line":238,"column":4}},"134":{"start":{"line":237,"column":4},"end":{"line":237,"column":69}},"135":{"start":{"line":241,"column":2},"end":{"line":241,"column":19}}},"branchMap":{"1":{"line":5,"type":"binary-expr","locations":[{"start":{"line":5,"column":19},"end":{"line":5,"column":45}},{"start":{"line":5,"column":49},"end":{"line":5,"column":56}}]},"2":{"line":8,"type":"binary-expr","locations":[{"start":{"line":8,"column":18},"end":{"line":8,"column":43}},{"start":{"line":8,"column":47},"end":{"line":8,"column":53}},{"start":{"line":9,"column":2},"end":{"line":9,"column":31}},{"start":{"line":9,"column":35},"end":{"line":9,"column":41}}]},"3":{"line":13,"type":"binary-expr","locations":[{"start":{"line":13,"column":18},"end":{"line":13,"column":43}},{"start":{"line":13,"column":47},"end":{"line":13,"column":53}}]},"4":{"line":14,"type":"if","locations":[{"start":{"line":14,"column":1},"end":{"line":14,"column":1}},{"start":{"line":14,"column":1},"end":{"line":14,"column":1}}]},"5":{"line":14,"type":"binary-expr","locations":[{"start":{"line":14,"column":5},"end":{"line":14,"column":37}},{"start":{"line":14,"column":41},"end":{"line":14,"column":73}}]},"6":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":3},"end":{"line":31,"column":3}},{"start":{"line":31,"column":3},"end":{"line":31,"column":3}}]},"7":{"line":31,"type":"binary-expr","locations":[{"start":{"line":31,"column":7},"end":{"line":31,"column":22}},{"start":{"line":31,"column":26},"end":{"line":31,"column":41}},{"start":{"line":31,"column":45},"end":{"line":31,"column":61}}]},"8":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"9":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":3},"end":{"line":57,"column":3}},{"start":{"line":57,"column":3},"end":{"line":57,"column":3}}]},"10":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":2},"end":{"line":68,"column":2}},{"start":{"line":68,"column":2},"end":{"line":68,"column":2}}]},"11":{"line":68,"type":"binary-expr","locations":[{"start":{"line":68,"column":6},"end":{"line":68,"column":25}},{"start":{"line":68,"column":29},"end":{"line":68,"column":48}}]},"12":{"line":82,"type":"if","locations":[{"start":{"line":82,"column":2},"end":{"line":82,"column":2}},{"start":{"line":82,"column":2},"end":{"line":82,"column":2}}]},"13":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":2},"end":{"line":86,"column":2}},{"start":{"line":86,"column":2},"end":{"line":86,"column":2}}]},"14":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":7},"end":{"line":89,"column":7}},{"start":{"line":89,"column":7},"end":{"line":89,"column":7}}]},"15":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":7},"end":{"line":94,"column":7}},{"start":{"line":94,"column":7},"end":{"line":94,"column":7}}]},"16":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":2},"end":{"line":119,"column":2}},{"start":{"line":119,"column":2},"end":{"line":119,"column":2}}]},"17":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":2},"end":{"line":126,"column":2}},{"start":{"line":126,"column":2},"end":{"line":126,"column":2}}]},"18":{"line":141,"type":"if","locations":[{"start":{"line":141,"column":2},"end":{"line":141,"column":2}},{"start":{"line":141,"column":2},"end":{"line":141,"column":2}}]},"19":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":2},"end":{"line":145,"column":2}},{"start":{"line":145,"column":2},"end":{"line":145,"column":2}}]},"20":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":2},"end":{"line":154,"column":2}},{"start":{"line":154,"column":2},"end":{"line":154,"column":2}}]},"21":{"line":159,"type":"if","locations":[{"start":{"line":159,"column":2},"end":{"line":159,"column":2}},{"start":{"line":159,"column":2},"end":{"line":159,"column":2}}]},"22":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":3},"end":{"line":162,"column":3}},{"start":{"line":162,"column":3},"end":{"line":162,"column":3}}]},"23":{"line":170,"type":"if","locations":[{"start":{"line":170,"column":2},"end":{"line":170,"column":2}},{"start":{"line":170,"column":2},"end":{"line":170,"column":2}}]},"24":{"line":174,"type":"if","locations":[{"start":{"line":174,"column":3},"end":{"line":174,"column":3}},{"start":{"line":174,"column":3},"end":{"line":174,"column":3}}]},"25":{"line":183,"type":"if","locations":[{"start":{"line":183,"column":2},"end":{"line":183,"column":2}},{"start":{"line":183,"column":2},"end":{"line":183,"column":2}}]},"26":{"line":189,"type":"if","locations":[{"start":{"line":189,"column":3},"end":{"line":189,"column":3}},{"start":{"line":189,"column":3},"end":{"line":189,"column":3}}]},"27":{"line":189,"type":"binary-expr","locations":[{"start":{"line":189,"column":7},"end":{"line":189,"column":28}},{"start":{"line":189,"column":32},"end":{"line":189,"column":53}}]},"28":{"line":222,"type":"if","locations":[{"start":{"line":222,"column":1},"end":{"line":222,"column":1}},{"start":{"line":222,"column":1},"end":{"line":222,"column":1}}]},"29":{"line":223,"type":"binary-expr","locations":[{"start":{"line":223,"column":2},"end":{"line":223,"column":29}},{"start":{"line":224,"column":2},"end":{"line":224,"column":31}},{"start":{"line":225,"column":2},"end":{"line":225,"column":12}}]},"30":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":8},"end":{"line":230,"column":8}},{"start":{"line":230,"column":8},"end":{"line":230,"column":8}}]},"31":{"line":230,"type":"binary-expr","locations":[{"start":{"line":230,"column":12},"end":{"line":230,"column":23}},{"start":{"line":230,"column":27},"end":{"line":230,"column":48}}]},"32":{"line":231,"type":"if","locations":[{"start":{"line":231,"column":2},"end":{"line":231,"column":2}},{"start":{"line":231,"column":2},"end":{"line":231,"column":2}}]},"33":{"line":237,"type":"binary-expr","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":34}},{"start":{"line":237,"column":39},"end":{"line":237,"column":67}}]}}}} \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/base.css b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/base.css deleted file mode 100644 index a6a2f32..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/base.css +++ /dev/null @@ -1,182 +0,0 @@ -body, html { - margin:0; padding: 0; -} -body { - font-family: Helvetica Neue, Helvetica,Arial; - font-size: 10pt; -} -div.header, div.footer { - background: #eee; - padding: 1em; -} -div.header { - z-index: 100; - position: fixed; - top: 0; - border-bottom: 1px solid #666; - width: 100%; -} -div.footer { - border-top: 1px solid #666; -} -div.body { - margin-top: 10em; -} -div.meta { - font-size: 90%; - text-align: center; -} -h1, h2, h3 { - font-weight: normal; -} -h1 { - font-size: 12pt; -} -h2 { - font-size: 10pt; -} -pre { - font-family: Consolas, Menlo, Monaco, monospace; - margin: 0; - padding: 0; - line-height: 1.3; - font-size: 14px; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} - -div.path { font-size: 110%; } -div.path a:link, div.path a:visited { color: #000; } -table.coverage { border-collapse: collapse; margin:0; padding: 0 } - -table.coverage td { - margin: 0; - padding: 0; - color: #111; - vertical-align: top; -} -table.coverage td.line-count { - width: 50px; - text-align: right; - padding-right: 5px; -} -table.coverage td.line-coverage { - color: #777 !important; - text-align: right; - border-left: 1px solid #666; - border-right: 1px solid #666; -} - -table.coverage td.text { -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 40px; -} -table.coverage td span.cline-neutral { - background: #eee; -} -table.coverage td span.cline-yes { - background: #b5d592; - color: #999; -} -table.coverage td span.cline-no { - background: #fc8c84; -} - -.cstat-yes { color: #111; } -.cstat-no { background: #fc8c84; color: #111; } -.fstat-no { background: #ffc520; color: #111 !important; } -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -.missing-if-branch { - display: inline-block; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: black; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} - -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} - -.entity, .metric { font-weight: bold; } -.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; } -.metric small { font-size: 80%; font-weight: normal; color: #666; } - -div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; } -div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; } -div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; } -div.coverage-summary th.file { border-right: none !important; } -div.coverage-summary th.pic { border-left: none !important; text-align: right; } -div.coverage-summary th.pct { border-right: none !important; } -div.coverage-summary th.abs { border-left: none !important; text-align: right; } -div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; } -div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; } -div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; } -div.coverage-summary td.pic { min-width: 120px !important; } -div.coverage-summary a:link { text-decoration: none; color: #000; } -div.coverage-summary a:visited { text-decoration: none; color: #777; } -div.coverage-summary a:hover { text-decoration: underline; } -div.coverage-summary tfoot td { border-top: 1px solid #666; } - -div.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -div.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -div.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} - -.high { background: #b5d592 !important; } -.medium { background: #ffe87c !important; } -.low { background: #fc8c84 !important; } - -span.cover-fill, span.cover-empty { - display:inline-block; - border:1px solid #444; - background: white; - height: 12px; -} -span.cover-fill { - background: #ccc; - border-right: 1px solid #444; -} -span.cover-empty { - background: white; - border-left: none; -} -span.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/index.html deleted file mode 100644 index 54f0df7..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - Code coverage report for ethereum.js/ - - - - - - - - -
-

Code coverage report for ethereum.js/

-

- - Statements: 100% (6 / 6)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (6 / 6)      - - Ignored: none      -

-
All files » ethereum.js/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
index.js100%(6 / 6)100%(0 / 0)100%(0 / 0)100%(6 / 6)
-
-
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html deleted file mode 100644 index 4f9fed4..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - Code coverage report for ethereum.js/index.js - - - - - - - - -
-

Code coverage report for ethereum.js/index.js

-

- - Statements: 100% (6 / 6)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (6 / 6)      - - Ignored: none      -

-
All files » ethereum.js/ » index.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -81 -1 -1 -1 -1 -  -1 - 
var web3 = require('./lib/web3');
-web3.providers.HttpProvider = require('./lib/web3/httpprovider');
-web3.providers.QtSyncProvider = require('./lib/web3/qtsync');
-web3.eth.contract = require('./lib/web3/contract');
-web3.abi = require('./lib/solidity/abi');
- 
-module.exports = web3;
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html deleted file mode 100644 index 820fb88..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/ - - - - - - - - -
-

Code coverage report for ethereum.js/lib/

-

- - Statements: 95.08% (58 / 61)      - - - Branches: 50% (1 / 2)      - - - Functions: 90% (9 / 10)      - - - Lines: 95.08% (58 / 61)      - - Ignored: none      -

-
All files » ethereum.js/lib/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
web3.js95.08%(58 / 61)50%(1 / 2)90%(9 / 10)95.08%(58 / 61)
-
-
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html deleted file mode 100644 index cf3a9e6..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html +++ /dev/null @@ -1,792 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/abi.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/solidity/abi.js

-

- - Statements: 100% (93 / 93)      - - - Branches: 100% (28 / 28)      - - - Functions: 100% (17 / 17)      - - - Lines: 100% (93 / 93)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -1 -296 -  -  -  -  -  -  -  -  -  -  -1 -  -91 -10 -81 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -84 -84 -84 -  -  -84 -91 -  -  -84 -  -91 -91 -200 -  -91 -1 -  -  -90 -  -90 -5 -12 -  -85 -5 -  -80 -  -  -83 -  -83 -  -  -  -  -  -  -  -  -  -1 -58 -9 -49 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -  -53 -53 -53 -  -53 -58 -  -  -53 -53 -  -53 -  -58 -58 -163 -  -  -58 -1 -  -  -57 -57 -2 -2 -2 -2 -4 -4 -  -2 -  -55 -7 -7 -7 -  -48 -48 -  -  -  -52 -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -32 -32 -  -32 -80 -80 -  -  -32 -31 -  -  -32 -  -  -27 -  -  -  -  -  -  -  -  -  -1 -25 -25 -  -30 -30 -  -30 -47 -  -  -30 -29 -  -  -30 -  -  -25 -  -  -1 -  -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file abi.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- *   Gav Wood <g@ethdev.com>
- * @date 2014
- */
- 
-var utils = require('../utils/utils');
-var c = require('../utils/config');
-var types = require('./types');
-var f = require('./formatters');
- 
-/**
- * throw incorrect type error
- *
- * @method throwTypeError
- * @param {String} type
- * @throws incorrect type error
- */
-var throwTypeError = function (type) {
-    throw new Error('parser does not support type: ' + type);
-};
- 
-/** This method should be called if we want to check if givent type is an array type
- *
- * @method isArrayType
- * @param {String} type name
- * @returns {Boolean} true if it is, otherwise false
- */
-var isArrayType = function (type) {
-    return type.slice(-2) === '[]';
-};
- 
-/**
- * This method should be called to return dynamic type length in hex
- *
- * @method dynamicTypeBytes
- * @param {String} type
- * @param {String|Array} dynamic type
- * @return {String} length of dynamic type in hex or empty string if type is not dynamic
- */
-var dynamicTypeBytes = function (type, value) {
-    // TODO: decide what to do with array of strings
-    if (isArrayType(type) || type === 'bytes')
-        return f.formatInputInt(value.length);
-    return "";
-};
- 
-var inputTypes = types.inputTypes();
- 
-/**
- * Formats input params to bytes
- *
- * @method formatInput
- * @param {Array} abi inputs of method
- * @param {Array} params that will be formatted to bytes
- * @returns bytes representation of input params
- */
-var formatInput = function (inputs, params) {
-    var bytes = "";
-    var toAppendConstant = "";
-    var toAppendArrayContent = "";
- 
-    /// first we iterate in search for dynamic
-    inputs.forEach(function (input, index) {
-        bytes += dynamicTypeBytes(input.type, params[index]);
-    });
- 
-    inputs.forEach(function (input, i) {
-        /*jshint maxcomplexity:5 */
-        var typeMatch = false;
-        for (var j = 0; j < inputTypes.length && !typeMatch; j++) {
-            typeMatch = inputTypes[j].type(inputs[i].type, params[i]);
-        }
-        if (!typeMatch) {
-            throwTypeError(inputs[i].type);
-        }
- 
-        var formatter = inputTypes[j - 1].format;
- 
-        if (isArrayType(inputs[i].type))
-            toAppendArrayContent += params[i].reduce(function (acc, curr) {
-                return acc + formatter(curr);
-            }, "");
-        else if (inputs[i].type === 'bytes')
-            toAppendArrayContent += formatter(params[i]);
-        else
-            toAppendConstant += formatter(params[i]);
-    });
- 
-    bytes += toAppendConstant + toAppendArrayContent;
- 
-    return bytes;
-};
- 
-/**
- * This method should be called to predict the length of dynamic type
- *
- * @method dynamicBytesLength
- * @param {String} type
- * @returns {Number} length of dynamic type, 0 or multiplication of ETH_PADDING (32)
- */
-var dynamicBytesLength = function (type) {
-    if (isArrayType(type) || type === 'bytes')
-        return c.ETH_PADDING * 2;
-    return 0;
-};
- 
-var outputTypes = types.outputTypes();
- 
-/** 
- * Formats output bytes back to param list
- *
- * @method formatOutput
- * @param {Array} abi outputs of method
- * @param {String} bytes represention of output
- * @returns {Array} output params
- */
-var formatOutput = function (outs, output) {
- 
-    output = output.slice(2);
-    var result = [];
-    var padding = c.ETH_PADDING * 2;
- 
-    var dynamicPartLength = outs.reduce(function (acc, curr) {
-        return acc + dynamicBytesLength(curr.type);
-    }, 0);
- 
-    var dynamicPart = output.slice(0, dynamicPartLength);
-    output = output.slice(dynamicPartLength);
- 
-    outs.forEach(function (out, i) {
-        /*jshint maxcomplexity:6 */
-        var typeMatch = false;
-        for (var j = 0; j < outputTypes.length && !typeMatch; j++) {
-            typeMatch = outputTypes[j].type(outs[i].type);
-        }
- 
-        if (!typeMatch) {
-            throwTypeError(outs[i].type);
-        }
- 
-        var formatter = outputTypes[j - 1].format;
-        if (isArrayType(outs[i].type)) {
-            var size = f.formatOutputUInt(dynamicPart.slice(0, padding));
-            dynamicPart = dynamicPart.slice(padding);
-            var array = [];
-            for (var k = 0; k < size; k++) {
-                array.push(formatter(output.slice(0, padding)));
-                output = output.slice(padding);
-            }
-            result.push(array);
-        }
-        else if (types.prefixedType('bytes')(outs[i].type)) {
-            dynamicPart = dynamicPart.slice(padding);
-            result.push(formatter(output.slice(0, padding)));
-            output = output.slice(padding);
-        } else {
-            result.push(formatter(output.slice(0, padding)));
-            output = output.slice(padding);
-        }
-    });
- 
-    return result;
-};
- 
-/**
- * Should be called to create input parser for contract with given abi
- *
- * @method inputParser
- * @param {Array} contract abi
- * @returns {Object} input parser object for given json abi
- * TODO: refactor creating the parser, do not double logic from contract
- */
-var inputParser = function (json) {
-    var parser = {};
-    json.forEach(function (method) {
-        var displayName = utils.extractDisplayName(method.name);
-        var typeName = utils.extractTypeName(method.name);
- 
-        var impl = function () {
-            var params = Array.prototype.slice.call(arguments);
-            return formatInput(method.inputs, params);
-        };
- 
-        if (parser[displayName] === undefined) {
-            parser[displayName] = impl;
-        }
- 
-        parser[displayName][typeName] = impl;
-    });
- 
-    return parser;
-};
- 
-/**
- * Should be called to create output parser for contract with given abi
- *
- * @method outputParser
- * @param {Array} contract abi
- * @returns {Object} output parser for given json abi
- */
-var outputParser = function (json) {
-    var parser = {};
-    json.forEach(function (method) {
- 
-        var displayName = utils.extractDisplayName(method.name);
-        var typeName = utils.extractTypeName(method.name);
- 
-        var impl = function (output) {
-            return formatOutput(method.outputs, output);
-        };
- 
-        if (parser[displayName] === undefined) {
-            parser[displayName] = impl;
-        }
- 
-        parser[displayName][typeName] = impl;
-    });
- 
-    return parser;
-};
- 
-module.exports = {
-    inputParser: inputParser,
-    outputParser: outputParser,
-    formatInput: formatInput,
-    formatOutput: formatOutput
-};
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html deleted file mode 100644 index c4eed45..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html +++ /dev/null @@ -1,690 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/formatters.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/solidity/formatters.js

-

- - Statements: 97.37% (37 / 38)      - - - Branches: 91.67% (11 / 12)      - - - Functions: 92.86% (13 / 14)      - - - Lines: 97.37% (37 / 38)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -103 -  -  -  -  -  -  -  -  -  -  -  -1 -103 -103 -103 -  -  -  -  -  -  -  -  -  -1 -5 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -27 -  -  -  -  -  -  -  -  -  -1 -  -27 -  -  -  -27 -7 -  -20 -  -  -  -  -  -  -  -  -  -1 -20 -20 -  -  -  -  -  -  -  -  -  -1 -4 -  -  -  -  -  -  -  -  -  -1 -3 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -5 -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file formatters.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var BigNumber = require('bignumber.js');
-var utils = require('../utils/utils');
-var c = require('../utils/config');
- 
-/**
- * Should be called to pad string to expected length
- *
- * @method padLeft
- * @param {String} string to be padded
- * @param {Number} characters that result string should have
- * @param {String} sign, by default 0
- * @returns {String} right aligned string
- */
-var padLeft = function (string, chars, sign) {
-    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
-};
- 
-/**
- * Formats input value to byte representation of int
- * If value is negative, return it's two's complement
- * If the value is floating point, round it down
- *
- * @method formatInputInt
- * @param {String|Number|BigNumber} value that needs to be formatted
- * @returns {String} right-aligned byte representation of int
- */
-var formatInputInt = function (value) {
-    var padding = c.ETH_PADDING * 2;
-    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
-    return padLeft(utils.toTwosComplement(value).round().toString(16), padding);
-};
- 
-/**
- * Formats input value to byte representation of string
- *
- * @method formatInputString
- * @param {String}
- * @returns {String} left-algined byte representation of string
- */
-var formatInputString = function (value) {
-    return utils.fromAscii(value, c.ETH_PADDING).substr(2);
-};
- 
-/**
- * Formats input value to byte representation of bool
- *
- * @method formatInputBool
- * @param {Boolean}
- * @returns {String} right-aligned byte representation bool
- */
-var formatInputBool = function (value) {
-    return '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
-};
- 
-/**
- * Formats input value to byte representation of real
- * Values are multiplied by 2^m and encoded as integers
- *
- * @method formatInputReal
- * @param {String|Number|BigNumber}
- * @returns {String} byte representation of real
- */
-var formatInputReal = function (value) {
-    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); 
-};
- 
-/**
- * Check if input value is negative
- *
- * @method signedIsNegative
- * @param {String} value is hex format
- * @returns {Boolean} true if it is negative, otherwise false
- */
-var signedIsNegative = function (value) {
-    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
-};
- 
-/**
- * Formats right-aligned output bytes to int
- *
- * @method formatOutputInt
- * @param {String} bytes
- * @returns {BigNumber} right-aligned output bytes formatted to big number
- */
-var formatOutputInt = function (value) {
- 
-    value = value || "0";
- 
-    // check if it's negative number
-    // it it is, return two's complement
-    if (signedIsNegative(value)) {
-        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
-    }
-    return new BigNumber(value, 16);
-};
- 
-/**
- * Formats right-aligned output bytes to uint
- *
- * @method formatOutputUInt
- * @param {String} bytes
- * @returns {BigNumeber} right-aligned output bytes formatted to uint
- */
-var formatOutputUInt = function (value) {
-    value = value || "0";
-    return new BigNumber(value, 16);
-};
- 
-/**
- * Formats right-aligned output bytes to real
- *
- * @method formatOutputReal
- * @param {String}
- * @returns {BigNumber} input bytes formatted to real
- */
-var formatOutputReal = function (value) {
-    return formatOutputInt(value).dividedBy(new BigNumber(2).pow(128)); 
-};
- 
-/**
- * Formats right-aligned output bytes to ureal
- *
- * @method formatOutputUReal
- * @param {String}
- * @returns {BigNumber} input bytes formatted to ureal
- */
-var formatOutputUReal = function (value) {
-    return formatOutputUInt(value).dividedBy(new BigNumber(2).pow(128)); 
-};
- 
-/**
- * Should be used to format output hash
- *
- * @method formatOutputHash
- * @param {String}
- * @returns {String} right-aligned output bytes formatted to hex
- */
-var formatOutputHash = function (value) {
-    return "0x" + value;
-};
- 
-/**
- * Should be used to format output bool
- *
- * @method formatOutputBool
- * @param {String}
- * @returns {Boolean} right-aligned input bytes formatted to bool
- */
-var formatOutputBool = function (value) {
-    return value === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
-};
- 
-/**
- * Should be used to format output string
- *
- * @method formatOutputString
- * @param {Sttring} left-aligned hex representation of string
- * @returns {String} ascii string
- */
-var formatOutputString = function (value) {
-    return utils.toAscii(value);
-};
- 
-/**
- * Should be used to format output address
- *
- * @method formatOutputAddress
- * @param {String} right-aligned input bytes
- * @returns {String} address
- */
-var formatOutputAddress = function (value) {
-    return "0x" + value.slice(value.length - 40, value.length);
-};
- 
-module.exports = {
-    formatInputInt: formatInputInt,
-    formatInputString: formatInputString,
-    formatInputBool: formatInputBool,
-    formatInputReal: formatInputReal,
-    formatOutputInt: formatOutputInt,
-    formatOutputUInt: formatOutputUInt,
-    formatOutputReal: formatOutputReal,
-    formatOutputUReal: formatOutputUReal,
-    formatOutputHash: formatOutputHash,
-    formatOutputBool: formatOutputBool,
-    formatOutputString: formatOutputString,
-    formatOutputAddress: formatOutputAddress
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html deleted file mode 100644 index cfcf93a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/ - - - - - - - - -
-

Code coverage report for ethereum.js/lib/solidity/

-

- - Statements: 99.3% (142 / 143)      - - - Branches: 97.5% (39 / 40)      - - - Functions: 97.3% (36 / 37)      - - - Lines: 99.3% (142 / 143)      - - Ignored: none      -

-
All files » ethereum.js/lib/solidity/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
abi.js100%(93 / 93)100%(28 / 28)100%(17 / 17)100%(93 / 93)
formatters.js97.37%(37 / 38)91.67%(11 / 12)92.86%(13 / 14)97.37%(37 / 38)
types.js100%(12 / 12)100%(0 / 0)100%(6 / 6)100%(12 / 12)
-
-
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html deleted file mode 100644 index 07acd7d..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/types.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/solidity/types.js

-

- - Statements: 100% (12 / 12)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (6 / 6)      - - - Lines: 100% (12 / 12)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -1 -65 -396 -  -  -  -  -  -1 -4 -22 -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file types.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var f = require('./formatters');
- 
-/// @param expected type prefix (string)
-/// @returns function which checks if type has matching prefix. if yes, returns true, otherwise false
-var prefixedType = function (prefix) {
-    return function (type) {
-        return type.indexOf(prefix) === 0;
-    };
-};
- 
-/// @param expected type name (string)
-/// @returns function which checks if type is matching expected one. if yes, returns true, otherwise false
-var namedType = function (name) {
-    return function (type) {
-        return name === type;
-    };
-};
- 
-/// Setups input formatters for solidity types
-/// @returns an array of input formatters 
-var inputTypes = function () {
-    
-    return [
-        { type: prefixedType('uint'), format: f.formatInputInt },
-        { type: prefixedType('int'), format: f.formatInputInt },
-        { type: prefixedType('bytes'), format: f.formatInputString }, 
-        { type: prefixedType('real'), format: f.formatInputReal },
-        { type: prefixedType('ureal'), format: f.formatInputReal },
-        { type: namedType('address'), format: f.formatInputInt },
-        { type: namedType('bool'), format: f.formatInputBool }
-    ];
-};
- 
-/// Setups output formaters for solidity types
-/// @returns an array of output formatters
-var outputTypes = function () {
- 
-    return [
-        { type: prefixedType('uint'), format: f.formatOutputUInt },
-        { type: prefixedType('int'), format: f.formatOutputInt },
-        { type: prefixedType('bytes'), format: f.formatOutputString },
-        { type: prefixedType('real'), format: f.formatOutputReal },
-        { type: prefixedType('ureal'), format: f.formatOutputUReal },
-        { type: namedType('address'), format: f.formatOutputAddress },
-        { type: namedType('bool'), format: f.formatOutputBool }
-    ];
-};
- 
-module.exports = {
-    prefixedType: prefixedType,
-    namedType: namedType,
-    inputTypes: inputTypes,
-    outputTypes: outputTypes
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html deleted file mode 100644 index 92546cd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/config.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/utils/config.js

-

- - Statements: 100% (3 / 3)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (3 / 3)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file config.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-/**
- * Utils
- * 
- * @module utils
- */
- 
-/**
- * Utility functions
- * 
- * @class [utils] config
- * @constructor
- */
- 
-/// required to define ETH_BIGNUMBER_ROUNDING_MODE
-var BigNumber = require('bignumber.js');
- 
-var ETH_UNITS = [ 
-    'wei', 
-    'Kwei', 
-    'Mwei', 
-    'Gwei', 
-    'szabo', 
-    'finney', 
-    'ether', 
-    'grand', 
-    'Mether', 
-    'Gether', 
-    'Tether', 
-    'Pether', 
-    'Eether', 
-    'Zether', 
-    'Yether', 
-    'Nether', 
-    'Dether', 
-    'Vether', 
-    'Uether' 
-];
- 
-module.exports = {
-    ETH_PADDING: 32,
-    ETH_SIGNATURE_LENGTH: 4,
-    ETH_UNITS: ETH_UNITS,
-    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
-    ETH_POLLING_TIMEOUT: 1000,
-    ETH_DEFAULTBLOCK: 'latest'
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html deleted file mode 100644 index 91caf95..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/ - - - - - - - - -
-

Code coverage report for ethereum.js/lib/utils/

-

- - Statements: 100% (110 / 110)      - - - Branches: 92.06% (58 / 63)      - - - Functions: 100% (26 / 26)      - - - Lines: 100% (110 / 110)      - - Ignored: none      -

-
All files » ethereum.js/lib/utils/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
config.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
utils.js100%(107 / 107)92.06%(58 / 63)100%(26 / 26)100%(107 / 107)
-
-
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html deleted file mode 100644 index 5fad23e..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html +++ /dev/null @@ -1,1443 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/utils.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/utils/utils.js

-

- - Statements: 100% (107 / 107)      - - - Branches: 92.06% (58 / 63)      - - - Functions: 100% (26 / 26)      - - - Lines: 100% (107 / 107)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -3 -3 -3 -3 -  -3 -  -  -  -  -  -  -  -  -  -1 -  -10 -10 -10 -3 -  -10 -70 -70 -7 -  -  -63 -  -  -10 -  -  -  -  -  -  -  -  -  -1 -18 -18 -195 -195 -  -  -18 -  -  -  -  -  -  -  -  -  -  -1 -18 -18 -18 -135 -18 -  -  -  -  -  -  -  -  -  -1 -78 -78 -  -  -  -1 -  -76 -76 -  -  -  -  -  -  -  -  -  -1 -8 -13 -  -  -  -  -  -  -  -  -  -  -1 -8 -13 -  -  -  -  -  -  -  -  -  -  -1 -120 -  -  -  -  -  -  -  -  -  -1 -119 -119 -  -119 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -93 -2 -  -91 -1 -  -90 -3 -  -  -87 -35 -5 -30 -2 -  -  -80 -  -  -  -  -  -  -  -  -  -  -1 -25 -25 -25 -1 -  -24 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -12 -  -12 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -13 -  -12 -  -  -  -  -  -  -  -  -  -1 -  -464 -464 -54 -  -410 -154 -  -  -256 -  -  -  -  -  -  -  -  -  -1 -103 -103 -10 -  -93 -  -  -  -  -  -  -  -  -  -1 -6 -3 -  -  -3 -  -  -  -  -  -  -  -  -  -  -1 -587 -  -  -  -  -  -  -  -  -  -  -1 -557 -  -  -  -  -  -  -  -  -  -  -1 -182 -  -  -  -  -  -  -  -  -  -1 -174 -  -  -  -  -  -  -  -  -  -1 -93 -  -  -  -  -  -  -  -  -  -1 -106 -  -  -  -  -  -  -  -  -  -1 -10 -10 -  -5 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file utils.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-/**
- * Utils
- * 
- * @module utils
- */
- 
-/**
- * Utility functions
- * 
- * @class [utils] utils
- * @constructor
- */
- 
-var BigNumber = require('bignumber.js');
- 
-var unitMap = {
-    'wei':      '1',
-    'kwei':     '1000',
-    'ada':      '1000',
-    'mwei':     '1000000',
-    'babbage':  '1000000',
-    'gwei':     '1000000000',
-    'shannon':  '1000000000',
-    'szabo':    '1000000000000',
-    'finney':   '1000000000000000',
-    'ether':    '1000000000000000000',
-    'kether':   '1000000000000000000000',
-    'grand':    '1000000000000000000000',
-    'einstein': '1000000000000000000000',
-    'mether':   '1000000000000000000000000',
-    'gether':   '1000000000000000000000000000',
-    'tether':   '1000000000000000000000000000000'
-};
- 
- 
-/** Finds first index of array element matching pattern
- *
- * @method findIndex
- * @param {Array}
- * @param {Function} pattern
- * @returns {Number} index of element
- */
-var findIndex = function (array, callback) {
-    var end = false;
-    var i = 0;
-    for (; i < array.length && !end; i++) {
-        end = callback(array[i]);
-    }
-    return end ? i - 1 : -1;
-};
- 
-/** 
- * Should be called to get sting from it's hex representation
- *
- * @method toAscii
- * @param {String} string in hex
- * @returns {String} ascii string representation of hex value
- */
-var toAscii = function(hex) {
-// Find termination
-    var str = "";
-    var i = 0, l = hex.length;
-    if (hex.substring(0, 2) === '0x') {
-        i = 2;
-    }
-    for (; i < l; i+=2) {
-        var code = parseInt(hex.substr(i, 2), 16);
-        if (code === 0) {
-            break;
-        }
- 
-        str += String.fromCharCode(code);
-    }
- 
-    return str;
-};
-    
-/**
- * Shold be called to get hex representation (prefixed by 0x) of ascii string 
- *
- * @method fromAscii
- * @param {String} string
- * @returns {String} hex representation of input string
- */
-var toHexNative = function(str) {
-    var hex = "";
-    for(var i = 0; i < str.length; i++) {
-        var n = str.charCodeAt(i).toString(16);
-        hex += n.length < 2 ? '0' + n : n;
-    }
- 
-    return hex;
-};
- 
-/**
- * Shold be called to get hex representation (prefixed by 0x) of ascii string 
- *
- * @method fromAscii
- * @param {String} string
- * @param {Number} optional padding
- * @returns {String} hex representation of input string
- */
-var fromAscii = function(str, pad) {
-    pad = pad === undefined ? 0 : pad;
-    var hex = toHexNative(str);
-    while (hex.length < pad*2)
-        hex += "00";
-    return "0x" + hex;
-};
- 
-/**
- * Should be called to get display name of contract function
- * 
- * @method extractDisplayName
- * @param {String} name of function/event
- * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
- */
-var extractDisplayName = function (name) {
-    var length = name.indexOf('('); 
-    return length !== -1 ? name.substr(0, length) : name;
-};
- 
-/// @returns overloaded part of function/event name
-var extractTypeName = function (name) {
-    /// TODO: make it invulnerable
-    var length = name.indexOf('(');
-    return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : "";
-};
- 
-/**
- * Filters all functions from input abi
- *
- * @method filterFunctions
- * @param {Array} abi
- * @returns {Array} abi array with filtered objects of type 'function'
- */
-var filterFunctions = function (json) {
-    return json.filter(function (current) {
-        return current.type === 'function'; 
-    }); 
-};
- 
-/**
- * Filters all events from input abi
- *
- * @method filterEvents
- * @param {Array} abi
- * @returns {Array} abi array with filtered objects of type 'event'
- */
-var filterEvents = function (json) {
-    return json.filter(function (current) {
-        return current.type === 'event';
-    });
-};
- 
-/**
- * Converts value to it's decimal representation in string
- *
- * @method toDecimal
- * @param {String|Number|BigNumber}
- * @return {String}
- */
-var toDecimal = function (value) {
-    return toBigNumber(value).toNumber();
-};
- 
-/**
- * Converts value to it's hex representation
- *
- * @method fromDecimal
- * @param {String|Number|BigNumber}
- * @return {String}
- */
-var fromDecimal = function (value) {
-    var number = toBigNumber(value);
-    var result = number.toString(16);
- 
-    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
-};
- 
-/**
- * Auto converts any given value into it's hex representation.
- *
- * And even stringifys objects before.
- *
- * @method toHex
- * @param {String|Number|BigNumber|Object}
- * @return {String}
- */
-var toHex = function (val) {
-    /*jshint maxcomplexity:7 */
- 
-    if (isBoolean(val))
-        return fromDecimal(+val);
- 
-    if (isBigNumber(val))
-        return fromDecimal(val);
- 
-    if (isObject(val))
-        return fromAscii(JSON.stringify(val));
- 
-    // if its a negative number, pass it through fromDecimal
-    if (isString(val)) {
-        if (val.indexOf('-0x') === 0)
-           return fromDecimal(val);
-        else if (!isFinite(val))
-            return fromAscii(val);
-    }
- 
-    return fromDecimal(val);
-};
- 
-/**
- * Returns value of unit in Wei
- *
- * @method getValueOfUnit
- * @param {String} unit the unit to convert to, default ether
- * @returns {BigNumber} value of the unit (in Wei)
- * @throws error if the unit is not correct:w
- */
-var getValueOfUnit = function (unit) {
-    unit = unit ? unit.toLowerCase() : 'ether';
-    var unitValue = unitMap[unit];
-    if (unitValue === undefined) {
-        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
-    }
-    return new BigNumber(unitValue, 10);
-};
- 
-/**
- * Takes a number of wei and converts it to any other ether unit.
- *
- * Possible units are:
- * - kwei/ada
- * - mwei/babbage
- * - gwei/shannon
- * - szabo
- * - finney
- * - ether
- * - kether/grand/einstein
- * - mether
- * - gether
- * - tether
- *
- * @method fromWei
- * @param {Number|String} number can be a number, number string or a HEX of a decimal
- * @param {String} unit the unit to convert to, default ether
- * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
-*/
-var fromWei = function(number, unit) {
-    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));
- 
-    return isBigNumber(number) ? returnValue : returnValue.toString(10); 
-};
- 
-/**
- * Takes a number of a unit and converts it to wei.
- *
- * Possible units are:
- * - kwei/ada
- * - mwei/babbage
- * - gwei/shannon
- * - szabo
- * - finney
- * - ether
- * - kether/grand/einstein
- * - mether
- * - gether
- * - tether
- *
- * @method toWei
- * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
- * @param {String} unit the unit to convert from, default ether
- * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
-*/
-var toWei = function(number, unit) {
-    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));
- 
-    return isBigNumber(number) ? returnValue : returnValue.toString(10); 
-};
- 
-/**
- * Takes an input and transforms it into an bignumber
- *
- * @method toBigNumber
- * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
- * @return {BigNumber} BigNumber
-*/
-var toBigNumber = function(number) {
-    /*jshint maxcomplexity:5 */
-    number = number || 0;
-    if (isBigNumber(number))
-        return number;
- 
-    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
-        return new BigNumber(number.replace('0x',''), 16);
-    }
-   
-    return new BigNumber(number.toString(10), 10);
-};
- 
-/**
- * Takes and input transforms it into bignumber and if it is negative value, into two's complement
- *
- * @method toTwosComplement
- * @param {Number|String|BigNumber}
- * @return {BigNumber}
- */
-var toTwosComplement = function (number) {
-    var bigNumber = toBigNumber(number);
-    if (bigNumber.lessThan(0)) {
-        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
-    }
-    return bigNumber;
-};
- 
-/**
- * Checks if the given string has proper length
- *
- * @method isAddress
- * @param {String} address the given HEX adress
- * @return {Boolean}
-*/
-var isAddress = function(address) {
-    if (!isString(address)) {
-        return false;
-    }
- 
-    return ((address.indexOf('0x') === 0 && address.length === 42) ||
-            (address.indexOf('0x') === -1 && address.length === 40));
-};
- 
-/**
- * Returns true if object is BigNumber, otherwise false
- *
- * @method isBigNumber
- * @param {Object}
- * @return {Boolean} 
- */
-var isBigNumber = function (object) {
-    return object instanceof BigNumber ||
-        (object && object.constructor && object.constructor.name === 'BigNumber');
-};
- 
-/**
- * Returns true if object is string, otherwise false
- * 
- * @method isString
- * @param {Object}
- * @return {Boolean}
- */
-var isString = function (object) {
-    return typeof object === 'string' ||
-        (object && object.constructor && object.constructor.name === 'String');
-};
- 
-/**
- * Returns true if object is function, otherwise false
- *
- * @method isFunction
- * @param {Object}
- * @return {Boolean}
- */
-var isFunction = function (object) {
-    return typeof object === 'function';
-};
- 
-/**
- * Returns true if object is Objet, otherwise false
- *
- * @method isObject
- * @param {Object}
- * @return {Boolean}
- */
-var isObject = function (object) {
-    return typeof object === 'object';
-};
- 
-/**
- * Returns true if object is boolean, otherwise false
- *
- * @method isBoolean
- * @param {Object}
- * @return {Boolean}
- */
-var isBoolean = function (object) {
-    return typeof object === 'boolean';
-};
- 
-/**
- * Returns true if object is array, otherwise false
- *
- * @method isArray
- * @param {Object}
- * @return {Boolean}
- */
-var isArray = function (object) {
-    return object instanceof Array; 
-};
- 
-/**
- * Returns true if given string is valid json object
- * 
- * @method isJson
- * @param {String}
- * @return {Boolean}
- */
-var isJson = function (str) {
-    try {
-        return !!JSON.parse(str);
-    } catch (e) {
-        return false;
-    }
-};
- 
-module.exports = {
-    findIndex: findIndex,
-    toHex: toHex,
-    toDecimal: toDecimal,
-    fromDecimal: fromDecimal,
-    toAscii: toAscii,
-    fromAscii: fromAscii,
-    extractDisplayName: extractDisplayName,
-    extractTypeName: extractTypeName,
-    filterFunctions: filterFunctions,
-    filterEvents: filterEvents,
-    toWei: toWei,
-    fromWei: fromWei,
-    toBigNumber: toBigNumber,
-    toTwosComplement: toTwosComplement,
-    isBigNumber: isBigNumber,
-    isAddress: isAddress,
-    isFunction: isFunction,
-    isString: isString,
-    isObject: isObject,
-    isBoolean: isBoolean,
-    isArray: isArray,
-    isJson: isJson
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html deleted file mode 100644 index a2f507c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html +++ /dev/null @@ -1,519 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3.js

-

- - Statements: 95.08% (58 / 61)      - - - Branches: 50% (1 / 2)      - - - Functions: 90% (9 / 10)      - - - Lines: 95.08% (58 / 61)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -5 -27 -  -  -  -  -  -1 -3 -11 -  -  -  -  -1 -1 -1 -1 -1 -  -  -1 -  -  -  -4 -  -  -  -  -  -4 -  -  -  -1 -1 -1 -  -1 -1 -1 -123 -  -1 -2 -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -1 -  -4 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file web3.js
- * @authors:
- *   Jeffrey Wilcke <jeff@ethdev.com>
- *   Marek Kotewicz <marek@ethdev.com>
- *   Marian Oancea <marian@ethdev.com>
- *   Fabian Vogelsteller <fabian@ethdev.com>
- *   Gav Wood <g@ethdev.com>
- * @date 2014
- */
- 
-var version = require('./version.json');
-var net = require('./web3/net');
-var eth = require('./web3/eth');
-var db = require('./web3/db');
-var shh = require('./web3/shh');
-var watches = require('./web3/watches');
-var Filter = require('./web3/filter');
-var utils = require('./utils/utils');
-var formatters = require('./web3/formatters');
-var RequestManager = require('./web3/requestmanager');
-var c = require('./utils/config');
-var Method = require('./web3/method');
-var Property = require('./web3/property');
- 
-var web3Methods = [
-    new Method({
-        name: 'sha3',
-        call: 'web3_sha3',
-        params: 1
-    })
-];
- 
-var web3Properties = [
-    new Property({
-        name: 'version.client',
-        getter: 'web3_clientVersion'
-    }),
-    new Property({
-        name: 'version.network',
-        getter: 'net_version',
-        inputFormatter: utils.toDecimal
-    }),
-    new Property({
-        name: 'version.ethereum',
-        getter: 'net_eth',
-        inputFormatter: utils.toDecimal
-    }),
-    new Property({
-        name: 'version.whisper',
-        getter: 'net_shh',
-        inputFormatter: utils.toDecimal
-    })
-];
- 
-/// creates methods in a given object based on method description on input
-/// setups api calls for these methods
-var setupMethods = function (obj, methods) {
-    methods.forEach(function (method) {
-        method.attachToObject(obj);
-    });
-};
- 
-/// creates properties in a given object based on properties description on input
-/// setups api calls for these properties
-var setupProperties = function (obj, properties) {
-    properties.forEach(function (property) {
-        property.attachToObject(obj);
-    });
-};
- 
-/// setups web3 object, and it's in-browser executed methods
-var web3 = {};
-web3.providers = {};
-web3.version = {};
-web3.version.api = version.version;
-web3.eth = {};
- 
-/*jshint maxparams:4 */
-web3.eth.filter = function (fil, eventParams, options, formatter) {
- 
-    // if its event, treat it differently
-    // TODO: simplify and remove
-    Iif (fil._isEvent) {
-        return fil(eventParams, options);
-    }
- 
-    // what outputLogFormatter? that's wrong
-    //return new Filter(fil, watches.eth(), formatters.outputLogFormatter);
-    return new Filter(fil, watches.eth(), formatter);
-};
-/*jshint maxparams:3 */
- 
-web3.shh = {};
-web3.shh.filter = function (fil) {
-    return new Filter(fil, watches.shh(), formatters.outputPostFormatter);
-};
-web3.net = {};
-web3.db = {};
-web3.setProvider = function (provider) {
-    RequestManager.getInstance().setProvider(provider);
-};
-web3.reset = function () {
-    RequestManager.getInstance().reset();
-};
-web3.toHex = utils.toHex;
-web3.toAscii = utils.toAscii;
-web3.fromAscii = utils.fromAscii;
-web3.toDecimal = utils.toDecimal;
-web3.fromDecimal = utils.fromDecimal;
-web3.toBigNumber = utils.toBigNumber;
-web3.toWei = utils.toWei;
-web3.fromWei = utils.fromWei;
-web3.isAddress = utils.isAddress;
- 
-// ADD defaultblock
-Object.defineProperty(web3.eth, 'defaultBlock', {
-    get: function () {
-        return c.ETH_DEFAULTBLOCK;
-    },
-    set: function (val) {
-        c.ETH_DEFAULTBLOCK = val;
-        return c.ETH_DEFAULTBLOCK;
-    }
-});
- 
- 
-/// setups all api methods
-setupMethods(web3, web3Methods);
-setupProperties(web3, web3Properties);
-setupMethods(web3.net, net.methods);
-setupProperties(web3.net, net.properties);
-setupMethods(web3.eth, eth.methods);
-setupProperties(web3.eth, eth.properties);
-setupMethods(web3.db, db.methods);
-setupMethods(web3.shh, shh.methods);
- 
-module.exports = web3;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html deleted file mode 100644 index 07a83c0..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html +++ /dev/null @@ -1,738 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/contract.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/contract.js

-

- - Statements: 61.22% (60 / 98)      - - - Branches: 34.78% (8 / 23)      - - - Functions: 61.9% (13 / 21)      - - - Lines: 60.82% (59 / 97)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -1 -  -7 -  -  -  -  -  -  -7 -  -  -  -  -  -7 -  -  -  -  -  -  -7 -7 -28 -  -  -  -  -  -  -  -1 -7 -7 -  -  -7 -  -8 -8 -  -8 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -8 -7 -  -  -8 -  -  -  -1 -7 -7 -  -  -  -  -  -7 -  -  -  -  -  -  -  -  -  -1 -  -7 -  -2 -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -  -2 -  -2 -2 -  -2 -2 -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -7 -7 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -7 -11 -7 -8 -7 -  -  -  -7 -7 -7 -7 -7 -  -7 -  -  -1 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file contract.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2014
- */
- 
-var web3 = require('../web3'); 
-var abi = require('../solidity/abi');
-var utils = require('../utils/utils');
-var eventImpl = require('./event');
-var signature = require('./signature');
- 
-var addFunctionRelatedPropertiesToContract = function (contract) {
-    
-    contract.call = function (options) {
-        contract._isTransaction = false;
-        contract._options = options;
-        return contract;
-    };
- 
- 
-    contract.sendTransaction = function (options) {
-        contract._isTransaction = true;
-        contract._options = options;
-        return contract;
-    };
-    // DEPRECATED
-    contract.transact = function (options) {
- 
-        console.warn('myContract.transact() is deprecated please use myContract.sendTransaction() instead.');
- 
-        return contract.sendTransaction(options);
-    };
- 
-    contract._options = {};
-    ['gas', 'gasPrice', 'value', 'from'].forEach(function(p) {
-        contract[p] = function (v) {
-            contract._options[p] = v;
-            return contract;
-        };
-    });
- 
-};
- 
-var addFunctionsToContract = function (contract, desc, address) {
-    var inputParser = abi.inputParser(desc);
-    var outputParser = abi.outputParser(desc);
- 
-    // create contract functions
-    utils.filterFunctions(desc).forEach(function (method) {
- 
-        var displayName = utils.extractDisplayName(method.name);
-        var typeName = utils.extractTypeName(method.name);
- 
-        var impl = function () {
-            /*jshint maxcomplexity:7 */
-            var params = Array.prototype.slice.call(arguments);
-            var sign = signature.functionSignatureFromAscii(method.name);
-            var parsed = inputParser[displayName][typeName].apply(null, params);
- 
-            var options = contract._options || {};
-            options.to = address;
-            options.data = sign + parsed;
-            
-            var isTransaction = contract._isTransaction === true || (contract._isTransaction !== false && !method.constant);
-            var collapse = options.collapse !== false;
-            
-            // reset
-            contract._options = {};
-            contract._isTransaction = null;
- 
-            if (isTransaction) {
-                
-                // transactions do not have any output, cause we do not know, when they will be processed
-                web3.eth.sendTransaction(options);
-                return;
-            }
-            
-            var output = web3.eth.call(options);
-            var ret = outputParser[displayName][typeName](output);
-            if (collapse)
-            {
-                if (ret.length === 1)
-                    ret = ret[0];
-                else if (ret.length === 0)
-                    ret = null;
-            }
-            return ret;
-        };
- 
-        if (contract[displayName] === undefined) {
-            contract[displayName] = impl;
-        }
- 
-        contract[displayName][typeName] = impl;
-    });
-};
- 
-var addEventRelatedPropertiesToContract = function (contract, desc, address) {
-    contract.address = address;
-    contract._onWatchEventResult = function (data) {
-        var matchingEvent = event.getMatchingEvent(utils.filterEvents(desc));
-        var parser = eventImpl.outputParser(matchingEvent);
-        return parser(data);
-    };
-    
-    Object.defineProperty(contract, 'topics', {
-        get: function() {
-            return utils.filterEvents(desc).map(function (e) {
-                return signature.eventSignatureFromAscii(e.name);
-            });
-        }
-    });
- 
-};
- 
-var addEventsToContract = function (contract, desc, address) {
-    // create contract events
-    utils.filterEvents(desc).forEach(function (e) {
- 
-        var impl = function () {
-            var params = Array.prototype.slice.call(arguments);
-            var sign = signature.eventSignatureFromAscii(e.name);
-            var event = eventImpl.inputParser(address, sign, e);
-            var o = event.apply(null, params);
-            var outputFormatter = function (data) {
-                var parser = eventImpl.outputParser(e);
-                return parser(data);
-            };
-            return web3.eth.filter(o, undefined, undefined, outputFormatter);
-        };
-        
-        // this property should be used by eth.filter to check if object is an event
-        impl._isEvent = true;
- 
-        var displayName = utils.extractDisplayName(e.name);
-        var typeName = utils.extractTypeName(e.name);
- 
-        Eif (contract[displayName] === undefined) {
-            contract[displayName] = impl;
-        }
- 
-        contract[displayName][typeName] = impl;
- 
-    });
-};
- 
- 
-/**
- * This method should be called when we want to call / transact some solidity method from javascript
- * it returns an object which has same methods available as solidity contract description
- * usage example: 
- *
- * var abi = [{
- *      name: 'myMethod',
- *      inputs: [{ name: 'a', type: 'string' }],
- *      outputs: [{name: 'd', type: 'string' }]
- * }];  // contract abi
- *
- * var MyContract = web3.eth.contract(abi); // creation of contract prototype
- *
- * var contractInstance = new MyContract('0x0123123121');
- *
- * contractInstance.myMethod('this is test string param for call'); // myMethod call (implicit, default)
- * contractInstance.call().myMethod('this is test string param for call'); // myMethod call (explicit)
- * contractInstance.sendTransaction().myMethod('this is test string param for transact'); // myMethod sendTransaction
- *
- * @param abi - abi json description of the contract, which is being created
- * @returns contract object
- */
-var contract = function (abi) {
- 
-    // return prototype
-    Eif(abi instanceof Array && arguments.length === 1) {
-        return Contract.bind(null, abi);
- 
-    // deprecated: auto initiate contract
-    } else {
- 
-        console.warn('Initiating a contract like this is deprecated please use var MyContract = eth.contract(abi); new MyContract(address); instead.');
- 
-        return new Contract(arguments[1], arguments[0]);
-    }
- 
-};
- 
-function Contract(abi, address) {
- 
-    // workaround for invalid assumption that method.name is the full anonymous prototype of the method.
-    // it's not. it's just the name. the rest of the code assumes it's actually the anonymous
-    // prototype, so we make it so as a workaround.
-    // TODO: we may not want to modify input params, maybe use copy instead?
-    abi.forEach(function (method) {
-        if (method.name.indexOf('(') === -1) {
-            var displayName = method.name;
-            var typeName = method.inputs.map(function(i){return i.type; }).join();
-            method.name = displayName + '(' + typeName + ')';
-        }
-    });
- 
-    var result = {};
-    addFunctionRelatedPropertiesToContract(result);
-    addFunctionsToContract(result, abi, address);
-    addEventRelatedPropertiesToContract(result, abi, address);
-    addEventsToContract(result, abi, address);
- 
-    return result;
-}
- 
-module.exports = contract;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html deleted file mode 100644 index 4b72666..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/db.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/db.js

-

- - Statements: 100% (7 / 7)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (7 / 7)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -1 -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file db.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Method = require('./method');
- 
-var putString = new Method({
-    name: 'putString',
-    call: 'db_putString',
-    params: 3
-});
- 
- 
-var getString = new Method({
-    name: 'getString',
-    call: 'db_getString',
-    params: 2
-});
- 
-var putHex = new Method({
-    name: 'putHex',
-    call: 'db_putHex',
-    params: 3
-});
- 
-var getHex = new Method({
-    name: 'getHex',
-    call: 'db_getHex',
-    params: 2
-});
- 
-var methods = [
-    putString, getString, putHex, getHex
-];
- 
-module.exports = {
-    methods: methods
-};
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html deleted file mode 100644 index 6076cc0..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/errors.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/errors.js

-

- - Statements: 33.33% (2 / 6)      - - - Branches: 0% (0 / 5)      - - - Functions: 0% (0 / 1)      - - - Lines: 33.33% (2 / 6)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file errors.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
- 
-module.exports = {
-    InvalidNumberOfParams: new Error('Invalid number of input parameters'),
-    InvalidProvider: new Error('Providor not set or invalid'),
-    InvalidResponse: function(result){
-        var message = 'Invalid JSON RPC response';
- 
-        if(utils.isObject(result) && result.error && result.error.message) {
-            message = result.error.message;
-        }
- 
-        return new Error(message);
-    }
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html deleted file mode 100644 index 2dda846..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html +++ /dev/null @@ -1,819 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/eth.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/eth.js

-

- - Statements: 100% (36 / 36)      - - - Branches: 100% (20 / 20)      - - - Functions: 100% (7 / 7)      - - - Lines: 100% (36 / 36)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -6 -  -  -1 -4 -  -  -1 -6 -  -  -1 -4 -  -  -1 -4 -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -6 -  -  -  -1 -  -  -  -6 -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @file eth.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @author Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-/**
- * Web3
- * 
- * @module web3
- */
- 
-/**
- * Eth methods and properties
- *
- * An example method object can look as follows:
- *
- *      {
- *      name: 'getBlock',
- *      call: blockCall,
- *      params: 2,
- *      outputFormatter: formatters.outputBlockFormatter,
- *      inputFormatter: [ // can be a formatter funciton or an array of functions. Where each item in the array will be used for one parameter
- *           utils.toHex, // formats paramter 1
- *           function(param){ return !!param; } // formats paramter 2
- *         ]
- *       },
- *
- * @class [web3] eth
- * @constructor
- */
- 
-"use strict";
- 
-var formatters = require('./formatters');
-var utils = require('../utils/utils');
-var Method = require('./method');
-var Property = require('./property');
- 
-var blockCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
-};
- 
-var transactionFromBlockCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
-};
- 
-var uncleCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
-};
- 
-var getBlockTransactionCountCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
-};
- 
-var uncleCountCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
-};
- 
-/// @returns an array of objects describing web3.eth api methods
- 
-var getBalance = new Method({
-    name: 'getBalance', 
-    call: 'eth_getBalance', 
-    params: 2,
-    inputFormatter: [utils.toHex, formatters.inputDefaultBlockNumberFormatter],
-    outputFormatter: formatters.outputBigNumberFormatter
-});
- 
-var getStorageAt = new Method({
-    name: 'getStorageAt', 
-    call: 'eth_getStorageAt', 
-    params: 3,
-    inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
-});
- 
-var getCode = new Method({
-    name: 'getCode',
-    call: 'eth_getCode',
-    params: 2,
-    inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter]
-});
- 
-var getBlock = new Method({
-    name: 'getBlock', 
-    call: blockCall,
-    params: 2,
-    inputFormatter: [utils.toHex, function (val) { return !!val; }],
-    outputFormatter: formatters.outputBlockFormatter
-});
- 
-var getUncle = new Method({
-    name: 'getUncle',
-    call: uncleCall,
-    params: 3,
-    inputFormatter: [utils.toHex, utils.toHex, function (val) { return !!val; }],
-    outputFormatter: formatters.outputBlockFormatter,
- 
-});
- 
-var getCompilers = new Method({
-    name: 'getCompilers',
-    call: 'eth_getCompilers',
-    params: 0
-});
- 
-var getBlockTransactionCount = new Method({
-    name: 'getBlockTransactionCount',
-    call: getBlockTransactionCountCall,
-    params: 1,
-    inputFormatter: [utils.toHex],
-    outputFormatter: utils.toDecimal
-});
- 
-var getBlockUncleCount = new Method({
-    name: 'getBlockUncleCount',
-    call: uncleCountCall,
-    params: 1,
-    inputFormatter: [utils.toHex],
-    outputFormatter: utils.toDecimal
-});
- 
-var getTransaction = new Method({
-    name: 'getTransaction',
-    call: 'eth_getTransactionByHash',
-    params: 1,
-    outputFormatter: formatters.outputTransactionFormatter
-});
- 
-var getTransactionFromBlock = new Method({
-    name: 'getTransactionFromBlock',
-    call: transactionFromBlockCall,
-    params: 2,
-    inputFormatter: [utils.toHex, utils.toHex],
-    outputFormatter: formatters.outputTransactionFormatter
-});
- 
-var getTransactionCount = new Method({
-    name: 'getTransactionCount',
-    call: 'eth_getTransactionCount',
-    params: 2,
-    inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
-    outputFormatter: utils.toDecimal
-});
- 
-var sendTransaction = new Method({
-    name: 'sendTransaction',
-    call: 'eth_sendTransaction',
-    params: 1,
-    inputFormatter: [formatters.inputTransactionFormatter]
-});
- 
-var call = new Method({
-    name: 'call',
-    call: 'eth_call',
-    params: 2,
-    inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
-});
- 
-var compileSolidity = new Method({
-    name: 'compile.solidity',
-    call: 'eth_compileSolidity',
-    params: 1
-});
- 
-var compileLLL = new Method({
-    name: 'compile.lll',
-    call: 'eth_compileLLL',
-    params: 1
-});
- 
-var compileSerpent = new Method({
-    name: 'compile.serpent',
-    call: 'eth_compileSerpent',
-    params: 1
-});
- 
-var flush = new Method({
-    name: 'flush',
-    call: 'eth_flush',
-    params: 0
-});
- 
-var methods = [
-    getBalance,
-    getStorageAt,
-    getCode,
-    getBlock,
-    getUncle,
-    getCompilers,
-    getBlockTransactionCount,
-    getBlockUncleCount,
-    getTransaction,
-    getTransactionFromBlock,
-    getTransactionCount,
-    call,
-    sendTransaction,
-    compileSolidity,
-    compileLLL,
-    compileSerpent,
-    flush
-];
- 
-/// @returns an array of objects describing web3.eth api properties
- 
- 
- 
-var properties = [
-    new Property({
-        name: 'coinbase',
-        getter: 'eth_coinbase'
-    }),
-    new Property({
-        name: 'mining',
-        getter: 'eth_mining'
-    }),
-    new Property({
-        name: 'gasPrice',
-        getter: 'eth_gasPrice',
-        outputFormatter: formatters.inputNumberFormatter
-    }),
-    new Property({
-        name: 'accounts',
-        getter: 'eth_accounts'
-    }),
-    new Property({
-        name: 'blockNumber',
-        getter: 'eth_blockNumber',
-        outputFormatter: utils.toDecimal
-    })
-];
- 
-module.exports = {
-    methods: methods,
-    properties: properties
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html deleted file mode 100644 index 708e5bd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/event.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/event.js

-

- - Statements: 86.89% (53 / 61)      - - - Branches: 75% (12 / 16)      - - - Functions: 93.33% (14 / 15)      - - - Lines: 86.67% (52 / 60)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -1 -9 -24 -  -  -  -1 -3 -3 -  -  -3 -  -  -  -3 -  -  -1 -  -4 -3 -  -3 -3 -1 -2 -  -  -2 -  -  -  -1 -  -  -5 -5 -5 -5 -5 -5 -4 -  -5 -  -  -  -1 -3 -3 -3 -9 -9 -5 -  -4 -  -9 -9 -  -  -  -1 -  -3 -3 -  -  -  -  -  -  -3 -  -  -3 -  -3 -5 -3 -  -3 -3 -  -3 -  -3 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file event.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2014
- */
- 
-var abi = require('../solidity/abi');
-var utils = require('../utils/utils');
-var signature = require('./signature');
- 
-/// filter inputs array && returns only indexed (or not) inputs
-/// @param inputs array
-/// @param bool if result should be an array of indexed params on not
-/// @returns array of (not?) indexed params
-var filterInputs = function (inputs, indexed) {
-    return inputs.filter(function (current) {
-        return current.indexed === indexed;
-    });
-};
- 
-var inputWithName = function (inputs, name) {
-    var index = utils.findIndex(inputs, function (input) {
-        return input.name === name;
-    });
-    
-    Iif (index === -1) {
-        console.error('indexed param with name ' + name + ' not found');
-        return undefined;
-    }
-    return inputs[index];
-};
- 
-var indexedParamsToTopics = function (event, indexed) {
-    // sort keys?
-    return Object.keys(indexed).map(function (key) {
-        var inputs = [inputWithName(filterInputs(event.inputs, true), key)];
- 
-        var value = indexed[key];
-        if (value instanceof Array) {
-            return value.map(function (v) {
-                return abi.formatInput(inputs, [v]);
-            }); 
-        }
-        return '0x' + abi.formatInput(inputs, [value]);
-    });
-};
- 
-var inputParser = function (address, sign, event) {
-    
-    // valid options are 'earliest', 'latest', 'offset' and 'max', as defined for 'eth.filter'
-    return function (indexed, options) {
-        var o = options || {};
-        o.address = address;
-        o.topics = [];
-        o.topics.push(sign);
-        if (indexed) {
-            o.topics = o.topics.concat(indexedParamsToTopics(event, indexed));
-        }
-        return o;
-    };
-};
- 
-var getArgumentsObject = function (inputs, indexed, notIndexed) {
-    var indexedCopy = indexed.slice();
-    var notIndexedCopy = notIndexed.slice();
-    return inputs.reduce(function (acc, current) {
-        var value;
-        if (current.indexed)
-            value = indexedCopy.splice(0, 1)[0];
-        else
-            value = notIndexedCopy.splice(0, 1)[0];
- 
-        acc[current.name] = value;
-        return acc;
-    }, {}); 
-};
- 
-var outputParser = function (event) {
-    
-    return function (output) {
-        var result = {
-            event: utils.extractDisplayName(event.name),
-            number: output.number,
-            hash: output.hash,
-            args: {}
-        };
- 
-        Iif (!output.topics) {
-            return result;
-        }
-        output.data = output.data || '';
-       
-        var indexedOutputs = filterInputs(event.inputs, true);
-        var indexedData = "0x" + output.topics.slice(1, output.topics.length).map(function (topics) { return topics.slice(2); }).join("");
-        var indexedRes = abi.formatOutput(indexedOutputs, indexedData);
- 
-        var notIndexedOutputs = filterInputs(event.inputs, false);
-        var notIndexedRes = abi.formatOutput(notIndexedOutputs, output.data);
- 
-        result.args = getArgumentsObject(event.inputs, indexedRes, notIndexedRes);
- 
-        return result;
-    };
-};
- 
-var getMatchingEvent = function (events, payload) {
-    for (var i = 0; i < events.length; i++) {
-        var sign = signature.eventSignatureFromAscii(events[i].name); 
-        if (sign === payload.topics[0]) {
-            return events[i];
-        }
-    }
-    return undefined;
-};
- 
- 
-module.exports = {
-    inputParser: inputParser,
-    outputParser: outputParser,
-    getMatchingEvent: getMatchingEvent
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html deleted file mode 100644 index 1378fef..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/filter.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/filter.js

-

- - Statements: 85.11% (40 / 47)      - - - Branches: 72.22% (13 / 18)      - - - Functions: 76.92% (10 / 13)      - - - Lines: 85.11% (40 / 47)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -1 -  -5 -2 -  -  -3 -  -  -3 -3 -4 -  -  -3 -6 -4 -  -2 -  -  -2 -  -  -  -3 -  -  -  -  -  -  -  -  -1 -5 -5 -20 -  -5 -5 -5 -5 -5 -  -  -1 -2 -2 -  -2 -2 -  -  -  -  -  -2 -2 -2 -2 -  -  -  -  -2 -  -  -  -  -  -1 -1 -1 -1 -  -  -1 -  -  -  -  -  -  -  -1 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file filter.js
- * @authors:
- *   Jeffrey Wilcke <jeff@ethdev.com>
- *   Marek Kotewicz <marek@ethdev.com>
- *   Marian Oancea <marian@ethdev.com>
- *   Fabian Vogelsteller <fabian@ethdev.com>
- *   Gav Wood <g@ethdev.com>
- * @date 2014
- */
- 
-var RequestManager = require('./requestmanager');
-var utils = require('../utils/utils');
- 
-/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
-/// @param should be string or object
-/// @returns options string or object
-var getOptions = function (options) {
- 
-    if (utils.isString(options)) {
-        return options;
-    } 
- 
-    options = options || {};
- 
-    // make sure topics, get converted to hex
-    options.topics = options.topics || [];
-    options.topics = options.topics.map(function(topic){
-        return utils.toHex(topic);
-    });
- 
-    var asBlockNumber = function (n) {
-        if (typeof n === 'undefined') {
-            return undefined;
-        }
-        Iif (n === 'latest' || n === 'pending') {
-           return n; 
-        }
-        return utils.toHex(n);
-    };
- 
-    // lazy load
-    return {
-        topics: options.topics,
-        to: options.to,
-        address: options.address,
-        fromBlock: asBlockNumber(options.fromBlock),
-        toBlock: asBlockNumber(options.toBlock) 
-    }; 
-};
- 
-var Filter = function (options, methods, formatter) {
-    var implementation = {};
-    methods.forEach(function (method) {
-        method.attachToObject(implementation);
-    });
-    this.options = getOptions(options);
-    this.implementation = implementation;
-    this.callbacks = [];
-    this.formatter = formatter;
-    this.filterId = this.implementation.newFilter(this.options);
-};
- 
-Filter.prototype.watch = function (callback) {
-    this.callbacks.push(callback);
-    var self = this;
- 
-    var onMessage = function (error, messages) {
-        Iif (error) {
-            return self.callbacks.forEach(function (callback) {
-                callback(error);
-            });
-        }
- 
-        messages.forEach(function (message) {
-            message = self.formatter ? self.formatter(message) : message;
-            self.callbacks.forEach(function (callback) {
-                callback(null, message);
-            });
-        });
-    };
- 
-    RequestManager.getInstance().startPolling({
-        method: this.implementation.poll.call,
-        params: [this.filterId],
-    }, this.filterId, onMessage, this.stopWatching.bind(this));
-};
- 
-Filter.prototype.stopWatching = function () {
-    RequestManager.getInstance().stopPolling(this.filterId);
-    this.implementation.uninstallFilter(this.filterId);
-    this.callbacks = [];
-};
- 
-Filter.prototype.get = function () {
-    var logs = this.implementation.getLogs(this.filterId);
-    var self = this;
-    return logs.map(function (log) {
-        return self.formatter ? self.formatter(log) : log;
-    });
-};
- 
-module.exports = Filter;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html deleted file mode 100644 index dc57471..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html +++ /dev/null @@ -1,681 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/formatters.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/formatters.js

-

- - Statements: 89.39% (59 / 66)      - - - Branches: 64.29% (9 / 14)      - - - Functions: 92.31% (12 / 13)      - - - Lines: 89.39% (59 / 66)      - - Ignored: none      -

-
All files » ethereum.js/lib/web3/ » formatters.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -1 -8 -  -  -1 -18 -  -  -  -  -  -  -  -  -  -1 -  -  -1 -  -  -  -  -1 -3 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -11 -11 -11 -11 -11 -11 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -13 -13 -13 -13 -13 -  -13 -13 -13 -  -13 -12 -20 -4 -  -  -  -13 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -  -1 -  -  -  -  -1 -2 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -1 -1 -  -1 -1 -  -  -  -1 -2 -  -  -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file formatters.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @author Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
-var config = require('../utils/config');
- 
-/**
- * Should the format output to a big number
- *
- * @method outputBigNumberFormatter
- * @param {String|Number|BigNumber}
- * @returns {BigNumber} object
- */
-var outputBigNumberFormatter = function (number) {
-    return utils.toBigNumber(number);
-};
- 
-var inputDefaultBlockNumberFormatter = function (blockNumber) {
-    return blockNumber === undefined ? config.ETH_DEFAULTBLOCK : utils.toHex(blockNumber); // instead use default block number here
-};
- 
-/**
- * Formats the input of a transaction and converts all values to HEX
- *
- * @method inputTransactionFormatter
- * @param {Object} transaction options
- * @returns object
-*/
-var inputTransactionFormatter = function (options){
- 
-    // make code -> data
-    Iif (options.code) {
-        options.data = options.code;
-        delete options.code;
-    }
- 
-    ['gasPrice', 'gas', 'value'].forEach(function(key){
-        options[key] = utils.fromDecimal(options[key]);
-    });
- 
-    return options; 
-};
- 
-/**
- * Formats the output of a transaction to its proper values
- * 
- * @method outputTransactionFormatter
- * @param {Object} transaction
- * @returns {Object} transaction
-*/
-var outputTransactionFormatter = function (tx){
-    tx.blockNumber = utils.toDecimal(tx.blockNumber);
-    tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
-    tx.gas = utils.toDecimal(tx.gas);
-    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
-    tx.value = utils.toBigNumber(tx.value);
-    return tx;
-};
- 
-/**
- * Formats the input of a call and converts all values to HEX
- *
- * @method inputCallFormatter
- * @param {Object} transaction options
- * @returns object
-*/
-var inputCallFormatter = function (options){
-    
-    // make code -> data
-    if (options.code) {
-        options.data = options.code;
-        delete options.code;
-    }
- 
-    return options; 
-};
- 
-/**
- * Formats the output of a block to its proper values
- *
- * @method outputBlockFormatter
- * @param {Object} block object 
- * @returns {Object} block object
-*/
-var outputBlockFormatter = function(block) {
- 
-    // transform to number
-    block.gasLimit = utils.toDecimal(block.gasLimit);
-    block.gasUsed = utils.toDecimal(block.gasUsed);
-    block.size = utils.toDecimal(block.size);
-    block.timestamp = utils.toDecimal(block.timestamp);
-    block.number = utils.toDecimal(block.number);
- 
-    block.minGasPrice = utils.toBigNumber(block.minGasPrice);
-    block.difficulty = utils.toBigNumber(block.difficulty);
-    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);
- 
-    if (utils.isArray(block.transactions)) {
-        block.transactions.forEach(function(item){
-            if(!utils.isString(item))
-                return outputTransactionFormatter(item);
-        });
-    }
- 
-    return block;
-};
- 
-/**
- * Formats the output of a log
- * 
- * @method outputLogFormatter
- * @param {Object} log object
- * @returns {Object} log
-*/
-var outputLogFormatter = function(log){
-    log.blockNumber = utils.toDecimal(log.blockNumber);
-    log.transactionIndex = utils.toDecimal(log.transactionIndex);
-    log.logIndex = utils.toDecimal(log.logIndex);
- 
-    return log;
-};
- 
- 
-/**
- * Formats the input of a whisper post and converts all values to HEX
- *
- * @method inputPostFormatter
- * @param {Object} transaction object
- * @returns {Object}
-*/
-var inputPostFormatter = function(post){
- 
-    post.payload = utils.toHex(post.payload);
-    post.ttl = utils.fromDecimal(post.ttl);
-    post.priority = utils.fromDecimal(post.priority);
- 
-    Iif(!utils.isArray(post.topics)) {
-        post.topics = [post.topics];
-    }
- 
-    // format the following options
-    post.topics = post.topics.map(function(topic){
-        return utils.fromAscii(topic);
-    });
- 
-    return post; 
-};
- 
-/**
- * Formats the output of a received post message
- *
- * @method outputPostFormatter
- * @param {Object}
- * @returns {Object}
- */
-var outputPostFormatter = function(post){
- 
-    post.expiry = utils.toDecimal(post.expiry);
-    post.sent = utils.toDecimal(post.sent);
-    post.ttl = utils.toDecimal(post.ttl);
-    post.workProved = utils.toDecimal(post.workProved);
-    post.payloadRaw = post.payload;
-    post.payload = utils.toAscii(post.payload);
- 
-    Eif (utils.isJson(post.payload)) {
-        post.payload = JSON.parse(post.payload);
-    }
- 
-    // format the following options
-    post.topics = post.topics.map(function(topic){
-        return utils.toAscii(topic);
-    });
- 
-    return post;
-};
- 
-module.exports = {
-    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
-    inputTransactionFormatter: inputTransactionFormatter,
-    inputCallFormatter: inputCallFormatter,
-    inputPostFormatter: inputPostFormatter,
-    outputBigNumberFormatter: outputBigNumberFormatter,
-    outputTransactionFormatter: outputTransactionFormatter,
-    outputBlockFormatter: outputBlockFormatter,
-    outputLogFormatter: outputLogFormatter,
-    outputPostFormatter: outputPostFormatter
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html deleted file mode 100644 index 109c174..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/httpprovider.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/httpprovider.js

-

- - Statements: 100% (16 / 16)      - - - Branches: 75% (3 / 4)      - - - Functions: 100% (4 / 4)      - - - Lines: 100% (16 / 16)      - - Ignored: none      -

-
All files » ethereum.js/lib/web3/ » httpprovider.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -2 -2 -  -  -2 -1 -  -1 -1 -  -  -  -  -  -  -1 -  -  -2 -1 -1 -1 -  -1 -  -  -  -1 -1 -  -  -2 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file httpprovider.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- *   Marian Oancea <marian@ethdev.com>
- *   Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2014
- */
- 
-"use strict";
- 
-var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore:line
- 
-var HttpProvider = function (host) {
-    this.host = host || 'http://localhost:8080';
-};
- 
-HttpProvider.prototype.send = function (payload) {
-    var request = new XMLHttpRequest();
- 
-    request.open('POST', this.host, false);
-    request.send(JSON.stringify(payload));
- 
-    // check request.status
-    // TODO: throw an error here! it cannot silently fail!!!
-    //if (request.status !== 200) {
-        //return;
-    //}
-    return JSON.parse(request.responseText);
-};
- 
-HttpProvider.prototype.sendAsync = function (payload, callback) {
-    var request = new XMLHttpRequest();
-    request.onreadystatechange = function() {
-        Eif (request.readyState === 4) {
-            // TODO: handle the error properly here!!!
-            callback(null, JSON.parse(request.responseText));
-        }
-    };
- 
-    request.open('POST', this.host, true);
-    request.send(JSON.stringify(payload));
-};
- 
-module.exports = HttpProvider;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html deleted file mode 100644 index 974444a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/ - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/

-

- - Statements: 85.45% (464 / 543)      - - - Branches: 70.52% (122 / 173)      - - - Functions: 86.78% (105 / 121)      - - - Lines: 85.4% (462 / 541)      - - Ignored: none      -

-
All files » ethereum.js/lib/web3/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
contract.js61.22%(60 / 98)34.78%(8 / 23)61.9%(13 / 21)60.82%(59 / 97)
db.js100%(7 / 7)100%(0 / 0)100%(0 / 0)100%(7 / 7)
errors.js33.33%(2 / 6)0%(0 / 5)0%(0 / 1)33.33%(2 / 6)
eth.js100%(36 / 36)100%(20 / 20)100%(7 / 7)100%(36 / 36)
event.js86.89%(53 / 61)75%(12 / 16)93.33%(14 / 15)86.67%(52 / 60)
filter.js85.11%(40 / 47)72.22%(13 / 18)76.92%(10 / 13)85.11%(40 / 47)
formatters.js89.39%(59 / 66)64.29%(9 / 14)92.31%(12 / 13)89.39%(59 / 66)
httpprovider.js100%(16 / 16)75%(3 / 4)100%(4 / 4)100%(16 / 16)
jsonrpc.js88.89%(16 / 18)81.82%(9 / 11)100%(6 / 6)88.89%(16 / 18)
method.js100%(47 / 47)100%(22 / 22)100%(11 / 11)100%(47 / 47)
net.js100%(5 / 5)100%(0 / 0)100%(0 / 0)100%(5 / 5)
property.js91.3%(21 / 23)70%(7 / 10)66.67%(4 / 6)91.3%(21 / 23)
qtsync.js100%(5 / 5)100%(0 / 0)100%(2 / 2)100%(5 / 5)
requestmanager.js85.53%(65 / 76)60.71%(17 / 28)100%(17 / 17)85.53%(65 / 76)
shh.js100%(9 / 9)100%(0 / 0)100%(0 / 0)100%(9 / 9)
signature.js100%(7 / 7)100%(0 / 0)100%(2 / 2)100%(7 / 7)
watches.js100%(16 / 16)100%(2 / 2)100%(3 / 3)100%(16 / 16)
-
-
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html deleted file mode 100644 index 3647bad..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/jsonrpc.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/jsonrpc.js

-

- - Statements: 88.89% (16 / 18)      - - - Branches: 81.82% (9 / 11)      - - - Functions: 100% (6 / 6)      - - - Lines: 88.89% (16 / 18)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -175 -  -  -175 -  -  -  -  -  -1 -172 -172 -  -  -  -  -  -  -  -  -  -  -1 -90 -  -  -90 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -95 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -4 -4 -4 -  -  -  -1 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file jsonrpc.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Jsonrpc = function () {
-    // singleton pattern
-    Iif (arguments.callee._singletonInstance) {
-        return arguments.callee._singletonInstance;
-    }
-    this.messageId = 1;
-};
- 
-/**
- * @return {Jsonrpc} singleton
- */
-Jsonrpc.getInstance = function () {
-    var instance = new Jsonrpc();
-    return instance;
-};
- 
-/**
- * Should be called to valid json create payload object
- *
- * @method toPayload
- * @param {Function} method of jsonrpc call, required
- * @param {Array} params, an array of method params, optional
- * @returns {Object} valid jsonrpc payload object
- */
-Jsonrpc.prototype.toPayload = function (method, params) {
-    Iif (!method)
-        console.error('jsonrpc method should be specified!');
- 
-    return {
-        jsonrpc: '2.0',
-        method: method,
-        params: params || [],
-        id: this.messageId++
-    }; 
-};
- 
-/**
- * Should be called to check if jsonrpc response is valid
- *
- * @method isValidResponse
- * @param {Object}
- * @returns {Boolean} true if response is valid, otherwise false 
- */
-Jsonrpc.prototype.isValidResponse = function (response) {
-    return !!response &&
-        !response.error &&
-        response.jsonrpc === '2.0' &&
-        typeof response.id === 'number' &&
-        response.result !== undefined; // only undefined is not valid json object
-};
- 
-/**
- * Should be called to create batch payload object
- *
- * @method toBatchPayload
- * @param {Array} messages, an array of objects with method (required) and params (optional) fields
- * @returns {Array} batch payload
- */
-Jsonrpc.prototype.toBatchPayload = function (messages) {
-    var self = this;
-    return messages.map(function (message) {
-        return self.toPayload(message.method, message.params);
-    }); 
-};
- 
-module.exports = Jsonrpc;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html deleted file mode 100644 index a144e51..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html +++ /dev/null @@ -1,534 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/method.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/method.js

-

- - Statements: 100% (47 / 47)      - - - Branches: 100% (22 / 22)      - - - Functions: 100% (11 / 11)      - - - Lines: 100% (47 / 47)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -1 -58 -58 -58 -58 -58 -  -  -  -  -  -  -  -  -  -1 -73 -  -  -  -  -  -  -  -  -  -1 -72 -32 -  -40 -  -  -  -  -  -  -  -  -  -1 -73 -2 -  -  -  -  -  -  -  -  -  -  -1 -71 -28 -  -  -43 -91 -  -  -  -  -  -  -  -  -  -  -1 -71 -  -  -  -  -  -  -  -  -  -1 -47 -47 -47 -47 -3 -3 -  -44 -  -  -  -  -  -  -  -  -  -  -1 -69 -69 -69 -69 -  -69 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -69 -69 -30 -30 -30 -  -  -39 -  -  -1 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @file method.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var RequestManager = require('./requestmanager');
-var utils = require('../utils/utils');
-var errors = require('./errors');
- 
-var Method = function (options) {
-    this.name = options.name;
-    this.call = options.call;
-    this.params = options.params || 0;
-    this.inputFormatter = options.inputFormatter;
-    this.outputFormatter = options.outputFormatter;
-};
- 
-/**
- * Should be used to determine name of the jsonrpc method based on arguments
- *
- * @method getCall
- * @param {Array} arguments
- * @return {String} name of jsonrpc method
- */
-Method.prototype.getCall = function (args) {
-    return utils.isFunction(this.call) ? this.call(args) : this.call;
-};
- 
-/**
- * Should be used to extract callback from array of arguments. Modifies input param
- *
- * @method extractCallback
- * @param {Array} arguments
- * @return {Function|Null} callback, if exists
- */
-Method.prototype.extractCallback = function (args) {
-    if (utils.isFunction(args[args.length - 1])) {
-        return args.pop(); // modify the args array!
-    }
-    return null;
-};
- 
-/**
- * Should be called to check if the number of arguments is correct
- * 
- * @method validateArgs
- * @param {Array} arguments
- * @throws {Error} if it is not
- */
-Method.prototype.validateArgs = function (args) {
-    if (args.length !== this.params) {
-        throw errors.InvalidNumberOfParams;
-    }
-};
- 
-/**
- * Should be called to format input args of method
- * 
- * @method formatInput
- * @param {Array}
- * @return {Array}
- */
-Method.prototype.formatInput = function (args) {
-    if (!this.inputFormatter) {
-        return args;
-    }
- 
-    return this.inputFormatter.map(function (formatter, index) {
-        return formatter ? formatter(args[index]) : args[index];
-    });
-};
- 
-/**
- * Should be called to format output(result) of method
- *
- * @method formatOutput
- * @param {Object}
- * @return {Object}
- */
-Method.prototype.formatOutput = function (result) {
-    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
-};
- 
-/**
- * Should attach function to method
- * 
- * @method attachToObject
- * @param {Object}
- * @param {Function}
- */
-Method.prototype.attachToObject = function (obj) {
-    var func = this.send.bind(this);
-    func.call = this.call; // that's ugly. filter.js uses it
-    var name = this.name.split('.');
-    if (name.length > 1) {
-        obj[name[0]] = obj[name[0]] || {};
-        obj[name[0]][name[1]] = func;
-    } else {
-        obj[name[0]] = func; 
-    }
-};
- 
-/**
- * Should create payload from given input args
- *
- * @method toPayload
- * @param {Array} args
- * @return {Object}
- */
-Method.prototype.toPayload = function (args) {
-    var call = this.getCall(args);
-    var callback = this.extractCallback(args);
-    var params = this.formatInput(args);
-    this.validateArgs(params);
- 
-    return {
-        method: call,
-        params: params,
-        callback: callback
-    };
-};
- 
-/**
- * Should send request to the API
- *
- * @method send
- * @param list of params
- * @return result
- */
-Method.prototype.send = function () {
-    var payload = this.toPayload(Array.prototype.slice.call(arguments));
-    if (payload.callback) {
-        var self = this;
-        return RequestManager.getInstance().sendAsync(payload, function (err, result) {
-            payload.callback(null, self.formatOutput(result));
-        });
-    }
-    return this.formatOutput(RequestManager.getInstance().send(payload));
-};
- 
-module.exports = Method;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html deleted file mode 100644 index b3da6ba..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/net.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/net.js

-

- - Statements: 100% (5 / 5)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (5 / 5)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file eth.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
-var Property = require('./property');
- 
-/// @returns an array of objects describing web3.eth api methods
-var methods = [
-];
- 
-/// @returns an array of objects describing web3.eth api properties
-var properties = [
-    new Property({
-        name: 'listening',
-        getter: 'net_listening'
-    }),
-    new Property({
-        name: 'peerCount',
-        getter: 'net_peerCount',
-        outputFormatter: utils.toDecimal
-    })
-];
- 
- 
-module.exports = {
-    methods: methods,
-    properties: properties
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html deleted file mode 100644 index 3d6e6b2..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html +++ /dev/null @@ -1,369 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/property.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/property.js

-

- - Statements: 91.3% (21 / 23)      - - - Branches: 70% (7 / 10)      - - - Functions: 66.67% (4 / 6)      - - - Lines: 91.3% (21 / 23)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -11 -11 -11 -11 -11 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -13 -  -  -  -  -  -  -  -  -  -1 -11 -  -  -  -  -11 -11 -4 -4 -  -7 -  -  -  -  -  -  -  -  -  -1 -13 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @file property.js
- * @author Fabian Vogelsteller <fabian@frozeman.de>
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var RequestManager = require('./requestmanager');
- 
-var Property = function (options) {
-    this.name = options.name;
-    this.getter = options.getter;
-    this.setter = options.setter;
-    this.outputFormatter = options.outputFormatter;
-    this.inputFormatter = options.inputFormatter;
-};
- 
-/**
- * Should be called to format input args of method
- * 
- * @method formatInput
- * @param {Array}
- * @return {Array}
- */
-Property.prototype.formatInput = function (arg) {
-    return this.inputFormatter ? this.inputFormatter(arg) : arg;
-};
- 
-/**
- * Should be called to format output(result) of method
- *
- * @method formatOutput
- * @param {Object}
- * @return {Object}
- */
-Property.prototype.formatOutput = function (result) {
-    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
-};
- 
-/**
- * Should attach function to method
- * 
- * @method attachToObject
- * @param {Object}
- * @param {Function}
- */
-Property.prototype.attachToObject = function (obj) {
-    var proto = {
-        get: this.get.bind(this),
-        set: this.set.bind(this)
-    };
- 
-    var name = this.name.split('.');
-    if (name.length > 1) {
-        obj[name[0]] = obj[name[0]] || {};
-        Object.defineProperty(obj[name[0]], name[1], proto); 
-    } else {
-        Object.defineProperty(obj, name[0], proto);
-    }
-};
- 
-/**
- * Should be used to get value of the property
- *
- * @method get
- * @return {Object} value of the property
- */
-Property.prototype.get = function () {
-    return this.formatOutput(RequestManager.getInstance().send({
-        method: this.getter
-    }));
-};
- 
-/**
- * Should be used to set value of the property
- *
- * @method set
- * @param {Object} new value of the property
- */
-Property.prototype.set = function (value) {
-    return RequestManager.getInstance().send({
-        method: this.setter,
-        params: [this.formatInput(value)]
-    });
-};
- 
-module.exports = Property;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html deleted file mode 100644 index 8bd50d2..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/qtsync.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/qtsync.js

-

- - Statements: 100% (5 / 5)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (2 / 2)      - - - Lines: 100% (5 / 5)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -2 -1 -1 -  -  -2 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file qtsync.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- *   Marian Oancea <marian@ethdev.com>
- * @date 2014
- */
- 
-var QtSyncProvider = function () {
-};
- 
-QtSyncProvider.prototype.send = function (payload) {
-    var result = navigator.qt.callMethod(JSON.stringify(payload));
-    return JSON.parse(result);
-};
- 
-module.exports = QtSyncProvider;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html deleted file mode 100644 index fc0b004..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html +++ /dev/null @@ -1,714 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/requestmanager.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/requestmanager.js

-

- - Statements: 85.53% (65 / 76)      - - - Branches: 60.71% (17 / 28)      - - - Functions: 100% (17 / 17)      - - - Lines: 85.53% (65 / 76)      - - Ignored: none      -

-
All files » ethereum.js/lib/web3/ » requestmanager.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -1 -  -212 -211 -  -1 -  -1 -1 -1 -1 -  -  -  -  -  -1 -212 -212 -  -  -  -  -  -  -  -  -  -1 -53 -  -  -  -  -53 -53 -  -53 -  -  -  -53 -  -  -  -  -  -  -  -  -  -1 -31 -  -  -  -31 -31 -31 -  -  -  -31 -  -  -  -31 -  -  -  -  -  -  -  -  -  -1 -125 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -  -  -  -  -  -  -  -  -1 -2 -1 -  -2 -  -2 -2 -2 -  -2 -  -  -  -  -  -  -  -1 -5 -  -5 -3 -  -  -2 -  -  -  -  -2 -2 -  -  -2 -2 -  -2 -  -  -  -2 -  -  -  -2 -2 -2 -  -2 -2 -  -  -2 -  -2 -  -2 -  -  -  -  -1 -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file requestmanager.js
- * @author Jeffrey Wilcke <jeff@ethdev.com>
- * @author Marek Kotewicz <marek@ethdev.com>
- * @author Marian Oancea <marian@ethdev.com>
- * @author Fabian Vogelsteller <fabian@ethdev.com>
- * @author Gav Wood <g@ethdev.com>
- * @date 2014
- */
- 
-var Jsonrpc = require('./jsonrpc');
-var utils = require('../utils/utils');
-var c = require('../utils/config');
-var errors = require('./errors');
- 
-/**
- * It's responsible for passing messages to providers
- * It's also responsible for polling the ethereum node for incoming messages
- * Default poll timeout is 1 second
- * Singleton
- */
-var RequestManager = function (provider) {
-    // singleton pattern
-    if (arguments.callee._singletonInstance) {
-        return arguments.callee._singletonInstance;
-    }
-    arguments.callee._singletonInstance = this;
- 
-    this.provider = provider;
-    this.polls = [];
-    this.timeout = null;
-    this.poll();
-};
- 
-/**
- * @return {RequestManager} singleton
- */
-RequestManager.getInstance = function () {
-    var instance = new RequestManager();
-    return instance;
-};
- 
-/**
- * Should be used to synchronously send request
- *
- * @method send
- * @param {Object} data
- * @return {Object}
- */
-RequestManager.prototype.send = function (data) {
-    Iif (!this.provider) {
-        console.error(errors.InvalidProvider);
-        return null;
-    }
- 
-    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
-    var result = this.provider.send(payload);
- 
-    Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
-        throw errors.InvalidResponse(result);
-    }
- 
-    return result.result;
-};
- 
-/**
- * Should be used to asynchronously send request
- *
- * @method sendAsync
- * @param {Object} data
- * @param {Function} callback
- */
-RequestManager.prototype.sendAsync = function (data, callback) {
-    Iif (!this.provider) {
-        return callback(errors.InvalidProvider);
-    }
- 
-    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
-    this.provider.sendAsync(payload, function (err, result) {
-        Iif (err) {
-            return callback(err);
-        }
-        
-        Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
-            return callback(errors.InvalidResponse(result));
-        }
- 
-        callback(null, result.result);
-    });
-};
- 
-/**
- * Should be used to set provider of request manager
- *
- * @method setProvider
- * @param {Object}
- */
-RequestManager.prototype.setProvider = function (p) {
-    this.provider = p;
-};
- 
-/*jshint maxparams:4 */
- 
-/**
- * Should be used to start polling
- *
- * @method startPolling
- * @param {Object} data
- * @param {Number} pollId
- * @param {Function} callback
- * @param {Function} uninstall
- *
- * @todo cleanup number of params
- */
-RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {
-    this.polls.push({data: data, id: pollId, callback: callback, uninstall: uninstall});
-};
-/*jshint maxparams:3 */
- 
-/**
- * Should be used to stop polling for filter with given id
- *
- * @method stopPolling
- * @param {Number} pollId
- */
-RequestManager.prototype.stopPolling = function (pollId) {
-    for (var i = this.polls.length; i--;) {
-        var poll = this.polls[i];
-        Eif (poll.id === pollId) {
-            this.polls.splice(i, 1);
-        }
-    }
-};
- 
-/**
- * Should be called to reset polling mechanism of request manager
- *
- * @method reset
- */
-RequestManager.prototype.reset = function () {
-    this.polls.forEach(function (poll) {
-        poll.uninstall(poll.id); 
-    });
-    this.polls = [];
- 
-    Eif (this.timeout) {
-        clearTimeout(this.timeout);
-        this.timeout = null;
-    }
-    this.poll();
-};
- 
-/**
- * Should be called to poll for changes on filter with given id
- *
- * @method poll
- */
-RequestManager.prototype.poll = function () {
-    this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);
- 
-    if (!this.polls.length) {
-        return;
-    }
- 
-    Iif (!this.provider) {
-        console.error(errors.InvalidProvider);
-        return;
-    }
- 
-    var payload = Jsonrpc.getInstance().toBatchPayload(this.polls.map(function (data) {
-        return data.data;
-    }));
- 
-    var self = this;
-    this.provider.sendAsync(payload, function (error, results) {
-        // TODO: console log?
-        Iif (error) {
-            return;
-        }
-            
-        Iif (!utils.isArray(results)) {
-            throw errors.InvalidResponse(results);
-        }
- 
-        results.map(function (result, index) {
-            result.callback = self.polls[index].callback;
-            return result;
-        }).filter(function (result) {
-            var valid = Jsonrpc.getInstance().isValidResponse(result);
-            Iif (!valid) {
-                result.callback(errors.InvalidResponse(result));
-            }
-            return valid;
-        }).filter(function (result) {
-            return utils.isArray(result.result) && result.result.length > 0;
-        }).forEach(function (result) {
-            result.callback(null, result.result);
-        });
-    });
-};
- 
-module.exports = RequestManager;
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html deleted file mode 100644 index 4d5162f..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/shh.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/shh.js

-

- - Statements: 100% (9 / 9)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (9 / 9)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file shh.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Method = require('./method');
-var formatters = require('./formatters');
- 
-var post = new Method({
-    name: 'post', 
-    call: 'shh_post', 
-    params: 1,
-    inputFormatter: formatters.inputPostFormatter
-});
- 
-var newIdentity = new Method({
-    name: 'newIdentity',
-    call: 'shh_newIdentity',
-    params: 0
-});
- 
-var hasIdentity = new Method({
-    name: 'hasIdentity',
-    call: 'shh_hasIdentity',
-    params: 1
-});
- 
-var newGroup = new Method({
-    name: 'newGroup',
-    call: 'shh_newGroup',
-    params: 0
-});
- 
-var addToGroup = new Method({
-    name: 'addToGroup',
-    call: 'shh_addToGroup',
-    params: 0
-});
- 
-var methods = [
-    post,
-    newIdentity,
-    hasIdentity,
-    newGroup,
-    addToGroup
-];
- 
-module.exports = {
-    methods: methods
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html deleted file mode 100644 index ab4d2fc..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/signature.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/signature.js

-

- - Statements: 100% (7 / 7)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (2 / 2)      - - - Lines: 100% (7 / 7)      - - Ignored: none      -

-
All files » ethereum.js/lib/web3/ » signature.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -1 -1 -  -  -  -  -1 -2 -  -  -1 -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file signature.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var web3 = require('../web3'); 
-var c = require('../utils/config');
- 
-/// @param function name for which we want to get signature
-/// @returns signature of function with given name
-var functionSignatureFromAscii = function (name) {
-    return web3.sha3(web3.fromAscii(name)).slice(0, 2 + c.ETH_SIGNATURE_LENGTH * 2);
-};
- 
-/// @param event name for which we want to get signature
-/// @returns signature of event with given name
-var eventSignatureFromAscii = function (name) {
-    return web3.sha3(web3.fromAscii(name));
-};
- 
-module.exports = {
-    functionSignatureFromAscii: functionSignatureFromAscii,
-    eventSignatureFromAscii: eventSignatureFromAscii
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html deleted file mode 100644 index 66f6a8a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html +++ /dev/null @@ -1,360 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/watches.js - - - - - - - - -
-

Code coverage report for ethereum.js/lib/web3/watches.js

-

- - Statements: 100% (16 / 16)      - - - Branches: 100% (2 / 2)      - - - Functions: 100% (3 / 3)      - - - Lines: 100% (16 / 16)      - - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -1 -4 -4 -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  - 
/*
-    This file is part of ethereum.js.
- 
-    ethereum.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    ethereum.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file watches.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Method = require('./method');
- 
-/// @returns an array of objects describing web3.eth.filter api methods
-var eth = function () {
-    var newFilterCall = function (args) {
-        return typeof args[0] === 'string' ? 'eth_newBlockFilter' : 'eth_newFilter';
-    };
- 
-    var newFilter = new Method({
-        name: 'newFilter',
-        call: newFilterCall,
-        params: 1
-    });
- 
-    var uninstallFilter = new Method({
-        name: 'uninstallFilter',
-        call: 'eth_uninstallFilter',
-        params: 1
-    });
- 
-    var getLogs = new Method({
-        name: 'getLogs',
-        call: 'eth_getFilterLogs',
-        params: 1
-    });
- 
-    var poll = new Method({
-        name: 'poll',
-        call: 'eth_getFilterChanges',
-        params: 1
-    });
- 
-    return [
-        newFilter,
-        uninstallFilter,
-        getLogs,
-        poll
-    ];
-};
- 
-/// @returns an array of objects describing web3.shh.watch api methods
-var shh = function () {
-    var newFilter = new Method({
-        name: 'newFilter',
-        call: 'shh_newFilter',
-        params: 1
-    });
- 
-    var uninstallFilter = new Method({
-        name: 'uninstallFilter',
-        call: 'shh_uninstallFilter',
-        params: 1
-    });
- 
-    var getLogs = new Method({
-        name: 'getLogs',
-        call: 'shh_getMessages',
-        params: 1
-    });
- 
-    var poll = new Method({
-        name: 'poll',
-        call: 'shh_getFilterChanges',
-        params: 1
-    });
- 
-    return [
-        newFilter,
-        uninstallFilter,
-        getLogs,
-        poll
-    ];
-};
- 
-module.exports = {
-    eth: eth,
-    shh: shh
-};
- 
- 
- -
- - - - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/index.html deleted file mode 100644 index b24a51c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/index.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - Code coverage report for All files - - - - - - -
-

Code coverage report for All files

-

- Statements: 83.81% (1538 / 1835)      - Branches: 66.25% (426 / 643)      - Functions: 85.5% (336 / 393)      - Lines: 83.78% (1534 / 1831)      - Ignored: none      -

-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
web3/75%(3 / 4)50%(2 / 4)100%(0 / 0)75%(3 / 4)
web3/lib/98.25%(56 / 57)0%(0 / 2)85.71%(6 / 7)98.25%(56 / 57)
web3/lib/solidity/93.88%(368 / 392)79.03%(49 / 62)88.12%(89 / 101)93.88%(368 / 392)
web3/lib/utils/96.4%(134 / 139)81.82%(63 / 77)96.55%(28 / 29)96.38%(133 / 138)
web3/lib/web3/85.02%(840 / 988)67.4%(275 / 408)86.7%(189 / 218)84.97%(837 / 985)
web3/lib/web3/methods/95%(114 / 120)100%(20 / 20)85.19%(23 / 27)95%(114 / 120)
web3/node_modules/utf8/17.04%(23 / 135)24.29%(17 / 70)9.09%(1 / 11)17.04%(23 / 135)
-
-
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/prettify.css b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/prettify.js b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a..0000000 Binary files a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png and /dev/null differ diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/sorter.js b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/sorter.js deleted file mode 100644 index 6afb736..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/sorter.js +++ /dev/null @@ -1,156 +0,0 @@ -var addSorting = (function () { - "use strict"; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { return document.querySelector('.coverage-summary table'); } - // returns the thead element of the summary table - function getTableHeader() { return getTable().querySelector('thead tr'); } - // returns the tbody element of the summary table - function getTableBody() { return getTable().querySelector('tbody'); } - // returns the th element for nth column - function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - el = getNthColumn(i).querySelector('.sorter'); - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/index.html deleted file mode 100644 index 4b23bc9..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for web3/ - - - - - - -
-

Code coverage report for web3/

-

- Statements: 75% (3 / 4)      - Branches: 50% (2 / 4)      - Functions: 100% (0 / 0)      - Lines: 75% (3 / 4)      - Ignored: none      -

-
All files » web3/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
index.js75%(3 / 4)50%(2 / 4)100%(0 / 0)75%(3 / 4)
-
-
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/index.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/index.js.html deleted file mode 100644 index c0c10d1..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/index.js.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - Code coverage report for web3/index.js - - - - - - -
-

Code coverage report for web3/index.js

-

- Statements: 75% (3 / 4)      - Branches: 50% (2 / 4)      - Functions: 100% (0 / 0)      - Lines: 75% (3 / 4)      - Ignored: none      -

-
All files » web3/ » index.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -91 -  -  -1 -  -  -  -1 - 
var Web3 = require('./lib/web3');
- 
-// dont override global variable
-Iif (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {
-    window.Web3 = Web3;
-}
- 
-module.exports = Web3;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/index.html deleted file mode 100644 index 4dd2115..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for web3/lib/ - - - - - - -
-

Code coverage report for web3/lib/

-

- Statements: 98.25% (56 / 57)      - Branches: 0% (0 / 2)      - Functions: 85.71% (6 / 7)      - Lines: 98.25% (56 / 57)      - Ignored: none      -

-
All files » web3/lib/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
web3.js98.25%(56 / 57)0%(0 / 2)85.71%(6 / 7)98.25%(56 / 57)
-
-
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html deleted file mode 100644 index eb7a8d4..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/address.js - - - - - - -
-

Code coverage report for web3/lib/solidity/address.js

-

- Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

-
All files » web3/lib/solidity/ » address.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -321 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -100 -  -  -1 -  - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-/**
- * SolidityTypeAddress is a prootype that represents address type
- * It matches:
- * address
- * address[]
- * address[4]
- * address[][]
- * address[3][]
- * address[][6][], ...
- */
-var SolidityTypeAddress = function () {
-    this._inputFormatter = f.formatInputInt;
-    this._outputFormatter = f.formatOutputAddress;
-};
- 
-SolidityTypeAddress.prototype = new SolidityType({});
-SolidityTypeAddress.prototype.constructor = SolidityTypeAddress;
- 
-SolidityTypeAddress.prototype.isType = function (name) {
-    return !!name.match(/address(\[([0-9]*)\])?/);
-};
- 
-SolidityTypeAddress.prototype.staticPartLength = function (name) {
-    return 32 * this.staticArrayLength(name);
-};
- 
-module.exports = SolidityTypeAddress;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html deleted file mode 100644 index 14a9396..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/bool.js - - - - - - -
-

Code coverage report for web3/lib/solidity/bool.js

-

- Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -311 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -44 -  -  -1 - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-/**
- * SolidityTypeBool is a prootype that represents bool type
- * It matches:
- * bool
- * bool[]
- * bool[4]
- * bool[][]
- * bool[3][]
- * bool[][6][], ...
- */
-var SolidityTypeBool = function () {
-    this._inputFormatter = f.formatInputBool;
-    this._outputFormatter = f.formatOutputBool;
-};
- 
-SolidityTypeBool.prototype = new SolidityType({});
-SolidityTypeBool.prototype.constructor = SolidityTypeBool;
- 
-SolidityTypeBool.prototype.isType = function (name) {
-    return !!name.match(/^bool(\[([0-9]*)\])*$/);
-};
- 
-SolidityTypeBool.prototype.staticPartLength = function (name) {
-    return 32 * this.staticArrayLength(name);
-};
- 
-module.exports = SolidityTypeBool;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html deleted file mode 100644 index c07aefc..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/bytes.js - - - - - - -
-

Code coverage report for web3/lib/solidity/bytes.js

-

- Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (14 / 14)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -391 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -38 -38 -38 -  -  -1 - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-/**
- * SolidityTypeBytes is a prootype that represents bytes type
- * It matches:
- * bytes
- * bytes[]
- * bytes[4]
- * bytes[][]
- * bytes[3][]
- * bytes[][6][], ...
- * bytes32
- * bytes64[]
- * bytes8[4]
- * bytes256[][]
- * bytes[3][]
- * bytes64[][6][], ...
- */
-var SolidityTypeBytes = function () {
-    this._inputFormatter = f.formatInputBytes;
-    this._outputFormatter = f.formatOutputBytes;
-};
- 
-SolidityTypeBytes.prototype = new SolidityType({});
-SolidityTypeBytes.prototype.constructor = SolidityTypeBytes;
- 
-SolidityTypeBytes.prototype.isType = function (name) {
-    return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/);
-};
- 
-SolidityTypeBytes.prototype.staticPartLength = function (name) {
-    var matches = name.match(/^bytes([0-9]*)/);
-    var size = parseInt(matches[1]);
-    return size * this.staticArrayLength(name);
-};
- 
-module.exports = SolidityTypeBytes;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html deleted file mode 100644 index 7451a42..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html +++ /dev/null @@ -1,825 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/coder.js - - - - - - -
-

Code coverage report for web3/lib/solidity/coder.js

-

- Statements: 96.12% (99 / 103)      - Branches: 81.82% (18 / 22)      - Functions: 100% (26 / 26)      - Lines: 96.12% (99 / 103)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -267 -2403 -  -  -267 -  -  -  -267 -  -  -  -  -  -  -  -  -  -  -1 -64 -  -  -  -  -  -  -  -  -  -  -1 -107 -  -107 -135 -  -  -107 -135 -135 -135 -  -  -107 -  -107 -  -  -1 -107 -107 -  -107 -270 -  -  -107 -135 -43 -43 -43 -  -  -92 -  -  -  -  -  -107 -135 -43 -43 -43 -  -  -107 -  -  -  -1 -287 -287 -42 -  -42 -42 -42 -  -42 -42 -42 -  -  -  -  -  -  -  -  -42 -42 -82 -82 -  -  -  -42 -  -  -245 -13 -13 -13 -13 -  -  -13 -1 -1 -1 -  -2 -2 -  -  -  -  -13 -13 -27 -27 -  -  -  -13 -  -  -  -232 -  -  -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -  -  -1 -106 -106 -  -106 -132 -  -  -  -1 -106 -132 -  -  -106 -  -29 -  -  -106 -  -132 -132 -  -  -  -1 -213 -213 -267 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file coder.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var f = require('./formatters');
- 
-var SolidityTypeAddress = require('./address');
-var SolidityTypeBool = require('./bool');
-var SolidityTypeInt = require('./int');
-var SolidityTypeUInt = require('./uint');
-var SolidityTypeDynamicBytes = require('./dynamicbytes');
-var SolidityTypeString = require('./string');
-var SolidityTypeReal = require('./real');
-var SolidityTypeUReal = require('./ureal');
-var SolidityTypeBytes = require('./bytes');
- 
-/**
- * SolidityCoder prototype should be used to encode/decode solidity params of any type
- */
-var SolidityCoder = function (types) {
-    this._types = types;
-};
- 
-/**
- * This method should be used to transform type to SolidityType
- *
- * @method _requireType
- * @param {String} type
- * @returns {SolidityType} 
- * @throws {Error} throws if no matching type is found
- */
-SolidityCoder.prototype._requireType = function (type) {
-    var solidityType = this._types.filter(function (t) {
-        return t.isType(type);
-    })[0];
- 
-    Iif (!solidityType) {
-        throw Error('invalid solidity type!: ' + type);
-    }
- 
-    return solidityType;
-};
- 
-/**
- * Should be used to encode plain param
- *
- * @method encodeParam
- * @param {String} type
- * @param {Object} plain param
- * @return {String} encoded plain param
- */
-SolidityCoder.prototype.encodeParam = function (type, param) {
-    return this.encodeParams([type], [param]);
-};
- 
-/**
- * Should be used to encode list of params
- *
- * @method encodeParams
- * @param {Array} types
- * @param {Array} params
- * @return {String} encoded list of params
- */
-SolidityCoder.prototype.encodeParams = function (types, params) {
-    var solidityTypes = this.getSolidityTypes(types);
- 
-    var encodeds = solidityTypes.map(function (solidityType, index) {
-        return solidityType.encode(params[index], types[index]);
-    });
- 
-    var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {
-        var staticPartLength = solidityType.staticPartLength(types[index]);
-        var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;
-        return acc + roundedStaticPartLength;
-    }, 0);
- 
-    var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); 
- 
-    return result;
-};
- 
-SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {
-    var result = "";
-    var self = this;
- 
-    var isDynamic = function (i) {
-       return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]);
-    };
- 
-    types.forEach(function (type, i) {
-        if (isDynamic(i)) {
-            result += f.formatInputInt(dynamicOffset).encode();
-            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
-            dynamicOffset += e.length / 2;
-        } else {
-            // don't add length to dynamicOffset. it's already counted
-            result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
-        }
- 
-        // TODO: figure out nested arrays
-    });
-    
-    types.forEach(function (type, i) {
-        if (isDynamic(i)) {
-            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
-            dynamicOffset += e.length / 2;
-            result += e;
-        }
-    });
-    return result;
-};
- 
-// TODO: refactor whole encoding!
-SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {
-    var self = this;
-    if (solidityType.isDynamicArray(type)) {
-        return (function () {
-            // offset was already set
-            var nestedName = solidityType.nestedName(type);
-            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
-            var result = encoded[0];
-            
-            (function () {
-                var previousLength = 2; // in int
-                Iif (solidityType.isDynamicArray(nestedName)) {
-                    for (var i = 1; i < encoded.length; i++) {
-                        previousLength += +(encoded[i - 1])[0] || 0;
-                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
-                    }
-                }
-            })();
-            
-            // first element is length, skip it
-            (function () {
-                for (var i = 0; i < encoded.length - 1; i++) {
-                    var additionalOffset = result / 2;
-                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset +  additionalOffset);
-                }
-            })();
- 
-            return result;
-        })();
-       
-    } else if (solidityType.isStaticArray(type)) {
-        return (function () {
-            var nestedName = solidityType.nestedName(type);
-            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
-            var result = "";
- 
- 
-            if (solidityType.isDynamicArray(nestedName)) {
-                (function () {
-                    var previousLength = 0; // in int
-                    for (var i = 0; i < encoded.length; i++) {
-                        // calculate length of previous item
-                        previousLength += +(encoded[i - 1] || [])[0] || 0; 
-                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
-                    }
-                })();
-            }
- 
-            (function () {
-                for (var i = 0; i < encoded.length; i++) {
-                    var additionalOffset = result / 2;
-                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset);
-                }
-            })();
- 
-            return result;
-        })();
-    }
- 
-    return encoded;
-};
- 
-/**
- * Should be used to decode bytes to plain param
- *
- * @method decodeParam
- * @param {String} type
- * @param {String} bytes
- * @return {Object} plain param
- */
-SolidityCoder.prototype.decodeParam = function (type, bytes) {
-    return this.decodeParams([type], bytes)[0];
-};
- 
-/**
- * Should be used to decode list of params
- *
- * @method decodeParam
- * @param {Array} types
- * @param {String} bytes
- * @return {Array} array of plain params
- */
-SolidityCoder.prototype.decodeParams = function (types, bytes) {
-    var solidityTypes = this.getSolidityTypes(types);
-    var offsets = this.getOffsets(types, solidityTypes);
-        
-    return solidityTypes.map(function (solidityType, index) {
-        return solidityType.decode(bytes, offsets[index],  types[index], index);
-    });
-};
- 
-SolidityCoder.prototype.getOffsets = function (types, solidityTypes) {
-    var lengths =  solidityTypes.map(function (solidityType, index) {
-        return solidityType.staticPartLength(types[index]);
-    });
-    
-    for (var i = 1; i < lengths.length; i++) {
-         // sum with length of previous element
-        lengths[i] += lengths[i - 1]; 
-    }
- 
-    return lengths.map(function (length, index) {
-        // remove the current length, so the length is sum of previous elements
-        var staticPartLength = solidityTypes[index].staticPartLength(types[index]);
-        return length - staticPartLength; 
-    });
-};
- 
-SolidityCoder.prototype.getSolidityTypes = function (types) {
-    var self = this;
-    return types.map(function (type) {
-        return self._requireType(type);
-    });
-};
- 
-var coder = new SolidityCoder([
-    new SolidityTypeAddress(),
-    new SolidityTypeBool(),
-    new SolidityTypeInt(),
-    new SolidityTypeUInt(),
-    new SolidityTypeDynamicBytes(),
-    new SolidityTypeBytes(),
-    new SolidityTypeString(),
-    new SolidityTypeReal(),
-    new SolidityTypeUReal()
-]);
- 
-module.exports = coder;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html deleted file mode 100644 index db77fe2..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/dynamicbytes.js - - - - - - -
-

Code coverage report for web3/lib/solidity/dynamicbytes.js

-

- Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (4 / 4)      - Lines: 100% (14 / 14)      - Ignored: none      -

-
All files » web3/lib/solidity/ » dynamicbytes.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -261 -1 -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -37 -  -  -1 -33 -  -  -1 -  - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-var SolidityTypeDynamicBytes = function () {
-    this._inputFormatter = f.formatInputDynamicBytes;
-    this._outputFormatter = f.formatOutputDynamicBytes;
-};
- 
-SolidityTypeDynamicBytes.prototype = new SolidityType({});
-SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;
- 
-SolidityTypeDynamicBytes.prototype.isType = function (name) {
-    return !!name.match(/^bytes(\[([0-9]*)\])*$/);
-};
- 
-SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) {
-    return 32 * this.staticArrayLength(name);
-};
- 
-SolidityTypeDynamicBytes.prototype.isDynamicType = function () {
-    return true;
-};
- 
-module.exports = SolidityTypeDynamicBytes;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html deleted file mode 100644 index 2958567..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html +++ /dev/null @@ -1,795 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/formatters.js - - - - - - -
-

Code coverage report for web3/lib/solidity/formatters.js

-

- Statements: 98.28% (57 / 58)      - Branches: 80% (8 / 10)      - Functions: 93.75% (15 / 16)      - Lines: 98.28% (57 / 58)      - Ignored: none      -

-
All files » web3/lib/solidity/ » formatters.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -205 -205 -205 -  -  -  -  -  -  -  -  -  -1 -15 -15 -15 -15 -  -  -  -  -  -  -  -  -  -1 -9 -9 -9 -9 -9 -  -  -  -  -  -  -  -  -  -1 -14 -14 -14 -14 -14 -  -  -  -  -  -  -  -  -  -1 -15 -15 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -61 -  -  -  -  -  -  -  -  -  -1 -61 -  -  -  -61 -3 -  -58 -  -  -  -  -  -  -  -  -  -1 -45 -45 -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -12 -  -  -  -  -  -  -  -  -  -1 -10 -  -  -  -  -  -  -  -  -  -1 -15 -15 -  -  -  -  -  -  -  -  -  -1 -7 -7 -  -  -  -  -  -  -  -  -  -1 -26 -26 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file formatters.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var BigNumber = require('bignumber.js');
-var utils = require('../utils/utils');
-var c = require('../utils/config');
-var SolidityParam = require('./param');
- 
- 
-/**
- * Formats input value to byte representation of int
- * If value is negative, return it's two's complement
- * If the value is floating point, round it down
- *
- * @method formatInputInt
- * @param {String|Number|BigNumber} value that needs to be formatted
- * @returns {SolidityParam}
- */
-var formatInputInt = function (value) {
-    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
-    var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64);
-    return new SolidityParam(result);
-};
- 
-/**
- * Formats input bytes
- *
- * @method formatInputBytes
- * @param {String}
- * @returns {SolidityParam}
- */
-var formatInputBytes = function (value) {
-    var result = utils.toHex(value).substr(2);
-    var l = Math.floor((result.length + 63) / 64);
-    result = utils.padRight(result, l * 64);
-    return new SolidityParam(result);
-};
- 
-/**
- * Formats input bytes
- *
- * @method formatDynamicInputBytes
- * @param {String}
- * @returns {SolidityParam}
- */
-var formatInputDynamicBytes = function (value) {
-    var result = utils.toHex(value).substr(2);
-    var length = result.length / 2;
-    var l = Math.floor((result.length + 63) / 64);
-    result = utils.padRight(result, l * 64);
-    return new SolidityParam(formatInputInt(length).value + result);
-};
- 
-/**
- * Formats input value to byte representation of string
- *
- * @method formatInputString
- * @param {String}
- * @returns {SolidityParam}
- */
-var formatInputString = function (value) {
-    var result = utils.fromUtf8(value).substr(2);
-    var length = result.length / 2;
-    var l = Math.floor((result.length + 63) / 64);
-    result = utils.padRight(result, l * 64);
-    return new SolidityParam(formatInputInt(length).value + result);
-};
- 
-/**
- * Formats input value to byte representation of bool
- *
- * @method formatInputBool
- * @param {Boolean}
- * @returns {SolidityParam}
- */
-var formatInputBool = function (value) {
-    var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
-    return new SolidityParam(result);
-};
- 
-/**
- * Formats input value to byte representation of real
- * Values are multiplied by 2^m and encoded as integers
- *
- * @method formatInputReal
- * @param {String|Number|BigNumber}
- * @returns {SolidityParam}
- */
-var formatInputReal = function (value) {
-    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));
-};
- 
-/**
- * Check if input value is negative
- *
- * @method signedIsNegative
- * @param {String} value is hex format
- * @returns {Boolean} true if it is negative, otherwise false
- */
-var signedIsNegative = function (value) {
-    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
-};
- 
-/**
- * Formats right-aligned output bytes to int
- *
- * @method formatOutputInt
- * @param {SolidityParam} param
- * @returns {BigNumber} right-aligned output bytes formatted to big number
- */
-var formatOutputInt = function (param) {
-    var value = param.staticPart() || "0";
- 
-    // check if it's negative number
-    // it it is, return two's complement
-    if (signedIsNegative(value)) {
-        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
-    }
-    return new BigNumber(value, 16);
-};
- 
-/**
- * Formats right-aligned output bytes to uint
- *
- * @method formatOutputUInt
- * @param {SolidityParam}
- * @returns {BigNumeber} right-aligned output bytes formatted to uint
- */
-var formatOutputUInt = function (param) {
-    var value = param.staticPart() || "0";
-    return new BigNumber(value, 16);
-};
- 
-/**
- * Formats right-aligned output bytes to real
- *
- * @method formatOutputReal
- * @param {SolidityParam}
- * @returns {BigNumber} input bytes formatted to real
- */
-var formatOutputReal = function (param) {
-    return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); 
-};
- 
-/**
- * Formats right-aligned output bytes to ureal
- *
- * @method formatOutputUReal
- * @param {SolidityParam}
- * @returns {BigNumber} input bytes formatted to ureal
- */
-var formatOutputUReal = function (param) {
-    return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); 
-};
- 
-/**
- * Should be used to format output bool
- *
- * @method formatOutputBool
- * @param {SolidityParam}
- * @returns {Boolean} right-aligned input bytes formatted to bool
- */
-var formatOutputBool = function (param) {
-    return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
-};
- 
-/**
- * Should be used to format output bytes
- *
- * @method formatOutputBytes
- * @param {SolidityParam} left-aligned hex representation of string
- * @returns {String} hex string
- */
-var formatOutputBytes = function (param) {
-    return '0x' + param.staticPart();
-};
- 
-/**
- * Should be used to format output bytes
- *
- * @method formatOutputDynamicBytes
- * @param {SolidityParam} left-aligned hex representation of string
- * @returns {String} hex string
- */
-var formatOutputDynamicBytes = function (param) {
-    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
-    return '0x' + param.dynamicPart().substr(64, length);
-};
- 
-/**
- * Should be used to format output string
- *
- * @method formatOutputString
- * @param {SolidityParam} left-aligned hex representation of string
- * @returns {String} ascii string
- */
-var formatOutputString = function (param) {
-    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
-    return utils.toUtf8(param.dynamicPart().substr(64, length));
-};
- 
-/**
- * Should be used to format output address
- *
- * @method formatOutputAddress
- * @param {SolidityParam} right-aligned input bytes
- * @returns {String} address
- */
-var formatOutputAddress = function (param) {
-    var value = param.staticPart();
-    return "0x" + value.slice(value.length - 40, value.length);
-};
- 
-module.exports = {
-    formatInputInt: formatInputInt,
-    formatInputBytes: formatInputBytes,
-    formatInputDynamicBytes: formatInputDynamicBytes,
-    formatInputString: formatInputString,
-    formatInputBool: formatInputBool,
-    formatInputReal: formatInputReal,
-    formatOutputInt: formatOutputInt,
-    formatOutputUInt: formatOutputUInt,
-    formatOutputReal: formatOutputReal,
-    formatOutputUReal: formatOutputUReal,
-    formatOutputBool: formatOutputBool,
-    formatOutputBytes: formatOutputBytes,
-    formatOutputDynamicBytes: formatOutputDynamicBytes,
-    formatOutputString: formatOutputString,
-    formatOutputAddress: formatOutputAddress
-};
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html deleted file mode 100644 index 4b24547..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/ - - - - - - -
-

Code coverage report for web3/lib/solidity/

-

- Statements: 93.88% (368 / 392)      - Branches: 79.03% (49 / 62)      - Functions: 88.12% (89 / 101)      - Lines: 93.88% (368 / 392)      - Ignored: none      -

-
All files » web3/lib/solidity/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
address.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
bool.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
bytes.js100%(14 / 14)100%(0 / 0)100%(3 / 3)100%(14 / 14)
coder.js96.12%(99 / 103)81.82%(18 / 22)100%(26 / 26)96.12%(99 / 103)
dynamicbytes.js100%(14 / 14)100%(0 / 0)100%(4 / 4)100%(14 / 14)
formatters.js98.28%(57 / 58)80%(8 / 10)93.75%(15 / 16)98.28%(57 / 58)
int.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
param.js55.88%(19 / 34)40%(4 / 10)38.46%(5 / 13)55.88%(19 / 34)
real.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
string.js100%(14 / 14)100%(0 / 0)100%(4 / 4)100%(14 / 14)
type.js96.39%(80 / 83)95%(19 / 20)88.24%(15 / 17)96.39%(80 / 83)
uint.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
ureal.js91.67%(11 / 12)100%(0 / 0)66.67%(2 / 3)91.67%(11 / 12)
-
-
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html deleted file mode 100644 index 5d4084c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/int.js - - - - - - -
-

Code coverage report for web3/lib/solidity/int.js

-

- Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -234 -  -  -1 - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-/**
- * SolidityTypeInt is a prootype that represents int type
- * It matches:
- * int
- * int[]
- * int[4]
- * int[][]
- * int[3][]
- * int[][6][], ...
- * int32
- * int64[]
- * int8[4]
- * int256[][]
- * int[3][]
- * int64[][6][], ...
- */
-var SolidityTypeInt = function () {
-    this._inputFormatter = f.formatInputInt;
-    this._outputFormatter = f.formatOutputInt;
-};
- 
-SolidityTypeInt.prototype = new SolidityType({});
-SolidityTypeInt.prototype.constructor = SolidityTypeInt;
- 
-SolidityTypeInt.prototype.isType = function (name) {
-    return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/);
-};
- 
-SolidityTypeInt.prototype.staticPartLength = function (name) {
-    return 32 * this.staticArrayLength(name);
-};
- 
-module.exports = SolidityTypeInt;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html deleted file mode 100644 index a2c3d9f..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/param.js - - - - - - -
-

Code coverage report for web3/lib/solidity/param.js

-

- Statements: 55.88% (19 / 34)      - Branches: 40% (4 / 10)      - Functions: 38.46% (5 / 13)      - Lines: 55.88% (19 / 34)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -1 -434 -434 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -668 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -1 -389 -389 -  -  -  -  -  -  -  -  -  -  -1 -279 -  -  -  -  -  -  -  -  -1 -235 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file param.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
- 
-/**
- * SolidityParam object prototype.
- * Should be used when encoding, decoding solidity bytes
- */
-var SolidityParam = function (value, offset) {
-    this.value = value || '';
-    this.offset = offset; // offset in bytes
-};
- 
-/**
- * This method should be used to get length of params's dynamic part
- * 
- * @method dynamicPartLength
- * @returns {Number} length of dynamic part (in bytes)
- */
-SolidityParam.prototype.dynamicPartLength = function () {
-    return this.dynamicPart().length / 2;
-};
- 
-/**
- * This method should be used to create copy of solidity param with different offset
- *
- * @method withOffset
- * @param {Number} offset length in bytes
- * @returns {SolidityParam} new solidity param with applied offset
- */
-SolidityParam.prototype.withOffset = function (offset) {
-    return new SolidityParam(this.value, offset);
-};
- 
-/**
- * This method should be used to combine solidity params together
- * eg. when appending an array
- *
- * @method combine
- * @param {SolidityParam} param with which we should combine
- * @param {SolidityParam} result of combination
- */
-SolidityParam.prototype.combine = function (param) {
-    return new SolidityParam(this.value + param.value); 
-};
- 
-/**
- * This method should be called to check if param has dynamic size.
- * If it has, it returns true, otherwise false
- *
- * @method isDynamic
- * @returns {Boolean}
- */
-SolidityParam.prototype.isDynamic = function () {
-    return this.offset !== undefined;
-};
- 
-/**
- * This method should be called to transform offset to bytes
- *
- * @method offsetAsBytes
- * @returns {String} bytes representation of offset
- */
-SolidityParam.prototype.offsetAsBytes = function () {
-    return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);
-};
- 
-/**
- * This method should be called to get static part of param
- *
- * @method staticPart
- * @returns {String} offset if it is a dynamic param, otherwise value
- */
-SolidityParam.prototype.staticPart = function () {
-    Eif (!this.isDynamic()) {
-        return this.value; 
-    } 
-    return this.offsetAsBytes();
-};
- 
-/**
- * This method should be called to get dynamic part of param
- *
- * @method dynamicPart
- * @returns {String} returns a value if it is a dynamic param, otherwise empty string
- */
-SolidityParam.prototype.dynamicPart = function () {
-    return this.isDynamic() ? this.value : '';
-};
- 
-/**
- * This method should be called to encode param
- *
- * @method encode
- * @returns {String}
- */
-SolidityParam.prototype.encode = function () {
-    return this.staticPart() + this.dynamicPart();
-};
- 
-/**
- * This method should be called to encode array of params
- *
- * @method encodeList
- * @param {Array[SolidityParam]} params
- * @returns {String}
- */
-SolidityParam.encodeList = function (params) {
-    
-    // updating offsets
-    var totalOffset = params.length * 32;
-    var offsetParams = params.map(function (param) {
-        if (!param.isDynamic()) {
-            return param;
-        }
-        var offset = totalOffset;
-        totalOffset += param.dynamicPartLength();
-        return param.withOffset(offset);
-    });
- 
-    // encode everything!
-    return offsetParams.reduce(function (result, param) {
-        return result + param.dynamicPart();
-    }, offsetParams.reduce(function (result, param) {
-        return result + param.staticPart();
-    }, ''));
-};
- 
- 
- 
-module.exports = SolidityParam;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html deleted file mode 100644 index 624ddb3..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/real.js - - - - - - -
-

Code coverage report for web3/lib/solidity/real.js

-

- Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -28 -  -  -1 - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-/**
- * SolidityTypeReal is a prootype that represents real type
- * It matches:
- * real
- * real[]
- * real[4]
- * real[][]
- * real[3][]
- * real[][6][], ...
- * real32
- * real64[]
- * real8[4]
- * real256[][]
- * real[3][]
- * real64[][6][], ...
- */
-var SolidityTypeReal = function () {
-    this._inputFormatter = f.formatInputReal;
-    this._outputFormatter = f.formatOutputReal;
-};
- 
-SolidityTypeReal.prototype = new SolidityType({});
-SolidityTypeReal.prototype.constructor = SolidityTypeReal;
- 
-SolidityTypeReal.prototype.isType = function (name) {
-    return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/);
-};
- 
-SolidityTypeReal.prototype.staticPartLength = function (name) {
-    return 32 * this.staticArrayLength(name);
-};
- 
-module.exports = SolidityTypeReal;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html deleted file mode 100644 index 2ac2a29..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/string.js - - - - - - -
-

Code coverage report for web3/lib/solidity/string.js

-

- Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (4 / 4)      - Lines: 100% (14 / 14)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -261 -1 -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -28 -  -  -1 -35 -  -  -1 -  - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-var SolidityTypeString = function () {
-    this._inputFormatter = f.formatInputString;
-    this._outputFormatter = f.formatOutputString;
-};
- 
-SolidityTypeString.prototype = new SolidityType({});
-SolidityTypeString.prototype.constructor = SolidityTypeString;
- 
-SolidityTypeString.prototype.isType = function (name) {
-    return !!name.match(/^string(\[([0-9]*)\])*$/);
-};
- 
-SolidityTypeString.prototype.staticPartLength = function (name) {
-    return 32 * this.staticArrayLength(name);
-};
- 
-SolidityTypeString.prototype.isDynamicType = function () {
-    return true;
-};
- 
-module.exports = SolidityTypeString;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html deleted file mode 100644 index 97b2c34..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html +++ /dev/null @@ -1,780 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/type.js - - - - - - -
-

Code coverage report for web3/lib/solidity/type.js

-

- Statements: 96.39% (80 / 83)      - Branches: 95% (19 / 20)      - Functions: 88.24% (15 / 17)      - Lines: 96.39% (80 / 83)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -2461 -1 -  -  -  -  -1 -9 -9 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1029 -1029 -  -  -  -  -  -  -  -  -  -  -  -  -1 -619 -619 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -678 -678 -123 -  -555 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -128 -128 -  -  -  -128 -  -  -  -  -  -  -  -  -  -  -1 -338 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -2454 -  -  -  -  -  -  -  -  -  -  -1 -201 -201 -  -22 -22 -22 -  -22 -22 -  -22 -43 -  -  -22 -  -  -179 -  -11 -11 -11 -  -11 -11 -23 -  -  -11 -  -  -  -  -168 -  -  -  -  -  -  -  -  -  -  -  -1 -216 -  -216 -  -21 -21 -21 -21 -  -21 -21 -21 -21 -  -21 -37 -  -  -21 -  -  -195 -  -19 -19 -19 -  -19 -19 -19 -19 -  -19 -47 -  -  -19 -  -176 -  -22 -22 -22 -22 -  -22 -  -  -  -154 -154 -  -  -1 - 
var f = require('./formatters');
-var SolidityParam = require('./param');
- 
-/**
- * SolidityType prototype is used to encode/decode solidity params of certain type
- */
-var SolidityType = function (config) {
-    this._inputFormatter = config.inputFormatter;
-    this._outputFormatter = config.outputFormatter;
-};
- 
-/**
- * Should be used to determine if this SolidityType do match given name
- *
- * @method isType
- * @param {String} name
- * @return {Bool} true if type match this SolidityType, otherwise false
- */
-SolidityType.prototype.isType = function (name) {
-    throw "this method should be overrwritten for type " + name;
-};
- 
-/**
- * Should be used to determine what is the length of static part in given type
- *
- * @method staticPartLength
- * @param {String} name
- * @return {Number} length of static part in bytes
- */
-SolidityType.prototype.staticPartLength = function (name) {
-    throw "this method should be overrwritten for type: " + name;
-};
- 
-/**
- * Should be used to determine if type is dynamic array
- * eg: 
- * "type[]" => true
- * "type[4]" => false
- *
- * @method isDynamicArray
- * @param {String} name
- * @return {Bool} true if the type is dynamic array 
- */
-SolidityType.prototype.isDynamicArray = function (name) {
-    var nestedTypes = this.nestedTypes(name);
-    return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
-};
- 
-/**
- * Should be used to determine if type is static array
- * eg: 
- * "type[]" => false
- * "type[4]" => true
- *
- * @method isStaticArray
- * @param {String} name
- * @return {Bool} true if the type is static array 
- */
-SolidityType.prototype.isStaticArray = function (name) {
-    var nestedTypes = this.nestedTypes(name);
-    return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
-};
- 
-/**
- * Should return length of static array
- * eg. 
- * "int[32]" => 32
- * "int256[14]" => 14
- * "int[2][3]" => 3
- * "int" => 1
- * "int[1]" => 1
- * "int[]" => 1
- *
- * @method staticArrayLength
- * @param {String} name
- * @return {Number} static array length
- */
-SolidityType.prototype.staticArrayLength = function (name) {
-    var nestedTypes = this.nestedTypes(name);
-    if (nestedTypes) {
-       return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);
-    }
-    return 1;
-};
- 
-/**
- * Should return nested type
- * eg.
- * "int[32]" => "int"
- * "int256[14]" => "int256"
- * "int[2][3]" => "int[2]"
- * "int" => "int"
- * "int[]" => "int"
- *
- * @method nestedName
- * @param {String} name
- * @return {String} nested name
- */
-SolidityType.prototype.nestedName = function (name) {
-    // remove last [] in name
-    var nestedTypes = this.nestedTypes(name);
-    Iif (!nestedTypes) {
-        return name;
-    }
- 
-    return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);
-};
- 
-/**
- * Should return true if type has dynamic size by default
- * such types are "string", "bytes"
- *
- * @method isDynamicType
- * @param {String} name
- * @return {Bool} true if is dynamic, otherwise false
- */
-SolidityType.prototype.isDynamicType = function () {
-    return false;
-};
- 
-/**
- * Should return array of nested types
- * eg.
- * "int[2][3][]" => ["[2]", "[3]", "[]"]
- * "int[] => ["[]"]
- * "int" => null
- *
- * @method nestedTypes
- * @param {String} name
- * @return {Array} array of nested types
- */
-SolidityType.prototype.nestedTypes = function (name) {
-    // return list of strings eg. "[]", "[3]", "[]", "[2]"
-    return name.match(/(\[[0-9]*\])/g);
-};
- 
-/**
- * Should be used to encode the value
- *
- * @method encode
- * @param {Object} value 
- * @param {String} name
- * @return {String} encoded value
- */
-SolidityType.prototype.encode = function (value, name) {
-    var self = this;
-    if (this.isDynamicArray(name)) {
- 
-        return (function () {
-            var length = value.length;                          // in int
-            var nestedName = self.nestedName(name);
- 
-            var result = [];
-            result.push(f.formatInputInt(length).encode());
-            
-            value.forEach(function (v) {
-                result.push(self.encode(v, nestedName));
-            });
- 
-            return result;
-        })();
- 
-    } else if (this.isStaticArray(name)) {
- 
-        return (function () {
-            var length = self.staticArrayLength(name);          // in int
-            var nestedName = self.nestedName(name);
- 
-            var result = [];
-            for (var i = 0; i < length; i++) {
-                result.push(self.encode(value[i], nestedName));
-            }
- 
-            return result;
-        })();
- 
-    }
- 
-    return this._inputFormatter(value, name).encode();
-};
- 
-/**
- * Should be used to decode value from bytes
- *
- * @method decode
- * @param {String} bytes
- * @param {Number} offset in bytes
- * @param {String} name type name
- * @returns {Object} decoded value
- */
-SolidityType.prototype.decode = function (bytes, offset, name) {
-    var self = this;
- 
-    if (this.isDynamicArray(name)) {
- 
-        return (function () {
-            var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes
-            var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int
-            var arrayStart = arrayOffset + 32; // array starts after length; // in bytes
- 
-            var nestedName = self.nestedName(name);
-            var nestedStaticPartLength = self.staticPartLength(nestedName);  // in bytes
-            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
-            var result = [];
- 
-            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
-                result.push(self.decode(bytes, arrayStart + i, nestedName));
-            }
- 
-            return result;
-        })();
- 
-    } else if (this.isStaticArray(name)) {
- 
-        return (function () {
-            var length = self.staticArrayLength(name);                      // in int
-            var arrayStart = offset;                                        // in bytes
- 
-            var nestedName = self.nestedName(name);
-            var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes
-            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
-            var result = [];
- 
-            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
-                result.push(self.decode(bytes, arrayStart + i, nestedName));
-            }
- 
-            return result;
-        })();
-    } else if (this.isDynamicType(name)) {
-        
-        return (function () {
-            var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64));      // in bytes
-            var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64));      // in bytes
-            var roundedLength = Math.floor((length + 31) / 32);                     // in int
-        
-            return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0));
-        })();
-    }
- 
-    var length = this.staticPartLength(name);
-    return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2)));
-};
- 
-module.exports = SolidityType;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html deleted file mode 100644 index a958b50..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/uint.js - - - - - - -
-

Code coverage report for web3/lib/solidity/uint.js

-

- Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -139 -  -  -1 - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-/**
- * SolidityTypeUInt is a prootype that represents uint type
- * It matches:
- * uint
- * uint[]
- * uint[4]
- * uint[][]
- * uint[3][]
- * uint[][6][], ...
- * uint32
- * uint64[]
- * uint8[4]
- * uint256[][]
- * uint[3][]
- * uint64[][6][], ...
- */
-var SolidityTypeUInt = function () {
-    this._inputFormatter = f.formatInputInt;
-    this._outputFormatter = f.formatOutputUInt;
-};
- 
-SolidityTypeUInt.prototype = new SolidityType({});
-SolidityTypeUInt.prototype.constructor = SolidityTypeUInt;
- 
-SolidityTypeUInt.prototype.isType = function (name) {
-    return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/);
-};
- 
-SolidityTypeUInt.prototype.staticPartLength = function (name) {
-    return 32 * this.staticArrayLength(name);
-};
- 
-module.exports = SolidityTypeUInt;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html deleted file mode 100644 index d9f578c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/ureal.js - - - - - - -
-

Code coverage report for web3/lib/solidity/ureal.js

-

- Statements: 91.67% (11 / 12)      - Branches: 100% (0 / 0)      - Functions: 66.67% (2 / 3)      - Lines: 91.67% (11 / 12)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -  -  -  -1 - 
var f = require('./formatters');
-var SolidityType = require('./type');
- 
-/**
- * SolidityTypeUReal is a prootype that represents ureal type
- * It matches:
- * ureal
- * ureal[]
- * ureal[4]
- * ureal[][]
- * ureal[3][]
- * ureal[][6][], ...
- * ureal32
- * ureal64[]
- * ureal8[4]
- * ureal256[][]
- * ureal[3][]
- * ureal64[][6][], ...
- */
-var SolidityTypeUReal = function () {
-    this._inputFormatter = f.formatInputReal;
-    this._outputFormatter = f.formatOutputUReal;
-};
- 
-SolidityTypeUReal.prototype = new SolidityType({});
-SolidityTypeUReal.prototype.constructor = SolidityTypeUReal;
- 
-SolidityTypeUReal.prototype.isType = function (name) {
-    return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/);
-};
- 
-SolidityTypeUReal.prototype.staticPartLength = function (name) {
-    return 32 * this.staticArrayLength(name);
-};
- 
-module.exports = SolidityTypeUReal;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html deleted file mode 100644 index 2455021..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - Code coverage report for web3/lib/utils/config.js - - - - - - -
-

Code coverage report for web3/lib/utils/config.js

-

- Statements: 100% (3 / 3)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (3 / 3)      - Ignored: none      -

-
All files » web3/lib/utils/ » config.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file config.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-/**
- * Utils
- * 
- * @module utils
- */
- 
-/**
- * Utility functions
- * 
- * @class [utils] config
- * @constructor
- */
- 
- 
-/// required to define ETH_BIGNUMBER_ROUNDING_MODE
-var BigNumber = require('bignumber.js');
- 
-var ETH_UNITS = [
-    'wei',
-    'kwei',
-    'Mwei',
-    'Gwei',
-    'szabo',
-    'finney',
-    'femtoether',
-    'picoether',
-    'nanoether',
-    'microether',
-    'milliether',
-    'nano',
-    'micro',
-    'milli',
-    'ether',
-    'grand',
-    'Mether',
-    'Gether',
-    'Tether',
-    'Pether',
-    'Eether',
-    'Zether',
-    'Yether',
-    'Nether',
-    'Dether',
-    'Vether',
-    'Uether'
-];
- 
-module.exports = {
-    ETH_PADDING: 32,
-    ETH_SIGNATURE_LENGTH: 4,
-    ETH_UNITS: ETH_UNITS,
-    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
-    ETH_POLLING_TIMEOUT: 1000/2,
-    defaultBlock: 'latest',
-    defaultAccount: undefined
-};
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html deleted file mode 100644 index c390aef..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - Code coverage report for web3/lib/utils/ - - - - - - -
-

Code coverage report for web3/lib/utils/

-

- Statements: 96.4% (134 / 139)      - Branches: 81.82% (63 / 77)      - Functions: 96.55% (28 / 29)      - Lines: 96.38% (133 / 138)      - Ignored: none      -

-
All files » web3/lib/utils/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
config.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
sha3.js100%(8 / 8)87.5%(7 / 8)100%(1 / 1)100%(8 / 8)
utils.js96.09%(123 / 128)81.16%(56 / 69)96.43%(27 / 28)96.06%(122 / 127)
-
-
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html deleted file mode 100644 index 1b1aaef..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/utils/sha3.js - - - - - - -
-

Code coverage report for web3/lib/utils/sha3.js

-

- Statements: 100% (8 / 8)      - Branches: 87.5% (7 / 8)      - Functions: 100% (1 / 1)      - Lines: 100% (8 / 8)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -42 -2 -2 -  -2 -  -  -42 -  -  -  -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file sha3.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var CryptoJS = require('crypto-js');
-var sha3 = require('crypto-js/sha3');
- 
-module.exports = function (value, options) {
-    if (options && options.encoding === 'hex') {
-        Eif (value.length > 2 && value.substr(0, 2) === '0x') {
-            value = value.substr(2);
-        }
-        value = CryptoJS.enc.Hex.parse(value);
-    }
- 
-    return sha3(value, {
-        outputLength: 256
-    }).toString();
-};
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html deleted file mode 100644 index fd8a89a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html +++ /dev/null @@ -1,1638 +0,0 @@ - - - - Code coverage report for web3/lib/utils/utils.js - - - - - - -
-

Code coverage report for web3/lib/utils/utils.js

-

- Statements: 96.09% (123 / 128)      - Branches: 81.16% (56 / 69)      - Functions: 96.43% (27 / 28)      - Lines: 96.06% (122 / 127)      - Ignored: none      -

-
All files » web3/lib/utils/ » utils.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -205 -  -  -  -  -  -  -  -  -  -  -  -2 -38 -  -  -  -  -  -  -  -  -  -2 -  -10 -10 -10 -3 -  -10 -133 -133 -2 -131 -  -  -10 -  -  -  -  -  -  -  -  -  -2 -  -5 -5 -5 -5 -  -5 -110 -110 -  -  -5 -  -  -  -  -  -  -  -  -  -  -2 -25 -25 -25 -291 -291 -2 -289 -289 -  -  -25 -  -  -  -  -  -  -  -  -  -  -2 -10 -10 -236 -236 -236 -  -  -10 -  -  -  -  -  -  -  -  -  -2 -105 -48 -  -  -136 -57 -  -  -  -  -  -  -  -  -  -2 -101 -101 -  -  -  -2 -  -94 -94 -  -  -  -  -  -  -  -  -  -2 -193 -  -  -  -  -  -  -  -  -  -2 -160 -160 -  -160 -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -126 -2 -  -124 -1 -  -123 -2 -  -  -121 -62 -5 -57 -42 -15 -5 -  -  -69 -  -  -  -  -  -  -  -  -  -  -2 -39 -39 -39 -1 -  -38 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -12 -  -12 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -27 -  -26 -  -  -  -  -  -  -  -  -  -2 -  -705 -705 -47 -  -658 -208 -  -  -450 -  -  -  -  -  -  -  -  -  -2 -205 -205 -5 -  -200 -  -  -  -  -  -  -  -  -  -2 -78 -  -  -  -  -  -  -  -  -  -2 -24 -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -875 -  -  -  -  -  -  -  -  -  -  -2 -832 -  -  -  -  -  -  -  -  -  -  -2 -358 -  -  -  -  -  -  -  -  -  -2 -286 -  -  -  -  -  -  -  -  -  -2 -126 -  -  -  -  -  -  -  -  -  -2 -453 -  -  -  -  -  -  -  -  -  -2 -9 -9 -  -5 -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @file utils.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-/**
- * Utils
- *
- * @module utils
- */
- 
-/**
- * Utility functions
- *
- * @class [utils] utils
- * @constructor
- */
- 
- 
-var BigNumber = require('bignumber.js');
-var utf8 = require('utf8');
- 
-var unitMap = {
-    'wei':          '1',
-    'kwei':         '1000',
-    'ada':          '1000',
-    'femtoether':   '1000',
-    'mwei':         '1000000',
-    'babbage':      '1000000',
-    'picoether':    '1000000',
-    'gwei':         '1000000000',
-    'shannon':      '1000000000',
-    'nanoether':    '1000000000',
-    'nano':         '1000000000',
-    'szabo':        '1000000000000',
-    'microether':   '1000000000000',
-    'micro':        '1000000000000',
-    'finney':       '1000000000000000',
-    'milliether':    '1000000000000000',
-    'milli':         '1000000000000000',
-    'ether':        '1000000000000000000',
-    'kether':       '1000000000000000000000',
-    'grand':        '1000000000000000000000',
-    'einstein':     '1000000000000000000000',
-    'mether':       '1000000000000000000000000',
-    'gether':       '1000000000000000000000000000',
-    'tether':       '1000000000000000000000000000000'
-};
- 
-/**
- * Should be called to pad string to expected length
- *
- * @method padLeft
- * @param {String} string to be padded
- * @param {Number} characters that result string should have
- * @param {String} sign, by default 0
- * @returns {String} right aligned string
- */
-var padLeft = function (string, chars, sign) {
-    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
-};
- 
-/**
- * Should be called to pad string to expected length
- *
- * @method padRight
- * @param {String} string to be padded
- * @param {Number} characters that result string should have
- * @param {String} sign, by default 0
- * @returns {String} right aligned string
- */
-var padRight = function (string, chars, sign) {
-    return string + (new Array(chars - string.length + 1).join(sign ? sign : "0"));
-};
- 
-/**
- * Should be called to get utf8 from it's hex representation
- *
- * @method toUtf8
- * @param {String} string in hex
- * @returns {String} ascii string representation of hex value
- */
-var toUtf8 = function(hex) {
-// Find termination
-    var str = "";
-    var i = 0, l = hex.length;
-    if (hex.substring(0, 2) === '0x') {
-        i = 2;
-    }
-    for (; i < l; i+=2) {
-        var code = parseInt(hex.substr(i, 2), 16);
-        if (code === 0)
-            break;
-        str += String.fromCharCode(code);
-    }
- 
-    return utf8.decode(str);
-};
- 
-/**
- * Should be called to get ascii from it's hex representation
- *
- * @method toAscii
- * @param {String} string in hex
- * @returns {String} ascii string representation of hex value
- */
-var toAscii = function(hex) {
-// Find termination
-    var str = "";
-    var i = 0, l = hex.length;
-    Eif (hex.substring(0, 2) === '0x') {
-        i = 2;
-    }
-    for (; i < l; i+=2) {
-        var code = parseInt(hex.substr(i, 2), 16);
-        str += String.fromCharCode(code);
-    }
- 
-    return str;
-};
- 
-/**
- * Should be called to get hex representation (prefixed by 0x) of utf8 a string
- *
- * @method fromUtf8
- * @param {String} string
- * @param {Number} optional padding
- * @returns {String} hex representation of input string
- */
-var fromUtf8 = function(str) {
-    str = utf8.encode(str);
-    var hex = "";
-    for(var i = 0; i < str.length; i++) {
-        var code = str.charCodeAt(i);
-        if (code === 0)
-            break;
-        var n = code.toString(16);
-        hex += n.length < 2 ? '0' + n : n;
-    }
- 
-    return "0x" + hex;
-};
- 
-/**
- * Should be called to get hex representation (prefixed by 0x) of ascii string
- *
- * @method fromAscii
- * @param {String} string
- * @param {Number} optional padding
- * @returns {String} hex representation of input string
- */
-var fromAscii = function(str) {
-    var hex = "";
-    for(var i = 0; i < str.length; i++) {
-        var code = str.charCodeAt(i);
-        var n = code.toString(16);
-        hex += n.length < 2 ? '0' + n : n;
-    }
- 
-    return "0x" + hex;
-};
- 
-/**
- * Should be used to create full function/event name from json abi
- *
- * @method transformToFullName
- * @param {Object} json-abi
- * @return {String} full fnction/event name
- */
-var transformToFullName = function (json) {
-    if (json.name.indexOf('(') !== -1) {
-        return json.name;
-    }
- 
-    var typeName = json.inputs.map(function(i){return i.type; }).join();
-    return json.name + '(' + typeName + ')';
-};
- 
-/**
- * Should be called to get display name of contract function
- *
- * @method extractDisplayName
- * @param {String} name of function/event
- * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
- */
-var extractDisplayName = function (name) {
-    var length = name.indexOf('(');
-    return length !== -1 ? name.substr(0, length) : name;
-};
- 
-/// @returns overloaded part of function/event name
-var extractTypeName = function (name) {
-    /// TODO: make it invulnerable
-    var length = name.indexOf('(');
-    return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : "";
-};
- 
-/**
- * Converts value to it's decimal representation in string
- *
- * @method toDecimal
- * @param {String|Number|BigNumber}
- * @return {String}
- */
-var toDecimal = function (value) {
-    return toBigNumber(value).toNumber();
-};
- 
-/**
- * Converts value to it's hex representation
- *
- * @method fromDecimal
- * @param {String|Number|BigNumber}
- * @return {String}
- */
-var fromDecimal = function (value) {
-    var number = toBigNumber(value);
-    var result = number.toString(16);
- 
-    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
-};
- 
-/**
- * Auto converts any given value into it's hex representation.
- *
- * And even stringifys objects before.
- *
- * @method toHex
- * @param {String|Number|BigNumber|Object}
- * @return {String}
- */
-var toHex = function (val) {
-    /*jshint maxcomplexity: 8 */
- 
-    if (isBoolean(val))
-        return fromDecimal(+val);
- 
-    if (isBigNumber(val))
-        return fromDecimal(val);
- 
-    if (isObject(val))
-        return fromUtf8(JSON.stringify(val));
- 
-    // if its a negative number, pass it through fromDecimal
-    if (isString(val)) {
-        if (val.indexOf('-0x') === 0)
-            return fromDecimal(val);
-        else if(val.indexOf('0x') === 0)
-            return val;
-        else if (!isFinite(val))
-            return fromAscii(val);
-    }
- 
-    return fromDecimal(val);
-};
- 
-/**
- * Returns value of unit in Wei
- *
- * @method getValueOfUnit
- * @param {String} unit the unit to convert to, default ether
- * @returns {BigNumber} value of the unit (in Wei)
- * @throws error if the unit is not correct:w
- */
-var getValueOfUnit = function (unit) {
-    unit = unit ? unit.toLowerCase() : 'ether';
-    var unitValue = unitMap[unit];
-    if (unitValue === undefined) {
-        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
-    }
-    return new BigNumber(unitValue, 10);
-};
- 
-/**
- * Takes a number of wei and converts it to any other ether unit.
- *
- * Possible units are:
- *   SI Short   SI Full        Effigy       Other
- * - kwei       femtoether     ada
- * - mwei       picoether      babbage
- * - gwei       nanoether      shannon      nano
- * - --         microether     szabo        micro
- * - --         milliether     finney       milli
- * - ether      --             --
- * - kether                    einstein     grand
- * - mether
- * - gether
- * - tether
- *
- * @method fromWei
- * @param {Number|String} number can be a number, number string or a HEX of a decimal
- * @param {String} unit the unit to convert to, default ether
- * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
-*/
-var fromWei = function(number, unit) {
-    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));
- 
-    return isBigNumber(number) ? returnValue : returnValue.toString(10);
-};
- 
-/**
- * Takes a number of a unit and converts it to wei.
- *
- * Possible units are:
- *   SI Short   SI Full        Effigy       Other
- * - kwei       femtoether     ada
- * - mwei       picoether      babbage
- * - gwei       nanoether      shannon      nano
- * - --         microether     szabo        micro
- * - --         milliether     finney       milli
- * - ether      --             --
- * - kether                    einstein     grand
- * - mether
- * - gether
- * - tether
- *
- * @method toWei
- * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
- * @param {String} unit the unit to convert from, default ether
- * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
-*/
-var toWei = function(number, unit) {
-    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));
- 
-    return isBigNumber(number) ? returnValue : returnValue.toString(10);
-};
- 
-/**
- * Takes an input and transforms it into an bignumber
- *
- * @method toBigNumber
- * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
- * @return {BigNumber} BigNumber
-*/
-var toBigNumber = function(number) {
-    /*jshint maxcomplexity:5 */
-    number = number || 0;
-    if (isBigNumber(number))
-        return number;
- 
-    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
-        return new BigNumber(number.replace('0x',''), 16);
-    }
- 
-    return new BigNumber(number.toString(10), 10);
-};
- 
-/**
- * Takes and input transforms it into bignumber and if it is negative value, into two's complement
- *
- * @method toTwosComplement
- * @param {Number|String|BigNumber}
- * @return {BigNumber}
- */
-var toTwosComplement = function (number) {
-    var bigNumber = toBigNumber(number);
-    if (bigNumber.lessThan(0)) {
-        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
-    }
-    return bigNumber;
-};
- 
-/**
- * Checks if the given string is strictly an address
- *
- * @method isStrictAddress
- * @param {String} address the given HEX adress
- * @return {Boolean}
-*/
-var isStrictAddress = function (address) {
-    return /^0x[0-9a-f]{40}$/i.test(address);
-};
- 
-/**
- * Checks if the given string is an address
- *
- * @method isAddress
- * @param {String} address the given HEX adress
- * @return {Boolean}
-*/
-var isAddress = function (address) {
-    return /^(0x)?[0-9a-f]{40}$/i.test(address);
-};
- 
-/**
- * Transforms given string to valid 20 bytes-length addres with 0x prefix
- *
- * @method toAddress
- * @param {String} address
- * @return {String} formatted address
- */
-var toAddress = function (address) {
-    if (isStrictAddress(address)) {
-        return address;
-    }
- 
-    if (/^[0-9a-f]{40}$/.test(address)) {
-        return '0x' + address;
-    }
- 
-    return '0x' + padLeft(toHex(address).substr(2), 40);
-};
- 
-/**
- * Returns true if object is BigNumber, otherwise false
- *
- * @method isBigNumber
- * @param {Object}
- * @return {Boolean}
- */
-var isBigNumber = function (object) {
-    return object instanceof BigNumber ||
-        (object && object.constructor && object.constructor.name === 'BigNumber');
-};
- 
-/**
- * Returns true if object is string, otherwise false
- *
- * @method isString
- * @param {Object}
- * @return {Boolean}
- */
-var isString = function (object) {
-    return typeof object === 'string' ||
-        (object && object.constructor && object.constructor.name === 'String');
-};
- 
-/**
- * Returns true if object is function, otherwise false
- *
- * @method isFunction
- * @param {Object}
- * @return {Boolean}
- */
-var isFunction = function (object) {
-    return typeof object === 'function';
-};
- 
-/**
- * Returns true if object is Objet, otherwise false
- *
- * @method isObject
- * @param {Object}
- * @return {Boolean}
- */
-var isObject = function (object) {
-    return typeof object === 'object';
-};
- 
-/**
- * Returns true if object is boolean, otherwise false
- *
- * @method isBoolean
- * @param {Object}
- * @return {Boolean}
- */
-var isBoolean = function (object) {
-    return typeof object === 'boolean';
-};
- 
-/**
- * Returns true if object is array, otherwise false
- *
- * @method isArray
- * @param {Object}
- * @return {Boolean}
- */
-var isArray = function (object) {
-    return object instanceof Array;
-};
- 
-/**
- * Returns true if given string is valid json object
- *
- * @method isJson
- * @param {String}
- * @return {Boolean}
- */
-var isJson = function (str) {
-    try {
-        return !!JSON.parse(str);
-    } catch (e) {
-        return false;
-    }
-};
- 
-module.exports = {
-    padLeft: padLeft,
-    padRight: padRight,
-    toHex: toHex,
-    toDecimal: toDecimal,
-    fromDecimal: fromDecimal,
-    toUtf8: toUtf8,
-    toAscii: toAscii,
-    fromUtf8: fromUtf8,
-    fromAscii: fromAscii,
-    transformToFullName: transformToFullName,
-    extractDisplayName: extractDisplayName,
-    extractTypeName: extractTypeName,
-    toWei: toWei,
-    fromWei: fromWei,
-    toBigNumber: toBigNumber,
-    toTwosComplement: toTwosComplement,
-    toAddress: toAddress,
-    isBigNumber: isBigNumber,
-    isStrictAddress: isStrictAddress,
-    isAddress: isAddress,
-    isFunction: isFunction,
-    isString: isString,
-    isObject: isObject,
-    isBoolean: isBoolean,
-    isArray: isArray,
-    isJson: isJson
-};
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html deleted file mode 100644 index 1a926e7..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - Code coverage report for web3/lib/web3.js - - - - - - -
-

Code coverage report for web3/lib/web3.js

-

- Statements: 98.25% (56 / 57)      - Branches: 0% (0 / 2)      - Functions: 85.71% (6 / 7)      - Lines: 98.25% (56 / 57)      - Ignored: none      -

-
All files » web3/lib/ » web3.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -1 -154 -154 -154 -154 -154 -154 -154 -154 -  -  -154 -  -  -  -154 -154 -  -  -  -  -  -1 -  -  -  -  -1 -25 -25 -  -  -1 -13 -13 -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -  -1 -1 -1 -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -1 -4 -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file web3.js
- * @authors:
- *   Jeffrey Wilcke <jeff@ethdev.com>
- *   Marek Kotewicz <marek@ethdev.com>
- *   Marian Oancea <marian@ethdev.com>
- *   Fabian Vogelsteller <fabian@ethdev.com>
- *   Gav Wood <g@ethdev.com>
- * @date 2014
- */
- 
-var RequestManager = require('./web3/requestmanager');
-var Iban = require('./web3/iban');
-var Eth = require('./web3/methods/eth');
-var DB = require('./web3/methods/db');
-var Shh = require('./web3/methods/shh');
-var Net = require('./web3/methods/net');
-var Settings = require('./web3/settings');
-var version = require('./version.json');
-var utils = require('./utils/utils');
-var sha3 = require('./utils/sha3');
-var extend = require('./web3/extend');
-var Batch = require('./web3/batch');
-var Property = require('./web3/property');
-var HttpProvider = require('./web3/httpprovider');
-var IpcProvider = require('./web3/ipcprovider');
- 
- 
- 
-function Web3 (provider) {
-    this._requestManager = new RequestManager(provider);
-    this.currentProvider = provider;
-    this.eth = new Eth(this);
-    this.db = new DB(this);
-    this.shh = new Shh(this);
-    this.net = new Net(this);
-    this.settings = new Settings();
-    this.version = {
-        api: version.version
-    };
-    this.providers = {
-        HttpProvider: HttpProvider,
-        IpcProvider: IpcProvider
-    };
-    this._extend = extend(this);
-    this._extend({
-        properties: properties()
-    });
-}
- 
-// expose providers on the class
-Web3.providers = {
-    HttpProvider: HttpProvider,
-    IpcProvider: IpcProvider
-};
- 
-Web3.prototype.setProvider = function (provider) {
-    this._requestManager.setProvider(provider);
-    this.currentProvider = provider;
-};
- 
-Web3.prototype.reset = function (keepIsSyncing) {
-    this._requestManager.reset(keepIsSyncing);
-    this.settings = new Settings();
-};
- 
-Web3.prototype.toHex = utils.toHex;
-Web3.prototype.toAscii = utils.toAscii;
-Web3.prototype.toUtf8 = utils.toUtf8;
-Web3.prototype.fromAscii = utils.fromAscii;
-Web3.prototype.fromUtf8 = utils.fromUtf8;
-Web3.prototype.toDecimal = utils.toDecimal;
-Web3.prototype.fromDecimal = utils.fromDecimal;
-Web3.prototype.toBigNumber = utils.toBigNumber;
-Web3.prototype.toWei = utils.toWei;
-Web3.prototype.fromWei = utils.fromWei;
-Web3.prototype.isAddress = utils.isAddress;
-Web3.prototype.isIBAN = utils.isIBAN;
-Web3.prototype.sha3 = sha3;
- 
-/**
- * Transforms direct icap to address
- */
-Web3.prototype.fromICAP = function (icap) {
-    var iban = new Iban(icap);
-    return iban.address();
-};
- 
-var properties = function () {
-    return [
-        new Property({
-            name: 'version.node',
-            getter: 'web3_clientVersion'
-        }),
-        new Property({
-            name: 'version.network',
-            getter: 'net_version',
-            inputFormatter: utils.toDecimal
-        }),
-        new Property({
-            name: 'version.ethereum',
-            getter: 'eth_protocolVersion',
-            inputFormatter: utils.toDecimal
-        }),
-        new Property({
-            name: 'version.whisper',
-            getter: 'shh_version',
-            inputFormatter: utils.toDecimal
-        })
-    ];
-};
- 
-Web3.prototype.isConnected = function(){
-    return (this.currentProvider && this.currentProvider.isConnected());
-};
- 
-Web3.prototype.createBatch = function () {
-    return new Batch(this);
-};
- 
-module.exports = Web3;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html deleted file mode 100644 index 493184b..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - Code coverage report for web3/lib/web3/allevents.js - - - - - - -
-

Code coverage report for web3/lib/web3/allevents.js

-

- Statements: 85.37% (35 / 41)      - Branches: 50% (6 / 12)      - Functions: 87.5% (7 / 8)      - Lines: 85.37% (35 / 41)      - Ignored: none      -

-
All files » web3/lib/web3/ » allevents.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -  -1 -26 -26 -26 -  -  -1 -1 -1 -  -1 -2 -  -  -  -  -1 -  -1 -  -  -1 -2 -2 -  -2 -2 -2 -  -  -2 -  -  -  -  -2 -2 -  -  -1 -  -1 -  -  -  -  -  -1 -1 -1 -  -  -1 -26 -26 -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file allevents.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2014
- */
- 
-var sha3 = require('../utils/sha3');
-var SolidityEvent = require('./event');
-var formatters = require('./formatters');
-var utils = require('../utils/utils');
-var Filter = require('./filter');
-var watches = require('./methods/watches');
- 
-var AllSolidityEvents = function (requestManager, json, address) {
-    this._requestManager = requestManager;
-    this._json = json;
-    this._address = address;
-};
- 
-AllSolidityEvents.prototype.encode = function (options) {
-    options = options || {};
-    var result = {};
- 
-    ['fromBlock', 'toBlock'].filter(function (f) {
-        return options[f] !== undefined;
-    }).forEach(function (f) {
-        result[f] = formatters.inputBlockNumberFormatter(options[f]);
-    });
- 
-    result.address = this._address;
- 
-    return result;
-};
- 
-AllSolidityEvents.prototype.decode = function (data) {
-    data.data = data.data || '';
-    data.topics = data.topics || [];
- 
-    var eventTopic = data.topics[0].slice(2);
-    var match = this._json.filter(function (j) {
-        return eventTopic === sha3(utils.transformToFullName(j));
-    })[0];
- 
-    Iif (!match) { // cannot find matching event?
-        console.warn('cannot find event for log');
-        return data;
-    }
- 
-    var event = new SolidityEvent(this._requestManager, match, this._address);
-    return event.decode(data);
-};
- 
-AllSolidityEvents.prototype.execute = function (options, callback) {
- 
-    Iif (utils.isFunction(arguments[arguments.length - 1])) {
-        callback = arguments[arguments.length - 1];
-        if(arguments.length === 1)
-            options = null;
-    }
- 
-    var o = this.encode(options);
-    var formatter = this.decode.bind(this);
-    return new Filter(this._requestManager, o, watches.eth(), formatter, callback);
-};
- 
-AllSolidityEvents.prototype.attachToContract = function (contract) {
-    var execute = this.execute.bind(this);
-    contract.allEvents = execute;
-};
- 
-module.exports = AllSolidityEvents;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html deleted file mode 100644 index abe7311..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - Code coverage report for web3/lib/web3/batch.js - - - - - - -
-

Code coverage report for web3/lib/web3/batch.js

-

- Statements: 100% (18 / 18)      - Branches: 60% (6 / 10)      - Functions: 100% (6 / 6)      - Lines: 100% (18 / 18)      - Ignored: none      -

-
All files » web3/lib/web3/ » batch.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -4 -4 -  -  -  -  -  -  -  -  -1 -8 -  -  -  -  -  -  -  -1 -4 -4 -4 -4 -8 -  -8 -  -8 -2 -  -  -6 -  -  -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file batch.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Jsonrpc = require('./jsonrpc');
-var errors = require('./errors');
- 
-var Batch = function (web3) {
-    this.requestManager = web3._requestManager;
-    this.requests = [];
-};
- 
-/**
- * Should be called to add create new request to batch request
- *
- * @method add
- * @param {Object} jsonrpc requet object
- */
-Batch.prototype.add = function (request) {
-    this.requests.push(request);
-};
- 
-/**
- * Should be called to execute batch request
- *
- * @method execute
- */
-Batch.prototype.execute = function () {
-    var requests = this.requests;
-    this.requestManager.sendBatch(requests, function (err, results) {
-        results = results || [];
-        requests.map(function (request, index) {
-            return results[index] || {};
-        }).forEach(function (result, index) {
-            Eif (requests[index].callback) {
- 
-                if (!Jsonrpc.getInstance().isValidResponse(result)) {
-                    return requests[index].callback(errors.InvalidResponse(result));
-                }
- 
-                requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));
-            }
-        });
-    }); 
-};
- 
-module.exports = Batch;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html deleted file mode 100644 index b19457e..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - Code coverage report for web3/lib/web3/contract.js - - - - - - -
-

Code coverage report for web3/lib/web3/contract.js

-

- Statements: 59.6% (59 / 99)      - Branches: 23.81% (10 / 42)      - Functions: 77.27% (17 / 22)      - Lines: 59.6% (59 / 99)      - Ignored: none      -

-
All files » web3/lib/web3/ » contract.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -1 -1 -  -1 -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -26 -91 -  -68 -  -68 -  -  -  -  -  -  -  -  -  -  -1 -26 -91 -  -  -26 -26 -  -26 -22 -22 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -  -27 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -1 -  -1 -1 -1 -  -  -1 -1 -1 -  -  -1 -1 -  -1 -  -  -1 -1 -  -  -  -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -26 -  -  -  -26 -26 -  -26 -  -  -26 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -27 -27 -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file contract.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2014
- */
- 
-var utils = require('../utils/utils');
-var coder = require('../solidity/coder');
-var ContractEvent = require('./event');
-var SolidityFunction = require('./function');
- 
-/**
- * Should be called to encode constructor params
- *
- * @method encodeConstructorParams
- * @param {Array} abi
- * @param {Array} constructor params
- */
-var encodeConstructorParams = function (abi, params) {
-    return abi.filter(function (json) {
-        return json.type === 'constructor' && json.inputs.length === params.length;
-    }).map(function (json) {
-        return json.inputs.map(function (input) {
-            return input.type;
-        });
-    }).map(function (types) {
-        return coder.encodeParams(types, params);
-    })[0] || '';
-};
- 
-/**
- * Should be called to add functions to contract object
- *
- * @method addFunctionsToContract
- * @param {Contract} contract
- * @param {Array} abi
- */
-var addFunctionsToContract = function (contract) {
-    contract.abi.filter(function (json) {
-        return json.type === 'function';
-    }).map(function (json) {
-        return new SolidityFunction(contract._eth, json, contract.address);
-    }).forEach(function (f) {
-        f.attachToContract(contract);
-    });
-};
- 
-/**
- * Should be called to add events to contract object
- *
- * @method addEventsToContract
- * @param {Contract} contract
- * @param {Array} abi
- */
-var addEventsToContract = function (contract) {
-    var events = contract.abi.filter(function (json) {
-        return json.type === 'event';
-    });
- 
-    var allEvents = new ContractEvent(contract._eth._requestManager, events, contract.address, true);
-    allEvents.attachToContract(contract);
-    
-    events.map(function (json) {
-        var ev = new ContractEvent(contract._eth._requestManager, json, contract.address);
-        ev.attachToContract(contract);
-    });
-};
- 
- 
-/**
- * Should be called to check if the contract gets properly deployed on the blockchain.
- *
- * @method checkForContractAddress
- * @param {Object} contract
- * @param {Function} callback
- * @returns {Undefined}
- */
-var checkForContractAddress = function(contract, callback){
-    var count = 0,
-        callbackFired = false;
- 
-    // wait for receipt
-    var filter = contract._eth.filter('latest', function(e){
-        if (!e && !callbackFired) {
-            count++;
- 
-            // stop watching after 50 blocks (timeout)
-            if (count > 50) {
-                
-                filter.stopWatching();
-                callbackFired = true;
- 
-                if (callback)
-                    callback(new Error('Contract transaction couldn\'t be found after 50 blocks'));
-                else
-                    throw new Error('Contract transaction couldn\'t be found after 50 blocks');
- 
- 
-            } else {
- 
-                contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){
-                    if(receipt && !callbackFired) {
- 
-                        contract._eth.getCode(receipt.contractAddress, function(e, code){
-                            /*jshint maxcomplexity: 6 */
- 
-                            if(callbackFired || !code)
-                                return;
-                            
-                            filter.stopWatching();
-                            callbackFired = true;
- 
-                            if(code.length > 2) {
- 
-                                // console.log('Contract code deployed!');
- 
-                                contract.address = receipt.contractAddress;
- 
-                                // attach events and methods again after we have
-                                addFunctionsToContract(contract);
-                                addEventsToContract(contract);
- 
-                                // call callback for the second time
-                                if(callback)
-                                    callback(null, contract);
- 
-                            } else {
-                                if(callback)
-                                    callback(new Error('The contract code couldn\'t be stored, please check your gas amount.'));
-                                else
-                                    throw new Error('The contract code couldn\'t be stored, please check your gas amount.');
-                            }
-                        });
-                    }
-                });
-            }
-        }
-    });
-};
- 
-/**
- * Should be called to create new ContractFactory instance
- *
- * @method ContractFactory
- * @param {Array} abi
- */
-var ContractFactory = function (eth, abi) {
-    this.eth = eth;
-    this.abi = abi;
- 
-    this.new.getData = this.getData.bind(this);
-};
- 
-/**
- * Should be called to create new ContractFactory
- *
- * @method contract
- * @param {Array} abi
- * @returns {ContractFactory} new contract factory
- */
-//var contract = function (abi) {
-    //return new ContractFactory(abi);
-//};
- 
-/**
- * Should be called to create new contract on a blockchain
- * 
- * @method new
- * @param {Any} contract constructor param1 (optional)
- * @param {Any} contract constructor param2 (optional)
- * @param {Object} contract transaction object (required)
- * @param {Function} callback
- * @returns {Contract} returns contract instance
- */
-ContractFactory.prototype.new = function () {
-    var contract = new Contract(this.eth, this.abi);
- 
-    // parse arguments
-    var options = {}; // required!
-    var callback;
- 
-    var args = Array.prototype.slice.call(arguments);
-    Eif (utils.isFunction(args[args.length - 1])) {
-        callback = args.pop();
-    }
- 
-    var last = args[args.length - 1];
-    Eif (utils.isObject(last) && !utils.isArray(last)) {
-        options = args.pop();
-    }
- 
-    var bytes = encodeConstructorParams(this.abi, args);
-    options.data += bytes;
- 
-    Eif (callback) {
- 
-        // wait for the contract address adn check if the code was deployed
-        this.eth.sendTransaction(options, function (err, hash) {
-            Iif (err) {
-                callback(err);
-            } else {
-                // add the transaction hash
-                contract.transactionHash = hash;
- 
-                // call callback for the first time
-                callback(null, contract);
- 
-                checkForContractAddress(contract, callback);
-            }
-        });
-    } else {
-        var hash = this.eth.sendTransaction(options);
-        // add the transaction hash
-        contract.transactionHash = hash;
-        checkForContractAddress(contract);
-    }
- 
-    return contract;
-};
- 
-/**
- * Should be called to get access to existing contract on a blockchain
- *
- * @method at
- * @param {Address} contract address (required)
- * @param {Function} callback {optional)
- * @returns {Contract} returns contract if no callback was passed,
- * otherwise calls callback function (err, contract)
- */
-ContractFactory.prototype.at = function (address, callback) {
-    var contract = new Contract(this.eth, this.abi, address);
- 
-    // this functions are not part of prototype, 
-    // because we dont want to spoil the interface
-    addFunctionsToContract(contract);
-    addEventsToContract(contract);
-    
-    Iif (callback) {
-        callback(null, contract);
-    } 
-    return contract;
-};
- 
-/**
- * Gets the data, which is data to deploy plus constructor params
- *
- * @method getData
- */
-ContractFactory.prototype.getData = function () {
-    var options = {}; // required!
-    var args = Array.prototype.slice.call(arguments);
- 
-    var last = args[args.length - 1];
-    if (utils.isObject(last) && !utils.isArray(last)) {
-        options = args.pop();
-    }
- 
-    var bytes = encodeConstructorParams(this.abi, args);
-    options.data += bytes;
- 
-    return options.data;
-};
- 
-/**
- * Should be called to create new contract instance
- *
- * @method Contract
- * @param {Array} abi
- * @param {Address} contract address
- */
-var Contract = function (eth, abi, address) {
-    this._eth = eth;
-    this.transactionHash = null;
-    this.address = address;
-    this.abi = abi;
-};
- 
-module.exports = ContractFactory;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html deleted file mode 100644 index a03587d..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/web3/errors.js - - - - - - -
-

Code coverage report for web3/lib/web3/errors.js

-

- Statements: 83.33% (5 / 6)      - Branches: 100% (5 / 5)      - Functions: 75% (3 / 4)      - Lines: 83.33% (5 / 6)      - Ignored: none      -

-
All files » web3/lib/web3/ » errors.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -3 -  -4 -  -  -  -  -  -7 -  -  -6 -6 -  -  -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file errors.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-module.exports = {
-    InvalidNumberOfParams: function () {
-        return new Error('Invalid number of input parameters');
-    },
-    InvalidConnection: function (host){
-        return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.');
-    },
-    InvalidProvider: function () {
-        return new Error('Provider not set or invalid');
-    },
-    InvalidResponse: function (result){
-        var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
-        return new Error(message);
-    }
-};
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html deleted file mode 100644 index f6a2688..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html +++ /dev/null @@ -1,981 +0,0 @@ - - - - Code coverage report for web3/lib/web3/event.js - - - - - - -
-

Code coverage report for web3/lib/web3/event.js

-

- Statements: 91.51% (97 / 106)      - Branches: 83.33% (35 / 42)      - Functions: 90.91% (20 / 22)      - Lines: 91.43% (96 / 105)      - Ignored: none      -

-
All files » web3/lib/web3/ » event.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -  -  -  -1 -61 -61 -61 -61 -61 -61 -61 -  -  -  -  -  -  -  -  -  -  -1 -16 -50 -  -25 -  -  -  -  -  -  -  -  -  -  -1 -30 -  -  -  -  -  -  -  -  -1 -22 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -12 -12 -12 -  -  -12 -24 -  -4 -  -  -12 -  -  -12 -  -11 -9 -  -  -11 -21 -  -16 -16 -6 -  -  -10 -1 -2 -  -  -9 -  -  -11 -  -  -12 -  -12 -  -  -  -  -  -  -  -  -  -1 -8 -8 -8 -  -  -8 -  -1 -1 -1 -  -  -1 -  -  -  -  -1 -1 -1 -  -  -  -7 -7 -7 -  -  -8 -12 -8 -  -8 -8 -  -8 -8 -8 -  -8 -25 -25 -  -  -8 -8 -  -8 -  -  -  -  -  -  -  -  -  -  -1 -  -3 -3 -  -3 -1 -  -  -  -3 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -3 -3 -  -  -  -  -  -  -  -  -  -  -3 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -48 -  -  -48 -  -  -48 -26 -  -  -  -  -22 -22 -22 -  -22 -  -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file event.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @author Fabian Vogelsteller <fabian@frozeman.de>
- * @date 2016
- */
- 
-var utils = require('../utils/utils');
-var coder = require('../solidity/coder');
-var formatters = require('./formatters');
-var sha3 = require('../utils/sha3');
-var Subscription = require('./subscription');
- 
-/**
- * This prototype should be used to create event filters
- */
-var ContractEvent = function (requestManager, json, address, allEvents) {
-    this._requestManager = requestManager;
-    this._address = address;
-    this._json = json;
-    this._name = json.inputs ? utils.transformToFullName(json) : null;
-    this._params = json.inputs;
-    this._anonymous = json.anonymous;
-    this._allEvents = !!allEvents;
-};
- 
-/**
- * Should be used to get filtered param types
- *
- * @method types
- * @param {Bool} decide if returned typed should be indexed
- * @param {Object} params the parameters of the event
- * @return {Array} array of types
- */
-ContractEvent.prototype.types = function (indexed, params) {
-    return params.filter(function (i) {
-        return i.indexed === indexed;
-    }).map(function (i) {
-        return i.type;
-    });
-};
- 
-/**
- * Should be used to get event display name
- *
- * @method displayName
- * @param {String} name (optional) the events name
- * @return {String} event display name
- */
-ContractEvent.prototype.displayName = function (name) {
-    return utils.extractDisplayName(name || this._name);
-};
- 
-/**
- * Should be used to get event type name
- *
- * @method typeName
- * @return {String} event type name
- */
-ContractEvent.prototype.typeName = function () {
-    return utils.extractTypeName(this._name);
-};
- 
-/**
- * Should be used to get event signature
- *
- * @method signature
- * @return {String} event signature
- */
-ContractEvent.prototype.signature = function () {
-    return sha3(this._name);
-};
- 
-/**
- * Should be used to encode indexed params and options to one final object
- * 
- * @method encode
- * @param {Object} options
- * @return {Object} everything combined together and encoded
- */
-ContractEvent.prototype.encode = function (options) {
-    options = options || {};
-    indexed = options.filter || {};
-    var result = {};
- 
- 
-    ['fromBlock', 'toBlock'].filter(function (f) {
-        return options[f] !== undefined;
-    }).forEach(function (f) {
-        result[f] = formatters.inputBlockNumberFormatter(options[f]);
-    });
- 
-    result.topics = [];
- 
-    // single events
-    if(!this._allEvents) {
-        
-        if (!this._anonymous) {
-            result.topics.push('0x' + this.signature());
-        }
- 
-        var indexedTopics = this._params.filter(function (i) {
-            return i.indexed === true;
-        }).map(function (i) {
-            var value = indexed[i.name];
-            if (value === undefined || value === null) {
-                return null;
-            }
-            
-            if (utils.isArray(value)) {
-                return value.map(function (v) {
-                    return '0x' + coder.encodeParam(i.type, v);
-                });
-            }
-            return '0x' + coder.encodeParam(i.type, value);
-        });
- 
-        result.topics = result.topics.concat(indexedTopics);
-    }
- 
-    result.address = this._address;
- 
-    return result;
-};
- 
-/**
- * Should be used to decode indexed params and options
- *
- * @method decode
- * @param {Object} data
- * @return {Object} result object with decoded indexed && not indexed params
- */
-ContractEvent.prototype.decode = function (data) {
-    var name = params = anonymous = null;
-    data.data = data.data || '';
-    data.topics = data.topics || [];
- 
-    // all events
-    if(this._allEvents) {
- 
-        var eventTopic = data.topics[0].slice(2);
-        var match = this._json.filter(function (j) {
-            return eventTopic === sha3(utils.transformToFullName(j));
-        })[0];
- 
-        Iif (!match) { // cannot find matching event?
-            console.warn('Can\'t find event for log');
-            return data;
-        }
- 
-        name = utils.transformToFullName(match);
-        params = match.inputs;
-        anonymous = match.anonymous;
- 
-    // single event
-    } else {
-        name = this._name;
-        params = this._params;
-        anonymous = this._anonymous;
-    }
- 
-    var argTopics = anonymous ? data.topics : data.topics.slice(1);
-    var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join("");
-    var indexedParams = coder.decodeParams(this.types(true, params), indexedData); 
- 
-    var notIndexedData = data.data.slice(2);
-    var notIndexedParams = coder.decodeParams(this.types(false, params), notIndexedData);
-    
-    var result = formatters.outputLogFormatter(data);
-    result.event = this.displayName(name);
-    result.address = data.address;
- 
-    result.returnValues = params.reduce(function (acc, current) {
-        acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();
-        return acc;
-    }, {});
- 
-    delete result.data;
-    delete result.topics;
- 
-    return result;
-};
- 
-/**
- * Get the arguments of the function call
- *
- * @method getArgs
- * @param {Object} options
- * @param {Function} callback
- * @return {Object} filter object
- */
-ContractEvent.prototype.getArgs = function (options, callback) {
- 
-    Eif (utils.isFunction(arguments[arguments.length - 1])) {
-        callback = arguments[arguments.length - 1];
- 
-        if(arguments.length === 1) {
-            options = null;
-        }
-    }
-    
-    return {
-        options: this.encode(options),
-        formatter: this.decode.bind(this),
-        callback: callback
-    };
-};
- 
-/**
- * Should be used to create new filter object from event
- *
- * @method execute
- * @param {Object} options
- * @param {Function} callback
- * @return {Object} filter object
- */
-ContractEvent.prototype.execute = function (options, callback) {
- 
-    var args = this.getArgs.apply(this, arguments);
-    var subscription = new Subscription({
-        subscription: {
-            params: 1,
-            inputFormatter: [formatters.inputLogFormatter],
-            outputFormatter: args.formatter
-        },
-        subscribeMethod: 'eth_subscribe',
-        unsubscribeMethod: 'eth_unsubscribe',
-        requestManager: this._requestManager
-    });
- 
-    return subscription.subscribe.apply(subscription, ['logs', args.options, args.callback]);
-};
- 
-// TODO: put indexed args into the options object
- 
-/**
- * Get past logs for this event
- *
- * @method getPastEvents
- * @param {Object} options
- * @param {Function} callback
- * @param {Contract}
- */
-ContractEvent.prototype.getPastEvents = function(options, callback){
- 
-    var args = this.getArgs.apply(this, arguments);
- 
-    if (utils.isFunction(callback)) {
-        this._requestManager.sendAsync({
-            method: 'eth_getLogs',
-            params: [args.options]
-        }, function(error, logs){
-            if(!error) {
-                args.callback(null, logs.map(args.formatter));
-            } else {
-                args.callback(error);
-            }
-        });
-    }
- 
-    return this._requestManager.send({
-        method: 'eth_getLogs',
-        params: [args.options]
-    }).map(args.formatter);
-};
- 
-/**
- * Should be used to attach event to contract object
- *
- * @method attachToContract
- * @param {Contract}
- */
-ContractEvent.prototype.attachToContract = function (contract) {
-    var execute = this.execute.bind(this);
- 
-    // attach past logs
-    execute.getPastEvents = this.getPastEvents.bind(this);
- 
-    // all events
-    if(this._allEvents) {
-        contract.allEvents = execute;
-    
-    // single event
-    } else {
- 
-        var displayName = this.displayName();
-        Eif (!contract[displayName]) {
-            contract[displayName] = execute;
-        }
-        contract[displayName][this.typeName()] = this.execute.bind(this, contract);
-    }
- 
-};
- 
-module.exports = ContractEvent;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html deleted file mode 100644 index 7d2e620..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - Code coverage report for web3/lib/web3/extend.js - - - - - - -
-

Code coverage report for web3/lib/web3/extend.js

-

- Statements: 100% (26 / 26)      - Branches: 87.5% (7 / 8)      - Functions: 100% (4 / 4)      - Lines: 100% (26 / 26)      - Ignored: none      -

-
All files » web3/lib/web3/ » extend.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -491 -1 -1 -1 -  -  -  -1 -  -154 -  -157 -157 -1 -1 -  -1 -  -156 -  -  -157 -2 -2 -2 -  -  -  -157 -156 -618 -618 -  -  -  -  -154 -154 -154 -154 -  -154 -  -  -  -  -1 -  - 
var formatters = require('./formatters');
-var utils = require('./../utils/utils');
-var Method = require('./method');
-var Property = require('./property');
- 
-// TODO: refactor, so the input params are not altered.
-// it's necessary to make same 'extension' work with multiple providers
-var extend = function (web3) {
-    /* jshint maxcomplexity:5 */
-    var ex = function (extension) {
- 
-        var extendedObject;
-        if (extension.property) {
-            Eif (!web3[extension.property]) {
-                web3[extension.property] = {};
-            }
-            extendedObject = web3[extension.property];
-        } else {
-            extendedObject = web3;
-        }
- 
-        if (extension.methods) {
-            extension.methods.forEach(function (method) {
-                method.attachToObject(extendedObject);
-                method.setRequestManager(web3._requestManager);
-            });
-        }
- 
-        if (extension.properties) {
-            extension.properties.forEach(function (property) {
-                property.attachToObject(extendedObject);
-                property.setRequestManager(web3._requestManager);
-            });
-        }
-    };
- 
-    ex.formatters = formatters; 
-    ex.utils = utils;
-    ex.Method = Method;
-    ex.Property = Property;
- 
-    return ex;
-};
- 
- 
- 
-module.exports = extend;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html deleted file mode 100644 index 59be9e4..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html +++ /dev/null @@ -1,735 +0,0 @@ - - - - Code coverage report for web3/lib/web3/filter.js - - - - - - -
-

Code coverage report for web3/lib/web3/filter.js

-

- Statements: 90.22% (83 / 92)      - Branches: 73.91% (34 / 46)      - Functions: 87.5% (21 / 24)      - Lines: 90.22% (83 / 92)      - Ignored: none      -

-
All files » web3/lib/web3/ » filter.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -1 -  -19 -4 -  -15 -  -15 -12 -  -3 -  -  -  -  -  -1 -  -15 -6 -  -  -9 -  -  -9 -9 -17 -  -  -9 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -7 -3 -  -3 -  -  -  -3 -3 -3 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -7 -7 -  -  -  -  -  -7 -7 -7 -7 -7 -  -  -  -  -  -7 -  -  -  -  -  -  -1 -15 -15 -15 -60 -60 -  -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -  -  -  -  -15 -  -  -  -15 -4 -  -15 -  -  -15 -4 -  -15 -4 -  -  -15 -3 -  -  -  -  -15 -  -  -1 -7 -  -7 -3 -3 -  -  -7 -  -  -1 -7 -  -7 -7 -  -  -1 -15 -15 -11 -  -  -4 -  -7 -7 -  -  -7 -11 -  -  -  -  -  -4 -4 -  -  -  -  -  -  -  -11 -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file filter.js
- * @authors:
- *   Jeffrey Wilcke <jeff@ethdev.com>
- *   Marek Kotewicz <marek@ethdev.com>
- *   Marian Oancea <marian@ethdev.com>
- *   Fabian Vogelsteller <fabian@ethdev.com>
- *   Gav Wood <g@ethdev.com>
- * @date 2014
- */
- 
-var formatters = require('./formatters');
-var utils = require('../utils/utils');
- 
-/**
-* Converts a given topic to a hex string, but also allows null values.
-*
-* @param {Mixed} value
-* @return {String}
-*/
-var toTopic = function(value){
- 
-    if(value === null || typeof value === 'undefined')
-        return null;
- 
-    value = String(value);
- 
-    if(value.indexOf('0x') === 0)
-        return value;
-    else
-        return utils.fromUtf8(value);
-};
- 
-/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
-/// @param should be string or object
-/// @returns options string or object
-var getOptions = function (options) {
- 
-    if (utils.isString(options)) {
-        return options;
-    }
- 
-    options = options || {};
- 
-    // make sure topics, get converted to hex
-    options.topics = options.topics || [];
-    options.topics = options.topics.map(function(topic){
-        return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
-    });
- 
-    return {
-        topics: options.topics,
-        from: options.from,
-        to: options.to,
-        address: options.address,
-        fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),
-        toBlock: formatters.inputBlockNumberFormatter(options.toBlock)
-    };
-};
- 
-/**
-Adds the callback and sets up the methods, to iterate over the results.
- 
-@method getLogsAtStart
-@param {Object} self
-@param {funciton}
-*/
-var getLogsAtStart = function(self, callback){
-    // call getFilterLogs for the first watch callback start
-    if (!utils.isString(self.options)) {
-        self.get(function (err, messages) {
-            // don't send all the responses to all the watches again... just to self one
-            Iif (err) {
-                callback(err);
-            }
- 
-            Eif(utils.isArray(messages)) {
-                messages.forEach(function (message) {
-                    callback(null, message);
-                });
-            }
-        });
-    }
-};
- 
-/**
-Adds the callback and sets up the methods, to iterate over the results.
- 
-@method pollFilter
-@param {Object} self
-*/
-var pollFilter = function(self) {
- 
-    var onMessage = function (error, messages) {
-        Iif (error) {
-            return self.callbacks.forEach(function (callback) {
-                callback(error);
-            });
-        }
- 
-        Eif(utils.isArray(messages)) {
-            messages.forEach(function (message) {
-                message = self.formatter ? self.formatter(message) : message;
-                self.callbacks.forEach(function (callback) {
-                    callback(null, message);
-                });
-            });
-        }
-    };
- 
-    self.requestManager.startPolling({
-        method: self.implementation.poll.call,
-        params: [self.filterId],
-    }, self.filterId, onMessage, self.stopWatching.bind(self));
- 
-};
- 
-var Filter = function (requestManager, options, methods, formatter, callback) {
-    var self = this;
-    var implementation = {};
-    methods.forEach(function (method) {
-        method.setRequestManager(requestManager);
-        method.attachToObject(implementation);
-    });
-    this.requestManager = requestManager;
-    this.options = getOptions(options);
-    this.implementation = implementation;
-    this.filterId = null;
-    this.callbacks = [];
-    this.getLogsCallbacks = [];
-    this.pollFilters = [];
-    this.formatter = formatter;
-    this.implementation.newFilter(this.options, function(error, id){
-        Iif(error) {
-            self.callbacks.forEach(function(cb){
-                cb(error);
-            });
-        } else {
-            self.filterId = id;
- 
-            // check if there are get pending callbacks as a consequence
-            // of calling get() with filterId unassigned.
-            self.getLogsCallbacks.forEach(function (cb){
-                self.get(cb);
-            });
-            self.getLogsCallbacks = [];
- 
-            // get filter logs for the already existing watch calls
-            self.callbacks.forEach(function(cb){
-                getLogsAtStart(self, cb);
-            });
-            if(self.callbacks.length > 0)
-                pollFilter(self);
- 
-            // start to watch immediately
-            if(typeof callback === 'function') {
-                return self.watch(callback);
-            }
-        }
-    });
- 
-    return this;
-};
- 
-Filter.prototype.watch = function (callback) {
-    this.callbacks.push(callback);
- 
-    if(this.filterId) {
-        getLogsAtStart(this, callback);
-        pollFilter(this);
-    }
- 
-    return this;
-};
- 
-Filter.prototype.stopWatching = function () {
-    this.requestManager.stopPolling(this.filterId);
-    // remove filter async
-    this.implementation.uninstallFilter(this.filterId, function(){});
-    this.callbacks = [];
-};
- 
-Filter.prototype.get = function (callback) {
-    var self = this;
-    if (utils.isFunction(callback)) {
-        if (this.filterId === null) {
-            // If filterId is not set yet, call it back
-            // when newFilter() assigns it.
-            this.getLogsCallbacks.push(callback);
-        } else {
-            this.implementation.getLogs(this.filterId, function(err, res){
-                Iif (err) {
-                    callback(err);
-                } else {
-                    callback(null, res.map(function (log) {
-                        return self.formatter ? self.formatter(log) : log;
-                    }));
-                }
-            });
-        }
-    } else {
-        Eif (this.filterId === null) {
-            throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.');
-        }
-        var logs = this.implementation.getLogs(this.filterId);
-        return logs.map(function (log) {
-            return self.formatter ? self.formatter(log) : log;
-        });
-    }
- 
-    return this;
-};
- 
-module.exports = Filter;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html deleted file mode 100644 index 887c64e..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html +++ /dev/null @@ -1,1050 +0,0 @@ - - - - Code coverage report for web3/lib/web3/formatters.js - - - - - - -
-

Code coverage report for web3/lib/web3/formatters.js

-

- Statements: 92.97% (119 / 128)      - Branches: 80.28% (57 / 71)      - Functions: 96% (24 / 25)      - Lines: 92.97% (119 / 128)      - Ignored: none      -

-
All files » web3/lib/web3/ » formatters.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -1 -26 -  -  -1 -67 -  -  -1 -55 -20 -  -35 -  -  -1 -67 -  -67 -15 -  -52 -  -  -  -  -  -  -  -  -  -1 -  -15 -  -15 -4 -  -  -15 -15 -  -  -15 -60 -  -18 -  -  -15 -  -  -  -  -  -  -  -  -  -1 -  -13 -13 -  -13 -11 -  -  -13 -52 -  -24 -  -  -13 -  -  -  -  -  -  -  -  -  -1 -12 -11 -12 -11 -12 -12 -12 -12 -12 -  -  -  -  -  -  -  -  -  -1 -2 -2 -2 -2 -2 -2 -  -2 -2 -4 -  -  -  -2 -  -  -  -  -  -  -  -  -  -1 -  -  -15 -15 -15 -15 -15 -14 -  -15 -15 -  -15 -12 -20 -4 -  -  -  -15 -  -  -  -  -  -  -  -  -  -1 -5 -  -7 -2 -  -5 -  -5 -5 -  -  -  -  -  -5 -5 -7 -  -  -5 -  -5 -  -  -5 -  -  -  -  -  -  -  -  -  -1 -16 -13 -16 -13 -16 -13 -  -16 -  -  -  -  -  -  -  -  -  -1 -  -  -5 -5 -5 -  -  -5 -  -  -  -  -5 -  -6 -  -  -5 -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -  -  -1 -2 -  -  -1 -  -  -1 -80 -80 -8 -72 -58 -14 -9 -  -5 -  -  -  -1 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file formatters.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @author Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
-var config = require('../utils/config');
-var Iban = require('./iban');
- 
-/**
- * Should the format output to a big number
- *
- * @method outputBigNumberFormatter
- * @param {String|Number|BigNumber}
- * @returns {BigNumber} object
- */
-var outputBigNumberFormatter = function (number) {
-    return utils.toBigNumber(number);
-};
- 
-var isPredefinedBlockNumber = function (blockNumber) {
-    return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';
-};
- 
-var inputDefaultBlockNumberFormatter = function (blockNumber) {
-    if (blockNumber === undefined) {
-        return config.defaultBlock;
-    }
-    return inputBlockNumberFormatter(blockNumber);
-};
- 
-var inputBlockNumberFormatter = function (blockNumber) {
-    Iif (blockNumber === undefined) {
-        return undefined;
-    } else if (isPredefinedBlockNumber(blockNumber)) {
-        return blockNumber;
-    }
-    return utils.toHex(blockNumber);
-};
- 
-/**
- * Formats the input of a transaction and converts all values to HEX
- *
- * @method inputCallFormatter
- * @param {Object} transaction options
- * @returns object
-*/
-var inputCallFormatter = function (options){
- 
-    options.from = options.from || config.defaultAccount;
- 
-    if (options.from) {
-        options.from = inputAddressFormatter(options.from);
-    }
- 
-    Eif (options.to) { // it might be contract creation
-        options.to = inputAddressFormatter(options.to);
-    }
- 
-    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
-        return options[key] !== undefined;
-    }).forEach(function(key){
-        options[key] = utils.fromDecimal(options[key]);
-    });
- 
-    return options; 
-};
- 
-/**
- * Formats the input of a transaction and converts all values to HEX
- *
- * @method inputTransactionFormatter
- * @param {Object} transaction options
- * @returns object
-*/
-var inputTransactionFormatter = function (options){
- 
-    options.from = options.from || config.defaultAccount;
-    options.from = inputAddressFormatter(options.from);
- 
-    if (options.to) { // it might be contract creation
-        options.to = inputAddressFormatter(options.to);
-    }
- 
-    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
-        return options[key] !== undefined;
-    }).forEach(function(key){
-        options[key] = utils.fromDecimal(options[key]);
-    });
- 
-    return options; 
-};
- 
-/**
- * Formats the output of a transaction to its proper values
- * 
- * @method outputTransactionFormatter
- * @param {Object} tx
- * @returns {Object}
-*/
-var outputTransactionFormatter = function (tx){
-    if(tx.blockNumber !== null)
-        tx.blockNumber = utils.toDecimal(tx.blockNumber);
-    if(tx.transactionIndex !== null)
-        tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
-    tx.nonce = utils.toDecimal(tx.nonce);
-    tx.gas = utils.toDecimal(tx.gas);
-    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
-    tx.value = utils.toBigNumber(tx.value);
-    return tx;
-};
- 
-/**
- * Formats the output of a transaction receipt to its proper values
- * 
- * @method outputTransactionReceiptFormatter
- * @param {Object} receipt
- * @returns {Object}
-*/
-var outputTransactionReceiptFormatter = function (receipt){
-    Eif(receipt.blockNumber !== null)
-        receipt.blockNumber = utils.toDecimal(receipt.blockNumber);
-    Eif(receipt.transactionIndex !== null)
-        receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);
-    receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);
-    receipt.gasUsed = utils.toDecimal(receipt.gasUsed);
- 
-    Eif(utils.isArray(receipt.logs)) {
-        receipt.logs = receipt.logs.map(function(log){
-            return outputLogFormatter(log);
-        });
-    }
- 
-    return receipt;
-};
- 
-/**
- * Formats the output of a block to its proper values
- *
- * @method outputBlockFormatter
- * @param {Object} block 
- * @returns {Object}
-*/
-var outputBlockFormatter = function(block) {
- 
-    // transform to number
-    block.gasLimit = utils.toDecimal(block.gasLimit);
-    block.gasUsed = utils.toDecimal(block.gasUsed);
-    block.size = utils.toDecimal(block.size);
-    block.timestamp = utils.toDecimal(block.timestamp);
-    if(block.number !== null)
-        block.number = utils.toDecimal(block.number);
- 
-    block.difficulty = utils.toBigNumber(block.difficulty);
-    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);
- 
-    if (utils.isArray(block.transactions)) {
-        block.transactions.forEach(function(item){
-            if(!utils.isString(item))
-                return outputTransactionFormatter(item);
-        });
-    }
- 
-    return block;
-};
- 
-/**
- * Formats the input of a log
- * 
- * @method inputLogFormatter
- * @param {Object} log object
- * @returns {Object} log
-*/
-var inputLogFormatter = function(options) {
-    var toTopic = function(value){
- 
-        if(value === null || typeof value === 'undefined')
-            return null;
- 
-        value = String(value);
- 
-        Eif(value.indexOf('0x') === 0)
-            return value;
-        else
-            return utils.fromUtf8(value);
-    };
- 
-    // make sure topics, get converted to hex
-    options.topics = options.topics || [];
-    options.topics = options.topics.map(function(topic){
-        return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
-    });
- 
-    toTopic = null;
- 
-    Iif(options.address && !utils.isAddress(options.address))
-        throw new Error('The given address is not valid!');
- 
-    return options;
-};
- 
-/**
- * Formats the output of a log
- * 
- * @method outputLogFormatter
- * @param {Object} log object
- * @returns {Object} log
-*/
-var outputLogFormatter = function(log) {
-    if(log.blockNumber !== null)
-        log.blockNumber = utils.toDecimal(log.blockNumber);
-    if(log.transactionIndex !== null)
-        log.transactionIndex = utils.toDecimal(log.transactionIndex);
-    if(log.logIndex !== null)
-        log.logIndex = utils.toDecimal(log.logIndex);
- 
-    return log;
-};
- 
-/**
- * Formats the input of a whisper post and converts all values to HEX
- *
- * @method inputPostFormatter
- * @param {Object} transaction object
- * @returns {Object}
-*/
-var inputPostFormatter = function(post) {
- 
-    // post.payload = utils.toHex(post.payload);
-    post.ttl = utils.fromDecimal(post.ttl);
-    post.workToProve = utils.fromDecimal(post.workToProve);
-    post.priority = utils.fromDecimal(post.priority);
- 
-    // fallback
-    Iif (!utils.isArray(post.topics)) {
-        post.topics = post.topics ? [post.topics] : [];
-    }
- 
-    // format the following options
-    post.topics = post.topics.map(function(topic){
-        // convert only if not hex
-        return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);
-    });
- 
-    return post; 
-};
- 
-/**
- * Formats the output of a received post message
- *
- * @method outputPostFormatter
- * @param {Object}
- * @returns {Object}
- */
-var outputPostFormatter = function(post){
- 
-    post.expiry = utils.toDecimal(post.expiry);
-    post.sent = utils.toDecimal(post.sent);
-    post.ttl = utils.toDecimal(post.ttl);
-    post.workProved = utils.toDecimal(post.workProved);
-    // post.payloadRaw = post.payload;
-    // post.payload = utils.toAscii(post.payload);
- 
-    // if (utils.isJson(post.payload)) {
-    //     post.payload = JSON.parse(post.payload);
-    // }
- 
-    // format the following options
-    Iif (!post.topics) {
-        post.topics = [];
-    }
-    post.topics = post.topics.map(function(topic){
-        return utils.toAscii(topic);
-    });
- 
-    return post;
-};
- 
-var inputAddressFormatter = function (address) {
-    var iban = new Iban(address);
-    if (iban.isValid() && iban.isDirect()) {
-        return '0x' + iban.address();
-    } else if (utils.isStrictAddress(address)) {
-        return address;
-    } else if (utils.isAddress(address)) {
-        return '0x' + address;
-    }
-    throw 'invalid address';
-};
- 
- 
-var outputSyncingFormatter = function(result) {
- 
-    result.startingBlock = utils.toDecimal(result.startingBlock);
-    result.currentBlock = utils.toDecimal(result.currentBlock);
-    result.highestBlock = utils.toDecimal(result.highestBlock);
- 
-    return result;
-};
- 
-module.exports = {
-    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
-    inputBlockNumberFormatter: inputBlockNumberFormatter,
-    inputCallFormatter: inputCallFormatter,
-    inputTransactionFormatter: inputTransactionFormatter,
-    inputAddressFormatter: inputAddressFormatter,
-    inputPostFormatter: inputPostFormatter,
-    inputLogFormatter: inputLogFormatter,
-    outputBigNumberFormatter: outputBigNumberFormatter,
-    outputTransactionFormatter: outputTransactionFormatter,
-    outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
-    outputBlockFormatter: outputBlockFormatter,
-    outputLogFormatter: outputLogFormatter,
-    outputPostFormatter: outputPostFormatter,
-    outputSyncingFormatter: outputSyncingFormatter
-};
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html deleted file mode 100644 index 5f02de8..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html +++ /dev/null @@ -1,786 +0,0 @@ - - - - Code coverage report for web3/lib/web3/function.js - - - - - - -
-

Code coverage report for web3/lib/web3/function.js

-

- Statements: 94.57% (87 / 92)      - Branches: 82.14% (23 / 28)      - Functions: 95% (19 / 20)      - Lines: 94.44% (85 / 90)      - Ignored: none      -

-
All files » web3/lib/web3/ » function.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -1 -68 -68 -94 -  -68 -42 -  -68 -68 -68 -  -  -1 -16 -4 -  -  -  -1 -8 -2 -  -  -  -  -  -  -  -  -  -  -1 -16 -16 -9 -  -16 -16 -16 -  -  -  -  -  -  -  -  -1 -16 -  -  -  -1 -9 -  -  -  -9 -9 -9 -  -  -  -  -  -  -  -  -  -  -  -  -1 -14 -8 -8 -8 -  -  -8 -7 -7 -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -1 -16 -5 -5 -  -5 -4 -  -  -1 -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -1 -2 -2 -2 -2 -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -1 -9 -  -  -9 -3 -  -  -  -6 -  -  -  -  -  -  -  -  -1 -68 -68 -68 -68 -68 -68 -68 -68 -67 -  -68 -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @file function.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var coder = require('../solidity/coder');
-var utils = require('../utils/utils');
-var formatters = require('./formatters');
-var sha3 = require('../utils/sha3');
- 
-/**
- * This prototype should be used to call/sendTransaction to solidity functions
- */
-var SolidityFunction = function (eth, json, address) {
-    this._eth = eth;
-    this._inputTypes = json.inputs.map(function (i) {
-        return i.type;
-    });
-    this._outputTypes = json.outputs.map(function (i) {
-        return i.type;
-    });
-    this._constant = json.constant;
-    this._name = utils.transformToFullName(json);
-    this._address = address;
-};
- 
-SolidityFunction.prototype.extractCallback = function (args) {
-    if (utils.isFunction(args[args.length - 1])) {
-        return args.pop(); // modify the args array!
-    }
-};
- 
-SolidityFunction.prototype.extractDefaultBlock = function (args) {
-    if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {
-        return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!
-    }
-};
- 
-/**
- * Should be used to create payload from arguments
- *
- * @method toPayload
- * @param {Array} solidity function params
- * @param {Object} optional payload options
- */
-SolidityFunction.prototype.toPayload = function (args) {
-    var options = {};
-    if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {
-        options = args[args.length - 1];
-    }
-    options.to = this._address;
-    options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);
-    return options;
-};
- 
-/**
- * Should be used to get function signature
- *
- * @method signature
- * @return {String} function signature
- */
-SolidityFunction.prototype.signature = function () {
-    return sha3(this._name).slice(0, 8);
-};
- 
- 
-SolidityFunction.prototype.unpackOutput = function (output) {
-    Iif (!output) {
-        return;
-    }
- 
-    output = output.length >= 2 ? output.slice(2) : output;
-    var result = coder.decodeParams(this._outputTypes, output);
-    return result.length === 1 ? result[0] : result;
-};
- 
-/**
- * Calls a contract function.
- *
- * @method call
- * @param {...Object} Contract function arguments
- * @param {function} If the last argument is a function, the contract function
- *   call will be asynchronous, and the callback will be passed the
- *   error and result.
- * @return {String} output bytes
- */
-SolidityFunction.prototype.call = function () {
-    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
-    var callback = this.extractCallback(args);
-    var defaultBlock = this.extractDefaultBlock(args);
-    var payload = this.toPayload(args);
- 
- 
-    if (!callback) {
-        var output = this._eth.call(payload, defaultBlock);
-        return this.unpackOutput(output);
-    } 
-        
-    var self = this;
-    this._eth.call(payload, defaultBlock, function (error, output) {
-        callback(error, self.unpackOutput(output));
-    });
-};
- 
-/**
- * Should be used to sendTransaction to solidity function
- *
- * @method sendTransaction
- */
-SolidityFunction.prototype.sendTransaction = function () {
-    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
-    var callback = this.extractCallback(args);
-    var payload = this.toPayload(args);
- 
-    if (!callback) {
-        return this._eth.sendTransaction(payload);
-    }
- 
-    this._eth.sendTransaction(payload, callback);
-};
- 
-/**
- * Should be used to estimateGas of solidity function
- *
- * @method estimateGas
- */
-SolidityFunction.prototype.estimateGas = function () {
-    var args = Array.prototype.slice.call(arguments);
-    var callback = this.extractCallback(args);
-    var payload = this.toPayload(args);
- 
-    Eif (!callback) {
-        return this._eth.estimateGas(payload);
-    }
- 
-    this._eth.estimateGas(payload, callback);
-};
- 
-/**
- * Return the encoded data of the call
- *
- * @method getData
- * @return {String} the encoded data
- */
-SolidityFunction.prototype.getData = function () {
-    var args = Array.prototype.slice.call(arguments);
-    var payload = this.toPayload(args);
- 
-    return payload.data;
-};
- 
-/**
- * Should be used to get function display name
- *
- * @method displayName
- * @return {String} display name of the function
- */
-SolidityFunction.prototype.displayName = function () {
-    return utils.extractDisplayName(this._name);
-};
- 
-/**
- * Should be used to get function type name
- *
- * @method typeName
- * @return {String} type name of the function
- */
-SolidityFunction.prototype.typeName = function () {
-    return utils.extractTypeName(this._name);
-};
- 
-/**
- * Should be called to get rpc requests from solidity function
- *
- * @method request
- * @returns {Object}
- */
-SolidityFunction.prototype.request = function () {
-    var args = Array.prototype.slice.call(arguments);
-    var callback = this.extractCallback(args);
-    var payload = this.toPayload(args);
-    var format = this.unpackOutput.bind(this);
-    
-    return {
-        method: this._constant ? 'eth_call' : 'eth_sendTransaction',
-        callback: callback,
-        params: [payload], 
-        format: format
-    };
-};
- 
-/**
- * Should be called to execute function
- *
- * @method execute
- */
-SolidityFunction.prototype.execute = function () {
-    var transaction = !this._constant;
- 
-    // send transaction
-    if (transaction) {
-        return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));
-    }
- 
-    // call
-    return this.call.apply(this, Array.prototype.slice.call(arguments));
-};
- 
-/**
- * Should be called to attach function to contract
- *
- * @method attachToContract
- * @param {Contract}
- */
-SolidityFunction.prototype.attachToContract = function (contract) {
-    var execute = this.execute.bind(this);
-    execute.request = this.request.bind(this);
-    execute.call = this.call.bind(this);
-    execute.sendTransaction = this.sendTransaction.bind(this);
-    execute.estimateGas = this.estimateGas.bind(this);
-    execute.getData = this.getData.bind(this);
-    var displayName = this.displayName();
-    if (!contract[displayName]) {
-        contract[displayName] = execute;
-    }
-    contract[displayName][this.typeName()] = execute; // circular!!!!
-};
- 
-module.exports = SolidityFunction;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html deleted file mode 100644 index ffd76ec..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - Code coverage report for web3/lib/web3/httpprovider.js - - - - - - -
-

Code coverage report for web3/lib/web3/httpprovider.js

-

- Statements: 83.72% (36 / 43)      - Branches: 58.33% (7 / 12)      - Functions: 100% (6 / 6)      - Lines: 83.72% (36 / 43)      - Ignored: none      -

-
All files » web3/lib/web3/ » httpprovider.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -2 -  -  -2 -  -  -  -2 -  -  -  -  -2 -  -  -  -  -  -2 -3 -  -  -  -  -  -  -  -  -  -2 -3 -3 -3 -3 -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -2 -  -  -  -  -2 -  -2 -2 -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -2 -1 -  -1 -1 -1 -1 -  -1 -1 -  -  -  -  -1 -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -  -2 -1 -1 -  -  -  -  -  -1 -  -  -  -  -  -2 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file httpprovider.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- *   Marian Oancea <marian@ethdev.com>
- *   Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-"use strict";
- 
-var errors = require('./errors');
- 
-// workaround to use httpprovider in different envs
-var XMLHttpRequest; // jshint ignore: line
- 
-// meteor server environment
-Iif (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line
-    XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line
- 
-// browser
-} else Iif (typeof window !== 'undefined' && window.XMLHttpRequest) {
-    XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line
- 
-// node
-} else {
-    XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line
-}
- 
-/**
- * HttpProvider should be used to send rpc calls over http
- */
-var HttpProvider = function (host) {
-    this.host = host || 'http://localhost:8545';
-};
- 
-/**
- * Should be called to prepare new XMLHttpRequest
- *
- * @method prepareRequest
- * @param {Boolean} true if request should be async
- * @return {XMLHttpRequest} object
- */
-HttpProvider.prototype.prepareRequest = function (async) {
-    var request = new XMLHttpRequest();
-    request.open('POST', this.host, async);
-    request.setRequestHeader('Content-Type','application/json');
-    return request;
-};
- 
-/**
- * Should be called to make sync request
- *
- * @method send
- * @param {Object} payload
- * @return {Object} result
- */
-HttpProvider.prototype.send = function (payload) {
-    var request = this.prepareRequest(false);
- 
-    try {
-        request.send(JSON.stringify(payload));
-    } catch(error) {
-        throw errors.InvalidConnection(this.host);
-    }
- 
-    var result = request.responseText;
- 
-    try {
-        result = JSON.parse(result);
-    } catch(e) {
-        throw errors.InvalidResponse(request.responseText);                
-    }
- 
-    return result;
-};
- 
-/**
- * Should be used to make async request
- *
- * @method sendAsync
- * @param {Object} payload
- * @param {Function} callback triggered on end with (err, result)
- */
-HttpProvider.prototype.sendAsync = function (payload, callback) {
-    var request = this.prepareRequest(true); 
- 
-    request.onreadystatechange = function() {
-        Eif (request.readyState === 4) {
-            var result = request.responseText;
-            var error = null;
- 
-            try {
-                result = JSON.parse(result);
-            } catch(e) {
-                error = errors.InvalidResponse(request.responseText);                
-            }
- 
-            callback(error, result);
-        }
-    };
-    
-    try {
-        request.send(JSON.stringify(payload));
-    } catch(error) {
-        callback(errors.InvalidConnection(this.host));
-    }
-};
- 
-/**
- * Synchronously tries to make Http request
- *
- * @method isConnected
- * @return {Boolean} returns true if request haven't failed. Otherwise false
- */
-HttpProvider.prototype.isConnected = function() {
-    try {
-        this.send({
-            id: 9999999999,
-            jsonrpc: '2.0',
-            method: 'net_listening',
-            params: []
-        });
-        return true;
-    } catch(e) {
-        return false;
-    }
-};
- 
-module.exports = HttpProvider;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html deleted file mode 100644 index 55b46bb..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html +++ /dev/null @@ -1,726 +0,0 @@ - - - - Code coverage report for web3/lib/web3/iban.js - - - - - - -
-

Code coverage report for web3/lib/web3/iban.js

-

- Statements: 95% (57 / 60)      - Branches: 78.57% (11 / 14)      - Functions: 88.24% (15 / 17)      - Lines: 95% (57 / 60)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -15 -15 -11 -  -15 -  -  -  -  -  -  -  -  -  -  -1 -21 -21 -  -21 -21 -  -21 -661 -661 -  -450 -  -211 -  -  -  -  -  -  -  -  -  -  -  -1 -21 -  -  -21 -158 -158 -  -  -21 -  -  -  -  -  -  -  -1 -113 -  -  -  -  -  -  -  -  -  -1 -5 -5 -5 -5 -  -  -  -  -  -  -  -  -  -  -  -1 -6 -  -6 -6 -  -6 -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -1 -18 -18 -  -  -  -  -  -  -  -  -1 -99 -  -  -  -  -  -  -  -  -  -1 -19 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -1 -10 -10 -10 -10 -  -  -  -  -  -1 -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file iban.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var BigNumber = require('bignumber.js');
- 
-var padLeft = function (string, bytes) {
-    var result = string;
-    while (result.length < bytes * 2) {
-        result = '00' + result;
-    }
-    return result;
-};
- 
-/**
- * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
- * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
- *
- * @method iso13616Prepare
- * @param {String} iban the IBAN
- * @returns {String} the prepared IBAN
- */
-var iso13616Prepare = function (iban) {
-    var A = 'A'.charCodeAt(0);
-    var Z = 'Z'.charCodeAt(0);
- 
-    iban = iban.toUpperCase();
-    iban = iban.substr(4) + iban.substr(0,4);
- 
-    return iban.split('').map(function(n){
-        var code = n.charCodeAt(0);
-        if (code >= A && code <= Z){
-            // A = 10, B = 11, ... Z = 35
-            return code - A + 10;
-        } else {
-            return n;
-        }
-    }).join('');
-};
- 
-/**
- * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.
- *
- * @method mod9710
- * @param {String} iban
- * @returns {Number}
- */
-var mod9710 = function (iban) {
-    var remainder = iban,
-        block;
- 
-    while (remainder.length > 2){
-        block = remainder.slice(0, 9);
-        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
-    }
- 
-    return parseInt(remainder, 10) % 97;
-};
- 
-/**
- * This prototype should be used to create iban object from iban correct string
- *
- * @param {String} iban
- */
-var Iban = function (iban) {
-    this._iban = iban;
-};
- 
-/**
- * This method should be used to create iban object from ethereum address
- *
- * @method fromAddress
- * @param {String} address
- * @return {Iban} the IBAN object
- */
-Iban.fromAddress = function (address) {
-    var asBn = new BigNumber(address, 16);
-    var base36 = asBn.toString(36);
-    var padded = padLeft(base36, 15);
-    return Iban.fromBban(padded.toUpperCase());
-};
- 
-/**
- * Convert the passed BBAN to an IBAN for this country specification.
- * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
- * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
- *
- * @method fromBban
- * @param {String} bban the BBAN to convert to IBAN
- * @returns {Iban} the IBAN object
- */
-Iban.fromBban = function (bban) {
-    var countryCode = 'XE';
- 
-    var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
-    var checkDigit = ('0' + (98 - remainder)).slice(-2);
- 
-    return new Iban(countryCode + checkDigit + bban);
-};
- 
-/**
- * Should be used to create IBAN object for given institution and identifier
- *
- * @method createIndirect
- * @param {Object} options, required options are "institution" and "identifier"
- * @return {Iban} the IBAN object
- */
-Iban.createIndirect = function (options) {
-    return Iban.fromBban('ETH' + options.institution + options.identifier);
-};
- 
-/**
- * Thos method should be used to check if given string is valid iban object
- *
- * @method isValid
- * @param {String} iban string
- * @return {Boolean} true if it is valid IBAN
- */
-Iban.isValid = function (iban) {
-    var i = new Iban(iban);
-    return i.isValid();
-};
- 
-/**
- * Should be called to check if iban is correct
- *
- * @method isValid
- * @returns {Boolean} true if it is, otherwise false
- */
-Iban.prototype.isValid = function () {
-    return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
-        mod9710(iso13616Prepare(this._iban)) === 1;
-};
- 
-/**
- * Should be called to check if iban number is direct
- *
- * @method isDirect
- * @returns {Boolean} true if it is, otherwise false
- */
-Iban.prototype.isDirect = function () {
-    return this._iban.length === 34 || this._iban.length === 35;
-};
- 
-/**
- * Should be called to check if iban number if indirect
- *
- * @method isIndirect
- * @returns {Boolean} true if it is, otherwise false
- */
-Iban.prototype.isIndirect = function () {
-    return this._iban.length === 20;
-};
- 
-/**
- * Should be called to get iban checksum
- * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
- *
- * @method checksum
- * @returns {String} checksum
- */
-Iban.prototype.checksum = function () {
-    return this._iban.substr(2, 2);
-};
- 
-/**
- * Should be called to get institution identifier
- * eg. XREG
- *
- * @method institution
- * @returns {String} institution identifier
- */
-Iban.prototype.institution = function () {
-    return this.isIndirect() ? this._iban.substr(7, 4) : '';
-};
- 
-/**
- * Should be called to get client identifier within institution
- * eg. GAVOFYORK
- *
- * @method client
- * @returns {String} client identifier
- */
-Iban.prototype.client = function () {
-    return this.isIndirect() ? this._iban.substr(11) : '';
-};
- 
-/**
- * Should be called to get client direct address
- *
- * @method address
- * @returns {String} client direct address
- */
-Iban.prototype.address = function () {
-    Eif (this.isDirect()) {
-        var base36 = this._iban.substr(4);
-        var asBn = new BigNumber(base36, 36);
-        return padLeft(asBn.toString(16), 20);
-    } 
- 
-    return '';
-};
- 
-Iban.prototype.toString = function () {
-    return this._iban;
-};
- 
-module.exports = Iban;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html deleted file mode 100644 index 1820b72..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - Code coverage report for web3/lib/web3/ - - - - - - -
-

Code coverage report for web3/lib/web3/

-

- Statements: 85.02% (840 / 988)      - Branches: 67.4% (275 / 408)      - Functions: 86.7% (189 / 218)      - Lines: 84.97% (837 / 985)      - Ignored: none      -

-
All files » web3/lib/web3/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
batch.js100%(18 / 18)60%(6 / 10)100%(6 / 6)100%(18 / 18)
contract.js59.6%(59 / 99)23.81%(10 / 42)77.27%(17 / 22)59.6%(59 / 99)
errors.js83.33%(5 / 6)100%(5 / 5)75%(3 / 4)83.33%(5 / 6)
event.js91.51%(97 / 106)83.33%(35 / 42)90.91%(20 / 22)91.43%(96 / 105)
extend.js100%(26 / 26)87.5%(7 / 8)100%(4 / 4)100%(26 / 26)
formatters.js92.97%(119 / 128)80.28%(57 / 71)96%(24 / 25)92.97%(119 / 128)
function.js94.57%(87 / 92)82.14%(23 / 28)95%(19 / 20)94.44%(85 / 90)
httpprovider.js83.72%(36 / 43)58.33%(7 / 12)100%(6 / 6)83.72%(36 / 43)
iban.js95%(57 / 60)78.57%(11 / 14)88.24%(15 / 17)95%(57 / 60)
ipcprovider.js58.41%(66 / 113)35%(14 / 40)45.45%(10 / 22)58.41%(66 / 113)
jsonrpc.js94.74%(18 / 19)90.91%(10 / 11)100%(6 / 6)94.74%(18 / 19)
method.js100%(59 / 59)100%(28 / 28)100%(15 / 15)100%(59 / 59)
namereg.js100%(5 / 5)100%(0 / 0)100%(0 / 0)100%(5 / 5)
property.js97.78%(44 / 45)66.67%(8 / 12)92.31%(12 / 13)97.78%(44 / 45)
requestmanager.js86.15%(56 / 65)65.79%(25 / 38)100%(13 / 13)86.15%(56 / 65)
settings.js100%(4 / 4)100%(0 / 0)100%(1 / 1)100%(4 / 4)
subscription.js83.93%(47 / 56)68.57%(24 / 35)84.62%(11 / 13)83.93%(47 / 56)
subscriptions.js92%(23 / 25)33.33%(2 / 6)100%(5 / 5)92%(23 / 25)
transfer.js73.68%(14 / 19)50%(3 / 6)50%(2 / 4)73.68%(14 / 19)
-
-
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html deleted file mode 100644 index 201deb6..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html +++ /dev/null @@ -1,972 +0,0 @@ - - - - Code coverage report for web3/lib/web3/ipcprovider.js - - - - - - -
-

Code coverage report for web3/lib/web3/ipcprovider.js

-

- Statements: 58.41% (66 / 113)      - Branches: 35% (14 / 40)      - Functions: 45.45% (10 / 22)      - Lines: 58.41% (66 / 113)      - Ignored: none      -

-
All files » web3/lib/web3/ » ipcprovider.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -  -2 -5 -5 -5 -5 -  -5 -  -5 -  -  -  -5 -  -  -2 -  -2 -  -  -2 -  -  -  -  -  -2 -  -  -  -2 -  -  -  -  -  -  -2 -1 -1 -  -  -  -  -  -  -  -  -  -  -2 -5 -  -5 -  -  -  -5 -  -  -  -5 -  -  -  -  -  -  -  -  -  -  -2 -2 -  -  -  -2 -  -  -  -  -  -  -2 -  -  -2 -  -  -2 -  -2 -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -2 -  -  -2 -  -  -  -  -  -  -  -  -  -2 -1 -1 -  -1 -1 -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -3 -  -  -3 -2 -  -3 -  -  -2 -  -1 -1 -  -  -1 -1 -  -1 -  -1 -1 -  -  -  -  -1 -  -  -  -  -  -  -2 -  -1 -1 -  -  -1 -1 -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -2 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file ipcprovider.js
- * @authors:
- *   Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-"use strict";
- 
-var utils = require('../utils/utils');
-var errors = require('./errors');
- 
- 
-var IpcProvider = function (path, net) {
-    var _this = this;
-    this.responseCallbacks = {};
-    this.notificationCallbacks = [];
-    this.path = path;
-    
-    this.connection = net.connect({path: this.path});
- 
-    this.addDefaultEvents();
- 
- 
-    // LISTEN FOR CONNECTION RESPONSES
-    this.connection.on('data', function(data) {
-        /*jshint maxcomplexity: 6 */
- 
-        _this._parseResponse(data.toString()).forEach(function(result){
- 
-            var id = null;
- 
-            // get the id which matches the returned id
-            Iif(utils.isArray(result)) {
-                result.forEach(function(load){
-                    if(_this.responseCallbacks[load.id])
-                        id = load.id;
-                });
-            } else {
-                id = result.id;
-            }
- 
-            // notification
-            Iif(!id && result.method === 'eth_subscription') {
-                _this.notificationCallbacks.forEach(function(callback){
-                    if(utils.isFunction(callback))
-                        callback(null, result);
-                });
- 
-            // fire the callback
-            } else if(_this.responseCallbacks[id]) {
-                _this.responseCallbacks[id](null, result);
-                delete _this.responseCallbacks[id];
-            }
-        });
-    });
-};
- 
-/**
-Will add the error and end event to timeout existing calls
- 
-@method addDefaultEvents
-*/
-IpcProvider.prototype.addDefaultEvents = function(){
-    var _this = this;
- 
-    this.connection.on('error', function(e){
-        _this._timeout();
-    });
- 
-    this.connection.on('end', function(){
-        _this._timeout();
-    });
- 
-    this.connection.on('timeout', function(){
-        _this._timeout();
-    }); 
-};
- 
-/**
-Will parse the response and make an array out of it.
- 
-@method _parseResponse
-@param {String} data
-*/
-IpcProvider.prototype._parseResponse = function(data) {
-    var _this = this,
-        returnValues = [];
-    
-    // DE-CHUNKER
-    var dechunkedData = data
-        .replace(/\}\{/g,'}|--|{') // }{
-        .replace(/\}\]\[\{/g,'}]|--|[{') // }][{
-        .replace(/\}\[\{/g,'}|--|[{') // }[{
-        .replace(/\}\]\{/g,'}]|--|{') // }]{
-        .split('|--|');
- 
-    dechunkedData.forEach(function(data){
- 
-        // prepend the last chunk
-        Iif(_this.lastChunk)
-            data = _this.lastChunk + data;
- 
-        var result = null;
- 
-        try {
-            result = JSON.parse(data);
- 
-        } catch(e) {
- 
-            _this.lastChunk = data;
- 
-            // start timeout to cancel all requests
-            clearTimeout(_this.lastChunkTimeout);
-            _this.lastChunkTimeout = setTimeout(function(){
-                _this.timeout();
-                throw errors.InvalidResponse(data);
-            }, 1000 * 15);
- 
-            return;
-        }
- 
-        // cancel timeout and set chunk to null
-        clearTimeout(_this.lastChunkTimeout);
-        _this.lastChunk = null;
- 
-        Eif(result)
-            returnValues.push(result);
-    });
- 
-    return returnValues;
-};
- 
- 
-/**
-Get the adds a callback to the responseCallbacks object,
-which will be called if a response matching the response Id will arrive.
- 
-@method _addResponseCallback
-*/
-IpcProvider.prototype._addResponseCallback = function(payload, callback) {
-    var id = payload.id || payload[0].id;
-    var method = payload.method || payload[0].method;
- 
-    this.responseCallbacks[id] = callback;
-    this.responseCallbacks[id].method = method;
-};
- 
-/**
-Timeout all requests when the end/error event is fired
- 
-@method _timeout
-*/
-IpcProvider.prototype._timeout = function() {
-    for(var key in this.responseCallbacks) {
-        if(this.responseCallbacks.hasOwnProperty(key)){
-            this.responseCallbacks[key](errors.InvalidConnection('on IPC'));
-            delete this.responseCallbacks[key];
-        }
-    }
-};
- 
- 
-/**
-Check if the current connection is still valid.
- 
-@method isConnected
-*/
-IpcProvider.prototype.isConnected = function() {
-    var _this = this;
- 
-    // try reconnect, when connection is gone
-    if(!_this.connection.writable)
-        _this.connection.connect({path: _this.path});
- 
-    return !!this.connection.writable;
-};
- 
-IpcProvider.prototype.send = function (payload) {
- 
-    Eif(this.connection.writeSync) {
-        var result;
- 
-        // try reconnect, when connection is gone
-        Eif(!this.connection.writable)
-            this.connection.connect({path: this.path});
- 
-        var data = this.connection.writeSync(JSON.stringify(payload));
- 
-        try {
-            result = JSON.parse(data);
-        } catch(e) {
-            throw errors.InvalidResponse(data);                
-        }
- 
-        return result;
- 
-    } else {
-        throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.');
-    }
-};
- 
-IpcProvider.prototype.sendAsync = function (payload, callback) {
-    // try reconnect, when connection is gone
-    Eif(!this.connection.writable)
-        this.connection.connect({path: this.path});
- 
- 
-    this.connection.write(JSON.stringify(payload));
-    this._addResponseCallback(payload, callback);
-};
- 
-/**
-Subscribes to provider events.provider
- 
-@method on
-@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
-@param {Function} callback   the callback to call
-*/
-IpcProvider.prototype.on = function (type, callback) {
- 
-    if(typeof callback !== 'function')
-        throw new Error('The second parameter callback must be a function.');
- 
-    switch(type){
-        case 'notification':
-            this.notificationCallbacks.push(callback);
-            break;
- 
-        default:
-            this.connection.on(type, callback);
-            break;
-    }
-};
- 
-/**
-Removes event listener
- 
-@method removeListener
-@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
-@param {Function} callback   the callback to call
-*/
-IpcProvider.prototype.removeListener = function (type, callback) {
-    var _this = this;
- 
-    switch(type){
-        case 'notification':
-            this.notificationCallbacks.forEach(function(cb, index){
-                if(cb === callback)
-                    _this.notificationCallbacks.splice(index, 1);
-            });
-            break;
- 
-        default:
-            this.connection.removeListener(type, callback);
-            break;
-    }
-};
- 
-/**
-Removes all event listeners
- 
-@method removeAllListeners
-@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
-*/
-IpcProvider.prototype.removeAllListeners = function (type) {
-    switch(type){
-        case 'notification':
-            this.notificationCallbacks = [];
-            break;
- 
-        default:
-            this.connection.removeAllListeners(type);
-            break;
-    }
-};
- 
-/**
-Resetes the providers, clears all callbacks
- 
-@method reset
-*/
-IpcProvider.prototype.reset = function (callback) {
-    this._timeout();
-    this.notificationCallbacks = [];
- 
-    this.connection.removeAllListeners('error');
-    this.connection.removeAllListeners('end');
- 
-    this.addDefaultEvents();
-};
- 
-module.exports = IpcProvider;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html deleted file mode 100644 index cc2cedf..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - Code coverage report for web3/lib/web3/jsonrpc.js - - - - - - -
-

Code coverage report for web3/lib/web3/jsonrpc.js

-

- Statements: 94.74% (18 / 19)      - Branches: 90.91% (10 / 11)      - Functions: 100% (6 / 6)      - Lines: 94.74% (18 / 19)      - Ignored: none      -

-
All files » web3/lib/web3/ » jsonrpc.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -301 -300 -  -1 -  -1 -  -  -  -  -  -1 -298 -298 -  -  -  -  -  -  -  -  -  -  -1 -158 -  -  -158 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -157 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -6 -6 -10 -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file jsonrpc.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Jsonrpc = function () {
-    // singleton pattern
-    if (arguments.callee._singletonInstance) {
-        return arguments.callee._singletonInstance;
-    }
-    arguments.callee._singletonInstance = this;
- 
-    this.messageId = 1;
-};
- 
-/**
- * @return {Jsonrpc} singleton
- */
-Jsonrpc.getInstance = function () {
-    var instance = new Jsonrpc();
-    return instance;
-};
- 
-/**
- * Should be called to valid json create payload object
- *
- * @method toPayload
- * @param {Function} method of jsonrpc call, required
- * @param {Array} params, an array of method params, optional
- * @returns {Object} valid jsonrpc payload object
- */
-Jsonrpc.prototype.toPayload = function (method, params) {
-    Iif (!method)
-        console.error('jsonrpc method should be specified!');
- 
-    return {
-        jsonrpc: '2.0',
-        method: method,
-        params: params || [],
-        id: this.messageId++
-    };
-};
- 
-/**
- * Should be called to check if jsonrpc response is valid
- *
- * @method isValidResponse
- * @param {Object}
- * @returns {Boolean} true if response is valid, otherwise false
- */
-Jsonrpc.prototype.isValidResponse = function (response) {
-    return !!response &&
-        !response.error &&
-        response.jsonrpc === '2.0' &&
-        typeof response.id === 'number' &&
-        response.result !== undefined; // only undefined is not valid json object
-};
- 
-/**
- * Should be called to create batch payload object
- *
- * @method toBatchPayload
- * @param {Array} messages, an array of objects with method (required) and params (optional) fields
- * @returns {Array} batch payload
- */
-Jsonrpc.prototype.toBatchPayload = function (messages) {
-    var self = this;
-    return messages.map(function (message) {
-        return self.toPayload(message.method, message.params);
-    });
-};
- 
-module.exports = Jsonrpc;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html deleted file mode 100644 index 5f797d4..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - Code coverage report for web3/lib/web3/method.js - - - - - - -
-

Code coverage report for web3/lib/web3/method.js

-

- Statements: 100% (59 / 59)      - Branches: 100% (28 / 28)      - Functions: 100% (15 / 15)      - Lines: 100% (59 / 59)      - Ignored: none      -

-
All files » web3/lib/web3/ » method.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -5096 -5096 -5096 -5096 -5096 -5096 -  -  -1 -4930 -  -  -  -  -  -  -  -  -  -1 -117 -  -  -  -  -  -  -  -  -  -1 -116 -57 -  -  -  -  -  -  -  -  -  -  -1 -117 -2 -  -  -  -  -  -  -  -  -  -  -1 -115 -23 -  -  -92 -166 -  -  -  -  -  -  -  -  -  -  -1 -115 -  -115 -6 -10 -  -  -109 -  -  -  -  -  -  -  -  -  -  -1 -113 -113 -113 -113 -  -113 -  -  -  -  -  -  -1 -4930 -4930 -4930 -4930 -462 -462 -  -4468 -  -  -  -1 -4930 -4930 -109 -109 -51 -51 -  -  -58 -  -4930 -4930 -  -  -  -  -  -  -  -  -  -1 -4 -4 -4 -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @file method.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
-var errors = require('./errors');
- 
-var Method = function (options) {
-    this.name = options.name;
-    this.call = options.call;
-    this.params = options.params || 0;
-    this.inputFormatter = options.inputFormatter;
-    this.outputFormatter = options.outputFormatter;
-    this.requestManager = null;
-};
- 
-Method.prototype.setRequestManager = function (rm) {
-    this.requestManager = rm;
-};
- 
-/**
- * Should be used to determine name of the jsonrpc method based on arguments
- *
- * @method getCall
- * @param {Array} arguments
- * @return {String} name of jsonrpc method
- */
-Method.prototype.getCall = function (args) {
-    return utils.isFunction(this.call) ? this.call(args) : this.call;
-};
- 
-/**
- * Should be used to extract callback from array of arguments. Modifies input param
- *
- * @method extractCallback
- * @param {Array} arguments
- * @return {Function|Null} callback, if exists
- */
-Method.prototype.extractCallback = function (args) {
-    if (utils.isFunction(args[args.length - 1])) {
-        return args.pop(); // modify the args array!
-    }
-};
- 
-/**
- * Should be called to check if the number of arguments is correct
- * 
- * @method validateArgs
- * @param {Array} arguments
- * @throws {Error} if it is not
- */
-Method.prototype.validateArgs = function (args) {
-    if (args.length !== this.params) {
-        throw errors.InvalidNumberOfParams();
-    }
-};
- 
-/**
- * Should be called to format input args of method
- * 
- * @method formatInput
- * @param {Array}
- * @return {Array}
- */
-Method.prototype.formatInput = function (args) {
-    if (!this.inputFormatter) {
-        return args;
-    }
- 
-    return this.inputFormatter.map(function (formatter, index) {
-        return formatter ? formatter(args[index]) : args[index];
-    });
-};
- 
-/**
- * Should be called to format output(result) of method
- *
- * @method formatOutput
- * @param {Object}
- * @return {Object}
- */
-Method.prototype.formatOutput = function (result) {
-    var _this = this;
- 
-    if(utils.isArray(result)) {
-        return result.map(function(res){
-            return _this.outputFormatter && res ? _this.outputFormatter(res) : res;
-        });
-    } else {
-        return this.outputFormatter && result ? this.outputFormatter(result) : result;
-    }
-};
- 
-/**
- * Should create payload from given input args
- *
- * @method toPayload
- * @param {Array} args
- * @return {Object}
- */
-Method.prototype.toPayload = function (args) {
-    var call = this.getCall(args);
-    var callback = this.extractCallback(args);
-    var params = this.formatInput(args);
-    this.validateArgs(params);
- 
-    return {
-        method: call,
-        params: params,
-        callback: callback
-    };
-};
- 
-Method.prototype.attachToObject = function (obj) {
-    var func = this.buildCall();
-    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
-    var name = this.name.split('.');
-    if (name.length > 1) {
-        obj[name[0]] = obj[name[0]] || {};
-        obj[name[0]][name[1]] = func;
-    } else {
-        obj[name[0]] = func; 
-    }
-};
- 
-Method.prototype.buildCall = function() {
-    var method = this;
-    var send = function () {
-        var payload = method.toPayload(Array.prototype.slice.call(arguments));
-        if (payload.callback) {
-            return method.requestManager.sendAsync(payload, function (err, result) {
-                payload.callback(err, method.formatOutput(result));
-            });
-        }
-        return method.formatOutput(method.requestManager.send(payload));
-    };
-    send.request = this.request.bind(this);
-    return send;
-};
- 
-/**
- * Should be called to create pure JSONRPC request which can be used in batch request
- *
- * @method request
- * @param {...} params
- * @return {Object} jsonrpc request
- */
-Method.prototype.request = function () {
-    var payload = this.toPayload(Array.prototype.slice.call(arguments));
-    payload.format = this.formatOutput.bind(this);
-    return payload;
-};
- 
-module.exports = Method;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html deleted file mode 100644 index f43388b..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/db.js - - - - - - -
-

Code coverage report for web3/lib/web3/methods/db.js

-

- Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (14 / 14)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -154 -  -154 -  -154 -616 -616 -  -  -  -1 -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -1 - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file db.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Method = require('../method');
- 
-var DB = function (web3) {
-    this._requestManager = web3._requestManager;
- 
-    var self = this;
-    
-    methods().forEach(function(method) { 
-        method.attachToObject(self);
-        method.setRequestManager(web3._requestManager);
-    });
-};
- 
-var methods = function () {
-    var putString = new Method({
-        name: 'putString',
-        call: 'db_putString',
-        params: 3
-    });
- 
-    var getString = new Method({
-        name: 'getString',
-        call: 'db_getString',
-        params: 2
-    });
- 
-    var putHex = new Method({
-        name: 'putHex',
-        call: 'db_putHex',
-        params: 3
-    });
- 
-    var getHex = new Method({
-        name: 'getHex',
-        call: 'db_getHex',
-        params: 2
-    });
- 
-    return [
-        putString, getString, putHex, getHex
-    ];
-};
- 
-module.exports = DB;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html deleted file mode 100644 index acd7623..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html +++ /dev/null @@ -1,1161 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/eth.js - - - - - - -
-

Code coverage report for web3/lib/web3/methods/eth.js

-

- Statements: 92.11% (70 / 76)      - Branches: 100% (20 / 20)      - Functions: 77.78% (14 / 18)      - Lines: 92.11% (70 / 76)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -6 -  -  -1 -4 -  -  -1 -6 -  -  -1 -6 -  -  -1 -6 -  -  -1 -154 -  -154 -  -154 -3696 -3696 -  -  -154 -1078 -1078 -  -  -  -154 -154 -  -  -1 -  -5 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -1 -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -6 -  -  -  -154 -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -  -  -1 -  -  -  -1 -2 -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @file eth.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @author Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-"use strict";
- 
-var formatters = require('../formatters');
-var utils = require('../../utils/utils');
-var c = require('../../utils/config');
-var Method = require('../method');
-var Property = require('../property');
-var Subscriptions = require('../subscriptions');
-var Contract = require('../contract');
-var namereg = require('../namereg');
-var Iban = require('../iban');
-var transfer = require('../transfer');
- 
-var blockCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
-};
- 
-var transactionFromBlockCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
-};
- 
-var uncleCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
-};
- 
-var getBlockTransactionCountCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
-};
- 
-var uncleCountCall = function (args) {
-    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
-};
- 
-function Eth(web3) {
-    this._requestManager = web3._requestManager;
- 
-    var self = this;
- 
-    methods().forEach(function(method) { 
-        method.attachToObject(self);
-        method.setRequestManager(self._requestManager);
-    });
- 
-    properties().forEach(function(p) { 
-        p.attachToObject(self);
-        p.setRequestManager(self._requestManager);
-    });
- 
- 
-    this.iban = Iban;
-    this.sendIBANTransaction = transfer.bind(null, this);
-}
- 
-Object.defineProperty(Eth.prototype, 'defaultBlock', {
-    get: function () {
-        return c.defaultBlock;
-    },
-    set: function (val) {
-        c.defaultBlock = val;
-        return val;
-    }
-});
- 
-Object.defineProperty(Eth.prototype, 'defaultAccount', {
-    get: function () {
-        return c.defaultAccount;
-    },
-    set: function (val) {
-        c.defaultAccount = val;
-        return val;
-    }
-});
- 
-var methods = function () {
-    var getBalance = new Method({
-        name: 'getBalance',
-        call: 'eth_getBalance',
-        params: 2,
-        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],
-        outputFormatter: formatters.outputBigNumberFormatter
-    });
- 
-    var getStorageAt = new Method({
-        name: 'getStorageAt',
-        call: 'eth_getStorageAt',
-        params: 3,
-        inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
-    });
- 
-    var getCode = new Method({
-        name: 'getCode',
-        call: 'eth_getCode',
-        params: 2,
-        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
-    });
- 
-    var getBlock = new Method({
-        name: 'getBlock',
-        call: blockCall,
-        params: 2,
-        inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],
-        outputFormatter: formatters.outputBlockFormatter
-    });
- 
-    var getUncle = new Method({
-        name: 'getUncle',
-        call: uncleCall,
-        params: 2,
-        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
-        outputFormatter: formatters.outputBlockFormatter,
- 
-    });
- 
-    var getBlockTransactionCount = new Method({
-        name: 'getBlockTransactionCount',
-        call: getBlockTransactionCountCall,
-        params: 1,
-        inputFormatter: [formatters.inputBlockNumberFormatter],
-        outputFormatter: utils.toDecimal
-    });
- 
-    var getBlockUncleCount = new Method({
-        name: 'getBlockUncleCount',
-        call: uncleCountCall,
-        params: 1,
-        inputFormatter: [formatters.inputBlockNumberFormatter],
-        outputFormatter: utils.toDecimal
-    });
- 
-    var getTransaction = new Method({
-        name: 'getTransaction',
-        call: 'eth_getTransactionByHash',
-        params: 1,
-        outputFormatter: formatters.outputTransactionFormatter
-    });
- 
-    var getTransactionFromBlock = new Method({
-        name: 'getTransactionFromBlock',
-        call: transactionFromBlockCall,
-        params: 2,
-        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
-        outputFormatter: formatters.outputTransactionFormatter
-    });
- 
-    var getTransactionReceipt = new Method({
-        name: 'getTransactionReceipt',
-        call: 'eth_getTransactionReceipt',
-        params: 1,
-        outputFormatter: formatters.outputTransactionReceiptFormatter
-    });
- 
-    var getTransactionCount = new Method({
-        name: 'getTransactionCount',
-        call: 'eth_getTransactionCount',
-        params: 2,
-        inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
-        outputFormatter: utils.toDecimal
-    });
- 
-    var sendRawTransaction = new Method({
-        name: 'sendRawTransaction',
-        call: 'eth_sendRawTransaction',
-        params: 1,
-        inputFormatter: [null]
-    });
- 
-    var sendTransaction = new Method({
-        name: 'sendTransaction',
-        call: 'eth_sendTransaction',
-        params: 1,
-        inputFormatter: [formatters.inputTransactionFormatter]
-    });
- 
-    var sign = new Method({
-        name: 'sign',
-        call: 'eth_sign',
-        params: 2,
-        inputFormatter: [formatters.inputAddressFormatter, null]
-    });
- 
-    var call = new Method({
-        name: 'call',
-        call: 'eth_call',
-        params: 2,
-        inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
-    });
- 
-    var estimateGas = new Method({
-        name: 'estimateGas',
-        call: 'eth_estimateGas',
-        params: 1,
-        inputFormatter: [formatters.inputCallFormatter],
-        outputFormatter: utils.toDecimal
-    });
- 
-    var getCompilers = new Method({
-        name: 'getCompilers',
-        call: 'eth_getCompilers',
-        params: 0
-    });
- 
-    var compileSolidity = new Method({
-        name: 'compile.solidity',
-        call: 'eth_compileSolidity',
-        params: 1
-    });
- 
-    var compileLLL = new Method({
-        name: 'compile.lll',
-        call: 'eth_compileLLL',
-        params: 1
-    });
- 
-    var compileSerpent = new Method({
-        name: 'compile.serpent',
-        call: 'eth_compileSerpent',
-        params: 1
-    });
- 
-    var submitWork = new Method({
-        name: 'submitWork',
-        call: 'eth_submitWork',
-        params: 3
-    });
- 
-    var getWork = new Method({
-        name: 'getWork',
-        call: 'eth_getWork',
-        params: 0
-    });
- 
-    var getPastLogs = new Method({
-        name: 'getPastLogs',
-        call: 'eth_getLogs',
-        params: 1,
-        inputFormatter: [formatters.inputLogFormatter],
-        outputFormatter: formatters.outputLogFormatter
-    });
- 
- 
-    // subscriptions
-    var subscribe = new Subscriptions({
-        name: 'subscribe',
-        subscribe: 'eth_subscribe',
-        unsubscribe: 'eth_unsubscribe',
-        subscriptions: {
-            'newBlocks': {
-                params: 1,
-                outputFormatter: formatters.outputBlockFormatter
-            },
-            'pendingTransactions': {
-                params: 0,
-                outputFormatter: formatters.outputTransactionFormatter
-            },
-            'logs': {
-                params: 1,
-                inputFormatter: [formatters.inputLogFormatter],
-                outputFormatter: formatters.outputLogFormatter
-            },
-            'syncing': {
-                params: 0,
-                outputFormatter: formatters.outputSyncingFormatter
-            }
-        }
-    });
- 
- 
-    return [
-        getBalance,
-        getStorageAt,
-        getCode,
-        getBlock,
-        getUncle,
-        getCompilers,
-        getBlockTransactionCount,
-        getBlockUncleCount,
-        getTransaction,
-        getTransactionFromBlock,
-        getTransactionReceipt,
-        getTransactionCount,
-        call,
-        estimateGas,
-        sendRawTransaction,
-        sendTransaction,
-        sign,
-        compileSolidity,
-        compileLLL,
-        compileSerpent,
-        submitWork,
-        getWork,
-        subscribe,
-        getPastLogs
-    ];
-};
- 
- 
-var properties = function () {
-    return [
-        new Property({
-            name: 'coinbase',
-            getter: 'eth_coinbase'
-        }),
-        new Property({
-            name: 'mining',
-            getter: 'eth_mining'
-        }),
-        new Property({
-            name: 'hashrate',
-            getter: 'eth_hashrate',
-            outputFormatter: utils.toDecimal
-        }),
-        new Property({
-            name: 'syncing',
-            getter: 'eth_syncing',
-            outputFormatter: formatters.outputSyncingFormatter
-        }),
-        new Property({
-            name: 'gasPrice',
-            getter: 'eth_gasPrice',
-            outputFormatter: formatters.outputBigNumberFormatter
-        }),
-        new Property({
-            name: 'accounts',
-            getter: 'eth_accounts'
-        }),
-        new Property({
-            name: 'blockNumber',
-            getter: 'eth_blockNumber',
-            outputFormatter: utils.toDecimal
-        })
-    ];
-};
- 
-Eth.prototype.contract = function (abi) {
-    var factory = new Contract(this, abi);
-    return factory;
-};
- 
-Eth.prototype.namereg = function () {
-    return this.contract(namereg.global.abi).at(namereg.global.address);
-};
- 
-Eth.prototype.icapNamereg = function () {
-    return this.contract(namereg.icap.abi).at(namereg.icap.address);
-};
- 
- 
-module.exports = Eth;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html deleted file mode 100644 index 3201ad8..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/ - - - - - - -
-

Code coverage report for web3/lib/web3/methods/

-

- Statements: 95% (114 / 120)      - Branches: 100% (20 / 20)      - Functions: 85.19% (23 / 27)      - Lines: 95% (114 / 120)      - Ignored: none      -

-
All files » web3/lib/web3/methods/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
db.js100%(14 / 14)100%(0 / 0)100%(3 / 3)100%(14 / 14)
eth.js92.11%(70 / 76)100%(20 / 20)77.78%(14 / 18)92.11%(70 / 76)
net.js100%(11 / 11)100%(0 / 0)100%(3 / 3)100%(11 / 11)
shh.js100%(19 / 19)100%(0 / 0)100%(3 / 3)100%(19 / 19)
-
-
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html deleted file mode 100644 index ae675fe..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/net.js - - - - - - -
-

Code coverage report for web3/lib/web3/methods/net.js

-

- Statements: 100% (11 / 11)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (11 / 11)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -154 -  -154 -  -154 -308 -308 -  -  -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -1 - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file eth.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../../utils/utils');
-var Property = require('../property');
- 
-var Net = function (web3) {
-    this._requestManager = web3._requestManager;
- 
-    var self = this;
- 
-    properties().forEach(function(p) { 
-        p.attachToObject(self);
-        p.setRequestManager(web3._requestManager);
-    });
-};
- 
-/// @returns an array of objects describing web3.eth api properties
-var properties = function () {
-    return [
-        new Property({
-            name: 'listening',
-            getter: 'net_listening'
-        }),
-        new Property({
-            name: 'peerCount',
-            getter: 'net_peerCount',
-            outputFormatter: utils.toDecimal
-        })
-    ];
-};
- 
-module.exports = Net;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html deleted file mode 100644 index 39cae5c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/shh.js - - - - - - -
-

Code coverage report for web3/lib/web3/methods/shh.js

-

- Statements: 100% (19 / 19)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (19 / 19)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -154 -  -154 -  -154 -924 -924 -  -  -  -  -1 -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file shh.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Method = require('../method');
-var formatters = require('../formatters');
-var Subscriptions = require('../subscriptions');
- 
- 
-var Shh = function (web3) {
-    this._requestManager = web3._requestManager;
- 
-    var self = this;
- 
-    methods().forEach(function(method) { 
-        method.attachToObject(self);
-        method.setRequestManager(self._requestManager);
-    });
-};
- 
- 
-var methods = function () { 
- 
-    var post = new Method({
-        name: 'post', 
-        call: 'shh_post', 
-        params: 1,
-        inputFormatter: [formatters.inputPostFormatter]
-    });
- 
-    var newIdentity = new Method({
-        name: 'newIdentity',
-        call: 'shh_newIdentity',
-        params: 0
-    });
- 
-    var hasIdentity = new Method({
-        name: 'hasIdentity',
-        call: 'shh_hasIdentity',
-        params: 1
-    });
- 
-    var newGroup = new Method({
-        name: 'newGroup',
-        call: 'shh_newGroup',
-        params: 0
-    });
- 
-    var addToGroup = new Method({
-        name: 'addToGroup',
-        call: 'shh_addToGroup',
-        params: 0
-    });
- 
-    var getPastLogs = new Method({
-        name: 'getPastMessages',
-        call: 'shh_getMessages',
-        params: 1,
-        inputFormatter: [formatters.inputLogFormatter],
-        outputFormatter: formatters.outputPostFormatter
-    });
- 
-    // subscriptions
-    var subscribe = new Subscriptions({
-        name: 'subscribe',
-        subscribe: 'shh_subscribe',
-        unsubscribe: 'shh_unsubscribe',
-        subscriptions: {
-            'messages': {
-                params: 1,
-                inputFormatter: [formatters.inputLogFormatter],
-                outputFormatter: formatters.outputPostFormatter
-            }
-        }
-    });
- 
-    return [
-        post,
-        newIdentity,
-        hasIdentity,
-        newGroup,
-        addToGroup,
-        subscribe
-    ];
-};
- 
-module.exports = Shh;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html deleted file mode 100644 index 467fbeb..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html +++ /dev/null @@ -1,387 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/watches.js - - - - - - -
-

Code coverage report for web3/lib/web3/methods/watches.js

-

- Statements: 100% (24 / 24)      - Branches: 100% (3 / 3)      - Functions: 100% (3 / 3)      - Lines: 100% (24 / 24)      - Ignored: none      -

- -
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -1 -11 -11 -  -11 -  -3 -3 -3 -  -3 -3 -3 -  -5 -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -  -  -  -1 -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -  -  -1 -  -  -  -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file watches.js
- * @authors:
- *   Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Method = require('../method');
- 
-/// @returns an array of objects describing web3.eth.filter api methods
-var eth = function () {
-    var newFilterCall = function (args) {
-        var type = args[0];
- 
-        switch(type) {
-            case 'latest':
-                args.shift();
-                this.params = 0;
-                return 'eth_newBlockFilter';
-            case 'pending':
-                args.shift();
-                this.params = 0;
-                return 'eth_newPendingTransactionFilter';
-            default:
-                return 'eth_newFilter';
-        }
-    };
- 
-    var newFilter = new Method({
-        name: 'newFilter',
-        call: newFilterCall,
-        params: 1
-    });
- 
-    var uninstallFilter = new Method({
-        name: 'uninstallFilter',
-        call: 'eth_uninstallFilter',
-        params: 1
-    });
- 
-    var getLogs = new Method({
-        name: 'getLogs',
-        call: 'eth_getFilterLogs',
-        params: 1
-    });
- 
-    var poll = new Method({
-        name: 'poll',
-        call: 'eth_getFilterChanges',
-        params: 1
-    });
- 
-    return [
-        newFilter,
-        uninstallFilter,
-        getLogs,
-        poll
-    ];
-};
- 
-/// @returns an array of objects describing web3.shh.watch api methods
-var shh = function () {
-    var newFilter = new Method({
-        name: 'newFilter',
-        call: 'shh_newFilter',
-        params: 1
-    });
- 
-    var uninstallFilter = new Method({
-        name: 'uninstallFilter',
-        call: 'shh_uninstallFilter',
-        params: 1
-    });
- 
-    var getLogs = new Method({
-        name: 'getLogs',
-        call: 'shh_getMessages',
-        params: 1
-    });
- 
-    var poll = new Method({
-        name: 'poll',
-        call: 'shh_getFilterChanges',
-        params: 1
-    });
- 
-    return [
-        newFilter,
-        uninstallFilter,
-        getLogs,
-        poll
-    ];
-};
- 
-module.exports = {
-    eth: eth,
-    shh: shh
-};
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html deleted file mode 100644 index b6c1c47..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - Code coverage report for web3/lib/web3/namereg.js - - - - - - -
-

Code coverage report for web3/lib/web3/namereg.js

-

- Statements: 100% (5 / 5)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (5 / 5)      - Ignored: none      -

-
All files » web3/lib/web3/ » namereg.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file namereg.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json');
-var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json');
- 
-var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';
-var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';
- 
-module.exports = {
-    global: {
-        abi: globalRegistrarAbi,
-        address: globalNameregAddress
-    },
-    icap: {
-        abi: icapRegistrarAbi,
-        address: icapNameregAddress
-    }
-};
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html deleted file mode 100644 index c6c2c09..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - Code coverage report for web3/lib/web3/property.js - - - - - - -
-

Code coverage report for web3/lib/web3/property.js

-

- Statements: 97.78% (44 / 45)      - Branches: 66.67% (8 / 12)      - Functions: 92.31% (12 / 13)      - Lines: 97.78% (44 / 45)      - Ignored: none      -

-
All files » web3/lib/web3/ » property.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -2004 -2004 -2004 -2004 -2004 -2004 -  -  -1 -2004 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -20 -  -  -  -  -  -  -  -  -  -1 -2 -2 -  -  -  -  -  -  -  -  -  -  -  -1 -2004 -  -  -  -  -2004 -2004 -2004 -616 -616 -616 -  -  -2004 -2004 -  -  -1 -2004 -  -  -1 -2004 -2004 -17 -  -  -  -  -  -1 -2004 -2004 -1 -  -  -1 -  -  -2004 -2004 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -2 -2 -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @file property.js
- * @author Fabian Vogelsteller <fabian@frozeman.de>
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
- 
-var Property = function (options) {
-    this.name = options.name;
-    this.getter = options.getter;
-    this.setter = options.setter;
-    this.outputFormatter = options.outputFormatter;
-    this.inputFormatter = options.inputFormatter;
-    this.requestManager = null;
-};
- 
-Property.prototype.setRequestManager = function (rm) {
-    this.requestManager = rm;
-};
- 
-/**
- * Should be called to format input args of method
- * 
- * @method formatInput
- * @param {Array}
- * @return {Array}
- */
-Property.prototype.formatInput = function (arg) {
-    return this.inputFormatter ? this.inputFormatter(arg) : arg;
-};
- 
-/**
- * Should be called to format output(result) of method
- *
- * @method formatOutput
- * @param {Object}
- * @return {Object}
- */
-Property.prototype.formatOutput = function (result) {
-    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
-};
- 
-/**
- * Should be used to extract callback from array of arguments. Modifies input param
- *
- * @method extractCallback
- * @param {Array} arguments
- * @return {Function|Null} callback, if exists
- */
-Property.prototype.extractCallback = function (args) {
-    Eif (utils.isFunction(args[args.length - 1])) {
-        return args.pop(); // modify the args array!
-    }
-};
- 
- 
-/**
- * Should attach function to method
- * 
- * @method attachToObject
- * @param {Object}
- * @param {Function}
- */
-Property.prototype.attachToObject = function (obj) {
-    var proto = {
-        get: this.buildGet(),
-        enumerable: true 
-    };
- 
-    var names = this.name.split('.');
-    var name = names[0];
-    if (names.length > 1) {
-        obj[names[0]] = obj[names[0]] || {};
-        obj = obj[names[0]];
-        name = names[1];
-    }
- 
-    Object.defineProperty(obj, name, proto);
-    obj[asyncGetterName(name)] = this.buildAsyncGet();
-};
- 
-var asyncGetterName = function (name) {
-    return 'get' + name.charAt(0).toUpperCase() + name.slice(1);
-};
- 
-Property.prototype.buildGet = function () {
-    var property = this;
-    return function get() {
-        return property.formatOutput(property.requestManager.send({
-            method: property.getter
-        })); 
-    };
-};
- 
-Property.prototype.buildAsyncGet = function () {
-    var property = this;
-    var get = function (callback) {
-        property.requestManager.sendAsync({
-            method: property.getter
-        }, function (err, result) {
-            callback(err, property.formatOutput(result));
-        });
-    };
-    get.request = this.request.bind(this);
-    return get;
-};
- 
-/**
- * Should be called to create pure JSONRPC request which can be used in batch request
- *
- * @method request
- * @param {...} params
- * @return {Object} jsonrpc request
- */
-Property.prototype.request = function () {
-    var payload = {
-        method: this.getter,
-        params: [],
-        callback: this.extractCallback(Array.prototype.slice.call(arguments))
-    };
-    payload.format = this.formatOutput.bind(this);
-    return payload;
-};
- 
-module.exports = Property;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html deleted file mode 100644 index 0ece315..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html +++ /dev/null @@ -1,678 +0,0 @@ - - - - Code coverage report for web3/lib/web3/requestmanager.js - - - - - - -
-

Code coverage report for web3/lib/web3/requestmanager.js

-

- Statements: 86.15% (56 / 65)      - Branches: 65.79% (25 / 38)      - Functions: 100% (13 / 13)      - Lines: 86.15% (56 / 65)      - Ignored: none      -

-
All files » web3/lib/web3/ » requestmanager.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -1 -156 -156 -  -  -  -  -  -  -  -  -  -1 -76 -7 -7 -  -  -69 -69 -  -69 -  -  -  -69 -  -  -  -  -  -  -  -  -  -1 -75 -  -  -75 -75 -72 -1 -  -  -71 -  -  -  -71 -  -  -  -  -  -  -  -  -  -  -1 -4 -  -  -  -4 -4 -4 -  -  -  -4 -  -  -  -4 -  -  -  -  -  -  -  -  -  -  -  -1 -9 -9 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -12 -  -12 -  -12 -  -  -  -  -10 -10 -  -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -1 -181 -  -  -181 -11 -  -181 -  -  -181 -135 -7 -7 -7 -  -  -  -  -  -  -  -  -  -  -1 -24 -  -  -  -24 -6 -  -  -  -  -24 -  -  -  -1 - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file requestmanager.js
- * @author Jeffrey Wilcke <jeff@ethdev.com>
- * @author Marek Kotewicz <marek@ethdev.com>
- * @author Marian Oancea <marian@ethdev.com>
- * @author Fabian Vogelsteller <fabian@ethdev.com>
- * @author Gav Wood <g@ethdev.com>
- * @date 2014
- */
- 
-var Jsonrpc = require('./jsonrpc');
-var utils = require('../utils/utils');
-var c = require('../utils/config');
-var errors = require('./errors');
- 
-/**
- * It's responsible for passing messages to providers
- * It's also responsible for polling the ethereum node for incoming messages
- * Default poll timeout is 1 second
- * Singleton
- */
-var RequestManager = function (provider) {
-    this.setProvider(provider);
-    this.subscriptions = {};
-};
- 
-/**
- * Should be used to synchronously send request
- *
- * @method send
- * @param {Object} data
- * @return {Object}
- */
-RequestManager.prototype.send = function (data) {
-    if (!this.provider) {
-        console.error(errors.InvalidProvider());
-        return null;
-    }
- 
-    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
-    var result = this.provider.send(payload);
- 
-    Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
-        throw errors.InvalidResponse(result);
-    }
- 
-    return result.result;
-};
- 
-/**
- * Should be used to asynchronously send request
- *
- * @method sendAsync
- * @param {Object} data
- * @param {Function} callback
- */
-RequestManager.prototype.sendAsync = function (data, callback) {
-    Iif (!this.provider) {
-        return callback(errors.InvalidProvider());
-    }
-    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
-    this.provider.sendAsync(payload, function (err, result) {        
-        if (err) {
-            return callback(err);
-        }
- 
-        Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
-            return callback(errors.InvalidResponse(result));
-        }
- 
-        callback(null, result.result);
-    });
-};
- 
-/**
- * Should be called to asynchronously send batch request
- *
- * @method sendBatch
- * @param {Array} batch data
- * @param {Function} callback
- */
-RequestManager.prototype.sendBatch = function (data, callback) {
-    Iif (!this.provider) {
-        return callback(errors.InvalidProvider());
-    }
- 
-    var payload = Jsonrpc.getInstance().toBatchPayload(data);
-    this.provider.sendAsync(payload, function (err, results) {
-        Iif (err) {
-            return callback(err);
-        }
- 
-        Iif (!utils.isArray(results)) {
-            return callback(errors.InvalidResponse(results));
-        }
- 
-        callback(err, results);
-    }); 
-};
- 
- 
-/**
- * Waits for notifications
- *
- * @method addSubscription
- * @param {String} id           the subscription id
- * @param {Function} callback   the callback to call for incoming notifications
- */
-RequestManager.prototype.addSubscription = function (type, id, callback) {
-    Eif(this.provider.on) {
-        this.subscriptions[id] = {
-            callback: callback,
-            type: type
-        };
-        
-    } else {
-        throw new Error('This provider doesn\'t support subscriptions', this.provider);
-    }
-};
- 
-/**
- * Waits for notifications
- *
- * @method removeSubscription
- * @param {String} id           the subscription id
- * @param {Function} callback   fired once the subscription is removed
- */
-RequestManager.prototype.removeSubscription = function (id, callback) {
-    var _this = this;
- 
-    Eif(this.subscriptions[id]) {
- 
-        this.sendAsync({
-            method: this.subscriptions[id].type + '_unsubscribe',
-            params: [id]
-        }, function(err, result){
- 
-            Eif(!err) {
-                delete _this.subscriptions[id];
-            }
- 
-            Iif(utils.isFunction(callback))
-                callback(err, result);
-        });
- 
-    }
-}
- 
-/**
- * Should be used to set provider of request manager
- *
- * @method setProvider
- * @param {Object}
- */
-RequestManager.prototype.setProvider = function (p) {
-    var _this = this;
- 
-    // reset the old one before changing
-    if(this.provider)
-        this.reset();
- 
-    this.provider = p;
- 
-    // listen to incoming notifications
-    if(this.provider && this.provider.on) {
-        this.provider.on('notification', function(err, result){
-            Eif(!err) {
-                Eif(_this.subscriptions[result.params.subscription] && _this.subscriptions[result.params.subscription].callback)
-                    _this.subscriptions[result.params.subscription].callback(null, result.params.result);
-            }
-        });
-    }
-};
- 
-/**
- * Should be called to reset the polling mechanism of the request manager
- *
- * @method reset
- */
-RequestManager.prototype.reset = function (keepIsSyncing) {
-    var _this = this;
- 
- 
-    // uninstall all subscriptions
-    Object.keys(this.subscriptions).forEach(function(id){
-        _this.removeSubscription(id);
-    });
- 
- 
-    //  reset notification callbacks etc.
-    Iif(this.provider.reset)
-        this.provider.reset();
-};
- 
-module.exports = RequestManager;
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html deleted file mode 100644 index f022468..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - Code coverage report for web3/lib/web3/settings.js - - - - - - -
-

Code coverage report for web3/lib/web3/settings.js

-

- Statements: 100% (4 / 4)      - Branches: 100% (0 / 0)      - Functions: 100% (1 / 1)      - Lines: 100% (4 / 4)      - Ignored: none      -

-
All files » web3/lib/web3/ » settings.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10  -  -1 -167 -167 -  -  -1 -  - 
 
- 
-var Settings = function () {
-    this.defaultBlock = 'latest';
-    this.defaultAccount = undefined;
-};
- 
-module.exports = Settings;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html deleted file mode 100644 index 9227849..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html +++ /dev/null @@ -1,630 +0,0 @@ - - - - Code coverage report for web3/lib/web3/subscription.js - - - - - - -
-

Code coverage report for web3/lib/web3/subscription.js

-

- Statements: 83.93% (47 / 56)      - Branches: 68.57% (24 / 35)      - Functions: 84.62% (11 / 13)      - Lines: 83.93% (47 / 56)      - Ignored: none      -

-
All files » web3/lib/web3/ » subscription.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -10 -10 -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -10 -10 -  -  -  -  -  -  -  -  -  -  -  -1 -10 -  -10 -4 -  -10 -4 -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -1 -10 -  -10 -5 -  -  -5 -5 -  -5 -  -5 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -7 -  -  -  -  -  -  -  -  -  -1 -10 -10 -10 -  -10 -  -  -  -  -  -  -  -  -  -  -  -1 -6 -  -  -  -  -  -  -  -  -1 -10 -10 -  -  -10 -  -  -  -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -10 -  -10 -9 -9 -  -  -9 -7 -  -  -  -  -  -  -  -10 -  -  -  -  -  -1
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file subscription.js
- *
- * @authors:
- *   Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
-var errors = require('./errors');
- 
- 
-Subscription = function (options) {
-    this.id = null;
-    this.callback = null;
- 
-    this.options = {
-        subscription: options.subscription,
-        subscribeMethod: options.subscribeMethod,
-        unsubscribeMethod: options.unsubscribeMethod,
-        requestManager: options.requestManager
-    }
-};
- 
- 
-/**
- * Should be used to extract callback from array of arguments. Modifies input param
- *
- * @method extractCallback
- * @param {Array} arguments
- * @return {Function|Null} callback, if exists
- */
- 
-Subscription.prototype._extractCallback = function (args) {
-    Eif (utils.isFunction(args[args.length - 1])) {
-        return args.pop(); // modify the args array!
-    }
-};
- 
-/**
- * Should be called to check if the number of arguments is correct
- * 
- * @method validateArgs
- * @param {Array} arguments
- * @throws {Error} if it is not
- */
- 
-Subscription.prototype._validateArgs = function (args) {
-    var subscription = this.options.subscription;
- 
-    if(!subscription)
-        subscription = {};
- 
-    if(!subscription.params)
-        subscription.params = 0;
- 
-    Iif (args.length !== subscription.params + 1) {
-        throw errors.InvalidNumberOfParams();
-    }
-};
- 
-/**
- * Should be called to format input args of method
- * 
- * @method formatInput
- * @param {Array}
- * @return {Array}
- */
- 
-Subscription.prototype._formatInput = function (args) {
-    var subscription = this.options.subscription;
- 
-    if (!subscription || !subscription.inputFormatter) {
-        return args;
-    }
- 
-    var formattedArgs = subscription.inputFormatter.map(function (formatter, index) {
-        return formatter ? formatter(args[index+1]) : args[index+1];
-    });
-    formattedArgs.unshift(args[0]);
- 
-    return formattedArgs;
-};
- 
-/**
- * Should be called to format output(result) of method
- *
- * @method formatOutput
- * @param {Object}
- * @return {Object}
- */
- 
-Subscription.prototype._formatOutput = function (result) {
-    var subscription = this.options.subscription;
- 
-    return (subscription && subscription.outputFormatter && result) ? subscription.outputFormatter(result) : result;
-};
- 
-/**
- * Should create payload from given input args
- *
- * @method toPayload
- * @param {Array} args
- * @return {Object}
- */
-Subscription.prototype._toPayload = function (args) {
-    this.callback = this._extractCallback(args);
-    var params = this._formatInput(args);
-    this._validateArgs(params);
- 
-    return {
-        method: this.options.subscribeMethod,
-        params: params
-    };
-};
- 
-/**
- * Unsubscribes and clears callbacks
- *
- * @method unsubscribe
- * @return {Object}
- */
-Subscription.prototype.unsubscribe = function(callback) {
-    return this.options.requestManager.removeSubscription(this.id, callback);
-};
- 
-/**
- * Subscribes and watches for changes
- *
- * @method subscribe
- * @return {Object}
- */
-Subscription.prototype.subscribe = function() {
-    var _this = this;
-    var payload = this._toPayload(Array.prototype.slice.call(arguments));
- 
-    // throw error, if provider doesnt support subscriptions
-    Iif(!this.options.requestManager.provider.on)
-        throw new Error('The current provider doesn\'t support subscriptions', this.options.requestManager.provider);
- 
- 
-    // get past logs, if fromBlock is available
-    Iif(payload.params[0] === 'logs' && utils.isObject(payload.params[1]) && payload.params[1].hasOwnProperty('fromBlock') && isFinite(payload.params[1].fromBlock)) {
-        this.options.requestManager.sendAsync({
-            method: 'eth_getLogs',
-            params: [payload.params[1]]
-        }, function (err, logs) {
-            if(!err) {
-                logs.forEach(function(log){
-                    _this.callback(null, _this._formatOutput(log));
-                });
-            } else {
-                _this.callback(err);
-            }
-        });
-    }
- 
-    // create subscription
-    Eif (_this.callback) {
- 
-        this.options.requestManager.sendAsync(payload, function (err, result) {
-            Eif(!err && result) {
-                _this.id = result;
-                
-                // call callback on notifications
-                _this.options.requestManager.addSubscription('eth', _this.id, function(err, result){
-                    _this.callback(err, _this._formatOutput(result), _this);
-                });
-            } else {
-                _this.callback(err);
-            }
-        });
- 
-        // return an object to cancel the subscription
-        return this;
- 
-    } else
-        throw new Error('Subscriptions require a callback as the last parameter!');
-};
- 
-module.exports = Subscription;
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html deleted file mode 100644 index 426c50e..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - Code coverage report for web3/lib/web3/subscriptions.js - - - - - - -
-

Code coverage report for web3/lib/web3/subscriptions.js

-

- Statements: 92% (23 / 25)      - Branches: 33.33% (2 / 6)      - Functions: 100% (5 / 5)      - Lines: 92% (23 / 25)      - Ignored: none      -

-
All files » web3/lib/web3/ » subscriptions.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -1 -308 -308 -308 -308 -308 -  -  -  -1 -308 -  -  -  -1 -308 -308 -308 -308 -  -  -  -308 -  -  -  -  -1 -308 -  -308 -7 -  -  -  -  -  -  -7 -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file subscriptions.js
- *
- * @authors:
- *   Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-var utils = require('../utils/utils');
-var errors = require('./errors');
-var Subscription = require('./subscription.js');
- 
- 
- 
-Subscriptions = function (options) {
-    this.name = options.name;
-    this.subscribe = options.subscribe;
-    this.unsubscribe = options.unsubscribe;
-    this.subscriptions = options.subscriptions || {};
-    this.requestManager = null;
-};
- 
- 
-Subscriptions.prototype.setRequestManager = function (rm) {
-    this.requestManager = rm;
-};
- 
- 
-Subscriptions.prototype.attachToObject = function (obj) {
-    var func = this.buildCall();
-    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
-    var name = this.name.split('.');
-    Iif (name.length > 1) {
-        obj[name[0]] = obj[name[0]] || {};
-        obj[name[0]][name[1]] = func;
-    } else {
-        obj[name[0]] = func; 
-    }
-};
- 
- 
-Subscriptions.prototype.buildCall = function() {
-    var _this = this;
- 
-    return function(){
-        var subscription = new Subscription({
-            subscription: _this.subscriptions[arguments[0]],
-            subscribeMethod: _this.subscribe,
-            unsubscribeMethod: _this.unsubscribe,
-            requestManager: _this.requestManager
-        });
- 
-        return subscription.subscribe.apply(subscription, arguments);
-    };
-};
- 
-module.exports = Subscriptions;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html deleted file mode 100644 index 8e774b8..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - Code coverage report for web3/lib/web3/syncing.js - - - - - - -
-

Code coverage report for web3/lib/web3/syncing.js

-

- Statements: 94.12% (32 / 34)      - Branches: 64.29% (9 / 14)      - Functions: 87.5% (7 / 8)      - Lines: 94.12% (32 / 34)      - Ignored: none      -

-
All files » web3/lib/web3/ » syncing.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -  -  -  -  -  -  -  -1 -  -1 -1 -  -  -  -  -  -1 -1 -  -1 -1 -  -  -1 -1 -  -  -1 -1 -  -  -1 -  -  -  -  -1 -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -1 -1 -1 -1 -  -  -1 -1 -1 -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** @file syncing.js
- * @authors:
- *   Fabian Vogelsteller <fabian@ethdev.com>
- * @date 2015
- */
- 
-var formatters = require('./formatters');
-var utils = require('../utils/utils');
- 
-var count = 1;
- 
-/**
-Adds the callback and sets up the methods, to iterate over the results.
- 
-@method pollSyncing
-@param {Object} self
-*/
-var pollSyncing = function(self) {
- 
-    var onMessage = function (error, sync) {
-        Iif (error) {
-            return self.callbacks.forEach(function (callback) {
-                callback(error);
-            });
-        }
- 
-        Eif(utils.isObject(sync) && sync.startingBlock)
-            sync = formatters.outputSyncingFormatter(sync);
- 
-        self.callbacks.forEach(function (callback) {
-            Eif (self.lastSyncState !== sync) {
-                
-                // call the callback with true first so the app can stop anything, before receiving the sync data
-                Eif(!self.lastSyncState && utils.isObject(sync))
-                    callback(null, true);
-                
-                // call on the next CPU cycle, so the actions of the sync stop can be processes first
-                setTimeout(function() {
-                    callback(null, sync);
-                }, 0);
-                
-                self.lastSyncState = sync;
-            }
-        });
-    };
- 
-    self.requestManager.startPolling({
-        method: 'eth_syncing',
-        params: [],
-    }, self.pollId, onMessage, self.stopWatching.bind(self));
- 
-};
- 
-var IsSyncing = function (requestManager, callback) {
-    this.requestManager = requestManager;
-    this.pollId = 'syncPoll_'+ count++;
-    this.callbacks = [];
-    this.addCallback(callback);
-    this.lastSyncState = false;
-    pollSyncing(this);
- 
-    return this;
-};
- 
-IsSyncing.prototype.addCallback = function (callback) {
-    Eif(callback)
-        this.callbacks.push(callback);
-    return this;
-};
- 
-IsSyncing.prototype.stopWatching = function () {
-    this.requestManager.stopPolling(this.pollId);
-    this.callbacks = [];
-};
- 
-module.exports = IsSyncing;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html deleted file mode 100644 index e57bfeb..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - Code coverage report for web3/lib/web3/transfer.js - - - - - - -
-

Code coverage report for web3/lib/web3/transfer.js

-

- Statements: 73.68% (14 / 19)      - Branches: 50% (3 / 6)      - Functions: 50% (2 / 4)      - Lines: 73.68% (14 / 19)      - Ignored: none      -

-
All files » web3/lib/web3/ » transfer.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -1 -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -1 -  - 
/*
-    This file is part of web3.js.
- 
-    web3.js is free software: you can redistribute it and/or modify
-    it under the terms of the GNU Lesser General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
- 
-    web3.js is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU Lesser General Public License for more details.
- 
-    You should have received a copy of the GNU Lesser General Public License
-    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/** 
- * @file transfer.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
- */
- 
-var Iban = require('./iban');
-var exchangeAbi = require('../contracts/SmartExchange.json');
- 
-/**
- * Should be used to make Iban transfer
- *
- * @method transfer
- * @param {String} from
- * @param {String} to iban
- * @param {Value} value to be tranfered
- * @param {Function} callback, callback
- */
-var transfer = function (eth, from, to, value, callback) {
-    var iban = new Iban(to); 
-    Iif (!iban.isValid()) {
-        throw new Error('invalid iban address');
-    }
- 
-    Iif (iban.isDirect()) {
-        return transferToAddress(eth, from, iban.address(), value, callback);
-    }
-    
-    Eif (!callback) {
-        var address = eth.icapNamereg().addr(iban.institution());
-        return deposit(eth, from, address, value, iban.client());
-    }
- 
-    eth.icapNamereg().addr(iban.institution(), function (err, address) {
-        return deposit(eth, from, address, value, iban.client(), callback);
-    });
-    
-};
- 
-/**
- * Should be used to transfer funds to certain address
- *
- * @method transferToAddress
- * @param {String} from
- * @param {String} to
- * @param {Value} value to be tranfered
- * @param {Function} callback, callback
- */
-var transferToAddress = function (eth, from, to, value, callback) {
-    return eth.sendTransaction({
-        address: to,
-        from: from,
-        value: value
-    }, callback);
-};
- 
-/**
- * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)
- *
- * @method deposit
- * @param {String} from
- * @param {String} to
- * @param {Value} value to be transfered
- * @param {String} client unique identifier
- * @param {Function} callback, callback
- */
-var deposit = function (eth, from, to, value, client, callback) {
-    var abi = exchangeAbi;
-    return eth.contract(abi).at(to).deposit(client, {
-        from: from,
-        value: value
-    }, callback);
-};
- 
-module.exports = transfer;
- 
- 
- -
- - - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov.info b/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov.info deleted file mode 100644 index ea28a51..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/coverage/lcov.info +++ /dev/null @@ -1,3638 +0,0 @@ -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js -FNF:0 -FNH:0 -DA:1,1 -DA:4,1 -DA:5,0 -DA:8,1 -LF:4 -LH:3 -BRDA:4,1,0,0 -BRDA:4,1,1,1 -BRDA:4,2,0,1 -BRDA:4,2,1,0 -BRF:4 -BRH:2 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js -FN:46,Web3 -FN:73,(anonymous_2) -FN:78,(anonymous_3) -FN:100,(anonymous_4) -FN:105,(anonymous_5) -FN:129,(anonymous_6) -FN:133,(anonymous_7) -FNF:7 -FNH:6 -FNDA:154,Web3 -FNDA:25,(anonymous_2) -FNDA:13,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:154,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:4,(anonymous_7) -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:38,1 -DA:39,1 -DA:40,1 -DA:41,1 -DA:42,1 -DA:46,1 -DA:47,154 -DA:48,154 -DA:49,154 -DA:50,154 -DA:51,154 -DA:52,154 -DA:53,154 -DA:54,154 -DA:57,154 -DA:61,154 -DA:62,154 -DA:68,1 -DA:73,1 -DA:74,25 -DA:75,25 -DA:78,1 -DA:79,13 -DA:80,13 -DA:83,1 -DA:84,1 -DA:85,1 -DA:86,1 -DA:87,1 -DA:88,1 -DA:89,1 -DA:90,1 -DA:91,1 -DA:92,1 -DA:93,1 -DA:94,1 -DA:95,1 -DA:100,1 -DA:101,1 -DA:102,1 -DA:105,1 -DA:106,154 -DA:129,1 -DA:130,0 -DA:133,1 -DA:134,4 -DA:137,1 -LF:57 -LH:56 -BRDA:130,1,0,0 -BRDA:130,1,1,0 -BRF:2 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js -FN:38,(anonymous_1) -FN:50,(anonymous_2) -FN:73,(anonymous_3) -FN:78,(anonymous_4) -FN:98,(anonymous_5) -FN:104,(anonymous_6) -FN:125,(anonymous_7) -FN:144,(anonymous_8) -FN:152,(anonymous_9) -FN:171,(anonymous_10) -FN:182,(anonymous_11) -FN:196,(anonymous_12) -FN:201,(anonymous_13) -FNF:13 -FNH:13 -FNDA:156,(anonymous_1) -FNDA:76,(anonymous_2) -FNDA:75,(anonymous_3) -FNDA:72,(anonymous_4) -FNDA:4,(anonymous_5) -FNDA:4,(anonymous_6) -FNDA:9,(anonymous_7) -FNDA:12,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:181,(anonymous_10) -FNDA:7,(anonymous_11) -FNDA:24,(anonymous_12) -FNDA:6,(anonymous_13) -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:38,1 -DA:39,156 -DA:40,156 -DA:50,1 -DA:51,76 -DA:52,7 -DA:53,7 -DA:56,69 -DA:57,69 -DA:59,69 -DA:60,0 -DA:63,69 -DA:73,1 -DA:74,75 -DA:75,0 -DA:77,75 -DA:78,75 -DA:79,72 -DA:80,1 -DA:83,71 -DA:84,0 -DA:87,71 -DA:98,1 -DA:99,4 -DA:100,0 -DA:103,4 -DA:104,4 -DA:105,4 -DA:106,0 -DA:109,4 -DA:110,0 -DA:113,4 -DA:125,1 -DA:126,9 -DA:127,9 -DA:133,0 -DA:144,1 -DA:145,12 -DA:147,12 -DA:149,12 -DA:154,10 -DA:155,10 -DA:158,10 -DA:159,0 -DA:171,1 -DA:172,181 -DA:175,181 -DA:176,11 -DA:178,181 -DA:181,181 -DA:182,135 -DA:183,7 -DA:184,7 -DA:185,7 -DA:196,1 -DA:197,24 -DA:201,24 -DA:202,6 -DA:207,24 -DA:208,0 -DA:211,1 -LF:65 -LH:56 -BRDA:51,1,0,7 -BRDA:51,1,1,69 -BRDA:59,2,0,0 -BRDA:59,2,1,69 -BRDA:74,3,0,0 -BRDA:74,3,1,75 -BRDA:79,4,0,1 -BRDA:79,4,1,71 -BRDA:83,5,0,0 -BRDA:83,5,1,71 -BRDA:99,6,0,0 -BRDA:99,6,1,4 -BRDA:105,7,0,0 -BRDA:105,7,1,4 -BRDA:109,8,0,0 -BRDA:109,8,1,4 -BRDA:126,9,0,9 -BRDA:126,9,1,0 -BRDA:147,10,0,12 -BRDA:147,10,1,0 -BRDA:154,11,0,10 -BRDA:154,11,1,0 -BRDA:158,12,0,0 -BRDA:158,12,1,10 -BRDA:175,13,0,11 -BRDA:175,13,1,170 -BRDA:181,14,0,135 -BRDA:181,14,1,46 -BRDA:181,15,0,181 -BRDA:181,15,1,135 -BRDA:183,16,0,7 -BRDA:183,16,1,0 -BRDA:184,17,0,7 -BRDA:184,17,1,0 -BRDA:184,18,0,7 -BRDA:184,18,1,7 -BRDA:207,19,0,0 -BRDA:207,19,1,24 -BRF:38 -BRH:25 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js -FN:23,(anonymous_1) -FN:36,(anonymous_2) -FN:49,(anonymous_3) -FN:68,(anonymous_4) -FN:83,(anonymous_5) -FN:85,(anonymous_6) -FNF:6 -FNH:6 -FNDA:301,(anonymous_1) -FNDA:298,(anonymous_2) -FNDA:158,(anonymous_3) -FNDA:157,(anonymous_4) -FNDA:6,(anonymous_5) -FNDA:10,(anonymous_6) -DA:23,1 -DA:25,301 -DA:26,300 -DA:28,1 -DA:30,1 -DA:36,1 -DA:37,298 -DA:38,298 -DA:49,1 -DA:50,158 -DA:51,0 -DA:53,158 -DA:68,1 -DA:69,157 -DA:83,1 -DA:84,6 -DA:85,6 -DA:86,10 -DA:90,1 -LF:19 -LH:18 -BRDA:25,1,0,300 -BRDA:25,1,1,1 -BRDA:50,2,0,0 -BRDA:50,2,1,158 -BRDA:56,3,0,158 -BRDA:56,3,1,15 -BRDA:69,4,0,157 -BRDA:69,4,1,156 -BRDA:69,4,2,154 -BRDA:69,4,3,152 -BRDA:69,4,4,150 -BRF:11 -BRH:10 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js -FN:76,(anonymous_1) -FN:89,(anonymous_2) -FN:100,(anonymous_3) -FN:124,(anonymous_4) -FN:147,(anonymous_5) -FN:169,(anonymous_6) -FN:187,(anonymous_7) -FN:192,(anonymous_8) -FN:203,(anonymous_9) -FN:209,(anonymous_10) -FN:222,(anonymous_11) -FN:233,(anonymous_12) -FN:249,(anonymous_13) -FN:282,(anonymous_14) -FN:312,(anonymous_15) -FN:339,(anonymous_16) -FN:352,(anonymous_17) -FN:372,(anonymous_18) -FN:387,(anonymous_19) -FN:398,(anonymous_20) -FN:409,(anonymous_21) -FN:428,(anonymous_22) -FN:440,(anonymous_23) -FN:452,(anonymous_24) -FN:463,(anonymous_25) -FN:474,(anonymous_26) -FN:485,(anonymous_27) -FN:496,(anonymous_28) -FNF:28 -FNH:27 -FNDA:205,(anonymous_1) -FNDA:38,(anonymous_2) -FNDA:10,(anonymous_3) -FNDA:5,(anonymous_4) -FNDA:25,(anonymous_5) -FNDA:10,(anonymous_6) -FNDA:105,(anonymous_7) -FNDA:136,(anonymous_8) -FNDA:101,(anonymous_9) -FNDA:94,(anonymous_10) -FNDA:193,(anonymous_11) -FNDA:160,(anonymous_12) -FNDA:126,(anonymous_13) -FNDA:39,(anonymous_14) -FNDA:12,(anonymous_15) -FNDA:27,(anonymous_16) -FNDA:705,(anonymous_17) -FNDA:205,(anonymous_18) -FNDA:78,(anonymous_19) -FNDA:24,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:875,(anonymous_22) -FNDA:832,(anonymous_23) -FNDA:358,(anonymous_24) -FNDA:286,(anonymous_25) -FNDA:126,(anonymous_26) -FNDA:453,(anonymous_27) -FNDA:9,(anonymous_28) -DA:37,2 -DA:38,2 -DA:40,2 -DA:76,2 -DA:77,205 -DA:89,2 -DA:90,38 -DA:100,2 -DA:102,10 -DA:103,10 -DA:104,10 -DA:105,3 -DA:107,10 -DA:108,133 -DA:109,133 -DA:110,2 -DA:111,131 -DA:114,10 -DA:124,2 -DA:126,5 -DA:127,5 -DA:128,5 -DA:129,5 -DA:131,5 -DA:132,110 -DA:133,110 -DA:136,5 -DA:147,2 -DA:148,25 -DA:149,25 -DA:150,25 -DA:151,291 -DA:152,291 -DA:153,2 -DA:154,289 -DA:155,289 -DA:158,25 -DA:169,2 -DA:170,10 -DA:171,10 -DA:172,236 -DA:173,236 -DA:174,236 -DA:177,10 -DA:187,2 -DA:188,105 -DA:189,48 -DA:192,136 -DA:193,57 -DA:203,2 -DA:204,101 -DA:205,101 -DA:209,2 -DA:211,94 -DA:212,94 -DA:222,2 -DA:223,193 -DA:233,2 -DA:234,160 -DA:235,160 -DA:237,160 -DA:249,2 -DA:252,126 -DA:253,2 -DA:255,124 -DA:256,1 -DA:258,123 -DA:259,2 -DA:262,121 -DA:263,62 -DA:264,5 -DA:265,57 -DA:266,42 -DA:267,15 -DA:268,5 -DA:271,69 -DA:282,2 -DA:283,39 -DA:284,39 -DA:285,39 -DA:286,1 -DA:288,38 -DA:312,2 -DA:313,12 -DA:315,12 -DA:339,2 -DA:340,27 -DA:342,26 -DA:352,2 -DA:354,705 -DA:355,705 -DA:356,47 -DA:358,658 -DA:359,208 -DA:362,450 -DA:372,2 -DA:373,205 -DA:374,205 -DA:375,5 -DA:377,200 -DA:387,2 -DA:388,78 -DA:398,2 -DA:399,24 -DA:409,2 -DA:410,0 -DA:411,0 -DA:414,0 -DA:415,0 -DA:418,0 -DA:428,2 -DA:429,875 -DA:440,2 -DA:441,832 -DA:452,2 -DA:453,358 -DA:463,2 -DA:464,286 -DA:474,2 -DA:475,126 -DA:485,2 -DA:486,453 -DA:496,2 -DA:497,9 -DA:498,9 -DA:500,5 -DA:504,2 -LF:127 -LH:122 -BRDA:77,1,0,0 -BRDA:77,1,1,205 -BRDA:90,2,0,0 -BRDA:90,2,1,38 -BRDA:104,3,0,3 -BRDA:104,3,1,7 -BRDA:109,4,0,2 -BRDA:109,4,1,131 -BRDA:128,5,0,5 -BRDA:128,5,1,0 -BRDA:152,6,0,2 -BRDA:152,6,1,289 -BRDA:155,7,0,0 -BRDA:155,7,1,289 -BRDA:174,8,0,31 -BRDA:174,8,1,205 -BRDA:188,9,0,48 -BRDA:188,9,1,57 -BRDA:205,10,0,101 -BRDA:205,10,1,0 -BRDA:212,11,0,94 -BRDA:212,11,1,0 -BRDA:237,12,0,17 -BRDA:237,12,1,143 -BRDA:252,13,0,2 -BRDA:252,13,1,124 -BRDA:255,14,0,1 -BRDA:255,14,1,123 -BRDA:258,15,0,2 -BRDA:258,15,1,121 -BRDA:262,16,0,62 -BRDA:262,16,1,59 -BRDA:263,17,0,5 -BRDA:263,17,1,57 -BRDA:265,18,0,42 -BRDA:265,18,1,15 -BRDA:267,19,0,5 -BRDA:267,19,1,10 -BRDA:283,20,0,39 -BRDA:283,20,1,0 -BRDA:285,21,0,1 -BRDA:285,21,1,38 -BRDA:315,22,0,0 -BRDA:315,22,1,12 -BRDA:342,23,0,0 -BRDA:342,23,1,26 -BRDA:354,24,0,705 -BRDA:354,24,1,40 -BRDA:355,25,0,47 -BRDA:355,25,1,658 -BRDA:358,26,0,208 -BRDA:358,26,1,450 -BRDA:358,27,0,658 -BRDA:358,27,1,234 -BRDA:358,27,2,45 -BRDA:374,28,0,5 -BRDA:374,28,1,200 -BRDA:410,29,0,0 -BRDA:410,29,1,0 -BRDA:414,30,0,0 -BRDA:414,30,1,0 -BRDA:429,31,0,875 -BRDA:429,31,1,826 -BRDA:429,31,2,780 -BRDA:429,31,3,780 -BRDA:441,32,0,832 -BRDA:441,32,1,505 -BRDA:441,32,2,459 -BRDA:441,32,3,459 -BRF:69 -BRH:56 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js -FNF:0 -FNH:0 -DA:38,1 -DA:40,1 -DA:70,1 -LF:3 -LH:3 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js -FN:24,(anonymous_1) -FN:27,(anonymous_2) -FN:30,(anonymous_3) -FN:33,(anonymous_4) -FNF:4 -FNH:3 -FNDA:4,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:7,(anonymous_3) -FNDA:6,(anonymous_4) -DA:23,3 -DA:25,4 -DA:28,0 -DA:31,7 -DA:34,6 -DA:35,6 -LF:6 -LH:5 -BRDA:34,1,0,2 -BRDA:34,1,1,4 -BRDA:34,2,0,6 -BRDA:34,2,1,2 -BRDA:34,2,2,2 -BRF:5 -BRH:5 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js -FN:25,(anonymous_1) -FN:41,(anonymous_2) -FN:48,(anonymous_3) -FN:66,(anonymous_4) -FN:83,(anonymous_5) -FN:94,(anonymous_6) -FN:110,(anonymous_7) -FN:126,(anonymous_8) -FN:137,(anonymous_9) -FN:148,(anonymous_10) -FN:159,(anonymous_11) -FN:169,(anonymous_12) -FN:180,(anonymous_13) -FN:191,(anonymous_14) -FN:202,(anonymous_15) -FN:212,(anonymous_16) -FN:222,(anonymous_17) -FNF:17 -FNH:15 -FNDA:15,(anonymous_1) -FNDA:21,(anonymous_2) -FNDA:661,(anonymous_3) -FNDA:21,(anonymous_4) -FNDA:113,(anonymous_5) -FNDA:5,(anonymous_6) -FNDA:6,(anonymous_7) -FNDA:1,(anonymous_8) -FNDA:18,(anonymous_9) -FNDA:99,(anonymous_10) -FNDA:19,(anonymous_11) -FNDA:2,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:1,(anonymous_14) -FNDA:1,(anonymous_15) -FNDA:10,(anonymous_16) -FNDA:0,(anonymous_17) -DA:23,1 -DA:25,1 -DA:26,15 -DA:27,15 -DA:28,11 -DA:30,15 -DA:41,1 -DA:42,21 -DA:43,21 -DA:45,21 -DA:46,21 -DA:48,21 -DA:49,661 -DA:50,661 -DA:52,450 -DA:54,211 -DA:66,1 -DA:67,21 -DA:70,21 -DA:71,158 -DA:72,158 -DA:75,21 -DA:83,1 -DA:84,113 -DA:94,1 -DA:95,5 -DA:96,5 -DA:97,5 -DA:98,5 -DA:110,1 -DA:111,6 -DA:113,6 -DA:114,6 -DA:116,6 -DA:126,1 -DA:127,1 -DA:137,1 -DA:138,18 -DA:139,18 -DA:148,1 -DA:149,99 -DA:159,1 -DA:160,19 -DA:169,1 -DA:170,2 -DA:180,1 -DA:181,0 -DA:191,1 -DA:192,1 -DA:202,1 -DA:203,1 -DA:212,1 -DA:213,10 -DA:214,10 -DA:215,10 -DA:216,10 -DA:219,0 -DA:222,1 -DA:223,0 -DA:226,1 -LF:60 -LH:57 -BRDA:50,1,0,450 -BRDA:50,1,1,211 -BRDA:50,2,0,661 -BRDA:50,2,1,450 -BRDA:149,3,0,99 -BRDA:149,3,1,15 -BRDA:160,4,0,19 -BRDA:160,4,1,1 -BRDA:192,5,0,1 -BRDA:192,5,1,0 -BRDA:203,6,0,1 -BRDA:203,6,1,0 -BRDA:213,7,0,10 -BRDA:213,7,1,0 -BRF:14 -BRH:11 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js -FN:37,(anonymous_1) -FN:41,(anonymous_2) -FN:45,(anonymous_3) -FN:49,(anonymous_4) -FN:53,(anonymous_5) -FN:57,Eth -FN:62,(anonymous_7) -FN:67,(anonymous_8) -FN:78,(anonymous_9) -FN:81,(anonymous_10) -FN:88,(anonymous_11) -FN:91,(anonymous_12) -FN:97,(anonymous_13) -FN:124,(anonymous_14) -FN:320,(anonymous_15) -FN:357,(anonymous_16) -FN:362,(anonymous_17) -FN:366,(anonymous_18) -FNF:18 -FNH:14 -FNDA:6,(anonymous_1) -FNDA:4,(anonymous_2) -FNDA:6,(anonymous_3) -FNDA:6,(anonymous_4) -FNDA:6,(anonymous_5) -FNDA:154,Eth -FNDA:3696,(anonymous_7) -FNDA:1078,(anonymous_8) -FNDA:5,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:154,(anonymous_13) -FNDA:6,(anonymous_14) -FNDA:154,(anonymous_15) -FNDA:27,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:2,(anonymous_18) -DA:26,1 -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,1 -DA:35,1 -DA:37,1 -DA:38,6 -DA:41,1 -DA:42,4 -DA:45,1 -DA:46,6 -DA:49,1 -DA:50,6 -DA:53,1 -DA:54,6 -DA:57,1 -DA:58,154 -DA:60,154 -DA:62,154 -DA:63,3696 -DA:64,3696 -DA:67,154 -DA:68,1078 -DA:69,1078 -DA:73,154 -DA:74,154 -DA:77,1 -DA:79,5 -DA:82,0 -DA:83,0 -DA:87,1 -DA:89,0 -DA:92,0 -DA:93,0 -DA:97,1 -DA:98,154 -DA:106,154 -DA:113,154 -DA:120,154 -DA:124,6 -DA:128,154 -DA:137,154 -DA:145,154 -DA:153,154 -DA:160,154 -DA:168,154 -DA:175,154 -DA:183,154 -DA:190,154 -DA:197,154 -DA:204,154 -DA:211,154 -DA:219,154 -DA:225,154 -DA:231,154 -DA:237,154 -DA:243,154 -DA:249,154 -DA:255,154 -DA:265,154 -DA:291,154 -DA:320,1 -DA:321,154 -DA:357,1 -DA:358,27 -DA:359,27 -DA:362,1 -DA:363,0 -DA:366,1 -DA:367,2 -DA:371,1 -LF:76 -LH:70 -BRDA:38,1,0,2 -BRDA:38,1,1,4 -BRDA:38,2,0,6 -BRDA:38,2,1,2 -BRDA:42,3,0,2 -BRDA:42,3,1,2 -BRDA:42,4,0,4 -BRDA:42,4,1,2 -BRDA:46,5,0,2 -BRDA:46,5,1,4 -BRDA:46,6,0,6 -BRDA:46,6,1,2 -BRDA:50,7,0,2 -BRDA:50,7,1,4 -BRDA:50,8,0,6 -BRDA:50,8,1,4 -BRDA:54,9,0,2 -BRDA:54,9,1,4 -BRDA:54,10,0,6 -BRDA:54,10,1,4 -BRF:20 -BRH:20 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js -FN:35,(anonymous_1) -FN:39,(anonymous_2) -FN:43,(anonymous_3) -FN:50,(anonymous_4) -FN:66,(anonymous_5) -FN:78,(anonymous_6) -FN:80,(anonymous_7) -FN:94,(anonymous_8) -FN:103,(anonymous_9) -FN:105,(anonymous_10) -FN:119,(anonymous_11) -FN:138,(anonymous_12) -FN:147,(anonymous_13) -FN:162,(anonymous_14) -FN:176,(anonymous_15) -FN:192,(anonymous_16) -FN:193,(anonymous_17) -FN:208,(anonymous_18) -FN:227,(anonymous_19) -FN:245,(anonymous_20) -FN:258,(anonymous_21) -FN:273,(anonymous_22) -FN:290,(anonymous_23) -FN:297,(anonymous_24) -FN:310,(anonymous_25) -FNF:25 -FNH:24 -FNDA:26,(anonymous_1) -FNDA:67,(anonymous_2) -FNDA:55,(anonymous_3) -FNDA:67,(anonymous_4) -FNDA:15,(anonymous_5) -FNDA:60,(anonymous_6) -FNDA:18,(anonymous_7) -FNDA:13,(anonymous_8) -FNDA:52,(anonymous_9) -FNDA:24,(anonymous_10) -FNDA:12,(anonymous_11) -FNDA:2,(anonymous_12) -FNDA:4,(anonymous_13) -FNDA:15,(anonymous_14) -FNDA:20,(anonymous_15) -FNDA:5,(anonymous_16) -FNDA:7,(anonymous_17) -FNDA:7,(anonymous_18) -FNDA:16,(anonymous_19) -FNDA:5,(anonymous_20) -FNDA:6,(anonymous_21) -FNDA:1,(anonymous_22) -FNDA:2,(anonymous_23) -FNDA:80,(anonymous_24) -FNDA:0,(anonymous_25) -DA:24,1 -DA:25,1 -DA:26,1 -DA:35,1 -DA:36,26 -DA:39,1 -DA:40,67 -DA:43,1 -DA:44,55 -DA:45,20 -DA:47,35 -DA:50,1 -DA:51,67 -DA:52,0 -DA:53,67 -DA:54,15 -DA:56,52 -DA:66,1 -DA:68,15 -DA:70,15 -DA:71,4 -DA:74,15 -DA:75,15 -DA:78,15 -DA:79,60 -DA:81,18 -DA:84,15 -DA:94,1 -DA:96,13 -DA:97,13 -DA:99,13 -DA:100,11 -DA:103,13 -DA:104,52 -DA:106,24 -DA:109,13 -DA:119,1 -DA:120,12 -DA:121,11 -DA:122,12 -DA:123,11 -DA:124,12 -DA:125,12 -DA:126,12 -DA:127,12 -DA:128,12 -DA:138,1 -DA:139,2 -DA:140,2 -DA:141,2 -DA:142,2 -DA:143,2 -DA:144,2 -DA:146,2 -DA:147,2 -DA:148,4 -DA:152,2 -DA:162,1 -DA:165,15 -DA:166,15 -DA:167,15 -DA:168,15 -DA:169,15 -DA:170,14 -DA:172,15 -DA:173,15 -DA:175,15 -DA:176,12 -DA:177,20 -DA:178,4 -DA:182,15 -DA:192,1 -DA:193,5 -DA:195,7 -DA:196,2 -DA:198,5 -DA:200,5 -DA:201,5 -DA:203,0 -DA:207,5 -DA:208,5 -DA:209,7 -DA:212,5 -DA:214,5 -DA:215,0 -DA:217,5 -DA:227,1 -DA:228,16 -DA:229,13 -DA:230,16 -DA:231,13 -DA:232,16 -DA:233,13 -DA:235,16 -DA:245,1 -DA:248,5 -DA:249,5 -DA:250,5 -DA:253,5 -DA:254,0 -DA:258,5 -DA:260,6 -DA:263,5 -DA:273,1 -DA:275,1 -DA:276,1 -DA:277,1 -DA:278,1 -DA:287,1 -DA:288,0 -DA:290,1 -DA:291,2 -DA:294,1 -DA:297,1 -DA:298,80 -DA:299,80 -DA:300,8 -DA:301,72 -DA:302,58 -DA:303,14 -DA:304,9 -DA:306,5 -DA:310,1 -DA:312,0 -DA:313,0 -DA:314,0 -DA:316,0 -DA:319,1 -LF:128 -LH:119 -BRDA:40,1,0,67 -BRDA:40,1,1,59 -BRDA:40,1,2,53 -BRDA:44,2,0,20 -BRDA:44,2,1,35 -BRDA:51,3,0,0 -BRDA:51,3,1,67 -BRDA:53,4,0,15 -BRDA:53,4,1,52 -BRDA:68,5,0,15 -BRDA:68,5,1,11 -BRDA:70,6,0,4 -BRDA:70,6,1,11 -BRDA:74,7,0,15 -BRDA:74,7,1,0 -BRDA:96,8,0,13 -BRDA:96,8,1,0 -BRDA:99,9,0,11 -BRDA:99,9,1,2 -BRDA:120,10,0,11 -BRDA:120,10,1,1 -BRDA:122,11,0,11 -BRDA:122,11,1,1 -BRDA:139,12,0,2 -BRDA:139,12,1,0 -BRDA:141,13,0,2 -BRDA:141,13,1,0 -BRDA:146,14,0,2 -BRDA:146,14,1,0 -BRDA:169,15,0,14 -BRDA:169,15,1,1 -BRDA:175,16,0,12 -BRDA:175,16,1,3 -BRDA:177,17,0,4 -BRDA:177,17,1,16 -BRDA:195,18,0,2 -BRDA:195,18,1,5 -BRDA:195,19,0,7 -BRDA:195,19,1,5 -BRDA:200,20,0,5 -BRDA:200,20,1,0 -BRDA:207,21,0,5 -BRDA:207,21,1,1 -BRDA:209,22,0,0 -BRDA:209,22,1,7 -BRDA:214,23,0,0 -BRDA:214,23,1,5 -BRDA:214,24,0,5 -BRDA:214,24,1,4 -BRDA:228,25,0,13 -BRDA:228,25,1,3 -BRDA:230,26,0,13 -BRDA:230,26,1,3 -BRDA:232,27,0,13 -BRDA:232,27,1,3 -BRDA:253,28,0,0 -BRDA:253,28,1,5 -BRDA:254,29,0,0 -BRDA:254,29,1,0 -BRDA:260,30,0,0 -BRDA:260,30,1,6 -BRDA:287,31,0,0 -BRDA:287,31,1,1 -BRDA:299,32,0,8 -BRDA:299,32,1,72 -BRDA:299,33,0,80 -BRDA:299,33,1,8 -BRDA:301,34,0,58 -BRDA:301,34,1,14 -BRDA:303,35,0,9 -BRDA:303,35,1,5 -BRF:71 -BRH:57 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js -FN:26,(anonymous_1) -FN:35,(anonymous_2) -FN:46,(anonymous_3) -FN:57,(anonymous_4) -FN:70,(anonymous_5) -FN:83,(anonymous_6) -FN:88,(anonymous_7) -FN:100,(anonymous_8) -FN:104,(anonymous_9) -FN:119,(anonymous_10) -FN:132,(anonymous_11) -FN:144,(anonymous_12) -FN:146,(anonymous_13) -FN:149,(anonymous_14) -FN:166,(anonymous_15) -FNF:15 -FNH:15 -FNDA:5096,(anonymous_1) -FNDA:4930,(anonymous_2) -FNDA:117,(anonymous_3) -FNDA:116,(anonymous_4) -FNDA:117,(anonymous_5) -FNDA:115,(anonymous_6) -FNDA:166,(anonymous_7) -FNDA:115,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:113,(anonymous_10) -FNDA:4930,(anonymous_11) -FNDA:4930,(anonymous_12) -FNDA:109,(anonymous_13) -FNDA:51,(anonymous_14) -FNDA:4,(anonymous_15) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,5096 -DA:28,5096 -DA:29,5096 -DA:30,5096 -DA:31,5096 -DA:32,5096 -DA:35,1 -DA:36,4930 -DA:46,1 -DA:47,117 -DA:57,1 -DA:58,116 -DA:59,57 -DA:70,1 -DA:71,117 -DA:72,2 -DA:83,1 -DA:84,115 -DA:85,23 -DA:88,92 -DA:89,166 -DA:100,1 -DA:101,115 -DA:103,115 -DA:104,6 -DA:105,10 -DA:108,109 -DA:119,1 -DA:120,113 -DA:121,113 -DA:122,113 -DA:123,113 -DA:125,113 -DA:132,1 -DA:133,4930 -DA:134,4930 -DA:135,4930 -DA:136,4930 -DA:137,462 -DA:138,462 -DA:140,4468 -DA:144,1 -DA:145,4930 -DA:146,4930 -DA:147,109 -DA:148,109 -DA:149,51 -DA:150,51 -DA:153,58 -DA:155,4930 -DA:156,4930 -DA:166,1 -DA:167,4 -DA:168,4 -DA:169,4 -DA:172,1 -LF:59 -LH:59 -BRDA:29,1,0,5096 -BRDA:29,1,1,780 -BRDA:47,2,0,31 -BRDA:47,2,1,86 -BRDA:58,3,0,57 -BRDA:58,3,1,59 -BRDA:71,4,0,2 -BRDA:71,4,1,115 -BRDA:84,5,0,23 -BRDA:84,5,1,92 -BRDA:89,6,0,158 -BRDA:89,6,1,8 -BRDA:103,7,0,6 -BRDA:103,7,1,109 -BRDA:105,8,0,3 -BRDA:105,8,1,7 -BRDA:105,9,0,10 -BRDA:105,9,1,3 -BRDA:108,10,0,58 -BRDA:108,10,1,51 -BRDA:108,11,0,109 -BRDA:108,11,1,59 -BRDA:136,12,0,462 -BRDA:136,12,1,4468 -BRDA:137,13,0,462 -BRDA:137,13,1,154 -BRDA:148,14,0,51 -BRDA:148,14,1,58 -BRF:28 -BRH:28 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js -FN:26,(anonymous_1) -FN:35,(anonymous_2) -FN:46,(anonymous_3) -FN:57,(anonymous_4) -FN:68,(anonymous_5) -FN:82,(anonymous_6) -FN:100,(anonymous_7) -FN:104,(anonymous_8) -FN:106,get -FN:113,(anonymous_10) -FN:115,(anonymous_11) -FN:118,(anonymous_12) -FN:133,(anonymous_13) -FNF:13 -FNH:12 -FNDA:2004,(anonymous_1) -FNDA:2004,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:20,(anonymous_4) -FNDA:2,(anonymous_5) -FNDA:2004,(anonymous_6) -FNDA:2004,(anonymous_7) -FNDA:2004,(anonymous_8) -FNDA:17,get -FNDA:2004,(anonymous_10) -FNDA:1,(anonymous_11) -FNDA:1,(anonymous_12) -FNDA:2,(anonymous_13) -DA:24,1 -DA:26,1 -DA:27,2004 -DA:28,2004 -DA:29,2004 -DA:30,2004 -DA:31,2004 -DA:32,2004 -DA:35,1 -DA:36,2004 -DA:46,1 -DA:47,0 -DA:57,1 -DA:58,20 -DA:68,1 -DA:69,2 -DA:70,2 -DA:82,1 -DA:83,2004 -DA:88,2004 -DA:89,2004 -DA:90,2004 -DA:91,616 -DA:92,616 -DA:93,616 -DA:96,2004 -DA:97,2004 -DA:100,1 -DA:101,2004 -DA:104,1 -DA:105,2004 -DA:106,2004 -DA:107,17 -DA:113,1 -DA:114,2004 -DA:115,2004 -DA:116,1 -DA:119,1 -DA:122,2004 -DA:123,2004 -DA:133,1 -DA:134,2 -DA:139,2 -DA:140,2 -DA:143,1 -LF:45 -LH:44 -BRDA:47,1,0,0 -BRDA:47,1,1,0 -BRDA:58,2,0,8 -BRDA:58,2,1,12 -BRDA:58,3,0,20 -BRDA:58,3,1,11 -BRDA:69,4,0,2 -BRDA:69,4,1,0 -BRDA:90,5,0,616 -BRDA:90,5,1,1388 -BRDA:91,6,0,616 -BRDA:91,6,1,0 -BRF:12 -BRH:8 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js -FN:30,(anonymous_1) -FN:39,(anonymous_2) -FN:44,(anonymous_3) -FN:57,(anonymous_4) -FN:60,(anonymous_5) -FNF:5 -FNH:5 -FNDA:308,(anonymous_1) -FNDA:308,(anonymous_2) -FNDA:308,(anonymous_3) -FNDA:308,(anonymous_4) -FNDA:7,(anonymous_5) -DA:24,1 -DA:25,1 -DA:26,1 -DA:30,1 -DA:31,308 -DA:32,308 -DA:33,308 -DA:34,308 -DA:35,308 -DA:39,1 -DA:40,308 -DA:44,1 -DA:45,308 -DA:46,308 -DA:47,308 -DA:48,308 -DA:49,0 -DA:50,0 -DA:52,308 -DA:57,1 -DA:58,308 -DA:60,308 -DA:61,7 -DA:68,7 -DA:72,1 -LF:25 -LH:23 -BRDA:34,1,0,308 -BRDA:34,1,1,0 -BRDA:48,2,0,0 -BRDA:48,2,1,308 -BRDA:49,3,0,0 -BRDA:49,3,1,0 -BRF:6 -BRH:2 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js -FN:28,(anonymous_1) -FN:49,(anonymous_2) -FN:63,(anonymous_3) -FN:85,(anonymous_4) -FN:92,(anonymous_5) -FN:108,(anonymous_6) -FN:121,(anonymous_7) -FN:138,(anonymous_8) -FN:148,(anonymous_9) -FN:162,(anonymous_10) -FN:164,(anonymous_11) -FN:176,(anonymous_12) -FN:181,(anonymous_13) -FNF:13 -FNH:11 -FNDA:10,(anonymous_1) -FNDA:10,(anonymous_2) -FNDA:10,(anonymous_3) -FNDA:10,(anonymous_4) -FNDA:5,(anonymous_5) -FNDA:7,(anonymous_6) -FNDA:10,(anonymous_7) -FNDA:6,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:9,(anonymous_12) -FNDA:7,(anonymous_13) -DA:24,1 -DA:25,1 -DA:28,1 -DA:29,10 -DA:30,10 -DA:32,10 -DA:49,1 -DA:50,10 -DA:51,10 -DA:63,1 -DA:64,10 -DA:66,10 -DA:67,4 -DA:69,10 -DA:70,4 -DA:72,10 -DA:73,0 -DA:85,1 -DA:86,10 -DA:88,10 -DA:89,5 -DA:92,5 -DA:93,5 -DA:95,5 -DA:97,5 -DA:108,1 -DA:109,7 -DA:111,7 -DA:121,1 -DA:122,10 -DA:123,10 -DA:124,10 -DA:126,10 -DA:138,1 -DA:139,6 -DA:148,1 -DA:149,10 -DA:150,10 -DA:153,10 -DA:154,0 -DA:158,10 -DA:159,0 -DA:163,0 -DA:164,0 -DA:165,0 -DA:168,0 -DA:174,10 -DA:176,10 -DA:177,9 -DA:178,9 -DA:181,9 -DA:182,7 -DA:185,0 -DA:190,10 -DA:193,0 -DA:196,1 -LF:56 -LH:47 -BRDA:50,1,0,10 -BRDA:50,1,1,0 -BRDA:66,2,0,4 -BRDA:66,2,1,6 -BRDA:69,3,0,4 -BRDA:69,3,1,6 -BRDA:72,4,0,0 -BRDA:72,4,1,10 -BRDA:88,5,0,5 -BRDA:88,5,1,5 -BRDA:88,6,0,10 -BRDA:88,6,1,6 -BRDA:93,7,0,5 -BRDA:93,7,1,0 -BRDA:111,8,0,7 -BRDA:111,8,1,0 -BRDA:111,9,0,7 -BRDA:111,9,1,7 -BRDA:111,9,2,7 -BRDA:153,10,0,0 -BRDA:153,10,1,10 -BRDA:158,11,0,0 -BRDA:158,11,1,10 -BRDA:158,12,0,10 -BRDA:158,12,1,5 -BRDA:158,12,2,5 -BRDA:158,12,3,0 -BRDA:163,13,0,0 -BRDA:163,13,1,0 -BRDA:174,14,0,10 -BRDA:174,14,1,0 -BRDA:177,15,0,9 -BRDA:177,15,1,0 -BRDA:177,16,0,9 -BRDA:177,16,1,9 -BRF:35 -BRH:24 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js -FN:35,(anonymous_1) -FN:36,(anonymous_2) -FN:38,(anonymous_3) -FN:39,(anonymous_4) -FN:42,(anonymous_5) -FN:54,(anonymous_6) -FN:55,(anonymous_7) -FN:57,(anonymous_8) -FN:59,(anonymous_9) -FN:71,(anonymous_10) -FN:72,(anonymous_11) -FN:79,(anonymous_12) -FN:94,(anonymous_13) -FN:99,(anonymous_14) -FN:117,(anonymous_15) -FN:120,(anonymous_16) -FN:163,(anonymous_17) -FN:191,(anonymous_18) -FN:214,(anonymous_19) -FN:246,(anonymous_20) -FN:265,(anonymous_21) -FN:287,(anonymous_22) -FNF:22 -FNH:17 -FNDA:1,(anonymous_1) -FNDA:1,(anonymous_2) -FNDA:1,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:1,(anonymous_5) -FNDA:26,(anonymous_6) -FNDA:91,(anonymous_7) -FNDA:68,(anonymous_8) -FNDA:68,(anonymous_9) -FNDA:26,(anonymous_10) -FNDA:91,(anonymous_11) -FNDA:22,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:27,(anonymous_17) -FNDA:1,(anonymous_18) -FNDA:1,(anonymous_19) -FNDA:26,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:27,(anonymous_22) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:39,1 -DA:40,1 -DA:43,1 -DA:54,1 -DA:55,26 -DA:56,91 -DA:58,68 -DA:60,68 -DA:71,1 -DA:72,26 -DA:73,91 -DA:76,26 -DA:77,26 -DA:79,26 -DA:80,22 -DA:81,22 -DA:94,1 -DA:95,0 -DA:99,0 -DA:100,0 -DA:101,0 -DA:104,0 -DA:106,0 -DA:107,0 -DA:109,0 -DA:110,0 -DA:112,0 -DA:117,0 -DA:118,0 -DA:120,0 -DA:123,0 -DA:124,0 -DA:126,0 -DA:127,0 -DA:129,0 -DA:133,0 -DA:136,0 -DA:137,0 -DA:140,0 -DA:141,0 -DA:144,0 -DA:145,0 -DA:147,0 -DA:163,1 -DA:164,27 -DA:165,27 -DA:167,27 -DA:191,1 -DA:192,1 -DA:195,1 -DA:196,1 -DA:198,1 -DA:199,1 -DA:200,1 -DA:203,1 -DA:204,1 -DA:205,1 -DA:208,1 -DA:209,1 -DA:211,1 -DA:214,1 -DA:215,1 -DA:216,0 -DA:219,1 -DA:222,1 -DA:224,0 -DA:228,0 -DA:230,0 -DA:231,0 -DA:234,1 -DA:246,1 -DA:247,26 -DA:251,26 -DA:252,26 -DA:254,26 -DA:255,0 -DA:257,26 -DA:265,1 -DA:266,0 -DA:267,0 -DA:269,0 -DA:270,0 -DA:271,0 -DA:274,0 -DA:275,0 -DA:277,0 -DA:287,1 -DA:288,27 -DA:289,27 -DA:290,27 -DA:291,27 -DA:294,1 -LF:99 -LH:59 -BRDA:36,1,0,1 -BRDA:36,1,1,0 -BRDA:37,2,0,1 -BRDA:37,2,1,1 -BRDA:100,3,0,0 -BRDA:100,3,1,0 -BRDA:100,4,0,0 -BRDA:100,4,1,0 -BRDA:104,5,0,0 -BRDA:104,5,1,0 -BRDA:109,6,0,0 -BRDA:109,6,1,0 -BRDA:118,7,0,0 -BRDA:118,7,1,0 -BRDA:118,8,0,0 -BRDA:118,8,1,0 -BRDA:123,9,0,0 -BRDA:123,9,1,0 -BRDA:123,10,0,0 -BRDA:123,10,1,0 -BRDA:129,11,0,0 -BRDA:129,11,1,0 -BRDA:140,12,0,0 -BRDA:140,12,1,0 -BRDA:144,13,0,0 -BRDA:144,13,1,0 -BRDA:199,14,0,1 -BRDA:199,14,1,0 -BRDA:204,15,0,1 -BRDA:204,15,1,0 -BRDA:204,16,0,1 -BRDA:204,16,1,1 -BRDA:211,17,0,1 -BRDA:211,17,1,0 -BRDA:215,18,0,0 -BRDA:215,18,1,1 -BRDA:254,19,0,0 -BRDA:254,19,1,26 -BRDA:270,20,0,0 -BRDA:270,20,1,0 -BRDA:270,21,0,0 -BRDA:270,21,1,0 -BRF:42 -BRH:10 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js -FN:38,(anonymous_1) -FN:50,(anonymous_2) -FN:51,(anonymous_3) -FN:70,(anonymous_4) -FN:82,(anonymous_5) -FN:85,(anonymous_6) -FN:89,(anonymous_7) -FN:100,(anonymous_8) -FN:104,(anonymous_9) -FN:108,(anonymous_10) -FN:121,(anonymous_11) -FN:132,(anonymous_12) -FN:135,(anonymous_13) -FN:141,(anonymous_14) -FN:152,(anonymous_15) -FN:163,(anonymous_16) -FN:170,(anonymous_17) -FN:180,(anonymous_18) -FN:202,(anonymous_19) -FN:214,(anonymous_20) -FN:218,(anonymous_21) -FN:223,(anonymous_22) -FN:224,(anonymous_23) -FN:233,(anonymous_24) -FN:240,(anonymous_25) -FN:242,(anonymous_26) -FNF:26 -FNH:26 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:2403,(anonymous_3) -FNDA:64,(anonymous_4) -FNDA:107,(anonymous_5) -FNDA:135,(anonymous_6) -FNDA:135,(anonymous_7) -FNDA:107,(anonymous_8) -FNDA:270,(anonymous_9) -FNDA:135,(anonymous_10) -FNDA:135,(anonymous_11) -FNDA:287,(anonymous_12) -FNDA:42,(anonymous_13) -FNDA:42,(anonymous_14) -FNDA:42,(anonymous_15) -FNDA:13,(anonymous_16) -FNDA:1,(anonymous_17) -FNDA:13,(anonymous_18) -FNDA:68,(anonymous_19) -FNDA:106,(anonymous_20) -FNDA:132,(anonymous_21) -FNDA:106,(anonymous_22) -FNDA:132,(anonymous_23) -FNDA:132,(anonymous_24) -FNDA:213,(anonymous_25) -FNDA:267,(anonymous_26) -DA:23,1 -DA:25,1 -DA:26,1 -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:38,1 -DA:39,1 -DA:50,1 -DA:51,267 -DA:52,2403 -DA:55,267 -DA:56,0 -DA:59,267 -DA:70,1 -DA:71,64 -DA:82,1 -DA:83,107 -DA:85,107 -DA:86,135 -DA:89,107 -DA:90,135 -DA:91,135 -DA:92,135 -DA:95,107 -DA:97,107 -DA:100,1 -DA:101,107 -DA:102,107 -DA:104,107 -DA:105,270 -DA:108,107 -DA:109,135 -DA:110,43 -DA:111,43 -DA:112,43 -DA:115,92 -DA:121,107 -DA:122,135 -DA:123,43 -DA:124,43 -DA:125,43 -DA:128,107 -DA:132,1 -DA:133,287 -DA:134,287 -DA:135,42 -DA:137,42 -DA:138,42 -DA:139,42 -DA:141,42 -DA:142,42 -DA:143,42 -DA:144,0 -DA:145,0 -DA:146,0 -DA:152,42 -DA:153,42 -DA:154,82 -DA:155,82 -DA:159,42 -DA:162,245 -DA:163,13 -DA:164,13 -DA:165,13 -DA:166,13 -DA:169,13 -DA:170,1 -DA:171,1 -DA:172,1 -DA:174,2 -DA:175,2 -DA:180,13 -DA:181,13 -DA:182,27 -DA:183,27 -DA:187,13 -DA:191,232 -DA:202,1 -DA:203,68 -DA:214,1 -DA:215,106 -DA:216,106 -DA:218,106 -DA:219,132 -DA:223,1 -DA:224,106 -DA:225,132 -DA:228,106 -DA:230,29 -DA:233,106 -DA:235,132 -DA:236,132 -DA:240,1 -DA:241,213 -DA:242,213 -DA:243,267 -DA:247,1 -DA:259,1 -LF:103 -LH:99 -BRDA:55,1,0,0 -BRDA:55,1,1,267 -BRDA:105,2,0,270 -BRDA:105,2,1,230 -BRDA:109,3,0,43 -BRDA:109,3,1,92 -BRDA:122,4,0,43 -BRDA:122,4,1,92 -BRDA:134,5,0,42 -BRDA:134,5,1,245 -BRDA:143,6,0,0 -BRDA:143,6,1,42 -BRDA:145,7,0,0 -BRDA:145,7,1,0 -BRDA:162,8,0,13 -BRDA:162,8,1,232 -BRDA:169,9,0,1 -BRDA:169,9,1,12 -BRDA:174,10,0,2 -BRDA:174,10,1,1 -BRDA:174,11,0,2 -BRDA:174,11,1,1 -BRF:22 -BRH:18 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js -FN:38,(anonymous_1) -FN:51,(anonymous_2) -FN:65,(anonymous_3) -FN:80,(anonymous_4) -FN:95,(anonymous_5) -FN:108,(anonymous_6) -FN:119,(anonymous_7) -FN:130,(anonymous_8) -FN:148,(anonymous_9) -FN:160,(anonymous_10) -FN:171,(anonymous_11) -FN:182,(anonymous_12) -FN:193,(anonymous_13) -FN:204,(anonymous_14) -FN:216,(anonymous_15) -FN:228,(anonymous_16) -FNF:16 -FNH:15 -FNDA:205,(anonymous_1) -FNDA:15,(anonymous_2) -FNDA:9,(anonymous_3) -FNDA:14,(anonymous_4) -FNDA:15,(anonymous_5) -FNDA:7,(anonymous_6) -FNDA:61,(anonymous_7) -FNDA:61,(anonymous_8) -FNDA:45,(anonymous_9) -FNDA:7,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:12,(anonymous_12) -FNDA:10,(anonymous_13) -FNDA:15,(anonymous_14) -FNDA:7,(anonymous_15) -FNDA:26,(anonymous_16) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:38,1 -DA:39,205 -DA:40,205 -DA:41,205 -DA:51,1 -DA:52,15 -DA:53,15 -DA:54,15 -DA:55,15 -DA:65,1 -DA:66,9 -DA:67,9 -DA:68,9 -DA:69,9 -DA:70,9 -DA:80,1 -DA:81,14 -DA:82,14 -DA:83,14 -DA:84,14 -DA:85,14 -DA:95,1 -DA:96,15 -DA:97,15 -DA:108,1 -DA:109,7 -DA:119,1 -DA:120,61 -DA:130,1 -DA:131,61 -DA:135,61 -DA:136,3 -DA:138,58 -DA:148,1 -DA:149,45 -DA:150,45 -DA:160,1 -DA:161,7 -DA:171,1 -DA:172,0 -DA:182,1 -DA:183,12 -DA:193,1 -DA:194,10 -DA:204,1 -DA:205,15 -DA:206,15 -DA:216,1 -DA:217,7 -DA:218,7 -DA:228,1 -DA:229,26 -DA:230,26 -DA:233,1 -LF:58 -LH:57 -BRDA:96,1,0,7 -BRDA:96,1,1,8 -BRDA:131,2,0,61 -BRDA:131,2,1,0 -BRDA:135,3,0,3 -BRDA:135,3,1,58 -BRDA:149,4,0,45 -BRDA:149,4,1,0 -BRDA:183,5,0,6 -BRDA:183,5,1,6 -BRF:10 -BRH:8 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js -FN:29,(anonymous_1) -FN:40,(anonymous_2) -FN:51,(anonymous_3) -FN:63,(anonymous_4) -FN:74,(anonymous_5) -FN:84,(anonymous_6) -FN:94,(anonymous_7) -FN:107,(anonymous_8) -FN:117,(anonymous_9) -FN:128,(anonymous_10) -FN:132,(anonymous_11) -FN:142,(anonymous_12) -FN:144,(anonymous_13) -FNF:13 -FNH:5 -FNDA:434,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:668,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:389,(anonymous_7) -FNDA:279,(anonymous_8) -FNDA:235,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -DA:23,1 -DA:29,1 -DA:30,434 -DA:31,434 -DA:40,1 -DA:41,0 -DA:51,1 -DA:52,0 -DA:63,1 -DA:64,0 -DA:74,1 -DA:75,668 -DA:84,1 -DA:85,0 -DA:94,1 -DA:95,389 -DA:96,389 -DA:98,0 -DA:107,1 -DA:108,279 -DA:117,1 -DA:118,235 -DA:128,1 -DA:131,0 -DA:132,0 -DA:133,0 -DA:134,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:142,0 -DA:143,0 -DA:145,0 -DA:151,1 -LF:34 -LH:19 -BRDA:30,1,0,434 -BRDA:30,1,1,0 -BRDA:85,2,0,0 -BRDA:85,2,1,0 -BRDA:95,3,0,389 -BRDA:95,3,1,0 -BRDA:108,4,0,44 -BRDA:108,4,1,235 -BRDA:133,5,0,0 -BRDA:133,5,1,0 -BRF:10 -BRH:4 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js -FN:14,(anonymous_1) -FN:22,(anonymous_2) -FN:26,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:100,(anonymous_3) -DA:1,1 -DA:2,1 -DA:14,1 -DA:15,1 -DA:16,1 -DA:19,1 -DA:20,1 -DA:22,1 -DA:23,267 -DA:26,1 -DA:27,100 -DA:30,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js -FN:7,(anonymous_1) -FN:19,(anonymous_2) -FN:30,(anonymous_3) -FN:44,(anonymous_4) -FN:59,(anonymous_5) -FN:78,(anonymous_6) -FN:99,(anonymous_7) -FN:117,(anonymous_8) -FN:132,(anonymous_9) -FN:145,(anonymous_10) -FN:149,(anonymous_11) -FN:156,(anonymous_12) -FN:165,(anonymous_13) -FN:191,(anonymous_14) -FN:196,(anonymous_15) -FN:215,(anonymous_16) -FN:232,(anonymous_17) -FNF:17 -FNH:15 -FNDA:9,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:1029,(anonymous_4) -FNDA:619,(anonymous_5) -FNDA:678,(anonymous_6) -FNDA:128,(anonymous_7) -FNDA:338,(anonymous_8) -FNDA:2454,(anonymous_9) -FNDA:201,(anonymous_10) -FNDA:22,(anonymous_11) -FNDA:43,(anonymous_12) -FNDA:11,(anonymous_13) -FNDA:216,(anonymous_14) -FNDA:21,(anonymous_15) -FNDA:19,(anonymous_16) -FNDA:22,(anonymous_17) -DA:1,1 -DA:2,1 -DA:7,1 -DA:8,9 -DA:9,9 -DA:19,1 -DA:20,0 -DA:30,1 -DA:31,0 -DA:44,1 -DA:45,1029 -DA:46,1029 -DA:59,1 -DA:60,619 -DA:61,619 -DA:78,1 -DA:79,678 -DA:80,678 -DA:81,123 -DA:83,555 -DA:99,1 -DA:101,128 -DA:102,128 -DA:103,0 -DA:106,128 -DA:117,1 -DA:118,338 -DA:132,1 -DA:134,2454 -DA:145,1 -DA:146,201 -DA:147,201 -DA:149,22 -DA:150,22 -DA:151,22 -DA:153,22 -DA:154,22 -DA:156,22 -DA:157,43 -DA:160,22 -DA:163,179 -DA:165,11 -DA:166,11 -DA:167,11 -DA:169,11 -DA:170,11 -DA:171,23 -DA:174,11 -DA:179,168 -DA:191,1 -DA:192,216 -DA:194,216 -DA:196,21 -DA:197,21 -DA:198,21 -DA:199,21 -DA:201,21 -DA:202,21 -DA:203,21 -DA:204,21 -DA:206,21 -DA:207,37 -DA:210,21 -DA:213,195 -DA:215,19 -DA:216,19 -DA:217,19 -DA:219,19 -DA:220,19 -DA:221,19 -DA:222,19 -DA:224,19 -DA:225,47 -DA:228,19 -DA:230,176 -DA:232,22 -DA:233,22 -DA:234,22 -DA:235,22 -DA:237,22 -DA:241,154 -DA:242,154 -DA:245,1 -LF:83 -LH:80 -BRDA:46,1,0,1029 -BRDA:46,1,1,186 -BRDA:61,2,0,619 -BRDA:61,2,1,43 -BRDA:80,3,0,123 -BRDA:80,3,1,555 -BRDA:81,4,0,123 -BRDA:81,4,1,54 -BRDA:102,5,0,0 -BRDA:102,5,1,128 -BRDA:147,6,0,22 -BRDA:147,6,1,179 -BRDA:163,7,0,11 -BRDA:163,7,1,168 -BRDA:194,8,0,21 -BRDA:194,8,1,195 -BRDA:213,9,0,19 -BRDA:213,9,1,176 -BRDA:230,10,0,22 -BRDA:230,10,1,154 -BRF:20 -BRH:19 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js -FN:14,(anonymous_1) -FN:22,(anonymous_2) -FN:26,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:44,(anonymous_3) -DA:1,1 -DA:2,1 -DA:14,1 -DA:15,1 -DA:16,1 -DA:19,1 -DA:20,1 -DA:22,1 -DA:23,267 -DA:26,1 -DA:27,44 -DA:30,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:234,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,234 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:139,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,139 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js -FN:4,(anonymous_1) -FN:12,(anonymous_2) -FN:16,(anonymous_3) -FN:20,(anonymous_4) -FNF:4 -FNH:4 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:37,(anonymous_3) -FNDA:33,(anonymous_4) -DA:1,1 -DA:2,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:9,1 -DA:10,1 -DA:12,1 -DA:13,267 -DA:16,1 -DA:17,37 -DA:20,1 -DA:21,33 -DA:24,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js -FN:4,(anonymous_1) -FN:12,(anonymous_2) -FN:16,(anonymous_3) -FN:20,(anonymous_4) -FNF:4 -FNH:4 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:28,(anonymous_3) -FNDA:35,(anonymous_4) -DA:1,1 -DA:2,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:9,1 -DA:10,1 -DA:12,1 -DA:13,267 -DA:16,1 -DA:17,28 -DA:20,1 -DA:21,35 -DA:24,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:28,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,28 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:2 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:0,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,0 -DA:36,1 -LF:12 -LH:11 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:38,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,38 -DA:34,38 -DA:35,38 -DA:38,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js -FN:33,(anonymous_1) -FN:51,(anonymous_2) -FN:52,(anonymous_3) -FN:54,(anonymous_4) -FN:66,(anonymous_5) -FN:76,(anonymous_6) -FN:86,(anonymous_7) -FN:97,(anonymous_8) -FN:103,(anonymous_9) -FN:105,(anonymous_10) -FN:118,(anonymous_11) -FN:120,(anonymous_12) -FN:127,(anonymous_13) -FN:149,(anonymous_14) -FN:158,(anonymous_15) -FN:179,(anonymous_16) -FN:189,(anonymous_17) -FN:208,(anonymous_18) -FN:233,(anonymous_19) -FN:260,(anonymous_20) -FN:268,(anonymous_21) -FN:289,(anonymous_22) -FNF:22 -FNH:20 -FNDA:61,(anonymous_1) -FNDA:16,(anonymous_2) -FNDA:50,(anonymous_3) -FNDA:25,(anonymous_4) -FNDA:30,(anonymous_5) -FNDA:22,(anonymous_6) -FNDA:2,(anonymous_7) -FNDA:12,(anonymous_8) -FNDA:24,(anonymous_9) -FNDA:4,(anonymous_10) -FNDA:21,(anonymous_11) -FNDA:16,(anonymous_12) -FNDA:2,(anonymous_13) -FNDA:8,(anonymous_14) -FNDA:1,(anonymous_15) -FNDA:12,(anonymous_16) -FNDA:25,(anonymous_17) -FNDA:3,(anonymous_18) -FNDA:3,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:48,(anonymous_22) -DA:24,1 -DA:25,1 -DA:26,1 -DA:27,1 -DA:28,1 -DA:33,1 -DA:34,61 -DA:35,61 -DA:36,61 -DA:37,61 -DA:38,61 -DA:39,61 -DA:40,61 -DA:51,1 -DA:52,16 -DA:53,50 -DA:55,25 -DA:66,1 -DA:67,30 -DA:76,1 -DA:77,22 -DA:86,1 -DA:87,2 -DA:97,1 -DA:98,12 -DA:99,12 -DA:100,12 -DA:103,12 -DA:104,24 -DA:106,4 -DA:109,12 -DA:112,12 -DA:114,11 -DA:115,9 -DA:118,11 -DA:119,21 -DA:121,16 -DA:122,16 -DA:123,6 -DA:126,10 -DA:127,1 -DA:128,2 -DA:131,9 -DA:134,11 -DA:137,12 -DA:139,12 -DA:149,1 -DA:150,8 -DA:151,8 -DA:152,8 -DA:155,8 -DA:157,1 -DA:158,1 -DA:159,1 -DA:162,1 -DA:163,0 -DA:164,0 -DA:167,1 -DA:168,1 -DA:169,1 -DA:173,7 -DA:174,7 -DA:175,7 -DA:178,8 -DA:179,12 -DA:180,8 -DA:182,8 -DA:183,8 -DA:185,8 -DA:186,8 -DA:187,8 -DA:189,8 -DA:190,25 -DA:191,25 -DA:194,8 -DA:195,8 -DA:197,8 -DA:208,1 -DA:210,3 -DA:211,3 -DA:213,3 -DA:214,1 -DA:218,3 -DA:233,1 -DA:235,3 -DA:236,3 -DA:247,3 -DA:260,1 -DA:262,0 -DA:264,0 -DA:265,0 -DA:269,0 -DA:270,0 -DA:272,0 -DA:277,0 -DA:289,1 -DA:290,48 -DA:293,48 -DA:296,48 -DA:297,26 -DA:302,22 -DA:303,22 -DA:304,22 -DA:306,22 -DA:311,1 -LF:105 -LH:96 -BRDA:37,1,0,35 -BRDA:37,1,1,26 -BRDA:67,2,0,30 -BRDA:67,2,1,22 -BRDA:98,3,0,12 -BRDA:98,3,1,1 -BRDA:99,4,0,12 -BRDA:99,4,1,2 -BRDA:112,5,0,11 -BRDA:112,5,1,1 -BRDA:114,6,0,9 -BRDA:114,6,1,2 -BRDA:122,7,0,6 -BRDA:122,7,1,10 -BRDA:122,8,0,16 -BRDA:122,8,1,11 -BRDA:126,9,0,1 -BRDA:126,9,1,9 -BRDA:151,10,0,8 -BRDA:151,10,1,1 -BRDA:152,11,0,8 -BRDA:152,11,1,2 -BRDA:155,12,0,1 -BRDA:155,12,1,7 -BRDA:162,13,0,0 -BRDA:162,13,1,1 -BRDA:178,14,0,1 -BRDA:178,14,1,7 -BRDA:190,15,0,12 -BRDA:190,15,1,13 -BRDA:210,16,0,3 -BRDA:210,16,1,0 -BRDA:213,17,0,1 -BRDA:213,17,1,2 -BRDA:264,18,0,0 -BRDA:264,18,1,0 -BRDA:269,19,0,0 -BRDA:269,19,1,0 -BRDA:296,20,0,26 -BRDA:296,20,1,22 -BRDA:303,21,0,22 -BRDA:303,21,1,0 -BRF:42 -BRH:35 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js -FN:26,(anonymous_1) -FNF:1 -FNH:1 -FNDA:42,(anonymous_1) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,42 -DA:28,2 -DA:29,2 -DA:31,2 -DA:34,42 -LF:8 -LH:8 -BRDA:27,1,0,2 -BRDA:27,1,1,40 -BRDA:27,2,0,42 -BRDA:27,2,1,2 -BRDA:28,3,0,2 -BRDA:28,3,1,0 -BRDA:28,4,0,2 -BRDA:28,4,1,2 -BRF:8 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js -FN:31,(anonymous_1) -FN:33,(anonymous_2) -FN:36,(anonymous_3) -FN:44,(anonymous_4) -FN:50,(anonymous_5) -FN:63,(anonymous_6) -FN:79,(anonymous_7) -FN:84,(anonymous_8) -FN:104,(anonymous_9) -FN:105,(anonymous_10) -FN:117,(anonymous_11) -FN:127,(anonymous_12) -FN:128,(anonymous_13) -FN:144,(anonymous_14) -FN:162,(anonymous_15) -FN:175,(anonymous_16) -FN:185,(anonymous_17) -FN:195,(anonymous_18) -FN:214,(anonymous_19) -FN:232,(anonymous_20) -FNF:20 -FNH:19 -FNDA:68,(anonymous_1) -FNDA:94,(anonymous_2) -FNDA:42,(anonymous_3) -FNDA:16,(anonymous_4) -FNDA:8,(anonymous_5) -FNDA:16,(anonymous_6) -FNDA:16,(anonymous_7) -FNDA:9,(anonymous_8) -FNDA:8,(anonymous_9) -FNDA:14,(anonymous_10) -FNDA:1,(anonymous_11) -FNDA:5,(anonymous_12) -FNDA:16,(anonymous_13) -FNDA:1,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:68,(anonymous_16) -FNDA:68,(anonymous_17) -FNDA:2,(anonymous_18) -FNDA:9,(anonymous_19) -FNDA:68,(anonymous_20) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:31,1 -DA:32,68 -DA:33,68 -DA:34,94 -DA:36,68 -DA:37,42 -DA:39,68 -DA:40,68 -DA:41,68 -DA:44,1 -DA:45,16 -DA:46,4 -DA:50,1 -DA:51,8 -DA:52,2 -DA:63,1 -DA:64,16 -DA:65,16 -DA:66,9 -DA:68,16 -DA:69,16 -DA:70,16 -DA:79,1 -DA:80,16 -DA:84,1 -DA:85,9 -DA:86,0 -DA:89,9 -DA:90,9 -DA:91,9 -DA:104,1 -DA:105,14 -DA:106,8 -DA:107,8 -DA:108,8 -DA:111,8 -DA:112,7 -DA:113,7 -DA:116,1 -DA:117,1 -DA:118,1 -DA:127,1 -DA:128,16 -DA:129,5 -DA:130,5 -DA:132,5 -DA:133,4 -DA:136,1 -DA:144,1 -DA:145,1 -DA:146,1 -DA:147,1 -DA:149,1 -DA:150,1 -DA:153,0 -DA:162,1 -DA:163,0 -DA:164,0 -DA:166,0 -DA:175,1 -DA:176,68 -DA:185,1 -DA:186,68 -DA:195,1 -DA:196,2 -DA:197,2 -DA:198,2 -DA:199,2 -DA:201,2 -DA:214,1 -DA:215,9 -DA:218,9 -DA:219,3 -DA:223,6 -DA:232,1 -DA:233,68 -DA:234,68 -DA:235,68 -DA:236,68 -DA:237,68 -DA:238,68 -DA:239,68 -DA:240,68 -DA:241,67 -DA:243,68 -DA:246,1 -LF:90 -LH:85 -BRDA:45,1,0,4 -BRDA:45,1,1,12 -BRDA:51,2,0,2 -BRDA:51,2,1,6 -BRDA:51,3,0,8 -BRDA:51,3,1,4 -BRDA:65,4,0,9 -BRDA:65,4,1,7 -BRDA:65,5,0,16 -BRDA:65,5,1,9 -BRDA:85,6,0,0 -BRDA:85,6,1,9 -BRDA:89,7,0,9 -BRDA:89,7,1,0 -BRDA:91,8,0,9 -BRDA:91,8,1,0 -BRDA:111,9,0,7 -BRDA:111,9,1,1 -BRDA:132,10,0,4 -BRDA:132,10,1,1 -BRDA:149,11,0,1 -BRDA:149,11,1,0 -BRDA:202,12,0,2 -BRDA:202,12,1,0 -BRDA:218,13,0,3 -BRDA:218,13,1,6 -BRDA:240,14,0,67 -BRDA:240,14,1,1 -BRF:28 -BRH:23 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js -FNF:0 -FNH:0 -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,1 -DA:29,1 -LF:5 -LH:5 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js -FN:35,(anonymous_1) -FN:50,(anonymous_2) -FN:65,(anonymous_3) -FN:83,(anonymous_4) -FNF:4 -FNH:2 -FNDA:1,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:1,(anonymous_4) -DA:23,1 -DA:24,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:38,0 -DA:41,1 -DA:42,0 -DA:45,1 -DA:46,1 -DA:47,1 -DA:50,0 -DA:51,0 -DA:65,1 -DA:66,0 -DA:83,1 -DA:84,1 -DA:85,1 -DA:91,1 -LF:19 -LH:14 -BRDA:37,1,0,0 -BRDA:37,1,1,1 -BRDA:41,2,0,0 -BRDA:41,2,1,1 -BRDA:45,3,0,1 -BRDA:45,3,1,0 -BRF:6 -BRH:3 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js -FN:25,(anonymous_1) -FN:30,(anonymous_2) -FN:36,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:616,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:25,1 -DA:26,154 -DA:28,154 -DA:30,154 -DA:31,616 -DA:32,616 -DA:36,1 -DA:37,154 -DA:43,154 -DA:49,154 -DA:55,154 -DA:61,154 -DA:66,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js -FN:28,(anonymous_1) -FN:33,(anonymous_2) -FN:40,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:924,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:24,1 -DA:25,1 -DA:28,1 -DA:29,154 -DA:31,154 -DA:33,154 -DA:34,924 -DA:35,924 -DA:40,1 -DA:42,154 -DA:49,154 -DA:55,154 -DA:61,154 -DA:67,154 -DA:73,154 -DA:82,154 -DA:95,154 -DA:105,1 -LF:19 -LH:19 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js -FN:26,(anonymous_1) -FN:31,(anonymous_2) -FN:38,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:308,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,154 -DA:29,154 -DA:31,154 -DA:32,308 -DA:33,308 -DA:38,1 -DA:39,154 -DA:52,1 -LF:11 -LH:11 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js -FN:3,(anonymous_1) -FNF:1 -FNH:1 -FNDA:167,(anonymous_1) -DA:3,1 -DA:4,167 -DA:5,167 -DA:8,1 -LF:4 -LH:4 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js -FN:8,(anonymous_1) -FN:10,(anonymous_2) -FN:23,(anonymous_3) -FN:30,(anonymous_4) -FNF:4 -FNH:4 -FNDA:154,(anonymous_1) -FNDA:157,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:618,(anonymous_4) -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:8,1 -DA:10,154 -DA:12,157 -DA:13,157 -DA:14,1 -DA:15,1 -DA:17,1 -DA:19,156 -DA:22,157 -DA:23,2 -DA:24,2 -DA:25,2 -DA:29,157 -DA:30,156 -DA:31,618 -DA:32,618 -DA:37,154 -DA:38,154 -DA:39,154 -DA:40,154 -DA:42,154 -DA:47,1 -LF:26 -LH:26 -BRDA:13,1,0,1 -BRDA:13,1,1,156 -BRDA:14,2,0,1 -BRDA:14,2,1,0 -BRDA:22,3,0,2 -BRDA:22,3,1,155 -BRDA:29,4,0,156 -BRDA:29,4,1,1 -BRF:8 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js -FN:26,(anonymous_1) -FN:37,(anonymous_2) -FN:46,(anonymous_3) -FN:48,(anonymous_4) -FN:50,(anonymous_5) -FN:52,(anonymous_6) -FNF:6 -FNH:6 -FNDA:4,(anonymous_1) -FNDA:8,(anonymous_2) -FNDA:4,(anonymous_3) -FNDA:4,(anonymous_4) -FNDA:8,(anonymous_5) -FNDA:8,(anonymous_6) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,4 -DA:28,4 -DA:37,1 -DA:38,8 -DA:46,1 -DA:47,4 -DA:48,4 -DA:49,4 -DA:50,4 -DA:51,8 -DA:53,8 -DA:55,8 -DA:56,2 -DA:59,6 -DA:65,1 -LF:18 -LH:18 -BRDA:49,1,0,4 -BRDA:49,1,1,0 -BRDA:51,2,0,8 -BRDA:51,2,1,0 -BRDA:53,3,0,8 -BRDA:53,3,1,0 -BRDA:55,4,0,2 -BRDA:55,4,1,6 -BRDA:59,5,0,6 -BRDA:59,5,1,0 -BRF:10 -BRH:6 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js -FN:48,(anonymous_1) -FN:59,(anonymous_2) -FN:73,(anonymous_3) -FN:100,(anonymous_4) -FN:103,(anonymous_5) -FN:131,(anonymous_6) -FNF:6 -FNH:6 -FNDA:3,(anonymous_1) -FNDA:3,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:1,(anonymous_5) -FNDA:1,(anonymous_6) -DA:27,2 -DA:30,2 -DA:33,2 -DA:34,0 -DA:37,2 -DA:38,0 -DA:42,2 -DA:48,2 -DA:49,3 -DA:59,2 -DA:60,3 -DA:61,3 -DA:62,3 -DA:63,3 -DA:73,2 -DA:74,2 -DA:76,2 -DA:77,2 -DA:79,0 -DA:82,2 -DA:84,2 -DA:85,2 -DA:87,0 -DA:90,2 -DA:100,2 -DA:101,1 -DA:103,1 -DA:104,1 -DA:105,1 -DA:106,1 -DA:108,1 -DA:109,1 -DA:111,0 -DA:114,1 -DA:118,1 -DA:119,1 -DA:121,0 -DA:131,2 -DA:132,1 -DA:133,1 -DA:139,1 -DA:141,0 -DA:145,2 -LF:43 -LH:36 -BRDA:33,1,0,0 -BRDA:33,1,1,2 -BRDA:33,2,0,2 -BRDA:33,2,1,0 -BRDA:37,3,0,0 -BRDA:37,3,1,2 -BRDA:37,4,0,2 -BRDA:37,4,1,0 -BRDA:49,5,0,3 -BRDA:49,5,1,3 -BRDA:104,6,0,1 -BRDA:104,6,1,0 -BRF:12 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js -FN:29,(anonymous_1) -FN:41,(anonymous_2) -FN:44,(anonymous_3) -FN:50,(anonymous_4) -FN:60,(anonymous_5) -FN:79,(anonymous_6) -FN:82,(anonymous_7) -FN:86,(anonymous_8) -FN:90,(anonymous_9) -FN:101,(anonymous_10) -FN:113,(anonymous_11) -FN:130,(anonymous_12) -FN:156,(anonymous_13) -FN:169,(anonymous_14) -FN:184,(anonymous_15) -FN:194,(anonymous_16) -FN:218,(anonymous_17) -FN:235,(anonymous_18) -FN:258,(anonymous_19) -FN:263,(anonymous_20) -FN:281,(anonymous_21) -FN:298,(anonymous_22) -FNF:22 -FNH:10 -FNDA:5,(anonymous_1) -FNDA:2,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:5,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:2,(anonymous_10) -FNDA:2,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:1,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:3,(anonymous_15) -FNDA:1,(anonymous_16) -FNDA:1,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -DA:25,2 -DA:26,2 -DA:29,2 -DA:30,5 -DA:31,5 -DA:32,5 -DA:33,5 -DA:35,5 -DA:37,5 -DA:41,5 -DA:44,2 -DA:46,2 -DA:49,2 -DA:50,0 -DA:51,0 -DA:52,0 -DA:55,2 -DA:59,2 -DA:60,0 -DA:61,0 -DA:62,0 -DA:66,2 -DA:67,1 -DA:68,1 -DA:79,2 -DA:80,5 -DA:82,5 -DA:83,0 -DA:86,5 -DA:87,0 -DA:90,5 -DA:91,0 -DA:101,2 -DA:102,2 -DA:106,2 -DA:113,2 -DA:116,2 -DA:117,0 -DA:119,2 -DA:121,2 -DA:122,2 -DA:126,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:135,0 -DA:139,2 -DA:140,2 -DA:142,2 -DA:143,2 -DA:146,2 -DA:156,2 -DA:157,1 -DA:158,1 -DA:160,1 -DA:161,1 -DA:169,2 -DA:170,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:184,2 -DA:185,3 -DA:188,3 -DA:189,2 -DA:191,3 -DA:194,2 -DA:196,1 -DA:197,1 -DA:200,1 -DA:201,1 -DA:203,1 -DA:205,1 -DA:206,1 -DA:208,0 -DA:211,1 -DA:214,0 -DA:218,2 -DA:220,1 -DA:221,1 -DA:224,1 -DA:225,1 -DA:235,2 -DA:237,0 -DA:238,0 -DA:240,0 -DA:242,0 -DA:243,0 -DA:246,0 -DA:247,0 -DA:258,2 -DA:259,0 -DA:261,0 -DA:263,0 -DA:264,0 -DA:265,0 -DA:267,0 -DA:270,0 -DA:271,0 -DA:281,2 -DA:282,0 -DA:284,0 -DA:285,0 -DA:288,0 -DA:289,0 -DA:298,2 -DA:299,0 -DA:300,0 -DA:302,0 -DA:303,0 -DA:305,0 -DA:308,2 -LF:113 -LH:66 -BRDA:49,1,0,0 -BRDA:49,1,1,2 -BRDA:51,2,0,0 -BRDA:51,2,1,0 -BRDA:59,3,0,0 -BRDA:59,3,1,2 -BRDA:59,4,0,2 -BRDA:59,4,1,0 -BRDA:61,5,0,0 -BRDA:61,5,1,0 -BRDA:66,6,0,1 -BRDA:66,6,1,1 -BRDA:116,7,0,0 -BRDA:116,7,1,2 -BRDA:142,8,0,2 -BRDA:142,8,1,0 -BRDA:157,9,0,1 -BRDA:157,9,1,0 -BRDA:158,10,0,1 -BRDA:158,10,1,0 -BRDA:171,11,0,0 -BRDA:171,11,1,0 -BRDA:188,12,0,2 -BRDA:188,12,1,1 -BRDA:196,13,0,1 -BRDA:196,13,1,0 -BRDA:200,14,0,1 -BRDA:200,14,1,0 -BRDA:220,15,0,1 -BRDA:220,15,1,0 -BRDA:237,16,0,0 -BRDA:237,16,1,0 -BRDA:240,17,0,0 -BRDA:240,17,1,0 -BRDA:261,18,0,0 -BRDA:261,18,1,0 -BRDA:264,19,0,0 -BRDA:264,19,1,0 -BRDA:282,20,0,0 -BRDA:282,20,1,0 -BRF:40 -BRH:14 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js -FN:2,(anonymous_1) -FN:23,ucs2decode -FN:50,ucs2encode -FN:67,checkScalarValue -FN:77,createByte -FN:81,encodeCodePoint -FN:103,utf8encode -FN:118,readContinuationByte -FN:134,decodeSymbol -FN:200,utf8decode -FN:227,(anonymous_11) -FNF:11 -FNH:1 -FNDA:1,(anonymous_1) -FNDA:0,ucs2decode -FNDA:0,ucs2encode -FNDA:0,checkScalarValue -FNDA:0,createByte -FNDA:0,encodeCodePoint -FNDA:0,utf8encode -FNDA:0,readContinuationByte -FNDA:0,decodeSymbol -FNDA:0,utf8decode -FNDA:0,(anonymous_11) -DA:2,1 -DA:5,1 -DA:8,1 -DA:13,1 -DA:14,1 -DA:15,0 -DA:20,1 -DA:23,1 -DA:24,0 -DA:25,0 -DA:26,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:39,0 -DA:40,0 -DA:43,0 -DA:46,0 -DA:50,1 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:62,0 -DA:64,0 -DA:67,1 -DA:68,0 -DA:69,0 -DA:77,1 -DA:78,0 -DA:81,1 -DA:82,0 -DA:83,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:97,0 -DA:99,0 -DA:100,0 -DA:103,1 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:113,0 -DA:118,1 -DA:119,0 -DA:120,0 -DA:123,0 -DA:124,0 -DA:126,0 -DA:127,0 -DA:131,0 -DA:134,1 -DA:135,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:141,0 -DA:142,0 -DA:145,0 -DA:146,0 -DA:150,0 -DA:151,0 -DA:154,0 -DA:155,0 -DA:159,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:163,0 -DA:165,0 -DA:170,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:178,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:187,0 -DA:189,0 -DA:190,0 -DA:194,0 -DA:197,1 -DA:198,1 -DA:199,1 -DA:200,1 -DA:201,0 -DA:202,0 -DA:203,0 -DA:204,0 -DA:205,0 -DA:206,0 -DA:207,0 -DA:209,0 -DA:214,1 -DA:222,1 -DA:227,0 -DA:228,0 -DA:230,1 -DA:231,1 -DA:232,1 -DA:234,0 -DA:235,0 -DA:236,0 -DA:237,0 -DA:241,0 -LF:135 -LH:23 -BRDA:5,1,0,1 -BRDA:5,1,1,1 -BRDA:8,2,0,1 -BRDA:8,2,1,1 -BRDA:8,2,2,1 -BRDA:8,2,3,1 -BRDA:13,3,0,1 -BRDA:13,3,1,1 -BRDA:14,4,0,0 -BRDA:14,4,1,1 -BRDA:14,5,0,1 -BRDA:14,5,1,1 -BRDA:31,6,0,0 -BRDA:31,6,1,0 -BRDA:31,7,0,0 -BRDA:31,7,1,0 -BRDA:31,7,2,0 -BRDA:34,8,0,0 -BRDA:34,8,1,0 -BRDA:57,9,0,0 -BRDA:57,9,1,0 -BRDA:68,10,0,0 -BRDA:68,10,1,0 -BRDA:68,11,0,0 -BRDA:68,11,1,0 -BRDA:82,12,0,0 -BRDA:82,12,1,0 -BRDA:86,13,0,0 -BRDA:86,13,1,0 -BRDA:89,14,0,0 -BRDA:89,14,1,0 -BRDA:94,15,0,0 -BRDA:94,15,1,0 -BRDA:119,16,0,0 -BRDA:119,16,1,0 -BRDA:126,17,0,0 -BRDA:126,17,1,0 -BRDA:141,18,0,0 -BRDA:141,18,1,0 -BRDA:145,19,0,0 -BRDA:145,19,1,0 -BRDA:154,20,0,0 -BRDA:154,20,1,0 -BRDA:159,21,0,0 -BRDA:159,21,1,0 -BRDA:162,22,0,0 -BRDA:162,22,1,0 -BRDA:170,23,0,0 -BRDA:170,23,1,0 -BRDA:174,24,0,0 -BRDA:174,24,1,0 -BRDA:183,25,0,0 -BRDA:183,25,1,0 -BRDA:189,26,0,0 -BRDA:189,26,1,0 -BRDA:189,27,0,0 -BRDA:189,27,1,0 -BRDA:222,28,0,0 -BRDA:222,28,1,1 -BRDA:223,29,0,1 -BRDA:223,29,1,0 -BRDA:223,29,2,0 -BRDA:230,30,0,1 -BRDA:230,30,1,0 -BRDA:230,31,0,1 -BRDA:230,31,1,1 -BRDA:231,32,0,1 -BRDA:231,32,1,0 -BRDA:237,33,0,0 -BRDA:237,33,1,0 -BRF:70 -BRH:17 -end_of_record diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3-light.js b/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3-light.js deleted file mode 100644 index ac14cb8..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3-light.js +++ /dev/null @@ -1,13260 +0,0 @@ -require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o. -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - - -},{"./address":4,"./bool":5,"./bytes":6,"./dynamicbytes":8,"./formatters":9,"./int":10,"./real":12,"./string":13,"./uint":15,"./ureal":16}],8:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - - -},{"./formatters":9,"./type":14}],9:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - - -},{"../utils/config":18,"../utils/utils":20,"./param":11,"bignumber.js":"bignumber.js"}],10:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; - -},{"./formatters":9,"./type":14}],11:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - - -},{"../utils/utils":20}],12:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; - -},{"./formatters":9,"./type":14}],13:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - - -},{"./formatters":9,"./type":14}],14:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; - -},{"./formatters":9,"./param":11}],15:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; - -},{"./formatters":9,"./type":14}],16:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; - -},{"./formatters":9,"./type":14}],17:[function(require,module,exports){ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - - -},{}],18:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - - -},{"bignumber.js":"bignumber.js"}],19:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - - -},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; - -},{"./sha3.js":19,"bignumber.js":"bignumber.js","utf8":84}],21:[function(require,module,exports){ -module.exports={ - "version": "0.16.0" -} - -},{}],22:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; - - -Web3.prototype.sha3 = function(string, options) { - return '0x' + sha3(string, options); -}; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - - -},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46}],23:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - - -},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - - -},{"./errors":26,"./jsonrpc":35}],25:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; - -},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - - -},{}],27:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(require,module,exports){ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - - -},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.filterId); - // remove filter async - this.implementation.uninstallFilter(this.filterId, function(){}); - this.callbacks = []; -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - - -},{"../utils/utils":20,"./formatters":30}],30:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw new Error('invalid address'); -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - - -},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// meteor server environment -if (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line - XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line - -// browser -} else if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - - -},{"./errors":26,"xmlhttprequest":17}],33:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '00' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - - -},{"bignumber.js":"bignumber.js"}],34:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - - -},{"../utils/utils":20,"./errors":26}],35:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = function () { - // singleton pattern - if (arguments.callee._singletonInstance) { - return arguments.callee._singletonInstance; - } - arguments.callee._singletonInstance = this; - - this.messageId = 1; -}; - -/** - * @return {Jsonrpc} singleton - */ -Jsonrpc.getInstance = function () { - var instance = new Jsonrpc(); - return instance; -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.prototype.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - return { - jsonrpc: '2.0', - method: method, - params: params || [], - id: this.messageId++ - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.prototype.isValidResponse = function (response) { - return !!response && - !response.error && - response.jsonrpc === '2.0' && - typeof response.id === 'number' && - response.result !== undefined; // only undefined is not valid json object -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.prototype.toBatchPayload = function (messages) { - var self = this; - return messages.map(function (message) { - return self.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - - -},{}],36:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - - -},{"../utils/utils":20,"./errors":26}],37:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; - -},{"../method":36}],38:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - - -},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; - -},{"../../utils/utils":20,"../property":44}],40:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); -var formatters = require('../formatters'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [formatters.inputAddressFormatter, null, null] - }); - - var lockAccount = new Method({ - name: 'lockAccount', - call: 'personal_lockAccount', - params: 1, - inputFormatter: [formatters.inputAddressFormatter] - }); - - return [ - newAccount, - unlockAccount, - lockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; - -},{"../formatters":30,"../method":36,"../property":44}],41:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - - -},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - - -},{"../method":36}],43:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - - -},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - - -},{"../utils/utils":20}],45:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.getInstance().toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.getInstance().isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - - -},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(require,module,exports){ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - - -},{}],47:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - - -},{"../utils/utils":20,"./formatters":30}],48:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - - -},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(require,module,exports){ - -},{}],50:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); -},{"./core":52}],52:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); -},{}],53:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); -},{"./core":52}],54:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); -},{"./core":52}],55:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); -},{"./cipher-core":51,"./core":52}],57:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); -},{"./core":52}],58:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); -},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); -},{"./core":52}],60:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); -},{"./core":52}],61:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); -},{"./cipher-core":51,"./core":52}],62:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); -},{"./cipher-core":51,"./core":52}],63:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); -},{"./cipher-core":51,"./core":52}],64:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); -},{"./cipher-core":51,"./core":52}],65:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); -},{"./cipher-core":51,"./core":52}],66:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); -},{"./cipher-core":51,"./core":52}],67:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); -},{"./cipher-core":51,"./core":52}],68:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); -},{"./cipher-core":51,"./core":52}],69:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); -},{"./cipher-core":51,"./core":52}],70:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); -},{"./cipher-core":51,"./core":52}],71:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); -},{"./core":52}],76:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); -},{"./core":52}],77:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); -},{"./core":52,"./sha256":78}],78:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); -},{"./core":52}],79:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); -},{"./core":52,"./x64-core":83}],80:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); -},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); -},{"./core":52,"./x64-core":83}],82:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); -},{"./core":52}],84:[function(require,module,exports){ -/*! https://mths.be/utf8js v2.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - var byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.0.0', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); - -},{}],"bignumber.js":[function(require,module,exports){ -'use strict'; - -module.exports = BigNumber; // jshint ignore:line - - -},{}],"web3":[function(require,module,exports){ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; - -},{"./lib/web3":22}]},{},["web3"]) -//# sourceMappingURL=web3-light.js.map diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3-light.min.js b/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3-light.min.js deleted file mode 100644 index 1465d79..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3-light.min.js +++ /dev/null @@ -1,4 +0,0 @@ -require=function t(e,r,n){function o(a,s){if(!r[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=r[a]={exports:{}};e[a][0].call(f.exports,function(t){var r=e[a][1][t];return o(r?r:t)},f,f.exports,t,e,r,n)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;aa;a++)i.push(r.encode(t[a],o));return i}():this._inputFormatter(t,e).encode()},i.prototype.decode=function(t,e,r){var n=this;if(this.isDynamicArray(r))return function(){for(var o=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*o,64)),a=o+32,s=n.nestedName(r),c=n.staticPartLength(s),u=32*Math.floor((c+31)/32),f=[],p=0;i*u>p;p+=u)f.push(n.decode(t,a+p,s));return f}();if(this.isStaticArray(r))return function(){for(var o=n.staticArrayLength(r),i=e,a=n.nestedName(r),s=n.staticPartLength(a),c=32*Math.floor((s+31)/32),u=[],f=0;o*c>f;f+=c)u.push(n.decode(t,i+f,a));return u}();if(this.isDynamicType(r))return function(){var r=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*r,64)),a=Math.floor((i+31)/32);return n._outputFormatter(new o(t.substr(2*r,64*(1+a)),0))}();var i=this.staticPartLength(r);return this._outputFormatter(new o(t.substr(2*e,2*i)))},e.exports=i},{"./formatters":9,"./param":11}],15:[function(t,e,r){var n=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=n.formatInputInt,this._outputFormatter=n.formatOutputUInt};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],16:[function(t,e,r){var n=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=n.formatInputReal,this._outputFormatter=n.formatOutputUReal};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],17:[function(t,e,r){"use strict";"undefined"==typeof XMLHttpRequest?r.XMLHttpRequest={}:r.XMLHttpRequest=XMLHttpRequest},{}],18:[function(t,e,r){var n=t("bignumber.js"),o=["wei","kwei","Mwei","Gwei","szabo","finney","femtoether","picoether","nanoether","microether","milliether","nano","micro","milli","ether","grand","Mether","Gether","Tether","Pether","Eether","Zether","Yether","Nether","Dether","Vether","Uether"];e.exports={ETH_PADDING:32,ETH_SIGNATURE_LENGTH:4,ETH_UNITS:o,ETH_BIGNUMBER_ROUNDING_MODE:{ROUNDING_MODE:n.ROUND_DOWN},ETH_POLLING_TIMEOUT:500,defaultBlock:"latest",defaultAccount:void 0}},{"bignumber.js":"bignumber.js"}],19:[function(t,e,r){var n=t("crypto-js"),o=t("crypto-js/sha3");e.exports=function(t,e){return e&&"hex"===e.encoding&&(t.length>2&&"0x"===t.substr(0,2)&&(t=t.substr(2)),t=n.enc.Hex.parse(t)),o(t,{outputLength:256}).toString()}},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(t,e,r){var n=t("bignumber.js"),o=t("./sha3.js"),i=t("utf8"),a={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"},s=function(t,e,r){return new Array(e-t.length+1).join(r?r:"0")+t},c=function(t,e,r){return t+new Array(e-t.length+1).join(r?r:"0")},u=function(t){var e="",r=0,n=t.length;for("0x"===t.substring(0,2)&&(r=2);n>r;r+=2){var o=parseInt(t.substr(r,2),16);if(0===o)break;e+=String.fromCharCode(o)}return i.decode(e)},f=function(t){var e="",r=0,n=t.length;for("0x"===t.substring(0,2)&&(r=2);n>r;r+=2){var o=parseInt(t.substr(r,2),16);e+=String.fromCharCode(o)}return e},p=function(t){t=i.encode(t);for(var e="",r=0;rr;r++)if(parseInt(e[r],16)>7&&t[r].toUpperCase()!==t[r]||parseInt(e[r],16)<=7&&t[r].toLowerCase()!==t[r])return!1;return!0},A=function(t){if("undefined"==typeof t)return"";t=t.toLowerCase().replace("0x","");for(var e=o(t),r="0x",n=0;n7?t[n].toUpperCase():t[n];return r},F=function(t){return B(t)?t:/^[0-9a-f]{40}$/.test(t)?"0x"+t:"0x"+s(v(t).substr(2),40)},I=function(t){return t instanceof n||t&&t.constructor&&"BigNumber"===t.constructor.name},P=function(t){return"string"==typeof t||t&&t.constructor&&"String"===t.constructor.name},D=function(t){return"function"==typeof t},T=function(t){return"object"==typeof t},O=function(t){return"boolean"==typeof t},E=function(t){return t instanceof Array},M=function(t){try{return!!JSON.parse(t)}catch(e){return!1}};e.exports={padLeft:s,padRight:c,toHex:v,toDecimal:y,fromDecimal:g,toUtf8:u,toAscii:f,fromUtf8:p,fromAscii:h,transformToFullName:l,extractDisplayName:d,extractTypeName:m,toWei:w,fromWei:_,toBigNumber:x,toTwosComplement:k,toAddress:F,isBigNumber:I,isStrictAddress:B,isAddress:S,isChecksumAddress:C,toChecksumAddress:A,isFunction:D,isString:P,isObject:T,isBoolean:O,isArray:E,isJson:M}},{"./sha3.js":19,"bignumber.js":"bignumber.js",utf8:84}],21:[function(t,e,r){e.exports={version:"0.16.0"}},{}],22:[function(t,e,r){function n(t){this._requestManager=new o(t),this.currentProvider=t,this.eth=new a(this),this.db=new s(this),this.shh=new c(this),this.net=new u(this),this.personal=new f(this),this.settings=new p,this.version={api:h.version},this.providers={HttpProvider:v,IpcProvider:b},this._extend=m(this),this._extend({properties:_()})}var o=t("./web3/requestmanager"),i=t("./web3/iban"),a=t("./web3/methods/eth"),s=t("./web3/methods/db"),c=t("./web3/methods/shh"),u=t("./web3/methods/net"),f=t("./web3/methods/personal"),p=t("./web3/settings"),h=t("./version.json"),l=t("./utils/utils"),d=t("./utils/sha3"),m=t("./web3/extend"),y=t("./web3/batch"),g=t("./web3/property"),v=t("./web3/httpprovider"),b=t("./web3/ipcprovider");n.providers={HttpProvider:v,IpcProvider:b},n.prototype.setProvider=function(t){this._requestManager.setProvider(t),this.currentProvider=t},n.prototype.reset=function(t){this._requestManager.reset(t),this.settings=new p},n.prototype.toHex=l.toHex,n.prototype.toAscii=l.toAscii,n.prototype.toUtf8=l.toUtf8,n.prototype.fromAscii=l.fromAscii,n.prototype.fromUtf8=l.fromUtf8,n.prototype.toDecimal=l.toDecimal,n.prototype.fromDecimal=l.fromDecimal,n.prototype.toBigNumber=l.toBigNumber,n.prototype.toWei=l.toWei,n.prototype.fromWei=l.fromWei,n.prototype.isAddress=l.isAddress,n.prototype.isChecksumAddress=l.isChecksumAddress,n.prototype.toChecksumAddress=l.toChecksumAddress,n.prototype.isIBAN=l.isIBAN,n.prototype.sha3=function(t,e){return"0x"+d(t,e)},n.prototype.fromICAP=function(t){var e=new i(t);return e.address()};var _=function(){return[new g({name:"version.node",getter:"web3_clientVersion"}),new g({name:"version.network",getter:"net_version",inputFormatter:l.toDecimal}),new g({name:"version.ethereum",getter:"eth_protocolVersion",inputFormatter:l.toDecimal}),new g({name:"version.whisper",getter:"shh_version",inputFormatter:l.toDecimal})]};n.prototype.isConnected=function(){return this.currentProvider&&this.currentProvider.isConnected()},n.prototype.createBatch=function(){return new y(this)},e.exports=n},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46}],23:[function(t,e,r){var n=t("../utils/sha3"),o=t("./event"),i=t("./formatters"),a=t("../utils/utils"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,r){this._requestManager=t,this._json=e,this._address=r};u.prototype.encode=function(t){t=t||{};var e={};return["fromBlock","toBlock"].filter(function(e){return void 0!==t[e]}).forEach(function(r){e[r]=i.inputBlockNumberFormatter(t[r])}),e.address=this._address,e},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=t.topics[0].slice(2),r=this._json.filter(function(t){return e===n(a.transformToFullName(t))})[0];if(!r)return console.warn("cannot find event for log"),t;var i=new o(this._requestManager,r,this._address);return i.decode(t)},u.prototype.execute=function(t,e){a.isFunction(arguments[arguments.length-1])&&(e=arguments[arguments.length-1],1===arguments.length&&(t=null));var r=this.encode(t),n=this.decode.bind(this);return new s(this._requestManager,r,c.eth(),n,e)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this);t.allEvents=e},e.exports=u},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(t,e,r){var n=t("./jsonrpc"),o=t("./errors"),i=function(t){this.requestManager=t._requestManager,this.requests=[]};i.prototype.add=function(t){this.requests.push(t)},i.prototype.execute=function(){var t=this.requests;this.requestManager.sendBatch(t,function(e,r){r=r||[],t.map(function(t,e){return r[e]||{}}).forEach(function(e,r){if(t[r].callback){if(!n.getInstance().isValidResponse(e))return t[r].callback(o.InvalidResponse(e));t[r].callback(null,t[r].format?t[r].format(e.result):e.result)}})})},e.exports=i},{"./errors":26,"./jsonrpc":35}],25:[function(t,e,r){var n=t("../utils/utils"),o=t("../solidity/coder"),i=t("./event"),a=t("./function"),s=t("./allevents"),c=function(t,e){return t.filter(function(t){return"constructor"===t.type&&t.inputs.length===e.length}).map(function(t){return t.inputs.map(function(t){return t.type})}).map(function(t){return o.encodeParams(t,e)})[0]||""},u=function(t){t.abi.filter(function(t){return"function"===t.type}).map(function(e){return new a(t._eth,e,t.address)}).forEach(function(e){e.attachToContract(t)})},f=function(t){var e=t.abi.filter(function(t){return"event"===t.type}),r=new s(t._eth._requestManager,e,t.address);r.attachToContract(t),e.map(function(e){return new i(t._eth._requestManager,e,t.address)}).forEach(function(e){e.attachToContract(t)})},p=function(t,e){var r=0,n=!1,o=t._eth.filter("latest",function(i){if(!i&&!n)if(r++,r>50){if(o.stopWatching(),n=!0,!e)throw new Error("Contract transaction couldn't be found after 50 blocks");e(new Error("Contract transaction couldn't be found after 50 blocks"))}else t._eth.getTransactionReceipt(t.transactionHash,function(r,i){i&&!n&&t._eth.getCode(i.contractAddress,function(r,a){if(!n&&a)if(o.stopWatching(),n=!0,a.length>2)t.address=i.contractAddress,u(t),f(t),e&&e(null,t);else{if(!e)throw new Error("The contract code couldn't be stored, please check your gas amount.");e(new Error("The contract code couldn't be stored, please check your gas amount."))}})})})},h=function(t,e){this.eth=t,this.abi=e,this["new"]=function(){var t,e=new l(this.eth,this.abi),r={},o=Array.prototype.slice.call(arguments);n.isFunction(o[o.length-1])&&(t=o.pop());var i=o[o.length-1];n.isObject(i)&&!n.isArray(i)&&(r=o.pop());var a=c(this.abi,o);if(r.data+=a,t)this.eth.sendTransaction(r,function(r,n){r?t(r):(e.transactionHash=n,t(null,e),p(e,t))});else{var s=this.eth.sendTransaction(r);e.transactionHash=s,p(e)}return e},this["new"].getData=this.getData.bind(this)};h.prototype.at=function(t,e){var r=new l(this.eth,this.abi,t);return u(r),f(r),e&&e(null,r),r},h.prototype.getData=function(){var t={},e=Array.prototype.slice.call(arguments),r=e[e.length-1];n.isObject(r)&&!n.isArray(r)&&(t=e.pop());var o=c(this.abi,e);return t.data+=o,t.data};var l=function(t,e,r){this._eth=t,this.transactionHash=null,this.address=r,this.abi=e};e.exports=h},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(t,e,r){e.exports={InvalidNumberOfParams:function(){return new Error("Invalid number of input parameters")},InvalidConnection:function(t){return new Error("CONNECTION ERROR: Couldn't connect to node "+t+".")},InvalidProvider:function(){return new Error("Provider not set or invalid")},InvalidResponse:function(t){var e=t&&t.error&&t.error.message?t.error.message:"Invalid JSON RPC response: "+JSON.stringify(t);return new Error(e)}}},{}],27:[function(t,e,r){var n=t("../utils/utils"),o=t("../solidity/coder"),i=t("./formatters"),a=t("../utils/sha3"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,r){this._requestManager=t,this._params=e.inputs,this._name=n.transformToFullName(e),this._address=r,this._anonymous=e.anonymous};u.prototype.types=function(t){return this._params.filter(function(e){return e.indexed===t}).map(function(t){return t.type})},u.prototype.displayName=function(){return n.extractDisplayName(this._name)},u.prototype.typeName=function(){return n.extractTypeName(this._name)},u.prototype.signature=function(){return a(this._name)},u.prototype.encode=function(t,e){t=t||{},e=e||{};var r={};["fromBlock","toBlock"].filter(function(t){return void 0!==e[t]}).forEach(function(t){r[t]=i.inputBlockNumberFormatter(e[t])}),r.topics=[],r.address=this._address,this._anonymous||r.topics.push("0x"+this.signature());var a=this._params.filter(function(t){return t.indexed===!0}).map(function(e){var r=t[e.name];return void 0===r||null===r?null:n.isArray(r)?r.map(function(t){return"0x"+o.encodeParam(e.type,t)}):"0x"+o.encodeParam(e.type,r)});return r.topics=r.topics.concat(a),r},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=this._anonymous?t.topics:t.topics.slice(1),r=e.map(function(t){return t.slice(2)}).join(""),n=o.decodeParams(this.types(!0),r),a=t.data.slice(2),s=o.decodeParams(this.types(!1),a),c=i.outputLogFormatter(t);return c.event=this.displayName(),c.address=t.address,c.args=this._params.reduce(function(t,e){return t[e.name]=e.indexed?n.shift():s.shift(),t},{}),delete c.data,delete c.topics,c},u.prototype.execute=function(t,e,r){n.isFunction(arguments[arguments.length-1])&&(r=arguments[arguments.length-1],2===arguments.length&&(e=null),1===arguments.length&&(e=null,t={}));var o=this.encode(t,e),i=this.decode.bind(this);return new s(this._requestManager,o,c.eth(),i,r)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this),r=this.displayName();t[r]||(t[r]=e),t[r][this.typeName()]=this.execute.bind(this,t)},e.exports=u},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(t,e,r){var n=t("./formatters"),o=t("./../utils/utils"),i=t("./method"),a=t("./property"),s=function(t){var e=function(e){var r;e.property?(t[e.property]||(t[e.property]={}),r=t[e.property]):r=t,e.methods&&e.methods.forEach(function(e){e.attachToObject(r),e.setRequestManager(t._requestManager)}),e.properties&&e.properties.forEach(function(e){e.attachToObject(r),e.setRequestManager(t._requestManager)})};return e.formatters=n,e.utils=o,e.Method=i,e.Property=a,e};e.exports=s},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(t,e,r){var n=t("./formatters"),o=t("../utils/utils"),i=function(t){return null===t||"undefined"==typeof t?null:(t=String(t),0===t.indexOf("0x")?t:o.fromUtf8(t))},a=function(t){return o.isString(t)?t:(t=t||{},t.topics=t.topics||[],t.topics=t.topics.map(function(t){return o.isArray(t)?t.map(i):i(t)}),{topics:t.topics,from:t.from,to:t.to,address:t.address,fromBlock:n.inputBlockNumberFormatter(t.fromBlock),toBlock:n.inputBlockNumberFormatter(t.toBlock)})},s=function(t,e){o.isString(t.options)||t.get(function(t,r){t&&e(t),o.isArray(r)&&r.forEach(function(t){e(null,t)})})},c=function(t){var e=function(e,r){return e?t.callbacks.forEach(function(t){t(e)}):void(o.isArray(r)&&r.forEach(function(e){e=t.formatter?t.formatter(e):e,t.callbacks.forEach(function(t){t(null,e)})}))};t.requestManager.startPolling({method:t.implementation.poll.call,params:[t.filterId]},t.filterId,e,t.stopWatching.bind(t))},u=function(t,e,r,n,o){var i=this,u={};return r.forEach(function(e){e.setRequestManager(t),e.attachToObject(u)}),this.requestManager=t,this.options=a(e),this.implementation=u,this.filterId=null,this.callbacks=[], -this.getLogsCallbacks=[],this.pollFilters=[],this.formatter=n,this.implementation.newFilter(this.options,function(t,e){if(t)i.callbacks.forEach(function(e){e(t)});else if(i.filterId=e,i.getLogsCallbacks.forEach(function(t){i.get(t)}),i.getLogsCallbacks=[],i.callbacks.forEach(function(t){s(i,t)}),i.callbacks.length>0&&c(i),"function"==typeof o)return i.watch(o)}),this};u.prototype.watch=function(t){return this.callbacks.push(t),this.filterId&&(s(this,t),c(this)),this},u.prototype.stopWatching=function(){this.requestManager.stopPolling(this.filterId),this.implementation.uninstallFilter(this.filterId,function(){}),this.callbacks=[]},u.prototype.get=function(t){var e=this;if(!o.isFunction(t)){if(null===this.filterId)throw new Error("Filter ID Error: filter().get() can't be chained synchronous, please provide a callback for the get() method.");var r=this.implementation.getLogs(this.filterId);return r.map(function(t){return e.formatter?e.formatter(t):t})}return null===this.filterId?this.getLogsCallbacks.push(t):this.implementation.getLogs(this.filterId,function(r,n){r?t(r):t(null,n.map(function(t){return e.formatter?e.formatter(t):t}))}),this},e.exports=u},{"../utils/utils":20,"./formatters":30}],30:[function(t,e,r){var n=t("../utils/utils"),o=t("../utils/config"),i=t("./iban"),a=function(t){return n.toBigNumber(t)},s=function(t){return"latest"===t||"pending"===t||"earliest"===t},c=function(t){return void 0===t?o.defaultBlock:u(t)},u=function(t){return void 0===t?void 0:s(t)?t:n.toHex(t)},f=function(t){return t.from=t.from||o.defaultAccount,t.from&&(t.from=v(t.from)),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=n.fromDecimal(t[e])}),t},p=function(t){return t.from=t.from||o.defaultAccount,t.from=v(t.from),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=n.fromDecimal(t[e])}),t},h=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),t.nonce=n.toDecimal(t.nonce),t.gas=n.toDecimal(t.gas),t.gasPrice=n.toBigNumber(t.gasPrice),t.value=n.toBigNumber(t.value),t},l=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),t.cumulativeGasUsed=n.toDecimal(t.cumulativeGasUsed),t.gasUsed=n.toDecimal(t.gasUsed),n.isArray(t.logs)&&(t.logs=t.logs.map(function(t){return m(t)})),t},d=function(t){return t.gasLimit=n.toDecimal(t.gasLimit),t.gasUsed=n.toDecimal(t.gasUsed),t.size=n.toDecimal(t.size),t.timestamp=n.toDecimal(t.timestamp),null!==t.number&&(t.number=n.toDecimal(t.number)),t.difficulty=n.toBigNumber(t.difficulty),t.totalDifficulty=n.toBigNumber(t.totalDifficulty),n.isArray(t.transactions)&&t.transactions.forEach(function(t){return n.isString(t)?void 0:h(t)}),t},m=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),null!==t.logIndex&&(t.logIndex=n.toDecimal(t.logIndex)),t},y=function(t){return t.ttl=n.fromDecimal(t.ttl),t.workToProve=n.fromDecimal(t.workToProve),t.priority=n.fromDecimal(t.priority),n.isArray(t.topics)||(t.topics=t.topics?[t.topics]:[]),t.topics=t.topics.map(function(t){return 0===t.indexOf("0x")?t:n.fromUtf8(t)}),t},g=function(t){return t.expiry=n.toDecimal(t.expiry),t.sent=n.toDecimal(t.sent),t.ttl=n.toDecimal(t.ttl),t.workProved=n.toDecimal(t.workProved),t.topics||(t.topics=[]),t.topics=t.topics.map(function(t){return n.toAscii(t)}),t},v=function(t){var e=new i(t);if(e.isValid()&&e.isDirect())return"0x"+e.address();if(n.isStrictAddress(t))return t;if(n.isAddress(t))return"0x"+t;throw new Error("invalid address")},b=function(t){return t.startingBlock=n.toDecimal(t.startingBlock),t.currentBlock=n.toDecimal(t.currentBlock),t.highestBlock=n.toDecimal(t.highestBlock),t};e.exports={inputDefaultBlockNumberFormatter:c,inputBlockNumberFormatter:u,inputCallFormatter:f,inputTransactionFormatter:p,inputAddressFormatter:v,inputPostFormatter:y,outputBigNumberFormatter:a,outputTransactionFormatter:h,outputTransactionReceiptFormatter:l,outputBlockFormatter:d,outputLogFormatter:m,outputPostFormatter:g,outputSyncingFormatter:b}},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(t,e,r){var n=t("../solidity/coder"),o=t("../utils/utils"),i=t("./formatters"),a=t("../utils/sha3"),s=function(t,e,r){this._eth=t,this._inputTypes=e.inputs.map(function(t){return t.type}),this._outputTypes=e.outputs.map(function(t){return t.type}),this._constant=e.constant,this._name=o.transformToFullName(e),this._address=r};s.prototype.extractCallback=function(t){return o.isFunction(t[t.length-1])?t.pop():void 0},s.prototype.extractDefaultBlock=function(t){return t.length>this._inputTypes.length&&!o.isObject(t[t.length-1])?i.inputDefaultBlockNumberFormatter(t.pop()):void 0},s.prototype.toPayload=function(t){var e={};return t.length>this._inputTypes.length&&o.isObject(t[t.length-1])&&(e=t[t.length-1]),e.to=this._address,e.data="0x"+this.signature()+n.encodeParams(this._inputTypes,t),e},s.prototype.signature=function(){return a(this._name).slice(0,8)},s.prototype.unpackOutput=function(t){if(t){t=t.length>=2?t.slice(2):t;var e=n.decodeParams(this._outputTypes,t);return 1===e.length?e[0]:e}},s.prototype.call=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),r=this.extractDefaultBlock(t),n=this.toPayload(t);if(!e){var o=this._eth.call(n,r);return this.unpackOutput(o)}var i=this;this._eth.call(n,r,function(t,r){e(t,i.unpackOutput(r))})},s.prototype.sendTransaction=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),r=this.toPayload(t);return e?void this._eth.sendTransaction(r,e):this._eth.sendTransaction(r)},s.prototype.estimateGas=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),r=this.toPayload(t);return e?void this._eth.estimateGas(r,e):this._eth.estimateGas(r)},s.prototype.getData=function(){var t=Array.prototype.slice.call(arguments),e=this.toPayload(t);return e.data},s.prototype.displayName=function(){return o.extractDisplayName(this._name)},s.prototype.typeName=function(){return o.extractTypeName(this._name)},s.prototype.request=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),r=this.toPayload(t),n=this.unpackOutput.bind(this);return{method:this._constant?"eth_call":"eth_sendTransaction",callback:e,params:[r],format:n}},s.prototype.execute=function(){var t=!this._constant;return t?this.sendTransaction.apply(this,Array.prototype.slice.call(arguments)):this.call.apply(this,Array.prototype.slice.call(arguments))},s.prototype.attachToContract=function(t){var e=this.execute.bind(this);e.request=this.request.bind(this),e.call=this.call.bind(this),e.sendTransaction=this.sendTransaction.bind(this),e.estimateGas=this.estimateGas.bind(this),e.getData=this.getData.bind(this);var r=this.displayName();t[r]||(t[r]=e),t[r][this.typeName()]=e},e.exports=s},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(t,e,r){"use strict";var n,o=t("./errors");n="undefined"!=typeof Meteor&&Meteor.isServer?Npm.require("xmlhttprequest").XMLHttpRequest:"undefined"!=typeof window&&window.XMLHttpRequest?window.XMLHttpRequest:t("xmlhttprequest").XMLHttpRequest;var i=function(t){this.host=t||"http://localhost:8545"};i.prototype.prepareRequest=function(t){var e=new n;return e.open("POST",this.host,t),e.setRequestHeader("Content-Type","application/json"),e},i.prototype.send=function(t){var e=this.prepareRequest(!1);try{e.send(JSON.stringify(t))}catch(r){throw o.InvalidConnection(this.host)}var n=e.responseText;try{n=JSON.parse(n)}catch(i){throw o.InvalidResponse(e.responseText)}return n},i.prototype.sendAsync=function(t,e){var r=this.prepareRequest(!0);r.onreadystatechange=function(){if(4===r.readyState){var t=r.responseText,n=null;try{t=JSON.parse(t)}catch(i){n=o.InvalidResponse(r.responseText)}e(n,t)}};try{r.send(JSON.stringify(t))}catch(n){e(o.InvalidConnection(this.host))}},i.prototype.isConnected=function(){try{return this.send({id:9999999999,jsonrpc:"2.0",method:"net_listening",params:[]}),!0}catch(t){return!1}},e.exports=i},{"./errors":26,xmlhttprequest:17}],33:[function(t,e,r){var n=t("bignumber.js"),o=function(t,e){for(var r=t;r.length<2*e;)r="00"+r;return r},i=function(t){var e="A".charCodeAt(0),r="Z".charCodeAt(0);return t=t.toUpperCase(),t=t.substr(4)+t.substr(0,4),t.split("").map(function(t){var n=t.charCodeAt(0);return n>=e&&r>=n?n-e+10:t}).join("")},a=function(t){for(var e,r=t;r.length>2;)e=r.slice(0,9),r=parseInt(e,10)%97+r.slice(e.length);return parseInt(r,10)%97},s=function(t){this._iban=t};s.fromAddress=function(t){var e=new n(t,16),r=e.toString(36),i=o(r,15);return s.fromBban(i.toUpperCase())},s.fromBban=function(t){var e="XE",r=a(i(e+"00"+t)),n=("0"+(98-r)).slice(-2);return new s(e+n+t)},s.createIndirect=function(t){return s.fromBban("ETH"+t.institution+t.identifier)},s.isValid=function(t){var e=new s(t);return e.isValid()},s.prototype.isValid=function(){return/^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban)&&1===a(i(this._iban))},s.prototype.isDirect=function(){return 34===this._iban.length||35===this._iban.length},s.prototype.isIndirect=function(){return 20===this._iban.length},s.prototype.checksum=function(){return this._iban.substr(2,2)},s.prototype.institution=function(){return this.isIndirect()?this._iban.substr(7,4):""},s.prototype.client=function(){return this.isIndirect()?this._iban.substr(11):""},s.prototype.address=function(){if(this.isDirect()){var t=this._iban.substr(4),e=new n(t,36);return o(e.toString(16),20)}return""},s.prototype.toString=function(){return this._iban},e.exports=s},{"bignumber.js":"bignumber.js"}],34:[function(t,e,r){"use strict";var n=t("../utils/utils"),o=t("./errors"),i=function(t,e){var r=this;this.responseCallbacks={},this.path=t,this.connection=e.connect({path:this.path}),this.connection.on("error",function(t){console.error("IPC Connection Error",t),r._timeout()}),this.connection.on("end",function(){r._timeout()}),this.connection.on("data",function(t){r._parseResponse(t.toString()).forEach(function(t){var e=null;n.isArray(t)?t.forEach(function(t){r.responseCallbacks[t.id]&&(e=t.id)}):e=t.id,r.responseCallbacks[e]&&(r.responseCallbacks[e](null,t),delete r.responseCallbacks[e])})})};i.prototype._parseResponse=function(t){var e=this,r=[],n=t.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|");return n.forEach(function(t){e.lastChunk&&(t=e.lastChunk+t);var n=null;try{n=JSON.parse(t)}catch(i){return e.lastChunk=t,clearTimeout(e.lastChunkTimeout),void(e.lastChunkTimeout=setTimeout(function(){throw e._timeout(),o.InvalidResponse(t)},15e3))}clearTimeout(e.lastChunkTimeout),e.lastChunk=null,n&&r.push(n)}),r},i.prototype._addResponseCallback=function(t,e){var r=t.id||t[0].id,n=t.method||t[0].method;this.responseCallbacks[r]=e,this.responseCallbacks[r].method=n},i.prototype._timeout=function(){for(var t in this.responseCallbacks)this.responseCallbacks.hasOwnProperty(t)&&(this.responseCallbacks[t](o.InvalidConnection("on IPC")),delete this.responseCallbacks[t])},i.prototype.isConnected=function(){var t=this;return t.connection.writable||t.connection.connect({path:t.path}),!!this.connection.writable},i.prototype.send=function(t){if(this.connection.writeSync){var e;this.connection.writable||this.connection.connect({path:this.path});var r=this.connection.writeSync(JSON.stringify(t));try{e=JSON.parse(r)}catch(n){throw o.InvalidResponse(r)}return e}throw new Error('You tried to send "'+t.method+'" synchronously. Synchronous requests are not supported by the IPC provider.')},i.prototype.sendAsync=function(t,e){this.connection.writable||this.connection.connect({path:this.path}),this.connection.write(JSON.stringify(t)),this._addResponseCallback(t,e)},e.exports=i},{"../utils/utils":20,"./errors":26}],35:[function(t,e,r){var n=function(){return arguments.callee._singletonInstance?arguments.callee._singletonInstance:(arguments.callee._singletonInstance=this,void(this.messageId=1))};n.getInstance=function(){var t=new n;return t},n.prototype.toPayload=function(t,e){return t||console.error("jsonrpc method should be specified!"),{jsonrpc:"2.0",method:t,params:e||[],id:this.messageId++}},n.prototype.isValidResponse=function(t){return!!t&&!t.error&&"2.0"===t.jsonrpc&&"number"==typeof t.id&&void 0!==t.result},n.prototype.toBatchPayload=function(t){var e=this;return t.map(function(t){return e.toPayload(t.method,t.params)})},e.exports=n},{}],36:[function(t,e,r){var n=t("../utils/utils"),o=t("./errors"),i=function(t){this.name=t.name,this.call=t.call,this.params=t.params||0,this.inputFormatter=t.inputFormatter,this.outputFormatter=t.outputFormatter,this.requestManager=null};i.prototype.setRequestManager=function(t){this.requestManager=t},i.prototype.getCall=function(t){return n.isFunction(this.call)?this.call(t):this.call},i.prototype.extractCallback=function(t){return n.isFunction(t[t.length-1])?t.pop():void 0},i.prototype.validateArgs=function(t){if(t.length!==this.params)throw o.InvalidNumberOfParams()},i.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter.map(function(e,r){return e?e(t[r]):t[r]}):t},i.prototype.formatOutput=function(t){return this.outputFormatter&&t?this.outputFormatter(t):t},i.prototype.toPayload=function(t){var e=this.getCall(t),r=this.extractCallback(t),n=this.formatInput(t);return this.validateArgs(n),{method:e,params:n,callback:r}},i.prototype.attachToObject=function(t){var e=this.buildCall();e.call=this.call;var r=this.name.split(".");r.length>1?(t[r[0]]=t[r[0]]||{},t[r[0]][r[1]]=e):t[r[0]]=e},i.prototype.buildCall=function(){var t=this,e=function(){var e=t.toPayload(Array.prototype.slice.call(arguments));return e.callback?t.requestManager.sendAsync(e,function(r,n){e.callback(r,t.formatOutput(n))}):t.formatOutput(t.requestManager.send(e))};return e.request=this.request.bind(this),e},i.prototype.request=function(){var t=this.toPayload(Array.prototype.slice.call(arguments));return t.format=this.formatOutput.bind(this),t},e.exports=i},{"../utils/utils":20,"./errors":26}],37:[function(t,e,r){var n=t("../method"),o=function(t){this._requestManager=t._requestManager;var e=this;i().forEach(function(r){r.attachToObject(e),r.setRequestManager(t._requestManager)})},i=function(){var t=new n({name:"putString",call:"db_putString",params:3}),e=new n({name:"getString",call:"db_getString",params:2}),r=new n({name:"putHex",call:"db_putHex",params:3}),o=new n({name:"getHex",call:"db_getHex",params:2});return[t,e,r,o]};e.exports=o},{"../method":36}],38:[function(t,e,r){"use strict";function n(t){this._requestManager=t._requestManager;var e=this;w().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),x().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),this.iban=d,this.sendIBANTransaction=m.bind(null,this)}var o=t("../formatters"),i=t("../../utils/utils"),a=t("../method"),s=t("../property"),c=t("../../utils/config"),u=t("../contract"),f=t("./watches"),p=t("../filter"),h=t("../syncing"),l=t("../namereg"),d=t("../iban"),m=t("../transfer"),y=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockByHash":"eth_getBlockByNumber"},g=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getTransactionByBlockHashAndIndex":"eth_getTransactionByBlockNumberAndIndex"},v=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleByBlockHashAndIndex":"eth_getUncleByBlockNumberAndIndex"},b=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockTransactionCountByHash":"eth_getBlockTransactionCountByNumber"},_=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleCountByBlockHash":"eth_getUncleCountByBlockNumber"};Object.defineProperty(n.prototype,"defaultBlock",{get:function(){return c.defaultBlock},set:function(t){return c.defaultBlock=t,t}}),Object.defineProperty(n.prototype,"defaultAccount",{get:function(){return c.defaultAccount},set:function(t){return c.defaultAccount=t,t}});var w=function(){var t=new a({name:"getBalance",call:"eth_getBalance",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter],outputFormatter:o.outputBigNumberFormatter}),e=new a({name:"getStorageAt",call:"eth_getStorageAt",params:3,inputFormatter:[null,i.toHex,o.inputDefaultBlockNumberFormatter]}),r=new a({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter]}),n=new a({name:"getBlock",call:y,params:2,inputFormatter:[o.inputBlockNumberFormatter,function(t){return!!t}],outputFormatter:o.outputBlockFormatter}),s=new a({name:"getUncle",call:v,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputBlockFormatter}),c=new a({name:"getCompilers",call:"eth_getCompilers",params:0}),u=new a({name:"getBlockTransactionCount",call:b,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),f=new a({name:"getBlockUncleCount",call:_,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),p=new a({name:"getTransaction",call:"eth_getTransactionByHash",params:1,outputFormatter:o.outputTransactionFormatter}),h=new a({name:"getTransactionFromBlock",call:g,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputTransactionFormatter}),l=new a({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,outputFormatter:o.outputTransactionReceiptFormatter}),d=new a({name:"getTransactionCount",call:"eth_getTransactionCount",params:2,inputFormatter:[null,o.inputDefaultBlockNumberFormatter],outputFormatter:i.toDecimal}),m=new a({name:"sendRawTransaction",call:"eth_sendRawTransaction",params:1,inputFormatter:[null]}),w=new a({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[o.inputTransactionFormatter]}),x=new a({name:"sign",call:"eth_sign",params:2,inputFormatter:[o.inputAddressFormatter,null]}),k=new a({name:"call",call:"eth_call",params:2,inputFormatter:[o.inputCallFormatter,o.inputDefaultBlockNumberFormatter]}),B=new a({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[o.inputCallFormatter],outputFormatter:i.toDecimal}),S=new a({name:"compile.solidity",call:"eth_compileSolidity",params:1}),C=new a({name:"compile.lll",call:"eth_compileLLL",params:1}),A=new a({name:"compile.serpent",call:"eth_compileSerpent",params:1}),F=new a({name:"submitWork",call:"eth_submitWork",params:3}),I=new a({name:"getWork",call:"eth_getWork",params:0});return[t,e,r,n,s,c,u,f,p,h,l,d,k,B,m,w,x,S,C,A,F,I]},x=function(){return[new s({name:"coinbase",getter:"eth_coinbase"}),new s({name:"mining",getter:"eth_mining"}),new s({name:"hashrate",getter:"eth_hashrate",outputFormatter:i.toDecimal}),new s({name:"syncing",getter:"eth_syncing",outputFormatter:o.outputSyncingFormatter}),new s({name:"gasPrice",getter:"eth_gasPrice",outputFormatter:o.outputBigNumberFormatter}),new s({name:"accounts",getter:"eth_accounts"}),new s({name:"blockNumber",getter:"eth_blockNumber",outputFormatter:i.toDecimal})]};n.prototype.contract=function(t){var e=new u(this,t);return e},n.prototype.filter=function(t,e){return new p(this._requestManager,t,f.eth(),o.outputLogFormatter,e)},n.prototype.namereg=function(){return this.contract(l.global.abi).at(l.global.address)},n.prototype.icapNamereg=function(){return this.contract(l.icap.abi).at(l.icap.address)},n.prototype.isSyncing=function(t){return new h(this._requestManager,t)},e.exports=n},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(t,e,r){var n=t("../../utils/utils"),o=t("../property"),i=function(t){this._requestManager=t._requestManager;var e=this;a().forEach(function(r){r.attachToObject(e),r.setRequestManager(t._requestManager)})},a=function(){return[new o({name:"listening",getter:"net_listening"}),new o({name:"peerCount",getter:"net_peerCount",outputFormatter:n.toDecimal})]};e.exports=i},{"../../utils/utils":20,"../property":44}],40:[function(t,e,r){"use strict";function n(t){this._requestManager=t._requestManager;var e=this;s().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})}var o=t("../method"),i=t("../property"),a=t("../formatters"),s=function(){var t=new o({name:"newAccount",call:"personal_newAccount",params:1,inputFormatter:[null]}),e=new o({name:"unlockAccount",call:"personal_unlockAccount",params:3,inputFormatter:[a.inputAddressFormatter,null,null]}),r=new o({name:"lockAccount",call:"personal_lockAccount",params:1,inputFormatter:[a.inputAddressFormatter]});return[t,e,r]},c=function(){return[new i({name:"listAccounts",getter:"personal_listAccounts"})]};e.exports=n},{"../formatters":30,"../method":36,"../property":44}],41:[function(t,e,r){var n=t("../method"),o=t("../formatters"),i=t("../filter"),a=t("./watches"),s=function(t){this._requestManager=t._requestManager;var e=this;c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})};s.prototype.filter=function(t,e){return new i(this._requestManager,t,a.shh(),o.outputPostFormatter,e)};var c=function(){var t=new n({name:"post",call:"shh_post",params:1,inputFormatter:[o.inputPostFormatter]}),e=new n({name:"newIdentity",call:"shh_newIdentity",params:0}),r=new n({name:"hasIdentity",call:"shh_hasIdentity",params:1}),i=new n({name:"newGroup",call:"shh_newGroup",params:0}),a=new n({name:"addToGroup",call:"shh_addToGroup",params:0});return[t,e,r,i,a]};e.exports=s},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(t,e,r){var n=t("../method"),o=function(){var t=function(t){var e=t[0];switch(e){case"latest":return t.shift(),this.params=0,"eth_newBlockFilter";case"pending":return t.shift(),this.params=0,"eth_newPendingTransactionFilter";default:return"eth_newFilter"}},e=new n({name:"newFilter",call:t,params:1}),r=new n({name:"uninstallFilter",call:"eth_uninstallFilter",params:1}),o=new n({name:"getLogs",call:"eth_getFilterLogs",params:1}),i=new n({name:"poll",call:"eth_getFilterChanges",params:1});return[e,r,o,i]},i=function(){var t=new n({name:"newFilter",call:"shh_newFilter",params:1}),e=new n({name:"uninstallFilter",call:"shh_uninstallFilter",params:1}),r=new n({name:"getLogs",call:"shh_getMessages",params:1}),o=new n({name:"poll",call:"shh_getFilterChanges",params:1});return[t,e,r,o]};e.exports={eth:o,shh:i}},{"../method":36}],43:[function(t,e,r){var n=t("../contracts/GlobalRegistrar.json"),o=t("../contracts/ICAPRegistrar.json"),i="0xc6d9d2cd449a754c494264e1809c50e34d64562b",a="0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00";e.exports={global:{abi:n,address:i},icap:{abi:o,address:a}}},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(t,e,r){var n=t("../utils/utils"),o=function(t){this.name=t.name,this.getter=t.getter,this.setter=t.setter,this.outputFormatter=t.outputFormatter,this.inputFormatter=t.inputFormatter,this.requestManager=null};o.prototype.setRequestManager=function(t){this.requestManager=t},o.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter(t):t},o.prototype.formatOutput=function(t){return this.outputFormatter&&null!==t?this.outputFormatter(t):t},o.prototype.extractCallback=function(t){return n.isFunction(t[t.length-1])?t.pop():void 0},o.prototype.attachToObject=function(t){var e={get:this.buildGet(),enumerable:!0},r=this.name.split("."),n=r[0];r.length>1&&(t[r[0]]=t[r[0]]||{},t=t[r[0]],n=r[1]),Object.defineProperty(t,n,e),t[i(n)]=this.buildAsyncGet()};var i=function(t){return"get"+t.charAt(0).toUpperCase()+t.slice(1)};o.prototype.buildGet=function(){var t=this;return function(){return t.formatOutput(t.requestManager.send({method:t.getter}))}},o.prototype.buildAsyncGet=function(){var t=this,e=function(e){t.requestManager.sendAsync({method:t.getter},function(r,n){e(r,t.formatOutput(n))})};return e.request=this.request.bind(this),e},o.prototype.request=function(){var t={method:this.getter,params:[],callback:this.extractCallback(Array.prototype.slice.call(arguments))};return t.format=this.formatOutput.bind(this),t},e.exports=o},{"../utils/utils":20}],45:[function(t,e,r){var n=t("./jsonrpc"),o=t("../utils/utils"),i=t("../utils/config"),a=t("./errors"),s=function(t){this.provider=t,this.polls={},this.timeout=null};s.prototype.send=function(t){if(!this.provider)return console.error(a.InvalidProvider()),null;var e=n.getInstance().toPayload(t.method,t.params),r=this.provider.send(e);if(!n.getInstance().isValidResponse(r))throw a.InvalidResponse(r);return r.result},s.prototype.sendAsync=function(t,e){if(!this.provider)return e(a.InvalidProvider());var r=n.getInstance().toPayload(t.method,t.params);this.provider.sendAsync(r,function(t,r){return t?e(t):n.getInstance().isValidResponse(r)?void e(null,r.result):e(a.InvalidResponse(r))})},s.prototype.sendBatch=function(t,e){if(!this.provider)return e(a.InvalidProvider());var r=n.getInstance().toBatchPayload(t);this.provider.sendAsync(r,function(t,r){return t?e(t):o.isArray(r)?void e(t,r):e(a.InvalidResponse(r))})},s.prototype.setProvider=function(t){this.provider=t},s.prototype.startPolling=function(t,e,r,n){this.polls[e]={data:t,id:e,callback:r,uninstall:n},this.timeout||this.poll()},s.prototype.stopPolling=function(t){delete this.polls[t],0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.reset=function(t){for(var e in this.polls)t&&-1!==e.indexOf("syncPoll_")||(this.polls[e].uninstall(),delete this.polls[e]);0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.poll=function(){if(this.timeout=setTimeout(this.poll.bind(this),i.ETH_POLLING_TIMEOUT),0!==Object.keys(this.polls).length){if(!this.provider)return void console.error(a.InvalidProvider());var t=[],e=[];for(var r in this.polls)t.push(this.polls[r].data),e.push(r);if(0!==t.length){var s=n.getInstance().toBatchPayload(t),c={};s.forEach(function(t,r){c[t.id]=e[r]});var u=this;this.provider.sendAsync(s,function(t,e){if(!t){if(!o.isArray(e))throw a.InvalidResponse(e);e.map(function(t){var e=c[t.id];return u.polls[e]?(t.callback=u.polls[e].callback,t):!1}).filter(function(t){return!!t}).filter(function(t){var e=n.getInstance().isValidResponse(t);return e||t.callback(a.InvalidResponse(t)),e}).forEach(function(t){t.callback(null,t.result)})}})}}},e.exports=s},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(t,e,r){var n=function(){this.defaultBlock="latest",this.defaultAccount=void 0};e.exports=n},{}],47:[function(t,e,r){var n=t("./formatters"),o=t("../utils/utils"),i=1,a=function(t){var e=function(e,r){return e?t.callbacks.forEach(function(t){t(e)}):(o.isObject(r)&&r.startingBlock&&(r=n.outputSyncingFormatter(r)),void t.callbacks.forEach(function(e){t.lastSyncState!==r&&(!t.lastSyncState&&o.isObject(r)&&e(null,!0),setTimeout(function(){e(null,r)},0),t.lastSyncState=r)}))};t.requestManager.startPolling({method:"eth_syncing",params:[]},t.pollId,e,t.stopWatching.bind(t))},s=function(t,e){return this.requestManager=t,this.pollId="syncPoll_"+i++,this.callbacks=[],this.addCallback(e),this.lastSyncState=!1,a(this),this};s.prototype.addCallback=function(t){return t&&this.callbacks.push(t),this},s.prototype.stopWatching=function(){this.requestManager.stopPolling(this.pollId),this.callbacks=[]},e.exports=s},{"../utils/utils":20,"./formatters":30}],48:[function(t,e,r){var n=t("./iban"),o=t("../contracts/SmartExchange.json"),i=function(t,e,r,o,i){var c=new n(r);if(!c.isValid())throw new Error("invalid iban address");if(c.isDirect())return a(t,e,c.address(),o,i);if(!i){var u=t.icapNamereg().addr(c.institution());return s(t,e,u,o,c.client())}t.icapNamereg().addr(c.institution(),function(r,n){return s(t,e,n,o,c.client(),i)})},a=function(t,e,r,n,o){return t.sendTransaction({address:r,from:e,value:n},o)},s=function(t,e,r,n,i,a){var s=o;return t.contract(s).at(r).deposit(i,{from:e,value:n},a)};e.exports=i},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(t,e,r){},{}],50:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.BlockCipher,o=e.algo,i=[],a=[],s=[],c=[],u=[],f=[],p=[],h=[],l=[],d=[];!function(){for(var t=[],e=0;256>e;e++)128>e?t[e]=e<<1:t[e]=e<<1^283;for(var r=0,n=0,e=0;256>e;e++){var o=n^n<<1^n<<2^n<<3^n<<4;o=o>>>8^255&o^99,i[r]=o,a[o]=r;var m=t[r],y=t[m],g=t[y],v=257*t[o]^16843008*o;s[r]=v<<24|v>>>8,c[r]=v<<16|v>>>16,u[r]=v<<8|v>>>24,f[r]=v;var v=16843009*g^65537*y^257*m^16843008*r;p[o]=v<<24|v>>>8,h[o]=v<<16|v>>>16,l[o]=v<<8|v>>>24,d[o]=v,r?(r=m^t[t[t[g^m]]],n^=t[t[n]]):r=n=1}}();var m=[0,1,2,4,8,16,32,64,128,27,54],y=o.AES=n.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes/4,n=this._nRounds=r+6,o=4*(n+1),a=this._keySchedule=[],s=0;o>s;s++)if(r>s)a[s]=e[s];else{var c=a[s-1];s%r?r>6&&s%r==4&&(c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c]):(c=c<<8|c>>>24,c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c],c^=m[s/r|0]<<24),a[s]=a[s-r]^c}for(var u=this._invKeySchedule=[],f=0;o>f;f++){var s=o-f;if(f%4)var c=a[s];else var c=a[s-4];4>f||4>=s?u[f]=c:u[f]=p[i[c>>>24]]^h[i[c>>>16&255]]^l[i[c>>>8&255]]^d[i[255&c]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,c,u,f,i)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,p,h,l,d,a);var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,o,i,a,s){for(var c=this._nRounds,u=t[e]^r[0],f=t[e+1]^r[1],p=t[e+2]^r[2],h=t[e+3]^r[3],l=4,d=1;c>d;d++){var m=n[u>>>24]^o[f>>>16&255]^i[p>>>8&255]^a[255&h]^r[l++],y=n[f>>>24]^o[p>>>16&255]^i[h>>>8&255]^a[255&u]^r[l++],g=n[p>>>24]^o[h>>>16&255]^i[u>>>8&255]^a[255&f]^r[l++],v=n[h>>>24]^o[u>>>16&255]^i[f>>>8&255]^a[255&p]^r[l++];u=m,f=y,p=g,h=v}var m=(s[u>>>24]<<24|s[f>>>16&255]<<16|s[p>>>8&255]<<8|s[255&h])^r[l++],y=(s[f>>>24]<<24|s[p>>>16&255]<<16|s[h>>>8&255]<<8|s[255&u])^r[l++],g=(s[p>>>24]<<24|s[h>>>16&255]<<16|s[u>>>8&255]<<8|s[255&f])^r[l++],v=(s[h>>>24]<<24|s[u>>>16&255]<<16|s[f>>>8&255]<<8|s[255&p])^r[l++];t[e]=m,t[e+1]=y,t[e+2]=g,t[e+3]=v},keySize:8});e.AES=n._createHelper(y)}(),t.AES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){t.lib.Cipher||function(e){var r=t,n=r.lib,o=n.Base,i=n.WordArray,a=n.BufferedBlockAlgorithm,s=r.enc,c=(s.Utf8,s.Base64),u=r.algo,f=u.EvpKDF,p=n.Cipher=a.extend({cfg:o.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?k:_; -}return function(e){return{encrypt:function(r,n,o){return t(n).encrypt(e,r,n,o)},decrypt:function(r,n,o){return t(n).decrypt(e,r,n,o)}}}}()}),h=(n.StreamCipher=p.extend({_doFinalize:function(){var t=this._process(!0);return t},blockSize:1}),r.mode={}),l=n.BlockCipherMode=o.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),d=h.CBC=function(){function t(t,r,n){var o=this._iv;if(o){var i=o;this._iv=e}else var i=this._prevBlock;for(var a=0;n>a;a++)t[r+a]^=i[a]}var r=l.extend();return r.Encryptor=r.extend({processBlock:function(e,r){var n=this._cipher,o=n.blockSize;t.call(this,e,r,o),n.encryptBlock(e,r),this._prevBlock=e.slice(r,r+o)}}),r.Decryptor=r.extend({processBlock:function(e,r){var n=this._cipher,o=n.blockSize,i=e.slice(r,r+o);n.decryptBlock(e,r),t.call(this,e,r,o),this._prevBlock=i}}),r}(),m=r.pad={},y=m.Pkcs7={pad:function(t,e){for(var r=4*e,n=r-t.sigBytes%r,o=n<<24|n<<16|n<<8|n,a=[],s=0;n>s;s+=4)a.push(o);var c=i.create(a,n);t.concat(c)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},g=(n.BlockCipher=p.extend({cfg:p.cfg.extend({mode:d,padding:y}),reset:function(){p.reset.call(this);var t=this.cfg,e=t.iv,r=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else{var n=r.createDecryptor;this._minBufferSize=1}this._mode=n.call(r,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{var e=this._process(!0);t.unpad(e)}return e},blockSize:4}),n.CipherParams=o.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=r.format={},b=v.OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;if(r)var n=i.create([1398893684,1701076831]).concat(r).concat(e);else var n=e;return n.toString(c)},parse:function(t){var e=c.parse(t),r=e.words;if(1398893684==r[0]&&1701076831==r[1]){var n=i.create(r.slice(2,4));r.splice(0,4),e.sigBytes-=16}return g.create({ciphertext:e,salt:n})}},_=n.SerializableCipher=o.extend({cfg:o.extend({format:b}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var o=t.createEncryptor(r,n),i=o.finalize(e),a=o.cfg;return g.create({ciphertext:i,key:r,iv:a.iv,algorithm:t,mode:a.mode,padding:a.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var o=t.createDecryptor(r,n).finalize(e.ciphertext);return o},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=r.kdf={},x=w.OpenSSL={execute:function(t,e,r,n){n||(n=i.random(8));var o=f.create({keySize:e+r}).compute(t,n),a=i.create(o.words.slice(e),4*r);return o.sigBytes=4*e,g.create({key:o,iv:a,salt:n})}},k=n.PasswordBasedCipher=_.extend({cfg:_.cfg.extend({kdf:x}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var o=n.kdf.execute(r,t.keySize,t.ivSize);n.iv=o.iv;var i=_.encrypt.call(this,t,e,o.key,n);return i.mixIn(o),i},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var o=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);n.iv=o.iv;var i=_.decrypt.call(this,t,e,o.key,n);return i}})}()})},{"./core":52}],52:[function(t,e,r){!function(t,n){"object"==typeof r?e.exports=r=n():"function"==typeof define&&define.amd?define([],n):t.CryptoJS=n()}(this,function(){var t=t||function(t,e){var r={},n=r.lib={},o=n.Base=function(){function t(){}return{extend:function(e){t.prototype=this;var r=new t;return e&&r.mixIn(e),r.hasOwnProperty("init")||(r.init=function(){r.$super.init.apply(this,arguments)}),r.init.prototype=r,r.$super=this,r},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),i=n.WordArray=o.extend({init:function(t,r){t=this.words=t||[],r!=e?this.sigBytes=r:this.sigBytes=4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,r=t.words,n=this.sigBytes,o=t.sigBytes;if(this.clamp(),n%4)for(var i=0;o>i;i++){var a=r[i>>>2]>>>24-i%4*8&255;e[n+i>>>2]|=a<<24-(n+i)%4*8}else for(var i=0;o>i;i+=4)e[n+i>>>2]=r[i>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var r,n=[],o=function(e){var e=e,r=987654321,n=4294967295;return function(){r=36969*(65535&r)+(r>>16)&n,e=18e3*(65535&e)+(e>>16)&n;var o=(r<<16)+e&n;return o/=4294967296,o+=.5,o*(t.random()>.5?1:-1)}},a=0;e>a;a+=4){var s=o(4294967296*(r||t.random()));r=987654071*s(),n.push(4294967296*s()|0)}return new i.init(n,e)}}),a=r.enc={},s=a.Hex={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n+=2)r[n>>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new i.init(r,e/2)}},c=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;n.push(String.fromCharCode(i))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n++)r[n>>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new i.init(r,e)}},u=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},f=n.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=u.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r=this._data,n=r.words,o=r.sigBytes,a=this.blockSize,s=4*a,c=o/s;c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*a,f=t.min(4*u,o);if(u){for(var p=0;u>p;p+=a)this._doProcessBlock(n,p);var h=n.splice(0,u);r.sigBytes-=f}return new i.init(h,f)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(n.Hasher=f.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},blockSize:16,_createHelper:function(t){return function(e,r){return new t.init(r).finalize(e)}},_createHmacHelper:function(t){return function(e,r){return new p.HMAC.init(t,r).finalize(e)}}}),r.algo={});return r}(Math);return t})},{}],53:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=e.enc;o.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,n=this._map;t.clamp();for(var o=[],i=0;r>i;i+=3)for(var a=e[i>>>2]>>>24-i%4*8&255,s=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,u=a<<16|s<<8|c,f=0;4>f&&r>i+.75*f;f++)o.push(n.charAt(u>>>6*(3-f)&63));var p=n.charAt(64);if(p)for(;o.length%4;)o.push(p);return o.join("")},parse:function(t){var e=t.length,r=this._map,o=r.charAt(64);if(o){var i=t.indexOf(o);-1!=i&&(e=i)}for(var a=[],s=0,c=0;e>c;c++)if(c%4){var u=r.indexOf(t.charAt(c-1))<>>6-c%4*2;a[s>>>2]|=(u|f)<<24-s%4*8,s++}return n.create(a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64})},{"./core":52}],54:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(t){return t<<8&4278255360|t>>>8&16711935}var r=t,n=r.lib,o=n.WordArray,i=r.enc;i.Utf16=i.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o+=2){var i=e[o>>>2]>>>16-o%4*8&65535;n.push(String.fromCharCode(i))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n++)r[n>>>1]|=t.charCodeAt(n)<<16-n%2*16;return o.create(r,2*e)}};i.Utf16LE={stringify:function(t){for(var r=t.words,n=t.sigBytes,o=[],i=0;n>i;i+=2){var a=e(r[i>>>2]>>>16-i%4*8&65535);o.push(String.fromCharCode(a))}return o.join("")},parse:function(t){for(var r=t.length,n=[],i=0;r>i;i++)n[i>>>1]|=e(t.charCodeAt(i)<<16-i%2*16);return o.create(n,2*r)}}}(),t.enc.Utf16})},{"./core":52}],55:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.Base,o=r.WordArray,i=e.algo,a=i.MD5,s=i.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=r.hasher.create(),i=o.create(),a=i.words,s=r.keySize,c=r.iterations;a.lengthf;f++)u=n.finalize(u),n.reset();i.concat(u)}return i.sigBytes=4*s,i}});e.EvpKDF=function(t,e,r){return s.create(r).compute(t,e)}}(),t.EvpKDF})},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.CipherParams,i=r.enc,a=i.Hex,s=r.format;s.Hex={stringify:function(t){return t.ciphertext.toString(a)},parse:function(t){var e=a.parse(t);return o.create({ciphertext:e})}}}(),t.format.Hex})},{"./cipher-core":51,"./core":52}],57:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){!function(){var e=t,r=e.lib,n=r.Base,o=e.enc,i=o.Utf8,a=e.algo;a.HMAC=n.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=i.parse(e));var r=t.blockSize,n=4*r;e.sigBytes>n&&(e=t.finalize(e)),e.clamp();for(var o=this._oKey=e.clone(),a=this._iKey=e.clone(),s=o.words,c=a.words,u=0;r>u;u++)s[u]^=1549556828,c[u]^=909522486;o.sigBytes=a.sigBytes=n,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,r=e.finalize(t);e.reset();var n=e.finalize(this._oKey.clone().concat(r));return n}})}()})},{"./core":52}],58:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core"),t("./lib-typedarrays"),t("./enc-utf16"),t("./enc-base64"),t("./md5"),t("./sha1"),t("./sha256"),t("./sha224"),t("./sha512"),t("./sha384"),t("./sha3"),t("./ripemd160"),t("./hmac"),t("./pbkdf2"),t("./evpkdf"),t("./cipher-core"),t("./mode-cfb"),t("./mode-ctr"),t("./mode-ctr-gladman"),t("./mode-ofb"),t("./mode-ecb"),t("./pad-ansix923"),t("./pad-iso10126"),t("./pad-iso97971"),t("./pad-zeropadding"),t("./pad-nopadding"),t("./format-hex"),t("./aes"),t("./tripledes"),t("./rc4"),t("./rabbit"),t("./rabbit-legacy")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./lib-typedarrays","./enc-utf16","./enc-base64","./md5","./sha1","./sha256","./sha224","./sha512","./sha384","./sha3","./ripemd160","./hmac","./pbkdf2","./evpkdf","./cipher-core","./mode-cfb","./mode-ctr","./mode-ctr-gladman","./mode-ofb","./mode-ecb","./pad-ansix923","./pad-iso10126","./pad-iso97971","./pad-zeropadding","./pad-nopadding","./format-hex","./aes","./tripledes","./rc4","./rabbit","./rabbit-legacy"],o):n.CryptoJS=o(n.CryptoJS)}(this,function(t){return t})},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){if("function"==typeof ArrayBuffer){var e=t,r=e.lib,n=r.WordArray,o=n.init,i=n.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,r=[],n=0;e>n;n++)r[n>>>2]|=t[n]<<24-n%4*8;o.call(this,r,e)}else o.apply(this,arguments)};i.prototype=n}}(),t.lib.WordArray})},{"./core":52}],60:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){function r(t,e,r,n,o,i,a){var s=t+(e&r|~e&n)+o+a;return(s<>>32-i)+e}function n(t,e,r,n,o,i,a){var s=t+(e&n|r&~n)+o+a;return(s<>>32-i)+e}function o(t,e,r,n,o,i,a){var s=t+(e^r^n)+o+a;return(s<>>32-i)+e}function i(t,e,r,n,o,i,a){var s=t+(r^(e|~n))+o+a;return(s<>>32-i)+e}var a=t,s=a.lib,c=s.WordArray,u=s.Hasher,f=a.algo,p=[];!function(){for(var t=0;64>t;t++)p[t]=4294967296*e.abs(e.sin(t+1))|0}();var h=f.MD5=u.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var a=0;16>a;a++){var s=e+a,c=t[s];t[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var u=this._hash.words,f=t[e+0],h=t[e+1],l=t[e+2],d=t[e+3],m=t[e+4],y=t[e+5],g=t[e+6],v=t[e+7],b=t[e+8],_=t[e+9],w=t[e+10],x=t[e+11],k=t[e+12],B=t[e+13],S=t[e+14],C=t[e+15],A=u[0],F=u[1],I=u[2],P=u[3];A=r(A,F,I,P,f,7,p[0]),P=r(P,A,F,I,h,12,p[1]),I=r(I,P,A,F,l,17,p[2]),F=r(F,I,P,A,d,22,p[3]),A=r(A,F,I,P,m,7,p[4]),P=r(P,A,F,I,y,12,p[5]),I=r(I,P,A,F,g,17,p[6]),F=r(F,I,P,A,v,22,p[7]),A=r(A,F,I,P,b,7,p[8]),P=r(P,A,F,I,_,12,p[9]),I=r(I,P,A,F,w,17,p[10]),F=r(F,I,P,A,x,22,p[11]),A=r(A,F,I,P,k,7,p[12]),P=r(P,A,F,I,B,12,p[13]),I=r(I,P,A,F,S,17,p[14]),F=r(F,I,P,A,C,22,p[15]),A=n(A,F,I,P,h,5,p[16]),P=n(P,A,F,I,g,9,p[17]),I=n(I,P,A,F,x,14,p[18]),F=n(F,I,P,A,f,20,p[19]),A=n(A,F,I,P,y,5,p[20]),P=n(P,A,F,I,w,9,p[21]),I=n(I,P,A,F,C,14,p[22]),F=n(F,I,P,A,m,20,p[23]),A=n(A,F,I,P,_,5,p[24]),P=n(P,A,F,I,S,9,p[25]),I=n(I,P,A,F,d,14,p[26]),F=n(F,I,P,A,b,20,p[27]),A=n(A,F,I,P,B,5,p[28]),P=n(P,A,F,I,l,9,p[29]),I=n(I,P,A,F,v,14,p[30]),F=n(F,I,P,A,k,20,p[31]),A=o(A,F,I,P,y,4,p[32]),P=o(P,A,F,I,b,11,p[33]),I=o(I,P,A,F,x,16,p[34]),F=o(F,I,P,A,S,23,p[35]),A=o(A,F,I,P,h,4,p[36]),P=o(P,A,F,I,m,11,p[37]),I=o(I,P,A,F,v,16,p[38]),F=o(F,I,P,A,w,23,p[39]),A=o(A,F,I,P,B,4,p[40]),P=o(P,A,F,I,f,11,p[41]),I=o(I,P,A,F,d,16,p[42]),F=o(F,I,P,A,g,23,p[43]),A=o(A,F,I,P,_,4,p[44]),P=o(P,A,F,I,k,11,p[45]),I=o(I,P,A,F,C,16,p[46]),F=o(F,I,P,A,l,23,p[47]),A=i(A,F,I,P,f,6,p[48]),P=i(P,A,F,I,v,10,p[49]),I=i(I,P,A,F,S,15,p[50]),F=i(F,I,P,A,y,21,p[51]),A=i(A,F,I,P,k,6,p[52]),P=i(P,A,F,I,d,10,p[53]),I=i(I,P,A,F,w,15,p[54]),F=i(F,I,P,A,h,21,p[55]),A=i(A,F,I,P,b,6,p[56]),P=i(P,A,F,I,C,10,p[57]),I=i(I,P,A,F,g,15,p[58]),F=i(F,I,P,A,B,21,p[59]),A=i(A,F,I,P,m,6,p[60]),P=i(P,A,F,I,x,10,p[61]),I=i(I,P,A,F,l,15,p[62]),F=i(F,I,P,A,_,21,p[63]),u[0]=u[0]+A|0,u[1]=u[1]+F|0,u[2]=u[2]+I|0,u[3]=u[3]+P|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,o=8*t.sigBytes;r[o>>>5]|=128<<24-o%32;var i=e.floor(n/4294967296),a=n;r[(o+64>>>9<<4)+15]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),r[(o+64>>>9<<4)+14]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(r.length+1),this._process();for(var s=this._hash,c=s.words,u=0;4>u;u++){var f=c[u];c[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return s},clone:function(){var t=u.clone.call(this);return t._hash=this._hash.clone(),t}});a.MD5=u._createHelper(h),a.HmacMD5=u._createHmacHelper(h)}(Math),t.MD5})},{"./core":52}],61:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CFB=function(){function e(t,e,r,n){var o=this._iv;if(o){var i=o.slice(0);this._iv=void 0}else var i=this._prevBlock;n.encryptBlock(i,0);for(var a=0;r>a;a++)t[e+a]^=i[a]}var r=t.lib.BlockCipherMode.extend();return r.Encryptor=r.extend({processBlock:function(t,r){var n=this._cipher,o=n.blockSize;e.call(this,t,r,o,n),this._prevBlock=t.slice(r,r+o)}}),r.Decryptor=r.extend({processBlock:function(t,r){var n=this._cipher,o=n.blockSize,i=t.slice(r,r+o);e.call(this,t,r,o,n),this._prevBlock=i}}),r}(),t.mode.CFB})},{"./cipher-core":51,"./core":52}],62:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CTRGladman=function(){function e(t){if(255===(t>>24&255)){var e=t>>16&255,r=t>>8&255,n=255&t;255===e?(e=0,255===r?(r=0,255===n?n=0:++n):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=n}else t+=1<<24;return t}function r(t){return 0===(t[0]=e(t[0]))&&(t[1]=e(t[1])),t}var n=t.lib.BlockCipherMode.extend(),o=n.Encryptor=n.extend({processBlock:function(t,e){var n=this._cipher,o=n.blockSize,i=this._iv,a=this._counter;i&&(a=this._counter=i.slice(0),this._iv=void 0),r(a);var s=a.slice(0);n.encryptBlock(s,0);for(var c=0;o>c;c++)t[e+c]^=s[c]}});return n.Decryptor=o,n}(),t.mode.CTRGladman})},{"./cipher-core":51,"./core":52}],63:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CTR=function(){var e=t.lib.BlockCipherMode.extend(),r=e.Encryptor=e.extend({processBlock:function(t,e){var r=this._cipher,n=r.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var a=i.slice(0);r.encryptBlock(a,0),i[n-1]=i[n-1]+1|0;for(var s=0;n>s;s++)t[e+s]^=a[s]}});return e.Decryptor=r,e}(),t.mode.CTR})},{"./cipher-core":51,"./core":52}],64:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.ECB=function(){var e=t.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),e.Decryptor=e.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),e}(),t.mode.ECB})},{"./cipher-core":51,"./core":52}],65:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.OFB=function(){var e=t.lib.BlockCipherMode.extend(),r=e.Encryptor=e.extend({processBlock:function(t,e){var r=this._cipher,n=r.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),r.encryptBlock(i,0);for(var a=0;n>a;a++)t[e+a]^=i[a]}});return e.Decryptor=r,e}(),t.mode.OFB})},{"./cipher-core":51,"./core":52}],66:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,n=4*e,o=n-r%n,i=r+o-1;t.clamp(),t.words[i>>>2]|=o<<24-i%4*8,t.sigBytes+=o},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},{"./cipher-core":51,"./core":52}],67:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.Iso10126={pad:function(e,r){var n=4*r,o=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(o-1)).concat(t.lib.WordArray.create([o<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},{"./cipher-core":51,"./core":52}],68:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.Iso97971={pad:function(e,r){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,r)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},{"./cipher-core":51,"./core":52}],69:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},{"./cipher-core":51,"./core":52}],70:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){for(var e=t.words,r=t.sigBytes-1;!(e[r>>>2]>>>24-r%4*8&255);)r--;t.sigBytes=r+1}},t.pad.ZeroPadding})},{"./cipher-core":51,"./core":52}],71:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.Base,o=r.WordArray,i=e.algo,a=i.SHA1,s=i.HMAC,c=i.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=s.create(r.hasher,t),i=o.create(),a=o.create([1]),c=i.words,u=a.words,f=r.keySize,p=r.iterations;c.lengthy;y++){m=n.finalize(m),n.reset();for(var g=m.words,v=0;d>v;v++)l[v]^=g[v]}i.concat(h),u[0]++}return i.sigBytes=4*f,i}});e.PBKDF2=function(t,e,r){return c.create(r).compute(t,e)}}(),t.PBKDF2})},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,r=0;8>r;r++)s[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var r=0;8>r;r++){var n=t[r]+e[r],o=65535&n,i=n>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&n)*n|0)+((65535&n)*n|0);c[r]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=[],s=[],c=[],u=i.RabbitLegacy=o.extend({_doReset:function(){var t=this._key.words,r=this.cfg.iv,n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],o=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;4>i;i++)e.call(this);for(var i=0;8>i;i++)o[i]^=n[i+4&7];if(r){var a=r.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,h=f<<16|65535&u;o[0]^=u,o[1]^=p,o[2]^=f,o[3]^=h,o[4]^=u,o[5]^=p,o[6]^=f,o[7]^=h;for(var i=0;4>i;i++)e.call(this)}},_doProcessBlock:function(t,r){var n=this._X;e.call(this),a[0]=n[0]^n[5]>>>16^n[3]<<16,a[1]=n[2]^n[7]>>>16^n[5]<<16,a[2]=n[4]^n[1]>>>16^n[7]<<16,a[3]=n[6]^n[3]>>>16^n[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[r+o]^=a[o]},blockSize:4,ivSize:2});r.RabbitLegacy=o._createHelper(u)}(),t.RabbitLegacy})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,r=0;8>r;r++)s[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var r=0;8>r;r++){var n=t[r]+e[r],o=65535&n,i=n>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&n)*n|0)+((65535&n)*n|0);c[r]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=[],s=[],c=[],u=i.Rabbit=o.extend({_doReset:function(){for(var t=this._key.words,r=this.cfg.iv,n=0;4>n;n++)t[n]=16711935&(t[n]<<8|t[n]>>>24)|4278255360&(t[n]<<24|t[n]>>>8);var o=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var n=0;4>n;n++)e.call(this);for(var n=0;8>n;n++)i[n]^=o[n+4&7];if(r){var a=r.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,h=f<<16|65535&u;i[0]^=u,i[1]^=p,i[2]^=f,i[3]^=h,i[4]^=u,i[5]^=p,i[6]^=f,i[7]^=h;for(var n=0;4>n;n++)e.call(this)}},_doProcessBlock:function(t,r){var n=this._X;e.call(this),a[0]=n[0]^n[5]>>>16^n[3]<<16,a[1]=n[2]^n[7]>>>16^n[5]<<16,a[2]=n[4]^n[1]>>>16^n[7]<<16,a[3]=n[6]^n[3]>>>16^n[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[r+o]^=a[o]},blockSize:4,ivSize:2});r.Rabbit=o._createHelper(u)}(),t.Rabbit})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._S,e=this._i,r=this._j,n=0,o=0;4>o;o++){e=(e+1)%256,r=(r+t[e])%256;var i=t[e];t[e]=t[r],t[r]=i,n|=t[(t[e]+t[r])%256]<<24-8*o}return this._i=e,this._j=r,n}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=i.RC4=o.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,n=this._S=[],o=0;256>o;o++)n[o]=o;for(var o=0,i=0;256>o;o++){var a=o%r,s=e[a>>>2]>>>24-a%4*8&255;i=(i+n[o]+s)%256;var c=n[o];n[o]=n[i],n[i]=c}this._i=this._j=0},_doProcessBlock:function(t,r){t[r]^=e.call(this)},keySize:8,ivSize:0});r.RC4=o._createHelper(a);var s=i.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)e.call(this)}});r.RC4Drop=o._createHelper(s)}(),t.RC4})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){function r(t,e,r){return t^e^r}function n(t,e,r){return t&e|~t&r}function o(t,e,r){return(t|~e)^r}function i(t,e,r){return t&r|e&~r}function a(t,e,r){return t^(e|~r)}function s(t,e){return t<>>32-e}var c=t,u=c.lib,f=u.WordArray,p=u.Hasher,h=c.algo,l=f.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),d=f.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),m=f.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),y=f.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),g=f.create([0,1518500249,1859775393,2400959708,2840853838]),v=f.create([1352829926,1548603684,1836072691,2053994217,0]),b=h.RIPEMD160=p.extend({_doReset:function(){this._hash=f.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var c=0;16>c;c++){var u=e+c,f=t[u];t[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}var p,h,b,_,w,x,k,B,S,C,A=this._hash.words,F=g.words,I=v.words,P=l.words,D=d.words,T=m.words,O=y.words;x=p=A[0],k=h=A[1],B=b=A[2],S=_=A[3],C=w=A[4];for(var E,c=0;80>c;c+=1)E=p+t[e+P[c]]|0,E+=16>c?r(h,b,_)+F[0]:32>c?n(h,b,_)+F[1]:48>c?o(h,b,_)+F[2]:64>c?i(h,b,_)+F[3]:a(h,b,_)+F[4],E=0|E,E=s(E,T[c]),E=E+w|0,p=w,w=_,_=s(b,10),b=h,h=E,E=x+t[e+D[c]]|0,E+=16>c?a(k,B,S)+I[0]:32>c?i(k,B,S)+I[1]:48>c?o(k,B,S)+I[2]:64>c?n(k,B,S)+I[3]:r(k,B,S)+I[4],E=0|E,E=s(E,O[c]),E=E+C|0,x=C,C=S,S=s(B,10),B=k,k=E;E=A[1]+b+S|0,A[1]=A[2]+_+C|0,A[2]=A[3]+w+x|0,A[3]=A[4]+p+k|0,A[4]=A[0]+h+B|0,A[0]=E},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[(n+64>>>9<<4)+14]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var o=this._hash,i=o.words,a=0;5>a;a++){var s=i[a];i[a]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return o},clone:function(){var t=p.clone.call(this);return t._hash=this._hash.clone(),t}});c.RIPEMD160=p._createHelper(b),c.HmacRIPEMD160=p._createHmacHelper(b)}(Math),t.RIPEMD160})},{"./core":52}],76:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=r.Hasher,i=e.algo,a=[],s=i.SHA1=o.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520]); -},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],s=r[3],c=r[4],u=0;80>u;u++){if(16>u)a[u]=0|t[e+u];else{var f=a[u-3]^a[u-8]^a[u-14]^a[u-16];a[u]=f<<1|f>>>31}var p=(n<<5|n>>>27)+c+a[u];p+=20>u?(o&i|~o&s)+1518500249:40>u?(o^i^s)+1859775393:60>u?(o&i|o&s|i&s)-1894007588:(o^i^s)-899497514,c=s,s=i,i=o<<30|o>>>2,o=n,n=p}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[(n+64>>>9<<4)+14]=Math.floor(r/4294967296),e[(n+64>>>9<<4)+15]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=o._createHelper(s),e.HmacSHA1=o._createHmacHelper(s)}(),t.SHA1})},{"./core":52}],77:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha256")):"function"==typeof define&&define.amd?define(["./core","./sha256"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=e.algo,i=o.SHA256,a=o.SHA224=i.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=i._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=i._createHelper(a),e.HmacSHA224=i._createHmacHelper(a)}(),t.SHA224})},{"./core":52,"./sha256":78}],78:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.WordArray,i=n.Hasher,a=r.algo,s=[],c=[];!function(){function t(t){for(var r=e.sqrt(t),n=2;r>=n;n++)if(!(t%n))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var n=2,o=0;64>o;)t(n)&&(8>o&&(s[o]=r(e.pow(n,.5))),c[o]=r(e.pow(n,1/3)),o++),n++}();var u=[],f=a.SHA256=i.extend({_doReset:function(){this._hash=new o.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],f=r[5],p=r[6],h=r[7],l=0;64>l;l++){if(16>l)u[l]=0|t[e+l];else{var d=u[l-15],m=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,y=u[l-2],g=(y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10;u[l]=m+u[l-7]+g+u[l-16]}var v=s&f^~s&p,b=n&o^n&i^o&i,_=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),w=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),x=h+w+v+c[l]+u[l],k=_+b;h=p,p=f,f=s,s=a+x|0,a=i,i=o,o=n,n=x+k|0}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+a|0,r[4]=r[4]+s|0,r[5]=r[5]+f|0,r[6]=r[6]+p|0,r[7]=r[7]+h|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,o=8*t.sigBytes;return r[o>>>5]|=128<<24-o%32,r[(o+64>>>9<<4)+14]=e.floor(n/4294967296),r[(o+64>>>9<<4)+15]=n,t.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});r.SHA256=i._createHelper(f),r.HmacSHA256=i._createHmacHelper(f)}(Math),t.SHA256})},{"./core":52}],79:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.WordArray,i=n.Hasher,a=r.x64,s=a.Word,c=r.algo,u=[],f=[],p=[];!function(){for(var t=1,e=0,r=0;24>r;r++){u[t+5*e]=(r+1)*(r+2)/2%64;var n=e%5,o=(2*t+3*e)%5;t=n,e=o}for(var t=0;5>t;t++)for(var e=0;5>e;e++)f[t+5*e]=e+(2*t+3*e)%5*5;for(var i=1,a=0;24>a;a++){for(var c=0,h=0,l=0;7>l;l++){if(1&i){var d=(1<d?h^=1<t;t++)h[t]=s.create()}();var l=c.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;25>e;e++)t[e]=new s.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var r=this._state,n=this.blockSize/2,o=0;n>o;o++){var i=t[e+2*o],a=t[e+2*o+1];i=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8);var s=r[o];s.high^=a,s.low^=i}for(var c=0;24>c;c++){for(var l=0;5>l;l++){for(var d=0,m=0,y=0;5>y;y++){var s=r[l+5*y];d^=s.high,m^=s.low}var g=h[l];g.high=d,g.low=m}for(var l=0;5>l;l++)for(var v=h[(l+4)%5],b=h[(l+1)%5],_=b.high,w=b.low,d=v.high^(_<<1|w>>>31),m=v.low^(w<<1|_>>>31),y=0;5>y;y++){var s=r[l+5*y];s.high^=d,s.low^=m}for(var x=1;25>x;x++){var s=r[x],k=s.high,B=s.low,S=u[x];if(32>S)var d=k<>>32-S,m=B<>>32-S;else var d=B<>>64-S,m=k<>>64-S;var C=h[f[x]];C.high=d,C.low=m}var A=h[0],F=r[0];A.high=F.high,A.low=F.low;for(var l=0;5>l;l++)for(var y=0;5>y;y++){var x=l+5*y,s=r[x],I=h[x],P=h[(l+1)%5+5*y],D=h[(l+2)%5+5*y];s.high=I.high^~P.high&D.high,s.low=I.low^~P.low&D.low}var s=r[0],T=p[c];s.high^=T.high,s.low^=T.low}},_doFinalize:function(){var t=this._data,r=t.words,n=(8*this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(e.ceil((n+1)/i)*i>>>5)-1]|=128,t.sigBytes=4*r.length,this._process();for(var a=this._state,s=this.cfg.outputLength/8,c=s/8,u=[],f=0;c>f;f++){var p=a[f],h=p.high,l=p.low;h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8),l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),u.push(l),u.push(h)}return new o.init(u,s)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;25>r;r++)e[r]=e[r].clone();return t}});r.SHA3=i._createHelper(l),r.HmacSHA3=i._createHmacHelper(l)}(Math),t.SHA3})},{"./core":52,"./x64-core":83}],80:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core"),t("./sha512")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./sha512"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.x64,n=r.Word,o=r.WordArray,i=e.algo,a=i.SHA512,s=i.SHA384=a.extend({_doReset:function(){this._hash=new o.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=a._createHelper(s),e.HmacSHA384=a._createHmacHelper(s)}(),t.SHA384})},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){return a.create.apply(a,arguments)}var r=t,n=r.lib,o=n.Hasher,i=r.x64,a=i.Word,s=i.WordArray,c=r.algo,u=[e(1116352408,3609767458),e(1899447441,602891725),e(3049323471,3964484399),e(3921009573,2173295548),e(961987163,4081628472),e(1508970993,3053834265),e(2453635748,2937671579),e(2870763221,3664609560),e(3624381080,2734883394),e(310598401,1164996542),e(607225278,1323610764),e(1426881987,3590304994),e(1925078388,4068182383),e(2162078206,991336113),e(2614888103,633803317),e(3248222580,3479774868),e(3835390401,2666613458),e(4022224774,944711139),e(264347078,2341262773),e(604807628,2007800933),e(770255983,1495990901),e(1249150122,1856431235),e(1555081692,3175218132),e(1996064986,2198950837),e(2554220882,3999719339),e(2821834349,766784016),e(2952996808,2566594879),e(3210313671,3203337956),e(3336571891,1034457026),e(3584528711,2466948901),e(113926993,3758326383),e(338241895,168717936),e(666307205,1188179964),e(773529912,1546045734),e(1294757372,1522805485),e(1396182291,2643833823),e(1695183700,2343527390),e(1986661051,1014477480),e(2177026350,1206759142),e(2456956037,344077627),e(2730485921,1290863460),e(2820302411,3158454273),e(3259730800,3505952657),e(3345764771,106217008),e(3516065817,3606008344),e(3600352804,1432725776),e(4094571909,1467031594),e(275423344,851169720),e(430227734,3100823752),e(506948616,1363258195),e(659060556,3750685593),e(883997877,3785050280),e(958139571,3318307427),e(1322822218,3812723403),e(1537002063,2003034995),e(1747873779,3602036899),e(1955562222,1575990012),e(2024104815,1125592928),e(2227730452,2716904306),e(2361852424,442776044),e(2428436474,593698344),e(2756734187,3733110249),e(3204031479,2999351573),e(3329325298,3815920427),e(3391569614,3928383900),e(3515267271,566280711),e(3940187606,3454069534),e(4118630271,4000239992),e(116418474,1914138554),e(174292421,2731055270),e(289380356,3203993006),e(460393269,320620315),e(685471733,587496836),e(852142971,1086792851),e(1017036298,365543100),e(1126000580,2618297676),e(1288033470,3409855158),e(1501505948,4234509866),e(1607167915,987167468),e(1816402316,1246189591)],f=[];!function(){for(var t=0;80>t;t++)f[t]=e()}();var p=c.SHA512=o.extend({_doReset:function(){this._hash=new s.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],c=r[5],p=r[6],h=r[7],l=n.high,d=n.low,m=o.high,y=o.low,g=i.high,v=i.low,b=a.high,_=a.low,w=s.high,x=s.low,k=c.high,B=c.low,S=p.high,C=p.low,A=h.high,F=h.low,I=l,P=d,D=m,T=y,O=g,E=v,M=b,H=_,N=w,R=x,j=k,q=B,L=S,z=C,U=A,W=F,J=0;80>J;J++){var G=f[J];if(16>J)var X=G.high=0|t[e+2*J],K=G.low=0|t[e+2*J+1];else{var $=f[J-15],V=$.high,Z=$.low,Y=(V>>>1|Z<<31)^(V>>>8|Z<<24)^V>>>7,Q=(Z>>>1|V<<31)^(Z>>>8|V<<24)^(Z>>>7|V<<25),tt=f[J-2],et=tt.high,rt=tt.low,nt=(et>>>19|rt<<13)^(et<<3|rt>>>29)^et>>>6,ot=(rt>>>19|et<<13)^(rt<<3|et>>>29)^(rt>>>6|et<<26),it=f[J-7],at=it.high,st=it.low,ct=f[J-16],ut=ct.high,ft=ct.low,K=Q+st,X=Y+at+(Q>>>0>K>>>0?1:0),K=K+ot,X=X+nt+(ot>>>0>K>>>0?1:0),K=K+ft,X=X+ut+(ft>>>0>K>>>0?1:0);G.high=X,G.low=K}var pt=N&j^~N&L,ht=R&q^~R&z,lt=I&D^I&O^D&O,dt=P&T^P&E^T&E,mt=(I>>>28|P<<4)^(I<<30|P>>>2)^(I<<25|P>>>7),yt=(P>>>28|I<<4)^(P<<30|I>>>2)^(P<<25|I>>>7),gt=(N>>>14|R<<18)^(N>>>18|R<<14)^(N<<23|R>>>9),vt=(R>>>14|N<<18)^(R>>>18|N<<14)^(R<<23|N>>>9),bt=u[J],_t=bt.high,wt=bt.low,xt=W+vt,kt=U+gt+(W>>>0>xt>>>0?1:0),xt=xt+ht,kt=kt+pt+(ht>>>0>xt>>>0?1:0),xt=xt+wt,kt=kt+_t+(wt>>>0>xt>>>0?1:0),xt=xt+K,kt=kt+X+(K>>>0>xt>>>0?1:0),Bt=yt+dt,St=mt+lt+(yt>>>0>Bt>>>0?1:0);U=L,W=z,L=j,z=q,j=N,q=R,R=H+xt|0,N=M+kt+(H>>>0>R>>>0?1:0)|0,M=O,H=E,O=D,E=T,D=I,T=P,P=xt+Bt|0,I=kt+St+(xt>>>0>P>>>0?1:0)|0}d=n.low=d+P,n.high=l+I+(P>>>0>d>>>0?1:0),y=o.low=y+T,o.high=m+D+(T>>>0>y>>>0?1:0),v=i.low=v+E,i.high=g+O+(E>>>0>v>>>0?1:0),_=a.low=_+H,a.high=b+M+(H>>>0>_>>>0?1:0),x=s.low=x+R,s.high=w+N+(R>>>0>x>>>0?1:0),B=c.low=B+q,c.high=k+j+(q>>>0>B>>>0?1:0),C=p.low=C+z,p.high=S+L+(z>>>0>C>>>0?1:0),F=h.low=F+W,h.high=A+U+(W>>>0>F>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[(n+128>>>10<<5)+30]=Math.floor(r/4294967296),e[(n+128>>>10<<5)+31]=r,t.sigBytes=4*e.length,this._process();var o=this._hash.toX32();return o},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});r.SHA512=o._createHelper(p),r.HmacSHA512=o._createHmacHelper(p)}(),t.SHA512})},{"./core":52,"./x64-core":83}],82:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<n;n++){var o=c[n]-1;r[n]=e[o>>>5]>>>31-o%32&1}for(var i=this._subKeys=[],a=0;16>a;a++){for(var s=i[a]=[],p=f[a],n=0;24>n;n++)s[n/6|0]|=r[(u[n]-1+p)%28]<<31-n%6,s[4+(n/6|0)]|=r[28+(u[n+24]-1+p)%28]<<31-n%6;s[0]=s[0]<<1|s[0]>>>31;for(var n=1;7>n;n++)s[n]=s[n]>>>4*(n-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var h=this._invSubKeys=[],n=0;16>n;n++)h[n]=i[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,n,o){this._lBlock=t[n],this._rBlock=t[n+1],e.call(this,4,252645135),e.call(this,16,65535),r.call(this,2,858993459),r.call(this,8,16711935),e.call(this,1,1431655765);for(var i=0;16>i;i++){for(var a=o[i],s=this._lBlock,c=this._rBlock,u=0,f=0;8>f;f++)u|=p[f][((c^a[f])&h[f])>>>0];this._lBlock=c,this._rBlock=s^u}var l=this._lBlock;this._lBlock=this._rBlock,this._rBlock=l,e.call(this,1,1431655765),r.call(this,8,16711935),r.call(this,2,858993459),e.call(this,16,65535),e.call(this,4,252645135),t[n]=this._lBlock,t[n+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});n.DES=a._createHelper(l);var d=s.TripleDES=a.extend({_doReset:function(){var t=this._key,e=t.words;this._des1=l.createEncryptor(i.create(e.slice(0,2))),this._des2=l.createEncryptor(i.create(e.slice(2,4))),this._des3=l.createEncryptor(i.create(e.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});n.TripleDES=a._createHelper(d)}(),t.TripleDES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.Base,i=n.WordArray,a=r.x64={};a.Word=o.extend({init:function(t,e){this.high=t,this.low=e}}),a.WordArray=o.extend({init:function(t,r){t=this.words=t||[],r!=e?this.sigBytes=r:this.sigBytes=8*t.length},toX32:function(){for(var t=this.words,e=t.length,r=[],n=0;e>n;n++){var o=t[n];r.push(o.high),r.push(o.low)}return i.create(r,this.sigBytes)},clone:function(){for(var t=o.clone.call(this),e=t.words=this.words.slice(0),r=e.length,n=0;r>n;n++)e[n]=e[n].clone();return t}})}(),t})},{"./core":52}],84:[function(t,e,r){!function(t){function n(t){for(var e,r,n=[],o=0,i=t.length;i>o;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(r=t.charCodeAt(o++),56320==(64512&r)?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),o--)):n.push(e);return n}function o(t){for(var e,r=t.length,n=-1,o="";++n65535&&(e-=65536,o+=v(e>>>10&1023|55296),e=56320|1023&e),o+=v(e);return o}function i(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return v(t>>e&63|128)}function s(t){if(0==(4294967168&t))return v(t);var e="";return 0==(4294965248&t)?e=v(t>>6&31|192):0==(4294901760&t)?(i(t),e=v(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=v(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=v(63&t|128)}function c(t){for(var e,r=n(t),o=r.length,i=-1,a="";++i=y)throw Error("Invalid byte index");var t=255&m[g];if(g++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function f(){var t,e,r,n,o;if(g>y)throw Error("Invalid byte index");if(g==y)return!1;if(t=255&m[g],g++,0==(128&t))return t;if(192==(224&t)){var e=u();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=u(),r=u(),o=(15&t)<<12|e<<6|r,o>=2048)return i(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=u(),r=u(),n=u(),o=(15&t)<<18|e<<12|r<<6|n,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function p(t){m=n(t),y=m.length,g=0;for(var e,r=[];(e=f())!==!1;)r.push(e);return o(r)}var h="object"==typeof r&&r,l="object"==typeof e&&e&&e.exports==h&&e,d="object"==typeof global&&global;(d.global===d||d.window===d)&&(t=d);var m,y,g,v=String.fromCharCode,b={version:"2.0.0",encode:c,decode:p};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return b});else if(h&&!h.nodeType)if(l)l.exports=b;else{var _={},w=_.hasOwnProperty;for(var x in b)w.call(b,x)&&(h[x]=b[x])}else t.utf8=b}(this)},{}],"bignumber.js":[function(t,e,r){"use strict";e.exports=BigNumber},{}],web3:[function(t,e,r){var n=t("./lib/web3");"undefined"!=typeof window&&"undefined"==typeof window.Web3&&(window.Web3=n),e.exports=n},{"./lib/web3":22}]},{},["web3"]); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.js b/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.js deleted file mode 100644 index b7504a3..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.js +++ /dev/null @@ -1,15939 +0,0 @@ -require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o. -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - - -},{"./address":4,"./bool":5,"./bytes":6,"./dynamicbytes":8,"./formatters":9,"./int":10,"./real":12,"./string":13,"./uint":15,"./ureal":16}],8:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - - -},{"./formatters":9,"./type":14}],9:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - - -},{"../utils/config":18,"../utils/utils":20,"./param":11,"bignumber.js":"bignumber.js"}],10:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; - -},{"./formatters":9,"./type":14}],11:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - - -},{"../utils/utils":20}],12:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; - -},{"./formatters":9,"./type":14}],13:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - - -},{"./formatters":9,"./type":14}],14:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; - -},{"./formatters":9,"./param":11}],15:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; - -},{"./formatters":9,"./type":14}],16:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; - -},{"./formatters":9,"./type":14}],17:[function(require,module,exports){ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - - -},{}],18:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - - -},{"bignumber.js":"bignumber.js"}],19:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - - -},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; - -},{"./sha3.js":19,"bignumber.js":"bignumber.js","utf8":84}],21:[function(require,module,exports){ -module.exports={ - "version": "0.16.0" -} - -},{}],22:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; - - -Web3.prototype.sha3 = function(string, options) { - return '0x' + sha3(string, options); -}; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - - -},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46}],23:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - - -},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - - -},{"./errors":26,"./jsonrpc":35}],25:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; - -},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - - -},{}],27:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(require,module,exports){ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - - -},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.filterId); - // remove filter async - this.implementation.uninstallFilter(this.filterId, function(){}); - this.callbacks = []; -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - - -},{"../utils/utils":20,"./formatters":30}],30:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw new Error('invalid address'); -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - - -},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// meteor server environment -if (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line - XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line - -// browser -} else if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - - -},{"./errors":26,"xmlhttprequest":17}],33:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '00' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - - -},{"bignumber.js":"bignumber.js"}],34:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - - -},{"../utils/utils":20,"./errors":26}],35:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = function () { - // singleton pattern - if (arguments.callee._singletonInstance) { - return arguments.callee._singletonInstance; - } - arguments.callee._singletonInstance = this; - - this.messageId = 1; -}; - -/** - * @return {Jsonrpc} singleton - */ -Jsonrpc.getInstance = function () { - var instance = new Jsonrpc(); - return instance; -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.prototype.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - return { - jsonrpc: '2.0', - method: method, - params: params || [], - id: this.messageId++ - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.prototype.isValidResponse = function (response) { - return !!response && - !response.error && - response.jsonrpc === '2.0' && - typeof response.id === 'number' && - response.result !== undefined; // only undefined is not valid json object -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.prototype.toBatchPayload = function (messages) { - var self = this; - return messages.map(function (message) { - return self.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - - -},{}],36:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - - -},{"../utils/utils":20,"./errors":26}],37:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; - -},{"../method":36}],38:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - - -},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; - -},{"../../utils/utils":20,"../property":44}],40:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); -var formatters = require('../formatters'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [formatters.inputAddressFormatter, null, null] - }); - - var lockAccount = new Method({ - name: 'lockAccount', - call: 'personal_lockAccount', - params: 1, - inputFormatter: [formatters.inputAddressFormatter] - }); - - return [ - newAccount, - unlockAccount, - lockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; - -},{"../formatters":30,"../method":36,"../property":44}],41:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - - -},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - - -},{"../method":36}],43:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - - -},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - - -},{"../utils/utils":20}],45:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.getInstance().toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.getInstance().isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - - -},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(require,module,exports){ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - - -},{}],47:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - - -},{"../utils/utils":20,"./formatters":30}],48:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - - -},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(require,module,exports){ - -},{}],50:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); -},{"./core":52}],52:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); -},{}],53:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); -},{"./core":52}],54:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); -},{"./core":52}],55:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); -},{"./cipher-core":51,"./core":52}],57:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); -},{"./core":52}],58:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); -},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); -},{"./core":52}],60:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); -},{"./core":52}],61:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); -},{"./cipher-core":51,"./core":52}],62:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); -},{"./cipher-core":51,"./core":52}],63:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); -},{"./cipher-core":51,"./core":52}],64:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); -},{"./cipher-core":51,"./core":52}],65:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); -},{"./cipher-core":51,"./core":52}],66:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); -},{"./cipher-core":51,"./core":52}],67:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); -},{"./cipher-core":51,"./core":52}],68:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); -},{"./cipher-core":51,"./core":52}],69:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); -},{"./cipher-core":51,"./core":52}],70:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); -},{"./cipher-core":51,"./core":52}],71:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); -},{"./core":52}],76:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); -},{"./core":52}],77:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); -},{"./core":52,"./sha256":78}],78:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); -},{"./core":52}],79:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); -},{"./core":52,"./x64-core":83}],80:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); -},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); -},{"./core":52,"./x64-core":83}],82:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); -},{"./core":52}],84:[function(require,module,exports){ -/*! https://mths.be/utf8js v2.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - var byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.0.0', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); - -},{}],"bignumber.js":[function(require,module,exports){ -/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.7 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor( base / ( yc[0] + 1 ) ); - - // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1. - // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) { - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder. - // Trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while ( compare( prod, rem, prodL, remL ) == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if ( n == 0 ) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while ( compare( yc, rem, yL, remL ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); - -},{"crypto":49}],"web3":[function(require,module,exports){ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; - -},{"./lib/web3":22}]},{},["web3"]) -//# sourceMappingURL=web3.js.map diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.js.map b/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.js.map deleted file mode 100644 index 10c3e77..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.js.map +++ /dev/null @@ -1,185 +0,0 @@ -{ - "version": 3, - "sources": [ - "node_modules/browserify/node_modules/browser-pack/_prelude.js", - "lib/contracts/GlobalRegistrar.json", - "lib/contracts/ICAPRegistrar.json", - "lib/contracts/SmartExchange.json", - "lib/solidity/address.js", - "lib/solidity/bool.js", - "lib/solidity/bytes.js", - "lib/solidity/coder.js", - "lib/solidity/dynamicbytes.js", - "lib/solidity/formatters.js", - "lib/solidity/int.js", - "lib/solidity/param.js", - "lib/solidity/real.js", - "lib/solidity/string.js", - "lib/solidity/type.js", - "lib/solidity/uint.js", - "lib/solidity/ureal.js", - "lib/utils/browser-xhr.js", - "lib/utils/config.js", - "lib/utils/sha3.js", - "lib/utils/utils.js", - "lib/version.json", - "lib/web3.js", - "lib/web3/allevents.js", - "lib/web3/batch.js", - "lib/web3/contract.js", - "lib/web3/errors.js", - "lib/web3/event.js", - "lib/web3/extend.js", - "lib/web3/filter.js", - "lib/web3/formatters.js", - "lib/web3/function.js", - "lib/web3/httpprovider.js", - "lib/web3/iban.js", - "lib/web3/ipcprovider.js", - "lib/web3/jsonrpc.js", - "lib/web3/method.js", - "lib/web3/methods/db.js", - "lib/web3/methods/eth.js", - "lib/web3/methods/net.js", - "lib/web3/methods/personal.js", - "lib/web3/methods/shh.js", - "lib/web3/methods/watches.js", - "lib/web3/namereg.js", - "lib/web3/property.js", - "lib/web3/requestmanager.js", - "lib/web3/settings.js", - "lib/web3/syncing.js", - "lib/web3/transfer.js", - "node_modules/browserify/lib/_empty.js", - "node_modules/crypto-js/aes.js", - "node_modules/crypto-js/cipher-core.js", - "node_modules/crypto-js/core.js", - "node_modules/crypto-js/enc-base64.js", - "node_modules/crypto-js/enc-utf16.js", - "node_modules/crypto-js/evpkdf.js", - "node_modules/crypto-js/format-hex.js", - "node_modules/crypto-js/hmac.js", - "node_modules/crypto-js/index.js", - "node_modules/crypto-js/lib-typedarrays.js", - "node_modules/crypto-js/md5.js", - "node_modules/crypto-js/mode-cfb.js", - "node_modules/crypto-js/mode-ctr-gladman.js", - "node_modules/crypto-js/mode-ctr.js", - "node_modules/crypto-js/mode-ecb.js", - "node_modules/crypto-js/mode-ofb.js", - "node_modules/crypto-js/pad-ansix923.js", - "node_modules/crypto-js/pad-iso10126.js", - "node_modules/crypto-js/pad-iso97971.js", - "node_modules/crypto-js/pad-nopadding.js", - "node_modules/crypto-js/pad-zeropadding.js", - "node_modules/crypto-js/pbkdf2.js", - "node_modules/crypto-js/rabbit-legacy.js", - "node_modules/crypto-js/rabbit.js", - "node_modules/crypto-js/rc4.js", - "node_modules/crypto-js/ripemd160.js", - "node_modules/crypto-js/sha1.js", - "node_modules/crypto-js/sha224.js", - "node_modules/crypto-js/sha256.js", - "node_modules/crypto-js/sha3.js", - "node_modules/crypto-js/sha384.js", - "node_modules/crypto-js/sha512.js", - "node_modules/crypto-js/tripledes.js", - "node_modules/crypto-js/x64-core.js", - "node_modules/utf8/utf8.js", - "bignumber.js", - "index.js" - ], - "names": [], - "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrlBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC12BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACruBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3nFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", - "file": "generated.js", - "sourceRoot": "", - "sourcesContent": [ - "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o.\n*/\n/** \n * @file coder.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar f = require('./formatters');\n\nvar SolidityTypeAddress = require('./address');\nvar SolidityTypeBool = require('./bool');\nvar SolidityTypeInt = require('./int');\nvar SolidityTypeUInt = require('./uint');\nvar SolidityTypeDynamicBytes = require('./dynamicbytes');\nvar SolidityTypeString = require('./string');\nvar SolidityTypeReal = require('./real');\nvar SolidityTypeUReal = require('./ureal');\nvar SolidityTypeBytes = require('./bytes');\n\n/**\n * SolidityCoder prototype should be used to encode/decode solidity params of any type\n */\nvar SolidityCoder = function (types) {\n this._types = types;\n};\n\n/**\n * This method should be used to transform type to SolidityType\n *\n * @method _requireType\n * @param {String} type\n * @returns {SolidityType} \n * @throws {Error} throws if no matching type is found\n */\nSolidityCoder.prototype._requireType = function (type) {\n var solidityType = this._types.filter(function (t) {\n return t.isType(type);\n })[0];\n\n if (!solidityType) {\n throw Error('invalid solidity type!: ' + type);\n }\n\n return solidityType;\n};\n\n/**\n * Should be used to encode plain param\n *\n * @method encodeParam\n * @param {String} type\n * @param {Object} plain param\n * @return {String} encoded plain param\n */\nSolidityCoder.prototype.encodeParam = function (type, param) {\n return this.encodeParams([type], [param]);\n};\n\n/**\n * Should be used to encode list of params\n *\n * @method encodeParams\n * @param {Array} types\n * @param {Array} params\n * @return {String} encoded list of params\n */\nSolidityCoder.prototype.encodeParams = function (types, params) {\n var solidityTypes = this.getSolidityTypes(types);\n\n var encodeds = solidityTypes.map(function (solidityType, index) {\n return solidityType.encode(params[index], types[index]);\n });\n\n var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {\n var staticPartLength = solidityType.staticPartLength(types[index]);\n var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;\n return acc + roundedStaticPartLength;\n }, 0);\n\n var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); \n\n return result;\n};\n\nSolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {\n var result = \"\";\n var self = this;\n\n var isDynamic = function (i) {\n return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]);\n };\n\n types.forEach(function (type, i) {\n if (isDynamic(i)) {\n result += f.formatInputInt(dynamicOffset).encode();\n var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n dynamicOffset += e.length / 2;\n } else {\n // don't add length to dynamicOffset. it's already counted\n result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n }\n\n // TODO: figure out nested arrays\n });\n \n types.forEach(function (type, i) {\n if (isDynamic(i)) {\n var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n dynamicOffset += e.length / 2;\n result += e;\n }\n });\n return result;\n};\n\n// TODO: refactor whole encoding!\nSolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {\n var self = this;\n if (solidityType.isDynamicArray(type)) {\n return (function () {\n // offset was already set\n var nestedName = solidityType.nestedName(type);\n var nestedStaticPartLength = solidityType.staticPartLength(nestedName);\n var result = encoded[0];\n \n (function () {\n var previousLength = 2; // in int\n if (solidityType.isDynamicArray(nestedName)) {\n for (var i = 1; i < encoded.length; i++) {\n previousLength += +(encoded[i - 1])[0] || 0;\n result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();\n }\n }\n })();\n \n // first element is length, skip it\n (function () {\n for (var i = 0; i < encoded.length - 1; i++) {\n var additionalOffset = result / 2;\n result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset);\n }\n })();\n\n return result;\n })();\n \n } else if (solidityType.isStaticArray(type)) {\n return (function () {\n var nestedName = solidityType.nestedName(type);\n var nestedStaticPartLength = solidityType.staticPartLength(nestedName);\n var result = \"\";\n\n\n if (solidityType.isDynamicArray(nestedName)) {\n (function () {\n var previousLength = 0; // in int\n for (var i = 0; i < encoded.length; i++) {\n // calculate length of previous item\n previousLength += +(encoded[i - 1] || [])[0] || 0; \n result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();\n }\n })();\n }\n\n (function () {\n for (var i = 0; i < encoded.length; i++) {\n var additionalOffset = result / 2;\n result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset);\n }\n })();\n\n return result;\n })();\n }\n\n return encoded;\n};\n\n/**\n * Should be used to decode bytes to plain param\n *\n * @method decodeParam\n * @param {String} type\n * @param {String} bytes\n * @return {Object} plain param\n */\nSolidityCoder.prototype.decodeParam = function (type, bytes) {\n return this.decodeParams([type], bytes)[0];\n};\n\n/**\n * Should be used to decode list of params\n *\n * @method decodeParam\n * @param {Array} types\n * @param {String} bytes\n * @return {Array} array of plain params\n */\nSolidityCoder.prototype.decodeParams = function (types, bytes) {\n var solidityTypes = this.getSolidityTypes(types);\n var offsets = this.getOffsets(types, solidityTypes);\n \n return solidityTypes.map(function (solidityType, index) {\n return solidityType.decode(bytes, offsets[index], types[index], index);\n });\n};\n\nSolidityCoder.prototype.getOffsets = function (types, solidityTypes) {\n var lengths = solidityTypes.map(function (solidityType, index) {\n return solidityType.staticPartLength(types[index]);\n });\n \n for (var i = 1; i < lengths.length; i++) {\n // sum with length of previous element\n lengths[i] += lengths[i - 1]; \n }\n\n return lengths.map(function (length, index) {\n // remove the current length, so the length is sum of previous elements\n var staticPartLength = solidityTypes[index].staticPartLength(types[index]);\n return length - staticPartLength; \n });\n};\n\nSolidityCoder.prototype.getSolidityTypes = function (types) {\n var self = this;\n return types.map(function (type) {\n return self._requireType(type);\n });\n};\n\nvar coder = new SolidityCoder([\n new SolidityTypeAddress(),\n new SolidityTypeBool(),\n new SolidityTypeInt(),\n new SolidityTypeUInt(),\n new SolidityTypeDynamicBytes(),\n new SolidityTypeBytes(),\n new SolidityTypeString(),\n new SolidityTypeReal(),\n new SolidityTypeUReal()\n]);\n\nmodule.exports = coder;\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\nvar SolidityTypeDynamicBytes = function () {\n this._inputFormatter = f.formatInputDynamicBytes;\n this._outputFormatter = f.formatOutputDynamicBytes;\n};\n\nSolidityTypeDynamicBytes.prototype = new SolidityType({});\nSolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;\n\nSolidityTypeDynamicBytes.prototype.isType = function (name) {\n return !!name.match(/^bytes(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeDynamicBytes.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nSolidityTypeDynamicBytes.prototype.isDynamicType = function () {\n return true;\n};\n\nmodule.exports = SolidityTypeDynamicBytes;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file formatters.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar BigNumber = require('bignumber.js');\nvar utils = require('../utils/utils');\nvar c = require('../utils/config');\nvar SolidityParam = require('./param');\n\n\n/**\n * Formats input value to byte representation of int\n * If value is negative, return it's two's complement\n * If the value is floating point, round it down\n *\n * @method formatInputInt\n * @param {String|Number|BigNumber} value that needs to be formatted\n * @returns {SolidityParam}\n */\nvar formatInputInt = function (value) {\n BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);\n var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64);\n return new SolidityParam(result);\n};\n\n/**\n * Formats input bytes\n *\n * @method formatInputBytes\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputBytes = function (value) {\n var result = utils.toHex(value).substr(2);\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(result);\n};\n\n/**\n * Formats input bytes\n *\n * @method formatDynamicInputBytes\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputDynamicBytes = function (value) {\n var result = utils.toHex(value).substr(2);\n var length = result.length / 2;\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(formatInputInt(length).value + result);\n};\n\n/**\n * Formats input value to byte representation of string\n *\n * @method formatInputString\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputString = function (value) {\n var result = utils.fromUtf8(value).substr(2);\n var length = result.length / 2;\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(formatInputInt(length).value + result);\n};\n\n/**\n * Formats input value to byte representation of bool\n *\n * @method formatInputBool\n * @param {Boolean}\n * @returns {SolidityParam}\n */\nvar formatInputBool = function (value) {\n var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0');\n return new SolidityParam(result);\n};\n\n/**\n * Formats input value to byte representation of real\n * Values are multiplied by 2^m and encoded as integers\n *\n * @method formatInputReal\n * @param {String|Number|BigNumber}\n * @returns {SolidityParam}\n */\nvar formatInputReal = function (value) {\n return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));\n};\n\n/**\n * Check if input value is negative\n *\n * @method signedIsNegative\n * @param {String} value is hex format\n * @returns {Boolean} true if it is negative, otherwise false\n */\nvar signedIsNegative = function (value) {\n return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';\n};\n\n/**\n * Formats right-aligned output bytes to int\n *\n * @method formatOutputInt\n * @param {SolidityParam} param\n * @returns {BigNumber} right-aligned output bytes formatted to big number\n */\nvar formatOutputInt = function (param) {\n var value = param.staticPart() || \"0\";\n\n // check if it's negative number\n // it it is, return two's complement\n if (signedIsNegative(value)) {\n return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);\n }\n return new BigNumber(value, 16);\n};\n\n/**\n * Formats right-aligned output bytes to uint\n *\n * @method formatOutputUInt\n * @param {SolidityParam}\n * @returns {BigNumeber} right-aligned output bytes formatted to uint\n */\nvar formatOutputUInt = function (param) {\n var value = param.staticPart() || \"0\";\n return new BigNumber(value, 16);\n};\n\n/**\n * Formats right-aligned output bytes to real\n *\n * @method formatOutputReal\n * @param {SolidityParam}\n * @returns {BigNumber} input bytes formatted to real\n */\nvar formatOutputReal = function (param) {\n return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); \n};\n\n/**\n * Formats right-aligned output bytes to ureal\n *\n * @method formatOutputUReal\n * @param {SolidityParam}\n * @returns {BigNumber} input bytes formatted to ureal\n */\nvar formatOutputUReal = function (param) {\n return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); \n};\n\n/**\n * Should be used to format output bool\n *\n * @method formatOutputBool\n * @param {SolidityParam}\n * @returns {Boolean} right-aligned input bytes formatted to bool\n */\nvar formatOutputBool = function (param) {\n return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;\n};\n\n/**\n * Should be used to format output bytes\n *\n * @method formatOutputBytes\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} hex string\n */\nvar formatOutputBytes = function (param) {\n return '0x' + param.staticPart();\n};\n\n/**\n * Should be used to format output bytes\n *\n * @method formatOutputDynamicBytes\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} hex string\n */\nvar formatOutputDynamicBytes = function (param) {\n var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;\n return '0x' + param.dynamicPart().substr(64, length);\n};\n\n/**\n * Should be used to format output string\n *\n * @method formatOutputString\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} ascii string\n */\nvar formatOutputString = function (param) {\n var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;\n return utils.toUtf8(param.dynamicPart().substr(64, length));\n};\n\n/**\n * Should be used to format output address\n *\n * @method formatOutputAddress\n * @param {SolidityParam} right-aligned input bytes\n * @returns {String} address\n */\nvar formatOutputAddress = function (param) {\n var value = param.staticPart();\n return \"0x\" + value.slice(value.length - 40, value.length);\n};\n\nmodule.exports = {\n formatInputInt: formatInputInt,\n formatInputBytes: formatInputBytes,\n formatInputDynamicBytes: formatInputDynamicBytes,\n formatInputString: formatInputString,\n formatInputBool: formatInputBool,\n formatInputReal: formatInputReal,\n formatOutputInt: formatOutputInt,\n formatOutputUInt: formatOutputUInt,\n formatOutputReal: formatOutputReal,\n formatOutputUReal: formatOutputUReal,\n formatOutputBool: formatOutputBool,\n formatOutputBytes: formatOutputBytes,\n formatOutputDynamicBytes: formatOutputDynamicBytes,\n formatOutputString: formatOutputString,\n formatOutputAddress: formatOutputAddress\n};\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeInt is a prootype that represents int type\n * It matches:\n * int\n * int[]\n * int[4]\n * int[][]\n * int[3][]\n * int[][6][], ...\n * int32\n * int64[]\n * int8[4]\n * int256[][]\n * int[3][]\n * int64[][6][], ...\n */\nvar SolidityTypeInt = function () {\n this._inputFormatter = f.formatInputInt;\n this._outputFormatter = f.formatOutputInt;\n};\n\nSolidityTypeInt.prototype = new SolidityType({});\nSolidityTypeInt.prototype.constructor = SolidityTypeInt;\n\nSolidityTypeInt.prototype.isType = function (name) {\n return !!name.match(/^int([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeInt.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeInt;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file param.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\n\n/**\n * SolidityParam object prototype.\n * Should be used when encoding, decoding solidity bytes\n */\nvar SolidityParam = function (value, offset) {\n this.value = value || '';\n this.offset = offset; // offset in bytes\n};\n\n/**\n * This method should be used to get length of params's dynamic part\n * \n * @method dynamicPartLength\n * @returns {Number} length of dynamic part (in bytes)\n */\nSolidityParam.prototype.dynamicPartLength = function () {\n return this.dynamicPart().length / 2;\n};\n\n/**\n * This method should be used to create copy of solidity param with different offset\n *\n * @method withOffset\n * @param {Number} offset length in bytes\n * @returns {SolidityParam} new solidity param with applied offset\n */\nSolidityParam.prototype.withOffset = function (offset) {\n return new SolidityParam(this.value, offset);\n};\n\n/**\n * This method should be used to combine solidity params together\n * eg. when appending an array\n *\n * @method combine\n * @param {SolidityParam} param with which we should combine\n * @param {SolidityParam} result of combination\n */\nSolidityParam.prototype.combine = function (param) {\n return new SolidityParam(this.value + param.value); \n};\n\n/**\n * This method should be called to check if param has dynamic size.\n * If it has, it returns true, otherwise false\n *\n * @method isDynamic\n * @returns {Boolean}\n */\nSolidityParam.prototype.isDynamic = function () {\n return this.offset !== undefined;\n};\n\n/**\n * This method should be called to transform offset to bytes\n *\n * @method offsetAsBytes\n * @returns {String} bytes representation of offset\n */\nSolidityParam.prototype.offsetAsBytes = function () {\n return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);\n};\n\n/**\n * This method should be called to get static part of param\n *\n * @method staticPart\n * @returns {String} offset if it is a dynamic param, otherwise value\n */\nSolidityParam.prototype.staticPart = function () {\n if (!this.isDynamic()) {\n return this.value; \n } \n return this.offsetAsBytes();\n};\n\n/**\n * This method should be called to get dynamic part of param\n *\n * @method dynamicPart\n * @returns {String} returns a value if it is a dynamic param, otherwise empty string\n */\nSolidityParam.prototype.dynamicPart = function () {\n return this.isDynamic() ? this.value : '';\n};\n\n/**\n * This method should be called to encode param\n *\n * @method encode\n * @returns {String}\n */\nSolidityParam.prototype.encode = function () {\n return this.staticPart() + this.dynamicPart();\n};\n\n/**\n * This method should be called to encode array of params\n *\n * @method encodeList\n * @param {Array[SolidityParam]} params\n * @returns {String}\n */\nSolidityParam.encodeList = function (params) {\n \n // updating offsets\n var totalOffset = params.length * 32;\n var offsetParams = params.map(function (param) {\n if (!param.isDynamic()) {\n return param;\n }\n var offset = totalOffset;\n totalOffset += param.dynamicPartLength();\n return param.withOffset(offset);\n });\n\n // encode everything!\n return offsetParams.reduce(function (result, param) {\n return result + param.dynamicPart();\n }, offsetParams.reduce(function (result, param) {\n return result + param.staticPart();\n }, ''));\n};\n\n\n\nmodule.exports = SolidityParam;\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeReal is a prootype that represents real type\n * It matches:\n * real\n * real[]\n * real[4]\n * real[][]\n * real[3][]\n * real[][6][], ...\n * real32\n * real64[]\n * real8[4]\n * real256[][]\n * real[3][]\n * real64[][6][], ...\n */\nvar SolidityTypeReal = function () {\n this._inputFormatter = f.formatInputReal;\n this._outputFormatter = f.formatOutputReal;\n};\n\nSolidityTypeReal.prototype = new SolidityType({});\nSolidityTypeReal.prototype.constructor = SolidityTypeReal;\n\nSolidityTypeReal.prototype.isType = function (name) {\n return !!name.match(/real([0-9]*)?(\\[([0-9]*)\\])?/);\n};\n\nSolidityTypeReal.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeReal;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\nvar SolidityTypeString = function () {\n this._inputFormatter = f.formatInputString;\n this._outputFormatter = f.formatOutputString;\n};\n\nSolidityTypeString.prototype = new SolidityType({});\nSolidityTypeString.prototype.constructor = SolidityTypeString;\n\nSolidityTypeString.prototype.isType = function (name) {\n return !!name.match(/^string(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeString.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nSolidityTypeString.prototype.isDynamicType = function () {\n return true;\n};\n\nmodule.exports = SolidityTypeString;\n\n", - "var f = require('./formatters');\nvar SolidityParam = require('./param');\n\n/**\n * SolidityType prototype is used to encode/decode solidity params of certain type\n */\nvar SolidityType = function (config) {\n this._inputFormatter = config.inputFormatter;\n this._outputFormatter = config.outputFormatter;\n};\n\n/**\n * Should be used to determine if this SolidityType do match given name\n *\n * @method isType\n * @param {String} name\n * @return {Bool} true if type match this SolidityType, otherwise false\n */\nSolidityType.prototype.isType = function (name) {\n throw \"this method should be overrwritten for type \" + name;\n};\n\n/**\n * Should be used to determine what is the length of static part in given type\n *\n * @method staticPartLength\n * @param {String} name\n * @return {Number} length of static part in bytes\n */\nSolidityType.prototype.staticPartLength = function (name) {\n throw \"this method should be overrwritten for type: \" + name;\n};\n\n/**\n * Should be used to determine if type is dynamic array\n * eg: \n * \"type[]\" => true\n * \"type[4]\" => false\n *\n * @method isDynamicArray\n * @param {String} name\n * @return {Bool} true if the type is dynamic array \n */\nSolidityType.prototype.isDynamicArray = function (name) {\n var nestedTypes = this.nestedTypes(name);\n return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);\n};\n\n/**\n * Should be used to determine if type is static array\n * eg: \n * \"type[]\" => false\n * \"type[4]\" => true\n *\n * @method isStaticArray\n * @param {String} name\n * @return {Bool} true if the type is static array \n */\nSolidityType.prototype.isStaticArray = function (name) {\n var nestedTypes = this.nestedTypes(name);\n return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);\n};\n\n/**\n * Should return length of static array\n * eg. \n * \"int[32]\" => 32\n * \"int256[14]\" => 14\n * \"int[2][3]\" => 3\n * \"int\" => 1\n * \"int[1]\" => 1\n * \"int[]\" => 1\n *\n * @method staticArrayLength\n * @param {String} name\n * @return {Number} static array length\n */\nSolidityType.prototype.staticArrayLength = function (name) {\n var nestedTypes = this.nestedTypes(name);\n if (nestedTypes) {\n return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);\n }\n return 1;\n};\n\n/**\n * Should return nested type\n * eg.\n * \"int[32]\" => \"int\"\n * \"int256[14]\" => \"int256\"\n * \"int[2][3]\" => \"int[2]\"\n * \"int\" => \"int\"\n * \"int[]\" => \"int\"\n *\n * @method nestedName\n * @param {String} name\n * @return {String} nested name\n */\nSolidityType.prototype.nestedName = function (name) {\n // remove last [] in name\n var nestedTypes = this.nestedTypes(name);\n if (!nestedTypes) {\n return name;\n }\n\n return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);\n};\n\n/**\n * Should return true if type has dynamic size by default\n * such types are \"string\", \"bytes\"\n *\n * @method isDynamicType\n * @param {String} name\n * @return {Bool} true if is dynamic, otherwise false\n */\nSolidityType.prototype.isDynamicType = function () {\n return false;\n};\n\n/**\n * Should return array of nested types\n * eg.\n * \"int[2][3][]\" => [\"[2]\", \"[3]\", \"[]\"]\n * \"int[] => [\"[]\"]\n * \"int\" => null\n *\n * @method nestedTypes\n * @param {String} name\n * @return {Array} array of nested types\n */\nSolidityType.prototype.nestedTypes = function (name) {\n // return list of strings eg. \"[]\", \"[3]\", \"[]\", \"[2]\"\n return name.match(/(\\[[0-9]*\\])/g);\n};\n\n/**\n * Should be used to encode the value\n *\n * @method encode\n * @param {Object} value \n * @param {String} name\n * @return {String} encoded value\n */\nSolidityType.prototype.encode = function (value, name) {\n var self = this;\n if (this.isDynamicArray(name)) {\n\n return (function () {\n var length = value.length; // in int\n var nestedName = self.nestedName(name);\n\n var result = [];\n result.push(f.formatInputInt(length).encode());\n \n value.forEach(function (v) {\n result.push(self.encode(v, nestedName));\n });\n\n return result;\n })();\n\n } else if (this.isStaticArray(name)) {\n\n return (function () {\n var length = self.staticArrayLength(name); // in int\n var nestedName = self.nestedName(name);\n\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(self.encode(value[i], nestedName));\n }\n\n return result;\n })();\n\n }\n\n return this._inputFormatter(value, name).encode();\n};\n\n/**\n * Should be used to decode value from bytes\n *\n * @method decode\n * @param {String} bytes\n * @param {Number} offset in bytes\n * @param {String} name type name\n * @returns {Object} decoded value\n */\nSolidityType.prototype.decode = function (bytes, offset, name) {\n var self = this;\n\n if (this.isDynamicArray(name)) {\n\n return (function () {\n var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes\n var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int\n var arrayStart = arrayOffset + 32; // array starts after length; // in bytes\n\n var nestedName = self.nestedName(name);\n var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes\n var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;\n var result = [];\n\n for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {\n result.push(self.decode(bytes, arrayStart + i, nestedName));\n }\n\n return result;\n })();\n\n } else if (this.isStaticArray(name)) {\n\n return (function () {\n var length = self.staticArrayLength(name); // in int\n var arrayStart = offset; // in bytes\n\n var nestedName = self.nestedName(name);\n var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes\n var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;\n var result = [];\n\n for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {\n result.push(self.decode(bytes, arrayStart + i, nestedName));\n }\n\n return result;\n })();\n } else if (this.isDynamicType(name)) {\n \n return (function () {\n var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes\n var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes\n var roundedLength = Math.floor((length + 31) / 32); // in int\n \n return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0));\n })();\n }\n\n var length = this.staticPartLength(name);\n return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2)));\n};\n\nmodule.exports = SolidityType;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeUInt is a prootype that represents uint type\n * It matches:\n * uint\n * uint[]\n * uint[4]\n * uint[][]\n * uint[3][]\n * uint[][6][], ...\n * uint32\n * uint64[]\n * uint8[4]\n * uint256[][]\n * uint[3][]\n * uint64[][6][], ...\n */\nvar SolidityTypeUInt = function () {\n this._inputFormatter = f.formatInputInt;\n this._outputFormatter = f.formatOutputUInt;\n};\n\nSolidityTypeUInt.prototype = new SolidityType({});\nSolidityTypeUInt.prototype.constructor = SolidityTypeUInt;\n\nSolidityTypeUInt.prototype.isType = function (name) {\n return !!name.match(/^uint([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeUInt.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeUInt;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeUReal is a prootype that represents ureal type\n * It matches:\n * ureal\n * ureal[]\n * ureal[4]\n * ureal[][]\n * ureal[3][]\n * ureal[][6][], ...\n * ureal32\n * ureal64[]\n * ureal8[4]\n * ureal256[][]\n * ureal[3][]\n * ureal64[][6][], ...\n */\nvar SolidityTypeUReal = function () {\n this._inputFormatter = f.formatInputReal;\n this._outputFormatter = f.formatOutputUReal;\n};\n\nSolidityTypeUReal.prototype = new SolidityType({});\nSolidityTypeUReal.prototype.constructor = SolidityTypeUReal;\n\nSolidityTypeUReal.prototype.isType = function (name) {\n return !!name.match(/^ureal([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeUReal.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeUReal;\n", - "'use strict';\n\n// go env doesn't have and need XMLHttpRequest\nif (typeof XMLHttpRequest === 'undefined') {\n exports.XMLHttpRequest = {};\n} else {\n exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line\n}\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file config.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\n/**\n * Utils\n * \n * @module utils\n */\n\n/**\n * Utility functions\n * \n * @class [utils] config\n * @constructor\n */\n\n\n/// required to define ETH_BIGNUMBER_ROUNDING_MODE\nvar BigNumber = require('bignumber.js');\n\nvar ETH_UNITS = [\n 'wei',\n 'kwei',\n 'Mwei',\n 'Gwei',\n 'szabo',\n 'finney',\n 'femtoether',\n 'picoether',\n 'nanoether',\n 'microether',\n 'milliether',\n 'nano',\n 'micro',\n 'milli',\n 'ether',\n 'grand',\n 'Mether',\n 'Gether',\n 'Tether',\n 'Pether',\n 'Eether',\n 'Zether',\n 'Yether',\n 'Nether',\n 'Dether',\n 'Vether',\n 'Uether'\n];\n\nmodule.exports = {\n ETH_PADDING: 32,\n ETH_SIGNATURE_LENGTH: 4,\n ETH_UNITS: ETH_UNITS,\n ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },\n ETH_POLLING_TIMEOUT: 1000/2,\n defaultBlock: 'latest',\n defaultAccount: undefined\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file sha3.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar CryptoJS = require('crypto-js');\nvar sha3 = require('crypto-js/sha3');\n\nmodule.exports = function (value, options) {\n if (options && options.encoding === 'hex') {\n if (value.length > 2 && value.substr(0, 2) === '0x') {\n value = value.substr(2);\n }\n value = CryptoJS.enc.Hex.parse(value);\n }\n\n return sha3(value, {\n outputLength: 256\n }).toString();\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file utils.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\n/**\n * Utils\n *\n * @module utils\n */\n\n/**\n * Utility functions\n *\n * @class [utils] utils\n * @constructor\n */\n\n\nvar BigNumber = require('bignumber.js');\nvar sha3 = require('./sha3.js');\nvar utf8 = require('utf8');\n\nvar unitMap = {\n 'noether': '0', \n 'wei': '1',\n 'kwei': '1000',\n 'Kwei': '1000',\n 'babbage': '1000',\n 'femtoether': '1000',\n 'mwei': '1000000',\n 'Mwei': '1000000',\n 'lovelace': '1000000',\n 'picoether': '1000000',\n 'gwei': '1000000000',\n 'Gwei': '1000000000',\n 'shannon': '1000000000',\n 'nanoether': '1000000000',\n 'nano': '1000000000',\n 'szabo': '1000000000000',\n 'microether': '1000000000000',\n 'micro': '1000000000000',\n 'finney': '1000000000000000',\n 'milliether': '1000000000000000',\n 'milli': '1000000000000000',\n 'ether': '1000000000000000000',\n 'kether': '1000000000000000000000',\n 'grand': '1000000000000000000000',\n 'mether': '1000000000000000000000000',\n 'gether': '1000000000000000000000000000',\n 'tether': '1000000000000000000000000000000'\n};\n\n/**\n * Should be called to pad string to expected length\n *\n * @method padLeft\n * @param {String} string to be padded\n * @param {Number} characters that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar padLeft = function (string, chars, sign) {\n return new Array(chars - string.length + 1).join(sign ? sign : \"0\") + string;\n};\n\n/**\n * Should be called to pad string to expected length\n *\n * @method padRight\n * @param {String} string to be padded\n * @param {Number} characters that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar padRight = function (string, chars, sign) {\n return string + (new Array(chars - string.length + 1).join(sign ? sign : \"0\"));\n};\n\n/**\n * Should be called to get utf8 from it's hex representation\n *\n * @method toUtf8\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nvar toUtf8 = function(hex) {\n// Find termination\n var str = \"\";\n var i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i+=2) {\n var code = parseInt(hex.substr(i, 2), 16);\n if (code === 0)\n break;\n str += String.fromCharCode(code);\n }\n\n return utf8.decode(str);\n};\n\n/**\n * Should be called to get ascii from it's hex representation\n *\n * @method toAscii\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nvar toAscii = function(hex) {\n// Find termination\n var str = \"\";\n var i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i+=2) {\n var code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n\n return str;\n};\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @method fromUtf8\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nvar fromUtf8 = function(str) {\n str = utf8.encode(str);\n var hex = \"\";\n for(var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n if (code === 0)\n break;\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return \"0x\" + hex;\n};\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @method fromAscii\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nvar fromAscii = function(str) {\n var hex = \"\";\n for(var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return \"0x\" + hex;\n};\n\n/**\n * Should be used to create full function/event name from json abi\n *\n * @method transformToFullName\n * @param {Object} json-abi\n * @return {String} full fnction/event name\n */\nvar transformToFullName = function (json) {\n if (json.name.indexOf('(') !== -1) {\n return json.name;\n }\n\n var typeName = json.inputs.map(function(i){return i.type; }).join();\n return json.name + '(' + typeName + ')';\n};\n\n/**\n * Should be called to get display name of contract function\n *\n * @method extractDisplayName\n * @param {String} name of function/event\n * @returns {String} display name for function/event eg. multiply(uint256) -> multiply\n */\nvar extractDisplayName = function (name) {\n var length = name.indexOf('(');\n return length !== -1 ? name.substr(0, length) : name;\n};\n\n/// @returns overloaded part of function/event name\nvar extractTypeName = function (name) {\n /// TODO: make it invulnerable\n var length = name.indexOf('(');\n return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : \"\";\n};\n\n/**\n * Converts value to it's decimal representation in string\n *\n * @method toDecimal\n * @param {String|Number|BigNumber}\n * @return {String}\n */\nvar toDecimal = function (value) {\n return toBigNumber(value).toNumber();\n};\n\n/**\n * Converts value to it's hex representation\n *\n * @method fromDecimal\n * @param {String|Number|BigNumber}\n * @return {String}\n */\nvar fromDecimal = function (value) {\n var number = toBigNumber(value);\n var result = number.toString(16);\n\n return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;\n};\n\n/**\n * Auto converts any given value into it's hex representation.\n *\n * And even stringifys objects before.\n *\n * @method toHex\n * @param {String|Number|BigNumber|Object}\n * @return {String}\n */\nvar toHex = function (val) {\n /*jshint maxcomplexity: 8 */\n\n if (isBoolean(val))\n return fromDecimal(+val);\n\n if (isBigNumber(val))\n return fromDecimal(val);\n\n if (isObject(val))\n return fromUtf8(JSON.stringify(val));\n\n // if its a negative number, pass it through fromDecimal\n if (isString(val)) {\n if (val.indexOf('-0x') === 0)\n return fromDecimal(val);\n else if(val.indexOf('0x') === 0)\n return val;\n else if (!isFinite(val))\n return fromAscii(val);\n }\n\n return fromDecimal(val);\n};\n\n/**\n * Returns value of unit in Wei\n *\n * @method getValueOfUnit\n * @param {String} unit the unit to convert to, default ether\n * @returns {BigNumber} value of the unit (in Wei)\n * @throws error if the unit is not correct:w\n */\nvar getValueOfUnit = function (unit) {\n unit = unit ? unit.toLowerCase() : 'ether';\n var unitValue = unitMap[unit];\n if (unitValue === undefined) {\n throw new Error('This unit doesn\\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));\n }\n return new BigNumber(unitValue, 10);\n};\n\n/**\n * Takes a number of wei and converts it to any other ether unit.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method fromWei\n * @param {Number|String} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert to, default ether\n * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number\n*/\nvar fromWei = function(number, unit) {\n var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));\n\n return isBigNumber(number) ? returnValue : returnValue.toString(10);\n};\n\n/**\n * Takes a number of a unit and converts it to wei.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method toWei\n * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert from, default ether\n * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number\n*/\nvar toWei = function(number, unit) {\n var returnValue = toBigNumber(number).times(getValueOfUnit(unit));\n\n return isBigNumber(number) ? returnValue : returnValue.toString(10);\n};\n\n/**\n * Takes an input and transforms it into an bignumber\n *\n * @method toBigNumber\n * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber\n * @return {BigNumber} BigNumber\n*/\nvar toBigNumber = function(number) {\n /*jshint maxcomplexity:5 */\n number = number || 0;\n if (isBigNumber(number))\n return number;\n\n if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {\n return new BigNumber(number.replace('0x',''), 16);\n }\n\n return new BigNumber(number.toString(10), 10);\n};\n\n/**\n * Takes and input transforms it into bignumber and if it is negative value, into two's complement\n *\n * @method toTwosComplement\n * @param {Number|String|BigNumber}\n * @return {BigNumber}\n */\nvar toTwosComplement = function (number) {\n var bigNumber = toBigNumber(number);\n if (bigNumber.lessThan(0)) {\n return new BigNumber(\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\", 16).plus(bigNumber).plus(1);\n }\n return bigNumber;\n};\n\n/**\n * Checks if the given string is strictly an address\n *\n * @method isStrictAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isStrictAddress = function (address) {\n return /^0x[0-9a-f]{40}$/i.test(address);\n};\n\n/**\n * Checks if the given string is an address\n *\n * @method isAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isAddress = function (address) {\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n // check if it has the basic requirements of an address\n return false;\n } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {\n // If it's all small caps or all all caps, return true\n return true;\n } else {\n // Otherwise check each case\n return isChecksumAddress(address);\n }\n};\n\n\n\n/**\n * Checks if the given string is a checksummed address\n *\n * @method isChecksumAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isChecksumAddress = function (address) { \n // Check each case\n address = address.replace('0x','');\n var addressHash = sha3(address.toLowerCase());\n\n for (var i = 0; i < 40; i++ ) { \n // the nth letter should be uppercase if the nth digit of casemap is 1\n if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {\n return false;\n }\n }\n return true; \n};\n\n\n\n/**\n * Makes a checksum address\n *\n * @method toChecksumAddress\n * @param {String} address the given HEX adress\n * @return {String}\n*/\nvar toChecksumAddress = function (address) { \n if (typeof address === 'undefined') return '';\n\n address = address.toLowerCase().replace('0x','');\n var addressHash = sha3(address);\n var checksumAddress = '0x';\n\n for (var i = 0; i < address.length; i++ ) { \n // If ith character is 9 to f then make it uppercase \n if (parseInt(addressHash[i], 16) > 7) {\n checksumAddress += address[i].toUpperCase();\n } else {\n checksumAddress += address[i];\n }\n }\n return checksumAddress;\n};\n\n/**\n * Transforms given string to valid 20 bytes-length addres with 0x prefix\n *\n * @method toAddress\n * @param {String} address\n * @return {String} formatted address\n */\nvar toAddress = function (address) {\n if (isStrictAddress(address)) {\n return address;\n }\n\n if (/^[0-9a-f]{40}$/.test(address)) {\n return '0x' + address;\n }\n\n return '0x' + padLeft(toHex(address).substr(2), 40);\n};\n\n/**\n * Returns true if object is BigNumber, otherwise false\n *\n * @method isBigNumber\n * @param {Object}\n * @return {Boolean}\n */\nvar isBigNumber = function (object) {\n return object instanceof BigNumber ||\n (object && object.constructor && object.constructor.name === 'BigNumber');\n};\n\n/**\n * Returns true if object is string, otherwise false\n *\n * @method isString\n * @param {Object}\n * @return {Boolean}\n */\nvar isString = function (object) {\n return typeof object === 'string' ||\n (object && object.constructor && object.constructor.name === 'String');\n};\n\n/**\n * Returns true if object is function, otherwise false\n *\n * @method isFunction\n * @param {Object}\n * @return {Boolean}\n */\nvar isFunction = function (object) {\n return typeof object === 'function';\n};\n\n/**\n * Returns true if object is Objet, otherwise false\n *\n * @method isObject\n * @param {Object}\n * @return {Boolean}\n */\nvar isObject = function (object) {\n return typeof object === 'object';\n};\n\n/**\n * Returns true if object is boolean, otherwise false\n *\n * @method isBoolean\n * @param {Object}\n * @return {Boolean}\n */\nvar isBoolean = function (object) {\n return typeof object === 'boolean';\n};\n\n/**\n * Returns true if object is array, otherwise false\n *\n * @method isArray\n * @param {Object}\n * @return {Boolean}\n */\nvar isArray = function (object) {\n return object instanceof Array;\n};\n\n/**\n * Returns true if given string is valid json object\n *\n * @method isJson\n * @param {String}\n * @return {Boolean}\n */\nvar isJson = function (str) {\n try {\n return !!JSON.parse(str);\n } catch (e) {\n return false;\n }\n};\n\nmodule.exports = {\n padLeft: padLeft,\n padRight: padRight,\n toHex: toHex,\n toDecimal: toDecimal,\n fromDecimal: fromDecimal,\n toUtf8: toUtf8,\n toAscii: toAscii,\n fromUtf8: fromUtf8,\n fromAscii: fromAscii,\n transformToFullName: transformToFullName,\n extractDisplayName: extractDisplayName,\n extractTypeName: extractTypeName,\n toWei: toWei,\n fromWei: fromWei,\n toBigNumber: toBigNumber,\n toTwosComplement: toTwosComplement,\n toAddress: toAddress,\n isBigNumber: isBigNumber,\n isStrictAddress: isStrictAddress,\n isAddress: isAddress,\n isChecksumAddress: isChecksumAddress,\n toChecksumAddress: toChecksumAddress,\n isFunction: isFunction,\n isString: isString,\n isObject: isObject,\n isBoolean: isBoolean,\n isArray: isArray,\n isJson: isJson\n};\n", - "module.exports={\n \"version\": \"0.16.0\"\n}\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file web3.js\n * @authors:\n * Jeffrey Wilcke \n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * Gav Wood \n * @date 2014\n */\n\nvar RequestManager = require('./web3/requestmanager');\nvar Iban = require('./web3/iban');\nvar Eth = require('./web3/methods/eth');\nvar DB = require('./web3/methods/db');\nvar Shh = require('./web3/methods/shh');\nvar Net = require('./web3/methods/net');\nvar Personal = require('./web3/methods/personal');\nvar Settings = require('./web3/settings');\nvar version = require('./version.json');\nvar utils = require('./utils/utils');\nvar sha3 = require('./utils/sha3');\nvar extend = require('./web3/extend');\nvar Batch = require('./web3/batch');\nvar Property = require('./web3/property');\nvar HttpProvider = require('./web3/httpprovider');\nvar IpcProvider = require('./web3/ipcprovider');\n\n\n\nfunction Web3 (provider) {\n this._requestManager = new RequestManager(provider);\n this.currentProvider = provider;\n this.eth = new Eth(this);\n this.db = new DB(this);\n this.shh = new Shh(this);\n this.net = new Net(this);\n this.personal = new Personal(this);\n this.settings = new Settings();\n this.version = {\n api: version.version\n };\n this.providers = {\n HttpProvider: HttpProvider,\n IpcProvider: IpcProvider\n };\n this._extend = extend(this);\n this._extend({\n properties: properties()\n });\n}\n\n// expose providers on the class\nWeb3.providers = {\n HttpProvider: HttpProvider,\n IpcProvider: IpcProvider\n};\n\nWeb3.prototype.setProvider = function (provider) {\n this._requestManager.setProvider(provider);\n this.currentProvider = provider;\n};\n\nWeb3.prototype.reset = function (keepIsSyncing) {\n this._requestManager.reset(keepIsSyncing);\n this.settings = new Settings();\n};\n\nWeb3.prototype.toHex = utils.toHex;\nWeb3.prototype.toAscii = utils.toAscii;\nWeb3.prototype.toUtf8 = utils.toUtf8;\nWeb3.prototype.fromAscii = utils.fromAscii;\nWeb3.prototype.fromUtf8 = utils.fromUtf8;\nWeb3.prototype.toDecimal = utils.toDecimal;\nWeb3.prototype.fromDecimal = utils.fromDecimal;\nWeb3.prototype.toBigNumber = utils.toBigNumber;\nWeb3.prototype.toWei = utils.toWei;\nWeb3.prototype.fromWei = utils.fromWei;\nWeb3.prototype.isAddress = utils.isAddress;\nWeb3.prototype.isChecksumAddress = utils.isChecksumAddress;\nWeb3.prototype.toChecksumAddress = utils.toChecksumAddress;\nWeb3.prototype.isIBAN = utils.isIBAN;\n\n\nWeb3.prototype.sha3 = function(string, options) {\n return '0x' + sha3(string, options);\n};\n\n/**\n * Transforms direct icap to address\n */\nWeb3.prototype.fromICAP = function (icap) {\n var iban = new Iban(icap);\n return iban.address();\n};\n\nvar properties = function () {\n return [\n new Property({\n name: 'version.node',\n getter: 'web3_clientVersion'\n }),\n new Property({\n name: 'version.network',\n getter: 'net_version',\n inputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'version.ethereum',\n getter: 'eth_protocolVersion',\n inputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'version.whisper',\n getter: 'shh_version',\n inputFormatter: utils.toDecimal\n })\n ];\n};\n\nWeb3.prototype.isConnected = function(){\n return (this.currentProvider && this.currentProvider.isConnected());\n};\n\nWeb3.prototype.createBatch = function () {\n return new Batch(this);\n};\n\nmodule.exports = Web3;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file allevents.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar sha3 = require('../utils/sha3');\nvar SolidityEvent = require('./event');\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\nvar Filter = require('./filter');\nvar watches = require('./methods/watches');\n\nvar AllSolidityEvents = function (requestManager, json, address) {\n this._requestManager = requestManager;\n this._json = json;\n this._address = address;\n};\n\nAllSolidityEvents.prototype.encode = function (options) {\n options = options || {};\n var result = {};\n\n ['fromBlock', 'toBlock'].filter(function (f) {\n return options[f] !== undefined;\n }).forEach(function (f) {\n result[f] = formatters.inputBlockNumberFormatter(options[f]);\n });\n\n result.address = this._address;\n\n return result;\n};\n\nAllSolidityEvents.prototype.decode = function (data) {\n data.data = data.data || '';\n data.topics = data.topics || [];\n\n var eventTopic = data.topics[0].slice(2);\n var match = this._json.filter(function (j) {\n return eventTopic === sha3(utils.transformToFullName(j));\n })[0];\n\n if (!match) { // cannot find matching event?\n console.warn('cannot find event for log');\n return data;\n }\n\n var event = new SolidityEvent(this._requestManager, match, this._address);\n return event.decode(data);\n};\n\nAllSolidityEvents.prototype.execute = function (options, callback) {\n\n if (utils.isFunction(arguments[arguments.length - 1])) {\n callback = arguments[arguments.length - 1];\n if(arguments.length === 1)\n options = null;\n }\n\n var o = this.encode(options);\n var formatter = this.decode.bind(this);\n return new Filter(this._requestManager, o, watches.eth(), formatter, callback);\n};\n\nAllSolidityEvents.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n contract.allEvents = execute;\n};\n\nmodule.exports = AllSolidityEvents;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file batch.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar Jsonrpc = require('./jsonrpc');\nvar errors = require('./errors');\n\nvar Batch = function (web3) {\n this.requestManager = web3._requestManager;\n this.requests = [];\n};\n\n/**\n * Should be called to add create new request to batch request\n *\n * @method add\n * @param {Object} jsonrpc requet object\n */\nBatch.prototype.add = function (request) {\n this.requests.push(request);\n};\n\n/**\n * Should be called to execute batch request\n *\n * @method execute\n */\nBatch.prototype.execute = function () {\n var requests = this.requests;\n this.requestManager.sendBatch(requests, function (err, results) {\n results = results || [];\n requests.map(function (request, index) {\n return results[index] || {};\n }).forEach(function (result, index) {\n if (requests[index].callback) {\n\n if (!Jsonrpc.getInstance().isValidResponse(result)) {\n return requests[index].callback(errors.InvalidResponse(result));\n }\n\n requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));\n }\n });\n }); \n};\n\nmodule.exports = Batch;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file contract.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar utils = require('../utils/utils');\nvar coder = require('../solidity/coder');\nvar SolidityEvent = require('./event');\nvar SolidityFunction = require('./function');\nvar AllEvents = require('./allevents');\n\n/**\n * Should be called to encode constructor params\n *\n * @method encodeConstructorParams\n * @param {Array} abi\n * @param {Array} constructor params\n */\nvar encodeConstructorParams = function (abi, params) {\n return abi.filter(function (json) {\n return json.type === 'constructor' && json.inputs.length === params.length;\n }).map(function (json) {\n return json.inputs.map(function (input) {\n return input.type;\n });\n }).map(function (types) {\n return coder.encodeParams(types, params);\n })[0] || '';\n};\n\n/**\n * Should be called to add functions to contract object\n *\n * @method addFunctionsToContract\n * @param {Contract} contract\n * @param {Array} abi\n */\nvar addFunctionsToContract = function (contract) {\n contract.abi.filter(function (json) {\n return json.type === 'function';\n }).map(function (json) {\n return new SolidityFunction(contract._eth, json, contract.address);\n }).forEach(function (f) {\n f.attachToContract(contract);\n });\n};\n\n/**\n * Should be called to add events to contract object\n *\n * @method addEventsToContract\n * @param {Contract} contract\n * @param {Array} abi\n */\nvar addEventsToContract = function (contract) {\n var events = contract.abi.filter(function (json) {\n return json.type === 'event';\n });\n\n var All = new AllEvents(contract._eth._requestManager, events, contract.address);\n All.attachToContract(contract);\n\n events.map(function (json) {\n return new SolidityEvent(contract._eth._requestManager, json, contract.address);\n }).forEach(function (e) {\n e.attachToContract(contract);\n });\n};\n\n\n/**\n * Should be called to check if the contract gets properly deployed on the blockchain.\n *\n * @method checkForContractAddress\n * @param {Object} contract\n * @param {Function} callback\n * @returns {Undefined}\n */\nvar checkForContractAddress = function(contract, callback){\n var count = 0,\n callbackFired = false;\n\n // wait for receipt\n var filter = contract._eth.filter('latest', function(e){\n if (!e && !callbackFired) {\n count++;\n\n // stop watching after 50 blocks (timeout)\n if (count > 50) {\n\n filter.stopWatching();\n callbackFired = true;\n\n if (callback)\n callback(new Error('Contract transaction couldn\\'t be found after 50 blocks'));\n else\n throw new Error('Contract transaction couldn\\'t be found after 50 blocks');\n\n\n } else {\n\n contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){\n if(receipt && !callbackFired) {\n\n contract._eth.getCode(receipt.contractAddress, function(e, code){\n /*jshint maxcomplexity: 6 */\n\n if(callbackFired || !code)\n return;\n\n filter.stopWatching();\n callbackFired = true;\n\n if(code.length > 2) {\n\n // console.log('Contract code deployed!');\n\n contract.address = receipt.contractAddress;\n\n // attach events and methods again after we have\n addFunctionsToContract(contract);\n addEventsToContract(contract);\n\n // call callback for the second time\n if(callback)\n callback(null, contract);\n\n } else {\n if(callback)\n callback(new Error('The contract code couldn\\'t be stored, please check your gas amount.'));\n else\n throw new Error('The contract code couldn\\'t be stored, please check your gas amount.');\n }\n });\n }\n });\n }\n }\n });\n};\n\n/**\n * Should be called to create new ContractFactory instance\n *\n * @method ContractFactory\n * @param {Array} abi\n */\nvar ContractFactory = function (eth, abi) {\n this.eth = eth;\n this.abi = abi;\n\n /**\n * Should be called to create new contract on a blockchain\n *\n * @method new\n * @param {Any} contract constructor param1 (optional)\n * @param {Any} contract constructor param2 (optional)\n * @param {Object} contract transaction object (required)\n * @param {Function} callback\n * @returns {Contract} returns contract instance\n */\n this.new = function () {\n var contract = new Contract(this.eth, this.abi);\n\n // parse arguments\n var options = {}; // required!\n var callback;\n\n var args = Array.prototype.slice.call(arguments);\n if (utils.isFunction(args[args.length - 1])) {\n callback = args.pop();\n }\n\n var last = args[args.length - 1];\n if (utils.isObject(last) && !utils.isArray(last)) {\n options = args.pop();\n }\n\n var bytes = encodeConstructorParams(this.abi, args);\n options.data += bytes;\n\n if (callback) {\n\n // wait for the contract address adn check if the code was deployed\n this.eth.sendTransaction(options, function (err, hash) {\n if (err) {\n callback(err);\n } else {\n // add the transaction hash\n contract.transactionHash = hash;\n\n // call callback for the first time\n callback(null, contract);\n\n checkForContractAddress(contract, callback);\n }\n });\n } else {\n var hash = this.eth.sendTransaction(options);\n // add the transaction hash\n contract.transactionHash = hash;\n checkForContractAddress(contract);\n }\n\n return contract;\n };\n\n this.new.getData = this.getData.bind(this);\n};\n\n/**\n * Should be called to create new ContractFactory\n *\n * @method contract\n * @param {Array} abi\n * @returns {ContractFactory} new contract factory\n */\n//var contract = function (abi) {\n //return new ContractFactory(abi);\n//};\n\n\n\n/**\n * Should be called to get access to existing contract on a blockchain\n *\n * @method at\n * @param {Address} contract address (required)\n * @param {Function} callback {optional)\n * @returns {Contract} returns contract if no callback was passed,\n * otherwise calls callback function (err, contract)\n */\nContractFactory.prototype.at = function (address, callback) {\n var contract = new Contract(this.eth, this.abi, address);\n\n // this functions are not part of prototype,\n // because we dont want to spoil the interface\n addFunctionsToContract(contract);\n addEventsToContract(contract);\n\n if (callback) {\n callback(null, contract);\n }\n return contract;\n};\n\n/**\n * Gets the data, which is data to deploy plus constructor params\n *\n * @method getData\n */\nContractFactory.prototype.getData = function () {\n var options = {}; // required!\n var args = Array.prototype.slice.call(arguments);\n\n var last = args[args.length - 1];\n if (utils.isObject(last) && !utils.isArray(last)) {\n options = args.pop();\n }\n\n var bytes = encodeConstructorParams(this.abi, args);\n options.data += bytes;\n\n return options.data;\n};\n\n/**\n * Should be called to create new contract instance\n *\n * @method Contract\n * @param {Array} abi\n * @param {Address} contract address\n */\nvar Contract = function (eth, abi, address) {\n this._eth = eth;\n this.transactionHash = null;\n this.address = address;\n this.abi = abi;\n};\n\nmodule.exports = ContractFactory;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file errors.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nmodule.exports = {\n InvalidNumberOfParams: function () {\n return new Error('Invalid number of input parameters');\n },\n InvalidConnection: function (host){\n return new Error('CONNECTION ERROR: Couldn\\'t connect to node '+ host +'.');\n },\n InvalidProvider: function () {\n return new Error('Provider not set or invalid');\n },\n InvalidResponse: function (result){\n var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);\n return new Error(message);\n }\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file event.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar utils = require('../utils/utils');\nvar coder = require('../solidity/coder');\nvar formatters = require('./formatters');\nvar sha3 = require('../utils/sha3');\nvar Filter = require('./filter');\nvar watches = require('./methods/watches');\n\n/**\n * This prototype should be used to create event filters\n */\nvar SolidityEvent = function (requestManager, json, address) {\n this._requestManager = requestManager;\n this._params = json.inputs;\n this._name = utils.transformToFullName(json);\n this._address = address;\n this._anonymous = json.anonymous;\n};\n\n/**\n * Should be used to get filtered param types\n *\n * @method types\n * @param {Bool} decide if returned typed should be indexed\n * @return {Array} array of types\n */\nSolidityEvent.prototype.types = function (indexed) {\n return this._params.filter(function (i) {\n return i.indexed === indexed;\n }).map(function (i) {\n return i.type;\n });\n};\n\n/**\n * Should be used to get event display name\n *\n * @method displayName\n * @return {String} event display name\n */\nSolidityEvent.prototype.displayName = function () {\n return utils.extractDisplayName(this._name);\n};\n\n/**\n * Should be used to get event type name\n *\n * @method typeName\n * @return {String} event type name\n */\nSolidityEvent.prototype.typeName = function () {\n return utils.extractTypeName(this._name);\n};\n\n/**\n * Should be used to get event signature\n *\n * @method signature\n * @return {String} event signature\n */\nSolidityEvent.prototype.signature = function () {\n return sha3(this._name);\n};\n\n/**\n * Should be used to encode indexed params and options to one final object\n * \n * @method encode\n * @param {Object} indexed\n * @param {Object} options\n * @return {Object} everything combined together and encoded\n */\nSolidityEvent.prototype.encode = function (indexed, options) {\n indexed = indexed || {};\n options = options || {};\n var result = {};\n\n ['fromBlock', 'toBlock'].filter(function (f) {\n return options[f] !== undefined;\n }).forEach(function (f) {\n result[f] = formatters.inputBlockNumberFormatter(options[f]);\n });\n\n result.topics = [];\n\n result.address = this._address;\n if (!this._anonymous) {\n result.topics.push('0x' + this.signature());\n }\n\n var indexedTopics = this._params.filter(function (i) {\n return i.indexed === true;\n }).map(function (i) {\n var value = indexed[i.name];\n if (value === undefined || value === null) {\n return null;\n }\n \n if (utils.isArray(value)) {\n return value.map(function (v) {\n return '0x' + coder.encodeParam(i.type, v);\n });\n }\n return '0x' + coder.encodeParam(i.type, value);\n });\n\n result.topics = result.topics.concat(indexedTopics);\n\n return result;\n};\n\n/**\n * Should be used to decode indexed params and options\n *\n * @method decode\n * @param {Object} data\n * @return {Object} result object with decoded indexed && not indexed params\n */\nSolidityEvent.prototype.decode = function (data) {\n \n data.data = data.data || '';\n data.topics = data.topics || [];\n\n var argTopics = this._anonymous ? data.topics : data.topics.slice(1);\n var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(\"\");\n var indexedParams = coder.decodeParams(this.types(true), indexedData); \n\n var notIndexedData = data.data.slice(2);\n var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData);\n \n var result = formatters.outputLogFormatter(data);\n result.event = this.displayName();\n result.address = data.address;\n\n result.args = this._params.reduce(function (acc, current) {\n acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();\n return acc;\n }, {});\n\n delete result.data;\n delete result.topics;\n\n return result;\n};\n\n/**\n * Should be used to create new filter object from event\n *\n * @method execute\n * @param {Object} indexed\n * @param {Object} options\n * @return {Object} filter object\n */\nSolidityEvent.prototype.execute = function (indexed, options, callback) {\n\n if (utils.isFunction(arguments[arguments.length - 1])) {\n callback = arguments[arguments.length - 1];\n if(arguments.length === 2)\n options = null;\n if(arguments.length === 1) {\n options = null;\n indexed = {};\n }\n }\n \n var o = this.encode(indexed, options);\n var formatter = this.decode.bind(this);\n return new Filter(this._requestManager, o, watches.eth(), formatter, callback);\n};\n\n/**\n * Should be used to attach event to contract object\n *\n * @method attachToContract\n * @param {Contract}\n */\nSolidityEvent.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n var displayName = this.displayName();\n if (!contract[displayName]) {\n contract[displayName] = execute;\n }\n contract[displayName][this.typeName()] = this.execute.bind(this, contract);\n};\n\nmodule.exports = SolidityEvent;\n\n", - "var formatters = require('./formatters');\nvar utils = require('./../utils/utils');\nvar Method = require('./method');\nvar Property = require('./property');\n\n// TODO: refactor, so the input params are not altered.\n// it's necessary to make same 'extension' work with multiple providers\nvar extend = function (web3) {\n /* jshint maxcomplexity:5 */\n var ex = function (extension) {\n\n var extendedObject;\n if (extension.property) {\n if (!web3[extension.property]) {\n web3[extension.property] = {};\n }\n extendedObject = web3[extension.property];\n } else {\n extendedObject = web3;\n }\n\n if (extension.methods) {\n extension.methods.forEach(function (method) {\n method.attachToObject(extendedObject);\n method.setRequestManager(web3._requestManager);\n });\n }\n\n if (extension.properties) {\n extension.properties.forEach(function (property) {\n property.attachToObject(extendedObject);\n property.setRequestManager(web3._requestManager);\n });\n }\n };\n\n ex.formatters = formatters; \n ex.utils = utils;\n ex.Method = Method;\n ex.Property = Property;\n\n return ex;\n};\n\n\n\nmodule.exports = extend;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file filter.js\n * @authors:\n * Jeffrey Wilcke \n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * Gav Wood \n * @date 2014\n */\n\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\n\n/**\n* Converts a given topic to a hex string, but also allows null values.\n*\n* @param {Mixed} value\n* @return {String}\n*/\nvar toTopic = function(value){\n\n if(value === null || typeof value === 'undefined')\n return null;\n\n value = String(value);\n\n if(value.indexOf('0x') === 0)\n return value;\n else\n return utils.fromUtf8(value);\n};\n\n/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones\n/// @param should be string or object\n/// @returns options string or object\nvar getOptions = function (options) {\n\n if (utils.isString(options)) {\n return options;\n }\n\n options = options || {};\n\n // make sure topics, get converted to hex\n options.topics = options.topics || [];\n options.topics = options.topics.map(function(topic){\n return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);\n });\n\n return {\n topics: options.topics,\n from: options.from,\n to: options.to,\n address: options.address,\n fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),\n toBlock: formatters.inputBlockNumberFormatter(options.toBlock)\n };\n};\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method getLogsAtStart\n@param {Object} self\n@param {funciton}\n*/\nvar getLogsAtStart = function(self, callback){\n // call getFilterLogs for the first watch callback start\n if (!utils.isString(self.options)) {\n self.get(function (err, messages) {\n // don't send all the responses to all the watches again... just to self one\n if (err) {\n callback(err);\n }\n\n if(utils.isArray(messages)) {\n messages.forEach(function (message) {\n callback(null, message);\n });\n }\n });\n }\n};\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method pollFilter\n@param {Object} self\n*/\nvar pollFilter = function(self) {\n\n var onMessage = function (error, messages) {\n if (error) {\n return self.callbacks.forEach(function (callback) {\n callback(error);\n });\n }\n\n if(utils.isArray(messages)) {\n messages.forEach(function (message) {\n message = self.formatter ? self.formatter(message) : message;\n self.callbacks.forEach(function (callback) {\n callback(null, message);\n });\n });\n }\n };\n\n self.requestManager.startPolling({\n method: self.implementation.poll.call,\n params: [self.filterId],\n }, self.filterId, onMessage, self.stopWatching.bind(self));\n\n};\n\nvar Filter = function (requestManager, options, methods, formatter, callback) {\n var self = this;\n var implementation = {};\n methods.forEach(function (method) {\n method.setRequestManager(requestManager);\n method.attachToObject(implementation);\n });\n this.requestManager = requestManager;\n this.options = getOptions(options);\n this.implementation = implementation;\n this.filterId = null;\n this.callbacks = [];\n this.getLogsCallbacks = [];\n this.pollFilters = [];\n this.formatter = formatter;\n this.implementation.newFilter(this.options, function(error, id){\n if(error) {\n self.callbacks.forEach(function(cb){\n cb(error);\n });\n } else {\n self.filterId = id;\n\n // check if there are get pending callbacks as a consequence\n // of calling get() with filterId unassigned.\n self.getLogsCallbacks.forEach(function (cb){\n self.get(cb);\n });\n self.getLogsCallbacks = [];\n\n // get filter logs for the already existing watch calls\n self.callbacks.forEach(function(cb){\n getLogsAtStart(self, cb);\n });\n if(self.callbacks.length > 0)\n pollFilter(self);\n\n // start to watch immediately\n if(typeof callback === 'function') {\n return self.watch(callback);\n }\n }\n });\n\n return this;\n};\n\nFilter.prototype.watch = function (callback) {\n this.callbacks.push(callback);\n\n if(this.filterId) {\n getLogsAtStart(this, callback);\n pollFilter(this);\n }\n\n return this;\n};\n\nFilter.prototype.stopWatching = function () {\n this.requestManager.stopPolling(this.filterId);\n // remove filter async\n this.implementation.uninstallFilter(this.filterId, function(){});\n this.callbacks = [];\n};\n\nFilter.prototype.get = function (callback) {\n var self = this;\n if (utils.isFunction(callback)) {\n if (this.filterId === null) {\n // If filterId is not set yet, call it back\n // when newFilter() assigns it.\n this.getLogsCallbacks.push(callback);\n } else {\n this.implementation.getLogs(this.filterId, function(err, res){\n if (err) {\n callback(err);\n } else {\n callback(null, res.map(function (log) {\n return self.formatter ? self.formatter(log) : log;\n }));\n }\n });\n }\n } else {\n if (this.filterId === null) {\n throw new Error('Filter ID Error: filter().get() can\\'t be chained synchronous, please provide a callback for the get() method.');\n }\n var logs = this.implementation.getLogs(this.filterId);\n return logs.map(function (log) {\n return self.formatter ? self.formatter(log) : log;\n });\n }\n\n return this;\n};\n\nmodule.exports = Filter;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file formatters.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\nvar config = require('../utils/config');\nvar Iban = require('./iban');\n\n/**\n * Should the format output to a big number\n *\n * @method outputBigNumberFormatter\n * @param {String|Number|BigNumber}\n * @returns {BigNumber} object\n */\nvar outputBigNumberFormatter = function (number) {\n return utils.toBigNumber(number);\n};\n\nvar isPredefinedBlockNumber = function (blockNumber) {\n return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';\n};\n\nvar inputDefaultBlockNumberFormatter = function (blockNumber) {\n if (blockNumber === undefined) {\n return config.defaultBlock;\n }\n return inputBlockNumberFormatter(blockNumber);\n};\n\nvar inputBlockNumberFormatter = function (blockNumber) {\n if (blockNumber === undefined) {\n return undefined;\n } else if (isPredefinedBlockNumber(blockNumber)) {\n return blockNumber;\n }\n return utils.toHex(blockNumber);\n};\n\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputCallFormatter\n * @param {Object} transaction options\n * @returns object\n*/\nvar inputCallFormatter = function (options){\n\n options.from = options.from || config.defaultAccount;\n\n if (options.from) {\n options.from = inputAddressFormatter(options.from);\n }\n\n if (options.to) { // it might be contract creation\n options.to = inputAddressFormatter(options.to);\n }\n\n ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {\n return options[key] !== undefined;\n }).forEach(function(key){\n options[key] = utils.fromDecimal(options[key]);\n });\n\n return options; \n};\n\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputTransactionFormatter\n * @param {Object} transaction options\n * @returns object\n*/\nvar inputTransactionFormatter = function (options){\n\n options.from = options.from || config.defaultAccount;\n options.from = inputAddressFormatter(options.from);\n\n if (options.to) { // it might be contract creation\n options.to = inputAddressFormatter(options.to);\n }\n\n ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {\n return options[key] !== undefined;\n }).forEach(function(key){\n options[key] = utils.fromDecimal(options[key]);\n });\n\n return options; \n};\n\n/**\n * Formats the output of a transaction to its proper values\n * \n * @method outputTransactionFormatter\n * @param {Object} tx\n * @returns {Object}\n*/\nvar outputTransactionFormatter = function (tx){\n if(tx.blockNumber !== null)\n tx.blockNumber = utils.toDecimal(tx.blockNumber);\n if(tx.transactionIndex !== null)\n tx.transactionIndex = utils.toDecimal(tx.transactionIndex);\n tx.nonce = utils.toDecimal(tx.nonce);\n tx.gas = utils.toDecimal(tx.gas);\n tx.gasPrice = utils.toBigNumber(tx.gasPrice);\n tx.value = utils.toBigNumber(tx.value);\n return tx;\n};\n\n/**\n * Formats the output of a transaction receipt to its proper values\n * \n * @method outputTransactionReceiptFormatter\n * @param {Object} receipt\n * @returns {Object}\n*/\nvar outputTransactionReceiptFormatter = function (receipt){\n if(receipt.blockNumber !== null)\n receipt.blockNumber = utils.toDecimal(receipt.blockNumber);\n if(receipt.transactionIndex !== null)\n receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);\n receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);\n receipt.gasUsed = utils.toDecimal(receipt.gasUsed);\n\n if(utils.isArray(receipt.logs)) {\n receipt.logs = receipt.logs.map(function(log){\n return outputLogFormatter(log);\n });\n }\n\n return receipt;\n};\n\n/**\n * Formats the output of a block to its proper values\n *\n * @method outputBlockFormatter\n * @param {Object} block \n * @returns {Object}\n*/\nvar outputBlockFormatter = function(block) {\n\n // transform to number\n block.gasLimit = utils.toDecimal(block.gasLimit);\n block.gasUsed = utils.toDecimal(block.gasUsed);\n block.size = utils.toDecimal(block.size);\n block.timestamp = utils.toDecimal(block.timestamp);\n if(block.number !== null)\n block.number = utils.toDecimal(block.number);\n\n block.difficulty = utils.toBigNumber(block.difficulty);\n block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);\n\n if (utils.isArray(block.transactions)) {\n block.transactions.forEach(function(item){\n if(!utils.isString(item))\n return outputTransactionFormatter(item);\n });\n }\n\n return block;\n};\n\n/**\n * Formats the output of a log\n * \n * @method outputLogFormatter\n * @param {Object} log object\n * @returns {Object} log\n*/\nvar outputLogFormatter = function(log) {\n if(log.blockNumber !== null)\n log.blockNumber = utils.toDecimal(log.blockNumber);\n if(log.transactionIndex !== null)\n log.transactionIndex = utils.toDecimal(log.transactionIndex);\n if(log.logIndex !== null)\n log.logIndex = utils.toDecimal(log.logIndex);\n\n return log;\n};\n\n/**\n * Formats the input of a whisper post and converts all values to HEX\n *\n * @method inputPostFormatter\n * @param {Object} transaction object\n * @returns {Object}\n*/\nvar inputPostFormatter = function(post) {\n\n // post.payload = utils.toHex(post.payload);\n post.ttl = utils.fromDecimal(post.ttl);\n post.workToProve = utils.fromDecimal(post.workToProve);\n post.priority = utils.fromDecimal(post.priority);\n\n // fallback\n if (!utils.isArray(post.topics)) {\n post.topics = post.topics ? [post.topics] : [];\n }\n\n // format the following options\n post.topics = post.topics.map(function(topic){\n // convert only if not hex\n return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);\n });\n\n return post; \n};\n\n/**\n * Formats the output of a received post message\n *\n * @method outputPostFormatter\n * @param {Object}\n * @returns {Object}\n */\nvar outputPostFormatter = function(post){\n\n post.expiry = utils.toDecimal(post.expiry);\n post.sent = utils.toDecimal(post.sent);\n post.ttl = utils.toDecimal(post.ttl);\n post.workProved = utils.toDecimal(post.workProved);\n // post.payloadRaw = post.payload;\n // post.payload = utils.toAscii(post.payload);\n\n // if (utils.isJson(post.payload)) {\n // post.payload = JSON.parse(post.payload);\n // }\n\n // format the following options\n if (!post.topics) {\n post.topics = [];\n }\n post.topics = post.topics.map(function(topic){\n return utils.toAscii(topic);\n });\n\n return post;\n};\n\nvar inputAddressFormatter = function (address) {\n var iban = new Iban(address);\n if (iban.isValid() && iban.isDirect()) {\n return '0x' + iban.address();\n } else if (utils.isStrictAddress(address)) {\n return address;\n } else if (utils.isAddress(address)) {\n return '0x' + address;\n }\n throw new Error('invalid address');\n};\n\n\nvar outputSyncingFormatter = function(result) {\n\n result.startingBlock = utils.toDecimal(result.startingBlock);\n result.currentBlock = utils.toDecimal(result.currentBlock);\n result.highestBlock = utils.toDecimal(result.highestBlock);\n\n return result;\n};\n\nmodule.exports = {\n inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,\n inputBlockNumberFormatter: inputBlockNumberFormatter,\n inputCallFormatter: inputCallFormatter,\n inputTransactionFormatter: inputTransactionFormatter,\n inputAddressFormatter: inputAddressFormatter,\n inputPostFormatter: inputPostFormatter,\n outputBigNumberFormatter: outputBigNumberFormatter,\n outputTransactionFormatter: outputTransactionFormatter,\n outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,\n outputBlockFormatter: outputBlockFormatter,\n outputLogFormatter: outputLogFormatter,\n outputPostFormatter: outputPostFormatter,\n outputSyncingFormatter: outputSyncingFormatter\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file function.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar coder = require('../solidity/coder');\nvar utils = require('../utils/utils');\nvar formatters = require('./formatters');\nvar sha3 = require('../utils/sha3');\n\n/**\n * This prototype should be used to call/sendTransaction to solidity functions\n */\nvar SolidityFunction = function (eth, json, address) {\n this._eth = eth;\n this._inputTypes = json.inputs.map(function (i) {\n return i.type;\n });\n this._outputTypes = json.outputs.map(function (i) {\n return i.type;\n });\n this._constant = json.constant;\n this._name = utils.transformToFullName(json);\n this._address = address;\n};\n\nSolidityFunction.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\nSolidityFunction.prototype.extractDefaultBlock = function (args) {\n if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {\n return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!\n }\n};\n\n/**\n * Should be used to create payload from arguments\n *\n * @method toPayload\n * @param {Array} solidity function params\n * @param {Object} optional payload options\n */\nSolidityFunction.prototype.toPayload = function (args) {\n var options = {};\n if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {\n options = args[args.length - 1];\n }\n options.to = this._address;\n options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);\n return options;\n};\n\n/**\n * Should be used to get function signature\n *\n * @method signature\n * @return {String} function signature\n */\nSolidityFunction.prototype.signature = function () {\n return sha3(this._name).slice(0, 8);\n};\n\n\nSolidityFunction.prototype.unpackOutput = function (output) {\n if (!output) {\n return;\n }\n\n output = output.length >= 2 ? output.slice(2) : output;\n var result = coder.decodeParams(this._outputTypes, output);\n return result.length === 1 ? result[0] : result;\n};\n\n/**\n * Calls a contract function.\n *\n * @method call\n * @param {...Object} Contract function arguments\n * @param {function} If the last argument is a function, the contract function\n * call will be asynchronous, and the callback will be passed the\n * error and result.\n * @return {String} output bytes\n */\nSolidityFunction.prototype.call = function () {\n var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });\n var callback = this.extractCallback(args);\n var defaultBlock = this.extractDefaultBlock(args);\n var payload = this.toPayload(args);\n\n\n if (!callback) {\n var output = this._eth.call(payload, defaultBlock);\n return this.unpackOutput(output);\n } \n \n var self = this;\n this._eth.call(payload, defaultBlock, function (error, output) {\n callback(error, self.unpackOutput(output));\n });\n};\n\n/**\n * Should be used to sendTransaction to solidity function\n *\n * @method sendTransaction\n */\nSolidityFunction.prototype.sendTransaction = function () {\n var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n\n if (!callback) {\n return this._eth.sendTransaction(payload);\n }\n\n this._eth.sendTransaction(payload, callback);\n};\n\n/**\n * Should be used to estimateGas of solidity function\n *\n * @method estimateGas\n */\nSolidityFunction.prototype.estimateGas = function () {\n var args = Array.prototype.slice.call(arguments);\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n\n if (!callback) {\n return this._eth.estimateGas(payload);\n }\n\n this._eth.estimateGas(payload, callback);\n};\n\n/**\n * Return the encoded data of the call\n *\n * @method getData\n * @return {String} the encoded data\n */\nSolidityFunction.prototype.getData = function () {\n var args = Array.prototype.slice.call(arguments);\n var payload = this.toPayload(args);\n\n return payload.data;\n};\n\n/**\n * Should be used to get function display name\n *\n * @method displayName\n * @return {String} display name of the function\n */\nSolidityFunction.prototype.displayName = function () {\n return utils.extractDisplayName(this._name);\n};\n\n/**\n * Should be used to get function type name\n *\n * @method typeName\n * @return {String} type name of the function\n */\nSolidityFunction.prototype.typeName = function () {\n return utils.extractTypeName(this._name);\n};\n\n/**\n * Should be called to get rpc requests from solidity function\n *\n * @method request\n * @returns {Object}\n */\nSolidityFunction.prototype.request = function () {\n var args = Array.prototype.slice.call(arguments);\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n var format = this.unpackOutput.bind(this);\n \n return {\n method: this._constant ? 'eth_call' : 'eth_sendTransaction',\n callback: callback,\n params: [payload], \n format: format\n };\n};\n\n/**\n * Should be called to execute function\n *\n * @method execute\n */\nSolidityFunction.prototype.execute = function () {\n var transaction = !this._constant;\n\n // send transaction\n if (transaction) {\n return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));\n }\n\n // call\n return this.call.apply(this, Array.prototype.slice.call(arguments));\n};\n\n/**\n * Should be called to attach function to contract\n *\n * @method attachToContract\n * @param {Contract}\n */\nSolidityFunction.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n execute.request = this.request.bind(this);\n execute.call = this.call.bind(this);\n execute.sendTransaction = this.sendTransaction.bind(this);\n execute.estimateGas = this.estimateGas.bind(this);\n execute.getData = this.getData.bind(this);\n var displayName = this.displayName();\n if (!contract[displayName]) {\n contract[displayName] = execute;\n }\n contract[displayName][this.typeName()] = execute; // circular!!!!\n};\n\nmodule.exports = SolidityFunction;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file httpprovider.js\n * @authors:\n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar errors = require('./errors');\n\n// workaround to use httpprovider in different envs\nvar XMLHttpRequest; // jshint ignore: line\n\n// meteor server environment\nif (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line\n XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line\n\n// browser\n} else if (typeof window !== 'undefined' && window.XMLHttpRequest) {\n XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line\n\n// node\n} else {\n XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line\n}\n\n/**\n * HttpProvider should be used to send rpc calls over http\n */\nvar HttpProvider = function (host) {\n this.host = host || 'http://localhost:8545';\n};\n\n/**\n * Should be called to prepare new XMLHttpRequest\n *\n * @method prepareRequest\n * @param {Boolean} true if request should be async\n * @return {XMLHttpRequest} object\n */\nHttpProvider.prototype.prepareRequest = function (async) {\n var request = new XMLHttpRequest();\n request.open('POST', this.host, async);\n request.setRequestHeader('Content-Type','application/json');\n return request;\n};\n\n/**\n * Should be called to make sync request\n *\n * @method send\n * @param {Object} payload\n * @return {Object} result\n */\nHttpProvider.prototype.send = function (payload) {\n var request = this.prepareRequest(false);\n\n try {\n request.send(JSON.stringify(payload));\n } catch(error) {\n throw errors.InvalidConnection(this.host);\n }\n\n var result = request.responseText;\n\n try {\n result = JSON.parse(result);\n } catch(e) {\n throw errors.InvalidResponse(request.responseText); \n }\n\n return result;\n};\n\n/**\n * Should be used to make async request\n *\n * @method sendAsync\n * @param {Object} payload\n * @param {Function} callback triggered on end with (err, result)\n */\nHttpProvider.prototype.sendAsync = function (payload, callback) {\n var request = this.prepareRequest(true); \n\n request.onreadystatechange = function() {\n if (request.readyState === 4) {\n var result = request.responseText;\n var error = null;\n\n try {\n result = JSON.parse(result);\n } catch(e) {\n error = errors.InvalidResponse(request.responseText); \n }\n\n callback(error, result);\n }\n };\n \n try {\n request.send(JSON.stringify(payload));\n } catch(error) {\n callback(errors.InvalidConnection(this.host));\n }\n};\n\n/**\n * Synchronously tries to make Http request\n *\n * @method isConnected\n * @return {Boolean} returns true if request haven't failed. Otherwise false\n */\nHttpProvider.prototype.isConnected = function() {\n try {\n this.send({\n id: 9999999999,\n jsonrpc: '2.0',\n method: 'net_listening',\n params: []\n });\n return true;\n } catch(e) {\n return false;\n }\n};\n\nmodule.exports = HttpProvider;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file iban.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar BigNumber = require('bignumber.js');\n\nvar padLeft = function (string, bytes) {\n var result = string;\n while (result.length < bytes * 2) {\n result = '00' + result;\n }\n return result;\n};\n\n/**\n * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to\n * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.\n *\n * @method iso13616Prepare\n * @param {String} iban the IBAN\n * @returns {String} the prepared IBAN\n */\nvar iso13616Prepare = function (iban) {\n var A = 'A'.charCodeAt(0);\n var Z = 'Z'.charCodeAt(0);\n\n iban = iban.toUpperCase();\n iban = iban.substr(4) + iban.substr(0,4);\n\n return iban.split('').map(function(n){\n var code = n.charCodeAt(0);\n if (code >= A && code <= Z){\n // A = 10, B = 11, ... Z = 35\n return code - A + 10;\n } else {\n return n;\n }\n }).join('');\n};\n\n/**\n * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.\n *\n * @method mod9710\n * @param {String} iban\n * @returns {Number}\n */\nvar mod9710 = function (iban) {\n var remainder = iban,\n block;\n\n while (remainder.length > 2){\n block = remainder.slice(0, 9);\n remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);\n }\n\n return parseInt(remainder, 10) % 97;\n};\n\n/**\n * This prototype should be used to create iban object from iban correct string\n *\n * @param {String} iban\n */\nvar Iban = function (iban) {\n this._iban = iban;\n};\n\n/**\n * This method should be used to create iban object from ethereum address\n *\n * @method fromAddress\n * @param {String} address\n * @return {Iban} the IBAN object\n */\nIban.fromAddress = function (address) {\n var asBn = new BigNumber(address, 16);\n var base36 = asBn.toString(36);\n var padded = padLeft(base36, 15);\n return Iban.fromBban(padded.toUpperCase());\n};\n\n/**\n * Convert the passed BBAN to an IBAN for this country specification.\n * Please note that \"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\".\n * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n *\n * @method fromBban\n * @param {String} bban the BBAN to convert to IBAN\n * @returns {Iban} the IBAN object\n */\nIban.fromBban = function (bban) {\n var countryCode = 'XE';\n\n var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));\n var checkDigit = ('0' + (98 - remainder)).slice(-2);\n\n return new Iban(countryCode + checkDigit + bban);\n};\n\n/**\n * Should be used to create IBAN object for given institution and identifier\n *\n * @method createIndirect\n * @param {Object} options, required options are \"institution\" and \"identifier\"\n * @return {Iban} the IBAN object\n */\nIban.createIndirect = function (options) {\n return Iban.fromBban('ETH' + options.institution + options.identifier);\n};\n\n/**\n * Thos method should be used to check if given string is valid iban object\n *\n * @method isValid\n * @param {String} iban string\n * @return {Boolean} true if it is valid IBAN\n */\nIban.isValid = function (iban) {\n var i = new Iban(iban);\n return i.isValid();\n};\n\n/**\n * Should be called to check if iban is correct\n *\n * @method isValid\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isValid = function () {\n return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&\n mod9710(iso13616Prepare(this._iban)) === 1;\n};\n\n/**\n * Should be called to check if iban number is direct\n *\n * @method isDirect\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isDirect = function () {\n return this._iban.length === 34 || this._iban.length === 35;\n};\n\n/**\n * Should be called to check if iban number if indirect\n *\n * @method isIndirect\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isIndirect = function () {\n return this._iban.length === 20;\n};\n\n/**\n * Should be called to get iban checksum\n * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)\n *\n * @method checksum\n * @returns {String} checksum\n */\nIban.prototype.checksum = function () {\n return this._iban.substr(2, 2);\n};\n\n/**\n * Should be called to get institution identifier\n * eg. XREG\n *\n * @method institution\n * @returns {String} institution identifier\n */\nIban.prototype.institution = function () {\n return this.isIndirect() ? this._iban.substr(7, 4) : '';\n};\n\n/**\n * Should be called to get client identifier within institution\n * eg. GAVOFYORK\n *\n * @method client\n * @returns {String} client identifier\n */\nIban.prototype.client = function () {\n return this.isIndirect() ? this._iban.substr(11) : '';\n};\n\n/**\n * Should be called to get client direct address\n *\n * @method address\n * @returns {String} client direct address\n */\nIban.prototype.address = function () {\n if (this.isDirect()) {\n var base36 = this._iban.substr(4);\n var asBn = new BigNumber(base36, 36);\n return padLeft(asBn.toString(16), 20);\n } \n\n return '';\n};\n\nIban.prototype.toString = function () {\n return this._iban;\n};\n\nmodule.exports = Iban;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file ipcprovider.js\n * @authors:\n * Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar utils = require('../utils/utils');\nvar errors = require('./errors');\n\n\nvar IpcProvider = function (path, net) {\n var _this = this;\n this.responseCallbacks = {};\n this.path = path;\n \n this.connection = net.connect({path: this.path});\n\n this.connection.on('error', function(e){\n console.error('IPC Connection Error', e);\n _this._timeout();\n });\n\n this.connection.on('end', function(){\n _this._timeout();\n }); \n\n\n // LISTEN FOR CONNECTION RESPONSES\n this.connection.on('data', function(data) {\n /*jshint maxcomplexity: 6 */\n\n _this._parseResponse(data.toString()).forEach(function(result){\n\n var id = null;\n\n // get the id which matches the returned id\n if(utils.isArray(result)) {\n result.forEach(function(load){\n if(_this.responseCallbacks[load.id])\n id = load.id;\n });\n } else {\n id = result.id;\n }\n\n // fire the callback\n if(_this.responseCallbacks[id]) {\n _this.responseCallbacks[id](null, result);\n delete _this.responseCallbacks[id];\n }\n });\n });\n};\n\n/**\nWill parse the response and make an array out of it.\n\n@method _parseResponse\n@param {String} data\n*/\nIpcProvider.prototype._parseResponse = function(data) {\n var _this = this,\n returnValues = [];\n \n // DE-CHUNKER\n var dechunkedData = data\n .replace(/\\}[\\n\\r]?\\{/g,'}|--|{') // }{\n .replace(/\\}\\][\\n\\r]?\\[\\{/g,'}]|--|[{') // }][{\n .replace(/\\}[\\n\\r]?\\[\\{/g,'}|--|[{') // }[{\n .replace(/\\}\\][\\n\\r]?\\{/g,'}]|--|{') // }]{\n .split('|--|');\n\n dechunkedData.forEach(function(data){\n\n // prepend the last chunk\n if(_this.lastChunk)\n data = _this.lastChunk + data;\n\n var result = null;\n\n try {\n result = JSON.parse(data);\n\n } catch(e) {\n\n _this.lastChunk = data;\n\n // start timeout to cancel all requests\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunkTimeout = setTimeout(function(){\n _this._timeout();\n throw errors.InvalidResponse(data);\n }, 1000 * 15);\n\n return;\n }\n\n // cancel timeout and set chunk to null\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunk = null;\n\n if(result)\n returnValues.push(result);\n });\n\n return returnValues;\n};\n\n\n/**\nGet the adds a callback to the responseCallbacks object,\nwhich will be called if a response matching the response Id will arrive.\n\n@method _addResponseCallback\n*/\nIpcProvider.prototype._addResponseCallback = function(payload, callback) {\n var id = payload.id || payload[0].id;\n var method = payload.method || payload[0].method;\n\n this.responseCallbacks[id] = callback;\n this.responseCallbacks[id].method = method;\n};\n\n/**\nTimeout all requests when the end/error event is fired\n\n@method _timeout\n*/\nIpcProvider.prototype._timeout = function() {\n for(var key in this.responseCallbacks) {\n if(this.responseCallbacks.hasOwnProperty(key)){\n this.responseCallbacks[key](errors.InvalidConnection('on IPC'));\n delete this.responseCallbacks[key];\n }\n }\n};\n\n\n/**\nCheck if the current connection is still valid.\n\n@method isConnected\n*/\nIpcProvider.prototype.isConnected = function() {\n var _this = this;\n\n // try reconnect, when connection is gone\n if(!_this.connection.writable)\n _this.connection.connect({path: _this.path});\n\n return !!this.connection.writable;\n};\n\nIpcProvider.prototype.send = function (payload) {\n\n if(this.connection.writeSync) {\n var result;\n\n // try reconnect, when connection is gone\n if(!this.connection.writable)\n this.connection.connect({path: this.path});\n\n var data = this.connection.writeSync(JSON.stringify(payload));\n\n try {\n result = JSON.parse(data);\n } catch(e) {\n throw errors.InvalidResponse(data); \n }\n\n return result;\n\n } else {\n throw new Error('You tried to send \"'+ payload.method +'\" synchronously. Synchronous requests are not supported by the IPC provider.');\n }\n};\n\nIpcProvider.prototype.sendAsync = function (payload, callback) {\n // try reconnect, when connection is gone\n if(!this.connection.writable)\n this.connection.connect({path: this.path});\n\n\n this.connection.write(JSON.stringify(payload));\n this._addResponseCallback(payload, callback);\n};\n\nmodule.exports = IpcProvider;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file jsonrpc.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Jsonrpc = function () {\n // singleton pattern\n if (arguments.callee._singletonInstance) {\n return arguments.callee._singletonInstance;\n }\n arguments.callee._singletonInstance = this;\n\n this.messageId = 1;\n};\n\n/**\n * @return {Jsonrpc} singleton\n */\nJsonrpc.getInstance = function () {\n var instance = new Jsonrpc();\n return instance;\n};\n\n/**\n * Should be called to valid json create payload object\n *\n * @method toPayload\n * @param {Function} method of jsonrpc call, required\n * @param {Array} params, an array of method params, optional\n * @returns {Object} valid jsonrpc payload object\n */\nJsonrpc.prototype.toPayload = function (method, params) {\n if (!method)\n console.error('jsonrpc method should be specified!');\n\n return {\n jsonrpc: '2.0',\n method: method,\n params: params || [],\n id: this.messageId++\n };\n};\n\n/**\n * Should be called to check if jsonrpc response is valid\n *\n * @method isValidResponse\n * @param {Object}\n * @returns {Boolean} true if response is valid, otherwise false\n */\nJsonrpc.prototype.isValidResponse = function (response) {\n return !!response &&\n !response.error &&\n response.jsonrpc === '2.0' &&\n typeof response.id === 'number' &&\n response.result !== undefined; // only undefined is not valid json object\n};\n\n/**\n * Should be called to create batch payload object\n *\n * @method toBatchPayload\n * @param {Array} messages, an array of objects with method (required) and params (optional) fields\n * @returns {Array} batch payload\n */\nJsonrpc.prototype.toBatchPayload = function (messages) {\n var self = this;\n return messages.map(function (message) {\n return self.toPayload(message.method, message.params);\n });\n};\n\nmodule.exports = Jsonrpc;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file method.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\nvar errors = require('./errors');\n\nvar Method = function (options) {\n this.name = options.name;\n this.call = options.call;\n this.params = options.params || 0;\n this.inputFormatter = options.inputFormatter;\n this.outputFormatter = options.outputFormatter;\n this.requestManager = null;\n};\n\nMethod.prototype.setRequestManager = function (rm) {\n this.requestManager = rm;\n};\n\n/**\n * Should be used to determine name of the jsonrpc method based on arguments\n *\n * @method getCall\n * @param {Array} arguments\n * @return {String} name of jsonrpc method\n */\nMethod.prototype.getCall = function (args) {\n return utils.isFunction(this.call) ? this.call(args) : this.call;\n};\n\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nMethod.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\n/**\n * Should be called to check if the number of arguments is correct\n * \n * @method validateArgs\n * @param {Array} arguments\n * @throws {Error} if it is not\n */\nMethod.prototype.validateArgs = function (args) {\n if (args.length !== this.params) {\n throw errors.InvalidNumberOfParams();\n }\n};\n\n/**\n * Should be called to format input args of method\n * \n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nMethod.prototype.formatInput = function (args) {\n if (!this.inputFormatter) {\n return args;\n }\n\n return this.inputFormatter.map(function (formatter, index) {\n return formatter ? formatter(args[index]) : args[index];\n });\n};\n\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param {Object}\n * @return {Object}\n */\nMethod.prototype.formatOutput = function (result) {\n return this.outputFormatter && result ? this.outputFormatter(result) : result;\n};\n\n/**\n * Should create payload from given input args\n *\n * @method toPayload\n * @param {Array} args\n * @return {Object}\n */\nMethod.prototype.toPayload = function (args) {\n var call = this.getCall(args);\n var callback = this.extractCallback(args);\n var params = this.formatInput(args);\n this.validateArgs(params);\n\n return {\n method: call,\n params: params,\n callback: callback\n };\n};\n\nMethod.prototype.attachToObject = function (obj) {\n var func = this.buildCall();\n func.call = this.call; // TODO!!! that's ugly. filter.js uses it\n var name = this.name.split('.');\n if (name.length > 1) {\n obj[name[0]] = obj[name[0]] || {};\n obj[name[0]][name[1]] = func;\n } else {\n obj[name[0]] = func; \n }\n};\n\nMethod.prototype.buildCall = function() {\n var method = this;\n var send = function () {\n var payload = method.toPayload(Array.prototype.slice.call(arguments));\n if (payload.callback) {\n return method.requestManager.sendAsync(payload, function (err, result) {\n payload.callback(err, method.formatOutput(result));\n });\n }\n return method.formatOutput(method.requestManager.send(payload));\n };\n send.request = this.request.bind(this);\n return send;\n};\n\n/**\n * Should be called to create pure JSONRPC request which can be used in batch request\n *\n * @method request\n * @param {...} params\n * @return {Object} jsonrpc request\n */\nMethod.prototype.request = function () {\n var payload = this.toPayload(Array.prototype.slice.call(arguments));\n payload.format = this.formatOutput.bind(this);\n return payload;\n};\n\nmodule.exports = Method;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file db.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\n\nvar DB = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n \n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(web3._requestManager);\n });\n};\n\nvar methods = function () {\n var putString = new Method({\n name: 'putString',\n call: 'db_putString',\n params: 3\n });\n\n var getString = new Method({\n name: 'getString',\n call: 'db_getString',\n params: 2\n });\n\n var putHex = new Method({\n name: 'putHex',\n call: 'db_putHex',\n params: 3\n });\n\n var getHex = new Method({\n name: 'getHex',\n call: 'db_getHex',\n params: 2\n });\n\n return [\n putString, getString, putHex, getHex\n ];\n};\n\nmodule.exports = DB;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file eth.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar formatters = require('../formatters');\nvar utils = require('../../utils/utils');\nvar Method = require('../method');\nvar Property = require('../property');\nvar c = require('../../utils/config');\nvar Contract = require('../contract');\nvar watches = require('./watches');\nvar Filter = require('../filter');\nvar IsSyncing = require('../syncing');\nvar namereg = require('../namereg');\nvar Iban = require('../iban');\nvar transfer = require('../transfer');\n\nvar blockCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? \"eth_getBlockByHash\" : \"eth_getBlockByNumber\";\n};\n\nvar transactionFromBlockCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';\n};\n\nvar uncleCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';\n};\n\nvar getBlockTransactionCountCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';\n};\n\nvar uncleCountCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';\n};\n\nfunction Eth(web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n\n properties().forEach(function(p) { \n p.attachToObject(self);\n p.setRequestManager(self._requestManager);\n });\n\n\n this.iban = Iban;\n this.sendIBANTransaction = transfer.bind(null, this);\n}\n\nObject.defineProperty(Eth.prototype, 'defaultBlock', {\n get: function () {\n return c.defaultBlock;\n },\n set: function (val) {\n c.defaultBlock = val;\n return val;\n }\n});\n\nObject.defineProperty(Eth.prototype, 'defaultAccount', {\n get: function () {\n return c.defaultAccount;\n },\n set: function (val) {\n c.defaultAccount = val;\n return val;\n }\n});\n\nvar methods = function () {\n var getBalance = new Method({\n name: 'getBalance',\n call: 'eth_getBalance',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],\n outputFormatter: formatters.outputBigNumberFormatter\n });\n\n var getStorageAt = new Method({\n name: 'getStorageAt',\n call: 'eth_getStorageAt',\n params: 3,\n inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var getCode = new Method({\n name: 'getCode',\n call: 'eth_getCode',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var getBlock = new Method({\n name: 'getBlock',\n call: blockCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],\n outputFormatter: formatters.outputBlockFormatter\n });\n\n var getUncle = new Method({\n name: 'getUncle',\n call: uncleCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],\n outputFormatter: formatters.outputBlockFormatter,\n\n });\n\n var getCompilers = new Method({\n name: 'getCompilers',\n call: 'eth_getCompilers',\n params: 0\n });\n\n var getBlockTransactionCount = new Method({\n name: 'getBlockTransactionCount',\n call: getBlockTransactionCountCall,\n params: 1,\n inputFormatter: [formatters.inputBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var getBlockUncleCount = new Method({\n name: 'getBlockUncleCount',\n call: uncleCountCall,\n params: 1,\n inputFormatter: [formatters.inputBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var getTransaction = new Method({\n name: 'getTransaction',\n call: 'eth_getTransactionByHash',\n params: 1,\n outputFormatter: formatters.outputTransactionFormatter\n });\n\n var getTransactionFromBlock = new Method({\n name: 'getTransactionFromBlock',\n call: transactionFromBlockCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],\n outputFormatter: formatters.outputTransactionFormatter\n });\n\n var getTransactionReceipt = new Method({\n name: 'getTransactionReceipt',\n call: 'eth_getTransactionReceipt',\n params: 1,\n outputFormatter: formatters.outputTransactionReceiptFormatter\n });\n\n var getTransactionCount = new Method({\n name: 'getTransactionCount',\n call: 'eth_getTransactionCount',\n params: 2,\n inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var sendRawTransaction = new Method({\n name: 'sendRawTransaction',\n call: 'eth_sendRawTransaction',\n params: 1,\n inputFormatter: [null]\n });\n\n var sendTransaction = new Method({\n name: 'sendTransaction',\n call: 'eth_sendTransaction',\n params: 1,\n inputFormatter: [formatters.inputTransactionFormatter]\n });\n\n var sign = new Method({\n name: 'sign',\n call: 'eth_sign',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, null]\n });\n\n var call = new Method({\n name: 'call',\n call: 'eth_call',\n params: 2,\n inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var estimateGas = new Method({\n name: 'estimateGas',\n call: 'eth_estimateGas',\n params: 1,\n inputFormatter: [formatters.inputCallFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var compileSolidity = new Method({\n name: 'compile.solidity',\n call: 'eth_compileSolidity',\n params: 1\n });\n\n var compileLLL = new Method({\n name: 'compile.lll',\n call: 'eth_compileLLL',\n params: 1\n });\n\n var compileSerpent = new Method({\n name: 'compile.serpent',\n call: 'eth_compileSerpent',\n params: 1\n });\n\n var submitWork = new Method({\n name: 'submitWork',\n call: 'eth_submitWork',\n params: 3\n });\n\n var getWork = new Method({\n name: 'getWork',\n call: 'eth_getWork',\n params: 0\n });\n\n return [\n getBalance,\n getStorageAt,\n getCode,\n getBlock,\n getUncle,\n getCompilers,\n getBlockTransactionCount,\n getBlockUncleCount,\n getTransaction,\n getTransactionFromBlock,\n getTransactionReceipt,\n getTransactionCount,\n call,\n estimateGas,\n sendRawTransaction,\n sendTransaction,\n sign,\n compileSolidity,\n compileLLL,\n compileSerpent,\n submitWork,\n getWork\n ];\n};\n\n\nvar properties = function () {\n return [\n new Property({\n name: 'coinbase',\n getter: 'eth_coinbase'\n }),\n new Property({\n name: 'mining',\n getter: 'eth_mining'\n }),\n new Property({\n name: 'hashrate',\n getter: 'eth_hashrate',\n outputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'syncing',\n getter: 'eth_syncing',\n outputFormatter: formatters.outputSyncingFormatter\n }),\n new Property({\n name: 'gasPrice',\n getter: 'eth_gasPrice',\n outputFormatter: formatters.outputBigNumberFormatter\n }),\n new Property({\n name: 'accounts',\n getter: 'eth_accounts'\n }),\n new Property({\n name: 'blockNumber',\n getter: 'eth_blockNumber',\n outputFormatter: utils.toDecimal\n })\n ];\n};\n\nEth.prototype.contract = function (abi) {\n var factory = new Contract(this, abi);\n return factory;\n};\n\nEth.prototype.filter = function (fil, callback) {\n return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback);\n};\n\nEth.prototype.namereg = function () {\n return this.contract(namereg.global.abi).at(namereg.global.address);\n};\n\nEth.prototype.icapNamereg = function () {\n return this.contract(namereg.icap.abi).at(namereg.icap.address);\n};\n\nEth.prototype.isSyncing = function (callback) {\n return new IsSyncing(this._requestManager, callback);\n};\n\nmodule.exports = Eth;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file eth.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../../utils/utils');\nvar Property = require('../property');\n\nvar Net = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n properties().forEach(function(p) { \n p.attachToObject(self);\n p.setRequestManager(web3._requestManager);\n });\n};\n\n/// @returns an array of objects describing web3.eth api properties\nvar properties = function () {\n return [\n new Property({\n name: 'listening',\n getter: 'net_listening'\n }),\n new Property({\n name: 'peerCount',\n getter: 'net_peerCount',\n outputFormatter: utils.toDecimal\n })\n ];\n};\n\nmodule.exports = Net;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file eth.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar Method = require('../method');\nvar Property = require('../property');\nvar formatters = require('../formatters');\n\nfunction Personal(web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) {\n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n\n properties().forEach(function(p) {\n p.attachToObject(self);\n p.setRequestManager(self._requestManager);\n });\n}\n\nvar methods = function () {\n var newAccount = new Method({\n name: 'newAccount',\n call: 'personal_newAccount',\n params: 1,\n inputFormatter: [null]\n });\n\n var unlockAccount = new Method({\n name: 'unlockAccount',\n call: 'personal_unlockAccount',\n params: 3,\n inputFormatter: [formatters.inputAddressFormatter, null, null]\n });\n\n var lockAccount = new Method({\n name: 'lockAccount',\n call: 'personal_lockAccount',\n params: 1,\n inputFormatter: [formatters.inputAddressFormatter]\n });\n\n return [\n newAccount,\n unlockAccount,\n lockAccount\n ];\n};\n\nvar properties = function () {\n return [\n new Property({\n name: 'listAccounts',\n getter: 'personal_listAccounts'\n })\n ];\n};\n\n\nmodule.exports = Personal;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file shh.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\nvar formatters = require('../formatters');\nvar Filter = require('../filter');\nvar watches = require('./watches');\n\nvar Shh = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n};\n\nShh.prototype.filter = function (fil, callback) {\n return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback);\n};\n\nvar methods = function () { \n\n var post = new Method({\n name: 'post', \n call: 'shh_post', \n params: 1,\n inputFormatter: [formatters.inputPostFormatter]\n });\n\n var newIdentity = new Method({\n name: 'newIdentity',\n call: 'shh_newIdentity',\n params: 0\n });\n\n var hasIdentity = new Method({\n name: 'hasIdentity',\n call: 'shh_hasIdentity',\n params: 1\n });\n\n var newGroup = new Method({\n name: 'newGroup',\n call: 'shh_newGroup',\n params: 0\n });\n\n var addToGroup = new Method({\n name: 'addToGroup',\n call: 'shh_addToGroup',\n params: 0\n });\n\n return [\n post,\n newIdentity,\n hasIdentity,\n newGroup,\n addToGroup\n ];\n};\n\nmodule.exports = Shh;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file watches.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\n\n/// @returns an array of objects describing web3.eth.filter api methods\nvar eth = function () {\n var newFilterCall = function (args) {\n var type = args[0];\n\n switch(type) {\n case 'latest':\n args.shift();\n this.params = 0;\n return 'eth_newBlockFilter';\n case 'pending':\n args.shift();\n this.params = 0;\n return 'eth_newPendingTransactionFilter';\n default:\n return 'eth_newFilter';\n }\n };\n\n var newFilter = new Method({\n name: 'newFilter',\n call: newFilterCall,\n params: 1\n });\n\n var uninstallFilter = new Method({\n name: 'uninstallFilter',\n call: 'eth_uninstallFilter',\n params: 1\n });\n\n var getLogs = new Method({\n name: 'getLogs',\n call: 'eth_getFilterLogs',\n params: 1\n });\n\n var poll = new Method({\n name: 'poll',\n call: 'eth_getFilterChanges',\n params: 1\n });\n\n return [\n newFilter,\n uninstallFilter,\n getLogs,\n poll\n ];\n};\n\n/// @returns an array of objects describing web3.shh.watch api methods\nvar shh = function () {\n var newFilter = new Method({\n name: 'newFilter',\n call: 'shh_newFilter',\n params: 1\n });\n\n var uninstallFilter = new Method({\n name: 'uninstallFilter',\n call: 'shh_uninstallFilter',\n params: 1\n });\n\n var getLogs = new Method({\n name: 'getLogs',\n call: 'shh_getMessages',\n params: 1\n });\n\n var poll = new Method({\n name: 'poll',\n call: 'shh_getFilterChanges',\n params: 1\n });\n\n return [\n newFilter,\n uninstallFilter,\n getLogs,\n poll\n ];\n};\n\nmodule.exports = {\n eth: eth,\n shh: shh\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file namereg.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar globalRegistrarAbi = require('../contracts/GlobalRegistrar.json');\nvar icapRegistrarAbi= require('../contracts/ICAPRegistrar.json');\n\nvar globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';\nvar icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';\n\nmodule.exports = {\n global: {\n abi: globalRegistrarAbi,\n address: globalNameregAddress\n },\n icap: {\n abi: icapRegistrarAbi,\n address: icapNameregAddress\n }\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file property.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\n\nvar Property = function (options) {\n this.name = options.name;\n this.getter = options.getter;\n this.setter = options.setter;\n this.outputFormatter = options.outputFormatter;\n this.inputFormatter = options.inputFormatter;\n this.requestManager = null;\n};\n\nProperty.prototype.setRequestManager = function (rm) {\n this.requestManager = rm;\n};\n\n/**\n * Should be called to format input args of method\n * \n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nProperty.prototype.formatInput = function (arg) {\n return this.inputFormatter ? this.inputFormatter(arg) : arg;\n};\n\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param {Object}\n * @return {Object}\n */\nProperty.prototype.formatOutput = function (result) {\n return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;\n};\n\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nProperty.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\n\n/**\n * Should attach function to method\n * \n * @method attachToObject\n * @param {Object}\n * @param {Function}\n */\nProperty.prototype.attachToObject = function (obj) {\n var proto = {\n get: this.buildGet(),\n enumerable: true \n };\n\n var names = this.name.split('.');\n var name = names[0];\n if (names.length > 1) {\n obj[names[0]] = obj[names[0]] || {};\n obj = obj[names[0]];\n name = names[1];\n }\n\n Object.defineProperty(obj, name, proto);\n obj[asyncGetterName(name)] = this.buildAsyncGet();\n};\n\nvar asyncGetterName = function (name) {\n return 'get' + name.charAt(0).toUpperCase() + name.slice(1);\n};\n\nProperty.prototype.buildGet = function () {\n var property = this;\n return function get() {\n return property.formatOutput(property.requestManager.send({\n method: property.getter\n })); \n };\n};\n\nProperty.prototype.buildAsyncGet = function () {\n var property = this;\n var get = function (callback) {\n property.requestManager.sendAsync({\n method: property.getter\n }, function (err, result) {\n callback(err, property.formatOutput(result));\n });\n };\n get.request = this.request.bind(this);\n return get;\n};\n\n/**\n * Should be called to create pure JSONRPC request which can be used in batch request\n *\n * @method request\n * @param {...} params\n * @return {Object} jsonrpc request\n */\nProperty.prototype.request = function () {\n var payload = {\n method: this.getter,\n params: [],\n callback: this.extractCallback(Array.prototype.slice.call(arguments))\n };\n payload.format = this.formatOutput.bind(this);\n return payload;\n};\n\nmodule.exports = Property;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file requestmanager.js\n * @author Jeffrey Wilcke \n * @author Marek Kotewicz \n * @author Marian Oancea \n * @author Fabian Vogelsteller \n * @author Gav Wood \n * @date 2014\n */\n\nvar Jsonrpc = require('./jsonrpc');\nvar utils = require('../utils/utils');\nvar c = require('../utils/config');\nvar errors = require('./errors');\n\n/**\n * It's responsible for passing messages to providers\n * It's also responsible for polling the ethereum node for incoming messages\n * Default poll timeout is 1 second\n * Singleton\n */\nvar RequestManager = function (provider) {\n this.provider = provider;\n this.polls = {};\n this.timeout = null;\n};\n\n/**\n * Should be used to synchronously send request\n *\n * @method send\n * @param {Object} data\n * @return {Object}\n */\nRequestManager.prototype.send = function (data) {\n if (!this.provider) {\n console.error(errors.InvalidProvider());\n return null;\n }\n\n var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);\n var result = this.provider.send(payload);\n\n if (!Jsonrpc.getInstance().isValidResponse(result)) {\n throw errors.InvalidResponse(result);\n }\n\n return result.result;\n};\n\n/**\n * Should be used to asynchronously send request\n *\n * @method sendAsync\n * @param {Object} data\n * @param {Function} callback\n */\nRequestManager.prototype.sendAsync = function (data, callback) {\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n\n var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);\n this.provider.sendAsync(payload, function (err, result) {\n if (err) {\n return callback(err);\n }\n \n if (!Jsonrpc.getInstance().isValidResponse(result)) {\n return callback(errors.InvalidResponse(result));\n }\n\n callback(null, result.result);\n });\n};\n\n/**\n * Should be called to asynchronously send batch request\n *\n * @method sendBatch\n * @param {Array} batch data\n * @param {Function} callback\n */\nRequestManager.prototype.sendBatch = function (data, callback) {\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n\n var payload = Jsonrpc.getInstance().toBatchPayload(data);\n\n this.provider.sendAsync(payload, function (err, results) {\n if (err) {\n return callback(err);\n }\n\n if (!utils.isArray(results)) {\n return callback(errors.InvalidResponse(results));\n }\n\n callback(err, results);\n }); \n};\n\n/**\n * Should be used to set provider of request manager\n *\n * @method setProvider\n * @param {Object}\n */\nRequestManager.prototype.setProvider = function (p) {\n this.provider = p;\n};\n\n/**\n * Should be used to start polling\n *\n * @method startPolling\n * @param {Object} data\n * @param {Number} pollId\n * @param {Function} callback\n * @param {Function} uninstall\n *\n * @todo cleanup number of params\n */\nRequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {\n this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall};\n\n\n // start polling\n if (!this.timeout) {\n this.poll();\n }\n};\n\n/**\n * Should be used to stop polling for filter with given id\n *\n * @method stopPolling\n * @param {Number} pollId\n */\nRequestManager.prototype.stopPolling = function (pollId) {\n delete this.polls[pollId];\n\n // stop polling\n if(Object.keys(this.polls).length === 0 && this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n};\n\n/**\n * Should be called to reset the polling mechanism of the request manager\n *\n * @method reset\n */\nRequestManager.prototype.reset = function (keepIsSyncing) {\n /*jshint maxcomplexity:5 */\n\n for (var key in this.polls) {\n // remove all polls, except sync polls,\n // they need to be removed manually by calling syncing.stopWatching()\n if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) {\n this.polls[key].uninstall();\n delete this.polls[key];\n }\n }\n\n // stop polling\n if(Object.keys(this.polls).length === 0 && this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n};\n\n/**\n * Should be called to poll for changes on filter with given id\n *\n * @method poll\n */\nRequestManager.prototype.poll = function () {\n /*jshint maxcomplexity: 6 */\n this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);\n\n if (Object.keys(this.polls).length === 0) {\n return;\n }\n\n if (!this.provider) {\n console.error(errors.InvalidProvider());\n return;\n }\n\n var pollsData = [];\n var pollsIds = [];\n for (var key in this.polls) {\n pollsData.push(this.polls[key].data);\n pollsIds.push(key);\n }\n\n if (pollsData.length === 0) {\n return;\n }\n\n var payload = Jsonrpc.getInstance().toBatchPayload(pollsData);\n \n // map the request id to they poll id\n var pollsIdMap = {};\n payload.forEach(function(load, index){\n pollsIdMap[load.id] = pollsIds[index];\n });\n\n\n var self = this;\n this.provider.sendAsync(payload, function (error, results) {\n\n\n // TODO: console log?\n if (error) {\n return;\n }\n\n if (!utils.isArray(results)) {\n throw errors.InvalidResponse(results);\n }\n results.map(function (result) {\n var id = pollsIdMap[result.id];\n\n // make sure the filter is still installed after arrival of the request\n if (self.polls[id]) {\n result.callback = self.polls[id].callback;\n return result;\n } else\n return false;\n }).filter(function (result) {\n return !!result; \n }).filter(function (result) {\n var valid = Jsonrpc.getInstance().isValidResponse(result);\n if (!valid) {\n result.callback(errors.InvalidResponse(result));\n }\n return valid;\n }).forEach(function (result) {\n result.callback(null, result.result);\n });\n });\n};\n\nmodule.exports = RequestManager;\n\n", - "\n\nvar Settings = function () {\n this.defaultBlock = 'latest';\n this.defaultAccount = undefined;\n};\n\nmodule.exports = Settings;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file syncing.js\n * @authors:\n * Fabian Vogelsteller \n * @date 2015\n */\n\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\n\nvar count = 1;\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method pollSyncing\n@param {Object} self\n*/\nvar pollSyncing = function(self) {\n\n var onMessage = function (error, sync) {\n if (error) {\n return self.callbacks.forEach(function (callback) {\n callback(error);\n });\n }\n\n if(utils.isObject(sync) && sync.startingBlock)\n sync = formatters.outputSyncingFormatter(sync);\n\n self.callbacks.forEach(function (callback) {\n if (self.lastSyncState !== sync) {\n \n // call the callback with true first so the app can stop anything, before receiving the sync data\n if(!self.lastSyncState && utils.isObject(sync))\n callback(null, true);\n \n // call on the next CPU cycle, so the actions of the sync stop can be processes first\n setTimeout(function() {\n callback(null, sync);\n }, 0);\n \n self.lastSyncState = sync;\n }\n });\n };\n\n self.requestManager.startPolling({\n method: 'eth_syncing',\n params: [],\n }, self.pollId, onMessage, self.stopWatching.bind(self));\n\n};\n\nvar IsSyncing = function (requestManager, callback) {\n this.requestManager = requestManager;\n this.pollId = 'syncPoll_'+ count++;\n this.callbacks = [];\n this.addCallback(callback);\n this.lastSyncState = false;\n pollSyncing(this);\n\n return this;\n};\n\nIsSyncing.prototype.addCallback = function (callback) {\n if(callback)\n this.callbacks.push(callback);\n return this;\n};\n\nIsSyncing.prototype.stopWatching = function () {\n this.requestManager.stopPolling(this.pollId);\n this.callbacks = [];\n};\n\nmodule.exports = IsSyncing;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file transfer.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar Iban = require('./iban');\nvar exchangeAbi = require('../contracts/SmartExchange.json');\n\n/**\n * Should be used to make Iban transfer\n *\n * @method transfer\n * @param {String} from\n * @param {String} to iban\n * @param {Value} value to be tranfered\n * @param {Function} callback, callback\n */\nvar transfer = function (eth, from, to, value, callback) {\n var iban = new Iban(to); \n if (!iban.isValid()) {\n throw new Error('invalid iban address');\n }\n\n if (iban.isDirect()) {\n return transferToAddress(eth, from, iban.address(), value, callback);\n }\n \n if (!callback) {\n var address = eth.icapNamereg().addr(iban.institution());\n return deposit(eth, from, address, value, iban.client());\n }\n\n eth.icapNamereg().addr(iban.institution(), function (err, address) {\n return deposit(eth, from, address, value, iban.client(), callback);\n });\n \n};\n\n/**\n * Should be used to transfer funds to certain address\n *\n * @method transferToAddress\n * @param {String} from\n * @param {String} to\n * @param {Value} value to be tranfered\n * @param {Function} callback, callback\n */\nvar transferToAddress = function (eth, from, to, value, callback) {\n return eth.sendTransaction({\n address: to,\n from: from,\n value: value\n }, callback);\n};\n\n/**\n * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)\n *\n * @method deposit\n * @param {String} from\n * @param {String} to\n * @param {Value} value to be transfered\n * @param {String} client unique identifier\n * @param {Function} callback, callback\n */\nvar deposit = function (eth, from, to, value, client, callback) {\n var abi = exchangeAbi;\n return eth.contract(abi).at(to).deposit(client, {\n from: from,\n value: value\n }, callback);\n};\n\nmodule.exports = transfer;\n\n", - null, - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\t function F() {}\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t F.prototype = this;\n\t var subtype = new F();\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init')) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex != -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);\n\t var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\n\t return WordArray.create(words, nBytes);\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t var keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t i--;\n\t }\n\t data.sigBytes = i + 1;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA1 = C_algo.SHA1;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA1\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA1,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t var Wih = Wi.high = M[offset + i * 2] | 0;\n\t var Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t var Wil = gamma0l + Wi7l;\n\t var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t var Wil = Wil + gamma1l;\n\t var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t var Wil = Wil + Wi16l;\n\t var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));", - "/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n", - "/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */\n\n;(function (global) {\n 'use strict';\n\n /*\n bignumber.js v2.0.7\n A JavaScript library for arbitrary-precision arithmetic.\n https://github.com/MikeMcl/bignumber.js\n Copyright (c) 2015 Michael Mclaughlin \n MIT Expat Licence\n */\n\n\n var BigNumber, crypto, parseNumeric,\n isNumeric = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\n mathceil = Math.ceil,\n mathfloor = Math.floor,\n notBool = ' not a boolean or binary digit',\n roundingMode = 'rounding mode',\n tooManyDigits = 'number type has more than 15 significant digits',\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_',\n BASE = 1e14,\n LOG_BASE = 14,\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\n SQRT_BASE = 1e7,\n\n /*\n * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\n * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an\n * exception is thrown (if ERRORS is true).\n */\n MAX = 1E9; // 0 to MAX_INT32\n\n\n /*\n * Create and return a BigNumber constructor.\n */\n function another(configObj) {\n var div,\n\n // id tracks the caller function, so its name can be included in error messages.\n id = 0,\n P = BigNumber.prototype,\n ONE = new BigNumber(1),\n\n\n /********************************* EDITABLE DEFAULTS **********************************/\n\n\n /*\n * The default values below must be integers within the inclusive ranges stated.\n * The values can also be changed at run-time using BigNumber.config.\n */\n\n // The maximum number of decimal places for operations involving division.\n DECIMAL_PLACES = 20, // 0 to MAX\n\n /*\n * The rounding mode used when rounding to the above decimal places, and when using\n * toExponential, toFixed, toFormat and toPrecision, and round (default value).\n * UP 0 Away from zero.\n * DOWN 1 Towards zero.\n * CEIL 2 Towards +Infinity.\n * FLOOR 3 Towards -Infinity.\n * HALF_UP 4 Towards nearest neighbour. If equidistant, up.\n * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\n * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\n * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\n * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\n */\n ROUNDING_MODE = 4, // 0 to 8\n\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\n\n // The exponent value at and beneath which toString returns exponential notation.\n // Number type: -7\n TO_EXP_NEG = -7, // 0 to -MAX\n\n // The exponent value at and above which toString returns exponential notation.\n // Number type: 21\n TO_EXP_POS = 21, // 0 to MAX\n\n // RANGE : [MIN_EXP, MAX_EXP]\n\n // The minimum exponent value, beneath which underflow to zero occurs.\n // Number type: -324 (5e-324)\n MIN_EXP = -1e7, // -1 to -MAX\n\n // The maximum exponent value, above which overflow to Infinity occurs.\n // Number type: 308 (1.7976931348623157e+308)\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\n MAX_EXP = 1e7, // 1 to MAX\n\n // Whether BigNumber Errors are ever thrown.\n ERRORS = true, // true or false\n\n // Change to intValidatorNoErrors if ERRORS is false.\n isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors\n\n // Whether to use cryptographically-secure random number generation, if available.\n CRYPTO = false, // true or false\n\n /*\n * The modulo mode used when calculating the modulus: a mod n.\n * The quotient (q = a / n) is calculated according to the corresponding rounding mode.\n * The remainder (r) is calculated as: r = a - n * q.\n *\n * UP 0 The remainder is positive if the dividend is negative, else is negative.\n * DOWN 1 The remainder has the same sign as the dividend.\n * This modulo mode is commonly known as 'truncated division' and is\n * equivalent to (a % n) in JavaScript.\n * FLOOR 3 The remainder has the same sign as the divisor (Python %).\n * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\n * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\n * The remainder is always positive.\n *\n * The truncated division, floored division, Euclidian division and IEEE 754 remainder\n * modes are commonly used for the modulus operation.\n * Although the other rounding modes can also be used, they may not give useful results.\n */\n MODULO_MODE = 1, // 0 to 9\n\n // The maximum number of significant digits of the result of the toPower operation.\n // If POW_PRECISION is 0, there will be unlimited significant digits.\n POW_PRECISION = 100, // 0 to MAX\n\n // The format specification used by the BigNumber.prototype.toFormat method.\n FORMAT = {\n decimalSeparator: '.',\n groupSeparator: ',',\n groupSize: 3,\n secondaryGroupSize: 0,\n fractionGroupSeparator: '\\xA0', // non-breaking space\n fractionGroupSize: 0\n };\n\n\n /******************************************************************************************/\n\n\n // CONSTRUCTOR\n\n\n /*\n * The BigNumber constructor and exported function.\n * Create and return a new instance of a BigNumber object.\n *\n * n {number|string|BigNumber} A numeric value.\n * [b] {number} The base of n. Integer, 2 to 64 inclusive.\n */\n function BigNumber( n, b ) {\n var c, e, i, num, len, str,\n x = this;\n\n // Enable constructor usage without new.\n if ( !( x instanceof BigNumber ) ) {\n\n // 'BigNumber() constructor call without new: {n}'\n if (ERRORS) raise( 26, 'constructor call without new', n );\n return new BigNumber( n, b );\n }\n\n // 'new BigNumber() base not an integer: {b}'\n // 'new BigNumber() base out of range: {b}'\n if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) {\n\n // Duplicate.\n if ( n instanceof BigNumber ) {\n x.s = n.s;\n x.e = n.e;\n x.c = ( n = n.c ) ? n.slice() : n;\n id = 0;\n return;\n }\n\n if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) {\n x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1;\n\n // Fast path for integers.\n if ( n === ~~n ) {\n for ( e = 0, i = n; i >= 10; i /= 10, e++ );\n x.e = e;\n x.c = [n];\n id = 0;\n return;\n }\n\n str = n + '';\n } else {\n if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num );\n x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;\n }\n } else {\n b = b | 0;\n str = n + '';\n\n // Ensure return value is rounded to DECIMAL_PLACES as with other bases.\n // Allow exponential notation to be used with base 10 argument.\n if ( b == 10 ) {\n x = new BigNumber( n instanceof BigNumber ? n : str );\n return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE );\n }\n\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\n // Any number in exponential form will fail due to the [Ee][+-].\n if ( ( num = typeof n == 'number' ) && n * 0 != 0 ||\n !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) +\n '(?:\\\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) {\n return parseNumeric( x, str, num, b );\n }\n\n if (num) {\n x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1;\n\n if ( ERRORS && str.replace( /^0\\.0*|\\./, '' ).length > 15 ) {\n\n // 'new BigNumber() number type has more than 15 significant digits: {n}'\n raise( id, tooManyDigits, n );\n }\n\n // Prevent later check for length on converted number.\n num = false;\n } else {\n x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;\n }\n\n str = convertBase( str, 10, b, x.s );\n }\n\n // Decimal point?\n if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' );\n\n // Exponential form?\n if ( ( i = str.search( /e/i ) ) > 0 ) {\n\n // Determine exponent.\n if ( e < 0 ) e = i;\n e += +str.slice( i + 1 );\n str = str.substring( 0, i );\n } else if ( e < 0 ) {\n\n // Integer.\n e = str.length;\n }\n\n // Determine leading zeros.\n for ( i = 0; str.charCodeAt(i) === 48; i++ );\n\n // Determine trailing zeros.\n for ( len = str.length; str.charCodeAt(--len) === 48; );\n str = str.slice( i, len + 1 );\n\n if (str) {\n len = str.length;\n\n // Disallow numbers with over 15 significant digits if number type.\n // 'new BigNumber() number type has more than 15 significant digits: {n}'\n if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n );\n\n e = e - i - 1;\n\n // Overflow?\n if ( e > MAX_EXP ) {\n\n // Infinity.\n x.c = x.e = null;\n\n // Underflow?\n } else if ( e < MIN_EXP ) {\n\n // Zero.\n x.c = [ x.e = 0 ];\n } else {\n x.e = e;\n x.c = [];\n\n // Transform base\n\n // e is the base 10 exponent.\n // i is where to slice str to get the first element of the coefficient array.\n i = ( e + 1 ) % LOG_BASE;\n if ( e < 0 ) i += LOG_BASE;\n\n if ( i < len ) {\n if (i) x.c.push( +str.slice( 0, i ) );\n\n for ( len -= LOG_BASE; i < len; ) {\n x.c.push( +str.slice( i, i += LOG_BASE ) );\n }\n\n str = str.slice(i);\n i = LOG_BASE - str.length;\n } else {\n i -= len;\n }\n\n for ( ; i--; str += '0' );\n x.c.push( +str );\n }\n } else {\n\n // Zero.\n x.c = [ x.e = 0 ];\n }\n\n id = 0;\n }\n\n\n // CONSTRUCTOR PROPERTIES\n\n\n BigNumber.another = another;\n\n BigNumber.ROUND_UP = 0;\n BigNumber.ROUND_DOWN = 1;\n BigNumber.ROUND_CEIL = 2;\n BigNumber.ROUND_FLOOR = 3;\n BigNumber.ROUND_HALF_UP = 4;\n BigNumber.ROUND_HALF_DOWN = 5;\n BigNumber.ROUND_HALF_EVEN = 6;\n BigNumber.ROUND_HALF_CEIL = 7;\n BigNumber.ROUND_HALF_FLOOR = 8;\n BigNumber.EUCLID = 9;\n\n\n /*\n * Configure infrequently-changing library-wide settings.\n *\n * Accept an object or an argument list, with one or many of the following properties or\n * parameters respectively:\n *\n * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive\n * ROUNDING_MODE {number} Integer, 0 to 8 inclusive\n * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or\n * [integer -MAX to 0 incl., 0 to MAX incl.]\n * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\n * [integer -MAX to -1 incl., integer 1 to MAX incl.]\n * ERRORS {boolean|number} true, false, 1 or 0\n * CRYPTO {boolean|number} true, false, 1 or 0\n * MODULO_MODE {number} 0 to 9 inclusive\n * POW_PRECISION {number} 0 to MAX inclusive\n * FORMAT {object} See BigNumber.prototype.toFormat\n * decimalSeparator {string}\n * groupSeparator {string}\n * groupSize {number}\n * secondaryGroupSize {number}\n * fractionGroupSeparator {string}\n * fractionGroupSize {number}\n *\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\n *\n * E.g.\n * BigNumber.config(20, 4) is equivalent to\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\n *\n * Ignore properties/parameters set to null or undefined.\n * Return an object with the properties current values.\n */\n BigNumber.config = function () {\n var v, p,\n i = 0,\n r = {},\n a = arguments,\n o = a[0],\n has = o && typeof o == 'object'\n ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; }\n : function () { if ( a.length > i ) return ( v = a[i++] ) != null; };\n\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\n // 'config() DECIMAL_PLACES not an integer: {v}'\n // 'config() DECIMAL_PLACES out of range: {v}'\n if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) {\n DECIMAL_PLACES = v | 0;\n }\n r[p] = DECIMAL_PLACES;\n\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\n // 'config() ROUNDING_MODE not an integer: {v}'\n // 'config() ROUNDING_MODE out of range: {v}'\n if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) {\n ROUNDING_MODE = v | 0;\n }\n r[p] = ROUNDING_MODE;\n\n // EXPONENTIAL_AT {number|number[]}\n // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive].\n // 'config() EXPONENTIAL_AT not an integer: {v}'\n // 'config() EXPONENTIAL_AT out of range: {v}'\n if ( has( p = 'EXPONENTIAL_AT' ) ) {\n\n if ( isArray(v) ) {\n if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) {\n TO_EXP_NEG = v[0] | 0;\n TO_EXP_POS = v[1] | 0;\n }\n } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {\n TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 );\n }\n }\n r[p] = [ TO_EXP_NEG, TO_EXP_POS ];\n\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\n // 'config() RANGE not an integer: {v}'\n // 'config() RANGE cannot be zero: {v}'\n // 'config() RANGE out of range: {v}'\n if ( has( p = 'RANGE' ) ) {\n\n if ( isArray(v) ) {\n if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) {\n MIN_EXP = v[0] | 0;\n MAX_EXP = v[1] | 0;\n }\n } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {\n if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 );\n else if (ERRORS) raise( 2, p + ' cannot be zero', v );\n }\n }\n r[p] = [ MIN_EXP, MAX_EXP ];\n\n // ERRORS {boolean|number} true, false, 1 or 0.\n // 'config() ERRORS not a boolean or binary digit: {v}'\n if ( has( p = 'ERRORS' ) ) {\n\n if ( v === !!v || v === 1 || v === 0 ) {\n id = 0;\n isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors;\n } else if (ERRORS) {\n raise( 2, p + notBool, v );\n }\n }\n r[p] = ERRORS;\n\n // CRYPTO {boolean|number} true, false, 1 or 0.\n // 'config() CRYPTO not a boolean or binary digit: {v}'\n // 'config() crypto unavailable: {crypto}'\n if ( has( p = 'CRYPTO' ) ) {\n\n if ( v === !!v || v === 1 || v === 0 ) {\n CRYPTO = !!( v && crypto && typeof crypto == 'object' );\n if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto );\n } else if (ERRORS) {\n raise( 2, p + notBool, v );\n }\n }\n r[p] = CRYPTO;\n\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\n // 'config() MODULO_MODE not an integer: {v}'\n // 'config() MODULO_MODE out of range: {v}'\n if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) {\n MODULO_MODE = v | 0;\n }\n r[p] = MODULO_MODE;\n\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\n // 'config() POW_PRECISION not an integer: {v}'\n // 'config() POW_PRECISION out of range: {v}'\n if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) {\n POW_PRECISION = v | 0;\n }\n r[p] = POW_PRECISION;\n\n // FORMAT {object}\n // 'config() FORMAT not an object: {v}'\n if ( has( p = 'FORMAT' ) ) {\n\n if ( typeof v == 'object' ) {\n FORMAT = v;\n } else if (ERRORS) {\n raise( 2, p + ' not an object', v );\n }\n }\n r[p] = FORMAT;\n\n return r;\n };\n\n\n /*\n * Return a new BigNumber whose value is the maximum of the arguments.\n *\n * arguments {number|string|BigNumber}\n */\n BigNumber.max = function () { return maxOrMin( arguments, P.lt ); };\n\n\n /*\n * Return a new BigNumber whose value is the minimum of the arguments.\n *\n * arguments {number|string|BigNumber}\n */\n BigNumber.min = function () { return maxOrMin( arguments, P.gt ); };\n\n\n /*\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\n * zeros are produced).\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n *\n * 'random() decimal places not an integer: {dp}'\n * 'random() decimal places out of range: {dp}'\n * 'random() crypto unavailable: {crypto}'\n */\n BigNumber.random = (function () {\n var pow2_53 = 0x20000000000000;\n\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\n // Check if Math.random() produces more than 32 bits of randomness.\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\n ? function () { return mathfloor( Math.random() * pow2_53 ); }\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\n (Math.random() * 0x800000 | 0); };\n\n return function (dp) {\n var a, b, e, k, v,\n i = 0,\n c = [],\n rand = new BigNumber(ONE);\n\n dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0;\n k = mathceil( dp / LOG_BASE );\n\n if (CRYPTO) {\n\n // Browsers supporting crypto.getRandomValues.\n if ( crypto && crypto.getRandomValues ) {\n\n a = crypto.getRandomValues( new Uint32Array( k *= 2 ) );\n\n for ( ; i < k; ) {\n\n // 53 bits:\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\n // 11111 11111111 11111111\n // 0x20000 is 2^21.\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\n\n // Rejection sampling:\n // 0 <= v < 9007199254740992\n // Probability that v >= 9e15, is\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\n if ( v >= 9e15 ) {\n b = crypto.getRandomValues( new Uint32Array(2) );\n a[i] = b[0];\n a[i + 1] = b[1];\n } else {\n\n // 0 <= v <= 8999999999999999\n // 0 <= (v % 1e14) <= 99999999999999\n c.push( v % 1e14 );\n i += 2;\n }\n }\n i = k / 2;\n\n // Node.js supporting crypto.randomBytes.\n } else if ( crypto && crypto.randomBytes ) {\n\n // buffer\n a = crypto.randomBytes( k *= 7 );\n\n for ( ; i < k; ) {\n\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\n // 0x100000000 is 2^32, 0x1000000 is 2^24\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\n // 0 <= v < 9007199254740992\n v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) +\n ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) +\n ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6];\n\n if ( v >= 9e15 ) {\n crypto.randomBytes(7).copy( a, i );\n } else {\n\n // 0 <= (v % 1e14) <= 99999999999999\n c.push( v % 1e14 );\n i += 7;\n }\n }\n i = k / 7;\n } else if (ERRORS) {\n raise( 14, 'crypto unavailable', crypto );\n }\n }\n\n // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false.\n if (!i) {\n\n for ( ; i < k; ) {\n v = random53bitInt();\n if ( v < 9e15 ) c[i++] = v % 1e14;\n }\n }\n\n k = c[--i];\n dp %= LOG_BASE;\n\n // Convert trailing digits to zeros according to dp.\n if ( k && dp ) {\n v = POWS_TEN[LOG_BASE - dp];\n c[i] = mathfloor( k / v ) * v;\n }\n\n // Remove trailing elements which are zero.\n for ( ; c[i] === 0; c.pop(), i-- );\n\n // Zero?\n if ( i < 0 ) {\n c = [ e = 0 ];\n } else {\n\n // Remove leading elements which are zero and adjust exponent accordingly.\n for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE);\n\n // Count the digits of the first element of c to determine leading zeros, and...\n for ( i = 1, v = c[0]; v >= 10; v /= 10, i++);\n\n // adjust the exponent accordingly.\n if ( i < LOG_BASE ) e -= LOG_BASE - i;\n }\n\n rand.e = e;\n rand.c = c;\n return rand;\n };\n })();\n\n\n // PRIVATE FUNCTIONS\n\n\n // Convert a numeric string of baseIn to a numeric string of baseOut.\n function convertBase( str, baseOut, baseIn, sign ) {\n var d, e, k, r, x, xc, y,\n i = str.indexOf( '.' ),\n dp = DECIMAL_PLACES,\n rm = ROUNDING_MODE;\n\n if ( baseIn < 37 ) str = str.toLowerCase();\n\n // Non-integer.\n if ( i >= 0 ) {\n k = POW_PRECISION;\n\n // Unlimited precision.\n POW_PRECISION = 0;\n str = str.replace( '.', '' );\n y = new BigNumber(baseIn);\n x = y.pow( str.length - i );\n POW_PRECISION = k;\n\n // Convert str as if an integer, then restore the fraction part by dividing the\n // result by its base raised to a power.\n y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut );\n y.e = y.c.length;\n }\n\n // Convert the number as integer.\n xc = toBaseOut( str, baseIn, baseOut );\n e = k = xc.length;\n\n // Remove trailing zeros.\n for ( ; xc[--k] == 0; xc.pop() );\n if ( !xc[0] ) return '0';\n\n if ( i < 0 ) {\n --e;\n } else {\n x.c = xc;\n x.e = e;\n\n // sign is needed for correct rounding.\n x.s = sign;\n x = div( x, y, dp, rm, baseOut );\n xc = x.c;\n r = x.r;\n e = x.e;\n }\n\n d = e + dp + 1;\n\n // The rounding digit, i.e. the digit to the right of the digit that may be rounded up.\n i = xc[d];\n k = baseOut / 2;\n r = r || d < 0 || xc[d + 1] != null;\n\n r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )\n : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\n rm == ( x.s < 0 ? 8 : 7 ) );\n\n if ( d < 1 || !xc[0] ) {\n\n // 1^-dp or 0.\n str = r ? toFixedPoint( '1', -dp ) : '0';\n } else {\n xc.length = d;\n\n if (r) {\n\n // Rounding up may mean the previous digit has to be rounded up and so on.\n for ( --baseOut; ++xc[--d] > baseOut; ) {\n xc[d] = 0;\n\n if ( !d ) {\n ++e;\n xc.unshift(1);\n }\n }\n }\n\n // Determine trailing zeros.\n for ( k = xc.length; !xc[--k]; );\n\n // E.g. [4, 11, 15] becomes 4bf.\n for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) );\n str = toFixedPoint( str, e );\n }\n\n // The caller will add the sign.\n return str;\n }\n\n\n // Perform division in the specified base. Called by div and convertBase.\n div = (function () {\n\n // Assume non-zero x and k.\n function multiply( x, k, base ) {\n var m, temp, xlo, xhi,\n carry = 0,\n i = x.length,\n klo = k % SQRT_BASE,\n khi = k / SQRT_BASE | 0;\n\n for ( x = x.slice(); i--; ) {\n xlo = x[i] % SQRT_BASE;\n xhi = x[i] / SQRT_BASE | 0;\n m = khi * xlo + xhi * klo;\n temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry;\n carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi;\n x[i] = temp % base;\n }\n\n if (carry) x.unshift(carry);\n\n return x;\n }\n\n function compare( a, b, aL, bL ) {\n var i, cmp;\n\n if ( aL != bL ) {\n cmp = aL > bL ? 1 : -1;\n } else {\n\n for ( i = cmp = 0; i < aL; i++ ) {\n\n if ( a[i] != b[i] ) {\n cmp = a[i] > b[i] ? 1 : -1;\n break;\n }\n }\n }\n return cmp;\n }\n\n function subtract( a, b, aL, base ) {\n var i = 0;\n\n // Subtract b from a.\n for ( ; aL--; ) {\n a[aL] -= i;\n i = a[aL] < b[aL] ? 1 : 0;\n a[aL] = i * base + a[aL] - b[aL];\n }\n\n // Remove leading zeros.\n for ( ; !a[0] && a.length > 1; a.shift() );\n }\n\n // x: dividend, y: divisor.\n return function ( x, y, dp, rm, base ) {\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\n yL, yz,\n s = x.s == y.s ? 1 : -1,\n xc = x.c,\n yc = y.c;\n\n // Either NaN, Infinity or 0?\n if ( !xc || !xc[0] || !yc || !yc[0] ) {\n\n return new BigNumber(\n\n // Return NaN if either NaN, or both Infinity or 0.\n !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN :\n\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\n );\n }\n\n q = new BigNumber(s);\n qc = q.c = [];\n e = x.e - y.e;\n s = dp + e + 1;\n\n if ( !base ) {\n base = BASE;\n e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE );\n s = s / LOG_BASE | 0;\n }\n\n // Result exponent may be one less then the current value of e.\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\n for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ );\n if ( yc[i] > ( xc[i] || 0 ) ) e--;\n\n if ( s < 0 ) {\n qc.push(1);\n more = true;\n } else {\n xL = xc.length;\n yL = yc.length;\n i = 0;\n s += 2;\n\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\n\n n = mathfloor( base / ( yc[0] + 1 ) );\n\n // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1.\n // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) {\n if ( n > 1 ) {\n yc = multiply( yc, n, base );\n xc = multiply( xc, n, base );\n yL = yc.length;\n xL = xc.length;\n }\n\n xi = yL;\n rem = xc.slice( 0, yL );\n remL = rem.length;\n\n // Add zeros to make remainder as long as divisor.\n for ( ; remL < yL; rem[remL++] = 0 );\n yz = yc.slice();\n yz.unshift(0);\n yc0 = yc[0];\n if ( yc[1] >= base / 2 ) yc0++;\n // Not necessary, but to prevent trial digit n > base, when using base 3.\n // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15;\n\n do {\n n = 0;\n\n // Compare divisor and remainder.\n cmp = compare( yc, rem, yL, remL );\n\n // If divisor < remainder.\n if ( cmp < 0 ) {\n\n // Calculate trial digit, n.\n\n rem0 = rem[0];\n if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 );\n\n // n is how many times the divisor goes into the current remainder.\n n = mathfloor( rem0 / yc0 );\n\n // Algorithm:\n // 1. product = divisor * trial digit (n)\n // 2. if product > remainder: product -= divisor, n--\n // 3. remainder -= product\n // 4. if product was < remainder at 2:\n // 5. compare new remainder and divisor\n // 6. If remainder > divisor: remainder -= divisor, n++\n\n if ( n > 1 ) {\n\n // n may be > base only when base is 3.\n if (n >= base) n = base - 1;\n\n // product = divisor * trial digit.\n prod = multiply( yc, n, base );\n prodL = prod.length;\n remL = rem.length;\n\n // Compare product and remainder.\n // If product > remainder.\n // Trial digit n too high.\n // n is 1 too high about 5% of the time, and is not known to have\n // ever been more than 1 too high.\n while ( compare( prod, rem, prodL, remL ) == 1 ) {\n n--;\n\n // Subtract divisor from product.\n subtract( prod, yL < prodL ? yz : yc, prodL, base );\n prodL = prod.length;\n cmp = 1;\n }\n } else {\n\n // n is 0 or 1, cmp is -1.\n // If n is 0, there is no need to compare yc and rem again below,\n // so change cmp to 1 to avoid it.\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\n if ( n == 0 ) {\n\n // divisor < remainder, so n must be at least 1.\n cmp = n = 1;\n }\n\n // product = divisor\n prod = yc.slice();\n prodL = prod.length;\n }\n\n if ( prodL < remL ) prod.unshift(0);\n\n // Subtract product from remainder.\n subtract( rem, prod, remL, base );\n remL = rem.length;\n\n // If product was < remainder.\n if ( cmp == -1 ) {\n\n // Compare divisor and new remainder.\n // If divisor < new remainder, subtract divisor from remainder.\n // Trial digit n too low.\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\n while ( compare( yc, rem, yL, remL ) < 1 ) {\n n++;\n\n // Subtract divisor from remainder.\n subtract( rem, yL < remL ? yz : yc, remL, base );\n remL = rem.length;\n }\n }\n } else if ( cmp === 0 ) {\n n++;\n rem = [0];\n } // else cmp === 1 and n will be 0\n\n // Add the next digit, n, to the result array.\n qc[i++] = n;\n\n // Update the remainder.\n if ( rem[0] ) {\n rem[remL++] = xc[xi] || 0;\n } else {\n rem = [ xc[xi] ];\n remL = 1;\n }\n } while ( ( xi++ < xL || rem[0] != null ) && s-- );\n\n more = rem[0] != null;\n\n // Leading zero?\n if ( !qc[0] ) qc.shift();\n }\n\n if ( base == BASE ) {\n\n // To calculate q.e, first get the number of digits of qc[0].\n for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ );\n round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more );\n\n // Caller is convertBase.\n } else {\n q.e = e;\n q.r = +more;\n }\n\n return q;\n };\n })();\n\n\n /*\n * Return a string representing the value of BigNumber n in fixed-point or exponential\n * notation rounded to the specified decimal places or significant digits.\n *\n * n is a BigNumber.\n * i is the index of the last digit required (i.e. the digit that may be rounded up).\n * rm is the rounding mode.\n * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24.\n */\n function format( n, i, rm, caller ) {\n var c0, e, ne, len, str;\n\n rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode )\n ? rm | 0 : ROUNDING_MODE;\n\n if ( !n.c ) return n.toString();\n c0 = n.c[0];\n ne = n.e;\n\n if ( i == null ) {\n str = coeffToString( n.c );\n str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG\n ? toExponential( str, ne )\n : toFixedPoint( str, ne );\n } else {\n n = round( new BigNumber(n), i, rm );\n\n // n.e may have changed if the value was rounded up.\n e = n.e;\n\n str = coeffToString( n.c );\n len = str.length;\n\n // toPrecision returns exponential notation if the number of significant digits\n // specified is less than the number of digits necessary to represent the integer\n // part of the value in fixed-point notation.\n\n // Exponential notation.\n if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) {\n\n // Append zeros?\n for ( ; len < i; str += '0', len++ );\n str = toExponential( str, e );\n\n // Fixed-point notation.\n } else {\n i -= ne;\n str = toFixedPoint( str, e );\n\n // Append zeros?\n if ( e + 1 > len ) {\n if ( --i > 0 ) for ( str += '.'; i--; str += '0' );\n } else {\n i += e - len;\n if ( i > 0 ) {\n if ( e + 1 == len ) str += '.';\n for ( ; i--; str += '0' );\n }\n }\n }\n }\n\n return n.s < 0 && c0 ? '-' + str : str;\n }\n\n\n // Handle BigNumber.max and BigNumber.min.\n function maxOrMin( args, method ) {\n var m, n,\n i = 0;\n\n if ( isArray( args[0] ) ) args = args[0];\n m = new BigNumber( args[0] );\n\n for ( ; ++i < args.length; ) {\n n = new BigNumber( args[i] );\n\n // If any number is NaN, return NaN.\n if ( !n.s ) {\n m = n;\n break;\n } else if ( method.call( m, n ) ) {\n m = n;\n }\n }\n\n return m;\n }\n\n\n /*\n * Return true if n is an integer in range, otherwise throw.\n * Use for argument validation when ERRORS is true.\n */\n function intValidatorWithErrors( n, min, max, caller, name ) {\n if ( n < min || n > max || n != truncate(n) ) {\n raise( caller, ( name || 'decimal places' ) +\n ( n < min || n > max ? ' out of range' : ' not an integer' ), n );\n }\n\n return true;\n }\n\n\n /*\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\n * Called by minus, plus and times.\n */\n function normalise( n, c, e ) {\n var i = 1,\n j = c.length;\n\n // Remove trailing zeros.\n for ( ; !c[--j]; c.pop() );\n\n // Calculate the base 10 exponent. First get the number of digits of c[0].\n for ( j = c[0]; j >= 10; j /= 10, i++ );\n\n // Overflow?\n if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) {\n\n // Infinity.\n n.c = n.e = null;\n\n // Underflow?\n } else if ( e < MIN_EXP ) {\n\n // Zero.\n n.c = [ n.e = 0 ];\n } else {\n n.e = e;\n n.c = c;\n }\n\n return n;\n }\n\n\n // Handle values that fail the validity test in BigNumber.\n parseNumeric = (function () {\n var basePrefix = /^(-?)0([xbo])/i,\n dotAfter = /^([^.]+)\\.$/,\n dotBefore = /^\\.([^.]+)$/,\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\n whitespaceOrPlus = /^\\s*\\+|^\\s+|\\s+$/g;\n\n return function ( x, str, num, b ) {\n var base,\n s = num ? str : str.replace( whitespaceOrPlus, '' );\n\n // No exception on ±Infinity or NaN.\n if ( isInfinityOrNaN.test(s) ) {\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\n } else {\n if ( !num ) {\n\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\n s = s.replace( basePrefix, function ( m, p1, p2 ) {\n base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\n return !b || b == base ? p1 : m;\n });\n\n if (b) {\n base = b;\n\n // E.g. '1.' to '1', '.1' to '0.1'\n s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' );\n }\n\n if ( str != s ) return new BigNumber( s, base );\n }\n\n // 'new BigNumber() not a number: {n}'\n // 'new BigNumber() not a base {b} number: {n}'\n if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str );\n x.s = null;\n }\n\n x.c = x.e = null;\n id = 0;\n }\n })();\n\n\n // Throw a BigNumber Error.\n function raise( caller, msg, val ) {\n var error = new Error( [\n 'new BigNumber', // 0\n 'cmp', // 1\n 'config', // 2\n 'div', // 3\n 'divToInt', // 4\n 'eq', // 5\n 'gt', // 6\n 'gte', // 7\n 'lt', // 8\n 'lte', // 9\n 'minus', // 10\n 'mod', // 11\n 'plus', // 12\n 'precision', // 13\n 'random', // 14\n 'round', // 15\n 'shift', // 16\n 'times', // 17\n 'toDigits', // 18\n 'toExponential', // 19\n 'toFixed', // 20\n 'toFormat', // 21\n 'toFraction', // 22\n 'pow', // 23\n 'toPrecision', // 24\n 'toString', // 25\n 'BigNumber' // 26\n ][caller] + '() ' + msg + ': ' + val );\n\n error.name = 'BigNumber Error';\n id = 0;\n throw error;\n }\n\n\n /*\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\n * If r is truthy, it is known that there are more digits after the rounding digit.\n */\n function round( x, sd, rm, r ) {\n var d, i, j, k, n, ni, rd,\n xc = x.c,\n pows10 = POWS_TEN;\n\n // if x is not Infinity or NaN...\n if (xc) {\n\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\n // ni is the index of n within x.c.\n // d is the number of digits of n.\n // i is the index of rd within n including leading zeros.\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\n out: {\n\n // Get the number of digits of the first element of xc.\n for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ );\n i = sd - d;\n\n // If the rounding digit is in the first element of xc...\n if ( i < 0 ) {\n i += LOG_BASE;\n j = sd;\n n = xc[ ni = 0 ];\n\n // Get the rounding digit at index j of n.\n rd = n / pows10[ d - j - 1 ] % 10 | 0;\n } else {\n ni = mathceil( ( i + 1 ) / LOG_BASE );\n\n if ( ni >= xc.length ) {\n\n if (r) {\n\n // Needed by sqrt.\n for ( ; xc.length <= ni; xc.push(0) );\n n = rd = 0;\n d = 1;\n i %= LOG_BASE;\n j = i - LOG_BASE + 1;\n } else {\n break out;\n }\n } else {\n n = k = xc[ni];\n\n // Get the number of digits of n.\n for ( d = 1; k >= 10; k /= 10, d++ );\n\n // Get the index of rd within n.\n i %= LOG_BASE;\n\n // Get the index of rd within n, adjusted for leading zeros.\n // The number of leading zeros of n is given by LOG_BASE - d.\n j = i - LOG_BASE + d;\n\n // Get the rounding digit at index j of n.\n rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0;\n }\n }\n\n r = r || sd < 0 ||\n\n // Are there any non-zero digits after the rounding digit?\n // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\n xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] );\n\n r = rm < 4\n ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )\n : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 &&\n\n // Check whether the digit to the left of the rounding digit is odd.\n ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 ||\n rm == ( x.s < 0 ? 8 : 7 ) );\n\n if ( sd < 1 || !xc[0] ) {\n xc.length = 0;\n\n if (r) {\n\n // Convert sd to decimal places.\n sd -= x.e + 1;\n\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\n xc[0] = pows10[ sd % LOG_BASE ];\n x.e = -sd || 0;\n } else {\n\n // Zero.\n xc[0] = x.e = 0;\n }\n\n return x;\n }\n\n // Remove excess digits.\n if ( i == 0 ) {\n xc.length = ni;\n k = 1;\n ni--;\n } else {\n xc.length = ni + 1;\n k = pows10[ LOG_BASE - i ];\n\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\n // j > 0 means i > number of leading zeros of n.\n xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0;\n }\n\n // Round up?\n if (r) {\n\n for ( ; ; ) {\n\n // If the digit to be rounded up is in the first element of xc...\n if ( ni == 0 ) {\n\n // i will be the length of xc[0] before k is added.\n for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ );\n j = xc[0] += k;\n for ( k = 1; j >= 10; j /= 10, k++ );\n\n // if i != k the length has increased.\n if ( i != k ) {\n x.e++;\n if ( xc[0] == BASE ) xc[0] = 1;\n }\n\n break;\n } else {\n xc[ni] += k;\n if ( xc[ni] != BASE ) break;\n xc[ni--] = 0;\n k = 1;\n }\n }\n }\n\n // Remove trailing zeros.\n for ( i = xc.length; xc[--i] === 0; xc.pop() );\n }\n\n // Overflow? Infinity.\n if ( x.e > MAX_EXP ) {\n x.c = x.e = null;\n\n // Underflow? Zero.\n } else if ( x.e < MIN_EXP ) {\n x.c = [ x.e = 0 ];\n }\n }\n\n return x;\n }\n\n\n // PROTOTYPE/INSTANCE METHODS\n\n\n /*\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\n */\n P.absoluteValue = P.abs = function () {\n var x = new BigNumber(this);\n if ( x.s < 0 ) x.s = 1;\n return x;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole\n * number in the direction of Infinity.\n */\n P.ceil = function () {\n return round( new BigNumber(this), this.e + 1, 2 );\n };\n\n\n /*\n * Return\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\n * 0 if they have the same value,\n * or null if the value of either is NaN.\n */\n P.comparedTo = P.cmp = function ( y, b ) {\n id = 1;\n return compare( this, new BigNumber( y, b ) );\n };\n\n\n /*\n * Return the number of decimal places of the value of this BigNumber, or null if the value\n * of this BigNumber is ±Infinity or NaN.\n */\n P.decimalPlaces = P.dp = function () {\n var n, v,\n c = this.c;\n\n if ( !c ) return null;\n n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE;\n\n // Subtract the number of trailing zeros of the last number.\n if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- );\n if ( n < 0 ) n = 0;\n\n return n;\n };\n\n\n /*\n * n / 0 = I\n * n / N = N\n * n / I = 0\n * 0 / n = 0\n * 0 / 0 = N\n * 0 / N = N\n * 0 / I = 0\n * N / n = N\n * N / 0 = N\n * N / N = N\n * N / I = N\n * I / n = I\n * I / 0 = I\n * I / N = N\n * I / I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\n */\n P.dividedBy = P.div = function ( y, b ) {\n id = 3;\n return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE );\n };\n\n\n /*\n * Return a new BigNumber whose value is the integer part of dividing the value of this\n * BigNumber by the value of BigNumber(y, b).\n */\n P.dividedToIntegerBy = P.divToInt = function ( y, b ) {\n id = 4;\n return div( this, new BigNumber( y, b ), 0, 1 );\n };\n\n\n /*\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.equals = P.eq = function ( y, b ) {\n id = 5;\n return compare( this, new BigNumber( y, b ) ) === 0;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole\n * number in the direction of -Infinity.\n */\n P.floor = function () {\n return round( new BigNumber(this), this.e + 1, 3 );\n };\n\n\n /*\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.greaterThan = P.gt = function ( y, b ) {\n id = 6;\n return compare( this, new BigNumber( y, b ) ) > 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is greater than or equal to the value of\n * BigNumber(y, b), otherwise returns false.\n */\n P.greaterThanOrEqualTo = P.gte = function ( y, b ) {\n id = 7;\n return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0;\n\n };\n\n\n /*\n * Return true if the value of this BigNumber is a finite number, otherwise returns false.\n */\n P.isFinite = function () {\n return !!this.c;\n };\n\n\n /*\n * Return true if the value of this BigNumber is an integer, otherwise return false.\n */\n P.isInteger = P.isInt = function () {\n return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2;\n };\n\n\n /*\n * Return true if the value of this BigNumber is NaN, otherwise returns false.\n */\n P.isNaN = function () {\n return !this.s;\n };\n\n\n /*\n * Return true if the value of this BigNumber is negative, otherwise returns false.\n */\n P.isNegative = P.isNeg = function () {\n return this.s < 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is 0 or -0, otherwise returns false.\n */\n P.isZero = function () {\n return !!this.c && this.c[0] == 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.lessThan = P.lt = function ( y, b ) {\n id = 8;\n return compare( this, new BigNumber( y, b ) ) < 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is less than or equal to the value of\n * BigNumber(y, b), otherwise returns false.\n */\n P.lessThanOrEqualTo = P.lte = function ( y, b ) {\n id = 9;\n return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0;\n };\n\n\n /*\n * n - 0 = n\n * n - N = N\n * n - I = -I\n * 0 - n = -n\n * 0 - 0 = 0\n * 0 - N = N\n * 0 - I = -I\n * N - n = N\n * N - 0 = N\n * N - N = N\n * N - I = N\n * I - n = I\n * I - 0 = I\n * I - N = N\n * I - I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\n * BigNumber(y, b).\n */\n P.minus = P.sub = function ( y, b ) {\n var i, j, t, xLTy,\n x = this,\n a = x.s;\n\n id = 10;\n y = new BigNumber( y, b );\n b = y.s;\n\n // Either NaN?\n if ( !a || !b ) return new BigNumber(NaN);\n\n // Signs differ?\n if ( a != b ) {\n y.s = -b;\n return x.plus(y);\n }\n\n var xe = x.e / LOG_BASE,\n ye = y.e / LOG_BASE,\n xc = x.c,\n yc = y.c;\n\n if ( !xe || !ye ) {\n\n // Either Infinity?\n if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN );\n\n // Either zero?\n if ( !xc[0] || !yc[0] ) {\n\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\n return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x :\n\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\n ROUNDING_MODE == 3 ? -0 : 0 );\n }\n }\n\n xe = bitFloor(xe);\n ye = bitFloor(ye);\n xc = xc.slice();\n\n // Determine which is the bigger number.\n if ( a = xe - ye ) {\n\n if ( xLTy = a < 0 ) {\n a = -a;\n t = xc;\n } else {\n ye = xe;\n t = yc;\n }\n\n t.reverse();\n\n // Prepend zeros to equalise exponents.\n for ( b = a; b--; t.push(0) );\n t.reverse();\n } else {\n\n // Exponents equal. Check digit by digit.\n j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b;\n\n for ( a = b = 0; b < j; b++ ) {\n\n if ( xc[b] != yc[b] ) {\n xLTy = xc[b] < yc[b];\n break;\n }\n }\n }\n\n // x < y? Point xc to the array of the bigger number.\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\n\n b = ( j = yc.length ) - ( i = xc.length );\n\n // Append zeros to xc if shorter.\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\n if ( b > 0 ) for ( ; b--; xc[i++] = 0 );\n b = BASE - 1;\n\n // Subtract yc from xc.\n for ( ; j > a; ) {\n\n if ( xc[--j] < yc[j] ) {\n for ( i = j; i && !xc[--i]; xc[i] = b );\n --xc[i];\n xc[j] += BASE;\n }\n\n xc[j] -= yc[j];\n }\n\n // Remove leading zeros and adjust exponent accordingly.\n for ( ; xc[0] == 0; xc.shift(), --ye );\n\n // Zero?\n if ( !xc[0] ) {\n\n // Following IEEE 754 (2008) 6.3,\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\n y.c = [ y.e = 0 ];\n return y;\n }\n\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\n // for finite x and y.\n return normalise( y, xc, ye );\n };\n\n\n /*\n * n % 0 = N\n * n % N = N\n * n % I = n\n * 0 % n = 0\n * -0 % n = -0\n * 0 % 0 = N\n * 0 % N = N\n * 0 % I = 0\n * N % n = N\n * N % 0 = N\n * N % N = N\n * N % I = N\n * I % n = N\n * I % 0 = N\n * I % N = N\n * I % I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\n */\n P.modulo = P.mod = function ( y, b ) {\n var q, s,\n x = this;\n\n id = 11;\n y = new BigNumber( y, b );\n\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\n if ( !x.c || !y.s || y.c && !y.c[0] ) {\n return new BigNumber(NaN);\n\n // Return x if y is Infinity or x is zero.\n } else if ( !y.c || x.c && !x.c[0] ) {\n return new BigNumber(x);\n }\n\n if ( MODULO_MODE == 9 ) {\n\n // Euclidian division: q = sign(y) * floor(x / abs(y))\n // r = x - qy where 0 <= r < abs(y)\n s = y.s;\n y.s = 1;\n q = div( x, y, 0, 3 );\n y.s = s;\n q.s *= s;\n } else {\n q = div( x, y, 0, MODULO_MODE );\n }\n\n return x.minus( q.times(y) );\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber negated,\n * i.e. multiplied by -1.\n */\n P.negated = P.neg = function () {\n var x = new BigNumber(this);\n x.s = -x.s || null;\n return x;\n };\n\n\n /*\n * n + 0 = n\n * n + N = N\n * n + I = I\n * 0 + n = n\n * 0 + 0 = 0\n * 0 + N = N\n * 0 + I = I\n * N + n = N\n * N + 0 = N\n * N + N = N\n * N + I = N\n * I + n = I\n * I + 0 = I\n * I + N = N\n * I + I = I\n *\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\n * BigNumber(y, b).\n */\n P.plus = P.add = function ( y, b ) {\n var t,\n x = this,\n a = x.s;\n\n id = 12;\n y = new BigNumber( y, b );\n b = y.s;\n\n // Either NaN?\n if ( !a || !b ) return new BigNumber(NaN);\n\n // Signs differ?\n if ( a != b ) {\n y.s = -b;\n return x.minus(y);\n }\n\n var xe = x.e / LOG_BASE,\n ye = y.e / LOG_BASE,\n xc = x.c,\n yc = y.c;\n\n if ( !xe || !ye ) {\n\n // Return ±Infinity if either ±Infinity.\n if ( !xc || !yc ) return new BigNumber( a / 0 );\n\n // Either zero?\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\n if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 );\n }\n\n xe = bitFloor(xe);\n ye = bitFloor(ye);\n xc = xc.slice();\n\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\n if ( a = xe - ye ) {\n if ( a > 0 ) {\n ye = xe;\n t = yc;\n } else {\n a = -a;\n t = xc;\n }\n\n t.reverse();\n for ( ; a--; t.push(0) );\n t.reverse();\n }\n\n a = xc.length;\n b = yc.length;\n\n // Point xc to the longer array, and b to the shorter length.\n if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a;\n\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\n for ( a = 0; b; ) {\n a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0;\n xc[b] %= BASE;\n }\n\n if (a) {\n xc.unshift(a);\n ++ye;\n }\n\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\n // ye = MAX_EXP + 1 possible\n return normalise( y, xc, ye );\n };\n\n\n /*\n * Return the number of significant digits of the value of this BigNumber.\n *\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\n */\n P.precision = P.sd = function (z) {\n var n, v,\n x = this,\n c = x.c;\n\n // 'precision() argument not a boolean or binary digit: {z}'\n if ( z != null && z !== !!z && z !== 1 && z !== 0 ) {\n if (ERRORS) raise( 13, 'argument' + notBool, z );\n if ( z != !!z ) z = null;\n }\n\n if ( !c ) return null;\n v = c.length - 1;\n n = v * LOG_BASE + 1;\n\n if ( v = c[v] ) {\n\n // Subtract the number of trailing zeros of the last element.\n for ( ; v % 10 == 0; v /= 10, n-- );\n\n // Add the number of digits of the first element.\n for ( v = c[0]; v >= 10; v /= 10, n++ );\n }\n\n if ( z && x.e + 1 > n ) n = x.e + 1;\n\n return n;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of\n * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if\n * omitted.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'round() decimal places out of range: {dp}'\n * 'round() decimal places not an integer: {dp}'\n * 'round() rounding mode not an integer: {rm}'\n * 'round() rounding mode out of range: {rm}'\n */\n P.round = function ( dp, rm ) {\n var n = new BigNumber(this);\n\n if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) {\n round( n, ~~dp + this.e + 1, rm == null ||\n !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 );\n }\n\n return n;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\n *\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\n *\n * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity\n * otherwise.\n *\n * 'shift() argument not an integer: {k}'\n * 'shift() argument out of range: {k}'\n */\n P.shift = function (k) {\n var n = this;\n return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' )\n\n // k < 1e+21, or truncate(k) will produce exponential notation.\n ? n.times( '1e' + truncate(k) )\n : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER )\n ? n.s * ( k < 0 ? 0 : 1 / 0 )\n : n );\n };\n\n\n /*\n * sqrt(-n) = N\n * sqrt( N) = N\n * sqrt(-I) = N\n * sqrt( I) = I\n * sqrt( 0) = 0\n * sqrt(-0) = -0\n *\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\n */\n P.squareRoot = P.sqrt = function () {\n var m, n, r, rep, t,\n x = this,\n c = x.c,\n s = x.s,\n e = x.e,\n dp = DECIMAL_PLACES + 4,\n half = new BigNumber('0.5');\n\n // Negative/NaN/Infinity/zero?\n if ( s !== 1 || !c || !c[0] ) {\n return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 );\n }\n\n // Initial estimate.\n s = Math.sqrt( +x );\n\n // Math.sqrt underflow/overflow?\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\n if ( s == 0 || s == 1 / 0 ) {\n n = coeffToString(c);\n if ( ( n.length + e ) % 2 == 0 ) n += '0';\n s = Math.sqrt(n);\n e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 );\n\n if ( s == 1 / 0 ) {\n n = '1e' + e;\n } else {\n n = s.toExponential();\n n = n.slice( 0, n.indexOf('e') + 1 ) + e;\n }\n\n r = new BigNumber(n);\n } else {\n r = new BigNumber( s + '' );\n }\n\n // Check for zero.\n // r could be zero if MIN_EXP is changed after the this value was created.\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\n // coeffToString to throw.\n if ( r.c[0] ) {\n e = r.e;\n s = e + dp;\n if ( s < 3 ) s = 0;\n\n // Newton-Raphson iteration.\n for ( ; ; ) {\n t = r;\n r = half.times( t.plus( div( x, t, dp, 1 ) ) );\n\n if ( coeffToString( t.c ).slice( 0, s ) === ( n =\n coeffToString( r.c ) ).slice( 0, s ) ) {\n\n // The exponent of r may here be one less than the final result exponent,\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\n // are indexed correctly.\n if ( r.e < e ) --s;\n n = n.slice( s - 3, s + 1 );\n\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\n // iteration.\n if ( n == '9999' || !rep && n == '4999' ) {\n\n // On the first iteration only, check to see if rounding up gives the\n // exact result as the nines may infinitely repeat.\n if ( !rep ) {\n round( t, t.e + DECIMAL_PLACES + 2, 0 );\n\n if ( t.times(t).eq(x) ) {\n r = t;\n break;\n }\n }\n\n dp += 4;\n s += 4;\n rep = 1;\n } else {\n\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\n // result. If not, then there are further digits and m will be truthy.\n if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) {\n\n // Truncate to the first rounding digit.\n round( r, r.e + DECIMAL_PLACES + 2, 1 );\n m = !r.times(r).eq(x);\n }\n\n break;\n }\n }\n }\n }\n\n return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m );\n };\n\n\n /*\n * n * 0 = 0\n * n * N = N\n * n * I = I\n * 0 * n = 0\n * 0 * 0 = 0\n * 0 * N = N\n * 0 * I = N\n * N * n = N\n * N * 0 = N\n * N * N = N\n * N * I = N\n * I * n = I\n * I * 0 = N\n * I * N = N\n * I * I = I\n *\n * Return a new BigNumber whose value is the value of this BigNumber times the value of\n * BigNumber(y, b).\n */\n P.times = P.mul = function ( y, b ) {\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\n base, sqrtBase,\n x = this,\n xc = x.c,\n yc = ( id = 17, y = new BigNumber( y, b ) ).c;\n\n // Either NaN, ±Infinity or ±0?\n if ( !xc || !yc || !xc[0] || !yc[0] ) {\n\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\n if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) {\n y.c = y.e = y.s = null;\n } else {\n y.s *= x.s;\n\n // Return ±Infinity if either is ±Infinity.\n if ( !xc || !yc ) {\n y.c = y.e = null;\n\n // Return ±0 if either is ±0.\n } else {\n y.c = [0];\n y.e = 0;\n }\n }\n\n return y;\n }\n\n e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE );\n y.s *= x.s;\n xcL = xc.length;\n ycL = yc.length;\n\n // Ensure xc points to longer array and xcL to its length.\n if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\n\n // Initialise the result array with zeros.\n for ( i = xcL + ycL, zc = []; i--; zc.push(0) );\n\n base = BASE;\n sqrtBase = SQRT_BASE;\n\n for ( i = ycL; --i >= 0; ) {\n c = 0;\n ylo = yc[i] % sqrtBase;\n yhi = yc[i] / sqrtBase | 0;\n\n for ( k = xcL, j = i + k; j > i; ) {\n xlo = xc[--k] % sqrtBase;\n xhi = xc[k] / sqrtBase | 0;\n m = yhi * xlo + xhi * ylo;\n xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c;\n c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi;\n zc[j--] = xlo % base;\n }\n\n zc[j] = c;\n }\n\n if (c) {\n ++e;\n } else {\n zc.shift();\n }\n\n return normalise( y, zc, e );\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of\n * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted.\n *\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toDigits() precision out of range: {sd}'\n * 'toDigits() precision not an integer: {sd}'\n * 'toDigits() rounding mode not an integer: {rm}'\n * 'toDigits() rounding mode out of range: {rm}'\n */\n P.toDigits = function ( sd, rm ) {\n var n = new BigNumber(this);\n sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0;\n rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0;\n return sd ? round( n, sd, rm ) : n;\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in exponential notation and\n * rounded using ROUNDING_MODE to dp fixed decimal places.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toExponential() decimal places not an integer: {dp}'\n * 'toExponential() decimal places out of range: {dp}'\n * 'toExponential() rounding mode not an integer: {rm}'\n * 'toExponential() rounding mode out of range: {rm}'\n */\n P.toExponential = function ( dp, rm ) {\n return format( this,\n dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\n *\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\n * but e.g. (-0.00001).toFixed(0) is '-0'.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toFixed() decimal places not an integer: {dp}'\n * 'toFixed() decimal places out of range: {dp}'\n * 'toFixed() rounding mode not an integer: {rm}'\n * 'toFixed() rounding mode out of range: {rm}'\n */\n P.toFixed = function ( dp, rm ) {\n return format( this, dp != null && isValidInt( dp, 0, MAX, 20 )\n ? ~~dp + this.e + 1 : null, rm, 20 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\n * of the FORMAT object (see BigNumber.config).\n *\n * FORMAT = {\n * decimalSeparator : '.',\n * groupSeparator : ',',\n * groupSize : 3,\n * secondaryGroupSize : 0,\n * fractionGroupSeparator : '\\xA0', // non-breaking space\n * fractionGroupSize : 0\n * };\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toFormat() decimal places not an integer: {dp}'\n * 'toFormat() decimal places out of range: {dp}'\n * 'toFormat() rounding mode not an integer: {rm}'\n * 'toFormat() rounding mode out of range: {rm}'\n */\n P.toFormat = function ( dp, rm ) {\n var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 )\n ? ~~dp + this.e + 1 : null, rm, 21 );\n\n if ( this.c ) {\n var i,\n arr = str.split('.'),\n g1 = +FORMAT.groupSize,\n g2 = +FORMAT.secondaryGroupSize,\n groupSeparator = FORMAT.groupSeparator,\n intPart = arr[0],\n fractionPart = arr[1],\n isNeg = this.s < 0,\n intDigits = isNeg ? intPart.slice(1) : intPart,\n len = intDigits.length;\n\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\n\n if ( g1 > 0 && len > 0 ) {\n i = len % g1 || g1;\n intPart = intDigits.substr( 0, i );\n\n for ( ; i < len; i += g1 ) {\n intPart += groupSeparator + intDigits.substr( i, g1 );\n }\n\n if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i);\n if (isNeg) intPart = '-' + intPart;\n }\n\n str = fractionPart\n ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize )\n ? fractionPart.replace( new RegExp( '\\\\d{' + g2 + '}\\\\B', 'g' ),\n '$&' + FORMAT.fractionGroupSeparator )\n : fractionPart )\n : intPart;\n }\n\n return str;\n };\n\n\n /*\n * Return a string array representing the value of this BigNumber as a simple fraction with\n * an integer numerator and an integer denominator. The denominator will be a positive\n * non-zero value less than or equal to the specified maximum denominator. If a maximum\n * denominator is not specified, the denominator will be the lowest value necessary to\n * represent the number exactly.\n *\n * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator.\n *\n * 'toFraction() max denominator not an integer: {md}'\n * 'toFraction() max denominator out of range: {md}'\n */\n P.toFraction = function (md) {\n var arr, d0, d2, e, exp, n, n0, q, s,\n k = ERRORS,\n x = this,\n xc = x.c,\n d = new BigNumber(ONE),\n n1 = d0 = new BigNumber(ONE),\n d1 = n0 = new BigNumber(ONE);\n\n if ( md != null ) {\n ERRORS = false;\n n = new BigNumber(md);\n ERRORS = k;\n\n if ( !( k = n.isInt() ) || n.lt(ONE) ) {\n\n if (ERRORS) {\n raise( 22,\n 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md );\n }\n\n // ERRORS is false:\n // If md is a finite non-integer >= 1, round it to an integer and use it.\n md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null;\n }\n }\n\n if ( !xc ) return x.toString();\n s = coeffToString(xc);\n\n // Determine initial denominator.\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\n e = d.e = s.length - x.e - 1;\n d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ];\n md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n;\n\n exp = MAX_EXP;\n MAX_EXP = 1 / 0;\n n = new BigNumber(s);\n\n // n0 = d1 = 0\n n0.c[0] = 0;\n\n for ( ; ; ) {\n q = div( n, d, 0, 1 );\n d2 = d0.plus( q.times(d1) );\n if ( d2.cmp(md) == 1 ) break;\n d0 = d1;\n d1 = d2;\n n1 = n0.plus( q.times( d2 = n1 ) );\n n0 = d2;\n d = n.minus( q.times( d2 = d ) );\n n = d2;\n }\n\n d2 = div( md.minus(d0), d1, 0, 1 );\n n0 = n0.plus( d2.times(n1) );\n d0 = d0.plus( d2.times(d1) );\n n0.s = n1.s = x.s;\n e *= 2;\n\n // Determine which fraction is closer to x, n0/d0 or n1/d1\n arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp(\n div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1\n ? [ n1.toString(), d1.toString() ]\n : [ n0.toString(), d0.toString() ];\n\n MAX_EXP = exp;\n return arr;\n };\n\n\n /*\n * Return the value of this BigNumber converted to a number primitive.\n */\n P.toNumber = function () {\n var x = this;\n\n // Ensure zero has correct sign.\n return +x || ( x.s ? x.s * 0 : NaN );\n };\n\n\n /*\n * Return a BigNumber whose value is the value of this BigNumber raised to the power n.\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\n * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE.\n *\n * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive.\n * (Performs 54 loop iterations for n of 9007199254740992.)\n *\n * 'pow() exponent not an integer: {n}'\n * 'pow() exponent out of range: {n}'\n */\n P.toPower = P.pow = function (n) {\n var k, y,\n i = mathfloor( n < 0 ? -n : +n ),\n x = this;\n\n // Pass ±Infinity to Math.pow if exponent is out of range.\n if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) &&\n ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) ||\n parseFloat(n) != n && !( n = NaN ) ) ) {\n return new BigNumber( Math.pow( +x, n ) );\n }\n\n // Truncating each coefficient array to a length of k after each multiplication equates\n // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a\n // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.)\n k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0;\n y = new BigNumber(ONE);\n\n for ( ; ; ) {\n\n if ( i % 2 ) {\n y = y.times(x);\n if ( !y.c ) break;\n if ( k && y.c.length > k ) y.c.length = k;\n }\n\n i = mathfloor( i / 2 );\n if ( !i ) break;\n\n x = x.times(x);\n if ( k && x.c && x.c.length > k ) x.c.length = k;\n }\n\n if ( n < 0 ) y = ONE.div(y);\n return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y;\n };\n\n\n /*\n * Return a string representing the value of this BigNumber rounded to sd significant digits\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\n * necessary to represent the integer part of the value in fixed-point notation, then use\n * exponential notation.\n *\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toPrecision() precision not an integer: {sd}'\n * 'toPrecision() precision out of range: {sd}'\n * 'toPrecision() rounding mode not an integer: {rm}'\n * 'toPrecision() rounding mode out of range: {rm}'\n */\n P.toPrecision = function ( sd, rm ) {\n return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' )\n ? sd | 0 : null, rm, 24 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\n * TO_EXP_NEG, return exponential notation.\n *\n * [b] {number} Integer, 2 to 64 inclusive.\n *\n * 'toString() base not an integer: {b}'\n * 'toString() base out of range: {b}'\n */\n P.toString = function (b) {\n var str,\n n = this,\n s = n.s,\n e = n.e;\n\n // Infinity or NaN?\n if ( e === null ) {\n\n if (s) {\n str = 'Infinity';\n if ( s < 0 ) str = '-' + str;\n } else {\n str = 'NaN';\n }\n } else {\n str = coeffToString( n.c );\n\n if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) {\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\n ? toExponential( str, e )\n : toFixedPoint( str, e );\n } else {\n str = convertBase( toFixedPoint( str, e ), b | 0, 10, s );\n }\n\n if ( s < 0 && n.c[0] ) str = '-' + str;\n }\n\n return str;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole\n * number.\n */\n P.truncated = P.trunc = function () {\n return round( new BigNumber(this), this.e + 1, 1 );\n };\n\n\n\n /*\n * Return as toString, but do not accept a base argument.\n */\n P.valueOf = P.toJSON = function () {\n return this.toString();\n };\n\n\n // Aliases for BigDecimal methods.\n //P.add = P.plus; // P.add included above\n //P.subtract = P.minus; // P.sub included above\n //P.multiply = P.times; // P.mul included above\n //P.divide = P.div;\n //P.remainder = P.mod;\n //P.compareTo = P.cmp;\n //P.negate = P.neg;\n\n\n if ( configObj != null ) BigNumber.config(configObj);\n\n return BigNumber;\n }\n\n\n // PRIVATE HELPER FUNCTIONS\n\n\n function bitFloor(n) {\n var i = n | 0;\n return n > 0 || n === i ? i : i - 1;\n }\n\n\n // Return a coefficient array as a string of base 10 digits.\n function coeffToString(a) {\n var s, z,\n i = 1,\n j = a.length,\n r = a[0] + '';\n\n for ( ; i < j; ) {\n s = a[i++] + '';\n z = LOG_BASE - s.length;\n for ( ; z--; s = '0' + s );\n r += s;\n }\n\n // Determine trailing zeros.\n for ( j = r.length; r.charCodeAt(--j) === 48; );\n return r.slice( 0, j + 1 || 1 );\n }\n\n\n // Compare the value of BigNumbers x and y.\n function compare( x, y ) {\n var a, b,\n xc = x.c,\n yc = y.c,\n i = x.s,\n j = y.s,\n k = x.e,\n l = y.e;\n\n // Either NaN?\n if ( !i || !j ) return null;\n\n a = xc && !xc[0];\n b = yc && !yc[0];\n\n // Either zero?\n if ( a || b ) return a ? b ? 0 : -j : i;\n\n // Signs differ?\n if ( i != j ) return i;\n\n a = i < 0;\n b = k == l;\n\n // Either Infinity?\n if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1;\n\n // Compare exponents.\n if ( !b ) return k > l ^ a ? 1 : -1;\n\n j = ( k = xc.length ) < ( l = yc.length ) ? k : l;\n\n // Compare digit by digit.\n for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1;\n\n // Compare lengths.\n return k == l ? 0 : k > l ^ a ? 1 : -1;\n }\n\n\n /*\n * Return true if n is a valid number in range, otherwise false.\n * Use for argument validation when ERRORS is false.\n * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10.\n */\n function intValidatorNoErrors( n, min, max ) {\n return ( n = truncate(n) ) >= min && n <= max;\n }\n\n\n function isArray(obj) {\n return Object.prototype.toString.call(obj) == '[object Array]';\n }\n\n\n /*\n * Convert string of baseIn to an array of numbers of baseOut.\n * Eg. convertBase('255', 10, 16) returns [15, 15].\n * Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\n */\n function toBaseOut( str, baseIn, baseOut ) {\n var j,\n arr = [0],\n arrL,\n i = 0,\n len = str.length;\n\n for ( ; i < len; ) {\n for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn );\n arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) );\n\n for ( ; j < arr.length; j++ ) {\n\n if ( arr[j] > baseOut - 1 ) {\n if ( arr[j + 1] == null ) arr[j + 1] = 0;\n arr[j + 1] += arr[j] / baseOut | 0;\n arr[j] %= baseOut;\n }\n }\n }\n\n return arr.reverse();\n }\n\n\n function toExponential( str, e ) {\n return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) +\n ( e < 0 ? 'e' : 'e+' ) + e;\n }\n\n\n function toFixedPoint( str, e ) {\n var len, z;\n\n // Negative exponent?\n if ( e < 0 ) {\n\n // Prepend zeros.\n for ( z = '0.'; ++e; z += '0' );\n str = z + str;\n\n // Positive exponent\n } else {\n len = str.length;\n\n // Append zeros.\n if ( ++e > len ) {\n for ( z = '0', e -= len; --e; z += '0' );\n str += z;\n } else if ( e < len ) {\n str = str.slice( 0, e ) + '.' + str.slice(e);\n }\n }\n\n return str;\n }\n\n\n function truncate(n) {\n n = parseFloat(n);\n return n < 0 ? mathceil(n) : mathfloor(n);\n }\n\n\n // EXPORT\n\n\n BigNumber = another();\n\n // AMD.\n if ( typeof define == 'function' && define.amd ) {\n define( function () { return BigNumber; } );\n\n // Node and other environments that support module.exports.\n } else if ( typeof module != 'undefined' && module.exports ) {\n module.exports = BigNumber;\n if ( !crypto ) try { crypto = require('crypto'); } catch (e) {}\n\n // Browser.\n } else {\n global.BigNumber = BigNumber;\n }\n})(this);\n", - "var Web3 = require('./lib/web3');\n\n// dont override global variable\nif (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {\n window.Web3 = Web3;\n}\n\nmodule.exports = Web3;\n" - ] -} \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.min.js b/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.min.js deleted file mode 100644 index 3d73166..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/dist/web3.min.js +++ /dev/null @@ -1,5 +0,0 @@ -require=function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[a]={exports:{}};e[a][0].call(f.exports,function(t){var n=e[a][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;aa;a++)i.push(n.encode(t[a],o));return i}():this._inputFormatter(t,e).encode()},i.prototype.decode=function(t,e,n){var r=this;if(this.isDynamicArray(n))return function(){for(var o=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*o,64)),a=o+32,s=r.nestedName(n),c=r.staticPartLength(s),u=32*Math.floor((c+31)/32),f=[],p=0;i*u>p;p+=u)f.push(r.decode(t,a+p,s));return f}();if(this.isStaticArray(n))return function(){for(var o=r.staticArrayLength(n),i=e,a=r.nestedName(n),s=r.staticPartLength(a),c=32*Math.floor((s+31)/32),u=[],f=0;o*c>f;f+=c)u.push(r.decode(t,i+f,a));return u}();if(this.isDynamicType(n))return function(){var n=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*n,64)),a=Math.floor((i+31)/32);return r._outputFormatter(new o(t.substr(2*n,64*(1+a)),0))}();var i=this.staticPartLength(n);return this._outputFormatter(new o(t.substr(2*e,2*i)))},e.exports=i},{"./formatters":9,"./param":11}],15:[function(t,e,n){var r=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=r.formatInputInt,this._outputFormatter=r.formatOutputUInt};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],16:[function(t,e,n){var r=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=r.formatInputReal,this._outputFormatter=r.formatOutputUReal};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],17:[function(t,e,n){"use strict";"undefined"==typeof XMLHttpRequest?n.XMLHttpRequest={}:n.XMLHttpRequest=XMLHttpRequest},{}],18:[function(t,e,n){var r=t("bignumber.js"),o=["wei","kwei","Mwei","Gwei","szabo","finney","femtoether","picoether","nanoether","microether","milliether","nano","micro","milli","ether","grand","Mether","Gether","Tether","Pether","Eether","Zether","Yether","Nether","Dether","Vether","Uether"];e.exports={ETH_PADDING:32,ETH_SIGNATURE_LENGTH:4,ETH_UNITS:o,ETH_BIGNUMBER_ROUNDING_MODE:{ROUNDING_MODE:r.ROUND_DOWN},ETH_POLLING_TIMEOUT:500,defaultBlock:"latest",defaultAccount:void 0}},{"bignumber.js":"bignumber.js"}],19:[function(t,e,n){var r=t("crypto-js"),o=t("crypto-js/sha3");e.exports=function(t,e){return e&&"hex"===e.encoding&&(t.length>2&&"0x"===t.substr(0,2)&&(t=t.substr(2)),t=r.enc.Hex.parse(t)),o(t,{outputLength:256}).toString()}},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(t,e,n){var r=t("bignumber.js"),o=t("./sha3.js"),i=t("utf8"),a={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"},s=function(t,e,n){return new Array(e-t.length+1).join(n?n:"0")+t},c=function(t,e,n){return t+new Array(e-t.length+1).join(n?n:"0")},u=function(t){var e="",n=0,r=t.length;for("0x"===t.substring(0,2)&&(n=2);r>n;n+=2){var o=parseInt(t.substr(n,2),16);if(0===o)break;e+=String.fromCharCode(o)}return i.decode(e)},f=function(t){var e="",n=0,r=t.length;for("0x"===t.substring(0,2)&&(n=2);r>n;n+=2){var o=parseInt(t.substr(n,2),16);e+=String.fromCharCode(o)}return e},p=function(t){t=i.encode(t);for(var e="",n=0;nn;n++)if(parseInt(e[n],16)>7&&t[n].toUpperCase()!==t[n]||parseInt(e[n],16)<=7&&t[n].toLowerCase()!==t[n])return!1;return!0},C=function(t){if("undefined"==typeof t)return"";t=t.toLowerCase().replace("0x","");for(var e=o(t),n="0x",r=0;r7?t[r].toUpperCase():t[r];return n},F=function(t){return B(t)?t:/^[0-9a-f]{40}$/.test(t)?"0x"+t:"0x"+s(v(t).substr(2),40)},I=function(t){return t instanceof r||t&&t.constructor&&"BigNumber"===t.constructor.name},O=function(t){return"string"==typeof t||t&&t.constructor&&"String"===t.constructor.name},N=function(t){return"function"==typeof t},D=function(t){return"object"==typeof t},P=function(t){return"boolean"==typeof t},T=function(t){return t instanceof Array},E=function(t){try{return!!JSON.parse(t)}catch(e){return!1}};e.exports={padLeft:s,padRight:c,toHex:v,toDecimal:y,fromDecimal:g,toUtf8:u,toAscii:f,fromUtf8:p,fromAscii:l,transformToFullName:h,extractDisplayName:d,extractTypeName:m,toWei:w,fromWei:_,toBigNumber:x,toTwosComplement:k,toAddress:F,isBigNumber:I,isStrictAddress:B,isAddress:S,isChecksumAddress:A,toChecksumAddress:C,isFunction:N,isString:O,isObject:D,isBoolean:P,isArray:T,isJson:E}},{"./sha3.js":19,"bignumber.js":"bignumber.js",utf8:84}],21:[function(t,e,n){e.exports={version:"0.16.0"}},{}],22:[function(t,e,n){function r(t){this._requestManager=new o(t),this.currentProvider=t,this.eth=new a(this),this.db=new s(this),this.shh=new c(this),this.net=new u(this),this.personal=new f(this),this.settings=new p,this.version={api:l.version},this.providers={HttpProvider:v,IpcProvider:b},this._extend=m(this),this._extend({properties:_()})}var o=t("./web3/requestmanager"),i=t("./web3/iban"),a=t("./web3/methods/eth"),s=t("./web3/methods/db"),c=t("./web3/methods/shh"),u=t("./web3/methods/net"),f=t("./web3/methods/personal"),p=t("./web3/settings"),l=t("./version.json"),h=t("./utils/utils"),d=t("./utils/sha3"),m=t("./web3/extend"),y=t("./web3/batch"),g=t("./web3/property"),v=t("./web3/httpprovider"),b=t("./web3/ipcprovider");r.providers={HttpProvider:v,IpcProvider:b},r.prototype.setProvider=function(t){this._requestManager.setProvider(t),this.currentProvider=t},r.prototype.reset=function(t){this._requestManager.reset(t),this.settings=new p},r.prototype.toHex=h.toHex,r.prototype.toAscii=h.toAscii,r.prototype.toUtf8=h.toUtf8,r.prototype.fromAscii=h.fromAscii,r.prototype.fromUtf8=h.fromUtf8,r.prototype.toDecimal=h.toDecimal,r.prototype.fromDecimal=h.fromDecimal,r.prototype.toBigNumber=h.toBigNumber,r.prototype.toWei=h.toWei,r.prototype.fromWei=h.fromWei,r.prototype.isAddress=h.isAddress,r.prototype.isChecksumAddress=h.isChecksumAddress,r.prototype.toChecksumAddress=h.toChecksumAddress,r.prototype.isIBAN=h.isIBAN,r.prototype.sha3=function(t,e){return"0x"+d(t,e)},r.prototype.fromICAP=function(t){var e=new i(t);return e.address()};var _=function(){return[new g({name:"version.node",getter:"web3_clientVersion"}),new g({name:"version.network",getter:"net_version",inputFormatter:h.toDecimal}),new g({name:"version.ethereum",getter:"eth_protocolVersion",inputFormatter:h.toDecimal}),new g({name:"version.whisper",getter:"shh_version",inputFormatter:h.toDecimal})]};r.prototype.isConnected=function(){return this.currentProvider&&this.currentProvider.isConnected()},r.prototype.createBatch=function(){return new y(this)},e.exports=r},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46}],23:[function(t,e,n){var r=t("../utils/sha3"),o=t("./event"),i=t("./formatters"),a=t("../utils/utils"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,n){this._requestManager=t,this._json=e,this._address=n};u.prototype.encode=function(t){t=t||{};var e={};return["fromBlock","toBlock"].filter(function(e){return void 0!==t[e]}).forEach(function(n){e[n]=i.inputBlockNumberFormatter(t[n])}),e.address=this._address,e},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=t.topics[0].slice(2),n=this._json.filter(function(t){return e===r(a.transformToFullName(t))})[0];if(!n)return console.warn("cannot find event for log"),t;var i=new o(this._requestManager,n,this._address);return i.decode(t)},u.prototype.execute=function(t,e){a.isFunction(arguments[arguments.length-1])&&(e=arguments[arguments.length-1],1===arguments.length&&(t=null));var n=this.encode(t),r=this.decode.bind(this);return new s(this._requestManager,n,c.eth(),r,e)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this);t.allEvents=e},e.exports=u},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(t,e,n){var r=t("./jsonrpc"),o=t("./errors"),i=function(t){this.requestManager=t._requestManager,this.requests=[]};i.prototype.add=function(t){this.requests.push(t)},i.prototype.execute=function(){var t=this.requests;this.requestManager.sendBatch(t,function(e,n){n=n||[],t.map(function(t,e){return n[e]||{}}).forEach(function(e,n){if(t[n].callback){if(!r.getInstance().isValidResponse(e))return t[n].callback(o.InvalidResponse(e));t[n].callback(null,t[n].format?t[n].format(e.result):e.result)}})})},e.exports=i},{"./errors":26,"./jsonrpc":35}],25:[function(t,e,n){var r=t("../utils/utils"),o=t("../solidity/coder"),i=t("./event"),a=t("./function"),s=t("./allevents"),c=function(t,e){return t.filter(function(t){return"constructor"===t.type&&t.inputs.length===e.length}).map(function(t){return t.inputs.map(function(t){return t.type})}).map(function(t){return o.encodeParams(t,e)})[0]||""},u=function(t){t.abi.filter(function(t){return"function"===t.type}).map(function(e){return new a(t._eth,e,t.address)}).forEach(function(e){e.attachToContract(t)})},f=function(t){var e=t.abi.filter(function(t){return"event"===t.type}),n=new s(t._eth._requestManager,e,t.address);n.attachToContract(t),e.map(function(e){return new i(t._eth._requestManager,e,t.address)}).forEach(function(e){e.attachToContract(t)})},p=function(t,e){var n=0,r=!1,o=t._eth.filter("latest",function(i){if(!i&&!r)if(n++,n>50){if(o.stopWatching(),r=!0,!e)throw new Error("Contract transaction couldn't be found after 50 blocks");e(new Error("Contract transaction couldn't be found after 50 blocks"))}else t._eth.getTransactionReceipt(t.transactionHash,function(n,i){i&&!r&&t._eth.getCode(i.contractAddress,function(n,a){if(!r&&a)if(o.stopWatching(),r=!0,a.length>2)t.address=i.contractAddress,u(t),f(t),e&&e(null,t);else{if(!e)throw new Error("The contract code couldn't be stored, please check your gas amount.");e(new Error("The contract code couldn't be stored, please check your gas amount."))}})})})},l=function(t,e){this.eth=t,this.abi=e,this["new"]=function(){var t,e=new h(this.eth,this.abi),n={},o=Array.prototype.slice.call(arguments);r.isFunction(o[o.length-1])&&(t=o.pop());var i=o[o.length-1];r.isObject(i)&&!r.isArray(i)&&(n=o.pop());var a=c(this.abi,o);if(n.data+=a,t)this.eth.sendTransaction(n,function(n,r){n?t(n):(e.transactionHash=r,t(null,e),p(e,t))});else{var s=this.eth.sendTransaction(n);e.transactionHash=s,p(e)}return e},this["new"].getData=this.getData.bind(this)};l.prototype.at=function(t,e){var n=new h(this.eth,this.abi,t);return u(n),f(n),e&&e(null,n),n},l.prototype.getData=function(){var t={},e=Array.prototype.slice.call(arguments),n=e[e.length-1];r.isObject(n)&&!r.isArray(n)&&(t=e.pop());var o=c(this.abi,e);return t.data+=o,t.data};var h=function(t,e,n){this._eth=t,this.transactionHash=null,this.address=n,this.abi=e};e.exports=l},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(t,e,n){e.exports={InvalidNumberOfParams:function(){return new Error("Invalid number of input parameters")},InvalidConnection:function(t){return new Error("CONNECTION ERROR: Couldn't connect to node "+t+".")},InvalidProvider:function(){return new Error("Provider not set or invalid")},InvalidResponse:function(t){var e=t&&t.error&&t.error.message?t.error.message:"Invalid JSON RPC response: "+JSON.stringify(t);return new Error(e)}}},{}],27:[function(t,e,n){var r=t("../utils/utils"),o=t("../solidity/coder"),i=t("./formatters"),a=t("../utils/sha3"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,n){this._requestManager=t,this._params=e.inputs,this._name=r.transformToFullName(e),this._address=n,this._anonymous=e.anonymous};u.prototype.types=function(t){return this._params.filter(function(e){return e.indexed===t}).map(function(t){return t.type})},u.prototype.displayName=function(){return r.extractDisplayName(this._name)},u.prototype.typeName=function(){return r.extractTypeName(this._name)},u.prototype.signature=function(){return a(this._name)},u.prototype.encode=function(t,e){t=t||{},e=e||{};var n={};["fromBlock","toBlock"].filter(function(t){return void 0!==e[t]}).forEach(function(t){n[t]=i.inputBlockNumberFormatter(e[t])}),n.topics=[],n.address=this._address,this._anonymous||n.topics.push("0x"+this.signature());var a=this._params.filter(function(t){return t.indexed===!0}).map(function(e){var n=t[e.name];return void 0===n||null===n?null:r.isArray(n)?n.map(function(t){return"0x"+o.encodeParam(e.type,t)}):"0x"+o.encodeParam(e.type,n)});return n.topics=n.topics.concat(a),n},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=this._anonymous?t.topics:t.topics.slice(1),n=e.map(function(t){return t.slice(2)}).join(""),r=o.decodeParams(this.types(!0),n),a=t.data.slice(2),s=o.decodeParams(this.types(!1),a),c=i.outputLogFormatter(t);return c.event=this.displayName(),c.address=t.address,c.args=this._params.reduce(function(t,e){return t[e.name]=e.indexed?r.shift():s.shift(),t},{}),delete c.data,delete c.topics,c},u.prototype.execute=function(t,e,n){r.isFunction(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],2===arguments.length&&(e=null),1===arguments.length&&(e=null,t={}));var o=this.encode(t,e),i=this.decode.bind(this);return new s(this._requestManager,o,c.eth(),i,n)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this),n=this.displayName();t[n]||(t[n]=e),t[n][this.typeName()]=this.execute.bind(this,t)},e.exports=u},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(t,e,n){var r=t("./formatters"),o=t("./../utils/utils"),i=t("./method"),a=t("./property"),s=function(t){var e=function(e){var n;e.property?(t[e.property]||(t[e.property]={}),n=t[e.property]):n=t,e.methods&&e.methods.forEach(function(e){e.attachToObject(n),e.setRequestManager(t._requestManager)}),e.properties&&e.properties.forEach(function(e){e.attachToObject(n),e.setRequestManager(t._requestManager)})};return e.formatters=r,e.utils=o,e.Method=i,e.Property=a,e};e.exports=s},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(t,e,n){var r=t("./formatters"),o=t("../utils/utils"),i=function(t){return null===t||"undefined"==typeof t?null:(t=String(t),0===t.indexOf("0x")?t:o.fromUtf8(t))},a=function(t){return o.isString(t)?t:(t=t||{},t.topics=t.topics||[],t.topics=t.topics.map(function(t){return o.isArray(t)?t.map(i):i(t)}),{topics:t.topics,from:t.from,to:t.to,address:t.address,fromBlock:r.inputBlockNumberFormatter(t.fromBlock),toBlock:r.inputBlockNumberFormatter(t.toBlock)})},s=function(t,e){o.isString(t.options)||t.get(function(t,n){t&&e(t),o.isArray(n)&&n.forEach(function(t){e(null,t)})})},c=function(t){var e=function(e,n){return e?t.callbacks.forEach(function(t){t(e)}):void(o.isArray(n)&&n.forEach(function(e){e=t.formatter?t.formatter(e):e,t.callbacks.forEach(function(t){t(null,e)})}))};t.requestManager.startPolling({method:t.implementation.poll.call,params:[t.filterId]},t.filterId,e,t.stopWatching.bind(t))},u=function(t,e,n,r,o){var i=this,u={};return n.forEach(function(e){e.setRequestManager(t),e.attachToObject(u)}),this.requestManager=t,this.options=a(e),this.implementation=u,this.filterId=null,this.callbacks=[], -this.getLogsCallbacks=[],this.pollFilters=[],this.formatter=r,this.implementation.newFilter(this.options,function(t,e){if(t)i.callbacks.forEach(function(e){e(t)});else if(i.filterId=e,i.getLogsCallbacks.forEach(function(t){i.get(t)}),i.getLogsCallbacks=[],i.callbacks.forEach(function(t){s(i,t)}),i.callbacks.length>0&&c(i),"function"==typeof o)return i.watch(o)}),this};u.prototype.watch=function(t){return this.callbacks.push(t),this.filterId&&(s(this,t),c(this)),this},u.prototype.stopWatching=function(){this.requestManager.stopPolling(this.filterId),this.implementation.uninstallFilter(this.filterId,function(){}),this.callbacks=[]},u.prototype.get=function(t){var e=this;if(!o.isFunction(t)){if(null===this.filterId)throw new Error("Filter ID Error: filter().get() can't be chained synchronous, please provide a callback for the get() method.");var n=this.implementation.getLogs(this.filterId);return n.map(function(t){return e.formatter?e.formatter(t):t})}return null===this.filterId?this.getLogsCallbacks.push(t):this.implementation.getLogs(this.filterId,function(n,r){n?t(n):t(null,r.map(function(t){return e.formatter?e.formatter(t):t}))}),this},e.exports=u},{"../utils/utils":20,"./formatters":30}],30:[function(t,e,n){var r=t("../utils/utils"),o=t("../utils/config"),i=t("./iban"),a=function(t){return r.toBigNumber(t)},s=function(t){return"latest"===t||"pending"===t||"earliest"===t},c=function(t){return void 0===t?o.defaultBlock:u(t)},u=function(t){return void 0===t?void 0:s(t)?t:r.toHex(t)},f=function(t){return t.from=t.from||o.defaultAccount,t.from&&(t.from=v(t.from)),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=r.fromDecimal(t[e])}),t},p=function(t){return t.from=t.from||o.defaultAccount,t.from=v(t.from),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=r.fromDecimal(t[e])}),t},l=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),t.nonce=r.toDecimal(t.nonce),t.gas=r.toDecimal(t.gas),t.gasPrice=r.toBigNumber(t.gasPrice),t.value=r.toBigNumber(t.value),t},h=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),t.cumulativeGasUsed=r.toDecimal(t.cumulativeGasUsed),t.gasUsed=r.toDecimal(t.gasUsed),r.isArray(t.logs)&&(t.logs=t.logs.map(function(t){return m(t)})),t},d=function(t){return t.gasLimit=r.toDecimal(t.gasLimit),t.gasUsed=r.toDecimal(t.gasUsed),t.size=r.toDecimal(t.size),t.timestamp=r.toDecimal(t.timestamp),null!==t.number&&(t.number=r.toDecimal(t.number)),t.difficulty=r.toBigNumber(t.difficulty),t.totalDifficulty=r.toBigNumber(t.totalDifficulty),r.isArray(t.transactions)&&t.transactions.forEach(function(t){return r.isString(t)?void 0:l(t)}),t},m=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),null!==t.logIndex&&(t.logIndex=r.toDecimal(t.logIndex)),t},y=function(t){return t.ttl=r.fromDecimal(t.ttl),t.workToProve=r.fromDecimal(t.workToProve),t.priority=r.fromDecimal(t.priority),r.isArray(t.topics)||(t.topics=t.topics?[t.topics]:[]),t.topics=t.topics.map(function(t){return 0===t.indexOf("0x")?t:r.fromUtf8(t)}),t},g=function(t){return t.expiry=r.toDecimal(t.expiry),t.sent=r.toDecimal(t.sent),t.ttl=r.toDecimal(t.ttl),t.workProved=r.toDecimal(t.workProved),t.topics||(t.topics=[]),t.topics=t.topics.map(function(t){return r.toAscii(t)}),t},v=function(t){var e=new i(t);if(e.isValid()&&e.isDirect())return"0x"+e.address();if(r.isStrictAddress(t))return t;if(r.isAddress(t))return"0x"+t;throw new Error("invalid address")},b=function(t){return t.startingBlock=r.toDecimal(t.startingBlock),t.currentBlock=r.toDecimal(t.currentBlock),t.highestBlock=r.toDecimal(t.highestBlock),t};e.exports={inputDefaultBlockNumberFormatter:c,inputBlockNumberFormatter:u,inputCallFormatter:f,inputTransactionFormatter:p,inputAddressFormatter:v,inputPostFormatter:y,outputBigNumberFormatter:a,outputTransactionFormatter:l,outputTransactionReceiptFormatter:h,outputBlockFormatter:d,outputLogFormatter:m,outputPostFormatter:g,outputSyncingFormatter:b}},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(t,e,n){var r=t("../solidity/coder"),o=t("../utils/utils"),i=t("./formatters"),a=t("../utils/sha3"),s=function(t,e,n){this._eth=t,this._inputTypes=e.inputs.map(function(t){return t.type}),this._outputTypes=e.outputs.map(function(t){return t.type}),this._constant=e.constant,this._name=o.transformToFullName(e),this._address=n};s.prototype.extractCallback=function(t){return o.isFunction(t[t.length-1])?t.pop():void 0},s.prototype.extractDefaultBlock=function(t){return t.length>this._inputTypes.length&&!o.isObject(t[t.length-1])?i.inputDefaultBlockNumberFormatter(t.pop()):void 0},s.prototype.toPayload=function(t){var e={};return t.length>this._inputTypes.length&&o.isObject(t[t.length-1])&&(e=t[t.length-1]),e.to=this._address,e.data="0x"+this.signature()+r.encodeParams(this._inputTypes,t),e},s.prototype.signature=function(){return a(this._name).slice(0,8)},s.prototype.unpackOutput=function(t){if(t){t=t.length>=2?t.slice(2):t;var e=r.decodeParams(this._outputTypes,t);return 1===e.length?e[0]:e}},s.prototype.call=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),n=this.extractDefaultBlock(t),r=this.toPayload(t);if(!e){var o=this._eth.call(r,n);return this.unpackOutput(o)}var i=this;this._eth.call(r,n,function(t,n){e(t,i.unpackOutput(n))})},s.prototype.sendTransaction=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),n=this.toPayload(t);return e?void this._eth.sendTransaction(n,e):this._eth.sendTransaction(n)},s.prototype.estimateGas=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),n=this.toPayload(t);return e?void this._eth.estimateGas(n,e):this._eth.estimateGas(n)},s.prototype.getData=function(){var t=Array.prototype.slice.call(arguments),e=this.toPayload(t);return e.data},s.prototype.displayName=function(){return o.extractDisplayName(this._name)},s.prototype.typeName=function(){return o.extractTypeName(this._name)},s.prototype.request=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),n=this.toPayload(t),r=this.unpackOutput.bind(this);return{method:this._constant?"eth_call":"eth_sendTransaction",callback:e,params:[n],format:r}},s.prototype.execute=function(){var t=!this._constant;return t?this.sendTransaction.apply(this,Array.prototype.slice.call(arguments)):this.call.apply(this,Array.prototype.slice.call(arguments))},s.prototype.attachToContract=function(t){var e=this.execute.bind(this);e.request=this.request.bind(this),e.call=this.call.bind(this),e.sendTransaction=this.sendTransaction.bind(this),e.estimateGas=this.estimateGas.bind(this),e.getData=this.getData.bind(this);var n=this.displayName();t[n]||(t[n]=e),t[n][this.typeName()]=e},e.exports=s},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(t,e,n){"use strict";var r,o=t("./errors");r="undefined"!=typeof Meteor&&Meteor.isServer?Npm.require("xmlhttprequest").XMLHttpRequest:"undefined"!=typeof window&&window.XMLHttpRequest?window.XMLHttpRequest:t("xmlhttprequest").XMLHttpRequest;var i=function(t){this.host=t||"http://localhost:8545"};i.prototype.prepareRequest=function(t){var e=new r;return e.open("POST",this.host,t),e.setRequestHeader("Content-Type","application/json"),e},i.prototype.send=function(t){var e=this.prepareRequest(!1);try{e.send(JSON.stringify(t))}catch(n){throw o.InvalidConnection(this.host)}var r=e.responseText;try{r=JSON.parse(r)}catch(i){throw o.InvalidResponse(e.responseText)}return r},i.prototype.sendAsync=function(t,e){var n=this.prepareRequest(!0);n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText,r=null;try{t=JSON.parse(t)}catch(i){r=o.InvalidResponse(n.responseText)}e(r,t)}};try{n.send(JSON.stringify(t))}catch(r){e(o.InvalidConnection(this.host))}},i.prototype.isConnected=function(){try{return this.send({id:9999999999,jsonrpc:"2.0",method:"net_listening",params:[]}),!0}catch(t){return!1}},e.exports=i},{"./errors":26,xmlhttprequest:17}],33:[function(t,e,n){var r=t("bignumber.js"),o=function(t,e){for(var n=t;n.length<2*e;)n="00"+n;return n},i=function(t){var e="A".charCodeAt(0),n="Z".charCodeAt(0);return t=t.toUpperCase(),t=t.substr(4)+t.substr(0,4),t.split("").map(function(t){var r=t.charCodeAt(0);return r>=e&&n>=r?r-e+10:t}).join("")},a=function(t){for(var e,n=t;n.length>2;)e=n.slice(0,9),n=parseInt(e,10)%97+n.slice(e.length);return parseInt(n,10)%97},s=function(t){this._iban=t};s.fromAddress=function(t){var e=new r(t,16),n=e.toString(36),i=o(n,15);return s.fromBban(i.toUpperCase())},s.fromBban=function(t){var e="XE",n=a(i(e+"00"+t)),r=("0"+(98-n)).slice(-2);return new s(e+r+t)},s.createIndirect=function(t){return s.fromBban("ETH"+t.institution+t.identifier)},s.isValid=function(t){var e=new s(t);return e.isValid()},s.prototype.isValid=function(){return/^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban)&&1===a(i(this._iban))},s.prototype.isDirect=function(){return 34===this._iban.length||35===this._iban.length},s.prototype.isIndirect=function(){return 20===this._iban.length},s.prototype.checksum=function(){return this._iban.substr(2,2)},s.prototype.institution=function(){return this.isIndirect()?this._iban.substr(7,4):""},s.prototype.client=function(){return this.isIndirect()?this._iban.substr(11):""},s.prototype.address=function(){if(this.isDirect()){var t=this._iban.substr(4),e=new r(t,36);return o(e.toString(16),20)}return""},s.prototype.toString=function(){return this._iban},e.exports=s},{"bignumber.js":"bignumber.js"}],34:[function(t,e,n){"use strict";var r=t("../utils/utils"),o=t("./errors"),i=function(t,e){var n=this;this.responseCallbacks={},this.path=t,this.connection=e.connect({path:this.path}),this.connection.on("error",function(t){console.error("IPC Connection Error",t),n._timeout()}),this.connection.on("end",function(){n._timeout()}),this.connection.on("data",function(t){n._parseResponse(t.toString()).forEach(function(t){var e=null;r.isArray(t)?t.forEach(function(t){n.responseCallbacks[t.id]&&(e=t.id)}):e=t.id,n.responseCallbacks[e]&&(n.responseCallbacks[e](null,t),delete n.responseCallbacks[e])})})};i.prototype._parseResponse=function(t){var e=this,n=[],r=t.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|");return r.forEach(function(t){e.lastChunk&&(t=e.lastChunk+t);var r=null;try{r=JSON.parse(t)}catch(i){return e.lastChunk=t,clearTimeout(e.lastChunkTimeout),void(e.lastChunkTimeout=setTimeout(function(){throw e._timeout(),o.InvalidResponse(t)},15e3))}clearTimeout(e.lastChunkTimeout),e.lastChunk=null,r&&n.push(r)}),n},i.prototype._addResponseCallback=function(t,e){var n=t.id||t[0].id,r=t.method||t[0].method;this.responseCallbacks[n]=e,this.responseCallbacks[n].method=r},i.prototype._timeout=function(){for(var t in this.responseCallbacks)this.responseCallbacks.hasOwnProperty(t)&&(this.responseCallbacks[t](o.InvalidConnection("on IPC")),delete this.responseCallbacks[t])},i.prototype.isConnected=function(){var t=this;return t.connection.writable||t.connection.connect({path:t.path}),!!this.connection.writable},i.prototype.send=function(t){if(this.connection.writeSync){var e;this.connection.writable||this.connection.connect({path:this.path});var n=this.connection.writeSync(JSON.stringify(t));try{e=JSON.parse(n)}catch(r){throw o.InvalidResponse(n)}return e}throw new Error('You tried to send "'+t.method+'" synchronously. Synchronous requests are not supported by the IPC provider.')},i.prototype.sendAsync=function(t,e){this.connection.writable||this.connection.connect({path:this.path}),this.connection.write(JSON.stringify(t)),this._addResponseCallback(t,e)},e.exports=i},{"../utils/utils":20,"./errors":26}],35:[function(t,e,n){var r=function(){return arguments.callee._singletonInstance?arguments.callee._singletonInstance:(arguments.callee._singletonInstance=this,void(this.messageId=1))};r.getInstance=function(){var t=new r;return t},r.prototype.toPayload=function(t,e){return t||console.error("jsonrpc method should be specified!"),{jsonrpc:"2.0",method:t,params:e||[],id:this.messageId++}},r.prototype.isValidResponse=function(t){return!!t&&!t.error&&"2.0"===t.jsonrpc&&"number"==typeof t.id&&void 0!==t.result},r.prototype.toBatchPayload=function(t){var e=this;return t.map(function(t){return e.toPayload(t.method,t.params)})},e.exports=r},{}],36:[function(t,e,n){var r=t("../utils/utils"),o=t("./errors"),i=function(t){this.name=t.name,this.call=t.call,this.params=t.params||0,this.inputFormatter=t.inputFormatter,this.outputFormatter=t.outputFormatter,this.requestManager=null};i.prototype.setRequestManager=function(t){this.requestManager=t},i.prototype.getCall=function(t){return r.isFunction(this.call)?this.call(t):this.call},i.prototype.extractCallback=function(t){return r.isFunction(t[t.length-1])?t.pop():void 0},i.prototype.validateArgs=function(t){if(t.length!==this.params)throw o.InvalidNumberOfParams()},i.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter.map(function(e,n){return e?e(t[n]):t[n]}):t},i.prototype.formatOutput=function(t){return this.outputFormatter&&t?this.outputFormatter(t):t},i.prototype.toPayload=function(t){var e=this.getCall(t),n=this.extractCallback(t),r=this.formatInput(t);return this.validateArgs(r),{method:e,params:r,callback:n}},i.prototype.attachToObject=function(t){var e=this.buildCall();e.call=this.call;var n=this.name.split(".");n.length>1?(t[n[0]]=t[n[0]]||{},t[n[0]][n[1]]=e):t[n[0]]=e},i.prototype.buildCall=function(){var t=this,e=function(){var e=t.toPayload(Array.prototype.slice.call(arguments));return e.callback?t.requestManager.sendAsync(e,function(n,r){e.callback(n,t.formatOutput(r))}):t.formatOutput(t.requestManager.send(e))};return e.request=this.request.bind(this),e},i.prototype.request=function(){var t=this.toPayload(Array.prototype.slice.call(arguments));return t.format=this.formatOutput.bind(this),t},e.exports=i},{"../utils/utils":20,"./errors":26}],37:[function(t,e,n){var r=t("../method"),o=function(t){this._requestManager=t._requestManager;var e=this;i().forEach(function(n){n.attachToObject(e),n.setRequestManager(t._requestManager)})},i=function(){var t=new r({name:"putString",call:"db_putString",params:3}),e=new r({name:"getString",call:"db_getString",params:2}),n=new r({name:"putHex",call:"db_putHex",params:3}),o=new r({name:"getHex",call:"db_getHex",params:2});return[t,e,n,o]};e.exports=o},{"../method":36}],38:[function(t,e,n){"use strict";function r(t){this._requestManager=t._requestManager;var e=this;w().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),x().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),this.iban=d,this.sendIBANTransaction=m.bind(null,this)}var o=t("../formatters"),i=t("../../utils/utils"),a=t("../method"),s=t("../property"),c=t("../../utils/config"),u=t("../contract"),f=t("./watches"),p=t("../filter"),l=t("../syncing"),h=t("../namereg"),d=t("../iban"),m=t("../transfer"),y=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockByHash":"eth_getBlockByNumber"},g=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getTransactionByBlockHashAndIndex":"eth_getTransactionByBlockNumberAndIndex"},v=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleByBlockHashAndIndex":"eth_getUncleByBlockNumberAndIndex"},b=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockTransactionCountByHash":"eth_getBlockTransactionCountByNumber"},_=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleCountByBlockHash":"eth_getUncleCountByBlockNumber"};Object.defineProperty(r.prototype,"defaultBlock",{get:function(){return c.defaultBlock},set:function(t){return c.defaultBlock=t,t}}),Object.defineProperty(r.prototype,"defaultAccount",{get:function(){return c.defaultAccount},set:function(t){return c.defaultAccount=t,t}});var w=function(){var t=new a({name:"getBalance",call:"eth_getBalance",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter],outputFormatter:o.outputBigNumberFormatter}),e=new a({name:"getStorageAt",call:"eth_getStorageAt",params:3,inputFormatter:[null,i.toHex,o.inputDefaultBlockNumberFormatter]}),n=new a({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter]}),r=new a({name:"getBlock",call:y,params:2,inputFormatter:[o.inputBlockNumberFormatter,function(t){return!!t}],outputFormatter:o.outputBlockFormatter}),s=new a({name:"getUncle",call:v,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputBlockFormatter}),c=new a({name:"getCompilers",call:"eth_getCompilers",params:0}),u=new a({name:"getBlockTransactionCount",call:b,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),f=new a({name:"getBlockUncleCount",call:_,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),p=new a({name:"getTransaction",call:"eth_getTransactionByHash",params:1,outputFormatter:o.outputTransactionFormatter}),l=new a({name:"getTransactionFromBlock",call:g,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputTransactionFormatter}),h=new a({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,outputFormatter:o.outputTransactionReceiptFormatter}),d=new a({name:"getTransactionCount",call:"eth_getTransactionCount",params:2,inputFormatter:[null,o.inputDefaultBlockNumberFormatter],outputFormatter:i.toDecimal}),m=new a({name:"sendRawTransaction",call:"eth_sendRawTransaction",params:1,inputFormatter:[null]}),w=new a({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[o.inputTransactionFormatter]}),x=new a({name:"sign",call:"eth_sign",params:2,inputFormatter:[o.inputAddressFormatter,null]}),k=new a({name:"call",call:"eth_call",params:2,inputFormatter:[o.inputCallFormatter,o.inputDefaultBlockNumberFormatter]}),B=new a({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[o.inputCallFormatter],outputFormatter:i.toDecimal}),S=new a({name:"compile.solidity",call:"eth_compileSolidity",params:1}),A=new a({name:"compile.lll",call:"eth_compileLLL",params:1}),C=new a({name:"compile.serpent",call:"eth_compileSerpent",params:1}),F=new a({name:"submitWork",call:"eth_submitWork",params:3}),I=new a({name:"getWork",call:"eth_getWork",params:0});return[t,e,n,r,s,c,u,f,p,l,h,d,k,B,m,w,x,S,A,C,F,I]},x=function(){return[new s({name:"coinbase",getter:"eth_coinbase"}),new s({name:"mining",getter:"eth_mining"}),new s({name:"hashrate",getter:"eth_hashrate",outputFormatter:i.toDecimal}),new s({name:"syncing",getter:"eth_syncing",outputFormatter:o.outputSyncingFormatter}),new s({name:"gasPrice",getter:"eth_gasPrice",outputFormatter:o.outputBigNumberFormatter}),new s({name:"accounts",getter:"eth_accounts"}),new s({name:"blockNumber",getter:"eth_blockNumber",outputFormatter:i.toDecimal})]};r.prototype.contract=function(t){var e=new u(this,t);return e},r.prototype.filter=function(t,e){return new p(this._requestManager,t,f.eth(),o.outputLogFormatter,e)},r.prototype.namereg=function(){return this.contract(h.global.abi).at(h.global.address)},r.prototype.icapNamereg=function(){return this.contract(h.icap.abi).at(h.icap.address)},r.prototype.isSyncing=function(t){return new l(this._requestManager,t)},e.exports=r},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(t,e,n){var r=t("../../utils/utils"),o=t("../property"),i=function(t){this._requestManager=t._requestManager;var e=this;a().forEach(function(n){n.attachToObject(e),n.setRequestManager(t._requestManager)})},a=function(){return[new o({name:"listening",getter:"net_listening"}),new o({name:"peerCount",getter:"net_peerCount",outputFormatter:r.toDecimal})]};e.exports=i},{"../../utils/utils":20,"../property":44}],40:[function(t,e,n){"use strict";function r(t){this._requestManager=t._requestManager;var e=this;s().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})}var o=t("../method"),i=t("../property"),a=t("../formatters"),s=function(){var t=new o({name:"newAccount",call:"personal_newAccount",params:1,inputFormatter:[null]}),e=new o({name:"unlockAccount",call:"personal_unlockAccount",params:3,inputFormatter:[a.inputAddressFormatter,null,null]}),n=new o({name:"lockAccount",call:"personal_lockAccount",params:1,inputFormatter:[a.inputAddressFormatter]});return[t,e,n]},c=function(){return[new i({name:"listAccounts",getter:"personal_listAccounts"})]};e.exports=r},{"../formatters":30,"../method":36,"../property":44}],41:[function(t,e,n){var r=t("../method"),o=t("../formatters"),i=t("../filter"),a=t("./watches"),s=function(t){this._requestManager=t._requestManager;var e=this;c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})};s.prototype.filter=function(t,e){return new i(this._requestManager,t,a.shh(),o.outputPostFormatter,e)};var c=function(){var t=new r({name:"post",call:"shh_post",params:1,inputFormatter:[o.inputPostFormatter]}),e=new r({name:"newIdentity",call:"shh_newIdentity",params:0}),n=new r({name:"hasIdentity",call:"shh_hasIdentity",params:1}),i=new r({name:"newGroup",call:"shh_newGroup",params:0}),a=new r({name:"addToGroup",call:"shh_addToGroup",params:0});return[t,e,n,i,a]};e.exports=s},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(t,e,n){var r=t("../method"),o=function(){var t=function(t){var e=t[0];switch(e){case"latest":return t.shift(),this.params=0,"eth_newBlockFilter";case"pending":return t.shift(),this.params=0,"eth_newPendingTransactionFilter";default:return"eth_newFilter"}},e=new r({name:"newFilter",call:t,params:1}),n=new r({name:"uninstallFilter",call:"eth_uninstallFilter",params:1}),o=new r({name:"getLogs",call:"eth_getFilterLogs",params:1}),i=new r({name:"poll",call:"eth_getFilterChanges",params:1});return[e,n,o,i]},i=function(){var t=new r({name:"newFilter",call:"shh_newFilter",params:1}),e=new r({name:"uninstallFilter",call:"shh_uninstallFilter",params:1}),n=new r({name:"getLogs",call:"shh_getMessages",params:1}),o=new r({name:"poll",call:"shh_getFilterChanges",params:1});return[t,e,n,o]};e.exports={eth:o,shh:i}},{"../method":36}],43:[function(t,e,n){var r=t("../contracts/GlobalRegistrar.json"),o=t("../contracts/ICAPRegistrar.json"),i="0xc6d9d2cd449a754c494264e1809c50e34d64562b",a="0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00";e.exports={global:{abi:r,address:i},icap:{abi:o,address:a}}},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(t,e,n){var r=t("../utils/utils"),o=function(t){this.name=t.name,this.getter=t.getter,this.setter=t.setter,this.outputFormatter=t.outputFormatter,this.inputFormatter=t.inputFormatter,this.requestManager=null};o.prototype.setRequestManager=function(t){this.requestManager=t},o.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter(t):t},o.prototype.formatOutput=function(t){return this.outputFormatter&&null!==t?this.outputFormatter(t):t},o.prototype.extractCallback=function(t){return r.isFunction(t[t.length-1])?t.pop():void 0},o.prototype.attachToObject=function(t){var e={get:this.buildGet(),enumerable:!0},n=this.name.split("."),r=n[0];n.length>1&&(t[n[0]]=t[n[0]]||{},t=t[n[0]],r=n[1]),Object.defineProperty(t,r,e),t[i(r)]=this.buildAsyncGet()};var i=function(t){return"get"+t.charAt(0).toUpperCase()+t.slice(1)};o.prototype.buildGet=function(){var t=this;return function(){return t.formatOutput(t.requestManager.send({method:t.getter}))}},o.prototype.buildAsyncGet=function(){var t=this,e=function(e){t.requestManager.sendAsync({method:t.getter},function(n,r){e(n,t.formatOutput(r))})};return e.request=this.request.bind(this),e},o.prototype.request=function(){var t={method:this.getter,params:[],callback:this.extractCallback(Array.prototype.slice.call(arguments))};return t.format=this.formatOutput.bind(this),t},e.exports=o},{"../utils/utils":20}],45:[function(t,e,n){var r=t("./jsonrpc"),o=t("../utils/utils"),i=t("../utils/config"),a=t("./errors"),s=function(t){this.provider=t,this.polls={},this.timeout=null};s.prototype.send=function(t){if(!this.provider)return console.error(a.InvalidProvider()),null;var e=r.getInstance().toPayload(t.method,t.params),n=this.provider.send(e);if(!r.getInstance().isValidResponse(n))throw a.InvalidResponse(n);return n.result},s.prototype.sendAsync=function(t,e){if(!this.provider)return e(a.InvalidProvider());var n=r.getInstance().toPayload(t.method,t.params);this.provider.sendAsync(n,function(t,n){return t?e(t):r.getInstance().isValidResponse(n)?void e(null,n.result):e(a.InvalidResponse(n))})},s.prototype.sendBatch=function(t,e){if(!this.provider)return e(a.InvalidProvider());var n=r.getInstance().toBatchPayload(t);this.provider.sendAsync(n,function(t,n){return t?e(t):o.isArray(n)?void e(t,n):e(a.InvalidResponse(n))})},s.prototype.setProvider=function(t){this.provider=t},s.prototype.startPolling=function(t,e,n,r){this.polls[e]={data:t,id:e,callback:n,uninstall:r},this.timeout||this.poll()},s.prototype.stopPolling=function(t){delete this.polls[t],0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.reset=function(t){for(var e in this.polls)t&&-1!==e.indexOf("syncPoll_")||(this.polls[e].uninstall(),delete this.polls[e]);0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.poll=function(){if(this.timeout=setTimeout(this.poll.bind(this),i.ETH_POLLING_TIMEOUT),0!==Object.keys(this.polls).length){if(!this.provider)return void console.error(a.InvalidProvider());var t=[],e=[];for(var n in this.polls)t.push(this.polls[n].data),e.push(n);if(0!==t.length){var s=r.getInstance().toBatchPayload(t),c={};s.forEach(function(t,n){c[t.id]=e[n]});var u=this;this.provider.sendAsync(s,function(t,e){if(!t){if(!o.isArray(e))throw a.InvalidResponse(e);e.map(function(t){var e=c[t.id];return u.polls[e]?(t.callback=u.polls[e].callback,t):!1}).filter(function(t){return!!t}).filter(function(t){var e=r.getInstance().isValidResponse(t);return e||t.callback(a.InvalidResponse(t)),e}).forEach(function(t){t.callback(null,t.result)})}})}}},e.exports=s},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(t,e,n){var r=function(){this.defaultBlock="latest",this.defaultAccount=void 0};e.exports=r},{}],47:[function(t,e,n){var r=t("./formatters"),o=t("../utils/utils"),i=1,a=function(t){var e=function(e,n){return e?t.callbacks.forEach(function(t){t(e)}):(o.isObject(n)&&n.startingBlock&&(n=r.outputSyncingFormatter(n)),void t.callbacks.forEach(function(e){t.lastSyncState!==n&&(!t.lastSyncState&&o.isObject(n)&&e(null,!0),setTimeout(function(){e(null,n)},0),t.lastSyncState=n)}))};t.requestManager.startPolling({method:"eth_syncing",params:[]},t.pollId,e,t.stopWatching.bind(t))},s=function(t,e){return this.requestManager=t,this.pollId="syncPoll_"+i++,this.callbacks=[],this.addCallback(e),this.lastSyncState=!1,a(this),this};s.prototype.addCallback=function(t){return t&&this.callbacks.push(t),this},s.prototype.stopWatching=function(){this.requestManager.stopPolling(this.pollId),this.callbacks=[]},e.exports=s},{"../utils/utils":20,"./formatters":30}],48:[function(t,e,n){var r=t("./iban"),o=t("../contracts/SmartExchange.json"),i=function(t,e,n,o,i){var c=new r(n);if(!c.isValid())throw new Error("invalid iban address");if(c.isDirect())return a(t,e,c.address(),o,i);if(!i){var u=t.icapNamereg().addr(c.institution());return s(t,e,u,o,c.client())}t.icapNamereg().addr(c.institution(),function(n,r){return s(t,e,r,o,c.client(),i)})},a=function(t,e,n,r,o){return t.sendTransaction({address:n,from:e,value:r},o)},s=function(t,e,n,r,i,a){var s=o;return t.contract(s).at(n).deposit(i,{from:e,value:r},a)};e.exports=i},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(t,e,n){},{}],50:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.BlockCipher,o=e.algo,i=[],a=[],s=[],c=[],u=[],f=[],p=[],l=[],h=[],d=[];!function(){for(var t=[],e=0;256>e;e++)128>e?t[e]=e<<1:t[e]=e<<1^283;for(var n=0,r=0,e=0;256>e;e++){var o=r^r<<1^r<<2^r<<3^r<<4;o=o>>>8^255&o^99,i[n]=o,a[o]=n;var m=t[n],y=t[m],g=t[y],v=257*t[o]^16843008*o;s[n]=v<<24|v>>>8,c[n]=v<<16|v>>>16,u[n]=v<<8|v>>>24,f[n]=v;var v=16843009*g^65537*y^257*m^16843008*n;p[o]=v<<24|v>>>8,l[o]=v<<16|v>>>16,h[o]=v<<8|v>>>24,d[o]=v,n?(n=m^t[t[t[g^m]]],r^=t[t[r]]):n=r=1}}();var m=[0,1,2,4,8,16,32,64,128,27,54],y=o.AES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,n=t.sigBytes/4,r=this._nRounds=n+6,o=4*(r+1),a=this._keySchedule=[],s=0;o>s;s++)if(n>s)a[s]=e[s];else{var c=a[s-1];s%n?n>6&&s%n==4&&(c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c]):(c=c<<8|c>>>24,c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c],c^=m[s/n|0]<<24),a[s]=a[s-n]^c}for(var u=this._invKeySchedule=[],f=0;o>f;f++){var s=o-f;if(f%4)var c=a[s];else var c=a[s-4];4>f||4>=s?u[f]=c:u[f]=p[i[c>>>24]]^l[i[c>>>16&255]]^h[i[c>>>8&255]]^d[i[255&c]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,c,u,f,i)},decryptBlock:function(t,e){var n=t[e+1];t[e+1]=t[e+3],t[e+3]=n,this._doCryptBlock(t,e,this._invKeySchedule,p,l,h,d,a);var n=t[e+1];t[e+1]=t[e+3],t[e+3]=n},_doCryptBlock:function(t,e,n,r,o,i,a,s){for(var c=this._nRounds,u=t[e]^n[0],f=t[e+1]^n[1],p=t[e+2]^n[2],l=t[e+3]^n[3],h=4,d=1;c>d;d++){var m=r[u>>>24]^o[f>>>16&255]^i[p>>>8&255]^a[255&l]^n[h++],y=r[f>>>24]^o[p>>>16&255]^i[l>>>8&255]^a[255&u]^n[h++],g=r[p>>>24]^o[l>>>16&255]^i[u>>>8&255]^a[255&f]^n[h++],v=r[l>>>24]^o[u>>>16&255]^i[f>>>8&255]^a[255&p]^n[h++];u=m,f=y,p=g,l=v}var m=(s[u>>>24]<<24|s[f>>>16&255]<<16|s[p>>>8&255]<<8|s[255&l])^n[h++],y=(s[f>>>24]<<24|s[p>>>16&255]<<16|s[l>>>8&255]<<8|s[255&u])^n[h++],g=(s[p>>>24]<<24|s[l>>>16&255]<<16|s[u>>>8&255]<<8|s[255&f])^n[h++],v=(s[l>>>24]<<24|s[u>>>16&255]<<16|s[f>>>8&255]<<8|s[255&p])^n[h++];t[e]=m,t[e+1]=y,t[e+2]=g,t[e+3]=v},keySize:8});e.AES=r._createHelper(y)}(),t.AES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){t.lib.Cipher||function(e){var n=t,r=n.lib,o=r.Base,i=r.WordArray,a=r.BufferedBlockAlgorithm,s=n.enc,c=(s.Utf8,s.Base64),u=n.algo,f=u.EvpKDF,p=r.Cipher=a.extend({cfg:o.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,n){this.cfg=this.cfg.extend(n),this._xformMode=t,this._key=e,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?k:_; -}return function(e){return{encrypt:function(n,r,o){return t(r).encrypt(e,n,r,o)},decrypt:function(n,r,o){return t(r).decrypt(e,n,r,o)}}}}()}),l=(r.StreamCipher=p.extend({_doFinalize:function(){var t=this._process(!0);return t},blockSize:1}),n.mode={}),h=r.BlockCipherMode=o.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),d=l.CBC=function(){function t(t,n,r){var o=this._iv;if(o){var i=o;this._iv=e}else var i=this._prevBlock;for(var a=0;r>a;a++)t[n+a]^=i[a]}var n=h.extend();return n.Encryptor=n.extend({processBlock:function(e,n){var r=this._cipher,o=r.blockSize;t.call(this,e,n,o),r.encryptBlock(e,n),this._prevBlock=e.slice(n,n+o)}}),n.Decryptor=n.extend({processBlock:function(e,n){var r=this._cipher,o=r.blockSize,i=e.slice(n,n+o);r.decryptBlock(e,n),t.call(this,e,n,o),this._prevBlock=i}}),n}(),m=n.pad={},y=m.Pkcs7={pad:function(t,e){for(var n=4*e,r=n-t.sigBytes%n,o=r<<24|r<<16|r<<8|r,a=[],s=0;r>s;s+=4)a.push(o);var c=i.create(a,r);t.concat(c)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},g=(r.BlockCipher=p.extend({cfg:p.cfg.extend({mode:d,padding:y}),reset:function(){p.reset.call(this);var t=this.cfg,e=t.iv,n=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var r=n.createEncryptor;else{var r=n.createDecryptor;this._minBufferSize=1}this._mode=r.call(n,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{var e=this._process(!0);t.unpad(e)}return e},blockSize:4}),r.CipherParams=o.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=n.format={},b=v.OpenSSL={stringify:function(t){var e=t.ciphertext,n=t.salt;if(n)var r=i.create([1398893684,1701076831]).concat(n).concat(e);else var r=e;return r.toString(c)},parse:function(t){var e=c.parse(t),n=e.words;if(1398893684==n[0]&&1701076831==n[1]){var r=i.create(n.slice(2,4));n.splice(0,4),e.sigBytes-=16}return g.create({ciphertext:e,salt:r})}},_=r.SerializableCipher=o.extend({cfg:o.extend({format:b}),encrypt:function(t,e,n,r){r=this.cfg.extend(r);var o=t.createEncryptor(n,r),i=o.finalize(e),a=o.cfg;return g.create({ciphertext:i,key:n,iv:a.iv,algorithm:t,mode:a.mode,padding:a.padding,blockSize:t.blockSize,formatter:r.format})},decrypt:function(t,e,n,r){r=this.cfg.extend(r),e=this._parse(e,r.format);var o=t.createDecryptor(n,r).finalize(e.ciphertext);return o},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=n.kdf={},x=w.OpenSSL={execute:function(t,e,n,r){r||(r=i.random(8));var o=f.create({keySize:e+n}).compute(t,r),a=i.create(o.words.slice(e),4*n);return o.sigBytes=4*e,g.create({key:o,iv:a,salt:r})}},k=r.PasswordBasedCipher=_.extend({cfg:_.cfg.extend({kdf:x}),encrypt:function(t,e,n,r){r=this.cfg.extend(r);var o=r.kdf.execute(n,t.keySize,t.ivSize);r.iv=o.iv;var i=_.encrypt.call(this,t,e,o.key,r);return i.mixIn(o),i},decrypt:function(t,e,n,r){r=this.cfg.extend(r),e=this._parse(e,r.format);var o=r.kdf.execute(n,t.keySize,t.ivSize,e.salt);r.iv=o.iv;var i=_.decrypt.call(this,t,e,o.key,r);return i}})}()})},{"./core":52}],52:[function(t,e,n){!function(t,r){"object"==typeof n?e.exports=n=r():"function"==typeof define&&define.amd?define([],r):t.CryptoJS=r()}(this,function(){var t=t||function(t,e){var n={},r=n.lib={},o=r.Base=function(){function t(){}return{extend:function(e){t.prototype=this;var n=new t;return e&&n.mixIn(e),n.hasOwnProperty("init")||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),i=r.WordArray=o.extend({init:function(t,n){t=this.words=t||[],n!=e?this.sigBytes=n:this.sigBytes=4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,n=t.words,r=this.sigBytes,o=t.sigBytes;if(this.clamp(),r%4)for(var i=0;o>i;i++){var a=n[i>>>2]>>>24-i%4*8&255;e[r+i>>>2]|=a<<24-(r+i)%4*8}else for(var i=0;o>i;i+=4)e[r+i>>>2]=n[i>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,n=this.sigBytes;e[n>>>2]&=4294967295<<32-n%4*8,e.length=t.ceil(n/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var n,r=[],o=function(e){var e=e,n=987654321,r=4294967295;return function(){n=36969*(65535&n)+(n>>16)&r,e=18e3*(65535&e)+(e>>16)&r;var o=(n<<16)+e&r;return o/=4294967296,o+=.5,o*(t.random()>.5?1:-1)}},a=0;e>a;a+=4){var s=o(4294967296*(n||t.random()));n=987654071*s(),r.push(4294967296*s()|0)}return new i.init(r,e)}}),a=n.enc={},s=a.Hex={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push((i>>>4).toString(16)),r.push((15&i).toString(16))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r+=2)n[r>>>3]|=parseInt(t.substr(r,2),16)<<24-r%8*4;return new i.init(n,e/2)}},c=a.Latin1={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(i))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r++)n[r>>>2]|=(255&t.charCodeAt(r))<<24-r%4*8;return new i.init(n,e)}},u=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=u.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var n=this._data,r=n.words,o=n.sigBytes,a=this.blockSize,s=4*a,c=o/s;c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*a,f=t.min(4*u,o);if(u){for(var p=0;u>p;p+=a)this._doProcessBlock(r,p);var l=r.splice(0,u);n.sigBytes-=f}return new i.init(l,f)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(r.Hasher=f.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},blockSize:16,_createHelper:function(t){return function(e,n){return new t.init(n).finalize(e)}},_createHmacHelper:function(t){return function(e,n){return new p.HMAC.init(t,n).finalize(e)}}}),n.algo={});return n}(Math);return t})},{}],53:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=e.enc;o.Base64={stringify:function(t){var e=t.words,n=t.sigBytes,r=this._map;t.clamp();for(var o=[],i=0;n>i;i+=3)for(var a=e[i>>>2]>>>24-i%4*8&255,s=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,u=a<<16|s<<8|c,f=0;4>f&&n>i+.75*f;f++)o.push(r.charAt(u>>>6*(3-f)&63));var p=r.charAt(64);if(p)for(;o.length%4;)o.push(p);return o.join("")},parse:function(t){var e=t.length,n=this._map,o=n.charAt(64);if(o){var i=t.indexOf(o);-1!=i&&(e=i)}for(var a=[],s=0,c=0;e>c;c++)if(c%4){var u=n.indexOf(t.charAt(c-1))<>>6-c%4*2;a[s>>>2]|=(u|f)<<24-s%4*8,s++}return r.create(a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64})},{"./core":52}],54:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(t){return t<<8&4278255360|t>>>8&16711935}var n=t,r=n.lib,o=r.WordArray,i=n.enc;i.Utf16=i.Utf16BE={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o+=2){var i=e[o>>>2]>>>16-o%4*8&65535;r.push(String.fromCharCode(i))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r++)n[r>>>1]|=t.charCodeAt(r)<<16-r%2*16;return o.create(n,2*e)}};i.Utf16LE={stringify:function(t){for(var n=t.words,r=t.sigBytes,o=[],i=0;r>i;i+=2){var a=e(n[i>>>2]>>>16-i%4*8&65535);o.push(String.fromCharCode(a))}return o.join("")},parse:function(t){for(var n=t.length,r=[],i=0;n>i;i++)r[i>>>1]|=e(t.charCodeAt(i)<<16-i%2*16);return o.create(r,2*n)}}}(),t.enc.Utf16})},{"./core":52}],55:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.Base,o=n.WordArray,i=e.algo,a=i.MD5,s=i.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var n=this.cfg,r=n.hasher.create(),i=o.create(),a=i.words,s=n.keySize,c=n.iterations;a.lengthf;f++)u=r.finalize(u),r.reset();i.concat(u)}return i.sigBytes=4*s,i}});e.EvpKDF=function(t,e,n){return s.create(n).compute(t,e)}}(),t.EvpKDF})},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.CipherParams,i=n.enc,a=i.Hex,s=n.format;s.Hex={stringify:function(t){return t.ciphertext.toString(a)},parse:function(t){var e=a.parse(t);return o.create({ciphertext:e})}}}(),t.format.Hex})},{"./cipher-core":51,"./core":52}],57:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){!function(){var e=t,n=e.lib,r=n.Base,o=e.enc,i=o.Utf8,a=e.algo;a.HMAC=r.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=i.parse(e));var n=t.blockSize,r=4*n;e.sigBytes>r&&(e=t.finalize(e)),e.clamp();for(var o=this._oKey=e.clone(),a=this._iKey=e.clone(),s=o.words,c=a.words,u=0;n>u;u++)s[u]^=1549556828,c[u]^=909522486;o.sigBytes=a.sigBytes=r,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,n=e.finalize(t);e.reset();var r=e.finalize(this._oKey.clone().concat(n));return r}})}()})},{"./core":52}],58:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core"),t("./lib-typedarrays"),t("./enc-utf16"),t("./enc-base64"),t("./md5"),t("./sha1"),t("./sha256"),t("./sha224"),t("./sha512"),t("./sha384"),t("./sha3"),t("./ripemd160"),t("./hmac"),t("./pbkdf2"),t("./evpkdf"),t("./cipher-core"),t("./mode-cfb"),t("./mode-ctr"),t("./mode-ctr-gladman"),t("./mode-ofb"),t("./mode-ecb"),t("./pad-ansix923"),t("./pad-iso10126"),t("./pad-iso97971"),t("./pad-zeropadding"),t("./pad-nopadding"),t("./format-hex"),t("./aes"),t("./tripledes"),t("./rc4"),t("./rabbit"),t("./rabbit-legacy")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./lib-typedarrays","./enc-utf16","./enc-base64","./md5","./sha1","./sha256","./sha224","./sha512","./sha384","./sha3","./ripemd160","./hmac","./pbkdf2","./evpkdf","./cipher-core","./mode-cfb","./mode-ctr","./mode-ctr-gladman","./mode-ofb","./mode-ecb","./pad-ansix923","./pad-iso10126","./pad-iso97971","./pad-zeropadding","./pad-nopadding","./format-hex","./aes","./tripledes","./rc4","./rabbit","./rabbit-legacy"],o):r.CryptoJS=o(r.CryptoJS)}(this,function(t){return t})},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){if("function"==typeof ArrayBuffer){var e=t,n=e.lib,r=n.WordArray,o=r.init,i=r.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,n=[],r=0;e>r;r++)n[r>>>2]|=t[r]<<24-r%4*8;o.call(this,n,e)}else o.apply(this,arguments)};i.prototype=r}}(),t.lib.WordArray})},{"./core":52}],60:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){function n(t,e,n,r,o,i,a){var s=t+(e&n|~e&r)+o+a;return(s<>>32-i)+e}function r(t,e,n,r,o,i,a){var s=t+(e&r|n&~r)+o+a;return(s<>>32-i)+e}function o(t,e,n,r,o,i,a){var s=t+(e^n^r)+o+a;return(s<>>32-i)+e}function i(t,e,n,r,o,i,a){var s=t+(n^(e|~r))+o+a;return(s<>>32-i)+e}var a=t,s=a.lib,c=s.WordArray,u=s.Hasher,f=a.algo,p=[];!function(){for(var t=0;64>t;t++)p[t]=4294967296*e.abs(e.sin(t+1))|0}();var l=f.MD5=u.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var a=0;16>a;a++){var s=e+a,c=t[s];t[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var u=this._hash.words,f=t[e+0],l=t[e+1],h=t[e+2],d=t[e+3],m=t[e+4],y=t[e+5],g=t[e+6],v=t[e+7],b=t[e+8],_=t[e+9],w=t[e+10],x=t[e+11],k=t[e+12],B=t[e+13],S=t[e+14],A=t[e+15],C=u[0],F=u[1],I=u[2],O=u[3];C=n(C,F,I,O,f,7,p[0]),O=n(O,C,F,I,l,12,p[1]),I=n(I,O,C,F,h,17,p[2]),F=n(F,I,O,C,d,22,p[3]),C=n(C,F,I,O,m,7,p[4]),O=n(O,C,F,I,y,12,p[5]),I=n(I,O,C,F,g,17,p[6]),F=n(F,I,O,C,v,22,p[7]),C=n(C,F,I,O,b,7,p[8]),O=n(O,C,F,I,_,12,p[9]),I=n(I,O,C,F,w,17,p[10]),F=n(F,I,O,C,x,22,p[11]),C=n(C,F,I,O,k,7,p[12]),O=n(O,C,F,I,B,12,p[13]),I=n(I,O,C,F,S,17,p[14]),F=n(F,I,O,C,A,22,p[15]),C=r(C,F,I,O,l,5,p[16]),O=r(O,C,F,I,g,9,p[17]),I=r(I,O,C,F,x,14,p[18]),F=r(F,I,O,C,f,20,p[19]),C=r(C,F,I,O,y,5,p[20]),O=r(O,C,F,I,w,9,p[21]),I=r(I,O,C,F,A,14,p[22]),F=r(F,I,O,C,m,20,p[23]),C=r(C,F,I,O,_,5,p[24]),O=r(O,C,F,I,S,9,p[25]),I=r(I,O,C,F,d,14,p[26]),F=r(F,I,O,C,b,20,p[27]),C=r(C,F,I,O,B,5,p[28]),O=r(O,C,F,I,h,9,p[29]),I=r(I,O,C,F,v,14,p[30]),F=r(F,I,O,C,k,20,p[31]),C=o(C,F,I,O,y,4,p[32]),O=o(O,C,F,I,b,11,p[33]),I=o(I,O,C,F,x,16,p[34]),F=o(F,I,O,C,S,23,p[35]),C=o(C,F,I,O,l,4,p[36]),O=o(O,C,F,I,m,11,p[37]),I=o(I,O,C,F,v,16,p[38]),F=o(F,I,O,C,w,23,p[39]),C=o(C,F,I,O,B,4,p[40]),O=o(O,C,F,I,f,11,p[41]),I=o(I,O,C,F,d,16,p[42]),F=o(F,I,O,C,g,23,p[43]),C=o(C,F,I,O,_,4,p[44]),O=o(O,C,F,I,k,11,p[45]),I=o(I,O,C,F,A,16,p[46]),F=o(F,I,O,C,h,23,p[47]),C=i(C,F,I,O,f,6,p[48]),O=i(O,C,F,I,v,10,p[49]),I=i(I,O,C,F,S,15,p[50]),F=i(F,I,O,C,y,21,p[51]),C=i(C,F,I,O,k,6,p[52]),O=i(O,C,F,I,d,10,p[53]),I=i(I,O,C,F,w,15,p[54]),F=i(F,I,O,C,l,21,p[55]),C=i(C,F,I,O,b,6,p[56]),O=i(O,C,F,I,A,10,p[57]),I=i(I,O,C,F,g,15,p[58]),F=i(F,I,O,C,B,21,p[59]),C=i(C,F,I,O,m,6,p[60]),O=i(O,C,F,I,x,10,p[61]),I=i(I,O,C,F,h,15,p[62]),F=i(F,I,O,C,_,21,p[63]),u[0]=u[0]+C|0,u[1]=u[1]+F|0,u[2]=u[2]+I|0,u[3]=u[3]+O|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296),a=r;n[(o+64>>>9<<4)+15]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[(o+64>>>9<<4)+14]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,c=s.words,u=0;4>u;u++){var f=c[u];c[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return s},clone:function(){var t=u.clone.call(this);return t._hash=this._hash.clone(),t}});a.MD5=u._createHelper(l),a.HmacMD5=u._createHmacHelper(l)}(Math),t.MD5})},{"./core":52}],61:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CFB=function(){function e(t,e,n,r){var o=this._iv;if(o){var i=o.slice(0);this._iv=void 0}else var i=this._prevBlock;r.encryptBlock(i,0);for(var a=0;n>a;a++)t[e+a]^=i[a]}var n=t.lib.BlockCipherMode.extend();return n.Encryptor=n.extend({processBlock:function(t,n){var r=this._cipher,o=r.blockSize;e.call(this,t,n,o,r),this._prevBlock=t.slice(n,n+o)}}),n.Decryptor=n.extend({processBlock:function(t,n){var r=this._cipher,o=r.blockSize,i=t.slice(n,n+o);e.call(this,t,n,o,r),this._prevBlock=i}}),n}(),t.mode.CFB})},{"./cipher-core":51,"./core":52}],62:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CTRGladman=function(){function e(t){if(255===(t>>24&255)){var e=t>>16&255,n=t>>8&255,r=255&t;255===e?(e=0,255===n?(n=0,255===r?r=0:++r):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=r}else t+=1<<24;return t}function n(t){return 0===(t[0]=e(t[0]))&&(t[1]=e(t[1])),t}var r=t.lib.BlockCipherMode.extend(),o=r.Encryptor=r.extend({processBlock:function(t,e){var r=this._cipher,o=r.blockSize,i=this._iv,a=this._counter;i&&(a=this._counter=i.slice(0),this._iv=void 0),n(a);var s=a.slice(0);r.encryptBlock(s,0);for(var c=0;o>c;c++)t[e+c]^=s[c]}});return r.Decryptor=o,r}(),t.mode.CTRGladman})},{"./cipher-core":51,"./core":52}],63:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CTR=function(){var e=t.lib.BlockCipherMode.extend(),n=e.Encryptor=e.extend({processBlock:function(t,e){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var a=i.slice(0);n.encryptBlock(a,0),i[r-1]=i[r-1]+1|0;for(var s=0;r>s;s++)t[e+s]^=a[s]}});return e.Decryptor=n,e}(),t.mode.CTR})},{"./cipher-core":51,"./core":52}],64:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.ECB=function(){var e=t.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),e.Decryptor=e.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),e}(),t.mode.ECB})},{"./cipher-core":51,"./core":52}],65:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.OFB=function(){var e=t.lib.BlockCipherMode.extend(),n=e.Encryptor=e.extend({processBlock:function(t,e){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),n.encryptBlock(i,0);for(var a=0;r>a;a++)t[e+a]^=i[a]}});return e.Decryptor=n,e}(),t.mode.OFB})},{"./cipher-core":51,"./core":52}],66:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.AnsiX923={pad:function(t,e){var n=t.sigBytes,r=4*e,o=r-n%r,i=n+o-1;t.clamp(),t.words[i>>>2]|=o<<24-i%4*8,t.sigBytes+=o},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},{"./cipher-core":51,"./core":52}],67:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.Iso10126={pad:function(e,n){var r=4*n,o=r-e.sigBytes%r;e.concat(t.lib.WordArray.random(o-1)).concat(t.lib.WordArray.create([o<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},{"./cipher-core":51,"./core":52}],68:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.Iso97971={pad:function(e,n){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,n)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},{"./cipher-core":51,"./core":52}],69:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},{"./cipher-core":51,"./core":52}],70:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.ZeroPadding={pad:function(t,e){var n=4*e;t.clamp(),t.sigBytes+=n-(t.sigBytes%n||n)},unpad:function(t){for(var e=t.words,n=t.sigBytes-1;!(e[n>>>2]>>>24-n%4*8&255);)n--;t.sigBytes=n+1}},t.pad.ZeroPadding})},{"./cipher-core":51,"./core":52}],71:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.Base,o=n.WordArray,i=e.algo,a=i.SHA1,s=i.HMAC,c=i.PBKDF2=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var n=this.cfg,r=s.create(n.hasher,t),i=o.create(),a=o.create([1]),c=i.words,u=a.words,f=n.keySize,p=n.iterations;c.lengthy;y++){m=r.finalize(m),r.reset();for(var g=m.words,v=0;d>v;v++)h[v]^=g[v]}i.concat(l),u[0]++}return i.sigBytes=4*f,i}});e.PBKDF2=function(t,e,n){return c.create(n).compute(t,e)}}(),t.PBKDF2})},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,n=0;8>n;n++)s[n]=e[n];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var n=0;8>n;n++){var r=t[n]+e[n],o=65535&r,i=r>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&r)*r|0)+((65535&r)*r|0);c[n]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=[],s=[],c=[],u=i.RabbitLegacy=o.extend({_doReset:function(){var t=this._key.words,n=this.cfg.iv,r=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],o=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;4>i;i++)e.call(this);for(var i=0;8>i;i++)o[i]^=r[i+4&7];if(n){var a=n.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,l=f<<16|65535&u;o[0]^=u,o[1]^=p,o[2]^=f,o[3]^=l,o[4]^=u,o[5]^=p,o[6]^=f,o[7]^=l;for(var i=0;4>i;i++)e.call(this)}},_doProcessBlock:function(t,n){var r=this._X;e.call(this),a[0]=r[0]^r[5]>>>16^r[3]<<16,a[1]=r[2]^r[7]>>>16^r[5]<<16,a[2]=r[4]^r[1]>>>16^r[7]<<16,a[3]=r[6]^r[3]>>>16^r[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[n+o]^=a[o]},blockSize:4,ivSize:2});n.RabbitLegacy=o._createHelper(u)}(),t.RabbitLegacy})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,n=0;8>n;n++)s[n]=e[n];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var n=0;8>n;n++){var r=t[n]+e[n],o=65535&r,i=r>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&r)*r|0)+((65535&r)*r|0);c[n]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=[],s=[],c=[],u=i.Rabbit=o.extend({_doReset:function(){for(var t=this._key.words,n=this.cfg.iv,r=0;4>r;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);var o=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;4>r;r++)e.call(this);for(var r=0;8>r;r++)i[r]^=o[r+4&7];if(n){var a=n.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,l=f<<16|65535&u;i[0]^=u,i[1]^=p,i[2]^=f,i[3]^=l,i[4]^=u,i[5]^=p,i[6]^=f,i[7]^=l;for(var r=0;4>r;r++)e.call(this)}},_doProcessBlock:function(t,n){var r=this._X;e.call(this),a[0]=r[0]^r[5]>>>16^r[3]<<16,a[1]=r[2]^r[7]>>>16^r[5]<<16,a[2]=r[4]^r[1]>>>16^r[7]<<16,a[3]=r[6]^r[3]>>>16^r[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[n+o]^=a[o]},blockSize:4,ivSize:2});n.Rabbit=o._createHelper(u)}(),t.Rabbit})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._S,e=this._i,n=this._j,r=0,o=0;4>o;o++){e=(e+1)%256,n=(n+t[e])%256;var i=t[e];t[e]=t[n],t[n]=i,r|=t[(t[e]+t[n])%256]<<24-8*o}return this._i=e,this._j=n,r}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=i.RC4=o.extend({_doReset:function(){for(var t=this._key,e=t.words,n=t.sigBytes,r=this._S=[],o=0;256>o;o++)r[o]=o;for(var o=0,i=0;256>o;o++){var a=o%n,s=e[a>>>2]>>>24-a%4*8&255;i=(i+r[o]+s)%256;var c=r[o];r[o]=r[i],r[i]=c}this._i=this._j=0},_doProcessBlock:function(t,n){t[n]^=e.call(this)},keySize:8,ivSize:0});n.RC4=o._createHelper(a);var s=i.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)e.call(this)}});n.RC4Drop=o._createHelper(s)}(),t.RC4})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){function n(t,e,n){return t^e^n}function r(t,e,n){return t&e|~t&n}function o(t,e,n){return(t|~e)^n}function i(t,e,n){return t&n|e&~n}function a(t,e,n){return t^(e|~n)}function s(t,e){return t<>>32-e}var c=t,u=c.lib,f=u.WordArray,p=u.Hasher,l=c.algo,h=f.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),d=f.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),m=f.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),y=f.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),g=f.create([0,1518500249,1859775393,2400959708,2840853838]),v=f.create([1352829926,1548603684,1836072691,2053994217,0]),b=l.RIPEMD160=p.extend({_doReset:function(){this._hash=f.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var c=0;16>c;c++){var u=e+c,f=t[u];t[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}var p,l,b,_,w,x,k,B,S,A,C=this._hash.words,F=g.words,I=v.words,O=h.words,N=d.words,D=m.words,P=y.words;x=p=C[0],k=l=C[1],B=b=C[2],S=_=C[3],A=w=C[4];for(var T,c=0;80>c;c+=1)T=p+t[e+O[c]]|0,T+=16>c?n(l,b,_)+F[0]:32>c?r(l,b,_)+F[1]:48>c?o(l,b,_)+F[2]:64>c?i(l,b,_)+F[3]:a(l,b,_)+F[4],T=0|T,T=s(T,D[c]),T=T+w|0,p=w,w=_,_=s(b,10),b=l,l=T,T=x+t[e+N[c]]|0,T+=16>c?a(k,B,S)+I[0]:32>c?i(k,B,S)+I[1]:48>c?o(k,B,S)+I[2]:64>c?r(k,B,S)+I[3]:n(k,B,S)+I[4],T=0|T,T=s(T,P[c]),T=T+A|0,x=A,A=S,S=s(B,10),B=k,k=T;T=C[1]+b+S|0,C[1]=C[2]+_+A|0,C[2]=C[3]+w+x|0,C[3]=C[4]+p+k|0,C[4]=C[0]+l+B|0,C[0]=T},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;e[r>>>5]|=128<<24-r%32,e[(r+64>>>9<<4)+14]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),t.sigBytes=4*(e.length+1),this._process();for(var o=this._hash,i=o.words,a=0;5>a;a++){var s=i[a];i[a]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return o},clone:function(){var t=p.clone.call(this);return t._hash=this._hash.clone(),t}});c.RIPEMD160=p._createHelper(b),c.HmacRIPEMD160=p._createHmacHelper(b)}(Math),t.RIPEMD160})},{"./core":52}],76:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=n.Hasher,i=e.algo,a=[],s=i.SHA1=o.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520]); -},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],s=n[3],c=n[4],u=0;80>u;u++){if(16>u)a[u]=0|t[e+u];else{var f=a[u-3]^a[u-8]^a[u-14]^a[u-16];a[u]=f<<1|f>>>31}var p=(r<<5|r>>>27)+c+a[u];p+=20>u?(o&i|~o&s)+1518500249:40>u?(o^i^s)+1859775393:60>u?(o&i|o&s|i&s)-1894007588:(o^i^s)-899497514,c=s,s=i,i=o<<30|o>>>2,o=r,r=p}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return e[r>>>5]|=128<<24-r%32,e[(r+64>>>9<<4)+14]=Math.floor(n/4294967296),e[(r+64>>>9<<4)+15]=n,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=o._createHelper(s),e.HmacSHA1=o._createHmacHelper(s)}(),t.SHA1})},{"./core":52}],77:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha256")):"function"==typeof define&&define.amd?define(["./core","./sha256"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=e.algo,i=o.SHA256,a=o.SHA224=i.extend({_doReset:function(){this._hash=new r.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=i._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=i._createHelper(a),e.HmacSHA224=i._createHmacHelper(a)}(),t.SHA224})},{"./core":52,"./sha256":78}],78:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.algo,s=[],c=[];!function(){function t(t){for(var n=e.sqrt(t),r=2;n>=r;r++)if(!(t%r))return!1;return!0}function n(t){return 4294967296*(t-(0|t))|0}for(var r=2,o=0;64>o;)t(r)&&(8>o&&(s[o]=n(e.pow(r,.5))),c[o]=n(e.pow(r,1/3)),o++),r++}();var u=[],f=a.SHA256=i.extend({_doReset:function(){this._hash=new o.init(s.slice(0))},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],a=n[3],s=n[4],f=n[5],p=n[6],l=n[7],h=0;64>h;h++){if(16>h)u[h]=0|t[e+h];else{var d=u[h-15],m=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,y=u[h-2],g=(y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10;u[h]=m+u[h-7]+g+u[h-16]}var v=s&f^~s&p,b=r&o^r&i^o&i,_=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),w=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),x=l+w+v+c[h]+u[h],k=_+b;l=p,p=f,f=s,s=a+x|0,a=i,i=o,o=r,r=x+k|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+a|0,n[4]=n[4]+s|0,n[5]=n[5]+f|0,n[6]=n[6]+p|0,n[7]=n[7]+l|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[(o+64>>>9<<4)+14]=e.floor(r/4294967296),n[(o+64>>>9<<4)+15]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});n.SHA256=i._createHelper(f),n.HmacSHA256=i._createHmacHelper(f)}(Math),t.SHA256})},{"./core":52}],79:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.x64,s=a.Word,c=n.algo,u=[],f=[],p=[];!function(){for(var t=1,e=0,n=0;24>n;n++){u[t+5*e]=(n+1)*(n+2)/2%64;var r=e%5,o=(2*t+3*e)%5;t=r,e=o}for(var t=0;5>t;t++)for(var e=0;5>e;e++)f[t+5*e]=e+(2*t+3*e)%5*5;for(var i=1,a=0;24>a;a++){for(var c=0,l=0,h=0;7>h;h++){if(1&i){var d=(1<d?l^=1<t;t++)l[t]=s.create()}();var h=c.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;25>e;e++)t[e]=new s.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var n=this._state,r=this.blockSize/2,o=0;r>o;o++){var i=t[e+2*o],a=t[e+2*o+1];i=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8);var s=n[o];s.high^=a,s.low^=i}for(var c=0;24>c;c++){for(var h=0;5>h;h++){for(var d=0,m=0,y=0;5>y;y++){var s=n[h+5*y];d^=s.high,m^=s.low}var g=l[h];g.high=d,g.low=m}for(var h=0;5>h;h++)for(var v=l[(h+4)%5],b=l[(h+1)%5],_=b.high,w=b.low,d=v.high^(_<<1|w>>>31),m=v.low^(w<<1|_>>>31),y=0;5>y;y++){var s=n[h+5*y];s.high^=d,s.low^=m}for(var x=1;25>x;x++){var s=n[x],k=s.high,B=s.low,S=u[x];if(32>S)var d=k<>>32-S,m=B<>>32-S;else var d=B<>>64-S,m=k<>>64-S;var A=l[f[x]];A.high=d,A.low=m}var C=l[0],F=n[0];C.high=F.high,C.low=F.low;for(var h=0;5>h;h++)for(var y=0;5>y;y++){var x=h+5*y,s=n[x],I=l[x],O=l[(h+1)%5+5*y],N=l[(h+2)%5+5*y];s.high=I.high^~O.high&N.high,s.low=I.low^~O.low&N.low}var s=n[0],D=p[c];s.high^=D.high,s.low^=D.low}},_doFinalize:function(){var t=this._data,n=t.words,r=(8*this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;n[r>>>5]|=1<<24-r%32,n[(e.ceil((r+1)/i)*i>>>5)-1]|=128,t.sigBytes=4*n.length,this._process();for(var a=this._state,s=this.cfg.outputLength/8,c=s/8,u=[],f=0;c>f;f++){var p=a[f],l=p.high,h=p.low;l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8),u.push(h),u.push(l)}return new o.init(u,s)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),n=0;25>n;n++)e[n]=e[n].clone();return t}});n.SHA3=i._createHelper(h),n.HmacSHA3=i._createHmacHelper(h)}(Math),t.SHA3})},{"./core":52,"./x64-core":83}],80:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core"),t("./sha512")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./sha512"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.x64,r=n.Word,o=n.WordArray,i=e.algo,a=i.SHA512,s=i.SHA384=a.extend({_doReset:function(){this._hash=new o.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=a._createHelper(s),e.HmacSHA384=a._createHmacHelper(s)}(),t.SHA384})},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){return a.create.apply(a,arguments)}var n=t,r=n.lib,o=r.Hasher,i=n.x64,a=i.Word,s=i.WordArray,c=n.algo,u=[e(1116352408,3609767458),e(1899447441,602891725),e(3049323471,3964484399),e(3921009573,2173295548),e(961987163,4081628472),e(1508970993,3053834265),e(2453635748,2937671579),e(2870763221,3664609560),e(3624381080,2734883394),e(310598401,1164996542),e(607225278,1323610764),e(1426881987,3590304994),e(1925078388,4068182383),e(2162078206,991336113),e(2614888103,633803317),e(3248222580,3479774868),e(3835390401,2666613458),e(4022224774,944711139),e(264347078,2341262773),e(604807628,2007800933),e(770255983,1495990901),e(1249150122,1856431235),e(1555081692,3175218132),e(1996064986,2198950837),e(2554220882,3999719339),e(2821834349,766784016),e(2952996808,2566594879),e(3210313671,3203337956),e(3336571891,1034457026),e(3584528711,2466948901),e(113926993,3758326383),e(338241895,168717936),e(666307205,1188179964),e(773529912,1546045734),e(1294757372,1522805485),e(1396182291,2643833823),e(1695183700,2343527390),e(1986661051,1014477480),e(2177026350,1206759142),e(2456956037,344077627),e(2730485921,1290863460),e(2820302411,3158454273),e(3259730800,3505952657),e(3345764771,106217008),e(3516065817,3606008344),e(3600352804,1432725776),e(4094571909,1467031594),e(275423344,851169720),e(430227734,3100823752),e(506948616,1363258195),e(659060556,3750685593),e(883997877,3785050280),e(958139571,3318307427),e(1322822218,3812723403),e(1537002063,2003034995),e(1747873779,3602036899),e(1955562222,1575990012),e(2024104815,1125592928),e(2227730452,2716904306),e(2361852424,442776044),e(2428436474,593698344),e(2756734187,3733110249),e(3204031479,2999351573),e(3329325298,3815920427),e(3391569614,3928383900),e(3515267271,566280711),e(3940187606,3454069534),e(4118630271,4000239992),e(116418474,1914138554),e(174292421,2731055270),e(289380356,3203993006),e(460393269,320620315),e(685471733,587496836),e(852142971,1086792851),e(1017036298,365543100),e(1126000580,2618297676),e(1288033470,3409855158),e(1501505948,4234509866),e(1607167915,987167468),e(1816402316,1246189591)],f=[];!function(){for(var t=0;80>t;t++)f[t]=e()}();var p=c.SHA512=o.extend({_doReset:function(){this._hash=new s.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],a=n[3],s=n[4],c=n[5],p=n[6],l=n[7],h=r.high,d=r.low,m=o.high,y=o.low,g=i.high,v=i.low,b=a.high,_=a.low,w=s.high,x=s.low,k=c.high,B=c.low,S=p.high,A=p.low,C=l.high,F=l.low,I=h,O=d,N=m,D=y,P=g,T=v,E=b,R=_,M=w,H=x,j=k,q=B,L=S,z=A,U=C,W=F,J=0;80>J;J++){var G=f[J];if(16>J)var X=G.high=0|t[e+2*J],$=G.low=0|t[e+2*J+1];else{var K=f[J-15],V=K.high,Z=K.low,Y=(V>>>1|Z<<31)^(V>>>8|Z<<24)^V>>>7,Q=(Z>>>1|V<<31)^(Z>>>8|V<<24)^(Z>>>7|V<<25),tt=f[J-2],et=tt.high,nt=tt.low,rt=(et>>>19|nt<<13)^(et<<3|nt>>>29)^et>>>6,ot=(nt>>>19|et<<13)^(nt<<3|et>>>29)^(nt>>>6|et<<26),it=f[J-7],at=it.high,st=it.low,ct=f[J-16],ut=ct.high,ft=ct.low,$=Q+st,X=Y+at+(Q>>>0>$>>>0?1:0),$=$+ot,X=X+rt+(ot>>>0>$>>>0?1:0),$=$+ft,X=X+ut+(ft>>>0>$>>>0?1:0);G.high=X,G.low=$}var pt=M&j^~M&L,lt=H&q^~H&z,ht=I&N^I&P^N&P,dt=O&D^O&T^D&T,mt=(I>>>28|O<<4)^(I<<30|O>>>2)^(I<<25|O>>>7),yt=(O>>>28|I<<4)^(O<<30|I>>>2)^(O<<25|I>>>7),gt=(M>>>14|H<<18)^(M>>>18|H<<14)^(M<<23|H>>>9),vt=(H>>>14|M<<18)^(H>>>18|M<<14)^(H<<23|M>>>9),bt=u[J],_t=bt.high,wt=bt.low,xt=W+vt,kt=U+gt+(W>>>0>xt>>>0?1:0),xt=xt+lt,kt=kt+pt+(lt>>>0>xt>>>0?1:0),xt=xt+wt,kt=kt+_t+(wt>>>0>xt>>>0?1:0),xt=xt+$,kt=kt+X+($>>>0>xt>>>0?1:0),Bt=yt+dt,St=mt+ht+(yt>>>0>Bt>>>0?1:0);U=L,W=z,L=j,z=q,j=M,q=H,H=R+xt|0,M=E+kt+(R>>>0>H>>>0?1:0)|0,E=P,R=T,P=N,T=D,N=I,D=O,O=xt+Bt|0,I=kt+St+(xt>>>0>O>>>0?1:0)|0}d=r.low=d+O,r.high=h+I+(O>>>0>d>>>0?1:0),y=o.low=y+D,o.high=m+N+(D>>>0>y>>>0?1:0),v=i.low=v+T,i.high=g+P+(T>>>0>v>>>0?1:0),_=a.low=_+R,a.high=b+E+(R>>>0>_>>>0?1:0),x=s.low=x+H,s.high=w+M+(H>>>0>x>>>0?1:0),B=c.low=B+q,c.high=k+j+(q>>>0>B>>>0?1:0),A=p.low=A+z,p.high=S+L+(z>>>0>A>>>0?1:0),F=l.low=F+W,l.high=C+U+(W>>>0>F>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;e[r>>>5]|=128<<24-r%32,e[(r+128>>>10<<5)+30]=Math.floor(n/4294967296),e[(r+128>>>10<<5)+31]=n,t.sigBytes=4*e.length,this._process();var o=this._hash.toX32();return o},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});n.SHA512=o._createHelper(p),n.HmacSHA512=o._createHmacHelper(p)}(),t.SHA512})},{"./core":52,"./x64-core":83}],82:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(t,e){var n=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=n,this._lBlock^=n<>>t^this._lBlock)&e;this._lBlock^=n,this._rBlock^=n<r;r++){var o=c[r]-1;n[r]=e[o>>>5]>>>31-o%32&1}for(var i=this._subKeys=[],a=0;16>a;a++){for(var s=i[a]=[],p=f[a],r=0;24>r;r++)s[r/6|0]|=n[(u[r]-1+p)%28]<<31-r%6,s[4+(r/6|0)]|=n[28+(u[r+24]-1+p)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(var r=1;7>r;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var l=this._invSubKeys=[],r=0;16>r;r++)l[r]=i[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,r,o){this._lBlock=t[r],this._rBlock=t[r+1],e.call(this,4,252645135),e.call(this,16,65535),n.call(this,2,858993459),n.call(this,8,16711935),e.call(this,1,1431655765);for(var i=0;16>i;i++){for(var a=o[i],s=this._lBlock,c=this._rBlock,u=0,f=0;8>f;f++)u|=p[f][((c^a[f])&l[f])>>>0];this._lBlock=c,this._rBlock=s^u}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,e.call(this,1,1431655765),n.call(this,8,16711935),n.call(this,2,858993459),e.call(this,16,65535),e.call(this,4,252645135),t[r]=this._lBlock,t[r+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});r.DES=a._createHelper(h);var d=s.TripleDES=a.extend({_doReset:function(){var t=this._key,e=t.words;this._des1=h.createEncryptor(i.create(e.slice(0,2))),this._des2=h.createEncryptor(i.create(e.slice(2,4))),this._des3=h.createEncryptor(i.create(e.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});r.TripleDES=a._createHelper(d)}(),t.TripleDES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.Base,i=r.WordArray,a=n.x64={};a.Word=o.extend({init:function(t,e){this.high=t,this.low=e}}),a.WordArray=o.extend({init:function(t,n){t=this.words=t||[],n!=e?this.sigBytes=n:this.sigBytes=8*t.length},toX32:function(){for(var t=this.words,e=t.length,n=[],r=0;e>r;r++){var o=t[r];n.push(o.high),n.push(o.low)}return i.create(n,this.sigBytes)},clone:function(){for(var t=o.clone.call(this),e=t.words=this.words.slice(0),n=e.length,r=0;n>r;r++)e[r]=e[r].clone();return t}})}(),t})},{"./core":52}],84:[function(t,e,n){!function(t){function r(t){for(var e,n,r=[],o=0,i=t.length;i>o;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function o(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=v(e>>>10&1023|55296),e=56320|1023&e),o+=v(e);return o}function i(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return v(t>>e&63|128)}function s(t){if(0==(4294967168&t))return v(t);var e="";return 0==(4294965248&t)?e=v(t>>6&31|192):0==(4294901760&t)?(i(t),e=v(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=v(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=v(63&t|128)}function c(t){for(var e,n=r(t),o=n.length,i=-1,a="";++i=y)throw Error("Invalid byte index");var t=255&m[g];if(g++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function f(){var t,e,n,r,o;if(g>y)throw Error("Invalid byte index");if(g==y)return!1;if(t=255&m[g],g++,0==(128&t))return t;if(192==(224&t)){var e=u();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=u(),n=u(),o=(15&t)<<12|e<<6|n,o>=2048)return i(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=u(),n=u(),r=u(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function p(t){m=r(t),y=m.length,g=0;for(var e,n=[];(e=f())!==!1;)n.push(e);return o(n)}var l="object"==typeof n&&n,h="object"==typeof e&&e&&e.exports==l&&e,d="object"==typeof global&&global;(d.global===d||d.window===d)&&(t=d);var m,y,g,v=String.fromCharCode,b={version:"2.0.0",encode:c,decode:p};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return b});else if(l&&!l.nodeType)if(h)h.exports=b;else{var _={},w=_.hasOwnProperty;for(var x in b)w.call(b,x)&&(l[x]=b[x])}else t.utf8=b}(this)},{}],"bignumber.js":[function(t,e,n){!function(n){"use strict";function r(t){function e(t,r){var o,i,a,s,c,u,f=this;if(!(f instanceof e))return W&&D(26,"constructor call without new",t),new e(t,r);if(null!=r&&J(r,2,64,E,"base")){if(r=0|r,u=t+"",10==r)return f=new e(t instanceof e?t:u),P(f,H+f.e+1,j);if((s="number"==typeof t)&&0*t!=0||!new RegExp("^-?"+(o="["+x.slice(0,r)+"]+")+"(?:\\."+o+")?$",37>r?"i":"").test(u))return m(f,u,s,r);s?(f.s=0>1/t?(u=u.slice(1),-1):1,W&&u.replace(/^0\.0*|\./,"").length>15&&D(E,w,t),s=!1):f.s=45===u.charCodeAt(0)?(u=u.slice(1),-1):1,u=n(u,10,r,f.s)}else{if(t instanceof e)return f.s=t.s,f.e=t.e,f.c=(t=t.c)?t.slice():t,void(E=0);if((s="number"==typeof t)&&0*t==0){if(f.s=0>1/t?(t=-t,-1):1,t===~~t){for(i=0,a=t;a>=10;a/=10,i++);return f.e=i,f.c=[t],void(E=0)}u=t+""}else{if(!y.test(u=t+""))return m(f,u,s);f.s=45===u.charCodeAt(0)?(u=u.slice(1),-1):1}}for((i=u.indexOf("."))>-1&&(u=u.replace(".","")),(a=u.search(/e/i))>0?(0>i&&(i=a),i+=+u.slice(a+1),u=u.substring(0,a)):0>i&&(i=u.length),a=0;48===u.charCodeAt(a);a++);for(c=u.length;48===u.charCodeAt(--c););if(u=u.slice(a,c+1))if(c=u.length,s&&W&&c>15&&D(E,w,f.s*t),i=i-a-1,i>U)f.c=f.e=null;else if(z>i)f.c=[f.e=0];else{if(f.e=i,f.c=[],a=(i+1)%B,0>i&&(a+=B),c>a){for(a&&f.c.push(+u.slice(0,a)),c-=B;c>a;)f.c.push(+u.slice(a,a+=B));u=u.slice(a),a=B-u.length}else a-=c;for(;a--;u+="0");f.c.push(+u)}else f.c=[f.e=0];E=0}function n(t,n,r,o){var a,s,c,f,l,h,d,m=t.indexOf("."),y=H,g=j;for(37>r&&(t=t.toLowerCase()),m>=0&&(c=$,$=0,t=t.replace(".",""),d=new e(r),l=d.pow(t.length-m),$=c,d.c=u(p(i(l.c),l.e),10,n),d.e=d.c.length),h=u(t,r,n),s=c=h.length;0==h[--c];h.pop());if(!h[0])return"0";if(0>m?--s:(l.c=h,l.e=s,l.s=o,l=T(l,d,y,g,n),h=l.c,f=l.r,s=l.e),a=s+y+1,m=h[a],c=n/2,f=f||0>a||null!=h[a+1],f=4>g?(null!=m||f)&&(0==g||g==(l.s<0?3:2)):m>c||m==c&&(4==g||f||6==g&&1&h[a-1]||g==(l.s<0?8:7)),1>a||!h[0])t=f?p("1",-y):"0";else{if(h.length=a,f)for(--n;++h[--a]>n;)h[a]=0,a||(++s,h.unshift(1));for(c=h.length;!h[--c];);for(m=0,t="";c>=m;t+=x.charAt(h[m++]));t=p(t,s)}return t}function h(t,n,r,o){var a,s,c,u,l;if(r=null!=r&&J(r,0,8,o,_)?0|r:j,!t.c)return t.toString();if(a=t.c[0],c=t.e,null==n)l=i(t.c),l=19==o||24==o&&q>=c?f(l,c):p(l,c);else if(t=P(new e(t),n,r),s=t.e,l=i(t.c),u=l.length,19==o||24==o&&(s>=n||q>=s)){for(;n>u;l+="0",u++);l=f(l,s)}else if(n-=c,l=p(l,s),s+1>u){if(--n>0)for(l+=".";n--;l+="0");}else if(n+=s-u,n>0)for(s+1==u&&(l+=".");n--;l+="0");return t.s<0&&a?"-"+l:l}function I(t,n){var r,o,i=0;for(c(t[0])&&(t=t[0]),r=new e(t[0]);++it||t>n||t!=l(t))&&D(r,(o||"decimal places")+(e>t||t>n?" out of range":" not an integer"),t),!0}function N(t,e,n){for(var r=1,o=e.length;!e[--o];e.pop());for(o=e[0];o>=10;o/=10,r++);return(n=r+n*B-1)>U?t.c=t.e=null:z>n?t.c=[t.e=0]:(t.e=n,t.c=e),t}function D(t,e,n){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][t]+"() "+e+": "+n);throw r.name="BigNumber Error",E=0,r}function P(t,e,n,r){var o,i,a,s,c,u,f,p=t.c,l=A;if(p){t:{for(o=1,s=p[0];s>=10;s/=10,o++);if(i=e-o,0>i)i+=B,a=e,c=p[u=0],f=c/l[o-a-1]%10|0;else if(u=g((i+1)/B),u>=p.length){if(!r)break t;for(;p.length<=u;p.push(0));c=f=0,o=1,i%=B,a=i-B+1}else{for(c=s=p[u],o=1;s>=10;s/=10,o++);i%=B,a=i-B+o,f=0>a?0:c/l[o-a-1]%10|0}if(r=r||0>e||null!=p[u+1]||(0>a?c:c%l[o-a-1]),r=4>n?(f||r)&&(0==n||n==(t.s<0?3:2)):f>5||5==f&&(4==n||r||6==n&&(i>0?a>0?c/l[o-a]:0:p[u-1])%10&1||n==(t.s<0?8:7)),1>e||!p[0])return p.length=0,r?(e-=t.e+1,p[0]=l[e%B],t.e=-e||0):p[0]=t.e=0,t;if(0==i?(p.length=u,s=1,u--):(p.length=u+1,s=l[B-i],p[u]=a>0?v(c/l[o-a]%l[a])*s:0),r)for(;;){if(0==u){for(i=1,a=p[0];a>=10;a/=10,i++);for(a=p[0]+=s,s=1;a>=10;a/=10,s++);i!=s&&(t.e++,p[0]==k&&(p[0]=1));break}if(p[u]+=s,p[u]!=k)break;p[u--]=0,s=1}for(i=p.length;0===p[--i];p.pop());}t.e>U?t.c=t.e=null:t.en?null!=(t=o[n++]):void 0};return a(e="DECIMAL_PLACES")&&J(t,0,F,2,e)&&(H=0|t),r[e]=H,a(e="ROUNDING_MODE")&&J(t,0,8,2,e)&&(j=0|t),r[e]=j,a(e="EXPONENTIAL_AT")&&(c(t)?J(t[0],-F,0,2,e)&&J(t[1],0,F,2,e)&&(q=0|t[0],L=0|t[1]):J(t,-F,F,2,e)&&(q=-(L=0|(0>t?-t:t)))),r[e]=[q,L],a(e="RANGE")&&(c(t)?J(t[0],-F,-1,2,e)&&J(t[1],1,F,2,e)&&(z=0|t[0],U=0|t[1]):J(t,-F,F,2,e)&&(0|t?z=-(U=0|(0>t?-t:t)):W&&D(2,e+" cannot be zero",t))),r[e]=[z,U],a(e="ERRORS")&&(t===!!t||1===t||0===t?(E=0,J=(W=!!t)?O:s):W&&D(2,e+b,t)),r[e]=W,a(e="CRYPTO")&&(t===!!t||1===t||0===t?(G=!(!t||!d||"object"!=typeof d),t&&!G&&W&&D(2,"crypto unavailable",d)):W&&D(2,e+b,t)),r[e]=G,a(e="MODULO_MODE")&&J(t,0,9,2,e)&&(X=0|t),r[e]=X,a(e="POW_PRECISION")&&J(t,0,F,2,e)&&($=0|t),r[e]=$,a(e="FORMAT")&&("object"==typeof t?K=t:W&&D(2,e+" not an object",t)),r[e]=K,r},e.max=function(){return I(arguments,R.lt)},e.min=function(){return I(arguments,R.gt)},e.random=function(){var t=9007199254740992,n=Math.random()*t&2097151?function(){return v(Math.random()*t)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(t){var r,o,i,a,s,c=0,u=[],f=new e(M);if(t=null!=t&&J(t,0,F,14)?0|t:H,a=g(t/B),G)if(d&&d.getRandomValues){for(r=d.getRandomValues(new Uint32Array(a*=2));a>c;)s=131072*r[c]+(r[c+1]>>>11),s>=9e15?(o=d.getRandomValues(new Uint32Array(2)),r[c]=o[0],r[c+1]=o[1]):(u.push(s%1e14),c+=2);c=a/2}else if(d&&d.randomBytes){for(r=d.randomBytes(a*=7);a>c;)s=281474976710656*(31&r[c])+1099511627776*r[c+1]+4294967296*r[c+2]+16777216*r[c+3]+(r[c+4]<<16)+(r[c+5]<<8)+r[c+6],s>=9e15?d.randomBytes(7).copy(r,c):(u.push(s%1e14),c+=7);c=a/7}else W&&D(14,"crypto unavailable",d);if(!c)for(;a>c;)s=n(),9e15>s&&(u[c++]=s%1e14);for(a=u[--c],t%=B,a&&t&&(s=A[B-t],u[c]=v(a/s)*s);0===u[c];u.pop(),c--);if(0>c)u=[i=0];else{for(i=-1;0===u[0];u.shift(),i-=B);for(c=1,s=u[0];s>=10;s/=10,c++);B>c&&(i-=B-c)}return f.e=i,f.c=u,f}}(),T=function(){function t(t,e,n){var r,o,i,a,s=0,c=t.length,u=e%C,f=e/C|0;for(t=t.slice();c--;)i=t[c]%C,a=t[c]/C|0,r=f*i+a*u,o=u*i+r%C*C+s,s=(o/n|0)+(r/C|0)+f*a,t[c]=o%n;return s&&t.unshift(s),t}function n(t,e,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;n>o;o++)if(t[o]!=e[o]){i=t[o]>e[o]?1:-1;break}return i}function r(t,e,n,r){for(var o=0;n--;)t[n]-=o,o=t[n]1;t.shift());}return function(i,a,s,c,u){var f,p,l,h,d,m,y,g,b,_,w,x,S,A,C,F,I,O=i.s==a.s?1:-1,N=i.c,D=a.c;if(!(N&&N[0]&&D&&D[0]))return new e(i.s&&a.s&&(N?!D||N[0]!=D[0]:D)?N&&0==N[0]||!D?0*O:O/0:NaN);for(g=new e(O),b=g.c=[],p=i.e-a.e,O=s+p+1,u||(u=k,p=o(i.e/B)-o(a.e/B),O=O/B|0),l=0;D[l]==(N[l]||0);l++);if(D[l]>(N[l]||0)&&p--,0>O)b.push(1),h=!0;else{for(A=N.length,F=D.length,l=0,O+=2,d=v(u/(D[0]+1)),d>1&&(D=t(D,d,u),N=t(N,d,u),F=D.length,A=N.length),S=F,_=N.slice(0,F),w=_.length;F>w;_[w++]=0);I=D.slice(),I.unshift(0),C=D[0],D[1]>=u/2&&C++;do{if(d=0,f=n(D,_,F,w),0>f){if(x=_[0],F!=w&&(x=x*u+(_[1]||0)),d=v(x/C),d>1)for(d>=u&&(d=u-1),m=t(D,d,u),y=m.length,w=_.length;1==n(m,_,y,w);)d--,r(m,y>F?I:D,y,u),y=m.length,f=1;else 0==d&&(f=d=1),m=D.slice(), -y=m.length;if(w>y&&m.unshift(0),r(_,m,w,u),w=_.length,-1==f)for(;n(D,_,F,w)<1;)d++,r(_,w>F?I:D,w,u),w=_.length}else 0===f&&(d++,_=[0]);b[l++]=d,_[0]?_[w++]=N[S]||0:(_=[N[S]],w=1)}while((S++=10;O/=10,l++);P(g,s+(g.e=l+p*B-1)+1,c,h)}else g.e=p,g.r=+h;return g}}(),m=function(){var t=/^(-?)0([xbo])/i,n=/^([^.]+)\.$/,r=/^\.([^.]+)$/,o=/^-?(Infinity|NaN)$/,i=/^\s*\+|^\s+|\s+$/g;return function(a,s,c,u){var f,p=c?s:s.replace(i,"");if(o.test(p))a.s=isNaN(p)?null:0>p?-1:1;else{if(!c&&(p=p.replace(t,function(t,e,n){return f="x"==(n=n.toLowerCase())?16:"b"==n?2:8,u&&u!=f?t:e}),u&&(f=u,p=p.replace(n,"$1").replace(r,"0.$1")),s!=p))return new e(p,f);W&&D(E,"not a"+(u?" base "+u:"")+" number",s),a.s=null}a.c=a.e=null,E=0}}(),R.absoluteValue=R.abs=function(){var t=new e(this);return t.s<0&&(t.s=1),t},R.ceil=function(){return P(new e(this),this.e+1,2)},R.comparedTo=R.cmp=function(t,n){return E=1,a(this,new e(t,n))},R.decimalPlaces=R.dp=function(){var t,e,n=this.c;if(!n)return null;if(t=((e=n.length-1)-o(this.e/B))*B,e=n[e])for(;e%10==0;e/=10,t--);return 0>t&&(t=0),t},R.dividedBy=R.div=function(t,n){return E=3,T(this,new e(t,n),H,j)},R.dividedToIntegerBy=R.divToInt=function(t,n){return E=4,T(this,new e(t,n),0,1)},R.equals=R.eq=function(t,n){return E=5,0===a(this,new e(t,n))},R.floor=function(){return P(new e(this),this.e+1,3)},R.greaterThan=R.gt=function(t,n){return E=6,a(this,new e(t,n))>0},R.greaterThanOrEqualTo=R.gte=function(t,n){return E=7,1===(n=a(this,new e(t,n)))||0===n},R.isFinite=function(){return!!this.c},R.isInteger=R.isInt=function(){return!!this.c&&o(this.e/B)>this.c.length-2},R.isNaN=function(){return!this.s},R.isNegative=R.isNeg=function(){return this.s<0},R.isZero=function(){return!!this.c&&0==this.c[0]},R.lessThan=R.lt=function(t,n){return E=8,a(this,new e(t,n))<0},R.lessThanOrEqualTo=R.lte=function(t,n){return E=9,-1===(n=a(this,new e(t,n)))||0===n},R.minus=R.sub=function(t,n){var r,i,a,s,c=this,u=c.s;if(E=10,t=new e(t,n),n=t.s,!u||!n)return new e(NaN);if(u!=n)return t.s=-n,c.plus(t);var f=c.e/B,p=t.e/B,l=c.c,h=t.c;if(!f||!p){if(!l||!h)return l?(t.s=-n,t):new e(h?c:NaN);if(!l[0]||!h[0])return h[0]?(t.s=-n,t):new e(l[0]?c:3==j?-0:0)}if(f=o(f),p=o(p),l=l.slice(),u=f-p){for((s=0>u)?(u=-u,a=l):(p=f,a=h),a.reverse(),n=u;n--;a.push(0));a.reverse()}else for(i=(s=(u=l.length)<(n=h.length))?u:n,u=n=0;i>n;n++)if(l[n]!=h[n]){s=l[n]0)for(;n--;l[r++]=0);for(n=k-1;i>u;){if(l[--i]0?(c=s,r=f):(a=-a,r=u),r.reverse();a--;r.push(0));r.reverse()}for(a=u.length,n=f.length,0>a-n&&(r=f,f=u,u=r,n=a),a=0;n;)a=(u[--n]=u[n]+f[n]+a)/k|0,u[n]%=k;return a&&(u.unshift(a),++c),N(t,u,c)},R.precision=R.sd=function(t){var e,n,r=this,o=r.c;if(null!=t&&t!==!!t&&1!==t&&0!==t&&(W&&D(13,"argument"+b,t),t!=!!t&&(t=null)),!o)return null;if(n=o.length-1,e=n*B+1,n=o[n]){for(;n%10==0;n/=10,e--);for(n=o[0];n>=10;n/=10,e++);}return t&&r.e+1>e&&(e=r.e+1),e},R.round=function(t,n){var r=new e(this);return(null==t||J(t,0,F,15))&&P(r,~~t+this.e+1,null!=n&&J(n,0,8,15,_)?0|n:j),r},R.shift=function(t){var n=this;return J(t,-S,S,16,"argument")?n.times("1e"+l(t)):new e(n.c&&n.c[0]&&(-S>t||t>S)?n.s*(0>t?0:1/0):n)},R.squareRoot=R.sqrt=function(){var t,n,r,a,s,c=this,u=c.c,f=c.s,p=c.e,l=H+4,h=new e("0.5");if(1!==f||!u||!u[0])return new e(!f||0>f&&(!u||u[0])?NaN:u?c:1/0);if(f=Math.sqrt(+c),0==f||f==1/0?(n=i(u),(n.length+p)%2==0&&(n+="0"),f=Math.sqrt(n),p=o((p+1)/2)-(0>p||p%2),f==1/0?n="1e"+p:(n=f.toExponential(),n=n.slice(0,n.indexOf("e")+1)+p),r=new e(n)):r=new e(f+""),r.c[0])for(p=r.e,f=p+l,3>f&&(f=0);;)if(s=r,r=h.times(s.plus(T(c,s,l,1))),i(s.c).slice(0,f)===(n=i(r.c)).slice(0,f)){if(r.ef&&(y=_,_=w,w=y,a=f,f=h,h=a),a=f+h,y=[];a--;y.push(0));for(g=k,v=C,a=h;--a>=0;){for(r=0,d=w[a]%v,m=w[a]/v|0,c=f,s=a+c;s>a;)p=_[--c]%v,l=_[c]/v|0,u=m*p+l*d,p=d*p+u%v*v+y[s]+r,r=(p/g|0)+(u/v|0)+m*l,y[s--]=p%g;y[s]=r}return r?++i:y.shift(),N(t,y,i)},R.toDigits=function(t,n){var r=new e(this);return t=null!=t&&J(t,1,F,18,"precision")?0|t:null,n=null!=n&&J(n,0,8,18,_)?0|n:j,t?P(r,t,n):r},R.toExponential=function(t,e){return h(this,null!=t&&J(t,0,F,19)?~~t+1:null,e,19)},R.toFixed=function(t,e){return h(this,null!=t&&J(t,0,F,20)?~~t+this.e+1:null,e,20)},R.toFormat=function(t,e){var n=h(this,null!=t&&J(t,0,F,21)?~~t+this.e+1:null,e,21);if(this.c){var r,o=n.split("."),i=+K.groupSize,a=+K.secondaryGroupSize,s=K.groupSeparator,c=o[0],u=o[1],f=this.s<0,p=f?c.slice(1):c,l=p.length;if(a&&(r=i,i=a,a=r,l-=r),i>0&&l>0){for(r=l%i||i,c=p.substr(0,r);l>r;r+=i)c+=s+p.substr(r,i);a>0&&(c+=s+p.slice(r)),f&&(c="-"+c)}n=u?c+K.decimalSeparator+((a=+K.fractionGroupSize)?u.replace(new RegExp("\\d{"+a+"}\\B","g"),"$&"+K.fractionGroupSeparator):u):c}return n},R.toFraction=function(t){var n,r,o,a,s,c,u,f,p,l=W,h=this,d=h.c,m=new e(M),y=r=new e(M),g=u=new e(M);if(null!=t&&(W=!1,c=new e(t),W=l,(!(l=c.isInt())||c.lt(M))&&(W&&D(22,"max denominator "+(l?"out of range":"not an integer"),t),t=!l&&c.c&&P(c,c.e+1,1).gte(M)?c:null)),!d)return h.toString();for(p=i(d),a=m.e=p.length-h.e-1,m.c[0]=A[(s=a%B)<0?B+s:s],t=!t||c.cmp(m)>0?a>0?m:y:c,s=U,U=1/0,c=new e(p),u.c[0]=0;f=T(c,m,0,1),o=r.plus(f.times(g)),1!=o.cmp(t);)r=g,g=o,y=u.plus(f.times(o=y)),u=o,m=c.minus(f.times(o=m)),c=o;return o=T(t.minus(r),g,0,1),u=u.plus(o.times(y)),r=r.plus(o.times(g)),u.s=y.s=h.s,a*=2,n=T(y,g,a,j).minus(h).abs().cmp(T(u,r,a,j).minus(h).abs())<1?[y.toString(),g.toString()]:[u.toString(),r.toString()],U=s,n},R.toNumber=function(){var t=this;return+t||(t.s?0*t.s:NaN)},R.toPower=R.pow=function(t){var n,r,o=v(0>t?-t:+t),i=this;if(!J(t,-S,S,23,"exponent")&&(!isFinite(t)||o>S&&(t/=0)||parseFloat(t)!=t&&!(t=NaN)))return new e(Math.pow(+i,t));for(n=$?g($/B+2):0,r=new e(M);;){if(o%2){if(r=r.times(i),!r.c)break;n&&r.c.length>n&&(r.c.length=n)}if(o=v(o/2),!o)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>t&&(r=M.div(r)),n?P(r,$,j):r},R.toPrecision=function(t,e){return h(this,null!=t&&J(t,1,F,24,"precision")?0|t:null,e,24)},R.toString=function(t){var e,r=this,o=r.s,a=r.e;return null===a?o?(e="Infinity",0>o&&(e="-"+e)):e="NaN":(e=i(r.c),e=null!=t&&J(t,2,64,25,"base")?n(p(e,a),0|t,10,o):q>=a||a>=L?f(e,a):p(e,a),0>o&&r.c[0]&&(e="-"+e)),e},R.truncated=R.trunc=function(){return P(new e(this),this.e+1,1)},R.valueOf=R.toJSON=function(){return this.toString()},null!=t&&e.config(t),e}function o(t){var e=0|t;return t>0||t===e?e:e-1}function i(t){for(var e,n,r=1,o=t.length,i=t[0]+"";o>r;){for(e=t[r++]+"",n=B-e.length;n--;e="0"+e);i+=e}for(o=i.length;48===i.charCodeAt(--o););return i.slice(0,o+1||1)}function a(t,e){var n,r,o=t.c,i=e.c,a=t.s,s=e.s,c=t.e,u=e.e;if(!a||!s)return null;if(n=o&&!o[0],r=i&&!i[0],n||r)return n?r?0:-s:a;if(a!=s)return a;if(n=0>a,r=c==u,!o||!i)return r?0:!o^n?1:-1;if(!r)return c>u^n?1:-1;for(s=(c=o.length)<(u=i.length)?c:u,a=0;s>a;a++)if(o[a]!=i[a])return o[a]>i[a]^n?1:-1;return c==u?0:c>u^n?1:-1}function s(t,e,n){return(t=l(t))>=e&&n>=t}function c(t){return"[object Array]"==Object.prototype.toString.call(t)}function u(t,e,n){for(var r,o,i=[0],a=0,s=t.length;s>a;){for(o=i.length;o--;i[o]*=e);for(i[r=0]+=x.indexOf(t.charAt(a++));rn-1&&(null==i[r+1]&&(i[r+1]=0),i[r+1]+=i[r]/n|0,i[r]%=n)}return i.reverse()}function f(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(0>e?"e":"e+")+e}function p(t,e){var n,r;if(0>e){for(r="0.";++e;r+="0");t=r+t}else if(n=t.length,++e>n){for(r="0",e-=n;--e;r+="0");t+=r}else n>e&&(t=t.slice(0,e)+"."+t.slice(e));return t}function l(t){return t=parseFloat(t),0>t?g(t):v(t)}var h,d,m,y=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,g=Math.ceil,v=Math.floor,b=" not a boolean or binary digit",_="rounding mode",w="number type has more than 15 significant digits",x="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",k=1e14,B=14,S=9007199254740991,A=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],C=1e7,F=1e9;if(h=r(),"function"==typeof define&&define.amd)define(function(){return h});else if("undefined"!=typeof e&&e.exports){if(e.exports=h,!d)try{d=t("crypto")}catch(I){}}else n.BigNumber=h}(this)},{crypto:49}],web3:[function(t,e,n){var r=t("./lib/web3");"undefined"!=typeof window&&"undefined"==typeof window.Web3&&(window.Web3=r),e.exports=r},{"./lib/web3":22}]},{},["web3"]); \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/example/balance.html b/node_modules/ethereumjs-testrpc/node_modules/web3/example/balance.html deleted file mode 100644 index 2b554a2..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/example/balance.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - -

coinbase balance

- -
-
-
-
-
- - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/example/contract.html b/node_modules/ethereumjs-testrpc/node_modules/web3/example/contract.html deleted file mode 100644 index 88d5af0..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/example/contract.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - -

contract

-
-
-
- -
- -
- - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/example/contract_array.html b/node_modules/ethereumjs-testrpc/node_modules/web3/example/contract_array.html deleted file mode 100644 index 5fe55e7..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/example/contract_array.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - -

contract

-
-
-
- -
- -
- - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/example/event_inc.html b/node_modules/ethereumjs-testrpc/node_modules/web3/example/event_inc.html deleted file mode 100644 index 07c766e..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/example/event_inc.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - -
-
- -
-
- -
-
-
-
- - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/example/icap.html b/node_modules/ethereumjs-testrpc/node_modules/web3/example/icap.html deleted file mode 100644 index 39d7260..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/example/icap.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - -
- This page expects geth with JSON-RPC running at port 8545 - -
-
- namereg address - eg. 0x436474facc88948696b371052a1befb801f003ca or 'default') -
- - -
- - exchange identifier - eg. WYWY -
- - -
- - client identifier - eg. GAVOFYORK -
- - -
- - value - eg. 100 -
- - -
- - IBAN: -
- - - -
-
- - -
-
-
-
-
-
- transfers -
-
-
    -
    -
    -
    -
    - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/example/namereg.html b/node_modules/ethereumjs-testrpc/node_modules/web3/example/namereg.html deleted file mode 100644 index dad19b5..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/example/namereg.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - This example shows only part of namereg functionalities. Namereg contract is available here - -

    Namereg

    -

    Search for name

    -
    - Address: - - Name: - -
    -

    Search for address

    -
    - Name: - - Address: - -
    -

    Register name

    -
    - Check if name is available: - - -
    -
    - -
    -

    - If you own the name, you can also change the address it points to -
    - Address: - - - Current address : - -
    - - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/example/node-app.js b/node_modules/ethereumjs-testrpc/node_modules/web3/example/node-app.js deleted file mode 100644 index 218e928..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/example/node-app.js +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env node - -var Web3 = require('../index.js'); -var web3 = new Web3(); - -web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); - -var coinbase = web3.eth.coinbase; -console.log(coinbase); - -var balance = web3.eth.getBalance(coinbase); -console.log(balance.toString(10)); - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/gulpfile.js b/node_modules/ethereumjs-testrpc/node_modules/web3/gulpfile.js deleted file mode 100644 index 4a3518d..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/gulpfile.js +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -var version = require('./lib/version.json'); -var path = require('path'); - -var del = require('del'); -var gulp = require('gulp'); -var browserify = require('browserify'); -var jshint = require('gulp-jshint'); -var uglify = require('gulp-uglify'); -var rename = require('gulp-rename'); -var source = require('vinyl-source-stream'); -var exorcist = require('exorcist'); -var bower = require('bower'); -var streamify = require('gulp-streamify'); -var replace = require('gulp-replace'); - -var DEST = path.join(__dirname, 'dist/'); -var src = 'index'; -var dst = 'web3'; -var lightDst = 'web3-light'; - -var browserifyOptions = { - debug: true, - insert_global_vars: false, // jshint ignore:line - detectGlobals: false, - bundleExternal: true -}; - -gulp.task('version', function(){ - gulp.src(['./package.json']) - .pipe(replace(/\"version\"\: \"([\.0-9]*)\"/, '"version": "'+ version.version + '"')) - .pipe(gulp.dest('./')); - gulp.src(['./bower.json']) - .pipe(replace(/\"version\"\: \"([\.0-9]*)\"/, '"version": "'+ version.version + '"')) - .pipe(gulp.dest('./')); - gulp.src(['./package.js']) - .pipe(replace(/version\: \'([\.0-9]*)\'/, "version: '"+ version.version + "'")) - .pipe(gulp.dest('./')); -}); - -gulp.task('bower', ['version'], function(cb){ - bower.commands.install().on('end', function (installed){ - console.log(installed); - cb(); - }); -}); - -gulp.task('lint', [], function(){ - return gulp.src(['./*.js', './lib/*.js']) - .pipe(jshint()) - .pipe(jshint.reporter('default')); -}); - -gulp.task('clean', ['lint'], function(cb) { - del([ DEST ]).then(cb.bind(null, null)); -}); - -gulp.task('light', ['clean'], function () { - return browserify(browserifyOptions) - .require('./' + src + '.js', {expose: 'web3'}) - .ignore('bignumber.js') - .require('./lib/utils/browser-bn.js', {expose: 'bignumber.js'}) // fake bignumber.js - .add('./' + src + '.js') - .bundle() - .pipe(exorcist(path.join( DEST, lightDst + '.js.map'))) - .pipe(source(lightDst + '.js')) - .pipe(gulp.dest( DEST )) - .pipe(streamify(uglify())) - .pipe(rename(lightDst + '.min.js')) - .pipe(gulp.dest( DEST )); -}); - -gulp.task('standalone', ['clean'], function () { - return browserify(browserifyOptions) - .require('./' + src + '.js', {expose: 'web3'}) - .require('bignumber.js') // expose it to dapp users - .add('./' + src + '.js') - .ignore('crypto') - .bundle() - .pipe(exorcist(path.join( DEST, dst + '.js.map'))) - .pipe(source(dst + '.js')) - .pipe(gulp.dest( DEST )) - .pipe(streamify(uglify())) - .pipe(rename(dst + '.min.js')) - .pipe(gulp.dest( DEST )); -}); - -gulp.task('watch', function() { - gulp.watch(['./lib/*.js'], ['lint', 'build']); -}); - -gulp.task('default', ['version', 'lint', 'clean', 'light', 'standalone']); - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/index.js b/node_modules/ethereumjs-testrpc/node_modules/web3/index.js deleted file mode 100644 index badd4d5..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/index.js +++ /dev/null @@ -1,8 +0,0 @@ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/GlobalRegistrar.json b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/GlobalRegistrar.json deleted file mode 100644 index 928e05f..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/GlobalRegistrar.json +++ /dev/null @@ -1,254 +0,0 @@ -[ - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "name", - "outputs": [ - { - "name": "o_name", - "type": "bytes32" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "content", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "addr", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "reserve", - "outputs": [], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "subRegistrar", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_newOwner", - "type": "address" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_registrar", - "type": "address" - } - ], - "name": "setSubRegistrar", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "Registrar", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_a", - "type": "address" - }, - { - "name": "_primary", - "type": "bool" - } - ], - "name": "setAddress", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_content", - "type": "bytes32" - } - ], - "name": "setContent", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "disown", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_name", - "type": "bytes32" - }, - { - "indexed": false, - "name": "_winner", - "type": "address" - } - ], - "name": "AuctionEnded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_name", - "type": "bytes32" - }, - { - "indexed": false, - "name": "_bidder", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "NewBid", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - } - ], - "name": "Changed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - }, - { - "indexed": true, - "name": "addr", - "type": "address" - } - ], - "name": "PrimaryChanged", - "type": "event" - } -] diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/ICAPRegistrar.json b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/ICAPRegistrar.json deleted file mode 100644 index 429845d..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/ICAPRegistrar.json +++ /dev/null @@ -1,108 +0,0 @@ -[ - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_refund", - "type": "address" - } - ], - "name": "disown", - "outputs": [], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "addr", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "reserve", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_newOwner", - "type": "address" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_a", - "type": "address" - } - ], - "name": "setAddr", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - } - ], - "name": "Changed", - "type": "event" - } -] diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/SmartExchange.json b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/SmartExchange.json deleted file mode 100644 index c0881d4..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/contracts/SmartExchange.json +++ /dev/null @@ -1,146 +0,0 @@ -[ - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "bytes32" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "bytes32" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "indirectId", - "type": "bytes32" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "icapTransfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "bytes32" - } - ], - "name": "deposit", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "AnonymousDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "bytes32" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "bytes32" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "bytes32" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "indirectId", - "type": "bytes32" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "IcapTransfer", - "type": "event" - } -] diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/address.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/address.js deleted file mode 100644 index e734549..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/address.js +++ /dev/null @@ -1,31 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeAddress is a prootype that represents address type - * It matches: - * address - * address[] - * address[4] - * address[][] - * address[3][] - * address[][6][], ... - */ -var SolidityTypeAddress = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputAddress; -}; - -SolidityTypeAddress.prototype = new SolidityType({}); -SolidityTypeAddress.prototype.constructor = SolidityTypeAddress; - -SolidityTypeAddress.prototype.isType = function (name) { - return !!name.match(/address(\[([0-9]*)\])?/); -}; - -SolidityTypeAddress.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeAddress; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/bool.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/bool.js deleted file mode 100644 index cdc0439..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/bool.js +++ /dev/null @@ -1,30 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeBool is a prootype that represents bool type - * It matches: - * bool - * bool[] - * bool[4] - * bool[][] - * bool[3][] - * bool[][6][], ... - */ -var SolidityTypeBool = function () { - this._inputFormatter = f.formatInputBool; - this._outputFormatter = f.formatOutputBool; -}; - -SolidityTypeBool.prototype = new SolidityType({}); -SolidityTypeBool.prototype.constructor = SolidityTypeBool; - -SolidityTypeBool.prototype.isType = function (name) { - return !!name.match(/^bool(\[([0-9]*)\])*$/); -}; - -SolidityTypeBool.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeBool; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/bytes.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/bytes.js deleted file mode 100644 index 92dfb0c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/bytes.js +++ /dev/null @@ -1,38 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeBytes is a prootype that represents bytes type - * It matches: - * bytes - * bytes[] - * bytes[4] - * bytes[][] - * bytes[3][] - * bytes[][6][], ... - * bytes32 - * bytes64[] - * bytes8[4] - * bytes256[][] - * bytes[3][] - * bytes64[][6][], ... - */ -var SolidityTypeBytes = function () { - this._inputFormatter = f.formatInputBytes; - this._outputFormatter = f.formatOutputBytes; -}; - -SolidityTypeBytes.prototype = new SolidityType({}); -SolidityTypeBytes.prototype.constructor = SolidityTypeBytes; - -SolidityTypeBytes.prototype.isType = function (name) { - return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/); -}; - -SolidityTypeBytes.prototype.staticPartLength = function (name) { - var matches = name.match(/^bytes([0-9]*)/); - var size = parseInt(matches[1]); - return size * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeBytes; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/coder.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/coder.js deleted file mode 100644 index 76ef926..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/coder.js +++ /dev/null @@ -1,260 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/dynamicbytes.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/dynamicbytes.js deleted file mode 100644 index baa1839..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/dynamicbytes.js +++ /dev/null @@ -1,25 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/formatters.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/formatters.js deleted file mode 100644 index ac37e04..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/formatters.js +++ /dev/null @@ -1,250 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/int.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/int.js deleted file mode 100644 index 4fa4170..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/int.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/param.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/param.js deleted file mode 100644 index e06b592..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/param.js +++ /dev/null @@ -1,152 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/real.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/real.js deleted file mode 100644 index 3433224..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/real.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/string.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/string.js deleted file mode 100644 index f7648d9..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/string.js +++ /dev/null @@ -1,25 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/type.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/type.js deleted file mode 100644 index 0ce5dab..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/type.js +++ /dev/null @@ -1,245 +0,0 @@ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/uint.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/uint.js deleted file mode 100644 index 9ac8011..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/uint.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/ureal.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/ureal.js deleted file mode 100644 index 63d2e31..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/solidity/ureal.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/browser-bn.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/browser-bn.js deleted file mode 100644 index 30aabb2..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/browser-bn.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -module.exports = BigNumber; // jshint ignore:line - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/browser-xhr.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/browser-xhr.js deleted file mode 100644 index 5d45d72..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/browser-xhr.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/config.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/config.js deleted file mode 100644 index 5c16262..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/config.js +++ /dev/null @@ -1,79 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/sha3.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/sha3.js deleted file mode 100644 index a7ce60a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/sha3.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/utils.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/utils.js deleted file mode 100644 index c8fb1a6..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/utils/utils.js +++ /dev/null @@ -1,597 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/version.json b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/version.json deleted file mode 100644 index 2c203cd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "0.16.0" -} diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3.js deleted file mode 100644 index 285e87f..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3.js +++ /dev/null @@ -1,146 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; - - -Web3.prototype.sha3 = function(string, options) { - return '0x' + sha3(string, options); -}; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/allevents.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/allevents.js deleted file mode 100644 index 79416f5..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/allevents.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/batch.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/batch.js deleted file mode 100644 index acb6336..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/batch.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/contract.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/contract.js deleted file mode 100644 index aa65cc6..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/contract.js +++ /dev/null @@ -1,298 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/contract_.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/contract_.js deleted file mode 100644 index 614abcd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/contract_.js +++ /dev/null @@ -1,338 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - this.deploy.getData = this.getData.bind(this); -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - -/** - * Should be called to create new contract on a blockchain - * - * @method deploy - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ -ContractFactory.prototype.deploy = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; -}; - - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Object} eth - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; - console.log(this); -}; - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = Contract.bind(null, 'test');//function (address, callback) { -// var contract = new Contract(this.eth, this.abi, address); - -// // this functions are not part of prototype, -// // because we dont want to spoil the interface -// addFunctionsToContract(contract); -// addEventsToContract(contract); - -// if (callback) { -// callback(null, contract); -// } -// return contract; -// }; - - - -/* - -new web3.eth.contract(abi, address) -eventemitter = web3.eth.contract.deploy(param1, {data: '0x23456'}); -eventEmitter.on('mined', function(err, address){ -    new web3.eth.contract(abi, address) - }); -eventEmitter.on('transactionHash', function(err, hash){ - - }); -web3.eth.contract.getData(abi, param1, {data: '0x23456'}) -> 0x23456780000005345345 -myContrac.myMethod(param1) -myContrac.myMethod.getData(param1) - -Or - -var myContrac = new web3.eth.contract(abi, address) -eventemitter = new web3.eth.contract(abi).deploy(param1, {data: '0x23456'}); -eventEmitter.on('mined', function(err, address){ -    new web3.eth.contract(abi, address) - }); -eventEmitter.on('transactionHash', function(err, hash){ - - }); -new web3.eth.contract(abi).deploy.getData(param1, {data: '0x23456'}) -> 0x23456780000005345345 -myContrac.myMethod(param1) -myContrac.myMethod.getData(param1) - -var myContrac2 = new web3.eth.contract(abi) -myContrac2.address = '0x12345678...'; - -*/ - - -module.exports = ContractFactory; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/errors.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/errors.js deleted file mode 100644 index 7b66f7d..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/errors.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/event.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/event.js deleted file mode 100644 index c9b2a6c..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/event.js +++ /dev/null @@ -1,208 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/extend.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/extend.js deleted file mode 100644 index 55ad7dc..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/extend.js +++ /dev/null @@ -1,48 +0,0 @@ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/filter.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/filter.js deleted file mode 100644 index 5db6734..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/filter.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.filterId); - // remove filter async - this.implementation.uninstallFilter(this.filterId, function(){}); - this.callbacks = []; -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/formatters.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/formatters.js deleted file mode 100644 index ac166cc..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/formatters.js +++ /dev/null @@ -1,299 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw new Error('invalid address'); -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/function.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/function.js deleted file mode 100644 index d771514..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/function.js +++ /dev/null @@ -1,247 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/httpprovider.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/httpprovider.js deleted file mode 100644 index aafa5b6..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/httpprovider.js +++ /dev/null @@ -1,146 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// meteor server environment -if (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line - XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line - -// browser -} else if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/iban.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/iban.js deleted file mode 100644 index ea57f4d..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/iban.js +++ /dev/null @@ -1,227 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '00' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/ipcprovider.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/ipcprovider.js deleted file mode 100644 index 4dc46c1..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/ipcprovider.js +++ /dev/null @@ -1,207 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/jsonrpc.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/jsonrpc.js deleted file mode 100644 index d6c0615..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/jsonrpc.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = function () { - // singleton pattern - if (arguments.callee._singletonInstance) { - return arguments.callee._singletonInstance; - } - arguments.callee._singletonInstance = this; - - this.messageId = 1; -}; - -/** - * @return {Jsonrpc} singleton - */ -Jsonrpc.getInstance = function () { - var instance = new Jsonrpc(); - return instance; -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.prototype.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - return { - jsonrpc: '2.0', - method: method, - params: params || [], - id: this.messageId++ - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.prototype.isValidResponse = function (response) { - return !!response && - !response.error && - response.jsonrpc === '2.0' && - typeof response.id === 'number' && - response.result !== undefined; // only undefined is not valid json object -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.prototype.toBatchPayload = function (messages) { - var self = this; - return messages.map(function (message) { - return self.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/method.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/method.js deleted file mode 100644 index ebedd02..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/method.js +++ /dev/null @@ -1,165 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/db.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/db.js deleted file mode 100644 index 4b63960..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/db.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/eth.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/eth.js deleted file mode 100644 index 5b44528..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/eth.js +++ /dev/null @@ -1,343 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/net.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/net.js deleted file mode 100644 index 0fdb852..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/net.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/personal.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/personal.js deleted file mode 100644 index 6ea2b76..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/personal.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); -var formatters = require('../formatters'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [formatters.inputAddressFormatter, null, null] - }); - - var lockAccount = new Method({ - name: 'lockAccount', - call: 'personal_lockAccount', - params: 1, - inputFormatter: [formatters.inputAddressFormatter] - }); - - return [ - newAccount, - unlockAccount, - lockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/shh.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/shh.js deleted file mode 100644 index a3c51f1..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/shh.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/watches.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/watches.js deleted file mode 100644 index 23c7542..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/methods/watches.js +++ /dev/null @@ -1,114 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/namereg.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/namereg.js deleted file mode 100644 index d06ecbe..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/namereg.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/property.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/property.js deleted file mode 100644 index bb791c9..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/property.js +++ /dev/null @@ -1,144 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/requestmanager.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/requestmanager.js deleted file mode 100644 index 3f9c6a0..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/requestmanager.js +++ /dev/null @@ -1,265 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.getInstance().toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.getInstance().isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/settings.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/settings.js deleted file mode 100644 index 4999235..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/settings.js +++ /dev/null @@ -1,9 +0,0 @@ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/syncing.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/syncing.js deleted file mode 100644 index c81c3e1..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/syncing.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/transfer.js b/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/transfer.js deleted file mode 100644 index 6a0d081..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/lib/web3/transfer.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/.npmignore b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/.npmignore deleted file mode 100644 index 2d18542..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -test -perf -coverage - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/.travis.yml b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/.travis.yml deleted file mode 100644 index 3f920bb..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "0.12" - - "0.11" - - "0.10" - - "0.8" - - "0.6" - - iojs diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/LICENCE b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/LICENCE deleted file mode 100644 index a5d1b40..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/LICENCE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT Expat Licence. - -Copyright (c) 2012 Michael Mclaughlin - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/README.md b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/README.md deleted file mode 100644 index 9ffcbfd..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/README.md +++ /dev/null @@ -1,326 +0,0 @@ -![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png) - -A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic. - -[![Build Status](https://travis-ci.org/MikeMcl/bignumber.js.svg)](https://travis-ci.org/MikeMcl/bignumber.js) - -
    - -## Features - - - Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal - - 8 KB minified and gzipped - - Simple API but full-featured - - Works with numbers with or without fraction digits in bases from 2 to 64 inclusive - - Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type - - Includes a `toFraction` and a correctly-rounded `squareRoot` method - - Supports cryptographically-secure pseudo-random number generation - - No dependencies - - Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only - - Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set - -![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png) - -If a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/). -It's less than half the size but only works with decimal numbers and only has half the methods. -It also does not allow `NaN` or `Infinity`, or have the configuration options of this library. - -See also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits. - -## Load - -The library is the single JavaScript file *bignumber.js* (or minified, *bignumber.min.js*). - -```html - -``` - -For [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry - - $ npm install bignumber.js - -```javascript -var BigNumber = require('bignumber.js'); -``` - -To load with AMD loader libraries such as [requireJS](http://requirejs.org/): - -```javascript -require(['path/to/bignumber'], function(BigNumber) { - // Use BigNumber here in local scope. No global BigNumber. -}); -``` - -## Use - -*In all examples below, `var`, semicolons and `toString` calls are not shown. -If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* - -The library exports a single function: `BigNumber`, the constructor of BigNumber instances. - -It accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object, - -```javascript -x = new BigNumber(123.4567) -y = BigNumber('123456.7e-3') -z = new BigNumber(x) -x.equals(y) && y.equals(z) && x.equals(z) // true -``` - - -and a base from 2 to 64 inclusive can be specified. - -```javascript -x = new BigNumber(1011, 2) // "11" -y = new BigNumber('zz.9', 36) // "1295.25" -z = x.plus(y) // "1306.25" -``` - -A BigNumber is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new BigNumber(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a BigNumber can be chained. - -```javascript -x.dividedBy(y).plus(z).times(9).floor() -x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil() -``` - -Many method names have a shorter alias. - -```javascript -x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true -x.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true -``` - -Like JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods - -```javascript -x = new BigNumber(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -x.toNumber() // 255.5 -``` - - and a base can be specified for `toString`. - - ```javascript - x.toString(16) // "ff.8" - ``` - -There is also a `toFormat` method which may be useful for internationalisation - -```javascript -y = new BigNumber('1234567.898765') -y.toFormat(2) // "1,234,567.90" -``` - -The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor. - -The other arithmetic operations always give the exact result. - -```javascript -BigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) -// Alternatively, BigNumber.config( 10, 4 ); - -x = new BigNumber(2); -y = new BigNumber(3); -z = x.div(y) // "0.6666666667" -z.sqrt() // "0.8164965809" -z.pow(-3) // "3.3749999995" -z.toString(2) // "0.1010101011" -z.times(z) // "0.44444444448888888889" -z.times(z).round(10) // "0.4444444445" -``` - -There is a `toFraction` method with an optional *maximum denominator* argument - -```javascript -y = new BigNumber(355) -pi = y.dividedBy(113) // "3.1415929204" -pi.toFraction() // [ "7853982301", "2500000000" ] -pi.toFraction(1000) // [ "355", "113" ] -``` - -and `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values. - -```javascript -x = new BigNumber(NaN) // "NaN" -y = new BigNumber(Infinity) // "Infinity" -x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true -``` - -The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - - -```javascript -x = new BigNumber(-123.456); -x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - - -Multiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it. - -```javascript -// Set DECIMAL_PLACES for the original BigNumber constructor -BigNumber.config({ DECIMAL_PLACES: 10 }) - -// Create another BigNumber constructor, optionally passing in a configuration object -BN = BigNumber.another({ DECIMAL_PLACES: 5 }) - -x = new BigNumber(1) -y = new BN(1) - -x.div(3) // '0.3333333333' -y.div(3) // '0.33333' -``` - -For futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. - -## Test - -The *test* directory contains the test scripts for each method. - -The tests can be run with Node or a browser. For Node use - - $ npm test - -or - - $ node test/every-test - -To test a single method, e.g. - - $ node test/toFraction - -For the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. - -*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. - -## Versions - -This is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported. - -## Performance - -See the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory. - -## Build - -For Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed - - npm install uglify-js -g - -then - - npm run build - -will create *bignumber.min.js*. - -A source map will also be created in the root directory. - -## Feedback - -Open an issue, or email - -Michael - -M8ch88l@gmail.com - -## Licence - -MIT. - -See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE). - -## Change Log - -####2.0.6 -* 31/03/2015 -* Add bower.json. Tweak division after in-depth review. - -####2.0.5 -* 25/03/2015 -* Amend README. Remove bitcoin address. - -####2.0.4 -* 25/03/2015 -* Critical bugfix #58: division. - -####2.0.3 -* 18/02/2015 -* Amend README. Add source map. - -####2.0.2 -* 18/02/2015 -* Correct links. - -####2.0.1 -* 18/02/2015 -* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods. -* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. -* Add an `another` method to enable multiple independent constructors to be created. -* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. -* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. -* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. -* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. -* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. -* Improve code quality. -* Improve documentation. - -####2.0.0 -* 29/12/2014 -* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. -* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. -* Store a BigNumber's coefficient in base 1e14, rather than base 10. -* Add fast path for integers to BigNumber constructor. -* Incorporate the library into the online documentation. - -####1.5.0 -* 13/11/2014 -* Add `toJSON` and `decimalPlaces` methods. - -####1.4.1 -* 08/06/2014 -* Amend README. - -####1.4.0 -* 08/05/2014 -* Add `toNumber`. - -####1.3.0 -* 08/11/2013 -* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. -* Maximum radix to 64. - -####1.2.1 -* 17/10/2013 -* Sign of zero when x < 0 and x + (-x) = 0. - -####1.2.0 -* 19/9/2013 -* Throw Error objects for stack. - -####1.1.1 -* 22/8/2013 -* Show original value in constructor error message. - -####1.1.0 -* 1/8/2013 -* Allow numbers with trailing radix point. - -####1.0.1 -* Bugfix: error messages with incorrect method name - -####1.0.0 -* 8/11/2012 -* Initial release diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.js b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.js deleted file mode 100644 index d14e7a0..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.js +++ /dev/null @@ -1,2683 +0,0 @@ -/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.7 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor( base / ( yc[0] + 1 ) ); - - // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1. - // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) { - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder. - // Trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while ( compare( prod, rem, prodL, remL ) == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if ( n == 0 ) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while ( compare( yc, rem, yL, remL ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.js.map b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.js.map deleted file mode 100644 index d64b533..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bignumber.min.js","sources":["bignumber.js"],"names":["global","another","configObj","BigNumber","n","b","c","e","i","num","len","str","x","this","ERRORS","raise","isValidInt","id","round","DECIMAL_PLACES","ROUNDING_MODE","RegExp","ALPHABET","slice","test","parseNumeric","s","replace","length","tooManyDigits","charCodeAt","convertBase","isNumeric","indexOf","search","substring","MAX_EXP","MIN_EXP","LOG_BASE","push","baseOut","baseIn","sign","d","k","r","xc","y","dp","rm","toLowerCase","POW_PRECISION","pow","toBaseOut","toFixedPoint","coeffToString","pop","div","unshift","charAt","format","caller","c0","ne","roundingMode","toString","TO_EXP_NEG","toExponential","maxOrMin","args","method","m","isArray","call","intValidatorWithErrors","min","max","name","truncate","normalise","j","msg","val","error","Error","sd","ni","rd","pows10","POWS_TEN","out","mathceil","mathfloor","BASE","P","prototype","ONE","TO_EXP_POS","CRYPTO","MODULO_MODE","FORMAT","decimalSeparator","groupSeparator","groupSize","secondaryGroupSize","fractionGroupSeparator","fractionGroupSize","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","v","p","a","arguments","o","has","hasOwnProperty","MAX","intValidatorNoErrors","notBool","crypto","lt","gt","random","pow2_53","random53bitInt","Math","rand","getRandomValues","Uint32Array","randomBytes","copy","shift","multiply","base","temp","xlo","xhi","carry","klo","SQRT_BASE","khi","compare","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","yc","NaN","bitFloor","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","isNaN","p1","p2","absoluteValue","abs","ceil","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","divToInt","equals","eq","floor","greaterThan","greaterThanOrEqualTo","gte","isFinite","isInteger","isInt","isNegative","isNeg","isZero","lessThan","lessThanOrEqualTo","lte","minus","sub","t","xLTy","plus","xe","ye","reverse","modulo","mod","times","negated","neg","add","precision","z","MAX_SAFE_INTEGER","squareRoot","sqrt","rep","half","mul","xcL","ycL","ylo","yhi","zc","sqrtBase","toDigits","toFixed","toFormat","arr","split","g1","g2","intPart","fractionPart","intDigits","substr","toFraction","md","d0","d2","exp","n0","n1","d1","toNumber","toPower","parseFloat","toPrecision","truncated","trunc","valueOf","toJSON","l","obj","Object","arrL","define","amd","module","exports","require"],"mappings":";CAEC,SAAWA,GACR,YAqCA,SAASC,GAAQC,GAiHb,QAASC,GAAWC,EAAGC,GACnB,GAAIC,GAAGC,EAAGC,EAAGC,EAAKC,EAAKC,EACnBC,EAAIC,IAGR,MAAQD,YAAaT,IAIjB,MADIW,IAAQC,EAAO,GAAI,+BAAgCX,GAChD,GAAID,GAAWC,EAAGC,EAK7B,IAAU,MAALA,GAAcW,EAAYX,EAAG,EAAG,GAAIY,EAAI,QA4BtC,CAMH,GALAZ,EAAQ,EAAJA,EACJM,EAAMP,EAAI,GAIA,IAALC,EAED,MADAO,GAAI,GAAIT,GAAWC,YAAaD,GAAYC,EAAIO,GACzCO,EAAON,EAAGO,EAAiBP,EAAEL,EAAI,EAAGa,EAK/C,KAAOX,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,IAC7C,GAAMiB,QAAQ,OAAUf,EAAI,IAAMgB,EAASC,MAAO,EAAGlB,GAAM,MAC1D,SAAWC,EAAI,MAAU,GAAJD,EAAS,IAAM,IAAOmB,KAAKb,GAChD,MAAOc,GAAcb,EAAGD,EAAKF,EAAKJ,EAGlCI,IACAG,EAAEc,EAAY,EAAR,EAAItB,GAAUO,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAE1CT,GAAUH,EAAIgB,QAAS,YAAa,IAAKC,OAAS,IAGnDb,EAAOE,EAAIY,EAAezB,GAI9BK,GAAM,GAENG,EAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAGlEZ,EAAMoB,EAAapB,EAAK,GAAIN,EAAGO,EAAEc,OA9DmB,CAGpD,GAAKtB,YAAaD,GAKd,MAJAS,GAAEc,EAAItB,EAAEsB,EACRd,EAAEL,EAAIH,EAAEG,EACRK,EAAEN,GAAMF,EAAIA,EAAEE,GAAMF,EAAEmB,QAAUnB,OAChCa,EAAK,EAIT,KAAOR,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,EAAI,CAIhD,GAHAQ,EAAEc,EAAY,EAAR,EAAItB,GAAUA,GAAKA,EAAG,IAAO,EAG9BA,MAAQA,EAAI,CACb,IAAMG,EAAI,EAAGC,EAAIJ,EAAGI,GAAK,GAAIA,GAAK,GAAID,KAItC,MAHAK,GAAEL,EAAIA,EACNK,EAAEN,GAAKF,QACPa,EAAK,GAITN,EAAMP,EAAI,OACP,CACH,IAAM4B,EAAUR,KAAMb,EAAMP,EAAI,IAAO,MAAOqB,GAAcb,EAAGD,EAAKF,EACpEG,GAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,GAwDtE,KAhBOhB,EAAII,EAAIsB,QAAQ,MAAS,KAAKtB,EAAMA,EAAIgB,QAAS,IAAK,MAGtDnB,EAAIG,EAAIuB,OAAQ,OAAW,GAGrB,EAAJ3B,IAAQA,EAAIC,GACjBD,IAAMI,EAAIY,MAAOf,EAAI,GACrBG,EAAMA,EAAIwB,UAAW,EAAG3B,IACZ,EAAJD,IAGRA,EAAII,EAAIiB,QAINpB,EAAI,EAAyB,KAAtBG,EAAImB,WAAWtB,GAAWA,KAGvC,IAAME,EAAMC,EAAIiB,OAAkC,KAA1BjB,EAAImB,aAAapB,KAGzC,GAFAC,EAAMA,EAAIY,MAAOf,EAAGE,EAAM,GAYtB,GATAA,EAAMC,EAAIiB,OAILnB,GAAOK,GAAUJ,EAAM,IAAKK,EAAOE,EAAIY,EAAejB,EAAEc,EAAItB,GAEjEG,EAAIA,EAAIC,EAAI,EAGPD,EAAI6B,EAGLxB,EAAEN,EAAIM,EAAEL,EAAI,SAGT,IAAS8B,EAAJ9B,EAGRK,EAAEN,GAAMM,EAAEL,EAAI,OACX,CAWH,GAVAK,EAAEL,EAAIA,EACNK,EAAEN,KAMFE,GAAMD,EAAI,GAAM+B,EACP,EAAJ/B,IAAQC,GAAK8B,GAET5B,EAAJF,EAAU,CAGX,IAFIA,GAAGI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAO,EAAGf,IAE1BE,GAAO4B,EAAc5B,EAAJF,GACnBI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAOf,EAAGA,GAAK8B,GAGlC3B,GAAMA,EAAIY,MAAMf,GAChBA,EAAI8B,EAAW3B,EAAIiB,WAEnBpB,IAAKE,CAGT,MAAQF,IAAKG,GAAO,KACpBC,EAAEN,EAAEiC,MAAO5B,OAKfC,GAAEN,GAAMM,EAAEL,EAAI,EAGlBU,GAAK,EAgVT,QAASc,GAAapB,EAAK6B,EAASC,EAAQC,GACxC,GAAIC,GAAGpC,EAAGqC,EAAGC,EAAGjC,EAAGkC,EAAIC,EACnBvC,EAAIG,EAAIsB,QAAS,KACjBe,EAAK7B,EACL8B,EAAK7B,CA0BT,KAxBc,GAATqB,IAAc9B,EAAMA,EAAIuC,eAGxB1C,GAAK,IACNoC,EAAIO,EAGJA,EAAgB,EAChBxC,EAAMA,EAAIgB,QAAS,IAAK,IACxBoB,EAAI,GAAI5C,GAAUsC,GAClB7B,EAAImC,EAAEK,IAAKzC,EAAIiB,OAASpB,GACxB2C,EAAgBP,EAIhBG,EAAEzC,EAAI+C,EAAWC,EAAcC,EAAe3C,EAAEN,GAAKM,EAAEL,GAAK,GAAIiC,GAChEO,EAAExC,EAAIwC,EAAEzC,EAAEsB,QAIdkB,EAAKO,EAAW1C,EAAK8B,EAAQD,GAC7BjC,EAAIqC,EAAIE,EAAGlB,OAGQ,GAAXkB,IAAKF,GAASE,EAAGU,OACzB,IAAMV,EAAG,GAAK,MAAO,GA2BrB,IAzBS,EAAJtC,IACCD,GAEFK,EAAEN,EAAIwC,EACNlC,EAAEL,EAAIA,EAGNK,EAAEc,EAAIgB,EACN9B,EAAI6C,EAAK7C,EAAGmC,EAAGC,EAAIC,EAAIT,GACvBM,EAAKlC,EAAEN,EACPuC,EAAIjC,EAAEiC,EACNtC,EAAIK,EAAEL,GAGVoC,EAAIpC,EAAIyC,EAAK,EAGbxC,EAAIsC,EAAGH,GACPC,EAAIJ,EAAU,EACdK,EAAIA,GAAS,EAAJF,GAAsB,MAAbG,EAAGH,EAAI,GAEzBE,EAAS,EAALI,GAAgB,MAALzC,GAAaqC,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IACzDlB,EAAIoC,GAAKpC,GAAKoC,IAAY,GAANK,GAAWJ,GAAW,GAANI,GAAuB,EAAZH,EAAGH,EAAI,IACtDM,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAE1B,EAAJiB,IAAUG,EAAG,GAGdnC,EAAMkC,EAAIS,EAAc,KAAMN,GAAO,QAClC,CAGH,GAFAF,EAAGlB,OAASe,EAERE,EAGA,MAAQL,IAAWM,IAAKH,GAAKH,GACzBM,EAAGH,GAAK,EAEFA,MACApC,EACFuC,EAAGY,QAAQ,GAMvB,KAAMd,EAAIE,EAAGlB,QAASkB,IAAKF,KAG3B,IAAMpC,EAAI,EAAGG,EAAM,GAASiC,GAALpC,EAAQG,GAAOW,EAASqC,OAAQb,EAAGtC,OAC1DG,EAAM2C,EAAc3C,EAAKJ,GAI7B,MAAOI,GA4QX,QAASiD,GAAQxD,EAAGI,EAAGyC,EAAIY,GACvB,GAAIC,GAAIvD,EAAGwD,EAAIrD,EAAKC,CAKpB,IAHAsC,EAAW,MAANA,GAAcjC,EAAYiC,EAAI,EAAG,EAAGY,EAAQG,GACxC,EAALf,EAAS7B,GAEPhB,EAAEE,EAAI,MAAOF,GAAE6D,UAIrB,IAHAH,EAAK1D,EAAEE,EAAE,GACTyD,EAAK3D,EAAEG,EAEG,MAALC,EACDG,EAAM4C,EAAenD,EAAEE,GACvBK,EAAgB,IAAVkD,GAA0B,IAAVA,GAAsBK,GAANH,EAClCI,EAAexD,EAAKoD,GACpBT,EAAc3C,EAAKoD,OAevB,IAbA3D,EAAIc,EAAO,GAAIf,GAAUC,GAAII,EAAGyC,GAGhC1C,EAAIH,EAAEG,EAENI,EAAM4C,EAAenD,EAAEE,GACvBI,EAAMC,EAAIiB,OAOK,IAAViC,GAA0B,IAAVA,IAAuBtD,GAALC,GAAe0D,GAAL3D,GAAoB,CAGjE,KAAcC,EAANE,EAASC,GAAO,IAAKD,KAC7BC,EAAMwD,EAAexD,EAAKJ,OAQ1B,IAJAC,GAAKuD,EACLpD,EAAM2C,EAAc3C,EAAKJ,GAGpBA,EAAI,EAAIG,GACT,KAAOF,EAAI,EAAI,IAAMG,GAAO,IAAKH,IAAKG,GAAO,UAG7C,IADAH,GAAKD,EAAIG,EACJF,EAAI,EAEL,IADKD,EAAI,GAAKG,IAAMC,GAAO,KACnBH,IAAKG,GAAO,KAMpC,MAAOP,GAAEsB,EAAI,GAAKoC,EAAK,IAAMnD,EAAMA,EAKvC,QAASyD,GAAUC,EAAMC,GACrB,GAAIC,GAAGnE,EACHI,EAAI,CAKR,KAHKgE,EAASH,EAAK,MAAOA,EAAOA,EAAK,IACtCE,EAAI,GAAIpE,GAAWkE,EAAK,MAEd7D,EAAI6D,EAAKzC,QAAU,CAIzB,GAHAxB,EAAI,GAAID,GAAWkE,EAAK7D,KAGlBJ,EAAEsB,EAAI,CACR6C,EAAInE,CACJ,OACQkE,EAAOG,KAAMF,EAAGnE,KACxBmE,EAAInE,GAIZ,MAAOmE,GAQX,QAASG,GAAwBtE,EAAGuE,EAAKC,EAAKf,EAAQgB,GAMlD,OALSF,EAAJvE,GAAWA,EAAIwE,GAAOxE,GAAK0E,EAAS1E,KACrCW,EAAO8C,GAAUgB,GAAQ,mBACjBF,EAAJvE,GAAWA,EAAIwE,EAAM,gBAAkB,mBAAqBxE,IAG7D,EAQX,QAAS2E,GAAW3E,EAAGE,EAAGC,GAKtB,IAJA,GAAIC,GAAI,EACJwE,EAAI1E,EAAEsB,QAGDtB,IAAI0E,GAAI1E,EAAEkD,OAGnB,IAAMwB,EAAI1E,EAAE,GAAI0E,GAAK,GAAIA,GAAK,GAAIxE,KAkBlC,OAfOD,EAAIC,EAAID,EAAI+B,EAAW,GAAMF,EAGhChC,EAAEE,EAAIF,EAAEG,EAAI,KAGA8B,EAAJ9B,EAGRH,EAAEE,GAAMF,EAAEG,EAAI,IAEdH,EAAEG,EAAIA,EACNH,EAAEE,EAAIA,GAGHF,EAmDX,QAASW,GAAO8C,EAAQoB,EAAKC,GACzB,GAAIC,GAAQ,GAAIC,QACZ,gBACA,MACA,SACA,MACA,WACA,KACA,KACA,MACA,KACA,MACA,QACA,MACA,OACA,YACA,SACA,QACA,QACA,QACA,WACA,gBACA,UACA,WACA,aACA,MACA,cACA,WACA,aACFvB,GAAU,MAAQoB,EAAM,KAAOC,EAIjC,MAFAC,GAAMN,KAAO,kBACb5D,EAAK,EACCkE,EAQV,QAASjE,GAAON,EAAGyE,EAAIpC,EAAIJ,GACvB,GAAIF,GAAGnC,EAAGwE,EAAGpC,EAAGxC,EAAGkF,EAAIC,EACnBzC,EAAKlC,EAAEN,EACPkF,EAASC,CAGb,IAAI3C,EAAI,CAQJ4C,EAAK,CAGD,IAAM/C,EAAI,EAAGC,EAAIE,EAAG,GAAIF,GAAK,GAAIA,GAAK,GAAID,KAI1C,GAHAnC,EAAI6E,EAAK1C,EAGA,EAAJnC,EACDA,GAAK8B,EACL0C,EAAIK,EACJjF,EAAI0C,EAAIwC,EAAK,GAGbC,EAAKnF,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,MAIpC,IAFAM,EAAKK,GAAYnF,EAAI,GAAM8B,GAEtBgD,GAAMxC,EAAGlB,OAAS,CAEnB,IAAIiB,EASA,KAAM6C,EANN,MAAQ5C,EAAGlB,QAAU0D,EAAIxC,EAAGP,KAAK,IACjCnC,EAAImF,EAAK,EACT5C,EAAI,EACJnC,GAAK8B,EACL0C,EAAIxE,EAAI8B,EAAW,MAIpB,CAIH,IAHAlC,EAAIwC,EAAIE,EAAGwC,GAGL3C,EAAI,EAAGC,GAAK,GAAIA,GAAK,GAAID,KAG/BnC,GAAK8B,EAIL0C,EAAIxE,EAAI8B,EAAWK,EAGnB4C,EAAS,EAAJP,EAAQ,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,EAmBxD,GAfAnC,EAAIA,GAAU,EAALwC,GAKO,MAAdvC,EAAGwC,EAAK,KAAoB,EAAJN,EAAQ5E,EAAIA,EAAIoF,EAAQ7C,EAAIqC,EAAI,IAE1DnC,EAAS,EAALI,GACEsC,GAAM1C,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAClD6D,EAAK,GAAW,GAANA,IAAmB,GAANtC,GAAWJ,GAAW,GAANI,IAGnCzC,EAAI,EAAIwE,EAAI,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,GAAM,EAAIlC,EAAGwC,EAAK,IAAO,GAAO,GAClErC,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAElB,EAAL2D,IAAWvC,EAAG,GAiBf,MAhBAA,GAAGlB,OAAS,EAERiB,GAGAwC,GAAMzE,EAAEL,EAAI,EAGZuC,EAAG,GAAK0C,EAAQH,EAAK/C,GACrB1B,EAAEL,GAAK8E,GAAM,GAIbvC,EAAG,GAAKlC,EAAEL,EAAI,EAGXK,CAkBX,IAdU,GAALJ,GACDsC,EAAGlB,OAAS0D,EACZ1C,EAAI,EACJ0C,MAEAxC,EAAGlB,OAAS0D,EAAK,EACjB1C,EAAI4C,EAAQlD,EAAW9B,GAIvBsC,EAAGwC,GAAMN,EAAI,EAAIY,EAAWxF,EAAIoF,EAAQ7C,EAAIqC,GAAMQ,EAAOR,IAAOpC,EAAI,GAIpEC,EAEA,OAAY,CAGR,GAAW,GAANyC,EAAU,CAGX,IAAM9E,EAAI,EAAGwE,EAAIlC,EAAG,GAAIkC,GAAK,GAAIA,GAAK,GAAIxE,KAE1C,IADAwE,EAAIlC,EAAG,IAAMF,EACPA,EAAI,EAAGoC,GAAK,GAAIA,GAAK,GAAIpC,KAG1BpC,GAAKoC,IACNhC,EAAEL,IACGuC,EAAG,IAAM+C,IAAO/C,EAAG,GAAK,GAGjC,OAGA,GADAA,EAAGwC,IAAO1C,EACLE,EAAGwC,IAAOO,EAAO,KACtB/C,GAAGwC,KAAQ,EACX1C,EAAI,EAMhB,IAAMpC,EAAIsC,EAAGlB,OAAoB,IAAZkB,IAAKtC,GAAUsC,EAAGU,QAItC5C,EAAEL,EAAI6B,EACPxB,EAAEN,EAAIM,EAAEL,EAAI,KAGJK,EAAEL,EAAI8B,IACdzB,EAAEN,GAAMM,EAAEL,EAAI,IAItB,MAAOK,GAjzCX,GAAI6C,GAGAxC,EAAK,EACL6E,EAAI3F,EAAU4F,UACdC,EAAM,GAAI7F,GAAU,GAYpBgB,EAAiB,GAejBC,EAAgB,EAMhB8C,EAAa,GAIb+B,EAAa,GAMb5D,EAAU,KAKVD,EAAU,IAGVtB,GAAS,EAGTE,EAAa0D,EAGbwB,GAAS,EAoBTC,EAAc,EAIdhD,EAAgB,IAGhBiD,GACIC,iBAAkB,IAClBC,eAAgB,IAChBC,UAAW,EACXC,mBAAoB,EACpBC,uBAAwB,IACxBC,kBAAmB,EAk0E3B,OA/oEAvG,GAAUF,QAAUA,EAEpBE,EAAUwG,SAAW,EACrBxG,EAAUyG,WAAa,EACvBzG,EAAU0G,WAAa,EACvB1G,EAAU2G,YAAc,EACxB3G,EAAU4G,cAAgB,EAC1B5G,EAAU6G,gBAAkB,EAC5B7G,EAAU8G,gBAAkB,EAC5B9G,EAAU+G,gBAAkB,EAC5B/G,EAAUgH,iBAAmB,EAC7BhH,EAAUiH,OAAS,EAoCnBjH,EAAUkH,OAAS,WACf,GAAIC,GAAGC,EACH/G,EAAI,EACJqC,KACA2E,EAAIC,UACJC,EAAIF,EAAE,GACNG,EAAMD,GAAiB,gBAALA,GACd,WAAc,MAAKA,GAAEE,eAAeL,GAA4B,OAAdD,EAAII,EAAEH,IAA1C,QACd,WAAc,MAAKC,GAAE5F,OAASpB,EAA6B,OAAhB8G,EAAIE,EAAEhH,MAAnC,OA6GtB,OAxGKmH,GAAKJ,EAAI,mBAAsBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KAC1DpG,EAAqB,EAAJmG,GAErBzE,EAAE0E,GAAKpG,EAKFwG,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACvDnG,EAAoB,EAAJkG,GAEpBzE,EAAE0E,GAAKnG,EAMFuG,EAAKJ,EAAI,oBAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,EAAG,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACnErD,EAAoB,EAAPoD,EAAE,GACfrB,EAAoB,EAAPqB,EAAE,IAEXtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KACrCrD,IAAgB+B,EAAkC,GAAf,EAAJqB,GAASA,EAAIA,MAGpDzE,EAAE0E,IAAOrD,EAAY+B,GAOhB0B,EAAKJ,EAAI,WAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,GAAI,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACpElF,EAAiB,EAAPiF,EAAE,GACZlF,EAAiB,EAAPkF,EAAE,IAERtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KAC5B,EAAJD,EAAQjF,IAAaD,EAA+B,GAAf,EAAJkF,GAASA,EAAIA,IAC1CxG,GAAQC,EAAO,EAAGwG,EAAI,kBAAmBD,KAG1DzE,EAAE0E,IAAOlF,EAASD,GAIbuF,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBrG,EAAK,EACLD,GAAeF,IAAWwG,GAAM5C,EAAyBoD,GAClDhH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKzG,EAKF6G,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBpB,KAAaoB,IAAKU,GAA2B,gBAAVA,IAC9BV,IAAMpB,GAAUpF,GAASC,EAAO,EAAG,qBAAsBiH,IACvDlH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKrB,EAKFyB,EAAKJ,EAAI,gBAAmBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACrDpB,EAAkB,EAAJmB,GAElBzE,EAAE0E,GAAKpB,EAKFwB,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KACzDpE,EAAoB,EAAJmE,GAEpBzE,EAAE0E,GAAKpE,EAIFwE,EAAKJ,EAAI,YAEO,gBAALD,GACRlB,EAASkB,EACFxG,GACPC,EAAO,EAAGwG,EAAI,iBAAkBD,IAGxCzE,EAAE0E,GAAKnB,EAEAvD,GASX1C,EAAUyE,IAAM,WAAc,MAAOR,GAAUqD,UAAW3B,EAAEmC,KAQ5D9H,EAAUwE,IAAM,WAAc,MAAOP,GAAUqD,UAAW3B,EAAEoC,KAc5D/H,EAAUgI,OAAS,WACf,GAAIC,GAAU,iBAMVC,EAAkBC,KAAKH,SAAWC,EAAW,QAC7C,WAAc,MAAOxC,GAAW0C,KAAKH,SAAWC,IAChD,WAAc,MAA2C,UAAlB,WAAhBE,KAAKH,SAAwB,IACjC,QAAhBG,KAAKH,SAAsB,GAElC,OAAO,UAAUnF,GACb,GAAIwE,GAAGnH,EAAGE,EAAGqC,EAAG0E,EACZ9G,EAAI,EACJF,KACAiI,EAAO,GAAIpI,GAAU6F,EAKzB,IAHAhD,EAAW,MAANA,GAAehC,EAAYgC,EAAI,EAAG6E,EAAK,IAA6B,EAAL7E,EAAjB7B,EACnDyB,EAAI+C,EAAU3C,EAAKV,GAEf4D,EAGA,GAAK8B,GAAUA,EAAOQ,gBAAkB,CAIpC,IAFAhB,EAAIQ,EAAOQ,gBAAiB,GAAIC,aAAa7F,GAAK,IAEtCA,EAAJpC,GAQJ8G,EAAW,OAAPE,EAAEhH,IAAgBgH,EAAEhH,EAAI,KAAO,IAM9B8G,GAAK,MACNjH,EAAI2H,EAAOQ,gBAAiB,GAAIC,aAAY,IAC5CjB,EAAEhH,GAAKH,EAAE,GACTmH,EAAEhH,EAAI,GAAKH,EAAE,KAKbC,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MAGL,IAAKoF,GAAUA,EAAOU,YAAc,CAKvC,IAFAlB,EAAIQ,EAAOU,YAAa9F,GAAK,GAEjBA,EAAJpC,GAMJ8G,EAAsB,iBAAP,GAAPE,EAAEhH,IAA6C,cAAXgH,EAAEhH,EAAI,GAC/B,WAAXgH,EAAEhH,EAAI,GAAkC,SAAXgH,EAAEhH,EAAI,IACnCgH,EAAEhH,EAAI,IAAM,KAASgH,EAAEhH,EAAI,IAAM,GAAMgH,EAAEhH,EAAI,GAEhD8G,GAAK,KACNU,EAAOU,YAAY,GAAGC,KAAMnB,EAAGhH,IAI/BF,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MACD9B,IACPC,EAAO,GAAI,qBAAsBiH,EAKzC,KAAKxH,EAED,KAAYoC,EAAJpC,GACJ8G,EAAIe,IACK,KAAJf,IAAWhH,EAAEE,KAAO8G,EAAI,KAcrC,KAVA1E,EAAItC,IAAIE,GACRwC,GAAMV,EAGDM,GAAKI,IACNsE,EAAI7B,EAASnD,EAAWU,GACxB1C,EAAEE,GAAKoF,EAAWhD,EAAI0E,GAAMA,GAIf,IAAThH,EAAEE,GAAUF,EAAEkD,MAAOhD,KAG7B,GAAS,EAAJA,EACDF,GAAMC,EAAI,OACP,CAGH,IAAMA,EAAI,GAAc,IAATD,EAAE,GAAUA,EAAEsI,QAASrI,GAAK+B,GAG3C,IAAM9B,EAAI,EAAG8G,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAI9G,KAGhC8B,EAAJ9B,IAAeD,GAAK+B,EAAW9B,GAKxC,MAFA+H,GAAKhI,EAAIA,EACTgI,EAAKjI,EAAIA,EACFiI,MAqGf9E,EAAM,WAGF,QAASoF,GAAUjI,EAAGgC,EAAGkG,GACrB,GAAIvE,GAAGwE,EAAMC,EAAKC,EACdC,EAAQ,EACR1I,EAAII,EAAEgB,OACNuH,EAAMvG,EAAIwG,EACVC,EAAMzG,EAAIwG,EAAY,CAE1B,KAAMxI,EAAIA,EAAEW,QAASf,KACjBwI,EAAMpI,EAAEJ,GAAK4I,EACbH,EAAMrI,EAAEJ,GAAK4I,EAAY,EACzB7E,EAAI8E,EAAML,EAAMC,EAAME,EACtBJ,EAAOI,EAAMH,EAAUzE,EAAI6E,EAAcA,EAAcF,EACvDA,GAAUH,EAAOD,EAAO,IAAQvE,EAAI6E,EAAY,GAAMC,EAAMJ,EAC5DrI,EAAEJ,GAAKuI,EAAOD,CAKlB,OAFII,IAAOtI,EAAE8C,QAAQwF,GAEdtI,EAGX,QAAS0I,GAAS9B,EAAGnH,EAAGkJ,EAAIC,GACxB,GAAIhJ,GAAGiJ,CAEP,IAAKF,GAAMC,EACPC,EAAMF,EAAKC,EAAK,EAAI,OAGpB,KAAMhJ,EAAIiJ,EAAM,EAAOF,EAAJ/I,EAAQA,IAEvB,GAAKgH,EAAEhH,IAAMH,EAAEG,GAAK,CAChBiJ,EAAMjC,EAAEhH,GAAKH,EAAEG,GAAK,EAAI,EACxB,OAIZ,MAAOiJ,GAGX,QAASC,GAAUlC,EAAGnH,EAAGkJ,EAAIT,GAIzB,IAHA,GAAItI,GAAI,EAGA+I,KACJ/B,EAAE+B,IAAO/I,EACTA,EAAIgH,EAAE+B,GAAMlJ,EAAEkJ,GAAM,EAAI,EACxB/B,EAAE+B,GAAM/I,EAAIsI,EAAOtB,EAAE+B,GAAMlJ,EAAEkJ,EAIjC,OAAS/B,EAAE,IAAMA,EAAE5F,OAAS,EAAG4F,EAAEoB,UAIrC,MAAO,UAAWhI,EAAGmC,EAAGC,EAAIC,EAAI6F,GAC5B,GAAIW,GAAKlJ,EAAGC,EAAGmJ,EAAMvJ,EAAGwJ,EAAMC,EAAOC,EAAGC,EAAIC,EAAKC,EAAMC,EAAMC,EAAIC,EAAIC,EACjEC,EAAIC,EACJ7I,EAAId,EAAEc,GAAKqB,EAAErB,EAAI,EAAI,GACrBoB,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAGX,MAAMwC,GAAOA,EAAG,IAAO0H,GAAOA,EAAG,IAE7B,MAAO,IAAIrK,GAGRS,EAAEc,GAAMqB,EAAErB,IAAOoB,GAAK0H,GAAM1H,EAAG,IAAM0H,EAAG,GAAMA,GAG7C1H,GAAe,GAATA,EAAG,KAAY0H,EAAS,EAAJ9I,EAAQA,EAAI,EAHc+I,IAoB5D,KAbAX,EAAI,GAAI3J,GAAUuB,GAClBqI,EAAKD,EAAExJ,KACPC,EAAIK,EAAEL,EAAIwC,EAAExC,EACZmB,EAAIsB,EAAKzC,EAAI,EAEPuI,IACFA,EAAOjD,EACPtF,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDZ,EAAIA,EAAIY,EAAW,GAKjB9B,EAAI,EAAGgK,EAAGhK,KAAQsC,EAAGtC,IAAM,GAAKA,KAGtC,GAFKgK,EAAGhK,IAAOsC,EAAGtC,IAAM,IAAMD,IAErB,EAAJmB,EACDqI,EAAGxH,KAAK,GACRoH,GAAO,MACJ,CAwBH,IAvBAS,EAAKtH,EAAGlB,OACR0I,EAAKE,EAAG5I,OACRpB,EAAI,EACJkB,GAAK,EAILtB,EAAIwF,EAAWkD,GAAS0B,EAAG,GAAK,IAI3BpK,EAAI,IACLoK,EAAK3B,EAAU2B,EAAIpK,EAAG0I,GACtBhG,EAAK+F,EAAU/F,EAAI1C,EAAG0I,GACtBwB,EAAKE,EAAG5I,OACRwI,EAAKtH,EAAGlB,QAGZuI,EAAKG,EACLN,EAAMlH,EAAGvB,MAAO,EAAG+I,GACnBL,EAAOD,EAAIpI,OAGI0I,EAAPL,EAAWD,EAAIC,KAAU,GACjCM,EAAKC,EAAGjJ,QACRgJ,EAAG7G,QAAQ,GACX2G,EAAMG,EAAG,GACJA,EAAG,IAAM1B,EAAO,GAAIuB,GAIzB,GAAG,CAOC,GANAjK,EAAI,EAGJqJ,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,GAGjB,EAANR,EAAU,CAkBX,GAdAS,EAAOF,EAAI,GACNM,GAAML,IAAOC,EAAOA,EAAOpB,GAASkB,EAAI,IAAM,IAGnD5J,EAAIwF,EAAWsE,EAAOG,GAUjBjK,EAAI,EAeL,IAZIA,GAAK0I,IAAM1I,EAAI0I,EAAO,GAG1Bc,EAAOf,EAAU2B,EAAIpK,EAAG0I,GACxBe,EAAQD,EAAKhI,OACbqI,EAAOD,EAAIpI,OAOkC,GAArC0H,EAASM,EAAMI,EAAKH,EAAOI,IAC/B7J,IAGAsJ,EAAUE,EAAWC,EAALS,EAAaC,EAAKC,EAAIX,EAAOf,GAC7Ce,EAAQD,EAAKhI,OACb6H,EAAM,MAQA,IAALrJ,IAGDqJ,EAAMrJ,EAAI,GAIdwJ,EAAOY,EAAGjJ,QACVsI,EAAQD,EAAKhI,MAUjB,IAPaqI,EAARJ,GAAeD,EAAKlG,QAAQ,GAGjCgG,EAAUM,EAAKJ,EAAMK,EAAMnB,GAC3BmB,EAAOD,EAAIpI,OAGC,IAAP6H,EAMD,KAAQH,EAASkB,EAAIR,EAAKM,EAAIL,GAAS,GACnC7J,IAGAsJ,EAAUM,EAAUC,EAALK,EAAYC,EAAKC,EAAIP,EAAMnB,GAC1CmB,EAAOD,EAAIpI,WAGH,KAAR6H,IACRrJ,IACA4J,GAAO,GAIXD,GAAGvJ,KAAOJ,EAGL4J,EAAI,GACLA,EAAIC,KAAUnH,EAAGqH,IAAO,GAExBH,GAAQlH,EAAGqH,IACXF,EAAO,UAEHE,IAAOC,GAAgB,MAAVJ,EAAI,KAAgBtI,IAE7CiI,GAAiB,MAAVK,EAAI,GAGLD,EAAG,IAAKA,EAAGnB,QAGrB,GAAKE,GAAQjD,EAAO,CAGhB,IAAMrF,EAAI,EAAGkB,EAAIqI,EAAG,GAAIrI,GAAK,GAAIA,GAAK,GAAIlB,KAC1CU,EAAO4I,EAAG9G,GAAO8G,EAAEvJ,EAAIC,EAAID,EAAI+B,EAAW,GAAM,EAAGW,EAAI0G,OAIvDG,GAAEvJ,EAAIA,EACNuJ,EAAEjH,GAAK8G,CAGX,OAAOG,OAgJfrI,EAAe,WACX,GAAIkJ,GAAa,iBACbC,EAAW,cACXC,EAAY,cACZC,EAAkB,qBAClBC,EAAmB,mBAEvB,OAAO,UAAWnK,EAAGD,EAAKF,EAAKJ,GAC3B,GAAIyI,GACApH,EAAIjB,EAAME,EAAMA,EAAIgB,QAASoJ,EAAkB,GAGnD,IAAKD,EAAgBtJ,KAAKE,GACtBd,EAAEc,EAAIsJ,MAAMtJ,GAAK,KAAW,EAAJA,EAAQ,GAAK,MAClC,CACH,IAAMjB,IAGFiB,EAAIA,EAAEC,QAASgJ,EAAY,SAAWpG,EAAG0G,EAAIC,GAEzC,MADApC,GAAoC,MAA3BoC,EAAKA,EAAGhI,eAAyB,GAAW,KAANgI,EAAY,EAAI,EACvD7K,GAAKA,GAAKyI,EAAYvE,EAAL0G,IAGzB5K,IACAyI,EAAOzI,EAGPqB,EAAIA,EAAEC,QAASiJ,EAAU,MAAOjJ,QAASkJ,EAAW,SAGnDlK,GAAOe,GAAI,MAAO,IAAIvB,GAAWuB,EAAGoH,EAKzChI,IAAQC,EAAOE,EAAI,SAAYZ,EAAI,SAAWA,EAAI,IAAO,UAAWM,GACxEC,EAAEc,EAAI,KAGVd,EAAEN,EAAIM,EAAEL,EAAI,KACZU,EAAK,MAmNb6E,EAAEqF,cAAgBrF,EAAEsF,IAAM,WACtB,GAAIxK,GAAI,GAAIT,GAAUU,KAEtB,OADKD,GAAEc,EAAI,IAAId,EAAEc,EAAI,GACdd,GAQXkF,EAAEuF,KAAO,WACL,MAAOnK,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAWnDuF,EAAEwF,WAAaxF,EAAE2D,IAAM,SAAW1G,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAEyF,cAAgBzF,EAAE9C,GAAK,WACrB,GAAI5C,GAAGkH,EACHhH,EAAIO,KAAKP,CAEb,KAAMA,EAAI,MAAO,KAIjB,IAHAF,IAAQkH,EAAIhH,EAAEsB,OAAS,GAAM8I,EAAU7J,KAAKN,EAAI+B,IAAeA,EAG1DgF,EAAIhH,EAAEgH,GAAK,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9C,MAFS,GAAJA,IAAQA,EAAI,GAEVA,GAwBX0F,EAAE0F,UAAY1F,EAAErC,IAAM,SAAWV,EAAG1C,GAEhC,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAKc,EAAgBC,IAQ7D0E,EAAE2F,mBAAqB3F,EAAE4F,SAAW,SAAW3I,EAAG1C,GAE9C,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAK,EAAG,IAQhDyF,EAAE6F,OAAS7F,EAAE8F,GAAK,SAAW7I,EAAG1C,GAE5B,MADAY,GAAK,EAC6C,IAA3CqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAE+F,MAAQ,WACN,MAAO3K,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEgG,YAAchG,EAAEoC,GAAK,SAAWnF,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAEiG,qBAAuBjG,EAAEkG,IAAM,SAAWjJ,EAAG1C,GAE3C,MADAY,GAAK,EACqD,KAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAuB,IAANA,GAQnEyF,EAAEmG,SAAW,WACT,QAASpL,KAAKP,GAOlBwF,EAAEoG,UAAYpG,EAAEqG,MAAQ,WACpB,QAAStL,KAAKP,GAAKoK,EAAU7J,KAAKN,EAAI+B,GAAazB,KAAKP,EAAEsB,OAAS,GAOvEkE,EAAEkF,MAAQ,WACN,OAAQnK,KAAKa,GAOjBoE,EAAEsG,WAAatG,EAAEuG,MAAQ,WACrB,MAAOxL,MAAKa,EAAI,GAOpBoE,EAAEwG,OAAS,WACP,QAASzL,KAAKP,GAAkB,GAAbO,KAAKP,EAAE,IAQ9BwF,EAAEyG,SAAWzG,EAAEmC,GAAK,SAAWlF,EAAG1C,GAE9B,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAE0G,kBAAoB1G,EAAE2G,IAAM,SAAW1J,EAAG1C,GAExC,MADAY,GAAK,EACqD,MAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAwB,IAANA,GAwBpEyF,EAAE4G,MAAQ5G,EAAE6G,IAAM,SAAW5J,EAAG1C,GAC5B,GAAIG,GAAGwE,EAAG4H,EAAGC,EACTjM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGrC,IAAKjD,GAAKnH,EAEN,MADA0C,GAAErB,GAAKrB,EACAO,EAAEkM,KAAK/J,EAGlB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO1H,IAAOC,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAWqK,EAAK5J,EAAI6J,IAGxE,KAAM3H,EAAG,KAAO0H,EAAG,GAGf,MAAOA,GAAG,IAAOzH,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAW2C,EAAG,GAAKlC,EAGrC,GAAjBQ,GAAsB,EAAI,GASpC,GALA2L,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAaf,KAXKH,EAAW,EAAJrF,IACRA,GAAKA,EACLoF,EAAI9J,IAEJkK,EAAKD,EACLH,EAAIpC,GAGRoC,EAAEK,UAGI5M,EAAImH,EAAGnH,IAAKuM,EAAErK,KAAK,IACzBqK,EAAEK,cAMF,KAFAjI,GAAM6H,GAASrF,EAAI1E,EAAGlB,SAAavB,EAAImK,EAAG5I,SAAa4F,EAAInH,EAErDmH,EAAInH,EAAI,EAAO2E,EAAJ3E,EAAOA,IAEpB,GAAKyC,EAAGzC,IAAMmK,EAAGnK,GAAK,CAClBwM,EAAO/J,EAAGzC,GAAKmK,EAAGnK,EAClB,OAYZ,GANIwM,IAAMD,EAAI9J,EAAIA,EAAK0H,EAAIA,EAAKoC,EAAG7J,EAAErB,GAAKqB,EAAErB,GAE5CrB,GAAM2E,EAAIwF,EAAG5I,SAAapB,EAAIsC,EAAGlB,QAI5BvB,EAAI,EAAI,KAAQA,IAAKyC,EAAGtC,KAAO,GAIpC,IAHAH,EAAIwF,EAAO,EAGHb,EAAIwC,GAAK,CAEb,GAAK1E,IAAKkC,GAAKwF,EAAGxF,GAAK,CACnB,IAAMxE,EAAIwE,EAAGxE,IAAMsC,IAAKtC,GAAIsC,EAAGtC,GAAKH,KAClCyC,EAAGtC,GACLsC,EAAGkC,IAAMa,EAGb/C,EAAGkC,IAAMwF,EAAGxF,GAIhB,KAAiB,GAATlC,EAAG,GAASA,EAAG8F,UAAWoE,GAGlC,MAAMlK,GAAG,GAWFiC,EAAWhC,EAAGD,EAAIkK,IAPrBjK,EAAErB,EAAqB,GAAjBN,EAAqB,GAAK,EAChC2B,EAAEzC,GAAMyC,EAAExC,EAAI,GACPwC,IA8Bf+C,EAAEoH,OAASpH,EAAEqH,IAAM,SAAWpK,EAAG1C,GAC7B,GAAIyJ,GAAGpI,EACHd,EAAIC,IAMR,OAJAI,GAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAGhBO,EAAEN,IAAMyC,EAAErB,GAAKqB,EAAEzC,IAAMyC,EAAEzC,EAAE,GACtB,GAAIH,GAAUsK,MAGZ1H,EAAEzC,GAAKM,EAAEN,IAAMM,EAAEN,EAAE,GACrB,GAAIH,GAAUS,IAGL,GAAfuF,GAIDzE,EAAIqB,EAAErB,EACNqB,EAAErB,EAAI,EACNoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAG,GAClBA,EAAErB,EAAIA,EACNoI,EAAEpI,GAAKA,GAEPoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAGoD,GAGfvF,EAAE8L,MAAO5C,EAAEsD,MAAMrK,MAQ5B+C,EAAEuH,QAAUvH,EAAEwH,IAAM,WAChB,GAAI1M,GAAI,GAAIT,GAAUU,KAEtB,OADAD,GAAEc,GAAKd,EAAEc,GAAK,KACPd,GAwBXkF,EAAEgH,KAAOhH,EAAEyH,IAAM,SAAWxK,EAAG1C,GAC3B,GAAIuM,GACAhM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGpC,IAAKjD,GAAKnH,EAEP,MADA0C,GAAErB,GAAKrB,EACAO,EAAE8L,MAAM3J,EAGnB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO,IAAIrK,GAAWqH,EAAI,EAI5C,KAAM1E,EAAG,KAAO0H,EAAG,GAAK,MAAOA,GAAG,GAAKzH,EAAI,GAAI5C,GAAW2C,EAAG,GAAKlC,EAAQ,EAAJ4G,GAQ1E,GALAuF,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAUf,IATKxF,EAAI,GACLwF,EAAKD,EACLH,EAAIpC,IAEJhD,GAAKA,EACLoF,EAAI9J,GAGR8J,EAAEK,UACMzF,IAAKoF,EAAErK,KAAK,IACpBqK,EAAEK,UAUN,IAPAzF,EAAI1E,EAAGlB,OACPvB,EAAImK,EAAG5I,OAGM,EAAR4F,EAAInH,IAAQuM,EAAIpC,EAAIA,EAAK1H,EAAIA,EAAK8J,EAAGvM,EAAImH,GAGxCA,EAAI,EAAGnH,GACTmH,GAAM1E,IAAKzC,GAAKyC,EAAGzC,GAAKmK,EAAGnK,GAAKmH,GAAM3B,EAAO,EAC7C/C,EAAGzC,IAAMwF,CAUb,OAPI2B,KACA1E,EAAGY,QAAQ8D,KACTwF,GAKCjI,EAAWhC,EAAGD,EAAIkK,IAS7BlH,EAAE0H,UAAY1H,EAAET,GAAK,SAAUoI,GAC3B,GAAIrN,GAAGkH,EACH1G,EAAIC,KACJP,EAAIM,EAAEN,CAQV,IALU,MAALmN,GAAaA,MAAQA,GAAW,IAANA,GAAiB,IAANA,IAClC3M,GAAQC,EAAO,GAAI,WAAagH,EAAS0F,GACxCA,KAAOA,IAAIA,EAAI,QAGlBnN,EAAI,MAAO,KAIjB,IAHAgH,EAAIhH,EAAEsB,OAAS,EACfxB,EAAIkH,EAAIhF,EAAW,EAEdgF,EAAIhH,EAAEgH,GAAK,CAGZ,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9B,IAAMkH,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAIlH,MAKtC,MAFKqN,IAAK7M,EAAEL,EAAI,EAAIH,IAAIA,EAAIQ,EAAEL,EAAI,GAE3BH,GAiBX0F,EAAE5E,MAAQ,SAAW8B,EAAIC,GACrB,GAAI7C,GAAI,GAAID,GAAUU,KAOtB,QALW,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACvC3G,EAAOd,IAAK4C,EAAKnC,KAAKN,EAAI,EAAS,MAAN0C,GAC1BjC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,GAG3ChB,GAgBX0F,EAAE8C,MAAQ,SAAUhG,GAChB,GAAIxC,GAAIS,IACR,OAAOG,GAAY4B,GAAI8K,EAAkBA,EAAkB,GAAI,YAG3DtN,EAAEgN,MAAO,KAAOtI,EAASlC,IACzB,GAAIzC,GAAWC,EAAEE,GAAKF,EAAEE,EAAE,MAAaoN,EAAL9K,GAAyBA,EAAI8K,GAC7DtN,EAAEsB,GAAU,EAAJkB,EAAQ,EAAI,EAAI,GACxBxC,IAeV0F,EAAE6H,WAAa7H,EAAE8H,KAAO,WACpB,GAAIrJ,GAAGnE,EAAGyC,EAAGgL,EAAKjB,EACdhM,EAAIC,KACJP,EAAIM,EAAEN,EACNoB,EAAId,EAAEc,EACNnB,EAAIK,EAAEL,EACNyC,EAAK7B,EAAiB,EACtB2M,EAAO,GAAI3N,GAAU,MAGzB,IAAW,IAANuB,IAAYpB,IAAMA,EAAE,GACrB,MAAO,IAAIH,IAAYuB,GAAS,EAAJA,KAAYpB,GAAKA,EAAE,IAAOmK,IAAMnK,EAAIM,EAAI,EAAI,EA8B5E,IA1BAc,EAAI4G,KAAKsF,MAAOhN,GAIN,GAALc,GAAUA,GAAK,EAAI,GACpBtB,EAAImD,EAAcjD,IACXF,EAAEwB,OAASrB,GAAM,GAAK,IAAIH,GAAK,KACtCsB,EAAI4G,KAAKsF,KAAKxN,GACdG,EAAImK,GAAYnK,EAAI,GAAM,IAAY,EAAJA,GAASA,EAAI,GAE1CmB,GAAK,EAAI,EACVtB,EAAI,KAAOG,GAEXH,EAAIsB,EAAEyC,gBACN/D,EAAIA,EAAEmB,MAAO,EAAGnB,EAAE6B,QAAQ,KAAO,GAAM1B,GAG3CsC,EAAI,GAAI1C,GAAUC,IAElByC,EAAI,GAAI1C,GAAWuB,EAAI,IAOtBmB,EAAEvC,EAAE,GAML,IALAC,EAAIsC,EAAEtC,EACNmB,EAAInB,EAAIyC,EACC,EAAJtB,IAAQA,EAAI,KAOb,GAHAkL,EAAI/J,EACJA,EAAIiL,EAAKV,MAAOR,EAAEE,KAAMrJ,EAAK7C,EAAGgM,EAAG5J,EAAI,KAElCO,EAAeqJ,EAAEtM,GAAMiB,MAAO,EAAGG,MAAUtB,EAC3CmD,EAAeV,EAAEvC,IAAMiB,MAAO,EAAGG,GAAM,CAWxC,GANKmB,EAAEtC,EAAIA,KAAMmB,EACjBtB,EAAIA,EAAEmB,MAAOG,EAAI,EAAGA,EAAI,GAKd,QAALtB,IAAgByN,GAAY,QAALzN,GAgBrB,IAIIA,KAAOA,EAAEmB,MAAM,IAAqB,KAAfnB,EAAEuD,OAAO,MAGjCzC,EAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAG,GACpCoD,GAAK1B,EAAEuK,MAAMvK,GAAG+I,GAAGhL,GAGvB,OAvBA,IAAMiN,IACF3M,EAAO0L,EAAGA,EAAErM,EAAIY,EAAiB,EAAG,GAE/ByL,EAAEQ,MAAMR,GAAGhB,GAAGhL,IAAK,CACpBiC,EAAI+J,CACJ,OAIR5J,GAAM,EACNtB,GAAK,EACLmM,EAAM,EAkBtB,MAAO3M,GAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAGC,EAAemD,IAwB9DuB,EAAEsH,MAAQtH,EAAEiI,IAAM,SAAWhL,EAAG1C,GAC5B,GAAIC,GAAGC,EAAGC,EAAGwE,EAAGpC,EAAG2B,EAAGyJ,EAAKhF,EAAKC,EAAKgF,EAAKC,EAAKC,EAAKC,EAChDtF,EAAMuF,EACNzN,EAAIC,KACJiC,EAAKlC,EAAEN,EACPkK,GAAOvJ,EAAK,GAAI8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAAMC,CAGhD,MAAMwC,GAAO0H,GAAO1H,EAAG,IAAO0H,EAAG,IAmB7B,OAhBM5J,EAAEc,IAAMqB,EAAErB,GAAKoB,IAAOA,EAAG,KAAO0H,GAAMA,IAAOA,EAAG,KAAO1H,EACzDC,EAAEzC,EAAIyC,EAAExC,EAAIwC,EAAErB,EAAI,MAElBqB,EAAErB,GAAKd,EAAEc,EAGHoB,GAAO0H,GAKTzH,EAAEzC,GAAK,GACPyC,EAAExC,EAAI,GALNwC,EAAEzC,EAAIyC,EAAExC,EAAI,MASbwC,CAYX,KATAxC,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDS,EAAErB,GAAKd,EAAEc,EACTsM,EAAMlL,EAAGlB,OACTqM,EAAMzD,EAAG5I,OAGEqM,EAAND,IAAYI,EAAKtL,EAAIA,EAAK0H,EAAIA,EAAK4D,EAAI5N,EAAIwN,EAAKA,EAAMC,EAAKA,EAAMzN,GAGhEA,EAAIwN,EAAMC,EAAKG,KAAS5N,IAAK4N,EAAG7L,KAAK,IAK3C,IAHAuG,EAAOjD,EACPwI,EAAWjF,EAEL5I,EAAIyN,IAAOzN,GAAK,GAAK,CAKvB,IAJAF,EAAI,EACJ4N,EAAM1D,EAAGhK,GAAK6N,EACdF,EAAM3D,EAAGhK,GAAK6N,EAAW,EAEnBzL,EAAIoL,EAAKhJ,EAAIxE,EAAIoC,EAAGoC,EAAIxE,GAC1BwI,EAAMlG,IAAKF,GAAKyL,EAChBpF,EAAMnG,EAAGF,GAAKyL,EAAW,EACzB9J,EAAI4J,EAAMnF,EAAMC,EAAMiF,EACtBlF,EAAMkF,EAAMlF,EAAUzE,EAAI8J,EAAaA,EAAaD,EAAGpJ,GAAK1E,EAC5DA,GAAM0I,EAAMF,EAAO,IAAQvE,EAAI8J,EAAW,GAAMF,EAAMlF,EACtDmF,EAAGpJ,KAAOgE,EAAMF,CAGpBsF,GAAGpJ,GAAK1E,EASZ,MANIA,KACEC,EAEF6N,EAAGxF,QAGA7D,EAAWhC,EAAGqL,EAAI7N,IAgB7BuF,EAAEwI,SAAW,SAAWjJ,EAAIpC,GACxB,GAAI7C,GAAI,GAAID,GAAUU,KAGtB,OAFAwE,GAAW,MAANA,GAAerE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aAA4B,EAALxC,EAAP,KAChEpC,EAAW,MAANA,GAAejC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,EACxDiE,EAAKnE,EAAOd,EAAGiF,EAAIpC,GAAO7C,GAgBrC0F,EAAE3B,cAAgB,SAAWnB,EAAIC,GAC7B,MAAOW,GAAQ/C,KACP,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MAAS7E,EAAK,EAAI,KAAMC,EAAI,KAmBxE6C,EAAEyI,QAAU,SAAWvL,EAAIC,GACvB,MAAOW,GAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACrD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,KA0BtC6C,EAAE0I,SAAW,SAAWxL,EAAIC,GACxB,GAAItC,GAAMiD,EAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACxD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,GAElC,IAAKpC,KAAKP,EAAI,CACV,GAAIE,GACAiO,EAAM9N,EAAI+N,MAAM,KAChBC,GAAMvI,EAAOG,UACbqI,GAAMxI,EAAOI,mBACbF,EAAiBF,EAAOE,eACxBuI,EAAUJ,EAAI,GACdK,EAAeL,EAAI,GACnBpC,EAAQxL,KAAKa,EAAI,EACjBqN,EAAY1C,EAAQwC,EAAQtN,MAAM,GAAKsN,EACvCnO,EAAMqO,EAAUnN,MAIpB,IAFIgN,IAAIpO,EAAImO,EAAIA,EAAKC,EAAIA,EAAKpO,EAAGE,GAAOF,GAEnCmO,EAAK,GAAKjO,EAAM,EAAI,CAIrB,IAHAF,EAAIE,EAAMiO,GAAMA,EAChBE,EAAUE,EAAUC,OAAQ,EAAGxO,GAEnBE,EAAJF,EAASA,GAAKmO,EAClBE,GAAWvI,EAAiByI,EAAUC,OAAQxO,EAAGmO,EAGhDC,GAAK,IAAIC,GAAWvI,EAAiByI,EAAUxN,MAAMf,IACtD6L,IAAOwC,EAAU,IAAMA,GAG/BlO,EAAMmO,EACFD,EAAUzI,EAAOC,mBAAuBuI,GAAMxI,EAAOM,mBACnDoI,EAAanN,QAAS,GAAIN,QAAQ,OAASuN,EAAK,OAAQ,KACxD,KAAOxI,EAAOK,wBACdqI,GACFD,EAGR,MAAOlO,IAgBXmF,EAAEmJ,WAAa,SAAUC,GACrB,GAAIT,GAAKU,EAAIC,EAAI7O,EAAG8O,EAAKjP,EAAGkP,EAAIxF,EAAGpI,EAC/BkB,EAAI9B,EACJF,EAAIC,KACJiC,EAAKlC,EAAEN,EACPqC,EAAI,GAAIxC,GAAU6F,GAClBuJ,EAAKJ,EAAK,GAAIhP,GAAU6F,GACxBwJ,EAAKF,EAAK,GAAInP,GAAU6F,EAoB5B,IAlBW,MAANkJ,IACDpO,GAAS,EACTV,EAAI,GAAID,GAAU+O,GAClBpO,EAAS8B,KAEDA,EAAIxC,EAAE+L,UAAa/L,EAAE6H,GAAGjC,MAExBlF,GACAC,EAAO,GACL,oBAAuB6B,EAAI,eAAiB,kBAAoBsM,GAKtEA,GAAMtM,GAAKxC,EAAEE,GAAKY,EAAOd,EAAGA,EAAEG,EAAI,EAAG,GAAIyL,IAAIhG,GAAO5F,EAAI,QAI1D0C,EAAK,MAAOlC,GAAEqD,UAgBpB,KAfAvC,EAAI6B,EAAcT,GAIlBvC,EAAIoC,EAAEpC,EAAImB,EAAEE,OAAShB,EAAEL,EAAI,EAC3BoC,EAAErC,EAAE,GAAKmF,GAAY4J,EAAM9O,EAAI+B,GAAa,EAAIA,EAAW+M,EAAMA,GACjEH,GAAMA,GAAM9O,EAAEqJ,IAAI9G,GAAK,EAAMpC,EAAI,EAAIoC,EAAI4M,EAAOnP,EAEhDiP,EAAMjN,EACNA,EAAU,EAAI,EACdhC,EAAI,GAAID,GAAUuB,GAGlB4N,EAAGhP,EAAE,GAAK,EAGNwJ,EAAIrG,EAAKrD,EAAGuC,EAAG,EAAG,GAClByM,EAAKD,EAAGrC,KAAMhD,EAAEsD,MAAMoC,IACH,GAAdJ,EAAG3F,IAAIyF,IACZC,EAAKK,EACLA,EAAKJ,EACLG,EAAKD,EAAGxC,KAAMhD,EAAEsD,MAAOgC,EAAKG,IAC5BD,EAAKF,EACLzM,EAAIvC,EAAEsM,MAAO5C,EAAEsD,MAAOgC,EAAKzM,IAC3BvC,EAAIgP,CAgBR,OAbAA,GAAK3L,EAAKyL,EAAGxC,MAAMyC,GAAKK,EAAI,EAAG,GAC/BF,EAAKA,EAAGxC,KAAMsC,EAAGhC,MAAMmC,IACvBJ,EAAKA,EAAGrC,KAAMsC,EAAGhC,MAAMoC,IACvBF,EAAG5N,EAAI6N,EAAG7N,EAAId,EAAEc,EAChBnB,GAAK,EAGLkO,EAAMhL,EAAK8L,EAAIC,EAAIjP,EAAGa,GAAgBsL,MAAM9L,GAAGwK,MAAM3B,IAC/ChG,EAAK6L,EAAIH,EAAI5O,EAAGa,GAAgBsL,MAAM9L,GAAGwK,OAAU,GAC7CmE,EAAGtL,WAAYuL,EAAGvL,aAClBqL,EAAGrL,WAAYkL,EAAGlL,YAE9B7B,EAAUiN,EACHZ,GAOX3I,EAAE2J,SAAW,WACT,GAAI7O,GAAIC,IAGR,QAAQD,IAAOA,EAAEc,EAAU,EAANd,EAAEc,EAAQ+I,MAenC3E,EAAE4J,QAAU5J,EAAE1C,IAAM,SAAUhD,GAC1B,GAAIwC,GAAGG,EACHvC,EAAIoF,EAAe,EAAJxF,GAASA,GAAKA,GAC7BQ,EAAIC,IAGR,KAAMG,EAAYZ,GAAIsN,EAAkBA,EAAkB,GAAI,eACzDzB,SAAS7L,IAAMI,EAAIkN,IAAsBtN,GAAK,IAC/CuP,WAAWvP,IAAMA,KAAQA,EAAIqK,MAC7B,MAAO,IAAItK,GAAWmI,KAAKlF,KAAMxC,EAAGR,GASxC,KAHAwC,EAAIO,EAAgBwC,EAAUxC,EAAgBb,EAAW,GAAM,EAC/DS,EAAI,GAAI5C,GAAU6F,KAEN,CAER,GAAKxF,EAAI,EAAI,CAET,GADAuC,EAAIA,EAAEqK,MAAMxM,IACNmC,EAAEzC,EAAI,KACPsC,IAAKG,EAAEzC,EAAEsB,OAASgB,IAAIG,EAAEzC,EAAEsB,OAASgB,GAI5C,GADApC,EAAIoF,EAAWpF,EAAI,IACbA,EAAI,KAEVI,GAAIA,EAAEwM,MAAMxM,GACPgC,GAAKhC,EAAEN,GAAKM,EAAEN,EAAEsB,OAASgB,IAAIhC,EAAEN,EAAEsB,OAASgB,GAInD,MADS,GAAJxC,IAAQ2C,EAAIiD,EAAIvC,IAAIV,IAClBH,EAAI1B,EAAO6B,EAAGI,EAAe/B,GAAkB2B,GAkB1D+C,EAAE8J,YAAc,SAAWvK,EAAIpC,GAC3B,MAAOW,GAAQ/C,KAAY,MAANwE,GAAcrE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aACtD,EAALxC,EAAS,KAAMpC,EAAI,KAgB3B6C,EAAE7B,SAAW,SAAU5D,GACnB,GAAIM,GACAP,EAAIS,KACJa,EAAItB,EAAEsB,EACNnB,EAAIH,EAAEG,CAyBV,OAtBW,QAANA,EAEGmB,GACAf,EAAM,WACG,EAAJe,IAAQf,EAAM,IAAMA,IAEzBA,EAAM,OAGVA,EAAM4C,EAAenD,EAAEE,GAOnBK,EALM,MAALN,GAAcW,EAAYX,EAAG,EAAG,GAAI,GAAI,QAKnC0B,EAAauB,EAAc3C,EAAKJ,GAAS,EAAJF,EAAO,GAAIqB,GAJ3CwC,GAAL3D,GAAmBA,GAAK0F,EAC1B9B,EAAexD,EAAKJ,GACpB+C,EAAc3C,EAAKJ,GAKlB,EAAJmB,GAAStB,EAAEE,EAAE,KAAKK,EAAM,IAAMA,IAGhCA,GAQXmF,EAAE+J,UAAY/J,EAAEgK,MAAQ,WACpB,MAAO5O,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEiK,QAAUjK,EAAEkK,OAAS,WACnB,MAAOnP,MAAKoD,YAcE,MAAb/D,GAAoBC,EAAUkH,OAAOnH,GAEnCC,EAOX,QAASuK,GAAStK,GACd,GAAII,GAAQ,EAAJJ,CACR,OAAOA,GAAI,GAAKA,IAAMI,EAAIA,EAAIA,EAAI,EAKtC,QAAS+C,GAAciE,GAMnB,IALA,GAAI9F,GAAG+L,EACHjN,EAAI,EACJwE,EAAIwC,EAAE5F,OACNiB,EAAI2E,EAAE,GAAK,GAEHxC,EAAJxE,GAAS,CAGb,IAFAkB,EAAI8F,EAAEhH,KAAO,GACbiN,EAAInL,EAAWZ,EAAEE,OACT6L,IAAK/L,EAAI,IAAMA,GACvBmB,GAAKnB,EAIT,IAAMsD,EAAInC,EAAEjB,OAA8B,KAAtBiB,EAAEf,aAAakD,KACnC,MAAOnC,GAAEtB,MAAO,EAAGyD,EAAI,GAAK,GAKhC,QAASsE,GAAS1I,EAAGmC,GACjB,GAAIyE,GAAGnH,EACHyC,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,EACPE,EAAII,EAAEc,EACNsD,EAAIjC,EAAErB,EACNkB,EAAIhC,EAAEL,EACN0P,EAAIlN,EAAExC,CAGV,KAAMC,IAAMwE,EAAI,MAAO,KAMvB,IAJAwC,EAAI1E,IAAOA,EAAG,GACdzC,EAAImK,IAAOA,EAAG,GAGThD,GAAKnH,EAAI,MAAOmH,GAAInH,EAAI,GAAK2E,EAAIxE,CAGtC,IAAKA,GAAKwE,EAAI,MAAOxE,EAMrB,IAJAgH,EAAQ,EAAJhH,EACJH,EAAIuC,GAAKqN,GAGHnN,IAAO0H,EAAK,MAAOnK,GAAI,GAAKyC,EAAK0E,EAAI,EAAI,EAG/C,KAAMnH,EAAI,MAAOuC,GAAIqN,EAAIzI,EAAI,EAAI,EAKjC,KAHAxC,GAAMpC,EAAIE,EAAGlB,SAAaqO,EAAIzF,EAAG5I,QAAWgB,EAAIqN,EAG1CzP,EAAI,EAAOwE,EAAJxE,EAAOA,IAAM,GAAKsC,EAAGtC,IAAMgK,EAAGhK,GAAK,MAAOsC,GAAGtC,GAAKgK,EAAGhK,GAAKgH,EAAI,EAAI,EAG/E,OAAO5E,IAAKqN,EAAI,EAAIrN,EAAIqN,EAAIzI,EAAI,EAAI,GASxC,QAASM,GAAsB1H,EAAGuE,EAAKC,GACnC,OAASxE,EAAI0E,EAAS1E,KAAQuE,GAAYC,GAALxE,EAIzC,QAASoE,GAAQ0L,GACb,MAA8C,kBAAvCC,OAAOpK,UAAU9B,SAASQ,KAAKyL,GAS1C,QAAS7M,GAAW1C,EAAK8B,EAAQD,GAO7B,IANA,GAAIwC,GAEAoL,EADA3B,GAAO,GAEPjO,EAAI,EACJE,EAAMC,EAAIiB,OAEFlB,EAAJF,GAAW,CACf,IAAM4P,EAAO3B,EAAI7M,OAAQwO,IAAQ3B,EAAI2B,IAAS3N,GAG9C,IAFAgM,EAAKzJ,EAAI,IAAO1D,EAASW,QAAStB,EAAIgD,OAAQnD,MAEtCwE,EAAIyJ,EAAI7M,OAAQoD,IAEfyJ,EAAIzJ,GAAKxC,EAAU,IACD,MAAdiM,EAAIzJ,EAAI,KAAayJ,EAAIzJ,EAAI,GAAK,GACvCyJ,EAAIzJ,EAAI,IAAMyJ,EAAIzJ,GAAKxC,EAAU,EACjCiM,EAAIzJ,IAAMxC,GAKtB,MAAOiM,GAAIxB,UAIf,QAAS9I,GAAexD,EAAKJ,GACzB,OAASI,EAAIiB,OAAS,EAAIjB,EAAIgD,OAAO,GAAK,IAAMhD,EAAIY,MAAM,GAAKZ,IACvD,EAAJJ,EAAQ,IAAM,MAASA,EAI/B,QAAS+C,GAAc3C,EAAKJ,GACxB,GAAIG,GAAK+M,CAGT,IAAS,EAAJlN,EAAQ,CAGT,IAAMkN,EAAI,OAAQlN,EAAGkN,GAAK,KAC1B9M,EAAM8M,EAAI9M,MAOV,IAHAD,EAAMC,EAAIiB,SAGHrB,EAAIG,EAAM,CACb,IAAM+M,EAAI,IAAKlN,GAAKG,IAAOH,EAAGkN,GAAK,KACnC9M,GAAO8M,MACK/M,GAAJH,IACRI,EAAMA,EAAIY,MAAO,EAAGhB,GAAM,IAAMI,EAAIY,MAAMhB,GAIlD,OAAOI,GAIX,QAASmE,GAAS1E,GAEd,MADAA,GAAIuP,WAAWvP,GACJ,EAAJA,EAAQuF,EAASvF,GAAKwF,EAAUxF,GAtlF3C,GAAID,GAAW6H,EAAQvG,EACnBO,EAAY,uCACZ2D,EAAW2C,KAAK+C,KAChBzF,EAAY0C,KAAKuD,MACjB9D,EAAU,iCACV/D,EAAe,gBACfnC,EAAgB,kDAChBP,EAAW,mEACXuE,EAAO,KACPvD,EAAW,GACXoL,EAAmB,iBAEnBjI,GAAY,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAC7E2D,EAAY,IAOZvB,EAAM,GA4kFV,IAHA1H,EAAYF,IAGU,kBAAVoQ,SAAwBA,OAAOC,IACvCD,OAAQ,WAAc,MAAOlQ,SAG1B,IAAsB,mBAAVoQ,SAAyBA,OAAOC,SAE/C,GADAD,OAAOC,QAAUrQ,GACX6H,EAAS,IAAMA,EAASyI,QAAQ,UAAa,MAAOlQ,SAI1DP,GAAOG,UAAYA,GAExBU"} \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.min.js b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.min.js deleted file mode 100644 index 70a1216..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bignumber.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ -!function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,k);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+O.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,b,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&L(M,b,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=k;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=O.charAt(g[d++]));e=l(e,u)}return e}function _(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:k,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&B>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||B>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function x(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[n%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==N&&(a[0]=1));break}if(a[l]+=s,a[l]!=N)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(k=0|e),r[n]=k,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(B=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(B=-($=0|(0>e?-e:e)))),r[n]=[B,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?F:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h||"object"!=typeof h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return x(arguments,T.lt)},a.min=function(){return x(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,b,O,S,R,A,E,D,_,x,F=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*F:F/0:0/0);for(v=new a(F),b=v.c=[],c=i.e-o.e,F=u+c+1,f||(f=N,c=t(i.e/y)-t(o.e/y),F=F/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>F)b.push(1),g=!0;else{for(E=I.length,_=L.length,h=0,F+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),_=L.length,E=I.length),A=_,O=I.slice(0,_),S=O.length;_>S;O[S++]=0);x=L.slice(),x.unshift(0),D=L[0],L[1]>=f/2&&D++;do{if(p=0,l=n(L,O,_,S),0>l){if(R=O[0],_!=S&&(R=R*f+(O[1]||0)),p=m(R/D),p>1)for(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=O.length;1==n(d,O,w,S);)p--,r(d,w>_?x:L,w,f),w=d.length,l=1;else 0==p&&(l=p=1),d=L.slice(),w=d.length;if(S>w&&d.unshift(0),r(O,d,S,f),S=O.length,-1==l)for(;n(L,O,_,S)<1;)p++,r(O,S>_?x:L,S,f),S=O.length}else 0===l&&(p++,O=[0]);b[h++]=p,O[0]?O[S++]=I[A]||0:(O=[I[A]],S=1)}while((A++=10;F/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,k)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(0/0);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:0/0);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==k?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=N-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/N|0,f[n]%=N;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:k),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?0/0:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=O,O=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=N,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=O[--s]%v,h=O[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:k,e?U(t,e,n):t},T.toExponential=function(e,n){return _(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return _(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=_(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,k).minus(g).abs().cmp(C(f,t,o,k).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){var e=this;return+e||(e.s?0*e.s:0/0)},T.toPower=T.pow=function(e){var n,t,r=m(0>e?-e:+e),i=this;if(!H(e,-S,S,23,"exponent")&&(!isFinite(e)||r>S&&(e/=0)||parseFloat(e)!=e&&!(e=0/0)))return new a(Math.pow(+i,e));for(n=J?d(J/y+2):0,t=new a(q);;){if(r%2){if(t=t.times(i),!t.c)break;n&&t.c.length>n&&(t.c.length=n)}if(r=m(r/2),!r)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>e&&(t=q.div(t)),n?U(t,J,k):t},T.toPrecision=function(e,n){return _(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):B>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=O.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",b="number type has more than 15 significant digits",O="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",N=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if(a=n(),"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e.BigNumber=a}(this); -//# sourceMappingURL=bignumber.js.map \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bower.json b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bower.json deleted file mode 100644 index 8aadebb..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "bignumber.js", - "main": "bignumber.js", - "version": "2.0.7", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "authors": [ - "Michael Mclaughlin " - ], - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "ignore": [ - ".*", - "*.json", - "test" - ] -} - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/doc/API.html b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/doc/API.html deleted file mode 100644 index e0b173f..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/doc/API.html +++ /dev/null @@ -1,2160 +0,0 @@ - - - - - - -bignumber.js API - - - - - - -
    - -

    bignumber.js

    - -

    A JavaScript library for arbitrary-precision arithmetic.

    -

    Hosted on GitHub.

    - -

    API

    - -

    - See the README on GitHub for a - quick-start introduction. -

    -

    - In all examples below, var and semicolons are not shown, and if a commented-out - value is in quotes it means toString has been called on the preceding expression. -

    - - -

    CONSTRUCTOR

    - -
    - BigNumberBigNumber(value [, base]) ⇒ BigNumber -
    -
    -
    value
    -
    - number|string|BigNumber: see RANGE for - range. -
    -
    - A numeric value. -
    -
    - Legitimate values include ±0, ±Infinity and - NaN. -
    -
    - Values of type number with more than 15 significant digits are - considered invalid (if ERRORS is true) as calling - toString or valueOf on - such numbers may not result in the intended value. -
    console.log( 823456789123456.3 );    // 823456789123456.2
    -
    -
    - There is no limit to the number of digits of a value of type string (other than - that of JavaScript's maximum array size). -
    -
    - Decimal string values may be in exponential, as well as normal (fixed-point) notation. - Non-decimal values must be in normal notation. -
    -
    - String values in hexadecimal literal form, e.g. '0xff', are valid, as are - string values with the octal and binary prefixs '0o' and '0b'. - String values in octal literal form without the prefix will be interpreted as - decimals, e.g. '011' is interpreted as 11, not 9. -
    -
    Values in any base may have fraction digits.
    -
    - For bases from 10 to 36, lower and/or upper case letters can be - used to represent values from 10 to 35. -
    -
    - For bases above 36, a-z represents values from 10 to - 35, A-Z from 36 to 61, and - $ and _ represent 62 and 63 respectively - (this can be changed by editing the ALPHABET variable near the top of the - source file). -
    -
    -
    -
    base
    -
    - number: integer, 2 to 64 inclusive -
    -
    The base of value.
    -
    - If base is omitted, or is null or undefined, base - 10 is assumed. -
    -
    -
    -

    Returns a new instance of a BigNumber object.

    -

    - If a base is specified, the value is rounded according to - the current DECIMAL_PLACES and - ROUNDING_MODE configuration. -

    -

    - See Errors for the treatment of an invalid value or - base. -

    -
    -x = new BigNumber(9)                       // '9'
    -y = new BigNumber(x)                       // '9'
    -
    -// 'new' is optional if ERRORS is false
    -BigNumber(435.345)                         // '435.345'
    -
    -new BigNumber('5032485723458348569331745.33434346346912144534543')
    -new BigNumber('4.321e+4')                  // '43210'
    -new BigNumber('-735.0918e-430')            // '-7.350918e-428'
    -new BigNumber(Infinity)                    // 'Infinity'
    -new BigNumber(NaN)                         // 'NaN'
    -new BigNumber('.5')                        // '0.5'
    -new BigNumber('+2')                        // '2'
    -new BigNumber(-10110100.1, 2)              // '-180.5'
    -new BigNumber(-0b10110100.1)               // '-180.5'
    -new BigNumber('123412421.234324', 5)       // '607236.557696'
    -new BigNumber('ff.8', 16)                  // '255.5'
    -new BigNumber('0xff.8')                    // '255.5'
    -

    - The following throws 'not a base 2 number' if - ERRORS is true, otherwise it returns a BigNumber with value - NaN. -

    -
    new BigNumber(9, 2)
    -

    - The following throws 'number type has more than 15 significant digits' if - errors is true, otherwise it returns a BigNumber with value - 96517860459076820. -

    -
    new BigNumber(96517860459076817.4395)
    -

    - The following throws 'not a number' if ERRORS - is true, otherwise it returns a BigNumber with value NaN. -

    -
    new BigNumber('blurgh')
    -

    - A value is only rounded by the constructor if a base is specified. -

    -
    BigNumber.config({ DECIMAL_PLACES: 5 })
    -new BigNumber(1.23456789)                  // '1.23456789'
    -new BigNumber(1.23456789, 10)              // '1.23457'
    - - - -

    Methods

    -

    The static methods of a BigNumber constructor.

    - - - - -
    - another.another([obj]) ⇒ BigNumber constructor -
    -

    obj: object

    -

    - Returns a new independent BigNumber constructor with configuration as described by - obj (see config), or with the default - configuration if obj is null or undefined. -

    -
    BigNumber.config({ DECIMAL_PLACES: 5 })
    -BN = BigNumber.another({ DECIMAL_PLACES: 9 })
    -
    -x = new BigNumber(1)
    -y = new BN(1)
    -
    -x.div(3)                        // 0.33333
    -y.div(3)                        // 0.333333333
    -
    -// BN = BigNumber.another({ DECIMAL_PLACES: 9 }) is equivalent to:
    -BN = BigNumber.another()
    -BN.config({ DECIMAL_PLACES: 9 })
    - - - -
    configconfig([obj]) ⇒ object
    -

    - obj: object: an object that contains some or all of the following - properties. -

    -

    Configures the 'global' settings for this particular BigNumber constructor.

    -

    Note: the configuration can also be supplied as an argument list, see below.

    -
    -
    DECIMAL_PLACES
    -
    - number: integer, 0 to 1e+9 inclusive
    - Default value: 20 -
    -
    - The maximum number of decimal places of the results of operations involving - division, i.e. division, square root and base conversion operations, and power - operations with negative exponents.
    -
    -
    -
    BigNumber.config({ DECIMAL_PLACES: 5 })
    -BigNumber.config(5)    // equivalent
    -
    - - - -
    ROUNDING_MODE
    -
    - number: integer, 0 to 8 inclusive
    - Default value: 4 (ROUND_HALF_UP) -
    -
    - The rounding mode used in the above operations and the default rounding mode of - round, - toExponential, - toFixed, - toFormat and - toPrecision. -
    -
    The modes are available as enumerated properties of the BigNumber constructor.
    -
    -
    BigNumber.config({ ROUNDING_MODE: 0 })
    -BigNumber.config(null, BigNumber.ROUND_UP)    // equivalent
    -
    - - - -
    EXPONENTIAL_AT
    -
    - number: integer, magnitude 0 to 1e+9 inclusive, or -
    - number[]: [ integer -1e+9 to 0 inclusive, integer - 0 to 1e+9 inclusive ]
    - Default value: [-7, 20] -
    -
    - The exponent value(s) at which toString returns exponential notation. -
    -
    - If a single number is assigned, the value is the exponent magnitude.
    - If an array of two numbers is assigned then the first number is the negative exponent - value at and beneath which exponential notation is used, and the second number is the - positive exponent value at and above which the same. -
    -
    - For example, to emulate JavaScript numbers in terms of the exponent values at which they - begin to use exponential notation, use [-7, 20]. -
    -
    -
    BigNumber.config({ EXPONENTIAL_AT: 2 })
    -new BigNumber(12.3)         // '12.3'        e is only 1
    -new BigNumber(123)          // '1.23e+2'
    -new BigNumber(0.123)        // '0.123'       e is only -1
    -new BigNumber(0.0123)       // '1.23e-2'
    -
    -BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
    -new BigNumber(123456789)    // '123456789'   e is only 8
    -new BigNumber(0.000000123)  // '1.23e-7'
    -
    -// Almost never return exponential notation:
    -BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
    -
    -// Always return exponential notation:
    -BigNumber.config({ EXPONENTIAL_AT: 0 })
    -
    -
    - Regardless of the value of EXPONENTIAL_AT, the toFixed method - will always return a value in normal notation and the toExponential method - will always return a value in exponential form. -
    -
    - Calling toString with a base argument, e.g. toString(10), will - also always return normal notation. -
    - - - -
    RANGE
    -
    - number: integer, magnitude 1 to 1e+9 inclusive, or -
    - number[]: [ integer -1e+9 to -1 inclusive, integer - 1 to 1e+9 inclusive ]
    - Default value: [-1e+9, 1e+9] -
    -
    - The exponent value(s) beyond which overflow to Infinity and underflow to - zero occurs. -
    -
    - If a single number is assigned, it is the maximum exponent magnitude: values wth a - positive exponent of greater magnitude become Infinity and those with a - negative exponent of greater magnitude become zero. -
    - If an array of two numbers is assigned then the first number is the negative exponent - limit and the second number is the positive exponent limit. -
    -
    - For example, to emulate JavaScript numbers in terms of the exponent values at which they - become zero and Infinity, use [-324, 308]. -
    -
    -
    BigNumber.config({ RANGE: 500 })
    -BigNumber.config().RANGE     // [ -500, 500 ]
    -new BigNumber('9.999e499')   // '9.999e+499'
    -new BigNumber('1e500')       // 'Infinity'
    -new BigNumber('1e-499')      // '1e-499'
    -new BigNumber('1e-500')      // '0'
    -
    -BigNumber.config({ RANGE: [-3, 4] })
    -new BigNumber(99999)         // '99999'      e is only 4
    -new BigNumber(100000)        // 'Infinity'   e is 5
    -new BigNumber(0.001)         // '0.01'       e is only -3
    -new BigNumber(0.0001)        // '0'          e is -4
    -
    -
    - The largest possible magnitude of a finite BigNumber is - 9.999...e+1000000000.
    - The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. -
    - - - -
    ERRORS
    -
    - boolean|number: true, false, 0 or - 1.
    - Default value: true -
    -
    - The value that determines whether BigNumber Errors are thrown.
    - If ERRORS is false, no errors will be thrown. -
    -
    See Errors.
    -
    BigNumber.config({ ERRORS: false })
    - - - -
    CRYPTO
    -
    - boolean|number: true, false, 0 or - 1.
    - Default value: false -
    -
    - The value that determines whether cryptographically-secure pseudo-random number - generation is used. -
    -
    - If CRYPTO is set to true then the - random method will generate random digits using - crypto.getRandomValues in browsers that support it, or - crypto.randomBytes if using a version of Node.js that supports it. -
    -
    - If neither function is supported by the host environment then attempting to set - CRYPTO to true will fail, and if ERRORS - is true an exception will be thrown. -
    -
    - If CRYPTO is false then the source of randomness used will be - Math.random (which is assumed to generate at least 30 bits of - randomness). -
    -
    See random.
    -
    -
    BigNumber.config({ CRYPTO: true })
    -BigNumber.config().CRYPTO       // true
    -BigNumber.random()              // 0.54340758610486147524
    -
    - - - -
    MODULO_MODE
    -
    - number: integer, 0 to 9 inclusive
    - Default value: 1 (ROUND_DOWN) -
    -
    The modulo mode used when calculating the modulus: a mod n.
    -
    - The quotient, q = a / n, is calculated according to the - ROUNDING_MODE that corresponds to the chosen - MODULO_MODE. -
    -
    The remainder, r, is calculated as: r = a - n * q.
    -
    - The modes that are most commonly used for the modulus/remainder operation are shown in - the following table. Although the other rounding modes can be used, they may not give - useful results. -
    -
    - - - - - - - - - - - - - - - - - - - - - - -
    PropertyValueDescription
    ROUND_UP0 - The remainder is positive if the dividend is negative, otherwise it is negative. -
    ROUND_DOWN1 - The remainder has the same sign as the dividend.
    - This uses 'truncating division' and matches the behaviour of JavaScript's - remainder operator %. -
    ROUND_FLOOR3 - The remainder has the same sign as the divisor.
    - This matches Python's % operator. -
    ROUND_HALF_EVEN6The IEEE 754 remainder function.
    EUCLID9 - The remainder is always positive. Euclidian division:
    - q = sign(n) * floor(a / abs(n)) -
    -
    -
    - The rounding/modulo modes are available as enumerated properties of the BigNumber - constructor. -
    -
    See modulo.
    -
    -
    BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
    -BigNumber.config({ MODULO_MODE: 9 })          // equivalent
    -
    - - - -
    POW_PRECISION
    -
    - number: integer, 0 to 1e+9 inclusive.
    - Default value: 100 -
    -
    - The maximum number of significant digits of the result of the power operation. -
    -
    If set to 0, the number of signifcant digits will not be limited.
    -
    See toPower.
    -
    BigNumber.config({ POW_PRECISION: 100 })
    - - - -
    FORMAT
    -
    object
    -
    - The FORMAT object configures the format of the string returned by the - toFormat method. -
    -
    - The example below shows the properties of the FORMAT object that are - recognised, and their default values. -
    -
    - Unlike the other configuration properties, the values of the properties of the - FORMAT object will not be checked for validity. The existing - FORMAT object will simply be replaced by the object that is passed in. - Note that all the properties shown below do not have to be included. -
    -
    See toFormat for examples of usage.
    -
    -
    -BigNumber.config({
    -    FORMAT: {
    -        // the decimal separator
    -        decimalSeparator: '.',
    -        // the grouping separator of the integer part
    -        groupSeparator: ',',
    -        // the primary grouping size of the integer part
    -        groupSize: 3,
    -        // the secondary grouping size of the integer part
    -        secondaryGroupSize: 0,
    -        // the grouping separator of the fraction part
    -        fractionGroupSeparator: ' ',
    -        // the grouping size of the fraction part
    -        fractionGroupSize: 0
    -    }
    -});
    -
    -
    -
    -

    Returns an object with the above properties and their current values.

    -

    - If the value to be assigned to any of the above properties is null or - undefined it is ignored. -

    -

    See Errors for the treatment of invalid values.

    -
    -BigNumber.config({
    -    DECIMAL_PLACES: 40,
    -    ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
    -    EXPONENTIAL_AT: [-10, 20],
    -    RANGE: [-500, 500],
    -    ERRORS: true,
    -    CRYPTO: true,
    -    MODULO_MODE: BigNumber.ROUND_FLOOR,
    -    POW_PRECISION: 80,
    -    FORMAT: {
    -        groupSize: 3,
    -        groupSeparator: ' ',
    -        decimalSeparator: ','
    -    }
    -});
    -
    -// Alternatively but equivalently (excluding FORMAT):
    -BigNumber.config( 40, 7, [-10, 20], 500, 1, 1, 3, 80 )
    -
    -obj = BigNumber.config();
    -obj.ERRORS       // true
    -obj.RANGE        // [-500, 500]
    - - - -
    - max.max([arg1 [, arg2, ...]]) ⇒ BigNumber -
    -

    - arg1, arg2, ...: number|string|BigNumber
    - See BigNumber for further parameter details. -

    -

    - Returns a BigNumber whose value is the maximum of arg1, - arg2,... . -

    -

    The argument to this method can also be an array of values.

    -

    The return value is always exact and unrounded.

    -
    x = new BigNumber('3257869345.0378653')
    -BigNumber.max(4e9, x, '123456789.9')          // '4000000000'
    -
    -arr = [12, '13', new BigNumber(14)]
    -BigNumber.max(arr)                            // '14'
    - - - -
    - min.min([arg1 [, arg2, ...]]) ⇒ BigNumber -
    -

    - arg1, arg2, ...: number|string|BigNumber
    - See BigNumber for further parameter details. -

    -

    - Returns a BigNumber whose value is the minimum of arg1, - arg2,... . -

    -

    The argument to this method can also be an array of values.

    -

    The return value is always exact and unrounded.

    -
    x = new BigNumber('3257869345.0378653')
    -BigNumber.min(4e9, x, '123456789.9')          // '123456789.9'
    -
    -arr = [2, new BigNumber(-14), '-15.9999', -12]
    -BigNumber.min(arr)                            // '-15.9999'
    - - - -
    - random.random([dp]) ⇒ BigNumber -
    -

    dp: number: integer, 0 to 1e+9 inclusive

    -

    - Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and - less than 1. -

    -

    - The return value will have dp decimal places (or less if trailing zeros are - produced).
    - If dp is omitted then the number of decimal places will default to the current - DECIMAL_PLACES setting. -

    -

    - Depending on the value of this BigNumber constructor's - CRYPTO setting and the support for the - crypto object in the host environment, the random digits of the return value are - generated by either Math.random (fastest), crypto.getRandomValues - (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). -

    -

    - If CRYPTO is true, i.e. one of the - crypto methods is to be used, the value of a returned BigNumber should be - cryptographically-secure and statistically indistinguishable from a random value. -

    -
    BigNumber.config({ DECIMAL_PLACES: 10 })
    -BigNumber.random()              // '0.4117936847'
    -BigNumber.random(20)            // '0.78193327636914089009'
    - - - -

    Properties

    -

    - The library's enumerated rounding modes are stored as properties of the constructor.
    - (They are not referenced internally by the library itself.) -

    -

    - Rounding modes 0 to 6 (inclusive) are the same as those of Java's - BigDecimal class. -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    PropertyValueDescription
    ROUND_UP0Rounds away from zero
    ROUND_DOWN1Rounds towards zero
    ROUND_CEIL2Rounds towards Infinity
    ROUND_FLOOR3Rounds towards -Infinity
    ROUND_HALF_UP4 - Rounds towards nearest neighbour.
    - If equidistant, rounds away from zero -
    ROUND_HALF_DOWN5 - Rounds towards nearest neighbour.
    - If equidistant, rounds towards zero -
    ROUND_HALF_EVEN6 - Rounds towards nearest neighbour.
    - If equidistant, rounds towards even neighbour -
    ROUND_HALF_CEIL7 - Rounds towards nearest neighbour.
    - If equidistant, rounds towards Infinity -
    ROUND_HALF_FLOOR8 - Rounds towards nearest neighbour.
    - If equidistant, rounds towards -Infinity -
    -
    -BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
    -BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
    - - -

    INSTANCE

    - -

    Methods

    -

    The methods inherited by a BigNumber instance from its constructor's prototype object.

    -

    A BigNumber is immutable in the sense that it is not changed by its methods.

    -

    - The treatment of ±0, ±Infinity and NaN is - consistent with how JavaScript treats these values. -

    -

    - Many method names have a shorter alias.
    - (Internally, the library always uses the shorter method names.) -

    - - - -
    absoluteValue.abs() ⇒ BigNumber
    -

    - Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of - this BigNumber. -

    -

    The return value is always exact and unrounded.

    -
    -x = new BigNumber(-0.8)
    -y = x.absoluteValue()           // '0.8'
    -z = y.abs()                     // '0.8'
    - - - -
    ceil.ceil() ⇒ BigNumber
    -

    - Returns a BigNumber whose value is the value of this BigNumber rounded to - a whole number in the direction of positive Infinity. -

    -
    -x = new BigNumber(1.3)
    -x.ceil()                        // '2'
    -y = new BigNumber(-1.8)
    -y.ceil()                        // '-1'
    - - - -
    comparedTo.cmp(n [, base]) ⇒ number
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    - - - - - - - - - - - - - - - - - - -
    Returns 
    1If the value of this BigNumber is greater than the value of n
    -1If the value of this BigNumber is less than the value of n
    0If this BigNumber and n have the same value
    nullIf the value of either this BigNumber or n is NaN
    -
    -x = new BigNumber(Infinity)
    -y = new BigNumber(5)
    -x.comparedTo(y)                 // 1
    -x.comparedTo(x.minus(1))        // 0
    -y.cmp(NaN)                      // null
    -y.cmp('110', 2)                 // -1
    - - - -
    decimalPlaces.dp() ⇒ number
    -

    - Return the number of decimal places of the value of this BigNumber, or null if - the value of this BigNumber is ±Infinity or NaN. -

    -
    -x = new BigNumber(123.45)
    -x.decimalPlaces()               // 2
    -y = new BigNumber('9.9e-101')
    -y.dp()                          // 102
    - - - -
    dividedBy.div(n [, base]) ⇒ BigNumber -
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    - Returns a BigNumber whose value is the value of this BigNumber divided by - n, rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

    -
    -x = new BigNumber(355)
    -y = new BigNumber(113)
    -x.dividedBy(y)                  // '3.14159292035398230088'
    -x.div(5)                        // '71'
    -x.div(47, 16)                   // '5'
    - - - -
    - dividedToIntegerBy.divToInt(n [, base]) ⇒ - BigNumber -
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    - Return a BigNumber whose value is the integer part of dividing the value of this BigNumber by - n. -

    -
    -x = new BigNumber(5)
    -y = new BigNumber(3)
    -x.dividedToIntegerBy(y)         // '1'
    -x.divToInt(0.7)                 // '7'
    -x.divToInt('0.f', 16)           // '5'
    - - - -
    equals.eq(n [, base]) ⇒ boolean
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    - Returns true if the value of this BigNumber equals the value of n, - otherwise returns false.
    - As with JavaScript, NaN does not equal NaN. -

    -

    Note: This method uses the comparedTo method internally.

    -
    -0 === 1e-324                    // true
    -x = new BigNumber(0)
    -x.equals('1e-324')              // false
    -BigNumber(-0).eq(x)             // true  ( -0 === 0 )
    -BigNumber(255).eq('ff', 16)     // true
    -
    -y = new BigNumber(NaN)
    -y.equals(NaN)                   // false
    - - - -
    floor.floor() ⇒ BigNumber
    -

    - Returns a BigNumber whose value is the value of this BigNumber rounded to a whole number in - the direction of negative Infinity. -

    -
    -x = new BigNumber(1.8)
    -x.floor()                       // '1'
    -y = new BigNumber(-1.3)
    -y.floor()                       // '-2'
    - - - -
    greaterThan.gt(n [, base]) ⇒ boolean
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    - Returns true if the value of this BigNumber is greater than the value of - n, otherwise returns false. -

    -

    Note: This method uses the comparedTo method internally.

    -
    -0.1 > (0.3 - 0.2)                           // true
    -x = new BigNumber(0.1)
    -x.greaterThan(BigNumber(0.3).minus(0.2))    // false
    -BigNumber(0).gt(x)                          // false
    -BigNumber(11, 3).gt(11.1, 2)                // true
    - - - -
    - greaterThanOrEqualTo.gte(n [, base]) ⇒ boolean -
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    - Returns true if the value of this BigNumber is greater than or equal to the value - of n, otherwise returns false. -

    -

    Note: This method uses the comparedTo method internally.

    -
    -(0.3 - 0.2) >= 0.1                   // false
    -x = new BigNumber(0.3).minus(0.2)
    -x.greaterThanOrEqualTo(0.1)          // true
    -BigNumber(1).gte(x)                  // true
    -BigNumber(10, 18).gte('i', 36)       // true
    - - - -
    isFinite.isFinite() ⇒ boolean
    -

    - Returns true if the value of this BigNumber is a finite number, otherwise - returns false. -

    -

    - The only possible non-finite values of a BigNumber are NaN, Infinity - and -Infinity. -

    -
    -x = new BigNumber(1)
    -x.isFinite()                    // true
    -y = new BigNumber(Infinity)
    -y.isFinite()                    // false
    -

    - Note: The native method isFinite() can be used if - n <= Number.MAX_VALUE. -

    - - - -
    isInteger.isInt() ⇒ boolean
    -

    - Returns true if the value of this BigNumber is a whole number, otherwise returns - false. -

    -
    -x = new BigNumber(1)
    -x.isInteger()                   // true
    -y = new BigNumber(123.456)
    -y.isInt()                       // false
    - - - -
    isNaN.isNaN() ⇒ boolean
    -

    - Returns true if the value of this BigNumber is NaN, otherwise - returns false. -

    -
    -x = new BigNumber(NaN)
    -x.isNaN()                       // true
    -y = new BigNumber('Infinity')
    -y.isNaN()                       // false
    -

    Note: The native method isNaN() can also be used.

    - - - -
    isNegative.isNeg() ⇒ boolean
    -

    - Returns true if the value of this BigNumber is negative, otherwise returns - false. -

    -
    -x = new BigNumber(-0)
    -x.isNegative()                  // true
    -y = new BigNumber(2)
    -y.isNeg                         // false
    -

    Note: n < 0 can be used if n <= -Number.MIN_VALUE.

    - - - -
    isZero.isZero() ⇒ boolean
    -

    - Returns true if the value of this BigNumber is zero or minus zero, otherwise - returns false. -

    -
    -x = new BigNumber(-0)
    -x.isZero() && x.isNeg()         // true
    -y = new BigNumber(Infinity)
    -y.isZero()                      // false
    -

    Note: n == 0 can be used if n >= Number.MIN_VALUE.

    - - - -
    lessThan.lt(n [, base]) ⇒ boolean
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    - Returns true if the value of this BigNumber is less than the value of - n, otherwise returns false. -

    -

    Note: This method uses the comparedTo method internally.

    -
    -(0.3 - 0.2) < 0.1                     // true
    -x = new BigNumber(0.3).minus(0.2)
    -x.lessThan(0.1)                       // false
    -BigNumber(0).lt(x)                    // true
    -BigNumber(11.1, 2).lt(11, 3)          // true
    - - - -
    - lessThanOrEqualTo.lte(n [, base]) ⇒ boolean -
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    - Returns true if the value of this BigNumber is less than or equal to the value of - n, otherwise returns false. -

    -

    Note: This method uses the comparedTo method internally.

    -
    -0.1 <= (0.3 - 0.2)                                // false
    -x = new BigNumber(0.1)
    -x.lessThanOrEqualTo(BigNumber(0.3).minus(0.2))    // true
    -BigNumber(-1).lte(x)                              // true
    -BigNumber(10, 18).lte('i', 36)                    // true
    - - - -
    - minus.minus(n [, base]) ⇒ BigNumber -
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    Returns a BigNumber whose value is the value of this BigNumber minus n.

    -

    The return value is always exact and unrounded.

    -
    -0.3 - 0.1                       // 0.19999999999999998
    -x = new BigNumber(0.3)
    -x.minus(0.1)                    // '0.2'
    -x.minus(0.6, 20)                // '0'
    - - - -
    modulo.mod(n [, base]) ⇒ BigNumber
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    - Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. - the integer remainder of dividing this BigNumber by n. -

    -

    - The value returned, and in particular its sign, is dependent on the value of the - MODULO_MODE setting of this BigNumber constructor. - If it is 1 (default value), the result will have the same sign as this BigNumber, - and it will match that of Javascript's % operator (within the limits of double - precision) and BigDecimal's remainder method. -

    -

    The return value is always exact and unrounded.

    -

    - See MODULO_MODE for a description of the other - modulo modes. -

    -
    -1 % 0.9                         // 0.09999999999999998
    -x = new BigNumber(1)
    -x.modulo(0.9)                   // '0.1'
    -y = new BigNumber(33)
    -y.mod('a', 33)                  // '3'
    - - - -
    negated.neg() ⇒ BigNumber
    -

    - Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by - -1. -

    -
    -x = new BigNumber(1.8)
    -x.negated()                     // '-1.8'
    -y = new BigNumber(-1.3)
    -y.neg()                         // '1.3'
    - - - -
    plus.plus(n [, base]) ⇒ BigNumber
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    Returns a BigNumber whose value is the value of this BigNumber plus n.

    -

    The return value is always exact and unrounded.

    -
    -0.1 + 0.2                       // 0.30000000000000004
    -x = new BigNumber(0.1)
    -y = x.plus(0.2)                 // '0.3'
    -BigNumber(0.7).plus(x).plus(y)  // '1'
    -x.plus('0.1', 8)                // '0.225'
    - - - -
    precision.sd([z]) ⇒ number
    -

    - z: boolean|number: true, false, 0 - or 1 -

    -

    Returns the number of significant digits of the value of this BigNumber.

    -

    - If z is true or 1 then any trailing zeros of the - integer part of a number are counted as significant digits, otherwise they are not. -

    -
    -x = new BigNumber(1.234)
    -x.precision()                   // 4
    -y = new BigNumber(987000)
    -y.sd()                          // 3
    -y.sd(true)                      // 6
    - - - -
    round.round([dp [, rm]]) ⇒ BigNumber
    -

    - dp: number: integer, 0 to 1e+9 inclusive
    - rm: number: integer, 0 to 8 inclusive -

    -

    - Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - rm to a maximum of dp decimal places. -

    -

    - if dp is omitted, or is null or undefined, the - return value is n rounded to a whole number.
    - if rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

    -

    - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

    -
    -x = 1234.56
    -Math.round(x)                             // 1235
    -
    -y = new BigNumber(x)
    -y.round()                                 // '1235'
    -y.round(1)                                // '1234.6'
    -y.round(2)                                // '1234.56'
    -y.round(10)                               // '1234.56'
    -y.round(0, 1)                             // '1234'
    -y.round(0, 6)                             // '1235'
    -y.round(1, 1)                             // '1234.5'
    -y.round(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
    -y                                         // '1234.56'
    - - - -
    shift.shift(n) ⇒ BigNumber
    -

    - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

    -

    - Returns a BigNumber whose value is the value of this BigNumber shifted n places. -

    - The shift is of the decimal point, i.e. of powers of ten, and is to the left if n - is negative or to the right if n is positive. -

    -

    The return value is always exact and unrounded.

    -
    -x = new BigNumber(1.23)
    -x.shift(3)                      // '1230'
    -x.shift(-3)                     // '0.00123'
    - - - -
    squareRoot.sqrt() ⇒ BigNumber
    -

    - Returns a BigNumber whose value is the square root of the value of this BigNumber, - rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

    -

    - The return value will be correctly rounded, i.e. rounded as if the result was first calculated - to an infinite number of correct digits before rounding. -

    -
    -x = new BigNumber(16)
    -x.squareRoot()                  // '4'
    -y = new BigNumber(3)
    -y.sqrt()                        // '1.73205080756887729353'
    - - - -
    times.times(n [, base]) ⇒ BigNumber
    -

    - n: number|string|BigNumber
    - base: number
    - See BigNumber for further parameter details. -

    -

    Returns a BigNumber whose value is the value of this BigNumber times n.

    -

    The return value is always exact and unrounded.

    -
    -0.6 * 3                         // 1.7999999999999998
    -x = new BigNumber(0.6)
    -y = x.times(3)                  // '1.8'
    -BigNumber('7e+500').times(y)    // '1.26e+501'
    -x.times('-a', 16)               // '-6'
    - - - -
    - toDigits.toDigits([sd [, rm]]) ⇒ BigNumber -
    -

    - sd: number: integer, 1 to 1e+9 inclusive.
    - rm: number: integer, 0 to 8 inclusive. -

    -

    - Returns a BigNumber whose value is the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

    -

    - If sd is omitted or is null or undefined, the return - value will not be rounded.
    - If rm is omitted or is null or undefined, - ROUNDING_MODE will be used. -

    -

    - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

    -
    -BigNumber.config({ precision: 5, rounding: 4 })
    -x = new BigNumber(9876.54321)
    -
    -x.toSignificantDigits()                          // '9876.5'
    -x.toSignificantDigits(6)                         // '9876.54'
    -x.toSignificantDigits(6, BigNumber.ROUND_UP)     // '9876.55'
    -x.toSD(2)                                        // '9900'
    -x.toSD(2, 1)                                     // '9800'
    -x                                                // '9876.54321'
    - - - -
    - toExponential.toExponential([dp [, rm]]) ⇒ string -
    -

    - dp: number: integer, 0 to 1e+9 inclusive
    - rm: number: integer, 0 to 8 inclusive -

    -

    - Returns a string representing the value of this BigNumber in exponential notation rounded - using rounding mode rm to dp decimal places, i.e with one digit - before the decimal point and dp digits after it. -

    -

    - If the value of this BigNumber in exponential notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

    -

    - If dp is omitted, or is null or undefined, the number - of digits after the decimal point defaults to the minimum number of digits necessary to - represent the value exactly.
    - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

    -

    - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

    -
    -x = 45.6
    -y = new BigNumber(x)
    -x.toExponential()               // '4.56e+1'
    -y.toExponential()               // '4.56e+1'
    -x.toExponential(0)              // '5e+1'
    -y.toExponential(0)              // '5e+1'
    -x.toExponential(1)              // '4.6e+1'
    -y.toExponential(1)              // '4.6e+1'
    -y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
    -x.toExponential(3)              // '4.560e+1'
    -y.toExponential(3)              // '4.560e+1'
    - - - -
    - toFixed.toFixed([dp [, rm]]) ⇒ string -
    -

    - dp: number: integer, 0 to 1e+9 inclusive
    - rm: number: integer, 0 to 8 inclusive -

    -

    - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm. -

    -

    - If the value of this BigNumber in normal notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

    -

    - Unlike Number.prototype.toFixed, which returns exponential notation if a number - is greater or equal to 1021, this method will always return normal - notation. -

    -

    - If dp is omitted or is null or undefined, the return - value will be unrounded and in normal notation. This is also unlike - Number.prototype.toFixed, which returns the value to zero decimal places.
    - It is useful when fixed-point notation is required and the current - EXPONENTIAL_AT setting causes - toString to return exponential notation.
    - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

    -

    - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

    -
    -x = 3.456
    -y = new BigNumber(x)
    -x.toFixed()                     // '3'
    -y.toFixed()                     // '3.456'
    -y.toFixed(0)                    // '3'
    -x.toFixed(2)                    // '3.46'
    -y.toFixed(2)                    // '3.46'
    -y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
    -x.toFixed(5)                    // '3.45600'
    -y.toFixed(5)                    // '3.45600'
    - - - -
    - toFormat.toFormat([dp [, rm]]) ⇒ string -
    -

    - dp: number: integer, 0 to 1e+9 inclusive
    - rm: number: integer, 0 to 8 inclusive -

    -

    -

    - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm, and formatted - according to the properties of the FORMAT object. -

    -

    - See the examples below for the properties of the - FORMAT object, their types and their usage. -

    -

    - If dp is omitted or is null or undefined, then the - return value is not rounded to a fixed number of decimal places.
    - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

    -

    - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

    -
    -format = {
    -    decimalSeparator: '.',
    -    groupSeparator: ',',
    -    groupSize: 3,
    -    secondaryGroupSize: 0,
    -    fractionGroupSeparator: ' ',
    -    fractionGroupSize: 0
    -}
    -BigNumber.config({ FORMAT: format })
    -
    -x = new BigNumber('123456789.123456789')
    -x.toFormat()                    // '123,456,789.123456789'
    -x.toFormat(1)                   // '123,456,789.1'
    -
    -// If a reference to the object assigned to FORMAT has been retained,
    -// the format properties can be changed directly
    -format.groupSeparator = ' '
    -format.fractionGroupSize = 5
    -x.toFormat()                    // '123 456 789.12345 6789'
    -
    -BigNumber.config({
    -    FORMAT: {
    -        decimalSeparator = ',',
    -        groupSeparator = '.',
    -        groupSize = 3,
    -        secondaryGroupSize = 2
    -    }
    -})
    -
    -x.toFormat(6)                   // '12.34.56.789,123'
    - - - -
    - toFraction.toFraction([max]) ⇒ [string, string] -
    -

    - max: number|string|BigNumber: integer >= 1 and < - Infinity -

    -

    - Returns a string array representing the value of this BigNumber as a simple fraction with an - integer numerator and an integer denominator. The denominator will be a positive non-zero - value less than or equal to max. -

    -

    - If a maximum denominator, max, is not specified, or is null or - undefined, the denominator will be the lowest value necessary to represent the - number exactly. -

    -

    - See Errors for the treatment of other non-integer or out of range - max values. -

    -
    -x = new BigNumber(1.75)
    -x.toFraction()                  // '7, 4'
    -
    -pi = new BigNumber('3.14159265358')
    -pi.toFraction()                 // '157079632679,50000000000'
    -pi.toFraction(100000)           // '312689, 99532'
    -pi.toFraction(10000)            // '355, 113'
    -pi.toFraction(100)              // '311, 99'
    -pi.toFraction(10)               // '22, 7'
    -pi.toFraction(1)                // '3, 1'
    - - - -
    toJSON.toJSON() ⇒ string
    -

    As valueOf.

    -
    -x = new BigNumber('177.7e+457')
    -y = new BigNumber(235.4325)
    -z = new BigNumber('0.0098074')
    -
    -// Serialize an array of three BigNumbers
    -str = JSON.stringify( [x, y, z] )
    -// "["1.777e+459","235.4325","0.0098074"]"
    -
    -// Return an array of three BigNumbers
    -JSON.parse(str, function (key, val) {
    -    return key === '' ? val : new BigNumber(val)
    -})
    - - - -
    toNumber.toNumber() ⇒ number
    -

    Returns the value of this BigNumber as a JavaScript number primitive.

    -

    - Type coercion with, for example, the unary plus operator will also work, except that a - BigNumber with the value minus zero will be converted to positive zero. -

    -
    -x = new BigNumber(456.789)
    -x.toNumber()                    // 456.789
    -+x                              // 456.789
    -
    -y = new BigNumber('45987349857634085409857349856430985')
    -y.toNumber()                    // 4.598734985763409e+34
    -
    -z = new BigNumber(-0)
    -1 / +z                          // Infinity
    -1 / z.toNumber()                // -Infinity
    - - - -
    toPower.pow(n) ⇒ BigNumber
    -

    - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

    -

    - Returns a BigNumber whose value is the value of this BigNumber raised to the power - n. -

    -

    - If n is negative the result is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

    -

    - If n is not an integer or is out of range: -

    -

    - If ERRORS is true a BigNumber Error is thrown,
    - else if n is greater than 9007199254740991, it is interpreted as - Infinity;
    - else if n is less than -9007199254740991, it is interpreted as - -Infinity;
    - else if n is otherwise a number, it is truncated to an integer;
    - else it is interpreted as NaN. -

    -

    - As the number of digits of the result of the power operation can grow so large so quickly, - e.g. 123.45610000 has over 50000 digits, the number of significant - digits calculated is limited to the value of the - POW_PRECISION setting (default value: - 100). -

    -

    - Set POW_PRECISION to 0 for an - unlimited number of significant digits to be calculated (this will cause the method to slow - dramatically for larger exponents). -

    -

    - Negative exponents will be calculated to the number of decimal places specified by - DECIMAL_PLACES (but not to more than - POW_PRECISION significant digits). -

    -
    -Math.pow(0.7, 2)                // 0.48999999999999994
    -x = new BigNumber(0.7)
    -x.toPower(2)                    // '0.49'
    -BigNumber(3).pow(-2)            // '0.11111111111111111111'
    - - - -
    - toPrecision.toPrecision([sd [, rm]]) ⇒ string -
    -

    - sd: number: integer, 1 to 1e+9 inclusive
    - rm: number: integer, 0 to 8 inclusive -

    -

    - Returns a string representing the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

    -

    - If sd is less than the number of digits necessary to represent the integer part - of the value in normal (fixed-point) notation, then exponential notation is used. -

    -

    - If sd is omitted, or is null or undefined, then the - return value is the same as n.toString().
    - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

    -

    - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

    -
    -x = 45.6
    -y = new BigNumber(x)
    -x.toPrecision()                 // '45.6'
    -y.toPrecision()                 // '45.6'
    -x.toPrecision(1)                // '5e+1'
    -y.toPrecision(1)                // '5e+1'
    -y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
    -y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
    -x.toPrecision(5)                // '45.600'
    -y.toPrecision(5)                // '45.600'
    - - - -
    toString.toString([base]) ⇒ string
    -

    base: number: integer, 2 to 64 inclusive

    -

    - Returns a string representing the value of this BigNumber in the specified base, or base - 10 if base is omitted or is null or - undefined. -

    -

    - For bases above 10, values from 10 to 35 are - represented by a-z (as with Number.prototype.toString), - 36 to 61 by A-Z, and 62 and - 63 by $ and _ respectively. -

    -

    - If a base is specified the value is rounded according to the current - DECIMAL_PLACES - and ROUNDING_MODE configuration. -

    -

    - If a base is not specified, and this BigNumber has a positive - exponent that is equal to or greater than the positive component of the - current EXPONENTIAL_AT setting, - or a negative exponent equal to or less than the negative component of the - setting, then exponential notation is returned. -

    -

    If base is null or undefined it is ignored.

    -

    - See Errors for the treatment of other non-integer or out of range - base values. -

    -
    -x = new BigNumber(750000)
    -x.toString()                    // '750000'
    -BigNumber.config({ EXPONENTIAL_AT: 5 })
    -x.toString()                    // '7.5e+5'
    -
    -y = new BigNumber(362.875)
    -y.toString(2)                   // '101101010.111'
    -y.toString(9)                   // '442.77777777777777777778'
    -y.toString(32)                  // 'ba.s'
    -
    -BigNumber.config({ DECIMAL_PLACES: 4 });
    -z = new BigNumber('1.23456789')
    -z.toString()                    // '1.23456789'
    -z.toString(10)                  // '1.2346'
    - - - -
    truncated.trunc() ⇒ BigNumber
    -

    - Returns a BigNumber whose value is the value of this BigNumber truncated to a whole number. -

    -
    -x = new BigNumber(123.456)
    -x.truncated()                   // '123'
    -y = new BigNumber(-12.3)
    -y.trunc()                       // '-12'
    - - - -
    valueOf.valueOf() ⇒ string
    -

    As toString, but does not accept a base argument.

    -
    -x = new BigNumber('1.777e+457')
    -x.valueOf()                     // '1.777e+457'
    - - - -

    Properties

    -

    A BigNumber is an object with three properties:

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    PropertyDescriptionTypeValue
    ccoefficient*number[] Array of base 1e14 numbers
    eexponentnumberInteger, -1000000000 to 1000000000 inclusive
    ssignnumber-1 or 1
    -

    *significand

    -

    The value of any of the three properties may also be null.

    -

    - From v2.0.0 of this library, the value of the coefficient of a BigNumber is stored in a - normalised base 100000000000000 floating point format, as opposed to the base - 10 format used in v1.x.x -

    -

    - This change means the properties of a BigNumber are now best considered to be read-only. - Previously it was acceptable to change the exponent of a BigNumber by writing to its exponent - property directly, but this is no longer recommended as the number of digits in the first - element of the coefficient array is dependent on the exponent, so the coefficient would also - need to be altered. -

    -

    - Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are - not necessarily preserved. -

    -
    x = new BigNumber(0.123)              // '0.123'
    -x.toExponential()                     // '1.23e-1'
    -x.c                                   // '1,2,3'
    -x.e                                   // -1
    -x.s                                   // 1
    -
    -y = new Number(-123.4567000e+2)       // '-12345.67'
    -y.toExponential()                     // '-1.234567e+4'
    -z = new BigNumber('-123.4567000e+2')  // '-12345.67'
    -z.toExponential()                     // '-1.234567e+4'
    -z.c                                   // '1,2,3,4,5,6,7'
    -z.e                                   // 4
    -z.s                                   // -1
    - - - -

    Zero, NaN and Infinity

    -

    - The table below shows how ±0, NaN and - ±Infinity are stored. -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    ces
    ±0[0]0±1
    NaNnullnullnull
    ±Infinitynullnull±1
    -
    -x = new Number(-0)              // 0
    -1 / x == -Infinity              // true
    -
    -y = new BigNumber(-0)           // '0'
    -y.c                             // '0' ( [0].toString() )
    -y.e                             // 0
    -y.s                             // -1
    - - - -

    Errors

    -

    - The errors that are thrown are generic Error objects with name - BigNumber Error. -

    -

    - The table below shows the errors that may be thrown if ERRORS is - true, and the action taken if ERRORS is false. -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Method(s)ERRORS: true
    Throw BigNumber Error
    ERRORS: false
    Action on invalid argument
    - - BigNumber
    - comparedTo
    - dividedBy
    - dividedToIntegerBy
    - equals
    - greaterThan
    - greaterThanOrEqualTo
    - lessThan
    - lessThanOrEqualTo
    - minus
    - modulo
    - plus
    - times -
    number type has more than
    15 significant digits
    Accept.
    not a base... numberSubstitute NaN.
    base not an integerTruncate to integer.
    Ignore if not a number.
    base out of rangeIgnore.
    not a number*Substitute NaN.
    anothernot an objectIgnore.
    configDECIMAL_PLACES not an integerTruncate to integer.
    Ignore if not a number.
    DECIMAL_PLACES out of rangeIgnore.
    ROUNDING_MODE not an integerTruncate to integer.
    Ignore if not a number.
    ROUNDING_MODE out of rangeIgnore.
    EXPONENTIAL_AT not an integer
    or not [integer, integer]
    Truncate to integer(s).
    Ignore if not number(s).
    EXPONENTIAL_AT out of range
    or not [negative, positive]
    Ignore.
    RANGE not an integer
    or not [integer, integer]
    Truncate to integer(s).
    Ignore if not number(s).
    RANGE cannot be zeroIgnore.
    RANGE out of range
    or not [negative, positive]
    Ignore.
    ERRORS not a boolean
    or binary digit
    Ignore.
    CRYPTO not a boolean
    or binary digit
    Ignore.
    CRYPTO crypto unavailableIgnore.
    MODULO_MODE not an integerTruncate to integer.
    Ignore if not a number.
    MODULO_MODE out of rangeIgnore.
    POW_PRECISION not an integerTruncate to integer.
    Ignore if not a number.
    POW_PRECISION out of rangeIgnore.
    FORMAT not an objectIgnore.
    precisionargument not a boolean
    or binary digit
    Ignore.
    rounddecimal places not an integerTruncate to integer.
    Ignore if not a number.
    decimal places out of rangeIgnore.
    rounding mode not an integerTruncate to integer.
    Ignore if not a number.
    rounding mode out of rangeIgnore.
    shiftargument not an integerTruncate to integer.
    Ignore if not a number.
    argument out of rangeSubstitute ±Infinity. -
    - toExponential
    - toFixed
    - toFormat -
    decimal places not an integerTruncate to integer.
    Ignore if not a number.
    decimal places out of rangeIgnore.
    rounding mode not an integerTruncate to integer.
    Ignore if not a number.
    rounding mode out of rangeIgnore.
    toFractionmax denominator not an integerTruncate to integer.
    Ignore if not a number.
    max denominator out of rangeIgnore.
    - toDigits
    - toPrecision -
    precision not an integerTruncate to integer.
    Ignore if not a number.
    precision out of rangeIgnore.
    rounding mode not an integerTruncate to integer.
    Ignore if not a number.
    rounding mode out of rangeIgnore.
    toPowerexponent not an integerTruncate to integer.
    Substitute NaN if not a number.
    exponent out of rangeSubstitute ±Infinity. -
    toStringbase not an integerTruncate to integer.
    Ignore if not a number.
    base out of rangeIgnore.
    -

    *No error is thrown if the value is NaN or 'NaN'.

    -

    - The message of a BigNumber Error will also contain the name of the method from which - the error originated. -

    -

    To determine if an exception is a BigNumber Error:

    -
    -try {
    -    // ...
    -} catch (e) {
    -    if ( e instanceof Error && e.name == 'BigNumber Error' ) {
    -        // ...
    -    }
    -}
    - - - -

    FAQ

    - -
    Why are trailing fractional zeros removed from BigNumbers?
    -

    - Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the - precision of a value. This can be useful but the results of arithmetic operations can be - misleading. -

    -
    -x = new BigDecimal("1.0")
    -y = new BigDecimal("1.1000")
    -z = x.add(y)                      // 2.1000
    -
    -x = new BigDecimal("1.20")
    -y = new BigDecimal("3.45000")
    -z = x.multiply(y)                 // 4.1400000
    -

    - To specify the precision of a value is to specify that the value lies - within a certain range. -

    -

    - In the first example, x has a value of 1.0. The trailing zero shows - the precision of the value, implying that it is in the range 0.95 to - 1.05. Similarly, the precision indicated by the trailing zeros of y - indicates that the value is in the range 1.09995 to 1.10005. -

    -

    - If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, - and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the - range of the result of the addition implied by the precision of its operands is - 2.04995 to 2.15005. -

    -

    - The result given by BigDecimal of 2.1000 however, indicates that the value is in - the range 2.09995 to 2.10005 and therefore the precision implied by - its trailing zeros may be misleading. -

    -

    - In the second example, the true range is 4.122744 to 4.157256 yet - the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 - to 4.14000005. Again, the precision implied by the trailing zeros may be - misleading. -

    -

    - This library, like binary floating point and most calculators, does not retain trailing - fractional zeros. Instead, the toExponential, toFixed and - toPrecision methods enable trailing zeros to be added if and when required.
    -

    -
    - - - diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/package.json b/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/package.json deleted file mode 100644 index 44d2e83..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/node_modules/bignumber.js/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_args": [ - [ - "bignumber.js@git+https://github.com/debris/bignumber.js.git#master", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc/node_modules/web3" - ] - ], - "_from": "git+https://github.com/debris/bignumber.js.git#master", - "_id": "bignumber.js@2.0.7", - "_inCache": true, - "_installable": true, - "_location": "/ethereumjs-testrpc/web3/bignumber.js", - "_phantomChildren": {}, - "_requested": { - "hosted": { - "directUrl": "https://raw.githubusercontent.com/debris/bignumber.js/master/package.json", - "gitUrl": "git://github.com/debris/bignumber.js.git#master", - "httpsUrl": "git+https://github.com/debris/bignumber.js.git#master", - "shortcut": "github:debris/bignumber.js#master", - "ssh": "git@github.com:debris/bignumber.js.git#master", - "sshUrl": "git+ssh://git@github.com/debris/bignumber.js.git#master", - "type": "github" - }, - "name": "bignumber.js", - "raw": "bignumber.js@git+https://github.com/debris/bignumber.js.git#master", - "rawSpec": "git+https://github.com/debris/bignumber.js.git#master", - "scope": null, - "spec": "git+https://github.com/debris/bignumber.js.git#master", - "type": "hosted" - }, - "_requiredBy": [ - "/ethereumjs-testrpc/web3" - ], - "_resolved": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "_shasum": "7b38eba2023f93693e1aa707114f1df4e9d6c29e", - "_shrinkwrap": null, - "_spec": "bignumber.js@git+https://github.com/debris/bignumber.js.git#master", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc/node_modules/web3", - "author": { - "email": "M8ch88l@gmail.com", - "name": "Michael Mclaughlin" - }, - "bugs": { - "url": "https://github.com/MikeMcl/bignumber.js/issues" - }, - "dependencies": {}, - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "devDependencies": {}, - "engines": { - "node": "*" - }, - "gitHead": "94d7146671b9719e00a09c29b01a691bc85048c2", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "main": "bignumber", - "name": "bignumber.js", - "optionalDependencies": {}, - "readme": "![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png)\n\nA JavaScript library for arbitrary-precision decimal and non-decimal arithmetic.\n\n[![Build Status](https://travis-ci.org/MikeMcl/bignumber.js.svg)](https://travis-ci.org/MikeMcl/bignumber.js)\n\n
    \n\n## Features\n\n - Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal\n - 8 KB minified and gzipped\n - Simple API but full-featured\n - Works with numbers with or without fraction digits in bases from 2 to 64 inclusive\n - Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type\n - Includes a `toFraction` and a correctly-rounded `squareRoot` method\n - Supports cryptographically-secure pseudo-random number generation\n - No dependencies\n - Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only\n - Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set\n\n![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png)\n\nIf a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/).\nIt's less than half the size but only works with decimal numbers and only has half the methods.\nIt also does not allow `NaN` or `Infinity`, or have the configuration options of this library.\n\nSee also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits.\n\n## Load\n\nThe library is the single JavaScript file *bignumber.js* (or minified, *bignumber.min.js*).\n\n```html\n\n```\n\nFor [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry\n\n $ npm install bignumber.js\n\n```javascript\nvar BigNumber = require('bignumber.js');\n```\n\nTo load with AMD loader libraries such as [requireJS](http://requirejs.org/):\n\n```javascript\nrequire(['path/to/bignumber'], function(BigNumber) { \n // Use BigNumber here in local scope. No global BigNumber.\n});\n```\n\n## Use\n\n*In all examples below, `var`, semicolons and `toString` calls are not shown.\nIf a commented-out value is in quotes it means `toString` has been called on the preceding expression.*\n\nThe library exports a single function: `BigNumber`, the constructor of BigNumber instances.\n\nIt accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object,\n\n```javascript\nx = new BigNumber(123.4567)\ny = BigNumber('123456.7e-3')\nz = new BigNumber(x)\nx.equals(y) && y.equals(z) && x.equals(z) // true\n```\n\n\nand a base from 2 to 64 inclusive can be specified.\n\n```javascript\nx = new BigNumber(1011, 2) // \"11\"\ny = new BigNumber('zz.9', 36) // \"1295.25\"\nz = x.plus(y) // \"1306.25\"\n```\n\nA BigNumber is immutable in the sense that it is not changed by its methods. \n\n```javascript\n0.3 - 0.1 // 0.19999999999999998 \nx = new BigNumber(0.3)\nx.minus(0.1) // \"0.2\"\nx // \"0.3\"\n```\n\nThe methods that return a BigNumber can be chained.\n\n```javascript\nx.dividedBy(y).plus(z).times(9).floor()\nx.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil()\n```\n\nMany method names have a shorter alias.\n\n```javascript\nx.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true\nx.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true\n```\n\nLike JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods\n\n```javascript\nx = new BigNumber(255.5)\nx.toExponential(5) // \"2.55500e+2\"\nx.toFixed(5) // \"255.50000\"\nx.toPrecision(5) // \"255.50\"\nx.toNumber() // 255.5\n```\n\n and a base can be specified for `toString`.\n\n ```javascript\n x.toString(16) // \"ff.8\"\n ```\n\nThere is also a `toFormat` method which may be useful for internationalisation\n\n```javascript\ny = new BigNumber('1234567.898765')\ny.toFormat(2) // \"1,234,567.90\"\n```\n\nThe maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor.\n\nThe other arithmetic operations always give the exact result.\n\n```javascript\nBigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 })\n// Alternatively, BigNumber.config( 10, 4 );\n\nx = new BigNumber(2);\ny = new BigNumber(3);\nz = x.div(y) // \"0.6666666667\"\nz.sqrt() // \"0.8164965809\"\nz.pow(-3) // \"3.3749999995\"\nz.toString(2) // \"0.1010101011\"\nz.times(z) // \"0.44444444448888888889\"\nz.times(z).round(10) // \"0.4444444445\"\n```\n\nThere is a `toFraction` method with an optional *maximum denominator* argument\n\n```javascript\ny = new BigNumber(355)\npi = y.dividedBy(113) // \"3.1415929204\"\npi.toFraction() // [ \"7853982301\", \"2500000000\" ]\npi.toFraction(1000) // [ \"355\", \"113\" ]\n```\n\nand `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values.\n\n```javascript\nx = new BigNumber(NaN) // \"NaN\"\ny = new BigNumber(Infinity) // \"Infinity\"\nx.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true\n```\n\nThe value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign.\n\n\n```javascript\nx = new BigNumber(-123.456);\nx.c // [ 123, 45600000000000 ] coefficient (i.e. significand)\nx.e // 2 exponent\nx.s // -1 sign\n```\n\n\nMultiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it.\n\n```javascript\n// Set DECIMAL_PLACES for the original BigNumber constructor\nBigNumber.config({ DECIMAL_PLACES: 10 })\n\n// Create another BigNumber constructor, optionally passing in a configuration object\nBN = BigNumber.another({ DECIMAL_PLACES: 5 })\n\nx = new BigNumber(1)\ny = new BN(1)\n\nx.div(3) // '0.3333333333'\ny.div(3) // '0.33333'\n```\n\nFor futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory.\n\n## Test\n\nThe *test* directory contains the test scripts for each method.\n\nThe tests can be run with Node or a browser. For Node use\n\n $ npm test\n\nor\n\n $ node test/every-test\n\nTo test a single method, e.g.\n\n $ node test/toFraction\n\nFor the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. \n\n*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. \n\n## Versions\n\nThis is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported.\n\n## Performance\n\nSee the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory.\n\n## Build\n\nFor Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed\n\n npm install uglify-js -g\n\nthen\n\n npm run build\n\nwill create *bignumber.min.js*.\n\nA source map will also be created in the root directory.\n\n## Feedback\n\nOpen an issue, or email \n\nMichael\n\nM8ch88l@gmail.com\n\n## Licence\n\nMIT.\n\nSee [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE).\n\n## Change Log\n\n####2.0.6\n* 31/03/2015\n* Add bower.json. Tweak division after in-depth review.\n\n####2.0.5\n* 25/03/2015\n* Amend README. Remove bitcoin address.\n\n####2.0.4\n* 25/03/2015\n* Critical bugfix #58: division.\n\n####2.0.3\n* 18/02/2015\n* Amend README. Add source map.\n\n####2.0.2\n* 18/02/2015\n* Correct links.\n\n####2.0.1\n* 18/02/2015\n* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods.\n* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`.\n* Add an `another` method to enable multiple independent constructors to be created.\n* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`.\n* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`.\n* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified.\n* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified.\n* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited.\n* Improve code quality.\n* Improve documentation.\n\n####2.0.0\n* 29/12/2014\n* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods.\n* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`.\n* Store a BigNumber's coefficient in base 1e14, rather than base 10.\n* Add fast path for integers to BigNumber constructor.\n* Incorporate the library into the online documentation.\n\n####1.5.0\n* 13/11/2014\n* Add `toJSON` and `decimalPlaces` methods.\n\n####1.4.1\n* 08/06/2014\n* Amend README.\n\n####1.4.0\n* 08/05/2014\n* Add `toNumber`.\n\n####1.3.0\n* 08/11/2013\n* Ensure correct rounding of `sqrt` in all, rather than almost all, cases.\n* Maximum radix to 64.\n\n####1.2.1\n* 17/10/2013\n* Sign of zero when x < 0 and x + (-x) = 0.\n\n####1.2.0\n* 19/9/2013\n* Throw Error objects for stack.\n\n####1.1.1\n* 22/8/2013\n* Show original value in constructor error message.\n\n####1.1.0\n* 1/8/2013\n* Allow numbers with trailing radix point. \n\n####1.0.1\n* Bugfix: error messages with incorrect method name\n\n####1.0.0\n* 8/11/2012\n* Initial release\n", - "readmeFilename": "README.md", - "repository": { - "type": "git", - "url": "git+https://github.com/MikeMcl/bignumber.js.git" - }, - "scripts": { - "build": "uglifyjs bignumber.js --source-map bignumber.js.map -c -m -o bignumber.min.js --preamble \"/* bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */\"", - "test": "node ./test/every-test.js" - }, - "version": "2.0.7" -} diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/package-init.js b/node_modules/ethereumjs-testrpc/node_modules/web3/package-init.js deleted file mode 100644 index 92e6a4a..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/package-init.js +++ /dev/null @@ -1,17 +0,0 @@ -/* jshint ignore:start */ - - -// Browser environment -if(typeof window !== 'undefined') { - Web3 = (typeof window.Web3 !== 'undefined') ? window.Web3 : require('web3'); - BigNumber = (typeof window.BigNumber !== 'undefined') ? window.BigNumber : require('bignumber.js'); -} - - -// Node environment -if(typeof global !== 'undefined') { - Web3 = (typeof global.Web3 !== 'undefined') ? global.Web3 : require('web3'); - BigNumber = (typeof global.BigNumber !== 'undefined') ? global.BigNumber : require('bignumber.js'); -} - -/* jshint ignore:end */ \ No newline at end of file diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/package.js b/node_modules/ethereumjs-testrpc/node_modules/web3/package.js deleted file mode 100644 index 68816e2..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/package.js +++ /dev/null @@ -1,33 +0,0 @@ -/* jshint ignore:start */ -Package.describe({ - name: 'ethereum:web3', - version: '0.16.0', - summary: 'Ethereum JavaScript API, middleware to talk to a ethreum node over RPC', - git: 'https://github.com/ethereum/ethereum.js', - // By default, Meteor will default to using README.md for documentation. - // To avoid submitting documentation, set this field to null. - documentation: 'README.md' -}); - -Npm.depends({ - "xmlhttprequest": "1.7.0" -}); - - -Package.onUse(function(api) { - api.versionsFrom('1.0.3.2'); - - // api.use('3stack:bignumber@2.0.0', 'client'); - - api.export(['Web3', 'BigNumber'], ['client', 'server']); - - api.addFiles('dist/web3.js', ['client', 'server']); - api.addFiles('package-init.js', ['client', 'server']); -}); - -// Package.onTest(function(api) { -// api.use('tinytest'); -// api.use('test'); -// api.addFiles('test-tests.js'); -// }); -/* jshint ignore:end */ diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/package.json b/node_modules/ethereumjs-testrpc/node_modules/web3/package.json deleted file mode 100644 index ca78c96..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/package.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "_args": [ - [ - "web3@^0.16.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "web3@>=0.16.0 <0.17.0", - "_id": "web3@0.16.0", - "_inCache": true, - "_installable": true, - "_location": "/ethereumjs-testrpc/web3", - "_nodeVersion": "4.2.4", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/web3-0.16.0.tgz_1463064516913_0.17618103325366974" - }, - "_npmUser": { - "email": "fabian@frozeman.de", - "name": "frozeman" - }, - "_npmVersion": "2.14.12", - "_phantomChildren": {}, - "_requested": { - "name": "web3", - "raw": "web3@^0.16.0", - "rawSpec": "^0.16.0", - "scope": null, - "spec": ">=0.16.0 <0.17.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc" - ], - "_resolved": "https://registry.npmjs.org/web3/-/web3-0.16.0.tgz", - "_shasum": "a4554175cd462943035b1f1d39432f741c6b6019", - "_shrinkwrap": null, - "_spec": "web3@^0.16.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "name": "ethdev.com" - }, - "authors": [ - { - "email": "marek@ethdev.com", - "name": "Marek Kotewicz", - "url": "https://github.com/debris" - }, - { - "email": "fabian@ethdev.com", - "homepage": "http://frozeman.de", - "name": "Fabian Vogelsteller" - }, - { - "email": "marian@ethdev.com", - "name": "Marian Oancea", - "url": "https://github.com/cubedro" - }, - { - "email": "g@ethdev.com", - "homepage": "http://gavwood.com", - "name": "Gav Wood" - }, - { - "email": "jeff@ethdev.com", - "name": "Jeffery Wilcke", - "url": "https://github.com/obscuren" - } - ], - "browser": { - "xmlhttprequest": "./lib/utils/browser-xhr.js" - }, - "bugs": { - "url": "https://github.com/ethereum/web3.js/issues" - }, - "dependencies": { - "bignumber.js": "git+https://github.com/debris/bignumber.js.git#master", - "crypto-js": "^3.1.4", - "utf8": "^2.1.1", - "xmlhttprequest": "*" - }, - "description": "Ethereum JavaScript API, middleware to talk to a ethereum node over RPC", - "devDependencies": { - "bower": ">=1.4.1", - "browserify": ">=10.0", - "chai": "^3.0.0", - "coveralls": "^2.11.2", - "del": ">=2.0.2", - "exorcist": "^0.4.0", - "gulp": ">=3.9.0", - "gulp-jshint": ">=1.5.0", - "gulp-rename": ">=1.2.0", - "gulp-replace": "^0.5.3", - "gulp-streamify": "0.0.5", - "gulp-uglify": ">=1.2.0", - "istanbul": "^0.3.5", - "jshint": ">=2.5.0", - "mocha": ">=2.3.3", - "sandboxed-module": "^2.0.2", - "vinyl-source-stream": "^1.1.0" - }, - "directories": { - "lib": "./lib" - }, - "dist": { - "shasum": "a4554175cd462943035b1f1d39432f741c6b6019", - "tarball": "https://registry.npmjs.org/web3/-/web3-0.16.0.tgz" - }, - "gitHead": "35a06d36d4569517e14cd58a0d602acb7a3be864", - "homepage": "https://github.com/ethereum/web3.js", - "keywords": [ - "ethereum", - "javascript", - "API" - ], - "license": "LGPL-3.0", - "main": "./index.js", - "maintainers": [ - { - "email": "marek.kotewicz@gmail.com", - "name": "debris" - }, - { - "email": "fabian@frozeman.de", - "name": "frozeman" - } - ], - "name": "web3", - "namespace": "ethereum", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ethereum/web3.js.git" - }, - "scripts": { - "build": "gulp", - "lint": "jshint *.js lib", - "test": "mocha", - "test-coveralls": "istanbul cover _mocha -- -R spec && cat coverage/lcov.info | coveralls --verbose", - "watch": "gulp watch" - }, - "version": "0.16.0" -} diff --git a/node_modules/ethereumjs-testrpc/node_modules/web3/styleguide.md b/node_modules/ethereumjs-testrpc/node_modules/web3/styleguide.md deleted file mode 100644 index 9140ca9..0000000 --- a/node_modules/ethereumjs-testrpc/node_modules/web3/styleguide.md +++ /dev/null @@ -1,1741 +0,0 @@ -[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) - -# Airbnb JavaScript Style Guide() { - -*A mostly reasonable approach to JavaScript* - - -## Table of Contents - - 1. [Types](#types) - 1. [Objects](#objects) - 1. [Arrays](#arrays) - 1. [Strings](#strings) - 1. [Functions](#functions) - 1. [Properties](#properties) - 1. [Variables](#variables) - 1. [Hoisting](#hoisting) - 1. [Comparison Operators & Equality](#comparison-operators--equality) - 1. [Blocks](#blocks) - 1. [Comments](#comments) - 1. [Whitespace](#whitespace) - 1. [Commas](#commas) - 1. [Semicolons](#semicolons) - 1. [Type Casting & Coercion](#type-casting--coercion) - 1. [Naming Conventions](#naming-conventions) - 1. [Accessors](#accessors) - 1. [Constructors](#constructors) - 1. [Events](#events) - 1. [Modules](#modules) - 1. [jQuery](#jquery) - 1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility) - 1. [Testing](#testing) - 1. [Performance](#performance) - 1. [Resources](#resources) - 1. [In the Wild](#in-the-wild) - 1. [Translation](#translation) - 1. [The JavaScript Style Guide Guide](#the-javascript-style-guide-guide) - 1. [Chat With Us About Javascript](#chat-with-us-about-javascript) - 1. [Contributors](#contributors) - 1. [License](#license) - -## Types - - - **Primitives**: When you access a primitive type you work directly on its value. - - + `string` - + `number` - + `boolean` - + `null` - + `undefined` - - ```javascript - var foo = 1; - var bar = foo; - - bar = 9; - - console.log(foo, bar); // => 1, 9 - ``` - - **Complex**: When you access a complex type you work on a reference to its value. - - + `object` - + `array` - + `function` - - ```javascript - var foo = [1, 2]; - var bar = foo; - - bar[0] = 9; - - console.log(foo[0], bar[0]); // => 9, 9 - ``` - -**[⬆ back to top](#table-of-contents)** - -## Objects - - - Use the literal syntax for object creation. - - ```javascript - // bad - var item = new Object(); - - // good - var item = {}; - ``` - - - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). - - ```javascript - // bad - var superman = { - default: { clark: 'kent' }, - private: true - }; - - // good - var superman = { - defaults: { clark: 'kent' }, - hidden: true - }; - ``` - - - Use readable synonyms in place of reserved words. - - ```javascript - // bad - var superman = { - class: 'alien' - }; - - // bad - var superman = { - klass: 'alien' - }; - - // good - var superman = { - type: 'alien' - }; - ``` - -**[⬆ back to top](#table-of-contents)** - -## Arrays - - - Use the literal syntax for array creation. - - ```javascript - // bad - var items = new Array(); - - // good - var items = []; - ``` - - - Use Array#push instead of direct assignment to add items to an array. - - ```javascript - var someStack = []; - - - // bad - someStack[someStack.length] = 'abracadabra'; - - // good - someStack.push('abracadabra'); - ``` - - - When you need to copy an array use Array#slice. [jsPerf](http://jsperf.com/converting-arguments-to-an-array/7) - - ```javascript - var len = items.length; - var itemsCopy = []; - var i; - - // bad - for (i = 0; i < len; i++) { - itemsCopy[i] = items[i]; - } - - // good - itemsCopy = items.slice(); - ``` - - - To convert an array-like object to an array, use Array#slice. - - ```javascript - function trigger() { - var args = Array.prototype.slice.call(arguments); - ... - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Strings - - - Use single quotes `''` for strings. - - ```javascript - // bad - var name = "Bob Parr"; - - // good - var name = 'Bob Parr'; - - // bad - var fullName = "Bob " + this.lastName; - - // good - var fullName = 'Bob ' + this.lastName; - ``` - - - Strings longer than 80 characters should be written across multiple lines using string concatenation. - - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40). - - ```javascript - // bad - var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.'; - - // bad - var errorMessage = 'This is a super long error that was thrown because \ - of Batman. When you stop to think about how Batman had anything to do \ - with this, you would get nowhere \ - fast.'; - - // good - var errorMessage = 'This is a super long error that was thrown because ' + - 'of Batman. When you stop to think about how Batman had anything to do ' + - 'with this, you would get nowhere fast.'; - ``` - - - When programmatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2). - - ```javascript - var items; - var messages; - var length; - var i; - - messages = [{ - state: 'success', - message: 'This one worked.' - }, { - state: 'success', - message: 'This one worked as well.' - }, { - state: 'error', - message: 'This one did not work.' - }]; - - length = messages.length; - - // bad - function inbox(messages) { - items = '
      '; - - for (i = 0; i < length; i++) { - items += '
    • ' + messages[i].message + '
    • '; - } - - return items + '
    '; - } - - // good - function inbox(messages) { - items = []; - - for (i = 0; i < length; i++) { - // use direct assignment in this case because we're micro-optimizing. - items[i] = '
  • ' + messages[i].message + '
  • '; - } - - return '
      ' + items.join('') + '
    '; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Functions - - - Function expressions: - - ```javascript - // anonymous function expression - var anonymous = function() { - return true; - }; - - // named function expression - var named = function named() { - return true; - }; - - // immediately-invoked function expression (IIFE) - (function() { - console.log('Welcome to the Internet. Please follow me.'); - })(); - ``` - - - Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. - - **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97). - - ```javascript - // bad - if (currentUser) { - function test() { - console.log('Nope.'); - } - } - - // good - var test; - if (currentUser) { - test = function test() { - console.log('Yup.'); - }; - } - ``` - - - Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope. - - ```javascript - // bad - function nope(name, options, arguments) { - // ...stuff... - } - - // good - function yup(name, options, args) { - // ...stuff... - } - ``` - -**[⬆ back to top](#table-of-contents)** - - - -## Properties - - - Use dot notation when accessing properties. - - ```javascript - var luke = { - jedi: true, - age: 28 - }; - - // bad - var isJedi = luke['jedi']; - - // good - var isJedi = luke.jedi; - ``` - - - Use subscript notation `[]` when accessing properties with a variable. - - ```javascript - var luke = { - jedi: true, - age: 28 - }; - - function getProp(prop) { - return luke[prop]; - } - - var isJedi = getProp('jedi'); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Variables - - - Always use `var` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. - - ```javascript - // bad - superPower = new SuperPower(); - - // good - var superPower = new SuperPower(); - ``` - - - Use one `var` declaration per variable. - It's easier to add new variable declarations this way, and you never have - to worry about swapping out a `;` for a `,` or introducing punctuation-only - diffs. - - ```javascript - // bad - var items = getItems(), - goSportsTeam = true, - dragonball = 'z'; - - // bad - // (compare to above, and try to spot the mistake) - var items = getItems(), - goSportsTeam = true; - dragonball = 'z'; - - // good - var items = getItems(); - var goSportsTeam = true; - var dragonball = 'z'; - ``` - - - Declare unassigned variables last. This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables. - - ```javascript - // bad - var i, len, dragonball, - items = getItems(), - goSportsTeam = true; - - // bad - var i; - var items = getItems(); - var dragonball; - var goSportsTeam = true; - var len; - - // good - var items = getItems(); - var goSportsTeam = true; - var dragonball; - var length; - var i; - ``` - - - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues. - - ```javascript - // bad - function() { - test(); - console.log('doing stuff..'); - - //..other stuff.. - - var name = getName(); - - if (name === 'test') { - return false; - } - - return name; - } - - // good - function() { - var name = getName(); - - test(); - console.log('doing stuff..'); - - //..other stuff.. - - if (name === 'test') { - return false; - } - - return name; - } - - // bad - unnecessary function call - function() { - var name = getName(); - - if (!arguments.length) { - return false; - } - - this.setFirstName(name); - - return true; - } - - // good - function() { - var name; - - if (!arguments.length) { - return false; - } - - name = getName(); - this.setFirstName(name); - - return true; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Hoisting - - - Variable declarations get hoisted to the top of their scope, but their assignment does not. - - ```javascript - // we know this wouldn't work (assuming there - // is no notDefined global variable) - function example() { - console.log(notDefined); // => throws a ReferenceError - } - - // creating a variable declaration after you - // reference the variable will work due to - // variable hoisting. Note: the assignment - // value of `true` is not hoisted. - function example() { - console.log(declaredButNotAssigned); // => undefined - var declaredButNotAssigned = true; - } - - // The interpreter is hoisting the variable - // declaration to the top of the scope, - // which means our example could be rewritten as: - function example() { - var declaredButNotAssigned; - console.log(declaredButNotAssigned); // => undefined - declaredButNotAssigned = true; - } - ``` - - - Anonymous function expressions hoist their variable name, but not the function assignment. - - ```javascript - function example() { - console.log(anonymous); // => undefined - - anonymous(); // => TypeError anonymous is not a function - - var anonymous = function() { - console.log('anonymous function expression'); - }; - } - ``` - - - Named function expressions hoist the variable name, not the function name or the function body. - - ```javascript - function example() { - console.log(named); // => undefined - - named(); // => TypeError named is not a function - - superPower(); // => ReferenceError superPower is not defined - - var named = function superPower() { - console.log('Flying'); - }; - } - - // the same is true when the function name - // is the same as the variable name. - function example() { - console.log(named); // => undefined - - named(); // => TypeError named is not a function - - var named = function named() { - console.log('named'); - } - } - ``` - - - Function declarations hoist their name and the function body. - - ```javascript - function example() { - superPower(); // => Flying - - function superPower() { - console.log('Flying'); - } - } - ``` - - - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/). - -**[⬆ back to top](#table-of-contents)** - - - -## Comparison Operators & Equality - - - Use `===` and `!==` over `==` and `!=`. - - Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules: - - + **Objects** evaluate to **true** - + **Undefined** evaluates to **false** - + **Null** evaluates to **false** - + **Booleans** evaluate to **the value of the boolean** - + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true** - + **Strings** evaluate to **false** if an empty string `''`, otherwise **true** - - ```javascript - if ([0]) { - // true - // An array is an object, objects evaluate to true - } - ``` - - - Use shortcuts. - - ```javascript - // bad - if (name !== '') { - // ...stuff... - } - - // good - if (name) { - // ...stuff... - } - - // bad - if (collection.length > 0) { - // ...stuff... - } - - // good - if (collection.length) { - // ...stuff... - } - ``` - - - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll. - -**[⬆ back to top](#table-of-contents)** - - -## Blocks - - - Use braces with all multi-line blocks. - - ```javascript - // bad - if (test) - return false; - - // good - if (test) return false; - - // good - if (test) { - return false; - } - - // bad - function() { return false; } - - // good - function() { - return false; - } - ``` - - - If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your - `if` block's closing brace. - - ```javascript - // bad - if (test) { - thing1(); - thing2(); - } - else { - thing3(); - } - - // good - if (test) { - thing1(); - thing2(); - } else { - thing3(); - } - ``` - - -**[⬆ back to top](#table-of-contents)** - - -## Comments - - - Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values. - - ```javascript - // bad - // make() returns a new element - // based on the passed in tag name - // - // @param {String} tag - // @return {Element} element - function make(tag) { - - // ...stuff... - - return element; - } - - // good - /** - * make() returns a new element - * based on the passed in tag name - * - * @param {String} tag - * @return {Element} element - */ - function make(tag) { - - // ...stuff... - - return element; - } - ``` - - - Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment. - - ```javascript - // bad - var active = true; // is current tab - - // good - // is current tab - var active = true; - - // bad - function getType() { - console.log('fetching type...'); - // set the default type to 'no type' - var type = this._type || 'no type'; - - return type; - } - - // good - function getType() { - console.log('fetching type...'); - - // set the default type to 'no type' - var type = this._type || 'no type'; - - return type; - } - ``` - - - Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`. - - - Use `// FIXME:` to annotate problems. - - ```javascript - function Calculator() { - - // FIXME: shouldn't use a global here - total = 0; - - return this; - } - ``` - - - Use `// TODO:` to annotate solutions to problems. - - ```javascript - function Calculator() { - - // TODO: total should be configurable by an options param - this.total = 0; - - return this; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Whitespace - - - Use soft tabs set to 4 spaces. - - ```javascript - // good - function() { - ∙∙∙∙var name; - } - - // bad - function() { - ∙var name; - } - - // bad - function() { - ∙∙var name; - } - ``` - - - Place 1 space before the leading brace. - - ```javascript - // bad - function test(){ - console.log('test'); - } - - // good - function test() { - console.log('test'); - } - - // bad - dog.set('attr',{ - age: '1 year', - breed: 'Bernese Mountain Dog' - }); - - // good - dog.set('attr', { - age: '1 year', - breed: 'Bernese Mountain Dog' - }); - ``` - - - Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations. - - ```javascript - // bad - if(isJedi) { - fight (); - } - - // good - if (isJedi) { - fight(); - } - - // bad - function fight () { - console.log ('Swooosh!'); - } - - // good - function fight() { - console.log('Swooosh!'); - } - ``` - - - Set off operators with spaces. - - ```javascript - // bad - var x=y+5; - - // good - var x = y + 5; - ``` - - - End files with a single newline character. - - ```javascript - // bad - (function(global) { - // ...stuff... - })(this); - ``` - - ```javascript - // bad - (function(global) { - // ...stuff... - })(this);↵ - ↵ - ``` - - ```javascript - // good - (function(global) { - // ...stuff... - })(this);↵ - ``` - - - Use indentation when making long method chains. Use a leading dot, which - emphasizes that the line is a method call, not a new statement. - - ```javascript - // bad - $('#items').find('.selected').highlight().end().find('.open').updateCount(); - - // bad - $('#items'). - find('.selected'). - highlight(). - end(). - find('.open'). - updateCount(); - - // good - $('#items') - .find('.selected') - .highlight() - .end() - .find('.open') - .updateCount(); - - // bad - var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true) - .attr('width', (radius + margin) * 2).append('svg:g') - .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')') - .call(tron.led); - - // good - var leds = stage.selectAll('.led') - .data(data) - .enter().append('svg:svg') - .classed('led', true) - .attr('width', (radius + margin) * 2) - .append('svg:g') - .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')') - .call(tron.led); - ``` - - - Leave a blank line after blocks and before the next statement - - ```javascript - // bad - if (foo) { - return bar; - } - return baz; - - // good - if (foo) { - return bar; - } - - return baz; - - // bad - var obj = { - foo: function() { - }, - bar: function() { - } - }; - return obj; - - // good - var obj = { - foo: function() { - }, - - bar: function() { - } - }; - - return obj; - ``` - - -**[⬆ back to top](#table-of-contents)** - -## Commas - - - Leading commas: **Nope.** - - ```javascript - // bad - var story = [ - once - , upon - , aTime - ]; - - // good - var story = [ - once, - upon, - aTime - ]; - - // bad - var hero = { - firstName: 'Bob' - , lastName: 'Parr' - , heroName: 'Mr. Incredible' - , superPower: 'strength' - }; - - // good - var hero = { - firstName: 'Bob', - lastName: 'Parr', - heroName: 'Mr. Incredible', - superPower: 'strength' - }; - ``` - - - Additional trailing comma: **Nope.** This can cause problems with IE6/7 and IE9 if it's in quirksmode. Also, in some implementations of ES3 would add length to an array if it had an additional trailing comma. This was clarified in ES5 ([source](http://es5.github.io/#D)): - - > Edition 5 clarifies the fact that a trailing comma at the end of an ArrayInitialiser does not add to the length of the array. This is not a semantic change from Edition 3 but some implementations may have previously misinterpreted this. - - ```javascript - // bad - var hero = { - firstName: 'Kevin', - lastName: 'Flynn', - }; - - var heroes = [ - 'Batman', - 'Superman', - ]; - - // good - var hero = { - firstName: 'Kevin', - lastName: 'Flynn' - }; - - var heroes = [ - 'Batman', - 'Superman' - ]; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Semicolons - - - **Yup.** - - ```javascript - // bad - (function() { - var name = 'Skywalker' - return name - })() - - // good - (function() { - var name = 'Skywalker'; - return name; - })(); - - // good (guards against the function becoming an argument when two files with IIFEs are concatenated) - ;(function() { - var name = 'Skywalker'; - return name; - })(); - ``` - - [Read more](http://stackoverflow.com/a/7365214/1712802). - -**[⬆ back to top](#table-of-contents)** - - -## Type Casting & Coercion - - - Perform type coercion at the beginning of the statement. - - Strings: - - ```javascript - // => this.reviewScore = 9; - - // bad - var totalScore = this.reviewScore + ''; - - // good - var totalScore = '' + this.reviewScore; - - // bad - var totalScore = '' + this.reviewScore + ' total score'; - - // good - var totalScore = this.reviewScore + ' total score'; - ``` - - - Use `parseInt` for Numbers and always with a radix for type casting. - - ```javascript - var inputValue = '4'; - - // bad - var val = new Number(inputValue); - - // bad - var val = +inputValue; - - // bad - var val = inputValue >> 0; - - // bad - var val = parseInt(inputValue); - - // good - var val = Number(inputValue); - - // good - var val = parseInt(inputValue, 10); - ``` - - - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing. - - ```javascript - // good - /** - * parseInt was the reason my code was slow. - * Bitshifting the String to coerce it to a - * Number made it a lot faster. - */ - var val = inputValue >> 0; - ``` - - - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647: - - ```javascript - 2147483647 >> 0 //=> 2147483647 - 2147483648 >> 0 //=> -2147483648 - 2147483649 >> 0 //=> -2147483647 - ``` - - - Booleans: - - ```javascript - var age = 0; - - // bad - var hasAge = new Boolean(age); - - // good - var hasAge = Boolean(age); - - // good - var hasAge = !!age; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Naming Conventions - - - Avoid single letter names. Be descriptive with your naming. - - ```javascript - // bad - function q() { - // ...stuff... - } - - // good - function query() { - // ..stuff.. - } - ``` - - - Use camelCase when naming objects, functions, and instances. - - ```javascript - // bad - var OBJEcttsssss = {}; - var this_is_my_object = {}; - var o = {}; - function c() {} - - // good - var thisIsMyObject = {}; - function thisIsMyFunction() {} - ``` - - - Use PascalCase when naming constructors or classes. - - ```javascript - // bad - function user(options) { - this.name = options.name; - } - - var bad = new user({ - name: 'nope' - }); - - // good - function User(options) { - this.name = options.name; - } - - var good = new User({ - name: 'yup' - }); - ``` - - - Use a leading underscore `_` when naming private properties. - - ```javascript - // bad - this.__firstName__ = 'Panda'; - this.firstName_ = 'Panda'; - - // good - this._firstName = 'Panda'; - ``` - - - When saving a reference to `this` use `_this`. - - ```javascript - // bad - function() { - var self = this; - return function() { - console.log(self); - }; - } - - // bad - function() { - var that = this; - return function() { - console.log(that); - }; - } - - // good - function() { - var _this = this; - return function() { - console.log(_this); - }; - } - ``` - - - Name your functions. This is helpful for stack traces. - - ```javascript - // bad - var log = function(msg) { - console.log(msg); - }; - - // good - var log = function log(msg) { - console.log(msg); - }; - ``` - - - **Note:** IE8 and below exhibit some quirks with named function expressions. See [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) for more info. - - - If your file exports a single class, your filename should be exactly the name of the class. - ```javascript - // file contents - class CheckBox { - // ... - } - module.exports = CheckBox; - - // in some other file - // bad - var CheckBox = require('./checkBox'); - - // bad - var CheckBox = require('./check_box'); - - // good - var CheckBox = require('./CheckBox'); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Accessors - - - Accessor functions for properties are not required. - - If you do make accessor functions use getVal() and setVal('hello'). - - ```javascript - // bad - dragon.age(); - - // good - dragon.getAge(); - - // bad - dragon.age(25); - - // good - dragon.setAge(25); - ``` - - - If the property is a boolean, use isVal() or hasVal(). - - ```javascript - // bad - if (!dragon.age()) { - return false; - } - - // good - if (!dragon.hasAge()) { - return false; - } - ``` - - - It's okay to create get() and set() functions, but be consistent. - - ```javascript - function Jedi(options) { - options || (options = {}); - var lightsaber = options.lightsaber || 'blue'; - this.set('lightsaber', lightsaber); - } - - Jedi.prototype.set = function(key, val) { - this[key] = val; - }; - - Jedi.prototype.get = function(key) { - return this[key]; - }; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Constructors - - - Assign methods to the prototype object, instead of overwriting the prototype with a new object. Overwriting the prototype makes inheritance impossible: by resetting the prototype you'll overwrite the base! - - ```javascript - function Jedi() { - console.log('new jedi'); - } - - // bad - Jedi.prototype = { - fight: function fight() { - console.log('fighting'); - }, - - block: function block() { - console.log('blocking'); - } - }; - - // good - Jedi.prototype.fight = function fight() { - console.log('fighting'); - }; - - Jedi.prototype.block = function block() { - console.log('blocking'); - }; - ``` - - - Methods can return `this` to help with method chaining. - - ```javascript - // bad - Jedi.prototype.jump = function() { - this.jumping = true; - return true; - }; - - Jedi.prototype.setHeight = function(height) { - this.height = height; - }; - - var luke = new Jedi(); - luke.jump(); // => true - luke.setHeight(20); // => undefined - - // good - Jedi.prototype.jump = function() { - this.jumping = true; - return this; - }; - - Jedi.prototype.setHeight = function(height) { - this.height = height; - return this; - }; - - var luke = new Jedi(); - - luke.jump() - .setHeight(20); - ``` - - - - It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects. - - ```javascript - function Jedi(options) { - options || (options = {}); - this.name = options.name || 'no name'; - } - - Jedi.prototype.getName = function getName() { - return this.name; - }; - - Jedi.prototype.toString = function toString() { - return 'Jedi - ' + this.getName(); - }; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Events - - - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of: - - ```js - // bad - $(this).trigger('listingUpdated', listing.id); - - ... - - $(this).on('listingUpdated', function(e, listingId) { - // do something with listingId - }); - ``` - - prefer: - - ```js - // good - $(this).trigger('listingUpdated', { listingId : listing.id }); - - ... - - $(this).on('listingUpdated', function(e, data) { - // do something with data.listingId - }); - ``` - - **[⬆ back to top](#table-of-contents)** - - -## Modules - - - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933) - - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export. - - Add a method called `noConflict()` that sets the exported module to the previous version and returns this one. - - Always declare `'use strict';` at the top of the module. - - ```javascript - // fancyInput/fancyInput.js - - !function(global) { - 'use strict'; - - var previousFancyInput = global.FancyInput; - - function FancyInput(options) { - this.options = options || {}; - } - - FancyInput.noConflict = function noConflict() { - global.FancyInput = previousFancyInput; - return FancyInput; - }; - - global.FancyInput = FancyInput; - }(this); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## jQuery - - - Prefix jQuery object variables with a `$`. - - ```javascript - // bad - var sidebar = $('.sidebar'); - - // good - var $sidebar = $('.sidebar'); - ``` - - - Cache jQuery lookups. - - ```javascript - // bad - function setSidebar() { - $('.sidebar').hide(); - - // ...stuff... - - $('.sidebar').css({ - 'background-color': 'pink' - }); - } - - // good - function setSidebar() { - var $sidebar = $('.sidebar'); - $sidebar.hide(); - - // ...stuff... - - $sidebar.css({ - 'background-color': 'pink' - }); - } - ``` - - - For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16) - - Use `find` with scoped jQuery object queries. - - ```javascript - // bad - $('ul', '.sidebar').hide(); - - // bad - $('.sidebar').find('ul').hide(); - - // good - $('.sidebar ul').hide(); - - // good - $('.sidebar > ul').hide(); - - // good - $sidebar.find('ul').hide(); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## ECMAScript 5 Compatibility - - - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/). - -**[⬆ back to top](#table-of-contents)** - - -## Testing - - - **Yup.** - - ```javascript - function() { - return true; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Performance - - - [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/) - - [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2) - - [Try/Catch Cost In a Loop](http://jsperf.com/try-catch-in-loop-cost) - - [Bang Function](http://jsperf.com/bang-function) - - [jQuery Find vs Context, Selector](http://jsperf.com/jquery-find-vs-context-sel/13) - - [innerHTML vs textContent for script text](http://jsperf.com/innerhtml-vs-textcontent-for-script-text) - - [Long String Concatenation](http://jsperf.com/ya-string-concat) - - Loading... - -**[⬆ back to top](#table-of-contents)** - - -## Resources - - -**Read This** - - - [Annotated ECMAScript 5.1](http://es5.github.com/) - -**Tools** - - - Code Style Linters - + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc) - + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) - -**Other Style Guides** - - - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml) - - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines) - - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/) - - [JavaScript Standard Style](https://github.com/feross/standard) - -**Other Styles** - - - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen - - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen - - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun - - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman - -**Further Reading** - - - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll - - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer - - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz - - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban - - [Frontend Guidelines](https://github.com/bendc/frontend-guidelines) - Benjamin De Cock - -**Books** - - - [JavaScript: The Good Parts](http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford - - [JavaScript Patterns](http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov - - [Pro JavaScript Design Patterns](http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X) - Ross Harmes and Dustin Diaz - - [High Performance Web Sites: Essential Knowledge for Front-End Engineers](http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders - - [Maintainable JavaScript](http://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas - - [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw - - [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig - - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch - - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault - - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg - - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy - - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon - - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov - - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman - - [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke - - [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) - Kyle Simpson - -**Blogs** - - - [DailyJS](http://dailyjs.com/) - - [JavaScript Weekly](http://javascriptweekly.com/) - - [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/) - - [Bocoup Weblog](http://weblog.bocoup.com/) - - [Adequately Good](http://www.adequatelygood.com/) - - [NCZOnline](http://www.nczonline.net/) - - [Perfection Kills](http://perfectionkills.com/) - - [Ben Alman](http://benalman.com/) - - [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/) - - [Dustin Diaz](http://dustindiaz.com/) - - [nettuts](http://net.tutsplus.com/?s=javascript) - -**Podcasts** - - - [JavaScript Jabber](http://devchat.tv/js-jabber/) - - -**[⬆ back to top](#table-of-contents)** - -## In the Wild - - This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list. - - - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript) - - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript) - - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript) - - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript) - - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript) - - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript) - - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide) - - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript) - - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript) - - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide) - - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript) - - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide) - - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript) - - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript) - - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style) - - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript) - - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript) - - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide) - - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript) - - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions) - - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript) - - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript) - - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript) - - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript) - - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript) - - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript) - - **Muber**: [muber/javascript](https://github.com/muber/javascript) - - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript) - - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript) - - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript) - - **Nordic Venture Family**: [CodeDistillery/javascript](https://github.com/CodeDistillery/javascript) - - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript) - - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript) - - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide) - - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript) - - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide) - - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide) - - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide) - - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript) - - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript) - - **Target**: [target/javascript](https://github.com/target/javascript) - - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript) - - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript) - - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide) - - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript) - - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript) - - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript) - -## Translation - - This style guide is also available in other languages: - - - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide) - - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript) - - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide) - - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript) - - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide) - - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide) - - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide) - - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide) - - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide) - - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide) - - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript) - - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript) - - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide) - - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide) - -## The JavaScript Style Guide Guide - - - [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide) - -## Chat With Us About JavaScript - - - Find us on [gitter](https://gitter.im/airbnb/javascript). - -## Contributors - - - [View Contributors](https://github.com/airbnb/javascript/graphs/contributors) - - -## License - -(The MIT License) - -Copyright (c) 2014 Airbnb - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -**[⬆ back to top](#table-of-contents)** - -# }; diff --git a/node_modules/ethereumjs-testrpc/package.json b/node_modules/ethereumjs-testrpc/package.json deleted file mode 100644 index cc9fd81..0000000 --- a/node_modules/ethereumjs-testrpc/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "ethereumjs-testrpc@^2.2.7", - "/Users/jbaylina/git/MVP/node_modules/ethconnector" - ] - ], - "_from": "ethereumjs-testrpc@>=2.2.7 <3.0.0", - "_id": "ethereumjs-testrpc@2.2.7", - "_inCache": true, - "_installable": true, - "_location": "/ethereumjs-testrpc", - "_nodeVersion": "5.9.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/ethereumjs-testrpc-2.2.7.tgz_1473459023033_0.5836955015547574" - }, - "_npmUser": { - "email": "tim@timothyjcoulter.com", - "name": "tcoulter" - }, - "_npmVersion": "3.7.3", - "_phantomChildren": { - "crypto-js": "3.1.7", - "utf8": "2.1.2", - "xmlhttprequest": "1.8.0" - }, - "_requested": { - "name": "ethereumjs-testrpc", - "raw": "ethereumjs-testrpc@^2.2.7", - "rawSpec": "^2.2.7", - "scope": null, - "spec": ">=2.2.7 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethconnector" - ], - "_resolved": "https://registry.npmjs.org/ethereumjs-testrpc/-/ethereumjs-testrpc-2.2.7.tgz", - "_shasum": "ff732fefdb3a189e82d5f09b99946bff18140224", - "_shrinkwrap": null, - "_spec": "ethereumjs-testrpc@^2.2.7", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethconnector", - "bin": { - "testrpc": "./bin/testrpc" - }, - "bugs": { - "url": "https://github.com/ethereumjs/testrpc/issues" - }, - "dependencies": { - "async": "^1.5.0", - "bignumber.js": "^2.1.4", - "bip39": "^2.2.0", - "ethereumjs-account": "^2.0.4", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.1.0", - "ethereumjs-util": "^4.5.0", - "ethereumjs-vm": "^1.3.0", - "ethereumjs-wallet": "^0.6.0", - "fake-merkle-patricia-tree": "^1.0.1", - "merkle-patricia-tree": "^2.1.2", - "seedrandom": "^2.4.2", - "shelljs": "^0.6.0", - "web3": "^0.16.0", - "web3-provider-engine": "^8.0.3", - "yargs": "^3.29.0" - }, - "description": "`testrpc` is a Node.js based Ethereum client for testing and development. It uses ethereumjs to simulate full client behavior and make developing Ethereum applications much faster. It also includes all popular RPC functions and features (like events) and ", - "devDependencies": { - "eslint": "^3.0.1", - "eslint-config-standard": "^5.3.5", - "eslint-plugin-standard": "^1.3.3", - "mocha": "^2.2.5", - "solc": "^0.3.0-1" - }, - "directories": { - "lib": "./lib" - }, - "dist": { - "shasum": "ff732fefdb3a189e82d5f09b99946bff18140224", - "tarball": "https://registry.npmjs.org/ethereumjs-testrpc/-/ethereumjs-testrpc-2.2.7.tgz" - }, - "gitHead": "9df8d0479b1ff945100e23c717332e22ed048b81", - "homepage": "https://github.com/ethereumjs/testrpc#readme", - "main": "./index.js", - "maintainers": [ - { - "email": "tim@timothyjcoulter.com", - "name": "tcoulter" - } - ], - "name": "ethereumjs-testrpc", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ethereumjs/testrpc.git" - }, - "scripts": { - "start": "node ./bin/testrpc", - "test": "mocha" - }, - "version": "2.2.7" -} diff --git a/node_modules/ethereumjs-testrpc/test/EstimateGas.sol b/node_modules/ethereumjs-testrpc/test/EstimateGas.sol deleted file mode 100644 index d9ddd8e..0000000 --- a/node_modules/ethereumjs-testrpc/test/EstimateGas.sol +++ /dev/null @@ -1,64 +0,0 @@ -// From https://github.com/ethereumjs/testrpc/issues/58 -contract EstimateGas { - event Add(bytes32 name, bytes32 description, uint value, address owner); - - struct Test { - bytes32 name; - bytes32 description; - uint[] balances; - mapping(address => uint) owners; - } - - mapping(bytes32 => uint) index; - Test[] tests; - - function EstimateGas() { - tests.length++; - } - - function add(bytes32 _name, bytes32 _description, uint _value) returns(bool) { - if (index[_name] != 0) { - return false; - } - uint pos = tests.length++; - tests[pos].name = _name; - tests[pos].description = _description; - tests[pos].balances.length = 2; - tests[pos].balances[1] = _value; - tests[pos].owners[msg.sender] = 1; - index[_name] = pos; - Add(_name, _description, _value, msg.sender); - return true; - } - - function transfer(address _to, uint _value, bytes32 _name) returns(bool) { - uint pos = index[_name]; - if (pos == 0) { - return false; - } - - uint posFrom = tests[pos].owners[msg.sender]; - if (posFrom == 0) { - return false; - } - - if (tests[pos].balances[posFrom] < _value) { - return false; - } - - uint posTo = tests[pos].owners[_to]; - if (posTo == 0) { - uint posBal = tests[pos].balances.length++; - tests[pos].owners[_to] = posBal; - posTo = posBal; - } - - if (tests[pos].balances[posTo] + _value < tests[pos].balances[posTo]) { - return false; - } - tests[pos].balances[posFrom] -= _value; - tests[pos].balances[posTo] += _value; - - return true; - } -} diff --git a/node_modules/ethereumjs-testrpc/test/Example.sol b/node_modules/ethereumjs-testrpc/test/Example.sol deleted file mode 100644 index e4c8746..0000000 --- a/node_modules/ethereumjs-testrpc/test/Example.sol +++ /dev/null @@ -1,14 +0,0 @@ -contract Example { - uint public value; - - event ValueSet(uint); - - function Example() { - value = 5; - } - - function setValue(uint val) { - value = val; - ValueSet(val); - } -} diff --git a/node_modules/ethereumjs-testrpc/test/Oracle.sol b/node_modules/ethereumjs-testrpc/test/Oracle.sol deleted file mode 100644 index bdebe2f..0000000 --- a/node_modules/ethereumjs-testrpc/test/Oracle.sol +++ /dev/null @@ -1,13 +0,0 @@ -contract Oracle{ - bytes32 public blockhash0; - uint public lastBlock; - function Oracle(){ - blockhash0 = block.blockhash(0); - } - function currentBlock() returns (uint) { - return block.number; - } - function setCurrentBlock() { - lastBlock = block.number; - } -} diff --git a/node_modules/ethereumjs-testrpc/test/accounts.js b/node_modules/ethereumjs-testrpc/test/accounts.js deleted file mode 100644 index 76175b8..0000000 --- a/node_modules/ethereumjs-testrpc/test/accounts.js +++ /dev/null @@ -1,21 +0,0 @@ -var Web3 = require('web3'); -var TestRPC = require("../index.js"); -var assert = require('assert'); - -describe("Accounts", function() { - it("should respect the BIP99 mnemonic", function(done) { - var expected_address = "0x604a95C9165Bc95aE016a5299dd7d400dDDBEa9A"; - - var web3 = new Web3(); - web3.setProvider(TestRPC.provider({ - mnemonic: "into trim cross then helmet popular suit hammer cart shrug oval student" - })); - - web3.eth.getAccounts(function(err, accounts) { - if (err) return done(err); - - assert(accounts[0].toLowerCase(), expected_address.toLowerCase()); - done(); - }); - }) -}); diff --git a/node_modules/ethereumjs-testrpc/test/bad_input.js b/node_modules/ethereumjs-testrpc/test/bad_input.js deleted file mode 100644 index 699f8fa..0000000 --- a/node_modules/ethereumjs-testrpc/test/bad_input.js +++ /dev/null @@ -1,140 +0,0 @@ -var Web3 = require('web3'); -var TestRPC = require("../index.js"); -var assert = require('assert'); - -var tests = function(web3) { - var accounts; - - // The second request, after the first in each of these tests, - // informs us whether or not the provider crashed. - function secondRequest(callback) { - web3.eth.getAccounts(callback); - } - - describe("bad input", function() { - before(function(done) { - web3.eth.getAccounts(function(err, accs) { - if (err) return done(err); - accounts = accs; - done(); - }); - }); - - it("recovers after to address that isn't a string", function(done) { - var provider = web3.currentProvider; - - provider.sendAsync({ - "jsonrpc": "2.0", - "method": "eth_sendTransaction", - "params": [ - { - "value": "0x0", - "gas": "0xf4240", - "from": accounts[0], - // Buffers have been sent in the past - "to": { - "type": "Buffer", - "data": [ - // ... - ] - }, - "data": "0xe1fa8e84666f6f0000000000000000000000000000000000000000000000000000000000" - } - ], - "id": 2 - }, function() { - // Ignore any errors, but make sure we can make the second request - secondRequest(done); - }); - }); - - it("recovers after bad nonce", function(done) { - var provider = web3.currentProvider; - - var request = { - "jsonrpc": "2.0", - "method": "eth_sendTransaction", - "params": [ - { - "value": "0x10000000", - "gas": "0xf4240", - "from": accounts[0], - "to": accounts[1], - "nonce": "0xffffffff", // too big nonce - } - ], - "id": 2 - } - - provider.sendAsync(request, function(err, result) { - // We're supposed to get an error the first time. Let's assert we get the right one. - // Note that if using the TestRPC as a provider, err will be non-null when there's - // an error. However, when using it as a server it won't be. In both cases, however, - // result.error should be set with the same error message. We'll check for that. - assert(result.error.message.indexOf("the tx doesn't have the correct nonce. account has nonce of: 0 tx has nonce of: 4294967295") >= 0); - - delete request.params[0].nonce - provider.sendAsync(request, done) - }); - }); - - it("recovers after bad balance", function(done) { - web3.eth.getBalance(accounts[0], function(err, balance) { - if (err) return done(err); - - var provider = web3.currentProvider; - - var request = { - "jsonrpc": "2.0", - "method": "eth_sendTransaction", - "params": [ - { - "value": "0x1000000000000000000000000000", - "gas": "0xf4240", - "from": accounts[0], - "to": accounts[1] - } - ], - "id": 2 - } - - provider.sendAsync(request, function(err, result) { - // We're supposed to get an error the first time. Let's assert we get the right one. - // Note that if using the TestRPC as a provider, err will be non-null when there's - // an error. However, when using it as a server it won't be. In both cases, however, - // result.error should be set with the same error message. We'll check for that. - assert(result.error.message.indexOf("sender doesn't have enough funds to send tx. The upfront cost is: 324518553658426726783156021576256 and the senders account only has: 99999999999731543544") >= 0); - - request.params[0].value = "0x5"; - provider.sendAsync(request, done) - }); - }) - }); - }) -}; - -describe("Provider:", function() { - var web3 = new Web3(); - web3.setProvider(TestRPC.provider()); - tests(web3); -}); - -describe("Server:", function(done) { - var web3 = new Web3(); - var port = 12345; - var server; - - before("Initialize TestRPC server", function(done) { - server = TestRPC.server(); - server.listen(port, function() { - web3.setProvider(new Web3.providers.HttpProvider("http://localhost:" + port)); - done(); - }); - }); - - after("Shutdown server", function(done) { - server.close(done); - }); - - tests(web3); -}); diff --git a/node_modules/ethereumjs-testrpc/test/block_tags.js b/node_modules/ethereumjs-testrpc/test/block_tags.js deleted file mode 100644 index 8ec499a..0000000 --- a/node_modules/ethereumjs-testrpc/test/block_tags.js +++ /dev/null @@ -1,138 +0,0 @@ -var Web3 = require('web3'); -var utils = require('ethereumjs-util'); -var assert = require('assert'); -var TestRPC = require("../index.js"); -var fs = require("fs"); -var solc = require("solc"); -var async = require("async"); -var to = require("../lib/utils/to.js"); - -// Thanks solc. At least this works! -// This removes solc's overzealous uncaughtException event handler. -process.removeAllListeners("uncaughtException"); - -var logger = { - log: function(msg) { /*noop*/ } -}; - -var source = fs.readFileSync("./test/Example.sol", {encoding: "utf8"}); -var result = solc.compile(source, 1); - -// Note: Certain properties of the following contract data are hardcoded to -// maintain repeatable tests. If you significantly change the solidity code, -// make sure to update the resulting contract data with the correct values. -var contract = { - solidity: source, - abi: result.contracts.Example.interface, - binary: "0x" + result.contracts.Example.bytecode, - position_of_value: "0x0000000000000000000000000000000000000000000000000000000000000000", - expected_default_value: 5, - call_data: { - gas: '0x2fefd8', - gasPrice: '0x01', // This is important, as passing it has exposed errors in the past. - to: null, // set by test - data: '0x3fa4f245' - }, - transaction_data: { - from: null, // set by test - gas: '0x2fefd8', - to: null, // set by test - data: '0x552410770000000000000000000000000000000000000000000000000000000000000019' // sets value to 25 (base 10) - } -}; - -describe("Block Tags", function() { - var accounts; - var web3 = new Web3(TestRPC.provider()); - var contractAddress; - - var initial_block_number; - var initial = {}; - - before("Gather accounts", function(done) { - web3.eth.getAccounts(function(err, accs) { - if (err) return done(err); - accounts = accs; - done(); - }); - }); - - before("Get initial block number", function(done) { - web3.eth.getBlockNumber(function(err, n) { - if (err) return done(err); - initial_block_number = to.number(n); - done(); - }); - }); - - before("Get initial balance and nonce", function(done) { - async.parallel({ - balance: web3.eth.getBalance.bind(web3.eth, accounts[0]), - nonce: web3.eth.getTransactionCount.bind(web3.eth, accounts[0]) - }, function(err, result) { - if (err) return done(err); - initial = result; - initial.nonce = to.number(initial.nonce); - done(); - }); - }); - - before("Make transaction that changes balance, nonce and code", function(done) { - web3.eth.sendTransaction({ - from: accounts[0], - data: contract.binary - }, function(err, tx) { - if (err) return callback(err); - - web3.eth.getTransactionReceipt(tx, function(err, receipt) { - if (err) return done(err); - - contractAddress = receipt.contractAddress; - done(); - }); - }); - }); - - it("should return the initial nonce at the previous block number", function(done) { - web3.eth.getTransactionCount(accounts[0], initial_block_number, function(err, nonce) { - if (err) return done(err); - assert.equal(nonce, initial.nonce); - - // Check that the nonce incremented with the block number, just to be sure. - web3.eth.getTransactionCount(accounts[0], initial_block_number + 1, function(err, nonce) { - if (err) return done(err); - assert.equal(nonce, initial.nonce + 1); - done(); - }); - }); - }); - - it("should return the initial balance at the previous block number", function(done) { - web3.eth.getBalance(accounts[0], initial_block_number, function(err, balance) { - if (err) return done(err); - assert(balance.eq(initial.balance)); - - // Check that the balance incremented with the block number, just to be sure. - web3.eth.getBalance(accounts[0], initial_block_number + 1, function(err, balance) { - if (err) return done(err); - assert(balance.lt(initial.balance)); - done(); - }); - }); - }); - - it("should return the no code at the previous block number", function(done) { - web3.eth.getCode(contractAddress, initial_block_number, function(err, code) { - if (err) return done(err); - assert.equal(code, "0x0"); - - // Check that the code incremented with the block number, just to be sure. - web3.eth.getCode(contractAddress, initial_block_number + 1, function(err, code) { - if (err) return done(err); - assert.notEqual(code, "0x0"); - assert(code.length > 20); // Just because we don't know the actual code we're supposed to get back - done(); - }); - }); - }); -}); diff --git a/node_modules/ethereumjs-testrpc/test/custom_gas_limit.js b/node_modules/ethereumjs-testrpc/test/custom_gas_limit.js deleted file mode 100644 index 9f78336..0000000 --- a/node_modules/ethereumjs-testrpc/test/custom_gas_limit.js +++ /dev/null @@ -1,23 +0,0 @@ -var Web3 = require('web3'); -var assert = require('assert'); -var TestRPC = require("../index.js"); - -describe("Custom Gas Limit", function() { - var web3; - - before("Init the Web3 provider", function(done){ - web3 = new Web3(); - web3.setProvider(TestRPC.provider({ - gasLimit: 5000000 - })); - done(); - }); - - it("The block should show the correct custom Gas Limit", function(done) { - web3.eth.getBlock(0, function(err, block) { - if (err) return done(err); - assert.deepEqual(block.gasLimit, 5000000); - done(); - }); - }); -}); diff --git a/node_modules/ethereumjs-testrpc/test/custom_gas_price.js b/node_modules/ethereumjs-testrpc/test/custom_gas_price.js deleted file mode 100644 index 02a3809..0000000 --- a/node_modules/ethereumjs-testrpc/test/custom_gas_price.js +++ /dev/null @@ -1,44 +0,0 @@ -var Web3 = require('web3'); -var utils = require('ethereumjs-util'); -var assert = require('assert'); -var TestRPC = require("../index.js"); - -var logger = { - log: function() {} -}; - -describe("Custom Gas Price", function() { - it("should return gas price of 0xf when specified as a decimal", function(done) { - var web3 = new Web3(); - var server = TestRPC.server({gasPrice: 15, logger: logger}); - var port = 12345; - server.listen(port, function() { - var oldprovider = web3.currentProvider; - web3.setProvider(new Web3.providers.HttpProvider("http://localhost:" + port)); - web3.eth.getGasPrice(function(err, result) { - if (err) return done(err); - assert.deepEqual(result.toNumber(), 15); - server.close(); - web3.setProvider(oldprovider); - done(); - }); - }); - }); - - it("should return gas price of 0xf when specified as hex", function(done) { - var web3 = new Web3(); - var server = TestRPC.server({gasPrice: 0xf, logger: logger}); - var port = 12346; - server.listen(port, function() { - var oldprovider = web3.currentProvider; - web3.setProvider(new Web3.providers.HttpProvider("http://localhost:" + port)); - web3.eth.getGasPrice(function(err, result) { - if (err) return done(err); - assert.deepEqual(result.toNumber(), 15); - server.close(); - web3.setProvider(oldprovider); - done(); - }); - }); - }); -}); diff --git a/node_modules/ethereumjs-testrpc/test/events.js b/node_modules/ethereumjs-testrpc/test/events.js deleted file mode 100644 index cb658bf..0000000 --- a/node_modules/ethereumjs-testrpc/test/events.js +++ /dev/null @@ -1,270 +0,0 @@ -var Web3 = require('web3'); -var TestRPC = require("../index.js"); -var assert = require('assert'); -var solc = require("solc"); -var async = require("async"); - -var source = " \ -contract EventTest { \ - event NumberEvent(uint number); \ - \ - function triggerEvent(uint val) { \ - NumberEvent(val); \ - } \ -}" - -// Thanks solc. At least this works! -// This removes solc's overzealous uncaughtException event handler. -process.removeAllListeners("uncaughtException"); - -var tests = function(web3, EventTest) { - var accounts; - var EventTest; - var instance; - - describe("events", function() { - before(function(done) { - web3.eth.getAccounts(function(err, accs) { - if (err) return done(err); - accounts = accs; - done(); - }); - }); - - before(function() { - var result = solc.compile(source, 1); - - if (result.errors != null) { - throw new Error(result.errors[0]); - } - - var abi = JSON.parse(result.contracts.EventTest.interface); - EventTest = web3.eth.contract(abi); - EventTest._data = "0x" + result.contracts.EventTest.bytecode; - }); - - before(function(done) { - EventTest.new({from: accounts[0], data: EventTest._data}, function(err, contract) { - if (!contract.address) { - return; - } - instance = contract; - done(); - }); - }); - - it("handles events properly, using `event.watch()`", function(done) { - var expected_value = 5; - - var event = instance.NumberEvent([{number: expected_value}]); - - var cleanup = function(err) { - event.stopWatching(); - done(err); - }; - - event.watch(function(err, result) { - if (err) return cleanup(err); - - if (result.args.number == expected_value) { - return cleanup(); - } - - return cleanup(new Error("Received event that didn't have the correct value!")); - }); - - instance.triggerEvent(5, {from: accounts[0]}, function(err, result) { - if (err) return cleanup(err); - }); - }); - - it("handles events properly, using `event.get()`", function(done) { - this.timeout(10000) - var expected_value = 5; - var interval; - - var event = instance.NumberEvent([{number: expected_value}]); - - function cleanup(err) { - event.stopWatching(); - clearInterval(interval); - done(err); - } - - instance.triggerEvent(5, {from: accounts[0]}, function(err, result) { - if (err) return cleanup(err); - - interval = setInterval(function() { - event.get(function(err, logs) { - if (err) return cleanup(err); - - if (logs.length == 0) return; - - if (logs[0].args.number == expected_value) { - return cleanup(); - } - - return cleanup(new Error("Received event that didn't have the correct value!")); - }); - }, 500); - }); - }); - - // NOTE! This test relies on the events triggered in the tests above. - it("grabs events in the past, using `event.get()`", function(done) { - var expected_value = 5; - var event = instance.NumberEvent([{number: expected_value}], {fromBlock: 0}); - - event.get(function(err, logs) { - event.stopWatching(); - if (err) return done(err); - assert(logs.length == 2); - done(); - }); - }); - - it("only returns logs for the expected address", function(done) { - var expected_value = 5; - - EventTest.new({from: accounts[0], data: EventTest._data}, function(err, newInstance) { - if (err) return done(err); - - if (!newInstance.address) { - return; - } - - newInstance.triggerEvent(expected_value, {from: accounts[0]}, function(err, result) { - if (err) return done(err); - - var event = newInstance.NumberEvent([{number: expected_value}], {fromBlock: 0}); - - // Only one event should be triggered for this new instance. - event.get(function(err, logs) { - event.stopWatching(); - if (err) return done(err); - assert(logs.length == 1); - done(); - }); - }); - }); - }); - - it("always returns a change for every new block filter when instamining", function(done) { - var provider = web3.currentProvider; - - // In this test, we'll create a block filter and request filter changes twice. - // The responses from the first and second filter changes request must be different, - // and the first must return the block hash of the previous block to ensure it gets - // some response even though no transaction was made. - - var filter_id; - var first_changes; - var second_changes; - - async.series([ - function(c) { - provider.sendAsync({ - jsonrpc: "2.0", - method: "eth_newBlockFilter", - params: [], - id: new Date().getTime() - }, function(err, result) { - if (err) return c(err); - filter_id = result.result; - c(); - }); - }, - function(c) { - provider.sendAsync({ - jsonrpc: "2.0", - method: "eth_getFilterChanges", - params: [filter_id], - id: new Date().getTime() - }, function(err, result) { - if (err) return c(err); - first_changes = result.result; - c(); - }); - }, - function(c) { - provider.sendAsync({ - jsonrpc: "2.0", - method: "eth_getFilterChanges", - params: [filter_id], - id: new Date().getTime() - }, function(err, result) { - if (err) return c(err); - second_changes = result.result; - c(); - }); - } - ], function(err) { - if (err) return done(err); - - assert.equal(first_changes.length, 1); - assert.equal(first_changes[0].length, 66); // Ensure we have a hash - assert.equal(second_changes.length, 0); // no transactions were actually made - assert.notEqual(first_changes[0], second_changes[0]); - - done(); - }) - }); - - // TODO: The following test was supposed to pass, according to web3, in that - // the web3 spec gives the appearance that it filters out logs whose topics contain a specific value: - // - // https://github.com/ethereum/wiki/wiki/JavaScript-API#contract-events - // - // But so far as I can tell, it doesn't do that. It also doesn't pass the data value to - // the client in eth_newFilter, so if it's the client's responsibility, I couldn't do anything - // about it anyway. Leaving this test here as an artifact of what *should* work, but doesn't. - // - // // NOTE! This test relies on the events triggered in the tests above. - // it("ensures topics are respected in past events, using `event.get()`", function(done) { - // var unexpected_value = 1337; - // var event = instance.NumberEvent([{number: unexpected_value}], {fromBlock: 0}); - // - // // There should be no logs because we provided a different number. - // event.get(function(err, logs) { - // assert(logs.length == 0); - // done(); - // }); - // }); - }) -}; - -var logger = { - log: function(message) { - //console.log(message); - } -}; - -describe("Provider:", function() { - var web3 = new Web3(); - web3.setProvider(TestRPC.provider({ - logger: logger - })); - tests(web3); -}); - -describe("Server:", function(done) { - var web3 = new Web3(); - var port = 12345; - var server; - - before("Initialize TestRPC server", function(done) { - server = TestRPC.server({ - logger: logger - }); - server.listen(port, function() { - web3.setProvider(new Web3.providers.HttpProvider("http://localhost:" + port)); - done(); - }); - }); - - after("Shutdown server", function(done) { - server.close(done); - }); - - tests(web3); -}); diff --git a/node_modules/ethereumjs-testrpc/test/forking.js b/node_modules/ethereumjs-testrpc/test/forking.js deleted file mode 100644 index a382ff3..0000000 --- a/node_modules/ethereumjs-testrpc/test/forking.js +++ /dev/null @@ -1,563 +0,0 @@ -var Web3 = require('web3'); -var utils = require('ethereumjs-util'); -var assert = require('assert'); -var TestRPC = require("../index.js"); -var fs = require("fs"); -var solc = require("solc"); -var to = require("../lib/utils/to.js"); -var async = require("async"); - -// Thanks solc. At least this works! -// This removes solc's overzealous uncaughtException event handler. -process.removeAllListeners("uncaughtException"); - -var logger = { - log: function(msg) { /*noop*/ } -}; - -var source = fs.readFileSync("./test/Example.sol", {encoding: "utf8"}); -var result = solc.compile(source, 1); - -// Note: Certain properties of the following contract data are hardcoded to -// maintain repeatable tests. If you significantly change the solidity code, -// make sure to update the resulting contract data with the correct values. -var contract = { - solidity: source, - abi: result.contracts.Example.interface, - binary: "0x" + result.contracts.Example.bytecode, - position_of_value: "0x0000000000000000000000000000000000000000000000000000000000000000", - expected_default_value: 5, - call_data: { - gas: '0x2fefd8', - gasPrice: '0x01', // This is important, as passing it has exposed errors in the past. - to: null, // set by test - data: '0x3fa4f245' - }, - transaction_data: { - from: null, // set by test - gas: '0x2fefd8', - to: null, // set by test - data: '0x552410770000000000000000000000000000000000000000000000000000000000000019' // sets value to 25 (base 10) - } -}; - -var forkedTargetUrl = "http://localhost:21345"; - -describe("Forking", function() { - var contractAddress; - var secondContractAddress; // used sparingly - var forkedServer; - var mainAccounts; - var forkedAccounts; - - var initialFallbackAccountState = {}; - - var forkedWeb3 = new Web3(); - var mainWeb3 = new Web3(); - - var forkBlockNumber; - - var initialDeployTransactionHash; - - before("Initialize Fallback TestRPC server", function(done) { - forkedServer = TestRPC.server({ - // Do not change seed. Determinism matters for these tests. - seed: "let's make this deterministic", - logger: logger - }); - - forkedServer.listen(21345, function(err) { - if (err) return done(err); - - forkedWeb3.setProvider(new Web3.providers.HttpProvider(forkedTargetUrl)); - done(); - }); - }); - - before("Gather forked accounts", function(done) { - forkedWeb3.eth.getAccounts(function(err, f) { - if (err) return done(err); - forkedAccounts = f; - done(); - }); - }); - - before("Deploy initial contracts", function(done) { - forkedWeb3.eth.sendTransaction({ - from: forkedAccounts[0], - data: contract.binary - }, function(err, tx) { - if (err) { return done(err); } - - // Save this for a later test. - initialDeployTransactionHash = tx; - - forkedWeb3.eth.getTransactionReceipt(tx, function(err, receipt) { - if (err) return done(err); - - contractAddress = receipt.contractAddress; - - // Deploy a second one, which we won't use often. - forkedWeb3.eth.sendTransaction({ - from: forkedAccounts[0], - data: contract.binary - }, function(err, tx) { - if (err) { return done(err); } - forkedWeb3.eth.getTransactionReceipt(tx, function(err, receipt) { - if (err) return done(err); - - secondContractAddress = receipt.contractAddress; - done(); - }); - }); - }); - }); - }); - - before("Make a transaction on the forked chain that produces a log", function(done) { - this.timeout(10000) - - var FallbackExample = forkedWeb3.eth.contract(JSON.parse(contract.abi)); - var forkedExample = FallbackExample.at(contractAddress); - - var interval; - - var event = forkedExample.ValueSet([{}]); - - function cleanup(err) { - event.stopWatching(); - clearInterval(interval); - done(err); - } - - forkedExample.setValue(7, {from: forkedAccounts[0]}, function(err, tx) { - if (err) return done(err); - - interval = setInterval(function() { - event.get(function(err, logs) { - if (err) return cleanup(err); - - if (logs.length == 0) return; - - assert(logs.length == 1); - - cleanup(); - }); - }, 500); - }); - }); - - before("Get initial balance and nonce", function(done) { - async.parallel({ - balance: forkedWeb3.eth.getBalance.bind(forkedWeb3.eth, forkedAccounts[0]), - nonce: forkedWeb3.eth.getTransactionCount.bind(forkedWeb3.eth, forkedAccounts[0]) - }, function(err, result) { - if (err) return done(err); - initialFallbackAccountState = result; - initialFallbackAccountState.nonce = to.number(initialFallbackAccountState.nonce); - done(); - }); - }); - - before("Set main web3 provider, forking from forked chain at this point", function(done) { - mainWeb3.setProvider(TestRPC.provider({ - fork: forkedTargetUrl, - logger: logger, - - // Do not change seed. Determinism matters for these tests. - seed: "a different seed" - })); - - forkedWeb3.eth.getBlockNumber(function(err, number) { - if (err) return done(err); - forkBlockNumber = number; - done(); - }); - }); - - before("Gather main accounts", function(done) { - mainWeb3.eth.getAccounts(function(err, m) { - if (err) return done(err); - mainAccounts = m; - done(); - }); - }); - - after("Close down the forked TestRPC server", function(done){ - forkedServer.close(); - done(); - }); - - it("should fetch a contract from the forked provider via the main provider", function(done) { - mainWeb3.eth.getCode(contractAddress, function(err, mainCode) { - if (err) return done(err); - - // Ensure there's *something* there. - assert.notEqual(result, null); - assert.notEqual(result, "0x"); - assert.notEqual(result, "0x0"); - - // Now make sure it matches exactly. - forkedWeb3.eth.getCode(contractAddress, function(err, forkedCode) { - if (err) return done(err); - - assert.equal(mainCode, forkedCode); - done(); - }); - }); - }); - - it("should be able to get the balance of an address in the forked provider via the main provider", function(done) { - // Assert preconditions - var first_forked_account = forkedAccounts[0]; - assert(mainAccounts.indexOf(first_forked_account) < 0); - - // Now for the real test: Get the balance of a forked account through the main provider. - mainWeb3.eth.getBalance(first_forked_account, function(err, balance) { - if (err) return done(err); - - // We don't assert the exact balance as transactions cost eth - assert(balance > 999999); - done(); - }); - }); - - it("should be able to get storage values on the forked provider via the main provider", function(done) { - mainWeb3.eth.getStorageAt(contractAddress, contract.position_of_value, function(err, result) { - if (err) return done(err); - assert.equal(mainWeb3.toDecimal(result), 7); - done(); - }); - }); - - it("should be able to execute calls against a contract on the forked provider via the main provider", function(done) { - var Example = mainWeb3.eth.contract(JSON.parse(contract.abi)); - var example = Example.at(contractAddress); - - example.value({from: mainAccounts[0]}, function(err, result){ - if (err) return done(err); - assert.equal(mainWeb3.toDecimal(result), 7); - - // Make the call again to ensure caches updated and the call still works. - example.value({from: mainAccounts[0]}, function(err, result){ - if (err) return done(err); - assert.equal(mainWeb3.toDecimal(result), 7); - done(err); - }); - }); - }); - - it("should be able to make a transaction on the main provider while not transacting on the forked provider", function(done) { - var Example = mainWeb3.eth.contract(JSON.parse(contract.abi)); - var example = Example.at(contractAddress); - - var FallbackExample = forkedWeb3.eth.contract(JSON.parse(contract.abi)); - var forkedExample = FallbackExample.at(contractAddress); - - example.setValue(25, {from: mainAccounts[0]}, function(err) { - if (err) return done(err); - - // It insta-mines, so we can make a call directly after. - example.value({from: mainAccounts[0]}, function(err, result) { - if (err) return done(err); - assert.equal(mainWeb3.toDecimal(result), 25); - - // Now call back to the forked to ensure it's value stayed 5 - forkedExample.value({from: forkedAccounts[0]}, function(err, result) { - if (err) return done(err); - assert.equal(forkedWeb3.toDecimal(result), 7); - done(); - }) - }); - }); - }); - - it("should ignore continued transactions on the forked blockchain by pegging the forked block number", function(done) { - // In this test, we're going to use the second contract address that we haven't - // used previously. This ensures the data hasn't been cached on the main web3 trie - // yet, and it will require it forked to the forked provider at a specific block. - // If that block handling is done improperly, this should fail. - - var Example = mainWeb3.eth.contract(JSON.parse(contract.abi)); - var example = Example.at(secondContractAddress); - - var FallbackExample = forkedWeb3.eth.contract(JSON.parse(contract.abi)); - var forkedExample = FallbackExample.at(secondContractAddress); - - // This transaction happens entirely on the forked chain after forking. - // It should be ignored by the main chain. - forkedExample.setValue(800, {from: forkedAccounts[0]}, function(err, result) { - if (err) return done(err); - // Let's assert the value was set correctly. - forkedExample.value({from: forkedAccounts[0]}, function(err, result) { - if (err) return done(err); - assert.equal(forkedWeb3.toDecimal(result), 800); - - // Now lets check the value on the main chain. It shouldn't be 800. - example.value({from: mainAccounts[0]}, function(err, result) { - if (err) return done(err); - - assert.equal(mainWeb3.toDecimal(result), 5); - done(); - }) - }) - }); - }); - - it("should maintain a block number that includes new blocks PLUS the existing chain", function(done) { - // Note: The main provider should be at block 5 at this test. Reasoning: - // - The forked chain has an initial block, which is block 0. - // - The forked chain performed a transaction that produced a log, resulting in block 1. - // - The forked chain had two transactions initially, resulting blocks 2 and 3. - // - The main chain forked from there, creating its own initial block, block 4. - // - Then the main chain performed a transaction, putting it at block 5. - - mainWeb3.eth.getBlockNumber(function(err, result) { - if (err) return done(err); - - assert.equal(mainWeb3.toDecimal(result), 5); - - // Now lets get a block that exists on the forked chain. - mainWeb3.eth.getBlock(0, function(err, mainBlock) { - if (err) return done(err); - - // And compare it to the forked chain's block - forkedWeb3.eth.getBlock(0, function(err, forkedBlock) { - if (err) return done(err); - - // Block hashes should be the same. - assert.equal(mainBlock.hash, forkedBlock.hash); - - // Now make sure we can get the block by hash as well. - mainWeb3.eth.getBlock(mainBlock.hash, function(err, mainBlockByHash) { - if (err) return done(err); - - assert.equal(mainBlock.hash, mainBlockByHash.hash); - done(); - }); - }); - }); - }); - }); - - it("should have a genesis block whose parent is the last block from the forked provider", function(done) { - forkedWeb3.eth.getBlock(forkBlockNumber, function(err, forkedBlock) { - if (err) return done(err); - - var parentHash = forkedBlock.hash; - - var mainGenesisNumber = mainWeb3.toDecimal(forkBlockNumber) + 1; - mainWeb3.eth.getBlock(mainGenesisNumber, function(err, mainGenesis) { - if (err) return done(err); - - assert.equal(mainGenesis.parentHash, parentHash); - done(); - }) - }); - }); - - // Note: This test also puts a new contract on the forked chain, which is a good test. - it("should represent the block number correctly in the Oracle contract (oracle.blockhash0), providing forked block hash and number", function(done){ - var oracleSol = fs.readFileSync("./test/Oracle.sol", {encoding: "utf8"}); - var oracleOutput = solc.compile(oracleSol).contracts.Oracle; - - mainWeb3.eth.contract(JSON.parse(oracleOutput.interface)).new({ data: oracleOutput.bytecode, from: mainAccounts[0] }, function(err, oracle){ - if(err) return done(err) - if(!oracle.address) return - mainWeb3.eth.getBlock(0, function(err, block){ - if (err) return done(err) - oracle.blockhash0.call(function(err, blockhash){ - if (err) return done(err) - assert.equal(blockhash, block.hash); - - // Now check the block number. - mainWeb3.eth.getBlockNumber(function(err, expected_number) { - if (err) return done(err); - - oracle.currentBlock.call(function(err, number) { - if (err) return done(err); - assert.equal(number, expected_number); - - oracle.setCurrentBlock({from: mainAccounts[0]}, function(err, tx) { - if (err) return done(err); - - oracle.lastBlock.call({from: mainAccounts[0]}, function(err, val) { - if (err) return done(err); - - assert(val.eq(expected_number + 1)); - done(); - }); - }) - }); - }); - }) - }) - }) - }) - - it("should be able to get logs across the fork boundary", function(done) { - this.timeout(10000) - - var Example = mainWeb3.eth.contract(JSON.parse(contract.abi)); - var example = Example.at(contractAddress); - - var event = example.ValueSet({}, {fromBlock: 0, toBlock: "latest"}); - - event.get(function(err, logs) { - if (err) return callback(err); - assert.equal(logs.length, 2); - done(); - }); - }); - - it("should return the correct nonce based on block number", function(done) { - // Note for the first two requests, we choose the block numbers 1 before and after the fork to - // ensure we're pulling data off the correct provider in both cases. - async.parallel({ - nonceBeforeFork: mainWeb3.eth.getTransactionCount.bind(mainWeb3.eth, forkedAccounts[0], forkBlockNumber - 1), - nonceAtFork: mainWeb3.eth.getTransactionCount.bind(mainWeb3.eth, forkedAccounts[0], forkBlockNumber + 1), - nonceLatestMain: mainWeb3.eth.getTransactionCount.bind(mainWeb3.eth, forkedAccounts[0], "latest"), - nonceLatestFallback: forkedWeb3.eth.getTransactionCount.bind(forkedWeb3.eth, forkedAccounts[0], "latest") - }, function(err, results) { - if (err) return done(err); - - var nonceBeforeFork = results.nonceBeforeFork; - var nonceAtFork = results.nonceAtFork; - var nonceLatestMain = results.nonceLatestMain; - var nonceLatestFallback = results.nonceLatestFallback; - - // First ensure our nonces for the block before the fork - // Note that we're asking for the block *before* the forked block, - // which automatically means we sacrifice a transaction (i.e., one nonce value) - assert.equal(nonceBeforeFork, initialFallbackAccountState.nonce - 1); - - // Now check at the fork. We should expect our initial state. - assert.equal(nonceAtFork, initialFallbackAccountState.nonce); - - // Make sure the main web3 provider didn't alter the state of the forked account. - // This means the nonce should stay the same. - assert.equal(nonceLatestMain, initialFallbackAccountState.nonce); - - // And since we made one additional transaction with this account on the forked - // provider AFTER the fork, it's nonce should be one ahead, and the main provider's - // nonce for that address shouldn't acknowledge it. - assert.equal(nonceLatestFallback, nonceLatestMain + 1); - - done(); - }); - }); - - it("should return the correct balance based on block number", function(done) { - // Note for the first two requests, we choose the block numbers 1 before and after the fork to - // ensure we're pulling data off the correct provider in both cases. - async.parallel({ - balanceBeforeFork: mainWeb3.eth.getBalance.bind(mainWeb3.eth, forkedAccounts[0], forkBlockNumber - 1), - balanceAfterFork: mainWeb3.eth.getBalance.bind(mainWeb3.eth, forkedAccounts[0], forkBlockNumber + 1), - balanceLatestMain: mainWeb3.eth.getBalance.bind(mainWeb3.eth, forkedAccounts[0], "latest"), - balanceLatestFallback: forkedWeb3.eth.getBalance.bind(forkedWeb3.eth, forkedAccounts[0], "latest") - }, function(err, results) { - if (err) return done(err); - - var balanceBeforeFork = results.balanceBeforeFork; - var balanceAfterFork = results.balanceAfterFork; - var balanceLatestMain = results.balanceLatestMain; - var balanceLatestFallback = results.balanceLatestFallback; - - // First ensure our balances for the block before the fork - // We do this by simply ensuring the balance has decreased since exact values - // are hard to assert in this case. - assert(balanceBeforeFork.gt(balanceAfterFork)); - - // Since the forked provider had once extra transaction for this account, - // it should have a lower balance, and the main provider shouldn't acknowledge - // that transaction. - assert(balanceLatestMain.gt(balanceLatestFallback)); - - done(); - }); - }); - - it("should return the correct code based on block number", function(done) { - // This one is simpler than the previous two. Either the code exists or doesn't. - async.parallel({ - codeEarliest: mainWeb3.eth.getCode.bind(mainWeb3.eth, contractAddress, "earliest"), - codeAfterFork: mainWeb3.eth.getCode.bind(mainWeb3.eth, contractAddress, forkBlockNumber + 1), - codeLatest: mainWeb3.eth.getCode.bind(mainWeb3.eth, contractAddress, "latest") - }, function(err, results) { - if (err) return done(err); - - var codeEarliest = results.codeEarliest; - var codeAfterFork = results.codeAfterFork; - var codeLatest = results.codeLatest; - - // There should be no code initially. - assert(mainWeb3.toBigNumber(codeEarliest).eq(0)); - - // Arbitrary length check since we can't assert the exact value - assert(codeAfterFork.length > 20); - assert(codeLatest.length > 20); - - // These should be the same since code can't change. - assert.equal(codeAfterFork, codeLatest); - - done(); - }) - }); - - it("should return transactions for blocks requested before the fork", function(done) { - forkedWeb3.eth.getTransactionReceipt(initialDeployTransactionHash, function(err, receipt) { - if (err) return done(err); - - forkedWeb3.eth.getBlock(receipt.blockNumber, function(err, referenceBlock) { - if (err) return done(err); - - mainWeb3.eth.getBlock(receipt.blockNumber, function(err, forkedBlock) { - if (err) return done(err); - - assert.equal(forkedBlock.transactions.length, referenceBlock.transactions.length) - assert.deepEqual(forkedBlock.transactions, referenceBlock.transactions); - done(); - }); - }); - }); - }); - - it("should return a transaction for transactions made before the fork", function(done) { - forkedWeb3.eth.getTransaction(initialDeployTransactionHash, function(err, referenceTransaction) { - if (err) return done(err); - - mainWeb3.eth.getTransaction(initialDeployTransactionHash, function(err, forkedTransaction) { - if (err) return done(err); - - assert.deepEqual(referenceTransaction, forkedTransaction); - done(); - }); - }); - }); - - it("should return a transaction receipt for transactions made before the fork", function(done) { - forkedWeb3.eth.getTransactionReceipt(initialDeployTransactionHash, function(err, referenceReceipt) { - if (err) return done(err); - - mainWeb3.eth.getTransactionReceipt(initialDeployTransactionHash, function(err, forkedReceipt) { - if (err) return done(err); - - assert.deepEqual(referenceReceipt, forkedReceipt); - done(); - }); - }); - }) - - it("should return the same network version as the chain it forked from", function(done) { - forkedWeb3.version.getNetwork(function(err, forkedNetwork) { - if (err) return done(err); - - mainWeb3.version.getNetwork(function(err, mainNetwork) { - if (err) return done(err); - - assert.equal(mainNetwork, forkedNetwork); - done(); - }); - }) - }); -}); diff --git a/node_modules/ethereumjs-testrpc/test/gas.js b/node_modules/ethereumjs-testrpc/test/gas.js deleted file mode 100644 index 4b15e51..0000000 --- a/node_modules/ethereumjs-testrpc/test/gas.js +++ /dev/null @@ -1,80 +0,0 @@ -var Web3 = require('web3'); -var assert = require('assert'); -var TestRPC = require("../index.js"); -var fs = require("fs"); -var path = require("path"); - -describe("Gas Estimation", function() { - var web3 = new Web3(TestRPC.provider()); - var accounts; - var EstimateGasContract; - var EstimateGas; - var source = fs.readFileSync(path.join(__dirname, "EstimateGas.sol"), "utf8"); - - before("get accounts", function(done) { - web3.eth.getAccounts(function(err, accs) { - if (err) return done(err); - accounts = accs; - done(); - }); - }); - - before("compile source", function(done) { - this.timeout(5000); - web3.eth.compile.solidity(source, function(err, result) { - if (err) return done(err); - - var code = "0x" + result.code; - var abi = result.info.abiDefinition; - - EstimateGasContract = web3.eth.contract(abi); - EstimateGasContract._code = code; - EstimateGasContract.new({data: code, from: accounts[0]}, function(err, instance) { - if (err) return done(err); - if (!instance.address) return; - - EstimateGas = instance; - - done(); - }); - }) - }); - - function testTransactionEstimate(contractFn, args, done) { - var estimate = contractFn.estimateGas.bind.apply(contractFn.estimateGas, [contractFn].concat(args)); - var transaction = contractFn.bind.apply(contractFn, [contractFn].concat(args)); - - estimate(function(err, estimate) { - if (err) return done(err); - - // Now perform the actual transaction - transaction(function(err, tx) { - if (err) return done(err); - - // Get the gas usage. - web3.eth.getTransactionReceipt(tx, function(err, receipt) { - if (err) return done(err); - - // When instamining, gasUsed and cumulativeGasUsed should be the same. - assert.equal(receipt.gasUsed, estimate); - assert.equal(receipt.cumulativeGasUsed, estimate); - - done(); - }) - }) - }) - } - - // it("matches estimate for deployment", function(done) { - // testTransactionEstimate(EstimateGasContract.new, [{data: EstimateGasContract._code, from: accounts[0]}], done); - // }); - - it("matches usage for complex function call (add)", function(done) { - testTransactionEstimate(EstimateGas.add, ["Tim", "A great guy", 5, {from: accounts[0]}], done); - }); - - it("matches usage for complex function call (transfer)", function(done) { - testTransactionEstimate(EstimateGas.transfer, ["0x0123456789012345678901234567890123456789", 5, "Tim", {from: accounts[0]}], done); - }); - -}) diff --git a/node_modules/ethereumjs-testrpc/test/requests.js b/node_modules/ethereumjs-testrpc/test/requests.js deleted file mode 100644 index c719a94..0000000 --- a/node_modules/ethereumjs-testrpc/test/requests.js +++ /dev/null @@ -1,634 +0,0 @@ -var Web3 = require('web3'); -var Transaction = require('ethereumjs-tx'); -var utils = require('ethereumjs-util'); -var assert = require('assert'); -var TestRPC = require("../index.js"); -var solc = require("solc"); -var fs = require("fs"); - -var source = fs.readFileSync("./test/Example.sol", {encoding: "utf8"}); -var result = solc.compile(source, 1); - -// Thanks solc. At least this works! -// This removes solc's overzealous uncaughtException event handler. -process.removeAllListeners("uncaughtException"); - - -// Note: Certain properties of the following contract data are hardcoded to -// maintain repeatable tests. If you significantly change the solidity code, -// make sure to update the resulting contract data with the correct values. -var contract = { - solidity: source, - abi: result.contracts.Example.interface, - binary: "0x" + result.contracts.Example.bytecode, - position_of_value: "0x0000000000000000000000000000000000000000000000000000000000000000", - expected_default_value: 5, - call_data: { - gasPrice: '0x01', // This is important, as passing it has exposed errors in the past. - to: null, // set by test - data: '0x3fa4f245' - }, - transaction_data: { - from: null, // set by test - to: null, // set by test - data: '0x552410770000000000000000000000000000000000000000000000000000000000000019' // sets value to 25 (base 10) - } -}; - -var tests = function(web3) { - var accounts; - - before(function(done) { - web3.eth.getAccounts(function(err, accs) { - if (err) return done(err); - - accounts = accs; - done(); - }); - }); - - describe("eth_accounts", function() { - it("should return 10 addresses", function(done) { - assert.deepEqual(accounts.length, 10); - done(); - }); - }); - - describe("eth_blockNumber", function() { - it("should return initial block number of zero", function(done) { - var number = web3.eth.getBlockNumber(function(err, result) { - if (err) return done(err); - - assert.deepEqual(result, 0); - done(); - }); - - // Note: We'll assert the block number changes on transactions. - }); - }); - - describe("eth_coinbase", function() { - it("should return correct address", function(done) { - web3.eth.getCoinbase(function(err, coinbase) { - if (err) return done(err); - - assert.deepEqual(coinbase, accounts[0]); - done(); - }); - }); - }); - - describe("eth_mining", function() { - it("should return true", function(done) { - web3.eth.getMining(function(err, result) { - if (err) return done(err); - - assert.deepEqual(result, true); - done(); - }); - }); - }); - - describe("eth_hashrate", function() { - it("should return hashrate of zero", function(done) { - web3.eth.getHashrate(function(err, result) { - if (err) return done(err); - - assert.deepEqual(result, 0); - done(); - }); - }); - }); - - describe("eth_gasPrice", function() { - it("should return gas price of 1", function(done) { - web3.eth.getGasPrice(function(err, result) { - if (err) return done(err); - - assert.deepEqual(result.toNumber(), 1); - done(); - }); - }); - }); - - describe("eth_getBalance", function() { - it("should return initial balance", function(done) { - web3.eth.getBalance(accounts[0], function(err, result) { - if (err) return done(err); - - assert.deepEqual("0x00000000000000" + result.toString(16), "0x0000000000000056bc75e2d63100000"); - done(); - }); - }); - - it("should return 0 for non-existent account", function(done) { - web3.eth.getBalance("0x1234567890123456789012345678901234567890", function(err, result) { - if (err) return done(err); - - assert.equal("0x" + result.toString(16), "0x0"); - done(); - }); - }); - }); - - describe("eth_getBlockByNumber", function() { - it("should return block given the block number", function(done) { - web3.eth.getBlock(0, function(err, block) { - if (err) return done(err); - - var expectedFirstBlock = { - number: 0, - hash: block.hash, // Don't test this one - parentHash: '0x0000000000000000000000000000000000000000000000000000000000000000', - nonce: '0x0', - sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', - transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', - stateRoot: '0x484475ce2cad3b248148f8e0ed8b1a65da0b7d6b541ab5c6ef9393477724a619', - receiptRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', - miner: '0x0000000000000000000000000000000000000000', - difficulty: { s: 1, e: 0, c: [ 0 ] }, - totalDifficulty: { s: 1, e: 0, c: [ 0 ] }, - extraData: '0x0', - size: 1000, - gasLimit: 4712388, - gasUsed: 0, - timestamp: block.timestamp, // Don't test this one. - transactions: [], - uncles: [] - }; - - assert.deepEqual(block, expectedFirstBlock); - - var now = (new Date()).getTime(); - var then = block.timestamp * 1000; // block.timestamp is in seconds. - - assert.equal(then.toString().length, now.toString().length, "Invalid timestamp length"); - assert(then < now, "Time returned was greater than the current time"); - done(); - }); - }); - - it("should return transactions in the block as well", function(done) { - web3.eth.sendTransaction({ - from: accounts[0], - data: contract.binary - }, function(err, tx_hash) { - if (err) return done(err); - - // Assume it was processed correctly. - assert.deepEqual(tx_hash.length, 66); - - web3.eth.getBlock("latest", function(err, block) { - if (err) return done(err); - - assert.equal(block.transactions.length, 1, "Latest block should have one transaction"); - assert.equal(block.transactions[0].hash, tx_hash, "Transaction hashes don't match"); - - done(); - }); - }); - }); - }); - - // Relies on the validity of eth_getBlockByNumber above. - describe("eth_getBlockByHash", function() { - it("should return block given the block hash", function(done) { - web3.eth.getBlock(0, function(err, blockByNumber) { - if (err) return done(err); - - web3.eth.getBlock(blockByNumber.hash, function(err, blockByHash) { - if (err) return done(err); - - assert.deepEqual(blockByHash, blockByNumber); - done(); - }); - }); - }); - }); - - describe("eth_sign", function() { - it("should produce a signature whose signer can be recovered", function(done) { - var msg = web3.sha3("asparagus"); - web3.eth.sign(accounts[0], msg, function(err, sgn) { - if (err) return done(err); - - sgn = utils.stripHexPrefix(sgn); - var r = new Buffer(sgn.slice(0, 64), 'hex'); - var s = new Buffer(sgn.slice(64, 128), 'hex'); - var v = new Buffer((parseInt(sgn.slice(128, 130), 16) + 27).toString(16), 'hex'); - var pub = utils.ecrecover(utils.toBuffer(msg), v, r, s); - var addr = utils.setLength(utils.fromSigned(utils.pubToAddress(pub)), 20); - addr = utils.addHexPrefix(addr.toString('hex')); - assert.deepEqual(addr, accounts[0]); - done(); - }); - }); - }); - - - describe("contract scenario", function() { - - // These are expected to be run in order. - var initialTransaction; - var contractAddress; - - it("should add a contract to the network (eth_sendTransaction)", function(done) { - web3.eth.sendTransaction({ - from: accounts[0], - data: contract.binary - }, function(err, result) { - if (err) return done(err); - - initialTransaction = result; - assert.deepEqual(initialTransaction.length, 66); - done(); - }); - }); - - it("should verify the transaction immediately (eth_getTransactionReceipt)", function(done) { - web3.eth.getTransactionReceipt(initialTransaction, function(err, receipt) { - if (err) return done(err); - - contractAddress = receipt.contractAddress; - - assert.notEqual(receipt, null, "Transaction receipt shouldn't be null"); - assert.notEqual(contractAddress, null, "Transaction did not create a contract"); - done(); - }); - }); - - it("should return null if asked for a receipt for a nonexistent transaction (eth_getTransactionReceipt)", function(done) { - web3.eth.getTransactionReceipt("0xdeadbeef", function(err, receipt) { - if (err) return done(err); - - assert.equal(receipt, null, "Transaction receipt should be null"); - done(); - }); - }); - - it("should verify there's code at the address (eth_getCode)", function(done) { - web3.eth.getCode(contractAddress, function(err, result) { - if (err) return done(err); - assert.notEqual(result, null); - assert.notEqual(result, "0x"); - - // NOTE: We can't test the code returned is correct because the results - // of getCode() are *supposed* to be different than the code that was - // added to the chain. - - done(); - }); - }); - - it("should be able to read data via a call (eth_call)", function(done) { - var call_data = contract.call_data; - call_data.to = contractAddress; - call_data.from = accounts[0]; - - var starting_block_number = null; - - // TODO: Removing this callback hell would be nice. - web3.eth.getBlockNumber(function(err, result) { - if (err) return done(err); - - starting_block_number = result; - - web3.eth.call(call_data, function(err, result) { - if (err) return done(err); - assert.equal(web3.toDecimal(result), 5); - - web3.eth.getBlockNumber(function(err, result) { - if (err) return done(err); - - assert.equal(result, starting_block_number, "eth_call increased block count when it shouldn't have"); - done(); - }); - }); - }); - }); - - it("should be able to make a call from an address not in the accounts list (eth_call)", function(done) { - var from = "0x1234567890123456789012345678901234567890"; - - // Assert precondition: Ensure from address isn't in the accounts list. - accounts.forEach(function(account) { - assert.notEqual(from, account, "Test preconditions not met: from address must not be within the accounts list, please rerun"); - }); - - var call_data = contract.call_data; - call_data.to = contractAddress; - call_data.from = from; - - web3.eth.call(call_data, function(err, result) { - if (err) return done(err); - assert.equal(web3.toDecimal(result), 5); - - done(); - }); - }); - - it("should be able to make a call when no address is listed (eth_call)", function(done) { - var call_data = contract.call_data; - call_data.to = contractAddress; - delete call_data.from; - - web3.eth.call(call_data, function(err, result) { - if (err) return done(err); - assert.equal(web3.toDecimal(result), 5); - - done(); - }); - }); - - it("should represent the block number correctly in the Oracle contract (oracle.blockhash0)", function(done){ - var oracleSol = fs.readFileSync("./test/Oracle.sol", {encoding: "utf8"}); - var oracleOutput = solc.compile(oracleSol).contracts.Oracle - web3.eth.contract(JSON.parse(oracleOutput.interface)).new({ data: oracleOutput.bytecode, from: accounts[0] }, function(err, oracle){ - if(err) return done(err) - if(!oracle.address) return - web3.eth.getBlock(0, function(err, block){ - if (err) return done(err) - oracle.blockhash0(function(err, blockhash){ - if (err) return done(err) - assert.equal(blockhash, block.hash); - done() - }) - }) - }) - }) - - it("should be able to estimate gas of a transaction (eth_estimateGas)", function(done){ - var tx_data = contract.transaction_data; - tx_data.to = contractAddress; - tx_data.from = accounts[0]; - - var starting_block_number = null; - - // TODO: Removing this callback hell would be nice. - web3.eth.getBlockNumber(function(err, result) { - if (err) return done(err); - - starting_block_number = result; - - web3.eth.estimateGas(tx_data, function(err, result) { - if (err) return done(err); - assert.equal(result, 27626); - - web3.eth.getBlockNumber(function(err, result) { - if (err) return done(err); - - assert.equal(result, starting_block_number, "eth_estimateGas increased block count when it shouldn't have"); - done(); - }); - }); - }); - }); - - it("should be able to estimate gas from an account not within the accounts list (eth_estimateGas)", function(done){ - var tx_data = contract.transaction_data; - tx_data.to = contractAddress; - tx_data.from = "0x1234567890123456789012345678901234567890";; - - var starting_block_number = null; - - web3.eth.estimateGas(tx_data, function(err, result) { - if (err) return done(err); - assert.equal(result, 27626); - done(); - }); - }); - - it("should be able to estimate gas when no account is listed (eth_estimateGas)", function(done){ - var tx_data = contract.transaction_data; - tx_data.to = contractAddress; - delete tx_data.from; - - var starting_block_number = null; - - web3.eth.estimateGas(tx_data, function(err, result) { - if (err) return done(err); - assert.equal(result, 27626); - done(); - }); - }); - - it("should be able to send a state changing transaction (eth_sendTransaction)", function(done) { - var tx_data = contract.transaction_data; - tx_data.to = contractAddress; - tx_data.from = accounts[0]; - - var call_data = contract.call_data; - call_data.from = accounts[0]; - call_data.to = contractAddress; - - web3.eth.sendTransaction(tx_data, function(err, tx) { - if (err) return done(err); - // Now double check the data was set properly. - // NOTE: Because ethereumjs-testrpc processes transactions immediately, - // we can do this. Calling the call immediately after the transaction would - // fail on a different Ethereum client. - - web3.eth.getTransactionReceipt(tx, function(err, receipt) { - if (err) return done(err); - - assert.equal(receipt.logs.length, 1, "Receipt had wrong amount of logs"); - assert.equal(receipt.logs[0].blockHash, receipt.blockHash, "Logs blockhash doesn't match block blockhash"); - - //console.log(call_data); - web3.eth.call(call_data, function(err, result) { - if (err) return done(err); - - assert.equal(web3.toDecimal(result), 25); - done(); - }); - }); - }); - }); - - it("should only be able to send an unsigned state changing transaction from an address within the accounts list (eth_sendTransaction)", function(done) { - var badAddress = "0x1234567890123456789012345678901234567890"; - - var tx_data = {}; - tx_data.to = "0x1111111111000000000011111111110000000000"; - tx_data.from = badAddress; - tx_data.value = "0x1"; - - web3.eth.sendTransaction(tx_data, function(err, result) { - if (err) { - assert.notEqual(err.message.indexOf("could not unlock signer account"), -1); - done(); - } else { - assert.fail("Should have received an error") - } - }); - }); - - it("should get the data from storage (eth_getStorageAt)", function(done) { - web3.eth.getStorageAt(contractAddress, contract.position_of_value, function(err, result) { - assert.equal(web3.toDecimal(result), 25); - done(); - }); - }); - - }); - - describe("contract scenario (raw tx)", function() { - - var tx = new Transaction({ - data: contract.binary, - }) - var privateKey = new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex') - var senderAddress = '0x'+utils.privateToAddress(privateKey).toString('hex') - tx.sign(privateKey) - var rawTx = '0x'+tx.serialize().toString('hex') - - // These are expected to be run in order. - var initialTransaction; - var contractAddress; - - it("should first populate senders address", function(done) { - // populate senders balance - web3.eth.sendTransaction({ - from: accounts[0], - to: senderAddress, - value: '0x3141592', - }, function(err, result) { - if (err) return done(err); - done(); - }); - }); - - it("should add a contract to the network (eth_sendRawTransaction)", function(done) { - web3.eth.sendRawTransaction(rawTx, function(err, result) { - if (err) return done(err); - initialTransaction = result; - done(); - }); - }); - - it("should verify the transaction immediately (eth_getTransactionReceipt)", function(done) { - web3.eth.getTransactionReceipt(initialTransaction, function(err, receipt) { - if (err) return done(err); - - contractAddress = receipt.contractAddress; - - assert.notEqual(receipt, null, "Transaction receipt shouldn't be null"); - assert.notEqual(contractAddress, null, "Transaction did not create a contract"); - done(); - }); - }); - - it("should verify there's code at the address (eth_getCode)", function(done) { - web3.eth.getCode(contractAddress, function(err, result) { - if (err) return done(err); - assert.notEqual(result, null); - assert.notEqual(result, "0x"); - - // NOTE: We can't test the code returned is correct because the results - // of getCode() are *supposed* to be different than the code that was - // added to the chain. - - done(); - }); - }); - - }); - - describe("eth_getTransactionByHash", function() { - it("should return transaction"); //, function() { - }); - - describe("eth_getTransactionCount", function() { - //it("should return number of transactions sent from an address"); //, function() { - - it("should return 0 for non-existent account", function(done) { - web3.eth.getTransactionCount("0x1234567890123456789012345678901234567890", function(err, result) { - if (err) return done(err); - - assert.equal(result, "0x0"); - done(); - }); - }); - }); - - describe("eth_compileSolidity", function() { - this.timeout(5000); - it("correctly compiles solidity code", function(done) { - web3.eth.compile.solidity(source, function(err, result) { - if (err) return done(err); - assert.equal(result.code, contract.binary.replace("0x", "")); - done(); - }); - }); - }); - - describe("web3_sha3", function() { - it("should hash the given input", function(done) { - var input = "Tim is a swell guy."; - - // web3.sha3() doesn't actually call the function, so we need to call it ourselves. - web3.currentProvider.sendAsync({ - jsonrpc: "2.0", - method: "web3_sha3", - params: [input], - id: new Date().getTime() - }, function(err, result) { - if (err) return done(err); - if (result.error) return done(result.error); - - assert.equal(result.result, web3.sha3(input)); - done(); - }) - }); - }); - - describe("net_version", function() { - it("should return a version very close to the current time", function(done) { - web3.version.getNetwork(function(err, result) { - if (err) return done(err); - - assert.equal(result.length, (new Date().getTime() + "").length, "net_version result doesn't appear to be similar in length the current time as an integer") - done(); - }); - }); - }); -}; - -var logger = { - log: function(message) { - //console.log(message); - } -}; - -describe("Provider:", function() { - var web3 = new Web3(); - web3.setProvider(TestRPC.provider({ - logger: logger, - seed: "1337" - })); - tests(web3); -}); - -describe("Server:", function(done) { - var web3 = new Web3(); - var port = 12345; - var server; - - before("Initialize TestRPC server", function(done) { - server = TestRPC.server({ - logger: logger, - seed: "1337" - }); - server.listen(port, function() { - web3.setProvider(new Web3.providers.HttpProvider("http://localhost:" + port)); - done(); - }); - }); - - after("Shutdown server", function(done) { - server.close(done); - }); - - tests(web3); -}); diff --git a/node_modules/ethereumjs-testrpc/test/stability.js b/node_modules/ethereumjs-testrpc/test/stability.js deleted file mode 100644 index 045219f..0000000 --- a/node_modules/ethereumjs-testrpc/test/stability.js +++ /dev/null @@ -1,98 +0,0 @@ -var Web3 = require('web3'); -var assert = require('assert'); -var TestRPC = require("../index.js"); - -var logger = { - log: function(message) { - //console.log(message); - } -}; - -describe("TestRPC", function(done) { - var web3 = new Web3(); - var port = 12345; - var server; - var accounts; - - before("Initialize TestRPC server", function(done) { - server = TestRPC.server({ - logger: logger - }); - server.listen(port, function() { - web3.setProvider(new Web3.providers.HttpProvider("http://localhost:" + port)); - done(); - }); - }); - - before(function(done) { - web3.eth.getAccounts(function(err, accs) { - if (err) return done(err); - - accounts = accs; - done(); - }); - }); - - after("Shutdown server", function(done) { - server.close(done); - }); - - it("should be able to handle multiple transactions at once and manage nonces accordingly", function(done) { - var expected = 5; - var received = 0; - var callback_called = false; - - var txHandler = function(err, result) { - if (callback_called) { - return; - } - - received += 1; - - if (err || received >= expected) { - callback_called = true; - return done(err); - } - }; - - // Fire off transaction at once - for (var i = 0; i < expected; i++) { - web3.eth.sendTransaction({ - from: accounts[0], - to: accounts[1], - value: web3.toWei(1, "ether") - }, txHandler); - } - }); - - it("should be able to handle batch transactions", function() { - var expected = 5; - var received = 0; - var callback_called = false; - - var txHandler = function(err, result) { - if (callback_called) { - return; - } - - received += 1; - - if (err || received >= expected) { - callback_called = true; - return done(err); - } - }; - - var batch = web3.createBatch(); - - for (var i = 0; i < expected; i++) { - batch.add(web3.eth.sendTransaction.request({ - from: accounts[0], - to: accounts[1], - value: web3.toWei(1, "ether") - }), txHandler); - } - - batch.execute(); - }); -}); diff --git a/node_modules/ethereumjs-testrpc/test/time_adjust.js b/node_modules/ethereumjs-testrpc/test/time_adjust.js deleted file mode 100644 index dd3fa50..0000000 --- a/node_modules/ethereumjs-testrpc/test/time_adjust.js +++ /dev/null @@ -1,67 +0,0 @@ -var TestRPC = require("../index.js"); -var assert = require('assert'); -var Web3 = require("web3"); - -describe('Time adjustment', function() { - var startTime = new Date("Wed Aug 24 2016 00:00:00 GMT-0700 (PDT)"); - var provider = TestRPC.provider({ - time: startTime - }); - var web3 = new Web3(provider); - var secondsToJump = 5 * 60 * 60; - - var timestampBeforeJump; - - function send(method, params, callback) { - if (typeof params == "function") { - callback = params; - params = []; - } - - provider.sendAsync({ - jsonrpc: "2.0", - method: method, - params: params || [], - id: new Date().getTime() - }, callback); - }; - - before('get current time', function(done) { - web3.eth.getBlock('latest', function(err, block){ - if(err) return done(err) - timestampBeforeJump = block.timestamp - done() - }) - }) - - it('should mine the first block at the time provided', function(done) { - web3.eth.getBlock(0, function(err, result) { - assert.equal(result.timestamp, startTime / 1000 | 0); - done(); - }); - }); - - it('should jump 5 hours', function(done) { - // Adjust time - send("evm_increaseTime", [secondsToJump], function(err, result) { - if (err) return done(err); - - // Mine a block so new time is recorded. - send("evm_mine", function(err, result) { - if (err) return done(err); - - web3.eth.getBlock('latest', function(err, block){ - if(err) return done(err) - var secondsJumped = block.timestamp - timestampBeforeJump - - // Somehow it jumps an extra 18 seconds, ish, when run inside the whole - // test suite. It might have something to do with when the before block - // runs and when the test runs. Likely the last block didn't occur for - // awhile. - assert(secondsJumped >= secondsToJump) - done() - }) - }) - }) - }) -}) diff --git a/node_modules/ethereumjs-tx/.index.js.swm b/node_modules/ethereumjs-tx/.index.js.swm deleted file mode 100644 index f7d7b4e..0000000 Binary files a/node_modules/ethereumjs-tx/.index.js.swm and /dev/null differ diff --git a/node_modules/ethereumjs-tx/.index.js.swn b/node_modules/ethereumjs-tx/.index.js.swn deleted file mode 100644 index f9bae3a..0000000 Binary files a/node_modules/ethereumjs-tx/.index.js.swn and /dev/null differ diff --git a/node_modules/ethereumjs-tx/.index.js.swo b/node_modules/ethereumjs-tx/.index.js.swo deleted file mode 100644 index db16a89..0000000 Binary files a/node_modules/ethereumjs-tx/.index.js.swo and /dev/null differ diff --git a/node_modules/ethereumjs-tx/.package.json.swm b/node_modules/ethereumjs-tx/.package.json.swm deleted file mode 100644 index dcc0395..0000000 Binary files a/node_modules/ethereumjs-tx/.package.json.swm and /dev/null differ diff --git a/node_modules/ethereumjs-tx/.package.json.swn b/node_modules/ethereumjs-tx/.package.json.swn deleted file mode 100644 index 57c1daf..0000000 Binary files a/node_modules/ethereumjs-tx/.package.json.swn and /dev/null differ diff --git a/node_modules/ethereumjs-tx/.package.json.swo b/node_modules/ethereumjs-tx/.package.json.swo deleted file mode 100644 index 4249e4f..0000000 Binary files a/node_modules/ethereumjs-tx/.package.json.swo and /dev/null differ diff --git a/node_modules/ethereumjs-tx/.tern-port b/node_modules/ethereumjs-tx/.tern-port deleted file mode 100644 index 049b5d9..0000000 --- a/node_modules/ethereumjs-tx/.tern-port +++ /dev/null @@ -1 +0,0 @@ -41579 \ No newline at end of file diff --git a/node_modules/ethereumjs-tx/.travis.yml b/node_modules/ethereumjs-tx/.travis.yml deleted file mode 100644 index 5c9c77c..0000000 --- a/node_modules/ethereumjs-tx/.travis.yml +++ /dev/null @@ -1,32 +0,0 @@ -language: node_js -node_js: - - "4" - - "5" -env: - - CXX=g++-4.8 -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 -before_install: - - sh -e /etc/init.d/xvfb start -env: - global: - - DISPLAY=:99.0 - matrix: - - CXX=g++-4.8 TEST_SUITE=test:node -matrix: - fast_finish: true - include: - - os: linux - node_js: "4" - env: CXX=g++-4.8 TEST_SUITE=coveralls - - os: linux - node_js: "4" - env: CXX=g++-4.8 TEST_SUITE=lint - # - os: linux - # node_js: "4" - # env: CXX=g++-4.8 TEST_SUITE=test:browser -script: npm run $TEST_SUITE diff --git a/node_modules/ethereumjs-tx/.versions b/node_modules/ethereumjs-tx/.versions deleted file mode 100644 index 4c2f3e2..0000000 --- a/node_modules/ethereumjs-tx/.versions +++ /dev/null @@ -1,3 +0,0 @@ -meteor@1.1.6 -mjbecze:ethereumjs-tx@0.4.0 -underscore@1.0.3 diff --git a/node_modules/ethereumjs-tx/LICENSE b/node_modules/ethereumjs-tx/LICENSE deleted file mode 100644 index 14e2f77..0000000 --- a/node_modules/ethereumjs-tx/LICENSE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/node_modules/ethereumjs-tx/README.md b/node_modules/ethereumjs-tx/README.md deleted file mode 100644 index 339f077..0000000 --- a/node_modules/ethereumjs-tx/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# SYNOPSIS -[![NPM Package](https://img.shields.io/npm/v/ethereumjs-tx.svg?style=flat-square)](https://www.npmjs.org/package/ethereumjs-tx) -[![Build Status](https://img.shields.io/travis/ethereumjs/ethereumjs-tx.svg?branch=master&style=flat-square)](https://travis-ci.org/ethereumjs/ethereumjs-tx) -[![Coverage Status](https://img.shields.io/coveralls/ethereumjs/ethereumjs-tx.svg?style=flat-square)](https://coveralls.io/r/ethereumjs/ethereumjs-tx) -[![Gitter](https://img.shields.io/gitter/room/ethereum/ethereumjs-lib.svg?style=flat-square)](https://gitter.im/ethereum/ethereumjs-lib) or #ethereumjs on freenode - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -# INSTALL -`npm install ethereumjs-tx` - -# USAGE - - - [example](https://github.com/ethereumjs/ethereumjs-tx/blob/master/examples/transactions.js) - -```javascript -var Tx = require('ethereumjs-tx') -var privateKey = new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex') - -var rawTx = { - nonce: '0x00', - gasPrice: '0x09184e72a000', - gasLimit: '0x2710', - to: '0x0000000000000000000000000000000000000000', - value: '0x00', - data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057' -} - -var tx = new Tx(rawTx) -tx.sign(privateKey) - -var serializedTx = tx.serialize() -``` - -**Note:** this package expects ECMAScript 6 (ES6) as a minimum environment. From browsers lacking ES6 support, please use a shim (like [es6-shim](https://github.com/paulmillr/es6-shim)) before including any of the builds from this repo. - - -# BROWSER -For a browser build please see https://github.com/ethereumjs/browser-builds. - -# API -[./docs/](./docs/index.md) - -# LICENSE -[MPL-2.0](https://tldrlegal.com/license/mozilla-public-license-2.0-(mpl-2)) diff --git a/node_modules/ethereumjs-tx/coverage/coverage.json b/node_modules/ethereumjs-tx/coverage/coverage.json deleted file mode 100644 index 06b8488..0000000 --- a/node_modules/ethereumjs-tx/coverage/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"/home/null/code/ethereumjs-tx/index.js":{"path":"/home/null/code/ethereumjs-tx/index.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":132,"10":132,"11":0,"12":0,"13":0,"14":0,"15":0,"16":132,"17":1,"18":5,"19":1,"20":67,"21":67,"22":0,"23":67,"24":0,"25":67,"26":67,"27":1,"28":26,"29":26,"30":26,"31":1,"32":26,"33":0,"34":26,"35":1,"36":64,"37":64,"38":64,"39":64,"40":21,"41":43,"42":0,"43":43,"44":0,"45":0,"46":0,"47":43,"48":43,"49":1,"50":3,"51":3,"52":3,"53":3,"54":3,"55":1,"56":37,"57":37,"58":37,"59":10486351,"60":167,"61":10486184,"62":37,"63":1,"64":37,"65":1,"66":0,"67":1,"68":55},"b":{"1":[0,0],"2":[0,67],"3":[0,67],"4":[0,26],"5":[26,26],"6":[0,43],"7":[0,43],"8":[0,0],"9":[167,10486184],"10":[55,37]},"f":{"1":132,"2":0,"3":0,"4":5,"5":67,"6":26,"7":26,"8":64,"9":3,"10":37,"11":37,"12":0,"13":55},"fnMap":{"1":{"name":"(anonymous_1)","line":16,"loc":{"start":{"line":16,"column":35},"end":{"line":16,"column":51}}},"2":{"name":"(anonymous_2)","line":66,"loc":{"start":{"line":66,"column":9},"end":{"line":66,"column":21}}},"3":{"name":"(anonymous_3)","line":73,"loc":{"start":{"line":73,"column":9},"end":{"line":73,"column":22}}},"4":{"name":"(anonymous_4)","line":86,"loc":{"start":{"line":86,"column":34},"end":{"line":86,"column":46}}},"5":{"name":"(anonymous_5)","line":96,"loc":{"start":{"line":96,"column":29},"end":{"line":96,"column":50}}},"6":{"name":"(anonymous_6)","line":118,"loc":{"start":{"line":118,"column":41},"end":{"line":118,"column":53}}},"7":{"name":"(anonymous_7)","line":129,"loc":{"start":{"line":129,"column":43},"end":{"line":129,"column":55}}},"8":{"name":"(anonymous_8)","line":141,"loc":{"start":{"line":141,"column":40},"end":{"line":141,"column":52}}},"9":{"name":"(anonymous_9)","line":175,"loc":{"start":{"line":175,"column":29},"end":{"line":175,"column":51}}},"10":{"name":"(anonymous_10)","line":188,"loc":{"start":{"line":188,"column":35},"end":{"line":188,"column":47}}},"11":{"name":"(anonymous_11)","line":206,"loc":{"start":{"line":206,"column":35},"end":{"line":206,"column":47}}},"12":{"name":"(anonymous_12)","line":215,"loc":{"start":{"line":215,"column":39},"end":{"line":215,"column":51}}},"13":{"name":"(anonymous_13)","line":226,"loc":{"start":{"line":226,"column":33},"end":{"line":226,"column":45}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":42}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"3":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"4":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"5":{"start":{"line":5,"column":0},"end":{"line":5,"column":23}},"6":{"start":{"line":8,"column":0},"end":{"line":8,"column":22}},"7":{"start":{"line":9,"column":0},"end":{"line":9,"column":24}},"8":{"start":{"line":16,"column":0},"end":{"line":79,"column":1}},"9":{"start":{"line":18,"column":2},"end":{"line":61,"column":4}},"10":{"start":{"line":63,"column":2},"end":{"line":76,"column":4}},"11":{"start":{"line":67,"column":6},"end":{"line":69,"column":7}},"12":{"start":{"line":68,"column":8},"end":{"line":68,"column":25}},"13":{"start":{"line":70,"column":6},"end":{"line":70,"column":42}},"14":{"start":{"line":71,"column":6},"end":{"line":71,"column":23}},"15":{"start":{"line":74,"column":6},"end":{"line":74,"column":20}},"16":{"start":{"line":78,"column":2},"end":{"line":78,"column":46}},"17":{"start":{"line":86,"column":0},"end":{"line":88,"column":1}},"18":{"start":{"line":87,"column":2},"end":{"line":87,"column":29}},"19":{"start":{"line":96,"column":0},"end":{"line":111,"column":1}},"20":{"start":{"line":97,"column":2},"end":{"line":97,"column":12}},"21":{"start":{"line":99,"column":2},"end":{"line":101,"column":3}},"22":{"start":{"line":100,"column":4},"end":{"line":100,"column":20}},"23":{"start":{"line":103,"column":2},"end":{"line":107,"column":3}},"24":{"start":{"line":104,"column":4},"end":{"line":104,"column":21}},"25":{"start":{"line":106,"column":4},"end":{"line":106,"column":33}},"26":{"start":{"line":110,"column":2},"end":{"line":110,"column":41}},"27":{"start":{"line":118,"column":0},"end":{"line":122,"column":1}},"28":{"start":{"line":119,"column":2},"end":{"line":119,"column":40}},"29":{"start":{"line":120,"column":2},"end":{"line":120,"column":48}},"30":{"start":{"line":121,"column":2},"end":{"line":121,"column":37}},"31":{"start":{"line":129,"column":0},"end":{"line":135,"column":1}},"32":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"33":{"start":{"line":131,"column":4},"end":{"line":131,"column":26}},"34":{"start":{"line":134,"column":2},"end":{"line":134,"column":27}},"35":{"start":{"line":141,"column":0},"end":{"line":169,"column":1}},"36":{"start":{"line":142,"column":2},"end":{"line":142,"column":32}},"37":{"start":{"line":143,"column":2},"end":{"line":146,"column":3}},"38":{"start":{"line":148,"column":2},"end":{"line":152,"column":3}},"39":{"start":{"line":149,"column":4},"end":{"line":149,"column":80}},"40":{"start":{"line":151,"column":4},"end":{"line":151,"column":16}},"41":{"start":{"line":154,"column":2},"end":{"line":156,"column":3}},"42":{"start":{"line":155,"column":4},"end":{"line":155,"column":16}},"43":{"start":{"line":159,"column":2},"end":{"line":166,"column":3}},"44":{"start":{"line":160,"column":4},"end":{"line":160,"column":77}},"45":{"start":{"line":161,"column":4},"end":{"line":163,"column":5}},"46":{"start":{"line":162,"column":6},"end":{"line":162,"column":31}},"47":{"start":{"line":165,"column":4},"end":{"line":165,"column":33}},"48":{"start":{"line":168,"column":2},"end":{"line":168,"column":15}},"49":{"start":{"line":175,"column":0},"end":{"line":182,"column":1}},"50":{"start":{"line":176,"column":2},"end":{"line":176,"column":32}},"51":{"start":{"line":177,"column":2},"end":{"line":177,"column":47}},"52":{"start":{"line":179,"column":2},"end":{"line":179,"column":37}},"53":{"start":{"line":180,"column":2},"end":{"line":180,"column":38}},"54":{"start":{"line":181,"column":2},"end":{"line":181,"column":28}},"55":{"start":{"line":188,"column":0},"end":{"line":199,"column":1}},"56":{"start":{"line":189,"column":2},"end":{"line":189,"column":26}},"57":{"start":{"line":190,"column":2},"end":{"line":190,"column":22}},"58":{"start":{"line":191,"column":2},"end":{"line":197,"column":3}},"59":{"start":{"line":192,"column":4},"end":{"line":196,"column":5}},"60":{"start":{"line":193,"column":6},"end":{"line":193,"column":38}},"61":{"start":{"line":195,"column":6},"end":{"line":195,"column":41}},"62":{"start":{"line":198,"column":2},"end":{"line":198,"column":13}},"63":{"start":{"line":206,"column":0},"end":{"line":208,"column":1}},"64":{"start":{"line":207,"column":2},"end":{"line":207,"column":45}},"65":{"start":{"line":215,"column":0},"end":{"line":219,"column":1}},"66":{"start":{"line":216,"column":2},"end":{"line":218,"column":28}},"67":{"start":{"line":226,"column":0},"end":{"line":228,"column":1}},"68":{"start":{"line":227,"column":2},"end":{"line":227,"column":111}}},"branchMap":{"1":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":6}},{"start":{"line":67,"column":6},"end":{"line":67,"column":6}}]},"2":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":2},"end":{"line":99,"column":2}},{"start":{"line":99,"column":2},"end":{"line":99,"column":2}}]},"3":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":2},"end":{"line":103,"column":2}},{"start":{"line":103,"column":2},"end":{"line":103,"column":2}}]},"4":{"line":130,"type":"if","locations":[{"start":{"line":130,"column":2},"end":{"line":130,"column":2}},{"start":{"line":130,"column":2},"end":{"line":130,"column":2}}]},"5":{"line":130,"type":"binary-expr","locations":[{"start":{"line":130,"column":6},"end":{"line":130,"column":25}},{"start":{"line":130,"column":29},"end":{"line":130,"column":55}}]},"6":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":2},"end":{"line":154,"column":2}},{"start":{"line":154,"column":2},"end":{"line":154,"column":2}}]},"7":{"line":159,"type":"if","locations":[{"start":{"line":159,"column":2},"end":{"line":159,"column":2}},{"start":{"line":159,"column":2},"end":{"line":159,"column":2}}]},"8":{"line":161,"type":"if","locations":[{"start":{"line":161,"column":4},"end":{"line":161,"column":4}},{"start":{"line":161,"column":4},"end":{"line":161,"column":4}}]},"9":{"line":192,"type":"if","locations":[{"start":{"line":192,"column":4},"end":{"line":192,"column":4}},{"start":{"line":192,"column":4},"end":{"line":192,"column":4}}]},"10":{"line":227,"type":"binary-expr","locations":[{"start":{"line":227,"column":9},"end":{"line":227,"column":31}},{"start":{"line":227,"column":36},"end":{"line":227,"column":110}}]}}}} \ No newline at end of file diff --git a/node_modules/ethereumjs-tx/coverage/lcov-report/base.css b/node_modules/ethereumjs-tx/coverage/lcov-report/base.css deleted file mode 100644 index 0c0571d..0000000 --- a/node_modules/ethereumjs-tx/coverage/lcov-report/base.css +++ /dev/null @@ -1,212 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px;; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } - - -.medium .chart { border:1px solid #666; } -.medium .cover-fill { background: #666; } - -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } -.medium { background: #eaeaea; } - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/node_modules/ethereumjs-tx/coverage/lcov-report/ethereumjs-tx/index.html b/node_modules/ethereumjs-tx/coverage/lcov-report/ethereumjs-tx/index.html deleted file mode 100644 index 22fd171..0000000 --- a/node_modules/ethereumjs-tx/coverage/lcov-report/ethereumjs-tx/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for ethereumjs-tx/ - - - - - - - -
    -
    -

    - all files ethereumjs-tx/ -

    -
    -
    - 80.88% - Statements - 55/68 -
    -
    - 55% - Branches - 11/20 -
    -
    - 76.92% - Functions - 10/13 -
    -
    - 80.88% - Lines - 55/68 -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileStatementsBranchesFunctionsLines
    index.js
    80.88%55/6855%11/2076.92%10/1380.88%55/68
    -
    -
    - - - - - - - diff --git a/node_modules/ethereumjs-tx/coverage/lcov-report/ethereumjs-tx/index.js.html b/node_modules/ethereumjs-tx/coverage/lcov-report/ethereumjs-tx/index.js.html deleted file mode 100644 index d6bd750..0000000 --- a/node_modules/ethereumjs-tx/coverage/lcov-report/ethereumjs-tx/index.js.html +++ /dev/null @@ -1,749 +0,0 @@ - - - - Code coverage report for ethereumjs-tx/index.js - - - - - - - -
    -
    -

    - all files / ethereumjs-tx/ index.js -

    -
    -
    - 80.88% - Statements - 55/68 -
    -
    - 55% - Branches - 11/20 -
    -
    - 76.92% - Functions - 10/13 -
    -
    - 80.88% - Lines - 55/68 -
    -
    -
    -
    -
    
    -
    -
    1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 - - - - -  -  - - -  -  -  -  -  -  - -  -132× -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -132× -  -  -  -  -  -  -  -  -  -  -  -  -  -  -132× -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  - -67× -  -67× -  -  -  -67× -  -  -67× -  -  -  -67× -  -  -  -  -  -  -  - -26× -26× -26× -  -  -  -  -  -  -  - -26× -  -  -  -26× -  -  -  -  -  -  - -64× -64× -  -  -  -  -64× -64× -  -21× -  -  -43× -  -  -  -  -43× -  -  -  -  -  -43× -  -  -43× -  -  -  -  -  -  - - - -  - - - -  -  -  -  -  -  - -37× -37× -37× -10486351× -167× -  -10486184× -  -  -37× -  -  -  -  -  -  -  - -37× -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  - -55× -  - 
    const ethUtil = require('ethereumjs-util')
    -const fees = require('ethereum-common')
    -const ecdsa = require('secp256k1')
    -const BN = ethUtil.BN
    -const rlp = ethUtil.rlp
    - 
    -// give browser access to Buffers
    -global.Buffer = Buffer
    -global.ethUtil = ethUtil
    - 
    -/**
    - * Represents a transaction
    - * @constructor
    - * @param {Buffer|Array} data raw data, deserialized
    - */
    -var Transaction = module.exports = function (data) {
    -  // Define Properties
    -  const fields = [{
    -    name: 'nonce',
    -    length: 32,
    -    allowLess: true,
    -    default: new Buffer([])
    -  }, {
    -    name: 'gasPrice',
    -    length: 32,
    -    allowLess: true,
    -    default: new Buffer([])
    -  }, {
    -    name: 'gasLimit',
    -    length: 32,
    -    allowLess: true,
    -    default: new Buffer([])
    -  }, {
    -    name: 'to',
    -    allowZero: true,
    -    length: 20,
    -    default: new Buffer([])
    -  }, {
    -    name: 'value',
    -    length: 32,
    -    allowLess: true,
    -    default: new Buffer([])
    -  }, {
    -    name: 'data',
    -    allowZero: true,
    -    default: new Buffer([])
    -  }, {
    -    name: 'v',
    -    length: 1,
    -    default: new Buffer([0x1c])
    -  }, {
    -    name: 'r',
    -    length: 32,
    -    allowLess: true,
    -    default: new Buffer([])
    -  }, {
    -    name: 's',
    -    length: 32,
    -    allowLess: true,
    -    default: new Buffer([])
    -  }]
    - 
    -  Object.defineProperty(this, 'from', {
    -    enumerable: false,
    -    configurable: true,
    -    get: function () {
    -      if (this._from) {
    -        return this._from
    -      }
    -      this._from = this.getSenderAddress()
    -      return this._from
    -    },
    -    set: function (v) {
    -      this._from = v
    -    }
    -  })
    - 
    -  ethUtil.defineProperties(this, fields, data)
    -}
    - 
    -/**
    - * Returns the rlp encoding of the transaction
    - * @method serialize
    - * @return {Buffer}
    - */
    -Transaction.prototype.serialize = function () {
    -  return rlp.encode(this.raw)
    -}
    - 
    -/**
    - * Computes a sha3-256 hash of the tx
    - * @method hash
    - * @param {Boolean} [true] signature - whether or not to inculde the signature
    - * @return {Buffer}
    - */
    -Transaction.prototype.hash = function (signature) {
    -  var toHash
    - 
    -  Iif (typeof signature === 'undefined') {
    -    signature = true
    -  }
    - 
    -  Iif (signature) {
    -    toHash = this.raw
    -  } else {
    -    toHash = this.raw.slice(0, 6)
    -  }
    - 
    -  // create hash
    -  return ethUtil.sha3(rlp.encode(toHash))
    -}
    - 
    -/**
    - * gets the senders address
    - * @method getSenderAddress
    - * @return {Buffer}
    - */
    -Transaction.prototype.getSenderAddress = function () {
    -  var pubKey = this.getSenderPublicKey()
    -  pubKey = ecdsa.publicKeyConvert(pubKey, false)
    -  return ethUtil.pubToAddress(pubKey)
    -}
    - 
    -/**
    - * gets the senders public key
    - * @method getSenderPublicKey
    - * @return {Buffer}
    - */
    -Transaction.prototype.getSenderPublicKey = function () {
    -  Iif (!this._senderPubKey || !this._senderPubKey.length) {
    -    this.verifySignature()
    -  }
    - 
    -  return this._senderPubKey
    -}
    - 
    -/**
    - * @method verifySignature
    - * @return {Boolean}
    - */
    -Transaction.prototype.verifySignature = function () {
    -  var msgHash = this.hash(false)
    -  var sig = {
    -    signature: Buffer.concat([ethUtil.pad(this.r, 32), ethUtil.pad(this.s, 32)], 64),
    -    recovery: ethUtil.bufferToInt(this.v) - 27
    -  }
    - 
    -  try {
    -    this._senderPubKey = ecdsa.recoverSync(msgHash, sig.signature, sig.recovery)
    -  } catch (e) {
    -    return false
    -  }
    - 
    -  Iif (!this._senderPubKey) {
    -    return false
    -  }
    - 
    -  // hack to force elliptic to verify
    -  Iif (process.browser) {
    -    var result = ecdsa.verifySync(msgHash, sig.signature, this._senderPubKey)
    -    if (!result) {
    -      this._senderPubKey = null
    -    }
    -  } else {
    -    result = !!this._senderPubKey
    -  }
    - 
    -  return result
    -}
    -/**
    - * sign a transaction with a given a private key
    - * @method sign
    - * @param {Buffer} privateKey
    - */
    -Transaction.prototype.sign = function (privateKey) {
    -  var msgHash = this.hash(false)
    -  var sig = ecdsa.signSync(msgHash, privateKey)
    - 
    -  this.r = sig.signature.slice(0, 32)
    -  this.s = sig.signature.slice(32, 64)
    -  this.v = sig.recovery + 27
    -}
    -/**
    - * The amount of gas paid for the data in this tx
    - * @method getDataFee
    - * @return {bn.js}
    - */
    -Transaction.prototype.getDataFee = function () {
    -  const data = this.raw[5]
    -  var cost = new BN(0)
    -  for (var i = 0; i < data.length; i++) {
    -    if (data[i] === 0) {
    -      cost.iaddn(fees.txDataZeroGas.v)
    -    } else {
    -      cost.iaddn(fees.txDataNonZeroGas.v)
    -    }
    -  }
    -  return cost
    -}
    - 
    -/**
    - * the base amount of gas it takes to be a valid tx
    - * @method getBaseFee
    - * @return {bn.js}
    - */
    -Transaction.prototype.getBaseFee = function () {
    -  return this.getDataFee().addn(fees.txGas.v)
    -}
    - 
    -/**
    - * the up front amount that an account must have for this transaction to be valid
    - * @method getUpfrontCost
    - * @return {BN}
    - */
    -Transaction.prototype.getUpfrontCost = function () {
    -  return new BN(this.gasLimit)
    -    .mul(new BN(this.gasPrice))
    -    .add(new BN(this.value))
    -}
    - 
    -/**
    - * validates the signature and checks to see if it has enough gas
    - * @method validate
    - * @return {Boolean}
    - */
    -Transaction.prototype.validate = function () {
    -  return this.verifySignature() && (Number(this.getBaseFee().toString()) <= ethUtil.bufferToInt(this.gasLimit))
    -}
    - 
    -
    -
    - - - - - - - diff --git a/node_modules/ethereumjs-tx/coverage/lcov-report/index.html b/node_modules/ethereumjs-tx/coverage/lcov-report/index.html deleted file mode 100644 index 3bbc6e4..0000000 --- a/node_modules/ethereumjs-tx/coverage/lcov-report/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for All files - - - - - - - -
    -
    -

    - / -

    -
    -
    - 80.88% - Statements - 55/68 -
    -
    - 55% - Branches - 11/20 -
    -
    - 76.92% - Functions - 10/13 -
    -
    - 80.88% - Lines - 55/68 -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileStatementsBranchesFunctionsLines
    ethereumjs-tx/
    80.88%55/6855%11/2076.92%10/1380.88%55/68
    -
    -
    - - - - - - - diff --git a/node_modules/ethereumjs-tx/coverage/lcov-report/prettify.css b/node_modules/ethereumjs-tx/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/node_modules/ethereumjs-tx/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/ethereumjs-tx/coverage/lcov-report/prettify.js b/node_modules/ethereumjs-tx/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/node_modules/ethereumjs-tx/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/ethereumjs-tx/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/ethereumjs-tx/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a..0000000 Binary files a/node_modules/ethereumjs-tx/coverage/lcov-report/sort-arrow-sprite.png and /dev/null differ diff --git a/node_modules/ethereumjs-tx/coverage/lcov-report/sorter.js b/node_modules/ethereumjs-tx/coverage/lcov-report/sorter.js deleted file mode 100644 index 6c5034e..0000000 --- a/node_modules/ethereumjs-tx/coverage/lcov-report/sorter.js +++ /dev/null @@ -1,158 +0,0 @@ -var addSorting = (function () { - "use strict"; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { return document.querySelector('.coverage-summary'); } - // returns the thead element of the summary table - function getTableHeader() { return getTable().querySelector('thead tr'); } - // returns the tbody element of the summary table - function getTableBody() { return getTable().querySelector('tbody'); } - // returns the th element for nth column - function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/node_modules/ethereumjs-tx/coverage/lcov.info b/node_modules/ethereumjs-tx/coverage/lcov.info deleted file mode 100644 index fb73d5b..0000000 --- a/node_modules/ethereumjs-tx/coverage/lcov.info +++ /dev/null @@ -1,123 +0,0 @@ -TN: -SF:/home/null/code/ethereumjs-tx/index.js -FN:16,(anonymous_1) -FN:66,(anonymous_2) -FN:73,(anonymous_3) -FN:86,(anonymous_4) -FN:96,(anonymous_5) -FN:118,(anonymous_6) -FN:129,(anonymous_7) -FN:141,(anonymous_8) -FN:175,(anonymous_9) -FN:188,(anonymous_10) -FN:206,(anonymous_11) -FN:215,(anonymous_12) -FN:226,(anonymous_13) -FNF:13 -FNH:10 -FNDA:132,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:5,(anonymous_4) -FNDA:67,(anonymous_5) -FNDA:26,(anonymous_6) -FNDA:26,(anonymous_7) -FNDA:64,(anonymous_8) -FNDA:3,(anonymous_9) -FNDA:37,(anonymous_10) -FNDA:37,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:55,(anonymous_13) -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:5,1 -DA:8,1 -DA:9,1 -DA:16,1 -DA:18,132 -DA:63,132 -DA:67,0 -DA:68,0 -DA:70,0 -DA:71,0 -DA:74,0 -DA:78,132 -DA:86,1 -DA:87,5 -DA:96,1 -DA:97,67 -DA:99,67 -DA:100,0 -DA:103,67 -DA:104,0 -DA:106,67 -DA:110,67 -DA:118,1 -DA:119,26 -DA:120,26 -DA:121,26 -DA:129,1 -DA:130,26 -DA:131,0 -DA:134,26 -DA:141,1 -DA:142,64 -DA:143,64 -DA:148,64 -DA:149,64 -DA:151,21 -DA:154,43 -DA:155,0 -DA:159,43 -DA:160,0 -DA:161,0 -DA:162,0 -DA:165,43 -DA:168,43 -DA:175,1 -DA:176,3 -DA:177,3 -DA:179,3 -DA:180,3 -DA:181,3 -DA:188,1 -DA:189,37 -DA:190,37 -DA:191,37 -DA:192,10486351 -DA:193,167 -DA:195,10486184 -DA:198,37 -DA:206,1 -DA:207,37 -DA:215,1 -DA:216,0 -DA:226,1 -DA:227,55 -LF:68 -LH:55 -BRDA:67,1,0,0 -BRDA:67,1,1,0 -BRDA:99,2,0,0 -BRDA:99,2,1,67 -BRDA:103,3,0,0 -BRDA:103,3,1,67 -BRDA:130,4,0,0 -BRDA:130,4,1,26 -BRDA:130,5,0,26 -BRDA:130,5,1,26 -BRDA:154,6,0,0 -BRDA:154,6,1,43 -BRDA:159,7,0,0 -BRDA:159,7,1,43 -BRDA:161,8,0,0 -BRDA:161,8,1,0 -BRDA:192,9,0,167 -BRDA:192,9,1,10486184 -BRDA:227,10,0,55 -BRDA:227,10,1,37 -BRF:20 -BRH:11 -end_of_record diff --git a/node_modules/ethereumjs-tx/docs/index.md b/node_modules/ethereumjs-tx/docs/index.md deleted file mode 100644 index 868ef2f..0000000 --- a/node_modules/ethereumjs-tx/docs/index.md +++ /dev/null @@ -1,128 +0,0 @@ -# Transaction - -[index.js:43-106](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L43-L106 "Source code on GitHub") - -Creates a new transaction object - -**Parameters** - -- `data` - -**Properties** - -- `raw` **Buffer** The raw rlp decoded transaction -- `nonce` **Buffer** -- `to` **Buffer** the to address -- `value` **Buffer** the amount of ether sent -- `data` **Buffer** this will contain the data of the message or the init of a contract -- `v` **Buffer** EC signature parameter -- `r` **Buffer** EC signature parameter -- `s` **Buffer** EC recovery ID -- `from` **Buffer** If you are not planing on signing the tx you can set the from property. If you do sign it will be over written - -**Examples** - -```javascript -var rawTx = { - nonce: '00', - gasPrice: '09184e72a000', - gasLimit: '2710', - to: '0000000000000000000000000000000000000000', - value: '00', - data: '7f7465737432000000000000000000000000000000000000000000000000000000600057', - v: '1c', - r: '5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab', - s '5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13' -}; -var tx = new Transaction(rawTx); -``` - -## getBaseFee - -[index.js:236-238](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L236-L238 "Source code on GitHub") - -the minimum amount of gas the tx must have (DataFee + TxFee) - -Returns **BN** - -## getDataFee - -[index.js:222-229](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L222-L229 "Source code on GitHub") - -The amount of gas paid for the data in this tx - -Returns **BN** - -## getSenderAddress - -[index.js:141-145](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L141-L145 "Source code on GitHub") - -returns the sender`s address - -Returns **Buffer** - -## getSenderPublicKey - -[index.js:152-158](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L152-L158 "Source code on GitHub") - -returns the public key of the sender - -Returns **Buffer** - -## getUpfrontCost - -[index.js:245-249](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L245-L249 "Source code on GitHub") - -the up front amount that an account must have for this transaction to be valid - -Returns **BN** - -## hash - -[index.js:123-134](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L123-L134 "Source code on GitHub") - -Computes a sha3-256 hash of the serialized tx - -**Parameters** - -- `signature` **[Boolean]** whether or not to inculde the signature (optional, default `true`) - -Returns **Buffer** - -## serialize - -[index.js:113-115](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L113-L115 "Source code on GitHub") - -Returns the rlp encoding of the transaction - -Returns **Buffer** - -## sign - -[index.js:209-216](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L209-L216 "Source code on GitHub") - -sign a transaction with a given a private key - -**Parameters** - -- `privateKey` **Buffer** - -## validate - -[index.js:257-281](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L257-L281 "Source code on GitHub") - -validates the signature and checks to see if it has enough gas - -**Parameters** - -- `stringError` **[Boolean]** whether to return a string with a dscription of why the validation failed or return a Bloolean (optional, default `false`) - -Returns **Boolean or String** - -## verifySignature - -[index.js:165-203](https://github.com/ethereum/ethereumjs-tx/blob/f9c943f21509f03d0834ffd4204e17da9211cd80/index.js#L165-L203 "Source code on GitHub") - -Determines if the signature is valid - -Returns **Boolean** diff --git a/node_modules/ethereumjs-tx/examples/test.js b/node_modules/ethereumjs-tx/examples/test.js deleted file mode 100644 index 82ee91a..0000000 --- a/node_modules/ethereumjs-tx/examples/test.js +++ /dev/null @@ -1,11 +0,0 @@ -var Transaction = require('../index.js') - -// create a blank transaction -var tx = new Transaction() -var s = tx.serialize() -console.log(s.toString('hex')) - -var privKey = new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex') -var txCopy = new Transaction(s) -txCopy.sign(new Buffer(privKey, 'hex')) -console.log(txCopy.serialize().toString('hex')) diff --git a/node_modules/ethereumjs-tx/examples/transactions.js b/node_modules/ethereumjs-tx/examples/transactions.js deleted file mode 100644 index a20a112..0000000 --- a/node_modules/ethereumjs-tx/examples/transactions.js +++ /dev/null @@ -1,75 +0,0 @@ -// see full article here https://wanderer.github.io/2014/06/14/creating-and-verifying-transaction-with-node/ - -var Transaction = require('../index.js') - -// create a blank transaction -var tx = new Transaction() - -// So now we have created a blank transaction but Its not quiet valid yet. We -// need to add some things to it. Lets start with -// notice we don't set the `to` field since we are creating a new contract -tx.nonce = 0 -tx.gasPrice = 100 -tx.gasLimit = 1000 -tx.value = 0 -tx.data = '0x7f4e616d65526567000000000000000000000000000000000000000000000000003057307f4e616d6552656700000000000000000000000000000000000000000000000000573360455760415160566000396000f20036602259604556330e0f600f5933ff33560f601e5960003356576000335700604158600035560f602b590033560f60365960003356573360003557600035335700' - -var privateKey = new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex') -tx.sign(privateKey) - -// We have a signed transaction, Now for it to be total the account that we signed -// it with needs to have a certain amount of wei in to. To see how much that this -// account needs we can use the getTotalFee - -console.log('Total Amount of wei needed:' + tx.getUpfrontCost().toString()) - -// if your wondering how that is caculated it is -// data lenght in bytes * 5 -// + 500 Default transaction fee -// + gasAmount * gasPrice - -// lets seriliaze the transaction - -console.log('---Serialized TX----') -console.log(tx.serialize().toString('hex')) -console.log('--------------------') - -// Now that we have the serialized transaction we can get AlethZero to except by -// selecting debug>inject transaction and pasting the transaction serialization and -// it should show up in pending transaction. - -// Parsing & Validating transactions -// If you have a transaction that you want to verify you can parse it. If you got -// it directly from the network it will be rlp encoded. You can decode you the rlp -// module. After that you should have something like -var rawTx = [ - '0x00', - '0x09184e72a000', - '0x2710', - '0x0000000000000000000000000000000000000000', - '0x00', - '0x7f7465737432000000000000000000000000000000000000000000000000000000600057', - '0x1c', - '0x5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab', - '0x5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13' -] - -var tx2 = new Transaction(rawTx) - -// Note rlp.decode will actully produce an array of buffers `new Transaction` will -// take either and array of buffers or and array of hex strings. -// So assuming that you were able to parse the tranaction, we will now get the sender's -// address - -console.log('Senders Address: ' + tx2.getSenderAddress().toString('hex')) - -// Cool now we know who sent the tx! Lets verfy the signuate to make sure it not -// some poser. - -if (tx2.verifySignature()) { - console.log('Signature Checks out!') -} - -// And hopefull its verified. For the transaction to be tottal valid we would -// also need to check the account of the sender and see if they have at least -// `TotalFee`. diff --git a/node_modules/ethereumjs-tx/fake.js b/node_modules/ethereumjs-tx/fake.js deleted file mode 100644 index 4ba7f52..0000000 --- a/node_modules/ethereumjs-tx/fake.js +++ /dev/null @@ -1,57 +0,0 @@ -const inherits = require('util').inherits -const Transaction = require('./index.js') -const ethUtil = require('ethereumjs-util') - -module.exports = FakeTransaction - -inherits(FakeTransaction, Transaction) - -/** - * Creates a new transaction object that doesn't need to be signed - * @constructor - * @class {Buffer|Array} data a transaction can be initiailized with either a buffer containing the RLP serialized transaction or an array of buffers relating to each of the tx Properties, listed in order below in the exmple. Or lastly an Object containing the Properties of the transaction like in the Usage example - * - * For Object and Arrays each of the elements can either be a Buffer, a hex-prefixed (0x) String , Number, or an object with a toBuffer method such as Bignum - * @example - * var rawTx = { - * nonce: '00', - * gasPrice: '09184e72a000', - * gasLimit: '2710', - * to: '0000000000000000000000000000000000000000', - * value: '00', - * data: '7f7465737432000000000000000000000000000000000000000000000000000000600057', - * v: '1c', - * r: '5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab', - * s '5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13' - * }; - * var tx = new Transaction(rawTx); - * @prop {Buffer} raw The raw rlp decoded transaction - * @prop {Buffer} nonce - * @prop {Buffer} to the to address - * @prop {Buffer} value the amount of ether sent - * @prop {Buffer} data this will contain the data of the message or the init of a contract - * @prop {Buffer} v EC signature parameter - * @prop {Buffer} r EC signature parameter - * @prop {Buffer} s EC recovery ID - */ -function FakeTransaction (data) { - var self = this - - FakeTransaction.super_.call(this, data) - - /** - * @prop {Buffer} from (read/write) Set from address to bypass transaction signing. - */ - Object.defineProperty(this, 'from', { - enumerable: true, - configurable: true, - get: this.getSenderAddress.bind(self), - set: function (val) { - self._from = ethUtil.toBuffer(val) - } - }) - - if (data && data.from) { - this.from = data.from - } -} diff --git a/node_modules/ethereumjs-tx/index.js b/node_modules/ethereumjs-tx/index.js deleted file mode 100644 index 6764a19..0000000 --- a/node_modules/ethereumjs-tx/index.js +++ /dev/null @@ -1,253 +0,0 @@ -'use strict' -const ethUtil = require('ethereumjs-util') -const fees = require('ethereum-common/params') -const BN = ethUtil.BN - -// secp256k1n/2 -const N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16) - -/** - * Creates a new transaction object - * @constructor - * @class {Buffer|Array} data a transaction can be initiailized with either a buffer containing the RLP serialized transaction or an array of buffers relating to each of the tx Properties, listed in order below in the exmple. Or lastly an Object containing the Properties of the transaction like in the Usage example - * - * For Object and Arrays each of the elements can either be a Buffer, a hex-prefixed (0x) String , Number, or an object with a toBuffer method such as Bignum - * @example - * var rawTx = { - * nonce: '00', - * gasPrice: '09184e72a000', - * gasLimit: '2710', - * to: '0000000000000000000000000000000000000000', - * value: '00', - * data: '7f7465737432000000000000000000000000000000000000000000000000000000600057', - * v: '1c', - * r: '5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab', - * s '5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13' - * }; - * var tx = new Transaction(rawTx); - * @prop {Buffer} raw The raw rlp decoded transaction - * @prop {Buffer} nonce - * @prop {Buffer} to the to address - * @prop {Buffer} value the amount of ether sent - * @prop {Buffer} data this will contain the data of the message or the init of a contract - * @prop {Buffer} v EC signature parameter - * @prop {Buffer} r EC signature parameter - * @prop {Buffer} s EC recovery ID - */ -const Transaction = module.exports = function (data) { - // Define Properties - const fields = [{ - name: 'nonce', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 'gasPrice', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 'gasLimit', - alias: 'gas', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 'to', - allowZero: true, - length: 20, - default: new Buffer([]) - }, { - name: 'value', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 'data', - alias: 'input', - allowZero: true, - default: new Buffer([]) - }, { - name: 'v', - length: 1, - default: new Buffer([0x1c]) - }, { - name: 'r', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 's', - length: 32, - allowLess: true, - default: new Buffer([]) - }] - - /** - * Returns the rlp encoding of the transaction - * @method serialize - * @return {Buffer} - */ - // attached serialize - ethUtil.defineProperties(this, fields, data) - - /** - * @prop {Buffer} from (read only) sender address of this transaction, mathematically derived from other parameters. - */ - Object.defineProperty(this, 'from', { - enumerable: true, - configurable: true, - get: this.getSenderAddress.bind(this) - }) - - this._homestead = true -} - -/** - * If the tx's `to` is to the creation address - * @method toCreationAddress - * @return {Boolean} - */ -Transaction.prototype.toCreationAddress = function () { - return this.to.toString('hex') === '' -} - -/** - * Computes a sha3-256 hash of the serialized tx - * @method hash - * @param {Boolean} [signature=true] whether or not to inculde the signature - * @return {Buffer} - */ -Transaction.prototype.hash = function (signature) { - let toHash - - if (typeof signature === 'undefined') { - signature = true - } - - toHash = signature ? this.raw : this.raw.slice(0, 6) - - // create hash - return ethUtil.rlphash(toHash) -} - -/** - * returns the sender's address - * @method getSenderAddress - * @return {Buffer} - */ -Transaction.prototype.getSenderAddress = function () { - if (this._from) { - return this._from - } - const pubkey = this.getSenderPublicKey() - this._from = ethUtil.publicToAddress(pubkey) - return this._from -} - -/** - * returns the public key of the sender - * @method getSenderPublicKey - * @return {Buffer} - */ -Transaction.prototype.getSenderPublicKey = function () { - if (!this._senderPubKey || !this._senderPubKey.length) { - this.verifySignature() - } - - return this._senderPubKey -} - -/** - * Determines if the signature is valid - * @method verifySignature - * @return {Boolean} - */ -Transaction.prototype.verifySignature = function () { - const msgHash = this.hash(false) - - // All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid. - if (this._homestead && new BN(this.s).cmp(N_DIV_2) === 1) { - return false - } - - try { - this._senderPubKey = ethUtil.ecrecover(msgHash, this.v, this.r, this.s) - } catch (e) { - return false - } - - return !!this._senderPubKey -} - -/** - * sign a transaction with a given a private key - * @method sign - * @param {Buffer} privateKey - */ -Transaction.prototype.sign = function (privateKey) { - const msgHash = this.hash(false) - const sig = ethUtil.ecsign(msgHash, privateKey) - Object.assign(this, sig) -} - -/** - * The amount of gas paid for the data in this tx - * @method getDataFee - * @return {BN} - */ -Transaction.prototype.getDataFee = function () { - const data = this.raw[5] - const cost = new BN(0) - for (var i = 0; i < data.length; i++) { - data[i] === 0 ? cost.iaddn(fees.txDataZeroGas.v) : cost.iaddn(fees.txDataNonZeroGas.v) - } - return cost -} - -/** - * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee) - * @method getBaseFee - * @return {BN} - */ -Transaction.prototype.getBaseFee = function () { - const fee = this.getDataFee().iaddn(fees.txGas.v) - if (this._homestead && this.toCreationAddress()) { - fee.iaddn(fees.txCreation.v) - } - return fee -} - -/** - * the up front amount that an account must have for this transaction to be valid - * @method getUpfrontCost - * @return {BN} - */ -Transaction.prototype.getUpfrontCost = function () { - return new BN(this.gasLimit) - .imul(new BN(this.gasPrice)) - .iadd(new BN(this.value)) -} - -/** - * validates the signature and checks to see if it has enough gas - * @method validate - * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean - * @return {Boolean|String} - */ -Transaction.prototype.validate = function (stringError) { - const errors = [] - if (!this.verifySignature()) { - errors.push('Invalid Signature') - } - - if (this.getBaseFee().cmp(new BN(this.gasLimit)) > 0) { - errors.push([`gas limit is to low. Need at least ${this.getBaseFee()}`]) - } - - if (stringError === undefined || stringError === false) { - return errors.length === 0 - } else { - return errors.join(' ') - } -} diff --git a/node_modules/ethereumjs-tx/karma.conf.js b/node_modules/ethereumjs-tx/karma.conf.js deleted file mode 100644 index 9442389..0000000 --- a/node_modules/ethereumjs-tx/karma.conf.js +++ /dev/null @@ -1,27 +0,0 @@ -process.env.ethTest = 'TransactionTests' - -module.exports = function (config) { - config.set({ - browserNoActivityTimeout: 60000, - frameworks: ['browserify', 'detectBrowsers', 'tap'], - files: [ - './test/api.js', - './test/transactionRunner.js' - ], - preprocessors: { - 'test/*.js': ['browserify', 'env'] - }, - singleRun: true, - plugins: [ - 'karma-browserify', - 'karma-env-preprocessor', - 'karma-tap', - 'karma-firefox-launcher', - 'karma-detect-browsers' - ], - detectBrowsers: { - enabled: true, - usePhantomJS: false - } - }) -} diff --git a/node_modules/ethereumjs-tx/package.json b/node_modules/ethereumjs-tx/package.json deleted file mode 100644 index d64df27..0000000 --- a/node_modules/ethereumjs-tx/package.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_args": [ - [ - "ethereumjs-tx@^1.1.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "ethereumjs-tx@>=1.1.0 <2.0.0", - "_id": "ethereumjs-tx@1.1.2", - "_inCache": true, - "_installable": true, - "_location": "/ethereumjs-tx", - "_nodeVersion": "7.0.0-pre", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/ethereumjs-tx-1.1.2.tgz_1468776441398_0.9619038549717516" - }, - "_npmUser": { - "email": "null_radix@riseup.net", - "name": "null_radix" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "ethereumjs-tx", - "raw": "ethereumjs-tx@^1.1.0", - "rawSpec": "^1.1.0", - "scope": null, - "spec": ">=1.1.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-block", - "/ethereumjs-testrpc", - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.1.2.tgz", - "_shasum": "c151477c6205d1860600e29108c3eacae97e29fa", - "_shrinkwrap": null, - "_spec": "ethereumjs-tx@^1.1.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "email": "mb@ethdev.com", - "name": "mjbecze" - }, - "bugs": { - "url": "https://github.com/ethereumjs/ethereumjs-tx/issues" - }, - "dependencies": { - "ethereum-common": "^0.0.17", - "ethereumjs-util": "^4.5.0" - }, - "description": "An simple module for creating, manipulating and signing ethereum transactions", - "devDependencies": { - "async": "^2.0.0", - "browserify": "^13.0.0", - "coveralls": "^2.11.4", - "documentation": "^3.0.4", - "ethereumjs-testing": "0.0.1", - "istanbul": "^0.4.1", - "karma": "^1.1.1", - "karma-browserify": "^5.1.0", - "karma-detect-browsers": "^2.0.2", - "karma-env-preprocessor": "^0.1.1", - "karma-firefox-launcher": "^1.0.0", - "karma-tap": "^2.0.1", - "minimist": "^1.2.0", - "standard": "^7.1.2", - "tape": "^4.0.3" - }, - "directories": {}, - "dist": { - "shasum": "c151477c6205d1860600e29108c3eacae97e29fa", - "tarball": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.1.2.tgz" - }, - "gitHead": "ae14924465e2e0e25857da17998d568b2e82ad08", - "homepage": "https://github.com/ethereumjs/ethereumjs-tx", - "keywords": [ - "ethereum", - "transactions" - ], - "license": "MPL-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mjbecze@gmail.com", - "name": "null_radix" - } - ], - "name": "ethereumjs-tx", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ethereumjs/ethereumjs-tx.git" - }, - "scripts": { - "build:docs": "documentation --github -f md ./index.js > ./docs/index.md", - "coverage": "istanbul cover ./test/index.js", - "coveralls": "npm run coverage && coveralls - - - Code coverage report for ethereumjs-util/ - - - - - - - -
    -
    -

    - all files ethereumjs-util/ -

    -
    -
    - 100% - Statements - 235/235 -
    -
    - 94.39% - Branches - 101/107 -
    -
    - 100% - Functions - 43/43 -
    -
    - 100% - Lines - 233/233 -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileStatementsBranchesFunctionsLines
    index.js
    100%235/23594.39%101/107100%43/43100%233/233
    -
    -
    - - - - - - - diff --git a/node_modules/ethereumjs-util/coverage/lcov-report/ethereumjs-util/index.js.html b/node_modules/ethereumjs-util/coverage/lcov-report/ethereumjs-util/index.js.html deleted file mode 100644 index ddd37d5..0000000 --- a/node_modules/ethereumjs-util/coverage/lcov-report/ethereumjs-util/index.js.html +++ /dev/null @@ -1,2168 +0,0 @@ - - - - Code coverage report for ethereumjs-util/index.js - - - - - - - -
    -
    -

    - all files / ethereumjs-util/ index.js -

    -
    -
    - 100% - Statements - 235/235 -
    -
    - 94.39% - Branches - 101/107 -
    -
    - 100% - Functions - 43/43 -
    -
    - 100% - Lines - 233/233 -
    -
    -
    -
    -
    
    -
    -
    1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 - - - - - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  - -  -  -  -  -  -  -  - -17× -17× -17× -  -  -  -  -  -  -  -  -  -  -  - -15× -15× -15× - - - -  - -  -12× - - -  - -  -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  - -23× -23× -23× -515× -515× -  -23× -  -  -  -  -  -  - -157× -58× - -57× -47× -17× -  -30× -  -10× - - - - -  - -  - -  -  -156× -  -  -  -  -  -  -  -  - - - - - - -  -  - -  -  -  -  -  -  -  -  - - - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  - - - - -  -  - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  - -28× -28× -  -28× -28× -28× -  -28× -  -  -  -  -  -  -  -  - - - -  -  -  -  -  -  -  -  -  - - - - - -  - -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -  - - -  - -  -  - - -  -  - -  -  -  -  -  -  -  -  -  -  - - - - -  - -  - -  -  -  -  -  -  -  -  - - -  - -  -  -  -  -  -  -  -  - - - - -  - -  -  -  -  -  -  -  -  -  - - -  - - - - - -  -  -  -  -  -  -  -  -  -  -  - - - - - -  - - -  -  -  -  -  -  -  -  -  -  - -  -  - -  -  -  -  -  -  -  -  - - -  - -  - - -  -  - -  -  -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  - -15× -  -  -  -  -  -  -  -  - -17× -17× -17× -  -17× -680× -371× -  -309× -  -  -  -17× -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  - - - -  - -  -  - -  - -  -  -  - -  -  -  -  -  -  -  -  - - - -  -  -  -  -  -  -  -  - -92× -  -  -  -  -  -  -  -  - -58× -14× -  -44× -  -  -  -  -  -  -  -  - - - -  -  - -  -  -  -  -  -  -  -  - -17× -17× -  -  -  -  -  -  -  -  - -12× - - - - - -  - -  -  -  -  -  -  -  -  -  -  -  -  -  -  - - - -  -  - - - - - -  - -  - -  -  - - -  -  - -41× - -10× -  - -62× -  -62× - -  -  -62× -14× -14× -48× - -  -  -61× -  -  -41× -  -  -  -  -  -  -41× -41× -  -  -  -40× - -  -  -  -  -  -  -  -  -  - - - -  -  - - -  -  - - - -  -  -  - -10× -  - - - - -  -  -  - -  -  -  - 
    const SHA3 = require('keccakjs')
    -const secp256k1 = require('secp256k1')
    -const assert = require('assert')
    -const rlp = require('rlp')
    -const BN = require('bn.js')
    -const createHash = require('create-hash')
    - 
    -/**
    - * the max integer that this VM can handle (a ```BN```)
    - * @var {BN} MAX_INTEGER
    - */
    -exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
    - 
    -/**
    - * 2^256 (a ```BN```)
    - * @var {BN} TWO_POW256
    - */
    -exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
    - 
    -/**
    - * SHA3-256 hash of null (a ```String```)
    - * @var {String} SHA3_NULL_S
    - */
    -exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
    - 
    -/**
    - * SHA3-256 hash of null (a ```Buffer```)
    - * @var {Buffer} SHA3_NULL
    - */
    -exports.SHA3_NULL = new Buffer(exports.SHA3_NULL_S, 'hex')
    - 
    -/**
    - * SHA3-256 of an RLP of an empty array (a ```String```)
    - * @var {String} SHA3_RLP_ARRAY_S
    - */
    -exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
    - 
    -/**
    - * SHA3-256 of an RLP of an empty array (a ```Buffer```)
    - * @var {Buffer} SHA3_RLP_ARRAY
    - */
    -exports.SHA3_RLP_ARRAY = new Buffer(exports.SHA3_RLP_ARRAY_S, 'hex')
    - 
    -/**
    - * SHA3-256 hash of the RLP of null  (a ```String```)
    - * @var {String} SHA3_RLP_S
    - */
    -exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
    - 
    -/**
    - * SHA3-256 hash of the RLP of null (a ```Buffer```)
    - * @var {Buffer} SHA3_RLP
    - */
    -exports.SHA3_RLP = new Buffer(exports.SHA3_RLP_S, 'hex')
    - 
    -/**
    - * [`BN`](https://github.com/indutny/bn.js)
    - * @var {Function}
    - */
    -exports.BN = BN
    - 
    -/**
    - * [`rlp`](https://github.com/ethereumjs/rlp)
    - * @var {Function}
    - */
    -exports.rlp = rlp
    - 
    -/**
    - * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
    - * @var {Object}
    - */
    -exports.secp256k1 = secp256k1
    - 
    -/**
    - * Returns a buffer filled with 0s
    - * @method zeros
    - * @param {Number} bytes  the number of bytes the buffer should be
    - * @return {Buffer}
    - */
    -exports.zeros = function (bytes) {
    -  var buf = new Buffer(bytes)
    -  buf.fill(0)
    -  return buf
    -}
    - 
    -/**
    - * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
    - * Or it truncates the beginning if it exceeds.
    - * @method lsetLength
    - * @param {Buffer|Array} msg the value to pad
    - * @param {Number} length the number of bytes the output should be
    - * @param {Boolean} [right=false] whether to start padding form the left or right
    - * @return {Buffer|Array}
    - */
    -exports.setLengthLeft = exports.setLength = function (msg, length, right) {
    -  var buf = exports.zeros(length)
    -  msg = exports.toBuffer(msg)
    -  if (right) {
    -    if (msg.length < length) {
    -      msg.copy(buf)
    -      return buf
    -    }
    -    return msg.slice(0, length)
    -  } else {
    -    if (msg.length < length) {
    -      msg.copy(buf, length - msg.length)
    -      return buf
    -    }
    -    return msg.slice(-length)
    -  }
    -}
    - 
    -/**
    - * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
    - * Or it truncates the beginning if it exceeds.
    - * @method lsetLength
    - * @param {Buffer|Array} msg the value to pad
    - * @param {Number} length the number of bytes the output should be
    - * @return {Buffer|Array}
    - */
    -exports.setLengthRight = function (msg, length) {
    -  return exports.setLength(msg, length, true)
    -}
    - 
    -/**
    - * Trims leading zeros from a `Buffer` or an `Array`
    - * @method unpad
    - * @param {Buffer|Array|String} a
    - * @return {Buffer|Array|String}
    - */
    -exports.unpad = exports.stripZeros = function (a) {
    -  a = exports.stripHexPrefix(a)
    -  var first = a[0]
    -  while (a.length > 0 && first.toString() === '0') {
    -    a = a.slice(1)
    -    first = a[0]
    -  }
    -  return a
    -}
    -/**
    - * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
    - * @method toBuffer
    - * @param {*} v the value
    - */
    -exports.toBuffer = function (v) {
    -  if (!Buffer.isBuffer(v)) {
    -    if (Array.isArray(v)) {
    -      v = new Buffer(v)
    -    } else if (typeof v === 'string') {
    -      if (exports.isHexPrefixed(v)) {
    -        v = new Buffer(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
    -      } else {
    -        v = new Buffer(v)
    -      }
    -    } else if (typeof v === 'number') {
    -      v = exports.intToBuffer(v)
    -    } else if (v === null || v === undefined) {
    -      v = new Buffer([])
    -    } else if (v.toArray) {
    -      // converts a BN to a Buffer
    -      v = new Buffer(v.toArray())
    -    } else {
    -      throw new Error('invalid type')
    -    }
    -  }
    -  return v
    -}
    - 
    -/**
    - * Converts a `Number` into a hex `String`
    - * @method intToHex
    - * @param {Number} i
    - * @return {String}
    - */
    -exports.intToHex = function (i) {
    -  assert(i % 1 === 0, 'number is not a integer')
    -  assert(i >= 0, 'number must be positive')
    -  var hex = i.toString(16)
    -  if (hex.length % 2) {
    -    hex = '0' + hex
    -  }
    - 
    -  return '0x' + hex
    -}
    - 
    -/**
    - * Converts an `Number` to a `Buffer`
    - * @method intToBuffer
    - * @param {Number} i
    - * @return {Buffer}
    - */
    -exports.intToBuffer = function (i) {
    -  var hex = exports.intToHex(i)
    -  return new Buffer(hex.slice(2), 'hex')
    -}
    - 
    -/**
    - * Converts a `Buffer` to a `Number`
    - * @method bufferToInt
    - * @param {Buffer} buf
    - * @return {Number}
    - */
    -exports.bufferToInt = function (buf) {
    -  return parseInt(exports.bufferToHex(buf), 16)
    -}
    - 
    -/**
    - * Converts a `Buffer` into a hex `String`
    - * @method bufferToHex
    - * @param {Buffer} buf
    - * @return {String}
    - */
    -exports.bufferToHex = function (buf) {
    -  buf = exports.toBuffer(buf)
    -  if (buf.length === 0) {
    -    return 0
    -  }
    - 
    -  return '0x' + buf.toString('hex')
    -}
    - 
    -/**
    - * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
    - * @method fromSigned
    - * @param {Buffer} num
    - * @return {BN}
    - */
    -exports.fromSigned = function (num) {
    -  return new BN(num).fromTwos(256)
    -}
    - 
    -/**
    - * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
    - * @method toUnsigned
    - * @param {BN} num
    - * @return {Buffer}
    - */
    -exports.toUnsigned = function (num) {
    -  return new Buffer(num.toTwos(256).toArray())
    -}
    - 
    -/**
    - * Creates SHA-3 hash of the input
    - * @method sha3
    - * @param {Buffer|Array|String|Number} a the input data
    - * @param {Number} [bytes=256] the SHA width
    - * @return {Buffer}
    - */
    -exports.sha3 = function (a, bytes) {
    -  a = exports.toBuffer(a)
    -  if (!bytes) bytes = 256
    - 
    -  var h = new SHA3(bytes)
    -  Eif (a) {
    -    h.update(a)
    -  }
    -  return new Buffer(h.digest('hex'), 'hex')
    -}
    - 
    -/**
    - * Creates SHA256 hash of the input
    - * @method sha256
    - * @param {Buffer|Array|String|Number} a the input data
    - * @return {Buffer}
    - */
    -exports.sha256 = function (a) {
    -  a = exports.toBuffer(a)
    -  return createHash('sha256').update(a).digest()
    -}
    - 
    -/**
    - * Creates RIPEMD160 hash of the input
    - * @method ripemd160
    - * @param {Buffer|Array|String|Number} a the input data
    - * @param {Boolean} padded whether it should be padded to 256 bits or not
    - * @return {Buffer}
    - */
    -exports.ripemd160 = function (a, padded) {
    -  a = exports.toBuffer(a)
    -  var hash = createHash('rmd160').update(a).digest()
    -  if (padded === true) {
    -    return exports.setLength(hash, 32)
    -  } else {
    -    return hash
    -  }
    -}
    - 
    -/**
    - * Creates SHA-3 hash of the RLP encoded version of the input
    - * @method rlphash
    - * @param {Buffer|Array|String|Number} a the input data
    - * @return {Buffer}
    - */
    -exports.rlphash = function (a) {
    -  return exports.sha3(rlp.encode(a))
    -}
    - 
    -/**
    - * Checks if the private key satisfies the rules of the curve secp256k1.
    - * @method isValidPrivate
    - * @param {Buffer} privateKey
    - * @return {Boolean}
    - */
    -exports.isValidPrivate = function (privateKey) {
    -  return secp256k1.privateKeyVerify(privateKey)
    -}
    - 
    -/**
    - * Checks if the public key satisfies the rules of the curve secp256k1
    - * and the requirements of Ethereum.
    - * @method isValidPublic
    - * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
    - * @param {Boolean} [sanitize=false] Accept public keys in other formats
    - * @return {Boolean}
    - */
    -exports.isValidPublic = function (publicKey, sanitize) {
    -  if (publicKey.length === 64) {
    -    // Convert to SEC1 for secp256k1
    -    return secp256k1.publicKeyVerify(Buffer.concat([ new Buffer([4]), publicKey ]))
    -  }
    - 
    -  if (!sanitize) {
    -    return false
    -  }
    - 
    -  return secp256k1.publicKeyVerify(publicKey)
    -}
    - 
    -/**
    - * Returns the ethereum address of a given public key.
    - * Accepts "Ethereum public keys" and SEC1 encoded keys.
    - * @method publicToAddress
    - * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
    - * @param {Boolean} [sanitize=false] Accept public keys in other formats
    - * @return {Buffer}
    - */
    -exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
    -  pubKey = exports.toBuffer(pubKey)
    -  if (sanitize && (pubKey.length !== 64)) {
    -    pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
    -  }
    -  assert(pubKey.length === 64)
    -  // Only take the lower 160bits of the hash
    -  return exports.sha3(pubKey).slice(-20)
    -}
    - 
    -/**
    - * Returns the ethereum public key of a given private key
    - * @method privateToPublic
    - * @param {Buffer} privateKey A private key must be 256 bits wide
    - * @return {Buffer}
    - */
    -var privateToPublic = exports.privateToPublic = function (privateKey) {
    -  privateKey = exports.toBuffer(privateKey)
    -  // skip the type flag and use the X, Y points
    -  return secp256k1.publicKeyCreate(privateKey, false).slice(1)
    -}
    - 
    -/**
    - * Converts a public key to the Ethereum format.
    - * @method importPublic
    - * @param {Buffer} publicKey
    - * @return {Buffer}
    - */
    -exports.importPublic = function (publicKey) {
    -  publicKey = exports.toBuffer(publicKey)
    -  if (publicKey.length !== 64) {
    -    publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
    -  }
    -  return publicKey
    -}
    - 
    -/**
    - * ECDSA sign
    - * @method ecsign
    - * @param {Buffer} msgHash
    - * @param {Buffer} privateKey
    - * @return {Object}
    - */
    -exports.ecsign = function (msgHash, privateKey) {
    -  var sig = secp256k1.sign(msgHash, privateKey)
    - 
    -  var ret = {}
    -  ret.r = sig.signature.slice(0, 32)
    -  ret.s = sig.signature.slice(32, 64)
    -  ret.v = sig.recovery + 27
    -  return ret
    -}
    - 
    -/**
    - * ECDSA public key recovery from signature
    - * @method ecrecover
    - * @param {Buffer} msgHash
    - * @param {Buffer} v
    - * @param {Buffer} r
    - * @param {Buffer} s
    - * @return {Buffer} publicKey
    - */
    -exports.ecrecover = function (msgHash, v, r, s) {
    -  var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
    -  var recovery = exports.bufferToInt(v) - 27
    -  if (recovery !== 0 && recovery !== 1) {
    -    throw new Error('Invalid signature v value')
    -  }
    -  var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
    -  return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
    -}
    - 
    -/**
    - * Convert signature parameters into the format of `eth_sign` RPC method
    - * @method toRpcSig
    - * @param {Number} v
    - * @param {Buffer} r
    - * @param {Buffer} s
    - * @return {String} sig
    - */
    -exports.toRpcSig = function (v, r, s) {
    -  // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
    -  // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
    -  return exports.bufferToHex(Buffer.concat([ r, s, exports.toBuffer(v - 27) ]))
    -}
    - 
    -/**
    - * Convert signature format of the `eth_sign` RPC method to signature parameters
    - * @method fromRpcSig
    - * @param {String} sig
    - * @return {Object}
    - */
    -exports.fromRpcSig = function (sig) {
    -  sig = exports.toBuffer(sig)
    - 
    -  var v = sig[64]
    -  // support both versions of `eth_sign` responses
    -  Eif (v < 27) {
    -    v += 27
    -  }
    - 
    -  return {
    -    v: v,
    -    r: sig.slice(0, 32),
    -    s: sig.slice(32, 64)
    -  }
    -}
    - 
    -/**
    - * Returns the ethereum address of a given private key
    - * @method privateToAddress
    - * @param {Buffer} privateKey A private key must be 256 bits wide
    - * @return {Buffer}
    - */
    -exports.privateToAddress = function (privateKey) {
    -  return exports.publicToAddress(privateToPublic(privateKey))
    -}
    - 
    -/**
    - * Checks if the address is a valid. Accepts checksummed addresses too
    - * @method isValidAddress
    - * @param {String} address
    - * @return {Boolean}
    - */
    -exports.isValidAddress = function (address) {
    -  return /^0x[0-9a-fA-F]{40}$/i.test(address)
    -}
    - 
    -/**
    - * Returns a checksummed address
    - * @method toChecksumAddress
    - * @param {String} address
    - * @return {String}
    - */
    -exports.toChecksumAddress = function (address) {
    -  address = exports.stripHexPrefix(address).toLowerCase()
    -  var hash = exports.sha3(address).toString('hex')
    -  var ret = '0x'
    - 
    -  for (var i = 0; i < address.length; i++) {
    -    if (parseInt(hash[i], 16) >= 8) {
    -      ret += address[i].toUpperCase()
    -    } else {
    -      ret += address[i]
    -    }
    -  }
    - 
    -  return ret
    -}
    - 
    -/**
    - * Checks if the address is a valid checksummed address
    - * @method isValidChecksumAddress
    - * @param {Buffer} address
    - * @return {Boolean}
    - */
    -exports.isValidChecksumAddress = function (address) {
    -  return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
    -}
    - 
    -/**
    - * Generates an address of a newly created contract
    - * @method generateAddress
    - * @param {Buffer} from the address which is creating this new address
    - * @param {Buffer} nonce the nonce of the from account
    - * @return {Buffer}
    - */
    -exports.generateAddress = function (from, nonce) {
    -  from = exports.toBuffer(from)
    -  nonce = new BN(nonce)
    - 
    -  if (nonce.isZero()) {
    -    // in RLP we want to encode null in the case of zero nonce
    -    // read the RLP documentation for an answer if you dare
    -    nonce = null
    -  } else {
    -    nonce = new Buffer(nonce.toArray())
    -  }
    - 
    -  // Only take the lower 160bits of the hash
    -  return exports.rlphash([from, nonce]).slice(-20)
    -}
    - 
    -/**
    - * Returns true if the supplied address belongs to a precompiled account
    - * @method isPrecompiled
    - * @param {Buffer|String} address
    - * @return {Boolean}
    - */
    -exports.isPrecompiled = function (address) {
    -  var a = exports.unpad(address)
    -  return a.length === 1 && a[0] > 0 && a[0] < 5
    -}
    - 
    -/**
    - * Returns a `Boolean` on whether or not the a `String` starts with "0x"
    - * @method isHexPrefixed
    - * @param {String} str
    - * @return {Boolean}
    - */
    -exports.isHexPrefixed = function (str) {
    -  return str.slice(0, 2) === '0x'
    -}
    - 
    -/**
    - * Removes "0x" from a given `String`
    - * @method stripHexPrefix
    - * @param {String} str
    - * @return {String}
    - */
    -exports.stripHexPrefix = function (str) {
    -  if (typeof str !== 'string') {
    -    return str
    -  }
    -  return exports.isHexPrefixed(str) ? str.slice(2) : str
    -}
    - 
    -/**
    - * Adds "0x" to a given `String` if it does not already start with "0x"
    - * @method addHexPrefix
    - * @param {String} str
    - * @return {String}
    - */
    -exports.addHexPrefix = function (str) {
    -  if (typeof str !== 'string') {
    -    return str
    -  }
    - 
    -  return exports.isHexPrefixed(str) ? str : '0x' + str
    -}
    - 
    -/**
    - * Pads a `String` to have an even length
    - * @method padToEven
    - * @param {String} a
    - * @return {String}
    - */
    -exports.padToEven = function (a) {
    -  if (a.length % 2) a = '0' + a
    -  return a
    -}
    - 
    -/**
    - * Converts a `Buffer` or `Array` to JSON
    - * @method BAToJSON
    - * @param {Buffer|Array} ba
    - * @return {Array|String|null}
    - */
    -exports.baToJSON = function (ba) {
    -  if (Buffer.isBuffer(ba)) {
    -    return '0x' + ba.toString('hex')
    -  } else Eif (ba instanceof Array) {
    -    var array = []
    -    for (var i = 0; i < ba.length; i++) {
    -      array.push(exports.baToJSON(ba[i]))
    -    }
    -    return array
    -  }
    -}
    - 
    -/**
    - * Defines properties on a `Object`. It make the assumption that underlying data is binary.
    - * @method defineProperties
    - * @param {Object} self the `Object` to define properties on
    - * @param {Array} fields an array fields to define. Fields can contain:
    - * * `name` - the name of the properties
    - * * `length` - the number of bytes the field can have
    - * * `allowLess` - if the field can be less than the length
    - * * `allowEmpty`
    - * @param {*} data data to be validated against the definitions
    - */
    -exports.defineProperties = function (self, fields, data) {
    -  self.raw = []
    -  self._fields = []
    - 
    -  // attach the `toJSON`
    -  self.toJSON = function (label) {
    -    if (label) {
    -      var obj = {}
    -      self._fields.forEach(function (field) {
    -        obj[field] = '0x' + self[field].toString('hex')
    -      })
    -      return obj
    -    }
    -    return exports.baToJSON(this.raw)
    -  }
    - 
    -  self.serialize = function serialize () {
    -    return rlp.encode(self.raw)
    -  }
    - 
    -  fields.forEach(function (field, i) {
    -    self._fields.push(field.name)
    -    function getter () {
    -      return self.raw[i]
    -    }
    -    function setter (v) {
    -      v = exports.toBuffer(v)
    - 
    -      if (v.toString('hex') === '00' && !field.allowZero) {
    -        v = new Buffer([])
    -      }
    - 
    -      if (field.allowLess && field.length) {
    -        v = exports.stripZeros(v)
    -        assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
    -      } else if (!(field.allowZero && v.length === 0) && field.length) {
    -        assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
    -      }
    - 
    -      self.raw[i] = v
    -    }
    - 
    -    Object.defineProperty(self, field.name, {
    -      enumerable: true,
    -      configurable: true,
    -      get: getter,
    -      set: setter
    -    })
    - 
    -    Eif (field.default) {
    -      self[field.name] = field.default
    -    }
    - 
    -    // attach alias
    -    if (field.alias) {
    -      Object.defineProperty(self, field.alias, {
    -        enumerable: false,
    -        configurable: true,
    -        set: setter,
    -        get: getter
    -      })
    -    }
    -  })
    - 
    -  // if the constuctor is passed data
    -  if (data) {
    -    if (typeof data === 'string') {
    -      data = new Buffer(exports.stripHexPrefix(data), 'hex')
    -    }
    - 
    -    if (Buffer.isBuffer(data)) {
    -      data = rlp.decode(data)
    -    }
    - 
    -    if (Array.isArray(data)) {
    -      if (data.length > self._fields.length) {
    -        throw (new Error('wrong number of fields in data'))
    -      }
    - 
    -      // make sure all the items are buffers
    -      data.forEach(function (d, i) {
    -        self[self._fields[i]] = exports.toBuffer(d)
    -      })
    -    } else if (typeof data === 'object') {
    -      for (var prop in data) {
    -        Eif (self._fields.indexOf(prop) !== -1) {
    -          self[prop] = data[prop]
    -        }
    -      }
    -    } else {
    -      throw new Error('invalid data')
    -    }
    -  }
    -}
    - 
    -
    -
    - - - - - - - diff --git a/node_modules/ethereumjs-util/coverage/lcov-report/index.html b/node_modules/ethereumjs-util/coverage/lcov-report/index.html deleted file mode 100644 index 93f76c0..0000000 --- a/node_modules/ethereumjs-util/coverage/lcov-report/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for All files - - - - - - - -
    -
    -

    - / -

    -
    -
    - 100% - Statements - 235/235 -
    -
    - 94.39% - Branches - 101/107 -
    -
    - 100% - Functions - 43/43 -
    -
    - 100% - Lines - 233/233 -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileStatementsBranchesFunctionsLines
    ethereumjs-util/
    100%235/23594.39%101/107100%43/43100%233/233
    -
    -
    - - - - - - - diff --git a/node_modules/ethereumjs-util/coverage/lcov-report/prettify.css b/node_modules/ethereumjs-util/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/node_modules/ethereumjs-util/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/ethereumjs-util/coverage/lcov-report/prettify.js b/node_modules/ethereumjs-util/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/node_modules/ethereumjs-util/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/ethereumjs-util/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/ethereumjs-util/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a..0000000 Binary files a/node_modules/ethereumjs-util/coverage/lcov-report/sort-arrow-sprite.png and /dev/null differ diff --git a/node_modules/ethereumjs-util/coverage/lcov-report/sorter.js b/node_modules/ethereumjs-util/coverage/lcov-report/sorter.js deleted file mode 100644 index 6c5034e..0000000 --- a/node_modules/ethereumjs-util/coverage/lcov-report/sorter.js +++ /dev/null @@ -1,158 +0,0 @@ -var addSorting = (function () { - "use strict"; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { return document.querySelector('.coverage-summary'); } - // returns the thead element of the summary table - function getTableHeader() { return getTable().querySelector('thead tr'); } - // returns the tbody element of the summary table - function getTableBody() { return getTable().querySelector('tbody'); } - // returns the th element for nth column - function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/node_modules/ethereumjs-util/coverage/lcov.info b/node_modules/ethereumjs-util/coverage/lcov.info deleted file mode 100644 index e23d770..0000000 --- a/node_modules/ethereumjs-util/coverage/lcov.info +++ /dev/null @@ -1,435 +0,0 @@ -TN: -SF:/home/null/code/ethereumjs-util/index.js -FN:80,(anonymous_1) -FN:95,(anonymous_2) -FN:121,(anonymous_3) -FN:131,(anonymous_4) -FN:145,(anonymous_5) -FN:175,(anonymous_6) -FN:192,(anonymous_7) -FN:203,(anonymous_8) -FN:213,(anonymous_9) -FN:228,(anonymous_10) -FN:238,(anonymous_11) -FN:249,(anonymous_12) -FN:266,(anonymous_13) -FN:278,(anonymous_14) -FN:294,(anonymous_15) -FN:304,(anonymous_16) -FN:316,(anonymous_17) -FN:337,(anonymous_18) -FN:353,(anonymous_19) -FN:365,(anonymous_20) -FN:380,(anonymous_21) -FN:399,(anonymous_22) -FN:417,(anonymous_23) -FN:429,(anonymous_24) -FN:451,(anonymous_25) -FN:461,(anonymous_26) -FN:471,(anonymous_27) -FN:493,(anonymous_28) -FN:504,(anonymous_29) -FN:526,(anonymous_30) -FN:537,(anonymous_31) -FN:547,(anonymous_32) -FN:560,(anonymous_33) -FN:574,(anonymous_34) -FN:585,(anonymous_35) -FN:608,(anonymous_36) -FN:613,(anonymous_37) -FN:616,(anonymous_38) -FN:624,serialize -FN:628,(anonymous_40) -FN:630,getter -FN:633,setter -FN:688,(anonymous_43) -FNF:43 -FNH:43 -FNDA:17,(anonymous_1) -FNDA:15,(anonymous_2) -FNDA:1,(anonymous_3) -FNDA:23,(anonymous_4) -FNDA:157,(anonymous_5) -FNDA:8,(anonymous_6) -FNDA:7,(anonymous_7) -FNDA:7,(anonymous_8) -FNDA:9,(anonymous_9) -FNDA:2,(anonymous_10) -FNDA:2,(anonymous_11) -FNDA:28,(anonymous_12) -FNDA:1,(anonymous_13) -FNDA:2,(anonymous_14) -FNDA:4,(anonymous_15) -FNDA:6,(anonymous_16) -FNDA:8,(anonymous_17) -FNDA:6,(anonymous_18) -FNDA:5,(anonymous_19) -FNDA:3,(anonymous_20) -FNDA:1,(anonymous_21) -FNDA:4,(anonymous_22) -FNDA:1,(anonymous_23) -FNDA:1,(anonymous_24) -FNDA:1,(anonymous_25) -FNDA:15,(anonymous_26) -FNDA:17,(anonymous_27) -FNDA:9,(anonymous_28) -FNDA:3,(anonymous_29) -FNDA:7,(anonymous_30) -FNDA:92,(anonymous_31) -FNDA:58,(anonymous_32) -FNDA:2,(anonymous_33) -FNDA:17,(anonymous_34) -FNDA:12,(anonymous_35) -FNDA:9,(anonymous_36) -FNDA:2,(anonymous_37) -FNDA:5,(anonymous_38) -FNDA:2,serialize -FNDA:41,(anonymous_40) -FNDA:10,getter -FNDA:62,setter -FNDA:10,(anonymous_43) -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:12,1 -DA:18,1 -DA:24,1 -DA:30,1 -DA:36,1 -DA:42,1 -DA:48,1 -DA:54,1 -DA:60,1 -DA:66,1 -DA:72,1 -DA:80,1 -DA:81,17 -DA:82,17 -DA:83,17 -DA:95,1 -DA:96,15 -DA:97,15 -DA:98,15 -DA:99,3 -DA:100,2 -DA:101,2 -DA:103,1 -DA:105,12 -DA:106,3 -DA:107,3 -DA:109,9 -DA:121,1 -DA:122,1 -DA:131,1 -DA:132,23 -DA:133,23 -DA:134,23 -DA:135,515 -DA:136,515 -DA:138,23 -DA:145,1 -DA:146,157 -DA:147,58 -DA:148,1 -DA:149,57 -DA:150,47 -DA:151,17 -DA:153,30 -DA:155,10 -DA:156,6 -DA:157,4 -DA:158,2 -DA:159,2 -DA:161,1 -DA:163,1 -DA:166,156 -DA:175,1 -DA:176,8 -DA:177,8 -DA:178,8 -DA:179,8 -DA:180,2 -DA:183,8 -DA:192,1 -DA:193,7 -DA:194,7 -DA:203,1 -DA:204,7 -DA:213,1 -DA:214,9 -DA:215,9 -DA:216,2 -DA:219,7 -DA:228,1 -DA:229,2 -DA:238,1 -DA:239,2 -DA:249,1 -DA:250,28 -DA:251,28 -DA:253,28 -DA:254,28 -DA:255,28 -DA:257,28 -DA:266,1 -DA:267,1 -DA:268,1 -DA:278,1 -DA:279,2 -DA:280,2 -DA:281,2 -DA:282,1 -DA:284,1 -DA:294,1 -DA:295,4 -DA:304,1 -DA:305,6 -DA:316,1 -DA:317,8 -DA:319,1 -DA:322,7 -DA:323,3 -DA:326,4 -DA:337,1 -DA:338,6 -DA:339,6 -DA:340,2 -DA:342,5 -DA:344,4 -DA:353,1 -DA:354,5 -DA:356,5 -DA:365,1 -DA:366,3 -DA:367,3 -DA:368,2 -DA:370,3 -DA:380,1 -DA:381,1 -DA:383,1 -DA:384,1 -DA:385,1 -DA:386,1 -DA:387,1 -DA:399,1 -DA:400,4 -DA:401,4 -DA:402,4 -DA:403,2 -DA:405,2 -DA:406,1 -DA:417,1 -DA:420,1 -DA:429,1 -DA:430,1 -DA:432,1 -DA:434,1 -DA:435,1 -DA:438,1 -DA:451,1 -DA:452,1 -DA:461,1 -DA:462,15 -DA:471,1 -DA:472,17 -DA:473,17 -DA:474,17 -DA:476,17 -DA:477,680 -DA:478,371 -DA:480,309 -DA:484,17 -DA:493,1 -DA:494,9 -DA:504,1 -DA:505,3 -DA:506,3 -DA:508,3 -DA:511,1 -DA:513,2 -DA:517,3 -DA:526,1 -DA:527,7 -DA:528,7 -DA:537,1 -DA:538,92 -DA:547,1 -DA:548,58 -DA:549,14 -DA:551,44 -DA:560,1 -DA:561,2 -DA:562,1 -DA:565,1 -DA:574,1 -DA:575,17 -DA:576,17 -DA:585,1 -DA:586,12 -DA:587,9 -DA:588,3 -DA:589,3 -DA:590,3 -DA:591,9 -DA:593,3 -DA:608,1 -DA:609,9 -DA:610,9 -DA:613,9 -DA:614,2 -DA:615,1 -DA:616,1 -DA:617,5 -DA:619,1 -DA:621,1 -DA:624,9 -DA:625,2 -DA:628,9 -DA:629,41 -DA:630,1 -DA:631,10 -DA:633,1 -DA:634,62 -DA:636,62 -DA:637,8 -DA:640,62 -DA:641,14 -DA:642,14 -DA:643,48 -DA:644,1 -DA:647,61 -DA:650,41 -DA:657,41 -DA:658,41 -DA:662,40 -DA:663,8 -DA:673,8 -DA:674,6 -DA:675,1 -DA:678,6 -DA:679,1 -DA:682,6 -DA:683,3 -DA:684,1 -DA:688,2 -DA:689,10 -DA:691,3 -DA:692,2 -DA:693,8 -DA:694,8 -DA:698,1 -LF:233 -LH:233 -BRDA:98,1,0,3 -BRDA:98,1,1,12 -BRDA:99,2,0,2 -BRDA:99,2,1,1 -BRDA:105,3,0,3 -BRDA:105,3,1,9 -BRDA:134,4,0,538 -BRDA:134,4,1,529 -BRDA:146,5,0,58 -BRDA:146,5,1,99 -BRDA:147,6,0,1 -BRDA:147,6,1,57 -BRDA:149,7,0,47 -BRDA:149,7,1,10 -BRDA:150,8,0,17 -BRDA:150,8,1,30 -BRDA:155,9,0,6 -BRDA:155,9,1,4 -BRDA:157,10,0,2 -BRDA:157,10,1,2 -BRDA:157,11,0,4 -BRDA:157,11,1,3 -BRDA:159,12,0,1 -BRDA:159,12,1,1 -BRDA:179,13,0,2 -BRDA:179,13,1,6 -BRDA:215,14,0,2 -BRDA:215,14,1,7 -BRDA:251,15,0,27 -BRDA:251,15,1,1 -BRDA:254,16,0,28 -BRDA:254,16,1,0 -BRDA:281,17,0,1 -BRDA:281,17,1,1 -BRDA:317,18,0,1 -BRDA:317,18,1,7 -BRDA:322,19,0,3 -BRDA:322,19,1,4 -BRDA:339,20,0,2 -BRDA:339,20,1,4 -BRDA:339,21,0,6 -BRDA:339,21,1,2 -BRDA:367,22,0,2 -BRDA:367,22,1,1 -BRDA:402,23,0,2 -BRDA:402,23,1,2 -BRDA:402,24,0,4 -BRDA:402,24,1,2 -BRDA:434,25,0,1 -BRDA:434,25,1,0 -BRDA:477,26,0,371 -BRDA:477,26,1,309 -BRDA:494,27,0,9 -BRDA:494,27,1,9 -BRDA:508,28,0,1 -BRDA:508,28,1,2 -BRDA:528,29,0,7 -BRDA:528,29,1,5 -BRDA:528,29,2,5 -BRDA:548,30,0,14 -BRDA:548,30,1,44 -BRDA:551,31,0,35 -BRDA:551,31,1,9 -BRDA:561,32,0,1 -BRDA:561,32,1,1 -BRDA:565,33,0,0 -BRDA:565,33,1,1 -BRDA:575,34,0,1 -BRDA:575,34,1,16 -BRDA:586,35,0,9 -BRDA:586,35,1,3 -BRDA:588,36,0,3 -BRDA:588,36,1,0 -BRDA:614,37,0,1 -BRDA:614,37,1,1 -BRDA:636,38,0,8 -BRDA:636,38,1,54 -BRDA:636,39,0,62 -BRDA:636,39,1,8 -BRDA:640,40,0,14 -BRDA:640,40,1,48 -BRDA:640,41,0,62 -BRDA:640,41,1,14 -BRDA:643,42,0,1 -BRDA:643,42,1,47 -BRDA:643,43,0,48 -BRDA:643,43,1,38 -BRDA:643,44,0,48 -BRDA:643,44,1,10 -BRDA:657,45,0,41 -BRDA:657,45,1,0 -BRDA:662,46,0,8 -BRDA:662,46,1,32 -BRDA:673,47,0,6 -BRDA:673,47,1,2 -BRDA:674,48,0,1 -BRDA:674,48,1,5 -BRDA:678,49,0,1 -BRDA:678,49,1,5 -BRDA:682,50,0,3 -BRDA:682,50,1,3 -BRDA:683,51,0,1 -BRDA:683,51,1,2 -BRDA:691,52,0,2 -BRDA:691,52,1,1 -BRDA:693,53,0,8 -BRDA:693,53,1,0 -BRF:107 -BRH:101 -end_of_record diff --git a/node_modules/ethereumjs-util/docs/index.md b/node_modules/ethereumjs-util/docs/index.md deleted file mode 100644 index c699469..0000000 --- a/node_modules/ethereumjs-util/docs/index.md +++ /dev/null @@ -1,516 +0,0 @@ -# addHexPrefix - -[index.js:560-566](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L560-L566 "Source code on GitHub") - -Adds "0x" to a given `String` if it does not already start with "0x" - -**Parameters** - -- `str` **String** - -Returns **String** - -# baToJSON - -[index.js:585-595](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L585-L595 "Source code on GitHub") - -Converts a `Buffer` or `Array` to JSON - -**Parameters** - -- `ba` **Buffer or Array** - -Returns **Array or String or ** - -# BN - -[index.js:60-60](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L60-L60 "Source code on GitHub") - -[`BN`](https://github.com/indutny/bn.js) - -# bufferToHex - -[index.js:213-220](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L213-L220 "Source code on GitHub") - -Converts a `Buffer` into a hex `String` - -**Parameters** - -- `buf` **Buffer** - -Returns **String** - -# bufferToInt - -[index.js:203-205](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L203-L205 "Source code on GitHub") - -Converts a `Buffer` to a `Number` - -**Parameters** - -- `buf` **Buffer** - -Returns **Number** - -# defineProperties - -[index.js:608-701](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L608-L701 "Source code on GitHub") - -Defines properties on a `Object`. It make the assumption that underlying data is binary. - -**Parameters** - -- `self` **Object** the `Object` to define properties on -- `fields` **Array** an array fields to define. Fields can contain:- `name` - the name of the properties - - `length` - the number of bytes the field can have - - `allowLess` - if the field can be less than the length - - `allowEmpty` -- `data` **Any** data to be validated against the definitions - -# ecrecover - -[index.js:399-407](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L399-L407 "Source code on GitHub") - -ECDSA public key recovery from signature - -**Parameters** - -- `msgHash` **Buffer** -- `v` **Buffer** -- `r` **Buffer** -- `s` **Buffer** - -Returns **Buffer** publicKey - -# ecsign - -[index.js:380-388](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L380-L388 "Source code on GitHub") - -ECDSA sign - -**Parameters** - -- `msgHash` **Buffer** -- `privateKey` **Buffer** - -Returns **Object** - -# fromRpcSig - -[index.js:429-443](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L429-L443 "Source code on GitHub") - -Convert signature format of the `eth_sign` RPC method to signature parameters - -**Parameters** - -- `sig` **String** - -Returns **Object** - -# fromSigned - -[index.js:228-230](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L228-L230 "Source code on GitHub") - -Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers. - -**Parameters** - -- `num` **Buffer** - -Returns **BN** - -# generateAddress - -[index.js:504-518](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L504-L518 "Source code on GitHub") - -Generates an address of a newly created contract - -**Parameters** - -- `from` **Buffer** the address which is creating this new address -- `nonce` **Buffer** the nonce of the from account - -Returns **Buffer** - -# importPublic - -[index.js:365-371](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L365-L371 "Source code on GitHub") - -Converts a public key to the Ethereum format. - -**Parameters** - -- `publicKey` **Buffer** - -Returns **Buffer** - -# intToBuffer - -[index.js:192-195](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L192-L195 "Source code on GitHub") - -Converts an `Number` to a `Buffer` - -**Parameters** - -- `i` **Number** - -Returns **Buffer** - -# intToHex - -[index.js:175-184](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L175-L184 "Source code on GitHub") - -Converts a `Number` into a hex `String` - -**Parameters** - -- `i` **Number** - -Returns **String** - -# isHexPrefixed - -[index.js:537-539](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L537-L539 "Source code on GitHub") - -Returns a `Boolean` on whether or not the a `String` starts with "0x" - -**Parameters** - -- `str` **String** - -Returns **Boolean** - -# isPrecompiled - -[index.js:526-529](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L526-L529 "Source code on GitHub") - -Returns true if the supplied address belongs to a precompiled account - -**Parameters** - -- `address` **Buffer or String** - -Returns **Boolean** - -# isValidAddress - -[index.js:461-463](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L461-L463 "Source code on GitHub") - -Checks if the address is a valid. Accepts checksummed addresses too - -**Parameters** - -- `address` **String** - -Returns **Boolean** - -# isValidChecksumAddress - -[index.js:493-495](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L493-L495 "Source code on GitHub") - -Checks if the address is a valid checksummed address - -**Parameters** - -- `address` **Buffer** - -Returns **Boolean** - -# isValidPrivate - -[index.js:304-306](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L304-L306 "Source code on GitHub") - -Checks if the private key satisfies the rules of the curve secp256k1. - -**Parameters** - -- `privateKey` **Buffer** - -Returns **Boolean** - -# isValidPublic - -[index.js:316-327](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L316-L327 "Source code on GitHub") - -Checks if the public key satisfies the rules of the curve secp256k1 -and the requirements of Ethereum. - -**Parameters** - -- `publicKey` **Buffer** The two points of an uncompressed key, unless sanitize is enabled -- `sanitize` **[Boolean]** Accept public keys in other formats (optional, default `false`) - -Returns **Boolean** - -# MAX_INTEGER - -[index.js:12-12](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L12-L12 "Source code on GitHub") - -the max integer that this VM can handle (a `BN`) - -# padToEven - -[index.js:574-577](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L574-L577 "Source code on GitHub") - -Pads a `String` to have an even length - -**Parameters** - -- `a` **String** - -Returns **String** - -# privateToAddress - -[index.js:451-453](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L451-L453 "Source code on GitHub") - -Returns the ethereum address of a given private key - -**Parameters** - -- `privateKey` **Buffer** A private key must be 256 bits wide - -Returns **Buffer** - -# pubToAddress - -[index.js:337-345](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L337-L345 "Source code on GitHub") - -Returns the ethereum address of a given public key. -Accepts "Ethereum public keys" and SEC1 encoded keys. - -**Parameters** - -- `pubKey` **Buffer** The two points of an uncompressed key, unless sanitize is enabled -- `sanitize` **[Boolean]** Accept public keys in other formats (optional, default `false`) - -Returns **Buffer** - -# ripemd160 - -[index.js:278-286](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L278-L286 "Source code on GitHub") - -Creates RIPEMD160 hash of the input - -**Parameters** - -- `a` **Buffer or Array or String or Number** the input data -- `padded` **Boolean** whether it should be padded to 256 bits or not - -Returns **Buffer** - -# rlp - -[index.js:66-66](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L66-L66 "Source code on GitHub") - -[`rlp`](https://github.com/ethereumjs/rlp) - -# rlphash - -[index.js:294-296](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L294-L296 "Source code on GitHub") - -Creates SHA-3 hash of the RLP encoded version of the input - -**Parameters** - -- `a` **Buffer or Array or String or Number** the input data - -Returns **Buffer** - -# secp256k1 - -[index.js:72-72](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L72-L72 "Source code on GitHub") - -[`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/) - -# setLengthLeft - -[index.js:95-111](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L95-L111 "Source code on GitHub") - -Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. -Or it truncates the beginning if it exceeds. - -**Parameters** - -- `msg` **Buffer or Array** the value to pad -- `length` **Number** the number of bytes the output should be -- `right` **[Boolean]** whether to start padding form the left or right (optional, default `false`) - -Returns **Buffer or Array** - -# setLengthRight - -[index.js:121-123](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L121-L123 "Source code on GitHub") - -Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. -Or it truncates the beginning if it exceeds. - -**Parameters** - -- `msg` **Buffer or Array** the value to pad -- `length` **Number** the number of bytes the output should be - -Returns **Buffer or Array** - -# sha256 - -[index.js:266-269](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L266-L269 "Source code on GitHub") - -Creates SHA256 hash of the input - -**Parameters** - -- `a` **Buffer or Array or String or Number** the input data - -Returns **Buffer** - -# sha3 - -[index.js:249-258](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L249-L258 "Source code on GitHub") - -Creates SHA-3 hash of the input - -**Parameters** - -- `a` **Buffer or Array or String or Number** the input data -- `bytes` **[Number]** the SHA width (optional, default `256`) - -Returns **Buffer** - -# SHA3_NULL - -[index.js:30-30](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L30-L30 "Source code on GitHub") - -SHA3-256 hash of null (a `Buffer`) - -# SHA3_NULL_S - -[index.js:24-24](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L24-L24 "Source code on GitHub") - -SHA3-256 hash of null (a `String`) - -# SHA3_RLP - -[index.js:54-54](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L54-L54 "Source code on GitHub") - -SHA3-256 hash of the RLP of null (a `Buffer`) - -# SHA3_RLP_ARRAY - -[index.js:42-42](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L42-L42 "Source code on GitHub") - -SHA3-256 of an RLP of an empty array (a `Buffer`) - -# SHA3_RLP_ARRAY_S - -[index.js:36-36](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L36-L36 "Source code on GitHub") - -SHA3-256 of an RLP of an empty array (a `String`) - -# SHA3_RLP_S - -[index.js:48-48](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L48-L48 "Source code on GitHub") - -SHA3-256 hash of the RLP of null (a `String`) - -# stripHexPrefix - -[index.js:547-552](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L547-L552 "Source code on GitHub") - -Removes "0x" from a given `String` - -**Parameters** - -- `str` **String** - -Returns **String** - -# toBuffer - -[index.js:145-167](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L145-L167 "Source code on GitHub") - -Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method. - -**Parameters** - -- `v` **Any** the value - -# toChecksumAddress - -[index.js:471-485](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L471-L485 "Source code on GitHub") - -Returns a checksummed address - -**Parameters** - -- `address` **String** - -Returns **String** - -# toRpcSig - -[index.js:417-421](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L417-L421 "Source code on GitHub") - -Convert signature parameters into the format of `eth_sign` RPC method - -**Parameters** - -- `v` **Number** -- `r` **Buffer** -- `s` **Buffer** - -Returns **String** sig - -# toUnsigned - -[index.js:238-240](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L238-L240 "Source code on GitHub") - -Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers. - -**Parameters** - -- `num` **BN** - -Returns **Buffer** - -# TWO_POW256 - -[index.js:18-18](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L18-L18 "Source code on GitHub") - -2^256 (a `BN`) - -# unpad - -[index.js:131-139](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L131-L139 "Source code on GitHub") - -Trims leading zeros from a `Buffer` or an `Array` - -**Parameters** - -- `a` **Buffer or Array or String** - -Returns **Buffer or Array or String** - -# zeros - -[index.js:80-84](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L80-L84 "Source code on GitHub") - -Returns a buffer filled with 0s - -**Parameters** - -- `bytes` **Number** the number of bytes the buffer should be - -Returns **Buffer** - -# privateToPublic - -[index.js:353-357](https://github.com/ethereumjs/ethereumjs-util/blob/3527634ea80decbf2915ceafd8f3e259c004b9d3/index.js#L353-L357 "Source code on GitHub") - -Returns the ethereum public key of a given private key - -**Parameters** - -- `privateKey` **Buffer** A private key must be 256 bits wide - -Returns **Buffer** diff --git a/node_modules/ethereumjs-util/index.js b/node_modules/ethereumjs-util/index.js deleted file mode 100644 index 47e745e..0000000 --- a/node_modules/ethereumjs-util/index.js +++ /dev/null @@ -1,701 +0,0 @@ -const SHA3 = require('keccakjs') -const secp256k1 = require('secp256k1') -const assert = require('assert') -const rlp = require('rlp') -const BN = require('bn.js') -const createHash = require('create-hash') - -/** - * the max integer that this VM can handle (a ```BN```) - * @var {BN} MAX_INTEGER - */ -exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16) - -/** - * 2^256 (a ```BN```) - * @var {BN} TWO_POW256 - */ -exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16) - -/** - * SHA3-256 hash of null (a ```String```) - * @var {String} SHA3_NULL_S - */ -exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' - -/** - * SHA3-256 hash of null (a ```Buffer```) - * @var {Buffer} SHA3_NULL - */ -exports.SHA3_NULL = new Buffer(exports.SHA3_NULL_S, 'hex') - -/** - * SHA3-256 of an RLP of an empty array (a ```String```) - * @var {String} SHA3_RLP_ARRAY_S - */ -exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347' - -/** - * SHA3-256 of an RLP of an empty array (a ```Buffer```) - * @var {Buffer} SHA3_RLP_ARRAY - */ -exports.SHA3_RLP_ARRAY = new Buffer(exports.SHA3_RLP_ARRAY_S, 'hex') - -/** - * SHA3-256 hash of the RLP of null (a ```String```) - * @var {String} SHA3_RLP_S - */ -exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' - -/** - * SHA3-256 hash of the RLP of null (a ```Buffer```) - * @var {Buffer} SHA3_RLP - */ -exports.SHA3_RLP = new Buffer(exports.SHA3_RLP_S, 'hex') - -/** - * [`BN`](https://github.com/indutny/bn.js) - * @var {Function} - */ -exports.BN = BN - -/** - * [`rlp`](https://github.com/ethereumjs/rlp) - * @var {Function} - */ -exports.rlp = rlp - -/** - * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/) - * @var {Object} - */ -exports.secp256k1 = secp256k1 - -/** - * Returns a buffer filled with 0s - * @method zeros - * @param {Number} bytes the number of bytes the buffer should be - * @return {Buffer} - */ -exports.zeros = function (bytes) { - var buf = new Buffer(bytes) - buf.fill(0) - return buf -} - -/** - * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. - * Or it truncates the beginning if it exceeds. - * @method lsetLength - * @param {Buffer|Array} msg the value to pad - * @param {Number} length the number of bytes the output should be - * @param {Boolean} [right=false] whether to start padding form the left or right - * @return {Buffer|Array} - */ -exports.setLengthLeft = exports.setLength = function (msg, length, right) { - var buf = exports.zeros(length) - msg = exports.toBuffer(msg) - if (right) { - if (msg.length < length) { - msg.copy(buf) - return buf - } - return msg.slice(0, length) - } else { - if (msg.length < length) { - msg.copy(buf, length - msg.length) - return buf - } - return msg.slice(-length) - } -} - -/** - * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. - * Or it truncates the beginning if it exceeds. - * @method lsetLength - * @param {Buffer|Array} msg the value to pad - * @param {Number} length the number of bytes the output should be - * @return {Buffer|Array} - */ -exports.setLengthRight = function (msg, length) { - return exports.setLength(msg, length, true) -} - -/** - * Trims leading zeros from a `Buffer` or an `Array` - * @method unpad - * @param {Buffer|Array|String} a - * @return {Buffer|Array|String} - */ -exports.unpad = exports.stripZeros = function (a) { - a = exports.stripHexPrefix(a) - var first = a[0] - while (a.length > 0 && first.toString() === '0') { - a = a.slice(1) - first = a[0] - } - return a -} -/** - * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method. - * @method toBuffer - * @param {*} v the value - */ -exports.toBuffer = function (v) { - if (!Buffer.isBuffer(v)) { - if (Array.isArray(v)) { - v = new Buffer(v) - } else if (typeof v === 'string') { - if (exports.isHexPrefixed(v)) { - v = new Buffer(exports.padToEven(exports.stripHexPrefix(v)), 'hex') - } else { - v = new Buffer(v) - } - } else if (typeof v === 'number') { - v = exports.intToBuffer(v) - } else if (v === null || v === undefined) { - v = new Buffer([]) - } else if (v.toArray) { - // converts a BN to a Buffer - v = new Buffer(v.toArray()) - } else { - throw new Error('invalid type') - } - } - return v -} - -/** - * Converts a `Number` into a hex `String` - * @method intToHex - * @param {Number} i - * @return {String} - */ -exports.intToHex = function (i) { - assert(i % 1 === 0, 'number is not a integer') - assert(i >= 0, 'number must be positive') - var hex = i.toString(16) - if (hex.length % 2) { - hex = '0' + hex - } - - return '0x' + hex -} - -/** - * Converts an `Number` to a `Buffer` - * @method intToBuffer - * @param {Number} i - * @return {Buffer} - */ -exports.intToBuffer = function (i) { - var hex = exports.intToHex(i) - return new Buffer(hex.slice(2), 'hex') -} - -/** - * Converts a `Buffer` to a `Number` - * @method bufferToInt - * @param {Buffer} buf - * @return {Number} - */ -exports.bufferToInt = function (buf) { - return parseInt(exports.bufferToHex(buf), 16) -} - -/** - * Converts a `Buffer` into a hex `String` - * @method bufferToHex - * @param {Buffer} buf - * @return {String} - */ -exports.bufferToHex = function (buf) { - buf = exports.toBuffer(buf) - if (buf.length === 0) { - return 0 - } - - return '0x' + buf.toString('hex') -} - -/** - * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers. - * @method fromSigned - * @param {Buffer} num - * @return {BN} - */ -exports.fromSigned = function (num) { - return new BN(num).fromTwos(256) -} - -/** - * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers. - * @method toUnsigned - * @param {BN} num - * @return {Buffer} - */ -exports.toUnsigned = function (num) { - return new Buffer(num.toTwos(256).toArray()) -} - -/** - * Creates SHA-3 hash of the input - * @method sha3 - * @param {Buffer|Array|String|Number} a the input data - * @param {Number} [bytes=256] the SHA width - * @return {Buffer} - */ -exports.sha3 = function (a, bytes) { - a = exports.toBuffer(a) - if (!bytes) bytes = 256 - - var h = new SHA3(bytes) - if (a) { - h.update(a) - } - return new Buffer(h.digest('hex'), 'hex') -} - -/** - * Creates SHA256 hash of the input - * @method sha256 - * @param {Buffer|Array|String|Number} a the input data - * @return {Buffer} - */ -exports.sha256 = function (a) { - a = exports.toBuffer(a) - return createHash('sha256').update(a).digest() -} - -/** - * Creates RIPEMD160 hash of the input - * @method ripemd160 - * @param {Buffer|Array|String|Number} a the input data - * @param {Boolean} padded whether it should be padded to 256 bits or not - * @return {Buffer} - */ -exports.ripemd160 = function (a, padded) { - a = exports.toBuffer(a) - var hash = createHash('rmd160').update(a).digest() - if (padded === true) { - return exports.setLength(hash, 32) - } else { - return hash - } -} - -/** - * Creates SHA-3 hash of the RLP encoded version of the input - * @method rlphash - * @param {Buffer|Array|String|Number} a the input data - * @return {Buffer} - */ -exports.rlphash = function (a) { - return exports.sha3(rlp.encode(a)) -} - -/** - * Checks if the private key satisfies the rules of the curve secp256k1. - * @method isValidPrivate - * @param {Buffer} privateKey - * @return {Boolean} - */ -exports.isValidPrivate = function (privateKey) { - return secp256k1.privateKeyVerify(privateKey) -} - -/** - * Checks if the public key satisfies the rules of the curve secp256k1 - * and the requirements of Ethereum. - * @method isValidPublic - * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled - * @param {Boolean} [sanitize=false] Accept public keys in other formats - * @return {Boolean} - */ -exports.isValidPublic = function (publicKey, sanitize) { - if (publicKey.length === 64) { - // Convert to SEC1 for secp256k1 - return secp256k1.publicKeyVerify(Buffer.concat([ new Buffer([4]), publicKey ])) - } - - if (!sanitize) { - return false - } - - return secp256k1.publicKeyVerify(publicKey) -} - -/** - * Returns the ethereum address of a given public key. - * Accepts "Ethereum public keys" and SEC1 encoded keys. - * @method publicToAddress - * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled - * @param {Boolean} [sanitize=false] Accept public keys in other formats - * @return {Buffer} - */ -exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) { - pubKey = exports.toBuffer(pubKey) - if (sanitize && (pubKey.length !== 64)) { - pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1) - } - assert(pubKey.length === 64) - // Only take the lower 160bits of the hash - return exports.sha3(pubKey).slice(-20) -} - -/** - * Returns the ethereum public key of a given private key - * @method privateToPublic - * @param {Buffer} privateKey A private key must be 256 bits wide - * @return {Buffer} - */ -var privateToPublic = exports.privateToPublic = function (privateKey) { - privateKey = exports.toBuffer(privateKey) - // skip the type flag and use the X, Y points - return secp256k1.publicKeyCreate(privateKey, false).slice(1) -} - -/** - * Converts a public key to the Ethereum format. - * @method importPublic - * @param {Buffer} publicKey - * @return {Buffer} - */ -exports.importPublic = function (publicKey) { - publicKey = exports.toBuffer(publicKey) - if (publicKey.length !== 64) { - publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1) - } - return publicKey -} - -/** - * ECDSA sign - * @method ecsign - * @param {Buffer} msgHash - * @param {Buffer} privateKey - * @return {Object} - */ -exports.ecsign = function (msgHash, privateKey) { - var sig = secp256k1.sign(msgHash, privateKey) - - var ret = {} - ret.r = sig.signature.slice(0, 32) - ret.s = sig.signature.slice(32, 64) - ret.v = sig.recovery + 27 - return ret -} - -/** - * ECDSA public key recovery from signature - * @method ecrecover - * @param {Buffer} msgHash - * @param {Buffer} v - * @param {Buffer} r - * @param {Buffer} s - * @return {Buffer} publicKey - */ -exports.ecrecover = function (msgHash, v, r, s) { - var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64) - var recovery = exports.bufferToInt(v) - 27 - if (recovery !== 0 && recovery !== 1) { - throw new Error('Invalid signature v value') - } - var senderPubKey = secp256k1.recover(msgHash, signature, recovery) - return secp256k1.publicKeyConvert(senderPubKey, false).slice(1) -} - -/** - * Convert signature parameters into the format of `eth_sign` RPC method - * @method toRpcSig - * @param {Number} v - * @param {Buffer} r - * @param {Buffer} s - * @return {String} sig - */ -exports.toRpcSig = function (v, r, s) { - // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin - // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053 - return exports.bufferToHex(Buffer.concat([ r, s, exports.toBuffer(v - 27) ])) -} - -/** - * Convert signature format of the `eth_sign` RPC method to signature parameters - * @method fromRpcSig - * @param {String} sig - * @return {Object} - */ -exports.fromRpcSig = function (sig) { - sig = exports.toBuffer(sig) - - var v = sig[64] - // support both versions of `eth_sign` responses - if (v < 27) { - v += 27 - } - - return { - v: v, - r: sig.slice(0, 32), - s: sig.slice(32, 64) - } -} - -/** - * Returns the ethereum address of a given private key - * @method privateToAddress - * @param {Buffer} privateKey A private key must be 256 bits wide - * @return {Buffer} - */ -exports.privateToAddress = function (privateKey) { - return exports.publicToAddress(privateToPublic(privateKey)) -} - -/** - * Checks if the address is a valid. Accepts checksummed addresses too - * @method isValidAddress - * @param {String} address - * @return {Boolean} - */ -exports.isValidAddress = function (address) { - return /^0x[0-9a-fA-F]{40}$/i.test(address) -} - -/** - * Returns a checksummed address - * @method toChecksumAddress - * @param {String} address - * @return {String} - */ -exports.toChecksumAddress = function (address) { - address = exports.stripHexPrefix(address).toLowerCase() - var hash = exports.sha3(address).toString('hex') - var ret = '0x' - - for (var i = 0; i < address.length; i++) { - if (parseInt(hash[i], 16) >= 8) { - ret += address[i].toUpperCase() - } else { - ret += address[i] - } - } - - return ret -} - -/** - * Checks if the address is a valid checksummed address - * @method isValidChecksumAddress - * @param {Buffer} address - * @return {Boolean} - */ -exports.isValidChecksumAddress = function (address) { - return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address) -} - -/** - * Generates an address of a newly created contract - * @method generateAddress - * @param {Buffer} from the address which is creating this new address - * @param {Buffer} nonce the nonce of the from account - * @return {Buffer} - */ -exports.generateAddress = function (from, nonce) { - from = exports.toBuffer(from) - nonce = new BN(nonce) - - if (nonce.isZero()) { - // in RLP we want to encode null in the case of zero nonce - // read the RLP documentation for an answer if you dare - nonce = null - } else { - nonce = new Buffer(nonce.toArray()) - } - - // Only take the lower 160bits of the hash - return exports.rlphash([from, nonce]).slice(-20) -} - -/** - * Returns true if the supplied address belongs to a precompiled account - * @method isPrecompiled - * @param {Buffer|String} address - * @return {Boolean} - */ -exports.isPrecompiled = function (address) { - var a = exports.unpad(address) - return a.length === 1 && a[0] > 0 && a[0] < 5 -} - -/** - * Returns a `Boolean` on whether or not the a `String` starts with "0x" - * @method isHexPrefixed - * @param {String} str - * @return {Boolean} - */ -exports.isHexPrefixed = function (str) { - return str.slice(0, 2) === '0x' -} - -/** - * Removes "0x" from a given `String` - * @method stripHexPrefix - * @param {String} str - * @return {String} - */ -exports.stripHexPrefix = function (str) { - if (typeof str !== 'string') { - return str - } - return exports.isHexPrefixed(str) ? str.slice(2) : str -} - -/** - * Adds "0x" to a given `String` if it does not already start with "0x" - * @method addHexPrefix - * @param {String} str - * @return {String} - */ -exports.addHexPrefix = function (str) { - if (typeof str !== 'string') { - return str - } - - return exports.isHexPrefixed(str) ? str : '0x' + str -} - -/** - * Pads a `String` to have an even length - * @method padToEven - * @param {String} a - * @return {String} - */ -exports.padToEven = function (a) { - if (a.length % 2) a = '0' + a - return a -} - -/** - * Converts a `Buffer` or `Array` to JSON - * @method BAToJSON - * @param {Buffer|Array} ba - * @return {Array|String|null} - */ -exports.baToJSON = function (ba) { - if (Buffer.isBuffer(ba)) { - return '0x' + ba.toString('hex') - } else if (ba instanceof Array) { - var array = [] - for (var i = 0; i < ba.length; i++) { - array.push(exports.baToJSON(ba[i])) - } - return array - } -} - -/** - * Defines properties on a `Object`. It make the assumption that underlying data is binary. - * @method defineProperties - * @param {Object} self the `Object` to define properties on - * @param {Array} fields an array fields to define. Fields can contain: - * * `name` - the name of the properties - * * `length` - the number of bytes the field can have - * * `allowLess` - if the field can be less than the length - * * `allowEmpty` - * @param {*} data data to be validated against the definitions - */ -exports.defineProperties = function (self, fields, data) { - self.raw = [] - self._fields = [] - - // attach the `toJSON` - self.toJSON = function (label) { - if (label) { - var obj = {} - self._fields.forEach(function (field) { - obj[field] = '0x' + self[field].toString('hex') - }) - return obj - } - return exports.baToJSON(this.raw) - } - - self.serialize = function serialize () { - return rlp.encode(self.raw) - } - - fields.forEach(function (field, i) { - self._fields.push(field.name) - function getter () { - return self.raw[i] - } - function setter (v) { - v = exports.toBuffer(v) - - if (v.toString('hex') === '00' && !field.allowZero) { - v = new Buffer([]) - } - - if (field.allowLess && field.length) { - v = exports.stripZeros(v) - assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes') - } else if (!(field.allowZero && v.length === 0) && field.length) { - assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length) - } - - self.raw[i] = v - } - - Object.defineProperty(self, field.name, { - enumerable: true, - configurable: true, - get: getter, - set: setter - }) - - if (field.default) { - self[field.name] = field.default - } - - // attach alias - if (field.alias) { - Object.defineProperty(self, field.alias, { - enumerable: false, - configurable: true, - set: setter, - get: getter - }) - } - }) - - // if the constuctor is passed data - if (data) { - if (typeof data === 'string') { - data = new Buffer(exports.stripHexPrefix(data), 'hex') - } - - if (Buffer.isBuffer(data)) { - data = rlp.decode(data) - } - - if (Array.isArray(data)) { - if (data.length > self._fields.length) { - throw (new Error('wrong number of fields in data')) - } - - // make sure all the items are buffers - data.forEach(function (d, i) { - self[self._fields[i]] = exports.toBuffer(d) - }) - } else if (typeof data === 'object') { - for (var prop in data) { - if (self._fields.indexOf(prop) !== -1) { - self[prop] = data[prop] - } - } - } else { - throw new Error('invalid data') - } - } -} diff --git a/node_modules/ethereumjs-util/karma.conf.js b/node_modules/ethereumjs-util/karma.conf.js deleted file mode 100644 index c08a265..0000000 --- a/node_modules/ethereumjs-util/karma.conf.js +++ /dev/null @@ -1,41 +0,0 @@ -module.exports = function (config) { - config.set({ - frameworks: ['browserify', 'detectBrowsers', 'mocha'], - files: [ - 'test/*.js' - ], - preprocessors: { - 'test/*.js': ['browserify', 'env'] - }, - singleRun: true, - plugins: [ - 'karma-browserify', - 'karma-chrome-launcher', - 'karma-env-preprocessor', - 'karma-firefox-launcher', - 'karma-detect-browsers', - 'karma-mocha' - ], - browserify: { - debug: true - }, - envPreprocessor: [ - 'RANDOM_TESTS_REPEAT', - 'TRAVIS' - ], - detectBrowsers: { - enabled: true, - usePhantomJS: false, - postDetection: function (availableBrowser) { - if (process.env.TRAVIS) { - return ['Firefox'] - } - - var browsers = ['Chrome', 'Firefox'] - return browsers.filter(function (browser) { - return availableBrowser.indexOf(browser) !== -1 - }) - } - } - }) -} diff --git a/node_modules/ethereumjs-util/package.json b/node_modules/ethereumjs-util/package.json deleted file mode 100644 index 4974cd2..0000000 --- a/node_modules/ethereumjs-util/package.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "_args": [ - [ - "ethereumjs-util@^4.5.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "ethereumjs-util@>=4.5.0 <5.0.0", - "_id": "ethereumjs-util@4.5.0", - "_inCache": true, - "_installable": true, - "_location": "/ethereumjs-util", - "_nodeVersion": "7.0.0-pre", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/ethereumjs-util-4.5.0.tgz_1468346848362_0.7674490883946419" - }, - "_npmUser": { - "email": "null_radix@riseup.net", - "name": "null_radix" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "ethereumjs-util", - "raw": "ethereumjs-util@^4.5.0", - "rawSpec": "^4.5.0", - "scope": null, - "spec": ">=4.5.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-account", - "/ethereumjs-block", - "/ethereumjs-testrpc", - "/ethereumjs-tx", - "/ethereumjs-vm", - "/ethereumjs-wallet", - "/merkle-patricia-tree", - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", - "_shasum": "3e9428b317eebda3d7260d854fddda954b1f1bc6", - "_shrinkwrap": null, - "_spec": "ethereumjs-util@^4.5.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "email": "mjbecze@gmail.com", - "name": "mjbecze" - }, - "bugs": { - "url": "https://github.com/ethereumjs/ethereumjs-util/issues" - }, - "contributors": [ - { - "email": "alex@rtfs.hu", - "name": "Alex Beregszaszi" - } - ], - "dependencies": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "keccakjs": "^0.2.0", - "rlp": "^2.0.0", - "secp256k1": "^3.0.1" - }, - "description": "a collection of utility functions for Ethereum", - "devDependencies": { - "browserify": "^13.0.0", - "coveralls": "^2.11.4", - "documentation": "^3.0.4", - "istanbul": "^0.4.1", - "karma": "^0.13.15", - "karma-browserify": "^5.0.0", - "karma-chrome-launcher": "^0.2.2", - "karma-detect-browsers": "^2.0.2", - "karma-env-preprocessor": "^0.1.1", - "karma-firefox-launcher": "^0.1.7", - "karma-mocha": "^0.2.1", - "mocha": "^2.3.4", - "standard": "^5.4.1" - }, - "directories": {}, - "dist": { - "shasum": "3e9428b317eebda3d7260d854fddda954b1f1bc6", - "tarball": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz" - }, - "gitHead": "884cf09b08967e75cd8130077fb64e5d4e561d27", - "homepage": "https://github.com/ethereumjs/ethereumjs-util", - "keywords": [ - "ethereum", - "utilties" - ], - "license": "MPL-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "alex@rtfs.hu", - "name": "axic" - }, - { - "email": "mjbecze@gmail.com", - "name": "null_radix" - } - ], - "name": "ethereumjs-util", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ethereumjs/ethereumjs-util.git" - }, - "scripts": { - "build:docs": "documentation --github -f md ./index.js > ./docs/index.md", - "coverage": "istanbul cover _mocha", - "coveralls": "npm run coverage && coveralls = N)', function () { - var tmp = SECP256K1_N.addn(1).toString(16) - assert.equal(ethUtils.isValidPrivate(new Buffer(tmp, 'hex')), false) - }) - it('should work otherwise (< N)', function () { - var tmp = SECP256K1_N.subn(1).toString(16) - assert.equal(ethUtils.isValidPrivate(new Buffer(tmp, 'hex')), true) - }) -}) - -describe('isValidPublic', function () { - it('should fail on too short input', function () { - var pubKey = '3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae744' - pubKey = new Buffer(pubKey, 'hex') - assert.equal(ethUtils.isValidPublic(pubKey), false) - }) - it('should fail on too big input', function () { - var pubKey = '3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d00' - pubKey = new Buffer(pubKey, 'hex') - assert.equal(ethUtils.isValidPublic(pubKey), false) - }) - it('should fail on SEC1 key', function () { - var pubKey = '043a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - pubKey = new Buffer(pubKey, 'hex') - assert.equal(ethUtils.isValidPublic(pubKey), false) - }) - it('shouldn\'t fail on SEC1 key with sanitize enabled', function () { - var pubKey = '043a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - pubKey = new Buffer(pubKey, 'hex') - assert.equal(ethUtils.isValidPublic(pubKey, true), true) - }) - it('should fail with an invalid SEC1 public key', function () { - var pubKey = '023a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - pubKey = new Buffer(pubKey, 'hex') - assert.equal(ethUtils.isValidPublic(pubKey, true), false) - }) - it('should work with compressed keys with sanitize enabled', function () { - var pubKey = '033a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a' - pubKey = new Buffer(pubKey, 'hex') - assert.equal(ethUtils.isValidPublic(pubKey, true), true) - }) - it('should work with sanitize enabled', function () { - var pubKey = '043a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - pubKey = new Buffer(pubKey, 'hex') - assert.equal(ethUtils.isValidPublic(pubKey, true), true) - }) - it('should work otherwise', function () { - var pubKey = '3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - pubKey = new Buffer(pubKey, 'hex') - assert.equal(ethUtils.isValidPublic(pubKey), true) - }) -}) - -describe('importPublic', function () { - var pubKey = '3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - it('should work with an Ethereum public key', function () { - var tmp = '3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - assert.equal(ethUtils.importPublic(new Buffer(tmp, 'hex')).toString('hex'), pubKey) - }) - it('should work with uncompressed SEC1 keys', function () { - var tmp = '043a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - assert.equal(ethUtils.importPublic(new Buffer(tmp, 'hex')).toString('hex'), pubKey) - }) - it('should work with compressed SEC1 keys', function () { - var tmp = '033a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a' - assert.equal(ethUtils.importPublic(new Buffer(tmp, 'hex')).toString('hex'), pubKey) - }) -}) - -describe('publicToAddress', function () { - it('should produce an address given a public key', function () { - var pubKey = '3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - var address = '2f015c60e0be116b1f0cd534704db9c92118fb6a' - pubKey = new Buffer(pubKey, 'hex') - var r = ethUtils.publicToAddress(pubKey) - assert.equal(r.toString('hex'), address) - }) - it('should produce an address given a SEC1 public key', function () { - var pubKey = '043a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - var address = '2f015c60e0be116b1f0cd534704db9c92118fb6a' - pubKey = new Buffer(pubKey, 'hex') - var r = ethUtils.publicToAddress(pubKey, true) - assert.equal(r.toString('hex'), address) - }) - it('shouldn\'t produce an address given an invalid SEC1 public key', function () { - var pubKey = '023a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - pubKey = new Buffer(pubKey, 'hex') - assert.throws(function () { - ethUtils.publicToAddress(pubKey, true) - }) - }) - it('shouldn\'t produce an address given an invalid public key', function () { - var pubKey = '3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae744' - pubKey = new Buffer(pubKey, 'hex') - assert.throws(function () { - ethUtils.publicToAddress(pubKey) - }) - }) -}) - -describe('publicToAddress 0x', function () { - it('should produce an address given a public key', function () { - var pubKey = '0x3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - var address = '2f015c60e0be116b1f0cd534704db9c92118fb6a' - var r = ethUtils.publicToAddress(pubKey) - assert.equal(r.toString('hex'), address) - }) -}) - -describe('privateToPublic', function () { - it('should produce a public key given a private key', function () { - var pubKey = '3a443d8381a6798a70c6ff9304bdc8cb0163c23211d11628fae52ef9e0dca11a001cf066d56a8156fc201cd5df8a36ef694eecd258903fca7086c1fae7441e1d' - var privateKey = new Buffer([234, 84, 189, 197, 45, 22, 63, 136, 201, 58, 176, 97, 87, 130, 207, 113, 138, 46, 251, 158, 81, 167, 152, 154, 171, 27, 8, 6, 126, 156, 28, 95]) - var r = ethUtils.privateToPublic(privateKey).toString('hex') - assert.equal(r.toString('hex'), pubKey) - }) - it('shouldn\'t produce a public key given an invalid private key', function () { - var privateKey1 = new Buffer([234, 84, 189, 197, 45, 22, 63, 136, 201, 58, 176, 97, 87, 130, 207, 113, 138, 46, 251, 158, 81, 167, 152, 154, 171, 27, 8, 6, 126, 156, 28, 95, 42]) - var privateKey2 = new Buffer([234, 84, 189, 197, 45, 22, 63, 136, 201, 58, 176, 97, 87, 130, 207, 113, 138, 46, 251, 158, 81, 167, 152, 154, 171, 27, 8, 6, 126, 156, 28]) - assert.throws(function () { - ethUtils.privateToPublic(privateKey1) - }) - assert.throws(function () { - ethUtils.privateToPublic(privateKey2) - }) - }) -}) - -describe('privateToAddress', function () { - it('should produce an address given a private key', function () { - var address = '2f015c60e0be116b1f0cd534704db9c92118fb6a' - // Our private key - var privateKey = new Buffer([234, 84, 189, 197, 45, 22, 63, 136, 201, 58, 176, 97, 87, 130, 207, 113, 138, 46, 251, 158, 81, 167, 152, 154, 171, 27, 8, 6, 126, 156, 28, 95]) - var r = ethUtils.privateToAddress(privateKey).toString('hex') - assert.equal(r.toString('hex'), address) - }) -}) - -describe('generateAddress', function () { - it('should produce an address given a public key', function () { - var add = ethUtils.generateAddress('990ccf8a0de58091c028d6ff76bb235ee67c1c39', 14).toString('hex') - assert.equal(add.toString('hex'), '936a4295d8d74e310c0c95f0a63e53737b998d12') - }) -}) - -describe('generateAddress with hex prefix', function () { - it('should produce an address given a public key', function () { - var add = ethUtils.generateAddress('0x990ccf8a0de58091c028d6ff76bb235ee67c1c39', 14).toString('hex') - assert.equal(add.toString('hex'), 'd658a4b8247c14868f3c512fa5cbb6e458e4a989') - }) -}) - -describe('generateAddress with nonce 0 (special case)', function () { - it('should produce an address given a public key', function () { - var add = ethUtils.generateAddress('0x990ccf8a0de58091c028d6ff76bb235ee67c1c39', 0).toString('hex') - assert.equal(add.toString('hex'), 'bfa69ba91385206bfdd2d8b9c1a5d6c10097a85b') - }) -}) - -describe('hex prefix', function () { - var string = 'd658a4b8247c14868f3c512fa5cbb6e458e4a989' - it('should add', function () { - assert.equal(ethUtils.addHexPrefix(string), '0x' + string) - }) - it('should return on non-string input', function () { - assert.equal(ethUtils.addHexPrefix(1), 1) - }) -}) - -describe('isPrecompiled', function () { - it('should return true', function () { - assert.equal(ethUtils.isPrecompiled('0000000000000000000000000000000000000001'), true) - assert.equal(ethUtils.isPrecompiled('0000000000000000000000000000000000000002'), true) - assert.equal(ethUtils.isPrecompiled('0000000000000000000000000000000000000003'), true) - assert.equal(ethUtils.isPrecompiled('0000000000000000000000000000000000000004'), true) - }) - it('should return false', function () { - assert.equal(ethUtils.isPrecompiled('0000000000000000000000000000000000000000'), false) - assert.equal(ethUtils.isPrecompiled('0000000000000000000000000000000000000005'), false) - assert.equal(ethUtils.isPrecompiled('1000000000000000000000000000000000000000'), false) - }) -}) - -describe('toBuffer', function () { - it('should work', function () { - // Buffer - assert.deepEqual(ethUtils.toBuffer(new Buffer([])), new Buffer([])) - // Array - assert.deepEqual(ethUtils.toBuffer([]), new Buffer([])) - // String - assert.deepEqual(ethUtils.toBuffer('11'), new Buffer([49, 49])) - assert.deepEqual(ethUtils.toBuffer('0x11'), new Buffer([17])) - assert.deepEqual(ethUtils.toBuffer('1234').toString('hex'), '31323334') - assert.deepEqual(ethUtils.toBuffer('0x1234').toString('hex'), '1234') - // Number - assert.deepEqual(ethUtils.toBuffer(1), new Buffer([1])) - // null - assert.deepEqual(ethUtils.toBuffer(null), new Buffer([])) - // undefined - assert.deepEqual(ethUtils.toBuffer(), new Buffer([])) - // 'toArray' - assert.deepEqual(ethUtils.toBuffer(new BN(1)), new Buffer([1])) - }) - it('should fail', function () { - assert.throws(function () { - ethUtils.toBuffer({ test: 1 }) - }) - }) -}) - -describe('baToJSON', function () { - it('should turn a array of buffers into a pure json object', function () { - var ba = [new Buffer([0]), new Buffer([1]), [new Buffer([2])]] - assert.deepEqual(ethUtils.baToJSON(ba), ['0x00', '0x01', ['0x02']]) - }) - it('should turn a buffers into string', function () { - assert.deepEqual(ethUtils.baToJSON(new Buffer([0])), '0x00') - }) -}) - -var echash = new Buffer('82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28', 'hex') -var ecprivkey = new Buffer('3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1', 'hex') - -describe('ecsign', function () { - it('should produce a signature', function () { - var sig = ethUtils.ecsign(echash, ecprivkey) - assert.deepEqual(sig.r, new Buffer('99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9', 'hex')) - assert.deepEqual(sig.s, new Buffer('129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66', 'hex')) - assert.equal(sig.v, 27) - }) -}) - -describe('ecrecover', function () { - it('should recover a public key', function () { - var r = new Buffer('99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9', 'hex') - var s = new Buffer('129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66', 'hex') - var pubkey = ethUtils.ecrecover(echash, 27, r, s) - assert.deepEqual(pubkey, ethUtils.privateToPublic(ecprivkey)) - }) - it('should fail on an invalid signature (v = 21)', function () { - var r = new Buffer('99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9', 'hex') - var s = new Buffer('129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66', 'hex') - assert.throws(function () { - ethUtils.ecrecover(echash, 21, r, s) - }) - }) - it('should fail on an invalid signature (v = 29)', function () { - var r = new Buffer('99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9', 'hex') - var s = new Buffer('129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66', 'hex') - assert.throws(function () { - ethUtils.ecrecover(echash, 29, r, s) - }) - }) - it('should fail on an invalid signature (swapped points)', function () { - var r = new Buffer('99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9', 'hex') - var s = new Buffer('129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66', 'hex') - assert.throws(function () { - ethUtils.ecrecover(echash, 27, s, r) - }) - }) -}) - -var checksumAddresses = [ - // All caps - '0x52908400098527886E0F7030069857D2E4169EE7', - '0x8617E340B3D01FA5F11F306F4090FD50E238070D', - // All Lower - '0xde709f2102306220921060314715629080e2fb77', - '0x27b1fdb04752bbc536007a920d24acb045561c26', - // Normal - '0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed', - '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', - '0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB', - '0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb' -] - -describe('.toChecksumAddress()', function () { - it('should work', function () { - for (var i = 0; i < checksumAddresses.length; i++) { - var tmp = checksumAddresses[i] - assert.equal(ethUtils.toChecksumAddress(tmp.toLowerCase()), tmp) - } - }) -}) - -describe('.isValidChecksumAddress()', function () { - it('should return true', function () { - for (var i = 0; i < checksumAddresses.length; i++) { - assert.equal(ethUtils.isValidChecksumAddress(checksumAddresses[i]), true) - } - }) - it('should validate', function () { - assert.equal(ethUtils.isValidChecksumAddress('0x2f015c60e0be116b1f0cd534704db9c92118fb6a'), false) - }) -}) - -describe('.isValidAddress()', function () { - it('should return true', function () { - assert.equal(ethUtils.isValidAddress('0x2f015c60e0be116b1f0cd534704db9c92118fb6a'), true) - assert.equal(ethUtils.isValidAddress('0x52908400098527886E0F7030069857D2E4169EE7'), true) - }) - it('should return false', function () { - assert.equal(ethUtils.isValidAddress('2f015c60e0be116b1f0cd534704db9c92118fb6a'), false) - assert.equal(ethUtils.isValidAddress('0x2f015c60e0be116b1f0cd534704db9c92118fb6'), false) - assert.equal(ethUtils.isValidAddress('0x2f015c60e0be116b1f0cd534704db9c92118fb6aa'), false) - assert.equal(ethUtils.isValidAddress('x2f015c60e0be116b1f0cd534704db9c92118fb6a'), false) - }) -}) - -describe('message sig', function () { - const r = new Buffer('99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9', 'hex') - const s = new Buffer('129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66', 'hex') - - it('should return hex strings that the RPC can use', function () { - assert.equal(ethUtils.toRpcSig(27, r, s), '0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca6600') - assert.deepEqual(ethUtils.fromRpcSig('0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca6600'), { - v: 27, - r: r, - s: s - }) - }) -}) diff --git a/node_modules/ethereumjs-vm/.npmignore b/node_modules/ethereumjs-vm/.npmignore deleted file mode 100644 index 778a16a..0000000 --- a/node_modules/ethereumjs-vm/.npmignore +++ /dev/null @@ -1,65 +0,0 @@ -### App ### - -.cachedb - - -# Created by https://www.gitignore.io/api/osx,node - -### OSX ### -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -### Node ### -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git -node_modules - diff --git a/node_modules/ethereumjs-vm/.travis.yml b/node_modules/ethereumjs-vm/.travis.yml deleted file mode 100644 index 1b962ae..0000000 --- a/node_modules/ethereumjs-vm/.travis.yml +++ /dev/null @@ -1,36 +0,0 @@ -sudo: false -os: - - linux - -language: node_js -node_js: - - "0.11" - - "0.12" - - "4" - - "5" -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 - -env: - global: - - DISPLAY=:99.0 - matrix: - - CXX=g++-4.8 TEST_SUITE=testState - -matrix: - fast_finish: true - include: - - os: linux - node_js: "5" - env: CXX=g++-4.8 TEST_SUITE=testVM - - os: linux - node_js: "5" - env: CXX=g++-4.8 TEST_SUITE=testBlockchain - - os: linux - node_js: "5" - env: CXX=g++-4.8 TEST_SUITE=lint -script: npm run $TEST_SUITE diff --git a/node_modules/ethereumjs-vm/LICENSE b/node_modules/ethereumjs-vm/LICENSE deleted file mode 100644 index 14e2f77..0000000 --- a/node_modules/ethereumjs-vm/LICENSE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/node_modules/ethereumjs-vm/README.md b/node_modules/ethereumjs-vm/README.md deleted file mode 100644 index 90263ed..0000000 --- a/node_modules/ethereumjs-vm/README.md +++ /dev/null @@ -1,205 +0,0 @@ -# SYNOPSIS -[![NPM Package](https://img.shields.io/npm/v/ethereumjs-vm.svg?style=flat-square)](https://www.npmjs.org/package/ethereumjs-vm) -[![Build Status](https://img.shields.io/travis/ethereumjs/ethereumjs-vm.svg?branch=master&style=flat-square)](https://travis-ci.org/ethereumjs/ethereumjs-vm) -[![Gitter](https://img.shields.io/gitter/room/ethereum/ethereumjs-lib.svg?style=flat-square)](https://gitter.im/ethereum/ethereumjs-lib) or #ethereumjs on freenode - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -Implements Ethereum's VM in JS - -# INSTALL -`npm install ethereumjs-vm` - -# USAGE -```javascript -var VM = require('ethereumjs-vm') - -//create a new VM instance -var vm = new VM() -var code = '7f4e616d65526567000000000000000000000000000000000000000000000000003055307f4e616d6552656700000000000000000000000000000000000000000000000000557f436f6e666967000000000000000000000000000000000000000000000000000073661005d2720d855f1d9976f88bb10c1a3398c77f5573661005d2720d855f1d9976f88bb10c1a3398c77f7f436f6e6669670000000000000000000000000000000000000000000000000000553360455560df806100c56000396000f3007f726567697374657200000000000000000000000000000000000000000000000060003514156053576020355415603257005b335415603e5760003354555b6020353360006000a233602035556020353355005b60007f756e72656769737465720000000000000000000000000000000000000000000060003514156082575033545b1560995733335460006000a2600033545560003355005b60007f6b696c6c00000000000000000000000000000000000000000000000000000000600035141560cb575060455433145b1560d25733ff5b6000355460005260206000f3' -//code needs to be a buffer -code = new Buffer(code, 'hex') - -vm.runCode({ - code: code, - gasLimit: new Buffer('ffffffff', 'hex') -}, function(err, results){ - console.log('returned: ' + results.return.toString('hex')); -}) -``` -Also more examples can be found here -- [examples](./examples) -- [old blog post](https://wanderer.github.io/ethereum/nodejs/code/2014/08/12/running-contracts-with-vm/) - -# BROWSER -To build for standalone use in the browser install `browserify` and run `npm run build`. This will give you a global variable `EthVM` to use. The standalone file will be at `./dist/ethereumjs-vm.js` - -# API - - [`new VM([StateTrie], [blockchain], [opts])`](#new-vmstatetrie-blockchain) - - [`VM` methods](#vm-methods) - - [`vm.runBlockchain([blockchain], [cb])`](#vmrunblockchainblockchain-cb) - - [`vm.runBlock(opts, cb)`](#vmrunblockopts-cb) - - [`vm.runTx(opts, cb)`](#vmruntxopts-cb) - - [`vm.runCode(opts, cb)`](#vmruncodeopts-cb) - - [`vm.generateCanonicalGenesis(cb)`](#vmgeneratecanonicalgenesiscb) - - [`vm.generateGenesis(cb)`](#vmgenerategenesiscb) - - [`VM` debugging hooks](#vm-debugging-hooks) - - [`vm.onStep`](#vmonstep) - -### `new VM([StateTrie], [blockchain])` -Creates a new VM object -- `StateTrie` - The [Patricia Merkle Tree](https://github.com/wanderer/merkle-patricia-tree) that contains the state. If no trie is given the `VM` will create an in memory trie. -- `blockchain` - an instance of the [`Blockchain`](https://github.com/ethereum/ethereumjs-lib/blob/master/docs/blockchain.md) If no blockchain is given a fake blockchain will be used. -- `opts` - - `enableHomestead` - a boolean that overrides the homestead settings based on blocknumber - - `activatePrecompiles` - create entries in the state tree for the precompiled contracts - -### `VM` methods - - -#### `vm.runBlockchain(blockchain, cb)` -Process a transaction. -- `blockchain` - A [blockchain](https://github.com/ethereum/ethereumjs-blockchain) that to process -- `cb` - The callback. It is given an err parameter if it fails - --------------------------------------------------------- - -#### `vm.runBlock(opts, cb)` -Processes the `block` running all of the transactions it contains and updating the miner's account. -- `opts.block` - The [`Block`](./block.md) to process -- `opts.generate` - a `Boolean`; whether to generate the stateRoot. If false `runBlock` will check the stateRoot of the block against the Trie -- `cb` - The callback. It is given two arguments, an `error` string containing an error that may have happened or `null`, and a `results` object with the following properties: - - `receipts` - the receipts from the transactions in the block - - `results` - an Array for results from the transactions in the block --------------------------------------------------------- - - -#### `vm.runTx(opts, cb)` -Process a transaction. -- `opts.tx` - A [`Transaction`](https://github.com/ethereum/ethereumjs-tx) to run. -- `opts.block` - The block to which the `tx` belongs. If omitted a blank block will be used. -- `cb` - The callback. It is given two arguments, an `error` string containing an error that may have happened or `null`, and a `results` object with the following properties: - - `amountSpent` - the amount of ether used by this transaction as a `bignum` - - `gasUsed` - the amount of gas used by the transaction - - `vm` - contains the results from running the code, if any, as described in [`vm.runCode(params, cb)`](#vmruncodeopts-cb) - --------------------------------------------------------- - -#### `vm.runCode(opts, cb)` -Runs EVM code -- `opts.code` - The EVM code to run given as a `Buffer` -- `opts.data` - The input data given as a `Buffer` -- `opts.value` - The value in ether that is being sent to `opt.address`. Defaults to `0` -- `opts.block` - The [`Block`](./block.md) the `tx` belongs to. If omitted a blank block will be used. -- `opts.gasLimit` - The gas limit for the code given as a `Buffer` -- `opts.account` - The [`Account`](./account.md) that the executing code belongs to. If omitted an empty account will be used -- `opts.address` - The address of the account that is executing this code. The address should be a `Buffer` of bytes. Defaults to `0` -- `opts.origin` - The address where the call originated from. The address should be a `Buffer` of 20bits. Defaults to `0` -- `opts.caller` - The address that ran this code. The address should be a `Buffer` of 20bits. Defaults to `0` -- `cb` - The callback. It is given two arguments, an `error` string containing an error that may have happened or `null` and a `results` object with the following properties - - `gas` - the amount of gas left as a `bignum` - - `gasUsed` - the amount of gas as a `bignum` the code used to run. - - `gasRefund` - a `Bignum` containing the amount of gas to refund from deleting storage values - - `suicides` - an `Array` of accounts that have suicided. - - `suicideTo` - the account that the suicide refund should go to. - - `logs` - an `Array` of logs that the contract emitted. - - `exception` - `0` if the contract encountered an exception, `1` otherwise. - - `exceptionError` - a `String` describing the exception if there was one. - - `return` - a `Buffer` containing the value that was returned by the contract - - --------------------------------------------------------- - -#### `vm.stateManager.generateCanonicalGenesis(cb)` -Generates the Canonical genesis state. - --------------------------------------------------------- - -#### `vm.stateManager.generateGenesis(genesisData, cb)` -Generate the genesis state. -- `genesisData` - an `Object` whose keys are addresses and values are `string`s representing initial allocation of ether. -- `cb` - The callback - -```javascript -var genesisData = { - "51ba59315b3a95761d0863b05ccc7a7f54703d99": "1606938044258990275541962092341162602522202993782792835301376", - "e4157b34ea9615cfbde6b4fda419828124b70c78": "1606938044258990275541962092341162602522202993782792835301376" -} - -vm.generateGenesis(genesisData, function(){ - console.log('generation done'); -}) -``` - -### `events` -All events are instances of [async-eventemmiter](https://www.npmjs.com/package/async-eventemitter). If an event handler has an arity of 2 the VM will pause until the callback is called - -#### `step` -The `step` event is given an `Object` and callback. The `Object` has the following properties. -- `pc` - a `Number` representing the program counter -- `opcode` - the next opcode to be ran -- `gas` - a `bignum` standing for the amount of gasLeft -- `stack` - an `Array` of `Buffers` containing the stack. -- `storageTrie` - the storage [trie](https://github.com/wanderer/merkle-patricia-tree) for the account -- `account` - the [`Account`](https://github.com/ethereum/ethereumjs-account) which owns the code running. -- `address` - the address of the `account` -- `depth` - the current number of calls deep the contract is -- `memory` - the memory of the VM as a `buffer` -- `cache` - The account cache. Contains all the accounts loaded from the trie. It is an instance of [functional red black tree](https://www.npmjs.com/package/functional-red-black-tree) - -#### `beforeBlock` -Emits the block that is about to be processed. - -#### `afterBlock` -Emits the results of the processing a block. - -#### `beforeTx` -Emits the Transaction that I about to be processed. - -#### `afterTx` -Emits the result of the transaction. - -# TESTING -`npm test` -if you want to just run the Blockchain tests run -`./bin/tester -b` -if you want to just run the VM tests run -`./bin/tester -v` -if you want to just run the State tests run -`./bin/tester -s` - -# Internal Structure -The VM processes state changes at many levels. - -* runBlockchain - * for every block, runBlock -* runBlock - * for every tx, runTx - * pay miner and uncles -* runTx - * check sender balance - * check sender nonce - * runCall - * transfer gas charges -* runCall - * checkpoint state - * transfer value - * load code - * runCode - * materialize created contracts - * revert or commit checkpoint -* runCode - * iterate over code - * run op codes - * track gas usage -* OpFns - * run individual op code - * modify stack - * modify memory - * calculate fee - -The opFns for `CREATE`, `CALL`, and `CALLCODE` call back up to `runCall`. - - -# LICENSE -[MPL-2.0](https://www.mozilla.org/MPL/2.0/) diff --git a/node_modules/ethereumjs-vm/examples/fullExample.js b/node_modules/ethereumjs-vm/examples/fullExample.js deleted file mode 100644 index 48e586e..0000000 --- a/node_modules/ethereumjs-vm/examples/fullExample.js +++ /dev/null @@ -1,145 +0,0 @@ -// This will demonstrate running code contained within a transaction. -// First import the necessary libraries and initailize some varibles. -var async = require('async') -var VM = require('../index.js') -var Account = require('ethereumjs-account') -var Transaction = require('ethereumjs-tx') -var Trie = require('merkle-patricia-tree') -var rlp = require('rlp') -var utils = require('ethereumjs-util') - -// creating a trie that just resides in memory -var stateTrie = new Trie() - -// create a new VM instance -var vm = new VM(stateTrie) - -// the private/public key pair. used to sign the transactions and generate the addresses -var secretKey = '3cd7232cd6f3fc66a57a6bedc1a8ed6c228fff0a327e169c2bcc5e869ed49511' -var publicKey = '0406cc661590d48ee972944b35ad13ff03c7876eae3fd191e8a2f77311b0a3c6613407b5005e63d7d8d76b89d5f900cde691497688bb281e07a5052ff61edebdc0' -var createdAddress - -// This transaction contains the initializtion code for the name register -// NOTE: all strings are interpeted as hex -var rawTx = { - nonce: '0x00', - gasPrice: '0x09184e72a000', - gasLimit: '0x90710', - data: '0x60606040526103dd806100126000396000f360606040526000357c010000000000000000000000000000000000000000000000000000000090048063454a2ab31461004f578063b9a2de3a14610091578063edd481bb146100d35761004d565b005b6100656004808035906020019091905050610189565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100a760048080359060200190919050506102d2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100e960048080359060200190919050506100ff565b6040518082815260200191505060405180910390f35b600060016000818150548092919060010191905055905080508143016000600050600083815260200190815260200160002060005060000160005081905550336000600050600083815260200190815260200160002060005060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b919050565b60006000600060005060008481526020019081526020016000206000509050346012600a8360010160005054011811806101c95750438160000160005054115b1561022d573373ffffffffffffffffffffffffffffffffffffffff16600034604051809050600060405180830381858888f19350505050508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506102cc565b8060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008260010160005054604051809050600060405180830381858888f1935050505050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055503481600101600050819055503391506102cc565b50919050565b600060006000600050600084815260200190815260200160002060005090508060000160005054431015156103d6578060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008260010160005054604051809050600060405180830381858888f19350505050506000816001016000508190555060008160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055506000816000016000508190555060008160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b5b5091905056' -} - -// This transaction should register the sending address as "null_radix" - -var bidSig = '0x454a2ab3' -var time = '0000000000000000000000000000000000000000000000000000000000000045' - -var rawTx2 = { - nonce: '0x01', - gasPrice: '0x09184e72a000', - gasLimit: '0x20710', - value: '0x10', - to: '0x692a70d2e424a56d2c6c27aa97d1a86395877b3a', - data: bidSig + time -} - -// sets up the initial state and runs the callback when complete -function setup (cb) { - // the address we are sending from - var address = utils.pubToAddress(new Buffer(publicKey, 'hex')) - - // create a new account - var account = new Account() - - // give the account some wei. - // This needs to be a `Buffer` or a string. all strings need to be in hex. - account.balance = '0xf00000000000000001' - - // store in the trie - stateTrie.put(address, account.serialize(), cb) -} - -// runs a transaction through the vm -function runTx (raw, cb) { - // create a new transaction out of the json - var tx = new Transaction(raw) - - // tx.from - tx.sign(new Buffer(secretKey, 'hex')) - - console.log('----running tx-------') - // run the tx - vm.runTx({ - tx: tx - }, function (err, results) { - createdAddress = results.createdAddress - // log some results - console.log('gas used: ' + results.gasUsed.toString()) - console.log('returen: ' + results.vm.return.toString('hex')) - if (createdAddress) { - console.log('address created: ' + createdAddress.toString('hex')) - } - - cb(err) - }) -} - -// we will use this later -var storageRoot - -// Now lets look at what we created.The transaction should have created a new account -// for the contranct in the trie.Lets test to see -// if it did. -function checkResults (cb) { - // fetch the new account from the trie. - stateTrie.get(createdAddress, function (err, val) { - var account = new Account(val) - - // we will use this later! :) - storageRoot = account.stateRoot - - console.log('------results------') - console.log('nonce: ' + account.nonce.toString('hex')) - console.log('blance in wei: ' + account.balance.toString('hex')) - console.log('stateRoot: ' + storageRoot.toString('hex')) - console.log('codeHash:' + account.codeHash.toString('hex')) - console.log('-------------------') - cb(err) - }) -} - -// So if everything went right we should have "null_radix" stored at -// "0x9bdf9e2cc4dfa83de3c35da792cdf9b9e9fcfabd". To see this we need to print -// out the name register's storage trie. - -// reads and prints the storage of a contract -function readStorage (cb) { - // we need to create a copy of the state root - var storageTrie = stateTrie.copy() - - // Since we are using a copy we won't change the root of `stateTrie` - storageTrie.root = storageRoot - - var stream = storageTrie.createReadStream() - - console.log('------Storage------') - - // prints all of the keys and values in the storage trie - stream.on('data', function (data) { - console.log('key: ' + data.key.toString('hex')) - // remove the 'hex' if you want to see the ascii values - console.log('Value: ' + rlp.decode(data.value).toString()) - }) - - stream.on('end', cb) -} - -// run everything -async.series([ - setup, - async.apply(runTx, rawTx), - async.apply(runTx, rawTx2), - checkResults, - readStorage -]) -// Now when you run you should see a complete trace. `onStep` provodes an -// object that contians all the information on the current state of the `VM`. diff --git a/node_modules/ethereumjs-vm/examples/package.json b/node_modules/ethereumjs-vm/examples/package.json deleted file mode 100644 index 8419991..0000000 --- a/node_modules/ethereumjs-vm/examples/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "examples", - "version": "0.0.0", - "dependencies": { - "ethereumjs-block": "0.0.4", - "ethereumjs-tx": "^0.5.3" - } -} diff --git a/node_modules/ethereumjs-vm/examples/runcode-browserify.html b/node_modules/ethereumjs-vm/examples/runcode-browserify.html deleted file mode 100644 index 9b75b33..0000000 --- a/node_modules/ethereumjs-vm/examples/runcode-browserify.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/node_modules/ethereumjs-vm/examples/runcode-browserify.js b/node_modules/ethereumjs-vm/examples/runcode-browserify.js deleted file mode 100644 index 114e0f3..0000000 --- a/node_modules/ethereumjs-vm/examples/runcode-browserify.js +++ /dev/null @@ -1,45896 +0,0 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 3 - var bitLoc = 1 << loc % 8 - this.bitvector[byteSize - byteLoc - 1] |= bitLoc - } -} - -/** - * checks if an element is in the blooom - * @method check - * @param {Buffer} element - */ -Bloom.prototype.check = function (e) { - e = utils.sha3(e) - var mask = 511 // binary 111111111 - var match = true - - for (var i = 0; i < 3 && match; i++) { - var first2bytes = e.readUInt16BE(i * 2) - var loc = mask & first2bytes - var byteLoc = loc >> 3 - var bitLoc = 1 << loc % 8 - match = (this.bitvector[byteSize - byteLoc - 1] & bitLoc) - } - - return Boolean(match) -} - -/** - * checks if multple topics are in a bloom - * @method check - * @param {Buffer} element - */ -Bloom.prototype.multiCheck = function (topics) { - var self = this - var match = true - topics.forEach(function (t) { - if (!Buffer.isBuffer(t)) { - t = new Buffer(t, 'hex') - } - - match && self.check(t) - }) - - return match -} - -/** - * bitwise or blooms together - * @method or - * @param {Bloom} bloom - */ -Bloom.prototype.or = function (bloom) { - if (bloom) { - for (var i = 0; i <= byteSize; i++) { - this.bitvector[i] = this.bitvector[i] | bloom.bitvector[i] - } - } -} - -}).call(this,require("buffer").Buffer) -},{"assert":128,"buffer":130,"ethereumjs-util":65}],4:[function(require,module,exports){ -(function (Buffer){ -const Tree = require('functional-red-black-tree') -const Account = require('ethereumjs-account') -const async = require('async') - -var Cache = module.exports = function (trie) { - this._cache = Tree() - this._checkpoints = [] - this._deletes = [] - this._trie = trie -} - -Cache.prototype.put = function (key, val, fromTrie) { - var modified = !fromTrie - key = key.toString('hex') - var it = this._cache.find(key) - if (it.node) { - this._cache = it.update({ - val: val, - modified: modified - }) - } else { - this._cache = this._cache.insert(key, { - val: val, - modified: modified - }) - } -} - -// returns the queried account or an empty account -Cache.prototype.get = function (key) { - var account = this.lookup(key) - return account || new Account() -} - -// returns the queried account or undefined -Cache.prototype.lookup = function (key) { - key = key.toString('hex') - - var it = this._cache.find(key) - if (it.node) { - return new Account(it.value.val) - } -} - -Cache.prototype.getOrLoad = function (key, cb) { - var self = this - - var account = this.lookup(key) - key = key.toString('hex') - - if (account) { - var raw = account && account.isEmpty() ? null : account.raw - cb(null, account, raw) - } else { - this._trie.get(new Buffer(key, 'hex'), function (err, raw) { - var account = new Account(raw) - self._cache = self._cache.insert(key, { - val: account, - modified: false - }) - cb(err, account, raw) - }) - } -} - -Cache.prototype.flush = function (cb) { - var it = this._cache.begin - var self = this - var next = true - - async.whilst(function () { - return next - }, function (done) { - if (it.value.modified) { - it.value.modified = false - it.value.val = it.value.val.serialize() - - self._trie.put(new Buffer(it.key, 'hex'), it.value.val, function () { - next = it.hasNext - it.next() - done() - }) - } else { - next = it.hasNext - it.next() - done() - } - }, function () { - async.eachSeries(self._deletes, function (address, done) { - self._trie.del(address, done) - }, function () { - self._deletes = [] - cb() - }) - }) -} - -Cache.prototype.checkpoint = function () { - this._checkpoints.push(this._cache) -} - -Cache.prototype.revert = function () { - this._cache = this._checkpoints.pop(this._cache) -} - -Cache.prototype.commit = function () { - this._checkpoints.pop() -} - -Cache.prototype.clear = function () { - this._deletes = [] - this._cache = Tree() -} - -Cache.prototype.del = function (key) { - this._deletes.push(key) - key = key.toString('hex') - this._cache = this._cache.remove(key) -} - -}).call(this,require("buffer").Buffer) -},{"async":29,"buffer":130,"ethereumjs-account":58,"functional-red-black-tree":66}],5:[function(require,module,exports){ -exports.ERROR = { - OUT_OF_GAS: 'out of gas', - STACK_UNDERFLOW: 'stack underflow', - INVALID_JUMP: 'invalid JUMP', - INVALID_OPCODE: 'invalid opcode' -} - -},{}],6:[function(require,module,exports){ -(function (Buffer){ -var utils = require('ethereumjs-util') - -module.exports = { - getBlock: function (n, cb) { - var hash = utils.sha3(new Buffer(utils.bufferToInt(n).toString())) - - var block = { - hash: function () { - return hash - } - } - - cb(null, block) - } -} - -}).call(this,require("buffer").Buffer) -},{"buffer":130,"ethereumjs-util":65}],7:[function(require,module,exports){ -require('es6-shim') -const util = require('util') -const async = require('async') -const BN = require('bn.js') -const common = require('ethereum-common') -const StateManager = require('./stateManager.js') -var AsyncEventEmitter = require('async-eventemitter') - -// require the percomiled contracts -const num01 = require('./precompiled/01-ecrecover.js') -const num02 = require('./precompiled/02-sha256.js') -const num03 = require('./precompiled/03-repemd160.js') -const num04 = require('./precompiled/04-identity.js') - -module.exports = VM - -VM.deps = { - ethUtil: require('ethereumjs-util'), - Account: require('ethereumjs-account'), - Trie: require('merkle-patricia-tree'), - rlp: require('rlp') -} - -/** - * @constructor - */ -function VM (trie, blockchain) { - this.stateManager = new StateManager({ - trie: trie, - blockchain: blockchain - }) - - // temporary - // this is here for a gradual transition to StateManager - this.blockchain = this.stateManager.blockchain - this.trie = this.stateManager.trie - - // precompiled contracts - this._precomiled = {} - this._precomiled['0000000000000000000000000000000000000001'] = num01 - this._precomiled['0000000000000000000000000000000000000002'] = num02 - this._precomiled['0000000000000000000000000000000000000003'] = num03 - this._precomiled['0000000000000000000000000000000000000004'] = num04 - - AsyncEventEmitter.call(this) -} - -util.inherits(VM, AsyncEventEmitter) - -VM.prototype.runCode = require('./runCode.js') -VM.prototype.runJIT = require('./runJit.js') -VM.prototype.runBlock = require('./runBlock.js') -VM.prototype.runTx = require('./runTx.js') -VM.prototype.runCall = require('./runCall.js') -VM.prototype.runBlockchain = require('./runBlockchain.js') - -VM.prototype.copy = function () { - var trie = this.trie.copy() - return new VM(trie, this.blockchain) -} - -/** - * Loads precomiled contracts into the state - */ -VM.prototype.loadCompiled = function (address, src, cb) { - this.trie.db.put(address, src, cb) -} - -VM.prototype.populateCache = function (addresses, cb) { - this.stateManager.warmCache(addresses, cb) -} - -// VM.prototype.createTraceStream = function () { -// var rs = new Readable({ -// objectMode: true -// }) -// var step = 0 -// var next - -// rs._read = function () { -// if (next) { -// next() -// } -// } - -// this.onStep = function (info, done) { -// var logObj = { -// step: step, -// pc: new BN(info.pc).toString(), -// depth: info.depth, -// opcode: info.opcode, -// gas: info.gasLeft.toString(), -// memory: (new Buffer(info.memory)).toString('hex'), -// storage: [], -// address: info.address.toString('hex') -// } - -// step++ - -// logObj.stack = info.stack.map(function (item) { -// return ethUtil.pad(item, 32).toString('hex') -// }) - -// var stream = info.storageTrie.createReadStream() - -// stream.on('data', function(data) { -// logObj.storage.push([ethUtil.unpad(data.key).toString('hex'), rlp.decode(data.value).toString('hex')]) -// }) - -// stream.on('end', function() { -// var notFull = rs.push(logObj) -// if (notFull) { -// done() -// } else { -// next = done -// } -// }) -// done() -// } - -// return rs -// } - -},{"./precompiled/01-ecrecover.js":11,"./precompiled/02-sha256.js":12,"./precompiled/03-repemd160.js":13,"./precompiled/04-identity.js":14,"./runBlock.js":15,"./runBlockchain.js":16,"./runCall.js":17,"./runCode.js":18,"./runJit.js":19,"./runTx.js":20,"./stateManager.js":21,"async":29,"async-eventemitter":26,"bn.js":30,"es6-shim":55,"ethereum-common":56,"ethereumjs-account":58,"ethereumjs-util":65,"merkle-patricia-tree":103,"rlp":121,"util":296}],8:[function(require,module,exports){ -const BN = require('bn.js') -const pow32 = new BN('010000000000000000000000000000000000000000000000000000000000000000', 16) -const pow31 = new BN('0100000000000000000000000000000000000000000000000000000000000000', 16) -const pow30 = new BN('01000000000000000000000000000000000000000000000000000000000000', 16) -const pow29 = new BN('010000000000000000000000000000000000000000000000000000000000', 16) -const pow28 = new BN('0100000000000000000000000000000000000000000000000000000000', 16) -const pow27 = new BN('01000000000000000000000000000000000000000000000000000000', 16) -const pow26 = new BN('010000000000000000000000000000000000000000000000000000', 16) -const pow25 = new BN('0100000000000000000000000000000000000000000000000000', 16) -const pow24 = new BN('01000000000000000000000000000000000000000000000000', 16) -const pow23 = new BN('010000000000000000000000000000000000000000000000', 16) -const pow22 = new BN('0100000000000000000000000000000000000000000000', 16) -const pow21 = new BN('01000000000000000000000000000000000000000000', 16) -const pow20 = new BN('010000000000000000000000000000000000000000', 16) -const pow19 = new BN('0100000000000000000000000000000000000000', 16) -const pow18 = new BN('01000000000000000000000000000000000000', 16) -const pow17 = new BN('010000000000000000000000000000000000', 16) -const pow16 = new BN('0100000000000000000000000000000000', 16) -const pow15 = new BN('01000000000000000000000000000000', 16) -const pow14 = new BN('010000000000000000000000000000', 16) -const pow13 = new BN('0100000000000000000000000000', 16) -const pow12 = new BN('01000000000000000000000000', 16) -const pow11 = new BN('010000000000000000000000', 16) -const pow10 = new BN('0100000000000000000000', 16) -const pow9 = new BN('01000000000000000000', 16) -const pow8 = new BN('010000000000000000', 16) -const pow7 = new BN('0100000000000000', 16) -const pow6 = new BN('01000000000000', 16) -const pow5 = new BN('010000000000', 16) -const pow4 = new BN('0100000000', 16) -const pow3 = new BN('01000000', 16) -const pow2 = new BN('010000', 16) -const pow1 = new BN('0100', 16) - -module.exports = function (a) { - if (a.cmp(pow1) === -1) { - return 0 - } else if (a.cmp(pow2) === -1) { - return 1 - } else if (a.cmp(pow3) === -1) { - return 2 - } else if (a.cmp(pow4) === -1) { - return 3 - } else if (a.cmp(pow5) === -1) { - return 4 - } else if (a.cmp(pow6) === -1) { - return 5 - } else if (a.cmp(pow7) === -1) { - return 6 - } else if (a.cmp(pow8) === -1) { - return 7 - } else if (a.cmp(pow9) === -1) { - return 8 - } else if (a.cmp(pow10) === -1) { - return 9 - } else if (a.cmp(pow11) === -1) { - return 10 - } else if (a.cmp(pow12) === -1) { - return 11 - } else if (a.cmp(pow13) === -1) { - return 12 - } else if (a.cmp(pow14) === -1) { - return 13 - } else if (a.cmp(pow15) === -1) { - return 14 - } else if (a.cmp(pow16) === -1) { - return 15 - } else if (a.cmp(pow17) === -1) { - return 16 - } else if (a.cmp(pow18) === -1) { - return 17 - } else if (a.cmp(pow19) === -1) { - return 18 - } else if (a.cmp(pow20) === -1) { - return 19 - } else if (a.cmp(pow21) === -1) { - return 20 - } else if (a.cmp(pow22) === -1) { - return 21 - } else if (a.cmp(pow23) === -1) { - return 22 - } else if (a.cmp(pow24) === -1) { - return 23 - } else if (a.cmp(pow25) === -1) { - return 24 - } else if (a.cmp(pow26) === -1) { - return 25 - } else if (a.cmp(pow27) === -1) { - return 26 - } else if (a.cmp(pow28) === -1) { - return 27 - } else if (a.cmp(pow29) === -1) { - return 28 - } else if (a.cmp(pow30) === -1) { - return 29 - } else if (a.cmp(pow31) === -1) { - return 30 - } else if (a.cmp(pow32) === -1) { - return 31 - } else { - return 32 - } -} - -},{"bn.js":30}],9:[function(require,module,exports){ -(function (Buffer){ -const async = require('async') -const fees = require('ethereum-common') -const utils = require('ethereumjs-util') -const BN = utils.BN -const rlp = utils.rlp -const constants = require('./constants.js') -const logTable = require('./logTable.js') -const ERROR = constants.ERROR -const MAX_INT = 9007199254740991 - -// the opcode functions -module.exports = { - STOP: function (runState) { - runState.stopped = true - }, - ADD: function (a, b, runState) { - return new Buffer( - new BN(a) - .add(new BN(b)) - .mod(utils.TWO_POW256) - .toArray()) - }, - MUL: function (a, b, runState) { - return new Buffer( - new BN(a) - .mul(new BN(b)).mod(utils.TWO_POW256) - .toArray() - ) - }, - SUB: function (a, b, runState) { - return utils.toUnsigned( - new BN(a) - .sub(new BN(b)) - ) - }, - DIV: function (a, b, runState) { - a = new BN(a) - b = new BN(b) - var r - if (b.toString() === '0') { - r = [0] - } else { - r = a.div(b).toArray() - } - return new Buffer(r) - }, - SDIV: function (a, b, runState) { - a = utils.fromSigned(a) - b = utils.fromSigned(b) - - var r - if (b.toString() === '0') { - r = new Buffer([0]) - } else { - r = utils.toUnsigned(a.div(b)) - } - - return r - }, - MOD: function (a, b, runState) { - a = new BN(a) - b = new BN(b) - var r - - if (b.toString() === '0') { - r = [0] - } else { - r = a.mod(b).toArray() - } - - return new Buffer(r) - }, - SMOD: function (a, b, runState) { - a = utils.fromSigned(a) - b = utils.fromSigned(b) - var r - - if (b.toString() === '0') { - r = new Buffer([0]) - } else { - r = a.abs().mod(b.abs()) - if (a.sign) { - r = r.neg() - } - - r = utils.toUnsigned(r) - } - return r - }, - ADDMOD: function (a, b, c, runState) { - a = new BN(a).add(new BN(b)) - c = new BN(c) - var r - - if (c.toString() === '0') { - r = [0] - } else { - r = a.mod(c).toArray() - } - - return new Buffer(r) - }, - MULMOD: function (a, b, c, runState) { - a = new BN(a).mul(new BN(b)) - c = new BN(c) - var r - - if (c.toString() === '0') { - r = [0] - } else { - r = a.mod(c).toArray() - } - - return new Buffer(r) - }, - EXP: function (base, exponent, runState) { - base = new BN(base) - exponent = new BN(exponent) - var m = BN.red(utils.TWO_POW256) - var result - - base = base.toRed(m) - - if (exponent.cmpn(0) !== 0) { - var bytes = 1 + logTable(exponent) - subGas(runState, new BN(bytes).muln(fees.expByteGas.v)) - result = new Buffer(base.redPow(exponent).toArray()) - } else { - result = new Buffer([1]) - } - - return result - }, - SIGNEXTEND: function (k, runState) { - k = new BN(k) - var extendOnes = false - - if (k.cmpn(31) <= 0) { - var val = new Buffer(32) - utils.pad(runState.stack.pop(), 32).copy(val) - - if (val[31 - k] & 0x80) { - extendOnes = true - } - - // 31-k-1 since k-th byte shouldn't be modified - for (var i = 30 - k; i >= 0; i--) { - val[i] = extendOnes ? 0xff : 0 - } - - return val - } - }, - // 0x10 range - bit ops - LT: function (a, b, runState) { - return new Buffer([ - new BN(a) - .cmp(new BN(b)) === -1 - ]) - }, - GT: function (a, b, runState) { - return new Buffer([ - new BN(a) - .cmp(new BN(b)) === 1 - ]) - }, - SLT: function (a, b, runState) { - runState.stack.push( - new Buffer([ - utils.fromSigned(a) - .cmp(utils.fromSigned(b)) === -1 - ]) - ) - }, - SGT: function (a, b, runState) { - return new Buffer([ - utils.fromSigned(a) - .cmp(utils.fromSigned(b)) === 1 - ]) - }, - EQ: function (a, b, runState) { - a = utils.unpad(a) - b = utils.unpad(b) - return new Buffer([a.toString('hex') === b.toString('hex')]) - }, - ISZERO: function (a, runState) { - a = utils.bufferToInt(a) - return new Buffer([!a]) - }, - AND: function (a, b, runState) { - return new Buffer(( - new BN(a) - .and( - new BN(b) - ) - ) - .toArray()) - }, - OR: function (a, b, runState) { - return new Buffer(( - new BN(a) - .or( - new BN(b) - ) - ) - .toArray()) - }, - XOR: function (a, b, runState) { - return new Buffer(( - new BN(a) - .xor( - new BN(b) - ) - ) - .toArray()) - }, - NOT: function (a, runState) { - return new Buffer(utils.TWO_POW256.subn(1).sub(new BN(a)) - .toArray()) - }, - BYTE: function (pos, word, runState) { - pos = utils.bufferToInt(pos) - word = utils.pad(word, 32) - var byte - - if (pos < 32) { - byte = utils.intToBuffer(word[pos]) - } else { - byte = new Buffer([0]) - } - - return byte - }, - // 0x20 range - crypto - SHA3: function (offset, length, runState) { - offset = utils.bufferToInt(offset) - length = utils.bufferToInt(length) - var data = memLoad(runState, offset, length) - // copy fee - subGas(runState, new BN(fees.sha3WordGas.v * Math.ceil(length / 32))) - return utils.sha3(data) - }, - // 0x30 range - closure state - ADDRESS: function (runState) { - return runState.address - }, - BALANCE: function (address, runState, cb) { - var stateManager = runState.stateManager - address = address.slice(-20) - - // shortcut if current account - if (address.toString('hex') === runState.address.toString('hex')) { - cb(null, runState.contract.balance) - return - } - - // otherwise load account then return balance - stateManager.getAccountBalance(address, cb) - }, - ORIGIN: function (runState) { - return runState.origin - }, - CALLER: function (runState) { - return runState.caller - }, - CALLVALUE: function (runState) { - return new Buffer(runState.callValue.toArray()) - }, - CALLDATALOAD: function (pos, runState) { - pos = utils.bufferToInt(pos) - var loaded = runState.callData.slice(pos, pos + 32) - - loaded = loaded.length ? loaded : new Buffer([0]) - - // pad end - if (loaded.length < 32) { - var dif = 32 - loaded.length - var pad = new Buffer(dif) - pad.fill(0) - loaded = Buffer.concat([loaded, pad], 32) - } - - return loaded - }, - CALLDATASIZE: function (runState) { - if (runState.callData.length === 1 && runState.callData[0] === 0) { - return new Buffer([0]) - } else { - return utils.intToBuffer(runState.callData.length) - } - }, - CALLDATACOPY: function (memOffset, dataOffsetBuf, dataLength, runState) { - memOffset = utils.bufferToInt(memOffset) - dataLength = utils.bufferToInt(dataLength) - var dataOffset = utils.bufferToInt(dataOffsetBuf) - - memStore(runState, memOffset, runState.callData, dataOffset, dataLength) - // sub the COPY fee - subGas(runState, new BN(Number(fees.copyGas.v) * Math.ceil(dataLength / 32))) - }, - CODESIZE: function (runState) { - return utils.intToBuffer(runState.code.length) - }, - CODECOPY: function (memOffset, codeOffset, length, runState) { - memOffset = utils.bufferToInt(memOffset) - codeOffset = utils.bufferToInt(codeOffset) - length = utils.bufferToInt(length) - - memStore(runState, memOffset, runState.code, codeOffset, length) - // sub the COPY fee - subGas(runState, new BN(fees.copyGas.v * Math.ceil(length / 32))) - }, - EXTCODESIZE: function (address, runState, cb) { - var stateManager = runState.stateManager - address = address.slice(-20) - stateManager.getContractCode(address, function (err, code) { - cb(err, utils.intToBuffer(code.length)) - }) - }, - EXTCODECOPY: function (address, memOffset, codeOffset, length, runState, cb) { - var stateManager = runState.stateManager - address = address.slice(-20) - memOffset = utils.bufferToInt(memOffset) - codeOffset = utils.bufferToInt(codeOffset) - length = utils.bufferToInt(length) - subMemUsage(runState, memOffset, length) - - // copy fee - var fee = new BN(Number(fees.copyGas.v) * Math.ceil(length / 32)) - subGas(runState, fee) - - stateManager.getContractCode(address, function (err, code) { - code = err ? new Buffer([0]) : code - memStore(runState, memOffset, code, codeOffset, length, false) - cb(err) - }) - }, - GASPRICE: function (runState) { - runState.stack.push(runState.gasPrice) - }, - // '0x40' range - block operations - BLOCKHASH: function (number, runState, cb) { - var stateManager = runState.stateManager - number = utils.bufferToInt(number) - var diff = utils.bufferToInt(runState.block.header.number) - utils.bufferToInt(number) - - // block lookups must be within the past 256 blocks - if (diff > 256 || diff <= 0) { - cb(null, new Buffer([0])) - return - } - - stateManager.getBlockHash(number, function (err, blockHash) { - if (err) { - // if we are at a low block height and request a blockhash before the genesis block - cb(null, new Buffer([0])) - } else { - cb(null, blockHash) - } - }) - }, - COINBASE: function (runState) { - return runState.block.header.coinbase - }, - TIMESTAMP: function (runState) { - return runState.block.header.timestamp - }, - NUMBER: function (runState) { - return runState.block.header.number - }, - DIFFICULTY: function (runState) { - return runState.block.header.difficulty - }, - GASLIMIT: function (runState) { - return runState.block.header.gasLimit - }, - // 0x50 range - 'storage' and execution - POP: function () {}, - MLOAD: function (pos, runState) { - pos = utils.bufferToInt(pos) - var loaded = utils.unpad(memLoad(runState, pos, 32)) - return loaded - }, - MSTORE: function (offset, word, runState) { - offset = utils.bufferToInt(offset) - word = utils.pad(word, 32) - memStore(runState, offset, word, 0, 32) - }, - MSTORE8: function (offset, byte, runState) { - offset = utils.bufferToInt(offset) - // grab the last byte - byte = byte.slice(byte.length - 1) - memStore(runState, offset, byte, 0, 1) - }, - SLOAD: function (key, runState, cb) { - var stateManager = runState.stateManager - key = utils.pad(key, 32) - - stateManager.getContractStorage(runState.address, key, function (err, value) { - var loaded = rlp.decode(value) - loaded = loaded.length ? loaded : new Buffer([0]) - cb(err, loaded) - }) - }, - SSTORE: function (key, val, runState, cb) { - var stateManager = runState.stateManager - var address = runState.address - key = utils.pad(key, 32) - var value = utils.unpad(val) - - // format input - if (value.length === 0) { - // deleting a value - // set empty buffer to empty string - value = '' - } else { - value = rlp.encode(value) - } - - stateManager.getContractStorage(runState.address, key, function (err, found) { - try { - if (value === '' && !found) { - subGas(runState, new BN(fees.sstoreResetGas.v)) - } else if (value === '' && found) { - subGas(runState, new BN(fees.sstoreResetGas.v)) - runState.gasRefund.iadd(new BN(fees.sstoreRefundGas.v)) - } else if (value !== '' && !found) { - subGas(runState, new BN(fees.sstoreSetGas.v)) - } else if (value !== '' && found) { - subGas(runState, new BN(fees.sstoreResetGas.v)) - } - } catch (e) { - cb(e.error) - return - } - - stateManager.putContractStorage(address, key, value, function () { - runState.contract = stateManager.cache.get(address) - cb(err) - }) - }) - }, - JUMP: function (dest, runState) { - dest = utils.bufferToInt(dest) - - if (!jumpIsValid(runState, dest)) { - trap(ERROR.INVALID_JUMP) - } - - runState.programCounter = dest - }, - JUMPI: function (c, i, runState) { - c = utils.bufferToInt(c) - i = utils.bufferToInt(i) - - var dest = i ? c : runState.programCounter - - if (i && !jumpIsValid(runState, dest)) { - trap(ERROR.INVALID_JUMP) - } - - runState.programCounter = dest - }, - PC: function (runState) { - return utils.intToBuffer(runState.programCounter - 1) - }, - MSIZE: function (runState) { - return utils.intToBuffer(runState.memoryWordCount * 32) - }, - GAS: function (runState) { - return new Buffer(runState.gasLeft.toArray()) - }, - JUMPDEST: function (runState) {}, - PUSH: function (runState) { - var numToPush = runState.opCode - 0x5f - var loaded = utils.unpad(runState.code.slice(runState.programCounter, runState.programCounter + numToPush)) - runState.programCounter += numToPush - return loaded - }, - DUP: function (runState) { - const stackPos = runState.opCode - 0x7f - - if (stackPos > runState.stack.length) { - trap(ERROR.STACK_UNDERFLOW) - } - - // dupilcated stack items point to the same Buffer - return runState.stack[runState.stack.length - stackPos] - }, - SWAP: function (runState) { - var stackPos = runState.opCode - 0x8f - - // check the stack to make sure we have enough items on teh stack - var swapIndex = runState.stack.length - stackPos - 1 - if (swapIndex < 0) { - trap(ERROR.STACK_UNDERFLOW) - } - - // preform the swap - var newTop = runState.stack[swapIndex] - runState.stack[swapIndex] = runState.stack.pop() - return newTop - }, - LOG: function (memOffset, memLength) { - var args = Array.prototype.slice.call(arguments, 0) - args.pop() // pop off callback - var runState = args.pop() - var topics = args.slice(2) - topics = topics.map(function (a) { - return utils.pad(a, 32) - }) - - memOffset = utils.bufferToInt(memOffset) - memLength = utils.bufferToInt(memLength) - const numOfTopics = runState.opCode - 0xa0 - const mem = memLoad(runState, memOffset, memLength) - subGas(runState, new BN(numOfTopics * fees.logTopicGas.v + memLength * fees.logDataGas.v)) - - // add address - var log = [runState.address] - log.push(topics) - - // add data - log.push(mem) - runState.logs.push(log) - }, - - // '0xf0' range - closures - CREATE: function (value, offset, length, runState, done) { - value = new BN(value) - offset = utils.bufferToInt(offset) - length = utils.bufferToInt(length) - // set up config - var options = { - value: value - } - var localOpts = { - inOffset: offset, - inLength: length - } - - checkCallMemCost(runState, options, localOpts) - makeCall(runState, options, localOpts, done) - }, - CALL: function (gasLimit, toAddress, value, inOffset, inLength, outOffset, outLength, runState, done) { - var stateManager = runState.stateManager - gasLimit = new BN(gasLimit) - toAddress = utils.pad(toAddress, 20) - value = new BN(value) - inOffset = utils.bufferToInt(inOffset) - inLength = utils.bufferToInt(inLength) - outOffset = utils.bufferToInt(outOffset) - outLength = utils.bufferToInt(outLength) - var data = memLoad(runState, inOffset, inLength) - var options = { - gasLimit: gasLimit, - value: value, - to: toAddress, - data: data - } - var localOpts = { - inOffset: inOffset, - inLength: inLength, - outOffset: outOffset, - outLength: outLength - } - - // add stipend - if (value.cmpn(0) !== 0) { - runState.gasLeft.iadd(new BN(fees.callStipend.v)) - subGas(runState, new BN(fees.callValueTransferGas.v)) - options.gasLimit.iadd(new BN(fees.callStipend.v)) - } - - checkCallMemCost(runState, options, localOpts) - - stateManager.getAccount(toAddress, function (err, account, exists) { - if (err) { - done(err) - return - } - if (!exists) { - // can't wrap because we are in a callback - runState.gasLeft.isub(new BN(fees.callNewAccountGas.v)) - } - makeCall(runState, options, localOpts, done) - }) - }, - CALLCODE: function (gas, toAddress, value, inOffset, inLength, outOffset, outLength, runState, done) { - var stateManager = runState.stateManager - gas = new BN(gas) - toAddress = utils.pad(toAddress, 20) - value = new BN(value) - inOffset = utils.bufferToInt(inOffset) - inLength = utils.bufferToInt(inLength) - outOffset = utils.bufferToInt(outOffset) - outLength = utils.bufferToInt(outLength) - - const options = { - gasLimit: gas, - value: value, - to: runState.address - } - - const localOpts = { - inOffset: inOffset, - inLength: inLength, - outOffset: outOffset, - outLength: outLength - } - - // add stipend - if (value.cmpn(0) !== 0) { - runState.gasLeft.isub(new BN(fees.callValueTransferGas.v)).iadd(new BN(fees.callStipend.v)) - options.gasLimit.iadd(new BN(fees.callStipend.v)) - } - - checkCallMemCost(runState, options, localOpts) - - // load the code - stateManager.getAccount(toAddress, function (err, account) { - if (err) return done(err) - if (account.isPrecompiled(toAddress)) { - options.compiled = true - options.code = runState._precomiled[toAddress.toString('hex')] - makeCall(runState, options, localOpts, done) - } else { - stateManager.getContractCode(toAddress, function (err, code, compiled) { - if (err) return done(err) - options.code = code - options.compiled = compiled - makeCall(runState, options, localOpts, done) - }) - } - }) - }, - RETURN: function (offset, length, runState) { - offset = utils.bufferToInt(offset) - length = utils.bufferToInt(length) - runState.returnValue = memLoad(runState, offset, length) - }, - // '0x70', range - other - SUICIDE: function (suicideToAddress, runState, cb) { - var stateManager = runState.stateManager - var contract = runState.contract - var contractAddress = runState.address - suicideToAddress = utils.pad(suicideToAddress, 20) - - // only add to refund if this is the first suicide for the address - if (!runState.suicides[contractAddress.toString('hex')]) { - runState.gasRefund = runState.gasRefund.add(new BN(fees.suicideRefundGas.v)) - } - - runState.suicideTo = suicideToAddress - runState.suicides[contractAddress.toString('hex')] = suicideToAddress - runState.stopped = true - - stateManager.getAccount(suicideToAddress, function (err, toAccount) { - // update balances - if (err) { - cb(err) - return - } - var newBalance = new Buffer(new BN(contract.balance).add(new BN(toAccount.balance)).toArray()) - async.series([ - stateManager.putAccountBalance.bind(stateManager, suicideToAddress, newBalance), - stateManager.putAccountBalance.bind(stateManager, contractAddress, new BN(0)) - ], cb) - }) - } -} - -function subGas (runState, amount) { - runState.gasLeft.isub(amount) - if (runState.gasLeft.cmpn(0) === -1) { - trap(ERROR.OUT_OF_GAS) - } -} - -function trap (err) { - function VmError (error) { - this.error = error - } - throw new VmError(err) -} - -/** - * Subtracts the amount needed for memory usage from `runState.gasLeft` - * @method subMemUsage - * @param {Number} offset - * @param {Number} length - * @return {String} - */ -function subMemUsage (runState, offset, length) { - // abort if no usage - if (!length) return - - // hacky: if the dataOffset is larger than the largest safeInt then just - // load 0's because if tx.data did have that amount of data then the fee - // would be high than the maxGasLimit in the block - if (offset > MAX_INT || length > MAX_INT) { - trap(ERROR.OUT_OF_GAS) - } - - var newMemoryWordCount = Math.ceil((offset + length) / 32) - runState.memoryWordCount = Math.max(newMemoryWordCount, runState.memoryWordCount) - var words = new BN(newMemoryWordCount) - var fee = new BN(fees.memoryGas.v) - var quadCoeff = new BN(fees.quadCoeffDiv.v) - var cost = words.mul(fee).add(words.mul(words).div(quadCoeff)) - - if (cost.cmp(runState.highestMemCost) === 1) { - subGas(runState, cost.sub(runState.highestMemCost)) - runState.highestMemCost = cost - } -} - -/** - * Loads bytes from memory and returns them as a buffer. If an error occurs - * a string is instead returned. The function also subtracts the amount of - * gas need for memory expansion. - * @method memLoad - * @param {Number} offset where to start reading from - * @param {Number} length how far to read - * @return {Buffer|String} - */ -function memLoad (runState, offset, length) { - // check to see if we have enougth gas for the mem read - subMemUsage(runState, offset, length) - var loaded = runState.memory.slice(offset, offset + length) - // fill the remaining lenth with zeros - for (var i = loaded.length; i < length; i++) { - loaded.push(0) - } - return new Buffer(loaded) -} - -/** - * Stores bytes to memory. If an error occurs a string is instead returned. - * The function also subtracts the amount of gas need for memory expansion. - * @method memStore - * @param {Number} offset where to start reading from - * @param {Number} length how far to read - * @return {Buffer|String} - */ -function memStore (runState, offset, val, valOffset, length, skipSubMem) { - if (skipSubMem !== false) { - subMemUsage(runState, offset, length) - } - - for (var i = 0; i < length; i++) { - runState.memory[offset + i] = val[valOffset + i] - } -} - -// checks if a jump is valid given a destination -function jumpIsValid (runState, dest) { - return runState.validJumps.indexOf(dest) !== -1 -} - -// checks to see if we have enough gas left for the memory reads and writes -// required by the CALLs -function checkCallMemCost (runState, callOptions, localOpts) { - // calculates the gase need for reading the input from memory - callOptions.data = memLoad(runState, localOpts.inOffset, localOpts.inLength) - - // calculates the gas need for saving the output in memory - if (localOpts.outLength) { - subMemUsage(runState, localOpts.outOffset, localOpts.outLength) - } - - if (!callOptions.gasLimit) { - callOptions.gasLimit = runState.gasLeft - } - - if (runState.gasLeft.cmp(callOptions.gasLimit) === -1) { - trap(ERROR.OUT_OF_GAS) - } -} - -// sets up and calls runCall -function makeCall (runState, callOptions, localOpts, cb) { - callOptions.caller = runState.address - callOptions.origin = runState.origin - callOptions.gasPrice = runState.gasPrice - callOptions.block = runState.block - callOptions.populateCache = false - callOptions.suicides = runState.suicides - - // increment the runState.depth - callOptions.depth = runState.depth + 1 - - // check if account has enough ether - if (runState.depth >= fees.stackLimit.v || new BN(runState.contract.balance).cmp(callOptions.value) === -1) { - runState.stack.push(new Buffer([0])) - cb() - } else { - // if creating a new contract then increament the nonce - if (!callOptions.to) { - runState.contract.nonce = new BN(runState.contract.nonce).addn(1) - } - - runState.stateManager.cache.put(runState.address, runState.contract) - runState._vm.runCall(callOptions, parseCallResults) - } - - function parseCallResults (err, results) { - // concat the runState.logs - if (results.vm.logs) { - runState.logs = runState.logs.concat(results.vm.logs) - } - - // add gasRefund - if (results.vm.gasRefund) { - runState.gasRefund = runState.gasRefund.add(results.vm.gasRefund) - } - - // this should always be safe - runState.gasLeft.isub(results.gasUsed) - - if (!results.vm.exceptionError) { - // save results to memory - if (results.vm.return) { - for (var i = 0; i < Math.min(localOpts.outLength, results.vm.return.length); i++) { - runState.memory[localOpts.outOffset + i] = results.vm.return[i] - } - } - - // update stateRoot on current contract - runState.stateManager.getAccount(runState.address, function (err, account) { - runState.contract = account - // push the created address to the stack - if (results.createdAddress) { - cb(err, results.createdAddress) - } else { - cb(err, new Buffer([results.vm.exception])) - } - }) - } else { - // creation failed so don't increament the nonce - if (results.vm.createdAddress) { - runState.contract.nonce = new BN(runState.contract.nonce).sub(new BN(1)) - } - - cb(err, new Buffer([results.vm.exception])) - } - } -} - -}).call(this,require("buffer").Buffer) -},{"./constants.js":5,"./logTable.js":8,"async":29,"buffer":130,"ethereum-common":56,"ethereumjs-util":65}],10:[function(require,module,exports){ -const codes = { - // 0x0 range - arithmetic ops - // name, baseCost, off stack, on stack, dynamic - 0x00: ['STOP', 0, 0, 0, false], - 0x01: ['ADD', 3, 2, 1, false], - 0x02: ['MUL', 5, 2, 1, false], - 0x03: ['SUB', 3, 2, 1, false], - 0x04: ['DIV', 5, 2, 1, false], - 0x05: ['SDIV', 5, 2, 1, false], - 0x06: ['MOD', 5, 2, 1, false], - 0x07: ['SMOD', 5, 2, 1, false], - 0x08: ['ADDMOD', 8, 3, 1, false], - 0x09: ['MULMOD', 8, 3, 1, false], - 0x0a: ['EXP', 10, 2, 1, false], - 0x0b: ['SIGNEXTEND', 5, 1, 1, false], - - // 0x10 range - bit ops - 0x10: ['LT', 3, 2, 1, false], - 0x11: ['GT', 3, 2, 1, false], - 0x12: ['SLT', 3, 2, 1, false], - 0x13: ['SGT', 3, 2, 1, false], - 0x14: ['EQ', 3, 2, 1, false], - 0x15: ['ISZERO', 3, 1, 1, false], - 0x16: ['AND', 3, 2, 1, false], - 0x17: ['OR', 3, 2, 1, false], - 0x18: ['XOR', 3, 2, 1, false], - 0x19: ['NOT', 3, 1, 1, false], - 0x1a: ['BYTE', 3, 2, 1, false], - - // 0x20 range - crypto - 0x20: ['SHA3', 30, 2, 1, false], - - // 0x30 range - closure state - 0x30: ['ADDRESS', 2, 0, 1, true], - 0x31: ['BALANCE', 20, 1, 1, true], - 0x32: ['ORIGIN', 2, 0, 1, true], - 0x33: ['CALLER', 2, 0, 1, true], - 0x34: ['CALLVALUE', 2, 0, 1, true], - 0x35: ['CALLDATALOAD', 3, 1, 1, true], - 0x36: ['CALLDATASIZE', 2, 0, 1, true], - 0x37: ['CALLDATACOPY', 3, 3, 0, true], - 0x38: ['CODESIZE', 2, 0, 1, false], - 0x39: ['CODECOPY', 3, 3, 0, false], - 0x3a: ['GASPRICE', 2, 0, 1, false], - 0x3b: ['EXTCODESIZE', 20, 1, 1, true], - 0x3c: ['EXTCODECOPY', 20, 4, 0, true], - - // '0x40' range - block operations - 0x40: ['BLOCKHASH', 20, 1, 1, true], - 0x41: ['COINBASE', 2, 0, 1, true], - 0x42: ['TIMESTAMP', 2, 0, 1, true], - 0x43: ['NUMBER', 2, 0, 1, true], - 0x44: ['DIFFICULTY', 2, 0, 1, true], - 0x45: ['GASLIMIT', 2, 0, 1, true], - - // 0x50 range - 'storage' and execution - 0x50: ['POP', 2, 1, 0, false], - 0x51: ['MLOAD', 3, 1, 1, false], - 0x52: ['MSTORE', 3, 2, 0, false], - 0x53: ['MSTORE8', 3, 2, 0, false], - 0x54: ['SLOAD', 50, 1, 1, true], - 0x55: ['SSTORE', 0, 2, 0, true], - 0x56: ['JUMP', 8, 1, 0, false], - 0x57: ['JUMPI', 10, 2, 0, false], - 0x58: ['PC', 2, 0, 1, false], - 0x59: ['MSIZE', 2, 0, 1, false], - 0x5a: ['GAS', 2, 0, 1, false], - 0x5b: ['JUMPDEST', 1, 0, 0, false], - - // 0x60, range - 0x60: ['PUSH', 3, 0, 1, false], - 0x61: ['PUSH', 3, 0, 1, false], - 0x62: ['PUSH', 3, 0, 1, false], - 0x63: ['PUSH', 3, 0, 1, false], - 0x64: ['PUSH', 3, 0, 1, false], - 0x65: ['PUSH', 3, 0, 1, false], - 0x66: ['PUSH', 3, 0, 1, false], - 0x67: ['PUSH', 3, 0, 1, false], - 0x68: ['PUSH', 3, 0, 1, false], - 0x69: ['PUSH', 3, 0, 1, false], - 0x6a: ['PUSH', 3, 0, 1, false], - 0x6b: ['PUSH', 3, 0, 1, false], - 0x6c: ['PUSH', 3, 0, 1, false], - 0x6d: ['PUSH', 3, 0, 1, false], - 0x6e: ['PUSH', 3, 0, 1, false], - 0x6f: ['PUSH', 3, 0, 1, false], - 0x70: ['PUSH', 3, 0, 1, false], - 0x71: ['PUSH', 3, 0, 1, false], - 0x72: ['PUSH', 3, 0, 1, false], - 0x73: ['PUSH', 3, 0, 1, false], - 0x74: ['PUSH', 3, 0, 1, false], - 0x75: ['PUSH', 3, 0, 1, false], - 0x76: ['PUSH', 3, 0, 1, false], - 0x77: ['PUSH', 3, 0, 1, false], - 0x78: ['PUSH', 3, 0, 1, false], - 0x79: ['PUSH', 3, 0, 1, false], - 0x7a: ['PUSH', 3, 0, 1, false], - 0x7b: ['PUSH', 3, 0, 1, false], - 0x7c: ['PUSH', 3, 0, 1, false], - 0x7d: ['PUSH', 3, 0, 1, false], - 0x7e: ['PUSH', 3, 0, 1, false], - 0x7f: ['PUSH', 3, 0, 1, false], - - 0x80: ['DUP', 3, 0, 1, false], - 0x81: ['DUP', 3, 0, 1, false], - 0x82: ['DUP', 3, 0, 1, false], - 0x83: ['DUP', 3, 0, 1, false], - 0x84: ['DUP', 3, 0, 1, false], - 0x85: ['DUP', 3, 0, 1, false], - 0x86: ['DUP', 3, 0, 1, false], - 0x87: ['DUP', 3, 0, 1, false], - 0x88: ['DUP', 3, 0, 1, false], - 0x89: ['DUP', 3, 0, 1, false], - 0x8a: ['DUP', 3, 0, 1, false], - 0x8b: ['DUP', 3, 0, 1, false], - 0x8c: ['DUP', 3, 0, 1, false], - 0x8d: ['DUP', 3, 0, 1, false], - 0x8e: ['DUP', 3, 0, 1, false], - 0x8f: ['DUP', 3, 0, 1, false], - - 0x90: ['SWAP', 3, 0, 0, false], - 0x91: ['SWAP', 3, 0, 0, false], - 0x92: ['SWAP', 3, 0, 0, false], - 0x93: ['SWAP', 3, 0, 0, false], - 0x94: ['SWAP', 3, 0, 0, false], - 0x95: ['SWAP', 3, 0, 0, false], - 0x96: ['SWAP', 3, 0, 0, false], - 0x97: ['SWAP', 3, 0, 0, false], - 0x98: ['SWAP', 3, 0, 0, false], - 0x99: ['SWAP', 3, 0, 0, false], - 0x9a: ['SWAP', 3, 0, 0, false], - 0x9b: ['SWAP', 3, 0, 0, false], - 0x9c: ['SWAP', 3, 0, 0, false], - 0x9d: ['SWAP', 3, 0, 0, false], - 0x9e: ['SWAP', 3, 0, 0, false], - 0x9f: ['SWAP', 3, 0, 0, false], - - 0xa0: ['LOG', 375, 2, 0, false], - 0xa1: ['LOG', 375, 3, 0, false], - 0xa2: ['LOG', 375, 4, 0, false], - 0xa3: ['LOG', 375, 5, 0, false], - 0xa4: ['LOG', 375, 6, 0, false], - - // '0xf0' range - closures - 0xf0: ['CREATE', 32000, 3, 1, true], - 0xf1: ['CALL', 40, 7, 1, true], - 0xf2: ['CALLCODE', 40, 7, 1, true], - 0xf3: ['RETURN', 0, 2, 0, false], - - // '0x70', range - other - 0xff: ['SUICIDE', 0, 1, 0, false] -} - -module.exports = function (op, full) { - var code = codes[op] ? codes[op] : ['INVALID', 0] - var opcode = code[0] - - if (full) { - if (opcode === 'LOG') { - opcode += op - 0xa0 - } - - if (opcode === 'PUSH') { - opcode += op - 0x5f - } - - if (opcode === 'DUP') { - opcode += op - 0x7f - } - - if (opcode === 'SWAP') { - opcode += op - 0x8f - } - } - - return {name: opcode, fee: code[1], in: code[2], out: code[3], dynamic: code[4], async: code[5]} -} - -},{}],11:[function(require,module,exports){ -(function (Buffer){ -const utils = require('ethereumjs-util') -const BN = require('bn.js') -const fees = require('ethereum-common') -const ecdsa = require('secp256k1') -const gasCost = new BN(fees.ecrecoverGas.v) - -module.exports = function (opts) { - /** - * ecrecover - * @param {Buffer} msgHash [description] - * @param {Buffer} v [description] - * @param {Buffer} r [description] - * @param {Buffer} s [description] - * @return {Buffer} public key otherwise null - */ - function ecrecover(msgHash, v, r, s) { - var sig = Buffer.concat([utils.pad(r, 32), utils.pad(s, 32)], 64) - var recid = utils.bufferToInt(v) - 27 - var senderPubKey - try{ - senderPubKey = ecdsa.recover(msgHash, { - signature: sig, - recovery: recid - }, false) - }catch(e){} - - if (senderPubKey && senderPubKey.toString('hex') !== '') { - return senderPubKey - } else { - return null - } - } - - var results = {} - - if (opts.gasLimit.cmp(gasCost) === -1) { - results.gasUsed = opts.gasLimit - results.exception = 0 // 0 means VM fail (in this case because of OOG) - results.exceptionError = 'out of gas' - return results - } - - results.gasUsed = gasCost - - buf = new Buffer(128) - buf.fill(0) - data = Buffer.concat([opts.data, buf]) - - msgHash = data.slice(0, 32) - v = data.slice(32, 64) - r = data.slice(64, 96) - s = data.slice(96, 128) - - publicKey = ecrecover(msgHash, v, r, s) - - if (!publicKey) - return results - - results.return = utils.pad(utils.pubToAddress(publicKey), 32) - return results -} - -}).call(this,require("buffer").Buffer) -},{"bn.js":30,"buffer":130,"ethereum-common":56,"ethereumjs-util":65,"secp256k1":122}],12:[function(require,module,exports){ -(function (Buffer){ -const crypto = require('crypto') -const BN = require('bn.js') -const error = require('../constants.js').ERROR -const fees = require('ethereum-common') - -module.exports = function (opts) { - var sha256 = crypto.createHash('SHA256') - var data = opts.data - var results = {} - var gasCost = fees.sha256Gas.v - - results.gasUsed = gasCost - var dataGas = Math.ceil(data.length / 32) * fees.sha256WordGas.v - results.gasUsed += dataGas - results.gasUsed = new BN(results.gasUsed) - - if (opts.gasLimit.cmp(new BN(gasCost + dataGas)) === -1) { - results.gasUsed = opts.gasLimit - results.exceptionError = error.OUT_OF_GAS - results.exception = 0 // 0 means VM fail (in this case because of OOG) - return results - } - - hashStr = sha256.update(data).digest('hex') - results.return = new Buffer(hashStr, 'hex') - results.exception = 1; - - return results; -} - -}).call(this,require("buffer").Buffer) -},{"../constants.js":5,"bn.js":30,"buffer":130,"crypto":134,"ethereum-common":56}],13:[function(require,module,exports){ -(function (Buffer){ -const ethUtil = require('ethereumjs-util') -const crypto = require('crypto') -const BN = require('bn.js') -const error = require('../constants.js').ERROR -const fees = require('ethereum-common') - -module.exports = function(opts){ - var results = {} - var ripemd160 = crypto.createHash('RSA-RIPEMD160') - var data = opts.data - var gasCost = fees.ripemd160Gas.v - - if (opts.gasLimit.cmp(new BN(gasCost)) === -1) { - results.gasUsed = opts.gasLimit - results.exception = 0 // 0 means VM fail (in this case because of OOG) - results.exceptionError = error.OUT_OF_GAS - return results - } - - results.gasUsed = gasCost - - var dataGas2 = Math.ceil(opts.data.length / 32) * fees.ripemd160WordGas.v - // console.log('data: ' + data.toString('hex')) - - if (opts.gasLimit.cmp(new BN(gasCost + dataGas2)) === -1) { - results.gasUsed = opts.gasLimit - results.exceptionError = error.OUT_OF_GAS - results.exception = 0 // 0 means VM fail (in this case because of OOG) - return results - } - - results.gasUsed += dataGas2 - results.gasUsed = new BN(results.gasUsed) - - hashStr = ethUtil.pad(ripemd160.update(data).digest('bin'), 32) // nb: bin - - results.exception = 1 - results['return'] = new Buffer(hashStr, 'hex') - - return results -} - -}).call(this,require("buffer").Buffer) -},{"../constants.js":5,"bn.js":30,"buffer":130,"crypto":134,"ethereum-common":56,"ethereumjs-util":65}],14:[function(require,module,exports){ -const BN = require('bn.js') -const fees = require('ethereum-common') -const error = require('../constants.js').ERROR - -module.exports = function(opts){ - var data = opts.data - var results = {} - - results.gasUsed = new BN(Math.ceil(data.length / 32) * fees.identityWordGas.v + fees.identityGas.v) - results.exception = 1 - results.return = opts.data - - if (opts.gasLimit.cmp(new BN(results.gasUsed)) === -1) { - results.gasUsed = opts.gasLimit - results.exceptionError = error.OUT_OF_GAS - results.exception = 0 // 0 means VM fail (in this case because of OOG) - return results - } - - return results -} - -},{"../constants.js":5,"bn.js":30,"ethereum-common":56}],15:[function(require,module,exports){ -(function (Buffer){ -const async = require('async') -const ethUtil = require('ethereumjs-util') -const Bloom = require('./bloom.js') -const common = require('ethereum-common') -const rlp = ethUtil.rlp -const Trie = require('merkle-patricia-tree') -const BN = ethUtil.BN - -const minerReward = new BN(common.minerReward.v) -const niblingReward = new BN(common.niblingReward.v) -const ommerReward = new BN(common.ommerReward.v) - -/** - * process the transaction in a block and pays the miners - * @param opts - * @param opts.block {Block} the block we are processing - * @param opts.blockchain {Blockchain} the current blockchain - * @param opts.generate {Boolean} [gen=false] whether to generate the stateRoot - * @param cb {Function} the callback which is given an error string - */ -module.exports = function (opts, cb) { - const self = this - - // parse options - const block = opts.block - const blockchain = opts.blockchain - const generateStateRoot = !!opts.generate - const validateStateRoot = !generateStateRoot - const bloom = new Bloom() - const receiptTrie = new Trie() - // the total amount of gas used processing this block - var gasUsed = new BN(0) - // miner account - var minerAccount - var receipts = [] - var txResults = [] - var result - - if (opts.root) { - self.stateManager.trie.root = opts.root - } - - this.trie.checkpoint() - - // run everything - async.series([ - beforeBlock, - populateCache, - processTransactions - ], parseBlockResults) - - function beforeBlock (cb) { - self.emit('beforeBlock', opts.block, cb) - } - - function afterBlock (cb) { - self.emit('afterBlock', result, cb) - } - - // populates the cache with accounts that we know we will need - function populateCache (cb) { - var accounts = new Set() - accounts.add(block.header.coinbase.toString('hex')) - block.transactions.forEach(function (tx) { - accounts.add(tx.getSenderAddress().toString('hex')) - accounts.add(tx.to.toString('hex')) - }) - - block.uncleHeaders.forEach(function (uh) { - accounts.add(uh.coinbase.toString('hex')) - }) - - self.populateCache(accounts, cb) - } - - /** - * Processes all of the transaction in the block - * @method processTransaction - * @param {Function} cb the callback is given error if there are any - */ - function processTransactions (cb) { - var validReceiptCount = 0 - - async.eachSeries(block.transactions, processTx, cb) - - function processTx (tx, cb) { - var gasLimitIsHigherThanBlock = new BN(block.header.gasLimit).cmp(new BN(tx.gasLimit).add(gasUsed)) === -1 - if (gasLimitIsHigherThanBlock) { - cb('tx has a higher gas limit than the block') - return - } - - // run the tx through the VM - self.runTx({ - tx: tx, - block: block, - blockchain: blockchain, - populateCache: false - }, parseTxResult) - - function parseTxResult (err, result) { - txResults.push(result) - - // abort if error - if (err) { - receipts.push(null) - cb(err) - return - } - - gasUsed = gasUsed.add(result.gasUsed) - // combine blooms via bitwise OR - bloom.or(result.bloom) - - if (generateStateRoot) { - block.header.bloom = bloom.bitvector - } - - var txLogs = result.vm.logs || [] - var rawTxReceipt = [ - self.trie.root, - new Buffer(gasUsed.toArray()), - result.bloom.bitvector, - txLogs - ] - var txReceipt = { - stateRoot: rawTxReceipt[0], - gasUsed: rawTxReceipt[1], - bitvector: rawTxReceipt[2], - logs: rawTxReceipt[3] - } - - receipts.push(txReceipt) - receiptTrie.put(rlp.encode(validReceiptCount), rlp.encode(rawTxReceipt)) - validReceiptCount++ - cb() - } - } - } - - // handle results or error from block run - function parseBlockResults (err) { - if (err) { - self.trie.revert() - cb(err) - return - } - - // credit all block rewards - payOmmersAndMiner() - - // credit all block rewards - if (generateStateRoot) { - block.header.stateRoot = self.trie.root - } - - self.trie.commit(function (err) { - self.stateManager.cache.flush(function () { - if (validateStateRoot) { - if (receiptTrie.root && receiptTrie.root.toString('hex') !== block.header.receiptTrie.toString('hex')) { - err = (err || '') + 'invalid receiptTrie ' - } - if (bloom.bitvector.toString('hex') !== block.header.bloom.toString('hex')) { - err = (err || '') + 'invalid bloom ' - } - if (ethUtil.bufferToInt(block.header.gasUsed) !== Number(gasUsed)) { - err = (err || '') + 'invalid gasUsed ' - } - if (self.trie.root.toString('hex') !== block.header.stateRoot.toString('hex')) { - err = (err || '') + 'invalid block stateRoot ' - } - } - - self.stateManager.cache.clear() - - result = { - receipts: receipts, - results: txResults, - error: err - } - - afterBlock(cb.bind(this, err, result)) - }) - }) - } - - // credit all block rewards - function payOmmersAndMiner () { - var ommers = block.uncleHeaders - // pay each ommer - ommers.forEach(rewardOmmer) - // calculate nibling reward - var totalNiblingReward = niblingReward.mul(new BN(ommers.length)) - minerAccount = self.stateManager.cache.get(block.header.coinbase) - // give miner the block reward - minerAccount.balance = new BN(minerAccount.balance) - .add(minerReward) - .add(totalNiblingReward) - self.stateManager.cache.put(block.header.coinbase, minerAccount) - } - - // credit ommer - function rewardOmmer (ommer) { - // calculate reward - var heightDiff = new BN(block.header.number).sub(new BN(ommer.number)) - var reward = minerReward.sub(ommerReward.mul(heightDiff)) - // credit miners account - var ommerAccount = self.stateManager.cache.get(ommer.coinbase) - ommerAccount.balance = reward.add(new BN(ommerAccount.balance)) - self.stateManager.cache.put(ommer.coinbase, ommerAccount) - } -} - -}).call(this,require("buffer").Buffer) -},{"./bloom.js":3,"async":29,"buffer":130,"ethereum-common":56,"ethereumjs-util":65,"merkle-patricia-tree":103}],16:[function(require,module,exports){ -const async = require('async') - -/** - * processes blocks and adds them to the blockchain - * @method onBlock - * @param blockchain - */ -module.exports = function (blockchain, cb) { - var self = this - var headBlock, parentState - - // parse arguments - if (typeof blockchain === 'function') { - cb = blockchain - } else if (blockchain) { - self.blockchain = blockchain - } - - // setup blockchain iterator - this.stateManager.blockchain.iterator('vm', processBlock, cb) - - function processBlock (block, reorg, cb) { - async.series([ - getStartingState, - runBlock - ], cb) - - // determine starting state for block run - function getStartingState (cb) { - // if we are just starting or if a chain re-org has happened - if (!headBlock || reorg) { - self.stateManager.blockchain.getBlock(block.header.parentHash, function (err, parentBlock) { - parentState = parentBlock.header.stateRoot - // generate genesis state if we are at the genesis block - // we don't have the genesis state - if (!headBlock) { - self.stateManager.trie.checkRoot(parentState, function (err, root) { - if (!root || err) { - return self.stateManager.generateCanonicalGenesis(cb) - } - }) - } - cb(err) - }) - } else { - parentState = headBlock.header.stateRoot - cb() - } - } - - // run block, update head if valid - function runBlock (cb) { - self.runBlock({ - block: block, - root: parentState - }, function (err, results) { - if (err) { - // remove invalid block - self.stateManager.blockchain.delBlock(block, cb) - } else { - // set as new head block - headBlock = block - cb() - } - }) - } - } -} - -},{"async":29}],17:[function(require,module,exports){ -(function (Buffer){ -const async = require('async') -const ethUtil = require('ethereumjs-util') -const BN = ethUtil.BN -const fees = require('ethereum-common') -const Account = require('ethereumjs-account') - -/** - * runs a CALL operation - * @method runCall - * @param opts - * @param opts.block {Block} - * @param opts.caller {Buffer} - * @param opts.code {Buffer} this is for CALLCODE where the code to load is different than the code from the to account. - * @param opts.data {Buffer} - * @param opts.gasLimit {Bignum} - * @param opts.gasPrice {Bignum} - * @param opts.origin {Buffer} [] - * @param opts.to {Buffer} - * @param opts.value {Bignum} - */ -module.exports = function (opts, cb) { - var self = this - var stateManager = self.stateManager - - var vmResults = {} - var toAccount - var toAddress = opts.to - var createdAddress - var txValue = opts.value || new BN(0) - var caller = opts.caller - var account = stateManager.cache.get(caller) - var block = opts.block - var code = opts.code - var txData = opts.data - var gasLimit = opts.gasLimit - var gasPrice = opts.gasPrice - var gasUsed = new BN(0) - var origin = opts.origin - var isCompiled = opts.compiled - var depth = opts.depth - var suicides = opts.suicides - - stateManager.checkpoint() - - // run and parse - subTxValue() - loadToAccount() - addTxValue() - - async.series([ - loadCode, - runCode, - saveCode - ], parseCallResult) - - function loadToAccount () { - // get receiver's account - if (!toAddress) { - // generate a new contract if no `to` - code = txData - txData = undefined - var newNonce = new BN(account.nonce).subn(1) - createdAddress = toAddress = ethUtil.generateAddress(caller, newNonce.toArray()) - toAccount = new Account() - } else { - // else load the `to` account - toAccount = stateManager.cache.get(toAddress) - } - } - - function subTxValue () { - account.balance = new BN(account.balance).sub(txValue) - stateManager.cache.put(caller, account) - } - - function addTxValue () { - // add the amount sent to the `to` account - toAccount.balance = new BN(toAccount.balance).add(txValue) - stateManager.cache.put(toAddress, toAccount) - } - - function loadCode (cb) { - // loads the contract's code if the account is a contract - if (code || !toAccount.isContract(toAddress)) { - cb() - return - } - - if (Account.isPrecompiled(toAddress)) { - isCompiled = true - code = self._precomiled[toAddress.toString('hex')] - cb() - return - } - - stateManager.getContractCode(toAddress, function (err, c, comp) { - if (err) return cb(err) - isCompiled = comp - code = c - cb() - }) - } - - function runCode (cb) { - if (!code) { - vmResults.exception = 1 - stateManager.commit(cb) - return - } - - var runCodeOpts = { - code: code, - data: txData, - gasLimit: gasLimit, - gasPrice: gasPrice, - address: toAddress, - origin: origin, - caller: caller, - value: txValue, - block: block, - depth: depth, - suicides: suicides, - populateCache: false - } - - // run Code through vm - var codeRunner = isCompiled ? self.runJIT : self.runCode - codeRunner.call(self, runCodeOpts, parseRunResult) - - function parseRunResult (err, results) { - toAccount = self.stateManager.cache.get(toAddress) - vmResults = results - - if (createdAddress) { - // fee for size of the return value - var returnFee = results.return.length * fees.createDataGas.v - var totalGas = results.gasUsed.addn(returnFee) - // if not enough gas - if (totalGas.cmp(gasLimit) <= 0) { - results.gasUsed = totalGas - } else { - results.return = new Buffer([]) - } - } - - gasUsed = results.gasUsed - if (err) { - stateManager.revert(cb) - } else { - stateManager.commit(cb) - } - } - } - - function saveCode (cb) { - // store code for a new contract - if (createdAddress && vmResults.return.toString() !== '') { - stateManager.putContractCode(createdAddress, vmResults.return, cb) - } else { - cb() - } - } - - function parseCallResult (err) { - if (err) return cb(err) - var results = { - gasUsed: gasUsed, - createdAddress: createdAddress, - vm: vmResults - } - - cb(null, results) - } -} - -}).call(this,require("buffer").Buffer) -},{"async":29,"buffer":130,"ethereum-common":56,"ethereumjs-account":58,"ethereumjs-util":65}],18:[function(require,module,exports){ -(function (Buffer){ -/* - -This is the core of the Ethereum Virtual Machine (EVM or just VM). - -NOTES: - -stack items are lazly dupilicated. -So you must never directly change a buffer from the stack, -instead you should `copy` it first - -not all stack items are 32 bytes, so if the operation realies on the stack -item length then you must use utils.pad(, 32) first. - -*/ - -const async = require('async') -const utils = require('ethereumjs-util') -const Block = require('ethereumjs-block') -const lookupOpInfo = require('./opcodes.js') -const opFns = require('./opFns.js') -const constants = require('./constants.js') -const setImmediate = require('timers').setImmediate -const BN = utils.BN - -const ERROR = constants.ERROR - -/** - * Runs EVM code - * @param opts - * @param opts.account {Account} the account that the exucuting code belongs to - * @param opts.address {Buffer} the address of the account that is exucuting this code - * @param opts.block {Block} the block that the transaction is part of - * @param opts.caller {Buffer} the address that ran this code - * @param opts.code {Buffer} the code to be run - * @param opts.data {Buffer} the input data - * @param opts.gasLimit {Buffer} - * @param opts.origin {Buffer} the address where the call originated from - * @param opts.value {Buffer} the amount the being transfered - * @param cb {Function} - */ -module.exports = function (opts, cb) { - var self = this - var stateManager = self.stateManager - - // VM internal state - var runState = { - stateManager: stateManager, - returnValue: false, - stopped: false, - vmError: false, - suicideTo: undefined, - programCounter: 0, - opCode: undefined, - opName: undefined, - gasLeft: new BN(opts.gasLimit), - gasLimit: new BN(opts.gasLimit), - gasPrice: opts.gasPrice, - memory: [], - memoryWordCount: 0, - stack: [], - logs: [], - validJumps: [], - gasRefund: new BN(0), - highestMemCost: new BN(0), - depth: opts.depth || 0, - suicides: opts.suicides || {}, - block: opts.block || new Block(), - callValue: opts.value || new Buffer([0]), - address: opts.address || utils.zeros(32), - caller: opts.caller || utils.zeros(32), - origin: opts.origin || opts.caller || utils.zeros(32), - callData: opts.data || new Buffer([0]), - code: opts.code, - populateCache: opts.populateCache === undefined ? true : opts.populateCache - } - - // temporary - to be factored out - runState._precomiled = self._precomiled - runState._vm = self - - // prepare to run vm - preprocessValidJumps(runState) - // load contract then start vm run - loadContract(runVm) - - // iterate through the given ops until something breaks or we hit STOP - function runVm () { - async.whilst(vmIsActive, iterateVm, parseVmResults) - } - - // ensure contract is loaded; only used if runCode is called directly - function loadContract (cb) { - stateManager.getAccount(runState.address, function (err, account) { - if (err) return cb(err) - runState.contract = account - cb() - }) - } - - function vmIsActive () { - var notAtEnd = runState.programCounter < runState.code.length - return !runState.stopped && notAtEnd && !runState.vmError && !runState.returnValue - } - - function iterateVm (done) { - if (runState.stack.length > 1024) { - return done(ERROR.INVALID_OPCODE) - } - - var opCode = runState.code[runState.programCounter] - var opInfo = lookupOpInfo(opCode) - var opName = opInfo.name - var opFn = opFns[opName] - - runState.opName = opName - runState.opCode = opCode - - // check for invalid opcode - if (opName === 'INVALID') { - return done(ERROR.INVALID_OPCODE) - } - - // check for stack underflows - if (runState.stack.length < opInfo.in) { - return done(ERROR.STACK_UNDERFLOW) - } - - async.series([ - runStepHook, - runOp - ], function (err) { - setImmediate(done.bind(null, err)) - }) - - function runStepHook (cb) { - var eventObj = { - pc: runState.programCounter, - gasLeft: runState.gasLeft, - opcode: lookupOpInfo(opCode, true), - stack: runState.stack, - depth: runState.depth, - address: runState.address, - account: runState.contract, - cache: runState.stateManager.cache, - memory: runState.memory - } - self.emit('step', eventObj, cb) - } - - function runOp (cb) { - // calculate gas - var fee = new BN(opInfo.fee) - // TODO: move to a shared funtion; subGas in opFuns - runState.gasLeft = runState.gasLeft.sub(fee) - if (runState.gasLeft.cmpn(0) === -1) { - runState.vmError = ERROR.OUT_OF_GAS - cb() - return - } - // advance program counter - runState.programCounter++ - var argsNum = opInfo.in - // pop the stack - var args = argsNum ? runState.stack.splice(-opInfo.in) : [] - args.reverse() - args.push(runState) - // create a callback for async opFunc - args.push(function (err, val) { - // save result to the stack - if (val) { - runState.stack.push(val) - } - cb(err) - }) - try { - // run the opcode - var result = opFn.apply(null, args) - } catch (e) { - runState.vmError = e.error - cb() - return - } - - // save result to the stack - if (result) { - runState.stack.push(result) - } - // call the callback if opFn was sync - if (opFn.length - argsNum !== 2) { - cb() - } - } - } - - function parseVmResults (err) { - err = runState.vmError || err - - // remove any logs on error - if (err) { - runState.logs = [] - stateManager.revertContracts() - } - - var results = { - suicides: runState.suicides, - suicideTo: runState.suicideTo, - gasRefund: runState.gasRefund, - exception: err ? 0 : 1, - exceptionError: err, - logs: runState.logs, - gas: runState.gasLeft, - 'return': runState.returnValue ? runState.returnValue : new Buffer([]) - } - - if (results.exceptionError) { - delete results.gasRefund - } - - if (err) { - results.gasUsed = runState.gasLimit - } else { - results.gasUsed = runState.gasLimit.sub(runState.gasLeft) - } - - if (runState.populateCache) { - self.stateManager.cache.flush(function () { - self.stateManager.cache.clear() - cb(err, results) - }) - } else { - cb(err, results) - } - } -} - -// find all the valid jumps and puts them in the `validJumps` array -function preprocessValidJumps (runState) { - for (var i = 0; i < runState.code.length; i++) { - var curOpCode = lookupOpInfo(runState.code[i]).name - - // no destinations into the middle of PUSH - if (curOpCode === 'PUSH') { - i += runState.code[i] - 0x5f - } - - if (curOpCode === 'JUMPDEST') { - runState.validJumps.push(i) - } - } -} - -}).call(this,require("buffer").Buffer) -},{"./constants.js":5,"./opFns.js":9,"./opcodes.js":10,"async":29,"buffer":130,"ethereumjs-block":61,"ethereumjs-util":65,"timers":294}],19:[function(require,module,exports){ -module.exports = function (opts, cb) { - // for precomiled - var results - if (typeof opts.code === 'function') { - results = opts.code(opts) - results.account = opts.account - if (results.exception === undefined) { - results.exception = 1 - } - cb(results.exceptionError, results) - } else { - var f = new Function('require', 'opts', opts.code.toString()) // eslint-disable-line - results = f(require, opts) - results.account = opts.account - cb(results.exceptionError, results) - } -} - -},{}],20:[function(require,module,exports){ -(function (Buffer){ -const async = require('async') -const BN = require('bn.js') -const Bloom = require('./bloom.js') -const Block = require('ethereumjs-block') - -/** - * Process a transaction. Run the vm. Transfers eth. checks balaces - * @method processTx - * @param opts - * @param opts.tx {Transaciton} - a transaction - * @param opts.skipNonce - skips the nonce check - * @param opts.block {Block} needed to process the transaction, if no block is given a default one is created - * @param opts.blockchain {Blockchain} needed to for BLOCKHASH - * @param cb {Function} - the callback - */ -module.exports = function (opts, cb) { - var self = this - var block = opts.block - var tx = opts.tx - var gasLimit - var results - var basefee - - // create a reasonable default if no block is given - if (!block) { - block = new Block() - block.header.gasLimit = '0xffffffff' - } - - if (new BN(block.header.gasLimit).cmp(new BN(tx.gasLimit)) === -1) { - cb(new Error('tx has a higher gas limit than the block')) - return - } - - if (opts.populateCache === undefined) { - opts.populateCache = true - } - - // run everything - async.series([ - populateCache, - runTxHook, - runCall, - saveTries, - runAfterTxHook, - function (cb) { - self.stateManager.cache.flush(function () { - if (opts.populateCache) { - self.stateManager.cache.clear() - } - cb() - }) - } - ], function (err) { - cb(err, results) - }) - - // run the transaction hook - function runTxHook (cb) { - self.emit('beforeTx', tx, cb) - } - - // run the transaction hook - function runAfterTxHook (cb) { - self.emit('afterTx', results, cb) - } - - /** - * populates the cache with the two and from of the tx - */ - function populateCache (cb) { - var accounts = new Set() - accounts.add(tx.from.toString('hex')) - accounts.add(tx.to.toString('hex')) - accounts.add(block.header.coinbase.toString('hex')) - - if (opts.populateCache === false) { - return cb() - } - - self.stateManager.warmCache(accounts, cb) - } - - // sets up the envorment and runs a `call` - function runCall (cb) { - // check to the sender's account to make sure it has enought wei and the - // correct nonce - var fromAccount = self.stateManager.cache.get(tx.from) - var message - - if (new BN(fromAccount.balance).cmp(tx.getUpfrontCost()) === -1) { - message = "sender doesn't have enough funds to send tx. The upfront cost is: " + tx.getUpfrontCost().toString() + ' and the sender\s account only has: ' + new BN(fromAccount.balance).toString() - cb(new Error(message)) - return - } else if (!opts.skipNonce && new BN(fromAccount.nonce).cmp(new BN(tx.nonce)) !== 0) { - message = "the tx doesn't have the correct nonce. account has nonce of: " + new BN(fromAccount.nonce).toString() + ' tx has nonce of: ' + new BN(tx.nonce).toString() - cb(new Error(message)) - return - } - - // increment the nonce - fromAccount.nonce = new BN(fromAccount.nonce).add(new BN(1)) - basefee = tx.getBaseFee() - gasLimit = new BN(tx.gasLimit).sub(basefee) - fromAccount.balance = new BN(fromAccount.balance).sub(new BN(tx.gasLimit).mul(new BN(tx.gasPrice))) - self.stateManager.cache.put(tx.from, fromAccount) - - var options = { - caller: tx.from, - gasLimit: gasLimit, - gasPrice: tx.gasPrice, - to: tx.to, - value: new BN(tx.value), - data: tx.data, - block: block, - blockchain: opts.blockchain, - populateCache: false - } - - if (tx.to.toString('hex') === '') { - delete options.to - } - - // run call - self.runCall(options, parseResults) - - function parseResults (err, _results) { - results = _results - - // generate the bloom for the tx - results.bloom = txLogsBloom(results.vm.logs) - fromAccount = self.stateManager.cache.get(tx.from) - - // caculate the totall gas used - results.gasUsed = results.gasUsed.add(basefee) - - // refund the accoun.stateManagert - var gasRefund = results.vm.gasRefund - if (gasRefund) { - if (gasRefund.cmp(results.gasUsed.divn(2)) === -1) { - results.gasUsed.isub(gasRefund) - } else { - results.gasUsed.isub(results.gasUsed.divn(2)) - } - } - - // refund the left over gas amount - fromAccount.balance = new BN(tx.gasLimit).sub(results.gasUsed) - .mul(new BN(tx.gasPrice)) - .add(new BN(fromAccount.balance)) - - results.amountSpent = results.gasUsed.mul(new BN(tx.gasPrice)) - self.stateManager.cache.put(tx.from, fromAccount) - - var minerAccount = self.stateManager.cache.get(block.header.coinbase) - // add the amount spent on gas to the miner's account - minerAccount.balance = new BN(minerAccount.balance) - .add(results.amountSpent) - - // save the miner's account - self.stateManager.cache.put(block.header.coinbase, minerAccount) - - if (!results.vm.suicides) { - results.vm.suicides = {} - } - - var keys = Object.keys(results.vm.suicides) - - keys.forEach(function (s) { - self.stateManager.cache.del(new Buffer(s, 'hex')) - }) - - cb(err) - } - } - - function saveTries (cb) { - self.stateManager.commitContracts(cb) - } -} - -/** - * @method txLogsBloom - */ -function txLogsBloom (logs) { - var bloom = new Bloom() - if (logs) { - for (var i = 0; i < logs.length; i++) { - var log = logs[i] - // add the address - bloom.add(log[0]) - // add the topics - var topics = log[1] - for (var q = 0; q < topics.length; q++) { - bloom.add(topics[q]) - } - } - } - return bloom -} - -}).call(this,require("buffer").Buffer) -},{"./bloom.js":3,"async":29,"bn.js":30,"buffer":130,"ethereumjs-block":61}],21:[function(require,module,exports){ -(function (Buffer){ -const Trie = require('merkle-patricia-tree/secure.js') -const common = require('ethereum-common') -const async = require('async') -const Account = require('ethereumjs-account') -const fakeBlockchain = require('./fakeBlockChain.js') -const Cache = require('./cache.js') -const BN = require('bn.js') - -module.exports = StateManager - -function StateManager (opts) { - var self = this - - var trie = opts.trie - if (!trie) { - trie = new Trie(trie) - } - - var blockchain = opts.blockchain - if (!blockchain) { - blockchain = fakeBlockchain - } - - self.blockchain = blockchain - self.trie = trie - self._storageTries = {} - self.cache = new Cache(trie) -} - -var proto = StateManager.prototype - -// -// account -// -proto._lookupAccount = function (address, cb) { - var self = this - self.trie.get(address, function (err, raw) { - if (err) return cb(err) - var account = new Account(raw) - var exists = !!raw - cb(null, account, exists) - }) -} - -// gets the account from the cache, or triggers a lookup and stores -// the result in the cache -proto.getAccount = function (address, cb) { - var self = this - var cache = self.cache - var account = cache.lookup(address) - - if (account) { - var raw = account && account.isEmpty() ? null : account.raw - cb(null, account, raw) - } else { - self._lookupAccount(address, function (err, account, exists) { - if (err) return cb(err) - // ugly manual cache insertion - cache._cache = cache._cache.insert(address.toString('hex'), { - val: account, - modified: false - }) - cb(null, account, exists) - }) - } -} - -// saves the account -proto._putAccount = function (address, account, cb) { - var self = this - var addressHex = new Buffer(address, 'hex') - // TODO: dont save newly created accounts that have no balance - // if (toAccount.balance.toString('hex') === '00') { - // if they have money or a non-zero nonce or code, then write to tree - self.cache.put(addressHex, account) - // self.trie.put(addressHex, account.serialize(), cb) - cb() -} - -proto.getAccountBalance = function (address, cb) { - var self = this - self.getAccount(address, function (err, account) { - if (err) return cb(err) - cb(null, account.balance) - }) -} - -proto.putAccountBalance = function (address, balance, cb) { - var self = this - self.getAccount(address, function (err, account) { - account.balance = balance - self._putAccount(address, account, cb) - }) -} - -// sets the contract code on the account -proto.putContractCode = function (address, value, cb) { - var self = this - self.getAccount(address, function (err, account) { - account.setCode(self.trie, value, function (err) { - if (err) return cb(err) - self._putAccount(address, account, cb) - }) - }) -} - -// given an account object, returns the code -proto.getContractCode = function (address, cb) { - var self = this - self.getAccount(address, function (err, account) { - if (err) return cb(err) - account.getCode(self.trie, cb) - }) -} - -// creates a storage trie from the primary storage trie -proto._lookupStorageTrie = function (address, cb) { - var self = this - // from state trie - self.getAccount(address, function (err, account) { - if (err) return cb(err) - var storageTrie = self.trie.copy() - storageTrie.root = account.stateRoot - storageTrie._checkpoints = [] - cb(null, storageTrie) - }) -} - -// gets the storage trie from the storage cache or does lookup -proto._getStorageTrie = function (address, cb) { - var self = this - var storageTrie = self._storageTries[address.toString('hex')] - // from storage cache - if (storageTrie) { - cb(null, storageTrie) - return - } - // lookup from state - self._lookupStorageTrie(address, cb) -} - -proto.getContractStorage = function (address, key, cb) { - var self = this - self._getStorageTrie(address, function (err, trie) { - if (err) return cb(err) - trie.get(key, cb) - }) -} - -proto.putContractStorage = function (address, key, value, cb) { - var self = this - self._getStorageTrie(address, function (err, storageTrie) { - if (err) return cb(err) - - if (value) { - storageTrie.put(key, value, finalize) - } else { - storageTrie.del(key, finalize) - } - - function finalize (err) { - if (err) return cb(err) - // update storage cache - self._storageTries[address.toString('hex')] = storageTrie - // update contract stateRoot - var contract = self.cache.get(address) - contract.stateRoot = storageTrie.root - self._putAccount(address, contract, cb) - } - }) -} - -proto.commitContracts = function (cb) { - var self = this - async.each(Object.keys(self._storageTries), function (address, cb) { - var trie = self._storageTries[address] - delete self._storageTries[address] - if (trie.isCheckpoint) { - trie.commit(cb) - } else { - cb() - } - }, cb) -} - -proto.revertContracts = function () { - var self = this - self._storageTries = {} -} - -// -// blockchain -// - -proto.getBlockHash = function (number, cb) { - var self = this - self.blockchain.getBlock(number, function (err, block) { - if (err) return cb(err) - var blockHash = block.hash() - cb(null, blockHash) - }) -} - -// -// revision history -// - -proto.checkpoint = function () { - var self = this - self.trie.checkpoint() - self.cache.checkpoint() -} - -proto.commit = function (cb) { - var self = this - // setup trie checkpointing - self.trie.commit(function () { - // setup cache checkpointing - self.cache.commit() - cb() - }) -} - -proto.revert = function (cb) { - var self = this - // setup trie checkpointing - self.trie.revert() - // setup cache checkpointing - self.cache.revert() - cb() -} - -// -// cache stuff -// - -proto.getStateRoot = function (cb) { - var self = this - self.cacheFlush(function (err) { - if (err) return cb(err) - var stateRoot = self.trie.root - cb(null, stateRoot) - }) -} - -/** - * @param {Set} address - * @param {cb} function - */ -proto.warmCache = function (addresses, cb) { - var self = this - - // shim till async supports iterators - var accountArr = [] - addresses.forEach(function (val) { - if (val) accountArr.push(val) - }) - - async.eachSeries(accountArr, function (addressHex, done) { - var address = new Buffer(addressHex, 'hex') - self._lookupAccount(address, function (err, account) { - self.cache.put(address, account, true) - done(err) - }) - }, cb) -} - -proto.hasGenesisState = function (cb) { - const root = common.genesisStateRoot.v - this.trie.checkRoot(root, cb) -} - -proto.generateCanonicalGenesis = function (cb) { - var self = this - - this.hasGenesisState(function (err, genesis) { - if (!genesis & !err) { - self.generateGenesis(common.genesisState, cb) - } else { - console.log('skipping genesis') - cb(err) - } - }) -} - -proto.generateGenesis = function (initState, cb) { - var self = this - var addresses = Object.keys(initState) - async.eachSeries(addresses, function (address, done) { - // address = new Buffer(address, 'hex') - // console.log(address) - var balance = new Buffer((new BN(initState[address])).toArray()) - self.putAccountBalance(address, balance, done) - }, function () { - self.cache.flush(cb) - }) -} - -}).call(this,require("buffer").Buffer) -},{"./cache.js":4,"./fakeBlockChain.js":6,"async":29,"bn.js":30,"buffer":130,"ethereum-common":56,"ethereumjs-account":58,"merkle-patricia-tree/secure.js":106}],22:[function(require,module,exports){ -(function (process){ -/* Copyright (c) 2013 Rod Vagg, MIT License */ - -function AbstractChainedBatch (db) { - this._db = db - this._operations = [] - this._written = false -} - -AbstractChainedBatch.prototype._checkWritten = function () { - if (this._written) - throw new Error('write() already called on this batch') -} - -AbstractChainedBatch.prototype.put = function (key, value) { - this._checkWritten() - - var err = this._db._checkKey(key, 'key', this._db._isBuffer) - if (err) - throw err - - if (!this._db._isBuffer(key)) key = String(key) - if (!this._db._isBuffer(value)) value = String(value) - - if (typeof this._put == 'function' ) - this._put(key, value) - else - this._operations.push({ type: 'put', key: key, value: value }) - - return this -} - -AbstractChainedBatch.prototype.del = function (key) { - this._checkWritten() - - var err = this._db._checkKey(key, 'key', this._db._isBuffer) - if (err) throw err - - if (!this._db._isBuffer(key)) key = String(key) - - if (typeof this._del == 'function' ) - this._del(key) - else - this._operations.push({ type: 'del', key: key }) - - return this -} - -AbstractChainedBatch.prototype.clear = function () { - this._checkWritten() - - this._operations = [] - - if (typeof this._clear == 'function' ) - this._clear() - - return this -} - -AbstractChainedBatch.prototype.write = function (options, callback) { - this._checkWritten() - - if (typeof options == 'function') - callback = options - if (typeof callback != 'function') - throw new Error('write() requires a callback argument') - if (typeof options != 'object') - options = {} - - this._written = true - - if (typeof this._write == 'function' ) - return this._write(callback) - - if (typeof this._db._batch == 'function') - return this._db._batch(this._operations, options, callback) - - process.nextTick(callback) -} - -module.exports = AbstractChainedBatch -}).call(this,require('_process')) -},{"_process":278}],23:[function(require,module,exports){ -(function (process){ -/* Copyright (c) 2013 Rod Vagg, MIT License */ - -function AbstractIterator (db) { - this.db = db - this._ended = false - this._nexting = false -} - -AbstractIterator.prototype.next = function (callback) { - var self = this - - if (typeof callback != 'function') - throw new Error('next() requires a callback argument') - - if (self._ended) - return callback(new Error('cannot call next() after end()')) - if (self._nexting) - return callback(new Error('cannot call next() before previous next() has completed')) - - self._nexting = true - if (typeof self._next == 'function') { - return self._next(function () { - self._nexting = false - callback.apply(null, arguments) - }) - } - - process.nextTick(function () { - self._nexting = false - callback() - }) -} - -AbstractIterator.prototype.end = function (callback) { - if (typeof callback != 'function') - throw new Error('end() requires a callback argument') - - if (this._ended) - return callback(new Error('end() already called on iterator')) - - this._ended = true - - if (typeof this._end == 'function') - return this._end(callback) - - process.nextTick(callback) -} - -module.exports = AbstractIterator - -}).call(this,require('_process')) -},{"_process":278}],24:[function(require,module,exports){ -(function (process,Buffer){ -/* Copyright (c) 2013 Rod Vagg, MIT License */ - -var xtend = require('xtend') - , AbstractIterator = require('./abstract-iterator') - , AbstractChainedBatch = require('./abstract-chained-batch') - -function AbstractLevelDOWN (location) { - if (!arguments.length || location === undefined) - throw new Error('constructor requires at least a location argument') - - if (typeof location != 'string') - throw new Error('constructor requires a location string argument') - - this.location = location -} - -AbstractLevelDOWN.prototype.open = function (options, callback) { - if (typeof options == 'function') - callback = options - - if (typeof callback != 'function') - throw new Error('open() requires a callback argument') - - if (typeof options != 'object') - options = {} - - options.createIfMissing = options.createIfMissing != false - options.errorIfExists = !!options.errorIfExists - - if (typeof this._open == 'function') - return this._open(options, callback) - - process.nextTick(callback) -} - -AbstractLevelDOWN.prototype.close = function (callback) { - if (typeof callback != 'function') - throw new Error('close() requires a callback argument') - - if (typeof this._close == 'function') - return this._close(callback) - - process.nextTick(callback) -} - -AbstractLevelDOWN.prototype.get = function (key, options, callback) { - var err - - if (typeof options == 'function') - callback = options - - if (typeof callback != 'function') - throw new Error('get() requires a callback argument') - - if (err = this._checkKey(key, 'key', this._isBuffer)) - return callback(err) - - if (!this._isBuffer(key)) - key = String(key) - - if (typeof options != 'object') - options = {} - - options.asBuffer = options.asBuffer != false - - if (typeof this._get == 'function') - return this._get(key, options, callback) - - process.nextTick(function () { callback(new Error('NotFound')) }) -} - -AbstractLevelDOWN.prototype.put = function (key, value, options, callback) { - var err - - if (typeof options == 'function') - callback = options - - if (typeof callback != 'function') - throw new Error('put() requires a callback argument') - - if (err = this._checkKey(key, 'key', this._isBuffer)) - return callback(err) - - if (!this._isBuffer(key)) - key = String(key) - - // coerce value to string in node, don't touch it in browser - // (indexeddb can store any JS type) - if (value != null && !this._isBuffer(value) && !process.browser) - value = String(value) - - if (typeof options != 'object') - options = {} - - if (typeof this._put == 'function') - return this._put(key, value, options, callback) - - process.nextTick(callback) -} - -AbstractLevelDOWN.prototype.del = function (key, options, callback) { - var err - - if (typeof options == 'function') - callback = options - - if (typeof callback != 'function') - throw new Error('del() requires a callback argument') - - if (err = this._checkKey(key, 'key', this._isBuffer)) - return callback(err) - - if (!this._isBuffer(key)) - key = String(key) - - if (typeof options != 'object') - options = {} - - if (typeof this._del == 'function') - return this._del(key, options, callback) - - process.nextTick(callback) -} - -AbstractLevelDOWN.prototype.batch = function (array, options, callback) { - if (!arguments.length) - return this._chainedBatch() - - if (typeof options == 'function') - callback = options - - if (typeof array == 'function') - callback = array - - if (typeof callback != 'function') - throw new Error('batch(array) requires a callback argument') - - if (!Array.isArray(array)) - return callback(new Error('batch(array) requires an array argument')) - - if (!options || typeof options != 'object') - options = {} - - var i = 0 - , l = array.length - , e - , err - - for (; i < l; i++) { - e = array[i] - if (typeof e != 'object') - continue - - if (err = this._checkKey(e.type, 'type', this._isBuffer)) - return callback(err) - - if (err = this._checkKey(e.key, 'key', this._isBuffer)) - return callback(err) - } - - if (typeof this._batch == 'function') - return this._batch(array, options, callback) - - process.nextTick(callback) -} - -//TODO: remove from here, not a necessary primitive -AbstractLevelDOWN.prototype.approximateSize = function (start, end, callback) { - if ( start == null - || end == null - || typeof start == 'function' - || typeof end == 'function') { - throw new Error('approximateSize() requires valid `start`, `end` and `callback` arguments') - } - - if (typeof callback != 'function') - throw new Error('approximateSize() requires a callback argument') - - if (!this._isBuffer(start)) - start = String(start) - - if (!this._isBuffer(end)) - end = String(end) - - if (typeof this._approximateSize == 'function') - return this._approximateSize(start, end, callback) - - process.nextTick(function () { - callback(null, 0) - }) -} - -AbstractLevelDOWN.prototype._setupIteratorOptions = function (options) { - var self = this - - options = xtend(options) - - ;[ 'start', 'end', 'gt', 'gte', 'lt', 'lte' ].forEach(function (o) { - if (options[o] && self._isBuffer(options[o]) && options[o].length === 0) - delete options[o] - }) - - options.reverse = !!options.reverse - options.keys = options.keys != false - options.values = options.values != false - options.limit = 'limit' in options ? options.limit : -1 - options.keyAsBuffer = options.keyAsBuffer != false - options.valueAsBuffer = options.valueAsBuffer != false - - return options -} - -AbstractLevelDOWN.prototype.iterator = function (options) { - if (typeof options != 'object') - options = {} - - options = this._setupIteratorOptions(options) - - if (typeof this._iterator == 'function') - return this._iterator(options) - - return new AbstractIterator(this) -} - -AbstractLevelDOWN.prototype._chainedBatch = function () { - return new AbstractChainedBatch(this) -} - -AbstractLevelDOWN.prototype._isBuffer = function (obj) { - return Buffer.isBuffer(obj) -} - -AbstractLevelDOWN.prototype._checkKey = function (obj, type) { - - if (obj === null || obj === undefined) - return new Error(type + ' cannot be `null` or `undefined`') - - if (this._isBuffer(obj)) { - if (obj.length === 0) - return new Error(type + ' cannot be an empty Buffer') - } else if (String(obj) === '') - return new Error(type + ' cannot be an empty String') -} - -module.exports.AbstractLevelDOWN = AbstractLevelDOWN -module.exports.AbstractIterator = AbstractIterator -module.exports.AbstractChainedBatch = AbstractChainedBatch - -}).call(this,require('_process'),require("buffer").Buffer) -},{"./abstract-chained-batch":22,"./abstract-iterator":23,"_process":278,"buffer":130,"xtend":25}],25:[function(require,module,exports){ -module.exports = extend - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (source.hasOwnProperty(key)) { - target[key] = source[key] - } - } - } - - return target -} - -},{}],26:[function(require,module,exports){ -'use strict'; - -module.exports = require('./lib/AsyncEventEmitter'); - -},{"./lib/AsyncEventEmitter":27}],27:[function(require,module,exports){ -'use strict'; - -var EventEmitter = require('events').EventEmitter, - util = require('util'), - async = require('async'), - AsyncEventEmitter; - - -module.exports = exports = AsyncEventEmitter = function AsyncEventEmitter () { - EventEmitter.call(this); -}; - -util.inherits(AsyncEventEmitter, EventEmitter); - - -/* Public methods -============================================================================= */ - -AsyncEventEmitter.prototype.emit = function(event, data, callback) { - var self = this, - listeners = self._events[event] || []; - - // Optional data argument - if(!callback && typeof data === 'function') { - callback = data; - data = undefined; - } - - // Special treatment of internal newListener and removeListener events - if(event === 'newListener' || event === 'removeListener') { - data = { - event: data, - fn: callback - }; - - callback = undefined; - } - - // A single listener is just a function not an array... - listeners = Array.isArray(listeners) ? listeners : [listeners]; - - async.eachSeries(listeners, function (fn, next) { - var err; - - // Support synchronous functions - if(fn.length < 2) { - try { - fn.call(self, data); - } - catch (e) { - err = e; - } - - return next(err); - } - - // Async - fn.call(self, data, next); - }, callback); - - return self; -}; - - -AsyncEventEmitter.prototype.once = function (type, listener) { - var self = this, - g; - - if (typeof listener !== 'function') { - throw new TypeError('listener must be a function'); - } - - // Hack to support set arity - if(listener.length >= 2) { - g = function (e, next) { - self.removeListener(type, g); - listener(e, next); - }; - } - else { - g = function (e) { - self.removeListener(type, g); - listener(e); - }; - } - - g.listener = listener; - self.on(type, g); - - return self; -}; - - -AsyncEventEmitter.prototype.first = function(event, listener) { - var listeners = this._events[event] || []; - - // Contract - if(typeof listener !== 'function') { - throw new TypeError('listener must be a function'); - } - - // Listeners are not always an array - if(!Array.isArray(listeners)) { - this._events[event] = listeners = [listeners]; - } - - listeners.unshift(listener); - - return this; -}; - - -AsyncEventEmitter.prototype.at = function(event, index, listener) { - var listeners = this._events[event] || []; - - // Contract - if(typeof listener !== 'function') { - throw new TypeError('listener must be a function'); - } - if(typeof index !== 'number' || index < 0) { - throw new TypeError('index must be a non-negative integer'); - } - - // Listeners are not always an array - if(!Array.isArray(listeners)) { - this._events[event] = listeners = [listeners]; - } - - listeners.splice(index, 0, listener); - - return this; -}; - - -AsyncEventEmitter.prototype.before = function(event, target, listener) { - return this._beforeOrAfter(event, target, listener); -}; - - -AsyncEventEmitter.prototype.after = function(event, target, listener) { - return this._beforeOrAfter(event, target, listener, 'after'); -}; - - -/* Private methods -============================================================================= */ - -AsyncEventEmitter.prototype._beforeOrAfter = function(event, target, listener, beforeOrAfter) { - var listeners = this._events[event] || [], - i, index, - add = beforeOrAfter === 'after' ? 1 : 0; - - // Contract - if(typeof listener !== 'function') { - throw new TypeError('listener must be a function'); - } - if(typeof target !== 'function') { - throw new TypeError('target must be a function'); - } - - // Listeners are not always an array - if(!Array.isArray(listeners)) { - this._events[event] = listeners = [listeners]; - } - - index = listeners.length; - - for(i = listeners.length; i--;) { - if(listeners[i] === target) { - index = i + add; - break; - } - } - - listeners.splice(index, 0, listener); - - return this; -}; - -},{"async":28,"events":275,"util":296}],28:[function(require,module,exports){ -(function (process){ -/*global setImmediate: false, setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root, previous_async; - - root = this; - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - var called = false; - return function() { - if (called) throw new Error("Callback was already called."); - called = true; - fn.apply(root, arguments); - } - } - - //// cross-browser compatiblity functions //// - - var _each = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _each(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _each(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - if (typeof setImmediate === 'function') { - async.nextTick = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - async.setImmediate = async.nextTick; - } - else { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - async.setImmediate = async.nextTick; - } - } - else { - async.nextTick = process.nextTick; - if (typeof setImmediate !== 'undefined') { - async.setImmediate = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - } - else { - async.setImmediate = async.nextTick; - } - } - - async.each = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _each(arr, function (x) { - iterator(x, only_once(function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - } - })); - }); - }; - async.forEach = async.each; - - async.eachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(null); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - async.forEachSeries = async.eachSeries; - - async.eachLimit = function (arr, limit, iterator, callback) { - var fn = _eachLimit(limit); - fn.apply(null, [arr, iterator, callback]); - }; - async.forEachLimit = async.eachLimit; - - var _eachLimit = function (limit) { - - return function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; - - (function replenish () { - if (completed >= arr.length) { - return callback(); - } - - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed >= arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.each].concat(args)); - }; - }; - var doParallelLimit = function(limit, fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [_eachLimit(limit)].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.eachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = function (arr, limit, iterator, callback) { - return _mapLimit(limit)(arr, iterator, callback); - }; - - var _mapLimit = function(limit) { - return doParallelLimit(limit, _asyncMap); - }; - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.eachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var results = {}; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _each(listeners.slice(0), function (fn) { - fn(); - }); - }; - - addListener(function () { - if (_keys(results).length === keys.length) { - callback(null, results); - callback = function () {}; - } - }); - - _each(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _each(_keys(results), function(rkey) { - safeResults[rkey] = results[rkey]; - }); - safeResults[k] = args; - callback(err, safeResults); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor !== Array) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback.apply(null, arguments); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.setImmediate(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - var _parallel = function(eachfn, tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - eachfn.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - eachfn.each(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.parallel = function (tasks, callback) { - _parallel({ map: async.map, each: async.each }, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback); - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.eachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doWhilst = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (test()) { - async.doWhilst(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.doUntil = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - if (!test()) { - async.doUntil(iterator, test, callback); - } - else { - callback(); - } - }); - }; - - async.queue = function (worker, concurrency) { - if (concurrency === undefined) { - concurrency = 1; - } - function _insert(q, data, pos, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - var item = { - data: task, - callback: typeof callback === 'function' ? callback : null - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.saturated && q.tasks.length === concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - if (workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if (q.empty && q.tasks.length === 0) { - q.empty(); - } - workers += 1; - var next = function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if (q.drain && q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - var cb = only_once(next); - worker(task.data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - } - }; - return q; - }; - - async.cargo = function (worker, payload) { - var working = false, - tasks = []; - - var cargo = { - tasks: tasks, - payload: payload, - saturated: null, - empty: null, - drain: null, - push: function (data, callback) { - if(data.constructor !== Array) { - data = [data]; - } - _each(data, function(task) { - tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - if (cargo.saturated && tasks.length === payload) { - cargo.saturated(); - } - }); - async.setImmediate(cargo.process); - }, - process: function process() { - if (working) return; - if (tasks.length === 0) { - if(cargo.drain) cargo.drain(); - return; - } - - var ts = typeof payload === 'number' - ? tasks.splice(0, payload) - : tasks.splice(0); - - var ds = _map(ts, function (task) { - return task.data; - }); - - if(cargo.empty) cargo.empty(); - working = true; - worker(ds, function () { - working = false; - - var args = arguments; - _each(ts, function (data) { - if (data.callback) { - data.callback.apply(null, args); - } - }); - - process(); - }); - }, - length: function () { - return tasks.length; - }, - running: function () { - return working; - } - }; - return cargo; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _each(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - async.times = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.map(counter, iterator, callback); - }; - - async.timesSeries = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.mapSeries(counter, iterator, callback); - }; - - async.compose = function (/* functions... */) { - var fns = Array.prototype.reverse.call(arguments); - return function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([function () { - var err = arguments[0]; - var nextargs = Array.prototype.slice.call(arguments, 1); - cb(err, nextargs); - }])) - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }; - }; - - var _applyEach = function (eachfn, fns /*args...*/) { - var go = function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - return eachfn(fns, function (fn, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }; - if (arguments.length > 2) { - var args = Array.prototype.slice.call(arguments, 2); - return go.apply(this, args); - } - else { - return go; - } - }; - async.applyEach = doParallel(_applyEach); - async.applyEachSeries = doSeries(_applyEach); - - async.forever = function (fn, callback) { - function next(err) { - if (err) { - if (callback) { - return callback(err); - } - throw err; - } - fn(next); - } - next(); - }; - - // AMD / RequireJS - if (typeof define !== 'undefined' && define.amd) { - define([], function () { - return async; - }); - } - // Node.js - else if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - // included directly via - -``` - -## Documentation - -Some functions are also available in the following forms: -* `Series` - the same as `` but runs only a single async operation at a time -* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time - -### Collections - -* [`each`](#each), `eachSeries`, `eachLimit` -* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit` -* [`map`](#map), `mapSeries`, `mapLimit` -* [`filter`](#filter), `filterSeries`, `filterLimit` -* [`reject`](#reject), `rejectSeries`, `rejectLimit` -* [`reduce`](#reduce), [`reduceRight`](#reduceRight) -* [`detect`](#detect), `detectSeries`, `detectLimit` -* [`sortBy`](#sortBy) -* [`some`](#some), `someLimit` -* [`every`](#every), `everyLimit` -* [`concat`](#concat), `concatSeries` - -### Control Flow - -* [`series`](#seriestasks-callback) -* [`parallel`](#parallel), `parallelLimit` -* [`whilst`](#whilst), [`doWhilst`](#doWhilst) -* [`until`](#until), [`doUntil`](#doUntil) -* [`during`](#during), [`doDuring`](#doDuring) -* [`forever`](#forever) -* [`waterfall`](#waterfall) -* [`compose`](#compose) -* [`seq`](#seq) -* [`applyEach`](#applyEach), `applyEachSeries` -* [`queue`](#queue), [`priorityQueue`](#priorityQueue) -* [`cargo`](#cargo) -* [`auto`](#auto) -* [`retry`](#retry) -* [`iterator`](#iterator) -* [`times`](#times), `timesSeries`, `timesLimit` - -### Utils - -* [`apply`](#apply) -* [`nextTick`](#nextTick) -* [`memoize`](#memoize) -* [`unmemoize`](#unmemoize) -* [`ensureAsync`](#ensureAsync) -* [`constant`](#constant) -* [`asyncify`](#asyncify) -* [`wrapSync`](#wrapSync) -* [`log`](#log) -* [`dir`](#dir) -* [`noConflict`](#noConflict) - -## Collections - - - -### each(arr, iterator, [callback]) - -Applies the function `iterator` to each item in `arr`, in parallel. -The `iterator` is called with an item from the list, and a callback for when it -has finished. If the `iterator` passes an error to its `callback`, the main -`callback` (for the `each` function) is immediately called with the error. - -Note, that since this function applies `iterator` to each item in parallel, -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err)` which must be called once it has - completed. If no error has occurred, the `callback` should be run without - arguments or with an explicit `null` argument. The array index is not passed - to the iterator. If you need the index, use [`forEachOf`](#forEachOf). -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions - have finished, or an error occurs. - -__Examples__ - - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - -```js -// assuming openFiles is an array of file names - -async.each(openFiles, function(file, callback) { - - // Perform operation on file here. - console.log('Processing file ' + file); - - if( file.length > 32 ) { - console.log('This file name is too long'); - callback('File name too long'); - } else { - // Do work to process file here - console.log('File processed'); - callback(); - } -}, function(err){ - // if any of the file processing produced an error, err would equal that error - if( err ) { - // One of the iterations produced an error. - // All processing will now stop. - console.log('A file failed to process'); - } else { - console.log('All files have been processed successfully'); - } -}); -``` - -__Related__ - -* eachSeries(arr, iterator, [callback]) -* eachLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - - -### forEachOf(obj, iterator, [callback]) - -Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator. - -__Arguments__ - -* `obj` - An object or array to iterate over. -* `iterator(item, key, callback)` - A function to apply to each item in `obj`. -The `key` is the item's key, or index in the case of an array. The iterator is -passed a `callback(err)` which must be called once it has completed. If no -error has occurred, the callback should be run without arguments or with an -explicit `null` argument. -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs. - -__Example__ - -```js -var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; -var configs = {}; - -async.forEachOf(obj, function (value, key, callback) { - fs.readFile(__dirname + value, "utf8", function (err, data) { - if (err) return callback(err); - try { - configs[key] = JSON.parse(data); - } catch (e) { - return callback(e); - } - callback(); - }) -}, function (err) { - if (err) console.error(err.message); - // configs is now a map of JSON data - doSomethingWith(configs); -}) -``` - -__Related__ - -* forEachOfSeries(obj, iterator, [callback]) -* forEachOfLimit(obj, limit, iterator, [callback]) - ---------------------------------------- - - -### map(arr, iterator, [callback]) - -Produces a new array of values by mapping each value in `arr` through -the `iterator` function. The `iterator` is called with an item from `arr` and a -callback for when it has finished processing. Each of these callback takes 2 arguments: -an `error`, and the transformed item from `arr`. If `iterator` passes an error to its -callback, the main `callback` (for the `map` function) is immediately called with the error. - -Note, that since this function applies the `iterator` to each item in parallel, -there is no guarantee that the `iterator` functions will complete in order. -However, the results array will be in the same order as the original `arr`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, transformed)` which must be called once - it has completed with an error (which can be `null`) and a transformed item. -* `callback(err, results)` - *Optional* A callback which is called when all `iterator` - functions have finished, or an error occurs. Results is an array of the - transformed items from the `arr`. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - -__Related__ -* mapSeries(arr, iterator, [callback]) -* mapLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - -### filter(arr, iterator, [callback]) - -__Alias:__ `select` - -Returns a new array of all the values in `arr` which pass an async truth test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The `iterator` is passed a `callback(truthValue)`, which must be called with a - boolean argument once it has completed. -* `callback(results)` - *Optional* A callback which is called after all the `iterator` - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - -__Related__ - -* filterSeries(arr, iterator, [callback]) -* filterLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reject(arr, iterator, [callback]) - -The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. - -__Related__ - -* rejectSeries(arr, iterator, [callback]) -* rejectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reduce(arr, memo, iterator, [callback]) - -__Aliases:__ `inject`, `foldl` - -Reduces `arr` into a single value using an async `iterator` to return -each successive step. `memo` is the initial state of the reduction. -This function only operates in series. - -For performance reasons, it may make sense to split a call to this function into -a parallel map, and then use the normal `Array.prototype.reduce` on the results. -This function is for situations where each step in the reduction needs to be async; -if you can get the data before reducing it, then it's probably a good idea to do so. - -__Arguments__ - -* `arr` - An array to iterate over. -* `memo` - The initial state of the reduction. -* `iterator(memo, item, callback)` - A function applied to each item in the - array to produce the next step in the reduction. The `iterator` is passed a - `callback(err, reduction)` which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main `callback` is - immediately called with the error. -* `callback(err, result)` - *Optional* A callback which is called after all the `iterator` - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - - -### reduceRight(arr, memo, iterator, [callback]) - -__Alias:__ `foldr` - -Same as [`reduce`](#reduce), only operates on `arr` in reverse order. - - ---------------------------------------- - - -### detect(arr, iterator, [callback]) - -Returns the first value in `arr` that passes an async truth test. The -`iterator` is applied in parallel, meaning the first iterator to return `true` will -fire the detect `callback` with that result. That means the result might not be -the first item in the original `arr` (in terms of order) that passes the test. - -If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The iterator is passed a `callback(truthValue)` which must be called with a - boolean argument once it has completed. **Note: this callback does not take an error as its first argument.** -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the `iterator` functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value `undefined` if none passed. **Note: this callback does not take an error as its first argument.** - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - -__Related__ - -* detectSeries(arr, iterator, [callback]) -* detectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### sortBy(arr, iterator, [callback]) - -Sorts a list by the results of running each `arr` value through an async `iterator`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, sortValue)` which must be called once it - has completed with an error (which can be `null`) and a value to use as the sort - criteria. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is the items from - the original `arr` sorted by the values returned by the `iterator` calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - -__Sort Order__ - -By modifying the callback parameter the sorting order can be influenced: - -```js -//ascending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x); -}, function(err,result){ - //result callback -} ); - -//descending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x*-1); //<- x*-1 instead of x, turns the order around -}, function(err,result){ - //result callback -} ); -``` - ---------------------------------------- - - -### some(arr, iterator, [callback]) - -__Alias:__ `any` - -Returns `true` if at least one element in the `arr` satisfies an async test. -_The callback for each iterator call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. Once any iterator -call returns `true`, the main `callback` is immediately called. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)`` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - -__Related__ - -* someLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### every(arr, iterator, [callback]) - -__Alias:__ `all` - -Returns `true` if every element in `arr` satisfies an async test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `false`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - -__Related__ - -* everyLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### concat(arr, iterator, [callback]) - -Applies `iterator` to each item in `arr`, concatenating the results. Returns the -concatenated list. The `iterator`s are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of `arr` passed to the `iterator` function. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, results)` which must be called once it - has completed with an error (which can be `null`) and an array of results. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is an array containing - the concatenated results of the `iterator` function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - -__Related__ - -* concatSeries(arr, iterator, [callback]) - - -## Control Flow - - -### series(tasks, [callback]) - -Run the functions in the `tasks` array in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run, and `callback` is immediately called with the value of the error. -Otherwise, `callback` receives an array of results when `tasks` have completed. - -It is also possible to use an object instead of an array. Each property will be -run as a function, and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`series`](#series). - -**Note** that while many implementations preserve the order of object properties, the -[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) -explicitly states that - -> The mechanics and order of enumerating the properties is not specified. - -So if you rely on the order in which your series of functions are executed, and want -this to work on all platforms, consider using an array. - -__Arguments__ - -* `tasks` - An array or object containing functions to run, each function is passed - a `callback(err, result)` it must call on completion with an error `err` (which can - be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the `task` callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - - -### parallel(tasks, [callback]) - -Run the `tasks` array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main `callback` is immediately called with the value of the error. -Once the `tasks` have completed, the results are passed to the final `callback` as an -array. - -**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`parallel`](#parallel). - - -__Arguments__ - -* `tasks` - An array or object containing functions to run. Each function is passed - a `callback(err, result)` which it must call on completion with an error `err` - (which can be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed successfully. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - -__Related__ - -* parallelLimit(tasks, limit, [callback]) - ---------------------------------------- - - -### whilst(test, fn, callback) - -Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, -or an error occurs. - -__Arguments__ - -* `test()` - synchronous truth test to perform before each execution of `fn`. -* `fn(callback)` - A function which is called each time `test` passes. The function is - passed a `callback(err)`, which must be called once it has completed with an - optional `err` argument. -* `callback(err, [results])` - A callback which is called after the test - function has failed and repeated execution of `fn` has stopped. `callback` - will be passed an error and any arguments passed to the final `fn`'s callback. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(function () { - callback(null, count); - }, 1000); - }, - function (err, n) { - // 5 seconds have passed, n = 5 - } -); -``` - ---------------------------------------- - - -### doWhilst(fn, test, callback) - -The post-check version of [`whilst`](#whilst). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - - -### until(test, fn, callback) - -Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, -or an error occurs. `callback` will be passed an error and any arguments passed -to the final `fn`'s callback. - -The inverse of [`whilst`](#whilst). - ---------------------------------------- - - -### doUntil(fn, test, callback) - -Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - - -### during(test, fn, callback) - -Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error. - -__Example__ - -```js -var count = 0; - -async.during( - function (callback) { - return callback(null, count < 5); - }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - - -### doDuring(fn, test, callback) - -The post-check version of [`during`](#during). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function. - ---------------------------------------- - - -### forever(fn, [errback]) - -Calls the asynchronous function `fn` with a callback parameter that allows it to -call itself again, in series, indefinitely. - -If an error is passed to the callback then `errback` is called with the -error, and execution stops, otherwise it will never be called. - -```js -async.forever( - function(next) { - // next is suitable for passing to things that need a callback(err [, whatever]); - // it will result in this function being called again. - }, - function(err) { - // if next is called with a value in its first parameter, it will appear - // in here as 'err', and execution will stop. - } -); -``` - ---------------------------------------- - - -### waterfall(tasks, [callback]) - -Runs the `tasks` array of functions in series, each passing their results to the next in -the array. However, if any of the `tasks` pass an error to their own callback, the -next function is not executed, and the main `callback` is immediately called with -the error. - -__Arguments__ - -* `tasks` - An array of functions to run, each function is passed a - `callback(err, result1, result2, ...)` it must call on completion. The first - argument is an error (which can be `null`) and any further arguments will be - passed as arguments in order to the next task. -* `callback(err, [results])` - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback) { - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); - }, - function(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` -Or, with named functions: - -```js -async.waterfall([ - myFirstFunction, - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(callback) { - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - -Or, if you need to pass any argument to the first function: - -```js -async.waterfall([ - async.apply(myFirstFunction, 'zero'), - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(arg1, callback) { - // arg1 now equals 'zero' - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - ---------------------------------------- - -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions `f()`, `g()`, and `h()` would produce the result of -`f(g(h()))`, only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- - -### seq(fn1, fn2...) - -Version of the compose function that is more natural to read. -Each function consumes the return value of the previous function. -It is the equivalent of [`compose`](#compose) with the arguments reversed. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -// Requires lodash (or underscore), express3 and dresende's orm2. -// Part of an app, that fetches cats of the logged user. -// This example uses `seq` function to avoid overnesting and error -// handling clutter. -app.get('/cats', function(request, response) { - var User = request.models.User; - async.seq( - _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) - function(user, fn) { - user.getCats(fn); // 'getCats' has signature (callback(err, data)) - } - )(req.session.user_id, function (err, cats) { - if (err) { - console.error(err); - response.json({ status: 'error', message: err.message }); - } else { - response.json({ status: 'ok', message: 'Cats found', data: cats }); - } - }); -}); -``` - ---------------------------------------- - -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling -`callback` after all functions have completed. If you only provide the first -argument, then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* `fns` - the asynchronous functions to all call with the same arguments -* `args...` - any number of separate arguments to pass to the function -* `callback` - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - -__Related__ - -* applyEachSeries(tasks, args..., [callback]) - ---------------------------------------- - - -### queue(worker, [concurrency]) - -Creates a `queue` object with the specified `concurrency`. Tasks added to the -`queue` are processed in parallel (up to the `concurrency` limit). If all -`worker`s are in progress, the task is queued until one becomes available. -Once a `worker` completes a `task`, that `task`'s callback is called. - -__Arguments__ - -* `worker(task, callback)` - An asynchronous function for processing a queued - task, which must call its `callback(err)` argument when finished, with an - optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`. -* `concurrency` - An `integer` for determining how many `worker` functions should be - run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown. - -__Queue objects__ - -The `queue` object returned by this function has the following properties and -methods: - -* `length()` - a function returning the number of items waiting to be processed. -* `started` - a function returning whether or not any items have been pushed and processed by the queue -* `running()` - a function returning the number of items currently being processed. -* `workersList()` - a function returning the array of items currently being processed. -* `idle()` - a function returning false if there are items waiting or being processed, or true if not. -* `concurrency` - an integer for determining how many `worker` functions should be - run in parallel. This property can be changed after a `queue` is created to - alter the concurrency on-the-fly. -* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once - the `worker` has finished processing the task. Instead of a single task, a `tasks` array - can be submitted. The respective callback is used for every task in the list. -* `unshift(task, [callback])` - add a new task to the front of the `queue`. -* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, - and further tasks will be queued. -* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. -* `paused` - a boolean for determining whether the queue is in a paused state -* `pause()` - a function that pauses the processing of tasks until `resume()` is called. -* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. -* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle. - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing item'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - - ---------------------------------------- - - -### priorityQueue(worker, concurrency) - -The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: - -* `push(task, priority, [callback])` - `priority` should be a number. If an array of - `tasks` is given, all tasks will be assigned the same priority. -* The `unshift` method was removed. - ---------------------------------------- - - -### cargo(worker, [payload]) - -Creates a `cargo` object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the `payload` limit). If the -`worker` is in progress, the task is queued until it becomes available. Once -the `worker` has completed some tasks, each callback of those tasks is called. -Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work. - -While [queue](#queue) passes only one task to one of a group of workers -at a time, cargo passes an array of tasks to a single worker, repeating -when the worker is finished. - -__Arguments__ - -* `worker(tasks, callback)` - An asynchronous function for processing an array of - queued tasks, which must call its `callback(err)` argument when finished, with - an optional `err` argument. -* `payload` - An optional `integer` for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The `cargo` object returned by this function has the following properties and -methods: - -* `length()` - A function returning the number of items waiting to be processed. -* `payload` - An `integer` for determining how many tasks should be - process per round. This property can be changed after a `cargo` is created to - alter the payload on-the-fly. -* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called - once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` - can be submitted. The respective callback is used for every task in the list. -* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. -* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. -* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue) - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i -### auto(tasks, [concurrency], [callback]) - -Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied. - -If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far. - -Note, all functions are called with a `results` object as a second argument, -so it is unsafe to pass functions in the `tasks` object which cannot handle the -extra argument. - -For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling `readFile` with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to `readFile` in a function which does not forward the -`results` object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* `tasks` - An object. Each of its properties is either a function or an array of - requirements, with the function itself the last item in the array. The object's key - of a property serves as the name of the task defined by that property, - i.e. can be used when specifying requirements for other tasks. - The function receives two arguments: (1) a `callback(err, result)` which must be - called when finished, passing an `error` (which can be `null`) and the result of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions. -* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible. -* `callback(err, results)` - An optional callback which is called when all the - tasks have been completed. It receives the `err` argument if any `tasks` - pass an error to their callback. Results are always returned; however, if - an error occurs, no further `tasks` will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - make_folder: function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - }, - write_file: ['get_data', 'make_folder', function(callback, results){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, 'filename'); - }], - email_link: ['write_file', function(callback, results){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - callback(null, {'file':results.write_file, 'email':'user@example.com'}); - }] -}, function(err, results) { - console.log('err = ', err); - console.log('results = ', results); -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - } -], -function(err, results){ - async.series([ - function(callback){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - results.push('filename'); - callback(null); - }, - function(callback){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - callback(null, {'file':results.pop(), 'email':'user@example.com'}); - } - ]); -}); -``` - -For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding -new tasks much easier (and the code more readable). - - ---------------------------------------- - - -### retry([opts = {times: 5, interval: 0}| 5], task, [callback]) - -Attempts to get a successful response from `task` no more than `times` times before -returning an error. If the task is successful, the `callback` will be passed the result -of the successful task. If all attempts fail, the callback will be passed the error and -result (if any) of the final attempt. - -__Arguments__ - -* `opts` - Can be either an object with `times` and `interval` or a number. - * `times` - The number of attempts to make before giving up. The default is `5`. - * `interval` - The time to wait between retries, in milliseconds. The default is `0`. - * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. -* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` - which must be called when finished, passing `err` (which can be `null`) and the `result` of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions (if nested inside another control flow). -* `callback(err, results)` - An optional callback which is called when the - task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. - -The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below: - -```js -// try calling apiMethod 3 times -async.retry(3, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod 3 times, waiting 200 ms between each retry -async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod the default 5 times no delay between each retry -async.retry(apiMethod, function(err, result) { - // do something with the result -}); -``` - -It can also be embedded within other control flow functions to retry individual methods -that are not as reliable, like this: - -```js -async.auto({ - users: api.getUsers.bind(api), - payments: async.retry(3, api.getPayments.bind(api)) -}, function(err, results) { - // do something with the results -}); -``` - - ---------------------------------------- - - -### iterator(tasks) - -Creates an iterator function which calls the next function in the `tasks` array, -returning a continuation to call the next one after that. It's also possible to -“peek” at the next iterator with `iterator.next()`. - -This function is used internally by the `async` module, but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* `tasks` - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - - -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied. - -Useful as a shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - - -### nextTick(callback), setImmediate(callback) - -Calls `callback` on a later loop around the event loop. In Node.js this just -calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` -if available, otherwise `setTimeout(callback, 0)`, which means other higher priority -events may precede the execution of `callback`. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* `callback` - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - - -### times(n, iterator, [callback]) - -Calls the `iterator` function `n` times, and accumulates results in the same manner -you would use with [`map`](#map). - -__Arguments__ - -* `n` - The number of times to run the function. -* `iterator` - The function to call `n` times. -* `callback` - see [`map`](#map) - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -__Related__ - -* timesSeries(n, iterator, [callback]) -* timesLimit(n, limit, iterator, [callback]) - - -## Utils - - -### memoize(fn, [hasher]) - -Caches the results of an `async` function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* `fn` - The function to proxy and cache results from. -* `hasher` - An optional function for generating a custom hash for storing - results. It has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - - -### unmemoize(fn) - -Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized -form. Handy for testing. - -__Arguments__ - -* `fn` - the memoized function - ---------------------------------------- - - -### ensureAsync(fn) - -Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained. - -__Arguments__ - -* `fn` - an async function, one that expects a node-style callback as its last argument - -Returns a wrapped function with the exact same call signature as the function passed in. - -__Example__ - -```js -function sometimesAsync(arg, callback) { - if (cache[arg]) { - return callback(null, cache[arg]); // this would be synchronous!! - } else { - doSomeIO(arg, callback); // this IO would be asynchronous - } -} - -// this has a risk of stack overflows if many results are cached in a row -async.mapSeries(args, sometimesAsync, done); - -// this will defer sometimesAsync's callback if necessary, -// preventing stack overflows -async.mapSeries(args, async.ensureAsync(sometimesAsync), done); - -``` - ---------------------------------------- - - -### constant(values...) - -Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`. - -__Example__ - -```js -async.waterfall([ - async.constant(42), - function (value, next) { - // value === 42 - }, - //... -], callback); - -async.waterfall([ - async.constant(filename, "utf8"), - fs.readFile, - function (fileData, next) { - //... - } - //... -], callback); - -async.auto({ - hostname: async.constant("https://server.net/"), - port: findFreePort, - launchServer: ["hostname", "port", function (cb, options) { - startServer(options, cb); - }], - //... -}, callback); - -``` - ---------------------------------------- - - - -### asyncify(func) - -__Alias:__ `wrapSync` - -Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback. - -__Example__ - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(JSON.parse), - function (data, next) { - // data is the result of parsing the text. - // If there was a parsing error, it would have been caught. - } -], callback) -``` - -If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example: - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(function (contents) { - return db.model.create(contents); - }), - function (model, next) { - // `model` is the instantiated model object. - // If there was an error, this function would be skipped. - } -], callback) -``` - -This also means you can asyncify ES2016 `async` functions. - -```js -var q = async.queue(async.asyncify(async function (file) { - var intermediateStep = await processFile(file); - return await somePromise(intermediateStep) -})); - -q.push(files); -``` - ---------------------------------------- - - -### log(function, arguments) - -Logs the result of an `async` function to the `console`. Only works in Node.js or -in browsers that support `console.log` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.log` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - - -### dir(function, arguments) - -Logs the result of an `async` function to the `console` using `console.dir` to -display the properties of the resulting object. Only works in Node.js or -in browsers that support `console.dir` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.dir` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - - -### noConflict() - -Changes the value of `async` back to its original value, returning a reference to the -`async` object. diff --git a/node_modules/ethereumjs-vm/node_modules/async/dist/async.js b/node_modules/ethereumjs-vm/node_modules/async/dist/async.js deleted file mode 100644 index 31e7620..0000000 --- a/node_modules/ethereumjs-vm/node_modules/async/dist/async.js +++ /dev/null @@ -1,1265 +0,0 @@ -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -(function () { - - var async = {}; - function noop() {} - function identity(v) { - return v; - } - function toBool(v) { - return !!v; - } - function notId(v) { - return !v; - } - - // global on the server, window in the browser - var previous_async; - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self === 'object' && self.self === self && self || - typeof global === 'object' && global.global === global && global || - this; - - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - return function() { - if (fn === null) throw new Error("Callback was already called."); - fn.apply(this, arguments); - fn = null; - }; - } - - function _once(fn) { - return function() { - if (fn === null) return; - fn.apply(this, arguments); - fn = null; - }; - } - - //// cross-browser compatiblity functions //// - - var _toString = Object.prototype.toString; - - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; - - // Ported from underscore.js isObject - var _isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - function _isArrayLike(arr) { - return _isArray(arr) || ( - // has a positive integer length property - typeof arr.length === "number" && - arr.length >= 0 && - arr.length % 1 === 0 - ); - } - - function _arrayEach(arr, iterator) { - var index = -1, - length = arr.length; - - while (++index < length) { - iterator(arr[index], index, arr); - } - } - - function _map(arr, iterator) { - var index = -1, - length = arr.length, - result = Array(length); - - while (++index < length) { - result[index] = iterator(arr[index], index, arr); - } - return result; - } - - function _range(count) { - return _map(Array(count), function (v, i) { return i; }); - } - - function _reduce(arr, iterator, memo) { - _arrayEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - } - - function _forEachOf(object, iterator) { - _arrayEach(_keys(object), function (key) { - iterator(object[key], key); - }); - } - - function _indexOf(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === item) return i; - } - return -1; - } - - var _keys = Object.keys || function (obj) { - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - function _keyIterator(coll) { - var i = -1; - var len; - var keys; - if (_isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? i : null; - }; - } else { - keys = _keys(coll); - len = keys.length; - return function next() { - i++; - return i < len ? keys[i] : null; - }; - } - } - - // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) - // This accumulates the arguments passed into an array, after a given index. - // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). - function _restParam(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0); - var rest = Array(length); - for (var index = 0; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - } - // Currently unused but handle cases outside of the switch statement: - // var args = Array(startIndex + 1); - // for (index = 0; index < startIndex; index++) { - // args[index] = arguments[index]; - // } - // args[startIndex] = rest; - // return func.apply(this, args); - }; - } - - function _withoutIndex(iterator) { - return function (value, index, callback) { - return iterator(value, callback); - }; - } - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - - // capture the global reference to guard against fakeTimer mocks - var _setImmediate = typeof setImmediate === 'function' && setImmediate; - - var _delay = _setImmediate ? function(fn) { - // not a direct alias for IE10 compatibility - _setImmediate(fn); - } : function(fn) { - setTimeout(fn, 0); - }; - - if (typeof process === 'object' && typeof process.nextTick === 'function') { - async.nextTick = process.nextTick; - } else { - async.nextTick = _delay; - } - async.setImmediate = _setImmediate ? _delay : async.nextTick; - - - async.forEach = - async.each = function (arr, iterator, callback) { - return async.eachOf(arr, _withoutIndex(iterator), callback); - }; - - async.forEachSeries = - async.eachSeries = function (arr, iterator, callback) { - return async.eachOfSeries(arr, _withoutIndex(iterator), callback); - }; - - - async.forEachLimit = - async.eachLimit = function (arr, limit, iterator, callback) { - return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); - }; - - async.forEachOf = - async.eachOf = function (object, iterator, callback) { - callback = _once(callback || noop); - object = object || []; - - var iter = _keyIterator(object); - var key, completed = 0; - - while ((key = iter()) != null) { - completed += 1; - iterator(object[key], key, only_once(done)); - } - - if (completed === 0) callback(null); - - function done(err) { - completed--; - if (err) { - callback(err); - } - // Check key is null in case iterator isn't exhausted - // and done resolved synchronously. - else if (key === null && completed <= 0) { - callback(null); - } - } - }; - - async.forEachOfSeries = - async.eachOfSeries = function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - var key = nextKey(); - function iterate() { - var sync = true; - if (key === null) { - return callback(null); - } - iterator(obj[key], key, only_once(function (err) { - if (err) { - callback(err); - } - else { - key = nextKey(); - if (key === null) { - return callback(null); - } else { - if (sync) { - async.setImmediate(iterate); - } else { - iterate(); - } - } - } - })); - sync = false; - } - iterate(); - }; - - - - async.forEachOfLimit = - async.eachOfLimit = function (obj, limit, iterator, callback) { - _eachOfLimit(limit)(obj, iterator, callback); - }; - - function _eachOfLimit(limit) { - - return function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - if (limit <= 0) { - return callback(null); - } - var done = false; - var running = 0; - var errored = false; - - (function replenish () { - if (done && running <= 0) { - return callback(null); - } - - while (running < limit && !errored) { - var key = nextKey(); - if (key === null) { - done = true; - if (running <= 0) { - callback(null); - } - return; - } - running += 1; - iterator(obj[key], key, only_once(function (err) { - running -= 1; - if (err) { - callback(err); - errored = true; - } - else { - replenish(); - } - })); - } - })(); - }; - } - - - function doParallel(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOf, obj, iterator, callback); - }; - } - function doParallelLimit(fn) { - return function (obj, limit, iterator, callback) { - return fn(_eachOfLimit(limit), obj, iterator, callback); - }; - } - function doSeries(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOfSeries, obj, iterator, callback); - }; - } - - function _asyncMap(eachfn, arr, iterator, callback) { - callback = _once(callback || noop); - arr = arr || []; - var results = _isArrayLike(arr) ? [] : {}; - eachfn(arr, function (value, index, callback) { - iterator(value, function (err, v) { - results[index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = doParallelLimit(_asyncMap); - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.inject = - async.foldl = - async.reduce = function (arr, memo, iterator, callback) { - async.eachOfSeries(arr, function (x, i, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - - async.foldr = - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, identity).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - - async.transform = function (arr, memo, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = memo; - memo = _isArray(arr) ? [] : {}; - } - - async.eachOf(arr, function(v, k, cb) { - iterator(memo, v, k, cb); - }, function(err) { - callback(err, memo); - }); - }; - - function _filter(eachfn, arr, iterator, callback) { - var results = []; - eachfn(arr, function (x, index, callback) { - iterator(x, function (v) { - if (v) { - results.push({index: index, value: x}); - } - callback(); - }); - }, function () { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - } - - async.select = - async.filter = doParallel(_filter); - - async.selectLimit = - async.filterLimit = doParallelLimit(_filter); - - async.selectSeries = - async.filterSeries = doSeries(_filter); - - function _reject(eachfn, arr, iterator, callback) { - _filter(eachfn, arr, function(value, cb) { - iterator(value, function(v) { - cb(!v); - }); - }, callback); - } - async.reject = doParallel(_reject); - async.rejectLimit = doParallelLimit(_reject); - async.rejectSeries = doSeries(_reject); - - function _createTester(eachfn, check, getResult) { - return function(arr, limit, iterator, cb) { - function done() { - if (cb) cb(getResult(false, void 0)); - } - function iteratee(x, _, callback) { - if (!cb) return callback(); - iterator(x, function (v) { - if (cb && check(v)) { - cb(getResult(true, x)); - cb = iterator = false; - } - callback(); - }); - } - if (arguments.length > 3) { - eachfn(arr, limit, iteratee, done); - } else { - cb = iterator; - iterator = limit; - eachfn(arr, iteratee, done); - } - }; - } - - async.any = - async.some = _createTester(async.eachOf, toBool, identity); - - async.someLimit = _createTester(async.eachOfLimit, toBool, identity); - - async.all = - async.every = _createTester(async.eachOf, notId, notId); - - async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - - function _findGetResult(v, x) { - return x; - } - async.detect = _createTester(async.eachOf, identity, _findGetResult); - async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); - async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - callback(null, _map(results.sort(comparator), function (x) { - return x.value; - })); - } - - }); - - function comparator(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - } - }; - - async.auto = function (tasks, concurrency, callback) { - if (typeof arguments[1] === 'function') { - // concurrency is optional, shift the args. - callback = concurrency; - concurrency = null; - } - callback = _once(callback || noop); - var keys = _keys(tasks); - var remainingTasks = keys.length; - if (!remainingTasks) { - return callback(null); - } - if (!concurrency) { - concurrency = remainingTasks; - } - - var results = {}; - var runningTasks = 0; - - var hasError = false; - - var listeners = []; - function addListener(fn) { - listeners.unshift(fn); - } - function removeListener(fn) { - var idx = _indexOf(listeners, fn); - if (idx >= 0) listeners.splice(idx, 1); - } - function taskComplete() { - remainingTasks--; - _arrayEach(listeners.slice(0), function (fn) { - fn(); - }); - } - - addListener(function () { - if (!remainingTasks) { - callback(null, results); - } - }); - - _arrayEach(keys, function (k) { - if (hasError) return; - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = _restParam(function(err, args) { - runningTasks--; - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _forEachOf(results, function(val, rkey) { - safeResults[rkey] = val; - }); - safeResults[k] = args; - hasError = true; - - callback(err, safeResults); - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }); - var requires = task.slice(0, task.length - 1); - // prevent dead-locks - var len = requires.length; - var dep; - while (len--) { - if (!(dep = tasks[requires[len]])) { - throw new Error('Has nonexistent dependency in ' + requires.join(', ')); - } - if (_isArray(dep) && _indexOf(dep, k) >= 0) { - throw new Error('Has cyclic dependencies'); - } - } - function ready() { - return runningTasks < concurrency && _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - } - if (ready()) { - runningTasks++; - task[task.length - 1](taskCallback, results); - } - else { - addListener(listener); - } - function listener() { - if (ready()) { - runningTasks++; - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - } - }); - }; - - - - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var attempts = []; - - var opts = { - times: DEFAULT_TIMES, - interval: DEFAULT_INTERVAL - }; - - function parseTimes(acc, t){ - if(typeof t === 'number'){ - acc.times = parseInt(t, 10) || DEFAULT_TIMES; - } else if(typeof t === 'object'){ - acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; - acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; - } else { - throw new Error('Unsupported argument type for \'times\': ' + typeof t); - } - } - - var length = arguments.length; - if (length < 1 || length > 3) { - throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); - } else if (length <= 2 && typeof times === 'function') { - callback = task; - task = times; - } - if (typeof times !== 'function') { - parseTimes(opts, times); - } - opts.callback = callback; - opts.task = task; - - function wrappedTask(wrappedCallback, wrappedResults) { - function retryAttempt(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - } - - function retryInterval(interval){ - return function(seriesCallback){ - setTimeout(function(){ - seriesCallback(null); - }, interval); - }; - } - - while (opts.times) { - - var finalAttempt = !(opts.times-=1); - attempts.push(retryAttempt(opts.task, finalAttempt)); - if(!finalAttempt && opts.interval > 0){ - attempts.push(retryInterval(opts.interval)); - } - } - - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || opts.callback)(data.err, data.result); - }); - } - - // If a callback is passed, run this as a controll flow - return opts.callback ? wrappedTask() : wrappedTask; - }; - - async.waterfall = function (tasks, callback) { - callback = _once(callback || noop); - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - function wrapIterator(iterator) { - return _restParam(function (err, args) { - if (err) { - callback.apply(null, [err].concat(args)); - } - else { - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - ensureAsync(iterator).apply(null, args); - } - }); - } - wrapIterator(async.iterator(tasks))(); - }; - - function _parallel(eachfn, tasks, callback) { - callback = callback || noop; - var results = _isArrayLike(tasks) ? [] : {}; - - eachfn(tasks, function (task, key, callback) { - task(_restParam(function (err, args) { - if (args.length <= 1) { - args = args[0]; - } - results[key] = args; - callback(err); - })); - }, function (err) { - callback(err, results); - }); - } - - async.parallel = function (tasks, callback) { - _parallel(async.eachOf, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel(_eachOfLimit(limit), tasks, callback); - }; - - async.series = function(tasks, callback) { - _parallel(async.eachOfSeries, tasks, callback); - }; - - async.iterator = function (tasks) { - function makeCallback(index) { - function fn() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - } - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - } - return makeCallback(0); - }; - - async.apply = _restParam(function (fn, args) { - return _restParam(function (callArgs) { - return fn.apply( - null, args.concat(callArgs) - ); - }); - }); - - function _concat(eachfn, arr, fn, callback) { - var result = []; - eachfn(arr, function (x, index, cb) { - fn(x, function (err, y) { - result = result.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, result); - }); - } - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - callback = callback || noop; - if (test()) { - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else if (test.apply(this, args)) { - iterator(next); - } else { - callback.apply(null, [null].concat(args)); - } - }); - iterator(next); - } else { - callback(null); - } - }; - - async.doWhilst = function (iterator, test, callback) { - var calls = 0; - return async.whilst(function() { - return ++calls <= 1 || test.apply(this, arguments); - }, iterator, callback); - }; - - async.until = function (test, iterator, callback) { - return async.whilst(function() { - return !test.apply(this, arguments); - }, iterator, callback); - }; - - async.doUntil = function (iterator, test, callback) { - return async.doWhilst(iterator, function() { - return !test.apply(this, arguments); - }, callback); - }; - - async.during = function (test, iterator, callback) { - callback = callback || noop; - - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else { - args.push(check); - test.apply(this, args); - } - }); - - var check = function(err, truth) { - if (err) { - callback(err); - } else if (truth) { - iterator(next); - } else { - callback(null); - } - }; - - test(check); - }; - - async.doDuring = function (iterator, test, callback) { - var calls = 0; - async.during(function(next) { - if (calls++ < 1) { - next(null, true); - } else { - test.apply(this, arguments); - } - }, iterator, callback); - }; - - function _queue(worker, concurrency, payload) { - if (concurrency == null) { - concurrency = 1; - } - else if(concurrency === 0) { - throw new Error('Concurrency must not be zero'); - } - function _insert(q, data, pos, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0 && q.idle()) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - callback: callback || noop - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - }); - async.setImmediate(q.process); - } - function _next(q, tasks) { - return function(){ - workers -= 1; - - var removed = false; - var args = arguments; - _arrayEach(tasks, function (task) { - _arrayEach(workersList, function (worker, index) { - if (worker === task && !removed) { - workersList.splice(index, 1); - removed = true; - } - }); - - task.callback.apply(task, args); - }); - if (q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - var workers = 0; - var workersList = []; - var q = { - tasks: [], - concurrency: concurrency, - payload: payload, - saturated: noop, - empty: noop, - drain: noop, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = noop; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - while(!q.paused && workers < q.concurrency && q.tasks.length){ - - var tasks = q.payload ? - q.tasks.splice(0, q.payload) : - q.tasks.splice(0, q.tasks.length); - - var data = _map(tasks, function (task) { - return task.data; - }); - - if (q.tasks.length === 0) { - q.empty(); - } - workers += 1; - workersList.push(tasks[0]); - var cb = only_once(_next(q, tasks)); - worker(data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - workersList: function () { - return workersList; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - q.paused = true; - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - var resumeCount = Math.min(q.concurrency, q.tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - async.setImmediate(q.process); - } - } - }; - return q; - } - - async.queue = function (worker, concurrency) { - var q = _queue(function (items, cb) { - worker(items[0], cb); - }, concurrency, 1); - - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - } - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : noop - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; - - return q; - }; - - async.cargo = function (worker, payload) { - return _queue(worker, 1, payload); - }; - - function _console_fn(name) { - return _restParam(function (fn, args) { - fn.apply(null, args.concat([_restParam(function (err, args) { - if (typeof console === 'object') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _arrayEach(args, function (x) { - console[name](x); - }); - } - } - })])); - }); - } - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - var has = Object.prototype.hasOwnProperty; - hasher = hasher || identity; - var memoized = _restParam(function memoized(args) { - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has.call(memo, key)) { - async.setImmediate(function () { - callback.apply(null, memo[key]); - }); - } - else if (has.call(queues, key)) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([_restParam(function (args) { - memo[key] = args; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, args); - } - })])); - } - }); - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - function _times(mapper) { - return function (count, iterator, callback) { - mapper(_range(count), iterator, callback); - }; - } - - async.times = _times(async.map); - async.timesSeries = _times(async.mapSeries); - async.timesLimit = function (count, limit, iterator, callback) { - return async.mapLimit(_range(count), limit, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return _restParam(function (args) { - var that = this; - - var callback = args[args.length - 1]; - if (typeof callback == 'function') { - args.pop(); - } else { - callback = noop; - } - - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { - cb(err, nextargs); - })])); - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }); - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - - function _applyEach(eachfn) { - return _restParam(function(fns, args) { - var go = _restParam(function(args) { - var that = this; - var callback = args.pop(); - return eachfn(fns, function (fn, _, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }); - if (args.length) { - return go.apply(this, args); - } - else { - return go; - } - }); - } - - async.applyEach = _applyEach(async.eachOf); - async.applyEachSeries = _applyEach(async.eachOfSeries); - - - async.forever = function (fn, callback) { - var done = only_once(callback || noop); - var task = ensureAsync(fn); - function next(err) { - if (err) { - return done(err); - } - task(next); - } - next(); - }; - - function ensureAsync(fn) { - return _restParam(function (args) { - var callback = args.pop(); - args.push(function () { - var innerArgs = arguments; - if (sync) { - async.setImmediate(function () { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - }); - var sync = true; - fn.apply(this, args); - sync = false; - }); - } - - async.ensureAsync = ensureAsync; - - async.constant = _restParam(function(values) { - var args = [null].concat(values); - return function (callback) { - return callback.apply(this, args); - }; - }); - - async.wrapSync = - async.asyncify = function asyncify(func) { - return _restParam(function (args) { - var callback = args.pop(); - var result; - try { - result = func.apply(this, args); - } catch (e) { - return callback(e); - } - // if result is Promise object - if (_isObject(result) && typeof result.then === "function") { - result.then(function(value) { - callback(null, value); - })["catch"](function(err) { - callback(err.message ? err : new Error(err)); - }); - } else { - callback(null, result); - } - }); - }; - - // Node.js - if (typeof module === 'object' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define === 'function' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via '); - expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e'); - done(); - }); - - it('encodes \' characters', function (done) { - - var encoded = Hoek.escapeJavaScript('something(\'param\')'); - expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29'); - done(); - }); - - it('encodes large unicode characters with the correct padding', function (done) { - - var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('\\u0500\\u1000'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeJavaScript(null); - expect(encoded).to.equal(''); - done(); - }); -}); - -describe('escapeHtml()', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeHtml(''); - expect(encoded).to.equal('<script>alert(1)</script>'); - done(); - }); - - it('encodes < and > as named characters', function (done) { - - var encoded = Hoek.escapeHtml('" - ].join("\n")); - }) -} - -},{"./index.js":18,"tape":19}]},{},[33]) \ No newline at end of file diff --git a/node_modules/is-function/index.js b/node_modules/is-function/index.js deleted file mode 100644 index bae2183..0000000 --- a/node_modules/is-function/index.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = isFunction - -var toString = Object.prototype.toString - -function isFunction (fn) { - var string = toString.call(fn) - return string === '[object Function]' || - (typeof fn === 'function' && string !== '[object RegExp]') || - (typeof window !== 'undefined' && - // IE8 and below - (fn === window.setTimeout || - fn === window.alert || - fn === window.confirm || - fn === window.prompt)) -}; diff --git a/node_modules/is-function/package.json b/node_modules/is-function/package.json deleted file mode 100644 index 00e9601..0000000 --- a/node_modules/is-function/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "is-function@^1.0.1", - "/Users/jbaylina/git/MVP/node_modules/xhr" - ] - ], - "_from": "is-function@>=1.0.1 <2.0.0", - "_id": "is-function@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/is-function", - "_npmUser": { - "email": "glurgle@gmail.com", - "name": "grncdr" - }, - "_npmVersion": "1.3.11", - "_phantomChildren": {}, - "_requested": { - "name": "is-function", - "raw": "is-function@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/for-each", - "/xhr" - ], - "_resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "_shasum": "12cfb98b65b57dd3d193a3121f5f6e2f437602b5", - "_shrinkwrap": null, - "_spec": "is-function@^1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/xhr", - "author": { - "email": "me@stephensugden.com", - "name": "Stephen Sugden" - }, - "bugs": { - "url": "https://github.com/grncdr/js-is-function/issues" - }, - "dependencies": {}, - "description": "is that thing a function? Use this module to find out", - "devDependencies": { - "tape": "~2.3.2" - }, - "directories": {}, - "dist": { - "shasum": "12cfb98b65b57dd3d193a3121f5f6e2f437602b5", - "tarball": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz" - }, - "homepage": "https://github.com/grncdr/js-is-function", - "keywords": [ - "polyfill", - "is-function", - "ie6" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "glurgle@gmail.com", - "name": "grncdr" - } - ], - "name": "is-function", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/grncdr/js-is-function.git" - }, - "scripts": { - "test": "tape test.js" - }, - "testling": { - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ], - "files": "test.js" - }, - "version": "1.0.1" -} diff --git a/node_modules/is-function/test.html b/node_modules/is-function/test.html deleted file mode 100644 index be26863..0000000 --- a/node_modules/is-function/test.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/node_modules/is-function/test.js b/node_modules/is-function/test.js deleted file mode 100644 index b3ac5e4..0000000 --- a/node_modules/is-function/test.js +++ /dev/null @@ -1,37 +0,0 @@ -var test = require('tape') -var isFunction = require('./index.js') - -test('isFunction', function (t) { - t.ok(!isFunction(), 'undefined is not a function') - t.ok(!isFunction(null), 'null is not a function') - t.ok(!isFunction(''), 'string is not a function') - t.ok(!isFunction(/a/), 'regex is not a function') - t.ok(!isFunction(true), 'true is not a function') - t.ok(!isFunction(false), 'false is not a function') - t.ok(!isFunction(NaN), 'NaN is not a function') - t.ok(!isFunction(42), '42 is not a function') - t.ok(isFunction(function () {}), 'function is a function') - t.ok(isFunction(setTimeout), 'setTimeout is a function') - t.end() -}) - -if (typeof window !== 'undefined') { - test('browser quirks', function (t) { - t.plan(2) - - t.ok(isFunction(window.alert), 'alert is a function') - - window.testRegExpFromIframe = function (regexp) { - t.ok(!isFunction(regexp)) - } - - var iframe = document.createElement('iframe') - document.body.appendChild(iframe) - - iframe.contentWindow.document.write([ - "" - ].join("\n")); - }) -} diff --git a/node_modules/is-my-json-valid/.npmignore b/node_modules/is-my-json-valid/.npmignore deleted file mode 100644 index dbb0721..0000000 --- a/node_modules/is-my-json-valid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -cosmicrealms.com diff --git a/node_modules/is-my-json-valid/.travis.yml b/node_modules/is-my-json-valid/.travis.yml deleted file mode 100644 index 6e5919d..0000000 --- a/node_modules/is-my-json-valid/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/is-my-json-valid/LICENSE b/node_modules/is-my-json-valid/LICENSE deleted file mode 100644 index 757562e..0000000 --- a/node_modules/is-my-json-valid/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/is-my-json-valid/README.md b/node_modules/is-my-json-valid/README.md deleted file mode 100644 index 104a425..0000000 --- a/node_modules/is-my-json-valid/README.md +++ /dev/null @@ -1,173 +0,0 @@ -# is-my-json-valid - -A [JSONSchema](http://json-schema.org/) validator that uses code generation -to be extremely fast - -``` -npm install is-my-json-valid -``` - -It passes the entire JSONSchema v4 test suite except for `remoteRefs` and `maxLength`/`minLength` when using unicode surrogate pairs. - -[![build status](http://img.shields.io/travis/mafintosh/is-my-json-valid.svg?style=flat)](http://travis-ci.org/mafintosh/is-my-json-valid) - -## Usage - -Simply pass a schema to compile it - -``` js -var validator = require('is-my-json-valid') - -var validate = validator({ - required: true, - type: 'object', - properties: { - hello: { - required: true, - type: 'string' - } - } -}) - -console.log('should be valid', validate({hello: 'world'})) -console.log('should not be valid', validate({})) - -// get the last list of errors by checking validate.errors -// the following will print [{field: 'data.hello', message: 'is required'}] -console.log(validate.errors) -``` - -You can also pass the schema as a string - -``` js -var validate = validator('{"type": ... }') -``` - -Optionally you can use the require submodule to load a schema from `__dirname` - -``` js -var validator = require('is-my-json-valid/require') -var validate = validator('my-schema.json') -``` - -## Custom formats - -is-my-json-valid supports the formats specified in JSON schema v4 (such as date-time). -If you want to add your own custom formats pass them as the formats options to the validator - -``` js -var validate = validator({ - type: 'string', - required: true, - format: 'only-a' -}, { - formats: { - 'only-a': /^a+$/ - } -}) - -console.log(validate('aa')) // true -console.log(validate('ab')) // false -``` - -## External schemas - -You can pass in external schemas that you reference using the `$ref` attribute as the `schemas` option - -``` js -var ext = { - required: true, - type: 'string' -} - -var schema = { - $ref: '#ext' // references another schema called ext -} - -// pass the external schemas as an option -var validate = validator(schema, {schemas: {ext: ext}}) - -validate('hello') // returns true -validate(42) // return false -``` - -## Filtering away additional properties - -is-my-json-valid supports filtering away properties not in the schema - -``` js -var filter = validator.filter({ - required: true, - type: 'object', - properties: { - hello: {type: 'string', required: true} - }, - additionalProperties: false -}) - -var doc = {hello: 'world', notInSchema: true} -console.log(filter(doc)) // {hello: 'world'} -``` - -## Verbose mode outputs the value on errors - -is-my-json-valid outputs the value causing an error when verbose is set to true - -``` js -var validate = validator({ - required: true, - type: 'object', - properties: { - hello: { - required: true, - type: 'string' - } - } -}, { - verbose: true -}) - -validate({hello: 100}); -console.log(validate.errors) // {field: 'data.hello', message: 'is the wrong type', value: 100, type: 'string'} -``` - -## Greedy mode tries to validate as much as possible - -By default is-my-json-valid bails on first validation error but when greedy is -set to true it tries to validate as much as possible: - -``` js -var validate = validator({ - type: 'object', - properties: { - x: { - type: 'number' - } - }, - required: ['x', 'y'] -}, { - greedy: true -}); - -validate({x: 'string'}); -console.log(validate.errors) // [{field: 'data.y', message: 'is required'}, - // {field: 'data.x', message: 'is the wrong type'}] -``` - -## Performance - -is-my-json-valid uses code generation to turn your JSON schema into basic javascript code that is easily optimizeable by v8. - -At the time of writing, is-my-json-valid is the __fastest validator__ when running - -* [json-schema-benchmark](https://github.com/Muscula/json-schema-benchmark) -* [cosmicreals.com benchmark](http://cosmicrealms.com/blog/2014/08/29/benchmark-of-node-dot-js-json-validation-modules-part-3/) -* [jsck benchmark](https://github.com/pandastrike/jsck/issues/72#issuecomment-70992684) -* [themis benchmark](https://cdn.rawgit.com/playlyfe/themis/master/benchmark/results.html) -* [z-schema benchmark](https://rawgit.com/zaggino/z-schema/master/benchmark/results.html) - -If you know any other relevant benchmarks open a PR and I'll add them. - -## License - -MIT diff --git a/node_modules/is-my-json-valid/example.js b/node_modules/is-my-json-valid/example.js deleted file mode 100644 index f70f4df..0000000 --- a/node_modules/is-my-json-valid/example.js +++ /dev/null @@ -1,18 +0,0 @@ -var validator = require('./') - -var validate = validator({ - type: 'object', - properties: { - hello: { - required: true, - type: 'string' - } - } -}) - -console.log('should be valid', validate({hello: 'world'})) -console.log('should not be valid', validate({})) - -// get the last error message by checking validate.error -// the following will print "data.hello is required" -console.log('the errors were:', validate.errors) diff --git a/node_modules/is-my-json-valid/formats.js b/node_modules/is-my-json-valid/formats.js deleted file mode 100644 index 9cb8380..0000000 --- a/node_modules/is-my-json-valid/formats.js +++ /dev/null @@ -1,14 +0,0 @@ -exports['date-time'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\d{2}:\d{2}:\d{2}(\.\d+)?([zZ]|[+-]\d{2}:\d{2})$/ -exports['date'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/ -exports['time'] = /^\d{2}:\d{2}:\d{2}$/ -exports['email'] = /^\S+@\S+$/ -exports['ip-address'] = exports['ipv4'] = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ -exports['ipv6'] = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/ -exports['uri'] = /^[a-zA-Z][a-zA-Z0-9+-.]*:[^\s]*$/ -exports['color'] = /(#?([0-9A-Fa-f]{3,6})\b)|(aqua)|(black)|(blue)|(fuchsia)|(gray)|(green)|(lime)|(maroon)|(navy)|(olive)|(orange)|(purple)|(red)|(silver)|(teal)|(white)|(yellow)|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\))/ -exports['hostname'] = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$/ -exports['alpha'] = /^[a-zA-Z]+$/ -exports['alphanumeric'] = /^[a-zA-Z0-9]+$/ -exports['style'] = /\s*(.+?):\s*([^;]+);?/g -exports['phone'] = /^\+(?:[0-9] ?){6,14}[0-9]$/ -exports['utc-millisec'] = /^[0-9]{1,15}\.?[0-9]{0,15}$/ diff --git a/node_modules/is-my-json-valid/index.js b/node_modules/is-my-json-valid/index.js deleted file mode 100644 index 779cfe2..0000000 --- a/node_modules/is-my-json-valid/index.js +++ /dev/null @@ -1,594 +0,0 @@ -var genobj = require('generate-object-property') -var genfun = require('generate-function') -var jsonpointer = require('jsonpointer') -var xtend = require('xtend') -var formats = require('./formats') - -var get = function(obj, additionalSchemas, ptr) { - - var visit = function(sub) { - if (sub && sub.id === ptr) return sub - if (typeof sub !== 'object' || !sub) return null - return Object.keys(sub).reduce(function(res, k) { - return res || visit(sub[k]) - }, null) - } - - var res = visit(obj) - if (res) return res - - ptr = ptr.replace(/^#/, '') - ptr = ptr.replace(/\/$/, '') - - try { - return jsonpointer.get(obj, decodeURI(ptr)) - } catch (err) { - var end = ptr.indexOf('#') - var other - // external reference - if (end !== 0) { - // fragment doesn't exist. - if (end === -1) { - other = additionalSchemas[ptr] - } else { - var ext = ptr.slice(0, end) - other = additionalSchemas[ext] - var fragment = ptr.slice(end).replace(/^#/, '') - try { - return jsonpointer.get(other, fragment) - } catch (err) {} - } - } else { - other = additionalSchemas[ptr] - } - return other || null - } -} - -var formatName = function(field) { - field = JSON.stringify(field) - var pattern = /\[([^\[\]"]+)\]/ - while (pattern.test(field)) field = field.replace(pattern, '."+$1+"') - return field -} - -var types = {} - -types.any = function() { - return 'true' -} - -types.null = function(name) { - return name+' === null' -} - -types.boolean = function(name) { - return 'typeof '+name+' === "boolean"' -} - -types.array = function(name) { - return 'Array.isArray('+name+')' -} - -types.object = function(name) { - return 'typeof '+name+' === "object" && '+name+' && !Array.isArray('+name+')' -} - -types.number = function(name) { - return 'typeof '+name+' === "number"' -} - -types.integer = function(name) { - return 'typeof '+name+' === "number" && (Math.floor('+name+') === '+name+' || '+name+' > 9007199254740992 || '+name+' < -9007199254740992)' -} - -types.string = function(name) { - return 'typeof '+name+' === "string"' -} - -var unique = function(array) { - var list = [] - for (var i = 0; i < array.length; i++) { - list.push(typeof array[i] === 'object' ? JSON.stringify(array[i]) : array[i]) - } - for (var i = 1; i < list.length; i++) { - if (list.indexOf(list[i]) !== i) return false - } - return true -} - -var isMultipleOf = function(name, multipleOf) { - var res; - var factor = ((multipleOf | 0) !== multipleOf) ? Math.pow(10, multipleOf.toString().split('.').pop().length) : 1 - if (factor > 1) { - var factorName = ((name | 0) !== name) ? Math.pow(10, name.toString().split('.').pop().length) : 1 - if (factorName > factor) res = true - else res = Math.round(factor * name) % (factor * multipleOf) - } - else res = name % multipleOf; - return !res; -} - -var toType = function(node) { - return node.type -} - -var compile = function(schema, cache, root, reporter, opts) { - var fmts = opts ? xtend(formats, opts.formats) : formats - var scope = {unique:unique, formats:fmts, isMultipleOf:isMultipleOf} - var verbose = opts ? !!opts.verbose : false; - var greedy = opts && opts.greedy !== undefined ? - opts.greedy : false; - - var syms = {} - var gensym = function(name) { - return name+(syms[name] = (syms[name] || 0)+1) - } - - var reversePatterns = {} - var patterns = function(p) { - if (reversePatterns[p]) return reversePatterns[p] - var n = gensym('pattern') - scope[n] = new RegExp(p) - reversePatterns[p] = n - return n - } - - var vars = ['i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z'] - var genloop = function() { - var v = vars.shift() - vars.push(v+v[0]) - return v - } - - var visit = function(name, node, reporter, filter) { - var properties = node.properties - var type = node.type - var tuple = false - - if (Array.isArray(node.items)) { // tuple type - properties = {} - node.items.forEach(function(item, i) { - properties[i] = item - }) - type = 'array' - tuple = true - } - - var indent = 0 - var error = function(msg, prop, value) { - validate('errors++') - if (reporter === true) { - validate('if (validate.errors === null) validate.errors = []') - if (verbose) { - validate('validate.errors.push({field:%s,message:%s,value:%s,type:%s})', formatName(prop || name), JSON.stringify(msg), value || name, JSON.stringify(type)) - } else { - validate('validate.errors.push({field:%s,message:%s})', formatName(prop || name), JSON.stringify(msg)) - } - } - } - - if (node.required === true) { - indent++ - validate('if (%s === undefined) {', name) - error('is required') - validate('} else {') - } else { - indent++ - validate('if (%s !== undefined) {', name) - } - - var valid = [].concat(type) - .map(function(t) { - return types[t || 'any'](name) - }) - .join(' || ') || 'true' - - if (valid !== 'true') { - indent++ - validate('if (!(%s)) {', valid) - error('is the wrong type') - validate('} else {') - } - - if (tuple) { - if (node.additionalItems === false) { - validate('if (%s.length > %d) {', name, node.items.length) - error('has additional items') - validate('}') - } else if (node.additionalItems) { - var i = genloop() - validate('for (var %s = %d; %s < %s.length; %s++) {', i, node.items.length, i, name, i) - visit(name+'['+i+']', node.additionalItems, reporter, filter) - validate('}') - } - } - - if (node.format && fmts[node.format]) { - if (type !== 'string' && formats[node.format]) validate('if (%s) {', types.string(name)) - var n = gensym('format') - scope[n] = fmts[node.format] - - if (typeof scope[n] === 'function') validate('if (!%s(%s)) {', n, name) - else validate('if (!%s.test(%s)) {', n, name) - error('must be '+node.format+' format') - validate('}') - if (type !== 'string' && formats[node.format]) validate('}') - } - - if (Array.isArray(node.required)) { - var isUndefined = function(req) { - return genobj(name, req) + ' === undefined' - } - - var checkRequired = function (req) { - var prop = genobj(name, req); - validate('if (%s === undefined) {', prop) - error('is required', prop) - validate('missing++') - validate('}') - } - validate('if ((%s)) {', type !== 'object' ? types.object(name) : 'true') - validate('var missing = 0') - node.required.map(checkRequired) - validate('}'); - if (!greedy) { - validate('if (missing === 0) {') - indent++ - } - } - - if (node.uniqueItems) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - validate('if (!(unique(%s))) {', name) - error('must be unique') - validate('}') - if (type !== 'array') validate('}') - } - - if (node.enum) { - var complex = node.enum.some(function(e) { - return typeof e === 'object' - }) - - var compare = complex ? - function(e) { - return 'JSON.stringify('+name+')'+' !== JSON.stringify('+JSON.stringify(e)+')' - } : - function(e) { - return name+' !== '+JSON.stringify(e) - } - - validate('if (%s) {', node.enum.map(compare).join(' && ') || 'false') - error('must be an enum value') - validate('}') - } - - if (node.dependencies) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - - Object.keys(node.dependencies).forEach(function(key) { - var deps = node.dependencies[key] - if (typeof deps === 'string') deps = [deps] - - var exists = function(k) { - return genobj(name, k) + ' !== undefined' - } - - if (Array.isArray(deps)) { - validate('if (%s !== undefined && !(%s)) {', genobj(name, key), deps.map(exists).join(' && ') || 'true') - error('dependencies not set') - validate('}') - } - if (typeof deps === 'object') { - validate('if (%s !== undefined) {', genobj(name, key)) - visit(name, deps, reporter, filter) - validate('}') - } - }) - - if (type !== 'object') validate('}') - } - - if (node.additionalProperties || node.additionalProperties === false) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - - var i = genloop() - var keys = gensym('keys') - - var toCompare = function(p) { - return keys+'['+i+'] !== '+JSON.stringify(p) - } - - var toTest = function(p) { - return '!'+patterns(p)+'.test('+keys+'['+i+'])' - } - - var additionalProp = Object.keys(properties || {}).map(toCompare) - .concat(Object.keys(node.patternProperties || {}).map(toTest)) - .join(' && ') || 'true' - - validate('var %s = Object.keys(%s)', keys, name) - ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) - ('if (%s) {', additionalProp) - - if (node.additionalProperties === false) { - if (filter) validate('delete %s', name+'['+keys+'['+i+']]') - error('has additional properties', null, JSON.stringify(name+'.') + ' + ' + keys + '['+i+']') - } else { - visit(name+'['+keys+'['+i+']]', node.additionalProperties, reporter, filter) - } - - validate - ('}') - ('}') - - if (type !== 'object') validate('}') - } - - if (node.$ref) { - var sub = get(root, opts && opts.schemas || {}, node.$ref) - if (sub) { - var fn = cache[node.$ref] - if (!fn) { - cache[node.$ref] = function proxy(data) { - return fn(data) - } - fn = compile(sub, cache, root, false, opts) - } - var n = gensym('ref') - scope[n] = fn - validate('if (!(%s(%s))) {', n, name) - error('referenced schema does not match') - validate('}') - } - } - - if (node.not) { - var prev = gensym('prev') - validate('var %s = errors', prev) - visit(name, node.not, false, filter) - validate('if (%s === errors) {', prev) - error('negative schema matches') - validate('} else {') - ('errors = %s', prev) - ('}') - } - - if (node.items && !tuple) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - - var i = genloop() - validate('for (var %s = 0; %s < %s.length; %s++) {', i, i, name, i) - visit(name+'['+i+']', node.items, reporter, filter) - validate('}') - - if (type !== 'array') validate('}') - } - - if (node.patternProperties) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - var keys = gensym('keys') - var i = genloop() - validate - ('var %s = Object.keys(%s)', keys, name) - ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) - - Object.keys(node.patternProperties).forEach(function(key) { - var p = patterns(key) - validate('if (%s.test(%s)) {', p, keys+'['+i+']') - visit(name+'['+keys+'['+i+']]', node.patternProperties[key], reporter, filter) - validate('}') - }) - - validate('}') - if (type !== 'object') validate('}') - } - - if (node.pattern) { - var p = patterns(node.pattern) - if (type !== 'string') validate('if (%s) {', types.string(name)) - validate('if (!(%s.test(%s))) {', p, name) - error('pattern mismatch') - validate('}') - if (type !== 'string') validate('}') - } - - if (node.allOf) { - node.allOf.forEach(function(sch) { - visit(name, sch, reporter, filter) - }) - } - - if (node.anyOf && node.anyOf.length) { - var prev = gensym('prev') - - node.anyOf.forEach(function(sch, i) { - if (i === 0) { - validate('var %s = errors', prev) - } else { - validate('if (errors !== %s) {', prev) - ('errors = %s', prev) - } - visit(name, sch, false, false) - }) - node.anyOf.forEach(function(sch, i) { - if (i) validate('}') - }) - validate('if (%s !== errors) {', prev) - error('no schemas match') - validate('}') - } - - if (node.oneOf && node.oneOf.length) { - var prev = gensym('prev') - var passes = gensym('passes') - - validate - ('var %s = errors', prev) - ('var %s = 0', passes) - - node.oneOf.forEach(function(sch, i) { - visit(name, sch, false, false) - validate('if (%s === errors) {', prev) - ('%s++', passes) - ('} else {') - ('errors = %s', prev) - ('}') - }) - - validate('if (%s !== 1) {', passes) - error('no (or more than one) schemas match') - validate('}') - } - - if (node.multipleOf !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) - - validate('if (!isMultipleOf(%s, %d)) {', name, node.multipleOf) - - error('has a remainder') - validate('}') - - if (type !== 'number' && type !== 'integer') validate('}') - } - - if (node.maxProperties !== undefined) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - - validate('if (Object.keys(%s).length > %d) {', name, node.maxProperties) - error('has more properties than allowed') - validate('}') - - if (type !== 'object') validate('}') - } - - if (node.minProperties !== undefined) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - - validate('if (Object.keys(%s).length < %d) {', name, node.minProperties) - error('has less properties than allowed') - validate('}') - - if (type !== 'object') validate('}') - } - - if (node.maxItems !== undefined) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - - validate('if (%s.length > %d) {', name, node.maxItems) - error('has more items than allowed') - validate('}') - - if (type !== 'array') validate('}') - } - - if (node.minItems !== undefined) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - - validate('if (%s.length < %d) {', name, node.minItems) - error('has less items than allowed') - validate('}') - - if (type !== 'array') validate('}') - } - - if (node.maxLength !== undefined) { - if (type !== 'string') validate('if (%s) {', types.string(name)) - - validate('if (%s.length > %d) {', name, node.maxLength) - error('has longer length than allowed') - validate('}') - - if (type !== 'string') validate('}') - } - - if (node.minLength !== undefined) { - if (type !== 'string') validate('if (%s) {', types.string(name)) - - validate('if (%s.length < %d) {', name, node.minLength) - error('has less length than allowed') - validate('}') - - if (type !== 'string') validate('}') - } - - if (node.minimum !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) - - validate('if (%s %s %d) {', name, node.exclusiveMinimum ? '<=' : '<', node.minimum) - error('is less than minimum') - validate('}') - - if (type !== 'number' && type !== 'integer') validate('}') - } - - if (node.maximum !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) - - validate('if (%s %s %d) {', name, node.exclusiveMaximum ? '>=' : '>', node.maximum) - error('is more than maximum') - validate('}') - - if (type !== 'number' && type !== 'integer') validate('}') - } - - if (properties) { - Object.keys(properties).forEach(function(p) { - if (Array.isArray(type) && type.indexOf('null') !== -1) validate('if (%s !== null) {', name) - - visit(genobj(name, p), properties[p], reporter, filter) - - if (Array.isArray(type) && type.indexOf('null') !== -1) validate('}') - }) - } - - while (indent--) validate('}') - } - - var validate = genfun - ('function validate(data) {') - // Since undefined is not a valid JSON value, we coerce to null and other checks will catch this - ('if (data === undefined) data = null') - ('validate.errors = null') - ('var errors = 0') - - visit('data', schema, reporter, opts && opts.filter) - - validate - ('return errors === 0') - ('}') - - validate = validate.toFunction(scope) - validate.errors = null - - if (Object.defineProperty) { - Object.defineProperty(validate, 'error', { - get: function() { - if (!validate.errors) return '' - return validate.errors.map(function(err) { - return err.field + ' ' + err.message; - }).join('\n') - } - }) - } - - validate.toJSON = function() { - return schema - } - - return validate -} - -module.exports = function(schema, opts) { - if (typeof schema === 'string') schema = JSON.parse(schema) - return compile(schema, {}, schema, true, opts) -} - -module.exports.filter = function(schema, opts) { - var validate = module.exports(schema, xtend(opts, {filter: true})) - return function(sch) { - validate(sch) - return sch - } -} diff --git a/node_modules/is-my-json-valid/node_modules/xtend/.jshintrc b/node_modules/is-my-json-valid/node_modules/xtend/.jshintrc deleted file mode 100644 index 77887b5..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/.jshintrc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "maxdepth": 4, - "maxstatements": 200, - "maxcomplexity": 12, - "maxlen": 80, - "maxparams": 5, - - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": false, - "noarg": true, - "noempty": true, - "nonew": true, - "undef": true, - "unused": "vars", - "trailing": true, - - "quotmark": true, - "expr": true, - "asi": true, - - "browser": false, - "esnext": true, - "devel": false, - "node": false, - "nonstandard": false, - - "predef": ["require", "module", "__dirname", "__filename"] -} diff --git a/node_modules/is-my-json-valid/node_modules/xtend/.npmignore b/node_modules/is-my-json-valid/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/is-my-json-valid/node_modules/xtend/LICENCE b/node_modules/is-my-json-valid/node_modules/xtend/LICENCE deleted file mode 100644 index 1a14b43..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/is-my-json-valid/node_modules/xtend/Makefile b/node_modules/is-my-json-valid/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/is-my-json-valid/node_modules/xtend/README.md b/node_modules/is-my-json-valid/node_modules/xtend/README.md deleted file mode 100644 index 093cb29..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# xtend - -[![browser support][3]][4] - -[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Extend like a boss - -xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. - -## Examples - -```js -var extend = require("xtend") - -// extend returns a new object. Does not mutate arguments -var combination = extend({ - a: "a", - b: 'c' -}, { - b: "b" -}) -// { a: "a", b: "b" } -``` - -## Stability status: Locked - -## MIT Licenced - - - [3]: http://ci.testling.com/Raynos/xtend.png - [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/is-my-json-valid/node_modules/xtend/immutable.js b/node_modules/is-my-json-valid/node_modules/xtend/immutable.js deleted file mode 100644 index 94889c9..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/immutable.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/is-my-json-valid/node_modules/xtend/mutable.js b/node_modules/is-my-json-valid/node_modules/xtend/mutable.js deleted file mode 100644 index 72debed..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/mutable.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/is-my-json-valid/node_modules/xtend/package.json b/node_modules/is-my-json-valid/node_modules/xtend/package.json deleted file mode 100644 index b825756..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "xtend@^4.0.0", - "/Users/jbaylina/git/MVP/node_modules/is-my-json-valid" - ] - ], - "_from": "xtend@>=4.0.0 <5.0.0", - "_id": "xtend@4.0.1", - "_inCache": true, - "_installable": true, - "_location": "/is-my-json-valid/xtend", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - "_npmVersion": "2.14.1", - "_phantomChildren": {}, - "_requested": { - "name": "xtend", - "raw": "xtend@^4.0.0", - "rawSpec": "^4.0.0", - "scope": null, - "spec": ">=4.0.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/is-my-json-valid" - ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "_shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "_shrinkwrap": null, - "_spec": "xtend@^4.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/is-my-json-valid", - "author": { - "email": "raynos2@gmail.com", - "name": "Raynos" - }, - "bugs": { - "email": "raynos2@gmail.com", - "url": "https://github.com/Raynos/xtend/issues" - }, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Matt Esch" - } - ], - "dependencies": {}, - "description": "extend like a boss", - "devDependencies": { - "tape": "~1.1.0" - }, - "directories": {}, - "dist": { - "shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "tarball": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - }, - "engines": { - "node": ">=0.4" - }, - "gitHead": "23dc302a89756da89c1897bc732a752317e35390", - "homepage": "https://github.com/Raynos/xtend", - "keywords": [ - "extend", - "merge", - "options", - "opts", - "object", - "array" - ], - "license": "MIT", - "main": "immutable", - "maintainers": [ - { - "email": "raynos2@gmail.com", - "name": "raynos" - } - ], - "name": "xtend", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xtend.git" - }, - "scripts": { - "test": "node test" - }, - "testling": { - "browsers": [ - "ie/7..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ], - "files": "test.js" - }, - "version": "4.0.1" -} diff --git a/node_modules/is-my-json-valid/node_modules/xtend/test.js b/node_modules/is-my-json-valid/node_modules/xtend/test.js deleted file mode 100644 index 093a2b0..0000000 --- a/node_modules/is-my-json-valid/node_modules/xtend/test.js +++ /dev/null @@ -1,83 +0,0 @@ -var test = require("tape") -var extend = require("./") -var mutableExtend = require("./mutable") - -test("merge", function(assert) { - var a = { a: "foo" } - var b = { b: "bar" } - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("replace", function(assert) { - var a = { a: "foo" } - var b = { a: "bar" } - - assert.deepEqual(extend(a, b), { a: "bar" }) - assert.end() -}) - -test("undefined", function(assert) { - var a = { a: undefined } - var b = { b: "foo" } - - assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) - assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) - assert.end() -}) - -test("handle 0", function(assert) { - var a = { a: "default" } - var b = { a: 0 } - - assert.deepEqual(extend(a, b), { a: 0 }) - assert.deepEqual(extend(b, a), { a: "default" }) - assert.end() -}) - -test("is immutable", function (assert) { - var record = {} - - extend(record, { foo: "bar" }) - assert.equal(record.foo, undefined) - assert.end() -}) - -test("null as argument", function (assert) { - var a = { foo: "bar" } - var b = null - var c = void 0 - - assert.deepEqual(extend(b, a, c), { foo: "bar" }) - assert.end() -}) - -test("mutable", function (assert) { - var a = { foo: "bar" } - - mutableExtend(a, { bar: "baz" }) - - assert.equal(a.bar, "baz") - assert.end() -}) - -test("null prototype", function(assert) { - var a = { a: "foo" } - var b = Object.create(null) - b.b = "bar"; - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("null prototype mutable", function (assert) { - var a = { foo: "bar" } - var b = Object.create(null) - b.bar = "baz"; - - mutableExtend(a, b) - - assert.equal(a.bar, "baz") - assert.end() -}) diff --git a/node_modules/is-my-json-valid/package.json b/node_modules/is-my-json-valid/package.json deleted file mode 100644 index edd3261..0000000 --- a/node_modules/is-my-json-valid/package.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "_args": [ - [ - "is-my-json-valid@^2.12.4", - "/Users/jbaylina/git/MVP/node_modules/har-validator" - ] - ], - "_from": "is-my-json-valid@>=2.12.4 <3.0.0", - "_id": "is-my-json-valid@2.15.0", - "_inCache": true, - "_installable": true, - "_location": "/is-my-json-valid", - "_nodeVersion": "4.2.6", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/is-my-json-valid-2.15.0.tgz_1475420473174_0.8758093405049294" - }, - "_npmUser": { - "email": "mathiasbuus@gmail.com", - "name": "mafintosh" - }, - "_npmVersion": "2.14.12", - "_phantomChildren": {}, - "_requested": { - "name": "is-my-json-valid", - "raw": "is-my-json-valid@^2.12.4", - "rawSpec": "^2.12.4", - "scope": null, - "spec": ">=2.12.4 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/har-validator" - ], - "_resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", - "_shasum": "936edda3ca3c211fd98f3b2d3e08da43f7b2915b", - "_shrinkwrap": null, - "_spec": "is-my-json-valid@^2.12.4", - "_where": "/Users/jbaylina/git/MVP/node_modules/har-validator", - "author": { - "name": "Mathias Buus" - }, - "bugs": { - "url": "https://github.com/mafintosh/is-my-json-valid/issues" - }, - "dependencies": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - }, - "description": "A JSONSchema validator that uses code generation to be extremely fast", - "devDependencies": { - "tape": "^2.13.4" - }, - "directories": {}, - "dist": { - "shasum": "936edda3ca3c211fd98f3b2d3e08da43f7b2915b", - "tarball": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz" - }, - "gitHead": "c4da71bf1e57083d2dac6e7d123d2e8bd6b9255e", - "homepage": "https://github.com/mafintosh/is-my-json-valid", - "keywords": [ - "json", - "schema", - "orderly", - "jsonschema" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@tixz.dk", - "name": "emilbay" - }, - { - "email": "github@tixz.dk", - "name": "emilbayes" - }, - { - "email": "freeall@gmail.com", - "name": "freeall" - }, - { - "email": "mathiasbuus@gmail.com", - "name": "mafintosh" - }, - { - "email": "w@tson.dk", - "name": "watson" - }, - { - "email": "i@yoshuawuyts.com", - "name": "yoshuawuyts" - } - ], - "name": "is-my-json-valid", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mafintosh/is-my-json-valid.git" - }, - "scripts": { - "test": "tape test/*.js" - }, - "version": "2.15.0" -} diff --git a/node_modules/is-my-json-valid/require.js b/node_modules/is-my-json-valid/require.js deleted file mode 100644 index 0bfb8a2..0000000 --- a/node_modules/is-my-json-valid/require.js +++ /dev/null @@ -1,12 +0,0 @@ -var fs = require('fs') -var path = require('path') -var compile = require('./') - -delete require.cache[require.resolve(__filename)] - -module.exports = function(file, opts) { - file = path.join(path.dirname(module.parent.filename), file) - if (!fs.existsSync(file) && fs.existsSync(file+'.schema')) file += '.schema' - if (!fs.existsSync(file) && fs.existsSync(file+'.json')) file += '.json' - return compile(fs.readFileSync(file, 'utf-8'), opts) -} diff --git a/node_modules/is-my-json-valid/test/fixtures/cosmic.js b/node_modules/is-my-json-valid/test/fixtures/cosmic.js deleted file mode 100644 index 4e0a34b..0000000 --- a/node_modules/is-my-json-valid/test/fixtures/cosmic.js +++ /dev/null @@ -1,84 +0,0 @@ -exports.valid = { - fullName : "John Doe", - age : 47, - state : "Massachusetts", - city : "Boston", - zip : 16417, - married : false, - dozen : 12, - dozenOrBakersDozen : 13, - favoriteEvenNumber : 14, - topThreeFavoriteColors : [ "red", "blue", "green" ], - favoriteSingleDigitWholeNumbers : [ 7 ], - favoriteFiveLetterWord : "coder", - emailAddresses : - [ - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@letters-in-local.org", - "01234567890@numbers-in-local.net", - "&'*+-./=?^_{}~@other-valid-characters-in-local.net", - "mixed-1234-in-{+^}-local@sld.net", - "a@single-character-in-local.org", - "\"quoted\"@sld.com", - "\"\\e\\s\\c\\a\\p\\e\\d\"@sld.com", - "\"quoted-at-sign@sld.org\"@sld.com", - "\"escaped\\\"quote\"@sld.com", - "\"back\\slash\"@sld.com", - "one-character-third-level@a.example.com", - "single-character-in-sld@x.org", - "local@dash-in-sld.com", - "letters-in-sld@123.com", - "one-letter-sld@x.org", - "uncommon-tld@sld.museum", - "uncommon-tld@sld.travel", - "uncommon-tld@sld.mobi", - "country-code-tld@sld.uk", - "country-code-tld@sld.rw", - "local@sld.newTLD", - "the-total-length@of-an-entire-address.cannot-be-longer-than-two-hundred-and-fifty-four-characters.and-this-address-is-254-characters-exactly.so-it-should-be-valid.and-im-going-to-add-some-more-words-here.to-increase-the-lenght-blah-blah-blah-blah-bla.org", - "the-character-limit@for-each-part.of-the-domain.is-sixty-three-characters.this-is-exactly-sixty-three-characters-so-it-is-valid-blah-blah.com", - "local@sub.domains.com" - ], - ipAddresses : [ "127.0.0.1", "24.48.64.2", "192.168.1.1", "209.68.44.3", "2.2.2.2" ] -} - -exports.invalid = { - fullName : null, - age : -1, - state : 47, - city : false, - zip : [null], - married : "yes", - dozen : 50, - dozenOrBakersDozen : "over 9000", - favoriteEvenNumber : 15, - topThreeFavoriteColors : [ "red", 5 ], - favoriteSingleDigitWholeNumbers : [ 78, 2, 999 ], - favoriteFiveLetterWord : "codernaut", - emailAddresses : [], - ipAddresses : [ "999.0.099.1", "294.48.64.2346", false, "2221409.64214128.42414.235233", "124124.12412412" ] -} - -exports.schema = { // from cosmic thingy - name : "test", - type : "object", - additionalProperties : false, - required : ["fullName", "age", "zip", "married", "dozen", "dozenOrBakersDozen", "favoriteEvenNumber", "topThreeFavoriteColors", "favoriteSingleDigitWholeNumbers", "favoriteFiveLetterWord", "emailAddresses", "ipAddresses"], - properties : - { - fullName : { type : "string" }, - age : { type : "integer", minimum : 0 }, - optionalItem : { type : "string" }, - state : { type : "string" }, - city : { type : "string" }, - zip : { type : "integer", minimum : 0, maximum : 99999 }, - married : { type : "boolean" }, - dozen : { type : "integer", minimum : 12, maximum : 12 }, - dozenOrBakersDozen : { type : "integer", minimum : 12, maximum : 13 }, - favoriteEvenNumber : { type : "integer", multipleOf : 2 }, - topThreeFavoriteColors : { type : "array", minItems : 3, maxItems : 3, uniqueItems : true, items : { type : "string" }}, - favoriteSingleDigitWholeNumbers : { type : "array", minItems : 1, maxItems : 10, uniqueItems : true, items : { type : "integer", minimum : 0, maximum : 9 }}, - favoriteFiveLetterWord : { type : "string", minLength : 5, maxLength : 5 }, - emailAddresses : { type : "array", minItems : 1, uniqueItems : true, items : { type : "string", format : "email" }}, - ipAddresses : { type : "array", uniqueItems : true, items : { type : "string", format : "ipv4" }}, - } - } \ No newline at end of file diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/additionalItems.json b/node_modules/is-my-json-valid/test/json-schema-draft4/additionalItems.json deleted file mode 100644 index 521745c..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/additionalItems.json +++ /dev/null @@ -1,82 +0,0 @@ -[ - { - "description": "additionalItems as schema", - "schema": { - "items": [{}], - "additionalItems": {"type": "integer"} - }, - "tests": [ - { - "description": "additional items match schema", - "data": [ null, 2, 3, 4 ], - "valid": true - }, - { - "description": "additional items do not match schema", - "data": [ null, 2, 3, "foo" ], - "valid": false - } - ] - }, - { - "description": "items is schema, no additionalItems", - "schema": { - "items": {}, - "additionalItems": false - }, - "tests": [ - { - "description": "all items match schema", - "data": [ 1, 2, 3, 4, 5 ], - "valid": true - } - ] - }, - { - "description": "array of items with no additionalItems", - "schema": { - "items": [{}, {}, {}], - "additionalItems": false - }, - "tests": [ - { - "description": "no additional items present", - "data": [ 1, 2, 3 ], - "valid": true - }, - { - "description": "additional items are not permitted", - "data": [ 1, 2, 3, 4 ], - "valid": false - } - ] - }, - { - "description": "additionalItems as false without items", - "schema": {"additionalItems": false}, - "tests": [ - { - "description": - "items defaults to empty schema so everything is valid", - "data": [ 1, 2, 3, 4, 5 ], - "valid": true - }, - { - "description": "ignores non-arrays", - "data": {"foo" : "bar"}, - "valid": true - } - ] - }, - { - "description": "additionalItems are allowed by default", - "schema": {"items": [{"type": "integer"}]}, - "tests": [ - { - "description": "only the first item is validated", - "data": [1, "foo", false], - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/additionalProperties.json b/node_modules/is-my-json-valid/test/json-schema-draft4/additionalProperties.json deleted file mode 100644 index 40831f9..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/additionalProperties.json +++ /dev/null @@ -1,88 +0,0 @@ -[ - { - "description": - "additionalProperties being false does not allow other properties", - "schema": { - "properties": {"foo": {}, "bar": {}}, - "patternProperties": { "^v": {} }, - "additionalProperties": false - }, - "tests": [ - { - "description": "no additional properties is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "an additional property is invalid", - "data": {"foo" : 1, "bar" : 2, "quux" : "boom"}, - "valid": false - }, - { - "description": "ignores non-objects", - "data": [1, 2, 3], - "valid": true - }, - { - "description": "patternProperties are not additional properties", - "data": {"foo":1, "vroom": 2}, - "valid": true - } - ] - }, - { - "description": - "additionalProperties allows a schema which should validate", - "schema": { - "properties": {"foo": {}, "bar": {}}, - "additionalProperties": {"type": "boolean"} - }, - "tests": [ - { - "description": "no additional properties is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "an additional valid property is valid", - "data": {"foo" : 1, "bar" : 2, "quux" : true}, - "valid": true - }, - { - "description": "an additional invalid property is invalid", - "data": {"foo" : 1, "bar" : 2, "quux" : 12}, - "valid": false - } - ] - }, - { - "description": - "additionalProperties can exist by itself", - "schema": { - "additionalProperties": {"type": "boolean"} - }, - "tests": [ - { - "description": "an additional valid property is valid", - "data": {"foo" : true}, - "valid": true - }, - { - "description": "an additional invalid property is invalid", - "data": {"foo" : 1}, - "valid": false - } - ] - }, - { - "description": "additionalProperties are allowed by default", - "schema": {"properties": {"foo": {}, "bar": {}}}, - "tests": [ - { - "description": "additional properties are allowed", - "data": {"foo": 1, "bar": 2, "quux": true}, - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/allOf.json b/node_modules/is-my-json-valid/test/json-schema-draft4/allOf.json deleted file mode 100644 index bbb5f89..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/allOf.json +++ /dev/null @@ -1,112 +0,0 @@ -[ - { - "description": "allOf", - "schema": { - "allOf": [ - { - "properties": { - "bar": {"type": "integer"} - }, - "required": ["bar"] - }, - { - "properties": { - "foo": {"type": "string"} - }, - "required": ["foo"] - } - ] - }, - "tests": [ - { - "description": "allOf", - "data": {"foo": "baz", "bar": 2}, - "valid": true - }, - { - "description": "mismatch second", - "data": {"foo": "baz"}, - "valid": false - }, - { - "description": "mismatch first", - "data": {"bar": 2}, - "valid": false - }, - { - "description": "wrong type", - "data": {"foo": "baz", "bar": "quux"}, - "valid": false - } - ] - }, - { - "description": "allOf with base schema", - "schema": { - "properties": {"bar": {"type": "integer"}}, - "required": ["bar"], - "allOf" : [ - { - "properties": { - "foo": {"type": "string"} - }, - "required": ["foo"] - }, - { - "properties": { - "baz": {"type": "null"} - }, - "required": ["baz"] - } - ] - }, - "tests": [ - { - "description": "valid", - "data": {"foo": "quux", "bar": 2, "baz": null}, - "valid": true - }, - { - "description": "mismatch base schema", - "data": {"foo": "quux", "baz": null}, - "valid": false - }, - { - "description": "mismatch first allOf", - "data": {"bar": 2, "baz": null}, - "valid": false - }, - { - "description": "mismatch second allOf", - "data": {"foo": "quux", "bar": 2}, - "valid": false - }, - { - "description": "mismatch both", - "data": {"bar": 2}, - "valid": false - } - ] - }, - { - "description": "allOf simple types", - "schema": { - "allOf": [ - {"maximum": 30}, - {"minimum": 20} - ] - }, - "tests": [ - { - "description": "valid", - "data": 25, - "valid": true - }, - { - "description": "mismatch one", - "data": 35, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/anyOf.json b/node_modules/is-my-json-valid/test/json-schema-draft4/anyOf.json deleted file mode 100644 index a58714a..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/anyOf.json +++ /dev/null @@ -1,68 +0,0 @@ -[ - { - "description": "anyOf", - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "minimum": 2 - } - ] - }, - "tests": [ - { - "description": "first anyOf valid", - "data": 1, - "valid": true - }, - { - "description": "second anyOf valid", - "data": 2.5, - "valid": true - }, - { - "description": "both anyOf valid", - "data": 3, - "valid": true - }, - { - "description": "neither anyOf valid", - "data": 1.5, - "valid": false - } - ] - }, - { - "description": "anyOf with base schema", - "schema": { - "type": "string", - "anyOf" : [ - { - "maxLength": 2 - }, - { - "minLength": 4 - } - ] - }, - "tests": [ - { - "description": "mismatch base schema", - "data": 3, - "valid": false - }, - { - "description": "one anyOf valid", - "data": "foobar", - "valid": true - }, - { - "description": "both anyOf invalid", - "data": "foo", - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/bignum.json b/node_modules/is-my-json-valid/test/json-schema-draft4/bignum.json deleted file mode 100644 index ccc7c17..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/bignum.json +++ /dev/null @@ -1,107 +0,0 @@ -[ - { - "description": "integer", - "schema": {"type": "integer"}, - "tests": [ - { - "description": "a bignum is an integer", - "data": 12345678910111213141516171819202122232425262728293031, - "valid": true - } - ] - }, - { - "description": "number", - "schema": {"type": "number"}, - "tests": [ - { - "description": "a bignum is a number", - "data": 98249283749234923498293171823948729348710298301928331, - "valid": true - } - ] - }, - { - "description": "integer", - "schema": {"type": "integer"}, - "tests": [ - { - "description": "a negative bignum is an integer", - "data": -12345678910111213141516171819202122232425262728293031, - "valid": true - } - ] - }, - { - "description": "number", - "schema": {"type": "number"}, - "tests": [ - { - "description": "a negative bignum is a number", - "data": -98249283749234923498293171823948729348710298301928331, - "valid": true - } - ] - }, - { - "description": "string", - "schema": {"type": "string"}, - "tests": [ - { - "description": "a bignum is not a string", - "data": 98249283749234923498293171823948729348710298301928331, - "valid": false - } - ] - }, - { - "description": "integer comparison", - "schema": {"maximum": 18446744073709551615}, - "tests": [ - { - "description": "comparison works for high numbers", - "data": 18446744073709551600, - "valid": true - } - ] - }, - { - "description": "float comparison with high precision", - "schema": { - "maximum": 972783798187987123879878123.18878137, - "exclusiveMaximum": true - }, - "tests": [ - { - "description": "comparison works for high numbers", - "data": 972783798187987123879878123.188781371, - "valid": false - } - ] - }, - { - "description": "integer comparison", - "schema": {"minimum": -18446744073709551615}, - "tests": [ - { - "description": "comparison works for very negative numbers", - "data": -18446744073709551600, - "valid": true - } - ] - }, - { - "description": "float comparison with high precision on negative numbers", - "schema": { - "minimum": -972783798187987123879878123.18878137, - "exclusiveMinimum": true - }, - "tests": [ - { - "description": "comparison works for very negative numbers", - "data": -972783798187987123879878123.188781371, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/default.json b/node_modules/is-my-json-valid/test/json-schema-draft4/default.json deleted file mode 100644 index 1762977..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/default.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "description": "invalid type for default", - "schema": { - "properties": { - "foo": { - "type": "integer", - "default": [] - } - } - }, - "tests": [ - { - "description": "valid when property is specified", - "data": {"foo": 13}, - "valid": true - }, - { - "description": "still valid when the invalid default is used", - "data": {}, - "valid": true - } - ] - }, - { - "description": "invalid string value for default", - "schema": { - "properties": { - "bar": { - "type": "string", - "minLength": 4, - "default": "bad" - } - } - }, - "tests": [ - { - "description": "valid when property is specified", - "data": {"bar": "good"}, - "valid": true - }, - { - "description": "still valid when the invalid default is used", - "data": {}, - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/definitions.json b/node_modules/is-my-json-valid/test/json-schema-draft4/definitions.json deleted file mode 100644 index cf935a3..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/definitions.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "description": "valid definition", - "schema": {"$ref": "http://json-schema.org/draft-04/schema#"}, - "tests": [ - { - "description": "valid definition schema", - "data": { - "definitions": { - "foo": {"type": "integer"} - } - }, - "valid": true - } - ] - }, - { - "description": "invalid definition", - "schema": {"$ref": "http://json-schema.org/draft-04/schema#"}, - "tests": [ - { - "description": "invalid definition schema", - "data": { - "definitions": { - "foo": {"type": 1} - } - }, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/dependencies.json b/node_modules/is-my-json-valid/test/json-schema-draft4/dependencies.json deleted file mode 100644 index 7b9b16a..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/dependencies.json +++ /dev/null @@ -1,113 +0,0 @@ -[ - { - "description": "dependencies", - "schema": { - "dependencies": {"bar": ["foo"]} - }, - "tests": [ - { - "description": "neither", - "data": {}, - "valid": true - }, - { - "description": "nondependant", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "with dependency", - "data": {"foo": 1, "bar": 2}, - "valid": true - }, - { - "description": "missing dependency", - "data": {"bar": 2}, - "valid": false - }, - { - "description": "ignores non-objects", - "data": "foo", - "valid": true - } - ] - }, - { - "description": "multiple dependencies", - "schema": { - "dependencies": {"quux": ["foo", "bar"]} - }, - "tests": [ - { - "description": "neither", - "data": {}, - "valid": true - }, - { - "description": "nondependants", - "data": {"foo": 1, "bar": 2}, - "valid": true - }, - { - "description": "with dependencies", - "data": {"foo": 1, "bar": 2, "quux": 3}, - "valid": true - }, - { - "description": "missing dependency", - "data": {"foo": 1, "quux": 2}, - "valid": false - }, - { - "description": "missing other dependency", - "data": {"bar": 1, "quux": 2}, - "valid": false - }, - { - "description": "missing both dependencies", - "data": {"quux": 1}, - "valid": false - } - ] - }, - { - "description": "multiple dependencies subschema", - "schema": { - "dependencies": { - "bar": { - "properties": { - "foo": {"type": "integer"}, - "bar": {"type": "integer"} - } - } - } - }, - "tests": [ - { - "description": "valid", - "data": {"foo": 1, "bar": 2}, - "valid": true - }, - { - "description": "no dependency", - "data": {"foo": "quux"}, - "valid": true - }, - { - "description": "wrong type", - "data": {"foo": "quux", "bar": 2}, - "valid": false - }, - { - "description": "wrong type other", - "data": {"foo": 2, "bar": "quux"}, - "valid": false - }, - { - "description": "wrong type both", - "data": {"foo": "quux", "bar": "quux"}, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/enum.json b/node_modules/is-my-json-valid/test/json-schema-draft4/enum.json deleted file mode 100644 index f124436..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/enum.json +++ /dev/null @@ -1,72 +0,0 @@ -[ - { - "description": "simple enum validation", - "schema": {"enum": [1, 2, 3]}, - "tests": [ - { - "description": "one of the enum is valid", - "data": 1, - "valid": true - }, - { - "description": "something else is invalid", - "data": 4, - "valid": false - } - ] - }, - { - "description": "heterogeneous enum validation", - "schema": {"enum": [6, "foo", [], true, {"foo": 12}]}, - "tests": [ - { - "description": "one of the enum is valid", - "data": [], - "valid": true - }, - { - "description": "something else is invalid", - "data": null, - "valid": false - }, - { - "description": "objects are deep compared", - "data": {"foo": false}, - "valid": false - } - ] - }, - { - "description": "enums in properties", - "schema": { - "type":"object", - "properties": { - "foo": {"enum":["foo"]}, - "bar": {"enum":["bar"]} - }, - "required": ["bar"] - }, - "tests": [ - { - "description": "both properties are valid", - "data": {"foo":"foo", "bar":"bar"}, - "valid": true - }, - { - "description": "missing optional property is valid", - "data": {"bar":"bar"}, - "valid": true - }, - { - "description": "missing required property is invalid", - "data": {"foo":"foo"}, - "valid": false - }, - { - "description": "missing all properties is invalid", - "data": {}, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/format.json b/node_modules/is-my-json-valid/test/json-schema-draft4/format.json deleted file mode 100644 index 53c5d25..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/format.json +++ /dev/null @@ -1,143 +0,0 @@ -[ - { - "description": "validation of date-time strings", - "schema": {"format": "date-time"}, - "tests": [ - { - "description": "a valid date-time string", - "data": "1963-06-19T08:30:06.283185Z", - "valid": true - }, - { - "description": "an invalid date-time string", - "data": "06/19/1963 08:30:06 PST", - "valid": false - }, - { - "description": "only RFC3339 not all of ISO 8601 are valid", - "data": "2013-350T01:01:01", - "valid": false - } - ] - }, - { - "description": "validation of URIs", - "schema": {"format": "uri"}, - "tests": [ - { - "description": "a valid URI", - "data": "http://foo.bar/?baz=qux#quux", - "valid": true - }, - { - "description": "an invalid URI", - "data": "\\\\WINDOWS\\fileshare", - "valid": false - }, - { - "description": "an invalid URI though valid URI reference", - "data": "abc", - "valid": false - } - ] - }, - { - "description": "validation of e-mail addresses", - "schema": {"format": "email"}, - "tests": [ - { - "description": "a valid e-mail address", - "data": "joe.bloggs@example.com", - "valid": true - }, - { - "description": "an invalid e-mail address", - "data": "2962", - "valid": false - } - ] - }, - { - "description": "validation of IP addresses", - "schema": {"format": "ipv4"}, - "tests": [ - { - "description": "a valid IP address", - "data": "192.168.0.1", - "valid": true - }, - { - "description": "an IP address with too many components", - "data": "127.0.0.0.1", - "valid": false - }, - { - "description": "an IP address with out-of-range values", - "data": "256.256.256.256", - "valid": false - }, - { - "description": "an IP address without 4 components", - "data": "127.0", - "valid": false - }, - { - "description": "an IP address as an integer", - "data": "0x7f000001", - "valid": false - } - ] - }, - { - "description": "validation of IPv6 addresses", - "schema": {"format": "ipv6"}, - "tests": [ - { - "description": "a valid IPv6 address", - "data": "::1", - "valid": true - }, - { - "description": "an IPv6 address with out-of-range values", - "data": "12345::", - "valid": false - }, - { - "description": "an IPv6 address with too many components", - "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1", - "valid": false - }, - { - "description": "an IPv6 address containing illegal characters", - "data": "::laptop", - "valid": false - } - ] - }, - { - "description": "validation of host names", - "schema": {"format": "hostname"}, - "tests": [ - { - "description": "a valid host name", - "data": "www.example.com", - "valid": true - }, - { - "description": "a host name starting with an illegal character", - "data": "-a-host-name-that-starts-with--", - "valid": false - }, - { - "description": "a host name containing illegal characters", - "data": "not_a_valid_host_name", - "valid": false - }, - { - "description": "a host name with a component too long", - "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component", - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/items.json b/node_modules/is-my-json-valid/test/json-schema-draft4/items.json deleted file mode 100644 index f5e18a1..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/items.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "description": "a schema given for items", - "schema": { - "items": {"type": "integer"} - }, - "tests": [ - { - "description": "valid items", - "data": [ 1, 2, 3 ], - "valid": true - }, - { - "description": "wrong type of items", - "data": [1, "x"], - "valid": false - }, - { - "description": "ignores non-arrays", - "data": {"foo" : "bar"}, - "valid": true - } - ] - }, - { - "description": "an array of schemas for items", - "schema": { - "items": [ - {"type": "integer"}, - {"type": "string"} - ] - }, - "tests": [ - { - "description": "correct types", - "data": [ 1, "foo" ], - "valid": true - }, - { - "description": "wrong types", - "data": [ "foo", 1 ], - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/maxItems.json b/node_modules/is-my-json-valid/test/json-schema-draft4/maxItems.json deleted file mode 100644 index 3b53a6b..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/maxItems.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "description": "maxItems validation", - "schema": {"maxItems": 2}, - "tests": [ - { - "description": "shorter is valid", - "data": [1], - "valid": true - }, - { - "description": "exact length is valid", - "data": [1, 2], - "valid": true - }, - { - "description": "too long is invalid", - "data": [1, 2, 3], - "valid": false - }, - { - "description": "ignores non-arrays", - "data": "foobar", - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/maxLength.json b/node_modules/is-my-json-valid/test/json-schema-draft4/maxLength.json deleted file mode 100644 index 48eb129..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/maxLength.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "description": "maxLength validation", - "schema": {"maxLength": 2}, - "tests": [ - { - "description": "shorter is valid", - "data": "f", - "valid": true - }, - { - "description": "exact length is valid", - "data": "fo", - "valid": true - }, - { - "description": "too long is invalid", - "data": "foo", - "valid": false - }, - { - "description": "ignores non-strings", - "data": 100, - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/maxProperties.json b/node_modules/is-my-json-valid/test/json-schema-draft4/maxProperties.json deleted file mode 100644 index d282446..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/maxProperties.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "description": "maxProperties validation", - "schema": {"maxProperties": 2}, - "tests": [ - { - "description": "shorter is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "exact length is valid", - "data": {"foo": 1, "bar": 2}, - "valid": true - }, - { - "description": "too long is invalid", - "data": {"foo": 1, "bar": 2, "baz": 3}, - "valid": false - }, - { - "description": "ignores non-objects", - "data": "foobar", - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/maximum.json b/node_modules/is-my-json-valid/test/json-schema-draft4/maximum.json deleted file mode 100644 index 86c7b89..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/maximum.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "description": "maximum validation", - "schema": {"maximum": 3.0}, - "tests": [ - { - "description": "below the maximum is valid", - "data": 2.6, - "valid": true - }, - { - "description": "above the maximum is invalid", - "data": 3.5, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "x", - "valid": true - } - ] - }, - { - "description": "exclusiveMaximum validation", - "schema": { - "maximum": 3.0, - "exclusiveMaximum": true - }, - "tests": [ - { - "description": "below the maximum is still valid", - "data": 2.2, - "valid": true - }, - { - "description": "boundary point is invalid", - "data": 3.0, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/minItems.json b/node_modules/is-my-json-valid/test/json-schema-draft4/minItems.json deleted file mode 100644 index ed51188..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/minItems.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "description": "minItems validation", - "schema": {"minItems": 1}, - "tests": [ - { - "description": "longer is valid", - "data": [1, 2], - "valid": true - }, - { - "description": "exact length is valid", - "data": [1], - "valid": true - }, - { - "description": "too short is invalid", - "data": [], - "valid": false - }, - { - "description": "ignores non-arrays", - "data": "", - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/minLength.json b/node_modules/is-my-json-valid/test/json-schema-draft4/minLength.json deleted file mode 100644 index e9c14b1..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/minLength.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "description": "minLength validation", - "schema": {"minLength": 2}, - "tests": [ - { - "description": "longer is valid", - "data": "foo", - "valid": true - }, - { - "description": "exact length is valid", - "data": "fo", - "valid": true - }, - { - "description": "too short is invalid", - "data": "f", - "valid": false - }, - { - "description": "ignores non-strings", - "data": 1, - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/minProperties.json b/node_modules/is-my-json-valid/test/json-schema-draft4/minProperties.json deleted file mode 100644 index a72c7d2..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/minProperties.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "description": "minProperties validation", - "schema": {"minProperties": 1}, - "tests": [ - { - "description": "longer is valid", - "data": {"foo": 1, "bar": 2}, - "valid": true - }, - { - "description": "exact length is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "too short is invalid", - "data": {}, - "valid": false - }, - { - "description": "ignores non-objects", - "data": "", - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/minimum.json b/node_modules/is-my-json-valid/test/json-schema-draft4/minimum.json deleted file mode 100644 index d5bf000..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/minimum.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "description": "minimum validation", - "schema": {"minimum": 1.1}, - "tests": [ - { - "description": "above the minimum is valid", - "data": 2.6, - "valid": true - }, - { - "description": "below the minimum is invalid", - "data": 0.6, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "x", - "valid": true - } - ] - }, - { - "description": "exclusiveMinimum validation", - "schema": { - "minimum": 1.1, - "exclusiveMinimum": true - }, - "tests": [ - { - "description": "above the minimum is still valid", - "data": 1.2, - "valid": true - }, - { - "description": "boundary point is invalid", - "data": 1.1, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/multipleOf.json b/node_modules/is-my-json-valid/test/json-schema-draft4/multipleOf.json deleted file mode 100644 index c13b267..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/multipleOf.json +++ /dev/null @@ -1,96 +0,0 @@ -[ - { - "description": "by int", - "schema": {"multipleOf": 2}, - "tests": [ - { - "description": "int by int", - "data": 10, - "valid": true - }, - { - "description": "int by int fail", - "data": 7, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "foo", - "valid": true - } - ] - }, - { - "description": "by number", - "schema": {"multipleOf": 1.5}, - "tests": [ - { - "description": "zero is multiple of anything", - "data": 0, - "valid": true - }, - { - "description": "4.5 is multiple of 1.5", - "data": 4.5, - "valid": true - }, - { - "description": "35 is not multiple of 1.5", - "data": 35, - "valid": false - } - ] - }, - { - "description": "by small number", - "schema": {"multipleOf": 0.0001}, - "tests": [ - { - "description": "0.0075 is multiple of 0.0001", - "data": 0.0075, - "valid": true - }, - { - "description": "0.00751 is not multiple of 0.0001", - "data": 0.00751, - "valid": false - } - ] - }, - { - "description": "by decimal number where floating point precision is wrong", - "schema": {"multipleOf": 0.01}, - "tests": [ - { - "description": "Number 2 is multiple of 0.01", - "data": 2, - "valid": true - }, - { - "description": "Number 2.1 is multiple of 0.01", - "data": 2.1, - "valid": true - }, - { - "description": "Number 2.2 is multiple of 0.01", - "data": 2.2, - "valid": true - }, - { - "description": "Number 2.3 is multiple of 0.01", - "data": 2.3, - "valid": true - }, - { - "description": "Number 2.4 is multiple of 0.01", - "data": 2.4, - "valid": true - }, - { - "description": "Number 1.211 is not multiple of 0.01", - "data": 1.211, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/not.json b/node_modules/is-my-json-valid/test/json-schema-draft4/not.json deleted file mode 100644 index cbb7f46..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/not.json +++ /dev/null @@ -1,96 +0,0 @@ -[ - { - "description": "not", - "schema": { - "not": {"type": "integer"} - }, - "tests": [ - { - "description": "allowed", - "data": "foo", - "valid": true - }, - { - "description": "disallowed", - "data": 1, - "valid": false - } - ] - }, - { - "description": "not multiple types", - "schema": { - "not": {"type": ["integer", "boolean"]} - }, - "tests": [ - { - "description": "valid", - "data": "foo", - "valid": true - }, - { - "description": "mismatch", - "data": 1, - "valid": false - }, - { - "description": "other mismatch", - "data": true, - "valid": false - } - ] - }, - { - "description": "not more complex schema", - "schema": { - "not": { - "type": "object", - "properties": { - "foo": { - "type": "string" - } - } - } - }, - "tests": [ - { - "description": "match", - "data": 1, - "valid": true - }, - { - "description": "other match", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "mismatch", - "data": {"foo": "bar"}, - "valid": false - } - ] - }, - { - "description": "forbidden property", - "schema": { - "properties": { - "foo": { - "not": {} - } - } - }, - "tests": [ - { - "description": "property present", - "data": {"foo": 1, "bar": 2}, - "valid": false - }, - { - "description": "property absent", - "data": {"bar": 1, "baz": 2}, - "valid": true - } - ] - } - -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndFormat.json b/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndFormat.json deleted file mode 100644 index d7fce9f..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndFormat.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "description": "validation of null and format", - "schema": {"type": ["null", "string"], "format": "date-time"}, - "tests": [ - { - "description": "a valid date-time string", - "data": "1963-06-19T08:30:06.283185Z", - "valid": true - }, - { - "description": "allow null", - "data": null, - "valid": true - } - ] - } -] \ No newline at end of file diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndObject.json b/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndObject.json deleted file mode 100644 index c65c02c..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndObject.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "description": "multiple types of null and object containing properties", - "schema": { - "type": ["null", "object"], - "properties": { - "foo": {} - } - }, - "tests": [ - { - "description": "null is valid", - "data": null, - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/oneOf.json b/node_modules/is-my-json-valid/test/json-schema-draft4/oneOf.json deleted file mode 100644 index 1eaa4e4..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/oneOf.json +++ /dev/null @@ -1,68 +0,0 @@ -[ - { - "description": "oneOf", - "schema": { - "oneOf": [ - { - "type": "integer" - }, - { - "minimum": 2 - } - ] - }, - "tests": [ - { - "description": "first oneOf valid", - "data": 1, - "valid": true - }, - { - "description": "second oneOf valid", - "data": 2.5, - "valid": true - }, - { - "description": "both oneOf valid", - "data": 3, - "valid": false - }, - { - "description": "neither oneOf valid", - "data": 1.5, - "valid": false - } - ] - }, - { - "description": "oneOf with base schema", - "schema": { - "type": "string", - "oneOf" : [ - { - "minLength": 2 - }, - { - "maxLength": 4 - } - ] - }, - "tests": [ - { - "description": "mismatch base schema", - "data": 3, - "valid": false - }, - { - "description": "one oneOf valid", - "data": "foobar", - "valid": true - }, - { - "description": "both oneOf valid", - "data": "foo", - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/pattern.json b/node_modules/is-my-json-valid/test/json-schema-draft4/pattern.json deleted file mode 100644 index befc4b5..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/pattern.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "description": "pattern validation", - "schema": {"pattern": "^a*$"}, - "tests": [ - { - "description": "a matching pattern is valid", - "data": "aaa", - "valid": true - }, - { - "description": "a non-matching pattern is invalid", - "data": "abc", - "valid": false - }, - { - "description": "ignores non-strings", - "data": true, - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/patternProperties.json b/node_modules/is-my-json-valid/test/json-schema-draft4/patternProperties.json deleted file mode 100644 index 18586e5..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/patternProperties.json +++ /dev/null @@ -1,110 +0,0 @@ -[ - { - "description": - "patternProperties validates properties matching a regex", - "schema": { - "patternProperties": { - "f.*o": {"type": "integer"} - } - }, - "tests": [ - { - "description": "a single valid match is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "multiple valid matches is valid", - "data": {"foo": 1, "foooooo" : 2}, - "valid": true - }, - { - "description": "a single invalid match is invalid", - "data": {"foo": "bar", "fooooo": 2}, - "valid": false - }, - { - "description": "multiple invalid matches is invalid", - "data": {"foo": "bar", "foooooo" : "baz"}, - "valid": false - }, - { - "description": "ignores non-objects", - "data": 12, - "valid": true - } - ] - }, - { - "description": "multiple simultaneous patternProperties are validated", - "schema": { - "patternProperties": { - "a*": {"type": "integer"}, - "aaa*": {"maximum": 20} - } - }, - "tests": [ - { - "description": "a single valid match is valid", - "data": {"a": 21}, - "valid": true - }, - { - "description": "a simultaneous match is valid", - "data": {"aaaa": 18}, - "valid": true - }, - { - "description": "multiple matches is valid", - "data": {"a": 21, "aaaa": 18}, - "valid": true - }, - { - "description": "an invalid due to one is invalid", - "data": {"a": "bar"}, - "valid": false - }, - { - "description": "an invalid due to the other is invalid", - "data": {"aaaa": 31}, - "valid": false - }, - { - "description": "an invalid due to both is invalid", - "data": {"aaa": "foo", "aaaa": 31}, - "valid": false - } - ] - }, - { - "description": "regexes are not anchored by default and are case sensitive", - "schema": { - "patternProperties": { - "[0-9]{2,}": { "type": "boolean" }, - "X_": { "type": "string" } - } - }, - "tests": [ - { - "description": "non recognized members are ignored", - "data": { "answer 1": "42" }, - "valid": true - }, - { - "description": "recognized members are accounted for", - "data": { "a31b": null }, - "valid": false - }, - { - "description": "regexes are case sensitive", - "data": { "a_x_3": 3 }, - "valid": true - }, - { - "description": "regexes are case sensitive, 2", - "data": { "a_X_3": 3 }, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/properties.json b/node_modules/is-my-json-valid/test/json-schema-draft4/properties.json deleted file mode 100644 index cd1644d..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/properties.json +++ /dev/null @@ -1,92 +0,0 @@ -[ - { - "description": "object properties validation", - "schema": { - "properties": { - "foo": {"type": "integer"}, - "bar": {"type": "string"} - } - }, - "tests": [ - { - "description": "both properties present and valid is valid", - "data": {"foo": 1, "bar": "baz"}, - "valid": true - }, - { - "description": "one property invalid is invalid", - "data": {"foo": 1, "bar": {}}, - "valid": false - }, - { - "description": "both properties invalid is invalid", - "data": {"foo": [], "bar": {}}, - "valid": false - }, - { - "description": "doesn't invalidate other properties", - "data": {"quux": []}, - "valid": true - }, - { - "description": "ignores non-objects", - "data": [], - "valid": true - } - ] - }, - { - "description": - "properties, patternProperties, additionalProperties interaction", - "schema": { - "properties": { - "foo": {"type": "array", "maxItems": 3}, - "bar": {"type": "array"} - }, - "patternProperties": {"f.o": {"minItems": 2}}, - "additionalProperties": {"type": "integer"} - }, - "tests": [ - { - "description": "property validates property", - "data": {"foo": [1, 2]}, - "valid": true - }, - { - "description": "property invalidates property", - "data": {"foo": [1, 2, 3, 4]}, - "valid": false - }, - { - "description": "patternProperty invalidates property", - "data": {"foo": []}, - "valid": false - }, - { - "description": "patternProperty validates nonproperty", - "data": {"fxo": [1, 2]}, - "valid": true - }, - { - "description": "patternProperty invalidates nonproperty", - "data": {"fxo": []}, - "valid": false - }, - { - "description": "additionalProperty ignores property", - "data": {"bar": []}, - "valid": true - }, - { - "description": "additionalProperty validates others", - "data": {"quux": 3}, - "valid": true - }, - { - "description": "additionalProperty invalidates others", - "data": {"quux": "foo"}, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/ref.json b/node_modules/is-my-json-valid/test/json-schema-draft4/ref.json deleted file mode 100644 index d8214bc..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/ref.json +++ /dev/null @@ -1,128 +0,0 @@ -[ - { - "description": "root pointer ref", - "schema": { - "properties": { - "foo": {"$ref": "#"} - }, - "additionalProperties": false - }, - "tests": [ - { - "description": "match", - "data": {"foo": false}, - "valid": true - }, - { - "description": "recursive match", - "data": {"foo": {"foo": false}}, - "valid": true - }, - { - "description": "mismatch", - "data": {"bar": false}, - "valid": false - }, - { - "description": "recursive mismatch", - "data": {"foo": {"bar": false}}, - "valid": false - } - ] - }, - { - "description": "relative pointer ref to object", - "schema": { - "properties": { - "foo": {"type": "integer"}, - "bar": {"$ref": "#/properties/foo"} - } - }, - "tests": [ - { - "description": "match", - "data": {"bar": 3}, - "valid": true - }, - { - "description": "mismatch", - "data": {"bar": true}, - "valid": false - } - ] - }, - { - "description": "relative pointer ref to array", - "schema": { - "items": [ - {"type": "integer"}, - {"$ref": "#/items/0"} - ] - }, - "tests": [ - { - "description": "match array", - "data": [1, 2], - "valid": true - }, - { - "description": "mismatch array", - "data": [1, "foo"], - "valid": false - } - ] - }, - { - "description": "escaped pointer ref", - "schema": { - "tilda~field": {"type": "integer"}, - "slash/field": {"type": "integer"}, - "percent%field": {"type": "integer"}, - "properties": { - "tilda": {"$ref": "#/tilda~0field"}, - "slash": {"$ref": "#/slash~1field"}, - "percent": {"$ref": "#/percent%25field"} - } - }, - "tests": [ - { - "description": "slash", - "data": {"slash": "aoeu"}, - "valid": false - }, - { - "description": "tilda", - "data": {"tilda": "aoeu"}, - "valid": false - }, - { - "description": "percent", - "data": {"percent": "aoeu"}, - "valid": false - } - ] - }, - { - "description": "nested refs", - "schema": { - "definitions": { - "a": {"type": "integer"}, - "b": {"$ref": "#/definitions/a"}, - "c": {"$ref": "#/definitions/b"} - }, - "$ref": "#/definitions/c" - }, - "tests": [ - { - "description": "nested ref valid", - "data": 5, - "valid": true - }, - { - "description": "nested ref invalid", - "data": "a", - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/refRemote.json b/node_modules/is-my-json-valid/test/json-schema-draft4/refRemote.json deleted file mode 100644 index 4ca8047..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/refRemote.json +++ /dev/null @@ -1,74 +0,0 @@ -[ - { - "description": "remote ref", - "schema": {"$ref": "http://localhost:1234/integer.json"}, - "tests": [ - { - "description": "remote ref valid", - "data": 1, - "valid": true - }, - { - "description": "remote ref invalid", - "data": "a", - "valid": false - } - ] - }, - { - "description": "fragment within remote ref", - "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"}, - "tests": [ - { - "description": "remote fragment valid", - "data": 1, - "valid": true - }, - { - "description": "remote fragment invalid", - "data": "a", - "valid": false - } - ] - }, - { - "description": "ref within remote ref", - "schema": { - "$ref": "http://localhost:1234/subSchemas.json#/refToInteger" - }, - "tests": [ - { - "description": "ref within ref valid", - "data": 1, - "valid": true - }, - { - "description": "ref within ref invalid", - "data": "a", - "valid": false - } - ] - }, - { - "description": "change resolution scope", - "schema": { - "id": "http://localhost:1234/", - "items": { - "id": "folder/", - "items": {"$ref": "folderInteger.json"} - } - }, - "tests": [ - { - "description": "changed scope ref valid", - "data": [[1]], - "valid": true - }, - { - "description": "changed scope ref invalid", - "data": [["a"]], - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/required.json b/node_modules/is-my-json-valid/test/json-schema-draft4/required.json deleted file mode 100644 index 612f73f..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/required.json +++ /dev/null @@ -1,39 +0,0 @@ -[ - { - "description": "required validation", - "schema": { - "properties": { - "foo": {}, - "bar": {} - }, - "required": ["foo"] - }, - "tests": [ - { - "description": "present required property is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "non-present required property is invalid", - "data": {"bar": 1}, - "valid": false - } - ] - }, - { - "description": "required default validation", - "schema": { - "properties": { - "foo": {} - } - }, - "tests": [ - { - "description": "not required by default", - "data": {}, - "valid": true - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/type.json b/node_modules/is-my-json-valid/test/json-schema-draft4/type.json deleted file mode 100644 index 257f051..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/type.json +++ /dev/null @@ -1,330 +0,0 @@ -[ - { - "description": "integer type matches integers", - "schema": {"type": "integer"}, - "tests": [ - { - "description": "an integer is an integer", - "data": 1, - "valid": true - }, - { - "description": "a float is not an integer", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not an integer", - "data": "foo", - "valid": false - }, - { - "description": "an object is not an integer", - "data": {}, - "valid": false - }, - { - "description": "an array is not an integer", - "data": [], - "valid": false - }, - { - "description": "a boolean is not an integer", - "data": true, - "valid": false - }, - { - "description": "null is not an integer", - "data": null, - "valid": false - } - ] - }, - { - "description": "number type matches numbers", - "schema": {"type": "number"}, - "tests": [ - { - "description": "an integer is a number", - "data": 1, - "valid": true - }, - { - "description": "a float is a number", - "data": 1.1, - "valid": true - }, - { - "description": "a string is not a number", - "data": "foo", - "valid": false - }, - { - "description": "an object is not a number", - "data": {}, - "valid": false - }, - { - "description": "an array is not a number", - "data": [], - "valid": false - }, - { - "description": "a boolean is not a number", - "data": true, - "valid": false - }, - { - "description": "null is not a number", - "data": null, - "valid": false - } - ] - }, - { - "description": "string type matches strings", - "schema": {"type": "string"}, - "tests": [ - { - "description": "1 is not a string", - "data": 1, - "valid": false - }, - { - "description": "a float is not a string", - "data": 1.1, - "valid": false - }, - { - "description": "a string is a string", - "data": "foo", - "valid": true - }, - { - "description": "an object is not a string", - "data": {}, - "valid": false - }, - { - "description": "an array is not a string", - "data": [], - "valid": false - }, - { - "description": "a boolean is not a string", - "data": true, - "valid": false - }, - { - "description": "null is not a string", - "data": null, - "valid": false - } - ] - }, - { - "description": "object type matches objects", - "schema": {"type": "object"}, - "tests": [ - { - "description": "an integer is not an object", - "data": 1, - "valid": false - }, - { - "description": "a float is not an object", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not an object", - "data": "foo", - "valid": false - }, - { - "description": "an object is an object", - "data": {}, - "valid": true - }, - { - "description": "an array is not an object", - "data": [], - "valid": false - }, - { - "description": "a boolean is not an object", - "data": true, - "valid": false - }, - { - "description": "null is not an object", - "data": null, - "valid": false - } - ] - }, - { - "description": "array type matches arrays", - "schema": {"type": "array"}, - "tests": [ - { - "description": "an integer is not an array", - "data": 1, - "valid": false - }, - { - "description": "a float is not an array", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not an array", - "data": "foo", - "valid": false - }, - { - "description": "an object is not an array", - "data": {}, - "valid": false - }, - { - "description": "an array is not an array", - "data": [], - "valid": true - }, - { - "description": "a boolean is not an array", - "data": true, - "valid": false - }, - { - "description": "null is not an array", - "data": null, - "valid": false - } - ] - }, - { - "description": "boolean type matches booleans", - "schema": {"type": "boolean"}, - "tests": [ - { - "description": "an integer is not a boolean", - "data": 1, - "valid": false - }, - { - "description": "a float is not a boolean", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not a boolean", - "data": "foo", - "valid": false - }, - { - "description": "an object is not a boolean", - "data": {}, - "valid": false - }, - { - "description": "an array is not a boolean", - "data": [], - "valid": false - }, - { - "description": "a boolean is not a boolean", - "data": true, - "valid": true - }, - { - "description": "null is not a boolean", - "data": null, - "valid": false - } - ] - }, - { - "description": "null type matches only the null object", - "schema": {"type": "null"}, - "tests": [ - { - "description": "an integer is not null", - "data": 1, - "valid": false - }, - { - "description": "a float is not null", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not null", - "data": "foo", - "valid": false - }, - { - "description": "an object is not null", - "data": {}, - "valid": false - }, - { - "description": "an array is not null", - "data": [], - "valid": false - }, - { - "description": "a boolean is not null", - "data": true, - "valid": false - }, - { - "description": "null is null", - "data": null, - "valid": true - } - ] - }, - { - "description": "multiple types can be specified in an array", - "schema": {"type": ["integer", "string"]}, - "tests": [ - { - "description": "an integer is valid", - "data": 1, - "valid": true - }, - { - "description": "a string is valid", - "data": "foo", - "valid": true - }, - { - "description": "a float is invalid", - "data": 1.1, - "valid": false - }, - { - "description": "an object is invalid", - "data": {}, - "valid": false - }, - { - "description": "an array is invalid", - "data": [], - "valid": false - }, - { - "description": "a boolean is invalid", - "data": true, - "valid": false - }, - { - "description": "null is invalid", - "data": null, - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema-draft4/uniqueItems.json b/node_modules/is-my-json-valid/test/json-schema-draft4/uniqueItems.json deleted file mode 100644 index c1f4ab9..0000000 --- a/node_modules/is-my-json-valid/test/json-schema-draft4/uniqueItems.json +++ /dev/null @@ -1,79 +0,0 @@ -[ - { - "description": "uniqueItems validation", - "schema": {"uniqueItems": true}, - "tests": [ - { - "description": "unique array of integers is valid", - "data": [1, 2], - "valid": true - }, - { - "description": "non-unique array of integers is invalid", - "data": [1, 1], - "valid": false - }, - { - "description": "numbers are unique if mathematically unequal", - "data": [1.0, 1.00, 1], - "valid": false - }, - { - "description": "unique array of objects is valid", - "data": [{"foo": "bar"}, {"foo": "baz"}], - "valid": true - }, - { - "description": "non-unique array of objects is invalid", - "data": [{"foo": "bar"}, {"foo": "bar"}], - "valid": false - }, - { - "description": "unique array of nested objects is valid", - "data": [ - {"foo": {"bar" : {"baz" : true}}}, - {"foo": {"bar" : {"baz" : false}}} - ], - "valid": true - }, - { - "description": "non-unique array of nested objects is invalid", - "data": [ - {"foo": {"bar" : {"baz" : true}}}, - {"foo": {"bar" : {"baz" : true}}} - ], - "valid": false - }, - { - "description": "unique array of arrays is valid", - "data": [["foo"], ["bar"]], - "valid": true - }, - { - "description": "non-unique array of arrays is invalid", - "data": [["foo"], ["foo"]], - "valid": false - }, - { - "description": "1 and true are unique", - "data": [1, true], - "valid": true - }, - { - "description": "0 and false are unique", - "data": [0, false], - "valid": true - }, - { - "description": "unique heterogeneous types are valid", - "data": [{}, [1], true, null, 1], - "valid": true - }, - { - "description": "non-unique heterogeneous types are invalid", - "data": [{}, [1], true, null, {}, 1], - "valid": false - } - ] - } -] diff --git a/node_modules/is-my-json-valid/test/json-schema.js b/node_modules/is-my-json-valid/test/json-schema.js deleted file mode 100644 index e68a263..0000000 --- a/node_modules/is-my-json-valid/test/json-schema.js +++ /dev/null @@ -1,23 +0,0 @@ -var tape = require('tape') -var fs = require('fs') -var validator = require('../') - -var files = fs.readdirSync(__dirname+'/json-schema-draft4') - .map(function(file) { - if (file === 'definitions.json') return null - if (file === 'refRemote.json') return null - return require('./json-schema-draft4/'+file) - }) - .filter(Boolean) - -files.forEach(function(file) { - file.forEach(function(f) { - tape('json-schema-test-suite '+f.description, function(t) { - var validate = validator(f.schema) - f.tests.forEach(function(test) { - t.same(validate(test.data), test.valid, test.description) - }) - t.end() - }) - }) -}) diff --git a/node_modules/is-my-json-valid/test/misc.js b/node_modules/is-my-json-valid/test/misc.js deleted file mode 100644 index 4ea36d5..0000000 --- a/node_modules/is-my-json-valid/test/misc.js +++ /dev/null @@ -1,471 +0,0 @@ -var tape = require('tape') -var cosmic = require('./fixtures/cosmic') -var validator = require('../') -var validatorRequire = require('../require') - -tape('simple', function(t) { - var schema = { - required: true, - type: 'object', - properties: { - hello: {type:'string', required:true} - } - } - - var validate = validator(schema) - - t.ok(validate({hello: 'world'}), 'should be valid') - t.notOk(validate(), 'should be invalid') - t.notOk(validate({}), 'should be invalid') - t.end() -}) - -tape('data is undefined', function (t) { - var validate = validator({type: 'string'}) - - t.notOk(validate(null)) - t.notOk(validate(undefined)) - t.end() -}) - -tape('advanced', function(t) { - var validate = validator(cosmic.schema) - - t.ok(validate(cosmic.valid), 'should be valid') - t.notOk(validate(cosmic.invalid), 'should be invalid') - t.end() -}) - -tape('greedy/false', function(t) { - var validate = validator({ - type: 'object', - properties: { - x: { - type: 'number' - } - }, - required: ['x', 'y'] - }); - t.notOk(validate({}), 'should be invalid') - t.strictEqual(validate.errors.length, 2); - t.strictEqual(validate.errors[0].field, 'data.x') - t.strictEqual(validate.errors[0].message, 'is required') - t.strictEqual(validate.errors[1].field, 'data.y') - t.strictEqual(validate.errors[1].message, 'is required') - t.notOk(validate({x: 'string'}), 'should be invalid') - t.strictEqual(validate.errors.length, 1); - t.strictEqual(validate.errors[0].field, 'data.y') - t.strictEqual(validate.errors[0].message, 'is required') - t.notOk(validate({x: 'string', y: 'value'}), 'should be invalid') - t.strictEqual(validate.errors.length, 1); - t.strictEqual(validate.errors[0].field, 'data.x') - t.strictEqual(validate.errors[0].message, 'is the wrong type') - t.end(); -}); - -tape('greedy/true', function(t) { - var validate = validator({ - type: 'object', - properties: { - x: { - type: 'number' - } - }, - required: ['x', 'y'] - }, { - greedy: true - }); - t.notOk(validate({}), 'should be invalid') - t.strictEqual(validate.errors.length, 2); - t.strictEqual(validate.errors[0].field, 'data.x') - t.strictEqual(validate.errors[0].message, 'is required') - t.strictEqual(validate.errors[1].field, 'data.y') - t.strictEqual(validate.errors[1].message, 'is required') - t.notOk(validate({x: 'string'}), 'should be invalid') - t.strictEqual(validate.errors.length, 2); - t.strictEqual(validate.errors[0].field, 'data.y') - t.strictEqual(validate.errors[0].message, 'is required') - t.strictEqual(validate.errors[1].field, 'data.x') - t.strictEqual(validate.errors[1].message, 'is the wrong type') - t.notOk(validate({x: 'string', y: 'value'}), 'should be invalid') - t.strictEqual(validate.errors.length, 1); - t.strictEqual(validate.errors[0].field, 'data.x') - t.strictEqual(validate.errors[0].message, 'is the wrong type') - t.ok(validate({x: 1, y: 'value'}), 'should be invalid') - t.end(); -}); - -tape('additional props', function(t) { - var validate = validator({ - type: 'object', - additionalProperties: false - }, { - verbose: true - }) - - t.ok(validate({})) - t.notOk(validate({foo:'bar'})) - t.ok(validate.errors[0].value === 'data.foo', 'should output the property not allowed in verbose mode') - t.strictEqual(validate.errors[0].type, 'object', 'error object should contain the type') - t.end() -}) - -tape('array', function(t) { - var validate = validator({ - type: 'array', - required: true, - items: { - type: 'string' - } - }) - - t.notOk(validate({}), 'wrong type') - t.notOk(validate(), 'is required') - t.ok(validate(['test'])) - t.end() -}) - -tape('nested array', function(t) { - var validate = validator({ - type: 'object', - properties: { - list: { - type: 'array', - required: true, - items: { - type: 'string' - } - } - } - }) - - t.notOk(validate({}), 'is required') - t.ok(validate({list:['test']})) - t.notOk(validate({list:[1]})) - t.end() -}) - -tape('enum', function(t) { - var validate = validator({ - type: 'object', - properties: { - foo: { - type: 'number', - required: true, - enum: [42] - } - } - }) - - t.notOk(validate({}), 'is required') - t.ok(validate({foo:42})) - t.notOk(validate({foo:43})) - t.end() -}) - -tape('minimum/maximum', function(t) { - var validate = validator({ - type: 'object', - properties: { - foo: { - type: 'number', - minimum: 0, - maximum: 0 - } - } - }) - - t.notOk(validate({foo:-42})) - t.ok(validate({foo:0})) - t.notOk(validate({foo:42})) - t.end() -}) - -tape('exclusiveMinimum/exclusiveMaximum', function(t) { - var validate = validator({ - type: 'object', - properties: { - foo: { - type: 'number', - minimum: 10, - maximum: 20, - exclusiveMinimum: true, - exclusiveMaximum: true - } - } - }) - - t.notOk(validate({foo:10})) - t.ok(validate({foo:11})) - t.notOk(validate({foo:20})) - t.ok(validate({foo:19})) - t.end() -}) - -tape('minimum/maximum number type', function(t) { - var validate = validator({ - type: ['integer', 'null'], - minimum: 1, - maximum: 100 - }) - - t.notOk(validate(-1)) - t.notOk(validate(0)) - t.ok(validate(null)) - t.ok(validate(1)) - t.ok(validate(100)) - t.notOk(validate(101)) - t.end() -}) - -tape('custom format', function(t) { - var validate = validator({ - type: 'object', - properties: { - foo: { - type: 'string', - format: 'as' - } - } - }, {formats: {as:/^a+$/}}) - - t.notOk(validate({foo:''}), 'not as') - t.notOk(validate({foo:'b'}), 'not as') - t.notOk(validate({foo:'aaab'}), 'not as') - t.ok(validate({foo:'a'}), 'as') - t.ok(validate({foo:'aaaaaa'}), 'as') - t.end() -}) - -tape('custom format function', function(t) { - var validate = validator({ - type: 'object', - properties: { - foo: { - type: 'string', - format: 'as' - } - } - }, {formats: {as:function(s) { return /^a+$/.test(s) } }}) - - t.notOk(validate({foo:''}), 'not as') - t.notOk(validate({foo:'b'}), 'not as') - t.notOk(validate({foo:'aaab'}), 'not as') - t.ok(validate({foo:'a'}), 'as') - t.ok(validate({foo:'aaaaaa'}), 'as') - t.end() -}) - -tape('do not mutate schema', function(t) { - var sch = { - items: [ - {} - ], - additionalItems: { - type: 'integer' - } - } - - var copy = JSON.parse(JSON.stringify(sch)) - - validator(sch) - - t.same(sch, copy, 'did not mutate') - t.end() -}) - -tape('#toJSON()', function(t) { - var schema = { - required: true, - type: 'object', - properties: { - hello: {type:'string', required:true} - } - } - - var validate = validator(schema) - - t.deepEqual(validate.toJSON(), schema, 'should return original schema') - t.end() -}) - -tape('external schemas', function(t) { - var ext = {type: 'string'} - var schema = { - required: true, - $ref: '#ext' - } - - var validate = validator(schema, {schemas: {ext:ext}}) - - t.ok(validate('hello string'), 'is a string') - t.notOk(validate(42), 'not a string') - t.end() -}) - -tape('external schema URIs', function(t) { - var ext = {type: 'string'} - var schema = { - required: true, - $ref: 'http://example.com/schemas/schemaURIs' - } - - var opts = {schemas:{}}; - opts.schemas['http://example.com/schemas/schemaURIs'] = ext; - var validate = validator(schema, opts) - - t.ok(validate('hello string'), 'is a string') - t.notOk(validate(42), 'not a string') - t.end() -}) - -tape('top-level external schema', function(t) { - var defs = { - "string": { - type: "string" - }, - "sex": { - type: "string", - enum: ["male", "female", "other"] - } - } - var schema = { - type: "object", - properties: { - "name": { $ref: "definitions.json#/string" }, - "sex": { $ref: "definitions.json#/sex" } - }, - required: ["name", "sex"] - } - - var validate = validator(schema, { - schemas: { - "definitions.json": defs - } - }) - t.ok(validate({name:"alice", sex:"female"}), 'is an object') - t.notOk(validate({name:"alice", sex: "bob"}), 'recognizes external schema') - t.notOk(validate({name:2, sex: "female"}), 'recognizes external schema') - t.end() -}) - -tape('nested required array decl', function(t) { - var schema = { - properties: { - x: { - type: 'object', - properties: { - y: { - type: 'object', - properties: { - z: { - type: 'string' - } - }, - required: ['z'] - } - } - } - }, - required: ['x'] - } - - var validate = validator(schema) - - t.ok(validate({x: {}}), 'should be valid') - t.notOk(validate({}), 'should not be valid') - t.strictEqual(validate.errors[0].field, 'data.x', 'should output the missing field') - t.end() -}) - -tape('verbose mode', function(t) { - var schema = { - required: true, - type: 'object', - properties: { - hello: { - required: true, - type: 'string' - } - } - }; - - var validate = validator(schema, {verbose: true}) - - t.ok(validate({hello: 'string'}), 'should be valid') - t.notOk(validate({hello: 100}), 'should not be valid') - t.strictEqual(validate.errors[0].value, 100, 'error object should contain the invalid value') - t.strictEqual(validate.errors[0].type, 'string', 'error object should contain the type') - t.end() -}) - -tape('additional props in verbose mode', function(t) { - var schema = { - type: 'object', - required: true, - additionalProperties: false, - properties: { - foo: { - type: 'string' - }, - 'hello world': { - type: 'object', - required: true, - additionalProperties: false, - properties: { - foo: { - type: 'string' - } - } - } - } - }; - - var validate = validator(schema, {verbose: true}) - - validate({'hello world': {bar: 'string'}}); - - t.strictEqual(validate.errors[0].value, 'data["hello world"].bar', 'should output the path to the additional prop in the error') - t.end() -}) - -tape('Date.now() is an integer', function(t) { - var schema = {type: 'integer'} - var validate = validator(schema) - - t.ok(validate(Date.now()), 'is integer') - t.end() -}) - -tape('field shows item index in arrays', function(t) { - var schema = { - type: 'array', - items: { - type: 'array', - items: { - properties: { - foo: { - type: 'string', - required: true - } - } - } - } - } - - var validate = validator(schema) - - validate([ - [ - { foo: 'test' }, - { foo: 'test' } - ], - [ - { foo: 'test' }, - { baz: 'test' } - ] - ]) - - t.strictEqual(validate.errors[0].field, 'data.1.1.foo', 'should output the field with specific index of failing item in the error') - t.end() -}) diff --git a/node_modules/is-property/.npmignore b/node_modules/is-property/.npmignore deleted file mode 100644 index 8ecfa25..0000000 --- a/node_modules/is-property/.npmignore +++ /dev/null @@ -1,17 +0,0 @@ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz - -pids -logs -results - -npm-debug.log -node_modules/* -*.DS_Store -test/* \ No newline at end of file diff --git a/node_modules/is-property/LICENSE b/node_modules/is-property/LICENSE deleted file mode 100644 index 8ce206a..0000000 --- a/node_modules/is-property/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2013 Mikola Lysenko - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/is-property/README.md b/node_modules/is-property/README.md deleted file mode 100644 index ef1d00b..0000000 --- a/node_modules/is-property/README.md +++ /dev/null @@ -1,28 +0,0 @@ -is-property -=========== -Tests if a property of a JavaScript object can be accessed using the dot (.) notation or if it must be enclosed in brackets, (ie use x[" ... "]) - -Example -------- - -```javascript -var isProperty = require("is-property") - -console.log(isProperty("foo")) //Prints true -console.log(isProperty("0")) //Prints false -``` - -Install -------- - - npm install is-property - -### `require("is-property")(str)` -Checks if str is a property - -* `str` is a string which we will test if it is a property or not - -**Returns** true or false depending if str is a property - -## Credits -(c) 2013 Mikola Lysenko. MIT License \ No newline at end of file diff --git a/node_modules/is-property/is-property.js b/node_modules/is-property/is-property.js deleted file mode 100644 index db58b47..0000000 --- a/node_modules/is-property/is-property.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict" -function isProperty(str) { - return /^[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/.test(str) -} -module.exports = isProperty \ No newline at end of file diff --git a/node_modules/is-property/package.json b/node_modules/is-property/package.json deleted file mode 100644 index e2b5200..0000000 --- a/node_modules/is-property/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "_args": [ - [ - "is-property@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/generate-object-property" - ] - ], - "_from": "is-property@>=1.0.0 <2.0.0", - "_id": "is-property@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/is-property", - "_nodeVersion": "0.10.26", - "_npmUser": { - "email": "mikolalysenko@gmail.com", - "name": "mikolalysenko" - }, - "_npmVersion": "2.1.4", - "_phantomChildren": {}, - "_requested": { - "name": "is-property", - "raw": "is-property@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/generate-object-property" - ], - "_resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "_shasum": "57fe1c4e48474edd65b09911f26b1cd4095dda84", - "_shrinkwrap": null, - "_spec": "is-property@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/generate-object-property", - "author": { - "name": "Mikola Lysenko" - }, - "bugs": { - "url": "https://github.com/mikolalysenko/is-property/issues" - }, - "dependencies": {}, - "description": "Tests if a JSON property can be accessed using . syntax", - "devDependencies": { - "tape": "~1.0.4" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "57fe1c4e48474edd65b09911f26b1cd4095dda84", - "tarball": "http://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" - }, - "gitHead": "0a85ea5b6b1264ea1cdecc6e5cf186adbb3ffc50", - "homepage": "https://github.com/mikolalysenko/is-property", - "keywords": [ - "is", - "property", - "json", - "dot", - "bracket", - ".", - "[]" - ], - "license": "MIT", - "main": "is-property.js", - "maintainers": [ - { - "email": "mikolalysenko@gmail.com", - "name": "mikolalysenko" - } - ], - "name": "is-property", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/mikolalysenko/is-property.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "1.0.2" -} diff --git a/node_modules/is-regex/.eslintrc b/node_modules/is-regex/.eslintrc deleted file mode 100644 index 9f56994..0000000 --- a/node_modules/is-regex/.eslintrc +++ /dev/null @@ -1,160 +0,0 @@ -{ - "env": { - "browser": false, - "node": true, - "amd": false, - "mocha": false, - "jasmine": false - }, - - "rules": { - "block-scoped-var": [0], - "brace-style": [2, "1tbs", { "allowSingleLine": true }], - "camelcase": [2], - "comma-spacing": [2], - "comma-style": [2, "last"], - "complexity": [0, 11], - "consistent-return": [2], - "consistent-this": [0, "that"], - "curly": [2, "all"], - "default-case": [2], - "dot-notation": [2, { "allowKeywords": true }], - "eol-last": [2], - "eqeqeq": [2], - "func-names": [0], - "func-style": [0, "declaration"], - "global-strict": [0, "never"], - "guard-for-in": [0], - "handle-callback-err": [0], - "key-spacing": [2, { "beforeColon": false, "afterColon": true }], - "quotes": [2, "single", "avoid-escape"], - "max-depth": [0, 4], - "max-len": [0, 80, 4], - "max-nested-callbacks": [0, 2], - "max-params": [0, 3], - "max-statements": [0, 10], - "new-parens": [2], - "new-cap": [2], - "no-alert": [2], - "no-array-constructor": [2], - "no-bitwise": [0], - "no-caller": [2], - "no-catch-shadow": [2], - "no-comma-dangle": [2], - "no-cond-assign": [2], - "no-console": [2], - "no-constant-condition": [2], - "no-control-regex": [2], - "no-debugger": [2], - "no-delete-var": [2], - "no-div-regex": [0], - "no-dupe-keys": [2], - "no-else-return": [0], - "no-empty": [2], - "no-empty-class": [2], - "no-empty-label": [2], - "no-eq-null": [0], - "no-eval": [2], - "no-ex-assign": [2], - "no-extend-native": [2], - "no-extra-bind": [2], - "no-extra-boolean-cast": [2], - "no-extra-parens": [0], - "no-extra-semi": [2], - "no-extra-strict": [2], - "no-fallthrough": [2], - "no-floating-decimal": [2], - "no-func-assign": [2], - "no-implied-eval": [2], - "no-inline-comments": [0], - "no-inner-declarations": [2, "functions"], - "no-invalid-regexp": [2], - "no-irregular-whitespace": [2], - "no-iterator": [2], - "no-label-var": [2], - "no-labels": [2], - "no-lone-blocks": [2], - "no-lonely-if": [2], - "no-loop-func": [2], - "no-mixed-requires": [0, false], - "no-mixed-spaces-and-tabs": [2, false], - "no-multi-spaces": [2], - "no-multi-str": [2], - "no-multiple-empty-lines": [0, {"max": 2}], - "no-native-reassign": [2], - "no-negated-in-lhs": [2], - "no-nested-ternary": [0], - "no-new": [2], - "no-new-func": [2], - "no-new-object": [2], - "no-new-require": [0], - "no-new-wrappers": [2], - "no-obj-calls": [2], - "no-octal": [2], - "no-octal-escape": [2], - "no-path-concat": [0], - "no-plusplus": [0], - "no-process-env": [0], - "no-process-exit": [2], - "no-proto": [2], - "no-redeclare": [2], - "no-regex-spaces": [2], - "no-reserved-keys": [2], - "no-restricted-modules": [0], - "no-return-assign": [2], - "no-script-url": [2], - "no-self-compare": [0], - "no-sequences": [2], - "no-shadow": [2], - "no-shadow-restricted-names": [2], - "no-space-before-semi": [2], - "no-spaced-func": [2], - "no-sparse-arrays": [2], - "no-sync": [0], - "no-ternary": [0], - "no-trailing-spaces": [2], - "no-undef": [2], - "no-undef-init": [2], - "no-undefined": [0], - "no-underscore-dangle": [2], - "no-unreachable": [2], - "no-unused-expressions": [2], - "no-unused-vars": [2, { "vars": "all", "args": "after-used" }], - "no-use-before-define": [2], - "no-void": [0], - "no-warning-comments": [0, { "terms": ["todo", "fixme", "xxx"], "location": "start" }], - "no-with": [2], - "no-wrap-func": [2], - "one-var": [0], - "operator-assignment": [0, "always"], - "padded-blocks": [0], - "quote-props": [0], - "radix": [0], - "semi": [2], - "sort-vars": [0], - "space-after-keywords": [2, "always", { "checkFunctionKeyword": true }], - "space-before-blocks": [0, "always"], - "space-in-brackets": [0, "never", { - "singleValue": true, - "arraysInArrays": false, - "arraysInObjects": false, - "objectsInArrays": true, - "objectsInObjects": true, - "propertyName": false - }], - "space-in-parens": [2, "never"], - "space-infix-ops": [2], - "space-return-throw-case": [2], - "space-after-function-name": [2, "never"], - "space-unary-ops": [2, { "words": true, "nonwords": false }], - "spaced-line-comment": [0, "always"], - "strict": [0], - "use-isnan": [2], - "valid-jsdoc": [0], - "valid-typeof": [2], - "vars-on-top": [0], - "wrap-iife": [2], - "wrap-regex": [2], - "yoda": [2, "never", { "exceptRange": true }] - } -} diff --git a/node_modules/is-regex/.jscs.json b/node_modules/is-regex/.jscs.json deleted file mode 100644 index 496777b..0000000 --- a/node_modules/is-regex/.jscs.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "additionalRules": [], - - "requireCurlyBraces": ["if", "else", "for", "while", "do", "try", "catch"], - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": "allButReserved", - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": true, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - } -} - diff --git a/node_modules/is-regex/.npmignore b/node_modules/is-regex/.npmignore deleted file mode 100644 index a72b52e..0000000 --- a/node_modules/is-regex/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz - -pids -logs -results - -npm-debug.log -node_modules diff --git a/node_modules/is-regex/.travis.yml b/node_modules/is-regex/.travis.yml deleted file mode 100644 index e318c1d..0000000 --- a/node_modules/is-regex/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.9" - - "0.8" - - "0.6" - - "0.4" -before_install: - - '[ "${TRAVIS_NODE_VERSION}" == "0.6" ] || npm install -g npm@~1.4.6' -sudo: false -matrix: - fast_finish: true - allow_failures: - - node_js: "0.11" - - node_js: "0.9" - - node_js: "0.6" - - node_js: "0.4" diff --git a/node_modules/is-regex/CHANGELOG.md b/node_modules/is-regex/CHANGELOG.md deleted file mode 100644 index a253bcd..0000000 --- a/node_modules/is-regex/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -1.0.3 / 2015-01-29 -================= - * If @@toStringTag is not present, use the old-school Object#toString test. - -1.0.2 / 2015-01-29 -================= - * Improve optimization by separating the try/catch, and bailing out early when not typeof "object". - -1.0.1 / 2015-01-28 -================= - * Update `jscs`, `tape`, `covert` - * Use RegExp#exec to test if something is a regex, which works even with ES6 @@toStringTag. - -1.0.0 / 2014-05-19 -================= - * Initial release. diff --git a/node_modules/is-regex/LICENSE b/node_modules/is-regex/LICENSE deleted file mode 100644 index 47b7b50..0000000 --- a/node_modules/is-regex/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-regex/Makefile b/node_modules/is-regex/Makefile deleted file mode 100644 index b9e4fe1..0000000 --- a/node_modules/is-regex/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -# Since we rely on paths relative to the makefile location, abort if make isn't being run from there. -$(if $(findstring /,$(MAKEFILE_LIST)),$(error Please only invoke this makefile from the directory it resides in)) - - # The files that need updating when incrementing the version number. -VERSIONED_FILES := *.js *.json README* - - -# Add the local npm packages' bin folder to the PATH, so that `make` can find them, when invoked directly. -# Note that rather than using `$(npm bin)` the 'node_modules/.bin' path component is hard-coded, so that invocation works even from an environment -# where npm is (temporarily) unavailable due to having deactivated an nvm instance loaded into the calling shell in order to avoid interference with tests. -export PATH := $(shell printf '%s' "$$PWD/node_modules/.bin:$$PATH") -UTILS := semver -# Make sure that all required utilities can be located. -UTIL_CHECK := $(or $(shell PATH="$(PATH)" which $(UTILS) >/dev/null && echo 'ok'),$(error Did you forget to run `npm install` after cloning the repo? At least one of the required supporting utilities not found: $(UTILS))) - -# Default target (by virtue of being the first non '.'-prefixed in the file). -.PHONY: _no-target-specified -_no-target-specified: - $(error Please specify the target to make - `make list` shows targets. Alternatively, use `npm test` to run the default tests; `npm run` shows all tests) - -# Lists all targets defined in this makefile. -.PHONY: list -list: - @$(MAKE) -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | command grep -v -e '^[^[:alnum:]]' -e '^$@$$command ' | sort - -# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS). -.PHONY: test -test: - @npm test - -.PHONY: _ensure-tag -_ensure-tag: -ifndef TAG - $(error Please invoke with `make TAG= release`, where is either an increment specifier (patch, minor, major, prepatch, preminor, premajor, prerelease), or an explicit major.minor.patch version number) -endif - -CHANGELOG_ERROR = $(error No CHANGELOG specified) -.PHONY: _ensure-changelog -_ensure-changelog: - @ (git status -sb --porcelain | command grep -E '^( M|[MA] ) CHANGELOG.md' > /dev/null) || (echo no CHANGELOG.md specified && exit 2) - -# Ensures that the git workspace is clean. -.PHONY: _ensure-clean -_ensure-clean: - @[ -z "$$((git status --porcelain --untracked-files=no || echo err) | command grep -v 'CHANGELOG.md')" ] || { echo "Workspace is not clean; please commit changes first." >&2; exit 2; } - -# Makes a release; invoke with `make TAG= release`. -.PHONY: release -release: _ensure-tag _ensure-changelog _ensure-clean - @old_ver=`git describe --abbrev=0 --tags --match 'v[0-9]*.[0-9]*.[0-9]*'` || { echo "Failed to determine current version." >&2; exit 1; }; old_ver=$${old_ver#v}; \ - new_ver=`echo "$(TAG)" | sed 's/^v//'`; new_ver=$${new_ver:-patch}; \ - if printf "$$new_ver" | command grep -q '^[0-9]'; then \ - semver "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be major.minor.patch' >&2; exit 2; }; \ - semver -r "> $$old_ver" "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be HIGHER than current one.' >&2; exit 2; } \ - else \ - new_ver=`semver -i "$$new_ver" "$$old_ver"` || { echo 'Invalid version-increment specifier: $(TAG)' >&2; exit 2; } \ - fi; \ - printf "=== Bumping version **$$old_ver** to **$$new_ver** before committing and tagging:\n=== TYPE 'proceed' TO PROCEED, anything else to abort: " && read response && [ "$$response" = 'proceed' ] || { echo 'Aborted.' >&2; exit 2; }; \ - replace "$$old_ver" "$$new_ver" -- $(VERSIONED_FILES) && \ - git commit -m "v$$new_ver" $(VERSIONED_FILES) CHANGELOG.md && \ - git tag -a -m "v$$new_ver" "v$$new_ver" diff --git a/node_modules/is-regex/README.md b/node_modules/is-regex/README.md deleted file mode 100644 index cd09468..0000000 --- a/node_modules/is-regex/README.md +++ /dev/null @@ -1,54 +0,0 @@ -#is-regex [![Version Badge][2]][1] - -[![Build Status][3]][4] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -[![browser support][9]][10] - -Is this value a JS regex? -This module works cross-realm/iframe, and despite ES6 @@toStringTag. - -## Example - -```js -var isRegex = require('is-regex'); -var assert = require('assert'); - -assert.notOk(isRegex(undefined)); -assert.notOk(isRegex(null)); -assert.notOk(isRegex(false)); -assert.notOk(isRegex(true)); -assert.notOk(isRegex(42)); -assert.notOk(isRegex('foo')); -assert.notOk(isRegex(function () {})); -assert.notOk(isRegex([])); -assert.notOk(isRegex({})); - -assert.ok(isRegex(/a/g)); -assert.ok(isRegex(new RegExp('a', 'g'))); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-regex -[2]: http://vb.teelaun.ch/ljharb/is-regex.svg -[3]: https://travis-ci.org/ljharb/is-regex.svg -[4]: https://travis-ci.org/ljharb/is-regex -[5]: https://david-dm.org/ljharb/is-regex.svg -[6]: https://david-dm.org/ljharb/is-regex -[7]: https://david-dm.org/ljharb/is-regex/dev-status.svg -[8]: https://david-dm.org/ljharb/is-regex#info=devDependencies -[9]: https://ci.testling.com/ljharb/is-regex.png -[10]: https://ci.testling.com/ljharb/is-regex -[11]: https://nodei.co/npm/is-regex.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is-regex.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/is-regex.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is-regex - diff --git a/node_modules/is-regex/index.js b/node_modules/is-regex/index.js deleted file mode 100644 index 7676c75..0000000 --- a/node_modules/is-regex/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var regexExec = RegExp.prototype.exec; -var tryRegexExec = function tryRegexExec(value) { - try { - regexExec.call(value); - return true; - } catch (e) { - return false; - } -}; -var toStr = Object.prototype.toString; -var regexClass = '[object RegExp]'; -var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; - -module.exports = function isRegex(value) { - if (typeof value !== 'object') { return false; } - return hasToStringTag ? tryRegexExec(value) : toStr.call(value) === regexClass; -}; diff --git a/node_modules/is-regex/package.json b/node_modules/is-regex/package.json deleted file mode 100644 index 0528287..0000000 --- a/node_modules/is-regex/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "_args": [ - [ - "is-regex@^1.0.3", - "/Users/jbaylina/git/MVP/node_modules/es-abstract" - ] - ], - "_from": "is-regex@>=1.0.3 <2.0.0", - "_id": "is-regex@1.0.3", - "_inCache": true, - "_installable": true, - "_location": "/is-regex", - "_nodeVersion": "1.0.4", - "_npmUser": { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - "_npmVersion": "2.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "is-regex", - "raw": "is-regex@^1.0.3", - "rawSpec": "^1.0.3", - "scope": null, - "spec": ">=1.0.3 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.3.tgz", - "_shasum": "0d55182bddf9f2fde278220aec3a75642c908637", - "_shrinkwrap": null, - "_spec": "is-regex@^1.0.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/es-abstract", - "author": { - "name": "Jordan Harband" - }, - "bugs": { - "url": "https://github.com/ljharb/is-regex/issues" - }, - "dependencies": {}, - "description": "Is this value a JS regex? Works cross-realm/iframe, and despite ES6 @@toStringTag", - "devDependencies": { - "covert": "1.0.0", - "editorconfig-tools": "~0.0.1", - "eslint": "~0.13.0", - "jscs": "~1.10.0", - "nsp": "~1.0.0", - "semver": "~4.2.0", - "tape": "~3.4.0" - }, - "directories": {}, - "dist": { - "shasum": "0d55182bddf9f2fde278220aec3a75642c908637", - "tarball": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.3.tgz" - }, - "engines": { - "node": ">= 0.4" - }, - "gitHead": "405685f6172a14d85e7a5f45e7112c9a608813f2", - "homepage": "https://github.com/ljharb/is-regex", - "keywords": [ - "regex", - "regexp", - "is", - "regular expression", - "regular", - "expression" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "ljharb@gmail.com", - "name": "ljharb" - } - ], - "name": "is-regex", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/is-regex.git" - }, - "scripts": { - "coverage": "covert test.js", - "coverage-quiet": "covert test.js --quiet", - "eccheck": "editorconfig-tools check *.js **/*.js > /dev/null", - "eslint": "eslint test.js *.js", - "jscs": "jscs *.js", - "lint": "npm run jscs && npm run eslint", - "security": "nsp package", - "test": "npm run lint && node test.js && npm run security" - }, - "testling": { - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..12.0", - "opera/15.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ], - "files": "test.js" - }, - "version": "1.0.3" -} diff --git a/node_modules/is-regex/test.js b/node_modules/is-regex/test.js deleted file mode 100644 index ee88953..0000000 --- a/node_modules/is-regex/test.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isRegex = require('./'); -var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; - -test('not regexes', function (t) { - t.notOk(isRegex(), 'undefined is not regex'); - t.notOk(isRegex(null), 'null is not regex'); - t.notOk(isRegex(false), 'false is not regex'); - t.notOk(isRegex(true), 'true is not regex'); - t.notOk(isRegex(42), 'number is not regex'); - t.notOk(isRegex('foo'), 'string is not regex'); - t.notOk(isRegex([]), 'array is not regex'); - t.notOk(isRegex({}), 'object is not regex'); - t.notOk(isRegex(function () {}), 'function is not regex'); - t.end(); -}); - -test('@@toStringTag', { skip: !hasToStringTag }, function (t) { - var regex = /a/g; - var fakeRegex = { valueOf: function () { return regex; }, toString: function () { return String(regex); } }; - fakeRegex[Symbol.toStringTag] = function () { return 'RegExp'; }; - t.notOk(isRegex(fakeRegex), 'fake RegExp with @@toStringTag "RegExp" is not regex'); - t.end(); -}); - -test('regexes', function (t) { - t.ok(isRegex(/a/g), 'regex literal is regex'); - t.ok(isRegex(new RegExp('a', 'g')), 'regex object is regex'); - t.end(); -}); diff --git a/node_modules/is-stream/index.js b/node_modules/is-stream/index.js deleted file mode 100644 index 6f7ec91..0000000 --- a/node_modules/is-stream/index.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var isStream = module.exports = function (stream) { - return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function'; -}; - -isStream.writable = function (stream) { - return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object'; -}; - -isStream.readable = function (stream) { - return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object'; -}; - -isStream.duplex = function (stream) { - return isStream.writable(stream) && isStream.readable(stream); -}; - -isStream.transform = function (stream) { - return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object'; -}; diff --git a/node_modules/is-stream/license b/node_modules/is-stream/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/is-stream/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/is-stream/package.json b/node_modules/is-stream/package.json deleted file mode 100644 index 68901dd..0000000 --- a/node_modules/is-stream/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "is-stream@^1.0.1", - "/Users/jbaylina/git/MVP/node_modules/node-fetch" - ] - ], - "_from": "is-stream@>=1.0.1 <2.0.0", - "_id": "is-stream@1.1.0", - "_inCache": true, - "_installable": true, - "_location": "/is-stream", - "_nodeVersion": "4.4.2", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/is-stream-1.1.0.tgz_1460446915184_0.806101513793692" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.15.0", - "_phantomChildren": {}, - "_requested": { - "name": "is-stream", - "raw": "is-stream@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/node-fetch" - ], - "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "_shasum": "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", - "_shrinkwrap": null, - "_spec": "is-stream@^1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/node-fetch", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/is-stream/issues" - }, - "dependencies": {}, - "description": "Check if something is a Node.js stream", - "devDependencies": { - "ava": "*", - "tempfile": "^1.1.0", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", - "tarball": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "e21d73f1028c189d16150cea52641059b0936310", - "homepage": "https://github.com/sindresorhus/is-stream#readme", - "keywords": [ - "stream", - "type", - "streams", - "writable", - "readable", - "duplex", - "transform", - "check", - "detect", - "is" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "is-stream", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/is-stream.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.1.0" -} diff --git a/node_modules/is-stream/readme.md b/node_modules/is-stream/readme.md deleted file mode 100644 index d8afce8..0000000 --- a/node_modules/is-stream/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# is-stream [![Build Status](https://travis-ci.org/sindresorhus/is-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/is-stream) - -> Check if something is a [Node.js stream](https://nodejs.org/api/stream.html) - - -## Install - -``` -$ npm install --save is-stream -``` - - -## Usage - -```js -const fs = require('fs'); -const isStream = require('is-stream'); - -isStream(fs.createReadStream('unicorn.png')); -//=> true - -isStream({}); -//=> false -``` - - -## API - -### isStream(stream) - -#### isStream.writable(stream) - -#### isStream.readable(stream) - -#### isStream.duplex(stream) - -#### isStream.transform(stream) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/is-symbol/.editorconfig b/node_modules/is-symbol/.editorconfig deleted file mode 100644 index eaa2141..0000000 --- a/node_modules/is-symbol/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -root = true - -[*] -indent_style = tab; -insert_final_newline = true; -quote_type = auto; -space_after_anonymous_functions = true; -space_after_control_statements = true; -spaces_around_operators = true; -trim_trailing_whitespace = true; -spaces_in_brackets = false; -end_of_line = lf; - diff --git a/node_modules/is-symbol/.eslintrc b/node_modules/is-symbol/.eslintrc deleted file mode 100644 index 9f56994..0000000 --- a/node_modules/is-symbol/.eslintrc +++ /dev/null @@ -1,160 +0,0 @@ -{ - "env": { - "browser": false, - "node": true, - "amd": false, - "mocha": false, - "jasmine": false - }, - - "rules": { - "block-scoped-var": [0], - "brace-style": [2, "1tbs", { "allowSingleLine": true }], - "camelcase": [2], - "comma-spacing": [2], - "comma-style": [2, "last"], - "complexity": [0, 11], - "consistent-return": [2], - "consistent-this": [0, "that"], - "curly": [2, "all"], - "default-case": [2], - "dot-notation": [2, { "allowKeywords": true }], - "eol-last": [2], - "eqeqeq": [2], - "func-names": [0], - "func-style": [0, "declaration"], - "global-strict": [0, "never"], - "guard-for-in": [0], - "handle-callback-err": [0], - "key-spacing": [2, { "beforeColon": false, "afterColon": true }], - "quotes": [2, "single", "avoid-escape"], - "max-depth": [0, 4], - "max-len": [0, 80, 4], - "max-nested-callbacks": [0, 2], - "max-params": [0, 3], - "max-statements": [0, 10], - "new-parens": [2], - "new-cap": [2], - "no-alert": [2], - "no-array-constructor": [2], - "no-bitwise": [0], - "no-caller": [2], - "no-catch-shadow": [2], - "no-comma-dangle": [2], - "no-cond-assign": [2], - "no-console": [2], - "no-constant-condition": [2], - "no-control-regex": [2], - "no-debugger": [2], - "no-delete-var": [2], - "no-div-regex": [0], - "no-dupe-keys": [2], - "no-else-return": [0], - "no-empty": [2], - "no-empty-class": [2], - "no-empty-label": [2], - "no-eq-null": [0], - "no-eval": [2], - "no-ex-assign": [2], - "no-extend-native": [2], - "no-extra-bind": [2], - "no-extra-boolean-cast": [2], - "no-extra-parens": [0], - "no-extra-semi": [2], - "no-extra-strict": [2], - "no-fallthrough": [2], - "no-floating-decimal": [2], - "no-func-assign": [2], - "no-implied-eval": [2], - "no-inline-comments": [0], - "no-inner-declarations": [2, "functions"], - "no-invalid-regexp": [2], - "no-irregular-whitespace": [2], - "no-iterator": [2], - "no-label-var": [2], - "no-labels": [2], - "no-lone-blocks": [2], - "no-lonely-if": [2], - "no-loop-func": [2], - "no-mixed-requires": [0, false], - "no-mixed-spaces-and-tabs": [2, false], - "no-multi-spaces": [2], - "no-multi-str": [2], - "no-multiple-empty-lines": [0, {"max": 2}], - "no-native-reassign": [2], - "no-negated-in-lhs": [2], - "no-nested-ternary": [0], - "no-new": [2], - "no-new-func": [2], - "no-new-object": [2], - "no-new-require": [0], - "no-new-wrappers": [2], - "no-obj-calls": [2], - "no-octal": [2], - "no-octal-escape": [2], - "no-path-concat": [0], - "no-plusplus": [0], - "no-process-env": [0], - "no-process-exit": [2], - "no-proto": [2], - "no-redeclare": [2], - "no-regex-spaces": [2], - "no-reserved-keys": [2], - "no-restricted-modules": [0], - "no-return-assign": [2], - "no-script-url": [2], - "no-self-compare": [0], - "no-sequences": [2], - "no-shadow": [2], - "no-shadow-restricted-names": [2], - "no-space-before-semi": [2], - "no-spaced-func": [2], - "no-sparse-arrays": [2], - "no-sync": [0], - "no-ternary": [0], - "no-trailing-spaces": [2], - "no-undef": [2], - "no-undef-init": [2], - "no-undefined": [0], - "no-underscore-dangle": [2], - "no-unreachable": [2], - "no-unused-expressions": [2], - "no-unused-vars": [2, { "vars": "all", "args": "after-used" }], - "no-use-before-define": [2], - "no-void": [0], - "no-warning-comments": [0, { "terms": ["todo", "fixme", "xxx"], "location": "start" }], - "no-with": [2], - "no-wrap-func": [2], - "one-var": [0], - "operator-assignment": [0, "always"], - "padded-blocks": [0], - "quote-props": [0], - "radix": [0], - "semi": [2], - "sort-vars": [0], - "space-after-keywords": [2, "always", { "checkFunctionKeyword": true }], - "space-before-blocks": [0, "always"], - "space-in-brackets": [0, "never", { - "singleValue": true, - "arraysInArrays": false, - "arraysInObjects": false, - "objectsInArrays": true, - "objectsInObjects": true, - "propertyName": false - }], - "space-in-parens": [2, "never"], - "space-infix-ops": [2], - "space-return-throw-case": [2], - "space-after-function-name": [2, "never"], - "space-unary-ops": [2, { "words": true, "nonwords": false }], - "spaced-line-comment": [0, "always"], - "strict": [0], - "use-isnan": [2], - "valid-jsdoc": [0], - "valid-typeof": [2], - "vars-on-top": [0], - "wrap-iife": [2], - "wrap-regex": [2], - "yoda": [2, "never", { "exceptRange": true }] - } -} diff --git a/node_modules/is-symbol/.jscs.json b/node_modules/is-symbol/.jscs.json deleted file mode 100644 index 496777b..0000000 --- a/node_modules/is-symbol/.jscs.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "additionalRules": [], - - "requireCurlyBraces": ["if", "else", "for", "while", "do", "try", "catch"], - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": "allButReserved", - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": true, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - } -} - diff --git a/node_modules/is-symbol/.npmignore b/node_modules/is-symbol/.npmignore deleted file mode 100644 index 59d842b..0000000 --- a/node_modules/is-symbol/.npmignore +++ /dev/null @@ -1,28 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# Commenting this out is preferred by some people, see -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- -node_modules - -# Users Environment Variables -.lock-wscript diff --git a/node_modules/is-symbol/.nvmrc b/node_modules/is-symbol/.nvmrc deleted file mode 100644 index c9c594c..0000000 --- a/node_modules/is-symbol/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -iojs diff --git a/node_modules/is-symbol/.travis.yml b/node_modules/is-symbol/.travis.yml deleted file mode 100644 index c80407f..0000000 --- a/node_modules/is-symbol/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.9" - - "0.8" - - "0.6" - - "0.4" -before_install: - - '[ "${TRAVIS_NODE_VERSION}" == "0.6" ] || npm install -g npm@1.4.6' -matrix: - fast_finish: true - allow_failures: - - node_js: "0.11" - - node_js: "0.9" - - node_js: "0.6" - - node_js: "0.4" - diff --git a/node_modules/is-symbol/CHANGELOG.md b/node_modules/is-symbol/CHANGELOG.md deleted file mode 100644 index e1a62a4..0000000 --- a/node_modules/is-symbol/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -1.0.1 / 2015-01-26 -================= - * Corrected description - -1.0.0 / 2015-01-24 -================= - * Initial release diff --git a/node_modules/is-symbol/LICENSE b/node_modules/is-symbol/LICENSE deleted file mode 100644 index b43df44..0000000 --- a/node_modules/is-symbol/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/node_modules/is-symbol/Makefile b/node_modules/is-symbol/Makefile deleted file mode 100644 index b9e4fe1..0000000 --- a/node_modules/is-symbol/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -# Since we rely on paths relative to the makefile location, abort if make isn't being run from there. -$(if $(findstring /,$(MAKEFILE_LIST)),$(error Please only invoke this makefile from the directory it resides in)) - - # The files that need updating when incrementing the version number. -VERSIONED_FILES := *.js *.json README* - - -# Add the local npm packages' bin folder to the PATH, so that `make` can find them, when invoked directly. -# Note that rather than using `$(npm bin)` the 'node_modules/.bin' path component is hard-coded, so that invocation works even from an environment -# where npm is (temporarily) unavailable due to having deactivated an nvm instance loaded into the calling shell in order to avoid interference with tests. -export PATH := $(shell printf '%s' "$$PWD/node_modules/.bin:$$PATH") -UTILS := semver -# Make sure that all required utilities can be located. -UTIL_CHECK := $(or $(shell PATH="$(PATH)" which $(UTILS) >/dev/null && echo 'ok'),$(error Did you forget to run `npm install` after cloning the repo? At least one of the required supporting utilities not found: $(UTILS))) - -# Default target (by virtue of being the first non '.'-prefixed in the file). -.PHONY: _no-target-specified -_no-target-specified: - $(error Please specify the target to make - `make list` shows targets. Alternatively, use `npm test` to run the default tests; `npm run` shows all tests) - -# Lists all targets defined in this makefile. -.PHONY: list -list: - @$(MAKE) -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | command grep -v -e '^[^[:alnum:]]' -e '^$@$$command ' | sort - -# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS). -.PHONY: test -test: - @npm test - -.PHONY: _ensure-tag -_ensure-tag: -ifndef TAG - $(error Please invoke with `make TAG= release`, where is either an increment specifier (patch, minor, major, prepatch, preminor, premajor, prerelease), or an explicit major.minor.patch version number) -endif - -CHANGELOG_ERROR = $(error No CHANGELOG specified) -.PHONY: _ensure-changelog -_ensure-changelog: - @ (git status -sb --porcelain | command grep -E '^( M|[MA] ) CHANGELOG.md' > /dev/null) || (echo no CHANGELOG.md specified && exit 2) - -# Ensures that the git workspace is clean. -.PHONY: _ensure-clean -_ensure-clean: - @[ -z "$$((git status --porcelain --untracked-files=no || echo err) | command grep -v 'CHANGELOG.md')" ] || { echo "Workspace is not clean; please commit changes first." >&2; exit 2; } - -# Makes a release; invoke with `make TAG= release`. -.PHONY: release -release: _ensure-tag _ensure-changelog _ensure-clean - @old_ver=`git describe --abbrev=0 --tags --match 'v[0-9]*.[0-9]*.[0-9]*'` || { echo "Failed to determine current version." >&2; exit 1; }; old_ver=$${old_ver#v}; \ - new_ver=`echo "$(TAG)" | sed 's/^v//'`; new_ver=$${new_ver:-patch}; \ - if printf "$$new_ver" | command grep -q '^[0-9]'; then \ - semver "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be major.minor.patch' >&2; exit 2; }; \ - semver -r "> $$old_ver" "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be HIGHER than current one.' >&2; exit 2; } \ - else \ - new_ver=`semver -i "$$new_ver" "$$old_ver"` || { echo 'Invalid version-increment specifier: $(TAG)' >&2; exit 2; } \ - fi; \ - printf "=== Bumping version **$$old_ver** to **$$new_ver** before committing and tagging:\n=== TYPE 'proceed' TO PROCEED, anything else to abort: " && read response && [ "$$response" = 'proceed' ] || { echo 'Aborted.' >&2; exit 2; }; \ - replace "$$old_ver" "$$new_ver" -- $(VERSIONED_FILES) && \ - git commit -m "v$$new_ver" $(VERSIONED_FILES) CHANGELOG.md && \ - git tag -a -m "v$$new_ver" "v$$new_ver" diff --git a/node_modules/is-symbol/README.md b/node_modules/is-symbol/README.md deleted file mode 100644 index ad3df64..0000000 --- a/node_modules/is-symbol/README.md +++ /dev/null @@ -1,46 +0,0 @@ -#is-symbol [![Version Badge][2]][1] - -[![Build Status][3]][4] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -[![browser support][9]][10] - -Is this an ES6 Symbol value? - -## Example - -```js -var isSymbol = require('is-symbol'); -assert(!isSymbol(function () {})); -assert(!isSymbol(null)); -assert(!isSymbol(function* () { yield 42; return Infinity; }); - -assert(isSymbol(Symbol.iterator)); -assert(isSymbol(Symbol('foo'))); -assert(isSymbol(Symbol.for('foo'))); -assert(isSymbol(Object(Symbol('foo')))); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-symbol -[2]: http://vb.teelaun.ch/ljharb/is-symbol.svg -[3]: https://travis-ci.org/ljharb/is-symbol.svg -[4]: https://travis-ci.org/ljharb/is-symbol -[5]: https://david-dm.org/ljharb/is-symbol.svg -[6]: https://david-dm.org/ljharb/is-symbol -[7]: https://david-dm.org/ljharb/is-symbol/dev-status.svg -[8]: https://david-dm.org/ljharb/is-symbol#info=devDependencies -[9]: https://ci.testling.com/ljharb/is-symbol.png -[10]: https://ci.testling.com/ljharb/is-symbol -[11]: https://nodei.co/npm/is-symbol.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is-symbol.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/is-symbol.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is-symbol diff --git a/node_modules/is-symbol/index.js b/node_modules/is-symbol/index.js deleted file mode 100644 index a938cbf..0000000 --- a/node_modules/is-symbol/index.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var toStr = Object.prototype.toString; -var hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol'; - -if (hasSymbols) { - var symToStr = Symbol.prototype.toString; - var symStringRegex = /^Symbol\(.*\)$/; - var isSymbolObject = function isSymbolObject(value) { - if (typeof value.valueOf() !== 'symbol') { return false; } - return symStringRegex.test(symToStr.call(value)); - }; - module.exports = function isSymbol(value) { - if (typeof value === 'symbol') { return true; } - if (toStr.call(value) !== '[object Symbol]') { return false; } - try { - return isSymbolObject(value); - } catch (e) { - return false; - } - }; -} else { - module.exports = function isSymbol(value) { - // this environment does not support Symbols. - return false; - }; -} diff --git a/node_modules/is-symbol/package.json b/node_modules/is-symbol/package.json deleted file mode 100644 index 40d44d8..0000000 --- a/node_modules/is-symbol/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "is-symbol@^1.0.1", - "/Users/jbaylina/git/MVP/node_modules/es-to-primitive" - ] - ], - "_from": "is-symbol@>=1.0.1 <2.0.0", - "_id": "is-symbol@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/is-symbol", - "_npmUser": { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "is-symbol", - "raw": "is-symbol@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/es-to-primitive" - ], - "_resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "_shasum": "3cc59f00025194b6ab2e38dbae6689256b660572", - "_shrinkwrap": null, - "_spec": "is-symbol@^1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/es-to-primitive", - "author": { - "name": "Jordan Harband" - }, - "bugs": { - "url": "https://github.com/ljharb/is-symbol/issues" - }, - "dependencies": {}, - "description": "Determine if a value is an ES6 Symbol or not.", - "devDependencies": { - "covert": "1.0.0", - "jscs": "~1.10.0", - "nsp": "~1.0.0", - "semver": "~4.2.0", - "tape": "~3.4.0" - }, - "directories": {}, - "dist": { - "shasum": "3cc59f00025194b6ab2e38dbae6689256b660572", - "tarball": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz" - }, - "engines": { - "node": ">= 0.4" - }, - "gitHead": "5bbd991ff41a459a941d205de65d533cc6c3cd8c", - "homepage": "https://github.com/ljharb/is-symbol", - "keywords": [ - "symbol", - "es6", - "is", - "Symbol" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "ljharb@gmail.com", - "name": "ljharb" - } - ], - "name": "is-symbol", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/is-symbol.git" - }, - "scripts": { - "coverage": "covert test/index.js", - "coverage:quiet": "covert test/index.js --quiet", - "lint": "jscs *.js */*.js", - "security": "nsp package", - "test": "npm run lint && node --es-staging --harmony test/index.js && npm run security" - }, - "testling": { - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ], - "files": "test/index.js" - }, - "version": "1.0.1" -} diff --git a/node_modules/is-symbol/test/index.js b/node_modules/is-symbol/test/index.js deleted file mode 100644 index 697a7b2..0000000 --- a/node_modules/is-symbol/test/index.js +++ /dev/null @@ -1,106 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isSymbol = require('../index'); - -var forEach = function (arr, func) { - var i; - for (i = 0; i < arr.length; ++i) { - func(arr[i], i, arr); - } -}; - -var hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol'; -var debug = function (value, msg) { - var output = ''; - if (hasSymbols) { - try { output += String(value); } - catch (e) { output += Symbol.prototype.toString.call(value); } - if (output === '') { - output = JSON.stringify(value); - } - } - var type = Object.prototype.toString.call(value).toLowerCase().slice(8, -1); - output += ' (' + type; - var typeOf = typeof value; - if (type !== typeOf) { - output += ', typeof: ' + typeOf; - } - return output + ') ' + msg; -}; - -test('non-symbol values', function (t) { - var nonSymbols = [ - true, - false, - Object(true), - Object(false), - null, - undefined, - {}, - [], - /a/g, - 'string', - 42, - new Date(), - function () {}, - NaN - ]; - t.plan(nonSymbols.length); - forEach(nonSymbols, function (nonSymbol) { - t.equal(false, isSymbol(nonSymbol), debug(nonSymbol, 'is not a symbol')); - }); - t.end(); -}); - -test('faked symbol values', function (t) { - t.test('real symbol valueOf', { skip: !hasSymbols }, function (st) { - var fakeSymbol = { valueOf: function () { return Symbol('foo'); } }; - st.equal(false, isSymbol(fakeSymbol), 'object with valueOf returning a symbol is not a symbol'); - st.end(); - }); - - t.test('faked @@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (st) { - var fakeSymbol = { valueOf: function () { return Symbol('foo'); } }; - fakeSymbol[Symbol.toStringTag] = 'Symbol'; - st.equal(false, isSymbol(fakeSymbol), 'object with fake Symbol @@toStringTag and valueOf returning a symbol is not a symbol'); - var notSoFakeSymbol = { valueOf: function () { return 42; } }; - notSoFakeSymbol[Symbol.toStringTag] = 'Symbol'; - st.equal(false, isSymbol(notSoFakeSymbol), 'object with fake Symbol @@toStringTag and valueOf not returning a symbol is not a symbol'); - st.end(); - }); - - var fakeSymbolString = { toString: function () { return 'Symbol(foo)'; } }; - t.equal(false, isSymbol(fakeSymbolString), 'object with toString returning Symbol(foo) is not a symbol'); - - t.end(); -}); - -test('Symbol support', { skip: !hasSymbols }, function (t) { - t.test('well-known Symbols', function (st) { - var wellKnownSymbols = Object.getOwnPropertyNames(Symbol).filter(function filterer(name) { - return name !== 'for' && name !== 'keyFor' && !(name in filterer); - }); - wellKnownSymbols.forEach(function (name) { - var sym = Symbol[name]; - st.equal(true, isSymbol(sym), debug(sym, ' is a symbol')); - }); - st.end(); - }); - - t.test('user-created symbols', function (st) { - var symbols = [ - Symbol(), - Symbol('foo'), - Symbol.for('foo'), - Object(Symbol('object')) - ]; - symbols.forEach(function (sym) { - st.equal(true, isSymbol(sym), debug(sym, ' is a symbol')); - }); - st.end(); - }); - - t.end(); -}); - diff --git a/node_modules/is-typedarray/LICENSE.md b/node_modules/is-typedarray/LICENSE.md deleted file mode 100644 index ee27ba4..0000000 --- a/node_modules/is-typedarray/LICENSE.md +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-typedarray/README.md b/node_modules/is-typedarray/README.md deleted file mode 100644 index 2752863..0000000 --- a/node_modules/is-typedarray/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# is-typedarray [![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Detect whether or not an object is a -[Typed Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays). - -## Usage - -[![NPM](https://nodei.co/npm/is-typedarray.png)](https://nodei.co/npm/is-typedarray/) - -### isTypedArray(array) - -Returns `true` when array is a Typed Array, and `false` when it is not. - -## License - -MIT. See [LICENSE.md](http://github.com/hughsk/is-typedarray/blob/master/LICENSE.md) for details. diff --git a/node_modules/is-typedarray/index.js b/node_modules/is-typedarray/index.js deleted file mode 100644 index 5859603..0000000 --- a/node_modules/is-typedarray/index.js +++ /dev/null @@ -1,41 +0,0 @@ -module.exports = isTypedArray -isTypedArray.strict = isStrictTypedArray -isTypedArray.loose = isLooseTypedArray - -var toString = Object.prototype.toString -var names = { - '[object Int8Array]': true - , '[object Int16Array]': true - , '[object Int32Array]': true - , '[object Uint8Array]': true - , '[object Uint8ClampedArray]': true - , '[object Uint16Array]': true - , '[object Uint32Array]': true - , '[object Float32Array]': true - , '[object Float64Array]': true -} - -function isTypedArray(arr) { - return ( - isStrictTypedArray(arr) - || isLooseTypedArray(arr) - ) -} - -function isStrictTypedArray(arr) { - return ( - arr instanceof Int8Array - || arr instanceof Int16Array - || arr instanceof Int32Array - || arr instanceof Uint8Array - || arr instanceof Uint8ClampedArray - || arr instanceof Uint16Array - || arr instanceof Uint32Array - || arr instanceof Float32Array - || arr instanceof Float64Array - ) -} - -function isLooseTypedArray(arr) { - return names[toString.call(arr)] -} diff --git a/node_modules/is-typedarray/package.json b/node_modules/is-typedarray/package.json deleted file mode 100644 index 72d4c83..0000000 --- a/node_modules/is-typedarray/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "is-typedarray@~1.0.0", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "is-typedarray@>=1.0.0 <1.1.0", - "_id": "is-typedarray@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/is-typedarray", - "_nodeVersion": "0.10.36", - "_npmUser": { - "email": "hughskennedy@gmail.com", - "name": "hughsk" - }, - "_npmVersion": "2.7.5", - "_phantomChildren": {}, - "_requested": { - "name": "is-typedarray", - "raw": "is-typedarray@~1.0.0", - "rawSpec": "~1.0.0", - "scope": null, - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "_shasum": "e479c80858df0c1b11ddda6940f96011fcda4a9a", - "_shrinkwrap": null, - "_spec": "is-typedarray@~1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "hughskennedy@gmail.com", - "name": "Hugh Kennedy", - "url": "http://hughsk.io/" - }, - "bugs": { - "url": "https://github.com/hughsk/is-typedarray/issues" - }, - "dependencies": {}, - "description": "Detect whether or not an object is a Typed Array", - "devDependencies": { - "tape": "^2.13.1" - }, - "directories": {}, - "dist": { - "shasum": "e479c80858df0c1b11ddda6940f96011fcda4a9a", - "tarball": "http://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - }, - "gitHead": "0617cfa871686cf541af62b144f130488f44f6fe", - "homepage": "https://github.com/hughsk/is-typedarray", - "keywords": [ - "typed", - "array", - "detect", - "is", - "util" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "hughskennedy@gmail.com", - "name": "hughsk" - } - ], - "name": "is-typedarray", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/hughsk/is-typedarray.git" - }, - "scripts": { - "test": "node test" - }, - "version": "1.0.0" -} diff --git a/node_modules/is-typedarray/test.js b/node_modules/is-typedarray/test.js deleted file mode 100644 index b0c176f..0000000 --- a/node_modules/is-typedarray/test.js +++ /dev/null @@ -1,34 +0,0 @@ -var test = require('tape') -var ista = require('./') - -test('strict', function(t) { - t.ok(ista.strict(new Int8Array), 'Int8Array') - t.ok(ista.strict(new Int16Array), 'Int16Array') - t.ok(ista.strict(new Int32Array), 'Int32Array') - t.ok(ista.strict(new Uint8Array), 'Uint8Array') - t.ok(ista.strict(new Uint16Array), 'Uint16Array') - t.ok(ista.strict(new Uint32Array), 'Uint32Array') - t.ok(ista.strict(new Float32Array), 'Float32Array') - t.ok(ista.strict(new Float64Array), 'Float64Array') - - t.ok(!ista.strict(new Array), 'Array') - t.ok(!ista.strict([]), '[]') - - t.end() -}) - -test('loose', function(t) { - t.ok(ista.loose(new Int8Array), 'Int8Array') - t.ok(ista.loose(new Int16Array), 'Int16Array') - t.ok(ista.loose(new Int32Array), 'Int32Array') - t.ok(ista.loose(new Uint8Array), 'Uint8Array') - t.ok(ista.loose(new Uint16Array), 'Uint16Array') - t.ok(ista.loose(new Uint32Array), 'Uint32Array') - t.ok(ista.loose(new Float32Array), 'Float32Array') - t.ok(ista.loose(new Float64Array), 'Float64Array') - - t.ok(!ista.loose(new Array), 'Array') - t.ok(!ista.loose([]), '[]') - - t.end() -}) diff --git a/node_modules/is-utf8/LICENSE b/node_modules/is-utf8/LICENSE deleted file mode 100644 index 2c8d4b9..0000000 --- a/node_modules/is-utf8/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2014 Wei Fanzhe - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -   -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-utf8/README.md b/node_modules/is-utf8/README.md deleted file mode 100644 index b62ddde..0000000 --- a/node_modules/is-utf8/README.md +++ /dev/null @@ -1,16 +0,0 @@ -#utf8 detector - -Detect if a Buffer is utf8 encoded. -It need The minimum amount of bytes is 4. - - -```javascript - var fs = require('fs'); - var isUtf8 = require('is-utf8'); - var ansi = fs.readFileSync('ansi.txt'); - var utf8 = fs.readFileSync('utf8.txt'); - - console.log('ansi.txt is utf8: '+isUtf8(ansi)); //false - console.log('utf8.txt is utf8: '+isUtf8(utf8)); //true -``` - diff --git a/node_modules/is-utf8/is-utf8.js b/node_modules/is-utf8/is-utf8.js deleted file mode 100644 index 8a5f15d..0000000 --- a/node_modules/is-utf8/is-utf8.js +++ /dev/null @@ -1,76 +0,0 @@ - -exports = module.exports = function(bytes) -{ - var i = 0; - while(i < bytes.length) - { - if( (// ASCII - bytes[i] == 0x09 || - bytes[i] == 0x0A || - bytes[i] == 0x0D || - (0x20 <= bytes[i] && bytes[i] <= 0x7E) - ) - ) { - i += 1; - continue; - } - - if( (// non-overlong 2-byte - (0xC2 <= bytes[i] && bytes[i] <= 0xDF) && - (0x80 <= bytes[i+1] && bytes[i+1] <= 0xBF) - ) - ) { - i += 2; - continue; - } - - if( (// excluding overlongs - bytes[i] == 0xE0 && - (0xA0 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) - ) || - (// straight 3-byte - ((0xE1 <= bytes[i] && bytes[i] <= 0xEC) || - bytes[i] == 0xEE || - bytes[i] == 0xEF) && - (0x80 <= bytes[i + 1] && bytes[i+1] <= 0xBF) && - (0x80 <= bytes[i+2] && bytes[i+2] <= 0xBF) - ) || - (// excluding surrogates - bytes[i] == 0xED && - (0x80 <= bytes[i+1] && bytes[i+1] <= 0x9F) && - (0x80 <= bytes[i+2] && bytes[i+2] <= 0xBF) - ) - ) { - i += 3; - continue; - } - - if( (// planes 1-3 - bytes[i] == 0xF0 && - (0x90 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) && - (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF) - ) || - (// planes 4-15 - (0xF1 <= bytes[i] && bytes[i] <= 0xF3) && - (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) && - (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF) - ) || - (// plane 16 - bytes[i] == 0xF4 && - (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x8F) && - (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) && - (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF) - ) - ) { - i += 4; - continue; - } - - return false; - } - - return true; -} diff --git a/node_modules/is-utf8/package.json b/node_modules/is-utf8/package.json deleted file mode 100644 index 32da8bb..0000000 --- a/node_modules/is-utf8/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_args": [ - [ - "is-utf8@^0.2.0", - "/Users/jbaylina/git/MVP/node_modules/strip-bom" - ] - ], - "_from": "is-utf8@>=0.2.0 <0.3.0", - "_id": "is-utf8@0.2.1", - "_inCache": true, - "_installable": true, - "_location": "/is-utf8", - "_nodeVersion": "2.3.4", - "_npmUser": { - "email": "whyer1@gmail.com", - "name": "wayfind" - }, - "_npmVersion": "2.12.1", - "_phantomChildren": {}, - "_requested": { - "name": "is-utf8", - "raw": "is-utf8@^0.2.0", - "rawSpec": "^0.2.0", - "scope": null, - "spec": ">=0.2.0 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/strip-bom" - ], - "_resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "_shasum": "4b0da1442104d1b336340e80797e865cf39f7d72", - "_shrinkwrap": null, - "_spec": "is-utf8@^0.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/strip-bom", - "author": { - "name": "wayfind" - }, - "bugs": { - "url": "https://github.com/wayfind/is-utf8/issues" - }, - "dependencies": {}, - "description": "Detect if a buffer is utf8 encoded.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "4b0da1442104d1b336340e80797e865cf39f7d72", - "tarball": "http://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - }, - "files": [ - "is-utf8.js" - ], - "gitHead": "709df7202f9c3f93cdc2463b352dd80d8de9ce0b", - "homepage": "https://github.com/wayfind/is-utf8#readme", - "keywords": [ - "utf8", - "charset" - ], - "license": "MIT", - "main": "is-utf8.js", - "maintainers": [ - { - "email": "whyer1@gmail.com", - "name": "wayfind" - } - ], - "name": "is-utf8", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/wayfind/is-utf8.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "0.2.1" -} diff --git a/node_modules/isarray/README.md b/node_modules/isarray/README.md deleted file mode 100644 index 052a62b..0000000 --- a/node_modules/isarray/README.md +++ /dev/null @@ -1,54 +0,0 @@ - -# isarray - -`Array#isArray` for older browsers. - -## Usage - -```js -var isArray = require('isarray'); - -console.log(isArray([])); // => true -console.log(isArray({})); // => false -``` - -## Installation - -With [npm](http://npmjs.org) do - -```bash -$ npm install isarray -``` - -Then bundle for the browser with -[browserify](https://github.com/substack/browserify). - -With [component](http://component.io) do - -```bash -$ component install juliangruber/isarray -``` - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/isarray/build/build.js b/node_modules/isarray/build/build.js deleted file mode 100644 index ec58596..0000000 --- a/node_modules/isarray/build/build.js +++ /dev/null @@ -1,209 +0,0 @@ - -/** - * Require the given path. - * - * @param {String} path - * @return {Object} exports - * @api public - */ - -function require(path, parent, orig) { - var resolved = require.resolve(path); - - // lookup failed - if (null == resolved) { - orig = orig || path; - parent = parent || 'root'; - var err = new Error('Failed to require "' + orig + '" from "' + parent + '"'); - err.path = orig; - err.parent = parent; - err.require = true; - throw err; - } - - var module = require.modules[resolved]; - - // perform real require() - // by invoking the module's - // registered function - if (!module.exports) { - module.exports = {}; - module.client = module.component = true; - module.call(this, module.exports, require.relative(resolved), module); - } - - return module.exports; -} - -/** - * Registered modules. - */ - -require.modules = {}; - -/** - * Registered aliases. - */ - -require.aliases = {}; - -/** - * Resolve `path`. - * - * Lookup: - * - * - PATH/index.js - * - PATH.js - * - PATH - * - * @param {String} path - * @return {String} path or null - * @api private - */ - -require.resolve = function(path) { - if (path.charAt(0) === '/') path = path.slice(1); - var index = path + '/index.js'; - - var paths = [ - path, - path + '.js', - path + '.json', - path + '/index.js', - path + '/index.json' - ]; - - for (var i = 0; i < paths.length; i++) { - var path = paths[i]; - if (require.modules.hasOwnProperty(path)) return path; - } - - if (require.aliases.hasOwnProperty(index)) { - return require.aliases[index]; - } -}; - -/** - * Normalize `path` relative to the current path. - * - * @param {String} curr - * @param {String} path - * @return {String} - * @api private - */ - -require.normalize = function(curr, path) { - var segs = []; - - if ('.' != path.charAt(0)) return path; - - curr = curr.split('/'); - path = path.split('/'); - - for (var i = 0; i < path.length; ++i) { - if ('..' == path[i]) { - curr.pop(); - } else if ('.' != path[i] && '' != path[i]) { - segs.push(path[i]); - } - } - - return curr.concat(segs).join('/'); -}; - -/** - * Register module at `path` with callback `definition`. - * - * @param {String} path - * @param {Function} definition - * @api private - */ - -require.register = function(path, definition) { - require.modules[path] = definition; -}; - -/** - * Alias a module definition. - * - * @param {String} from - * @param {String} to - * @api private - */ - -require.alias = function(from, to) { - if (!require.modules.hasOwnProperty(from)) { - throw new Error('Failed to alias "' + from + '", it does not exist'); - } - require.aliases[to] = from; -}; - -/** - * Return a require function relative to the `parent` path. - * - * @param {String} parent - * @return {Function} - * @api private - */ - -require.relative = function(parent) { - var p = require.normalize(parent, '..'); - - /** - * lastIndexOf helper. - */ - - function lastIndexOf(arr, obj) { - var i = arr.length; - while (i--) { - if (arr[i] === obj) return i; - } - return -1; - } - - /** - * The relative require() itself. - */ - - function localRequire(path) { - var resolved = localRequire.resolve(path); - return require(resolved, parent, path); - } - - /** - * Resolve relative to the parent. - */ - - localRequire.resolve = function(path) { - var c = path.charAt(0); - if ('/' == c) return path.slice(1); - if ('.' == c) return require.normalize(p, path); - - // resolve deps by returning - // the dep in the nearest "deps" - // directory - var segs = parent.split('/'); - var i = lastIndexOf(segs, 'deps') + 1; - if (!i) i = 0; - path = segs.slice(0, i + 1).join('/') + '/deps/' + path; - return path; - }; - - /** - * Check if module is defined at `path`. - */ - - localRequire.exists = function(path) { - return require.modules.hasOwnProperty(localRequire.resolve(path)); - }; - - return localRequire; -}; -require.register("isarray/index.js", function(exports, require, module){ -module.exports = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; - -}); -require.alias("isarray/index.js", "isarray/index.js"); - diff --git a/node_modules/isarray/component.json b/node_modules/isarray/component.json deleted file mode 100644 index 9e31b68..0000000 --- a/node_modules/isarray/component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name" : "isarray", - "description" : "Array#isArray for older browsers", - "version" : "0.0.1", - "repository" : "juliangruber/isarray", - "homepage": "https://github.com/juliangruber/isarray", - "main" : "index.js", - "scripts" : [ - "index.js" - ], - "dependencies" : {}, - "keywords": ["browser","isarray","array"], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT" -} diff --git a/node_modules/isarray/index.js b/node_modules/isarray/index.js deleted file mode 100644 index 5f5ad45..0000000 --- a/node_modules/isarray/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; diff --git a/node_modules/isarray/package.json b/node_modules/isarray/package.json deleted file mode 100644 index b288612..0000000 --- a/node_modules/isarray/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_args": [ - [ - "isarray@0.0.1", - "/Users/jbaylina/git/MVP/node_modules/level-ws/node_modules/readable-stream" - ] - ], - "_from": "isarray@0.0.1", - "_id": "isarray@0.0.1", - "_inCache": true, - "_installable": true, - "_location": "/isarray", - "_npmUser": { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - "_npmVersion": "1.2.18", - "_phantomChildren": {}, - "_requested": { - "name": "isarray", - "raw": "isarray@0.0.1", - "rawSpec": "0.0.1", - "scope": null, - "spec": "0.0.1", - "type": "version" - }, - "_requiredBy": [ - "/level-iterator-stream/readable-stream", - "/level-ws/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf", - "_shrinkwrap": null, - "_spec": "isarray@0.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/level-ws/node_modules/readable-stream", - "author": { - "email": "mail@juliangruber.com", - "name": "Julian Gruber", - "url": "http://juliangruber.com" - }, - "bugs": { - "url": "https://github.com/juliangruber/isarray/issues" - }, - "dependencies": {}, - "description": "Array#isArray for older browsers", - "devDependencies": { - "tap": "*" - }, - "directories": {}, - "dist": { - "shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf", - "tarball": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "homepage": "https://github.com/juliangruber/isarray", - "keywords": [ - "browser", - "isarray", - "array" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - } - ], - "name": "isarray", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/isarray.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "0.0.1" -} diff --git a/node_modules/isomorphic-fetch/.editorconfig b/node_modules/isomorphic-fetch/.editorconfig deleted file mode 100644 index 7bfa0f2..0000000 --- a/node_modules/isomorphic-fetch/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -root=true - -[*] -end_of_line = lf -insert_final_newline = true - -[*.js] -indent_style = tab - -[*.json] -indent_style = space -indent_size = 2 diff --git a/node_modules/isomorphic-fetch/.jshintrc b/node_modules/isomorphic-fetch/.jshintrc deleted file mode 100644 index 3686db7..0000000 --- a/node_modules/isomorphic-fetch/.jshintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "node": true, - "browser": true, - "predef": ["describe", "it", "before"] -} diff --git a/node_modules/isomorphic-fetch/.npmignore b/node_modules/isomorphic-fetch/.npmignore deleted file mode 100644 index 5bbff15..0000000 --- a/node_modules/isomorphic-fetch/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules/ -/bower_components/ diff --git a/node_modules/isomorphic-fetch/.travis.yml b/node_modules/isomorphic-fetch/.travis.yml deleted file mode 100644 index 225affa..0000000 --- a/node_modules/isomorphic-fetch/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -node_js: - - "0.10" -before_deploy: - - npm-prepublish --verbose -deploy: - provider: npm - email: matt@mattandre.ws - api_key: - secure: eEeb1aG7phF4X5z+CQ3yzTdXtHf71Dk4ec6v5iAjRYNh/s6GLxfZS7c4qocZI8YXW3YmmsJR5zGZ2l88k2iqTtlBn0Mrp6ytwIa/jO00kDpR8V11eW9i47KRQq25eA1YW+SrLM5V/fh+s9u3VU7jhbax5eeViqVdwORI85kZrZE= - on: - all_branches: true - tags: true - repo: matthew-andrews/isomorphic-fetch diff --git a/node_modules/isomorphic-fetch/LICENSE b/node_modules/isomorphic-fetch/LICENSE deleted file mode 100644 index 2385aa9..0000000 --- a/node_modules/isomorphic-fetch/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Matt Andrews - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/isomorphic-fetch/README.md b/node_modules/isomorphic-fetch/README.md deleted file mode 100644 index 270a3e3..0000000 --- a/node_modules/isomorphic-fetch/README.md +++ /dev/null @@ -1,45 +0,0 @@ -isomorphic-fetch [![Build Status](https://travis-ci.org/matthew-andrews/isomorphic-fetch.svg?branch=master)](https://travis-ci.org/matthew-andrews/isomorphic-fetch) -================ - -Fetch for node and Browserify. Built on top of [GitHub's WHATWG Fetch polyfill](https://github.com/github/fetch). - -## Warnings - -- This adds `fetch` as a global so that its API is consistent between client and server. -- You must bring your own ES6 Promise compatible polyfill, I suggest [es6-promise](https://github.com/jakearchibald/es6-promise). - -## Installation - -### NPM - -```sh -npm install --save isomorphic-fetch es6-promise -``` - -### Bower - -```sh -bower install --save isomorphic-fetch es6-promise -``` - -## Usage - -```js -require('es6-promise').polyfill(); -require('isomorphic-fetch'); - -fetch('//offline-news-api.herokuapp.com/stories') - .then(function(response) { - if (response.status >= 400) { - throw new Error("Bad response from server"); - } - return response.json(); - }) - .then(function(stories) { - console.log(stories); - }); -``` - -## License - -All open source code released by FT Labs is licenced under the MIT licence. Based on [the fine work by](https://github.com/github/fetch/pull/31) **[jxck](https://github.com/Jxck)**. diff --git a/node_modules/isomorphic-fetch/bower.json b/node_modules/isomorphic-fetch/bower.json deleted file mode 100644 index dcefb04..0000000 --- a/node_modules/isomorphic-fetch/bower.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "isomorphic-fetch", - "main": ["fetch-bower.js"], - "dependencies": { - "fetch": "github/fetch#>=0.10.0" - } -} diff --git a/node_modules/isomorphic-fetch/fetch-bower.js b/node_modules/isomorphic-fetch/fetch-bower.js deleted file mode 100644 index 557a2fe..0000000 --- a/node_modules/isomorphic-fetch/fetch-bower.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('fetch'); diff --git a/node_modules/isomorphic-fetch/fetch-npm-browserify.js b/node_modules/isomorphic-fetch/fetch-npm-browserify.js deleted file mode 100644 index 7f16e23..0000000 --- a/node_modules/isomorphic-fetch/fetch-npm-browserify.js +++ /dev/null @@ -1,6 +0,0 @@ -// the whatwg-fetch polyfill installs the fetch() function -// on the global object (window or self) -// -// Return that as the export for use in Webpack, Browserify etc. -require('whatwg-fetch'); -module.exports = self.fetch.bind(self); diff --git a/node_modules/isomorphic-fetch/fetch-npm-node.js b/node_modules/isomorphic-fetch/fetch-npm-node.js deleted file mode 100644 index bbd3dd1..0000000 --- a/node_modules/isomorphic-fetch/fetch-npm-node.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -var realFetch = require('node-fetch'); -module.exports = function(url, options) { - if (/^\/\//.test(url)) { - url = 'https:' + url; - } - return realFetch.call(this, url, options); -}; - -if (!global.fetch) { - global.fetch = module.exports; - global.Response = realFetch.Response; - global.Headers = realFetch.Headers; - global.Request = realFetch.Request; -} diff --git a/node_modules/isomorphic-fetch/package.json b/node_modules/isomorphic-fetch/package.json deleted file mode 100644 index d800582..0000000 --- a/node_modules/isomorphic-fetch/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "isomorphic-fetch@^2.2.0", - "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine" - ] - ], - "_from": "isomorphic-fetch@>=2.2.0 <3.0.0", - "_id": "isomorphic-fetch@2.2.1", - "_inCache": true, - "_installable": true, - "_location": "/isomorphic-fetch", - "_nodeVersion": "4.2.3", - "_npmUser": { - "email": "strategic.products@ft.com", - "name": "financial-times" - }, - "_npmVersion": "2.14.7", - "_phantomChildren": {}, - "_requested": { - "name": "isomorphic-fetch", - "raw": "isomorphic-fetch@^2.2.0", - "rawSpec": "^2.2.0", - "scope": null, - "spec": ">=2.2.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "_shasum": "611ae1acf14f5e81f729507472819fe9733558a9", - "_shrinkwrap": null, - "_spec": "isomorphic-fetch@^2.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine", - "author": { - "email": "matt@mattandre.ws", - "name": "Matt Andrews" - }, - "browser": "fetch-npm-browserify.js", - "bugs": { - "url": "https://github.com/matthew-andrews/isomorphic-fetch/issues" - }, - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, - "description": "Isomorphic WHATWG Fetch API, for Node & Browserify", - "devDependencies": { - "chai": "^1.10.0", - "es6-promise": "^2.0.1", - "jshint": "^2.5.11", - "lintspaces-cli": "0.0.4", - "mocha": "^2.1.0", - "nock": "^0.56.0", - "npm-prepublish": "^1.0.2" - }, - "directories": {}, - "dist": { - "shasum": "611ae1acf14f5e81f729507472819fe9733558a9", - "tarball": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz" - }, - "gitHead": "43437dc5b381e391b73522d71cea23fc72675154", - "homepage": "https://github.com/matthew-andrews/isomorphic-fetch/issues", - "license": "MIT", - "main": "fetch-npm-node.js", - "maintainers": [ - { - "email": "strategic.products@ft.com", - "name": "financial-times" - }, - { - "email": "matt@mattandre.ws", - "name": "mattandrews" - } - ], - "name": "isomorphic-fetch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/matthew-andrews/isomorphic-fetch.git" - }, - "scripts": { - "files": "find . -name '*.js' ! -path './node_modules/*' ! -path './bower_components/*'", - "test": "jshint `npm run -s files` && lintspaces -i js-comments -e .editorconfig `npm run -s files` && mocha" - }, - "version": "2.2.1" -} diff --git a/node_modules/isomorphic-fetch/test/api.test.js b/node_modules/isomorphic-fetch/test/api.test.js deleted file mode 100644 index c25a5cb..0000000 --- a/node_modules/isomorphic-fetch/test/api.test.js +++ /dev/null @@ -1,51 +0,0 @@ -/*global fetch*/ -"use strict"; - -require('es6-promise').polyfill(); -require('../fetch-npm-node'); -var expect = require('chai').expect; -var nock = require('nock'); -var good = 'hello world. 你好世界。'; -var bad = 'good bye cruel world. 再见残酷的世界。'; - -function responseToText(response) { - if (response.status >= 400) throw new Error("Bad server response"); - return response.text(); -} - -describe('fetch', function() { - - before(function() { - nock('https://mattandre.ws') - .get('/succeed.txt') - .reply(200, good); - nock('https://mattandre.ws') - .get('/fail.txt') - .reply(404, bad); - }); - - it('should be defined', function() { - expect(fetch).to.be.a('function'); - }); - - it('should facilitate the making of requests', function(done) { - fetch('//mattandre.ws/succeed.txt') - .then(responseToText) - .then(function(data) { - expect(data).to.equal(good); - done(); - }) - .catch(done); - }); - - it('should do the right thing with bad requests', function(done) { - fetch('//mattandre.ws/fail.txt') - .then(responseToText) - .catch(function(err) { - expect(err.toString()).to.equal("Error: Bad server response"); - done(); - }) - .catch(done); - }); - -}); diff --git a/node_modules/isstream/.jshintrc b/node_modules/isstream/.jshintrc deleted file mode 100644 index c8ef3ca..0000000 --- a/node_modules/isstream/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "predef": [ ] - , "bitwise": false - , "camelcase": false - , "curly": false - , "eqeqeq": false - , "forin": false - , "immed": false - , "latedef": false - , "noarg": true - , "noempty": true - , "nonew": true - , "plusplus": false - , "quotmark": true - , "regexp": false - , "undef": true - , "unused": true - , "strict": false - , "trailing": true - , "maxlen": 120 - , "asi": true - , "boss": true - , "debug": true - , "eqnull": true - , "esnext": true - , "evil": true - , "expr": true - , "funcscope": false - , "globalstrict": false - , "iterator": false - , "lastsemic": true - , "laxbreak": true - , "laxcomma": true - , "loopfunc": true - , "multistr": false - , "onecase": false - , "proto": false - , "regexdash": false - , "scripturl": true - , "smarttabs": false - , "shadow": false - , "sub": true - , "supernew": false - , "validthis": true - , "browser": true - , "couch": false - , "devel": false - , "dojo": false - , "mootools": false - , "node": true - , "nonstandard": true - , "prototypejs": false - , "rhino": false - , "worker": true - , "wsh": false - , "nomen": false - , "onevar": false - , "passfail": false -} \ No newline at end of file diff --git a/node_modules/isstream/.npmignore b/node_modules/isstream/.npmignore deleted file mode 100644 index aa1ec1e..0000000 --- a/node_modules/isstream/.npmignore +++ /dev/null @@ -1 +0,0 @@ -*.tgz diff --git a/node_modules/isstream/.travis.yml b/node_modules/isstream/.travis.yml deleted file mode 100644 index 1fec2ab..0000000 --- a/node_modules/isstream/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.11" -branches: - only: - - master -notifications: - email: - - rod@vagg.org -script: npm test diff --git a/node_modules/isstream/LICENSE.md b/node_modules/isstream/LICENSE.md deleted file mode 100644 index 43f7153..0000000 --- a/node_modules/isstream/LICENSE.md +++ /dev/null @@ -1,11 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2015 Rod Vagg ---------------------------- - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/isstream/README.md b/node_modules/isstream/README.md deleted file mode 100644 index 06770e8..0000000 --- a/node_modules/isstream/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# isStream - -[![Build Status](https://secure.travis-ci.org/rvagg/isstream.png)](http://travis-ci.org/rvagg/isstream) - -**Test if an object is a `Stream`** - -[![NPM](https://nodei.co/npm/isstream.svg)](https://nodei.co/npm/isstream/) - -The missing `Stream.isStream(obj)`: determine if an object is standard Node.js `Stream`. Works for Node-core `Stream` objects (for 0.8, 0.10, 0.11, and in theory, older and newer versions) and all versions of **[readable-stream](https://github.com/isaacs/readable-stream)**. - -## Usage: - -```js -var isStream = require('isstream') -var Stream = require('stream') - -isStream(new Stream()) // true - -isStream({}) // false - -isStream(new Stream.Readable()) // true -isStream(new Stream.Writable()) // true -isStream(new Stream.Duplex()) // true -isStream(new Stream.Transform()) // true -isStream(new Stream.PassThrough()) // true -``` - -## But wait! There's more! - -You can also test for `isReadable(obj)`, `isWritable(obj)` and `isDuplex(obj)` to test for implementations of Streams2 (and Streams3) base classes. - -```js -var isReadable = require('isstream').isReadable -var isWritable = require('isstream').isWritable -var isDuplex = require('isstream').isDuplex -var Stream = require('stream') - -isReadable(new Stream()) // false -isWritable(new Stream()) // false -isDuplex(new Stream()) // false - -isReadable(new Stream.Readable()) // true -isReadable(new Stream.Writable()) // false -isReadable(new Stream.Duplex()) // true -isReadable(new Stream.Transform()) // true -isReadable(new Stream.PassThrough()) // true - -isWritable(new Stream.Readable()) // false -isWritable(new Stream.Writable()) // true -isWritable(new Stream.Duplex()) // true -isWritable(new Stream.Transform()) // true -isWritable(new Stream.PassThrough()) // true - -isDuplex(new Stream.Readable()) // false -isDuplex(new Stream.Writable()) // false -isDuplex(new Stream.Duplex()) // true -isDuplex(new Stream.Transform()) // true -isDuplex(new Stream.PassThrough()) // true -``` - -*Reminder: when implementing your own streams, please [use **readable-stream** rather than core streams](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html).* - - -## License - -**isStream** is Copyright (c) 2015 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/node_modules/isstream/isstream.js b/node_modules/isstream/isstream.js deleted file mode 100644 index a1d104a..0000000 --- a/node_modules/isstream/isstream.js +++ /dev/null @@ -1,27 +0,0 @@ -var stream = require('stream') - - -function isStream (obj) { - return obj instanceof stream.Stream -} - - -function isReadable (obj) { - return isStream(obj) && typeof obj._read == 'function' && typeof obj._readableState == 'object' -} - - -function isWritable (obj) { - return isStream(obj) && typeof obj._write == 'function' && typeof obj._writableState == 'object' -} - - -function isDuplex (obj) { - return isReadable(obj) && isWritable(obj) -} - - -module.exports = isStream -module.exports.isReadable = isReadable -module.exports.isWritable = isWritable -module.exports.isDuplex = isDuplex diff --git a/node_modules/isstream/package.json b/node_modules/isstream/package.json deleted file mode 100644 index 8e8d055..0000000 --- a/node_modules/isstream/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_args": [ - [ - "isstream@~0.1.2", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "isstream@>=0.1.2 <0.2.0", - "_id": "isstream@0.1.2", - "_inCache": true, - "_installable": true, - "_location": "/isstream", - "_nodeVersion": "1.4.3", - "_npmUser": { - "email": "rod@vagg.org", - "name": "rvagg" - }, - "_npmVersion": "2.6.1", - "_phantomChildren": {}, - "_requested": { - "name": "isstream", - "raw": "isstream@~0.1.2", - "rawSpec": "~0.1.2", - "scope": null, - "spec": ">=0.1.2 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "_shasum": "47e63f7af55afa6f92e1500e690eb8b8529c099a", - "_shrinkwrap": null, - "_spec": "isstream@~0.1.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "rod@vagg.org", - "name": "Rod Vagg" - }, - "bugs": { - "url": "https://github.com/rvagg/isstream/issues" - }, - "dependencies": {}, - "description": "Determine if an object is a Stream", - "devDependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x", - "tape": "~2.12.3" - }, - "directories": {}, - "dist": { - "shasum": "47e63f7af55afa6f92e1500e690eb8b8529c099a", - "tarball": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - }, - "gitHead": "cd39cba6da939b4fc9110825203adc506422c3dc", - "homepage": "https://github.com/rvagg/isstream", - "keywords": [ - "stream", - "type", - "streams", - "readable-stream", - "hippo" - ], - "license": "MIT", - "main": "isstream.js", - "maintainers": [ - { - "email": "rod@vagg.org", - "name": "rvagg" - } - ], - "name": "isstream", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/rvagg/isstream.git" - }, - "scripts": { - "test": "tar --xform 's/^package/readable-stream-1.0/' -zxf readable-stream-1.0.*.tgz && tar --xform 's/^package/readable-stream-1.1/' -zxf readable-stream-1.1.*.tgz && node test.js; rm -rf readable-stream-1.?/" - }, - "version": "0.1.2" -} diff --git a/node_modules/isstream/test.js b/node_modules/isstream/test.js deleted file mode 100644 index 8c950c5..0000000 --- a/node_modules/isstream/test.js +++ /dev/null @@ -1,168 +0,0 @@ -var tape = require('tape') - , EE = require('events').EventEmitter - , util = require('util') - - - , isStream = require('./') - , isReadable = require('./').isReadable - , isWritable = require('./').isWritable - , isDuplex = require('./').isDuplex - - , CoreStreams = require('stream') - , ReadableStream10 = require('./readable-stream-1.0/') - , ReadableStream11 = require('./readable-stream-1.1/') - - -function test (pass, type, stream) { - tape('isStream(' + type + ')', function (t) { - t.plan(1) - t.ok(pass === isStream(stream), type) - }) -} - - -function testReadable (pass, type, stream) { - tape('isReadable(' + type + ')', function (t) { - t.plan(1) - t.ok(pass === isReadable(stream), type) - }) -} - - -function testWritable (pass, type, stream) { - tape('isWritable(' + type + ')', function (t) { - t.plan(1) - t.ok(pass === isWritable(stream), type) - }) -} - - -function testDuplex (pass, type, stream) { - tape('isDuplex(' + type + ')', function (t) { - t.plan(1) - t.ok(pass === isDuplex(stream), type) - }) -} - - -[ undefined, null, '', true, false, 0, 1, 1.0, 'string', {}, function foo () {} ].forEach(function (o) { - test(false, 'non-stream / primitive: ' + (JSON.stringify(o) || (o && o.toString()) || o), o) -}) - - -test(false, 'fake stream obj', { pipe: function () {} }) - - -;(function () { - - // looks like a stream! - - function Stream () { - EE.call(this) - } - util.inherits(Stream, EE) - Stream.prototype.pipe = function () {} - Stream.Stream = Stream - - test(false, 'fake stream "new Stream()"', new Stream()) - -}()) - - -test(true, 'CoreStreams.Stream', new (CoreStreams.Stream)()) -test(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) -test(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) -test(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) -test(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) -test(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) - -test(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) -test(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) -test(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) -test(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) -test(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) - -test(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) -test(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) -test(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) -test(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) -test(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) - - -testReadable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) -testReadable(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) -testReadable(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) -testReadable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) -testReadable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) -testReadable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) - -testReadable(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) -testReadable(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) -testReadable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) -testReadable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) -testReadable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) - -testReadable(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) -testReadable(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) -testReadable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) -testReadable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) -testReadable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) - - -testWritable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) -testWritable(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) -testWritable(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) -testWritable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) -testWritable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) -testWritable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) - -testWritable(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) -testWritable(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) -testWritable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) -testWritable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) -testWritable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) - -testWritable(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) -testWritable(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) -testWritable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) -testWritable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) -testWritable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) - - -testDuplex(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) -testDuplex(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) -testDuplex(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) -testDuplex(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) -testDuplex(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) -testDuplex(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) - -testDuplex(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) -testDuplex(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) -testDuplex(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) -testDuplex(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) -testDuplex(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) - -testDuplex(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) -testDuplex(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) -testDuplex(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) -testDuplex(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) -testDuplex(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) - - -;[ CoreStreams, ReadableStream10, ReadableStream11 ].forEach(function (p) { - [ 'Stream', 'Readable', 'Writable', 'Duplex', 'Transform', 'PassThrough' ].forEach(function (k) { - if (!p[k]) - return - - function SubStream () { - p[k].call(this) - } - util.inherits(SubStream, p[k]) - - test(true, 'Stream subclass: ' + p.name + '.' + k, new SubStream()) - - }) -}) - - - diff --git a/node_modules/jodid25519/.npmignore b/node_modules/jodid25519/.npmignore deleted file mode 100644 index 877830c..0000000 --- a/node_modules/jodid25519/.npmignore +++ /dev/null @@ -1,11 +0,0 @@ -# Editor, IDE and dev environment stuff -*~ -.project -.settings - -# Build files and directories -/coverage -/doc/api -/build/ -/test/ -/jodid25519-*.tgz diff --git a/node_modules/jodid25519/.travis.yml b/node_modules/jodid25519/.travis.yml deleted file mode 100644 index 92a990f..0000000 --- a/node_modules/jodid25519/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.11" -branches: - only: - - master diff --git a/node_modules/jodid25519/AUTHORS.md b/node_modules/jodid25519/AUTHORS.md deleted file mode 100644 index 0c17097..0000000 --- a/node_modules/jodid25519/AUTHORS.md +++ /dev/null @@ -1,3 +0,0 @@ -* Michele Bini (original Curve25519 core code: curve25519.js) -* Ron Garret (original Ed25519 code: fast-djbec.js) -* Guy Kloss (package refactoring, unit testing) diff --git a/node_modules/jodid25519/LICENSE b/node_modules/jodid25519/LICENSE deleted file mode 100644 index c722113..0000000 --- a/node_modules/jodid25519/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Ron Garret -Copyright (c) 2007, 2013, 2014 Michele Bini -Copyright (c) 2014 Mega Limited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/jodid25519/README.md b/node_modules/jodid25519/README.md deleted file mode 100644 index 5335b2d..0000000 --- a/node_modules/jodid25519/README.md +++ /dev/null @@ -1,51 +0,0 @@ -Jodid25519 [![Build Status](https://secure.travis-ci.org/meganz/jodid25519.png)](https://travis-ci.org/meganz/jodid25519) -=================================================================================================================================== - -Javascript implementation of the Curve25519 and Ed25519 elliptic cryptography functions by Daniel J. Bernstein. - -For the API, please consult the generated documentation under doc/ (you can run `make` to generate it). - -To run the tests do the following on the console from the project's root directory: - - $ npm install - $ make test - - -Contributors ------------- - -If you are one of the contributors and want to add yourself or change the information here, please do submit a pull request. Contributors appear in no particular order. - -### For the Curve25519 submodule - -* [Graydon Hoare](https://github.com/graydon): suggested clamping the private key by default for increased safety and uniformity with other implementations. -* [liliakai](https://github.com/liliakai): spotted an unused argument in some of the functions -* [RyanC](https://github.com/ryancdotorg): removed dependency of a function to the Javascript Math library -* [Guy Kloss](https://github.com/pohutukawa): performance improvements through bit-shift operations, performance and conformance testing, documentation, compatibility with the npm package ecosystem, and more -* [Michele Bini](https://github.com/rev22): originally wrote the Javascript implementation - - -Copyright and MIT licensing ---------------------------- - -* Copyright (c) 2012 Ron Garret -* Copyright (c) 2007, 2013, 2014 Michele Bini -* Copyright (c) 2014 Mega Limited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/jodid25519/almond.0 b/node_modules/jodid25519/almond.0 deleted file mode 100644 index 55ffcc4..0000000 --- a/node_modules/jodid25519/almond.0 +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Curve 25519-based cryptography collection. - * - * EC Diffie-Hellman (ECDH) based on Curve25519 and digital signatures (EdDSA) - * based on Ed25519. - * - * Copyright (c) 2012 Ron Garret - * Copyright (c) 2007, 2013, 2014 Michele Bini - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * You should have received a copy of the license along with this program. - */ -// See https://github.com/jrburke/almond#exporting-a-public-api -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // Allow using this built library as an AMD module - // in another project. That other project will only - // see this AMD call, not the internal modules in - // the closure below. - define([], factory); - } else if (typeof module === 'object' && module.exports) { - // Allow using this built library as a CommonJS module - module.exports = factory(); - } else { - // Browser globals case. Just assign the - // result to a property on the global. - root.jodid25519 = factory(); - } -}(this, function () { - if (typeof module === 'object' && module.exports) { - // If we're running under CommonJS, our dependencies get confused and - // each clobber module.exports which leads to bad behaviour because - // almond does asynchronous loading. So just pretend we're in the - // browser globals case, and make them write to those values instead. - // TODO: ditch requirejs/almond and use browserify or something. - var __oldModule = module; - var __oldExports = exports; - var window = global; - module = undefined; - exports = undefined; - } diff --git a/node_modules/jodid25519/almond.1 b/node_modules/jodid25519/almond.1 deleted file mode 100644 index cdb5e67..0000000 --- a/node_modules/jodid25519/almond.1 +++ /dev/null @@ -1,13 +0,0 @@ - if (typeof module === 'object' && module.exports) { - // Restore CommonJS exports once our dependencies have all finished - // loading. - module = __oldModule; - exports = __oldExports; - } - // The modules for your project will be inlined above - // this snippet. Ask almond to synchronously require the - // module value for 'main' here and return it as the - // value to use for the public API for the built file. - return require('jodid25519'); -})); -// See https://github.com/jrburke/almond#exporting-a-public-api diff --git a/node_modules/jodid25519/index.js b/node_modules/jodid25519/index.js deleted file mode 100644 index 8709839..0000000 --- a/node_modules/jodid25519/index.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; - -/* - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss - * - * You should have received a copy of the license along with this program. - */ - -var dh = require('./lib/dh'); -var eddsa = require('./lib/eddsa'); -var curve255 = require('./lib/curve255'); -var utils = require('./lib/utils'); - - /** - * @exports jodid25519 - * Curve 25519-based cryptography collection. - * - * @description - * EC Diffie-Hellman (ECDH) based on Curve25519 and digital signatures - * (EdDSA) based on Ed25519. - */ - var ns = {}; - - /** Module version indicator as string (format: [major.minor.patch]). */ - ns.VERSION = '0.7.1'; - - ns.dh = dh; - ns.eddsa = eddsa; - ns.curve255 = curve255; - ns.utils = utils; - -module.exports = ns; diff --git a/node_modules/jodid25519/jsdoc.json b/node_modules/jodid25519/jsdoc.json deleted file mode 100644 index 21eba9b..0000000 --- a/node_modules/jodid25519/jsdoc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "templates": { - "applicationName": "jodid25519 Library", - "disqus": "", - "googleAnalytics": "", - "openGraph": { - "title": "jodid25519 Library", - "type": "website", - "image": "", - "site_name": "", - "url": "" - }, - "meta": { - "title": "jodid25519 Library", - "description": "", - "keyword": "" - } - } -} diff --git a/node_modules/jodid25519/lib/core.js b/node_modules/jodid25519/lib/core.js deleted file mode 100644 index f78fd74..0000000 --- a/node_modules/jodid25519/lib/core.js +++ /dev/null @@ -1,481 +0,0 @@ -"use strict"; -/** - * @fileOverview - * Core operations on curve 25519 required for the higher level modules. - */ - -/* - * Copyright (c) 2007, 2013, 2014 Michele Bini - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss, Michele Bini - * - * You should have received a copy of the license along with this program. - */ - -var crypto = require('crypto'); - - /** - * @exports jodid25519/core - * Core operations on curve 25519 required for the higher level modules. - * - * @description - * Core operations on curve 25519 required for the higher level modules. - * - *

    - * This core code is extracted from Michele Bini's curve255.js implementation, - * which is used as a base for Curve25519 ECDH and Ed25519 EdDSA operations. - *

    - */ - var ns = {}; - - function _setbit(n, c, v) { - var i = c >> 4; - var a = n[i]; - a = a + (1 << (c & 0xf)) * v; - n[i] = a; - } - - function _getbit(n, c) { - return (n[c >> 4] >> (c & 0xf)) & 1; - } - - function _ZERO() { - return [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } - - function _ONE() { - return [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } - - // Basepoint. - function _BASE() { - return [9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } - - // return -1, 0, +1 when a is less than, equal, or greater than b - function _bigintcmp(a, b) { - // The following code is a bit tricky to avoid code branching - var c, abs_r, mask; - var r = 0; - for (c = 15; c >= 0; c--) { - var x = a[c]; - var y = b[c]; - r = r + (x - y) * (1 - r * r); - // http://graphics.stanford.edu/~seander/bithacks.html#IntegerAbs - // correct for [-294967295, 294967295] - mask = r >> 31; - abs_r = (r + mask) ^ mask; - // http://stackoverflow.com/questions/596467/how-do-i-convert-a-number-to-an-integer-in-javascript - // this rounds towards zero - r = ~~((r << 1) / (abs_r + 1)); - } - return r; - } - - function _bigintadd(a, b) { - var r = []; - var v; - r[0] = (v = a[0] + b[0]) & 0xffff; - r[1] = (v = (v >>> 16) + a[1] + b[1]) & 0xffff; - r[2] = (v = (v >>> 16) + a[2] + b[2]) & 0xffff; - r[3] = (v = (v >>> 16) + a[3] + b[3]) & 0xffff; - r[4] = (v = (v >>> 16) + a[4] + b[4]) & 0xffff; - r[5] = (v = (v >>> 16) + a[5] + b[5]) & 0xffff; - r[6] = (v = (v >>> 16) + a[6] + b[6]) & 0xffff; - r[7] = (v = (v >>> 16) + a[7] + b[7]) & 0xffff; - r[8] = (v = (v >>> 16) + a[8] + b[8]) & 0xffff; - r[9] = (v = (v >>> 16) + a[9] + b[9]) & 0xffff; - r[10] = (v = (v >>> 16) + a[10] + b[10]) & 0xffff; - r[11] = (v = (v >>> 16) + a[11] + b[11]) & 0xffff; - r[12] = (v = (v >>> 16) + a[12] + b[12]) & 0xffff; - r[13] = (v = (v >>> 16) + a[13] + b[13]) & 0xffff; - r[14] = (v = (v >>> 16) + a[14] + b[14]) & 0xffff; - r[15] = (v >>> 16) + a[15] + b[15]; - return r; - } - - function _bigintsub(a, b) { - var r = []; - var v; - r[0] = (v = 0x80000 + a[0] - b[0]) & 0xffff; - r[1] = (v = (v >>> 16) + 0x7fff8 + a[1] - b[1]) & 0xffff; - r[2] = (v = (v >>> 16) + 0x7fff8 + a[2] - b[2]) & 0xffff; - r[3] = (v = (v >>> 16) + 0x7fff8 + a[3] - b[3]) & 0xffff; - r[4] = (v = (v >>> 16) + 0x7fff8 + a[4] - b[4]) & 0xffff; - r[5] = (v = (v >>> 16) + 0x7fff8 + a[5] - b[5]) & 0xffff; - r[6] = (v = (v >>> 16) + 0x7fff8 + a[6] - b[6]) & 0xffff; - r[7] = (v = (v >>> 16) + 0x7fff8 + a[7] - b[7]) & 0xffff; - r[8] = (v = (v >>> 16) + 0x7fff8 + a[8] - b[8]) & 0xffff; - r[9] = (v = (v >>> 16) + 0x7fff8 + a[9] - b[9]) & 0xffff; - r[10] = (v = (v >>> 16) + 0x7fff8 + a[10] - b[10]) & 0xffff; - r[11] = (v = (v >>> 16) + 0x7fff8 + a[11] - b[11]) & 0xffff; - r[12] = (v = (v >>> 16) + 0x7fff8 + a[12] - b[12]) & 0xffff; - r[13] = (v = (v >>> 16) + 0x7fff8 + a[13] - b[13]) & 0xffff; - r[14] = (v = (v >>> 16) + 0x7fff8 + a[14] - b[14]) & 0xffff; - r[15] = (v >>> 16) - 8 + a[15] - b[15]; - return r; - } - - function _sqr8h(a7, a6, a5, a4, a3, a2, a1, a0) { - // 'division by 0x10000' can not be replaced by '>> 16' because - // more than 32 bits of precision are needed similarly - // 'multiplication by 2' cannot be replaced by '<< 1' - var r = []; - var v; - r[0] = (v = a0 * a0) & 0xffff; - r[1] = (v = (0 | (v / 0x10000)) + 2 * a0 * a1) & 0xffff; - r[2] = (v = (0 | (v / 0x10000)) + 2 * a0 * a2 + a1 * a1) & 0xffff; - r[3] = (v = (0 | (v / 0x10000)) + 2 * a0 * a3 + 2 * a1 * a2) & 0xffff; - r[4] = (v = (0 | (v / 0x10000)) + 2 * a0 * a4 + 2 * a1 * a3 + a2 - * a2) & 0xffff; - r[5] = (v = (0 | (v / 0x10000)) + 2 * a0 * a5 + 2 * a1 * a4 + 2 - * a2 * a3) & 0xffff; - r[6] = (v = (0 | (v / 0x10000)) + 2 * a0 * a6 + 2 * a1 * a5 + 2 - * a2 * a4 + a3 * a3) & 0xffff; - r[7] = (v = (0 | (v / 0x10000)) + 2 * a0 * a7 + 2 * a1 * a6 + 2 - * a2 * a5 + 2 * a3 * a4) & 0xffff; - r[8] = (v = (0 | (v / 0x10000)) + 2 * a1 * a7 + 2 * a2 * a6 + 2 - * a3 * a5 + a4 * a4) & 0xffff; - r[9] = (v = (0 | (v / 0x10000)) + 2 * a2 * a7 + 2 * a3 * a6 + 2 - * a4 * a5) & 0xffff; - r[10] = (v = (0 | (v / 0x10000)) + 2 * a3 * a7 + 2 * a4 * a6 - + a5 * a5) & 0xffff; - r[11] = (v = (0 | (v / 0x10000)) + 2 * a4 * a7 + 2 * a5 * a6) & 0xffff; - r[12] = (v = (0 | (v / 0x10000)) + 2 * a5 * a7 + a6 * a6) & 0xffff; - r[13] = (v = (0 | (v / 0x10000)) + 2 * a6 * a7) & 0xffff; - r[14] = (v = (0 | (v / 0x10000)) + a7 * a7) & 0xffff; - r[15] = 0 | (v / 0x10000); - return r; - } - - function _sqrmodp(a) { - var x = _sqr8h(a[15], a[14], a[13], a[12], a[11], a[10], a[9], - a[8]); - var z = _sqr8h(a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]); - var y = _sqr8h(a[15] + a[7], a[14] + a[6], a[13] + a[5], a[12] - + a[4], - a[11] + a[3], a[10] + a[2], a[9] + a[1], a[8] - + a[0]); - var r = []; - var v; - r[0] = (v = 0x800000 + z[0] + (y[8] - x[8] - z[8] + x[0] - 0x80) - * 38) & 0xffff; - r[1] = (v = 0x7fff80 + (v >>> 16) + z[1] - + (y[9] - x[9] - z[9] + x[1]) * 38) & 0xffff; - r[2] = (v = 0x7fff80 + (v >>> 16) + z[2] - + (y[10] - x[10] - z[10] + x[2]) * 38) & 0xffff; - r[3] = (v = 0x7fff80 + (v >>> 16) + z[3] - + (y[11] - x[11] - z[11] + x[3]) * 38) & 0xffff; - r[4] = (v = 0x7fff80 + (v >>> 16) + z[4] - + (y[12] - x[12] - z[12] + x[4]) * 38) & 0xffff; - r[5] = (v = 0x7fff80 + (v >>> 16) + z[5] - + (y[13] - x[13] - z[13] + x[5]) * 38) & 0xffff; - r[6] = (v = 0x7fff80 + (v >>> 16) + z[6] - + (y[14] - x[14] - z[14] + x[6]) * 38) & 0xffff; - r[7] = (v = 0x7fff80 + (v >>> 16) + z[7] - + (y[15] - x[15] - z[15] + x[7]) * 38) & 0xffff; - r[8] = (v = 0x7fff80 + (v >>> 16) + z[8] + y[0] - x[0] - z[0] - + x[8] * 38) & 0xffff; - r[9] = (v = 0x7fff80 + (v >>> 16) + z[9] + y[1] - x[1] - z[1] - + x[9] * 38) & 0xffff; - r[10] = (v = 0x7fff80 + (v >>> 16) + z[10] + y[2] - x[2] - z[2] - + x[10] * 38) & 0xffff; - r[11] = (v = 0x7fff80 + (v >>> 16) + z[11] + y[3] - x[3] - z[3] - + x[11] * 38) & 0xffff; - r[12] = (v = 0x7fff80 + (v >>> 16) + z[12] + y[4] - x[4] - z[4] - + x[12] * 38) & 0xffff; - r[13] = (v = 0x7fff80 + (v >>> 16) + z[13] + y[5] - x[5] - z[5] - + x[13] * 38) & 0xffff; - r[14] = (v = 0x7fff80 + (v >>> 16) + z[14] + y[6] - x[6] - z[6] - + x[14] * 38) & 0xffff; - r[15] = 0x7fff80 + (v >>> 16) + z[15] + y[7] - x[7] - z[7] - + x[15] * 38; - _reduce(r); - return r; - } - - function _mul8h(a7, a6, a5, a4, a3, a2, a1, a0, b7, b6, b5, b4, b3, - b2, b1, b0) { - // 'division by 0x10000' can not be replaced by '>> 16' because - // more than 32 bits of precision are needed - var r = []; - var v; - r[0] = (v = a0 * b0) & 0xffff; - r[1] = (v = (0 | (v / 0x10000)) + a0 * b1 + a1 * b0) & 0xffff; - r[2] = (v = (0 | (v / 0x10000)) + a0 * b2 + a1 * b1 + a2 * b0) & 0xffff; - r[3] = (v = (0 | (v / 0x10000)) + a0 * b3 + a1 * b2 + a2 * b1 - + a3 * b0) & 0xffff; - r[4] = (v = (0 | (v / 0x10000)) + a0 * b4 + a1 * b3 + a2 * b2 - + a3 * b1 + a4 * b0) & 0xffff; - r[5] = (v = (0 | (v / 0x10000)) + a0 * b5 + a1 * b4 + a2 * b3 - + a3 * b2 + a4 * b1 + a5 * b0) & 0xffff; - r[6] = (v = (0 | (v / 0x10000)) + a0 * b6 + a1 * b5 + a2 * b4 - + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0) & 0xffff; - r[7] = (v = (0 | (v / 0x10000)) + a0 * b7 + a1 * b6 + a2 * b5 - + a3 * b4 + a4 * b3 + a5 * b2 + a6 * b1 + a7 * b0) & 0xffff; - r[8] = (v = (0 | (v / 0x10000)) + a1 * b7 + a2 * b6 + a3 * b5 - + a4 * b4 + a5 * b3 + a6 * b2 + a7 * b1) & 0xffff; - r[9] = (v = (0 | (v / 0x10000)) + a2 * b7 + a3 * b6 + a4 * b5 - + a5 * b4 + a6 * b3 + a7 * b2) & 0xffff; - r[10] = (v = (0 | (v / 0x10000)) + a3 * b7 + a4 * b6 + a5 * b5 - + a6 * b4 + a7 * b3) & 0xffff; - r[11] = (v = (0 | (v / 0x10000)) + a4 * b7 + a5 * b6 + a6 * b5 - + a7 * b4) & 0xffff; - r[12] = (v = (0 | (v / 0x10000)) + a5 * b7 + a6 * b6 + a7 * b5) & 0xffff; - r[13] = (v = (0 | (v / 0x10000)) + a6 * b7 + a7 * b6) & 0xffff; - r[14] = (v = (0 | (v / 0x10000)) + a7 * b7) & 0xffff; - r[15] = (0 | (v / 0x10000)); - return r; - } - - function _mulmodp(a, b) { - // Karatsuba multiplication scheme: x*y = (b^2+b)*x1*y1 - - // b*(x1-x0)*(y1-y0) + (b+1)*x0*y0 - var x = _mul8h(a[15], a[14], a[13], a[12], a[11], a[10], a[9], - a[8], b[15], b[14], b[13], b[12], b[11], b[10], - b[9], b[8]); - var z = _mul8h(a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0], - b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]); - var y = _mul8h(a[15] + a[7], a[14] + a[6], a[13] + a[5], a[12] - + a[4], - a[11] + a[3], a[10] + a[2], a[9] + a[1], a[8] - + a[0], - b[15] + b[7], b[14] + b[6], b[13] + b[5], b[12] - + b[4], - b[11] + b[3], b[10] + b[2], b[9] + b[1], b[8] - + b[0]); - var r = []; - var v; - r[0] = (v = 0x800000 + z[0] + (y[8] - x[8] - z[8] + x[0] - 0x80) - * 38) & 0xffff; - r[1] = (v = 0x7fff80 + (v >>> 16) + z[1] - + (y[9] - x[9] - z[9] + x[1]) * 38) & 0xffff; - r[2] = (v = 0x7fff80 + (v >>> 16) + z[2] - + (y[10] - x[10] - z[10] + x[2]) * 38) & 0xffff; - r[3] = (v = 0x7fff80 + (v >>> 16) + z[3] - + (y[11] - x[11] - z[11] + x[3]) * 38) & 0xffff; - r[4] = (v = 0x7fff80 + (v >>> 16) + z[4] - + (y[12] - x[12] - z[12] + x[4]) * 38) & 0xffff; - r[5] = (v = 0x7fff80 + (v >>> 16) + z[5] - + (y[13] - x[13] - z[13] + x[5]) * 38) & 0xffff; - r[6] = (v = 0x7fff80 + (v >>> 16) + z[6] - + (y[14] - x[14] - z[14] + x[6]) * 38) & 0xffff; - r[7] = (v = 0x7fff80 + (v >>> 16) + z[7] - + (y[15] - x[15] - z[15] + x[7]) * 38) & 0xffff; - r[8] = (v = 0x7fff80 + (v >>> 16) + z[8] + y[0] - x[0] - z[0] - + x[8] * 38) & 0xffff; - r[9] = (v = 0x7fff80 + (v >>> 16) + z[9] + y[1] - x[1] - z[1] - + x[9] * 38) & 0xffff; - r[10] = (v = 0x7fff80 + (v >>> 16) + z[10] + y[2] - x[2] - z[2] - + x[10] * 38) & 0xffff; - r[11] = (v = 0x7fff80 + (v >>> 16) + z[11] + y[3] - x[3] - z[3] - + x[11] * 38) & 0xffff; - r[12] = (v = 0x7fff80 + (v >>> 16) + z[12] + y[4] - x[4] - z[4] - + x[12] * 38) & 0xffff; - r[13] = (v = 0x7fff80 + (v >>> 16) + z[13] + y[5] - x[5] - z[5] - + x[13] * 38) & 0xffff; - r[14] = (v = 0x7fff80 + (v >>> 16) + z[14] + y[6] - x[6] - z[6] - + x[14] * 38) & 0xffff; - r[15] = 0x7fff80 + (v >>> 16) + z[15] + y[7] - x[7] - z[7] - + x[15] * 38; - _reduce(r); - return r; - } - - function _reduce(arr) { - var aCopy = arr.slice(0); - var choice = [arr, aCopy]; - var v = arr[15]; - // Use the dummy copy instead of just returning to be more constant time. - var a = choice[(v < 0x8000) & 1]; - a[15] = v & 0x7fff; - // >32-bits of precision are required here so '/ 0x8000' can not be - // replaced by the arithmetic equivalent '>>> 15' - v = (0 | (v / 0x8000)) * 19; - a[0] = (v += a[0]) & 0xffff; - v = v >>> 16; - a[1] = (v += a[1]) & 0xffff; - v = v >>> 16; - a[2] = (v += a[2]) & 0xffff; - v = v >>> 16; - a[3] = (v += a[3]) & 0xffff; - v = v >>> 16; - a[4] = (v += a[4]) & 0xffff; - v = v >>> 16; - a[5] = (v += a[5]) & 0xffff; - v = v >>> 16; - a[6] = (v += a[6]) & 0xffff; - v = v >>> 16; - a[7] = (v += a[7]) & 0xffff; - v = v >>> 16; - a[8] = (v += a[8]) & 0xffff; - v = v >>> 16; - a[9] = (v += a[9]) & 0xffff; - v = v >>> 16; - a[10] = (v += a[10]) & 0xffff; - v = v >>> 16; - a[11] = (v += a[11]) & 0xffff; - v = v >>> 16; - a[12] = (v += a[12]) & 0xffff; - v = v >>> 16; - a[13] = (v += a[13]) & 0xffff; - v = v >>> 16; - a[14] = (v += a[14]) & 0xffff; - v = v >>> 16; - a[15] += v; - } - - function _addmodp(a, b) { - var r = []; - var v; - r[0] = (v = ((0 | (a[15] >>> 15)) + (0 | (b[15] >>> 15))) * 19 - + a[0] + b[0]) & 0xffff; - r[1] = (v = (v >>> 16) + a[1] + b[1]) & 0xffff; - r[2] = (v = (v >>> 16) + a[2] + b[2]) & 0xffff; - r[3] = (v = (v >>> 16) + a[3] + b[3]) & 0xffff; - r[4] = (v = (v >>> 16) + a[4] + b[4]) & 0xffff; - r[5] = (v = (v >>> 16) + a[5] + b[5]) & 0xffff; - r[6] = (v = (v >>> 16) + a[6] + b[6]) & 0xffff; - r[7] = (v = (v >>> 16) + a[7] + b[7]) & 0xffff; - r[8] = (v = (v >>> 16) + a[8] + b[8]) & 0xffff; - r[9] = (v = (v >>> 16) + a[9] + b[9]) & 0xffff; - r[10] = (v = (v >>> 16) + a[10] + b[10]) & 0xffff; - r[11] = (v = (v >>> 16) + a[11] + b[11]) & 0xffff; - r[12] = (v = (v >>> 16) + a[12] + b[12]) & 0xffff; - r[13] = (v = (v >>> 16) + a[13] + b[13]) & 0xffff; - r[14] = (v = (v >>> 16) + a[14] + b[14]) & 0xffff; - r[15] = (v >>> 16) + (a[15] & 0x7fff) + (b[15] & 0x7fff); - return r; - } - - function _submodp(a, b) { - var r = []; - var v; - r[0] = (v = 0x80000 - + ((0 | (a[15] >>> 15)) - (0 | (b[15] >>> 15)) - 1) - * 19 + a[0] - b[0]) & 0xffff; - r[1] = (v = (v >>> 16) + 0x7fff8 + a[1] - b[1]) & 0xffff; - r[2] = (v = (v >>> 16) + 0x7fff8 + a[2] - b[2]) & 0xffff; - r[3] = (v = (v >>> 16) + 0x7fff8 + a[3] - b[3]) & 0xffff; - r[4] = (v = (v >>> 16) + 0x7fff8 + a[4] - b[4]) & 0xffff; - r[5] = (v = (v >>> 16) + 0x7fff8 + a[5] - b[5]) & 0xffff; - r[6] = (v = (v >>> 16) + 0x7fff8 + a[6] - b[6]) & 0xffff; - r[7] = (v = (v >>> 16) + 0x7fff8 + a[7] - b[7]) & 0xffff; - r[8] = (v = (v >>> 16) + 0x7fff8 + a[8] - b[8]) & 0xffff; - r[9] = (v = (v >>> 16) + 0x7fff8 + a[9] - b[9]) & 0xffff; - r[10] = (v = (v >>> 16) + 0x7fff8 + a[10] - b[10]) & 0xffff; - r[11] = (v = (v >>> 16) + 0x7fff8 + a[11] - b[11]) & 0xffff; - r[12] = (v = (v >>> 16) + 0x7fff8 + a[12] - b[12]) & 0xffff; - r[13] = (v = (v >>> 16) + 0x7fff8 + a[13] - b[13]) & 0xffff; - r[14] = (v = (v >>> 16) + 0x7fff8 + a[14] - b[14]) & 0xffff; - r[15] = (v >>> 16) + 0x7ff8 + (a[15] & 0x7fff) - - (b[15] & 0x7fff); - return r; - } - - function _invmodp(a) { - var c = a; - var i = 250; - while (--i) { - a = _sqrmodp(a); - a = _mulmodp(a, c); - } - a = _sqrmodp(a); - a = _sqrmodp(a); - a = _mulmodp(a, c); - a = _sqrmodp(a); - a = _sqrmodp(a); - a = _mulmodp(a, c); - a = _sqrmodp(a); - a = _mulmodp(a, c); - return a; - } - - function _mulasmall(a) { - // 'division by 0x10000' can not be replaced by '>> 16' because - // more than 32 bits of precision are needed - var m = 121665; - var r = []; - var v; - r[0] = (v = a[0] * m) & 0xffff; - r[1] = (v = (0 | (v / 0x10000)) + a[1] * m) & 0xffff; - r[2] = (v = (0 | (v / 0x10000)) + a[2] * m) & 0xffff; - r[3] = (v = (0 | (v / 0x10000)) + a[3] * m) & 0xffff; - r[4] = (v = (0 | (v / 0x10000)) + a[4] * m) & 0xffff; - r[5] = (v = (0 | (v / 0x10000)) + a[5] * m) & 0xffff; - r[6] = (v = (0 | (v / 0x10000)) + a[6] * m) & 0xffff; - r[7] = (v = (0 | (v / 0x10000)) + a[7] * m) & 0xffff; - r[8] = (v = (0 | (v / 0x10000)) + a[8] * m) & 0xffff; - r[9] = (v = (0 | (v / 0x10000)) + a[9] * m) & 0xffff; - r[10] = (v = (0 | (v / 0x10000)) + a[10] * m) & 0xffff; - r[11] = (v = (0 | (v / 0x10000)) + a[11] * m) & 0xffff; - r[12] = (v = (0 | (v / 0x10000)) + a[12] * m) & 0xffff; - r[13] = (v = (0 | (v / 0x10000)) + a[13] * m) & 0xffff; - r[14] = (v = (0 | (v / 0x10000)) + a[14] * m) & 0xffff; - r[15] = (0 | (v / 0x10000)) + a[15] * m; - _reduce(r); - return r; - } - - function _dbl(x, z) { - var x_2, z_2, m, n, o; - m = _sqrmodp(_addmodp(x, z)); - n = _sqrmodp(_submodp(x, z)); - o = _submodp(m, n); - x_2 = _mulmodp(n, m); - z_2 = _mulmodp(_addmodp(_mulasmall(o), m), o); - return [x_2, z_2]; - } - - function _sum(x, z, x_p, z_p, x_1) { - var x_3, z_3, p, q; - p = _mulmodp(_submodp(x, z), _addmodp(x_p, z_p)); - q = _mulmodp(_addmodp(x, z), _submodp(x_p, z_p)); - x_3 = _sqrmodp(_addmodp(p, q)); - z_3 = _mulmodp(_sqrmodp(_submodp(p, q)), x_1); - return [x_3, z_3]; - } - - function _generateKey(curve25519) { - var buffer = crypto.randomBytes(32); - - // For Curve25519 DH keys, we need to apply some bit mask on generated - // keys: - // * clear bit 0, 1, 2 of first byte - // * clear bit 7 of last byte - // * set bit 6 of last byte - if (curve25519 === true) { - buffer[0] &= 0xf8; - buffer[31] = (buffer[31] & 0x7f) | 0x40; - } - var result = []; - for (var i = 0; i < buffer.length; i++) { - result.push(String.fromCharCode(buffer[i])); - } - return result.join(''); - } - - // Expose some functions to the outside through this name space. - // Note: This is not part of the public API. - ns.getbit = _getbit; - ns.setbit = _setbit; - ns.addmodp = _addmodp; - ns.invmodp = _invmodp; - ns.mulmodp = _mulmodp; - ns.reduce = _reduce; - ns.dbl = _dbl; - ns.sum = _sum; - ns.ZERO = _ZERO; - ns.ONE = _ONE; - ns.BASE = _BASE; - ns.bigintadd = _bigintadd; - ns.bigintsub = _bigintsub; - ns.bigintcmp = _bigintcmp; - ns.mulmodp = _mulmodp; - ns.sqrmodp = _sqrmodp; - ns.generateKey = _generateKey; - - -module.exports = ns; diff --git a/node_modules/jodid25519/lib/curve255.js b/node_modules/jodid25519/lib/curve255.js deleted file mode 100644 index 3978b46..0000000 --- a/node_modules/jodid25519/lib/curve255.js +++ /dev/null @@ -1,221 +0,0 @@ -"use strict"; -/** - * @fileOverview - * Core operations on curve 25519 required for the higher level modules. - */ - -/* - * Copyright (c) 2007, 2013, 2014 Michele Bini - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss, Michele Bini - * - * You should have received a copy of the license along with this program. - */ - -var core = require('./core'); -var utils = require('./utils'); - - /** - * @exports jodid25519/curve255 - * Legacy compatibility module for Michele Bini's previous curve255.js. - * - * @description - * Legacy compatibility module for Michele Bini's previous curve255.js. - * - *

    - * This code presents an API with all key formats as previously available - * from Michele Bini's curve255.js implementation. - *

    - */ - var ns = {}; - - function curve25519_raw(f, c) { - var a, x_1, q; - - x_1 = c; - a = core.dbl(x_1, core.ONE()); - q = [x_1, core.ONE()]; - - var n = 255; - - while (core.getbit(f, n) == 0) { - n--; - // For correct constant-time operation, bit 255 should always be - // set to 1 so the following 'while' loop is never entered. - if (n < 0) { - return core.ZERO(); - } - } - n--; - - var aq = [a, q]; - - while (n >= 0) { - var r, s; - var b = core.getbit(f, n); - r = core.sum(aq[0][0], aq[0][1], aq[1][0], aq[1][1], x_1); - s = core.dbl(aq[1 - b][0], aq[1 - b][1]); - aq[1 - b] = s; - aq[b] = r; - n--; - } - q = aq[1]; - - q[1] = core.invmodp(q[1]); - q[0] = core.mulmodp(q[0], q[1]); - core.reduce(q[0]); - return q[0]; - } - - function curve25519b32(a, b) { - return _base32encode(curve25519(_base32decode(a), - _base32decode(b))); - } - - function curve25519(f, c) { - if (!c) { - c = core.BASE(); - } - f[0] &= 0xFFF8; - f[15] = (f[15] & 0x7FFF) | 0x4000; - return curve25519_raw(f, c); - } - - function _hexEncodeVector(k) { - var hexKey = utils.hexEncode(k); - // Pad with '0' at the front. - hexKey = new Array(64 + 1 - hexKey.length).join('0') + hexKey; - // Invert bytes. - return hexKey.split(/(..)/).reverse().join(''); - } - - function _hexDecodeVector(v) { - // assert(length(x) == 64); - // Invert bytes. - var hexKey = v.split(/(..)/).reverse().join(''); - return utils.hexDecode(hexKey); - } - - - // Expose some functions to the outside through this name space. - - /** - * Computes the scalar product of a point on the curve 25519. - * - * This function is used for the DH key-exchange protocol. - * - * Before multiplication, some bit operations are applied to the - * private key to ensure it is a valid Curve25519 secret key. - * It is the user's responsibility to make sure that the private - * key is a uniformly random, secret value. - * - * @function - * @param f {array} - * Private key. - * @param c {array} - * Public point on the curve. If not given, the curve's base point is used. - * @returns {array} - * Key point resulting from scalar product. - */ - ns.curve25519 = curve25519; - - /** - * Computes the scalar product of a point on the curve 25519. - * - * This variant does not make sure that the private key is valid. - * The user has the responsibility to ensure the private key is - * valid or that this results in a safe protocol. Unless you know - * exactly what you are doing, you should not use this variant, - * please use 'curve25519' instead. - * - * @function - * @param f {array} - * Private key. - * @param c {array} - * Public point on the curve. If not given, the curve's base point is used. - * @returns {array} - * Key point resulting from scalar product. - */ - ns.curve25519_raw = curve25519_raw; - - /** - * Encodes the internal representation of a key to a canonical hex - * representation. - * - * This is the format commonly used in other libraries and for - * test vectors, and is equivalent to the hex dump of the key in - * little-endian binary format. - * - * @function - * @param n {array} - * Array representation of key. - * @returns {string} - * Hexadecimal string representation of key. - */ - ns.hexEncodeVector = _hexEncodeVector; - - /** - * Decodes a canonical hex representation of a key - * to an internally compatible array representation. - * - * @function - * @param n {string} - * Hexadecimal string representation of key. - * @returns {array} - * Array representation of key. - */ - ns.hexDecodeVector = _hexDecodeVector; - - /** - * Encodes the internal representation of a key into a - * hexadecimal representation. - * - * This is a strict positional notation, most significant digit first. - * - * @function - * @param n {array} - * Array representation of key. - * @returns {string} - * Hexadecimal string representation of key. - */ - ns.hexencode = utils.hexEncode; - - /** - * Decodes a hex representation of a key to an internally - * compatible array representation. - * - * @function - * @param n {string} - * Hexadecimal string representation of key. - * @returns {array} - * Array representation of key. - */ - ns.hexdecode = utils.hexDecode; - - /** - * Encodes the internal representation of a key to a base32 - * representation. - * - * @function - * @param n {array} - * Array representation of key. - * @returns {string} - * Base32 string representation of key. - */ - ns.base32encode = utils.base32encode; - - /** - * Decodes a base32 representation of a key to an internally - * compatible array representation. - * - * @function - * @param n {string} - * Base32 string representation of key. - * @returns {array} - * Array representation of key. - */ - ns.base32decode = utils.base32decode; - -module.exports = ns; diff --git a/node_modules/jodid25519/lib/dh.js b/node_modules/jodid25519/lib/dh.js deleted file mode 100644 index 2f75494..0000000 --- a/node_modules/jodid25519/lib/dh.js +++ /dev/null @@ -1,111 +0,0 @@ -"use strict"; -/** - * @fileOverview - * EC Diffie-Hellman operations on Curve25519. - */ - -/* - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss - * - * You should have received a copy of the license along with this program. - */ - -var core = require('./core'); -var utils = require('./utils'); -var curve255 = require('./curve255'); - - - /** - * @exports jodid25519/dh - * EC Diffie-Hellman operations on Curve25519. - * - * @description - * EC Diffie-Hellman operations on Curve25519. - */ - var ns = {}; - - - function _toString(vector) { - var u = new Uint16Array(vector); - return (new Buffer(new Uint8Array(u.buffer))); - } - - function _fromString(vector) { - if (Buffer.isBuffer(vector)) { - var u = new Uint8Array(vector); - return (new Uint16Array(u.buffer)); - } - - var result = new Array(16); - for (var i = 0, l = 0; i < vector.length; i += 2) { - result[l] = (vector.charCodeAt(i + 1) << 8) | vector.charCodeAt(i); - l++; - } - return result; - } - - - /** - * Computes a key through scalar multiplication of a point on the curve 25519. - * - * This function is used for the DH key-exchange protocol. It computes a - * key based on a secret key with a public component (opponent's public key - * or curve base point if not given) by using scalar multiplication. - * - * Before multiplication, some bit operations are applied to the - * private key to ensure it is a valid Curve25519 secret key. - * It is the user's responsibility to make sure that the private - * key is a uniformly random, secret value. - * - * @function - * @param privateComponent {string} - * Private point as byte string on the curve. - * @param publicComponent {string} - * Public point as byte string on the curve. If not given, the curve's - * base point is used. - * @returns {string} - * Key point as byte string resulting from scalar product. - */ - ns.computeKey = function(privateComponent, publicComponent) { - if (publicComponent) { - return _toString(curve255.curve25519(_fromString(privateComponent), - _fromString(publicComponent))); - } else { - return _toString(curve255.curve25519(_fromString(privateComponent))); - } - }; - - /** - * Computes the public key to a private key on the curve 25519. - * - * Before multiplication, some bit operations are applied to the - * private key to ensure it is a valid Curve25519 secret key. - * It is the user's responsibility to make sure that the private - * key is a uniformly random, secret value. - * - * @function - * @param privateKey {string} - * Private point as byte string on the curve. - * @returns {string} - * Public key point as byte string resulting from scalar product. - */ - ns.publicKey = function(privateKey) { - return _toString(curve255.curve25519(_fromString(privateKey))); - }; - - - /** - * Generates a new random private key of 32 bytes length (256 bit). - * - * @function - * @returns {string} - * Byte string containing a new random private key seed. - */ - ns.generateKey = function() { - return core.generateKey(true); - }; - -module.exports = ns; diff --git a/node_modules/jodid25519/lib/eddsa.js b/node_modules/jodid25519/lib/eddsa.js deleted file mode 100644 index c384f32..0000000 --- a/node_modules/jodid25519/lib/eddsa.js +++ /dev/null @@ -1,573 +0,0 @@ -"use strict"; -/** - * @fileOverview - * Digital signature scheme based on Curve25519 (Ed25519 or EdDSA). - */ - -/* - * Copyright (c) 2011, 2012, 2014 Ron Garret - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss, Ron Garret - * - * You should have received a copy of the license along with this program. - */ - -var core = require('./core'); -var curve255 = require('./curve255'); -var utils = require('./utils'); -var BigInteger = require('jsbn').BigInteger; -var crypto = require('crypto'); - - /** - * @exports jodid25519/eddsa - * Digital signature scheme based on Curve25519 (Ed25519 or EdDSA). - * - * @description - * Digital signature scheme based on Curve25519 (Ed25519 or EdDSA). - * - *

    - * This code is adapted from fast-djbec.js, a faster but more complicated - * version of the Ed25519 encryption scheme (as compared to djbec.js). - * It uses two different representations for big integers: The jsbn - * BigInteger class, which can represent arbitrary-length numbers, and a - * special fixed-length representation optimised for 256-bit integers. - * The reason both are needed is that the Ed25519 algorithm requires some - * 512-bit numbers.

    - */ - var ns = {}; - - function _bi255(value) { - if (!(this instanceof _bi255)) { - return new _bi255(value); - } - if (typeof value === 'undefined') { - return _ZERO; - } - var c = value.constructor; - if ((c === Array || c === Uint16Array || c === Uint32Array) && (value.length === 16)) { - this.n = value; - } else if ((c === Array) && (value.length === 32)) { - this.n = _bytes2bi255(value).n; - } else if (c === String) { - this.n = utils.hexDecode(value); - } else if (c === Number) { - this.n = [value & 0xffff, - value >> 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } else if (value instanceof _bi255) { - this.n = value.n.slice(0); // Copy constructor - } else { - throw "Bad argument for bignum: " + value; - } - } - - _bi255.prototype = { - 'toString' : function() { - return utils.hexEncode(this.n); - }, - 'toSource' : function() { - return '_' + utils.hexEncode(this.n); - }, - 'plus' : function(n1) { - return _bi255(core.bigintadd(this.n, n1.n)); - }, - 'minus' : function(n1) { - return _bi255(core.bigintsub(this.n, n1.n)).modq(); - }, - 'times' : function(n1) { - return _bi255(core.mulmodp(this.n, n1.n)); - }, - 'divide' : function(n1) { - return this.times(n1.inv()); - }, - 'sqr' : function() { - return _bi255(core.sqrmodp(this.n)); - }, - 'cmp' : function(n1) { - return core.bigintcmp(this.n, n1.n); - }, - 'equals' : function(n1) { - return this.cmp(n1) === 0; - }, - 'isOdd' : function() { - return (this.n[0] & 1) === 1; - }, - 'shiftLeft' : function(cnt) { - _shiftL(this.n, cnt); - return this; - }, - 'shiftRight' : function(cnt) { - _shiftR(this.n, cnt); - return this; - }, - 'inv' : function() { - return _bi255(core.invmodp(this.n)); - }, - 'pow' : function(e) { - return _bi255(_pow(this.n, e.n)); - }, - 'modq' : function() { - return _modq(this); - }, - 'bytes' : function() { - return _bi255_bytes(this); - } - }; - - function _shiftL(n, cnt) { - var lastcarry = 0; - for (var i = 0; i < 16; i++) { - var carry = n[i] >> (16 - cnt); - n[i] = (n[i] << cnt) & 0xffff | lastcarry; - lastcarry = carry; - } - return n; - } - - function _shiftR(n, cnt) { - var lastcarry = 0; - for (var i = 15; i >= 0; i--) { - var carry = n[i] << (16 - cnt) & 0xffff; - n[i] = (n[i] >> cnt) | lastcarry; - lastcarry = carry; - } - return n; - } - - function _bi255_bytes(n) { - n = _bi255(n); // Make a copy because shiftRight is destructive - var a = new Array(32); - for (var i = 31; i >= 0; i--) { - a[i] = n.n[0] & 0xff; - n.shiftRight(8); - } - return a; - } - - function _bytes2bi255(a) { - var n = _ZERO; - for (var i = 0; i < 32; i++) { - n.shiftLeft(8); - n = n.plus(_bi255(a[i])); - } - return n; - } - - function _pow(n, e) { - var result = core.ONE(); - for (var i = 0; i < 256; i++) { - if (core.getbit(e, i) === 1) { - result = core.mulmodp(result, n); - } - n = core.sqrmodp(n); - } - return result; - } - - var _ZERO = _bi255(0); - var _ONE = _bi255(1); - var _TWO = _bi255(2); - // This is the core prime. - var _Q = _bi255([0xffff - 18, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x7fff]); - - function _modq(n) { - core.reduce(n.n); - if (n.cmp(_Q) >= 0) { - return _modq(n.minus(_Q)); - } - if (n.cmp(_ZERO) === -1) { - return _modq(n.plus(_Q)); - } else { - return n; - } - } - - // _RECOVERY_EXPONENT = _Q.plus(_bi255(3)).divide(_bi255(8)); - var _RECOVERY_EXPONENT = _bi255('0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe'); - // _D = _Q.minus(_bi255(121665)).divide(_bi255(121666)); - var _D = _bi255('52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3'); - // _I = _TWO.pow(_Q.minus(_ONE).divide(_bi255(4))); - var _I = _bi255('2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0'); - // _L = _TWO.pow(_bi255(252)).plus(_bi255('14def9dea2f79cd65812631a5cf5d3ed')); - var _L = _bi255('1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed'); - var _L_BI = _bi('1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed', 16); - - - // //////////////////////////////////////////////////////////// - - function _isoncurve(p) { - var x = p[0]; - var y = p[1]; - var xsqr = x.sqr(); - var ysqr = y.sqr(); - var v = _D.times(xsqr).times(ysqr); - return ysqr.minus(xsqr).minus(_ONE).minus(v).modq().equals(_ZERO); - } - - function _xrecover(y) { - var ysquared = y.sqr(); - var xx = ysquared.minus(_ONE).divide(_ONE.plus(_D.times(ysquared))); - var x = xx.pow(_RECOVERY_EXPONENT); - if (!(x.times(x).minus(xx).equals(_ZERO))) { - x = x.times(_I); - } - if (x.isOdd()) { - x = _Q.minus(x); - } - return x; - } - - function _x_pt_add(pt1, pt2) { - var x1 = pt1[0]; - var y1 = pt1[1]; - var z1 = pt1[2]; - var t1 = pt1[3]; - var x2 = pt2[0]; - var y2 = pt2[1]; - var z2 = pt2[2]; - var t2 = pt2[3]; - var A = y1.minus(x1).times(y2.plus(x2)); - var B = y1.plus(x1).times(y2.minus(x2)); - var C = z1.times(_TWO).times(t2); - var D = t1.times(_TWO).times(z2); - var E = D.plus(C); - var F = B.minus(A); - var G = B.plus(A); - var H = D.minus(C); - return [E.times(F), G.times(H), F.times(G), E.times(H)]; - } - - function _xpt_double(pt1) { - var x1 = pt1[0]; - var y1 = pt1[1]; - var z1 = pt1[2]; - var A = x1.times(x1); - var B = y1.times(y1); - var C = _TWO.times(z1).times(z1); - var D = _Q.minus(A); - var J = x1.plus(y1); - var E = J.times(J).minus(A).minus(B); - var G = D.plus(B); - var F = G.minus(C); - var H = D.minus(B); - return [E.times(F), G.times(H), F.times(G), E.times(H)]; - } - - function _xpt_mult(pt, n) { - if (n.equals(_ZERO)) { - return [_ZERO, _ONE, _ONE, _ZERO]; - } - var odd = n.isOdd(); - n.shiftRight(1); - var value = _xpt_double(_xpt_mult(pt, n)); - return odd ? _x_pt_add(value, pt) : value; - } - - function _pt_xform(pt) { - var x = pt[0]; - var y = pt[1]; - return [x, y, _ONE, x.times(y)]; - } - - function _pt_unxform(pt) { - var x = pt[0]; - var y = pt[1]; - var z = pt[2]; - var invz = z.inv(); - return [x.times(invz), y.times(invz)]; - } - - function _scalarmult(pt, n) { - return _pt_unxform(_xpt_mult(_pt_xform(pt), n)); - } - - function _bytesgetbit(bytes, n) { - return (bytes[bytes.length - (n >>> 3) - 1] >> (n & 7)) & 1; - } - - function _xpt_mult_bytes(pt, bytes) { - var r = [_ZERO, _ONE, _ONE, _ZERO]; - for (var i = (bytes.length << 3) - 1; i >= 0; i--) { - r = _xpt_double(r); - if (_bytesgetbit(bytes, i) === 1) { - r = _x_pt_add(r, pt); - } - } - return r; - } - - function _scalarmultBytes(pt, bytes) { - return _pt_unxform(_xpt_mult_bytes(_pt_xform(pt), bytes)); - } - - var _by = _bi255(4).divide(_bi255(5)); - var _bx = _xrecover(_by); - var _bp = [_bx, _by]; - - function _encodeint(n) { - return n.bytes(32).reverse(); - } - function _decodeint(b) { - return _bi255(b.slice(0).reverse()); - } - - function _encodepoint(p) { - var v = _encodeint(p[1]); - if (p[0].isOdd()) { - v[31] |= 0x80; - } - return v; - } - - function _decodepoint(v) { - v = v.slice(0); - var signbit = v[31] >> 7; - v[31] &= 127; - var y = _decodeint(v); - var x = _xrecover(y); - if ((x.n[0] & 1) !== signbit) { - x = _Q.minus(x); - } - var p = [x, y]; - if (!_isoncurve(p)) { - throw ('Point is not on curve'); - } - return p; - } - - // ////////////////////////////////////////////////// - - /** - * Factory function to create a suitable BigInteger. - * - * @param value - * The value for the big integer. - * @param base {integer} - * Base of the conversion of elements in ``value``. - * @returns - * A BigInteger object. - */ - function _bi(value, base) { - if (base !== undefined) { - if (base === 256) { - return _bi(utils.string2bytes(value)); - } - return new BigInteger(value, base); - } else if (typeof value === 'string') { - return new BigInteger(value, 10); - } else if ((value instanceof Array) || (value instanceof Uint8Array) - || Buffer.isBuffer(value)) { - return new BigInteger(value); - } else if (typeof value === 'number') { - return new BigInteger(value.toString(), 10); - } else { - throw "Can't convert " + value + " to BigInteger"; - } - } - - function _bi2bytes(n, cnt) { - if (cnt === undefined) { - cnt = (n.bitLength() + 7) >>> 3; - } - var bytes = new Array(cnt); - for (var i = cnt - 1; i >= 0; i--) { - bytes[i] = n[0] & 255; // n.and(0xff); - n = n.shiftRight(8); - } - return bytes; - } - - BigInteger.prototype.bytes = function(n) { - return _bi2bytes(this, n); - }; - - // ///////////////////////////////////////////////////////// - - function _bytehash(s) { - var sha = crypto.createHash('sha512').update(s).digest(); - return _bi2bytes(_bi(sha), 64).reverse(); - } - - function _stringhash(s) { - var sha = crypto.createHash('sha512').update(s).digest(); - return _map(_chr, _bi2bytes(_bi(sha), 64)).join(''); - } - - function _inthash(s) { - // Need a leading 0 to prevent sign extension - return _bi([0].concat(_bytehash(s))); - } - - function _inthash_lo(s) { - return _bi255(_bytehash(s).slice(32, 64)); - } - - function _inthash_mod_l(s) { - return _inthash(s).mod(_L_BI); - } - - function _get_a(sk) { - var a = _inthash_lo(sk); - a.n[0] &= 0xfff8; - a.n[15] &= 0x3fff; - a.n[15] |= 0x4000; - return a; - } - - function _publickey(sk) { - return _encodepoint(_scalarmult(_bp, _get_a(sk))); - } - - function _map(f, l) { - var result = new Array(l.length); - for (var i = 0; i < l.length; i++) { - result[i] = f(l[i]); - } - return result; - } - - function _chr(n) { - return String.fromCharCode(n); - } - - function _ord(c) { - return c.charCodeAt(0); - } - - function _pt_add(p1, p2) { - return _pt_unxform(_x_pt_add(_pt_xform(p1), _pt_xform(p2))); - } - - - // Exports for the API. - - /** - * Checks whether a point is on the curve. - * - * @function - * @param point {string} - * The point to check for in a byte string representation. - * @returns {boolean} - * true if the point is on the curve, false otherwise. - */ - ns.isOnCurve = function(point) { - try { - _isoncurve(_decodepoint(utils.string2bytes(point))); - } catch(e) { - if (e === 'Point is not on curve') { - return false; - } else { - throw e; - } - } - return true; - }; - - - /** - * Computes the EdDSA public key. - * - *

    Note: Seeds should be a byte string, not a unicode string containing - * multi-byte characters.

    - * - * @function - * @param keySeed {string} - * Private key seed in the form of a byte string. - * @returns {string} - * Public key as byte string computed from the private key seed - * (32 bytes). - */ - ns.publicKey = function(keySeed) { - return utils.bytes2string(_publickey(keySeed)); - }; - - - /** - * Computes an EdDSA signature of a message. - * - *

    Notes:

    - * - *
      - *
    • Unicode messages need to be converted to a byte representation - * (e. g. UTF-8).
    • - *
    • If `publicKey` is given, and it is *not* a point of the curve, - * the signature will be faulty, but no error will be thrown.
    • - *
    - * - * @function - * @param message {string} - * Message in the form of a byte string. - * @param keySeed {string} - * Private key seed in the form of a byte string. - * @param publicKey {string} - * Public key as byte string (if not present, it will be computed from - * the private key seed). - * @returns {string} - * Detached message signature in the form of a byte string (64 bytes). - */ - ns.sign = function(message, keySeed, publicKey) { - if (publicKey === undefined) { - publicKey = _publickey(keySeed); - } else { - publicKey = utils.string2bytes(publicKey); - } - var a = _bi(_get_a(keySeed).toString(), 16); - var hs = _stringhash(keySeed); - var r = _bytehash(hs.slice(32, 64) + message); - var rp = _scalarmultBytes(_bp, r); - var erp = _encodepoint(rp); - r = _bi(r).mod(_bi(1, 10).shiftLeft(512)); - var s = _map(_chr, erp).join('') + _map(_chr, publicKey).join('') + message; - s = _inthash_mod_l(s).multiply(a).add(r).mod(_L_BI); - return utils.bytes2string(erp.concat(_encodeint(s))); - }; - - - /** - * Verifies an EdDSA signature of a message with the public key. - * - *

    Note: Unicode messages need to be converted to a byte representation - * (e. g. UTF-8).

    - * - * @function - * @param signature {string} - * Message signature in the form of a byte string. Can be detached - * (64 bytes), or attached to be sliced off. - * @param message {string} - * Message in the form of a byte string. - * @param publicKey {string} - * Public key as byte string (if not present, it will be computed from - * the private key seed). - * @returns {boolean} - * true, if the signature verifies. - */ - ns.verify = function(signature, message, publicKey) { - signature = utils.string2bytes(signature.slice(0, 64)); - publicKey = utils.string2bytes(publicKey); - var rpe = signature.slice(0, 32); - var rp = _decodepoint(rpe); - var a = _decodepoint(publicKey); - var s = _decodeint(signature.slice(32, 64)); - var h = _inthash(utils.bytes2string(rpe.concat(publicKey)) + message); - var v1 = _scalarmult(_bp, s); - var value = _scalarmultBytes(a, _bi2bytes(h)); - var v2 = _pt_add(rp, value); - return v1[0].equals(v2[0]) && v1[1].equals(v2[1]); - }; - - - /** - * Generates a new random private key seed of 32 bytes length (256 bit). - * - * @function - * @returns {string} - * Byte string containing a new random private key seed. - */ - ns.generateKeySeed = function() { - return core.generateKey(false); - }; - -module.exports = ns; diff --git a/node_modules/jodid25519/lib/utils.js b/node_modules/jodid25519/lib/utils.js deleted file mode 100644 index c795231..0000000 --- a/node_modules/jodid25519/lib/utils.js +++ /dev/null @@ -1,198 +0,0 @@ -"use strict"; -/** - * @fileOverview - * A collection of general utility functions.. - */ - -/* - * Copyright (c) 2011, 2012, 2014 Ron Garret - * Copyright (c) 2007, 2013, 2014 Michele Bini - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss, Michele Bini, Ron Garret - * - * You should have received a copy of the license along with this program. - */ - -var core = require('./core'); - - /** - * @exports jodid25519/utils - * A collection of general utility functions.. - * - * @description - * A collection of general utility functions.. - */ - var ns = {}; - - var _HEXCHARS = "0123456789abcdef"; - - function _hexencode(vector) { - var result = []; - for (var i = vector.length - 1; i >= 0; i--) { - var value = vector[i]; - result.push(_HEXCHARS.substr((value >>> 12) & 0x0f, 1)); - result.push(_HEXCHARS.substr((value >>> 8) & 0x0f, 1)); - result.push(_HEXCHARS.substr((value >>> 4) & 0x0f, 1)); - result.push(_HEXCHARS.substr(value & 0x0f, 1)); - } - return result.join(''); - } - - function _hexdecode(vector) { - var result = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - for (var i = vector.length - 1, l = 0; i >= 0; i -= 4) { - result[l] = (_HEXCHARS.indexOf(vector.charAt(i))) - | (_HEXCHARS.indexOf(vector.charAt(i - 1)) << 4) - | (_HEXCHARS.indexOf(vector.charAt(i - 2)) << 8) - | (_HEXCHARS.indexOf(vector.charAt(i - 3)) << 12); - l++; - } - return result; - } - - var _BASE32CHARS = "abcdefghijklmnopqrstuvwxyz234567"; - - var _BASE32VALUES = (function () { - var result = {}; - for (var i = 0; i < _BASE32CHARS.length; i++) { - result[_BASE32CHARS.charAt(i)] = i; - } - return result; - })(); - - function _base32encode(n) { - var c; - var r = ""; - for (c = 0; c < 255; c += 5) { - r = _BASE32CHARS.substr(core.getbit(n, c) - + (core.getbit(n, c + 1) << 1) - + (core.getbit(n, c + 2) << 2) - + (core.getbit(n, c + 3) << 3) - + (core.getbit(n, c + 4) << 4), 1) - + r; - } - return r; - } - - function _base32decode(n) { - var c = 0; - var r = core.ZERO(); - var l = n.length; - for (c = 0; (l > 0) && (c < 255); c += 5) { - l--; - var v = _BASE32VALUES[n.substr(l, 1)]; - core.setbit(r, c, v & 1); - v >>= 1; - core.setbit(r, c + 1, v & 1); - v >>= 1; - core.setbit(r, c + 2, v & 1); - v >>= 1; - core.setbit(r, c + 3, v & 1); - v >>= 1; - core.setbit(r, c + 4, v & 1); - } - return r; - } - - function _map(f, l) { - var result = new Array(l.length); - for (var i = 0; i < l.length; i++) { - result[i] = f(l[i]); - } - return result; - } - - function _chr(n) { - return String.fromCharCode(n); - } - - function _ord(c) { - return c.charCodeAt(0); - } - - function _bytes2string(bytes) { - return _map(_chr, bytes).join(''); - } - - function _string2bytes(s) { - return _map(_ord, s); - } - - - // Expose some functions to the outside through this name space. - - /** - * Encodes an array of unsigned 8-bit integers to a hex string. - * - * @function - * @param vector {array} - * Array containing the byte values. - * @returns {string} - * String containing vector in a hexadecimal representation. - */ - ns.hexEncode = _hexencode; - - - /** - * Decodes a hex string to an array of unsigned 8-bit integers. - * - * @function - * @param vector {string} - * String containing vector in a hexadecimal representation. - * @returns {array} - * Array containing the byte values. - */ - ns.hexDecode = _hexdecode; - - - /** - * Encodes an array of unsigned 8-bit integers using base32 encoding. - * - * @function - * @param vector {array} - * Array containing the byte values. - * @returns {string} - * String containing vector in a hexadecimal representation. - */ - ns.base32encode = _base32encode; - - - /** - * Decodes a base32 encoded string to an array of unsigned 8-bit integers. - * - * @function - * @param vector {string} - * String containing vector in a hexadecimal representation. - * @returns {array} - * Array containing the byte values. - */ - ns.base32decode = _base32decode; - - - /** - * Converts an unsigned 8-bit integer array representation to a byte string. - * - * @function - * @param vector {array} - * Array containing the byte values. - * @returns {string} - * Byte string representation of vector. - */ - ns.bytes2string = _bytes2string; - - - /** - * Converts a byte string representation to an array of unsigned - * 8-bit integers. - * - * @function - * @param vector {array} - * Array containing the byte values. - * @returns {string} - * Byte string representation of vector. - */ - ns.string2bytes = _string2bytes; - -module.exports = ns; diff --git a/node_modules/jodid25519/package.json b/node_modules/jodid25519/package.json deleted file mode 100644 index 09fb817..0000000 --- a/node_modules/jodid25519/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "jodid25519@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/sshpk" - ] - ], - "_from": "jodid25519@>=1.0.0 <2.0.0", - "_id": "jodid25519@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/jodid25519", - "_nodeVersion": "4.1.1", - "_npmUser": { - "email": "alex@cooperi.net", - "name": "arekinath" - }, - "_npmVersion": "2.14.4", - "_phantomChildren": {}, - "_requested": { - "name": "jodid25519", - "raw": "jodid25519@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "_shasum": "06d4912255093419477d425633606e0e90782967", - "_shrinkwrap": null, - "_spec": "jodid25519@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/sshpk", - "author": { - "name": "Michele Bini, Ron Garret, Guy K. Kloss" - }, - "bugs": { - "url": "https://github.com/meganz/jodid25519/issues" - }, - "dependencies": { - "jsbn": "~0.1.0" - }, - "description": "jodid25519 - Curve 25519-based cryptography", - "devDependencies": { - "almond": "~0.3.1", - "chai": "^3.0.0", - "dateformat": "~1.0.7-1.2.3", - "ibrik": "~2.0.0", - "istanbul": "~0.3.5", - "jsdoc": "<=3.3.0", - "mocha": "~2.0.1", - "sinon": "~1.10.3", - "sinon-chai": "^2.8.0" - }, - "directories": { - "doc": "doc", - "src": "src", - "test": "test" - }, - "dist": { - "shasum": "06d4912255093419477d425633606e0e90782967", - "tarball": "http://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz" - }, - "gitHead": "a83b9fcf7fd3be4f27cd4a57817aff171c7cd918", - "homepage": "https://github.com/meganz/jodid25519", - "keywords": [ - "Curve25519", - "Ed25519", - "ECDH", - "EdDSA", - "ECDSA", - "encryption", - "signing" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "alex@cooperi.net", - "name": "arekinath" - } - ], - "name": "jodid25519", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/meganz/jodid25519.git" - }, - "scripts": { - "test": "mocha test/*_test.js" - }, - "version": "1.0.2" -} diff --git a/node_modules/js-sha3/.covignore b/node_modules/js-sha3/.covignore deleted file mode 100644 index 8c36f6f..0000000 --- a/node_modules/js-sha3/.covignore +++ /dev/null @@ -1,2 +0,0 @@ -/tests/ -node_modules/ diff --git a/node_modules/js-sha3/.npmignore b/node_modules/js-sha3/.npmignore deleted file mode 100644 index d69ed3a..0000000 --- a/node_modules/js-sha3/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -my_test -covreporter -build -tests diff --git a/node_modules/js-sha3/.travis.yml b/node_modules/js-sha3/.travis.yml deleted file mode 100644 index aabe614..0000000 --- a/node_modules/js-sha3/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.8" -before_install: - - npm install mocha -g - - npm install coveralls -g - - npm install mocha-lcov-reporter -g -script: npm run-script coveralls -branches: - only: - - master diff --git a/node_modules/js-sha3/CHANGELOG.md b/node_modules/js-sha3/CHANGELOG.md deleted file mode 100644 index 7921892..0000000 --- a/node_modules/js-sha3/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -# v0.3.1 / 2015-05-22 - -* Fixed bugs. - -# v0.3.0 / 2015-05-21 - -* Support byte array and ArrayBuffer input. - -# v0.2.0 / 2015-04-04 - -* Implement NIST's May 2014 SHA-3 version. -* Rename original methods to keccak. - -# v0.1.2 / 2015-02-27 - -* Improve performance. - -# v0.1.1 / 2015-02-26 - -* Improve performance. - -# v0.1.0 / 2015-02-23 - -* Initial release diff --git a/node_modules/js-sha3/LICENSE.txt b/node_modules/js-sha3/LICENSE.txt deleted file mode 100644 index aeb45cf..0000000 --- a/node_modules/js-sha3/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2015 Chen Yi-Cyuan - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/js-sha3/README.md b/node_modules/js-sha3/README.md deleted file mode 100644 index 7f68c08..0000000 --- a/node_modules/js-sha3/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# js-sha3 -[![Build Status](https://travis-ci.org/emn178/js-sha3.svg?branch=master)](https://travis-ci.org/emn178/js-sha3) -[![Coverage Status](https://coveralls.io/repos/emn178/js-sha3/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-sha3?branch=master) -[![NPM](https://nodei.co/npm/js-sha3.png?stars&downloads)](https://nodei.co/npm/js-sha3/) -A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding. - -## Notice -Sha3 methods has been renamed to keccak since v0.2.0. It means that sha3 methods of v0.1.x are equal to keccak methods of v0.2.x and later. - -## Demo -[SHA3-512 Online](http://emn178.github.io/online-tools/sha3_512.html) -[SHA3-384 Online](http://emn178.github.io/online-tools/sha3_384.html) -[SHA3-256 Online](http://emn178.github.io/online-tools/sha3_256.html) -[SHA3-224 Online](http://emn178.github.io/online-tools/sha3_224.html) -[Keccak-512 Online](http://emn178.github.io/online-tools/keccak_512.html) -[Keccak-384 Online](http://emn178.github.io/online-tools/keccak_384.html) -[Keccak-256 Online](http://emn178.github.io/online-tools/keccak_256.html) -[Keccak-224 Online](http://emn178.github.io/online-tools/keccak_224.html) - -## Download -[Compress](https://raw.github.com/emn178/js-sha3/master/build/sha3.min.js) -[Uncompress](https://raw.github.com/emn178/js-sha3/master/src/sha3.js) - -## Installation -You can also install js-sha3 by using Bower. - - bower install js-sha3 - -For node.js, you can use this command to install: - - npm install js-sha3 - -## Usage -You could use like this: -```JavaScript -sha3_512('Message to hash'); -sha3_384('Message to hash'); -sha3_256('Message to hash'); -sha3_224('Message to hash'); -keccak_512('Message to hash'); -keccak_384('Message to hash'); -keccak_256('Message to hash'); -keccak_224('Message to hash'); -``` -If you use node.js, you should require the module first: -```JavaScript -sha3_512 = require('js-sha3').sha3_512; -sha3_384 = require('js-sha3').sha3_384; -sha3_256 = require('js-sha3').sha3_256; -sha3_224 = require('js-sha3').sha3_224; -keccak_512 = require('js-sha3').keccak_512; -keccak_384 = require('js-sha3').keccak_384; -keccak_256 = require('js-sha3').keccak_256; -keccak_224 = require('js-sha3').keccak_224; -``` - -## Example -Code -```JavaScript -sha3_512(''); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -sha3_512('The quick brown fox jumps over the lazy dog'); -// 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 - -sha3_512('The quick brown fox jumps over the lazy dog.'); -// 18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e33dc442100331b35e7eb031b5d38ba6460f8 - -sha3_384(''); -// 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 - -sha3_384('The quick brown fox jumps over the lazy dog'); -// 7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41 - -sha3_384('The quick brown fox jumps over the lazy dog.'); -// 1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9 - -sha3_256(''); -// a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a - -sha3_256('The quick brown fox jumps over the lazy dog'); -// 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 - -sha3_256('The quick brown fox jumps over the lazy dog.'); -// a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d - -sha3_224(''); -// 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 - -sha3_224('The quick brown fox jumps over the lazy dog'); -// d15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795 - -sha3_224('The quick brown fox jumps over the lazy dog.'); -// 2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0 - -keccak_512(''); -// 0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e - -keccak_512('The quick brown fox jumps over the lazy dog'); -// d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609 - -keccak_512('The quick brown fox jumps over the lazy dog.'); -// ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760 - -keccak_384(''); -// 2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff - -keccak_384('The quick brown fox jumps over the lazy dog'); -// 283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3 - -keccak_384('The quick brown fox jumps over the lazy dog.'); -// 9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b - -keccak_256(''); -// c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 - -keccak_256('The quick brown fox jumps over the lazy dog'); -// 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 - -keccak_256('The quick brown fox jumps over the lazy dog.'); -// 578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d - -keccak_224(''); -// f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd - -keccak_224('The quick brown fox jumps over the lazy dog'); -// 310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe - -keccak_224('The quick brown fox jumps over the lazy dog.'); -// c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab -``` -It also supports UTF-8 encoding: - -Code -```JavaScript -sha3_512('中文'); -// 059bbe2efc50cc30e4d8ec5a96be697e2108fcbf9193e1296192eddabc13b143c0120d059399a13d0d42651efe23a6c1ce2d1efb576c5b207fa2516050505af7 - -sha3_384('中文'); -// 9fb5b99e3c546f2738dcd50a14e9aef9c313800c1bf8cf76bc9b2c3a23307841364c5a2d0794702662c5796fb72f5432 - -sha3_256('中文'); -// ac5305da3d18be1aed44aa7c70ea548da243a59a5fd546f489348fd5718fb1a0 - -sha3_224('中文'); -// 106d169e10b61c2a2a05554d3e631ec94467f8316640f29545d163ee - -keccak_512('中文'); -// 2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524 - -keccak_384('中文'); -// 743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c - -keccak_256('中文'); -// 70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee - -keccak_224('中文'); -// f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd -``` - -It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` input: - -Code -```JavaScript -sha3_512([]); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -sha3_512(new Uint8Array([])); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -// ... -``` - -## Benchmark -[UTF8](http://jsperf.com/sha3/5) -[ASCII](http://jsperf.com/sha3/4) - -## Extensions -### jQuery -If you prefer jQuery style, you can add following code to add a jQuery extension. - -Code -```JavaScript -jQuery.sha3_512 = sha3_512; -jQuery.sha3_384 = sha3_384; -jQuery.sha3_256 = sha3_256; -jQuery.sha3_224 = sha3_224; -jQuery.keccak_512 = keccak_512; -jQuery.keccak_384 = keccak_384; -jQuery.keccak_256 = keccak_256; -jQuery.keccak_224 = keccak_224; -``` -And then you could use like this: -```JavaScript -$.sha3_512('message'); -$.sha3_384('message'); -$.sha3_256('message'); -$.sha3_224('message'); -$.keccak_512('message'); -$.keccak_384('message'); -$.keccak_256('message'); -$.keccak_224('message'); -``` -### Prototype -If you prefer prototype style, you can add following code to add a prototype extension. - -Code -```JavaScript -String.prototype.sha3_512 = function() { - return sha3_512(this); -}; -String.prototype.sha3_384 = function() { - return sha3_384(this); -}; -String.prototype.sha3_256 = function() { - return sha3_256(this); -}; -String.prototype.sha3_224 = function() { - return sha3_224(this); -}; -String.prototype.keccak_512 = function() { - return keccak_512(this); -}; -String.prototype.keccak_384 = function() { - return keccak_384(this); -}; -String.prototype.keccak_256 = function() { - return keccak_256(this); -}; -String.prototype.keccak_224 = function() { - return keccak_224(this); -}; -``` -And then you could use like this: -```JavaScript -'message'.sha3_512(); -'message'.sha3_384(); -'message'.sha3_256(); -'message'.sha3_224(); -'message'.keccak_512(); -'message'.keccak_384(); -'message'.keccak_256(); -'message'.keccak_224(); -``` -## License -The project is released under the [MIT license](http://www.opensource.org/licenses/MIT). - -## Contact -The project's website is located at https://github.com/emn178/js-sha3 -Author: emn178@gmail.com diff --git a/node_modules/js-sha3/bower.json b/node_modules/js-sha3/bower.json deleted file mode 100644 index 4c1ced9..0000000 --- a/node_modules/js-sha3/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "js-sha3", - "version": "0.3.1", - "main": ["src/sha3.js"], - "ignore": [ - "samples", - "tests" - ] -} diff --git a/node_modules/js-sha3/package.json b/node_modules/js-sha3/package.json deleted file mode 100644 index 600e024..0000000 --- a/node_modules/js-sha3/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "_args": [ - [ - "js-sha3@^0.3.1", - "/Users/jbaylina/git/MVP/node_modules/browserify-sha3" - ] - ], - "_from": "js-sha3@>=0.3.1 <0.4.0", - "_id": "js-sha3@0.3.1", - "_inCache": true, - "_installable": true, - "_location": "/js-sha3", - "_nodeVersion": "0.10.35", - "_npmUser": { - "email": "emn178@gmail.com", - "name": "emn178" - }, - "_npmVersion": "2.1.18", - "_phantomChildren": {}, - "_requested": { - "name": "js-sha3", - "raw": "js-sha3@^0.3.1", - "rawSpec": "^0.3.1", - "scope": null, - "spec": ">=0.3.1 <0.4.0", - "type": "range" - }, - "_requiredBy": [ - "/browserify-sha3" - ], - "_resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", - "_shasum": "86122802142f0828502a0d1dee1d95e253bb0243", - "_shrinkwrap": null, - "_spec": "js-sha3@^0.3.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/browserify-sha3", - "author": { - "email": "emn178@gmail.com", - "name": "emn178" - }, - "bugs": { - "url": "https://github.com/emn178/js-sha3/issues" - }, - "dependencies": {}, - "description": "A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding.", - "devDependencies": { - "expect.js": "~0.3.1", - "jscoverage": "~0.5.9" - }, - "directories": {}, - "dist": { - "shasum": "86122802142f0828502a0d1dee1d95e253bb0243", - "tarball": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz" - }, - "gitHead": "0d1753fd8dd6ed9ac6be5ab1d046ca2bee6b2573", - "homepage": "https://github.com/emn178/js-sha3", - "keywords": [ - "sha3", - "keccak", - "hash", - "encryption", - "cryptography", - "HMAC" - ], - "license": "MIT", - "main": "src/sha3.js", - "maintainers": [ - { - "email": "emn178@gmail.com", - "name": "emn178" - } - ], - "name": "js-sha3", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/emn178/js-sha3.git" - }, - "scripts": { - "coveralls": "mocha tests/node-test.js -R mocha-lcov-reporter -r jscoverage | coveralls", - "test": "mocha tests/node-test.js -r jscoverage" - }, - "version": "0.3.1" -} diff --git a/node_modules/js-sha3/src/sha3.js b/node_modules/js-sha3/src/sha3.js deleted file mode 100644 index 78238bc..0000000 --- a/node_modules/js-sha3/src/sha3.js +++ /dev/null @@ -1,432 +0,0 @@ -/* - * js-sha3 v0.3.1 - * https://github.com/emn178/js-sha3 - * - * Copyright 2015, emn178@gmail.com - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - */ -;(function(root, undefined) { - 'use strict'; - - var NODE_JS = typeof(module) != 'undefined'; - if(NODE_JS) { - root = global; - if(root.JS_SHA3_TEST) { - root.navigator = { userAgent: 'Chrome'}; - } - } - var CHROME = (root.JS_SHA3_TEST || !NODE_JS) && navigator.userAgent.indexOf('Chrome') != -1; - var HEX_CHARS = '0123456789abcdef'.split(''); - var KECCAK_PADDING = [1, 256, 65536, 16777216]; - var PADDING = [6, 1536, 393216, 100663296]; - var SHIFT = [0, 8, 16, 24]; - var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, - 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, - 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, - 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, - 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]; - - var blocks = [], s = []; - - var keccak_224 = function(message) { - return keccak(message, 224, KECCAK_PADDING); - }; - - var keccak_256 = function(message) { - return keccak(message, 256, KECCAK_PADDING); - }; - - var keccak_384 = function(message) { - return keccak(message, 384, KECCAK_PADDING); - }; - - var sha3_224 = function(message) { - return keccak(message, 224, PADDING); - }; - - var sha3_256 = function(message) { - return keccak(message, 256, PADDING); - }; - - var sha3_384 = function(message) { - return keccak(message, 384, PADDING); - }; - - var sha3_512 = function(message) { - return keccak(message, 512, PADDING); - }; - - var keccak = function(message, bits, padding) { - var notString = typeof(message) != 'string'; - if(notString && message.constructor == root.ArrayBuffer) { - message = new Uint8Array(message); - } - - if(bits === undefined) { - bits = 512; - padding = KECCAK_PADDING; - } - - var block, code, end = false, index = 0, start = 0, length = message.length, - n, i, h, l, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - var blockCount = (1600 - bits * 2) / 32; - var byteCount = blockCount * 4; - - for(i = 0;i < 50;++i) { - s[i] = 0; - } - - block = 0; - do { - blocks[0] = block; - for(i = 1;i < blockCount + 1;++i) { - blocks[i] = 0; - } - if(notString) { - for (i = start;index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = start;index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - start = i - byteCount; - if(index == length) { - blocks[i >> 2] |= padding[i & 3]; - ++index; - } - block = blocks[blockCount]; - if(index > length && i < byteCount) { - blocks[blockCount - 1] |= 0x80000000; - end = true; - } - - for(i = 0;i < blockCount;++i) { - s[i] ^= blocks[i]; - } - - for(n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); - - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } - } while(!end); - - var hex = ''; - if(CHROME) { - b0 = s[0]; - b1 = s[1]; - b2 = s[2]; - b3 = s[3]; - b4 = s[4]; - b5 = s[5]; - b6 = s[6]; - b7 = s[7]; - b8 = s[8]; - b9 = s[9]; - b10 = s[10]; - b11 = s[11]; - b12 = s[12]; - b13 = s[13]; - b14 = s[14]; - b15 = s[15]; - hex += HEX_CHARS[(b0 >> 4) & 0x0F] + HEX_CHARS[b0 & 0x0F] + - HEX_CHARS[(b0 >> 12) & 0x0F] + HEX_CHARS[(b0 >> 8) & 0x0F] + - HEX_CHARS[(b0 >> 20) & 0x0F] + HEX_CHARS[(b0 >> 16) & 0x0F] + - HEX_CHARS[(b0 >> 28) & 0x0F] + HEX_CHARS[(b0 >> 24) & 0x0F] + - HEX_CHARS[(b1 >> 4) & 0x0F] + HEX_CHARS[b1 & 0x0F] + - HEX_CHARS[(b1 >> 12) & 0x0F] + HEX_CHARS[(b1 >> 8) & 0x0F] + - HEX_CHARS[(b1 >> 20) & 0x0F] + HEX_CHARS[(b1 >> 16) & 0x0F] + - HEX_CHARS[(b1 >> 28) & 0x0F] + HEX_CHARS[(b1 >> 24) & 0x0F] + - HEX_CHARS[(b2 >> 4) & 0x0F] + HEX_CHARS[b2 & 0x0F] + - HEX_CHARS[(b2 >> 12) & 0x0F] + HEX_CHARS[(b2 >> 8) & 0x0F] + - HEX_CHARS[(b2 >> 20) & 0x0F] + HEX_CHARS[(b2 >> 16) & 0x0F] + - HEX_CHARS[(b2 >> 28) & 0x0F] + HEX_CHARS[(b2 >> 24) & 0x0F] + - HEX_CHARS[(b3 >> 4) & 0x0F] + HEX_CHARS[b3 & 0x0F] + - HEX_CHARS[(b3 >> 12) & 0x0F] + HEX_CHARS[(b3 >> 8) & 0x0F] + - HEX_CHARS[(b3 >> 20) & 0x0F] + HEX_CHARS[(b3 >> 16) & 0x0F] + - HEX_CHARS[(b3 >> 28) & 0x0F] + HEX_CHARS[(b3 >> 24) & 0x0F] + - HEX_CHARS[(b4 >> 4) & 0x0F] + HEX_CHARS[b4 & 0x0F] + - HEX_CHARS[(b4 >> 12) & 0x0F] + HEX_CHARS[(b4 >> 8) & 0x0F] + - HEX_CHARS[(b4 >> 20) & 0x0F] + HEX_CHARS[(b4 >> 16) & 0x0F] + - HEX_CHARS[(b4 >> 28) & 0x0F] + HEX_CHARS[(b4 >> 24) & 0x0F] + - HEX_CHARS[(b5 >> 4) & 0x0F] + HEX_CHARS[b5 & 0x0F] + - HEX_CHARS[(b5 >> 12) & 0x0F] + HEX_CHARS[(b5 >> 8) & 0x0F] + - HEX_CHARS[(b5 >> 20) & 0x0F] + HEX_CHARS[(b5 >> 16) & 0x0F] + - HEX_CHARS[(b5 >> 28) & 0x0F] + HEX_CHARS[(b5 >> 24) & 0x0F] + - HEX_CHARS[(b6 >> 4) & 0x0F] + HEX_CHARS[b6 & 0x0F] + - HEX_CHARS[(b6 >> 12) & 0x0F] + HEX_CHARS[(b6 >> 8) & 0x0F] + - HEX_CHARS[(b6 >> 20) & 0x0F] + HEX_CHARS[(b6 >> 16) & 0x0F] + - HEX_CHARS[(b6 >> 28) & 0x0F] + HEX_CHARS[(b6 >> 24) & 0x0F]; - - if(bits >= 256) { - hex += HEX_CHARS[(b7 >> 4) & 0x0F] + HEX_CHARS[b7 & 0x0F] + - HEX_CHARS[(b7 >> 12) & 0x0F] + HEX_CHARS[(b7 >> 8) & 0x0F] + - HEX_CHARS[(b7 >> 20) & 0x0F] + HEX_CHARS[(b7 >> 16) & 0x0F] + - HEX_CHARS[(b7 >> 28) & 0x0F] + HEX_CHARS[(b7 >> 24) & 0x0F]; - } - if(bits >= 384) { - hex += HEX_CHARS[(b8 >> 4) & 0x0F] + HEX_CHARS[b8 & 0x0F] + - HEX_CHARS[(b8 >> 12) & 0x0F] + HEX_CHARS[(b8 >> 8) & 0x0F] + - HEX_CHARS[(b8 >> 20) & 0x0F] + HEX_CHARS[(b8 >> 16) & 0x0F] + - HEX_CHARS[(b8 >> 28) & 0x0F] + HEX_CHARS[(b8 >> 24) & 0x0F] + - HEX_CHARS[(b9 >> 4) & 0x0F] + HEX_CHARS[b9 & 0x0F] + - HEX_CHARS[(b9 >> 12) & 0x0F] + HEX_CHARS[(b9 >> 8) & 0x0F] + - HEX_CHARS[(b9 >> 20) & 0x0F] + HEX_CHARS[(b9 >> 16) & 0x0F] + - HEX_CHARS[(b9 >> 28) & 0x0F] + HEX_CHARS[(b9 >> 24) & 0x0F] + - HEX_CHARS[(b10 >> 4) & 0x0F] + HEX_CHARS[b10 & 0x0F] + - HEX_CHARS[(b10 >> 12) & 0x0F] + HEX_CHARS[(b10 >> 8) & 0x0F] + - HEX_CHARS[(b10 >> 20) & 0x0F] + HEX_CHARS[(b10 >> 16) & 0x0F] + - HEX_CHARS[(b10 >> 28) & 0x0F] + HEX_CHARS[(b10 >> 24) & 0x0F] + - HEX_CHARS[(b11 >> 4) & 0x0F] + HEX_CHARS[b11 & 0x0F] + - HEX_CHARS[(b11 >> 12) & 0x0F] + HEX_CHARS[(b11 >> 8) & 0x0F] + - HEX_CHARS[(b11 >> 20) & 0x0F] + HEX_CHARS[(b11 >> 16) & 0x0F] + - HEX_CHARS[(b11 >> 28) & 0x0F] + HEX_CHARS[(b11 >> 24) & 0x0F]; - } - if(bits == 512) { - hex += HEX_CHARS[(b12 >> 4) & 0x0F] + HEX_CHARS[b12 & 0x0F] + - HEX_CHARS[(b12 >> 12) & 0x0F] + HEX_CHARS[(b12 >> 8) & 0x0F] + - HEX_CHARS[(b12 >> 20) & 0x0F] + HEX_CHARS[(b12 >> 16) & 0x0F] + - HEX_CHARS[(b12 >> 28) & 0x0F] + HEX_CHARS[(b12 >> 24) & 0x0F] + - HEX_CHARS[(b13 >> 4) & 0x0F] + HEX_CHARS[b13 & 0x0F] + - HEX_CHARS[(b13 >> 12) & 0x0F] + HEX_CHARS[(b13 >> 8) & 0x0F] + - HEX_CHARS[(b13 >> 20) & 0x0F] + HEX_CHARS[(b13 >> 16) & 0x0F] + - HEX_CHARS[(b13 >> 28) & 0x0F] + HEX_CHARS[(b13 >> 24) & 0x0F] + - HEX_CHARS[(b14 >> 4) & 0x0F] + HEX_CHARS[b14 & 0x0F] + - HEX_CHARS[(b14 >> 12) & 0x0F] + HEX_CHARS[(b14 >> 8) & 0x0F] + - HEX_CHARS[(b14 >> 20) & 0x0F] + HEX_CHARS[(b14 >> 16) & 0x0F] + - HEX_CHARS[(b14 >> 28) & 0x0F] + HEX_CHARS[(b14 >> 24) & 0x0F] + - HEX_CHARS[(b15 >> 4) & 0x0F] + HEX_CHARS[b15 & 0x0F] + - HEX_CHARS[(b15 >> 12) & 0x0F] + HEX_CHARS[(b15 >> 8) & 0x0F] + - HEX_CHARS[(b15 >> 20) & 0x0F] + HEX_CHARS[(b15 >> 16) & 0x0F] + - HEX_CHARS[(b15 >> 28) & 0x0F] + HEX_CHARS[(b15 >> 24) & 0x0F]; - } - } else { - for(i = 0, n = bits / 32;i < n;++i) { - h = s[i]; - hex += HEX_CHARS[(h >> 4) & 0x0F] + HEX_CHARS[h & 0x0F] + - HEX_CHARS[(h >> 12) & 0x0F] + HEX_CHARS[(h >> 8) & 0x0F] + - HEX_CHARS[(h >> 20) & 0x0F] + HEX_CHARS[(h >> 16) & 0x0F] + - HEX_CHARS[(h >> 28) & 0x0F] + HEX_CHARS[(h >> 24) & 0x0F]; - } - } - return hex; - }; - - if(!root.JS_SHA3_TEST && NODE_JS) { - module.exports = { - sha3_512: sha3_512, - sha3_384: sha3_384, - sha3_256: sha3_256, - sha3_224: sha3_224, - keccak_512: keccak, - keccak_384: keccak_384, - keccak_256: keccak_256, - keccak_224: keccak_224 - }; - } else if(root) { - root.sha3_512 = sha3_512; - root.sha3_384 = sha3_384; - root.sha3_256 = sha3_256; - root.sha3_224 = sha3_224; - root.keccak_512 = keccak; - root.keccak_384 = keccak_384; - root.keccak_256 = keccak_256; - root.keccak_224 = keccak_224; - } -}(this)); diff --git a/node_modules/jsbn/.npmignore b/node_modules/jsbn/.npmignore deleted file mode 100644 index 28f1ba7..0000000 --- a/node_modules/jsbn/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store \ No newline at end of file diff --git a/node_modules/jsbn/LICENSE b/node_modules/jsbn/LICENSE deleted file mode 100644 index 2a6457e..0000000 --- a/node_modules/jsbn/LICENSE +++ /dev/null @@ -1,40 +0,0 @@ -Licensing ---------- - -This software is covered under the following copyright: - -/* - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ - -Address all questions regarding this license to: - - Tom Wu - tjw@cs.Stanford.EDU \ No newline at end of file diff --git a/node_modules/jsbn/README.md b/node_modules/jsbn/README.md deleted file mode 100644 index 7aac67f..0000000 --- a/node_modules/jsbn/README.md +++ /dev/null @@ -1,175 +0,0 @@ -# jsbn: javascript big number - -[Tom Wu's Original Website](http://www-cs-students.stanford.edu/~tjw/jsbn/) - -I felt compelled to put this on github and publish to npm. I haven't tested every other big integer library out there, but the few that I have tested in comparison to this one have not even come close in performance. I am aware of the `bi` module on npm, however it has been modified and I wanted to publish the original without modifications. This is jsbn and jsbn2 from Tom Wu's original website above, with the modular pattern applied to prevent global leaks and to allow for use with node.js on the server side. - -## usage - - var BigInteger = require('jsbn'); - - var a = new BigInteger('91823918239182398123'); - alert(a.bitLength()); // 67 - - -## API - -### bi.toString() - -returns the base-10 number as a string - -### bi.negate() - -returns a new BigInteger equal to the negation of `bi` - -### bi.abs - -returns new BI of absolute value - -### bi.compareTo - - - -### bi.bitLength - - - -### bi.mod - - - -### bi.modPowInt - - - -### bi.clone - - - -### bi.intValue - - - -### bi.byteValue - - - -### bi.shortValue - - - -### bi.signum - - - -### bi.toByteArray - - - -### bi.equals - - - -### bi.min - - - -### bi.max - - - -### bi.and - - - -### bi.or - - - -### bi.xor - - - -### bi.andNot - - - -### bi.not - - - -### bi.shiftLeft - - - -### bi.shiftRight - - - -### bi.getLowestSetBit - - - -### bi.bitCount - - - -### bi.testBit - - - -### bi.setBit - - - -### bi.clearBit - - - -### bi.flipBit - - - -### bi.add - - - -### bi.subtract - - - -### bi.multiply - - - -### bi.divide - - - -### bi.remainder - - - -### bi.divideAndRemainder - - - -### bi.modPow - - - -### bi.modInverse - - - -### bi.pow - - - -### bi.gcd - - - -### bi.isProbablePrime - - diff --git a/node_modules/jsbn/example.html b/node_modules/jsbn/example.html deleted file mode 100644 index 7c26a56..0000000 --- a/node_modules/jsbn/example.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/jsbn/example.js b/node_modules/jsbn/example.js deleted file mode 100644 index 664c1b4..0000000 --- a/node_modules/jsbn/example.js +++ /dev/null @@ -1,3 +0,0 @@ -var BigInteger = require('./'); -var a = new BigInteger('91823918239182398123'); -console.log(a.bitLength()); \ No newline at end of file diff --git a/node_modules/jsbn/index.js b/node_modules/jsbn/index.js deleted file mode 100644 index e32fe13..0000000 --- a/node_modules/jsbn/index.js +++ /dev/null @@ -1,1358 +0,0 @@ -(function(){ - - // Copyright (c) 2005 Tom Wu - // All Rights Reserved. - // See "LICENSE" for details. - - // Basic JavaScript BN library - subset useful for RSA encryption. - - // Bits per digit - var dbits; - - // JavaScript engine analysis - var canary = 0xdeadbeefcafe; - var j_lm = ((canary&0xffffff)==0xefcafe); - - // (public) Constructor - function BigInteger(a,b,c) { - if(a != null) - if("number" == typeof a) this.fromNumber(a,b,c); - else if(b == null && "string" != typeof a) this.fromString(a,256); - else this.fromString(a,b); - } - - // return new, unset BigInteger - function nbi() { return new BigInteger(null); } - - // am: Compute w_j += (x*this_i), propagate carries, - // c is initial carry, returns final carry. - // c < 3*dvalue, x < 2*dvalue, this_i < dvalue - // We need to select the fastest one that works in this environment. - - // am1: use a single mult and divide to get the high bits, - // max digit bits should be 26 because - // max internal value = 2*dvalue^2-2*dvalue (< 2^53) - function am1(i,x,w,j,c,n) { - while(--n >= 0) { - var v = x*this[i++]+w[j]+c; - c = Math.floor(v/0x4000000); - w[j++] = v&0x3ffffff; - } - return c; - } - // am2 avoids a big mult-and-extract completely. - // Max digit bits should be <= 30 because we do bitwise ops - // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) - function am2(i,x,w,j,c,n) { - var xl = x&0x7fff, xh = x>>15; - while(--n >= 0) { - var l = this[i]&0x7fff; - var h = this[i++]>>15; - var m = xh*l+h*xl; - l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); - c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); - w[j++] = l&0x3fffffff; - } - return c; - } - // Alternately, set max digit bits to 28 since some - // browsers slow down when dealing with 32-bit numbers. - function am3(i,x,w,j,c,n) { - var xl = x&0x3fff, xh = x>>14; - while(--n >= 0) { - var l = this[i]&0x3fff; - var h = this[i++]>>14; - var m = xh*l+h*xl; - l = xl*l+((m&0x3fff)<<14)+w[j]+c; - c = (l>>28)+(m>>14)+xh*h; - w[j++] = l&0xfffffff; - } - return c; - } - var inBrowser = typeof navigator !== "undefined"; - if(inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) { - BigInteger.prototype.am = am2; - dbits = 30; - } - else if(inBrowser && j_lm && (navigator.appName != "Netscape")) { - BigInteger.prototype.am = am1; - dbits = 26; - } - else { // Mozilla/Netscape seems to prefer am3 - BigInteger.prototype.am = am3; - dbits = 28; - } - - BigInteger.prototype.DB = dbits; - BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; - r.t = this.t; - r.s = this.s; - } - - // (protected) set from integer value x, -DV <= x < DV - function bnpFromInt(x) { - this.t = 1; - this.s = (x<0)?-1:0; - if(x > 0) this[0] = x; - else if(x < -1) this[0] = x+this.DV; - else this.t = 0; - } - - // return bigint initialized to value - function nbv(i) { var r = nbi(); r.fromInt(i); return r; } - - // (protected) set from string and radix - function bnpFromString(s,b) { - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 256) k = 8; // byte array - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else { this.fromRadix(s,b); return; } - this.t = 0; - this.s = 0; - var i = s.length, mi = false, sh = 0; - while(--i >= 0) { - var x = (k==8)?s[i]&0xff:intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-") mi = true; - continue; - } - mi = false; - if(sh == 0) - this[this.t++] = x; - else if(sh+k > this.DB) { - this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); - } - else - this[this.t-1] |= x<= this.DB) sh -= this.DB; - } - if(k == 8 && (s[0]&0x80) != 0) { - this.s = -1; - if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; - } - - // (public) return string representation in given radix - function bnToString(b) { - if(this.s < 0) return "-"+this.negate().toString(b); - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else return this.toRadix(b); - var km = (1< 0) { - if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } - while(i >= 0) { - if(p < k) { - d = (this[i]&((1<>(p+=this.DB-k); - } - else { - d = (this[i]>>(p-=k))&km; - if(p <= 0) { p += this.DB; --i; } - } - if(d > 0) m = true; - if(m) r += int2char(d); - } - } - return m?r:"0"; - } - - // (public) -this - function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } - - // (public) |this| - function bnAbs() { return (this.s<0)?this.negate():this; } - - // (public) return + if this > a, - if this < a, 0 if equal - function bnCompareTo(a) { - var r = this.s-a.s; - if(r != 0) return r; - var i = this.t; - r = i-a.t; - if(r != 0) return (this.s<0)?-r:r; - while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; - return 0; - } - - // returns bit length of the integer x - function nbits(x) { - var r = 1, t; - if((t=x>>>16) != 0) { x = t; r += 16; } - if((t=x>>8) != 0) { x = t; r += 8; } - if((t=x>>4) != 0) { x = t; r += 4; } - if((t=x>>2) != 0) { x = t; r += 2; } - if((t=x>>1) != 0) { x = t; r += 1; } - return r; - } - - // (public) return the number of bits in "this" - function bnBitLength() { - if(this.t <= 0) return 0; - return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); - } - - // (protected) r = this << n*DB - function bnpDLShiftTo(n,r) { - var i; - for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; - for(i = n-1; i >= 0; --i) r[i] = 0; - r.t = this.t+n; - r.s = this.s; - } - - // (protected) r = this >> n*DB - function bnpDRShiftTo(n,r) { - for(var i = n; i < this.t; ++i) r[i-n] = this[i]; - r.t = Math.max(this.t-n,0); - r.s = this.s; - } - - // (protected) r = this << n - function bnpLShiftTo(n,r) { - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<= 0; --i) { - r[i+ds+1] = (this[i]>>cbs)|c; - c = (this[i]&bm)<= 0; --i) r[i] = 0; - r[ds] = c; - r.t = this.t+ds+1; - r.s = this.s; - r.clamp(); - } - - // (protected) r = this >> n - function bnpRShiftTo(n,r) { - r.s = this.s; - var ds = Math.floor(n/this.DB); - if(ds >= this.t) { r.t = 0; return; } - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<>bs; - for(var i = ds+1; i < this.t; ++i) { - r[i-ds-1] |= (this[i]&bm)<>bs; - } - if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; - } - if(a.t < this.t) { - c -= a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c -= a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c<0)?-1:0; - if(c < -1) r[i++] = this.DV+c; - else if(c > 0) r[i++] = c; - r.t = i; - r.clamp(); - } - - // (protected) r = this * a, r != this,a (HAC 14.12) - // "this" should be the larger one if appropriate. - function bnpMultiplyTo(a,r) { - var x = this.abs(), y = a.abs(); - var i = x.t; - r.t = i+y.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); - r.s = 0; - r.clamp(); - if(this.s != a.s) BigInteger.ZERO.subTo(r,r); - } - - // (protected) r = this^2, r != this (HAC 14.16) - function bnpSquareTo(r) { - var x = this.abs(); - var i = r.t = 2*x.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < x.t-1; ++i) { - var c = x.am(i,x[i],r,2*i,0,1); - if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { - r[i+x.t] -= x.DV; - r[i+x.t+1] = 1; - } - } - if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); - r.s = 0; - r.clamp(); - } - - // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) - // r != q, this != m. q or r may be null. - function bnpDivRemTo(m,q,r) { - var pm = m.abs(); - if(pm.t <= 0) return; - var pt = this.abs(); - if(pt.t < pm.t) { - if(q != null) q.fromInt(0); - if(r != null) this.copyTo(r); - return; - } - if(r == null) r = nbi(); - var y = nbi(), ts = this.s, ms = m.s; - var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus - if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } - else { pm.copyTo(y); pt.copyTo(r); } - var ys = y.t; - var y0 = y[ys-1]; - if(y0 == 0) return; - var yt = y0*(1<1)?y[ys-2]>>this.F2:0); - var d1 = this.FV/yt, d2 = (1<= 0) { - r[r.t++] = 1; - r.subTo(t,r); - } - BigInteger.ONE.dlShiftTo(ys,t); - t.subTo(y,y); // "negative" y so we can replace sub with am later - while(y.t < ys) y[y.t++] = 0; - while(--j >= 0) { - // Estimate quotient digit - var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); - if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out - y.dlShiftTo(j,t); - r.subTo(t,r); - while(r[i] < --qd) r.subTo(t,r); - } - } - if(q != null) { - r.drShiftTo(ys,q); - if(ts != ms) BigInteger.ZERO.subTo(q,q); - } - r.t = ys; - r.clamp(); - if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder - if(ts < 0) BigInteger.ZERO.subTo(r,r); - } - - // (public) this mod a - function bnMod(a) { - var r = nbi(); - this.abs().divRemTo(a,null,r); - if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); - return r; - } - - // Modular reduction using "classic" algorithm - function Classic(m) { this.m = m; } - function cConvert(x) { - if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); - else return x; - } - function cRevert(x) { return x; } - function cReduce(x) { x.divRemTo(this.m,null,x); } - function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - Classic.prototype.convert = cConvert; - Classic.prototype.revert = cRevert; - Classic.prototype.reduce = cReduce; - Classic.prototype.mulTo = cMulTo; - Classic.prototype.sqrTo = cSqrTo; - - // (protected) return "-1/this % 2^DB"; useful for Mont. reduction - // justification: - // xy == 1 (mod m) - // xy = 1+km - // xy(2-xy) = (1+km)(1-km) - // x[y(2-xy)] = 1-k^2m^2 - // x[y(2-xy)] == 1 (mod m^2) - // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 - // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. - // JS multiply "overflows" differently from C/C++, so care is needed here. - function bnpInvDigit() { - if(this.t < 1) return 0; - var x = this[0]; - if((x&1) == 0) return 0; - var y = x&3; // y == 1/x mod 2^2 - y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 - y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 - y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y>0)?this.DV-y:-y; - } - - // Montgomery reduction - function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp&0x7fff; - this.mph = this.mp>>15; - this.um = (1<<(m.DB-15))-1; - this.mt2 = 2*m.t; - } - - // xR mod m - function montConvert(x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t,r); - r.divRemTo(this.m,null,r); - if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); - return r; - } - - // x/R mod m - function montRevert(x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - } - - // x = x/R mod m (HAC 14.32) - function montReduce(x) { - while(x.t <= this.mt2) // pad x so am has enough room later - x[x.t++] = 0; - for(var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x[i]&0x7fff; - var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; - // use am to combine the multiply-shift-add into one call - j = i+this.m.t; - x[j] += this.m.am(0,u0,x,i,0,this.m.t); - // propagate carry - while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } - } - x.clamp(); - x.drShiftTo(this.m.t,x); - if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); - } - - // r = "x^2/R mod m"; x != r - function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - // r = "xy/R mod m"; x,y != r - function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - - Montgomery.prototype.convert = montConvert; - Montgomery.prototype.revert = montRevert; - Montgomery.prototype.reduce = montReduce; - Montgomery.prototype.mulTo = montMulTo; - Montgomery.prototype.sqrTo = montSqrTo; - - // (protected) true iff this is even - function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } - - // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) - function bnpExp(e,z) { - if(e > 0xffffffff || e < 1) return BigInteger.ONE; - var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; - g.copyTo(r); - while(--i >= 0) { - z.sqrTo(r,r2); - if((e&(1< 0) z.mulTo(r2,g,r); - else { var t = r; r = r2; r2 = t; } - } - return z.revert(r); - } - - // (public) this^e % m, 0 <= e < 2^32 - function bnModPowInt(e,m) { - var z; - if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); - return this.exp(e,z); - } - - // protected - BigInteger.prototype.copyTo = bnpCopyTo; - BigInteger.prototype.fromInt = bnpFromInt; - BigInteger.prototype.fromString = bnpFromString; - BigInteger.prototype.clamp = bnpClamp; - BigInteger.prototype.dlShiftTo = bnpDLShiftTo; - BigInteger.prototype.drShiftTo = bnpDRShiftTo; - BigInteger.prototype.lShiftTo = bnpLShiftTo; - BigInteger.prototype.rShiftTo = bnpRShiftTo; - BigInteger.prototype.subTo = bnpSubTo; - BigInteger.prototype.multiplyTo = bnpMultiplyTo; - BigInteger.prototype.squareTo = bnpSquareTo; - BigInteger.prototype.divRemTo = bnpDivRemTo; - BigInteger.prototype.invDigit = bnpInvDigit; - BigInteger.prototype.isEven = bnpIsEven; - BigInteger.prototype.exp = bnpExp; - - // public - BigInteger.prototype.toString = bnToString; - BigInteger.prototype.negate = bnNegate; - BigInteger.prototype.abs = bnAbs; - BigInteger.prototype.compareTo = bnCompareTo; - BigInteger.prototype.bitLength = bnBitLength; - BigInteger.prototype.mod = bnMod; - BigInteger.prototype.modPowInt = bnModPowInt; - - // "constants" - BigInteger.ZERO = nbv(0); - BigInteger.ONE = nbv(1); - - // Copyright (c) 2005-2009 Tom Wu - // All Rights Reserved. - // See "LICENSE" for details. - - // Extended JavaScript BN functions, required for RSA private ops. - - // Version 1.1: new BigInteger("0", 10) returns "proper" zero - // Version 1.2: square() API, isProbablePrime fix - - // (public) - function bnClone() { var r = nbi(); this.copyTo(r); return r; } - - // (public) return value as integer - function bnIntValue() { - if(this.s < 0) { - if(this.t == 1) return this[0]-this.DV; - else if(this.t == 0) return -1; - } - else if(this.t == 1) return this[0]; - else if(this.t == 0) return 0; - // assumes 16 < DB < 32 - return ((this[1]&((1<<(32-this.DB))-1))<>24; } - - // (public) return value as short (assumes DB>=16) - function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; } - - // (protected) return x s.t. r^x < DV - function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } - - // (public) 0 if this == 0, 1 if this > 0 - function bnSigNum() { - if(this.s < 0) return -1; - else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; - else return 1; - } - - // (protected) convert to radix string - function bnpToRadix(b) { - if(b == null) b = 10; - if(this.signum() == 0 || b < 2 || b > 36) return "0"; - var cs = this.chunkSize(b); - var a = Math.pow(b,cs); - var d = nbv(a), y = nbi(), z = nbi(), r = ""; - this.divRemTo(d,y,z); - while(y.signum() > 0) { - r = (a+z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d,y,z); - } - return z.intValue().toString(b) + r; - } - - // (protected) convert from radix string - function bnpFromRadix(s,b) { - this.fromInt(0); - if(b == null) b = 10; - var cs = this.chunkSize(b); - var d = Math.pow(b,cs), mi = false, j = 0, w = 0; - for(var i = 0; i < s.length; ++i) { - var x = intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-" && this.signum() == 0) mi = true; - continue; - } - w = b*w+x; - if(++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w,0); - j = 0; - w = 0; - } - } - if(j > 0) { - this.dMultiply(Math.pow(b,j)); - this.dAddOffset(w,0); - } - if(mi) BigInteger.ZERO.subTo(this,this); - } - - // (protected) alternate constructor - function bnpFromNumber(a,b,c) { - if("number" == typeof b) { - // new BigInteger(int,int,RNG) - if(a < 2) this.fromInt(1); - else { - this.fromNumber(a,c); - if(!this.testBit(a-1)) // force MSB set - this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); - if(this.isEven()) this.dAddOffset(1,0); // force odd - while(!this.isProbablePrime(b)) { - this.dAddOffset(2,0); - if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); - } - } - } - else { - // new BigInteger(int,RNG) - var x = new Array(), t = a&7; - x.length = (a>>3)+1; - b.nextBytes(x); - if(t > 0) x[0] &= ((1< 0) { - if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p) - r[k++] = d|(this.s<<(this.DB-p)); - while(i >= 0) { - if(p < 8) { - d = (this[i]&((1<>(p+=this.DB-8); - } - else { - d = (this[i]>>(p-=8))&0xff; - if(p <= 0) { p += this.DB; --i; } - } - if((d&0x80) != 0) d |= -256; - if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; - if(k > 0 || d != this.s) r[k++] = d; - } - } - return r; - } - - function bnEquals(a) { return(this.compareTo(a)==0); } - function bnMin(a) { return(this.compareTo(a)<0)?this:a; } - function bnMax(a) { return(this.compareTo(a)>0)?this:a; } - - // (protected) r = this op a (bitwise) - function bnpBitwiseTo(a,op,r) { - var i, f, m = Math.min(a.t,this.t); - for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]); - if(a.t < this.t) { - f = a.s&this.DM; - for(i = m; i < this.t; ++i) r[i] = op(this[i],f); - r.t = this.t; - } - else { - f = this.s&this.DM; - for(i = m; i < a.t; ++i) r[i] = op(f,a[i]); - r.t = a.t; - } - r.s = op(this.s,a.s); - r.clamp(); - } - - // (public) this & a - function op_and(x,y) { return x&y; } - function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } - - // (public) this | a - function op_or(x,y) { return x|y; } - function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } - - // (public) this ^ a - function op_xor(x,y) { return x^y; } - function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } - - // (public) this & ~a - function op_andnot(x,y) { return x&~y; } - function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } - - // (public) ~this - function bnNot() { - var r = nbi(); - for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i]; - r.t = this.t; - r.s = ~this.s; - return r; - } - - // (public) this << n - function bnShiftLeft(n) { - var r = nbi(); - if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); - return r; - } - - // (public) this >> n - function bnShiftRight(n) { - var r = nbi(); - if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); - return r; - } - - // return index of lowest 1-bit in x, x < 2^31 - function lbit(x) { - if(x == 0) return -1; - var r = 0; - if((x&0xffff) == 0) { x >>= 16; r += 16; } - if((x&0xff) == 0) { x >>= 8; r += 8; } - if((x&0xf) == 0) { x >>= 4; r += 4; } - if((x&3) == 0) { x >>= 2; r += 2; } - if((x&1) == 0) ++r; - return r; - } - - // (public) returns index of lowest 1-bit (or -1 if none) - function bnGetLowestSetBit() { - for(var i = 0; i < this.t; ++i) - if(this[i] != 0) return i*this.DB+lbit(this[i]); - if(this.s < 0) return this.t*this.DB; - return -1; - } - - // return number of 1 bits in x - function cbit(x) { - var r = 0; - while(x != 0) { x &= x-1; ++r; } - return r; - } - - // (public) return number of set bits - function bnBitCount() { - var r = 0, x = this.s&this.DM; - for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x); - return r; - } - - // (public) true iff nth bit is set - function bnTestBit(n) { - var j = Math.floor(n/this.DB); - if(j >= this.t) return(this.s!=0); - return((this[j]&(1<<(n%this.DB)))!=0); - } - - // (protected) this op (1<>= this.DB; - } - if(a.t < this.t) { - c += a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c += a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += a.s; - } - r.s = (c<0)?-1:0; - if(c > 0) r[i++] = c; - else if(c < -1) r[i++] = this.DV+c; - r.t = i; - r.clamp(); - } - - // (public) this + a - function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } - - // (public) this - a - function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } - - // (public) this * a - function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } - - // (public) this^2 - function bnSquare() { var r = nbi(); this.squareTo(r); return r; } - - // (public) this / a - function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } - - // (public) this % a - function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } - - // (public) [this/a,this%a] - function bnDivideAndRemainder(a) { - var q = nbi(), r = nbi(); - this.divRemTo(a,q,r); - return new Array(q,r); - } - - // (protected) this *= n, this >= 0, 1 < n < DV - function bnpDMultiply(n) { - this[this.t] = this.am(0,n-1,this,0,0,this.t); - ++this.t; - this.clamp(); - } - - // (protected) this += n << w words, this >= 0 - function bnpDAddOffset(n,w) { - if(n == 0) return; - while(this.t <= w) this[this.t++] = 0; - this[w] += n; - while(this[w] >= this.DV) { - this[w] -= this.DV; - if(++w >= this.t) this[this.t++] = 0; - ++this[w]; - } - } - - // A "null" reducer - function NullExp() {} - function nNop(x) { return x; } - function nMulTo(x,y,r) { x.multiplyTo(y,r); } - function nSqrTo(x,r) { x.squareTo(r); } - - NullExp.prototype.convert = nNop; - NullExp.prototype.revert = nNop; - NullExp.prototype.mulTo = nMulTo; - NullExp.prototype.sqrTo = nSqrTo; - - // (public) this^e - function bnPow(e) { return this.exp(e,new NullExp()); } - - // (protected) r = lower n words of "this * a", a.t <= n - // "this" should be the larger one if appropriate. - function bnpMultiplyLowerTo(a,n,r) { - var i = Math.min(this.t+a.t,n); - r.s = 0; // assumes a,this >= 0 - r.t = i; - while(i > 0) r[--i] = 0; - var j; - for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t); - for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i); - r.clamp(); - } - - // (protected) r = "this * a" without lower n words, n > 0 - // "this" should be the larger one if appropriate. - function bnpMultiplyUpperTo(a,n,r) { - --n; - var i = r.t = this.t+a.t-n; - r.s = 0; // assumes a,this >= 0 - while(--i >= 0) r[i] = 0; - for(i = Math.max(n-this.t,0); i < a.t; ++i) - r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n); - r.clamp(); - r.drShiftTo(1,r); - } - - // Barrett modular reduction - function Barrett(m) { - // setup Barrett - this.r2 = nbi(); - this.q3 = nbi(); - BigInteger.ONE.dlShiftTo(2*m.t,this.r2); - this.mu = this.r2.divide(m); - this.m = m; - } - - function barrettConvert(x) { - if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); - else if(x.compareTo(this.m) < 0) return x; - else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } - } - - function barrettRevert(x) { return x; } - - // x = x mod m (HAC 14.42) - function barrettReduce(x) { - x.drShiftTo(this.m.t-1,this.r2); - if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } - this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); - this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); - while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); - x.subTo(this.r2,x); - while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); - } - - // r = x^2 mod m; x != r - function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - // r = x*y mod m; x,y != r - function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - - Barrett.prototype.convert = barrettConvert; - Barrett.prototype.revert = barrettRevert; - Barrett.prototype.reduce = barrettReduce; - Barrett.prototype.mulTo = barrettMulTo; - Barrett.prototype.sqrTo = barrettSqrTo; - - // (public) this^e % m (HAC 14.85) - function bnModPow(e,m) { - var i = e.bitLength(), k, r = nbv(1), z; - if(i <= 0) return r; - else if(i < 18) k = 1; - else if(i < 48) k = 3; - else if(i < 144) k = 4; - else if(i < 768) k = 5; - else k = 6; - if(i < 8) - z = new Classic(m); - else if(m.isEven()) - z = new Barrett(m); - else - z = new Montgomery(m); - - // precomputation - var g = new Array(), n = 3, k1 = k-1, km = (1< 1) { - var g2 = nbi(); - z.sqrTo(g[1],g2); - while(n <= km) { - g[n] = nbi(); - z.mulTo(g2,g[n-2],g[n]); - n += 2; - } - } - - var j = e.t-1, w, is1 = true, r2 = nbi(), t; - i = nbits(e[j])-1; - while(j >= 0) { - if(i >= k1) w = (e[j]>>(i-k1))&km; - else { - w = (e[j]&((1<<(i+1))-1))<<(k1-i); - if(j > 0) w |= e[j-1]>>(this.DB+i-k1); - } - - n = k; - while((w&1) == 0) { w >>= 1; --n; } - if((i -= n) < 0) { i += this.DB; --j; } - if(is1) { // ret == 1, don't bother squaring or multiplying it - g[w].copyTo(r); - is1 = false; - } - else { - while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } - if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } - z.mulTo(r2,g[w],r); - } - - while(j >= 0 && (e[j]&(1< 0) { - x.rShiftTo(g,x); - y.rShiftTo(g,y); - } - while(x.signum() > 0) { - if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); - if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); - if(x.compareTo(y) >= 0) { - x.subTo(y,x); - x.rShiftTo(1,x); - } - else { - y.subTo(x,y); - y.rShiftTo(1,y); - } - } - if(g > 0) y.lShiftTo(g,y); - return y; - } - - // (protected) this % n, n < 2^26 - function bnpModInt(n) { - if(n <= 0) return 0; - var d = this.DV%n, r = (this.s<0)?n-1:0; - if(this.t > 0) - if(d == 0) r = this[0]%n; - else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n; - return r; - } - - // (public) 1/this % m (HAC 14.61) - function bnModInverse(m) { - var ac = m.isEven(); - if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; - var u = m.clone(), v = this.clone(); - var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); - while(u.signum() != 0) { - while(u.isEven()) { - u.rShiftTo(1,u); - if(ac) { - if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } - a.rShiftTo(1,a); - } - else if(!b.isEven()) b.subTo(m,b); - b.rShiftTo(1,b); - } - while(v.isEven()) { - v.rShiftTo(1,v); - if(ac) { - if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } - c.rShiftTo(1,c); - } - else if(!d.isEven()) d.subTo(m,d); - d.rShiftTo(1,d); - } - if(u.compareTo(v) >= 0) { - u.subTo(v,u); - if(ac) a.subTo(c,a); - b.subTo(d,b); - } - else { - v.subTo(u,v); - if(ac) c.subTo(a,c); - d.subTo(b,d); - } - } - if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; - if(d.compareTo(m) >= 0) return d.subtract(m); - if(d.signum() < 0) d.addTo(m,d); else return d; - if(d.signum() < 0) return d.add(m); else return d; - } - - var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]; - var lplim = (1<<26)/lowprimes[lowprimes.length-1]; - - // (public) test primality with certainty >= 1-.5^t - function bnIsProbablePrime(t) { - var i, x = this.abs(); - if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) { - for(i = 0; i < lowprimes.length; ++i) - if(x[0] == lowprimes[i]) return true; - return false; - } - if(x.isEven()) return false; - i = 1; - while(i < lowprimes.length) { - var m = lowprimes[i], j = i+1; - while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; - m = x.modInt(m); - while(i < j) if(m%lowprimes[i++] == 0) return false; - } - return x.millerRabin(t); - } - - // (protected) true if probably prime (HAC 4.24, Miller-Rabin) - function bnpMillerRabin(t) { - var n1 = this.subtract(BigInteger.ONE); - var k = n1.getLowestSetBit(); - if(k <= 0) return false; - var r = n1.shiftRight(k); - t = (t+1)>>1; - if(t > lowprimes.length) t = lowprimes.length; - var a = nbi(); - for(var i = 0; i < t; ++i) { - //Pick bases at random, instead of starting at 2 - a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]); - var y = a.modPow(r,this); - if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { - var j = 1; - while(j++ < k && y.compareTo(n1) != 0) { - y = y.modPowInt(2,this); - if(y.compareTo(BigInteger.ONE) == 0) return false; - } - if(y.compareTo(n1) != 0) return false; - } - } - return true; - } - - // protected - BigInteger.prototype.chunkSize = bnpChunkSize; - BigInteger.prototype.toRadix = bnpToRadix; - BigInteger.prototype.fromRadix = bnpFromRadix; - BigInteger.prototype.fromNumber = bnpFromNumber; - BigInteger.prototype.bitwiseTo = bnpBitwiseTo; - BigInteger.prototype.changeBit = bnpChangeBit; - BigInteger.prototype.addTo = bnpAddTo; - BigInteger.prototype.dMultiply = bnpDMultiply; - BigInteger.prototype.dAddOffset = bnpDAddOffset; - BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; - BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; - BigInteger.prototype.modInt = bnpModInt; - BigInteger.prototype.millerRabin = bnpMillerRabin; - - // public - BigInteger.prototype.clone = bnClone; - BigInteger.prototype.intValue = bnIntValue; - BigInteger.prototype.byteValue = bnByteValue; - BigInteger.prototype.shortValue = bnShortValue; - BigInteger.prototype.signum = bnSigNum; - BigInteger.prototype.toByteArray = bnToByteArray; - BigInteger.prototype.equals = bnEquals; - BigInteger.prototype.min = bnMin; - BigInteger.prototype.max = bnMax; - BigInteger.prototype.and = bnAnd; - BigInteger.prototype.or = bnOr; - BigInteger.prototype.xor = bnXor; - BigInteger.prototype.andNot = bnAndNot; - BigInteger.prototype.not = bnNot; - BigInteger.prototype.shiftLeft = bnShiftLeft; - BigInteger.prototype.shiftRight = bnShiftRight; - BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; - BigInteger.prototype.bitCount = bnBitCount; - BigInteger.prototype.testBit = bnTestBit; - BigInteger.prototype.setBit = bnSetBit; - BigInteger.prototype.clearBit = bnClearBit; - BigInteger.prototype.flipBit = bnFlipBit; - BigInteger.prototype.add = bnAdd; - BigInteger.prototype.subtract = bnSubtract; - BigInteger.prototype.multiply = bnMultiply; - BigInteger.prototype.divide = bnDivide; - BigInteger.prototype.remainder = bnRemainder; - BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; - BigInteger.prototype.modPow = bnModPow; - BigInteger.prototype.modInverse = bnModInverse; - BigInteger.prototype.pow = bnPow; - BigInteger.prototype.gcd = bnGCD; - BigInteger.prototype.isProbablePrime = bnIsProbablePrime; - - // JSBN-specific extension - BigInteger.prototype.square = bnSquare; - - // Expose the Barrett function - BigInteger.prototype.Barrett = Barrett - - // BigInteger interfaces not implemented in jsbn: - - // BigInteger(int signum, byte[] magnitude) - // double doubleValue() - // float floatValue() - // int hashCode() - // long longValue() - // static BigInteger valueOf(long val) - - // Random number generator - requires a PRNG backend, e.g. prng4.js - - // For best results, put code like - // - // in your main HTML document. - - var rng_state; - var rng_pool; - var rng_pptr; - - // Mix in a 32-bit integer into the pool - function rng_seed_int(x) { - rng_pool[rng_pptr++] ^= x & 255; - rng_pool[rng_pptr++] ^= (x >> 8) & 255; - rng_pool[rng_pptr++] ^= (x >> 16) & 255; - rng_pool[rng_pptr++] ^= (x >> 24) & 255; - if(rng_pptr >= rng_psize) rng_pptr -= rng_psize; - } - - // Mix in the current time (w/milliseconds) into the pool - function rng_seed_time() { - rng_seed_int(new Date().getTime()); - } - - // Initialize the pool with junk if needed. - if(rng_pool == null) { - rng_pool = new Array(); - rng_pptr = 0; - var t; - if(typeof window !== "undefined" && window.crypto) { - if (window.crypto.getRandomValues) { - // Use webcrypto if available - var ua = new Uint8Array(32); - window.crypto.getRandomValues(ua); - for(t = 0; t < 32; ++t) - rng_pool[rng_pptr++] = ua[t]; - } - else if(navigator.appName == "Netscape" && navigator.appVersion < "5") { - // Extract entropy (256 bits) from NS4 RNG if available - var z = window.crypto.random(32); - for(t = 0; t < z.length; ++t) - rng_pool[rng_pptr++] = z.charCodeAt(t) & 255; - } - } - while(rng_pptr < rng_psize) { // extract some randomness from Math.random() - t = Math.floor(65536 * Math.random()); - rng_pool[rng_pptr++] = t >>> 8; - rng_pool[rng_pptr++] = t & 255; - } - rng_pptr = 0; - rng_seed_time(); - //rng_seed_int(window.screenX); - //rng_seed_int(window.screenY); - } - - function rng_get_byte() { - if(rng_state == null) { - rng_seed_time(); - rng_state = prng_newstate(); - rng_state.init(rng_pool); - for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) - rng_pool[rng_pptr] = 0; - rng_pptr = 0; - //rng_pool = null; - } - // TODO: allow reseeding after first request - return rng_state.next(); - } - - function rng_get_bytes(ba) { - var i; - for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte(); - } - - function SecureRandom() {} - - SecureRandom.prototype.nextBytes = rng_get_bytes; - - // prng4.js - uses Arcfour as a PRNG - - function Arcfour() { - this.i = 0; - this.j = 0; - this.S = new Array(); - } - - // Initialize arcfour context from key, an array of ints, each from [0..255] - function ARC4init(key) { - var i, j, t; - for(i = 0; i < 256; ++i) - this.S[i] = i; - j = 0; - for(i = 0; i < 256; ++i) { - j = (j + this.S[i] + key[i % key.length]) & 255; - t = this.S[i]; - this.S[i] = this.S[j]; - this.S[j] = t; - } - this.i = 0; - this.j = 0; - } - - function ARC4next() { - var t; - this.i = (this.i + 1) & 255; - this.j = (this.j + this.S[this.i]) & 255; - t = this.S[this.i]; - this.S[this.i] = this.S[this.j]; - this.S[this.j] = t; - return this.S[(t + this.S[this.i]) & 255]; - } - - Arcfour.prototype.init = ARC4init; - Arcfour.prototype.next = ARC4next; - - // Plug in your RNG constructor here - function prng_newstate() { - return new Arcfour(); - } - - // Pool size must be a multiple of 4 and greater than 32. - // An array of bytes the size of the pool will be passed to init() - var rng_psize = 256; - - if (typeof exports !== 'undefined') { - exports = module.exports = { - BigInteger: BigInteger, - SecureRandom: SecureRandom, - }; - } else { - this.BigInteger = BigInteger; - this.SecureRandom = SecureRandom; - } - -}).call(this); diff --git a/node_modules/jsbn/package.json b/node_modules/jsbn/package.json deleted file mode 100644 index 5af11d9..0000000 --- a/node_modules/jsbn/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_args": [ - [ - "jsbn@~0.1.0", - "/Users/jbaylina/git/MVP/node_modules/sshpk" - ] - ], - "_from": "jsbn@>=0.1.0 <0.2.0", - "_id": "jsbn@0.1.0", - "_inCache": true, - "_installable": true, - "_location": "/jsbn", - "_nodeVersion": "0.12.2", - "_npmUser": { - "email": "andyperlitch@gmail.com", - "name": "andyperlitch" - }, - "_npmVersion": "2.7.4", - "_phantomChildren": {}, - "_requested": { - "name": "jsbn", - "raw": "jsbn@~0.1.0", - "rawSpec": "~0.1.0", - "scope": null, - "spec": ">=0.1.0 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/ecc-jsbn", - "/jodid25519", - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "_shasum": "650987da0dd74f4ebf5a11377a2aa2d273e97dfd", - "_shrinkwrap": null, - "_spec": "jsbn@~0.1.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/sshpk", - "author": { - "name": "Tom Wu" - }, - "bugs": { - "url": "https://github.com/andyperlitch/jsbn/issues" - }, - "dependencies": {}, - "description": "The jsbn library is a fast, portable implementation of large-number math in pure JavaScript, enabling public-key crypto and other applications on desktop and mobile browsers.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "650987da0dd74f4ebf5a11377a2aa2d273e97dfd", - "tarball": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" - }, - "gitHead": "148a967b112806e63ddeeed78ee7938eef74c84a", - "homepage": "https://github.com/andyperlitch/jsbn", - "keywords": [ - "biginteger", - "bignumber", - "big", - "integer" - ], - "license": "BSD", - "main": "index.js", - "maintainers": [ - { - "email": "andyperlitch@gmail.com", - "name": "andyperlitch" - } - ], - "name": "jsbn", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/andyperlitch/jsbn.git" - }, - "scripts": { - "test": "mocha test.js" - }, - "version": "0.1.0" -} diff --git a/node_modules/json-schema/README.md b/node_modules/json-schema/README.md deleted file mode 100644 index ccc591b..0000000 --- a/node_modules/json-schema/README.md +++ /dev/null @@ -1,5 +0,0 @@ -JSON Schema is a repository for the JSON Schema specification, reference schemas and a CommonJS implementation of JSON Schema (not the only JavaScript implementation of JSON Schema, JSV is another excellent JavaScript validator). - -Code is licensed under the AFL or BSD license as part of the Persevere -project which is administered under the Dojo foundation, -and all contributions require a Dojo CLA. \ No newline at end of file diff --git a/node_modules/json-schema/draft-00/hyper-schema b/node_modules/json-schema/draft-00/hyper-schema deleted file mode 100644 index 12fe26b..0000000 --- a/node_modules/json-schema/draft-00/hyper-schema +++ /dev/null @@ -1,68 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-00/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "dot-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-00/schema#"} -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-00/json-ref b/node_modules/json-schema/draft-00/json-ref deleted file mode 100644 index 0c825bc..0000000 --- a/node_modules/json-schema/draft-00/json-ref +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-00/links b/node_modules/json-schema/draft-00/links deleted file mode 100644 index c9b5517..0000000 --- a/node_modules/json-schema/draft-00/links +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-00/hyper-schema#"}, - "optional" : true - } - } -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-00/schema b/node_modules/json-schema/draft-00/schema deleted file mode 100644 index a3a2144..0000000 --- a/node_modules/json-schema/draft-00/schema +++ /dev/null @@ -1,155 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1 - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "maxDecimal" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-01/hyper-schema b/node_modules/json-schema/draft-01/hyper-schema deleted file mode 100644 index 66e835b..0000000 --- a/node_modules/json-schema/draft-01/hyper-schema +++ /dev/null @@ -1,68 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-01/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "dot-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-01/schema#"} -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-01/json-ref b/node_modules/json-schema/draft-01/json-ref deleted file mode 100644 index f2ad55b..0000000 --- a/node_modules/json-schema/draft-01/json-ref +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-01/links b/node_modules/json-schema/draft-01/links deleted file mode 100644 index cb183c4..0000000 --- a/node_modules/json-schema/draft-01/links +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-01/hyper-schema#"}, - "optional" : true - } - } -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-01/schema b/node_modules/json-schema/draft-01/schema deleted file mode 100644 index e6b6aea..0000000 --- a/node_modules/json-schema/draft-01/schema +++ /dev/null @@ -1,155 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1 - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "maxDecimal" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-02/hyper-schema b/node_modules/json-schema/draft-02/hyper-schema deleted file mode 100644 index 2d2bc68..0000000 --- a/node_modules/json-schema/draft-02/hyper-schema +++ /dev/null @@ -1,68 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-02/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "slash-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "slash-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-02/schema#"} -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-02/json-ref b/node_modules/json-schema/draft-02/json-ref deleted file mode 100644 index 2b23fcd..0000000 --- a/node_modules/json-schema/draft-02/json-ref +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-02/links b/node_modules/json-schema/draft-02/links deleted file mode 100644 index ab971b7..0000000 --- a/node_modules/json-schema/draft-02/links +++ /dev/null @@ -1,35 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-02/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-02/hyper-schema#"}, - "optional" : true - } - } -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-02/schema b/node_modules/json-schema/draft-02/schema deleted file mode 100644 index cc2b669..0000000 --- a/node_modules/json-schema/draft-02/schema +++ /dev/null @@ -1,166 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "uniqueItems" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1, - "uniqueItems" : true - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "minimumCanEqual" : false, - "optional" : true, - "default" : 1 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/examples/address b/node_modules/json-schema/draft-03/examples/address deleted file mode 100644 index 401f20f..0000000 --- a/node_modules/json-schema/draft-03/examples/address +++ /dev/null @@ -1,20 +0,0 @@ -{ - "description" : "An Address following the convention of http://microformats.org/wiki/hcard", - "type" : "object", - "properties" : { - "post-office-box" : { "type" : "string" }, - "extended-address" : { "type" : "string" }, - "street-address" : { "type":"string" }, - "locality" : { "type" : "string", "required" : true }, - "region" : { "type" : "string", "required" : true }, - "postal-code" : { "type" : "string" }, - "country-name" : { "type" : "string", "required" : true } - }, - "dependencies" : { - "post-office-box" : "street-address", - "extended-address" : "street-address", - "street-address" : "region", - "locality" : "region", - "region" : "country-name" - } -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/examples/calendar b/node_modules/json-schema/draft-03/examples/calendar deleted file mode 100644 index 0ec47c2..0000000 --- a/node_modules/json-schema/draft-03/examples/calendar +++ /dev/null @@ -1,53 +0,0 @@ -{ - "description" : "A representation of an event", - "type" : "object", - "properties" : { - "dtstart" : { - "format" : "date-time", - "type" : "string", - "description" : "Event starting time", - "required":true - }, - "summary" : { - "type":"string", - "required":true - }, - "location" : { - "type" : "string" - }, - "url" : { - "type" : "string", - "format" : "url" - }, - "dtend" : { - "format" : "date-time", - "type" : "string", - "description" : "Event ending time" - }, - "duration" : { - "format" : "date", - "type" : "string", - "description" : "Event duration" - }, - "rdate" : { - "format" : "date-time", - "type" : "string", - "description" : "Recurrence date" - }, - "rrule" : { - "type" : "string", - "description" : "Recurrence rule" - }, - "category" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "geo" : { "$ref" : "http://json-schema.org/draft-03/geo" } - } -} - - - - diff --git a/node_modules/json-schema/draft-03/examples/card b/node_modules/json-schema/draft-03/examples/card deleted file mode 100644 index a5667ff..0000000 --- a/node_modules/json-schema/draft-03/examples/card +++ /dev/null @@ -1,105 +0,0 @@ -{ - "description":"A representation of a person, company, organization, or place", - "type":"object", - "properties":{ - "fn":{ - "description":"Formatted Name", - "type":"string" - }, - "familyName":{ - "type":"string", - "required":true - }, - "givenName":{ - "type":"string", - "required":true - }, - "additionalName":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "honorificPrefix":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "honorificSuffix":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "nickname":{ - "type":"string" - }, - "url":{ - "type":"string", - "format":"url" - }, - "email":{ - "type":"object", - "properties":{ - "type":{ - "type":"string" - }, - "value":{ - "type":"string", - "format":"email" - } - } - }, - "tel":{ - "type":"object", - "properties":{ - "type":{ - "type":"string" - }, - "value":{ - "type":"string", - "format":"phone" - } - } - }, - "adr":{"$ref" : "http://json-schema.org/address"}, - "geo":{"$ref" : "http://json-schema.org/geo"}, - "tz":{ - "type":"string" - }, - "photo":{ - "format":"image", - "type":"string" - }, - "logo":{ - "format":"image", - "type":"string" - }, - "sound":{ - "format":"attachment", - "type":"string" - }, - "bday":{ - "type":"string", - "format":"date" - }, - "title":{ - "type":"string" - }, - "role":{ - "type":"string" - }, - "org":{ - "type":"object", - "properties":{ - "organizationName":{ - "type":"string" - }, - "organizationUnit":{ - "type":"string" - } - } - } - } -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/examples/geo b/node_modules/json-schema/draft-03/examples/geo deleted file mode 100644 index 4357a90..0000000 --- a/node_modules/json-schema/draft-03/examples/geo +++ /dev/null @@ -1,8 +0,0 @@ -{ - "description" : "A geographical coordinate", - "type" : "object", - "properties" : { - "latitude" : { "type" : "number" }, - "longitude" : { "type" : "number" } - } -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/examples/interfaces b/node_modules/json-schema/draft-03/examples/interfaces deleted file mode 100644 index b8532f2..0000000 --- a/node_modules/json-schema/draft-03/examples/interfaces +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extends":"http://json-schema.org/hyper-schema", - "description":"A schema for schema interface definitions that describe programmatic class structures using JSON schema syntax", - "properties":{ - "methods":{ - "type":"object", - "description":"This defines the set of methods available to the class instances", - "additionalProperties":{ - "type":"object", - "description":"The definition of the method", - "properties":{ - "parameters":{ - "type":"array", - "description":"The set of parameters that should be passed to the method when it is called", - "items":{"$ref":"#"}, - "required": true - }, - "returns":{"$ref":"#"} - } - } - } - } -} diff --git a/node_modules/json-schema/draft-03/hyper-schema b/node_modules/json-schema/draft-03/hyper-schema deleted file mode 100644 index 38ca2e1..0000000 --- a/node_modules/json-schema/draft-03/hyper-schema +++ /dev/null @@ -1,60 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "extends" : {"$ref" : "http://json-schema.org/draft-03/schema#"}, - "id" : "http://json-schema.org/draft-03/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-03/links#"} - }, - - "fragmentResolution" : { - "type" : "string", - "default" : "slash-delimited" - }, - - "root" : { - "type" : "boolean", - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "default" : false - }, - - "contentEncoding" : { - "type" : "string" - }, - - "pathStart" : { - "type" : "string", - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "format" : "media-type" - } - }, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "slash-delimited" -} diff --git a/node_modules/json-schema/draft-03/json-ref b/node_modules/json-schema/draft-03/json-ref deleted file mode 100644 index 66e08f2..0000000 --- a/node_modules/json-schema/draft-03/json-ref +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "id" : "http://json-schema.org/draft-03/json-ref#", - - "additionalItems" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "dot-delimited" -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/links b/node_modules/json-schema/draft-03/links deleted file mode 100644 index 9fa63f9..0000000 --- a/node_modules/json-schema/draft-03/links +++ /dev/null @@ -1,35 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "id" : "http://json-schema.org/draft-03/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string", - "required" : true, - "format" : "link-description-object-template" - }, - - "rel" : { - "type" : "string", - "required" : true - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-03/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET" - }, - - "enctype" : { - "type" : "string", - "requires" : "method" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-03/hyper-schema#"} - } - } -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/schema b/node_modules/json-schema/draft-03/schema deleted file mode 100644 index 29d9469..0000000 --- a/node_modules/json-schema/draft-03/schema +++ /dev/null @@ -1,174 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-03/schema#", - "id" : "http://json-schema.org/draft-03/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "patternProperties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalItems" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "required" : { - "type" : "boolean", - "default" : false - }, - - "dependencies" : { - "type" : "object", - "additionalProperties" : { - "type" : ["string", "array", {"$ref" : "#"}], - "items" : { - "type" : "string" - } - }, - "default" : {} - }, - - "minimum" : { - "type" : "number" - }, - - "maximum" : { - "type" : "number" - }, - - "exclusiveMinimum" : { - "type" : "boolean", - "default" : false - }, - - "exclusiveMaximum" : { - "type" : "boolean", - "default" : false - }, - - "minItems" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "default" : false - }, - - "pattern" : { - "type" : "string", - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer" - }, - - "enum" : { - "type" : "array", - "minItems" : 1, - "uniqueItems" : true - }, - - "default" : { - "type" : "any" - }, - - "title" : { - "type" : "string" - }, - - "description" : { - "type" : "string" - }, - - "format" : { - "type" : "string" - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "exclusiveMinimum" : true, - "default" : 1 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "id" : { - "type" : "string", - "format" : "uri" - }, - - "$ref" : { - "type" : "string", - "format" : "uri" - }, - - "$schema" : { - "type" : "string", - "format" : "uri" - } - }, - - "dependencies" : { - "exclusiveMinimum" : "minimum", - "exclusiveMaximum" : "maximum" - }, - - "default" : {} -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-04/hyper-schema b/node_modules/json-schema/draft-04/hyper-schema deleted file mode 100644 index 63fb34d..0000000 --- a/node_modules/json-schema/draft-04/hyper-schema +++ /dev/null @@ -1,60 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-04/hyper-schema#", - "extends" : {"$ref" : "http://json-schema.org/draft-04/schema#"}, - "id" : "http://json-schema.org/draft-04/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-04/links#"} - }, - - "fragmentResolution" : { - "type" : "string", - "default" : "json-pointer" - }, - - "root" : { - "type" : "boolean", - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "default" : false - }, - - "contentEncoding" : { - "type" : "string" - }, - - "pathStart" : { - "type" : "string", - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "format" : "media-type" - } - }, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "json-pointer" -} diff --git a/node_modules/json-schema/draft-04/links b/node_modules/json-schema/draft-04/links deleted file mode 100644 index 6c06d29..0000000 --- a/node_modules/json-schema/draft-04/links +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-04/hyper-schema#", - "id" : "http://json-schema.org/draft-04/links#", - "type" : "object", - - "properties" : { - "rel" : { - "type" : "string" - }, - - "href" : { - "type" : "string" - }, - - "template" : { - "type" : "string" - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-04/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET" - }, - - "enctype" : { - "type" : "string" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-04/hyper-schema#"} - } - }, - - "required" : ["rel", "href"], - - "dependencies" : { - "enctype" : "method" - } -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-04/schema b/node_modules/json-schema/draft-04/schema deleted file mode 100644 index 4231b16..0000000 --- a/node_modules/json-schema/draft-04/schema +++ /dev/null @@ -1,189 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-04/schema#", - "id" : "http://json-schema.org/draft-04/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : [ - { - "id" : "#simple-type", - "type" : "string", - "enum" : ["object", "array", "string", "number", "boolean", "null", "any"] - }, - "array" - ], - "items" : { - "type" : [ - {"$ref" : "#simple-type"}, - {"$ref" : "#"} - ] - }, - "uniqueItems" : true, - "default" : "any" - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "enum" : { - "type" : "array", - "minItems" : 1, - "uniqueItems" : true - }, - - "minimum" : { - "type" : "number" - }, - - "maximum" : { - "type" : "number" - }, - - "exclusiveMinimum" : { - "type" : "boolean", - "default" : false - }, - - "exclusiveMaximum" : { - "type" : "boolean", - "default" : false - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "exclusiveMinimum" : true, - "default" : 1 - }, - - "minLength" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer" - }, - - "pattern" : { - "type" : "string" - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalItems" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "minItems" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "default" : false - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "patternProperties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "minProperties" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxProperties" : { - "type" : "integer", - "minimum" : 0 - }, - - "required" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - - "dependencies" : { - "type" : "object", - "additionalProperties" : { - "type" : ["string", "array", {"$ref" : "#"}], - "items" : { - "type" : "string" - } - }, - "default" : {} - }, - - "id" : { - "type" : "string" - }, - - "$ref" : { - "type" : "string" - }, - - "$schema" : { - "type" : "string" - }, - - "title" : { - "type" : "string" - }, - - "description" : { - "type" : "string" - }, - - "default" : { - "type" : "any" - } - }, - - "dependencies" : { - "exclusiveMinimum" : "minimum", - "exclusiveMaximum" : "maximum" - }, - - "default" : {} -} \ No newline at end of file diff --git a/node_modules/json-schema/draft-zyp-json-schema-03.xml b/node_modules/json-schema/draft-zyp-json-schema-03.xml deleted file mode 100644 index cf60620..0000000 --- a/node_modules/json-schema/draft-zyp-json-schema-03.xml +++ /dev/null @@ -1,1120 +0,0 @@ - - - - - - - - - - - - - - - -]> - - - - - - - - - A JSON Media Type for Describing the Structure and Meaning of JSON Documents - - - SitePen (USA) -
    - - 530 Lytton Avenue - Palo Alto, CA 94301 - USA - - +1 650 968 8787 - kris@sitepen.com -
    -
    - - -
    - - - Calgary, AB - Canada - - gary.court@gmail.com -
    -
    - - - Internet Engineering Task Force - JSON - Schema - JavaScript - Object - Notation - Hyper Schema - Hypermedia - - - - JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", - a JSON based format for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - - -
    - - -
    - - JSON (JavaScript Object Notation) Schema is a JSON media type for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - -
    - -
    - - - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119. - -
    - - - -
    - - JSON Schema defines the media type "application/schema+json" for - describing the structure of other - JSON documents. JSON Schema is JSON-based and includes facilities - for describing the structure of JSON documents in terms of - allowable values, descriptions, and interpreting relations with other resources. - - - JSON Schema format is organized into several separate definitions. The first - definition is the core schema specification. This definition is primary - concerned with describing a JSON structure and specifying valid elements - in the structure. The second definition is the Hyper Schema specification - which is intended define elements in a structure that can be interpreted as - hyperlinks. - Hyper Schema builds on JSON Schema to describe the hyperlink structure of - other JSON documents and elements of interaction. This allows user agents to be able to successfully navigate - JSON documents based on their schemas. - - - Cumulatively JSON Schema acts as a meta-document that can be used to define the required type and constraints on - property values, as well as define the meaning of the property values - for the purpose of describing a resource and determining hyperlinks - within the representation. - -
    - An example JSON Schema that describes products might look like: - - - - - This schema defines the properties of the instance JSON documents, - the required properties (id, name, and price), as well as an optional - property (tags). This also defines the link relations of the instance - JSON documents. - -
    - -
    - - For this specification, schema will be used to denote a JSON Schema - definition, and an instance refers to a JSON value that the schema - will be describing and validating. - -
    - -
    - - The JSON Schema media type does not attempt to dictate the structure of JSON - representations that contain data, but rather provides a separate format - for flexibly communicating how a JSON representation should be - interpreted and validated, such that user agents can properly understand - acceptable structures and extrapolate hyperlink information - with the JSON document. It is acknowledged that JSON documents come - in a variety of structures, and JSON is unique in that the structure - of stored data structures often prescribes a non-ambiguous definite - JSON representation. Attempting to force a specific structure is generally - not viable, and therefore JSON Schema allows for a great flexibility - in the structure of the JSON data that it describes. - - - This specification is protocol agnostic. - The underlying protocol (such as HTTP) should sufficiently define the - semantics of the client-server interface, the retrieval of resource - representations linked to by JSON representations, and modification of - those resources. The goal of this - format is to sufficiently describe JSON structures such that one can - utilize existing information available in existing JSON - representations from a large variety of services that leverage a representational state transfer - architecture using existing protocols. - -
    -
    - -
    - - JSON Schema instances are correlated to their schema by the "describedby" - relation, where the schema is defined to be the target of the relation. - Instance representations may be of the "application/json" media type or - any other subtype. Consequently, dictating how an instance - representation should specify the relation to the schema is beyond the normative scope - of this document (since this document specifically defines the JSON - Schema media type, and no other), but it is recommended that instances - specify their schema so that user agents can interpret the instance - representation and messages may retain the self-descriptive - characteristic, avoiding the need for out-of-band information about - instance data. Two approaches are recommended for declaring the - relation to the schema that describes the meaning of a JSON instance's (or collection - of instances) structure. A MIME type parameter named - "profile" or a relation of "describedby" (which could be defined by a Link header) may be used: - -
    - - - -
    - - or if the content is being transferred by a protocol (such as HTTP) that - provides headers, a Link header can be used: - -
    - -; rel="describedby" -]]> - -
    - - Instances MAY specify multiple schemas, to indicate all the schemas that - are applicable to the data, and the data SHOULD be valid by all the schemas. - The instance data MAY have multiple schemas - that it is defined by (the instance data SHOULD be valid for those schemas). - Or if the document is a collection of instances, the collection MAY contain - instances from different schemas. When collections contain heterogeneous - instances, the "pathStart" attribute MAY be specified in the - schema to disambiguate which schema should be applied for each item in the - collection. However, ultimately, the mechanism for referencing a schema is up to the - media type of the instance documents (if they choose to specify that schemas - can be referenced). -
    - -
    - - JSON Schemas can themselves be described using JSON Schemas. - A self-describing JSON Schema for the core JSON Schema can - be found at http://json-schema.org/schema for the latest version or - http://json-schema.org/draft-03/schema for the draft-03 version. The hyper schema - self-description can be found at http://json-schema.org/hyper-schema - or http://json-schema.org/draft-03/hyper-schema. All schemas - used within a protocol with media type definitions - SHOULD include a MIME parameter that refers to the self-descriptive - hyper schema or another schema that extends this hyper schema: - -
    - - - -
    -
    -
    -
    - -
    - - A JSON Schema is a JSON Object that defines various attributes - (including usage and valid values) of a JSON value. JSON - Schema has recursive capabilities; there are a number of elements - in the structure that allow for nested JSON Schemas. - - -
    - An example JSON Schema definition could look like: - - - -
    - - - A JSON Schema object may have any of the following properties, called schema - attributes (all attributes are optional): - - -
    - - This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. - This attribute can take one of two forms: - - - - A string indicating a primitive or simple type. The following are acceptable string values: - - - Value MUST be a string. - Value MUST be a number, floating point numbers are allowed. - Value MUST be an integer, no floating point numbers are allowed. This is a subset of the number type. - Value MUST be a boolean. - Value MUST be an object. - Value MUST be an array. - Value MUST be null. Note this is mainly for purpose of being able use union types to define nullability. If this type is not included in a union, null values are not allowed (the primitives listed above do not allow nulls on their own). - Value MAY be of any type including null. - - - If the property is not defined or is not in this list, then any type of value is acceptable. - Other type values MAY be used for custom purposes, but minimal validators of the specification - implementation can allow any instance value on unknown type values. - - - - An array of two or more simple type definitions. Each item in the array MUST be a simple type definition or a schema. - The instance value is valid if it is of the same type as one of the simple type definitions, or valid by one of the schemas, in the array. - - - - -
    - For example, a schema that defines if an instance can be a string or a number would be: - - -
    -
    - -
    - This attribute is an object with property definitions that define the valid values of instance object property values. When the instance value is an object, the property values of the instance object MUST conform to the property definitions in this object. In this object, each property definition's value MUST be a schema, and the property's name MUST be the name of the instance property that it defines. The instance property value MUST be valid according to the schema from the property definition. Properties are considered unordered, the order of the instance properties MAY be in any order. -
    - -
    - This attribute is an object that defines the schema for a set of property names of an object instance. The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. -
    - -
    - This attribute defines a schema for all properties that are not explicitly defined in an object type definition. If specified, the value MUST be a schema or a boolean. If false is provided, no additional properties are allowed beyond the properties defined in the schema. The default value is an empty schema which allows any value for additional properties. -
    - -
    - This attribute defines the allowed items in an instance array, and MUST be a schema or an array of schemas. The default value is an empty schema which allows any value for items in the instance array. - When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. - When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST conform to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute using the same rules as "additionalProperties" for objects. -
    - -
    - This provides a definition for additional items in an array instance when tuple definitions of the items is provided. This can be false to indicate additional items in the array are not allowed, or it can be a schema that defines the schema of the additional items. -
    - -
    - This attribute indicates if the instance must have a value, and not be undefined. This is false by default, making the instance optional. -
    - -
    - This attribute is an object that defines the requirements of a property on an instance object. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). - - The dependency value can take one of two forms: - - - - If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. - If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. - - - If the dependency value is a schema, then the instance object MUST be valid against the schema. - - - -
    - -
    - This attribute defines the minimum value of the instance property when the type of the instance value is a number. -
    - -
    - This attribute defines the maximum value of the instance property when the type of the instance value is a number. -
    - -
    - This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. -
    - -
    - This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. -
    - -
    - This attribute defines the minimum number of values in an array when the array is the instance value. -
    - -
    - This attribute defines the maximum number of values in an array when the array is the instance value. -
    - -
    - This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). - - Two instance are consider equal if they are both of the same type and: - - - are null; or - are booleans/numbers/strings and have the same value; or - are arrays, contains the same number of items, and each item in the array is equal to the corresponding item in the other array; or - are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. - - -
    - -
    - When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 -
    - -
    - When the instance value is a string, this defines the minimum length of the string. -
    - -
    - When the instance value is a string, this defines the maximum length of the string. -
    - -
    - This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". -
    - -
    - This attribute defines the default value of the instance when the instance is undefined. -
    - -
    - This attribute is a string that provides a short description of the instance property. -
    - -
    - This attribute is a string that provides a full description of the of purpose the instance property. -
    - -
    - This property defines the type of data, content type, or microformat to be expected in the instance property values. A format attribute MAY be one of the values listed below, and if so, SHOULD adhere to the semantics describing for the format. A format SHOULD only be used to give meaning to primitive types (string, integer, number, or boolean). Validators MAY (but are not required to) validate that the instance values conform to a format. - - - The following formats are predefined: - - - This SHOULD be a date in ISO 8601 format of YYYY-MM-DDThh:mm:ssZ in UTC time. This is the recommended form of date/timestamp. - This SHOULD be a date in the format of YYYY-MM-DD. It is recommended that you use the "date-time" format instead of "date" unless you need to transfer only the date part. - This SHOULD be a time in the format of hh:mm:ss. It is recommended that you use the "date-time" format instead of "time" unless you need to transfer only the time part. - This SHOULD be the difference, measured in milliseconds, between the specified time and midnight, 00:00 of January 1, 1970 UTC. The value SHOULD be a number (integer or float). - A regular expression, following the regular expression specification from ECMA 262/Perl 5. - This is a CSS color (like "#FF0000" or "red"), based on CSS 2.1. - This is a CSS style definition (like "color: red; background-color:#FFF"), based on CSS 2.1. - This SHOULD be a phone number (format MAY follow E.123). - This value SHOULD be a URI. - This SHOULD be an email address. - This SHOULD be an ip version 4 address. - This SHOULD be an ip version 6 address. - This SHOULD be a host-name. - - - - Additional custom formats MAY be created. These custom formats MAY be expressed as an URI, and this URI MAY reference a schema of that format. -
    - -
    - This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. -
    - -
    - This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. -
    - -
    - The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. - - Conceptually, the behavior of extends can be seen as validating an - instance against all constraints in the extending schema as well as - the extended schema(s). More optimized implementations that merge - schemas are possible, but are not required. Some examples of using "extends": - -
    - - - -
    - -
    - - - -
    -
    -
    - -
    - - This attribute defines the current URI of this schema (this attribute is - effectively a "self" link). This URI MAY be relative or absolute. If - the URI is relative it is resolved against the current URI of the parent - schema it is contained in. If this schema is not contained in any - parent schema, the current URI of the parent schema is held to be the - URI under which this schema was addressed. If id is missing, the current URI of a schema is - defined to be that of the parent schema. The current URI of the schema - is also used to construct relative references such as for $ref. - -
    - -
    - - This attribute defines a URI of a schema that contains the full representation of this schema. - When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. - This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. - -
    - -
    - - This attribute defines a URI of a JSON Schema that is the schema of the current schema. - When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. - - - - A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. - Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. - -
    -
    - -
    - - The following attributes are specified in addition to those - attributes that already provided by the core schema with the specific - purpose of informing user agents of relations between resources based - on JSON data. Just as with JSON - schema attributes, all the attributes in hyper schemas are optional. - Therefore, an empty object is a valid (non-informative) schema, and - essentially describes plain JSON (no constraints on the structures). - Addition of attributes provides additive information for user agents. - - -
    - - The value of the links property MUST be an array, where each item - in the array is a link description object which describes the link - relations of the instances. - - -
    - - A link description object is used to describe link relations. In - the context of a schema, it defines the link relations of the - instances of the schema, and can be parameterized by the instance - values. The link description format can be used on its own in - regular (non-schema documents), and use of this format can - be declared by referencing the normative link description - schema as the the schema for the data structure that uses the - links. The URI of the normative link description schema is: - http://json-schema.org/links (latest version) or - http://json-schema.org/draft-03/links (draft-03 version). - - -
    - - The value of the "href" link description property - indicates the target URI of the related resource. The value - of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 - and MAY be a relative URI. The base URI to be used for relative resolution - SHOULD be the URI used to retrieve the instance object (not the schema) - when used within a schema. Also, when links are used within a schema, the URI - SHOULD be parametrized by the property values of the instance - object, if property values exist for the corresponding variables - in the template (otherwise they MAY be provided from alternate sources, like user input). - - - - Instance property values SHOULD be substituted into the URIs where - matching braces ('{', '}') are found surrounding zero or more characters, - creating an expanded URI. Instance property value substitutions are resolved - by using the text between the braces to denote the property name - from the instance to get the value to substitute. - -
    - For example, if an href value is defined: - - - - Then it would be resolved by replace the value of the "id" property value from the instance object. -
    - -
    - If the value of the "id" property was "45", the expanded URI would be: - - - -
    - - If matching braces are found with the string "@" (no quotes) between the braces, then the - actual instance value SHOULD be used to replace the braces, rather than a property value. - This should only be used in situations where the instance is a scalar (string, - boolean, or number), and not for objects or arrays. -
    -
    - -
    - - The value of the "rel" property indicates the name of the - relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. - - - - Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: - - - - If the relation value is "self", when this property is encountered in - the instance object, the object represents a resource and the instance object is - treated as a full representation of the target resource identified by - the specified URI. - - - - This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. - - - - This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. - - - - This relation indicates that the target of the link - SHOULD be treated as the root or the body of the representation for the - purposes of user agent interaction or fragment resolution. All other - properties of the instance objects can be regarded as meta-data - descriptions for the data. - - - - - - The following relations are applicable for schemas (the schema as the "from" resource in the relation): - - - This indicates the target resource that represents collection of instances of a schema. - This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). - - - - -
    - For example, if a schema is defined: - - - -
    - -
    - And if a collection of instance resource's JSON representation was retrieved: - - - -
    - - This would indicate that for the first item in the collection, its own - (self) URI would resolve to "/Resource/thing" and the first item's "up" - relation SHOULD be resolved to the resource at "/Resource/parent". - The "children" collection would be located at "/Resource/?upId=thing". -
    -
    - -
    - This property value is a schema that defines the expected structure of the JSON representation of the target of the link. -
    - -
    - - The following properties also apply to link definition objects, and - provide functionality analogous to HTML forms, in providing a - means for submitting extra (often user supplied) information to send to a server. - - -
    - - This attribute defines which method can be used to access the target resource. - In an HTTP environment, this would be "GET" or "POST" (other HTTP methods - such as "PUT" and "DELETE" have semantics that are clearly implied by - accessed resources, and do not need to be defined here). - This defaults to "GET". - -
    - -
    - - If present, this property indicates a query media type format that the server - supports for querying or posting to the collection of instances at the target - resource. The query can be - suffixed to the target URI to query the collection with - property-based constraints on the resources that SHOULD be returned from - the server or used to post data to the resource (depending on the method). - -
    - For example, with the following schema: - - - - This indicates that the client can query the server for instances that have a specific name. -
    - -
    - For example: - - - -
    - - If no enctype or method is specified, only the single URI specified by - the href property is defined. If the method is POST, "application/json" is - the default media type. -
    -
    - -
    - - This attribute contains a schema which defines the acceptable structure of the submitted - request (for a GET request, this schema would define the properties for the query string - and for a POST request, this would define the body). - -
    -
    -
    -
    - -
    - - This property indicates the fragment resolution protocol to use for - resolving fragment identifiers in URIs within the instance - representations. This applies to the instance object URIs and all - children of the instance object's URIs. The default fragment resolution - protocol is "slash-delimited", which is defined below. Other fragment - resolution protocols MAY be used, but are not defined in this document. - - - - The fragment identifier is based on RFC 2396, Sec 5, and defines the - mechanism for resolving references to entities within a document. - - -
    - - With the slash-delimited fragment resolution protocol, the fragment - identifier is interpreted as a series of property reference tokens that start with and - are delimited by the "/" character (\x2F). Each property reference token - is a series of unreserved or escaped URI characters. Each property - reference token SHOULD be interpreted, starting from the beginning of - the fragment identifier, as a path reference in the target JSON - structure. The final target value of the fragment can be determined by - starting with the root of the JSON structure from the representation of - the resource identified by the pre-fragment URI. If the target is a JSON - object, then the new target is the value of the property with the name - identified by the next property reference token in the fragment. If the - target is a JSON array, then the target is determined by finding the - item in array the array with the index defined by the next property - reference token (which MUST be a number). The target is successively - updated for each property reference token, until the entire fragment has - been traversed. - - - - Property names SHOULD be URI-encoded. In particular, any "/" in a - property name MUST be encoded to avoid being interpreted as a property - delimiter. - - - -
    - For example, for the following JSON representation: - - - -
    - -
    - The following fragment identifiers would be resolved: - - - -
    -
    -
    - -
    - - The dot-delimited fragment resolution protocol is the same as - slash-delimited fragment resolution protocol except that the "." character - (\x2E) is used as the delimiter between property names (instead of "/") and - the path does not need to start with a ".". For example, #.foo and #foo are a valid fragment - identifiers for referencing the value of the foo propery. - -
    -
    - -
    - This attribute indicates that the instance property SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. -
    - -
    - If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. -
    - -
    - - This attribute is a URI that defines what the instance's URI MUST start with in order to validate. - The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, - and is relative to the instance's URI. - - - - When multiple schemas have been referenced for an instance, the user agent - can determine if this schema is applicable for a particular instance by - determining if the URI of the instance begins with the the value of the "pathStart" - attribute. If the URI of the instance does not start with this URI, - or if another schema specifies a starting URI that is longer and also matches the - instance, this schema SHOULD NOT be applied to the instance. Any schema - that does not have a pathStart attribute SHOULD be considered applicable - to all the instances for which it is referenced. - -
    - -
    - This attribute defines the media type of the instance representations that this schema is defining. -
    -
    - -
    - - This specification is a sub-type of the JSON format, and - consequently the security considerations are generally the same as RFC 4627. - However, an additional issue is that when link relation of "self" - is used to denote a full representation of an object, the user agent - SHOULD NOT consider the representation to be the authoritative representation - of the resource denoted by the target URI if the target URI is not - equivalent to or a sub-path of the the URI used to request the resource - representation which contains the target URI with the "self" link. - -
    - For example, if a hyper schema was defined: - - - -
    - -
    - And a resource was requested from somesite.com: - - - -
    - -
    - With a response of: - - - -
    -
    -
    - -
    - The proposed MIME media type for JSON Schema is "application/schema+json". - Type name: application - Subtype name: schema+json - Required parameters: profile - - The value of the profile parameter SHOULD be a URI (relative or absolute) that - refers to the schema used to define the structure of this structure (the - meta-schema). Normally the value would be http://json-schema.org/draft-03/hyper-schema, - but it is allowable to use other schemas that extend the hyper schema's meta- - schema. - - Optional parameters: pretty - The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. - -
    - - This registry is maintained by IANA per RFC 4287 and this specification adds - four values: "full", "create", "instances", "root". New - assignments are subject to IESG Approval, as outlined in RFC 5226. - Requests should be made by email to IANA, which will then forward the - request to the IESG, requesting approval. - -
    -
    -
    - - - - - &rfc2045; - &rfc2119; - &rfc2396; - &rfc3339; - &rfc3986; - &rfc4287; - - - &rfc2616; - &rfc4627; - &rfc5226; - &iddiscovery; - &uritemplate; - &linkheader; - &html401; - &css21; - - -
    - - - - - Added example and verbiage to "extends" attribute. - Defined slash-delimited to use a leading slash. - Made "root" a relation instead of an attribute. - Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). - Added more explanation of nullability. - Removed "alternate" attribute. - Upper cased many normative usages of must, may, and should. - Replaced the link submission "properties" attribute to "schema" attribute. - Replaced "optional" attribute with "required" attribute. - Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. - Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. - Replaced "requires" attribute with "dependencies" attribute. - Moved "contentEncoding" attribute to hyper schema. - Added "additionalItems" attribute. - Added "id" attribute. - Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. - Added "patternProperties" attribute. - Schema URIs are now namespace versioned. - Added "$ref" and "$schema" attributes. - - - - - - Replaced "maxDecimal" attribute with "divisibleBy" attribute. - Added slash-delimited fragment resolution protocol and made it the default. - Added language about using links outside of schemas by referencing its normative URI. - Added "uniqueItems" attribute. - Added "targetSchema" attribute to link description object. - - - - - - Fixed category and updates from template. - - - - - - Initial draft. - - - - -
    - -
    - - - Should we give a preference to MIME headers over Link headers (or only use one)? - Should "root" be a MIME parameter? - Should "format" be renamed to "mediaType" or "contentType" to reflect the usage MIME media types that are allowed? - How should dates be handled? - - -
    -
    -
    diff --git a/node_modules/json-schema/draft-zyp-json-schema-04.xml b/node_modules/json-schema/draft-zyp-json-schema-04.xml deleted file mode 100644 index 8ede6bf..0000000 --- a/node_modules/json-schema/draft-zyp-json-schema-04.xml +++ /dev/null @@ -1,1072 +0,0 @@ - - - - - - - - - - - - - - -]> - - - - - - - - - A JSON Media Type for Describing the Structure and Meaning of JSON Documents - - - SitePen (USA) -
    - - 530 Lytton Avenue - Palo Alto, CA 94301 - USA - - +1 650 968 8787 - kris@sitepen.com -
    -
    - - -
    - - - Calgary, AB - Canada - - gary.court@gmail.com -
    -
    - - - Internet Engineering Task Force - JSON - Schema - JavaScript - Object - Notation - Hyper Schema - Hypermedia - - - - JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", - a JSON based format for defining the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - - -
    - - -
    - - JSON (JavaScript Object Notation) Schema is a JSON media type for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - -
    - -
    - - - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119. - - - - The terms "JSON", "JSON text", "JSON value", "member", "element", "object", - "array", "number", "string", "boolean", "true", "false", and "null" in this - document are to be interpreted as defined in RFC 4627. - - - - This specification also uses the following defined terms: - - - A JSON Schema object. - Equivalent to "JSON value" as defined in RFC 4627. - Equivalent to "member" as defined in RFC 4627. - Equivalent to "element" as defined in RFC 4627. - A property of a JSON Schema object. - - -
    - -
    - - JSON Schema defines the media type "application/schema+json" for - describing the structure of JSON text. JSON Schemas are also written in JSON and includes facilities - for describing the structure of JSON in terms of - allowable values, descriptions, and interpreting relations with other resources. - - - This document is organized into several separate definitions. The first - definition is the core schema specification. This definition is primary - concerned with describing a JSON structure and specifying valid elements - in the structure. The second definition is the Hyper Schema specification - which is intended to define elements in a structure that can be interpreted as - hyperlinks. - Hyper Schema builds on JSON Schema to describe the hyperlink structure of - JSON values. This allows user agents to be able to successfully navigate - documents containing JSON based on their schemas. - - - Cumulatively JSON Schema acts as meta-JSON that can be used to define the - required type and constraints on JSON values, as well as define the meaning - of the JSON values for the purpose of describing a resource and determining - hyperlinks within the representation. - -
    - An example JSON Schema that describes products might look like: - - - - - This schema defines the properties of the instance, - the required properties (id, name, and price), as well as an optional - property (tags). This also defines the link relations of the instance. - -
    - -
    - - The JSON Schema media type does not attempt to dictate the structure of JSON - values that contain data, but rather provides a separate format - for flexibly communicating how a JSON value should be - interpreted and validated, such that user agents can properly understand - acceptable structures and extrapolate hyperlink information - from the JSON. It is acknowledged that JSON values come - in a variety of structures, and JSON is unique in that the structure - of stored data structures often prescribes a non-ambiguous definite - JSON representation. Attempting to force a specific structure is generally - not viable, and therefore JSON Schema allows for a great flexibility - in the structure of the JSON data that it describes. - - - This specification is protocol agnostic. - The underlying protocol (such as HTTP) should sufficiently define the - semantics of the client-server interface, the retrieval of resource - representations linked to by JSON representations, and modification of - those resources. The goal of this - format is to sufficiently describe JSON structures such that one can - utilize existing information available in existing JSON - representations from a large variety of services that leverage a representational state transfer - architecture using existing protocols. - -
    -
    - -
    - - JSON values are correlated to their schema by the "describedby" - relation, where the schema is the target of the relation. - JSON values MUST be of the "application/json" media type or - any other subtype. Consequently, dictating how a JSON value should - specify the relation to the schema is beyond the normative scope - of this document since this document specifically defines the JSON - Schema media type, and no other. It is RECOMMNENDED that JSON values - specify their schema so that user agents can interpret the instance - and retain the self-descriptive characteristics. This avoides the need for out-of-band information about - instance data. Two approaches are recommended for declaring the - relation to the schema that describes the meaning of a JSON instance's (or collection - of instances) structure. A MIME type parameter named - "profile" or a relation of "describedby" (which could be specified by a Link header) may be used: - -
    - - - -
    - - or if the content is being transferred by a protocol (such as HTTP) that - provides headers, a Link header can be used: - -
    - -; rel="describedby" -]]> - -
    - - Instances MAY specify multiple schemas, to indicate all the schemas that - are applicable to the data, and the data SHOULD be valid by all the schemas. - The instance data MAY have multiple schemas - that it is described by (the instance data SHOULD be valid for those schemas). - Or if the document is a collection of instances, the collection MAY contain - instances from different schemas. The mechanism for referencing a schema is - determined by the media type of the instance (if it provides a method for - referencing schemas). -
    - -
    - - JSON Schemas can themselves be described using JSON Schemas. - A self-describing JSON Schema for the core JSON Schema can - be found at http://json-schema.org/schema for the latest version or - http://json-schema.org/draft-04/schema for the draft-04 version. The hyper schema - self-description can be found at http://json-schema.org/hyper-schema - or http://json-schema.org/draft-04/hyper-schema. All schemas - used within a protocol with a media type specified SHOULD include a MIME parameter that refers to the self-descriptive - hyper schema or another schema that extends this hyper schema: - -
    - - - -
    -
    -
    -
    - -
    - - A JSON Schema is a JSON object that defines various attributes - (including usage and valid values) of a JSON value. JSON - Schema has recursive capabilities; there are a number of elements - in the structure that allow for nested JSON Schemas. - - -
    - An example JSON Schema could look like: - - - -
    - - - A JSON Schema object MAY have any of the following optional properties: - - - - - -
    - - This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. - This attribute can take one of two forms: - - - - A string indicating a primitive or simple type. The string MUST be one of the following values: - - - Instance MUST be an object. - Instance MUST be an array. - Instance MUST be a string. - Instance MUST be a number, including floating point numbers. - Instance MUST be the JSON literal "true" or "false". - Instance MUST be the JSON literal "null". Note that without this type, null values are not allowed. - Instance MAY be of any type, including null. - - - - - An array of one or more simple or schema types. - The instance value is valid if it is of the same type as one of the simple types, or valid by one of the schemas, in the array. - - - - If this attribute is not specified, then all value types are accepted. - - -
    - For example, a schema that defines if an instance can be a string or a number would be: - - -
    -
    - -
    - - This attribute is an object with properties that specify the schemas for the properties of the instance object. - In this attribute's object, each property value MUST be a schema. - When the instance value is an object, the value of the instance's properties MUST be valid according to the schemas with the same property names specified in this attribute. - Objects are unordered, so therefore the order of the instance properties or attribute properties MUST NOT determine validation success. - -
    - -
    - - This attribute is an object that defines the schema for a set of property names of an object instance. - The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. - If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. - -
    - -
    - This attribute specifies how any instance property that is not explicitly defined by either the "properties" or "patternProperties" attributes (hereafter referred to as "additional properties") is handled. If specified, the value MUST be a schema or a boolean. - If a schema is provided, then all additional properties MUST be valid according to the schema. - If false is provided, then no additional properties are allowed. - The default value is an empty schema, which allows any value for additional properties. -
    - -
    - This attribute provides the allowed items in an array instance. If specified, this attribute MUST be a schema or an array of schemas. - When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. - When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST be valid according to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute the same way as "additionalProperties" for objects is. -
    - -
    - This attribute specifies how any item in the array instance that is not explicitly defined by "items" (hereafter referred to as "additional items") is handled. If specified, the value MUST be a schema or a boolean. - If a schema is provided: - - If the "items" attribute is unspecified, then all items in the array instance must be valid against this schema. - If the "items" attribute is a schema, then this attribute is ignored. - If the "items" attribute is an array (during tuple typing), then any additional items MUST be valid against this schema. - - - If false is provided, then any additional items in the array are not allowed. - The default value is an empty schema, which allows any value for additional items. -
    - -
    - This attribute is an array of strings that defines all the property names that must exist on the object instance. -
    - -
    - This attribute is an object that specifies the requirements of a property on an object instance. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). - - The dependency value can take one of two forms: - - - - If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. - If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. - - - If the dependency value is a schema, then the instance object MUST be valid against the schema. - - - -
    - -
    - This attribute defines the minimum value of the instance property when the type of the instance value is a number. -
    - -
    - This attribute defines the maximum value of the instance property when the type of the instance value is a number. -
    - -
    - This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. -
    - -
    - This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. -
    - -
    - This attribute defines the minimum number of values in an array when the array is the instance value. -
    - -
    - This attribute defines the maximum number of values in an array when the array is the instance value. -
    - -
    - This attribute defines the minimum number of properties required on an object instance. -
    - -
    - This attribute defines the maximum number of properties the object instance can have. -
    - -
    - This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). - - Two instance are consider equal if they are both of the same type and: - - - are null; or - are booleans/numbers/strings and have the same value; or - are arrays, contains the same number of items, and each item in the array is equal to the item at the corresponding index in the other array; or - are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. - - -
    - -
    - When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 -
    - -
    - When the instance value is a string, this defines the minimum length of the string. -
    - -
    - When the instance value is a string, this defines the maximum length of the string. -
    - -
    - This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". -
    - -
    - This attribute defines the default value of the instance when the instance is undefined. -
    - -
    - This attribute is a string that provides a short description of the instance property. -
    - -
    - This attribute is a string that provides a full description of the of purpose the instance property. -
    - -
    - This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. -
    - -
    - This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. -
    - -
    - The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. - - Conceptually, the behavior of extends can be seen as validating an - instance against all constraints in the extending schema as well as - the extended schema(s). More optimized implementations that merge - schemas are possible, but are not required. Some examples of using "extends": - -
    - - - -
    - -
    - - - -
    -
    -
    - -
    - - This attribute defines the current URI of this schema (this attribute is - effectively a "self" link). This URI MAY be relative or absolute. If - the URI is relative it is resolved against the current URI of the parent - schema it is contained in. If this schema is not contained in any - parent schema, the current URI of the parent schema is held to be the - URI under which this schema was addressed. If id is missing, the current URI of a schema is - defined to be that of the parent schema. The current URI of the schema - is also used to construct relative references such as for $ref. - -
    - -
    - - This attribute defines a URI of a schema that contains the full representation of this schema. - When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. - This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. - -
    - -
    - - This attribute defines a URI of a JSON Schema that is the schema of the current schema. - When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. - - - - A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. - Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. - -
    -
    - -
    - - The following attributes are specified in addition to those - attributes that already provided by the core schema with the specific - purpose of informing user agents of relations between resources based - on JSON data. Just as with JSON - schema attributes, all the attributes in hyper schemas are optional. - Therefore, an empty object is a valid (non-informative) schema, and - essentially describes plain JSON (no constraints on the structures). - Addition of attributes provides additive information for user agents. - - -
    - - The value of the links property MUST be an array, where each item - in the array is a link description object which describes the link - relations of the instances. - - - - -
    - - A link description object is used to describe link relations. In - the context of a schema, it defines the link relations of the - instances of the schema, and can be parameterized by the instance - values. The link description format can be used without JSON Schema, - and use of this format can - be declared by referencing the normative link description - schema as the the schema for the data structure that uses the - links. The URI of the normative link description schema is: - http://json-schema.org/links (latest version) or - http://json-schema.org/draft-04/links (draft-04 version). - - -
    - - The value of the "href" link description property - indicates the target URI of the related resource. The value - of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 - and MAY be a relative URI. The base URI to be used for relative resolution - SHOULD be the URI used to retrieve the instance object (not the schema) - when used within a schema. Also, when links are used within a schema, the URI - SHOULD be parametrized by the property values of the instance - object, if property values exist for the corresponding variables - in the template (otherwise they MAY be provided from alternate sources, like user input). - - - - Instance property values SHOULD be substituted into the URIs where - matching braces ('{', '}') are found surrounding zero or more characters, - creating an expanded URI. Instance property value substitutions are resolved - by using the text between the braces to denote the property name - from the instance to get the value to substitute. - -
    - For example, if an href value is defined: - - - - Then it would be resolved by replace the value of the "id" property value from the instance object. -
    - -
    - If the value of the "id" property was "45", the expanded URI would be: - - - -
    - - If matching braces are found with the string "@" (no quotes) between the braces, then the - actual instance value SHOULD be used to replace the braces, rather than a property value. - This should only be used in situations where the instance is a scalar (string, - boolean, or number), and not for objects or arrays. -
    -
    - -
    - - The value of the "rel" property indicates the name of the - relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. - - - - Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: - - - - If the relation value is "self", when this property is encountered in - the instance object, the object represents a resource and the instance object is - treated as a full representation of the target resource identified by - the specified URI. - - - - This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. - - - - This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. - - - - This relation indicates that the target of the link - SHOULD be treated as the root or the body of the representation for the - purposes of user agent interaction or fragment resolution. All other - properties of the instance objects can be regarded as meta-data - descriptions for the data. - - - - - - The following relations are applicable for schemas (the schema as the "from" resource in the relation): - - - This indicates the target resource that represents collection of instances of a schema. - This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). - - - - -
    - For example, if a schema is defined: - - - -
    - -
    - And if a collection of instance resource's JSON representation was retrieved: - - - -
    - - This would indicate that for the first item in the collection, its own - (self) URI would resolve to "/Resource/thing" and the first item's "up" - relation SHOULD be resolved to the resource at "/Resource/parent". - The "children" collection would be located at "/Resource/?upId=thing". -
    -
    - -
    - This property value is a string that defines the templating language used in the "href" attribute. If no templating language is defined, then the default Link Description Object templating langauge is used. -
    - -
    - This property value is a schema that defines the expected structure of the JSON representation of the target of the link. -
    - -
    - - The following properties also apply to link definition objects, and - provide functionality analogous to HTML forms, in providing a - means for submitting extra (often user supplied) information to send to a server. - - -
    - - This attribute defines which method can be used to access the target resource. - In an HTTP environment, this would be "GET" or "POST" (other HTTP methods - such as "PUT" and "DELETE" have semantics that are clearly implied by - accessed resources, and do not need to be defined here). - This defaults to "GET". - -
    - -
    - - If present, this property indicates a query media type format that the server - supports for querying or posting to the collection of instances at the target - resource. The query can be - suffixed to the target URI to query the collection with - property-based constraints on the resources that SHOULD be returned from - the server or used to post data to the resource (depending on the method). - -
    - For example, with the following schema: - - - - This indicates that the client can query the server for instances that have a specific name. -
    - -
    - For example: - - - -
    - - If no enctype or method is specified, only the single URI specified by - the href property is defined. If the method is POST, "application/json" is - the default media type. -
    -
    - -
    - - This attribute contains a schema which defines the acceptable structure of the submitted - request (for a GET request, this schema would define the properties for the query string - and for a POST request, this would define the body). - -
    -
    -
    -
    - -
    - - This property indicates the fragment resolution protocol to use for - resolving fragment identifiers in URIs within the instance - representations. This applies to the instance object URIs and all - children of the instance object's URIs. The default fragment resolution - protocol is "json-pointer", which is defined below. Other fragment - resolution protocols MAY be used, but are not defined in this document. - - - - The fragment identifier is based on RFC 3986, Sec 5, and defines the - mechanism for resolving references to entities within a document. - - -
    - The "json-pointer" fragment resolution protocol uses a JSON Pointer to resolve fragment identifiers in URIs within instance representations. -
    -
    - - - -
    - This attribute indicates that the instance value SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. -
    - -
    - If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. -
    - -
    - - This attribute is a URI that defines what the instance's URI MUST start with in order to validate. - The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, - and is relative to the instance's URI. - - - - When multiple schemas have been referenced for an instance, the user agent - can determine if this schema is applicable for a particular instance by - determining if the URI of the instance begins with the the value of the "pathStart" - attribute. If the URI of the instance does not start with this URI, - or if another schema specifies a starting URI that is longer and also matches the - instance, this schema SHOULD NOT be applied to the instance. Any schema - that does not have a pathStart attribute SHOULD be considered applicable - to all the instances for which it is referenced. - -
    - -
    - This attribute defines the media type of the instance representations that this schema is defining. -
    -
    - -
    - - This specification is a sub-type of the JSON format, and - consequently the security considerations are generally the same as RFC 4627. - However, an additional issue is that when link relation of "self" - is used to denote a full representation of an object, the user agent - SHOULD NOT consider the representation to be the authoritative representation - of the resource denoted by the target URI if the target URI is not - equivalent to or a sub-path of the the URI used to request the resource - representation which contains the target URI with the "self" link. - -
    - For example, if a hyper schema was defined: - - - -
    - -
    - And a resource was requested from somesite.com: - - - -
    - -
    - With a response of: - - - -
    -
    -
    - -
    - The proposed MIME media type for JSON Schema is "application/schema+json". - Type name: application - Subtype name: schema+json - Required parameters: profile - - The value of the profile parameter SHOULD be a URI (relative or absolute) that - refers to the schema used to define the structure of this structure (the - meta-schema). Normally the value would be http://json-schema.org/draft-04/hyper-schema, - but it is allowable to use other schemas that extend the hyper schema's meta- - schema. - - Optional parameters: pretty - The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. - -
    - - This registry is maintained by IANA per RFC 4287 and this specification adds - four values: "full", "create", "instances", "root". New - assignments are subject to IESG Approval, as outlined in RFC 5226. - Requests should be made by email to IANA, which will then forward the - request to the IESG, requesting approval. - -
    -
    -
    - - - - - &rfc2045; - &rfc2119; - &rfc3339; - &rfc3986; - &rfc4287; - - - JSON Pointer - - ForgeRock US, Inc. - - - SitePen (USA) - - - - - - - &rfc2616; - &rfc4627; - &rfc5226; - &iddiscovery; - &uritemplate; - &linkheader; - &html401; - &css21; - - -
    - - - - - Changed "required" attribute to an array of strings. - Removed "format" attribute. - Added "minProperties" and "maxProperties" attributes. - Replaced "slash-delimited" fragment resolution with "json-pointer". - Added "template" LDO attribute. - Removed irrelevant "Open Issues" section. - Merged Conventions and Terminology sections. - Defined terms used in specification. - Removed "integer" type in favor of {"type":"number", "divisibleBy":1}. - Restricted "type" to only the core JSON types. - Improved wording of many sections. - - - - - - Added example and verbiage to "extends" attribute. - Defined slash-delimited to use a leading slash. - Made "root" a relation instead of an attribute. - Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). - Added more explanation of nullability. - Removed "alternate" attribute. - Upper cased many normative usages of must, may, and should. - Replaced the link submission "properties" attribute to "schema" attribute. - Replaced "optional" attribute with "required" attribute. - Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. - Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. - Replaced "requires" attribute with "dependencies" attribute. - Moved "contentEncoding" attribute to hyper schema. - Added "additionalItems" attribute. - Added "id" attribute. - Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. - Added "patternProperties" attribute. - Schema URIs are now namespace versioned. - Added "$ref" and "$schema" attributes. - - - - - - Replaced "maxDecimal" attribute with "divisibleBy" attribute. - Added slash-delimited fragment resolution protocol and made it the default. - Added language about using links outside of schemas by referencing its normative URI. - Added "uniqueItems" attribute. - Added "targetSchema" attribute to link description object. - - - - - - Fixed category and updates from template. - - - - - - Initial draft. - - - - -
    -
    -
    diff --git a/node_modules/json-schema/lib/links.js b/node_modules/json-schema/lib/links.js deleted file mode 100644 index 8a87f02..0000000 --- a/node_modules/json-schema/lib/links.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JSON Schema link handler - * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - * Licensed under the MIT (MIT-LICENSE.txt) license. - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define([], function () { - return factory(); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals - root.jsonSchemaLinks = factory(); - } -}(this, function () {// setup primitive classes to be JSON Schema types -var exports = {}; -exports.cacheLinks = true; -exports.getLink = function(relation, instance, schema){ - // gets the URI of the link for the given relation based on the instance and schema - // for example: - // getLink( - // "brother", - // {"brother_id":33}, - // {links:[{rel:"brother", href:"Brother/{brother_id}"}]}) -> - // "Brother/33" - var links = schema.__linkTemplates; - if(!links){ - links = {}; - var schemaLinks = schema.links; - if(schemaLinks && schemaLinks instanceof Array){ - schemaLinks.forEach(function(link){ - /* // TODO: allow for multiple same-name relations - if(links[link.rel]){ - if(!(links[link.rel] instanceof Array)){ - links[link.rel] = [links[link.rel]]; - } - }*/ - links[link.rel] = link.href; - }); - } - if(exports.cacheLinks){ - schema.__linkTemplates = links; - } - } - var linkTemplate = links[relation]; - return linkTemplate && exports.substitute(linkTemplate, instance); -}; - -exports.substitute = function(linkTemplate, instance){ - return linkTemplate.replace(/\{([^\}]*)\}/g, function(t, property){ - var value = instance[decodeURIComponent(property)]; - if(value instanceof Array){ - // the value is an array, it should produce a URI like /Table/(4,5,8) and store.get() should handle that as an array of values - return '(' + value.join(',') + ')'; - } - return value; - }); -}; -return exports; -})); \ No newline at end of file diff --git a/node_modules/json-schema/lib/validate.js b/node_modules/json-schema/lib/validate.js deleted file mode 100644 index e4dc151..0000000 --- a/node_modules/json-schema/lib/validate.js +++ /dev/null @@ -1,273 +0,0 @@ -/** - * JSONSchema Validator - Validates JavaScript objects using JSON Schemas - * (http://www.json.com/json-schema-proposal/) - * - * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - * Licensed under the MIT (MIT-LICENSE.txt) license. -To use the validator call the validate function with an instance object and an optional schema object. -If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), -that schema will be used to validate and the schema parameter is not necessary (if both exist, -both validations will occur). -The validate method will return an array of validation errors. If there are no errors, then an -empty list will be returned. A validation error will have two properties: -"property" which indicates which property had the error -"message" which indicates what the error was - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define([], function () { - return factory(); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals - root.jsonSchema = factory(); - } -}(this, function () {// setup primitive classes to be JSON Schema types -var exports = validate -exports.Integer = {type:"integer"}; -var primitiveConstructors = { - String: String, - Boolean: Boolean, - Number: Number, - Object: Object, - Array: Array, - Date: Date -} -exports.validate = validate; -function validate(/*Any*/instance,/*Object*/schema) { - // Summary: - // To use the validator call JSONSchema.validate with an instance object and an optional schema object. - // If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), - // that schema will be used to validate and the schema parameter is not necessary (if both exist, - // both validations will occur). - // The validate method will return an object with two properties: - // valid: A boolean indicating if the instance is valid by the schema - // errors: An array of validation errors. If there are no errors, then an - // empty list will be returned. A validation error will have two properties: - // property: which indicates which property had the error - // message: which indicates what the error was - // - return validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false}); - }; -exports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) { - // Summary: - // The checkPropertyChange method will check to see if an value can legally be in property with the given schema - // This is slightly different than the validate method in that it will fail if the schema is readonly and it will - // not check for self-validation, it is assumed that the passed in value is already internally valid. - // The checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for - // information. - // - return validate(value, schema, {changing: property || "property"}); - }; -var validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) { - - if (!options) options = {}; - var _changing = options.changing; - - function getType(schema){ - return schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase()); - } - var errors = []; - // validate a value against a property definition - function checkProp(value, schema, path,i){ - - var l; - path += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i; - function addError(message){ - errors.push({property:path,message:message}); - } - - if((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){ - if(typeof schema == 'function'){ - if(!(value instanceof schema)){ - addError("is not an instance of the class/constructor " + schema.name); - } - }else if(schema){ - addError("Invalid schema/property definition " + schema); - } - return null; - } - if(_changing && schema.readonly){ - addError("is a readonly field, it can not be changed"); - } - if(schema['extends']){ // if it extends another schema, it must pass that schema as well - checkProp(value,schema['extends'],path,i); - } - // validate a value against a type definition - function checkType(type,value){ - if(type){ - if(typeof type == 'string' && type != 'any' && - (type == 'null' ? value !== null : typeof value != type) && - !(value instanceof Array && type == 'array') && - !(value instanceof Date && type == 'date') && - !(type == 'integer' && value%1===0)){ - return [{property:path,message:(typeof value) + " value found, but a " + type + " is required"}]; - } - if(type instanceof Array){ - var unionErrors=[]; - for(var j = 0; j < type.length; j++){ // a union type - if(!(unionErrors=checkType(type[j],value)).length){ - break; - } - } - if(unionErrors.length){ - return unionErrors; - } - }else if(typeof type == 'object'){ - var priorErrors = errors; - errors = []; - checkProp(value,type,path); - var theseErrors = errors; - errors = priorErrors; - return theseErrors; - } - } - return []; - } - if(value === undefined){ - if(schema.required){ - addError("is missing and it is required"); - } - }else{ - errors = errors.concat(checkType(getType(schema),value)); - if(schema.disallow && !checkType(schema.disallow,value).length){ - addError(" disallowed value was matched"); - } - if(value !== null){ - if(value instanceof Array){ - if(schema.items){ - var itemsIsArray = schema.items instanceof Array; - var propDef = schema.items; - for (i = 0, l = value.length; i < l; i += 1) { - if (itemsIsArray) - propDef = schema.items[i]; - if (options.coerce) - value[i] = options.coerce(value[i], propDef); - errors.concat(checkProp(value[i],propDef,path,i)); - } - } - if(schema.minItems && value.length < schema.minItems){ - addError("There must be a minimum of " + schema.minItems + " in the array"); - } - if(schema.maxItems && value.length > schema.maxItems){ - addError("There must be a maximum of " + schema.maxItems + " in the array"); - } - }else if(schema.properties || schema.additionalProperties){ - errors.concat(checkObj(value, schema.properties, path, schema.additionalProperties)); - } - if(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){ - addError("does not match the regex pattern " + schema.pattern); - } - if(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){ - addError("may only be " + schema.maxLength + " characters long"); - } - if(schema.minLength && typeof value == 'string' && value.length < schema.minLength){ - addError("must be at least " + schema.minLength + " characters long"); - } - if(typeof schema.minimum !== undefined && typeof value == typeof schema.minimum && - schema.minimum > value){ - addError("must have a minimum value of " + schema.minimum); - } - if(typeof schema.maximum !== undefined && typeof value == typeof schema.maximum && - schema.maximum < value){ - addError("must have a maximum value of " + schema.maximum); - } - if(schema['enum']){ - var enumer = schema['enum']; - l = enumer.length; - var found; - for(var j = 0; j < l; j++){ - if(enumer[j]===value){ - found=1; - break; - } - } - if(!found){ - addError("does not have a value in the enumeration " + enumer.join(", ")); - } - } - if(typeof schema.maxDecimal == 'number' && - (value.toString().match(new RegExp("\\.[0-9]{" + (schema.maxDecimal + 1) + ",}")))){ - addError("may only have " + schema.maxDecimal + " digits of decimal places"); - } - } - } - return null; - } - // validate an object against a schema - function checkObj(instance,objTypeDef,path,additionalProp){ - - if(typeof objTypeDef =='object'){ - if(typeof instance != 'object' || instance instanceof Array){ - errors.push({property:path,message:"an object is required"}); - } - - for(var i in objTypeDef){ - if(objTypeDef.hasOwnProperty(i)){ - var value = instance[i]; - // skip _not_ specified properties - if (value === undefined && options.existingOnly) continue; - var propDef = objTypeDef[i]; - // set default - if(value === undefined && propDef["default"]){ - value = instance[i] = propDef["default"]; - } - if(options.coerce && i in instance){ - value = instance[i] = options.coerce(value, propDef); - } - checkProp(value,propDef,path,i); - } - } - } - for(i in instance){ - if(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){ - if (options.filter) { - delete instance[i]; - continue; - } else { - errors.push({property:path,message:(typeof value) + "The property " + i + - " is not defined in the schema and the schema does not allow additional properties"}); - } - } - var requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires; - if(requires && !(requires in instance)){ - errors.push({property:path,message:"the presence of the property " + i + " requires that " + requires + " also be present"}); - } - value = instance[i]; - if(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){ - if(options.coerce){ - value = instance[i] = options.coerce(value, additionalProp); - } - checkProp(value,additionalProp,path,i); - } - if(!_changing && value && value.$schema){ - errors = errors.concat(checkProp(value,value.$schema,path,i)); - } - } - return errors; - } - if(schema){ - checkProp(instance,schema,'',_changing || ''); - } - if(!_changing && instance && instance.$schema){ - checkProp(instance,instance.$schema,'',''); - } - return {valid:!errors.length,errors:errors}; -}; -exports.mustBeValid = function(result){ - // summary: - // This checks to ensure that the result is valid and will throw an appropriate error message if it is not - // result: the result returned from checkPropertyChange or validate - if(!result.valid){ - throw new TypeError(result.errors.map(function(error){return "for property " + error.property + ': ' + error.message;}).join(", \n")); - } -} - -return exports; -})); diff --git a/node_modules/json-schema/package.json b/node_modules/json-schema/package.json deleted file mode 100644 index 5522ac9..0000000 --- a/node_modules/json-schema/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "json-schema@0.2.3", - "/Users/jbaylina/git/MVP/node_modules/jsprim" - ] - ], - "_from": "json-schema@0.2.3", - "_id": "json-schema@0.2.3", - "_inCache": true, - "_installable": true, - "_location": "/json-schema", - "_nodeVersion": "6.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/json-schema-0.2.3.tgz_1473699189380_0.7420965158380568" - }, - "_npmUser": { - "email": "kriszyp@gmail.com", - "name": "kriszyp" - }, - "_npmVersion": "3.8.9", - "_phantomChildren": {}, - "_requested": { - "name": "json-schema", - "raw": "json-schema@0.2.3", - "rawSpec": "0.2.3", - "scope": null, - "spec": "0.2.3", - "type": "version" - }, - "_requiredBy": [ - "/jsprim" - ], - "_resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "_shasum": "b480c892e59a2f05954ce727bd3f2a4e882f9e13", - "_shrinkwrap": null, - "_spec": "json-schema@0.2.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/jsprim", - "author": { - "name": "Kris Zyp" - }, - "bugs": { - "url": "https://github.com/kriszyp/json-schema/issues" - }, - "dependencies": {}, - "description": "JSON Schema validation and specifications", - "devDependencies": { - "vows": "*" - }, - "directories": { - "lib": "./lib" - }, - "dist": { - "shasum": "b480c892e59a2f05954ce727bd3f2a4e882f9e13", - "tarball": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" - }, - "gitHead": "07ae2c618b5f581dbc108e065f4f95dcf0a1d85f", - "homepage": "https://github.com/kriszyp/json-schema#readme", - "keywords": [ - "json", - "schema" - ], - "licenses": [ - { - "type": "AFLv2.1", - "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43" - }, - { - "type": "BSD", - "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13" - } - ], - "main": "./lib/validate.js", - "maintainers": [ - { - "email": "kriszyp@gmail.com", - "name": "kriszyp" - } - ], - "name": "json-schema", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/kriszyp/json-schema.git" - }, - "scripts": { - "test": "echo TESTS DISABLED vows --spec test/*.js" - }, - "version": "0.2.3" -} diff --git a/node_modules/json-schema/test/tests.js b/node_modules/json-schema/test/tests.js deleted file mode 100644 index 2938aea..0000000 --- a/node_modules/json-schema/test/tests.js +++ /dev/null @@ -1,95 +0,0 @@ -var assert = require('assert'); -var vows = require('vows'); -var path = require('path'); -var fs = require('fs'); - -var validate = require('../lib/validate').validate; - - -var revision = 'draft-03'; -var schemaRoot = path.join(__dirname, '..', revision); -var schemaNames = ['schema', 'hyper-schema', 'links', 'json-ref' ]; -var schemas = {}; - -schemaNames.forEach(function(name) { - var file = path.join(schemaRoot, name); - schemas[name] = loadSchema(file); -}); - -schemaNames.forEach(function(name) { - var s, n = name+'-nsd', f = path.join(schemaRoot, name); - schemas[n] = loadSchema(f); - s = schemas[n]; - delete s['$schema']; -}); - -function loadSchema(path) { - var data = fs.readFileSync(path, 'utf-8'); - var schema = JSON.parse(data); - return schema; -} - -function resultIsValid() { - return function(result) { - assert.isObject(result); - //assert.isBoolean(result.valid); - assert.equal(typeof(result.valid), 'boolean'); - assert.isArray(result.errors); - for (var i = 0; i < result.errors.length; i++) { - assert.notEqual(result.errors[i], null, 'errors['+i+'] is null'); - } - } -} - -function assertValidates(doc, schema) { - var context = {}; - - context[': validate('+doc+', '+schema+')'] = { - topic: validate(schemas[doc], schemas[schema]), - 'returns valid result': resultIsValid(), - 'with valid=true': function(result) { assert.equal(result.valid, true); }, - 'and no errors': function(result) { - // XXX work-around for bug in vows: [null] chokes it - if (result.errors[0] == null) assert.fail('(errors contains null)'); - assert.length(result.errors, 0); - } - }; - - return context; -} - -function assertSelfValidates(doc) { - var context = {}; - - context[': validate('+doc+')'] = { - topic: validate(schemas[doc]), - 'returns valid result': resultIsValid(), - 'with valid=true': function(result) { assert.equal(result.valid, true); }, - 'and no errors': function(result) { assert.length(result.errors, 0); } - }; - - return context; -} - -var suite = vows.describe('JSON Schema').addBatch({ - 'Core-NSD self-validates': assertSelfValidates('schema-nsd'), - 'Core-NSD/Core-NSD': assertValidates('schema-nsd', 'schema-nsd'), - 'Core-NSD/Core': assertValidates('schema-nsd', 'schema'), - - 'Core self-validates': assertSelfValidates('schema'), - 'Core/Core': assertValidates('schema', 'schema'), - - 'Hyper-NSD self-validates': assertSelfValidates('hyper-schema-nsd'), - 'Hyper self-validates': assertSelfValidates('hyper-schema'), - 'Hyper/Hyper': assertValidates('hyper-schema', 'hyper-schema'), - 'Hyper/Core': assertValidates('hyper-schema', 'schema'), - - 'Links-NSD self-validates': assertSelfValidates('links-nsd'), - 'Links self-validates': assertSelfValidates('links'), - 'Links/Hyper': assertValidates('links', 'hyper-schema'), - 'Links/Core': assertValidates('links', 'schema'), - - 'Json-Ref self-validates': assertSelfValidates('json-ref'), - 'Json-Ref/Hyper': assertValidates('json-ref', 'hyper-schema'), - 'Json-Ref/Core': assertValidates('json-ref', 'schema') -}).export(module); diff --git a/node_modules/json-stringify-safe/.npmignore b/node_modules/json-stringify-safe/.npmignore deleted file mode 100644 index 17d6b36..0000000 --- a/node_modules/json-stringify-safe/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/*.tgz diff --git a/node_modules/json-stringify-safe/CHANGELOG.md b/node_modules/json-stringify-safe/CHANGELOG.md deleted file mode 100644 index 42bcb60..0000000 --- a/node_modules/json-stringify-safe/CHANGELOG.md +++ /dev/null @@ -1,14 +0,0 @@ -## Unreleased -- Fixes stringify to only take ancestors into account when checking - circularity. - It previously assumed every visited object was circular which led to [false - positives][issue9]. - Uses the tiny serializer I wrote for [Must.js][must] a year and a half ago. -- Fixes calling the `replacer` function in the proper context (`thisArg`). -- Fixes calling the `cycleReplacer` function in the proper context (`thisArg`). -- Speeds serializing by a factor of - Big-O(h-my-god-it-linearly-searched-every-object) it had ever seen. Searching - only the ancestors for a circular references speeds up things considerably. - -[must]: https://github.com/moll/js-must -[issue9]: https://github.com/isaacs/json-stringify-safe/issues/9 diff --git a/node_modules/json-stringify-safe/LICENSE b/node_modules/json-stringify-safe/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/json-stringify-safe/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/json-stringify-safe/Makefile b/node_modules/json-stringify-safe/Makefile deleted file mode 100644 index 36088c7..0000000 --- a/node_modules/json-stringify-safe/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -NODE_OPTS = -TEST_OPTS = - -love: - @echo "Feel like makin' love." - -test: - @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R dot $(TEST_OPTS) - -spec: - @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R spec $(TEST_OPTS) - -autotest: - @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R dot --watch $(TEST_OPTS) - -autospec: - @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R spec --watch $(TEST_OPTS) - -pack: - @file=$$(npm pack); echo "$$file"; tar tf "$$file" - -publish: - npm publish - -tag: - git tag "v$$(node -e 'console.log(require("./package").version)')" - -clean: - rm -f *.tgz - npm prune --production - -.PHONY: love -.PHONY: test spec autotest autospec -.PHONY: pack publish tag -.PHONY: clean diff --git a/node_modules/json-stringify-safe/README.md b/node_modules/json-stringify-safe/README.md deleted file mode 100644 index a11f302..0000000 --- a/node_modules/json-stringify-safe/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# json-stringify-safe - -Like JSON.stringify, but doesn't throw on circular references. - -## Usage - -Takes the same arguments as `JSON.stringify`. - -```javascript -var stringify = require('json-stringify-safe'); -var circularObj = {}; -circularObj.circularRef = circularObj; -circularObj.list = [ circularObj, circularObj ]; -console.log(stringify(circularObj, null, 2)); -``` - -Output: - -```json -{ - "circularRef": "[Circular]", - "list": [ - "[Circular]", - "[Circular]" - ] -} -``` - -## Details - -``` -stringify(obj, serializer, indent, decycler) -``` - -The first three arguments are the same as to JSON.stringify. The last -is an argument that's only used when the object has been seen already. - -The default `decycler` function returns the string `'[Circular]'`. -If, for example, you pass in `function(k,v){}` (return nothing) then it -will prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`, -then cyclical objects will always be represented as `{"foo":"bar"}` in -the result. - -``` -stringify.getSerialize(serializer, decycler) -``` - -Returns a serializer that can be used elsewhere. This is the actual -function that's passed to JSON.stringify. - -**Note** that the function returned from `getSerialize` is stateful for now, so -do **not** use it more than once. diff --git a/node_modules/json-stringify-safe/package.json b/node_modules/json-stringify-safe/package.json deleted file mode 100644 index 7b59a63..0000000 --- a/node_modules/json-stringify-safe/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "json-stringify-safe@~5.0.1", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "json-stringify-safe@>=5.0.1 <5.1.0", - "_id": "json-stringify-safe@5.0.1", - "_inCache": true, - "_installable": true, - "_location": "/json-stringify-safe", - "_nodeVersion": "2.0.1", - "_npmUser": { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - "_npmVersion": "2.10.0", - "_phantomChildren": {}, - "_requested": { - "name": "json-stringify-safe", - "raw": "json-stringify-safe@~5.0.1", - "rawSpec": "~5.0.1", - "scope": null, - "spec": ">=5.0.1 <5.1.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "_shasum": "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb", - "_shrinkwrap": null, - "_spec": "json-stringify-safe@~5.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/json-stringify-safe/issues" - }, - "contributors": [ - { - "email": "andri@dot.ee", - "name": "Andri Möll", - "url": "http://themoll.com" - } - ], - "dependencies": {}, - "description": "Like JSON.stringify, but doesn't blow up on circular refs.", - "devDependencies": { - "mocha": ">= 2.1.0 < 3", - "must": ">= 0.12 < 0.13", - "sinon": ">= 1.12.2 < 2" - }, - "directories": {}, - "dist": { - "shasum": "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb", - "tarball": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - }, - "gitHead": "3890dceab3ad14f8701e38ca74f38276abc76de5", - "homepage": "https://github.com/isaacs/json-stringify-safe", - "keywords": [ - "json", - "stringify", - "circular", - "safe" - ], - "license": "ISC", - "main": "stringify.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - }, - { - "email": "andri@dot.ee", - "name": "moll" - } - ], - "name": "json-stringify-safe", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/json-stringify-safe.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "5.0.1" -} diff --git a/node_modules/json-stringify-safe/stringify.js b/node_modules/json-stringify-safe/stringify.js deleted file mode 100644 index 124a452..0000000 --- a/node_modules/json-stringify-safe/stringify.js +++ /dev/null @@ -1,27 +0,0 @@ -exports = module.exports = stringify -exports.getSerialize = serializer - -function stringify(obj, replacer, spaces, cycleReplacer) { - return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces) -} - -function serializer(replacer, cycleReplacer) { - var stack = [], keys = [] - - if (cycleReplacer == null) cycleReplacer = function(key, value) { - if (stack[0] === value) return "[Circular ~]" - return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]" - } - - return function(key, value) { - if (stack.length > 0) { - var thisPos = stack.indexOf(this) - ~thisPos ? stack.splice(thisPos + 1) : stack.push(this) - ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key) - if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value) - } - else stack.push(value) - - return replacer == null ? value : replacer.call(this, key, value) - } -} diff --git a/node_modules/json-stringify-safe/test/mocha.opts b/node_modules/json-stringify-safe/test/mocha.opts deleted file mode 100644 index 2544e58..0000000 --- a/node_modules/json-stringify-safe/test/mocha.opts +++ /dev/null @@ -1,2 +0,0 @@ ---recursive ---require must diff --git a/node_modules/json-stringify-safe/test/stringify_test.js b/node_modules/json-stringify-safe/test/stringify_test.js deleted file mode 100644 index 5b32583..0000000 --- a/node_modules/json-stringify-safe/test/stringify_test.js +++ /dev/null @@ -1,246 +0,0 @@ -var Sinon = require("sinon") -var stringify = require("..") -function jsonify(obj) { return JSON.stringify(obj, null, 2) } - -describe("Stringify", function() { - it("must stringify circular objects", function() { - var obj = {name: "Alice"} - obj.self = obj - var json = stringify(obj, null, 2) - json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) - }) - - it("must stringify circular objects with intermediaries", function() { - var obj = {name: "Alice"} - obj.identity = {self: obj} - var json = stringify(obj, null, 2) - json.must.eql(jsonify({name: "Alice", identity: {self: "[Circular ~]"}})) - }) - - it("must stringify circular objects deeper", function() { - var obj = {name: "Alice", child: {name: "Bob"}} - obj.child.self = obj.child - - stringify(obj, null, 2).must.eql(jsonify({ - name: "Alice", - child: {name: "Bob", self: "[Circular ~.child]"} - })) - }) - - it("must stringify circular objects deeper with intermediaries", function() { - var obj = {name: "Alice", child: {name: "Bob"}} - obj.child.identity = {self: obj.child} - - stringify(obj, null, 2).must.eql(jsonify({ - name: "Alice", - child: {name: "Bob", identity: {self: "[Circular ~.child]"}} - })) - }) - - it("must stringify circular objects in an array", function() { - var obj = {name: "Alice"} - obj.self = [obj, obj] - - stringify(obj, null, 2).must.eql(jsonify({ - name: "Alice", self: ["[Circular ~]", "[Circular ~]"] - })) - }) - - it("must stringify circular objects deeper in an array", function() { - var obj = {name: "Alice", children: [{name: "Bob"}, {name: "Eve"}]} - obj.children[0].self = obj.children[0] - obj.children[1].self = obj.children[1] - - stringify(obj, null, 2).must.eql(jsonify({ - name: "Alice", - children: [ - {name: "Bob", self: "[Circular ~.children.0]"}, - {name: "Eve", self: "[Circular ~.children.1]"} - ] - })) - }) - - it("must stringify circular arrays", function() { - var obj = [] - obj.push(obj) - obj.push(obj) - var json = stringify(obj, null, 2) - json.must.eql(jsonify(["[Circular ~]", "[Circular ~]"])) - }) - - it("must stringify circular arrays with intermediaries", function() { - var obj = [] - obj.push({name: "Alice", self: obj}) - obj.push({name: "Bob", self: obj}) - - stringify(obj, null, 2).must.eql(jsonify([ - {name: "Alice", self: "[Circular ~]"}, - {name: "Bob", self: "[Circular ~]"} - ])) - }) - - it("must stringify repeated objects in objects", function() { - var obj = {} - var alice = {name: "Alice"} - obj.alice1 = alice - obj.alice2 = alice - - stringify(obj, null, 2).must.eql(jsonify({ - alice1: {name: "Alice"}, - alice2: {name: "Alice"} - })) - }) - - it("must stringify repeated objects in arrays", function() { - var alice = {name: "Alice"} - var obj = [alice, alice] - var json = stringify(obj, null, 2) - json.must.eql(jsonify([{name: "Alice"}, {name: "Alice"}])) - }) - - it("must call given decycler and use its output", function() { - var obj = {} - obj.a = obj - obj.b = obj - - var decycle = Sinon.spy(function() { return decycle.callCount }) - var json = stringify(obj, null, 2, decycle) - json.must.eql(jsonify({a: 1, b: 2}, null, 2)) - - decycle.callCount.must.equal(2) - decycle.thisValues[0].must.equal(obj) - decycle.args[0][0].must.equal("a") - decycle.args[0][1].must.equal(obj) - decycle.thisValues[1].must.equal(obj) - decycle.args[1][0].must.equal("b") - decycle.args[1][1].must.equal(obj) - }) - - it("must call replacer and use its output", function() { - var obj = {name: "Alice", child: {name: "Bob"}} - - var replacer = Sinon.spy(bangString) - var json = stringify(obj, replacer, 2) - json.must.eql(jsonify({name: "Alice!", child: {name: "Bob!"}})) - - replacer.callCount.must.equal(4) - replacer.args[0][0].must.equal("") - replacer.args[0][1].must.equal(obj) - replacer.thisValues[1].must.equal(obj) - replacer.args[1][0].must.equal("name") - replacer.args[1][1].must.equal("Alice") - replacer.thisValues[2].must.equal(obj) - replacer.args[2][0].must.equal("child") - replacer.args[2][1].must.equal(obj.child) - replacer.thisValues[3].must.equal(obj.child) - replacer.args[3][0].must.equal("name") - replacer.args[3][1].must.equal("Bob") - }) - - it("must call replacer after describing circular references", function() { - var obj = {name: "Alice"} - obj.self = obj - - var replacer = Sinon.spy(bangString) - var json = stringify(obj, replacer, 2) - json.must.eql(jsonify({name: "Alice!", self: "[Circular ~]!"})) - - replacer.callCount.must.equal(3) - replacer.args[0][0].must.equal("") - replacer.args[0][1].must.equal(obj) - replacer.thisValues[1].must.equal(obj) - replacer.args[1][0].must.equal("name") - replacer.args[1][1].must.equal("Alice") - replacer.thisValues[2].must.equal(obj) - replacer.args[2][0].must.equal("self") - replacer.args[2][1].must.equal("[Circular ~]") - }) - - it("must call given decycler and use its output for nested objects", - function() { - var obj = {} - obj.a = obj - obj.b = {self: obj} - - var decycle = Sinon.spy(function() { return decycle.callCount }) - var json = stringify(obj, null, 2, decycle) - json.must.eql(jsonify({a: 1, b: {self: 2}})) - - decycle.callCount.must.equal(2) - decycle.args[0][0].must.equal("a") - decycle.args[0][1].must.equal(obj) - decycle.args[1][0].must.equal("self") - decycle.args[1][1].must.equal(obj) - }) - - it("must use decycler's output when it returned null", function() { - var obj = {a: "b"} - obj.self = obj - obj.selves = [obj, obj] - - function decycle() { return null } - stringify(obj, null, 2, decycle).must.eql(jsonify({ - a: "b", - self: null, - selves: [null, null] - })) - }) - - it("must use decycler's output when it returned undefined", function() { - var obj = {a: "b"} - obj.self = obj - obj.selves = [obj, obj] - - function decycle() {} - stringify(obj, null, 2, decycle).must.eql(jsonify({ - a: "b", - selves: [null, null] - })) - }) - - it("must throw given a decycler that returns a cycle", function() { - var obj = {} - obj.self = obj - var err - function identity(key, value) { return value } - try { stringify(obj, null, 2, identity) } catch (ex) { err = ex } - err.must.be.an.instanceof(TypeError) - }) - - describe(".getSerialize", function() { - it("must stringify circular objects", function() { - var obj = {a: "b"} - obj.circularRef = obj - obj.list = [obj, obj] - - var json = JSON.stringify(obj, stringify.getSerialize(), 2) - json.must.eql(jsonify({ - "a": "b", - "circularRef": "[Circular ~]", - "list": ["[Circular ~]", "[Circular ~]"] - })) - }) - - // This is the behavior as of Mar 3, 2015. - // The serializer function keeps state inside the returned function and - // so far I'm not sure how to not do that. JSON.stringify's replacer is not - // called _after_ serialization. - xit("must return a function that could be called twice", function() { - var obj = {name: "Alice"} - obj.self = obj - - var json - var serializer = stringify.getSerialize() - - json = JSON.stringify(obj, serializer, 2) - json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) - - json = JSON.stringify(obj, serializer, 2) - json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) - }) - }) -}) - -function bangString(key, value) { - return typeof value == "string" ? value + "!" : value -} diff --git a/node_modules/jsonpointer/.travis.yml b/node_modules/jsonpointer/.travis.yml deleted file mode 100644 index 7f56324..0000000 --- a/node_modules/jsonpointer/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: "node_js" -node_js: - - 0.10 - - 0.11 - - 0.12 - - 4.0 - - node diff --git a/node_modules/jsonpointer/LICENSE.md b/node_modules/jsonpointer/LICENSE.md deleted file mode 100644 index ac32f5d..0000000 --- a/node_modules/jsonpointer/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/jsonpointer/README.md b/node_modules/jsonpointer/README.md deleted file mode 100644 index bc7aa15..0000000 --- a/node_modules/jsonpointer/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# JSON Pointer for nodejs - -This is an implementation of [JSON Pointer](http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-08). - -## Usage -```javascript -var jsonpointer = require('jsonpointer'); -var obj = { foo: 1, bar: { baz: 2}, qux: [3, 4, 5]}; - -jsonpointer.get(obj, '/foo'); // returns 1 -jsonpointer.get(obj, '/bar/baz'); // returns 2 -jsonpointer.get(obj, '/qux/0'); // returns 3 -jsonpointer.get(obj, '/qux/1'); // returns 4 -jsonpointer.get(obj, '/qux/2'); // returns 5 -jsonpointer.get(obj, '/quo'); // returns null - -jsonpointer.set(obj, '/foo', 6); // sets obj.foo = 6; -jsonpointer.set(obj, '/qux/-', 6) // sets obj.qux = [3, 4, 5, 6] - -var pointer = jsonpointer.compile('/foo') -pointer.get(obj) // returns 1 -pointer.set(obj, 1) // sets obj.foo = 1 -``` - -## Testing - - $ node test.js - All tests pass. - $ - -[![Build Status](https://travis-ci.org/janl/node-jsonpointer.png?branch=master)](https://travis-ci.org/janl/node-jsonpointer) - -## Author - -(c) 2011-2015 Jan Lehnardt & Marc Bachmann - -## License - -MIT License. diff --git a/node_modules/jsonpointer/benchmark.js b/node_modules/jsonpointer/benchmark.js deleted file mode 100644 index 8a95636..0000000 --- a/node_modules/jsonpointer/benchmark.js +++ /dev/null @@ -1,56 +0,0 @@ -var jsonpointer = require('./') - -var i -var obj = { - a: 1, - b: { - c: 2 - }, - d: { - e: [{ a: 3 }, { b: 4 }, { c: 5 }] - } -} - -// Get -console.time('get first level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.get(obj, '/a') -} -console.timeEnd('get first level property') - -console.time('get second level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.get(obj, '/d/e') -} -console.timeEnd('get second level property') - -console.time('get third level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.get(obj, '/d/e/0') -} -console.timeEnd('get third level property') - -// Set -console.time('set first level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.set(obj, '/a', 'bla') -} -console.timeEnd('set first level property') - -console.time('set second level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.set(obj, '/d/e', 'bla') -} -console.timeEnd('set second level property') - -console.time('set third level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.set(obj, '/d/e/0', 'bla') -} -console.timeEnd('set third level property') - -console.time('push property into array') -for (i = 0; i < 1e6; i++) { - jsonpointer.set(obj, '/d/e/-', 'bla') -} -console.timeEnd('push property into array') diff --git a/node_modules/jsonpointer/jsonpointer.js b/node_modules/jsonpointer/jsonpointer.js deleted file mode 100644 index 7cfaec0..0000000 --- a/node_modules/jsonpointer/jsonpointer.js +++ /dev/null @@ -1,93 +0,0 @@ -var hasExcape = /~/ -var escapeMatcher = /~[01]/g -function escapeReplacer (m) { - switch (m) { - case '~1': return '/' - case '~0': return '~' - } - throw new Error('Invalid tilde escape: ' + m) -} - -function untilde (str) { - if (!hasExcape.test(str)) return str - return str.replace(escapeMatcher, escapeReplacer) -} - -function setter (obj, pointer, value) { - var part - var hasNextPart - - for (var p = 1, len = pointer.length; p < len;) { - part = untilde(pointer[p++]) - hasNextPart = len > p - - if (typeof obj[part] === 'undefined') { - // support setting of /- - if (Array.isArray(obj) && part === '-') { - part = obj.length - } - - // support nested objects/array when setting values - if (hasNextPart) { - if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] - else obj[part] = {} - } - } - - if (!hasNextPart) break - obj = obj[part] - } - - var oldValue = obj[part] - if (value === undefined) delete obj[part] - else obj[part] = value - return oldValue -} - -function compilePointer (pointer) { - if (typeof pointer === 'string') { - pointer = pointer.split('/') - if (pointer[0] === '') return pointer - throw new Error('Invalid JSON pointer.') - } else if (Array.isArray(pointer)) { - return pointer - } - - throw new Error('Invalid JSON pointer.') -} - -function get (obj, pointer) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - var len = pointer.length - if (len === 1) return obj - - for (var p = 1; p < len;) { - obj = obj[untilde(pointer[p++])] - if (len === p) return obj - if (typeof obj !== 'object') return undefined - } -} - -function set (obj, pointer, value) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') - return setter(obj, pointer, value) -} - -function compile (pointer) { - var compiled = compilePointer(pointer) - return { - get: function (object) { - return get(object, compiled) - }, - set: function (object, value) { - return set(object, compiled, value) - } - } -} - -exports.get = get -exports.set = set -exports.compile = compile diff --git a/node_modules/jsonpointer/package.json b/node_modules/jsonpointer/package.json deleted file mode 100644 index 0cca287..0000000 --- a/node_modules/jsonpointer/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "jsonpointer@^4.0.0", - "/Users/jbaylina/git/MVP/node_modules/is-my-json-valid" - ] - ], - "_from": "jsonpointer@>=4.0.0 <5.0.0", - "_id": "jsonpointer@4.0.0", - "_inCache": true, - "_installable": true, - "_location": "/jsonpointer", - "_nodeVersion": "6.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/jsonpointer-4.0.0.tgz_1463651460494_0.02921536797657609" - }, - "_npmUser": { - "email": "marc.brookman@gmail.com", - "name": "marcbachmann" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "jsonpointer", - "raw": "jsonpointer@^4.0.0", - "rawSpec": "^4.0.0", - "scope": null, - "spec": ">=4.0.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/is-my-json-valid" - ], - "_resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", - "_shasum": "6661e161d2fc445f19f98430231343722e1fcbd5", - "_shrinkwrap": null, - "_spec": "jsonpointer@^4.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/is-my-json-valid", - "author": { - "email": "jan@apache.org", - "name": "Jan Lehnardt" - }, - "bugs": { - "url": "http://github.com/janl/node-jsonpointer/issues" - }, - "contributors": [ - { - "email": "joe-github@cursive.net", - "name": "Joe Hildebrand" - }, - { - "email": "marc.brookman@gmail.com", - "name": "Marc Bachmann" - } - ], - "dependencies": {}, - "description": "Simple JSON Addressing.", - "devDependencies": { - "standard": "^5.3.1" - }, - "directories": {}, - "dist": { - "shasum": "6661e161d2fc445f19f98430231343722e1fcbd5", - "tarball": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "gitHead": "2d46030ba6df41b566934c7202e31fb65058de71", - "homepage": "https://github.com/janl/node-jsonpointer#readme", - "license": "MIT", - "main": "./jsonpointer", - "maintainers": [ - { - "email": "jan@apache.org", - "name": "jan" - }, - { - "email": "marc.brookman@gmail.com", - "name": "marcbachmann" - } - ], - "name": "jsonpointer", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/janl/node-jsonpointer.git" - }, - "scripts": { - "test": "standard && node test.js" - }, - "tags": [ - "util", - "simple", - "util", - "utility" - ], - "version": "4.0.0" -} diff --git a/node_modules/jsonpointer/test.js b/node_modules/jsonpointer/test.js deleted file mode 100644 index e3d9963..0000000 --- a/node_modules/jsonpointer/test.js +++ /dev/null @@ -1,131 +0,0 @@ -var assert = require('assert') -var jsonpointer = require('./jsonpointer') - -var obj = { - a: 1, - b: { - c: 2 - }, - d: { - e: [{ a: 3 }, { b: 4 }, { c: 5 }] - } -} - -assert.equal(jsonpointer.get(obj, '/a'), 1) -assert.equal(jsonpointer.get(obj, '/b/c'), 2) -assert.equal(jsonpointer.get(obj, '/d/e/0/a'), 3) -assert.equal(jsonpointer.get(obj, '/d/e/1/b'), 4) -assert.equal(jsonpointer.get(obj, '/d/e/2/c'), 5) - -// set returns old value -assert.equal(jsonpointer.set(obj, '/a', 2), 1) -assert.equal(jsonpointer.set(obj, '/b/c', 3), 2) -assert.equal(jsonpointer.set(obj, '/d/e/0/a', 4), 3) -assert.equal(jsonpointer.set(obj, '/d/e/1/b', 5), 4) -assert.equal(jsonpointer.set(obj, '/d/e/2/c', 6), 5) - -// set nested properties -assert.equal(jsonpointer.set(obj, '/f/g/h/i', 6), undefined) -assert.equal(jsonpointer.get(obj, '/f/g/h/i'), 6) - -// set an array -assert.equal(jsonpointer.set(obj, '/f/g/h/foo/-', 'test'), undefined) -var arr = jsonpointer.get(obj, '/f/g/h/foo') -assert(Array.isArray(arr), 'set /- creates an array.') -assert.equal(arr[0], 'test') - -assert.equal(jsonpointer.get(obj, '/a'), 2) -assert.equal(jsonpointer.get(obj, '/b/c'), 3) -assert.equal(jsonpointer.get(obj, '/d/e/0/a'), 4) -assert.equal(jsonpointer.get(obj, '/d/e/1/b'), 5) -assert.equal(jsonpointer.get(obj, '/d/e/2/c'), 6) - -// can set `null` as a value -assert.equal(jsonpointer.set(obj, '/f/g/h/foo/0', null), 'test') -assert.strictEqual(jsonpointer.get(obj, '/f/g/h/foo/0'), null) -assert.equal(jsonpointer.set(obj, '/b/c', null), 3) -assert.strictEqual(jsonpointer.get(obj, '/b/c'), null) - -assert.equal(jsonpointer.get(obj, ''), obj) -assert.throws(function () { jsonpointer.get(obj, 'a') }, validateError) -assert.throws(function () { jsonpointer.get(obj, 'a/') }, validateError) - -// can unset values with `undefined` -jsonpointer.set(obj, '/a', undefined) -assert.strictEqual(jsonpointer.get(obj, '/a'), undefined) -jsonpointer.set(obj, '/d/e/1', undefined) -assert.strictEqual(jsonpointer.get(obj, '/d/e/1'), undefined) - -// returns `undefined` when path extends beyond any existing objects -assert.strictEqual(jsonpointer.get(obj, '/x/y/z'), undefined) - -function validateError (err) { - if ((err instanceof Error) && /Invalid JSON pointer/.test(err.message)) { - return true - } -} - -var complexKeys = { - 'a/b': { - c: 1 - }, - d: { - 'e/f': 2 - }, - '~1': 3, - '01': 4 -} - -assert.equal(jsonpointer.get(complexKeys, '/a~1b/c'), 1) -assert.equal(jsonpointer.get(complexKeys, '/d/e~1f'), 2) -assert.equal(jsonpointer.get(complexKeys, '/~01'), 3) -assert.equal(jsonpointer.get(complexKeys, '/01'), 4) -assert.equal(jsonpointer.get(complexKeys, '/a/b/c'), null) -assert.equal(jsonpointer.get(complexKeys, '/~1'), null) - -// draft-ietf-appsawg-json-pointer-08 has special array rules -var ary = [ 'zero', 'one', 'two' ] -assert.equal(jsonpointer.get(ary, '/01'), null) - -assert.equal(jsonpointer.set(ary, '/-', 'three'), null) -assert.equal(ary[3], 'three') - -// Examples from the draft: -var example = { - 'foo': ['bar', 'baz'], - '': 0, - 'a/b': 1, - 'c%d': 2, - 'e^f': 3, - 'g|h': 4, - 'i\\j': 5, - 'k\'l': 6, - ' ': 7, - 'm~n': 8 -} - -assert.equal(jsonpointer.get(example, ''), example) -var ans = jsonpointer.get(example, '/foo') -assert.equal(ans.length, 2) -assert.equal(ans[0], 'bar') -assert.equal(ans[1], 'baz') -assert.equal(jsonpointer.get(example, '/foo/0'), 'bar') -assert.equal(jsonpointer.get(example, '/'), 0) -assert.equal(jsonpointer.get(example, '/a~1b'), 1) -assert.equal(jsonpointer.get(example, '/c%d'), 2) -assert.equal(jsonpointer.get(example, '/e^f'), 3) -assert.equal(jsonpointer.get(example, '/g|h'), 4) -assert.equal(jsonpointer.get(example, '/i\\j'), 5) -assert.equal(jsonpointer.get(example, '/k\'l'), 6) -assert.equal(jsonpointer.get(example, '/ '), 7) -assert.equal(jsonpointer.get(example, '/m~0n'), 8) - -// jsonpointer.compile(path) -var a = {foo: 'bar'} -var pointer = jsonpointer.compile('/foo') -assert.equal(pointer.get(a), 'bar') -assert.equal(pointer.set(a, 'test'), 'bar') -assert.equal(pointer.get(a), 'test') -assert.deepEqual(a, {foo: 'test'}) - -console.log('All tests pass.') diff --git a/node_modules/jsprim/CHANGES.md b/node_modules/jsprim/CHANGES.md deleted file mode 100644 index 3e152ab..0000000 --- a/node_modules/jsprim/CHANGES.md +++ /dev/null @@ -1,39 +0,0 @@ -# Changelog - -## not yet released - -None yet. - -## v1.3.1 (2016-09-12) - -* #13 Incompatible with webpack - -## v1.3.0 (2016-06-22) - -* #14 add safer version of hasOwnProperty() -* #15 forEachKey() should ignore inherited properties - -## v1.2.2 (2015-10-15) - -* #11 NPM package shouldn't include any code that does `require('JSV')` -* #12 jsl.node.conf missing definition for "module" - -## v1.2.1 (2015-10-14) - -* #8 odd date parsing behaviour - -## v1.2.0 (2015-10-13) - -* #9 want function for returning RFC1123 dates - -## v1.1.0 (2015-09-02) - -* #6 a new suite of hrtime manipulation routines: `hrtimeAdd()`, - `hrtimeAccum()`, `hrtimeNanosec()`, `hrtimeMicrosec()` and - `hrtimeMillisec()`. - -## v1.0.0 (2015-09-01) - -First tracked release. Includes everything in previous releases, plus: - -* #4 want function for merging objects diff --git a/node_modules/jsprim/LICENSE b/node_modules/jsprim/LICENSE deleted file mode 100644 index cbc0bb3..0000000 --- a/node_modules/jsprim/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE diff --git a/node_modules/jsprim/README.md b/node_modules/jsprim/README.md deleted file mode 100644 index 7303642..0000000 --- a/node_modules/jsprim/README.md +++ /dev/null @@ -1,237 +0,0 @@ -# jsprim: utilities for primitive JavaScript types - -This module provides miscellaneous facilities for working with strings, -numbers, dates, and objects and arrays of these basic types. - - -### deepCopy(obj) - -Creates a deep copy of a primitive type, object, or array of primitive types. - - -### deepEqual(obj1, obj2) - -Returns whether two objects are equal. - - -### isEmpty(obj) - -Returns true if the given object has no properties and false otherwise. This -is O(1) (unlike `Object.keys(obj).length === 0`, which is O(N)). - -### hasKey(obj, key) - -Returns true if the given object has an enumerable, non-inherited property -called `key`. [For information on enumerability and ownership of properties, see -the MDN -documentation.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) - -### forEachKey(obj, callback) - -Like Array.forEach, but iterates enumerable, owned properties of an object -rather than elements of an array. Equivalent to: - - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - callback(key, obj[key]); - } - } - - -### flattenObject(obj, depth) - -Flattens an object up to a given level of nesting, returning an array of arrays -of length "depth + 1", where the first "depth" elements correspond to flattened -columns and the last element contains the remaining object . For example: - - flattenObject({ - 'I': { - 'A': { - 'i': { - 'datum1': [ 1, 2 ], - 'datum2': [ 3, 4 ] - }, - 'ii': { - 'datum1': [ 3, 4 ] - } - }, - 'B': { - 'i': { - 'datum1': [ 5, 6 ] - }, - 'ii': { - 'datum1': [ 7, 8 ], - 'datum2': [ 3, 4 ], - }, - 'iii': { - } - } - }, - 'II': { - 'A': { - 'i': { - 'datum1': [ 1, 2 ], - 'datum2': [ 3, 4 ] - } - } - } - }, 3) - -becomes: - - [ - [ 'I', 'A', 'i', { 'datum1': [ 1, 2 ], 'datum2': [ 3, 4 ] } ], - [ 'I', 'A', 'ii', { 'datum1': [ 3, 4 ] } ], - [ 'I', 'B', 'i', { 'datum1': [ 5, 6 ] } ], - [ 'I', 'B', 'ii', { 'datum1': [ 7, 8 ], 'datum2': [ 3, 4 ] } ], - [ 'I', 'B', 'iii', {} ], - [ 'II', 'A', 'i', { 'datum1': [ 1, 2 ], 'datum2': [ 3, 4 ] } ] - ] - -This function is strict: "depth" must be a non-negative integer and "obj" must -be a non-null object with at least "depth" levels of nesting under all keys. - - -### flattenIter(obj, depth, func) - -This is similar to `flattenObject` except that instead of returning an array, -this function invokes `func(entry)` for each `entry` in the array that -`flattenObject` would return. `flattenIter(obj, depth, func)` is logically -equivalent to `flattenObject(obj, depth).forEach(func)`. Importantly, this -version never constructs the full array. Its memory usage is O(depth) rather -than O(n) (where `n` is the number of flattened elements). - -There's another difference between `flattenObject` and `flattenIter` that's -related to the special case where `depth === 0`. In this case, `flattenObject` -omits the array wrapping `obj` (which is regrettable). - - -### pluck(obj, key) - -Fetch nested property "key" from object "obj", traversing objects as needed. -For example, `pluck(obj, "foo.bar.baz")` is roughly equivalent to -`obj.foo.bar.baz`, except that: - -1. If traversal fails, the resulting value is undefined, and no error is - thrown. For example, `pluck({}, "foo.bar")` is just undefined. -2. If "obj" has property "key" directly (without traversing), the - corresponding property is returned. For example, - `pluck({ 'foo.bar': 1 }, 'foo.bar')` is 1, not undefined. This is also - true recursively, so `pluck({ 'a': { 'foo.bar': 1 } }, 'a.foo.bar')` is - also 1, not undefined. - - -### randElt(array) - -Returns an element from "array" selected uniformly at random. If "array" is -empty, throws an Error. - - -### startsWith(str, prefix) - -Returns true if the given string starts with the given prefix and false -otherwise. - - -### endsWith(str, suffix) - -Returns true if the given string ends with the given suffix and false -otherwise. - - -### iso8601(date) - -Converts a Date object to an ISO8601 date string of the form -"YYYY-MM-DDTHH:MM:SS.sssZ". This format is not customizable. - - -### parseDateTime(str) - -Parses a date expressed as a string, as either a number of milliseconds since -the epoch or any string format that Date accepts, giving preference to the -former where these two sets overlap (e.g., strings containing small numbers). - - -### hrtimeDiff(timeA, timeB) - -Given two hrtime readings (as from Node's `process.hrtime()`), where timeA is -later than timeB, compute the difference and return that as an hrtime. It is -illegal to invoke this for a pair of times where timeB is newer than timeA. - -### hrtimeAdd(timeA, timeB) - -Add two hrtime intervals (as from Node's `process.hrtime()`), returning a new -hrtime interval array. This function does not modify either input argument. - - -### hrtimeAccum(timeA, timeB) - -Add two hrtime intervals (as from Node's `process.hrtime()`), storing the -result in `timeA`. This function overwrites (and returns) the first argument -passed in. - - -### hrtimeNanosec(timeA), hrtimeMicrosec(timeA), hrtimeMillisec(timeA) - -This suite of functions converts a hrtime interval (as from Node's -`process.hrtime()`) into a scalar number of nanoseconds, microseconds or -milliseconds. Results are truncated, as with `Math.floor()`. - - -### validateJsonObject(schema, object) - -Uses JSON validation (via JSV) to validate the given object against the given -schema. On success, returns null. On failure, *returns* (does not throw) a -useful Error object. - - -### extraProperties(object, allowed) - -Check an object for unexpected properties. Accepts the object to check, and an -array of allowed property name strings. If extra properties are detected, an -array of extra property names is returned. If no properties other than those -in the allowed list are present on the object, the returned array will be of -zero length. - -### mergeObjects(provided, overrides, defaults) - -Merge properties from objects "provided", "overrides", and "defaults". The -intended use case is for functions that accept named arguments in an "args" -object, but want to provide some default values and override other values. In -that case, "provided" is what the caller specified, "overrides" are what the -function wants to override, and "defaults" contains default values. - -The function starts with the values in "defaults", overrides them with the -values in "provided", and then overrides those with the values in "overrides". -For convenience, any of these objects may be falsey, in which case they will be -ignored. The input objects are never modified, but properties in the returned -object are not deep-copied. - -For example: - - mergeObjects(undefined, { 'objectMode': true }, { 'highWaterMark': 0 }) - -returns: - - { 'objectMode': true, 'highWaterMark': 0 } - -For another example: - - mergeObjects( - { 'highWaterMark': 16, 'objectMode': 7 }, /* from caller */ - { 'objectMode': true }, /* overrides */ - { 'highWaterMark': 0 }); /* default */ - -returns: - - { 'objectMode': true, 'highWaterMark': 16 } - - -# Contributing - -Code should be "make check" clean. This target assumes that -[jsl](http://github.com/davepacheco/javascriptlint) and -[jsstyle](http://github.com/davepacheco/jsstyle) are on your path. - -New tests should generally accompany new functions and bug fixes. The tests -should pass cleanly (run tests/basic.js). diff --git a/node_modules/jsprim/lib/jsprim.js b/node_modules/jsprim/lib/jsprim.js deleted file mode 100644 index 26c3ba1..0000000 --- a/node_modules/jsprim/lib/jsprim.js +++ /dev/null @@ -1,488 +0,0 @@ -/* - * lib/jsprim.js: utilities for primitive JavaScript types - */ - -var mod_assert = require('assert'); -var mod_util = require('util'); - -var mod_extsprintf = require('extsprintf'); -var mod_verror = require('verror'); -var mod_jsonschema = require('json-schema'); - -/* - * Public interface - */ -exports.deepCopy = deepCopy; -exports.deepEqual = deepEqual; -exports.isEmpty = isEmpty; -exports.hasKey = hasKey; -exports.forEachKey = forEachKey; -exports.pluck = pluck; -exports.flattenObject = flattenObject; -exports.flattenIter = flattenIter; -exports.validateJsonObject = validateJsonObjectJS; -exports.validateJsonObjectJS = validateJsonObjectJS; -exports.randElt = randElt; -exports.extraProperties = extraProperties; -exports.mergeObjects = mergeObjects; - -exports.startsWith = startsWith; -exports.endsWith = endsWith; - -exports.iso8601 = iso8601; -exports.rfc1123 = rfc1123; -exports.parseDateTime = parseDateTime; - -exports.hrtimediff = hrtimeDiff; -exports.hrtimeDiff = hrtimeDiff; -exports.hrtimeAccum = hrtimeAccum; -exports.hrtimeAdd = hrtimeAdd; -exports.hrtimeNanosec = hrtimeNanosec; -exports.hrtimeMicrosec = hrtimeMicrosec; -exports.hrtimeMillisec = hrtimeMillisec; - - -/* - * Deep copy an acyclic *basic* Javascript object. This only handles basic - * scalars (strings, numbers, booleans) and arbitrarily deep arrays and objects - * containing these. This does *not* handle instances of other classes. - */ -function deepCopy(obj) -{ - var ret, key; - var marker = '__deepCopy'; - - if (obj && obj[marker]) - throw (new Error('attempted deep copy of cyclic object')); - - if (obj && obj.constructor == Object) { - ret = {}; - obj[marker] = true; - - for (key in obj) { - if (key == marker) - continue; - - ret[key] = deepCopy(obj[key]); - } - - delete (obj[marker]); - return (ret); - } - - if (obj && obj.constructor == Array) { - ret = []; - obj[marker] = true; - - for (key = 0; key < obj.length; key++) - ret.push(deepCopy(obj[key])); - - delete (obj[marker]); - return (ret); - } - - /* - * It must be a primitive type -- just return it. - */ - return (obj); -} - -function deepEqual(obj1, obj2) -{ - if (typeof (obj1) != typeof (obj2)) - return (false); - - if (obj1 === null || obj2 === null || typeof (obj1) != 'object') - return (obj1 === obj2); - - if (obj1.constructor != obj2.constructor) - return (false); - - var k; - for (k in obj1) { - if (!obj2.hasOwnProperty(k)) - return (false); - - if (!deepEqual(obj1[k], obj2[k])) - return (false); - } - - for (k in obj2) { - if (!obj1.hasOwnProperty(k)) - return (false); - } - - return (true); -} - -function isEmpty(obj) -{ - var key; - for (key in obj) - return (false); - return (true); -} - -function hasKey(obj, key) -{ - mod_assert.equal(typeof (key), 'string'); - return (Object.prototype.hasOwnProperty.call(obj, key)); -} - -function forEachKey(obj, callback) -{ - for (var key in obj) { - if (hasKey(obj, key)) { - callback(key, obj[key]); - } - } -} - -function pluck(obj, key) -{ - mod_assert.equal(typeof (key), 'string'); - return (pluckv(obj, key)); -} - -function pluckv(obj, key) -{ - if (obj === null || typeof (obj) !== 'object') - return (undefined); - - if (obj.hasOwnProperty(key)) - return (obj[key]); - - var i = key.indexOf('.'); - if (i == -1) - return (undefined); - - var key1 = key.substr(0, i); - if (!obj.hasOwnProperty(key1)) - return (undefined); - - return (pluckv(obj[key1], key.substr(i + 1))); -} - -/* - * Invoke callback(row) for each entry in the array that would be returned by - * flattenObject(data, depth). This is just like flattenObject(data, - * depth).forEach(callback), except that the intermediate array is never - * created. - */ -function flattenIter(data, depth, callback) -{ - doFlattenIter(data, depth, [], callback); -} - -function doFlattenIter(data, depth, accum, callback) -{ - var each; - var key; - - if (depth === 0) { - each = accum.slice(0); - each.push(data); - callback(each); - return; - } - - mod_assert.ok(data !== null); - mod_assert.equal(typeof (data), 'object'); - mod_assert.equal(typeof (depth), 'number'); - mod_assert.ok(depth >= 0); - - for (key in data) { - each = accum.slice(0); - each.push(key); - doFlattenIter(data[key], depth - 1, each, callback); - } -} - -function flattenObject(data, depth) -{ - if (depth === 0) - return ([ data ]); - - mod_assert.ok(data !== null); - mod_assert.equal(typeof (data), 'object'); - mod_assert.equal(typeof (depth), 'number'); - mod_assert.ok(depth >= 0); - - var rv = []; - var key; - - for (key in data) { - flattenObject(data[key], depth - 1).forEach(function (p) { - rv.push([ key ].concat(p)); - }); - } - - return (rv); -} - -function startsWith(str, prefix) -{ - return (str.substr(0, prefix.length) == prefix); -} - -function endsWith(str, suffix) -{ - return (str.substr( - str.length - suffix.length, suffix.length) == suffix); -} - -function iso8601(d) -{ - if (typeof (d) == 'number') - d = new Date(d); - mod_assert.ok(d.constructor === Date); - return (mod_extsprintf.sprintf('%4d-%02d-%02dT%02d:%02d:%02d.%03dZ', - d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(), - d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), - d.getUTCMilliseconds())); -} - -var RFC1123_MONTHS = [ - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; -var RFC1123_DAYS = [ - 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; - -function rfc1123(date) { - return (mod_extsprintf.sprintf('%s, %02d %s %04d %02d:%02d:%02d GMT', - RFC1123_DAYS[date.getUTCDay()], date.getUTCDate(), - RFC1123_MONTHS[date.getUTCMonth()], date.getUTCFullYear(), - date.getUTCHours(), date.getUTCMinutes(), - date.getUTCSeconds())); -} - -/* - * Parses a date expressed as a string, as either a number of milliseconds since - * the epoch or any string format that Date accepts, giving preference to the - * former where these two sets overlap (e.g., small numbers). - */ -function parseDateTime(str) -{ - /* - * This is irritatingly implicit, but significantly more concise than - * alternatives. The "+str" will convert a string containing only a - * number directly to a Number, or NaN for other strings. Thus, if the - * conversion succeeds, we use it (this is the milliseconds-since-epoch - * case). Otherwise, we pass the string directly to the Date - * constructor to parse. - */ - var numeric = +str; - if (!isNaN(numeric)) { - return (new Date(numeric)); - } else { - return (new Date(str)); - } -} - -function validateJsonObjectJS(schema, input) -{ - var report = mod_jsonschema.validate(input, schema); - - if (report.errors.length === 0) - return (null); - - /* Currently, we only do anything useful with the first error. */ - var error = report.errors[0]; - - /* The failed property is given by a URI with an irrelevant prefix. */ - var propname = error['property']; - var reason = error['message'].toLowerCase(); - var i, j; - - /* - * There's at least one case where the property error message is - * confusing at best. We work around this here. - */ - if ((i = reason.indexOf('the property ')) != -1 && - (j = reason.indexOf(' is not defined in the schema and the ' + - 'schema does not allow additional properties')) != -1) { - i += 'the property '.length; - if (propname === '') - propname = reason.substr(i, j - i); - else - propname = propname + '.' + reason.substr(i, j - i); - - reason = 'unsupported property'; - } - - var rv = new mod_verror.VError('property "%s": %s', propname, reason); - rv.jsv_details = error; - return (rv); -} - -function randElt(arr) -{ - mod_assert.ok(Array.isArray(arr) && arr.length > 0, - 'randElt argument must be a non-empty array'); - - return (arr[Math.floor(Math.random() * arr.length)]); -} - -function assertHrtime(a) -{ - mod_assert.ok(a[0] >= 0 && a[1] >= 0, - 'negative numbers not allowed in hrtimes'); - mod_assert.ok(a[1] < 1e9, 'nanoseconds column overflow'); -} - -/* - * Compute the time elapsed between hrtime readings A and B, where A is later - * than B. hrtime readings come from Node's process.hrtime(). There is no - * defined way to represent negative deltas, so it's illegal to diff B from A - * where the time denoted by B is later than the time denoted by A. If this - * becomes valuable, we can define a representation and extend the - * implementation to support it. - */ -function hrtimeDiff(a, b) -{ - assertHrtime(a); - assertHrtime(b); - mod_assert.ok(a[0] > b[0] || (a[0] == b[0] && a[1] >= b[1]), - 'negative differences not allowed'); - - var rv = [ a[0] - b[0], 0 ]; - - if (a[1] >= b[1]) { - rv[1] = a[1] - b[1]; - } else { - rv[0]--; - rv[1] = 1e9 - (b[1] - a[1]); - } - - return (rv); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of nanoseconds. - */ -function hrtimeNanosec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e9 + a[1])); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of microseconds. - */ -function hrtimeMicrosec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e6 + a[1] / 1e3)); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of milliseconds. - */ -function hrtimeMillisec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e3 + a[1] / 1e6)); -} - -/* - * Add two hrtime readings A and B, overwriting A with the result of the - * addition. This function is useful for accumulating several hrtime intervals - * into a counter. Returns A. - */ -function hrtimeAccum(a, b) -{ - assertHrtime(a); - assertHrtime(b); - - /* - * Accumulate the nanosecond component. - */ - a[1] += b[1]; - if (a[1] >= 1e9) { - /* - * The nanosecond component overflowed, so carry to the seconds - * field. - */ - a[0]++; - a[1] -= 1e9; - } - - /* - * Accumulate the seconds component. - */ - a[0] += b[0]; - - return (a); -} - -/* - * Add two hrtime readings A and B, returning the result as a new hrtime array. - * Does not modify either input argument. - */ -function hrtimeAdd(a, b) -{ - assertHrtime(a); - - var rv = [ a[0], a[1] ]; - - return (hrtimeAccum(rv, b)); -} - - -/* - * Check an object for unexpected properties. Accepts the object to check, and - * an array of allowed property names (strings). Returns an array of key names - * that were found on the object, but did not appear in the list of allowed - * properties. If no properties were found, the returned array will be of - * zero length. - */ -function extraProperties(obj, allowed) -{ - mod_assert.ok(typeof (obj) === 'object' && obj !== null, - 'obj argument must be a non-null object'); - mod_assert.ok(Array.isArray(allowed), - 'allowed argument must be an array of strings'); - for (var i = 0; i < allowed.length; i++) { - mod_assert.ok(typeof (allowed[i]) === 'string', - 'allowed argument must be an array of strings'); - } - - return (Object.keys(obj).filter(function (key) { - return (allowed.indexOf(key) === -1); - })); -} - -/* - * Given three sets of properties "provided" (may be undefined), "overrides" - * (required), and "defaults" (may be undefined), construct an object containing - * the union of these sets with "overrides" overriding "provided", and - * "provided" overriding "defaults". None of the input objects are modified. - */ -function mergeObjects(provided, overrides, defaults) -{ - var rv, k; - - rv = {}; - if (defaults) { - for (k in defaults) - rv[k] = defaults[k]; - } - - if (provided) { - for (k in provided) - rv[k] = provided[k]; - } - - if (overrides) { - for (k in overrides) - rv[k] = overrides[k]; - } - - return (rv); -} diff --git a/node_modules/jsprim/package.json b/node_modules/jsprim/package.json deleted file mode 100644 index 5359eda..0000000 --- a/node_modules/jsprim/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_args": [ - [ - "jsprim@^1.2.2", - "/Users/jbaylina/git/MVP/node_modules/http-signature" - ] - ], - "_from": "jsprim@>=1.2.2 <2.0.0", - "_id": "jsprim@1.3.1", - "_inCache": true, - "_installable": true, - "_location": "/jsprim", - "_nodeVersion": "0.12.7", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/jsprim-1.3.1.tgz_1473725209917_0.5387293708045036" - }, - "_npmUser": { - "email": "dap@cs.brown.edu", - "name": "dap" - }, - "_npmVersion": "2.15.9", - "_phantomChildren": {}, - "_requested": { - "name": "jsprim", - "raw": "jsprim@^1.2.2", - "rawSpec": "^1.2.2", - "scope": null, - "spec": ">=1.2.2 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/http-signature" - ], - "_resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "_shasum": "2a7256f70412a29ee3670aaca625994c4dcff252", - "_shrinkwrap": null, - "_spec": "jsprim@^1.2.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/http-signature", - "bugs": { - "url": "https://github.com/davepacheco/node-jsprim/issues" - }, - "dependencies": { - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "description": "utilities for primitive JavaScript types", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "2a7256f70412a29ee3670aaca625994c4dcff252", - "tarball": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz" - }, - "engines": [ - "node >=0.6.0" - ], - "gitHead": "825aba45c6cff4340c18cdae363ccb5bdf840bd7", - "homepage": "https://github.com/davepacheco/node-jsprim#readme", - "license": "MIT", - "main": "./lib/jsprim.js", - "maintainers": [ - { - "email": "dap@cs.brown.edu", - "name": "dap" - } - ], - "name": "jsprim", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/davepacheco/node-jsprim.git" - }, - "scripts": {}, - "version": "1.3.1" -} diff --git a/node_modules/keccakjs/.npmignore b/node_modules/keccakjs/.npmignore deleted file mode 100644 index 123ae94..0000000 --- a/node_modules/keccakjs/.npmignore +++ /dev/null @@ -1,27 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules diff --git a/node_modules/keccakjs/LICENSE b/node_modules/keccakjs/LICENSE deleted file mode 100644 index 21315b2..0000000 --- a/node_modules/keccakjs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Alex Beregszaszi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/keccakjs/README.md b/node_modules/keccakjs/README.md deleted file mode 100644 index 5ae8b51..0000000 --- a/node_modules/keccakjs/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Keccak.js - -The only Keccak hash (aka SHA3 before standardisation) library you need in Javascript. Ever. Pinky promise! - -It is a meta package and lets you to use `node-sha3` or `js-sha3` with the same interface on your choice of deployment. It uses `browserify-sha3` to do the mapping for you. - -There's no speed loss, it is as thin as it can get (but there is some twiddling in `package.json` to select the right package for your environment): -```js -module.exports = require('sha3').SHA3Hash -``` - -Example usage: -```js -const keccak = require('keccakjs') - -var hash = new keccak() // uses 512 bits by default -hash.update('hello') -hash.update(new Buffer('42004200', 'hex')) -hash.digest() // binary output -hash.digest('hex') // hex output -``` - -**NOTE: This library supports the Keccak padding only - and not the final SHA3 padding.** diff --git a/node_modules/keccakjs/browser.js b/node_modules/keccakjs/browser.js deleted file mode 100644 index 8cfe6b1..0000000 --- a/node_modules/keccakjs/browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('browserify-sha3').SHA3Hash diff --git a/node_modules/keccakjs/index.js b/node_modules/keccakjs/index.js deleted file mode 100644 index a41df45..0000000 --- a/node_modules/keccakjs/index.js +++ /dev/null @@ -1,5 +0,0 @@ -try { - module.exports = require('sha3').SHA3Hash -} catch (err) { - module.exports = require('./browser') -} diff --git a/node_modules/keccakjs/package.json b/node_modules/keccakjs/package.json deleted file mode 100644 index 86d5069..0000000 --- a/node_modules/keccakjs/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_args": [ - [ - "keccakjs@^0.2.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-util" - ] - ], - "_from": "keccakjs@>=0.2.0 <0.3.0", - "_id": "keccakjs@0.2.1", - "_inCache": true, - "_installable": true, - "_location": "/keccakjs", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/keccakjs-0.2.1.tgz_1463606488759_0.3820442631840706" - }, - "_npmUser": { - "email": "alex@rtfs.hu", - "name": "axic" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "keccakjs", - "raw": "keccakjs@^0.2.0", - "rawSpec": "^0.2.0", - "scope": null, - "spec": ">=0.2.0 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-util" - ], - "_resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", - "_shasum": "1d633af907ef305bbf9f2fa616d56c44561dfa4d", - "_shrinkwrap": null, - "_spec": "keccakjs@^0.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-util", - "author": { - "email": "alex@rtfs.hu", - "name": "Alex Beregszaszi" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/axic/keccakjs/issues" - }, - "dependencies": { - "browserify-sha3": "^0.0.1", - "sha3": "^1.1.0" - }, - "description": "Keccak hash (SHA3) in Node.js and in the browser. Fast & simple.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "1d633af907ef305bbf9f2fa616d56c44561dfa4d", - "tarball": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz" - }, - "gitHead": "9106bd6eaf1058b325d308af342e0132d6c9c66d", - "homepage": "https://github.com/axic/keccakjs#readme", - "keywords": [ - "sha3", - "keccak", - "hash" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "alex@rtfs.hu", - "name": "axic" - } - ], - "name": "keccakjs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/axic/keccakjs.git" - }, - "scripts": { - "test": "exit 0" - }, - "version": "0.2.1" -} diff --git a/node_modules/lcid/index.js b/node_modules/lcid/index.js deleted file mode 100644 index 69bd3d2..0000000 --- a/node_modules/lcid/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; -var invertKv = require('invert-kv'); -var all = require('./lcid.json'); -var inverted = invertKv(all); - -exports.from = function (lcidCode) { - if (typeof lcidCode !== 'number') { - throw new TypeError('Expected a number'); - } - - return inverted[lcidCode]; -}; - -exports.to = function (localeId) { - if (typeof localeId !== 'string') { - throw new TypeError('Expected a string'); - } - - return all[localeId]; -}; - -exports.all = all; diff --git a/node_modules/lcid/lcid.json b/node_modules/lcid/lcid.json deleted file mode 100644 index 9c89f6a..0000000 --- a/node_modules/lcid/lcid.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "af_ZA": 1078, - "am_ET": 1118, - "ar_AE": 14337, - "ar_BH": 15361, - "ar_DZ": 5121, - "ar_EG": 3073, - "ar_IQ": 2049, - "ar_JO": 11265, - "ar_KW": 13313, - "ar_LB": 12289, - "ar_LY": 4097, - "ar_MA": 6145, - "ar_OM": 8193, - "ar_QA": 16385, - "ar_SA": 1025, - "ar_SY": 10241, - "ar_TN": 7169, - "ar_YE": 9217, - "arn_CL": 1146, - "as_IN": 1101, - "az_AZ": 2092, - "ba_RU": 1133, - "be_BY": 1059, - "bg_BG": 1026, - "bn_IN": 1093, - "bo_BT": 2129, - "bo_CN": 1105, - "br_FR": 1150, - "bs_BA": 8218, - "ca_ES": 1027, - "co_FR": 1155, - "cs_CZ": 1029, - "cy_GB": 1106, - "da_DK": 1030, - "de_AT": 3079, - "de_CH": 2055, - "de_DE": 1031, - "de_LI": 5127, - "de_LU": 4103, - "div_MV": 1125, - "dsb_DE": 2094, - "el_GR": 1032, - "en_AU": 3081, - "en_BZ": 10249, - "en_CA": 4105, - "en_CB": 9225, - "en_GB": 2057, - "en_IE": 6153, - "en_IN": 18441, - "en_JA": 8201, - "en_MY": 17417, - "en_NZ": 5129, - "en_PH": 13321, - "en_TT": 11273, - "en_US": 1033, - "en_ZA": 7177, - "en_ZW": 12297, - "es_AR": 11274, - "es_BO": 16394, - "es_CL": 13322, - "es_CO": 9226, - "es_CR": 5130, - "es_DO": 7178, - "es_EC": 12298, - "es_ES": 3082, - "es_GT": 4106, - "es_HN": 18442, - "es_MX": 2058, - "es_NI": 19466, - "es_PA": 6154, - "es_PE": 10250, - "es_PR": 20490, - "es_PY": 15370, - "es_SV": 17418, - "es_UR": 14346, - "es_US": 21514, - "es_VE": 8202, - "et_EE": 1061, - "eu_ES": 1069, - "fa_IR": 1065, - "fi_FI": 1035, - "fil_PH": 1124, - "fo_FO": 1080, - "fr_BE": 2060, - "fr_CA": 3084, - "fr_CH": 4108, - "fr_FR": 1036, - "fr_LU": 5132, - "fr_MC": 6156, - "fy_NL": 1122, - "ga_IE": 2108, - "gbz_AF": 1164, - "gl_ES": 1110, - "gsw_FR": 1156, - "gu_IN": 1095, - "ha_NG": 1128, - "he_IL": 1037, - "hi_IN": 1081, - "hr_BA": 4122, - "hr_HR": 1050, - "hu_HU": 1038, - "hy_AM": 1067, - "id_ID": 1057, - "ii_CN": 1144, - "is_IS": 1039, - "it_CH": 2064, - "it_IT": 1040, - "iu_CA": 2141, - "ja_JP": 1041, - "ka_GE": 1079, - "kh_KH": 1107, - "kk_KZ": 1087, - "kl_GL": 1135, - "kn_IN": 1099, - "ko_KR": 1042, - "kok_IN": 1111, - "ky_KG": 1088, - "lb_LU": 1134, - "lo_LA": 1108, - "lt_LT": 1063, - "lv_LV": 1062, - "mi_NZ": 1153, - "mk_MK": 1071, - "ml_IN": 1100, - "mn_CN": 2128, - "mn_MN": 1104, - "moh_CA": 1148, - "mr_IN": 1102, - "ms_BN": 2110, - "ms_MY": 1086, - "mt_MT": 1082, - "my_MM": 1109, - "nb_NO": 1044, - "ne_NP": 1121, - "nl_BE": 2067, - "nl_NL": 1043, - "nn_NO": 2068, - "ns_ZA": 1132, - "oc_FR": 1154, - "or_IN": 1096, - "pa_IN": 1094, - "pl_PL": 1045, - "ps_AF": 1123, - "pt_BR": 1046, - "pt_PT": 2070, - "qut_GT": 1158, - "quz_BO": 1131, - "quz_EC": 2155, - "quz_PE": 3179, - "rm_CH": 1047, - "ro_RO": 1048, - "ru_RU": 1049, - "rw_RW": 1159, - "sa_IN": 1103, - "sah_RU": 1157, - "se_FI": 3131, - "se_NO": 1083, - "se_SE": 2107, - "si_LK": 1115, - "sk_SK": 1051, - "sl_SI": 1060, - "sma_NO": 6203, - "sma_SE": 7227, - "smj_NO": 4155, - "smj_SE": 5179, - "smn_FI": 9275, - "sms_FI": 8251, - "sq_AL": 1052, - "sr_BA": 7194, - "sr_SP": 3098, - "sv_FI": 2077, - "sv_SE": 1053, - "sw_KE": 1089, - "syr_SY": 1114, - "ta_IN": 1097, - "te_IN": 1098, - "tg_TJ": 1064, - "th_TH": 1054, - "tk_TM": 1090, - "tmz_DZ": 2143, - "tn_ZA": 1074, - "tr_TR": 1055, - "tt_RU": 1092, - "ug_CN": 1152, - "uk_UA": 1058, - "ur_IN": 2080, - "ur_PK": 1056, - "uz_UZ": 2115, - "vi_VN": 1066, - "wen_DE": 1070, - "wo_SN": 1160, - "xh_ZA": 1076, - "yo_NG": 1130, - "zh_CHS": 4, - "zh_CHT": 31748, - "zh_CN": 2052, - "zh_HK": 3076, - "zh_MO": 5124, - "zh_SG": 4100, - "zh_TW": 1028, - "zu_ZA": 1077 -} diff --git a/node_modules/lcid/license b/node_modules/lcid/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/lcid/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/lcid/package.json b/node_modules/lcid/package.json deleted file mode 100644 index ba1bd5b..0000000 --- a/node_modules/lcid/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "lcid@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/os-locale" - ] - ], - "_from": "lcid@>=1.0.0 <2.0.0", - "_id": "lcid@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/lcid", - "_nodeVersion": "0.12.0", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.5.1", - "_phantomChildren": {}, - "_requested": { - "name": "lcid", - "raw": "lcid@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/os-locale" - ], - "_resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "_shasum": "308accafa0bc483a3867b4b6f2b9506251d1b835", - "_shrinkwrap": null, - "_spec": "lcid@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/os-locale", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/lcid/issues" - }, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "description": "Mapping between standard locale identifiers and Windows locale identifiers (LCID)", - "devDependencies": { - "ava": "0.0.4" - }, - "directories": {}, - "dist": { - "shasum": "308accafa0bc483a3867b4b6f2b9506251d1b835", - "tarball": "http://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "lcid.json" - ], - "gitHead": "96bb3e617f77f5f8ceb78653c77de5a85abb3b1e", - "homepage": "https://github.com/sindresorhus/lcid", - "keywords": [ - "lcid", - "locale", - "string", - "str", - "id", - "identifier", - "windows", - "language", - "lang", - "map", - "mapping", - "convert", - "json", - "bcp47", - "ietf", - "tag" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "lcid", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/lcid.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.0.0" -} diff --git a/node_modules/lcid/readme.md b/node_modules/lcid/readme.md deleted file mode 100644 index bee4a70..0000000 --- a/node_modules/lcid/readme.md +++ /dev/null @@ -1,35 +0,0 @@ -# lcid [![Build Status](https://travis-ci.org/sindresorhus/lcid.svg?branch=master)](https://travis-ci.org/sindresorhus/lcid) - -> Mapping between [standard locale identifiers](http://en.wikipedia.org/wiki/Locale) and [Windows locale identifiers (LCID)](http://en.wikipedia.org/wiki/Locale#Specifics_for_Microsoft_platforms) - -Based on the [mapping](https://github.com/python/cpython/blob/be2a1a76fa43bb1ea1b3577bb5bdd506a2e90e37/Lib/locale.py#L1395-L1604) used in the Python standard library. - -The mapping itself is just a [JSON file](lcid.json) and can be used wherever. - - -## Install - -``` -$ npm install --save lcid -``` - - -## Usage - -```js -var lcid = require('lcid'); - -lcid.from(1044); -//=> 'nb_NO' - -lcid.to('nb_NO'); -//=> 1044 - -lcid.all; -//=> {'af_ZA': 1078, ...} -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/level-codec/.npmignore b/node_modules/level-codec/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/level-codec/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/level-codec/.travis.yml b/node_modules/level-codec/.travis.yml deleted file mode 100644 index c9bea55..0000000 --- a/node_modules/level-codec/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "iojs" -branches: - only: - - master -notifications: - email: - - r@va.gg - - john@chesl.es - - raynos2@gmail.com - - dominic.tarr@gmail.com - - max@maxogden.com - - ralphtheninja@riseup.net - - david.bjorklund@gmail.com - - julian@juliangruber.com - - paolo@async.ly - - anton.whalley@nearform.com - - matteo.collina@gmail.com - - pedro.teixeira@gmail.com - - mail@substack.net -script: npm test diff --git a/node_modules/level-codec/LICENSE.md b/node_modules/level-codec/LICENSE.md deleted file mode 100644 index bdb5e77..0000000 --- a/node_modules/level-codec/LICENSE.md +++ /dev/null @@ -1,13 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2012-2015 LevelUP contributors ---------------------------------------- - -*LevelUP contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/level-codec/Makefile b/node_modules/level-codec/Makefile deleted file mode 100644 index fa5da71..0000000 --- a/node_modules/level-codec/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -test: - @node_modules/.bin/tape test/*.js - -.PHONY: test - diff --git a/node_modules/level-codec/README.md b/node_modules/level-codec/README.md deleted file mode 100644 index 9bafec3..0000000 --- a/node_modules/level-codec/README.md +++ /dev/null @@ -1,82 +0,0 @@ - -# level-codec - -LevelDB Logo - -**[LevelUP's](https://github.com/rvagg/node-levelup) encoding logic.** - -[![Build Status](https://travis-ci.org/Level/codec.png)](https://travis-ci.org/Level/codec) - -## API - -### Codec([opts]) - - Create a new codec, with a global options object. - - This could be something like - -```js -var codec = new Codec(db.options); -``` - -### #encodeKey(key[, opts]) - - Encode `key` with given `opts`. - -### #encodeValue(value[, opts]) - - Encode `value` with given `opts`. - -### #encodeBatch(batch[, opts]) - - Encode `batch` ops with given `opts`. - -### #encodeLtgt(ltgt) - - Encode the ltgt values of option object `ltgt`. - -### #decodeKey(key[, opts]) - - Decode `key` with given `opts`. - -### #decodeValue(value[, opts]) - - Decode `value` with given `opts`. - -### #createStreamDecoder([opts]) - - Create a function with signature `(key, value)`, that for each key/value pair returned from a levelup read stream returns the decoded value to be emitted. - -### #keyAsBuffer([opts]) - - Check whether `opts` and the global `opts` call for a binary key encoding. - -### #valueAsBuffer([opts]) - - Check whether `opts` and the global `opts` call for a binary value encoding. - -### #encodings - - The supported encodings as object of form - -```js -{ - "name": { - "encode": Function, - "decode": Function, - "buffer": Boolean, - "type": String - } -} -``` - -## Publishers - -* [@juliangruber](https://github.com/juliangruber) -* [@ralphtheninja](https://github.com/ralphtheninja) - -## License & copyright - -Copyright (c) 2012-2015 LevelUP contributors. - -LevelUP is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/node_modules/level-codec/index.js b/node_modules/level-codec/index.js deleted file mode 100644 index 80f7d9b..0000000 --- a/node_modules/level-codec/index.js +++ /dev/null @@ -1,106 +0,0 @@ -var encodings = require('./lib/encodings'); - -module.exports = Codec; - -function Codec(opts){ - this.opts = opts || {}; - this.encodings = encodings; -} - -Codec.prototype._encoding = function(encoding){ - if (typeof encoding == 'string') encoding = encodings[encoding]; - if (!encoding) encoding = encodings.id; - return encoding; -}; - -Codec.prototype._keyEncoding = function(opts, batchOpts){ - return this._encoding(batchOpts && batchOpts.keyEncoding - || opts && opts.keyEncoding - || this.opts.keyEncoding); -}; - -Codec.prototype._valueEncoding = function(opts, batchOpts){ - return this._encoding( - batchOpts && (batchOpts.valueEncoding || batchOpts.encoding) - || opts && (opts.valueEncoding || opts.encoding) - || (this.opts.valueEncoding || this.opts.encoding)); -}; - -Codec.prototype.encodeKey = function(key, opts, batchOpts){ - return this._keyEncoding(opts, batchOpts).encode(key); -}; - -Codec.prototype.encodeValue = function(value, opts, batchOpts){ - return this._valueEncoding(opts, batchOpts).encode(value); -}; - -Codec.prototype.decodeKey = function(key, opts){ - return this._keyEncoding(opts).decode(key); -}; - -Codec.prototype.decodeValue = function(value, opts){ - return this._valueEncoding(opts).decode(value); -}; - -Codec.prototype.encodeBatch = function(ops, opts){ - var self = this; - - return ops.map(function(_op){ - var op = { - type: _op.type, - key: self.encodeKey(_op.key, opts, _op) - }; - if (self.keyAsBuffer(opts, _op)) op.keyEncoding = 'binary'; - if (_op.prefix) op.prefix = _op.prefix; - if ('value' in _op) { - op.value = self.encodeValue(_op.value, opts, _op); - if (self.valueAsBuffer(opts, _op)) op.valueEncoding = 'binary'; - } - return op; - }); -}; - -var ltgtKeys = ['lt', 'gt', 'lte', 'gte', 'start', 'end']; - -Codec.prototype.encodeLtgt = function(ltgt){ - var self = this; - var ret = {}; - Object.keys(ltgt).forEach(function(key){ - ret[key] = ltgtKeys.indexOf(key) > -1 - ? self.encodeKey(ltgt[key], ltgt) - : ltgt[key] - }); - return ret; -}; - -Codec.prototype.createStreamDecoder = function(opts){ - var self = this; - - if (opts.keys && opts.values) { - return function(key, value){ - return { - key: self.decodeKey(key, opts), - value: self.decodeValue(value, opts) - }; - }; - } else if (opts.keys) { - return function(key) { - return self.decodeKey(key, opts); - }; - } else if (opts.values) { - return function(_, value){ - return self.decodeValue(value, opts); - } - } else { - return function(){}; - } -}; - -Codec.prototype.keyAsBuffer = function(opts){ - return this._keyEncoding(opts).buffer; -}; - -Codec.prototype.valueAsBuffer = function(opts){ - return this._valueEncoding(opts).buffer; -}; - diff --git a/node_modules/level-codec/lib/encodings.js b/node_modules/level-codec/lib/encodings.js deleted file mode 100644 index 1982739..0000000 --- a/node_modules/level-codec/lib/encodings.js +++ /dev/null @@ -1,76 +0,0 @@ - -exports.utf8 = exports['utf-8'] = { - encode: function(data){ - return isBinary(data) - ? data - : String(data); - }, - decode: identity, - buffer: false, - type: 'utf8' -}; - -exports.json = { - encode: JSON.stringify, - decode: JSON.parse, - buffer: false, - type: 'json' -}; - -exports.binary = { - encode: function(data){ - return isBinary(data) - ? data - : new Buffer(data); - }, - decode: identity, - buffer: true, - type: 'binary' -}; - -exports.id = { - encode: function(data){ - return data; - }, - decode: function(data){ - return data; - }, - buffer: false, - type: 'id' -}; - -var bufferEncodings = [ - 'hex', - 'ascii', - 'base64', - 'ucs2', - 'ucs-2', - 'utf16le', - 'utf-16le' -]; - -bufferEncodings.forEach(function(type){ - exports[type] = { - encode: function(data){ - return isBinary(data) - ? data - : new Buffer(data, type); - }, - decode: function(buffer){ - return buffer.toString(type); - }, - buffer: true, - type: type - }; -}); - -function identity(value){ - return value; -} - -function isBinary(data){ - return data === undefined - || data === null - || Buffer.isBuffer(data); -} - diff --git a/node_modules/level-codec/package.json b/node_modules/level-codec/package.json deleted file mode 100644 index f61f899..0000000 --- a/node_modules/level-codec/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "_args": [ - [ - "level-codec@~6.1.0", - "/Users/jbaylina/git/MVP/node_modules/levelup" - ] - ], - "_from": "level-codec@>=6.1.0 <6.2.0", - "_id": "level-codec@6.1.0", - "_inCache": true, - "_installable": true, - "_location": "/level-codec", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - "_npmVersion": "2.14.7", - "_phantomChildren": {}, - "_requested": { - "name": "level-codec", - "raw": "level-codec@~6.1.0", - "rawSpec": "~6.1.0", - "scope": null, - "spec": ">=6.1.0 <6.2.0", - "type": "range" - }, - "_requiredBy": [ - "/levelup" - ], - "_resolved": "https://registry.npmjs.org/level-codec/-/level-codec-6.1.0.tgz", - "_shasum": "f5df0a99582f76dac43855151ab6f4e4d0d60045", - "_shrinkwrap": null, - "_spec": "level-codec@~6.1.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/levelup", - "bugs": { - "url": "https://github.com/level/codec/issues" - }, - "dependencies": {}, - "description": "Levelup's encoding logic", - "devDependencies": { - "tape": "^3.5.0" - }, - "directories": {}, - "dist": { - "shasum": "f5df0a99582f76dac43855151ab6f4e4d0d60045", - "tarball": "http://registry.npmjs.org/level-codec/-/level-codec-6.1.0.tgz" - }, - "gitHead": "0ec562c51b133c79bfa0d75fc14074348a10d1b3", - "homepage": "https://github.com/level/codec#readme", - "license": "MIT", - "maintainers": [ - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "ralphtheninja" - } - ], - "name": "level-codec", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/level/codec.git" - }, - "scripts": { - "test": "make test" - }, - "version": "6.1.0" -} diff --git a/node_modules/level-codec/test/as-buffer.js b/node_modules/level-codec/test/as-buffer.js deleted file mode 100644 index 096a0a3..0000000 --- a/node_modules/level-codec/test/as-buffer.js +++ /dev/null @@ -1,19 +0,0 @@ -var test = require('tape'); -var Codec = require('..'); - -test('key as buffer', function(t){ - var codec = new Codec({ keyEncoding: 'hex' }); - t.ok(codec.keyAsBuffer({})); - t.ok(codec.keyAsBuffer()); - t.notOk(codec.keyAsBuffer({ keyEncoding: 'utf8' })); - t.end(); -}); - -test('value as buffer', function(t){ - var codec = new Codec({ valueEncoding: 'hex' }); - t.ok(codec.valueAsBuffer({})); - t.ok(codec.valueAsBuffer()); - t.notOk(codec.valueAsBuffer({ valueEncoding: 'utf8' })); - t.end(); -}); - diff --git a/node_modules/level-codec/test/batch.js b/node_modules/level-codec/test/batch.js deleted file mode 100644 index b89251d..0000000 --- a/node_modules/level-codec/test/batch.js +++ /dev/null @@ -1,56 +0,0 @@ -var test = require('tape'); -var Codec = require('..'); - -test('batch', function(t){ - var codec = new Codec({}); - var ops = [ - { type: 'put', key: 'string', value: 'string', valueEncoding: 'utf8' }, - { type: 'put', key: 'json', value: {} } - ]; - var opsSerialized = JSON.stringify(ops); - - var encoded = codec.encodeBatch(ops, { valueEncoding: 'json' }); - - t.equal(opsSerialized, JSON.stringify(ops), 'ops not changed'); - - t.deepEqual(encoded, [ - { type: 'put', key: 'string', value: 'string' }, - { type: 'put', key: 'json', value: '{}' } - ]); - - encoded = codec.encodeBatch(ops); - t.deepEqual(encoded, [ - { type: 'put', key: 'string', value: 'string' }, - { type: 'put', key: 'json', value: {} } - ]); - - t.end(); -}); - - -test('batch - legacy', function(t){ - var codec = new Codec({}); - var ops = [ - { type: 'put', key: 'string', value: 'string', encoding: 'utf8' }, - { type: 'put', key: 'json', value: {} } - ]; - var opsSerialized = JSON.stringify(ops); - - var encoded = codec.encodeBatch(ops, { encoding: 'json' }); - - t.equal(opsSerialized, JSON.stringify(ops), 'ops not changed'); - - t.deepEqual(encoded, [ - { type: 'put', key: 'string', value: 'string' }, - { type: 'put', key: 'json', value: '{}' } - ]); - - encoded = codec.encodeBatch(ops); - t.deepEqual(encoded, [ - { type: 'put', key: 'string', value: 'string' }, - { type: 'put', key: 'json', value: {} } - ]); - - t.end(); -}); - diff --git a/node_modules/level-codec/test/codec.js b/node_modules/level-codec/test/codec.js deleted file mode 100644 index a33e7c2..0000000 --- a/node_modules/level-codec/test/codec.js +++ /dev/null @@ -1,11 +0,0 @@ -var test = require('tape'); -var Codec = require('..'); - -test('codec', function(t){ - var codec = new Codec({ keyEncoding: 'hex' }); - t.ok(codec.keyAsBuffer()); - var codec = new Codec(); - t.notOk(codec.keyAsBuffer()); - t.end(); -}); - diff --git a/node_modules/level-codec/test/decoder.js b/node_modules/level-codec/test/decoder.js deleted file mode 100644 index 08368d5..0000000 --- a/node_modules/level-codec/test/decoder.js +++ /dev/null @@ -1,70 +0,0 @@ -var test = require('tape'); -var Codec = require('..'); - -test('createStreamDecoder', function(t){ - var codec = new Codec({ keyEncoding: 'hex' }); - - t.test('keys and values', function(t){ - var decoder = codec.createStreamDecoder({ - valueEncoding: 'json', - keys: true, - values: true - }); - t.deepEqual(decoder(new Buffer('hey'), '"you"'), { - key: '686579', - value: 'you' - }); - t.end(); - }); - - t.test('keys', function(t){ - var decoder = codec.createStreamDecoder({ - keys: true - }); - t.equal(decoder(new Buffer('hey')), '686579'); - t.end(); - }); - - t.test('values', function(t){ - var decoder = codec.createStreamDecoder({ - valueEncoding: 'hex', - values: true - }); - t.equal(decoder(null, new Buffer('hey')), '686579'); - t.end(); - }); -}); - -test('createStreamDecoder - legacy', function(t){ - var codec = new Codec({ keyEncoding: 'hex' }); - - t.test('keys and values', function(t){ - var decoder = codec.createStreamDecoder({ - encoding: 'json', - keys: true, - values: true - }); - t.deepEqual(decoder(new Buffer('hey'), '"you"'), { - key: '686579', - value: 'you' - }); - t.end(); - }); - - t.test('keys', function(t){ - var decoder = codec.createStreamDecoder({ - keys: true - }); - t.equal(decoder(new Buffer('hey')), '686579'); - t.end(); - }); - - t.test('values', function(t){ - var decoder = codec.createStreamDecoder({ - encoding: 'hex', - values: true - }); - t.equal(decoder(null, new Buffer('hey')), '686579'); - t.end(); - }); -}); diff --git a/node_modules/level-codec/test/kv.js b/node_modules/level-codec/test/kv.js deleted file mode 100644 index 9080de6..0000000 --- a/node_modules/level-codec/test/kv.js +++ /dev/null @@ -1,105 +0,0 @@ -var test = require('tape'); -var Codec = require('..'); - -test('encode key', function(t){ - var codec = new Codec({ keyEncoding: 'hex' }); - - var buf = codec.encodeKey('686579', {}); - t.equal(buf.toString(), 'hey'); - - buf = codec.encodeKey('686579'); - t.equal(buf.toString(), 'hey'); - - buf = codec.encodeKey('686579', { - keyEncoding: 'binary' - }); - t.equal(buf.toString(), '686579'); - - t.end(); -}); - -test('encode value', function(t){ - var codec = new Codec({ valueEncoding: 'hex' }); - - var buf = codec.encodeValue('686579', {}); - t.equal(buf.toString(), 'hey'); - - buf = codec.encodeValue('686579'); - t.equal(buf.toString(), 'hey'); - - buf = codec.encodeValue('686579', { - valueEncoding: 'binary' - }); - t.equal(buf.toString(), '686579'); - - t.end(); -}); - -test('decode key', function(t){ - var codec = new Codec({ keyEncoding: 'hex' }); - - var buf = codec.decodeKey(new Buffer('hey'), {}); - t.equal(buf, '686579'); - - buf = codec.decodeKey(new Buffer('hey')); - t.equal(buf, '686579'); - - buf = codec.decodeKey(new Buffer('hey'), { - keyEncoding: 'binary' - }); - t.equal(buf.toString(), 'hey'); - - t.end(); -}); - -test('decode value', function(t){ - var codec = new Codec({ valueEncoding: 'hex' }); - - var buf = codec.decodeValue(new Buffer('hey'), {}); - t.equal(buf, '686579'); - - buf = codec.decodeValue(new Buffer('hey')); - t.equal(buf, '686579'); - - buf = codec.decodeValue(new Buffer('hey'), { - valueEncoding: 'binary' - }); - t.equal(buf.toString(), 'hey'); - - t.end(); -}); - -test('encode value - legacy', function(t){ - var codec = new Codec({ encoding: 'hex' }); - - var buf = codec.encodeValue('686579', {}); - t.equal(buf.toString(), 'hey'); - - buf = codec.encodeValue('686579'); - t.equal(buf.toString(), 'hey'); - - buf = codec.encodeValue('686579', { - encoding: 'binary' - }); - t.equal(buf.toString(), '686579'); - - t.end(); -}); - -test('decode value - legacy', function(t){ - var codec = new Codec({ encoding: 'hex' }); - - var buf = codec.decodeValue(new Buffer('hey'), {}); - t.equal(buf, '686579'); - - buf = codec.decodeValue(new Buffer('hey')); - t.equal(buf, '686579'); - - buf = codec.decodeValue(new Buffer('hey'), { - encoding: 'binary' - }); - t.equal(buf.toString(), 'hey'); - - t.end(); -}); - diff --git a/node_modules/level-codec/test/ltgt.js b/node_modules/level-codec/test/ltgt.js deleted file mode 100644 index 2f341e7..0000000 --- a/node_modules/level-codec/test/ltgt.js +++ /dev/null @@ -1,26 +0,0 @@ -var test = require('tape'); -var Codec = require('..'); - -test('encode ltgt', function(t){ - var codec = new Codec({ keyEncoding: 'hex' }); - - var ltgt = { - start: '686579', - lte: '686579' - }; - var encoded = codec.encodeLtgt(ltgt); - t.equal(encoded.start.toString(), 'hey'); - t.equal(encoded.lte.toString(), 'hey'); - - ltgt = { - start: '686579', - lte: '686579', - keyEncoding: 'json' - }; - encoded = codec.encodeLtgt(ltgt); - t.equal(encoded.start, '"686579"'); - t.equal(encoded.lte, '"686579"'); - - t.end(); -}); - diff --git a/node_modules/level-errors/.npmignore b/node_modules/level-errors/.npmignore deleted file mode 100644 index c2658d7..0000000 --- a/node_modules/level-errors/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/node_modules/level-errors/.travis.yml b/node_modules/level-errors/.travis.yml deleted file mode 100644 index c9bea55..0000000 --- a/node_modules/level-errors/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "iojs" -branches: - only: - - master -notifications: - email: - - r@va.gg - - john@chesl.es - - raynos2@gmail.com - - dominic.tarr@gmail.com - - max@maxogden.com - - ralphtheninja@riseup.net - - david.bjorklund@gmail.com - - julian@juliangruber.com - - paolo@async.ly - - anton.whalley@nearform.com - - matteo.collina@gmail.com - - pedro.teixeira@gmail.com - - mail@substack.net -script: npm test diff --git a/node_modules/level-errors/LICENSE.md b/node_modules/level-errors/LICENSE.md deleted file mode 100644 index bdb5e77..0000000 --- a/node_modules/level-errors/LICENSE.md +++ /dev/null @@ -1,13 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2012-2015 LevelUP contributors ---------------------------------------- - -*LevelUP contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/level-errors/README.md b/node_modules/level-errors/README.md deleted file mode 100644 index fc0fe77..0000000 --- a/node_modules/level-errors/README.md +++ /dev/null @@ -1,67 +0,0 @@ - -# level-errors - -LevelDB Logo - -**Error module for [LevelUP](https://github.com/rvagg/node-levelup)** - -[![Build Status](https://travis-ci.org/Level/errors.png)](https://travis-ci.org/Level/errors) - -## Usage - -```js -var levelup = require('levelup') -var errors = levelup.errors - -levelup('./db', { createIfMissing: false }, function (err, db) { - if (err instanceof errors.OpenError) { - console.log('open failed because expected db to exist') - } -}) -``` - -## API - -### .LevelUPError() - - Generic error base class. - -### .InitializationError() - - Error initializing the database, like when the database's location argument is missing. - -### .OpenError() - - Error opening the database. - -### .ReadError() - - Error reading from the database. - -### .WriteError() - - Error writing to the database. - -### .NotFoundError() - - Data not found error. - - Has extra properties: - - - `notFound`: `true` - - `status`: 404 - -### .EncodingError() - - Error encoding data. - -## Publishers - -* [@ralphtheninja](https://github.com/ralphtheninja) -* [@juliangruber](https://github.com/juliangruber) - -## License & copyright - -Copyright (c) 2012-2015 LevelUP contributors. - -LevelUP is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/node_modules/level-errors/errors.js b/node_modules/level-errors/errors.js deleted file mode 100644 index 330b8e9..0000000 --- a/node_modules/level-errors/errors.js +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (c) 2012-2015 LevelUP contributors - * See list at - * MIT License - * - */ - -var createError = require('errno').create - , LevelUPError = createError('LevelUPError') - , NotFoundError = createError('NotFoundError', LevelUPError) - -NotFoundError.prototype.notFound = true -NotFoundError.prototype.status = 404 - -module.exports = { - LevelUPError : LevelUPError - , InitializationError : createError('InitializationError', LevelUPError) - , OpenError : createError('OpenError', LevelUPError) - , ReadError : createError('ReadError', LevelUPError) - , WriteError : createError('WriteError', LevelUPError) - , NotFoundError : NotFoundError - , EncodingError : createError('EncodingError', LevelUPError) -} diff --git a/node_modules/level-errors/package.json b/node_modules/level-errors/package.json deleted file mode 100644 index 6c687ba..0000000 --- a/node_modules/level-errors/package.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "_args": [ - [ - "level-errors@~1.0.3", - "/Users/jbaylina/git/MVP/node_modules/levelup" - ] - ], - "_from": "level-errors@>=1.0.3 <1.1.0", - "_id": "level-errors@1.0.4", - "_inCache": true, - "_installable": true, - "_location": "/level-errors", - "_nodeVersion": "2.5.0", - "_npmUser": { - "email": "ralphtheninja@riseup.net", - "name": "ralphtheninja" - }, - "_npmVersion": "2.13.2", - "_phantomChildren": {}, - "_requested": { - "name": "level-errors", - "raw": "level-errors@~1.0.3", - "rawSpec": "~1.0.3", - "scope": null, - "spec": ">=1.0.3 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/level-iterator-stream", - "/levelup" - ], - "_resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.4.tgz", - "_shasum": "3585e623974c737a93755492a43c0267cda4425f", - "_shrinkwrap": null, - "_spec": "level-errors@~1.0.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/levelup", - "bugs": { - "url": "https://github.com/level/errors/issues" - }, - "contributors": [ - { - "email": "r@va.gg", - "name": "Rod Vagg", - "url": "https://github.com/rvagg" - }, - { - "email": "john@chesl.es", - "name": "John Chesley", - "url": "https://github.com/chesles/" - }, - { - "email": "raynos2@gmail.com", - "name": "Jake Verbaten", - "url": "https://github.com/raynos" - }, - { - "email": "dominic.tarr@gmail.com", - "name": "Dominic Tarr", - "url": "https://github.com/dominictarr" - }, - { - "email": "max@maxogden.com", - "name": "Max Ogden", - "url": "https://github.com/maxogden" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "Lars-Magnus Skog", - "url": "https://github.com/ralphtheninja" - }, - { - "email": "david.bjorklund@gmail.com", - "name": "David Björklund", - "url": "https://github.com/kesla" - }, - { - "email": "julian@juliangruber.com", - "name": "Julian Gruber", - "url": "https://github.com/juliangruber" - }, - { - "email": "paolo@async.ly", - "name": "Paolo Fragomeni", - "url": "https://github.com/hij1nx" - }, - { - "email": "anton.whalley@nearform.com", - "name": "Anton Whalley", - "url": "https://github.com/No9" - }, - { - "email": "matteo.collina@gmail.com", - "name": "Matteo Collina", - "url": "https://github.com/mcollina" - }, - { - "email": "pedro.teixeira@gmail.com", - "name": "Pedro Teixeira", - "url": "https://github.com/pgte" - }, - { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "https://github.com/substack" - }, - { - "email": "jcrugzz@gmail.com", - "name": "Jarrett Cruger", - "url": "https://github.com/jcrugzz" - } - ], - "dependencies": { - "errno": "~0.1.1" - }, - "description": "Error types for LevelUP", - "devDependencies": { - "tape": "^3.5.0" - }, - "directories": {}, - "dist": { - "shasum": "3585e623974c737a93755492a43c0267cda4425f", - "tarball": "http://registry.npmjs.org/level-errors/-/level-errors-1.0.4.tgz" - }, - "gitHead": "dbf780036d32e921b796fb2eed663c4de5dfdf79", - "homepage": "https://github.com/level/errors.git", - "keywords": [ - "leveldb", - "levelup", - "leveldown", - "errors" - ], - "license": "MIT", - "main": "errors.js", - "maintainers": [ - { - "email": "ralphtheninja@riseup.net", - "name": "ralphtheninja" - }, - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - } - ], - "name": "level-errors", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/level/errors.git" - }, - "scripts": { - "test": "tape test.js" - }, - "version": "1.0.4" -} diff --git a/node_modules/level-errors/test.js b/node_modules/level-errors/test.js deleted file mode 100644 index 183e869..0000000 --- a/node_modules/level-errors/test.js +++ /dev/null @@ -1,20 +0,0 @@ -var test = require('tape') - , errors = require('./') - -test('all errors are instances of LevelUPError', function (t) { - var LevelUPError = errors.LevelUPError - , keys = Object.keys(errors) - - keys.forEach(function (key) { - t.ok(new errors[key]() instanceof LevelUPError) - }) - - t.end() -}) - -test('NotFoundError has special properties', function (t) { - var error = new errors.NotFoundError() - t.equal(error.notFound, true) - t.equal(error.status, 404) - t.end() -}) diff --git a/node_modules/level-iterator-stream/.npmignore b/node_modules/level-iterator-stream/.npmignore deleted file mode 100644 index 0fe6d2a..0000000 --- a/node_modules/level-iterator-stream/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -db -db-test diff --git a/node_modules/level-iterator-stream/.travis.yml b/node_modules/level-iterator-stream/.travis.yml deleted file mode 100644 index c9bea55..0000000 --- a/node_modules/level-iterator-stream/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "iojs" -branches: - only: - - master -notifications: - email: - - r@va.gg - - john@chesl.es - - raynos2@gmail.com - - dominic.tarr@gmail.com - - max@maxogden.com - - ralphtheninja@riseup.net - - david.bjorklund@gmail.com - - julian@juliangruber.com - - paolo@async.ly - - anton.whalley@nearform.com - - matteo.collina@gmail.com - - pedro.teixeira@gmail.com - - mail@substack.net -script: npm test diff --git a/node_modules/level-iterator-stream/LICENSE.md b/node_modules/level-iterator-stream/LICENSE.md deleted file mode 100644 index bdb5e77..0000000 --- a/node_modules/level-iterator-stream/LICENSE.md +++ /dev/null @@ -1,13 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2012-2015 LevelUP contributors ---------------------------------------- - -*LevelUP contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/level-iterator-stream/Makefile b/node_modules/level-iterator-stream/Makefile deleted file mode 100644 index 3b1b43a..0000000 --- a/node_modules/level-iterator-stream/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -test: - @node_modules/.bin/tape test* - -.PHONY: test - diff --git a/node_modules/level-iterator-stream/README.md b/node_modules/level-iterator-stream/README.md deleted file mode 100644 index d34f6e6..0000000 --- a/node_modules/level-iterator-stream/README.md +++ /dev/null @@ -1,57 +0,0 @@ - -# level-iterator-stream - -LevelDB Logo - -**Turn a leveldown iterator into a readable stream** - -[![Build Status](https://travis-ci.org/Level/iterator-stream.png)](https://travis-ci.org/Level/iterator-stream) - -## Example - -```js -var iteratorStream = require('level-iterator-stream'); -var leveldown = require('leveldown'); - -var db = leveldown(__dirname + '/db'); -db.open(function(err){ - if (err) throw err; - - var stream = iteratorStream(db.iterator()); - stream.on('data', function(kv){ - console.log('%s -> %s', kv.key, kv.value); - }); -}); -``` - -## Installation - -```bash -$ npm install level-iterator-stream -``` - -## API - -### iteratorStream(iterator[, options]) - - Create a readable stream from `iterator`. `options` are passed down to the - `require('readable-stream').Readable` constructor, with `objectMode` forced - to `true`. - - If `options.decoder` is passed, each key/value pair will be transformed by it. - Otherwise, an object with `{ key, value }` will be emitted. - - When the stream ends, the `iterator` will be closed and afterwards a - `"close"` event emitted. - - `.destroy()` will force close the underlying iterator. - -## Publishers - -* [@juliangruber](https://github.com/juliangruber) - -## License & copyright - -Copyright (c) 2012-2015 LevelUP contributors. - -LevelUP is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/node_modules/level-iterator-stream/example.js b/node_modules/level-iterator-stream/example.js deleted file mode 100644 index a3cc9e3..0000000 --- a/node_modules/level-iterator-stream/example.js +++ /dev/null @@ -1,25 +0,0 @@ -var iteratorStream = require('./'); -var leveldown = require('leveldown'); - -var db = leveldown(__dirname + '/db'); -db.open(function(err){ - if (err) throw err; - - var ops = []; - for (var i = 0; i < 1000; i++) { - ops.push({ - type: 'put', - key: String(Math.random()), - value: String(Math.random()) - }); - } - - db.batch(ops, function(err){ - if (err) throw err; - - var stream = iteratorStream(db.iterator()); - stream.on('data', function(kv){ - console.log('%s -> %s', kv.key, kv.value); - }); - }); -}); diff --git a/node_modules/level-iterator-stream/index.js b/node_modules/level-iterator-stream/index.js deleted file mode 100644 index 8552263..0000000 --- a/node_modules/level-iterator-stream/index.js +++ /dev/null @@ -1,56 +0,0 @@ -var inherits = require('inherits'); -var Readable = require('readable-stream').Readable; -var extend = require('xtend'); -var EncodingError = require('level-errors').EncodingError; - -module.exports = ReadStream; -inherits(ReadStream, Readable); - -function ReadStream(iterator, options){ - if (!(this instanceof ReadStream)) return new ReadStream(iterator, options); - Readable.call(this, extend(options, { - objectMode: true - })); - this._iterator = iterator; - this._destroyed = false; - this._decoder = null; - if (options && options.decoder) this._decoder = options.decoder; - this.on('end', this._cleanup.bind(this)); -} - -ReadStream.prototype._read = function(){ - var self = this; - if (this._destroyed) return; - - this._iterator.next(function(err, key, value){ - if (self._destroyed) return; - if (err) return self.emit('error', err); - if (key === undefined && value === undefined) { - self.push(null); - } else { - if (!self._decoder) return self.push({ key: key, value: value }); - - try { - var value = self._decoder(key, value); - } catch (err) { - self.emit('error', new EncodingError(err)); - self.push(null); - return; - } - self.push(value); - } - }); -}; - -ReadStream.prototype.destroy = -ReadStream.prototype._cleanup = function(){ - var self = this; - if (this._destroyed) return; - this._destroyed = true; - - this._iterator.end(function(err){ - if (err) return self.emit('error', err); - self.emit('close'); - }); -}; - diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/.npmignore b/node_modules/level-iterator-stream/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f8..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/LICENSE b/node_modules/level-iterator-stream/node_modules/readable-stream/LICENSE deleted file mode 100644 index e3d4e69..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/README.md b/node_modules/level-iterator-stream/node_modules/readable-stream/README.md deleted file mode 100644 index e46b823..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# readable-stream - -***Node-core streams for userland*** - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png&months=6&height=3)](https://nodei.co/npm/readable-stream/) - -This package is a mirror of the Streams2 and Streams3 implementations in Node-core. - -If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core. - -**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12. - -**readable-stream** uses proper patch-level versioning so if you pin to `"~1.0.0"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `"~1.1.0"` - diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/duplex.js b/node_modules/level-iterator-stream/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/float.patch b/node_modules/level-iterator-stream/node_modules/readable-stream/float.patch deleted file mode 100644 index b984607..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/float.patch +++ /dev/null @@ -1,923 +0,0 @@ -diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js -index c5a741c..a2e0d8e 100644 ---- a/lib/_stream_duplex.js -+++ b/lib/_stream_duplex.js -@@ -26,8 +26,8 @@ - - module.exports = Duplex; - var util = require('util'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('./_stream_readable'); -+var Writable = require('./_stream_writable'); - - util.inherits(Duplex, Readable); - -diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js -index a5e9864..330c247 100644 ---- a/lib/_stream_passthrough.js -+++ b/lib/_stream_passthrough.js -@@ -25,7 +25,7 @@ - - module.exports = PassThrough; - --var Transform = require('_stream_transform'); -+var Transform = require('./_stream_transform'); - var util = require('util'); - util.inherits(PassThrough, Transform); - -diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js -index 0c3fe3e..90a8298 100644 ---- a/lib/_stream_readable.js -+++ b/lib/_stream_readable.js -@@ -23,10 +23,34 @@ module.exports = Readable; - Readable.ReadableState = ReadableState; - - var EE = require('events').EventEmitter; -+if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { -+ return emitter.listeners(type).length; -+}; -+ -+if (!global.setImmediate) global.setImmediate = function setImmediate(fn) { -+ return setTimeout(fn, 0); -+}; -+if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) { -+ return clearTimeout(i); -+}; -+ - var Stream = require('stream'); - var util = require('util'); -+if (!util.isUndefined) { -+ var utilIs = require('core-util-is'); -+ for (var f in utilIs) { -+ util[f] = utilIs[f]; -+ } -+} - var StringDecoder; --var debug = util.debuglog('stream'); -+var debug; -+if (util.debuglog) -+ debug = util.debuglog('stream'); -+else try { -+ debug = require('debuglog')('stream'); -+} catch (er) { -+ debug = function() {}; -+} - - util.inherits(Readable, Stream); - -@@ -380,7 +404,7 @@ function chunkInvalid(state, chunk) { - - - function onEofChunk(stream, state) { -- if (state.decoder && !state.ended) { -+ if (state.decoder && !state.ended && state.decoder.end) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); -diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js -index b1f9fcc..b0caf57 100644 ---- a/lib/_stream_transform.js -+++ b/lib/_stream_transform.js -@@ -64,8 +64,14 @@ - - module.exports = Transform; - --var Duplex = require('_stream_duplex'); -+var Duplex = require('./_stream_duplex'); - var util = require('util'); -+if (!util.isUndefined) { -+ var utilIs = require('core-util-is'); -+ for (var f in utilIs) { -+ util[f] = utilIs[f]; -+ } -+} - util.inherits(Transform, Duplex); - - -diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js -index ba2e920..f49288b 100644 ---- a/lib/_stream_writable.js -+++ b/lib/_stream_writable.js -@@ -27,6 +27,12 @@ module.exports = Writable; - Writable.WritableState = WritableState; - - var util = require('util'); -+if (!util.isUndefined) { -+ var utilIs = require('core-util-is'); -+ for (var f in utilIs) { -+ util[f] = utilIs[f]; -+ } -+} - var Stream = require('stream'); - - util.inherits(Writable, Stream); -@@ -119,7 +125,7 @@ function WritableState(options, stream) { - function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. -- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) -+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) - return new Writable(options); - - this._writableState = new WritableState(options, this); -diff --git a/test/simple/test-stream-big-push.js b/test/simple/test-stream-big-push.js -index e3787e4..8cd2127 100644 ---- a/test/simple/test-stream-big-push.js -+++ b/test/simple/test-stream-big-push.js -@@ -21,7 +21,7 @@ - - var common = require('../common'); - var assert = require('assert'); --var stream = require('stream'); -+var stream = require('../../'); - var str = 'asdfasdfasdfasdfasdf'; - - var r = new stream.Readable({ -diff --git a/test/simple/test-stream-end-paused.js b/test/simple/test-stream-end-paused.js -index bb73777..d40efc7 100644 ---- a/test/simple/test-stream-end-paused.js -+++ b/test/simple/test-stream-end-paused.js -@@ -25,7 +25,7 @@ var gotEnd = false; - - // Make sure we don't miss the end event for paused 0-length streams - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var stream = new Readable(); - var calledRead = false; - stream._read = function() { -diff --git a/test/simple/test-stream-pipe-after-end.js b/test/simple/test-stream-pipe-after-end.js -index b46ee90..0be8366 100644 ---- a/test/simple/test-stream-pipe-after-end.js -+++ b/test/simple/test-stream-pipe-after-end.js -@@ -22,8 +22,8 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('../../lib/_stream_readable'); -+var Writable = require('../../lib/_stream_writable'); - var util = require('util'); - - util.inherits(TestReadable, Readable); -diff --git a/test/simple/test-stream-pipe-cleanup.js b/test/simple/test-stream-pipe-cleanup.js -deleted file mode 100644 -index f689358..0000000 ---- a/test/simple/test-stream-pipe-cleanup.js -+++ /dev/null -@@ -1,122 +0,0 @@ --// Copyright Joyent, Inc. and other Node contributors. --// --// Permission is hereby granted, free of charge, to any person obtaining a --// copy of this software and associated documentation files (the --// "Software"), to deal in the Software without restriction, including --// without limitation the rights to use, copy, modify, merge, publish, --// distribute, sublicense, and/or sell copies of the Software, and to permit --// persons to whom the Software is furnished to do so, subject to the --// following conditions: --// --// The above copyright notice and this permission notice shall be included --// in all copies or substantial portions of the Software. --// --// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --// USE OR OTHER DEALINGS IN THE SOFTWARE. -- --// This test asserts that Stream.prototype.pipe does not leave listeners --// hanging on the source or dest. -- --var common = require('../common'); --var stream = require('stream'); --var assert = require('assert'); --var util = require('util'); -- --function Writable() { -- this.writable = true; -- this.endCalls = 0; -- stream.Stream.call(this); --} --util.inherits(Writable, stream.Stream); --Writable.prototype.end = function() { -- this.endCalls++; --}; -- --Writable.prototype.destroy = function() { -- this.endCalls++; --}; -- --function Readable() { -- this.readable = true; -- stream.Stream.call(this); --} --util.inherits(Readable, stream.Stream); -- --function Duplex() { -- this.readable = true; -- Writable.call(this); --} --util.inherits(Duplex, Writable); -- --var i = 0; --var limit = 100; -- --var w = new Writable(); -- --var r; -- --for (i = 0; i < limit; i++) { -- r = new Readable(); -- r.pipe(w); -- r.emit('end'); --} --assert.equal(0, r.listeners('end').length); --assert.equal(limit, w.endCalls); -- --w.endCalls = 0; -- --for (i = 0; i < limit; i++) { -- r = new Readable(); -- r.pipe(w); -- r.emit('close'); --} --assert.equal(0, r.listeners('close').length); --assert.equal(limit, w.endCalls); -- --w.endCalls = 0; -- --r = new Readable(); -- --for (i = 0; i < limit; i++) { -- w = new Writable(); -- r.pipe(w); -- w.emit('close'); --} --assert.equal(0, w.listeners('close').length); -- --r = new Readable(); --w = new Writable(); --var d = new Duplex(); --r.pipe(d); // pipeline A --d.pipe(w); // pipeline B --assert.equal(r.listeners('end').length, 2); // A.onend, A.cleanup --assert.equal(r.listeners('close').length, 2); // A.onclose, A.cleanup --assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup --assert.equal(d.listeners('close').length, 3); // A.cleanup, B.onclose, B.cleanup --assert.equal(w.listeners('end').length, 0); --assert.equal(w.listeners('close').length, 1); // B.cleanup -- --r.emit('end'); --assert.equal(d.endCalls, 1); --assert.equal(w.endCalls, 0); --assert.equal(r.listeners('end').length, 0); --assert.equal(r.listeners('close').length, 0); --assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup --assert.equal(d.listeners('close').length, 2); // B.onclose, B.cleanup --assert.equal(w.listeners('end').length, 0); --assert.equal(w.listeners('close').length, 1); // B.cleanup -- --d.emit('end'); --assert.equal(d.endCalls, 1); --assert.equal(w.endCalls, 1); --assert.equal(r.listeners('end').length, 0); --assert.equal(r.listeners('close').length, 0); --assert.equal(d.listeners('end').length, 0); --assert.equal(d.listeners('close').length, 0); --assert.equal(w.listeners('end').length, 0); --assert.equal(w.listeners('close').length, 0); -diff --git a/test/simple/test-stream-pipe-error-handling.js b/test/simple/test-stream-pipe-error-handling.js -index c5d724b..c7d6b7d 100644 ---- a/test/simple/test-stream-pipe-error-handling.js -+++ b/test/simple/test-stream-pipe-error-handling.js -@@ -21,7 +21,7 @@ - - var common = require('../common'); - var assert = require('assert'); --var Stream = require('stream').Stream; -+var Stream = require('../../').Stream; - - (function testErrorListenerCatches() { - var source = new Stream(); -diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js -index cb9d5fe..56f8d61 100644 ---- a/test/simple/test-stream-pipe-event.js -+++ b/test/simple/test-stream-pipe-event.js -@@ -20,7 +20,7 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common'); --var stream = require('stream'); -+var stream = require('../../'); - var assert = require('assert'); - var util = require('util'); - -diff --git a/test/simple/test-stream-push-order.js b/test/simple/test-stream-push-order.js -index f2e6ec2..a5c9bf9 100644 ---- a/test/simple/test-stream-push-order.js -+++ b/test/simple/test-stream-push-order.js -@@ -20,7 +20,7 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common.js'); --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var assert = require('assert'); - - var s = new Readable({ -diff --git a/test/simple/test-stream-push-strings.js b/test/simple/test-stream-push-strings.js -index 06f43dc..1701a9a 100644 ---- a/test/simple/test-stream-push-strings.js -+++ b/test/simple/test-stream-push-strings.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var util = require('util'); - - util.inherits(MyStream, Readable); -diff --git a/test/simple/test-stream-readable-event.js b/test/simple/test-stream-readable-event.js -index ba6a577..a8e6f7b 100644 ---- a/test/simple/test-stream-readable-event.js -+++ b/test/simple/test-stream-readable-event.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - - (function first() { - // First test, not reading when the readable is added. -diff --git a/test/simple/test-stream-readable-flow-recursion.js b/test/simple/test-stream-readable-flow-recursion.js -index 2891ad6..11689ba 100644 ---- a/test/simple/test-stream-readable-flow-recursion.js -+++ b/test/simple/test-stream-readable-flow-recursion.js -@@ -27,7 +27,7 @@ var assert = require('assert'); - // more data continuously, but without triggering a nextTick - // warning or RangeError. - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - - // throw an error if we trigger a nextTick warning. - process.throwDeprecation = true; -diff --git a/test/simple/test-stream-unshift-empty-chunk.js b/test/simple/test-stream-unshift-empty-chunk.js -index 0c96476..7827538 100644 ---- a/test/simple/test-stream-unshift-empty-chunk.js -+++ b/test/simple/test-stream-unshift-empty-chunk.js -@@ -24,7 +24,7 @@ var assert = require('assert'); - - // This test verifies that stream.unshift(Buffer(0)) or - // stream.unshift('') does not set state.reading=false. --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - - var r = new Readable(); - var nChunks = 10; -diff --git a/test/simple/test-stream-unshift-read-race.js b/test/simple/test-stream-unshift-read-race.js -index 83fd9fa..17c18aa 100644 ---- a/test/simple/test-stream-unshift-read-race.js -+++ b/test/simple/test-stream-unshift-read-race.js -@@ -29,7 +29,7 @@ var assert = require('assert'); - // 3. push() after the EOF signaling null is an error. - // 4. _read() is not called after pushing the EOF null chunk. - --var stream = require('stream'); -+var stream = require('../../'); - var hwm = 10; - var r = stream.Readable({ highWaterMark: hwm }); - var chunks = 10; -@@ -51,7 +51,14 @@ r._read = function(n) { - - function push(fast) { - assert(!pushedNull, 'push() after null push'); -- var c = pos >= data.length ? null : data.slice(pos, pos + n); -+ var c; -+ if (pos >= data.length) -+ c = null; -+ else { -+ if (n + pos > data.length) -+ n = data.length - pos; -+ c = data.slice(pos, pos + n); -+ } - pushedNull = c === null; - if (fast) { - pos += n; -diff --git a/test/simple/test-stream-writev.js b/test/simple/test-stream-writev.js -index 5b49e6e..b5321f3 100644 ---- a/test/simple/test-stream-writev.js -+++ b/test/simple/test-stream-writev.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var stream = require('stream'); -+var stream = require('../../'); - - var queue = []; - for (var decode = 0; decode < 2; decode++) { -diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js -index 3814bf0..248c1be 100644 ---- a/test/simple/test-stream2-basic.js -+++ b/test/simple/test-stream2-basic.js -@@ -21,7 +21,7 @@ - - - var common = require('../common.js'); --var R = require('_stream_readable'); -+var R = require('../../lib/_stream_readable'); - var assert = require('assert'); - - var util = require('util'); -diff --git a/test/simple/test-stream2-compatibility.js b/test/simple/test-stream2-compatibility.js -index 6cdd4e9..f0fa84b 100644 ---- a/test/simple/test-stream2-compatibility.js -+++ b/test/simple/test-stream2-compatibility.js -@@ -21,7 +21,7 @@ - - - var common = require('../common.js'); --var R = require('_stream_readable'); -+var R = require('../../lib/_stream_readable'); - var assert = require('assert'); - - var util = require('util'); -diff --git a/test/simple/test-stream2-finish-pipe.js b/test/simple/test-stream2-finish-pipe.js -index 39b274f..006a19b 100644 ---- a/test/simple/test-stream2-finish-pipe.js -+++ b/test/simple/test-stream2-finish-pipe.js -@@ -20,7 +20,7 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common.js'); --var stream = require('stream'); -+var stream = require('../../'); - var Buffer = require('buffer').Buffer; - - var r = new stream.Readable(); -diff --git a/test/simple/test-stream2-fs.js b/test/simple/test-stream2-fs.js -deleted file mode 100644 -index e162406..0000000 ---- a/test/simple/test-stream2-fs.js -+++ /dev/null -@@ -1,72 +0,0 @@ --// Copyright Joyent, Inc. and other Node contributors. --// --// Permission is hereby granted, free of charge, to any person obtaining a --// copy of this software and associated documentation files (the --// "Software"), to deal in the Software without restriction, including --// without limitation the rights to use, copy, modify, merge, publish, --// distribute, sublicense, and/or sell copies of the Software, and to permit --// persons to whom the Software is furnished to do so, subject to the --// following conditions: --// --// The above copyright notice and this permission notice shall be included --// in all copies or substantial portions of the Software. --// --// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --// USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- --var common = require('../common.js'); --var R = require('_stream_readable'); --var assert = require('assert'); -- --var fs = require('fs'); --var FSReadable = fs.ReadStream; -- --var path = require('path'); --var file = path.resolve(common.fixturesDir, 'x1024.txt'); -- --var size = fs.statSync(file).size; -- --var expectLengths = [1024]; -- --var util = require('util'); --var Stream = require('stream'); -- --util.inherits(TestWriter, Stream); -- --function TestWriter() { -- Stream.apply(this); -- this.buffer = []; -- this.length = 0; --} -- --TestWriter.prototype.write = function(c) { -- this.buffer.push(c.toString()); -- this.length += c.length; -- return true; --}; -- --TestWriter.prototype.end = function(c) { -- if (c) this.buffer.push(c.toString()); -- this.emit('results', this.buffer); --} -- --var r = new FSReadable(file); --var w = new TestWriter(); -- --w.on('results', function(res) { -- console.error(res, w.length); -- assert.equal(w.length, size); -- var l = 0; -- assert.deepEqual(res.map(function (c) { -- return c.length; -- }), expectLengths); -- console.log('ok'); --}); -- --r.pipe(w); -diff --git a/test/simple/test-stream2-httpclient-response-end.js b/test/simple/test-stream2-httpclient-response-end.js -deleted file mode 100644 -index 15cffc2..0000000 ---- a/test/simple/test-stream2-httpclient-response-end.js -+++ /dev/null -@@ -1,52 +0,0 @@ --// Copyright Joyent, Inc. and other Node contributors. --// --// Permission is hereby granted, free of charge, to any person obtaining a --// copy of this software and associated documentation files (the --// "Software"), to deal in the Software without restriction, including --// without limitation the rights to use, copy, modify, merge, publish, --// distribute, sublicense, and/or sell copies of the Software, and to permit --// persons to whom the Software is furnished to do so, subject to the --// following conditions: --// --// The above copyright notice and this permission notice shall be included --// in all copies or substantial portions of the Software. --// --// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --// USE OR OTHER DEALINGS IN THE SOFTWARE. -- --var common = require('../common.js'); --var assert = require('assert'); --var http = require('http'); --var msg = 'Hello'; --var readable_event = false; --var end_event = false; --var server = http.createServer(function(req, res) { -- res.writeHead(200, {'Content-Type': 'text/plain'}); -- res.end(msg); --}).listen(common.PORT, function() { -- http.get({port: common.PORT}, function(res) { -- var data = ''; -- res.on('readable', function() { -- console.log('readable event'); -- readable_event = true; -- data += res.read(); -- }); -- res.on('end', function() { -- console.log('end event'); -- end_event = true; -- assert.strictEqual(msg, data); -- server.close(); -- }); -- }); --}); -- --process.on('exit', function() { -- assert(readable_event); -- assert(end_event); --}); -- -diff --git a/test/simple/test-stream2-large-read-stall.js b/test/simple/test-stream2-large-read-stall.js -index 2fbfbca..667985b 100644 ---- a/test/simple/test-stream2-large-read-stall.js -+++ b/test/simple/test-stream2-large-read-stall.js -@@ -30,7 +30,7 @@ var PUSHSIZE = 20; - var PUSHCOUNT = 1000; - var HWM = 50; - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var r = new Readable({ - highWaterMark: HWM - }); -@@ -39,23 +39,23 @@ var rs = r._readableState; - r._read = push; - - r.on('readable', function() { -- console.error('>> readable'); -+ //console.error('>> readable'); - do { -- console.error(' > read(%d)', READSIZE); -+ //console.error(' > read(%d)', READSIZE); - var ret = r.read(READSIZE); -- console.error(' < %j (%d remain)', ret && ret.length, rs.length); -+ //console.error(' < %j (%d remain)', ret && ret.length, rs.length); - } while (ret && ret.length === READSIZE); - -- console.error('<< after read()', -- ret && ret.length, -- rs.needReadable, -- rs.length); -+ //console.error('<< after read()', -+ // ret && ret.length, -+ // rs.needReadable, -+ // rs.length); - }); - - var endEmitted = false; - r.on('end', function() { - endEmitted = true; -- console.error('end'); -+ //console.error('end'); - }); - - var pushes = 0; -@@ -64,11 +64,11 @@ function push() { - return; - - if (pushes++ === PUSHCOUNT) { -- console.error(' push(EOF)'); -+ //console.error(' push(EOF)'); - return r.push(null); - } - -- console.error(' push #%d', pushes); -+ //console.error(' push #%d', pushes); - if (r.push(new Buffer(PUSHSIZE))) - setTimeout(push); - } -diff --git a/test/simple/test-stream2-objects.js b/test/simple/test-stream2-objects.js -index 3e6931d..ff47d89 100644 ---- a/test/simple/test-stream2-objects.js -+++ b/test/simple/test-stream2-objects.js -@@ -21,8 +21,8 @@ - - - var common = require('../common.js'); --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('../../lib/_stream_readable'); -+var Writable = require('../../lib/_stream_writable'); - var assert = require('assert'); - - // tiny node-tap lookalike. -diff --git a/test/simple/test-stream2-pipe-error-handling.js b/test/simple/test-stream2-pipe-error-handling.js -index cf7531c..e3f3e4e 100644 ---- a/test/simple/test-stream2-pipe-error-handling.js -+++ b/test/simple/test-stream2-pipe-error-handling.js -@@ -21,7 +21,7 @@ - - var common = require('../common'); - var assert = require('assert'); --var stream = require('stream'); -+var stream = require('../../'); - - (function testErrorListenerCatches() { - var count = 1000; -diff --git a/test/simple/test-stream2-pipe-error-once-listener.js b/test/simple/test-stream2-pipe-error-once-listener.js -index 5e8e3cb..53b2616 100755 ---- a/test/simple/test-stream2-pipe-error-once-listener.js -+++ b/test/simple/test-stream2-pipe-error-once-listener.js -@@ -24,7 +24,7 @@ var common = require('../common.js'); - var assert = require('assert'); - - var util = require('util'); --var stream = require('stream'); -+var stream = require('../../'); - - - var Read = function() { -diff --git a/test/simple/test-stream2-push.js b/test/simple/test-stream2-push.js -index b63edc3..eb2b0e9 100644 ---- a/test/simple/test-stream2-push.js -+++ b/test/simple/test-stream2-push.js -@@ -20,7 +20,7 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common.js'); --var stream = require('stream'); -+var stream = require('../../'); - var Readable = stream.Readable; - var Writable = stream.Writable; - var assert = require('assert'); -diff --git a/test/simple/test-stream2-read-sync-stack.js b/test/simple/test-stream2-read-sync-stack.js -index e8a7305..9740a47 100644 ---- a/test/simple/test-stream2-read-sync-stack.js -+++ b/test/simple/test-stream2-read-sync-stack.js -@@ -21,7 +21,7 @@ - - var common = require('../common'); - var assert = require('assert'); --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - var r = new Readable(); - var N = 256 * 1024; - -diff --git a/test/simple/test-stream2-readable-empty-buffer-no-eof.js b/test/simple/test-stream2-readable-empty-buffer-no-eof.js -index cd30178..4b1659d 100644 ---- a/test/simple/test-stream2-readable-empty-buffer-no-eof.js -+++ b/test/simple/test-stream2-readable-empty-buffer-no-eof.js -@@ -22,10 +22,9 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('stream').Readable; -+var Readable = require('../../').Readable; - - test1(); --test2(); - - function test1() { - var r = new Readable(); -@@ -88,31 +87,3 @@ function test1() { - console.log('ok'); - }); - } -- --function test2() { -- var r = new Readable({ encoding: 'base64' }); -- var reads = 5; -- r._read = function(n) { -- if (!reads--) -- return r.push(null); // EOF -- else -- return r.push(new Buffer('x')); -- }; -- -- var results = []; -- function flow() { -- var chunk; -- while (null !== (chunk = r.read())) -- results.push(chunk + ''); -- } -- r.on('readable', flow); -- r.on('end', function() { -- results.push('EOF'); -- }); -- flow(); -- -- process.on('exit', function() { -- assert.deepEqual(results, [ 'eHh4', 'eHg=', 'EOF' ]); -- console.log('ok'); -- }); --} -diff --git a/test/simple/test-stream2-readable-from-list.js b/test/simple/test-stream2-readable-from-list.js -index 7c96ffe..04a96f5 100644 ---- a/test/simple/test-stream2-readable-from-list.js -+++ b/test/simple/test-stream2-readable-from-list.js -@@ -21,7 +21,7 @@ - - var assert = require('assert'); - var common = require('../common.js'); --var fromList = require('_stream_readable')._fromList; -+var fromList = require('../../lib/_stream_readable')._fromList; - - // tiny node-tap lookalike. - var tests = []; -diff --git a/test/simple/test-stream2-readable-legacy-drain.js b/test/simple/test-stream2-readable-legacy-drain.js -index 675da8e..51fd3d5 100644 ---- a/test/simple/test-stream2-readable-legacy-drain.js -+++ b/test/simple/test-stream2-readable-legacy-drain.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var Stream = require('stream'); -+var Stream = require('../../'); - var Readable = Stream.Readable; - - var r = new Readable(); -diff --git a/test/simple/test-stream2-readable-non-empty-end.js b/test/simple/test-stream2-readable-non-empty-end.js -index 7314ae7..c971898 100644 ---- a/test/simple/test-stream2-readable-non-empty-end.js -+++ b/test/simple/test-stream2-readable-non-empty-end.js -@@ -21,7 +21,7 @@ - - var assert = require('assert'); - var common = require('../common.js'); --var Readable = require('_stream_readable'); -+var Readable = require('../../lib/_stream_readable'); - - var len = 0; - var chunks = new Array(10); -diff --git a/test/simple/test-stream2-readable-wrap-empty.js b/test/simple/test-stream2-readable-wrap-empty.js -index 2e5cf25..fd8a3dc 100644 ---- a/test/simple/test-stream2-readable-wrap-empty.js -+++ b/test/simple/test-stream2-readable-wrap-empty.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('_stream_readable'); -+var Readable = require('../../lib/_stream_readable'); - var EE = require('events').EventEmitter; - - var oldStream = new EE(); -diff --git a/test/simple/test-stream2-readable-wrap.js b/test/simple/test-stream2-readable-wrap.js -index 90eea01..6b177f7 100644 ---- a/test/simple/test-stream2-readable-wrap.js -+++ b/test/simple/test-stream2-readable-wrap.js -@@ -22,8 +22,8 @@ - var common = require('../common'); - var assert = require('assert'); - --var Readable = require('_stream_readable'); --var Writable = require('_stream_writable'); -+var Readable = require('../../lib/_stream_readable'); -+var Writable = require('../../lib/_stream_writable'); - var EE = require('events').EventEmitter; - - var testRuns = 0, completedRuns = 0; -diff --git a/test/simple/test-stream2-set-encoding.js b/test/simple/test-stream2-set-encoding.js -index 5d2c32a..685531b 100644 ---- a/test/simple/test-stream2-set-encoding.js -+++ b/test/simple/test-stream2-set-encoding.js -@@ -22,7 +22,7 @@ - - var common = require('../common.js'); - var assert = require('assert'); --var R = require('_stream_readable'); -+var R = require('../../lib/_stream_readable'); - var util = require('util'); - - // tiny node-tap lookalike. -diff --git a/test/simple/test-stream2-transform.js b/test/simple/test-stream2-transform.js -index 9c9ddd8..a0cacc6 100644 ---- a/test/simple/test-stream2-transform.js -+++ b/test/simple/test-stream2-transform.js -@@ -21,8 +21,8 @@ - - var assert = require('assert'); - var common = require('../common.js'); --var PassThrough = require('_stream_passthrough'); --var Transform = require('_stream_transform'); -+var PassThrough = require('../../').PassThrough; -+var Transform = require('../../').Transform; - - // tiny node-tap lookalike. - var tests = []; -diff --git a/test/simple/test-stream2-unpipe-drain.js b/test/simple/test-stream2-unpipe-drain.js -index d66dc3c..365b327 100644 ---- a/test/simple/test-stream2-unpipe-drain.js -+++ b/test/simple/test-stream2-unpipe-drain.js -@@ -22,7 +22,7 @@ - - var common = require('../common.js'); - var assert = require('assert'); --var stream = require('stream'); -+var stream = require('../../'); - var crypto = require('crypto'); - - var util = require('util'); -diff --git a/test/simple/test-stream2-unpipe-leak.js b/test/simple/test-stream2-unpipe-leak.js -index 99f8746..17c92ae 100644 ---- a/test/simple/test-stream2-unpipe-leak.js -+++ b/test/simple/test-stream2-unpipe-leak.js -@@ -22,7 +22,7 @@ - - var common = require('../common.js'); - var assert = require('assert'); --var stream = require('stream'); -+var stream = require('../../'); - - var chunk = new Buffer('hallo'); - -diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js -index 704100c..209c3a6 100644 ---- a/test/simple/test-stream2-writable.js -+++ b/test/simple/test-stream2-writable.js -@@ -20,8 +20,8 @@ - // USE OR OTHER DEALINGS IN THE SOFTWARE. - - var common = require('../common.js'); --var W = require('_stream_writable'); --var D = require('_stream_duplex'); -+var W = require('../../').Writable; -+var D = require('../../').Duplex; - var assert = require('assert'); - - var util = require('util'); -diff --git a/test/simple/test-stream3-pause-then-read.js b/test/simple/test-stream3-pause-then-read.js -index b91bde3..2f72c15 100644 ---- a/test/simple/test-stream3-pause-then-read.js -+++ b/test/simple/test-stream3-pause-then-read.js -@@ -22,7 +22,7 @@ - var common = require('../common'); - var assert = require('assert'); - --var stream = require('stream'); -+var stream = require('../../'); - var Readable = stream.Readable; - var Writable = stream.Writable; - diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index b513d61..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -module.exports = Duplex; - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -} -/**/ - - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); - -util.inherits(Duplex, Readable); - -forEach(objectKeys(Writable.prototype), function(method) { - if (!Duplex.prototype[method]) - Duplex.prototype[method] = Writable.prototype[method]; -}); - -function Duplex(options) { - if (!(this instanceof Duplex)) - return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) - this.readable = false; - - if (options && options.writable === false) - this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) - this.allowHalfOpen = false; - - this.once('end', onend); -} - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) - return; - - // no more data can be written. - // But allow more writes to happen in this tick. - process.nextTick(this.end.bind(this)); -} - -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 895ca50..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) - return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function(chunk, encoding, cb) { - cb(null, chunk); -}; diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 19ab358..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,951 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -module.exports = Readable; - -/**/ -var isArray = require('isarray'); -/**/ - - -/**/ -var Buffer = require('buffer').Buffer; -/**/ - -Readable.ReadableState = ReadableState; - -var EE = require('events').EventEmitter; - -/**/ -if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -var Stream = require('stream'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var StringDecoder; - - -/**/ -var debug = require('util'); -if (debug && debug.debuglog) { - debug = debug.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ - - -util.inherits(Readable, Stream); - -function ReadableState(options, stream) { - var Duplex = require('./_stream_duplex'); - - options = options || {}; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var defaultHwm = options.objectMode ? 16 : 16 * 1024; - this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.buffer = []; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - if (stream instanceof Duplex) - this.objectMode = this.objectMode || !!options.readableObjectMode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - var Duplex = require('./_stream_duplex'); - - if (!(this instanceof Readable)) - return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - Stream.call(this); -} - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function(chunk, encoding) { - var state = this._readableState; - - if (util.isString(chunk) && !state.objectMode) { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = new Buffer(chunk, encoding); - encoding = ''; - } - } - - return readableAddChunk(this, state, chunk, encoding, false); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function(chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); -}; - -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (util.isNullOrUndefined(chunk)) { - state.reading = false; - if (!state.ended) - onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var e = new Error('stream.unshift() after end event'); - stream.emit('error', e); - } else { - if (state.decoder && !addToFront && !encoding) - chunk = state.decoder.write(chunk); - - if (!addToFront) - state.reading = false; - - // if we want the data now, just emit it. - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) - state.buffer.unshift(chunk); - else - state.buffer.push(chunk); - - if (state.needReadable) - emitReadable(stream); - } - - maybeReadMore(stream, state); - } - } else if (!addToFront) { - state.reading = false; - } - - return needMoreData(state); -} - - - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && - (state.needReadable || - state.length < state.highWaterMark || - state.length === 0); -} - -// backwards compatibility. -Readable.prototype.setEncoding = function(enc) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; - -// Don't raise the hwm > 128MB -var MAX_HWM = 0x800000; -function roundUpToNextPowerOf2(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 - n--; - for (var p = 1; p < 32; p <<= 1) n |= n >> p; - n++; - } - return n; -} - -function howMuchToRead(n, state) { - if (state.length === 0 && state.ended) - return 0; - - if (state.objectMode) - return n === 0 ? 0 : 1; - - if (isNaN(n) || util.isNull(n)) { - // only flow one buffer at a time - if (state.flowing && state.buffer.length) - return state.buffer[0].length; - else - return state.length; - } - - if (n <= 0) - return 0; - - // If we're asking for more than the target buffer level, - // then raise the water mark. Bump up to the next highest - // power of 2, to prevent increasing it excessively in tiny - // amounts. - if (n > state.highWaterMark) - state.highWaterMark = roundUpToNextPowerOf2(n); - - // don't have that much. return null, unless we've ended. - if (n > state.length) { - if (!state.ended) { - state.needReadable = true; - return 0; - } else - return state.length; - } - - return n; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function(n) { - debug('read', n); - var state = this._readableState; - var nOrig = n; - - if (!util.isNumber(n) || n > 0) - state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && - state.needReadable && - (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) - endReadable(this); - else - emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) - endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } - - if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) - state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - } - - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (doRead && !state.reading) - n = howMuchToRead(nOrig, state); - - var ret; - if (n > 0) - ret = fromList(n, state); - else - ret = null; - - if (util.isNull(ret)) { - state.needReadable = true; - n = 0; - } - - state.length -= n; - - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (state.length === 0 && !state.ended) - state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended && state.length === 0) - endReadable(this); - - if (!util.isNull(ret)) - this.emit('data', ret); - - return ret; -}; - -function chunkInvalid(state, chunk) { - var er = null; - if (!util.isBuffer(chunk) && - !util.isString(chunk) && - !util.isNullOrUndefined(chunk) && - !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - - -function onEofChunk(stream, state) { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) - process.nextTick(function() { - emitReadable_(stream); - }); - else - emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(function() { - maybeReadMore_(stream, state); - }); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && - state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break; - else - len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function(n) { - this.emit('error', new Error('not implemented')); -}; - -Readable.prototype.pipe = function(dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && - dest !== process.stdout && - dest !== process.stderr; - - var endFn = doEnd ? onend : cleanup; - if (state.endEmitted) - process.nextTick(endFn); - else - src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable) { - debug('onunpipe'); - if (readable === src) { - cleanup(); - } - } - - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', cleanup); - src.removeListener('data', ondata); - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && - (!dest._writableState || dest._writableState.needDrain)) - ondrain(); - } - - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - if (false === ret) { - debug('false write response, pause', - src._readableState.awaitDrain); - src._readableState.awaitDrain++; - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EE.listenerCount(dest, 'error') === 0) - dest.emit('error', er); - } - // This is a brutally ugly hack to make sure that our error handler - // is attached before any userland ones. NEVER DO THIS. - if (!dest._events || !dest._events.error) - dest.on('error', onerror); - else if (isArray(dest._events.error)) - dest._events.error.unshift(onerror); - else - dest._events.error = [onerror, dest._events.error]; - - - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) - state.awaitDrain--; - if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - - -Readable.prototype.unpipe = function(dest) { - var state = this._readableState; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) - return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) - return this; - - if (!dest) - dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) - dest.emit('unpipe', this); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) - dests[i].emit('unpipe', this); - return this; - } - - // try to find the right one. - var i = indexOf(state.pipes, dest); - if (i === -1) - return this; - - state.pipes.splice(i, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) - state.pipes = state.pipes[0]; - - dest.emit('unpipe', this); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function(ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - // If listening to data, and it has not explicitly been paused, - // then call resume to start the flow of data on the next tick. - if (ev === 'data' && false !== this._readableState.flowing) { - this.resume(); - } - - if (ev === 'readable' && this.readable) { - var state = this._readableState; - if (!state.readableListening) { - state.readableListening = true; - state.emittedReadable = false; - state.needReadable = true; - if (!state.reading) { - var self = this; - process.nextTick(function() { - debug('readable nexttick read 0'); - self.read(0); - }); - } else if (state.length) { - emitReadable(this, state); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function() { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - if (!state.reading) { - debug('resume read 0'); - this.read(0); - } - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(function() { - resume_(stream, state); - }); - } -} - -function resume_(stream, state) { - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) - stream.read(0); -} - -Readable.prototype.pause = function() { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - if (state.flowing) { - do { - var chunk = stream.read(); - } while (null !== chunk && state.flowing); - } -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function(stream) { - var state = this._readableState; - var paused = false; - - var self = this; - stream.on('end', function() { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) - self.push(chunk); - } - - self.push(null); - }); - - stream.on('data', function(chunk) { - debug('wrapped data'); - if (state.decoder) - chunk = state.decoder.write(chunk); - if (!chunk || !state.objectMode && !chunk.length) - return; - - var ret = self.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (util.isFunction(stream[i]) && util.isUndefined(this[i])) { - this[i] = function(method) { return function() { - return stream[method].apply(stream, arguments); - }}(i); - } - } - - // proxy certain important events. - var events = ['error', 'close', 'destroy', 'pause', 'resume']; - forEach(events, function(ev) { - stream.on(ev, self.emit.bind(self, ev)); - }); - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - self._read = function(n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - - return self; -}; - - - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -function fromList(n, state) { - var list = state.buffer; - var length = state.length; - var stringMode = !!state.decoder; - var objectMode = !!state.objectMode; - var ret; - - // nothing in the list, definitely empty. - if (list.length === 0) - return null; - - if (length === 0) - ret = null; - else if (objectMode) - ret = list.shift(); - else if (!n || n >= length) { - // read it all, truncate the array. - if (stringMode) - ret = list.join(''); - else - ret = Buffer.concat(list, length); - list.length = 0; - } else { - // read just some of it. - if (n < list[0].length) { - // just take a part of the first list item. - // slice is the same for buffers and strings. - var buf = list[0]; - ret = buf.slice(0, n); - list[0] = buf.slice(n); - } else if (n === list[0].length) { - // first list is a perfect match - ret = list.shift(); - } else { - // complex case. - // we have enough to cover it, but it spans past the first buffer. - if (stringMode) - ret = ''; - else - ret = new Buffer(n); - - var c = 0; - for (var i = 0, l = list.length; i < l && c < n; i++) { - var buf = list[0]; - var cpy = Math.min(n - c, buf.length); - - if (stringMode) - ret += buf.slice(0, cpy); - else - buf.copy(ret, c, 0, cpy); - - if (cpy < buf.length) - list[0] = buf.slice(cpy); - else - list.shift(); - - c += cpy; - } - } - } - - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) - throw new Error('endReadable called on non-empty stream'); - - if (!state.endEmitted) { - state.ended = true; - process.nextTick(function() { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } - }); - } -} - -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} - -function indexOf (xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 905c5e4..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -module.exports = Transform; - -var Duplex = require('./_stream_duplex'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(Transform, Duplex); - - -function TransformState(options, stream) { - this.afterTransform = function(er, data) { - return afterTransform(stream, er, data); - }; - - this.needTransform = false; - this.transforming = false; - this.writecb = null; - this.writechunk = null; -} - -function afterTransform(stream, er, data) { - var ts = stream._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) - return stream.emit('error', new Error('no writecb in Transform class')); - - ts.writechunk = null; - ts.writecb = null; - - if (!util.isNullOrUndefined(data)) - stream.push(data); - - if (cb) - cb(er); - - var rs = stream._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - stream._read(rs.highWaterMark); - } -} - - -function Transform(options) { - if (!(this instanceof Transform)) - return new Transform(options); - - Duplex.call(this, options); - - this._transformState = new TransformState(options, this); - - // when the writable side finishes, then flush out anything remaining. - var stream = this; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - this.once('prefinish', function() { - if (util.isFunction(this._flush)) - this._flush(function(er) { - done(stream, er); - }); - else - done(stream); - }); -} - -Transform.prototype.push = function(chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function(chunk, encoding, cb) { - throw new Error('not implemented'); -}; - -Transform.prototype._write = function(chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || - rs.needReadable || - rs.length < rs.highWaterMark) - this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function(n) { - var ts = this._transformState; - - if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - - -function done(stream, er) { - if (er) - return stream.emit('error', er); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - var ws = stream._writableState; - var ts = stream._transformState; - - if (ws.length) - throw new Error('calling transform done when ws.length != 0'); - - if (ts.transforming) - throw new Error('calling transform done when still transforming'); - - return stream.push(null); -} diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index db8539c..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,477 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, cb), and it'll handle all -// the drain event emission and buffering. - -module.exports = Writable; - -/**/ -var Buffer = require('buffer').Buffer; -/**/ - -Writable.WritableState = WritableState; - - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Stream = require('stream'); - -util.inherits(Writable, Stream); - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; -} - -function WritableState(options, stream) { - var Duplex = require('./_stream_duplex'); - - options = options || {}; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var defaultHwm = options.objectMode ? 16 : 16 * 1024; - this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (stream instanceof Duplex) - this.objectMode = this.objectMode || !!options.writableObjectMode; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function(er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.buffer = []; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; -} - -function Writable(options) { - var Duplex = require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof Duplex)) - return new Writable(options); - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function() { - this.emit('error', new Error('Cannot pipe. Not readable.')); -}; - - -function writeAfterEnd(stream, state, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); -} - -// If we get something that is not a buffer, string, null, or undefined, -// and we're not in objectMode, then that's an error. -// Otherwise stream chunks are all considered to be of length=1, and the -// watermarks determine how many objects to keep in the buffer, rather than -// how many bytes or characters. -function validChunk(stream, state, chunk, cb) { - var valid = true; - if (!util.isBuffer(chunk) && - !util.isString(chunk) && - !util.isNullOrUndefined(chunk) && - !state.objectMode) { - var er = new TypeError('Invalid non-string/buffer chunk'); - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); - valid = false; - } - return valid; -} - -Writable.prototype.write = function(chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - if (util.isFunction(encoding)) { - cb = encoding; - encoding = null; - } - - if (util.isBuffer(chunk)) - encoding = 'buffer'; - else if (!encoding) - encoding = state.defaultEncoding; - - if (!util.isFunction(cb)) - cb = function() {}; - - if (state.ended) - writeAfterEnd(this, state, cb); - else if (validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function() { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function() { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && - !state.corked && - !state.finished && - !state.bufferProcessing && - state.buffer.length) - clearBuffer(this, state); - } -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && - state.decodeStrings !== false && - util.isString(chunk)) { - chunk = new Buffer(chunk, encoding); - } - return chunk; -} - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, chunk, encoding, cb) { - chunk = decodeChunk(state, chunk, encoding); - if (util.isBuffer(chunk)) - encoding = 'buffer'; - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) - state.needDrain = true; - - if (state.writing || state.corked) - state.buffer.push(new WriteReq(chunk, encoding, cb)); - else - doWrite(stream, state, false, len, chunk, encoding, cb); - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) - stream._writev(chunk, state.onwrite); - else - stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - if (sync) - process.nextTick(function() { - state.pendingcb--; - cb(er); - }); - else { - state.pendingcb--; - cb(er); - } - - stream._writableState.errorEmitted = true; - stream.emit('error', er); -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) - onwriteError(stream, state, sync, er, cb); - else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(stream, state); - - if (!finished && - !state.corked && - !state.bufferProcessing && - state.buffer.length) { - clearBuffer(stream, state); - } - - if (sync) { - process.nextTick(function() { - afterWrite(stream, state, finished, cb); - }); - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) - onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - - if (stream._writev && state.buffer.length > 1) { - // Fast case, write everything using _writev() - var cbs = []; - for (var c = 0; c < state.buffer.length; c++) - cbs.push(state.buffer[c].callback); - - // count the one we are adding, as well. - // TODO(isaacs) clean this up - state.pendingcb++; - doWrite(stream, state, true, state.length, state.buffer, '', function(err) { - for (var i = 0; i < cbs.length; i++) { - state.pendingcb--; - cbs[i](err); - } - }); - - // Clear buffer - state.buffer = []; - } else { - // Slow case, write chunks one-by-one - for (var c = 0; c < state.buffer.length; c++) { - var entry = state.buffer[c]; - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, false, len, chunk, encoding, cb); - - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - c++; - break; - } - } - - if (c < state.buffer.length) - state.buffer = state.buffer.slice(c); - else - state.buffer.length = 0; - } - - state.bufferProcessing = false; -} - -Writable.prototype._write = function(chunk, encoding, cb) { - cb(new Error('not implemented')); - -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function(chunk, encoding, cb) { - var state = this._writableState; - - if (util.isFunction(chunk)) { - cb = chunk; - chunk = null; - encoding = null; - } else if (util.isFunction(encoding)) { - cb = encoding; - encoding = null; - } - - if (!util.isNullOrUndefined(chunk)) - this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) - endWritable(this, state, cb); -}; - - -function needFinish(stream, state) { - return (state.ending && - state.length === 0 && - !state.finished && - !state.writing); -} - -function prefinish(stream, state) { - if (!state.prefinished) { - state.prefinished = true; - stream.emit('prefinish'); - } -} - -function finishMaybe(stream, state) { - var need = needFinish(stream, state); - if (need) { - if (state.pendingcb === 0) { - prefinish(stream, state); - state.finished = true; - stream.emit('finish'); - } else - prefinish(stream, state); - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) - process.nextTick(cb); - else - stream.once('finish', cb); - } - state.ended = true; -} diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/package.json b/node_modules/level-iterator-stream/node_modules/readable-stream/package.json deleted file mode 100644 index 4caffdb..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "readable-stream@^1.0.33", - "/Users/jbaylina/git/MVP/node_modules/level-iterator-stream" - ] - ], - "_from": "readable-stream@>=1.0.33 <2.0.0", - "_id": "readable-stream@1.1.14", - "_inCache": true, - "_installable": true, - "_location": "/level-iterator-stream/readable-stream", - "_nodeVersion": "5.10.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/readable-stream-1.1.14.tgz_1460563293219_0.5682175166439265" - }, - "_npmUser": { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - "_npmVersion": "3.8.3", - "_phantomChildren": {}, - "_requested": { - "name": "readable-stream", - "raw": "readable-stream@^1.0.33", - "rawSpec": "^1.0.33", - "scope": null, - "spec": ">=1.0.33 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/level-iterator-stream" - ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "_shasum": "7cf4c54ef648e3813084c636dd2079e166c081d9", - "_shrinkwrap": null, - "_spec": "readable-stream@^1.0.33", - "_where": "/Users/jbaylina/git/MVP/node_modules/level-iterator-stream", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me/" - }, - "browser": { - "util": false - }, - "bugs": { - "url": "https://github.com/isaacs/readable-stream/issues" - }, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - }, - "description": "Streams3, a user-land copy of the stream library from Node.js v0.11.x", - "devDependencies": { - "tap": "~0.2.6" - }, - "directories": {}, - "dist": { - "shasum": "7cf4c54ef648e3813084c636dd2079e166c081d9", - "tarball": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - }, - "gitHead": "52550840cb1d6e8a98ef9a909a4bea360bc6f7da", - "homepage": "https://github.com/isaacs/readable-stream#readme", - "keywords": [ - "readable", - "stream", - "pipe" - ], - "license": "MIT", - "main": "readable.js", - "maintainers": [ - { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - { - "email": "nathan@tootallnate.net", - "name": "tootallnate" - }, - { - "email": "rod@vagg.org", - "name": "rvagg" - }, - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - } - ], - "name": "readable-stream", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/readable-stream.git" - }, - "scripts": { - "test": "tap test/simple/*.js" - }, - "version": "1.1.14" -} diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/passthrough.js b/node_modules/level-iterator-stream/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/readable.js b/node_modules/level-iterator-stream/node_modules/readable-stream/readable.js deleted file mode 100644 index 2a8b5c6..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,10 +0,0 @@ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = require('stream'); -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); -if (!process.browser && process.env.READABLE_STREAM === 'disable') { - module.exports = require('stream'); -} diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/transform.js b/node_modules/level-iterator-stream/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f0..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/level-iterator-stream/node_modules/readable-stream/writable.js b/node_modules/level-iterator-stream/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efd..0000000 --- a/node_modules/level-iterator-stream/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/level-iterator-stream/node_modules/xtend/.jshintrc b/node_modules/level-iterator-stream/node_modules/xtend/.jshintrc deleted file mode 100644 index 77887b5..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/.jshintrc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "maxdepth": 4, - "maxstatements": 200, - "maxcomplexity": 12, - "maxlen": 80, - "maxparams": 5, - - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": false, - "noarg": true, - "noempty": true, - "nonew": true, - "undef": true, - "unused": "vars", - "trailing": true, - - "quotmark": true, - "expr": true, - "asi": true, - - "browser": false, - "esnext": true, - "devel": false, - "node": false, - "nonstandard": false, - - "predef": ["require", "module", "__dirname", "__filename"] -} diff --git a/node_modules/level-iterator-stream/node_modules/xtend/.npmignore b/node_modules/level-iterator-stream/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/level-iterator-stream/node_modules/xtend/LICENCE b/node_modules/level-iterator-stream/node_modules/xtend/LICENCE deleted file mode 100644 index 1a14b43..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/level-iterator-stream/node_modules/xtend/Makefile b/node_modules/level-iterator-stream/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/level-iterator-stream/node_modules/xtend/README.md b/node_modules/level-iterator-stream/node_modules/xtend/README.md deleted file mode 100644 index 093cb29..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# xtend - -[![browser support][3]][4] - -[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Extend like a boss - -xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. - -## Examples - -```js -var extend = require("xtend") - -// extend returns a new object. Does not mutate arguments -var combination = extend({ - a: "a", - b: 'c' -}, { - b: "b" -}) -// { a: "a", b: "b" } -``` - -## Stability status: Locked - -## MIT Licenced - - - [3]: http://ci.testling.com/Raynos/xtend.png - [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/level-iterator-stream/node_modules/xtend/immutable.js b/node_modules/level-iterator-stream/node_modules/xtend/immutable.js deleted file mode 100644 index 94889c9..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/immutable.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/level-iterator-stream/node_modules/xtend/mutable.js b/node_modules/level-iterator-stream/node_modules/xtend/mutable.js deleted file mode 100644 index 72debed..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/mutable.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/level-iterator-stream/node_modules/xtend/package.json b/node_modules/level-iterator-stream/node_modules/xtend/package.json deleted file mode 100644 index 89f3033..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "xtend@^4.0.0", - "/Users/jbaylina/git/MVP/node_modules/level-iterator-stream" - ] - ], - "_from": "xtend@>=4.0.0 <5.0.0", - "_id": "xtend@4.0.1", - "_inCache": true, - "_installable": true, - "_location": "/level-iterator-stream/xtend", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - "_npmVersion": "2.14.1", - "_phantomChildren": {}, - "_requested": { - "name": "xtend", - "raw": "xtend@^4.0.0", - "rawSpec": "^4.0.0", - "scope": null, - "spec": ">=4.0.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/level-iterator-stream" - ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "_shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "_shrinkwrap": null, - "_spec": "xtend@^4.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/level-iterator-stream", - "author": { - "email": "raynos2@gmail.com", - "name": "Raynos" - }, - "bugs": { - "email": "raynos2@gmail.com", - "url": "https://github.com/Raynos/xtend/issues" - }, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Matt Esch" - } - ], - "dependencies": {}, - "description": "extend like a boss", - "devDependencies": { - "tape": "~1.1.0" - }, - "directories": {}, - "dist": { - "shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "tarball": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - }, - "engines": { - "node": ">=0.4" - }, - "gitHead": "23dc302a89756da89c1897bc732a752317e35390", - "homepage": "https://github.com/Raynos/xtend", - "keywords": [ - "extend", - "merge", - "options", - "opts", - "object", - "array" - ], - "license": "MIT", - "main": "immutable", - "maintainers": [ - { - "email": "raynos2@gmail.com", - "name": "raynos" - } - ], - "name": "xtend", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xtend.git" - }, - "scripts": { - "test": "node test" - }, - "testling": { - "browsers": [ - "ie/7..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ], - "files": "test.js" - }, - "version": "4.0.1" -} diff --git a/node_modules/level-iterator-stream/node_modules/xtend/test.js b/node_modules/level-iterator-stream/node_modules/xtend/test.js deleted file mode 100644 index 093a2b0..0000000 --- a/node_modules/level-iterator-stream/node_modules/xtend/test.js +++ /dev/null @@ -1,83 +0,0 @@ -var test = require("tape") -var extend = require("./") -var mutableExtend = require("./mutable") - -test("merge", function(assert) { - var a = { a: "foo" } - var b = { b: "bar" } - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("replace", function(assert) { - var a = { a: "foo" } - var b = { a: "bar" } - - assert.deepEqual(extend(a, b), { a: "bar" }) - assert.end() -}) - -test("undefined", function(assert) { - var a = { a: undefined } - var b = { b: "foo" } - - assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) - assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) - assert.end() -}) - -test("handle 0", function(assert) { - var a = { a: "default" } - var b = { a: 0 } - - assert.deepEqual(extend(a, b), { a: 0 }) - assert.deepEqual(extend(b, a), { a: "default" }) - assert.end() -}) - -test("is immutable", function (assert) { - var record = {} - - extend(record, { foo: "bar" }) - assert.equal(record.foo, undefined) - assert.end() -}) - -test("null as argument", function (assert) { - var a = { foo: "bar" } - var b = null - var c = void 0 - - assert.deepEqual(extend(b, a, c), { foo: "bar" }) - assert.end() -}) - -test("mutable", function (assert) { - var a = { foo: "bar" } - - mutableExtend(a, { bar: "baz" }) - - assert.equal(a.bar, "baz") - assert.end() -}) - -test("null prototype", function(assert) { - var a = { a: "foo" } - var b = Object.create(null) - b.b = "bar"; - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("null prototype mutable", function (assert) { - var a = { foo: "bar" } - var b = Object.create(null) - b.bar = "baz"; - - mutableExtend(a, b) - - assert.equal(a.bar, "baz") - assert.end() -}) diff --git a/node_modules/level-iterator-stream/package.json b/node_modules/level-iterator-stream/package.json deleted file mode 100644 index e045256..0000000 --- a/node_modules/level-iterator-stream/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_args": [ - [ - "level-iterator-stream@~1.3.0", - "/Users/jbaylina/git/MVP/node_modules/levelup" - ] - ], - "_from": "level-iterator-stream@>=1.3.0 <1.4.0", - "_id": "level-iterator-stream@1.3.1", - "_inCache": true, - "_installable": true, - "_location": "/level-iterator-stream", - "_nodeVersion": "3.0.0", - "_npmUser": { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - "_npmVersion": "2.13.3", - "_phantomChildren": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - }, - "_requested": { - "name": "level-iterator-stream", - "raw": "level-iterator-stream@~1.3.0", - "rawSpec": "~1.3.0", - "scope": null, - "spec": ">=1.3.0 <1.4.0", - "type": "range" - }, - "_requiredBy": [ - "/levelup" - ], - "_resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "_shasum": "e43b78b1a8143e6fa97a4f485eb8ea530352f2ed", - "_shrinkwrap": null, - "_spec": "level-iterator-stream@~1.3.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/levelup", - "bugs": { - "url": "https://github.com/level/iterator-stream/issues" - }, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "description": "Turn a leveldown iterator into a readable stream", - "devDependencies": { - "abstract-leveldown": "^2.1.0", - "level-codec": "^6.0.0", - "leveldown": "^0.10.4", - "tape": "^3.5.0", - "through2": "^0.6.3" - }, - "directories": {}, - "dist": { - "shasum": "e43b78b1a8143e6fa97a4f485eb8ea530352f2ed", - "tarball": "http://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz" - }, - "gitHead": "5dece2e356007cb42a6f1248869ca6489e2023d2", - "homepage": "https://github.com/level/iterator-stream#readme", - "license": "MIT", - "maintainers": [ - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - } - ], - "name": "level-iterator-stream", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/level/iterator-stream.git" - }, - "scripts": { - "test": "make test" - }, - "version": "1.3.1" -} diff --git a/node_modules/level-iterator-stream/test.js b/node_modules/level-iterator-stream/test.js deleted file mode 100644 index 4f15488..0000000 --- a/node_modules/level-iterator-stream/test.js +++ /dev/null @@ -1,76 +0,0 @@ -var test = require('tape'); -var leveldown = require('leveldown'); -var iteratorStream = require('./'); -var through2 = require('through2'); -var abstract = require('abstract-leveldown'); -var Codec = require('level-codec'); -var EncodingError = require('level-errors').EncodingError; - -var db; -var data = [ - { type: 'put', key: 'foobatch1', value: 'bar1' }, - { type: 'put', key: 'foobatch2', value: 'bar2' }, - { type: 'put', key: 'foobatch3', value: 'bar3' } -]; - -test('setup', function(t){ - db = leveldown(__dirname + '/db-test'); - db.open(function(err){ - t.error(err); - db.batch(data, function(err){ - t.error(err); - t.end(); - }); - }); -}); - -test('simple', function(t){ - var idx = 0; - var stream = iteratorStream(db.iterator()); - stream.pipe(through2.obj(function(kv, _, done){ - t.ok(Buffer.isBuffer(kv.key)); - t.ok(Buffer.isBuffer(kv.value)); - t.equal(kv.key.toString(), data[idx].key); - t.equal(kv.value.toString(), data[idx].value); - idx++; - done(); - }, function(){ - t.equal(idx, data.length); - stream.on('close', function(){ - t.end(); - }); - })); -}); - -test('destroy', function(t){ - var stream = iteratorStream(db.iterator()); - stream.on('close', t.end.bind(t)); - stream.destroy(); -}); - -test('decoder', function(t){ - var codec = new Codec({ valueEncoding: 'binary' }); - var stream = iteratorStream(db.iterator(), { - decoder: codec.createStreamDecoder({ values: true }) - }); - stream.once('data', function(value){ - t.ok(Buffer.isBuffer(value)); - t.equal(value.toString(), 'bar1'); - t.end(); - }); -}); - -test('decoder error', function(t){ - t.plan(2); - var codec = new Codec({ valueEncoding: 'json' }); - var stream = iteratorStream(db.iterator(), { - decoder: codec.createStreamDecoder({ values: true }) - }); - stream.once('error', function(err){ - t.ok(err instanceof EncodingError); - }); - stream.once('close', function(){ - t.ok(true); - }); - stream.on('data', function(){}); -}); diff --git a/node_modules/level-ws/.jshintrc b/node_modules/level-ws/.jshintrc deleted file mode 100644 index 7937650..0000000 --- a/node_modules/level-ws/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "predef": [ ] - , "bitwise": false - , "camelcase": false - , "curly": false - , "eqeqeq": false - , "forin": false - , "immed": false - , "latedef": false - , "noarg": true - , "noempty": true - , "nonew": true - , "plusplus": false - , "quotmark": true - , "regexp": false - , "undef": true - , "unused": true - , "strict": false - , "trailing": true - , "maxlen": 120 - , "asi": true - , "boss": true - , "debug": true - , "eqnull": true - , "esnext": true - , "evil": true - , "expr": true - , "funcscope": false - , "globalstrict": false - , "iterator": false - , "lastsemic": true - , "laxbreak": true - , "laxcomma": true - , "loopfunc": true - , "multistr": false - , "onecase": false - , "proto": false - , "regexdash": false - , "scripturl": true - , "smarttabs": false - , "shadow": false - , "sub": true - , "supernew": false - , "validthis": true - , "browser": true - , "couch": false - , "devel": false - , "dojo": false - , "mootools": false - , "node": true - , "nonstandard": true - , "prototypejs": false - , "rhino": false - , "worker": true - , "wsh": false - , "nomen": false - , "onevar": true - , "passfail": false -} \ No newline at end of file diff --git a/node_modules/level-ws/.npmignore b/node_modules/level-ws/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/level-ws/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/level-ws/LICENSE b/node_modules/level-ws/LICENSE deleted file mode 100644 index 76d07a0..0000000 --- a/node_modules/level-ws/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -Copyright 2012, Rod Vagg (the "Original Author") -All rights reserved. - -MIT +no-false-attribs License - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -Distributions of all or part of the Software intended to be used -by the recipients as they would use the unmodified Software, -containing modifications that substantially alter, remove, or -disable functionality of the Software, outside of the documented -configuration mechanisms provided by the Software, shall be -modified such that the Original Author's bug reporting email -addresses and urls are either replaced with the contact information -of the parties responsible for the changes, or removed entirely. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -Except where noted, this license applies to any and all software -programs and associated documentation files created by the -Original Author, when distributed with the Software. \ No newline at end of file diff --git a/node_modules/level-ws/README.md b/node_modules/level-ws/README.md deleted file mode 100644 index 4e2d252..0000000 --- a/node_modules/level-ws/README.md +++ /dev/null @@ -1,141 +0,0 @@ -level-ws -======== - -![LevelDB Logo](https://twimg0-a.akamaihd.net/profile_images/3360574989/92fc472928b444980408147e5e5db2fa_bigger.png) - -**A basic WriteStream implementation for [LevelUP](https://github.com/rvagg/node-levelup)** - -[![NPM](https://nodei.co/npm/level-ws.png?downloads)](https://nodei.co/npm/level-ws/) - -**level-ws** provides the most basic general-case WriteStream for LevelUP. It was extracted from the core LevelUP at version 0.18.0 but is bundled with [level](https://github.com/Level/level) and similar packages as it provides a general symmetry to the ReadStream in LevelUP. - -**level-ws** is not a high-performance WriteStream, if your benchmarking shows that your particular usage pattern and data types do not perform well with this WriteStream then you should try one of the alternative WriteStreams available for LevelUP that are optimised for different use-cases. - -## Alternative WriteStream packages - -***TODO*** - -## Usage - -To use **level-ws** you simply need to wrap a LevelUP instance and you get a `createWriteStream()` method on it. - -```js -var level = require('level') -var levelws = require('level-ws') -var db = level('/path/to/db') - -db = levelws(db) -db.createWriteStream() // ... -``` - -### db.createWriteStream([options]) - -A **WriteStream** can be obtained by calling the `createWriteStream()` method. The resulting stream is a Node.js **streams2** [Writable](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_writable_1) which operates in **objectMode**, accepting objects with `'key'` and `'value'` pairs on its `write()` method. - -The WriteStream will buffer writes and submit them as a `batch()` operations where writes occur *within the same tick*. - -```js -var ws = db.createWriteStream() - -ws.on('error', function (err) { - console.log('Oh my!', err) -}) -ws.on('close', function () { - console.log('Stream closed') -}) - -ws.write({ key: 'name', value: 'Yuri Irsenovich Kim' }) -ws.write({ key: 'dob', value: '16 February 1941' }) -ws.write({ key: 'spouse', value: 'Kim Young-sook' }) -ws.write({ key: 'occupation', value: 'Clown' }) -ws.end() -``` - -The standard `write()`, `end()`, `destroy()` and `destroySoon()` methods are implemented on the WriteStream. `'drain'`, `'error'`, `'close'` and `'pipe'` events are emitted. - -You can specify encodings both for the whole stream and individual entries: - -To set the encoding for the whole stream, provide an options object as the first parameter to `createWriteStream()` with `'keyEncoding'` and/or `'valueEncoding'`. - -To set the encoding for an individual entry: - -```js -writeStream.write({ - key : new Buffer([1, 2, 3]) - , value : { some: 'json' } - , keyEncoding : 'binary' - , valueEncoding : 'json' -}) -``` - -#### write({ type: 'put' }) - -If individual `write()` operations are performed with a `'type'` property of `'del'`, they will be passed on as `'del'` operations to the batch. - -```js -var ws = db.createWriteStream() - -ws.on('error', function (err) { - console.log('Oh my!', err) -}) -ws.on('close', function () { - console.log('Stream closed') -}) - -ws.write({ type: 'del', key: 'name' }) -ws.write({ type: 'del', key: 'dob' }) -ws.write({ type: 'put', key: 'spouse' }) -ws.write({ type: 'del', key: 'occupation' }) -ws.end() -``` - -#### db.createWriteStream({ type: 'del' }) - -If the *WriteStream* is created with a `'type'` option of `'del'`, all `write()` operations will be interpreted as `'del'`, unless explicitly specified as `'put'`. - -```js -var ws = db.createWriteStream({ type: 'del' }) - -ws.on('error', function (err) { - console.log('Oh my!', err) -}) -ws.on('close', function () { - console.log('Stream closed') -}) - -ws.write({ key: 'name' }) -ws.write({ key: 'dob' }) -// but it can be overridden -ws.write({ type: 'put', key: 'spouse', value: 'Ri Sol-ju' }) -ws.write({ key: 'occupation' }) -ws.end() -``` - - -### Contributors - -**level-ws** is only possible due to the excellent work of the following contributors: - - - - - - - - - - - - - - - -
    Rod VaggGitHub/rvaggTwitter/@rvagg
    John ChesleyGitHub/cheslesTwitter/@chesles
    Jake VerbatenGitHub/raynosTwitter/@raynos2
    Dominic TarrGitHub/dominictarrTwitter/@dominictarr
    Max OgdenGitHub/maxogdenTwitter/@maxogden
    Lars-Magnus SkogGitHub/ralphtheninjaTwitter/@ralphtheninja
    David BjörklundGitHub/keslaTwitter/@david_bjorklund
    Julian GruberGitHub/juliangruberTwitter/@juliangruber
    Paolo FragomeniGitHub/hij1nxTwitter/@hij1nx
    Anton WhalleyGitHub/No9Twitter/@antonwhalley
    Matteo CollinaGitHub/mcollinaTwitter/@matteocollina
    Pedro TeixeiraGitHub/pgteTwitter/@pgte
    James HallidayGitHub/substackTwitter/@substack
    - -
    -Licence & copyright -------------------- - -Copyright (c) 2012-2013 **level-ws** contributors (listed above). - -**level-ws** is licensed under an MIT +no-false-attribs license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details. diff --git a/node_modules/level-ws/level-ws.js b/node_modules/level-ws/level-ws.js deleted file mode 100644 index 4f4e0f8..0000000 --- a/node_modules/level-ws/level-ws.js +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright (c) 2013 LevelUP contributors - * See list at - * MIT +no-false-attribs License - * - */ - -var Writable = require('stream').Writable || require('readable-stream').Writable - , inherits = require('util').inherits - , extend = require('xtend') - - , defaultOptions = { - type : 'put' - , keyEncoding : 'utf8' - , valueEncoding : 'utf8' - } - - // copied from LevelUP - , encodingNames = [ - 'hex' - , 'utf8' - , 'utf-8' - , 'ascii' - , 'binary' - , 'base64' - , 'ucs2' - , 'ucs-2' - , 'utf16le' - , 'utf-16le' - ] - - // copied from LevelUP - , encodingOpts = (function () { - var eo = {} - encodingNames.forEach(function (e) { - eo[e] = { valueEncoding : e } - }) - return eo - }()) - -// copied from LevelUP -function getOptions (levelup, options) { - var s = typeof options == 'string' // just an encoding - if (!s && options && options.encoding && !options.valueEncoding) - options.valueEncoding = options.encoding - return extend( - (levelup && levelup.options) || {} - , s ? encodingOpts[options] || encodingOpts[defaultOptions.valueEncoding] - : options - ) -} - -function WriteStream (options, db) { - if (!(this instanceof WriteStream)) - return new WriteStream(options, db) - - Writable.call(this, { objectMode: true }) - this._options = extend(defaultOptions, getOptions(db, options)) - this._db = db - this._buffer = [] - this.writable = true - this.readable = false - - var self = this - this.on('finish', function f () { - if (self._buffer && self._buffer.length) { - return self._flush(f) - } - self.writable = false - self.emit('close') - }) -} - -inherits(WriteStream, Writable) - -WriteStream.prototype._write = function write (d, enc, next) { - var self = this - if (self._destroyed) - return - if (!self._db.isOpen()) - return self._db.once('ready', function () { - write.call(self, d, enc, next) - }) - - if (self._options.maxBufferLength && - self._buffer.length > self._options.maxBufferLength) { - self.once('_flush', next) - } - else { - if (self._buffer.length === 0) - process.nextTick(function () { self._flush() }) - self._buffer.push(d) - next() - } -} - -WriteStream.prototype._flush = function (f) { - var self = this - , buffer = self._buffer - - if (self._destroyed || !buffer) return - - if (!self._db.isOpen()) { - return self._db.on('ready', function () { self._flush(f) }) - } - self._buffer = [] - - self._db.batch(buffer.map(function (d) { - return { - type : d.type || self._options.type - , key : d.key - , value : d.value - , keyEncoding : d.keyEncoding || self._options.keyEncoding - , valueEncoding : d.valueEncoding - || d.encoding - || self._options.valueEncoding - } - }), cb) - - function cb (err) { - if (err) { - self.writable = false - self.emit('error', err) - } - else { - if (f) f() - self.emit('_flush') - } - } -} - -WriteStream.prototype.toString = function () { - return 'LevelUP.WriteStream' -} - -WriteStream.prototype.destroy = function () { - if (this._destroyed) return - this._buffer = null - this._destroyed = true - this.writable = false - this.emit('close') -} - -WriteStream.prototype.destroySoon = function () { - this.end() -} - -module.exports = function (db) { - db.writeStream = db.createWriteStream = function (options) { - return new WriteStream(options, db) - } - return db -} - -module.exports.WriteStream = WriteStream \ No newline at end of file diff --git a/node_modules/level-ws/node_modules/readable-stream/.npmignore b/node_modules/level-ws/node_modules/readable-stream/.npmignore deleted file mode 100644 index 38344f8..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js \ No newline at end of file diff --git a/node_modules/level-ws/node_modules/readable-stream/LICENSE b/node_modules/level-ws/node_modules/readable-stream/LICENSE deleted file mode 100644 index e3d4e69..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/node_modules/level-ws/node_modules/readable-stream/README.md b/node_modules/level-ws/node_modules/readable-stream/README.md deleted file mode 100644 index 3fb3e80..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# readable-stream - -***Node-core streams for userland*** - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - -This package is a mirror of the Streams2 and Streams3 implementations in Node-core. - -If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core. - -**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12. - -**readable-stream** uses proper patch-level versioning so if you pin to `"~1.0.0"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `"~1.1.0"` - diff --git a/node_modules/level-ws/node_modules/readable-stream/duplex.js b/node_modules/level-ws/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/level-ws/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index b513d61..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -module.exports = Duplex; - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -} -/**/ - - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); - -util.inherits(Duplex, Readable); - -forEach(objectKeys(Writable.prototype), function(method) { - if (!Duplex.prototype[method]) - Duplex.prototype[method] = Writable.prototype[method]; -}); - -function Duplex(options) { - if (!(this instanceof Duplex)) - return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) - this.readable = false; - - if (options && options.writable === false) - this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) - this.allowHalfOpen = false; - - this.once('end', onend); -} - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) - return; - - // no more data can be written. - // But allow more writes to happen in this tick. - process.nextTick(this.end.bind(this)); -} - -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} diff --git a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/level-ws/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 895ca50..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) - return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function(chunk, encoding, cb) { - cb(null, chunk); -}; diff --git a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/level-ws/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 6307220..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,982 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -module.exports = Readable; - -/**/ -var isArray = require('isarray'); -/**/ - - -/**/ -var Buffer = require('buffer').Buffer; -/**/ - -Readable.ReadableState = ReadableState; - -var EE = require('events').EventEmitter; - -/**/ -if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -var Stream = require('stream'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var StringDecoder; - -util.inherits(Readable, Stream); - -function ReadableState(options, stream) { - options = options || {}; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.buffer = []; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = false; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // In streams that never have any data, and do push(null) right away, - // the consumer can miss the 'end' event if they do some I/O before - // consuming the stream. So, we don't emit('end') until some reading - // happens. - this.calledRead = false; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, becuase any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - if (!(this instanceof Readable)) - return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - Stream.call(this); -} - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function(chunk, encoding) { - var state = this._readableState; - - if (typeof chunk === 'string' && !state.objectMode) { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = new Buffer(chunk, encoding); - encoding = ''; - } - } - - return readableAddChunk(this, state, chunk, encoding, false); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function(chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); -}; - -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (chunk === null || chunk === undefined) { - state.reading = false; - if (!state.ended) - onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var e = new Error('stream.unshift() after end event'); - stream.emit('error', e); - } else { - if (state.decoder && !addToFront && !encoding) - chunk = state.decoder.write(chunk); - - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) { - state.buffer.unshift(chunk); - } else { - state.reading = false; - state.buffer.push(chunk); - } - - if (state.needReadable) - emitReadable(stream); - - maybeReadMore(stream, state); - } - } else if (!addToFront) { - state.reading = false; - } - - return needMoreData(state); -} - - - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && - (state.needReadable || - state.length < state.highWaterMark || - state.length === 0); -} - -// backwards compatibility. -Readable.prototype.setEncoding = function(enc) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; -}; - -// Don't raise the hwm > 128MB -var MAX_HWM = 0x800000; -function roundUpToNextPowerOf2(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 - n--; - for (var p = 1; p < 32; p <<= 1) n |= n >> p; - n++; - } - return n; -} - -function howMuchToRead(n, state) { - if (state.length === 0 && state.ended) - return 0; - - if (state.objectMode) - return n === 0 ? 0 : 1; - - if (n === null || isNaN(n)) { - // only flow one buffer at a time - if (state.flowing && state.buffer.length) - return state.buffer[0].length; - else - return state.length; - } - - if (n <= 0) - return 0; - - // If we're asking for more than the target buffer level, - // then raise the water mark. Bump up to the next highest - // power of 2, to prevent increasing it excessively in tiny - // amounts. - if (n > state.highWaterMark) - state.highWaterMark = roundUpToNextPowerOf2(n); - - // don't have that much. return null, unless we've ended. - if (n > state.length) { - if (!state.ended) { - state.needReadable = true; - return 0; - } else - return state.length; - } - - return n; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function(n) { - var state = this._readableState; - state.calledRead = true; - var nOrig = n; - var ret; - - if (typeof n !== 'number' || n > 0) - state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && - state.needReadable && - (state.length >= state.highWaterMark || state.ended)) { - emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - ret = null; - - // In cases where the decoder did not receive enough data - // to produce a full chunk, then immediately received an - // EOF, state.buffer will contain [, ]. - // howMuchToRead will see this and coerce the amount to - // read to zero (because it's looking at the length of the - // first in state.buffer), and we'll end up here. - // - // This can only happen via state.decoder -- no other venue - // exists for pushing a zero-length chunk into state.buffer - // and triggering this behavior. In this case, we return our - // remaining data and end the stream, if appropriate. - if (state.length > 0 && state.decoder) { - ret = fromList(n, state); - state.length -= ret.length; - } - - if (state.length === 0) - endReadable(this); - - return ret; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - - // if we currently have less than the highWaterMark, then also read some - if (state.length - n <= state.highWaterMark) - doRead = true; - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) - doRead = false; - - if (doRead) { - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) - state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - } - - // If _read called its callback synchronously, then `reading` - // will be false, and we need to re-evaluate how much data we - // can return to the user. - if (doRead && !state.reading) - n = howMuchToRead(nOrig, state); - - if (n > 0) - ret = fromList(n, state); - else - ret = null; - - if (ret === null) { - state.needReadable = true; - n = 0; - } - - state.length -= n; - - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (state.length === 0 && !state.ended) - state.needReadable = true; - - // If we happened to read() exactly the remaining amount in the - // buffer, and the EOF has been seen at this point, then make sure - // that we emit 'end' on the very next tick. - if (state.ended && !state.endEmitted && state.length === 0) - endReadable(this); - - return ret; -}; - -function chunkInvalid(state, chunk) { - var er = null; - if (!Buffer.isBuffer(chunk) && - 'string' !== typeof chunk && - chunk !== null && - chunk !== undefined && - !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - - -function onEofChunk(stream, state) { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // if we've ended and we have some data left, then emit - // 'readable' now to make sure it gets picked up. - if (state.length > 0) - emitReadable(stream); - else - endReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (state.emittedReadable) - return; - - state.emittedReadable = true; - if (state.sync) - process.nextTick(function() { - emitReadable_(stream); - }); - else - emitReadable_(stream); -} - -function emitReadable_(stream) { - stream.emit('readable'); -} - - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(function() { - maybeReadMore_(stream, state); - }); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && - state.length < state.highWaterMark) { - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break; - else - len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function(n) { - this.emit('error', new Error('not implemented')); -}; - -Readable.prototype.pipe = function(dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && - dest !== process.stdout && - dest !== process.stderr; - - var endFn = doEnd ? onend : cleanup; - if (state.endEmitted) - process.nextTick(endFn); - else - src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable) { - if (readable !== src) return; - cleanup(); - } - - function onend() { - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - function cleanup() { - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', cleanup); - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (!dest._writableState || dest._writableState.needDrain) - ondrain(); - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - unpipe(); - dest.removeListener('error', onerror); - if (EE.listenerCount(dest, 'error') === 0) - dest.emit('error', er); - } - // This is a brutally ugly hack to make sure that our error handler - // is attached before any userland ones. NEVER DO THIS. - if (!dest._events || !dest._events.error) - dest.on('error', onerror); - else if (isArray(dest._events.error)) - dest._events.error.unshift(onerror); - else - dest._events.error = [onerror, dest._events.error]; - - - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - // the handler that waits for readable events after all - // the data gets sucked out in flow. - // This would be easier to follow with a .once() handler - // in flow(), but that is too slow. - this.on('readable', pipeOnReadable); - - state.flowing = true; - process.nextTick(function() { - flow(src); - }); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function() { - var dest = this; - var state = src._readableState; - state.awaitDrain--; - if (state.awaitDrain === 0) - flow(src); - }; -} - -function flow(src) { - var state = src._readableState; - var chunk; - state.awaitDrain = 0; - - function write(dest, i, list) { - var written = dest.write(chunk); - if (false === written) { - state.awaitDrain++; - } - } - - while (state.pipesCount && null !== (chunk = src.read())) { - - if (state.pipesCount === 1) - write(state.pipes, 0, null); - else - forEach(state.pipes, write); - - src.emit('data', chunk); - - // if anyone needs a drain, then we have to wait for that. - if (state.awaitDrain > 0) - return; - } - - // if every destination was unpiped, either before entering this - // function, or in the while loop, then stop flowing. - // - // NB: This is a pretty rare edge case. - if (state.pipesCount === 0) { - state.flowing = false; - - // if there were data event listeners added, then switch to old mode. - if (EE.listenerCount(src, 'data') > 0) - emitDataEvents(src); - return; - } - - // at this point, no one needed a drain, so we just ran out of data - // on the next readable event, start it over again. - state.ranOut = true; -} - -function pipeOnReadable() { - if (this._readableState.ranOut) { - this._readableState.ranOut = false; - flow(this); - } -} - - -Readable.prototype.unpipe = function(dest) { - var state = this._readableState; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) - return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) - return this; - - if (!dest) - dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - this.removeListener('readable', pipeOnReadable); - state.flowing = false; - if (dest) - dest.emit('unpipe', this); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - this.removeListener('readable', pipeOnReadable); - state.flowing = false; - - for (var i = 0; i < len; i++) - dests[i].emit('unpipe', this); - return this; - } - - // try to find the right one. - var i = indexOf(state.pipes, dest); - if (i === -1) - return this; - - state.pipes.splice(i, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) - state.pipes = state.pipes[0]; - - dest.emit('unpipe', this); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function(ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - if (ev === 'data' && !this._readableState.flowing) - emitDataEvents(this); - - if (ev === 'readable' && this.readable) { - var state = this._readableState; - if (!state.readableListening) { - state.readableListening = true; - state.emittedReadable = false; - state.needReadable = true; - if (!state.reading) { - this.read(0); - } else if (state.length) { - emitReadable(this, state); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function() { - emitDataEvents(this); - this.read(0); - this.emit('resume'); -}; - -Readable.prototype.pause = function() { - emitDataEvents(this, true); - this.emit('pause'); -}; - -function emitDataEvents(stream, startPaused) { - var state = stream._readableState; - - if (state.flowing) { - // https://github.com/isaacs/readable-stream/issues/16 - throw new Error('Cannot switch to old mode now.'); - } - - var paused = startPaused || false; - var readable = false; - - // convert to an old-style stream. - stream.readable = true; - stream.pipe = Stream.prototype.pipe; - stream.on = stream.addListener = Stream.prototype.on; - - stream.on('readable', function() { - readable = true; - - var c; - while (!paused && (null !== (c = stream.read()))) - stream.emit('data', c); - - if (c === null) { - readable = false; - stream._readableState.needReadable = true; - } - }); - - stream.pause = function() { - paused = true; - this.emit('pause'); - }; - - stream.resume = function() { - paused = false; - if (readable) - process.nextTick(function() { - stream.emit('readable'); - }); - else - this.read(0); - this.emit('resume'); - }; - - // now make it start, just in case it hadn't already. - stream.emit('readable'); -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function(stream) { - var state = this._readableState; - var paused = false; - - var self = this; - stream.on('end', function() { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) - self.push(chunk); - } - - self.push(null); - }); - - stream.on('data', function(chunk) { - if (state.decoder) - chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - //if (state.objectMode && util.isNullOrUndefined(chunk)) - if (state.objectMode && (chunk === null || chunk === undefined)) - return; - else if (!state.objectMode && (!chunk || !chunk.length)) - return; - - var ret = self.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (typeof stream[i] === 'function' && - typeof this[i] === 'undefined') { - this[i] = function(method) { return function() { - return stream[method].apply(stream, arguments); - }}(i); - } - } - - // proxy certain important events. - var events = ['error', 'close', 'destroy', 'pause', 'resume']; - forEach(events, function(ev) { - stream.on(ev, self.emit.bind(self, ev)); - }); - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - self._read = function(n) { - if (paused) { - paused = false; - stream.resume(); - } - }; - - return self; -}; - - - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -function fromList(n, state) { - var list = state.buffer; - var length = state.length; - var stringMode = !!state.decoder; - var objectMode = !!state.objectMode; - var ret; - - // nothing in the list, definitely empty. - if (list.length === 0) - return null; - - if (length === 0) - ret = null; - else if (objectMode) - ret = list.shift(); - else if (!n || n >= length) { - // read it all, truncate the array. - if (stringMode) - ret = list.join(''); - else - ret = Buffer.concat(list, length); - list.length = 0; - } else { - // read just some of it. - if (n < list[0].length) { - // just take a part of the first list item. - // slice is the same for buffers and strings. - var buf = list[0]; - ret = buf.slice(0, n); - list[0] = buf.slice(n); - } else if (n === list[0].length) { - // first list is a perfect match - ret = list.shift(); - } else { - // complex case. - // we have enough to cover it, but it spans past the first buffer. - if (stringMode) - ret = ''; - else - ret = new Buffer(n); - - var c = 0; - for (var i = 0, l = list.length; i < l && c < n; i++) { - var buf = list[0]; - var cpy = Math.min(n - c, buf.length); - - if (stringMode) - ret += buf.slice(0, cpy); - else - buf.copy(ret, c, 0, cpy); - - if (cpy < buf.length) - list[0] = buf.slice(cpy); - else - list.shift(); - - c += cpy; - } - } - } - - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) - throw new Error('endReadable called on non-empty stream'); - - if (!state.endEmitted && state.calledRead) { - state.ended = true; - process.nextTick(function() { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } - }); - } -} - -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} - -function indexOf (xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} diff --git a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/level-ws/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index eb188df..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -module.exports = Transform; - -var Duplex = require('./_stream_duplex'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(Transform, Duplex); - - -function TransformState(options, stream) { - this.afterTransform = function(er, data) { - return afterTransform(stream, er, data); - }; - - this.needTransform = false; - this.transforming = false; - this.writecb = null; - this.writechunk = null; -} - -function afterTransform(stream, er, data) { - var ts = stream._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) - return stream.emit('error', new Error('no writecb in Transform class')); - - ts.writechunk = null; - ts.writecb = null; - - if (data !== null && data !== undefined) - stream.push(data); - - if (cb) - cb(er); - - var rs = stream._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - stream._read(rs.highWaterMark); - } -} - - -function Transform(options) { - if (!(this instanceof Transform)) - return new Transform(options); - - Duplex.call(this, options); - - var ts = this._transformState = new TransformState(options, this); - - // when the writable side finishes, then flush out anything remaining. - var stream = this; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - this.once('finish', function() { - if ('function' === typeof this._flush) - this._flush(function(er) { - done(stream, er); - }); - else - done(stream); - }); -} - -Transform.prototype.push = function(chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function(chunk, encoding, cb) { - throw new Error('not implemented'); -}; - -Transform.prototype._write = function(chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || - rs.needReadable || - rs.length < rs.highWaterMark) - this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function(n) { - var ts = this._transformState; - - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - - -function done(stream, er) { - if (er) - return stream.emit('error', er); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - var ws = stream._writableState; - var rs = stream._readableState; - var ts = stream._transformState; - - if (ws.length) - throw new Error('calling transform done when ws.length != 0'); - - if (ts.transforming) - throw new Error('calling transform done when still transforming'); - - return stream.push(null); -} diff --git a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/level-ws/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index 4bdaa4f..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,386 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, cb), and it'll handle all -// the drain event emission and buffering. - -module.exports = Writable; - -/**/ -var Buffer = require('buffer').Buffer; -/**/ - -Writable.WritableState = WritableState; - - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Stream = require('stream'); - -util.inherits(Writable, Stream); - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; -} - -function WritableState(options, stream) { - options = options || {}; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, becuase any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function(er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.buffer = []; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; -} - -function Writable(options) { - var Duplex = require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof Duplex)) - return new Writable(options); - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function() { - this.emit('error', new Error('Cannot pipe. Not readable.')); -}; - - -function writeAfterEnd(stream, state, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); -} - -// If we get something that is not a buffer, string, null, or undefined, -// and we're not in objectMode, then that's an error. -// Otherwise stream chunks are all considered to be of length=1, and the -// watermarks determine how many objects to keep in the buffer, rather than -// how many bytes or characters. -function validChunk(stream, state, chunk, cb) { - var valid = true; - if (!Buffer.isBuffer(chunk) && - 'string' !== typeof chunk && - chunk !== null && - chunk !== undefined && - !state.objectMode) { - var er = new TypeError('Invalid non-string/buffer chunk'); - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); - valid = false; - } - return valid; -} - -Writable.prototype.write = function(chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (Buffer.isBuffer(chunk)) - encoding = 'buffer'; - else if (!encoding) - encoding = state.defaultEncoding; - - if (typeof cb !== 'function') - cb = function() {}; - - if (state.ended) - writeAfterEnd(this, state, cb); - else if (validChunk(this, state, chunk, cb)) - ret = writeOrBuffer(this, state, chunk, encoding, cb); - - return ret; -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && - state.decodeStrings !== false && - typeof chunk === 'string') { - chunk = new Buffer(chunk, encoding); - } - return chunk; -} - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, chunk, encoding, cb) { - chunk = decodeChunk(state, chunk, encoding); - if (Buffer.isBuffer(chunk)) - encoding = 'buffer'; - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) - state.needDrain = true; - - if (state.writing) - state.buffer.push(new WriteReq(chunk, encoding, cb)); - else - doWrite(stream, state, len, chunk, encoding, cb); - - return ret; -} - -function doWrite(stream, state, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - if (sync) - process.nextTick(function() { - cb(er); - }); - else - cb(er); - - stream._writableState.errorEmitted = true; - stream.emit('error', er); -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) - onwriteError(stream, state, sync, er, cb); - else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(stream, state); - - if (!finished && !state.bufferProcessing && state.buffer.length) - clearBuffer(stream, state); - - if (sync) { - process.nextTick(function() { - afterWrite(stream, state, finished, cb); - }); - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) - onwriteDrain(stream, state); - cb(); - if (finished) - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - - for (var c = 0; c < state.buffer.length; c++) { - var entry = state.buffer[c]; - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, len, chunk, encoding, cb); - - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - c++; - break; - } - } - - state.bufferProcessing = false; - if (c < state.buffer.length) - state.buffer = state.buffer.slice(c); - else - state.buffer.length = 0; -} - -Writable.prototype._write = function(chunk, encoding, cb) { - cb(new Error('not implemented')); -}; - -Writable.prototype.end = function(chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (typeof chunk !== 'undefined' && chunk !== null) - this.write(chunk, encoding); - - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) - endWritable(this, state, cb); -}; - - -function needFinish(stream, state) { - return (state.ending && - state.length === 0 && - !state.finished && - !state.writing); -} - -function finishMaybe(stream, state) { - var need = needFinish(stream, state); - if (need) { - state.finished = true; - stream.emit('finish'); - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) - process.nextTick(cb); - else - stream.once('finish', cb); - } - state.ended = true; -} diff --git a/node_modules/level-ws/node_modules/readable-stream/package.json b/node_modules/level-ws/node_modules/readable-stream/package.json deleted file mode 100644 index 61f4bbe..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "readable-stream@~1.0.15", - "/Users/jbaylina/git/MVP/node_modules/level-ws" - ] - ], - "_from": "readable-stream@>=1.0.15 <1.1.0", - "_id": "readable-stream@1.0.34", - "_inCache": true, - "_installable": true, - "_location": "/level-ws/readable-stream", - "_nodeVersion": "5.10.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/readable-stream-1.0.34.tgz_1460562521506_0.019665231462568045" - }, - "_npmUser": { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - "_npmVersion": "3.8.3", - "_phantomChildren": {}, - "_requested": { - "name": "readable-stream", - "raw": "readable-stream@~1.0.15", - "rawSpec": "~1.0.15", - "scope": null, - "spec": ">=1.0.15 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/level-ws" - ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "_shasum": "125820e34bc842d2f2aaafafe4c2916ee32c157c", - "_shrinkwrap": null, - "_spec": "readable-stream@~1.0.15", - "_where": "/Users/jbaylina/git/MVP/node_modules/level-ws", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me/" - }, - "browser": { - "util": false - }, - "bugs": { - "url": "https://github.com/isaacs/readable-stream/issues" - }, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - }, - "description": "Streams2, a user-land copy of the stream library from Node.js v0.10.x", - "devDependencies": { - "tap": "~0.2.6" - }, - "directories": {}, - "dist": { - "shasum": "125820e34bc842d2f2aaafafe4c2916ee32c157c", - "tarball": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" - }, - "gitHead": "1227c7b66deedb1dc5284a89425854d5f7ad9576", - "homepage": "https://github.com/isaacs/readable-stream#readme", - "keywords": [ - "readable", - "stream", - "pipe" - ], - "license": "MIT", - "main": "readable.js", - "maintainers": [ - { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - { - "email": "nathan@tootallnate.net", - "name": "tootallnate" - }, - { - "email": "rod@vagg.org", - "name": "rvagg" - }, - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - } - ], - "name": "readable-stream", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/readable-stream.git" - }, - "scripts": { - "test": "tap test/simple/*.js" - }, - "version": "1.0.34" -} diff --git a/node_modules/level-ws/node_modules/readable-stream/passthrough.js b/node_modules/level-ws/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/level-ws/node_modules/readable-stream/readable.js b/node_modules/level-ws/node_modules/readable-stream/readable.js deleted file mode 100644 index 26511e8..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,11 +0,0 @@ -var Stream = require('stream'); // hack to fix a circular dependency issue when used with browserify -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = Stream; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); -if (!process.browser && process.env.READABLE_STREAM === 'disable') { - module.exports = require('stream'); -} diff --git a/node_modules/level-ws/node_modules/readable-stream/transform.js b/node_modules/level-ws/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f0..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/level-ws/node_modules/readable-stream/writable.js b/node_modules/level-ws/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efd..0000000 --- a/node_modules/level-ws/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/level-ws/package.json b/node_modules/level-ws/package.json deleted file mode 100644 index da51d2a..0000000 --- a/node_modules/level-ws/package.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "_args": [ - [ - "level-ws@0.0.0", - "/Users/jbaylina/git/MVP/node_modules/merkle-patricia-tree" - ] - ], - "_from": "level-ws@0.0.0", - "_id": "level-ws@0.0.0", - "_inCache": true, - "_installable": true, - "_location": "/level-ws", - "_npmUser": { - "email": "rod@vagg.org", - "name": "rvagg" - }, - "_npmVersion": "1.3.11", - "_phantomChildren": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - }, - "_requested": { - "name": "level-ws", - "raw": "level-ws@0.0.0", - "rawSpec": "0.0.0", - "scope": null, - "spec": "0.0.0", - "type": "version" - }, - "_requiredBy": [ - "/merkle-patricia-tree" - ], - "_resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "_shasum": "372e512177924a00424b0b43aef2bb42496d228b", - "_shrinkwrap": null, - "_spec": "level-ws@0.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/merkle-patricia-tree", - "bugs": { - "url": "https://github.com/Level/level-ws/issues" - }, - "contributors": [ - { - "email": "r@va.gg", - "name": "Rod Vagg", - "url": "https://github.com/rvagg" - }, - { - "email": "john@chesl.es", - "name": "John Chesley", - "url": "https://github.com/chesles/" - }, - { - "email": "raynos2@gmail.com", - "name": "Jake Verbaten", - "url": "https://github.com/raynos" - }, - { - "email": "dominic.tarr@gmail.com", - "name": "Dominic Tarr", - "url": "https://github.com/dominictarr" - }, - { - "email": "max@maxogden.com", - "name": "Max Ogden", - "url": "https://github.com/maxogden" - }, - { - "email": "lars.magnus.skog@gmail.com", - "name": "Lars-Magnus Skog", - "url": "https://github.com/ralphtheninja" - }, - { - "email": "david.bjorklund@gmail.com", - "name": "David Björklund", - "url": "https://github.com/kesla" - }, - { - "email": "julian@juliangruber.com", - "name": "Julian Gruber", - "url": "https://github.com/juliangruber" - }, - { - "email": "paolo@async.ly", - "name": "Paolo Fragomeni", - "url": "https://github.com/hij1nx" - }, - { - "email": "anton.whalley@nearform.com", - "name": "Anton Whalley", - "url": "https://github.com/No9" - }, - { - "email": "matteo.collina@gmail.com", - "name": "Matteo Collina", - "url": "https://github.com/mcollina" - }, - { - "email": "pedro.teixeira@gmail.com", - "name": "Pedro Teixeira", - "url": "https://github.com/pgte" - }, - { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "https://github.com/substack" - } - ], - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "description": "A basic WriteStream implementation for LevelUP", - "devDependencies": { - "after": "*", - "level": "*", - "rimraf": "*", - "tape": "*" - }, - "directories": {}, - "dist": { - "shasum": "372e512177924a00424b0b43aef2bb42496d228b", - "tarball": "http://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz" - }, - "homepage": "https://github.com/Level/level-ws", - "keywords": [ - "leveldb", - "stream", - "levelup" - ], - "license": "MIT", - "main": "level-ws.js", - "maintainers": [ - { - "email": "rod@vagg.org", - "name": "rvagg" - } - ], - "name": "level-ws", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/Level/level-ws.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "0.0.0" -} diff --git a/node_modules/level-ws/test.js b/node_modules/level-ws/test.js deleted file mode 100644 index d59ee8c..0000000 --- a/node_modules/level-ws/test.js +++ /dev/null @@ -1,487 +0,0 @@ -/* Copyright (c) 2012-2013 LevelUP contributors - * See list at - * MIT +no-false-attribs License - */ - -var after = require('after') - , tape = require('tape') - , os = require('os') - , path = require('path') - , fs = require('fs') - , level = require('level') - , rimraf = require('rimraf') - , ws = require('./') - -function cleanup (callback) { - fs.readdir(os.tmpdir(), function (err, list) { - if (err) return callback(err) - - list = list.filter(function (f) { - return (/^_level-ws_test_db\./).test(f) - }) - - if (!list.length) - return callback() - - var ret = 0 - - list.forEach(function (f) { - rimraf(path.join(__dirname, f), function () { - if (++ret == list.length) - callback() - }) - }) - }) -} - -function openTestDatabase (t, options, callback) { - var location = path.join(os.tmpdir(), '_level-ws_test_db.' + Math.random()) - if (typeof options == 'function') { - callback = options - options = { createIfMissing: true, errorIfExists: true } - } - - rimraf(location, function (err) { - t.notOk(err, 'no error') - level(location, options, function (err, db) { - t.notOk(err, 'no error') - if (!err) { - this.db = ws(db) // invoke ws! - callback(this.db) - } - }.bind(this)) - }.bind(this)) -} - -function setUp (t) { - this.openTestDatabase = openTestDatabase.bind(this, t) - - this.timeout = 1000 - - this.sourceData = [] - - for (var i = 0; i < 10; i++) { - this.sourceData.push({ - type : 'put' - , key : i - , value : Math.random() - }) - } - - this.verify = function (ws, db, done, data) { - if (!data) data = this.sourceData // can pass alternative data array for verification - t.ok(ws.writable === false, 'not writable') - t.ok(ws.readable === false, 'not readable') - var _done = after(data.length, done) - data.forEach(function (data) { - db.get(data.key, function (err, value) { - t.notOk(err, 'no error') - if (typeof value == 'object') - t.deepEqual(value, data.value, 'WriteStream data #' + data.key + ' has correct value') - else - t.equal(+value, +data.value, 'WriteStream data #' + data.key + ' has correct value') - _done() - }) - }) - } -} - - -function test (label, fn) { - tape(label, function (t) { - var ctx = {} - setUp.call(ctx, t) - fn.call(ctx, t, function () { - var _cleanup = cleanup.bind(ctx, t.end.bind(t)) - if (ctx.db) - return ctx.db.close(_cleanup) - _cleanup() - }) - }) -} - -//TODO: test various encodings - -test('test simple WriteStream', function (t, done) { - this.openTestDatabase(function (db) { - var ws = db.createWriteStream() - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', this.verify.bind(this, ws, db, done)) - this.sourceData.forEach(function (d) { - ws.write(d) - }) - ws.end() - }.bind(this)) -}) - -test('test WriteStream with async writes', function (t, done) { - this.openTestDatabase(function (db) { - var ws = db.createWriteStream() - , sourceData = this.sourceData - , i = -1 - - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', this.verify.bind(this, ws, db, done)) - - function write () { - if (++i >= sourceData.length) - return ws.end() - - var d = sourceData[i] - // some should batch() and some should put() - if (d.key % 3) { - setTimeout(function () { - ws.write(d) - process.nextTick(write) - }, 10) - } else { - ws.write(d) - process.nextTick(write) - } - } - - write() - }.bind(this)) -}) - -test('test end accepts data', function (t, done) { - this.openTestDatabase(function (db) { - var ws = db.createWriteStream() - , i = 0 - - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', this.verify.bind(this, ws, db, done)) - this.sourceData.forEach(function (d) { - i++ - if (i < this.sourceData.length) { - ws.write(d) - } else { - ws.end(d) - } - }.bind(this)) - }.bind(this)) -}) - -// at the moment, destroySoon() is basically just end() -test('test destroySoon()', function (t, done) { - this.openTestDatabase(function (db) { - var ws = db.createWriteStream() - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', this.verify.bind(this, ws, db, done)) - this.sourceData.forEach(function (d) { - ws.write(d) - }) - ws.destroySoon() - }.bind(this)) -}) - -test('test destroy()', function (t, done) { - var verify = function (ws, db) { - t.ok(ws.writable === false, 'not writable') - var _done = after(this.sourceData.length, done) - this.sourceData.forEach(function (data) { - db.get(data.key, function (err, value) { - // none of them should exist - t.ok(err, 'got expected error') - t.notOk(value, 'did not get value') - _done() - }) - }) - } - - this.openTestDatabase(function (db) { - var ws = db.createWriteStream() - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - t.ok(ws.writable === true, 'is writable') - t.ok(ws.readable === false, 'not readable') - ws.on('close', verify.bind(this, ws, db)) - this.sourceData.forEach(function (d) { - ws.write(d) - t.ok(ws.writable === true, 'is writable') - t.ok(ws.readable === false, 'not readable') - }) - t.ok(ws.writable === true, 'is writable') - t.ok(ws.readable === false, 'not readable') - ws.destroy() - }.bind(this)) -}) - -test('test json encoding', function (t, done) { - var options = { createIfMissing: true, errorIfExists: true, keyEncoding: 'utf8', valueEncoding: 'json' } - , data = [ - { type: 'put', key: 'aa', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'ab', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'ac', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { type: 'put', key: 'ba', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'bb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'bc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { type: 'put', key: 'ca', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'cb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'cc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - ] - - this.openTestDatabase(options, function (db) { - var ws = db.createWriteStream() - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', this.verify.bind(this, ws, db, done, data)) - data.forEach(function (d) { - ws.write(d) - }) - ws.end() - }.bind(this)) -}) - -test('test del capabilities for each key/value', function (t, done) { - var options = { createIfMissing: true, errorIfExists: true, keyEncoding: 'utf8', valueEncoding: 'json' } - , data = [ - { type: 'put', key: 'aa', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'ab', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'ac', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { type: 'put', key: 'ba', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'bb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'bc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { type: 'put', key: 'ca', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'cb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'cc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - ] - , self = this - - function open () { - self.openTestDatabase(options, function (db) { - write(db); - }); - } - - function write (db) { - var ws = db.createWriteStream() - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', function () { - del(db); - }) - data.forEach(function (d) { - ws.write(d) - }) - - ws.end() - } - - function del (db) { - var delStream = db.createWriteStream() - delStream.on('error', function (err) { - t.notOk(err, 'no error') - }) - delStream.on('close', function () { - verify(db); - }) - data.forEach(function (d) { - d.type = 'del' - delStream.write(d) - }) - - delStream.end() - } - - function verify (db) { - var _done = after(data.length, done) - data.forEach(function (data) { - db.get(data.key, function (err, value) { - // none of them should exist - t.ok(err, 'got expected error') - t.notOk(value, 'did not get value') - _done() - }) - }) - } - - open() -}) - -test('test del capabilities as constructor option', function (t, done) { - - var options = { createIfMissing: true, errorIfExists: true, keyEncoding: 'utf8', valueEncoding: 'json' } - , data = [ - { key: 'aa', value: { a: 'complex', obj: 100 } } - , { key: 'ab', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { key: 'ac', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { key: 'ba', value: { a: 'complex', obj: 100 } } - , { key: 'bb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { key: 'bc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { key: 'ca', value: { a: 'complex', obj: 100 } } - , { key: 'cb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { key: 'cc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - ] - , self = this - - function open () { - self.openTestDatabase(options, function (db) { - write(db); - }); - } - - function write (db) { - var ws = db.createWriteStream() - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', function () { - del(db); - }) - data.forEach(function (d) { - ws.write(d) - }) - - ws.end() - } - - function del (db) { - var delStream = db.createWriteStream({ type: 'del' }) - delStream.on('error', function (err) { - t.notOk(err, 'no error') - }) - delStream.on('close', function () { - verify(db); - }) - data.forEach(function (d) { - delStream.write(d) - }) - - delStream.end() - } - - function verify (db) { - var _done = after(data.length, done) - data.forEach(function (data) { - db.get(data.key, function (err, value) { - // none of them should exist - t.ok(err, 'got expected error') - t.notOk(value, 'did not get value') - _done() - }) - }) - } - - open() -}) - -test('test type at key/value level must take precedence on the constructor', function (t, done) { - var options = { createIfMissing: true, errorIfExists: true, keyEncoding: 'utf8', valueEncoding: 'json' } - , data = [ - { key: 'aa', value: { a: 'complex', obj: 100 } } - , { key: 'ab', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { key: 'ac', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { key: 'ba', value: { a: 'complex', obj: 100 } } - , { key: 'bb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { key: 'bc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { key: 'ca', value: { a: 'complex', obj: 100 } } - , { key: 'cb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { key: 'cc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - ] - , exception = data[0] - , self = this - - exception['type'] = 'put' - - function open () { - self.openTestDatabase(options, function (db) { - write(db); - }); - } - - function write (db) { - var ws = db.createWriteStream() - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', function () { - del(db); - }) - data.forEach(function (d) { - ws.write(d) - }) - - ws.end() - } - - function del (db) { - var delStream = db.createWriteStream({ type: 'del' }) - delStream.on('error', function (err) { - t.notOk(err, 'no error') - }) - delStream.on('close', function () { - verify(db); - }) - data.forEach(function (d) { - delStream.write(d) - }) - - delStream.end() - } - - function verify (db) { - var _done = after(data.length, done) - data.forEach(function (data) { - db.get(data.key, function (err, value) { - if (data.type === 'put') { - t.ok(value, 'got value') - _done() - } else { - t.ok(err, 'got expected error') - t.notOk(value, 'did not get value') - _done() - } - }) - }) - } - - open() -}) - -test('test ignoring pairs with the wrong type', function (t, done) { - var self = this - - function open () { - self.openTestDatabase(write) - } - - function write (db) { - var ws = db.createWriteStream() - ws.on('error', function (err) { - t.notOk(err, 'no error') - }) - ws.on('close', function () { - verify(db) - }) - self.sourceData.forEach(function (d) { - d.type = 'x' + Math.random() - ws.write(d) - }) - ws.end() - } - - function verify (db) { - var _done = after(self.sourceData.length, done) - self.sourceData.forEach(function (data) { - db.get(data.key, function (err, value) { - t.ok(err, 'got expected error') - t.notOk(value, 'did not get value') - _done() - }) - }) - } - - open() -}) diff --git a/node_modules/levelup/.dntrc b/node_modules/levelup/.dntrc deleted file mode 100644 index 1cc9d2d..0000000 --- a/node_modules/levelup/.dntrc +++ /dev/null @@ -1,19 +0,0 @@ -## DNT config file -## see https://github.com/rvagg/dnt - -NODE_VERSIONS="\ - master \ - v0.11.9 \ - v0.11.8 \ - v0.10.22 \ - v0.10.21 \ - v0.8.26 \ -" -OUTPUT_PREFIX="levelup-" -TEST_CMD="\ - cd /dnt/ && \ - rm -rf node_modules/leveldown/ && \ - npm install --nodedir=/usr/src/node && \ - node_modules/.bin/tap test/*-test.js --stderr; \ -#" - diff --git a/node_modules/levelup/.jshintrc b/node_modules/levelup/.jshintrc deleted file mode 100644 index 7937650..0000000 --- a/node_modules/levelup/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "predef": [ ] - , "bitwise": false - , "camelcase": false - , "curly": false - , "eqeqeq": false - , "forin": false - , "immed": false - , "latedef": false - , "noarg": true - , "noempty": true - , "nonew": true - , "plusplus": false - , "quotmark": true - , "regexp": false - , "undef": true - , "unused": true - , "strict": false - , "trailing": true - , "maxlen": 120 - , "asi": true - , "boss": true - , "debug": true - , "eqnull": true - , "esnext": true - , "evil": true - , "expr": true - , "funcscope": false - , "globalstrict": false - , "iterator": false - , "lastsemic": true - , "laxbreak": true - , "laxcomma": true - , "loopfunc": true - , "multistr": false - , "onecase": false - , "proto": false - , "regexdash": false - , "scripturl": true - , "smarttabs": false - , "shadow": false - , "sub": true - , "supernew": false - , "validthis": true - , "browser": true - , "couch": false - , "devel": false - , "dojo": false - , "mootools": false - , "node": true - , "nonstandard": true - , "prototypejs": false - , "rhino": false - , "worker": true - , "wsh": false - , "nomen": false - , "onevar": true - , "passfail": false -} \ No newline at end of file diff --git a/node_modules/levelup/.npmignore b/node_modules/levelup/.npmignore deleted file mode 100644 index e063178..0000000 --- a/node_modules/levelup/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -*.tar.gz -build/ -test-data.tar -test-data.db.tar -test/benchmarks/ -level/ \ No newline at end of file diff --git a/node_modules/levelup/.travis.yml b/node_modules/levelup/.travis.yml deleted file mode 100644 index 76b72df..0000000 --- a/node_modules/levelup/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ -sudo: false - -language: node_js - -env: - - CXX=g++-4.8 - -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 - -before_install: - - export JOBS=max - -node_js: - - '6' - - '5' - - '4' - - '0.12' - - '0.10' diff --git a/node_modules/levelup/CHANGELOG.md b/node_modules/levelup/CHANGELOG.md deleted file mode 100644 index cb9547a..0000000 --- a/node_modules/levelup/CHANGELOG.md +++ /dev/null @@ -1,246 +0,0 @@ -### 1.0.0 @ May 14 2015 - - * [[`6ae45d83b6`](https://github.com/level/levelup/commit/6ae45d83b6)] - dispatchError() and readError() are voids (Lars-Magnus Skog) - * [[`c8e22e70bd`](https://github.com/level/levelup/commit/c8e22e70bd)] - util.deprecate static functions (Julian Gruber) - * [[`ef0ba86c99`](https://github.com/level/levelup/commit/ef0ba86c99)] - target multiple iojs versions, remove notifications (Lars-Magnus Skog) - * [[`e19ec96ed7`](https://github.com/level/levelup/commit/e19ec96ed7)] - deprecate .approximateSize() (Julian Gruber) - * [[`9c32ca9fcd`](https://github.com/level/levelup/commit/9c32ca9fcd)] - refactor read streams using level-iterator-stream and level-codec (Julian Gruber) - * [[`8015e088cb`](https://github.com/level/levelup/commit/8015e088cb)] - tap -> tape + faucet (Lars-Magnus Skog) - * [[`af125b580c`](https://github.com/level/levelup/commit/af125b580c)] - fix readStream *AsBuffer options (Julian Gruber) - * [[`61b44463da`](https://github.com/level/levelup/commit/61b44463da)] - update dependencies (Lars-Magnus Skog) - * [[`90352e999c`](https://github.com/level/levelup/commit/90352e999c)] - update changelog from 0.18.6 to 0.19.0 (Lars-Magnus Skog) - * [[`b17e9e775b`](https://github.com/level/levelup/commit/b17e9e775b)] - Fixed valueEncoding bug by passing options without array. (Braydon Fuller) - * [[`9576842794`](https://github.com/level/levelup/commit/9576842794)] - Added test for valueEncoding "hex" for createReadStream (Braydon Fuller) - * [[`b9ce2ba2c5`](https://github.com/level/levelup/commit/b9ce2ba2c5)] - s/rvagg\/node-/level\// (Lars-Magnus Skog) - * [[`7460209eb6`](https://github.com/level/levelup/commit/7460209eb6)] - fix stream-bench.js (Julian Gruber) - * [[`2a2780c65c`](https://github.com/level/levelup/commit/2a2780c65c)] - refactor ltgt encoding (Julian Gruber) - * [[`f53e349ec7`](https://github.com/level/levelup/commit/f53e349ec7)] - refactor iterators using new deferred-leveldown (Julian Gruber) - * [[`e811f7e598`](https://github.com/level/levelup/commit/e811f7e598)] - remove leveled tests (Julian Gruber) - * [[`b37cf16445`](https://github.com/level/levelup/commit/b37cf16445)] - fix benchmarks by installing leveldown@^0.10.4 (Julian Gruber) - * [[`187711c96c`](https://github.com/level/levelup/commit/187711c96c)] - use level-codec (Julian Gruber) - * [[`a1fda6bf2f`](https://github.com/level/levelup/commit/a1fda6bf2f)] - extract error codes into level-errors module (Lars-Magnus Skog) - * [[`f4e5a44530`](https://github.com/level/levelup/commit/f4e5a44530)] - remove reference to write-stream and iterators (Lars-Magnus Skog) - * [[`7372fceb4a`](https://github.com/level/levelup/commit/7372fceb4a)] - Changed options for get to same as put (Richard Littauer) - * [[`7686899b6c`](https://github.com/level/levelup/commit/7686899b6c)] - add node 0.12 and iojs on travis (Lars-Magnus Skog) - * [[`4aa6e8b7a5`](https://github.com/level/levelup/commit/4aa6e8b7a5)] - remove encoding option (Julian Gruber) - * [[`b0247a436e`](https://github.com/level/levelup/commit/b0247a436e)] - Added errors to the available namespace when requiring 'levelup'. (Braydon Fuller) - * [[`8b8da57f7a`](https://github.com/level/levelup/commit/8b8da57f7a)] - clean up old level-ws reference (Lars-Magnus Skog) - * [[`3d26d39a43`](https://github.com/level/levelup/commit/3d26d39a43)] - update README with info on why WriteStream was removed (Lars-Magnus Skog) - * [[`ba51315047`](https://github.com/level/levelup/commit/ba51315047)] - add Jarrett Cruger as contributor (Lars-Magnus Skog) - * [[`ed89907f33`](https://github.com/level/levelup/commit/ed89907f33)] - remove unused dependencies (Lars-Magnus Skog) - * [[`6067bb4467`](https://github.com/level/levelup/commit/6067bb4467)] - \[doc\] beginning of readme adjustment (Jarrett Cruger) - * [[`78a06b3c10`](https://github.com/level/levelup/commit/78a06b3c10)] - \[fix\] update travis and package.json scripts (Jarrett Cruger) - * [[`fcdd49b039`](https://github.com/level/levelup/commit/fcdd49b039)] - \[rm test\] remove fstream based tests (Jarrett Cruger) - * [[`fb73bdecc0`](https://github.com/level/levelup/commit/fb73bdecc0)] - \[fix\] remove `copy` as it requires write-stream (Jarrett Cruger) - * [[`616da299f9`](https://github.com/level/levelup/commit/616da299f9)] - \[fix test\] remove references to write-stream in tests (Jarrett Cruger) - * [[`a712e623a7`](https://github.com/level/levelup/commit/a712e623a7)] - \[fix\] remove references to write-stream (Jarrett Cruger) - * [[`9e6a6b7ef4`](https://github.com/level/levelup/commit/9e6a6b7ef4)] - update logo and copyright (Lars-Magnus Skog) - * [[`8b339def43`](https://github.com/level/levelup/commit/8b339def43)] - check notFound on err (Brian Woodward) - * [[`36658a2c7d`](https://github.com/level/levelup/commit/36658a2c7d)] - support values to be null/undefined (David Björklund) - * [[`f0bc944005`](https://github.com/level/levelup/commit/f0bc944005)] - explicit devdep versions (Rod Vagg) - * [[`c951f094eb`](https://github.com/level/levelup/commit/c951f094eb)] - Use newer memdown store. Fixes build. (Eduardo Sorribas) - * [[`c2c12c9380`](https://github.com/level/levelup/commit/c2c12c9380)] - better document #del method (Ben West) - * [[`2410aa3aff`](https://github.com/level/levelup/commit/2410aa3aff)] - resolve #261, explain args to callback to #del (Ben West) - * [[`ef28adbe71`](https://github.com/level/levelup/commit/ef28adbe71)] - explicit devdep versions (Rod Vagg) - * [[`723391bb93`](https://github.com/level/levelup/commit/723391bb93)] - Use newer memdown store. Fixes build. (Eduardo Sorribas) - * [[`23b3f7be19`](https://github.com/level/levelup/commit/23b3f7be19)] - better document #del method (Ben West) - * [[`02bb5c3856`](https://github.com/level/levelup/commit/02bb5c3856)] - resolve #261, explain args to callback to #del (Ben West) - * [[`e77bbd4c7d`](https://github.com/level/levelup/commit/e77bbd4c7d)] - support values to be null/undefined (David Björklund) - * [[`b9117a001b`](https://github.com/level/levelup/commit/b9117a001b)] - fixes the leveldb link (Manuel Ernst) - * [[`3d541dbfc9`](https://github.com/level/levelup/commit/3d541dbfc9)] - remove 0.8 from travis (Rod Vagg) - -### 0.19.0 @ Aug 26 2014 - - * [[`7f14058440`](https://github.com/level/levelup/commit/7f14058440)] - minor whitespace changes (Rod Vagg) - * [[`9e6d335df2`](https://github.com/level/levelup/commit/9e6d335df2)] - fix license (Rod Vagg) - * [[`74caa18c09`](https://github.com/level/levelup/commit/74caa18c09)] - minor style fixes (Rod Vagg) - * [[`1c7bc43d01`](https://github.com/level/levelup/commit/1c7bc43d01)] - update nodeico badge (Rod Vagg) - * [[`b6357cc323`](https://github.com/level/levelup/commit/b6357cc323)] - Use highest/lowest instead of largest/smallest (Arnout Engelen) - * [[`e45ce4e9d5`](https://github.com/level/levelup/commit/e45ce4e9d5)] - Document what 'limit' does in 'reverse' mode (Arnout Engelen) - * [[`9004e9db69`](https://github.com/level/levelup/commit/9004e9db69)] - Discourage the use of start/end a bit (Arnout Engelen) - * [[`6178d69cdc`](https://github.com/level/levelup/commit/6178d69cdc)] - merge (Dominic Tarr) - * [[`e3ab0ebe03`](https://github.com/level/levelup/commit/e3ab0ebe03)] - document with comments (Dominic Tarr) - * [[`bb88572c15`](https://github.com/level/levelup/commit/bb88572c15)] - unmention bops (Dominic Tarr) - * [[`45df8e668e`](https://github.com/level/levelup/commit/45df8e668e)] - clarify ltgt (Dominic Tarr) - * [[`54eba03305`](https://github.com/level/levelup/commit/54eba03305)] - binary encoding in the browser (Calvin Metcalf) - -### 0.18.6 @ Jul 26 2014 - - * (lots of stuff since 0.18.1 not recorded in changelog, ooops) - * Extracted encoding / codec to separate modules (@dominictarr) - -### 0.18.1 @ Nov 20 2013 - - * Make chained-batch obey global LevelUP object options (@mcavage) - -### 0.18.0 @ Nov 18 2013 - - * Upgrade to LevelDOWN@0.10.0 (and bops@0.1.0 and readable-stream@1.1.9) (@rvagg) - -### 0.17.0 @ Oct 01 2013 - - * Undo factory pattern, use plain prototypal object and expose full prototype (@rvagg) - * Move Batch object to batch.js and expose (@rvagg) - * Use new package, DeferredLevelDOWN to handle all deferred open logic (@rvagg) - * Code cleanup, update deps (xtend) (@rvagg, @juliangruber) - -### 0.16.0 @ Sep 10 2013 - - * Added `notFound` boolean property and `status=404` property to NotFoundError (@rvagg) - * Upgrade to errno@0.1.0 which aliases .type and .name properties (@rvagg) - * ReadStream gracefully handles multiple destroy() calls (@mcollina) - -### 0.15.0 @ Aug 25 2013 - - * New ReadStream: upgrade to streams2, remove all state-management cruft, remove fstream support (@substack) - * Update LevelDOWN dependency to ~0.8.0 with Iterator lt/lte/gt/gte support and NAN as a dependency - * Added @substack as contributor - -### 0.14.0 @ Aug 19 2013 - - * Encodings overhaul, allow custom encoders/decoders for `keyEncoding` or `valueEncoding` (@dominictarr) - -### 0.13.0 @ Aug 11 2013 - - * Update LevelDOWN dependency version ~0.7.0 for Node 0.8->0.11 compatibility - -### 0.12.0 @ Jul 25 2013 - - * Update LevelDOWN dependency version ~0.6.2 - -### 0.11.0 @ Jul 17 2013 - - * Remove all Function#bind calls for better browser compatibility (@juliangruber) - * Switch from direct Buffer access to bops for better browser compatibility (@juliangruber) - * WriteStream#end accepts `data` argument (@pgte) - * Added @pgte as contributor - -### 0.10.0 @ Jun 14 2013 - - * Upgrade to LevelDOWN@0.6.0 which upgrades to LevelDB@1.11.0, some important bugfixes: https://groups.google.com/forum/#!topic/leveldb/vS1JvmGlp4E - -### 0.9.0 @ 21 May 2013 - - * Use LevelDOWN@0.5.0, see https://github.com/level/leveldown/blob/master/CHANGELOG.md for details - * Race-condition(ish) fixed in ReadStream--createReadStream() does not start immediately and therefore allowed put()s to happen before the stream starts (@dominictarr) - * ReadStream doesn't emit "ready" event (@dominictarr) - * Allow separate encodings per operation in db.batch() (@juliangruber) - * Allow separate encodings per write() in WriteStream (@juliangruber) - * WriteStream supports "type" option ("put" [default] or "del") on constructor and individual write()s (@mcollina) - * Remove "leveldown" from dependencies (see http://r.va.gg/2013/05/levelup-v0.9-some-major-changes.html) (@rvagg) - * Expose LevelDOWN (or LevelDOWN substitute) as `db` property on LevelUP instance (e.g. db.db.approximateSize()) - * Chained batch exposed from LevelDOWN, invoked with argument-less db.batch() (@juliangruber, @rvagg) - * Significantly improve ReadStream performance by replacing .bind() and .apply() (@mcollina, @kesla) - * Better Browserify support (@rvagg, @juliangruber, @maxogden, etc.) - * Deprecate secondary LevelDB-specific operations on LevelUP, prefer direct LevelDOWN access (approximateSize(), repair(), destroy(), getProperty()--new in LevelDOWN@0.5.0) (@rvagg) - -### 0.8.0 @ 17 Apr 2013 - - * More comprehensive argument checking, will now report back directly or throw if there is a problem rather than on nextTick (@rvagg) - * Expose `.options` property on LevelUP instances. (@rvagg) - * Further clarify 'encoding' -> 'valueEncoding' shift. db.options.valueEncoding is now authoritative even if user used 'encoding' on initialisation. (@rvagg) - * 'level' package now published to npm that bundles LevelUP & LevelDOWN and exposes LevelUP directly; for planned shift to detaching LevelDOWN as a direct-dependency of LevelUP. (@rvagg) - -### 0.7.0 @ 8 Apr 2013 - - * Windows support in LevelDOWN @0.2.0 (@rvagg) - * added 'db' option on constructor to replace LevelDOWN (@rvagg) - * added repair() & destroy() aliases for LevelDOWN implementations (@rvagg) - * fix early 'close' emit in WriteStream (@rvagg) - * improved ReadStream reverse=true start key handling (@kesla) - * ReadStream empty start & end keys ignored rather than segfault (@kesla) - * 'encoding' option now an alias for 'valueEncoding' only, 'keyEncoding' defaults to 'utf8' and must be changed explicitly (@rvagg) - -### 0.6.2 @ 4 Mar 2013 - - * use `xtend` package instead of internal util._extend @ralphtheninja - * internal cleanup of `callback` argument detection @ralphtheninja - * move deferred-open-operations into an internal `this._db` wrapper rather than make them call public .get()/.put() etc. for a second time @dominictarr - -### 0.6.1 @ 1 Mar 2013 - - * internal code cleanup & refactoring @ralphtheninja - * fix multiple iterator.end() calls in ReadStreams throwing errors (destroy() called while read/next is in progress) #82 #83 #84 @rvagg - -### 0.6.0 @ Feb 25 2013 - - * complete transition to LevelDOWN for the LevelDB binding. No native code left in LevelUP @rvagg - - LevelDOWN now keeps its own ChangeLog at: https://github.com/level/leveldown/blob/master/CHANGELOG.md - - LevelDB@1.9.0 and Snappy@1.1.0 are included in LevelDOWN@0.1.2 - * simplify callback signature (remove extra, undocumented properties from some callbacks) @rvagg / @dominictarr - -### 0.5.4 @ Feb 16 2013 - - * explicit namespaces in C++ @rvagg - * memory leak, Persistent callback not Dispose()d for `readStream()` @rvagg - * allow one next() at a time, improve end() handling @rvagg - * ensure iterator end & next don't conflict @rvagg - * remove CloseError @ralphtheninja - * fix put/batch bug in WriteStream#_process() @ralphtheninja - * remove `useBatch` in `copy()` @rvagg - * move encodingOpts levelup.js -> util.js @ralphtheninja - -### 0.5.3-1 @ Feb 5 2013 - - * non-shrinkwrapped release @rvagg - -### 0.5.3 @ Jan 28 2013 - - * `location` exposed as read-only property on db object @rvagg - * swap bufferstream dependency for simple-bufferstream, remove unnecessary compile @rvagg - * comment out all sqlite3 benchmarks @ralphtheninja - * put LevelUP() into closure @ralphtheninja - -### 0.5.2 @ Jan 24 2013 - - * fix: incorrect scope in approximateSize function @sandfox - -### 0.5.1 @ Jan 10 2013 - - * change `createIfMissing` option default to `true` @rvagg - * use util._extend instead of local variant @rvagg - * adjust copyright & contributors @rvagg - * idempotent open and close, and emit _state as events @dominictarr - * fix: check that UINT32_OPTION_VALUE is a Uint32 @kesla - * feature: Support setting size of LRU-cache @kesla - * use util.inherits() from node core @ralphtheninja - -### 0.4.4 @ Jan 1 2013 - - * set maxListeners to Infinity to prevent warnings when using deferred open @juliangruber - -### 0.4.3 @ Dec 31 2012 - - * added @kesla to contributors list @rvagg - * feature: added approximateSize() @kesla - -### 0.4.2 @ Dec 30 2012 - - * process.nextTick->setImmediate with polyfill Node 0.9.5 compat @rvagg - * added @ralphtheninja to contributors list @rvagg - -### 0.4.1 @ Dec 20 2013 - - * remove `useBatch` option on `writeStream()` @rvagg - -### 0.4.0 @ Dec 18 2013 - - * remove old, unused util functions @rvagg - * speed up batch() & allow non-Strings to C++ @rvagg - * fix batch() benchmarks @rvagg - * improved compression test @rvagg - * added SQLite3 to test suite @rvagg - * remove compile warnings on osx @rvagg - * return Strings not Buffers from C++ when possible @rvagg - * optimised encoders & decoders @rvagg - * added basic get() benchmarks @rvagg - * revamped benchmark suite @rvagg - * allow JS Strings through to native layer @rvagg - * cleaner build for osx @rvagg - * remove compile warnings for solaris @rvagg - * LevelDB 1.7 @rvagg - * added `compress` boolean on open() @rvagg - -### 0.3.x and prior - - * stuff diff --git a/node_modules/levelup/LICENSE.md b/node_modules/levelup/LICENSE.md deleted file mode 100644 index bcb0ba7..0000000 --- a/node_modules/levelup/LICENSE.md +++ /dev/null @@ -1,13 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2012-2016 LevelUP contributors ---------------------------------------- - -*LevelUP contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/levelup/README.md b/node_modules/levelup/README.md deleted file mode 100644 index 8e686fa..0000000 --- a/node_modules/levelup/README.md +++ /dev/null @@ -1,639 +0,0 @@ -LevelUP -======= - -LevelDB Logo - -**Fast & simple storage - a Node.js-style LevelDB wrapper** - -[![Build Status](https://secure.travis-ci.org/Level/levelup.svg?branch=master)](http://travis-ci.org/Level/levelup) -[![dependencies](https://david-dm.org/Level/levelup.svg)](https://david-dm.org/level/levelup) - -[![NPM](https://nodei.co/npm/levelup.png?stars&downloads&downloadRank)](https://nodei.co/npm/levelup/) [![NPM](https://nodei.co/npm-dl/levelup.png?months=6&height=3)](https://nodei.co/npm/levelup/) - - - * Introduction - * Relationship to LevelDOWN - * Tested & supported platforms - * Basic usage - * API - * Events - * JSON data - * Custom encodings - * Extending LevelUP - * Multi-process access - * Getting support - * Contributing - * Licence & copyright - - -Introduction ------------- - -**[LevelDB](https://github.com/google/leveldb)** is a simple key/value data store built by Google, inspired by BigTable. It's used in Google Chrome and many other products. LevelDB supports arbitrary byte arrays as both keys and values, singular *get*, *put* and *delete* operations, *batched put and delete*, bi-directional iterators and simple compression using the very fast [Snappy](http://google.github.io/snappy/) algorithm. - -**LevelUP** aims to expose the features of LevelDB in a **Node.js-friendly way**. All standard `Buffer` encoding types are supported, as is a special JSON encoding. LevelDB's iterators are exposed as a Node.js-style **readable stream**. - -LevelDB stores entries **sorted lexicographically by keys**. This makes LevelUP's ReadStream interface a very powerful query mechanism. - -**LevelUP** is an **OPEN Open Source Project**, see the Contributing section to find out what this means. - - -Relationship to LevelDOWN -------------------------- - -LevelUP is designed to be backed by **[LevelDOWN](https://github.com/level/leveldown/)** which provides a pure C++ binding to LevelDB and can be used as a stand-alone package if required. - -**As of version 0.9, LevelUP no longer requires LevelDOWN as a dependency so you must `npm install leveldown` when you install LevelUP.** - -LevelDOWN is now optional because LevelUP can be used with alternative backends, such as **[level.js](https://github.com/maxogden/level.js)** in the browser or [MemDOWN](https://github.com/level/memdown) for a pure in-memory store. - -LevelUP will look for LevelDOWN and throw an error if it can't find it in its Node `require()` path. It will also tell you if the installed version of LevelDOWN is incompatible. - -**The [level](https://github.com/level/level) package is available as an alternative installation mechanism.** Install it instead to automatically get both LevelUP & LevelDOWN. It exposes LevelUP on its export (i.e. you can `var leveldb = require('level')`). - - - -Tested & supported platforms ----------------------------- - - * **Linux**: including ARM platforms such as Raspberry Pi *and Kindle!* - * **Mac OS** - * **Solaris**: including Joyent's SmartOS & Nodejitsu - * **Windows**: Node 0.10 and above only. See installation instructions for *node-gyp's* dependencies [here](https://github.com/TooTallNate/node-gyp#installation), you'll need these (free) components from Microsoft to compile and run any native Node add-on in Windows. - - -Basic usage ------------ - -First you need to install LevelUP! - -```sh -$ npm install levelup leveldown -``` - -Or - -```sh -$ npm install level -``` - -*(this second option requires you to use LevelUP by calling `var levelup = require('level')`)* - - -All operations are asynchronous although they don't necessarily require a callback if you don't need to know when the operation was performed. - -```js -var levelup = require('levelup') - -// 1) Create our database, supply location and options. -// This will create or open the underlying LevelDB store. -var db = levelup('./mydb') - -// 2) put a key & value -db.put('name', 'LevelUP', function (err) { - if (err) return console.log('Ooops!', err) // some kind of I/O error - - // 3) fetch by key - db.get('name', function (err, value) { - if (err) return console.log('Ooops!', err) // likely the key was not found - - // ta da! - console.log('name=' + value) - }) -}) -``` - - -## API - - * levelup() - * db.open() - * db.close() - * db.put() - * db.get() - * db.del() - * db.batch() *(array form)* - * db.batch() *(chained form)* - * db.isOpen() - * db.isClosed() - * db.createReadStream() - * db.createKeyStream() - * db.createValueStream() - -### Special operations exposed by LevelDOWN - - * db.db.approximateSize() - * db.db.getProperty() - * leveldown.destroy() - * leveldown.repair() - -### Special Notes - * What happened to db.createWriteStream() - - --------------------------------------------------------- - -### levelup(location[, options[, callback]]) -### levelup(options[, callback ]) -### levelup(db[, callback ]) -levelup() is the main entry point for creating a new LevelUP instance and opening the underlying store with LevelDB. - -This function returns a new instance of LevelUP and will also initiate an open() operation. Opening the database is an asynchronous operation which will trigger your callback if you provide one. The callback should take the form: `function (err, db) {}` where the `db` is the LevelUP instance. If you don't provide a callback, any read & write operations are simply queued internally until the database is fully opened. - -This leads to two alternative ways of managing a new LevelUP instance: - -```js -levelup(location, options, function (err, db) { - if (err) throw err - db.get('foo', function (err, value) { - if (err) return console.log('foo does not exist') - console.log('got foo =', value) - }) -}) - -// vs the equivalent: - -var db = levelup(location, options) // will throw if an error occurs -db.get('foo', function (err, value) { - if (err) return console.log('foo does not exist') - console.log('got foo =', value) -}) -``` - -The `location` argument is available as a read-only property on the returned LevelUP instance. - -The `levelup(options, callback)` form (with optional `callback`) is only available where you provide a valid `'db'` property on the options object (see below). Only for back-ends that don't require a `location` argument, such as [MemDOWN](https://github.com/level/memdown). - -For example: - -```js -var levelup = require('levelup') -var memdown = require('memdown') -var db = levelup({ db: memdown }) -``` - -The `levelup(db, callback)` form (with optional `callback`) is only available where `db` is a factory function, as would be provided as a `'db'` property on an `options` object (see below). Only for back-ends that don't require a `location` argument, such as [MemDOWN](https://github.com/level/memdown). - -For example: - -```js -var levelup = require('levelup') -var memdown = require('memdown') -var db = levelup(memdown) -``` - -#### `options` - -`levelup()` takes an optional options object as its second argument; the following properties are accepted: - -* `'createIfMissing'` *(boolean, default: `true`)*: If `true`, will initialise an empty database at the specified location if one doesn't already exist. If `false` and a database doesn't exist you will receive an error in your `open()` callback and your database won't open. - -* `'errorIfExists'` *(boolean, default: `false`)*: If `true`, you will receive an error in your `open()` callback if the database exists at the specified location. - -* `'compression'` *(boolean, default: `true`)*: If `true`, all *compressible* data will be run through the Snappy compression algorithm before being stored. Snappy is very fast and shouldn't gain much speed by disabling so leave this on unless you have good reason to turn it off. - -* `'cacheSize'` *(number, default: `8 * 1024 * 1024`)*: The size (in bytes) of the in-memory [LRU](http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used) cache with frequently used uncompressed block contents. - -* `'keyEncoding'` and `'valueEncoding'` *(string, default: `'utf8'`)*: The encoding of the keys and values passed through Node.js' `Buffer` implementation (see [Buffer#toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end)). -

    'utf8' is the default encoding for both keys and values so you can simply pass in strings and expect strings from your get() operations. You can also pass Buffer objects as keys and/or values and conversion will be performed.

    -

    Supported encodings are: hex, utf8, ascii, binary, base64, ucs2, utf16le.

    -

    'json' encoding is also supported, see below.

    - -* `'db'` *(object, default: LevelDOWN)*: LevelUP is backed by [LevelDOWN](https://github.com/level/leveldown/) to provide an interface to LevelDB. You can completely replace the use of LevelDOWN by providing a "factory" function that will return a LevelDOWN API compatible object given a `location` argument. For further information, see [MemDOWN](https://github.com/level/memdown), a fully LevelDOWN API compatible replacement that uses a memory store rather than LevelDB. Also see [Abstract LevelDOWN](http://github.com/level/abstract-leveldown), a partial implementation of the LevelDOWN API that can be used as a base prototype for a LevelDOWN substitute. - -Additionally, each of the main interface methods accept an optional options object that can be used to override `'keyEncoding'` and `'valueEncoding'`. - --------------------------------------------------------- - -### db.open([callback]) -open() opens the underlying LevelDB store. In general **you should never need to call this method directly** as it's automatically called by levelup(). - -However, it is possible to *reopen* a database after it has been closed with close(), although this is not generally advised. - --------------------------------------------------------- - -### db.close([callback]) -close() closes the underlying LevelDB store. The callback will receive any error encountered during closing as the first argument. - -You should always clean up your LevelUP instance by calling `close()` when you no longer need it to free up resources. A LevelDB store cannot be opened by multiple instances of LevelDB/LevelUP simultaneously. - --------------------------------------------------------- - -### db.put(key, value[, options][, callback]) -put() is the primary method for inserting data into the store. Both the `key` and `value` can be arbitrary data objects. - -The callback argument is optional but if you don't provide one and an error occurs then expect the error to be thrown. - -#### `options` - -Encoding of the `key` and `value` objects will adhere to `'keyEncoding'` and `'valueEncoding'` options provided to levelup(), although you can provide alternative encoding settings in the options for `put()` (it's recommended that you stay consistent in your encoding of keys and values in a single store). - -If you provide a `'sync'` value of `true` in your `options` object, LevelDB will perform a synchronous write of the data; although the operation will be asynchronous as far as Node is concerned. Normally, LevelDB passes the data to the operating system for writing and returns immediately, however a synchronous write will use `fsync()` or equivalent so your callback won't be triggered until the data is actually on disk. Synchronous filesystem writes are **significantly** slower than asynchronous writes but if you want to be absolutely sure that the data is flushed then you can use `'sync': true`. - --------------------------------------------------------- - -### db.get(key[, options][, callback]) -get() is the primary method for fetching data from the store. The `key` can be an arbitrary data object. If it doesn't exist in the store then the callback will receive an error as its first argument. A not-found err object will be of type `'NotFoundError'` so you can `err.type == 'NotFoundError'` or you can perform a truthy test on the property `err.notFound`. - -```js -db.get('foo', function (err, value) { - if (err) { - if (err.notFound) { - // handle a 'NotFoundError' here - return - } - // I/O or other error, pass it up the callback chain - return callback(err) - } - - // .. handle `value` here -}) -``` - -#### `options` - -Encoding of the `key` and `value` objects is the same as in put. - -LevelDB will by default fill the in-memory LRU Cache with data from a call to get. Disabling this is done by setting `fillCache` to `false`. - --------------------------------------------------------- - -### db.del(key[, options][, callback]) -del() is the primary method for removing data from the store. -```js -db.del('foo', function (err) { - if (err) - // handle I/O or other error -}); -``` - -#### `options` - -Encoding of the `key` object will adhere to the `'keyEncoding'` option provided to levelup(), although you can provide alternative encoding settings in the options for `del()` (it's recommended that you stay consistent in your encoding of keys and values in a single store). - -A `'sync'` option can also be passed, see put() for details on how this works. - --------------------------------------------------------- - -### db.batch(array[, options][, callback]) *(array form)* -batch() can be used for very fast bulk-write operations (both *put* and *delete*). The `array` argument should contain a list of operations to be executed sequentially, although as a whole they are performed as an atomic operation inside LevelDB. - -Each operation is contained in an object having the following properties: `type`, `key`, `value`, where the *type* is either `'put'` or `'del'`. In the case of `'del'` the `'value'` property is ignored. Any entries with a `'key'` of `null` or `undefined` will cause an error to be returned on the `callback` and any `'type': 'put'` entry with a `'value'` of `null` or `undefined` will return an error. - -If `key` and `value` are defined but `type` is not, it will default to `'put'`. - -```js -var ops = [ - { type: 'del', key: 'father' } - , { type: 'put', key: 'name', value: 'Yuri Irsenovich Kim' } - , { type: 'put', key: 'dob', value: '16 February 1941' } - , { type: 'put', key: 'spouse', value: 'Kim Young-sook' } - , { type: 'put', key: 'occupation', value: 'Clown' } -] - -db.batch(ops, function (err) { - if (err) return console.log('Ooops!', err) - console.log('Great success dear leader!') -}) -``` - -#### `options` - -See put() for a discussion on the `options` object. You can overwrite default `'keyEncoding'` and `'valueEncoding'` and also specify the use of `sync` filesystem operations. - -In addition to encoding options for the whole batch you can also overwrite the encoding per operation, like: - -```js -var ops = [{ - type : 'put' - , key : new Buffer([1, 2, 3]) - , value : { some: 'json' } - , keyEncoding : 'binary' - , valueEncoding : 'json' -}] -``` - --------------------------------------------------------- - -### db.batch() *(chained form)* -batch(), when called with no arguments will return a `Batch` object which can be used to build, and eventually commit, an atomic LevelDB batch operation. Depending on how it's used, it is possible to obtain greater performance when using the chained form of `batch()` over the array form. - -```js -db.batch() - .del('father') - .put('name', 'Yuri Irsenovich Kim') - .put('dob', '16 February 1941') - .put('spouse', 'Kim Young-sook') - .put('occupation', 'Clown') - .write(function () { console.log('Done!') }) -``` - -batch.put(key, value[, options]) - -Queue a *put* operation on the current batch, not committed until a `write()` is called on the batch. - -The optional `options` argument can be used to override the default `'keyEncoding'` and/or `'valueEncoding'`. - -This method may `throw` a `WriteError` if there is a problem with your put (such as the `value` being `null` or `undefined`). - -batch.del(key[, options]) - -Queue a *del* operation on the current batch, not committed until a `write()` is called on the batch. - -The optional `options` argument can be used to override the default `'keyEncoding'`. - -This method may `throw` a `WriteError` if there is a problem with your delete. - -batch.clear() - -Clear all queued operations on the current batch, any previous operations will be discarded. - -batch.length - -The number of queued operations on the current batch. - -batch.write([callback]) - -Commit the queued operations for this batch. All operations not *cleared* will be written to the database atomically, that is, they will either all succeed or fail with no partial commits. The optional `callback` will be called when the operation has completed with an *error* argument if an error has occurred; if no `callback` is supplied and an error occurs then this method will `throw` a `WriteError`. - - --------------------------------------------------------- - -### db.isOpen() - -A LevelUP object can be in one of the following states: - - * *"new"* - newly created, not opened or closed - * *"opening"* - waiting for the database to be opened - * *"open"* - successfully opened the database, available for use - * *"closing"* - waiting for the database to be closed - * *"closed"* - database has been successfully closed, should not be used - -`isOpen()` will return `true` only when the state is "open". - --------------------------------------------------------- - -### db.isClosed() - -*See isOpen()* - -`isClosed()` will return `true` only when the state is "closing" *or* "closed", it can be useful for determining if read and write operations are permissible. - --------------------------------------------------------- - -### db.createReadStream([options]) - -You can obtain a **ReadStream** of the full database by calling the `createReadStream()` method. The resulting stream is a complete Node.js-style [Readable Stream](http://nodejs.org/docs/latest/api/stream.html#stream_readable_stream) where `'data'` events emit objects with `'key'` and `'value'` pairs. You can also use the `gt`, `lt` and `limit` options to control the range of keys that are streamed. - -```js -db.createReadStream() - .on('data', function (data) { - console.log(data.key, '=', data.value) - }) - .on('error', function (err) { - console.log('Oh my!', err) - }) - .on('close', function () { - console.log('Stream closed') - }) - .on('end', function () { - console.log('Stream ended') - }) -``` - -The standard `pause()`, `resume()` and `destroy()` methods are implemented on the ReadStream, as is `pipe()` (see below). `'data'`, '`error'`, `'end'` and `'close'` events are emitted. - -Additionally, you can supply an options object as the first parameter to `createReadStream()` with the following options: - -* `'gt'` (greater than), `'gte'` (greater than or equal) define the lower bound of the range to be streamed. Only records where the key is greater than (or equal to) this option will be included in the range. When `reverse=true` the order will be reversed, but the records streamed will be the same. - -* `'lt'` (less than), `'lte'` (less than or equal) define the higher bound of the range to be streamed. Only key/value pairs where the key is less than (or equal to) this option will be included in the range. When `reverse=true` the order will be reversed, but the records streamed will be the same. - -* `'start', 'end'` legacy ranges - instead use `'gte', 'lte'` - -* `'reverse'` *(boolean, default: `false`)*: a boolean, set true and the stream output will be reversed. Beware that due to the way LevelDB works, a reverse seek will be slower than a forward seek. - -* `'keys'` *(boolean, default: `true`)*: whether the `'data'` event should contain keys. If set to `true` and `'values'` set to `false` then `'data'` events will simply be keys, rather than objects with a `'key'` property. Used internally by the `createKeyStream()` method. - -* `'values'` *(boolean, default: `true`)*: whether the `'data'` event should contain values. If set to `true` and `'keys'` set to `false` then `'data'` events will simply be values, rather than objects with a `'value'` property. Used internally by the `createValueStream()` method. - -* `'limit'` *(number, default: `-1`)*: limit the number of results collected by this stream. This number represents a *maximum* number of results and may not be reached if you get to the end of the data first. A value of `-1` means there is no limit. When `reverse=true` the highest keys will be returned instead of the lowest keys. - -* `'fillCache'` *(boolean, default: `false`)*: whether LevelDB's LRU-cache should be filled with data read. - -* `'keyEncoding'` / `'valueEncoding'` *(string)*: the encoding applied to each read piece of data. - --------------------------------------------------------- - -### db.createKeyStream([options]) - -A **KeyStream** is a **ReadStream** where the `'data'` events are simply the keys from the database so it can be used like a traditional stream rather than an object stream. - -You can obtain a KeyStream either by calling the `createKeyStream()` method on a LevelUP object or by passing an options object to `createReadStream()` with `keys` set to `true` and `values` set to `false`. - -```js -db.createKeyStream() - .on('data', function (data) { - console.log('key=', data) - }) - -// same as: -db.createReadStream({ keys: true, values: false }) - .on('data', function (data) { - console.log('key=', data) - }) -``` - --------------------------------------------------------- - -### db.createValueStream([options]) - -A **ValueStream** is a **ReadStream** where the `'data'` events are simply the values from the database so it can be used like a traditional stream rather than an object stream. - -You can obtain a ValueStream either by calling the `createValueStream()` method on a LevelUP object or by passing an options object to `createReadStream()` with `values` set to `true` and `keys` set to `false`. - -```js -db.createValueStream() - .on('data', function (data) { - console.log('value=', data) - }) - -// same as: -db.createReadStream({ keys: false, values: true }) - .on('data', function (data) { - console.log('value=', data) - }) -``` - --------------------------------------------------------- - -#### What happened to `db.createWriteStream`? - -`db.createWriteStream()` has been removed in order to provide a smaller and more maintainable core. It primarily existed to create symmetry with `db.createReadStream()` but through much [discussion](https://github.com/level/levelup/issues/199), removing it was the best course of action. - -The main driver for this was performance. While `db.createReadStream()` performs well under most use cases, `db.createWriteStream()` was highly dependent on the application keys and values. Thus we can't provide a standard implementation and encourage more `write-stream` implementations to be created to solve the broad spectrum of use cases. - -Check out the implementations that the community has already produced [here](https://github.com/level/levelup/wiki/Modules#write-streams). - --------------------------------------------------------- - -### db.db.approximateSize(start, end, callback) -approximateSize() can used to get the approximate number of bytes of file system space used by the range `[start..end)`. The result may not include recently written data. - -```js -var db = require('level')('./huge.db') - -db.db.approximateSize('a', 'c', function (err, size) { - if (err) return console.error('Ooops!', err) - console.log('Approximate size of range is %d', size) -}) -``` - -**Note:** `approximateSize()` is available via [LevelDOWN](https://github.com/level/leveldown/), which by default is accessible as the `db` property of your LevelUP instance. This is a specific LevelDB operation and is not likely to be available where you replace LevelDOWN with an alternative back-end via the `'db'` option. - - --------------------------------------------------------- - -### db.db.getProperty(property) -getProperty can be used to get internal details from LevelDB. When issued with a valid property string, a readable string will be returned (this method is synchronous). - -Currently, the only valid properties are: - -* 'leveldb.num-files-at-levelN': returns the number of files at level *N*, where N is an integer representing a valid level (e.g. "0"). - -* 'leveldb.stats': returns a multi-line string describing statistics about LevelDB's internal operation. - -* 'leveldb.sstables': returns a multi-line string describing all of the *sstables* that make up contents of the current database. - - -```js -var db = require('level')('./huge.db') -console.log(db.db.getProperty('leveldb.num-files-at-level3')) -// → '243' -``` - -**Note:** `getProperty()` is available via [LevelDOWN](https://github.com/level/leveldown/), which by default is accessible as the `db` property of your LevelUP instance. This is a specific LevelDB operation and is not likely to be available where you replace LevelDOWN with an alternative back-end via the `'db'` option. - - --------------------------------------------------------- - -### leveldown.destroy(location, callback) -destroy() is used to completely remove an existing LevelDB database directory. You can use this function in place of a full directory *rm* if you want to be sure to only remove LevelDB-related files. If the directory only contains LevelDB files, the directory itself will be removed as well. If there are additional, non-LevelDB files in the directory, those files, and the directory, will be left alone. - -The callback will be called when the destroy operation is complete, with a possible `error` argument. - -**Note:** `destroy()` is available via [LevelDOWN](https://github.com/level/leveldown/) which you will have to install seperately, e.g.: - -```js -require('leveldown').destroy('./huge.db', function (err) { console.log('done!') }) -``` - --------------------------------------------------------- - -### leveldown.repair(location, callback) -repair() can be used to attempt a restoration of a damaged LevelDB store. From the LevelDB documentation: - -> If a DB cannot be opened, you may attempt to call this method to resurrect as much of the contents of the database as possible. Some data may be lost, so be careful when calling this function on a database that contains important information. - -You will find information on the *repair* operation in the *LOG* file inside the store directory. - -A `repair()` can also be used to perform a compaction of the LevelDB log into table files. - -The callback will be called when the repair operation is complete, with a possible `error` argument. - -**Note:** `repair()` is available via [LevelDOWN](https://github.com/level/leveldown/) which you will have to install seperately, e.g.: - -```js -require('leveldown').repair('./huge.db', function (err) { console.log('done!') }) -``` - --------------------------------------------------------- - - -Events ------- - -LevelUP emits events when the callbacks to the corresponding methods are called. - -* `db.emit('put', key, value)` emitted when a new value is `'put'` -* `db.emit('del', key)` emitted when a value is deleted -* `db.emit('batch', ary)` emitted when a batch operation has executed -* `db.emit('ready')` emitted when the database has opened (`'open'` is synonym) -* `db.emit('closed')` emitted when the database has closed -* `db.emit('opening')` emitted when the database is opening -* `db.emit('closing')` emitted when the database is closing - -If you do not pass a callback to an async function, and there is an error, LevelUP will `emit('error', err)` instead. - - -JSON data ---------- - -You specify `'json'` encoding for both keys and/or values, you can then supply JavaScript objects to LevelUP and receive them from all fetch operations, including ReadStreams. LevelUP will automatically *stringify* your objects and store them as *utf8* and parse the strings back into objects before passing them back to you. - - -Custom encodings ----------------- - -A custom encoding may be provided by passing in an object as a value for `keyEncoding` or `valueEncoding` (wherever accepted), it must have the following properties: - -```js -{ - encode : function (val) { ... } - , decode : function (val) { ... } - , buffer : boolean // encode returns a buffer and decode accepts a buffer - , type : String // name of this encoding type. -} -``` - - -Extending LevelUP ------------------ - -A list of Node.js LevelDB modules and projects can be found in the wiki. - -When attempting to extend the functionality of LevelUP, it is recommended that you consider using [level-hooks](https://github.com/dominictarr/level-hooks) and/or [level-sublevel](https://github.com/dominictarr/level-sublevel). **level-sublevel** is particularly helpful for keeping additional, extension-specific, data in a LevelDB store. It allows you to partition a LevelUP instance into multiple sub-instances that each correspond to discrete namespaced key ranges. - - -Multi-process access --------------------- - -LevelDB is thread-safe but is **not** suitable for accessing with multiple processes. You should only ever have a LevelDB database open from a single Node.js process. Node.js clusters are made up of multiple processes so a LevelUP instance cannot be shared between them either. - -See the wiki for some LevelUP extensions, including [multilevel](https://github.com/juliangruber/multilevel), that may help if you require a single data store to be shared across processes. - - -Getting support ---------------- - -There are multiple ways you can find help in using LevelDB in Node.js: - - * **IRC:** you'll find an active group of LevelUP users in the **##leveldb** channel on Freenode, including most of the contributors to this project. - * **Mailing list:** there is an active [Node.js LevelDB](https://groups.google.com/forum/#!forum/node-levelup) Google Group. - * **GitHub:** you're welcome to open an issue here on this GitHub repository if you have a question. - - -Contributing ------------- - -LevelUP is an **OPEN Open Source Project**. This means that: - -> Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. - -See the [contribution guide](https://github.com/Level/community/blob/master/CONTRIBUTING.md) for more details. - -### Windows - -A large portion of the Windows support comes from code by [Krzysztof Kowalczyk](http://blog.kowalczyk.info/) [@kjk](https://twitter.com/kjk), see his Windows LevelDB port [here](http://code.google.com/r/kkowalczyk-leveldb/). If you're using LevelUP on Windows, you should give him your thanks! - - - -License & copyright -------------------- - -Copyright © 2012-2016 **LevelUP** [contributors](https://github.com/level/community#contributors). - -**LevelUP** is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included `LICENSE.md` file for more details. - -======= -*LevelUP builds on the excellent work of the LevelDB and Snappy teams from Google and additional contributors. LevelDB and Snappy are both issued under the [New BSD Licence](http://opensource.org/licenses/BSD-3-Clause).* diff --git a/node_modules/levelup/buster.js b/node_modules/levelup/buster.js deleted file mode 100644 index fdc0a67..0000000 --- a/node_modules/levelup/buster.js +++ /dev/null @@ -1,7 +0,0 @@ -var config = module.exports - -config['unit'] = { - environment: 'node' - , tests: [ 'test/*-test.js' ] - , libs: [ 'test/common.js' ] -} \ No newline at end of file diff --git a/node_modules/levelup/lib/batch.js b/node_modules/levelup/lib/batch.js deleted file mode 100644 index 4dc8141..0000000 --- a/node_modules/levelup/lib/batch.js +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - * - */ - -var util = require('./util') - , WriteError = require('level-errors').WriteError - - , getOptions = util.getOptions - , dispatchError = util.dispatchError - -function Batch (levelup, codec) { - this._levelup = levelup - this._codec = codec - this.batch = levelup.db.batch() - this.ops = [] - this.length = 0 -} - -Batch.prototype.put = function (key_, value_, options) { - options = getOptions(options) - - var key = this._codec.encodeKey(key_, options) - , value = this._codec.encodeValue(value_, options) - - try { - this.batch.put(key, value) - } catch (e) { - throw new WriteError(e) - } - this.ops.push({ type : 'put', key : key, value : value }) - this.length++ - - return this -} - -Batch.prototype.del = function (key_, options) { - options = getOptions(options) - - var key = this._codec.encodeKey(key_, options) - - try { - this.batch.del(key) - } catch (err) { - throw new WriteError(err) - } - this.ops.push({ type : 'del', key : key }) - this.length++ - - return this -} - -Batch.prototype.clear = function () { - try { - this.batch.clear() - } catch (err) { - throw new WriteError(err) - } - - this.ops = [] - this.length = 0 - return this -} - -Batch.prototype.write = function (callback) { - var levelup = this._levelup - , ops = this.ops - - try { - this.batch.write(function (err) { - if (err) - return dispatchError(levelup, new WriteError(err), callback) - levelup.emit('batch', ops) - if (callback) - callback() - }) - } catch (err) { - throw new WriteError(err) - } -} - -module.exports = Batch diff --git a/node_modules/levelup/lib/levelup.js b/node_modules/levelup/lib/levelup.js deleted file mode 100644 index 6664cdf..0000000 --- a/node_modules/levelup/lib/levelup.js +++ /dev/null @@ -1,399 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - * - */ - -var EventEmitter = require('events').EventEmitter - , inherits = require('util').inherits - , deprecate = require('util').deprecate - , extend = require('xtend') - , prr = require('prr') - , DeferredLevelDOWN = require('deferred-leveldown') - , IteratorStream = require('level-iterator-stream') - - , errors = require('level-errors') - , WriteError = errors.WriteError - , ReadError = errors.ReadError - , NotFoundError = errors.NotFoundError - , OpenError = errors.OpenError - , EncodingError = errors.EncodingError - , InitializationError = errors.InitializationError - - , util = require('./util') - , Batch = require('./batch') - , Codec = require('level-codec') - - , getOptions = util.getOptions - , defaultOptions = util.defaultOptions - , getLevelDOWN = util.getLevelDOWN - , dispatchError = util.dispatchError - , isDefined = util.isDefined - -function getCallback (options, callback) { - return typeof options == 'function' ? options : callback -} - -// Possible LevelUP#_status values: -// - 'new' - newly created, not opened or closed -// - 'opening' - waiting for the database to be opened, post open() -// - 'open' - successfully opened the database, available for use -// - 'closing' - waiting for the database to be closed, post close() -// - 'closed' - database has been successfully closed, should not be -// used except for another open() operation - -function LevelUP (location, options, callback) { - if (!(this instanceof LevelUP)) - return new LevelUP(location, options, callback) - - var error - - EventEmitter.call(this) - this.setMaxListeners(Infinity) - - if (typeof location == 'function') { - options = typeof options == 'object' ? options : {} - options.db = location - location = null - } else if (typeof location == 'object' && typeof location.db == 'function') { - options = location - location = null - } - - - if (typeof options == 'function') { - callback = options - options = {} - } - - if ((!options || typeof options.db != 'function') && typeof location != 'string') { - error = new InitializationError( - 'Must provide a location for the database') - if (callback) { - return process.nextTick(function () { - callback(error) - }) - } - throw error - } - - options = getOptions(options) - this.options = extend(defaultOptions, options) - this._codec = new Codec(this.options) - this._status = 'new' - // set this.location as enumerable but not configurable or writable - prr(this, 'location', location, 'e') - - this.open(callback) -} - -inherits(LevelUP, EventEmitter) - -LevelUP.prototype.open = function (callback) { - var self = this - , dbFactory - , db - - if (this.isOpen()) { - if (callback) - process.nextTick(function () { callback(null, self) }) - return this - } - - if (this._isOpening()) { - return callback && this.once( - 'open' - , function () { callback(null, self) } - ) - } - - this.emit('opening') - - this._status = 'opening' - this.db = new DeferredLevelDOWN(this.location) - dbFactory = this.options.db || getLevelDOWN() - db = dbFactory(this.location) - - db.open(this.options, function (err) { - if (err) { - return dispatchError(self, new OpenError(err), callback) - } else { - self.db.setDb(db) - self.db = db - self._status = 'open' - if (callback) - callback(null, self) - self.emit('open') - self.emit('ready') - } - }) -} - -LevelUP.prototype.close = function (callback) { - var self = this - - if (this.isOpen()) { - this._status = 'closing' - this.db.close(function () { - self._status = 'closed' - self.emit('closed') - if (callback) - callback.apply(null, arguments) - }) - this.emit('closing') - this.db = new DeferredLevelDOWN(this.location) - } else if (this._status == 'closed' && callback) { - return process.nextTick(callback) - } else if (this._status == 'closing' && callback) { - this.once('closed', callback) - } else if (this._isOpening()) { - this.once('open', function () { - self.close(callback) - }) - } -} - -LevelUP.prototype.isOpen = function () { - return this._status == 'open' -} - -LevelUP.prototype._isOpening = function () { - return this._status == 'opening' -} - -LevelUP.prototype.isClosed = function () { - return (/^clos/).test(this._status) -} - -function maybeError(db, options, callback) { - if (!db._isOpening() && !db.isOpen()) { - dispatchError( - db - , new ReadError('Database is not open') - , callback - ) - return true - } -} - -function writeError (db, message, callback) { - dispatchError( - db - , new WriteError(message) - , callback - ) -} - -function readError (db, message, callback) { - dispatchError( - db - , new ReadError(message) - , callback - ) -} - - -LevelUP.prototype.get = function (key_, options, callback) { - var self = this - , key - - callback = getCallback(options, callback) - - if (maybeError(this, options, callback)) - return - - if (key_ === null || key_ === undefined || 'function' !== typeof callback) - return readError(this - , 'get() requires key and callback arguments', callback) - - options = util.getOptions(options) - key = this._codec.encodeKey(key_, options) - - options.asBuffer = this._codec.valueAsBuffer(options) - - this.db.get(key, options, function (err, value) { - if (err) { - if ((/notfound/i).test(err) || err.notFound) { - err = new NotFoundError( - 'Key not found in database [' + key_ + ']', err) - } else { - err = new ReadError(err) - } - return dispatchError(self, err, callback) - } - if (callback) { - try { - value = self._codec.decodeValue(value, options) - } catch (e) { - return callback(new EncodingError(e)) - } - callback(null, value) - } - }) -} - -LevelUP.prototype.put = function (key_, value_, options, callback) { - var self = this - , key - , value - - callback = getCallback(options, callback) - - if (key_ === null || key_ === undefined) - return writeError(this, 'put() requires a key argument', callback) - - if (maybeError(this, options, callback)) - return - - options = getOptions(options) - key = this._codec.encodeKey(key_, options) - value = this._codec.encodeValue(value_, options) - - this.db.put(key, value, options, function (err) { - if (err) { - return dispatchError(self, new WriteError(err), callback) - } else { - self.emit('put', key_, value_) - if (callback) - callback() - } - }) -} - -LevelUP.prototype.del = function (key_, options, callback) { - var self = this - , key - - callback = getCallback(options, callback) - - if (key_ === null || key_ === undefined) - return writeError(this, 'del() requires a key argument', callback) - - if (maybeError(this, options, callback)) - return - - options = getOptions(options) - key = this._codec.encodeKey(key_, options) - - this.db.del(key, options, function (err) { - if (err) { - return dispatchError(self, new WriteError(err), callback) - } else { - self.emit('del', key_) - if (callback) - callback() - } - }) -} - -LevelUP.prototype.batch = function (arr_, options, callback) { - var self = this - , keyEnc - , valueEnc - , arr - - if (!arguments.length) - return new Batch(this, this._codec) - - callback = getCallback(options, callback) - - if (!Array.isArray(arr_)) - return writeError(this, 'batch() requires an array argument', callback) - - if (maybeError(this, options, callback)) - return - - options = getOptions(options) - arr = self._codec.encodeBatch(arr_, options) - arr = arr.map(function (op) { - if (!op.type && op.key !== undefined && op.value !== undefined) - op.type = 'put' - return op - }) - - this.db.batch(arr, options, function (err) { - if (err) { - return dispatchError(self, new WriteError(err), callback) - } else { - self.emit('batch', arr_) - if (callback) - callback() - } - }) -} - -LevelUP.prototype.approximateSize = deprecate(function (start_, end_, options, callback) { - var self = this - , start - , end - - callback = getCallback(options, callback) - - options = getOptions(options) - - if (start_ === null || start_ === undefined - || end_ === null || end_ === undefined || 'function' !== typeof callback) - return readError(this, 'approximateSize() requires start, end and callback arguments', callback) - - start = this._codec.encodeKey(start_, options) - end = this._codec.encodeKey(end_, options) - - this.db.approximateSize(start, end, function (err, size) { - if (err) { - return dispatchError(self, new OpenError(err), callback) - } else if (callback) { - callback(null, size) - } - }) -}, 'db.approximateSize() is deprecated. Use db.db.approximateSize() instead') - -LevelUP.prototype.readStream = -LevelUP.prototype.createReadStream = function (options) { - options = extend( {keys: true, values: true}, this.options, options) - - options.keyEncoding = options.keyEncoding - options.valueEncoding = options.valueEncoding - - options = this._codec.encodeLtgt(options); - options.keyAsBuffer = this._codec.keyAsBuffer(options) - options.valueAsBuffer = this._codec.valueAsBuffer(options) - - if ('number' !== typeof options.limit) - options.limit = -1 - - return new IteratorStream(this.db.iterator(options), extend(options, { - decoder: this._codec.createStreamDecoder(options) - })) -} - -LevelUP.prototype.keyStream = -LevelUP.prototype.createKeyStream = function (options) { - return this.createReadStream(extend(options, { keys: true, values: false })) -} - -LevelUP.prototype.valueStream = -LevelUP.prototype.createValueStream = function (options) { - return this.createReadStream(extend(options, { keys: false, values: true })) -} - -LevelUP.prototype.toString = function () { - return 'LevelUP' -} - -function utilStatic (name) { - return function (location, callback) { - getLevelDOWN()[name](location, callback || function () {}) - } -} - -module.exports = LevelUP -module.exports.errors = require('level-errors') -module.exports.destroy = deprecate( - utilStatic('destroy') - , 'levelup.destroy() is deprecated. Use leveldown.destroy() instead' -) -module.exports.repair = deprecate( - utilStatic('repair') - , 'levelup.repair() is deprecated. Use leveldown.repair() instead' -) - diff --git a/node_modules/levelup/lib/util.js b/node_modules/levelup/lib/util.js deleted file mode 100644 index 8a2b8e6..0000000 --- a/node_modules/levelup/lib/util.js +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - * - */ - -var extend = require('xtend') - , LevelUPError = require('level-errors').LevelUPError - , format = require('util').format - , defaultOptions = { - createIfMissing : true - , errorIfExists : false - , keyEncoding : 'utf8' - , valueEncoding : 'utf8' - , compression : true - } - - , leveldown - -function getOptions (options) { - if (typeof options == 'string') - options = { valueEncoding: options } - if (typeof options != 'object') - options = {} - return options -} - -function getLevelDOWN () { - if (leveldown) - return leveldown - - var requiredVersion = require('../package.json').devDependencies.leveldown - , leveldownVersion - - try { - leveldownVersion = require('leveldown/package').version - } catch (e) { - throw requireError(e) - } - - if (!require('semver').satisfies(leveldownVersion, requiredVersion)) { - throw new LevelUPError( - 'Installed version of LevelDOWN (' - + leveldownVersion - + ') does not match required version (' - + requiredVersion - + ')' - ) - } - - try { - return leveldown = require('leveldown') - } catch (e) { - throw requireError(e) - } -} - -function requireError (e) { - var template = 'Failed to require LevelDOWN (%s). Try `npm install leveldown` if it\'s missing' - return new LevelUPError(format(template, e.message)) -} - -function dispatchError (db, error, callback) { - typeof callback == 'function' ? callback(error) : db.emit('error', error) -} - -function isDefined (v) { - return typeof v !== 'undefined' -} - -module.exports = { - defaultOptions : defaultOptions - , getOptions : getOptions - , getLevelDOWN : getLevelDOWN - , dispatchError : dispatchError - , isDefined : isDefined -} diff --git a/node_modules/levelup/node_modules/xtend/.jshintrc b/node_modules/levelup/node_modules/xtend/.jshintrc deleted file mode 100644 index 77887b5..0000000 --- a/node_modules/levelup/node_modules/xtend/.jshintrc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "maxdepth": 4, - "maxstatements": 200, - "maxcomplexity": 12, - "maxlen": 80, - "maxparams": 5, - - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": false, - "noarg": true, - "noempty": true, - "nonew": true, - "undef": true, - "unused": "vars", - "trailing": true, - - "quotmark": true, - "expr": true, - "asi": true, - - "browser": false, - "esnext": true, - "devel": false, - "node": false, - "nonstandard": false, - - "predef": ["require", "module", "__dirname", "__filename"] -} diff --git a/node_modules/levelup/node_modules/xtend/.npmignore b/node_modules/levelup/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/levelup/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/levelup/node_modules/xtend/LICENCE b/node_modules/levelup/node_modules/xtend/LICENCE deleted file mode 100644 index 1a14b43..0000000 --- a/node_modules/levelup/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/levelup/node_modules/xtend/Makefile b/node_modules/levelup/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf..0000000 --- a/node_modules/levelup/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/levelup/node_modules/xtend/README.md b/node_modules/levelup/node_modules/xtend/README.md deleted file mode 100644 index 093cb29..0000000 --- a/node_modules/levelup/node_modules/xtend/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# xtend - -[![browser support][3]][4] - -[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Extend like a boss - -xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. - -## Examples - -```js -var extend = require("xtend") - -// extend returns a new object. Does not mutate arguments -var combination = extend({ - a: "a", - b: 'c' -}, { - b: "b" -}) -// { a: "a", b: "b" } -``` - -## Stability status: Locked - -## MIT Licenced - - - [3]: http://ci.testling.com/Raynos/xtend.png - [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/levelup/node_modules/xtend/immutable.js b/node_modules/levelup/node_modules/xtend/immutable.js deleted file mode 100644 index 94889c9..0000000 --- a/node_modules/levelup/node_modules/xtend/immutable.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/levelup/node_modules/xtend/mutable.js b/node_modules/levelup/node_modules/xtend/mutable.js deleted file mode 100644 index 72debed..0000000 --- a/node_modules/levelup/node_modules/xtend/mutable.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/levelup/node_modules/xtend/package.json b/node_modules/levelup/node_modules/xtend/package.json deleted file mode 100644 index 893ef0a..0000000 --- a/node_modules/levelup/node_modules/xtend/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "xtend@~4.0.0", - "/Users/jbaylina/git/MVP/node_modules/levelup" - ] - ], - "_from": "xtend@>=4.0.0 <4.1.0", - "_id": "xtend@4.0.1", - "_inCache": true, - "_installable": true, - "_location": "/levelup/xtend", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - "_npmVersion": "2.14.1", - "_phantomChildren": {}, - "_requested": { - "name": "xtend", - "raw": "xtend@~4.0.0", - "rawSpec": "~4.0.0", - "scope": null, - "spec": ">=4.0.0 <4.1.0", - "type": "range" - }, - "_requiredBy": [ - "/levelup" - ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "_shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "_shrinkwrap": null, - "_spec": "xtend@~4.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/levelup", - "author": { - "email": "raynos2@gmail.com", - "name": "Raynos" - }, - "bugs": { - "email": "raynos2@gmail.com", - "url": "https://github.com/Raynos/xtend/issues" - }, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Matt Esch" - } - ], - "dependencies": {}, - "description": "extend like a boss", - "devDependencies": { - "tape": "~1.1.0" - }, - "directories": {}, - "dist": { - "shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "tarball": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - }, - "engines": { - "node": ">=0.4" - }, - "gitHead": "23dc302a89756da89c1897bc732a752317e35390", - "homepage": "https://github.com/Raynos/xtend", - "keywords": [ - "extend", - "merge", - "options", - "opts", - "object", - "array" - ], - "license": "MIT", - "main": "immutable", - "maintainers": [ - { - "email": "raynos2@gmail.com", - "name": "raynos" - } - ], - "name": "xtend", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xtend.git" - }, - "scripts": { - "test": "node test" - }, - "testling": { - "browsers": [ - "ie/7..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ], - "files": "test.js" - }, - "version": "4.0.1" -} diff --git a/node_modules/levelup/node_modules/xtend/test.js b/node_modules/levelup/node_modules/xtend/test.js deleted file mode 100644 index 093a2b0..0000000 --- a/node_modules/levelup/node_modules/xtend/test.js +++ /dev/null @@ -1,83 +0,0 @@ -var test = require("tape") -var extend = require("./") -var mutableExtend = require("./mutable") - -test("merge", function(assert) { - var a = { a: "foo" } - var b = { b: "bar" } - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("replace", function(assert) { - var a = { a: "foo" } - var b = { a: "bar" } - - assert.deepEqual(extend(a, b), { a: "bar" }) - assert.end() -}) - -test("undefined", function(assert) { - var a = { a: undefined } - var b = { b: "foo" } - - assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) - assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) - assert.end() -}) - -test("handle 0", function(assert) { - var a = { a: "default" } - var b = { a: 0 } - - assert.deepEqual(extend(a, b), { a: 0 }) - assert.deepEqual(extend(b, a), { a: "default" }) - assert.end() -}) - -test("is immutable", function (assert) { - var record = {} - - extend(record, { foo: "bar" }) - assert.equal(record.foo, undefined) - assert.end() -}) - -test("null as argument", function (assert) { - var a = { foo: "bar" } - var b = null - var c = void 0 - - assert.deepEqual(extend(b, a, c), { foo: "bar" }) - assert.end() -}) - -test("mutable", function (assert) { - var a = { foo: "bar" } - - mutableExtend(a, { bar: "baz" }) - - assert.equal(a.bar, "baz") - assert.end() -}) - -test("null prototype", function(assert) { - var a = { a: "foo" } - var b = Object.create(null) - b.b = "bar"; - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("null prototype mutable", function (assert) { - var a = { foo: "bar" } - var b = Object.create(null) - b.bar = "baz"; - - mutableExtend(a, b) - - assert.equal(a.bar, "baz") - assert.end() -}) diff --git a/node_modules/levelup/package.json b/node_modules/levelup/package.json deleted file mode 100644 index 05b08d0..0000000 --- a/node_modules/levelup/package.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "_args": [ - [ - "levelup@^1.2.1", - "/Users/jbaylina/git/MVP/node_modules/merkle-patricia-tree" - ] - ], - "_from": "levelup@>=1.2.1 <2.0.0", - "_id": "levelup@1.3.3", - "_inCache": true, - "_installable": true, - "_location": "/levelup", - "_nodeVersion": "4.4.7", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/levelup-1.3.3.tgz_1476029541340_0.44339725002646446" - }, - "_npmUser": { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - "_npmVersion": "2.15.8", - "_phantomChildren": {}, - "_requested": { - "name": "levelup", - "raw": "levelup@^1.2.1", - "rawSpec": "^1.2.1", - "scope": null, - "spec": ">=1.2.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/merkle-patricia-tree" - ], - "_resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.3.tgz", - "_shasum": "bf9db62bdb6188d08eaaa2efcf6cc311916f41fd", - "_shrinkwrap": null, - "_spec": "levelup@^1.2.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/merkle-patricia-tree", - "browser": { - "leveldown": false, - "leveldown/package": false, - "semver": false - }, - "bugs": { - "url": "https://github.com/level/levelup/issues" - }, - "contributors": [ - { - "email": "r@va.gg", - "name": "Rod Vagg", - "url": "https://github.com/rvagg" - }, - { - "email": "john@chesl.es", - "name": "John Chesley", - "url": "https://github.com/chesles/" - }, - { - "email": "raynos2@gmail.com", - "name": "Jake Verbaten", - "url": "https://github.com/raynos" - }, - { - "email": "dominic.tarr@gmail.com", - "name": "Dominic Tarr", - "url": "https://github.com/dominictarr" - }, - { - "email": "max@maxogden.com", - "name": "Max Ogden", - "url": "https://github.com/maxogden" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "Lars-Magnus Skog", - "url": "https://github.com/ralphtheninja" - }, - { - "email": "david.bjorklund@gmail.com", - "name": "David Björklund", - "url": "https://github.com/kesla" - }, - { - "email": "julian@juliangruber.com", - "name": "Julian Gruber", - "url": "https://github.com/juliangruber" - }, - { - "email": "paolo@async.ly", - "name": "Paolo Fragomeni", - "url": "https://github.com/0x00a" - }, - { - "email": "anton.whalley@nearform.com", - "name": "Anton Whalley", - "url": "https://github.com/No9" - }, - { - "email": "matteo.collina@gmail.com", - "name": "Matteo Collina", - "url": "https://github.com/mcollina" - }, - { - "email": "pedro.teixeira@gmail.com", - "name": "Pedro Teixeira", - "url": "https://github.com/pgte" - }, - { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "https://github.com/substack" - }, - { - "email": "jcrugzz@gmail.com", - "name": "Jarrett Cruger", - "url": "https://github.com/jcrugzz" - } - ], - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~6.1.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.1.0", - "xtend": "~4.0.0" - }, - "description": "Fast & simple storage - a Node.js-style LevelDB wrapper", - "devDependencies": { - "async": "~1.5.0", - "bustermove": "~1.0.0", - "delayed": "~1.0.1", - "faucet": "~0.0.1", - "leveldown": "^1.1.0", - "memdown": "~1.1.0", - "msgpack-js": "~0.3.0", - "referee": "~1.2.0", - "rimraf": "~2.4.3", - "slow-stream": "0.0.4", - "tap": "~2.3.1", - "tape": "~4.2.1" - }, - "directories": {}, - "dist": { - "shasum": "bf9db62bdb6188d08eaaa2efcf6cc311916f41fd", - "tarball": "https://registry.npmjs.org/levelup/-/levelup-1.3.3.tgz" - }, - "gitHead": "cced27dc9f0095823be5ed388ec601ec2bfe7366", - "homepage": "https://github.com/level/levelup", - "keywords": [ - "leveldb", - "stream", - "database", - "db", - "store", - "storage", - "json" - ], - "license": "MIT", - "main": "lib/levelup.js", - "maintainers": [ - { - "email": "rod@vagg.org", - "name": "rvagg" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "ralphtheninja" - }, - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - } - ], - "name": "levelup", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/level/levelup.git" - }, - "scripts": { - "test": "tape test/*-test.js | faucet" - }, - "version": "1.3.3" -} diff --git a/node_modules/levelup/test/approximate-size-test.js b/node_modules/levelup/test/approximate-size-test.js deleted file mode 100644 index 13e5a68..0000000 --- a/node_modules/levelup/test/approximate-size-test.js +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , async = require('async') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('approximateSize()', { - 'setUp': common.commonSetUp - , 'tearDown': common.commonTearDown - - , 'approximateSize() is deprecated': function (done) { - this.openTestDatabase(function (db) { - var error = console.error - console.error = function(str){ - console.error = error - assert(/deprecated/.test(str)); - done() - } - db.approximateSize('a', 'z', function(){}) - }) - } - - , 'approximateSize() works on empty database': function (done) { - this.openTestDatabase(function (db) { - db.approximateSize('a', 'z', function(err, size) { - refute(err) // sanity - assert.equals(size, 0) - done() - }) - }) - } - - , 'approximateSize() work on none-empty database': function(done) { - var location = common.nextLocation() - , db - - async.series( - [ - function (callback) { - this.openTestDatabase( - location - , function (_db) { - db = _db - callback() - } - ) - }.bind(this) - , function (callback) { - var batch = [] - , i = 0 - - for (; i < 10; ++i) { - batch.push({ - type: 'put', key: String(i), value: 'afoovalue' - }) - } - db.batch( - batch - , { sync: true } - , callback - ) - } - , function (callback) { - // close db to make sure stuff gets written to disc - db.close(callback) - } - , function (callback) { - levelup(location, function (err, _db) { - refute(err) - db = _db - callback() - }) - } - , function (callback) { - db.approximateSize('0', '99', function(err, size) { - refute(err) // sanity - refute.equals(size, 0) - callback() - }) - } - ] - , done - ) - } -}) diff --git a/node_modules/levelup/test/argument-checking-test.js b/node_modules/levelup/test/argument-checking-test.js deleted file mode 100644 index b69ea6f..0000000 --- a/node_modules/levelup/test/argument-checking-test.js +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('Argument checking', { - 'setUp': common.commonSetUp - , 'tearDown': common.commonTearDown - - , 'test get() throwables': function (done) { - this.openTestDatabase(function (db) { - - assert.exception( - db.get.bind(db) - , { name: 'ReadError', message: 'get() requires key and callback arguments' } - , 'no-arg get() throws' - ) - - assert.exception( - db.get.bind(db, 'foo') - , { name: 'ReadError', message: 'get() requires key and callback arguments' } - , 'callback-less, 1-arg get() throws' - ) - - assert.exception( - db.get.bind(db, 'foo', {}) - , { name: 'ReadError', message: 'get() requires key and callback arguments' } - , 'callback-less, 2-arg get() throws' - ) - - done() - }) - } - - , 'test put() throwables': function (done) { - this.openTestDatabase(function (db) { - - assert.exception( - db.put.bind(db) - , { name: 'WriteError', message: 'put() requires a key argument' } - , 'no-arg put() throws' - ) - - done() - }) - } - - , 'test del() throwables': function (done) { - this.openTestDatabase(function (db) { - - assert.exception( - db.del.bind(db) - , { name: 'WriteError', message: 'del() requires a key argument' } - , 'no-arg del() throws' - ) - - done() - }) - } - - , 'test approximateSize() throwables': function (done) { - this.openTestDatabase(function (db) { - - assert.exception( - db.approximateSize.bind(db) - , { name: 'ReadError', message: 'approximateSize() requires start, end and callback arguments' } - , 'no-arg approximateSize() throws' - ) - - assert.exception( - db.approximateSize.bind(db, 'foo') - , { name: 'ReadError', message: 'approximateSize() requires start, end and callback arguments' } - , 'callback-less, 1-arg approximateSize() throws' - ) - - assert.exception( - db.approximateSize.bind(db, 'foo', 'bar') - , { name: 'ReadError', message: 'approximateSize() requires start, end and callback arguments' } - , 'callback-less, 2-arg approximateSize() throws' - ) - - assert.exception( - db.approximateSize.bind(db, 'foo', 'bar', {}) - , { name: 'ReadError', message: 'approximateSize() requires start, end and callback arguments' } - , 'callback-less, 3-arg approximateSize(), no cb throws' - ) - - done() - }) - } - - , 'test batch() throwables': function (done) { - this.openTestDatabase(function (db) { - - assert.exception( - db.batch.bind(db, null, {}) - , { name: 'WriteError', message: 'batch() requires an array argument' } - , 'no-arg batch() throws' - ) - - assert.exception( - db.batch.bind(db, {}) - , { name: 'WriteError', message: 'batch() requires an array argument' } - , '1-arg, no Array batch() throws' - ) - - done() - }) - } -}) diff --git a/node_modules/levelup/test/batch-test.js b/node_modules/levelup/test/batch-test.js deleted file mode 100644 index 1cc227f..0000000 --- a/node_modules/levelup/test/batch-test.js +++ /dev/null @@ -1,404 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup') - , errors = levelup.errors - , async = require('async') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('batch()', { - 'setUp': common.commonSetUp - , 'tearDown': common.commonTearDown - - , 'batch() with multiple puts': function (done) { - this.openTestDatabase(function (db) { - db.batch( - [ - { type: 'put', key: 'foo', value: 'afoovalue' } - , { type: 'put', key: 'bar', value: 'abarvalue' } - , { type: 'put', key: 'baz', value: 'abazvalue' } - ] - , function (err) { - refute(err) - async.forEach( - ['foo', 'bar', 'baz'] - , function (key, callback) { - db.get(key, function (err, value) { - refute(err) - assert.equals(value, 'a' + key + 'value') - callback() - }) - } - , done - ) - } - ) - }) - } - - , 'batch() no type set defaults to put': function (done) { - this.openTestDatabase(function (db) { - db.batch( - [ - { key: 'foo', value: 'afoovalue' } - , { key: 'bar', value: 'abarvalue' } - , { key: 'baz', value: 'abazvalue' } - ] - , function (err) { - refute(err) - async.forEach( - ['foo', 'bar', 'baz'] - , function (key, callback) { - db.get(key, function (err, value) { - refute(err) - assert.equals(value, 'a' + key + 'value') - callback() - }) - } - , done - ) - } - ) - }) - } - - , 'batch() with multiple puts and deletes': function (done) { - this.openTestDatabase(function (db) { - async.series( - [ - function (callback) { - db.batch( - [ - { type: 'put', key: '1', value: 'one' } - , { type: 'put', key: '2', value: 'two' } - , { type: 'put', key: '3', value: 'three' } - ] - , callback - ) - } - , function (callback) { - db.batch( - [ - { type: 'put', key: 'foo', value: 'afoovalue' } - , { type: 'del', key: '1' } - , { type: 'put', key: 'bar', value: 'abarvalue' } - , { type: 'del', key: 'foo' } - , { type: 'put', key: 'baz', value: 'abazvalue' } - ] - , callback - ) - } - , function (callback) { - // these should exist - async.forEach( - ['2', '3', 'bar', 'baz'] - , function (key, callback) { - db.get(key, function (err, value) { - refute(err) - refute.isNull(value) - callback() - }) - } - , callback - ) - } - , function (callback) { - // these shouldn't exist - async.forEach( - ['1', 'foo'] - , function (key, callback) { - db.get(key, function (err, value) { - assert(err) - assert.isInstanceOf(err, errors.NotFoundError) - refute(value) - callback() - }) - } - , callback - ) - } - ] - , done - ) - }) - } - - , 'batch() with chained interface': function (done) { - this.openTestDatabase(function (db) { - db.put('1', 'one', function (err) { - refute(err) - - db.batch() - .put('one', '1') - .del('two') - .put('three', '3') - .clear() - .del('1') - .put('2', 'two') - .put('3', 'three') - .del('3') - .write(function (err) { - refute(err) - - async.forEach( - [ 'one', 'three', '1', '2', '3'] - , function (key, callback) { - db.get(key, function (err) { - if ([ 'one', 'three', '1', '3' ].indexOf(key) > -1) - assert(err) - else - refute(err) - callback() - }) - } - , done - ) - }) - }) - }) - } - - , 'batch() exposes ops queue length': function (done) { - this.openTestDatabase(function (db) { - var batch = db.batch() - .put('one', '1') - .del('two') - .put('three', '3') - assert.equals(batch.length, 3) - batch.clear() - assert.equals(batch.length, 0) - batch - .del('1') - .put('2', 'two') - .put('3', 'three') - .del('3') - assert.equals(batch.length, 4) - done() - }) - } - - , 'batch() with can manipulate data from put()': function (done) { - // checks encoding and whatnot - this.openTestDatabase(function (db) { - async.series( - [ - db.put.bind(db, '1', 'one') - , db.put.bind(db, '2', 'two') - , db.put.bind(db, '3', 'three') - , function (callback) { - db.batch( - [ - { type: 'put', key: 'foo', value: 'afoovalue' } - , { type: 'del', key: '1' } - , { type: 'put', key: 'bar', value: 'abarvalue' } - , { type: 'del', key: 'foo' } - , { type: 'put', key: 'baz', value: 'abazvalue' } - ] - , callback - ) - } - , function (callback) { - // these should exist - async.forEach( - ['2', '3', 'bar', 'baz'] - , function (key, callback) { - db.get(key, function (err, value) { - refute(err) - refute.isNull(value) - callback() - }) - } - , callback - ) - } - , function (callback) { - // these shouldn't exist - async.forEach( - ['1', 'foo'] - , function (key, callback) { - db.get(key, function (err, value) { - assert(err) - assert.isInstanceOf(err, errors.NotFoundError) - refute(value) - callback() - }) - } - , callback - ) - } - ] - , done - ) - }) - } - - , 'batch() data can be read with get() and del()': function (done) { - this.openTestDatabase(function (db) { - async.series( - [ - function (callback) { - db.batch( - [ - { type: 'put', key: '1', value: 'one' } - , { type: 'put', key: '2', value: 'two' } - , { type: 'put', key: '3', value: 'three' } - ] - , callback - ) - } - , db.del.bind(db, '1', 'one') - , function (callback) { - // these should exist - async.forEach( - ['2', '3'] - , function (key, callback) { - db.get(key, function (err, value) { - refute(err) - refute.isNull(value) - callback() - }) - } - , callback - ) - } - , function (callback) { - // this shouldn't exist - db.get('1', function (err, value) { - assert(err) - assert.isInstanceOf(err, errors.NotFoundError) - refute(value) - callback() - }) - } - ] - , done - ) - }) - } - - , 'chained batch() arguments': { - 'setUp': function (done) { - this.openTestDatabase(function (db) { - this.db = db - this.batch = db.batch() - done() - }.bind(this)) - } - - , 'test batch#put() with missing `value`': function () { - // value = undefined - this.batch.put('foo1') - - this.batch.put('foo1', null) - } - - , 'test batch#put() with missing `key`': function () { - // key = undefined - assert.exception(this.batch.put.bind(this.batch, undefined, 'foo1'), function (err) { - if (err.name != 'WriteError') - return false - if ('key cannot be `null` or `undefined`' != err.message) - return false - return true - }) - - // key = null - assert.exception(this.batch.put.bind(this.batch, null, 'foo1'), function (err) { - if (err.name != 'WriteError') - return false - if ('key cannot be `null` or `undefined`' != err.message) - return false - return true - }) - } - - , 'test batch#put() with missing `key` and `value`': function () { - // undefined - assert.exception(this.batch.put.bind(this.batch), function (err) { - if (err.name != 'WriteError') - return false - if ('key cannot be `null` or `undefined`' != err.message) - return false - return true - }) - - // null - assert.exception(this.batch.put.bind(this.batch, null, null), function (err) { - if (err.name != 'WriteError') - return false - if ('key cannot be `null` or `undefined`' != err.message) - return false - return true - }) - } - - , 'test batch#del() with missing `key`': function () { - // key = undefined - assert.exception(this.batch.del.bind(this.batch, undefined, 'foo1'), function (err) { - if (err.name != 'WriteError') - return false - if ('key cannot be `null` or `undefined`' != err.message) - return false - return true - }) - - // key = null - assert.exception(this.batch.del.bind(this.batch, null, 'foo1'), function (err) { - if (err.name != 'WriteError') - return false - if ('key cannot be `null` or `undefined`' != err.message) - return false - return true - }) - } - - , 'test batch#write() with no callback': function () { - this.batch.write() // should not cause an error with no cb - } - - , 'test batch operations after write()': { - 'setUp': function (done) { - this.batch.put('foo', 'bar').put('boom', 'bang').del('foo').write(done) - this.verify = function (cb) { - assert.exception(cb, function (err) { - if (err.name != 'WriteError') - return false - if ('write() already called on this batch' != err.message) - return false - return true - }) - } - } - - , 'test put()': function () { - this.verify(function () { - this.batch.put('whoa', 'dude') - }.bind(this)) - } - - , 'test del()': function () { - this.verify(function () { - this.batch.del('foo') - }.bind(this)) - } - - , 'test clear()': function () { - this.verify(function () { - this.batch.clear() - }.bind(this)) - } - - , 'test write()': function () { - this.verify(function () { - this.batch.write() - }.bind(this)) - } - } - } -}) diff --git a/node_modules/levelup/test/binary-test.js b/node_modules/levelup/test/binary-test.js deleted file mode 100644 index 6d3d33d..0000000 --- a/node_modules/levelup/test/binary-test.js +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var async = require('async') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('Binary API', { - 'setUp': function (done) { - common.commonSetUp.call(this, function () { - common.loadBinaryTestData(function (err, data) { - refute(err) - this.testData = data - done() - }.bind(this)) - }.bind(this)) - } - - , 'tearDown': common.commonTearDown - - , 'sanity check on test data': function (done) { - assert(Buffer.isBuffer(this.testData)) - common.checkBinaryTestData(this.testData, done) - } - - , 'test put() and get() with binary value {valueEncoding:binary}': function (done) { - this.openTestDatabase(function (db) { - db.put('binarydata', this.testData, { valueEncoding: 'binary' }, function (err) { - refute(err) - db.get('binarydata', { valueEncoding: 'binary' }, function (err, value) { - refute(err) - assert(value) - common.checkBinaryTestData(value, done) - }) - }) - }.bind(this)) - } - - , 'test put() and get() with binary value {valueEncoding:binary} on createDatabase()': function (done) { - this.openTestDatabase({ createIfMissing: true, errorIfExists: true, valueEncoding: 'binary' }, function (db) { - db.put('binarydata', this.testData, function (err) { - refute(err) - db.get('binarydata', function (err, value) { - refute(err) - assert(value) - common.checkBinaryTestData(value, done) - }) - }) - }.bind(this)) - } - - , 'test put() and get() with binary key {valueEncoding:binary}': function (done) { - this.openTestDatabase(function (db) { - db.put(this.testData, 'binarydata', { valueEncoding: 'binary' }, function (err) { - refute(err) - db.get(this.testData, { valueEncoding: 'binary' }, function (err, value) { - refute(err) - assert(value instanceof Buffer, 'value is buffer') - assert.equals(value.toString(), 'binarydata') - done() - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - , 'test put() and get() with binary value {keyEncoding:utf8,valueEncoding:binary}': function (done) { - this.openTestDatabase(function (db) { - db.put('binarydata', this.testData, { keyEncoding: 'utf8', valueEncoding: 'binary' }, function (err) { - refute(err) - db.get('binarydata', { keyEncoding: 'utf8', valueEncoding: 'binary' }, function (err, value) { - refute(err) - assert(value) - common.checkBinaryTestData(value, done) - }) - }) - }.bind(this)) - } - - , 'test put() and get() with binary value {keyEncoding:utf8,valueEncoding:binary} on createDatabase()': function (done) { - this.openTestDatabase({ createIfMissing: true, errorIfExists: true, keyEncoding: 'utf8', valueEncoding: 'binary' }, function (db) { - db.put('binarydata', this.testData, function (err) { - refute(err) - db.get('binarydata', function (err, value) { - refute(err) - assert(value) - common.checkBinaryTestData(value, done) - }) - }) - }.bind(this)) - } - - , 'test put() and get() with binary key {keyEncoding:binary,valueEncoding:utf8}': function (done) { - this.openTestDatabase(function (db) { - db.put(this.testData, 'binarydata', { keyEncoding: 'binary', valueEncoding: 'utf8' }, function (err) { - refute(err) - db.get(this.testData, { keyEncoding: 'binary', valueEncoding: 'utf8' }, function (err, value) { - refute(err) - assert.equals(value, 'binarydata') - done() - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - , 'test put() and get() with binary key & value {valueEncoding:binary}': function (done) { - this.openTestDatabase(function (db) { - db.put(this.testData, this.testData, { valueEncoding: 'binary' }, function (err) { - refute(err) - db.get(this.testData, { valueEncoding: 'binary' }, function (err, value) { - refute(err) - common.checkBinaryTestData(value, done) - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - - , 'test put() and del() and get() with binary key {valueEncoding:binary}': function (done) { - this.openTestDatabase(function (db) { - db.put(this.testData, 'binarydata', { valueEncoding: 'binary' }, function (err) { - refute(err) - db.del(this.testData, { valueEncoding: 'binary' }, function (err) { - refute(err) - db.get(this.testData, { valueEncoding: 'binary' }, function (err, value) { - assert(err) - refute(value) - done() - }.bind(this)) - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - , 'batch() with multiple puts': function (done) { - this.openTestDatabase(function (db) { - db.batch( - [ - { type: 'put', key: 'foo', value: this.testData } - , { type: 'put', key: 'bar', value: this.testData } - , { type: 'put', key: 'baz', value: 'abazvalue' } - ] - , { keyEncoding: 'utf8',valueEncoding: 'binary' } - , function (err) { - refute(err) - async.forEach( - ['foo', 'bar', 'baz'] - , function (key, callback) { - db.get(key, { valueEncoding: 'binary' }, function (err, value) { - refute(err) - if (key == 'baz') { - assert(value instanceof Buffer, 'value is buffer') - assert.equals(value.toString(), 'a' + key + 'value') - callback() - } else { - common.checkBinaryTestData(value, callback) - } - }) - } - , done - ) - }.bind(this) - ) - }.bind(this)) - } -}) diff --git a/node_modules/levelup/test/common.js b/node_modules/levelup/test/common.js deleted file mode 100644 index c947019..0000000 --- a/node_modules/levelup/test/common.js +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var referee = require('referee') - , assert = referee.assert - , refute = referee.refute - , crypto = require('crypto') - , async = require('async') - , rimraf = require('rimraf') - , fs = require('fs') - , path = require('path') - , delayed = require('delayed').delayed - , levelup = require('../lib/levelup.js') - , errors = require('level-errors') - , dbidx = 0 - -assert(levelup.errors === errors); - -referee.add('isInstanceOf', { - assert: function (actual, expected) { - return actual instanceof expected - } - , refute: function (actual, expected) { - return !(actual instanceof expected) - } - , assertMessage: '${0} expected to be instance of ${1}' - , refuteMessage: '${0} expected not to be instance of ${1}' -}) - -referee.add('isUndefined', { - assert: function (actual) { - return actual === undefined - } - , refute: function (actual) { - return actual !== undefined - } - , assertMessage: '${0} expected to be undefined' - , refuteMessage: '${0} expected not to be undefined' -}) - -module.exports.nextLocation = function () { - return path.join(__dirname, '_levelup_test_db_' + dbidx++) -} - -module.exports.cleanup = function (callback) { - fs.readdir(__dirname, function (err, list) { - if (err) return callback(err) - - list = list.filter(function (f) { - return (/^_levelup_test_db_/).test(f) - }) - - if (!list.length) - return callback() - - var ret = 0 - - list.forEach(function (f) { - rimraf(path.join(__dirname, f), function () { - if (++ret == list.length) - callback() - }) - }) - }) -} - -module.exports.openTestDatabase = function () { - var options = typeof arguments[0] == 'object' ? arguments[0] : { createIfMissing: true, errorIfExists: true } - , callback = typeof arguments[0] == 'function' ? arguments[0] : arguments[1] - , location = typeof arguments[0] == 'string' ? arguments[0] : module.exports.nextLocation() - - rimraf(location, function (err) { - refute(err) - this.cleanupDirs.push(location) - levelup(location, options, function (err, db) { - refute(err) - if (!err) { - this.closeableDatabases.push(db) - callback(db) - } - }.bind(this)) - }.bind(this)) -} - -module.exports.commonTearDown = function (done) { - async.forEach( - this.closeableDatabases - , function (db, callback) { - db.close(callback) - } - , module.exports.cleanup.bind(null, done) - ) -} - -module.exports.loadBinaryTestData = function (callback) { - fs.readFile(path.join(__dirname, 'data/testdata.bin'), callback) -} - -module.exports.binaryTestDataMD5Sum = '920725ef1a3b32af40ccd0b78f4a62fd' - -module.exports.checkBinaryTestData = function (testData, callback) { - var md5sum = crypto.createHash('md5'); - md5sum.update(testData) - assert.equals(md5sum.digest('hex'), module.exports.binaryTestDataMD5Sum) - callback() -} - -module.exports.commonSetUp = function (done) { - this.cleanupDirs = [] - this.closeableDatabases = [] - this.openTestDatabase = module.exports.openTestDatabase.bind(this) - this.timeout = 10000 - module.exports.cleanup(done) -} - -module.exports.readStreamSetUp = function (done) { - module.exports.commonSetUp.call(this, function () { - var i, k - - this.dataSpy = this.spy() - this.endSpy = this.spy() - this.sourceData = [] - - for (i = 0; i < 100; i++) { - k = (i < 10 ? '0' : '') + i - this.sourceData.push({ - type : 'put' - , key : k - , value : Math.random() - }) - } - - this.verify = delayed(function (rs, done, data) { - if (!data) data = this.sourceData // can pass alternative data array for verification - assert.equals(this.endSpy.callCount, 1, 'ReadStream emitted single "end" event') - assert.equals(this.dataSpy.callCount, data.length, 'ReadStream emitted correct number of "data" events') - data.forEach(function (d, i) { - var call = this.dataSpy.getCall(i) - if (call) { - assert.equals(call.args.length, 1, 'ReadStream "data" event #' + i + ' fired with 1 argument') - refute.isNull(call.args[0].key, 'ReadStream "data" event #' + i + ' argument has "key" property') - refute.isNull(call.args[0].value, 'ReadStream "data" event #' + i + ' argument has "value" property') - assert.equals(call.args[0].key, d.key, 'ReadStream "data" event #' + i + ' argument has correct "key"') - assert.equals( - +call.args[0].value - , +d.value - , 'ReadStream "data" event #' + i + ' argument has correct "value"' - ) - } - }.bind(this)) - done() - }, 0.05, this) - - done() - - }.bind(this)) -} diff --git a/node_modules/levelup/test/create-stream-vs-put-racecondition.js b/node_modules/levelup/test/create-stream-vs-put-racecondition.js deleted file mode 100644 index f94e09f..0000000 --- a/node_modules/levelup/test/create-stream-vs-put-racecondition.js +++ /dev/null @@ -1,102 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , common = require('./common') - , rimraf = require('rimraf') - , async = require('async') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -function makeTest (db, delay, done) { - // this should be an empty stream - var i = 0, j = 0, k = 0, m = 0 - var streamEnd = false, putEnd = false - - db.createReadStream() - .on('data', function (data) { - i++ - }) - .on('end', function () { - //since the readStream is created before inserting anything - //it should be empty? right? - assert.equals(i, 0, 'stream read the future') - - if(putEnd) done() - streamEnd = true - }) - - db.on('put', function (key, value) { - j++ - }) - - - //insert 10 things, - //then check the right number of events where emitted. - function insert() { - m ++ - db.put('hello'+ k++/10, k, next) - } - - delay(function () { - insert();insert();insert();insert();insert(); - insert();insert();insert();insert();insert(); - }) - - function next() { - if(--m) return - process.nextTick(function () { - assert.equals(j, 10) - assert.equals(i, 0) - - if(streamEnd) done() - putEnd = true - }) - } - -} - -buster.testCase('ReadStream', { - 'setUp': common.readStreamSetUp - - , 'tearDown': common.commonTearDown - - //TODO: test various encodings - , 'readStream and then put in nextTick': function (done) { - this.openTestDatabase(function (db) { - makeTest(db, process.nextTick, done) - }.bind(this)) - } - , 'readStream and then put in nextTick, defered open': function (done) { - var location = common.nextLocation() - , db = levelup(location) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - - makeTest(db, process.nextTick, done) - - } - , 'readStream and then put, defered open': function (done) { - var location = common.nextLocation() - , db = levelup(location) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - - makeTest(db, function (f) {f()}, done) - } - , 'readStream and then put': function (done) { - this.openTestDatabase(function (db) { - makeTest(db, function (f) {f()}, done) - }.bind(this)) - } - -}) - - - diff --git a/node_modules/levelup/test/data/testdata.bin b/node_modules/levelup/test/data/testdata.bin deleted file mode 100644 index 59229b9..0000000 Binary files a/node_modules/levelup/test/data/testdata.bin and /dev/null differ diff --git a/node_modules/levelup/test/deferred-open-test.js b/node_modules/levelup/test/deferred-open-test.js deleted file mode 100644 index 2fa425c..0000000 --- a/node_modules/levelup/test/deferred-open-test.js +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , async = require('async') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('Deferred open()', { - 'setUp': common.commonSetUp - , 'tearDown': common.commonTearDown - - , 'put() and get() on pre-opened database': function (done) { - var location = common.nextLocation() - // 1) open database without callback, opens in worker thread - , db = levelup(location, { createIfMissing: true, errorIfExists: true, valueEncoding: 'utf8' }) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - assert.isObject(db) - assert.equals(db.location, location) - - async.parallel([ - // 2) insert 3 values with put(), these should be deferred until the database is actually open - db.put.bind(db, 'k1', 'v1') - , db.put.bind(db, 'k2', 'v2') - , db.put.bind(db, 'k3', 'v3') - ], function () { - // 3) when the callbacks have returned, the database should be open and those values should be in - // verify that the values are there - async.forEach( - [1,2,3] - , function (k, cb) { - db.get('k' + k, function (err, v) { - refute(err) - assert.equals(v, 'v' + k) - cb() - }) - } - // sanity, this shouldn't exist - , function () { - db.get('k4', function (err) { - assert(err) - // DONE - done() - }) - } - ) - }) - - // we should still be in a state of limbo down here, not opened or closed, but 'new' - refute(db.isOpen()) - refute(db.isClosed()) - } - - , 'batch() on pre-opened database': function (done) { - var location = common.nextLocation() - // 1) open database without callback, opens in worker thread - , db = levelup(location, { createIfMissing: true, errorIfExists: true, valueEncoding: 'utf8' }) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - assert.isObject(db) - assert.equals(db.location, location) - - // 2) insert 3 values with batch(), these should be deferred until the database is actually open - db.batch([ - { type: 'put', key: 'k1', value: 'v1' } - , { type: 'put', key: 'k2', value: 'v2' } - , { type: 'put', key: 'k3', value: 'v3' } - ], function () { - // 3) when the callbacks have returned, the database should be open and those values should be in - // verify that the values are there - async.forEach( - [1,2,3] - , function (k, cb) { - db.get('k' + k, function (err, v) { - refute(err) - assert.equals(v, 'v' + k) - cb() - }) - } - // sanity, this shouldn't exist - , function () { - db.get('k4', function (err) { - assert(err) - // DONE - done() - }) - } - ) - }) - - // we should still be in a state of limbo down here, not opened or closed, but 'new' - refute(db.isOpen()) - refute(db.isClosed()) - } - - , 'chained batch() on pre-opened database': function (done) { - var location = common.nextLocation() - // 1) open database without callback, opens in worker thread - , db = levelup(location, { createIfMissing: true, errorIfExists: true, valueEncoding: 'utf8' }) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - assert.isObject(db) - assert.equals(db.location, location) - - // 2) insert 3 values with batch(), these should be deferred until the database is actually open - db.batch() - .put('k1', 'v1') - .put('k2', 'v2') - .put('k3', 'v3') - .write(function () { - // 3) when the callbacks have returned, the database should be open and those values should be in - // verify that the values are there - async.forEach( - [1,2,3] - , function (k, cb) { - db.get('k' + k, function (err, v) { - refute(err) - assert.equals(v, 'v' + k) - cb() - }) - } - // sanity, this shouldn't exist - , function () { - db.get('k4', function (err) { - assert(err) - // DONE - done() - }) - } - ) - - }) - - // we should still be in a state of limbo down here, not opened or closed, but 'new' - refute(db.isOpen()) - refute(db.isClosed()) - } - - , 'test deferred ReadStream': { - 'setUp': common.readStreamSetUp - - , 'simple ReadStream': function (done) { - this.openTestDatabase(function (db) { - var location = db.location - db.batch(this.sourceData.slice(), function (err) { - refute(err) - db.close(function (err) { - refute(err, 'no error') - db = levelup(location, { createIfMissing: false, errorIfExists: false }) - var rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - } - - , 'maxListeners warning': function (done) { - var location = common.nextLocation() - // 1) open database without callback, opens in worker thread - , db = levelup(location, { createIfMissing: true, errorIfExists: true, valueEncoding: 'utf8' }) - , stderrMock = this.mock(console) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - stderrMock.expects('error').never() - - // 2) provoke an EventEmitter maxListeners warning - var toPut = 11 - - for (var i = 0; i < toPut; i++) { - db.put('some', 'string', function (err) { - refute(err) - - if (!--toPut) { - done() - } - }) - } - } -}) diff --git a/node_modules/levelup/test/destroy-repair-test.js b/node_modules/levelup/test/destroy-repair-test.js deleted file mode 100644 index 2991eb1..0000000 --- a/node_modules/levelup/test/destroy-repair-test.js +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , leveldown = require('leveldown') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('Destroy & Repair', { - 'destroy() is alias for leveldown.destroy()': function () { - var ldmock = this.mock(leveldown) - , expect = ldmock.expects('destroy').once() - levelup.destroy() - ldmock.verify() - assert.same(expect.getCall(0).args[0], undefined) - } - - , 'repair() is alias for leveldown.repair()': function () { - var ldmock = this.mock(leveldown) - , expect = ldmock.expects('repair').once() - levelup.repair() - ldmock.verify() - assert.same(expect.getCall(0).args[0], undefined) - } - - , 'destroy() passes on arguments': function () { - var ldmock = this.mock(leveldown) - , args = [ 'location', function () { } ] - , expect = ldmock - .expects('destroy') - .once() - .withExactArgs(args[0], args[1]) - - levelup.destroy.apply(null, args) - ldmock.verify() - } - - , 'repair() passes on arguments': function () { - var ldmock = this.mock(leveldown) - , args = [ 'location', function () { } ] - , expect = ldmock - .expects('repair') - .once() - .withExactArgs(args[0], args[1]) - - levelup.repair.apply(null, args) - ldmock.verify() - } - - , 'destroy() substitutes missing callback argument': function () { - var ldmock = this.mock(leveldown) - , args = [ 'location' ] - , expect = ldmock - .expects('destroy') - .once() - .withArgs(args[0]) - - levelup.destroy.apply(null, args) - ldmock.verify() - assert.equals(2, expect.getCall(0).args.length) - assert.isFunction(expect.getCall(0).args[1]) - } - - , 'repair() substitutes missing callback argument': function () { - var ldmock = this.mock(leveldown) - , args = [ 'location' ] - , expect = ldmock - .expects('repair') - .once() - .withArgs(args[0]) - - levelup.repair.apply(null, args) - ldmock.verify() - assert.equals(2, expect.getCall(0).args.length) - assert.isFunction(expect.getCall(0).args[1]) - } -}) diff --git a/node_modules/levelup/test/encoding-test.js b/node_modules/levelup/test/encoding-test.js deleted file mode 100644 index bb523e7..0000000 --- a/node_modules/levelup/test/encoding-test.js +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , common = require('./common') - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('Encoding', { - 'setUp': common.readStreamSetUp - - , 'tearDown': common.commonTearDown - - , 'test safe decode in get()': function (done) { - this.openTestDatabase( - { createIfMissing: true, errorIfExists: true, valueEncoding: 'utf8' } - , function (db) { - db.put('foo', 'this {} is [] not : json', function (err) { - refute(err) - db.close(function (err) { - refute(err) - db = levelup(db.location, { createIfMissing: false, errorIfExists: false, valueEncoding: 'json' }) - db.get('foo', function (err, value) { - assert(err) - assert.equals('EncodingError', err.name) - refute(value) - db.close(done) - }) - }) - }) - } - ) - } - - , 'test safe decode in readStream()': function (done) { - this.openTestDatabase( - { createIfMissing: true, errorIfExists: true, valueEncoding: 'utf8' } - , function (db) { - db.put('foo', 'this {} is [] not : json', function (err) { - refute(err) - db.close(function (err) { - refute(err) - - var dataSpy = this.spy() - , errorSpy = this.spy() - - db = levelup(db.location, { createIfMissing: false, errorIfExists: false, valueEncoding: 'json' }) - db.readStream() - .on('data', dataSpy) - .on('error', errorSpy) - .on('close', function () { - assert.equals(dataSpy.callCount, 0, 'no data') - assert.equals(errorSpy.callCount, 1, 'error emitted') - assert.equals('EncodingError', errorSpy.getCall(0).args[0].name) - db.close(done) - }) - }.bind(this)) - }.bind(this)) - }.bind(this) - ) - } - - , 'test encoding = valueEncoding': function (done) { - // write a value as JSON, read as utf8 and check - // the fact that we can get with keyEncoding of utf8 should demonstrate that - // the key is not encoded as JSON - this.openTestDatabase({ valueEncoding: 'json' }, function (db) { - db.put('foo:foo', { bar: 'bar' }, function (err) { - refute(err) - db.get('foo:foo', { keyEncoding: 'utf8', valueEncoding: 'utf8' }, function (err, value) { - refute(err) - assert.equals(value, '{"bar":"bar"}') - db.close(done) - }) - }) - }) - } - , 'test batch op encoding': function (done) { - this.openTestDatabase({ valueEncoding: 'json' }, function (db) { - db.batch([ - { - type : 'put', - key : new Buffer([1, 2, 3]), - value : new Buffer([4, 5, 6]), - keyEncoding : 'binary', - valueEncoding : 'binary' - } - , { - type : 'put', - key : 'string', - value : 'string' - } - ], { keyEncoding : 'utf8', valueEncoding : 'utf8' }, - function (err) { - refute(err) - db.get(new Buffer([1, 2, 3]), { - keyEncoding : 'binary', - valueEncoding : 'binary' - }, function (err, val) { - refute(err) - assert.equals(val.toString(), '\u0004\u0005\u0006') - - db.get('string', { valueEncoding : 'utf8' }, function (err, val) { - refute(err) - assert.equals(val, 'string') - db.close(done) - }) - }) - }) - }) - } -}) diff --git a/node_modules/levelup/test/get-put-del-test.js b/node_modules/levelup/test/get-put-del-test.js deleted file mode 100644 index 4c007fe..0000000 --- a/node_modules/levelup/test/get-put-del-test.js +++ /dev/null @@ -1,150 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , errors = levelup.errors - , async = require('async') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('get() / put() / del()', { - 'setUp': common.commonSetUp - , 'tearDown': common.commonTearDown - - , 'Simple operations': { - 'get() on empty database causes error': function (done) { - this.openTestDatabase(function (db) { - db.get('undefkey', function (err, value) { - refute(value) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - assert.isInstanceOf(err, errors.NotFoundError) - assert(err.notFound === true, 'err.notFound is `true`') - assert.equals(err.status, 404, 'err.status is 404') - assert.match(err, '[undefkey]') - done() - }) - }) - } - - , 'put() and get() simple string key/value pairs': function (done) { - this.openTestDatabase(function (db) { - db.put('some key', 'some value stored in the database', function (err) { - refute(err) - db.get('some key', function (err, value) { - refute(err) - assert.equals(value, 'some value stored in the database') - done() - }) - }) - }) - } - - , 'del() on empty database doesn\'t cause error': function (done) { - this.openTestDatabase(function (db) { - db.del('undefkey', function (err) { - refute(err) - done() - }) - }) - } - - , 'del() works on real entries': function (done) { - this.openTestDatabase(function (db) { - async.series( - [ - function (callback) { - async.forEach( - ['foo', 'bar', 'baz'] - , function (key, callback) { - db.put(key, 1 + Math.random(), callback) - } - , callback - ) - } - , function (callback) { - db.del('bar', callback) - } - , function (callback) { - async.forEach( - ['foo', 'bar', 'baz'] - , function (key, callback) { - db.get(key, function (err, value) { - // we should get foo & baz but not bar - if (key == 'bar') { - assert(err) - refute(value) - } else { - refute(err) - assert(value) - } - callback() - }) - } - , callback - ) - } - ] - , done - ) - }) - } - } - - , 'test get() throwables': function (done) { - this.openTestDatabase(function (db) { - - assert.exception( - db.get.bind(db) - , { name: 'ReadError', message: 'get() requires key and callback arguments' } - , 'no-arg get() throws' - ) - - assert.exception( - db.get.bind(db, 'foo') - , { name: 'ReadError', message: 'get() requires key and callback arguments' } - , 'callback-less, 1-arg get() throws' - ) - - assert.exception( - db.get.bind(db, 'foo', {}) - , { name: 'ReadError', message: 'get() requires key and callback arguments' } - , 'callback-less, 2-arg get() throws' - ) - - done() - }) - } - - , 'test put() throwables': function (done) { - this.openTestDatabase(function (db) { - - assert.exception( - db.put.bind(db) - , { name: 'WriteError', message: 'put() requires a key argument' } - , 'no-arg put() throws' - ) - - done() - }) - } - - , 'test del() throwables': function (done) { - this.openTestDatabase(function (db) { - - assert.exception( - db.del.bind(db) - , { name: 'WriteError', message: 'del() requires a key argument' } - , 'no-arg del() throws' - ) - - done() - }) - } - -}) diff --git a/node_modules/levelup/test/idempotent-test.js b/node_modules/levelup/test/idempotent-test.js deleted file mode 100644 index 98da8c9..0000000 --- a/node_modules/levelup/test/idempotent-test.js +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('Idempotent open & close', { - 'setUp': common.readStreamSetUp - - , 'tearDown': common.commonTearDown - - , 'call open twice, should emit "open" once': function (done) { - var location = common.nextLocation() - , n = 0 - , m = 0 - , db - , close = function () { - var closing = this.spy() - db.on('closing', closing) - db.on('closed', function () { - assert.equals(closing.callCount, 1) - assert.equals(closing.getCall(0).args, []) - done() - }) - - //close needs to be idempotent too. - db.close() - process.nextTick(db.close.bind(db)) - }.bind(this) - - this.cleanupDirs.push(location) - - db = levelup( - location - , { createIfMissing: true } - , function () { - assert.equals(n++, 0, 'callback should fire only once') - if (n && m) - close() - } - ) - - db.on('open', function () { - assert.equals(m++, 0, 'callback should fire only once') - if (n && m) - close() - }) - - db.open() - } -}) diff --git a/node_modules/levelup/test/init-test.js b/node_modules/levelup/test/init-test.js deleted file mode 100644 index c494348..0000000 --- a/node_modules/levelup/test/init-test.js +++ /dev/null @@ -1,217 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , errors = levelup.errors - , fs = require('fs') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - , MemDOWN = require('memdown') - -buster.testCase('Init & open()', { - 'setUp': common.commonSetUp - , 'tearDown': common.commonTearDown - - , 'levelup()': function () { - assert.isFunction(levelup) - assert.equals(levelup.length, 3) // location, options & callback arguments - assert.exception(levelup, 'InitializationError') // no location - } - - , 'default options': function (done) { - var location = common.nextLocation() - levelup(location, { createIfMissing: true, errorIfExists: true }, function (err, db) { - refute(err, 'no error') - assert.isTrue(db.isOpen()) - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - db.close(function (err) { - refute(err) - - assert.isFalse(db.isOpen()) - - levelup(location, function (err, db) { // no options object - refute(err) - assert.isObject(db) - assert.isTrue(db.options.createIfMissing) - assert.isFalse(db.options.errorIfExists) - assert.equals(db.options.keyEncoding, 'utf8') - assert.equals(db.options.valueEncoding, 'utf8') - assert.equals(db.location, location) - - // read-only properties - db.location = 'foo' - assert.equals(db.location, location) - - done() - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - , 'basic options': function (done) { - var location = common.nextLocation() - levelup( - location - , { createIfMissing: true, errorIfExists: true, valueEncoding: 'binary' } - , function (err, db) { - refute(err) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - assert.isObject(db) - assert.isTrue(db.options.createIfMissing) - assert.isTrue(db.options.errorIfExists) - assert.equals(db.options.keyEncoding, 'utf8') - assert.equals(db.options.valueEncoding, 'binary') - assert.equals(db.location, location) - - - // read-only properties - db.location = 'bar' - assert.equals(db.location, location) - - done() - }.bind(this) - ) - } - - , 'options with encoding': function (done) { - var location = common.nextLocation() - levelup( - location - , { createIfMissing: true, errorIfExists: true, keyEncoding: 'ascii', valueEncoding: 'json' } - , function (err, db) { - refute(err) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - assert.isObject(db) - assert.isTrue(db.options.createIfMissing) - assert.isTrue(db.options.errorIfExists) - assert.equals(db.options.keyEncoding, 'ascii') - assert.equals(db.options.valueEncoding, 'json') - assert.equals(db.location, location) - - - // read-only properties - db.location = 'bar' - assert.equals(db.location, location) - - done() - }.bind(this) - ) - } - - , 'without callback': function (done) { - var location = common.nextLocation() - , db = levelup(location, { createIfMissing: true, errorIfExists: true }) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - assert.isObject(db) - assert.isTrue(db.options.createIfMissing) - assert.isTrue(db.options.errorIfExists) - assert.equals(db.location, location) - - db.on("ready", function () { - assert.isTrue(db.isOpen()) - done() - }) - } - - , 'open() with !createIfMissing expects error': function (done) { - levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: false }, function (err, db) { - assert(err) - refute(db) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - assert.isInstanceOf(err, errors.OpenError) - assert(err.notFound === undefined, 'err.notFound is `undefined`, should only be on NotFoundError') - done() - }.bind(this)) - } - - , 'open() with createIfMissing expects directory to be created': function (done) { - levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: true }, function (err, db) { - this.closeableDatabases.push(db) - refute(err) - assert.isTrue(db.isOpen()) - fs.stat(this.cleanupDirs[0], function (err, stat) { - refute(err) - assert(stat.isDirectory()) - done() - }) - }.bind(this)) - } - - , 'open() with errorIfExists expects error if exists': function (done) { - levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: true }, function (err, db) { - this.closeableDatabases.push(db) - refute(err) // sanity - levelup(this.cleanupDirs[0], { errorIfExists : true }, function (err) { - assert(err) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - assert.isInstanceOf(err, errors.OpenError) - done() - }) - }.bind(this)) - } - - , 'open() with !errorIfExists does not expect error if exists': function (done) { - levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: true }, function (err, db) { - refute(err) // sanity - this.closeableDatabases.push(db) - assert.isTrue(db.isOpen()) - - db.close(function () { - assert.isFalse(db.isOpen()) - - levelup(this.cleanupDirs[0], { errorIfExists : false }, function (err, db) { - refute(err) - this.closeableDatabases.push(db) - assert.isTrue(db.isOpen()) - done() - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - , 'constructor with options argument uses factory': function (done) { - var db = levelup({ db: MemDOWN }) - assert.isNull(db.location, 'location property is null') - db.on('open', function () { - assert(db.db instanceof MemDOWN, 'using a memdown backend') - assert.same(db.db.location, '', 'db location property is ""') - db.put('foo', 'bar', function (err) { - refute(err, 'no error') - db.get('foo', function (err, value) { - assert.equals(value, 'bar', 'correct value') - done() - }) - }) - }) - } - - , 'constructor with only function argument uses factory': function (done) { - var db = levelup(MemDOWN) - assert.isNull(db.location, 'location property is null') - db.on('open', function () { - assert(db.db instanceof MemDOWN, 'using a memdown backend') - assert.same(db.db.location, '', 'db location property is ""') - db.put('foo', 'bar', function (err) { - refute(err, 'no error') - db.get('foo', function (err, value) { - assert.equals(value, 'bar', 'correct value') - done() - }) - }) - }) - } -}) diff --git a/node_modules/levelup/test/inject-encoding-test.js b/node_modules/levelup/test/inject-encoding-test.js deleted file mode 100644 index 4993823..0000000 --- a/node_modules/levelup/test/inject-encoding-test.js +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , async = require('async') - , common = require('./common') - , msgpack = require('msgpack-js') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('JSON API', { - 'setUp': function (done) { - common.commonSetUp.call(this, function () { - this.runTest = function (testData, assertType, done) { - var location = common.nextLocation() - this.cleanupDirs.push(location) - console.log(location) - levelup(location, { - createIfMissing: true, - errorIfExists: true, - valueEncoding: { - encode: msgpack.encode, - decode: msgpack.decode, - buffer: true, - type: 'msgpack' - } - }, function (err, db) { - refute(err) - if (err) return - - this.closeableDatabases.push(db) - - async.parallel( - testData.map(function (d) { return db.put.bind(db, d.key, d.value) }) - , function (err) { - refute(err) - - async.forEach( - testData - , function (d, callback) { - db.get(d.key, function (err, value) { - if(err) console.error(err.stack) - refute(err) - assert[assertType](d.value, value) - callback() - }) - } - , done - ) - } - ) - - }.bind(this)) - } - done() - }.bind(this)) - } - - , 'tearDown': common.commonTearDown - - , 'simple-object values in "json" encoding': function (done) { - this.runTest([ - { key: '0', value: 0 } - , { key: '1', value: 1 } - , { key: 'string', value: 'a string' } - , { key: 'true', value: true } - , { key: 'false', value: false } - ], 'same', done) - } - - , 'simple-object keys in "json" encoding': function (done) { - this.runTest([ - { value: '0', key: 0 } - , { value: '1', key: 1 } - , { value: 'string', key: 'a string' } - , { value: 'true', key: true } - , { value: 'false', key: false } - ], 'same', done) - } - - , 'complex-object values in "json" encoding': function (done) { - this.runTest([ - { key: '0', value: { - foo: 'bar' - , bar: [ 1, 2, 3 ] - , bang: { yes: true, no: false } - }} - ], 'equals', done) - } - - , 'complex-object keys in "json" encoding': function (done) { - this.runTest([ - { value: '0', key: { - foo: 'bar' - , bar: [ 1, 2, 3 ] - , bang: { yes: true, no: false } - }} - ], 'same', done) - } -}); diff --git a/node_modules/levelup/test/json-test.js b/node_modules/levelup/test/json-test.js deleted file mode 100644 index 85e2ae7..0000000 --- a/node_modules/levelup/test/json-test.js +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , async = require('async') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('JSON API', { - 'setUp': function (done) { - common.commonSetUp.call(this, function () { - this.runTest = function (testData, assertType, done) { - var location = common.nextLocation() - this.cleanupDirs.push(location) - levelup(location, { createIfMissing: true, errorIfExists: true, valueEncoding: {encode: JSON.stringify, decode: JSON.parse }}, function (err, db) { - refute(err) - if (err) return - - this.closeableDatabases.push(db) - - async.parallel( - testData.map(function (d) { return db.put.bind(db, d.key, d.value) }) - , function (err) { - refute(err) - - async.forEach( - testData - , function (d, callback) { - db.get(d.key, function (err, value) { - if(err) console.error(err.stack) - refute(err) - assert[assertType](d.value, value) - callback() - }) - } - , done - ) - } - ) - - }.bind(this)) - } - done() - }.bind(this)) - } - - , 'tearDown': common.commonTearDown - - , 'simple-object values in "json" encoding': function (done) { - this.runTest([ - { key: '0', value: 0 } - , { key: '1', value: 1 } - , { key: 'string', value: 'a string' } - , { key: 'true', value: true } - , { key: 'false', value: false } - ], 'same', done) - } - - , 'simple-object keys in "json" encoding': function (done) { - this.runTest([ - { value: '0', key: 0 } - , { value: '1', key: 1 } - , { value: 'string', key: 'a string' } - , { value: 'true', key: true } - , { value: 'false', key: false } - ], 'same', done) - } - - , 'complex-object values in "json" encoding': function (done) { - this.runTest([ - { key: '0', value: { - foo: 'bar' - , bar: [ 1, 2, 3 ] - , bang: { yes: true, no: false } - }} - ], 'equals', done) - } - - , 'complex-object keys in "json" encoding': function (done) { - this.runTest([ - { value: '0', key: { - foo: 'bar' - , bar: [ 1, 2, 3 ] - , bang: { yes: true, no: false } - }} - ], 'same', done) - } -}); diff --git a/node_modules/levelup/test/key-value-streams-test.js b/node_modules/levelup/test/key-value-streams-test.js deleted file mode 100644 index 8ab0fb4..0000000 --- a/node_modules/levelup/test/key-value-streams-test.js +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - , delayed = require('delayed').delayed - -buster.testCase('Key and Value Streams', { - 'setUp': function (done) { - common.commonSetUp.call(this, function () { - this.dataSpy = this.spy() - this.endSpy = this.spy() - this.sourceData = [] - - for (var i = 0; i < 100; i++) { - var k = (i < 10 ? '0' : '') + i - this.sourceData.push({ - type : 'put' - , key : k - , value : Math.random() - }) - } - - this.sourceKeys = Object.keys(this.sourceData) - .map(function (k) { return this.sourceData[k].key }.bind(this)) - this.sourceValues = Object.keys(this.sourceData) - .map(function (k) { return this.sourceData[k].value }.bind(this)) - - this.verify = delayed(function (rs, data, done) { - assert.equals(this.endSpy.callCount, 1, 'Stream emitted single "end" event') - assert.equals(this.dataSpy.callCount, data.length, 'Stream emitted correct number of "data" events') - data.forEach(function (d, i) { - var call = this.dataSpy.getCall(i) - if (call) { - //console.log('call', i, ':', call.args[0].key, '=', call.args[0].value, '(expected', d.key, '=', d.value, ')') - assert.equals(call.args.length, 1, 'Stream "data" event #' + i + ' fired with 1 argument') - assert.equals(+call.args[0].toString(), +d, 'Stream correct "data" event #' + i + ': ' + d) - } - }.bind(this)) - done() - }, 0.05, this) - - done() - }.bind(this)) - } - - , 'tearDown': common.commonTearDown - - , 'test .keyStream()': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.keyStream() - rs.on('data', this.dataSpy) - rs.on('end', this.endSpy) - rs.on('close', this.verify.bind(this, rs, this.sourceKeys, done)) - }.bind(this)) - }.bind(this)) - } - - , 'test .readStream({keys:true,values:false})': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.readStream({ keys: true, values: false }) - rs.on('data', this.dataSpy) - rs.on('end', this.endSpy) - rs.on('close', this.verify.bind(this, rs, this.sourceKeys, done)) - }.bind(this)) - }.bind(this)) - } - - , 'test .valueStream()': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.valueStream() - rs.on('data', this.dataSpy) - rs.on('end', this.endSpy) - rs.on('close', this.verify.bind(this, rs, this.sourceValues, done)) - }.bind(this)) - }.bind(this)) - } - - , 'test .readStream({keys:false,values:true})': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.readStream({ keys: false, values: true }) - rs.on('data', this.dataSpy) - rs.on('end', this.endSpy) - rs.on('close', this.verify.bind(this, rs, this.sourceValues, done)) - }.bind(this)) - }.bind(this)) - } -}) diff --git a/node_modules/levelup/test/leveldown-substitution-test.js b/node_modules/levelup/test/leveldown-substitution-test.js deleted file mode 100644 index 6d0ff55..0000000 --- a/node_modules/levelup/test/leveldown-substitution-test.js +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - , MemDOWN = require('memdown') - -require('./common') - -buster.testCase('LevelDOWN Substitution', { - 'test substitution of LevelDOWN with MemDOWN': function (done) { - var md = new MemDOWN('foo') - , db = - levelup('/somewhere/not/writable/booya!', { db: function () { return md } }) - , entries = [] - , expected = [ - { key: 'a', value: 'A' } - , { key: 'b', value: 'B' } - , { key: 'c', value: 'C' } - , { key: 'd', value: 'D' } - , { key: 'e', value: 'E' } - , { key: 'f', value: 'F' } - , { key: 'i', value: 'I' } - ] - - db.put('f', 'F') - db.put('h', 'H') - db.put('i', 'I') - db.put('a', 'A') - db.put('c', 'C') - db.put('e', 'E') - db.del('g') - db.batch([ - { type: 'put', key: 'd', value: 'D' } - , { type: 'del', key: 'h' } - , { type: 'put', key: 'b', value: 'B' } - ]) - - db.createReadStream() - .on('data', function (data) { entries.push(data) }) - .on('error', function (err) { refute(err, 'readStream emitted an error') }) - .on('close', function () { - assert.equals(entries, expected, 'correct entries') - assert.equals( - md._store['$foo'].keys - , expected.map(function (e) { return e.key }) - , 'memdown has the entries' - ) - done() - }) - } -}) diff --git a/node_modules/levelup/test/null-and-undefined-test.js b/node_modules/levelup/test/null-and-undefined-test.js deleted file mode 100644 index f1a69dd..0000000 --- a/node_modules/levelup/test/null-and-undefined-test.js +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , errors = levelup.errors - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('null & undefined keys & values', { - 'setUp': common.commonSetUp - , 'tearDown': common.commonTearDown - - , 'null and undefined': { - 'setUp': function (done) { - levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: true }, function (err, db) { - refute(err) // sanity - this.closeableDatabases.push(db) - assert.isTrue(db.isOpen()) - this.db = db - done() - }.bind(this)) - } - - , 'get() with null key causes error': function (done) { - this.db.get(null, function (err, value) { - refute(value) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - done() - }) - } - - , 'get() with undefined key causes error': function (done) { - this.db.get(undefined, function (err, value) { - refute(value) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - done() - }) - } - - , 'del() with null key causes error': function (done) { - this.db.del(null, function (err, value) { - refute(value) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - done() - }) - } - - , 'del() with undefined key causes error': function (done) { - this.db.del(undefined, function (err, value) { - refute(value) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - done() - }) - } - - , 'put() with null key causes error': function (done) { - this.db.put(null, 'foo', function (err, value) { - refute(value) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - done() - }) - } - - , 'put() with undefined key causes error': function (done) { - this.db.put(undefined, 'foo', function (err, value) { - refute(value) - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - done() - }) - } - - , 'put() with null value works': function (done) { - this.db.put('foo', null, function (err, value) { - refute(err) - done() - }) - } - - , 'put() with undefined value works': function (done) { - this.db.put('foo', undefined, function (err, value) { - refute(err) - done() - }) - } - , 'batch() with undefined value works': function (done) { - this.db.batch([{key: 'foo', value: undefined, type: 'put'}] - , function (err) { - refute(err) - done() - }) - } - , 'batch() with null value works': function (done) { - this.db.batch([{key: 'foo', value: null, type: 'put'}] - , function (err) { - refute(err) - done() - }) - } - , 'batch() with undefined key causes error': function (done) { - this.db.batch([{key: undefined, value: 'bar', type: 'put'}] - , function (err) { - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - done() - }) - } - , 'batch() with null key causes error': function (done) { - this.db.batch([{key: null, value: 'bar', type: 'put'}] - , function (err) { - assert.isInstanceOf(err, Error) - assert.isInstanceOf(err, errors.LevelUPError) - done() - }) - } - } -}) diff --git a/node_modules/levelup/test/open-patchsafe-test.js b/node_modules/levelup/test/open-patchsafe-test.js deleted file mode 100644 index 703da79..0000000 --- a/node_modules/levelup/test/open-patchsafe-test.js +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , common = require('./common') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -function test(fun) { - return function (done) { - var location = common.nextLocation() - // 1) open database without callback, opens in worker thread - , db = levelup(location, { createIfMissing: true, errorIfExists: true, valueEncoding: 'utf8'}) - - this.closeableDatabases.push(db) - this.cleanupDirs.push(location) - assert.isObject(db) - assert.equals(db.location, location) - - fun(db, done) - // we should still be in a state of limbo down here, not opened or closed, but 'new' - refute(db.isOpen()) - refute(db.isClosed()) - } -} - - -buster.testCase('Deferred open() is patch-safe', { - 'setUp': common.commonSetUp - , 'tearDown': common.commonTearDown - - , 'put() on pre-opened database': test(function (db, done) { - var put = db.put - , called = 0 - - db.put = function () { - called ++ - return put.apply(this, arguments) - } - - db.put('key', 'VALUE', function () { - assert.equals(called, 1) - done() - }) - }) - , 'del() on pre-opened database': test(function (db, done) { - var del = db.del - , called = 0 - - db.del = function () { - called ++ - return del.apply(this, arguments) - } - - db.del('key', function () { - assert.equals(called, 1) - done() - }) - }) - , 'batch() on pre-opened database': test(function (db, done) { - var batch = db.batch - , called = 0 - - db.batch = function () { - called ++ - return batch.apply(this, arguments) - } - - db.batch([ - {key:'key', value: 'v', type: 'put'} - , {key:'key2', value: 'v2', type: 'put'} - ], function () { - assert.equals(called, 1) - done() - }) - }) -}) diff --git a/node_modules/levelup/test/optional-leveldown-test.js b/node_modules/levelup/test/optional-leveldown-test.js deleted file mode 100644 index 6336a50..0000000 --- a/node_modules/levelup/test/optional-leveldown-test.js +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup') - , assert = require('referee').assert - , refute = require('referee').refute - , format = require('util').format - , buster = require('bustermove') - , errors = levelup.errors - -function clearCache () { - delete require.cache[require.resolve('..')] - delete require.cache[require.resolve('leveldown')] - delete require.cache[require.resolve('leveldown/package')] - delete require.cache[require.resolve('../lib/util')] -} - -buster.testCase('Optional LevelDOWN', { - 'setUp': clearCache - , 'tearDown': clearCache - - , 'test getLevelDOWN()': function () { - var util = require('../lib/util') - assert.same(util.getLevelDOWN(), require('leveldown'), 'correct leveldown provided') - } - - , 'test wrong version': function () { - var levelup = require('..') - require('leveldown/package').version = '0.0.0' - assert.exception(levelup.bind(null, '/foo/bar'), function (err) { - if (err.name != 'LevelUPError') - return false - if (!/Installed version of LevelDOWN \(0\.0\.0\) does not match required version \(\^\d+\.\d+\.\d+\)/.test(err.message)) - return false - return true - }) - } - - , 'test no leveldown/package': function () { - assertRequireThrows('leveldown/package') - } - - , 'test no leveldown': function () { - assertRequireThrows('leveldown') - } -}) - -function assertRequireThrows (module) { - var levelup = require('..') - , error = 'Wow, this is kind of evil isn\'t it?' - // simulate an exception from a require() that doesn't resolved a package - Object.defineProperty(require.cache, require.resolve(module), { - get: function() { - throw new Error(error) - } - }) - assert.exception(levelup.bind(null, '/foo/bar'), function (err) { - if (err.name != 'LevelUPError') - return false - var template = 'Failed to require LevelDOWN (%s). Try `npm install leveldown` if it\'s missing' - if (format(template, error) != err.message) - return false - return true - }) -} diff --git a/node_modules/levelup/test/read-stream-test.js b/node_modules/levelup/test/read-stream-test.js deleted file mode 100644 index e6a74e5..0000000 --- a/node_modules/levelup/test/read-stream-test.js +++ /dev/null @@ -1,690 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var levelup = require('../lib/levelup.js') - , common = require('./common') - , SlowStream = require('slow-stream') - , delayed = require('delayed') - , rimraf = require('rimraf') - , async = require('async') - , msgpack = require('msgpack-js') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - - , bigBlob = Array.apply(null, Array(1024 * 100)).map(function () { return 'aaaaaaaaaa' }).join('') - -buster.testCase('ReadStream', { - 'setUp': common.readStreamSetUp - - , 'tearDown': common.commonTearDown - - //TODO: test various encodings - - , 'test simple ReadStream': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - }.bind(this)) - }.bind(this)) - } - - , 'test pausing': function (done) { - var calls = 0 - , rs - , pauseVerify = function () { - assert.equals(calls, 5, 'stream should still be paused') - rs.resume() - pauseVerify.called = true - } - , onData = function () { - if (++calls == 5) { - rs.pause() - setTimeout(pauseVerify, 50) - } - } - , verify = function () { - assert.equals(calls, this.sourceData.length, 'onData was used in test') - assert(pauseVerify.called, 'pauseVerify was used in test') - this.verify(rs, done) - }.bind(this) - - this.dataSpy = this.spy(onData) // so we can still verify - - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('end', verify.bind(this)) - - }.bind(this)) - }.bind(this)) - } - - , 'test destroy() immediately': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', function () { - assert.equals(this.dataSpy.callCount , 0, '"data" event was not fired') - assert.equals(this.endSpy.callCount , 0, '"end" event was not fired') - done() - }.bind(this)) - rs.destroy() - }.bind(this)) - }.bind(this)) - } - - , 'test destroy() after close': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', function () { - rs.destroy() - done() - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - , 'test destroy() after closing db': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - db.close(function (err) { - var rs = db.createReadStream() - rs.destroy() - done() - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - , 'test destroy() twice': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream() - rs.on('data' , function () { - rs.destroy() - rs.destroy() - done() - }) - }.bind(this)) - }.bind(this)) - } - - , 'test destroy() half way through': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream() - , endSpy = this.spy() - , calls = 0 - this.dataSpy = this.spy(function () { - if (++calls == 5) - rs.destroy() - }) - rs.on('data' , this.dataSpy) - rs.on('end' , endSpy) - rs.on('close', function () { - // assert.equals(this.readySpy.callCount, 1, 'ReadStream emitted single "ready" event') - // should do "data" 5 times ONLY - assert.equals(this.dataSpy.callCount, 5, 'ReadStream emitted correct number of "data" events (5)') - this.sourceData.slice(0, 5).forEach(function (d, i) { - var call = this.dataSpy.getCall(i) - assert(call) - if (call) { - assert.equals(call.args.length, 1, 'ReadStream "data" event #' + i + ' fired with 1 argument') - refute.isNull(call.args[0].key, 'ReadStream "data" event #' + i + ' argument has "key" property') - refute.isNull(call.args[0].value, 'ReadStream "data" event #' + i + ' argument has "value" property') - assert.equals(call.args[0].key, d.key, 'ReadStream "data" event #' + i + ' argument has correct "key"') - assert.equals(+call.args[0].value, +d.value, 'ReadStream "data" event #' + i + ' argument has correct "value"') - } - }.bind(this)) - done() - }.bind(this)) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "reverse=true"': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ reverse: true }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - this.sourceData.reverse() // for verify - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "start"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ start: '50' }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // slice off the first 50 so verify() expects only the last 50 even though all 100 are in the db - this.sourceData = this.sourceData.slice(50) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "start" and "reverse=true"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ start: '50', reverse: true }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // reverse and slice off the first 50 so verify() expects only the first 50 even though all 100 are in the db - this.sourceData.reverse() - this.sourceData = this.sourceData.slice(49) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "start" being mid-way key (float)': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - // '49.5' doesn't actually exist but we expect it to start at '50' because '49' < '49.5' < '50' (in string terms as well as numeric) - var rs = db.createReadStream({ start: '49.5' }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // slice off the first 50 so verify() expects only the last 50 even though all 100 are in the db - this.sourceData = this.sourceData.slice(50) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "start" being mid-way key (float) and "reverse=true"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ start: '49.5', reverse: true }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // reverse & slice off the first 50 so verify() expects only the first 50 even though all 100 are in the db - this.sourceData.reverse() - this.sourceData = this.sourceData.slice(50) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "start" being mid-way key (string)': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - // '499999' doesn't actually exist but we expect it to start at '50' because '49' < '499999' < '50' (in string terms) - // the same as the previous test but we're relying solely on string ordering - var rs = db.createReadStream({ start: '499999' }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // slice off the first 50 so verify() expects only the last 50 even though all 100 are in the db - this.sourceData = this.sourceData.slice(50) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "end"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ end: '50' }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // slice off the last 49 so verify() expects only 0 -> 50 inclusive, even though all 100 are in the db - this.sourceData = this.sourceData.slice(0, 51) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "end" being mid-way key (float)': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ end: '50.5' }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // slice off the last 49 so verify() expects only 0 -> 50 inclusive, even though all 100 are in the db - this.sourceData = this.sourceData.slice(0, 51) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "end" being mid-way key (string)': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ end: '50555555' }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // slice off the last 49 so verify() expects only 0 -> 50 inclusive, even though all 100 are in the db - this.sourceData = this.sourceData.slice(0, 51) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "end" being mid-way key (float) and "reverse=true"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ end: '50.5', reverse: true }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - this.sourceData.reverse() - this.sourceData = this.sourceData.slice(0, 49) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with both "start" and "end"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ start: 30, end: 70 }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // should include 30 to 70, inclusive - this.sourceData = this.sourceData.slice(30, 71) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with both "start" and "end" and "reverse=true"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ start: 70, end: 30, reverse: true }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - // expect 70 -> 30 inclusive - this.sourceData.reverse() - this.sourceData = this.sourceData.slice(29, 70) - }.bind(this)) - }.bind(this)) - } - - , 'test hex encoding': function (done) { - var options = { createIfMissing: true, errorIfExists: true, keyEncoding: 'utf8', valueEncoding: 'hex'} - , data = [ - { type: 'put', key: 'ab', value: 'abcdef0123456789' } - ] - - this.openTestDatabase({}, function (db) { - db.batch(data.slice(), options, function (err) { - refute(err); - - var rs = db.createReadStream(options) - rs.on('data' , function(data) { - assert.equals(data.value, 'abcdef0123456789'); - }) - rs.on('end' , this.endSpy) - rs.on('close', done) - - }.bind(this)) - }.bind(this)); - } - - , 'test json encoding': function (done) { - var options = { createIfMissing: true, errorIfExists: true, keyEncoding: 'utf8', valueEncoding: 'json' } - , data = [ - { type: 'put', key: 'aa', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'ab', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'ac', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { type: 'put', key: 'ba', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'bb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'bc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { type: 'put', key: 'ca', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'cb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'cc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - ] - - this.openTestDatabase(options, function (db) { - db.batch(data.slice(), function (err) { - refute(err) - - var rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done, data)) - }.bind(this)) - }.bind(this)) - } - - , 'test injectable encoding': function (done) { - var options = { createIfMissing: true, errorIfExists: true, keyEncoding: 'utf8', valueEncoding: { - decode: msgpack.decode, - encode: msgpack.encode, - buffer: true - }} - , data = [ - { type: 'put', key: 'aa', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'ab', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'ac', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { type: 'put', key: 'ba', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'bb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'bc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - , { type: 'put', key: 'ca', value: { a: 'complex', obj: 100 } } - , { type: 'put', key: 'cb', value: { b: 'foo', bar: [ 1, 2, 3 ] } } - , { type: 'put', key: 'cc', value: { c: 'w00t', d: { e: [ 0, 10, 20, 30 ], f: 1, g: 'wow' } } } - ] - - this.openTestDatabase(options, function (db) { - db.batch(data.slice(), function (err) { - refute(err) - - var rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done, data)) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() "reverse=true" not sticky (issue #6)': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - // read in reverse, assume all's good - var rs = db.createReadStream({ reverse: true }) - rs.on('close', function () { - // now try reading the other way - var rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - }.bind(this)) - rs.resume() - }.bind(this)) - }.bind(this)) - } - - , 'test ReadStream, start=0': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ start: 0 }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - }.bind(this)) - }.bind(this)) - } - - // we don't expect any data to come out of here because the keys start at '00' not 0 - // we just want to ensure that we don't kill the process - , 'test ReadStream, end=0': function (done) { - this.openTestDatabase(function (db) { - // execute - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ end: 0 }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - this.sourceData = [ ] - }.bind(this)) - }.bind(this)) - } - - // ok, so here's the deal, this is kind of obscure: when you have 2 databases open and - // have a readstream coming out from both of them with no references to the dbs left - // V8 will GC one of them and you'll get an failed assert from leveldb. - // This ISN'T a problem if you only have one of them open, even if the db gets GCed! - // Process: - // * open - // * batch write data - // * close - // * reopen - // * create ReadStream, keeping no reference to the db - // * pipe ReadStream through SlowStream just to make sure GC happens - // - the error should occur here if the bug exists - // * when both streams finish, verify all 'data' events happened - , 'test ReadStream without db ref doesn\'t get GCed': function (done) { - var dataSpy1 = this.spy() - , dataSpy2 = this.spy() - , location1 = common.nextLocation() - , location2 = common.nextLocation() - , sourceData = this.sourceData - , verify = function () { - // no reference to `db` here, should have been GCed by now if it could be - assert(dataSpy1.callCount, sourceData.length) - assert(dataSpy2.callCount, sourceData.length) - async.parallel([ rimraf.bind(null, location1), rimraf.bind(null, location2) ], done) - } - , execute = function (d, callback) { - // no reference to `db` here, could be GCed - d.readStream - .pipe(new SlowStream({ maxWriteInterval: 5 })) - .on('data', d.spy) - .on('close', delayed.delayed(callback, 0.05)) - } - , open = function (reopen, location, callback) { - levelup(location, { createIfMissing: !reopen, errorIfExists: !reopen }, callback) - } - , write = function (db, callback) { db.batch(sourceData.slice(), callback) } - , close = function (db, callback) { db.close(callback) } - , setup = function (callback) { - async.map([ location1, location2 ], open.bind(null, false), function (err, dbs) { - refute(err) - if (err) return - async.map(dbs, write, function (err) { - refute(err) - if (err) return - async.forEach(dbs, close, callback) - }) - }) - } - , reopen = function () { - async.map([ location1, location2 ], open.bind(null, true), function (err, dbs) { - refute(err) - if (err) return - async.forEach([ - { readStream: dbs[0].createReadStream(), spy: dataSpy1 } - , { readStream: dbs[1].createReadStream(), spy: dataSpy2 } - ], execute, verify) - }) - } - - setup(delayed.delayed(reopen, 0.05)) - } - - - // this is just a fancy way of testing levelup('/path').createReadStream() - // i.e. not waiting for 'open' to complete - // the logic for this is inside the ReadStream constructor which waits for 'ready' - , 'test ReadStream on pre-opened db': function (done) { - var execute = function (db) { - // is in limbo - refute(db.isOpen()) - refute(db.isClosed()) - - var rs = db.createReadStream() - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - }.bind(this) - , setup = function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - db.close(function (err) { - refute(err) - var db2 = levelup(db.location, { createIfMissing: false, errorIfExists: false, valueEncoding: 'utf8' }) - execute(db2) - }) - }.bind(this)) - }.bind(this) - - this.openTestDatabase(setup) - } - - , 'test readStream() with "limit"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ limit: 20 }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - this.sourceData = this.sourceData.slice(0, 20) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "start" and "limit"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ start: '20', limit: 20 }) - //rs.on('ready', this.readySpy) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - this.sourceData = this.sourceData.slice(20, 40) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "end" after "limit"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ end: '50', limit: 20 }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - this.sourceData = this.sourceData.slice(0, 20) - }.bind(this)) - }.bind(this)) - } - - , 'test readStream() with "end" before "limit"': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream({ end: '30', limit: 50 }) - rs.on('data' , this.dataSpy) - rs.on('end' , this.endSpy) - rs.on('close', this.verify.bind(this, rs, done)) - - this.sourceData = this.sourceData.slice(0, 31) - }.bind(this)) - }.bind(this)) - } - - // can, fairly reliably, trigger a core dump if next/end isn't - // protected properly - // the use of large blobs means that next() takes time to return - // so we should be able to slip in an end() while it's working - , 'test iterator next/end race condition': function (done) { - var data = [] - , i = 5 - , v - - while (i--) { - v = bigBlob + i - data.push({ type: 'put', key: v, value: v }) - } - - this.openTestDatabase(function (db) { - db.batch(data, function (err) { - refute(!!err) - var rs = db.createReadStream().on('close', done) - rs.once('data', rs.destroy.bind(rs)) - }.bind(this)) - }.bind(this)) - } - - , 'test can only end once': function (done) { - this.openTestDatabase(function (db) { - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - var rs = db.createReadStream() - .on('close', done) - - process.nextTick(function () { - rs.destroy() - }) - - }.bind(this)) - }.bind(this)) - } -}) diff --git a/node_modules/levelup/test/snapshot-test.js b/node_modules/levelup/test/snapshot-test.js deleted file mode 100644 index 766a0ca..0000000 --- a/node_modules/levelup/test/snapshot-test.js +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (c) 2012-2016 LevelUP contributors - * See list at - * MIT License - */ - -var delayed = require('delayed') - , common = require('./common') - , SlowStream = require('slow-stream') - - , assert = require('referee').assert - , refute = require('referee').refute - , buster = require('bustermove') - -buster.testCase('Snapshots', { - 'setUp': common.readStreamSetUp - - , 'tearDown': common.commonTearDown - - , 'test ReadStream implicit snapshot': function (done) { - this.openTestDatabase(function (db) { - - // 1) Store 100 random numbers stored in the database - db.batch(this.sourceData.slice(), function (err) { - refute(err) - - // 2) Create an iterator on the current data, pipe it through a SlowStream - // to make *sure* that we're going to be reading it for longer than it - // takes to overwrite the data in there. - - var rs = db.readStream() - rs = rs.pipe(new SlowStream({ maxWriteInterval: 5 })) - rs.on('data' , this.dataSpy) - rs.once('end' , this.endSpy) - - rs.once('close', delayed.delayed(this.verify.bind(this, rs, done), 0.05)) - - process.nextTick(function () { - // 3) Concoct and write new random data over the top of existing items. - // If we're not using a snapshot then then we'd expect the test - // to fail because it'll pick up these new values rather than the - // old ones. - var newData = [] - , i - , k - - for (i = 0; i < 100; i++) { - k = (i < 10 ? '0' : '') + i - newData.push({ - type : 'put' - , key : k - , value : Math.random() - }) - } - // using sync:true here to ensure it's written fully to disk - db.batch(newData.slice(), { sync: true }, function (err) { - refute(err) - // we'll return here faster than it takes the readStream to complete - }) - }.bind(this)) - }.bind(this)) - }.bind(this)) - } -}) diff --git a/node_modules/levelup/test/test-10k-times.sh b/node_modules/levelup/test/test-10k-times.sh deleted file mode 100755 index c68e67c..0000000 --- a/node_modules/levelup/test/test-10k-times.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -cd .. - -for (( i=1; i<=10000; i++ )) -do - echo "Running test $i .." - npm test - if [ $? -ne 0 ]; then - break - fi -done diff --git a/node_modules/load-json-file/index.js b/node_modules/load-json-file/index.js deleted file mode 100644 index 96d4d9f..0000000 --- a/node_modules/load-json-file/index.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; -var path = require('path'); -var fs = require('graceful-fs'); -var stripBom = require('strip-bom'); -var parseJson = require('parse-json'); -var Promise = require('pinkie-promise'); -var pify = require('pify'); - -function parse(x, fp) { - return parseJson(stripBom(x), path.relative(process.cwd(), fp)); -} - -module.exports = function (fp) { - return pify(fs.readFile, Promise)(fp, 'utf8').then(function (data) { - return parse(data, fp); - }); -}; - -module.exports.sync = function (fp) { - return parse(fs.readFileSync(fp, 'utf8'), fp); -}; diff --git a/node_modules/load-json-file/license b/node_modules/load-json-file/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/load-json-file/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/load-json-file/package.json b/node_modules/load-json-file/package.json deleted file mode 100644 index d0f60c2..0000000 --- a/node_modules/load-json-file/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "load-json-file@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/read-pkg" - ] - ], - "_from": "load-json-file@>=1.0.0 <2.0.0", - "_id": "load-json-file@1.1.0", - "_inCache": true, - "_installable": true, - "_location": "/load-json-file", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.7", - "_phantomChildren": {}, - "_requested": { - "name": "load-json-file", - "raw": "load-json-file@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/read-pkg" - ], - "_resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "_shasum": "956905708d58b4bab4c2261b04f59f31c99374c0", - "_shrinkwrap": null, - "_spec": "load-json-file@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/read-pkg", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/load-json-file/issues" - }, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "description": "Read and parse a JSON file", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "956905708d58b4bab4c2261b04f59f31c99374c0", - "tarball": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "115157a417380d3160da418d4ff25bb33b0051eb", - "homepage": "https://github.com/sindresorhus/load-json-file", - "keywords": [ - "json", - "read", - "parse", - "file", - "fs", - "graceful", - "load" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "load-json-file", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/load-json-file.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.1.0", - "xo": { - "ignores": [ - "test.js" - ] - } -} diff --git a/node_modules/load-json-file/readme.md b/node_modules/load-json-file/readme.md deleted file mode 100644 index fa982b5..0000000 --- a/node_modules/load-json-file/readme.md +++ /dev/null @@ -1,45 +0,0 @@ -# load-json-file [![Build Status](https://travis-ci.org/sindresorhus/load-json-file.svg?branch=master)](https://travis-ci.org/sindresorhus/load-json-file) - -> Read and parse a JSON file - -[Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom), uses [`graceful-fs`](https://github.com/isaacs/node-graceful-fs), and throws more [helpful JSON errors](https://github.com/sindresorhus/parse-json). - - -## Install - -``` -$ npm install --save load-json-file -``` - - -## Usage - -```js -const loadJsonFile = require('load-json-file'); - -loadJsonFile('foo.json').then(json => { - console.log(json); - //=> {foo: true} -}); -``` - - -## API - -### loadJsonFile(filepath) - -Returns a promise that resolves to the parsed JSON. - -### loadJsonFile.sync(filepath) - -Returns the parsed JSON. - - -## Related - -- [write-json-file](https://github.com/sindresorhus/write-json-file) - Stringify and write JSON to a file atomically - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/lodash.assign/LICENSE b/node_modules/lodash.assign/LICENSE deleted file mode 100644 index e0c69d5..0000000 --- a/node_modules/lodash.assign/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. diff --git a/node_modules/lodash.assign/README.md b/node_modules/lodash.assign/README.md deleted file mode 100644 index 6bce2d6..0000000 --- a/node_modules/lodash.assign/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# lodash.assign v4.2.0 - -The [lodash](https://lodash.com/) method `_.assign` exported as a [Node.js](https://nodejs.org/) module. - -## Installation - -Using npm: -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash.assign -``` - -In Node.js: -```js -var assign = require('lodash.assign'); -``` - -See the [documentation](https://lodash.com/docs#assign) or [package source](https://github.com/lodash/lodash/blob/4.2.0-npm-packages/lodash.assign) for more details. diff --git a/node_modules/lodash.assign/index.js b/node_modules/lodash.assign/index.js deleted file mode 100644 index 8b007bc..0000000 --- a/node_modules/lodash.assign/index.js +++ /dev/null @@ -1,637 +0,0 @@ -/** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]'; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max; - -/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ -var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - // Safari 9 makes `arguments.length` enumerable in strict mode. - var result = (isArray(value) || isArguments(value)) - ? baseTimes(value.length, String) - : []; - - var length = result.length, - skipIndexes = !!length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && (key == 'length' || isIndex(key, length)))) { - result.push(key); - } - } - return result; -} - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } -} - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return apply(func, this, otherArgs); - }; -} - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - assignValue(object, key, newValue === undefined ? source[key] : newValue); - } - return object; -} - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -function isArguments(value) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ -var assign = createAssigner(function(object, source) { - if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } -}); - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -module.exports = assign; diff --git a/node_modules/lodash.assign/package.json b/node_modules/lodash.assign/package.json deleted file mode 100644 index 8ddbdb3..0000000 --- a/node_modules/lodash.assign/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_args": [ - [ - "lodash.assign@^4.0.3", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "lodash.assign@>=4.0.3 <5.0.0", - "_id": "lodash.assign@4.2.0", - "_inCache": true, - "_installable": true, - "_location": "/lodash.assign", - "_nodeVersion": "4.4.7", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/lodash.assign-4.2.0.tgz_1471109795713_0.5842255132738501" - }, - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.15.10", - "_phantomChildren": {}, - "_requested": { - "name": "lodash.assign", - "raw": "lodash.assign@^4.0.3", - "rawSpec": "^4.0.3", - "scope": null, - "spec": ">=4.0.3 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs", - "/yargs-parser" - ], - "_resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "_shasum": "0d99f3ccd7a6d261d19bdaeb9245005d285808e7", - "_shrinkwrap": null, - "_spec": "lodash.assign@^4.0.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "blaine.bublitz@gmail.com", - "name": "Blaine Bublitz", - "url": "https://github.com/phated" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The lodash method `_.assign` exported as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "0d99f3ccd7a6d261d19bdaeb9245005d285808e7", - "tarball": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "keywords": [ - "lodash-modularized", - "assign" - ], - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - } - ], - "name": "lodash.assign", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "4.2.0" -} diff --git a/node_modules/lodash/LICENSE b/node_modules/lodash/LICENSE deleted file mode 100644 index e0c69d5..0000000 --- a/node_modules/lodash/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. diff --git a/node_modules/lodash/README.md b/node_modules/lodash/README.md deleted file mode 100644 index 72b66b2..0000000 --- a/node_modules/lodash/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# lodash v4.16.4 - -The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. - -## Installation - -Using npm: -```shell -$ npm i -g npm -$ npm i --save lodash -``` - -In Node.js: -```js -// Load the full build. -var _ = require('lodash'); -// Load the core build. -var _ = require('lodash/core'); -// Load the FP build for immutable auto-curried iteratee-first data-last methods. -var fp = require('lodash/fp'); - -// Load method categories. -var array = require('lodash/array'); -var object = require('lodash/fp/object'); - -// Cherry-pick methods for smaller browserify/rollup/webpack bundles. -var at = require('lodash/at'); -var curryN = require('lodash/fp/curryN'); -``` - -See the [package source](https://github.com/lodash/lodash/tree/4.16.4-npm) for more details. - -**Note:**
    -Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL. - -## Support - -Tested in Chrome 52-53, Firefox 48-49, IE 11, Edge 14, Safari 9-10, Node.js 4-6, & PhantomJS 2.1.1.
    -Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/node_modules/lodash/_DataView.js b/node_modules/lodash/_DataView.js deleted file mode 100644 index ac2d57c..0000000 --- a/node_modules/lodash/_DataView.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var DataView = getNative(root, 'DataView'); - -module.exports = DataView; diff --git a/node_modules/lodash/_Hash.js b/node_modules/lodash/_Hash.js deleted file mode 100644 index 667d5ab..0000000 --- a/node_modules/lodash/_Hash.js +++ /dev/null @@ -1,32 +0,0 @@ -var hashClear = require('./_hashClear'), - hashDelete = require('./_hashDelete'), - hashGet = require('./_hashGet'), - hashHas = require('./_hashHas'), - hashSet = require('./_hashSet'); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -module.exports = Hash; diff --git a/node_modules/lodash/_LazyWrapper.js b/node_modules/lodash/_LazyWrapper.js deleted file mode 100644 index 81786c7..0000000 --- a/node_modules/lodash/_LazyWrapper.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseCreate = require('./_baseCreate'), - baseLodash = require('./_baseLodash'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295; - -/** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ -function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; -} - -// Ensure `LazyWrapper` is an instance of `baseLodash`. -LazyWrapper.prototype = baseCreate(baseLodash.prototype); -LazyWrapper.prototype.constructor = LazyWrapper; - -module.exports = LazyWrapper; diff --git a/node_modules/lodash/_ListCache.js b/node_modules/lodash/_ListCache.js deleted file mode 100644 index 73f4645..0000000 --- a/node_modules/lodash/_ListCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var listCacheClear = require('./_listCacheClear'), - listCacheDelete = require('./_listCacheDelete'), - listCacheGet = require('./_listCacheGet'), - listCacheHas = require('./_listCacheHas'), - listCacheSet = require('./_listCacheSet'); - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -module.exports = ListCache; diff --git a/node_modules/lodash/_LodashWrapper.js b/node_modules/lodash/_LodashWrapper.js deleted file mode 100644 index c1e4d9d..0000000 --- a/node_modules/lodash/_LodashWrapper.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseCreate = require('./_baseCreate'), - baseLodash = require('./_baseLodash'); - -/** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ -function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; -} - -LodashWrapper.prototype = baseCreate(baseLodash.prototype); -LodashWrapper.prototype.constructor = LodashWrapper; - -module.exports = LodashWrapper; diff --git a/node_modules/lodash/_Map.js b/node_modules/lodash/_Map.js deleted file mode 100644 index b73f29a..0000000 --- a/node_modules/lodash/_Map.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'); - -module.exports = Map; diff --git a/node_modules/lodash/_MapCache.js b/node_modules/lodash/_MapCache.js deleted file mode 100644 index 69f03a4..0000000 --- a/node_modules/lodash/_MapCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var mapCacheClear = require('./_mapCacheClear'), - mapCacheDelete = require('./_mapCacheDelete'), - mapCacheGet = require('./_mapCacheGet'), - mapCacheHas = require('./_mapCacheHas'), - mapCacheSet = require('./_mapCacheSet'); - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -module.exports = MapCache; diff --git a/node_modules/lodash/_Promise.js b/node_modules/lodash/_Promise.js deleted file mode 100644 index 247b9e1..0000000 --- a/node_modules/lodash/_Promise.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Promise = getNative(root, 'Promise'); - -module.exports = Promise; diff --git a/node_modules/lodash/_Set.js b/node_modules/lodash/_Set.js deleted file mode 100644 index b3c8dcb..0000000 --- a/node_modules/lodash/_Set.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Set = getNative(root, 'Set'); - -module.exports = Set; diff --git a/node_modules/lodash/_SetCache.js b/node_modules/lodash/_SetCache.js deleted file mode 100644 index a80efd5..0000000 --- a/node_modules/lodash/_SetCache.js +++ /dev/null @@ -1,27 +0,0 @@ -var MapCache = require('./_MapCache'), - setCacheAdd = require('./_setCacheAdd'), - setCacheHas = require('./_setCacheHas'); - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -module.exports = SetCache; diff --git a/node_modules/lodash/_Stack.js b/node_modules/lodash/_Stack.js deleted file mode 100644 index 80b2cf1..0000000 --- a/node_modules/lodash/_Stack.js +++ /dev/null @@ -1,27 +0,0 @@ -var ListCache = require('./_ListCache'), - stackClear = require('./_stackClear'), - stackDelete = require('./_stackDelete'), - stackGet = require('./_stackGet'), - stackHas = require('./_stackHas'), - stackSet = require('./_stackSet'); - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; - -module.exports = Stack; diff --git a/node_modules/lodash/_Symbol.js b/node_modules/lodash/_Symbol.js deleted file mode 100644 index a013f7c..0000000 --- a/node_modules/lodash/_Symbol.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Symbol = root.Symbol; - -module.exports = Symbol; diff --git a/node_modules/lodash/_Uint8Array.js b/node_modules/lodash/_Uint8Array.js deleted file mode 100644 index 2fb30e1..0000000 --- a/node_modules/lodash/_Uint8Array.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Uint8Array = root.Uint8Array; - -module.exports = Uint8Array; diff --git a/node_modules/lodash/_WeakMap.js b/node_modules/lodash/_WeakMap.js deleted file mode 100644 index 567f86c..0000000 --- a/node_modules/lodash/_WeakMap.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var WeakMap = getNative(root, 'WeakMap'); - -module.exports = WeakMap; diff --git a/node_modules/lodash/_addMapEntry.js b/node_modules/lodash/_addMapEntry.js deleted file mode 100644 index 5a69212..0000000 --- a/node_modules/lodash/_addMapEntry.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ -function addMapEntry(map, pair) { - // Don't return `map.set` because it's not chainable in IE 11. - map.set(pair[0], pair[1]); - return map; -} - -module.exports = addMapEntry; diff --git a/node_modules/lodash/_addSetEntry.js b/node_modules/lodash/_addSetEntry.js deleted file mode 100644 index 1a07b70..0000000 --- a/node_modules/lodash/_addSetEntry.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ -function addSetEntry(set, value) { - // Don't return `set.add` because it's not chainable in IE 11. - set.add(value); - return set; -} - -module.exports = addSetEntry; diff --git a/node_modules/lodash/_apply.js b/node_modules/lodash/_apply.js deleted file mode 100644 index 36436dd..0000000 --- a/node_modules/lodash/_apply.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -module.exports = apply; diff --git a/node_modules/lodash/_arrayAggregator.js b/node_modules/lodash/_arrayAggregator.js deleted file mode 100644 index 7ca498a..0000000 --- a/node_modules/lodash/_arrayAggregator.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; -} - -module.exports = arrayAggregator; diff --git a/node_modules/lodash/_arrayEach.js b/node_modules/lodash/_arrayEach.js deleted file mode 100644 index 5f770bc..0000000 --- a/node_modules/lodash/_arrayEach.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEach; diff --git a/node_modules/lodash/_arrayEachRight.js b/node_modules/lodash/_arrayEachRight.js deleted file mode 100644 index 72e780c..0000000 --- a/node_modules/lodash/_arrayEachRight.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEachRight(array, iteratee) { - var length = array ? array.length : 0; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEachRight; diff --git a/node_modules/lodash/_arrayEvery.js b/node_modules/lodash/_arrayEvery.js deleted file mode 100644 index f4fb425..0000000 --- a/node_modules/lodash/_arrayEvery.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ -function arrayEvery(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; -} - -module.exports = arrayEvery; diff --git a/node_modules/lodash/_arrayFilter.js b/node_modules/lodash/_arrayFilter.js deleted file mode 100644 index b904fda..0000000 --- a/node_modules/lodash/_arrayFilter.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = arrayFilter; diff --git a/node_modules/lodash/_arrayIncludes.js b/node_modules/lodash/_arrayIncludes.js deleted file mode 100644 index be53e60..0000000 --- a/node_modules/lodash/_arrayIncludes.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array ? array.length : 0; - return !!length && baseIndexOf(array, value, 0) > -1; -} - -module.exports = arrayIncludes; diff --git a/node_modules/lodash/_arrayIncludesWith.js b/node_modules/lodash/_arrayIncludesWith.js deleted file mode 100644 index 72ff0c8..0000000 --- a/node_modules/lodash/_arrayIncludesWith.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -module.exports = arrayIncludesWith; diff --git a/node_modules/lodash/_arrayLikeKeys.js b/node_modules/lodash/_arrayLikeKeys.js deleted file mode 100644 index b2ec9ce..0000000 --- a/node_modules/lodash/_arrayLikeKeys.js +++ /dev/null @@ -1,49 +0,0 @@ -var baseTimes = require('./_baseTimes'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isIndex = require('./_isIndex'), - isTypedArray = require('./isTypedArray'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -module.exports = arrayLikeKeys; diff --git a/node_modules/lodash/_arrayMap.js b/node_modules/lodash/_arrayMap.js deleted file mode 100644 index 748bdbe..0000000 --- a/node_modules/lodash/_arrayMap.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -module.exports = arrayMap; diff --git a/node_modules/lodash/_arrayPush.js b/node_modules/lodash/_arrayPush.js deleted file mode 100644 index 7d742b3..0000000 --- a/node_modules/lodash/_arrayPush.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -module.exports = arrayPush; diff --git a/node_modules/lodash/_arrayReduce.js b/node_modules/lodash/_arrayReduce.js deleted file mode 100644 index 57c8727..0000000 --- a/node_modules/lodash/_arrayReduce.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array ? array.length : 0; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -module.exports = arrayReduce; diff --git a/node_modules/lodash/_arrayReduceRight.js b/node_modules/lodash/_arrayReduceRight.js deleted file mode 100644 index 4c85ee6..0000000 --- a/node_modules/lodash/_arrayReduceRight.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array ? array.length : 0; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; -} - -module.exports = arrayReduceRight; diff --git a/node_modules/lodash/_arraySample.js b/node_modules/lodash/_arraySample.js deleted file mode 100644 index fcab010..0000000 --- a/node_modules/lodash/_arraySample.js +++ /dev/null @@ -1,15 +0,0 @@ -var baseRandom = require('./_baseRandom'); - -/** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ -function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; -} - -module.exports = arraySample; diff --git a/node_modules/lodash/_arraySampleSize.js b/node_modules/lodash/_arraySampleSize.js deleted file mode 100644 index 8c7e364..0000000 --- a/node_modules/lodash/_arraySampleSize.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseClamp = require('./_baseClamp'), - copyArray = require('./_copyArray'), - shuffleSelf = require('./_shuffleSelf'); - -/** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); -} - -module.exports = arraySampleSize; diff --git a/node_modules/lodash/_arrayShuffle.js b/node_modules/lodash/_arrayShuffle.js deleted file mode 100644 index 46313a3..0000000 --- a/node_modules/lodash/_arrayShuffle.js +++ /dev/null @@ -1,15 +0,0 @@ -var copyArray = require('./_copyArray'), - shuffleSelf = require('./_shuffleSelf'); - -/** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); -} - -module.exports = arrayShuffle; diff --git a/node_modules/lodash/_arraySome.js b/node_modules/lodash/_arraySome.js deleted file mode 100644 index 9b6e5d1..0000000 --- a/node_modules/lodash/_arraySome.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -module.exports = arraySome; diff --git a/node_modules/lodash/_asciiSize.js b/node_modules/lodash/_asciiSize.js deleted file mode 100644 index 11d29c3..0000000 --- a/node_modules/lodash/_asciiSize.js +++ /dev/null @@ -1,12 +0,0 @@ -var baseProperty = require('./_baseProperty'); - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = baseProperty('length'); - -module.exports = asciiSize; diff --git a/node_modules/lodash/_asciiToArray.js b/node_modules/lodash/_asciiToArray.js deleted file mode 100644 index 8e3dd5b..0000000 --- a/node_modules/lodash/_asciiToArray.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} - -module.exports = asciiToArray; diff --git a/node_modules/lodash/_asciiWords.js b/node_modules/lodash/_asciiWords.js deleted file mode 100644 index d765f0f..0000000 --- a/node_modules/lodash/_asciiWords.js +++ /dev/null @@ -1,15 +0,0 @@ -/** Used to match words composed of alphanumeric characters. */ -var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - -/** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function asciiWords(string) { - return string.match(reAsciiWord) || []; -} - -module.exports = asciiWords; diff --git a/node_modules/lodash/_assignInDefaults.js b/node_modules/lodash/_assignInDefaults.js deleted file mode 100644 index ea6b0e3..0000000 --- a/node_modules/lodash/_assignInDefaults.js +++ /dev/null @@ -1,27 +0,0 @@ -var eq = require('./eq'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ -function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; -} - -module.exports = assignInDefaults; diff --git a/node_modules/lodash/_assignMergeValue.js b/node_modules/lodash/_assignMergeValue.js deleted file mode 100644 index cb1185e..0000000 --- a/node_modules/lodash/_assignMergeValue.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - eq = require('./eq'); - -/** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -module.exports = assignMergeValue; diff --git a/node_modules/lodash/_assignValue.js b/node_modules/lodash/_assignValue.js deleted file mode 100644 index 4083957..0000000 --- a/node_modules/lodash/_assignValue.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - eq = require('./eq'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -module.exports = assignValue; diff --git a/node_modules/lodash/_assocIndexOf.js b/node_modules/lodash/_assocIndexOf.js deleted file mode 100644 index 5b77a2b..0000000 --- a/node_modules/lodash/_assocIndexOf.js +++ /dev/null @@ -1,21 +0,0 @@ -var eq = require('./eq'); - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -module.exports = assocIndexOf; diff --git a/node_modules/lodash/_baseAggregator.js b/node_modules/lodash/_baseAggregator.js deleted file mode 100644 index 4bc9e91..0000000 --- a/node_modules/lodash/_baseAggregator.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; -} - -module.exports = baseAggregator; diff --git a/node_modules/lodash/_baseAssign.js b/node_modules/lodash/_baseAssign.js deleted file mode 100644 index e5c4a1a..0000000 --- a/node_modules/lodash/_baseAssign.js +++ /dev/null @@ -1,17 +0,0 @@ -var copyObject = require('./_copyObject'), - keys = require('./keys'); - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); -} - -module.exports = baseAssign; diff --git a/node_modules/lodash/_baseAssignValue.js b/node_modules/lodash/_baseAssignValue.js deleted file mode 100644 index d6f66ef..0000000 --- a/node_modules/lodash/_baseAssignValue.js +++ /dev/null @@ -1,25 +0,0 @@ -var defineProperty = require('./_defineProperty'); - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -module.exports = baseAssignValue; diff --git a/node_modules/lodash/_baseAt.js b/node_modules/lodash/_baseAt.js deleted file mode 100644 index ed67d9b..0000000 --- a/node_modules/lodash/_baseAt.js +++ /dev/null @@ -1,23 +0,0 @@ -var get = require('./get'); - -/** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths of elements to pick. - * @returns {Array} Returns the picked elements. - */ -function baseAt(object, paths) { - var index = -1, - isNil = object == null, - length = paths.length, - result = Array(length); - - while (++index < length) { - result[index] = isNil ? undefined : get(object, paths[index]); - } - return result; -} - -module.exports = baseAt; diff --git a/node_modules/lodash/_baseClamp.js b/node_modules/lodash/_baseClamp.js deleted file mode 100644 index a1c5692..0000000 --- a/node_modules/lodash/_baseClamp.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ -function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; -} - -module.exports = baseClamp; diff --git a/node_modules/lodash/_baseClone.js b/node_modules/lodash/_baseClone.js deleted file mode 100644 index 22ff841..0000000 --- a/node_modules/lodash/_baseClone.js +++ /dev/null @@ -1,133 +0,0 @@ -var Stack = require('./_Stack'), - arrayEach = require('./_arrayEach'), - assignValue = require('./_assignValue'), - baseAssign = require('./_baseAssign'), - cloneBuffer = require('./_cloneBuffer'), - copyArray = require('./_copyArray'), - copySymbols = require('./_copySymbols'), - getAllKeys = require('./_getAllKeys'), - getTag = require('./_getTag'), - initCloneArray = require('./_initCloneArray'), - initCloneByTag = require('./_initCloneByTag'), - initCloneObject = require('./_initCloneObject'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isObject = require('./isObject'), - keys = require('./keys'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = -cloneableTags[boolTag] = cloneableTags[dateTag] = -cloneableTags[float32Tag] = cloneableTags[float64Tag] = -cloneableTags[int8Tag] = cloneableTags[int16Tag] = -cloneableTags[int32Tag] = cloneableTags[mapTag] = -cloneableTags[numberTag] = cloneableTags[objectTag] = -cloneableTags[regexpTag] = cloneableTags[setTag] = -cloneableTags[stringTag] = cloneableTags[symbolTag] = -cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = -cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {boolean} [isFull] Specify a clone including symbols. - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, isDeep, isFull, customizer, key, object, stack) { - var result; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); - }); - return result; -} - -module.exports = baseClone; diff --git a/node_modules/lodash/_baseConforms.js b/node_modules/lodash/_baseConforms.js deleted file mode 100644 index 947e20d..0000000 --- a/node_modules/lodash/_baseConforms.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConformsTo = require('./_baseConformsTo'), - keys = require('./keys'); - -/** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ -function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; -} - -module.exports = baseConforms; diff --git a/node_modules/lodash/_baseConformsTo.js b/node_modules/lodash/_baseConformsTo.js deleted file mode 100644 index e449cb8..0000000 --- a/node_modules/lodash/_baseConformsTo.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ -function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; -} - -module.exports = baseConformsTo; diff --git a/node_modules/lodash/_baseCreate.js b/node_modules/lodash/_baseCreate.js deleted file mode 100644 index ffa6a52..0000000 --- a/node_modules/lodash/_baseCreate.js +++ /dev/null @@ -1,30 +0,0 @@ -var isObject = require('./isObject'); - -/** Built-in value references. */ -var objectCreate = Object.create; - -/** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ -var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; -}()); - -module.exports = baseCreate; diff --git a/node_modules/lodash/_baseDelay.js b/node_modules/lodash/_baseDelay.js deleted file mode 100644 index 1486d69..0000000 --- a/node_modules/lodash/_baseDelay.js +++ /dev/null @@ -1,21 +0,0 @@ -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ -function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); -} - -module.exports = baseDelay; diff --git a/node_modules/lodash/_baseDifference.js b/node_modules/lodash/_baseDifference.js deleted file mode 100644 index dcccad3..0000000 --- a/node_modules/lodash/_baseDifference.js +++ /dev/null @@ -1,67 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ -function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; -} - -module.exports = baseDifference; diff --git a/node_modules/lodash/_baseEach.js b/node_modules/lodash/_baseEach.js deleted file mode 100644 index 512c067..0000000 --- a/node_modules/lodash/_baseEach.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - createBaseEach = require('./_createBaseEach'); - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = createBaseEach(baseForOwn); - -module.exports = baseEach; diff --git a/node_modules/lodash/_baseEachRight.js b/node_modules/lodash/_baseEachRight.js deleted file mode 100644 index 0a8feec..0000000 --- a/node_modules/lodash/_baseEachRight.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - createBaseEach = require('./_createBaseEach'); - -/** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEachRight = createBaseEach(baseForOwnRight, true); - -module.exports = baseEachRight; diff --git a/node_modules/lodash/_baseEvery.js b/node_modules/lodash/_baseEvery.js deleted file mode 100644 index fa52f7b..0000000 --- a/node_modules/lodash/_baseEvery.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ -function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; -} - -module.exports = baseEvery; diff --git a/node_modules/lodash/_baseExtremum.js b/node_modules/lodash/_baseExtremum.js deleted file mode 100644 index 9d6aa77..0000000 --- a/node_modules/lodash/_baseExtremum.js +++ /dev/null @@ -1,32 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -module.exports = baseExtremum; diff --git a/node_modules/lodash/_baseFill.js b/node_modules/lodash/_baseFill.js deleted file mode 100644 index 46ef9c7..0000000 --- a/node_modules/lodash/_baseFill.js +++ /dev/null @@ -1,32 +0,0 @@ -var toInteger = require('./toInteger'), - toLength = require('./toLength'); - -/** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ -function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; -} - -module.exports = baseFill; diff --git a/node_modules/lodash/_baseFilter.js b/node_modules/lodash/_baseFilter.js deleted file mode 100644 index 4678477..0000000 --- a/node_modules/lodash/_baseFilter.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -module.exports = baseFilter; diff --git a/node_modules/lodash/_baseFindIndex.js b/node_modules/lodash/_baseFindIndex.js deleted file mode 100644 index e3f5d8a..0000000 --- a/node_modules/lodash/_baseFindIndex.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -module.exports = baseFindIndex; diff --git a/node_modules/lodash/_baseFindKey.js b/node_modules/lodash/_baseFindKey.js deleted file mode 100644 index 2e430f3..0000000 --- a/node_modules/lodash/_baseFindKey.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ -function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; -} - -module.exports = baseFindKey; diff --git a/node_modules/lodash/_baseFlatten.js b/node_modules/lodash/_baseFlatten.js deleted file mode 100644 index 4b1e009..0000000 --- a/node_modules/lodash/_baseFlatten.js +++ /dev/null @@ -1,38 +0,0 @@ -var arrayPush = require('./_arrayPush'), - isFlattenable = require('./_isFlattenable'); - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -module.exports = baseFlatten; diff --git a/node_modules/lodash/_baseFor.js b/node_modules/lodash/_baseFor.js deleted file mode 100644 index d946590..0000000 --- a/node_modules/lodash/_baseFor.js +++ /dev/null @@ -1,16 +0,0 @@ -var createBaseFor = require('./_createBaseFor'); - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -module.exports = baseFor; diff --git a/node_modules/lodash/_baseForOwn.js b/node_modules/lodash/_baseForOwn.js deleted file mode 100644 index 503d523..0000000 --- a/node_modules/lodash/_baseForOwn.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseFor = require('./_baseFor'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); -} - -module.exports = baseForOwn; diff --git a/node_modules/lodash/_baseForOwnRight.js b/node_modules/lodash/_baseForOwnRight.js deleted file mode 100644 index a4b10e6..0000000 --- a/node_modules/lodash/_baseForOwnRight.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseForRight = require('./_baseForRight'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); -} - -module.exports = baseForOwnRight; diff --git a/node_modules/lodash/_baseForRight.js b/node_modules/lodash/_baseForRight.js deleted file mode 100644 index 32842cd..0000000 --- a/node_modules/lodash/_baseForRight.js +++ /dev/null @@ -1,15 +0,0 @@ -var createBaseFor = require('./_createBaseFor'); - -/** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseForRight = createBaseFor(true); - -module.exports = baseForRight; diff --git a/node_modules/lodash/_baseFunctions.js b/node_modules/lodash/_baseFunctions.js deleted file mode 100644 index d23bc9b..0000000 --- a/node_modules/lodash/_baseFunctions.js +++ /dev/null @@ -1,19 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - isFunction = require('./isFunction'); - -/** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ -function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); -} - -module.exports = baseFunctions; diff --git a/node_modules/lodash/_baseGet.js b/node_modules/lodash/_baseGet.js deleted file mode 100644 index 886720b..0000000 --- a/node_modules/lodash/_baseGet.js +++ /dev/null @@ -1,25 +0,0 @@ -var castPath = require('./_castPath'), - isKey = require('./_isKey'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -module.exports = baseGet; diff --git a/node_modules/lodash/_baseGetAllKeys.js b/node_modules/lodash/_baseGetAllKeys.js deleted file mode 100644 index 8ad204e..0000000 --- a/node_modules/lodash/_baseGetAllKeys.js +++ /dev/null @@ -1,20 +0,0 @@ -var arrayPush = require('./_arrayPush'), - isArray = require('./isArray'); - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); -} - -module.exports = baseGetAllKeys; diff --git a/node_modules/lodash/_baseGetTag.js b/node_modules/lodash/_baseGetTag.js deleted file mode 100644 index c8b9e39..0000000 --- a/node_modules/lodash/_baseGetTag.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `getTag`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - return objectToString.call(value); -} - -module.exports = baseGetTag; diff --git a/node_modules/lodash/_baseGt.js b/node_modules/lodash/_baseGt.js deleted file mode 100644 index 502d273..0000000 --- a/node_modules/lodash/_baseGt.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -module.exports = baseGt; diff --git a/node_modules/lodash/_baseHas.js b/node_modules/lodash/_baseHas.js deleted file mode 100644 index 1b73032..0000000 --- a/node_modules/lodash/_baseHas.js +++ /dev/null @@ -1,19 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); -} - -module.exports = baseHas; diff --git a/node_modules/lodash/_baseHasIn.js b/node_modules/lodash/_baseHasIn.js deleted file mode 100644 index 2e0d042..0000000 --- a/node_modules/lodash/_baseHasIn.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -module.exports = baseHasIn; diff --git a/node_modules/lodash/_baseInRange.js b/node_modules/lodash/_baseInRange.js deleted file mode 100644 index ec95666..0000000 --- a/node_modules/lodash/_baseInRange.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ -function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); -} - -module.exports = baseInRange; diff --git a/node_modules/lodash/_baseIndexOf.js b/node_modules/lodash/_baseIndexOf.js deleted file mode 100644 index 167e706..0000000 --- a/node_modules/lodash/_baseIndexOf.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIsNaN = require('./_baseIsNaN'), - strictIndexOf = require('./_strictIndexOf'); - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); -} - -module.exports = baseIndexOf; diff --git a/node_modules/lodash/_baseIndexOfWith.js b/node_modules/lodash/_baseIndexOfWith.js deleted file mode 100644 index f815fe0..0000000 --- a/node_modules/lodash/_baseIndexOfWith.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; -} - -module.exports = baseIndexOfWith; diff --git a/node_modules/lodash/_baseIntersection.js b/node_modules/lodash/_baseIntersection.js deleted file mode 100644 index c1d250c..0000000 --- a/node_modules/lodash/_baseIntersection.js +++ /dev/null @@ -1,74 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ -function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -module.exports = baseIntersection; diff --git a/node_modules/lodash/_baseInverter.js b/node_modules/lodash/_baseInverter.js deleted file mode 100644 index fbc337f..0000000 --- a/node_modules/lodash/_baseInverter.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseForOwn = require('./_baseForOwn'); - -/** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ -function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; -} - -module.exports = baseInverter; diff --git a/node_modules/lodash/_baseInvoke.js b/node_modules/lodash/_baseInvoke.js deleted file mode 100644 index 3d6bca5..0000000 --- a/node_modules/lodash/_baseInvoke.js +++ /dev/null @@ -1,28 +0,0 @@ -var apply = require('./_apply'), - castPath = require('./_castPath'), - isKey = require('./_isKey'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ -function baseInvoke(object, path, args) { - if (!isKey(path, object)) { - path = castPath(path); - object = parent(object, path); - path = last(path); - } - var func = object == null ? object : object[toKey(path)]; - return func == null ? undefined : apply(func, object, args); -} - -module.exports = baseInvoke; diff --git a/node_modules/lodash/_baseIsArguments.js b/node_modules/lodash/_baseIsArguments.js deleted file mode 100644 index a176e18..0000000 --- a/node_modules/lodash/_baseIsArguments.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && objectToString.call(value) == argsTag; -} - -module.exports = baseIsArguments; diff --git a/node_modules/lodash/_baseIsArrayBuffer.js b/node_modules/lodash/_baseIsArrayBuffer.js deleted file mode 100644 index 024ec85..0000000 --- a/node_modules/lodash/_baseIsArrayBuffer.js +++ /dev/null @@ -1,26 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -var arrayBufferTag = '[object ArrayBuffer]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ -function baseIsArrayBuffer(value) { - return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; -} - -module.exports = baseIsArrayBuffer; diff --git a/node_modules/lodash/_baseIsDate.js b/node_modules/lodash/_baseIsDate.js deleted file mode 100644 index 9dacf9b..0000000 --- a/node_modules/lodash/_baseIsDate.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var dateTag = '[object Date]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ -function baseIsDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; -} - -module.exports = baseIsDate; diff --git a/node_modules/lodash/_baseIsEqual.js b/node_modules/lodash/_baseIsEqual.js deleted file mode 100644 index 3772dab..0000000 --- a/node_modules/lodash/_baseIsEqual.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseIsEqualDeep = require('./_baseIsEqualDeep'), - isObject = require('./isObject'), - isObjectLike = require('./isObjectLike'); - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); -} - -module.exports = baseIsEqual; diff --git a/node_modules/lodash/_baseIsEqualDeep.js b/node_modules/lodash/_baseIsEqualDeep.js deleted file mode 100644 index 42dc03d..0000000 --- a/node_modules/lodash/_baseIsEqualDeep.js +++ /dev/null @@ -1,89 +0,0 @@ -var Stack = require('./_Stack'), - equalArrays = require('./_equalArrays'), - equalByTag = require('./_equalByTag'), - equalObjects = require('./_equalObjects'), - getTag = require('./_getTag'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isTypedArray = require('./isTypedArray'); - -/** Used to compose bitmasks for comparison styles. */ -var PARTIAL_COMPARE_FLAG = 2; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, equalFunc, customizer, bitmask, stack); -} - -module.exports = baseIsEqualDeep; diff --git a/node_modules/lodash/_baseIsMap.js b/node_modules/lodash/_baseIsMap.js deleted file mode 100644 index 02a4021..0000000 --- a/node_modules/lodash/_baseIsMap.js +++ /dev/null @@ -1,18 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; -} - -module.exports = baseIsMap; diff --git a/node_modules/lodash/_baseIsMatch.js b/node_modules/lodash/_baseIsMatch.js deleted file mode 100644 index d36c878..0000000 --- a/node_modules/lodash/_baseIsMatch.js +++ /dev/null @@ -1,62 +0,0 @@ -var Stack = require('./_Stack'), - baseIsEqual = require('./_baseIsEqual'); - -/** Used to compose bitmasks for comparison styles. */ -var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) - : result - )) { - return false; - } - } - } - return true; -} - -module.exports = baseIsMatch; diff --git a/node_modules/lodash/_baseIsNaN.js b/node_modules/lodash/_baseIsNaN.js deleted file mode 100644 index 316f1eb..0000000 --- a/node_modules/lodash/_baseIsNaN.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -module.exports = baseIsNaN; diff --git a/node_modules/lodash/_baseIsNative.js b/node_modules/lodash/_baseIsNative.js deleted file mode 100644 index 8702330..0000000 --- a/node_modules/lodash/_baseIsNative.js +++ /dev/null @@ -1,47 +0,0 @@ -var isFunction = require('./isFunction'), - isMasked = require('./_isMasked'), - isObject = require('./isObject'), - toSource = require('./_toSource'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -module.exports = baseIsNative; diff --git a/node_modules/lodash/_baseIsRegExp.js b/node_modules/lodash/_baseIsRegExp.js deleted file mode 100644 index 926fbb3..0000000 --- a/node_modules/lodash/_baseIsRegExp.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ -function baseIsRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; -} - -module.exports = baseIsRegExp; diff --git a/node_modules/lodash/_baseIsSet.js b/node_modules/lodash/_baseIsSet.js deleted file mode 100644 index 6dee367..0000000 --- a/node_modules/lodash/_baseIsSet.js +++ /dev/null @@ -1,18 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; -} - -module.exports = baseIsSet; diff --git a/node_modules/lodash/_baseIsTypedArray.js b/node_modules/lodash/_baseIsTypedArray.js deleted file mode 100644 index 9e92756..0000000 --- a/node_modules/lodash/_baseIsTypedArray.js +++ /dev/null @@ -1,69 +0,0 @@ -var isLength = require('./isLength'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; -} - -module.exports = baseIsTypedArray; diff --git a/node_modules/lodash/_baseIteratee.js b/node_modules/lodash/_baseIteratee.js deleted file mode 100644 index 995c257..0000000 --- a/node_modules/lodash/_baseIteratee.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseMatches = require('./_baseMatches'), - baseMatchesProperty = require('./_baseMatchesProperty'), - identity = require('./identity'), - isArray = require('./isArray'), - property = require('./property'); - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); -} - -module.exports = baseIteratee; diff --git a/node_modules/lodash/_baseKeys.js b/node_modules/lodash/_baseKeys.js deleted file mode 100644 index 45e9e6f..0000000 --- a/node_modules/lodash/_baseKeys.js +++ /dev/null @@ -1,30 +0,0 @@ -var isPrototype = require('./_isPrototype'), - nativeKeys = require('./_nativeKeys'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -module.exports = baseKeys; diff --git a/node_modules/lodash/_baseKeysIn.js b/node_modules/lodash/_baseKeysIn.js deleted file mode 100644 index ea8a0a1..0000000 --- a/node_modules/lodash/_baseKeysIn.js +++ /dev/null @@ -1,33 +0,0 @@ -var isObject = require('./isObject'), - isPrototype = require('./_isPrototype'), - nativeKeysIn = require('./_nativeKeysIn'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -module.exports = baseKeysIn; diff --git a/node_modules/lodash/_baseLodash.js b/node_modules/lodash/_baseLodash.js deleted file mode 100644 index f76c790..0000000 --- a/node_modules/lodash/_baseLodash.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ -function baseLodash() { - // No operation performed. -} - -module.exports = baseLodash; diff --git a/node_modules/lodash/_baseLt.js b/node_modules/lodash/_baseLt.js deleted file mode 100644 index 8674d29..0000000 --- a/node_modules/lodash/_baseLt.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -module.exports = baseLt; diff --git a/node_modules/lodash/_baseMap.js b/node_modules/lodash/_baseMap.js deleted file mode 100644 index 0bf5cea..0000000 --- a/node_modules/lodash/_baseMap.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseEach = require('./_baseEach'), - isArrayLike = require('./isArrayLike'); - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -module.exports = baseMap; diff --git a/node_modules/lodash/_baseMatches.js b/node_modules/lodash/_baseMatches.js deleted file mode 100644 index e56582a..0000000 --- a/node_modules/lodash/_baseMatches.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'), - matchesStrictComparable = require('./_matchesStrictComparable'); - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; -} - -module.exports = baseMatches; diff --git a/node_modules/lodash/_baseMatchesProperty.js b/node_modules/lodash/_baseMatchesProperty.js deleted file mode 100644 index 3968081..0000000 --- a/node_modules/lodash/_baseMatchesProperty.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'), - get = require('./get'), - hasIn = require('./hasIn'), - isKey = require('./_isKey'), - isStrictComparable = require('./_isStrictComparable'), - matchesStrictComparable = require('./_matchesStrictComparable'), - toKey = require('./_toKey'); - -/** Used to compose bitmasks for comparison styles. */ -var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); - }; -} - -module.exports = baseMatchesProperty; diff --git a/node_modules/lodash/_baseMean.js b/node_modules/lodash/_baseMean.js deleted file mode 100644 index ac99a42..0000000 --- a/node_modules/lodash/_baseMean.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseSum = require('./_baseSum'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ -function baseMean(array, iteratee) { - var length = array ? array.length : 0; - return length ? (baseSum(array, iteratee) / length) : NAN; -} - -module.exports = baseMean; diff --git a/node_modules/lodash/_baseMerge.js b/node_modules/lodash/_baseMerge.js deleted file mode 100644 index f4cb8c6..0000000 --- a/node_modules/lodash/_baseMerge.js +++ /dev/null @@ -1,41 +0,0 @@ -var Stack = require('./_Stack'), - assignMergeValue = require('./_assignMergeValue'), - baseFor = require('./_baseFor'), - baseMergeDeep = require('./_baseMergeDeep'), - isObject = require('./isObject'), - keysIn = require('./keysIn'); - -/** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); -} - -module.exports = baseMerge; diff --git a/node_modules/lodash/_baseMergeDeep.js b/node_modules/lodash/_baseMergeDeep.js deleted file mode 100644 index 42b405a..0000000 --- a/node_modules/lodash/_baseMergeDeep.js +++ /dev/null @@ -1,93 +0,0 @@ -var assignMergeValue = require('./_assignMergeValue'), - cloneBuffer = require('./_cloneBuffer'), - cloneTypedArray = require('./_cloneTypedArray'), - copyArray = require('./_copyArray'), - initCloneObject = require('./_initCloneObject'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLikeObject = require('./isArrayLikeObject'), - isBuffer = require('./isBuffer'), - isFunction = require('./isFunction'), - isObject = require('./isObject'), - isPlainObject = require('./isPlainObject'), - isTypedArray = require('./isTypedArray'), - toPlainObject = require('./toPlainObject'); - -/** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); -} - -module.exports = baseMergeDeep; diff --git a/node_modules/lodash/_baseNth.js b/node_modules/lodash/_baseNth.js deleted file mode 100644 index 0403c2a..0000000 --- a/node_modules/lodash/_baseNth.js +++ /dev/null @@ -1,20 +0,0 @@ -var isIndex = require('./_isIndex'); - -/** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ -function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; -} - -module.exports = baseNth; diff --git a/node_modules/lodash/_baseOrderBy.js b/node_modules/lodash/_baseOrderBy.js deleted file mode 100644 index d8a46ab..0000000 --- a/node_modules/lodash/_baseOrderBy.js +++ /dev/null @@ -1,34 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseMap = require('./_baseMap'), - baseSortBy = require('./_baseSortBy'), - baseUnary = require('./_baseUnary'), - compareMultiple = require('./_compareMultiple'), - identity = require('./identity'); - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee)); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); -} - -module.exports = baseOrderBy; diff --git a/node_modules/lodash/_basePick.js b/node_modules/lodash/_basePick.js deleted file mode 100644 index add3600..0000000 --- a/node_modules/lodash/_basePick.js +++ /dev/null @@ -1,19 +0,0 @@ -var basePickBy = require('./_basePickBy'); - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, props) { - object = Object(object); - return basePickBy(object, props, function(value, key) { - return key in object; - }); -} - -module.exports = basePick; diff --git a/node_modules/lodash/_basePickBy.js b/node_modules/lodash/_basePickBy.js deleted file mode 100644 index dc9b342..0000000 --- a/node_modules/lodash/_basePickBy.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'); - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick from. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, props, predicate) { - var index = -1, - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (predicate(value, key)) { - baseAssignValue(result, key, value); - } - } - return result; -} - -module.exports = basePickBy; diff --git a/node_modules/lodash/_baseProperty.js b/node_modules/lodash/_baseProperty.js deleted file mode 100644 index 496281e..0000000 --- a/node_modules/lodash/_baseProperty.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = baseProperty; diff --git a/node_modules/lodash/_basePropertyDeep.js b/node_modules/lodash/_basePropertyDeep.js deleted file mode 100644 index 1e5aae5..0000000 --- a/node_modules/lodash/_basePropertyDeep.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGet = require('./_baseGet'); - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; -} - -module.exports = basePropertyDeep; diff --git a/node_modules/lodash/_basePropertyOf.js b/node_modules/lodash/_basePropertyOf.js deleted file mode 100644 index 4617399..0000000 --- a/node_modules/lodash/_basePropertyOf.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = basePropertyOf; diff --git a/node_modules/lodash/_basePullAll.js b/node_modules/lodash/_basePullAll.js deleted file mode 100644 index 305720e..0000000 --- a/node_modules/lodash/_basePullAll.js +++ /dev/null @@ -1,51 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIndexOf = require('./_baseIndexOf'), - baseIndexOfWith = require('./_baseIndexOfWith'), - baseUnary = require('./_baseUnary'), - copyArray = require('./_copyArray'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ -function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; -} - -module.exports = basePullAll; diff --git a/node_modules/lodash/_basePullAt.js b/node_modules/lodash/_basePullAt.js deleted file mode 100644 index 0dd1478..0000000 --- a/node_modules/lodash/_basePullAt.js +++ /dev/null @@ -1,50 +0,0 @@ -var castPath = require('./_castPath'), - isIndex = require('./_isIndex'), - isKey = require('./_isKey'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ -function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } - else if (!isKey(index, array)) { - var path = castPath(index), - object = parent(array, path); - - if (object != null) { - delete object[toKey(last(path))]; - } - } - else { - delete array[toKey(index)]; - } - } - } - return array; -} - -module.exports = basePullAt; diff --git a/node_modules/lodash/_baseRandom.js b/node_modules/lodash/_baseRandom.js deleted file mode 100644 index 94f76a7..0000000 --- a/node_modules/lodash/_baseRandom.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeRandom = Math.random; - -/** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ -function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); -} - -module.exports = baseRandom; diff --git a/node_modules/lodash/_baseRange.js b/node_modules/lodash/_baseRange.js deleted file mode 100644 index 0fb8e41..0000000 --- a/node_modules/lodash/_baseRange.js +++ /dev/null @@ -1,28 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -module.exports = baseRange; diff --git a/node_modules/lodash/_baseReduce.js b/node_modules/lodash/_baseReduce.js deleted file mode 100644 index 5a1f8b5..0000000 --- a/node_modules/lodash/_baseReduce.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -module.exports = baseReduce; diff --git a/node_modules/lodash/_baseRepeat.js b/node_modules/lodash/_baseRepeat.js deleted file mode 100644 index ee44c31..0000000 --- a/node_modules/lodash/_baseRepeat.js +++ /dev/null @@ -1,35 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor; - -/** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ -function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; -} - -module.exports = baseRepeat; diff --git a/node_modules/lodash/_baseRest.js b/node_modules/lodash/_baseRest.js deleted file mode 100644 index d0dc4bd..0000000 --- a/node_modules/lodash/_baseRest.js +++ /dev/null @@ -1,17 +0,0 @@ -var identity = require('./identity'), - overRest = require('./_overRest'), - setToString = require('./_setToString'); - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); -} - -module.exports = baseRest; diff --git a/node_modules/lodash/_baseSample.js b/node_modules/lodash/_baseSample.js deleted file mode 100644 index 58582b9..0000000 --- a/node_modules/lodash/_baseSample.js +++ /dev/null @@ -1,15 +0,0 @@ -var arraySample = require('./_arraySample'), - values = require('./values'); - -/** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ -function baseSample(collection) { - return arraySample(values(collection)); -} - -module.exports = baseSample; diff --git a/node_modules/lodash/_baseSampleSize.js b/node_modules/lodash/_baseSampleSize.js deleted file mode 100644 index 5c90ec5..0000000 --- a/node_modules/lodash/_baseSampleSize.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseClamp = require('./_baseClamp'), - shuffleSelf = require('./_shuffleSelf'), - values = require('./values'); - -/** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); -} - -module.exports = baseSampleSize; diff --git a/node_modules/lodash/_baseSet.js b/node_modules/lodash/_baseSet.js deleted file mode 100644 index 2be04d5..0000000 --- a/node_modules/lodash/_baseSet.js +++ /dev/null @@ -1,48 +0,0 @@ -var assignValue = require('./_assignValue'), - castPath = require('./_castPath'), - isIndex = require('./_isIndex'), - isKey = require('./_isKey'), - isObject = require('./isObject'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -module.exports = baseSet; diff --git a/node_modules/lodash/_baseSetData.js b/node_modules/lodash/_baseSetData.js deleted file mode 100644 index c409947..0000000 --- a/node_modules/lodash/_baseSetData.js +++ /dev/null @@ -1,17 +0,0 @@ -var identity = require('./identity'), - metaMap = require('./_metaMap'); - -/** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; -}; - -module.exports = baseSetData; diff --git a/node_modules/lodash/_baseSetToString.js b/node_modules/lodash/_baseSetToString.js deleted file mode 100644 index 89eaca3..0000000 --- a/node_modules/lodash/_baseSetToString.js +++ /dev/null @@ -1,22 +0,0 @@ -var constant = require('./constant'), - defineProperty = require('./_defineProperty'), - identity = require('./identity'); - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); -}; - -module.exports = baseSetToString; diff --git a/node_modules/lodash/_baseShuffle.js b/node_modules/lodash/_baseShuffle.js deleted file mode 100644 index 023077a..0000000 --- a/node_modules/lodash/_baseShuffle.js +++ /dev/null @@ -1,15 +0,0 @@ -var shuffleSelf = require('./_shuffleSelf'), - values = require('./values'); - -/** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function baseShuffle(collection) { - return shuffleSelf(values(collection)); -} - -module.exports = baseShuffle; diff --git a/node_modules/lodash/_baseSlice.js b/node_modules/lodash/_baseSlice.js deleted file mode 100644 index 786f6c9..0000000 --- a/node_modules/lodash/_baseSlice.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -module.exports = baseSlice; diff --git a/node_modules/lodash/_baseSome.js b/node_modules/lodash/_baseSome.js deleted file mode 100644 index 58f3f44..0000000 --- a/node_modules/lodash/_baseSome.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; -} - -module.exports = baseSome; diff --git a/node_modules/lodash/_baseSortBy.js b/node_modules/lodash/_baseSortBy.js deleted file mode 100644 index a25c92e..0000000 --- a/node_modules/lodash/_baseSortBy.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -module.exports = baseSortBy; diff --git a/node_modules/lodash/_baseSortedIndex.js b/node_modules/lodash/_baseSortedIndex.js deleted file mode 100644 index 0e82dc7..0000000 --- a/node_modules/lodash/_baseSortedIndex.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseSortedIndexBy = require('./_baseSortedIndexBy'), - identity = require('./identity'), - isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - -/** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); -} - -module.exports = baseSortedIndex; diff --git a/node_modules/lodash/_baseSortedIndexBy.js b/node_modules/lodash/_baseSortedIndexBy.js deleted file mode 100644 index fde7928..0000000 --- a/node_modules/lodash/_baseSortedIndexBy.js +++ /dev/null @@ -1,64 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeMin = Math.min; - -/** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); -} - -module.exports = baseSortedIndexBy; diff --git a/node_modules/lodash/_baseSortedUniq.js b/node_modules/lodash/_baseSortedUniq.js deleted file mode 100644 index 802159a..0000000 --- a/node_modules/lodash/_baseSortedUniq.js +++ /dev/null @@ -1,30 +0,0 @@ -var eq = require('./eq'); - -/** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; -} - -module.exports = baseSortedUniq; diff --git a/node_modules/lodash/_baseSum.js b/node_modules/lodash/_baseSum.js deleted file mode 100644 index a9e84c1..0000000 --- a/node_modules/lodash/_baseSum.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ -function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; -} - -module.exports = baseSum; diff --git a/node_modules/lodash/_baseTimes.js b/node_modules/lodash/_baseTimes.js deleted file mode 100644 index 0603fc3..0000000 --- a/node_modules/lodash/_baseTimes.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -module.exports = baseTimes; diff --git a/node_modules/lodash/_baseToNumber.js b/node_modules/lodash/_baseToNumber.js deleted file mode 100644 index 04859f3..0000000 --- a/node_modules/lodash/_baseToNumber.js +++ /dev/null @@ -1,24 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ -function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; -} - -module.exports = baseToNumber; diff --git a/node_modules/lodash/_baseToPairs.js b/node_modules/lodash/_baseToPairs.js deleted file mode 100644 index bff1991..0000000 --- a/node_modules/lodash/_baseToPairs.js +++ /dev/null @@ -1,18 +0,0 @@ -var arrayMap = require('./_arrayMap'); - -/** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ -function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); -} - -module.exports = baseToPairs; diff --git a/node_modules/lodash/_baseToString.js b/node_modules/lodash/_baseToString.js deleted file mode 100644 index ada6ad2..0000000 --- a/node_modules/lodash/_baseToString.js +++ /dev/null @@ -1,37 +0,0 @@ -var Symbol = require('./_Symbol'), - arrayMap = require('./_arrayMap'), - isArray = require('./isArray'), - isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = baseToString; diff --git a/node_modules/lodash/_baseUnary.js b/node_modules/lodash/_baseUnary.js deleted file mode 100644 index 98639e9..0000000 --- a/node_modules/lodash/_baseUnary.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -module.exports = baseUnary; diff --git a/node_modules/lodash/_baseUniq.js b/node_modules/lodash/_baseUniq.js deleted file mode 100644 index aea459d..0000000 --- a/node_modules/lodash/_baseUniq.js +++ /dev/null @@ -1,72 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - cacheHas = require('./_cacheHas'), - createSet = require('./_createSet'), - setToArray = require('./_setToArray'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -module.exports = baseUniq; diff --git a/node_modules/lodash/_baseUnset.js b/node_modules/lodash/_baseUnset.js deleted file mode 100644 index dda80fc..0000000 --- a/node_modules/lodash/_baseUnset.js +++ /dev/null @@ -1,29 +0,0 @@ -var castPath = require('./_castPath'), - isKey = require('./_isKey'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ -function baseUnset(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - object = parent(object, path); - - var key = toKey(last(path)); - return !(object != null && hasOwnProperty.call(object, key)) || delete object[key]; -} - -module.exports = baseUnset; diff --git a/node_modules/lodash/_baseUpdate.js b/node_modules/lodash/_baseUpdate.js deleted file mode 100644 index 92a6237..0000000 --- a/node_modules/lodash/_baseUpdate.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSet = require('./_baseSet'); - -/** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); -} - -module.exports = baseUpdate; diff --git a/node_modules/lodash/_baseValues.js b/node_modules/lodash/_baseValues.js deleted file mode 100644 index b95faad..0000000 --- a/node_modules/lodash/_baseValues.js +++ /dev/null @@ -1,19 +0,0 @@ -var arrayMap = require('./_arrayMap'); - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); -} - -module.exports = baseValues; diff --git a/node_modules/lodash/_baseWhile.js b/node_modules/lodash/_baseWhile.js deleted file mode 100644 index 07eac61..0000000 --- a/node_modules/lodash/_baseWhile.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ -function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); -} - -module.exports = baseWhile; diff --git a/node_modules/lodash/_baseWrapperValue.js b/node_modules/lodash/_baseWrapperValue.js deleted file mode 100644 index 443e0df..0000000 --- a/node_modules/lodash/_baseWrapperValue.js +++ /dev/null @@ -1,25 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - arrayPush = require('./_arrayPush'), - arrayReduce = require('./_arrayReduce'); - -/** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ -function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); -} - -module.exports = baseWrapperValue; diff --git a/node_modules/lodash/_baseXor.js b/node_modules/lodash/_baseXor.js deleted file mode 100644 index 7e62d1b..0000000 --- a/node_modules/lodash/_baseXor.js +++ /dev/null @@ -1,30 +0,0 @@ -var arrayPush = require('./_arrayPush'), - baseDifference = require('./_baseDifference'), - baseUniq = require('./_baseUniq'); - -/** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ -function baseXor(arrays, iteratee, comparator) { - var index = -1, - length = arrays.length; - - while (++index < length) { - var result = result - ? arrayPush( - baseDifference(result, arrays[index], iteratee, comparator), - baseDifference(arrays[index], result, iteratee, comparator) - ) - : arrays[index]; - } - return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; -} - -module.exports = baseXor; diff --git a/node_modules/lodash/_baseZipObject.js b/node_modules/lodash/_baseZipObject.js deleted file mode 100644 index 401f85b..0000000 --- a/node_modules/lodash/_baseZipObject.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -module.exports = baseZipObject; diff --git a/node_modules/lodash/_cacheHas.js b/node_modules/lodash/_cacheHas.js deleted file mode 100644 index 2dec892..0000000 --- a/node_modules/lodash/_cacheHas.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -module.exports = cacheHas; diff --git a/node_modules/lodash/_castArrayLikeObject.js b/node_modules/lodash/_castArrayLikeObject.js deleted file mode 100644 index 92c75fa..0000000 --- a/node_modules/lodash/_castArrayLikeObject.js +++ /dev/null @@ -1,14 +0,0 @@ -var isArrayLikeObject = require('./isArrayLikeObject'); - -/** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ -function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; -} - -module.exports = castArrayLikeObject; diff --git a/node_modules/lodash/_castFunction.js b/node_modules/lodash/_castFunction.js deleted file mode 100644 index 98c91ae..0000000 --- a/node_modules/lodash/_castFunction.js +++ /dev/null @@ -1,14 +0,0 @@ -var identity = require('./identity'); - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : identity; -} - -module.exports = castFunction; diff --git a/node_modules/lodash/_castPath.js b/node_modules/lodash/_castPath.js deleted file mode 100644 index 4f38f95..0000000 --- a/node_modules/lodash/_castPath.js +++ /dev/null @@ -1,15 +0,0 @@ -var isArray = require('./isArray'), - stringToPath = require('./_stringToPath'); - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value) { - return isArray(value) ? value : stringToPath(value); -} - -module.exports = castPath; diff --git a/node_modules/lodash/_castRest.js b/node_modules/lodash/_castRest.js deleted file mode 100644 index 213c66f..0000000 --- a/node_modules/lodash/_castRest.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseRest = require('./_baseRest'); - -/** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -var castRest = baseRest; - -module.exports = castRest; diff --git a/node_modules/lodash/_castSlice.js b/node_modules/lodash/_castSlice.js deleted file mode 100644 index 071faeb..0000000 --- a/node_modules/lodash/_castSlice.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -module.exports = castSlice; diff --git a/node_modules/lodash/_charsEndIndex.js b/node_modules/lodash/_charsEndIndex.js deleted file mode 100644 index 07908ff..0000000 --- a/node_modules/lodash/_charsEndIndex.js +++ /dev/null @@ -1,19 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ -function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; -} - -module.exports = charsEndIndex; diff --git a/node_modules/lodash/_charsStartIndex.js b/node_modules/lodash/_charsStartIndex.js deleted file mode 100644 index b17afd2..0000000 --- a/node_modules/lodash/_charsStartIndex.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ -function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; -} - -module.exports = charsStartIndex; diff --git a/node_modules/lodash/_cloneArrayBuffer.js b/node_modules/lodash/_cloneArrayBuffer.js deleted file mode 100644 index c3d8f6e..0000000 --- a/node_modules/lodash/_cloneArrayBuffer.js +++ /dev/null @@ -1,16 +0,0 @@ -var Uint8Array = require('./_Uint8Array'); - -/** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; -} - -module.exports = cloneArrayBuffer; diff --git a/node_modules/lodash/_cloneBuffer.js b/node_modules/lodash/_cloneBuffer.js deleted file mode 100644 index 27c4810..0000000 --- a/node_modules/lodash/_cloneBuffer.js +++ /dev/null @@ -1,35 +0,0 @@ -var root = require('./_root'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; - -/** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ -function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; -} - -module.exports = cloneBuffer; diff --git a/node_modules/lodash/_cloneDataView.js b/node_modules/lodash/_cloneDataView.js deleted file mode 100644 index 9c9b7b0..0000000 --- a/node_modules/lodash/_cloneDataView.js +++ /dev/null @@ -1,16 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'); - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -module.exports = cloneDataView; diff --git a/node_modules/lodash/_cloneMap.js b/node_modules/lodash/_cloneMap.js deleted file mode 100644 index b51983d..0000000 --- a/node_modules/lodash/_cloneMap.js +++ /dev/null @@ -1,19 +0,0 @@ -var addMapEntry = require('./_addMapEntry'), - arrayReduce = require('./_arrayReduce'), - mapToArray = require('./_mapToArray'); - -/** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned map. - */ -function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); -} - -module.exports = cloneMap; diff --git a/node_modules/lodash/_cloneRegExp.js b/node_modules/lodash/_cloneRegExp.js deleted file mode 100644 index 64a30df..0000000 --- a/node_modules/lodash/_cloneRegExp.js +++ /dev/null @@ -1,17 +0,0 @@ -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -module.exports = cloneRegExp; diff --git a/node_modules/lodash/_cloneSet.js b/node_modules/lodash/_cloneSet.js deleted file mode 100644 index dc1db95..0000000 --- a/node_modules/lodash/_cloneSet.js +++ /dev/null @@ -1,19 +0,0 @@ -var addSetEntry = require('./_addSetEntry'), - arrayReduce = require('./_arrayReduce'), - setToArray = require('./_setToArray'); - -/** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned set. - */ -function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); -} - -module.exports = cloneSet; diff --git a/node_modules/lodash/_cloneSymbol.js b/node_modules/lodash/_cloneSymbol.js deleted file mode 100644 index bede39f..0000000 --- a/node_modules/lodash/_cloneSymbol.js +++ /dev/null @@ -1,18 +0,0 @@ -var Symbol = require('./_Symbol'); - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -module.exports = cloneSymbol; diff --git a/node_modules/lodash/_cloneTypedArray.js b/node_modules/lodash/_cloneTypedArray.js deleted file mode 100644 index 7aad84d..0000000 --- a/node_modules/lodash/_cloneTypedArray.js +++ /dev/null @@ -1,16 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'); - -/** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ -function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} - -module.exports = cloneTypedArray; diff --git a/node_modules/lodash/_compareAscending.js b/node_modules/lodash/_compareAscending.js deleted file mode 100644 index 8dc2791..0000000 --- a/node_modules/lodash/_compareAscending.js +++ /dev/null @@ -1,41 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -module.exports = compareAscending; diff --git a/node_modules/lodash/_compareMultiple.js b/node_modules/lodash/_compareMultiple.js deleted file mode 100644 index ad61f0f..0000000 --- a/node_modules/lodash/_compareMultiple.js +++ /dev/null @@ -1,44 +0,0 @@ -var compareAscending = require('./_compareAscending'); - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -module.exports = compareMultiple; diff --git a/node_modules/lodash/_composeArgs.js b/node_modules/lodash/_composeArgs.js deleted file mode 100644 index 1ce40f4..0000000 --- a/node_modules/lodash/_composeArgs.js +++ /dev/null @@ -1,39 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; -} - -module.exports = composeArgs; diff --git a/node_modules/lodash/_composeArgsRight.js b/node_modules/lodash/_composeArgsRight.js deleted file mode 100644 index 8dc588d..0000000 --- a/node_modules/lodash/_composeArgsRight.js +++ /dev/null @@ -1,41 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; -} - -module.exports = composeArgsRight; diff --git a/node_modules/lodash/_copyArray.js b/node_modules/lodash/_copyArray.js deleted file mode 100644 index cd94d5d..0000000 --- a/node_modules/lodash/_copyArray.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -module.exports = copyArray; diff --git a/node_modules/lodash/_copyObject.js b/node_modules/lodash/_copyObject.js deleted file mode 100644 index 2f2a5c2..0000000 --- a/node_modules/lodash/_copyObject.js +++ /dev/null @@ -1,40 +0,0 @@ -var assignValue = require('./_assignValue'), - baseAssignValue = require('./_baseAssignValue'); - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -module.exports = copyObject; diff --git a/node_modules/lodash/_copySymbols.js b/node_modules/lodash/_copySymbols.js deleted file mode 100644 index 1fac3c8..0000000 --- a/node_modules/lodash/_copySymbols.js +++ /dev/null @@ -1,16 +0,0 @@ -var copyObject = require('./_copyObject'), - getSymbols = require('./_getSymbols'); - -/** - * Copies own symbol properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); -} - -module.exports = copySymbols; diff --git a/node_modules/lodash/_coreJsData.js b/node_modules/lodash/_coreJsData.js deleted file mode 100644 index f8e5b4e..0000000 --- a/node_modules/lodash/_coreJsData.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -module.exports = coreJsData; diff --git a/node_modules/lodash/_countHolders.js b/node_modules/lodash/_countHolders.js deleted file mode 100644 index 718fcda..0000000 --- a/node_modules/lodash/_countHolders.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ -function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; -} - -module.exports = countHolders; diff --git a/node_modules/lodash/_createAggregator.js b/node_modules/lodash/_createAggregator.js deleted file mode 100644 index 0be42c4..0000000 --- a/node_modules/lodash/_createAggregator.js +++ /dev/null @@ -1,23 +0,0 @@ -var arrayAggregator = require('./_arrayAggregator'), - baseAggregator = require('./_baseAggregator'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ -function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, baseIteratee(iteratee, 2), accumulator); - }; -} - -module.exports = createAggregator; diff --git a/node_modules/lodash/_createAssigner.js b/node_modules/lodash/_createAssigner.js deleted file mode 100644 index 1f904c5..0000000 --- a/node_modules/lodash/_createAssigner.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseRest = require('./_baseRest'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -module.exports = createAssigner; diff --git a/node_modules/lodash/_createBaseEach.js b/node_modules/lodash/_createBaseEach.js deleted file mode 100644 index d24fdd1..0000000 --- a/node_modules/lodash/_createBaseEach.js +++ /dev/null @@ -1,32 +0,0 @@ -var isArrayLike = require('./isArrayLike'); - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -module.exports = createBaseEach; diff --git a/node_modules/lodash/_createBaseFor.js b/node_modules/lodash/_createBaseFor.js deleted file mode 100644 index 94cbf29..0000000 --- a/node_modules/lodash/_createBaseFor.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -module.exports = createBaseFor; diff --git a/node_modules/lodash/_createBind.js b/node_modules/lodash/_createBind.js deleted file mode 100644 index aadc943..0000000 --- a/node_modules/lodash/_createBind.js +++ /dev/null @@ -1,28 +0,0 @@ -var createCtor = require('./_createCtor'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createBind(func, bitmask, thisArg) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; -} - -module.exports = createBind; diff --git a/node_modules/lodash/_createCaseFirst.js b/node_modules/lodash/_createCaseFirst.js deleted file mode 100644 index fe8ea48..0000000 --- a/node_modules/lodash/_createCaseFirst.js +++ /dev/null @@ -1,33 +0,0 @@ -var castSlice = require('./_castSlice'), - hasUnicode = require('./_hasUnicode'), - stringToArray = require('./_stringToArray'), - toString = require('./toString'); - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -module.exports = createCaseFirst; diff --git a/node_modules/lodash/_createCompounder.js b/node_modules/lodash/_createCompounder.js deleted file mode 100644 index 8d4cee2..0000000 --- a/node_modules/lodash/_createCompounder.js +++ /dev/null @@ -1,24 +0,0 @@ -var arrayReduce = require('./_arrayReduce'), - deburr = require('./deburr'), - words = require('./words'); - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]"; - -/** Used to match apostrophes. */ -var reApos = RegExp(rsApos, 'g'); - -/** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ -function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; -} - -module.exports = createCompounder; diff --git a/node_modules/lodash/_createCtor.js b/node_modules/lodash/_createCtor.js deleted file mode 100644 index 9047aa5..0000000 --- a/node_modules/lodash/_createCtor.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseCreate = require('./_baseCreate'), - isObject = require('./isObject'); - -/** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ -function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; -} - -module.exports = createCtor; diff --git a/node_modules/lodash/_createCurry.js b/node_modules/lodash/_createCurry.js deleted file mode 100644 index f06c2cd..0000000 --- a/node_modules/lodash/_createCurry.js +++ /dev/null @@ -1,46 +0,0 @@ -var apply = require('./_apply'), - createCtor = require('./_createCtor'), - createHybrid = require('./_createHybrid'), - createRecurry = require('./_createRecurry'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'), - root = require('./_root'); - -/** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; -} - -module.exports = createCurry; diff --git a/node_modules/lodash/_createFind.js b/node_modules/lodash/_createFind.js deleted file mode 100644 index 8859ff8..0000000 --- a/node_modules/lodash/_createFind.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - isArrayLike = require('./isArrayLike'), - keys = require('./keys'); - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -module.exports = createFind; diff --git a/node_modules/lodash/_createFlow.js b/node_modules/lodash/_createFlow.js deleted file mode 100644 index b70d1df..0000000 --- a/node_modules/lodash/_createFlow.js +++ /dev/null @@ -1,82 +0,0 @@ -var LodashWrapper = require('./_LodashWrapper'), - flatRest = require('./_flatRest'), - getData = require('./_getData'), - getFuncName = require('./_getFuncName'), - isArray = require('./isArray'), - isLaziable = require('./_isLaziable'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to compose bitmasks for function metadata. */ -var CURRY_FLAG = 8, - PARTIAL_FLAG = 32, - ARY_FLAG = 128, - REARG_FLAG = 256; - -/** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ -function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && - isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); -} - -module.exports = createFlow; diff --git a/node_modules/lodash/_createHybrid.js b/node_modules/lodash/_createHybrid.js deleted file mode 100644 index 1594b88..0000000 --- a/node_modules/lodash/_createHybrid.js +++ /dev/null @@ -1,92 +0,0 @@ -var composeArgs = require('./_composeArgs'), - composeArgsRight = require('./_composeArgsRight'), - countHolders = require('./_countHolders'), - createCtor = require('./_createCtor'), - createRecurry = require('./_createRecurry'), - getHolder = require('./_getHolder'), - reorder = require('./_reorder'), - replaceHolders = require('./_replaceHolders'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - ARY_FLAG = 128, - FLIP_FLAG = 512; - -/** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), - isFlip = bitmask & FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; -} - -module.exports = createHybrid; diff --git a/node_modules/lodash/_createInverter.js b/node_modules/lodash/_createInverter.js deleted file mode 100644 index 6c0c562..0000000 --- a/node_modules/lodash/_createInverter.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseInverter = require('./_baseInverter'); - -/** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ -function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; -} - -module.exports = createInverter; diff --git a/node_modules/lodash/_createMathOperation.js b/node_modules/lodash/_createMathOperation.js deleted file mode 100644 index f1e238a..0000000 --- a/node_modules/lodash/_createMathOperation.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseToNumber = require('./_baseToNumber'), - baseToString = require('./_baseToString'); - -/** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ -function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; -} - -module.exports = createMathOperation; diff --git a/node_modules/lodash/_createOver.js b/node_modules/lodash/_createOver.js deleted file mode 100644 index 3b94551..0000000 --- a/node_modules/lodash/_createOver.js +++ /dev/null @@ -1,27 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - baseUnary = require('./_baseUnary'), - flatRest = require('./_flatRest'); - -/** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ -function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); -} - -module.exports = createOver; diff --git a/node_modules/lodash/_createPadding.js b/node_modules/lodash/_createPadding.js deleted file mode 100644 index 2124612..0000000 --- a/node_modules/lodash/_createPadding.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseRepeat = require('./_baseRepeat'), - baseToString = require('./_baseToString'), - castSlice = require('./_castSlice'), - hasUnicode = require('./_hasUnicode'), - stringSize = require('./_stringSize'), - stringToArray = require('./_stringToArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil; - -/** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ -function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); -} - -module.exports = createPadding; diff --git a/node_modules/lodash/_createPartial.js b/node_modules/lodash/_createPartial.js deleted file mode 100644 index fc2bf8b..0000000 --- a/node_modules/lodash/_createPartial.js +++ /dev/null @@ -1,43 +0,0 @@ -var apply = require('./_apply'), - createCtor = require('./_createCtor'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ -function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; -} - -module.exports = createPartial; diff --git a/node_modules/lodash/_createRange.js b/node_modules/lodash/_createRange.js deleted file mode 100644 index 9f52c77..0000000 --- a/node_modules/lodash/_createRange.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseRange = require('./_baseRange'), - isIterateeCall = require('./_isIterateeCall'), - toFinite = require('./toFinite'); - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; -} - -module.exports = createRange; diff --git a/node_modules/lodash/_createRecurry.js b/node_modules/lodash/_createRecurry.js deleted file mode 100644 index 35a22e5..0000000 --- a/node_modules/lodash/_createRecurry.js +++ /dev/null @@ -1,56 +0,0 @@ -var isLaziable = require('./_isLaziable'), - setData = require('./_setData'), - setWrapToString = require('./_setWrapToString'); - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64; - -/** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); - - if (!(bitmask & CURRY_BOUND_FLAG)) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); -} - -module.exports = createRecurry; diff --git a/node_modules/lodash/_createRelationalOperation.js b/node_modules/lodash/_createRelationalOperation.js deleted file mode 100644 index a17c6b5..0000000 --- a/node_modules/lodash/_createRelationalOperation.js +++ /dev/null @@ -1,20 +0,0 @@ -var toNumber = require('./toNumber'); - -/** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ -function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; -} - -module.exports = createRelationalOperation; diff --git a/node_modules/lodash/_createRound.js b/node_modules/lodash/_createRound.js deleted file mode 100644 index 74b20d4..0000000 --- a/node_modules/lodash/_createRound.js +++ /dev/null @@ -1,33 +0,0 @@ -var toInteger = require('./toInteger'), - toNumber = require('./toNumber'), - toString = require('./toString'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ -function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = nativeMin(toInteger(precision), 292); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; -} - -module.exports = createRound; diff --git a/node_modules/lodash/_createSet.js b/node_modules/lodash/_createSet.js deleted file mode 100644 index 0f644ee..0000000 --- a/node_modules/lodash/_createSet.js +++ /dev/null @@ -1,19 +0,0 @@ -var Set = require('./_Set'), - noop = require('./noop'), - setToArray = require('./_setToArray'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); -}; - -module.exports = createSet; diff --git a/node_modules/lodash/_createToPairs.js b/node_modules/lodash/_createToPairs.js deleted file mode 100644 index 568417a..0000000 --- a/node_modules/lodash/_createToPairs.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseToPairs = require('./_baseToPairs'), - getTag = require('./_getTag'), - mapToArray = require('./_mapToArray'), - setToPairs = require('./_setToPairs'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ -function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; -} - -module.exports = createToPairs; diff --git a/node_modules/lodash/_createWrap.js b/node_modules/lodash/_createWrap.js deleted file mode 100644 index 09dac30..0000000 --- a/node_modules/lodash/_createWrap.js +++ /dev/null @@ -1,107 +0,0 @@ -var baseSetData = require('./_baseSetData'), - createBind = require('./_createBind'), - createCurry = require('./_createCurry'), - createHybrid = require('./_createHybrid'), - createPartial = require('./_createPartial'), - getData = require('./_getData'), - mergeData = require('./_mergeData'), - setData = require('./_setData'), - setWrapToString = require('./_setWrapToString'), - toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { - bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); -} - -module.exports = createWrap; diff --git a/node_modules/lodash/_deburrLetter.js b/node_modules/lodash/_deburrLetter.js deleted file mode 100644 index 3e531ed..0000000 --- a/node_modules/lodash/_deburrLetter.js +++ /dev/null @@ -1,71 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map Latin Unicode letters to basic Latin letters. */ -var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' -}; - -/** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ -var deburrLetter = basePropertyOf(deburredLetters); - -module.exports = deburrLetter; diff --git a/node_modules/lodash/_defineProperty.js b/node_modules/lodash/_defineProperty.js deleted file mode 100644 index b6116d9..0000000 --- a/node_modules/lodash/_defineProperty.js +++ /dev/null @@ -1,11 +0,0 @@ -var getNative = require('./_getNative'); - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -module.exports = defineProperty; diff --git a/node_modules/lodash/_equalArrays.js b/node_modules/lodash/_equalArrays.js deleted file mode 100644 index 178dced..0000000 --- a/node_modules/lodash/_equalArrays.js +++ /dev/null @@ -1,84 +0,0 @@ -var SetCache = require('./_SetCache'), - arraySome = require('./_arraySome'), - cacheHas = require('./_cacheHas'); - -/** Used to compose bitmasks for comparison styles. */ -var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -module.exports = equalArrays; diff --git a/node_modules/lodash/_equalByTag.js b/node_modules/lodash/_equalByTag.js deleted file mode 100644 index 07d8c8c..0000000 --- a/node_modules/lodash/_equalByTag.js +++ /dev/null @@ -1,113 +0,0 @@ -var Symbol = require('./_Symbol'), - Uint8Array = require('./_Uint8Array'), - eq = require('./eq'), - equalArrays = require('./_equalArrays'), - mapToArray = require('./_mapToArray'), - setToArray = require('./_setToArray'); - -/** Used to compose bitmasks for comparison styles. */ -var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= UNORDERED_COMPARE_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -module.exports = equalByTag; diff --git a/node_modules/lodash/_equalObjects.js b/node_modules/lodash/_equalObjects.js deleted file mode 100644 index 092cb3f..0000000 --- a/node_modules/lodash/_equalObjects.js +++ /dev/null @@ -1,90 +0,0 @@ -var keys = require('./keys'); - -/** Used to compose bitmasks for comparison styles. */ -var PARTIAL_COMPARE_FLAG = 2; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -module.exports = equalObjects; diff --git a/node_modules/lodash/_escapeHtmlChar.js b/node_modules/lodash/_escapeHtmlChar.js deleted file mode 100644 index 7ca68ee..0000000 --- a/node_modules/lodash/_escapeHtmlChar.js +++ /dev/null @@ -1,21 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map characters to HTML entities. */ -var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -}; - -/** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ -var escapeHtmlChar = basePropertyOf(htmlEscapes); - -module.exports = escapeHtmlChar; diff --git a/node_modules/lodash/_escapeStringChar.js b/node_modules/lodash/_escapeStringChar.js deleted file mode 100644 index 44eca96..0000000 --- a/node_modules/lodash/_escapeStringChar.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used to escape characters for inclusion in compiled string literals. */ -var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' -}; - -/** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ -function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; -} - -module.exports = escapeStringChar; diff --git a/node_modules/lodash/_flatRest.js b/node_modules/lodash/_flatRest.js deleted file mode 100644 index 94ab6cc..0000000 --- a/node_modules/lodash/_flatRest.js +++ /dev/null @@ -1,16 +0,0 @@ -var flatten = require('./flatten'), - overRest = require('./_overRest'), - setToString = require('./_setToString'); - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); -} - -module.exports = flatRest; diff --git a/node_modules/lodash/_freeGlobal.js b/node_modules/lodash/_freeGlobal.js deleted file mode 100644 index bbec998..0000000 --- a/node_modules/lodash/_freeGlobal.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -module.exports = freeGlobal; diff --git a/node_modules/lodash/_getAllKeys.js b/node_modules/lodash/_getAllKeys.js deleted file mode 100644 index a9ce699..0000000 --- a/node_modules/lodash/_getAllKeys.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbols = require('./_getSymbols'), - keys = require('./keys'); - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); -} - -module.exports = getAllKeys; diff --git a/node_modules/lodash/_getAllKeysIn.js b/node_modules/lodash/_getAllKeysIn.js deleted file mode 100644 index 1b46678..0000000 --- a/node_modules/lodash/_getAllKeysIn.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbolsIn = require('./_getSymbolsIn'), - keysIn = require('./keysIn'); - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); -} - -module.exports = getAllKeysIn; diff --git a/node_modules/lodash/_getData.js b/node_modules/lodash/_getData.js deleted file mode 100644 index a1fe7b7..0000000 --- a/node_modules/lodash/_getData.js +++ /dev/null @@ -1,15 +0,0 @@ -var metaMap = require('./_metaMap'), - noop = require('./noop'); - -/** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ -var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); -}; - -module.exports = getData; diff --git a/node_modules/lodash/_getFuncName.js b/node_modules/lodash/_getFuncName.js deleted file mode 100644 index 21e15b3..0000000 --- a/node_modules/lodash/_getFuncName.js +++ /dev/null @@ -1,31 +0,0 @@ -var realNames = require('./_realNames'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ -function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; -} - -module.exports = getFuncName; diff --git a/node_modules/lodash/_getHolder.js b/node_modules/lodash/_getHolder.js deleted file mode 100644 index 65e94b5..0000000 --- a/node_modules/lodash/_getHolder.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ -function getHolder(func) { - var object = func; - return object.placeholder; -} - -module.exports = getHolder; diff --git a/node_modules/lodash/_getMapData.js b/node_modules/lodash/_getMapData.js deleted file mode 100644 index 17f6303..0000000 --- a/node_modules/lodash/_getMapData.js +++ /dev/null @@ -1,18 +0,0 @@ -var isKeyable = require('./_isKeyable'); - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -module.exports = getMapData; diff --git a/node_modules/lodash/_getMatchData.js b/node_modules/lodash/_getMatchData.js deleted file mode 100644 index 2cc70f9..0000000 --- a/node_modules/lodash/_getMatchData.js +++ /dev/null @@ -1,24 +0,0 @@ -var isStrictComparable = require('./_isStrictComparable'), - keys = require('./keys'); - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; -} - -module.exports = getMatchData; diff --git a/node_modules/lodash/_getNative.js b/node_modules/lodash/_getNative.js deleted file mode 100644 index 97a622b..0000000 --- a/node_modules/lodash/_getNative.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIsNative = require('./_baseIsNative'), - getValue = require('./_getValue'); - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -module.exports = getNative; diff --git a/node_modules/lodash/_getPrototype.js b/node_modules/lodash/_getPrototype.js deleted file mode 100644 index e808612..0000000 --- a/node_modules/lodash/_getPrototype.js +++ /dev/null @@ -1,6 +0,0 @@ -var overArg = require('./_overArg'); - -/** Built-in value references. */ -var getPrototype = overArg(Object.getPrototypeOf, Object); - -module.exports = getPrototype; diff --git a/node_modules/lodash/_getSymbols.js b/node_modules/lodash/_getSymbols.js deleted file mode 100644 index e41dad1..0000000 --- a/node_modules/lodash/_getSymbols.js +++ /dev/null @@ -1,16 +0,0 @@ -var overArg = require('./_overArg'), - stubArray = require('./stubArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbol properties of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; - -module.exports = getSymbols; diff --git a/node_modules/lodash/_getSymbolsIn.js b/node_modules/lodash/_getSymbolsIn.js deleted file mode 100644 index 221277e..0000000 --- a/node_modules/lodash/_getSymbolsIn.js +++ /dev/null @@ -1,26 +0,0 @@ -var arrayPush = require('./_arrayPush'), - getPrototype = require('./_getPrototype'), - getSymbols = require('./_getSymbols'), - stubArray = require('./stubArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbol properties - * of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; -}; - -module.exports = getSymbolsIn; diff --git a/node_modules/lodash/_getTag.js b/node_modules/lodash/_getTag.js deleted file mode 100644 index 6954db1..0000000 --- a/node_modules/lodash/_getTag.js +++ /dev/null @@ -1,68 +0,0 @@ -var DataView = require('./_DataView'), - Map = require('./_Map'), - Promise = require('./_Promise'), - Set = require('./_Set'), - WeakMap = require('./_WeakMap'), - baseGetTag = require('./_baseGetTag'), - toSource = require('./_toSource'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; - -var dataViewTag = '[object DataView]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = baseGetTag; - -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : undefined; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; -} - -module.exports = getTag; diff --git a/node_modules/lodash/_getValue.js b/node_modules/lodash/_getValue.js deleted file mode 100644 index 5f7d773..0000000 --- a/node_modules/lodash/_getValue.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -module.exports = getValue; diff --git a/node_modules/lodash/_getView.js b/node_modules/lodash/_getView.js deleted file mode 100644 index df1e5d4..0000000 --- a/node_modules/lodash/_getView.js +++ /dev/null @@ -1,33 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ -function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; -} - -module.exports = getView; diff --git a/node_modules/lodash/_getWrapDetails.js b/node_modules/lodash/_getWrapDetails.js deleted file mode 100644 index 3bcc6e4..0000000 --- a/node_modules/lodash/_getWrapDetails.js +++ /dev/null @@ -1,17 +0,0 @@ -/** Used to match wrap detail comments. */ -var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - -/** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ -function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; -} - -module.exports = getWrapDetails; diff --git a/node_modules/lodash/_hasPath.js b/node_modules/lodash/_hasPath.js deleted file mode 100644 index 770be4b..0000000 --- a/node_modules/lodash/_hasPath.js +++ /dev/null @@ -1,40 +0,0 @@ -var castPath = require('./_castPath'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isIndex = require('./_isIndex'), - isKey = require('./_isKey'), - isLength = require('./isLength'), - toKey = require('./_toKey'); - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object ? object.length : 0; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); -} - -module.exports = hasPath; diff --git a/node_modules/lodash/_hasUnicode.js b/node_modules/lodash/_hasUnicode.js deleted file mode 100644 index 085161a..0000000 --- a/node_modules/lodash/_hasUnicode.js +++ /dev/null @@ -1,24 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -module.exports = hasUnicode; diff --git a/node_modules/lodash/_hasUnicodeWord.js b/node_modules/lodash/_hasUnicodeWord.js deleted file mode 100644 index a35d6e5..0000000 --- a/node_modules/lodash/_hasUnicodeWord.js +++ /dev/null @@ -1,15 +0,0 @@ -/** Used to detect strings that need a more robust regexp to match words. */ -var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - -/** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ -function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); -} - -module.exports = hasUnicodeWord; diff --git a/node_modules/lodash/_hashClear.js b/node_modules/lodash/_hashClear.js deleted file mode 100644 index 5d4b70c..0000000 --- a/node_modules/lodash/_hashClear.js +++ /dev/null @@ -1,15 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} - -module.exports = hashClear; diff --git a/node_modules/lodash/_hashDelete.js b/node_modules/lodash/_hashDelete.js deleted file mode 100644 index ea9dabf..0000000 --- a/node_modules/lodash/_hashDelete.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} - -module.exports = hashDelete; diff --git a/node_modules/lodash/_hashGet.js b/node_modules/lodash/_hashGet.js deleted file mode 100644 index 1fc2f34..0000000 --- a/node_modules/lodash/_hashGet.js +++ /dev/null @@ -1,30 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -module.exports = hashGet; diff --git a/node_modules/lodash/_hashHas.js b/node_modules/lodash/_hashHas.js deleted file mode 100644 index f30aac3..0000000 --- a/node_modules/lodash/_hashHas.js +++ /dev/null @@ -1,23 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); -} - -module.exports = hashHas; diff --git a/node_modules/lodash/_hashSet.js b/node_modules/lodash/_hashSet.js deleted file mode 100644 index e105528..0000000 --- a/node_modules/lodash/_hashSet.js +++ /dev/null @@ -1,23 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} - -module.exports = hashSet; diff --git a/node_modules/lodash/_initCloneArray.js b/node_modules/lodash/_initCloneArray.js deleted file mode 100644 index aef0212..0000000 --- a/node_modules/lodash/_initCloneArray.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -module.exports = initCloneArray; diff --git a/node_modules/lodash/_initCloneByTag.js b/node_modules/lodash/_initCloneByTag.js deleted file mode 100644 index e7b77ed..0000000 --- a/node_modules/lodash/_initCloneByTag.js +++ /dev/null @@ -1,80 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'), - cloneDataView = require('./_cloneDataView'), - cloneMap = require('./_cloneMap'), - cloneRegExp = require('./_cloneRegExp'), - cloneSet = require('./_cloneSet'), - cloneSymbol = require('./_cloneSymbol'), - cloneTypedArray = require('./_cloneTypedArray'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return cloneMap(object, isDeep, cloneFunc); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object, isDeep, cloneFunc); - - case symbolTag: - return cloneSymbol(object); - } -} - -module.exports = initCloneByTag; diff --git a/node_modules/lodash/_initCloneObject.js b/node_modules/lodash/_initCloneObject.js deleted file mode 100644 index 5a13e64..0000000 --- a/node_modules/lodash/_initCloneObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseCreate = require('./_baseCreate'), - getPrototype = require('./_getPrototype'), - isPrototype = require('./_isPrototype'); - -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; -} - -module.exports = initCloneObject; diff --git a/node_modules/lodash/_insertWrapDetails.js b/node_modules/lodash/_insertWrapDetails.js deleted file mode 100644 index e790808..0000000 --- a/node_modules/lodash/_insertWrapDetails.js +++ /dev/null @@ -1,23 +0,0 @@ -/** Used to match wrap detail comments. */ -var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; - -/** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ -function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); -} - -module.exports = insertWrapDetails; diff --git a/node_modules/lodash/_isFlattenable.js b/node_modules/lodash/_isFlattenable.js deleted file mode 100644 index 4cc2c24..0000000 --- a/node_modules/lodash/_isFlattenable.js +++ /dev/null @@ -1,20 +0,0 @@ -var Symbol = require('./_Symbol'), - isArguments = require('./isArguments'), - isArray = require('./isArray'); - -/** Built-in value references. */ -var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -module.exports = isFlattenable; diff --git a/node_modules/lodash/_isIndex.js b/node_modules/lodash/_isIndex.js deleted file mode 100644 index e123dde..0000000 --- a/node_modules/lodash/_isIndex.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); -} - -module.exports = isIndex; diff --git a/node_modules/lodash/_isIterateeCall.js b/node_modules/lodash/_isIterateeCall.js deleted file mode 100644 index a0bb5a9..0000000 --- a/node_modules/lodash/_isIterateeCall.js +++ /dev/null @@ -1,30 +0,0 @@ -var eq = require('./eq'), - isArrayLike = require('./isArrayLike'), - isIndex = require('./_isIndex'), - isObject = require('./isObject'); - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -module.exports = isIterateeCall; diff --git a/node_modules/lodash/_isKey.js b/node_modules/lodash/_isKey.js deleted file mode 100644 index ff08b06..0000000 --- a/node_modules/lodash/_isKey.js +++ /dev/null @@ -1,29 +0,0 @@ -var isArray = require('./isArray'), - isSymbol = require('./isSymbol'); - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -module.exports = isKey; diff --git a/node_modules/lodash/_isKeyable.js b/node_modules/lodash/_isKeyable.js deleted file mode 100644 index 39f1828..0000000 --- a/node_modules/lodash/_isKeyable.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -module.exports = isKeyable; diff --git a/node_modules/lodash/_isLaziable.js b/node_modules/lodash/_isLaziable.js deleted file mode 100644 index a57c4f2..0000000 --- a/node_modules/lodash/_isLaziable.js +++ /dev/null @@ -1,28 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - getData = require('./_getData'), - getFuncName = require('./_getFuncName'), - lodash = require('./wrapperLodash'); - -/** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ -function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; -} - -module.exports = isLaziable; diff --git a/node_modules/lodash/_isMaskable.js b/node_modules/lodash/_isMaskable.js deleted file mode 100644 index eb98d09..0000000 --- a/node_modules/lodash/_isMaskable.js +++ /dev/null @@ -1,14 +0,0 @@ -var coreJsData = require('./_coreJsData'), - isFunction = require('./isFunction'), - stubFalse = require('./stubFalse'); - -/** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ -var isMaskable = coreJsData ? isFunction : stubFalse; - -module.exports = isMaskable; diff --git a/node_modules/lodash/_isMasked.js b/node_modules/lodash/_isMasked.js deleted file mode 100644 index 4b0f21b..0000000 --- a/node_modules/lodash/_isMasked.js +++ /dev/null @@ -1,20 +0,0 @@ -var coreJsData = require('./_coreJsData'); - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -module.exports = isMasked; diff --git a/node_modules/lodash/_isPrototype.js b/node_modules/lodash/_isPrototype.js deleted file mode 100644 index 0f29498..0000000 --- a/node_modules/lodash/_isPrototype.js +++ /dev/null @@ -1,18 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; -} - -module.exports = isPrototype; diff --git a/node_modules/lodash/_isStrictComparable.js b/node_modules/lodash/_isStrictComparable.js deleted file mode 100644 index b59f40b..0000000 --- a/node_modules/lodash/_isStrictComparable.js +++ /dev/null @@ -1,15 +0,0 @@ -var isObject = require('./isObject'); - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !isObject(value); -} - -module.exports = isStrictComparable; diff --git a/node_modules/lodash/_iteratorToArray.js b/node_modules/lodash/_iteratorToArray.js deleted file mode 100644 index 4768566..0000000 --- a/node_modules/lodash/_iteratorToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ -function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; -} - -module.exports = iteratorToArray; diff --git a/node_modules/lodash/_lazyClone.js b/node_modules/lodash/_lazyClone.js deleted file mode 100644 index d8a51f8..0000000 --- a/node_modules/lodash/_lazyClone.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - copyArray = require('./_copyArray'); - -/** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ -function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; -} - -module.exports = lazyClone; diff --git a/node_modules/lodash/_lazyReverse.js b/node_modules/lodash/_lazyReverse.js deleted file mode 100644 index c5b5219..0000000 --- a/node_modules/lodash/_lazyReverse.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'); - -/** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ -function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; -} - -module.exports = lazyReverse; diff --git a/node_modules/lodash/_lazyValue.js b/node_modules/lodash/_lazyValue.js deleted file mode 100644 index 09bf14b..0000000 --- a/node_modules/lodash/_lazyValue.js +++ /dev/null @@ -1,73 +0,0 @@ -var baseWrapperValue = require('./_baseWrapperValue'), - getView = require('./_getView'), - isArray = require('./isArray'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** Used to indicate the type of lazy iteratees. */ -var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ -function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || - (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; -} - -module.exports = lazyValue; diff --git a/node_modules/lodash/_listCacheClear.js b/node_modules/lodash/_listCacheClear.js deleted file mode 100644 index acbe39a..0000000 --- a/node_modules/lodash/_listCacheClear.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} - -module.exports = listCacheClear; diff --git a/node_modules/lodash/_listCacheDelete.js b/node_modules/lodash/_listCacheDelete.js deleted file mode 100644 index b1384ad..0000000 --- a/node_modules/lodash/_listCacheDelete.js +++ /dev/null @@ -1,35 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} - -module.exports = listCacheDelete; diff --git a/node_modules/lodash/_listCacheGet.js b/node_modules/lodash/_listCacheGet.js deleted file mode 100644 index f8192fc..0000000 --- a/node_modules/lodash/_listCacheGet.js +++ /dev/null @@ -1,19 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -module.exports = listCacheGet; diff --git a/node_modules/lodash/_listCacheHas.js b/node_modules/lodash/_listCacheHas.js deleted file mode 100644 index 2adf671..0000000 --- a/node_modules/lodash/_listCacheHas.js +++ /dev/null @@ -1,16 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -module.exports = listCacheHas; diff --git a/node_modules/lodash/_listCacheSet.js b/node_modules/lodash/_listCacheSet.js deleted file mode 100644 index 5855c95..0000000 --- a/node_modules/lodash/_listCacheSet.js +++ /dev/null @@ -1,26 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -module.exports = listCacheSet; diff --git a/node_modules/lodash/_mapCacheClear.js b/node_modules/lodash/_mapCacheClear.js deleted file mode 100644 index bc9ca20..0000000 --- a/node_modules/lodash/_mapCacheClear.js +++ /dev/null @@ -1,21 +0,0 @@ -var Hash = require('./_Hash'), - ListCache = require('./_ListCache'), - Map = require('./_Map'); - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} - -module.exports = mapCacheClear; diff --git a/node_modules/lodash/_mapCacheDelete.js b/node_modules/lodash/_mapCacheDelete.js deleted file mode 100644 index 946ca3c..0000000 --- a/node_modules/lodash/_mapCacheDelete.js +++ /dev/null @@ -1,18 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} - -module.exports = mapCacheDelete; diff --git a/node_modules/lodash/_mapCacheGet.js b/node_modules/lodash/_mapCacheGet.js deleted file mode 100644 index f29f55c..0000000 --- a/node_modules/lodash/_mapCacheGet.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -module.exports = mapCacheGet; diff --git a/node_modules/lodash/_mapCacheHas.js b/node_modules/lodash/_mapCacheHas.js deleted file mode 100644 index a1214c0..0000000 --- a/node_modules/lodash/_mapCacheHas.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -module.exports = mapCacheHas; diff --git a/node_modules/lodash/_mapCacheSet.js b/node_modules/lodash/_mapCacheSet.js deleted file mode 100644 index 7346849..0000000 --- a/node_modules/lodash/_mapCacheSet.js +++ /dev/null @@ -1,22 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} - -module.exports = mapCacheSet; diff --git a/node_modules/lodash/_mapToArray.js b/node_modules/lodash/_mapToArray.js deleted file mode 100644 index fe3dd53..0000000 --- a/node_modules/lodash/_mapToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -module.exports = mapToArray; diff --git a/node_modules/lodash/_matchesStrictComparable.js b/node_modules/lodash/_matchesStrictComparable.js deleted file mode 100644 index f608af9..0000000 --- a/node_modules/lodash/_matchesStrictComparable.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -module.exports = matchesStrictComparable; diff --git a/node_modules/lodash/_memoizeCapped.js b/node_modules/lodash/_memoizeCapped.js deleted file mode 100644 index 7f71c8f..0000000 --- a/node_modules/lodash/_memoizeCapped.js +++ /dev/null @@ -1,26 +0,0 @@ -var memoize = require('./memoize'); - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -module.exports = memoizeCapped; diff --git a/node_modules/lodash/_mergeData.js b/node_modules/lodash/_mergeData.js deleted file mode 100644 index 5aa1f1f..0000000 --- a/node_modules/lodash/_mergeData.js +++ /dev/null @@ -1,90 +0,0 @@ -var composeArgs = require('./_composeArgs'), - composeArgsRight = require('./_composeArgsRight'), - replaceHolders = require('./_replaceHolders'); - -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - ARY_FLAG = 128, - REARG_FLAG = 256; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ -function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); - - var isCombo = - ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || - ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; -} - -module.exports = mergeData; diff --git a/node_modules/lodash/_mergeDefaults.js b/node_modules/lodash/_mergeDefaults.js deleted file mode 100644 index 9888f0e..0000000 --- a/node_modules/lodash/_mergeDefaults.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseMerge = require('./_baseMerge'), - isObject = require('./isObject'); - -/** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ -function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack); - stack['delete'](srcValue); - } - return objValue; -} - -module.exports = mergeDefaults; diff --git a/node_modules/lodash/_metaMap.js b/node_modules/lodash/_metaMap.js deleted file mode 100644 index 0157a0b..0000000 --- a/node_modules/lodash/_metaMap.js +++ /dev/null @@ -1,6 +0,0 @@ -var WeakMap = require('./_WeakMap'); - -/** Used to store function metadata. */ -var metaMap = WeakMap && new WeakMap; - -module.exports = metaMap; diff --git a/node_modules/lodash/_nativeCreate.js b/node_modules/lodash/_nativeCreate.js deleted file mode 100644 index c7aede8..0000000 --- a/node_modules/lodash/_nativeCreate.js +++ /dev/null @@ -1,6 +0,0 @@ -var getNative = require('./_getNative'); - -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); - -module.exports = nativeCreate; diff --git a/node_modules/lodash/_nativeKeys.js b/node_modules/lodash/_nativeKeys.js deleted file mode 100644 index 479a104..0000000 --- a/node_modules/lodash/_nativeKeys.js +++ /dev/null @@ -1,6 +0,0 @@ -var overArg = require('./_overArg'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -module.exports = nativeKeys; diff --git a/node_modules/lodash/_nativeKeysIn.js b/node_modules/lodash/_nativeKeysIn.js deleted file mode 100644 index 00ee505..0000000 --- a/node_modules/lodash/_nativeKeysIn.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -module.exports = nativeKeysIn; diff --git a/node_modules/lodash/_nodeUtil.js b/node_modules/lodash/_nodeUtil.js deleted file mode 100644 index b8e48e3..0000000 --- a/node_modules/lodash/_nodeUtil.js +++ /dev/null @@ -1,22 +0,0 @@ -var freeGlobal = require('./_freeGlobal'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - return freeProcess && freeProcess.binding('util'); - } catch (e) {} -}()); - -module.exports = nodeUtil; diff --git a/node_modules/lodash/_overArg.js b/node_modules/lodash/_overArg.js deleted file mode 100644 index 651c5c5..0000000 --- a/node_modules/lodash/_overArg.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -module.exports = overArg; diff --git a/node_modules/lodash/_overRest.js b/node_modules/lodash/_overRest.js deleted file mode 100644 index c7cdef3..0000000 --- a/node_modules/lodash/_overRest.js +++ /dev/null @@ -1,36 +0,0 @@ -var apply = require('./_apply'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -module.exports = overRest; diff --git a/node_modules/lodash/_parent.js b/node_modules/lodash/_parent.js deleted file mode 100644 index 81d94d0..0000000 --- a/node_modules/lodash/_parent.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSlice = require('./_baseSlice'); - -/** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ -function parent(object, path) { - return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); -} - -module.exports = parent; diff --git a/node_modules/lodash/_reEscape.js b/node_modules/lodash/_reEscape.js deleted file mode 100644 index 7f47eda..0000000 --- a/node_modules/lodash/_reEscape.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reEscape = /<%-([\s\S]+?)%>/g; - -module.exports = reEscape; diff --git a/node_modules/lodash/_reEvaluate.js b/node_modules/lodash/_reEvaluate.js deleted file mode 100644 index 6adfc31..0000000 --- a/node_modules/lodash/_reEvaluate.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reEvaluate = /<%([\s\S]+?)%>/g; - -module.exports = reEvaluate; diff --git a/node_modules/lodash/_reInterpolate.js b/node_modules/lodash/_reInterpolate.js deleted file mode 100644 index d02ff0b..0000000 --- a/node_modules/lodash/_reInterpolate.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reInterpolate = /<%=([\s\S]+?)%>/g; - -module.exports = reInterpolate; diff --git a/node_modules/lodash/_realNames.js b/node_modules/lodash/_realNames.js deleted file mode 100644 index aa0d529..0000000 --- a/node_modules/lodash/_realNames.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to lookup unminified function names. */ -var realNames = {}; - -module.exports = realNames; diff --git a/node_modules/lodash/_reorder.js b/node_modules/lodash/_reorder.js deleted file mode 100644 index a3502b0..0000000 --- a/node_modules/lodash/_reorder.js +++ /dev/null @@ -1,29 +0,0 @@ -var copyArray = require('./_copyArray'), - isIndex = require('./_isIndex'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ -function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; -} - -module.exports = reorder; diff --git a/node_modules/lodash/_replaceHolders.js b/node_modules/lodash/_replaceHolders.js deleted file mode 100644 index 74360ec..0000000 --- a/node_modules/lodash/_replaceHolders.js +++ /dev/null @@ -1,29 +0,0 @@ -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ -function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; -} - -module.exports = replaceHolders; diff --git a/node_modules/lodash/_root.js b/node_modules/lodash/_root.js deleted file mode 100644 index d2852be..0000000 --- a/node_modules/lodash/_root.js +++ /dev/null @@ -1,9 +0,0 @@ -var freeGlobal = require('./_freeGlobal'); - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -module.exports = root; diff --git a/node_modules/lodash/_setCacheAdd.js b/node_modules/lodash/_setCacheAdd.js deleted file mode 100644 index 1081a74..0000000 --- a/node_modules/lodash/_setCacheAdd.js +++ /dev/null @@ -1,19 +0,0 @@ -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -module.exports = setCacheAdd; diff --git a/node_modules/lodash/_setCacheHas.js b/node_modules/lodash/_setCacheHas.js deleted file mode 100644 index 9a49255..0000000 --- a/node_modules/lodash/_setCacheHas.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -module.exports = setCacheHas; diff --git a/node_modules/lodash/_setData.js b/node_modules/lodash/_setData.js deleted file mode 100644 index e5cf3eb..0000000 --- a/node_modules/lodash/_setData.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseSetData = require('./_baseSetData'), - shortOut = require('./_shortOut'); - -/** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var setData = shortOut(baseSetData); - -module.exports = setData; diff --git a/node_modules/lodash/_setToArray.js b/node_modules/lodash/_setToArray.js deleted file mode 100644 index b87f074..0000000 --- a/node_modules/lodash/_setToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -module.exports = setToArray; diff --git a/node_modules/lodash/_setToPairs.js b/node_modules/lodash/_setToPairs.js deleted file mode 100644 index 36ad37a..0000000 --- a/node_modules/lodash/_setToPairs.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ -function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; -} - -module.exports = setToPairs; diff --git a/node_modules/lodash/_setToString.js b/node_modules/lodash/_setToString.js deleted file mode 100644 index 6ca8419..0000000 --- a/node_modules/lodash/_setToString.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseSetToString = require('./_baseSetToString'), - shortOut = require('./_shortOut'); - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -module.exports = setToString; diff --git a/node_modules/lodash/_setWrapToString.js b/node_modules/lodash/_setWrapToString.js deleted file mode 100644 index decdc44..0000000 --- a/node_modules/lodash/_setWrapToString.js +++ /dev/null @@ -1,21 +0,0 @@ -var getWrapDetails = require('./_getWrapDetails'), - insertWrapDetails = require('./_insertWrapDetails'), - setToString = require('./_setToString'), - updateWrapDetails = require('./_updateWrapDetails'); - -/** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ -function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); -} - -module.exports = setWrapToString; diff --git a/node_modules/lodash/_shortOut.js b/node_modules/lodash/_shortOut.js deleted file mode 100644 index a4e6507..0000000 --- a/node_modules/lodash/_shortOut.js +++ /dev/null @@ -1,37 +0,0 @@ -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 500, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -module.exports = shortOut; diff --git a/node_modules/lodash/_shuffleSelf.js b/node_modules/lodash/_shuffleSelf.js deleted file mode 100644 index 8bcc4f5..0000000 --- a/node_modules/lodash/_shuffleSelf.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseRandom = require('./_baseRandom'); - -/** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ -function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; -} - -module.exports = shuffleSelf; diff --git a/node_modules/lodash/_stackClear.js b/node_modules/lodash/_stackClear.js deleted file mode 100644 index ce8e5a9..0000000 --- a/node_modules/lodash/_stackClear.js +++ /dev/null @@ -1,15 +0,0 @@ -var ListCache = require('./_ListCache'); - -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; -} - -module.exports = stackClear; diff --git a/node_modules/lodash/_stackDelete.js b/node_modules/lodash/_stackDelete.js deleted file mode 100644 index ff9887a..0000000 --- a/node_modules/lodash/_stackDelete.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; -} - -module.exports = stackDelete; diff --git a/node_modules/lodash/_stackGet.js b/node_modules/lodash/_stackGet.js deleted file mode 100644 index 1cdf004..0000000 --- a/node_modules/lodash/_stackGet.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} - -module.exports = stackGet; diff --git a/node_modules/lodash/_stackHas.js b/node_modules/lodash/_stackHas.js deleted file mode 100644 index 16a3ad1..0000000 --- a/node_modules/lodash/_stackHas.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} - -module.exports = stackHas; diff --git a/node_modules/lodash/_stackSet.js b/node_modules/lodash/_stackSet.js deleted file mode 100644 index b790ac5..0000000 --- a/node_modules/lodash/_stackSet.js +++ /dev/null @@ -1,34 +0,0 @@ -var ListCache = require('./_ListCache'), - Map = require('./_Map'), - MapCache = require('./_MapCache'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; -} - -module.exports = stackSet; diff --git a/node_modules/lodash/_strictIndexOf.js b/node_modules/lodash/_strictIndexOf.js deleted file mode 100644 index 0486a49..0000000 --- a/node_modules/lodash/_strictIndexOf.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -module.exports = strictIndexOf; diff --git a/node_modules/lodash/_strictLastIndexOf.js b/node_modules/lodash/_strictLastIndexOf.js deleted file mode 100644 index d7310dc..0000000 --- a/node_modules/lodash/_strictLastIndexOf.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; -} - -module.exports = strictLastIndexOf; diff --git a/node_modules/lodash/_stringSize.js b/node_modules/lodash/_stringSize.js deleted file mode 100644 index 17ef462..0000000 --- a/node_modules/lodash/_stringSize.js +++ /dev/null @@ -1,18 +0,0 @@ -var asciiSize = require('./_asciiSize'), - hasUnicode = require('./_hasUnicode'), - unicodeSize = require('./_unicodeSize'); - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); -} - -module.exports = stringSize; diff --git a/node_modules/lodash/_stringToArray.js b/node_modules/lodash/_stringToArray.js deleted file mode 100644 index d161158..0000000 --- a/node_modules/lodash/_stringToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -var asciiToArray = require('./_asciiToArray'), - hasUnicode = require('./_hasUnicode'), - unicodeToArray = require('./_unicodeToArray'); - -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} - -module.exports = stringToArray; diff --git a/node_modules/lodash/_stringToPath.js b/node_modules/lodash/_stringToPath.js deleted file mode 100644 index 8bb78e5..0000000 --- a/node_modules/lodash/_stringToPath.js +++ /dev/null @@ -1,31 +0,0 @@ -var memoizeCapped = require('./_memoizeCapped'), - toString = require('./toString'); - -/** Used to match property names within property paths. */ -var reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoizeCapped(function(string) { - string = toString(string); - - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -module.exports = stringToPath; diff --git a/node_modules/lodash/_toKey.js b/node_modules/lodash/_toKey.js deleted file mode 100644 index c6d645c..0000000 --- a/node_modules/lodash/_toKey.js +++ /dev/null @@ -1,21 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = toKey; diff --git a/node_modules/lodash/_toSource.js b/node_modules/lodash/_toSource.js deleted file mode 100644 index 00ac454..0000000 --- a/node_modules/lodash/_toSource.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var funcProto = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -module.exports = toSource; diff --git a/node_modules/lodash/_unescapeHtmlChar.js b/node_modules/lodash/_unescapeHtmlChar.js deleted file mode 100644 index a71fecb..0000000 --- a/node_modules/lodash/_unescapeHtmlChar.js +++ /dev/null @@ -1,21 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map HTML entities to characters. */ -var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" -}; - -/** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ -var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - -module.exports = unescapeHtmlChar; diff --git a/node_modules/lodash/_unicodeSize.js b/node_modules/lodash/_unicodeSize.js deleted file mode 100644 index 26cd257..0000000 --- a/node_modules/lodash/_unicodeSize.js +++ /dev/null @@ -1,42 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -module.exports = unicodeSize; diff --git a/node_modules/lodash/_unicodeToArray.js b/node_modules/lodash/_unicodeToArray.js deleted file mode 100644 index 11ac763..0000000 --- a/node_modules/lodash/_unicodeToArray.js +++ /dev/null @@ -1,38 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; -} - -module.exports = unicodeToArray; diff --git a/node_modules/lodash/_unicodeWords.js b/node_modules/lodash/_unicodeWords.js deleted file mode 100644 index a02e930..0000000 --- a/node_modules/lodash/_unicodeWords.js +++ /dev/null @@ -1,63 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]", - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', - rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; - -/** Used to match complex or compound words. */ -var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', - rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, - rsUpper + '+' + rsOptUpperContr, - rsDigits, - rsEmoji -].join('|'), 'g'); - -/** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function unicodeWords(string) { - return string.match(reUnicodeWord) || []; -} - -module.exports = unicodeWords; diff --git a/node_modules/lodash/_updateWrapDetails.js b/node_modules/lodash/_updateWrapDetails.js deleted file mode 100644 index 128b1b4..0000000 --- a/node_modules/lodash/_updateWrapDetails.js +++ /dev/null @@ -1,46 +0,0 @@ -var arrayEach = require('./_arrayEach'), - arrayIncludes = require('./_arrayIncludes'); - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64, - ARY_FLAG = 128, - REARG_FLAG = 256, - FLIP_FLAG = 512; - -/** Used to associate wrap methods with their bit flags. */ -var wrapFlags = [ - ['ary', ARY_FLAG], - ['bind', BIND_FLAG], - ['bindKey', BIND_KEY_FLAG], - ['curry', CURRY_FLAG], - ['curryRight', CURRY_RIGHT_FLAG], - ['flip', FLIP_FLAG], - ['partial', PARTIAL_FLAG], - ['partialRight', PARTIAL_RIGHT_FLAG], - ['rearg', REARG_FLAG] -]; - -/** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ -function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); -} - -module.exports = updateWrapDetails; diff --git a/node_modules/lodash/_wrapperClone.js b/node_modules/lodash/_wrapperClone.js deleted file mode 100644 index 7bb58a2..0000000 --- a/node_modules/lodash/_wrapperClone.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - LodashWrapper = require('./_LodashWrapper'), - copyArray = require('./_copyArray'); - -/** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ -function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; -} - -module.exports = wrapperClone; diff --git a/node_modules/lodash/add.js b/node_modules/lodash/add.js deleted file mode 100644 index f069515..0000000 --- a/node_modules/lodash/add.js +++ /dev/null @@ -1,22 +0,0 @@ -var createMathOperation = require('./_createMathOperation'); - -/** - * Adds two numbers. - * - * @static - * @memberOf _ - * @since 3.4.0 - * @category Math - * @param {number} augend The first number in an addition. - * @param {number} addend The second number in an addition. - * @returns {number} Returns the total. - * @example - * - * _.add(6, 4); - * // => 10 - */ -var add = createMathOperation(function(augend, addend) { - return augend + addend; -}, 0); - -module.exports = add; diff --git a/node_modules/lodash/after.js b/node_modules/lodash/after.js deleted file mode 100644 index 3900c97..0000000 --- a/node_modules/lodash/after.js +++ /dev/null @@ -1,42 +0,0 @@ -var toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ -function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; -} - -module.exports = after; diff --git a/node_modules/lodash/array.js b/node_modules/lodash/array.js deleted file mode 100644 index af688d3..0000000 --- a/node_modules/lodash/array.js +++ /dev/null @@ -1,67 +0,0 @@ -module.exports = { - 'chunk': require('./chunk'), - 'compact': require('./compact'), - 'concat': require('./concat'), - 'difference': require('./difference'), - 'differenceBy': require('./differenceBy'), - 'differenceWith': require('./differenceWith'), - 'drop': require('./drop'), - 'dropRight': require('./dropRight'), - 'dropRightWhile': require('./dropRightWhile'), - 'dropWhile': require('./dropWhile'), - 'fill': require('./fill'), - 'findIndex': require('./findIndex'), - 'findLastIndex': require('./findLastIndex'), - 'first': require('./first'), - 'flatten': require('./flatten'), - 'flattenDeep': require('./flattenDeep'), - 'flattenDepth': require('./flattenDepth'), - 'fromPairs': require('./fromPairs'), - 'head': require('./head'), - 'indexOf': require('./indexOf'), - 'initial': require('./initial'), - 'intersection': require('./intersection'), - 'intersectionBy': require('./intersectionBy'), - 'intersectionWith': require('./intersectionWith'), - 'join': require('./join'), - 'last': require('./last'), - 'lastIndexOf': require('./lastIndexOf'), - 'nth': require('./nth'), - 'pull': require('./pull'), - 'pullAll': require('./pullAll'), - 'pullAllBy': require('./pullAllBy'), - 'pullAllWith': require('./pullAllWith'), - 'pullAt': require('./pullAt'), - 'remove': require('./remove'), - 'reverse': require('./reverse'), - 'slice': require('./slice'), - 'sortedIndex': require('./sortedIndex'), - 'sortedIndexBy': require('./sortedIndexBy'), - 'sortedIndexOf': require('./sortedIndexOf'), - 'sortedLastIndex': require('./sortedLastIndex'), - 'sortedLastIndexBy': require('./sortedLastIndexBy'), - 'sortedLastIndexOf': require('./sortedLastIndexOf'), - 'sortedUniq': require('./sortedUniq'), - 'sortedUniqBy': require('./sortedUniqBy'), - 'tail': require('./tail'), - 'take': require('./take'), - 'takeRight': require('./takeRight'), - 'takeRightWhile': require('./takeRightWhile'), - 'takeWhile': require('./takeWhile'), - 'union': require('./union'), - 'unionBy': require('./unionBy'), - 'unionWith': require('./unionWith'), - 'uniq': require('./uniq'), - 'uniqBy': require('./uniqBy'), - 'uniqWith': require('./uniqWith'), - 'unzip': require('./unzip'), - 'unzipWith': require('./unzipWith'), - 'without': require('./without'), - 'xor': require('./xor'), - 'xorBy': require('./xorBy'), - 'xorWith': require('./xorWith'), - 'zip': require('./zip'), - 'zipObject': require('./zipObject'), - 'zipObjectDeep': require('./zipObjectDeep'), - 'zipWith': require('./zipWith') -}; diff --git a/node_modules/lodash/ary.js b/node_modules/lodash/ary.js deleted file mode 100644 index c743b06..0000000 --- a/node_modules/lodash/ary.js +++ /dev/null @@ -1,29 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var ARY_FLAG = 128; - -/** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ -function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); -} - -module.exports = ary; diff --git a/node_modules/lodash/assign.js b/node_modules/lodash/assign.js deleted file mode 100644 index 909db26..0000000 --- a/node_modules/lodash/assign.js +++ /dev/null @@ -1,58 +0,0 @@ -var assignValue = require('./_assignValue'), - copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - isArrayLike = require('./isArrayLike'), - isPrototype = require('./_isPrototype'), - keys = require('./keys'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ -var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } -}); - -module.exports = assign; diff --git a/node_modules/lodash/assignIn.js b/node_modules/lodash/assignIn.js deleted file mode 100644 index e663473..0000000 --- a/node_modules/lodash/assignIn.js +++ /dev/null @@ -1,40 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ -var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); -}); - -module.exports = assignIn; diff --git a/node_modules/lodash/assignInWith.js b/node_modules/lodash/assignInWith.js deleted file mode 100644 index 68fcc0b..0000000 --- a/node_modules/lodash/assignInWith.js +++ /dev/null @@ -1,38 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); -}); - -module.exports = assignInWith; diff --git a/node_modules/lodash/assignWith.js b/node_modules/lodash/assignWith.js deleted file mode 100644 index 7dc6c76..0000000 --- a/node_modules/lodash/assignWith.js +++ /dev/null @@ -1,37 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keys = require('./keys'); - -/** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); -}); - -module.exports = assignWith; diff --git a/node_modules/lodash/at.js b/node_modules/lodash/at.js deleted file mode 100644 index 05e9482..0000000 --- a/node_modules/lodash/at.js +++ /dev/null @@ -1,23 +0,0 @@ -var baseAt = require('./_baseAt'), - flatRest = require('./_flatRest'); - -/** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths of elements to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ -var at = flatRest(baseAt); - -module.exports = at; diff --git a/node_modules/lodash/attempt.js b/node_modules/lodash/attempt.js deleted file mode 100644 index 624d015..0000000 --- a/node_modules/lodash/attempt.js +++ /dev/null @@ -1,35 +0,0 @@ -var apply = require('./_apply'), - baseRest = require('./_baseRest'), - isError = require('./isError'); - -/** - * Attempts to invoke `func`, returning either the result or the caught error - * object. Any additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Function} func The function to attempt. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {*} Returns the `func` result or error object. - * @example - * - * // Avoid throwing errors for invalid selectors. - * var elements = _.attempt(function(selector) { - * return document.querySelectorAll(selector); - * }, '>_>'); - * - * if (_.isError(elements)) { - * elements = []; - * } - */ -var attempt = baseRest(function(func, args) { - try { - return apply(func, undefined, args); - } catch (e) { - return isError(e) ? e : new Error(e); - } -}); - -module.exports = attempt; diff --git a/node_modules/lodash/before.js b/node_modules/lodash/before.js deleted file mode 100644 index a3e0a16..0000000 --- a/node_modules/lodash/before.js +++ /dev/null @@ -1,40 +0,0 @@ -var toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ -function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; -} - -module.exports = before; diff --git a/node_modules/lodash/bind.js b/node_modules/lodash/bind.js deleted file mode 100644 index eac913b..0000000 --- a/node_modules/lodash/bind.js +++ /dev/null @@ -1,57 +0,0 @@ -var baseRest = require('./_baseRest'), - createWrap = require('./_createWrap'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'); - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1, - PARTIAL_FLAG = 32; - -/** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ -var bind = baseRest(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); -}); - -// Assign default placeholders. -bind.placeholder = {}; - -module.exports = bind; diff --git a/node_modules/lodash/bindAll.js b/node_modules/lodash/bindAll.js deleted file mode 100644 index a35706d..0000000 --- a/node_modules/lodash/bindAll.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseAssignValue = require('./_baseAssignValue'), - bind = require('./bind'), - flatRest = require('./_flatRest'), - toKey = require('./_toKey'); - -/** - * Binds methods of an object to the object itself, overwriting the existing - * method. - * - * **Note:** This method doesn't set the "length" property of bound functions. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Object} object The object to bind and assign the bound methods to. - * @param {...(string|string[])} methodNames The object method names to bind. - * @returns {Object} Returns `object`. - * @example - * - * var view = { - * 'label': 'docs', - * 'click': function() { - * console.log('clicked ' + this.label); - * } - * }; - * - * _.bindAll(view, ['click']); - * jQuery(element).on('click', view.click); - * // => Logs 'clicked docs' when clicked. - */ -var bindAll = flatRest(function(object, methodNames) { - arrayEach(methodNames, function(key) { - key = toKey(key); - baseAssignValue(object, key, bind(object[key], object)); - }); - return object; -}); - -module.exports = bindAll; diff --git a/node_modules/lodash/bindKey.js b/node_modules/lodash/bindKey.js deleted file mode 100644 index 8824440..0000000 --- a/node_modules/lodash/bindKey.js +++ /dev/null @@ -1,68 +0,0 @@ -var baseRest = require('./_baseRest'), - createWrap = require('./_createWrap'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'); - -/** Used to compose bitmasks for function metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - PARTIAL_FLAG = 32; - -/** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ -var bindKey = baseRest(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); -}); - -// Assign default placeholders. -bindKey.placeholder = {}; - -module.exports = bindKey; diff --git a/node_modules/lodash/camelCase.js b/node_modules/lodash/camelCase.js deleted file mode 100644 index d7390de..0000000 --- a/node_modules/lodash/camelCase.js +++ /dev/null @@ -1,29 +0,0 @@ -var capitalize = require('./capitalize'), - createCompounder = require('./_createCompounder'); - -/** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ -var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); -}); - -module.exports = camelCase; diff --git a/node_modules/lodash/capitalize.js b/node_modules/lodash/capitalize.js deleted file mode 100644 index 3e1600e..0000000 --- a/node_modules/lodash/capitalize.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('./toString'), - upperFirst = require('./upperFirst'); - -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} - -module.exports = capitalize; diff --git a/node_modules/lodash/castArray.js b/node_modules/lodash/castArray.js deleted file mode 100644 index e470bdb..0000000 --- a/node_modules/lodash/castArray.js +++ /dev/null @@ -1,44 +0,0 @@ -var isArray = require('./isArray'); - -/** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ -function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; -} - -module.exports = castArray; diff --git a/node_modules/lodash/ceil.js b/node_modules/lodash/ceil.js deleted file mode 100644 index 56c8722..0000000 --- a/node_modules/lodash/ceil.js +++ /dev/null @@ -1,26 +0,0 @@ -var createRound = require('./_createRound'); - -/** - * Computes `number` rounded up to `precision`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Math - * @param {number} number The number to round up. - * @param {number} [precision=0] The precision to round up to. - * @returns {number} Returns the rounded up number. - * @example - * - * _.ceil(4.006); - * // => 5 - * - * _.ceil(6.004, 2); - * // => 6.01 - * - * _.ceil(6040, -2); - * // => 6100 - */ -var ceil = createRound('ceil'); - -module.exports = ceil; diff --git a/node_modules/lodash/chain.js b/node_modules/lodash/chain.js deleted file mode 100644 index f6cd647..0000000 --- a/node_modules/lodash/chain.js +++ /dev/null @@ -1,38 +0,0 @@ -var lodash = require('./wrapperLodash'); - -/** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ -function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; -} - -module.exports = chain; diff --git a/node_modules/lodash/chunk.js b/node_modules/lodash/chunk.js deleted file mode 100644 index 356510f..0000000 --- a/node_modules/lodash/chunk.js +++ /dev/null @@ -1,50 +0,0 @@ -var baseSlice = require('./_baseSlice'), - isIterateeCall = require('./_isIterateeCall'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ -function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array ? array.length : 0; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; -} - -module.exports = chunk; diff --git a/node_modules/lodash/clamp.js b/node_modules/lodash/clamp.js deleted file mode 100644 index 91a72c9..0000000 --- a/node_modules/lodash/clamp.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseClamp = require('./_baseClamp'), - toNumber = require('./toNumber'); - -/** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ -function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); -} - -module.exports = clamp; diff --git a/node_modules/lodash/clone.js b/node_modules/lodash/clone.js deleted file mode 100644 index d02395e..0000000 --- a/node_modules/lodash/clone.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return baseClone(value, false, true); -} - -module.exports = clone; diff --git a/node_modules/lodash/cloneDeep.js b/node_modules/lodash/cloneDeep.js deleted file mode 100644 index 94efce1..0000000 --- a/node_modules/lodash/cloneDeep.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return baseClone(value, true, true); -} - -module.exports = cloneDeep; diff --git a/node_modules/lodash/cloneDeepWith.js b/node_modules/lodash/cloneDeepWith.js deleted file mode 100644 index 4a345fb..0000000 --- a/node_modules/lodash/cloneDeepWith.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ -function cloneDeepWith(value, customizer) { - return baseClone(value, true, true, customizer); -} - -module.exports = cloneDeepWith; diff --git a/node_modules/lodash/cloneWith.js b/node_modules/lodash/cloneWith.js deleted file mode 100644 index c85f573..0000000 --- a/node_modules/lodash/cloneWith.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ -function cloneWith(value, customizer) { - return baseClone(value, false, true, customizer); -} - -module.exports = cloneWith; diff --git a/node_modules/lodash/collection.js b/node_modules/lodash/collection.js deleted file mode 100644 index 77fe837..0000000 --- a/node_modules/lodash/collection.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = { - 'countBy': require('./countBy'), - 'each': require('./each'), - 'eachRight': require('./eachRight'), - 'every': require('./every'), - 'filter': require('./filter'), - 'find': require('./find'), - 'findLast': require('./findLast'), - 'flatMap': require('./flatMap'), - 'flatMapDeep': require('./flatMapDeep'), - 'flatMapDepth': require('./flatMapDepth'), - 'forEach': require('./forEach'), - 'forEachRight': require('./forEachRight'), - 'groupBy': require('./groupBy'), - 'includes': require('./includes'), - 'invokeMap': require('./invokeMap'), - 'keyBy': require('./keyBy'), - 'map': require('./map'), - 'orderBy': require('./orderBy'), - 'partition': require('./partition'), - 'reduce': require('./reduce'), - 'reduceRight': require('./reduceRight'), - 'reject': require('./reject'), - 'sample': require('./sample'), - 'sampleSize': require('./sampleSize'), - 'shuffle': require('./shuffle'), - 'size': require('./size'), - 'some': require('./some'), - 'sortBy': require('./sortBy') -}; diff --git a/node_modules/lodash/commit.js b/node_modules/lodash/commit.js deleted file mode 100644 index fe4db71..0000000 --- a/node_modules/lodash/commit.js +++ /dev/null @@ -1,33 +0,0 @@ -var LodashWrapper = require('./_LodashWrapper'); - -/** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ -function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); -} - -module.exports = wrapperCommit; diff --git a/node_modules/lodash/compact.js b/node_modules/lodash/compact.js deleted file mode 100644 index 790f311..0000000 --- a/node_modules/lodash/compact.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ -function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = compact; diff --git a/node_modules/lodash/concat.js b/node_modules/lodash/concat.js deleted file mode 100644 index 1da48a4..0000000 --- a/node_modules/lodash/concat.js +++ /dev/null @@ -1,43 +0,0 @@ -var arrayPush = require('./_arrayPush'), - baseFlatten = require('./_baseFlatten'), - copyArray = require('./_copyArray'), - isArray = require('./isArray'); - -/** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ -function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); -} - -module.exports = concat; diff --git a/node_modules/lodash/cond.js b/node_modules/lodash/cond.js deleted file mode 100644 index 91515c1..0000000 --- a/node_modules/lodash/cond.js +++ /dev/null @@ -1,60 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that iterates over `pairs` and invokes the corresponding - * function of the first predicate to return truthy. The predicate-function - * pairs are invoked with the `this` binding and arguments of the created - * function. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Array} pairs The predicate-function pairs. - * @returns {Function} Returns the new composite function. - * @example - * - * var func = _.cond([ - * [_.matches({ 'a': 1 }), _.constant('matches A')], - * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], - * [_.stubTrue, _.constant('no match')] - * ]); - * - * func({ 'a': 1, 'b': 2 }); - * // => 'matches A' - * - * func({ 'a': 0, 'b': 1 }); - * // => 'matches B' - * - * func({ 'a': '1', 'b': '2' }); - * // => 'no match' - */ -function cond(pairs) { - var length = pairs ? pairs.length : 0, - toIteratee = baseIteratee; - - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); - - return baseRest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); -} - -module.exports = cond; diff --git a/node_modules/lodash/conforms.js b/node_modules/lodash/conforms.js deleted file mode 100644 index e4c537e..0000000 --- a/node_modules/lodash/conforms.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseClone = require('./_baseClone'), - baseConforms = require('./_baseConforms'); - -/** - * Creates a function that invokes the predicate properties of `source` with - * the corresponding property values of a given object, returning `true` if - * all predicates return truthy, else `false`. - * - * **Note:** The created function is equivalent to `_.conformsTo` with - * `source` partially applied. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - * @example - * - * var objects = [ - * { 'a': 2, 'b': 1 }, - * { 'a': 1, 'b': 2 } - * ]; - * - * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); - * // => [{ 'a': 1, 'b': 2 }] - */ -function conforms(source) { - return baseConforms(baseClone(source, true)); -} - -module.exports = conforms; diff --git a/node_modules/lodash/conformsTo.js b/node_modules/lodash/conformsTo.js deleted file mode 100644 index b8a93eb..0000000 --- a/node_modules/lodash/conformsTo.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseConformsTo = require('./_baseConformsTo'), - keys = require('./keys'); - -/** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ -function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); -} - -module.exports = conformsTo; diff --git a/node_modules/lodash/constant.js b/node_modules/lodash/constant.js deleted file mode 100644 index 655ece3..0000000 --- a/node_modules/lodash/constant.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -module.exports = constant; diff --git a/node_modules/lodash/core.js b/node_modules/lodash/core.js deleted file mode 100644 index c891e78..0000000 --- a/node_modules/lodash/core.js +++ /dev/null @@ -1,3831 +0,0 @@ -/** - * @license - * lodash (Custom Build) - * Build: `lodash core -o ./dist/lodash.core.js` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.16.4'; - - /** Error message constants. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to compose bitmasks for function metadata. */ - var BIND_FLAG = 1, - PARTIAL_FLAG = 32; - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - numberTag = '[object Number]', - objectTag = '[object Object]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - stringTag = '[object String]'; - - /** Used to match HTML entities and HTML characters. */ - var reUnescapedHtml = /[&<>"']/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /*--------------------------------------------------------------------------*/ - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - array.push.apply(array, values); - return array; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return baseMap(props, function(key) { - return object[key]; - }); - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /*--------------------------------------------------------------------------*/ - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Built-in value references. */ - var objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsFinite = root.isFinite, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array of at least `200` elements - * and any iteratees accept only one argument. The heuristic for whether a - * section qualifies for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - return value instanceof LodashWrapper - ? value - : new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - } - - LodashWrapper.prototype = baseCreate(lodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - object[key] = value; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !false) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return baseFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - var baseIsArguments = noop; - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = objectToString.call(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = objectToString.call(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - stack || (stack = []); - var objStack = find(stack, function(entry) { - return entry[0] == object; - }); - var othStack = find(stack, function(entry) { - return entry[0] == other; - }); - if (objStack && othStack) { - return objStack[1] == other; - } - stack.push([object, other]); - stack.push([other, object]); - if (isSameTag && !objIsObj) { - var result = (objIsArr) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - stack.pop(); - return result; - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - var result = equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - stack.pop(); - return result; - } - } - if (!isSameTag) { - return false; - } - var result = equalObjects(object, other, equalFunc, customizer, bitmask, stack); - stack.pop(); - return result; - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(func) { - if (typeof func == 'function') { - return func; - } - if (func == null) { - return identity; - } - return (typeof func == 'object' ? baseMatches : baseProperty)(func); - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var props = nativeKeys(source); - return function(object) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length]; - if (!(key in object && - baseIsEqual(source[key], object[key], undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG) - )) { - return false; - } - } - return true; - }; - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return reduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source) { - return baseSlice(source, 0, source.length); - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - return reduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = false; - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = false; - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var isBind = bitmask & BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return fn.apply(isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? [] : undefined; - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - var compared; - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!baseSome(other, function(othValue, othIndex) { - if (!indexOf(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var result = true; - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - var compared; - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value); - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return func.apply(this, otherArgs); - }; - } - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = identity; - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - var toKey = String; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - return baseFilter(array, Boolean); - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (typeof fromIndex == 'number') { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; - } else { - fromIndex = 0; - } - var index = (fromIndex || 0) - 1, - isReflexive = value === value; - - while (++index < length) { - var other = array[index]; - if ((isReflexive ? other === value : other !== other)) { - return index; - } - } - return -1; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array ? array.length : 0; - start = start == null ? 0 : +start; - end = end === undefined ? length : +end; - return length ? baseSlice(array, start, end) : []; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseEvery(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - return baseFilter(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - return baseEach(collection, baseIteratee(iteratee)); - } - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - return baseMap(collection, baseIteratee(iteratee)); - } - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - collection = isArrayLike(collection) ? collection : nativeKeys(collection); - return collection.length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseSome(collection, baseIteratee(predicate)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - */ - function sortBy(collection, iteratee) { - var index = 0; - iteratee = baseIteratee(iteratee); - - return baseMap(baseMap(collection, function(value, key, collection) { - return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; - }).sort(function(object, other) { - return compareAscending(object.criteria, other.criteria) || (object.index - other.index); - }), baseProperty('value')); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - return createPartial(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials); - }); - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - if (!isObject(value)) { - return value; - } - return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); - } - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = baseIsDate; - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || isString(value) || - isFunction(value.splice) || isArguments(value))) { - return !value.length; - } - return !nativeKeys(value).length; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag || tag == proxyTag; - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = baseIsRegExp; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!isArrayLike(value)) { - return values(value); - } - return value.length ? copyArray(value) : []; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - var toInteger = Number; - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - var toNumber = Number; - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - if (typeof value == 'string') { - return value; - } - return value == null ? '' : (value + ''); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - copyObject(source, nativeKeys(source), object); - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, nativeKeysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? assign(result, properties) : result; - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(args) { - args.push(undefined, assignInDefaults); - return assignInWith.apply(undefined, args); - }); - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasOwnProperty.call(object, path); - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - var keys = nativeKeys; - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - var keysIn = nativeKeysIn; - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, props) { - return object == null ? {} : basePick(object, baseMap(props, toKey)); - }); - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - var value = object == null ? undefined : object[path]; - if (value === undefined) { - value = defaultValue; - } - return isFunction(value) ? value.call(object) : value; - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object ? baseValues(object, keys(object)) : []; - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /*------------------------------------------------------------------------*/ - - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ - var iteratee = baseIteratee; - - /** - * Creates a function that performs a partial deep comparison between a given - * object and `source`, returning `true` if the given object has equivalent - * property values, else `false`. - * - * **Note:** The created function is equivalent to `_.isMatch` with `source` - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - * @example - * - * var objects = [ - * { 'a': 1, 'b': 2, 'c': 3 }, - * { 'a': 4, 'b': 5, 'c': 6 } - * ]; - * - * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); - * // => [{ 'a': 4, 'b': 5, 'c': 6 }] - */ - function matches(source) { - return baseMatches(assign({}, source)); - } - - /** - * Adds all own enumerable string keyed function properties of a source - * object to the destination object. If `object` is a function, then methods - * are added to its prototype as well. - * - * **Note:** Use `_.runInContext` to create a pristine `lodash` function to - * avoid conflicts caused by modifying the original. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Function|Object} [object=lodash] The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.chain=true] Specify whether mixins are chainable. - * @returns {Function|Object} Returns `object`. - * @example - * - * function vowels(string) { - * return _.filter(string, function(v) { - * return /[aeiou]/i.test(v); - * }); - * } - * - * _.mixin({ 'vowels': vowels }); - * _.vowels('fred'); - * // => ['e'] - * - * _('fred').vowels().value(); - * // => ['e'] - * - * _.mixin({ 'vowels': vowels }, { 'chain': false }); - * _('fred').vowels(); - * // => ['e'] - */ - function mixin(object, source, options) { - var props = keys(source), - methodNames = baseFunctions(source, props); - - if (options == null && - !(isObject(source) && (methodNames.length || !props.length))) { - options = source; - source = object; - object = this; - methodNames = baseFunctions(source, keys(source)); - } - var chain = !(isObject(options) && 'chain' in options) || !!options.chain, - isFunc = isFunction(object); - - baseEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), - actions = result.__actions__ = copyArray(this.__actions__); - - actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); - result.__chain__ = chainAll; - return result; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); - - return object; - } - - /** - * Reverts the `_` variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - - /** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ - function noop() { - // No operation performed. - } - - /** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - - /*------------------------------------------------------------------------*/ - - /** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ - function max(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseGt) - : undefined; - } - - /** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ - function min(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseLt) - : undefined; - } - - /*------------------------------------------------------------------------*/ - - // Add methods that return wrapped values in chain sequences. - lodash.assignIn = assignIn; - lodash.before = before; - lodash.bind = bind; - lodash.chain = chain; - lodash.compact = compact; - lodash.concat = concat; - lodash.create = create; - lodash.defaults = defaults; - lodash.defer = defer; - lodash.delay = delay; - lodash.filter = filter; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.iteratee = iteratee; - lodash.keys = keys; - lodash.map = map; - lodash.matches = matches; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.once = once; - lodash.pick = pick; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.tap = tap; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.values = values; - - // Add aliases. - lodash.extend = assignIn; - - // Add methods to `lodash.prototype`. - mixin(lodash, lodash); - - /*------------------------------------------------------------------------*/ - - // Add methods that return unwrapped values in chain sequences. - lodash.clone = clone; - lodash.escape = escape; - lodash.every = every; - lodash.find = find; - lodash.forEach = forEach; - lodash.has = has; - lodash.head = head; - lodash.identity = identity; - lodash.indexOf = indexOf; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isBoolean = isBoolean; - lodash.isDate = isDate; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isFinite = isFinite; - lodash.isFunction = isFunction; - lodash.isNaN = isNaN; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isRegExp = isRegExp; - lodash.isString = isString; - lodash.isUndefined = isUndefined; - lodash.last = last; - lodash.max = max; - lodash.min = min; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.reduce = reduce; - lodash.result = result; - lodash.size = size; - lodash.some = some; - lodash.uniqueId = uniqueId; - - // Add aliases. - lodash.each = forEach; - lodash.first = head; - - mixin(lodash, (function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }()), { 'chain': false }); - - /*------------------------------------------------------------------------*/ - - /** - * The semantic version number. - * - * @static - * @memberOf _ - * @type {string} - */ - lodash.VERSION = VERSION; - - // Add `Array` methods to `lodash.prototype`. - baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { - var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], - chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); - - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value) { - return func.apply(isArray(value) ? value : [], args); - }); - }; - }); - - // Add chain sequence methods to the `lodash` wrapper. - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - - /*--------------------------------------------------------------------------*/ - - // Some AMD build optimizers, like r.js, check for condition patterns like: - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { - // Expose Lodash on the global object to prevent errors when Lodash is - // loaded by a script tag in the presence of an AMD loader. - // See http://requirejs.org/docs/errors.html#mismatch for more details. - // Use `_.noConflict` to remove Lodash from the global object. - root._ = lodash; - - // Define as an anonymous module so, through path mapping, it can be - // referenced as the "underscore" module. - define(function() { - return lodash; - }); - } - // Check for `exports` after `define` in case a build optimizer adds it. - else if (freeModule) { - // Export for Node.js. - (freeModule.exports = lodash)._ = lodash; - // Export for CommonJS support. - freeExports._ = lodash; - } - else { - // Export to the global object. - root._ = lodash; - } -}.call(this)); diff --git a/node_modules/lodash/core.min.js b/node_modules/lodash/core.min.js deleted file mode 100644 index c1fb1cd..0000000 --- a/node_modules/lodash/core.min.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @license - * lodash (Custom Build) /license | Underscore.js 1.8.3 underscorejs.org/LICENSE - * Build: `lodash core -o ./dist/lodash.core.js` - */ -;(function(){function n(n){return K(n)&&pn.call(n,"callee")&&!bn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?nn:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return d(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r,e){return n===nn||M(n,ln[r])&&!pn.call(e,r)?t:n}function f(n,t,r){ -if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(nn,r)},t)}function a(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function l(n,t,r){for(var e=-1,u=n.length;++et}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!K(t)?n!==n&&t!==t:g(n,t,b,r,e,u))}function g(n,t,r,e,u,o){var i=Sn(n),c=Sn(t),f="[object Array]",a="[object Array]";i||(f=hn.call(n),f="[object Arguments]"==f?"[object Object]":f),c||(a=hn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]); -var p=En(o,function(t){return t[0]==n}),s=En(o,function(n){return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=B(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=M(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 2&u||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o), -o.pop(),r):(i=i?n.value():n,f=f?t.value():t,r=r(i,f,e,u,o),o.pop(),r)}function _(n){return typeof n=="function"?n:null==n?Y:(typeof n=="object"?m:r)(n)}function j(n,t){return nt&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++ei))return false;for(var c=-1,f=true,a=1&u?[]:nn;++cr?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++rarguments.length,mn); -}function J(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Tn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=nn),r}}function M(n,t){return n===t||n!==n&&t!==t}function U(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1=t),t&&!V(n)}function V(n){return n=H(n)?hn.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n||"[object Proxy]"==n}function H(n){var t=typeof n;return null!=n&&("object"==t||"function"==t); -}function K(n){return null!=n&&typeof n=="object"}function L(n){return typeof n=="number"||K(n)&&"[object Number]"==hn.call(n)}function Q(n){return typeof n=="string"||!Sn(n)&&K(n)&&"[object String]"==hn.call(n)}function W(n){return typeof n=="string"?n:null==n?"":n+""}function X(n){return n?u(n,qn(n)):[]}function Y(n){return n}function Z(n,r,e){var u=qn(r),o=v(r,u);null!=e||H(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=v(r,qn(r)));var i=!(H(e)&&"chain"in e&&!e.chain),c=V(n);return mn(o,function(e){ -var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=E(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var nn,tn=1/0,rn=/[&<>"']/g,en=RegExp(rn.source),un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){ -return function(t){return null==n?nn:n[t]}}({"&":"&","<":"<",">":">",'"':""","'":"'"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,yn=Object.create,bn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return H(t)?yn?yn(t):(n.prototype=t,t=new n,n.prototype=nn,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i; -var mn=function(n,t){return function(r,e){if(null==r)return r;if(!U(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++or&&(r=jn(e+r,0));n:{for(t=_(t),e=n.length,r+=-1;++re||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ -var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } -}); - -module.exports = countBy; diff --git a/node_modules/lodash/create.js b/node_modules/lodash/create.js deleted file mode 100644 index a99067f..0000000 --- a/node_modules/lodash/create.js +++ /dev/null @@ -1,43 +0,0 @@ -var baseAssign = require('./_baseAssign'), - baseCreate = require('./_baseCreate'); - -/** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ -function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? baseAssign(result, properties) : result; -} - -module.exports = create; diff --git a/node_modules/lodash/curry.js b/node_modules/lodash/curry.js deleted file mode 100644 index ce3910b..0000000 --- a/node_modules/lodash/curry.js +++ /dev/null @@ -1,57 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var CURRY_FLAG = 8; - -/** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ -function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; -} - -// Assign default placeholders. -curry.placeholder = {}; - -module.exports = curry; diff --git a/node_modules/lodash/curryRight.js b/node_modules/lodash/curryRight.js deleted file mode 100644 index 2b7691f..0000000 --- a/node_modules/lodash/curryRight.js +++ /dev/null @@ -1,54 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var CURRY_RIGHT_FLAG = 16; - -/** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ -function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; -} - -// Assign default placeholders. -curryRight.placeholder = {}; - -module.exports = curryRight; diff --git a/node_modules/lodash/date.js b/node_modules/lodash/date.js deleted file mode 100644 index cbf5b41..0000000 --- a/node_modules/lodash/date.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - 'now': require('./now') -}; diff --git a/node_modules/lodash/debounce.js b/node_modules/lodash/debounce.js deleted file mode 100644 index 04d7dfd..0000000 --- a/node_modules/lodash/debounce.js +++ /dev/null @@ -1,188 +0,0 @@ -var isObject = require('./isObject'), - now = require('./now'), - toNumber = require('./toNumber'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ -function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; - - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; -} - -module.exports = debounce; diff --git a/node_modules/lodash/deburr.js b/node_modules/lodash/deburr.js deleted file mode 100644 index bc08b05..0000000 --- a/node_modules/lodash/deburr.js +++ /dev/null @@ -1,43 +0,0 @@ -var deburrLetter = require('./_deburrLetter'), - toString = require('./toString'); - -/** Used to match Latin Unicode letters (excluding mathematical operators). */ -var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - -/** Used to compose unicode character classes. */ -var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0'; - -/** Used to compose unicode capture groups. */ -var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']'; - -/** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ -var reComboMark = RegExp(rsCombo, 'g'); - -/** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ -function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); -} - -module.exports = deburr; diff --git a/node_modules/lodash/defaultTo.js b/node_modules/lodash/defaultTo.js deleted file mode 100644 index 5b33359..0000000 --- a/node_modules/lodash/defaultTo.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Checks `value` to determine whether a default value should be returned in - * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, - * or `undefined`. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Util - * @param {*} value The value to check. - * @param {*} defaultValue The default value. - * @returns {*} Returns the resolved value. - * @example - * - * _.defaultTo(1, 10); - * // => 1 - * - * _.defaultTo(undefined, 10); - * // => 10 - */ -function defaultTo(value, defaultValue) { - return (value == null || value !== value) ? defaultValue : value; -} - -module.exports = defaultTo; diff --git a/node_modules/lodash/defaults.js b/node_modules/lodash/defaults.js deleted file mode 100644 index 5333b42..0000000 --- a/node_modules/lodash/defaults.js +++ /dev/null @@ -1,32 +0,0 @@ -var apply = require('./_apply'), - assignInDefaults = require('./_assignInDefaults'), - assignInWith = require('./assignInWith'), - baseRest = require('./_baseRest'); - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = baseRest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); -}); - -module.exports = defaults; diff --git a/node_modules/lodash/defaultsDeep.js b/node_modules/lodash/defaultsDeep.js deleted file mode 100644 index 41680ed..0000000 --- a/node_modules/lodash/defaultsDeep.js +++ /dev/null @@ -1,30 +0,0 @@ -var apply = require('./_apply'), - baseRest = require('./_baseRest'), - mergeDefaults = require('./_mergeDefaults'), - mergeWith = require('./mergeWith'); - -/** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ -var defaultsDeep = baseRest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); -}); - -module.exports = defaultsDeep; diff --git a/node_modules/lodash/defer.js b/node_modules/lodash/defer.js deleted file mode 100644 index f6d6c6f..0000000 --- a/node_modules/lodash/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseDelay = require('./_baseDelay'), - baseRest = require('./_baseRest'); - -/** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ -var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); -}); - -module.exports = defer; diff --git a/node_modules/lodash/delay.js b/node_modules/lodash/delay.js deleted file mode 100644 index bd55479..0000000 --- a/node_modules/lodash/delay.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseDelay = require('./_baseDelay'), - baseRest = require('./_baseRest'), - toNumber = require('./toNumber'); - -/** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ -var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); -}); - -module.exports = delay; diff --git a/node_modules/lodash/difference.js b/node_modules/lodash/difference.js deleted file mode 100644 index fa28bb3..0000000 --- a/node_modules/lodash/difference.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'); - -/** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ -var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; -}); - -module.exports = difference; diff --git a/node_modules/lodash/differenceBy.js b/node_modules/lodash/differenceBy.js deleted file mode 100644 index 2cd63e7..0000000 --- a/node_modules/lodash/differenceBy.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ -var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) - : []; -}); - -module.exports = differenceBy; diff --git a/node_modules/lodash/differenceWith.js b/node_modules/lodash/differenceWith.js deleted file mode 100644 index c0233f4..0000000 --- a/node_modules/lodash/differenceWith.js +++ /dev/null @@ -1,40 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ -var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; -}); - -module.exports = differenceWith; diff --git a/node_modules/lodash/divide.js b/node_modules/lodash/divide.js deleted file mode 100644 index 8cae0cd..0000000 --- a/node_modules/lodash/divide.js +++ /dev/null @@ -1,22 +0,0 @@ -var createMathOperation = require('./_createMathOperation'); - -/** - * Divide two numbers. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Math - * @param {number} dividend The first number in a division. - * @param {number} divisor The second number in a division. - * @returns {number} Returns the quotient. - * @example - * - * _.divide(6, 4); - * // => 1.5 - */ -var divide = createMathOperation(function(dividend, divisor) { - return dividend / divisor; -}, 1); - -module.exports = divide; diff --git a/node_modules/lodash/drop.js b/node_modules/lodash/drop.js deleted file mode 100644 index 6124ef7..0000000 --- a/node_modules/lodash/drop.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); -} - -module.exports = drop; diff --git a/node_modules/lodash/dropRight.js b/node_modules/lodash/dropRight.js deleted file mode 100644 index 8aa3576..0000000 --- a/node_modules/lodash/dropRight.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); -} - -module.exports = dropRight; diff --git a/node_modules/lodash/dropRightWhile.js b/node_modules/lodash/dropRightWhile.js deleted file mode 100644 index 9ad36a0..0000000 --- a/node_modules/lodash/dropRightWhile.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true, true) - : []; -} - -module.exports = dropRightWhile; diff --git a/node_modules/lodash/dropWhile.js b/node_modules/lodash/dropWhile.js deleted file mode 100644 index f89444e..0000000 --- a/node_modules/lodash/dropWhile.js +++ /dev/null @@ -1,46 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true) - : []; -} - -module.exports = dropWhile; diff --git a/node_modules/lodash/each.js b/node_modules/lodash/each.js deleted file mode 100644 index 8800f42..0000000 --- a/node_modules/lodash/each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEach'); diff --git a/node_modules/lodash/eachRight.js b/node_modules/lodash/eachRight.js deleted file mode 100644 index 3252b2a..0000000 --- a/node_modules/lodash/eachRight.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/endsWith.js b/node_modules/lodash/endsWith.js deleted file mode 100644 index 76fc866..0000000 --- a/node_modules/lodash/endsWith.js +++ /dev/null @@ -1,43 +0,0 @@ -var baseClamp = require('./_baseClamp'), - baseToString = require('./_baseToString'), - toInteger = require('./toInteger'), - toString = require('./toString'); - -/** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ -function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; -} - -module.exports = endsWith; diff --git a/node_modules/lodash/entries.js b/node_modules/lodash/entries.js deleted file mode 100644 index 7a88df2..0000000 --- a/node_modules/lodash/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairs'); diff --git a/node_modules/lodash/entriesIn.js b/node_modules/lodash/entriesIn.js deleted file mode 100644 index f6c6331..0000000 --- a/node_modules/lodash/entriesIn.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairsIn'); diff --git a/node_modules/lodash/eq.js b/node_modules/lodash/eq.js deleted file mode 100644 index a940688..0000000 --- a/node_modules/lodash/eq.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -module.exports = eq; diff --git a/node_modules/lodash/escape.js b/node_modules/lodash/escape.js deleted file mode 100644 index 9247e00..0000000 --- a/node_modules/lodash/escape.js +++ /dev/null @@ -1,43 +0,0 @@ -var escapeHtmlChar = require('./_escapeHtmlChar'), - toString = require('./toString'); - -/** Used to match HTML entities and HTML characters. */ -var reUnescapedHtml = /[&<>"']/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - -/** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ -function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; -} - -module.exports = escape; diff --git a/node_modules/lodash/escapeRegExp.js b/node_modules/lodash/escapeRegExp.js deleted file mode 100644 index 0a58c69..0000000 --- a/node_modules/lodash/escapeRegExp.js +++ /dev/null @@ -1,32 +0,0 @@ -var toString = require('./toString'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - -/** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ -function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; -} - -module.exports = escapeRegExp; diff --git a/node_modules/lodash/every.js b/node_modules/lodash/every.js deleted file mode 100644 index 114f40f..0000000 --- a/node_modules/lodash/every.js +++ /dev/null @@ -1,57 +0,0 @@ -var arrayEvery = require('./_arrayEvery'), - baseEvery = require('./_baseEvery'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ -function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = every; diff --git a/node_modules/lodash/extend.js b/node_modules/lodash/extend.js deleted file mode 100644 index e00166c..0000000 --- a/node_modules/lodash/extend.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignIn'); diff --git a/node_modules/lodash/extendWith.js b/node_modules/lodash/extendWith.js deleted file mode 100644 index dbdcb3b..0000000 --- a/node_modules/lodash/extendWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInWith'); diff --git a/node_modules/lodash/fill.js b/node_modules/lodash/fill.js deleted file mode 100644 index 5730b7d..0000000 --- a/node_modules/lodash/fill.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseFill = require('./_baseFill'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ -function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); -} - -module.exports = fill; diff --git a/node_modules/lodash/filter.js b/node_modules/lodash/filter.js deleted file mode 100644 index 3df977b..0000000 --- a/node_modules/lodash/filter.js +++ /dev/null @@ -1,49 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - baseFilter = require('./_baseFilter'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ -function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = filter; diff --git a/node_modules/lodash/find.js b/node_modules/lodash/find.js deleted file mode 100644 index b6d0950..0000000 --- a/node_modules/lodash/find.js +++ /dev/null @@ -1,43 +0,0 @@ -var createFind = require('./_createFind'), - findIndex = require('./findIndex'); - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = createFind(findIndex); - -module.exports = find; diff --git a/node_modules/lodash/findIndex.js b/node_modules/lodash/findIndex.js deleted file mode 100644 index 0b11d93..0000000 --- a/node_modules/lodash/findIndex.js +++ /dev/null @@ -1,56 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); -} - -module.exports = findIndex; diff --git a/node_modules/lodash/findKey.js b/node_modules/lodash/findKey.js deleted file mode 100644 index cac0248..0000000 --- a/node_modules/lodash/findKey.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseFindKey = require('./_baseFindKey'), - baseForOwn = require('./_baseForOwn'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ -function findKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); -} - -module.exports = findKey; diff --git a/node_modules/lodash/findLast.js b/node_modules/lodash/findLast.js deleted file mode 100644 index 3ce09f4..0000000 --- a/node_modules/lodash/findLast.js +++ /dev/null @@ -1,26 +0,0 @@ -var createFind = require('./_createFind'), - findLastIndex = require('./findLastIndex'); - -/** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ -var findLast = createFind(findLastIndex); - -module.exports = findLast; diff --git a/node_modules/lodash/findLastIndex.js b/node_modules/lodash/findLastIndex.js deleted file mode 100644 index 63e8770..0000000 --- a/node_modules/lodash/findLastIndex.js +++ /dev/null @@ -1,60 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ -function findLastIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index, true); -} - -module.exports = findLastIndex; diff --git a/node_modules/lodash/findLastKey.js b/node_modules/lodash/findLastKey.js deleted file mode 100644 index 66fb9fb..0000000 --- a/node_modules/lodash/findLastKey.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseFindKey = require('./_baseFindKey'), - baseForOwnRight = require('./_baseForOwnRight'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ -function findLastKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); -} - -module.exports = findLastKey; diff --git a/node_modules/lodash/first.js b/node_modules/lodash/first.js deleted file mode 100644 index 53f4ad1..0000000 --- a/node_modules/lodash/first.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./head'); diff --git a/node_modules/lodash/flatMap.js b/node_modules/lodash/flatMap.js deleted file mode 100644 index 8c5d832..0000000 --- a/node_modules/lodash/flatMap.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); -} - -module.exports = flatMap; diff --git a/node_modules/lodash/flatMapDeep.js b/node_modules/lodash/flatMapDeep.js deleted file mode 100644 index 9359882..0000000 --- a/node_modules/lodash/flatMapDeep.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); -} - -module.exports = flatMapDeep; diff --git a/node_modules/lodash/flatMapDepth.js b/node_modules/lodash/flatMapDepth.js deleted file mode 100644 index 2182bed..0000000 --- a/node_modules/lodash/flatMapDepth.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'), - toInteger = require('./toInteger'); - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ -function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); -} - -module.exports = flatMapDepth; diff --git a/node_modules/lodash/flatten.js b/node_modules/lodash/flatten.js deleted file mode 100644 index bd4f439..0000000 --- a/node_modules/lodash/flatten.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; -} - -module.exports = flatten; diff --git a/node_modules/lodash/flattenDeep.js b/node_modules/lodash/flattenDeep.js deleted file mode 100644 index c20c781..0000000 --- a/node_modules/lodash/flattenDeep.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ -function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; -} - -module.exports = flattenDeep; diff --git a/node_modules/lodash/flattenDepth.js b/node_modules/lodash/flattenDepth.js deleted file mode 100644 index a0f4b52..0000000 --- a/node_modules/lodash/flattenDepth.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - toInteger = require('./toInteger'); - -/** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ -function flattenDepth(array, depth) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); -} - -module.exports = flattenDepth; diff --git a/node_modules/lodash/flip.js b/node_modules/lodash/flip.js deleted file mode 100644 index 02e3fc2..0000000 --- a/node_modules/lodash/flip.js +++ /dev/null @@ -1,28 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var FLIP_FLAG = 512; - -/** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ -function flip(func) { - return createWrap(func, FLIP_FLAG); -} - -module.exports = flip; diff --git a/node_modules/lodash/floor.js b/node_modules/lodash/floor.js deleted file mode 100644 index ab6dfa2..0000000 --- a/node_modules/lodash/floor.js +++ /dev/null @@ -1,26 +0,0 @@ -var createRound = require('./_createRound'); - -/** - * Computes `number` rounded down to `precision`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Math - * @param {number} number The number to round down. - * @param {number} [precision=0] The precision to round down to. - * @returns {number} Returns the rounded down number. - * @example - * - * _.floor(4.006); - * // => 4 - * - * _.floor(0.046, 2); - * // => 0.04 - * - * _.floor(4060, -2); - * // => 4000 - */ -var floor = createRound('floor'); - -module.exports = floor; diff --git a/node_modules/lodash/flow.js b/node_modules/lodash/flow.js deleted file mode 100644 index 74b6b62..0000000 --- a/node_modules/lodash/flow.js +++ /dev/null @@ -1,27 +0,0 @@ -var createFlow = require('./_createFlow'); - -/** - * Creates a function that returns the result of invoking the given functions - * with the `this` binding of the created function, where each successive - * invocation is supplied the return value of the previous. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {...(Function|Function[])} [funcs] The functions to invoke. - * @returns {Function} Returns the new composite function. - * @see _.flowRight - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flow([_.add, square]); - * addSquare(1, 2); - * // => 9 - */ -var flow = createFlow(); - -module.exports = flow; diff --git a/node_modules/lodash/flowRight.js b/node_modules/lodash/flowRight.js deleted file mode 100644 index 1146141..0000000 --- a/node_modules/lodash/flowRight.js +++ /dev/null @@ -1,26 +0,0 @@ -var createFlow = require('./_createFlow'); - -/** - * This method is like `_.flow` except that it creates a function that - * invokes the given functions from right to left. - * - * @static - * @since 3.0.0 - * @memberOf _ - * @category Util - * @param {...(Function|Function[])} [funcs] The functions to invoke. - * @returns {Function} Returns the new composite function. - * @see _.flow - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flowRight([square, _.add]); - * addSquare(1, 2); - * // => 9 - */ -var flowRight = createFlow(true); - -module.exports = flowRight; diff --git a/node_modules/lodash/forEach.js b/node_modules/lodash/forEach.js deleted file mode 100644 index 0ce879f..0000000 --- a/node_modules/lodash/forEach.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseEach = require('./_baseEach'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, baseIteratee(iteratee, 3)); -} - -module.exports = forEach; diff --git a/node_modules/lodash/forEachRight.js b/node_modules/lodash/forEachRight.js deleted file mode 100644 index c5d6e06..0000000 --- a/node_modules/lodash/forEachRight.js +++ /dev/null @@ -1,31 +0,0 @@ -var arrayEachRight = require('./_arrayEachRight'), - baseEachRight = require('./_baseEachRight'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ -function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, baseIteratee(iteratee, 3)); -} - -module.exports = forEachRight; diff --git a/node_modules/lodash/forIn.js b/node_modules/lodash/forIn.js deleted file mode 100644 index 2e757da..0000000 --- a/node_modules/lodash/forIn.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseFor = require('./_baseFor'), - baseIteratee = require('./_baseIteratee'), - keysIn = require('./keysIn'); - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, baseIteratee(iteratee, 3), keysIn); -} - -module.exports = forIn; diff --git a/node_modules/lodash/forInRight.js b/node_modules/lodash/forInRight.js deleted file mode 100644 index a47d6bb..0000000 --- a/node_modules/lodash/forInRight.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseForRight = require('./_baseForRight'), - baseIteratee = require('./_baseIteratee'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ -function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, baseIteratee(iteratee, 3), keysIn); -} - -module.exports = forInRight; diff --git a/node_modules/lodash/forOwn.js b/node_modules/lodash/forOwn.js deleted file mode 100644 index 034c30b..0000000 --- a/node_modules/lodash/forOwn.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - baseIteratee = require('./_baseIteratee'); - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && baseForOwn(object, baseIteratee(iteratee, 3)); -} - -module.exports = forOwn; diff --git a/node_modules/lodash/forOwnRight.js b/node_modules/lodash/forOwnRight.js deleted file mode 100644 index 0f7aab8..0000000 --- a/node_modules/lodash/forOwnRight.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ -function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, baseIteratee(iteratee, 3)); -} - -module.exports = forOwnRight; diff --git a/node_modules/lodash/fp.js b/node_modules/lodash/fp.js deleted file mode 100644 index e372dbb..0000000 --- a/node_modules/lodash/fp.js +++ /dev/null @@ -1,2 +0,0 @@ -var _ = require('./lodash.min').runInContext(); -module.exports = require('./fp/_baseConvert')(_, _); diff --git a/node_modules/lodash/fp/F.js b/node_modules/lodash/fp/F.js deleted file mode 100644 index a05a63a..0000000 --- a/node_modules/lodash/fp/F.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./stubFalse'); diff --git a/node_modules/lodash/fp/T.js b/node_modules/lodash/fp/T.js deleted file mode 100644 index e2ba8ea..0000000 --- a/node_modules/lodash/fp/T.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./stubTrue'); diff --git a/node_modules/lodash/fp/__.js b/node_modules/lodash/fp/__.js deleted file mode 100644 index 4af98de..0000000 --- a/node_modules/lodash/fp/__.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./placeholder'); diff --git a/node_modules/lodash/fp/_baseConvert.js b/node_modules/lodash/fp/_baseConvert.js deleted file mode 100644 index 0def5f6..0000000 --- a/node_modules/lodash/fp/_baseConvert.js +++ /dev/null @@ -1,535 +0,0 @@ -var mapping = require('./_mapping'), - mutateMap = mapping.mutate, - fallbackHolder = require('./placeholder'); - -/** - * Creates a function, with an arity of `n`, that invokes `func` with the - * arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} n The arity of the new function. - * @returns {Function} Returns the new function. - */ -function baseArity(func, n) { - return n == 2 - ? function(a, b) { return func.apply(undefined, arguments); } - : function(a) { return func.apply(undefined, arguments); }; -} - -/** - * Creates a function that invokes `func`, with up to `n` arguments, ignoring - * any additional arguments. - * - * @private - * @param {Function} func The function to cap arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ -function baseAry(func, n) { - return n == 2 - ? function(a, b) { return func(a, b); } - : function(a) { return func(a); }; -} - -/** - * Creates a clone of `array`. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the cloned array. - */ -function cloneArray(array) { - var length = array ? array.length : 0, - result = Array(length); - - while (length--) { - result[length] = array[length]; - } - return result; -} - -/** - * Creates a function that clones a given object using the assignment `func`. - * - * @private - * @param {Function} func The assignment function. - * @returns {Function} Returns the new cloner function. - */ -function createCloner(func) { - return function(object) { - return func({}, object); - }; -} - -/** - * Creates a function that wraps `func` and uses `cloner` to clone the first - * argument it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} cloner The function to clone arguments. - * @returns {Function} Returns the new immutable function. - */ -function wrapImmutable(func, cloner) { - return function() { - var length = arguments.length; - if (!length) { - return; - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var result = args[0] = cloner.apply(undefined, args); - func.apply(undefined, args); - return result; - }; -} - -/** - * The base implementation of `convert` which accepts a `util` object of methods - * required to perform conversions. - * - * @param {Object} util The util object. - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @param {Object} [options] The options object. - * @param {boolean} [options.cap=true] Specify capping iteratee arguments. - * @param {boolean} [options.curry=true] Specify currying. - * @param {boolean} [options.fixed=true] Specify fixed arity. - * @param {boolean} [options.immutable=true] Specify immutable operations. - * @param {boolean} [options.rearg=true] Specify rearranging arguments. - * @returns {Function|Object} Returns the converted function or object. - */ -function baseConvert(util, name, func, options) { - var setPlaceholder, - isLib = typeof name == 'function', - isObj = name === Object(name); - - if (isObj) { - options = func; - func = name; - name = undefined; - } - if (func == null) { - throw new TypeError; - } - options || (options = {}); - - var config = { - 'cap': 'cap' in options ? options.cap : true, - 'curry': 'curry' in options ? options.curry : true, - 'fixed': 'fixed' in options ? options.fixed : true, - 'immutable': 'immutable' in options ? options.immutable : true, - 'rearg': 'rearg' in options ? options.rearg : true - }; - - var forceCurry = ('curry' in options) && options.curry, - forceFixed = ('fixed' in options) && options.fixed, - forceRearg = ('rearg' in options) && options.rearg, - placeholder = isLib ? func : fallbackHolder, - pristine = isLib ? func.runInContext() : undefined; - - var helpers = isLib ? func : { - 'ary': util.ary, - 'assign': util.assign, - 'clone': util.clone, - 'curry': util.curry, - 'forEach': util.forEach, - 'isArray': util.isArray, - 'isFunction': util.isFunction, - 'iteratee': util.iteratee, - 'keys': util.keys, - 'rearg': util.rearg, - 'spread': util.spread, - 'toInteger': util.toInteger, - 'toPath': util.toPath - }; - - var ary = helpers.ary, - assign = helpers.assign, - clone = helpers.clone, - curry = helpers.curry, - each = helpers.forEach, - isArray = helpers.isArray, - isFunction = helpers.isFunction, - keys = helpers.keys, - rearg = helpers.rearg, - spread = helpers.spread, - toInteger = helpers.toInteger, - toPath = helpers.toPath; - - var aryMethodKeys = keys(mapping.aryMethod); - - var wrappers = { - 'castArray': function(castArray) { - return function() { - var value = arguments[0]; - return isArray(value) - ? castArray(cloneArray(value)) - : castArray.apply(undefined, arguments); - }; - }, - 'iteratee': function(iteratee) { - return function() { - var func = arguments[0], - arity = arguments[1], - result = iteratee(func, arity), - length = result.length; - - if (config.cap && typeof arity == 'number') { - arity = arity > 2 ? (arity - 2) : 1; - return (length && length <= arity) ? result : baseAry(result, arity); - } - return result; - }; - }, - 'mixin': function(mixin) { - return function(source) { - var func = this; - if (!isFunction(func)) { - return mixin(func, Object(source)); - } - var pairs = []; - each(keys(source), function(key) { - if (isFunction(source[key])) { - pairs.push([key, func.prototype[key]]); - } - }); - - mixin(func, Object(source)); - - each(pairs, function(pair) { - var value = pair[1]; - if (isFunction(value)) { - func.prototype[pair[0]] = value; - } else { - delete func.prototype[pair[0]]; - } - }); - return func; - }; - }, - 'nthArg': function(nthArg) { - return function(n) { - var arity = n < 0 ? 1 : (toInteger(n) + 1); - return curry(nthArg(n), arity); - }; - }, - 'rearg': function(rearg) { - return function(func, indexes) { - var arity = indexes ? indexes.length : 0; - return curry(rearg(func, indexes), arity); - }; - }, - 'runInContext': function(runInContext) { - return function(context) { - return baseConvert(util, runInContext(context), options); - }; - } - }; - - /*--------------------------------------------------------------------------*/ - - /** - * Casts `func` to a function with an arity capped iteratee if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @returns {Function} Returns the cast function. - */ - function castCap(name, func) { - if (config.cap) { - var indexes = mapping.iterateeRearg[name]; - if (indexes) { - return iterateeRearg(func, indexes); - } - var n = !isLib && mapping.iterateeAry[name]; - if (n) { - return iterateeAry(func, n); - } - } - return func; - } - - /** - * Casts `func` to a curried function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity of `func`. - * @returns {Function} Returns the cast function. - */ - function castCurry(name, func, n) { - return (forceCurry || (config.curry && n > 1)) - ? curry(func, n) - : func; - } - - /** - * Casts `func` to a fixed arity function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity cap. - * @returns {Function} Returns the cast function. - */ - function castFixed(name, func, n) { - if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { - var data = mapping.methodSpread[name], - start = data && data.start; - - return start === undefined ? ary(func, n) : spread(func, start); - } - return func; - } - - /** - * Casts `func` to an rearged function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity of `func`. - * @returns {Function} Returns the cast function. - */ - function castRearg(name, func, n) { - return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name])) - ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n]) - : func; - } - - /** - * Creates a clone of `object` by `path`. - * - * @private - * @param {Object} object The object to clone. - * @param {Array|string} path The path to clone by. - * @returns {Object} Returns the cloned object. - */ - function cloneByPath(object, path) { - path = toPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - result = clone(Object(object)), - nested = result; - - while (nested != null && ++index < length) { - var key = path[index], - value = nested[key]; - - if (value != null) { - nested[path[index]] = clone(index == lastIndex ? value : Object(value)); - } - nested = nested[key]; - } - return result; - } - - /** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ - function convertLib(options) { - return _.runInContext.convert(options)(undefined); - } - - /** - * Create a converter function for `func` of `name`. - * - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @returns {Function} Returns the new converter function. - */ - function createConverter(name, func) { - var oldOptions = options; - return function(options) { - var newUtil = isLib ? pristine : helpers, - newFunc = isLib ? pristine[name] : func, - newOptions = assign(assign({}, oldOptions), options); - - return baseConvert(newUtil, name, newFunc, newOptions); - }; - } - - /** - * Creates a function that wraps `func` to invoke its iteratee, with up to `n` - * arguments, ignoring any additional arguments. - * - * @private - * @param {Function} func The function to cap iteratee arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ - function iterateeAry(func, n) { - return overArg(func, function(func) { - return typeof func == 'function' ? baseAry(func, n) : func; - }); - } - - /** - * Creates a function that wraps `func` to invoke its iteratee with arguments - * arranged according to the specified `indexes` where the argument value at - * the first index is provided as the first argument, the argument value at - * the second index is provided as the second argument, and so on. - * - * @private - * @param {Function} func The function to rearrange iteratee arguments for. - * @param {number[]} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - */ - function iterateeRearg(func, indexes) { - return overArg(func, function(func) { - var n = indexes.length; - return baseArity(rearg(baseAry(func, n), indexes), n); - }); - } - - /** - * Creates a function that invokes `func` with its first argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function() { - var length = arguments.length; - if (!length) { - return func(); - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var index = config.rearg ? 0 : (length - 1); - args[index] = transform(args[index]); - return func.apply(undefined, args); - }; - } - - /** - * Creates a function that wraps `func` and applys the conversions - * rules by `name`. - * - * @private - * @param {string} name The name of the function to wrap. - * @param {Function} func The function to wrap. - * @returns {Function} Returns the converted function. - */ - function wrap(name, func) { - name = mapping.aliasToReal[name] || name; - - var result, - wrapped = func, - wrapper = wrappers[name]; - - if (wrapper) { - wrapped = wrapper(func); - } - else if (config.immutable) { - if (mutateMap.array[name]) { - wrapped = wrapImmutable(func, cloneArray); - } - else if (mutateMap.object[name]) { - wrapped = wrapImmutable(func, createCloner(func)); - } - else if (mutateMap.set[name]) { - wrapped = wrapImmutable(func, cloneByPath); - } - } - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(otherName) { - if (name == otherName) { - var spreadData = mapping.methodSpread[name], - afterRearg = spreadData && spreadData.afterRearg; - - result = afterRearg - ? castFixed(name, castRearg(name, wrapped, aryKey), aryKey) - : castRearg(name, castFixed(name, wrapped, aryKey), aryKey); - - result = castCap(name, result); - result = castCurry(name, result, aryKey); - return false; - } - }); - return !result; - }); - - result || (result = wrapped); - if (result == func) { - result = forceCurry ? curry(result, 1) : function() { - return func.apply(this, arguments); - }; - } - result.convert = createConverter(name, func); - if (mapping.placeholder[name]) { - setPlaceholder = true; - result.placeholder = func.placeholder = placeholder; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - if (!isObj) { - return wrap(name, func); - } - var _ = func; - - // Convert methods by ary cap. - var pairs = []; - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(key) { - var func = _[mapping.remap[key] || key]; - if (func) { - pairs.push([key, wrap(key, func)]); - } - }); - }); - - // Convert remaining methods. - each(keys(_), function(key) { - var func = _[key]; - if (typeof func == 'function') { - var length = pairs.length; - while (length--) { - if (pairs[length][0] == key) { - return; - } - } - func.convert = createConverter(key, func); - pairs.push([key, func]); - } - }); - - // Assign to `_` leaving `_.prototype` unchanged to allow chaining. - each(pairs, function(pair) { - _[pair[0]] = pair[1]; - }); - - _.convert = convertLib; - if (setPlaceholder) { - _.placeholder = placeholder; - } - // Assign aliases. - each(keys(_), function(key) { - each(mapping.realToAlias[key] || [], function(alias) { - _[alias] = _[key]; - }); - }); - - return _; -} - -module.exports = baseConvert; diff --git a/node_modules/lodash/fp/_convertBrowser.js b/node_modules/lodash/fp/_convertBrowser.js deleted file mode 100644 index bde030d..0000000 --- a/node_modules/lodash/fp/_convertBrowser.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConvert = require('./_baseConvert'); - -/** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Function} lodash The lodash function to convert. - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ -function browserConvert(lodash, options) { - return baseConvert(lodash, lodash, options); -} - -if (typeof _ == 'function' && typeof _.runInContext == 'function') { - _ = browserConvert(_.runInContext()); -} -module.exports = browserConvert; diff --git a/node_modules/lodash/fp/_falseOptions.js b/node_modules/lodash/fp/_falseOptions.js deleted file mode 100644 index 773235e..0000000 --- a/node_modules/lodash/fp/_falseOptions.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - 'cap': false, - 'curry': false, - 'fixed': false, - 'immutable': false, - 'rearg': false -}; diff --git a/node_modules/lodash/fp/_mapping.js b/node_modules/lodash/fp/_mapping.js deleted file mode 100644 index 7fa8e67..0000000 --- a/node_modules/lodash/fp/_mapping.js +++ /dev/null @@ -1,367 +0,0 @@ -/** Used to map aliases to their real names. */ -exports.aliasToReal = { - - // Lodash aliases. - 'each': 'forEach', - 'eachRight': 'forEachRight', - 'entries': 'toPairs', - 'entriesIn': 'toPairsIn', - 'extend': 'assignIn', - 'extendAll': 'assignInAll', - 'extendAllWith': 'assignInAllWith', - 'extendWith': 'assignInWith', - 'first': 'head', - - // Methods that are curried variants of others. - 'conforms': 'conformsTo', - 'matches': 'isMatch', - 'property': 'get', - - // Ramda aliases. - '__': 'placeholder', - 'F': 'stubFalse', - 'T': 'stubTrue', - 'all': 'every', - 'allPass': 'overEvery', - 'always': 'constant', - 'any': 'some', - 'anyPass': 'overSome', - 'apply': 'spread', - 'assoc': 'set', - 'assocPath': 'set', - 'complement': 'negate', - 'compose': 'flowRight', - 'contains': 'includes', - 'dissoc': 'unset', - 'dissocPath': 'unset', - 'dropLast': 'dropRight', - 'dropLastWhile': 'dropRightWhile', - 'equals': 'isEqual', - 'identical': 'eq', - 'indexBy': 'keyBy', - 'init': 'initial', - 'invertObj': 'invert', - 'juxt': 'over', - 'omitAll': 'omit', - 'nAry': 'ary', - 'path': 'get', - 'pathEq': 'matchesProperty', - 'pathOr': 'getOr', - 'paths': 'at', - 'pickAll': 'pick', - 'pipe': 'flow', - 'pluck': 'map', - 'prop': 'get', - 'propEq': 'matchesProperty', - 'propOr': 'getOr', - 'props': 'at', - 'symmetricDifference': 'xor', - 'symmetricDifferenceBy': 'xorBy', - 'symmetricDifferenceWith': 'xorWith', - 'takeLast': 'takeRight', - 'takeLastWhile': 'takeRightWhile', - 'unapply': 'rest', - 'unnest': 'flatten', - 'useWith': 'overArgs', - 'where': 'conformsTo', - 'whereEq': 'isMatch', - 'zipObj': 'zipObject' -}; - -/** Used to map ary to method names. */ -exports.aryMethod = { - '1': [ - 'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create', - 'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow', - 'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll', - 'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse', - 'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart', - 'uniqueId', 'words', 'zipAll' - ], - '2': [ - 'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith', - 'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith', - 'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN', - 'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference', - 'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', - 'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex', - 'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach', - 'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get', - 'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection', - 'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy', - 'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty', - 'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit', - 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial', - 'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll', - 'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', - 'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex', - 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy', - 'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', - 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', - 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', - 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', - 'zipObjectDeep' - ], - '3': [ - 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', - 'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr', - 'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith', - 'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth', - 'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd', - 'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight', - 'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy', - 'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy', - 'xorWith', 'zipWith' - ], - '4': [ - 'fill', 'setWith', 'updateWith' - ] -}; - -/** Used to map ary to rearg configs. */ -exports.aryRearg = { - '2': [1, 0], - '3': [2, 0, 1], - '4': [3, 2, 0, 1] -}; - -/** Used to map method names to their iteratee ary. */ -exports.iterateeAry = { - 'dropRightWhile': 1, - 'dropWhile': 1, - 'every': 1, - 'filter': 1, - 'find': 1, - 'findFrom': 1, - 'findIndex': 1, - 'findIndexFrom': 1, - 'findKey': 1, - 'findLast': 1, - 'findLastFrom': 1, - 'findLastIndex': 1, - 'findLastIndexFrom': 1, - 'findLastKey': 1, - 'flatMap': 1, - 'flatMapDeep': 1, - 'flatMapDepth': 1, - 'forEach': 1, - 'forEachRight': 1, - 'forIn': 1, - 'forInRight': 1, - 'forOwn': 1, - 'forOwnRight': 1, - 'map': 1, - 'mapKeys': 1, - 'mapValues': 1, - 'partition': 1, - 'reduce': 2, - 'reduceRight': 2, - 'reject': 1, - 'remove': 1, - 'some': 1, - 'takeRightWhile': 1, - 'takeWhile': 1, - 'times': 1, - 'transform': 2 -}; - -/** Used to map method names to iteratee rearg configs. */ -exports.iterateeRearg = { - 'mapKeys': [1] -}; - -/** Used to map method names to rearg configs. */ -exports.methodRearg = { - 'assignInAllWith': [1, 2, 0], - 'assignInWith': [1, 2, 0], - 'assignAllWith': [1, 2, 0], - 'assignWith': [1, 2, 0], - 'differenceBy': [1, 2, 0], - 'differenceWith': [1, 2, 0], - 'getOr': [2, 1, 0], - 'intersectionBy': [1, 2, 0], - 'intersectionWith': [1, 2, 0], - 'isEqualWith': [1, 2, 0], - 'isMatchWith': [2, 1, 0], - 'mergeAllWith': [1, 2, 0], - 'mergeWith': [1, 2, 0], - 'padChars': [2, 1, 0], - 'padCharsEnd': [2, 1, 0], - 'padCharsStart': [2, 1, 0], - 'pullAllBy': [2, 1, 0], - 'pullAllWith': [2, 1, 0], - 'rangeStep': [1, 2, 0], - 'rangeStepRight': [1, 2, 0], - 'setWith': [3, 1, 2, 0], - 'sortedIndexBy': [2, 1, 0], - 'sortedLastIndexBy': [2, 1, 0], - 'unionBy': [1, 2, 0], - 'unionWith': [1, 2, 0], - 'updateWith': [3, 1, 2, 0], - 'xorBy': [1, 2, 0], - 'xorWith': [1, 2, 0], - 'zipWith': [1, 2, 0] -}; - -/** Used to map method names to spread configs. */ -exports.methodSpread = { - 'assignAll': { 'start': 0 }, - 'assignAllWith': { 'afterRearg': true, 'start': 1 }, - 'assignInAll': { 'start': 0 }, - 'assignInAllWith': { 'afterRearg': true, 'start': 1 }, - 'defaultsAll': { 'start': 0 }, - 'defaultsDeepAll': { 'start': 0 }, - 'invokeArgs': { 'start': 2 }, - 'invokeArgsMap': { 'start': 2 }, - 'mergeAll': { 'start': 0 }, - 'mergeAllWith': { 'afterRearg': true, 'start': 1 }, - 'partial': { 'start': 1 }, - 'partialRight': { 'start': 1 }, - 'without': { 'start': 1 }, - 'zipAll': { 'start': 0 } -}; - -/** Used to identify methods which mutate arrays or objects. */ -exports.mutate = { - 'array': { - 'fill': true, - 'pull': true, - 'pullAll': true, - 'pullAllBy': true, - 'pullAllWith': true, - 'pullAt': true, - 'remove': true, - 'reverse': true - }, - 'object': { - 'assign': true, - 'assignAll': true, - 'assignAllWith': true, - 'assignIn': true, - 'assignInAll': true, - 'assignInAllWith': true, - 'assignInWith': true, - 'assignWith': true, - 'defaults': true, - 'defaultsAll': true, - 'defaultsDeep': true, - 'defaultsDeepAll': true, - 'merge': true, - 'mergeAll': true, - 'mergeAllWith': true, - 'mergeWith': true, - }, - 'set': { - 'set': true, - 'setWith': true, - 'unset': true, - 'update': true, - 'updateWith': true - } -}; - -/** Used to track methods with placeholder support */ -exports.placeholder = { - 'bind': true, - 'bindKey': true, - 'curry': true, - 'curryRight': true, - 'partial': true, - 'partialRight': true -}; - -/** Used to map real names to their aliases. */ -exports.realToAlias = (function() { - var hasOwnProperty = Object.prototype.hasOwnProperty, - object = exports.aliasToReal, - result = {}; - - for (var key in object) { - var value = object[key]; - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - } - return result; -}()); - -/** Used to map method names to other names. */ -exports.remap = { - 'assignAll': 'assign', - 'assignAllWith': 'assignWith', - 'assignInAll': 'assignIn', - 'assignInAllWith': 'assignInWith', - 'curryN': 'curry', - 'curryRightN': 'curryRight', - 'defaultsAll': 'defaults', - 'defaultsDeepAll': 'defaultsDeep', - 'findFrom': 'find', - 'findIndexFrom': 'findIndex', - 'findLastFrom': 'findLast', - 'findLastIndexFrom': 'findLastIndex', - 'getOr': 'get', - 'includesFrom': 'includes', - 'indexOfFrom': 'indexOf', - 'invokeArgs': 'invoke', - 'invokeArgsMap': 'invokeMap', - 'lastIndexOfFrom': 'lastIndexOf', - 'mergeAll': 'merge', - 'mergeAllWith': 'mergeWith', - 'padChars': 'pad', - 'padCharsEnd': 'padEnd', - 'padCharsStart': 'padStart', - 'propertyOf': 'get', - 'rangeStep': 'range', - 'rangeStepRight': 'rangeRight', - 'restFrom': 'rest', - 'spreadFrom': 'spread', - 'trimChars': 'trim', - 'trimCharsEnd': 'trimEnd', - 'trimCharsStart': 'trimStart', - 'zipAll': 'zip' -}; - -/** Used to track methods that skip fixing their arity. */ -exports.skipFixed = { - 'castArray': true, - 'flow': true, - 'flowRight': true, - 'iteratee': true, - 'mixin': true, - 'rearg': true, - 'runInContext': true -}; - -/** Used to track methods that skip rearranging arguments. */ -exports.skipRearg = { - 'add': true, - 'assign': true, - 'assignIn': true, - 'bind': true, - 'bindKey': true, - 'concat': true, - 'difference': true, - 'divide': true, - 'eq': true, - 'gt': true, - 'gte': true, - 'isEqual': true, - 'lt': true, - 'lte': true, - 'matchesProperty': true, - 'merge': true, - 'multiply': true, - 'overArgs': true, - 'partial': true, - 'partialRight': true, - 'propertyOf': true, - 'random': true, - 'range': true, - 'rangeRight': true, - 'subtract': true, - 'zip': true, - 'zipObject': true, - 'zipObjectDeep': true -}; diff --git a/node_modules/lodash/fp/_util.js b/node_modules/lodash/fp/_util.js deleted file mode 100644 index f814812..0000000 --- a/node_modules/lodash/fp/_util.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - 'ary': require('../ary'), - 'assign': require('../_baseAssign'), - 'clone': require('../clone'), - 'curry': require('../curry'), - 'forEach': require('../_arrayEach'), - 'isArray': require('../isArray'), - 'isFunction': require('../isFunction'), - 'iteratee': require('../iteratee'), - 'keys': require('../_baseKeys'), - 'rearg': require('../rearg'), - 'spread': require('../spread'), - 'toInteger': require('../toInteger'), - 'toPath': require('../toPath') -}; diff --git a/node_modules/lodash/fp/add.js b/node_modules/lodash/fp/add.js deleted file mode 100644 index 816eeec..0000000 --- a/node_modules/lodash/fp/add.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('add', require('../add')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/after.js b/node_modules/lodash/fp/after.js deleted file mode 100644 index 21a0167..0000000 --- a/node_modules/lodash/fp/after.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('after', require('../after')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/all.js b/node_modules/lodash/fp/all.js deleted file mode 100644 index d0839f7..0000000 --- a/node_modules/lodash/fp/all.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./every'); diff --git a/node_modules/lodash/fp/allPass.js b/node_modules/lodash/fp/allPass.js deleted file mode 100644 index 79b73ef..0000000 --- a/node_modules/lodash/fp/allPass.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overEvery'); diff --git a/node_modules/lodash/fp/always.js b/node_modules/lodash/fp/always.js deleted file mode 100644 index 9887703..0000000 --- a/node_modules/lodash/fp/always.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./constant'); diff --git a/node_modules/lodash/fp/any.js b/node_modules/lodash/fp/any.js deleted file mode 100644 index 900ac25..0000000 --- a/node_modules/lodash/fp/any.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./some'); diff --git a/node_modules/lodash/fp/anyPass.js b/node_modules/lodash/fp/anyPass.js deleted file mode 100644 index 2774ab3..0000000 --- a/node_modules/lodash/fp/anyPass.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overSome'); diff --git a/node_modules/lodash/fp/apply.js b/node_modules/lodash/fp/apply.js deleted file mode 100644 index 2b75712..0000000 --- a/node_modules/lodash/fp/apply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./spread'); diff --git a/node_modules/lodash/fp/array.js b/node_modules/lodash/fp/array.js deleted file mode 100644 index fe939c2..0000000 --- a/node_modules/lodash/fp/array.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../array')); diff --git a/node_modules/lodash/fp/ary.js b/node_modules/lodash/fp/ary.js deleted file mode 100644 index 8edf187..0000000 --- a/node_modules/lodash/fp/ary.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('ary', require('../ary')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assign.js b/node_modules/lodash/fp/assign.js deleted file mode 100644 index 23f47af..0000000 --- a/node_modules/lodash/fp/assign.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assign', require('../assign')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignAll.js b/node_modules/lodash/fp/assignAll.js deleted file mode 100644 index b1d36c7..0000000 --- a/node_modules/lodash/fp/assignAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignAll', require('../assign')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignAllWith.js b/node_modules/lodash/fp/assignAllWith.js deleted file mode 100644 index 21e836e..0000000 --- a/node_modules/lodash/fp/assignAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignAllWith', require('../assignWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignIn.js b/node_modules/lodash/fp/assignIn.js deleted file mode 100644 index 6e7c65f..0000000 --- a/node_modules/lodash/fp/assignIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignIn', require('../assignIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignInAll.js b/node_modules/lodash/fp/assignInAll.js deleted file mode 100644 index 7ba75db..0000000 --- a/node_modules/lodash/fp/assignInAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInAll', require('../assignIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignInAllWith.js b/node_modules/lodash/fp/assignInAllWith.js deleted file mode 100644 index e766903..0000000 --- a/node_modules/lodash/fp/assignInAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInAllWith', require('../assignInWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignInWith.js b/node_modules/lodash/fp/assignInWith.js deleted file mode 100644 index acb5923..0000000 --- a/node_modules/lodash/fp/assignInWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInWith', require('../assignInWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignWith.js b/node_modules/lodash/fp/assignWith.js deleted file mode 100644 index eb92521..0000000 --- a/node_modules/lodash/fp/assignWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignWith', require('../assignWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assoc.js b/node_modules/lodash/fp/assoc.js deleted file mode 100644 index 7648820..0000000 --- a/node_modules/lodash/fp/assoc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./set'); diff --git a/node_modules/lodash/fp/assocPath.js b/node_modules/lodash/fp/assocPath.js deleted file mode 100644 index 7648820..0000000 --- a/node_modules/lodash/fp/assocPath.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./set'); diff --git a/node_modules/lodash/fp/at.js b/node_modules/lodash/fp/at.js deleted file mode 100644 index cc39d25..0000000 --- a/node_modules/lodash/fp/at.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('at', require('../at')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/attempt.js b/node_modules/lodash/fp/attempt.js deleted file mode 100644 index 26ca42e..0000000 --- a/node_modules/lodash/fp/attempt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('attempt', require('../attempt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/before.js b/node_modules/lodash/fp/before.js deleted file mode 100644 index 7a2de65..0000000 --- a/node_modules/lodash/fp/before.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('before', require('../before')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/bind.js b/node_modules/lodash/fp/bind.js deleted file mode 100644 index 5cbe4f3..0000000 --- a/node_modules/lodash/fp/bind.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bind', require('../bind')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/bindAll.js b/node_modules/lodash/fp/bindAll.js deleted file mode 100644 index 6b4a4a0..0000000 --- a/node_modules/lodash/fp/bindAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bindAll', require('../bindAll')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/bindKey.js b/node_modules/lodash/fp/bindKey.js deleted file mode 100644 index 6a46c6b..0000000 --- a/node_modules/lodash/fp/bindKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bindKey', require('../bindKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/camelCase.js b/node_modules/lodash/fp/camelCase.js deleted file mode 100644 index 87b77b4..0000000 --- a/node_modules/lodash/fp/camelCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('camelCase', require('../camelCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/capitalize.js b/node_modules/lodash/fp/capitalize.js deleted file mode 100644 index cac74e1..0000000 --- a/node_modules/lodash/fp/capitalize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('capitalize', require('../capitalize'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/castArray.js b/node_modules/lodash/fp/castArray.js deleted file mode 100644 index 8681c09..0000000 --- a/node_modules/lodash/fp/castArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('castArray', require('../castArray')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/ceil.js b/node_modules/lodash/fp/ceil.js deleted file mode 100644 index f416b72..0000000 --- a/node_modules/lodash/fp/ceil.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('ceil', require('../ceil')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/chain.js b/node_modules/lodash/fp/chain.js deleted file mode 100644 index 604fe39..0000000 --- a/node_modules/lodash/fp/chain.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('chain', require('../chain'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/chunk.js b/node_modules/lodash/fp/chunk.js deleted file mode 100644 index 871ab08..0000000 --- a/node_modules/lodash/fp/chunk.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('chunk', require('../chunk')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/clamp.js b/node_modules/lodash/fp/clamp.js deleted file mode 100644 index 3b06c01..0000000 --- a/node_modules/lodash/fp/clamp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('clamp', require('../clamp')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/clone.js b/node_modules/lodash/fp/clone.js deleted file mode 100644 index cadb59c..0000000 --- a/node_modules/lodash/fp/clone.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('clone', require('../clone'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/cloneDeep.js b/node_modules/lodash/fp/cloneDeep.js deleted file mode 100644 index a6107aa..0000000 --- a/node_modules/lodash/fp/cloneDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/cloneDeepWith.js b/node_modules/lodash/fp/cloneDeepWith.js deleted file mode 100644 index 6f01e44..0000000 --- a/node_modules/lodash/fp/cloneDeepWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneDeepWith', require('../cloneDeepWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/cloneWith.js b/node_modules/lodash/fp/cloneWith.js deleted file mode 100644 index aa88578..0000000 --- a/node_modules/lodash/fp/cloneWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneWith', require('../cloneWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/collection.js b/node_modules/lodash/fp/collection.js deleted file mode 100644 index fc8b328..0000000 --- a/node_modules/lodash/fp/collection.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../collection')); diff --git a/node_modules/lodash/fp/commit.js b/node_modules/lodash/fp/commit.js deleted file mode 100644 index 130a894..0000000 --- a/node_modules/lodash/fp/commit.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('commit', require('../commit'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/compact.js b/node_modules/lodash/fp/compact.js deleted file mode 100644 index ce8f7a1..0000000 --- a/node_modules/lodash/fp/compact.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('compact', require('../compact'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/complement.js b/node_modules/lodash/fp/complement.js deleted file mode 100644 index 93eb462..0000000 --- a/node_modules/lodash/fp/complement.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./negate'); diff --git a/node_modules/lodash/fp/compose.js b/node_modules/lodash/fp/compose.js deleted file mode 100644 index 1954e94..0000000 --- a/node_modules/lodash/fp/compose.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flowRight'); diff --git a/node_modules/lodash/fp/concat.js b/node_modules/lodash/fp/concat.js deleted file mode 100644 index e59346a..0000000 --- a/node_modules/lodash/fp/concat.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('concat', require('../concat')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/cond.js b/node_modules/lodash/fp/cond.js deleted file mode 100644 index 6a0120e..0000000 --- a/node_modules/lodash/fp/cond.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cond', require('../cond'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/conforms.js b/node_modules/lodash/fp/conforms.js deleted file mode 100644 index 3247f64..0000000 --- a/node_modules/lodash/fp/conforms.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./conformsTo'); diff --git a/node_modules/lodash/fp/conformsTo.js b/node_modules/lodash/fp/conformsTo.js deleted file mode 100644 index aa7f41e..0000000 --- a/node_modules/lodash/fp/conformsTo.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('conformsTo', require('../conformsTo')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/constant.js b/node_modules/lodash/fp/constant.js deleted file mode 100644 index 9e406fc..0000000 --- a/node_modules/lodash/fp/constant.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('constant', require('../constant'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/contains.js b/node_modules/lodash/fp/contains.js deleted file mode 100644 index 594722a..0000000 --- a/node_modules/lodash/fp/contains.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./includes'); diff --git a/node_modules/lodash/fp/convert.js b/node_modules/lodash/fp/convert.js deleted file mode 100644 index 4795dc4..0000000 --- a/node_modules/lodash/fp/convert.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConvert = require('./_baseConvert'), - util = require('./_util'); - -/** - * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. If `name` is an object its methods - * will be converted. - * - * @param {string} name The name of the function to wrap. - * @param {Function} [func] The function to wrap. - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function|Object} Returns the converted function or object. - */ -function convert(name, func, options) { - return baseConvert(util, name, func, options); -} - -module.exports = convert; diff --git a/node_modules/lodash/fp/countBy.js b/node_modules/lodash/fp/countBy.js deleted file mode 100644 index dfa4643..0000000 --- a/node_modules/lodash/fp/countBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('countBy', require('../countBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/create.js b/node_modules/lodash/fp/create.js deleted file mode 100644 index 752025f..0000000 --- a/node_modules/lodash/fp/create.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('create', require('../create')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/curry.js b/node_modules/lodash/fp/curry.js deleted file mode 100644 index b0b4168..0000000 --- a/node_modules/lodash/fp/curry.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curry', require('../curry')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/curryN.js b/node_modules/lodash/fp/curryN.js deleted file mode 100644 index 2ae7d00..0000000 --- a/node_modules/lodash/fp/curryN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryN', require('../curry')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/curryRight.js b/node_modules/lodash/fp/curryRight.js deleted file mode 100644 index cb619eb..0000000 --- a/node_modules/lodash/fp/curryRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryRight', require('../curryRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/curryRightN.js b/node_modules/lodash/fp/curryRightN.js deleted file mode 100644 index 2495afc..0000000 --- a/node_modules/lodash/fp/curryRightN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryRightN', require('../curryRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/date.js b/node_modules/lodash/fp/date.js deleted file mode 100644 index 82cb952..0000000 --- a/node_modules/lodash/fp/date.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../date')); diff --git a/node_modules/lodash/fp/debounce.js b/node_modules/lodash/fp/debounce.js deleted file mode 100644 index 2612229..0000000 --- a/node_modules/lodash/fp/debounce.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('debounce', require('../debounce')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/deburr.js b/node_modules/lodash/fp/deburr.js deleted file mode 100644 index 96463ab..0000000 --- a/node_modules/lodash/fp/deburr.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('deburr', require('../deburr'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaultTo.js b/node_modules/lodash/fp/defaultTo.js deleted file mode 100644 index d6b52a4..0000000 --- a/node_modules/lodash/fp/defaultTo.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultTo', require('../defaultTo')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaults.js b/node_modules/lodash/fp/defaults.js deleted file mode 100644 index e1a8e6e..0000000 --- a/node_modules/lodash/fp/defaults.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaults', require('../defaults')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaultsAll.js b/node_modules/lodash/fp/defaultsAll.js deleted file mode 100644 index 238fcc3..0000000 --- a/node_modules/lodash/fp/defaultsAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsAll', require('../defaults')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaultsDeep.js b/node_modules/lodash/fp/defaultsDeep.js deleted file mode 100644 index 1f172ff..0000000 --- a/node_modules/lodash/fp/defaultsDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsDeep', require('../defaultsDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaultsDeepAll.js b/node_modules/lodash/fp/defaultsDeepAll.js deleted file mode 100644 index 6835f2f..0000000 --- a/node_modules/lodash/fp/defaultsDeepAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsDeepAll', require('../defaultsDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defer.js b/node_modules/lodash/fp/defer.js deleted file mode 100644 index ec7990f..0000000 --- a/node_modules/lodash/fp/defer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defer', require('../defer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/delay.js b/node_modules/lodash/fp/delay.js deleted file mode 100644 index 556dbd5..0000000 --- a/node_modules/lodash/fp/delay.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('delay', require('../delay')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/difference.js b/node_modules/lodash/fp/difference.js deleted file mode 100644 index 2d03765..0000000 --- a/node_modules/lodash/fp/difference.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('difference', require('../difference')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/differenceBy.js b/node_modules/lodash/fp/differenceBy.js deleted file mode 100644 index 2f91491..0000000 --- a/node_modules/lodash/fp/differenceBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('differenceBy', require('../differenceBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/differenceWith.js b/node_modules/lodash/fp/differenceWith.js deleted file mode 100644 index bcf5ad2..0000000 --- a/node_modules/lodash/fp/differenceWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('differenceWith', require('../differenceWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/dissoc.js b/node_modules/lodash/fp/dissoc.js deleted file mode 100644 index 7ec7be1..0000000 --- a/node_modules/lodash/fp/dissoc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./unset'); diff --git a/node_modules/lodash/fp/dissocPath.js b/node_modules/lodash/fp/dissocPath.js deleted file mode 100644 index 7ec7be1..0000000 --- a/node_modules/lodash/fp/dissocPath.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./unset'); diff --git a/node_modules/lodash/fp/divide.js b/node_modules/lodash/fp/divide.js deleted file mode 100644 index 82048c5..0000000 --- a/node_modules/lodash/fp/divide.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('divide', require('../divide')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/drop.js b/node_modules/lodash/fp/drop.js deleted file mode 100644 index 2fa9b4f..0000000 --- a/node_modules/lodash/fp/drop.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('drop', require('../drop')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/dropLast.js b/node_modules/lodash/fp/dropLast.js deleted file mode 100644 index 174e525..0000000 --- a/node_modules/lodash/fp/dropLast.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dropRight'); diff --git a/node_modules/lodash/fp/dropLastWhile.js b/node_modules/lodash/fp/dropLastWhile.js deleted file mode 100644 index be2a9d2..0000000 --- a/node_modules/lodash/fp/dropLastWhile.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dropRightWhile'); diff --git a/node_modules/lodash/fp/dropRight.js b/node_modules/lodash/fp/dropRight.js deleted file mode 100644 index e98881f..0000000 --- a/node_modules/lodash/fp/dropRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropRight', require('../dropRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/dropRightWhile.js b/node_modules/lodash/fp/dropRightWhile.js deleted file mode 100644 index cacaa70..0000000 --- a/node_modules/lodash/fp/dropRightWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropRightWhile', require('../dropRightWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/dropWhile.js b/node_modules/lodash/fp/dropWhile.js deleted file mode 100644 index 285f864..0000000 --- a/node_modules/lodash/fp/dropWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropWhile', require('../dropWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/each.js b/node_modules/lodash/fp/each.js deleted file mode 100644 index 8800f42..0000000 --- a/node_modules/lodash/fp/each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEach'); diff --git a/node_modules/lodash/fp/eachRight.js b/node_modules/lodash/fp/eachRight.js deleted file mode 100644 index 3252b2a..0000000 --- a/node_modules/lodash/fp/eachRight.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/fp/endsWith.js b/node_modules/lodash/fp/endsWith.js deleted file mode 100644 index 17dc2a4..0000000 --- a/node_modules/lodash/fp/endsWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('endsWith', require('../endsWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/entries.js b/node_modules/lodash/fp/entries.js deleted file mode 100644 index 7a88df2..0000000 --- a/node_modules/lodash/fp/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairs'); diff --git a/node_modules/lodash/fp/entriesIn.js b/node_modules/lodash/fp/entriesIn.js deleted file mode 100644 index f6c6331..0000000 --- a/node_modules/lodash/fp/entriesIn.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairsIn'); diff --git a/node_modules/lodash/fp/eq.js b/node_modules/lodash/fp/eq.js deleted file mode 100644 index 9a3d21b..0000000 --- a/node_modules/lodash/fp/eq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('eq', require('../eq')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/equals.js b/node_modules/lodash/fp/equals.js deleted file mode 100644 index e6a5ce0..0000000 --- a/node_modules/lodash/fp/equals.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isEqual'); diff --git a/node_modules/lodash/fp/escape.js b/node_modules/lodash/fp/escape.js deleted file mode 100644 index 52c1fbb..0000000 --- a/node_modules/lodash/fp/escape.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('escape', require('../escape'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/escapeRegExp.js b/node_modules/lodash/fp/escapeRegExp.js deleted file mode 100644 index 369b2ef..0000000 --- a/node_modules/lodash/fp/escapeRegExp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/every.js b/node_modules/lodash/fp/every.js deleted file mode 100644 index 95c2776..0000000 --- a/node_modules/lodash/fp/every.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('every', require('../every')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/extend.js b/node_modules/lodash/fp/extend.js deleted file mode 100644 index e00166c..0000000 --- a/node_modules/lodash/fp/extend.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignIn'); diff --git a/node_modules/lodash/fp/extendAll.js b/node_modules/lodash/fp/extendAll.js deleted file mode 100644 index cc55b64..0000000 --- a/node_modules/lodash/fp/extendAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInAll'); diff --git a/node_modules/lodash/fp/extendAllWith.js b/node_modules/lodash/fp/extendAllWith.js deleted file mode 100644 index 6679d20..0000000 --- a/node_modules/lodash/fp/extendAllWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInAllWith'); diff --git a/node_modules/lodash/fp/extendWith.js b/node_modules/lodash/fp/extendWith.js deleted file mode 100644 index dbdcb3b..0000000 --- a/node_modules/lodash/fp/extendWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInWith'); diff --git a/node_modules/lodash/fp/fill.js b/node_modules/lodash/fp/fill.js deleted file mode 100644 index b2d47e8..0000000 --- a/node_modules/lodash/fp/fill.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('fill', require('../fill')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/filter.js b/node_modules/lodash/fp/filter.js deleted file mode 100644 index 796d501..0000000 --- a/node_modules/lodash/fp/filter.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('filter', require('../filter')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/find.js b/node_modules/lodash/fp/find.js deleted file mode 100644 index f805d33..0000000 --- a/node_modules/lodash/fp/find.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('find', require('../find')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findFrom.js b/node_modules/lodash/fp/findFrom.js deleted file mode 100644 index da8275e..0000000 --- a/node_modules/lodash/fp/findFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findFrom', require('../find')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findIndex.js b/node_modules/lodash/fp/findIndex.js deleted file mode 100644 index 8c15fd1..0000000 --- a/node_modules/lodash/fp/findIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findIndex', require('../findIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findIndexFrom.js b/node_modules/lodash/fp/findIndexFrom.js deleted file mode 100644 index 32e98cb..0000000 --- a/node_modules/lodash/fp/findIndexFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findIndexFrom', require('../findIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findKey.js b/node_modules/lodash/fp/findKey.js deleted file mode 100644 index 475bcfa..0000000 --- a/node_modules/lodash/fp/findKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findKey', require('../findKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLast.js b/node_modules/lodash/fp/findLast.js deleted file mode 100644 index 093fe94..0000000 --- a/node_modules/lodash/fp/findLast.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLast', require('../findLast')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLastFrom.js b/node_modules/lodash/fp/findLastFrom.js deleted file mode 100644 index 76c38fb..0000000 --- a/node_modules/lodash/fp/findLastFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastFrom', require('../findLast')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLastIndex.js b/node_modules/lodash/fp/findLastIndex.js deleted file mode 100644 index 36986df..0000000 --- a/node_modules/lodash/fp/findLastIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastIndex', require('../findLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLastIndexFrom.js b/node_modules/lodash/fp/findLastIndexFrom.js deleted file mode 100644 index 34c8176..0000000 --- a/node_modules/lodash/fp/findLastIndexFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastIndexFrom', require('../findLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLastKey.js b/node_modules/lodash/fp/findLastKey.js deleted file mode 100644 index 5f81b60..0000000 --- a/node_modules/lodash/fp/findLastKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastKey', require('../findLastKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/first.js b/node_modules/lodash/fp/first.js deleted file mode 100644 index 53f4ad1..0000000 --- a/node_modules/lodash/fp/first.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./head'); diff --git a/node_modules/lodash/fp/flatMap.js b/node_modules/lodash/fp/flatMap.js deleted file mode 100644 index d01dc4d..0000000 --- a/node_modules/lodash/fp/flatMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMap', require('../flatMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flatMapDeep.js b/node_modules/lodash/fp/flatMapDeep.js deleted file mode 100644 index 569c42e..0000000 --- a/node_modules/lodash/fp/flatMapDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMapDeep', require('../flatMapDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flatMapDepth.js b/node_modules/lodash/fp/flatMapDepth.js deleted file mode 100644 index 6eb68fd..0000000 --- a/node_modules/lodash/fp/flatMapDepth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMapDepth', require('../flatMapDepth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flatten.js b/node_modules/lodash/fp/flatten.js deleted file mode 100644 index 30425d8..0000000 --- a/node_modules/lodash/fp/flatten.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatten', require('../flatten'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flattenDeep.js b/node_modules/lodash/fp/flattenDeep.js deleted file mode 100644 index aed5db2..0000000 --- a/node_modules/lodash/fp/flattenDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flattenDepth.js b/node_modules/lodash/fp/flattenDepth.js deleted file mode 100644 index ad65e37..0000000 --- a/node_modules/lodash/fp/flattenDepth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flattenDepth', require('../flattenDepth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flip.js b/node_modules/lodash/fp/flip.js deleted file mode 100644 index 0547e7b..0000000 --- a/node_modules/lodash/fp/flip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flip', require('../flip'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/floor.js b/node_modules/lodash/fp/floor.js deleted file mode 100644 index a6cf335..0000000 --- a/node_modules/lodash/fp/floor.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('floor', require('../floor')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flow.js b/node_modules/lodash/fp/flow.js deleted file mode 100644 index cd83677..0000000 --- a/node_modules/lodash/fp/flow.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flow', require('../flow')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flowRight.js b/node_modules/lodash/fp/flowRight.js deleted file mode 100644 index 972a5b9..0000000 --- a/node_modules/lodash/fp/flowRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flowRight', require('../flowRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forEach.js b/node_modules/lodash/fp/forEach.js deleted file mode 100644 index 2f49452..0000000 --- a/node_modules/lodash/fp/forEach.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forEach', require('../forEach')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forEachRight.js b/node_modules/lodash/fp/forEachRight.js deleted file mode 100644 index 3ff9733..0000000 --- a/node_modules/lodash/fp/forEachRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forEachRight', require('../forEachRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forIn.js b/node_modules/lodash/fp/forIn.js deleted file mode 100644 index 9341749..0000000 --- a/node_modules/lodash/fp/forIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forIn', require('../forIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forInRight.js b/node_modules/lodash/fp/forInRight.js deleted file mode 100644 index cecf8bb..0000000 --- a/node_modules/lodash/fp/forInRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forInRight', require('../forInRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forOwn.js b/node_modules/lodash/fp/forOwn.js deleted file mode 100644 index 246449e..0000000 --- a/node_modules/lodash/fp/forOwn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forOwn', require('../forOwn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forOwnRight.js b/node_modules/lodash/fp/forOwnRight.js deleted file mode 100644 index c5e826e..0000000 --- a/node_modules/lodash/fp/forOwnRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forOwnRight', require('../forOwnRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/fromPairs.js b/node_modules/lodash/fp/fromPairs.js deleted file mode 100644 index f8cc596..0000000 --- a/node_modules/lodash/fp/fromPairs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('fromPairs', require('../fromPairs')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/function.js b/node_modules/lodash/fp/function.js deleted file mode 100644 index dfe69b1..0000000 --- a/node_modules/lodash/fp/function.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../function')); diff --git a/node_modules/lodash/fp/functions.js b/node_modules/lodash/fp/functions.js deleted file mode 100644 index 09d1bb1..0000000 --- a/node_modules/lodash/fp/functions.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('functions', require('../functions'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/functionsIn.js b/node_modules/lodash/fp/functionsIn.js deleted file mode 100644 index 2cfeb83..0000000 --- a/node_modules/lodash/fp/functionsIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/get.js b/node_modules/lodash/fp/get.js deleted file mode 100644 index 6d3a328..0000000 --- a/node_modules/lodash/fp/get.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('get', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/getOr.js b/node_modules/lodash/fp/getOr.js deleted file mode 100644 index 7dbf771..0000000 --- a/node_modules/lodash/fp/getOr.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('getOr', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/groupBy.js b/node_modules/lodash/fp/groupBy.js deleted file mode 100644 index fc0bc78..0000000 --- a/node_modules/lodash/fp/groupBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('groupBy', require('../groupBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/gt.js b/node_modules/lodash/fp/gt.js deleted file mode 100644 index 9e57c80..0000000 --- a/node_modules/lodash/fp/gt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('gt', require('../gt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/gte.js b/node_modules/lodash/fp/gte.js deleted file mode 100644 index 4584786..0000000 --- a/node_modules/lodash/fp/gte.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('gte', require('../gte')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/has.js b/node_modules/lodash/fp/has.js deleted file mode 100644 index b901298..0000000 --- a/node_modules/lodash/fp/has.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('has', require('../has')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/hasIn.js b/node_modules/lodash/fp/hasIn.js deleted file mode 100644 index b3c3d1a..0000000 --- a/node_modules/lodash/fp/hasIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('hasIn', require('../hasIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/head.js b/node_modules/lodash/fp/head.js deleted file mode 100644 index 2694f0a..0000000 --- a/node_modules/lodash/fp/head.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('head', require('../head'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/identical.js b/node_modules/lodash/fp/identical.js deleted file mode 100644 index 85563f4..0000000 --- a/node_modules/lodash/fp/identical.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./eq'); diff --git a/node_modules/lodash/fp/identity.js b/node_modules/lodash/fp/identity.js deleted file mode 100644 index 096415a..0000000 --- a/node_modules/lodash/fp/identity.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('identity', require('../identity'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/inRange.js b/node_modules/lodash/fp/inRange.js deleted file mode 100644 index 202d940..0000000 --- a/node_modules/lodash/fp/inRange.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('inRange', require('../inRange')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/includes.js b/node_modules/lodash/fp/includes.js deleted file mode 100644 index 1146780..0000000 --- a/node_modules/lodash/fp/includes.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('includes', require('../includes')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/includesFrom.js b/node_modules/lodash/fp/includesFrom.js deleted file mode 100644 index 683afdb..0000000 --- a/node_modules/lodash/fp/includesFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('includesFrom', require('../includes')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/indexBy.js b/node_modules/lodash/fp/indexBy.js deleted file mode 100644 index 7e64bc0..0000000 --- a/node_modules/lodash/fp/indexBy.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./keyBy'); diff --git a/node_modules/lodash/fp/indexOf.js b/node_modules/lodash/fp/indexOf.js deleted file mode 100644 index 524658e..0000000 --- a/node_modules/lodash/fp/indexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('indexOf', require('../indexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/indexOfFrom.js b/node_modules/lodash/fp/indexOfFrom.js deleted file mode 100644 index d99c822..0000000 --- a/node_modules/lodash/fp/indexOfFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('indexOfFrom', require('../indexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/init.js b/node_modules/lodash/fp/init.js deleted file mode 100644 index 2f88d8b..0000000 --- a/node_modules/lodash/fp/init.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./initial'); diff --git a/node_modules/lodash/fp/initial.js b/node_modules/lodash/fp/initial.js deleted file mode 100644 index b732ba0..0000000 --- a/node_modules/lodash/fp/initial.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('initial', require('../initial'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/intersection.js b/node_modules/lodash/fp/intersection.js deleted file mode 100644 index 52936d5..0000000 --- a/node_modules/lodash/fp/intersection.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersection', require('../intersection')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/intersectionBy.js b/node_modules/lodash/fp/intersectionBy.js deleted file mode 100644 index 72629f2..0000000 --- a/node_modules/lodash/fp/intersectionBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersectionBy', require('../intersectionBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/intersectionWith.js b/node_modules/lodash/fp/intersectionWith.js deleted file mode 100644 index e064f40..0000000 --- a/node_modules/lodash/fp/intersectionWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersectionWith', require('../intersectionWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invert.js b/node_modules/lodash/fp/invert.js deleted file mode 100644 index 2d5d1f0..0000000 --- a/node_modules/lodash/fp/invert.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invert', require('../invert')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invertBy.js b/node_modules/lodash/fp/invertBy.js deleted file mode 100644 index 63ca97e..0000000 --- a/node_modules/lodash/fp/invertBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invertBy', require('../invertBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invertObj.js b/node_modules/lodash/fp/invertObj.js deleted file mode 100644 index f1d842e..0000000 --- a/node_modules/lodash/fp/invertObj.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./invert'); diff --git a/node_modules/lodash/fp/invoke.js b/node_modules/lodash/fp/invoke.js deleted file mode 100644 index fcf17f0..0000000 --- a/node_modules/lodash/fp/invoke.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invoke', require('../invoke')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invokeArgs.js b/node_modules/lodash/fp/invokeArgs.js deleted file mode 100644 index d3f2953..0000000 --- a/node_modules/lodash/fp/invokeArgs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeArgs', require('../invoke')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invokeArgsMap.js b/node_modules/lodash/fp/invokeArgsMap.js deleted file mode 100644 index eaa9f84..0000000 --- a/node_modules/lodash/fp/invokeArgsMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeArgsMap', require('../invokeMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invokeMap.js b/node_modules/lodash/fp/invokeMap.js deleted file mode 100644 index 6515fd7..0000000 --- a/node_modules/lodash/fp/invokeMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeMap', require('../invokeMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArguments.js b/node_modules/lodash/fp/isArguments.js deleted file mode 100644 index 1d93c9e..0000000 --- a/node_modules/lodash/fp/isArguments.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArguments', require('../isArguments'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArray.js b/node_modules/lodash/fp/isArray.js deleted file mode 100644 index ba7ade8..0000000 --- a/node_modules/lodash/fp/isArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArray', require('../isArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArrayBuffer.js b/node_modules/lodash/fp/isArrayBuffer.js deleted file mode 100644 index 5088513..0000000 --- a/node_modules/lodash/fp/isArrayBuffer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArrayLike.js b/node_modules/lodash/fp/isArrayLike.js deleted file mode 100644 index 8f1856b..0000000 --- a/node_modules/lodash/fp/isArrayLike.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArrayLikeObject.js b/node_modules/lodash/fp/isArrayLikeObject.js deleted file mode 100644 index 2108498..0000000 --- a/node_modules/lodash/fp/isArrayLikeObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isBoolean.js b/node_modules/lodash/fp/isBoolean.js deleted file mode 100644 index 9339f75..0000000 --- a/node_modules/lodash/fp/isBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isBuffer.js b/node_modules/lodash/fp/isBuffer.js deleted file mode 100644 index e60b123..0000000 --- a/node_modules/lodash/fp/isBuffer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isDate.js b/node_modules/lodash/fp/isDate.js deleted file mode 100644 index dc41d08..0000000 --- a/node_modules/lodash/fp/isDate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isDate', require('../isDate'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isElement.js b/node_modules/lodash/fp/isElement.js deleted file mode 100644 index 18ee039..0000000 --- a/node_modules/lodash/fp/isElement.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isElement', require('../isElement'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isEmpty.js b/node_modules/lodash/fp/isEmpty.js deleted file mode 100644 index 0f4ae84..0000000 --- a/node_modules/lodash/fp/isEmpty.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isEqual.js b/node_modules/lodash/fp/isEqual.js deleted file mode 100644 index 4138386..0000000 --- a/node_modules/lodash/fp/isEqual.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEqual', require('../isEqual')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isEqualWith.js b/node_modules/lodash/fp/isEqualWith.js deleted file mode 100644 index 029ff5c..0000000 --- a/node_modules/lodash/fp/isEqualWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEqualWith', require('../isEqualWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isError.js b/node_modules/lodash/fp/isError.js deleted file mode 100644 index 3dfd81c..0000000 --- a/node_modules/lodash/fp/isError.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isError', require('../isError'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isFinite.js b/node_modules/lodash/fp/isFinite.js deleted file mode 100644 index 0b647b8..0000000 --- a/node_modules/lodash/fp/isFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isFinite', require('../isFinite'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isFunction.js b/node_modules/lodash/fp/isFunction.js deleted file mode 100644 index ff8e5c4..0000000 --- a/node_modules/lodash/fp/isFunction.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isInteger.js b/node_modules/lodash/fp/isInteger.js deleted file mode 100644 index 67af4ff..0000000 --- a/node_modules/lodash/fp/isInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isInteger', require('../isInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isLength.js b/node_modules/lodash/fp/isLength.js deleted file mode 100644 index fc101c5..0000000 --- a/node_modules/lodash/fp/isLength.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isLength', require('../isLength'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isMap.js b/node_modules/lodash/fp/isMap.js deleted file mode 100644 index a209aa6..0000000 --- a/node_modules/lodash/fp/isMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMap', require('../isMap'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isMatch.js b/node_modules/lodash/fp/isMatch.js deleted file mode 100644 index 6264ca1..0000000 --- a/node_modules/lodash/fp/isMatch.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMatch', require('../isMatch')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isMatchWith.js b/node_modules/lodash/fp/isMatchWith.js deleted file mode 100644 index d95f319..0000000 --- a/node_modules/lodash/fp/isMatchWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMatchWith', require('../isMatchWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNaN.js b/node_modules/lodash/fp/isNaN.js deleted file mode 100644 index 66a978f..0000000 --- a/node_modules/lodash/fp/isNaN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNative.js b/node_modules/lodash/fp/isNative.js deleted file mode 100644 index 3d775ba..0000000 --- a/node_modules/lodash/fp/isNative.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNative', require('../isNative'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNil.js b/node_modules/lodash/fp/isNil.js deleted file mode 100644 index 5952c02..0000000 --- a/node_modules/lodash/fp/isNil.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNil', require('../isNil'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNull.js b/node_modules/lodash/fp/isNull.js deleted file mode 100644 index f201a35..0000000 --- a/node_modules/lodash/fp/isNull.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNull', require('../isNull'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNumber.js b/node_modules/lodash/fp/isNumber.js deleted file mode 100644 index a2b5fa0..0000000 --- a/node_modules/lodash/fp/isNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isObject.js b/node_modules/lodash/fp/isObject.js deleted file mode 100644 index 231ace0..0000000 --- a/node_modules/lodash/fp/isObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isObject', require('../isObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isObjectLike.js b/node_modules/lodash/fp/isObjectLike.js deleted file mode 100644 index f16082e..0000000 --- a/node_modules/lodash/fp/isObjectLike.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isPlainObject.js b/node_modules/lodash/fp/isPlainObject.js deleted file mode 100644 index b5bea90..0000000 --- a/node_modules/lodash/fp/isPlainObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isRegExp.js b/node_modules/lodash/fp/isRegExp.js deleted file mode 100644 index 12a1a3d..0000000 --- a/node_modules/lodash/fp/isRegExp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isSafeInteger.js b/node_modules/lodash/fp/isSafeInteger.js deleted file mode 100644 index 7230f55..0000000 --- a/node_modules/lodash/fp/isSafeInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isSet.js b/node_modules/lodash/fp/isSet.js deleted file mode 100644 index 35c01f6..0000000 --- a/node_modules/lodash/fp/isSet.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSet', require('../isSet'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isString.js b/node_modules/lodash/fp/isString.js deleted file mode 100644 index 1fd0679..0000000 --- a/node_modules/lodash/fp/isString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isString', require('../isString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isSymbol.js b/node_modules/lodash/fp/isSymbol.js deleted file mode 100644 index 3867695..0000000 --- a/node_modules/lodash/fp/isSymbol.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isTypedArray.js b/node_modules/lodash/fp/isTypedArray.js deleted file mode 100644 index 8567953..0000000 --- a/node_modules/lodash/fp/isTypedArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isUndefined.js b/node_modules/lodash/fp/isUndefined.js deleted file mode 100644 index ddbca31..0000000 --- a/node_modules/lodash/fp/isUndefined.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isWeakMap.js b/node_modules/lodash/fp/isWeakMap.js deleted file mode 100644 index ef60c61..0000000 --- a/node_modules/lodash/fp/isWeakMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isWeakSet.js b/node_modules/lodash/fp/isWeakSet.js deleted file mode 100644 index c99bfaa..0000000 --- a/node_modules/lodash/fp/isWeakSet.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/iteratee.js b/node_modules/lodash/fp/iteratee.js deleted file mode 100644 index 9f0f717..0000000 --- a/node_modules/lodash/fp/iteratee.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('iteratee', require('../iteratee')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/join.js b/node_modules/lodash/fp/join.js deleted file mode 100644 index a220e00..0000000 --- a/node_modules/lodash/fp/join.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('join', require('../join')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/juxt.js b/node_modules/lodash/fp/juxt.js deleted file mode 100644 index f71e04e..0000000 --- a/node_modules/lodash/fp/juxt.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./over'); diff --git a/node_modules/lodash/fp/kebabCase.js b/node_modules/lodash/fp/kebabCase.js deleted file mode 100644 index 60737f1..0000000 --- a/node_modules/lodash/fp/kebabCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/keyBy.js b/node_modules/lodash/fp/keyBy.js deleted file mode 100644 index 9a6a85d..0000000 --- a/node_modules/lodash/fp/keyBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keyBy', require('../keyBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/keys.js b/node_modules/lodash/fp/keys.js deleted file mode 100644 index e12bb07..0000000 --- a/node_modules/lodash/fp/keys.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keys', require('../keys'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/keysIn.js b/node_modules/lodash/fp/keysIn.js deleted file mode 100644 index f3eb36a..0000000 --- a/node_modules/lodash/fp/keysIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keysIn', require('../keysIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lang.js b/node_modules/lodash/fp/lang.js deleted file mode 100644 index 08cc9c1..0000000 --- a/node_modules/lodash/fp/lang.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../lang')); diff --git a/node_modules/lodash/fp/last.js b/node_modules/lodash/fp/last.js deleted file mode 100644 index 0f71699..0000000 --- a/node_modules/lodash/fp/last.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('last', require('../last'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lastIndexOf.js b/node_modules/lodash/fp/lastIndexOf.js deleted file mode 100644 index ddf39c3..0000000 --- a/node_modules/lodash/fp/lastIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lastIndexOf', require('../lastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lastIndexOfFrom.js b/node_modules/lodash/fp/lastIndexOfFrom.js deleted file mode 100644 index 1ff6a0b..0000000 --- a/node_modules/lodash/fp/lastIndexOfFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lastIndexOfFrom', require('../lastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lowerCase.js b/node_modules/lodash/fp/lowerCase.js deleted file mode 100644 index ea64bc1..0000000 --- a/node_modules/lodash/fp/lowerCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lowerFirst.js b/node_modules/lodash/fp/lowerFirst.js deleted file mode 100644 index 539720a..0000000 --- a/node_modules/lodash/fp/lowerFirst.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lt.js b/node_modules/lodash/fp/lt.js deleted file mode 100644 index a31d21e..0000000 --- a/node_modules/lodash/fp/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lt', require('../lt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lte.js b/node_modules/lodash/fp/lte.js deleted file mode 100644 index d795d10..0000000 --- a/node_modules/lodash/fp/lte.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lte', require('../lte')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/map.js b/node_modules/lodash/fp/map.js deleted file mode 100644 index cf98794..0000000 --- a/node_modules/lodash/fp/map.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('map', require('../map')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mapKeys.js b/node_modules/lodash/fp/mapKeys.js deleted file mode 100644 index 1684587..0000000 --- a/node_modules/lodash/fp/mapKeys.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mapKeys', require('../mapKeys')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mapValues.js b/node_modules/lodash/fp/mapValues.js deleted file mode 100644 index 4004972..0000000 --- a/node_modules/lodash/fp/mapValues.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mapValues', require('../mapValues')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/matches.js b/node_modules/lodash/fp/matches.js deleted file mode 100644 index 29d1e1e..0000000 --- a/node_modules/lodash/fp/matches.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isMatch'); diff --git a/node_modules/lodash/fp/matchesProperty.js b/node_modules/lodash/fp/matchesProperty.js deleted file mode 100644 index 4575bd2..0000000 --- a/node_modules/lodash/fp/matchesProperty.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('matchesProperty', require('../matchesProperty')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/math.js b/node_modules/lodash/fp/math.js deleted file mode 100644 index e8f50f7..0000000 --- a/node_modules/lodash/fp/math.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../math')); diff --git a/node_modules/lodash/fp/max.js b/node_modules/lodash/fp/max.js deleted file mode 100644 index a66acac..0000000 --- a/node_modules/lodash/fp/max.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('max', require('../max'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/maxBy.js b/node_modules/lodash/fp/maxBy.js deleted file mode 100644 index d083fd6..0000000 --- a/node_modules/lodash/fp/maxBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('maxBy', require('../maxBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mean.js b/node_modules/lodash/fp/mean.js deleted file mode 100644 index 3117246..0000000 --- a/node_modules/lodash/fp/mean.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mean', require('../mean'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/meanBy.js b/node_modules/lodash/fp/meanBy.js deleted file mode 100644 index 556f25e..0000000 --- a/node_modules/lodash/fp/meanBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('meanBy', require('../meanBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/memoize.js b/node_modules/lodash/fp/memoize.js deleted file mode 100644 index 638eec6..0000000 --- a/node_modules/lodash/fp/memoize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('memoize', require('../memoize')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/merge.js b/node_modules/lodash/fp/merge.js deleted file mode 100644 index ac66add..0000000 --- a/node_modules/lodash/fp/merge.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('merge', require('../merge')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mergeAll.js b/node_modules/lodash/fp/mergeAll.js deleted file mode 100644 index a3674d6..0000000 --- a/node_modules/lodash/fp/mergeAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeAll', require('../merge')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mergeAllWith.js b/node_modules/lodash/fp/mergeAllWith.js deleted file mode 100644 index 4bd4206..0000000 --- a/node_modules/lodash/fp/mergeAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeAllWith', require('../mergeWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mergeWith.js b/node_modules/lodash/fp/mergeWith.js deleted file mode 100644 index 00d44d5..0000000 --- a/node_modules/lodash/fp/mergeWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeWith', require('../mergeWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/method.js b/node_modules/lodash/fp/method.js deleted file mode 100644 index f4060c6..0000000 --- a/node_modules/lodash/fp/method.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('method', require('../method')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/methodOf.js b/node_modules/lodash/fp/methodOf.js deleted file mode 100644 index 6139905..0000000 --- a/node_modules/lodash/fp/methodOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('methodOf', require('../methodOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/min.js b/node_modules/lodash/fp/min.js deleted file mode 100644 index d12c6b4..0000000 --- a/node_modules/lodash/fp/min.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('min', require('../min'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/minBy.js b/node_modules/lodash/fp/minBy.js deleted file mode 100644 index fdb9e24..0000000 --- a/node_modules/lodash/fp/minBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('minBy', require('../minBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mixin.js b/node_modules/lodash/fp/mixin.js deleted file mode 100644 index 332e6fb..0000000 --- a/node_modules/lodash/fp/mixin.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mixin', require('../mixin')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/multiply.js b/node_modules/lodash/fp/multiply.js deleted file mode 100644 index 4dcf0b0..0000000 --- a/node_modules/lodash/fp/multiply.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('multiply', require('../multiply')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/nAry.js b/node_modules/lodash/fp/nAry.js deleted file mode 100644 index f262a76..0000000 --- a/node_modules/lodash/fp/nAry.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./ary'); diff --git a/node_modules/lodash/fp/negate.js b/node_modules/lodash/fp/negate.js deleted file mode 100644 index 8b6dc7c..0000000 --- a/node_modules/lodash/fp/negate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('negate', require('../negate'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/next.js b/node_modules/lodash/fp/next.js deleted file mode 100644 index 140155e..0000000 --- a/node_modules/lodash/fp/next.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('next', require('../next'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/noop.js b/node_modules/lodash/fp/noop.js deleted file mode 100644 index b9e32cc..0000000 --- a/node_modules/lodash/fp/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('noop', require('../noop'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/now.js b/node_modules/lodash/fp/now.js deleted file mode 100644 index 6de2068..0000000 --- a/node_modules/lodash/fp/now.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('now', require('../now'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/nth.js b/node_modules/lodash/fp/nth.js deleted file mode 100644 index da4fda7..0000000 --- a/node_modules/lodash/fp/nth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('nth', require('../nth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/nthArg.js b/node_modules/lodash/fp/nthArg.js deleted file mode 100644 index fce3165..0000000 --- a/node_modules/lodash/fp/nthArg.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('nthArg', require('../nthArg')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/number.js b/node_modules/lodash/fp/number.js deleted file mode 100644 index 5c10b88..0000000 --- a/node_modules/lodash/fp/number.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../number')); diff --git a/node_modules/lodash/fp/object.js b/node_modules/lodash/fp/object.js deleted file mode 100644 index ae39a13..0000000 --- a/node_modules/lodash/fp/object.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../object')); diff --git a/node_modules/lodash/fp/omit.js b/node_modules/lodash/fp/omit.js deleted file mode 100644 index fd68529..0000000 --- a/node_modules/lodash/fp/omit.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('omit', require('../omit')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/omitAll.js b/node_modules/lodash/fp/omitAll.js deleted file mode 100644 index 144cf4b..0000000 --- a/node_modules/lodash/fp/omitAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./omit'); diff --git a/node_modules/lodash/fp/omitBy.js b/node_modules/lodash/fp/omitBy.js deleted file mode 100644 index 90df738..0000000 --- a/node_modules/lodash/fp/omitBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('omitBy', require('../omitBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/once.js b/node_modules/lodash/fp/once.js deleted file mode 100644 index f8f0a5c..0000000 --- a/node_modules/lodash/fp/once.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('once', require('../once'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/orderBy.js b/node_modules/lodash/fp/orderBy.js deleted file mode 100644 index 848e210..0000000 --- a/node_modules/lodash/fp/orderBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('orderBy', require('../orderBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/over.js b/node_modules/lodash/fp/over.js deleted file mode 100644 index 01eba7b..0000000 --- a/node_modules/lodash/fp/over.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('over', require('../over')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/overArgs.js b/node_modules/lodash/fp/overArgs.js deleted file mode 100644 index 738556f..0000000 --- a/node_modules/lodash/fp/overArgs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overArgs', require('../overArgs')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/overEvery.js b/node_modules/lodash/fp/overEvery.js deleted file mode 100644 index 9f5a032..0000000 --- a/node_modules/lodash/fp/overEvery.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overEvery', require('../overEvery')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/overSome.js b/node_modules/lodash/fp/overSome.js deleted file mode 100644 index 15939d5..0000000 --- a/node_modules/lodash/fp/overSome.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overSome', require('../overSome')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pad.js b/node_modules/lodash/fp/pad.js deleted file mode 100644 index f1dea4a..0000000 --- a/node_modules/lodash/fp/pad.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pad', require('../pad')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padChars.js b/node_modules/lodash/fp/padChars.js deleted file mode 100644 index d6e0804..0000000 --- a/node_modules/lodash/fp/padChars.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padChars', require('../pad')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padCharsEnd.js b/node_modules/lodash/fp/padCharsEnd.js deleted file mode 100644 index d4ab79a..0000000 --- a/node_modules/lodash/fp/padCharsEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padCharsEnd', require('../padEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padCharsStart.js b/node_modules/lodash/fp/padCharsStart.js deleted file mode 100644 index a08a300..0000000 --- a/node_modules/lodash/fp/padCharsStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padCharsStart', require('../padStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padEnd.js b/node_modules/lodash/fp/padEnd.js deleted file mode 100644 index a8522ec..0000000 --- a/node_modules/lodash/fp/padEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padEnd', require('../padEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padStart.js b/node_modules/lodash/fp/padStart.js deleted file mode 100644 index f4ca79d..0000000 --- a/node_modules/lodash/fp/padStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padStart', require('../padStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/parseInt.js b/node_modules/lodash/fp/parseInt.js deleted file mode 100644 index 27314cc..0000000 --- a/node_modules/lodash/fp/parseInt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('parseInt', require('../parseInt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/partial.js b/node_modules/lodash/fp/partial.js deleted file mode 100644 index 5d46015..0000000 --- a/node_modules/lodash/fp/partial.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partial', require('../partial')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/partialRight.js b/node_modules/lodash/fp/partialRight.js deleted file mode 100644 index 7f05fed..0000000 --- a/node_modules/lodash/fp/partialRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partialRight', require('../partialRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/partition.js b/node_modules/lodash/fp/partition.js deleted file mode 100644 index 2ebcacc..0000000 --- a/node_modules/lodash/fp/partition.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partition', require('../partition')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/path.js b/node_modules/lodash/fp/path.js deleted file mode 100644 index b29cfb2..0000000 --- a/node_modules/lodash/fp/path.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/node_modules/lodash/fp/pathEq.js b/node_modules/lodash/fp/pathEq.js deleted file mode 100644 index 36c027a..0000000 --- a/node_modules/lodash/fp/pathEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./matchesProperty'); diff --git a/node_modules/lodash/fp/pathOr.js b/node_modules/lodash/fp/pathOr.js deleted file mode 100644 index 4ab5820..0000000 --- a/node_modules/lodash/fp/pathOr.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./getOr'); diff --git a/node_modules/lodash/fp/paths.js b/node_modules/lodash/fp/paths.js deleted file mode 100644 index 1eb7950..0000000 --- a/node_modules/lodash/fp/paths.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./at'); diff --git a/node_modules/lodash/fp/pick.js b/node_modules/lodash/fp/pick.js deleted file mode 100644 index 197393d..0000000 --- a/node_modules/lodash/fp/pick.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pick', require('../pick')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pickAll.js b/node_modules/lodash/fp/pickAll.js deleted file mode 100644 index a8ecd46..0000000 --- a/node_modules/lodash/fp/pickAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./pick'); diff --git a/node_modules/lodash/fp/pickBy.js b/node_modules/lodash/fp/pickBy.js deleted file mode 100644 index d832d16..0000000 --- a/node_modules/lodash/fp/pickBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pickBy', require('../pickBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pipe.js b/node_modules/lodash/fp/pipe.js deleted file mode 100644 index b2e1e2c..0000000 --- a/node_modules/lodash/fp/pipe.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flow'); diff --git a/node_modules/lodash/fp/placeholder.js b/node_modules/lodash/fp/placeholder.js deleted file mode 100644 index 1ce1739..0000000 --- a/node_modules/lodash/fp/placeholder.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * The default argument placeholder value for methods. - * - * @type {Object} - */ -module.exports = {}; diff --git a/node_modules/lodash/fp/plant.js b/node_modules/lodash/fp/plant.js deleted file mode 100644 index eca8f32..0000000 --- a/node_modules/lodash/fp/plant.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('plant', require('../plant'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pluck.js b/node_modules/lodash/fp/pluck.js deleted file mode 100644 index 0d1e1ab..0000000 --- a/node_modules/lodash/fp/pluck.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./map'); diff --git a/node_modules/lodash/fp/prop.js b/node_modules/lodash/fp/prop.js deleted file mode 100644 index b29cfb2..0000000 --- a/node_modules/lodash/fp/prop.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/node_modules/lodash/fp/propEq.js b/node_modules/lodash/fp/propEq.js deleted file mode 100644 index 36c027a..0000000 --- a/node_modules/lodash/fp/propEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./matchesProperty'); diff --git a/node_modules/lodash/fp/propOr.js b/node_modules/lodash/fp/propOr.js deleted file mode 100644 index 4ab5820..0000000 --- a/node_modules/lodash/fp/propOr.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./getOr'); diff --git a/node_modules/lodash/fp/property.js b/node_modules/lodash/fp/property.js deleted file mode 100644 index b29cfb2..0000000 --- a/node_modules/lodash/fp/property.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/node_modules/lodash/fp/propertyOf.js b/node_modules/lodash/fp/propertyOf.js deleted file mode 100644 index f6273ee..0000000 --- a/node_modules/lodash/fp/propertyOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('propertyOf', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/props.js b/node_modules/lodash/fp/props.js deleted file mode 100644 index 1eb7950..0000000 --- a/node_modules/lodash/fp/props.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./at'); diff --git a/node_modules/lodash/fp/pull.js b/node_modules/lodash/fp/pull.js deleted file mode 100644 index 8d7084f..0000000 --- a/node_modules/lodash/fp/pull.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pull', require('../pull')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pullAll.js b/node_modules/lodash/fp/pullAll.js deleted file mode 100644 index 98d5c9a..0000000 --- a/node_modules/lodash/fp/pullAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAll', require('../pullAll')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pullAllBy.js b/node_modules/lodash/fp/pullAllBy.js deleted file mode 100644 index 876bc3b..0000000 --- a/node_modules/lodash/fp/pullAllBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAllBy', require('../pullAllBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pullAllWith.js b/node_modules/lodash/fp/pullAllWith.js deleted file mode 100644 index f71ba4d..0000000 --- a/node_modules/lodash/fp/pullAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAllWith', require('../pullAllWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pullAt.js b/node_modules/lodash/fp/pullAt.js deleted file mode 100644 index e8b3bb6..0000000 --- a/node_modules/lodash/fp/pullAt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAt', require('../pullAt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/random.js b/node_modules/lodash/fp/random.js deleted file mode 100644 index 99d852e..0000000 --- a/node_modules/lodash/fp/random.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('random', require('../random')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/range.js b/node_modules/lodash/fp/range.js deleted file mode 100644 index a6bb591..0000000 --- a/node_modules/lodash/fp/range.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('range', require('../range')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rangeRight.js b/node_modules/lodash/fp/rangeRight.js deleted file mode 100644 index fdb712f..0000000 --- a/node_modules/lodash/fp/rangeRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeRight', require('../rangeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rangeStep.js b/node_modules/lodash/fp/rangeStep.js deleted file mode 100644 index d72dfc2..0000000 --- a/node_modules/lodash/fp/rangeStep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeStep', require('../range')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rangeStepRight.js b/node_modules/lodash/fp/rangeStepRight.js deleted file mode 100644 index 8b2a67b..0000000 --- a/node_modules/lodash/fp/rangeStepRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeStepRight', require('../rangeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rearg.js b/node_modules/lodash/fp/rearg.js deleted file mode 100644 index 678e02a..0000000 --- a/node_modules/lodash/fp/rearg.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rearg', require('../rearg')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/reduce.js b/node_modules/lodash/fp/reduce.js deleted file mode 100644 index 4cef0a0..0000000 --- a/node_modules/lodash/fp/reduce.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reduce', require('../reduce')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/reduceRight.js b/node_modules/lodash/fp/reduceRight.js deleted file mode 100644 index caf5bb5..0000000 --- a/node_modules/lodash/fp/reduceRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reduceRight', require('../reduceRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/reject.js b/node_modules/lodash/fp/reject.js deleted file mode 100644 index c163273..0000000 --- a/node_modules/lodash/fp/reject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reject', require('../reject')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/remove.js b/node_modules/lodash/fp/remove.js deleted file mode 100644 index e9d1327..0000000 --- a/node_modules/lodash/fp/remove.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('remove', require('../remove')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/repeat.js b/node_modules/lodash/fp/repeat.js deleted file mode 100644 index 08470f2..0000000 --- a/node_modules/lodash/fp/repeat.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('repeat', require('../repeat')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/replace.js b/node_modules/lodash/fp/replace.js deleted file mode 100644 index 2227db6..0000000 --- a/node_modules/lodash/fp/replace.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('replace', require('../replace')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rest.js b/node_modules/lodash/fp/rest.js deleted file mode 100644 index c1f3d64..0000000 --- a/node_modules/lodash/fp/rest.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rest', require('../rest')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/restFrom.js b/node_modules/lodash/fp/restFrom.js deleted file mode 100644 index 714e42b..0000000 --- a/node_modules/lodash/fp/restFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('restFrom', require('../rest')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/result.js b/node_modules/lodash/fp/result.js deleted file mode 100644 index f86ce07..0000000 --- a/node_modules/lodash/fp/result.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('result', require('../result')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/reverse.js b/node_modules/lodash/fp/reverse.js deleted file mode 100644 index 07c9f5e..0000000 --- a/node_modules/lodash/fp/reverse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reverse', require('../reverse')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/round.js b/node_modules/lodash/fp/round.js deleted file mode 100644 index 4c0e5c8..0000000 --- a/node_modules/lodash/fp/round.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('round', require('../round')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sample.js b/node_modules/lodash/fp/sample.js deleted file mode 100644 index 6bea125..0000000 --- a/node_modules/lodash/fp/sample.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sample', require('../sample'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sampleSize.js b/node_modules/lodash/fp/sampleSize.js deleted file mode 100644 index 359ed6f..0000000 --- a/node_modules/lodash/fp/sampleSize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sampleSize', require('../sampleSize')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/seq.js b/node_modules/lodash/fp/seq.js deleted file mode 100644 index d8f42b0..0000000 --- a/node_modules/lodash/fp/seq.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../seq')); diff --git a/node_modules/lodash/fp/set.js b/node_modules/lodash/fp/set.js deleted file mode 100644 index 0b56a56..0000000 --- a/node_modules/lodash/fp/set.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('set', require('../set')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/setWith.js b/node_modules/lodash/fp/setWith.js deleted file mode 100644 index 0b58495..0000000 --- a/node_modules/lodash/fp/setWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('setWith', require('../setWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/shuffle.js b/node_modules/lodash/fp/shuffle.js deleted file mode 100644 index aa3a1ca..0000000 --- a/node_modules/lodash/fp/shuffle.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('shuffle', require('../shuffle'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/size.js b/node_modules/lodash/fp/size.js deleted file mode 100644 index 7490136..0000000 --- a/node_modules/lodash/fp/size.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('size', require('../size'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/slice.js b/node_modules/lodash/fp/slice.js deleted file mode 100644 index 15945d3..0000000 --- a/node_modules/lodash/fp/slice.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('slice', require('../slice')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/snakeCase.js b/node_modules/lodash/fp/snakeCase.js deleted file mode 100644 index a0ff780..0000000 --- a/node_modules/lodash/fp/snakeCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/some.js b/node_modules/lodash/fp/some.js deleted file mode 100644 index a4fa2d0..0000000 --- a/node_modules/lodash/fp/some.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('some', require('../some')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortBy.js b/node_modules/lodash/fp/sortBy.js deleted file mode 100644 index e0790ad..0000000 --- a/node_modules/lodash/fp/sortBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortBy', require('../sortBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndex.js b/node_modules/lodash/fp/sortedIndex.js deleted file mode 100644 index 364a054..0000000 --- a/node_modules/lodash/fp/sortedIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndex', require('../sortedIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndexBy.js b/node_modules/lodash/fp/sortedIndexBy.js deleted file mode 100644 index 9593dbd..0000000 --- a/node_modules/lodash/fp/sortedIndexBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndexBy', require('../sortedIndexBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndexOf.js b/node_modules/lodash/fp/sortedIndexOf.js deleted file mode 100644 index c9084ca..0000000 --- a/node_modules/lodash/fp/sortedIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndexOf', require('../sortedIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndex.js b/node_modules/lodash/fp/sortedLastIndex.js deleted file mode 100644 index 47fe241..0000000 --- a/node_modules/lodash/fp/sortedLastIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndex', require('../sortedLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndexBy.js b/node_modules/lodash/fp/sortedLastIndexBy.js deleted file mode 100644 index 0f9a347..0000000 --- a/node_modules/lodash/fp/sortedLastIndexBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndexOf.js b/node_modules/lodash/fp/sortedLastIndexOf.js deleted file mode 100644 index 0d4d932..0000000 --- a/node_modules/lodash/fp/sortedLastIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedUniq.js b/node_modules/lodash/fp/sortedUniq.js deleted file mode 100644 index 882d283..0000000 --- a/node_modules/lodash/fp/sortedUniq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedUniqBy.js b/node_modules/lodash/fp/sortedUniqBy.js deleted file mode 100644 index 033db91..0000000 --- a/node_modules/lodash/fp/sortedUniqBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedUniqBy', require('../sortedUniqBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/split.js b/node_modules/lodash/fp/split.js deleted file mode 100644 index 14de1a7..0000000 --- a/node_modules/lodash/fp/split.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('split', require('../split')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/spread.js b/node_modules/lodash/fp/spread.js deleted file mode 100644 index 2d11b70..0000000 --- a/node_modules/lodash/fp/spread.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('spread', require('../spread')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/spreadFrom.js b/node_modules/lodash/fp/spreadFrom.js deleted file mode 100644 index 0b630df..0000000 --- a/node_modules/lodash/fp/spreadFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('spreadFrom', require('../spread')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/startCase.js b/node_modules/lodash/fp/startCase.js deleted file mode 100644 index ada98c9..0000000 --- a/node_modules/lodash/fp/startCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('startCase', require('../startCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/startsWith.js b/node_modules/lodash/fp/startsWith.js deleted file mode 100644 index 985e2f2..0000000 --- a/node_modules/lodash/fp/startsWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('startsWith', require('../startsWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/string.js b/node_modules/lodash/fp/string.js deleted file mode 100644 index 773b037..0000000 --- a/node_modules/lodash/fp/string.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../string')); diff --git a/node_modules/lodash/fp/stubArray.js b/node_modules/lodash/fp/stubArray.js deleted file mode 100644 index cd604cb..0000000 --- a/node_modules/lodash/fp/stubArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubArray', require('../stubArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/stubFalse.js b/node_modules/lodash/fp/stubFalse.js deleted file mode 100644 index 3296664..0000000 --- a/node_modules/lodash/fp/stubFalse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/stubObject.js b/node_modules/lodash/fp/stubObject.js deleted file mode 100644 index c6c8ec4..0000000 --- a/node_modules/lodash/fp/stubObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/stubString.js b/node_modules/lodash/fp/stubString.js deleted file mode 100644 index 701051e..0000000 --- a/node_modules/lodash/fp/stubString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubString', require('../stubString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/stubTrue.js b/node_modules/lodash/fp/stubTrue.js deleted file mode 100644 index 9249082..0000000 --- a/node_modules/lodash/fp/stubTrue.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/subtract.js b/node_modules/lodash/fp/subtract.js deleted file mode 100644 index d32b16d..0000000 --- a/node_modules/lodash/fp/subtract.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('subtract', require('../subtract')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sum.js b/node_modules/lodash/fp/sum.js deleted file mode 100644 index 5cce12b..0000000 --- a/node_modules/lodash/fp/sum.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sum', require('../sum'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sumBy.js b/node_modules/lodash/fp/sumBy.js deleted file mode 100644 index c882656..0000000 --- a/node_modules/lodash/fp/sumBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sumBy', require('../sumBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/symmetricDifference.js b/node_modules/lodash/fp/symmetricDifference.js deleted file mode 100644 index 78c16ad..0000000 --- a/node_modules/lodash/fp/symmetricDifference.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xor'); diff --git a/node_modules/lodash/fp/symmetricDifferenceBy.js b/node_modules/lodash/fp/symmetricDifferenceBy.js deleted file mode 100644 index 298fc7f..0000000 --- a/node_modules/lodash/fp/symmetricDifferenceBy.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xorBy'); diff --git a/node_modules/lodash/fp/symmetricDifferenceWith.js b/node_modules/lodash/fp/symmetricDifferenceWith.js deleted file mode 100644 index 70bc6fa..0000000 --- a/node_modules/lodash/fp/symmetricDifferenceWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xorWith'); diff --git a/node_modules/lodash/fp/tail.js b/node_modules/lodash/fp/tail.js deleted file mode 100644 index f122f0a..0000000 --- a/node_modules/lodash/fp/tail.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('tail', require('../tail'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/take.js b/node_modules/lodash/fp/take.js deleted file mode 100644 index 9af98a7..0000000 --- a/node_modules/lodash/fp/take.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('take', require('../take')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/takeLast.js b/node_modules/lodash/fp/takeLast.js deleted file mode 100644 index e98c84a..0000000 --- a/node_modules/lodash/fp/takeLast.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./takeRight'); diff --git a/node_modules/lodash/fp/takeLastWhile.js b/node_modules/lodash/fp/takeLastWhile.js deleted file mode 100644 index 5367968..0000000 --- a/node_modules/lodash/fp/takeLastWhile.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./takeRightWhile'); diff --git a/node_modules/lodash/fp/takeRight.js b/node_modules/lodash/fp/takeRight.js deleted file mode 100644 index b82950a..0000000 --- a/node_modules/lodash/fp/takeRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeRight', require('../takeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/takeRightWhile.js b/node_modules/lodash/fp/takeRightWhile.js deleted file mode 100644 index 8ffb0a2..0000000 --- a/node_modules/lodash/fp/takeRightWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeRightWhile', require('../takeRightWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/takeWhile.js b/node_modules/lodash/fp/takeWhile.js deleted file mode 100644 index 2813664..0000000 --- a/node_modules/lodash/fp/takeWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeWhile', require('../takeWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/tap.js b/node_modules/lodash/fp/tap.js deleted file mode 100644 index d33ad6e..0000000 --- a/node_modules/lodash/fp/tap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('tap', require('../tap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/template.js b/node_modules/lodash/fp/template.js deleted file mode 100644 index 74857e1..0000000 --- a/node_modules/lodash/fp/template.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('template', require('../template')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/templateSettings.js b/node_modules/lodash/fp/templateSettings.js deleted file mode 100644 index 7bcc0a8..0000000 --- a/node_modules/lodash/fp/templateSettings.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/throttle.js b/node_modules/lodash/fp/throttle.js deleted file mode 100644 index 77fff14..0000000 --- a/node_modules/lodash/fp/throttle.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('throttle', require('../throttle')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/thru.js b/node_modules/lodash/fp/thru.js deleted file mode 100644 index d42b3b1..0000000 --- a/node_modules/lodash/fp/thru.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('thru', require('../thru')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/times.js b/node_modules/lodash/fp/times.js deleted file mode 100644 index 0dab06d..0000000 --- a/node_modules/lodash/fp/times.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('times', require('../times')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toArray.js b/node_modules/lodash/fp/toArray.js deleted file mode 100644 index f0c360a..0000000 --- a/node_modules/lodash/fp/toArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toArray', require('../toArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toFinite.js b/node_modules/lodash/fp/toFinite.js deleted file mode 100644 index 3a47687..0000000 --- a/node_modules/lodash/fp/toFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toInteger.js b/node_modules/lodash/fp/toInteger.js deleted file mode 100644 index e0af6a7..0000000 --- a/node_modules/lodash/fp/toInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toInteger', require('../toInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toIterator.js b/node_modules/lodash/fp/toIterator.js deleted file mode 100644 index 65e6baa..0000000 --- a/node_modules/lodash/fp/toIterator.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toIterator', require('../toIterator'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toJSON.js b/node_modules/lodash/fp/toJSON.js deleted file mode 100644 index 2d718d0..0000000 --- a/node_modules/lodash/fp/toJSON.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toJSON', require('../toJSON'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toLength.js b/node_modules/lodash/fp/toLength.js deleted file mode 100644 index b97cdd9..0000000 --- a/node_modules/lodash/fp/toLength.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toLength', require('../toLength'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toLower.js b/node_modules/lodash/fp/toLower.js deleted file mode 100644 index 616ef36..0000000 --- a/node_modules/lodash/fp/toLower.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toLower', require('../toLower'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toNumber.js b/node_modules/lodash/fp/toNumber.js deleted file mode 100644 index d0c6f4d..0000000 --- a/node_modules/lodash/fp/toNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toNumber', require('../toNumber'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toPairs.js b/node_modules/lodash/fp/toPairs.js deleted file mode 100644 index af78378..0000000 --- a/node_modules/lodash/fp/toPairs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toPairsIn.js b/node_modules/lodash/fp/toPairsIn.js deleted file mode 100644 index 66504ab..0000000 --- a/node_modules/lodash/fp/toPairsIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toPath.js b/node_modules/lodash/fp/toPath.js deleted file mode 100644 index b4d5e50..0000000 --- a/node_modules/lodash/fp/toPath.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPath', require('../toPath'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toPlainObject.js b/node_modules/lodash/fp/toPlainObject.js deleted file mode 100644 index 278bb86..0000000 --- a/node_modules/lodash/fp/toPlainObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toSafeInteger.js b/node_modules/lodash/fp/toSafeInteger.js deleted file mode 100644 index 367a26f..0000000 --- a/node_modules/lodash/fp/toSafeInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toString.js b/node_modules/lodash/fp/toString.js deleted file mode 100644 index cec4f8e..0000000 --- a/node_modules/lodash/fp/toString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toString', require('../toString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toUpper.js b/node_modules/lodash/fp/toUpper.js deleted file mode 100644 index 54f9a56..0000000 --- a/node_modules/lodash/fp/toUpper.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/transform.js b/node_modules/lodash/fp/transform.js deleted file mode 100644 index 759d088..0000000 --- a/node_modules/lodash/fp/transform.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('transform', require('../transform')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trim.js b/node_modules/lodash/fp/trim.js deleted file mode 100644 index e6319a7..0000000 --- a/node_modules/lodash/fp/trim.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trim', require('../trim')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimChars.js b/node_modules/lodash/fp/trimChars.js deleted file mode 100644 index c9294de..0000000 --- a/node_modules/lodash/fp/trimChars.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimChars', require('../trim')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimCharsEnd.js b/node_modules/lodash/fp/trimCharsEnd.js deleted file mode 100644 index 284bc2f..0000000 --- a/node_modules/lodash/fp/trimCharsEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimCharsEnd', require('../trimEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimCharsStart.js b/node_modules/lodash/fp/trimCharsStart.js deleted file mode 100644 index ff0ee65..0000000 --- a/node_modules/lodash/fp/trimCharsStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimCharsStart', require('../trimStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimEnd.js b/node_modules/lodash/fp/trimEnd.js deleted file mode 100644 index 7190880..0000000 --- a/node_modules/lodash/fp/trimEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimEnd', require('../trimEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimStart.js b/node_modules/lodash/fp/trimStart.js deleted file mode 100644 index fda902c..0000000 --- a/node_modules/lodash/fp/trimStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimStart', require('../trimStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/truncate.js b/node_modules/lodash/fp/truncate.js deleted file mode 100644 index d265c1d..0000000 --- a/node_modules/lodash/fp/truncate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('truncate', require('../truncate')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unapply.js b/node_modules/lodash/fp/unapply.js deleted file mode 100644 index c5dfe77..0000000 --- a/node_modules/lodash/fp/unapply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./rest'); diff --git a/node_modules/lodash/fp/unary.js b/node_modules/lodash/fp/unary.js deleted file mode 100644 index 286c945..0000000 --- a/node_modules/lodash/fp/unary.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unary', require('../unary'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unescape.js b/node_modules/lodash/fp/unescape.js deleted file mode 100644 index fddcb46..0000000 --- a/node_modules/lodash/fp/unescape.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unescape', require('../unescape'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/union.js b/node_modules/lodash/fp/union.js deleted file mode 100644 index ef8228d..0000000 --- a/node_modules/lodash/fp/union.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('union', require('../union')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unionBy.js b/node_modules/lodash/fp/unionBy.js deleted file mode 100644 index 603687a..0000000 --- a/node_modules/lodash/fp/unionBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unionBy', require('../unionBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unionWith.js b/node_modules/lodash/fp/unionWith.js deleted file mode 100644 index 65bb3a7..0000000 --- a/node_modules/lodash/fp/unionWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unionWith', require('../unionWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/uniq.js b/node_modules/lodash/fp/uniq.js deleted file mode 100644 index bc18524..0000000 --- a/node_modules/lodash/fp/uniq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniq', require('../uniq'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/uniqBy.js b/node_modules/lodash/fp/uniqBy.js deleted file mode 100644 index 634c6a8..0000000 --- a/node_modules/lodash/fp/uniqBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqBy', require('../uniqBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/uniqWith.js b/node_modules/lodash/fp/uniqWith.js deleted file mode 100644 index 0ec601a..0000000 --- a/node_modules/lodash/fp/uniqWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqWith', require('../uniqWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/uniqueId.js b/node_modules/lodash/fp/uniqueId.js deleted file mode 100644 index aa8fc2f..0000000 --- a/node_modules/lodash/fp/uniqueId.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqueId', require('../uniqueId')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unnest.js b/node_modules/lodash/fp/unnest.js deleted file mode 100644 index 5d34060..0000000 --- a/node_modules/lodash/fp/unnest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flatten'); diff --git a/node_modules/lodash/fp/unset.js b/node_modules/lodash/fp/unset.js deleted file mode 100644 index ea203a0..0000000 --- a/node_modules/lodash/fp/unset.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unset', require('../unset')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unzip.js b/node_modules/lodash/fp/unzip.js deleted file mode 100644 index cc364b3..0000000 --- a/node_modules/lodash/fp/unzip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unzip', require('../unzip'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unzipWith.js b/node_modules/lodash/fp/unzipWith.js deleted file mode 100644 index 182eaa1..0000000 --- a/node_modules/lodash/fp/unzipWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unzipWith', require('../unzipWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/update.js b/node_modules/lodash/fp/update.js deleted file mode 100644 index b8ce2cc..0000000 --- a/node_modules/lodash/fp/update.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('update', require('../update')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/updateWith.js b/node_modules/lodash/fp/updateWith.js deleted file mode 100644 index d5e8282..0000000 --- a/node_modules/lodash/fp/updateWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('updateWith', require('../updateWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/upperCase.js b/node_modules/lodash/fp/upperCase.js deleted file mode 100644 index c886f20..0000000 --- a/node_modules/lodash/fp/upperCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('upperCase', require('../upperCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/upperFirst.js b/node_modules/lodash/fp/upperFirst.js deleted file mode 100644 index d8c04df..0000000 --- a/node_modules/lodash/fp/upperFirst.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/useWith.js b/node_modules/lodash/fp/useWith.js deleted file mode 100644 index d8b3df5..0000000 --- a/node_modules/lodash/fp/useWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overArgs'); diff --git a/node_modules/lodash/fp/util.js b/node_modules/lodash/fp/util.js deleted file mode 100644 index 18c00ba..0000000 --- a/node_modules/lodash/fp/util.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../util')); diff --git a/node_modules/lodash/fp/value.js b/node_modules/lodash/fp/value.js deleted file mode 100644 index 555eec7..0000000 --- a/node_modules/lodash/fp/value.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('value', require('../value'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/valueOf.js b/node_modules/lodash/fp/valueOf.js deleted file mode 100644 index f968807..0000000 --- a/node_modules/lodash/fp/valueOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/values.js b/node_modules/lodash/fp/values.js deleted file mode 100644 index 2dfc561..0000000 --- a/node_modules/lodash/fp/values.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('values', require('../values'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/valuesIn.js b/node_modules/lodash/fp/valuesIn.js deleted file mode 100644 index a1b2bb8..0000000 --- a/node_modules/lodash/fp/valuesIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/where.js b/node_modules/lodash/fp/where.js deleted file mode 100644 index 3247f64..0000000 --- a/node_modules/lodash/fp/where.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./conformsTo'); diff --git a/node_modules/lodash/fp/whereEq.js b/node_modules/lodash/fp/whereEq.js deleted file mode 100644 index 29d1e1e..0000000 --- a/node_modules/lodash/fp/whereEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isMatch'); diff --git a/node_modules/lodash/fp/without.js b/node_modules/lodash/fp/without.js deleted file mode 100644 index bad9e12..0000000 --- a/node_modules/lodash/fp/without.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('without', require('../without')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/words.js b/node_modules/lodash/fp/words.js deleted file mode 100644 index 4a90141..0000000 --- a/node_modules/lodash/fp/words.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('words', require('../words')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrap.js b/node_modules/lodash/fp/wrap.js deleted file mode 100644 index e93bd8a..0000000 --- a/node_modules/lodash/fp/wrap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrap', require('../wrap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperAt.js b/node_modules/lodash/fp/wrapperAt.js deleted file mode 100644 index 8f0a310..0000000 --- a/node_modules/lodash/fp/wrapperAt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperChain.js b/node_modules/lodash/fp/wrapperChain.js deleted file mode 100644 index 2a48ea2..0000000 --- a/node_modules/lodash/fp/wrapperChain.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperLodash.js b/node_modules/lodash/fp/wrapperLodash.js deleted file mode 100644 index a7162d0..0000000 --- a/node_modules/lodash/fp/wrapperLodash.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperReverse.js b/node_modules/lodash/fp/wrapperReverse.js deleted file mode 100644 index e1481aa..0000000 --- a/node_modules/lodash/fp/wrapperReverse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperValue.js b/node_modules/lodash/fp/wrapperValue.js deleted file mode 100644 index 8eb9112..0000000 --- a/node_modules/lodash/fp/wrapperValue.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/xor.js b/node_modules/lodash/fp/xor.js deleted file mode 100644 index 29e2819..0000000 --- a/node_modules/lodash/fp/xor.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xor', require('../xor')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/xorBy.js b/node_modules/lodash/fp/xorBy.js deleted file mode 100644 index b355686..0000000 --- a/node_modules/lodash/fp/xorBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xorBy', require('../xorBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/xorWith.js b/node_modules/lodash/fp/xorWith.js deleted file mode 100644 index 8e05739..0000000 --- a/node_modules/lodash/fp/xorWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xorWith', require('../xorWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zip.js b/node_modules/lodash/fp/zip.js deleted file mode 100644 index 69e147a..0000000 --- a/node_modules/lodash/fp/zip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zip', require('../zip')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zipAll.js b/node_modules/lodash/fp/zipAll.js deleted file mode 100644 index efa8ccb..0000000 --- a/node_modules/lodash/fp/zipAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipAll', require('../zip')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zipObj.js b/node_modules/lodash/fp/zipObj.js deleted file mode 100644 index f4a3453..0000000 --- a/node_modules/lodash/fp/zipObj.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./zipObject'); diff --git a/node_modules/lodash/fp/zipObject.js b/node_modules/lodash/fp/zipObject.js deleted file mode 100644 index 462dbb6..0000000 --- a/node_modules/lodash/fp/zipObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipObject', require('../zipObject')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zipObjectDeep.js b/node_modules/lodash/fp/zipObjectDeep.js deleted file mode 100644 index 53a5d33..0000000 --- a/node_modules/lodash/fp/zipObjectDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipObjectDeep', require('../zipObjectDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zipWith.js b/node_modules/lodash/fp/zipWith.js deleted file mode 100644 index c5cf9e2..0000000 --- a/node_modules/lodash/fp/zipWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipWith', require('../zipWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fromPairs.js b/node_modules/lodash/fromPairs.js deleted file mode 100644 index 39f5fb3..0000000 --- a/node_modules/lodash/fromPairs.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ -function fromPairs(pairs) { - var index = -1, - length = pairs ? pairs.length : 0, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; -} - -module.exports = fromPairs; diff --git a/node_modules/lodash/function.js b/node_modules/lodash/function.js deleted file mode 100644 index b0fc6d9..0000000 --- a/node_modules/lodash/function.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - 'after': require('./after'), - 'ary': require('./ary'), - 'before': require('./before'), - 'bind': require('./bind'), - 'bindKey': require('./bindKey'), - 'curry': require('./curry'), - 'curryRight': require('./curryRight'), - 'debounce': require('./debounce'), - 'defer': require('./defer'), - 'delay': require('./delay'), - 'flip': require('./flip'), - 'memoize': require('./memoize'), - 'negate': require('./negate'), - 'once': require('./once'), - 'overArgs': require('./overArgs'), - 'partial': require('./partial'), - 'partialRight': require('./partialRight'), - 'rearg': require('./rearg'), - 'rest': require('./rest'), - 'spread': require('./spread'), - 'throttle': require('./throttle'), - 'unary': require('./unary'), - 'wrap': require('./wrap') -}; diff --git a/node_modules/lodash/functions.js b/node_modules/lodash/functions.js deleted file mode 100644 index 9722928..0000000 --- a/node_modules/lodash/functions.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFunctions = require('./_baseFunctions'), - keys = require('./keys'); - -/** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ -function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); -} - -module.exports = functions; diff --git a/node_modules/lodash/functionsIn.js b/node_modules/lodash/functionsIn.js deleted file mode 100644 index f00345d..0000000 --- a/node_modules/lodash/functionsIn.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFunctions = require('./_baseFunctions'), - keysIn = require('./keysIn'); - -/** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ -function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); -} - -module.exports = functionsIn; diff --git a/node_modules/lodash/get.js b/node_modules/lodash/get.js deleted file mode 100644 index 8805ff9..0000000 --- a/node_modules/lodash/get.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseGet = require('./_baseGet'); - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} - -module.exports = get; diff --git a/node_modules/lodash/groupBy.js b/node_modules/lodash/groupBy.js deleted file mode 100644 index 5b73b41..0000000 --- a/node_modules/lodash/groupBy.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - createAggregator = require('./_createAggregator'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ -var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } -}); - -module.exports = groupBy; diff --git a/node_modules/lodash/gt.js b/node_modules/lodash/gt.js deleted file mode 100644 index 3a66282..0000000 --- a/node_modules/lodash/gt.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseGt = require('./_baseGt'), - createRelationalOperation = require('./_createRelationalOperation'); - -/** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ -var gt = createRelationalOperation(baseGt); - -module.exports = gt; diff --git a/node_modules/lodash/gte.js b/node_modules/lodash/gte.js deleted file mode 100644 index 4180a68..0000000 --- a/node_modules/lodash/gte.js +++ /dev/null @@ -1,30 +0,0 @@ -var createRelationalOperation = require('./_createRelationalOperation'); - -/** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ -var gte = createRelationalOperation(function(value, other) { - return value >= other; -}); - -module.exports = gte; diff --git a/node_modules/lodash/has.js b/node_modules/lodash/has.js deleted file mode 100644 index 34df55e..0000000 --- a/node_modules/lodash/has.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseHas = require('./_baseHas'), - hasPath = require('./_hasPath'); - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && hasPath(object, path, baseHas); -} - -module.exports = has; diff --git a/node_modules/lodash/hasIn.js b/node_modules/lodash/hasIn.js deleted file mode 100644 index 06a3686..0000000 --- a/node_modules/lodash/hasIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseHasIn = require('./_baseHasIn'), - hasPath = require('./_hasPath'); - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); -} - -module.exports = hasIn; diff --git a/node_modules/lodash/head.js b/node_modules/lodash/head.js deleted file mode 100644 index dee9d1f..0000000 --- a/node_modules/lodash/head.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ -function head(array) { - return (array && array.length) ? array[0] : undefined; -} - -module.exports = head; diff --git a/node_modules/lodash/identity.js b/node_modules/lodash/identity.js deleted file mode 100644 index 2d5d963..0000000 --- a/node_modules/lodash/identity.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -module.exports = identity; diff --git a/node_modules/lodash/inRange.js b/node_modules/lodash/inRange.js deleted file mode 100644 index f20728d..0000000 --- a/node_modules/lodash/inRange.js +++ /dev/null @@ -1,55 +0,0 @@ -var baseInRange = require('./_baseInRange'), - toFinite = require('./toFinite'), - toNumber = require('./toNumber'); - -/** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ -function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); -} - -module.exports = inRange; diff --git a/node_modules/lodash/includes.js b/node_modules/lodash/includes.js deleted file mode 100644 index ae0deed..0000000 --- a/node_modules/lodash/includes.js +++ /dev/null @@ -1,53 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - isArrayLike = require('./isArrayLike'), - isString = require('./isString'), - toInteger = require('./toInteger'), - values = require('./values'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ -function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); -} - -module.exports = includes; diff --git a/node_modules/lodash/index.js b/node_modules/lodash/index.js deleted file mode 100644 index 5d063e2..0000000 --- a/node_modules/lodash/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lodash'); \ No newline at end of file diff --git a/node_modules/lodash/indexOf.js b/node_modules/lodash/indexOf.js deleted file mode 100644 index 8c9b86d..0000000 --- a/node_modules/lodash/indexOf.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ -function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); -} - -module.exports = indexOf; diff --git a/node_modules/lodash/initial.js b/node_modules/lodash/initial.js deleted file mode 100644 index 63e0c93..0000000 --- a/node_modules/lodash/initial.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ -function initial(array) { - var length = array ? array.length : 0; - return length ? baseSlice(array, 0, -1) : []; -} - -module.exports = initial; diff --git a/node_modules/lodash/intersection.js b/node_modules/lodash/intersection.js deleted file mode 100644 index a94c135..0000000 --- a/node_modules/lodash/intersection.js +++ /dev/null @@ -1,30 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'); - -/** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ -var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; -}); - -module.exports = intersection; diff --git a/node_modules/lodash/intersectionBy.js b/node_modules/lodash/intersectionBy.js deleted file mode 100644 index 31461aa..0000000 --- a/node_modules/lodash/intersectionBy.js +++ /dev/null @@ -1,45 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ -var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, baseIteratee(iteratee, 2)) - : []; -}); - -module.exports = intersectionBy; diff --git a/node_modules/lodash/intersectionWith.js b/node_modules/lodash/intersectionWith.js deleted file mode 100644 index 0ba2f9a..0000000 --- a/node_modules/lodash/intersectionWith.js +++ /dev/null @@ -1,42 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ -var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (comparator === last(mapped)) { - comparator = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; -}); - -module.exports = intersectionWith; diff --git a/node_modules/lodash/invert.js b/node_modules/lodash/invert.js deleted file mode 100644 index 21d10ab..0000000 --- a/node_modules/lodash/invert.js +++ /dev/null @@ -1,27 +0,0 @@ -var constant = require('./constant'), - createInverter = require('./_createInverter'), - identity = require('./identity'); - -/** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ -var invert = createInverter(function(result, value, key) { - result[value] = key; -}, constant(identity)); - -module.exports = invert; diff --git a/node_modules/lodash/invertBy.js b/node_modules/lodash/invertBy.js deleted file mode 100644 index e5ba0f7..0000000 --- a/node_modules/lodash/invertBy.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - createInverter = require('./_createInverter'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ -var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } -}, baseIteratee); - -module.exports = invertBy; diff --git a/node_modules/lodash/invoke.js b/node_modules/lodash/invoke.js deleted file mode 100644 index 97d51eb..0000000 --- a/node_modules/lodash/invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -var baseInvoke = require('./_baseInvoke'), - baseRest = require('./_baseRest'); - -/** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ -var invoke = baseRest(baseInvoke); - -module.exports = invoke; diff --git a/node_modules/lodash/invokeMap.js b/node_modules/lodash/invokeMap.js deleted file mode 100644 index f3302db..0000000 --- a/node_modules/lodash/invokeMap.js +++ /dev/null @@ -1,44 +0,0 @@ -var apply = require('./_apply'), - baseEach = require('./_baseEach'), - baseInvoke = require('./_baseInvoke'), - baseRest = require('./_baseRest'), - isArrayLike = require('./isArrayLike'), - isKey = require('./_isKey'); - -/** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ -var invokeMap = baseRest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); - }); - return result; -}); - -module.exports = invokeMap; diff --git a/node_modules/lodash/isArguments.js b/node_modules/lodash/isArguments.js deleted file mode 100644 index 8b9ed66..0000000 --- a/node_modules/lodash/isArguments.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseIsArguments = require('./_baseIsArguments'), - isObjectLike = require('./isObjectLike'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -module.exports = isArguments; diff --git a/node_modules/lodash/isArray.js b/node_modules/lodash/isArray.js deleted file mode 100644 index 88ab55f..0000000 --- a/node_modules/lodash/isArray.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -module.exports = isArray; diff --git a/node_modules/lodash/isArrayBuffer.js b/node_modules/lodash/isArrayBuffer.js deleted file mode 100644 index 12904a6..0000000 --- a/node_modules/lodash/isArrayBuffer.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsArrayBuffer = require('./_baseIsArrayBuffer'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer; - -/** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ -var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - -module.exports = isArrayBuffer; diff --git a/node_modules/lodash/isArrayLike.js b/node_modules/lodash/isArrayLike.js deleted file mode 100644 index 0f96680..0000000 --- a/node_modules/lodash/isArrayLike.js +++ /dev/null @@ -1,33 +0,0 @@ -var isFunction = require('./isFunction'), - isLength = require('./isLength'); - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -module.exports = isArrayLike; diff --git a/node_modules/lodash/isArrayLikeObject.js b/node_modules/lodash/isArrayLikeObject.js deleted file mode 100644 index 6c4812a..0000000 --- a/node_modules/lodash/isArrayLikeObject.js +++ /dev/null @@ -1,33 +0,0 @@ -var isArrayLike = require('./isArrayLike'), - isObjectLike = require('./isObjectLike'); - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -module.exports = isArrayLikeObject; diff --git a/node_modules/lodash/isBoolean.js b/node_modules/lodash/isBoolean.js deleted file mode 100644 index 45cbdc1..0000000 --- a/node_modules/lodash/isBoolean.js +++ /dev/null @@ -1,38 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ -function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); -} - -module.exports = isBoolean; diff --git a/node_modules/lodash/isBuffer.js b/node_modules/lodash/isBuffer.js deleted file mode 100644 index c103cc7..0000000 --- a/node_modules/lodash/isBuffer.js +++ /dev/null @@ -1,38 +0,0 @@ -var root = require('./_root'), - stubFalse = require('./stubFalse'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -module.exports = isBuffer; diff --git a/node_modules/lodash/isDate.js b/node_modules/lodash/isDate.js deleted file mode 100644 index 7f0209f..0000000 --- a/node_modules/lodash/isDate.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsDate = require('./_baseIsDate'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsDate = nodeUtil && nodeUtil.isDate; - -/** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ -var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - -module.exports = isDate; diff --git a/node_modules/lodash/isElement.js b/node_modules/lodash/isElement.js deleted file mode 100644 index 0c151a4..0000000 --- a/node_modules/lodash/isElement.js +++ /dev/null @@ -1,25 +0,0 @@ -var isObjectLike = require('./isObjectLike'), - isPlainObject = require('./isPlainObject'); - -/** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ -function isElement(value) { - return value != null && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); -} - -module.exports = isElement; diff --git a/node_modules/lodash/isEmpty.js b/node_modules/lodash/isEmpty.js deleted file mode 100644 index e190425..0000000 --- a/node_modules/lodash/isEmpty.js +++ /dev/null @@ -1,74 +0,0 @@ -var baseKeys = require('./_baseKeys'), - getTag = require('./_getTag'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLike = require('./isArrayLike'), - isBuffer = require('./isBuffer'), - isPrototype = require('./_isPrototype'), - isTypedArray = require('./isTypedArray'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ -function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; -} - -module.exports = isEmpty; diff --git a/node_modules/lodash/isEqual.js b/node_modules/lodash/isEqual.js deleted file mode 100644 index 8a54126..0000000 --- a/node_modules/lodash/isEqual.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'); - -/** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ -function isEqual(value, other) { - return baseIsEqual(value, other); -} - -module.exports = isEqual; diff --git a/node_modules/lodash/isEqualWith.js b/node_modules/lodash/isEqualWith.js deleted file mode 100644 index fb83d50..0000000 --- a/node_modules/lodash/isEqualWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'); - -/** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ -function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; -} - -module.exports = isEqualWith; diff --git a/node_modules/lodash/isError.js b/node_modules/lodash/isError.js deleted file mode 100644 index 85884b5..0000000 --- a/node_modules/lodash/isError.js +++ /dev/null @@ -1,42 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var errorTag = '[object Error]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ -function isError(value) { - if (!isObjectLike(value)) { - return false; - } - return (objectToString.call(value) == errorTag) || - (typeof value.message == 'string' && typeof value.name == 'string'); -} - -module.exports = isError; diff --git a/node_modules/lodash/isFinite.js b/node_modules/lodash/isFinite.js deleted file mode 100644 index 601842b..0000000 --- a/node_modules/lodash/isFinite.js +++ /dev/null @@ -1,36 +0,0 @@ -var root = require('./_root'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsFinite = root.isFinite; - -/** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ -function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); -} - -module.exports = isFinite; diff --git a/node_modules/lodash/isFunction.js b/node_modules/lodash/isFunction.js deleted file mode 100644 index 17ccf32..0000000 --- a/node_modules/lodash/isFunction.js +++ /dev/null @@ -1,42 +0,0 @@ -var isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag || tag == proxyTag; -} - -module.exports = isFunction; diff --git a/node_modules/lodash/isInteger.js b/node_modules/lodash/isInteger.js deleted file mode 100644 index 66aa87d..0000000 --- a/node_modules/lodash/isInteger.js +++ /dev/null @@ -1,33 +0,0 @@ -var toInteger = require('./toInteger'); - -/** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ -function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); -} - -module.exports = isInteger; diff --git a/node_modules/lodash/isLength.js b/node_modules/lodash/isLength.js deleted file mode 100644 index 3a95caa..0000000 --- a/node_modules/lodash/isLength.js +++ /dev/null @@ -1,35 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -module.exports = isLength; diff --git a/node_modules/lodash/isMap.js b/node_modules/lodash/isMap.js deleted file mode 100644 index 44f8517..0000000 --- a/node_modules/lodash/isMap.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsMap = require('./_baseIsMap'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsMap = nodeUtil && nodeUtil.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - -module.exports = isMap; diff --git a/node_modules/lodash/isMatch.js b/node_modules/lodash/isMatch.js deleted file mode 100644 index 9773a18..0000000 --- a/node_modules/lodash/isMatch.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'); - -/** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ -function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); -} - -module.exports = isMatch; diff --git a/node_modules/lodash/isMatchWith.js b/node_modules/lodash/isMatchWith.js deleted file mode 100644 index 187b6a6..0000000 --- a/node_modules/lodash/isMatchWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'); - -/** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ -function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); -} - -module.exports = isMatchWith; diff --git a/node_modules/lodash/isNaN.js b/node_modules/lodash/isNaN.js deleted file mode 100644 index 7d0d783..0000000 --- a/node_modules/lodash/isNaN.js +++ /dev/null @@ -1,38 +0,0 @@ -var isNumber = require('./isNumber'); - -/** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ -function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; -} - -module.exports = isNaN; diff --git a/node_modules/lodash/isNative.js b/node_modules/lodash/isNative.js deleted file mode 100644 index 310b39d..0000000 --- a/node_modules/lodash/isNative.js +++ /dev/null @@ -1,40 +0,0 @@ -var baseIsNative = require('./_baseIsNative'), - isMaskable = require('./_isMaskable'); - -/** Error message constants. */ -var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://github.com/es-shims.'; - -/** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ -function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); -} - -module.exports = isNative; diff --git a/node_modules/lodash/isNil.js b/node_modules/lodash/isNil.js deleted file mode 100644 index 79f0505..0000000 --- a/node_modules/lodash/isNil.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ -function isNil(value) { - return value == null; -} - -module.exports = isNil; diff --git a/node_modules/lodash/isNull.js b/node_modules/lodash/isNull.js deleted file mode 100644 index c0a374d..0000000 --- a/node_modules/lodash/isNull.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ -function isNull(value) { - return value === null; -} - -module.exports = isNull; diff --git a/node_modules/lodash/isNumber.js b/node_modules/lodash/isNumber.js deleted file mode 100644 index b866292..0000000 --- a/node_modules/lodash/isNumber.js +++ /dev/null @@ -1,47 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var numberTag = '[object Number]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ -function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); -} - -module.exports = isNumber; diff --git a/node_modules/lodash/isObject.js b/node_modules/lodash/isObject.js deleted file mode 100644 index 1dc8939..0000000 --- a/node_modules/lodash/isObject.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -module.exports = isObject; diff --git a/node_modules/lodash/isObjectLike.js b/node_modules/lodash/isObjectLike.js deleted file mode 100644 index 301716b..0000000 --- a/node_modules/lodash/isObjectLike.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -module.exports = isObjectLike; diff --git a/node_modules/lodash/isPlainObject.js b/node_modules/lodash/isPlainObject.js deleted file mode 100644 index 035fbb2..0000000 --- a/node_modules/lodash/isPlainObject.js +++ /dev/null @@ -1,68 +0,0 @@ -var getPrototype = require('./_getPrototype'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to infer the `Object` constructor. */ -var objectCtorString = funcToString.call(Object); - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ -function isPlainObject(value) { - if (!isObjectLike(value) || objectToString.call(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); -} - -module.exports = isPlainObject; diff --git a/node_modules/lodash/isRegExp.js b/node_modules/lodash/isRegExp.js deleted file mode 100644 index 76c9b6e..0000000 --- a/node_modules/lodash/isRegExp.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsRegExp = require('./_baseIsRegExp'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - -/** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ -var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - -module.exports = isRegExp; diff --git a/node_modules/lodash/isSafeInteger.js b/node_modules/lodash/isSafeInteger.js deleted file mode 100644 index 2a48526..0000000 --- a/node_modules/lodash/isSafeInteger.js +++ /dev/null @@ -1,37 +0,0 @@ -var isInteger = require('./isInteger'); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ -function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; -} - -module.exports = isSafeInteger; diff --git a/node_modules/lodash/isSet.js b/node_modules/lodash/isSet.js deleted file mode 100644 index ab88bdf..0000000 --- a/node_modules/lodash/isSet.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsSet = require('./_baseIsSet'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsSet = nodeUtil && nodeUtil.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - -module.exports = isSet; diff --git a/node_modules/lodash/isString.js b/node_modules/lodash/isString.js deleted file mode 100644 index 7b8be86..0000000 --- a/node_modules/lodash/isString.js +++ /dev/null @@ -1,39 +0,0 @@ -var isArray = require('./isArray'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); -} - -module.exports = isString; diff --git a/node_modules/lodash/isSymbol.js b/node_modules/lodash/isSymbol.js deleted file mode 100644 index aef5115..0000000 --- a/node_modules/lodash/isSymbol.js +++ /dev/null @@ -1,38 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); -} - -module.exports = isSymbol; diff --git a/node_modules/lodash/isTypedArray.js b/node_modules/lodash/isTypedArray.js deleted file mode 100644 index da3f8dd..0000000 --- a/node_modules/lodash/isTypedArray.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsTypedArray = require('./_baseIsTypedArray'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -module.exports = isTypedArray; diff --git a/node_modules/lodash/isUndefined.js b/node_modules/lodash/isUndefined.js deleted file mode 100644 index 377d121..0000000 --- a/node_modules/lodash/isUndefined.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -module.exports = isUndefined; diff --git a/node_modules/lodash/isWeakMap.js b/node_modules/lodash/isWeakMap.js deleted file mode 100644 index 8d36f66..0000000 --- a/node_modules/lodash/isWeakMap.js +++ /dev/null @@ -1,28 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakMapTag = '[object WeakMap]'; - -/** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ -function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; -} - -module.exports = isWeakMap; diff --git a/node_modules/lodash/isWeakSet.js b/node_modules/lodash/isWeakSet.js deleted file mode 100644 index 290164b..0000000 --- a/node_modules/lodash/isWeakSet.js +++ /dev/null @@ -1,37 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakSetTag = '[object WeakSet]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ -function isWeakSet(value) { - return isObjectLike(value) && objectToString.call(value) == weakSetTag; -} - -module.exports = isWeakSet; diff --git a/node_modules/lodash/iteratee.js b/node_modules/lodash/iteratee.js deleted file mode 100644 index 8ec0588..0000000 --- a/node_modules/lodash/iteratee.js +++ /dev/null @@ -1,50 +0,0 @@ -var baseClone = require('./_baseClone'), - baseIteratee = require('./_baseIteratee'); - -/** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ -function iteratee(func) { - return baseIteratee(typeof func == 'function' ? func : baseClone(func, true)); -} - -module.exports = iteratee; diff --git a/node_modules/lodash/join.js b/node_modules/lodash/join.js deleted file mode 100644 index fe31067..0000000 --- a/node_modules/lodash/join.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeJoin = arrayProto.join; - -/** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ -function join(array, separator) { - return array ? nativeJoin.call(array, separator) : ''; -} - -module.exports = join; diff --git a/node_modules/lodash/kebabCase.js b/node_modules/lodash/kebabCase.js deleted file mode 100644 index 8a52be6..0000000 --- a/node_modules/lodash/kebabCase.js +++ /dev/null @@ -1,28 +0,0 @@ -var createCompounder = require('./_createCompounder'); - -/** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ -var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); -}); - -module.exports = kebabCase; diff --git a/node_modules/lodash/keyBy.js b/node_modules/lodash/keyBy.js deleted file mode 100644 index d0047a5..0000000 --- a/node_modules/lodash/keyBy.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - createAggregator = require('./_createAggregator'); - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ -var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); -}); - -module.exports = keyBy; diff --git a/node_modules/lodash/keys.js b/node_modules/lodash/keys.js deleted file mode 100644 index d143c71..0000000 --- a/node_modules/lodash/keys.js +++ /dev/null @@ -1,37 +0,0 @@ -var arrayLikeKeys = require('./_arrayLikeKeys'), - baseKeys = require('./_baseKeys'), - isArrayLike = require('./isArrayLike'); - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -module.exports = keys; diff --git a/node_modules/lodash/keysIn.js b/node_modules/lodash/keysIn.js deleted file mode 100644 index a62308f..0000000 --- a/node_modules/lodash/keysIn.js +++ /dev/null @@ -1,32 +0,0 @@ -var arrayLikeKeys = require('./_arrayLikeKeys'), - baseKeysIn = require('./_baseKeysIn'), - isArrayLike = require('./isArrayLike'); - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -module.exports = keysIn; diff --git a/node_modules/lodash/lang.js b/node_modules/lodash/lang.js deleted file mode 100644 index a396216..0000000 --- a/node_modules/lodash/lang.js +++ /dev/null @@ -1,58 +0,0 @@ -module.exports = { - 'castArray': require('./castArray'), - 'clone': require('./clone'), - 'cloneDeep': require('./cloneDeep'), - 'cloneDeepWith': require('./cloneDeepWith'), - 'cloneWith': require('./cloneWith'), - 'conformsTo': require('./conformsTo'), - 'eq': require('./eq'), - 'gt': require('./gt'), - 'gte': require('./gte'), - 'isArguments': require('./isArguments'), - 'isArray': require('./isArray'), - 'isArrayBuffer': require('./isArrayBuffer'), - 'isArrayLike': require('./isArrayLike'), - 'isArrayLikeObject': require('./isArrayLikeObject'), - 'isBoolean': require('./isBoolean'), - 'isBuffer': require('./isBuffer'), - 'isDate': require('./isDate'), - 'isElement': require('./isElement'), - 'isEmpty': require('./isEmpty'), - 'isEqual': require('./isEqual'), - 'isEqualWith': require('./isEqualWith'), - 'isError': require('./isError'), - 'isFinite': require('./isFinite'), - 'isFunction': require('./isFunction'), - 'isInteger': require('./isInteger'), - 'isLength': require('./isLength'), - 'isMap': require('./isMap'), - 'isMatch': require('./isMatch'), - 'isMatchWith': require('./isMatchWith'), - 'isNaN': require('./isNaN'), - 'isNative': require('./isNative'), - 'isNil': require('./isNil'), - 'isNull': require('./isNull'), - 'isNumber': require('./isNumber'), - 'isObject': require('./isObject'), - 'isObjectLike': require('./isObjectLike'), - 'isPlainObject': require('./isPlainObject'), - 'isRegExp': require('./isRegExp'), - 'isSafeInteger': require('./isSafeInteger'), - 'isSet': require('./isSet'), - 'isString': require('./isString'), - 'isSymbol': require('./isSymbol'), - 'isTypedArray': require('./isTypedArray'), - 'isUndefined': require('./isUndefined'), - 'isWeakMap': require('./isWeakMap'), - 'isWeakSet': require('./isWeakSet'), - 'lt': require('./lt'), - 'lte': require('./lte'), - 'toArray': require('./toArray'), - 'toFinite': require('./toFinite'), - 'toInteger': require('./toInteger'), - 'toLength': require('./toLength'), - 'toNumber': require('./toNumber'), - 'toPlainObject': require('./toPlainObject'), - 'toSafeInteger': require('./toSafeInteger'), - 'toString': require('./toString') -}; diff --git a/node_modules/lodash/last.js b/node_modules/lodash/last.js deleted file mode 100644 index 6402a4c..0000000 --- a/node_modules/lodash/last.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; -} - -module.exports = last; diff --git a/node_modules/lodash/lastIndexOf.js b/node_modules/lodash/lastIndexOf.js deleted file mode 100644 index 9201cb9..0000000 --- a/node_modules/lodash/lastIndexOf.js +++ /dev/null @@ -1,46 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIsNaN = require('./_baseIsNaN'), - strictLastIndexOf = require('./_strictLastIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ -function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); -} - -module.exports = lastIndexOf; diff --git a/node_modules/lodash/lodash.js b/node_modules/lodash/lodash.js deleted file mode 100644 index 361e74d..0000000 --- a/node_modules/lodash/lodash.js +++ /dev/null @@ -1,16982 +0,0 @@ -/** - * @license - * lodash - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.16.4'; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Error message constants. */ - var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://github.com/es-shims.', - FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** Used to compose bitmasks for function metadata. */ - var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64, - ARY_FLAG = 128, - REARG_FLAG = 256, - FLIP_FLAG = 512; - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 500, - HOT_SPAN = 16; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', ARY_FLAG], - ['bind', BIND_FLAG], - ['bindKey', BIND_KEY_FLAG], - ['curry', CURRY_FLAG], - ['curryRight', CURRY_RIGHT_FLAG], - ['flip', FLIP_FLAG], - ['partial', PARTIAL_FLAG], - ['partialRight', PARTIAL_RIGHT_FLAG], - ['rearg', REARG_FLAG] - ]; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - - /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g, - reTrimStart = /^\s+/, - reTrimEnd = /\s+$/; - - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - - /** Used to match words composed of alphanumeric characters. */ - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', - rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** Used to match complex or compound words. */ - var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', - rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, - rsUpper + '+' + rsOptUpperContr, - rsDigits, - rsEmoji - ].join('|'), 'g'); - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', - 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', - 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', - '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' - ]; - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag] = - typedArrayTags[setTag] = typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = - cloneableTags[boolTag] = cloneableTags[dateTag] = - cloneableTags[float32Tag] = cloneableTags[float64Tag] = - cloneableTags[int8Tag] = cloneableTags[int16Tag] = - cloneableTags[int32Tag] = cloneableTags[mapTag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[setTag] = - cloneableTags[stringTag] = cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; - - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' - }; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - return freeProcess && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, - nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /*--------------------------------------------------------------------------*/ - - /** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ - function addMapEntry(map, pair) { - // Don't return `map.set` because it's not chainable in IE 11. - map.set(pair[0], pair[1]); - return map; - } - - /** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ - function addSetEntry(set, value) { - // Don't return `set.add` because it's not chainable in IE 11. - set.add(value); - return set; - } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array ? array.length : 0; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array ? array.length : 0; - return !!length && baseIndexOf(array, value, 0) > -1; - } - - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array ? array.length : 0; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array ? array.length : 0; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length'); - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } - - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); - } - - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value; - } - - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array ? array.length : 0; - return length ? (baseSum(array, iteratee) / length) : NAN; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; - } - - /** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - var deburrLetter = basePropertyOf(deburredLetters); - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } - - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; - } - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - var runInContext = (function runInContext(context) { - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; - - /** Built-in constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - iteratorSymbol = Symbol ? Symbol.iterator : undefined, - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /** Mocked built-ins. */ - var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, - ctxNow = Date && Date.now !== root.Date.now && Date.now, - ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array of at least `200` elements - * and any iteratees accept only one argument. The heuristic for whether a - * section qualifies for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); - - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB). Change the following template settings to use - * alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'escape': reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'evaluate': reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - '_': lodash - } - }; - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || - (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } - - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } - - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; - } - - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } - - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } - } - - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value); - } - - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; - } - - /** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths of elements to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - isNil = object == null, - length = paths.length, - result = Array(length); - - while (++index < length) { - result[index] = isNil ? undefined : get(object, paths[index]); - } - return result; - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {boolean} [isFull] Specify a clone including symbols. - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, isFull, customizer, key, object, stack) { - var result; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); - }); - return result; - } - - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ - function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; - } - - /** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } - - /** - * The base implementation of `getTag`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - return objectToString.call(value); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - if (!isKey(path, object)) { - path = castPath(path); - object = parent(object, path); - path = last(path); - } - var func = object == null ? object : object[toKey(path)]; - return func == null ? undefined : apply(func, object, args); - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && objectToString.call(value) == argsTag; - } - - /** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ - function baseIsArrayBuffer(value) { - return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; - } - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, equalFunc, customizer, bitmask, stack); - } - - /** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) - : result - )) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; - } - - /** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); - }; - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); - } - - /** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return basePickBy(object, props, function(value, key) { - return key in object; - }); - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick from. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, props, predicate) { - var index = -1, - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (predicate(value, key)) { - baseAssignValue(result, key, value); - } - } - return result; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } - else if (!isKey(index, array)) { - var path = castPath(index), - object = parent(array, path); - - if (object != null) { - delete object[toKey(last(path))]; - } - } - else { - delete array[toKey(index)]; - } - } - } - return array; - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ - function baseSample(collection) { - return arraySample(values(collection)); - } - - /** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - - /** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } - - /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - object = parent(object, path); - - var key = toKey(last(path)); - return !(object != null && hasOwnProperty.call(object, key)) || delete object[key]; - } - - /** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } - - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var index = -1, - length = arrays.length; - - while (++index < length) { - var result = result - ? arrayPush( - baseDifference(result, arrays[index], iteratee, comparator), - baseDifference(arrays[index], result, iteratee, comparator) - ) - : arrays[index]; - } - return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value) { - return isArray(value) ? value : stringToPath(value); - } - - /** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - var castRest = baseRest; - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** - * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). - * - * @private - * @param {number|Object} id The timer id or timeout object of the timer to clear. - */ - var clearTimeout = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - - /** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned map. - */ - function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - - /** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned set. - */ - function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Copies own symbol properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, getIteratee(iteratee, 2), accumulator); - }; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = getIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && - isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), - isFlip = bitmask & FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - /** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } - - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } - - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); - - if (!(bitmask & CURRY_BOUND_FLAG)) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); - } - - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = nativeMin(toInteger(precision), 292); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } - - /** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; - - /** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { - bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= UNORDERED_COMPARE_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; - } - - /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; - } - - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * Creates an array of the own enumerable symbol properties of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; - - /** - * Creates an array of the own and inherited enumerable symbol properties - * of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - var getTag = baseGetTag; - - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : undefined; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } - - /** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object ? object.length : 0; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return cloneMap(object, isDeep, cloneFunc); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object, isDeep, cloneFunc); - - case symbolTag: - return cloneSymbol(object); - } - } - - /** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ - var isMaskable = coreJsData ? isFunction : stubFalse; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; - } - - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ - function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); - - var isCombo = - ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || - ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack); - stack['delete'](srcValue); - } - return objValue; - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = shortOut(baseSetData); - - /** - * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @returns {number|Object} Returns the timer id or timeout object. - */ - var setTimeout = ctxSetTimeout || function(func, wait) { - return root.setTimeout(func, wait); - }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ - function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoizeCapped(function(string) { - string = toString(string); - - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array ? array.length : 0; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs ? pairs.length : 0, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - var length = array ? array.length : 0; - return length ? baseSlice(array, 0, -1) : []; - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (comparator === last(mapped)) { - comparator = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; - }); - - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array ? nativeJoin.call(array, separator) : ''; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); - } - - /** - * Gets the element at index `n` of `array`. If `n` is negative, the nth - * element from the end is returned. - * - * @static - * @memberOf _ - * @since 4.11.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=0] The index of the element to return. - * @returns {*} Returns the nth element of `array`. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * - * _.nth(array, 1); - * // => 'b' - * - * _.nth(array, -2); - * // => 'c'; - */ - function nth(array, n) { - return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; - } - - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ - var pull = baseRest(pullAll); - - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ - function pullAll(array, values) { - return (array && array.length && values && values.length) - ? basePullAll(array, values) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `iteratee` which is - * invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The iteratee is invoked with one argument: (value). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, getIteratee(iteratee, 2)) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `comparator` which - * is invoked to compare elements of `array` to `values`. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.differenceWith`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; - * - * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); - * console.log(array); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] - */ - function pullAllWith(array, values, comparator) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, undefined, comparator) - : array; - } - - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * var pulled = _.pullAt(array, [1, 3]); - * - * console.log(array); - * // => ['a', 'c'] - * - * console.log(pulled); - * // => ['b', 'd'] - */ - var pullAt = flatRest(function(array, indexes) { - var length = array ? array.length : 0, - result = baseAt(array, indexes); - - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); - - return result; - }); - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array ? nativeReverse.call(array) : array; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - /** - * Uses a binary search to determine the lowest index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); - } - - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([4, 5, 5, 5, 6], 5); - * // => 1 - */ - function sortedIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 5, 5, 5, 6], 5); - * // => 4 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); - } - - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return (array && array.length) - ? baseSortedUniq(array) - : []; - } - - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return (array && array.length) - ? baseSortedUniq(array, getIteratee(iteratee, 2)) - : []; - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - var length = array ? array.length : 0; - return length ? baseSlice(array, 1, length) : []; - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false}, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3)) - : []; - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. Result values are chosen from the first - * array in which the value occurs. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); - }); - - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. Result values are chosen from - * the first array in which the value occurs. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = baseRest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return (array && array.length) - ? baseUniq(array) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return (array && array.length) - ? baseUniq(array, getIteratee(iteratee, 2)) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The order of result values is - * determined by the order they occur in the array.The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - return (array && array.length) - ? baseUniq(array, undefined, comparator) - : []; - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - * - * _.unzip(zipped); - * // => [['a', 'b'], [1, 2], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } - - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine - * regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, undefined, group); - }); - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of unique values that is the - * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. The order of result values is determined by the order - * they occur in the arrays. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.without - * @example - * - * _.xor([2, 1], [2, 3]); - * // => [1, 3] - */ - var xor = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which by which they're compared. The order of result values is determined - * by the order they occur in the arrays. The iteratee is invoked with one - * argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2, 3.4] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); - }); - - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The order of result values is - * determined by the order they occur in the arrays. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = baseRest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); - }); - - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - */ - var zip = baseRest(unzip); - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } - - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = baseRest(function(arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; - - iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; - return unzipWith(arrays, iteratee); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths of elements to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = flatRest(function(paths) { - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; - - if (length > 1 || this.__actions__.length || - !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; - - return { 'done': done, 'value': value }; - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } - - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(findLastIndex); - - /** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } - }); - - /** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); - } - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = baseRest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); - }); - return result; - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); - }); - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] - * The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduce - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(getIteratee(predicate, 3))); - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - */ - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = ctxNow || function() { - return root.Date.now(); - }; - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - - /** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = baseRest(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); - }); - - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; - } - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; - } - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; - - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrap(func, FLIP_FLAG); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - - // Expose `MapCache`. - memoize.Cache = MapCache; - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: return !predicate.call(this); - case 1: return !predicate.call(this, args[0]); - case 2: return !predicate.call(this, args[0], args[1]); - case 3: return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with its arguments transformed. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms=[_.identity]] - * The argument transforms. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, [square, doubled]); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = castRest(function(func, transforms) { - transforms = (transforms.length == 1 && isArray(transforms[0])) - ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); - - var funcsLength = transforms.length; - return baseRest(function(args) { - var index = -1, - length = nativeMin(args.length, funcsLength); - - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - - /** - * Creates a function that invokes `func` with `partials` prepended to the - * arguments it receives. This method is like `_.bind` except it does **not** - * alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 0.2.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap(func, PARTIAL_FLAG, undefined, partials, holders); - }); - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to the arguments it receives. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders); - }); - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified `indexes` where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, [2, 0, 1]); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = flatRest(function(func, indexes) { - return createWrap(func, REARG_FLAG, undefined, undefined, undefined, indexes); - }); - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? start : toInteger(start); - return baseRest(func, start); - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * create function and an array of arguments much like - * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). - * - * **Note:** This method is based on the - * [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function(args) { - var array = args[start], - otherArgs = castSlice(args, 0, start); - - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } - - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1); - } - - /** - * Creates a function that provides `value` to `wrapper` as its first - * argument. Any additional arguments provided to the function are appended - * to those provided to the `wrapper`. The wrapper is invoked with the `this` - * binding of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

    ' + func(text) + '

    '; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

    fred, barney, & pebbles

    ' - */ - function wrap(value, wrapper) { - wrapper = wrapper == null ? identity : wrapper; - return partial(wrapper, value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, false, true); - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - return baseClone(value, false, true, customizer); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, true, true); - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - return baseClone(value, true, true, customizer); - } - - /** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt); - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return value != null && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - return (objectToString.call(value) == errorTag) || - (typeof value.message == 'string' && typeof value.name == 'string'); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag || tag == proxyTag; - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || objectToString.call(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && objectToString.call(value) == weakSetTag; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt); - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (iteratorSymbol && value[iteratorSymbol]) { - return iteratorToArray(value[iteratorSymbol]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - - return func(value); - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - } - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths of elements to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = flatRest(baseAt); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? baseAssign(result, properties) : result; - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } - - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)); - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = baseRest(baseInvoke); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, iteratee(value, key, object), value); - }); - return result; - } - - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)); - }); - return result; - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable string keyed properties of `object` that are - * not omitted. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function(object, props) { - if (object == null) { - return {}; - } - props = arrayMap(props, toKey); - return basePick(object, baseDifference(getAllKeysIn(object), props)); - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, props) { - return object == null ? {} : basePick(object, arrayMap(props, toKey)); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - return object == null ? {} : basePickBy(object, getAllKeysIn(object), getIteratee(predicate)); - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length; - - // Ensure the loop is entered when path is empty. - if (!length) { - object = undefined; - length = 1; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } - - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys); - - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn); - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object); - - iteratee = getIteratee(iteratee, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } - else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } - - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object ? baseValues(object, keys(object)) : []; - } - - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return ( - createPadding(nativeFloor(mid), chars) + - string + - createPadding(nativeCeil(mid), chars) - ); - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (string + createPadding(length - strLength, chars)) - : string; - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (createPadding(length - strLength, chars) + string) - : string; - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n, guard) { - if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); - - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && ( - typeof separator == 'string' || - (separator != null && !isRegExp(separator)) - )) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - - /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' - */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string); - position = baseClamp(toInteger(position), 0, string.length); - target = baseToString(target); - return string.slice(position, position + target.length) == target; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': ' - -``` - -## Documentation - -Some functions are also available in the following forms: -* `Series` - the same as `` but runs only a single async operation at a time -* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time - -### Collections - -* [`each`](#each), `eachSeries`, `eachLimit` -* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit` -* [`map`](#map), `mapSeries`, `mapLimit` -* [`filter`](#filter), `filterSeries`, `filterLimit` -* [`reject`](#reject), `rejectSeries`, `rejectLimit` -* [`reduce`](#reduce), [`reduceRight`](#reduceRight) -* [`detect`](#detect), `detectSeries`, `detectLimit` -* [`sortBy`](#sortBy) -* [`some`](#some), `someLimit` -* [`every`](#every), `everyLimit` -* [`concat`](#concat), `concatSeries` - -### Control Flow - -* [`series`](#seriestasks-callback) -* [`parallel`](#parallel), `parallelLimit` -* [`whilst`](#whilst), [`doWhilst`](#doWhilst) -* [`until`](#until), [`doUntil`](#doUntil) -* [`during`](#during), [`doDuring`](#doDuring) -* [`forever`](#forever) -* [`waterfall`](#waterfall) -* [`compose`](#compose) -* [`seq`](#seq) -* [`applyEach`](#applyEach), `applyEachSeries` -* [`queue`](#queue), [`priorityQueue`](#priorityQueue) -* [`cargo`](#cargo) -* [`auto`](#auto) -* [`retry`](#retry) -* [`iterator`](#iterator) -* [`times`](#times), `timesSeries`, `timesLimit` - -### Utils - -* [`apply`](#apply) -* [`nextTick`](#nextTick) -* [`memoize`](#memoize) -* [`unmemoize`](#unmemoize) -* [`ensureAsync`](#ensureAsync) -* [`constant`](#constant) -* [`asyncify`](#asyncify) -* [`wrapSync`](#wrapSync) -* [`log`](#log) -* [`dir`](#dir) -* [`noConflict`](#noConflict) - -## Collections - - - -### each(arr, iterator, [callback]) - -Applies the function `iterator` to each item in `arr`, in parallel. -The `iterator` is called with an item from the list, and a callback for when it -has finished. If the `iterator` passes an error to its `callback`, the main -`callback` (for the `each` function) is immediately called with the error. - -Note, that since this function applies `iterator` to each item in parallel, -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err)` which must be called once it has - completed. If no error has occurred, the `callback` should be run without - arguments or with an explicit `null` argument. The array index is not passed - to the iterator. If you need the index, use [`forEachOf`](#forEachOf). -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions - have finished, or an error occurs. - -__Examples__ - - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - -```js -// assuming openFiles is an array of file names - -async.each(openFiles, function(file, callback) { - - // Perform operation on file here. - console.log('Processing file ' + file); - - if( file.length > 32 ) { - console.log('This file name is too long'); - callback('File name too long'); - } else { - // Do work to process file here - console.log('File processed'); - callback(); - } -}, function(err){ - // if any of the file processing produced an error, err would equal that error - if( err ) { - // One of the iterations produced an error. - // All processing will now stop. - console.log('A file failed to process'); - } else { - console.log('All files have been processed successfully'); - } -}); -``` - -__Related__ - -* eachSeries(arr, iterator, [callback]) -* eachLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - - -### forEachOf(obj, iterator, [callback]) - -Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator. - -__Arguments__ - -* `obj` - An object or array to iterate over. -* `iterator(item, key, callback)` - A function to apply to each item in `obj`. -The `key` is the item's key, or index in the case of an array. The iterator is -passed a `callback(err)` which must be called once it has completed. If no -error has occurred, the callback should be run without arguments or with an -explicit `null` argument. -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs. - -__Example__ - -```js -var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; -var configs = {}; - -async.forEachOf(obj, function (value, key, callback) { - fs.readFile(__dirname + value, "utf8", function (err, data) { - if (err) return callback(err); - try { - configs[key] = JSON.parse(data); - } catch (e) { - return callback(e); - } - callback(); - }) -}, function (err) { - if (err) console.error(err.message); - // configs is now a map of JSON data - doSomethingWith(configs); -}) -``` - -__Related__ - -* forEachOfSeries(obj, iterator, [callback]) -* forEachOfLimit(obj, limit, iterator, [callback]) - ---------------------------------------- - - -### map(arr, iterator, [callback]) - -Produces a new array of values by mapping each value in `arr` through -the `iterator` function. The `iterator` is called with an item from `arr` and a -callback for when it has finished processing. Each of these callback takes 2 arguments: -an `error`, and the transformed item from `arr`. If `iterator` passes an error to its -callback, the main `callback` (for the `map` function) is immediately called with the error. - -Note, that since this function applies the `iterator` to each item in parallel, -there is no guarantee that the `iterator` functions will complete in order. -However, the results array will be in the same order as the original `arr`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, transformed)` which must be called once - it has completed with an error (which can be `null`) and a transformed item. -* `callback(err, results)` - *Optional* A callback which is called when all `iterator` - functions have finished, or an error occurs. Results is an array of the - transformed items from the `arr`. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - -__Related__ -* mapSeries(arr, iterator, [callback]) -* mapLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - -### filter(arr, iterator, [callback]) - -__Alias:__ `select` - -Returns a new array of all the values in `arr` which pass an async truth test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The `iterator` is passed a `callback(truthValue)`, which must be called with a - boolean argument once it has completed. -* `callback(results)` - *Optional* A callback which is called after all the `iterator` - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - -__Related__ - -* filterSeries(arr, iterator, [callback]) -* filterLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reject(arr, iterator, [callback]) - -The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. - -__Related__ - -* rejectSeries(arr, iterator, [callback]) -* rejectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reduce(arr, memo, iterator, [callback]) - -__Aliases:__ `inject`, `foldl` - -Reduces `arr` into a single value using an async `iterator` to return -each successive step. `memo` is the initial state of the reduction. -This function only operates in series. - -For performance reasons, it may make sense to split a call to this function into -a parallel map, and then use the normal `Array.prototype.reduce` on the results. -This function is for situations where each step in the reduction needs to be async; -if you can get the data before reducing it, then it's probably a good idea to do so. - -__Arguments__ - -* `arr` - An array to iterate over. -* `memo` - The initial state of the reduction. -* `iterator(memo, item, callback)` - A function applied to each item in the - array to produce the next step in the reduction. The `iterator` is passed a - `callback(err, reduction)` which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main `callback` is - immediately called with the error. -* `callback(err, result)` - *Optional* A callback which is called after all the `iterator` - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - - -### reduceRight(arr, memo, iterator, [callback]) - -__Alias:__ `foldr` - -Same as [`reduce`](#reduce), only operates on `arr` in reverse order. - - ---------------------------------------- - - -### detect(arr, iterator, [callback]) - -Returns the first value in `arr` that passes an async truth test. The -`iterator` is applied in parallel, meaning the first iterator to return `true` will -fire the detect `callback` with that result. That means the result might not be -the first item in the original `arr` (in terms of order) that passes the test. - -If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The iterator is passed a `callback(truthValue)` which must be called with a - boolean argument once it has completed. **Note: this callback does not take an error as its first argument.** -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the `iterator` functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value `undefined` if none passed. **Note: this callback does not take an error as its first argument.** - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - -__Related__ - -* detectSeries(arr, iterator, [callback]) -* detectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### sortBy(arr, iterator, [callback]) - -Sorts a list by the results of running each `arr` value through an async `iterator`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, sortValue)` which must be called once it - has completed with an error (which can be `null`) and a value to use as the sort - criteria. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is the items from - the original `arr` sorted by the values returned by the `iterator` calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - -__Sort Order__ - -By modifying the callback parameter the sorting order can be influenced: - -```js -//ascending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x); -}, function(err,result){ - //result callback -} ); - -//descending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x*-1); //<- x*-1 instead of x, turns the order around -}, function(err,result){ - //result callback -} ); -``` - ---------------------------------------- - - -### some(arr, iterator, [callback]) - -__Alias:__ `any` - -Returns `true` if at least one element in the `arr` satisfies an async test. -_The callback for each iterator call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. Once any iterator -call returns `true`, the main `callback` is immediately called. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)`` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - -__Related__ - -* someLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### every(arr, iterator, [callback]) - -__Alias:__ `all` - -Returns `true` if every element in `arr` satisfies an async test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `false`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - -__Related__ - -* everyLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### concat(arr, iterator, [callback]) - -Applies `iterator` to each item in `arr`, concatenating the results. Returns the -concatenated list. The `iterator`s are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of `arr` passed to the `iterator` function. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, results)` which must be called once it - has completed with an error (which can be `null`) and an array of results. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is an array containing - the concatenated results of the `iterator` function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - -__Related__ - -* concatSeries(arr, iterator, [callback]) - - -## Control Flow - - -### series(tasks, [callback]) - -Run the functions in the `tasks` array in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run, and `callback` is immediately called with the value of the error. -Otherwise, `callback` receives an array of results when `tasks` have completed. - -It is also possible to use an object instead of an array. Each property will be -run as a function, and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`series`](#series). - -**Note** that while many implementations preserve the order of object properties, the -[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) -explicitly states that - -> The mechanics and order of enumerating the properties is not specified. - -So if you rely on the order in which your series of functions are executed, and want -this to work on all platforms, consider using an array. - -__Arguments__ - -* `tasks` - An array or object containing functions to run, each function is passed - a `callback(err, result)` it must call on completion with an error `err` (which can - be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the `task` callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - - -### parallel(tasks, [callback]) - -Run the `tasks` array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main `callback` is immediately called with the value of the error. -Once the `tasks` have completed, the results are passed to the final `callback` as an -array. - -**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`parallel`](#parallel). - - -__Arguments__ - -* `tasks` - An array or object containing functions to run. Each function is passed - a `callback(err, result)` which it must call on completion with an error `err` - (which can be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed successfully. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - -__Related__ - -* parallelLimit(tasks, limit, [callback]) - ---------------------------------------- - - -### whilst(test, fn, callback) - -Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, -or an error occurs. - -__Arguments__ - -* `test()` - synchronous truth test to perform before each execution of `fn`. -* `fn(callback)` - A function which is called each time `test` passes. The function is - passed a `callback(err)`, which must be called once it has completed with an - optional `err` argument. -* `callback(err, [results])` - A callback which is called after the test - function has failed and repeated execution of `fn` has stopped. `callback` - will be passed an error and any arguments passed to the final `fn`'s callback. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(function () { - callback(null, count); - }, 1000); - }, - function (err, n) { - // 5 seconds have passed, n = 5 - } -); -``` - ---------------------------------------- - - -### doWhilst(fn, test, callback) - -The post-check version of [`whilst`](#whilst). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - - -### until(test, fn, callback) - -Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, -or an error occurs. `callback` will be passed an error and any arguments passed -to the final `fn`'s callback. - -The inverse of [`whilst`](#whilst). - ---------------------------------------- - - -### doUntil(fn, test, callback) - -Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - - -### during(test, fn, callback) - -Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error. - -__Example__ - -```js -var count = 0; - -async.during( - function (callback) { - return callback(null, count < 5); - }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - - -### doDuring(fn, test, callback) - -The post-check version of [`during`](#during). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function. - ---------------------------------------- - - -### forever(fn, [errback]) - -Calls the asynchronous function `fn` with a callback parameter that allows it to -call itself again, in series, indefinitely. - -If an error is passed to the callback then `errback` is called with the -error, and execution stops, otherwise it will never be called. - -```js -async.forever( - function(next) { - // next is suitable for passing to things that need a callback(err [, whatever]); - // it will result in this function being called again. - }, - function(err) { - // if next is called with a value in its first parameter, it will appear - // in here as 'err', and execution will stop. - } -); -``` - ---------------------------------------- - - -### waterfall(tasks, [callback]) - -Runs the `tasks` array of functions in series, each passing their results to the next in -the array. However, if any of the `tasks` pass an error to their own callback, the -next function is not executed, and the main `callback` is immediately called with -the error. - -__Arguments__ - -* `tasks` - An array of functions to run, each function is passed a - `callback(err, result1, result2, ...)` it must call on completion. The first - argument is an error (which can be `null`) and any further arguments will be - passed as arguments in order to the next task. -* `callback(err, [results])` - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback) { - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); - }, - function(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` -Or, with named functions: - -```js -async.waterfall([ - myFirstFunction, - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(callback) { - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - -Or, if you need to pass any argument to the first function: - -```js -async.waterfall([ - async.apply(myFirstFunction, 'zero'), - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(arg1, callback) { - // arg1 now equals 'zero' - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - ---------------------------------------- - -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions `f()`, `g()`, and `h()` would produce the result of -`f(g(h()))`, only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- - -### seq(fn1, fn2...) - -Version of the compose function that is more natural to read. -Each function consumes the return value of the previous function. -It is the equivalent of [`compose`](#compose) with the arguments reversed. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -// Requires lodash (or underscore), express3 and dresende's orm2. -// Part of an app, that fetches cats of the logged user. -// This example uses `seq` function to avoid overnesting and error -// handling clutter. -app.get('/cats', function(request, response) { - var User = request.models.User; - async.seq( - _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) - function(user, fn) { - user.getCats(fn); // 'getCats' has signature (callback(err, data)) - } - )(req.session.user_id, function (err, cats) { - if (err) { - console.error(err); - response.json({ status: 'error', message: err.message }); - } else { - response.json({ status: 'ok', message: 'Cats found', data: cats }); - } - }); -}); -``` - ---------------------------------------- - -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling -`callback` after all functions have completed. If you only provide the first -argument, then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* `fns` - the asynchronous functions to all call with the same arguments -* `args...` - any number of separate arguments to pass to the function -* `callback` - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - -__Related__ - -* applyEachSeries(tasks, args..., [callback]) - ---------------------------------------- - - -### queue(worker, [concurrency]) - -Creates a `queue` object with the specified `concurrency`. Tasks added to the -`queue` are processed in parallel (up to the `concurrency` limit). If all -`worker`s are in progress, the task is queued until one becomes available. -Once a `worker` completes a `task`, that `task`'s callback is called. - -__Arguments__ - -* `worker(task, callback)` - An asynchronous function for processing a queued - task, which must call its `callback(err)` argument when finished, with an - optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`. -* `concurrency` - An `integer` for determining how many `worker` functions should be - run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown. - -__Queue objects__ - -The `queue` object returned by this function has the following properties and -methods: - -* `length()` - a function returning the number of items waiting to be processed. -* `started` - a function returning whether or not any items have been pushed and processed by the queue -* `running()` - a function returning the number of items currently being processed. -* `workersList()` - a function returning the array of items currently being processed. -* `idle()` - a function returning false if there are items waiting or being processed, or true if not. -* `concurrency` - an integer for determining how many `worker` functions should be - run in parallel. This property can be changed after a `queue` is created to - alter the concurrency on-the-fly. -* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once - the `worker` has finished processing the task. Instead of a single task, a `tasks` array - can be submitted. The respective callback is used for every task in the list. -* `unshift(task, [callback])` - add a new task to the front of the `queue`. -* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, - and further tasks will be queued. -* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. -* `paused` - a boolean for determining whether the queue is in a paused state -* `pause()` - a function that pauses the processing of tasks until `resume()` is called. -* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. -* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle. - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing item'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - - ---------------------------------------- - - -### priorityQueue(worker, concurrency) - -The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: - -* `push(task, priority, [callback])` - `priority` should be a number. If an array of - `tasks` is given, all tasks will be assigned the same priority. -* The `unshift` method was removed. - ---------------------------------------- - - -### cargo(worker, [payload]) - -Creates a `cargo` object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the `payload` limit). If the -`worker` is in progress, the task is queued until it becomes available. Once -the `worker` has completed some tasks, each callback of those tasks is called. -Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work. - -While [queue](#queue) passes only one task to one of a group of workers -at a time, cargo passes an array of tasks to a single worker, repeating -when the worker is finished. - -__Arguments__ - -* `worker(tasks, callback)` - An asynchronous function for processing an array of - queued tasks, which must call its `callback(err)` argument when finished, with - an optional `err` argument. -* `payload` - An optional `integer` for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The `cargo` object returned by this function has the following properties and -methods: - -* `length()` - A function returning the number of items waiting to be processed. -* `payload` - An `integer` for determining how many tasks should be - process per round. This property can be changed after a `cargo` is created to - alter the payload on-the-fly. -* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called - once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` - can be submitted. The respective callback is used for every task in the list. -* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. -* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. -* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue) - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i -### auto(tasks, [concurrency], [callback]) - -Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied. - -If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far. - -Note, all functions are called with a `results` object as a second argument, -so it is unsafe to pass functions in the `tasks` object which cannot handle the -extra argument. - -For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling `readFile` with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to `readFile` in a function which does not forward the -`results` object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* `tasks` - An object. Each of its properties is either a function or an array of - requirements, with the function itself the last item in the array. The object's key - of a property serves as the name of the task defined by that property, - i.e. can be used when specifying requirements for other tasks. - The function receives two arguments: (1) a `callback(err, result)` which must be - called when finished, passing an `error` (which can be `null`) and the result of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions. -* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible. -* `callback(err, results)` - An optional callback which is called when all the - tasks have been completed. It receives the `err` argument if any `tasks` - pass an error to their callback. Results are always returned; however, if - an error occurs, no further `tasks` will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - make_folder: function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - }, - write_file: ['get_data', 'make_folder', function(callback, results){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, 'filename'); - }], - email_link: ['write_file', function(callback, results){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - callback(null, {'file':results.write_file, 'email':'user@example.com'}); - }] -}, function(err, results) { - console.log('err = ', err); - console.log('results = ', results); -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - } -], -function(err, results){ - async.series([ - function(callback){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - results.push('filename'); - callback(null); - }, - function(callback){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - callback(null, {'file':results.pop(), 'email':'user@example.com'}); - } - ]); -}); -``` - -For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding -new tasks much easier (and the code more readable). - - ---------------------------------------- - - -### retry([opts = {times: 5, interval: 0}| 5], task, [callback]) - -Attempts to get a successful response from `task` no more than `times` times before -returning an error. If the task is successful, the `callback` will be passed the result -of the successful task. If all attempts fail, the callback will be passed the error and -result (if any) of the final attempt. - -__Arguments__ - -* `opts` - Can be either an object with `times` and `interval` or a number. - * `times` - The number of attempts to make before giving up. The default is `5`. - * `interval` - The time to wait between retries, in milliseconds. The default is `0`. - * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. -* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` - which must be called when finished, passing `err` (which can be `null`) and the `result` of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions (if nested inside another control flow). -* `callback(err, results)` - An optional callback which is called when the - task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. - -The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below: - -```js -// try calling apiMethod 3 times -async.retry(3, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod 3 times, waiting 200 ms between each retry -async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod the default 5 times no delay between each retry -async.retry(apiMethod, function(err, result) { - // do something with the result -}); -``` - -It can also be embedded within other control flow functions to retry individual methods -that are not as reliable, like this: - -```js -async.auto({ - users: api.getUsers.bind(api), - payments: async.retry(3, api.getPayments.bind(api)) -}, function(err, results) { - // do something with the results -}); -``` - - ---------------------------------------- - - -### iterator(tasks) - -Creates an iterator function which calls the next function in the `tasks` array, -returning a continuation to call the next one after that. It's also possible to -“peek” at the next iterator with `iterator.next()`. - -This function is used internally by the `async` module, but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* `tasks` - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - - -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied. - -Useful as a shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - - -### nextTick(callback), setImmediate(callback) - -Calls `callback` on a later loop around the event loop. In Node.js this just -calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` -if available, otherwise `setTimeout(callback, 0)`, which means other higher priority -events may precede the execution of `callback`. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* `callback` - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - - -### times(n, iterator, [callback]) - -Calls the `iterator` function `n` times, and accumulates results in the same manner -you would use with [`map`](#map). - -__Arguments__ - -* `n` - The number of times to run the function. -* `iterator` - The function to call `n` times. -* `callback` - see [`map`](#map) - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -__Related__ - -* timesSeries(n, iterator, [callback]) -* timesLimit(n, limit, iterator, [callback]) - - -## Utils - - -### memoize(fn, [hasher]) - -Caches the results of an `async` function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* `fn` - The function to proxy and cache results from. -* `hasher` - An optional function for generating a custom hash for storing - results. It has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - - -### unmemoize(fn) - -Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized -form. Handy for testing. - -__Arguments__ - -* `fn` - the memoized function - ---------------------------------------- - - -### ensureAsync(fn) - -Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained. - -__Arguments__ - -* `fn` - an async function, one that expects a node-style callback as its last argument - -Returns a wrapped function with the exact same call signature as the function passed in. - -__Example__ - -```js -function sometimesAsync(arg, callback) { - if (cache[arg]) { - return callback(null, cache[arg]); // this would be synchronous!! - } else { - doSomeIO(arg, callback); // this IO would be asynchronous - } -} - -// this has a risk of stack overflows if many results are cached in a row -async.mapSeries(args, sometimesAsync, done); - -// this will defer sometimesAsync's callback if necessary, -// preventing stack overflows -async.mapSeries(args, async.ensureAsync(sometimesAsync), done); - -``` - ---------------------------------------- - - -### constant(values...) - -Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`. - -__Example__ - -```js -async.waterfall([ - async.constant(42), - function (value, next) { - // value === 42 - }, - //... -], callback); - -async.waterfall([ - async.constant(filename, "utf8"), - fs.readFile, - function (fileData, next) { - //... - } - //... -], callback); - -async.auto({ - hostname: async.constant("https://server.net/"), - port: findFreePort, - launchServer: ["hostname", "port", function (cb, options) { - startServer(options, cb); - }], - //... -}, callback); - -``` - ---------------------------------------- - - - -### asyncify(func) - -__Alias:__ `wrapSync` - -Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback. - -__Example__ - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(JSON.parse), - function (data, next) { - // data is the result of parsing the text. - // If there was a parsing error, it would have been caught. - } -], callback) -``` - -If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example: - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(function (contents) { - return db.model.create(contents); - }), - function (model, next) { - // `model` is the instantiated model object. - // If there was an error, this function would be skipped. - } -], callback) -``` - -This also means you can asyncify ES2016 `async` functions. - -```js -var q = async.queue(async.asyncify(async function (file) { - var intermediateStep = await processFile(file); - return await somePromise(intermediateStep) -})); - -q.push(files); -``` - ---------------------------------------- - - -### log(function, arguments) - -Logs the result of an `async` function to the `console`. Only works in Node.js or -in browsers that support `console.log` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.log` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - - -### dir(function, arguments) - -Logs the result of an `async` function to the `console` using `console.dir` to -display the properties of the resulting object. Only works in Node.js or -in browsers that support `console.dir` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.dir` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - - -### noConflict() - -Changes the value of `async` back to its original value, returning a reference to the -`async` object. diff --git a/node_modules/merkle-patricia-tree/node_modules/async/dist/async.js b/node_modules/merkle-patricia-tree/node_modules/async/dist/async.js deleted file mode 100644 index 31e7620..0000000 --- a/node_modules/merkle-patricia-tree/node_modules/async/dist/async.js +++ /dev/null @@ -1,1265 +0,0 @@ -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -(function () { - - var async = {}; - function noop() {} - function identity(v) { - return v; - } - function toBool(v) { - return !!v; - } - function notId(v) { - return !v; - } - - // global on the server, window in the browser - var previous_async; - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self === 'object' && self.self === self && self || - typeof global === 'object' && global.global === global && global || - this; - - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - return function() { - if (fn === null) throw new Error("Callback was already called."); - fn.apply(this, arguments); - fn = null; - }; - } - - function _once(fn) { - return function() { - if (fn === null) return; - fn.apply(this, arguments); - fn = null; - }; - } - - //// cross-browser compatiblity functions //// - - var _toString = Object.prototype.toString; - - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; - - // Ported from underscore.js isObject - var _isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - function _isArrayLike(arr) { - return _isArray(arr) || ( - // has a positive integer length property - typeof arr.length === "number" && - arr.length >= 0 && - arr.length % 1 === 0 - ); - } - - function _arrayEach(arr, iterator) { - var index = -1, - length = arr.length; - - while (++index < length) { - iterator(arr[index], index, arr); - } - } - - function _map(arr, iterator) { - var index = -1, - length = arr.length, - result = Array(length); - - while (++index < length) { - result[index] = iterator(arr[index], index, arr); - } - return result; - } - - function _range(count) { - return _map(Array(count), function (v, i) { return i; }); - } - - function _reduce(arr, iterator, memo) { - _arrayEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - } - - function _forEachOf(object, iterator) { - _arrayEach(_keys(object), function (key) { - iterator(object[key], key); - }); - } - - function _indexOf(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === item) return i; - } - return -1; - } - - var _keys = Object.keys || function (obj) { - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - function _keyIterator(coll) { - var i = -1; - var len; - var keys; - if (_isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? i : null; - }; - } else { - keys = _keys(coll); - len = keys.length; - return function next() { - i++; - return i < len ? keys[i] : null; - }; - } - } - - // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) - // This accumulates the arguments passed into an array, after a given index. - // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). - function _restParam(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0); - var rest = Array(length); - for (var index = 0; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - } - // Currently unused but handle cases outside of the switch statement: - // var args = Array(startIndex + 1); - // for (index = 0; index < startIndex; index++) { - // args[index] = arguments[index]; - // } - // args[startIndex] = rest; - // return func.apply(this, args); - }; - } - - function _withoutIndex(iterator) { - return function (value, index, callback) { - return iterator(value, callback); - }; - } - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - - // capture the global reference to guard against fakeTimer mocks - var _setImmediate = typeof setImmediate === 'function' && setImmediate; - - var _delay = _setImmediate ? function(fn) { - // not a direct alias for IE10 compatibility - _setImmediate(fn); - } : function(fn) { - setTimeout(fn, 0); - }; - - if (typeof process === 'object' && typeof process.nextTick === 'function') { - async.nextTick = process.nextTick; - } else { - async.nextTick = _delay; - } - async.setImmediate = _setImmediate ? _delay : async.nextTick; - - - async.forEach = - async.each = function (arr, iterator, callback) { - return async.eachOf(arr, _withoutIndex(iterator), callback); - }; - - async.forEachSeries = - async.eachSeries = function (arr, iterator, callback) { - return async.eachOfSeries(arr, _withoutIndex(iterator), callback); - }; - - - async.forEachLimit = - async.eachLimit = function (arr, limit, iterator, callback) { - return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); - }; - - async.forEachOf = - async.eachOf = function (object, iterator, callback) { - callback = _once(callback || noop); - object = object || []; - - var iter = _keyIterator(object); - var key, completed = 0; - - while ((key = iter()) != null) { - completed += 1; - iterator(object[key], key, only_once(done)); - } - - if (completed === 0) callback(null); - - function done(err) { - completed--; - if (err) { - callback(err); - } - // Check key is null in case iterator isn't exhausted - // and done resolved synchronously. - else if (key === null && completed <= 0) { - callback(null); - } - } - }; - - async.forEachOfSeries = - async.eachOfSeries = function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - var key = nextKey(); - function iterate() { - var sync = true; - if (key === null) { - return callback(null); - } - iterator(obj[key], key, only_once(function (err) { - if (err) { - callback(err); - } - else { - key = nextKey(); - if (key === null) { - return callback(null); - } else { - if (sync) { - async.setImmediate(iterate); - } else { - iterate(); - } - } - } - })); - sync = false; - } - iterate(); - }; - - - - async.forEachOfLimit = - async.eachOfLimit = function (obj, limit, iterator, callback) { - _eachOfLimit(limit)(obj, iterator, callback); - }; - - function _eachOfLimit(limit) { - - return function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - if (limit <= 0) { - return callback(null); - } - var done = false; - var running = 0; - var errored = false; - - (function replenish () { - if (done && running <= 0) { - return callback(null); - } - - while (running < limit && !errored) { - var key = nextKey(); - if (key === null) { - done = true; - if (running <= 0) { - callback(null); - } - return; - } - running += 1; - iterator(obj[key], key, only_once(function (err) { - running -= 1; - if (err) { - callback(err); - errored = true; - } - else { - replenish(); - } - })); - } - })(); - }; - } - - - function doParallel(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOf, obj, iterator, callback); - }; - } - function doParallelLimit(fn) { - return function (obj, limit, iterator, callback) { - return fn(_eachOfLimit(limit), obj, iterator, callback); - }; - } - function doSeries(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOfSeries, obj, iterator, callback); - }; - } - - function _asyncMap(eachfn, arr, iterator, callback) { - callback = _once(callback || noop); - arr = arr || []; - var results = _isArrayLike(arr) ? [] : {}; - eachfn(arr, function (value, index, callback) { - iterator(value, function (err, v) { - results[index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = doParallelLimit(_asyncMap); - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.inject = - async.foldl = - async.reduce = function (arr, memo, iterator, callback) { - async.eachOfSeries(arr, function (x, i, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - - async.foldr = - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, identity).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - - async.transform = function (arr, memo, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = memo; - memo = _isArray(arr) ? [] : {}; - } - - async.eachOf(arr, function(v, k, cb) { - iterator(memo, v, k, cb); - }, function(err) { - callback(err, memo); - }); - }; - - function _filter(eachfn, arr, iterator, callback) { - var results = []; - eachfn(arr, function (x, index, callback) { - iterator(x, function (v) { - if (v) { - results.push({index: index, value: x}); - } - callback(); - }); - }, function () { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - } - - async.select = - async.filter = doParallel(_filter); - - async.selectLimit = - async.filterLimit = doParallelLimit(_filter); - - async.selectSeries = - async.filterSeries = doSeries(_filter); - - function _reject(eachfn, arr, iterator, callback) { - _filter(eachfn, arr, function(value, cb) { - iterator(value, function(v) { - cb(!v); - }); - }, callback); - } - async.reject = doParallel(_reject); - async.rejectLimit = doParallelLimit(_reject); - async.rejectSeries = doSeries(_reject); - - function _createTester(eachfn, check, getResult) { - return function(arr, limit, iterator, cb) { - function done() { - if (cb) cb(getResult(false, void 0)); - } - function iteratee(x, _, callback) { - if (!cb) return callback(); - iterator(x, function (v) { - if (cb && check(v)) { - cb(getResult(true, x)); - cb = iterator = false; - } - callback(); - }); - } - if (arguments.length > 3) { - eachfn(arr, limit, iteratee, done); - } else { - cb = iterator; - iterator = limit; - eachfn(arr, iteratee, done); - } - }; - } - - async.any = - async.some = _createTester(async.eachOf, toBool, identity); - - async.someLimit = _createTester(async.eachOfLimit, toBool, identity); - - async.all = - async.every = _createTester(async.eachOf, notId, notId); - - async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - - function _findGetResult(v, x) { - return x; - } - async.detect = _createTester(async.eachOf, identity, _findGetResult); - async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); - async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - callback(null, _map(results.sort(comparator), function (x) { - return x.value; - })); - } - - }); - - function comparator(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - } - }; - - async.auto = function (tasks, concurrency, callback) { - if (typeof arguments[1] === 'function') { - // concurrency is optional, shift the args. - callback = concurrency; - concurrency = null; - } - callback = _once(callback || noop); - var keys = _keys(tasks); - var remainingTasks = keys.length; - if (!remainingTasks) { - return callback(null); - } - if (!concurrency) { - concurrency = remainingTasks; - } - - var results = {}; - var runningTasks = 0; - - var hasError = false; - - var listeners = []; - function addListener(fn) { - listeners.unshift(fn); - } - function removeListener(fn) { - var idx = _indexOf(listeners, fn); - if (idx >= 0) listeners.splice(idx, 1); - } - function taskComplete() { - remainingTasks--; - _arrayEach(listeners.slice(0), function (fn) { - fn(); - }); - } - - addListener(function () { - if (!remainingTasks) { - callback(null, results); - } - }); - - _arrayEach(keys, function (k) { - if (hasError) return; - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = _restParam(function(err, args) { - runningTasks--; - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _forEachOf(results, function(val, rkey) { - safeResults[rkey] = val; - }); - safeResults[k] = args; - hasError = true; - - callback(err, safeResults); - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }); - var requires = task.slice(0, task.length - 1); - // prevent dead-locks - var len = requires.length; - var dep; - while (len--) { - if (!(dep = tasks[requires[len]])) { - throw new Error('Has nonexistent dependency in ' + requires.join(', ')); - } - if (_isArray(dep) && _indexOf(dep, k) >= 0) { - throw new Error('Has cyclic dependencies'); - } - } - function ready() { - return runningTasks < concurrency && _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - } - if (ready()) { - runningTasks++; - task[task.length - 1](taskCallback, results); - } - else { - addListener(listener); - } - function listener() { - if (ready()) { - runningTasks++; - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - } - }); - }; - - - - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var attempts = []; - - var opts = { - times: DEFAULT_TIMES, - interval: DEFAULT_INTERVAL - }; - - function parseTimes(acc, t){ - if(typeof t === 'number'){ - acc.times = parseInt(t, 10) || DEFAULT_TIMES; - } else if(typeof t === 'object'){ - acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; - acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; - } else { - throw new Error('Unsupported argument type for \'times\': ' + typeof t); - } - } - - var length = arguments.length; - if (length < 1 || length > 3) { - throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); - } else if (length <= 2 && typeof times === 'function') { - callback = task; - task = times; - } - if (typeof times !== 'function') { - parseTimes(opts, times); - } - opts.callback = callback; - opts.task = task; - - function wrappedTask(wrappedCallback, wrappedResults) { - function retryAttempt(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - } - - function retryInterval(interval){ - return function(seriesCallback){ - setTimeout(function(){ - seriesCallback(null); - }, interval); - }; - } - - while (opts.times) { - - var finalAttempt = !(opts.times-=1); - attempts.push(retryAttempt(opts.task, finalAttempt)); - if(!finalAttempt && opts.interval > 0){ - attempts.push(retryInterval(opts.interval)); - } - } - - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || opts.callback)(data.err, data.result); - }); - } - - // If a callback is passed, run this as a controll flow - return opts.callback ? wrappedTask() : wrappedTask; - }; - - async.waterfall = function (tasks, callback) { - callback = _once(callback || noop); - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - function wrapIterator(iterator) { - return _restParam(function (err, args) { - if (err) { - callback.apply(null, [err].concat(args)); - } - else { - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - ensureAsync(iterator).apply(null, args); - } - }); - } - wrapIterator(async.iterator(tasks))(); - }; - - function _parallel(eachfn, tasks, callback) { - callback = callback || noop; - var results = _isArrayLike(tasks) ? [] : {}; - - eachfn(tasks, function (task, key, callback) { - task(_restParam(function (err, args) { - if (args.length <= 1) { - args = args[0]; - } - results[key] = args; - callback(err); - })); - }, function (err) { - callback(err, results); - }); - } - - async.parallel = function (tasks, callback) { - _parallel(async.eachOf, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel(_eachOfLimit(limit), tasks, callback); - }; - - async.series = function(tasks, callback) { - _parallel(async.eachOfSeries, tasks, callback); - }; - - async.iterator = function (tasks) { - function makeCallback(index) { - function fn() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - } - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - } - return makeCallback(0); - }; - - async.apply = _restParam(function (fn, args) { - return _restParam(function (callArgs) { - return fn.apply( - null, args.concat(callArgs) - ); - }); - }); - - function _concat(eachfn, arr, fn, callback) { - var result = []; - eachfn(arr, function (x, index, cb) { - fn(x, function (err, y) { - result = result.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, result); - }); - } - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - callback = callback || noop; - if (test()) { - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else if (test.apply(this, args)) { - iterator(next); - } else { - callback.apply(null, [null].concat(args)); - } - }); - iterator(next); - } else { - callback(null); - } - }; - - async.doWhilst = function (iterator, test, callback) { - var calls = 0; - return async.whilst(function() { - return ++calls <= 1 || test.apply(this, arguments); - }, iterator, callback); - }; - - async.until = function (test, iterator, callback) { - return async.whilst(function() { - return !test.apply(this, arguments); - }, iterator, callback); - }; - - async.doUntil = function (iterator, test, callback) { - return async.doWhilst(iterator, function() { - return !test.apply(this, arguments); - }, callback); - }; - - async.during = function (test, iterator, callback) { - callback = callback || noop; - - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else { - args.push(check); - test.apply(this, args); - } - }); - - var check = function(err, truth) { - if (err) { - callback(err); - } else if (truth) { - iterator(next); - } else { - callback(null); - } - }; - - test(check); - }; - - async.doDuring = function (iterator, test, callback) { - var calls = 0; - async.during(function(next) { - if (calls++ < 1) { - next(null, true); - } else { - test.apply(this, arguments); - } - }, iterator, callback); - }; - - function _queue(worker, concurrency, payload) { - if (concurrency == null) { - concurrency = 1; - } - else if(concurrency === 0) { - throw new Error('Concurrency must not be zero'); - } - function _insert(q, data, pos, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0 && q.idle()) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - callback: callback || noop - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - }); - async.setImmediate(q.process); - } - function _next(q, tasks) { - return function(){ - workers -= 1; - - var removed = false; - var args = arguments; - _arrayEach(tasks, function (task) { - _arrayEach(workersList, function (worker, index) { - if (worker === task && !removed) { - workersList.splice(index, 1); - removed = true; - } - }); - - task.callback.apply(task, args); - }); - if (q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - var workers = 0; - var workersList = []; - var q = { - tasks: [], - concurrency: concurrency, - payload: payload, - saturated: noop, - empty: noop, - drain: noop, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = noop; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - while(!q.paused && workers < q.concurrency && q.tasks.length){ - - var tasks = q.payload ? - q.tasks.splice(0, q.payload) : - q.tasks.splice(0, q.tasks.length); - - var data = _map(tasks, function (task) { - return task.data; - }); - - if (q.tasks.length === 0) { - q.empty(); - } - workers += 1; - workersList.push(tasks[0]); - var cb = only_once(_next(q, tasks)); - worker(data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - workersList: function () { - return workersList; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - q.paused = true; - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - var resumeCount = Math.min(q.concurrency, q.tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - async.setImmediate(q.process); - } - } - }; - return q; - } - - async.queue = function (worker, concurrency) { - var q = _queue(function (items, cb) { - worker(items[0], cb); - }, concurrency, 1); - - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - } - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : noop - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; - - return q; - }; - - async.cargo = function (worker, payload) { - return _queue(worker, 1, payload); - }; - - function _console_fn(name) { - return _restParam(function (fn, args) { - fn.apply(null, args.concat([_restParam(function (err, args) { - if (typeof console === 'object') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _arrayEach(args, function (x) { - console[name](x); - }); - } - } - })])); - }); - } - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - var has = Object.prototype.hasOwnProperty; - hasher = hasher || identity; - var memoized = _restParam(function memoized(args) { - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has.call(memo, key)) { - async.setImmediate(function () { - callback.apply(null, memo[key]); - }); - } - else if (has.call(queues, key)) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([_restParam(function (args) { - memo[key] = args; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, args); - } - })])); - } - }); - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - function _times(mapper) { - return function (count, iterator, callback) { - mapper(_range(count), iterator, callback); - }; - } - - async.times = _times(async.map); - async.timesSeries = _times(async.mapSeries); - async.timesLimit = function (count, limit, iterator, callback) { - return async.mapLimit(_range(count), limit, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return _restParam(function (args) { - var that = this; - - var callback = args[args.length - 1]; - if (typeof callback == 'function') { - args.pop(); - } else { - callback = noop; - } - - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { - cb(err, nextargs); - })])); - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }); - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - - function _applyEach(eachfn) { - return _restParam(function(fns, args) { - var go = _restParam(function(args) { - var that = this; - var callback = args.pop(); - return eachfn(fns, function (fn, _, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }); - if (args.length) { - return go.apply(this, args); - } - else { - return go; - } - }); - } - - async.applyEach = _applyEach(async.eachOf); - async.applyEachSeries = _applyEach(async.eachOfSeries); - - - async.forever = function (fn, callback) { - var done = only_once(callback || noop); - var task = ensureAsync(fn); - function next(err) { - if (err) { - return done(err); - } - task(next); - } - next(); - }; - - function ensureAsync(fn) { - return _restParam(function (args) { - var callback = args.pop(); - args.push(function () { - var innerArgs = arguments; - if (sync) { - async.setImmediate(function () { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - }); - var sync = true; - fn.apply(this, args); - sync = false; - }); - } - - async.ensureAsync = ensureAsync; - - async.constant = _restParam(function(values) { - var args = [null].concat(values); - return function (callback) { - return callback.apply(this, args); - }; - }); - - async.wrapSync = - async.asyncify = function asyncify(func) { - return _restParam(function (args) { - var callback = args.pop(); - var result; - try { - result = func.apply(this, args); - } catch (e) { - return callback(e); - } - // if result is Promise object - if (_isObject(result) && typeof result.then === "function") { - result.then(function(value) { - callback(null, value); - })["catch"](function(err) { - callback(err.message ? err : new Error(err)); - }); - } else { - callback(null, result); - } - }); - }; - - // Node.js - if (typeof module === 'object' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define === 'function' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via - - - - - - diff --git a/node_modules/min-document/test/static/test-adapter.js b/node_modules/min-document/test/static/test-adapter.js deleted file mode 100644 index c512792..0000000 --- a/node_modules/min-document/test/static/test-adapter.js +++ /dev/null @@ -1,49 +0,0 @@ -(function () { - var Testem = window.Testem - var regex = /^((?:not )?ok) (\d+) (.+)$/ - - Testem.useCustomAdapter(tapAdapter) - - function tapAdapter(socket){ - var results = { - failed: 0 - , passed: 0 - , total: 0 - , tests: [] - } - - socket.emit('tests-start') - - Testem.handleConsoleMessage = function(msg){ - var m = msg.match(regex) - if (m) { - var passed = m[1] === 'ok' - var test = { - passed: passed ? 1 : 0, - failed: passed ? 0 : 1, - total: 1, - id: m[2], - name: m[3], - items: [] - } - - if (passed) { - results.passed++ - } else { - results.failed++ - } - - results.total++ - - socket.emit('test-result', test) - results.tests.push(test) - } else if (msg === '# ok' || msg.match(/^# tests \d+/)){ - socket.emit('all-test-results', results) - } - - // return false if you want to prevent the console message from - // going to the console - // return false - } - } -}()) diff --git a/node_modules/min-document/test/test-document.js b/node_modules/min-document/test/test-document.js deleted file mode 100644 index 282d9df..0000000 --- a/node_modules/min-document/test/test-document.js +++ /dev/null @@ -1,564 +0,0 @@ -var test = require("tape") - -module.exports = testDocument - -function testDocument(document) { - var cleanup = require('./cleanup')(document) - var Event = require('../event'); - - test("document is a Document", function (assert) { - assert.equal(typeof document.createTextNode, "function") - assert.equal(typeof document.createElement, "function") - assert.equal(typeof document.createDocumentFragment, "function") - - assert.end() - }) - - test("document has a head property", function(assert) { - assert.equal(document.head.tagName, "HEAD") - assert.end() - }) - - test("document has nodeType 9", function (assert) { - assert.equal(document.nodeType, 9) - assert.end() - }) - - test("can do stuff", function (assert) { - var div = document.createElement("div") - div.className = "foo bar" - - var span = document.createElement("span") - div.appendChild(span) - span.textContent = "Hello! <&>" - - var html = String(div.outerHTML || div) - - assert.equal(html, "
    " + - "Hello! <&>
    ") - - cleanup() - assert.end() - }) - - test("can createDocumentFragment", function (assert) { - var frag = document.createDocumentFragment() - - assert.equal(frag.nodeType, 11) - - var h1 = document.createElement("h1") - var h2 = document.createElement("h2") - - assert.equal(h1.nodeType, 1) - assert.equal(h1.nodeType, 1) - - frag.appendChild(h1) - assert.equal(fragString(frag), "

    ") - - frag.appendChild(h2) - assert.equal(fragString(frag), "

    ") - - frag.removeChild(h1) - assert.equal(fragString(frag), "

    ") - - frag.replaceChild(h1, h2) - assert.equal(fragString(frag), "

    ") - - cleanup() - assert.end() - }) - - test("can getElementById", function (assert) { - - function append_div(id, parent) { - var div = document.createElement("div") - div.id = id - parent.appendChild(div) - return div - } - - var div1 = append_div(1, document.body) - var div2 = append_div(2, document.body) - var div3 = append_div(3, document.body) - - var div11 = append_div(11, div1) - var div12 = append_div(12, div1) - var div21 = append_div(21, div2) - var div22 = append_div(22, div2) - var div221 = append_div(221, div22) - var div222 = append_div(222, div22) - - assert.equal(document.getElementById(1), div1) - assert.equal(document.getElementById("2"), div2) - assert.equal(document.getElementById(3), div3) - assert.equal(document.getElementById(11), div11) - assert.equal(document.getElementById(12), div12) - assert.equal(document.getElementById(21), div21) - assert.equal(document.getElementById(22), div22) - assert.equal(document.getElementById(221), div221) - assert.equal(document.getElementById(222), div222) - - cleanup() - assert.end() - }) - - test("can getElementsByClassName for a single class", function(assert) { - function append_div(className, parent) { - var div = document.createElement("div") - div.className = className - parent.appendChild(div) - return div - } - - function assertSingleMatch(className, expectedElement) { - var result = document.getElementsByClassName(className) - assert.equal(result.length, 1) - assert.equal(result[0], expectedElement) - } - - var divA = append_div("A", document.body) - var divB = append_div("B", document.body) - var divC = append_div("C", document.body) - - var divA1 = append_div("A1", divA) - var divA2 = append_div("A2", divA) - var divB1 = append_div("B1", divB) - var divB2 = append_div("B2", divB) - var divB2a = append_div("B2a", divB2) - var divB2b = append_div("B2b", divB2) - - assertSingleMatch("A", divA) - assertSingleMatch("B", divB) - assertSingleMatch("C", divC) - assertSingleMatch("A1", divA1) - assertSingleMatch("A2", divA2) - assertSingleMatch("B1", divB1) - assertSingleMatch("B2", divB2) - assertSingleMatch("B2a", divB2a) - assertSingleMatch("B2b", divB2b) - - cleanup() - assert.end() - }) - - test("can getElementsByClassName for many elements", function (assert) { - function h(className) { - var div = document.createElement("div") - div.className = className - return div - } - - document.body.appendChild(h("multi-class-bar")) - document.body.appendChild(h("multi-class-bar")) - - var elems = document.getElementsByClassName("multi-class-bar") - assert.equal(elems.length, 2) - - cleanup() - assert.end() - }) - - test("can getElementsByClassName for many classes", function(assert) { - function append_div(classNames, parent) { - var div = document.createElement("div") - div.className = classNames - parent.appendChild(div) - return div - } - - function assertMatch(classNames, expectedElements) { - var result = document.getElementsByClassName(classNames) - assert.equal(result.length, expectedElements.length) - for (var i = 0; i < expectedElements.length; i++) { - assert.notEqual(expectedElements.indexOf(result[i]), -1) - } - } - - var divXYZ = append_div("X Y Z", document.body) - var divYZ = append_div("Y Z", document.body) - var divZX = append_div("Z X", document.body) - - var divX1X2 = append_div("X1 X2", divXYZ) - var divX1X2Y1 = append_div("X1 X2 Y1", divXYZ) - - - assertMatch("X", [divXYZ, divZX]) - assertMatch("Y Z", [divXYZ, divYZ]) - assertMatch("X Y Z", [divXYZ]) - assertMatch("X1 X2", [divX1X2, divX1X2Y1]) - - cleanup() - assert.end() - }) - - test("can create/manipulate textnodes", function (assert) { - var textnode = document.createTextNode("hello") - - assert.equal(textnode.nodeType, 3) - assert.equal(textnode.data, "hello") - assert.equal(typeof textnode.replaceData, "function") - - textnode.replaceData(0, 7, "nightly") - assert.equal(textnode.nodeType, 3) - assert.equal(textnode.data, "nightly") - assert.equal(typeof textnode.replaceData, "function") - - textnode.replaceData(1, 1, "ou") - assert.equal(textnode.nodeType, 3) - assert.equal(textnode.data, "noughtly") - - assert.end() - }) - - test("owner document is set", function (assert) { - var textnode = document.createTextNode("hello") - var domnode = document.createElement("div") - var fragment = document.createDocumentFragment() - - assert.equal(textnode.ownerDocument, document) - assert.equal(domnode.ownerDocument, document) - assert.equal(fragment.ownerDocument, document) - - assert.end() - }) - - test("Create namespaced nodes", function (assert) { - var svgURI = "http://www.w3.org/2000/svg" - var htmlURI = "http://www.w3.org/1999/xhtml" - - var noNS = document.createElement("div") - var svgNS = document.createElementNS(svgURI, "svg") - var emptyNS = document.createElementNS("", "div") - var nullNS = document.createElementNS(null, "div") - var undefNS = document.createElementNS(undefined, "div") - var caseNS = document.createElementNS("Oops", "AbC") - var htmlNS = document.createElement("div") - - assert.equal(noNS.tagName, "DIV") - assert.equal(noNS.namespaceURI, htmlURI) - assert.equal(elemString(noNS), "
    ") - - assert.equal(svgNS.tagName, "svg") - assert.equal(svgNS.namespaceURI, svgURI) - assert.equal(elemString(svgNS), "") - - assert.equal(emptyNS.tagName, "div") - assert.equal(emptyNS.namespaceURI, null) - assert.equal(elemString(emptyNS), "
    ") - - assert.equal(nullNS.tagName, "div") - assert.equal(nullNS.namespaceURI, null) - assert.equal(elemString(nullNS), "
    ") - - assert.equal(undefNS.tagName, "div") - assert.equal(undefNS.namespaceURI, "undefined") - assert.equal(elemString(undefNS), "
    ") - - assert.equal(caseNS.tagName, "AbC") - assert.equal(caseNS.namespaceURI, "Oops") - assert.equal(elemString(caseNS), "") - - assert.equal(htmlNS.tagName, "DIV") - assert.equal(htmlNS.namespaceURI, htmlURI) - assert.equal(elemString(htmlNS), "
    ") - - assert.end() - }) - - test("Can insert before", function (assert) { - var rootNode = document.createElement("div") - var child = document.createElement("div") - var newElement = document.createElement("div") - rootNode.appendChild(child) - var el = rootNode.insertBefore(newElement, child) - assert.equal(el, newElement) - assert.equal(rootNode.childNodes.length, 2) - assert.equal(rootNode.childNodes[0], newElement) - assert.equal(rootNode.childNodes[1], child) - cleanup() - assert.end() - }) - - test("Insert before null appends to end", function (assert) { - var rootNode = document.createElement("div") - var child = document.createElement("div") - var newElement = document.createElement("div") - rootNode.appendChild(child) - var el = rootNode.insertBefore(newElement, null) - assert.equal(el, newElement) - assert.equal(rootNode.childNodes.length, 2) - assert.equal(rootNode.childNodes[0], child) - assert.equal(rootNode.childNodes[1], newElement) - cleanup() - assert.end() - }) - - test("Node insertions remove node from parent", function (assert) { - var parent = document.createElement("div") - var c1 = document.createElement("div") - var c2 = document.createElement("div") - var c3 = document.createElement("div") - parent.appendChild(c1) - parent.appendChild(c2) - parent.appendChild(c3) - - var rootNode = document.createElement("div") - - var node1 = rootNode.appendChild(c1) - assert.equal(node1, c1) - assert.equal(parent.childNodes.length, 2) - assert.equal(c1.parentNode, rootNode) - - var node2 = rootNode.insertBefore(c2, c1) - assert.equal(node2, c2) - assert.equal(parent.childNodes.length, 1) - assert.equal(c2.parentNode, rootNode) - - var node3 = rootNode.replaceChild(c3, c2) - assert.equal(node3, c2) - assert.equal(parent.childNodes.length, 0) - assert.equal(c3.parentNode, rootNode) - assert.equal(c2.parentNode, null) - - cleanup() - assert.end() - }) - - test("input has type=text by default", function (assert) { - var elem = document.createElement("input") - assert.equal(elem.getAttribute("type"), "text"); - assert.equal(elemString(elem), "") - assert.end() - }) - - test("input type=text can be overridden", function (assert) { - var elem = document.createElement("input") - elem.setAttribute("type", "hidden") - assert.equal(elem.getAttribute("type"), "hidden"); - assert.equal(elemString(elem), "") - assert.end() - }) - - test("can set and get attributes", function (assert) { - var elem = document.createElement("div") - assert.equal(elem.getAttribute("foo"), null) - assert.equal(elemString(elem), "
    ") - assert.notOk(elem.hasAttribute('foo')) - - elem.setAttribute("foo", "bar") - assert.equal(elem.getAttribute("foo"), "bar") - assert.equal(elemString(elem), "
    ") - assert.ok(elem.hasAttribute('foo')) - - elem.removeAttribute("foo") - assert.equal(elem.getAttribute("foo"), null) - assert.equal(elemString(elem), "
    ") - assert.notOk(elem.hasAttribute('foo')) - - assert.end() - }) - - test("can set and set style properties", function(assert) { - var elem = document.createElement("div") - assert.equal(elemString(elem), "
    ") - - elem.style.color = "red"; - assert.equal(elem.style.color, "red") - assert.equal(elemString(elem), "
    ") - - elem.style.background = "blue"; - assert.equal(elem.style.color, "red") - assert.equal(elem.style.background, "blue") - assert.equal(elemString(elem), - "
    ") - - assert.end() - }) - - test("can set and get namespaced attributes", function(assert) { - var elem = document.createElement("div") - - var ns = "http://ns.com/my" - assert.equal(elem.getAttributeNS(ns, "myattr"), blankAttributeNS()) - elem.setAttributeNS(ns, "myns:myattr", "the value") - assert.equal(elem.getAttributeNS(ns, "myattr"), "the value") - assert.equal(elemString(elem), '
    ') - elem.removeAttributeNS(ns, "myattr") - assert.equal(elem.getAttributeNS(ns, "myattr"), blankAttributeNS()) - - // Should work much like get/setAttribute when namespace is null. - assert.equal(elem.getAttributeNS(null, "foo"), blankAttributeNS()) - assert.equal(elem.getAttribute("foo"), null) - elem.setAttributeNS(null, "foo", "bar") - assert.equal(elem.getAttributeNS(null, "foo"), "bar") - assert.equal(elem.getAttribute("foo"), "bar") - elem.removeAttributeNS(null, "foo") - assert.equal(elem.getAttributeNS(null, "foo"), blankAttributeNS()) - assert.equal(elem.getAttribute("foo"), null) - assert.end() - }) - - test("can getElementsByTagName", function(assert) { - var parent = document.createElement("div") - var child1 = document.createElement("span") - var child2 = document.createElement("span") - - child1.id = "foo" - child2.id = "bar" - - child1.appendChild(child2) - parent.appendChild(child1) - document.body.appendChild(parent) - - var elems = document.getElementsByTagName("SPAN") - - assert.equal(elems.length, 2) - assert.equal(elems[0].id, "foo") - assert.equal(elems[1].id, "bar") - - cleanup() - assert.end() - }) - - test("can getElementsByTagName with *", function(assert) { - document.body.appendChild(document.createElement("div")) - - var elems = document.getElementsByTagName("*") - - assert.equal(elems.length, 4) - assert.equal(elems[0].tagName, "HTML") - assert.equal(elems[1].tagName, "HEAD") - assert.equal(elems[2].tagName, "BODY") - assert.equal(elems[3].tagName, "DIV") - - cleanup() - assert.end() - }) - - test("getElement* methods search outside the body", function(assert) { - var html = document.documentElement; - assert.equal(document.getElementsByTagName("html")[0], html) - - html.id = "foo" - assert.equal(document.getElementById("foo"), html) - - html.className = "bar" - assert.equal(document.getElementsByClassName("bar")[0], html) - - // cleanup - html.id = "" - html.className = "" - - cleanup() - assert.end() - }) - - test("getElement* methods can be passed to map()", function(assert) { - var e1 = document.createElement("div") - var e2 = document.createElement("span") - - document.body.appendChild(e1) - document.body.appendChild(e2) - - assert.deepEqual( - ["div", "span"].map(document.getElementsByTagName.bind(document)), - [[e1], [e2]] - ) - - e1.id = "1" - e2.id = "2" - - assert.deepEqual( - ["1", "2"].map(document.getElementById.bind(document)), - [e1, e2] - ) - - e1.className = "foo" - e2.className = "bar" - - assert.deepEqual( - ["foo", "bar"].map(document.getElementsByClassName.bind(document)), - [[e1], [e2]] - ) - - cleanup() - assert.end() - }) - - test("can check if it contains an element", function(assert) { - var el = document.createElement("div") - document.body.appendChild(el) - - assert.equals(document.contains(document.body), true) - assert.equals(document.contains(el), true) - - cleanup() - assert.end() - }) - - test("can do events", function (assert) { - var x = 1 - function incx() { x++ } - - var ev = new Event(); - ev.initEvent("click"); - document.addEventListener("click", incx) - document.dispatchEvent(ev) - - assert.equal(x, 2) - - document.removeEventListener("click", incx) - document.dispatchEvent(ev) - - assert.equal(x, 2) - assert.end() - }) - - function blankAttributeNS() { - // Most browsers conform to the latest version of the DOM spec, - // which requires `getAttributeNS` to return `null` when the attribute - // doesn't exist, but some browsers (including phantomjs) implement the - // old version of the spec and return an empty string instead, see: - // https://developer.mozilla.org/en-US/docs/Web/API/element.getAttributeNS#Return_value - var div = document.createElement("div") - var blank = div.getAttributeNS(null, "foo") - if (!(blank === null || blank === "")) { - throw "Expected blank attribute to be either null or empty string" - } - return blank; - } - - function elemString(element) { - var html = String(element) || "[]" - - if (html.charAt(0) === "[") { - html = element.outerHTML - if (!html && !element.parentNode) { - var div = document.createElement("div") - div.appendChild(element) - html = div.innerHTML - div.removeChild(element) - } - } - - return html - } - - function fragString(fragment) { - var html = String(fragment) - - - if (html === "[object DocumentFragment]") { - var innerHTML = [] - for (var i = 0; i < fragment.childNodes.length; i++) { - var node = fragment.childNodes[i] - innerHTML.push(String(node.outerHTML || node)) - } - html = innerHTML.join("") - } - - return html - } -} - - diff --git a/node_modules/min-document/test/test-dom-comment.js b/node_modules/min-document/test/test-dom-comment.js deleted file mode 100644 index 7ecf175..0000000 --- a/node_modules/min-document/test/test-dom-comment.js +++ /dev/null @@ -1,20 +0,0 @@ -var test = require("tape") - -module.exports = testDomComment - -function testDomComment(document) { - var cleanup = require('./cleanup')(document) - - test("can createComment", function(assert) { - var comment = document.createComment("test") - assert.equal(comment.data, "test") - assert.equal(comment.length, 4) - assert.equal(comment.nodeName, "#comment") - assert.equal(comment.nodeType, 8) - assert.equal(comment.nodeValue, "test") - assert.equal(comment.ownerDocument, document) - assert.equal(comment.toString(), "[object Comment]") - cleanup() - assert.end() - }) -} diff --git a/node_modules/min-document/test/test-dom-element.js b/node_modules/min-document/test/test-dom-element.js deleted file mode 100644 index b7f2baa..0000000 --- a/node_modules/min-document/test/test-dom-element.js +++ /dev/null @@ -1,219 +0,0 @@ -var test = require("tape") - -module.exports = testDomElement - -function testDomElement(document) { - - var cleanup = require('./cleanup')(document) - - test("can getElementsByClassName", function(assert) { - function append_div(classNames, parent) { - var div = document.createElement("div") - div.className = classNames - parent.appendChild(div) - return div - } - - function assertMatch(classNames, expectedElements, parent) { - var parent = parent || document - var result = parent.getElementsByClassName(classNames) - assert.equal(result.length, expectedElements.length) - for (var i = 0; i < expectedElements.length; i++) { - assert.notEqual(expectedElements.indexOf(result[i]), -1) - } - } - - var divA = append_div("A", document.body) - var divB = append_div("B", document.body) - var divC = append_div("C", document.body) - - var divA1 = append_div("A1", divA) - var divA2 = append_div("A2", divA) - var divB1 = append_div("B1", divB) - var divB2 = append_div("B2", divB) - var divB2a = append_div("B2a", divB2) - var divB2b = append_div("B2b", divB2) - - assertMatch("A", [divA]) - assertMatch("B", [divB]) - assertMatch("C", [divC]) - assertMatch("A1", [divA1]) - assertMatch("A2", [divA2]) - assertMatch("B1", [divB1]) - assertMatch("B2", [divB2]) - assertMatch("B2a", [divB2a]) - assertMatch("B2b", [divB2b]) - - assertMatch("A1", [divA1], divA) - assertMatch("A2", [divA2], divA) - assertMatch("A1", [], divB) - assertMatch("A2", [], divC) - assertMatch("B1", [divB1], divB) - assertMatch("B2", [divB2], divB) - assertMatch("B2a", [divB2a], divB) - assertMatch("B2a", [divB2a], divB2) - assertMatch("B2b", [], divA) - - cleanup() - assert.end() - }) - - test("does not serialize innerText as an attribute", function(assert) { - var div = document.createElement("div") - div.innerText = "Test <&>" - assert.equal(div.toString(), "
    Test <&>
    ") - cleanup() - assert.end() - }) - - test("does not serialize innerHTML as an attribute", function(assert) { - var div = document.createElement("div") - div.innerHTML = "Test " - assert.equal(div.toString(), "
    Test
    ") - cleanup() - assert.end() - }) - - test("can getElementsByTagName", function(assert) { - var parent = document.createElement("div") - var child1 = document.createElement("span") - var child2 = document.createElement("span") - - child1.id = "foo" - child2.id = "bar" - - child1.appendChild(child2) - parent.appendChild(child1) - - var elems = parent.getElementsByTagName("SPAN") - - assert.equal(elems.length, 2) - assert.equal(elems[0].id, "foo") - assert.equal(elems[1].id, "bar") - - cleanup() - assert.end() - }) - - test("can getElementsByTagName with *", function(assert) { - var e1 = document.createElement("div") - var e2 = document.createElement("p") - var e3 = document.createElement("span") - - e1.appendChild(e2) - e2.appendChild(e3) - // non-elements should be ignored - e3.appendChild(document.createTextNode('foo')) - e3.appendChild(document.createComment('bar')) - - var elems = e1.getElementsByTagName("*") - - assert.equal(elems.length, 2) - assert.equal(elems[0].tagName, "P") - assert.equal(elems[1].tagName, "SPAN") - - cleanup() - assert.end() - }) - - test("getElement* methods can be passed to map()", function(assert) { - var container = document.createElement("div") - var e1 = document.createElement("div") - var e2 = document.createElement("span") - container.appendChild(e1) - container.appendChild(e2) - - assert.deepEqual( - ["div", "span"].map(container.getElementsByTagName.bind(container)), - [[e1], [e2]] - ) - - e1.className = "foo" - e2.className = "bar" - - assert.deepEqual( - ["foo", "bar"].map(container.getElementsByClassName.bind(container)), - [[e1], [e2]] - ) - - cleanup() - assert.end() - }) - - test("can serialize comment nodes", function(assert) { - var div = document.createElement("div") - div.appendChild(document.createComment("test")) - assert.equal(div.toString(), "
    ") - cleanup() - assert.end() - }) - - test("can serialize style property", function(assert) { - var div = document.createElement("div") - div.style.fontSize = "16px" - assert.equal(div.toString(), "
    ") - cleanup(); - assert.end() - }) - - test("can serialize style as a string", function(assert) { - var div = document.createElement("div") - div.setAttribute('style', 'display: none') - assert.equal(div.toString(), "
    ") - cleanup() - assert.end() - }) - - test("can serialize text nodes", function(assert) { - var div = document.createElement("div") - div.appendChild(document.createTextNode(' "&')) - assert.equal(div.toString(), '
    <test> "&
    ') - cleanup() - assert.end() - }) - - test("escapes serialized attribute values", function(assert) { - var div = document.createElement("div") - div.setAttribute("data-foo", '

    "&') - assert.equal(div.toString(), '

    ') - cleanup() - assert.end() - }) - - test("can check if an element contains another", function(assert) { - var parent = document.createElement("div") - var sibling = document.createElement("div") - var child1 = document.createElement("div") - var child2 = document.createElement("div") - - child1.appendChild(child2) - parent.appendChild(child1) - - assert.equal(parent.contains(parent), true) - assert.equal(parent.contains(sibling), false) - assert.equal(parent.contains(child1), true) - assert.equal(parent.contains(child2), true) - - cleanup() - assert.end() - }) - - test("can handle non string attribute values", function(assert) { - var div = document.createElement("div") - div.setAttribute("data-number", 100) - div.setAttribute("data-boolean", true) - div.setAttribute("data-null", null) - assert.equal(div.toString(), '
    ') - cleanup() - assert.end() - }) - - test("can serialize textarea correctly", function(assert) { - var input = document.createElement("textarea") - input.setAttribute("name", "comment") - input.innerHTML = "user input here" - assert.equal(input.toString(), '') - cleanup() - assert.end() - }) -} diff --git a/node_modules/minimatch/LICENSE b/node_modules/minimatch/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minimatch/README.md b/node_modules/minimatch/README.md deleted file mode 100644 index ad72b81..0000000 --- a/node_modules/minimatch/README.md +++ /dev/null @@ -1,209 +0,0 @@ -# minimatch - -A minimal matching utility. - -[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.svg)](http://travis-ci.org/isaacs/minimatch) - - -This is the matching library used internally by npm. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```javascript -var minimatch = require("minimatch") - -minimatch("bar.foo", "*.foo") // true! -minimatch("bar.foo", "*.bar") // false! -minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! -``` - -## Features - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` - -## Minimatch Class - -Create a minimatch object by instantiating the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require("minimatch").Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -* `pattern` The original pattern the minimatch object represents. -* `options` The options supplied to the constructor. -* `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -* `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -* `negate` True if the pattern is negated. -* `comment` True if the pattern is a comment. -* `empty` True if the pattern is `""`. - -### Methods - -* `makeRe` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -* `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -* `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. - -All other methods are internal, and will be called as necessary. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, "*.js", { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) -``` - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself if this option is set. When not set, an empty list -is returned if there are no matches. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) - - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between minimatch and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. diff --git a/node_modules/minimatch/minimatch.js b/node_modules/minimatch/minimatch.js deleted file mode 100644 index 5b5f8cf..0000000 --- a/node_modules/minimatch/minimatch.js +++ /dev/null @@ -1,923 +0,0 @@ -module.exports = minimatch -minimatch.Minimatch = Minimatch - -var path = { sep: '/' } -try { - path = require('path') -} catch (er) {} - -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = require('brace-expansion') - -var plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } -} - -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]' - -// * => any number of characters -var star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - // "" only matches "" - if (pattern.trim() === '') return p === '' - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - if (typeof pattern === 'undefined') { - throw new TypeError('undefined pattern') - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - if (pattern.length > 1024 * 64) { - throw new TypeError('pattern is too long') - } - - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' - - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - var pl = patternListStack.pop() - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close - if (pl.type === '!') { - negativeLists.push(pl) - } - pl.reEnd = re.length - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length) - this.debug('setting tail', re, pl) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail, pl, re) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - try { - var regExp = new RegExp('^' + re + '$', flags) - } catch (er) { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') - return emptyFileEnd - } - - // should be unreachable. - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json deleted file mode 100644 index 8970e2f..0000000 --- a/node_modules/minimatch/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "minimatch@^3.0.2", - "/Users/jbaylina/git/MVP/node_modules/glob" - ] - ], - "_from": "minimatch@>=3.0.2 <4.0.0", - "_id": "minimatch@3.0.3", - "_inCache": true, - "_installable": true, - "_location": "/minimatch", - "_nodeVersion": "4.4.4", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/minimatch-3.0.3.tgz_1470678322731_0.1892083385027945" - }, - "_npmUser": { - "email": "i@izs.me", - "name": "isaacs" - }, - "_npmVersion": "3.10.6", - "_phantomChildren": {}, - "_requested": { - "name": "minimatch", - "raw": "minimatch@^3.0.2", - "rawSpec": "^3.0.2", - "scope": null, - "spec": ">=3.0.2 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/glob" - ], - "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "_shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774", - "_shrinkwrap": null, - "_spec": "minimatch@^3.0.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/glob", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" - }, - "dependencies": { - "brace-expansion": "^1.0.0" - }, - "description": "a glob matcher in javascript", - "devDependencies": { - "standard": "^3.7.2", - "tap": "^5.6.0" - }, - "directories": {}, - "dist": { - "shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774", - "tarball": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz" - }, - "engines": { - "node": "*" - }, - "files": [ - "minimatch.js" - ], - "gitHead": "eed89491bd4a4e6bc463aac0dfb5c29ef0d1dc13", - "homepage": "https://github.com/isaacs/minimatch#readme", - "license": "ISC", - "main": "minimatch.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "minimatch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "scripts": { - "posttest": "standard minimatch.js test/*.js", - "test": "tap test/*.js" - }, - "version": "3.0.3" -} diff --git a/node_modules/minimist/.travis.yml b/node_modules/minimist/.travis.yml deleted file mode 100644 index 74c57bf..0000000 --- a/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.12" - - "iojs" -before_install: - - npm install -g npm@~1.4.6 diff --git a/node_modules/minimist/LICENSE b/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4..0000000 --- a/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/minimist/example/parse.js b/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8..0000000 --- a/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/node_modules/minimist/index.js b/node_modules/minimist/index.js deleted file mode 100644 index 6a0559d..0000000 --- a/node_modules/minimist/index.js +++ /dev/null @@ -1,236 +0,0 @@ -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {}, unknownFn: null }; - - if (typeof opts['unknown'] === 'function') { - flags.unknownFn = opts['unknown']; - } - - if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { - flags.allBools = true; - } else { - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - } - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - flags.strings[aliases[key]] = true; - } - }); - - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } - - function argDefined(key, arg) { - return (flags.allBools && /^--[^=]+$/.test(arg)) || - flags.strings[key] || flags.bools[key] || aliases[key]; - } - - function setArg (key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) return; - } - - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - function setKey (obj, keys, value) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - if (o[key] === undefined) o[key] = {}; - o = o[key]; - }); - - var key = keys[keys.length - 1]; - if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } - } - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - var key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, next, arg); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next, arg) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { - setArg(letters[j], next.split('=')[1], arg); - broken = true; - break; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2), arg); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, args[i+1], arg); - i++; - } - else if (args[i+1] && /true|false/.test(args[i+1])) { - setArg(key, args[i+1] === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - } - else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - if (opts['--']) { - argv['--'] = new Array(); - notFlags.forEach(function(key) { - argv['--'].push(key); - }); - } - else { - notFlags.forEach(function(key) { - argv._.push(key); - }); - } - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} - diff --git a/node_modules/minimist/package.json b/node_modules/minimist/package.json deleted file mode 100644 index 3ef64a5..0000000 --- a/node_modules/minimist/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "minimist@~1.2.0", - "/Users/jbaylina/git/MVP/node_modules/tape" - ] - ], - "_from": "minimist@>=1.2.0 <1.3.0", - "_id": "minimist@1.2.0", - "_inCache": true, - "_installable": true, - "_location": "/minimist", - "_nodeVersion": "2.4.0", - "_npmUser": { - "email": "substack@gmail.com", - "name": "substack" - }, - "_npmVersion": "3.2.2", - "_phantomChildren": {}, - "_requested": { - "name": "minimist", - "raw": "minimist@~1.2.0", - "rawSpec": "~1.2.0", - "scope": null, - "spec": ">=1.2.0 <1.3.0", - "type": "range" - }, - "_requiredBy": [ - "/tape" - ], - "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "_shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", - "_shrinkwrap": null, - "_spec": "minimist@~1.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/tape", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/minimist/issues" - }, - "dependencies": {}, - "description": "parse argument options", - "devDependencies": { - "covert": "^1.0.0", - "tap": "~0.4.0", - "tape": "^3.5.0" - }, - "directories": {}, - "dist": { - "shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", - "tarball": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" - }, - "gitHead": "dc624482fcfec5bc669c68cdb861f00573ed4e64", - "homepage": "https://github.com/substack/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "minimist", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/minimist.git" - }, - "scripts": { - "coverage": "covert test/*.js", - "test": "tap test/*.js" - }, - "testling": { - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ], - "files": "test/*.js" - }, - "version": "1.2.0" -} diff --git a/node_modules/minimist/readme.markdown b/node_modules/minimist/readme.markdown deleted file mode 100644 index 30a74cf..0000000 --- a/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,91 +0,0 @@ -# minimist - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) - -[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.dir(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ _: [ 'foo', 'bar', 'baz' ], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' } -``` - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a boolean, string or array of strings to always treat as -booleans. if `true` will treat all double hyphenated arguments without equal signs -as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values -* `opts.stopEarly` - when true, populate `argv._` with everything after the -first non-option -* `opts['--']` - when true, populate `argv._` with everything before the `--` -and `argv['--']` with everything after the `--`. Here's an example: -* `opts.unknown` - a function which is invoked with a command line parameter not -defined in the `opts` configuration object. If the function returns `false`, the -unknown option is not added to `argv`. - -``` -> require('./')('one two three -- four five --six'.split(' '), { '--': true }) -{ _: [ 'one', 'two', 'three' ], - '--': [ 'four', 'five', '--six' ] } -``` - -Note that with `opts['--']` set, parsing for arguments still stops after the -`--`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT diff --git a/node_modules/minimist/test/all_bool.js b/node_modules/minimist/test/all_bool.js deleted file mode 100644 index ac83548..0000000 --- a/node_modules/minimist/test/all_bool.js +++ /dev/null @@ -1,32 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('flag boolean true (default all --args to boolean)', function (t) { - var argv = parse(['moo', '--honk', 'cow'], { - boolean: true - }); - - t.deepEqual(argv, { - honk: true, - _: ['moo', 'cow'] - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); - -test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { - var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { - boolean: true - }); - - t.deepEqual(argv, { - honk: true, - tacos: 'good', - p: 55, - _: ['moo', 'cow'] - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); diff --git a/node_modules/minimist/test/bool.js b/node_modules/minimist/test/bool.js deleted file mode 100644 index 14b0717..0000000 --- a/node_modules/minimist/test/bool.js +++ /dev/null @@ -1,166 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('flag boolean default false', function (t) { - var argv = parse(['moo'], { - boolean: ['t', 'verbose'], - default: { verbose: false, t: false } - }); - - t.deepEqual(argv, { - verbose: false, - t: false, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { - boolean: ['x','y','z'] - }); - - t.deepEqual(argv, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ] - }); - - t.deepEqual(typeof argv.x, 'boolean'); - t.deepEqual(typeof argv.y, 'boolean'); - t.deepEqual(typeof argv.z, 'boolean'); - t.end(); -}); -test('boolean and alias with chainable api', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = parse(aliased, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var propertyArgv = parse(regular, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - alias: { 'h': 'herp' }, - boolean: 'herp' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias array with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var alt = [ '--harp', 'derp' ]; - var opts = { - alias: { 'h': ['herp', 'harp'] }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var altPropertyArgv = parse(alt, opts); - var expected = { - harp: true, - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.same(altPropertyArgv, expected); - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = [ '-h', 'true' ]; - var regular = [ '--herp', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function(t) { - var parsed = parse(['--boool', '--other=true'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = parse(['--boool', '--other=false'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); - -test('boolean --boool=true', function (t) { - var parsed = parse(['--boool=true'], { - default: { - boool: false - }, - boolean: ['boool'] - }); - - t.same(parsed.boool, true); - t.end(); -}); - -test('boolean --boool=false', function (t) { - var parsed = parse(['--boool=false'], { - default: { - boool: true - }, - boolean: ['boool'] - }); - - t.same(parsed.boool, false); - t.end(); -}); diff --git a/node_modules/minimist/test/dash.js b/node_modules/minimist/test/dash.js deleted file mode 100644 index 5a4fa5b..0000000 --- a/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,31 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('-', function (t) { - t.plan(5); - t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); - t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); - t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); - t.deepEqual( - parse([ '-b', '-' ], { boolean: 'b' }), - { b: true, _: [ '-' ] } - ); - t.deepEqual( - parse([ '-s', '-' ], { string: 's' }), - { s: '-', _: [] } - ); -}); - -test('-a -- b', function (t) { - t.plan(3); - t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); -}); - -test('move arguments after the -- into their own `--` array', function(t) { - t.plan(1); - t.deepEqual( - parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }), - { name: 'John', _: [ 'before' ], '--': [ 'after' ] }); -}); diff --git a/node_modules/minimist/test/default_bool.js b/node_modules/minimist/test/default_bool.js deleted file mode 100644 index 780a311..0000000 --- a/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,35 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('boolean default true', function (t) { - var argv = parse([], { - boolean: 'sometrue', - default: { sometrue: true } - }); - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = parse([], { - boolean: 'somefalse', - default: { somefalse: false } - }); - t.equal(argv.somefalse, false); - t.end(); -}); - -test('boolean default to null', function (t) { - var argv = parse([], { - boolean: 'maybe', - default: { maybe: null } - }); - t.equal(argv.maybe, null); - var argv = parse(['--maybe'], { - boolean: 'maybe', - default: { maybe: null } - }); - t.equal(argv.maybe, true); - t.end(); - -}) diff --git a/node_modules/minimist/test/dotted.js b/node_modules/minimist/test/dotted.js deleted file mode 100644 index d8b3e85..0000000 --- a/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,22 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('dotted alias', function (t) { - var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 22); - t.equal(argv.aa.bb, 22); - t.end(); -}); - -test('dotted default', function (t) { - var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 11); - t.equal(argv.aa.bb, 11); - t.end(); -}); - -test('dotted default with no alias', function (t) { - var argv = parse('', {default: {'a.b': 11}}); - t.equal(argv.a.b, 11); - t.end(); -}); diff --git a/node_modules/minimist/test/kv_short.js b/node_modules/minimist/test/kv_short.js deleted file mode 100644 index f813b30..0000000 --- a/node_modules/minimist/test/kv_short.js +++ /dev/null @@ -1,16 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('short -k=v' , function (t) { - t.plan(1); - - var argv = parse([ '-b=123' ]); - t.deepEqual(argv, { b: 123, _: [] }); -}); - -test('multi short -k=v' , function (t) { - t.plan(1); - - var argv = parse([ '-a=whatever', '-b=robots' ]); - t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); -}); diff --git a/node_modules/minimist/test/long.js b/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e0..0000000 --- a/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('long opts', function (t) { - t.deepEqual( - parse([ '--bool' ]), - { bool : true, _ : [] }, - 'long boolean' - ); - t.deepEqual( - parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture sp' - ); - t.deepEqual( - parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture eq' - ); - t.deepEqual( - parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures sp' - ); - t.deepEqual( - parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures eq' - ); - t.end(); -}); diff --git a/node_modules/minimist/test/num.js b/node_modules/minimist/test/num.js deleted file mode 100644 index 2cc77f4..0000000 --- a/node_modules/minimist/test/num.js +++ /dev/null @@ -1,36 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('nums', function (t) { - var argv = parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789' - ]); - t.deepEqual(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ] - }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv.y, 'number'); - t.deepEqual(typeof argv.z, 'number'); - t.deepEqual(typeof argv.w, 'string'); - t.deepEqual(typeof argv.hex, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); - -test('already a number', function (t) { - var argv = parse([ '-x', 1234, 789 ]); - t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); diff --git a/node_modules/minimist/test/parse.js b/node_modules/minimist/test/parse.js deleted file mode 100644 index 7b4a2a1..0000000 --- a/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,197 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse args', function (t) { - t.deepEqual( - parse([ '--no-moo' ]), - { moo : false, _ : [] }, - 'no' - ); - t.deepEqual( - parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [] }, - 'multi' - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.deepEqual( - parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek' - ]), - { - c : true, - a : true, - t : true, - s : 'woo', - h : 'awesome', - b : true, - bool : true, - key : 'value', - multi : [ 'quux', 'baz' ], - meep : false, - name : 'meowmers', - _ : [ 'bare', '--not-a-flag', 'eek' ] - } - ); - t.end(); -}); - -test('flag boolean', function (t) { - var argv = parse([ '-t', 'moo' ], { boolean: 't' }); - t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { - boolean: [ 't', 'verbose' ], - default: { verbose: true } - }); - - t.deepEqual(argv, { - verbose: false, - t: true, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('newlines in params' , function (t) { - var args = parse([ '-s', "X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = parse([ "--s=X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - t.end(); -}); - -test('strings' , function (t) { - var s = parse([ '-s', '0001234' ], { string: 's' }).s; - t.equal(s, '0001234'); - t.equal(typeof s, 'string'); - - var x = parse([ '-x', '56' ], { string: 'x' }).x; - t.equal(x, '56'); - t.equal(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = parse([ ' ', ' ' ], { string: '_' })._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('empty strings', function(t) { - var s = parse([ '-s' ], { string: 's' }).s; - t.equal(s, ''); - t.equal(typeof s, 'string'); - - var str = parse([ '--str' ], { string: 'str' }).str; - t.equal(str, ''); - t.equal(typeof str, 'string'); - - var letters = parse([ '-art' ], { - string: [ 'a', 't' ] - }); - - t.equal(letters.a, ''); - t.equal(letters.r, true); - t.equal(letters.t, ''); - - t.end(); -}); - - -test('string and alias', function(t) { - var x = parse([ '--str', '000123' ], { - string: 's', - alias: { s: 'str' } - }); - - t.equal(x.str, '000123'); - t.equal(typeof x.str, 'string'); - t.equal(x.s, '000123'); - t.equal(typeof x.s, 'string'); - - var y = parse([ '-s', '000123' ], { - string: 'str', - alias: { str: 's' } - }); - - t.equal(y.str, '000123'); - t.equal(typeof y.str, 'string'); - t.equal(y.s, '000123'); - t.equal(typeof y.s, 'string'); - t.end(); -}); - -test('slashBreak', function (t) { - t.same( - parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [] } - ); - t.same( - parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [] } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: 'zoom' } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: [ 'zm', 'zoom' ] } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = parse([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop' - ]); - - t.same(argv.foo, { - bar : 3, - baz : 4, - quux : { - quibble : 5, - o_O : true - } - }); - t.same(argv.beep, { boop : true }); - t.end(); -}); diff --git a/node_modules/minimist/test/parse_modified.js b/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index ab620dc..0000000 --- a/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse with modifier functions' , function (t) { - t.plan(1); - - var argv = parse([ '-b', '123' ], { boolean: 'b' }); - t.deepEqual(argv, { b: true, _: [123] }); -}); diff --git a/node_modules/minimist/test/short.js b/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c..0000000 --- a/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('numeric short args', function (t) { - t.plan(2); - t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); - t.deepEqual( - parse([ '-123', '456' ]), - { 1: true, 2: true, 3: 456, _: [] } - ); -}); - -test('short', function (t) { - t.deepEqual( - parse([ '-b' ]), - { b : true, _ : [] }, - 'short boolean' - ); - t.deepEqual( - parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ] }, - 'bare' - ); - t.deepEqual( - parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [] }, - 'group' - ); - t.deepEqual( - parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [] }, - 'short group next' - ); - t.deepEqual( - parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [] }, - 'short capture' - ); - t.deepEqual( - parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [] }, - 'short captures' - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.deepEqual( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); diff --git a/node_modules/minimist/test/stop_early.js b/node_modules/minimist/test/stop_early.js deleted file mode 100644 index bdf9fbc..0000000 --- a/node_modules/minimist/test/stop_early.js +++ /dev/null @@ -1,15 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('stops parsing on the first non-option when stopEarly is set', function (t) { - var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { - stopEarly: true - }); - - t.deepEqual(argv, { - aaa: 'bbb', - _: ['ccc', '--ddd'] - }); - - t.end(); -}); diff --git a/node_modules/minimist/test/unknown.js b/node_modules/minimist/test/unknown.js deleted file mode 100644 index 462a36b..0000000 --- a/node_modules/minimist/test/unknown.js +++ /dev/null @@ -1,102 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('boolean and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'true', '--derp', 'true' ]; - var regular = [ '--herp', 'true', '-d', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h', - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('flag boolean true any double hyphen argument is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { - boolean: true, - unknown: unknownFn - }); - t.same(unknown, ['--tacos=good', 'cow', '-p']); - t.same(argv, { - honk: true, - _: [] - }); - t.end(); -}); - -test('string and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'hello', '--derp', 'goodbye' ]; - var regular = [ '--herp', 'hello', '-d', 'moon' ]; - var opts = { - alias: { h: 'herp' }, - string: 'h', - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('default and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'hello' ]; - var regular = [ '--herp', 'hello' ]; - var opts = { - default: { 'h': 'bar' }, - alias: { 'h': 'herp' }, - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, []); - t.end(); - unknownFn(); // exercise fn for 100% coverage -}); - -test('value following -- is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '--bad', '--', 'good', 'arg' ]; - var opts = { - '--': true, - unknown: unknownFn - }; - var argv = parse(aliased, opts); - - t.same(unknown, ['--bad']); - t.same(argv, { - '--': ['good', 'arg'], - '_': [] - }) - t.end(); -}); diff --git a/node_modules/minimist/test/whitespace.js b/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58..0000000 --- a/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('whitespace should be whitespace' , function (t) { - t.plan(1); - var x = parse([ '-x', '\t' ]).x; - t.equal(x, '\t'); -}); diff --git a/node_modules/nan/CHANGELOG.md b/node_modules/nan/CHANGELOG.md deleted file mode 100644 index 2519fbc..0000000 --- a/node_modules/nan/CHANGELOG.md +++ /dev/null @@ -1,430 +0,0 @@ -# NAN ChangeLog - -**Version 2.4.0: current Node 6.3.0, Node 12: 0.12.15, Node 10: 0.10.46, iojs: 3.3.1** - -### 2.4.0 Jul 10 2016 - - - Feature: Rewrite Callback to add Callback::Reset c4cf44d61f8275cd5f7b0c911d7a806d4004f649 - - Feature: AsyncProgressWorker: add template types for .send 1242c9a11a7ed481c8f08ec06316385cacc513d0 - - Bugfix: Add constness to old Persistent comparison operators bd43cb9982c7639605d60fd073efe8cae165d9b2 - -### 2.3.5 May 31 2016 - - - Bugfix: Replace NAN_INLINE with 'inline' keyword. 71819d8725f822990f439479c9aba3b240804909 - -### 2.3.4 May 31 2016 - - - Bugfix: Remove V8 deprecation warnings 0592fb0a47f3a1c7763087ebea8e1138829f24f9 - - Bugfix: Fix new versions not to use WeakCallbackInfo::IsFirstPass 615c19d9e03d4be2049c10db0151edbc3b229246 - - Bugfix: Make ObjectWrap::handle() const d19af99595587fe7a26bd850af6595c2a7145afc - - Bugfix: Fix compilation errors related to 0592fb0a47f3a1c7763087ebea8e1138829f24f9 e9191c525b94f652718325e28610a1adcf90fed8 - -### 2.3.3 May 4 2016 - - - Bugfix: Refactor SetMethod() to deal with v8::Templates (#566) b9083cf6d5de6ebe6bcb49c7502fbb7c0d9ddda8 - -### 2.3.2 Apr 27 2016 - - - Bugfix: Fix compilation on outdated versions due to Handle removal f8b7c875d04d425a41dfd4f3f8345bc3a11e6c52 - -### 2.3.1 Apr 27 2016 - - - Bugfix: Don't use deprecated v8::Template::Set() in SetMethod a90951e9ea70fa1b3836af4b925322919159100e - -### 2.3.0 Apr 27 2016 - - - Feature: added Signal() for invoking async callbacks without sending data from AsyncProgressWorker d8adba45f20e077d00561b20199133620c990b38 - - Bugfix: Don't use deprecated v8::Template::Set() 00dacf0a4b86027415867fa7f1059acc499dcece - -### 2.2.1 Mar 29 2016 - - - Bugfix: Use NewFromUnsigned in ReturnValue::Set(uint32_t i) for pre_12 3a18f9bdce29826e0e4c217854bc476918241a58 - - Performance: Remove unneeeded nullptr checks b715ef44887931c94f0d1605b3b1a4156eebece9 - -### 2.2.0 Jan 9 2016 - - - Feature: Add Function::Call wrapper 4c157474dacf284d125c324177b45aa5dabc08c6 - - Feature: Rename GC*logueCallback to GCCallback for > 4.0 3603435109f981606d300eb88004ca101283acec - - Bugfix: Fix Global::Pass for old versions 367e82a60fbaa52716232cc89db1cc3f685d77d9 - - Bugfix: Remove weird MaybeLocal wrapping of what already is a MaybeLocal 23b4590db10c2ba66aee2338aebe9751c4cb190b - -### 2.1.0 Oct 8 2015 - - - Deprecation: Deprecate NanErrnoException in favor of ErrnoException 0af1ca4cf8b3f0f65ed31bc63a663ab3319da55c - - Feature: added helper class for accessing contents of typedarrays 17b51294c801e534479d5463697a73462d0ca555 - - Feature: [Maybe types] Add MakeMaybe(...) 48d7b53d9702b0c7a060e69ea10fea8fb48d814d - - Feature: new: allow utf16 string with length 66ac6e65c8ab9394ef588adfc59131b3b9d8347b - - Feature: Introduce SetCallHandler and SetCallAsFunctionHandler 7764a9a115d60ba10dc24d86feb0fbc9b4f75537 - - Bugfix: Enable creating Locals from Globals under Node 0.10. 9bf9b8b190821af889790fdc18ace57257e4f9ff - - Bugfix: Fix issue #462 where PropertyCallbackInfo data is not stored safely. 55f50adedd543098526c7b9f4fffd607d3f9861f - -### 2.0.9 Sep 8 2015 - - - Bugfix: EscapableHandleScope in Nan::NewBuffer for Node 0.8 and 0.10 b1654d7 - -### 2.0.8 Aug 28 2015 - - - Work around duplicate linking bug in clang 11902da - -### 2.0.7 Aug 26 2015 - - - Build: Repackage - -### 2.0.6 Aug 26 2015 - - - Bugfix: Properly handle null callback in FunctionTemplate factory 6e99cb1 - - Bugfix: Remove unused static std::map instances 525bddc - - Bugfix: Make better use of maybe versions of APIs bfba85b - - Bugfix: Fix shadowing issues with handle in ObjectWrap 0a9072d - -### 2.0.5 Aug 10 2015 - - - Bugfix: Reimplement weak callback in ObjectWrap 98d38c1 - - Bugfix: Make sure callback classes are not assignable, copyable or movable 81f9b1d - -### 2.0.4 Aug 6 2015 - - - Build: Repackage - -### 2.0.3 Aug 6 2015 - - - Bugfix: Don't use clang++ / g++ syntax extension. 231450e - -### 2.0.2 Aug 6 2015 - - - Build: Repackage - -### 2.0.1 Aug 6 2015 - - - Bugfix: Add workaround for missing REPLACE_INVALID_UTF8 60d6687 - - Bugfix: Reimplement ObjectWrap from scratch to prevent memory leaks 6484601 - - Bugfix: Fix Persistent leak in FunctionCallbackInfo and PropertyCallbackInfo 641ef5f - - Bugfix: Add missing overload for Nan::NewInstance that takes argc/argv 29450ed - -### 2.0.0 Jul 31 2015 - - - Change: Renamed identifiers with leading underscores b5932b4 - - Change: Replaced NanObjectWrapHandle with class NanObjectWrap 464f1e1 - - Change: Replace NanScope and NanEscpableScope macros with classes 47751c4 - - Change: Rename NanNewBufferHandle to NanNewBuffer 6745f99 - - Change: Rename NanBufferUse to NanNewBuffer 3e8b0a5 - - Change: Rename NanNewBuffer to NanCopyBuffer d6af78d - - Change: Remove Nan prefix from all names 72d1f67 - - Change: Update Buffer API for new upstream changes d5d3291 - - Change: Rename Scope and EscapableScope to HandleScope and EscapableHandleScope 21a7a6a - - Change: Get rid of Handles e6c0daf - - Feature: Support io.js 3 with V8 4.4 - - Feature: Introduce NanPersistent 7fed696 - - Feature: Introduce NanGlobal 4408da1 - - Feature: Added NanTryCatch 10f1ca4 - - Feature: Update for V8 v4.3 4b6404a - - Feature: Introduce NanNewOneByteString c543d32 - - Feature: Introduce namespace Nan 67ed1b1 - - Removal: Remove NanLocker and NanUnlocker dd6e401 - - Removal: Remove string converters, except NanUtf8String, which now follows the node implementation b5d00a9 - - Removal: Remove NanReturn* macros d90a25c - - Removal: Remove HasInstance e8f84fe - - -### 1.9.0 Jul 31 2015 - - - Feature: Added `NanFatalException` 81d4a2c - - Feature: Added more error types 4265f06 - - Feature: Added dereference and function call operators to NanCallback c4b2ed0 - - Feature: Added indexed GetFromPersistent and SaveToPersistent edd510c - - Feature: Added more overloads of SaveToPersistent and GetFromPersistent 8b1cef6 - - Feature: Added NanErrnoException dd87d9e - - Correctness: Prevent assign, copy, and move for classes that do not support it 1f55c59, 4b808cb, c96d9b2, fba4a29, 3357130 - - Deprecation: Deprecate `NanGetPointerSafe` and `NanSetPointerSafe` 81d4a2c - - Deprecation: Deprecate `NanBooleanOptionValue` and `NanUInt32OptionValue` 0ad254b - -### 1.8.4 Apr 26 2015 - - - Build: Repackage - -### 1.8.3 Apr 26 2015 - - - Bugfix: Include missing header 1af8648 - -### 1.8.2 Apr 23 2015 - - - Build: Repackage - -### 1.8.1 Apr 23 2015 - - - Bugfix: NanObjectWrapHandle should take a pointer 155f1d3 - -### 1.8.0 Apr 23 2015 - - - Feature: Allow primitives with NanReturnValue 2e4475e - - Feature: Added comparison operators to NanCallback 55b075e - - Feature: Backport thread local storage 15bb7fa - - Removal: Remove support for signatures with arguments 8a2069d - - Correcteness: Replaced NanObjectWrapHandle macro with function 0bc6d59 - -### 1.7.0 Feb 28 2015 - - - Feature: Made NanCallback::Call accept optional target 8d54da7 - - Feature: Support atom-shell 0.21 0b7f1bb - -### 1.6.2 Feb 6 2015 - - - Bugfix: NanEncode: fix argument type for node::Encode on io.js 2be8639 - -### 1.6.1 Jan 23 2015 - - - Build: version bump - -### 1.5.3 Jan 23 2015 - - - Build: repackage - -### 1.6.0 Jan 23 2015 - - - Deprecated `NanNewContextHandle` in favor of `NanNew` 49259af - - Support utility functions moved in newer v8 versions (Node 0.11.15, io.js 1.0) a0aa179 - - Added `NanEncode`, `NanDecodeBytes` and `NanDecodeWrite` 75e6fb9 - -### 1.5.2 Jan 23 2015 - - - Bugfix: Fix non-inline definition build error with clang++ 21d96a1, 60fadd4 - - Bugfix: Readded missing String constructors 18d828f - - Bugfix: Add overload handling NanNew(..) 5ef813b - - Bugfix: Fix uv_work_cb versioning 997e4ae - - Bugfix: Add function factory and test 4eca89c - - Bugfix: Add object template factory and test cdcb951 - - Correctness: Lifted an io.js related typedef c9490be - - Correctness: Make explicit downcasts of String lengths 00074e6 - - Windows: Limit the scope of disabled warning C4530 83d7deb - -### 1.5.1 Jan 15 2015 - - - Build: version bump - -### 1.4.3 Jan 15 2015 - - - Build: version bump - -### 1.4.2 Jan 15 2015 - - - Feature: Support io.js 0dbc5e8 - -### 1.5.0 Jan 14 2015 - - - Feature: Support io.js b003843 - - Correctness: Improved NanNew internals 9cd4f6a - - Feature: Implement progress to NanAsyncWorker 8d6a160 - -### 1.4.1 Nov 8 2014 - - - Bugfix: Handle DEBUG definition correctly - - Bugfix: Accept int as Boolean - -### 1.4.0 Nov 1 2014 - - - Feature: Added NAN_GC_CALLBACK 6a5c245 - - Performance: Removed unnecessary local handle creation 18a7243, 41fe2f8 - - Correctness: Added constness to references in NanHasInstance 02c61cd - - Warnings: Fixed spurious warnings from -Wundef and -Wshadow, 541b122, 99d8cb6 - - Windoze: Shut Visual Studio up when compiling 8d558c1 - - License: Switch to plain MIT from custom hacked MIT license 11de983 - - Build: Added test target to Makefile e232e46 - - Performance: Removed superfluous scope in NanAsyncWorker f4b7821 - - Sugar/Feature: Added NanReturnThis() and NanReturnHolder() shorthands 237a5ff, d697208 - - Feature: Added suitable overload of NanNew for v8::Integer::NewFromUnsigned b27b450 - -### 1.3.0 Aug 2 2014 - - - Added NanNew(std::string) - - Added NanNew(std::string&) - - Added NanAsciiString helper class - - Added NanUtf8String helper class - - Added NanUcs2String helper class - - Deprecated NanRawString() - - Deprecated NanCString() - - Added NanGetIsolateData(v8::Isolate *isolate) - - Added NanMakeCallback(v8::Handle target, v8::Handle func, int argc, v8::Handle* argv) - - Added NanMakeCallback(v8::Handle target, v8::Handle symbol, int argc, v8::Handle* argv) - - Added NanMakeCallback(v8::Handle target, const char* method, int argc, v8::Handle* argv) - - Added NanSetTemplate(v8::Handle templ, v8::Handle name , v8::Handle value, v8::PropertyAttribute attributes) - - Added NanSetPrototypeTemplate(v8::Local templ, v8::Handle name, v8::Handle value, v8::PropertyAttribute attributes) - - Added NanSetInstanceTemplate(v8::Local templ, const char *name, v8::Handle value) - - Added NanSetInstanceTemplate(v8::Local templ, v8::Handle name, v8::Handle value, v8::PropertyAttribute attributes) - -### 1.2.0 Jun 5 2014 - - - Add NanSetPrototypeTemplate - - Changed NAN_WEAK_CALLBACK internals, switched _NanWeakCallbackData to class, - introduced _NanWeakCallbackDispatcher - - Removed -Wno-unused-local-typedefs from test builds - - Made test builds Windows compatible ('Sleep()') - -### 1.1.2 May 28 2014 - - - Release to fix more stuff-ups in 1.1.1 - -### 1.1.1 May 28 2014 - - - Release to fix version mismatch in nan.h and lack of changelog entry for 1.1.0 - -### 1.1.0 May 25 2014 - - - Remove nan_isolate, use v8::Isolate::GetCurrent() internally instead - - Additional explicit overloads for NanNew(): (char*,int), (uint8_t*[,int]), - (uint16_t*[,int), double, int, unsigned int, bool, v8::String::ExternalStringResource*, - v8::String::ExternalAsciiStringResource* - - Deprecate NanSymbol() - - Added SetErrorMessage() and ErrorMessage() to NanAsyncWorker - -### 1.0.0 May 4 2014 - - - Heavy API changes for V8 3.25 / Node 0.11.13 - - Use cpplint.py - - Removed NanInitPersistent - - Removed NanPersistentToLocal - - Removed NanFromV8String - - Removed NanMakeWeak - - Removed NanNewLocal - - Removed NAN_WEAK_CALLBACK_OBJECT - - Removed NAN_WEAK_CALLBACK_DATA - - Introduce NanNew, replaces NanNewLocal, NanPersistentToLocal, adds many overloaded typed versions - - Introduce NanUndefined, NanNull, NanTrue and NanFalse - - Introduce NanEscapableScope and NanEscapeScope - - Introduce NanMakeWeakPersistent (requires a special callback to work on both old and new node) - - Introduce NanMakeCallback for node::MakeCallback - - Introduce NanSetTemplate - - Introduce NanGetCurrentContext - - Introduce NanCompileScript and NanRunScript - - Introduce NanAdjustExternalMemory - - Introduce NanAddGCEpilogueCallback, NanAddGCPrologueCallback, NanRemoveGCEpilogueCallback, NanRemoveGCPrologueCallback - - Introduce NanGetHeapStatistics - - Rename NanAsyncWorker#SavePersistent() to SaveToPersistent() - -### 0.8.0 Jan 9 2014 - - - NanDispose -> NanDisposePersistent, deprecate NanDispose - - Extract _NAN_*_RETURN_TYPE, pull up NAN_*() - -### 0.7.1 Jan 9 2014 - - - Fixes to work against debug builds of Node - - Safer NanPersistentToLocal (avoid reinterpret_cast) - - Speed up common NanRawString case by only extracting flattened string when necessary - -### 0.7.0 Dec 17 2013 - - - New no-arg form of NanCallback() constructor. - - NanCallback#Call takes Handle rather than Local - - Removed deprecated NanCallback#Run method, use NanCallback#Call instead - - Split off _NAN_*_ARGS_TYPE from _NAN_*_ARGS - - Restore (unofficial) Node 0.6 compatibility at NanCallback#Call() - - Introduce NanRawString() for char* (or appropriate void*) from v8::String - (replacement for NanFromV8String) - - Introduce NanCString() for null-terminated char* from v8::String - -### 0.6.0 Nov 21 2013 - - - Introduce NanNewLocal(v8::Handle value) for use in place of - v8::Local::New(...) since v8 started requiring isolate in Node 0.11.9 - -### 0.5.2 Nov 16 2013 - - - Convert SavePersistent and GetFromPersistent in NanAsyncWorker from protected and public - -### 0.5.1 Nov 12 2013 - - - Use node::MakeCallback() instead of direct v8::Function::Call() - -### 0.5.0 Nov 11 2013 - - - Added @TooTallNate as collaborator - - New, much simpler, "include_dirs" for binding.gyp - - Added full range of NAN_INDEX_* macros to match NAN_PROPERTY_* macros - -### 0.4.4 Nov 2 2013 - - - Isolate argument from v8::Persistent::MakeWeak removed for 0.11.8+ - -### 0.4.3 Nov 2 2013 - - - Include node_object_wrap.h, removed from node.h for Node 0.11.8. - -### 0.4.2 Nov 2 2013 - - - Handle deprecation of v8::Persistent::Dispose(v8::Isolate* isolate)) for - Node 0.11.8 release. - -### 0.4.1 Sep 16 2013 - - - Added explicit `#include ` as it was removed from node.h for v0.11.8 - -### 0.4.0 Sep 2 2013 - - - Added NAN_INLINE and NAN_DEPRECATED and made use of them - - Added NanError, NanTypeError and NanRangeError - - Cleaned up code - -### 0.3.2 Aug 30 2013 - - - Fix missing scope declaration in GetFromPersistent() and SaveToPersistent - in NanAsyncWorker - -### 0.3.1 Aug 20 2013 - - - fix "not all control paths return a value" compile warning on some platforms - -### 0.3.0 Aug 19 2013 - - - Made NAN work with NPM - - Lots of fixes to NanFromV8String, pulling in features from new Node core - - Changed node::encoding to Nan::Encoding in NanFromV8String to unify the API - - Added optional error number argument for NanThrowError() - - Added NanInitPersistent() - - Added NanReturnNull() and NanReturnEmptyString() - - Added NanLocker and NanUnlocker - - Added missing scopes - - Made sure to clear disposed Persistent handles - - Changed NanAsyncWorker to allocate error messages on the heap - - Changed NanThrowError(Local) to NanThrowError(Handle) - - Fixed leak in NanAsyncWorker when errmsg is used - -### 0.2.2 Aug 5 2013 - - - Fixed usage of undefined variable with node::BASE64 in NanFromV8String() - -### 0.2.1 Aug 5 2013 - - - Fixed 0.8 breakage, node::BUFFER encoding type not available in 0.8 for - NanFromV8String() - -### 0.2.0 Aug 5 2013 - - - Added NAN_PROPERTY_GETTER, NAN_PROPERTY_SETTER, NAN_PROPERTY_ENUMERATOR, - NAN_PROPERTY_DELETER, NAN_PROPERTY_QUERY - - Extracted _NAN_METHOD_ARGS, _NAN_GETTER_ARGS, _NAN_SETTER_ARGS, - _NAN_PROPERTY_GETTER_ARGS, _NAN_PROPERTY_SETTER_ARGS, - _NAN_PROPERTY_ENUMERATOR_ARGS, _NAN_PROPERTY_DELETER_ARGS, - _NAN_PROPERTY_QUERY_ARGS - - Added NanGetInternalFieldPointer, NanSetInternalFieldPointer - - Added NAN_WEAK_CALLBACK, NAN_WEAK_CALLBACK_OBJECT, - NAN_WEAK_CALLBACK_DATA, NanMakeWeak - - Renamed THROW_ERROR to _NAN_THROW_ERROR - - Added NanNewBufferHandle(char*, size_t, node::smalloc::FreeCallback, void*) - - Added NanBufferUse(char*, uint32_t) - - Added NanNewContextHandle(v8::ExtensionConfiguration*, - v8::Handle, v8::Handle) - - Fixed broken NanCallback#GetFunction() - - Added optional encoding and size arguments to NanFromV8String() - - Added NanGetPointerSafe() and NanSetPointerSafe() - - Added initial test suite (to be expanded) - - Allow NanUInt32OptionValue to convert any Number object - -### 0.1.0 Jul 21 2013 - - - Added `NAN_GETTER`, `NAN_SETTER` - - Added `NanThrowError` with single Local argument - - Added `NanNewBufferHandle` with single uint32_t argument - - Added `NanHasInstance(Persistent&, Handle)` - - Added `Local NanCallback#GetFunction()` - - Added `NanCallback#Call(int, Local[])` - - Deprecated `NanCallback#Run(int, Local[])` in favour of Call diff --git a/node_modules/nan/LICENSE.md b/node_modules/nan/LICENSE.md deleted file mode 100644 index e4fc412..0000000 --- a/node_modules/nan/LICENSE.md +++ /dev/null @@ -1,13 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2016 NAN contributors ------------------------------------ - -*NAN contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/nan/README.md b/node_modules/nan/README.md deleted file mode 100644 index 7f163b6..0000000 --- a/node_modules/nan/README.md +++ /dev/null @@ -1,403 +0,0 @@ -Native Abstractions for Node.js -=============================== - -**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10, 0.12, 1, 4, 5 and 6.** - -***Current version: 2.4.0*** - -*(See [CHANGELOG.md](https://github.com/nodejs/nan/blob/master/CHANGELOG.md) for complete ChangeLog)* - -[![NPM](https://nodei.co/npm/nan.png?downloads=true&downloadRank=true)](https://nodei.co/npm/nan/) [![NPM](https://nodei.co/npm-dl/nan.png?months=6&height=3)](https://nodei.co/npm/nan/) - -[![Build Status](https://api.travis-ci.org/nodejs/nan.svg?branch=master)](http://travis-ci.org/nodejs/nan) -[![Build status](https://ci.appveyor.com/api/projects/status/kh73pbm9dsju7fgh)](https://ci.appveyor.com/project/RodVagg/nan) - -Thanks to the crazy changes in V8 (and some in Node core), keeping native addons compiling happily across versions, particularly 0.10 to 0.12 to 4.0, is a minor nightmare. The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect `NODE_MODULE_VERSION` and get yourself into a macro-tangle. - -This project also contains some helper utilities that make addon development a bit more pleasant. - - * **[News & Updates](#news)** - * **[Usage](#usage)** - * **[Example](#example)** - * **[API](#api)** - * **[Tests](#tests)** - * **[Governance & Contributing](#governance)** - -
    -## News & Updates - - -## Usage - -Simply add **NAN** as a dependency in the *package.json* of your Node addon: - -``` bash -$ npm install --save nan -``` - -Pull in the path to **NAN** in your *binding.gyp* so that you can use `#include ` in your *.cpp* files: - -``` python -"include_dirs" : [ - "` when compiling your addon. - - -## Example - -Just getting started with Nan? Take a look at the **[Node Add-on Examples](https://github.com/nodejs/node-addon-examples)**. - -Refer to a [quick-start **Nan** Boilerplate](https://github.com/fcanas/node-native-boilerplate) for a ready-to-go project that utilizes basic Nan functionality. - -For a simpler example, see the **[async pi estimation example](https://github.com/nodejs/nan/tree/master/examples/async_pi_estimate)** in the examples directory for full code and an explanation of what this Monte Carlo Pi estimation example does. Below are just some parts of the full example that illustrate the use of **NAN**. - -Yet another example is **[nan-example-eol](https://github.com/CodeCharmLtd/nan-example-eol)**. It shows newline detection implemented as a native addon. - -Also take a look at our comprehensive **[C++ test suite](https://github.com/nodejs/nan/tree/master/test/cpp)** which has a plehora of code snippets for your pasting pleasure. - - -## API - -Additional to the NAN documentation below, please consult: - -* [The V8 Getting Started Guide](https://developers.google.com/v8/get_started) -* [The V8 Embedders Guide](https://developers.google.com/v8/embed) -* [V8 API Documentation](http://v8docs.nodesource.com/) -* [Node Add-on Documentation](https://nodejs.org/api/addons.html) - - - -### JavaScript-accessible methods - -A _template_ is a blueprint for JavaScript functions and objects in a context. You can use a template to wrap C++ functions and data structures within JavaScript objects so that they can be manipulated from JavaScript. See the V8 Embedders Guide section on [Templates](https://developers.google.com/v8/embed#templates) for further information. - -In order to expose functionality to JavaScript via a template, you must provide it to V8 in a form that it understands. Across the versions of V8 supported by NAN, JavaScript-accessible method signatures vary widely, NAN fully abstracts method declaration and provides you with an interface that is similar to the most recent V8 API but is backward-compatible with older versions that still use the now-deceased `v8::Argument` type. - -* **Method argument types** - - Nan::FunctionCallbackInfo - - Nan::PropertyCallbackInfo - - Nan::ReturnValue -* **Method declarations** - - Method declaration - - Getter declaration - - Setter declaration - - Property getter declaration - - Property setter declaration - - Property enumerator declaration - - Property deleter declaration - - Property query declaration - - Index getter declaration - - Index setter declaration - - Index enumerator declaration - - Index deleter declaration - - Index query declaration -* Method and template helpers - - Nan::SetMethod() - - Nan::SetPrototypeMethod() - - Nan::SetAccessor() - - Nan::SetNamedPropertyHandler() - - Nan::SetIndexedPropertyHandler() - - Nan::SetTemplate() - - Nan::SetPrototypeTemplate() - - Nan::SetInstanceTemplate() - - Nan::SetCallHandler() - - Nan::SetCallAsFunctionHandler() - -### Scopes - -A _local handle_ is a pointer to an object. All V8 objects are accessed using handles, they are necessary because of the way the V8 garbage collector works. - -A handle scope can be thought of as a container for any number of handles. When you've finished with your handles, instead of deleting each one individually you can simply delete their scope. - -The creation of `HandleScope` objects is different across the supported versions of V8. Therefore, NAN provides its own implementations that can be used safely across these. - - - Nan::HandleScope - - Nan::EscapableHandleScope - -Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles). - -### Persistent references - -An object reference that is independent of any `HandleScope` is a _persistent_ reference. Where a `Local` handle only lives as long as the `HandleScope` in which it was allocated, a `Persistent` handle remains valid until it is explicitly disposed. - -Due to the evolution of the V8 API, it is necessary for NAN to provide a wrapper implementation of the `Persistent` classes to supply compatibility across the V8 versions supported. - - - Nan::PersistentBase & v8::PersistentBase - - Nan::NonCopyablePersistentTraits & v8::NonCopyablePersistentTraits - - Nan::CopyablePersistentTraits & v8::CopyablePersistentTraits - - Nan::Persistent - - Nan::Global - - Nan::WeakCallbackInfo - - Nan::WeakCallbackType - -Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles). - -### New - -NAN provides a `Nan::New()` helper for the creation of new JavaScript objects in a way that's compatible across the supported versions of V8. - - - Nan::New() - - Nan::Undefined() - - Nan::Null() - - Nan::True() - - Nan::False() - - Nan::EmptyString() - - -### Converters - -NAN contains functions that convert `v8::Value`s to other `v8::Value` types and native types. Since type conversion is not guaranteed to succeed, they return `Nan::Maybe` types. These converters can be used in place of `value->ToX()` and `value->XValue()` (where `X` is one of the types, e.g. `Boolean`) in a way that provides a consistent interface across V8 versions. Newer versions of V8 use the new `v8::Maybe` and `v8::MaybeLocal` types for these conversions, older versions don't have this functionality so it is provided by NAN. - - - Nan::To() - -### Maybe Types - -The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Local` handles that _may be empty_. - -* **Maybe Types** - - Nan::MaybeLocal - - Nan::Maybe - - Nan::Nothing - - Nan::Just -* **Maybe Helpers** - - Nan::Call() - - Nan::ToDetailString() - - Nan::ToArrayIndex() - - Nan::Equals() - - Nan::NewInstance() - - Nan::GetFunction() - - Nan::Set() - - Nan::ForceSet() - - Nan::Get() - - Nan::GetPropertyAttributes() - - Nan::Has() - - Nan::Delete() - - Nan::GetPropertyNames() - - Nan::GetOwnPropertyNames() - - Nan::SetPrototype() - - Nan::ObjectProtoToString() - - Nan::HasOwnProperty() - - Nan::HasRealNamedProperty() - - Nan::HasRealIndexedProperty() - - Nan::HasRealNamedCallbackProperty() - - Nan::GetRealNamedPropertyInPrototypeChain() - - Nan::GetRealNamedProperty() - - Nan::CallAsFunction() - - Nan::CallAsConstructor() - - Nan::GetSourceLine() - - Nan::GetLineNumber() - - Nan::GetStartColumn() - - Nan::GetEndColumn() - - Nan::CloneElementAt() - - Nan::MakeMaybe() - -### Script - -NAN provides a `v8::Script` helpers as the API has changed over the supported versions of V8. - - - Nan::CompileScript() - - Nan::RunScript() - - -### Errors - -NAN includes helpers for creating, throwing and catching Errors as much of this functionality varies across the supported versions of V8 and must be abstracted. - -Note that an Error object is simply a specialized form of `v8::Value`. - -Also consult the V8 Embedders Guide section on [Exceptions](https://developers.google.com/v8/embed#exceptions) for more information. - - - Nan::Error() - - Nan::RangeError() - - Nan::ReferenceError() - - Nan::SyntaxError() - - Nan::TypeError() - - Nan::ThrowError() - - Nan::ThrowRangeError() - - Nan::ThrowReferenceError() - - Nan::ThrowSyntaxError() - - Nan::ThrowTypeError() - - Nan::FatalException() - - Nan::ErrnoException() - - Nan::TryCatch - - -### Buffers - -NAN's `node::Buffer` helpers exist as the API has changed across supported Node versions. Use these methods to ensure compatibility. - - - Nan::NewBuffer() - - Nan::CopyBuffer() - - Nan::FreeCallback() - -### Nan::Callback - -`Nan::Callback` makes it easier to use `v8::Function` handles as callbacks. A class that wraps a `v8::Function` handle, protecting it from garbage collection and making it particularly useful for storage and use across asynchronous execution. - - - Nan::Callback - -### Asynchronous work helpers - -`Nan::AsyncWorker` and `Nan::AsyncProgressWorker` are helper classes that make working with asynchronous code easier. - - - Nan::AsyncWorker - - Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker - - Nan::AsyncQueueWorker - -### Strings & Bytes - -Miscellaneous string & byte encoding and decoding functionality provided for compatibility across supported versions of V8 and Node. Implemented by NAN to ensure that all encoding types are supported, even for older versions of Node where they are missing. - - - Nan::Encoding - - Nan::Encode() - - Nan::DecodeBytes() - - Nan::DecodeWrite() - - -### Object Wrappers - -The `ObjectWrap` class can be used to make wrapped C++ objects and a factory of wrapped objects. - - - Nan::ObjectWrap - - -### V8 internals - -The hooks to access V8 internals—including GC and statistics—are different across the supported versions of V8, therefore NAN provides its own hooks that call the appropriate V8 methods. - - - NAN_GC_CALLBACK() - - Nan::AddGCEpilogueCallback() - - Nan::RemoveGCEpilogueCallback() - - Nan::AddGCPrologueCallback() - - Nan::RemoveGCPrologueCallback() - - Nan::GetHeapStatistics() - - Nan::SetCounterFunction() - - Nan::SetCreateHistogramFunction() - - Nan::SetAddHistogramSampleFunction() - - Nan::IdleNotification() - - Nan::LowMemoryNotification() - - Nan::ContextDisposedNotification() - - Nan::GetInternalFieldPointer() - - Nan::SetInternalFieldPointer() - - Nan::AdjustExternalMemory() - - -### Miscellaneous V8 Helpers - - - Nan::Utf8String - - Nan::GetCurrentContext() - - Nan::SetIsolateData() - - Nan::GetIsolateData() - - Nan::TypedArrayContents - - -### Miscellaneous Node Helpers - - - Nan::MakeCallback() - - NAN_MODULE_INIT() - - Nan::Export() - - - - - -### Tests - -To run the NAN tests do: - -``` sh -npm install -npm run-script rebuild-tests -npm test -``` - -Or just: - -``` sh -npm install -make test -``` - - -## Governance & Contributing - -NAN is governed by the [io.js](https://iojs.org/) Addon API Working Group - -### Addon API Working Group (WG) - -The NAN project is jointly governed by a Working Group which is responsible for high-level guidance of the project. - -Members of the WG are also known as Collaborators, there is no distinction between the two, unlike other io.js projects. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project [README.md](./README.md#collaborators). - -Individuals making significant and valuable contributions are made members of the WG and given commit-access to the project. These individuals are identified by the WG and their addition to the WG is discussed via GitHub and requires unanimous consensus amongst those WG members participating in the discussion with a quorum of 50% of WG members required for acceptance of the vote. - -_Note:_ If you make a significant contribution and are not considered for commit-access log an issue or contact a WG member directly. - -For the current list of WG members / Collaborators, see the project [README.md](./README.md#collaborators). - -### Consensus Seeking Process - -The WG follows a [Consensus Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) decision making model. - -Modifications of the contents of the NAN repository are made on a collaborative basis. Anybody with a GitHub account may propose a modification via pull request and it will be considered by the WG. All pull requests must be reviewed and accepted by a WG member with sufficient expertise who is able to take full responsibility for the change. In the case of pull requests proposed by an existing WG member, an additional WG member is required for sign-off. Consensus should be sought if additional WG members participate and there is disagreement around a particular modification. - -If a change proposal cannot reach a consensus, a WG member can call for a vote amongst the members of the WG. Simple majority wins. - - -## Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - - -### WG Members / Collaborators - - - - - - - - - -
    Rod VaggGitHub/rvaggTwitter/@rvagg
    Benjamin ByholmGitHub/kkoopa-
    Trevor NorrisGitHub/trevnorrisTwitter/@trevnorris
    Nathan RajlichGitHub/TooTallNateTwitter/@TooTallNate
    Brett LawsonGitHub/brett19Twitter/@brett19x
    Ben NoordhuisGitHub/bnoordhuisTwitter/@bnoordhuis
    David SiegelGitHub/agnat-
    - -## Licence & copyright - -Copyright (c) 2016 NAN WG Members / Collaborators (listed above). - -Native Abstractions for Node.js is licensed under an MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details. diff --git a/node_modules/nan/doc/asyncworker.md b/node_modules/nan/doc/asyncworker.md deleted file mode 100644 index 6bc4cce..0000000 --- a/node_modules/nan/doc/asyncworker.md +++ /dev/null @@ -1,103 +0,0 @@ -## Asynchronous work helpers - -`Nan::AsyncWorker` and `Nan::AsyncProgressWorker` are helper classes that make working with asynchronous code easier. - - - Nan::AsyncWorker - - Nan::AsyncProgressWorker - - Nan::AsyncQueueWorker - - -### Nan::AsyncWorker - -`Nan::AsyncWorker` is an _abstract_ class that you can subclass to have much of the annoying asynchronous queuing and handling taken care of for you. It can even store arbitrary V8 objects for you and have them persist while the asynchronous work is in progress. - -Definition: - -```c++ -class AsyncWorker { - public: - explicit AsyncWorker(Callback *callback_); - - virtual ~AsyncWorker(); - - virtual void WorkComplete(); - - void SaveToPersistent(const char *key, const v8::Local &value); - - void SaveToPersistent(const v8::Local &key, - const v8::Local &value); - - void SaveToPersistent(uint32_t index, - const v8::Local &value); - - v8::Local GetFromPersistent(const char *key) const; - - v8::Local GetFromPersistent(const v8::Local &key) const; - - v8::Local GetFromPersistent(uint32_t index) const; - - virtual void Execute() = 0; - - uv_work_t request; - - virtual void Destroy(); - - protected: - Persistent persistentHandle; - - Callback *callback; - - virtual void HandleOKCallback(); - - virtual void HandleErrorCallback(); - - void SetErrorMessage(const char *msg); - - const char* ErrorMessage(); -}; -``` - - -### Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker - -`Nan::AsyncProgressWorkerBase` is an _abstract_ class template that extends `Nan::AsyncWorker` and adds additional progress reporting callbacks that can be used during the asynchronous work execution to provide progress data back to JavaScript. - -Previously the definiton of `Nan::AsyncProgressWorker` only allowed sending `const char` data. Now extending `Nan::AsyncProgressWorker` will yield an instance of the implicit `Nan::AsyncProgressWorkerBase` template with type `` for compatibility. - -Definition: - -```c++ -template -class AsyncProgressWorkerBase : public AsyncWorker { - public: - explicit AsyncProgressWorker(Callback *callback_); - - virtual ~AsyncProgressWorker(); - - void WorkProgress(); - - class ExecutionProgress { - public: - void Signal() const; - void Send(const T* data, size_t size) const; - }; - - virtual void Execute(const ExecutionProgress& progress) = 0; - - virtual void HandleProgressCallback(const T *data, size_t size) = 0; - - virtual void Destroy(); - -typedef AsyncProgressWorkerBase AsyncProgressWorker; -``` - - -### Nan::AsyncQueueWorker - -`Nan::AsyncQueueWorker` will run a `Nan::AsyncWorker` asynchronously via libuv. Both the `execute` and `after_work` steps are taken care of for you. Most of the logic for this is embedded in `Nan::AsyncWorker`. - -Definition: - -```c++ -void AsyncQueueWorker(AsyncWorker *); -``` diff --git a/node_modules/nan/doc/buffers.md b/node_modules/nan/doc/buffers.md deleted file mode 100644 index 8d8d25c..0000000 --- a/node_modules/nan/doc/buffers.md +++ /dev/null @@ -1,54 +0,0 @@ -## Buffers - -NAN's `node::Buffer` helpers exist as the API has changed across supported Node versions. Use these methods to ensure compatibility. - - - Nan::NewBuffer() - - Nan::CopyBuffer() - - Nan::FreeCallback() - - -### Nan::NewBuffer() - -Allocate a new `node::Buffer` object with the specified size and optional data. Calls `node::Buffer::New()`. - -Note that when creating a `Buffer` using `Nan::NewBuffer()` and an existing `char*`, it is assumed that the ownership of the pointer is being transferred to the new `Buffer` for management. -When a `node::Buffer` instance is garbage collected and a `FreeCallback` has not been specified, `data` will be disposed of via a call to `free()`. -You _must not_ free the memory space manually once you have created a `Buffer` in this way. - -Signature: - -```c++ -Nan::MaybeLocal Nan::NewBuffer(uint32_t size) -Nan::MaybeLocal Nan::NewBuffer(char* data, uint32_t size) -Nan::MaybeLocal Nan::NewBuffer(char *data, - size_t length, - Nan::FreeCallback callback, - void *hint) -``` - - - -### Nan::CopyBuffer() - -Similar to [`Nan::NewBuffer()`](#api_nan_new_buffer) except that an implicit memcpy will occur within Node. Calls `node::Buffer::Copy()`. - -Management of the `char*` is left to the user, you should manually free the memory space if necessary as the new `Buffer` will have its own copy. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CopyBuffer(const char *data, uint32_t size) -``` - - - -### Nan::FreeCallback() - -A free callback that can be provided to [`Nan::NewBuffer()`](#api_nan_new_buffer). -The supplied callback will be invoked when the `Buffer` undergoes garbage collection. - -Signature: - -```c++ -typedef void (*FreeCallback)(char *data, void *hint); -``` diff --git a/node_modules/nan/doc/callback.md b/node_modules/nan/doc/callback.md deleted file mode 100644 index 46de1d7..0000000 --- a/node_modules/nan/doc/callback.md +++ /dev/null @@ -1,56 +0,0 @@ -## Nan::Callback - -`Nan::Callback` makes it easier to use `v8::Function` handles as callbacks. A class that wraps a `v8::Function` handle, protecting it from garbage collection and making it particularly useful for storage and use across asynchronous execution. - - - Nan::Callback - - -### Nan::Callback - -```c++ -class Callback { - public: - Callback(); - - explicit Callback(const v8::Local &fn); - - ~Callback(); - - bool operator==(const Callback &other) const; - - bool operator!=(const Callback &other) const; - - v8::Local operator*() const; - - v8::Local operator()(v8::Local target, - int argc = 0, - v8::Local argv[] = 0) const; - - v8::Local operator()(int argc = 0, - v8::Local argv[] = 0) const; - - void SetFunction(const v8::Local &fn); - - v8::Local GetFunction() const; - - bool IsEmpty() const; - - void Reset(const v8::Local &fn); - - void Reset(); - - v8::Local Call(v8::Local target, - int argc, - v8::Local argv[]) const; - - v8::Local Call(int argc, v8::Local argv[]) const; -}; -``` - -Example usage: - -```c++ -v8::Local function; -Nan::Callback callback(function); -callback.Call(0, 0); -``` diff --git a/node_modules/nan/doc/converters.md b/node_modules/nan/doc/converters.md deleted file mode 100644 index d20861b..0000000 --- a/node_modules/nan/doc/converters.md +++ /dev/null @@ -1,41 +0,0 @@ -## Converters - -NAN contains functions that convert `v8::Value`s to other `v8::Value` types and native types. Since type conversion is not guaranteed to succeed, they return `Nan::Maybe` types. These converters can be used in place of `value->ToX()` and `value->XValue()` (where `X` is one of the types, e.g. `Boolean`) in a way that provides a consistent interface across V8 versions. Newer versions of V8 use the new `v8::Maybe` and `v8::MaybeLocal` types for these conversions, older versions don't have this functionality so it is provided by NAN. - - - Nan::To() - - -### Nan::To() - -Converts a `v8::Local` to a different subtype of `v8::Value` or to a native data type. Returns a `Nan::MaybeLocal<>` or a `Nan::Maybe<>` accordingly. - -See [maybe_types.md](./maybe_types.md) for more information on `Nan::Maybe` types. - -Signatures: - -```c++ -// V8 types -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); - -// Native types -Nan::Maybe Nan::To(v8::Local val); -Nan::Maybe Nan::To(v8::Local val); -Nan::Maybe Nan::To(v8::Local val); -Nan::Maybe Nan::To(v8::Local val); -Nan::Maybe Nan::To(v8::Local val); -``` - -### Example - -```c++ -v8::Local val; -Nan::MaybeLocal str = Nan::To(val); -Nan::Maybe d = Nan::To(val); -``` - diff --git a/node_modules/nan/doc/errors.md b/node_modules/nan/doc/errors.md deleted file mode 100644 index aac6e08..0000000 --- a/node_modules/nan/doc/errors.md +++ /dev/null @@ -1,226 +0,0 @@ -## Errors - -NAN includes helpers for creating, throwing and catching Errors as much of this functionality varies across the supported versions of V8 and must be abstracted. - -Note that an Error object is simply a specialized form of `v8::Value`. - -Also consult the V8 Embedders Guide section on [Exceptions](https://developers.google.com/v8/embed#exceptions) for more information. - - - Nan::Error() - - Nan::RangeError() - - Nan::ReferenceError() - - Nan::SyntaxError() - - Nan::TypeError() - - Nan::ThrowError() - - Nan::ThrowRangeError() - - Nan::ThrowReferenceError() - - Nan::ThrowSyntaxError() - - Nan::ThrowTypeError() - - Nan::FatalException() - - Nan::ErrnoException() - - Nan::TryCatch - - - -### Nan::Error() - -Create a new Error object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.0/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an Error object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::Error(const char *msg); -v8::Local Nan::Error(v8::Local msg); -``` - - - -### Nan::RangeError() - -Create a new RangeError object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.0/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an RangeError object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::RangeError(const char *msg); -v8::Local Nan::RangeError(v8::Local msg); -``` - - - -### Nan::ReferenceError() - -Create a new ReferenceError object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.0/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an ReferenceError object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::ReferenceError(const char *msg); -v8::Local Nan::ReferenceError(v8::Local msg); -``` - - - -### Nan::SyntaxError() - -Create a new SyntaxError object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.0/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an SyntaxError object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::SyntaxError(const char *msg); -v8::Local Nan::SyntaxError(v8::Local msg); -``` - - - -### Nan::TypeError() - -Create a new TypeError object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.0/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an TypeError object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::TypeError(const char *msg); -v8::Local Nan::TypeError(v8::Local msg); -``` - - - -### Nan::ThrowError() - -Throw an Error object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new Error object will be created. - -Signature: - -```c++ -void Nan::ThrowError(const char *msg); -void Nan::ThrowError(v8::Local msg); -void Nan::ThrowError(v8::Local error); -``` - - - -### Nan::ThrowRangeError() - -Throw an RangeError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new RangeError object will be created. - -Signature: - -```c++ -void Nan::ThrowRangeError(const char *msg); -void Nan::ThrowRangeError(v8::Local msg); -void Nan::ThrowRangeError(v8::Local error); -``` - - - -### Nan::ThrowReferenceError() - -Throw an ReferenceError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new ReferenceError object will be created. - -Signature: - -```c++ -void Nan::ThrowReferenceError(const char *msg); -void Nan::ThrowReferenceError(v8::Local msg); -void Nan::ThrowReferenceError(v8::Local error); -``` - - - -### Nan::ThrowSyntaxError() - -Throw an SyntaxError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new SyntaxError object will be created. - -Signature: - -```c++ -void Nan::ThrowSyntaxError(const char *msg); -void Nan::ThrowSyntaxError(v8::Local msg); -void Nan::ThrowSyntaxError(v8::Local error); -``` - - - -### Nan::ThrowTypeError() - -Throw an TypeError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new TypeError object will be created. - -Signature: - -```c++ -void Nan::ThrowTypeError(const char *msg); -void Nan::ThrowTypeError(v8::Local msg); -void Nan::ThrowTypeError(v8::Local error); -``` - - -### Nan::FatalException() - -Replaces `node::FatalException()` which has a different API across supported versions of Node. For use with [`Nan::TryCatch`](#api_nan_try_catch). - -Signature: - -```c++ -void Nan::FatalException(const Nan::TryCatch& try_catch); -``` - - -### Nan::ErrnoException() - -Replaces `node::ErrnoException()` which has a different API across supported versions of Node. - -Signature: - -```c++ -v8::Local Nan::ErrnoException(int errorno, - const char* syscall = NULL, - const char* message = NULL, - const char* path = NULL); -``` - - - -### Nan::TryCatch - -A simple wrapper around [`v8::TryCatch`](https://v8docs.nodesource.com/io.js-3.0/d4/dc6/classv8_1_1_try_catch.html) compatible with all supported versions of V8. Can be used as a direct replacement in most cases. See also [`Nan::FatalException()`](#api_nan_fatal_exception) for an internal use compatible with `node::FatalException`. - -Signature: - -```c++ -class Nan::TryCatch { - public: - Nan::TryCatch(); - - bool HasCaught() const; - - bool CanContinue() const; - - v8::Local ReThrow(); - - v8::Local Exception() const; - - // Nan::MaybeLocal for older versions of V8 - v8::MaybeLocal StackTrace() const; - - v8::Local Message() const; - - void Reset(); - - void SetVerbose(bool value); - - void SetCaptureMessage(bool value); -}; -``` - diff --git a/node_modules/nan/doc/maybe_types.md b/node_modules/nan/doc/maybe_types.md deleted file mode 100644 index 9ca9cee..0000000 --- a/node_modules/nan/doc/maybe_types.md +++ /dev/null @@ -1,512 +0,0 @@ -## Maybe Types - -The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Local` handles that _may be empty_. - -* **Maybe Types** - - Nan::MaybeLocal - - Nan::Maybe - - Nan::Nothing - - Nan::Just -* **Maybe Helpers** - - Nan::Call() - - Nan::ToDetailString() - - Nan::ToArrayIndex() - - Nan::Equals() - - Nan::NewInstance() - - Nan::GetFunction() - - Nan::Set() - - Nan::ForceSet() - - Nan::Get() - - Nan::GetPropertyAttributes() - - Nan::Has() - - Nan::Delete() - - Nan::GetPropertyNames() - - Nan::GetOwnPropertyNames() - - Nan::SetPrototype() - - Nan::ObjectProtoToString() - - Nan::HasOwnProperty() - - Nan::HasRealNamedProperty() - - Nan::HasRealIndexedProperty() - - Nan::HasRealNamedCallbackProperty() - - Nan::GetRealNamedPropertyInPrototypeChain() - - Nan::GetRealNamedProperty() - - Nan::CallAsFunction() - - Nan::CallAsConstructor() - - Nan::GetSourceLine() - - Nan::GetLineNumber() - - Nan::GetStartColumn() - - Nan::GetEndColumn() - - Nan::CloneElementAt() - - Nan::MakeMaybe() - - -### Nan::MaybeLocal - -A `Nan::MaybeLocal` is a wrapper around [`v8::Local`](https://v8docs.nodesource.com/io.js-3.0/de/deb/classv8_1_1_local.html) that enforces a check that determines whether the `v8::Local` is empty before it can be used. - -If an API method returns a `Nan::MaybeLocal`, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a `v8::TerminateExecution` exception was thrown. In that case, an empty `Nan::MaybeLocal` is returned. - -Definition: - -```c++ -template class Nan::MaybeLocal { - public: - MaybeLocal(); - - template MaybeLocal(v8::Local that); - - bool IsEmpty() const; - - template bool ToLocal(v8::Local *out); - - // Will crash if the MaybeLocal<> is empty. - v8::Local ToLocalChecked(); - - template v8::Local FromMaybe(v8::Local default_value) const; -}; -``` - -See the documentation for [`v8::MaybeLocal`](https://v8docs.nodesource.com/io.js-3.0/d8/d7d/classv8_1_1_maybe_local.html) for further details. - - -### Nan::Maybe - -A simple `Nan::Maybe` type, representing an object which may or may not have a value, see https://hackage.haskell.org/package/base/docs/Data-Maybe.html. - -If an API method returns a `Nan::Maybe<>`, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a `v8::TerminateExecution` exception was thrown. In that case, a "Nothing" value is returned. - -Definition: - -```c++ -template class Nan::Maybe { - public: - bool IsNothing() const; - bool IsJust() const; - - // Will crash if the Maybe<> is nothing. - T FromJust(); - - T FromMaybe(const T& default_value); - - bool operator==(const Maybe &other); - - bool operator!=(const Maybe &other); -}; -``` - -See the documentation for [`v8::Maybe`](https://v8docs.nodesource.com/io.js-3.0/d9/d4b/classv8_1_1_maybe.html) for further details. - - -### Nan::Nothing - -Construct an empty `Nan::Maybe` type representing _nothing_. - -```c++ -template Nan::Maybe Nan::Nothing(); -``` - - -### Nan::Just - -Construct a `Nan::Maybe` type representing _just_ a value. - -```c++ -template Nan::Maybe Nan::Just(const T &t); -``` - - -### Nan::Call() - -A helper method for calling [`v8::Function#Call()`](https://v8docs.nodesource.com/io.js-3.0/d5/d54/classv8_1_1_function.html#a468a89f737af0612db10132799c827c0) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::Call(v8::Local fun, v8::Local recv, int argc, v8::Local argv[]); -``` - - - -### Nan::ToDetailString() - -A helper method for calling [`v8::Value#ToDetailString()`](https://v8docs.nodesource.com/io.js-3.0/dc/d0a/classv8_1_1_value.html#a2f9770296dc2c8d274bc8cc0dca243e5) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::ToDetailString(v8::Local val); -``` - - - -### Nan::ToArrayIndex() - -A helper method for calling [`v8::Value#ToArrayIndex()`](https://v8docs.nodesource.com/io.js-3.0/dc/d0a/classv8_1_1_value.html#acc5bbef3c805ec458470c0fcd6f13493) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::ToArrayIndex(v8::Local val); -``` - - - -### Nan::Equals() - -A helper method for calling [`v8::Value#Equals()`](https://v8docs.nodesource.com/io.js-3.0/dc/d0a/classv8_1_1_value.html#a0d9616ab2de899d4e3047c30a10c9285) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::Equals(v8::Local a, v8::Local(b)); -``` - - - -### Nan::NewInstance() - -A helper method for calling [`v8::Function#NewInstance()`](https://v8docs.nodesource.com/io.js-3.0/d5/d54/classv8_1_1_function.html#a691b13f7a553069732cbacf5ac8c62ec) and [`v8::ObjectTemplate#NewInstance()`](https://v8docs.nodesource.com/io.js-3.0/db/d5f/classv8_1_1_object_template.html#ad605a7543cfbc5dab54cdb0883d14ae4) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::NewInstance(v8::Local h); -Nan::MaybeLocal Nan::NewInstance(v8::Local h, int argc, v8::Local argv[]); -Nan::MaybeLocal Nan::NewInstance(v8::Local h); -``` - - - -### Nan::GetFunction() - -A helper method for calling [`v8::FunctionTemplate#GetFunction()`](https://v8docs.nodesource.com/io.js-3.0/d8/d83/classv8_1_1_function_template.html#a56d904662a86eca78da37d9bb0ed3705) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetFunction(v8::Local t); -``` - - - -### Nan::Set() - -A helper method for calling [`v8::Object#Set()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a67604ea3734f170c66026064ea808f20) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::Set(v8::Local obj, - v8::Local key, - v8::Local value) -Nan::Maybe Nan::Set(v8::Local obj, - uint32_t index, - v8::Local value); -``` - - - -### Nan::ForceSet() - -A helper method for calling [`v8::Object#ForceSet()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a796b7b682896fb64bf1872747734e836) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::ForceSet(v8::Local obj, - v8::Local key, - v8::Local value, - v8::PropertyAttribute attribs = v8::None); -``` - - - -### Nan::Get() - -A helper method for calling [`v8::Object#Get()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a2565f03e736694f6b1e1cf22a0b4eac2) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::Get(v8::Local obj, - v8::Local key); -Nan::MaybeLocal Nan::Get(v8::Local obj, uint32_t index); -``` - - - -### Nan::GetPropertyAttributes() - -A helper method for calling [`v8::Object#GetPropertyAttributes()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a9b898894da3d1db2714fd9325a54fe57) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::GetPropertyAttributes( - v8::Local obj, - v8::Local key); -``` - - - -### Nan::Has() - -A helper method for calling [`v8::Object#Has()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ab3c3d89ea7c2f9afd08965bd7299a41d) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::Has(v8::Local obj, v8::Local key); -Nan::Maybe Nan::Has(v8::Local obj, uint32_t index); -``` - - - -### Nan::Delete() - -A helper method for calling [`v8::Object#Delete()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a2fa0f5a592582434ed1ceceff7d891ef) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::Delete(v8::Local obj, - v8::Local key); -Nan::Maybe Nan::Delete(v8::Local obj, uint32_t index); -``` - - - -### Nan::GetPropertyNames() - -A helper method for calling [`v8::Object#GetPropertyNames()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#aced885270cfd2c956367b5eedc7fbfe8) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetPropertyNames(v8::Local obj); -``` - - - -### Nan::GetOwnPropertyNames() - -A helper method for calling [`v8::Object#GetOwnPropertyNames()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a79a6e4d66049b9aa648ed4dfdb23e6eb) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetOwnPropertyNames(v8::Local obj); -``` - - - -### Nan::SetPrototype() - -A helper method for calling [`v8::Object#SetPrototype()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a442706b22fceda6e6d1f632122a9a9f4) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::SetPrototype(v8::Local obj, - v8::Local prototype); -``` - - - -### Nan::ObjectProtoToString() - -A helper method for calling [`v8::Object#ObjectProtoToString()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ab7a92b4dcf822bef72f6c0ac6fea1f0b) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::ObjectProtoToString(v8::Local obj); -``` - - - -### Nan::HasOwnProperty() - -A helper method for calling [`v8::Object#HasOwnProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ab7b7245442ca6de1e1c145ea3fd653ff) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasOwnProperty(v8::Local obj, - v8::Local key); -``` - - - -### Nan::HasRealNamedProperty() - -A helper method for calling [`v8::Object#HasRealNamedProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ad8b80a59c9eb3c1e6c3cd6c84571f767) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasRealNamedProperty(v8::Local obj, - v8::Local key); -``` - - - -### Nan::HasRealIndexedProperty() - -A helper method for calling [`v8::Object#HasRealIndexedProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#af94fc1135a5e74a2193fb72c3a1b9855) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasRealIndexedProperty(v8::Local obj, - uint32_t index); -``` - - - -### Nan::HasRealNamedCallbackProperty() - -A helper method for calling [`v8::Object#HasRealNamedCallbackProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#af743b7ea132b89f84d34d164d0668811) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasRealNamedCallbackProperty( - v8::Local obj, - v8::Local key); -``` - - - -### Nan::GetRealNamedPropertyInPrototypeChain() - -A helper method for calling [`v8::Object#GetRealNamedPropertyInPrototypeChain()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a8700b1862e6b4783716964ba4d5e6172) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetRealNamedPropertyInPrototypeChain( - v8::Local obj, - v8::Local key); -``` - - - -### Nan::GetRealNamedProperty() - -A helper method for calling [`v8::Object#GetRealNamedProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a84471a824576a5994fdd0ffcbf99ccc0) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetRealNamedProperty(v8::Local obj, - v8::Local key); -``` - - - -### Nan::CallAsFunction() - -A helper method for calling [`v8::Object#CallAsFunction()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a9ef18be634e79b4f0cdffa1667a29f58) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CallAsFunction(v8::Local obj, - v8::Local recv, - int argc, - v8::Local argv[]); -``` - - - -### Nan::CallAsConstructor() - -A helper method for calling [`v8::Object#CallAsConstructor()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a50d571de50d0b0dfb28795619d07a01b) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CallAsConstructor(v8::Local obj, - int argc, - v8::Local argv[]); -``` - - - -### Nan::GetSourceLine() - -A helper method for calling [`v8::Message#GetSourceLine()`](https://v8docs.nodesource.com/io.js-3.0/d9/d28/classv8_1_1_message.html#a849f7a6c41549d83d8159825efccd23a) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetSourceLine(v8::Local msg); -``` - - - -### Nan::GetLineNumber() - -A helper method for calling [`v8::Message#GetLineNumber()`](https://v8docs.nodesource.com/io.js-3.0/d9/d28/classv8_1_1_message.html#adbe46c10a88a6565f2732a2d2adf99b9) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::GetLineNumber(v8::Local msg); -``` - - - -### Nan::GetStartColumn() - -A helper method for calling [`v8::Message#GetStartColumn()`](https://v8docs.nodesource.com/io.js-3.0/d9/d28/classv8_1_1_message.html#a60ede616ba3822d712e44c7a74487ba6) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::GetStartColumn(v8::Local msg); -``` - - - -### Nan::GetEndColumn() - -A helper method for calling [`v8::Message#GetEndColumn()`](https://v8docs.nodesource.com/io.js-3.0/d9/d28/classv8_1_1_message.html#aaa004cf19e529da980bc19fcb76d93be) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::GetEndColumn(v8::Local msg); -``` - - - -### Nan::CloneElementAt() - -A helper method for calling [`v8::Array#CloneElementAt()`](https://v8docs.nodesource.com/io.js-3.0/d3/d32/classv8_1_1_array.html#a1d3a878d4c1c7cae974dd50a1639245e) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CloneElementAt(v8::Local array, uint32_t index); -``` - - -### Nan::MakeMaybe() - -Wraps a `v8::Local<>` in a `Nan::MaybeLocal<>`. When called with a `Nan::MaybeLocal<>` it just returns its argument. This is useful in generic template code that builds on NAN. - -Synopsis: - -```c++ - MaybeLocal someNumber = MakeMaybe(New(3.141592654)); - MaybeLocal someString = MakeMaybe(New("probably")); -``` - -Signature: - -```c++ -template class MaybeMaybe> -Nan::MaybeLocal Nan::MakeMaybe(MaybeMaybe v); -``` diff --git a/node_modules/nan/doc/methods.md b/node_modules/nan/doc/methods.md deleted file mode 100644 index 0411a70..0000000 --- a/node_modules/nan/doc/methods.md +++ /dev/null @@ -1,659 +0,0 @@ -## JavaScript-accessible methods - -A _template_ is a blueprint for JavaScript functions and objects in a context. You can use a template to wrap C++ functions and data structures within JavaScript objects so that they can be manipulated from JavaScript. See the V8 Embedders Guide section on [Templates](https://developers.google.com/v8/embed#templates) for further information. - -In order to expose functionality to JavaScript via a template, you must provide it to V8 in a form that it understands. Across the versions of V8 supported by NAN, JavaScript-accessible method signatures vary widely, NAN fully abstracts method declaration and provides you with an interface that is similar to the most recent V8 API but is backward-compatible with older versions that still use the now-deceased `v8::Argument` type. - -* **Method argument types** - - Nan::FunctionCallbackInfo - - Nan::PropertyCallbackInfo - - Nan::ReturnValue -* **Method declarations** - - Method declaration - - Getter declaration - - Setter declaration - - Property getter declaration - - Property setter declaration - - Property enumerator declaration - - Property deleter declaration - - Property query declaration - - Index getter declaration - - Index setter declaration - - Index enumerator declaration - - Index deleter declaration - - Index query declaration -* Method and template helpers - - Nan::SetMethod() - - Nan::SetPrototypeMethod() - - Nan::SetAccessor() - - Nan::SetNamedPropertyHandler() - - Nan::SetIndexedPropertyHandler() - - Nan::SetTemplate() - - Nan::SetPrototypeTemplate() - - Nan::SetInstanceTemplate() - - Nan::SetCallHandler() - - Nan::SetCallAsFunctionHandler() - - -### Nan::FunctionCallbackInfo - -`Nan::FunctionCallbackInfo` should be used in place of [`v8::FunctionCallbackInfo`](https://v8docs.nodesource.com/io.js-3.0/dd/d0d/classv8_1_1_function_callback_info.html), even with older versions of Node where `v8::FunctionCallbackInfo` does not exist. - -Definition: - -```c++ -template class FunctionCallbackInfo { - public: - ReturnValue GetReturnValue() const; - v8::Local Callee(); - v8::Local Data(); - v8::Local Holder(); - bool IsConstructCall(); - int Length() const; - v8::Local operator[](int i) const; - v8::Local This() const; - v8::Isolate *GetIsolate() const; -}; -``` - -See the [`v8::FunctionCallbackInfo`](https://v8docs.nodesource.com/io.js-3.0/dd/d0d/classv8_1_1_function_callback_info.html) documentation for usage details on these. See [`Nan::ReturnValue`](#api_nan_return_value) for further information on how to set a return value from methods. - - -### Nan::PropertyCallbackInfo - -`Nan::PropertyCallbackInfo` should be used in place of [`v8::PropertyCallbackInfo`](https://v8docs.nodesource.com/io.js-3.0/d7/dc5/classv8_1_1_property_callback_info.html), even with older versions of Node where `v8::PropertyCallbackInfo` does not exist. - -Definition: - -```c++ -template class PropertyCallbackInfo : public PropertyCallbackInfoBase { - public: - ReturnValue GetReturnValue() const; - v8::Isolate* GetIsolate() const; - v8::Local Data() const; - v8::Local This() const; - v8::Local Holder() const; -}; -``` - -See the [`v8::PropertyCallbackInfo`](https://v8docs.nodesource.com/io.js-3.0/d7/dc5/classv8_1_1_property_callback_info.html) documentation for usage details on these. See [`Nan::ReturnValue`](#api_nan_return_value) for further information on how to set a return value from property accessor methods. - - -### Nan::ReturnValue - -`Nan::ReturnValue` is used in place of [`v8::ReturnValue`](https://v8docs.nodesource.com/io.js-3.0/da/da7/classv8_1_1_return_value.html) on both [`Nan::FunctionCallbackInfo`](#api_nan_function_callback_info) and [`Nan::PropertyCallbackInfo`](#api_nan_property_callback_info) as the return type of `GetReturnValue()`. - -Example usage: - -```c++ -void EmptyArray(const Nan::FunctionCallbackInfo& info) { - info.GetReturnValue().Set(Nan::New()); -} -``` - -Definition: - -```c++ -template class ReturnValue { - public: - // Handle setters - template void Set(const v8::Local &handle); - template void Set(const Nan::Global &handle); - - // Fast primitive setters - void Set(bool value); - void Set(double i); - void Set(int32_t i); - void Set(uint32_t i); - - // Fast JS primitive setters - void SetNull(); - void SetUndefined(); - void SetEmptyString(); - - // Convenience getter for isolate - v8::Isolate *GetIsolate() const; -}; -``` - -See the documentation on [`v8::ReturnValue`](https://v8docs.nodesource.com/io.js-3.0/da/da7/classv8_1_1_return_value.html) for further information on this. - - -### Method declaration - -JavaScript-accessible methods should be declared with the following signature to form a `Nan::FunctionCallback`: - -```c++ -typedef void(*FunctionCallback)(const FunctionCallbackInfo&); -``` - -Example: - -```c++ -void MethodName(const Nan::FunctionCallbackInfo& info) { - ... -} -``` - -You do not need to declare a new `HandleScope` within a method as one is implicitly created for you. - -**Example usage** - -```c++ -// .h: -class Foo : public Nan::ObjectWrap { - ... - - static void Bar(const Nan::FunctionCallbackInfo& info); - static void Baz(const Nan::FunctionCallbackInfo& info); -} - - -// .cc: -void Foo::Bar(const Nan::FunctionCallbackInfo& info) { - ... -} - -void Foo::Baz(const Nan::FunctionCallbackInfo& info) { - ... -} -``` - -A helper macro `NAN_METHOD(methodname)` exists, compatible with NAN v1 method declarations. - -**Example usage with `NAN_METHOD(methodname)`** - -```c++ -// .h: -class Foo : public Nan::ObjectWrap { - ... - - static NAN_METHOD(Bar); - static NAN_METHOD(Baz); -} - - -// .cc: -NAN_METHOD(Foo::Bar) { - ... -} - -NAN_METHOD(Foo::Baz) { - ... -} -``` - -Use [`Nan::SetPrototypeMethod`](#api_nan_set_prototype_method) to attach a method to a JavaScript function prototype or [`Nan::SetMethod`](#api_nan_set_method) to attach a method directly on a JavaScript object. - - -### Getter declaration - -JavaScript-accessible getters should be declared with the following signature to form a `Nan::GetterCallback`: - -```c++ -typedef void(*GetterCallback)(v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void GetterName(v8::Local property, - const Nan::PropertyCallbackInfo& info) { - ... -} -``` - -You do not need to declare a new `HandleScope` within a getter as one is implicitly created for you. - -A helper macro `NAN_GETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on [Accessors](https://developers.google.com/v8/embed#accesssors). - - -### Setter declaration - -JavaScript-accessible setters should be declared with the following signature to form a Nan::SetterCallback: - -```c++ -typedef void(*SetterCallback)(v8::Local, - v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void SetterName(v8::Local property, - v8::Local value, - const Nan::PropertyCallbackInfo& info) { - ... -} -``` - -You do not need to declare a new `HandleScope` within a setter as one is implicitly created for you. - -A helper macro `NAN_SETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on [Accessors](https://developers.google.com/v8/embed#accesssors). - - -### Property getter declaration - -JavaScript-accessible property getters should be declared with the following signature to form a Nan::PropertyGetterCallback: - -```c++ -typedef void(*PropertyGetterCallback)(v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertyGetterName(v8::Local property, - const Nan::PropertyCallbackInfo& info) { - ... -} -``` - -You do not need to declare a new `HandleScope` within a property getter as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_GETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Property setter declaration - -JavaScript-accessible property setters should be declared with the following signature to form a Nan::PropertySetterCallback: - -```c++ -typedef void(*PropertySetterCallback)(v8::Local, - v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertySetterName(v8::Local property, - v8::Local value, - const Nan::PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a property setter as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_SETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Property enumerator declaration - -JavaScript-accessible property enumerators should be declared with the following signature to form a Nan::PropertyEnumeratorCallback: - -```c++ -typedef void(*PropertyEnumeratorCallback)(const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertyEnumeratorName(const Nan::PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a property enumerator as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_ENUMERATOR(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Property deleter declaration - -JavaScript-accessible property deleters should be declared with the following signature to form a Nan::PropertyDeleterCallback: - -```c++ -typedef void(*PropertyDeleterCallback)(v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertyDeleterName(v8::Local property, - const Nan::PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a property deleter as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_DELETER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Property query declaration - -JavaScript-accessible property query methods should be declared with the following signature to form a Nan::PropertyQueryCallback: - -```c++ -typedef void(*PropertyQueryCallback)(v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertyQueryName(v8::Local property, - const Nan::PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a property query method as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_QUERY(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index getter declaration - -JavaScript-accessible index getter methods should be declared with the following signature to form a Nan::IndexGetterCallback: - -```c++ -typedef void(*IndexGetterCallback)(uint32_t, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexGetterName(uint32_t index, const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index getter as one is implicitly created for you. - -A helper macro `NAN_INDEX_GETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index setter declaration - -JavaScript-accessible index setter methods should be declared with the following signature to form a Nan::IndexSetterCallback: - -```c++ -typedef void(*IndexSetterCallback)(uint32_t, - v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexSetterName(uint32_t index, - v8::Local value, - const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index setter as one is implicitly created for you. - -A helper macro `NAN_INDEX_SETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index enumerator declaration - -JavaScript-accessible index enumerator methods should be declared with the following signature to form a Nan::IndexEnumeratorCallback: - -```c++ -typedef void(*IndexEnumeratorCallback)(const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexEnumeratorName(const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index enumerator as one is implicitly created for you. - -A helper macro `NAN_INDEX_ENUMERATOR(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index deleter declaration - -JavaScript-accessible index deleter methods should be declared with the following signature to form a Nan::IndexDeleterCallback: - -```c++ -typedef void(*IndexDeleterCallback)(uint32_t, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexDeleterName(uint32_t index, const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index deleter as one is implicitly created for you. - -A helper macro `NAN_INDEX_DELETER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index query declaration - -JavaScript-accessible index query methods should be declared with the following signature to form a Nan::IndexQueryCallback: - -```c++ -typedef void(*IndexQueryCallback)(uint32_t, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexQueryName(uint32_t index, const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index query method as one is implicitly created for you. - -A helper macro `NAN_INDEX_QUERY(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Nan::SetMethod() - -Sets a method with a given name directly on a JavaScript object where the method has the `Nan::FunctionCallback` signature (see Method declaration). - -Signature: - -```c++ -void Nan::SetMethod(v8::Local recv, - const char *name, - Nan::FunctionCallback callback) -void Nan::SetMethod(v8::Local templ, - const char *name, - Nan::FunctionCallback callback) -``` - - -### Nan::SetPrototypeMethod() - -Sets a method with a given name on a `FunctionTemplate`'s prototype where the method has the `Nan::FunctionCallback` signature (see Method declaration). - -Signature: - -```c++ -void Nan::SetPrototypeMethod(v8::Local recv, - const char* name, - Nan::FunctionCallback callback) -``` - - -### Nan::SetAccessor() - -Sets getters and setters for a property with a given name on an `ObjectTemplate` or a plain `Object`. Accepts getters with the `Nan::GetterCallback` signature (see Getter declaration) and setters with the `Nan::SetterCallback` signature (see Setter declaration). - -Signature: - -```c++ -void SetAccessor(v8::Local tpl, - v8::Local name, - Nan::GetterCallback getter, - Nan::SetterCallback setter = 0, - v8::Local data = v8::Local(), - v8::AccessControl settings = v8::DEFAULT, - v8::PropertyAttribute attribute = v8::None, - imp::Sig signature = imp::Sig()); -bool SetAccessor(v8::Local obj, - v8::Local name, - Nan::GetterCallback getter, - Nan::SetterCallback setter = 0, - v8::Local data = v8::Local(), - v8::AccessControl settings = v8::DEFAULT, - v8::PropertyAttribute attribute = v8::None) -``` - -See the V8 [`ObjectTemplate#SetAccessor()`](https://v8docs.nodesource.com/io.js-3.0/db/d5f/classv8_1_1_object_template.html#aa90691622f01269c6a11391d372ca0c5) and [`Object#SetAccessor()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a3f9dee085f5ec346465f1dc924325043) for further information about how to use `Nan::SetAccessor()`. - - -### Nan::SetNamedPropertyHandler() - -Sets named property getters, setters, query, deleter and enumerator methods on an `ObjectTemplate`. Accepts: - -* Property getters with the `Nan::PropertyGetterCallback` signature (see Property getter declaration) -* Property setters with the `Nan::PropertySetterCallback` signature (see Property setter declaration) -* Property query methods with the `Nan::PropertyQueryCallback` signature (see Property query declaration) -* Property deleters with the `Nan::PropertyDeleterCallback` signature (see Property deleter declaration) -* Property enumerators with the `Nan::PropertyEnumeratorCallback` signature (see Property enumerator declaration) - -Signature: - -```c++ -void SetNamedPropertyHandler(v8::Local tpl, - Nan::PropertyGetterCallback getter, - Nan::PropertySetterCallback setter = 0, - Nan::PropertyQueryCallback query = 0, - Nan::PropertyDeleterCallback deleter = 0, - Nan::PropertyEnumeratorCallback enumerator = 0, - v8::Local data = v8::Local()) -``` - -See the V8 [`ObjectTemplate#SetNamedPropertyHandler()`](https://v8docs.nodesource.com/io.js-3.0/db/d5f/classv8_1_1_object_template.html#a34d1cc45b642cd131706663801aadd76) for further information about how to use `Nan::SetNamedPropertyHandler()`. - - -### Nan::SetIndexedPropertyHandler() - -Sets indexed property getters, setters, query, deleter and enumerator methods on an `ObjectTemplate`. Accepts: - -* Indexed property getters with the `Nan::IndexGetterCallback` signature (see Index getter declaration) -* Indexed property setters with the `Nan::IndexSetterCallback` signature (see Index setter declaration) -* Indexed property query methods with the `Nan::IndexQueryCallback` signature (see Index query declaration) -* Indexed property deleters with the `Nan::IndexDeleterCallback` signature (see Index deleter declaration) -* Indexed property enumerators with the `Nan::IndexEnumeratorCallback` signature (see Index enumerator declaration) - -Signature: - -```c++ -void SetIndexedPropertyHandler(v8::Local tpl, - Nan::IndexGetterCallback getter, - Nan::IndexSetterCallback setter = 0, - Nan::IndexQueryCallback query = 0, - Nan::IndexDeleterCallback deleter = 0, - Nan::IndexEnumeratorCallback enumerator = 0, - v8::Local data = v8::Local()) -``` - -See the V8 [`ObjectTemplate#SetIndexedPropertyHandler()`](https://v8docs.nodesource.com/io.js-3.0/db/d5f/classv8_1_1_object_template.html#ac0234cbede45d51778bb5f6a32a9e125) for further information about how to use `Nan::SetIndexedPropertyHandler()`. - - -### Nan::SetTemplate() - -Adds properties on an `Object`'s or `Function`'s template. - -Signature: - -```c++ -void Nan::SetTemplate(v8::Local templ, - const char *name, - v8::Local value); -void Nan::SetTemplate(v8::Local templ, - v8::Local name, - v8::Local value, - v8::PropertyAttribute attributes) -``` - -Calls the `Template`'s [`Set()`](https://v8docs.nodesource.com/io.js-3.0/db/df7/classv8_1_1_template.html#a2db6a56597bf23c59659c0659e564ddf). - - -### Nan::SetPrototypeTemplate() - -Adds properties on an `Object`'s or `Function`'s prototype template. - -Signature: - -```c++ -void Nan::SetPrototypeTemplate(v8::Local templ, - const char *name, - v8::Local value); -void Nan::SetPrototypeTemplate(v8::Local templ, - v8::Local name, - v8::Local value, - v8::PropertyAttribute attributes) -``` - -Calls the `FunctionTemplate`'s _PrototypeTemplate's_ [`Set()`](https://v8docs.nodesource.com/io.js-3.0/db/df7/classv8_1_1_template.html#a2db6a56597bf23c59659c0659e564ddf). - - -### Nan::SetInstanceTemplate() - -Use to add instance properties on `FunctionTemplate`'s. - -Signature: - -```c++ -void Nan::SetInstanceTemplate(v8::Local templ, - const char *name, - v8::Local value); -void Nan::SetInstanceTemplate(v8::Local templ, - v8::Local name, - v8::Local value, - v8::PropertyAttribute attributes) -``` - -Calls the `FunctionTemplate`'s _InstanceTemplate's_ [`Set()`](https://v8docs.nodesource.com/io.js-3.0/db/df7/classv8_1_1_template.html#a2db6a56597bf23c59659c0659e564ddf). - - -### Nan::SetCallHandler() - -Set the call-handler callback for a `v8::FunctionTemplate`. -This callback is called whenever the function created from this FunctionTemplate is called. - -Signature: - -```c++ -void Nan::SetCallHandler(v8::Local templ, Nan::FunctionCallback callback, v8::Local data = v8::Local()) -``` - -Calls the `FunctionTemplate`'s [`SetCallHandler()`](https://v8docs.nodesource.com/io.js-3.0/d8/d83/classv8_1_1_function_template.html#a26cf14e36aa1a47091b98536d08ea821). - - -### Nan::SetCallAsFunctionHandler() - -Sets the callback to be used when calling instances created from the `v8::ObjectTemplate` as a function. -If no callback is set, instances behave like normal JavaScript objects that cannot be called as a function. - -Signature: - -```c++ -void Nan::SetCallAsFunctionHandler(v8::Local templ, Nan::FunctionCallback callback, v8::Local data = v8::Local()) -``` - -Calls the `ObjectTemplate`'s [`SetCallAsFunctionHandler()`](https://v8docs.nodesource.com/io.js-3.0/db/d5f/classv8_1_1_object_template.html#ae0a0e72fb0c5e5f32e255fe5bcc7316a). - diff --git a/node_modules/nan/doc/new.md b/node_modules/nan/doc/new.md deleted file mode 100644 index c0734bd..0000000 --- a/node_modules/nan/doc/new.md +++ /dev/null @@ -1,147 +0,0 @@ -## New - -NAN provides a `Nan::New()` helper for the creation of new JavaScript objects in a way that's compatible across the supported versions of V8. - - - Nan::New() - - Nan::Undefined() - - Nan::Null() - - Nan::True() - - Nan::False() - - Nan::EmptyString() - - - -### Nan::New() - -`Nan::New()` should be used to instantiate new JavaScript objects. - -Refer to the specific V8 type in the [V8 documentation](https://v8docs.nodesource.com/io.js-3.0/d1/d83/classv8_1_1_data.html) for information on the types of arguments required for instantiation. - -Signatures: - -Return types are mostly omitted from the signatures for simplicity. In most cases the type will be contained within a `v8::Local`. The following types will be contained within a `Nan::MaybeLocal`: `v8::String`, `v8::Date`, `v8::RegExp`, `v8::Script`, `v8::UnboundScript`. - -Empty objects: - -```c++ -Nan::New(); -``` - -Generic single and multiple-argument: - -```c++ -Nan::New(A0 arg0); -Nan::New(A0 arg0, A1 arg1); -Nan::New(A0 arg0, A1 arg1, A2 arg2); -Nan::New(A0 arg0, A1 arg1, A2 arg2, A3 arg3); -``` - -For creating `v8::FunctionTemplate` and `v8::Function` objects: - -_The definition of `Nan::FunctionCallback` can be found in the [Method declaration](./methods.md#api_nan_method) documentation._ - -```c++ -Nan::New(Nan::FunctionCallback callback, - v8::Local data = v8::Local()); -Nan::New(Nan::FunctionCallback callback, - v8::Local data = v8::Local(), - A2 a2 = A2()); -``` - -Native number types: - -```c++ -v8::Local Nan::New(bool value); -v8::Local Nan::New(int32_t value); -v8::Local Nan::New(uint32_t value); -v8::Local Nan::New(double value); -``` - -String types: - -```c++ -Nan::MaybeLocal Nan::New(std::string const& value); -Nan::MaybeLocal Nan::New(const char * value, int length); -Nan::MaybeLocal Nan::New(const char * value); -Nan::MaybeLocal Nan::New(const uint16_t * value); -Nan::MaybeLocal Nan::New(const uint16_t * value, int length); -``` - -Specialized types: - -```c++ -v8::Local Nan::New(v8::String::ExternalStringResource * value); -v8::Local Nan::New(Nan::ExternalOneByteStringResource * value); -v8::Local Nan::New(v8::Local pattern, v8::RegExp::Flags flags); -``` - -Note that `Nan::ExternalOneByteStringResource` maps to [`v8::String::ExternalOneByteStringResource`](https://v8docs.nodesource.com/io.js-3.0/d9/db3/classv8_1_1_string_1_1_external_one_byte_string_resource.html), and `v8::String::ExternalAsciiStringResource` in older versions of V8. - - - -### Nan::Undefined() - -A helper method to reference the `v8::Undefined` object in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::Undefined() -``` - - -### Nan::Null() - -A helper method to reference the `v8::Null` object in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::Null() -``` - - -### Nan::True() - -A helper method to reference the `v8::Boolean` object representing the `true` value in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::True() -``` - - -### Nan::False() - -A helper method to reference the `v8::Boolean` object representing the `false` value in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::False() -``` - - -### Nan::EmptyString() - -Call [`v8::String::Empty`](https://v8docs.nodesource.com/io.js-3.0/d2/db3/classv8_1_1_string.html#a7c1bc8886115d7ee46f1d571dd6ebc6d) to reference the empty string in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::EmptyString() -``` - - - -### Nan::NewOneByteString() - -An implementation of [`v8::String::NewFromOneByte()`](https://v8docs.nodesource.com/io.js-3.0/d2/db3/classv8_1_1_string.html#a5264d50b96d2c896ce525a734dc10f09) provided for consistent availability and API across supported versions of V8. Allocates a new string from Latin-1 data. - -Signature: - -```c++ -Nan::MaybeLocal Nan::NewOneByteString(const uint8_t * value, - int length = -1) -``` diff --git a/node_modules/nan/doc/node_misc.md b/node_modules/nan/doc/node_misc.md deleted file mode 100644 index 8aa080f..0000000 --- a/node_modules/nan/doc/node_misc.md +++ /dev/null @@ -1,63 +0,0 @@ -## Miscellaneous Node Helpers - - - Nan::MakeCallback() - - NAN_MODULE_INIT() - - Nan::Export() - - - -### Nan::MakeCallback() - -Wrappers around `node::MakeCallback()` providing a consistent API across all supported versions of Node. - -Use `MakeCallback()` rather than using `v8::Function#Call()` directly in order to properly process internal Node functionality including domains, async hooks, the microtask queue, and other debugging functionality. - -Signatures: - -```c++ -v8::Local Nan::MakeCallback(v8::Local target, - v8::Local func, - int argc, - v8::Local* argv); -v8::Local Nan::MakeCallback(v8::Local target, - v8::Local symbol, - int argc, - v8::Local* argv); -v8::Local Nan::MakeCallback(v8::Local target, - const char* method, - int argc, - v8::Local* argv); -``` - - - -### NAN_MODULE_INIT() - -Used to define the entry point function to a Node add-on. Creates a function with a given `name` that receives a `target` object representing the equivalent of the JavaScript `exports` object. - -See example below. - - -### Nan::Export() - -A simple helper to register a `v8::FunctionTemplate` from a JavaScript-accessible method (see [Methods](./methods.md)) as a property on an object. Can be used in a way similar to assigning properties to `module.exports` in JavaScript. - -Signature: - -```c++ -void Export(v8::Local target, const char *name, Nan::FunctionCallback f) -``` - -Also available as the shortcut `NAN_EXPORT` macro. - -Example: - -```c++ -NAN_METHOD(Foo) { - ... -} - -NAN_MODULE_INIT(Init) { - NAN_EXPORT(target, Foo); -} -``` diff --git a/node_modules/nan/doc/object_wrappers.md b/node_modules/nan/doc/object_wrappers.md deleted file mode 100644 index 27b0636..0000000 --- a/node_modules/nan/doc/object_wrappers.md +++ /dev/null @@ -1,263 +0,0 @@ -## Object Wrappers - -The `ObjectWrap` class can be used to make wrapped C++ objects and a factory of wrapped objects. - - - Nan::ObjectWrap - - - -### Nan::ObjectWrap() - -A reimplementation of `node::ObjectWrap` that adds some API not present in older versions of Node. Should be preferred over `node::ObjectWrap` in all cases for consistency. - -Definition: - -```c++ -class ObjectWrap { - public: - ObjectWrap(); - - virtual ~ObjectWrap(); - - template - static inline T* Unwrap(v8::Local handle); - - inline v8::Local handle(); - - inline Nan::Persistent& persistent(); - - protected: - inline void Wrap(v8::Local handle); - - inline void MakeWeak(); - - /* Ref() marks the object as being attached to an event loop. - * Refed objects will not be garbage collected, even if - * all references are lost. - */ - virtual void Ref(); - - /* Unref() marks an object as detached from the event loop. This is its - * default state. When an object with a "weak" reference changes from - * attached to detached state it will be freed. Be careful not to access - * the object after making this call as it might be gone! - * (A "weak reference" means an object that only has a - * persistant handle.) - * - * DO NOT CALL THIS FROM DESTRUCTOR - */ - virtual void Unref(); - - int refs_; // ro -}; -``` - -See the Node documentation on [Wrapping C++ Objects](https://nodejs.org/api/addons.html#addons_wrapping_c_objects) for more details. - -### This vs. Holder - -When calling `Unwrap`, it is important that the argument is indeed some JavaScript object which got wrapped by a `Wrap` call for this class or any derived class. -The `Signature` installed by [`Nan::SetPrototypeMethod()`](methods.md#api_nan_set_prototype_method) does ensure that `info.Holder()` is just such an instance. -In Node 0.12 and later, `info.This()` will also be of such a type, since otherwise the invocation will get rejected. -However, in Node 0.10 and before it was possible to invoke a method on a JavaScript object which just had the extension type in its prototype chain. -In such a situation, calling `Unwrap` on `info.This()` will likely lead to a failed assertion causing a crash, but could lead to even more serious corruption. - -On the other hand, calling `Unwrap` in an [accessor](methods.md#api_nan_set_accessor) should not use `Holder()` if the accessor is defined on the prototype. -So either define your accessors on the instance template, -or use `This()` after verifying that it is indeed a valid object. - -### Examples - -#### Basic - -```c++ -class MyObject : public Nan::ObjectWrap { - public: - static NAN_MODULE_INIT(Init) { - v8::Local tpl = Nan::New(New); - tpl->SetClassName(Nan::New("MyObject").ToLocalChecked()); - tpl->InstanceTemplate()->SetInternalFieldCount(1); - - SetPrototypeMethod(tpl, "getHandle", GetHandle); - SetPrototypeMethod(tpl, "getValue", GetValue); - - constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked()); - Nan::Set(target, Nan::New("MyObject").ToLocalChecked(), - Nan::GetFunction(tpl).ToLocalChecked()); - } - - private: - explicit MyObject(double value = 0) : value_(value) {} - ~MyObject() {} - - static NAN_METHOD(New) { - if (info.IsConstructCall()) { - double value = info[0]->IsUndefined() ? 0 : Nan::To(info[0]).FromJust(); - MyObject *obj = new MyObject(value); - obj->Wrap(info.This()); - info.GetReturnValue().Set(info.This()); - } else { - const int argc = 1; - v8::Local argv[argc] = {info[0]}; - v8::Local cons = Nan::New(constructor()); - info.GetReturnValue().Set(cons->NewInstance(argc, argv)); - } - } - - static NAN_METHOD(GetHandle) { - MyObject* obj = Nan::ObjectWrap::Unwrap(info.Holder()); - info.GetReturnValue().Set(obj->handle()); - } - - static NAN_METHOD(GetValue) { - MyObject* obj = Nan::ObjectWrap::Unwrap(info.Holder()); - info.GetReturnValue().Set(obj->value_); - } - - static inline Nan::Persistent & constructor() { - static Nan::Persistent my_constructor; - return my_constructor; - } - - double value_; -}; - -NODE_MODULE(objectwrapper, MyObject::Init) -``` - -To use in Javascript: - -```Javascript -var objectwrapper = require('bindings')('objectwrapper'); - -var obj = new objectwrapper.MyObject(5); -console.log('Should be 5: ' + obj.getValue()); -``` - -#### Factory of wrapped objects - -```c++ -class MyFactoryObject : public Nan::ObjectWrap { - public: - static NAN_MODULE_INIT(Init) { - v8::Local tpl = Nan::New(New); - tpl->InstanceTemplate()->SetInternalFieldCount(1); - - Nan::SetPrototypeMethod(tpl, "getValue", GetValue); - - constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked()); - } - - static NAN_METHOD(NewInstance) { - v8::Local cons = Nan::New(constructor()); - double value = info[0]->IsNumber() ? Nan::To(info[0]).FromJust() : 0; - const int argc = 1; - v8::Local argv[1] = {Nan::New(value)}; - info.GetReturnValue().Set(Nan::NewInstance(cons, argc, argv).ToLocalChecked()); - } - - // Needed for the next example: - inline double value() const { - return value_; - } - - private: - explicit MyFactoryObject(double value = 0) : value_(value) {} - ~MyFactoryObject() {} - - static NAN_METHOD(New) { - if (info.IsConstructCall()) { - double value = info[0]->IsNumber() ? Nan::To(info[0]).FromJust() : 0; - MyFactoryObject * obj = new MyFactoryObject(value); - obj->Wrap(info.This()); - info.GetReturnValue().Set(info.This()); - } else { - const int argc = 1; - v8::Local argv[argc] = {info[0]}; - v8::Local cons = Nan::New(constructor()); - info.GetReturnValue().Set(Nan::NewInstance(cons, argc, argv).ToLocalChecked()); - } - } - - static NAN_METHOD(GetValue) { - MyFactoryObject* obj = ObjectWrap::Unwrap(info.Holder()); - info.GetReturnValue().Set(obj->value_); - } - - static inline Nan::Persistent & constructor() { - static Nan::Persistent my_constructor; - return my_constructor; - } - - double value_; -}; - -NAN_MODULE_INIT(Init) { - MyFactoryObject::Init(target); - Nan::Set(target, - Nan::New("newFactoryObjectInstance").ToLocalChecked(), - Nan::GetFunction( - Nan::New(MyFactoryObject::NewInstance)).ToLocalChecked() - ); -} - -NODE_MODULE(wrappedobjectfactory, Init) -``` - -To use in Javascript: - -```Javascript -var wrappedobjectfactory = require('bindings')('wrappedobjectfactory'); - -var obj = wrappedobjectfactory.newFactoryObjectInstance(10); -console.log('Should be 10: ' + obj.getValue()); -``` - -#### Passing wrapped objects around - -Use the `MyFactoryObject` class above along with the following: - -```c++ -static NAN_METHOD(Sum) { - Nan::MaybeLocal maybe1 = Nan::To(info[0]); - Nan::MaybeLocal maybe2 = Nan::To(info[1]); - - // Quick check: - if (maybe1.IsEmpty() || maybe2.IsEmpty()) { - // return value is undefined by default - return; - } - - MyFactoryObject* obj1 = - Nan::ObjectWrap::Unwrap(maybe1.ToLocalChecked()); - MyFactoryObject* obj2 = - Nan::ObjectWrap::Unwrap(maybe2.ToLocalChecked()); - - info.GetReturnValue().Set(Nan::New(obj1->value() + obj2->value())); -} - -NAN_MODULE_INIT(Init) { - MyFactoryObject::Init(target); - Nan::Set(target, - Nan::New("newFactoryObjectInstance").ToLocalChecked(), - Nan::GetFunction( - Nan::New(MyFactoryObject::NewInstance)).ToLocalChecked() - ); - Nan::Set(target, - Nan::New("sum").ToLocalChecked(), - Nan::GetFunction(Nan::New(Sum)).ToLocalChecked() - ); -} - -NODE_MODULE(myaddon, Init) -``` - -To use in Javascript: - -```Javascript -var myaddon = require('bindings')('myaddon'); - -var obj1 = myaddon.newFactoryObjectInstance(5); -var obj2 = myaddon.newFactoryObjectInstance(10); -console.log('sum of object values: ' + myaddon.sum(obj1, obj2)); -``` diff --git a/node_modules/nan/doc/persistent.md b/node_modules/nan/doc/persistent.md deleted file mode 100644 index 743b44a..0000000 --- a/node_modules/nan/doc/persistent.md +++ /dev/null @@ -1,295 +0,0 @@ -## Persistent references - -An object reference that is independent of any `HandleScope` is a _persistent_ reference. Where a `Local` handle only lives as long as the `HandleScope` in which it was allocated, a `Persistent` handle remains valid until it is explicitly disposed. - -Due to the evolution of the V8 API, it is necessary for NAN to provide a wrapper implementation of the `Persistent` classes to supply compatibility across the V8 versions supported. - - - Nan::PersistentBase & v8::PersistentBase - - Nan::NonCopyablePersistentTraits & v8::NonCopyablePersistentTraits - - Nan::CopyablePersistentTraits & v8::CopyablePersistentTraits - - Nan::Persistent - - Nan::Global - - Nan::WeakCallbackInfo - - Nan::WeakCallbackType - -Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles). - - -### Nan::PersistentBase & v8::PersistentBase - -A persistent handle contains a reference to a storage cell in V8 which holds an object value and which is updated by the garbage collector whenever the object is moved. A new storage cell can be created using the constructor or `Nan::PersistentBase::Reset()`. Existing handles can be disposed using an argument-less `Nan::PersistentBase::Reset()`. - -Definition: - -_(note: this is implemented as `Nan::PersistentBase` for older versions of V8 and the native `v8::PersistentBase` is used for newer versions of V8)_ - -```c++ -template class PersistentBase { - public: - /** - * If non-empty, destroy the underlying storage cell - */ - void Reset(); - - /** - * If non-empty, destroy the underlying storage cell and create a new one with - * the contents of another if it is also non-empty - */ - template void Reset(const v8::Local &other); - - /** - * If non-empty, destroy the underlying storage cell and create a new one with - * the contents of another if it is also non-empty - */ - template void Reset(const PersistentBase &other); - - /** - * If non-empty, destroy the underlying storage cell - * IsEmpty() will return true after this call. - */ - bool IsEmpty(); - - void Empty(); - - template bool operator==(const PersistentBase &that); - - template bool operator==(const v8::Local &that); - - template bool operator!=(const PersistentBase &that); - - template bool operator!=(const v8::Local &that); - - /** - * Install a finalization callback on this object. - * NOTE: There is no guarantee as to *when* or even *if* the callback is - * invoked. The invocation is performed solely on a best effort basis. - * As always, GC-based finalization should *not* be relied upon for any - * critical form of resource management! At the moment you can either - * specify a parameter for the callback or the location of two internal - * fields in the dying object. - */ - template - void SetWeak(P *parameter, - typename WeakCallbackInfo

    ::Callback callback, - WeakCallbackType type); - - void ClearWeak(); - - /** - * Marks the reference to this object independent. Garbage collector is free - * to ignore any object groups containing this object. Weak callback for an - * independent handle should not assume that it will be preceded by a global - * GC prologue callback or followed by a global GC epilogue callback. - */ - void MarkIndependent() const; - - bool IsIndependent() const; - - /** Checks if the handle holds the only reference to an object. */ - bool IsNearDeath() const; - - /** Returns true if the handle's reference is weak. */ - bool IsWeak() const -}; -``` - -See the V8 documentation for [`PersistentBase`](https://v8docs.nodesource.com/io.js-3.0/d4/dca/classv8_1_1_persistent_base.html) for further information. - -**Tip:** To get a `v8::Local` reference to the original object back from a `PersistentBase` or `Persistent` object: - -```c++ -v8::Local object = Nan::New(persistent); -``` - - -### Nan::NonCopyablePersistentTraits & v8::NonCopyablePersistentTraits - -Default traits for `Nan::Persistent`. This class does not allow use of the a copy constructor or assignment operator. At present `kResetInDestructor` is not set, but that will change in a future version. - -Definition: - -_(note: this is implemented as `Nan::NonCopyablePersistentTraits` for older versions of V8 and the native `v8::NonCopyablePersistentTraits` is used for newer versions of V8)_ - -```c++ -template class NonCopyablePersistentTraits { - public: - typedef Persistent > NonCopyablePersistent; - - static const bool kResetInDestructor = false; - - template - static void Copy(const Persistent &source, - NonCopyablePersistent *dest); - - template static void Uncompilable(); -}; -``` - -See the V8 documentation for [`NonCopyablePersistentTraits`](https://v8docs.nodesource.com/io.js-3.0/de/d73/classv8_1_1_non_copyable_persistent_traits.html) for further information. - - -### Nan::CopyablePersistentTraits & v8::CopyablePersistentTraits - -A helper class of traits to allow copying and assignment of `Persistent`. This will clone the contents of storage cell, but not any of the flags, etc.. - -Definition: - -_(note: this is implemented as `Nan::CopyablePersistentTraits` for older versions of V8 and the native `v8::NonCopyablePersistentTraits` is used for newer versions of V8)_ - -```c++ -template -class CopyablePersistentTraits { - public: - typedef Persistent > CopyablePersistent; - - static const bool kResetInDestructor = true; - - template - static void Copy(const Persistent &source, - CopyablePersistent *dest); -}; -``` - -See the V8 documentation for [`CopyablePersistentTraits`](https://v8docs.nodesource.com/io.js-3.0/da/d5c/structv8_1_1_copyable_persistent_traits.html) for further information. - - -### Nan::Persistent - -A type of `PersistentBase` which allows copy and assignment. Copy, assignment and destructor behavior is controlled by the traits class `M`. - -Definition: - -```c++ -template > -class Persistent; - -template class Persistent : public PersistentBase { - public: - /** - * A Persistent with no storage cell. - */ - Persistent(); - - /** - * Construct a Persistent from a v8::Local. When the v8::Local is non-empty, a - * new storage cell is created pointing to the same object, and no flags are - * set. - */ - template Persistent(v8::Local that); - - /** - * Construct a Persistent from a Persistent. When the Persistent is non-empty, - * a new storage cell is created pointing to the same object, and no flags are - * set. - */ - Persistent(const Persistent &that); - - /** - * The copy constructors and assignment operator create a Persistent exactly - * as the Persistent constructor, but the Copy function from the traits class - * is called, allowing the setting of flags based on the copied Persistent. - */ - Persistent &operator=(const Persistent &that); - - template - Persistent &operator=(const Persistent &that); - - /** - * The destructor will dispose the Persistent based on the kResetInDestructor - * flags in the traits class. Since not calling dispose can result in a - * memory leak, it is recommended to always set this flag. - */ - ~Persistent(); -}; -``` - -See the V8 documentation for [`Persistent`](https://v8docs.nodesource.com/io.js-3.0/d2/d78/classv8_1_1_persistent.html) for further information. - - -### Nan::Global - -A type of `PersistentBase` which has move semantics. - -```c++ -template class Global : public PersistentBase { - public: - /** - * A Global with no storage cell. - */ - Global(); - - /** - * Construct a Global from a v8::Local. When the v8::Local is non-empty, a new - * storage cell is created pointing to the same object, and no flags are set. - */ - template Global(v8::Local that); - /** - * Construct a Global from a PersistentBase. When the Persistent is non-empty, - * a new storage cell is created pointing to the same object, and no flags are - * set. - */ - template Global(const PersistentBase &that); - - /** - * Pass allows returning globals from functions, etc. - */ - Global Pass(); -}; -``` - -See the V8 documentation for [`Global`](https://v8docs.nodesource.com/io.js-3.0/d5/d40/classv8_1_1_global.html) for further information. - - -### Nan::WeakCallbackInfo - -`Nan::WeakCallbackInfo` is used as an argument when setting a persistent reference as weak. You may need to free any external resources attached to the object. It is a mirror of `v8:WeakCallbackInfo` as found in newer versions of V8. - -Definition: - -```c++ -template class WeakCallbackInfo { - public: - typedef void (*Callback)(const WeakCallbackInfo& data); - - v8::Isolate *GetIsolate() const; - - /** - * Get the parameter that was associated with the weak handle. - */ - T *GetParameter() const; - - /** - * Get pointer from internal field, index can be 0 or 1. - */ - void *GetInternalField(int index) const; -}; -``` - -Example usage: - -```c++ -void weakCallback(const WeakCallbackInfo &data) { - int *parameter = data.GetParameter(); - delete parameter; -} - -Persistent obj; -int *data = new int(0); -obj.SetWeak(data, callback, WeakCallbackType::kParameter); -``` - -See the V8 documentation for [`WeakCallbackInfo`](https://v8docs.nodesource.com/io.js-3.0/d8/d06/classv8_1_1_weak_callback_info.html) for further information. - - -### Nan::WeakCallbackType - -Represents the type of a weak callback. -A weak callback of type `kParameter` makes the supplied parameter to `Nan::PersistentBase::SetWeak` available through `WeakCallbackInfo::GetParameter`. -A weak callback of type `kInternalFields` uses up to two internal fields at indices 0 and 1 on the `Nan::PersistentBase` being made weak. -Note that only `v8::Object`s and derivatives can have internal fields. - -Definition: - -```c++ -enum class WeakCallbackType { kParameter, kInternalFields }; -``` diff --git a/node_modules/nan/doc/scopes.md b/node_modules/nan/doc/scopes.md deleted file mode 100644 index e9a35d0..0000000 --- a/node_modules/nan/doc/scopes.md +++ /dev/null @@ -1,73 +0,0 @@ -## Scopes - -A _local handle_ is a pointer to an object. All V8 objects are accessed using handles, they are necessary because of the way the V8 garbage collector works. - -A handle scope can be thought of as a container for any number of handles. When you've finished with your handles, instead of deleting each one individually you can simply delete their scope. - -The creation of `HandleScope` objects is different across the supported versions of V8. Therefore, NAN provides its own implementations that can be used safely across these. - - - Nan::HandleScope - - Nan::EscapableHandleScope - -Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles). - - -### Nan::HandleScope - -A simple wrapper around [`v8::HandleScope`](https://v8docs.nodesource.com/io.js-3.0/d3/d95/classv8_1_1_handle_scope.html). - -Definition: - -```c++ -class Nan::HandleScope { - public: - Nan::HandleScope(); - static int NumberOfHandles(); -}; -``` - -Allocate a new `Nan::HandleScope` whenever you are creating new V8 JavaScript objects. Note that an implicit `HandleScope` is created for you on JavaScript-accessible methods so you do not need to insert one yourself. - -Example: - -```c++ -// new object is created, it needs a new scope: -void Pointless() { - Nan::HandleScope scope; - v8::Local obj = Nan::New(); -} - -// JavaScript-accessible method already has a HandleScope -NAN_METHOD(Pointless2) { - v8::Local obj = Nan::New(); -} -``` - - -### Nan::EscapableHandleScope - -Similar to [`Nan::HandleScope`](#api_nan_handle_scope) but should be used in cases where a function needs to return a V8 JavaScript type that has been created within it. - -Definition: - -```c++ -class Nan::EscapableHandleScope { - public: - Nan::EscapableHandleScope(); - static int NumberOfHandles(); - template v8::Local Escape(v8::Local value); -} -``` - -Use `Escape(value)` to return the object. - -Example: - -```c++ -v8::Local EmptyObj() { - Nan::EscapableHandleScope scope; - v8::Local obj = Nan::New(); - return scope.Escape(obj); -} -``` - diff --git a/node_modules/nan/doc/script.md b/node_modules/nan/doc/script.md deleted file mode 100644 index 1267b5e..0000000 --- a/node_modules/nan/doc/script.md +++ /dev/null @@ -1,38 +0,0 @@ -## Script - -NAN provides a `v8::Script` helpers as the API has changed over the supported versions of V8. - - - Nan::CompileScript() - - Nan::RunScript() - - - -### Nan::CompileScript() - -A wrapper around [`v8::Script::Compile()`](https://v8docs.nodesource.com/io.js-3.0/da/da5/classv8_1_1_script_compiler.html#a93f5072a0db55d881b969e9fc98e564b). - -Note that `Nan::BoundScript` is an alias for `v8::Script`. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CompileScript( - v8::Local s, - const v8::ScriptOrigin& origin); -Nan::MaybeLocal Nan::CompileScript(v8::Local s); -``` - - - -### Nan::RunScript() - -Calls `script->Run()` or `script->BindToCurrentContext()->Run(Nan::GetCurrentContext())`. - -Note that `Nan::BoundScript` is an alias for `v8::Script` and `Nan::UnboundScript` is an alias for `v8::UnboundScript` where available and `v8::Script` on older versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::RunScript(v8::Local script) -Nan::MaybeLocal Nan::RunScript(v8::Local script) -``` diff --git a/node_modules/nan/doc/string_bytes.md b/node_modules/nan/doc/string_bytes.md deleted file mode 100644 index 7c1bd32..0000000 --- a/node_modules/nan/doc/string_bytes.md +++ /dev/null @@ -1,62 +0,0 @@ -## Strings & Bytes - -Miscellaneous string & byte encoding and decoding functionality provided for compatibility across supported versions of V8 and Node. Implemented by NAN to ensure that all encoding types are supported, even for older versions of Node where they are missing. - - - Nan::Encoding - - Nan::Encode() - - Nan::DecodeBytes() - - Nan::DecodeWrite() - - - -### Nan::Encoding - -An enum representing the supported encoding types. A copy of `node::encoding` that is consistent across versions of Node. - -Definition: - -```c++ -enum Nan::Encoding { ASCII, UTF8, BASE64, UCS2, BINARY, HEX, BUFFER } -``` - - - -### Nan::Encode() - -A wrapper around `node::Encode()` that provides a consistent implementation across supported versions of Node. - -Signature: - -```c++ -v8::Local Nan::Encode(const void *buf, - size_t len, - enum Nan::Encoding encoding = BINARY); -``` - - - -### Nan::DecodeBytes() - -A wrapper around `node::DecodeBytes()` that provides a consistent implementation across supported versions of Node. - -Signature: - -```c++ -ssize_t Nan::DecodeBytes(v8::Local val, - enum Nan::Encoding encoding = BINARY); -``` - - - -### Nan::DecodeWrite() - -A wrapper around `node::DecodeWrite()` that provides a consistent implementation across supported versions of Node. - -Signature: - -```c++ -ssize_t Nan::DecodeWrite(char *buf, - size_t len, - v8::Local val, - enum Nan::Encoding encoding = BINARY); -``` diff --git a/node_modules/nan/doc/v8_internals.md b/node_modules/nan/doc/v8_internals.md deleted file mode 100644 index 8e6319b..0000000 --- a/node_modules/nan/doc/v8_internals.md +++ /dev/null @@ -1,199 +0,0 @@ -## V8 internals - -The hooks to access V8 internals—including GC and statistics—are different across the supported versions of V8, therefore NAN provides its own hooks that call the appropriate V8 methods. - - - NAN_GC_CALLBACK() - - Nan::AddGCEpilogueCallback() - - Nan::RemoveGCEpilogueCallback() - - Nan::AddGCPrologueCallback() - - Nan::RemoveGCPrologueCallback() - - Nan::GetHeapStatistics() - - Nan::SetCounterFunction() - - Nan::SetCreateHistogramFunction() - - Nan::SetAddHistogramSampleFunction() - - Nan::IdleNotification() - - Nan::LowMemoryNotification() - - Nan::ContextDisposedNotification() - - Nan::GetInternalFieldPointer() - - Nan::SetInternalFieldPointer() - - Nan::AdjustExternalMemory() - - - -### NAN_GC_CALLBACK(callbackname) - -Use `NAN_GC_CALLBACK` to declare your callbacks for `Nan::AddGCPrologueCallback()` and `Nan::AddGCEpilogueCallback()`. Your new method receives the arguments `v8::GCType type` and `v8::GCCallbackFlags flags`. - -```c++ -static Nan::Persistent callback; - -NAN_GC_CALLBACK(gcPrologueCallback) { - v8::Local argv[] = { Nan::New("prologue").ToLocalChecked() }; - Nan::MakeCallback(Nan::GetCurrentContext()->Global(), Nan::New(callback), 1, argv); -} - -NAN_METHOD(Hook) { - callback.Reset(args[0].As()); - Nan::AddGCPrologueCallback(gcPrologueCallback); - info.GetReturnValue().Set(info.Holder()); -} -``` - - -### Nan::AddGCEpilogueCallback() - -Signature: - -```c++ -void Nan::AddGCEpilogueCallback(v8::Isolate::GCEpilogueCallback callback, v8::GCType gc_type_filter = v8::kGCTypeAll) -``` - -Calls V8's [`AddGCEpilogueCallback()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a90d1860babc76059c62514b422f56960). - - -### Nan::RemoveGCEpilogueCallback() - -Signature: - -```c++ -void Nan::RemoveGCEpilogueCallback(v8::Isolate::GCEpilogueCallback callback) -``` - -Calls V8's [`RemoveGCEpilogueCallback()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a05c60859fd4b8e96bfcd451281ed6c7c). - - -### Nan::AddGCPrologueCallback() - -Signature: - -```c++ -void Nan::AddGCPrologueCallback(v8::Isolate::GCPrologueCallback, v8::GCType gc_type_filter callback) -``` - -Calls V8's [`AddGCPrologueCallback()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#ab4b87b8f9f8e5bf95eba4009357e001f). - - -### Nan::RemoveGCPrologueCallback() - -Signature: - -```c++ -void Nan::RemoveGCPrologueCallback(v8::Isolate::GCPrologueCallback callback) -``` - -Calls V8's [`RemoveGCEpilogueCallback()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a9f6c51932811593f81ff30b949124186). - - -### Nan::GetHeapStatistics() - -Signature: - -```c++ -void Nan::GetHeapStatistics(v8::HeapStatistics *heap_statistics) -``` - -Calls V8's [`GetHeapStatistics()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a5593ac74687b713095c38987e5950b34). - - -### Nan::SetCounterFunction() - -Signature: - -```c++ -void Nan::SetCounterFunction(v8::CounterLookupCallback cb) -``` - -Calls V8's [`SetCounterFunction()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a045d7754e62fa0ec72ae6c259b29af94). - - -### Nan::SetCreateHistogramFunction() - -Signature: - -```c++ -void Nan::SetCreateHistogramFunction(v8::CreateHistogramCallback cb) -``` - -Calls V8's [`SetCreateHistogramFunction()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a542d67e85089cb3f92aadf032f99e732). - - -### Nan::SetAddHistogramSampleFunction() - -Signature: - -```c++ -void Nan::SetAddHistogramSampleFunction(v8::AddHistogramSampleCallback cb) -``` - -Calls V8's [`SetAddHistogramSampleFunction()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#aeb420b690bc2c216882d6fdd00ddd3ea). - - -### Nan::IdleNotification() - -Signature: - -```c++ -void Nan::IdleNotification(v8::HeapStatistics *heap_statistics) -``` - -Calls V8's [`IdleNotification()` or `IdleNotificationDeadline()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#ad6a2a02657f5425ad460060652a5a118) depending on V8 version. - - -### Nan::LowMemoryNotification() - -Signature: - -```c++ -void Nan::LowMemoryNotification() -``` - -Calls V8's [`IdleNotification()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a24647f61d6b41f69668094bdcd6ea91f). - - -### Nan::ContextDisposedNotification() - -Signature: - -```c++ -void Nan::ContextDisposedNotification() -``` - -Calls V8's [`ContextDisposedNotification()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#ad7f5dc559866343fe6cd8db1f134d48b). - - -### Nan::GetInternalFieldPointer() - -Gets a pointer to the internal field with at `index` from a V8 `Object` handle. - -Signature: - -```c++ -void* Nan::GetInternalFieldPointer(v8::Local object, int index) -``` - -Calls the Object's [`GetAlignedPointerFromInternalField()` or `GetPointerFromInternalField()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ab3c57184263cf29963ef0017bec82281) depending on the version of V8. - - -### Nan::SetInternalFieldPointer() - -Sets the value of the internal field at `index` on a V8 `Object` handle. - -Signature: - -```c++ -void Nan::SetInternalFieldPointer(v8::Local object, int index, void* value) -``` - -Calls the Object's [`SetAlignedPointerInInternalField()` or `SetPointerInInternalField()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#ad7f5dc559866343fe6cd8db1f134d48b) depending on the version of V8. - - -### Nan::AdjustExternalMemory() - -Signature: - -```c++ -int Nan::AdjustExternalMemory(int bytesChange) -``` - -Calls V8's [`AdjustAmountOfExternalAllocatedMemory()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#ae1a59cac60409d3922582c4af675473e). - diff --git a/node_modules/nan/doc/v8_misc.md b/node_modules/nan/doc/v8_misc.md deleted file mode 100644 index 64f736d..0000000 --- a/node_modules/nan/doc/v8_misc.md +++ /dev/null @@ -1,85 +0,0 @@ -## Miscellaneous V8 Helpers - - - Nan::Utf8String - - Nan::GetCurrentContext() - - Nan::SetIsolateData() - - Nan::GetIsolateData() - - Nan::TypedArrayContents - - - -### Nan::Utf8String - -Converts an object to a UTF-8-encoded character array. If conversion to a string fails (e.g. due to an exception in the toString() method of the object) then the length() method returns 0 and the * operator returns NULL. The underlying memory used for this object is managed by the object. - -An implementation of [`v8::String::Utf8Value`](https://v8docs.nodesource.com/io.js-3.0/d4/d1b/classv8_1_1_string_1_1_utf8_value.html) that is consistent across all supported versions of V8. - -Definition: - -```c++ -class Nan::Utf8String { - public: - Nan::Utf8String(v8::Local from); - - int length() const; - - char* operator*(); - const char* operator*() const; -}; -``` - - -### Nan::GetCurrentContext() - -A call to [`v8::Isolate::GetCurrent()->GetCurrentContext()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a81c7a1ed7001ae2a65e89107f75fd053) that works across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::GetCurrentContext() -``` - - -### Nan::SetIsolateData() - -A helper to provide a consistent API to [`v8::Isolate#SetData()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#a7acadfe7965997e9c386a05f098fbe36). - -Signature: - -```c++ -void Nan::SetIsolateData(v8::Isolate *isolate, T *data) -``` - - - -### Nan::GetIsolateData() - -A helper to provide a consistent API to [`v8::Isolate#GetData()`](https://v8docs.nodesource.com/io.js-3.0/d5/dda/classv8_1_1_isolate.html#aabd223436bc1100a787dadaa024c6257). - -Signature: - -```c++ -T *Nan::GetIsolateData(v8::Isolate *isolate) -``` - - -### Nan::TypedArrayContents - -A helper class for accessing the contents of an ArrayBufferView (aka a typedarray) from C++. If the input array is not a valid typedarray, then the data pointer of TypedArrayContents will default to `NULL` and the length will be 0. If the data pointer is not compatible with the alignment requirements of type, an assertion error will fail. - -Note that you must store a reference to the `array` object while you are accessing its contents. - -Definition: - -```c++ -template -class Nan::TypedArrayContents { - public: - TypedArrayContents(v8::Local array); - - size_t length() const; - - T* const operator*(); - const T* const operator*() const; -}; -``` diff --git a/node_modules/nan/include_dirs.js b/node_modules/nan/include_dirs.js deleted file mode 100644 index 4f1dfb4..0000000 --- a/node_modules/nan/include_dirs.js +++ /dev/null @@ -1 +0,0 @@ -console.log(require('path').relative('.', __dirname)); diff --git a/node_modules/nan/nan.h b/node_modules/nan/nan.h deleted file mode 100644 index 7176da1..0000000 --- a/node_modules/nan/nan.h +++ /dev/null @@ -1,2274 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors: - * - Rod Vagg - * - Benjamin Byholm - * - Trevor Norris - * - Nathan Rajlich - * - Brett Lawson - * - Ben Noordhuis - * - David Siegel - * - * MIT License - * - * Version 2.4.0: current Node 6.3.0, Node 12: 0.12.15, Node 10: 0.10.46, iojs: 3.3.1 - * - * See https://github.com/nodejs/nan for the latest update to this file - **********************************************************************************/ - -#ifndef NAN_H_ -#define NAN_H_ - -#include - -#define NODE_0_10_MODULE_VERSION 11 -#define NODE_0_12_MODULE_VERSION 14 -#define ATOM_0_21_MODULE_VERSION 41 -#define IOJS_1_0_MODULE_VERSION 42 -#define IOJS_1_1_MODULE_VERSION 43 -#define IOJS_2_0_MODULE_VERSION 44 -#define IOJS_3_0_MODULE_VERSION 45 -#define NODE_4_0_MODULE_VERSION 46 -#define NODE_5_0_MODULE_VERSION 47 -#define NODE_6_0_MODULE_VERSION 48 - -#ifdef _MSC_VER -# define NAN_HAS_CPLUSPLUS_11 (_MSC_VER >= 1800) -#else -# define NAN_HAS_CPLUSPLUS_11 (__cplusplus >= 201103L) -#endif - -#if NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION && !NAN_HAS_CPLUSPLUS_11 -# error This version of node/NAN/v8 requires a C++11 compiler -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#if defined(_MSC_VER) -# pragma warning( push ) -# pragma warning( disable : 4530 ) -# include -# include -# pragma warning( pop ) -#else -# include -# include -#endif - -// uv helpers -#ifdef UV_VERSION_MAJOR -# ifndef UV_VERSION_PATCH -# define UV_VERSION_PATCH 0 -# endif -# define NAUV_UVVERSION ((UV_VERSION_MAJOR << 16) | \ - (UV_VERSION_MINOR << 8) | \ - (UV_VERSION_PATCH)) -#else -# define NAUV_UVVERSION 0x000b00 -#endif - -#if NAUV_UVVERSION < 0x000b0b -# ifdef WIN32 -# include -# else -# include -# endif -#endif - -namespace Nan { - -#define NAN_INLINE inline // TODO(bnoordhuis) Remove in v3.0.0. - -#if defined(__GNUC__) && \ - !(defined(V8_DISABLE_DEPRECATIONS) && V8_DISABLE_DEPRECATIONS) -# define NAN_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) && \ - !(defined(V8_DISABLE_DEPRECATIONS) && V8_DISABLE_DEPRECATIONS) -# define NAN_DEPRECATED __declspec(deprecated) -#else -# define NAN_DEPRECATED -#endif - -#if NAN_HAS_CPLUSPLUS_11 -# define NAN_DISALLOW_ASSIGN(CLASS) void operator=(const CLASS&) = delete; -# define NAN_DISALLOW_COPY(CLASS) CLASS(const CLASS&) = delete; -# define NAN_DISALLOW_MOVE(CLASS) \ - CLASS(CLASS&&) = delete; /* NOLINT(build/c++11) */ \ - void operator=(CLASS&&) = delete; -#else -# define NAN_DISALLOW_ASSIGN(CLASS) void operator=(const CLASS&); -# define NAN_DISALLOW_COPY(CLASS) CLASS(const CLASS&); -# define NAN_DISALLOW_MOVE(CLASS) -#endif - -#define NAN_DISALLOW_ASSIGN_COPY(CLASS) \ - NAN_DISALLOW_ASSIGN(CLASS) \ - NAN_DISALLOW_COPY(CLASS) - -#define NAN_DISALLOW_ASSIGN_MOVE(CLASS) \ - NAN_DISALLOW_ASSIGN(CLASS) \ - NAN_DISALLOW_MOVE(CLASS) - -#define NAN_DISALLOW_COPY_MOVE(CLASS) \ - NAN_DISALLOW_COPY(CLASS) \ - NAN_DISALLOW_MOVE(CLASS) - -#define NAN_DISALLOW_ASSIGN_COPY_MOVE(CLASS) \ - NAN_DISALLOW_ASSIGN(CLASS) \ - NAN_DISALLOW_COPY(CLASS) \ - NAN_DISALLOW_MOVE(CLASS) - -#define TYPE_CHECK(T, S) \ - while (false) { \ - *(static_cast(0)) = static_cast(0); \ - } - -//=== RegistrationFunction ===================================================== - -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - typedef v8::Handle ADDON_REGISTER_FUNCTION_ARGS_TYPE; -#else - typedef v8::Local ADDON_REGISTER_FUNCTION_ARGS_TYPE; -#endif - -#define NAN_MODULE_INIT(name) \ - void name(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target) - -//=== CallbackInfo ============================================================= - -#include "nan_callbacks.h" // NOLINT(build/include) - -//============================================================================== - -#if (NODE_MODULE_VERSION < NODE_0_12_MODULE_VERSION) -typedef v8::Script UnboundScript; -typedef v8::Script BoundScript; -#else -typedef v8::UnboundScript UnboundScript; -typedef v8::Script BoundScript; -#endif - -#if (NODE_MODULE_VERSION < ATOM_0_21_MODULE_VERSION) -typedef v8::String::ExternalAsciiStringResource - ExternalOneByteStringResource; -#else -typedef v8::String::ExternalOneByteStringResource - ExternalOneByteStringResource; -#endif - -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) -template -class NonCopyablePersistentTraits : - public v8::NonCopyablePersistentTraits {}; -template -class CopyablePersistentTraits : - public v8::CopyablePersistentTraits {}; - -template -class PersistentBase : - public v8::PersistentBase {}; - -template > -class Persistent; -#else -template class NonCopyablePersistentTraits; -template class PersistentBase; -template class WeakCallbackData; -template > -class Persistent; -#endif // NODE_MODULE_VERSION - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -# include "nan_maybe_43_inl.h" // NOLINT(build/include) -#else -# include "nan_maybe_pre_43_inl.h" // NOLINT(build/include) -#endif - -#include "nan_converters.h" // NOLINT(build/include) -#include "nan_new.h" // NOLINT(build/include) - -#if NAUV_UVVERSION < 0x000b17 -#define NAUV_WORK_CB(func) \ - void func(uv_async_t *async, int) -#else -#define NAUV_WORK_CB(func) \ - void func(uv_async_t *async) -#endif - -#if NAUV_UVVERSION >= 0x000b0b - -typedef uv_key_t nauv_key_t; - -inline int nauv_key_create(nauv_key_t *key) { - return uv_key_create(key); -} - -inline void nauv_key_delete(nauv_key_t *key) { - uv_key_delete(key); -} - -inline void* nauv_key_get(nauv_key_t *key) { - return uv_key_get(key); -} - -inline void nauv_key_set(nauv_key_t *key, void *value) { - uv_key_set(key, value); -} - -#else - -/* Implement thread local storage for older versions of libuv. - * This is essentially a backport of libuv commit 5d2434bf - * written by Ben Noordhuis, adjusted for names and inline. - */ - -#ifndef WIN32 - -typedef pthread_key_t nauv_key_t; - -inline int nauv_key_create(nauv_key_t* key) { - return -pthread_key_create(key, NULL); -} - -inline void nauv_key_delete(nauv_key_t* key) { - if (pthread_key_delete(*key)) - abort(); -} - -inline void* nauv_key_get(nauv_key_t* key) { - return pthread_getspecific(*key); -} - -inline void nauv_key_set(nauv_key_t* key, void* value) { - if (pthread_setspecific(*key, value)) - abort(); -} - -#else - -typedef struct { - DWORD tls_index; -} nauv_key_t; - -inline int nauv_key_create(nauv_key_t* key) { - key->tls_index = TlsAlloc(); - if (key->tls_index == TLS_OUT_OF_INDEXES) - return UV_ENOMEM; - return 0; -} - -inline void nauv_key_delete(nauv_key_t* key) { - if (TlsFree(key->tls_index) == FALSE) - abort(); - key->tls_index = TLS_OUT_OF_INDEXES; -} - -inline void* nauv_key_get(nauv_key_t* key) { - void* value = TlsGetValue(key->tls_index); - if (value == NULL) - if (GetLastError() != ERROR_SUCCESS) - abort(); - return value; -} - -inline void nauv_key_set(nauv_key_t* key, void* value) { - if (TlsSetValue(key->tls_index, value) == FALSE) - abort(); -} - -#endif -#endif - -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION -template -v8::Local New(v8::Handle); -#endif - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - typedef v8::WeakCallbackType WeakCallbackType; -#else -struct WeakCallbackType { - enum E {kParameter, kInternalFields}; - E type; - WeakCallbackType(E other) : type(other) {} // NOLINT(runtime/explicit) - inline bool operator==(E other) { return other == this->type; } - inline bool operator!=(E other) { return !operator==(other); } -}; -#endif - -template class WeakCallbackInfo; - -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -# include "nan_persistent_12_inl.h" // NOLINT(build/include) -#else -# include "nan_persistent_pre_12_inl.h" // NOLINT(build/include) -#endif - -namespace imp { - static const size_t kMaxLength = 0x3fffffff; - // v8::String::REPLACE_INVALID_UTF8 was introduced - // in node.js v0.10.29 and v0.8.27. -#if NODE_MAJOR_VERSION > 0 || \ - NODE_MINOR_VERSION > 10 || \ - NODE_MINOR_VERSION == 10 && NODE_PATCH_VERSION >= 29 || \ - NODE_MINOR_VERSION == 8 && NODE_PATCH_VERSION >= 27 - static const unsigned kReplaceInvalidUtf8 = v8::String::REPLACE_INVALID_UTF8; -#else - static const unsigned kReplaceInvalidUtf8 = 0; -#endif -} // end of namespace imp - -//=== HandleScope ============================================================== - -class HandleScope { - v8::HandleScope scope; - - public: -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - inline HandleScope() : scope(v8::Isolate::GetCurrent()) {} - inline static int NumberOfHandles() { - return v8::HandleScope::NumberOfHandles(v8::Isolate::GetCurrent()); - } -#else - inline HandleScope() : scope() {} - inline static int NumberOfHandles() { - return v8::HandleScope::NumberOfHandles(); - } -#endif - - private: - // Make it hard to create heap-allocated or illegal handle scopes by - // disallowing certain operations. - HandleScope(const HandleScope &); - void operator=(const HandleScope &); - void *operator new(size_t size); - void operator delete(void *, size_t); -}; - -class EscapableHandleScope { - public: -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - inline EscapableHandleScope() : scope(v8::Isolate::GetCurrent()) {} - - inline static int NumberOfHandles() { - return v8::EscapableHandleScope::NumberOfHandles(v8::Isolate::GetCurrent()); - } - - template - inline v8::Local Escape(v8::Local value) { - return scope.Escape(value); - } - - private: - v8::EscapableHandleScope scope; -#else - inline EscapableHandleScope() : scope() {} - - inline static int NumberOfHandles() { - return v8::HandleScope::NumberOfHandles(); - } - - template - inline v8::Local Escape(v8::Local value) { - return scope.Close(value); - } - - private: - v8::HandleScope scope; -#endif - - private: - // Make it hard to create heap-allocated or illegal handle scopes by - // disallowing certain operations. - EscapableHandleScope(const EscapableHandleScope &); - void operator=(const EscapableHandleScope &); - void *operator new(size_t size); - void operator delete(void *, size_t); -}; - -//=== TryCatch ================================================================= - -class TryCatch { - v8::TryCatch try_catch_; - friend void FatalException(const TryCatch&); - - public: -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION - TryCatch() : try_catch_(v8::Isolate::GetCurrent()) {} -#endif - - inline bool HasCaught() const { return try_catch_.HasCaught(); } - - inline bool CanContinue() const { return try_catch_.CanContinue(); } - - inline v8::Local ReThrow() { -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - return New(try_catch_.ReThrow()); -#else - return try_catch_.ReThrow(); -#endif - } - - inline v8::Local Exception() const { - return try_catch_.Exception(); - } - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - inline v8::MaybeLocal StackTrace() const { - return try_catch_.StackTrace(GetCurrentContext()); - } -#else - inline MaybeLocal StackTrace() const { - return MaybeLocal(try_catch_.StackTrace()); - } -#endif - - inline v8::Local Message() const { - return try_catch_.Message(); - } - - inline void Reset() { try_catch_.Reset(); } - - inline void SetVerbose(bool value) { try_catch_.SetVerbose(value); } - - inline void SetCaptureMessage(bool value) { - try_catch_.SetCaptureMessage(value); - } -}; - -//============ ================================================================= - -/* node 0.12 */ -#if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION - inline - void SetCounterFunction(v8::CounterLookupCallback cb) { - v8::Isolate::GetCurrent()->SetCounterFunction(cb); - } - - inline - void SetCreateHistogramFunction(v8::CreateHistogramCallback cb) { - v8::Isolate::GetCurrent()->SetCreateHistogramFunction(cb); - } - - inline - void SetAddHistogramSampleFunction(v8::AddHistogramSampleCallback cb) { - v8::Isolate::GetCurrent()->SetAddHistogramSampleFunction(cb); - } - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - inline bool IdleNotification(int idle_time_in_ms) { - return v8::Isolate::GetCurrent()->IdleNotificationDeadline( - idle_time_in_ms * 0.001); - } -# else - inline bool IdleNotification(int idle_time_in_ms) { - return v8::Isolate::GetCurrent()->IdleNotification(idle_time_in_ms); - } -#endif - - inline void LowMemoryNotification() { - v8::Isolate::GetCurrent()->LowMemoryNotification(); - } - - inline void ContextDisposedNotification() { - v8::Isolate::GetCurrent()->ContextDisposedNotification(); - } -#else - inline - void SetCounterFunction(v8::CounterLookupCallback cb) { - v8::V8::SetCounterFunction(cb); - } - - inline - void SetCreateHistogramFunction(v8::CreateHistogramCallback cb) { - v8::V8::SetCreateHistogramFunction(cb); - } - - inline - void SetAddHistogramSampleFunction(v8::AddHistogramSampleCallback cb) { - v8::V8::SetAddHistogramSampleFunction(cb); - } - - inline bool IdleNotification(int idle_time_in_ms) { - return v8::V8::IdleNotification(idle_time_in_ms); - } - - inline void LowMemoryNotification() { - v8::V8::LowMemoryNotification(); - } - - inline void ContextDisposedNotification() { - v8::V8::ContextDisposedNotification(); - } -#endif - -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) // Node 0.12 - inline v8::Local Undefined() { -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(v8::Undefined(v8::Isolate::GetCurrent()))); -# else - return v8::Undefined(v8::Isolate::GetCurrent()); -# endif - } - - inline v8::Local Null() { -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(v8::Null(v8::Isolate::GetCurrent()))); -# else - return v8::Null(v8::Isolate::GetCurrent()); -# endif - } - - inline v8::Local True() { -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(v8::True(v8::Isolate::GetCurrent()))); -# else - return v8::True(v8::Isolate::GetCurrent()); -# endif - } - - inline v8::Local False() { -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(v8::False(v8::Isolate::GetCurrent()))); -# else - return v8::False(v8::Isolate::GetCurrent()); -# endif - } - - inline v8::Local EmptyString() { - return v8::String::Empty(v8::Isolate::GetCurrent()); - } - - inline int AdjustExternalMemory(int bc) { - return static_cast( - v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(bc)); - } - - inline void SetTemplate( - v8::Local templ - , const char *name - , v8::Local value) { - templ->Set(v8::Isolate::GetCurrent(), name, value); - } - - inline void SetTemplate( - v8::Local templ - , v8::Local name - , v8::Local value - , v8::PropertyAttribute attributes) { - templ->Set(name, value, attributes); - } - - inline v8::Local GetCurrentContext() { - return v8::Isolate::GetCurrent()->GetCurrentContext(); - } - - inline void* GetInternalFieldPointer( - v8::Local object - , int index) { - return object->GetAlignedPointerFromInternalField(index); - } - - inline void SetInternalFieldPointer( - v8::Local object - , int index - , void* value) { - object->SetAlignedPointerInInternalField(index, value); - } - -# define NAN_GC_CALLBACK(name) \ - void name(v8::Isolate *isolate, v8::GCType type, v8::GCCallbackFlags flags) - -#if NODE_MODULE_VERSION <= NODE_4_0_MODULE_VERSION - typedef v8::Isolate::GCEpilogueCallback GCEpilogueCallback; - typedef v8::Isolate::GCPrologueCallback GCPrologueCallback; -#else - typedef v8::Isolate::GCCallback GCEpilogueCallback; - typedef v8::Isolate::GCCallback GCPrologueCallback; -#endif - - inline void AddGCEpilogueCallback( - GCEpilogueCallback callback - , v8::GCType gc_type_filter = v8::kGCTypeAll) { - v8::Isolate::GetCurrent()->AddGCEpilogueCallback(callback, gc_type_filter); - } - - inline void RemoveGCEpilogueCallback( - GCEpilogueCallback callback) { - v8::Isolate::GetCurrent()->RemoveGCEpilogueCallback(callback); - } - - inline void AddGCPrologueCallback( - GCPrologueCallback callback - , v8::GCType gc_type_filter = v8::kGCTypeAll) { - v8::Isolate::GetCurrent()->AddGCPrologueCallback(callback, gc_type_filter); - } - - inline void RemoveGCPrologueCallback( - GCPrologueCallback callback) { - v8::Isolate::GetCurrent()->RemoveGCPrologueCallback(callback); - } - - inline void GetHeapStatistics( - v8::HeapStatistics *heap_statistics) { - v8::Isolate::GetCurrent()->GetHeapStatistics(heap_statistics); - } - -# define X(NAME) \ - inline v8::Local NAME(const char *msg) { \ - EscapableHandleScope scope; \ - return scope.Escape(v8::Exception::NAME(New(msg).ToLocalChecked())); \ - } \ - \ - inline \ - v8::Local NAME(v8::Local msg) { \ - return v8::Exception::NAME(msg); \ - } \ - \ - inline void Throw ## NAME(const char *msg) { \ - HandleScope scope; \ - v8::Isolate::GetCurrent()->ThrowException( \ - v8::Exception::NAME(New(msg).ToLocalChecked())); \ - } \ - \ - inline void Throw ## NAME(v8::Local msg) { \ - HandleScope scope; \ - v8::Isolate::GetCurrent()->ThrowException( \ - v8::Exception::NAME(msg)); \ - } - - X(Error) - X(RangeError) - X(ReferenceError) - X(SyntaxError) - X(TypeError) - -# undef X - - inline void ThrowError(v8::Local error) { - v8::Isolate::GetCurrent()->ThrowException(error); - } - - inline MaybeLocal NewBuffer( - char *data - , size_t length -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - , node::Buffer::FreeCallback callback -#else - , node::smalloc::FreeCallback callback -#endif - , void *hint - ) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(length <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - return node::Buffer::New( - v8::Isolate::GetCurrent(), data, length, callback, hint); -#else - return MaybeLocal(node::Buffer::New( - v8::Isolate::GetCurrent(), data, length, callback, hint)); -#endif - } - - inline MaybeLocal CopyBuffer( - const char *data - , uint32_t size - ) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - return node::Buffer::Copy( - v8::Isolate::GetCurrent(), data, size); -#else - return MaybeLocal(node::Buffer::New( - v8::Isolate::GetCurrent(), data, size)); -#endif - } - - inline MaybeLocal NewBuffer(uint32_t size) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - return node::Buffer::New( - v8::Isolate::GetCurrent(), size); -#else - return MaybeLocal(node::Buffer::New( - v8::Isolate::GetCurrent(), size)); -#endif - } - - inline MaybeLocal NewBuffer( - char* data - , uint32_t size - ) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - return node::Buffer::New(v8::Isolate::GetCurrent(), data, size); -#else - return MaybeLocal( - node::Buffer::Use(v8::Isolate::GetCurrent(), data, size)); -#endif - } - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - inline MaybeLocal - NewOneByteString(const uint8_t * value, int length = -1) { - return v8::String::NewFromOneByte(v8::Isolate::GetCurrent(), value, - v8::NewStringType::kNormal, length); - } - - inline MaybeLocal CompileScript( - v8::Local s - , const v8::ScriptOrigin& origin - ) { - v8::ScriptCompiler::Source source(s, origin); - return v8::ScriptCompiler::Compile(GetCurrentContext(), &source); - } - - inline MaybeLocal CompileScript( - v8::Local s - ) { - v8::ScriptCompiler::Source source(s); - return v8::ScriptCompiler::Compile(GetCurrentContext(), &source); - } - - inline MaybeLocal RunScript( - v8::Local script - ) { - return script->BindToCurrentContext()->Run(GetCurrentContext()); - } - - inline MaybeLocal RunScript( - v8::Local script - ) { - return script->Run(GetCurrentContext()); - } -#else - inline MaybeLocal - NewOneByteString(const uint8_t * value, int length = -1) { - return MaybeLocal( - v8::String::NewFromOneByte( - v8::Isolate::GetCurrent() - , value - , v8::String::kNormalString, length)); - } - - inline MaybeLocal CompileScript( - v8::Local s - , const v8::ScriptOrigin& origin - ) { - v8::ScriptCompiler::Source source(s, origin); - return MaybeLocal( - v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &source)); - } - - inline MaybeLocal CompileScript( - v8::Local s - ) { - v8::ScriptCompiler::Source source(s); - return MaybeLocal( - v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &source)); - } - - inline MaybeLocal RunScript( - v8::Local script - ) { - return MaybeLocal(script->BindToCurrentContext()->Run()); - } - - inline MaybeLocal RunScript( - v8::Local script - ) { - return MaybeLocal(script->Run()); - } -#endif - - inline v8::Local MakeCallback( - v8::Local target - , v8::Local func - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - return New(node::MakeCallback( - v8::Isolate::GetCurrent(), target, func, argc, argv)); -#else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, func, argc, argv); -#endif - } - - inline v8::Local MakeCallback( - v8::Local target - , v8::Local symbol - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - return New(node::MakeCallback( - v8::Isolate::GetCurrent(), target, symbol, argc, argv)); -#else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, symbol, argc, argv); -#endif - } - - inline v8::Local MakeCallback( - v8::Local target - , const char* method - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - return New(node::MakeCallback( - v8::Isolate::GetCurrent(), target, method, argc, argv)); -#else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, method, argc, argv); -#endif - } - - inline void FatalException(const TryCatch& try_catch) { - node::FatalException(v8::Isolate::GetCurrent(), try_catch.try_catch_); - } - - inline v8::Local ErrnoException( - int errorno - , const char* syscall = NULL - , const char* message = NULL - , const char* path = NULL) { - return node::ErrnoException(v8::Isolate::GetCurrent(), errorno, syscall, - message, path); - } - - NAN_DEPRECATED inline v8::Local NanErrnoException( - int errorno - , const char* syscall = NULL - , const char* message = NULL - , const char* path = NULL) { - return ErrnoException(errorno, syscall, message, path); - } - - template - inline void SetIsolateData( - v8::Isolate *isolate - , T *data - ) { - isolate->SetData(0, data); - } - - template - inline T *GetIsolateData( - v8::Isolate *isolate - ) { - return static_cast(isolate->GetData(0)); - } - -class Utf8String { - public: - inline explicit Utf8String(v8::Local from) : - length_(0), str_(str_st_) { - if (!from.IsEmpty()) { - v8::Local string = from->ToString(); - if (!string.IsEmpty()) { - size_t len = 3 * string->Length() + 1; - assert(len <= INT_MAX); - if (len > sizeof (str_st_)) { - str_ = static_cast(malloc(len)); - assert(str_ != 0); - } - const int flags = - v8::String::NO_NULL_TERMINATION | imp::kReplaceInvalidUtf8; - length_ = string->WriteUtf8(str_, static_cast(len), 0, flags); - str_[length_] = '\0'; - } - } - } - - inline int length() const { - return length_; - } - - inline char* operator*() { return str_; } - inline const char* operator*() const { return str_; } - - inline ~Utf8String() { - if (str_ != str_st_) { - free(str_); - } - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(Utf8String) - - int length_; - char *str_; - char str_st_[1024]; -}; - -#else // Node 0.8 and 0.10 - inline v8::Local Undefined() { - EscapableHandleScope scope; - return scope.Escape(New(v8::Undefined())); - } - - inline v8::Local Null() { - EscapableHandleScope scope; - return scope.Escape(New(v8::Null())); - } - - inline v8::Local True() { - EscapableHandleScope scope; - return scope.Escape(New(v8::True())); - } - - inline v8::Local False() { - EscapableHandleScope scope; - return scope.Escape(New(v8::False())); - } - - inline v8::Local EmptyString() { - return v8::String::Empty(); - } - - inline int AdjustExternalMemory(int bc) { - return static_cast(v8::V8::AdjustAmountOfExternalAllocatedMemory(bc)); - } - - inline void SetTemplate( - v8::Local templ - , const char *name - , v8::Local value) { - templ->Set(name, value); - } - - inline void SetTemplate( - v8::Local templ - , v8::Local name - , v8::Local value - , v8::PropertyAttribute attributes) { - templ->Set(name, value, attributes); - } - - inline v8::Local GetCurrentContext() { - return v8::Context::GetCurrent(); - } - - inline void* GetInternalFieldPointer( - v8::Local object - , int index) { - return object->GetPointerFromInternalField(index); - } - - inline void SetInternalFieldPointer( - v8::Local object - , int index - , void* value) { - object->SetPointerInInternalField(index, value); - } - -# define NAN_GC_CALLBACK(name) \ - void name(v8::GCType type, v8::GCCallbackFlags flags) - - inline void AddGCEpilogueCallback( - v8::GCEpilogueCallback callback - , v8::GCType gc_type_filter = v8::kGCTypeAll) { - v8::V8::AddGCEpilogueCallback(callback, gc_type_filter); - } - inline void RemoveGCEpilogueCallback( - v8::GCEpilogueCallback callback) { - v8::V8::RemoveGCEpilogueCallback(callback); - } - inline void AddGCPrologueCallback( - v8::GCPrologueCallback callback - , v8::GCType gc_type_filter = v8::kGCTypeAll) { - v8::V8::AddGCPrologueCallback(callback, gc_type_filter); - } - inline void RemoveGCPrologueCallback( - v8::GCPrologueCallback callback) { - v8::V8::RemoveGCPrologueCallback(callback); - } - inline void GetHeapStatistics( - v8::HeapStatistics *heap_statistics) { - v8::V8::GetHeapStatistics(heap_statistics); - } - -# define X(NAME) \ - inline v8::Local NAME(const char *msg) { \ - EscapableHandleScope scope; \ - return scope.Escape(v8::Exception::NAME(New(msg).ToLocalChecked())); \ - } \ - \ - inline \ - v8::Local NAME(v8::Local msg) { \ - return v8::Exception::NAME(msg); \ - } \ - \ - inline void Throw ## NAME(const char *msg) { \ - HandleScope scope; \ - v8::ThrowException(v8::Exception::NAME(New(msg).ToLocalChecked())); \ - } \ - \ - inline \ - void Throw ## NAME(v8::Local errmsg) { \ - v8::ThrowException(v8::Exception::NAME(errmsg)); \ - } - - X(Error) - X(RangeError) - X(ReferenceError) - X(SyntaxError) - X(TypeError) - -# undef X - - inline void ThrowError(v8::Local error) { - v8::ThrowException(error); - } - - inline MaybeLocal NewBuffer( - char *data - , size_t length - , node::Buffer::free_callback callback - , void *hint - ) { - EscapableHandleScope scope; - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(length <= imp::kMaxLength && "too large buffer"); - return MaybeLocal(scope.Escape( - New(node::Buffer::New(data, length, callback, hint)->handle_))); - } - - inline MaybeLocal CopyBuffer( - const char *data - , uint32_t size - ) { - EscapableHandleScope scope; - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION >= NODE_0_10_MODULE_VERSION - return MaybeLocal( - scope.Escape(New(node::Buffer::New(data, size)->handle_))); -#else - return MaybeLocal(scope.Escape( - New(node::Buffer::New(const_cast(data), size)->handle_))); -#endif - } - - inline MaybeLocal NewBuffer(uint32_t size) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - assert(size <= imp::kMaxLength && "too large buffer"); - return MaybeLocal( - scope.Escape(New(node::Buffer::New(size)->handle_))); - } - - inline void FreeData(char *data, void *hint) { - (void) hint; // unused - delete[] data; - } - - inline MaybeLocal NewBuffer( - char* data - , uint32_t size - ) { - EscapableHandleScope scope; - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); - return MaybeLocal(scope.Escape(New( - node::Buffer::New(data, size, FreeData, NULL)->handle_))); - } - -namespace imp { -inline void -widenString(std::vector *ws, const uint8_t *s, int l) { - size_t len = static_cast(l); - if (l < 0) { - len = strlen(reinterpret_cast(s)); - } - assert(len <= INT_MAX && "string too long"); - ws->resize(len); - std::copy(s, s + len, ws->begin()); // NOLINT(build/include_what_you_use) -} -} // end of namespace imp - - inline MaybeLocal - NewOneByteString(const uint8_t * value, int length = -1) { - std::vector wideString; // NOLINT(build/include_what_you_use) - imp::widenString(&wideString, value, length); - return imp::Factory::return_t(v8::String::New( - &wideString.front(), static_cast(wideString.size()))); - } - - inline MaybeLocal CompileScript( - v8::Local s - , const v8::ScriptOrigin& origin - ) { - return MaybeLocal( - v8::Script::Compile(s, const_cast(&origin))); - } - - inline MaybeLocal CompileScript( - v8::Local s - ) { - return MaybeLocal(v8::Script::Compile(s)); - } - - inline - MaybeLocal RunScript(v8::Local script) { - return MaybeLocal(script->Run()); - } - - inline v8::Local MakeCallback( - v8::Local target - , v8::Local func - , int argc - , v8::Local* argv) { - return New(node::MakeCallback(target, func, argc, argv)); - } - - inline v8::Local MakeCallback( - v8::Local target - , v8::Local symbol - , int argc - , v8::Local* argv) { - return New(node::MakeCallback(target, symbol, argc, argv)); - } - - inline v8::Local MakeCallback( - v8::Local target - , const char* method - , int argc - , v8::Local* argv) { - return New(node::MakeCallback(target, method, argc, argv)); - } - - inline void FatalException(const TryCatch& try_catch) { - node::FatalException(const_cast(try_catch.try_catch_)); - } - - inline v8::Local ErrnoException( - int errorno - , const char* syscall = NULL - , const char* message = NULL - , const char* path = NULL) { - return node::ErrnoException(errorno, syscall, message, path); - } - - NAN_DEPRECATED inline v8::Local NanErrnoException( - int errorno - , const char* syscall = NULL - , const char* message = NULL - , const char* path = NULL) { - return ErrnoException(errorno, syscall, message, path); - } - - - template - inline void SetIsolateData( - v8::Isolate *isolate - , T *data - ) { - isolate->SetData(data); - } - - template - inline T *GetIsolateData( - v8::Isolate *isolate - ) { - return static_cast(isolate->GetData()); - } - -class Utf8String { - public: - inline explicit Utf8String(v8::Local from) : - length_(0), str_(str_st_) { - if (!from.IsEmpty()) { - v8::Local string = from->ToString(); - if (!string.IsEmpty()) { - size_t len = 3 * string->Length() + 1; - assert(len <= INT_MAX); - if (len > sizeof (str_st_)) { - str_ = static_cast(malloc(len)); - assert(str_ != 0); - } - const int flags = - v8::String::NO_NULL_TERMINATION | imp::kReplaceInvalidUtf8; - length_ = string->WriteUtf8(str_, static_cast(len), 0, flags); - str_[length_] = '\0'; - } - } - } - - inline int length() const { - return length_; - } - - inline char* operator*() { return str_; } - inline const char* operator*() const { return str_; } - - inline ~Utf8String() { - if (str_ != str_st_) { - free(str_); - } - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(Utf8String) - - int length_; - char *str_; - char str_st_[1024]; -}; - -#endif // NODE_MODULE_VERSION - -typedef void (*FreeCallback)(char *data, void *hint); - -typedef const FunctionCallbackInfo& NAN_METHOD_ARGS_TYPE; -typedef void NAN_METHOD_RETURN_TYPE; - -typedef const PropertyCallbackInfo& NAN_GETTER_ARGS_TYPE; -typedef void NAN_GETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& NAN_SETTER_ARGS_TYPE; -typedef void NAN_SETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_GETTER_ARGS_TYPE; -typedef void NAN_PROPERTY_GETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_SETTER_ARGS_TYPE; -typedef void NAN_PROPERTY_SETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_ENUMERATOR_ARGS_TYPE; -typedef void NAN_PROPERTY_ENUMERATOR_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_DELETER_ARGS_TYPE; -typedef void NAN_PROPERTY_DELETER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_QUERY_ARGS_TYPE; -typedef void NAN_PROPERTY_QUERY_RETURN_TYPE; - -typedef const PropertyCallbackInfo& NAN_INDEX_GETTER_ARGS_TYPE; -typedef void NAN_INDEX_GETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& NAN_INDEX_SETTER_ARGS_TYPE; -typedef void NAN_INDEX_SETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_INDEX_ENUMERATOR_ARGS_TYPE; -typedef void NAN_INDEX_ENUMERATOR_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_INDEX_DELETER_ARGS_TYPE; -typedef void NAN_INDEX_DELETER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_INDEX_QUERY_ARGS_TYPE; -typedef void NAN_INDEX_QUERY_RETURN_TYPE; - -#define NAN_METHOD(name) \ - Nan::NAN_METHOD_RETURN_TYPE name(Nan::NAN_METHOD_ARGS_TYPE info) -#define NAN_GETTER(name) \ - Nan::NAN_GETTER_RETURN_TYPE name( \ - v8::Local property \ - , Nan::NAN_GETTER_ARGS_TYPE info) -#define NAN_SETTER(name) \ - Nan::NAN_SETTER_RETURN_TYPE name( \ - v8::Local property \ - , v8::Local value \ - , Nan::NAN_SETTER_ARGS_TYPE info) -#define NAN_PROPERTY_GETTER(name) \ - Nan::NAN_PROPERTY_GETTER_RETURN_TYPE name( \ - v8::Local property \ - , Nan::NAN_PROPERTY_GETTER_ARGS_TYPE info) -#define NAN_PROPERTY_SETTER(name) \ - Nan::NAN_PROPERTY_SETTER_RETURN_TYPE name( \ - v8::Local property \ - , v8::Local value \ - , Nan::NAN_PROPERTY_SETTER_ARGS_TYPE info) -#define NAN_PROPERTY_ENUMERATOR(name) \ - Nan::NAN_PROPERTY_ENUMERATOR_RETURN_TYPE name( \ - Nan::NAN_PROPERTY_ENUMERATOR_ARGS_TYPE info) -#define NAN_PROPERTY_DELETER(name) \ - Nan::NAN_PROPERTY_DELETER_RETURN_TYPE name( \ - v8::Local property \ - , Nan::NAN_PROPERTY_DELETER_ARGS_TYPE info) -#define NAN_PROPERTY_QUERY(name) \ - Nan::NAN_PROPERTY_QUERY_RETURN_TYPE name( \ - v8::Local property \ - , Nan::NAN_PROPERTY_QUERY_ARGS_TYPE info) -# define NAN_INDEX_GETTER(name) \ - Nan::NAN_INDEX_GETTER_RETURN_TYPE name( \ - uint32_t index \ - , Nan::NAN_INDEX_GETTER_ARGS_TYPE info) -#define NAN_INDEX_SETTER(name) \ - Nan::NAN_INDEX_SETTER_RETURN_TYPE name( \ - uint32_t index \ - , v8::Local value \ - , Nan::NAN_INDEX_SETTER_ARGS_TYPE info) -#define NAN_INDEX_ENUMERATOR(name) \ - Nan::NAN_INDEX_ENUMERATOR_RETURN_TYPE \ - name(Nan::NAN_INDEX_ENUMERATOR_ARGS_TYPE info) -#define NAN_INDEX_DELETER(name) \ - Nan::NAN_INDEX_DELETER_RETURN_TYPE name( \ - uint32_t index \ - , Nan::NAN_INDEX_DELETER_ARGS_TYPE info) -#define NAN_INDEX_QUERY(name) \ - Nan::NAN_INDEX_QUERY_RETURN_TYPE name( \ - uint32_t index \ - , Nan::NAN_INDEX_QUERY_ARGS_TYPE info) - -class Callback { - public: - Callback() {} - - explicit Callback(const v8::Local &fn) : handle_(fn) {} - - ~Callback() { - handle_.Reset(); - } - - bool operator==(const Callback &other) const { - return handle_ == other.handle_; - } - - bool operator!=(const Callback &other) const { - return !operator==(other); - } - - inline - v8::Local operator*() const { return GetFunction(); } - - inline v8::Local operator()( - v8::Local target - , int argc = 0 - , v8::Local argv[] = 0) const { - return this->Call(target, argc, argv); - } - - inline v8::Local operator()( - int argc = 0 - , v8::Local argv[] = 0) const { - return this->Call(argc, argv); - } - - // TODO(kkoopa): remove - inline void SetFunction(const v8::Local &fn) { - Reset(fn); - } - - inline void Reset(const v8::Local &fn) { - handle_.Reset(fn); - } - - inline void Reset() { - handle_.Reset(); - } - - inline v8::Local GetFunction() const { - return New(handle_); - } - - inline bool IsEmpty() const { - return handle_.IsEmpty(); - } - - inline v8::Local - Call(v8::Local target - , int argc - , v8::Local argv[]) const { -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - return Call_(isolate, target, argc, argv); -#else - return Call_(target, argc, argv); -#endif - } - - inline v8::Local - Call(int argc, v8::Local argv[]) const { -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - return Call_(isolate, isolate->GetCurrentContext()->Global(), argc, argv); -#else - return Call_(v8::Context::GetCurrent()->Global(), argc, argv); -#endif - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(Callback) - Persistent handle_; - -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - v8::Local Call_(v8::Isolate *isolate - , v8::Local target - , int argc - , v8::Local argv[]) const { - EscapableHandleScope scope; - - v8::Local callback = New(handle_); -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - return scope.Escape(New(node::MakeCallback( - isolate - , target - , callback - , argc - , argv - ))); -# else - return scope.Escape(node::MakeCallback( - isolate - , target - , callback - , argc - , argv - )); -# endif - } -#else - v8::Local Call_(v8::Local target - , int argc - , v8::Local argv[]) const { - EscapableHandleScope scope; - - v8::Local callback = New(handle_); - return scope.Escape(New(node::MakeCallback( - target - , callback - , argc - , argv - ))); - } -#endif -}; - -/* abstract */ class AsyncWorker { - public: - explicit AsyncWorker(Callback *callback_) - : callback(callback_), errmsg_(NULL) { - request.data = this; - - HandleScope scope; - v8::Local obj = New(); - persistentHandle.Reset(obj); - } - - virtual ~AsyncWorker() { - HandleScope scope; - - if (!persistentHandle.IsEmpty()) - persistentHandle.Reset(); - delete callback; - delete[] errmsg_; - } - - virtual void WorkComplete() { - HandleScope scope; - - if (errmsg_ == NULL) - HandleOKCallback(); - else - HandleErrorCallback(); - delete callback; - callback = NULL; - } - - inline void SaveToPersistent( - const char *key, const v8::Local &value) { - HandleScope scope; - New(persistentHandle)->Set(New(key).ToLocalChecked(), value); - } - - inline void SaveToPersistent( - const v8::Local &key, const v8::Local &value) { - HandleScope scope; - New(persistentHandle)->Set(key, value); - } - - inline void SaveToPersistent( - uint32_t index, const v8::Local &value) { - HandleScope scope; - New(persistentHandle)->Set(index, value); - } - - inline v8::Local GetFromPersistent(const char *key) const { - EscapableHandleScope scope; - return scope.Escape( - New(persistentHandle)->Get(New(key).ToLocalChecked())); - } - - inline v8::Local - GetFromPersistent(const v8::Local &key) const { - EscapableHandleScope scope; - return scope.Escape(New(persistentHandle)->Get(key)); - } - - inline v8::Local GetFromPersistent(uint32_t index) const { - EscapableHandleScope scope; - return scope.Escape(New(persistentHandle)->Get(index)); - } - - virtual void Execute() = 0; - - uv_work_t request; - - virtual void Destroy() { - delete this; - } - - protected: - Persistent persistentHandle; - Callback *callback; - - virtual void HandleOKCallback() { - callback->Call(0, NULL); - } - - virtual void HandleErrorCallback() { - HandleScope scope; - - v8::Local argv[] = { - v8::Exception::Error(New(ErrorMessage()).ToLocalChecked()) - }; - callback->Call(1, argv); - } - - void SetErrorMessage(const char *msg) { - delete[] errmsg_; - - size_t size = strlen(msg) + 1; - errmsg_ = new char[size]; - memcpy(errmsg_, msg, size); - } - - const char* ErrorMessage() const { - return errmsg_; - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(AsyncWorker) - char *errmsg_; -}; - - -template -/* abstract */ class AsyncProgressWorkerBase : public AsyncWorker { - public: - explicit AsyncProgressWorkerBase(Callback *callback_) - : AsyncWorker(callback_), asyncdata_(NULL), asyncsize_(0) { - async = new uv_async_t; - uv_async_init( - uv_default_loop() - , async - , AsyncProgress_ - ); - async->data = this; - - uv_mutex_init(&async_lock); - } - - virtual ~AsyncProgressWorkerBase() { - uv_mutex_destroy(&async_lock); - - delete[] asyncdata_; - } - - void WorkProgress() { - uv_mutex_lock(&async_lock); - T *data = asyncdata_; - size_t size = asyncsize_; - asyncdata_ = NULL; - uv_mutex_unlock(&async_lock); - - // Don't send progress events after we've already completed. - if (callback) { - HandleProgressCallback(data, size); - } - delete[] data; - } - - class ExecutionProgress { - friend class AsyncProgressWorkerBase; - public: - void Signal() const { - uv_async_send(that_->async); - } - - void Send(const T* data, size_t size) const { - that_->SendProgress_(data, size); - } - - private: - explicit ExecutionProgress(AsyncProgressWorkerBase *that) : that_(that) {} - NAN_DISALLOW_ASSIGN_COPY_MOVE(ExecutionProgress) - AsyncProgressWorkerBase* const that_; - }; - - virtual void Execute(const ExecutionProgress& progress) = 0; - virtual void HandleProgressCallback(const T *data, size_t size) = 0; - - virtual void Destroy() { - uv_close(reinterpret_cast(async), AsyncClose_); - } - - private: - void Execute() /*final override*/ { - ExecutionProgress progress(this); - Execute(progress); - } - - void SendProgress_(const T *data, size_t size) { - T *new_data = new T[size]; - { - T *it = new_data; - std::copy(data, data + size, it); - } - - uv_mutex_lock(&async_lock); - T *old_data = asyncdata_; - asyncdata_ = new_data; - asyncsize_ = size; - uv_mutex_unlock(&async_lock); - - delete[] old_data; - uv_async_send(async); - } - - inline static NAUV_WORK_CB(AsyncProgress_) { - AsyncProgressWorkerBase *worker = - static_cast(async->data); - worker->WorkProgress(); - } - - inline static void AsyncClose_(uv_handle_t* handle) { - AsyncProgressWorkerBase *worker = - static_cast(handle->data); - delete reinterpret_cast(handle); - delete worker; - } - - uv_async_t *async; - uv_mutex_t async_lock; - T *asyncdata_; - size_t asyncsize_; -}; - -// This ensures compatibility to the previous un-templated AsyncProgressWorker -// class definition. -typedef AsyncProgressWorkerBase AsyncProgressWorker; - -inline void AsyncExecute (uv_work_t* req) { - AsyncWorker *worker = static_cast(req->data); - worker->Execute(); -} - -inline void AsyncExecuteComplete (uv_work_t* req) { - AsyncWorker* worker = static_cast(req->data); - worker->WorkComplete(); - worker->Destroy(); -} - -inline void AsyncQueueWorker (AsyncWorker* worker) { - uv_queue_work( - uv_default_loop() - , &worker->request - , AsyncExecute - , reinterpret_cast(AsyncExecuteComplete) - ); -} - -namespace imp { - -inline -ExternalOneByteStringResource const* -GetExternalResource(v8::Local str) { -#if NODE_MODULE_VERSION < ATOM_0_21_MODULE_VERSION - return str->GetExternalAsciiStringResource(); -#else - return str->GetExternalOneByteStringResource(); -#endif -} - -inline -bool -IsExternal(v8::Local str) { -#if NODE_MODULE_VERSION < ATOM_0_21_MODULE_VERSION - return str->IsExternalAscii(); -#else - return str->IsExternalOneByte(); -#endif -} - -} // end of namespace imp - -enum Encoding {ASCII, UTF8, BASE64, UCS2, BINARY, HEX, BUFFER}; - -#if NODE_MODULE_VERSION < NODE_0_10_MODULE_VERSION -# include "nan_string_bytes.h" // NOLINT(build/include) -#endif - -inline v8::Local Encode( - const void *buf, size_t len, enum Encoding encoding = BINARY) { -#if (NODE_MODULE_VERSION >= ATOM_0_21_MODULE_VERSION) - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - node::encoding node_enc = static_cast(encoding); - - if (encoding == UCS2) { - return node::Encode( - isolate - , reinterpret_cast(buf) - , len / 2); - } else { - return node::Encode( - isolate - , reinterpret_cast(buf) - , len - , node_enc); - } -#elif (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - return node::Encode( - v8::Isolate::GetCurrent() - , buf, len - , static_cast(encoding)); -#else -# if NODE_MODULE_VERSION >= NODE_0_10_MODULE_VERSION - return node::Encode(buf, len, static_cast(encoding)); -# else - return imp::Encode(reinterpret_cast(buf), len, encoding); -# endif -#endif -} - -inline ssize_t DecodeBytes( - v8::Local val, enum Encoding encoding = BINARY) { -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - return node::DecodeBytes( - v8::Isolate::GetCurrent() - , val - , static_cast(encoding)); -#else -# if (NODE_MODULE_VERSION < NODE_0_10_MODULE_VERSION) - if (encoding == BUFFER) { - return node::DecodeBytes(val, node::BINARY); - } -# endif - return node::DecodeBytes(val, static_cast(encoding)); -#endif -} - -inline ssize_t DecodeWrite( - char *buf - , size_t len - , v8::Local val - , enum Encoding encoding = BINARY) { -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - return node::DecodeWrite( - v8::Isolate::GetCurrent() - , buf - , len - , val - , static_cast(encoding)); -#else -# if (NODE_MODULE_VERSION < NODE_0_10_MODULE_VERSION) - if (encoding == BUFFER) { - return node::DecodeWrite(buf, len, val, node::BINARY); - } -# endif - return node::DecodeWrite( - buf - , len - , val - , static_cast(encoding)); -#endif -} - -inline void SetPrototypeTemplate( - v8::Local templ - , const char *name - , v8::Local value -) { - SetTemplate(templ->PrototypeTemplate(), name, value); -} - -inline void SetPrototypeTemplate( - v8::Local templ - , v8::Local name - , v8::Local value - , v8::PropertyAttribute attributes -) { - SetTemplate(templ->PrototypeTemplate(), name, value, attributes); -} - -inline void SetInstanceTemplate( - v8::Local templ - , const char *name - , v8::Local value -) { - SetTemplate(templ->InstanceTemplate(), name, value); -} - -inline void SetInstanceTemplate( - v8::Local templ - , v8::Local name - , v8::Local value - , v8::PropertyAttribute attributes -) { - SetTemplate(templ->InstanceTemplate(), name, value, attributes); -} - -namespace imp { - -// Note(@agnat): Helper to distinguish different receiver types. The first -// version deals with receivers derived from v8::Template. The second version -// handles everything else. The final argument only serves as discriminator and -// is unused. -template -inline -void -SetMethodAux(T recv, - v8::Local name, - v8::Local tpl, - v8::Template *) { - recv->Set(name, tpl); -} - -template -inline -void -SetMethodAux(T recv, - v8::Local name, - v8::Local tpl, - ...) { - recv->Set(name, GetFunction(tpl).ToLocalChecked()); -} - -} // end of namespace imp - -template class HandleType> -inline void SetMethod( - HandleType recv - , const char *name - , FunctionCallback callback) { - HandleScope scope; - v8::Local t = New(callback); - v8::Local fn_name = New(name).ToLocalChecked(); - t->SetClassName(fn_name); - // Note(@agnat): Pass an empty T* as discriminator. See note on - // SetMethodAux(...) above - imp::SetMethodAux(recv, fn_name, t, static_cast(0)); -} - -inline void SetPrototypeMethod( - v8::Local recv - , const char* name, FunctionCallback callback) { - HandleScope scope; - v8::Local t = New( - callback - , v8::Local() - , New(recv)); - v8::Local fn_name = New(name).ToLocalChecked(); - recv->PrototypeTemplate()->Set(fn_name, t); - t->SetClassName(fn_name); -} - -//=== Accessors and Such ======================================================= - -inline void SetAccessor( - v8::Local tpl - , v8::Local name - , GetterCallback getter - , SetterCallback setter = 0 - , v8::Local data = v8::Local() - , v8::AccessControl settings = v8::DEFAULT - , v8::PropertyAttribute attribute = v8::None - , imp::Sig signature = imp::Sig()) { - HandleScope scope; - - imp::NativeGetter getter_ = - imp::GetterCallbackWrapper; - imp::NativeSetter setter_ = - setter ? imp::SetterCallbackWrapper : 0; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kAccessorFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kGetterIndex - , New(reinterpret_cast(getter))); - - if (setter != 0) { - obj->SetInternalField( - imp::kSetterIndex - , New(reinterpret_cast(setter))); - } - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - - tpl->SetAccessor( - name - , getter_ - , setter_ - , obj - , settings - , attribute - , signature); -} - -inline bool SetAccessor( - v8::Local obj - , v8::Local name - , GetterCallback getter - , SetterCallback setter = 0 - , v8::Local data = v8::Local() - , v8::AccessControl settings = v8::DEFAULT - , v8::PropertyAttribute attribute = v8::None) { - EscapableHandleScope scope; - - imp::NativeGetter getter_ = - imp::GetterCallbackWrapper; - imp::NativeSetter setter_ = - setter ? imp::SetterCallbackWrapper : 0; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kAccessorFieldCount); - v8::Local dataobj = NewInstance(otpl).ToLocalChecked(); - - dataobj->SetInternalField( - imp::kGetterIndex - , New(reinterpret_cast(getter))); - - if (!data.IsEmpty()) { - dataobj->SetInternalField(imp::kDataIndex, data); - } - - if (setter) { - dataobj->SetInternalField( - imp::kSetterIndex - , New(reinterpret_cast(setter))); - } - -#if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION) - return obj->SetAccessor( - GetCurrentContext() - , name - , getter_ - , setter_ - , dataobj - , settings - , attribute).FromMaybe(false); -#else - return obj->SetAccessor( - name - , getter_ - , setter_ - , dataobj - , settings - , attribute); -#endif -} - -inline void SetNamedPropertyHandler( - v8::Local tpl - , PropertyGetterCallback getter - , PropertySetterCallback setter = 0 - , PropertyQueryCallback query = 0 - , PropertyDeleterCallback deleter = 0 - , PropertyEnumeratorCallback enumerator = 0 - , v8::Local data = v8::Local()) { - HandleScope scope; - - imp::NativePropertyGetter getter_ = - imp::PropertyGetterCallbackWrapper; - imp::NativePropertySetter setter_ = - setter ? imp::PropertySetterCallbackWrapper : 0; - imp::NativePropertyQuery query_ = - query ? imp::PropertyQueryCallbackWrapper : 0; - imp::NativePropertyDeleter *deleter_ = - deleter ? imp::PropertyDeleterCallbackWrapper : 0; - imp::NativePropertyEnumerator enumerator_ = - enumerator ? imp::PropertyEnumeratorCallbackWrapper : 0; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kPropertyFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - obj->SetInternalField( - imp::kPropertyGetterIndex - , New(reinterpret_cast(getter))); - - if (setter) { - obj->SetInternalField( - imp::kPropertySetterIndex - , New(reinterpret_cast(setter))); - } - - if (query) { - obj->SetInternalField( - imp::kPropertyQueryIndex - , New(reinterpret_cast(query))); - } - - if (deleter) { - obj->SetInternalField( - imp::kPropertyDeleterIndex - , New(reinterpret_cast(deleter))); - } - - if (enumerator) { - obj->SetInternalField( - imp::kPropertyEnumeratorIndex - , New(reinterpret_cast(enumerator))); - } - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION - tpl->SetHandler(v8::NamedPropertyHandlerConfiguration( - getter_, setter_, query_, deleter_, enumerator_, obj)); -#else - tpl->SetNamedPropertyHandler( - getter_ - , setter_ - , query_ - , deleter_ - , enumerator_ - , obj); -#endif -} - -inline void SetIndexedPropertyHandler( - v8::Local tpl - , IndexGetterCallback getter - , IndexSetterCallback setter = 0 - , IndexQueryCallback query = 0 - , IndexDeleterCallback deleter = 0 - , IndexEnumeratorCallback enumerator = 0 - , v8::Local data = v8::Local()) { - HandleScope scope; - - imp::NativeIndexGetter getter_ = - imp::IndexGetterCallbackWrapper; - imp::NativeIndexSetter setter_ = - setter ? imp::IndexSetterCallbackWrapper : 0; - imp::NativeIndexQuery query_ = - query ? imp::IndexQueryCallbackWrapper : 0; - imp::NativeIndexDeleter deleter_ = - deleter ? imp::IndexDeleterCallbackWrapper : 0; - imp::NativeIndexEnumerator enumerator_ = - enumerator ? imp::IndexEnumeratorCallbackWrapper : 0; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kIndexPropertyFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - obj->SetInternalField( - imp::kIndexPropertyGetterIndex - , New(reinterpret_cast(getter))); - - if (setter) { - obj->SetInternalField( - imp::kIndexPropertySetterIndex - , New(reinterpret_cast(setter))); - } - - if (query) { - obj->SetInternalField( - imp::kIndexPropertyQueryIndex - , New(reinterpret_cast(query))); - } - - if (deleter) { - obj->SetInternalField( - imp::kIndexPropertyDeleterIndex - , New(reinterpret_cast(deleter))); - } - - if (enumerator) { - obj->SetInternalField( - imp::kIndexPropertyEnumeratorIndex - , New(reinterpret_cast(enumerator))); - } - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION - tpl->SetHandler(v8::IndexedPropertyHandlerConfiguration( - getter_, setter_, query_, deleter_, enumerator_, obj)); -#else - tpl->SetIndexedPropertyHandler( - getter_ - , setter_ - , query_ - , deleter_ - , enumerator_ - , obj); -#endif -} - -inline void SetCallHandler( - v8::Local tpl - , FunctionCallback callback - , v8::Local data = v8::Local()) { - HandleScope scope; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kFunctionIndex - , New(reinterpret_cast(callback))); - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - - tpl->SetCallHandler(imp::FunctionCallbackWrapper, obj); -} - - -inline void SetCallAsFunctionHandler( - v8::Local tpl, - FunctionCallback callback, - v8::Local data = v8::Local()) { - HandleScope scope; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kFunctionIndex - , New(reinterpret_cast(callback))); - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - - tpl->SetCallAsFunctionHandler(imp::FunctionCallbackWrapper, obj); -} - -//=== Weak Persistent Handling ================================================= - -#include "nan_weak.h" // NOLINT(build/include) - -//=== ObjectWrap =============================================================== - -#include "nan_object_wrap.h" // NOLINT(build/include) - -//=== Export ================================================================== - -inline -void -Export(ADDON_REGISTER_FUNCTION_ARGS_TYPE target, const char *name, - FunctionCallback f) { - Set(target, New(name).ToLocalChecked(), - GetFunction(New(f)).ToLocalChecked()); -} - -//=== Tap Reverse Binding ===================================================== - -struct Tap { - explicit Tap(v8::Local t) : t_() { - t_.Reset(To(t).ToLocalChecked()); - } - - ~Tap() { t_.Reset(); } // not sure if neccessary - - inline void plan(int i) { - v8::Local arg = New(i); - MakeCallback(New(t_), "plan", 1, &arg); - } - - inline void ok(bool isOk, const char *msg = NULL) { - v8::Local args[2]; - args[0] = New(isOk); - if (msg) args[1] = New(msg).ToLocalChecked(); - MakeCallback(New(t_), "ok", msg ? 2 : 1, args); - } - - inline void pass(const char * msg = NULL) { - v8::Local hmsg; - if (msg) hmsg = New(msg).ToLocalChecked(); - MakeCallback(New(t_), "pass", msg ? 1 : 0, &hmsg); - } - - private: - Persistent t_; -}; - -#define NAN_STRINGIZE2(x) #x -#define NAN_STRINGIZE(x) NAN_STRINGIZE2(x) -#define NAN_TEST_EXPRESSION(expression) \ - ( expression ), __FILE__ ":" NAN_STRINGIZE(__LINE__) ": " #expression - -#define NAN_EXPORT(target, function) Export(target, #function, function) - -#undef TYPE_CHECK - -//=== Generic Maybefication =================================================== - -namespace imp { - -template struct Maybefier; - -template struct Maybefier > { - static MaybeLocal convert(v8::Local v) { - return MaybeLocal(v); - } -}; - -template struct Maybefier > { - static MaybeLocal convert(MaybeLocal v) { - return v; - } -}; - -} // end of namespace imp - -template class MaybeMaybe> -MaybeLocal -MakeMaybe(MaybeMaybe v) { - return imp::Maybefier >::convert(v); -} - -//=== TypedArrayContents ======================================================= - -#include "nan_typedarray_contents.h" // NOLINT(build/include) - -} // end of namespace Nan - -#endif // NAN_H_ diff --git a/node_modules/nan/nan_callbacks.h b/node_modules/nan/nan_callbacks.h deleted file mode 100644 index 851509f..0000000 --- a/node_modules/nan/nan_callbacks.h +++ /dev/null @@ -1,88 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CALLBACKS_H_ -#define NAN_CALLBACKS_H_ - -template class FunctionCallbackInfo; -template class PropertyCallbackInfo; -template class Global; - -typedef void(*FunctionCallback)(const FunctionCallbackInfo&); -typedef void(*GetterCallback) - (v8::Local, const PropertyCallbackInfo&); -typedef void(*SetterCallback)( - v8::Local, - v8::Local, - const PropertyCallbackInfo&); -typedef void(*PropertyGetterCallback)( - v8::Local, - const PropertyCallbackInfo&); -typedef void(*PropertySetterCallback)( - v8::Local, - v8::Local, - const PropertyCallbackInfo&); -typedef void(*PropertyEnumeratorCallback) - (const PropertyCallbackInfo&); -typedef void(*PropertyDeleterCallback)( - v8::Local, - const PropertyCallbackInfo&); -typedef void(*PropertyQueryCallback)( - v8::Local, - const PropertyCallbackInfo&); -typedef void(*IndexGetterCallback)( - uint32_t, - const PropertyCallbackInfo&); -typedef void(*IndexSetterCallback)( - uint32_t, - v8::Local, - const PropertyCallbackInfo&); -typedef void(*IndexEnumeratorCallback) - (const PropertyCallbackInfo&); -typedef void(*IndexDeleterCallback)( - uint32_t, - const PropertyCallbackInfo&); -typedef void(*IndexQueryCallback)( - uint32_t, - const PropertyCallbackInfo&); - -namespace imp { -typedef v8::Local Sig; - -static const int kDataIndex = 0; - -static const int kFunctionIndex = 1; -static const int kFunctionFieldCount = 2; - -static const int kGetterIndex = 1; -static const int kSetterIndex = 2; -static const int kAccessorFieldCount = 3; - -static const int kPropertyGetterIndex = 1; -static const int kPropertySetterIndex = 2; -static const int kPropertyEnumeratorIndex = 3; -static const int kPropertyDeleterIndex = 4; -static const int kPropertyQueryIndex = 5; -static const int kPropertyFieldCount = 6; - -static const int kIndexPropertyGetterIndex = 1; -static const int kIndexPropertySetterIndex = 2; -static const int kIndexPropertyEnumeratorIndex = 3; -static const int kIndexPropertyDeleterIndex = 4; -static const int kIndexPropertyQueryIndex = 5; -static const int kIndexPropertyFieldCount = 6; - -} // end of namespace imp - -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -# include "nan_callbacks_12_inl.h" // NOLINT(build/include) -#else -# include "nan_callbacks_pre_12_inl.h" // NOLINT(build/include) -#endif - -#endif // NAN_CALLBACKS_H_ diff --git a/node_modules/nan/nan_callbacks_12_inl.h b/node_modules/nan/nan_callbacks_12_inl.h deleted file mode 100644 index bea12c7..0000000 --- a/node_modules/nan/nan_callbacks_12_inl.h +++ /dev/null @@ -1,512 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CALLBACKS_12_INL_H_ -#define NAN_CALLBACKS_12_INL_H_ - -template -class ReturnValue { - v8::ReturnValue value_; - - public: - template - explicit inline ReturnValue(const v8::ReturnValue &value) : - value_(value) {} - template - explicit inline ReturnValue(const ReturnValue& that) - : value_(that.value_) { - TYPE_CHECK(T, S); - } - - // Handle setters - template inline void Set(const v8::Local &handle) { - TYPE_CHECK(T, S); - value_.Set(handle); - } - - template inline void Set(const Global &handle) { - TYPE_CHECK(T, S); -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && \ - (V8_MINOR_VERSION > 5 || (V8_MINOR_VERSION == 5 && \ - defined(V8_BUILD_NUMBER) && V8_BUILD_NUMBER >= 8)))) - value_.Set(handle); -#else - value_.Set(*reinterpret_cast*>(&handle)); - const_cast &>(handle).Reset(); -#endif - } - - // Fast primitive setters - inline void Set(bool value) { - TYPE_CHECK(T, v8::Boolean); - value_.Set(value); - } - - inline void Set(double i) { - TYPE_CHECK(T, v8::Number); - value_.Set(i); - } - - inline void Set(int32_t i) { - TYPE_CHECK(T, v8::Integer); - value_.Set(i); - } - - inline void Set(uint32_t i) { - TYPE_CHECK(T, v8::Integer); - value_.Set(i); - } - - // Fast JS primitive setters - inline void SetNull() { - TYPE_CHECK(T, v8::Primitive); - value_.SetNull(); - } - - inline void SetUndefined() { - TYPE_CHECK(T, v8::Primitive); - value_.SetUndefined(); - } - - inline void SetEmptyString() { - TYPE_CHECK(T, v8::String); - value_.SetEmptyString(); - } - - // Convenience getter for isolate - inline v8::Isolate *GetIsolate() const { - return value_.GetIsolate(); - } - - // Pointer setter: Uncompilable to prevent inadvertent misuse. - template - inline void Set(S *whatever) { TYPE_CHECK(S*, v8::Primitive); } -}; - -template -class FunctionCallbackInfo { - const v8::FunctionCallbackInfo &info_; - const v8::Local data_; - - public: - explicit inline FunctionCallbackInfo( - const v8::FunctionCallbackInfo &info - , v8::Local data) : - info_(info) - , data_(data) {} - - inline ReturnValue GetReturnValue() const { - return ReturnValue(info_.GetReturnValue()); - } - - inline v8::Local Callee() const { return info_.Callee(); } - inline v8::Local Data() const { return data_; } - inline v8::Local Holder() const { return info_.Holder(); } - inline bool IsConstructCall() const { return info_.IsConstructCall(); } - inline int Length() const { return info_.Length(); } - inline v8::Local operator[](int i) const { return info_[i]; } - inline v8::Local This() const { return info_.This(); } - inline v8::Isolate *GetIsolate() const { return info_.GetIsolate(); } - - - protected: - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kCalleeIndex = 5; - static const int kContextSaveIndex = 6; - static const int kArgsLength = 7; - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(FunctionCallbackInfo) -}; - -template -class PropertyCallbackInfo { - const v8::PropertyCallbackInfo &info_; - const v8::Local data_; - - public: - explicit inline PropertyCallbackInfo( - const v8::PropertyCallbackInfo &info - , const v8::Local data) : - info_(info) - , data_(data) {} - - inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); } - inline v8::Local Data() const { return data_; } - inline v8::Local This() const { return info_.This(); } - inline v8::Local Holder() const { return info_.Holder(); } - inline ReturnValue GetReturnValue() const { - return ReturnValue(info_.GetReturnValue()); - } - - protected: - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kThisIndex = 5; - static const int kArgsLength = 6; - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfo) -}; - -namespace imp { -static -void FunctionCallbackWrapper(const v8::FunctionCallbackInfo &info) { - v8::Local obj = info.Data().As(); - FunctionCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kFunctionIndex).As()->Value())); - FunctionCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - callback(cbinfo); -} - -typedef void (*NativeFunction)(const v8::FunctionCallbackInfo &); - -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION -static -void GetterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - GetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kGetterIndex).As()->Value())); - callback(property.As(), cbinfo); -} - -typedef void (*NativeGetter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void SetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - SetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kSetterIndex).As()->Value())); - callback(property.As(), value, cbinfo); -} - -typedef void (*NativeSetter)( - v8::Local - , v8::Local - , const v8::PropertyCallbackInfo &); -#else -static -void GetterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - GetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kGetterIndex).As()->Value())); - callback(property, cbinfo); -} - -typedef void (*NativeGetter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void SetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - SetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kSetterIndex).As()->Value())); - callback(property, value, cbinfo); -} - -typedef void (*NativeSetter)( - v8::Local - , v8::Local - , const v8::PropertyCallbackInfo &); -#endif - -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION -static -void PropertyGetterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyGetterIndex) - .As()->Value())); - callback(property.As(), cbinfo); -} - -typedef void (*NativePropertyGetter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void PropertySetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertySetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertySetterIndex) - .As()->Value())); - callback(property.As(), value, cbinfo); -} - -typedef void (*NativePropertySetter)( - v8::Local - , v8::Local - , const v8::PropertyCallbackInfo &); - -static -void PropertyEnumeratorCallbackWrapper( - const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyEnumeratorCallback callback = - reinterpret_cast(reinterpret_cast( - obj->GetInternalField(kPropertyEnumeratorIndex) - .As()->Value())); - callback(cbinfo); -} - -typedef void (*NativePropertyEnumerator) - (const v8::PropertyCallbackInfo &); - -static -void PropertyDeleterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyDeleterIndex) - .As()->Value())); - callback(property.As(), cbinfo); -} - -typedef void (NativePropertyDeleter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void PropertyQueryCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyQueryIndex) - .As()->Value())); - callback(property.As(), cbinfo); -} - -typedef void (*NativePropertyQuery) - (v8::Local, const v8::PropertyCallbackInfo &); -#else -static -void PropertyGetterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyGetterIndex) - .As()->Value())); - callback(property, cbinfo); -} - -typedef void (*NativePropertyGetter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void PropertySetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertySetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertySetterIndex) - .As()->Value())); - callback(property, value, cbinfo); -} - -typedef void (*NativePropertySetter)( - v8::Local - , v8::Local - , const v8::PropertyCallbackInfo &); - -static -void PropertyEnumeratorCallbackWrapper( - const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyEnumeratorCallback callback = - reinterpret_cast(reinterpret_cast( - obj->GetInternalField(kPropertyEnumeratorIndex) - .As()->Value())); - callback(cbinfo); -} - -typedef void (*NativePropertyEnumerator) - (const v8::PropertyCallbackInfo &); - -static -void PropertyDeleterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyDeleterIndex) - .As()->Value())); - callback(property, cbinfo); -} - -typedef void (NativePropertyDeleter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void PropertyQueryCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyQueryIndex) - .As()->Value())); - callback(property, cbinfo); -} - -typedef void (*NativePropertyQuery) - (v8::Local, const v8::PropertyCallbackInfo &); -#endif - -static -void IndexGetterCallbackWrapper( - uint32_t index, const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyGetterIndex) - .As()->Value())); - callback(index, cbinfo); -} - -typedef void (*NativeIndexGetter) - (uint32_t, const v8::PropertyCallbackInfo &); - -static -void IndexSetterCallbackWrapper( - uint32_t index - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexSetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertySetterIndex) - .As()->Value())); - callback(index, value, cbinfo); -} - -typedef void (*NativeIndexSetter)( - uint32_t - , v8::Local - , const v8::PropertyCallbackInfo &); - -static -void IndexEnumeratorCallbackWrapper( - const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexEnumeratorCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField( - kIndexPropertyEnumeratorIndex).As()->Value())); - callback(cbinfo); -} - -typedef void (*NativeIndexEnumerator) - (const v8::PropertyCallbackInfo &); - -static -void IndexDeleterCallbackWrapper( - uint32_t index, const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyDeleterIndex) - .As()->Value())); - callback(index, cbinfo); -} - -typedef void (*NativeIndexDeleter) - (uint32_t, const v8::PropertyCallbackInfo &); - -static -void IndexQueryCallbackWrapper( - uint32_t index, const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyQueryIndex) - .As()->Value())); - callback(index, cbinfo); -} - -typedef void (*NativeIndexQuery) - (uint32_t, const v8::PropertyCallbackInfo &); -} // end of namespace imp - -#endif // NAN_CALLBACKS_12_INL_H_ diff --git a/node_modules/nan/nan_callbacks_pre_12_inl.h b/node_modules/nan/nan_callbacks_pre_12_inl.h deleted file mode 100644 index 5e2b8e2..0000000 --- a/node_modules/nan/nan_callbacks_pre_12_inl.h +++ /dev/null @@ -1,506 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CALLBACKS_PRE_12_INL_H_ -#define NAN_CALLBACKS_PRE_12_INL_H_ - -namespace imp { -template class ReturnValueImp; -} // end of namespace imp - -template -class ReturnValue { - v8::Isolate *isolate_; - v8::Persistent *value_; - friend class imp::ReturnValueImp; - - public: - template - explicit inline ReturnValue(v8::Isolate *isolate, v8::Persistent *p) : - isolate_(isolate), value_(p) {} - template - explicit inline ReturnValue(const ReturnValue& that) - : isolate_(that.isolate_), value_(that.value_) { - TYPE_CHECK(T, S); - } - - // Handle setters - template inline void Set(const v8::Local &handle) { - TYPE_CHECK(T, S); - value_->Dispose(); - *value_ = v8::Persistent::New(handle); - } - - template inline void Set(const Global &handle) { - TYPE_CHECK(T, S); - value_->Dispose(); - *value_ = v8::Persistent::New(handle.persistent); - const_cast &>(handle).Reset(); - } - - // Fast primitive setters - inline void Set(bool value) { - TYPE_CHECK(T, v8::Boolean); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Boolean::New(value)); - } - - inline void Set(double i) { - TYPE_CHECK(T, v8::Number); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Number::New(i)); - } - - inline void Set(int32_t i) { - TYPE_CHECK(T, v8::Integer); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Int32::New(i)); - } - - inline void Set(uint32_t i) { - TYPE_CHECK(T, v8::Integer); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Uint32::NewFromUnsigned(i)); - } - - // Fast JS primitive setters - inline void SetNull() { - TYPE_CHECK(T, v8::Primitive); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Null()); - } - - inline void SetUndefined() { - TYPE_CHECK(T, v8::Primitive); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Undefined()); - } - - inline void SetEmptyString() { - TYPE_CHECK(T, v8::String); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::String::Empty()); - } - - // Convenience getter for isolate - inline v8::Isolate *GetIsolate() const { - return isolate_; - } - - // Pointer setter: Uncompilable to prevent inadvertent misuse. - template - inline void Set(S *whatever) { TYPE_CHECK(S*, v8::Primitive); } -}; - -template -class FunctionCallbackInfo { - const v8::Arguments &args_; - v8::Local data_; - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline FunctionCallbackInfo( - const v8::Arguments &args - , v8::Local data) : - args_(args) - , data_(data) - , return_value_(args.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Undefined())) {} - - inline ~FunctionCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { - return ReturnValue(return_value_); - } - - inline v8::Local Callee() const { return args_.Callee(); } - inline v8::Local Data() const { return data_; } - inline v8::Local Holder() const { return args_.Holder(); } - inline bool IsConstructCall() const { return args_.IsConstructCall(); } - inline int Length() const { return args_.Length(); } - inline v8::Local operator[](int i) const { return args_[i]; } - inline v8::Local This() const { return args_.This(); } - inline v8::Isolate *GetIsolate() const { return args_.GetIsolate(); } - - - protected: - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kCalleeIndex = 5; - static const int kContextSaveIndex = 6; - static const int kArgsLength = 7; - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(FunctionCallbackInfo) -}; - -template -class PropertyCallbackInfoBase { - const v8::AccessorInfo &info_; - const v8::Local data_; - - public: - explicit inline PropertyCallbackInfoBase( - const v8::AccessorInfo &info - , const v8::Local data) : - info_(info) - , data_(data) {} - - inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); } - inline v8::Local Data() const { return data_; } - inline v8::Local This() const { return info_.This(); } - inline v8::Local Holder() const { return info_.Holder(); } - - protected: - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kThisIndex = 5; - static const int kArgsLength = 6; - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfoBase) -}; - -template -class PropertyCallbackInfo : public PropertyCallbackInfoBase { - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline PropertyCallbackInfo( - const v8::AccessorInfo &info - , const v8::Local data) : - PropertyCallbackInfoBase(info, data) - , return_value_(info.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Undefined())) {} - - inline ~PropertyCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { return return_value_; } -}; - -template<> -class PropertyCallbackInfo : - public PropertyCallbackInfoBase { - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline PropertyCallbackInfo( - const v8::AccessorInfo &info - , const v8::Local data) : - PropertyCallbackInfoBase(info, data) - , return_value_(info.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Local())) {} - - inline ~PropertyCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { - return return_value_; - } -}; - -template<> -class PropertyCallbackInfo : - public PropertyCallbackInfoBase { - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline PropertyCallbackInfo( - const v8::AccessorInfo &info - , const v8::Local data) : - PropertyCallbackInfoBase(info, data) - , return_value_(info.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Local())) {} - - inline ~PropertyCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { - return return_value_; - } -}; - -template<> -class PropertyCallbackInfo : - public PropertyCallbackInfoBase { - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline PropertyCallbackInfo( - const v8::AccessorInfo &info - , const v8::Local data) : - PropertyCallbackInfoBase(info, data) - , return_value_(info.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Local())) {} - - inline ~PropertyCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { - return return_value_; - } -}; - -namespace imp { -template -class ReturnValueImp : public ReturnValue { - public: - explicit ReturnValueImp(ReturnValue that) : - ReturnValue(that) {} - inline v8::Handle Value() { - return *ReturnValue::value_; - } -}; - -static -v8::Handle FunctionCallbackWrapper(const v8::Arguments &args) { - v8::Local obj = args.Data().As(); - FunctionCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kFunctionIndex).As()->Value())); - FunctionCallbackInfo - cbinfo(args, obj->GetInternalField(kDataIndex)); - callback(cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeFunction)(const v8::Arguments &); - -static -v8::Handle GetterCallbackWrapper( - v8::Local property, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - GetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kGetterIndex).As()->Value())); - callback(property, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeGetter) - (v8::Local, const v8::AccessorInfo &); - -static -void SetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - SetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kSetterIndex).As()->Value())); - callback(property, value, cbinfo); -} - -typedef void (*NativeSetter) - (v8::Local, v8::Local, const v8::AccessorInfo &); - -static -v8::Handle PropertyGetterCallbackWrapper( - v8::Local property, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyGetterIndex) - .As()->Value())); - callback(property, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativePropertyGetter) - (v8::Local, const v8::AccessorInfo &); - -static -v8::Handle PropertySetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertySetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertySetterIndex) - .As()->Value())); - callback(property, value, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativePropertySetter) - (v8::Local, v8::Local, const v8::AccessorInfo &); - -static -v8::Handle PropertyEnumeratorCallbackWrapper( - const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyEnumeratorCallback callback = - reinterpret_cast(reinterpret_cast( - obj->GetInternalField(kPropertyEnumeratorIndex) - .As()->Value())); - callback(cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativePropertyEnumerator) - (const v8::AccessorInfo &); - -static -v8::Handle PropertyDeleterCallbackWrapper( - v8::Local property - , const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyDeleterIndex) - .As()->Value())); - callback(property, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (NativePropertyDeleter) - (v8::Local, const v8::AccessorInfo &); - -static -v8::Handle PropertyQueryCallbackWrapper( - v8::Local property, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyQueryIndex) - .As()->Value())); - callback(property, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativePropertyQuery) - (v8::Local, const v8::AccessorInfo &); - -static -v8::Handle IndexGetterCallbackWrapper( - uint32_t index, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyGetterIndex) - .As()->Value())); - callback(index, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexGetter) - (uint32_t, const v8::AccessorInfo &); - -static -v8::Handle IndexSetterCallbackWrapper( - uint32_t index - , v8::Local value - , const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexSetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertySetterIndex) - .As()->Value())); - callback(index, value, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexSetter) - (uint32_t, v8::Local, const v8::AccessorInfo &); - -static -v8::Handle IndexEnumeratorCallbackWrapper( - const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexEnumeratorCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyEnumeratorIndex) - .As()->Value())); - callback(cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexEnumerator) - (const v8::AccessorInfo &); - -static -v8::Handle IndexDeleterCallbackWrapper( - uint32_t index, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyDeleterIndex) - .As()->Value())); - callback(index, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexDeleter) - (uint32_t, const v8::AccessorInfo &); - -static -v8::Handle IndexQueryCallbackWrapper( - uint32_t index, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyQueryIndex) - .As()->Value())); - callback(index, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexQuery) - (uint32_t, const v8::AccessorInfo &); -} // end of namespace imp - -#endif // NAN_CALLBACKS_PRE_12_INL_H_ diff --git a/node_modules/nan/nan_converters.h b/node_modules/nan/nan_converters.h deleted file mode 100644 index 7386c3b..0000000 --- a/node_modules/nan/nan_converters.h +++ /dev/null @@ -1,64 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CONVERTERS_H_ -#define NAN_CONVERTERS_H_ - -namespace imp { -template struct ToFactoryBase { - typedef MaybeLocal return_t; -}; -template struct ValueFactoryBase { typedef Maybe return_t; }; - -template struct ToFactory; - -#define X(TYPE) \ - template<> \ - struct ToFactory : ToFactoryBase { \ - static inline return_t convert(v8::Local val); \ - }; - -X(Boolean) -X(Number) -X(String) -X(Object) -X(Integer) -X(Uint32) -X(Int32) - -#undef X - -#define X(TYPE) \ - template<> \ - struct ToFactory : ValueFactoryBase { \ - static inline return_t convert(v8::Local val); \ - }; - -X(bool) -X(double) -X(int64_t) -X(uint32_t) -X(int32_t) - -#undef X -} // end of namespace imp - -template -inline -typename imp::ToFactory::return_t To(v8::Local val) { - return imp::ToFactory::convert(val); -} - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -# include "nan_converters_43_inl.h" -#else -# include "nan_converters_pre_43_inl.h" -#endif - -#endif // NAN_CONVERTERS_H_ diff --git a/node_modules/nan/nan_converters_43_inl.h b/node_modules/nan/nan_converters_43_inl.h deleted file mode 100644 index e2eb032..0000000 --- a/node_modules/nan/nan_converters_43_inl.h +++ /dev/null @@ -1,42 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CONVERTERS_43_INL_H_ -#define NAN_CONVERTERS_43_INL_H_ - -#define X(TYPE) \ -imp::ToFactory::return_t \ -imp::ToFactory::convert(v8::Local val) { \ - return val->To ## TYPE(GetCurrentContext()); \ -} - -X(Boolean) -X(Number) -X(String) -X(Object) -X(Integer) -X(Uint32) -X(Int32) - -#undef X - -#define X(TYPE, NAME) \ -imp::ToFactory::return_t \ -imp::ToFactory::convert(v8::Local val) { \ - return val->NAME ## Value(GetCurrentContext()); \ -} - -X(bool, Boolean) -X(double, Number) -X(int64_t, Integer) -X(uint32_t, Uint32) -X(int32_t, Int32) - -#undef X - -#endif // NAN_CONVERTERS_43_INL_H_ diff --git a/node_modules/nan/nan_converters_pre_43_inl.h b/node_modules/nan/nan_converters_pre_43_inl.h deleted file mode 100644 index 177a74a..0000000 --- a/node_modules/nan/nan_converters_pre_43_inl.h +++ /dev/null @@ -1,42 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CONVERTERS_PRE_43_INL_H_ -#define NAN_CONVERTERS_PRE_43_INL_H_ - -#define X(TYPE) \ -imp::ToFactory::return_t \ -imp::ToFactory::convert(v8::Local val) { \ - return MaybeLocal(val->To ## TYPE()); \ -} - -X(Boolean) -X(Number) -X(String) -X(Object) -X(Integer) -X(Uint32) -X(Int32) - -#undef X - -#define X(TYPE, NAME) \ -imp::ToFactory::return_t \ -imp::ToFactory::convert(v8::Local val) { \ - return Just(val->NAME ##Value()); \ -} - -X(bool, Boolean) -X(double, Number) -X(int64_t, Integer) -X(uint32_t, Uint32) -X(int32_t, Int32) - -#undef X - -#endif // NAN_CONVERTERS_PRE_43_INL_H_ diff --git a/node_modules/nan/nan_implementation_12_inl.h b/node_modules/nan/nan_implementation_12_inl.h deleted file mode 100644 index be50fc6..0000000 --- a/node_modules/nan/nan_implementation_12_inl.h +++ /dev/null @@ -1,409 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_IMPLEMENTATION_12_INL_H_ -#define NAN_IMPLEMENTATION_12_INL_H_ -//============================================================================== -// node v0.11 implementation -//============================================================================== - -namespace imp { - -//=== Array ==================================================================== - -Factory::return_t -Factory::New() { - return v8::Array::New(v8::Isolate::GetCurrent()); -} - -Factory::return_t -Factory::New(int length) { - return v8::Array::New(v8::Isolate::GetCurrent(), length); -} - -//=== Boolean ================================================================== - -Factory::return_t -Factory::New(bool value) { - return v8::Boolean::New(v8::Isolate::GetCurrent(), value); -} - -//=== Boolean Object =========================================================== - -Factory::return_t -Factory::New(bool value) { -#if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION) - return v8::BooleanObject::New( - v8::Isolate::GetCurrent(), value).As(); -#else - return v8::BooleanObject::New(value).As(); -#endif -} - -//=== Context ================================================================== - -Factory::return_t -Factory::New( v8::ExtensionConfiguration* extensions - , v8::Local tmpl - , v8::Local obj) { - return v8::Context::New(v8::Isolate::GetCurrent(), extensions, tmpl, obj); -} - -//=== Date ===================================================================== - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New(double value) { - v8::Local ret; - if (v8::Date::New(GetCurrentContext(), value). - ToLocal(reinterpret_cast*>(&ret))) { - return v8::MaybeLocal(ret); - } else { - return v8::MaybeLocal(ret); - } -} -#else -Factory::return_t -Factory::New(double value) { - return Factory::return_t( - v8::Date::New(v8::Isolate::GetCurrent(), value).As()); -} -#endif - -//=== External ================================================================= - -Factory::return_t -Factory::New(void * value) { - return v8::External::New(v8::Isolate::GetCurrent(), value); -} - -//=== Function ================================================================= - -Factory::return_t -Factory::New( FunctionCallback callback - , v8::Local data) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - v8::Local tpl = v8::ObjectTemplate::New(isolate); - tpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = NewInstance(tpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kFunctionIndex - , v8::External::New(isolate, reinterpret_cast(callback))); - - v8::Local val = v8::Local::New(isolate, data); - - if (!val.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, val); - } - - return scope.Escape(v8::Function::New( isolate - , imp::FunctionCallbackWrapper - , obj)); -} - -//=== Function Template ======================================================== - -Factory::return_t -Factory::New( FunctionCallback callback - , v8::Local data - , v8::Local signature) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - if (callback) { - v8::EscapableHandleScope scope(isolate); - v8::Local tpl = v8::ObjectTemplate::New(isolate); - tpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = NewInstance(tpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kFunctionIndex - , v8::External::New(isolate, reinterpret_cast(callback))); - v8::Local val = v8::Local::New(isolate, data); - - if (!val.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, val); - } - - return scope.Escape(v8::FunctionTemplate::New( isolate - , imp::FunctionCallbackWrapper - , obj - , signature)); - } else { - return v8::FunctionTemplate::New(isolate, 0, data, signature); - } -} - -//=== Number =================================================================== - -Factory::return_t -Factory::New(double value) { - return v8::Number::New(v8::Isolate::GetCurrent(), value); -} - -//=== Number Object ============================================================ - -Factory::return_t -Factory::New(double value) { - return v8::NumberObject::New( v8::Isolate::GetCurrent() - , value).As(); -} - -//=== Integer, Int32 and Uint32 ================================================ - -template -typename IntegerFactory::return_t -IntegerFactory::New(int32_t value) { - return To(T::New(v8::Isolate::GetCurrent(), value)); -} - -template -typename IntegerFactory::return_t -IntegerFactory::New(uint32_t value) { - return To(T::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); -} - -Factory::return_t -Factory::New(int32_t value) { - return To( - v8::Uint32::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); -} - -Factory::return_t -Factory::New(uint32_t value) { - return To( - v8::Uint32::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); -} - -//=== Object =================================================================== - -Factory::return_t -Factory::New() { - return v8::Object::New(v8::Isolate::GetCurrent()); -} - -//=== Object Template ========================================================== - -Factory::return_t -Factory::New() { - return v8::ObjectTemplate::New(v8::Isolate::GetCurrent()); -} - -//=== RegExp =================================================================== - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New( - v8::Local pattern - , v8::RegExp::Flags flags) { - return v8::RegExp::New(GetCurrentContext(), pattern, flags); -} -#else -Factory::return_t -Factory::New( - v8::Local pattern - , v8::RegExp::Flags flags) { - return Factory::return_t(v8::RegExp::New(pattern, flags)); -} -#endif - -//=== Script =================================================================== - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New( v8::Local source) { - v8::ScriptCompiler::Source src(source); - return v8::ScriptCompiler::Compile(GetCurrentContext(), &src); -} - -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - v8::ScriptCompiler::Source src(source, origin); - return v8::ScriptCompiler::Compile(GetCurrentContext(), &src); -} -#else -Factory::return_t -Factory::New( v8::Local source) { - v8::ScriptCompiler::Source src(source); - return Factory::return_t( - v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src)); -} - -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - v8::ScriptCompiler::Source src(source, origin); - return Factory::return_t( - v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src)); -} -#endif - -//=== Signature ================================================================ - -Factory::return_t -Factory::New(Factory::FTH receiver) { - return v8::Signature::New(v8::Isolate::GetCurrent(), receiver); -} - -//=== String =================================================================== - -Factory::return_t -Factory::New() { - return Factory::return_t( - v8::String::Empty(v8::Isolate::GetCurrent())); -} - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New(const char * value, int length) { - return v8::String::NewFromUtf8( - v8::Isolate::GetCurrent(), value, v8::NewStringType::kNormal, length); -} - -Factory::return_t -Factory::New(std::string const& value) { - assert(value.size() <= INT_MAX && "string too long"); - return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), - value.data(), v8::NewStringType::kNormal, static_cast(value.size())); -} - -Factory::return_t -Factory::New(const uint16_t * value, int length) { - return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value, - v8::NewStringType::kNormal, length); -} - -Factory::return_t -Factory::New(v8::String::ExternalStringResource * value) { - return v8::String::NewExternalTwoByte(v8::Isolate::GetCurrent(), value); -} - -Factory::return_t -Factory::New(ExternalOneByteStringResource * value) { - return v8::String::NewExternalOneByte(v8::Isolate::GetCurrent(), value); -} -#else -Factory::return_t -Factory::New(const char * value, int length) { - return Factory::return_t( - v8::String::NewFromUtf8( - v8::Isolate::GetCurrent() - , value - , v8::String::kNormalString - , length)); -} - -Factory::return_t -Factory::New( - std::string const& value) /* NOLINT(build/include_what_you_use) */ { - assert(value.size() <= INT_MAX && "string too long"); - return Factory::return_t( - v8::String::NewFromUtf8( - v8::Isolate::GetCurrent() - , value.data() - , v8::String::kNormalString - , static_cast(value.size()))); -} - -Factory::return_t -Factory::New(const uint16_t * value, int length) { - return Factory::return_t( - v8::String::NewFromTwoByte( - v8::Isolate::GetCurrent() - , value - , v8::String::kNormalString - , length)); -} - -Factory::return_t -Factory::New(v8::String::ExternalStringResource * value) { - return Factory::return_t( - v8::String::NewExternal(v8::Isolate::GetCurrent(), value)); -} - -Factory::return_t -Factory::New(ExternalOneByteStringResource * value) { - return Factory::return_t( - v8::String::NewExternal(v8::Isolate::GetCurrent(), value)); -} -#endif - -//=== String Object ============================================================ - -Factory::return_t -Factory::New(v8::Local value) { - return v8::StringObject::New(value).As(); -} - -//=== Unbound Script =========================================================== - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New(v8::Local source) { - v8::ScriptCompiler::Source src(source); - return v8::ScriptCompiler::CompileUnboundScript( - v8::Isolate::GetCurrent(), &src); -} - -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - v8::ScriptCompiler::Source src(source, origin); - return v8::ScriptCompiler::CompileUnboundScript( - v8::Isolate::GetCurrent(), &src); -} -#else -Factory::return_t -Factory::New(v8::Local source) { - v8::ScriptCompiler::Source src(source); - return Factory::return_t( - v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src)); -} - -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - v8::ScriptCompiler::Source src(source, origin); - return Factory::return_t( - v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src)); -} -#endif - -} // end of namespace imp - -//=== Presistents and Handles ================================================== - -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION -template -inline v8::Local New(v8::Handle h) { - return v8::Local::New(v8::Isolate::GetCurrent(), h); -} -#endif - -template -inline v8::Local New(v8::Persistent const& p) { - return v8::Local::New(v8::Isolate::GetCurrent(), p); -} - -template -inline v8::Local New(Persistent const& p) { - return v8::Local::New(v8::Isolate::GetCurrent(), p); -} - -template -inline v8::Local New(Global const& p) { - return v8::Local::New(v8::Isolate::GetCurrent(), p); -} - -#endif // NAN_IMPLEMENTATION_12_INL_H_ diff --git a/node_modules/nan/nan_implementation_pre_12_inl.h b/node_modules/nan/nan_implementation_pre_12_inl.h deleted file mode 100644 index f6642ee..0000000 --- a/node_modules/nan/nan_implementation_pre_12_inl.h +++ /dev/null @@ -1,264 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_IMPLEMENTATION_PRE_12_INL_H_ -#define NAN_IMPLEMENTATION_PRE_12_INL_H_ - -//============================================================================== -// node v0.10 implementation -//============================================================================== - -namespace imp { - -//=== Array ==================================================================== - -Factory::return_t -Factory::New() { - return v8::Array::New(); -} - -Factory::return_t -Factory::New(int length) { - return v8::Array::New(length); -} - -//=== Boolean ================================================================== - -Factory::return_t -Factory::New(bool value) { - return v8::Boolean::New(value)->ToBoolean(); -} - -//=== Boolean Object =========================================================== - -Factory::return_t -Factory::New(bool value) { - return v8::BooleanObject::New(value).As(); -} - -//=== Context ================================================================== - -Factory::return_t -Factory::New( v8::ExtensionConfiguration* extensions - , v8::Local tmpl - , v8::Local obj) { - v8::Persistent ctx = v8::Context::New(extensions, tmpl, obj); - v8::Local lctx = v8::Local::New(ctx); - ctx.Dispose(); - return lctx; -} - -//=== Date ===================================================================== - -Factory::return_t -Factory::New(double value) { - return Factory::return_t(v8::Date::New(value).As()); -} - -//=== External ================================================================= - -Factory::return_t -Factory::New(void * value) { - return v8::External::New(value); -} - -//=== Function ================================================================= - -Factory::return_t -Factory::New( FunctionCallback callback - , v8::Local data) { - return Factory::New( callback - , data - , v8::Local() - )->GetFunction(); -} - - -//=== FunctionTemplate ========================================================= - -Factory::return_t -Factory::New( FunctionCallback callback - , v8::Local data - , v8::Local signature) { - if (callback) { - v8::HandleScope scope; - - v8::Local tpl = v8::ObjectTemplate::New(); - tpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = tpl->NewInstance(); - - obj->SetInternalField( - imp::kFunctionIndex - , v8::External::New(reinterpret_cast(callback))); - - v8::Local val = v8::Local::New(data); - - if (!val.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, val); - } - - // Note(agnat): Emulate length argument here. Unfortunately, I couldn't find - // a way. Have at it though... - return scope.Close( - v8::FunctionTemplate::New(imp::FunctionCallbackWrapper - , obj - , signature)); - } else { - return v8::FunctionTemplate::New(0, data, signature); - } -} - -//=== Number =================================================================== - -Factory::return_t -Factory::New(double value) { - return v8::Number::New(value); -} - -//=== Number Object ============================================================ - -Factory::return_t -Factory::New(double value) { - return v8::NumberObject::New(value).As(); -} - -//=== Integer, Int32 and Uint32 ================================================ - -template -typename IntegerFactory::return_t -IntegerFactory::New(int32_t value) { - return To(T::New(value)); -} - -template -typename IntegerFactory::return_t -IntegerFactory::New(uint32_t value) { - return To(T::NewFromUnsigned(value)); -} - -Factory::return_t -Factory::New(int32_t value) { - return To(v8::Uint32::NewFromUnsigned(value)); -} - -Factory::return_t -Factory::New(uint32_t value) { - return To(v8::Uint32::NewFromUnsigned(value)); -} - - -//=== Object =================================================================== - -Factory::return_t -Factory::New() { - return v8::Object::New(); -} - -//=== Object Template ========================================================== - -Factory::return_t -Factory::New() { - return v8::ObjectTemplate::New(); -} - -//=== RegExp =================================================================== - -Factory::return_t -Factory::New( - v8::Local pattern - , v8::RegExp::Flags flags) { - return Factory::return_t(v8::RegExp::New(pattern, flags)); -} - -//=== Script =================================================================== - -Factory::return_t -Factory::New( v8::Local source) { - return Factory::return_t(v8::Script::New(source)); -} -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - return Factory::return_t( - v8::Script::New(source, const_cast(&origin))); -} - -//=== Signature ================================================================ - -Factory::return_t -Factory::New(Factory::FTH receiver) { - return v8::Signature::New(receiver); -} - -//=== String =================================================================== - -Factory::return_t -Factory::New() { - return Factory::return_t(v8::String::Empty()); -} - -Factory::return_t -Factory::New(const char * value, int length) { - return Factory::return_t(v8::String::New(value, length)); -} - -Factory::return_t -Factory::New( - std::string const& value) /* NOLINT(build/include_what_you_use) */ { - assert(value.size() <= INT_MAX && "string too long"); - return Factory::return_t( - v8::String::New( value.data(), static_cast(value.size()))); -} - -Factory::return_t -Factory::New(const uint16_t * value, int length) { - return Factory::return_t(v8::String::New(value, length)); -} - -Factory::return_t -Factory::New(v8::String::ExternalStringResource * value) { - return Factory::return_t(v8::String::NewExternal(value)); -} - -Factory::return_t -Factory::New(v8::String::ExternalAsciiStringResource * value) { - return Factory::return_t(v8::String::NewExternal(value)); -} - -//=== String Object ============================================================ - -Factory::return_t -Factory::New(v8::Local value) { - return v8::StringObject::New(value).As(); -} - -} // end of namespace imp - -//=== Presistents and Handles ================================================== - -template -inline v8::Local New(v8::Handle h) { - return v8::Local::New(h); -} - -template -inline v8::Local New(v8::Persistent const& p) { - return v8::Local::New(p); -} - -template -inline v8::Local New(Persistent const& p) { - return v8::Local::New(p.persistent); -} - -template -inline v8::Local New(Global const& p) { - return v8::Local::New(p.persistent); -} - -#endif // NAN_IMPLEMENTATION_PRE_12_INL_H_ diff --git a/node_modules/nan/nan_maybe_43_inl.h b/node_modules/nan/nan_maybe_43_inl.h deleted file mode 100644 index a8b432d..0000000 --- a/node_modules/nan/nan_maybe_43_inl.h +++ /dev/null @@ -1,245 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_MAYBE_43_INL_H_ -#define NAN_MAYBE_43_INL_H_ - -template -using MaybeLocal = v8::MaybeLocal; - -template -using Maybe = v8::Maybe; - -template -inline Maybe Nothing() { - return v8::Nothing(); -} - -template -inline Maybe Just(const T& t) { - return v8::Just(t); -} - -v8::Local GetCurrentContext(); - -inline -MaybeLocal ToDetailString(v8::Local val) { - return val->ToDetailString(GetCurrentContext()); -} - -inline -MaybeLocal ToArrayIndex(v8::Local val) { - return val->ToArrayIndex(GetCurrentContext()); -} - -inline -Maybe Equals(v8::Local a, v8::Local(b)) { - return a->Equals(GetCurrentContext(), b); -} - -inline -MaybeLocal NewInstance(v8::Local h) { - return h->NewInstance(GetCurrentContext()); -} - -inline -MaybeLocal NewInstance( - v8::Local h - , int argc - , v8::Local argv[]) { - return h->NewInstance(GetCurrentContext(), argc, argv); -} - -inline -MaybeLocal NewInstance(v8::Local h) { - return h->NewInstance(GetCurrentContext()); -} - - -inline MaybeLocal GetFunction( - v8::Local t) { - return t->GetFunction(GetCurrentContext()); -} - -inline Maybe Set( - v8::Local obj - , v8::Local key - , v8::Local value) { - return obj->Set(GetCurrentContext(), key, value); -} - -inline Maybe Set( - v8::Local obj - , uint32_t index - , v8::Local value) { - return obj->Set(GetCurrentContext(), index, value); -} - -inline Maybe ForceSet( - v8::Local obj - , v8::Local key - , v8::Local value - , v8::PropertyAttribute attribs = v8::None) { - return obj->ForceSet(GetCurrentContext(), key, value, attribs); -} - -inline MaybeLocal Get( - v8::Local obj - , v8::Local key) { - return obj->Get(GetCurrentContext(), key); -} - -inline -MaybeLocal Get(v8::Local obj, uint32_t index) { - return obj->Get(GetCurrentContext(), index); -} - -inline v8::PropertyAttribute GetPropertyAttributes( - v8::Local obj - , v8::Local key) { - return obj->GetPropertyAttributes(GetCurrentContext(), key).FromJust(); -} - -inline Maybe Has( - v8::Local obj - , v8::Local key) { - return obj->Has(GetCurrentContext(), key); -} - -inline Maybe Has(v8::Local obj, uint32_t index) { - return obj->Has(GetCurrentContext(), index); -} - -inline Maybe Delete( - v8::Local obj - , v8::Local key) { - return obj->Delete(GetCurrentContext(), key); -} - -inline -Maybe Delete(v8::Local obj, uint32_t index) { - return obj->Delete(GetCurrentContext(), index); -} - -inline -MaybeLocal GetPropertyNames(v8::Local obj) { - return obj->GetPropertyNames(GetCurrentContext()); -} - -inline -MaybeLocal GetOwnPropertyNames(v8::Local obj) { - return obj->GetOwnPropertyNames(GetCurrentContext()); -} - -inline Maybe SetPrototype( - v8::Local obj - , v8::Local prototype) { - return obj->SetPrototype(GetCurrentContext(), prototype); -} - -inline MaybeLocal ObjectProtoToString( - v8::Local obj) { - return obj->ObjectProtoToString(GetCurrentContext()); -} - -inline Maybe HasOwnProperty( - v8::Local obj - , v8::Local key) { - return obj->HasOwnProperty(GetCurrentContext(), key); -} - -inline Maybe HasRealNamedProperty( - v8::Local obj - , v8::Local key) { - return obj->HasRealNamedProperty(GetCurrentContext(), key); -} - -inline Maybe HasRealIndexedProperty( - v8::Local obj - , uint32_t index) { - return obj->HasRealIndexedProperty(GetCurrentContext(), index); -} - -inline Maybe HasRealNamedCallbackProperty( - v8::Local obj - , v8::Local key) { - return obj->HasRealNamedCallbackProperty(GetCurrentContext(), key); -} - -inline MaybeLocal GetRealNamedPropertyInPrototypeChain( - v8::Local obj - , v8::Local key) { - return obj->GetRealNamedPropertyInPrototypeChain(GetCurrentContext(), key); -} - -inline MaybeLocal GetRealNamedProperty( - v8::Local obj - , v8::Local key) { - return obj->GetRealNamedProperty(GetCurrentContext(), key); -} - -inline MaybeLocal CallAsFunction( - v8::Local obj - , v8::Local recv - , int argc - , v8::Local argv[]) { - return obj->CallAsFunction(GetCurrentContext(), recv, argc, argv); -} - -inline MaybeLocal CallAsConstructor( - v8::Local obj - , int argc, v8::Local argv[]) { - return obj->CallAsConstructor(GetCurrentContext(), argc, argv); -} - -inline -MaybeLocal GetSourceLine(v8::Local msg) { - return msg->GetSourceLine(GetCurrentContext()); -} - -inline Maybe GetLineNumber(v8::Local msg) { - return msg->GetLineNumber(GetCurrentContext()); -} - -inline Maybe GetStartColumn(v8::Local msg) { - return msg->GetStartColumn(GetCurrentContext()); -} - -inline Maybe GetEndColumn(v8::Local msg) { - return msg->GetEndColumn(GetCurrentContext()); -} - -inline MaybeLocal CloneElementAt( - v8::Local array - , uint32_t index) { -#if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION) - v8::EscapableHandleScope handle_scope(v8::Isolate::GetCurrent()); - v8::Local context = GetCurrentContext(); - v8::Local elem; - if (!array->Get(context, index).ToLocal(&elem)) { - return MaybeLocal(); - } - v8::Local obj; - if (!elem->ToObject(context).ToLocal(&obj)) { - return MaybeLocal(); - } - return MaybeLocal(handle_scope.Escape(obj->Clone())); -#else - return array->CloneElementAt(GetCurrentContext(), index); -#endif -} - -inline MaybeLocal Call( - v8::Local fun - , v8::Local recv - , int argc - , v8::Local argv[]) { - return fun->Call(GetCurrentContext(), recv, argc, argv); -} - -#endif // NAN_MAYBE_43_INL_H_ diff --git a/node_modules/nan/nan_maybe_pre_43_inl.h b/node_modules/nan/nan_maybe_pre_43_inl.h deleted file mode 100644 index c538687..0000000 --- a/node_modules/nan/nan_maybe_pre_43_inl.h +++ /dev/null @@ -1,303 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_MAYBE_PRE_43_INL_H_ -#define NAN_MAYBE_PRE_43_INL_H_ - -template -class MaybeLocal { - public: - inline MaybeLocal() : val_(v8::Local()) {} - - template -# if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION - inline MaybeLocal(v8::Local that) : val_(that) {} -# else - inline MaybeLocal(v8::Local that) : - val_(*reinterpret_cast*>(&that)) {} -# endif - - inline bool IsEmpty() const { return val_.IsEmpty(); } - - template - inline bool ToLocal(v8::Local *out) const { - *out = val_; - return !IsEmpty(); - } - - inline v8::Local ToLocalChecked() const { -#if defined(V8_ENABLE_CHECKS) - assert(!IsEmpty() && "ToLocalChecked is Empty"); -#endif // V8_ENABLE_CHECKS - return val_; - } - - template - inline v8::Local FromMaybe(v8::Local default_value) const { - return IsEmpty() ? default_value : val_; - } - - private: - v8::Local val_; -}; - -template -class Maybe { - public: - inline bool IsNothing() const { return !has_value_; } - inline bool IsJust() const { return has_value_; } - - inline T FromJust() const { -#if defined(V8_ENABLE_CHECKS) - assert(IsJust() && "FromJust is Nothing"); -#endif // V8_ENABLE_CHECKS - return value_; - } - - inline T FromMaybe(const T& default_value) const { - return has_value_ ? value_ : default_value; - } - - inline bool operator==(const Maybe &other) const { - return (IsJust() == other.IsJust()) && - (!IsJust() || FromJust() == other.FromJust()); - } - - inline bool operator!=(const Maybe &other) const { - return !operator==(other); - } - - private: - Maybe() : has_value_(false) {} - explicit Maybe(const T& t) : has_value_(true), value_(t) {} - bool has_value_; - T value_; - - template - friend Maybe Nothing(); - template - friend Maybe Just(const U& u); -}; - -template -inline Maybe Nothing() { - return Maybe(); -} - -template -inline Maybe Just(const T& t) { - return Maybe(t); -} - -inline -MaybeLocal ToDetailString(v8::Handle val) { - return MaybeLocal(val->ToDetailString()); -} - -inline -MaybeLocal ToArrayIndex(v8::Handle val) { - return MaybeLocal(val->ToArrayIndex()); -} - -inline -Maybe Equals(v8::Handle a, v8::Handle(b)) { - return Just(a->Equals(b)); -} - -inline -MaybeLocal NewInstance(v8::Handle h) { - return MaybeLocal(h->NewInstance()); -} - -inline -MaybeLocal NewInstance( - v8::Local h - , int argc - , v8::Local argv[]) { - return MaybeLocal(h->NewInstance(argc, argv)); -} - -inline -MaybeLocal NewInstance(v8::Handle h) { - return MaybeLocal(h->NewInstance()); -} - -inline -MaybeLocal GetFunction(v8::Handle t) { - return MaybeLocal(t->GetFunction()); -} - -inline Maybe Set( - v8::Handle obj - , v8::Handle key - , v8::Handle value) { - return Just(obj->Set(key, value)); -} - -inline Maybe Set( - v8::Handle obj - , uint32_t index - , v8::Handle value) { - return Just(obj->Set(index, value)); -} - -inline Maybe ForceSet( - v8::Handle obj - , v8::Handle key - , v8::Handle value - , v8::PropertyAttribute attribs = v8::None) { - return Just(obj->ForceSet(key, value, attribs)); -} - -inline MaybeLocal Get( - v8::Handle obj - , v8::Handle key) { - return MaybeLocal(obj->Get(key)); -} - -inline MaybeLocal Get( - v8::Handle obj - , uint32_t index) { - return MaybeLocal(obj->Get(index)); -} - -inline Maybe GetPropertyAttributes( - v8::Handle obj - , v8::Handle key) { - return Just(obj->GetPropertyAttributes(key)); -} - -inline Maybe Has( - v8::Handle obj - , v8::Handle key) { - return Just(obj->Has(key)); -} - -inline Maybe Has( - v8::Handle obj - , uint32_t index) { - return Just(obj->Has(index)); -} - -inline Maybe Delete( - v8::Handle obj - , v8::Handle key) { - return Just(obj->Delete(key)); -} - -inline Maybe Delete( - v8::Handle obj - , uint32_t index) { - return Just(obj->Delete(index)); -} - -inline -MaybeLocal GetPropertyNames(v8::Handle obj) { - return MaybeLocal(obj->GetPropertyNames()); -} - -inline -MaybeLocal GetOwnPropertyNames(v8::Handle obj) { - return MaybeLocal(obj->GetOwnPropertyNames()); -} - -inline Maybe SetPrototype( - v8::Handle obj - , v8::Handle prototype) { - return Just(obj->SetPrototype(prototype)); -} - -inline MaybeLocal ObjectProtoToString( - v8::Handle obj) { - return MaybeLocal(obj->ObjectProtoToString()); -} - -inline Maybe HasOwnProperty( - v8::Handle obj - , v8::Handle key) { - return Just(obj->HasOwnProperty(key)); -} - -inline Maybe HasRealNamedProperty( - v8::Handle obj - , v8::Handle key) { - return Just(obj->HasRealNamedProperty(key)); -} - -inline Maybe HasRealIndexedProperty( - v8::Handle obj - , uint32_t index) { - return Just(obj->HasRealIndexedProperty(index)); -} - -inline Maybe HasRealNamedCallbackProperty( - v8::Handle obj - , v8::Handle key) { - return Just(obj->HasRealNamedCallbackProperty(key)); -} - -inline MaybeLocal GetRealNamedPropertyInPrototypeChain( - v8::Handle obj - , v8::Handle key) { - return MaybeLocal( - obj->GetRealNamedPropertyInPrototypeChain(key)); -} - -inline MaybeLocal GetRealNamedProperty( - v8::Handle obj - , v8::Handle key) { - return MaybeLocal(obj->GetRealNamedProperty(key)); -} - -inline MaybeLocal CallAsFunction( - v8::Handle obj - , v8::Handle recv - , int argc - , v8::Handle argv[]) { - return MaybeLocal(obj->CallAsFunction(recv, argc, argv)); -} - -inline MaybeLocal CallAsConstructor( - v8::Handle obj - , int argc - , v8::Local argv[]) { - return MaybeLocal(obj->CallAsConstructor(argc, argv)); -} - -inline -MaybeLocal GetSourceLine(v8::Handle msg) { - return MaybeLocal(msg->GetSourceLine()); -} - -inline Maybe GetLineNumber(v8::Handle msg) { - return Just(msg->GetLineNumber()); -} - -inline Maybe GetStartColumn(v8::Handle msg) { - return Just(msg->GetStartColumn()); -} - -inline Maybe GetEndColumn(v8::Handle msg) { - return Just(msg->GetEndColumn()); -} - -inline MaybeLocal CloneElementAt( - v8::Handle array - , uint32_t index) { - return MaybeLocal(array->CloneElementAt(index)); -} - -inline MaybeLocal Call( - v8::Local fun - , v8::Local recv - , int argc - , v8::Local argv[]) { - return MaybeLocal(fun->Call(recv, argc, argv)); -} - -#endif // NAN_MAYBE_PRE_43_INL_H_ diff --git a/node_modules/nan/nan_new.h b/node_modules/nan/nan_new.h deleted file mode 100644 index 6c7d19f..0000000 --- a/node_modules/nan/nan_new.h +++ /dev/null @@ -1,340 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_NEW_H_ -#define NAN_NEW_H_ - -namespace imp { // scnr - -// TODO(agnat): Generalize -template v8::Local To(v8::Local i); - -template <> -inline -v8::Local -To(v8::Local i) { - return Nan::To(i).ToLocalChecked(); -} - -template <> -inline -v8::Local -To(v8::Local i) { - return Nan::To(i).ToLocalChecked(); -} - -template <> -inline -v8::Local -To(v8::Local i) { - return Nan::To(i).ToLocalChecked(); -} - -template struct FactoryBase { - typedef v8::Local return_t; -}; - -template struct MaybeFactoryBase { - typedef MaybeLocal return_t; -}; - -template struct Factory; - -template <> -struct Factory : FactoryBase { - static inline return_t New(); - static inline return_t New(int length); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(bool value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(bool value); -}; - -template <> -struct Factory : FactoryBase { - static inline - return_t - New( v8::ExtensionConfiguration* extensions = NULL - , v8::Local tmpl = v8::Local() - , v8::Local obj = v8::Local()); -}; - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New(double value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(void *value); -}; - -template <> -struct Factory : FactoryBase { - static inline - return_t - New( FunctionCallback callback - , v8::Local data = v8::Local()); -}; - -template <> -struct Factory : FactoryBase { - static inline - return_t - New( FunctionCallback callback = NULL - , v8::Local data = v8::Local() - , v8::Local signature = v8::Local()); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(double value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(double value); -}; - -template -struct IntegerFactory : FactoryBase { - typedef typename FactoryBase::return_t return_t; - static inline return_t New(int32_t value); - static inline return_t New(uint32_t value); -}; - -template <> -struct Factory : IntegerFactory {}; - -template <> -struct Factory : IntegerFactory {}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(int32_t value); - static inline return_t New(uint32_t value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(); -}; - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New( - v8::Local pattern, v8::RegExp::Flags flags); -}; - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New( v8::Local source); - static inline return_t New( v8::Local source - , v8::ScriptOrigin const& origin); -}; - -template <> -struct Factory : FactoryBase { - typedef v8::Local FTH; - static inline return_t New(FTH receiver = FTH()); -}; - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New(); - static inline return_t New(const char *value, int length = -1); - static inline return_t New(const uint16_t *value, int length = -1); - static inline return_t New(std::string const& value); - - static inline return_t New(v8::String::ExternalStringResource * value); - static inline return_t New(ExternalOneByteStringResource * value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(v8::Local value); -}; - -} // end of namespace imp - -#if (NODE_MODULE_VERSION >= 12) - -namespace imp { - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New( v8::Local source); - static inline return_t New( v8::Local source - , v8::ScriptOrigin const& origin); -}; - -} // end of namespace imp - -# include "nan_implementation_12_inl.h" - -#else // NODE_MODULE_VERSION >= 12 - -# include "nan_implementation_pre_12_inl.h" - -#endif - -//=== API ====================================================================== - -template -typename imp::Factory::return_t -New() { - return imp::Factory::New(); -} - -template -typename imp::Factory::return_t -New(A0 arg0) { - return imp::Factory::New(arg0); -} - -template -typename imp::Factory::return_t -New(A0 arg0, A1 arg1) { - return imp::Factory::New(arg0, arg1); -} - -template -typename imp::Factory::return_t -New(A0 arg0, A1 arg1, A2 arg2) { - return imp::Factory::New(arg0, arg1, arg2); -} - -template -typename imp::Factory::return_t -New(A0 arg0, A1 arg1, A2 arg2, A3 arg3) { - return imp::Factory::New(arg0, arg1, arg2, arg3); -} - -// Note(agnat): When passing overloaded function pointers to template functions -// as generic arguments the compiler needs help in picking the right overload. -// These two functions handle New and New with -// all argument variations. - -// v8::Function and v8::FunctionTemplate with one or two arguments -template -typename imp::Factory::return_t -New( FunctionCallback callback - , v8::Local data = v8::Local()) { - return imp::Factory::New(callback, data); -} - -// v8::Function and v8::FunctionTemplate with three arguments -template -typename imp::Factory::return_t -New( FunctionCallback callback - , v8::Local data = v8::Local() - , A2 a2 = A2()) { - return imp::Factory::New(callback, data, a2); -} - -// Convenience - -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION -template inline v8::Local New(v8::Handle h); -#endif - -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -template - inline v8::Local New(v8::Persistent const& p); -#else -template inline v8::Local New(v8::Persistent const& p); -#endif -template -inline v8::Local New(Persistent const& p); -template -inline v8::Local New(Global const& p); - -inline -imp::Factory::return_t -New(bool value) { - return New(value); -} - -inline -imp::Factory::return_t -New(int32_t value) { - return New(value); -} - -inline -imp::Factory::return_t -New(uint32_t value) { - return New(value); -} - -inline -imp::Factory::return_t -New(double value) { - return New(value); -} - -inline -imp::Factory::return_t -New(std::string const& value) { // NOLINT(build/include_what_you_use) - return New(value); -} - -inline -imp::Factory::return_t -New(const char * value, int length) { - return New(value, length); -} - -inline -imp::Factory::return_t -New(const uint16_t * value, int length) { - return New(value, length); -} - -inline -imp::Factory::return_t -New(const char * value) { - return New(value); -} - -inline -imp::Factory::return_t -New(const uint16_t * value) { - return New(value); -} - -inline -imp::Factory::return_t -New(v8::String::ExternalStringResource * value) { - return New(value); -} - -inline -imp::Factory::return_t -New(ExternalOneByteStringResource * value) { - return New(value); -} - -inline -imp::Factory::return_t -New(v8::Local pattern, v8::RegExp::Flags flags) { - return New(pattern, flags); -} - -#endif // NAN_NEW_H_ diff --git a/node_modules/nan/nan_object_wrap.h b/node_modules/nan/nan_object_wrap.h deleted file mode 100644 index f1cc156..0000000 --- a/node_modules/nan/nan_object_wrap.h +++ /dev/null @@ -1,155 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_OBJECT_WRAP_H_ -#define NAN_OBJECT_WRAP_H_ - -class ObjectWrap { - public: - ObjectWrap() { - refs_ = 0; - } - - - virtual ~ObjectWrap() { - if (persistent().IsEmpty()) { - return; - } - - assert(persistent().IsNearDeath()); - persistent().ClearWeak(); - persistent().Reset(); - } - - - template - static inline T* Unwrap(v8::Local object) { - assert(!object.IsEmpty()); - assert(object->InternalFieldCount() > 0); - // Cast to ObjectWrap before casting to T. A direct cast from void - // to T won't work right when T has more than one base class. - void* ptr = GetInternalFieldPointer(object, 0); - ObjectWrap* wrap = static_cast(ptr); - return static_cast(wrap); - } - - - inline v8::Local handle() const { - return New(handle_); - } - - - inline Persistent& persistent() { - return handle_; - } - - - protected: - inline void Wrap(v8::Local object) { - assert(persistent().IsEmpty()); - assert(object->InternalFieldCount() > 0); - SetInternalFieldPointer(object, 0, this); - persistent().Reset(object); - MakeWeak(); - } - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - - inline void MakeWeak() { - persistent().v8::PersistentBase::SetWeak( - this, WeakCallback, v8::WeakCallbackType::kParameter); - persistent().MarkIndependent(); - } - -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - - inline void MakeWeak() { - persistent().v8::PersistentBase::SetWeak(this, WeakCallback); - persistent().MarkIndependent(); - } - -#else - - inline void MakeWeak() { - persistent().persistent.MakeWeak(this, WeakCallback); - persistent().MarkIndependent(); - } - -#endif - - /* Ref() marks the object as being attached to an event loop. - * Refed objects will not be garbage collected, even if - * all references are lost. - */ - virtual void Ref() { - assert(!persistent().IsEmpty()); - persistent().ClearWeak(); - refs_++; - } - - /* Unref() marks an object as detached from the event loop. This is its - * default state. When an object with a "weak" reference changes from - * attached to detached state it will be freed. Be careful not to access - * the object after making this call as it might be gone! - * (A "weak reference" means an object that only has a - * persistant handle.) - * - * DO NOT CALL THIS FROM DESTRUCTOR - */ - virtual void Unref() { - assert(!persistent().IsEmpty()); - assert(!persistent().IsWeak()); - assert(refs_ > 0); - if (--refs_ == 0) - MakeWeak(); - } - - int refs_; // ro - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(ObjectWrap) -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - - static void - WeakCallback(v8::WeakCallbackInfo const& info) { - ObjectWrap* wrap = info.GetParameter(); - assert(wrap->refs_ == 0); - assert(wrap->handle_.IsNearDeath()); - wrap->handle_.Reset(); - delete wrap; - } - -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - - static void - WeakCallback(v8::WeakCallbackData const& data) { - ObjectWrap* wrap = data.GetParameter(); - assert(wrap->refs_ == 0); - assert(wrap->handle_.IsNearDeath()); - wrap->handle_.Reset(); - delete wrap; - } - -#else - - static void WeakCallback(v8::Persistent value, void *data) { - ObjectWrap *wrap = static_cast(data); - assert(wrap->refs_ == 0); - assert(wrap->handle_.IsNearDeath()); - wrap->handle_.Reset(); - delete wrap; - } - -#endif - Persistent handle_; -}; - - -#endif // NAN_OBJECT_WRAP_H_ diff --git a/node_modules/nan/nan_persistent_12_inl.h b/node_modules/nan/nan_persistent_12_inl.h deleted file mode 100644 index eb4ff10..0000000 --- a/node_modules/nan/nan_persistent_12_inl.h +++ /dev/null @@ -1,129 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_PERSISTENT_12_INL_H_ -#define NAN_PERSISTENT_12_INL_H_ - -template class Persistent : - public v8::Persistent { - public: - inline Persistent() : v8::Persistent() {} - - template inline Persistent(v8::Local that) : - v8::Persistent(v8::Isolate::GetCurrent(), that) {} - - template - inline Persistent(const v8::Persistent &that) : - v8::Persistent(v8::Isolate::GetCurrent(), that) {} - - inline void Reset() { v8::PersistentBase::Reset(); } - - template - inline void Reset(const v8::Local &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void Reset(const v8::PersistentBase &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type); - - private: - inline T *operator*() const { return *PersistentBase::persistent; } - - template - inline void Copy(const Persistent &that) { - TYPE_CHECK(T, S); - - this->Reset(); - - if (!that.IsEmpty()) { - this->Reset(that); - M::Copy(that, this); - } - } -}; - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -template -class Global : public v8::Global { - public: - inline Global() : v8::Global() {} - - template inline Global(v8::Local that) : - v8::Global(v8::Isolate::GetCurrent(), that) {} - - template - inline Global(const v8::PersistentBase &that) : - v8::Global(v8::Isolate::GetCurrent(), that) {} - - inline void Reset() { v8::PersistentBase::Reset(); } - - template - inline void Reset(const v8::Local &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void Reset(const v8::PersistentBase &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type) { - reinterpret_cast*>(this)->SetWeak( - parameter, callback, type); - } -}; -#else -template -class Global : public v8::UniquePersistent { - public: - inline Global() : v8::UniquePersistent() {} - - template inline Global(v8::Local that) : - v8::UniquePersistent(v8::Isolate::GetCurrent(), that) {} - - template - inline Global(const v8::PersistentBase &that) : - v8::UniquePersistent(v8::Isolate::GetCurrent(), that) {} - - inline void Reset() { v8::PersistentBase::Reset(); } - - template - inline void Reset(const v8::Local &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void Reset(const v8::PersistentBase &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type) { - reinterpret_cast*>(this)->SetWeak( - parameter, callback, type); - } -}; -#endif - -#endif // NAN_PERSISTENT_12_INL_H_ diff --git a/node_modules/nan/nan_persistent_pre_12_inl.h b/node_modules/nan/nan_persistent_pre_12_inl.h deleted file mode 100644 index 0d427ed..0000000 --- a/node_modules/nan/nan_persistent_pre_12_inl.h +++ /dev/null @@ -1,242 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_PERSISTENT_PRE_12_INL_H_ -#define NAN_PERSISTENT_PRE_12_INL_H_ - -template -class PersistentBase { - v8::Persistent persistent; - template - friend v8::Local New(const PersistentBase &p); - template - friend v8::Local New(const Persistent &p); - template - friend v8::Local New(const Global &p); - template friend class ReturnValue; - - public: - inline PersistentBase() : - persistent() {} - - inline void Reset() { - persistent.Dispose(); - persistent.Clear(); - } - - template - inline void Reset(const v8::Local &other) { - TYPE_CHECK(T, S); - - if (!persistent.IsEmpty()) { - persistent.Dispose(); - } - - if (other.IsEmpty()) { - persistent.Clear(); - } else { - persistent = v8::Persistent::New(other); - } - } - - template - inline void Reset(const PersistentBase &other) { - TYPE_CHECK(T, S); - - if (!persistent.IsEmpty()) { - persistent.Dispose(); - } - - if (other.IsEmpty()) { - persistent.Clear(); - } else { - persistent = v8::Persistent::New(other.persistent); - } - } - - inline bool IsEmpty() const { return persistent.IsEmpty(); } - - inline void Empty() { persistent.Clear(); } - - template - inline bool operator==(const PersistentBase &that) const { - return this->persistent == that.persistent; - } - - template - inline bool operator==(const v8::Local &that) const { - return this->persistent == that; - } - - template - inline bool operator!=(const PersistentBase &that) const { - return !operator==(that); - } - - template - inline bool operator!=(const v8::Local &that) const { - return !operator==(that); - } - - template - inline void SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type); - - inline void ClearWeak() { persistent.ClearWeak(); } - - inline void MarkIndependent() { persistent.MarkIndependent(); } - - inline bool IsIndependent() const { return persistent.IsIndependent(); } - - inline bool IsNearDeath() const { return persistent.IsNearDeath(); } - - inline bool IsWeak() const { return persistent.IsWeak(); } - - private: - inline explicit PersistentBase(v8::Persistent that) : - persistent(that) { } - inline explicit PersistentBase(T *val) : persistent(val) {} - template friend class Persistent; - template friend class Global; - friend class ObjectWrap; -}; - -template -class NonCopyablePersistentTraits { - public: - typedef Persistent > - NonCopyablePersistent; - static const bool kResetInDestructor = false; - template - inline static void Copy(const Persistent &source, - NonCopyablePersistent *dest) { - Uncompilable(); - } - - template inline static void Uncompilable() { - TYPE_CHECK(O, v8::Primitive); - } -}; - -template -struct CopyablePersistentTraits { - typedef Persistent > CopyablePersistent; - static const bool kResetInDestructor = true; - template - static inline void Copy(const Persistent &source, - CopyablePersistent *dest) {} -}; - -template class Persistent : - public PersistentBase { - public: - inline Persistent() {} - - template inline Persistent(v8::Handle that) - : PersistentBase(v8::Persistent::New(that)) { - TYPE_CHECK(T, S); - } - - inline Persistent(const Persistent &that) : PersistentBase() { - Copy(that); - } - - template - inline Persistent(const Persistent &that) : - PersistentBase() { - Copy(that); - } - - inline Persistent &operator=(const Persistent &that) { - Copy(that); - return *this; - } - - template - inline Persistent &operator=(const Persistent &that) { - Copy(that); - return *this; - } - - inline ~Persistent() { - if (M::kResetInDestructor) this->Reset(); - } - - private: - inline T *operator*() const { return *PersistentBase::persistent; } - - template - inline void Copy(const Persistent &that) { - TYPE_CHECK(T, S); - - this->Reset(); - - if (!that.IsEmpty()) { - this->persistent = v8::Persistent::New(that.persistent); - M::Copy(that, this); - } - } -}; - -template -class Global : public PersistentBase { - struct RValue { - inline explicit RValue(Global* obj) : object(obj) {} - Global* object; - }; - - public: - inline Global() : PersistentBase(0) { } - - template - inline Global(v8::Local that) - : PersistentBase(v8::Persistent::New(that)) { - TYPE_CHECK(T, S); - } - - template - inline Global(const PersistentBase &that) - : PersistentBase(that) { - TYPE_CHECK(T, S); - } - /** - * Move constructor. - */ - inline Global(RValue rvalue) - : PersistentBase(rvalue.object->persistent) { - rvalue.object->Reset(); - } - inline ~Global() { this->Reset(); } - /** - * Move via assignment. - */ - template - inline Global &operator=(Global rhs) { - TYPE_CHECK(T, S); - this->Reset(rhs.persistent); - rhs.Reset(); - return *this; - } - /** - * Cast operator for moves. - */ - inline operator RValue() { return RValue(this); } - /** - * Pass allows returning uniques from functions, etc. - */ - Global Pass() { return Global(RValue(this)); } - - private: - Global(Global &); - void operator=(Global &); - template friend class ReturnValue; -}; - -#endif // NAN_PERSISTENT_PRE_12_INL_H_ diff --git a/node_modules/nan/nan_string_bytes.h b/node_modules/nan/nan_string_bytes.h deleted file mode 100644 index a2e6437..0000000 --- a/node_modules/nan/nan_string_bytes.h +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -#ifndef NAN_STRING_BYTES_H_ -#define NAN_STRING_BYTES_H_ - -// Decodes a v8::Local or Buffer to a raw char* - -namespace imp { - -using v8::Local; -using v8::Object; -using v8::String; -using v8::Value; - - -//// Base 64 //// - -#define base64_encoded_size(size) ((size + 2 - ((size + 2) % 3)) / 3 * 4) - - - -//// HEX //// - -static bool contains_non_ascii_slow(const char* buf, size_t len) { - for (size_t i = 0; i < len; ++i) { - if (buf[i] & 0x80) return true; - } - return false; -} - - -static bool contains_non_ascii(const char* src, size_t len) { - if (len < 16) { - return contains_non_ascii_slow(src, len); - } - - const unsigned bytes_per_word = sizeof(void*); - const unsigned align_mask = bytes_per_word - 1; - const unsigned unaligned = reinterpret_cast(src) & align_mask; - - if (unaligned > 0) { - const unsigned n = bytes_per_word - unaligned; - if (contains_non_ascii_slow(src, n)) return true; - src += n; - len -= n; - } - - -#if defined(__x86_64__) || defined(_WIN64) - const uintptr_t mask = 0x8080808080808080ll; -#else - const uintptr_t mask = 0x80808080l; -#endif - - const uintptr_t* srcw = reinterpret_cast(src); - - for (size_t i = 0, n = len / bytes_per_word; i < n; ++i) { - if (srcw[i] & mask) return true; - } - - const unsigned remainder = len & align_mask; - if (remainder > 0) { - const size_t offset = len - remainder; - if (contains_non_ascii_slow(src + offset, remainder)) return true; - } - - return false; -} - - -static void force_ascii_slow(const char* src, char* dst, size_t len) { - for (size_t i = 0; i < len; ++i) { - dst[i] = src[i] & 0x7f; - } -} - - -static void force_ascii(const char* src, char* dst, size_t len) { - if (len < 16) { - force_ascii_slow(src, dst, len); - return; - } - - const unsigned bytes_per_word = sizeof(void*); - const unsigned align_mask = bytes_per_word - 1; - const unsigned src_unalign = reinterpret_cast(src) & align_mask; - const unsigned dst_unalign = reinterpret_cast(dst) & align_mask; - - if (src_unalign > 0) { - if (src_unalign == dst_unalign) { - const unsigned unalign = bytes_per_word - src_unalign; - force_ascii_slow(src, dst, unalign); - src += unalign; - dst += unalign; - len -= src_unalign; - } else { - force_ascii_slow(src, dst, len); - return; - } - } - -#if defined(__x86_64__) || defined(_WIN64) - const uintptr_t mask = ~0x8080808080808080ll; -#else - const uintptr_t mask = ~0x80808080l; -#endif - - const uintptr_t* srcw = reinterpret_cast(src); - uintptr_t* dstw = reinterpret_cast(dst); - - for (size_t i = 0, n = len / bytes_per_word; i < n; ++i) { - dstw[i] = srcw[i] & mask; - } - - const unsigned remainder = len & align_mask; - if (remainder > 0) { - const size_t offset = len - remainder; - force_ascii_slow(src + offset, dst + offset, remainder); - } -} - - -static size_t base64_encode(const char* src, - size_t slen, - char* dst, - size_t dlen) { - // We know how much we'll write, just make sure that there's space. - assert(dlen >= base64_encoded_size(slen) && - "not enough space provided for base64 encode"); - - dlen = base64_encoded_size(slen); - - unsigned a; - unsigned b; - unsigned c; - unsigned i; - unsigned k; - unsigned n; - - static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789+/"; - - i = 0; - k = 0; - n = slen / 3 * 3; - - while (i < n) { - a = src[i + 0] & 0xff; - b = src[i + 1] & 0xff; - c = src[i + 2] & 0xff; - - dst[k + 0] = table[a >> 2]; - dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; - dst[k + 2] = table[((b & 0x0f) << 2) | (c >> 6)]; - dst[k + 3] = table[c & 0x3f]; - - i += 3; - k += 4; - } - - if (n != slen) { - switch (slen - n) { - case 1: - a = src[i + 0] & 0xff; - dst[k + 0] = table[a >> 2]; - dst[k + 1] = table[(a & 3) << 4]; - dst[k + 2] = '='; - dst[k + 3] = '='; - break; - - case 2: - a = src[i + 0] & 0xff; - b = src[i + 1] & 0xff; - dst[k + 0] = table[a >> 2]; - dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; - dst[k + 2] = table[(b & 0x0f) << 2]; - dst[k + 3] = '='; - break; - } - } - - return dlen; -} - - -static size_t hex_encode(const char* src, size_t slen, char* dst, size_t dlen) { - // We know how much we'll write, just make sure that there's space. - assert(dlen >= slen * 2 && - "not enough space provided for hex encode"); - - dlen = slen * 2; - for (uint32_t i = 0, k = 0; k < dlen; i += 1, k += 2) { - static const char hex[] = "0123456789abcdef"; - uint8_t val = static_cast(src[i]); - dst[k + 0] = hex[val >> 4]; - dst[k + 1] = hex[val & 15]; - } - - return dlen; -} - - - -static Local Encode(const char* buf, - size_t buflen, - enum Encoding encoding) { - assert(buflen <= node::Buffer::kMaxLength); - if (!buflen && encoding != BUFFER) - return New("").ToLocalChecked(); - - Local val; - switch (encoding) { - case BUFFER: - return CopyBuffer(buf, buflen).ToLocalChecked(); - - case ASCII: - if (contains_non_ascii(buf, buflen)) { - char* out = new char[buflen]; - force_ascii(buf, out, buflen); - val = New(out, buflen).ToLocalChecked(); - delete[] out; - } else { - val = New(buf, buflen).ToLocalChecked(); - } - break; - - case UTF8: - val = New(buf, buflen).ToLocalChecked(); - break; - - case BINARY: { - // TODO(isaacs) use ExternalTwoByteString? - const unsigned char *cbuf = reinterpret_cast(buf); - uint16_t * twobytebuf = new uint16_t[buflen]; - for (size_t i = 0; i < buflen; i++) { - // XXX is the following line platform independent? - twobytebuf[i] = cbuf[i]; - } - val = New(twobytebuf, buflen).ToLocalChecked(); - delete[] twobytebuf; - break; - } - - case BASE64: { - size_t dlen = base64_encoded_size(buflen); - char* dst = new char[dlen]; - - size_t written = base64_encode(buf, buflen, dst, dlen); - assert(written == dlen); - - val = New(dst, dlen).ToLocalChecked(); - delete[] dst; - break; - } - - case UCS2: { - const uint16_t* data = reinterpret_cast(buf); - val = New(data, buflen / 2).ToLocalChecked(); - break; - } - - case HEX: { - size_t dlen = buflen * 2; - char* dst = new char[dlen]; - size_t written = hex_encode(buf, buflen, dst, dlen); - assert(written == dlen); - - val = New(dst, dlen).ToLocalChecked(); - delete[] dst; - break; - } - - default: - assert(0 && "unknown encoding"); - break; - } - - return val; -} - -#undef base64_encoded_size - -} // end of namespace imp - -#endif // NAN_STRING_BYTES_H_ diff --git a/node_modules/nan/nan_typedarray_contents.h b/node_modules/nan/nan_typedarray_contents.h deleted file mode 100644 index b715961..0000000 --- a/node_modules/nan/nan_typedarray_contents.h +++ /dev/null @@ -1,87 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_TYPEDARRAY_CONTENTS_H_ -#define NAN_TYPEDARRAY_CONTENTS_H_ - -template -class TypedArrayContents { - public: - inline explicit TypedArrayContents(v8::Local from) : - length_(0), data_(NULL) { - - size_t length = 0; - void* data = NULL; - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - - if (from->IsArrayBufferView()) { - v8::Local array = - v8::Local::Cast(from); - - const size_t byte_length = array->ByteLength(); - const ptrdiff_t byte_offset = array->ByteOffset(); - v8::Local buffer = array->Buffer(); - - length = byte_length / sizeof(T); - data = static_cast(buffer->GetContents().Data()) + byte_offset; - } - -#else - - if (from->IsObject() && !from->IsNull()) { - v8::Local array = v8::Local::Cast(from); - - MaybeLocal buffer = Get(array, - New("buffer").ToLocalChecked()); - MaybeLocal byte_length = Get(array, - New("byteLength").ToLocalChecked()); - MaybeLocal byte_offset = Get(array, - New("byteOffset").ToLocalChecked()); - - if (!buffer.IsEmpty() && - !byte_length.IsEmpty() && byte_length.ToLocalChecked()->IsUint32() && - !byte_offset.IsEmpty() && byte_offset.ToLocalChecked()->IsUint32()) { - data = array->GetIndexedPropertiesExternalArrayData(); - if(data) { - length = byte_length.ToLocalChecked()->Uint32Value() / sizeof(T); - } - } - } - -#endif - -#if defined(_MSC_VER) && _MSC_VER >= 1900 || __cplusplus >= 201103L - assert(reinterpret_cast(data) % alignof (T) == 0); -#elif defined(_MSC_VER) && _MSC_VER >= 1600 || defined(__GNUC__) - assert(reinterpret_cast(data) % __alignof(T) == 0); -#else - assert(reinterpret_cast(data) % sizeof (T) == 0); -#endif - - length_ = length; - data_ = static_cast(data); - } - - inline size_t length() const { return length_; } - inline T* operator*() { return data_; } - inline const T* operator*() const { return data_; } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(TypedArrayContents) - - //Disable heap allocation - void *operator new(size_t size); - void operator delete(void *, size_t); - - size_t length_; - T* data_; -}; - -#endif // NAN_TYPEDARRAY_CONTENTS_H_ diff --git a/node_modules/nan/nan_weak.h b/node_modules/nan/nan_weak.h deleted file mode 100644 index 93f6fe8..0000000 --- a/node_modules/nan/nan_weak.h +++ /dev/null @@ -1,432 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_WEAK_H_ -#define NAN_WEAK_H_ - -static const int kInternalFieldsInWeakCallback = 2; -static const int kNoInternalFieldIndex = -1; - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ - v8::WeakCallbackInfo > const& -# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -#elif NODE_MODULE_VERSION > IOJS_1_1_MODULE_VERSION -# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ - v8::PhantomCallbackData > const& -# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -#elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION -# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ - v8::PhantomCallbackData > const& -# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ - v8::InternalFieldsCallbackData, void> const& -# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -# define NAN_WEAK_CALLBACK_DATA_TYPE_ \ - v8::WeakCallbackData > const& -# define NAN_WEAK_CALLBACK_SIG_ NAN_WEAK_CALLBACK_DATA_TYPE_ -#else -# define NAN_WEAK_CALLBACK_DATA_TYPE_ void * -# define NAN_WEAK_CALLBACK_SIG_ \ - v8::Persistent, NAN_WEAK_CALLBACK_DATA_TYPE_ -#endif - -template -class WeakCallbackInfo { - public: - typedef void (*Callback)(const WeakCallbackInfo& data); - WeakCallbackInfo( - Persistent *persistent - , Callback callback - , void *parameter - , void *field1 = 0 - , void *field2 = 0) : - callback_(callback), isolate_(0), parameter_(parameter) { - std::memcpy(&persistent_, persistent, sizeof (v8::Persistent)); - internal_fields_[0] = field1; - internal_fields_[1] = field2; - } - inline v8::Isolate *GetIsolate() const { return isolate_; } - inline T *GetParameter() const { return static_cast(parameter_); } - inline void *GetInternalField(int index) const { - assert((index == 0 || index == 1) && "internal field index out of bounds"); - if (index == 0) { - return internal_fields_[0]; - } else { - return internal_fields_[1]; - } - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(WeakCallbackInfo) - Callback callback_; - v8::Isolate *isolate_; - void *parameter_; - void *internal_fields_[kInternalFieldsInWeakCallback]; - v8::Persistent persistent_; - template friend class Persistent; - template friend class PersistentBase; -#if NODE_MODULE_VERSION <= NODE_0_12_MODULE_VERSION -# if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - template - static void invoke(NAN_WEAK_CALLBACK_SIG_ data); - template - static WeakCallbackInfo *unwrap(NAN_WEAK_CALLBACK_DATA_TYPE_ data); -# else - static void invoke(NAN_WEAK_CALLBACK_SIG_ data); - static WeakCallbackInfo *unwrap(NAN_WEAK_CALLBACK_DATA_TYPE_ data); -# endif -#else -# if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - template - static void invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data); - template - static void invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data); -# else - static void invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data); - static void invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data); -# endif - static WeakCallbackInfo *unwrapparameter( - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data); - static WeakCallbackInfo *unwraptwofield( - NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data); -#endif -}; - - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - -template -template -void -WeakCallbackInfo::invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwrapparameter(data); - if (isFirstPass) { - cbinfo->persistent_.Reset(); - data.SetSecondPassCallback(invokeparameter); - } else { - cbinfo->callback_(*cbinfo); - delete cbinfo; - } -} - -template -template -void -WeakCallbackInfo::invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwraptwofield(data); - if (isFirstPass) { - cbinfo->persistent_.Reset(); - data.SetSecondPassCallback(invoketwofield); - } else { - cbinfo->callback_(*cbinfo); - delete cbinfo; - } -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwrapparameter( - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data.GetParameter()); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwraptwofield( - NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data.GetInternalField(0)); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -#undef NAN_WEAK_PARAMETER_CALLBACK_SIG_ -#undef NAN_WEAK_TWOFIELD_CALLBACK_SIG_ -#undef NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -#undef NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -# elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION - -template -void -WeakCallbackInfo::invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwrapparameter(data); - cbinfo->persistent_.Reset(); - cbinfo->callback_(*cbinfo); - delete cbinfo; -} - -template -void -WeakCallbackInfo::invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwraptwofield(data); - cbinfo->persistent_.Reset(); - cbinfo->callback_(*cbinfo); - delete cbinfo; -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwrapparameter( - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data.GetParameter()); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwraptwofield( - NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data.GetInternalField1()); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -#undef NAN_WEAK_PARAMETER_CALLBACK_SIG_ -#undef NAN_WEAK_TWOFIELD_CALLBACK_SIG_ -#undef NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -#undef NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - -template -template -void WeakCallbackInfo::invoke(NAN_WEAK_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwrap(data); - cbinfo->persistent_.Reset(); - cbinfo->callback_(*cbinfo); - delete cbinfo; -} - -template -template -WeakCallbackInfo *WeakCallbackInfo::unwrap( - NAN_WEAK_CALLBACK_DATA_TYPE_ data) { - void *parameter = data.GetParameter(); - WeakCallbackInfo *cbinfo = - static_cast*>(parameter); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -#undef NAN_WEAK_CALLBACK_SIG_ -#undef NAN_WEAK_CALLBACK_DATA_TYPE_ -#else - -template -void WeakCallbackInfo::invoke(NAN_WEAK_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwrap(data); - cbinfo->persistent_.Dispose(); - cbinfo->persistent_.Clear(); - cbinfo->callback_(*cbinfo); - delete cbinfo; -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwrap( - NAN_WEAK_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data); - cbinfo->isolate_ = v8::Isolate::GetCurrent(); - return cbinfo; -} - -#undef NAN_WEAK_CALLBACK_SIG_ -#undef NAN_WEAK_CALLBACK_DATA_TYPE_ -#endif - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -template -template -inline void Persistent::SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

    *wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , parameter); - v8::PersistentBase::SetWeak( - wcbd - , WeakCallbackInfo

    ::template invokeparameter - , type); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetAlignedPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - (*self)->SetAlignedPointerInInternalField(0, wcbd); - v8::PersistentBase::SetWeak( - static_cast*>(0) - , WeakCallbackInfo

    ::template invoketwofield - , type); - } -} -#elif NODE_MODULE_VERSION > IOJS_1_1_MODULE_VERSION -template -template -inline void Persistent::SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

    *wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , parameter); - v8::PersistentBase::SetPhantom( - wcbd - , WeakCallbackInfo

    ::invokeparameter); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetAlignedPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - (*self)->SetAlignedPointerInInternalField(0, wcbd); - v8::PersistentBase::SetPhantom( - static_cast*>(0) - , WeakCallbackInfo

    ::invoketwofield - , 0 - , count > 1 ? 1 : kNoInternalFieldIndex); - } -} -#elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION -template -template -inline void Persistent::SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

    *wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , parameter); - v8::PersistentBase::SetPhantom( - wcbd - , WeakCallbackInfo

    ::invokeparameter); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetAlignedPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - (*self)->SetAlignedPointerInInternalField(0, wcbd); - v8::PersistentBase::SetPhantom( - WeakCallbackInfo

    ::invoketwofield - , 0 - , count > 1 ? 1 : kNoInternalFieldIndex); - } -} -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -template -template -inline void Persistent::SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

    *wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , parameter); - v8::PersistentBase::SetWeak(wcbd, WeakCallbackInfo

    ::invoke); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetAlignedPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - v8::PersistentBase::SetWeak(wcbd, WeakCallbackInfo

    ::invoke); - } -} -#else -template -template -inline void PersistentBase::SetWeak( - P *parameter - , typename WeakCallbackInfo

    ::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

    *wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , parameter); - persistent.MakeWeak(wcbd, WeakCallbackInfo

    ::invoke); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

    ( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - persistent.MakeWeak(wcbd, WeakCallbackInfo

    ::invoke); - } -} -#endif - -#endif // NAN_WEAK_H_ diff --git a/node_modules/nan/package.json b/node_modules/nan/package.json deleted file mode 100644 index 762a70e..0000000 --- a/node_modules/nan/package.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "_args": [ - [ - "nan@^2.0.5", - "/Users/jbaylina/git/MVP/node_modules/sha3" - ] - ], - "_from": "nan@>=2.0.5 <3.0.0", - "_id": "nan@2.4.0", - "_inCache": true, - "_installable": true, - "_location": "/nan", - "_nodeVersion": "5.0.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/nan-2.4.0.tgz_1468158679820_0.6951719264034182" - }, - "_npmUser": { - "email": "bbyholm@abo.fi", - "name": "kkoopa" - }, - "_npmVersion": "3.3.6", - "_phantomChildren": {}, - "_requested": { - "name": "nan", - "raw": "nan@^2.0.5", - "rawSpec": "^2.0.5", - "scope": null, - "spec": ">=2.0.5 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/scrypt", - "/secp256k1", - "/sha3" - ], - "_resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "_shasum": "fb3c59d45fe4effe215f0b890f8adf6eb32d2232", - "_shrinkwrap": null, - "_spec": "nan@^2.0.5", - "_where": "/Users/jbaylina/git/MVP/node_modules/sha3", - "bugs": { - "url": "https://github.com/nodejs/nan/issues" - }, - "contributors": [ - { - "email": "r@va.gg", - "name": "Rod Vagg", - "url": "https://github.com/rvagg" - }, - { - "email": "bbyholm@abo.fi", - "name": "Benjamin Byholm", - "url": "https://github.com/kkoopa/" - }, - { - "email": "trev.norris@gmail.com", - "name": "Trevor Norris", - "url": "https://github.com/trevnorris" - }, - { - "email": "nathan@tootallnate.net", - "name": "Nathan Rajlich", - "url": "https://github.com/TooTallNate" - }, - { - "email": "brett19@gmail.com", - "name": "Brett Lawson", - "url": "https://github.com/brett19" - }, - { - "email": "info@bnoordhuis.nl", - "name": "Ben Noordhuis", - "url": "https://github.com/bnoordhuis" - }, - { - "email": "david@artcom.de", - "name": "David Siegel", - "url": "https://github.com/agnat" - } - ], - "dependencies": {}, - "description": "Native Abstractions for Node.js: C++ header for Node 0.8 -> 6 compatibility", - "devDependencies": { - "bindings": "~1.2.1", - "commander": "^2.8.1", - "glob": "^5.0.14", - "node-gyp": "~3.0.1", - "readable-stream": "^2.1.4", - "tap": "~0.7.1", - "xtend": "~4.0.0" - }, - "directories": {}, - "dist": { - "shasum": "fb3c59d45fe4effe215f0b890f8adf6eb32d2232", - "tarball": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz" - }, - "homepage": "https://github.com/nodejs/nan#readme", - "license": "MIT", - "main": "include_dirs.js", - "maintainers": [ - { - "email": "rod@vagg.org", - "name": "rvagg" - }, - { - "email": "bbyholm@abo.fi", - "name": "kkoopa" - } - ], - "name": "nan", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/nodejs/nan.git" - }, - "scripts": { - "docs": "doc/.build.sh", - "rebuild-tests": "node-gyp rebuild --msvs_version=2013 --directory test", - "test": "tap --gc --stderr test/js/*-test.js" - }, - "version": "2.4.0" -} diff --git a/node_modules/nan/tools/1to2.js b/node_modules/nan/tools/1to2.js deleted file mode 100755 index b7498e4..0000000 --- a/node_modules/nan/tools/1to2.js +++ /dev/null @@ -1,412 +0,0 @@ -#!/usr/bin/env node -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2016 NAN contributors - * - * MIT License - ********************************************************************/ - -var commander = require('commander'), - fs = require('fs'), - glob = require('glob'), - groups = [], - total = 0, - warning1 = '/* ERROR: Rewrite using Buffer */\n', - warning2 = '\\/\\* ERROR\\: Rewrite using Buffer \\*\\/\\n', - length, - i; - -fs.readFile(__dirname + '/package.json', 'utf8', function (err, data) { - if (err) { - throw err; - } - - commander - .version(JSON.parse(data).version) - .usage('[options] ') - .parse(process.argv); - - if (!process.argv.slice(2).length) { - commander.outputHelp(); - } -}); - -/* construct strings representing regular expressions - each expression contains a unique group allowing for identification of the match - the index of this key group, relative to the regular expression in question, - is indicated by the first array member */ - -/* simple substistutions, key group is the entire match, 0 */ -groups.push([0, [ - '_NAN_', - 'NODE_SET_METHOD', - 'NODE_SET_PROTOTYPE_METHOD', - 'NanAsciiString', - 'NanEscapeScope', - 'NanReturnValue', - 'NanUcs2String'].join('|')]); - -/* substitutions of parameterless macros, key group is 1 */ -groups.push([1, ['(', [ - 'NanEscapableScope', - 'NanReturnNull', - 'NanReturnUndefined', - 'NanScope'].join('|'), ')\\(\\)'].join('')]); - -/* replace TryCatch with NanTryCatch once, gobbling possible namespace, key group 2 */ -groups.push([2, '(?:(?:v8\\:\\:)?|(Nan)?)(TryCatch)']); - -/* NanNew("string") will likely not fail a ToLocalChecked(), key group 1 */ -groups.push([1, ['(NanNew)', '(\\("[^\\"]*"[^\\)]*\\))(?!\\.ToLocalChecked\\(\\))'].join('')]); - -/* Removed v8 APIs, warn that the code needs rewriting using node::Buffer, key group 2 */ -groups.push([2, ['(', warning2, ')?', '^.*?(', [ - 'GetIndexedPropertiesExternalArrayDataLength', - 'GetIndexedPropertiesExternalArrayData', - 'GetIndexedPropertiesExternalArrayDataType', - 'GetIndexedPropertiesPixelData', - 'GetIndexedPropertiesPixelDataLength', - 'HasIndexedPropertiesInExternalArrayData', - 'HasIndexedPropertiesInPixelData', - 'SetIndexedPropertiesToExternalArrayData', - 'SetIndexedPropertiesToPixelData'].join('|'), ')'].join('')]); - -/* No need for NanScope in V8-exposed methods, key group 2 */ -groups.push([2, ['((', [ - 'NAN_METHOD', - 'NAN_GETTER', - 'NAN_SETTER', - 'NAN_PROPERTY_GETTER', - 'NAN_PROPERTY_SETTER', - 'NAN_PROPERTY_ENUMERATOR', - 'NAN_PROPERTY_DELETER', - 'NAN_PROPERTY_QUERY', - 'NAN_INDEX_GETTER', - 'NAN_INDEX_SETTER', - 'NAN_INDEX_ENUMERATOR', - 'NAN_INDEX_DELETER', - 'NAN_INDEX_QUERY'].join('|'), ')\\([^\\)]*\\)\\s*\\{)\\s*NanScope\\(\\)\\s*;'].join('')]); - -/* v8::Value::ToXXXXXXX returns v8::MaybeLocal, key group 3 */ -groups.push([3, ['([\\s\\(\\)])([^\\s\\(\\)]+)->(', [ - 'Boolean', - 'Number', - 'String', - 'Object', - 'Integer', - 'Uint32', - 'Int32'].join('|'), ')\\('].join('')]); - -/* v8::Value::XXXXXXXValue returns v8::Maybe, key group 3 */ -groups.push([3, ['([\\s\\(\\)])([^\\s\\(\\)]+)->((?:', [ - 'Boolean', - 'Number', - 'Integer', - 'Uint32', - 'Int32'].join('|'), ')Value)\\('].join('')]); - -/* NAN_WEAK_CALLBACK macro was removed, write out callback definition, key group 1 */ -groups.push([1, '(NAN_WEAK_CALLBACK)\\(([^\\s\\)]+)\\)']); - -/* node::ObjectWrap and v8::Persistent have been replaced with Nan implementations, key group 1 */ -groups.push([1, ['(', [ - 'NanDisposePersistent', - 'NanObjectWrapHandle'].join('|'), ')\\s*\\(\\s*([^\\s\\)]+)'].join('')]); - -/* Since NanPersistent there is no need for NanMakeWeakPersistent, key group 1 */ -groups.push([1, '(NanMakeWeakPersistent)\\s*\\(\\s*([^\\s,]+)\\s*,\\s*']); - -/* Many methods of v8::Object and others now return v8::MaybeLocal, key group 3 */ -groups.push([3, ['([\\s])([^\\s]+)->(', [ - 'GetEndColumn', - 'GetFunction', - 'GetLineNumber', - 'NewInstance', - 'GetPropertyNames', - 'GetOwnPropertyNames', - 'GetSourceLine', - 'GetStartColumn', - 'ObjectProtoToString', - 'ToArrayIndex', - 'ToDetailString', - 'CallAsConstructor', - 'CallAsFunction', - 'CloneElementAt', - 'Delete', - 'ForceSet', - 'Get', - 'GetPropertyAttributes', - 'GetRealNamedProperty', - 'GetRealNamedPropertyInPrototypeChain', - 'Has', - 'HasOwnProperty', - 'HasRealIndexedProperty', - 'HasRealNamedCallbackProperty', - 'HasRealNamedProperty', - 'Set', - 'SetAccessor', - 'SetIndexedPropertyHandler', - 'SetNamedPropertyHandler', - 'SetPrototype'].join('|'), ')\\('].join('')]); - -/* You should get an error if any of these fail anyways, - or handle the error better, it is indicated either way, key group 2 */ -groups.push([2, ['NanNew(<(?:v8\\:\\:)?(', ['Date', 'String', 'RegExp'].join('|'), ')>)(\\([^\\)]*\\))(?!\\.ToLocalChecked\\(\\))'].join('')]); - -/* v8::Value::Equals now returns a v8::Maybe, key group 3 */ -groups.push([3, '([\\s\\(\\)])([^\\s\\(\\)]+)->(Equals)\\(([^\\s\\)]+)']); - -/* NanPersistent makes this unnecessary, key group 1 */ -groups.push([1, '(NanAssignPersistent)(?:]+>)?\\(([^,]+),\\s*']); - -/* args has been renamed to info, key group 2 */ -groups.push([2, '(\\W)(args)(\\W)']) - -/* node::ObjectWrap was replaced with NanObjectWrap, key group 2 */ -groups.push([2, '(\\W)(?:node\\:\\:)?(ObjectWrap)(\\W)']); - -/* v8::Persistent was replaced with NanPersistent, key group 2 */ -groups.push([2, '(\\W)(?:v8\\:\\:)?(Persistent)(\\W)']); - -/* counts the number of capturing groups in a well-formed regular expression, - ignoring non-capturing groups and escaped parentheses */ -function groupcount(s) { - var positive = s.match(/\((?!\?)/g), - negative = s.match(/\\\(/g); - return (positive ? positive.length : 0) - (negative ? negative.length : 0); -} - -/* compute the absolute position of each key group in the joined master RegExp */ -for (i = 1, length = groups.length; i < length; i++) { - total += groupcount(groups[i - 1][1]); - groups[i][0] += total; -} - -/* create the master RegExp, whis is the union of all the groups' expressions */ -master = new RegExp(groups.map(function (a) { return a[1]; }).join('|'), 'gm'); - -/* replacement function for String.replace, receives 21 arguments */ -function replace() { - /* simple expressions */ - switch (arguments[groups[0][0]]) { - case '_NAN_': - return 'NAN_'; - case 'NODE_SET_METHOD': - return 'NanSetMethod'; - case 'NODE_SET_PROTOTYPE_METHOD': - return 'NanSetPrototypeMethod'; - case 'NanAsciiString': - return 'NanUtf8String'; - case 'NanEscapeScope': - return 'scope.Escape'; - case 'NanReturnNull': - return 'info.GetReturnValue().SetNull'; - case 'NanReturnValue': - return 'info.GetReturnValue().Set'; - case 'NanUcs2String': - return 'v8::String::Value'; - default: - } - - /* macros without arguments */ - switch (arguments[groups[1][0]]) { - case 'NanEscapableScope': - return 'NanEscapableScope scope' - case 'NanReturnUndefined': - return 'return'; - case 'NanScope': - return 'NanScope scope'; - default: - } - - /* TryCatch, emulate negative backref */ - if (arguments[groups[2][0]] === 'TryCatch') { - return arguments[groups[2][0] - 1] ? arguments[0] : 'NanTryCatch'; - } - - /* NanNew("foo") --> NanNew("foo").ToLocalChecked() */ - if (arguments[groups[3][0]] === 'NanNew') { - return [arguments[0], '.ToLocalChecked()'].join(''); - } - - /* insert warning for removed functions as comment on new line above */ - switch (arguments[groups[4][0]]) { - case 'GetIndexedPropertiesExternalArrayData': - case 'GetIndexedPropertiesExternalArrayDataLength': - case 'GetIndexedPropertiesExternalArrayDataType': - case 'GetIndexedPropertiesPixelData': - case 'GetIndexedPropertiesPixelDataLength': - case 'HasIndexedPropertiesInExternalArrayData': - case 'HasIndexedPropertiesInPixelData': - case 'SetIndexedPropertiesToExternalArrayData': - case 'SetIndexedPropertiesToPixelData': - return arguments[groups[4][0] - 1] ? arguments[0] : [warning1, arguments[0]].join(''); - default: - } - - /* remove unnecessary NanScope() */ - switch (arguments[groups[5][0]]) { - case 'NAN_GETTER': - case 'NAN_METHOD': - case 'NAN_SETTER': - case 'NAN_INDEX_DELETER': - case 'NAN_INDEX_ENUMERATOR': - case 'NAN_INDEX_GETTER': - case 'NAN_INDEX_QUERY': - case 'NAN_INDEX_SETTER': - case 'NAN_PROPERTY_DELETER': - case 'NAN_PROPERTY_ENUMERATOR': - case 'NAN_PROPERTY_GETTER': - case 'NAN_PROPERTY_QUERY': - case 'NAN_PROPERTY_SETTER': - return arguments[groups[5][0] - 1]; - default: - } - - /* Value converstion */ - switch (arguments[groups[6][0]]) { - case 'Boolean': - case 'Int32': - case 'Integer': - case 'Number': - case 'Object': - case 'String': - case 'Uint32': - return [arguments[groups[6][0] - 2], 'NanTo(', arguments[groups[6][0] - 1]].join(''); - default: - } - - /* other value conversion */ - switch (arguments[groups[7][0]]) { - case 'BooleanValue': - return [arguments[groups[7][0] - 2], 'NanTo(', arguments[groups[7][0] - 1]].join(''); - case 'Int32Value': - return [arguments[groups[7][0] - 2], 'NanTo(', arguments[groups[7][0] - 1]].join(''); - case 'IntegerValue': - return [arguments[groups[7][0] - 2], 'NanTo(', arguments[groups[7][0] - 1]].join(''); - case 'Uint32Value': - return [arguments[groups[7][0] - 2], 'NanTo(', arguments[groups[7][0] - 1]].join(''); - default: - } - - /* NAN_WEAK_CALLBACK */ - if (arguments[groups[8][0]] === 'NAN_WEAK_CALLBACK') { - return ['template\nvoid ', - arguments[groups[8][0] + 1], '(const NanWeakCallbackInfo &data)'].join(''); - } - - /* use methods on NAN classes instead */ - switch (arguments[groups[9][0]]) { - case 'NanDisposePersistent': - return [arguments[groups[9][0] + 1], '.Reset('].join(''); - case 'NanObjectWrapHandle': - return [arguments[groups[9][0] + 1], '->handle('].join(''); - default: - } - - /* use method on NanPersistent instead */ - if (arguments[groups[10][0]] === 'NanMakeWeakPersistent') { - return arguments[groups[10][0] + 1] + '.SetWeak('; - } - - /* These return Maybes, the upper ones take no arguments */ - switch (arguments[groups[11][0]]) { - case 'GetEndColumn': - case 'GetFunction': - case 'GetLineNumber': - case 'GetOwnPropertyNames': - case 'GetPropertyNames': - case 'GetSourceLine': - case 'GetStartColumn': - case 'NewInstance': - case 'ObjectProtoToString': - case 'ToArrayIndex': - case 'ToDetailString': - return [arguments[groups[11][0] - 2], 'Nan', arguments[groups[11][0]], '(', arguments[groups[11][0] - 1]].join(''); - case 'CallAsConstructor': - case 'CallAsFunction': - case 'CloneElementAt': - case 'Delete': - case 'ForceSet': - case 'Get': - case 'GetPropertyAttributes': - case 'GetRealNamedProperty': - case 'GetRealNamedPropertyInPrototypeChain': - case 'Has': - case 'HasOwnProperty': - case 'HasRealIndexedProperty': - case 'HasRealNamedCallbackProperty': - case 'HasRealNamedProperty': - case 'Set': - case 'SetAccessor': - case 'SetIndexedPropertyHandler': - case 'SetNamedPropertyHandler': - case 'SetPrototype': - return [arguments[groups[11][0] - 2], 'Nan', arguments[groups[11][0]], '(', arguments[groups[11][0] - 1], ', '].join(''); - default: - } - - /* Automatic ToLocalChecked(), take it or leave it */ - switch (arguments[groups[12][0]]) { - case 'Date': - case 'String': - case 'RegExp': - return ['NanNew', arguments[groups[12][0] - 1], arguments[groups[12][0] + 1], '.ToLocalChecked()'].join(''); - default: - } - - /* NanEquals is now required for uniformity */ - if (arguments[groups[13][0]] === 'Equals') { - return [arguments[groups[13][0] - 1], 'NanEquals(', arguments[groups[13][0] - 1], ', ', arguments[groups[13][0] + 1]].join(''); - } - - /* use method on replacement class instead */ - if (arguments[groups[14][0]] === 'NanAssignPersistent') { - return [arguments[groups[14][0] + 1], '.Reset('].join(''); - } - - /* args --> info */ - if (arguments[groups[15][0]] === 'args') { - return [arguments[groups[15][0] - 1], 'info', arguments[groups[15][0] + 1]].join(''); - } - - /* ObjectWrap --> NanObjectWrap */ - if (arguments[groups[16][0]] === 'ObjectWrap') { - return [arguments[groups[16][0] - 1], 'NanObjectWrap', arguments[groups[16][0] + 1]].join(''); - } - - /* Persistent --> NanPersistent */ - if (arguments[groups[17][0]] === 'Persistent') { - return [arguments[groups[17][0] - 1], 'NanPersistent', arguments[groups[17][0] + 1]].join(''); - } - - /* This should not happen. A switch is probably missing a case if it does. */ - throw 'Unhandled match: ' + arguments[0]; -} - -/* reads a file, runs replacement and writes it back */ -function processFile(file) { - fs.readFile(file, {encoding: 'utf8'}, function (err, data) { - if (err) { - throw err; - } - - /* run replacement twice, might need more runs */ - fs.writeFile(file, data.replace(master, replace).replace(master, replace), function (err) { - if (err) { - throw err; - } - }); - }); -} - -/* process file names from command line and process the identified files */ -for (i = 2, length = process.argv.length; i < length; i++) { - glob(process.argv[i], function (err, matches) { - if (err) { - throw err; - } - matches.forEach(processFile); - }); -} diff --git a/node_modules/nan/tools/README.md b/node_modules/nan/tools/README.md deleted file mode 100644 index 7f07e4b..0000000 --- a/node_modules/nan/tools/README.md +++ /dev/null @@ -1,14 +0,0 @@ -1to2 naively converts source code files from NAN 1 to NAN 2. There will be erroneous conversions, -false positives and missed opportunities. The input files are rewritten in place. Make sure that -you have backups. You will have to manually review the changes afterwards and do some touchups. - -```sh -$ tools/1to2.js - - Usage: 1to2 [options] - - Options: - - -h, --help output usage information - -V, --version output the version number -``` diff --git a/node_modules/nan/tools/package.json b/node_modules/nan/tools/package.json deleted file mode 100644 index 2dcdd78..0000000 --- a/node_modules/nan/tools/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "1to2", - "version": "1.0.0", - "description": "NAN 1 -> 2 Migration Script", - "main": "1to2.js", - "repository": { - "type": "git", - "url": "git://github.com/nodejs/nan.git" - }, - "contributors": [ - "Benjamin Byholm (https://github.com/kkoopa/)", - "Mathias Küsel (https://github.com/mathiask88/)" - ], - "dependencies": { - "glob": "~5.0.10", - "commander": "~2.8.1" - }, - "license": "MIT" -} diff --git a/node_modules/node-fetch/.npmignore b/node_modules/node-fetch/.npmignore deleted file mode 100644 index a2234e0..0000000 --- a/node_modules/node-fetch/.npmignore +++ /dev/null @@ -1,34 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# Commenting this out is preferred by some people, see -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- -node_modules - -# Users Environment Variables -.lock-wscript - -# OS files -.DS_Store - -# Coveralls token files -.coveralls.yml diff --git a/node_modules/node-fetch/.travis.yml b/node_modules/node-fetch/.travis.yml deleted file mode 100644 index a1358b0..0000000 --- a/node_modules/node-fetch/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "node" -env: - - FORMDATA_VERSION=1.0.0 - - FORMDATA_VERSION=2.1.0 -before_script: - - 'if [ "$FORMDATA_VERSION" ]; then npm install form-data@^$FORMDATA_VERSION; fi' -before_install: npm install -g npm -script: npm run coverage \ No newline at end of file diff --git a/node_modules/node-fetch/CHANGELOG.md b/node_modules/node-fetch/CHANGELOG.md deleted file mode 100644 index 857fc8d..0000000 --- a/node_modules/node-fetch/CHANGELOG.md +++ /dev/null @@ -1,143 +0,0 @@ - -Changelog -========= - - -# 1.x release - -## v1.6.3 - -- Enhance: error handling document to explain `FetchError` design -- Fix: support `form-data` 2.x releases (requires `form-data` >= 2.1.0) - -## v1.6.2 - -- Enhance: minor document update -- Fix: response.json() returns empty object on 204 no-content response instead of throwing a syntax error - -## v1.6.1 - -- Fix: if `res.body` is a non-stream non-formdata object, we will call `body.toString` and send it as a string -- Fix: `counter` value is incorrectly set to `follow` value when wrapping Request instance -- Fix: documentation update - -## v1.6.0 - -- Enhance: added `res.buffer()` api for convenience, it returns body as a Node.js buffer -- Enhance: better old server support by handling raw deflate response -- Enhance: skip encoding detection for non-HTML/XML response -- Enhance: minor document update -- Fix: HEAD request doesn't need decompression, as body is empty -- Fix: `req.body` now accepts a Node.js buffer - -## v1.5.3 - -- Fix: handle 204 and 304 responses when body is empty but content-encoding is gzip/deflate -- Fix: allow resolving response and cloned response in any order -- Fix: avoid setting `content-length` when `form-data` body use streams -- Fix: send DELETE request with content-length when body is present -- Fix: allow any url when calling new Request, but still reject non-http(s) url in fetch - -## v1.5.2 - -- Fix: allow node.js core to handle keep-alive connection pool when passing a custom agent - -## v1.5.1 - -- Fix: redirect mode `manual` should work even when there is no redirection or broken redirection - -## v1.5.0 - -- Enhance: rejected promise now use custom `Error` (thx to @pekeler) -- Enhance: `FetchError` contains `err.type` and `err.code`, allows for better error handling (thx to @pekeler) -- Enhance: basic support for redirect mode `manual` and `error`, allows for location header extraction (thx to @jimmywarting for the initial PR) - -## v1.4.1 - -- Fix: wrapping Request instance with FormData body again should preserve the body as-is - -## v1.4.0 - -- Enhance: Request and Response now have `clone` method (thx to @kirill-konshin for the initial PR) -- Enhance: Request and Response now have proper string and buffer body support (thx to @kirill-konshin) -- Enhance: Body constructor has been refactored out (thx to @kirill-konshin) -- Enhance: Headers now has `forEach` method (thx to @tricoder42) -- Enhance: back to 100% code coverage -- Fix: better form-data support (thx to @item4) -- Fix: better character encoding detection under chunked encoding (thx to @dsuket for the initial PR) - -## v1.3.3 - -- Fix: make sure `Content-Length` header is set when body is string for POST/PUT/PATCH requests -- Fix: handle body stream error, for cases such as incorrect `Content-Encoding` header -- Fix: when following certain redirects, use `GET` on subsequent request per Fetch Spec -- Fix: `Request` and `Response` constructors now parse headers input using `Headers` - -## v1.3.2 - -- Enhance: allow auto detect of form-data input (no `FormData` spec on node.js, this is form-data specific feature) - -## v1.3.1 - -- Enhance: allow custom host header to be set (server-side only feature, as it's a forbidden header on client-side) - -## v1.3.0 - -- Enhance: now `fetch.Request` is exposed as well - -## v1.2.1 - -- Enhance: `Headers` now normalized `Number` value to `String`, prevent common mistakes - -## v1.2.0 - -- Enhance: now fetch.Headers and fetch.Response are exposed, making testing easier - -## v1.1.2 - -- Fix: `Headers` should only support `String` and `Array` properties, and ignore others - -## v1.1.1 - -- Enhance: now req.headers accept both plain object and `Headers` instance - -## v1.1.0 - -- Enhance: timeout now also applies to response body (in case of slow response) -- Fix: timeout is now cleared properly when fetch is done/has failed - -## v1.0.6 - -- Fix: less greedy content-type charset matching - -## v1.0.5 - -- Fix: when `follow = 0`, fetch should not follow redirect -- Enhance: update tests for better coverage -- Enhance: code formatting -- Enhance: clean up doc - -## v1.0.4 - -- Enhance: test iojs support -- Enhance: timeout attached to socket event only fire once per redirect - -## v1.0.3 - -- Fix: response size limit should reject large chunk -- Enhance: added character encoding detection for xml, such as rss/atom feed (encoding in DTD) - -## v1.0.2 - -- Fix: added res.ok per spec change - -## v1.0.0 - -- Enhance: better test coverage and doc - - -# 0.x release - -## v0.1 - -- Major: initial public release diff --git a/node_modules/node-fetch/ERROR-HANDLING.md b/node_modules/node-fetch/ERROR-HANDLING.md deleted file mode 100644 index 0e4025d..0000000 --- a/node_modules/node-fetch/ERROR-HANDLING.md +++ /dev/null @@ -1,21 +0,0 @@ - -Error handling with node-fetch -============================== - -Because `window.fetch` isn't designed to transparent about the cause of request errors, we have to come up with our own solutions. - -The basics: - -- All [operational errors](https://www.joyent.com/node-js/production/design/errors) are rejected as [FetchError](https://github.com/bitinn/node-fetch/blob/master/lib/fetch-error.js), you can handle them all through promise `catch` clause. - -- All errors comes with `err.message` detailing the cause of errors. - -- All errors originated from `node-fetch` are marked with custom `err.type`. - -- All errors originated from Node.js core are marked with `err.type = system`, and contains addition `err.code` and `err.errno` for error handling, they are alias to error codes thrown by Node.js core. - -- [Programmer errors](https://www.joyent.com/node-js/production/design/errors) are either thrown as soon as possible, or rejected with default `Error` with `err.message` for ease of troubleshooting. - -List of error types: - -- Because we maintain 100% coverage, see [test.js](https://github.com/bitinn/node-fetch/blob/master/test/test.js) for a full list of custom `FetchError` types, as well as some of the common errors from Node.js diff --git a/node_modules/node-fetch/LICENSE.md b/node_modules/node-fetch/LICENSE.md deleted file mode 100644 index 660ffec..0000000 --- a/node_modules/node-fetch/LICENSE.md +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 David Frank - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/node_modules/node-fetch/LIMITS.md b/node_modules/node-fetch/LIMITS.md deleted file mode 100644 index d0d41fc..0000000 --- a/node_modules/node-fetch/LIMITS.md +++ /dev/null @@ -1,27 +0,0 @@ - -Known differences -================= - -*As of 1.x release* - -- Topics such as Cross-Origin, Content Security Policy, Mixed Content, Service Workers are ignored, given our server-side context. - -- URL input must be an absolute URL, using either `http` or `https` as scheme. - -- On the upside, there are no forbidden headers, and `res.url` contains the final url when following redirects. - -- For convenience, `res.body` is a transform stream, so decoding can be handled independently. - -- Similarly, `req.body` can either be a string, a buffer or a readable stream. - -- Also, you can handle rejected fetch requests through checking `err.type` and `err.code`. - -- Only support `res.text()`, `res.json()`, `res.buffer()` at the moment, until there are good use-cases for blob/arrayBuffer. - -- There is currently no built-in caching, as server-side caching varies by use-cases. - -- Current implementation lacks server-side cookie store, you will need to extract `Set-Cookie` headers manually. - -- If you are using `res.clone()` and writing an isomorphic app, note that stream on Node.js have a smaller internal buffer size (16Kb, aka `highWaterMark`) from client-side browsers (>1Mb, not consistent across browsers). - -- ES6 features such as `headers.entries()` are missing at the moment, but you can use `headers.raw()` to retrieve the raw headers object. diff --git a/node_modules/node-fetch/README.md b/node_modules/node-fetch/README.md deleted file mode 100644 index 96d69f6..0000000 --- a/node_modules/node-fetch/README.md +++ /dev/null @@ -1,210 +0,0 @@ - -node-fetch -========== - -[![npm version][npm-image]][npm-url] -[![build status][travis-image]][travis-url] -[![coverage status][coveralls-image]][coveralls-url] - -A light-weight module that brings `window.fetch` to Node.js - - -# Motivation - -Instead of implementing `XMLHttpRequest` in Node.js to run browser-specific [Fetch polyfill](https://github.com/github/fetch), why not go from native `http` to `Fetch` API directly? Hence `node-fetch`, minimal code for a `window.fetch` compatible API on Node.js runtime. - -See Matt Andrews' [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) for isomorphic usage (exports `node-fetch` for server-side, `whatwg-fetch` for client-side). - - -# Features - -- Stay consistent with `window.fetch` API. -- Make conscious trade-off when following [whatwg fetch spec](https://fetch.spec.whatwg.org/) and [stream spec](https://streams.spec.whatwg.org/) implementation details, document known difference. -- Use native promise, but allow substituting it with [insert your favorite promise library]. -- Use native stream for body, on both request and response. -- Decode content encoding (gzip/deflate) properly, and convert string output (such as `res.text()` and `res.json()`) to UTF-8 automatically. -- Useful extensions such as timeout, redirect limit, response size limit, [explicit errors](https://github.com/bitinn/node-fetch/blob/master/ERROR-HANDLING.md) for troubleshooting. - - -# Difference from client-side fetch - -- See [Known Differences](https://github.com/bitinn/node-fetch/blob/master/LIMITS.md) for details. -- If you happen to use a missing feature that `window.fetch` offers, feel free to open an issue. -- Pull requests are welcomed too! - - -# Install - -`npm install node-fetch --save` - - -# Usage - -```javascript -var fetch = require('node-fetch'); - -// if you are on node v0.10, set a Promise library first, eg. -// fetch.Promise = require('bluebird'); - -// plain text or html - -fetch('https://github.com/') - .then(function(res) { - return res.text(); - }).then(function(body) { - console.log(body); - }); - -// json - -fetch('https://api.github.com/users/github') - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); - -// catching network error -// 3xx-5xx responses are NOT network errors, and should be handled in then() -// you only need one catch() at the end of your promise chain - -fetch('http://domain.invalid/') - .catch(function(err) { - console.log(err); - }); - -// stream -// the node.js way is to use stream when possible - -fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png') - .then(function(res) { - var dest = fs.createWriteStream('./octocat.png'); - res.body.pipe(dest); - }); - -// buffer -// if you prefer to cache binary data in full, use buffer() -// note that buffer() is a node-fetch only API - -var fileType = require('file-type'); -fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png') - .then(function(res) { - return res.buffer(); - }).then(function(buffer) { - fileType(buffer); - }); - -// meta - -fetch('https://github.com/') - .then(function(res) { - console.log(res.ok); - console.log(res.status); - console.log(res.statusText); - console.log(res.headers.raw()); - console.log(res.headers.get('content-type')); - }); - -// post - -fetch('http://httpbin.org/post', { method: 'POST', body: 'a=1' }) - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); - -// post with stream from resumer - -var resumer = require('resumer'); -var stream = resumer().queue('a=1').end(); -fetch('http://httpbin.org/post', { method: 'POST', body: stream }) - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); - -// post with form-data (detect multipart) - -var FormData = require('form-data'); -var form = new FormData(); -form.append('a', 1); -fetch('http://httpbin.org/post', { method: 'POST', body: form }) - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); - -// post with form-data (custom headers) -// note that getHeaders() is non-standard API - -var FormData = require('form-data'); -var form = new FormData(); -form.append('a', 1); -fetch('http://httpbin.org/post', { method: 'POST', body: form, headers: form.getHeaders() }) - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); - -// node 0.12+, yield with co - -var co = require('co'); -co(function *() { - var res = yield fetch('https://api.github.com/users/github'); - var json = yield res.json(); - console.log(res); -}); -``` - -See [test cases](https://github.com/bitinn/node-fetch/blob/master/test/test.js) for more examples. - - -# API - -## fetch(url, options) - -Returns a `Promise` - -### Url - -Should be an absolute url, eg `http://example.com/` - -### Options - -default values are shown, note that only `method`, `headers`, `redirect` and `body` are allowed in `window.fetch`, others are node.js extensions. - -``` -{ - method: 'GET' - , headers: {} // request header. format {a:'1'} or {b:['1','2','3']} - , redirect: 'follow' // set to `manual` to extract redirect headers, `error` to reject redirect - , follow: 20 // maximum redirect count. 0 to not follow redirect - , timeout: 0 // req/res timeout in ms, it resets on redirect. 0 to disable (OS limit applies) - , compress: true // support gzip/deflate content encoding. false to disable - , size: 0 // maximum response body size in bytes. 0 to disable - , body: empty // request body. can be a string, buffer, readable stream - , agent: null // http.Agent instance, allows custom proxy, certificate etc. -} -``` - - -# License - -MIT - - -# Acknowledgement - -Thanks to [github/fetch](https://github.com/github/fetch) for providing a solid implementation reference. - - -[npm-image]: https://img.shields.io/npm/v/node-fetch.svg?style=flat-square -[npm-url]: https://www.npmjs.com/package/node-fetch -[travis-image]: https://img.shields.io/travis/bitinn/node-fetch.svg?style=flat-square -[travis-url]: https://travis-ci.org/bitinn/node-fetch -[coveralls-image]: https://img.shields.io/coveralls/bitinn/node-fetch.svg?style=flat-square -[coveralls-url]: https://coveralls.io/r/bitinn/node-fetch diff --git a/node_modules/node-fetch/index.js b/node_modules/node-fetch/index.js deleted file mode 100644 index df89c80..0000000 --- a/node_modules/node-fetch/index.js +++ /dev/null @@ -1,271 +0,0 @@ - -/** - * index.js - * - * a request API compatible with window.fetch - */ - -var parse_url = require('url').parse; -var resolve_url = require('url').resolve; -var http = require('http'); -var https = require('https'); -var zlib = require('zlib'); -var stream = require('stream'); - -var Body = require('./lib/body'); -var Response = require('./lib/response'); -var Headers = require('./lib/headers'); -var Request = require('./lib/request'); -var FetchError = require('./lib/fetch-error'); - -// commonjs -module.exports = Fetch; -// es6 default export compatibility -module.exports.default = module.exports; - -/** - * Fetch class - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function Fetch(url, opts) { - - // allow call as function - if (!(this instanceof Fetch)) - return new Fetch(url, opts); - - // allow custom promise - if (!Fetch.Promise) { - throw new Error('native promise missing, set Fetch.Promise to your favorite alternative'); - } - - Body.Promise = Fetch.Promise; - - var self = this; - - // wrap http.request into fetch - return new Fetch.Promise(function(resolve, reject) { - // build request object - var options = new Request(url, opts); - - if (!options.protocol || !options.hostname) { - throw new Error('only absolute urls are supported'); - } - - if (options.protocol !== 'http:' && options.protocol !== 'https:') { - throw new Error('only http(s) protocols are supported'); - } - - var send; - if (options.protocol === 'https:') { - send = https.request; - } else { - send = http.request; - } - - // normalize headers - var headers = new Headers(options.headers); - - if (options.compress) { - headers.set('accept-encoding', 'gzip,deflate'); - } - - if (!headers.has('user-agent')) { - headers.set('user-agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - if (!headers.has('connection') && !options.agent) { - headers.set('connection', 'close'); - } - - if (!headers.has('accept')) { - headers.set('accept', '*/*'); - } - - // detect form data input from form-data module, this hack avoid the need to pass multipart header manually - if (!headers.has('content-type') && options.body && typeof options.body.getBoundary === 'function') { - headers.set('content-type', 'multipart/form-data; boundary=' + options.body.getBoundary()); - } - - // bring node-fetch closer to browser behavior by setting content-length automatically - if (!headers.has('content-length') && /post|put|patch|delete/i.test(options.method)) { - if (typeof options.body === 'string') { - headers.set('content-length', Buffer.byteLength(options.body)); - // detect form data input from form-data module, this hack avoid the need to add content-length header manually - } else if (options.body && typeof options.body.getLengthSync === 'function') { - // for form-data 1.x - if (options.body._lengthRetrievers && options.body._lengthRetrievers.length == 0) { - headers.set('content-length', options.body.getLengthSync().toString()); - // for form-data 2.x - } else if (options.body.hasKnownLength && options.body.hasKnownLength()) { - headers.set('content-length', options.body.getLengthSync().toString()); - } - // this is only necessary for older nodejs releases (before iojs merge) - } else if (options.body === undefined || options.body === null) { - headers.set('content-length', '0'); - } - } - - options.headers = headers.raw(); - - // http.request only support string as host header, this hack make custom host header possible - if (options.headers.host) { - options.headers.host = options.headers.host[0]; - } - - // send request - var req = send(options); - var reqTimeout; - - if (options.timeout) { - req.once('socket', function(socket) { - reqTimeout = setTimeout(function() { - req.abort(); - reject(new FetchError('network timeout at: ' + options.url, 'request-timeout')); - }, options.timeout); - }); - } - - req.on('error', function(err) { - clearTimeout(reqTimeout); - reject(new FetchError('request to ' + options.url + ' failed, reason: ' + err.message, 'system', err)); - }); - - req.on('response', function(res) { - clearTimeout(reqTimeout); - - // handle redirect - if (self.isRedirect(res.statusCode) && options.redirect !== 'manual') { - if (options.redirect === 'error') { - reject(new FetchError('redirect mode is set to error: ' + options.url, 'no-redirect')); - return; - } - - if (options.counter >= options.follow) { - reject(new FetchError('maximum redirect reached at: ' + options.url, 'max-redirect')); - return; - } - - if (!res.headers.location) { - reject(new FetchError('redirect location header missing at: ' + options.url, 'invalid-redirect')); - return; - } - - // per fetch spec, for POST request with 301/302 response, or any request with 303 response, use GET when following redirect - if (res.statusCode === 303 - || ((res.statusCode === 301 || res.statusCode === 302) && options.method === 'POST')) - { - options.method = 'GET'; - delete options.body; - delete options.headers['content-length']; - } - - options.counter++; - - resolve(Fetch(resolve_url(options.url, res.headers.location), options)); - return; - } - - // normalize location header for manual redirect mode - var headers = new Headers(res.headers); - if (options.redirect === 'manual' && headers.has('location')) { - headers.set('location', resolve_url(options.url, headers.get('location'))); - } - - // prepare response - var body = res.pipe(new stream.PassThrough()); - var response_options = { - url: options.url - , status: res.statusCode - , statusText: res.statusMessage - , headers: headers - , size: options.size - , timeout: options.timeout - }; - - // response object - var output; - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no content-encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!options.compress || options.method === 'HEAD' || !headers.has('content-encoding') || res.statusCode === 204 || res.statusCode === 304) { - output = new Response(body, response_options); - resolve(output); - return; - } - - // otherwise, check for gzip or deflate - var name = headers.get('content-encoding'); - - // for gzip - if (name == 'gzip' || name == 'x-gzip') { - body = body.pipe(zlib.createGunzip()); - output = new Response(body, response_options); - resolve(output); - return; - - // for deflate - } else if (name == 'deflate' || name == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - var raw = res.pipe(new stream.PassThrough()); - raw.once('data', function(chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - output = new Response(body, response_options); - resolve(output); - }); - return; - } - - // otherwise, use response as-is - output = new Response(body, response_options); - resolve(output); - return; - }); - - // accept string, buffer or readable stream as body - // per spec we will call tostring on non-stream objects - if (typeof options.body === 'string') { - req.write(options.body); - req.end(); - } else if (options.body instanceof Buffer) { - req.write(options.body); - req.end() - } else if (typeof options.body === 'object' && options.body.pipe) { - options.body.pipe(req); - } else if (typeof options.body === 'object') { - req.write(options.body.toString()); - req.end(); - } else { - req.end(); - } - }); - -}; - -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -Fetch.prototype.isRedirect = function(code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -} - -// expose Promise -Fetch.Promise = global.Promise; -Fetch.Response = Response; -Fetch.Headers = Headers; -Fetch.Request = Request; diff --git a/node_modules/node-fetch/lib/body.js b/node_modules/node-fetch/lib/body.js deleted file mode 100644 index e7bbe1d..0000000 --- a/node_modules/node-fetch/lib/body.js +++ /dev/null @@ -1,260 +0,0 @@ - -/** - * body.js - * - * Body interface provides common methods for Request and Response - */ - -var convert = require('encoding').convert; -var bodyStream = require('is-stream'); -var PassThrough = require('stream').PassThrough; -var FetchError = require('./fetch-error'); - -module.exports = Body; - -/** - * Body class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body, opts) { - - opts = opts || {}; - - this.body = body; - this.bodyUsed = false; - this.size = opts.size || 0; - this.timeout = opts.timeout || 0; - this._raw = []; - this._abort = false; - -} - -/** - * Decode response as json - * - * @return Promise - */ -Body.prototype.json = function() { - - // for 204 No Content response, buffer will be empty, parsing it will throw error - if (this.status === 204) { - return Body.Promise.resolve({}); - } - - return this._decode().then(function(buffer) { - return JSON.parse(buffer.toString()); - }); - -}; - -/** - * Decode response as text - * - * @return Promise - */ -Body.prototype.text = function() { - - return this._decode().then(function(buffer) { - return buffer.toString(); - }); - -}; - -/** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ -Body.prototype.buffer = function() { - - return this._decode(); - -}; - -/** - * Decode buffers into utf-8 string - * - * @return Promise - */ -Body.prototype._decode = function() { - - var self = this; - - if (this.bodyUsed) { - return Body.Promise.reject(new Error('body used already for: ' + this.url)); - } - - this.bodyUsed = true; - this._bytes = 0; - this._abort = false; - this._raw = []; - - return new Body.Promise(function(resolve, reject) { - var resTimeout; - - // body is string - if (typeof self.body === 'string') { - self._bytes = self.body.length; - self._raw = [new Buffer(self.body)]; - return resolve(self._convert()); - } - - // body is buffer - if (self.body instanceof Buffer) { - self._bytes = self.body.length; - self._raw = [self.body]; - return resolve(self._convert()); - } - - // allow timeout on slow response body - if (self.timeout) { - resTimeout = setTimeout(function() { - self._abort = true; - reject(new FetchError('response timeout at ' + self.url + ' over limit: ' + self.timeout, 'body-timeout')); - }, self.timeout); - } - - // handle stream error, such as incorrect content-encoding - self.body.on('error', function(err) { - reject(new FetchError('invalid response body at: ' + self.url + ' reason: ' + err.message, 'system', err)); - }); - - // body is stream - self.body.on('data', function(chunk) { - if (self._abort || chunk === null) { - return; - } - - if (self.size && self._bytes + chunk.length > self.size) { - self._abort = true; - reject(new FetchError('content size at ' + self.url + ' over limit: ' + self.size, 'max-size')); - return; - } - - self._bytes += chunk.length; - self._raw.push(chunk); - }); - - self.body.on('end', function() { - if (self._abort) { - return; - } - - clearTimeout(resTimeout); - resolve(self._convert()); - }); - }); - -}; - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param String encoding Target encoding - * @return String - */ -Body.prototype._convert = function(encoding) { - - encoding = encoding || 'utf-8'; - - var ct = this.headers.get('content-type'); - var charset = 'utf-8'; - var res, str; - - // header - if (ct) { - // skip encoding detection altogether if not html/xml/plain text - if (!/text\/html|text\/plain|\+xml|\/xml/i.test(ct)) { - return Buffer.concat(this._raw); - } - - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - if (!res && this._raw.length > 0) { - for (var i = 0; i < this._raw.length; i++) { - str += this._raw[i].toString() - if (str.length > 1024) { - break; - } - } - str = str.substr(0, 1024); - } - - // html5 - if (!res && str) { - res = /= 200 && this.status < 300; - - Body.call(this, body, opts); - -} - -Response.prototype = Object.create(Body.prototype); - -/** - * Clone this response - * - * @return Response - */ -Response.prototype.clone = function() { - return new Response(this._clone(this), { - url: this.url - , status: this.status - , statusText: this.statusText - , headers: this.headers - , ok: this.ok - }); -}; diff --git a/node_modules/node-fetch/package.json b/node_modules/node-fetch/package.json deleted file mode 100644 index ffee650..0000000 --- a/node_modules/node-fetch/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "node-fetch@^1.0.1", - "/Users/jbaylina/git/MVP/node_modules/isomorphic-fetch" - ] - ], - "_from": "node-fetch@>=1.0.1 <2.0.0", - "_id": "node-fetch@1.6.3", - "_inCache": true, - "_installable": true, - "_location": "/node-fetch", - "_nodeVersion": "6.3.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/node-fetch-1.6.3.tgz_1474870810431_0.44125940511003137" - }, - "_npmUser": { - "email": "bitinn@gmail.com", - "name": "bitinn" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "node-fetch", - "raw": "node-fetch@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/isomorphic-fetch" - ], - "_resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", - "_shasum": "dc234edd6489982d58e8f0db4f695029abcd8c04", - "_shrinkwrap": null, - "_spec": "node-fetch@^1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/isomorphic-fetch", - "author": { - "name": "David Frank" - }, - "bugs": { - "url": "https://github.com/bitinn/node-fetch/issues" - }, - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - }, - "description": "A light-weight module that brings window.fetch to node.js and io.js", - "devDependencies": { - "bluebird": "^3.3.4", - "chai": "^3.5.0", - "chai-as-promised": "^5.2.0", - "coveralls": "^2.11.2", - "form-data": ">=1.0.0", - "istanbul": "^0.4.2", - "mocha": "^2.1.0", - "parted": "^0.1.1", - "promise": "^7.1.1", - "resumer": "0.0.0" - }, - "directories": {}, - "dist": { - "shasum": "dc234edd6489982d58e8f0db4f695029abcd8c04", - "tarball": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz" - }, - "gitHead": "3c053ce32760d2d5d6cb8712fb4115b44e4083d4", - "homepage": "https://github.com/bitinn/node-fetch", - "keywords": [ - "fetch", - "http", - "promise" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "bitinn@gmail.com", - "name": "bitinn" - } - ], - "name": "node-fetch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/bitinn/node-fetch.git" - }, - "scripts": { - "coverage": "istanbul cover _mocha --report lcovonly -- -R spec test/test.js && cat ./coverage/lcov.info | coveralls", - "report": "istanbul cover _mocha -- -R spec test/test.js", - "test": "mocha test/test.js" - }, - "version": "1.6.3" -} diff --git a/node_modules/node-fetch/test/dummy.txt b/node_modules/node-fetch/test/dummy.txt deleted file mode 100644 index 5ca5191..0000000 --- a/node_modules/node-fetch/test/dummy.txt +++ /dev/null @@ -1 +0,0 @@ -i am a dummy \ No newline at end of file diff --git a/node_modules/node-fetch/test/server.js b/node_modules/node-fetch/test/server.js deleted file mode 100644 index 08e582d..0000000 --- a/node_modules/node-fetch/test/server.js +++ /dev/null @@ -1,337 +0,0 @@ - -var http = require('http'); -var parse = require('url').parse; -var zlib = require('zlib'); -var stream = require('stream'); -var convert = require('encoding').convert; -var Multipart = require('parted').multipart; - -module.exports = TestServer; - -function TestServer() { - this.server = http.createServer(this.router); - this.port = 30001; - this.hostname = 'localhost'; - this.server.on('error', function(err) { - console.log(err.stack); - }); - this.server.on('connection', function(socket) { - socket.setTimeout(1500); - }); -} - -TestServer.prototype.start = function(cb) { - this.server.listen(this.port, this.hostname, cb); -} - -TestServer.prototype.stop = function(cb) { - this.server.close(cb); -} - -TestServer.prototype.router = function(req, res) { - - var p = parse(req.url).pathname; - - if (p === '/hello') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.end('world'); - } - - if (p === '/plain') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.end('text'); - } - - if (p === '/options') { - res.statusCode = 200; - res.setHeader('Allow', 'GET, HEAD, OPTIONS'); - res.end('hello world'); - } - - if (p === '/html') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/html'); - res.end(''); - } - - if (p === '/json') { - res.statusCode = 200; - res.setHeader('Content-Type', 'application/json'); - res.end(JSON.stringify({ - name: 'value' - })); - } - - if (p === '/gzip') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Encoding', 'gzip'); - zlib.gzip('hello world', function(err, buffer) { - res.end(buffer); - }); - } - - if (p === '/deflate') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Encoding', 'deflate'); - zlib.deflate('hello world', function(err, buffer) { - res.end(buffer); - }); - } - - if (p === '/deflate-raw') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Encoding', 'deflate'); - zlib.deflateRaw('hello world', function(err, buffer) { - res.end(buffer); - }); - } - - if (p === '/sdch') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Encoding', 'sdch'); - res.end('fake sdch string'); - } - - if (p === '/invalid-content-encoding') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Encoding', 'gzip'); - res.end('fake gzip string'); - } - - if (p === '/timeout') { - setTimeout(function() { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.end('text'); - }, 1000); - } - - if (p === '/slow') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.write('test'); - setTimeout(function() { - res.end('test'); - }, 1000); - } - - if (p === '/cookie') { - res.statusCode = 200; - res.setHeader('Set-Cookie', ['a=1', 'b=1']); - res.end('cookie'); - } - - if (p === '/size/chunk') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - setTimeout(function() { - res.write('test'); - }, 50); - setTimeout(function() { - res.end('test'); - }, 100); - } - - if (p === '/size/long') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain'); - res.end('testtest'); - } - - if (p === '/encoding/gbk') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/html'); - res.end(convert('

    中文
    ', 'gbk')); - } - - if (p === '/encoding/gb2312') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/html'); - res.end(convert('
    中文
    ', 'gb2312')); - } - - if (p === '/encoding/shift-jis') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/html; charset=Shift-JIS'); - res.end(convert('
    日本語
    ', 'Shift_JIS')); - } - - if (p === '/encoding/euc-jp') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/xml'); - res.end(convert('日本語', 'EUC-JP')); - } - - if (p === '/encoding/utf8') { - res.statusCode = 200; - res.end('中文'); - } - - if (p === '/encoding/order1') { - res.statusCode = 200; - res.setHeader('Content-Type', 'charset=gbk; text/plain'); - res.end(convert('中文', 'gbk')); - } - - if (p === '/encoding/order2') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/plain; charset=gbk; qs=1'); - res.end(convert('中文', 'gbk')); - } - - if (p === '/encoding/chunked') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/html'); - res.setHeader('Transfer-Encoding', 'chunked'); - var padding = 'a'; - for (var i = 0; i < 10; i++) { - res.write(padding); - } - res.end(convert('
    日本語
    ', 'Shift_JIS')); - } - - if (p === '/encoding/invalid') { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/html'); - res.setHeader('Transfer-Encoding', 'chunked'); - // because node v0.12 doesn't have str.repeat - var padding = new Array(120 + 1).join('a'); - for (var i = 0; i < 10; i++) { - res.write(padding); - } - res.end(convert('中文', 'gbk')); - } - - if (p === '/redirect/301') { - res.statusCode = 301; - res.setHeader('Location', '/inspect'); - res.end(); - } - - if (p === '/redirect/302') { - res.statusCode = 302; - res.setHeader('Location', '/inspect'); - res.end(); - } - - if (p === '/redirect/303') { - res.statusCode = 303; - res.setHeader('Location', '/inspect'); - res.end(); - } - - if (p === '/redirect/307') { - res.statusCode = 307; - res.setHeader('Location', '/inspect'); - res.end(); - } - - if (p === '/redirect/308') { - res.statusCode = 308; - res.setHeader('Location', '/inspect'); - res.end(); - } - - if (p === '/redirect/chain') { - res.statusCode = 301; - res.setHeader('Location', '/redirect/301'); - res.end(); - } - - if (p === '/error/redirect') { - res.statusCode = 301; - //res.setHeader('Location', '/inspect'); - res.end(); - } - - if (p === '/error/400') { - res.statusCode = 400; - res.setHeader('Content-Type', 'text/plain'); - res.end('client error'); - } - - if (p === '/error/404') { - res.statusCode = 404; - res.setHeader('Content-Encoding', 'gzip'); - res.end(); - } - - if (p === '/error/500') { - res.statusCode = 500; - res.setHeader('Content-Type', 'text/plain'); - res.end('server error'); - } - - if (p === '/error/reset') { - res.destroy(); - } - - if (p === '/error/json') { - res.statusCode = 200; - res.setHeader('Content-Type', 'application/json'); - res.end('invalid json'); - } - - if (p === '/no-content') { - res.statusCode = 204; - res.end(); - } - - if (p === '/no-content/gzip') { - res.statusCode = 204; - res.setHeader('Content-Encoding', 'gzip'); - res.end(); - } - - if (p === '/not-modified') { - res.statusCode = 304; - res.end(); - } - - if (p === '/not-modified/gzip') { - res.statusCode = 304; - res.setHeader('Content-Encoding', 'gzip'); - res.end(); - } - - if (p === '/inspect') { - res.statusCode = 200; - res.setHeader('Content-Type', 'application/json'); - var body = ''; - req.on('data', function(c) { body += c }); - req.on('end', function() { - res.end(JSON.stringify({ - method: req.method, - url: req.url, - headers: req.headers, - body: body - })); - }); - } - - if (p === '/multipart') { - res.statusCode = 200; - res.setHeader('Content-Type', 'application/json'); - var parser = new Multipart(req.headers['content-type']); - var body = ''; - parser.on('part', function(field, part) { - body += field + '=' + part; - }); - parser.on('end', function() { - res.end(JSON.stringify({ - method: req.method, - url: req.url, - headers: req.headers, - body: body - })); - }); - req.pipe(parser); - } -} diff --git a/node_modules/node-fetch/test/test.js b/node_modules/node-fetch/test/test.js deleted file mode 100644 index 6067ccd..0000000 --- a/node_modules/node-fetch/test/test.js +++ /dev/null @@ -1,1490 +0,0 @@ - -// test tools -var chai = require('chai'); -var cap = require('chai-as-promised'); -chai.use(cap); -var expect = chai.expect; -var bluebird = require('bluebird'); -var then = require('promise'); -var spawn = require('child_process').spawn; -var stream = require('stream'); -var resumer = require('resumer'); -var FormData = require('form-data'); -var http = require('http'); -var fs = require('fs'); - -var TestServer = require('./server'); - -// test subjects -var fetch = require('../index.js'); -var Headers = require('../lib/headers.js'); -var Response = require('../lib/response.js'); -var Request = require('../lib/request.js'); -var Body = require('../lib/body.js'); -var FetchError = require('../lib/fetch-error.js'); -// test with native promise on node 0.11, and bluebird for node 0.10 -fetch.Promise = fetch.Promise || bluebird; - -var url, opts, local, base; - -describe('node-fetch', function() { - - before(function(done) { - local = new TestServer(); - base = 'http://' + local.hostname + ':' + local.port; - local.start(done); - }); - - after(function(done) { - local.stop(done); - }); - - it('should return a promise', function() { - url = 'http://example.com/'; - var p = fetch(url); - expect(p).to.be.an.instanceof(fetch.Promise); - expect(p).to.have.property('then'); - }); - - it('should allow custom promise', function() { - url = 'http://example.com/'; - var old = fetch.Promise; - fetch.Promise = then; - expect(fetch(url)).to.be.an.instanceof(then); - expect(fetch(url)).to.not.be.an.instanceof(bluebird); - fetch.Promise = old; - }); - - it('should throw error when no promise implementation are found', function() { - url = 'http://example.com/'; - var old = fetch.Promise; - fetch.Promise = undefined; - expect(function() { - fetch(url) - }).to.throw(Error); - fetch.Promise = old; - }); - - it('should expose Headers, Response and Request constructors', function() { - expect(fetch.Headers).to.equal(Headers); - expect(fetch.Response).to.equal(Response); - expect(fetch.Request).to.equal(Request); - }); - - it('should reject with error if url is protocol relative', function() { - url = '//example.com/'; - return expect(fetch(url)).to.eventually.be.rejectedWith(Error); - }); - - it('should reject with error if url is relative path', function() { - url = '/some/path'; - return expect(fetch(url)).to.eventually.be.rejectedWith(Error); - }); - - it('should reject with error if protocol is unsupported', function() { - url = 'ftp://example.com/'; - return expect(fetch(url)).to.eventually.be.rejectedWith(Error); - }); - - it('should reject with error on network failure', function() { - url = 'http://localhost:50000/'; - return expect(fetch(url)).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.include({ type: 'system', code: 'ECONNREFUSED', errno: 'ECONNREFUSED' }); - }); - - it('should resolve into response', function() { - url = base + '/hello'; - return fetch(url).then(function(res) { - expect(res).to.be.an.instanceof(Response); - expect(res.headers).to.be.an.instanceof(Headers); - expect(res.body).to.be.an.instanceof(stream.Transform); - expect(res.bodyUsed).to.be.false; - - expect(res.url).to.equal(url); - expect(res.ok).to.be.true; - expect(res.status).to.equal(200); - expect(res.statusText).to.equal('OK'); - }); - }); - - it('should accept plain text response', function() { - url = base + '/plain'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - return res.text().then(function(result) { - expect(res.bodyUsed).to.be.true; - expect(result).to.be.a('string'); - expect(result).to.equal('text'); - }); - }); - }); - - it('should accept html response (like plain text)', function() { - url = base + '/html'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/html'); - return res.text().then(function(result) { - expect(res.bodyUsed).to.be.true; - expect(result).to.be.a('string'); - expect(result).to.equal(''); - }); - }); - }); - - it('should accept json response', function() { - url = base + '/json'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('application/json'); - return res.json().then(function(result) { - expect(res.bodyUsed).to.be.true; - expect(result).to.be.an('object'); - expect(result).to.deep.equal({ name: 'value' }); - }); - }); - }); - - it('should send request with custom headers', function() { - url = base + '/inspect'; - opts = { - headers: { 'x-custom-header': 'abc' } - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.headers['x-custom-header']).to.equal('abc'); - }); - }); - - it('should accept headers instance', function() { - url = base + '/inspect'; - opts = { - headers: new Headers({ 'x-custom-header': 'abc' }) - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.headers['x-custom-header']).to.equal('abc'); - }); - }); - - it('should accept custom host header', function() { - url = base + '/inspect'; - opts = { - headers: { - host: 'example.com' - } - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.headers['host']).to.equal('example.com'); - }); - }); - - it('should follow redirect code 301', function() { - url = base + '/redirect/301'; - return fetch(url).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - expect(res.ok).to.be.true; - }); - }); - - it('should follow redirect code 302', function() { - url = base + '/redirect/302'; - return fetch(url).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - }); - }); - - it('should follow redirect code 303', function() { - url = base + '/redirect/303'; - return fetch(url).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - }); - }); - - it('should follow redirect code 307', function() { - url = base + '/redirect/307'; - return fetch(url).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - }); - }); - - it('should follow redirect code 308', function() { - url = base + '/redirect/308'; - return fetch(url).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - }); - }); - - it('should follow redirect chain', function() { - url = base + '/redirect/chain'; - return fetch(url).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - }); - }); - - it('should follow POST request redirect code 301 with GET', function() { - url = base + '/redirect/301'; - opts = { - method: 'POST' - , body: 'a=1' - }; - return fetch(url, opts).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - return res.json().then(function(result) { - expect(result.method).to.equal('GET'); - expect(result.body).to.equal(''); - }); - }); - }); - - it('should follow POST request redirect code 302 with GET', function() { - url = base + '/redirect/302'; - opts = { - method: 'POST' - , body: 'a=1' - }; - return fetch(url, opts).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - return res.json().then(function(result) { - expect(result.method).to.equal('GET'); - expect(result.body).to.equal(''); - }); - }); - }); - - it('should follow redirect code 303 with GET', function() { - url = base + '/redirect/303'; - opts = { - method: 'PUT' - , body: 'a=1' - }; - return fetch(url, opts).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - return res.json().then(function(result) { - expect(result.method).to.equal('GET'); - expect(result.body).to.equal(''); - }); - }); - }); - - it('should obey maximum redirect, reject case', function() { - url = base + '/redirect/chain'; - opts = { - follow: 1 - } - return expect(fetch(url, opts)).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('type', 'max-redirect'); - }); - - it('should obey redirect chain, resolve case', function() { - url = base + '/redirect/chain'; - opts = { - follow: 2 - } - return fetch(url, opts).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - expect(res.status).to.equal(200); - }); - }); - - it('should allow not following redirect', function() { - url = base + '/redirect/301'; - opts = { - follow: 0 - } - return expect(fetch(url, opts)).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('type', 'max-redirect'); - }); - - it('should support redirect mode, manual flag', function() { - url = base + '/redirect/301'; - opts = { - redirect: 'manual' - }; - return fetch(url, opts).then(function(res) { - expect(res.url).to.equal(url); - expect(res.status).to.equal(301); - expect(res.headers.get('location')).to.equal(base + '/inspect'); - }); - }); - - it('should support redirect mode, error flag', function() { - url = base + '/redirect/301'; - opts = { - redirect: 'error' - }; - return expect(fetch(url, opts)).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('type', 'no-redirect'); - }); - - it('should support redirect mode, manual flag when there is no redirect', function() { - url = base + '/hello'; - opts = { - redirect: 'manual' - }; - return fetch(url, opts).then(function(res) { - expect(res.url).to.equal(url); - expect(res.status).to.equal(200); - expect(res.headers.get('location')).to.be.null; - }); - }); - - it('should follow redirect code 301 and keep existing headers', function() { - url = base + '/redirect/301'; - opts = { - headers: new Headers({ 'x-custom-header': 'abc' }) - }; - return fetch(url, opts).then(function(res) { - expect(res.url).to.equal(base + '/inspect'); - return res.json(); - }).then(function(res) { - expect(res.headers['x-custom-header']).to.equal('abc'); - }); - }); - - it('should reject broken redirect', function() { - url = base + '/error/redirect'; - return expect(fetch(url)).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('type', 'invalid-redirect'); - }); - - it('should not reject broken redirect under manual redirect', function() { - url = base + '/error/redirect'; - opts = { - redirect: 'manual' - }; - return fetch(url, opts).then(function(res) { - expect(res.url).to.equal(url); - expect(res.status).to.equal(301); - expect(res.headers.get('location')).to.be.null; - }); - }); - - it('should handle client-error response', function() { - url = base + '/error/400'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - expect(res.status).to.equal(400); - expect(res.statusText).to.equal('Bad Request'); - expect(res.ok).to.be.false; - return res.text().then(function(result) { - expect(res.bodyUsed).to.be.true; - expect(result).to.be.a('string'); - expect(result).to.equal('client error'); - }); - }); - }); - - it('should handle server-error response', function() { - url = base + '/error/500'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - expect(res.status).to.equal(500); - expect(res.statusText).to.equal('Internal Server Error'); - expect(res.ok).to.be.false; - return res.text().then(function(result) { - expect(res.bodyUsed).to.be.true; - expect(result).to.be.a('string'); - expect(result).to.equal('server error'); - }); - }); - }); - - it('should handle network-error response', function() { - url = base + '/error/reset'; - return expect(fetch(url)).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('code', 'ECONNRESET'); - }); - - it('should handle DNS-error response', function() { - url = 'http://domain.invalid'; - return expect(fetch(url)).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('code', 'ENOTFOUND'); - }); - - it('should reject invalid json response', function() { - url = base + '/error/json'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('application/json'); - return expect(res.json()).to.eventually.be.rejectedWith(Error); - }); - }); - - it('should handle no content response', function() { - url = base + '/no-content'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(204); - expect(res.statusText).to.equal('No Content'); - expect(res.ok).to.be.true; - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.be.empty; - }); - }); - }); - - it('should return empty object on no-content response', function() { - url = base + '/no-content'; - return fetch(url).then(function(res) { - return res.json().then(function(result) { - expect(result).to.be.an('object'); - expect(result).to.be.empty; - }); - }); - }); - - it('should handle no content response with gzip encoding', function() { - url = base + '/no-content/gzip'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(204); - expect(res.statusText).to.equal('No Content'); - expect(res.headers.get('content-encoding')).to.equal('gzip'); - expect(res.ok).to.be.true; - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.be.empty; - }); - }); - }); - - it('should handle not modified response', function() { - url = base + '/not-modified'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(304); - expect(res.statusText).to.equal('Not Modified'); - expect(res.ok).to.be.false; - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.be.empty; - }); - }); - }); - - it('should handle not modified response with gzip encoding', function() { - url = base + '/not-modified/gzip'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(304); - expect(res.statusText).to.equal('Not Modified'); - expect(res.headers.get('content-encoding')).to.equal('gzip'); - expect(res.ok).to.be.false; - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.be.empty; - }); - }); - }); - - it('should decompress gzip response', function() { - url = base + '/gzip'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.equal('hello world'); - }); - }); - }); - - it('should decompress deflate response', function() { - url = base + '/deflate'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.equal('hello world'); - }); - }); - }); - - it('should decompress deflate raw response from old apache server', function() { - url = base + '/deflate-raw'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.equal('hello world'); - }); - }); - }); - - it('should skip decompression if unsupported', function() { - url = base + '/sdch'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.equal('fake sdch string'); - }); - }); - }); - - it('should reject if response compression is invalid', function() { - url = base + '/invalid-content-encoding'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - return expect(res.text()).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('code', 'Z_DATA_ERROR'); - }); - }); - - it('should allow disabling auto decompression', function() { - url = base + '/gzip'; - opts = { - compress: false - }; - return fetch(url, opts).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - return res.text().then(function(result) { - expect(result).to.be.a('string'); - expect(result).to.not.equal('hello world'); - }); - }); - }); - - it('should allow custom timeout', function() { - this.timeout(500); - url = base + '/timeout'; - opts = { - timeout: 100 - }; - return expect(fetch(url, opts)).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('type', 'request-timeout'); - }); - - it('should allow custom timeout on response body', function() { - this.timeout(500); - url = base + '/slow'; - opts = { - timeout: 100 - }; - return fetch(url, opts).then(function(res) { - expect(res.ok).to.be.true; - return expect(res.text()).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('type', 'body-timeout'); - }); - }); - - it('should clear internal timeout on fetch response', function (done) { - this.timeout(1000); - spawn('node', ['-e', 'require("./")("' + base + '/hello", { timeout: 5000 })']) - .on('exit', function () { - done(); - }); - }); - - it('should clear internal timeout on fetch redirect', function (done) { - this.timeout(1000); - spawn('node', ['-e', 'require("./")("' + base + '/redirect/301", { timeout: 5000 })']) - .on('exit', function () { - done(); - }); - }); - - it('should clear internal timeout on fetch error', function (done) { - this.timeout(1000); - spawn('node', ['-e', 'require("./")("' + base + '/error/reset", { timeout: 5000 })']) - .on('exit', function () { - done(); - }); - }); - - it('should allow POST request', function() { - url = base + '/inspect'; - opts = { - method: 'POST' - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.headers['transfer-encoding']).to.be.undefined; - expect(res.headers['content-length']).to.equal('0'); - }); - }); - - it('should allow POST request with string body', function() { - url = base + '/inspect'; - opts = { - method: 'POST' - , body: 'a=1' - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.body).to.equal('a=1'); - expect(res.headers['transfer-encoding']).to.be.undefined; - expect(res.headers['content-length']).to.equal('3'); - }); - }); - - it('should allow POST request with buffer body', function() { - url = base + '/inspect'; - opts = { - method: 'POST' - , body: new Buffer('a=1', 'utf-8') - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.body).to.equal('a=1'); - expect(res.headers['transfer-encoding']).to.equal('chunked'); - expect(res.headers['content-length']).to.be.undefined; - }); - }); - - it('should allow POST request with readable stream as body', function() { - var body = resumer().queue('a=1').end(); - body = body.pipe(new stream.PassThrough()); - - url = base + '/inspect'; - opts = { - method: 'POST' - , body: body - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.body).to.equal('a=1'); - expect(res.headers['transfer-encoding']).to.equal('chunked'); - expect(res.headers['content-length']).to.be.undefined; - }); - }); - - it('should allow POST request with form-data as body', function() { - var form = new FormData(); - form.append('a','1'); - - url = base + '/multipart'; - opts = { - method: 'POST' - , body: form - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.headers['content-type']).to.contain('multipart/form-data'); - expect(res.headers['content-length']).to.be.a('string'); - expect(res.body).to.equal('a=1'); - }); - }); - - it('should allow POST request with form-data using stream as body', function() { - var form = new FormData(); - form.append('my_field', fs.createReadStream('test/dummy.txt')); - - url = base + '/multipart'; - opts = { - method: 'POST' - , body: form - }; - - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.headers['content-type']).to.contain('multipart/form-data'); - expect(res.headers['content-length']).to.be.undefined; - expect(res.body).to.contain('my_field='); - }); - }); - - it('should allow POST request with form-data as body and custom headers', function() { - var form = new FormData(); - form.append('a','1'); - - var headers = form.getHeaders(); - headers['b'] = '2'; - - url = base + '/multipart'; - opts = { - method: 'POST' - , body: form - , headers: headers - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.headers['content-type']).to.contain('multipart/form-data'); - expect(res.headers['content-length']).to.be.a('string'); - expect(res.headers.b).to.equal('2'); - expect(res.body).to.equal('a=1'); - }); - }); - - it('should allow POST request with object body', function() { - url = base + '/inspect'; - // note that fetch simply calls tostring on an object - opts = { - method: 'POST' - , body: { a:1 } - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.body).to.equal('[object Object]'); - }); - }); - - it('should allow PUT request', function() { - url = base + '/inspect'; - opts = { - method: 'PUT' - , body: 'a=1' - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('PUT'); - expect(res.body).to.equal('a=1'); - }); - }); - - it('should allow DELETE request', function() { - url = base + '/inspect'; - opts = { - method: 'DELETE' - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('DELETE'); - }); - }); - - it('should allow POST request with string body', function() { - url = base + '/inspect'; - opts = { - method: 'POST' - , body: 'a=1' - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('POST'); - expect(res.body).to.equal('a=1'); - expect(res.headers['transfer-encoding']).to.be.undefined; - expect(res.headers['content-length']).to.equal('3'); - }); - }); - - it('should allow DELETE request with string body', function() { - url = base + '/inspect'; - opts = { - method: 'DELETE' - , body: 'a=1' - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('DELETE'); - expect(res.body).to.equal('a=1'); - expect(res.headers['transfer-encoding']).to.be.undefined; - expect(res.headers['content-length']).to.equal('3'); - }); - }); - - it('should allow PATCH request', function() { - url = base + '/inspect'; - opts = { - method: 'PATCH' - , body: 'a=1' - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.method).to.equal('PATCH'); - expect(res.body).to.equal('a=1'); - }); - }); - - it('should allow HEAD request', function() { - url = base + '/hello'; - opts = { - method: 'HEAD' - }; - return fetch(url, opts).then(function(res) { - expect(res.status).to.equal(200); - expect(res.statusText).to.equal('OK'); - expect(res.headers.get('content-type')).to.equal('text/plain'); - expect(res.body).to.be.an.instanceof(stream.Transform); - return res.text(); - }).then(function(text) { - expect(text).to.equal(''); - }); - }); - - it('should allow HEAD request with content-encoding header', function() { - url = base + '/error/404'; - opts = { - method: 'HEAD' - }; - return fetch(url, opts).then(function(res) { - expect(res.status).to.equal(404); - expect(res.headers.get('content-encoding')).to.equal('gzip'); - return res.text(); - }).then(function(text) { - expect(text).to.equal(''); - }); - }); - - it('should allow OPTIONS request', function() { - url = base + '/options'; - opts = { - method: 'OPTIONS' - }; - return fetch(url, opts).then(function(res) { - expect(res.status).to.equal(200); - expect(res.statusText).to.equal('OK'); - expect(res.headers.get('allow')).to.equal('GET, HEAD, OPTIONS'); - expect(res.body).to.be.an.instanceof(stream.Transform); - }); - }); - - it('should reject decoding body twice', function() { - url = base + '/plain'; - return fetch(url).then(function(res) { - expect(res.headers.get('content-type')).to.equal('text/plain'); - return res.text().then(function(result) { - expect(res.bodyUsed).to.be.true; - return expect(res.text()).to.eventually.be.rejectedWith(Error); - }); - }); - }); - - it('should support maximum response size, multiple chunk', function() { - url = base + '/size/chunk'; - opts = { - size: 5 - }; - return fetch(url, opts).then(function(res) { - expect(res.status).to.equal(200); - expect(res.headers.get('content-type')).to.equal('text/plain'); - return expect(res.text()).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('type', 'max-size'); - }); - }); - - it('should support maximum response size, single chunk', function() { - url = base + '/size/long'; - opts = { - size: 5 - }; - return fetch(url, opts).then(function(res) { - expect(res.status).to.equal(200); - expect(res.headers.get('content-type')).to.equal('text/plain'); - return expect(res.text()).to.eventually.be.rejected - .and.be.an.instanceOf(FetchError) - .and.have.property('type', 'max-size'); - }); - }); - - it('should support encoding decode, xml dtd detect', function() { - url = base + '/encoding/euc-jp'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - return res.text().then(function(result) { - expect(result).to.equal('日本語'); - }); - }); - }); - - it('should support encoding decode, content-type detect', function() { - url = base + '/encoding/shift-jis'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - return res.text().then(function(result) { - expect(result).to.equal('
    日本語
    '); - }); - }); - }); - - it('should support encoding decode, html5 detect', function() { - url = base + '/encoding/gbk'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - return res.text().then(function(result) { - expect(result).to.equal('
    中文
    '); - }); - }); - }); - - it('should support encoding decode, html4 detect', function() { - url = base + '/encoding/gb2312'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - return res.text().then(function(result) { - expect(result).to.equal('
    中文
    '); - }); - }); - }); - - it('should default to utf8 encoding', function() { - url = base + '/encoding/utf8'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - expect(res.headers.get('content-type')).to.be.null; - return res.text().then(function(result) { - expect(result).to.equal('中文'); - }); - }); - }); - - it('should support uncommon content-type order, charset in front', function() { - url = base + '/encoding/order1'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - return res.text().then(function(result) { - expect(result).to.equal('中文'); - }); - }); - }); - - it('should support uncommon content-type order, end with qs', function() { - url = base + '/encoding/order2'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - return res.text().then(function(result) { - expect(result).to.equal('中文'); - }); - }); - }); - - it('should support chunked encoding, html4 detect', function() { - url = base + '/encoding/chunked'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - // because node v0.12 doesn't have str.repeat - var padding = new Array(10 + 1).join('a'); - return res.text().then(function(result) { - expect(result).to.equal(padding + '
    日本語
    '); - }); - }); - }); - - it('should only do encoding detection up to 1024 bytes', function() { - url = base + '/encoding/invalid'; - return fetch(url).then(function(res) { - expect(res.status).to.equal(200); - // because node v0.12 doesn't have str.repeat - var padding = new Array(1200 + 1).join('a'); - return res.text().then(function(result) { - expect(result).to.not.equal(padding + '中文'); - }); - }); - }); - - it('should allow piping response body as stream', function(done) { - url = base + '/hello'; - fetch(url).then(function(res) { - expect(res.body).to.be.an.instanceof(stream.Transform); - res.body.on('data', function(chunk) { - if (chunk === null) { - return; - } - expect(chunk.toString()).to.equal('world'); - }); - res.body.on('end', function() { - done(); - }); - }); - }); - - it('should allow cloning a response, and use both as stream', function(done) { - url = base + '/hello'; - return fetch(url).then(function(res) { - var counter = 0; - var r1 = res.clone(); - expect(res.body).to.be.an.instanceof(stream.Transform); - expect(r1.body).to.be.an.instanceof(stream.Transform); - res.body.on('data', function(chunk) { - if (chunk === null) { - return; - } - expect(chunk.toString()).to.equal('world'); - }); - res.body.on('end', function() { - counter++; - if (counter == 2) { - done(); - } - }); - r1.body.on('data', function(chunk) { - if (chunk === null) { - return; - } - expect(chunk.toString()).to.equal('world'); - }); - r1.body.on('end', function() { - counter++; - if (counter == 2) { - done(); - } - }); - }); - }); - - it('should allow cloning a json response and log it as text response', function() { - url = base + '/json'; - return fetch(url).then(function(res) { - var r1 = res.clone(); - return fetch.Promise.all([res.json(), r1.text()]).then(function(results) { - expect(results[0]).to.deep.equal({name: 'value'}); - expect(results[1]).to.equal('{"name":"value"}'); - }); - }); - }); - - it('should allow cloning a json response, and then log it as text response', function() { - url = base + '/json'; - return fetch(url).then(function(res) { - var r1 = res.clone(); - return res.json().then(function(result) { - expect(result).to.deep.equal({name: 'value'}); - return r1.text().then(function(result) { - expect(result).to.equal('{"name":"value"}'); - }); - }); - }); - }); - - it('should allow cloning a json response, first log as text response, then return json object', function() { - url = base + '/json'; - return fetch(url).then(function(res) { - var r1 = res.clone(); - return r1.text().then(function(result) { - expect(result).to.equal('{"name":"value"}'); - return res.json().then(function(result) { - expect(result).to.deep.equal({name: 'value'}); - }); - }); - }); - }); - - it('should not allow cloning a response after its been used', function() { - url = base + '/hello'; - return fetch(url).then(function(res) { - return res.text().then(function(result) { - expect(function() { - var r1 = res.clone(); - }).to.throw(Error); - }); - }) - }); - - it('should allow get all responses of a header', function() { - url = base + '/cookie'; - return fetch(url).then(function(res) { - expect(res.headers.get('set-cookie')).to.equal('a=1'); - expect(res.headers.get('Set-Cookie')).to.equal('a=1'); - expect(res.headers.getAll('set-cookie')).to.deep.equal(['a=1', 'b=1']); - expect(res.headers.getAll('Set-Cookie')).to.deep.equal(['a=1', 'b=1']); - }); - }); - - it('should allow iterating through all headers', function() { - var headers = new Headers({ - a: 1 - , b: [2, 3] - , c: [4] - }); - expect(headers).to.have.property('forEach'); - - var result = []; - headers.forEach(function(val, key) { - result.push([key, val]); - }); - - expected = [ - ["a", "1"] - , ["b", "2"] - , ["b", "3"] - , ["c", "4"] - ]; - expect(result).to.deep.equal(expected); - }); - - it('should allow deleting header', function() { - url = base + '/cookie'; - return fetch(url).then(function(res) { - res.headers.delete('set-cookie'); - expect(res.headers.get('set-cookie')).to.be.null; - expect(res.headers.getAll('set-cookie')).to.be.empty; - }); - }); - - it('should send request with connection keep-alive if agent is provided', function() { - url = base + '/inspect'; - opts = { - agent: new http.Agent({ - keepAlive: true - }) - }; - return fetch(url, opts).then(function(res) { - return res.json(); - }).then(function(res) { - expect(res.headers['connection']).to.equal('keep-alive'); - }); - }); - - it('should ignore unsupported attributes while reading headers', function() { - var FakeHeader = function() {}; - // prototypes are ignored - FakeHeader.prototype.z = 'fake'; - - var res = new FakeHeader; - // valid - res.a = 'string'; - res.b = ['1','2']; - res.c = ''; - res.d = []; - // common mistakes, normalized - res.e = 1; - res.f = [1, 2]; - // invalid, ignored - res.g = { a:1 }; - res.h = undefined; - res.i = null; - res.j = NaN; - res.k = true; - res.l = false; - res.m = new Buffer('test'); - - var h1 = new Headers(res); - - expect(h1._headers['a']).to.include('string'); - expect(h1._headers['b']).to.include('1'); - expect(h1._headers['b']).to.include('2'); - expect(h1._headers['c']).to.include(''); - expect(h1._headers['d']).to.be.undefined; - - expect(h1._headers['e']).to.include('1'); - expect(h1._headers['f']).to.include('1'); - expect(h1._headers['f']).to.include('2'); - - expect(h1._headers['g']).to.be.undefined; - expect(h1._headers['h']).to.be.undefined; - expect(h1._headers['i']).to.be.undefined; - expect(h1._headers['j']).to.be.undefined; - expect(h1._headers['k']).to.be.undefined; - expect(h1._headers['l']).to.be.undefined; - expect(h1._headers['m']).to.be.undefined; - - expect(h1._headers['z']).to.be.undefined; - }); - - it('should wrap headers', function() { - var h1 = new Headers({ - a: '1' - }); - - var h2 = new Headers(h1); - h2.set('b', '1'); - - var h3 = new Headers(h2); - h3.append('a', '2'); - - expect(h1._headers['a']).to.include('1'); - expect(h1._headers['a']).to.not.include('2'); - - expect(h2._headers['a']).to.include('1'); - expect(h2._headers['a']).to.not.include('2'); - expect(h2._headers['b']).to.include('1'); - - expect(h3._headers['a']).to.include('1'); - expect(h3._headers['a']).to.include('2'); - expect(h3._headers['b']).to.include('1'); - }); - - it('should support fetch with Request instance', function() { - url = base + '/hello'; - var req = new Request(url); - return fetch(req).then(function(res) { - expect(res.url).to.equal(url); - expect(res.ok).to.be.true; - expect(res.status).to.equal(200); - }); - }); - - it('should support wrapping Request instance', function() { - url = base + '/hello'; - - var form = new FormData(); - form.append('a', '1'); - - var r1 = new Request(url, { - method: 'POST' - , follow: 1 - , body: form - }); - var r2 = new Request(r1, { - follow: 2 - }); - - expect(r2.url).to.equal(url); - expect(r2.method).to.equal('POST'); - // note that we didn't clone the body - expect(r2.body).to.equal(form); - expect(r1.follow).to.equal(1); - expect(r2.follow).to.equal(2); - expect(r1.counter).to.equal(0); - expect(r2.counter).to.equal(0); - }); - - it('should support overwrite Request instance', function() { - url = base + '/inspect'; - var req = new Request(url, { - method: 'POST' - , headers: { - a: '1' - } - }); - return fetch(req, { - method: 'GET' - , headers: { - a: '2' - } - }).then(function(res) { - return res.json(); - }).then(function(body) { - expect(body.method).to.equal('GET'); - expect(body.headers.a).to.equal('2'); - }); - }); - - it('should support empty options in Response constructor', function() { - var body = resumer().queue('a=1').end(); - body = body.pipe(new stream.PassThrough()); - var res = new Response(body); - return res.text().then(function(result) { - expect(result).to.equal('a=1'); - }); - }); - - it('should support parsing headers in Response constructor', function() { - var res = new Response(null, { - headers: { - a: '1' - } - }); - expect(res.headers.get('a')).to.equal('1'); - }); - - it('should support text() method in Response constructor', function() { - var res = new Response('a=1'); - return res.text().then(function(result) { - expect(result).to.equal('a=1'); - }); - }); - - it('should support json() method in Response constructor', function() { - var res = new Response('{"a":1}'); - return res.json().then(function(result) { - expect(result.a).to.equal(1); - }); - }); - - it('should support buffer() method in Response constructor', function() { - var res = new Response('a=1'); - return res.buffer().then(function(result) { - expect(result.toString()).to.equal('a=1'); - }); - }); - - it('should support clone() method in Response constructor', function() { - var body = resumer().queue('a=1').end(); - body = body.pipe(new stream.PassThrough()); - var res = new Response(body, { - headers: { - a: '1' - } - , url: base - , status: 346 - , statusText: 'production' - }); - var cl = res.clone(); - expect(cl.headers.get('a')).to.equal('1'); - expect(cl.url).to.equal(base); - expect(cl.status).to.equal(346); - expect(cl.statusText).to.equal('production'); - expect(cl.ok).to.be.false; - // clone body shouldn't be the same body - expect(cl.body).to.not.equal(body); - return cl.text().then(function(result) { - expect(result).to.equal('a=1'); - }); - }); - - it('should support stream as body in Response constructor', function() { - var body = resumer().queue('a=1').end(); - body = body.pipe(new stream.PassThrough()); - var res = new Response(body); - return res.text().then(function(result) { - expect(result).to.equal('a=1'); - }); - }); - - it('should support string as body in Response constructor', function() { - var res = new Response('a=1'); - return res.text().then(function(result) { - expect(result).to.equal('a=1'); - }); - }); - - it('should support buffer as body in Response constructor', function() { - var res = new Response(new Buffer('a=1')); - return res.text().then(function(result) { - expect(result).to.equal('a=1'); - }); - }); - - it('should default to 200 as status code', function() { - var res = new Response(null); - expect(res.status).to.equal(200); - }); - - it('should support parsing headers in Request constructor', function() { - url = base; - var req = new Request(url, { - headers: { - a: '1' - } - }); - expect(req.url).to.equal(url); - expect(req.headers.get('a')).to.equal('1'); - }); - - it('should support text() method in Request constructor', function() { - url = base; - var req = new Request(url, { - body: 'a=1' - }); - expect(req.url).to.equal(url); - return req.text().then(function(result) { - expect(result).to.equal('a=1'); - }); - }); - - it('should support json() method in Request constructor', function() { - url = base; - var req = new Request(url, { - body: '{"a":1}' - }); - expect(req.url).to.equal(url); - return req.json().then(function(result) { - expect(result.a).to.equal(1); - }); - }); - - it('should support buffer() method in Request constructor', function() { - url = base; - var req = new Request(url, { - body: 'a=1' - }); - expect(req.url).to.equal(url); - return req.buffer().then(function(result) { - expect(result.toString()).to.equal('a=1'); - }); - }); - - it('should support arbitrary url in Request constructor', function() { - url = 'anything'; - var req = new Request(url); - expect(req.url).to.equal('anything'); - }); - - it('should support clone() method in Request constructor', function() { - url = base; - var body = resumer().queue('a=1').end(); - body = body.pipe(new stream.PassThrough()); - var agent = new http.Agent(); - var req = new Request(url, { - body: body - , method: 'POST' - , redirect: 'manual' - , headers: { - b: '2' - } - , follow: 3 - , compress: false - , agent: agent - }); - var cl = req.clone(); - expect(cl.url).to.equal(url); - expect(cl.method).to.equal('POST'); - expect(cl.redirect).to.equal('manual'); - expect(cl.headers.get('b')).to.equal('2'); - expect(cl.follow).to.equal(3); - expect(cl.compress).to.equal(false); - expect(cl.method).to.equal('POST'); - expect(cl.counter).to.equal(0); - expect(cl.agent).to.equal(agent); - // clone body shouldn't be the same body - expect(cl.body).to.not.equal(body); - return fetch.Promise.all([cl.text(), req.text()]).then(function(results) { - expect(results[0]).to.equal('a=1'); - expect(results[1]).to.equal('a=1'); - }); - }); - - it('should support text(), json() and buffer() method in Body constructor', function() { - var body = new Body('a=1'); - expect(body).to.have.property('text'); - expect(body).to.have.property('json'); - expect(body).to.have.property('buffer'); - }); - - it('should create custom FetchError', function() { - var systemError = new Error('system'); - systemError.code = 'ESOMEERROR'; - - var err = new FetchError('test message', 'test-error', systemError); - expect(err).to.be.an.instanceof(Error); - expect(err).to.be.an.instanceof(FetchError); - expect(err.name).to.equal('FetchError'); - expect(err.message).to.equal('test message'); - expect(err.type).to.equal('test-error'); - expect(err.code).to.equal('ESOMEERROR'); - expect(err.errno).to.equal('ESOMEERROR'); - }); - - it('should support https request', function() { - this.timeout(5000); - url = 'https://github.com/'; - opts = { - method: 'HEAD' - }; - return fetch(url, opts).then(function(res) { - expect(res.status).to.equal(200); - expect(res.ok).to.be.true; - }); - }); - -}); diff --git a/node_modules/node-uuid/.npmignore b/node_modules/node-uuid/.npmignore deleted file mode 100644 index 8886139..0000000 --- a/node_modules/node-uuid/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -.DS_Store -.nyc_output -coverage diff --git a/node_modules/node-uuid/LICENSE.md b/node_modules/node-uuid/LICENSE.md deleted file mode 100644 index 652609b..0000000 --- a/node_modules/node-uuid/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2010-2012 Robert Kieffer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/node-uuid/README.md b/node_modules/node-uuid/README.md deleted file mode 100644 index 5cd8555..0000000 --- a/node_modules/node-uuid/README.md +++ /dev/null @@ -1,254 +0,0 @@ -# node-uuid - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid'). -* Cryptographically strong random # generation - * `crypto.randomBytes(n)` in node.js - * `window.crypto.getRandomValues(ta)` in [supported browsers](https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues#Browser_Compatibility) -* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) -* Comes with a Command Line Interface for generating uuids on the command line - -## Getting Started - -Install it in your browser: - -```html - -``` - -Or in node.js: - -``` -npm install node-uuid -``` - -```javascript -var uuid = require('node-uuid'); -``` - -Then create some ids ... - -```javascript -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the node-uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Command Line Interface - -To use the executable, it's probably best to install this library globally. - -`npm install -g node-uuid` - -Usage: - -``` -USAGE: uuid [version] [options] - - -options: - ---help Display this message and exit -``` - -`version` must be an RFC4122 version that is supported by this library, which is currently version 1 and version 4 (denoted by "v1" and "v4", respectively). `version` defaults to version 4 when not supplied. - -### Examples - -``` -> uuid -3a91f950-dec8-4688-ba14-5b7bbfc7a563 -``` - -``` -> uuid v1 -9d0b43e0-7696-11e3-964b-250efa37a98e -``` - -``` -> uuid v4 -6790ac7c-24ac-4f98-8464-42f6d98a53ae -``` - -## Testing - -In node.js - -``` -npm test -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.6 - -* Properly detect node crypto and whatwg crypto -* Workaround phantomjs/browserify bug -* Explicit check for `window` rather implicit this-global -* Issue warning if Math.random() is being used -* "use strict"; -* A few jshint / stylistic updates (=== and such) - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/node-uuid/benchmark/README.md b/node_modules/node-uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea..0000000 --- a/node_modules/node-uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/node-uuid/benchmark/bench.gnu b/node_modules/node-uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbb..0000000 --- a/node_modules/node-uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/node-uuid/benchmark/bench.sh b/node_modules/node-uuid/benchmark/bench.sh deleted file mode 100755 index d870a0c..0000000 --- a/node_modules/node-uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/node-uuid/benchmark/benchmark-native.c b/node_modules/node-uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f..0000000 --- a/node_modules/node-uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include -#include -#include -#include - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/node-uuid/benchmark/benchmark.js b/node_modules/node-uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efb..0000000 --- a/node_modules/node-uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/node-uuid/bin/uuid b/node_modules/node-uuid/bin/uuid deleted file mode 100755 index f732e99..0000000 --- a/node_modules/node-uuid/bin/uuid +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env node - -var path = require('path'); -var uuid = require(path.join(__dirname, '..')); - -var arg = process.argv[2]; - -if ('--help' === arg) { - console.log('\n USAGE: uuid [version] [options]\n\n'); - console.log(' options:\n'); - console.log(' --help Display this message and exit\n'); - process.exit(0); -} - -if (null == arg) { - console.log(uuid()); - process.exit(0); -} - -if ('v1' !== arg && 'v4' !== arg) { - console.error('Version must be RFC4122 version 1 or version 4, denoted as "v1" or "v4"'); - process.exit(1); -} - -console.log(uuid[arg]()); -process.exit(0); diff --git a/node_modules/node-uuid/bower.json b/node_modules/node-uuid/bower.json deleted file mode 100644 index c0925e1..0000000 --- a/node_modules/node-uuid/bower.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "node-uuid", - "version": "1.4.7", - "homepage": "https://github.com/broofa/node-uuid", - "authors": [ - "Robert Kieffer " - ], - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "main": "uuid.js", - "keywords": [ - "uuid", - "gid", - "rfc4122" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/node_modules/node-uuid/component.json b/node_modules/node-uuid/component.json deleted file mode 100644 index 3ff4633..0000000 --- a/node_modules/node-uuid/component.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "node-uuid", - "repo": "broofa/node-uuid", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "version": "1.4.7", - "author": "Robert Kieffer ", - "contributors": [ - { - "name": "Christoph Tavan ", - "github": "https://github.com/ctavan" - } - ], - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "dependencies": {}, - "development": {}, - "main": "uuid.js", - "scripts": [ - "uuid.js" - ], - "license": "MIT" -} \ No newline at end of file diff --git a/node_modules/node-uuid/package.json b/node_modules/node-uuid/package.json deleted file mode 100644 index f0c516e..0000000 --- a/node_modules/node-uuid/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "node-uuid@~1.4.7", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "node-uuid@>=1.4.7 <1.5.0", - "_id": "node-uuid@1.4.7", - "_inCache": true, - "_installable": true, - "_location": "/node-uuid", - "_nodeVersion": "5.0.0", - "_npmUser": { - "email": "coolaj86@gmail.com", - "name": "coolaj86" - }, - "_npmVersion": "3.3.6", - "_phantomChildren": {}, - "_requested": { - "name": "node-uuid", - "raw": "node-uuid@~1.4.7", - "rawSpec": "~1.4.7", - "scope": null, - "spec": ">=1.4.7 <1.5.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "_shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f", - "_shrinkwrap": null, - "_spec": "node-uuid@~1.4.7", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "robert@broofa.com", - "name": "Robert Kieffer" - }, - "bin": { - "uuid": "./bin/uuid" - }, - "bugs": { - "url": "https://github.com/broofa/node-uuid/issues" - }, - "contributors": [ - { - "email": "coolaj86@gmail.com", - "name": "AJ ONeal" - }, - { - "email": "dev@tavan.de", - "name": "Christoph Tavan" - } - ], - "dependencies": {}, - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "devDependencies": { - "nyc": "^2.2.0" - }, - "directories": {}, - "dist": { - "shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f", - "tarball": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz" - }, - "gitHead": "309512573ec1c60143c257157479a20f7f1f51cd", - "homepage": "https://github.com/broofa/node-uuid", - "installable": true, - "keywords": [ - "guid", - "rfc4122", - "uuid" - ], - "lib": ".", - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/broofa/node-uuid/master/LICENSE.md" - } - ], - "main": "./uuid.js", - "maintainers": [ - { - "email": "robert@broofa.com", - "name": "broofa" - }, - { - "email": "coolaj86@gmail.com", - "name": "coolaj86" - } - ], - "name": "node-uuid", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/broofa/node-uuid.git" - }, - "scripts": { - "coverage": "nyc npm test && nyc report", - "test": "node test/test.js" - }, - "url": "http://github.com/broofa/node-uuid", - "version": "1.4.7" -} diff --git a/node_modules/node-uuid/test/compare_v1.js b/node_modules/node-uuid/test/compare_v1.js deleted file mode 100644 index 05af822..0000000 --- a/node_modules/node-uuid/test/compare_v1.js +++ /dev/null @@ -1,63 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../uuid'), - uuidjs = require('uuid-js'), - libuuid = require('uuid').generate, - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/node-uuid/test/test.html b/node_modules/node-uuid/test/test.html deleted file mode 100644 index d80326e..0000000 --- a/node_modules/node-uuid/test/test.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/node_modules/node-uuid/test/test.js b/node_modules/node-uuid/test/test.js deleted file mode 100644 index 5f1113d..0000000 --- a/node_modules/node-uuid/test/test.js +++ /dev/null @@ -1,231 +0,0 @@ -if (!this.uuid) { - // node.js - uuid = require('../uuid'); - if (!/_rb/.test(uuid._rng.toString())) { - throw new Error("should use crypto for node.js"); - } -} - -// -// x-platform log/assert shims -// - -function _log(msg, type) { - type = type || 'log'; - - if (typeof(document) != 'undefined') { - document.write('
    ' + msg.replace(/\n/g, '
    ') + '
    '); - } - if (typeof(console) != 'undefined') { - var color = { - log: '\033[39m', - warn: '\033[33m', - error: '\033[31m' - }; - console[type](color[type] + msg + color.log); - } -} - -function log(msg) {_log(msg, 'log');} -function warn(msg) {_log(msg, 'warn');} -function error(msg) {_log(msg, 'error');} - -function assert(res, msg) { - if (!res) { - error('FAIL: ' + msg); - } else { - log('Pass: ' + msg); - } -} - -// -// Unit tests -// - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - ids = ids.map(function(id) { - return id.split('-').reverse().join('-'); - }).sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' -); - -// Verify throw if too many ids created -var thrown = false; -try { - uuid.v1({msecs: TIME, nsecs: 10000}); -} catch (e) { - thrown = true; -} -assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); - -// Verify clock regression bumps clockseq -var uidt = uuid.v1({msecs: TIME}); -var uidtb = uuid.v1({msecs: TIME - 1}); -assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' -); - -// Verify clock regression bumps clockseq -var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); -var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); -assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' -); - -// Verify explicit options produce expected id -var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] -}); -assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); - -// Verify adjacent ids across a msec boundary are 1 time unit apart -var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); -var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - -var before = u0.split('-')[0], after = u1.split('-')[0]; -var dt = parseInt(after, 16) - parseInt(before, 16); -assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); - -// -// Test parse/unparse -// - -id = '00112233445566778899aabbccddeeff'; -assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); -assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); - -// -// Perf tests -// - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/node-uuid/uuid.js b/node_modules/node-uuid/uuid.js deleted file mode 100644 index 89c5b8f..0000000 --- a/node_modules/node-uuid/uuid.js +++ /dev/null @@ -1,272 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -/*global window, require, define */ -(function(_window) { - 'use strict'; - - // Unique ID creation requires a high quality random # generator. We feature - // detect to determine the best RNG source, normalizing to a function that - // returns 128-bits of randomness, since that's what's usually required - var _rng, _mathRNG, _nodeRNG, _whatwgRNG, _previousRoot; - - function setupBrowser() { - // Allow for MSIE11 msCrypto - var _crypto = _window.crypto || _window.msCrypto; - - if (!_rng && _crypto && _crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // - // Moderately fast, high quality - try { - var _rnds8 = new Uint8Array(16); - _whatwgRNG = _rng = function whatwgRNG() { - _crypto.getRandomValues(_rnds8); - return _rnds8; - }; - _rng(); - } catch(e) {} - } - - if (!_rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - _mathRNG = _rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) { r = Math.random() * 0x100000000; } - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; - if ('undefined' !== typeof console && console.warn) { - console.warn("[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()"); - } - } - } - - function setupNode() { - // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html - // - // Moderately fast, high quality - if ('function' === typeof require) { - try { - var _rb = require('crypto').randomBytes; - _nodeRNG = _rng = _rb && function() {return _rb(16);}; - _rng(); - } catch(e) {} - } - } - - if (_window) { - setupBrowser(); - } else { - setupNode(); - } - - // Buffer class to use - var BufferClass = ('function' === typeof Buffer) ? Buffer : Array; - - // Maps for number <-> hex string conversion - var _byteToHex = []; - var _hexToByte = {}; - for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; - } - - // **`parse()` - Parse a UUID into it's component bytes** - function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; - } - - // **`unparse()` - Convert UUID byte array (ala parse()) into a string** - function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; - } - - // **`v1()` - Generate time-based UUID** - // - // Inspired by https://github.com/LiosK/UUID.js - // and http://docs.python.org/library/uuid.html - - // random #'s we need to init node and clockseq - var _seedBytes = _rng(); - - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] - ]; - - // Per 4.2.2, randomize (14 bit) clockseq - var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - - // Previous uuid creation time - var _lastMSecs = 0, _lastNSecs = 0; - - // See https://github.com/broofa/node-uuid for API details - function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = (options.clockseq != null) ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = (options.msecs != null) ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = (options.nsecs != null) ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq == null) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); - } - - // **`v4()` - Generate random UUID** - - // See https://github.com/broofa/node-uuid for API details - function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) === 'string') { - buf = (options === 'binary') ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); - } - - // Export public API - var uuid = v4; - uuid.v1 = v1; - uuid.v4 = v4; - uuid.parse = parse; - uuid.unparse = unparse; - uuid.BufferClass = BufferClass; - uuid._rng = _rng; - uuid._mathRNG = _mathRNG; - uuid._nodeRNG = _nodeRNG; - uuid._whatwgRNG = _whatwgRNG; - - if (('undefined' !== typeof module) && module.exports) { - // Publish as node.js module - module.exports = uuid; - } else if (typeof define === 'function' && define.amd) { - // Publish as AMD module - define(function() {return uuid;}); - - - } else { - // Publish as global (in browsers) - _previousRoot = _window.uuid; - - // **`noConflict()` - (browser only) to reset global 'uuid' var** - uuid.noConflict = function() { - _window.uuid = _previousRoot; - return uuid; - }; - - _window.uuid = uuid; - } -})('undefined' !== typeof window ? window : null); diff --git a/node_modules/normalize-package-data/.npmignore b/node_modules/normalize-package-data/.npmignore deleted file mode 100644 index 096746c..0000000 --- a/node_modules/normalize-package-data/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules/ \ No newline at end of file diff --git a/node_modules/normalize-package-data/.travis.yml b/node_modules/normalize-package-data/.travis.yml deleted file mode 100644 index 6e5919d..0000000 --- a/node_modules/normalize-package-data/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/normalize-package-data/AUTHORS b/node_modules/normalize-package-data/AUTHORS deleted file mode 100644 index 10860f7..0000000 --- a/node_modules/normalize-package-data/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -# Names sorted by how much code was originally theirs. -Isaac Z. Schlueter -Meryn Stol -Robert Kowalski \ No newline at end of file diff --git a/node_modules/normalize-package-data/LICENSE b/node_modules/normalize-package-data/LICENSE deleted file mode 100644 index 9cea2e3..0000000 --- a/node_modules/normalize-package-data/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -This package contains code originally written by Isaac Z. Schlueter. -Used with permission. - -Copyright (c) Meryn Stol ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/normalize-package-data/README.md b/node_modules/normalize-package-data/README.md deleted file mode 100644 index 526745e..0000000 --- a/node_modules/normalize-package-data/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# normalize-package-data [![Build Status](https://travis-ci.org/npm/normalize-package-data.png?branch=master)](https://travis-ci.org/npm/normalize-package-data) - -normalize-package data exports a function that normalizes package metadata. This data is typically found in a package.json file, but in principle could come from any source - for example the npm registry. - -normalize-package-data is used by [read-package-json](https://npmjs.org/package/read-package-json) to normalize the data it reads from a package.json file. In turn, read-package-json is used by [npm](https://npmjs.org/package/npm) and various npm-related tools. - -## Installation - -``` -npm install normalize-package-data -``` - -## Usage - -Basic usage is really simple. You call the function that normalize-package-data exports. Let's call it `normalizeData`. - -```javascript -normalizeData = require('normalize-package-data') -packageData = fs.readFileSync("package.json") -normalizeData(packageData) -// packageData is now normalized -``` - -#### Strict mode - -You may activate strict validation by passing true as the second argument. - -```javascript -normalizeData = require('normalize-package-data') -packageData = fs.readFileSync("package.json") -warnFn = function(msg) { console.error(msg) } -normalizeData(packageData, true) -// packageData is now normalized -``` - -If strict mode is activated, only Semver 2.0 version strings are accepted. Otherwise, Semver 1.0 strings are accepted as well. Packages must have a name, and the name field must not have contain leading or trailing whitespace. - -#### Warnings - -Optionally, you may pass a "warning" function. It gets called whenever the `normalizeData` function encounters something that doesn't look right. It indicates less than perfect input data. - -```javascript -normalizeData = require('normalize-package-data') -packageData = fs.readFileSync("package.json") -warnFn = function(msg) { console.error(msg) } -normalizeData(packageData, warnFn) -// packageData is now normalized. Any number of warnings may have been logged. -``` - -You may combine strict validation with warnings by passing `true` as the second argument, and `warnFn` as third. - -When `private` field is set to `true`, warnings will be suppressed. - -### Potential exceptions - -If the supplied data has an invalid name or version vield, `normalizeData` will throw an error. Depending on where you call `normalizeData`, you may want to catch these errors so can pass them to a callback. - -## What normalization (currently) entails - -* The value of `name` field gets trimmed (unless in strict mode). -* The value of the `version` field gets cleaned by `semver.clean`. See [documentation for the semver module](https://github.com/isaacs/node-semver). -* If `name` and/or `version` fields are missing, they are set to empty strings. -* If `files` field is not an array, it will be removed. -* If `bin` field is a string, then `bin` field will become an object with `name` set to the value of the `name` field, and `bin` set to the original string value. -* If `man` field is a string, it will become an array with the original string as its sole member. -* If `keywords` field is string, it is considered to be a list of keywords separated by one or more white-space characters. It gets converted to an array by splitting on `\s+`. -* All people fields (`author`, `maintainers`, `contributors`) get converted into objects with name, email and url properties. -* If `bundledDependencies` field (a typo) exists and `bundleDependencies` field does not, `bundledDependencies` will get renamed to `bundleDependencies`. -* If the value of any of the dependencies fields (`dependencies`, `devDependencies`, `optionalDependencies`) is a string, it gets converted into an object with familiar `name=>value` pairs. -* The values in `optionalDependencies` get added to `dependencies`. The `optionalDependencies` array is left untouched. -* As of v2: Dependencies that point at known hosted git providers (currently: github, bitbucket, gitlab) will have their URLs canonicalized, but protocols will be preserved. -* As of v2: Dependencies that use shortcuts for hosted git providers (`org/proj`, `github:org/proj`, `bitbucket:org/proj`, `gitlab:org/proj`, `gist:docid`) will have the shortcut left in place. (In the case of github, the `org/proj` form will be expanded to `github:org/proj`.) THIS MARKS A BREAKING CHANGE FROM V1, where the shorcut was previously expanded to a URL. -* If `description` field does not exist, but `readme` field does, then (more or less) the first paragraph of text that's found in the readme is taken as value for `description`. -* If `repository` field is a string, it will become an object with `url` set to the original string value, and `type` set to `"git"`. -* If `repository.url` is not a valid url, but in the style of "[owner-name]/[repo-name]", `repository.url` will be set to git+https://github.com/[owner-name]/[repo-name].git -* If `bugs` field is a string, the value of `bugs` field is changed into an object with `url` set to the original string value. -* If `bugs` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `bugs` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/issues . If the repository field points to a GitHub Gist repo url, the associated http url is chosen. -* If `bugs` field is an object, the resulting value only has email and url properties. If email and url properties are not strings, they are ignored. If no valid values for either email or url is found, bugs field will be removed. -* If `homepage` field is not a string, it will be removed. -* If the url in the `homepage` field does not specify a protocol, then http is assumed. For example, `myproject.org` will be changed to `http://myproject.org`. -* If `homepage` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `homepage` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/ . If the repository field points to a GitHub Gist repo url, the associated http url is chosen. - -### Rules for name field - -If `name` field is given, the value of the name field must be a string. The string may not: - -* start with a period. -* contain the following characters: `/@\s+%` -* contain and characters that would need to be encoded for use in urls. -* resemble the word `node_modules` or `favicon.ico` (case doesn't matter). - -### Rules for version field - -If `version` field is given, the value of the version field must be a valid *semver* string, as determined by the `semver.valid` method. See [documentation for the semver module](https://github.com/isaacs/node-semver). - -### Rules for license field - -The `license` field should be a valid *SPDX license expression* or one of the special values allowed by [validate-npm-package-license](https://npmjs.com/packages/validate-npm-package-license). See [documentation for the license field in package.json](https://docs.npmjs.com/files/package.json#license). - -## Credits - -This package contains code based on read-package-json written by Isaac Z. Schlueter. Used with permisson. - -## License - -normalize-package-data is released under the [BSD 2-Clause License](http://opensource.org/licenses/MIT). -Copyright (c) 2013 Meryn Stol diff --git a/node_modules/normalize-package-data/lib/extract_description.js b/node_modules/normalize-package-data/lib/extract_description.js deleted file mode 100644 index 83f10aa..0000000 --- a/node_modules/normalize-package-data/lib/extract_description.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = extractDescription - -// Extracts description from contents of a readme file in markdown format -function extractDescription (d) { - if (!d) return; - if (d === "ERROR: No README data found!") return; - // the first block of text before the first heading - // that isn't the first line heading - d = d.trim().split('\n') - for (var s = 0; d[s] && d[s].trim().match(/^(#|$)/); s ++); - var l = d.length - for (var e = s + 1; e < l && d[e].trim(); e ++); - return d.slice(s, e).join(' ').trim() -} diff --git a/node_modules/normalize-package-data/lib/fixer.js b/node_modules/normalize-package-data/lib/fixer.js deleted file mode 100644 index 1409c69..0000000 --- a/node_modules/normalize-package-data/lib/fixer.js +++ /dev/null @@ -1,418 +0,0 @@ -var semver = require("semver") -var validateLicense = require('validate-npm-package-license'); -var hostedGitInfo = require("hosted-git-info") -var isBuiltinModule = require("is-builtin-module") -var depTypes = ["dependencies","devDependencies","optionalDependencies"] -var extractDescription = require("./extract_description") -var url = require("url") -var typos = require("./typos") - -var fixer = module.exports = { - // default warning function - warn: function() {}, - - fixRepositoryField: function(data) { - if (data.repositories) { - this.warn("repositories"); - data.repository = data.repositories[0] - } - if (!data.repository) return this.warn("missingRepository") - if (typeof data.repository === "string") { - data.repository = { - type: "git", - url: data.repository - } - } - var r = data.repository.url || "" - if (r) { - var hosted = hostedGitInfo.fromUrl(r) - if (hosted) { - r = data.repository.url - = hosted.getDefaultRepresentation() == "shortcut" ? hosted.https() : hosted.toString() - } - } - - if (r.match(/github.com\/[^\/]+\/[^\/]+\.git\.git$/)) { - this.warn("brokenGitUrl", r) - } - } - -, fixTypos: function(data) { - Object.keys(typos.topLevel).forEach(function (d) { - if (data.hasOwnProperty(d)) { - this.warn("typo", d, typos.topLevel[d]) - } - }, this) - } - -, fixScriptsField: function(data) { - if (!data.scripts) return - if (typeof data.scripts !== "object") { - this.warn("nonObjectScripts") - delete data.scripts - return - } - Object.keys(data.scripts).forEach(function (k) { - if (typeof data.scripts[k] !== "string") { - this.warn("nonStringScript") - delete data.scripts[k] - } else if (typos.script[k] && !data.scripts[typos.script[k]]) { - this.warn("typo", k, typos.script[k], "scripts") - } - }, this) - } - -, fixFilesField: function(data) { - var files = data.files - if (files && !Array.isArray(files)) { - this.warn("nonArrayFiles") - delete data.files - } else if (data.files) { - data.files = data.files.filter(function(file) { - if (!file || typeof file !== "string") { - this.warn("invalidFilename", file) - return false - } else { - return true - } - }, this) - } - } - -, fixBinField: function(data) { - if (!data.bin) return; - if (typeof data.bin === "string") { - var b = {} - var match - if (match = data.name.match(/^@[^/]+[/](.*)$/)) { - b[match[1]] = data.bin - } else { - b[data.name] = data.bin - } - data.bin = b - } - } - -, fixManField: function(data) { - if (!data.man) return; - if (typeof data.man === "string") { - data.man = [ data.man ] - } - } -, fixBundleDependenciesField: function(data) { - var bdd = "bundledDependencies" - var bd = "bundleDependencies" - if (data[bdd] && !data[bd]) { - data[bd] = data[bdd] - delete data[bdd] - } - if (data[bd] && !Array.isArray(data[bd])) { - this.warn("nonArrayBundleDependencies") - delete data[bd] - } else if (data[bd]) { - data[bd] = data[bd].filter(function(bd) { - if (!bd || typeof bd !== 'string') { - this.warn("nonStringBundleDependency", bd) - return false - } else { - if (!data.dependencies) { - data.dependencies = {} - } - if (!data.dependencies.hasOwnProperty(bd)) { - this.warn("nonDependencyBundleDependency", bd) - data.dependencies[bd] = "*" - } - return true - } - }, this) - } - } - -, fixDependencies: function(data, strict) { - var loose = !strict - objectifyDeps(data, this.warn) - addOptionalDepsToDeps(data, this.warn) - this.fixBundleDependenciesField(data) - - ;['dependencies','devDependencies'].forEach(function(deps) { - if (!(deps in data)) return - if (!data[deps] || typeof data[deps] !== "object") { - this.warn("nonObjectDependencies", deps) - delete data[deps] - return - } - Object.keys(data[deps]).forEach(function (d) { - var r = data[deps][d] - if (typeof r !== 'string') { - this.warn("nonStringDependency", d, JSON.stringify(r)) - delete data[deps][d] - } - var hosted = hostedGitInfo.fromUrl(data[deps][d]) - if (hosted) data[deps][d] = hosted.toString() - }, this) - }, this) - } - -, fixModulesField: function (data) { - if (data.modules) { - this.warn("deprecatedModules") - delete data.modules - } - } - -, fixKeywordsField: function (data) { - if (typeof data.keywords === "string") { - data.keywords = data.keywords.split(/,\s+/) - } - if (data.keywords && !Array.isArray(data.keywords)) { - delete data.keywords - this.warn("nonArrayKeywords") - } else if (data.keywords) { - data.keywords = data.keywords.filter(function(kw) { - if (typeof kw !== "string" || !kw) { - this.warn("nonStringKeyword"); - return false - } else { - return true - } - }, this) - } - } - -, fixVersionField: function(data, strict) { - // allow "loose" semver 1.0 versions in non-strict mode - // enforce strict semver 2.0 compliance in strict mode - var loose = !strict - if (!data.version) { - data.version = "" - return true - } - if (!semver.valid(data.version, loose)) { - throw new Error('Invalid version: "'+ data.version + '"') - } - data.version = semver.clean(data.version, loose) - return true - } - -, fixPeople: function(data) { - modifyPeople(data, unParsePerson) - modifyPeople(data, parsePerson) - } - -, fixNameField: function(data, options) { - if (typeof options === "boolean") options = {strict: options} - else if (typeof options === "undefined") options = {} - var strict = options.strict - if (!data.name && !strict) { - data.name = "" - return - } - if (typeof data.name !== "string") { - throw new Error("name field must be a string.") - } - if (!strict) - data.name = data.name.trim() - ensureValidName(data.name, strict, options.allowLegacyCase) - if (isBuiltinModule(data.name)) - this.warn("conflictingName", data.name) - } - - -, fixDescriptionField: function (data) { - if (data.description && typeof data.description !== 'string') { - this.warn("nonStringDescription") - delete data.description - } - if (data.readme && !data.description) - data.description = extractDescription(data.readme) - if(data.description === undefined) delete data.description; - if (!data.description) this.warn("missingDescription") - } - -, fixReadmeField: function (data) { - if (!data.readme) { - this.warn("missingReadme") - data.readme = "ERROR: No README data found!" - } - } - -, fixBugsField: function(data) { - if (!data.bugs && data.repository && data.repository.url) { - var hosted = hostedGitInfo.fromUrl(data.repository.url) - if(hosted && hosted.bugs()) { - data.bugs = {url: hosted.bugs()} - } - } - else if(data.bugs) { - var emailRe = /^.+@.*\..+$/ - if(typeof data.bugs == "string") { - if(emailRe.test(data.bugs)) - data.bugs = {email:data.bugs} - else if(url.parse(data.bugs).protocol) - data.bugs = {url: data.bugs} - else - this.warn("nonEmailUrlBugsString") - } - else { - bugsTypos(data.bugs, this.warn) - var oldBugs = data.bugs - data.bugs = {} - if(oldBugs.url) { - if(typeof(oldBugs.url) == "string" && url.parse(oldBugs.url).protocol) - data.bugs.url = oldBugs.url - else - this.warn("nonUrlBugsUrlField") - } - if(oldBugs.email) { - if(typeof(oldBugs.email) == "string" && emailRe.test(oldBugs.email)) - data.bugs.email = oldBugs.email - else - this.warn("nonEmailBugsEmailField") - } - } - if(!data.bugs.email && !data.bugs.url) { - delete data.bugs - this.warn("emptyNormalizedBugs") - } - } - } - -, fixHomepageField: function(data) { - if (!data.homepage && data.repository && data.repository.url) { - var hosted = hostedGitInfo.fromUrl(data.repository.url) - if (hosted && hosted.docs()) data.homepage = hosted.docs() - } - if (!data.homepage) return - - if(typeof data.homepage !== "string") { - this.warn("nonUrlHomepage") - return delete data.homepage - } - if(!url.parse(data.homepage).protocol) { - this.warn("missingProtocolHomepage") - data.homepage = "http://" + data.homepage - } - } - -, fixLicenseField: function(data) { - if (!data.license) { - return this.warn("missingLicense") - } else{ - if ( - typeof(data.license) !== 'string' || - data.license.length < 1 - ) { - this.warn("invalidLicense") - } else { - if (!validateLicense(data.license).validForNewPackages) - this.warn("invalidLicense") - } - } - } -} - -function isValidScopedPackageName(spec) { - if (spec.charAt(0) !== '@') return false - - var rest = spec.slice(1).split('/') - if (rest.length !== 2) return false - - return rest[0] && rest[1] && - rest[0] === encodeURIComponent(rest[0]) && - rest[1] === encodeURIComponent(rest[1]) -} - -function isCorrectlyEncodedName(spec) { - return !spec.match(/[\/@\s\+%:]/) && - spec === encodeURIComponent(spec) -} - -function ensureValidName (name, strict, allowLegacyCase) { - if (name.charAt(0) === "." || - !(isValidScopedPackageName(name) || isCorrectlyEncodedName(name)) || - (strict && (!allowLegacyCase) && name !== name.toLowerCase()) || - name.toLowerCase() === "node_modules" || - name.toLowerCase() === "favicon.ico") { - throw new Error("Invalid name: " + JSON.stringify(name)) - } -} - -function modifyPeople (data, fn) { - if (data.author) data.author = fn(data.author) - ;["maintainers", "contributors"].forEach(function (set) { - if (!Array.isArray(data[set])) return; - data[set] = data[set].map(fn) - }) - return data -} - -function unParsePerson (person) { - if (typeof person === "string") return person - var name = person.name || "" - var u = person.url || person.web - var url = u ? (" ("+u+")") : "" - var e = person.email || person.mail - var email = e ? (" <"+e+">") : "" - return name+email+url -} - -function parsePerson (person) { - if (typeof person !== "string") return person - var name = person.match(/^([^\(<]+)/) - var url = person.match(/\(([^\)]+)\)/) - var email = person.match(/<([^>]+)>/) - var obj = {} - if (name && name[0].trim()) obj.name = name[0].trim() - if (email) obj.email = email[1]; - if (url) obj.url = url[1]; - return obj -} - -function addOptionalDepsToDeps (data, warn) { - var o = data.optionalDependencies - if (!o) return; - var d = data.dependencies || {} - Object.keys(o).forEach(function (k) { - d[k] = o[k] - }) - data.dependencies = d -} - -function depObjectify (deps, type, warn) { - if (!deps) return {} - if (typeof deps === "string") { - deps = deps.trim().split(/[\n\r\s\t ,]+/) - } - if (!Array.isArray(deps)) return deps - warn("deprecatedArrayDependencies", type) - var o = {} - deps.filter(function (d) { - return typeof d === "string" - }).forEach(function(d) { - d = d.trim().split(/(:?[@\s><=])/) - var dn = d.shift() - var dv = d.join("") - dv = dv.trim() - dv = dv.replace(/^@/, "") - o[dn] = dv - }) - return o -} - -function objectifyDeps (data, warn) { - depTypes.forEach(function (type) { - if (!data[type]) return; - data[type] = depObjectify(data[type], type, warn) - }) -} - -function bugsTypos(bugs, warn) { - if (!bugs) return - Object.keys(bugs).forEach(function (k) { - if (typos.bugs[k]) { - warn("typo", k, typos.bugs[k], "bugs") - bugs[typos.bugs[k]] = bugs[k] - delete bugs[k] - } - }) -} diff --git a/node_modules/normalize-package-data/lib/make_warning.js b/node_modules/normalize-package-data/lib/make_warning.js deleted file mode 100644 index 0f3aad5..0000000 --- a/node_modules/normalize-package-data/lib/make_warning.js +++ /dev/null @@ -1,23 +0,0 @@ -var util = require("util") -var messages = require("./warning_messages.json") - -module.exports = function() { - var args = Array.prototype.slice.call(arguments, 0) - var warningName = args.shift() - if (warningName == "typo") { - return makeTypoWarning.apply(null,args) - } - else { - var msgTemplate = messages[warningName] ? messages[warningName] : warningName + ": '%s'" - args.unshift(msgTemplate) - return util.format.apply(null, args) - } -} - -function makeTypoWarning (providedName, probableName, field) { - if (field) { - providedName = field + "['" + providedName + "']" - probableName = field + "['" + probableName + "']" - } - return util.format(messages.typo, providedName, probableName) -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/lib/normalize.js b/node_modules/normalize-package-data/lib/normalize.js deleted file mode 100644 index 7e68c69..0000000 --- a/node_modules/normalize-package-data/lib/normalize.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = normalize - -var fixer = require("./fixer") -normalize.fixer = fixer - -var makeWarning = require("./make_warning") - -var fieldsToFix = ['name','version','description','repository','modules','scripts' - ,'files','bin','man','bugs','keywords','readme','homepage','license'] -var otherThingsToFix = ['dependencies','people', 'typos'] - -var thingsToFix = fieldsToFix.map(function(fieldName) { - return ucFirst(fieldName) + "Field" -}) -// two ways to do this in CoffeeScript on only one line, sub-70 chars: -// thingsToFix = fieldsToFix.map (name) -> ucFirst(name) + "Field" -// thingsToFix = (ucFirst(name) + "Field" for name in fieldsToFix) -thingsToFix = thingsToFix.concat(otherThingsToFix) - -function normalize (data, warn, strict) { - if(warn === true) warn = null, strict = true - if(!strict) strict = false - if(!warn || data.private) warn = function(msg) { /* noop */ } - - if (data.scripts && - data.scripts.install === "node-gyp rebuild" && - !data.scripts.preinstall) { - data.gypfile = true - } - fixer.warn = function() { warn(makeWarning.apply(null, arguments)) } - thingsToFix.forEach(function(thingName) { - fixer["fix" + ucFirst(thingName)](data, strict) - }) - data._id = data.name + "@" + data.version -} - -function ucFirst (string) { - return string.charAt(0).toUpperCase() + string.slice(1); -} diff --git a/node_modules/normalize-package-data/lib/safe_format.js b/node_modules/normalize-package-data/lib/safe_format.js deleted file mode 100644 index 08517f1..0000000 --- a/node_modules/normalize-package-data/lib/safe_format.js +++ /dev/null @@ -1,9 +0,0 @@ -var util = require('util') - -module.exports = function() { - var args = Array.prototype.slice.call(arguments, 0) - args.forEach(function(arg) { - if (!arg) throw new TypeError('Bad arguments.') - }) - return util.format.apply(null, arguments) -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/lib/typos.json b/node_modules/normalize-package-data/lib/typos.json deleted file mode 100644 index 73590c0..0000000 --- a/node_modules/normalize-package-data/lib/typos.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "topLevel": { - "dependancies": "dependencies" - ,"dependecies": "dependencies" - ,"depdenencies": "dependencies" - ,"devEependencies": "devDependencies" - ,"depends": "dependencies" - ,"dev-dependencies": "devDependencies" - ,"devDependences": "devDependencies" - ,"devDepenencies": "devDependencies" - ,"devdependencies": "devDependencies" - ,"repostitory": "repository" - ,"repo": "repository" - ,"prefereGlobal": "preferGlobal" - ,"hompage": "homepage" - ,"hampage": "homepage" - ,"autohr": "author" - ,"autor": "author" - ,"contributers": "contributors" - ,"publicationConfig": "publishConfig" - ,"script": "scripts" - }, - "bugs": { "web": "url", "name": "url" }, - "script": { "server": "start", "tests": "test" } -} diff --git a/node_modules/normalize-package-data/lib/warning_messages.json b/node_modules/normalize-package-data/lib/warning_messages.json deleted file mode 100644 index 5fd19f3..0000000 --- a/node_modules/normalize-package-data/lib/warning_messages.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "repositories": "'repositories' (plural) Not supported. Please pick one as the 'repository' field" - ,"missingRepository": "No repository field." - ,"brokenGitUrl": "Probably broken git url: %s" - ,"nonObjectScripts": "scripts must be an object" - ,"nonStringScript": "script values must be string commands" - ,"nonArrayFiles": "Invalid 'files' member" - ,"invalidFilename": "Invalid filename in 'files' list: %s" - ,"nonArrayBundleDependencies": "Invalid 'bundleDependencies' list. Must be array of package names" - ,"nonStringBundleDependency": "Invalid bundleDependencies member: %s" - ,"nonDependencyBundleDependency": "Non-dependency in bundleDependencies: %s" - ,"nonObjectDependencies": "%s field must be an object" - ,"nonStringDependency": "Invalid dependency: %s %s" - ,"deprecatedArrayDependencies": "specifying %s as array is deprecated" - ,"deprecatedModules": "modules field is deprecated" - ,"nonArrayKeywords": "keywords should be an array of strings" - ,"nonStringKeyword": "keywords should be an array of strings" - ,"conflictingName": "%s is also the name of a node core module." - ,"nonStringDescription": "'description' field should be a string" - ,"missingDescription": "No description" - ,"missingReadme": "No README data" - ,"missingLicense": "No license field." - ,"nonEmailUrlBugsString": "Bug string field must be url, email, or {email,url}" - ,"nonUrlBugsUrlField": "bugs.url field must be a string url. Deleted." - ,"nonEmailBugsEmailField": "bugs.email field must be a string email. Deleted." - ,"emptyNormalizedBugs": "Normalized value of bugs field is an empty object. Deleted." - ,"nonUrlHomepage": "homepage field must be a string url. Deleted." - ,"invalidLicense": "license should be a valid SPDX license expression" - ,"missingProtocolHomepage": "homepage field must start with a protocol." - ,"typo": "%s should probably be %s." -} diff --git a/node_modules/normalize-package-data/package.json b/node_modules/normalize-package-data/package.json deleted file mode 100644 index 00c854e..0000000 --- a/node_modules/normalize-package-data/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_args": [ - [ - "normalize-package-data@^2.3.2", - "/Users/jbaylina/git/MVP/node_modules/read-pkg" - ] - ], - "_from": "normalize-package-data@>=2.3.2 <3.0.0", - "_id": "normalize-package-data@2.3.5", - "_inCache": true, - "_installable": true, - "_location": "/normalize-package-data", - "_nodeVersion": "5.0.0", - "_npmUser": { - "email": "me@re-becca.org", - "name": "iarna" - }, - "_npmVersion": "3.3.6", - "_phantomChildren": {}, - "_requested": { - "name": "normalize-package-data", - "raw": "normalize-package-data@^2.3.2", - "rawSpec": "^2.3.2", - "scope": null, - "spec": ">=2.3.2 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/read-pkg" - ], - "_resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "_shasum": "8d924f142960e1777e7ffe170543631cc7cb02df", - "_shrinkwrap": null, - "_spec": "normalize-package-data@^2.3.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/read-pkg", - "author": { - "email": "merynstol@gmail.com", - "name": "Meryn Stol" - }, - "bugs": { - "url": "https://github.com/npm/normalize-package-data/issues" - }, - "contributors": [ - { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter" - }, - { - "email": "merynstol@gmail.com", - "name": "Meryn Stol" - }, - { - "email": "rok@kowalski.gd", - "name": "Robert Kowalski" - } - ], - "dependencies": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "description": "Normalizes data that can be found in package.json files.", - "devDependencies": { - "async": "^1.5.0", - "tap": "^2.2.0", - "underscore": "^1.8.3" - }, - "directories": {}, - "dist": { - "shasum": "8d924f142960e1777e7ffe170543631cc7cb02df", - "tarball": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz" - }, - "gitHead": "3dc7756af20b3b1b24c6d75302448ca3659e0a65", - "homepage": "https://github.com/npm/normalize-package-data#readme", - "license": "BSD-2-Clause", - "main": "lib/normalize.js", - "maintainers": [ - { - "email": "me@re-becca.org", - "name": "iarna" - }, - { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - { - "email": "merynstol@gmail.com", - "name": "meryn" - }, - { - "email": "ogd@aoaioxxysz.net", - "name": "othiym23" - }, - { - "email": "kat@sykosomatic.org", - "name": "zkat" - } - ], - "name": "normalize-package-data", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/npm/normalize-package-data.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "2.3.5" -} diff --git a/node_modules/normalize-package-data/test/basic.js b/node_modules/normalize-package-data/test/basic.js deleted file mode 100644 index 12c403e..0000000 --- a/node_modules/normalize-package-data/test/basic.js +++ /dev/null @@ -1,34 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") -var path = require("path") -var fs = require("fs") - -tap.test("basic test", function (t) { - var p = path.resolve(__dirname, "./fixtures/read-package-json.json") - fs.readFile (p, function (err, contents) { - if (err) throw err; - var originalData = JSON.parse(contents.toString()) - var data = JSON.parse(contents.toString()) - normalize(data) - t.ok(data) - verifyFields(t, data, originalData) - t.end() - }) -}) - -function verifyFields (t, normalized, original) { - t.equal(normalized.version, original.version, "Version field stays same") - t.equal(normalized._id, normalized.name + "@" + normalized.version, "It gets good id.") - t.equal(normalized.name, original.name, "Name stays the same.") - t.type(normalized.author, "object", "author field becomes object") - t.deepEqual(normalized.scripts, original.scripts, "scripts field (object) stays same") - t.equal(normalized.main, original.main) - // optional deps are folded in. - t.deepEqual(normalized.optionalDependencies, - original.optionalDependencies) - t.has(normalized.dependencies, original.optionalDependencies, "opt depedencies are copied into dependencies") - t.has(normalized.dependencies, original.dependencies, "regular depedencies stay in place") - t.deepEqual(normalized.devDependencies, original.devDependencies) - t.type(normalized.bugs, "object", "bugs should become object") - t.equal(normalized.bugs.url, "https://github.com/isaacs/read-package-json/issues") -} diff --git a/node_modules/normalize-package-data/test/consistency.js b/node_modules/normalize-package-data/test/consistency.js deleted file mode 100644 index 4082be2..0000000 --- a/node_modules/normalize-package-data/test/consistency.js +++ /dev/null @@ -1,36 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") -var path = require("path") -var fs = require("fs") -var _ = require("underscore") -var async = require("async") - -var data, clonedData -var warn - -tap.test("consistent normalization", function(t) { - path.resolve(__dirname, "./fixtures/read-package-json.json") - fs.readdir (__dirname + "/fixtures", function (err, entries) { - // entries = ['coffee-script.json'] // uncomment to limit to a specific file - verifyConsistency = function(entryName, next) { - warn = function(msg) { - // t.equal("",msg) // uncomment to have some kind of logging of warnings - } - filename = __dirname + "/fixtures/" + entryName - fs.readFile(filename, function(err, contents) { - if (err) return next(err) - data = JSON.parse(contents.toString()) - normalize(data, warn) - clonedData = _.clone(data) - normalize(data, warn) - t.deepEqual(clonedData, data, - "Normalization of " + entryName + " is consistent.") - next(null) - }) // fs.readFile - } // verifyConsistency - async.forEach(entries, verifyConsistency, function(err) { - if (err) throw err - t.end() - }) - }) // fs.readdir -}) // tap.test \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/dependencies.js b/node_modules/normalize-package-data/test/dependencies.js deleted file mode 100644 index 3e493ab..0000000 --- a/node_modules/normalize-package-data/test/dependencies.js +++ /dev/null @@ -1,44 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") - -var warningMessages = require("../lib/warning_messages.json") -var safeFormat = require("../lib/safe_format") - -tap.test("warn if dependency contains anything else but a string", function(t) { - var a - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize(a={ - dependencies: { "a": 123}, - devDependencies: { "b": 456}, - optionalDependencies: { "c": 789} - }, warn) - - var wanted1 = safeFormat(warningMessages.nonStringDependency, "a", 123) - var wanted2 = safeFormat(warningMessages.nonStringDependency, "b", 456) - var wanted3 = safeFormat(warningMessages.nonStringDependency, "c", 789) - t.ok(~warnings.indexOf(wanted1), wanted1) - t.ok(~warnings.indexOf(wanted2), wanted2) - t.ok(~warnings.indexOf(wanted3), wanted3) - t.end() -}) - -tap.test("warn if bundleDependencies array contains anything else but strings", function(t) { - var a - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize(a={ - bundleDependencies: ["abc", 123, {foo:"bar"}] - }, warn) - - var wanted1 = safeFormat(warningMessages.nonStringBundleDependency, 123) - var wanted2 = safeFormat(warningMessages.nonStringBundleDependency, {foo:"bar"}) - var wanted2 = safeFormat(warningMessages.nonDependencyBundleDependency, "abc") - t.ok(~warnings.indexOf(wanted1), wanted1) - t.ok(~warnings.indexOf(wanted2), wanted2) - t.end() -}) diff --git a/node_modules/normalize-package-data/test/fixtures/async.json b/node_modules/normalize-package-data/test/fixtures/async.json deleted file mode 100644 index 5e652a6..0000000 --- a/node_modules/normalize-package-data/test/fixtures/async.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "./lib/async", - "author": "Caolan McMahon", - "version": "0.2.6", - "repository" : { - "type" : "git", - "url" : "http://github.com/caolan/async.git" - }, - "bugs" : { - "url" : "http://github.com/caolan/async/issues" - }, - "licenses" : [ - { - "type" : "MIT", - "url" : "http://github.com/caolan/async/raw/master/LICENSE" - } - ], - "devDependencies": { - "nodeunit": ">0.0.0", - "uglify-js": "1.2.x", - "nodelint": ">0.0.0" - }, - "jam": { - "main": "lib/async.js", - "include": [ - "lib/async.js", - "README.md", - "LICENSE" - ] - }, - "scripts": { - "test": "nodeunit test/test-async.js" - } -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/badscripts.json b/node_modules/normalize-package-data/test/fixtures/badscripts.json deleted file mode 100644 index 25feb4c..0000000 --- a/node_modules/normalize-package-data/test/fixtures/badscripts.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "bad-scripts-package", - "version": "0.0.1", - "scripts": "foo" -} diff --git a/node_modules/normalize-package-data/test/fixtures/bcrypt.json b/node_modules/normalize-package-data/test/fixtures/bcrypt.json deleted file mode 100644 index 56e6d81..0000000 --- a/node_modules/normalize-package-data/test/fixtures/bcrypt.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "bcrypt", - "description": "A bcrypt library for NodeJS.", - "keywords": [ - "bcrypt", - "password", - "auth", - "authentication", - "encryption", - "crypt", - "crypto" - ], - "main": "./bcrypt", - "version": "0.7.5", - "author": "Nick Campbell (http://github.com/ncb000gt)", - "engines": { - "node": ">= 0.6.0" - }, - "repository": { - "type": "git", - "url": "http://github.com/ncb000gt/node.bcrypt.js.git" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "bugs": { - "url": "http://github.com/ncb000gt/node.bcrypt.js/issues" - }, - "scripts": { - "test": "node-gyp configure build && nodeunit test" - }, - "dependencies": { - "bindings": "1.0.0" - }, - "devDependencies": { - "nodeunit": ">=0.6.4" - }, - "contributors": [ - "Antonio Salazar Cardozo (https://github.com/Shadowfiend)", - "Van Nguyen (https://github.com/thegoleffect)", - "David Trejo (https://github.com/dtrejo)", - "Ben Glow (https://github.com/pixelglow)", - "NewITFarmer.com <> (https://github.com/newitfarmer)", - "Alfred Westerveld (https://github.com/alfredwesterveld)", - "Vincent Côté-Roy (https://github.com/vincentcr)", - "Lloyd Hilaiel (https://github.com/lloyd)", - "Roman Shtylman (https://github.com/shtylman)", - "Vadim Graboys (https://github.com/vadimg)", - "Ben Noorduis <> (https://github.com/bnoordhuis)", - "Nate Rajlich (https://github.com/tootallnate)", - "Sean McArthur (https://github.com/seanmonstar)", - "Fanie Oosthuysen (https://github.com/weareu)" - ] -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/coffee-script.json b/node_modules/normalize-package-data/test/fixtures/coffee-script.json deleted file mode 100644 index a0b60a9..0000000 --- a/node_modules/normalize-package-data/test/fixtures/coffee-script.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "coffee-script", - "description": "Unfancy JavaScript", - "keywords": ["javascript", "language", "coffeescript", "compiler"], - "author": "Jeremy Ashkenas", - "version": "1.6.2", - "licenses": [{ - "type": "MIT", - "url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE" - }], - "engines": { - "node": ">=0.8.0" - }, - "directories" : { - "lib" : "./lib/coffee-script" - }, - "main" : "./lib/coffee-script/coffee-script", - "bin": { - "coffee": "./bin/coffee", - "cake": "./bin/cake" - }, - "scripts": { - "test": "node ./bin/cake test" - }, - "homepage": "http://coffeescript.org", - "bugs": "https://github.com/jashkenas/coffee-script/issues", - "repository": { - "type": "git", - "url": "git://github.com/jashkenas/coffee-script.git" - }, - "devDependencies": { - "uglify-js": "~2.2", - "jison": ">=0.2.0" - } -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/http-server.json b/node_modules/normalize-package-data/test/fixtures/http-server.json deleted file mode 100644 index 90c2886..0000000 --- a/node_modules/normalize-package-data/test/fixtures/http-server.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "http-server", - "preferGlobal": true, - "version": "0.3.0", - "author": "Nodejitsu ", - "description": "a simple zero-configuration command-line http server", - "contributors": [ - { - "name": "Marak Squires", - "email": "marak@nodejitsu.com" - } - ], - "bin": { - "http-server": "./bin/http-server" - }, - "scripts": { - "start": "node ./bin/http-server", - "test": "vows --spec --isolate", - "predeploy": "echo This will be run before deploying the app", - "postdeploy": "echo This will be run after deploying the app" - }, - "main": "./lib/http-server", - "repository": { - "type": "git", - "url": "https://github.com/nodejitsu/http-server.git" - }, - "keywords": [ - "cli", - "http", - "server" - ], - "dependencies" : { - "colors" : "*", - "flatiron" : "0.1.x", - "optimist" : "0.2.x", - "union" : "0.1.x", - "ecstatic" : "0.1.x", - "plates" : "https://github.com/flatiron/plates/tarball/master" - }, - "analyze": false, - "devDependencies": { - "vows" : "0.5.x", - "request" : "2.1.x" - }, - "bundledDependencies": [ - "union", - "ecstatic" - ], - "license": "MIT", - "engines": { - "node": ">=0.6" - } -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/movefile.json b/node_modules/normalize-package-data/test/fixtures/movefile.json deleted file mode 100644 index 5933875..0000000 --- a/node_modules/normalize-package-data/test/fixtures/movefile.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "movefile", - "description": "rename implementation working over devices", - "version": "0.2.0", - "author": "yazgazan ", - "main": "./build/Release/movefile", - "keywords": ["move", "file", "rename"], - "repository": "git://github.com/yazgazan/movefile.git", - "directories": { - "lib": "./build/Release/" - }, - "scripts": { - "install": "./node_modules/node-gyp/bin/node-gyp.js configure && ./node_modules/node-gyp/bin/node-gyp.js build" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "node-gyp": "~0.9.1" - } -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/no-description.json b/node_modules/normalize-package-data/test/fixtures/no-description.json deleted file mode 100644 index 9ea70b6..0000000 --- a/node_modules/normalize-package-data/test/fixtures/no-description.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "foo-bar-package", - "version": "0.0.1" -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/node-module_exist.json b/node_modules/normalize-package-data/test/fixtures/node-module_exist.json deleted file mode 100644 index acc0538..0000000 --- a/node_modules/normalize-package-data/test/fixtures/node-module_exist.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "node-module_exist", - "description": "Find if a NodeJS module is available to require or not", - "version": "0.0.1", - "main": "module_exist.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git@gist.github.com:3135914.git" - }, - "homepage": "https://github.com/FGRibreau", - "author": { - "name": "Francois-Guillaume Ribreau", - "url": "http://fgribreau.com.com/" - }, - "devDependencies": { - "nodeunit": "~0.7.4" - }, - "keywords": [ - "core", - "modules" - ], - "license": "MIT" -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/npm.json b/node_modules/normalize-package-data/test/fixtures/npm.json deleted file mode 100644 index 2262b31..0000000 --- a/node_modules/normalize-package-data/test/fixtures/npm.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "version": "1.2.17", - "name": "npm", - "publishConfig": { - "proprietary-attribs": false - }, - "description": "A package manager for node", - "keywords": [ - "package manager", - "modules", - "install", - "package.json" - ], - "preferGlobal": true, - "config": { - "publishtest": false - }, - "homepage": "https://npmjs.org/doc/", - "author": "Isaac Z. Schlueter (http://blog.izs.me)", - "repository": { - "type": "git", - "url": "https://github.com/isaacs/npm" - }, - "bugs": { - "email": "npm-@googlegroups.com", - "url": "http://github.com/isaacs/npm/issues" - }, - "directories": { - "doc": "./doc", - "man": "./man", - "lib": "./lib", - "bin": "./bin" - }, - "main": "./lib/npm.js", - "bin": "./bin/npm-cli.js", - "dependencies": { - "semver": "~1.1.2", - "ini": "~1.1.0", - "slide": "1", - "abbrev": "~1.0.4", - "graceful-fs": "~1.2.0", - "minimatch": "~0.2.11", - "nopt": "~2.1.1", - "rimraf": "2", - "request": "~2.9", - "which": "1", - "tar": "~0.1.17", - "fstream": "~0.1.22", - "block-stream": "*", - "inherits": "1", - "mkdirp": "~0.3.3", - "read": "~1.0.4", - "lru-cache": "~2.3.0", - "node-gyp": "~0.9.3", - "fstream-npm": "~0.1.3", - "uid-number": "0", - "archy": "0", - "chownr": "0", - "npmlog": "0", - "ansi": "~0.1.2", - "npm-registry-client": "~0.2.18", - "read-package-json": "~0.3.0", - "read-installed": "0", - "glob": "~3.1.21", - "init-package-json": "0.0.6", - "osenv": "0", - "lockfile": "~0.3.0", - "retry": "~0.6.0", - "once": "~1.1.1", - "npmconf": "0", - "opener": "~1.3.0", - "chmodr": "~0.1.0", - "cmd-shim": "~1.1.0" - }, - "bundleDependencies": [ - "semver", - "ini", - "slide", - "abbrev", - "graceful-fs", - "minimatch", - "nopt", - "rimraf", - "request", - "which", - "tar", - "fstream", - "block-stream", - "inherits", - "mkdirp", - "read", - "lru-cache", - "node-gyp", - "fstream-npm", - "uid-number", - "archy", - "chownr", - "npmlog", - "ansi", - "npm-registry-client", - "read-package-json", - "read-installed", - "glob", - "init-package-json", - "osenv", - "lockfile", - "retry", - "once", - "npmconf", - "opener", - "chmodr", - "cmd-shim" - ], - "devDependencies": { - "ronn": "~0.3.6", - "tap": "~0.4.0" - }, - "engines": { - "node": ">=0.6", - "npm": "1" - }, - "scripts": { - "test": "node ./test/run.js && tap test/tap/*.js", - "tap": "tap test/tap/*.js", - "prepublish": "node bin/npm-cli.js prune ; rm -rf test/*/*/node_modules ; make -j4 doc", - "dumpconf": "env | grep npm | sort | uniq", - "echo": "node bin/npm-cli.js" - }, - "licenses": [ - { - "type": "MIT +no-false-attribs", - "url": "https://github.com/isaacs/npm/raw/master/LICENSE" - } - ] -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/read-package-json.json b/node_modules/normalize-package-data/test/fixtures/read-package-json.json deleted file mode 100644 index 7d0dae1..0000000 --- a/node_modules/normalize-package-data/test/fixtures/read-package-json.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "read-package-json", - "version": "0.1.1", - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "description": "The thing npm uses to read package.json files with semantics and defaults and validation", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/read-package-json.git" - }, - "license": "MIT", - "main": "read-json.js", - "scripts": { - "test": "tap test/*.js" - }, - "dependencies": { - "glob": "~3.1.9", - "lru-cache": "~1.1.0", - "semver": "~1.0.14", - "slide": "~1.1.3" - }, - "devDependencies": { - "tap": "~0.2.5" - }, - "optionalDependencies": { - "npmlog": "0", - "graceful-fs": "~1.1.8" - } -} diff --git a/node_modules/normalize-package-data/test/fixtures/request.json b/node_modules/normalize-package-data/test/fixtures/request.json deleted file mode 100644 index 24189a5..0000000 --- a/node_modules/normalize-package-data/test/fixtures/request.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "request", - "description": "Simplified HTTP request client.", - "tags": [ - "http", - "simple", - "util", - "utility" - ], - "version": "2.16.7", - "author": "Mikeal Rogers ", - "repository": { - "type": "git", - "url": "http://github.com/mikeal/request.git" - }, - "bugs": { - "url": "http://github.com/mikeal/request/issues" - }, - "engines": [ - "node >= 0.8.0" - ], - "main": "index.js", - "dependencies": { - "form-data": "~0.0.3", - "mime": "~1.2.7", - "hawk": "~0.10.2", - "node-uuid": "~1.4.0", - "cookie-jar": "~0.2.0", - "aws-sign": "~0.2.0", - "oauth-sign": "~0.2.0", - "forever-agent": "~0.2.0", - "tunnel-agent": "~0.2.0", - "json-stringify-safe": "~3.0.0", - "qs": "~0.5.4" - }, - "scripts": { - "test": "node tests/run.js" - } -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/fixtures/underscore.json b/node_modules/normalize-package-data/test/fixtures/underscore.json deleted file mode 100644 index bfc8b3d..0000000 --- a/node_modules/normalize-package-data/test/fixtures/underscore.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name" : "underscore", - "description" : "JavaScript's functional programming helper library.", - "homepage" : "http://underscorejs.org", - "keywords" : ["util", "functional", "server", "client", "browser"], - "author" : "Jeremy Ashkenas ", - "repository" : {"type": "git", "url": "git://github.com/documentcloud/underscore.git"}, - "main" : "underscore.js", - "version" : "1.4.4", - "devDependencies": { - "phantomjs": "1.9.0-1" - }, - "scripts": { - "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true" - }, - "license" : "MIT" -} \ No newline at end of file diff --git a/node_modules/normalize-package-data/test/github-urls.js b/node_modules/normalize-package-data/test/github-urls.js deleted file mode 100644 index da78160..0000000 --- a/node_modules/normalize-package-data/test/github-urls.js +++ /dev/null @@ -1,44 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") -var fs = require("fs") -var async = require("async") - -var data -var warn - -tap.test("consistent normalization", function(t) { - var entries = [ - 'read-package-json.json', - 'http-server.json', - "movefile.json", - "node-module_exist.json" - ] - var verifyConsistency = function(entryName, next) { - warn = function(msg) { - // t.equal("",msg) // uncomment to have some kind of logging of warnings - } - var filename = __dirname + "/fixtures/" + entryName - fs.readFile(filename, function(err, contents) { - if (err) return next(err) - data = JSON.parse(contents.toString()) - normalize(data, warn) - if(data.name == "node-module_exist") { - t.same(data.bugs.url, "https://gist.github.com/3135914") - } - if(data.name == "read-package-json") { - t.same(data.bugs.url, "https://github.com/isaacs/read-package-json/issues") - } - if(data.name == "http-server") { - t.same(data.bugs.url, "https://github.com/nodejitsu/http-server/issues") - } - if(data.name == "movefile") { - t.same(data.bugs.url, "https://github.com/yazgazan/movefile/issues") - } - next(null) - }) // fs.readFile - } // verifyConsistency - async.forEach(entries, verifyConsistency, function(err) { - if (err) throw err - t.end() - }) -}) // tap.test diff --git a/node_modules/normalize-package-data/test/mixedcase-names.js b/node_modules/normalize-package-data/test/mixedcase-names.js deleted file mode 100644 index a62b699..0000000 --- a/node_modules/normalize-package-data/test/mixedcase-names.js +++ /dev/null @@ -1,32 +0,0 @@ -var test = require('tap').test - -var normalize = require('../') -var fixer = normalize.fixer - -test('mixedcase', function (t) { - t.doesNotThrow(function () { - fixer.fixNameField({name: 'foo'}, true) - }) - - t.doesNotThrow(function () { - fixer.fixNameField({name: 'foo'}, false) - }) - - t.doesNotThrow(function () { - fixer.fixNameField({name: 'foo'}) - }) - - t.throws(function () { - fixer.fixNameField({name: 'Foo'}, true) - }, new Error('Invalid name: "Foo"'), 'should throw an error') - - t.throws(function () { - fixer.fixNameField({name: 'Foo'}, {strict: true}) - }, new Error('Invalid name: "Foo"'), 'should throw an error') - - t.doesNotThrow(function () { - fixer.fixNameField({name: 'Foo'}, {strict: true, allowLegacyCase: true}) - }) - - t.end() -}) diff --git a/node_modules/normalize-package-data/test/normalize.js b/node_modules/normalize-package-data/test/normalize.js deleted file mode 100644 index 3926938..0000000 --- a/node_modules/normalize-package-data/test/normalize.js +++ /dev/null @@ -1,246 +0,0 @@ -var tap = require("tap") -var fs = require("fs") -var path = require("path") - -var normalize = require("../lib/normalize") -var warningMessages = require("../lib/warning_messages.json") -var safeFormat = require("../lib/safe_format") - -var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json") - -tap.test("normalize some package data", function(t) { - var packageData = require(rpjPath) - var warnings = [] - normalize(packageData, function(warning) { - warnings.push(warning) - }) - // there's no readme data in this particular object - t.equal( warnings.length, 1, "There's exactly one warning.") - fs.readFile(rpjPath, function(err, data) { - if(err) throw err - // Various changes have been made - t.notEqual(packageData, JSON.parse(data), "Output is different from input.") - t.end() - }) -}) - -tap.test("runs without passing warning function", function(t) { - var packageData = require(rpjPath) - fs.readFile(rpjPath, function(err, data) { - if(err) throw err - normalize(JSON.parse(data)) - t.ok(true, "If you read this, this means I'm still alive.") - t.end() - }) -}) - -tap.test("empty object", function(t) { - var packageData = {} - var expect = - { name: '', - version: '', - readme: 'ERROR: No README data found!', - _id: '@' } - - var warnings = [] - function warn(m) { - warnings.push(m) - } - normalize(packageData, warn) - t.same(packageData, expect) - t.same(warnings, [ - warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingLicense - ]) - t.end() -}) - -tap.test("core module name", function(t) { - var warnings = [] - function warn(m) { - warnings.push(m) - } - var a - normalize(a={ - name: "http", - readme: "read yourself how about", - homepage: 123, - bugs: "what is this i don't even", - repository: "Hello." - }, warn) - - var expect = [ - safeFormat(warningMessages.conflictingName, 'http'), - warningMessages.nonEmailUrlBugsString, - warningMessages.emptyNormalizedBugs, - warningMessages.nonUrlHomepage, - warningMessages.missingLicense - ] - t.same(warnings, expect) - t.end() -}) - -tap.test("urls required", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize({ - bugs: { - url: "/1", - email: "not an email address" - } - }, warn) - var a - normalize(a={ - readme: "read yourself how about", - homepage: 123, - bugs: "what is this i don't even", - repository: "Hello." - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.nonUrlBugsUrlField, - warningMessages.nonEmailBugsEmailField, - warningMessages.emptyNormalizedBugs, - warningMessages.missingReadme, - warningMessages.missingLicense, - warningMessages.nonEmailUrlBugsString, - warningMessages.emptyNormalizedBugs, - warningMessages.nonUrlHomepage, - warningMessages.missingLicense] - t.same(warnings, expect) - t.end() -}) - -tap.test("homepage field must start with a protocol.", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - var a - normalize(a={ - homepage: 'example.org' - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingProtocolHomepage, - warningMessages.missingLicense] - t.same(warnings, expect) - t.same(a.homepage, 'http://example.org') - t.end() -}) - -tap.test("license field should be a valid SPDX expression", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - var a - normalize(a={ - license: 'Apache 2' - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.invalidLicense] - t.same(warnings, expect) - t.end() -}) - -tap.test("gist bugs url", function(t) { - var d = { - repository: "git@gist.github.com:123456.git" - } - normalize(d) - t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) - t.same(d.bugs, { url: 'https://gist.github.com/123456' }) - t.end(); -}); - -tap.test("singularize repositories", function(t) { - var d = {repositories:["git@gist.github.com:123456.git"]} - normalize(d) - t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) - t.end() -}); - -tap.test("treat visionmedia/express as github repo", function(t) { - var d = {repository: {type: "git", url: "visionmedia/express"}} - normalize(d) - t.same(d.repository, { type: "git", url: "git+https://github.com/visionmedia/express.git" }) - t.end() -}); - -tap.test("treat isaacs/node-graceful-fs as github repo", function(t) { - var d = {repository: {type: "git", url: "isaacs/node-graceful-fs"}} - normalize(d) - t.same(d.repository, { type: "git", url: "git+https://github.com/isaacs/node-graceful-fs.git" }) - t.end() -}); - -tap.test("homepage field will set to github url if repository is a github repo", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "https://github.com/isaacs/node-graceful-fs" } - }) - t.same(a.homepage, 'https://github.com/isaacs/node-graceful-fs#readme') - t.end() -}) - -tap.test("homepage field will set to github gist url if repository is a gist", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "git@gist.github.com:123456.git" } - }) - t.same(a.homepage, 'https://gist.github.com/123456') - t.end() -}) - -tap.test("homepage field will set to github gist url if repository is a shorthand reference", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "sindresorhus/chalk" } - }) - t.same(a.homepage, 'https://github.com/sindresorhus/chalk#readme') - t.end() -}) - -tap.test("don't mangle github shortcuts in dependencies", function(t) { - var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}} - normalize(d) - t.same(d.dependencies, {"node-graceful-fs": "github:isaacs/node-graceful-fs" }) - t.end() -}); - -tap.test("deprecation warning for array in dependencies fields", function(t) { - var a - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize(a={ - dependencies: [], - devDependencies: [], - optionalDependencies: [] - }, warn) - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning") - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning") - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning") - t.end() -}) diff --git a/node_modules/normalize-package-data/test/normalize.js~ b/node_modules/normalize-package-data/test/normalize.js~ deleted file mode 100644 index de6f1ce..0000000 --- a/node_modules/normalize-package-data/test/normalize.js~ +++ /dev/null @@ -1,253 +0,0 @@ -var tap = require("tap") -var fs = require("fs") -var path = require("path") - -var globals = Object.keys(global) - -var normalize = require("../lib/normalize") -var warningMessages = require("../lib/warning_messages.json") -var safeFormat = require("../lib/safe_format") - -var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json") - -tap.test("normalize some package data", function(t) { - var packageData = require(rpjPath) - var warnings = [] - normalize(packageData, function(warning) { - warnings.push(warning) - }) - // there's no readme data in this particular object - t.equal( warnings.length, 1, "There's exactly one warning.") - fs.readFile(rpjPath, function(err, data) { - if(err) throw err - // Various changes have been made - t.notEqual(packageData, JSON.parse(data), "Output is different from input.") - t.end() - }) -}) - -tap.test("runs without passing warning function", function(t) { - var packageData = require(rpjPath) - fs.readFile(rpjPath, function(err, data) { - if(err) throw err - normalize(JSON.parse(data)) - t.ok(true, "If you read this, this means I'm still alive.") - t.end() - }) -}) - -tap.test("empty object", function(t) { - var packageData = {} - var expect = - { name: '', - version: '', - readme: 'ERROR: No README data found!', - _id: '@' } - - var warnings = [] - function warn(m) { - warnings.push(m) - } - normalize(packageData, warn) - t.same(packageData, expect) - t.same(warnings, [ - warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingLicense - ]) - t.end() -}) - -tap.test("core module name", function(t) { - var warnings = [] - function warn(m) { - warnings.push(m) - } - var a - normalize(a={ - name: "http", - readme: "read yourself how about", - homepage: 123, - bugs: "what is this i don't even", - repository: "Hello." - }, warn) - - var expect = [ - safeFormat(warningMessages.conflictingName, 'http'), - warningMessages.nonEmailUrlBugsString, - warningMessages.emptyNormalizedBugs, - warningMessages.nonUrlHomepage, - warningMessages.missingLicense - ] - t.same(warnings, expect) - t.end() -}) - -tap.test("urls required", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize({ - bugs: { - url: "/1", - email: "not an email address" - } - }, warn) - var a - normalize(a={ - readme: "read yourself how about", - homepage: 123, - bugs: "what is this i don't even", - repository: "Hello." - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.nonUrlBugsUrlField, - warningMessages.nonEmailBugsEmailField, - warningMessages.emptyNormalizedBugs, - warningMessages.missingReadme, - warningMessages.missingLicense, - warningMessages.nonEmailUrlBugsString, - warningMessages.emptyNormalizedBugs, - warningMessages.nonUrlHomepage, - warningMessages.missingLicense] - t.same(warnings, expect) - t.end() -}) - -tap.test("homepage field must start with a protocol.", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - var a - normalize(a={ - homepage: 'example.org' - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingProtocolHomepage, - warningMessages.missingLicense] - t.same(warnings, expect) - t.same(a.homepage, 'http://example.org') - t.end() -}) - -tap.test("license field should be a valid SPDX expression", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - var a - normalize(a={ - license: 'Apache 2' - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.invalidLicense] - t.same(warnings, expect) - t.end() -}) - -tap.test("gist bugs url", function(t) { - var d = { - repository: "git@gist.github.com:123456.git" - } - normalize(d) - t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) - t.same(d.bugs, { url: 'https://gist.github.com/123456' }) - t.end(); -}); - -tap.test("singularize repositories", function(t) { - var d = {repositories:["git@gist.github.com:123456.git"]} - normalize(d) - t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) - t.end() -}); - -tap.test("treat visionmedia/express as github repo", function(t) { - var d = {repository: {type: "git", url: "visionmedia/express"}} - normalize(d) - t.same(d.repository, { type: "git", url: "git+https://github.com/visionmedia/express.git" }) - t.end() -}); - -tap.test("treat isaacs/node-graceful-fs as github repo", function(t) { - var d = {repository: {type: "git", url: "isaacs/node-graceful-fs"}} - normalize(d) - t.same(d.repository, { type: "git", url: "git+https://github.com/isaacs/node-graceful-fs.git" }) - t.end() -}); - -tap.test("homepage field will set to github url if repository is a github repo", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "https://github.com/isaacs/node-graceful-fs" } - }) - t.same(a.homepage, 'https://github.com/isaacs/node-graceful-fs#readme') - t.end() -}) - -tap.test("homepage field will set to github gist url if repository is a gist", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "git@gist.github.com:123456.git" } - }) - t.same(a.homepage, 'https://gist.github.com/123456') - t.end() -}) - -tap.test("homepage field will set to github gist url if repository is a shorthand reference", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "sindresorhus/chalk" } - }) - t.same(a.homepage, 'https://github.com/sindresorhus/chalk#readme') - t.end() -}) - -tap.test("don't mangle github shortcuts in dependencies", function(t) { - var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}} - normalize(d) - t.same(d.dependencies, {"node-graceful-fs": "github:isaacs/node-graceful-fs" }) - t.end() -}); - -tap.test("deprecation warning for array in dependencies fields", function(t) { - var a - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize(a={ - dependencies: [], - devDependencies: [], - optionalDependencies: [] - }, warn) - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning") - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning") - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning") - t.end() -}) - -tap.test('no new globals', function(t) { - t.same(Object.keys(global), globals) - t.end() -}) diff --git a/node_modules/normalize-package-data/test/scoped.js b/node_modules/normalize-package-data/test/scoped.js deleted file mode 100644 index 82d2a54..0000000 --- a/node_modules/normalize-package-data/test/scoped.js +++ /dev/null @@ -1,59 +0,0 @@ -var test = require("tap").test - -var fixNameField = require("../lib/fixer.js").fixNameField -var fixBinField = require("../lib/fixer.js").fixBinField - -test("a simple scoped module has a valid name", function (t) { - var data = {name : "@org/package"} - fixNameField(data, false) - t.equal(data.name, "@org/package", "name was unchanged") - - t.end() -}) - -test("'org@package' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "org@package"}, false) - }, "blows up as expected") - - t.end() -}) - -test("'org=package' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "org=package"}, false) - }, "blows up as expected") - - t.end() -}) - -test("'@org=sub/package' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "@org=sub/package"}, false) - }, "blows up as expected") - - t.end() -}) - -test("'@org/' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "@org/"}, false) - }, "blows up as expected") - - t.end() -}) - -test("'@/package' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "@/package"}, false) - }, "blows up as expected") - - t.end() -}) - -test("name='@org/package', bin='bin.js' is bin={package:'bin.js'}", function (t) { - var obj = {name : "@org/package", bin: "bin.js"} - fixBinField(obj) - t.isDeeply(obj.bin, {package: 'bin.js'}) - t.end() -}) diff --git a/node_modules/normalize-package-data/test/scripts.js b/node_modules/normalize-package-data/test/scripts.js deleted file mode 100644 index 473596e..0000000 --- a/node_modules/normalize-package-data/test/scripts.js +++ /dev/null @@ -1,24 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") -var path = require("path") -var fs = require("fs") - -tap.test("bad scripts", function (t) { - var p = path.resolve(__dirname, "./fixtures/badscripts.json") - fs.readFile (p, function (err, contents) { - if (err) throw err - var originalData = JSON.parse(contents.toString()) - var data = JSON.parse(contents.toString()) - normalize(data) - t.ok(data) - verifyFields(t, data, originalData) - t.end() - }) -}) - -function verifyFields (t, normalized, original) { - t.equal(normalized.version, original.version, "Version field stays same") - t.equal(normalized.name, original.name, "Name stays the same.") - // scripts is not an object, so it should be deleted - t.notOk(normalized.scripts) -} diff --git a/node_modules/normalize-package-data/test/strict.js b/node_modules/normalize-package-data/test/strict.js deleted file mode 100644 index 40e09dc..0000000 --- a/node_modules/normalize-package-data/test/strict.js +++ /dev/null @@ -1,54 +0,0 @@ -var test = require("tap").test - -var normalize = require("../") - -test("strict", function(t) { - var threw - - try { - threw = false - normalize({name: "X"}, true) - } catch (er) { - threw = true - t.equal(er.message, 'Invalid name: "X"') - } finally { - t.equal(threw, true) - } - - try { - threw = false - normalize({name:" x "}, true) - } catch (er) { - threw = true - t.equal(er.message, 'Invalid name: " x "') - } finally { - t.equal(threw, true) - } - - try { - threw = false - normalize({name:"x",version:"01.02.03"}, true) - } catch (er) { - threw = true - t.equal(er.message, 'Invalid version: "01.02.03"') - } finally { - t.equal(threw, true) - } - - // these should not throw - var slob = {name:" X ",version:"01.02.03",dependencies:{ - y:">01.02.03", - z:"! 99 $$ASFJ(Aawenf90awenf as;naw.3j3qnraw || an elephant" - }} - normalize(slob, false) - t.same(slob, - { name: 'X', - version: '1.2.3', - dependencies: - { y: '>01.02.03', - z: '! 99 $$ASFJ(Aawenf90awenf as;naw.3j3qnraw || an elephant' }, - readme: 'ERROR: No README data found!', - _id: 'X@1.2.3' }) - - t.end() -}) diff --git a/node_modules/normalize-package-data/test/typo.js b/node_modules/normalize-package-data/test/typo.js deleted file mode 100644 index 0cd3eb4..0000000 --- a/node_modules/normalize-package-data/test/typo.js +++ /dev/null @@ -1,133 +0,0 @@ -var test = require('tap').test - -var normalize = require('../') -var typos = require('../lib/typos.json') -var warningMessages = require("../lib/warning_messages.json") -var safeFormat = require("../lib/safe_format") - -test('typos', function(t) { - var warnings = [] - function warn(m) { - warnings.push(m) - } - - var typoMessage = safeFormat.bind(undefined, warningMessages.typo) - - var expect = - [ warningMessages.missingRepository, - warningMessages.missingLicense, - typoMessage('dependancies', 'dependencies'), - typoMessage('dependecies', 'dependencies'), - typoMessage('depdenencies', 'dependencies'), - typoMessage('devEependencies', 'devDependencies'), - typoMessage('depends', 'dependencies'), - typoMessage('dev-dependencies', 'devDependencies'), - typoMessage('devDependences', 'devDependencies'), - typoMessage('devDepenencies', 'devDependencies'), - typoMessage('devdependencies', 'devDependencies'), - typoMessage('repostitory', 'repository'), - typoMessage('repo', 'repository'), - typoMessage('prefereGlobal', 'preferGlobal'), - typoMessage('hompage', 'homepage'), - typoMessage('hampage', 'homepage'), - typoMessage('autohr', 'author'), - typoMessage('autor', 'author'), - typoMessage('contributers', 'contributors'), - typoMessage('publicationConfig', 'publishConfig') ] - - normalize({"dependancies": "dependencies" - ,"dependecies": "dependencies" - ,"depdenencies": "dependencies" - ,"devEependencies": "devDependencies" - ,"depends": "dependencies" - ,"dev-dependencies": "devDependencies" - ,"devDependences": "devDependencies" - ,"devDepenencies": "devDependencies" - ,"devdependencies": "devDependencies" - ,"repostitory": "repository" - ,"repo": "repository" - ,"prefereGlobal": "preferGlobal" - ,"hompage": "homepage" - ,"hampage": "homepage" - ,"autohr": "author" - ,"autor": "author" - ,"contributers": "contributors" - ,"publicationConfig": "publishConfig" - ,readme:"asdf" - ,name:"name" - ,version:"1.2.5"}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - typoMessage("bugs['web']", "bugs['url']"), - typoMessage("bugs['name']", "bugs['url']"), - warningMessages.nonUrlBugsUrlField, - warningMessages.emptyNormalizedBugs, - warningMessages.missingReadme, - warningMessages.missingLicense] - - normalize({name:"name" - ,version:"1.2.5" - ,bugs:{web:"url",name:"url"}}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingLicense, - typoMessage('script', 'scripts') ] - - normalize({name:"name" - ,version:"1.2.5" - ,script:{server:"start",tests:"test"}}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - typoMessage("scripts['server']", "scripts['start']"), - typoMessage("scripts['tests']", "scripts['test']"), - warningMessages.missingReadme, - warningMessages.missingLicense] - - normalize({name:"name" - ,version:"1.2.5" - ,scripts:{server:"start",tests:"test"}}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingLicense] - - normalize({name:"name" - ,version:"1.2.5" - ,scripts:{server:"start",tests:"test" - ,start:"start",test:"test"}}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - expect = [] - - normalize({private: true - ,name:"name" - ,version:"1.2.5" - ,scripts:{server:"start",tests:"test"}}, warn) - - t.same(warnings, expect) - - t.end(); -}) diff --git a/node_modules/number-is-nan/index.js b/node_modules/number-is-nan/index.js deleted file mode 100644 index 79be4b9..0000000 --- a/node_modules/number-is-nan/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -module.exports = Number.isNaN || function (x) { - return x !== x; -}; diff --git a/node_modules/number-is-nan/license b/node_modules/number-is-nan/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/number-is-nan/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/number-is-nan/package.json b/node_modules/number-is-nan/package.json deleted file mode 100644 index 7848b31..0000000 --- a/node_modules/number-is-nan/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "number-is-nan@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/code-point-at" - ] - ], - "_from": "number-is-nan@>=1.0.0 <2.0.0", - "_id": "number-is-nan@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/number-is-nan", - "_nodeVersion": "4.5.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/number-is-nan-1.0.1.tgz_1475212313367_0.9480371843092144" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.15.9", - "_phantomChildren": {}, - "_requested": { - "name": "number-is-nan", - "raw": "number-is-nan@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/code-point-at", - "/is-fullwidth-code-point" - ], - "_resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "_shasum": "097b602b53422a522c1afb8790318336941a011d", - "_shrinkwrap": null, - "_spec": "number-is-nan@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/code-point-at", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/number-is-nan/issues" - }, - "dependencies": {}, - "description": "ES2015 Number.isNaN() ponyfill", - "devDependencies": { - "ava": "*" - }, - "directories": {}, - "dist": { - "shasum": "097b602b53422a522c1afb8790318336941a011d", - "tarball": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "ed9cdac3f428cc929b61bb230da42c87477af4b9", - "homepage": "https://github.com/sindresorhus/number-is-nan#readme", - "keywords": [ - "es2015", - "ecmascript", - "ponyfill", - "polyfill", - "shim", - "number", - "is", - "nan", - "not" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "number-is-nan", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/number-is-nan.git" - }, - "scripts": { - "test": "ava" - }, - "version": "1.0.1" -} diff --git a/node_modules/number-is-nan/readme.md b/node_modules/number-is-nan/readme.md deleted file mode 100644 index 2463508..0000000 --- a/node_modules/number-is-nan/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# number-is-nan [![Build Status](https://travis-ci.org/sindresorhus/number-is-nan.svg?branch=master)](https://travis-ci.org/sindresorhus/number-is-nan) - -> ES2015 [`Number.isNaN()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN) [ponyfill](https://ponyfill.com) - - -## Install - -``` -$ npm install --save number-is-nan -``` - - -## Usage - -```js -var numberIsNan = require('number-is-nan'); - -numberIsNan(NaN); -//=> true - -numberIsNan('unicorn'); -//=> false -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/oauth-sign/LICENSE b/node_modules/oauth-sign/LICENSE deleted file mode 100644 index a4a9aee..0000000 --- a/node_modules/oauth-sign/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/oauth-sign/README.md b/node_modules/oauth-sign/README.md deleted file mode 100644 index 34c4a85..0000000 --- a/node_modules/oauth-sign/README.md +++ /dev/null @@ -1,4 +0,0 @@ -oauth-sign -========== - -OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. diff --git a/node_modules/oauth-sign/index.js b/node_modules/oauth-sign/index.js deleted file mode 100644 index dadcba9..0000000 --- a/node_modules/oauth-sign/index.js +++ /dev/null @@ -1,136 +0,0 @@ -var crypto = require('crypto') - , qs = require('querystring') - ; - -function sha1 (key, body) { - return crypto.createHmac('sha1', key).update(body).digest('base64') -} - -function rsa (key, body) { - return crypto.createSign("RSA-SHA1").update(body).sign(key, 'base64'); -} - -function rfc3986 (str) { - return encodeURIComponent(str) - .replace(/!/g,'%21') - .replace(/\*/g,'%2A') - .replace(/\(/g,'%28') - .replace(/\)/g,'%29') - .replace(/'/g,'%27') - ; -} - -// Maps object to bi-dimensional array -// Converts { foo: 'A', bar: [ 'b', 'B' ]} to -// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ] -function map (obj) { - var key, val, arr = [] - for (key in obj) { - val = obj[key] - if (Array.isArray(val)) - for (var i = 0; i < val.length; i++) - arr.push([key, val[i]]) - else if (typeof val === "object") - for (var prop in val) - arr.push([key + '[' + prop + ']', val[prop]]); - else - arr.push([key, val]) - } - return arr -} - -// Compare function for sort -function compare (a, b) { - return a > b ? 1 : a < b ? -1 : 0 -} - -function generateBase (httpMethod, base_uri, params) { - // adapted from https://dev.twitter.com/docs/auth/oauth and - // https://dev.twitter.com/docs/auth/creating-signature - - // Parameter normalization - // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2 - var normalized = map(params) - // 1. First, the name and value of each parameter are encoded - .map(function (p) { - return [ rfc3986(p[0]), rfc3986(p[1] || '') ] - }) - // 2. The parameters are sorted by name, using ascending byte value - // ordering. If two or more parameters share the same name, they - // are sorted by their value. - .sort(function (a, b) { - return compare(a[0], b[0]) || compare(a[1], b[1]) - }) - // 3. The name of each parameter is concatenated to its corresponding - // value using an "=" character (ASCII code 61) as a separator, even - // if the value is empty. - .map(function (p) { return p.join('=') }) - // 4. The sorted name/value pairs are concatenated together into a - // single string by using an "&" character (ASCII code 38) as - // separator. - .join('&') - - var base = [ - rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'), - rfc3986(base_uri), - rfc3986(normalized) - ].join('&') - - return base -} - -function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return sha1(key, base) -} - -function rsasign (httpMethod, base_uri, params, private_key, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = private_key || '' - - return rsa(key, base) -} - -function plaintext (consumer_secret, token_secret) { - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return key -} - -function sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) { - var method - var skipArgs = 1 - - switch (signMethod) { - case 'RSA-SHA1': - method = rsasign - break - case 'HMAC-SHA1': - method = hmacsign - break - case 'PLAINTEXT': - method = plaintext - skipArgs = 4 - break - default: - throw new Error("Signature method not supported: " + signMethod) - } - - return method.apply(null, [].slice.call(arguments, skipArgs)) -} - -exports.hmacsign = hmacsign -exports.rsasign = rsasign -exports.plaintext = plaintext -exports.sign = sign -exports.rfc3986 = rfc3986 -exports.generateBase = generateBase - diff --git a/node_modules/oauth-sign/package.json b/node_modules/oauth-sign/package.json deleted file mode 100644 index 943ecfa..0000000 --- a/node_modules/oauth-sign/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "oauth-sign@~0.8.1", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "oauth-sign@>=0.8.1 <0.9.0", - "_id": "oauth-sign@0.8.2", - "_inCache": true, - "_installable": true, - "_location": "/oauth-sign", - "_nodeVersion": "5.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/oauth-sign-0.8.2.tgz_1462396399020_0.8175400267355144" - }, - "_npmUser": { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - }, - "_npmVersion": "2.15.3", - "_phantomChildren": {}, - "_requested": { - "name": "oauth-sign", - "raw": "oauth-sign@~0.8.1", - "rawSpec": "~0.8.1", - "scope": null, - "spec": ">=0.8.1 <0.9.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "_shasum": "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43", - "_shrinkwrap": null, - "_spec": "oauth-sign@~0.8.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "mikeal.rogers@gmail.com", - "name": "Mikeal Rogers", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/oauth-sign/issues" - }, - "dependencies": {}, - "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43", - "tarball": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz" - }, - "engines": { - "node": "*" - }, - "files": [ - "index.js" - ], - "gitHead": "0b034206316132f57e26970152c2fb18e71bddd5", - "homepage": "https://github.com/mikeal/oauth-sign#readme", - "license": "Apache-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - }, - { - "email": "jnylen@gmail.com", - "name": "nylen" - }, - { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - } - ], - "name": "oauth-sign", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "url": "git+https://github.com/mikeal/oauth-sign.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "0.8.2" -} diff --git a/node_modules/object-inspect/.npmignore b/node_modules/object-inspect/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/object-inspect/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/object-inspect/.travis.yml b/node_modules/object-inspect/.travis.yml deleted file mode 100644 index b0273e1..0000000 --- a/node_modules/object-inspect/.travis.yml +++ /dev/null @@ -1,52 +0,0 @@ -language: node_js -node_js: - - "iojs-v3.2" - - "iojs-v3.1" - - "iojs-v3.0" - - "iojs-v2.5" - - "iojs-v2.4" - - "iojs-v2.3" - - "iojs-v2.2" - - "iojs-v2.1" - - "iojs-v2.0" - - "iojs-v1.8" - - "iojs-v1.7" - - "iojs-v1.6" - - "iojs-v1.5" - - "iojs-v1.4" - - "iojs-v1.3" - - "iojs-v1.2" - - "iojs-v1.1" - - "iojs-v1.0" - - "0.12" - - "0.11" - - "0.10" - - "0.9" - - "0.8" - - "0.6" - - "0.4" -before_install: - - '[ "${TRAVIS_NODE_VERSION}" = "0.6" ] || npm install -g npm@1.4.28 && npm install -g npm' -sudo: false -matrix: - fast_finish: true - allow_failures: - - node_js: "iojs-v3.1" - - node_js: "iojs-v3.0" - - node_js: "iojs-v2.4" - - node_js: "iojs-v2.3" - - node_js: "iojs-v2.2" - - node_js: "iojs-v2.1" - - node_js: "iojs-v2.0" - - node_js: "iojs-v1.7" - - node_js: "iojs-v1.6" - - node_js: "iojs-v1.5" - - node_js: "iojs-v1.4" - - node_js: "iojs-v1.3" - - node_js: "iojs-v1.2" - - node_js: "iojs-v1.1" - - node_js: "iojs-v1.0" - - node_js: "0.11" - - node_js: "0.9" - - node_js: "0.6" - - node_js: "0.4" diff --git a/node_modules/object-inspect/LICENSE b/node_modules/object-inspect/LICENSE deleted file mode 100644 index ee27ba4..0000000 --- a/node_modules/object-inspect/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/object-inspect/example/all.js b/node_modules/object-inspect/example/all.js deleted file mode 100644 index 6d2d4be..0000000 --- a/node_modules/object-inspect/example/all.js +++ /dev/null @@ -1,17 +0,0 @@ -var inspect = require('../'); -var holes = [ 'a', 'b' ]; -holes[4] = 'e', holes[6] = 'g'; -var obj = { - a: 1, - b: [ 3, 4, undefined, null ], - c: undefined, - d: null, - e: { - regex: /^x/i, - buf: new Buffer('abc'), - holes: holes - }, - now: new Date -}; -obj.self = obj; -console.log(inspect(obj)); diff --git a/node_modules/object-inspect/example/circular.js b/node_modules/object-inspect/example/circular.js deleted file mode 100644 index 1006d0c..0000000 --- a/node_modules/object-inspect/example/circular.js +++ /dev/null @@ -1,4 +0,0 @@ -var inspect = require('../'); -var obj = { a: 1, b: [3,4] }; -obj.c = obj; -console.log(inspect(obj)); diff --git a/node_modules/object-inspect/example/fn.js b/node_modules/object-inspect/example/fn.js deleted file mode 100644 index 4c00ba6..0000000 --- a/node_modules/object-inspect/example/fn.js +++ /dev/null @@ -1,3 +0,0 @@ -var inspect = require('../'); -var obj = [ 1, 2, function f (n) { return n + 5 }, 4 ]; -console.log(inspect(obj)); diff --git a/node_modules/object-inspect/example/inspect.js b/node_modules/object-inspect/example/inspect.js deleted file mode 100644 index b5ad4d1..0000000 --- a/node_modules/object-inspect/example/inspect.js +++ /dev/null @@ -1,7 +0,0 @@ -var inspect = require('../'); - -var d = document.createElement('div'); -d.setAttribute('id', 'beep'); -d.innerHTML = 'woooiiiii'; - -console.log(inspect([ d, { a: 3, b : 4, c: [5,6,[7,[8,[9]]]] } ])); diff --git a/node_modules/object-inspect/index.js b/node_modules/object-inspect/index.js deleted file mode 100644 index 817d66a..0000000 --- a/node_modules/object-inspect/index.js +++ /dev/null @@ -1,207 +0,0 @@ -var hasMap = typeof Map === 'function' && Map.prototype; -var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; -var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; -var mapForEach = hasMap && Map.prototype.forEach; -var hasSet = typeof Set === 'function' && Set.prototype; -var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; -var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; -var setForEach = hasSet && Set.prototype.forEach; -var booleanValueOf = Boolean.prototype.valueOf; - -module.exports = function inspect_ (obj, opts, depth, seen) { - if (!opts) opts = {}; - - var maxDepth = opts.depth === undefined ? 5 : opts.depth; - if (depth === undefined) depth = 0; - if (depth >= maxDepth && maxDepth > 0 && obj && typeof obj === 'object') { - return '[Object]'; - } - - if (seen === undefined) seen = []; - else if (indexOf(seen, obj) >= 0) { - return '[Circular]'; - } - - function inspect (value, from) { - if (from) { - seen = seen.slice(); - seen.push(from); - } - return inspect_(value, opts, depth + 1, seen); - } - - if (typeof obj === 'string') { - return inspectString(obj); - } - else if (typeof obj === 'function') { - var name = nameOf(obj); - return '[Function' + (name ? ': ' + name : '') + ']'; - } - else if (obj === null) { - return 'null'; - } - else if (isSymbol(obj)) { - var symString = Symbol.prototype.toString.call(obj); - return typeof obj === 'object' ? 'Object(' + symString + ')' : symString; - } - else if (isElement(obj)) { - var s = '<' + String(obj.nodeName).toLowerCase(); - var attrs = obj.attributes || []; - for (var i = 0; i < attrs.length; i++) { - s += ' ' + attrs[i].name + '="' + quote(attrs[i].value) + '"'; - } - s += '>'; - if (obj.childNodes && obj.childNodes.length) s += '...'; - s += ''; - return s; - } - else if (isArray(obj)) { - if (obj.length === 0) return '[]'; - var xs = Array(obj.length); - for (var i = 0; i < obj.length; i++) { - xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; - } - return '[ ' + xs.join(', ') + ' ]'; - } - else if (isError(obj)) { - var parts = []; - for (var key in obj) { - if (!has(obj, key)) continue; - - if (/[^\w$]/.test(key)) { - parts.push(inspect(key) + ': ' + inspect(obj[key])); - } - else { - parts.push(key + ': ' + inspect(obj[key])); - } - } - if (parts.length === 0) return '[' + obj + ']'; - return '{ [' + obj + '] ' + parts.join(', ') + ' }'; - } - else if (typeof obj === 'object' && typeof obj.inspect === 'function') { - return obj.inspect(); - } - else if (isMap(obj)) { - var parts = []; - mapForEach.call(obj, function (value, key) { - parts.push(inspect(key, obj) + ' => ' + inspect(value, obj)); - }); - return 'Map (' + mapSize.call(obj) + ') {' + parts.join(', ') + '}'; - } - else if (isSet(obj)) { - var parts = []; - setForEach.call(obj, function (value ) { - parts.push(inspect(value, obj)); - }); - return 'Set (' + setSize.call(obj) + ') {' + parts.join(', ') + '}'; - } - else if (typeof obj !== 'object') { - return String(obj); - } - else if (isNumber(obj)) { - return 'Object(' + Number(obj) + ')'; - } - else if (isBoolean(obj)) { - return 'Object(' + booleanValueOf.call(obj) + ')'; - } - else if (isString(obj)) { - return 'Object(' + inspect(String(obj)) + ')'; - } - else if (!isDate(obj) && !isRegExp(obj)) { - var xs = [], keys = []; - for (var key in obj) { - if (has(obj, key)) keys.push(key); - } - keys.sort(); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (/[^\w$]/.test(key)) { - xs.push(inspect(key) + ': ' + inspect(obj[key], obj)); - } - else xs.push(key + ': ' + inspect(obj[key], obj)); - } - if (xs.length === 0) return '{}'; - return '{ ' + xs.join(', ') + ' }'; - } - else return String(obj); -}; - -function quote (s) { - return String(s).replace(/"/g, '"'); -} - -function isArray (obj) { return toStr(obj) === '[object Array]' } -function isDate (obj) { return toStr(obj) === '[object Date]' } -function isRegExp (obj) { return toStr(obj) === '[object RegExp]' } -function isError (obj) { return toStr(obj) === '[object Error]' } -function isSymbol (obj) { return toStr(obj) === '[object Symbol]' } -function isString (obj) { return toStr(obj) === '[object String]' } -function isNumber (obj) { return toStr(obj) === '[object Number]' } -function isBoolean (obj) { return toStr(obj) === '[object Boolean]' } - -var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; -function has (obj, key) { - return hasOwn.call(obj, key); -} - -function toStr (obj) { - return Object.prototype.toString.call(obj); -} - -function nameOf (f) { - if (f.name) return f.name; - var m = f.toString().match(/^function\s*([\w$]+)/); - if (m) return m[1]; -} - -function indexOf (xs, x) { - if (xs.indexOf) return xs.indexOf(x); - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} - -function isMap (x) { - if (!mapSize) { - return false; - } - try { - mapSize.call(x); - return true; - } catch (e) {} - return false; -} - -function isSet (x) { - if (!setSize) { - return false; - } - try { - setSize.call(x); - return true; - } catch (e) {} - return false; -} - -function isElement (x) { - if (!x || typeof x !== 'object') return false; - if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { - return true; - } - return typeof x.nodeName === 'string' - && typeof x.getAttribute === 'function' - ; -} - -function inspectString (str) { - var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte); - return "'" + s + "'"; - - function lowbyte (c) { - var n = c.charCodeAt(0); - var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n]; - if (x) return '\\' + x; - return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16); - } -} diff --git a/node_modules/object-inspect/package.json b/node_modules/object-inspect/package.json deleted file mode 100644 index 882b65a..0000000 --- a/node_modules/object-inspect/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_args": [ - [ - "object-inspect@~1.2.1", - "/Users/jbaylina/git/MVP/node_modules/tape" - ] - ], - "_from": "object-inspect@>=1.2.1 <1.3.0", - "_id": "object-inspect@1.2.1", - "_inCache": true, - "_installable": true, - "_location": "/object-inspect", - "_nodeVersion": "5.10.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/object-inspect-1.2.1.tgz_1460217450014_0.6012979652732611" - }, - "_npmUser": { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - "_npmVersion": "3.8.3", - "_phantomChildren": {}, - "_requested": { - "name": "object-inspect", - "raw": "object-inspect@~1.2.1", - "rawSpec": "~1.2.1", - "scope": null, - "spec": ">=1.2.1 <1.3.0", - "type": "range" - }, - "_requiredBy": [ - "/tape" - ], - "_resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.2.1.tgz", - "_shasum": "3b62226eb8f6d441751c7d8f22a20ff80ac9dc3f", - "_shrinkwrap": null, - "_spec": "object-inspect@~1.2.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/tape", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/object-inspect/issues" - }, - "dependencies": {}, - "description": "string representations of objects in node and the browser", - "devDependencies": { - "tape": "^4.5.1" - }, - "directories": {}, - "dist": { - "shasum": "3b62226eb8f6d441751c7d8f22a20ff80ac9dc3f", - "tarball": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.2.1.tgz" - }, - "gitHead": "bd0329aaaf501de7bf2a6c5d714f533ced5e96f1", - "homepage": "https://github.com/substack/object-inspect", - "keywords": [ - "inspect", - "util.inspect", - "object", - "stringify", - "pretty" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "substack@gmail.com", - "name": "substack" - }, - { - "email": "ljharb@gmail.com", - "name": "ljharb" - } - ], - "name": "object-inspect", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/object-inspect.git" - }, - "scripts": { - "test": "tape test/*.js" - }, - "testling": { - "browsers": [ - "ie/6..latest", - "chrome/latest", - "firefox/latest", - "safari/latest", - "opera/latest", - "iphone/latest", - "ipad/latest", - "android/latest" - ], - "files": [ - "test/*.js", - "test/browser/*.js" - ] - }, - "version": "1.2.1" -} diff --git a/node_modules/object-inspect/readme.markdown b/node_modules/object-inspect/readme.markdown deleted file mode 100644 index 41959a4..0000000 --- a/node_modules/object-inspect/readme.markdown +++ /dev/null @@ -1,59 +0,0 @@ -# object-inspect - -string representations of objects in node and the browser - -[![testling badge](https://ci.testling.com/substack/object-inspect.png)](https://ci.testling.com/substack/object-inspect) - -[![build status](https://secure.travis-ci.org/substack/object-inspect.png)](http://travis-ci.org/substack/object-inspect) - -# example - -## circular - -``` js -var inspect = require('object-inspect'); -var obj = { a: 1, b: [3,4] }; -obj.c = obj; -console.log(inspect(obj)); -``` - -## dom element - -``` js -var inspect = require('object-inspect'); - -var d = document.createElement('div'); -d.setAttribute('id', 'beep'); -d.innerHTML = 'woooiiiii'; - -console.log(inspect([ d, { a: 3, b : 4, c: [5,6,[7,[8,[9]]]] } ])); -``` - -output: - -``` -[
    ...
    , { a: 3, b: 4, c: [ 5, 6, [ 7, [ 8, [ ... ] ] ] ] } ] -``` - -# methods - -``` js -var inspect = require('object-inspect') -``` - -## var s = inspect(obj, opts={}) - -Return a string `s` with the string representation of `obj` up to a depth of -`opts.depth`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install object-inspect -``` - -# license - -MIT diff --git a/node_modules/object-inspect/test/browser/dom.js b/node_modules/object-inspect/test/browser/dom.js deleted file mode 100644 index 18a3d70..0000000 --- a/node_modules/object-inspect/test/browser/dom.js +++ /dev/null @@ -1,15 +0,0 @@ -var inspect = require('../../'); -var test = require('tape'); - -test('dom element', function (t) { - t.plan(1); - - var d = document.createElement('div'); - d.setAttribute('id', 'beep'); - d.innerHTML = 'woooiiiii'; - - t.equal( - inspect([ d, { a: 3, b : 4, c: [5,6,[7,[8,[9]]]] } ]), - '[
    ...
    , { a: 3, b: 4, c: [ 5, 6, [ 7, [ 8, [Object] ] ] ] } ]' - ); -}); diff --git a/node_modules/object-inspect/test/circular.js b/node_modules/object-inspect/test/circular.js deleted file mode 100644 index 28598a7..0000000 --- a/node_modules/object-inspect/test/circular.js +++ /dev/null @@ -1,9 +0,0 @@ -var inspect = require('../'); -var test = require('tape'); - -test('circular', function (t) { - t.plan(1); - var obj = { a: 1, b: [3,4] }; - obj.c = obj; - t.equal(inspect(obj), '{ a: 1, b: [ 3, 4 ], c: [Circular] }'); -}); diff --git a/node_modules/object-inspect/test/deep.js b/node_modules/object-inspect/test/deep.js deleted file mode 100644 index a8dbb58..0000000 --- a/node_modules/object-inspect/test/deep.js +++ /dev/null @@ -1,9 +0,0 @@ -var inspect = require('../'); -var test = require('tape'); - -test('deep', function (t) { - t.plan(2); - var obj = [ [ [ [ [ [ 500 ] ] ] ] ] ]; - t.equal(inspect(obj), '[ [ [ [ [ [Object] ] ] ] ] ]'); - t.equal(inspect(obj, { depth: 2 }), '[ [ [Object] ] ]'); -}); diff --git a/node_modules/object-inspect/test/element.js b/node_modules/object-inspect/test/element.js deleted file mode 100644 index 66df4b8..0000000 --- a/node_modules/object-inspect/test/element.js +++ /dev/null @@ -1,51 +0,0 @@ -var inspect = require('../'); -var test = require('tape'); - -test('element', function (t) { - t.plan(1); - var elem = { - nodeName: 'div', - attributes: [ { name: 'class', value: 'row' } ], - getAttribute: function (key) {}, - childNodes: [] - }; - var obj = [ 1, elem, 3 ]; - t.deepEqual(inspect(obj), '[ 1,
    , 3 ]'); -}); - -test('element no attr', function (t) { - t.plan(1); - var elem = { - nodeName: 'div', - getAttribute: function (key) {}, - childNodes: [] - }; - var obj = [ 1, elem, 3 ]; - t.deepEqual(inspect(obj), '[ 1,
    , 3 ]'); -}); - -test('element with contents', function (t) { - t.plan(1); - var elem = { - nodeName: 'div', - getAttribute: function (key) {}, - childNodes: [ { nodeName: 'b' } ] - }; - var obj = [ 1, elem, 3 ]; - t.deepEqual(inspect(obj), '[ 1,
    ...
    , 3 ]'); -}); - -test('element instance', function (t) { - t.plan(1); - var h = global.HTMLElement; - global.HTMLElement = function (name, attr) { - this.nodeName = name; - this.attributes = attr; - }; - global.HTMLElement.prototype.getAttribute = function () {}; - - var elem = new(global.HTMLElement)('div', []); - var obj = [ 1, elem, 3 ]; - t.deepEqual(inspect(obj), '[ 1,
    , 3 ]'); - global.HTMLElement = h; -}); diff --git a/node_modules/object-inspect/test/err.js b/node_modules/object-inspect/test/err.js deleted file mode 100644 index 0f31343..0000000 --- a/node_modules/object-inspect/test/err.js +++ /dev/null @@ -1,29 +0,0 @@ -var inspect = require('../'); -var test = require('tape'); - -test('type error', function (t) { - t.plan(1); - var aerr = new TypeError; - aerr.foo = 555; - aerr.bar = [1,2,3]; - - var berr = new TypeError('tuv'); - berr.baz = 555; - - var cerr = new SyntaxError; - cerr.message = 'whoa'; - cerr['a-b'] = 5; - - var obj = [ - new TypeError, - new TypeError('xxx'), - aerr, berr, cerr - ]; - t.equal(inspect(obj), '[ ' + [ - '[TypeError]', - '[TypeError: xxx]', - '{ [TypeError] foo: 555, bar: [ 1, 2, 3 ] }', - '{ [TypeError: tuv] baz: 555 }', - '{ [SyntaxError: whoa] message: \'whoa\', \'a-b\': 5 }' - ].join(', ') + ' ]'); -}); diff --git a/node_modules/object-inspect/test/fn.js b/node_modules/object-inspect/test/fn.js deleted file mode 100644 index 55357db..0000000 --- a/node_modules/object-inspect/test/fn.js +++ /dev/null @@ -1,16 +0,0 @@ -var inspect = require('../'); -var test = require('tape'); - -test('function', function (t) { - t.plan(1); - var obj = [ 1, 2, function f (n) {}, 4 ]; - t.equal(inspect(obj), '[ 1, 2, [Function: f], 4 ]'); -}); - -test('function name', function (t) { - t.plan(1); - var f = function () {}; - f.toString = function () { return 'function xxx () {}' }; - var obj = [ 1, 2, f, 4 ]; - t.equal(inspect(obj), '[ 1, 2, [Function: xxx], 4 ]'); -}); diff --git a/node_modules/object-inspect/test/has.js b/node_modules/object-inspect/test/has.js deleted file mode 100644 index e1970b3..0000000 --- a/node_modules/object-inspect/test/has.js +++ /dev/null @@ -1,31 +0,0 @@ -var inspect = require('../'); -var test = require('tape'); - -var withoutProperty = function (object, property, fn) { - var original; - if (Object.getOwnPropertyDescriptor) { - original = Object.getOwnPropertyDescriptor(object, property); - } else { - original = object[property]; - } - delete object[property]; - try { - fn(); - } finally { - if (Object.getOwnPropertyDescriptor) { - Object.defineProperty(object, property, original); - } else { - object[property] = original; - } - } -}; - -test('when Object#hasOwnProperty is deleted', function (t) { - t.plan(1); - var arr = [1, , 3]; - Array.prototype[1] = 2; // this is needed to account for "in" vs "hasOwnProperty" - withoutProperty(Object.prototype, 'hasOwnProperty', function () { - t.equal(inspect(arr), '[ 1, , 3 ]'); - }); - delete Array.prototype[1]; -}); diff --git a/node_modules/object-inspect/test/holes.js b/node_modules/object-inspect/test/holes.js deleted file mode 100644 index ae54de4..0000000 --- a/node_modules/object-inspect/test/holes.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tape'); -var inspect = require('../'); - -var xs = [ 'a', 'b' ]; -xs[5] = 'f'; -xs[7] = 'j'; -xs[8] = 'k'; - -test('holes', function (t) { - t.plan(1); - t.equal( - inspect(xs), - "[ 'a', 'b', , , , 'f', , 'j', 'k' ]" - ); -}); diff --git a/node_modules/object-inspect/test/inspect.js b/node_modules/object-inspect/test/inspect.js deleted file mode 100644 index 12e231a..0000000 --- a/node_modules/object-inspect/test/inspect.js +++ /dev/null @@ -1,8 +0,0 @@ -var inspect = require('../'); -var test = require('tape'); - -test('inspect', function (t) { - t.plan(1); - var obj = [ { inspect: function () { return '!XYZ¡' } }, [] ]; - t.equal(inspect(obj), '[ !XYZ¡, [] ]'); -}); diff --git a/node_modules/object-inspect/test/lowbyte.js b/node_modules/object-inspect/test/lowbyte.js deleted file mode 100644 index debd59c..0000000 --- a/node_modules/object-inspect/test/lowbyte.js +++ /dev/null @@ -1,12 +0,0 @@ -var test = require('tape'); -var inspect = require('../'); - -var obj = { x: 'a\r\nb', y: '\5! \x1f \022' }; - -test('interpolate low bytes', function (t) { - t.plan(1); - t.equal( - inspect(obj), - "{ x: 'a\\r\\nb', y: '\\x05! \\x1f \\x12' }" - ); -}); diff --git a/node_modules/object-inspect/test/undef.js b/node_modules/object-inspect/test/undef.js deleted file mode 100644 index 833238f..0000000 --- a/node_modules/object-inspect/test/undef.js +++ /dev/null @@ -1,12 +0,0 @@ -var test = require('tape'); -var inspect = require('../'); - -var obj = { a: 1, b: [ 3, 4, undefined, null ], c: undefined, d: null }; - -test('undef and null', function (t) { - t.plan(1); - t.equal( - inspect(obj), - '{ a: 1, b: [ 3, 4, undefined, null ], c: undefined, d: null }' - ); -}); diff --git a/node_modules/object-inspect/test/values.js b/node_modules/object-inspect/test/values.js deleted file mode 100644 index a07d480..0000000 --- a/node_modules/object-inspect/test/values.js +++ /dev/null @@ -1,122 +0,0 @@ -var inspect = require('../'); -var test = require('tape'); - -test('values', function (t) { - t.plan(1); - var obj = [ {}, [], { 'a-b': 5 } ]; - t.equal(inspect(obj), '[ {}, [], { \'a-b\': 5 } ]'); -}); - -test('has', function (t) { - t.plan(1); - var has = Object.prototype.hasOwnProperty; - delete Object.prototype.hasOwnProperty; - t.equal(inspect({ a: 1, b: 2 }), '{ a: 1, b: 2 }'); - Object.prototype.hasOwnProperty = has; -}); - -test('indexOf seen', function (t) { - t.plan(1); - var xs = [ 1, 2, 3, {} ]; - xs.push(xs); - - var seen = []; - seen.indexOf = undefined; - - t.equal( - inspect(xs, {}, 0, seen), - '[ 1, 2, 3, {}, [Circular] ]' - ); -}); - -test('seen seen', function (t) { - t.plan(1); - var xs = [ 1, 2, 3 ]; - - var seen = [ xs ]; - seen.indexOf = undefined; - - t.equal( - inspect(xs, {}, 0, seen), - '[Circular]' - ); -}); - -test('seen seen seen', function (t) { - t.plan(1); - var xs = [ 1, 2, 3 ]; - - var seen = [ 5, xs ]; - seen.indexOf = undefined; - - t.equal( - inspect(xs, {}, 0, seen), - '[Circular]' - ); -}); - -test('symbols', { skip: typeof Symbol !== 'function' }, function (t) { - var sym = Symbol('foo'); - t.equal(inspect(sym), 'Symbol(foo)', 'Symbol("foo") should be "Symbol(foo)"'); - t.equal(inspect(Object(sym)), 'Object(Symbol(foo))', 'Object(Symbol("foo")) should be "Object(Symbol(foo))"'); - t.end(); -}); - -test('Map', { skip: typeof Map !== 'function' }, function (t) { - var map = new Map(); - map.set({ a: 1 }, ['b']); - map.set(3, NaN); - var expectedString = 'Map (2) {' + inspect({ a: 1 }) + ' => ' + inspect(['b']) + ', 3 => NaN}'; - t.equal(inspect(map), expectedString, 'new Map([[{ a: 1 }, ["b"]], [3, NaN]]) should show size and contents'); - t.equal(inspect(new Map()), 'Map (0) {}', 'empty Map should show as empty'); - - var nestedMap = new Map(); - nestedMap.set(nestedMap, map); - t.equal(inspect(nestedMap), 'Map (1) {[Circular] => ' + expectedString + '}', 'Map containing a Map should work'); - - t.end(); -}); - -test('Set', { skip: typeof Set !== 'function' }, function (t) { - var set = new Set(); - set.add({ a: 1 }); - set.add(['b']); - var expectedString = 'Set (2) {' + inspect({ a: 1 }) + ', ' + inspect(['b']) + '}'; - t.equal(inspect(set), expectedString, 'new Set([{ a: 1 }, ["b"]]) should show size and contents'); - t.equal(inspect(new Set()), 'Set (0) {}', 'empty Set should show as empty'); - - var nestedSet = new Set(); - nestedSet.add(set); - nestedSet.add(nestedSet); - t.equal(inspect(nestedSet), 'Set (2) {' + expectedString + ', [Circular]}', 'Set containing a Set should work'); - - t.end(); -}); - -test('Strings', function (t) { - var str = 'abc'; - - t.equal(inspect(str), "'" + str + "'", 'primitive string shows as such'); - t.equal(inspect(Object(str)), 'Object(' + inspect(str) + ')', 'String object shows as such'); - - t.end(); -}); - -test('Numbers', function (t) { - var num = 42; - - t.equal(inspect(num), String(num), 'primitive number shows as such'); - t.equal(inspect(Object(num)), 'Object(' + inspect(num) + ')', 'Number object shows as such'); - - t.end(); -}); - -test('Booleans', function (t) { - t.equal(inspect(true), String(true), 'primitive true shows as such'); - t.equal(inspect(Object(true)), 'Object(' + inspect(true) + ')', 'Boolean object true shows as such'); - - t.equal(inspect(false), String(false), 'primitive false shows as such'); - t.equal(inspect(Object(false)), 'Object(' + inspect(false) + ')', 'Boolean false object shows as such'); - - t.end(); -}); diff --git a/node_modules/object-keys/.npmignore b/node_modules/object-keys/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/object-keys/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/object-keys/.travis.yml b/node_modules/object-keys/.travis.yml deleted file mode 100644 index 60d00ce..0000000 --- a/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.8" - - "0.6" diff --git a/node_modules/object-keys/README.md b/node_modules/object-keys/README.md deleted file mode 100644 index ab32d0a..0000000 --- a/node_modules/object-keys/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#object-keys [![Version Badge][2]][1] - -[![Build Status][3]][4] [![dependency status][5]][6] - -[![browser support][7]][8] - -An Object.keys shim. Uses Object.keys if available. - -## Example - -```js -var keys = require('object-keys'); -var assert = require('assert'); -var obj = { - a: true, - b: true, - c: true -}; - -assert.equal(keys(obj), ['a', 'b', 'c']); -``` - -## Source -Implementation taken directly from [es5-shim]([9]), with modifications, including from [lodash]([10]). - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/object-keys -[2]: http://vb.teelaun.ch/ljharb/object-keys.svg -[3]: https://travis-ci.org/ljharb/object-keys.png -[4]: https://travis-ci.org/ljharb/object-keys -[5]: https://david-dm.org/ljharb/object-keys.png -[6]: https://david-dm.org/ljharb/object-keys -[7]: https://ci.testling.com/ljharb/object-keys.png -[8]: https://ci.testling.com/ljharb/object-keys -[9]: https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js#L542-589 -[10]: https://github.com/bestiejs/lodash - diff --git a/node_modules/object-keys/foreach.js b/node_modules/object-keys/foreach.js deleted file mode 100644 index db32d45..0000000 --- a/node_modules/object-keys/foreach.js +++ /dev/null @@ -1,40 +0,0 @@ -var hasOwn = Object.prototype.hasOwnProperty; -var toString = Object.prototype.toString; - -var isFunction = function (fn) { - var isFunc = (typeof fn === 'function' && !(fn instanceof RegExp)) || toString.call(fn) === '[object Function]'; - if (!isFunc && typeof window !== 'undefined') { - isFunc = fn === window.setTimeout || fn === window.alert || fn === window.confirm || fn === window.prompt; - } - return isFunc; -}; - -module.exports = function forEach(obj, fn) { - if (!isFunction(fn)) { - throw new TypeError('iterator must be a function'); - } - var i, k, - isString = typeof obj === 'string', - l = obj.length, - context = arguments.length > 2 ? arguments[2] : null; - if (l === +l) { - for (i = 0; i < l; i++) { - if (context === null) { - fn(isString ? obj.charAt(i) : obj[i], i, obj); - } else { - fn.call(context, isString ? obj.charAt(i) : obj[i], i, obj); - } - } - } else { - for (k in obj) { - if (hasOwn.call(obj, k)) { - if (context === null) { - fn(obj[k], k, obj); - } else { - fn.call(context, obj[k], k, obj); - } - } - } - } -}; - diff --git a/node_modules/object-keys/index.js b/node_modules/object-keys/index.js deleted file mode 100644 index f5b24b6..0000000 --- a/node_modules/object-keys/index.js +++ /dev/null @@ -1,2 +0,0 @@ -module.exports = Object.keys || require('./shim'); - diff --git a/node_modules/object-keys/isArguments.js b/node_modules/object-keys/isArguments.js deleted file mode 100644 index 74a0989..0000000 --- a/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -var toString = Object.prototype.toString; - -module.exports = function isArguments(value) { - var str = toString.call(value); - var isArguments = str === '[object Arguments]'; - if (!isArguments) { - isArguments = str !== '[object Array]' - && value !== null - && typeof value === 'object' - && typeof value.length === 'number' - && value.length >= 0 - && toString.call(value.callee) === '[object Function]'; - } - return isArguments; -}; - diff --git a/node_modules/object-keys/package.json b/node_modules/object-keys/package.json deleted file mode 100644 index 0678fdd..0000000 --- a/node_modules/object-keys/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "object-keys@~0.4.0", - "/Users/jbaylina/git/MVP/node_modules/xtend" - ] - ], - "_from": "object-keys@>=0.4.0 <0.5.0", - "_id": "object-keys@0.4.0", - "_inCache": true, - "_installable": true, - "_location": "/object-keys", - "_npmUser": { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - "_npmVersion": "1.3.5", - "_phantomChildren": {}, - "_requested": { - "name": "object-keys", - "raw": "object-keys@~0.4.0", - "rawSpec": "~0.4.0", - "scope": null, - "spec": ">=0.4.0 <0.5.0", - "type": "range" - }, - "_requiredBy": [ - "/xtend" - ], - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "_shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336", - "_shrinkwrap": null, - "_spec": "object-keys@~0.4.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/xtend", - "author": { - "name": "Jordan Harband" - }, - "bugs": { - "url": "https://github.com/ljharb/object-keys/issues" - }, - "dependencies": {}, - "deprecated": "", - "description": "An Object.keys replacement, in case Object.keys is not available. From https://github.com/kriskowal/es5-shim", - "devDependencies": { - "foreach": "~2.0.3", - "indexof": "~0.0.1", - "is": "~0.2.6", - "tape": "~1.0.4" - }, - "directories": {}, - "dist": { - "shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336", - "tarball": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" - }, - "homepage": "https://github.com/ljharb/object-keys#readme", - "keywords": [ - "Object.keys", - "keys", - "ES5", - "shim" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "ljharb@gmail.com", - "name": "ljharb" - } - ], - "name": "object-keys", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/object-keys.git" - }, - "scripts": { - "test": "node test/index.js" - }, - "testling": { - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ], - "files": "test/index.js" - }, - "version": "0.4.0" -} diff --git a/node_modules/object-keys/shim.js b/node_modules/object-keys/shim.js deleted file mode 100644 index b88421b..0000000 --- a/node_modules/object-keys/shim.js +++ /dev/null @@ -1,62 +0,0 @@ -(function () { - "use strict"; - - // modified from https://github.com/kriskowal/es5-shim - var has = Object.prototype.hasOwnProperty, - toString = Object.prototype.toString, - forEach = require('./foreach'), - isArgs = require('./isArguments'), - hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'), - hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'), - dontEnums = [ - "toString", - "toLocaleString", - "valueOf", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "constructor" - ], - keysShim; - - keysShim = function keys(object) { - var isObject = object !== null && typeof object === 'object', - isFunction = toString.call(object) === '[object Function]', - isArguments = isArgs(object), - theKeys = []; - - if (!isObject && !isFunction && !isArguments) { - throw new TypeError("Object.keys called on a non-object"); - } - - if (isArguments) { - forEach(object, function (value) { - theKeys.push(value); - }); - } else { - var name, - skipProto = hasProtoEnumBug && isFunction; - - for (name in object) { - if (!(skipProto && name === 'prototype') && has.call(object, name)) { - theKeys.push(name); - } - } - } - - if (hasDontEnumBug) { - var ctor = object.constructor, - skipConstructor = ctor && ctor.prototype === object; - - forEach(dontEnums, function (dontEnum) { - if (!(skipConstructor && dontEnum === 'constructor') && has.call(object, dontEnum)) { - theKeys.push(dontEnum); - } - }); - } - return theKeys; - }; - - module.exports = keysShim; -}()); - diff --git a/node_modules/object-keys/test/foreach.js b/node_modules/object-keys/test/foreach.js deleted file mode 100644 index f29f065..0000000 --- a/node_modules/object-keys/test/foreach.js +++ /dev/null @@ -1,156 +0,0 @@ -var test = require('tape'); -var forEach = require('../foreach.js'); - -test('second argument: iterator', function (t) { - var arr = []; - t.throws(function () { forEach(arr); }, TypeError, 'undefined is not a function'); - t.throws(function () { forEach(arr, null); }, TypeError, 'null is not a function'); - t.throws(function () { forEach(arr, ''); }, TypeError, 'string is not a function'); - t.throws(function () { forEach(arr, /a/); }, TypeError, 'regex is not a function'); - t.throws(function () { forEach(arr, true); }, TypeError, 'true is not a function'); - t.throws(function () { forEach(arr, false); }, TypeError, 'false is not a function'); - t.throws(function () { forEach(arr, NaN); }, TypeError, 'NaN is not a function'); - t.throws(function () { forEach(arr, 42); }, TypeError, '42 is not a function'); - t.doesNotThrow(function () { forEach(arr, function () {}); }, 'function is a function'); - t.doesNotThrow(function () { forEach(arr, setTimeout); }, 'setTimeout is a function'); - if (typeof window !== 'undefined') { - t.doesNotThrow(function () { forEach(arr, window.alert); }, 'alert is a function'); - } - t.end(); -}); - -test('array', function (t) { - var arr = [1, 2, 3]; - - t.test('iterates over every item', function (st) { - var index = 0; - forEach(arr, function () { index += 1; }); - st.equal(index, arr.length, 'iterates ' + arr.length + ' times'); - st.end(); - }); - - t.test('first iterator argument', function (st) { - var index = 0; - st.plan(arr.length); - forEach(arr, function (item) { - st.equal(arr[index], item, 'item ' + index + ' is passed as first argument'); - index += 1; - }); - st.end(); - }); - - t.test('second iterator argument', function (st) { - var counter = 0; - st.plan(arr.length); - forEach(arr, function (item, index) { - st.equal(counter, index, 'index ' + index + ' is passed as second argument'); - counter += 1; - }); - st.end(); - }); - - t.test('third iterator argument', function (st) { - st.plan(arr.length); - forEach(arr, function (item, index, array) { - st.deepEqual(arr, array, 'array is passed as third argument'); - }); - st.end(); - }); - - t.test('context argument', function (st) { - var context = {}; - st.plan(arr.length); - forEach(arr, function () { - st.equal(this, context, '"this" is the passed context'); - }, context); - st.end(); - }); - - t.end(); -}); - -test('object', function (t) { - var obj = { - a: 1, - b: 2, - c: 3 - }; - var keys = ['a', 'b', 'c']; - - var F = function () { - this.a = 1; - this.b = 2; - }; - F.prototype.c = 3; - var fKeys = ['a', 'b']; - - t.test('iterates over every object literal key', function (st) { - var counter = 0; - forEach(obj, function () { counter += 1; }); - st.equal(counter, keys.length, 'iterated ' + counter + ' times'); - st.end(); - }); - - t.test('iterates only over own keys', function (st) { - var counter = 0; - forEach(new F(), function () { counter += 1; }); - st.equal(counter, fKeys.length, 'iterated ' + fKeys.length + ' times'); - st.end(); - }); - - t.test('first iterator argument', function (st) { - var index = 0; - st.plan(keys.length); - forEach(obj, function (item) { - st.equal(obj[keys[index]], item, 'item at key ' + keys[index] + ' is passed as first argument'); - index += 1; - }); - st.end(); - }); - - t.test('second iterator argument', function (st) { - var counter = 0; - st.plan(keys.length); - forEach(obj, function (item, key) { - st.equal(keys[counter], key, 'key ' + key + ' is passed as second argument'); - counter += 1; - }); - st.end(); - }); - - t.test('third iterator argument', function (st) { - st.plan(keys.length); - forEach(obj, function (item, key, object) { - st.deepEqual(obj, object, 'object is passed as third argument'); - }); - st.end(); - }); - - t.test('context argument', function (st) { - var context = {}; - st.plan(1); - forEach({foo: 'bar'}, function () { - st.equal(this, context, '"this" is the passed context'); - }, context); - st.end(); - }); - - t.end(); -}); - - -test('string', function (t) { - var str = 'str'; - t.test('second iterator argument', function (st) { - var counter = 0; - st.plan(str.length * 2 + 1); - forEach(str, function (item, index) { - st.equal(counter, index, 'index ' + index + ' is passed as second argument'); - st.equal(str.charAt(index), item); - counter += 1; - }); - st.equal(counter, str.length, 'iterates ' + str.length + ' times'); - }); - t.end(); -}); - diff --git a/node_modules/object-keys/test/index.js b/node_modules/object-keys/test/index.js deleted file mode 100644 index 8b77b1f..0000000 --- a/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ - -require('./foreach'); -require('./isArguments'); - -require('./shim'); - diff --git a/node_modules/object-keys/test/isArguments.js b/node_modules/object-keys/test/isArguments.js deleted file mode 100644 index 62a07c2..0000000 --- a/node_modules/object-keys/test/isArguments.js +++ /dev/null @@ -1,10 +0,0 @@ -var test = require('tape'); -var isArguments = require('../isArguments'); - -test('is.arguments', function (t) { - t.notOk(isArguments([]), 'array is not arguments'); - (function () { t.ok(isArguments(arguments), 'arguments is arguments'); }()); - (function () { t.notOk(isArguments(Array.prototype.slice.call(arguments)), 'sliced arguments is not arguments'); }()); - t.end(); -}); - diff --git a/node_modules/object-keys/test/shim.js b/node_modules/object-keys/test/shim.js deleted file mode 100644 index 9d93271..0000000 --- a/node_modules/object-keys/test/shim.js +++ /dev/null @@ -1,134 +0,0 @@ -var test = require('tape'); -var shimmedKeys = require('../index.js'); -var is = require('is'); -var keys = require('../shim.js'); -var forEach = require('foreach'); -var indexOf = require('indexof'); - -var obj = { - "str": "boz", - "obj": {}, - "arr": [], - "bool": true, - "num": 42, - "aNull": null, - "undef": undefined -}; -var objKeys = ['str', 'obj', 'arr', 'bool', 'num', 'aNull', 'undef']; - -test('exports a function', function (t) { - if (Object.keys) { - t.equal(Object.keys, shimmedKeys, 'Object.keys is supported and exported'); - } else { - t.equal(keys, shimmedKeys, 'Object.keys is not supported; shim is exported'); - } - t.end(); -}); - -test('working with actual shim', function (t) { - t.notEqual(Object.keys, keys, 'keys shim is not native Object.keys'); - t.end(); -}); - -test('works with an object literal', function (t) { - var theKeys = keys(obj); - t.equal(is.array(theKeys), true, 'returns an array'); - t.deepEqual(theKeys, objKeys, 'Object has expected keys'); - t.end(); -}); - -test('works with an array', function (t) { - var arr = [1, 2, 3]; - var theKeys = keys(arr); - t.equal(is.array(theKeys), true, 'returns an array'); - t.deepEqual(theKeys, ['0', '1', '2'], 'Array has expected keys'); - t.end(); -}); - -test('works with a function', function (t) { - var foo = function () {}; - foo.a = true; - - t.doesNotThrow(function () { return keys(foo); }, 'does not throw an error'); - t.deepEqual(keys(foo), ['a'], 'returns expected keys'); - t.end(); -}); - -test('returns names which are own properties', function (t) { - forEach(keys(obj), function (name) { - t.equal(obj.hasOwnProperty(name), true, name + ' should be returned'); - }); - t.end(); -}); - -test('returns names which are enumerable', function (t) { - var k, loopedValues = []; - for (k in obj) { - loopedValues.push(k); - } - forEach(keys(obj), function (name) { - t.notEqual(indexOf(loopedValues, name), -1, name + ' is not enumerable'); - }); - t.end(); -}); - -test('throws an error for a non-object', function (t) { - t.throws( - function () { return keys(42); }, - new TypeError('Object.keys called on a non-object'), - 'throws on a non-object' - ); - t.end(); -}); - -test('works with an object instance', function (t) { - var Prototype = function () {}; - Prototype.prototype.foo = true; - var obj = new Prototype(); - obj.bar = true; - var theKeys = keys(obj); - t.equal(is.array(theKeys), true, 'returns an array'); - t.deepEqual(theKeys, ['bar'], 'Instance has expected keys'); - t.end(); -}); - -test('works in iOS 5 mobile Safari', function (t) { - var Foo = function () {}; - Foo.a = function () {}; - - // the bug is keys(Foo) => ['a', 'prototype'] instead of ['a'] - t.deepEqual(keys(Foo), ['a'], 'has expected keys'); - t.end(); -}); - -test('works in environments with the dontEnum bug (IE < 9)', function (t) { - var Foo = function () {}; - Foo.prototype.a = function () {}; - - // the bug is keys(Foo.prototype) => ['a', 'constructor'] instead of ['a'] - t.deepEqual(keys(Foo.prototype), ['a'], 'has expected keys'); - t.end(); -}); - -test('shadowed properties', function (t) { - var shadowedProps = [ - 'dummyControlProp', /* just to be sure */ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' - ]; - shadowedProps.sort(); - var shadowedObject = {}; - forEach(shadowedProps, function (value, index) { - shadowedObject[value] = index; - }); - var shadowedObjectKeys = keys(shadowedObject); - shadowedObjectKeys.sort(); - t.deepEqual(shadowedObjectKeys, shadowedProps, 'troublesome shadowed properties are keys of object literals'); - t.end(); -}); - diff --git a/node_modules/once/LICENSE b/node_modules/once/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/once/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/once/README.md b/node_modules/once/README.md deleted file mode 100644 index 1f1ffca..0000000 --- a/node_modules/once/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# once - -Only call a function once. - -## usage - -```javascript -var once = require('once') - -function load (file, cb) { - cb = once(cb) - loader.load('file') - loader.once('load', cb) - loader.once('error', cb) -} -``` - -Or add to the Function.prototype in a responsible way: - -```javascript -// only has to be done once -require('once').proto() - -function load (file, cb) { - cb = cb.once() - loader.load('file') - loader.once('load', cb) - loader.once('error', cb) -} -``` - -Ironically, the prototype feature makes this module twice as -complicated as necessary. - -To check whether you function has been called, use `fn.called`. Once the -function is called for the first time the return value of the original -function is saved in `fn.value` and subsequent calls will continue to -return this value. - -```javascript -var once = require('once') - -function load (cb) { - cb = once(cb) - var stream = createStream() - stream.once('data', cb) - stream.once('end', function () { - if (!cb.called) cb(new Error('not found')) - }) -} -``` - -## `once.strict(func)` - -Throw an error if the function is called twice. - -Some functions are expected to be called only once. Using `once` for them would -potentially hide logical errors. - -In the example below, the `greet` function has to call the callback only once: - -```javascript -function greet (name, cb) { - // return is missing from the if statement - // when no name is passed, the callback is called twice - if (!name) cb('Hello anonymous') - cb('Hello ' + name) -} - -function log (msg) { - console.log(msg) -} - -// this will print 'Hello anonymous' but the logical error will be missed -greet(null, once(msg)) - -// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time -greet(null, once.strict(msg)) -``` diff --git a/node_modules/once/once.js b/node_modules/once/once.js deleted file mode 100644 index 2354067..0000000 --- a/node_modules/once/once.js +++ /dev/null @@ -1,42 +0,0 @@ -var wrappy = require('wrappy') -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) - -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) - - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) - -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) - } - f.called = false - return f -} - -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f -} diff --git a/node_modules/once/package.json b/node_modules/once/package.json deleted file mode 100644 index e9f9341..0000000 --- a/node_modules/once/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "once@^1.3.0", - "/Users/jbaylina/git/MVP/node_modules/glob" - ] - ], - "_from": "once@>=1.3.0 <2.0.0", - "_id": "once@1.4.0", - "_inCache": true, - "_installable": true, - "_location": "/once", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/once-1.4.0.tgz_1473196269128_0.537820661207661" - }, - "_npmUser": { - "email": "i@izs.me", - "name": "isaacs" - }, - "_npmVersion": "3.10.7", - "_phantomChildren": {}, - "_requested": { - "name": "once", - "raw": "once@^1.3.0", - "rawSpec": "^1.3.0", - "scope": null, - "spec": ">=1.3.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/glob", - "/inflight" - ], - "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "_shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "_shrinkwrap": null, - "_spec": "once@^1.3.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/glob", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/once/issues" - }, - "dependencies": { - "wrappy": "1" - }, - "description": "Run a function exactly one time", - "devDependencies": { - "tap": "^7.0.1" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "tarball": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - }, - "files": [ - "once.js" - ], - "gitHead": "0e614d9f5a7e6f0305c625f6b581f6d80b33b8a6", - "homepage": "https://github.com/isaacs/once#readme", - "keywords": [ - "once", - "function", - "one", - "single" - ], - "license": "ISC", - "main": "once.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "once", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/once.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "1.4.0" -} diff --git a/node_modules/os-locale/index.js b/node_modules/os-locale/index.js deleted file mode 100644 index 2c8a006..0000000 --- a/node_modules/os-locale/index.js +++ /dev/null @@ -1,127 +0,0 @@ -'use strict'; -var childProcess = require('child_process'); -var execFileSync = childProcess.execFileSync; -var lcid = require('lcid'); -var defaultOpts = {spawn: true}; -var cache; - -function fallback() { - cache = 'en_US'; - return cache; -} - -function getEnvLocale(env) { - env = env || process.env; - var ret = env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE; - cache = getLocale(ret); - return ret; -} - -function parseLocale(x) { - var env = x.split('\n').reduce(function (env, def) { - def = def.split('='); - env[def[0]] = def[1]; - return env; - }, {}); - return getEnvLocale(env); -} - -function getLocale(str) { - return (str && str.replace(/[.:].*/, '')) || fallback(); -} - -module.exports = function (opts, cb) { - if (typeof opts === 'function') { - cb = opts; - opts = defaultOpts; - } else { - opts = opts || defaultOpts; - } - - if (cache || getEnvLocale() || opts.spawn === false) { - setImmediate(cb, null, cache); - return; - } - - var getAppleLocale = function () { - childProcess.execFile('defaults', ['read', '-g', 'AppleLocale'], function (err, stdout) { - if (err) { - fallback(); - return; - } - - cache = stdout.trim() || fallback(); - cb(null, cache); - }); - }; - - if (process.platform === 'win32') { - childProcess.execFile('wmic', ['os', 'get', 'locale'], function (err, stdout) { - if (err) { - fallback(); - return; - } - - var lcidCode = parseInt(stdout.replace('Locale', ''), 16); - cache = lcid.from(lcidCode) || fallback(); - cb(null, cache); - }); - } else { - childProcess.execFile('locale', function (err, stdout) { - if (err) { - fallback(); - return; - } - - var res = parseLocale(stdout); - - if (!res && process.platform === 'darwin') { - getAppleLocale(); - return; - } - - cache = getLocale(res); - cb(null, cache); - }); - } -}; - -module.exports.sync = function (opts) { - opts = opts || defaultOpts; - - if (cache || getEnvLocale() || !execFileSync || opts.spawn === false) { - return cache; - } - - if (process.platform === 'win32') { - var stdout; - - try { - stdout = execFileSync('wmic', ['os', 'get', 'locale'], {encoding: 'utf8'}); - } catch (err) { - return fallback(); - } - - var lcidCode = parseInt(stdout.replace('Locale', ''), 16); - cache = lcid.from(lcidCode) || fallback(); - return cache; - } - - var res; - - try { - res = parseLocale(execFileSync('locale', {encoding: 'utf8'})); - } catch (err) {} - - if (!res && process.platform === 'darwin') { - try { - cache = execFileSync('defaults', ['read', '-g', 'AppleLocale'], {encoding: 'utf8'}).trim() || fallback(); - return cache; - } catch (err) { - return fallback(); - } - } - - cache = getLocale(res); - return cache; -}; diff --git a/node_modules/os-locale/license b/node_modules/os-locale/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/os-locale/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/os-locale/package.json b/node_modules/os-locale/package.json deleted file mode 100644 index 9b36dbb..0000000 --- a/node_modules/os-locale/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "os-locale@^1.4.0", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "os-locale@>=1.4.0 <2.0.0", - "_id": "os-locale@1.4.0", - "_inCache": true, - "_installable": true, - "_location": "/os-locale", - "_nodeVersion": "3.0.0", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.13.3", - "_phantomChildren": {}, - "_requested": { - "name": "os-locale", - "raw": "os-locale@^1.4.0", - "rawSpec": "^1.4.0", - "scope": null, - "spec": ">=1.4.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs", - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "_shasum": "20f9f17ae29ed345e8bde583b13d2009803c14d9", - "_shrinkwrap": null, - "_spec": "os-locale@^1.4.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/os-locale/issues" - }, - "dependencies": { - "lcid": "^1.0.0" - }, - "description": "Get the system locale", - "devDependencies": { - "ava": "*", - "require-uncached": "^1.0.2", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "20f9f17ae29ed345e8bde583b13d2009803c14d9", - "tarball": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "b5c88233910b2e959fe84d841addb7a15e1cc813", - "homepage": "https://github.com/sindresorhus/os-locale", - "keywords": [ - "locale", - "lang", - "language", - "system", - "os", - "string", - "str", - "user", - "country", - "id", - "identifier", - "region" - ], - "license": "MIT", - "maintainers": [ - { - "email": "andrewbgoode@gmail.com", - "name": "abg" - }, - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "os-locale", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/os-locale.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.4.0" -} diff --git a/node_modules/os-locale/readme.md b/node_modules/os-locale/readme.md deleted file mode 100644 index b80a0bd..0000000 --- a/node_modules/os-locale/readme.md +++ /dev/null @@ -1,47 +0,0 @@ -# os-locale [![Build Status](https://travis-ci.org/sindresorhus/os-locale.svg?branch=master)](https://travis-ci.org/sindresorhus/os-locale) - -> Get the system [locale](http://en.wikipedia.org/wiki/Locale) - -Useful for localizing your module or app. - -POSIX systems: The returned locale refers to the [`LC_MESSAGE`](http://www.gnu.org/software/libc/manual/html_node/Locale-Categories.html#Locale-Categories) category, suitable for selecting the language used in the user interface for message translation. - - -## Install - -``` -$ npm install --save os-locale -``` - - -## Usage - -```js -var osLocale = require('os-locale'); - -osLocale(function (err, locale) { - console.log(locale); - //=> 'en_US' -}); -``` - - -## API - -### osLocale([options], callback(error, locale)) - -### osLocale.sync([options]) - -Returns the locale. - -#### options.spawn - -Type: `boolean` -Default: `true` - -Set to `false` to avoid spawning subprocesses and instead only resolve the locale from environment variables. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/parse-headers/.npmignore b/node_modules/parse-headers/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/parse-headers/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/parse-headers/.travis.yml b/node_modules/parse-headers/.travis.yml deleted file mode 100644 index 32d38f6..0000000 --- a/node_modules/parse-headers/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: -- '4' -env: - global: - - secure: K1OWZCmO4PvDis8LANVtqSnQ1DyE0d6ikAEEVWZG5qPzT9kPxXhJPIL+SemOQ6x15ERoGKB3GnWKwRTLnxI4mS3ktEfPAGxHQOtalSKBEdV1ml2n8ZmX9NZMl/la/3l5jcRS9Iwgj1hT2GsNPC1Z51nBY+0QhmS0oCOIRl2Perk= - - secure: BofgLxIrbEev31IAMm+mMhgGifZIV0qKv3oyNhg+rPOo3xhV3ni/BPnMFjc0QcIil40H88JIoUiEWFoTnmrficXHkzWJnd4q2kzF9MhnRvAxKO42ziUEklRP/YCNeXJcVXhyNJhBJTMDiKfUy1EU/6lRETZpW4xxXyNxg1NHhIk= -sudo: false diff --git a/node_modules/parse-headers/.zuul.yml b/node_modules/parse-headers/.zuul.yml deleted file mode 100644 index c0cf56a..0000000 --- a/node_modules/parse-headers/.zuul.yml +++ /dev/null @@ -1,13 +0,0 @@ -ui: tape - -browsers: - - name: chrome - version: latest - - name: safari - version: latest - - name: firefox - version: latest - - name: internet explorer - version: 8..latest - - name: opera - version: latest diff --git a/node_modules/parse-headers/LICENCE b/node_modules/parse-headers/LICENCE deleted file mode 100644 index 6ca87bb..0000000 --- a/node_modules/parse-headers/LICENCE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2014 David Björklund - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/parse-headers/example.js b/node_modules/parse-headers/example.js deleted file mode 100644 index 1b02863..0000000 --- a/node_modules/parse-headers/example.js +++ /dev/null @@ -1,11 +0,0 @@ -var parse = require('./parse-headers') - - , headers = [ - 'Date: Sun, 17 Aug 2014 16:24:52 GMT' - , 'Content-Type: text/html; charset=utf-8' - , 'Transfer-Encoding: chunked' - , 'X-Custom-Header: beep' - , 'X-Custom-Header: boop' - ].join('\n') - -console.log(parse(headers)) \ No newline at end of file diff --git a/node_modules/parse-headers/package.json b/node_modules/parse-headers/package.json deleted file mode 100644 index 12d4719..0000000 --- a/node_modules/parse-headers/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "_args": [ - [ - "parse-headers@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/xhr" - ] - ], - "_from": "parse-headers@>=2.0.0 <3.0.0", - "_id": "parse-headers@2.0.1", - "_inCache": true, - "_installable": true, - "_location": "/parse-headers", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "david.bjorklund@gmail.com", - "name": "kesla" - }, - "_npmVersion": "3.3.9", - "_phantomChildren": {}, - "_requested": { - "name": "parse-headers", - "raw": "parse-headers@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/xhr" - ], - "_resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", - "_shasum": "6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536", - "_shrinkwrap": null, - "_spec": "parse-headers@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/xhr", - "author": { - "email": "david.bjorklund@gmail.com", - "name": "David Björklund", - "url": "http://davidbjorklund.com/" - }, - "bugs": { - "url": "https://github.com/kesla/parse-headers/issues" - }, - "dependencies": { - "for-each": "^0.3.2", - "trim": "0.0.1" - }, - "description": "Parse http headers, works with browserify/xhr", - "devDependencies": { - "tape": "^4.2.2", - "zuul": "^3.7.2" - }, - "directories": {}, - "dist": { - "shasum": "6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536", - "tarball": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz" - }, - "gitHead": "c16ae5bebe94d377e081a37eee2bbf3d8e7869a8", - "homepage": "https://github.com/kesla/parse-headers", - "keywords": [ - "http", - "headers", - "browserify" - ], - "license": "MIT", - "main": "parse-headers.js", - "maintainers": [ - { - "email": "david.bjorklund@gmail.com", - "name": "kesla" - } - ], - "name": "parse-headers", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/kesla/parse-headers.git" - }, - "scripts": { - "test": "zuul test.js" - }, - "version": "2.0.1" -} diff --git a/node_modules/parse-headers/parse-headers.js b/node_modules/parse-headers/parse-headers.js deleted file mode 100644 index acc08e9..0000000 --- a/node_modules/parse-headers/parse-headers.js +++ /dev/null @@ -1,31 +0,0 @@ -var trim = require('trim') - , forEach = require('for-each') - , isArray = function(arg) { - return Object.prototype.toString.call(arg) === '[object Array]'; - } - -module.exports = function (headers) { - if (!headers) - return {} - - var result = {} - - forEach( - trim(headers).split('\n') - , function (row) { - var index = row.indexOf(':') - , key = trim(row.slice(0, index)).toLowerCase() - , value = trim(row.slice(index + 1)) - - if (typeof(result[key]) === 'undefined') { - result[key] = value - } else if (isArray(result[key])) { - result[key].push(value) - } else { - result[key] = [ result[key], value ] - } - } - ) - - return result -} \ No newline at end of file diff --git a/node_modules/parse-headers/readme.md b/node_modules/parse-headers/readme.md deleted file mode 100644 index 7c40247..0000000 --- a/node_modules/parse-headers/readme.md +++ /dev/null @@ -1,70 +0,0 @@ -# parse-headers[![build status](https://secure.travis-ci.org/kesla/parse-headers.svg)](http://travis-ci.org/kesla/parse-headers) - -Parse http headers, works with browserify/xhr - -[![NPM](https://nodei.co/npm/parse-headers.png?downloads&stars)](https://nodei.co/npm/parse-headers/) - -[![NPM](https://nodei.co/npm-dl/parse-headers.png)](https://nodei.co/npm/parse-headers/) - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/kesla-xhr-headers.svg)](https://saucelabs.com/u/kesla-xhr-headers) - -## Installation - -``` -npm install parse-headers -``` - -## Example - -### Input - -```javascript -var parse = require('./parse-headers') - - , headers = [ - 'Date: Sun, 17 Aug 2014 16:24:52 GMT' - , 'Content-Type: text/html; charset=utf-8' - , 'Transfer-Encoding: chunked' - , 'X-Custom-Header: beep' - , 'X-Custom-Header: boop' - ].join('\n') - -console.log(parse(headers)) -``` - -### Output - -``` -{ date: 'Sun, 17 Aug 2014 16:24:52 GMT', - 'content-type': 'text/html; charset=utf-8', - 'transfer-encoding': 'chunked', - 'x-custom-header': [ 'beep', 'boop' ] } -``` - -## Kudos - -Looked at https://github.com/watson/http-headers before creating this. - -## Licence - -Copyright (c) 2014 David Björklund - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/parse-headers/test.js b/node_modules/parse-headers/test.js deleted file mode 100644 index b324ced..0000000 --- a/node_modules/parse-headers/test.js +++ /dev/null @@ -1,70 +0,0 @@ -var test = require('tape') - , parse = require('./parse-headers') - - , headers1 = [ - '' - , 'Date: Sun, 17 Aug 2014 16:24:52 GMT' - , 'Content-Type: text/html; charset=utf-8' - , 'Transfer-Encoding: chunked' - , '' - ] - , headers2 = [ - '' - , 'Date: Sun, 17 Aug 2014 16:24:52 GMT' - , 'Content-Type: text/html; charset=utf-8' - , 'Transfer-Encoding: chunked' - , 'Set-Cookie: Foo' - , 'set-Cookie: bar' - , 'set-cookie: bong' - ] - -test('sanity check', function (t) { - - t.deepEqual(parse(), {}) - t.deepEqual(parse(''), {}) - t.end() -}) - -test('simple', function (t) { - t.deepEqual( - parse(headers1.join('\r\n')) - , { - date: 'Sun, 17 Aug 2014 16:24:52 GMT' - , 'content-type': 'text/html; charset=utf-8' - , 'transfer-encoding': 'chunked' - } - ) - t.deepEqual( - parse(headers1.join('\n')) - , { - date: 'Sun, 17 Aug 2014 16:24:52 GMT' - , 'content-type': 'text/html; charset=utf-8' - , 'transfer-encoding': 'chunked' - } - ) - - t.end() -}) - -test('duplicate keys', function (t) { - t.deepEqual( - parse(headers2.join('\r\n')) - , { - date: 'Sun, 17 Aug 2014 16:24:52 GMT' - , 'content-type': 'text/html; charset=utf-8' - , 'transfer-encoding': 'chunked' - , 'set-cookie': [ 'Foo', 'bar', 'bong' ] - } - ) - t.deepEqual( - parse(headers2.join('\n')) - , { - date: 'Sun, 17 Aug 2014 16:24:52 GMT' - , 'content-type': 'text/html; charset=utf-8' - , 'transfer-encoding': 'chunked' - , 'set-cookie': [ 'Foo', 'bar', 'bong' ] - } - ) - - t.end() -}) \ No newline at end of file diff --git a/node_modules/parse-json/index.js b/node_modules/parse-json/index.js deleted file mode 100644 index 04add8a..0000000 --- a/node_modules/parse-json/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; -var errorEx = require('error-ex'); -var fallback = require('./vendor/parse'); - -var JSONError = errorEx('JSONError', { - fileName: errorEx.append('in %s') -}); - -module.exports = function (x, reviver, filename) { - if (typeof reviver === 'string') { - filename = reviver; - reviver = null; - } - - try { - try { - return JSON.parse(x, reviver); - } catch (err) { - fallback.parse(x, { - mode: 'json', - reviver: reviver - }); - - throw err; - } - } catch (err) { - var jsonErr = new JSONError(err); - - if (filename) { - jsonErr.fileName = filename; - } - - throw jsonErr; - } -}; diff --git a/node_modules/parse-json/license b/node_modules/parse-json/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/parse-json/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/parse-json/package.json b/node_modules/parse-json/package.json deleted file mode 100644 index 91f6dc6..0000000 --- a/node_modules/parse-json/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "parse-json@^2.2.0", - "/Users/jbaylina/git/MVP/node_modules/load-json-file" - ] - ], - "_from": "parse-json@>=2.2.0 <3.0.0", - "_id": "parse-json@2.2.0", - "_inCache": true, - "_installable": true, - "_location": "/parse-json", - "_nodeVersion": "0.12.7", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": {}, - "_requested": { - "name": "parse-json", - "raw": "parse-json@^2.2.0", - "rawSpec": "^2.2.0", - "scope": null, - "spec": ">=2.2.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/load-json-file" - ], - "_resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "_shasum": "f480f40434ef80741f8469099f8dea18f55a4dc9", - "_shrinkwrap": null, - "_spec": "parse-json@^2.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/load-json-file", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/parse-json/issues" - }, - "dependencies": { - "error-ex": "^1.2.0" - }, - "description": "Parse JSON with more helpful errors", - "devDependencies": { - "ava": "0.0.4", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "f480f40434ef80741f8469099f8dea18f55a4dc9", - "tarball": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "vendor" - ], - "gitHead": "419b0cbb83e67af53f9fd3f7ff98605ea2020eb6", - "homepage": "https://github.com/sindresorhus/parse-json", - "keywords": [ - "parse", - "json", - "graceful", - "error", - "message", - "humanize", - "friendly", - "helpful", - "string", - "str" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "parse-json", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/parse-json.git" - }, - "scripts": { - "test": "xo && node test.js" - }, - "version": "2.2.0", - "xo": { - "ignores": [ - "vendor/**" - ] - } -} diff --git a/node_modules/parse-json/readme.md b/node_modules/parse-json/readme.md deleted file mode 100644 index ca96e60..0000000 --- a/node_modules/parse-json/readme.md +++ /dev/null @@ -1,83 +0,0 @@ -# parse-json [![Build Status](https://travis-ci.org/sindresorhus/parse-json.svg?branch=master)](https://travis-ci.org/sindresorhus/parse-json) - -> Parse JSON with more helpful errors - - -## Install - -``` -$ npm install --save parse-json -``` - - -## Usage - -```js -var parseJson = require('parse-json'); -var json = '{\n\t"foo": true,\n}'; - - -JSON.parse(json); -/* -undefined:3 -} -^ -SyntaxError: Unexpected token } -*/ - - -parseJson(json); -/* -JSONError: Trailing comma in object at 3:1 -} -^ -*/ - - -parseJson(json, 'foo.json'); -/* -JSONError: Trailing comma in object at 3:1 in foo.json -} -^ -*/ - - -// you can also add the filename at a later point -try { - parseJson(json); -} catch (err) { - err.fileName = 'foo.json'; - throw err; -} -/* -JSONError: Trailing comma in object at 3:1 in foo.json -} -^ -*/ -``` - -## API - -### parseJson(input, [reviver], [filename]) - -#### input - -Type: `string` - -#### reviver - -Type: `function` - -Prescribes how the value originally produced by parsing is transformed, before being returned. See [`JSON.parse` docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter -) for more. - -#### filename - -Type: `string` - -Filename displayed in the error message. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/parse-json/vendor/parse.js b/node_modules/parse-json/vendor/parse.js deleted file mode 100644 index 5f9fe99..0000000 --- a/node_modules/parse-json/vendor/parse.js +++ /dev/null @@ -1,752 +0,0 @@ -/* - * Author: Alex Kocharin - * GIT: https://github.com/rlidwka/jju - * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/ - */ - -// RTFM: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - -var Uni = require('./unicode') - -function isHexDigit(x) { - return (x >= '0' && x <= '9') - || (x >= 'A' && x <= 'F') - || (x >= 'a' && x <= 'f') -} - -function isOctDigit(x) { - return x >= '0' && x <= '7' -} - -function isDecDigit(x) { - return x >= '0' && x <= '9' -} - -var unescapeMap = { - '\'': '\'', - '"' : '"', - '\\': '\\', - 'b' : '\b', - 'f' : '\f', - 'n' : '\n', - 'r' : '\r', - 't' : '\t', - 'v' : '\v', - '/' : '/', -} - -function formatError(input, msg, position, lineno, column, json5) { - var result = msg + ' at ' + (lineno + 1) + ':' + (column + 1) - , tmppos = position - column - 1 - , srcline = '' - , underline = '' - - var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON - - // output no more than 70 characters before the wrong ones - if (tmppos < position - 70) { - tmppos = position - 70 - } - - while (1) { - var chr = input[++tmppos] - - if (isLineTerminator(chr) || tmppos === input.length) { - if (position >= tmppos) { - // ending line error, so show it after the last char - underline += '^' - } - break - } - srcline += chr - - if (position === tmppos) { - underline += '^' - } else if (position > tmppos) { - underline += input[tmppos] === '\t' ? '\t' : ' ' - } - - // output no more than 78 characters on the string - if (srcline.length > 78) break - } - - return result + '\n' + srcline + '\n' + underline -} - -function parse(input, options) { - // parse as a standard JSON mode - var json5 = !(options.mode === 'json' || options.legacy) - var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON - var isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON - - var length = input.length - , lineno = 0 - , linestart = 0 - , position = 0 - , stack = [] - - var tokenStart = function() {} - var tokenEnd = function(v) {return v} - - /* tokenize({ - raw: '...', - type: 'whitespace'|'comment'|'key'|'literal'|'separator'|'newline', - value: 'number'|'string'|'whatever', - path: [...], - }) - */ - if (options._tokenize) { - ;(function() { - var start = null - tokenStart = function() { - if (start !== null) throw Error('internal error, token overlap') - start = position - } - - tokenEnd = function(v, type) { - if (start != position) { - var hash = { - raw: input.substr(start, position-start), - type: type, - stack: stack.slice(0), - } - if (v !== undefined) hash.value = v - options._tokenize.call(null, hash) - } - start = null - return v - } - })() - } - - function fail(msg) { - var column = position - linestart - - if (!msg) { - if (position < length) { - var token = '\'' + - JSON - .stringify(input[position]) - .replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') - + '\'' - - if (!msg) msg = 'Unexpected token ' + token - } else { - if (!msg) msg = 'Unexpected end of input' - } - } - - var error = SyntaxError(formatError(input, msg, position, lineno, column, json5)) - error.row = lineno + 1 - error.column = column + 1 - throw error - } - - function newline(chr) { - // account for - if (chr === '\r' && input[position] === '\n') position++ - linestart = position - lineno++ - } - - function parseGeneric() { - var result - - while (position < length) { - tokenStart() - var chr = input[position++] - - if (chr === '"' || (chr === '\'' && json5)) { - return tokenEnd(parseString(chr), 'literal') - - } else if (chr === '{') { - tokenEnd(undefined, 'separator') - return parseObject() - - } else if (chr === '[') { - tokenEnd(undefined, 'separator') - return parseArray() - - } else if (chr === '-' - || chr === '.' - || isDecDigit(chr) - // + number Infinity NaN - || (json5 && (chr === '+' || chr === 'I' || chr === 'N')) - ) { - return tokenEnd(parseNumber(), 'literal') - - } else if (chr === 'n') { - parseKeyword('null') - return tokenEnd(null, 'literal') - - } else if (chr === 't') { - parseKeyword('true') - return tokenEnd(true, 'literal') - - } else if (chr === 'f') { - parseKeyword('false') - return tokenEnd(false, 'literal') - - } else { - position-- - return tokenEnd(undefined) - } - } - } - - function parseKey() { - var result - - while (position < length) { - tokenStart() - var chr = input[position++] - - if (chr === '"' || (chr === '\'' && json5)) { - return tokenEnd(parseString(chr), 'key') - - } else if (chr === '{') { - tokenEnd(undefined, 'separator') - return parseObject() - - } else if (chr === '[') { - tokenEnd(undefined, 'separator') - return parseArray() - - } else if (chr === '.' - || isDecDigit(chr) - ) { - return tokenEnd(parseNumber(true), 'key') - - } else if (json5 - && Uni.isIdentifierStart(chr) || (chr === '\\' && input[position] === 'u')) { - // unicode char or a unicode sequence - var rollback = position - 1 - var result = parseIdentifier() - - if (result === undefined) { - position = rollback - return tokenEnd(undefined) - } else { - return tokenEnd(result, 'key') - } - - } else { - position-- - return tokenEnd(undefined) - } - } - } - - function skipWhiteSpace() { - tokenStart() - while (position < length) { - var chr = input[position++] - - if (isLineTerminator(chr)) { - position-- - tokenEnd(undefined, 'whitespace') - tokenStart() - position++ - newline(chr) - tokenEnd(undefined, 'newline') - tokenStart() - - } else if (isWhiteSpace(chr)) { - // nothing - - } else if (chr === '/' - && json5 - && (input[position] === '/' || input[position] === '*') - ) { - position-- - tokenEnd(undefined, 'whitespace') - tokenStart() - position++ - skipComment(input[position++] === '*') - tokenEnd(undefined, 'comment') - tokenStart() - - } else { - position-- - break - } - } - return tokenEnd(undefined, 'whitespace') - } - - function skipComment(multi) { - while (position < length) { - var chr = input[position++] - - if (isLineTerminator(chr)) { - // LineTerminator is an end of singleline comment - if (!multi) { - // let parent function deal with newline - position-- - return - } - - newline(chr) - - } else if (chr === '*' && multi) { - // end of multiline comment - if (input[position] === '/') { - position++ - return - } - - } else { - // nothing - } - } - - if (multi) { - fail('Unclosed multiline comment') - } - } - - function parseKeyword(keyword) { - // keyword[0] is not checked because it should've checked earlier - var _pos = position - var len = keyword.length - for (var i=1; i= length || keyword[i] != input[position]) { - position = _pos-1 - fail() - } - position++ - } - } - - function parseObject() { - var result = options.null_prototype ? Object.create(null) : {} - , empty_object = {} - , is_non_empty = false - - while (position < length) { - skipWhiteSpace() - var item1 = parseKey() - skipWhiteSpace() - tokenStart() - var chr = input[position++] - tokenEnd(undefined, 'separator') - - if (chr === '}' && item1 === undefined) { - if (!json5 && is_non_empty) { - position-- - fail('Trailing comma in object') - } - return result - - } else if (chr === ':' && item1 !== undefined) { - skipWhiteSpace() - stack.push(item1) - var item2 = parseGeneric() - stack.pop() - - if (item2 === undefined) fail('No value found for key ' + item1) - if (typeof(item1) !== 'string') { - if (!json5 || typeof(item1) !== 'number') { - fail('Wrong key type: ' + item1) - } - } - - if ((item1 in empty_object || empty_object[item1] != null) && options.reserved_keys !== 'replace') { - if (options.reserved_keys === 'throw') { - fail('Reserved key: ' + item1) - } else { - // silently ignore it - } - } else { - if (typeof(options.reviver) === 'function') { - item2 = options.reviver.call(null, item1, item2) - } - - if (item2 !== undefined) { - is_non_empty = true - Object.defineProperty(result, item1, { - value: item2, - enumerable: true, - configurable: true, - writable: true, - }) - } - } - - skipWhiteSpace() - - tokenStart() - var chr = input[position++] - tokenEnd(undefined, 'separator') - - if (chr === ',') { - continue - - } else if (chr === '}') { - return result - - } else { - fail() - } - - } else { - position-- - fail() - } - } - - fail() - } - - function parseArray() { - var result = [] - - while (position < length) { - skipWhiteSpace() - stack.push(result.length) - var item = parseGeneric() - stack.pop() - skipWhiteSpace() - tokenStart() - var chr = input[position++] - tokenEnd(undefined, 'separator') - - if (item !== undefined) { - if (typeof(options.reviver) === 'function') { - item = options.reviver.call(null, String(result.length), item) - } - if (item === undefined) { - result.length++ - item = true // hack for check below, not included into result - } else { - result.push(item) - } - } - - if (chr === ',') { - if (item === undefined) { - fail('Elisions are not supported') - } - - } else if (chr === ']') { - if (!json5 && item === undefined && result.length) { - position-- - fail('Trailing comma in array') - } - return result - - } else { - position-- - fail() - } - } - } - - function parseNumber() { - // rewind because we don't know first char - position-- - - var start = position - , chr = input[position++] - , t - - var to_num = function(is_octal) { - var str = input.substr(start, position - start) - - if (is_octal) { - var result = parseInt(str.replace(/^0o?/, ''), 8) - } else { - var result = Number(str) - } - - if (Number.isNaN(result)) { - position-- - fail('Bad numeric literal - "' + input.substr(start, position - start + 1) + '"') - } else if (!json5 && !str.match(/^-?(0|[1-9][0-9]*)(\.[0-9]+)?(e[+-]?[0-9]+)?$/i)) { - // additional restrictions imposed by json - position-- - fail('Non-json numeric literal - "' + input.substr(start, position - start + 1) + '"') - } else { - return result - } - } - - // ex: -5982475.249875e+29384 - // ^ skipping this - if (chr === '-' || (chr === '+' && json5)) chr = input[position++] - - if (chr === 'N' && json5) { - parseKeyword('NaN') - return NaN - } - - if (chr === 'I' && json5) { - parseKeyword('Infinity') - - // returning +inf or -inf - return to_num() - } - - if (chr >= '1' && chr <= '9') { - // ex: -5982475.249875e+29384 - // ^^^ skipping these - while (position < length && isDecDigit(input[position])) position++ - chr = input[position++] - } - - // special case for leading zero: 0.123456 - if (chr === '0') { - chr = input[position++] - - // new syntax, "0o777" old syntax, "0777" - var is_octal = chr === 'o' || chr === 'O' || isOctDigit(chr) - var is_hex = chr === 'x' || chr === 'X' - - if (json5 && (is_octal || is_hex)) { - while (position < length - && (is_hex ? isHexDigit : isOctDigit)( input[position] ) - ) position++ - - var sign = 1 - if (input[start] === '-') { - sign = -1 - start++ - } else if (input[start] === '+') { - start++ - } - - return sign * to_num(is_octal) - } - } - - if (chr === '.') { - // ex: -5982475.249875e+29384 - // ^^^ skipping these - while (position < length && isDecDigit(input[position])) position++ - chr = input[position++] - } - - if (chr === 'e' || chr === 'E') { - chr = input[position++] - if (chr === '-' || chr === '+') position++ - // ex: -5982475.249875e+29384 - // ^^^ skipping these - while (position < length && isDecDigit(input[position])) position++ - chr = input[position++] - } - - // we have char in the buffer, so count for it - position-- - return to_num() - } - - function parseIdentifier() { - // rewind because we don't know first char - position-- - - var result = '' - - while (position < length) { - var chr = input[position++] - - if (chr === '\\' - && input[position] === 'u' - && isHexDigit(input[position+1]) - && isHexDigit(input[position+2]) - && isHexDigit(input[position+3]) - && isHexDigit(input[position+4]) - ) { - // UnicodeEscapeSequence - chr = String.fromCharCode(parseInt(input.substr(position+1, 4), 16)) - position += 5 - } - - if (result.length) { - // identifier started - if (Uni.isIdentifierPart(chr)) { - result += chr - } else { - position-- - return result - } - - } else { - if (Uni.isIdentifierStart(chr)) { - result += chr - } else { - return undefined - } - } - } - - fail() - } - - function parseString(endChar) { - // 7.8.4 of ES262 spec - var result = '' - - while (position < length) { - var chr = input[position++] - - if (chr === endChar) { - return result - - } else if (chr === '\\') { - if (position >= length) fail() - chr = input[position++] - - if (unescapeMap[chr] && (json5 || (chr != 'v' && chr != "'"))) { - result += unescapeMap[chr] - - } else if (json5 && isLineTerminator(chr)) { - // line continuation - newline(chr) - - } else if (chr === 'u' || (chr === 'x' && json5)) { - // unicode/character escape sequence - var off = chr === 'u' ? 4 : 2 - - // validation for \uXXXX - for (var i=0; i= length) fail() - if (!isHexDigit(input[position])) fail('Bad escape sequence') - position++ - } - - result += String.fromCharCode(parseInt(input.substr(position-off, off), 16)) - } else if (json5 && isOctDigit(chr)) { - if (chr < '4' && isOctDigit(input[position]) && isOctDigit(input[position+1])) { - // three-digit octal - var digits = 3 - } else if (isOctDigit(input[position])) { - // two-digit octal - var digits = 2 - } else { - var digits = 1 - } - position += digits - 1 - result += String.fromCharCode(parseInt(input.substr(position-digits, digits), 8)) - /*if (!isOctDigit(input[position])) { - // \0 is allowed still - result += '\0' - } else { - fail('Octal literals are not supported') - }*/ - - } else if (json5) { - // \X -> x - result += chr - - } else { - position-- - fail() - } - - } else if (isLineTerminator(chr)) { - fail() - - } else { - if (!json5 && chr.charCodeAt(0) < 32) { - position-- - fail('Unexpected control character') - } - - // SourceCharacter but not one of " or \ or LineTerminator - result += chr - } - } - - fail() - } - - skipWhiteSpace() - var return_value = parseGeneric() - if (return_value !== undefined || position < length) { - skipWhiteSpace() - - if (position >= length) { - if (typeof(options.reviver) === 'function') { - return_value = options.reviver.call(null, '', return_value) - } - return return_value - } else { - fail() - } - - } else { - if (position) { - fail('No data, only a whitespace') - } else { - fail('No data, empty input') - } - } -} - -/* - * parse(text, options) - * or - * parse(text, reviver) - * - * where: - * text - string - * options - object - * reviver - function - */ -module.exports.parse = function parseJSON(input, options) { - // support legacy functions - if (typeof(options) === 'function') { - options = { - reviver: options - } - } - - if (input === undefined) { - // parse(stringify(x)) should be equal x - // with JSON functions it is not 'cause of undefined - // so we're fixing it - return undefined - } - - // JSON.parse compat - if (typeof(input) !== 'string') input = String(input) - if (options == null) options = {} - if (options.reserved_keys == null) options.reserved_keys = 'ignore' - - if (options.reserved_keys === 'throw' || options.reserved_keys === 'ignore') { - if (options.null_prototype == null) { - options.null_prototype = true - } - } - - try { - return parse(input, options) - } catch(err) { - // jju is a recursive parser, so JSON.parse("{{{{{{{") could blow up the stack - // - // this catch is used to skip all those internal calls - if (err instanceof SyntaxError && err.row != null && err.column != null) { - var old_err = err - err = SyntaxError(old_err.message) - err.column = old_err.column - err.row = old_err.row - } - throw err - } -} - -module.exports.tokenize = function tokenizeJSON(input, options) { - if (options == null) options = {} - - options._tokenize = function(smth) { - if (options._addstack) smth.stack.unshift.apply(smth.stack, options._addstack) - tokens.push(smth) - } - - var tokens = [] - tokens.data = module.exports.parse(input, options) - return tokens -} - diff --git a/node_modules/parse-json/vendor/unicode.js b/node_modules/parse-json/vendor/unicode.js deleted file mode 100644 index 1a29143..0000000 --- a/node_modules/parse-json/vendor/unicode.js +++ /dev/null @@ -1,71 +0,0 @@ - -// This is autogenerated with esprima tools, see: -// https://github.com/ariya/esprima/blob/master/esprima.js -// -// PS: oh God, I hate Unicode - -// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart: - -var Uni = module.exports - -module.exports.isWhiteSpace = function isWhiteSpace(x) { - // section 7.2, table 2 - return x === '\u0020' - || x === '\u00A0' - || x === '\uFEFF' // <-- this is not a Unicode WS, only a JS one - || (x >= '\u0009' && x <= '\u000D') // 9 A B C D - - // + whitespace characters from unicode, category Zs - || x === '\u1680' - || x === '\u180E' - || (x >= '\u2000' && x <= '\u200A') // 0 1 2 3 4 5 6 7 8 9 A - || x === '\u2028' - || x === '\u2029' - || x === '\u202F' - || x === '\u205F' - || x === '\u3000' -} - -module.exports.isWhiteSpaceJSON = function isWhiteSpaceJSON(x) { - return x === '\u0020' - || x === '\u0009' - || x === '\u000A' - || x === '\u000D' -} - -module.exports.isLineTerminator = function isLineTerminator(x) { - // ok, here is the part when JSON is wrong - // section 7.3, table 3 - return x === '\u000A' - || x === '\u000D' - || x === '\u2028' - || x === '\u2029' -} - -module.exports.isLineTerminatorJSON = function isLineTerminatorJSON(x) { - return x === '\u000A' - || x === '\u000D' -} - -module.exports.isIdentifierStart = function isIdentifierStart(x) { - return x === '$' - || x === '_' - || (x >= 'A' && x <= 'Z') - || (x >= 'a' && x <= 'z') - || (x >= '\u0080' && Uni.NonAsciiIdentifierStart.test(x)) -} - -module.exports.isIdentifierPart = function isIdentifierPart(x) { - return x === '$' - || x === '_' - || (x >= 'A' && x <= 'Z') - || (x >= 'a' && x <= 'z') - || (x >= '0' && x <= '9') // <-- addition to Start - || (x >= '\u0080' && Uni.NonAsciiIdentifierPart.test(x)) -} - -module.exports.NonAsciiIdentifierStart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ - -// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart: - -module.exports.NonAsciiIdentifierPart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ diff --git a/node_modules/path-exists/index.js b/node_modules/path-exists/index.js deleted file mode 100644 index a7e680a..0000000 --- a/node_modules/path-exists/index.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; -var fs = require('fs'); -var Promise = require('pinkie-promise'); - -module.exports = function (fp) { - var fn = typeof fs.access === 'function' ? fs.access : fs.stat; - - return new Promise(function (resolve) { - fn(fp, function (err) { - resolve(!err); - }); - }); -}; - -module.exports.sync = function (fp) { - var fn = typeof fs.accessSync === 'function' ? fs.accessSync : fs.statSync; - - try { - fn(fp); - return true; - } catch (err) { - return false; - } -}; diff --git a/node_modules/path-exists/license b/node_modules/path-exists/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/path-exists/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/path-exists/package.json b/node_modules/path-exists/package.json deleted file mode 100644 index 75f91f4..0000000 --- a/node_modules/path-exists/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "path-exists@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/find-up" - ] - ], - "_from": "path-exists@>=2.0.0 <3.0.0", - "_id": "path-exists@2.1.0", - "_inCache": true, - "_installable": true, - "_location": "/path-exists", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.7", - "_phantomChildren": {}, - "_requested": { - "name": "path-exists", - "raw": "path-exists@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/find-up" - ], - "_resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "_shasum": "0feb6c64f0fc518d9a754dd5efb62c7022761f4b", - "_shrinkwrap": null, - "_spec": "path-exists@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/find-up", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/path-exists/issues" - }, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "description": "Check if a path exists", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "0feb6c64f0fc518d9a754dd5efb62c7022761f4b", - "tarball": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "3af423661e78466764f87c5712263c5d7a1ce5b7", - "homepage": "https://github.com/sindresorhus/path-exists", - "keywords": [ - "path", - "exists", - "exist", - "file", - "filepath", - "fs", - "filesystem", - "file-system", - "access", - "stat" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "path-exists", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/path-exists.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "2.1.0" -} diff --git a/node_modules/path-exists/readme.md b/node_modules/path-exists/readme.md deleted file mode 100644 index 8fbcd68..0000000 --- a/node_modules/path-exists/readme.md +++ /dev/null @@ -1,45 +0,0 @@ -# path-exists [![Build Status](https://travis-ci.org/sindresorhus/path-exists.svg?branch=master)](https://travis-ci.org/sindresorhus/path-exists) - -> Check if a path exists - -Because [`fs.exists()`](https://nodejs.org/api/fs.html#fs_fs_exists_path_callback) is being [deprecated](https://github.com/iojs/io.js/issues/103), but there's still a genuine use-case of being able to check if a path exists for other purposes than doing IO with it. - -Never use this before handling a file though: - -> In particular, checking if a file exists before opening it is an anti-pattern that leaves you vulnerable to race conditions: another process may remove the file between the calls to `fs.exists()` and `fs.open()`. Just open the file and handle the error when it's not there. - - -## Install - -``` -$ npm install --save path-exists -``` - - -## Usage - -```js -// foo.js -var pathExists = require('path-exists'); - -pathExists('foo.js').then(function (exists) { - console.log(exists); - //=> true -}); -``` - - -## API - -### pathExists(path) - -Returns a promise that resolves to a boolean of whether the path exists. - -### pathExists.sync(path) - -Returns a boolean of whether the path exists. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/path-is-absolute/index.js b/node_modules/path-is-absolute/index.js deleted file mode 100644 index 22aa6c3..0000000 --- a/node_modules/path-is-absolute/index.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -function posix(path) { - return path.charAt(0) === '/'; -} - -function win32(path) { - // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 - var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - var result = splitDeviceRe.exec(path); - var device = result[1] || ''; - var isUnc = Boolean(device && device.charAt(1) !== ':'); - - // UNC paths are always absolute - return Boolean(result[2] || isUnc); -} - -module.exports = process.platform === 'win32' ? win32 : posix; -module.exports.posix = posix; -module.exports.win32 = win32; diff --git a/node_modules/path-is-absolute/license b/node_modules/path-is-absolute/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/path-is-absolute/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/path-is-absolute/package.json b/node_modules/path-is-absolute/package.json deleted file mode 100644 index c869d8a..0000000 --- a/node_modules/path-is-absolute/package.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "_args": [ - [ - "path-is-absolute@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/glob" - ] - ], - "_from": "path-is-absolute@>=1.0.0 <2.0.0", - "_id": "path-is-absolute@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/path-is-absolute", - "_nodeVersion": "6.6.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/path-is-absolute-1.0.1.tgz_1475210523565_0.9876507974695414" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "path-is-absolute", - "raw": "path-is-absolute@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/glob" - ], - "_resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "_shasum": "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", - "_shrinkwrap": null, - "_spec": "path-is-absolute@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/glob", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/path-is-absolute/issues" - }, - "dependencies": {}, - "description": "Node.js 0.12 path.isAbsolute() ponyfill", - "devDependencies": { - "xo": "^0.16.0" - }, - "directories": {}, - "dist": { - "shasum": "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", - "tarball": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "edc91d348b21dac2ab65ea2fbec2868e2eff5eb6", - "homepage": "https://github.com/sindresorhus/path-is-absolute#readme", - "keywords": [ - "path", - "paths", - "file", - "dir", - "absolute", - "isabsolute", - "is-absolute", - "built-in", - "util", - "utils", - "core", - "ponyfill", - "polyfill", - "shim", - "is", - "detect", - "check" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "path-is-absolute", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/path-is-absolute.git" - }, - "scripts": { - "test": "xo && node test.js" - }, - "version": "1.0.1" -} diff --git a/node_modules/path-is-absolute/readme.md b/node_modules/path-is-absolute/readme.md deleted file mode 100644 index 8dbdf5f..0000000 --- a/node_modules/path-is-absolute/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute) - -> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com) - - -## Install - -``` -$ npm install --save path-is-absolute -``` - - -## Usage - -```js -const pathIsAbsolute = require('path-is-absolute'); - -// Running on Linux -pathIsAbsolute('/home/foo'); -//=> true -pathIsAbsolute('C:/Users/foo'); -//=> false - -// Running on Windows -pathIsAbsolute('C:/Users/foo'); -//=> true -pathIsAbsolute('/home/foo'); -//=> false - -// Running on any OS -pathIsAbsolute.posix('/home/foo'); -//=> true -pathIsAbsolute.posix('C:/Users/foo'); -//=> false -pathIsAbsolute.win32('C:/Users/foo'); -//=> true -pathIsAbsolute.win32('/home/foo'); -//=> false -``` - - -## API - -See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path). - -### pathIsAbsolute(path) - -### pathIsAbsolute.posix(path) - -POSIX specific version. - -### pathIsAbsolute.win32(path) - -Windows specific version. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/path-type/index.js b/node_modules/path-type/index.js deleted file mode 100644 index 207a1d1..0000000 --- a/node_modules/path-type/index.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -var fs = require('graceful-fs'); -var Promise = require('pinkie-promise'); -var pify = require('pify'); - -function type(fn, fn2, fp) { - if (typeof fp !== 'string') { - return Promise.reject(new TypeError('Expected a string')); - } - - return pify(fs[fn], Promise)(fp).then(function (stats) { - return stats[fn2](); - }); -} - -function typeSync(fn, fn2, fp) { - if (typeof fp !== 'string') { - throw new TypeError('Expected a string'); - } - - return fs[fn](fp)[fn2](); -} - -exports.file = type.bind(null, 'stat', 'isFile'); -exports.dir = type.bind(null, 'stat', 'isDirectory'); -exports.symlink = type.bind(null, 'lstat', 'isSymbolicLink'); -exports.fileSync = typeSync.bind(null, 'statSync', 'isFile'); -exports.dirSync = typeSync.bind(null, 'statSync', 'isDirectory'); -exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); diff --git a/node_modules/path-type/license b/node_modules/path-type/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/path-type/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/path-type/package.json b/node_modules/path-type/package.json deleted file mode 100644 index 9dd7ccb..0000000 --- a/node_modules/path-type/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "path-type@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/read-pkg" - ] - ], - "_from": "path-type@>=1.0.0 <2.0.0", - "_id": "path-type@1.1.0", - "_inCache": true, - "_installable": true, - "_location": "/path-type", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.7", - "_phantomChildren": {}, - "_requested": { - "name": "path-type", - "raw": "path-type@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/read-pkg" - ], - "_resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "_shasum": "59c44f7ee491da704da415da5a4070ba4f8fe441", - "_shrinkwrap": null, - "_spec": "path-type@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/read-pkg", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/path-type/issues" - }, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "description": "Check if a path is a file, directory, or symlink", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "59c44f7ee491da704da415da5a4070ba4f8fe441", - "tarball": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "dff5c2a62f89efe7e0cce600bf38e76196d8b4b2", - "homepage": "https://github.com/sindresorhus/path-type", - "keywords": [ - "path", - "fs", - "type", - "is", - "check", - "directory", - "dir", - "file", - "filepath", - "symlink", - "symbolic", - "link", - "stat", - "stats", - "filesystem" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "path-type", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/path-type.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.1.0", - "xo": { - "ignores": [ - "test.js" - ] - } -} diff --git a/node_modules/path-type/readme.md b/node_modules/path-type/readme.md deleted file mode 100644 index eac12d6..0000000 --- a/node_modules/path-type/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# path-type [![Build Status](https://travis-ci.org/sindresorhus/path-type.svg?branch=master)](https://travis-ci.org/sindresorhus/path-type) - -> Check if a path is a file, directory, or symlink - - -## Install - -``` -$ npm install --save path-type -``` - - -## Usage - -```js -var pathType = require('path-type'); - -pathType.file('package.json').then(function (isFile) { - console.log(isFile); - //=> true -}) -``` - - -## API - -### .file(path) -### .dir(path) -### .symlink(path) - -Returns a promise that resolves to a boolean of whether the path is the checked type. - -### .fileSync(path) -### .dirSync(path) -### .symlinkSync(path) - -Returns a boolean of whether the path is the checked type. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/pbkdf2/LICENSE b/node_modules/pbkdf2/LICENSE deleted file mode 100644 index a115b52..0000000 --- a/node_modules/pbkdf2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Daniel Cousens - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/pbkdf2/README.md b/node_modules/pbkdf2/README.md deleted file mode 100644 index 0575782..0000000 --- a/node_modules/pbkdf2/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# pbkdf2 - -[![NPM Package](https://img.shields.io/npm/v/pbkdf2.svg?style=flat-square)](https://www.npmjs.org/package/pbkdf2) -[![Build Status](https://img.shields.io/travis/crypto-browserify/pbkdf2.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/pbkdf2) -[![Dependency status](https://img.shields.io/david/crypto-browserify/pbkdf2.svg?style=flat-square)](https://david-dm.org/crypto-browserify/pbkdf2#info=dependencies) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -This library provides the functionality of PBKDF2 with the ability to use any supported hashing algorithm returned from `crypto.getHashes()` - - -## Usage - -```js -var pbkdf2 = require('pbkdf2') -var derivedKey = pbkdf2.pbkdf2Sync('password', 'salt', 1, 32, 'sha512') - -... -``` - -For more information on the API, please see the relevant [Node documentation](https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback). - - -## Credits - -This module is a derivative of [cryptocoinjs/pbkdf2-sha256](https://github.com/cryptocoinjs/pbkdf2-sha256/), so thanks to [JP Richardson](https://github.com/jprichardson/) for laying the ground work. - -Thank you to [FangDun Cai](https://github.com/fundon) for donating the package name on npm, if you're looking for his previous module it is located at [fundon/pbkdf2](https://github.com/fundon/pbkdf2). diff --git a/node_modules/pbkdf2/browser.js b/node_modules/pbkdf2/browser.js deleted file mode 100644 index e07b5ad..0000000 --- a/node_modules/pbkdf2/browser.js +++ /dev/null @@ -1,68 +0,0 @@ -var createHmac = require('create-hmac') -var checkParameters = require('./precondition') - -exports.pbkdf2 = function (password, salt, iterations, keylen, digest, callback) { - if (typeof digest === 'function') { - callback = digest - digest = undefined - } - - checkParameters(iterations, keylen) - if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2') - - setTimeout(function () { - callback(null, exports.pbkdf2Sync(password, salt, iterations, keylen, digest)) - }) -} - -var defaultEncoding -if (process.browser) { - defaultEncoding = 'utf-8' -} else { - var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10) - - defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary' -} - -exports.pbkdf2Sync = function (password, salt, iterations, keylen, digest) { - if (!Buffer.isBuffer(password)) password = new Buffer(password, defaultEncoding) - if (!Buffer.isBuffer(salt)) salt = new Buffer(salt, defaultEncoding) - - checkParameters(iterations, keylen) - - digest = digest || 'sha1' - - var hLen - var l = 1 - var DK = new Buffer(keylen) - var block1 = new Buffer(salt.length + 4) - salt.copy(block1, 0, 0, salt.length) - - var r - var T - - for (var i = 1; i <= l; i++) { - block1.writeUInt32BE(i, salt.length) - var U = createHmac(digest, password).update(block1).digest() - - if (!hLen) { - hLen = U.length - T = new Buffer(hLen) - l = Math.ceil(keylen / hLen) - r = keylen - (l - 1) * hLen - } - - U.copy(T, 0, 0, hLen) - - for (var j = 1; j < iterations; j++) { - U = createHmac(digest, password).update(U).digest() - for (var k = 0; k < hLen; k++) T[k] ^= U[k] - } - - var destPos = (i - 1) * hLen - var len = (i === l ? r : hLen) - T.copy(DK, destPos, 0, len) - } - - return DK -} diff --git a/node_modules/pbkdf2/index.js b/node_modules/pbkdf2/index.js deleted file mode 100644 index 2dc6c39..0000000 --- a/node_modules/pbkdf2/index.js +++ /dev/null @@ -1,7 +0,0 @@ -var crypto = require('crypto') -if (crypto.pbkdf2Sync.toString().indexOf('keylen, digest') === -1) { - throw new Error('Unsupported crypto version') -} - -exports.pbkdf2Sync = crypto.pbkdf2Sync -exports.pbkdf2 = crypto.pbkdf2 diff --git a/node_modules/pbkdf2/package.json b/node_modules/pbkdf2/package.json deleted file mode 100644 index 9557434..0000000 --- a/node_modules/pbkdf2/package.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "_args": [ - [ - "pbkdf2@^3.0.0", - "/Users/jbaylina/git/MVP/node_modules/bip39" - ] - ], - "_from": "pbkdf2@>=3.0.0 <4.0.0", - "_id": "pbkdf2@3.0.9", - "_inCache": true, - "_installable": true, - "_location": "/pbkdf2", - "_nodeVersion": "6.7.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/pbkdf2-3.0.9.tgz_1475671782268_0.27150986436754465" - }, - "_npmUser": { - "email": "email@dcousens.com", - "name": "dcousens" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "pbkdf2", - "raw": "pbkdf2@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/bip39", - "/scryptsy" - ], - "_resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.9.tgz", - "_shasum": "f2c4b25a600058b3c3773c086c37dbbee1ffe693", - "_shrinkwrap": null, - "_spec": "pbkdf2@^3.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/bip39", - "author": { - "name": "Daniel Cousens" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/pbkdf2/issues" - }, - "dependencies": { - "create-hmac": "^1.1.2" - }, - "description": "This library provides the functionality of PBKDF2 with the ability to use any supported hashing algorithm returned from crypto.getHashes()", - "devDependencies": { - "browserify": "*", - "nyc": "^6.4.0", - "standard": "*", - "tape": "^4.5.1" - }, - "directories": {}, - "dist": { - "shasum": "f2c4b25a600058b3c3773c086c37dbbee1ffe693", - "tarball": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.9.tgz" - }, - "engines": { - "node": ">=0.12" - }, - "files": [ - "browser.js", - "index.js", - "node-shim-async.js", - "node-shim.js", - "precondition.js" - ], - "gitHead": "188f9b0aca397f2937249504f72d1d7e4b2f7bd3", - "homepage": "https://github.com/crypto-browserify/pbkdf2", - "keywords": [ - "pbkdf2", - "kdf", - "salt", - "hash" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "cfddream@gmail.com", - "name": "fundon" - }, - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - { - "email": "email@dcousens.com", - "name": "dcousens" - }, - { - "email": "jprichardson@gmail.com", - "name": "jprichardson" - }, - { - "email": "dominic.tarr@gmail.com", - "name": "dominictarr" - }, - { - "email": "fedor@indutny.com", - "name": "indutny" - } - ], - "name": "pbkdf2", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/pbkdf2.git" - }, - "scripts": { - "bundle-test": "browserify test/index.js > test/bundle.js", - "coverage": "nyc --check-coverage --branches 90 --functions 100 tape test/*.js", - "lint": "standard", - "prepublish": "npm run test", - "test": "npm run lint && npm run unit", - "unit": "tape test/*.js" - }, - "standard": { - "ignore": [ - "test/bundle.js" - ] - }, - "version": "3.0.9" -} diff --git a/node_modules/pbkdf2/precondition.js b/node_modules/pbkdf2/precondition.js deleted file mode 100644 index 1519b00..0000000 --- a/node_modules/pbkdf2/precondition.js +++ /dev/null @@ -1,18 +0,0 @@ -var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs -module.exports = function (iterations, keylen) { - if (typeof iterations !== 'number') { - throw new TypeError('Iterations not a number') - } - - if (iterations < 0) { - throw new TypeError('Bad iterations') - } - - if (typeof keylen !== 'number') { - throw new TypeError('Key length not a number') - } - - if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */ - throw new TypeError('Bad key length') - } -} diff --git a/node_modules/pify/index.js b/node_modules/pify/index.js deleted file mode 100644 index 7c720eb..0000000 --- a/node_modules/pify/index.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -var processFn = function (fn, P, opts) { - return function () { - var that = this; - var args = new Array(arguments.length); - - for (var i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } - - return new P(function (resolve, reject) { - args.push(function (err, result) { - if (err) { - reject(err); - } else if (opts.multiArgs) { - var results = new Array(arguments.length - 1); - - for (var i = 1; i < arguments.length; i++) { - results[i - 1] = arguments[i]; - } - - resolve(results); - } else { - resolve(result); - } - }); - - fn.apply(that, args); - }); - }; -}; - -var pify = module.exports = function (obj, P, opts) { - if (typeof P !== 'function') { - opts = P; - P = Promise; - } - - opts = opts || {}; - opts.exclude = opts.exclude || [/.+Sync$/]; - - var filter = function (key) { - var match = function (pattern) { - return typeof pattern === 'string' ? key === pattern : pattern.test(key); - }; - - return opts.include ? opts.include.some(match) : !opts.exclude.some(match); - }; - - var ret = typeof obj === 'function' ? function () { - if (opts.excludeMain) { - return obj.apply(this, arguments); - } - - return processFn(obj, P, opts).apply(this, arguments); - } : {}; - - return Object.keys(obj).reduce(function (ret, key) { - var x = obj[key]; - - ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x; - - return ret; - }, ret); -}; - -pify.all = pify; diff --git a/node_modules/pify/license b/node_modules/pify/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/pify/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/pify/package.json b/node_modules/pify/package.json deleted file mode 100644 index 0b8fd15..0000000 --- a/node_modules/pify/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "pify@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/load-json-file" - ] - ], - "_from": "pify@>=2.0.0 <3.0.0", - "_id": "pify@2.3.0", - "_inCache": true, - "_installable": true, - "_location": "/pify", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.7", - "_phantomChildren": {}, - "_requested": { - "name": "pify", - "raw": "pify@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/load-json-file", - "/path-type" - ], - "_resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "_shasum": "ed141a6ac043a849ea588498e7dca8b15330e90c", - "_shrinkwrap": null, - "_spec": "pify@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/load-json-file", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/pify/issues" - }, - "dependencies": {}, - "description": "Promisify a callback-style function", - "devDependencies": { - "ava": "*", - "pinkie-promise": "^1.0.0", - "v8-natives": "0.0.2", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "ed141a6ac043a849ea588498e7dca8b15330e90c", - "tarball": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "2dd0d8b880e4ebcc5cc33ae126b02647418e4440", - "homepage": "https://github.com/sindresorhus/pify", - "keywords": [ - "promise", - "promises", - "promisify", - "denodify", - "denodeify", - "callback", - "cb", - "node", - "then", - "thenify", - "convert", - "transform", - "wrap", - "wrapper", - "bind", - "to", - "async", - "es2015" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "pify", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/pify.git" - }, - "scripts": { - "optimization-test": "node --allow-natives-syntax optimization-test.js", - "test": "xo && ava && npm run optimization-test" - }, - "version": "2.3.0" -} diff --git a/node_modules/pify/readme.md b/node_modules/pify/readme.md deleted file mode 100644 index c79ca8b..0000000 --- a/node_modules/pify/readme.md +++ /dev/null @@ -1,119 +0,0 @@ -# pify [![Build Status](https://travis-ci.org/sindresorhus/pify.svg?branch=master)](https://travis-ci.org/sindresorhus/pify) - -> Promisify a callback-style function - - -## Install - -``` -$ npm install --save pify -``` - - -## Usage - -```js -const fs = require('fs'); -const pify = require('pify'); - -// promisify a single function - -pify(fs.readFile)('package.json', 'utf8').then(data => { - console.log(JSON.parse(data).name); - //=> 'pify' -}); - -// or promisify all methods in a module - -pify(fs).readFile('package.json', 'utf8').then(data => { - console.log(JSON.parse(data).name); - //=> 'pify' -}); -``` - - -## API - -### pify(input, [promiseModule], [options]) - -Returns a promise wrapped version of the supplied function or module. - -#### input - -Type: `function`, `object` - -Callback-style function or module whose methods you want to promisify. - -#### promiseModule - -Type: `function` - -Custom promise module to use instead of the native one. - -Check out [`pinkie-promise`](https://github.com/floatdrop/pinkie-promise) if you need a tiny promise polyfill. - -#### options - -##### multiArgs - -Type: `boolean` -Default: `false` - -By default, the promisified function will only return the second argument from the callback, which works fine for most APIs. This option can be useful for modules like `request` that return multiple arguments. Turning this on will make it return an array of all arguments from the callback, excluding the error argument, instead of just the second argument. - -```js -const request = require('request'); -const pify = require('pify'); - -pify(request, {multiArgs: true})('https://sindresorhus.com').then(result => { - const [httpResponse, body] = result; -}); -``` - -##### include - -Type: `array` of (`string`|`regex`) - -Methods in a module to promisify. Remaining methods will be left untouched. - -##### exclude - -Type: `array` of (`string`|`regex`) -Default: `[/.+Sync$/]` - -Methods in a module **not** to promisify. Methods with names ending with `'Sync'` are excluded by default. - -##### excludeMain - -Type: `boolean` -Default: `false` - -By default, if given module is a function itself, this function will be promisified. Turn this option on if you want to promisify only methods of the module. - -```js -const pify = require('pify'); - -function fn() { - return true; -} - -fn.method = (data, callback) => { - setImmediate(() => { - callback(data, null); - }); -}; - -// promisify methods but not fn() -const promiseFn = pify(fn, {excludeMain: true}); - -if (promiseFn()) { - promiseFn.method('hi').then(data => { - console.log(data); - }); -} -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/pinkie-promise/index.js b/node_modules/pinkie-promise/index.js deleted file mode 100644 index 777377a..0000000 --- a/node_modules/pinkie-promise/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = typeof Promise === 'function' ? Promise : require('pinkie'); diff --git a/node_modules/pinkie-promise/license b/node_modules/pinkie-promise/license deleted file mode 100644 index 1aeb74f..0000000 --- a/node_modules/pinkie-promise/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/pinkie-promise/package.json b/node_modules/pinkie-promise/package.json deleted file mode 100644 index 7c04e5e..0000000 --- a/node_modules/pinkie-promise/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "pinkie-promise@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/har-validator" - ] - ], - "_from": "pinkie-promise@>=2.0.0 <3.0.0", - "_id": "pinkie-promise@2.0.1", - "_inCache": true, - "_installable": true, - "_location": "/pinkie-promise", - "_nodeVersion": "4.4.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/pinkie-promise-2.0.1.tgz_1460309839126_0.3422858319245279" - }, - "_npmUser": { - "email": "floatdrop@gmail.com", - "name": "floatdrop" - }, - "_npmVersion": "2.14.20", - "_phantomChildren": {}, - "_requested": { - "name": "pinkie-promise", - "raw": "pinkie-promise@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/find-up", - "/har-validator", - "/load-json-file", - "/path-exists", - "/path-type" - ], - "_resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "_shasum": "2135d6dfa7a358c069ac9b178776288228450ffa", - "_shrinkwrap": null, - "_spec": "pinkie-promise@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/har-validator", - "author": { - "email": "floatdrop@gmail.com", - "name": "Vsevolod Strukchinsky", - "url": "github.com/floatdrop" - }, - "bugs": { - "url": "https://github.com/floatdrop/pinkie-promise/issues" - }, - "dependencies": { - "pinkie": "^2.0.0" - }, - "description": "ES2015 Promise ponyfill", - "devDependencies": { - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "2135d6dfa7a358c069ac9b178776288228450ffa", - "tarball": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "4a936c09c34ad591a25db93f1216d242de0d6184", - "homepage": "https://github.com/floatdrop/pinkie-promise", - "keywords": [ - "promise", - "promises", - "es2015", - "es6", - "polyfill", - "ponyfill" - ], - "license": "MIT", - "maintainers": [ - { - "email": "floatdrop@gmail.com", - "name": "floatdrop" - } - ], - "name": "pinkie-promise", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/floatdrop/pinkie-promise.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "2.0.1" -} diff --git a/node_modules/pinkie-promise/readme.md b/node_modules/pinkie-promise/readme.md deleted file mode 100644 index 78477f4..0000000 --- a/node_modules/pinkie-promise/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# pinkie-promise [![Build Status](https://travis-ci.org/floatdrop/pinkie-promise.svg?branch=master)](https://travis-ci.org/floatdrop/pinkie-promise) - -> [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) ponyfill - -Module exports global Promise object (if available) or [`pinkie`](http://github.com/floatdrop/pinkie) Promise polyfill. - -## Install - -``` -$ npm install --save pinkie-promise -``` - -## Usage - -```js -var Promise = require('pinkie-promise'); - -new Promise(function (resolve) { resolve('unicorns'); }); -//=> Promise { 'unicorns' } -``` - -## Related - -- [pify](https://github.com/sindresorhus/pify) - Promisify a callback-style function - -## License - -MIT © [Vsevolod Strukchinsky](http://github.com/floatdrop) diff --git a/node_modules/pinkie/index.js b/node_modules/pinkie/index.js deleted file mode 100644 index 14ce1bf..0000000 --- a/node_modules/pinkie/index.js +++ /dev/null @@ -1,292 +0,0 @@ -'use strict'; - -var PENDING = 'pending'; -var SETTLED = 'settled'; -var FULFILLED = 'fulfilled'; -var REJECTED = 'rejected'; -var NOOP = function () {}; -var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function'; - -var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate; -var asyncQueue = []; -var asyncTimer; - -function asyncFlush() { - // run promise callbacks - for (var i = 0; i < asyncQueue.length; i++) { - asyncQueue[i][0](asyncQueue[i][1]); - } - - // reset async asyncQueue - asyncQueue = []; - asyncTimer = false; -} - -function asyncCall(callback, arg) { - asyncQueue.push([callback, arg]); - - if (!asyncTimer) { - asyncTimer = true; - asyncSetTimer(asyncFlush, 0); - } -} - -function invokeResolver(resolver, promise) { - function resolvePromise(value) { - resolve(promise, value); - } - - function rejectPromise(reason) { - reject(promise, reason); - } - - try { - resolver(resolvePromise, rejectPromise); - } catch (e) { - rejectPromise(e); - } -} - -function invokeCallback(subscriber) { - var owner = subscriber.owner; - var settled = owner._state; - var value = owner._data; - var callback = subscriber[settled]; - var promise = subscriber.then; - - if (typeof callback === 'function') { - settled = FULFILLED; - try { - value = callback(value); - } catch (e) { - reject(promise, e); - } - } - - if (!handleThenable(promise, value)) { - if (settled === FULFILLED) { - resolve(promise, value); - } - - if (settled === REJECTED) { - reject(promise, value); - } - } -} - -function handleThenable(promise, value) { - var resolved; - - try { - if (promise === value) { - throw new TypeError('A promises callback cannot return that same promise.'); - } - - if (value && (typeof value === 'function' || typeof value === 'object')) { - // then should be retrieved only once - var then = value.then; - - if (typeof then === 'function') { - then.call(value, function (val) { - if (!resolved) { - resolved = true; - - if (value === val) { - fulfill(promise, val); - } else { - resolve(promise, val); - } - } - }, function (reason) { - if (!resolved) { - resolved = true; - - reject(promise, reason); - } - }); - - return true; - } - } - } catch (e) { - if (!resolved) { - reject(promise, e); - } - - return true; - } - - return false; -} - -function resolve(promise, value) { - if (promise === value || !handleThenable(promise, value)) { - fulfill(promise, value); - } -} - -function fulfill(promise, value) { - if (promise._state === PENDING) { - promise._state = SETTLED; - promise._data = value; - - asyncCall(publishFulfillment, promise); - } -} - -function reject(promise, reason) { - if (promise._state === PENDING) { - promise._state = SETTLED; - promise._data = reason; - - asyncCall(publishRejection, promise); - } -} - -function publish(promise) { - promise._then = promise._then.forEach(invokeCallback); -} - -function publishFulfillment(promise) { - promise._state = FULFILLED; - publish(promise); -} - -function publishRejection(promise) { - promise._state = REJECTED; - publish(promise); - if (!promise._handled && isNode) { - global.process.emit('unhandledRejection', promise._data, promise); - } -} - -function notifyRejectionHandled(promise) { - global.process.emit('rejectionHandled', promise); -} - -/** - * @class - */ -function Promise(resolver) { - if (typeof resolver !== 'function') { - throw new TypeError('Promise resolver ' + resolver + ' is not a function'); - } - - if (this instanceof Promise === false) { - throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.'); - } - - this._then = []; - - invokeResolver(resolver, this); -} - -Promise.prototype = { - constructor: Promise, - - _state: PENDING, - _then: null, - _data: undefined, - _handled: false, - - then: function (onFulfillment, onRejection) { - var subscriber = { - owner: this, - then: new this.constructor(NOOP), - fulfilled: onFulfillment, - rejected: onRejection - }; - - if ((onRejection || onFulfillment) && !this._handled) { - this._handled = true; - if (this._state === REJECTED && isNode) { - asyncCall(notifyRejectionHandled, this); - } - } - - if (this._state === FULFILLED || this._state === REJECTED) { - // already resolved, call callback async - asyncCall(invokeCallback, subscriber); - } else { - // subscribe - this._then.push(subscriber); - } - - return subscriber.then; - }, - - catch: function (onRejection) { - return this.then(null, onRejection); - } -}; - -Promise.all = function (promises) { - if (!Array.isArray(promises)) { - throw new TypeError('You must pass an array to Promise.all().'); - } - - return new Promise(function (resolve, reject) { - var results = []; - var remaining = 0; - - function resolver(index) { - remaining++; - return function (value) { - results[index] = value; - if (!--remaining) { - resolve(results); - } - }; - } - - for (var i = 0, promise; i < promises.length; i++) { - promise = promises[i]; - - if (promise && typeof promise.then === 'function') { - promise.then(resolver(i), reject); - } else { - results[i] = promise; - } - } - - if (!remaining) { - resolve(results); - } - }); -}; - -Promise.race = function (promises) { - if (!Array.isArray(promises)) { - throw new TypeError('You must pass an array to Promise.race().'); - } - - return new Promise(function (resolve, reject) { - for (var i = 0, promise; i < promises.length; i++) { - promise = promises[i]; - - if (promise && typeof promise.then === 'function') { - promise.then(resolve, reject); - } else { - resolve(promise); - } - } - }); -}; - -Promise.resolve = function (value) { - if (value && typeof value === 'object' && value.constructor === Promise) { - return value; - } - - return new Promise(function (resolve) { - resolve(value); - }); -}; - -Promise.reject = function (reason) { - return new Promise(function (resolve, reject) { - reject(reason); - }); -}; - -module.exports = Promise; diff --git a/node_modules/pinkie/license b/node_modules/pinkie/license deleted file mode 100644 index 1aeb74f..0000000 --- a/node_modules/pinkie/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/pinkie/package.json b/node_modules/pinkie/package.json deleted file mode 100644 index 4d98411..0000000 --- a/node_modules/pinkie/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "pinkie@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/pinkie-promise" - ] - ], - "_from": "pinkie@>=2.0.0 <3.0.0", - "_id": "pinkie@2.0.4", - "_inCache": true, - "_installable": true, - "_location": "/pinkie", - "_nodeVersion": "4.2.4", - "_npmUser": { - "email": "floatdrop@gmail.com", - "name": "floatdrop" - }, - "_npmVersion": "2.14.12", - "_phantomChildren": {}, - "_requested": { - "name": "pinkie", - "raw": "pinkie@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/pinkie-promise" - ], - "_resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "_shasum": "72556b80cfa0d48a974e80e77248e80ed4f7f870", - "_shrinkwrap": null, - "_spec": "pinkie@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/pinkie-promise", - "author": { - "email": "floatdrop@gmail.com", - "name": "Vsevolod Strukchinsky", - "url": "github.com/floatdrop" - }, - "bugs": { - "url": "https://github.com/floatdrop/pinkie/issues" - }, - "dependencies": {}, - "description": "Itty bitty little widdle twinkie pinkie ES2015 Promise implementation", - "devDependencies": { - "core-assert": "^0.1.1", - "coveralls": "^2.11.4", - "mocha": "*", - "nyc": "^3.2.2", - "promises-aplus-tests": "*", - "xo": "^0.10.1" - }, - "directories": {}, - "dist": { - "shasum": "72556b80cfa0d48a974e80e77248e80ed4f7f870", - "tarball": "http://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "8d4a92447a5c62bff9f89756caeb4c9c8770579b", - "homepage": "https://github.com/floatdrop/pinkie", - "keywords": [ - "promise", - "promises", - "es2015", - "es6" - ], - "license": "MIT", - "maintainers": [ - { - "email": "floatdrop@gmail.com", - "name": "floatdrop" - } - ], - "name": "pinkie", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/floatdrop/pinkie.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "test": "xo && nyc mocha" - }, - "version": "2.0.4" -} diff --git a/node_modules/pinkie/readme.md b/node_modules/pinkie/readme.md deleted file mode 100644 index 1565f95..0000000 --- a/node_modules/pinkie/readme.md +++ /dev/null @@ -1,83 +0,0 @@ -

    -
    - pinkie -
    -
    -

    - -> Itty bitty little widdle twinkie pinkie [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) implementation - -[![Build Status](https://travis-ci.org/floatdrop/pinkie.svg?branch=master)](https://travis-ci.org/floatdrop/pinkie) [![Coverage Status](https://coveralls.io/repos/floatdrop/pinkie/badge.svg?branch=master&service=github)](https://coveralls.io/github/floatdrop/pinkie?branch=master) - -There are [tons of Promise implementations](https://github.com/promises-aplus/promises-spec/blob/master/implementations.md#standalone) out there, but all of them focus on browser compatibility and are often bloated with functionality. - -This module is an exact Promise specification polyfill (like [native-promise-only](https://github.com/getify/native-promise-only)), but in Node.js land (it should be browserify-able though). - - -## Install - -``` -$ npm install --save pinkie -``` - - -## Usage - -```js -var fs = require('fs'); -var Promise = require('pinkie'); - -new Promise(function (resolve, reject) { - fs.readFile('foo.json', 'utf8', function (err, data) { - if (err) { - reject(err); - return; - } - - resolve(data); - }); -}); -//=> Promise -``` - - -### API - -`pinkie` exports bare [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) implementation and polyfills [Node.js rejection events](https://nodejs.org/api/process.html#process_event_unhandledrejection). In case you forgot: - -#### new Promise(executor) - -Returns new instance of `Promise`. - -##### executor - -*Required* -Type: `function` - -Function with two arguments `resolve` and `reject`. The first argument fulfills the promise, the second argument rejects it. - -#### pinkie.all(promises) - -Returns a promise that resolves when all of the promises in the `promises` Array argument have resolved. - -#### pinkie.race(promises) - -Returns a promise that resolves or rejects as soon as one of the promises in the `promises` Array resolves or rejects, with the value or reason from that promise. - -#### pinkie.reject(reason) - -Returns a Promise object that is rejected with the given `reason`. - -#### pinkie.resolve(value) - -Returns a Promise object that is resolved with the given `value`. If the `value` is a thenable (i.e. has a then method), the returned promise will "follow" that thenable, adopting its eventual state; otherwise the returned promise will be fulfilled with the `value`. - - -## Related - -- [pinkie-promise](https://github.com/floatdrop/pinkie-promise) - Returns the native Promise or this module - - -## License - -MIT © [Vsevolod Strukchinsky](http://github.com/floatdrop) diff --git a/node_modules/process-nextick-args/.travis.yml b/node_modules/process-nextick-args/.travis.yml deleted file mode 100644 index 36201b1..0000000 --- a/node_modules/process-nextick-args/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.11" - - "0.12" - - "1.7.1" - - 1 - - 2 - - 3 - - 4 - - 5 diff --git a/node_modules/process-nextick-args/index.js b/node_modules/process-nextick-args/index.js deleted file mode 100644 index a4f40f8..0000000 --- a/node_modules/process-nextick-args/index.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -if (!process.version || - process.version.indexOf('v0.') === 0 || - process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { - module.exports = nextTick; -} else { - module.exports = process.nextTick; -} - -function nextTick(fn, arg1, arg2, arg3) { - if (typeof fn !== 'function') { - throw new TypeError('"callback" argument must be a function'); - } - var len = arguments.length; - var args, i; - switch (len) { - case 0: - case 1: - return process.nextTick(fn); - case 2: - return process.nextTick(function afterTickOne() { - fn.call(null, arg1); - }); - case 3: - return process.nextTick(function afterTickTwo() { - fn.call(null, arg1, arg2); - }); - case 4: - return process.nextTick(function afterTickThree() { - fn.call(null, arg1, arg2, arg3); - }); - default: - args = new Array(len - 1); - i = 0; - while (i < args.length) { - args[i++] = arguments[i]; - } - return process.nextTick(function afterTick() { - fn.apply(null, args); - }); - } -} diff --git a/node_modules/process-nextick-args/license.md b/node_modules/process-nextick-args/license.md deleted file mode 100644 index c67e353..0000000 --- a/node_modules/process-nextick-args/license.md +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015 Calvin Metcalf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.** diff --git a/node_modules/process-nextick-args/package.json b/node_modules/process-nextick-args/package.json deleted file mode 100644 index fe72813..0000000 --- a/node_modules/process-nextick-args/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_args": [ - [ - "process-nextick-args@~1.0.6", - "/Users/jbaylina/git/MVP/node_modules/readable-stream" - ] - ], - "_from": "process-nextick-args@>=1.0.6 <1.1.0", - "_id": "process-nextick-args@1.0.7", - "_inCache": true, - "_installable": true, - "_location": "/process-nextick-args", - "_nodeVersion": "5.11.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/process-nextick-args-1.0.7.tgz_1462394251778_0.36989671061746776" - }, - "_npmUser": { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "process-nextick-args", - "raw": "process-nextick-args@~1.0.6", - "rawSpec": "~1.0.6", - "scope": null, - "spec": ">=1.0.6 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/bl/readable-stream", - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "_shasum": "150e20b756590ad3f91093f25a4f2ad8bff30ba3", - "_shrinkwrap": null, - "_spec": "process-nextick-args@~1.0.6", - "_where": "/Users/jbaylina/git/MVP/node_modules/readable-stream", - "author": "", - "bugs": { - "url": "https://github.com/calvinmetcalf/process-nextick-args/issues" - }, - "dependencies": {}, - "description": "process.nextTick but always with args", - "devDependencies": { - "tap": "~0.2.6" - }, - "directories": {}, - "dist": { - "shasum": "150e20b756590ad3f91093f25a4f2ad8bff30ba3", - "tarball": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" - }, - "gitHead": "5c00899ab01dd32f93ad4b5743da33da91404f39", - "homepage": "https://github.com/calvinmetcalf/process-nextick-args", - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - } - ], - "name": "process-nextick-args", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/calvinmetcalf/process-nextick-args.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.0.7" -} diff --git a/node_modules/process-nextick-args/readme.md b/node_modules/process-nextick-args/readme.md deleted file mode 100644 index 78e7cfa..0000000 --- a/node_modules/process-nextick-args/readme.md +++ /dev/null @@ -1,18 +0,0 @@ -process-nextick-args -===== - -[![Build Status](https://travis-ci.org/calvinmetcalf/process-nextick-args.svg?branch=master)](https://travis-ci.org/calvinmetcalf/process-nextick-args) - -```bash -npm install --save process-nextick-args -``` - -Always be able to pass arguments to process.nextTick, no matter the platform - -```js -var nextTick = require('process-nextick-args'); - -nextTick(function (a, b, c) { - console.log(a, b, c); -}, 'step', 3, 'profit'); -``` diff --git a/node_modules/process-nextick-args/test.js b/node_modules/process-nextick-args/test.js deleted file mode 100644 index ef15721..0000000 --- a/node_modules/process-nextick-args/test.js +++ /dev/null @@ -1,24 +0,0 @@ -var test = require("tap").test; -var nextTick = require('./'); - -test('should work', function (t) { - t.plan(5); - nextTick(function (a) { - t.ok(a); - nextTick(function (thing) { - t.equals(thing, 7); - }, 7); - }, true); - nextTick(function (a, b, c) { - t.equals(a, 'step'); - t.equals(b, 3); - t.equals(c, 'profit'); - }, 'step', 3, 'profit'); -}); - -test('correct number of arguments', function (t) { - t.plan(1); - nextTick(function () { - t.equals(2, arguments.length, 'correct number'); - }, 1, 2); -}); diff --git a/node_modules/process/LICENSE b/node_modules/process/LICENSE deleted file mode 100644 index b8c1246..0000000 --- a/node_modules/process/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2013 Roman Shtylman - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/process/README.md b/node_modules/process/README.md deleted file mode 100644 index b725695..0000000 --- a/node_modules/process/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# process - -```require('process');``` just like any other module. - -Works in node.js and browsers via the browser.js shim provided with the module. - -## package manager notes - -If you are writing a bundler to package modules for client side use, make sure you use the ```browser``` field hint in package.json. - -See https://gist.github.com/4339901 for details. - -The [browserify](https://github.com/substack/node-browserify) module will properly handle this field when bundling your files. - - diff --git a/node_modules/process/browser.js b/node_modules/process/browser.js deleted file mode 100644 index a4ae725..0000000 --- a/node_modules/process/browser.js +++ /dev/null @@ -1,53 +0,0 @@ -// shim for using process in browser - -var process = module.exports = {}; - -process.nextTick = (function () { - var canSetImmediate = typeof window !== 'undefined' - && window.setImmediate; - var canPost = typeof window !== 'undefined' - && window.postMessage && window.addEventListener - ; - - if (canSetImmediate) { - return function (f) { return window.setImmediate(f) }; - } - - if (canPost) { - var queue = []; - window.addEventListener('message', function (ev) { - var source = ev.source; - if ((source === window || source === null) && ev.data === 'process-tick') { - ev.stopPropagation(); - if (queue.length > 0) { - var fn = queue.shift(); - fn(); - } - } - }, true); - - return function nextTick(fn) { - queue.push(fn); - window.postMessage('process-tick', '*'); - }; - } - - return function nextTick(fn) { - setTimeout(fn, 0); - }; -})(); - -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -} - -// TODO(shtylman) -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; diff --git a/node_modules/process/index.js b/node_modules/process/index.js deleted file mode 100644 index 8d8ed7d..0000000 --- a/node_modules/process/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// for now just expose the builtin process global from node.js -module.exports = global.process; diff --git a/node_modules/process/package.json b/node_modules/process/package.json deleted file mode 100644 index 9e03d43..0000000 --- a/node_modules/process/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "_args": [ - [ - "process@~0.5.1", - "/Users/jbaylina/git/MVP/node_modules/global" - ] - ], - "_from": "process@>=0.5.1 <0.6.0", - "_id": "process@0.5.2", - "_inCache": true, - "_installable": true, - "_location": "/process", - "_npmUser": { - "email": "shtylman@gmail.com", - "name": "shtylman" - }, - "_npmVersion": "1.3.21", - "_phantomChildren": {}, - "_requested": { - "name": "process", - "raw": "process@~0.5.1", - "rawSpec": "~0.5.1", - "scope": null, - "spec": ">=0.5.1 <0.6.0", - "type": "range" - }, - "_requiredBy": [ - "/global" - ], - "_resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "_shasum": "1638d8a8e34c2f440a91db95ab9aeb677fc185cf", - "_shrinkwrap": null, - "_spec": "process@~0.5.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/global", - "author": { - "email": "shtylman@gmail.com", - "name": "Roman Shtylman" - }, - "browser": "./browser.js", - "bugs": { - "url": "https://github.com/shtylman/node-process/issues" - }, - "dependencies": {}, - "description": "process information for node.js and browsers", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "1638d8a8e34c2f440a91db95ab9aeb677fc185cf", - "tarball": "https://registry.npmjs.org/process/-/process-0.5.2.tgz" - }, - "engines": { - "node": ">= 0.6.0" - }, - "homepage": "https://github.com/shtylman/node-process", - "keywords": [ - "process" - ], - "main": "./index.js", - "maintainers": [ - { - "email": "shtylman@gmail.com", - "name": "shtylman" - } - ], - "name": "process", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/shtylman/node-process.git" - }, - "version": "0.5.2" -} diff --git a/node_modules/prr/.jshintrc b/node_modules/prr/.jshintrc deleted file mode 100644 index 6a7a956..0000000 --- a/node_modules/prr/.jshintrc +++ /dev/null @@ -1,61 +0,0 @@ -{ - "predef": [ ] - , "bitwise": false - , "camelcase": false - , "curly": false - , "eqeqeq": false - , "forin": false - , "immed": false - , "latedef": false - , "newcap": true - , "noarg": true - , "noempty": true - , "nonew": true - , "plusplus": false - , "quotmark": true - , "regexp": false - , "undef": true - , "unused": true - , "strict": false - , "trailing": true - , "maxlen": 120 - , "asi": true - , "boss": true - , "debug": true - , "eqnull": true - , "es5": true - , "esnext": true - , "evil": true - , "expr": true - , "funcscope": false - , "globalstrict": false - , "iterator": false - , "lastsemic": true - , "laxbreak": true - , "laxcomma": true - , "loopfunc": true - , "multistr": false - , "onecase": false - , "proto": false - , "regexdash": false - , "scripturl": true - , "smarttabs": false - , "shadow": false - , "sub": true - , "supernew": false - , "validthis": true - , "browser": true - , "couch": false - , "devel": false - , "dojo": false - , "mootools": false - , "node": true - , "nonstandard": true - , "prototypejs": false - , "rhino": false - , "worker": true - , "wsh": false - , "nomen": false - , "onevar": true - , "passfail": false -} \ No newline at end of file diff --git a/node_modules/prr/.npmignore b/node_modules/prr/.npmignore deleted file mode 100644 index b512c09..0000000 --- a/node_modules/prr/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/prr/.travis.yml b/node_modules/prr/.travis.yml deleted file mode 100644 index 33dcbc3..0000000 --- a/node_modules/prr/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: node_js -node_js: - - 0.8 - - "0.10" -branches: - only: - - master -notifications: - email: - - rod@vagg.org \ No newline at end of file diff --git a/node_modules/prr/LICENSE.md b/node_modules/prr/LICENSE.md deleted file mode 100644 index 29b95e3..0000000 --- a/node_modules/prr/LICENSE.md +++ /dev/null @@ -1,11 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2014 Rod Vagg ---------------------------- - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/prr/README.md b/node_modules/prr/README.md deleted file mode 100644 index b934048..0000000 --- a/node_modules/prr/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# prr [![Build Status](https://secure.travis-ci.org/rvagg/prr.png)](http://travis-ci.org/rvagg/prr) - -An sensible alternative to `Object.defineProperty()`. Available in npm and Ender as **prr**. - -## Usage - -Set the property `'foo'` (`obj.foo`) to have the value `'bar'` with default options (`'enumerable'`, `'configurable'` and `'writable'` are all `false`): - -```js -prr(obj, 'foo', 'bar') -``` - -Adjust the default options: - -```js -prr(obj, 'foo', 'bar', { enumerable: true, writable: true }) -``` - -Do the same operation for multiple properties: - -```js -prr(obj, { one: 'one', two: 'two' }) -// or with options: -prr(obj, { one: 'one', two: 'two' }, { enumerable: true, writable: true }) -``` - -### Simplify! - -But obviously, having to write out the full options object makes it nearly as bad as the original `Object.defineProperty()` so we can simplify. - -As an alternative method we can use an options string where each character represents a option: `'e'=='enumerable'`, `'c'=='configurable'` and `'w'=='writable'`: - -```js -prr(obj, 'foo', 'bar', 'ew') // enumerable and writable but not configurable -// muliple properties: -prr(obj, { one: 'one', two: 'two' }, 'ewc') // configurable too -``` - -## Where can I use it? - -Anywhere! For pre-ES5 environments *prr* will simply fall-back to an `object[property] = value` so you can get close to what you want. - -*prr* is Ender-compatible so you can include it in your Ender build and `$.prr(...)` or `var prr = require('prr'); prr(...)`. - -## Licence - -prr is Copyright (c) 2013 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licensed under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/node_modules/prr/package.json b/node_modules/prr/package.json deleted file mode 100644 index 6c56746..0000000 --- a/node_modules/prr/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "_args": [ - [ - "prr@~1.0.1", - "/Users/jbaylina/git/MVP/node_modules/levelup" - ] - ], - "_from": "prr@>=1.0.1 <1.1.0", - "_id": "prr@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/prr", - "_npmUser": { - "email": "rod@vagg.org", - "name": "rvagg" - }, - "_npmVersion": "1.4.14", - "_phantomChildren": {}, - "_requested": { - "name": "prr", - "raw": "prr@~1.0.1", - "rawSpec": "~1.0.1", - "scope": null, - "spec": ">=1.0.1 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/levelup" - ], - "_resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "_shasum": "d3fc114ba06995a45ec6893f484ceb1d78f5f476", - "_shrinkwrap": null, - "_spec": "prr@~1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/levelup", - "author": { - "email": "rod@vagg.org", - "name": "Rod Vagg", - "url": "https://github.com/rvagg" - }, - "bugs": { - "url": "https://github.com/rvagg/prr/issues" - }, - "dependencies": {}, - "description": "A better Object.defineProperty()", - "devDependencies": { - "tap": "*" - }, - "directories": {}, - "dist": { - "shasum": "d3fc114ba06995a45ec6893f484ceb1d78f5f476", - "tarball": "http://registry.npmjs.org/prr/-/prr-1.0.1.tgz" - }, - "gitHead": "b69ba0edc7aacbda0c98d550579e452b8597c126", - "homepage": "https://github.com/rvagg/prr", - "keywords": [ - "property", - "properties", - "defineProperty", - "ender" - ], - "license": "MIT", - "main": "./prr.js", - "maintainers": [ - { - "email": "rod@vagg.org", - "name": "rvagg" - } - ], - "name": "prr", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/rvagg/prr.git" - }, - "scripts": { - "test": "node ./test.js" - }, - "version": "1.0.1" -} diff --git a/node_modules/prr/prr.js b/node_modules/prr/prr.js deleted file mode 100644 index 94f5862..0000000 --- a/node_modules/prr/prr.js +++ /dev/null @@ -1,63 +0,0 @@ -/*! - * prr - * (c) 2013 Rod Vagg - * https://github.com/rvagg/prr - * License: MIT - */ - -(function (name, context, definition) { - if (typeof module != 'undefined' && module.exports) - module.exports = definition() - else - context[name] = definition() -})('prr', this, function() { - - var setProperty = typeof Object.defineProperty == 'function' - ? function (obj, key, options) { - Object.defineProperty(obj, key, options) - return obj - } - : function (obj, key, options) { // < es5 - obj[key] = options.value - return obj - } - - , makeOptions = function (value, options) { - var oo = typeof options == 'object' - , os = !oo && typeof options == 'string' - , op = function (p) { - return oo - ? !!options[p] - : os - ? options.indexOf(p[0]) > -1 - : false - } - - return { - enumerable : op('enumerable') - , configurable : op('configurable') - , writable : op('writable') - , value : value - } - } - - , prr = function (obj, key, value, options) { - var k - - options = makeOptions(value, options) - - if (typeof key == 'object') { - for (k in key) { - if (Object.hasOwnProperty.call(key, k)) { - options.value = key[k] - setProperty(obj, k, options) - } - } - return obj - } - - return setProperty(obj, key, options) - } - - return prr -}) \ No newline at end of file diff --git a/node_modules/prr/test.js b/node_modules/prr/test.js deleted file mode 100644 index 5222e30..0000000 --- a/node_modules/prr/test.js +++ /dev/null @@ -1,169 +0,0 @@ -const test = require('tap').test - , prr = require('./') - -test('test prr(o, key, value) form', function (t) { - t.plan(2) - - var o = {} - prr(o, 'foo', 'bar') - t.equal(o.foo, 'bar', 'correct value') - t.deepEqual( - Object.getOwnPropertyDescriptor(o, 'foo') - , { - enumerable : false - , configurable : false - , writable : false - , value : 'bar' - } - , 'correct property descriptor' - ) - t.end() -}) - -test('test prr(o, { key: value }) form', function (t) { - t.plan(2) - - var o = {} - prr(o, { foo: 'bar' }) - - t.equal(o.foo, 'bar', 'correct value') - t.deepEqual( - Object.getOwnPropertyDescriptor(o, 'foo') - , { - enumerable : false - , configurable : false - , writable : false - , value : 'bar' - } - , 'correct property descriptor' - ) - t.end() -}) - -test('test multiple key:value pairs', function (t) { - var o = { foo: 'bar' } - - prr(o, { one: 'ONE', two: 'TWO', obj: { o: 'o' }}) - - t.deepEqual(o, { foo: 'bar' }, 'properties are not enumerable') - t.equal(o.one, 'ONE', 'correctly set property') - t.equal(o.two, 'TWO', 'correctly set property') - t.deepEqual(o.obj, { o: 'o' }, 'correctly set property') - - ;[ 'one', 'two', 'obj' ].forEach(function (p) { - t.deepEqual( - Object.getOwnPropertyDescriptor(o, p) - , { - enumerable : false - , configurable : false - , writable : false - , value : p == 'obj' ? { o: 'o' } : p.toUpperCase() - } - , 'correct property descriptor' - ) - }) - - t.end() -}) - -test('test descriptor options', function (t) { - var o = {} - - prr(o, 'foo', 'bar', { - enumerable : true - , configurable : false - }) - t.equal(o.foo, 'bar', 'correct value') - t.deepEqual( - Object.getOwnPropertyDescriptor(o, 'foo') - , { - enumerable : true - , configurable : false - , writable : false - , value : 'bar' - } - , 'correct property descriptor' - ) - - prr(o, 'foo2', 'bar2', { - enumerable : true - , configurable : true - , writable : false - }) - t.equal(o.foo2, 'bar2', 'correct value') - t.deepEqual( - Object.getOwnPropertyDescriptor(o, 'foo2') - , { - enumerable : true - , configurable : true - , writable : false - , value : 'bar2' - } - , 'correct property descriptor' - ) - - prr(o, 'foo3', 'bar3', { - enumerable : true - , configurable : true - , writable : true - }) - t.equal(o.foo3, 'bar3', 'correct value') - t.deepEqual( - Object.getOwnPropertyDescriptor(o, 'foo3') - , { - enumerable : true - , configurable : true - , writable : true - , value : 'bar3' - } - , 'correct property descriptor' - ) - - t.end() -}) - - -test('test descriptor options, string form', function (t) { - var o = {} - - prr(o, 'foo', 'bar', 'e') - t.equal(o.foo, 'bar', 'correct value') - t.deepEqual( - Object.getOwnPropertyDescriptor(o, 'foo') - , { - enumerable : true - , configurable : false - , writable : false - , value : 'bar' - } - , 'correct property descriptor' - ) - - prr(o, 'foo2', 'bar2', 'ec') - t.equal(o.foo2, 'bar2', 'correct value') - t.deepEqual( - Object.getOwnPropertyDescriptor(o, 'foo2') - , { - enumerable : true - , configurable : true - , writable : false - , value : 'bar2' - } - , 'correct property descriptor' - ) - - prr(o, 'foo3', 'bar3', 'ecw') - t.equal(o.foo3, 'bar3', 'correct value') - t.deepEqual( - Object.getOwnPropertyDescriptor(o, 'foo3') - , { - enumerable : true - , configurable : true - , writable : true - , value : 'bar3' - } - , 'correct property descriptor' - ) - - t.end() -}) diff --git a/node_modules/qs/.eslintignore b/node_modules/qs/.eslintignore deleted file mode 100644 index 1521c8b..0000000 --- a/node_modules/qs/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist diff --git a/node_modules/qs/.eslintrc b/node_modules/qs/.eslintrc deleted file mode 100644 index 1faac27..0000000 --- a/node_modules/qs/.eslintrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": [2, 22], - "consistent-return": [1], - "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], - "indent": [2, 4], - "max-params": [2, 9], - "max-statements": [2, 36], - "no-extra-parens": [1], - "no-continue": [1], - "no-magic-numbers": 0, - "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], - "operator-linebreak": 1 - } -} diff --git a/node_modules/qs/CHANGELOG.md b/node_modules/qs/CHANGELOG.md deleted file mode 100644 index 86bea76..0000000 --- a/node_modules/qs/CHANGELOG.md +++ /dev/null @@ -1,130 +0,0 @@ -## **6.2.1** -- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values -- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call` -- [Tests] remove `parallelshell` since it does not reliably report failures -- [Tests] up to `node` `v6.3`, `v5.12` -- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv` - -## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed) -- [New] pass Buffers to the encoder/decoder directly (#161) -- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160) -- [Fix] fix compacting of nested sparse arrays (#150) - -## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed) -- [New] allowDots option for `stringify` (#151) -- [Fix] "sort" option should work at a depth of 3 or more (#151) -- [Fix] Restore `dist` directory; will be removed in v7 (#148) - -## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed) -- Revert ES6 requirement and restore support for node down to v0.8. - -## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed) -- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json - -## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed) -- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4 - -## **5.2.1** -- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values - -## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed) -- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string - -## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed) -- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional -- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify - -## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed) -- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false -- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm - -## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed) -- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional - -## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed) -- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation" - -## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed) -- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties -- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost -- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing -- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object -- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option -- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects. -- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47 -- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986 -- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign -- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute - -## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed) -- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object # is not a function - -## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed) -- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option - -## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed) -- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57 -- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader - -## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed) -- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object - -## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed) -- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". - -## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed) -- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46 - -## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed) -- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer? -- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45 -- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39 - -## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed) -- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number - -## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed) -- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array -- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x - -## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed) -- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value -- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty -- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver? - -## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed) -- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31 -- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects - -## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed) -- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present -- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays -- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge -- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters? - -## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed) -- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter - -## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed) -- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit? -- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit -- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20 - -## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed) -- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values - -## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed) -- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters -- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block - -## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed) -- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument -- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed - -## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed) -- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted -- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null -- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README - -## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed) -- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index diff --git a/node_modules/qs/CONTRIBUTING.md b/node_modules/qs/CONTRIBUTING.md deleted file mode 100644 index 8928361..0000000 --- a/node_modules/qs/CONTRIBUTING.md +++ /dev/null @@ -1 +0,0 @@ -Please view our [hapijs contributing guide](https://github.com/hapijs/hapi/blob/master/CONTRIBUTING.md). diff --git a/node_modules/qs/LICENSE b/node_modules/qs/LICENSE deleted file mode 100644 index d456948..0000000 --- a/node_modules/qs/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2014 Nathan LaFreniere and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors diff --git a/node_modules/qs/README.md b/node_modules/qs/README.md deleted file mode 100644 index 97e3907..0000000 --- a/node_modules/qs/README.md +++ /dev/null @@ -1,376 +0,0 @@ -# qs - -A querystring parsing and stringifying library with some added security. - -[![Build Status](https://api.travis-ci.org/ljharb/qs.svg)](http://travis-ci.org/ljharb/qs) - -Lead Maintainer: [Jordan Harband](https://github.com/ljharb) - -The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). - -## Usage - -```javascript -var qs = require('qs'); -var assert = require('assert'); - -var obj = qs.parse('a=c'); -assert.deepEqual(obj, { a: 'c' }); - -var str = qs.stringify(obj); -assert.equal(str, 'a=c'); -``` - -### Parsing Objects - -[](#preventEval) -```javascript -qs.parse(string, [options]); -``` - -**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. -For example, the string `'foo[bar]=baz'` converts to: - -```javascript -assert.deepEqual(qs.parse('foo[bar]=baz'), { - foo: { - bar: 'baz' - } -}); -``` - -When using the `plainObjects` option the parsed value is returned as a plain object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like: - -```javascript -var plainObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true }); -assert.deepEqual(plainObject, { a: { hasOwnProperty: 'b' } }); -``` - -By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option. - -```javascript -var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }); -assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } }); -``` - -URI encoded strings work too: - -```javascript -assert.deepEqual(qs.parse('a%5Bb%5D=c'), { - a: { b: 'c' } -}); -``` - -You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: - -```javascript -assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), { - foo: { - bar: { - baz: 'foobarbaz' - } - } -}); -``` - -By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like -`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: - -```javascript -var expected = { - a: { - b: { - c: { - d: { - e: { - f: { - '[g][h][i]': 'j' - } - } - } - } - } - } -}; -var string = 'a[b][c][d][e][f][g][h][i]=j'; -assert.deepEqual(qs.parse(string), expected); -``` - -This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`: - -```javascript -var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); -assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }); -``` - -The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. - -For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: - -```javascript -var limited = qs.parse('a=b&c=d', { parameterLimit: 1 }); -assert.deepEqual(limited, { a: 'b' }); -``` - -An optional delimiter can also be passed: - -```javascript -var delimited = qs.parse('a=b;c=d', { delimiter: ';' }); -assert.deepEqual(delimited, { a: 'b', c: 'd' }); -``` - -Delimiters can be a regular expression too: - -```javascript -var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); -assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' }); -``` - -Option `allowDots` can be used to enable dot notation: - -```javascript -var withDots = qs.parse('a.b=c', { allowDots: true }); -assert.deepEqual(withDots, { a: { b: 'c' } }); -``` - -### Parsing Arrays - -**qs** can also parse arrays using a similar `[]` notation: - -```javascript -var withArray = qs.parse('a[]=b&a[]=c'); -assert.deepEqual(withArray, { a: ['b', 'c'] }); -``` - -You may specify an index as well: - -```javascript -var withIndexes = qs.parse('a[1]=c&a[0]=b'); -assert.deepEqual(withIndexes, { a: ['b', 'c'] }); -``` - -Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number -to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving -their order: - -```javascript -var noSparse = qs.parse('a[1]=b&a[15]=c'); -assert.deepEqual(noSparse, { a: ['b', 'c'] }); -``` - -Note that an empty string is also a value, and will be preserved: - -```javascript -var withEmptyString = qs.parse('a[]=&a[]=b'); -assert.deepEqual(withEmptyString, { a: ['', 'b'] }); - -var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c'); -assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] }); -``` - -**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will -instead be converted to an object with the index as the key: - -```javascript -var withMaxIndex = qs.parse('a[100]=b'); -assert.deepEqual(withMaxIndex, { a: { '100': 'b' } }); -``` - -This limit can be overridden by passing an `arrayLimit` option: - -```javascript -var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 }); -assert.deepEqual(withArrayLimit, { a: { '1': 'b' } }); -``` - -To disable array parsing entirely, set `parseArrays` to `false`. - -```javascript -var noParsingArrays = qs.parse('a[]=b', { parseArrays: false }); -assert.deepEqual(noParsingArrays, { a: { '0': 'b' } }); -``` - -If you mix notations, **qs** will merge the two items into an object: - -```javascript -var mixedNotation = qs.parse('a[0]=b&a[b]=c'); -assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } }); -``` - -You can also create arrays of objects: - -```javascript -var arraysOfObjects = qs.parse('a[][b]=c'); -assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] }); -``` - -### Stringifying - -[](#preventEval) -```javascript -qs.stringify(object, [options]); -``` - -When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect: - -```javascript -assert.equal(qs.stringify({ a: 'b' }), 'a=b'); -assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); -``` - -This encoding can be disabled by setting the `encode` option to `false`: - -```javascript -var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false }); -assert.equal(unencoded, 'a[b]=c'); -``` - -This encoding can also be replaced by a custom encoding method set as `encoder` option: - -```javascript -var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { - // Passed in values `a`, `b`, `c` - return // Return encoded string -}}) -``` - -_(Note: the `encoder` option does not apply if `encode` is `false`)_ - -Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values: - -```javascript -var decoded = qs.parse('x=z', { decoder: function (str) { - // Passed in values `x`, `z` - return // Return decoded string -}}) -``` - -Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. - -When arrays are stringified, by default they are given explicit indices: - -```javascript -qs.stringify({ a: ['b', 'c', 'd'] }); -// 'a[0]=b&a[1]=c&a[2]=d' -``` - -You may override this by setting the `indices` option to `false`: - -```javascript -qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); -// 'a=b&a=c&a=d' -``` - -You may use the `arrayFormat` option to specify the format of the output array - -```javascript -qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) -// 'a[0]=b&a[1]=c' -qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) -// 'a[]=b&a[]=c' -qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) -// 'a=b&a=c' -``` - -Empty strings and null values will omit the value, but the equals sign (=) remains in place: - -```javascript -assert.equal(qs.stringify({ a: '' }), 'a='); -``` - -Properties that are set to `undefined` will be omitted entirely: - -```javascript -assert.equal(qs.stringify({ a: null, b: undefined }), 'a='); -``` - -The delimiter may be overridden with stringify as well: - -```javascript -assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); -``` - -Finally, you can use the `filter` option to restrict which keys will be included in the stringified output. -If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you -pass an array, it will be used to select properties and array indices for stringification: - -```javascript -function filterFunc(prefix, value) { - if (prefix == 'b') { - // Return an `undefined` value to omit a property. - return; - } - if (prefix == 'e[f]') { - return value.getTime(); - } - if (prefix == 'e[g][0]') { - return value * 2; - } - return value; -} -qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }); -// 'a=b&c=d&e[f]=123&e[g][0]=4' -qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }); -// 'a=b&e=f' -qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] }); -// 'a[0]=b&a[2]=d' -``` - -### Handling of `null` values - -By default, `null` values are treated like empty strings: - -```javascript -var withNull = qs.stringify({ a: null, b: '' }); -assert.equal(withNull, 'a=&b='); -``` - -Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings. - -```javascript -var equalsInsensitive = qs.parse('a&b='); -assert.deepEqual(equalsInsensitive, { a: '', b: '' }); -``` - -To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null` -values have no `=` sign: - -```javascript -var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true }); -assert.equal(strictNull, 'a&b='); -``` - -To parse values without `=` back to `null` use the `strictNullHandling` flag: - -```javascript -var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true }); -assert.deepEqual(parsedStrictNull, { a: null, b: '' }); -``` - -To completely skip rendering keys with `null` values, use the `skipNulls` flag: - -```javascript -var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true }); -assert.equal(nullsSkipped, 'a=b'); -``` - -### Dealing with special character sets - -By default the encoding and decoding of characters is done in `utf-8`. If you -wish to encode querystrings to a different character set (i.e. -[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the -[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library: - -```javascript -var encoder = require('qs-iconv/encoder')('shift_jis'); -var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder }); -assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I'); -``` - -This also works for decoding of query strings: - -```javascript -var decoder = require('qs-iconv/decoder')('shift_jis'); -var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder }); -assert.deepEqual(obj, { a: 'こんにちは!' }); -``` diff --git a/node_modules/qs/dist/qs.js b/node_modules/qs/dist/qs.js deleted file mode 100644 index fcf825b..0000000 --- a/node_modules/qs/dist/qs.js +++ /dev/null @@ -1,486 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0 && - (options.parseArrays && index <= options.arrayLimit) - ) { - obj = []; - obj[index] = parseObject(chain, val, options); - } else { - obj[cleanRoot] = parseObject(chain, val, options); - } - } - - return obj; -}; - -var parseKeys = function parseKeys(givenKey, val, options) { - if (!givenKey) { - return; - } - - // Transform dot notation to bracket notation - var key = options.allowDots ? givenKey.replace(/\.([^\.\[]+)/g, '[$1]') : givenKey; - - // The regex chunks - - var parent = /^([^\[\]]*)/; - var child = /(\[[^\[\]]*\])/g; - - // Get the parent - - var segment = parent.exec(key); - - // Stash the parent if it exists - - var keys = []; - if (segment[1]) { - // If we aren't using plain objects, optionally prefix keys - // that would overwrite object prototype properties - if (!options.plainObjects && has.call(Object.prototype, segment[1])) { - if (!options.allowPrototypes) { - return; - } - } - - keys.push(segment[1]); - } - - // Loop through children appending to the array until we hit depth - - var i = 0; - while ((segment = child.exec(key)) !== null && i < options.depth) { - i += 1; - if (!options.plainObjects && has.call(Object.prototype, segment[1].replace(/\[|\]/g, ''))) { - if (!options.allowPrototypes) { - continue; - } - } - keys.push(segment[1]); - } - - // If there's a remainder, just add whatever is left - - if (segment) { - keys.push('[' + key.slice(segment.index) + ']'); - } - - return parseObject(keys, val, options); -}; - -module.exports = function (str, opts) { - var options = opts || {}; - - if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { - throw new TypeError('Decoder has to be a function.'); - } - - options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; - options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; - options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; - options.parseArrays = options.parseArrays !== false; - options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; - options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; - options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; - options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; - options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; - options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - - if (str === '' || str === null || typeof str === 'undefined') { - return options.plainObjects ? Object.create(null) : {}; - } - - var tempObj = typeof str === 'string' ? parseValues(str, options) : str; - var obj = options.plainObjects ? Object.create(null) : {}; - - // Iterate over the keys and setup the new object - - var keys = Object.keys(tempObj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - var newObj = parseKeys(key, tempObj[key], options); - obj = Utils.merge(obj, newObj, options); - } - - return Utils.compact(obj); -}; - -},{"./utils":4}],3:[function(require,module,exports){ -'use strict'; - -var Utils = require('./utils'); - -var arrayPrefixGenerators = { - brackets: function brackets(prefix) { - return prefix + '[]'; - }, - indices: function indices(prefix, key) { - return prefix + '[' + key + ']'; - }, - repeat: function repeat(prefix) { - return prefix; - } -}; - -var defaults = { - delimiter: '&', - strictNullHandling: false, - skipNulls: false, - encode: true, - encoder: Utils.encode -}; - -var stringify = function stringify(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots) { - var obj = object; - if (typeof filter === 'function') { - obj = filter(prefix, obj); - } else if (obj instanceof Date) { - obj = obj.toISOString(); - } else if (obj === null) { - if (strictNullHandling) { - return encoder ? encoder(prefix) : prefix; - } - - obj = ''; - } - - if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || Utils.isBuffer(obj)) { - if (encoder) { - return [encoder(prefix) + '=' + encoder(obj)]; - } - return [prefix + '=' + String(obj)]; - } - - var values = []; - - if (typeof obj === 'undefined') { - return values; - } - - var objKeys; - if (Array.isArray(filter)) { - objKeys = filter; - } else { - var keys = Object.keys(obj); - objKeys = sort ? keys.sort(sort) : keys; - } - - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - - if (skipNulls && obj[key] === null) { - continue; - } - - if (Array.isArray(obj)) { - values = values.concat(stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots)); - } else { - values = values.concat(stringify(obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots)); - } - } - - return values; -}; - -module.exports = function (object, opts) { - var obj = object; - var options = opts || {}; - var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; - var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; - var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; - var encoder = encode ? (typeof options.encoder === 'function' ? options.encoder : defaults.encoder) : null; - var sort = typeof options.sort === 'function' ? options.sort : null; - var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; - var objKeys; - var filter; - - if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { - throw new TypeError('Encoder has to be a function.'); - } - - if (typeof options.filter === 'function') { - filter = options.filter; - obj = filter('', obj); - } else if (Array.isArray(options.filter)) { - objKeys = filter = options.filter; - } - - var keys = []; - - if (typeof obj !== 'object' || obj === null) { - return ''; - } - - var arrayFormat; - if (options.arrayFormat in arrayPrefixGenerators) { - arrayFormat = options.arrayFormat; - } else if ('indices' in options) { - arrayFormat = options.indices ? 'indices' : 'repeat'; - } else { - arrayFormat = 'indices'; - } - - var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; - - if (!objKeys) { - objKeys = Object.keys(obj); - } - - if (sort) { - objKeys.sort(sort); - } - - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - - if (skipNulls && obj[key] === null) { - continue; - } - - keys = keys.concat(stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots)); - } - - return keys.join(delimiter); -}; - -},{"./utils":4}],4:[function(require,module,exports){ -'use strict'; - -var hexTable = (function () { - var array = new Array(256); - for (var i = 0; i < 256; ++i) { - array[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase(); - } - - return array; -}()); - -exports.arrayToObject = function (source, options) { - var obj = options.plainObjects ? Object.create(null) : {}; - for (var i = 0; i < source.length; ++i) { - if (typeof source[i] !== 'undefined') { - obj[i] = source[i]; - } - } - - return obj; -}; - -exports.merge = function (target, source, options) { - if (!source) { - return target; - } - - if (typeof source !== 'object') { - if (Array.isArray(target)) { - target.push(source); - } else if (typeof target === 'object') { - target[source] = true; - } else { - return [target, source]; - } - - return target; - } - - if (typeof target !== 'object') { - return [target].concat(source); - } - - var mergeTarget = target; - if (Array.isArray(target) && !Array.isArray(source)) { - mergeTarget = exports.arrayToObject(target, options); - } - - return Object.keys(source).reduce(function (acc, key) { - var value = source[key]; - - if (Object.prototype.hasOwnProperty.call(acc, key)) { - acc[key] = exports.merge(acc[key], value, options); - } else { - acc[key] = value; - } - return acc; - }, mergeTarget); -}; - -exports.decode = function (str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (e) { - return str; - } -}; - -exports.encode = function (str) { - // This code was originally written by Brian White (mscdex) for the io.js core querystring library. - // It has been adapted here for stricter adherence to RFC 3986 - if (str.length === 0) { - return str; - } - - var string = typeof str === 'string' ? str : String(str); - - var out = ''; - for (var i = 0; i < string.length; ++i) { - var c = string.charCodeAt(i); - - if ( - c === 0x2D || // - - c === 0x2E || // . - c === 0x5F || // _ - c === 0x7E || // ~ - (c >= 0x30 && c <= 0x39) || // 0-9 - (c >= 0x41 && c <= 0x5A) || // a-z - (c >= 0x61 && c <= 0x7A) // A-Z - ) { - out += string.charAt(i); - continue; - } - - if (c < 0x80) { - out = out + hexTable[c]; - continue; - } - - if (c < 0x800) { - out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); - continue; - } - - if (c < 0xD800 || c >= 0xE000) { - out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); - continue; - } - - i += 1; - c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); - out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]; - } - - return out; -}; - -exports.compact = function (obj, references) { - if (typeof obj !== 'object' || obj === null) { - return obj; - } - - var refs = references || []; - var lookup = refs.indexOf(obj); - if (lookup !== -1) { - return refs[lookup]; - } - - refs.push(obj); - - if (Array.isArray(obj)) { - var compacted = []; - - for (var i = 0; i < obj.length; ++i) { - if (obj[i] && typeof obj[i] === 'object') { - compacted.push(exports.compact(obj[i], refs)); - } else if (typeof obj[i] !== 'undefined') { - compacted.push(obj[i]); - } - } - - return compacted; - } - - var keys = Object.keys(obj); - for (var j = 0; j < keys.length; ++j) { - var key = keys[j]; - obj[key] = exports.compact(obj[key], refs); - } - - return obj; -}; - -exports.isRegExp = function (obj) { - return Object.prototype.toString.call(obj) === '[object RegExp]'; -}; - -exports.isBuffer = function (obj) { - if (obj === null || typeof obj === 'undefined') { - return false; - } - - return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); -}; - -},{}]},{},[1])(1) -}); \ No newline at end of file diff --git a/node_modules/qs/lib/index.js b/node_modules/qs/lib/index.js deleted file mode 100755 index 1901959..0000000 --- a/node_modules/qs/lib/index.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var Stringify = require('./stringify'); -var Parse = require('./parse'); - -module.exports = { - stringify: Stringify, - parse: Parse -}; diff --git a/node_modules/qs/lib/parse.js b/node_modules/qs/lib/parse.js deleted file mode 100755 index 8b37cb3..0000000 --- a/node_modules/qs/lib/parse.js +++ /dev/null @@ -1,166 +0,0 @@ -'use strict'; - -var Utils = require('./utils'); - -var has = Object.prototype.hasOwnProperty; - -var defaults = { - delimiter: '&', - depth: 5, - arrayLimit: 20, - parameterLimit: 1000, - strictNullHandling: false, - plainObjects: false, - allowPrototypes: false, - allowDots: false, - decoder: Utils.decode -}; - -var parseValues = function parseValues(str, options) { - var obj = {}; - var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit); - - for (var i = 0; i < parts.length; ++i) { - var part = parts[i]; - var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1; - - var key, val; - if (pos === -1) { - key = options.decoder(part); - val = options.strictNullHandling ? null : ''; - } else { - key = options.decoder(part.slice(0, pos)); - val = options.decoder(part.slice(pos + 1)); - } - if (has.call(obj, key)) { - obj[key] = [].concat(obj[key]).concat(val); - } else { - obj[key] = val; - } - } - - return obj; -}; - -var parseObject = function parseObject(chain, val, options) { - if (!chain.length) { - return val; - } - - var root = chain.shift(); - - var obj; - if (root === '[]') { - obj = []; - obj = obj.concat(parseObject(chain, val, options)); - } else { - obj = options.plainObjects ? Object.create(null) : {}; - var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root; - var index = parseInt(cleanRoot, 10); - if ( - !isNaN(index) && - root !== cleanRoot && - String(index) === cleanRoot && - index >= 0 && - (options.parseArrays && index <= options.arrayLimit) - ) { - obj = []; - obj[index] = parseObject(chain, val, options); - } else { - obj[cleanRoot] = parseObject(chain, val, options); - } - } - - return obj; -}; - -var parseKeys = function parseKeys(givenKey, val, options) { - if (!givenKey) { - return; - } - - // Transform dot notation to bracket notation - var key = options.allowDots ? givenKey.replace(/\.([^\.\[]+)/g, '[$1]') : givenKey; - - // The regex chunks - - var parent = /^([^\[\]]*)/; - var child = /(\[[^\[\]]*\])/g; - - // Get the parent - - var segment = parent.exec(key); - - // Stash the parent if it exists - - var keys = []; - if (segment[1]) { - // If we aren't using plain objects, optionally prefix keys - // that would overwrite object prototype properties - if (!options.plainObjects && has.call(Object.prototype, segment[1])) { - if (!options.allowPrototypes) { - return; - } - } - - keys.push(segment[1]); - } - - // Loop through children appending to the array until we hit depth - - var i = 0; - while ((segment = child.exec(key)) !== null && i < options.depth) { - i += 1; - if (!options.plainObjects && has.call(Object.prototype, segment[1].replace(/\[|\]/g, ''))) { - if (!options.allowPrototypes) { - continue; - } - } - keys.push(segment[1]); - } - - // If there's a remainder, just add whatever is left - - if (segment) { - keys.push('[' + key.slice(segment.index) + ']'); - } - - return parseObject(keys, val, options); -}; - -module.exports = function (str, opts) { - var options = opts || {}; - - if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { - throw new TypeError('Decoder has to be a function.'); - } - - options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; - options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; - options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; - options.parseArrays = options.parseArrays !== false; - options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; - options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; - options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; - options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; - options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; - options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - - if (str === '' || str === null || typeof str === 'undefined') { - return options.plainObjects ? Object.create(null) : {}; - } - - var tempObj = typeof str === 'string' ? parseValues(str, options) : str; - var obj = options.plainObjects ? Object.create(null) : {}; - - // Iterate over the keys and setup the new object - - var keys = Object.keys(tempObj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - var newObj = parseKeys(key, tempObj[key], options); - obj = Utils.merge(obj, newObj, options); - } - - return Utils.compact(obj); -}; diff --git a/node_modules/qs/lib/stringify.js b/node_modules/qs/lib/stringify.js deleted file mode 100755 index 6e1c9a2..0000000 --- a/node_modules/qs/lib/stringify.js +++ /dev/null @@ -1,137 +0,0 @@ -'use strict'; - -var Utils = require('./utils'); - -var arrayPrefixGenerators = { - brackets: function brackets(prefix) { - return prefix + '[]'; - }, - indices: function indices(prefix, key) { - return prefix + '[' + key + ']'; - }, - repeat: function repeat(prefix) { - return prefix; - } -}; - -var defaults = { - delimiter: '&', - strictNullHandling: false, - skipNulls: false, - encode: true, - encoder: Utils.encode -}; - -var stringify = function stringify(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots) { - var obj = object; - if (typeof filter === 'function') { - obj = filter(prefix, obj); - } else if (obj instanceof Date) { - obj = obj.toISOString(); - } else if (obj === null) { - if (strictNullHandling) { - return encoder ? encoder(prefix) : prefix; - } - - obj = ''; - } - - if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || Utils.isBuffer(obj)) { - if (encoder) { - return [encoder(prefix) + '=' + encoder(obj)]; - } - return [prefix + '=' + String(obj)]; - } - - var values = []; - - if (typeof obj === 'undefined') { - return values; - } - - var objKeys; - if (Array.isArray(filter)) { - objKeys = filter; - } else { - var keys = Object.keys(obj); - objKeys = sort ? keys.sort(sort) : keys; - } - - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - - if (skipNulls && obj[key] === null) { - continue; - } - - if (Array.isArray(obj)) { - values = values.concat(stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots)); - } else { - values = values.concat(stringify(obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots)); - } - } - - return values; -}; - -module.exports = function (object, opts) { - var obj = object; - var options = opts || {}; - var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; - var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; - var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; - var encoder = encode ? (typeof options.encoder === 'function' ? options.encoder : defaults.encoder) : null; - var sort = typeof options.sort === 'function' ? options.sort : null; - var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; - var objKeys; - var filter; - - if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { - throw new TypeError('Encoder has to be a function.'); - } - - if (typeof options.filter === 'function') { - filter = options.filter; - obj = filter('', obj); - } else if (Array.isArray(options.filter)) { - objKeys = filter = options.filter; - } - - var keys = []; - - if (typeof obj !== 'object' || obj === null) { - return ''; - } - - var arrayFormat; - if (options.arrayFormat in arrayPrefixGenerators) { - arrayFormat = options.arrayFormat; - } else if ('indices' in options) { - arrayFormat = options.indices ? 'indices' : 'repeat'; - } else { - arrayFormat = 'indices'; - } - - var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; - - if (!objKeys) { - objKeys = Object.keys(obj); - } - - if (sort) { - objKeys.sort(sort); - } - - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - - if (skipNulls && obj[key] === null) { - continue; - } - - keys = keys.concat(stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots)); - } - - return keys.join(delimiter); -}; diff --git a/node_modules/qs/lib/utils.js b/node_modules/qs/lib/utils.js deleted file mode 100755 index 2c5c8ee..0000000 --- a/node_modules/qs/lib/utils.js +++ /dev/null @@ -1,164 +0,0 @@ -'use strict'; - -var hexTable = (function () { - var array = new Array(256); - for (var i = 0; i < 256; ++i) { - array[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase(); - } - - return array; -}()); - -exports.arrayToObject = function (source, options) { - var obj = options.plainObjects ? Object.create(null) : {}; - for (var i = 0; i < source.length; ++i) { - if (typeof source[i] !== 'undefined') { - obj[i] = source[i]; - } - } - - return obj; -}; - -exports.merge = function (target, source, options) { - if (!source) { - return target; - } - - if (typeof source !== 'object') { - if (Array.isArray(target)) { - target.push(source); - } else if (typeof target === 'object') { - target[source] = true; - } else { - return [target, source]; - } - - return target; - } - - if (typeof target !== 'object') { - return [target].concat(source); - } - - var mergeTarget = target; - if (Array.isArray(target) && !Array.isArray(source)) { - mergeTarget = exports.arrayToObject(target, options); - } - - return Object.keys(source).reduce(function (acc, key) { - var value = source[key]; - - if (Object.prototype.hasOwnProperty.call(acc, key)) { - acc[key] = exports.merge(acc[key], value, options); - } else { - acc[key] = value; - } - return acc; - }, mergeTarget); -}; - -exports.decode = function (str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (e) { - return str; - } -}; - -exports.encode = function (str) { - // This code was originally written by Brian White (mscdex) for the io.js core querystring library. - // It has been adapted here for stricter adherence to RFC 3986 - if (str.length === 0) { - return str; - } - - var string = typeof str === 'string' ? str : String(str); - - var out = ''; - for (var i = 0; i < string.length; ++i) { - var c = string.charCodeAt(i); - - if ( - c === 0x2D || // - - c === 0x2E || // . - c === 0x5F || // _ - c === 0x7E || // ~ - (c >= 0x30 && c <= 0x39) || // 0-9 - (c >= 0x41 && c <= 0x5A) || // a-z - (c >= 0x61 && c <= 0x7A) // A-Z - ) { - out += string.charAt(i); - continue; - } - - if (c < 0x80) { - out = out + hexTable[c]; - continue; - } - - if (c < 0x800) { - out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); - continue; - } - - if (c < 0xD800 || c >= 0xE000) { - out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); - continue; - } - - i += 1; - c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); - out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]; - } - - return out; -}; - -exports.compact = function (obj, references) { - if (typeof obj !== 'object' || obj === null) { - return obj; - } - - var refs = references || []; - var lookup = refs.indexOf(obj); - if (lookup !== -1) { - return refs[lookup]; - } - - refs.push(obj); - - if (Array.isArray(obj)) { - var compacted = []; - - for (var i = 0; i < obj.length; ++i) { - if (obj[i] && typeof obj[i] === 'object') { - compacted.push(exports.compact(obj[i], refs)); - } else if (typeof obj[i] !== 'undefined') { - compacted.push(obj[i]); - } - } - - return compacted; - } - - var keys = Object.keys(obj); - for (var j = 0; j < keys.length; ++j) { - var key = keys[j]; - obj[key] = exports.compact(obj[key], refs); - } - - return obj; -}; - -exports.isRegExp = function (obj) { - return Object.prototype.toString.call(obj) === '[object RegExp]'; -}; - -exports.isBuffer = function (obj) { - if (obj === null || typeof obj === 'undefined') { - return false; - } - - return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); -}; diff --git a/node_modules/qs/package.json b/node_modules/qs/package.json deleted file mode 100644 index cf3db7b..0000000 --- a/node_modules/qs/package.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "_args": [ - [ - "qs@~6.2.0", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "qs@>=6.2.0 <6.3.0", - "_id": "qs@6.2.1", - "_inCache": true, - "_installable": true, - "_location": "/qs", - "_nodeVersion": "6.3.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/qs-6.2.1.tgz_1469044929716_0.06957711698487401" - }, - "_npmUser": { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "qs", - "raw": "qs@~6.2.0", - "rawSpec": "~6.2.0", - "scope": null, - "spec": ">=6.2.0 <6.3.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", - "_shasum": "ce03c5ff0935bc1d9d69a9f14cbd18e568d67625", - "_shrinkwrap": null, - "_spec": "qs@~6.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "bugs": { - "url": "https://github.com/ljharb/qs/issues" - }, - "contributors": [ - { - "email": "ljharb@gmail.com", - "name": "Jordan Harband", - "url": "http://ljharb.codes" - } - ], - "dependencies": {}, - "description": "A querystring parser that supports nesting and arrays, with a depth limit", - "devDependencies": { - "@ljharb/eslint-config": "^6.0.0", - "browserify": "^13.0.1", - "covert": "^1.1.0", - "eslint": "^3.1.0", - "evalmd": "^0.0.17", - "iconv-lite": "^0.4.13", - "mkdirp": "^0.5.1", - "parallelshell": "^2.0.0", - "qs-iconv": "^1.0.3", - "tape": "^4.6.0" - }, - "directories": {}, - "dist": { - "shasum": "ce03c5ff0935bc1d9d69a9f14cbd18e568d67625", - "tarball": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz" - }, - "engines": { - "node": ">=0.6" - }, - "gitHead": "335f839142e6c2c69f5302c4940d92acb0e77561", - "homepage": "https://github.com/ljharb/qs", - "keywords": [ - "querystring", - "qs" - ], - "license": "BSD-3-Clause", - "main": "lib/index.js", - "maintainers": [ - { - "email": "eran@hammer.io", - "name": "hueniverse" - }, - { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - { - "email": "quitlahok@gmail.com", - "name": "nlf" - } - ], - "name": "qs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ljharb/qs.git" - }, - "scripts": { - "coverage": "covert test", - "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js", - "lint": "eslint lib/*.js text/*.js", - "prepublish": "npm run dist", - "pretest": "npm run --silent readme && npm run --silent lint", - "readme": "evalmd README.md", - "test": "npm run --silent coverage", - "tests-only": "node test" - }, - "version": "6.2.1" -} diff --git a/node_modules/qs/test/index.js b/node_modules/qs/test/index.js deleted file mode 100644 index b6a7d95..0000000 --- a/node_modules/qs/test/index.js +++ /dev/null @@ -1,5 +0,0 @@ -require('./parse'); - -require('./stringify'); - -require('./utils'); diff --git a/node_modules/qs/test/parse.js b/node_modules/qs/test/parse.js deleted file mode 100755 index ccf8c8c..0000000 --- a/node_modules/qs/test/parse.js +++ /dev/null @@ -1,451 +0,0 @@ -'use strict'; - -var test = require('tape'); -var qs = require('../'); -var iconv = require('iconv-lite'); - -test('parse()', function (t) { - t.test('parses a simple string', function (st) { - st.deepEqual(qs.parse('0=foo'), { '0': 'foo' }); - st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' }); - st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } }); - st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } }); - st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } }); - st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null }); - st.deepEqual(qs.parse('foo'), { foo: '' }); - st.deepEqual(qs.parse('foo='), { foo: '' }); - st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' }); - st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' }); - st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' }); - st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' }); - st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' }); - st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null }); - st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' }); - st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), { - cht: 'p3', - chd: 't:60,40', - chs: '250x100', - chl: 'Hello|World' - }); - st.end(); - }); - - t.test('allows enabling dot notation', function (st) { - st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' }); - st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } }); - st.end(); - }); - - t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string'); - t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string'); - t.deepEqual( - qs.parse('a[b][c][d][e][f][g][h]=i'), - { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, - 'defaults to a depth of 5' - ); - - t.test('only parses one level when depth = 1', function (st) { - st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } }); - st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } }); - st.end(); - }); - - t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array'); - - t.test('parses an explicit array', function (st) { - st.deepEqual(qs.parse('a[]=b'), { a: ['b'] }); - st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] }); - st.end(); - }); - - t.test('parses a mix of simple and explicit arrays', function (st) { - st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[1]=b&a=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a=b&a[1]=c'), { a: ['b', 'c'] }); - st.end(); - }); - - t.test('parses a nested array', function (st) { - st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } }); - st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } }); - st.end(); - }); - - t.test('allows to specify array indices', function (st) { - st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] }); - st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] }); - st.end(); - }); - - t.test('limits specific array indices to 20', function (st) { - st.deepEqual(qs.parse('a[20]=a'), { a: ['a'] }); - st.deepEqual(qs.parse('a[21]=a'), { a: { '21': 'a' } }); - st.end(); - }); - - t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number'); - - t.test('supports encoded = signs', function (st) { - st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' }); - st.end(); - }); - - t.test('is ok with url encoded strings', function (st) { - st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } }); - st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } }); - st.end(); - }); - - t.test('allows brackets in the value', function (st) { - st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' }); - st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' }); - st.end(); - }); - - t.test('allows empty values', function (st) { - st.deepEqual(qs.parse(''), {}); - st.deepEqual(qs.parse(null), {}); - st.deepEqual(qs.parse(undefined), {}); - st.end(); - }); - - t.test('transforms arrays to objects', function (st) { - st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { '0': 'bar', bad: 'baz' } }); - st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', '0': 'bar' } }); - st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', '0': 'bar' } }); - st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { '0': 'bar', bad: 'baz' } }); - st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', '0': 'bar', '1': 'foo' } }); - st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); - - st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { '0': 'b', c: true, t: 'u' } }); - st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { '0': 'b', t: 'u', hasOwnProperty: 'c' } }); - st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { '0': 'b', '1': 'c', x: 'y' } }); - st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { '0': 'b', hasOwnProperty: 'c', x: 'y' } }); - st.end(); - }); - - t.test('transforms arrays to objects (dot notation)', function (st) { - st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } }); - st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } }); - st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } }); - st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] }); - st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] }); - st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', '0': 'bar' } }); - st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', '0': 'bar' } }); - st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { '0': 'bar', bad: 'baz' } }); - st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', '0': 'bar', '1': 'foo' } }); - st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); - st.end(); - }); - - t.deepEqual(qs.parse('a[b]=c&a=d'), { a: { b: 'c', d: true } }, 'can add keys to objects'); - - t.test('correctly prunes undefined values when converting an array to an object', function (st) { - st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { '2': 'b', '99999999': 'c' } }); - st.end(); - }); - - t.test('supports malformed uri characters', function (st) { - st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null }); - st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' }); - st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' }); - st.end(); - }); - - t.test('doesn\'t produce empty keys', function (st) { - st.deepEqual(qs.parse('_r=1&'), { '_r': '1' }); - st.end(); - }); - - t.test('cannot access Object prototype', function (st) { - qs.parse('constructor[prototype][bad]=bad'); - qs.parse('bad[constructor][prototype][bad]=bad'); - st.equal(typeof Object.prototype.bad, 'undefined'); - st.end(); - }); - - t.test('parses arrays of objects', function (st) { - st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); - st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] }); - st.end(); - }); - - t.test('allows for empty strings in arrays', function (st) { - st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] }); - - st.deepEqual( - qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }), - { a: ['b', null, 'c', ''] }, - 'with arrayLimit 20 + array indices: null then empty string works' - ); - st.deepEqual( - qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }), - { a: ['b', null, 'c', ''] }, - 'with arrayLimit 0 + array brackets: null then empty string works' - ); - - st.deepEqual( - qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }), - { a: ['b', '', 'c', null] }, - 'with arrayLimit 20 + array indices: empty string then null works' - ); - st.deepEqual( - qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }), - { a: ['b', '', 'c', null] }, - 'with arrayLimit 0 + array brackets: empty string then null works' - ); - - st.deepEqual( - qs.parse('a[]=&a[]=b&a[]=c'), - { a: ['', 'b', 'c'] }, - 'array brackets: empty strings work' - ); - st.end(); - }); - - t.test('compacts sparse arrays', function (st) { - st.deepEqual(qs.parse('a[10]=1&a[2]=2'), { a: ['2', '1'] }); - st.deepEqual(qs.parse('a[1][b][2][c]=1'), { a: [{ b: [{ c: '1' }] }] }); - st.deepEqual(qs.parse('a[1][2][3][c]=1'), { a: [[[{ c: '1' }]]] }); - st.deepEqual(qs.parse('a[1][2][3][c][1]=1'), { a: [[[{ c: ['1'] }]]] }); - st.end(); - }); - - t.test('parses semi-parsed strings', function (st) { - st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); - st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); - st.end(); - }); - - t.test('parses buffers correctly', function (st) { - var b = new Buffer('test'); - st.deepEqual(qs.parse({ a: b }), { a: b }); - st.end(); - }); - - t.test('continues parsing when no parent is found', function (st) { - st.deepEqual(qs.parse('[]=&a=b'), { '0': '', a: 'b' }); - st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { '0': null, a: 'b' }); - st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' }); - st.end(); - }); - - t.test('does not error when parsing a very long array', function (st) { - var str = 'a[]=a'; - while (Buffer.byteLength(str) < 128 * 1024) { - str = str + '&' + str; - } - - st.doesNotThrow(function () { qs.parse(str); }); - - st.end(); - }); - - t.test('should not throw when a native prototype has an enumerable property', { parallel: false }, function (st) { - Object.prototype.crash = ''; - Array.prototype.crash = ''; - st.doesNotThrow(qs.parse.bind(null, 'a=b')); - st.deepEqual(qs.parse('a=b'), { a: 'b' }); - st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c')); - st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); - delete Object.prototype.crash; - delete Array.prototype.crash; - st.end(); - }); - - t.test('parses a string with an alternative string delimiter', function (st) { - st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('parses a string with an alternative RegExp delimiter', function (st) { - st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('does not use non-splittable objects as delimiters', function (st) { - st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('allows overriding parameter limit', function (st) { - st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' }); - st.end(); - }); - - t.test('allows setting the parameter limit to Infinity', function (st) { - st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('allows overriding array limit', function (st) { - st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { '0': 'b' } }); - st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } }); - st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { '0': 'b', '1': 'c' } }); - st.end(); - }); - - t.test('allows disabling array parsing', function (st) { - st.deepEqual(qs.parse('a[0]=b&a[1]=c', { parseArrays: false }), { a: { '0': 'b', '1': 'c' } }); - st.end(); - }); - - t.test('parses an object', function (st) { - var input = { - 'user[name]': { 'pop[bob]': 3 }, - 'user[email]': null - }; - - var expected = { - user: { - name: { 'pop[bob]': 3 }, - email: null - } - }; - - var result = qs.parse(input); - - st.deepEqual(result, expected); - st.end(); - }); - - t.test('parses an object in dot notation', function (st) { - var input = { - 'user.name': { 'pop[bob]': 3 }, - 'user.email.': null - }; - - var expected = { - user: { - name: { 'pop[bob]': 3 }, - email: null - } - }; - - var result = qs.parse(input, { allowDots: true }); - - st.deepEqual(result, expected); - st.end(); - }); - - t.test('parses an object and not child values', function (st) { - var input = { - 'user[name]': { 'pop[bob]': { 'test': 3 } }, - 'user[email]': null - }; - - var expected = { - user: { - name: { 'pop[bob]': { 'test': 3 } }, - email: null - } - }; - - var result = qs.parse(input); - - st.deepEqual(result, expected); - st.end(); - }); - - t.test('does not blow up when Buffer global is missing', function (st) { - var tempBuffer = global.Buffer; - delete global.Buffer; - var result = qs.parse('a=b&c=d'); - global.Buffer = tempBuffer; - st.deepEqual(result, { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('does not crash when parsing circular references', function (st) { - var a = {}; - a.b = a; - - var parsed; - - st.doesNotThrow(function () { - parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); - }); - - st.equal('foo' in parsed, true, 'parsed has "foo" property'); - st.equal('bar' in parsed.foo, true); - st.equal('baz' in parsed.foo, true); - st.equal(parsed.foo.bar, 'baz'); - st.deepEqual(parsed.foo.baz, a); - st.end(); - }); - - t.test('parses plain objects correctly', function (st) { - var a = Object.create(null); - a.b = 'c'; - - st.deepEqual(qs.parse(a), { b: 'c' }); - var result = qs.parse({ a: a }); - st.equal('a' in result, true, 'result has "a" property'); - st.deepEqual(result.a, a); - st.end(); - }); - - t.test('parses dates correctly', function (st) { - var now = new Date(); - st.deepEqual(qs.parse({ a: now }), { a: now }); - st.end(); - }); - - t.test('parses regular expressions correctly', function (st) { - var re = /^test$/; - st.deepEqual(qs.parse({ a: re }), { a: re }); - st.end(); - }); - - t.test('can allow overwriting prototype properties', function (st) { - st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }, { prototype: false }); - st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }, { prototype: false }); - st.end(); - }); - - t.test('can return plain objects', function (st) { - var expected = Object.create(null); - expected.a = Object.create(null); - expected.a.b = 'c'; - expected.a.hasOwnProperty = 'd'; - st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected); - st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null)); - var expectedArray = Object.create(null); - expectedArray.a = Object.create(null); - expectedArray.a['0'] = 'b'; - expectedArray.a.c = 'd'; - st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray); - st.end(); - }); - - t.test('can parse with custom encoding', function (st) { - st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', { - decoder: function (str) { - var reg = /\%([0-9A-F]{2})/ig; - var result = []; - var parts; - var last = 0; - while (parts = reg.exec(str)) { - result.push(parseInt(parts[1], 16)); - last = parts.index + parts[0].length; - } - return iconv.decode(new Buffer(result), 'shift_jis').toString(); - } - }), { 県: '大阪府' }); - st.end(); - }); - - t.test('throws error with wrong decoder', function (st) { - st.throws(function () { - qs.parse({}, { - decoder: 'string' - }); - }, new TypeError('Decoder has to be a function.')); - st.end(); - }); -}); diff --git a/node_modules/qs/test/stringify.js b/node_modules/qs/test/stringify.js deleted file mode 100755 index 699397e..0000000 --- a/node_modules/qs/test/stringify.js +++ /dev/null @@ -1,305 +0,0 @@ -'use strict'; - -var test = require('tape'); -var qs = require('../'); -var iconv = require('iconv-lite'); - -test('stringify()', function (t) { - t.test('stringifies a querystring object', function (st) { - st.equal(qs.stringify({ a: 'b' }), 'a=b'); - st.equal(qs.stringify({ a: 1 }), 'a=1'); - st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2'); - st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z'); - st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC'); - st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80'); - st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90'); - st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7'); - st.end(); - }); - - t.test('stringifies a nested object', function (st) { - st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); - st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); - st.end(); - }); - - t.test('stringifies a nested object with dots notation', function (st) { - st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c'); - st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e'); - st.end(); - }); - - t.test('stringifies an array value', function (st) { - st.equal(qs.stringify({ a: ['b', 'c', 'd'] }), 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d'); - st.end(); - }); - - t.test('omits nulls when asked', function (st) { - st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b'); - st.end(); - }); - - - t.test('omits nested nulls when asked', function (st) { - st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c'); - st.end(); - }); - - t.test('omits array indices when asked', function (st) { - st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d'); - st.end(); - }); - - t.test('stringifies a nested array value', function (st) { - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); - st.end(); - }); - - t.test('stringifies a nested array value with dots notation', function (st) { - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { allowDots: true, encode: false }), 'a.b[0]=c&a.b[1]=d'); - st.end(); - }); - - t.test('stringifies an object inside an array', function (st) { - st.equal(qs.stringify({ a: [{ b: 'c' }] }), 'a%5B0%5D%5Bb%5D=c'); - st.equal(qs.stringify({ a: [{ b: { c: [1] } }] }), 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1'); - st.end(); - }); - - t.test('stringifies an array with mixed objects and primitives', function (st) { - st.equal(qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), 'a[0][b]=1&a[1]=2&a[2]=3'); - st.end(); - }); - - t.test('stringifies an object inside an array with dots notation', function (st) { - st.equal(qs.stringify({ a: [{ b: 'c' }] }, { allowDots: true, encode: false }), 'a[0].b=c'); - st.equal(qs.stringify({ a: [{ b: { c: [1] } }] }, { allowDots: true, encode: false }), 'a[0].b.c[0]=1'); - st.end(); - }); - - t.test('does not omit object keys when indices = false', function (st) { - st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c'); - st.end(); - }); - - t.test('uses indices notation for arrays when indices=true', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c'); - st.end(); - }); - - t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c'); - st.end(); - }); - - t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c'); - st.end(); - }); - - t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c'); - st.end(); - }); - - t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c'); - st.end(); - }); - - t.test('stringifies a complicated object', function (st) { - st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e'); - st.end(); - }); - - t.test('stringifies an empty value', function (st) { - st.equal(qs.stringify({ a: '' }), 'a='); - st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a'); - - st.equal(qs.stringify({ a: '', b: '' }), 'a=&b='); - st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b='); - - st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D='); - st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D'); - st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D='); - - st.end(); - }); - - t.test('stringifies an empty object', function (st) { - var obj = Object.create(null); - obj.a = 'b'; - st.equal(qs.stringify(obj), 'a=b'); - st.end(); - }); - - t.test('returns an empty string for invalid input', function (st) { - st.equal(qs.stringify(undefined), ''); - st.equal(qs.stringify(false), ''); - st.equal(qs.stringify(null), ''); - st.equal(qs.stringify(''), ''); - st.end(); - }); - - t.test('stringifies an object with an empty object as a child', function (st) { - var obj = { - a: Object.create(null) - }; - - obj.a.b = 'c'; - st.equal(qs.stringify(obj), 'a%5Bb%5D=c'); - st.end(); - }); - - t.test('drops keys with a value of undefined', function (st) { - st.equal(qs.stringify({ a: undefined }), ''); - - st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D'); - st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D='); - st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D='); - st.end(); - }); - - t.test('url encodes values', function (st) { - st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); - st.end(); - }); - - t.test('stringifies a date', function (st) { - var now = new Date(); - var str = 'a=' + encodeURIComponent(now.toISOString()); - st.equal(qs.stringify({ a: now }), str); - st.end(); - }); - - t.test('stringifies the weird object from qs', function (st) { - st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); - st.end(); - }); - - t.test('skips properties that are part of the object prototype', function (st) { - Object.prototype.crash = 'test'; - st.equal(qs.stringify({ a: 'b' }), 'a=b'); - st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); - delete Object.prototype.crash; - st.end(); - }); - - t.test('stringifies boolean values', function (st) { - st.equal(qs.stringify({ a: true }), 'a=true'); - st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true'); - st.equal(qs.stringify({ b: false }), 'b=false'); - st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false'); - st.end(); - }); - - t.test('stringifies buffer values', function (st) { - st.equal(qs.stringify({ a: new Buffer('test') }), 'a=test'); - st.equal(qs.stringify({ a: { b: new Buffer('test') } }), 'a%5Bb%5D=test'); - st.end(); - }); - - t.test('stringifies an object using an alternative delimiter', function (st) { - st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); - st.end(); - }); - - t.test('doesn\'t blow up when Buffer global is missing', function (st) { - var tempBuffer = global.Buffer; - delete global.Buffer; - var result = qs.stringify({ a: 'b', c: 'd' }); - global.Buffer = tempBuffer; - st.equal(result, 'a=b&c=d'); - st.end(); - }); - - t.test('selects properties when filter=array', function (st) { - st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); - st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); - st.equal(qs.stringify({ a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, { filter: ['a', 'b', 0, 2] }), 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3'); - st.end(); - }); - - t.test('supports custom representations when filter=function', function (st) { - var calls = 0; - var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; - var filterFunc = function (prefix, value) { - calls++; - if (calls === 1) { - st.equal(prefix, '', 'prefix is empty'); - st.equal(value, obj); - } else if (prefix === 'c') { - return; - } else if (value instanceof Date) { - st.equal(prefix, 'e[f]'); - return value.getTime(); - } - return value; - }; - - st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000'); - st.equal(calls, 5); - st.end(); - }); - - t.test('can disable uri encoding', function (st) { - st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b'); - st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c'); - st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c'); - st.end(); - }); - - t.test('can sort the keys', function (st) { - var sort = function (a, b) { return a.localeCompare(b); }; - st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y'); - st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a'); - st.end(); - }); - - t.test('can sort the keys at depth 3 or more too', function (st) { - var sort = function (a, b) { return a.localeCompare(b); }; - st.equal(qs.stringify({ a: 'a', z: { zj: {zjb: 'zjb', zja: 'zja'}, zi: {zib: 'zib', zia: 'zia'} }, b: 'b' }, { sort: sort, encode: false }), 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb'); - st.equal(qs.stringify({ a: 'a', z: { zj: {zjb: 'zjb', zja: 'zja'}, zi: {zib: 'zib', zia: 'zia'} }, b: 'b' }, { sort: null, encode: false }), 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b'); - st.end(); - }); - - t.test('can stringify with custom encoding', function (st) { - st.equal(qs.stringify({ 県: '大阪府', '': ''}, { - encoder: function (str) { - if (str.length === 0) { - return ''; - } - var buf = iconv.encode(str, 'shiftjis'); - var result = []; - for (var i=0; i < buf.length; ++i) { - result.push(buf.readUInt8(i).toString(16)); - } - return '%' + result.join('%'); - } - }), '%8c%a7=%91%e5%8d%e3%95%7b&='); - st.end(); - }); - - t.test('throws error with wrong encoder', function (st) { - st.throws(function () { - qs.stringify({}, { - encoder: 'string' - }); - }, new TypeError('Encoder has to be a function.')); - st.end(); - }); - - t.test('can use custom encoder for a buffer object', { - skip: typeof Buffer === 'undefined' - }, function (st) { - st.equal(qs.stringify({ a: new Buffer([1]) }, { - encoder: function (buffer) { - if (typeof buffer === 'string') { - return buffer; - } - return String.fromCharCode(buffer.readUInt8(0) + 97); - } - }), 'a=b'); - st.end(); - }); -}); diff --git a/node_modules/qs/test/utils.js b/node_modules/qs/test/utils.js deleted file mode 100755 index 4a8d824..0000000 --- a/node_modules/qs/test/utils.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var test = require('tape'); -var utils = require('../lib/utils'); - -test('merge()', function (t) { - t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); - t.end(); -}); diff --git a/node_modules/randombytes/.travis.yml b/node_modules/randombytes/.travis.yml deleted file mode 100644 index f8eebd8..0000000 --- a/node_modules/randombytes/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -matrix: - include: - - node_js: '0.10' - env: TEST_SUITE=test - - node_js: '0.12' - env: TEST_SUITE=test - - node_js: '5' - env: TEST_SUITE=test - - node_js: '4' - env: TEST_SUITE=test - - node_js: '4' - env: TEST_SUITE=phantom -script: "npm run-script $TEST_SUITE" diff --git a/node_modules/randombytes/.zuul.yml b/node_modules/randombytes/.zuul.yml deleted file mode 100644 index 96d9cfb..0000000 --- a/node_modules/randombytes/.zuul.yml +++ /dev/null @@ -1 +0,0 @@ -ui: tape diff --git a/node_modules/randombytes/README.md b/node_modules/randombytes/README.md deleted file mode 100644 index 3bacba4..0000000 --- a/node_modules/randombytes/README.md +++ /dev/null @@ -1,14 +0,0 @@ -randombytes -=== - -[![Version](http://img.shields.io/npm/v/randombytes.svg)](https://www.npmjs.org/package/randombytes) [![Build Status](https://travis-ci.org/crypto-browserify/randombytes.svg?branch=master)](https://travis-ci.org/crypto-browserify/randombytes) - -randombytes from node that works in the browser. In node you just get crypto.randomBytes, but in the browser it uses .crypto/msCrypto.getRandomValues - -```js -var randomBytes = require('randombytes'); -randomBytes(16);//get 16 random bytes -randomBytes(16, function (err, resp) { - // resp is 16 random bytes -}); -``` diff --git a/node_modules/randombytes/browser.js b/node_modules/randombytes/browser.js deleted file mode 100644 index 1aa3edc..0000000 --- a/node_modules/randombytes/browser.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict' - -function oldBrowser () { - throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') -} - -var crypto = global.crypto || global.msCrypto - -if (crypto && crypto.getRandomValues) { - module.exports = randomBytes -} else { - module.exports = oldBrowser -} - -function randomBytes (size, cb) { - // phantomjs needs to throw - if (size > 65536) throw new Error('requested too many random bytes') - // in case browserify isn't using the Uint8Array version - var rawBytes = new global.Uint8Array(size) - - // This will not work in older browsers. - // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues - if (size > 0) { // getRandomValues fails on IE if size == 0 - crypto.getRandomValues(rawBytes) - } - // phantomjs doesn't like a buffer being passed here - var bytes = new Buffer(rawBytes.buffer) - - if (typeof cb === 'function') { - return process.nextTick(function () { - cb(null, bytes) - }) - } - - return bytes -} diff --git a/node_modules/randombytes/index.js b/node_modules/randombytes/index.js deleted file mode 100644 index a2d9e39..0000000 --- a/node_modules/randombytes/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('crypto').randomBytes diff --git a/node_modules/randombytes/package.json b/node_modules/randombytes/package.json deleted file mode 100644 index da8474c..0000000 --- a/node_modules/randombytes/package.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "_args": [ - [ - "randombytes@^2.0.1", - "/Users/jbaylina/git/MVP/node_modules/bip39" - ] - ], - "_from": "randombytes@>=2.0.1 <3.0.0", - "_id": "randombytes@2.0.3", - "_inCache": true, - "_installable": true, - "_location": "/randombytes", - "_nodeVersion": "5.5.0", - "_npmOperationalInternal": { - "host": "packages-13-west.internal.npmjs.com", - "tmp": "tmp/randombytes-2.0.3.tgz_1456944700918_0.5908831511624157" - }, - "_npmUser": { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - "_npmVersion": "3.6.0", - "_phantomChildren": {}, - "_requested": { - "name": "randombytes", - "raw": "randombytes@^2.0.1", - "rawSpec": "^2.0.1", - "scope": null, - "spec": ">=2.0.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/bip39" - ], - "_resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz", - "_shasum": "674c99760901c3c4112771a31e521dc349cc09ec", - "_shrinkwrap": null, - "_spec": "randombytes@^2.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/bip39", - "author": "", - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/randombytes/issues" - }, - "dependencies": {}, - "description": "random bytes from browserify stand alone", - "devDependencies": { - "phantomjs": "^1.9.9", - "standard": "^3.3.0", - "tap-spec": "^2.1.2", - "tape": "^3.0.3", - "zuul": "^3.7.2" - }, - "directories": {}, - "dist": { - "shasum": "674c99760901c3c4112771a31e521dc349cc09ec", - "tarball": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz" - }, - "gitHead": "f466c002a706ee11dadf3b6aa0a6e9bf1c37c82d", - "homepage": "https://github.com/crypto-browserify/randombytes", - "keywords": [ - "crypto", - "random" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - { - "email": "email@dcousens.com", - "name": "dcousens" - }, - { - "email": "dominic.tarr@gmail.com", - "name": "dominictarr" - }, - { - "email": "jprichardson@gmail.com", - "name": "jprichardson" - }, - { - "email": "fedor@indutny.com", - "name": "indutny" - } - ], - "name": "randombytes", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/crypto-browserify/randombytes.git" - }, - "scripts": { - "local": "zuul --local --no-coverage -- test.js", - "phantom": "zuul --phantom -- test.js", - "test": "standard && node test.js | tspec" - }, - "version": "2.0.3" -} diff --git a/node_modules/randombytes/test.js b/node_modules/randombytes/test.js deleted file mode 100644 index 8e34dca..0000000 --- a/node_modules/randombytes/test.js +++ /dev/null @@ -1,56 +0,0 @@ -var test = require('tape') -var randomBytes = require('./') - -test('sync', function (t) { - t.plan(4) - t.equals(randomBytes(0).length, 0, 'len: ' + 0) - t.equals(randomBytes(3).length, 3, 'len: ' + 3) - t.equals(randomBytes(30).length, 30, 'len: ' + 30) - t.equals(randomBytes(300).length, 300, 'len: ' + 300) -}) - -test('async', function (t) { - t.plan(4) - - randomBytes(0, function (err, resp) { - if (err) throw err - - t.equals(resp.length, 0, 'len: ' + 0) - }) - - randomBytes(3, function (err, resp) { - if (err) throw err - - t.equals(resp.length, 3, 'len: ' + 3) - }) - - randomBytes(30, function (err, resp) { - if (err) throw err - - t.equals(resp.length, 30, 'len: ' + 30) - }) - - randomBytes(300, function (err, resp) { - if (err) throw err - - t.equals(resp.length, 300, 'len: ' + 300) - }) -}) - -if (process.browser) { - test('requesting to much throws', function (t) { - t.plan(1) - t.throws(function () { - randomBytes(65537) - }) - }) - - test('requesting to much throws async', function (t) { - t.plan(1) - t.throws(function () { - randomBytes(65537, function () { - t.ok(false, 'should not get here') - }) - }) - }) -} diff --git a/node_modules/read-pkg-up/index.js b/node_modules/read-pkg-up/index.js deleted file mode 100644 index beb3d48..0000000 --- a/node_modules/read-pkg-up/index.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; -var findUp = require('find-up'); -var readPkg = require('read-pkg'); - -module.exports = function (opts) { - return findUp('package.json', opts).then(function (fp) { - if (!fp) { - return {}; - } - - return readPkg(fp, opts).then(function (pkg) { - return { - pkg: pkg, - path: fp - }; - }); - }); -}; - -module.exports.sync = function (opts) { - var fp = findUp.sync('package.json', opts); - - if (!fp) { - return {}; - } - - return { - pkg: readPkg.sync(fp, opts), - path: fp - }; -}; diff --git a/node_modules/read-pkg-up/license b/node_modules/read-pkg-up/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/read-pkg-up/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/read-pkg-up/package.json b/node_modules/read-pkg-up/package.json deleted file mode 100644 index 1c01974..0000000 --- a/node_modules/read-pkg-up/package.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_args": [ - [ - "read-pkg-up@^1.0.1", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "read-pkg-up@>=1.0.1 <2.0.0", - "_id": "read-pkg-up@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/read-pkg-up", - "_nodeVersion": "0.12.7", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": {}, - "_requested": { - "name": "read-pkg-up", - "raw": "read-pkg-up@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs" - ], - "_resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "_shasum": "9d63c13276c065918d57f002a57f40a1b643fb02", - "_shrinkwrap": null, - "_spec": "read-pkg-up@^1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/read-pkg-up/issues" - }, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "description": "Read the closest package.json file", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "9d63c13276c065918d57f002a57f40a1b643fb02", - "tarball": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "27ec7c844b495a39eea7859c5f4d4721ebf60e8e", - "homepage": "https://github.com/sindresorhus/read-pkg-up", - "keywords": [ - "json", - "read", - "parse", - "file", - "fs", - "graceful", - "load", - "pkg", - "package", - "find", - "up", - "find-up", - "findup", - "look-up", - "look", - "file", - "search", - "match", - "package", - "resolve", - "parent", - "parents", - "folder", - "directory", - "dir", - "walk", - "walking", - "path" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "read-pkg-up", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/read-pkg-up.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.0.1" -} diff --git a/node_modules/read-pkg-up/readme.md b/node_modules/read-pkg-up/readme.md deleted file mode 100644 index dbd88f3..0000000 --- a/node_modules/read-pkg-up/readme.md +++ /dev/null @@ -1,79 +0,0 @@ -# read-pkg-up [![Build Status](https://travis-ci.org/sindresorhus/read-pkg-up.svg?branch=master)](https://travis-ci.org/sindresorhus/read-pkg-up) - -> Read the closest package.json file - - -## Why - -- [Finds the closest package.json](https://github.com/sindresorhus/find-up) -- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs) -- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom) -- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json) -- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) - - -## Install - -``` -$ npm install --save read-pkg-up -``` - - -## Usage - -```js -var readPkgUp = require('read-pkg-up'); - -readPkgUp().then(function (result) { - console.log(result); - /* - { - pkg: { - name: 'awesome-package', - version: '1.0.0', - ... - }, - path: '/Users/sindresorhus/dev/awesome-package' - } - */ -}); -``` - - -## API - -### readPkgUp([options]) - -Returns a promise that resolves to a result object. - -### readPkgUp.sync([options]) - -Returns a result object. - -#### options - -##### cwd - -Type: `string` -Default: `.` - -Directory to start looking for a package.json file. - -##### normalize - -Type: `boolean` -Default: `true` - -[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data. - - -## Related - -- [read-pkg](https://github.com/sindresorhus/read-pkg) - Read a package.json file -- [find-up](https://github.com/sindresorhus/find-up) - Find a file by walking up parent directories -- [pkg-conf](https://github.com/sindresorhus/pkg-conf) - Get namespaced config from the closest package.json - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/read-pkg/index.js b/node_modules/read-pkg/index.js deleted file mode 100644 index c5c3afa..0000000 --- a/node_modules/read-pkg/index.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; -var path = require('path'); -var loadJsonFile = require('load-json-file'); -var normalizePackageData = require('normalize-package-data'); -var pathType = require('path-type'); - -module.exports = function (fp, opts) { - if (typeof fp !== 'string') { - opts = fp; - fp = '.'; - } - - opts = opts || {}; - - return pathType.dir(fp) - .then(function (isDir) { - if (isDir) { - fp = path.join(fp, 'package.json'); - } - - return loadJsonFile(fp); - }) - .then(function (x) { - if (opts.normalize !== false) { - normalizePackageData(x); - } - - return x; - }); -}; - -module.exports.sync = function (fp, opts) { - if (typeof fp !== 'string') { - opts = fp; - fp = '.'; - } - - opts = opts || {}; - fp = pathType.dirSync(fp) ? path.join(fp, 'package.json') : fp; - - var x = loadJsonFile.sync(fp); - - if (opts.normalize !== false) { - normalizePackageData(x); - } - - return x; -}; diff --git a/node_modules/read-pkg/license b/node_modules/read-pkg/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/read-pkg/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/read-pkg/package.json b/node_modules/read-pkg/package.json deleted file mode 100644 index 0ab24be..0000000 --- a/node_modules/read-pkg/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "read-pkg@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/read-pkg-up" - ] - ], - "_from": "read-pkg@>=1.0.0 <2.0.0", - "_id": "read-pkg@1.1.0", - "_inCache": true, - "_installable": true, - "_location": "/read-pkg", - "_nodeVersion": "3.0.0", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.13.3", - "_phantomChildren": {}, - "_requested": { - "name": "read-pkg", - "raw": "read-pkg@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/read-pkg-up" - ], - "_resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "_shasum": "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28", - "_shrinkwrap": null, - "_spec": "read-pkg@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/read-pkg-up", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/read-pkg/issues" - }, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "description": "Read a package.json file", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28", - "tarball": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "9448d32b2ebcd65fc0547def3cfe5b28ef522e68", - "homepage": "https://github.com/sindresorhus/read-pkg", - "keywords": [ - "json", - "read", - "parse", - "file", - "fs", - "graceful", - "load", - "pkg", - "package", - "normalize" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "read-pkg", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/read-pkg.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.1.0" -} diff --git a/node_modules/read-pkg/readme.md b/node_modules/read-pkg/readme.md deleted file mode 100644 index 9a0d4cc..0000000 --- a/node_modules/read-pkg/readme.md +++ /dev/null @@ -1,79 +0,0 @@ -# read-pkg [![Build Status](https://travis-ci.org/sindresorhus/read-pkg.svg?branch=master)](https://travis-ci.org/sindresorhus/read-pkg) - -> Read a package.json file - - -## Why - -- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs) -- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom) -- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json) -- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) - - -## Install - -``` -$ npm install --save read-pkg -``` - - -## Usage - -```js -var readPkg = require('read-pkg'); - -readPkg().then(function (pkg) { - console.log(pkg); - //=> {name: 'read-pkg', ...} -}); - -readPkg(__dirname).then(function (pkg) { - console.log(pkg); - //=> {name: 'read-pkg', ...} -}); - -readPkg(path.join('unicorn', 'package.json')).then(function (pkg) { - console.log(pkg); - //=> {name: 'read-pkg', ...} -}); -``` - - -## API - -### readPkg([path], [options]) - -Returns a promise that resolves to the parsed JSON. - -### readPkg.sync([path], [options]) - -Returns the parsed JSON. - -#### path - -Type: `string` -Default: `.` - -Path to a `package.json` file or its directory. - -#### options - -##### normalize - -Type: `boolean` -Default: `true` - -[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data. - - -## Related - -- [read-pkg-up](https://github.com/sindresorhus/read-pkg-up) - Read the closest package.json file -- [write-pkg](https://github.com/sindresorhus/write-pkg) - Write a `package.json` file -- [load-json-file](https://github.com/sindresorhus/load-json-file) - Read and parse a JSON file - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/readable-stream/.npmignore b/node_modules/readable-stream/.npmignore deleted file mode 100644 index 265ff73..0000000 --- a/node_modules/readable-stream/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -build/ -test/ -examples/ -fs.js -zlib.js -.zuul.yml -.nyc_output -coverage diff --git a/node_modules/readable-stream/.travis.yml b/node_modules/readable-stream/.travis.yml deleted file mode 100644 index 84504c9..0000000 --- a/node_modules/readable-stream/.travis.yml +++ /dev/null @@ -1,49 +0,0 @@ -sudo: false -language: node_js -before_install: - - npm install -g npm@2 - - npm install -g npm -notifications: - email: false -matrix: - fast_finish: true - include: - - node_js: '0.8' - env: TASK=test - - node_js: '0.10' - env: TASK=test - - node_js: '0.11' - env: TASK=test - - node_js: '0.12' - env: TASK=test - - node_js: 1 - env: TASK=test - - node_js: 2 - env: TASK=test - - node_js: 3 - env: TASK=test - - node_js: 4 - env: TASK=test - - node_js: 5 - env: TASK=test - - node_js: 6 - env: TASK=test - - node_js: 5 - env: TASK=browser BROWSER_NAME=android BROWSER_VERSION="4.0..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=ie BROWSER_VERSION="9..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=opera BROWSER_VERSION="11..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=chrome BROWSER_VERSION="-3..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=firefox BROWSER_VERSION="-3..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=safari BROWSER_VERSION="5..latest" - - node_js: 5 - env: TASK=browser BROWSER_NAME=microsoftedge BROWSER_VERSION=latest -script: "npm run $TASK" -env: - global: - - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= - - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_modules/readable-stream/LICENSE b/node_modules/readable-stream/LICENSE deleted file mode 100644 index e3d4e69..0000000 --- a/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/node_modules/readable-stream/README.md b/node_modules/readable-stream/README.md deleted file mode 100644 index 9fb4fea..0000000 --- a/node_modules/readable-stream/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# readable-stream - -***Node-core v6.3.1 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) - - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) - -```bash -npm install --save readable-stream -``` - -***Node-core streams for userland*** - -This package is a mirror of the Streams2 and Streams3 implementations in -Node-core, including [documentation](doc/stream.md). - -If you want to guarantee a stable streams base, regardless of what version of -Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). - -As of version 2.0.0 **readable-stream** uses semantic versioning. - -# Streams WG Team Members - -* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> - - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B -* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> - - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D -* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> -* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> diff --git a/node_modules/readable-stream/doc/stream.md b/node_modules/readable-stream/doc/stream.md deleted file mode 100644 index fc269c8..0000000 --- a/node_modules/readable-stream/doc/stream.md +++ /dev/null @@ -1,2015 +0,0 @@ -# Stream - - Stability: 2 - Stable - -A stream is an abstract interface for working with streaming data in Node.js. -The `stream` module provides a base API that makes it easy to build objects -that implement the stream interface. - -There are many stream objects provided by Node.js. For instance, a -[request to an HTTP server][http-incoming-message] and [`process.stdout`][] -are both stream instances. - -Streams can be readable, writable, or both. All streams are instances of -[`EventEmitter`][]. - -The `stream` module can be accessed using: - -```js -const stream = require('stream'); -``` - -While it is important for all Node.js users to understand how streams works, -the `stream` module itself is most useful for developer's that are creating new -types of stream instances. Developer's who are primarily *consuming* stream -objects will rarely (if ever) have need to use the `stream` module directly. - -## Organization of this document - -This document is divided into two primary sections and third section for -additional notes. The first section explains the elements of the stream API that -are required to *use* streams within an application. The second section explains -the elements of the API that are required to *implement* new types of streams. - -## Types of Streams - -There are four fundamental stream types within Node.js: - -* [Readable][] - streams from which data can be read (for example - [`fs.createReadStream()`][]). -* [Writable][] - streams to which data can be written (for example - [`fs.createWriteStream()`][]). -* [Duplex][] - streams that are both Readable and Writable (for example - [`net.Socket`][]). -* [Transform][] - Duplex streams that can modify or transform the data as it - is written and read (for example [`zlib.createDeflate()`][]). - -### Object Mode - -All streams created by Node.js APIs operate exclusively on strings and `Buffer` -objects. It is possible, however, for stream implementations to work with other -types of JavaScript values (with the exception of `null` which serves a special -purpose within streams). Such streams are considered to operate in "object -mode". - -Stream instances are switched into object mode using the `objectMode` option -when the stream is created. Attempting to switch an existing stream into -object mode is not safe. - -### Buffering - - - -Both [Writable][] and [Readable][] streams will store data in an internal -buffer that can be retrieved using `writable._writableState.getBuffer()` or -`readable._readableState.buffer`, respectively. - -The amount of data potentially buffered depends on the `highWaterMark` option -passed into the streams constructor. For normal streams, the `highWaterMark` -option specifies a total number of bytes. For streams operating in object mode, -the `highWaterMark` specifies a total number of objects. - -Data is buffered in Readable streams when the implementation calls -[`stream.push(chunk)`][stream-push]. If the consumer of the Stream does not -call [`stream.read()`][stream-read], the data will sit in the internal -queue until it is consumed. - -Once the total size of the internal read buffer reaches the threshold specified -by `highWaterMark`, the stream will temporarily stop reading data from the -underlying resource until the data currently buffered can be consumed (that is, -the stream will stop calling the internal `readable._read()` method that is -used to fill the read buffer). - -Data is buffered in Writable streams when the -[`writable.write(chunk)`][stream-write] method is called repeatedly. While the -total size of the internal write buffer is below the threshold set by -`highWaterMark`, calls to `writable.write()` will return `true`. Once the -the size of the internal buffer reaches or exceeds the `highWaterMark`, `false` -will be returned. - -A key goal of the `stream` API, and in particular the [`stream.pipe()`] method, -is to limit the buffering of data to acceptable levels such that sources and -destinations of differing speeds will not overwhelm the available memory. - -Because [Duplex][] and [Transform][] streams are both Readable and Writable, -each maintain *two* separate internal buffers used for reading and writing, -allowing each side to operate independently of the other while maintaining an -appropriate and efficient flow of data. For example, [`net.Socket`][] instances -are [Duplex][] streams whose Readable side allows consumption of data received -*from* the socket and whose Writable side allows writing data *to* the socket. -Because data may be written to the socket at a faster or slower rate than data -is received, it is important each side operate (and buffer) independently of -the other. - -## API for Stream Consumers - - - -Almost all Node.js applications, no matter how simple, use streams in some -manner. The following is an example of using streams in a Node.js application -that implements an HTTP server: - -```js -const http = require('http'); - -const server = http.createServer( (req, res) => { - // req is an http.IncomingMessage, which is a Readable Stream - // res is an http.ServerResponse, which is a Writable Stream - - let body = ''; - // Get the data as utf8 strings. - // If an encoding is not set, Buffer objects will be received. - req.setEncoding('utf8'); - - // Readable streams emit 'data' events once a listener is added - req.on('data', (chunk) => { - body += chunk; - }); - - // the end event indicates that the entire body has been received - req.on('end', () => { - try { - const data = JSON.parse(body); - } catch (er) { - // uh oh! bad json! - res.statusCode = 400; - return res.end(`error: ${er.message}`); - } - - // write back something interesting to the user: - res.write(typeof data); - res.end(); - }); -}); - -server.listen(1337); - -// $ curl localhost:1337 -d '{}' -// object -// $ curl localhost:1337 -d '"foo"' -// string -// $ curl localhost:1337 -d 'not json' -// error: Unexpected token o -``` - -[Writable][] streams (such as `res` in the example) expose methods such as -`write()` and `end()` that are used to write data onto the stream. - -[Readable][] streams use the [`EventEmitter`][] API for notifying application -code when data is available to be read off the stream. That available data can -be read from the stream in multiple ways. - -Both [Writable][] and [Readable][] streams use the [`EventEmitter`][] API in -various ways to communicate the current state of the stream. - -[Duplex][] and [Transform][] streams are both [Writable][] and [Readable][]. - -Applications that are either writing data to or consuming data from a stream -are not required to implement the stream interfaces directly and will generally -have no reason to call `require('stream')`. - -Developers wishing to implement new types of streams should refer to the -section [API for Stream Implementers][]. - -### Writable Streams - -Writable streams are an abstraction for a *destination* to which data is -written. - -Examples of [Writable][] streams include: - -* [HTTP requests, on the client][] -* [HTTP responses, on the server][] -* [fs write streams][] -* [zlib streams][zlib] -* [crypto streams][crypto] -* [TCP sockets][] -* [child process stdin][] -* [`process.stdout`][], [`process.stderr`][] - -*Note*: Some of these examples are actually [Duplex][] streams that implement -the [Writable][] interface. - -All [Writable][] streams implement the interface defined by the -`stream.Writable` class. - -While specific instances of [Writable][] streams may differ in various ways, -all Writable streams follow the same fundamental usage pattern as illustrated -in the example below: - -```js -const myStream = getWritableStreamSomehow(); -myStream.write('some data'); -myStream.write('some more data'); -myStream.end('done writing data'); -``` - -#### Class: stream.Writable - - - - -##### Event: 'close' - - -The `'close'` event is emitted when the stream and any of its underlying -resources (a file descriptor, for example) have been closed. The event indicates -that no more events will be emitted, and no further computation will occur. - -Not all Writable streams will emit the `'close'` event. - -##### Event: 'drain' - - -If a call to [`stream.write(chunk)`][stream-write] returns `false`, the -`'drain'` event will be emitted when it is appropriate to resume writing data -to the stream. - -```js -// Write the data to the supplied writable stream one million times. -// Be attentive to back-pressure. -function writeOneMillionTimes(writer, data, encoding, callback) { - let i = 1000000; - write(); - function write() { - var ok = true; - do { - i--; - if (i === 0) { - // last time! - writer.write(data, encoding, callback); - } else { - // see if we should continue, or wait - // don't pass the callback, because we're not done yet. - ok = writer.write(data, encoding); - } - } while (i > 0 && ok); - if (i > 0) { - // had to stop early! - // write some more once it drains - writer.once('drain', write); - } - } -} -``` - -##### Event: 'error' - - -* {Error} - -The `'error'` event is emitted if an error occurred while writing or piping -data. The listener callback is passed a single `Error` argument when called. - -*Note*: The stream is not closed when the `'error'` event is emitted. - -##### Event: 'finish' - - -The `'finish'` event is emitted after the [`stream.end()`][stream-end] method -has been called, and all data has been flushed to the underlying system. - -```js -const writer = getWritableStreamSomehow(); -for (var i = 0; i < 100; i ++) { - writer.write('hello, #${i}!\n'); -} -writer.end('This is the end\n'); -writer.on('finish', () => { - console.error('All writes are now complete.'); -}); -``` - -##### Event: 'pipe' - - -* `src` {stream.Readable} source stream that is piping to this writable - -The `'pipe'` event is emitted when the [`stream.pipe()`][] method is called on -a readable stream, adding this writable to its set of destinations. - -```js -const writer = getWritableStreamSomehow(); -const reader = getReadableStreamSomehow(); -writer.on('pipe', (src) => { - console.error('something is piping into the writer'); - assert.equal(src, reader); -}); -reader.pipe(writer); -``` - -##### Event: 'unpipe' - - -* `src` {[Readable][] Stream} The source stream that - [unpiped][`stream.unpipe()`] this writable - -The `'unpipe'` event is emitted when the [`stream.unpipe()`][] method is called -on a [Readable][] stream, removing this [Writable][] from its set of -destinations. - -```js -const writer = getWritableStreamSomehow(); -const reader = getReadableStreamSomehow(); -writer.on('unpipe', (src) => { - console.error('Something has stopped piping into the writer.'); - assert.equal(src, reader); -}); -reader.pipe(writer); -reader.unpipe(writer); -``` - -##### writable.cork() - - -The `writable.cork()` method forces all written data to be buffered in memory. -The buffered data will be flushed when either the [`stream.uncork()`][] or -[`stream.end()`][stream-end] methods are called. - -The primary intent of `writable.cork()` is to avoid a situation where writing -many small chunks of data to a stream do not cause an backup in the internal -buffer that would have an adverse impact on performance. In such situations, -implementations that implement the `writable._writev()` method can perform -buffered writes in a more optimized manner. - -##### writable.end([chunk][, encoding][, callback]) - - -* `chunk` {String|Buffer|any} Optional data to write. For streams not operating - in object mode, `chunk` must be a string or a `Buffer`. For object mode - streams, `chunk` may be any JavaScript value other than `null`. -* `encoding` {String} The encoding, if `chunk` is a String -* `callback` {Function} Optional callback for when the stream is finished - -Calling the `writable.end()` method signals that no more data will be written -to the [Writable][]. The optional `chunk` and `encoding` arguments allow one -final additional chunk of data to be written immediately before closing the -stream. If provided, the optional `callback` function is attached as a listener -for the [`'finish'`][] event. - -Calling the [`stream.write()`][stream-write] method after calling -[`stream.end()`][stream-end] will raise an error. - -```js -// write 'hello, ' and then end with 'world!' -const file = fs.createWriteStream('example.txt'); -file.write('hello, '); -file.end('world!'); -// writing more now is not allowed! -``` - -##### writable.setDefaultEncoding(encoding) - - -* `encoding` {String} The new default encoding -* Return: `this` - -The `writable.setDefaultEncoding()` method sets the default `encoding` for a -[Writable][] stream. - -##### writable.uncork() - - -The `writable.uncork()` method flushes all data buffered since -[`stream.cork()`][] was called. - -When using `writable.cork()` and `writable.uncork()` to manage the buffering -of writes to a stream, it is recommended that calls to `writable.uncork()` be -deferred using `process.nextTick()`. Doing so allows batching of all -`writable.write()` calls that occur within a given Node.js event loop phase. - -```js -stream.cork(); -stream.write('some '); -stream.write('data '); -process.nextTick(() => stream.uncork()); -``` - -If the `writable.cork()` method is called multiple times on a stream, the same -number of calls to `writable.uncork()` must be called to flush the buffered -data. - -``` -stream.cork(); -stream.write('some '); -stream.cork(); -stream.write('data '); -process.nextTick(() => { - stream.uncork(); - // The data will not be flushed until uncork() is called a second time. - stream.uncork(); -}); -``` - -##### writable.write(chunk[, encoding][, callback]) - - -* `chunk` {String|Buffer} The data to write -* `encoding` {String} The encoding, if `chunk` is a String -* `callback` {Function} Callback for when this chunk of data is flushed -* Returns: {Boolean} `false` if the stream wishes for the calling code to - wait for the `'drain'` event to be emitted before continuing to write - additional data; otherwise `true`. - -The `writable.write()` method writes some data to the stream, and calls the -supplied `callback` once the data has been fully handled. If an error -occurs, the `callback` *may or may not* be called with the error as its -first argument. To reliably detect write errors, add a listener for the -`'error'` event. - -The return value indicates whether the written `chunk` was buffered internally -and the buffer has exceeded the `highWaterMark` configured when the stream was -created. If `false` is returned, further attempts to write data to the stream -should be paused until the `'drain'` event is emitted. - -A Writable stream in object mode will always ignore the `encoding` argument. - -### Readable Streams - -Readable streams are an abstraction for a *source* from which data is -consumed. - -Examples of Readable streams include: - -* [HTTP responses, on the client][http-incoming-message] -* [HTTP requests, on the server][http-incoming-message] -* [fs read streams][] -* [zlib streams][zlib] -* [crypto streams][crypto] -* [TCP sockets][] -* [child process stdout and stderr][] -* [`process.stdin`][] - -All [Readable][] streams implement the interface defined by the -`stream.Readable` class. - -#### Two Modes - -Readable streams effectively operate in one of two modes: flowing and paused. - -When in flowing mode, data is read from the underlying system automatically -and provided to an application as quickly as possible using events via the -[`EventEmitter`][] interface. - -In paused mode, the [`stream.read()`][stream-read] method must be called -explicitly to read chunks of data from the stream. - -All [Readable][] streams begin in paused mode but can be switched to flowing -mode in one of the following ways: - -* Adding a [`'data'`][] event handler. -* Calling the [`stream.resume()`][stream-resume] method. -* Calling the [`stream.pipe()`][] method to send the data to a [Writable][]. - -The Readable can switch back to paused mode using one of the following: - -* If there are no pipe destinations, by calling the - [`stream.pause()`][stream-pause] method. -* If there are pipe destinations, by removing any [`'data'`][] event - handlers, and removing all pipe destinations by calling the - [`stream.unpipe()`][] method. - -The important concept to remember is that a Readable will not generate data -until a mechanism for either consuming or ignoring that data is provided. If -the consuming mechanism is disabled or taken away, the Readable will *attempt* -to stop generating the data. - -*Note*: For backwards compatibility reasons, removing [`'data'`][] event -handlers will **not** automatically pause the stream. Also, if there are piped -destinations, then calling [`stream.pause()`][stream-pause] will not guarantee -that the stream will *remain* paused once those destinations drain and ask for -more data. - -*Note*: If a [Readable][] is switched into flowing mode and there are no -consumers available handle the data, that data will be lost. This can occur, -for instance, when the `readable.resume()` method is called without a listener -attached to the `'data'` event, or when a `'data'` event handler is removed -from the stream. - -#### Three States - -The "two modes" of operation for a Readable stream are a simplified abstraction -for the more complicated internal state management that is happening within the -Readable stream implementation. - -Specifically, at any given point in time, every Readable is in one of three -possible states: - -* `readable._readableState.flowing = null` -* `readable._readableState.flowing = false` -* `readable._readableState.flowing = true` - -When `readable._readableState.flowing` is `null`, no mechanism for consuming the -streams data is provided so the stream will not generate its data. - -Attaching a listener for the `'data'` event, calling the `readable.pipe()` -method, or calling the `readable.resume()` method will switch -`readable._readableState.flowing` to `true`, causing the Readable to begin -actively emitting events as data is generated. - -Calling `readable.pause()`, `readable.unpipe()`, or receiving "back pressure" -will cause the `readable._readableState.flowing` to be set as `false`, -temporarily halting the flowing of events but *not* halting the generation of -data. - -While `readable._readableState.flowing` is `false`, data may be accumulating -within the streams internal buffer. - -#### Choose One - -The Readable stream API evolved across multiple Node.js versions and provides -multiple methods of consuming stream data. In general, developers should choose -*one* of the methods of consuming data and *should never* use multiple methods -to consume data from a single stream. - -Use of the `readable.pipe()` method is recommended for most users as it has been -implemented to provide the easiest way of consuming stream data. Developers that -require more fine-grained control over the transfer and generation of data can -use the [`EventEmitter`][] and `readable.pause()`/`readable.resume()` APIs. - -#### Class: stream.Readable - - - - -##### Event: 'close' - - -The `'close'` event is emitted when the stream and any of its underlying -resources (a file descriptor, for example) have been closed. The event indicates -that no more events will be emitted, and no further computation will occur. - -Not all [Readable][] streams will emit the `'close'` event. - -##### Event: 'data' - - -* `chunk` {Buffer|String|any} The chunk of data. For streams that are not - operating in object mode, the chunk will be either a string or `Buffer`. - For streams that are in object mode, the chunk can be any JavaScript value - other than `null`. - -The `'data'` event is emitted whenever the stream is relinquishing ownership of -a chunk of data to a consumer. This may occur whenever the stream is switched -in flowing mode by calling `readable.pipe()`, `readable.resume()`, or by -attaching a listener callback to the `'data'` event. The `'data'` event will -also be emitted whenever the `readable.read()` method is called and a chunk of -data is available to be returned. - -Attaching a `'data'` event listener to a stream that has not been explicitly -paused will switch the stream into flowing mode. Data will then be passed as -soon as it is available. - -The listener callback will be passed the chunk of data as a string if a default -encoding has been specified for the stream using the -`readable.setEncoding()` method; otherwise the data will be passed as a -`Buffer`. - -```js -const readable = getReadableStreamSomehow(); -readable.on('data', (chunk) => { - console.log(`Received ${chunk.length} bytes of data.`); -}); -``` - -##### Event: 'end' - - -The `'end'` event is emitted when there is no more data to be consumed from -the stream. - -*Note*: The `'end'` event **will not be emitted** unless the data is -completely consumed. This can be accomplished by switching the stream into -flowing mode, or by calling [`stream.read()`][stream-read] repeatedly until -all data has been consumed. - -```js -const readable = getReadableStreamSomehow(); -readable.on('data', (chunk) => { - console.log(`Received ${chunk.length} bytes of data.`); -}); -readable.on('end', () => { - console.log('There will be no more data.'); -}); -``` - -##### Event: 'error' - - -* {Error} - -The `'error'` event may be emitted by a Readable implementation at any time. -Typically, this may occur if the underlying stream in unable to generate data -due to an underlying internal failure, or when a stream implementation attempts -to push an invalid chunk of data. - -The listener callback will be passed a single `Error` object. - -##### Event: 'readable' - - -The `'readable'` event is emitted when there is data available to be read from -the stream. In some cases, attaching a listener for the `'readable'` event will -cause some amount of data to be read into an internal buffer. - -```javascript -const readable = getReadableStreamSomehow(); -readable.on('readable', () => { - // there is some data to read now -}); -``` -The `'readable'` event will also be emitted once the end of the stream data -has been reached but before the `'end'` event is emitted. - -Effectively, the `'readable'` event indicates that the stream has new -information: either new data is available or the end of the stream has been -reached. In the former case, [`stream.read()`][stream-read] will return the -available data. In the latter case, [`stream.read()`][stream-read] will return -`null`. For instance, in the following example, `foo.txt` is an empty file: - -```js -const fs = require('fs'); -const rr = fs.createReadStream('foo.txt'); -rr.on('readable', () => { - console.log('readable:', rr.read()); -}); -rr.on('end', () => { - console.log('end'); -}); -``` - -The output of running this script is: - -``` -$ node test.js -readable: null -end -``` - -*Note*: In general, the `readable.pipe()` and `'data'` event mechanisms are -preferred over the use of the `'readable'` event. - -##### readable.isPaused() - - -* Return: {Boolean} - -The `readable.isPaused()` method returns the current operating state of the -Readable. This is used primarily by the mechanism that underlies the -`readable.pipe()` method. In most typical cases, there will be no reason to -use this method directly. - -```js -const readable = new stream.Readable - -readable.isPaused() // === false -readable.pause() -readable.isPaused() // === true -readable.resume() -readable.isPaused() // === false -``` - -##### readable.pause() - - -* Return: `this` - -The `readable.pause()` method will cause a stream in flowing mode to stop -emitting [`'data'`][] events, switching out of flowing mode. Any data that -becomes available will remain in the internal buffer. - -```js -const readable = getReadableStreamSomehow(); -readable.on('data', (chunk) => { - console.log(`Received ${chunk.length} bytes of data.`); - readable.pause(); - console.log('There will be no additional data for 1 second.'); - setTimeout(() => { - console.log('Now data will start flowing again.'); - readable.resume(); - }, 1000); -}); -``` - -##### readable.pipe(destination[, options]) - - -* `destination` {stream.Writable} The destination for writing data -* `options` {Object} Pipe options - * `end` {Boolean} End the writer when the reader ends. Defaults to `true`. - -The `readable.pipe()` method attaches a [Writable][] stream to the `readable`, -causing it to switch automatically into flowing mode and push all of its data -to the attached [Writable][]. The flow of data will be automatically managed so -that the destination Writable stream is not overwhelmed by a faster Readable -stream. - -The following example pipes all of the data from the `readable` into a file -named `file.txt`: - -```js -const readable = getReadableStreamSomehow(); -const writable = fs.createWriteStream('file.txt'); -// All the data from readable goes into 'file.txt' -readable.pipe(writable); -``` -It is possible to attach multiple Writable streams to a single Readable stream. - -The `readable.pipe()` method returns a reference to the *destination* stream -making it possible to set up chains of piped streams: - -```js -const r = fs.createReadStream('file.txt'); -const z = zlib.createGzip(); -const w = fs.createWriteStream('file.txt.gz'); -r.pipe(z).pipe(w); -``` - -By default, [`stream.end()`][stream-end] is called on the destination Writable -stream when the source Readable stream emits [`'end'`][], so that the -destination is no longer writable. To disable this default behavior, the `end` -option can be passed as `false`, causing the destination stream to remain open, -as illustrated in the following example: - -```js -reader.pipe(writer, { end: false }); -reader.on('end', () => { - writer.end('Goodbye\n'); -}); -``` - -One important caveat is that if the Readable stream emits an error during -processing, the Writable destination *is not closed* automatically. If an -error occurs, it will be necessary to *manually* close each stream in order -to prevent memory leaks. - -*Note*: The [`process.stderr`][] and [`process.stdout`][] Writable streams are -never closed until the Node.js process exits, regardless of the specified -options. - -##### readable.read([size]) - - -* `size` {Number} Optional argument to specify how much data to read. -* Return {String|Buffer|Null} - -The `readable.read()` method pulls some data out of the internal buffer and -returns it. If no data available to be read, `null` is returned. By default, -the data will be returned as a `Buffer` object unless an encoding has been -specified using the `readable.setEncoding()` method or the stream is operating -in object mode. - -The optional `size` argument specifies a specific number of bytes to read. If -`size` bytes are not available to be read, `null` will be returned *unless* -the stream has ended, in which case all of the data remaining in the internal -buffer will be returned (*even if it exceeds `size` bytes*). - -If the `size` argument is not specified, all of the data contained in the -internal buffer will be returned. - -The `readable.read()` method should only be called on Readable streams operating -in paused mode. In flowing mode, `readable.read()` is called automatically until -the internal buffer is fully drained. - -```js -const readable = getReadableStreamSomehow(); -readable.on('readable', () => { - var chunk; - while (null !== (chunk = readable.read())) { - console.log(`Received ${chunk.length} bytes of data.`); - } -}); -``` - -In general, it is recommended that developers avoid the use of the `'readable'` -event and the `readable.read()` method in favor of using either -`readable.pipe()` or the `'data'` event. - -A Readable stream in object mode will always return a single item from -a call to [`readable.read(size)`][stream-read], regardless of the value of the -`size` argument. - -*Note:* If the `readable.read()` method returns a chunk of data, a `'data'` -event will also be emitted. - -*Note*: Calling [`stream.read([size])`][stream-read] after the [`'end'`][] -event has been emitted will return `null`. No runtime error will be raised. - -##### readable.resume() - - -* Return: `this` - -The `readable.resume()` method causes an explicitly paused Readable stream to -resume emitting [`'data'`][] events, switching the stream into flowing mode. - -The `readable.resume()` method can be used to fully consume the data from a -stream without actually processing any of that data as illustrated in the -following example: - -```js -getReadableStreamSomehow() - .resume() - .on('end', () => { - console.log('Reached the end, but did not read anything.'); - }); -``` - -##### readable.setEncoding(encoding) - - -* `encoding` {String} The encoding to use. -* Return: `this` - -The `readable.setEncoding()` method sets the default character encoding for -data read from the Readable stream. - -Setting an encoding causes the stream data -to be returned as string of the specified encoding rather than as `Buffer` -objects. For instance, calling `readable.setEncoding('utf8')` will cause the -output data will be interpreted as UTF-8 data, and passed as strings. Calling -`readable.setEncoding('hex')` will cause the data to be encoded in hexadecimal -string format. - -The Readable stream will properly handle multi-byte characters delivered through -the stream that would otherwise become improperly decoded if simply pulled from -the stream as `Buffer` objects. - -Encoding can be disabled by calling `readable.setEncoding(null)`. This approach -is useful when working with binary data or with large multi-byte strings spread -out over multiple chunks. - -```js -const readable = getReadableStreamSomehow(); -readable.setEncoding('utf8'); -readable.on('data', (chunk) => { - assert.equal(typeof chunk, 'string'); - console.log('got %d characters of string data', chunk.length); -}); -``` - -##### readable.unpipe([destination]) - - -* `destination` {stream.Writable} Optional specific stream to unpipe - -The `readable.unpipe()` method detaches a Writable stream previously attached -using the [`stream.pipe()`][] method. - -If the `destination` is not specified, then *all* pipes are detached. - -If the `destination` is specified, but no pipe is set up for it, then -the method does nothing. - -```js -const readable = getReadableStreamSomehow(); -const writable = fs.createWriteStream('file.txt'); -// All the data from readable goes into 'file.txt', -// but only for the first second -readable.pipe(writable); -setTimeout(() => { - console.log('Stop writing to file.txt'); - readable.unpipe(writable); - console.log('Manually close the file stream'); - writable.end(); -}, 1000); -``` - -##### readable.unshift(chunk) - - -* `chunk` {Buffer|String} Chunk of data to unshift onto the read queue - -The `readable.unshift()` method pushes a chunk of data back into the internal -buffer. This is useful in certain situations where a stream is being consumed by -code that needs to "un-consume" some amount of data that it has optimistically -pulled out of the source, so that the data can be passed on to some other party. - -*Note*: The `stream.unshift(chunk)` method cannot be called after the -[`'end'`][] event has been emitted or a runtime error will be thrown. - -Developers using `stream.unshift()` often should consider switching to -use of a [Transform][] stream instead. See the [API for Stream Implementers][] -section for more information. - -```js -// Pull off a header delimited by \n\n -// use unshift() if we get too much -// Call the callback with (error, header, stream) -const StringDecoder = require('string_decoder').StringDecoder; -function parseHeader(stream, callback) { - stream.on('error', callback); - stream.on('readable', onReadable); - const decoder = new StringDecoder('utf8'); - var header = ''; - function onReadable() { - var chunk; - while (null !== (chunk = stream.read())) { - var str = decoder.write(chunk); - if (str.match(/\n\n/)) { - // found the header boundary - var split = str.split(/\n\n/); - header += split.shift(); - const remaining = split.join('\n\n'); - const buf = Buffer.from(remaining, 'utf8'); - if (buf.length) - stream.unshift(buf); - stream.removeListener('error', callback); - stream.removeListener('readable', onReadable); - // now the body of the message can be read from the stream. - callback(null, header, stream); - } else { - // still reading the header. - header += str; - } - } - } -} -``` - -*Note*: Unlike [`stream.push(chunk)`][stream-push], `stream.unshift(chunk)` -will not end the reading process by resetting the internal reading state of the -stream. This can cause unexpected results if `readable.unshift()` is called -during a read (i.e. from within a [`stream._read()`][stream-_read] -implementation on a custom stream). Following the call to `readable.unshift()` -with an immediate [`stream.push('')`][stream-push] will reset the reading state -appropriately, however it is best to simply avoid calling `readable.unshift()` -while in the process of performing a read. - -##### readable.wrap(stream) - - -* `stream` {Stream} An "old style" readable stream - -Versions of Node.js prior to v0.10 had streams that did not implement the -entire `stream` module API as it is currently defined. (See [Compatibility][] -for more information.) - -When using an older Node.js library that emits [`'data'`][] events and has a -[`stream.pause()`][stream-pause] method that is advisory only, the -`readable.wrap()` method can be used to create a [Readable][] stream that uses -the old stream as its data source. - -It will rarely be necessary to use `readable.wrap()` but the method has been -provided as a convenience for interacting with older Node.js applications and -libraries. - -For example: - -```js -const OldReader = require('./old-api-module.js').OldReader; -const Readable = require('stream').Readable; -const oreader = new OldReader; -const myReader = new Readable().wrap(oreader); - -myReader.on('readable', () => { - myReader.read(); // etc. -}); -``` - -### Duplex and Transform Streams - -#### Class: stream.Duplex - - - - -Duplex streams are streams that implement both the [Readable][] and -[Writable][] interfaces. - -Examples of Duplex streams include: - -* [TCP sockets][] -* [zlib streams][zlib] -* [crypto streams][crypto] - -#### Class: stream.Transform - - - - -Transform streams are [Duplex][] streams where the output is in some way -related to the input. Like all [Duplex][] streams, Transform streams -implement both the [Readable][] and [Writable][] interfaces. - -Examples of Transform streams include: - -* [zlib streams][zlib] -* [crypto streams][crypto] - - -## API for Stream Implementers - - - -The `stream` module API has been designed to make it possible to easily -implement streams using JavaScript's prototypical inheritance model. - -First, a stream developer would declare a new JavaScript class that extends one -of the four basic stream classes (`stream.Writable`, `stream.Readable`, -`stream.Duplex`, or `stream.Transform`), making sure the call the appropriate -parent class constructor: - -```js -const Writable = require('stream').Writable; - -class MyWritable extends Writable { - constructor(options) { - super(options); - } -} -``` - -The new stream class must then implement one or more specific methods, depending -on the type of stream being created, as detailed in the chart below: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    Use-case

    -
    -

    Class

    -
    -

    Method(s) to implement

    -
    -

    Reading only

    -
    -

    [Readable](#stream_class_stream_readable)

    -
    -

    [_read][stream-_read]

    -
    -

    Writing only

    -
    -

    [Writable](#stream_class_stream_writable)

    -
    -

    [_write][stream-_write], [_writev][stream-_writev]

    -
    -

    Reading and writing

    -
    -

    [Duplex](#stream_class_stream_duplex)

    -
    -

    [_read][stream-_read], [_write][stream-_write], [_writev][stream-_writev]

    -
    -

    Operate on written data, then read the result

    -
    -

    [Transform](#stream_class_stream_transform)

    -
    -

    [_transform][stream-_transform], [_flush][stream-_flush]

    -
    - -*Note*: The implementation code for a stream should *never* call the "public" -methods of a stream that are intended for use by consumers (as described in -the [API for Stream Consumers][] section). Doing so may lead to adverse -side effects in application code consuming the stream. - -### Simplified Construction - -For many simple cases, it is possible to construct a stream without relying on -inheritance. This can be accomplished by directly creating instances of the -`stream.Writable`, `stream.Readable`, `stream.Duplex` or `stream.Transform` -objects and passing appropriate methods as constructor options. - -For example: - -```js -const Writable = require('stream').Writable; - -const myWritable = new Writable({ - write(chunk, encoding, callback) { - // ... - } -}); -``` - -### Implementing a Writable Stream - -The `stream.Writable` class is extended to implement a [Writable][] stream. - -Custom Writable streams *must* call the `new stream.Writable([options])` -constructor and implement the `writable._write()` method. The -`writable._writev()` method *may* also be implemented. - -#### Constructor: new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when - [`stream.write()`][stream-write] starts returning `false`. Defaults to - `16384` (16kb), or `16` for `objectMode` streams. - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to [`stream._write()`][stream-_write]. - Defaults to `true` - * `objectMode` {Boolean} Whether or not the - [`stream.write(anyObj)`][stream-write] is a valid operation. When set, - it becomes possible to write JavaScript values other than string or - `Buffer` if supported by the stream implementation. Defaults to `false` - * `write` {Function} Implementation for the - [`stream._write()`][stream-_write] method. - * `writev` {Function} Implementation for the - [`stream._writev()`][stream-_writev] method. - -For example: - -```js -const Writable = require('stream').Writable; - -class MyWritable extends Writable { - constructor(options) { - // Calls the stream.Writable() constructor - super(options); - } -} -``` - -Or, when using pre-ES6 style constructors: - -```js -const Writable = require('stream').Writable; -const util = require('util'); - -function MyWritable(options) { - if (!(this instanceof MyWritable)) - return new MyWritable(options); - Writable.call(this, options); -} -util.inherits(MyWritable, Writable); -``` - -Or, using the Simplified Constructor approach: - -```js -const Writable = require('stream').Writable; - -const myWritable = new Writable({ - write(chunk, encoding, callback) { - // ... - }, - writev(chunks, callback) { - // ... - } -}); -``` - -#### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer|String} The chunk to be written. Will **always** - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then `encoding` is the - character encoding of that string. If chunk is a `Buffer`, or if the - stream is operating in object mode, `encoding` may be ignored. -* `callback` {Function} Call this function (optionally with an error - argument) when processing is complete for the supplied chunk. - -All Writable stream implementations must provide a -[`writable._write()`][stream-_write] method to send data to the underlying -resource. - -*Note*: [Transform][] streams provide their own implementation of the -[`writable._write()`][stream-_write]. - -*Note*: **This function MUST NOT be called by application code directly.** It -should be implemented by child classes, and called only by the internal Writable -class methods only. - -The `callback` method must be called to signal either that the write completed -successfully or failed with an error. The first argument passed to the -`callback` must be the `Error` object if the call failed or `null` if the -write succeeded. - -It is important to note that all calls to `writable.write()` that occur between -the time `writable._write()` is called and the `callback` is called will cause -the written data to be buffered. Once the `callback` is invoked, the stream will -emit a `'drain'` event. If a stream implementation is capable of processing -multiple chunks of data at once, the `writable._writev()` method should be -implemented. - -If the `decodeStrings` property is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the character encoding of the string. This is to support -implementations that have an optimized handling for certain string -data encodings. If the `decodeStrings` property is explicitly set to `false`, -the `encoding` argument can be safely ignored, and `chunk` will always be a -`Buffer`. - -The `writable._write()` method is prefixed with an underscore because it is -internal to the class that defines it, and should never be called directly by -user programs. - -#### writable.\_writev(chunks, callback) - -* `chunks` {Array} The chunks to be written. Each chunk has following - format: `{ chunk: ..., encoding: ... }`. -* `callback` {Function} A callback function (optionally with an error - argument) to be invoked when processing is complete for the supplied chunks. - -*Note*: **This function MUST NOT be called by application code directly.** It -should be implemented by child classes, and called only by the internal Writable -class methods only. - -The `writable._writev()` method may be implemented in addition to -`writable._write()` in stream implementations that are capable of processing -multiple chunks of data at once. If implemented, the method will be called with -all chunks of data currently buffered in the write queue. - -The `writable._writev()` method is prefixed with an underscore because it is -internal to the class that defines it, and should never be called directly by -user programs. - -#### Errors While Writing - -It is recommended that errors occurring during the processing of the -`writable._write()` and `writable._writev()` methods are reported by invoking -the callback and passing the error as the first argument. This will cause an -`'error'` event to be emitted by the Writable. Throwing an Error from within -`writable._write()` can result in expected and inconsistent behavior depending -on how the stream is being used. Using the callback ensures consistent and -predictable handling of errors. - -```js -const Writable = require('stream').Writable; - -const myWritable = new Writable({ - write(chunk, encoding, callback) { - if (chunk.toString().indexOf('a') >= 0) { - callback(new Error('chunk is invalid')); - } else { - callback(); - } - } -}); -``` - -#### An Example Writable Stream - -The following illustrates a rather simplistic (and somewhat pointless) custom -Writable stream implementation. While this specific Writable stream instance -is not of any real particular usefulness, the example illustrates each of the -required elements of a custom [Writable][] stream instance: - -```js -const Writable = require('stream').Writable; - -class MyWritable extends Writable { - constructor(options) { - super(options); - } - - _write(chunk, encoding, callback) { - if (chunk.toString().indexOf('a') >= 0) { - callback(new Error('chunk is invalid')); - } else { - callback(); - } - } -} -``` - -### Implementing a Readable Stream - -The `stream.Readable` class is extended to implement a [Readable][] stream. - -Custom Readable streams *must* call the `new stream.Readable([options])` -constructor and implement the `readable._read()` method. - -#### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Defaults to `16384` (16kb), or `16` for `objectMode` streams - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Defaults to `null` - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that [`stream.read(n)`][stream-read] returns - a single value instead of a Buffer of size n. Defaults to `false` - * `read` {Function} Implementation for the [`stream._read()`][stream-_read] - method. - -For example: - -```js -const Readable = require('stream').Readable; - -class MyReadable extends Readable { - constructor(options) { - // Calls the stream.Readable(options) constructor - super(options); - } -} -``` - -Or, when using pre-ES6 style constructors: - -```js -const Readable = require('stream').Readable; -const util = require('util'); - -function MyReadable(options) { - if (!(this instanceof MyReadable)) - return new MyReadable(options); - Readable.call(this, options); -} -util.inherits(MyReadable, Readable); -``` - -Or, using the Simplified Constructor approach: - -```js -const Readable = require('stream').Readable; - -const myReadable = new Readable({ - read(size) { - // ... - } -}); -``` - -#### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -*Note*: **This function MUST NOT be called by application code directly.** It -should be implemented by child classes, and called only by the internal Readable -class methods only. - -All Readable stream implementations must provide an implementation of the -`readable._read()` method to fetch data from the underlying resource. - -When `readable._read()` is called, if data is available from the resource, the -implementation should begin pushing that data into the read queue using the -[`this.push(dataChunk)`][stream-push] method. `_read()` should continue reading -from the resource and pushing data until `readable.push()` returns `false`. Only -when `_read()` is called again after it has stopped should it resume pushing -additional data onto the queue. - -*Note*: Once the `readable._read()` method has been called, it will not be -called again until the [`readable.push()`][stream-push] method is called. - -The `size` argument is advisory. For implementations where a "read" is a -single operation that returns data can use the `size` argument to determine how -much data to fetch. Other implementations may ignore this argument and simply -provide data whenever it becomes available. There is no need to "wait" until -`size` bytes are available before calling [`stream.push(chunk)`][stream-push]. - -The `readable._read()` method is prefixed with an underscore because it is -internal to the class that defines it, and should never be called directly by -user programs. - -#### readable.push(chunk[, encoding]) - -* `chunk` {Buffer|Null|String} Chunk of data to push into the read queue -* `encoding` {String} Encoding of String chunks. Must be a valid - Buffer encoding, such as `'utf8'` or `'ascii'` -* Returns {Boolean} `true` if additional chunks of data may continued to be - pushed; `false` otherwise. - -When `chunk` is a `Buffer` or `string`, the `chunk` of data will be added to the -internal queue for users of the stream to consume. Passing `chunk` as `null` -signals the end of the stream (EOF), after which no more data can be written. - -When the Readable is operating in paused mode, the data added with -`readable.push()` can be read out by calling the -[`readable.read()`][stream-read] method when the [`'readable'`][] event is -emitted. - -When the Readable is operating in flowing mode, the data added with -`readable.push()` will be delivered by emitting a `'data'` event. - -The `readable.push()` method is designed to be as flexible as possible. For -example, when wrapping a lower-level source that provides some form of -pause/resume mechanism, and a data callback, the low-level source can be wrapped -by the custom Readable instance as illustrated in the following example: - -```js -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -class SourceWrapper extends Readable { - constructor(options) { - super(options); - - this._source = getLowlevelSourceObject(); - - // Every time there's data, push it into the internal buffer. - this._source.ondata = (chunk) => { - // if push() returns false, then stop reading from source - if (!this.push(chunk)) - this._source.readStop(); - }; - - // When the source ends, push the EOF-signaling `null` chunk - this._source.onend = () => { - this.push(null); - }; - } - // _read will be called when the stream wants to pull more data in - // the advisory size argument is ignored in this case. - _read(size) { - this._source.readStart(); - } -} -``` -*Note*: The `readable.push()` method is intended be called only by Readable -Implementers, and only from within the `readable._read()` method. - -#### Errors While Reading - -It is recommended that errors occurring during the processing of the -`readable._read()` method are emitted using the `'error'` event rather than -being thrown. Throwing an Error from within `readable._read()` can result in -expected and inconsistent behavior depending on whether the stream is operating -in flowing or paused mode. Using the `'error'` event ensures consistent and -predictable handling of errors. - -```js -const Readable = require('stream').Readable; - -const myReadable = new Readable({ - read(size) { - if (checkSomeErrorCondition()) { - process.nextTick(() => this.emit('error', err)); - return; - } - // do some work - } -}); -``` - -#### An Example Counting Stream - - - -The following is a basic example of a Readable stream that emits the numerals -from 1 to 1,000,000 in ascending order, and then ends. - -```js -const Readable = require('stream').Readable; - -class Counter extends Readable { - constructor(opt) { - super(opt); - this._max = 1000000; - this._index = 1; - } - - _read() { - var i = this._index++; - if (i > this._max) - this.push(null); - else { - var str = '' + i; - var buf = Buffer.from(str, 'ascii'); - this.push(buf); - } - } -} -``` - -### Implementing a Duplex Stream - -A [Duplex][] stream is one that implements both [Readable][] and [Writable][], -such as a TCP socket connection. - -Because Javascript does not have support for multiple inheritance, the -`stream.Duplex` class is extended to implement a [Duplex][] stream (as opposed -to extending the `stream.Readable` *and* `stream.Writable` classes). - -*Note*: The `stream.Duplex` class prototypically inherits from `stream.Readable` -and parasitically from `stream.Writable`. - -Custom Duplex streams *must* call the `new stream.Duplex([options])` -constructor and implement *both* the `readable._read()` and -`writable._write()` methods. - -#### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Defaults to `true`. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - * `readableObjectMode` {Boolean} Defaults to `false`. Sets `objectMode` - for readable side of the stream. Has no effect if `objectMode` - is `true`. - * `writableObjectMode` {Boolean} Defaults to `false`. Sets `objectMode` - for writable side of the stream. Has no effect if `objectMode` - is `true`. - -For example: - -```js -const Duplex = require('stream').Duplex; - -class MyDuplex extends Duplex { - constructor(options) { - super(options); - } -} -``` - -Or, when using pre-ES6 style constructors: - -```js -const Duplex = require('stream').Duplex; -const util = require('util'); - -function MyDuplex(options) { - if (!(this instanceof MyDuplex)) - return new MyDuplex(options); - Duplex.call(this, options); -} -util.inherits(MyDuplex, Duplex); -``` - -Or, using the Simplified Constructor approach: - -```js -const Duplex = require('stream').Duplex; - -const myDuplex = new Duplex({ - read(size) { - // ... - }, - write(chunk, encoding, callback) { - // ... - } -}); -``` - -#### An Example Duplex Stream - -The following illustrates a simple example of a Duplex stream that wraps a -hypothetical lower-level source object to which data can be written, and -from which data can be read, albeit using an API that is not compatible with -Node.js streams. -The following illustrates a simple example of a Duplex stream that buffers -incoming written data via the [Writable][] interface that is read back out -via the [Readable][] interface. - -```js -const Duplex = require('stream').Duplex; -const kSource = Symbol('source'); - -class MyDuplex extends Duplex { - constructor(source, options) { - super(options); - this[kSource] = source; - } - - _write(chunk, encoding, callback) { - // The underlying source only deals with strings - if (Buffer.isBuffer(chunk)) - chunk = chunk.toString(encoding); - this[kSource].writeSomeData(chunk, encoding); - callback(); - } - - _read(size) { - this[kSource].fetchSomeData(size, (data, encoding) => { - this.push(Buffer.from(data, encoding)); - }); - } -} -``` - -The most important aspect of a Duplex stream is that the Readable and Writable -sides operate independently of one another despite co-existing within a single -object instance. - -#### Object Mode Duplex Streams - -For Duplex streams, `objectMode` can be set exclusively for either the Readable -or Writable side using the `readableObjectMode` and `writableObjectMode` options -respectively. - -In the following example, for instance, a new Transform stream (which is a -type of [Duplex][] stream) is created that has an object mode Writable side -that accepts JavaScript numbers that are converted to hexidecimal strings on -the Readable side. - -```js -const Transform = require('stream').Transform; - -// All Transform streams are also Duplex Streams -const myTransform = new Transform({ - writableObjectMode: true, - - transform(chunk, encoding, callback) { - // Coerce the chunk to a number if necessary - chunk |= 0; - - // Transform the chunk into something else. - const data = chunk.toString(16); - - // Push the data onto the readable queue. - callback(null, '0'.repeat(data.length % 2) + data); - } -}); - -myTransform.setEncoding('ascii'); -myTransform.on('data', (chunk) => console.log(chunk)); - -myTransform.write(1); - // Prints: 01 -myTransform.write(10); - // Prints: 0a -myTransform.write(100); - // Prints: 64 -``` - -### Implementing a Transform Stream - -A [Transform][] stream is a [Duplex][] stream where the output is computed -in some way from the input. Examples include [zlib][] streams or [crypto][] -streams that compress, encrypt, or decrypt data. - -*Note*: There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A `zlib` stream will produce output -that is either much smaller or much larger than its input. - -The `stream.Transform` class is extended to implement a [Transform][] stream. - -The `stream.Transform` class prototypically inherits from `stream.Duplex` and -implements its own versions of the `writable._write()` and `readable._read()` -methods. Custom Transform implementations *must* implement the -[`transform._transform()`][stream-_transform] method and *may* also implement -the [`transform._flush()`][stream-_flush] method. - -*Note*: Care must be taken when using Transform streams in that data written -to the stream can cause the Writable side of the stream to become paused if -the output on the Readable side is not consumed. - -#### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `transform` {Function} Implementation for the - [`stream._transform()`][stream-_transform] method. - * `flush` {Function} Implementation for the [`stream._flush()`][stream-_flush] - method. - -For example: - -```js -const Transform = require('stream').Transform; - -class MyTransform extends Transform { - constructor(options) { - super(options); - } -} -``` - -Or, when using pre-ES6 style constructors: - -```js -const Transform = require('stream').Transform; -const util = require('util'); - -function MyTransform(options) { - if (!(this instanceof MyTransform)) - return new MyTransform(options); - Transform.call(this, options); -} -util.inherits(MyTransform, Transform); -``` - -Or, using the Simplified Constructor approach: - -```js -const Transform = require('stream').Transform; - -const myTransform = new Transform({ - transform(chunk, encoding, callback) { - // ... - } -}); -``` - -#### Events: 'finish' and 'end' - -The [`'finish'`][] and [`'end'`][] events are from the `stream.Writable` -and `stream.Readable` classes, respectively. The `'finish'` event is emitted -after [`stream.end()`][stream-end] is called and all chunks have been processed -by [`stream._transform()`][stream-_transform]. The `'end'` event is emitted -after all data has been output, which occurs after the callback in -[`transform._flush()`][stream-_flush] has been called. - -#### transform.\_flush(callback) - -* `callback` {Function} A callback function (optionally with an error - argument) to be called when remaining data has been flushed. - -*Note*: **This function MUST NOT be called by application code directly.** It -should be implemented by child classes, and called only by the internal Readable -class methods only. - -In some cases, a transform operation may need to emit an additional bit of -data at the end of the stream. For example, a `zlib` compression stream will -store an amount of internal state used to optimally compress the output. When -the stream ends, however, that additional data needs to be flushed so that the -compressed data will be complete. - -Custom [Transform][] implementations *may* implement the `transform._flush()` -method. This will be called when there is no more written data to be consumed, -but before the [`'end'`][] event is emitted signaling the end of the -[Readable][] stream. - -Within the `transform._flush()` implementation, the `readable.push()` method -may be called zero or more times, as appropriate. The `callback` function must -be called when the flush operation is complete. - -The `transform._flush()` method is prefixed with an underscore because it is -internal to the class that defines it, and should never be called directly by -user programs. - -#### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer|String} The chunk to be transformed. Will **always** - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. If chunk is a buffer, then this is the special - value - 'buffer', ignore it in this case. -* `callback` {Function} A callback function (optionally with an error - argument and data) to be called after the supplied `chunk` has been - processed. - -*Note*: **This function MUST NOT be called by application code directly.** It -should be implemented by child classes, and called only by the internal Readable -class methods only. - -All Transform stream implementations must provide a `_transform()` -method to accept input and produce output. The `transform._transform()` -implementation handles the bytes being written, computes an output, then passes -that output off to the readable portion using the `readable.push()` method. - -The `transform.push()` method may be called zero or more times to generate -output from a single input chunk, depending on how much is to be output -as a result of the chunk. - -It is possible that no output is generated from any given chunk of input data. - -The `callback` function must be called only when the current chunk is completely -consumed. The first argument passed to the `callback` must be an `Error` object -if an error occurred while processing the input or `null` otherwise. If a second -argument is passed to the `callback`, it will be forwarded on to the -`readable.push()` method. In other words the following are equivalent: - -```js -transform.prototype._transform = function (data, encoding, callback) { - this.push(data); - callback(); -}; - -transform.prototype._transform = function (data, encoding, callback) { - callback(null, data); -}; -``` - -The `transform._transform()` method is prefixed with an underscore because it -is internal to the class that defines it, and should never be called directly by -user programs. - -#### Class: stream.PassThrough - -The `stream.PassThrough` class is a trivial implementation of a [Transform][] -stream that simply passes the input bytes across to the output. Its purpose is -primarily for examples and testing, but there are some use cases where -`stream.PassThrough` is useful as a building block for novel sorts of streams. - -## Additional Notes - - - -### Compatibility with Older Node.js Versions - - - -In versions of Node.js prior to v0.10, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for calls the [`stream.read()`][stream-read] method, - [`'data'`][] events would begin emitting immediately. Applications that - would need to perform some amount of work to decide how to handle data - were required to store read data into buffers so the data would not be lost. -* The [`stream.pause()`][stream-pause] method was advisory, rather than - guaranteed. This meant that it was still necessary to be prepared to receive - [`'data'`][] events *even when the stream was in a paused state*. - -In Node.js v0.10, the [Readable][] class was added. For backwards compatibility -with older Node.js programs, Readable streams switch into "flowing mode" when a -[`'data'`][] event handler is added, or when the -[`stream.resume()`][stream-resume] method is called. The effect is that, even -when not using the new [`stream.read()`][stream-read] method and -[`'readable'`][] event, it is no longer necessary to worry about losing -[`'data'`][] chunks. - -While most applications will continue to function normally, this introduces an -edge case in the following conditions: - -* No [`'data'`][] event listener is added. -* The [`stream.resume()`][stream-resume] method is never called. -* The stream is not piped to any writable destination. - -For example, consider the following code: - -```js -// WARNING! BROKEN! -net.createServer((socket) => { - - // we add an 'end' method, but never consume the data - socket.on('end', () => { - // It will never get here. - socket.end('The message was received but was not processed.\n'); - }); - -}).listen(1337); -``` - -In versions of Node.js prior to v0.10, the incoming message data would be -simply discarded. However, in Node.js v0.10 and beyond, the socket remains -paused forever. - -The workaround in this situation is to call the -[`stream.resume()`][stream-resume] method to begin the flow of data: - -```js -// Workaround -net.createServer((socket) => { - - socket.on('end', () => { - socket.end('The message was received but was not processed.\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into flowing mode, -pre-v0.10 style streams can be wrapped in a Readable class using the -[`readable.wrap()`][`stream.wrap()`] method. - - -### `readable.read(0)` - -There are some cases where it is necessary to trigger a refresh of the -underlying readable stream mechanisms, without actually consuming any -data. In such cases, it is possible to call `readable.read(0)`, which will -always return `null`. - -If the internal read buffer is below the `highWaterMark`, and the -stream is not currently reading, then calling `stream.read(0)` will trigger -a low-level [`stream._read()`][stream-_read] call. - -While most applications will almost never need to do this, there are -situations within Node.js where this is done, particularly in the -Readable stream class internals. - -### `readable.push('')` - -Use of `readable.push('')` is not recommended. - -Pushing a zero-byte string or `Buffer` to a stream that is not in object mode -has an interesting side effect. Because it *is* a call to -[`readable.push()`][stream-push], the call will end the reading process. -However, because the argument is an empty string, no data is added to the -readable buffer so there is nothing for a user to consume. - -[`'data'`]: #stream_event_data -[`'drain'`]: #stream_event_drain -[`'end'`]: #stream_event_end -[`'finish'`]: #stream_event_finish -[`'readable'`]: #stream_event_readable -[`buf.toString(encoding)`]: https://nodejs.org/docs/v6.3.1/api/buffer.html#buffer_buf_tostring_encoding_start_end -[`EventEmitter`]: https://nodejs.org/docs/v6.3.1/api/events.html#events_class_eventemitter -[`process.stderr`]: https://nodejs.org/docs/v6.3.1/api/process.html#process_process_stderr -[`process.stdin`]: https://nodejs.org/docs/v6.3.1/api/process.html#process_process_stdin -[`process.stdout`]: https://nodejs.org/docs/v6.3.1/api/process.html#process_process_stdout -[`stream.cork()`]: #stream_writable_cork -[`stream.pipe()`]: #stream_readable_pipe_destination_options -[`stream.uncork()`]: #stream_writable_uncork -[`stream.unpipe()`]: #stream_readable_unpipe_destination -[`stream.wrap()`]: #stream_readable_wrap_stream -[`tls.CryptoStream`]: https://nodejs.org/docs/v6.3.1/api/tls.html#tls_class_cryptostream -[API for Stream Consumers]: #stream_api_for_stream_consumers -[API for Stream Implementers]: #stream_api_for_stream_implementers -[child process stdin]: https://nodejs.org/docs/v6.3.1/api/child_process.html#child_process_child_stdin -[child process stdout and stderr]: https://nodejs.org/docs/v6.3.1/api/child_process.html#child_process_child_stdout -[Compatibility]: #stream_compatibility_with_older_node_js_versions -[crypto]: crypto.html -[Duplex]: #stream_class_stream_duplex -[fs read streams]: https://nodejs.org/docs/v6.3.1/api/fs.html#fs_class_fs_readstream -[fs write streams]: https://nodejs.org/docs/v6.3.1/api/fs.html#fs_class_fs_writestream -[`fs.createReadStream()`]: https://nodejs.org/docs/v6.3.1/api/fs.html#fs_fs_createreadstream_path_options -[`fs.createWriteStream()`]: https://nodejs.org/docs/v6.3.1/api/fs.html#fs_fs_createwritestream_path_options -[`net.Socket`]: https://nodejs.org/docs/v6.3.1/api/net.html#net_class_net_socket -[`zlib.createDeflate()`]: https://nodejs.org/docs/v6.3.1/api/zlib.html#zlib_zlib_createdeflate_options -[HTTP requests, on the client]: https://nodejs.org/docs/v6.3.1/api/http.html#http_class_http_clientrequest -[HTTP responses, on the server]: https://nodejs.org/docs/v6.3.1/api/http.html#http_class_http_serverresponse -[http-incoming-message]: https://nodejs.org/docs/v6.3.1/api/http.html#http_class_http_incomingmessage -[Object mode]: #stream_object_mode -[Readable]: #stream_class_stream_readable -[SimpleProtocol v2]: #stream_example_simpleprotocol_parser_v2 -[stream-_flush]: #stream_transform_flush_callback -[stream-_read]: #stream_readable_read_size_1 -[stream-_transform]: #stream_transform_transform_chunk_encoding_callback -[stream-_write]: #stream_writable_write_chunk_encoding_callback_1 -[stream-_writev]: #stream_writable_writev_chunks_callback -[stream-end]: #stream_writable_end_chunk_encoding_callback -[stream-pause]: #stream_readable_pause -[stream-push]: #stream_readable_push_chunk_encoding -[stream-read]: #stream_readable_read_size -[stream-resume]: #stream_readable_resume -[stream-write]: #stream_writable_write_chunk_encoding_callback -[TCP sockets]: https://nodejs.org/docs/v6.3.1/api/net.html#net_class_net_socket -[Transform]: #stream_class_stream_transform -[Writable]: #stream_class_stream_writable -[zlib]: zlib.html diff --git a/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md deleted file mode 100644 index 83275f1..0000000 --- a/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +++ /dev/null @@ -1,60 +0,0 @@ -# streams WG Meeting 2015-01-30 - -## Links - -* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg -* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 -* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ - -## Agenda - -Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. - -* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) -* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) -* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) -* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) - -## Minutes - -### adopt a charter - -* group: +1's all around - -### What versioning scheme should be adopted? -* group: +1’s 3.0.0 -* domenic+group: pulling in patches from other sources where appropriate -* mikeal: version independently, suggesting versions for io.js -* mikeal+domenic: work with TC to notify in advance of changes -simpler stream creation - -### streamline creation of streams -* sam: streamline creation of streams -* domenic: nice simple solution posted - but, we lose the opportunity to change the model - may not be backwards incompatible (double check keys) - - **action item:** domenic will check - -### remove implicit flowing of streams on(‘data’) -* add isFlowing / isPaused -* mikeal: worrying that we’re documenting polyfill methods – confuses users -* domenic: more reflective API is probably good, with warning labels for users -* new section for mad scientists (reflective stream access) -* calvin: name the “third state” -* mikeal: maybe borrow the name from whatwg? -* domenic: we’re missing the “third state” -* consensus: kind of difficult to name the third state -* mikeal: figure out differences in states / compat -* mathias: always flow on data – eliminates third state - * explore what it breaks - -**action items:** -* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) -* ask rod/build for infrastructure -* **chris**: explore the “flow on data” approach -* add isPaused/isFlowing -* add new docs section -* move isPaused to that section - - diff --git a/node_modules/readable-stream/duplex.js b/node_modules/readable-stream/duplex.js deleted file mode 100644 index ca807af..0000000 --- a/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index 736693b..0000000 --- a/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,75 +0,0 @@ -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -'use strict'; - -/**/ - -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - keys.push(key); - }return keys; -}; -/**/ - -module.exports = Duplex; - -/**/ -var processNextTick = require('process-nextick-args'); -/**/ - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); - -util.inherits(Duplex, Readable); - -var keys = objectKeys(Writable.prototype); -for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) this.readable = false; - - if (options && options.writable === false) this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; - - this.once('end', onend); -} - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) return; - - // no more data can be written. - // But allow more writes to happen in this tick. - processNextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -function forEach(xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index d06f71f..0000000 --- a/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,26 +0,0 @@ -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 208cc65..0000000 --- a/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,937 +0,0 @@ -'use strict'; - -module.exports = Readable; - -/**/ -var processNextTick = require('process-nextick-args'); -/**/ - -/**/ -var isArray = require('isarray'); -/**/ - -Readable.ReadableState = ReadableState; - -/**/ -var EE = require('events').EventEmitter; - -var EElistenerCount = function (emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ -var Stream; -(function () { - try { - Stream = require('st' + 'ream'); - } catch (_) {} finally { - if (!Stream) Stream = require('events').EventEmitter; - } -})(); -/**/ - -var Buffer = require('buffer').Buffer; -/**/ -var bufferShim = require('buffer-shims'); -/**/ - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -/**/ -var debugUtil = require('util'); -var debug = void 0; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ - -var BufferList = require('./internal/streams/BufferList'); -var StringDecoder; - -util.inherits(Readable, Stream); - -function prependListener(emitter, event, fn) { - if (typeof emitter.prependListener === 'function') { - return emitter.prependListener(event, fn); - } else { - // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; - } -} - -var Duplex; -function ReadableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; - - // cast to ints. - this.highWaterMark = ~ ~this.highWaterMark; - - // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -var Duplex; -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - if (!(this instanceof Readable)) return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - if (options && typeof options.read === 'function') this._read = options.read; - - Stream.call(this); -} - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - - if (!state.objectMode && typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = bufferShim.from(chunk, encoding); - encoding = ''; - } - } - - return readableAddChunk(this, state, chunk, encoding, false); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); -}; - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var _e = new Error('stream.unshift() after end event'); - stream.emit('error', _e); - } else { - var skipAdd; - if (state.decoder && !addToFront && !encoding) { - chunk = state.decoder.write(chunk); - skipAdd = !state.objectMode && chunk.length === 0; - } - - if (!addToFront) state.reading = false; - - // Don't add to the buffer if we've decoded to an empty string chunk and - // we're not in object mode - if (!skipAdd) { - // if we want the data now, just emit it. - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - - if (state.needReadable) emitReadable(stream); - } - } - - maybeReadMore(stream, state); - } - } else if (!addToFront) { - state.reading = false; - } - - return needMoreData(state); -} - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); -} - -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; - -// Don't raise the hwm > 8MB -var MAX_HWM = 0x800000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} - -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - - if (n !== 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (!state.reading) n = howMuchToRead(nOrig, state); - } - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = true; - n = 0; - } else { - state.length -= n; - } - - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended) endReadable(this); - } - - if (ret !== null) this.emit('data', ret); - - return ret; -}; - -function chunkInvalid(state, chunk) { - var er = null; - if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - -function onEofChunk(stream, state) { - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - processNextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break;else len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - this.emit('error', new Error('not implemented')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - - var endFn = doEnd ? onend : cleanup; - if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable) { - debug('onunpipe'); - if (readable === src) { - cleanup(); - } - } - - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', cleanup); - src.removeListener('data', ondata); - - cleanedUp = true; - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - // If the user pushes more data while we're writing to dest then we'll end up - // in ondata again. However, we only want to increase awaitDrain once because - // dest will only emit one 'drain' event for the multiple writes. - // => Introduce a guard on increasing awaitDrain. - var increasedAwaitDrain = false; - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - increasedAwaitDrain = false; - var ret = dest.write(chunk); - if (false === ret && !increasedAwaitDrain) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', src._readableState.awaitDrain); - src._readableState.awaitDrain++; - increasedAwaitDrain = true; - } - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); - } - - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function () { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - - if (!dest) dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var _i = 0; _i < len; _i++) { - dests[_i].emit('unpipe', this); - }return this; - } - - // try to find the right one. - var i = indexOf(state.pipes, dest); - if (i === -1) return this; - - state.pipes.splice(i, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - - dest.emit('unpipe', this); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - if (ev === 'data') { - // Start flowing on next tick if stream isn't explicitly paused - if (this._readableState.flowing !== false) this.resume(); - } else if (ev === 'readable') { - var state = this._readableState; - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.emittedReadable = false; - if (!state.reading) { - processNextTick(nReadingNextTick, this); - } else if (state.length) { - emitReadable(this, state); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - processNextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - if (!state.reading) { - debug('resume read 0'); - stream.read(0); - } - - state.resumeScheduled = false; - state.awaitDrain = 0; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - while (state.flowing && stream.read() !== null) {} -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var state = this._readableState; - var paused = false; - - var self = this; - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) self.push(chunk); - } - - self.push(null); - }); - - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = self.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function (method) { - return function () { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - - // proxy certain important events. - var events = ['error', 'close', 'destroy', 'pause', 'resume']; - forEach(events, function (ev) { - stream.on(ev, self.emit.bind(self, ev)); - }); - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - self._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - - return self; -}; - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = fromListPartial(n, state.buffer, state.decoder); - } - - return ret; -} - -// Extracts only enough buffered data to satisfy the amount requested. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromListPartial(n, list, hasStrings) { - var ret; - if (n < list.head.data.length) { - // slice is the same for buffers and strings - ret = list.head.data.slice(0, n); - list.head.data = list.head.data.slice(n); - } else if (n === list.head.data.length) { - // first chunk is a perfect match - ret = list.shift(); - } else { - // result spans more than one buffer - ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); - } - return ret; -} - -// Copies a specified amount of characters from the list of buffered data -// chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBufferString(n, list) { - var p = list.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -// Copies a specified amount of bytes from the list of buffered data chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBuffer(n, list) { - var ret = bufferShim.allocUnsafe(n); - var p = list.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); - - if (!state.endEmitted) { - state.ended = true; - processNextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } -} - -function forEach(xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index dbc996e..0000000 --- a/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,180 +0,0 @@ -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -'use strict'; - -module.exports = Transform; - -var Duplex = require('./_stream_duplex'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(Transform, Duplex); - -function TransformState(stream) { - this.afterTransform = function (er, data) { - return afterTransform(stream, er, data); - }; - - this.needTransform = false; - this.transforming = false; - this.writecb = null; - this.writechunk = null; - this.writeencoding = null; -} - -function afterTransform(stream, er, data) { - var ts = stream._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); - - ts.writechunk = null; - ts.writecb = null; - - if (data !== null && data !== undefined) stream.push(data); - - cb(er); - - var rs = stream._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - stream._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - - Duplex.call(this, options); - - this._transformState = new TransformState(this); - - // when the writable side finishes, then flush out anything remaining. - var stream = this; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - - if (typeof options.flush === 'function') this._flush = options.flush; - } - - this.once('prefinish', function () { - if (typeof this._flush === 'function') this._flush(function (er) { - done(stream, er); - });else done(stream); - }); -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - throw new Error('Not implemented'); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -function done(stream, er) { - if (er) return stream.emit('error', er); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - var ws = stream._writableState; - var ts = stream._transformState; - - if (ws.length) throw new Error('Calling transform done when ws.length != 0'); - - if (ts.transforming) throw new Error('Calling transform done when still transforming'); - - return stream.push(null); -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index ed5efcb..0000000 --- a/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,526 +0,0 @@ -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. - -'use strict'; - -module.exports = Writable; - -/**/ -var processNextTick = require('process-nextick-args'); -/**/ - -/**/ -var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; -/**/ - -Writable.WritableState = WritableState; - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -/**/ -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ -var Stream; -(function () { - try { - Stream = require('st' + 'ream'); - } catch (_) {} finally { - if (!Stream) Stream = require('events').EventEmitter; - } -})(); -/**/ - -var Buffer = require('buffer').Buffer; -/**/ -var bufferShim = require('buffer-shims'); -/**/ - -util.inherits(Writable, Stream); - -function nop() {} - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - -var Duplex; -function WritableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; - - // cast to ints. - this.highWaterMark = ~ ~this.highWaterMark; - - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function (er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; - - // count buffered requests - this.bufferedRequestCount = 0; - - // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - this.corkedRequestsFree = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function writableStateGetBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function () { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') - }); - } catch (_) {} -})(); - -var Duplex; -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options); - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - - if (typeof options.writev === 'function') this._writev = options.writev; - } - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function () { - this.emit('error', new Error('Cannot pipe, not readable')); -}; - -function writeAfterEnd(stream, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - processNextTick(cb, er); -} - -// If we get something that is not a buffer, string, null, or undefined, -// and we're not in objectMode, then that's an error. -// Otherwise stream chunks are all considered to be of length=1, and the -// watermarks determine how many objects to keep in the buffer, rather than -// how many bytes or characters. -function validChunk(stream, state, chunk, cb) { - var valid = true; - var er = false; - // Always throw error if a null is written - // if we are not in object mode then throw - // if it is not a buffer, string, or undefined. - if (chunk === null) { - er = new TypeError('May not write null values to stream'); - } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - if (er) { - stream.emit('error', er); - processNextTick(cb, er); - valid = false; - } - return valid; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - - if (typeof cb !== 'function') cb = nop; - - if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function () { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = bufferShim.from(chunk, encoding); - } - return chunk; -} - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, chunk, encoding, cb) { - chunk = decodeChunk(state, chunk, encoding); - - if (Buffer.isBuffer(chunk)) encoding = 'buffer'; - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - if (sync) processNextTick(cb, er);else cb(er); - - stream._writableState.errorEmitted = true; - stream.emit('error', er); -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state); - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - /**/ - asyncWrite(afterWrite, stream, state, finished, cb); - /**/ - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - - var count = 0; - while (entry) { - buffer[count] = entry; - entry = entry.next; - count += 1; - } - - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - state.pendingcb++; - state.lastBufferedRequest = null; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequestCount = 0; - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new Error('not implemented')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) endWritable(this, state, cb); -}; - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} - -function prefinish(stream, state) { - if (!state.prefinished) { - state.prefinished = true; - stream.emit('prefinish'); - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - if (state.pendingcb === 0) { - prefinish(stream, state); - state.finished = true; - stream.emit('finish'); - } else { - prefinish(stream, state); - } - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) processNextTick(cb);else stream.once('finish', cb); - } - state.ended = true; - stream.writable = false; -} - -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - - this.finish = function (err) { - var entry = _this.entry; - _this.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - if (state.corkedRequestsFree) { - state.corkedRequestsFree.next = _this; - } else { - state.corkedRequestsFree = _this; - } - }; -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/BufferList.js b/node_modules/readable-stream/lib/internal/streams/BufferList.js deleted file mode 100644 index e4bfcf0..0000000 --- a/node_modules/readable-stream/lib/internal/streams/BufferList.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -var Buffer = require('buffer').Buffer; -/**/ -var bufferShim = require('buffer-shims'); -/**/ - -module.exports = BufferList; - -function BufferList() { - this.head = null; - this.tail = null; - this.length = 0; -} - -BufferList.prototype.push = function (v) { - var entry = { data: v, next: null }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; -}; - -BufferList.prototype.unshift = function (v) { - var entry = { data: v, next: this.head }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; -}; - -BufferList.prototype.shift = function () { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; -}; - -BufferList.prototype.clear = function () { - this.head = this.tail = null; - this.length = 0; -}; - -BufferList.prototype.join = function (s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) { - ret += s + p.data; - }return ret; -}; - -BufferList.prototype.concat = function (n) { - if (this.length === 0) return bufferShim.alloc(0); - if (this.length === 1) return this.head.data; - var ret = bufferShim.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - p.data.copy(ret, i); - i += p.data.length; - p = p.next; - } - return ret; -}; \ No newline at end of file diff --git a/node_modules/readable-stream/node_modules/isarray/.npmignore b/node_modules/readable-stream/node_modules/isarray/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/readable-stream/node_modules/isarray/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/readable-stream/node_modules/isarray/.travis.yml b/node_modules/readable-stream/node_modules/isarray/.travis.yml deleted file mode 100644 index cc4dba2..0000000 --- a/node_modules/readable-stream/node_modules/isarray/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/readable-stream/node_modules/isarray/Makefile b/node_modules/readable-stream/node_modules/isarray/Makefile deleted file mode 100644 index 787d56e..0000000 --- a/node_modules/readable-stream/node_modules/isarray/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -test: - @node_modules/.bin/tape test.js - -.PHONY: test - diff --git a/node_modules/readable-stream/node_modules/isarray/README.md b/node_modules/readable-stream/node_modules/isarray/README.md deleted file mode 100644 index 16d2c59..0000000 --- a/node_modules/readable-stream/node_modules/isarray/README.md +++ /dev/null @@ -1,60 +0,0 @@ - -# isarray - -`Array#isArray` for older browsers. - -[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) -[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) - -[![browser support](https://ci.testling.com/juliangruber/isarray.png) -](https://ci.testling.com/juliangruber/isarray) - -## Usage - -```js -var isArray = require('isarray'); - -console.log(isArray([])); // => true -console.log(isArray({})); // => false -``` - -## Installation - -With [npm](http://npmjs.org) do - -```bash -$ npm install isarray -``` - -Then bundle for the browser with -[browserify](https://github.com/substack/browserify). - -With [component](http://component.io) do - -```bash -$ component install juliangruber/isarray -``` - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/readable-stream/node_modules/isarray/component.json b/node_modules/readable-stream/node_modules/isarray/component.json deleted file mode 100644 index 9e31b68..0000000 --- a/node_modules/readable-stream/node_modules/isarray/component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name" : "isarray", - "description" : "Array#isArray for older browsers", - "version" : "0.0.1", - "repository" : "juliangruber/isarray", - "homepage": "https://github.com/juliangruber/isarray", - "main" : "index.js", - "scripts" : [ - "index.js" - ], - "dependencies" : {}, - "keywords": ["browser","isarray","array"], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT" -} diff --git a/node_modules/readable-stream/node_modules/isarray/index.js b/node_modules/readable-stream/node_modules/isarray/index.js deleted file mode 100644 index a57f634..0000000 --- a/node_modules/readable-stream/node_modules/isarray/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; diff --git a/node_modules/readable-stream/node_modules/isarray/package.json b/node_modules/readable-stream/node_modules/isarray/package.json deleted file mode 100644 index e0acb37..0000000 --- a/node_modules/readable-stream/node_modules/isarray/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "isarray@~1.0.0", - "/Users/jbaylina/git/MVP/node_modules/readable-stream" - ] - ], - "_from": "isarray@>=1.0.0 <1.1.0", - "_id": "isarray@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/readable-stream/isarray", - "_nodeVersion": "5.1.0", - "_npmUser": { - "email": "julian@juliangruber.com", - "name": "juliangruber" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "isarray", - "raw": "isarray@~1.0.0", - "rawSpec": "~1.0.0", - "scope": null, - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "_shasum": "bb935d48582cba168c06834957a54a3e07124f11", - "_shrinkwrap": null, - "_spec": "isarray@~1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/readable-stream", - "author": { - "email": "mail@juliangruber.com", - "name": "Julian Gruber", - "url": "http://juliangruber.com" - }, - "bugs": { - "url": "https://github.com/juliangruber/isarray/issues" - }, - "dependencies": {}, - "description": "Array#isArray for older browsers", - "devDependencies": { - "tape": "~2.13.4" - }, - "directories": {}, - "dist": { - "shasum": "bb935d48582cba168c06834957a54a3e07124f11", - "tarball": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - }, - "gitHead": "2a23a281f369e9ae06394c0fb4d2381355a6ba33", - "homepage": "https://github.com/juliangruber/isarray", - "keywords": [ - "browser", - "isarray", - "array" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "julian@juliangruber.com", - "name": "juliangruber" - } - ], - "name": "isarray", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/isarray.git" - }, - "scripts": { - "test": "tape test.js" - }, - "testling": { - "browsers": [ - "ie/8..latest", - "firefox/17..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ], - "files": "test.js" - }, - "version": "1.0.0" -} diff --git a/node_modules/readable-stream/node_modules/isarray/test.js b/node_modules/readable-stream/node_modules/isarray/test.js deleted file mode 100644 index e0c3444..0000000 --- a/node_modules/readable-stream/node_modules/isarray/test.js +++ /dev/null @@ -1,20 +0,0 @@ -var isArray = require('./'); -var test = require('tape'); - -test('is array', function(t){ - t.ok(isArray([])); - t.notOk(isArray({})); - t.notOk(isArray(null)); - t.notOk(isArray(false)); - - var obj = {}; - obj[0] = true; - t.notOk(isArray(obj)); - - var arr = []; - arr.foo = 'bar'; - t.ok(isArray(arr)); - - t.end(); -}); - diff --git a/node_modules/readable-stream/package.json b/node_modules/readable-stream/package.json deleted file mode 100644 index 7f9f2c2..0000000 --- a/node_modules/readable-stream/package.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "_args": [ - [ - "readable-stream@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/merkle-patricia-tree" - ] - ], - "_from": "readable-stream@>=2.0.0 <3.0.0", - "_id": "readable-stream@2.1.5", - "_inCache": true, - "_installable": true, - "_location": "/readable-stream", - "_nodeVersion": "5.12.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/readable-stream-2.1.5.tgz_1471463532993_0.15824943827465177" - }, - "_npmUser": { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "readable-stream", - "raw": "readable-stream@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/merkle-patricia-tree" - ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "_shasum": "66fa8b720e1438b364681f2ad1a63c618448c9d0", - "_shrinkwrap": null, - "_spec": "readable-stream@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/merkle-patricia-tree", - "browser": { - "util": false - }, - "bugs": { - "url": "https://github.com/nodejs/readable-stream/issues" - }, - "dependencies": { - "buffer-shims": "^1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - }, - "description": "Streams3, a user-land copy of the stream library from Node.js", - "devDependencies": { - "assert": "~1.4.0", - "babel-polyfill": "^6.9.1", - "nyc": "^6.4.0", - "tap": "~0.7.1", - "tape": "~4.5.1", - "zuul": "~3.10.0" - }, - "directories": {}, - "dist": { - "shasum": "66fa8b720e1438b364681f2ad1a63c618448c9d0", - "tarball": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz" - }, - "gitHead": "758c8b3845af855fde736b6a7f58a15fba00d1e7", - "homepage": "https://github.com/nodejs/readable-stream#readme", - "keywords": [ - "readable", - "stream", - "pipe" - ], - "license": "MIT", - "main": "readable.js", - "maintainers": [ - { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - { - "email": "nathan@tootallnate.net", - "name": "tootallnate" - }, - { - "email": "rod@vagg.org", - "name": "rvagg" - }, - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - } - ], - "name": "readable-stream", - "nyc": { - "include": [ - "lib/**.js" - ] - }, - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/nodejs/readable-stream.git" - }, - "scripts": { - "browser": "npm run write-zuul && zuul --browser-retries 2 -- test/browser.js", - "cover": "nyc npm test", - "local": "zuul --local 3000 --no-coverage -- test/browser.js", - "report": "nyc report --reporter=lcov", - "test": "tap test/parallel/*.js test/ours/*.js", - "write-zuul": "printf \"ui: tape\nbrowsers:\n - name: $BROWSER_NAME\n version: $BROWSER_VERSION\n\">.zuul.yml" - }, - "version": "2.1.5" -} diff --git a/node_modules/readable-stream/passthrough.js b/node_modules/readable-stream/passthrough.js deleted file mode 100644 index 27e8d8a..0000000 --- a/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/readable-stream/readable.js b/node_modules/readable-stream/readable.js deleted file mode 100644 index be2688a..0000000 --- a/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,16 +0,0 @@ -var Stream = (function (){ - try { - return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify - } catch(_){} -}()); -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = Stream || exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); - -if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) { - module.exports = Stream; -} diff --git a/node_modules/readable-stream/transform.js b/node_modules/readable-stream/transform.js deleted file mode 100644 index 5d482f0..0000000 --- a/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/readable-stream/writable.js b/node_modules/readable-stream/writable.js deleted file mode 100644 index e1e9efd..0000000 --- a/node_modules/readable-stream/writable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/request/.eslintrc b/node_modules/request/.eslintrc deleted file mode 100644 index 5a59481..0000000 --- a/node_modules/request/.eslintrc +++ /dev/null @@ -1,45 +0,0 @@ -{ - "env": { - "node": true - }, - "rules": { - // 2-space indentation - "indent": [2, 2, {"SwitchCase": 1}], - // Disallow semi-colons, unless needed to disambiguate statement - "semi": [2, "never"], - // Require strings to use single quotes - "quotes": [2, "single"], - // Require curly braces for all control statements - "curly": 2, - // Disallow using variables and functions before they've been defined - "no-use-before-define": 2, - // Allow any case for variable naming - "camelcase": 0, - // Disallow unused variables, except as function arguments - "no-unused-vars": [2, {"args":"none"}], - // Allow leading underscores for method names - // REASON: we use underscores to denote private methods - "no-underscore-dangle": 0, - // Allow multi spaces around operators since they are - // used for alignment. This is not consistent in the - // code. - "no-multi-spaces": 0, - // Style rule is: most objects use { beforeColon: false, afterColon: true }, unless aligning which uses: - // - // { - // beforeColon : true, - // afterColon : true - // } - // - // eslint can't handle this, so the check is disabled. - "key-spacing": 0, - // Allow shadowing vars in outer scope (needs discussion) - "no-shadow": 0, - // Use if () { } - // ^ space - "keyword-spacing": [2, {"after": true}], - // Use if () { } - // ^ space - "space-before-blocks": [2, "always"] - } -} diff --git a/node_modules/request/.npmignore b/node_modules/request/.npmignore deleted file mode 100644 index 67fe11c..0000000 --- a/node_modules/request/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -coverage -tests -node_modules -examples -release.sh -disabled.appveyor.yml diff --git a/node_modules/request/.travis.yml b/node_modules/request/.travis.yml deleted file mode 100644 index 9be8247..0000000 --- a/node_modules/request/.travis.yml +++ /dev/null @@ -1,21 +0,0 @@ - -language: node_js - -node_js: - - node - - 6 - - 4 - - 0.12 - -after_script: - - npm run test-cov - - codecov - - cat ./coverage/lcov.info | coveralls - -webhooks: - urls: https://webhooks.gitter.im/e/237280ed4796c19cc626 - on_success: change # options: [always|never|change] default: always - on_failure: always # options: [always|never|change] default: always - on_start: false # default: false - -sudo: false diff --git a/node_modules/request/CHANGELOG.md b/node_modules/request/CHANGELOG.md deleted file mode 100644 index 042c6e5..0000000 --- a/node_modules/request/CHANGELOG.md +++ /dev/null @@ -1,641 +0,0 @@ -## Change Log - -### v2.75.0 (2016/09/17) -- [#2381](https://github.com/request/request/pull/2381) Drop support for Node 0.10 (@simov) -- [#2377](https://github.com/request/request/pull/2377) Update form-data to version 2.0.0 🚀 (@greenkeeperio-bot) -- [#2353](https://github.com/request/request/pull/2353) Add greenkeeper ignored packages (@simov) -- [#2351](https://github.com/request/request/pull/2351) Update karma-tap to version 3.0.1 🚀 (@greenkeeperio-bot) -- [#2348](https://github.com/request/request/pull/2348) form-data@1.0.1 breaks build 🚨 (@greenkeeperio-bot) -- [#2349](https://github.com/request/request/pull/2349) Check error type instead of string (@scotttrinh) - -### v2.74.0 (2016/07/22) -- [#2295](https://github.com/request/request/pull/2295) Update tough-cookie to 2.3.0 (@stash-sfdc) -- [#2280](https://github.com/request/request/pull/2280) Update karma-tap to version 2.0.1 🚀 (@greenkeeperio-bot) - -### v2.73.0 (2016/07/09) -- [#2240](https://github.com/request/request/pull/2240) Remove connectionErrorHandler to fix #1903 (@zarenner) -- [#2251](https://github.com/request/request/pull/2251) tape@4.6.0 breaks build 🚨 (@greenkeeperio-bot) -- [#2225](https://github.com/request/request/pull/2225) Update docs (@ArtskydJ) -- [#2203](https://github.com/request/request/pull/2203) Update browserify to version 13.0.1 🚀 (@greenkeeperio-bot) -- [#2275](https://github.com/request/request/pull/2275) Update karma to version 1.1.1 🚀 (@greenkeeperio-bot) -- [#2204](https://github.com/request/request/pull/2204) Add codecov.yml and disable PR comments (@simov) -- [#2212](https://github.com/request/request/pull/2212) Fix link to http.IncomingMessage documentation (@nazieb) -- [#2208](https://github.com/request/request/pull/2208) Update to form-data RC4 and pass null values to it (@simov) -- [#2207](https://github.com/request/request/pull/2207) Move aws4 require statement to the top (@simov) -- [#2199](https://github.com/request/request/pull/2199) Update karma-coverage to version 1.0.0 🚀 (@greenkeeperio-bot) -- [#2206](https://github.com/request/request/pull/2206) Update qs to version 6.2.0 🚀 (@greenkeeperio-bot) -- [#2205](https://github.com/request/request/pull/2205) Use server-destory to close hanging sockets in tests (@simov) -- [#2200](https://github.com/request/request/pull/2200) Update karma-cli to version 1.0.0 🚀 (@greenkeeperio-bot) - -### v2.72.0 (2016/04/17) -- [#2176](https://github.com/request/request/pull/2176) Do not try to pipe Gzip responses with no body (@simov) -- [#2175](https://github.com/request/request/pull/2175) Add 'delete' alias for the 'del' API method (@simov, @MuhanZou) -- [#2172](https://github.com/request/request/pull/2172) Add support for deflate content encoding (@czardoz) -- [#2169](https://github.com/request/request/pull/2169) Add callback option (@simov) -- [#2165](https://github.com/request/request/pull/2165) Check for self.req existence inside the write method (@simov) -- [#2167](https://github.com/request/request/pull/2167) Fix TravisCI badge reference master branch (@a0viedo) - -### v2.71.0 (2016/04/12) -- [#2164](https://github.com/request/request/pull/2164) Catch errors from the underlying http module (@simov) - -### v2.70.0 (2016/04/05) -- [#2147](https://github.com/request/request/pull/2147) Update eslint to version 2.5.3 🚀 (@simov, @greenkeeperio-bot) -- [#2009](https://github.com/request/request/pull/2009) Support JSON stringify replacer argument. (@elyobo) -- [#2142](https://github.com/request/request/pull/2142) Update eslint to version 2.5.1 🚀 (@greenkeeperio-bot) -- [#2128](https://github.com/request/request/pull/2128) Update browserify-istanbul to version 2.0.0 🚀 (@greenkeeperio-bot) -- [#2115](https://github.com/request/request/pull/2115) Update eslint to version 2.3.0 🚀 (@simov, @greenkeeperio-bot) -- [#2089](https://github.com/request/request/pull/2089) Fix badges (@simov) -- [#2092](https://github.com/request/request/pull/2092) Update browserify-istanbul to version 1.0.0 🚀 (@greenkeeperio-bot) -- [#2079](https://github.com/request/request/pull/2079) Accept read stream as body option (@simov) -- [#2070](https://github.com/request/request/pull/2070) Update bl to version 1.1.2 🚀 (@greenkeeperio-bot) -- [#2063](https://github.com/request/request/pull/2063) Up bluebird and oauth-sign (@simov) -- [#2058](https://github.com/request/request/pull/2058) Karma fixes for latest versions (@eiriksm) -- [#2057](https://github.com/request/request/pull/2057) Update contributing guidelines (@simov) -- [#2054](https://github.com/request/request/pull/2054) Update qs to version 6.1.0 🚀 (@greenkeeperio-bot) - -### v2.69.0 (2016/01/27) -- [#2041](https://github.com/request/request/pull/2041) restore aws4 as regular dependency (@rmg) - -### v2.68.0 (2016/01/27) -- [#2036](https://github.com/request/request/pull/2036) Add AWS Signature Version 4 (@simov, @mirkods) -- [#2022](https://github.com/request/request/pull/2022) Convert numeric multipart bodies to string (@simov, @feross) -- [#2024](https://github.com/request/request/pull/2024) Update har-validator dependency for nsp advisory #76 (@TylerDixon) -- [#2016](https://github.com/request/request/pull/2016) Update qs to version 6.0.2 🚀 (@greenkeeperio-bot) -- [#2007](https://github.com/request/request/pull/2007) Use the `extend` module instead of util._extend (@simov) -- [#2003](https://github.com/request/request/pull/2003) Update browserify to version 13.0.0 🚀 (@greenkeeperio-bot) -- [#1989](https://github.com/request/request/pull/1989) Update buffer-equal to version 1.0.0 🚀 (@greenkeeperio-bot) -- [#1956](https://github.com/request/request/pull/1956) Check form-data content-length value before setting up the header (@jongyoonlee) -- [#1958](https://github.com/request/request/pull/1958) Use IncomingMessage.destroy method (@simov) -- [#1952](https://github.com/request/request/pull/1952) Adds example for Tor proxy (@prometheansacrifice) -- [#1943](https://github.com/request/request/pull/1943) Update eslint to version 1.10.3 🚀 (@simov, @greenkeeperio-bot) -- [#1924](https://github.com/request/request/pull/1924) Update eslint to version 1.10.1 🚀 (@greenkeeperio-bot) -- [#1915](https://github.com/request/request/pull/1915) Remove content-length and transfer-encoding headers from defaultProxyHeaderWhiteList (@yaxia) - -### v2.67.0 (2015/11/19) -- [#1913](https://github.com/request/request/pull/1913) Update http-signature to version 1.1.0 🚀 (@greenkeeperio-bot) - -### v2.66.0 (2015/11/18) -- [#1906](https://github.com/request/request/pull/1906) Update README URLs based on HTTP redirects (@ReadmeCritic) -- [#1905](https://github.com/request/request/pull/1905) Convert typed arrays into regular buffers (@simov) -- [#1902](https://github.com/request/request/pull/1902) node-uuid@1.4.7 breaks build 🚨 (@greenkeeperio-bot) -- [#1894](https://github.com/request/request/pull/1894) Fix tunneling after redirection from https (Original: #1881) (@simov, @falms) -- [#1893](https://github.com/request/request/pull/1893) Update eslint to version 1.9.0 🚀 (@greenkeeperio-bot) -- [#1852](https://github.com/request/request/pull/1852) Update eslint to version 1.7.3 🚀 (@simov, @greenkeeperio-bot, @paulomcnally, @michelsalib, @arbaaz, @vladimirich, @LoicMahieu, @JoshWillik, @jzaefferer, @ryanwholey, @djchie, @thisconnect, @mgenereu, @acroca, @Sebmaster, @KoltesDigital) -- [#1876](https://github.com/request/request/pull/1876) Implement loose matching for har mime types (@simov) -- [#1875](https://github.com/request/request/pull/1875) Update bluebird to version 3.0.2 🚀 (@simov, @greenkeeperio-bot) -- [#1871](https://github.com/request/request/pull/1871) Update browserify to version 12.0.1 🚀 (@greenkeeperio-bot) -- [#1866](https://github.com/request/request/pull/1866) Add missing quotes on x-token property in README (@miguelmota) -- [#1874](https://github.com/request/request/pull/1874) Fix typo in README.md (@gswalden) -- [#1860](https://github.com/request/request/pull/1860) Improve referer header tests and docs (@simov) -- [#1861](https://github.com/request/request/pull/1861) Remove redundant call to Stream constructor (@watson) -- [#1857](https://github.com/request/request/pull/1857) Fix Referer header to point to the original host name (@simov) -- [#1850](https://github.com/request/request/pull/1850) Update karma-coverage to version 0.5.3 🚀 (@greenkeeperio-bot) -- [#1847](https://github.com/request/request/pull/1847) Use node's latest version when building (@simov) -- [#1836](https://github.com/request/request/pull/1836) Tunnel: fix wrong property name (@KoltesDigital) -- [#1820](https://github.com/request/request/pull/1820) Set href as request.js uses it (@mgenereu) -- [#1840](https://github.com/request/request/pull/1840) Update http-signature to version 1.0.2 🚀 (@greenkeeperio-bot) -- [#1845](https://github.com/request/request/pull/1845) Update istanbul to version 0.4.0 🚀 (@greenkeeperio-bot) - -### v2.65.0 (2015/10/11) -- [#1833](https://github.com/request/request/pull/1833) Update aws-sign2 to version 0.6.0 🚀 (@greenkeeperio-bot) -- [#1811](https://github.com/request/request/pull/1811) Enable loose cookie parsing in tough-cookie (@Sebmaster) -- [#1830](https://github.com/request/request/pull/1830) Bring back tilde ranges for all dependencies (@simov) -- [#1821](https://github.com/request/request/pull/1821) Implement support for RFC 2617 MD5-sess algorithm. (@BigDSK) -- [#1828](https://github.com/request/request/pull/1828) Updated qs dependency to 5.2.0 (@acroca) -- [#1818](https://github.com/request/request/pull/1818) Extract `readResponseBody` method out of `onRequestResponse` (@pvoisin) -- [#1819](https://github.com/request/request/pull/1819) Run stringify once (@mgenereu) -- [#1814](https://github.com/request/request/pull/1814) Updated har-validator to version 2.0.2 (@greenkeeperio-bot) -- [#1807](https://github.com/request/request/pull/1807) Updated tough-cookie to version 2.1.0 (@greenkeeperio-bot) -- [#1800](https://github.com/request/request/pull/1800) Add caret ranges for devDependencies, except eslint (@simov) -- [#1799](https://github.com/request/request/pull/1799) Updated karma-browserify to version 4.4.0 (@greenkeeperio-bot) -- [#1797](https://github.com/request/request/pull/1797) Updated tape to version 4.2.0 (@greenkeeperio-bot) -- [#1788](https://github.com/request/request/pull/1788) Pinned all dependencies (@greenkeeperio-bot) - -### v2.64.0 (2015/09/25) -- [#1787](https://github.com/request/request/pull/1787) npm ignore examples, release.sh and disabled.appveyor.yml (@thisconnect) -- [#1775](https://github.com/request/request/pull/1775) Fix typo in README.md (@djchie) -- [#1776](https://github.com/request/request/pull/1776) Changed word 'conjuction' to read 'conjunction' in README.md (@ryanwholey) -- [#1785](https://github.com/request/request/pull/1785) Revert: Set default application/json content-type when using json option #1772 (@simov) - -### v2.63.0 (2015/09/21) -- [#1772](https://github.com/request/request/pull/1772) Set default application/json content-type when using json option (@jzaefferer) - -### v2.62.0 (2015/09/15) -- [#1768](https://github.com/request/request/pull/1768) Add node 4.0 to the list of build targets (@simov) -- [#1767](https://github.com/request/request/pull/1767) Query strings now cooperate with unix sockets (@JoshWillik) -- [#1750](https://github.com/request/request/pull/1750) Revert doc about installation of tough-cookie added in #884 (@LoicMahieu) -- [#1746](https://github.com/request/request/pull/1746) Missed comma in Readme (@vladimirich) -- [#1743](https://github.com/request/request/pull/1743) Fix options not being initialized in defaults method (@simov) - -### v2.61.0 (2015/08/19) -- [#1721](https://github.com/request/request/pull/1721) Minor fix in README.md (@arbaaz) -- [#1733](https://github.com/request/request/pull/1733) Avoid useless Buffer transformation (@michelsalib) -- [#1726](https://github.com/request/request/pull/1726) Update README.md (@paulomcnally) -- [#1715](https://github.com/request/request/pull/1715) Fix forever option in node > 0.10 #1709 (@calibr) -- [#1716](https://github.com/request/request/pull/1716) Do not create Buffer from Object in setContentLength(iojs v3.0 issue) (@calibr) -- [#1711](https://github.com/request/request/pull/1711) Add ability to detect connect timeouts (@kevinburke) -- [#1712](https://github.com/request/request/pull/1712) Set certificate expiration to August 2, 2018 (@kevinburke) -- [#1700](https://github.com/request/request/pull/1700) debug() when JSON.parse() on a response body fails (@phillipj) - -### v2.60.0 (2015/07/21) -- [#1687](https://github.com/request/request/pull/1687) Fix caseless bug - content-type not being set for multipart/form-data (@simov, @garymathews) - -### v2.59.0 (2015/07/20) -- [#1671](https://github.com/request/request/pull/1671) Add tests and docs for using the agent, agentClass, agentOptions and forever options. Forever option defaults to using http(s).Agent in node 0.12+ (@simov) -- [#1679](https://github.com/request/request/pull/1679) Fix - do not remove OAuth param when using OAuth realm (@simov, @jhalickman) -- [#1668](https://github.com/request/request/pull/1668) updated dependencies (@deamme) -- [#1656](https://github.com/request/request/pull/1656) Fix form method (@simov) -- [#1651](https://github.com/request/request/pull/1651) Preserve HEAD method when using followAllRedirects (@simov) -- [#1652](https://github.com/request/request/pull/1652) Update `encoding` option documentation in README.md (@daniel347x) -- [#1650](https://github.com/request/request/pull/1650) Allow content-type overriding when using the `form` option (@simov) -- [#1646](https://github.com/request/request/pull/1646) Clarify the nature of setting `ca` in `agentOptions` (@jeffcharles) - -### v2.58.0 (2015/06/16) -- [#1638](https://github.com/request/request/pull/1638) Use the `extend` module to deep extend in the defaults method (@simov) -- [#1631](https://github.com/request/request/pull/1631) Move tunnel logic into separate module (@simov) -- [#1634](https://github.com/request/request/pull/1634) Fix OAuth query transport_method (@simov) -- [#1603](https://github.com/request/request/pull/1603) Add codecov (@simov) - -### v2.57.0 (2015/05/31) -- [#1615](https://github.com/request/request/pull/1615) Replace '.client' with '.socket' as the former was deprecated in 2.2.0. (@ChALkeR) - -### v2.56.0 (2015/05/28) -- [#1610](https://github.com/request/request/pull/1610) Bump module dependencies (@simov) -- [#1600](https://github.com/request/request/pull/1600) Extract the querystring logic into separate module (@simov) -- [#1607](https://github.com/request/request/pull/1607) Re-generate certificates (@simov) -- [#1599](https://github.com/request/request/pull/1599) Move getProxyFromURI logic below the check for Invaild URI (#1595) (@simov) -- [#1598](https://github.com/request/request/pull/1598) Fix the way http verbs are defined in order to please intellisense IDEs (@simov, @flannelJesus) -- [#1591](https://github.com/request/request/pull/1591) A few minor fixes: (@simov) -- [#1584](https://github.com/request/request/pull/1584) Refactor test-default tests (according to comments in #1430) (@simov) -- [#1585](https://github.com/request/request/pull/1585) Fixing documentation regarding TLS options (#1583) (@mainakae) -- [#1574](https://github.com/request/request/pull/1574) Refresh the oauth_nonce on redirect (#1573) (@simov) -- [#1570](https://github.com/request/request/pull/1570) Discovered tests that weren't properly running (@seanstrom) -- [#1569](https://github.com/request/request/pull/1569) Fix pause before response arrives (@kevinoid) -- [#1558](https://github.com/request/request/pull/1558) Emit error instead of throw (@simov) -- [#1568](https://github.com/request/request/pull/1568) Fix stall when piping gzipped response (@kevinoid) -- [#1560](https://github.com/request/request/pull/1560) Update combined-stream (@apechimp) -- [#1543](https://github.com/request/request/pull/1543) Initial support for oauth_body_hash on json payloads (@simov, @aesopwolf) -- [#1541](https://github.com/request/request/pull/1541) Fix coveralls (@simov) -- [#1540](https://github.com/request/request/pull/1540) Fix recursive defaults for convenience methods (@simov) -- [#1536](https://github.com/request/request/pull/1536) More eslint style rules (@froatsnook) -- [#1533](https://github.com/request/request/pull/1533) Adding dependency status bar to README.md (@YasharF) -- [#1539](https://github.com/request/request/pull/1539) ensure the latest version of har-validator is included (@ahmadnassri) -- [#1516](https://github.com/request/request/pull/1516) forever+pool test (@devTristan) - -### v2.55.0 (2015/04/05) -- [#1520](https://github.com/request/request/pull/1520) Refactor defaults (@simov) -- [#1525](https://github.com/request/request/pull/1525) Delete request headers with undefined value. (@froatsnook) -- [#1521](https://github.com/request/request/pull/1521) Add promise tests (@simov) -- [#1518](https://github.com/request/request/pull/1518) Fix defaults (@simov) -- [#1515](https://github.com/request/request/pull/1515) Allow static invoking of convenience methods (@simov) -- [#1505](https://github.com/request/request/pull/1505) Fix multipart boundary extraction regexp (@simov) -- [#1510](https://github.com/request/request/pull/1510) Fix basic auth form data (@simov) - -### v2.54.0 (2015/03/24) -- [#1501](https://github.com/request/request/pull/1501) HTTP Archive 1.2 support (@ahmadnassri) -- [#1486](https://github.com/request/request/pull/1486) Add a test for the forever agent (@akshayp) -- [#1500](https://github.com/request/request/pull/1500) Adding handling for no auth method and null bearer (@philberg) -- [#1498](https://github.com/request/request/pull/1498) Add table of contents in readme (@simov) -- [#1477](https://github.com/request/request/pull/1477) Add support for qs options via qsOptions key (@simov) -- [#1496](https://github.com/request/request/pull/1496) Parameters encoded to base 64 should be decoded as UTF-8, not ASCII. (@albanm) -- [#1494](https://github.com/request/request/pull/1494) Update eslint (@froatsnook) -- [#1474](https://github.com/request/request/pull/1474) Require Colon in Basic Auth (@erykwalder) -- [#1481](https://github.com/request/request/pull/1481) Fix baseUrl and redirections. (@burningtree) -- [#1469](https://github.com/request/request/pull/1469) Feature/base url (@froatsnook) -- [#1459](https://github.com/request/request/pull/1459) Add option to time request/response cycle (including rollup of redirects) (@aaron-em) -- [#1468](https://github.com/request/request/pull/1468) Re-enable io.js/node 0.12 build (@simov, @mikeal, @BBB) -- [#1442](https://github.com/request/request/pull/1442) Fixed the issue with strictSSL tests on 0.12 & io.js by explicitly setting a cipher that matches the cert. (@BBB, @nickmccurdy, @demohi, @simov, @0x4139) -- [#1460](https://github.com/request/request/pull/1460) localAddress or proxy config is lost when redirecting (@simov, @0x4139) -- [#1453](https://github.com/request/request/pull/1453) Test on Node.js 0.12 and io.js with allowed failures (@nickmccurdy, @demohi) -- [#1426](https://github.com/request/request/pull/1426) Fixing tests to pass on io.js and node 0.12 (only test-https.js stiff failing) (@mikeal) -- [#1446](https://github.com/request/request/pull/1446) Missing HTTP referer header with redirects Fixes #1038 (@simov, @guimon) -- [#1428](https://github.com/request/request/pull/1428) Deprecate Node v0.8.x (@nylen) -- [#1436](https://github.com/request/request/pull/1436) Add ability to set a requester without setting default options (@tikotzky) -- [#1435](https://github.com/request/request/pull/1435) dry up verb methods (@sethpollack) -- [#1423](https://github.com/request/request/pull/1423) Allow fully qualified multipart content-type header (@simov) -- [#1430](https://github.com/request/request/pull/1430) Fix recursive requester (@tikotzky) -- [#1429](https://github.com/request/request/pull/1429) Throw error when making HEAD request with a body (@tikotzky) -- [#1419](https://github.com/request/request/pull/1419) Add note that the project is broken in 0.12.x (@nylen) -- [#1413](https://github.com/request/request/pull/1413) Fix basic auth (@simov) -- [#1397](https://github.com/request/request/pull/1397) Improve pipe-from-file tests (@nylen) - -### v2.53.0 (2015/02/02) -- [#1396](https://github.com/request/request/pull/1396) Do not rfc3986 escape JSON bodies (@nylen, @simov) -- [#1392](https://github.com/request/request/pull/1392) Improve `timeout` option description (@watson) - -### v2.52.0 (2015/02/02) -- [#1383](https://github.com/request/request/pull/1383) Add missing HTTPS options that were not being passed to tunnel (@brichard19) (@nylen) -- [#1388](https://github.com/request/request/pull/1388) Upgrade mime-types package version (@roderickhsiao) -- [#1389](https://github.com/request/request/pull/1389) Revise Setup Tunnel Function (@seanstrom) -- [#1374](https://github.com/request/request/pull/1374) Allow explicitly disabling tunneling for proxied https destinations (@nylen) -- [#1376](https://github.com/request/request/pull/1376) Use karma-browserify for tests. Add browser test coverage reporter. (@eiriksm) -- [#1366](https://github.com/request/request/pull/1366) Refactor OAuth into separate module (@simov) -- [#1373](https://github.com/request/request/pull/1373) Rewrite tunnel test to be pure Node.js (@nylen) -- [#1371](https://github.com/request/request/pull/1371) Upgrade test reporter (@nylen) -- [#1360](https://github.com/request/request/pull/1360) Refactor basic, bearer, digest auth logic into separate class (@simov) -- [#1354](https://github.com/request/request/pull/1354) Remove circular dependency from debugging code (@nylen) -- [#1351](https://github.com/request/request/pull/1351) Move digest auth into private prototype method (@simov) -- [#1352](https://github.com/request/request/pull/1352) Update hawk dependency to ~2.3.0 (@mridgway) -- [#1353](https://github.com/request/request/pull/1353) Correct travis-ci badge (@dogancelik) -- [#1349](https://github.com/request/request/pull/1349) Make sure we return on errored browser requests. (@eiriksm) -- [#1346](https://github.com/request/request/pull/1346) getProxyFromURI Extraction Refactor (@seanstrom) -- [#1337](https://github.com/request/request/pull/1337) Standardize test ports on 6767 (@nylen) -- [#1341](https://github.com/request/request/pull/1341) Emit FormData error events as Request error events (@nylen, @rwky) -- [#1343](https://github.com/request/request/pull/1343) Clean up readme badges, and add Travis and Coveralls badges (@nylen) -- [#1345](https://github.com/request/request/pull/1345) Update README.md (@Aaron-Hartwig) -- [#1338](https://github.com/request/request/pull/1338) Always wait for server.close() callback in tests (@nylen) -- [#1342](https://github.com/request/request/pull/1342) Add mock https server and redo start of browser tests for this purpose. (@eiriksm) -- [#1339](https://github.com/request/request/pull/1339) Improve auth docs (@nylen) -- [#1335](https://github.com/request/request/pull/1335) Add support for OAuth plaintext signature method (@simov) -- [#1332](https://github.com/request/request/pull/1332) Add clean script to remove test-browser.js after the tests run (@seanstrom) -- [#1327](https://github.com/request/request/pull/1327) Fix errors generating coverage reports. (@nylen) -- [#1330](https://github.com/request/request/pull/1330) Return empty buffer upon empty response body and encoding is set to null (@seanstrom) -- [#1326](https://github.com/request/request/pull/1326) Use faster container-based infrastructure on Travis (@nylen) -- [#1315](https://github.com/request/request/pull/1315) Implement rfc3986 option (@simov, @nylen, @apoco, @DullReferenceException, @mmalecki, @oliamb, @cliffcrosland, @LewisJEllis, @eiriksm, @poislagarde) -- [#1314](https://github.com/request/request/pull/1314) Detect urlencoded form data header via regex (@simov) -- [#1317](https://github.com/request/request/pull/1317) Improve OAuth1.0 server side flow example (@simov) - -### v2.51.0 (2014/12/10) -- [#1310](https://github.com/request/request/pull/1310) Revert changes introduced in https://github.com/request/request/pull/1282 (@simov) - -### v2.50.0 (2014/12/09) -- [#1308](https://github.com/request/request/pull/1308) Add browser test to keep track of browserify compability. (@eiriksm) -- [#1299](https://github.com/request/request/pull/1299) Add optional support for jsonReviver (@poislagarde) -- [#1277](https://github.com/request/request/pull/1277) Add Coveralls configuration (@simov) -- [#1307](https://github.com/request/request/pull/1307) Upgrade form-data, add back browserify compability. Fixes #455. (@eiriksm) -- [#1305](https://github.com/request/request/pull/1305) Fix typo in README.md (@LewisJEllis) -- [#1288](https://github.com/request/request/pull/1288) Update README.md to explain custom file use case (@cliffcrosland) - -### v2.49.0 (2014/11/28) -- [#1295](https://github.com/request/request/pull/1295) fix(proxy): no-proxy false positive (@oliamb) -- [#1292](https://github.com/request/request/pull/1292) Upgrade `caseless` to 0.8.1 (@mmalecki) -- [#1276](https://github.com/request/request/pull/1276) Set transfer encoding for multipart/related to chunked by default (@simov) -- [#1275](https://github.com/request/request/pull/1275) Fix multipart content-type headers detection (@simov) -- [#1269](https://github.com/request/request/pull/1269) adds streams example for review (@tbuchok) -- [#1238](https://github.com/request/request/pull/1238) Add examples README.md (@simov) - -### v2.48.0 (2014/11/12) -- [#1263](https://github.com/request/request/pull/1263) Fixed a syntax error / typo in README.md (@xna2) -- [#1253](https://github.com/request/request/pull/1253) Add multipart chunked flag (@simov, @nylen) -- [#1251](https://github.com/request/request/pull/1251) Clarify that defaults() does not modify global defaults (@nylen) -- [#1250](https://github.com/request/request/pull/1250) Improve documentation for pool and maxSockets options (@nylen) -- [#1237](https://github.com/request/request/pull/1237) Documenting error handling when using streams (@vmattos) -- [#1244](https://github.com/request/request/pull/1244) Finalize changelog command (@nylen) -- [#1241](https://github.com/request/request/pull/1241) Fix typo (@alexanderGugel) -- [#1223](https://github.com/request/request/pull/1223) Show latest version number instead of "upcoming" in changelog (@nylen) -- [#1236](https://github.com/request/request/pull/1236) Document how to use custom CA in README (#1229) (@hypesystem) -- [#1228](https://github.com/request/request/pull/1228) Support for oauth with RSA-SHA1 signing (@nylen) -- [#1216](https://github.com/request/request/pull/1216) Made json and multipart options coexist (@nylen, @simov) -- [#1225](https://github.com/request/request/pull/1225) Allow header white/exclusive lists in any case. (@RReverser) - -### v2.47.0 (2014/10/26) -- [#1222](https://github.com/request/request/pull/1222) Move from mikeal/request to request/request (@nylen) -- [#1220](https://github.com/request/request/pull/1220) update qs dependency to 2.3.1 (@FredKSchott) -- [#1212](https://github.com/request/request/pull/1212) Improve tests/test-timeout.js (@nylen) -- [#1219](https://github.com/request/request/pull/1219) remove old globalAgent workaround for node 0.4 (@request) -- [#1214](https://github.com/request/request/pull/1214) Remove cruft left over from optional dependencies (@nylen) -- [#1215](https://github.com/request/request/pull/1215) Add proxyHeaderExclusiveList option for proxy-only headers. (@RReverser) -- [#1211](https://github.com/request/request/pull/1211) Allow 'Host' header instead of 'host' and remember case across redirects (@nylen) -- [#1208](https://github.com/request/request/pull/1208) Improve release script (@nylen) -- [#1213](https://github.com/request/request/pull/1213) Support for custom cookie store (@nylen, @mitsuru) -- [#1197](https://github.com/request/request/pull/1197) Clean up some code around setting the agent (@FredKSchott) -- [#1209](https://github.com/request/request/pull/1209) Improve multipart form append test (@simov) -- [#1207](https://github.com/request/request/pull/1207) Update changelog (@nylen) -- [#1185](https://github.com/request/request/pull/1185) Stream multipart/related bodies (@simov) - -### v2.46.0 (2014/10/23) -- [#1198](https://github.com/request/request/pull/1198) doc for TLS/SSL protocol options (@shawnzhu) -- [#1200](https://github.com/request/request/pull/1200) Add a Gitter chat badge to README.md (@gitter-badger) -- [#1196](https://github.com/request/request/pull/1196) Upgrade taper test reporter to v0.3.0 (@nylen) -- [#1199](https://github.com/request/request/pull/1199) Fix lint error: undeclared var i (@nylen) -- [#1191](https://github.com/request/request/pull/1191) Move self.proxy decision logic out of init and into a helper (@FredKSchott) -- [#1190](https://github.com/request/request/pull/1190) Move _buildRequest() logic back into init (@FredKSchott) -- [#1186](https://github.com/request/request/pull/1186) Support Smarter Unix URL Scheme (@FredKSchott) -- [#1178](https://github.com/request/request/pull/1178) update form documentation for new usage (@FredKSchott) -- [#1180](https://github.com/request/request/pull/1180) Enable no-mixed-requires linting rule (@nylen) -- [#1184](https://github.com/request/request/pull/1184) Don't forward authorization header across redirects to different hosts (@nylen) -- [#1183](https://github.com/request/request/pull/1183) Correct README about pre and postamble CRLF using multipart and not mult... (@netpoetica) -- [#1179](https://github.com/request/request/pull/1179) Lint tests directory (@nylen) -- [#1169](https://github.com/request/request/pull/1169) add metadata for form-data file field (@dotcypress) -- [#1173](https://github.com/request/request/pull/1173) remove optional dependencies (@seanstrom) -- [#1165](https://github.com/request/request/pull/1165) Cleanup event listeners and remove function creation from init (@FredKSchott) -- [#1174](https://github.com/request/request/pull/1174) update the request.cookie docs to have a valid cookie example (@seanstrom) -- [#1168](https://github.com/request/request/pull/1168) create a detach helper and use detach helper in replace of nextTick (@seanstrom) -- [#1171](https://github.com/request/request/pull/1171) in post can send form data and use callback (@MiroRadenovic) -- [#1159](https://github.com/request/request/pull/1159) accept charset for x-www-form-urlencoded content-type (@seanstrom) -- [#1157](https://github.com/request/request/pull/1157) Update README.md: body with json=true (@Rob--W) -- [#1164](https://github.com/request/request/pull/1164) Disable tests/test-timeout.js on Travis (@nylen) -- [#1153](https://github.com/request/request/pull/1153) Document how to run a single test (@nylen) -- [#1144](https://github.com/request/request/pull/1144) adds documentation for the "response" event within the streaming section (@tbuchok) -- [#1162](https://github.com/request/request/pull/1162) Update eslintrc file to no longer allow past errors (@FredKSchott) -- [#1155](https://github.com/request/request/pull/1155) Support/use self everywhere (@seanstrom) -- [#1161](https://github.com/request/request/pull/1161) fix no-use-before-define lint warnings (@emkay) -- [#1156](https://github.com/request/request/pull/1156) adding curly brackets to get rid of lint errors (@emkay) -- [#1151](https://github.com/request/request/pull/1151) Fix localAddress test on OS X (@nylen) -- [#1145](https://github.com/request/request/pull/1145) documentation: fix outdated reference to setCookieSync old name in README (@FredKSchott) -- [#1131](https://github.com/request/request/pull/1131) Update pool documentation (@FredKSchott) -- [#1143](https://github.com/request/request/pull/1143) Rewrite all tests to use tape (@nylen) -- [#1137](https://github.com/request/request/pull/1137) Add ability to specifiy querystring lib in options. (@jgrund) -- [#1138](https://github.com/request/request/pull/1138) allow hostname and port in place of host on uri (@cappslock) -- [#1134](https://github.com/request/request/pull/1134) Fix multiple redirects and `self.followRedirect` (@blakeembrey) -- [#1130](https://github.com/request/request/pull/1130) documentation fix: add note about npm test for contributing (@FredKSchott) -- [#1120](https://github.com/request/request/pull/1120) Support/refactor request setup tunnel (@seanstrom) -- [#1129](https://github.com/request/request/pull/1129) linting fix: convert double quote strings to use single quotes (@FredKSchott) -- [#1124](https://github.com/request/request/pull/1124) linting fix: remove unneccesary semi-colons (@FredKSchott) - -### v2.45.0 (2014/10/06) -- [#1128](https://github.com/request/request/pull/1128) Add test for setCookie regression (@nylen) -- [#1127](https://github.com/request/request/pull/1127) added tests around using objects as values in a query string (@bcoe) -- [#1103](https://github.com/request/request/pull/1103) Support/refactor request constructor (@nylen, @seanstrom) -- [#1119](https://github.com/request/request/pull/1119) add basic linting to request library (@FredKSchott) -- [#1121](https://github.com/request/request/pull/1121) Revert "Explicitly use sync versions of cookie functions" (@nylen) -- [#1118](https://github.com/request/request/pull/1118) linting fix: Restructure bad empty if statement (@FredKSchott) -- [#1117](https://github.com/request/request/pull/1117) Fix a bad check for valid URIs (@FredKSchott) -- [#1113](https://github.com/request/request/pull/1113) linting fix: space out operators (@FredKSchott) -- [#1116](https://github.com/request/request/pull/1116) Fix typo in `noProxyHost` definition (@FredKSchott) -- [#1114](https://github.com/request/request/pull/1114) linting fix: Added a `new` operator that was missing when creating and throwing a new error (@FredKSchott) -- [#1096](https://github.com/request/request/pull/1096) No_proxy support (@samcday) -- [#1107](https://github.com/request/request/pull/1107) linting-fix: remove unused variables (@FredKSchott) -- [#1112](https://github.com/request/request/pull/1112) linting fix: Make return values consistent and more straitforward (@FredKSchott) -- [#1111](https://github.com/request/request/pull/1111) linting fix: authPieces was getting redeclared (@FredKSchott) -- [#1105](https://github.com/request/request/pull/1105) Use strict mode in request (@FredKSchott) -- [#1110](https://github.com/request/request/pull/1110) linting fix: replace lazy '==' with more strict '===' (@FredKSchott) -- [#1109](https://github.com/request/request/pull/1109) linting fix: remove function call from if-else conditional statement (@FredKSchott) -- [#1102](https://github.com/request/request/pull/1102) Fix to allow setting a `requester` on recursive calls to `request.defaults` (@tikotzky) -- [#1095](https://github.com/request/request/pull/1095) Tweaking engines in package.json (@pdehaan) -- [#1082](https://github.com/request/request/pull/1082) Forward the socket event from the httpModule request (@seanstrom) -- [#972](https://github.com/request/request/pull/972) Clarify gzip handling in the README (@kevinoid) -- [#1089](https://github.com/request/request/pull/1089) Mention that encoding defaults to utf8, not Buffer (@stuartpb) -- [#1088](https://github.com/request/request/pull/1088) Fix cookie example in README.md and make it more clear (@pipi32167) -- [#1027](https://github.com/request/request/pull/1027) Add support for multipart form data in request options. (@crocket) -- [#1076](https://github.com/request/request/pull/1076) use Request.abort() to abort the request when the request has timed-out (@seanstrom) -- [#1068](https://github.com/request/request/pull/1068) add optional postamble required by .NET multipart requests (@netpoetica) - -### v2.43.0 (2014/09/18) -- [#1057](https://github.com/request/request/pull/1057) Defaults should not overwrite defined options (@davidwood) -- [#1046](https://github.com/request/request/pull/1046) Propagate datastream errors, useful in case gzip fails. (@ZJONSSON, @Janpot) -- [#1063](https://github.com/request/request/pull/1063) copy the input headers object #1060 (@finnp) -- [#1031](https://github.com/request/request/pull/1031) Explicitly use sync versions of cookie functions (@ZJONSSON) -- [#1056](https://github.com/request/request/pull/1056) Fix redirects when passing url.parse(x) as URL to convenience method (@nylen) - -### v2.42.0 (2014/09/04) -- [#1053](https://github.com/request/request/pull/1053) Fix #1051 Parse auth properly when using non-tunneling proxy (@isaacs) - -### v2.41.0 (2014/09/04) -- [#1050](https://github.com/request/request/pull/1050) Pass whitelisted headers to tunneling proxy. Organize all tunneling logic. (@isaacs, @Feldhacker) -- [#1035](https://github.com/request/request/pull/1035) souped up nodei.co badge (@rvagg) -- [#1048](https://github.com/request/request/pull/1048) Aws is now possible over a proxy (@steven-aerts) -- [#1039](https://github.com/request/request/pull/1039) extract out helper functions to a helper file (@seanstrom) -- [#1021](https://github.com/request/request/pull/1021) Support/refactor indexjs (@seanstrom) -- [#1033](https://github.com/request/request/pull/1033) Improve and document debug options (@nylen) -- [#1034](https://github.com/request/request/pull/1034) Fix readme headings (@nylen) -- [#1030](https://github.com/request/request/pull/1030) Allow recursive request.defaults (@tikotzky) -- [#1029](https://github.com/request/request/pull/1029) Fix a couple of typos (@nylen) -- [#675](https://github.com/request/request/pull/675) Checking for SSL fault on connection before reading SSL properties (@VRMink) -- [#989](https://github.com/request/request/pull/989) Added allowRedirect function. Should return true if redirect is allowed or false otherwise (@doronin) -- [#1025](https://github.com/request/request/pull/1025) [fixes #1023] Set self._ended to true once response has ended (@mridgway) -- [#1020](https://github.com/request/request/pull/1020) Add back removed debug metadata (@FredKSchott) -- [#1008](https://github.com/request/request/pull/1008) Moving to module instead of cutomer buffer concatenation. (@mikeal) -- [#770](https://github.com/request/request/pull/770) Added dependency badge for README file; (@timgluz, @mafintosh, @lalitkapoor, @stash, @bobyrizov) -- [#1016](https://github.com/request/request/pull/1016) toJSON no longer results in an infinite loop, returns simple objects (@FredKSchott) -- [#1018](https://github.com/request/request/pull/1018) Remove pre-0.4.4 HTTPS fix (@mmalecki) -- [#1006](https://github.com/request/request/pull/1006) Migrate to caseless, fixes #1001 (@mikeal) -- [#995](https://github.com/request/request/pull/995) Fix parsing array of objects (@sjonnet19) -- [#999](https://github.com/request/request/pull/999) Fix fallback for browserify for optional modules. (@eiriksm) -- [#996](https://github.com/request/request/pull/996) Wrong oauth signature when multiple same param keys exist [updated] (@bengl, @hyjin) - -### v2.40.0 (2014/08/06) -- [#992](https://github.com/request/request/pull/992) Fix security vulnerability. Update qs (@poeticninja) -- [#988](https://github.com/request/request/pull/988) “--” -> “—” (@upisfree) -- [#987](https://github.com/request/request/pull/987) Show optional modules as being loaded by the module that reqeusted them (@iarna) - -### v2.39.0 (2014/07/24) -- [#976](https://github.com/request/request/pull/976) Update README.md (@pvoznenko) - -### v2.38.0 (2014/07/22) -- [#952](https://github.com/request/request/pull/952) Adding support to client certificate with proxy use case (@ofirshaked) -- [#884](https://github.com/request/request/pull/884) Documented tough-cookie installation. (@wbyoung) -- [#935](https://github.com/request/request/pull/935) Correct repository url (@fritx) -- [#963](https://github.com/request/request/pull/963) Update changelog (@nylen) -- [#960](https://github.com/request/request/pull/960) Support gzip with encoding on node pre-v0.9.4 (@kevinoid) -- [#953](https://github.com/request/request/pull/953) Add async Content-Length computation when using form-data (@LoicMahieu) -- [#844](https://github.com/request/request/pull/844) Add support for HTTP[S]_PROXY environment variables. Fixes #595. (@jvmccarthy) -- [#946](https://github.com/request/request/pull/946) defaults: merge headers (@aj0strow) - -### v2.37.0 (2014/07/07) -- [#957](https://github.com/request/request/pull/957) Silence EventEmitter memory leak warning #311 (@watson) -- [#955](https://github.com/request/request/pull/955) check for content-length header before setting it in nextTick (@camilleanne) -- [#951](https://github.com/request/request/pull/951) Add support for gzip content decoding (@kevinoid) -- [#949](https://github.com/request/request/pull/949) Manually enter querystring in form option (@charlespwd) -- [#944](https://github.com/request/request/pull/944) Make request work with browserify (@eiriksm) -- [#943](https://github.com/request/request/pull/943) New mime module (@eiriksm) -- [#927](https://github.com/request/request/pull/927) Bump version of hawk dep. (@samccone) -- [#907](https://github.com/request/request/pull/907) append secureOptions to poolKey (@medovob) - -### v2.35.0 (2014/05/17) -- [#901](https://github.com/request/request/pull/901) Fixes #555 (@pigulla) -- [#897](https://github.com/request/request/pull/897) merge with default options (@vohof) -- [#891](https://github.com/request/request/pull/891) fixes 857 - options object is mutated by calling request (@lalitkapoor) -- [#869](https://github.com/request/request/pull/869) Pipefilter test (@tgohn) -- [#866](https://github.com/request/request/pull/866) Fix typo (@dandv) -- [#861](https://github.com/request/request/pull/861) Add support for RFC 6750 Bearer Tokens (@phedny) -- [#809](https://github.com/request/request/pull/809) upgrade tunnel-proxy to 0.4.0 (@ksato9700) -- [#850](https://github.com/request/request/pull/850) Fix word consistency in readme (@0xNobody) -- [#810](https://github.com/request/request/pull/810) add some exposition to mpu example in README.md (@mikermcneil) -- [#840](https://github.com/request/request/pull/840) improve error reporting for invalid protocols (@FND) -- [#821](https://github.com/request/request/pull/821) added secureOptions back (@nw) -- [#815](https://github.com/request/request/pull/815) Create changelog based on pull requests (@lalitkapoor) - -### v2.34.0 (2014/02/18) -- [#516](https://github.com/request/request/pull/516) UNIX Socket URL Support (@lyuzashi) -- [#801](https://github.com/request/request/pull/801) 794 ignore cookie parsing and domain errors (@lalitkapoor) -- [#802](https://github.com/request/request/pull/802) Added the Apache license to the package.json. (@keskival) -- [#793](https://github.com/request/request/pull/793) Adds content-length calculation when submitting forms using form-data li... (@Juul) -- [#785](https://github.com/request/request/pull/785) Provide ability to override content-type when `json` option used (@vvo) -- [#781](https://github.com/request/request/pull/781) simpler isReadStream function (@joaojeronimo) - -### v2.32.0 (2014/01/16) -- [#767](https://github.com/request/request/pull/767) Use tough-cookie CookieJar sync API (@stash) -- [#764](https://github.com/request/request/pull/764) Case-insensitive authentication scheme (@bobyrizov) -- [#763](https://github.com/request/request/pull/763) Upgrade tough-cookie to 0.10.0 (@stash) -- [#744](https://github.com/request/request/pull/744) Use Cookie.parse (@lalitkapoor) -- [#757](https://github.com/request/request/pull/757) require aws-sign2 (@mafintosh) - -### v2.31.0 (2014/01/08) -- [#645](https://github.com/request/request/pull/645) update twitter api url to v1.1 (@mick) -- [#746](https://github.com/request/request/pull/746) README: Markdown code highlight (@weakish) -- [#745](https://github.com/request/request/pull/745) updating setCookie example to make it clear that the callback is required (@emkay) -- [#742](https://github.com/request/request/pull/742) Add note about JSON output body type (@iansltx) -- [#741](https://github.com/request/request/pull/741) README example is using old cookie jar api (@emkay) -- [#736](https://github.com/request/request/pull/736) Fix callback arguments documentation (@mmalecki) - -### v2.30.0 (2013/12/13) -- [#732](https://github.com/request/request/pull/732) JSHINT: Creating global 'for' variable. Should be 'for (var ...'. (@Fritz-Lium) -- [#730](https://github.com/request/request/pull/730) better HTTP DIGEST support (@dai-shi) -- [#728](https://github.com/request/request/pull/728) Fix TypeError when calling request.cookie (@scarletmeow) - -### v2.29.0 (2013/12/06) -- [#727](https://github.com/request/request/pull/727) fix requester bug (@jchris) - -### v2.28.0 (2013/12/04) -- [#724](https://github.com/request/request/pull/724) README.md: add custom HTTP Headers example. (@tcort) -- [#719](https://github.com/request/request/pull/719) Made a comment gender neutral. (@unsetbit) -- [#715](https://github.com/request/request/pull/715) Request.multipart no longer crashes when header 'Content-type' present (@pastaclub) -- [#710](https://github.com/request/request/pull/710) Fixing listing in callback part of docs. (@lukasz-zak) -- [#696](https://github.com/request/request/pull/696) Edited README.md for formatting and clarity of phrasing (@Zearin) -- [#694](https://github.com/request/request/pull/694) Typo in README (@VRMink) -- [#690](https://github.com/request/request/pull/690) Handle blank password in basic auth. (@diversario) -- [#682](https://github.com/request/request/pull/682) Optional dependencies (@Turbo87) -- [#683](https://github.com/request/request/pull/683) Travis CI support (@Turbo87) -- [#674](https://github.com/request/request/pull/674) change cookie module,to tough-cookie.please check it . (@sxyizhiren) -- [#666](https://github.com/request/request/pull/666) make `ciphers` and `secureProtocol` to work in https request (@richarddong) -- [#656](https://github.com/request/request/pull/656) Test case for #304. (@diversario) -- [#662](https://github.com/request/request/pull/662) option.tunnel to explicitly disable tunneling (@seanmonstar) -- [#659](https://github.com/request/request/pull/659) fix failure when running with NODE_DEBUG=request, and a test for that (@jrgm) -- [#630](https://github.com/request/request/pull/630) Send random cnonce for HTTP Digest requests (@wprl) - -### v2.27.0 (2013/08/15) -- [#619](https://github.com/request/request/pull/619) decouple things a bit (@joaojeronimo) - -### v2.26.0 (2013/08/07) -- [#613](https://github.com/request/request/pull/613) Fixes #583, moved initialization of self.uri.pathname (@lexander) -- [#605](https://github.com/request/request/pull/605) Only include ":" + pass in Basic Auth if it's defined (fixes #602) (@bendrucker) - -### v2.25.0 (2013/07/23) -- [#596](https://github.com/request/request/pull/596) Global agent is being used when pool is specified (@Cauldrath) -- [#594](https://github.com/request/request/pull/594) Emit complete event when there is no callback (@RomainLK) -- [#601](https://github.com/request/request/pull/601) Fixed a small typo (@michalstanko) -- [#589](https://github.com/request/request/pull/589) Prevent setting headers after they are sent (@geek) -- [#587](https://github.com/request/request/pull/587) Global cookie jar disabled by default (@threepointone) -- [#544](https://github.com/request/request/pull/544) Update http-signature version. (@davidlehn) -- [#581](https://github.com/request/request/pull/581) Fix spelling of "ignoring." (@bigeasy) -- [#568](https://github.com/request/request/pull/568) use agentOptions to create agent when specified in request (@SamPlacette) -- [#564](https://github.com/request/request/pull/564) Fix redirections (@criloz) -- [#541](https://github.com/request/request/pull/541) The exported request function doesn't have an auth method (@tschaub) -- [#542](https://github.com/request/request/pull/542) Expose Request class (@regality) -- [#536](https://github.com/request/request/pull/536) Allow explicitly empty user field for basic authentication. (@mikeando) -- [#532](https://github.com/request/request/pull/532) fix typo (@fredericosilva) -- [#497](https://github.com/request/request/pull/497) Added redirect event (@Cauldrath) -- [#503](https://github.com/request/request/pull/503) Fix basic auth for passwords that contain colons (@tonistiigi) -- [#521](https://github.com/request/request/pull/521) Improving test-localAddress.js (@noway421) -- [#529](https://github.com/request/request/pull/529) dependencies versions bump (@jodaka) -- [#523](https://github.com/request/request/pull/523) Updating dependencies (@noway421) -- [#520](https://github.com/request/request/pull/520) Fixing test-tunnel.js (@noway421) -- [#519](https://github.com/request/request/pull/519) Update internal path state on post-creation QS changes (@jblebrun) -- [#510](https://github.com/request/request/pull/510) Add HTTP Signature support. (@davidlehn) -- [#502](https://github.com/request/request/pull/502) Fix POST (and probably other) requests that are retried after 401 Unauthorized (@nylen) -- [#508](https://github.com/request/request/pull/508) Honor the .strictSSL option when using proxies (tunnel-agent) (@jhs) -- [#512](https://github.com/request/request/pull/512) Make password optional to support the format: http://username@hostname/ (@pajato1) -- [#513](https://github.com/request/request/pull/513) add 'localAddress' support (@yyfrankyy) -- [#498](https://github.com/request/request/pull/498) Moving response emit above setHeaders on destination streams (@kenperkins) -- [#490](https://github.com/request/request/pull/490) Empty response body (3-rd argument) must be passed to callback as an empty string (@Olegas) -- [#479](https://github.com/request/request/pull/479) Changing so if Accept header is explicitly set, sending json does not ov... (@RoryH) -- [#475](https://github.com/request/request/pull/475) Use `unescape` from `querystring` (@shimaore) -- [#473](https://github.com/request/request/pull/473) V0.10 compat (@isaacs) -- [#471](https://github.com/request/request/pull/471) Using querystring library from visionmedia (@kbackowski) -- [#461](https://github.com/request/request/pull/461) Strip the UTF8 BOM from a UTF encoded response (@kppullin) -- [#460](https://github.com/request/request/pull/460) hawk 0.10.0 (@hueniverse) -- [#462](https://github.com/request/request/pull/462) if query params are empty, then request path shouldn't end with a '?' (merges cleanly now) (@jaipandya) -- [#456](https://github.com/request/request/pull/456) hawk 0.9.0 (@hueniverse) -- [#429](https://github.com/request/request/pull/429) Copy options before adding callback. (@nrn, @nfriedly, @youurayy, @jplock, @kapetan, @landeiro, @othiym23, @mmalecki) -- [#454](https://github.com/request/request/pull/454) Destroy the response if present when destroying the request (clean merge) (@mafintosh) -- [#310](https://github.com/request/request/pull/310) Twitter Oauth Stuff Out of Date; Now Updated (@joemccann, @isaacs, @mscdex) -- [#413](https://github.com/request/request/pull/413) rename googledoodle.png to .jpg (@nfriedly, @youurayy, @jplock, @kapetan, @landeiro, @othiym23, @mmalecki) -- [#448](https://github.com/request/request/pull/448) Convenience method for PATCH (@mloar) -- [#444](https://github.com/request/request/pull/444) protect against double callbacks on error path (@spollack) -- [#433](https://github.com/request/request/pull/433) Added support for HTTPS cert & key (@mmalecki) -- [#430](https://github.com/request/request/pull/430) Respect specified {Host,host} headers, not just {host} (@andrewschaaf) -- [#415](https://github.com/request/request/pull/415) Fixed a typo. (@jerem) -- [#338](https://github.com/request/request/pull/338) Add more auth options, including digest support (@nylen) -- [#403](https://github.com/request/request/pull/403) Optimize environment lookup to happen once only (@mmalecki) -- [#398](https://github.com/request/request/pull/398) Add more reporting to tests (@mmalecki) -- [#388](https://github.com/request/request/pull/388) Ensure "safe" toJSON doesn't break EventEmitters (@othiym23) -- [#381](https://github.com/request/request/pull/381) Resolving "Invalid signature. Expected signature base string: " (@landeiro) -- [#380](https://github.com/request/request/pull/380) Fixes missing host header on retried request when using forever agent (@mac-) -- [#376](https://github.com/request/request/pull/376) Headers lost on redirect (@kapetan) -- [#375](https://github.com/request/request/pull/375) Fix for missing oauth_timestamp parameter (@jplock) -- [#374](https://github.com/request/request/pull/374) Correct Host header for proxy tunnel CONNECT (@youurayy) -- [#370](https://github.com/request/request/pull/370) Twitter reverse auth uses x_auth_mode not x_auth_type (@drudge) -- [#369](https://github.com/request/request/pull/369) Don't remove x_auth_mode for Twitter reverse auth (@drudge) -- [#344](https://github.com/request/request/pull/344) Make AWS auth signing find headers correctly (@nlf) -- [#363](https://github.com/request/request/pull/363) rfc3986 on base_uri, now passes tests (@jeffmarshall) -- [#362](https://github.com/request/request/pull/362) Running `rfc3986` on `base_uri` in `oauth.hmacsign` instead of just `encodeURIComponent` (@jeffmarshall) -- [#361](https://github.com/request/request/pull/361) Don't create a Content-Length header if we already have it set (@danjenkins) -- [#360](https://github.com/request/request/pull/360) Delete self._form along with everything else on redirect (@jgautier) -- [#355](https://github.com/request/request/pull/355) stop sending erroneous headers on redirected requests (@azylman) -- [#332](https://github.com/request/request/pull/332) Fix #296 - Only set Content-Type if body exists (@Marsup) -- [#343](https://github.com/request/request/pull/343) Allow AWS to work in more situations, added a note in the README on its usage (@nlf) -- [#320](https://github.com/request/request/pull/320) request.defaults() doesn't need to wrap jar() (@StuartHarris) -- [#322](https://github.com/request/request/pull/322) Fix + test for piped into request bumped into redirect. #321 (@alexindigo) -- [#326](https://github.com/request/request/pull/326) Do not try to remove listener from an undefined connection (@CartoDB) -- [#318](https://github.com/request/request/pull/318) Pass servername to tunneling secure socket creation (@isaacs) -- [#317](https://github.com/request/request/pull/317) Workaround for #313 (@isaacs) -- [#293](https://github.com/request/request/pull/293) Allow parser errors to bubble up to request (@mscdex) -- [#290](https://github.com/request/request/pull/290) A test for #289 (@isaacs) -- [#280](https://github.com/request/request/pull/280) Like in node.js print options if NODE_DEBUG contains the word request (@Filirom1) -- [#207](https://github.com/request/request/pull/207) Fix #206 Change HTTP/HTTPS agent when redirecting between protocols (@isaacs) -- [#214](https://github.com/request/request/pull/214) documenting additional behavior of json option (@jphaas) -- [#272](https://github.com/request/request/pull/272) Boundary begins with CRLF? (@elspoono, @timshadel, @naholyr, @nanodocumet, @TehShrike) -- [#284](https://github.com/request/request/pull/284) Remove stray `console.log()` call in multipart generator. (@bcherry) -- [#241](https://github.com/request/request/pull/241) Composability updates suggested by issue #239 (@polotek) -- [#282](https://github.com/request/request/pull/282) OAuth Authorization header contains non-"oauth_" parameters (@jplock) -- [#279](https://github.com/request/request/pull/279) fix tests with boundary by injecting boundry from header (@benatkin) -- [#273](https://github.com/request/request/pull/273) Pipe back pressure issue (@mafintosh) -- [#268](https://github.com/request/request/pull/268) I'm not OCD seriously (@TehShrike) -- [#263](https://github.com/request/request/pull/263) Bug in OAuth key generation for sha1 (@nanodocumet) -- [#265](https://github.com/request/request/pull/265) uncaughtException when redirected to invalid URI (@naholyr) -- [#262](https://github.com/request/request/pull/262) JSON test should check for equality (@timshadel) -- [#261](https://github.com/request/request/pull/261) Setting 'pool' to 'false' does NOT disable Agent pooling (@timshadel) -- [#249](https://github.com/request/request/pull/249) Fix for the fix of your (closed) issue #89 where self.headers[content-length] is set to 0 for all methods (@sethbridges, @polotek, @zephrax, @jeromegn) -- [#255](https://github.com/request/request/pull/255) multipart allow body === '' ( the empty string ) (@Filirom1) -- [#260](https://github.com/request/request/pull/260) fixed just another leak of 'i' (@sreuter) -- [#246](https://github.com/request/request/pull/246) Fixing the set-cookie header (@jeromegn) -- [#243](https://github.com/request/request/pull/243) Dynamic boundary (@zephrax) -- [#240](https://github.com/request/request/pull/240) don't error when null is passed for options (@polotek) -- [#211](https://github.com/request/request/pull/211) Replace all occurrences of special chars in RFC3986 (@chriso) -- [#224](https://github.com/request/request/pull/224) Multipart content-type change (@janjongboom) -- [#217](https://github.com/request/request/pull/217) need to use Authorization (titlecase) header with Tumblr OAuth (@visnup) -- [#203](https://github.com/request/request/pull/203) Fix cookie and redirect bugs and add auth support for HTTPS tunnel (@milewise) -- [#199](https://github.com/request/request/pull/199) Tunnel (@isaacs) -- [#198](https://github.com/request/request/pull/198) Bugfix on forever usage of util.inherits (@isaacs) -- [#197](https://github.com/request/request/pull/197) Make ForeverAgent work with HTTPS (@isaacs) -- [#193](https://github.com/request/request/pull/193) Fixes GH-119 (@goatslacker) -- [#188](https://github.com/request/request/pull/188) Add abort support to the returned request (@itay) -- [#176](https://github.com/request/request/pull/176) Querystring option (@csainty) -- [#182](https://github.com/request/request/pull/182) Fix request.defaults to support (uri, options, callback) api (@twilson63) -- [#180](https://github.com/request/request/pull/180) Modified the post, put, head and del shortcuts to support uri optional param (@twilson63) -- [#179](https://github.com/request/request/pull/179) fix to add opts in .pipe(stream, opts) (@substack) -- [#177](https://github.com/request/request/pull/177) Issue #173 Support uri as first and optional config as second argument (@twilson63) -- [#170](https://github.com/request/request/pull/170) can't create a cookie in a wrapped request (defaults) (@fabianonunes) -- [#168](https://github.com/request/request/pull/168) Picking off an EasyFix by adding some missing mimetypes. (@serby) -- [#161](https://github.com/request/request/pull/161) Fix cookie jar/headers.cookie collision (#125) (@papandreou) -- [#162](https://github.com/request/request/pull/162) Fix issue #159 (@dpetukhov) -- [#90](https://github.com/request/request/pull/90) add option followAllRedirects to follow post/put redirects (@jroes) -- [#148](https://github.com/request/request/pull/148) Retry Agent (@thejh) -- [#146](https://github.com/request/request/pull/146) Multipart should respect content-type if previously set (@apeace) -- [#144](https://github.com/request/request/pull/144) added "form" option to readme (@petejkim) -- [#133](https://github.com/request/request/pull/133) Fixed cookies parsing (@afanasy) -- [#135](https://github.com/request/request/pull/135) host vs hostname (@iangreenleaf) -- [#132](https://github.com/request/request/pull/132) return the body as a Buffer when encoding is set to null (@jahewson) -- [#112](https://github.com/request/request/pull/112) Support using a custom http-like module (@jhs) -- [#104](https://github.com/request/request/pull/104) Cookie handling contains bugs (@janjongboom) -- [#121](https://github.com/request/request/pull/121) Another patch for cookie handling regression (@jhurliman) -- [#117](https://github.com/request/request/pull/117) Remove the global `i` (@3rd-Eden) -- [#110](https://github.com/request/request/pull/110) Update to Iris Couch URL (@jhs) -- [#86](https://github.com/request/request/pull/86) Can't post binary to multipart requests (@kkaefer) -- [#105](https://github.com/request/request/pull/105) added test for proxy option. (@dominictarr) -- [#102](https://github.com/request/request/pull/102) Implemented cookies - closes issue 82: https://github.com/mikeal/request/issues/82 (@alessioalex) -- [#97](https://github.com/request/request/pull/97) Typo in previous pull causes TypeError in non-0.5.11 versions (@isaacs) -- [#96](https://github.com/request/request/pull/96) Authless parsed url host support (@isaacs) -- [#81](https://github.com/request/request/pull/81) Enhance redirect handling (@danmactough) -- [#78](https://github.com/request/request/pull/78) Don't try to do strictSSL for non-ssl connections (@isaacs) -- [#76](https://github.com/request/request/pull/76) Bug when a request fails and a timeout is set (@Marsup) -- [#70](https://github.com/request/request/pull/70) add test script to package.json (@isaacs, @aheckmann) -- [#73](https://github.com/request/request/pull/73) Fix #71 Respect the strictSSL flag (@isaacs) -- [#69](https://github.com/request/request/pull/69) Flatten chunked requests properly (@isaacs) -- [#67](https://github.com/request/request/pull/67) fixed global variable leaks (@aheckmann) -- [#66](https://github.com/request/request/pull/66) Do not overwrite established content-type headers for read stream deliver (@voodootikigod) -- [#53](https://github.com/request/request/pull/53) Parse json: Issue #51 (@benatkin) -- [#45](https://github.com/request/request/pull/45) Added timeout option (@mbrevoort) -- [#35](https://github.com/request/request/pull/35) The "end" event isn't emitted for some responses (@voxpelli) -- [#31](https://github.com/request/request/pull/31) Error on piping a request to a destination (@tobowers) \ No newline at end of file diff --git a/node_modules/request/CONTRIBUTING.md b/node_modules/request/CONTRIBUTING.md deleted file mode 100644 index 8aa6999..0000000 --- a/node_modules/request/CONTRIBUTING.md +++ /dev/null @@ -1,81 +0,0 @@ - -# Contributing to Request - -:+1::tada: First off, thanks for taking the time to contribute! :tada::+1: - -The following is a set of guidelines for contributing to Request and its packages, which are hosted in the [Request Organization](https://github.com/request) on GitHub. -These are just guidelines, not rules, use your best judgment and feel free to propose changes to this document in a pull request. - - -## Submitting an Issue - -1. Provide a small self **sufficient** code example to **reproduce** the issue. -2. Run your test code using [request-debug](https://github.com/request/request-debug) and copy/paste the results inside the issue. -3. You should **always** use fenced code blocks when submitting code examples or any other formatted output: -
    -  ```js
    -  put your javascript code here
    -  ```
    -
    -  ```
    -  put any other formatted output here,
    -  like for example the one returned from using request-debug
    -  ```
    -  
    - -If the problem cannot be reliably reproduced, the issue will be marked as `Not enough info (see CONTRIBUTING.md)`. - -If the problem is not related to request the issue will be marked as `Help (please use Stackoverflow)`. - - -## Submitting a Pull Request - -1. In almost all of the cases your PR **needs tests**. Make sure you have any. -2. Run `npm test` locally. Fix any errors before pushing to GitHub. -3. After submitting the PR a build will be triggered on TravisCI. Wait for it to ends and make sure all jobs are passing. - - ------------------------------------------ - - -## Becoming a Contributor - -Individuals making significant and valuable contributions are given -commit-access to the project to contribute as they see fit. This project is -more like an open wiki than a standard guarded open source project. - - -## Rules - -There are a few basic ground-rules for contributors: - -1. **No `--force` pushes** or modifying the Git history in any way. -1. **Non-master branches** ought to be used for ongoing work. -1. **Any** change should be added through Pull Request. -1. **External API changes and significant modifications** ought to be subject - to an **internal pull-request** to solicit feedback from other contributors. -1. Internal pull-requests to solicit feedback are *encouraged* for any other - non-trivial contribution but left to the discretion of the contributor. -1. For significant changes wait a full 24 hours before merging so that active - contributors who are distributed throughout the world have a chance to weigh - in. -1. Contributors should attempt to adhere to the prevailing code-style. -1. Run `npm test` locally before submitting your PR, to catch any easy to miss - style & testing issues. To diagnose test failures, there are two ways to - run a single test file: - - `node_modules/.bin/taper tests/test-file.js` - run using the default - [`taper`](https://github.com/nylen/taper) test reporter. - - `node tests/test-file.js` - view the raw - [tap](https://testanything.org/) output. - - -## Releases - -Declaring formal releases remains the prerogative of the project maintainer. - - -## Changes to this arrangement - -This is an experiment and feedback is welcome! This document may also be -subject to pull-requests or changes by contributors where you believe you have -something valuable to add or change. diff --git a/node_modules/request/LICENSE b/node_modules/request/LICENSE deleted file mode 100644 index a4a9aee..0000000 --- a/node_modules/request/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/request/README.md b/node_modules/request/README.md deleted file mode 100644 index 6eaaa05..0000000 --- a/node_modules/request/README.md +++ /dev/null @@ -1,1097 +0,0 @@ - -# Request - Simplified HTTP client - -[![npm package](https://nodei.co/npm/request.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/request/) - -[![Build status](https://img.shields.io/travis/request/request/master.svg?style=flat-square)](https://travis-ci.org/request/request) -[![Coverage](https://img.shields.io/codecov/c/github/request/request.svg?style=flat-square)](https://codecov.io/github/request/request?branch=master) -[![Coverage](https://img.shields.io/coveralls/request/request.svg?style=flat-square)](https://coveralls.io/r/request/request) -[![Dependency Status](https://img.shields.io/david/request/request.svg?style=flat-square)](https://david-dm.org/request/request) -[![Known Vulnerabilities](https://snyk.io/test/npm/request/badge.svg?style=flat-square)](https://snyk.io/test/npm/request) -[![Gitter](https://img.shields.io/badge/gitter-join_chat-blue.svg?style=flat-square)](https://gitter.im/request/request?utm_source=badge) - - -## Super simple to use - -Request is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default. - -```js -var request = require('request'); -request('http://www.google.com', function (error, response, body) { - if (!error && response.statusCode == 200) { - console.log(body) // Show the HTML for the Google homepage. - } -}) -``` - - -## Table of contents - -- [Streaming](#streaming) -- [Forms](#forms) -- [HTTP Authentication](#http-authentication) -- [Custom HTTP Headers](#custom-http-headers) -- [OAuth Signing](#oauth-signing) -- [Proxies](#proxies) -- [Unix Domain Sockets](#unix-domain-sockets) -- [TLS/SSL Protocol](#tlsssl-protocol) -- [Support for HAR 1.2](#support-for-har-12) -- [**All Available Options**](#requestoptions-callback) - -Request also offers [convenience methods](#convenience-methods) like -`request.defaults` and `request.post`, and there are -lots of [usage examples](#examples) and several -[debugging techniques](#debugging). - - ---- - - -## Streaming - -You can stream any response to a file stream. - -```js -request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) -``` - -You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one). - -```js -fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json')) -``` - -Request can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers. - -```js -request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png')) -``` - -Request emits a "response" event when a response is received. The `response` argument will be an instance of [http.IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage). - -```js -request - .get('http://google.com/img.png') - .on('response', function(response) { - console.log(response.statusCode) // 200 - console.log(response.headers['content-type']) // 'image/png' - }) - .pipe(request.put('http://mysite.com/img.png')) -``` - -To easily handle errors when streaming requests, listen to the `error` event before piping: - -```js -request - .get('http://mysite.com/doodle.png') - .on('error', function(err) { - console.log(err) - }) - .pipe(fs.createWriteStream('doodle.png')) -``` - -Now let’s get fancy. - -```js -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - if (req.method === 'PUT') { - req.pipe(request.put('http://mysite.com/doodle.png')) - } else if (req.method === 'GET' || req.method === 'HEAD') { - request.get('http://mysite.com/doodle.png').pipe(resp) - } - } -}) -``` - -You can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do: - -```js -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - var x = request('http://mysite.com/doodle.png') - req.pipe(x) - x.pipe(resp) - } -}) -``` - -And since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :) - -```js -req.pipe(request('http://mysite.com/doodle.png')).pipe(resp) -``` - -Also, none of this new functionality conflicts with requests previous features, it just expands them. - -```js -var r = request.defaults({'proxy':'http://localproxy.com'}) - -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - r.get('http://google.com/doodle.png').pipe(resp) - } -}) -``` - -You can still use intermediate proxies, the requests will still follow HTTP forwards, etc. - -[back to top](#table-of-contents) - - ---- - - -## Forms - -`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API. - - -#### application/x-www-form-urlencoded (URL-Encoded Forms) - -URL-encoded forms are simple. - -```js -request.post('http://service.com/upload', {form:{key:'value'}}) -// or -request.post('http://service.com/upload').form({key:'value'}) -// or -request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ }) -``` - - -#### multipart/form-data (Multipart Form Uploads) - -For `multipart/form-data` we use the [form-data](https://github.com/form-data/form-data) library by [@felixge](https://github.com/felixge). For the most cases, you can pass your upload form data via the `formData` option. - - -```js -var formData = { - // Pass a simple key-value pair - my_field: 'my_value', - // Pass data via Buffers - my_buffer: new Buffer([1, 2, 3]), - // Pass data via Streams - my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), - // Pass multiple values /w an Array - attachments: [ - fs.createReadStream(__dirname + '/attachment1.jpg'), - fs.createReadStream(__dirname + '/attachment2.jpg') - ], - // Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS} - // Use case: for some types of streams, you'll need to provide "file"-related information manually. - // See the `form-data` README for more information about options: https://github.com/form-data/form-data - custom_file: { - value: fs.createReadStream('/dev/urandom'), - options: { - filename: 'topsecret.jpg', - contentType: 'image/jpg' - } - } -}; -request.post({url:'http://service.com/upload', formData: formData}, function optionalCallback(err, httpResponse, body) { - if (err) { - return console.error('upload failed:', err); - } - console.log('Upload successful! Server responded with:', body); -}); -``` - -For advanced cases, you can access the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.) - -```js -// NOTE: Advanced use-case, for normal use see 'formData' usage above -var r = request.post('http://service.com/upload', function optionalCallback(err, httpResponse, body) {...}) -var form = r.form(); -form.append('my_field', 'my_value'); -form.append('my_buffer', new Buffer([1, 2, 3])); -form.append('custom_file', fs.createReadStream(__dirname + '/unicycle.jpg'), {filename: 'unicycle.jpg'}); -``` -See the [form-data README](https://github.com/form-data/form-data) for more information & examples. - - -#### multipart/related - -Some variations in different HTTP implementations require a newline/CRLF before, after, or both before and after the boundary of a `multipart/related` request (using the multipart option). This has been observed in the .NET WebAPI version 4.0. You can turn on a boundary preambleCRLF or postamble by passing them as `true` to your request options. - -```js - request({ - method: 'PUT', - preambleCRLF: true, - postambleCRLF: true, - uri: 'http://service.com/upload', - multipart: [ - { - 'content-type': 'application/json', - body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - }, - { body: 'I am an attachment' }, - { body: fs.createReadStream('image.png') } - ], - // alternatively pass an object containing additional options - multipart: { - chunked: false, - data: [ - { - 'content-type': 'application/json', - body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - }, - { body: 'I am an attachment' } - ] - } - }, - function (error, response, body) { - if (error) { - return console.error('upload failed:', error); - } - console.log('Upload successful! Server responded with:', body); - }) -``` - -[back to top](#table-of-contents) - - ---- - - -## HTTP Authentication - -```js -request.get('http://some.server.com/').auth('username', 'password', false); -// or -request.get('http://some.server.com/', { - 'auth': { - 'user': 'username', - 'pass': 'password', - 'sendImmediately': false - } -}); -// or -request.get('http://some.server.com/').auth(null, null, true, 'bearerToken'); -// or -request.get('http://some.server.com/', { - 'auth': { - 'bearer': 'bearerToken' - } -}); -``` - -If passed as an option, `auth` should be a hash containing values: - -- `user` || `username` -- `pass` || `password` -- `sendImmediately` (optional) -- `bearer` (optional) - -The method form takes parameters -`auth(username, password, sendImmediately, bearer)`. - -`sendImmediately` defaults to `true`, which causes a basic or bearer -authentication header to be sent. If `sendImmediately` is `false`, then -`request` will retry with a proper authentication header after receiving a -`401` response from the server (which must contain a `WWW-Authenticate` header -indicating the required authentication method). - -Note that you can also specify basic authentication using the URL itself, as -detailed in [RFC 1738](http://www.ietf.org/rfc/rfc1738.txt). Simply pass the -`user:password` before the host with an `@` sign: - -```js -var username = 'username', - password = 'password', - url = 'http://' + username + ':' + password + '@some.server.com'; - -request({url: url}, function (error, response, body) { - // Do more stuff with 'body' here -}); -``` - -Digest authentication is supported, but it only works with `sendImmediately` -set to `false`; otherwise `request` will send basic authentication on the -initial request, which will probably cause the request to fail. - -Bearer authentication is supported, and is activated when the `bearer` value is -available. The value may be either a `String` or a `Function` returning a -`String`. Using a function to supply the bearer token is particularly useful if -used in conjunction with `defaults` to allow a single function to supply the -last known token at the time of sending a request, or to compute one on the fly. - -[back to top](#table-of-contents) - - ---- - - -## Custom HTTP Headers - -HTTP Headers, such as `User-Agent`, can be set in the `options` object. -In the example below, we call the github API to find out the number -of stars and forks for the request repository. This requires a -custom `User-Agent` header as well as https. - -```js -var request = require('request'); - -var options = { - url: 'https://api.github.com/repos/request/request', - headers: { - 'User-Agent': 'request' - } -}; - -function callback(error, response, body) { - if (!error && response.statusCode == 200) { - var info = JSON.parse(body); - console.log(info.stargazers_count + " Stars"); - console.log(info.forks_count + " Forks"); - } -} - -request(options, callback); -``` - -[back to top](#table-of-contents) - - ---- - - -## OAuth Signing - -[OAuth version 1.0](https://tools.ietf.org/html/rfc5849) is supported. The -default signing algorithm is -[HMAC-SHA1](https://tools.ietf.org/html/rfc5849#section-3.4.2): - -```js -// OAuth1.0 - 3-legged server side flow (Twitter example) -// step 1 -var qs = require('querystring') - , oauth = - { callback: 'http://mysite.com/callback/' - , consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - } - , url = 'https://api.twitter.com/oauth/request_token' - ; -request.post({url:url, oauth:oauth}, function (e, r, body) { - // Ideally, you would take the body in the response - // and construct a URL that a user clicks on (like a sign in button). - // The verifier is only available in the response after a user has - // verified with twitter that they are authorizing your app. - - // step 2 - var req_data = qs.parse(body) - var uri = 'https://api.twitter.com/oauth/authenticate' - + '?' + qs.stringify({oauth_token: req_data.oauth_token}) - // redirect the user to the authorize uri - - // step 3 - // after the user is redirected back to your server - var auth_data = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: auth_data.oauth_token - , token_secret: req_data.oauth_token_secret - , verifier: auth_data.oauth_verifier - } - , url = 'https://api.twitter.com/oauth/access_token' - ; - request.post({url:url, oauth:oauth}, function (e, r, body) { - // ready to make signed requests on behalf of the user - var perm_data = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: perm_data.oauth_token - , token_secret: perm_data.oauth_token_secret - } - , url = 'https://api.twitter.com/1.1/users/show.json' - , qs = - { screen_name: perm_data.screen_name - , user_id: perm_data.user_id - } - ; - request.get({url:url, oauth:oauth, qs:qs, json:true}, function (e, r, user) { - console.log(user) - }) - }) -}) -``` - -For [RSA-SHA1 signing](https://tools.ietf.org/html/rfc5849#section-3.4.3), make -the following changes to the OAuth options object: -* Pass `signature_method : 'RSA-SHA1'` -* Instead of `consumer_secret`, specify a `private_key` string in - [PEM format](http://how2ssl.com/articles/working_with_pem_files/) - -For [PLAINTEXT signing](http://oauth.net/core/1.0/#anchor22), make -the following changes to the OAuth options object: -* Pass `signature_method : 'PLAINTEXT'` - -To send OAuth parameters via query params or in a post body as described in The -[Consumer Request Parameters](http://oauth.net/core/1.0/#consumer_req_param) -section of the oauth1 spec: -* Pass `transport_method : 'query'` or `transport_method : 'body'` in the OAuth - options object. -* `transport_method` defaults to `'header'` - -To use [Request Body Hash](https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html) you can either -* Manually generate the body hash and pass it as a string `body_hash: '...'` -* Automatically generate the body hash by passing `body_hash: true` - -[back to top](#table-of-contents) - - ---- - - -## Proxies - -If you specify a `proxy` option, then the request (and any subsequent -redirects) will be sent via a connection to the proxy server. - -If your endpoint is an `https` url, and you are using a proxy, then -request will send a `CONNECT` request to the proxy server *first*, and -then use the supplied connection to connect to the endpoint. - -That is, first it will make a request like: - -``` -HTTP/1.1 CONNECT endpoint-server.com:80 -Host: proxy-server.com -User-Agent: whatever user agent you specify -``` - -and then the proxy server make a TCP connection to `endpoint-server` -on port `80`, and return a response that looks like: - -``` -HTTP/1.1 200 OK -``` - -At this point, the connection is left open, and the client is -communicating directly with the `endpoint-server.com` machine. - -See [the wikipedia page on HTTP Tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel) -for more information. - -By default, when proxying `http` traffic, request will simply make a -standard proxied `http` request. This is done by making the `url` -section of the initial line of the request a fully qualified url to -the endpoint. - -For example, it will make a single request that looks like: - -``` -HTTP/1.1 GET http://endpoint-server.com/some-url -Host: proxy-server.com -Other-Headers: all go here - -request body or whatever -``` - -Because a pure "http over http" tunnel offers no additional security -or other features, it is generally simpler to go with a -straightforward HTTP proxy in this case. However, if you would like -to force a tunneling proxy, you may set the `tunnel` option to `true`. - -You can also make a standard proxied `http` request by explicitly setting -`tunnel : false`, but **note that this will allow the proxy to see the traffic -to/from the destination server**. - -If you are using a tunneling proxy, you may set the -`proxyHeaderWhiteList` to share certain headers with the proxy. - -You can also set the `proxyHeaderExclusiveList` to share certain -headers only with the proxy and not with destination host. - -By default, this set is: - -``` -accept -accept-charset -accept-encoding -accept-language -accept-ranges -cache-control -content-encoding -content-language -content-length -content-location -content-md5 -content-range -content-type -connection -date -expect -max-forwards -pragma -proxy-authorization -referer -te -transfer-encoding -user-agent -via -``` - -Note that, when using a tunneling proxy, the `proxy-authorization` -header and any headers from custom `proxyHeaderExclusiveList` are -*never* sent to the endpoint server, but only to the proxy server. - - -### Controlling proxy behaviour using environment variables - -The following environment variables are respected by `request`: - - * `HTTP_PROXY` / `http_proxy` - * `HTTPS_PROXY` / `https_proxy` - * `NO_PROXY` / `no_proxy` - -When `HTTP_PROXY` / `http_proxy` are set, they will be used to proxy non-SSL requests that do not have an explicit `proxy` configuration option present. Similarly, `HTTPS_PROXY` / `https_proxy` will be respected for SSL requests that do not have an explicit `proxy` configuration option. It is valid to define a proxy in one of the environment variables, but then override it for a specific request, using the `proxy` configuration option. Furthermore, the `proxy` configuration option can be explicitly set to false / null to opt out of proxying altogether for that request. - -`request` is also aware of the `NO_PROXY`/`no_proxy` environment variables. These variables provide a granular way to opt out of proxying, on a per-host basis. It should contain a comma separated list of hosts to opt out of proxying. It is also possible to opt of proxying when a particular destination port is used. Finally, the variable may be set to `*` to opt out of the implicit proxy configuration of the other environment variables. - -Here's some examples of valid `no_proxy` values: - - * `google.com` - don't proxy HTTP/HTTPS requests to Google. - * `google.com:443` - don't proxy HTTPS requests to Google, but *do* proxy HTTP requests to Google. - * `google.com:443, yahoo.com:80` - don't proxy HTTPS requests to Google, and don't proxy HTTP requests to Yahoo! - * `*` - ignore `https_proxy`/`http_proxy` environment variables altogether. - -[back to top](#table-of-contents) - - ---- - - -## UNIX Domain Sockets - -`request` supports making requests to [UNIX Domain Sockets](https://en.wikipedia.org/wiki/Unix_domain_socket). To make one, use the following URL scheme: - -```js -/* Pattern */ 'http://unix:SOCKET:PATH' -/* Example */ request.get('http://unix:/absolute/path/to/unix.socket:/request/path') -``` - -Note: The `SOCKET` path is assumed to be absolute to the root of the host file system. - -[back to top](#table-of-contents) - - ---- - - -## TLS/SSL Protocol - -TLS/SSL Protocol options, such as `cert`, `key` and `passphrase`, can be -set directly in `options` object, in the `agentOptions` property of the `options` object, or even in `https.globalAgent.options`. Keep in mind that, although `agentOptions` allows for a slightly wider range of configurations, the recommended way is via `options` object directly, as using `agentOptions` or `https.globalAgent.options` would not be applied in the same way in proxied environments (as data travels through a TLS connection instead of an http/https agent). - -```js -var fs = require('fs') - , path = require('path') - , certFile = path.resolve(__dirname, 'ssl/client.crt') - , keyFile = path.resolve(__dirname, 'ssl/client.key') - , caFile = path.resolve(__dirname, 'ssl/ca.cert.pem') - , request = require('request'); - -var options = { - url: 'https://api.some-server.com/', - cert: fs.readFileSync(certFile), - key: fs.readFileSync(keyFile), - passphrase: 'password', - ca: fs.readFileSync(caFile) -}; - -request.get(options); -``` - -### Using `options.agentOptions` - -In the example below, we call an API requires client side SSL certificate -(in PEM format) with passphrase protected private key (in PEM format) and disable the SSLv3 protocol: - -```js -var fs = require('fs') - , path = require('path') - , certFile = path.resolve(__dirname, 'ssl/client.crt') - , keyFile = path.resolve(__dirname, 'ssl/client.key') - , request = require('request'); - -var options = { - url: 'https://api.some-server.com/', - agentOptions: { - cert: fs.readFileSync(certFile), - key: fs.readFileSync(keyFile), - // Or use `pfx` property replacing `cert` and `key` when using private key, certificate and CA certs in PFX or PKCS12 format: - // pfx: fs.readFileSync(pfxFilePath), - passphrase: 'password', - securityOptions: 'SSL_OP_NO_SSLv3' - } -}; - -request.get(options); -``` - -It is able to force using SSLv3 only by specifying `secureProtocol`: - -```js -request.get({ - url: 'https://api.some-server.com/', - agentOptions: { - secureProtocol: 'SSLv3_method' - } -}); -``` - -It is possible to accept other certificates than those signed by generally allowed Certificate Authorities (CAs). -This can be useful, for example, when using self-signed certificates. -To require a different root certificate, you can specify the signing CA by adding the contents of the CA's certificate file to the `agentOptions`. -The certificate the domain presents must be signed by the root certificate specified: - -```js -request.get({ - url: 'https://api.some-server.com/', - agentOptions: { - ca: fs.readFileSync('ca.cert.pem') - } -}); -``` - -[back to top](#table-of-contents) - - ---- - -## Support for HAR 1.2 - -The `options.har` property will override the values: `url`, `method`, `qs`, `headers`, `form`, `formData`, `body`, `json`, as well as construct multipart data and read files from disk when `request.postData.params[].fileName` is present without a matching `value`. - -a validation step will check if the HAR Request format matches the latest spec (v1.2) and will skip parsing if not matching. - -```js - var request = require('request') - request({ - // will be ignored - method: 'GET', - uri: 'http://www.google.com', - - // HTTP Archive Request Object - har: { - url: 'http://www.mockbin.com/har', - method: 'POST', - headers: [ - { - name: 'content-type', - value: 'application/x-www-form-urlencoded' - } - ], - postData: { - mimeType: 'application/x-www-form-urlencoded', - params: [ - { - name: 'foo', - value: 'bar' - }, - { - name: 'hello', - value: 'world' - } - ] - } - } - }) - - // a POST request will be sent to http://www.mockbin.com - // with body an application/x-www-form-urlencoded body: - // foo=bar&hello=world -``` - -[back to top](#table-of-contents) - - ---- - -## request(options, callback) - -The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional. - -- `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()` -- `baseUrl` - fully qualified uri string used as the base url. Most useful with `request.defaults`, for example when you want to do many requests to the same domain. If `baseUrl` is `https://example.com/api/`, then requesting `/end/point?test=true` will fetch `https://example.com/api/end/point?test=true`. When `baseUrl` is given, `uri` must also be a string. -- `method` - http method (default: `"GET"`) -- `headers` - http headers (default: `{}`) - ---- - -- `qs` - object containing querystring values to be appended to the `uri` -- `qsParseOptions` - object containing options to pass to the [qs.parse](https://github.com/hapijs/qs#parsing-objects) method. Alternatively pass options to the [querystring.parse](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_parse_str_sep_eq_options) method using this format `{sep:';', eq:':', options:{}}` -- `qsStringifyOptions` - object containing options to pass to the [qs.stringify](https://github.com/hapijs/qs#stringifying) method. Alternatively pass options to the [querystring.stringify](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_stringify_obj_sep_eq_options) method using this format `{sep:';', eq:':', options:{}}`. For example, to change the way arrays are converted to query strings using the `qs` module pass the `arrayFormat` option with one of `indices|brackets|repeat` -- `useQuerystring` - If true, use `querystring` to stringify and parse - querystrings, otherwise use `qs` (default: `false`). Set this option to - `true` if you need arrays to be serialized as `foo=bar&foo=baz` instead of the - default `foo[0]=bar&foo[1]=baz`. - ---- - -- `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer`, `String` or `ReadStream`. If `json` is `true`, then `body` must be a JSON-serializable object. -- `form` - when passed an object or a querystring, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded` header. When passed no options, a `FormData` instance is returned (and is piped to request). See "Forms" section above. -- `formData` - Data to pass for a `multipart/form-data` request. See - [Forms](#forms) section above. -- `multipart` - array of objects which contain their own headers and `body` - attributes. Sends a `multipart/related` request. See [Forms](#forms) section - above. - - Alternatively you can pass in an object `{chunked: false, data: []}` where - `chunked` is used to specify whether the request is sent in - [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding) - In non-chunked requests, data items with body streams are not allowed. -- `preambleCRLF` - append a newline/CRLF before the boundary of your `multipart/form-data` request. -- `postambleCRLF` - append a newline/CRLF at the end of the boundary of your `multipart/form-data` request. -- `json` - sets `body` to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON. -- `jsonReviver` - a [reviver function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) that will be passed to `JSON.parse()` when parsing a JSON response body. -- `jsonReplacer` - a [replacer function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) that will be passed to `JSON.stringify()` when stringifying a JSON request body. - ---- - -- `auth` - A hash containing values `user` || `username`, `pass` || `password`, and `sendImmediately` (optional). See documentation above. -- `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above. -- `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example). -- `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services). If you want to use AWS sign version 4 use the parameter `sign_version` with value `4` otherwise the default is version 2. **Note:** you need to `npm install aws4` first. -- `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options. - ---- - -- `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`). This property can also be implemented as function which gets `response` object as a single argument and should return `true` if redirects should continue or `false` otherwise. -- `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`) -- `maxRedirects` - the maximum number of redirects to follow (default: `10`) -- `removeRefererHeader` - removes the referer header when a redirect happens (default: `false`). **Note:** if true, referer header set in the initial request is preserved during redirect chain. - ---- - -- `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. Anything else **(including the default value of `undefined`)** will be passed as the [encoding](http://nodejs.org/api/buffer.html#buffer_buffer) parameter to `toString()` (meaning this is effectively `utf8` by default). (**Note:** if you expect binary data, you should set `encoding: null`.) -- `gzip` - If `true`, add an `Accept-Encoding` header to request compressed content encodings from the server (if not already present) and decode supported content encodings in the response. **Note:** Automatic decoding of the response content is performed on the body data returned through `request` (both through the `request` stream and passed to the callback function) but is not performed on the `response` stream (available from the `response` event) which is the unmodified `http.IncomingMessage` object which may contain compressed data. See example below. -- `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section) - ---- - -- `agent` - `http(s).Agent` instance to use -- `agentClass` - alternatively specify your agent's class name -- `agentOptions` - and pass its options. **Note:** for HTTPS see [tls API doc for TLS/SSL options](http://nodejs.org/api/tls.html#tls_tls_connect_options_callback) and the [documentation above](#using-optionsagentoptions). -- `forever` - set to `true` to use the [forever-agent](https://github.com/request/forever-agent) **Note:** Defaults to `http(s).Agent({keepAlive:true})` in node 0.12+ -- `pool` - An object describing which agents to use for the request. If this option is omitted the request will use the global agent (as long as your options allow for it). Otherwise, request will search the pool for your custom agent. If no custom agent is found, a new agent will be created and added to the pool. **Note:** `pool` is used only when the `agent` option is not specified. - - A `maxSockets` property can also be provided on the `pool` object to set the max number of sockets for all agents created (ex: `pool: {maxSockets: Infinity}`). - - Note that if you are sending multiple requests in a loop and creating - multiple new `pool` objects, `maxSockets` will not work as intended. To - work around this, either use [`request.defaults`](#requestdefaultsoptions) - with your pool options or create the pool object with the `maxSockets` - property outside of the loop. -- `timeout` - Integer containing the number of milliseconds to wait for a -server to send response headers (and start the response body) before aborting -the request. Note that if the underlying TCP connection cannot be established, -the OS-wide TCP connection timeout will overrule the `timeout` option ([the -default in Linux can be anywhere from 20-120 seconds][linux-timeout]). - -[linux-timeout]: http://www.sekuda.com/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout - ---- - -- `localAddress` - Local interface to bind for network connections. -- `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`) -- `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option. -- `tunnel` - controls the behavior of - [HTTP `CONNECT` tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_tunneling) - as follows: - - `undefined` (default) - `true` if the destination is `https`, `false` otherwise - - `true` - always tunnel to the destination by making a `CONNECT` request to - the proxy - - `false` - request the destination as a `GET` request. -- `proxyHeaderWhiteList` - A whitelist of headers to send to a - tunneling proxy. -- `proxyHeaderExclusiveList` - A whitelist of headers to send - exclusively to a tunneling proxy and not to destination. - ---- - -- `time` - If `true`, the request-response cycle (including all redirects) is timed at millisecond resolution, and the result provided on the response's `elapsedTime` property. The `responseStartTime` property is also available to indicate the timestamp when the response begins. -- `har` - A [HAR 1.2 Request Object](http://www.softwareishard.com/blog/har-12-spec/#request), will be processed from HAR format into options overwriting matching values *(see the [HAR 1.2 section](#support-for-har-1.2) for details)* -- `callback` - alternatively pass the request's callback in the options object - -The callback argument gets 3 arguments: - -1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object) -2. An [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) object -3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied) - -[back to top](#table-of-contents) - - ---- - -## Convenience methods - -There are also shorthand methods for different HTTP METHODs and some other conveniences. - - -### request.defaults(options) - -This method **returns a wrapper** around the normal request API that defaults -to whatever options you pass to it. - -**Note:** `request.defaults()` **does not** modify the global request API; -instead, it **returns a wrapper** that has your default settings applied to it. - -**Note:** You can call `.defaults()` on the wrapper that is returned from -`request.defaults` to add/override defaults that were previously defaulted. - -For example: -```js -//requests using baseRequest() will set the 'x-token' header -var baseRequest = request.defaults({ - headers: {'x-token': 'my-token'} -}) - -//requests using specialRequest() will include the 'x-token' header set in -//baseRequest and will also include the 'special' header -var specialRequest = baseRequest.defaults({ - headers: {special: 'special value'} -}) -``` - -### request.put - -Same as `request()`, but defaults to `method: "PUT"`. - -```js -request.put(url) -``` - -### request.patch - -Same as `request()`, but defaults to `method: "PATCH"`. - -```js -request.patch(url) -``` - -### request.post - -Same as `request()`, but defaults to `method: "POST"`. - -```js -request.post(url) -``` - -### request.head - -Same as `request()`, but defaults to `method: "HEAD"`. - -```js -request.head(url) -``` - -### request.del / request.delete - -Same as `request()`, but defaults to `method: "DELETE"`. - -```js -request.del(url) -request.delete(url) -``` - -### request.get - -Same as `request()` (for uniformity). - -```js -request.get(url) -``` -### request.cookie - -Function that creates a new cookie. - -```js -request.cookie('key1=value1') -``` -### request.jar() - -Function that creates a new cookie jar. - -```js -request.jar() -``` - -[back to top](#table-of-contents) - - ---- - - -## Debugging - -There are at least three ways to debug the operation of `request`: - -1. Launch the node process like `NODE_DEBUG=request node script.js` - (`lib,request,otherlib` works too). - -2. Set `require('request').debug = true` at any time (this does the same thing - as #1). - -3. Use the [request-debug module](https://github.com/request/request-debug) to - view request and response headers and bodies. - -[back to top](#table-of-contents) - - ---- - -## Timeouts - -Most requests to external servers should have a timeout attached, in case the -server is not responding in a timely manner. Without a timeout, your code may -have a socket open/consume resources for minutes or more. - -There are two main types of timeouts: **connection timeouts** and **read -timeouts**. A connect timeout occurs if the timeout is hit while your client is -attempting to establish a connection to a remote machine (corresponding to the -[connect() call][connect] on the socket). A read timeout occurs any time the -server is too slow to send back a part of the response. - -These two situations have widely different implications for what went wrong -with the request, so it's useful to be able to distinguish them. You can detect -timeout errors by checking `err.code` for an 'ETIMEDOUT' value. Further, you -can detect whether the timeout was a connection timeout by checking if the -`err.connect` property is set to `true`. - -```js -request.get('http://10.255.255.1', {timeout: 1500}, function(err) { - console.log(err.code === 'ETIMEDOUT'); - // Set to `true` if the timeout was a connection timeout, `false` or - // `undefined` otherwise. - console.log(err.connect === true); - process.exit(0); -}); -``` - -[connect]: http://linux.die.net/man/2/connect - -## Examples: - -```js - var request = require('request') - , rand = Math.floor(Math.random()*100000000).toString() - ; - request( - { method: 'PUT' - , uri: 'http://mikeal.iriscouch.com/testjs/' + rand - , multipart: - [ { 'content-type': 'application/json' - , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - } - , { body: 'I am an attachment' } - ] - } - , function (error, response, body) { - if(response.statusCode == 201){ - console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand) - } else { - console.log('error: '+ response.statusCode) - console.log(body) - } - } - ) -``` - -For backwards-compatibility, response compression is not supported by default. -To accept gzip-compressed responses, set the `gzip` option to `true`. Note -that the body data passed through `request` is automatically decompressed -while the response object is unmodified and will contain compressed data if -the server sent a compressed response. - -```js - var request = require('request') - request( - { method: 'GET' - , uri: 'http://www.google.com' - , gzip: true - } - , function (error, response, body) { - // body is the decompressed response body - console.log('server encoded the data as: ' + (response.headers['content-encoding'] || 'identity')) - console.log('the decoded data is: ' + body) - } - ).on('data', function(data) { - // decompressed data as it is received - console.log('decoded chunk: ' + data) - }) - .on('response', function(response) { - // unmodified http.IncomingMessage object - response.on('data', function(data) { - // compressed data as it is received - console.log('received ' + data.length + ' bytes of compressed data') - }) - }) -``` - -Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`). - -```js -var request = request.defaults({jar: true}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` - -To use a custom cookie jar (instead of `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`) - -```js -var j = request.jar() -var request = request.defaults({jar:j}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` - -OR - -```js -var j = request.jar(); -var cookie = request.cookie('key1=value1'); -var url = 'http://www.google.com'; -j.setCookie(cookie, url); -request({url: url, jar: j}, function () { - request('http://images.google.com') -}) -``` - -To use a custom cookie store (such as a -[`FileCookieStore`](https://github.com/mitsuru/tough-cookie-filestore) -which supports saving to and restoring from JSON files), pass it as a parameter -to `request.jar()`: - -```js -var FileCookieStore = require('tough-cookie-filestore'); -// NOTE - currently the 'cookies.json' file must already exist! -var j = request.jar(new FileCookieStore('cookies.json')); -request = request.defaults({ jar : j }) -request('http://www.google.com', function() { - request('http://images.google.com') -}) -``` - -The cookie store must be a -[`tough-cookie`](https://github.com/SalesforceEng/tough-cookie) -store and it must support synchronous operations; see the -[`CookieStore` API docs](https://github.com/SalesforceEng/tough-cookie#cookiestore-api) -for details. - -To inspect your cookie jar after a request: - -```js -var j = request.jar() -request({url: 'http://www.google.com', jar: j}, function () { - var cookie_string = j.getCookieString(url); // "key1=value1; key2=value2; ..." - var cookies = j.getCookies(url); - // [{key: 'key1', value: 'value1', domain: "www.google.com", ...}, ...] -}) -``` - -[back to top](#table-of-contents) diff --git a/node_modules/request/codecov.yml b/node_modules/request/codecov.yml deleted file mode 100644 index acd3f33..0000000 --- a/node_modules/request/codecov.yml +++ /dev/null @@ -1,2 +0,0 @@ - -comment: false diff --git a/node_modules/request/index.js b/node_modules/request/index.js deleted file mode 100755 index 911a90d..0000000 --- a/node_modules/request/index.js +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2010-2012 Mikeal Rogers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -'use strict' - -var extend = require('extend') - , cookies = require('./lib/cookies') - , helpers = require('./lib/helpers') - -var isFunction = helpers.isFunction - , paramsHaveRequestBody = helpers.paramsHaveRequestBody - - -// organize params for patch, post, put, head, del -function initParams(uri, options, callback) { - if (typeof options === 'function') { - callback = options - } - - var params = {} - if (typeof options === 'object') { - extend(params, options, {uri: uri}) - } else if (typeof uri === 'string') { - extend(params, {uri: uri}) - } else { - extend(params, uri) - } - - params.callback = callback || params.callback - return params -} - -function request (uri, options, callback) { - if (typeof uri === 'undefined') { - throw new Error('undefined is not a valid uri or options object.') - } - - var params = initParams(uri, options, callback) - - if (params.method === 'HEAD' && paramsHaveRequestBody(params)) { - throw new Error('HTTP HEAD requests MUST NOT include a request body.') - } - - return new request.Request(params) -} - -function verbFunc (verb) { - var method = verb.toUpperCase() - return function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.method = method - return request(params, params.callback) - } -} - -// define like this to please codeintel/intellisense IDEs -request.get = verbFunc('get') -request.head = verbFunc('head') -request.post = verbFunc('post') -request.put = verbFunc('put') -request.patch = verbFunc('patch') -request.del = verbFunc('delete') -request['delete'] = verbFunc('delete') - -request.jar = function (store) { - return cookies.jar(store) -} - -request.cookie = function (str) { - return cookies.parse(str) -} - -function wrapRequestMethod (method, options, requester, verb) { - - return function (uri, opts, callback) { - var params = initParams(uri, opts, callback) - - var target = {} - extend(true, target, options, params) - - target.pool = params.pool || options.pool - - if (verb) { - target.method = verb.toUpperCase() - } - - if (isFunction(requester)) { - method = requester - } - - return method(target, target.callback) - } -} - -request.defaults = function (options, requester) { - var self = this - - options = options || {} - - if (typeof options === 'function') { - requester = options - options = {} - } - - var defaults = wrapRequestMethod(self, options, requester) - - var verbs = ['get', 'head', 'post', 'put', 'patch', 'del', 'delete'] - verbs.forEach(function(verb) { - defaults[verb] = wrapRequestMethod(self[verb], options, requester, verb) - }) - - defaults.cookie = wrapRequestMethod(self.cookie, options, requester) - defaults.jar = self.jar - defaults.defaults = self.defaults - return defaults -} - -request.forever = function (agentOptions, optionsArg) { - var options = {} - if (optionsArg) { - extend(options, optionsArg) - } - if (agentOptions) { - options.agentOptions = agentOptions - } - - options.forever = true - return request.defaults(options) -} - -// Exports - -module.exports = request -request.Request = require('./request') -request.initParams = initParams - -// Backwards compatibility for request.debug -Object.defineProperty(request, 'debug', { - enumerable : true, - get : function() { - return request.Request.debug - }, - set : function(debug) { - request.Request.debug = debug - } -}) diff --git a/node_modules/request/lib/auth.js b/node_modules/request/lib/auth.js deleted file mode 100644 index 1cb6952..0000000 --- a/node_modules/request/lib/auth.js +++ /dev/null @@ -1,168 +0,0 @@ -'use strict' - -var caseless = require('caseless') - , uuid = require('node-uuid') - , helpers = require('./helpers') - -var md5 = helpers.md5 - , toBase64 = helpers.toBase64 - - -function Auth (request) { - // define all public properties here - this.request = request - this.hasAuth = false - this.sentAuth = false - this.bearerToken = null - this.user = null - this.pass = null -} - -Auth.prototype.basic = function (user, pass, sendImmediately) { - var self = this - if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { - self.request.emit('error', new Error('auth() received invalid user or password')) - } - self.user = user - self.pass = pass - self.hasAuth = true - var header = user + ':' + (pass || '') - if (sendImmediately || typeof sendImmediately === 'undefined') { - var authHeader = 'Basic ' + toBase64(header) - self.sentAuth = true - return authHeader - } -} - -Auth.prototype.bearer = function (bearer, sendImmediately) { - var self = this - self.bearerToken = bearer - self.hasAuth = true - if (sendImmediately || typeof sendImmediately === 'undefined') { - if (typeof bearer === 'function') { - bearer = bearer() - } - var authHeader = 'Bearer ' + (bearer || '') - self.sentAuth = true - return authHeader - } -} - -Auth.prototype.digest = function (method, path, authHeader) { - // TODO: More complete implementation of RFC 2617. - // - handle challenge.domain - // - support qop="auth-int" only - // - handle Authentication-Info (not necessarily?) - // - check challenge.stale (not necessarily?) - // - increase nc (not necessarily?) - // For reference: - // http://tools.ietf.org/html/rfc2617#section-3 - // https://github.com/bagder/curl/blob/master/lib/http_digest.c - - var self = this - - var challenge = {} - var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi - for (;;) { - var match = re.exec(authHeader) - if (!match) { - break - } - challenge[match[1]] = match[2] || match[3] - } - - /** - * RFC 2617: handle both MD5 and MD5-sess algorithms. - * - * If the algorithm directive's value is "MD5" or unspecified, then HA1 is - * HA1=MD5(username:realm:password) - * If the algorithm directive's value is "MD5-sess", then HA1 is - * HA1=MD5(MD5(username:realm:password):nonce:cnonce) - */ - var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) { - var ha1 = md5(user + ':' + realm + ':' + pass) - if (algorithm && algorithm.toLowerCase() === 'md5-sess') { - return md5(ha1 + ':' + nonce + ':' + cnonce) - } else { - return ha1 - } - } - - var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' - var nc = qop && '00000001' - var cnonce = qop && uuid().replace(/-/g, '') - var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce) - var ha2 = md5(method + ':' + path) - var digestResponse = qop - ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) - : md5(ha1 + ':' + challenge.nonce + ':' + ha2) - var authValues = { - username: self.user, - realm: challenge.realm, - nonce: challenge.nonce, - uri: path, - qop: qop, - response: digestResponse, - nc: nc, - cnonce: cnonce, - algorithm: challenge.algorithm, - opaque: challenge.opaque - } - - authHeader = [] - for (var k in authValues) { - if (authValues[k]) { - if (k === 'qop' || k === 'nc' || k === 'algorithm') { - authHeader.push(k + '=' + authValues[k]) - } else { - authHeader.push(k + '="' + authValues[k] + '"') - } - } - } - authHeader = 'Digest ' + authHeader.join(', ') - self.sentAuth = true - return authHeader -} - -Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) { - var self = this - , request = self.request - - var authHeader - if (bearer === undefined && user === undefined) { - self.request.emit('error', new Error('no auth mechanism defined')) - } else if (bearer !== undefined) { - authHeader = self.bearer(bearer, sendImmediately) - } else { - authHeader = self.basic(user, pass, sendImmediately) - } - if (authHeader) { - request.setHeader('authorization', authHeader) - } -} - -Auth.prototype.onResponse = function (response) { - var self = this - , request = self.request - - if (!self.hasAuth || self.sentAuth) { return null } - - var c = caseless(response.headers) - - var authHeader = c.get('www-authenticate') - var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase() - request.debug('reauth', authVerb) - - switch (authVerb) { - case 'basic': - return self.basic(self.user, self.pass, true) - - case 'bearer': - return self.bearer(self.bearerToken, true) - - case 'digest': - return self.digest(request.method, request.path, authHeader) - } -} - -exports.Auth = Auth diff --git a/node_modules/request/lib/cookies.js b/node_modules/request/lib/cookies.js deleted file mode 100644 index 412c07d..0000000 --- a/node_modules/request/lib/cookies.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict' - -var tough = require('tough-cookie') - -var Cookie = tough.Cookie - , CookieJar = tough.CookieJar - - -exports.parse = function(str) { - if (str && str.uri) { - str = str.uri - } - if (typeof str !== 'string') { - throw new Error('The cookie function only accepts STRING as param') - } - return Cookie.parse(str, {loose: true}) -} - -// Adapt the sometimes-Async api of tough.CookieJar to our requirements -function RequestJar(store) { - var self = this - self._jar = new CookieJar(store, {looseMode: true}) -} -RequestJar.prototype.setCookie = function(cookieOrStr, uri, options) { - var self = this - return self._jar.setCookieSync(cookieOrStr, uri, options || {}) -} -RequestJar.prototype.getCookieString = function(uri) { - var self = this - return self._jar.getCookieStringSync(uri) -} -RequestJar.prototype.getCookies = function(uri) { - var self = this - return self._jar.getCookiesSync(uri) -} - -exports.jar = function(store) { - return new RequestJar(store) -} diff --git a/node_modules/request/lib/getProxyFromURI.js b/node_modules/request/lib/getProxyFromURI.js deleted file mode 100644 index c2013a6..0000000 --- a/node_modules/request/lib/getProxyFromURI.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict' - -function formatHostname(hostname) { - // canonicalize the hostname, so that 'oogle.com' won't match 'google.com' - return hostname.replace(/^\.*/, '.').toLowerCase() -} - -function parseNoProxyZone(zone) { - zone = zone.trim().toLowerCase() - - var zoneParts = zone.split(':', 2) - , zoneHost = formatHostname(zoneParts[0]) - , zonePort = zoneParts[1] - , hasPort = zone.indexOf(':') > -1 - - return {hostname: zoneHost, port: zonePort, hasPort: hasPort} -} - -function uriInNoProxy(uri, noProxy) { - var port = uri.port || (uri.protocol === 'https:' ? '443' : '80') - , hostname = formatHostname(uri.hostname) - , noProxyList = noProxy.split(',') - - // iterate through the noProxyList until it finds a match. - return noProxyList.map(parseNoProxyZone).some(function(noProxyZone) { - var isMatchedAt = hostname.indexOf(noProxyZone.hostname) - , hostnameMatched = ( - isMatchedAt > -1 && - (isMatchedAt === hostname.length - noProxyZone.hostname.length) - ) - - if (noProxyZone.hasPort) { - return (port === noProxyZone.port) && hostnameMatched - } - - return hostnameMatched - }) -} - -function getProxyFromURI(uri) { - // Decide the proper request proxy to use based on the request URI object and the - // environmental variables (NO_PROXY, HTTP_PROXY, etc.) - // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html) - - var noProxy = process.env.NO_PROXY || process.env.no_proxy || '' - - // if the noProxy is a wildcard then return null - - if (noProxy === '*') { - return null - } - - // if the noProxy is not empty and the uri is found return null - - if (noProxy !== '' && uriInNoProxy(uri, noProxy)) { - return null - } - - // Check for HTTP or HTTPS Proxy in environment Else default to null - - if (uri.protocol === 'http:') { - return process.env.HTTP_PROXY || - process.env.http_proxy || null - } - - if (uri.protocol === 'https:') { - return process.env.HTTPS_PROXY || - process.env.https_proxy || - process.env.HTTP_PROXY || - process.env.http_proxy || null - } - - // if none of that works, return null - // (What uri protocol are you using then?) - - return null -} - -module.exports = getProxyFromURI diff --git a/node_modules/request/lib/har.js b/node_modules/request/lib/har.js deleted file mode 100644 index 3059574..0000000 --- a/node_modules/request/lib/har.js +++ /dev/null @@ -1,215 +0,0 @@ -'use strict' - -var fs = require('fs') -var qs = require('querystring') -var validate = require('har-validator') -var extend = require('extend') - -function Har (request) { - this.request = request -} - -Har.prototype.reducer = function (obj, pair) { - // new property ? - if (obj[pair.name] === undefined) { - obj[pair.name] = pair.value - return obj - } - - // existing? convert to array - var arr = [ - obj[pair.name], - pair.value - ] - - obj[pair.name] = arr - - return obj -} - -Har.prototype.prep = function (data) { - // construct utility properties - data.queryObj = {} - data.headersObj = {} - data.postData.jsonObj = false - data.postData.paramsObj = false - - // construct query objects - if (data.queryString && data.queryString.length) { - data.queryObj = data.queryString.reduce(this.reducer, {}) - } - - // construct headers objects - if (data.headers && data.headers.length) { - // loweCase header keys - data.headersObj = data.headers.reduceRight(function (headers, header) { - headers[header.name] = header.value - return headers - }, {}) - } - - // construct Cookie header - if (data.cookies && data.cookies.length) { - var cookies = data.cookies.map(function (cookie) { - return cookie.name + '=' + cookie.value - }) - - if (cookies.length) { - data.headersObj.cookie = cookies.join('; ') - } - } - - // prep body - function some (arr) { - return arr.some(function (type) { - return data.postData.mimeType.indexOf(type) === 0 - }) - } - - if (some([ - 'multipart/mixed', - 'multipart/related', - 'multipart/form-data', - 'multipart/alternative'])) { - - // reset values - data.postData.mimeType = 'multipart/form-data' - } - - else if (some([ - 'application/x-www-form-urlencoded'])) { - - if (!data.postData.params) { - data.postData.text = '' - } else { - data.postData.paramsObj = data.postData.params.reduce(this.reducer, {}) - - // always overwrite - data.postData.text = qs.stringify(data.postData.paramsObj) - } - } - - else if (some([ - 'text/json', - 'text/x-json', - 'application/json', - 'application/x-json'])) { - - data.postData.mimeType = 'application/json' - - if (data.postData.text) { - try { - data.postData.jsonObj = JSON.parse(data.postData.text) - } catch (e) { - this.request.debug(e) - - // force back to text/plain - data.postData.mimeType = 'text/plain' - } - } - } - - return data -} - -Har.prototype.options = function (options) { - // skip if no har property defined - if (!options.har) { - return options - } - - var har = {} - extend(har, options.har) - - // only process the first entry - if (har.log && har.log.entries) { - har = har.log.entries[0] - } - - // add optional properties to make validation successful - har.url = har.url || options.url || options.uri || options.baseUrl || '/' - har.httpVersion = har.httpVersion || 'HTTP/1.1' - har.queryString = har.queryString || [] - har.headers = har.headers || [] - har.cookies = har.cookies || [] - har.postData = har.postData || {} - har.postData.mimeType = har.postData.mimeType || 'application/octet-stream' - - har.bodySize = 0 - har.headersSize = 0 - har.postData.size = 0 - - if (!validate.request(har)) { - return options - } - - // clean up and get some utility properties - var req = this.prep(har) - - // construct new options - if (req.url) { - options.url = req.url - } - - if (req.method) { - options.method = req.method - } - - if (Object.keys(req.queryObj).length) { - options.qs = req.queryObj - } - - if (Object.keys(req.headersObj).length) { - options.headers = req.headersObj - } - - function test (type) { - return req.postData.mimeType.indexOf(type) === 0 - } - if (test('application/x-www-form-urlencoded')) { - options.form = req.postData.paramsObj - } - else if (test('application/json')) { - if (req.postData.jsonObj) { - options.body = req.postData.jsonObj - options.json = true - } - } - else if (test('multipart/form-data')) { - options.formData = {} - - req.postData.params.forEach(function (param) { - var attachment = {} - - if (!param.fileName && !param.fileName && !param.contentType) { - options.formData[param.name] = param.value - return - } - - // attempt to read from disk! - if (param.fileName && !param.value) { - attachment.value = fs.createReadStream(param.fileName) - } else if (param.value) { - attachment.value = param.value - } - - if (param.fileName) { - attachment.options = { - filename: param.fileName, - contentType: param.contentType ? param.contentType : null - } - } - - options.formData[param.name] = attachment - }) - } - else { - if (req.postData.text) { - options.body = req.postData.text - } - } - - return options -} - -exports.Har = Har diff --git a/node_modules/request/lib/helpers.js b/node_modules/request/lib/helpers.js deleted file mode 100644 index 356ff74..0000000 --- a/node_modules/request/lib/helpers.js +++ /dev/null @@ -1,74 +0,0 @@ -'use strict' - -var jsonSafeStringify = require('json-stringify-safe') - , crypto = require('crypto') - -function deferMethod() { - if (typeof setImmediate === 'undefined') { - return process.nextTick - } - - return setImmediate -} - -function isFunction(value) { - return typeof value === 'function' -} - -function paramsHaveRequestBody(params) { - return ( - params.body || - params.requestBodyStream || - (params.json && typeof params.json !== 'boolean') || - params.multipart - ) -} - -function safeStringify (obj, replacer) { - var ret - try { - ret = JSON.stringify(obj, replacer) - } catch (e) { - ret = jsonSafeStringify(obj, replacer) - } - return ret -} - -function md5 (str) { - return crypto.createHash('md5').update(str).digest('hex') -} - -function isReadStream (rs) { - return rs.readable && rs.path && rs.mode -} - -function toBase64 (str) { - return (new Buffer(str || '', 'utf8')).toString('base64') -} - -function copy (obj) { - var o = {} - Object.keys(obj).forEach(function (i) { - o[i] = obj[i] - }) - return o -} - -function version () { - var numbers = process.version.replace('v', '').split('.') - return { - major: parseInt(numbers[0], 10), - minor: parseInt(numbers[1], 10), - patch: parseInt(numbers[2], 10) - } -} - -exports.isFunction = isFunction -exports.paramsHaveRequestBody = paramsHaveRequestBody -exports.safeStringify = safeStringify -exports.md5 = md5 -exports.isReadStream = isReadStream -exports.toBase64 = toBase64 -exports.copy = copy -exports.version = version -exports.defer = deferMethod() diff --git a/node_modules/request/lib/multipart.js b/node_modules/request/lib/multipart.js deleted file mode 100644 index c128172..0000000 --- a/node_modules/request/lib/multipart.js +++ /dev/null @@ -1,112 +0,0 @@ -'use strict' - -var uuid = require('node-uuid') - , CombinedStream = require('combined-stream') - , isstream = require('isstream') - - -function Multipart (request) { - this.request = request - this.boundary = uuid() - this.chunked = false - this.body = null -} - -Multipart.prototype.isChunked = function (options) { - var self = this - , chunked = false - , parts = options.data || options - - if (!parts.forEach) { - self.request.emit('error', new Error('Argument error, options.multipart.')) - } - - if (options.chunked !== undefined) { - chunked = options.chunked - } - - if (self.request.getHeader('transfer-encoding') === 'chunked') { - chunked = true - } - - if (!chunked) { - parts.forEach(function (part) { - if (typeof part.body === 'undefined') { - self.request.emit('error', new Error('Body attribute missing in multipart.')) - } - if (isstream(part.body)) { - chunked = true - } - }) - } - - return chunked -} - -Multipart.prototype.setHeaders = function (chunked) { - var self = this - - if (chunked && !self.request.hasHeader('transfer-encoding')) { - self.request.setHeader('transfer-encoding', 'chunked') - } - - var header = self.request.getHeader('content-type') - - if (!header || header.indexOf('multipart') === -1) { - self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) - } else { - if (header.indexOf('boundary') !== -1) { - self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1') - } else { - self.request.setHeader('content-type', header + '; boundary=' + self.boundary) - } - } -} - -Multipart.prototype.build = function (parts, chunked) { - var self = this - var body = chunked ? new CombinedStream() : [] - - function add (part) { - if (typeof part === 'number') { - part = part.toString() - } - return chunked ? body.append(part) : body.push(new Buffer(part)) - } - - if (self.request.preambleCRLF) { - add('\r\n') - } - - parts.forEach(function (part) { - var preamble = '--' + self.boundary + '\r\n' - Object.keys(part).forEach(function (key) { - if (key === 'body') { return } - preamble += key + ': ' + part[key] + '\r\n' - }) - preamble += '\r\n' - add(preamble) - add(part.body) - add('\r\n') - }) - add('--' + self.boundary + '--') - - if (self.request.postambleCRLF) { - add('\r\n') - } - - return body -} - -Multipart.prototype.onRequest = function (options) { - var self = this - - var chunked = self.isChunked(options) - , parts = options.data || options - - self.setHeaders(chunked) - self.chunked = chunked - self.body = self.build(parts, chunked) -} - -exports.Multipart = Multipart diff --git a/node_modules/request/lib/oauth.js b/node_modules/request/lib/oauth.js deleted file mode 100644 index c24209b..0000000 --- a/node_modules/request/lib/oauth.js +++ /dev/null @@ -1,147 +0,0 @@ -'use strict' - -var url = require('url') - , qs = require('qs') - , caseless = require('caseless') - , uuid = require('node-uuid') - , oauth = require('oauth-sign') - , crypto = require('crypto') - - -function OAuth (request) { - this.request = request - this.params = null -} - -OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) { - var oa = {} - for (var i in _oauth) { - oa['oauth_' + i] = _oauth[i] - } - if (!oa.oauth_version) { - oa.oauth_version = '1.0' - } - if (!oa.oauth_timestamp) { - oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString() - } - if (!oa.oauth_nonce) { - oa.oauth_nonce = uuid().replace(/-/g, '') - } - if (!oa.oauth_signature_method) { - oa.oauth_signature_method = 'HMAC-SHA1' - } - - var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key - delete oa.oauth_consumer_secret - delete oa.oauth_private_key - - var token_secret = oa.oauth_token_secret - delete oa.oauth_token_secret - - var realm = oa.oauth_realm - delete oa.oauth_realm - delete oa.oauth_transport_method - - var baseurl = uri.protocol + '//' + uri.host + uri.pathname - var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&')) - - oa.oauth_signature = oauth.sign( - oa.oauth_signature_method, - method, - baseurl, - params, - consumer_secret_or_private_key, - token_secret) - - if (realm) { - oa.realm = realm - } - - return oa -} - -OAuth.prototype.buildBodyHash = function(_oauth, body) { - if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) { - this.request.emit('error', new Error('oauth: ' + _oauth.signature_method + - ' signature_method not supported with body_hash signing.')) - } - - var shasum = crypto.createHash('sha1') - shasum.update(body || '') - var sha1 = shasum.digest('hex') - - return new Buffer(sha1).toString('base64') -} - -OAuth.prototype.concatParams = function (oa, sep, wrap) { - wrap = wrap || '' - - var params = Object.keys(oa).filter(function (i) { - return i !== 'realm' && i !== 'oauth_signature' - }).sort() - - if (oa.realm) { - params.splice(0, 0, 'realm') - } - params.push('oauth_signature') - - return params.map(function (i) { - return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap - }).join(sep) -} - -OAuth.prototype.onRequest = function (_oauth) { - var self = this - self.params = _oauth - - var uri = self.request.uri || {} - , method = self.request.method || '' - , headers = caseless(self.request.headers) - , body = self.request.body || '' - , qsLib = self.request.qsLib || qs - - var form - , query - , contentType = headers.get('content-type') || '' - , formContentType = 'application/x-www-form-urlencoded' - , transport = _oauth.transport_method || 'header' - - if (contentType.slice(0, formContentType.length) === formContentType) { - contentType = formContentType - form = body - } - if (uri.query) { - query = uri.query - } - if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) { - self.request.emit('error', new Error('oauth: transport_method of body requires POST ' + - 'and content-type ' + formContentType)) - } - - if (!form && typeof _oauth.body_hash === 'boolean') { - _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString()) - } - - var oa = self.buildParams(_oauth, uri, method, query, form, qsLib) - - switch (transport) { - case 'header': - self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '"')) - break - - case 'query': - var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&') - self.request.uri = url.parse(href) - self.request.path = self.request.uri.path - break - - case 'body': - self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&') - break - - default: - self.request.emit('error', new Error('oauth: transport_method invalid')) - } -} - -exports.OAuth = OAuth diff --git a/node_modules/request/lib/querystring.js b/node_modules/request/lib/querystring.js deleted file mode 100644 index baf5e80..0000000 --- a/node_modules/request/lib/querystring.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict' - -var qs = require('qs') - , querystring = require('querystring') - - -function Querystring (request) { - this.request = request - this.lib = null - this.useQuerystring = null - this.parseOptions = null - this.stringifyOptions = null -} - -Querystring.prototype.init = function (options) { - if (this.lib) {return} - - this.useQuerystring = options.useQuerystring - this.lib = (this.useQuerystring ? querystring : qs) - - this.parseOptions = options.qsParseOptions || {} - this.stringifyOptions = options.qsStringifyOptions || {} -} - -Querystring.prototype.stringify = function (obj) { - return (this.useQuerystring) - ? this.rfc3986(this.lib.stringify(obj, - this.stringifyOptions.sep || null, - this.stringifyOptions.eq || null, - this.stringifyOptions)) - : this.lib.stringify(obj, this.stringifyOptions) -} - -Querystring.prototype.parse = function (str) { - return (this.useQuerystring) - ? this.lib.parse(str, - this.parseOptions.sep || null, - this.parseOptions.eq || null, - this.parseOptions) - : this.lib.parse(str, this.parseOptions) -} - -Querystring.prototype.rfc3986 = function (str) { - return str.replace(/[!'()*]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -Querystring.prototype.unescape = querystring.unescape - -exports.Querystring = Querystring diff --git a/node_modules/request/lib/redirect.js b/node_modules/request/lib/redirect.js deleted file mode 100644 index 040dfe0..0000000 --- a/node_modules/request/lib/redirect.js +++ /dev/null @@ -1,153 +0,0 @@ -'use strict' - -var url = require('url') -var isUrl = /^https?:/ - -function Redirect (request) { - this.request = request - this.followRedirect = true - this.followRedirects = true - this.followAllRedirects = false - this.allowRedirect = function () {return true} - this.maxRedirects = 10 - this.redirects = [] - this.redirectsFollowed = 0 - this.removeRefererHeader = false -} - -Redirect.prototype.onRequest = function (options) { - var self = this - - if (options.maxRedirects !== undefined) { - self.maxRedirects = options.maxRedirects - } - if (typeof options.followRedirect === 'function') { - self.allowRedirect = options.followRedirect - } - if (options.followRedirect !== undefined) { - self.followRedirects = !!options.followRedirect - } - if (options.followAllRedirects !== undefined) { - self.followAllRedirects = options.followAllRedirects - } - if (self.followRedirects || self.followAllRedirects) { - self.redirects = self.redirects || [] - } - if (options.removeRefererHeader !== undefined) { - self.removeRefererHeader = options.removeRefererHeader - } -} - -Redirect.prototype.redirectTo = function (response) { - var self = this - , request = self.request - - var redirectTo = null - if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) { - var location = response.caseless.get('location') - request.debug('redirect', location) - - if (self.followAllRedirects) { - redirectTo = location - } else if (self.followRedirects) { - switch (request.method) { - case 'PATCH': - case 'PUT': - case 'POST': - case 'DELETE': - // Do not follow redirects - break - default: - redirectTo = location - break - } - } - } else if (response.statusCode === 401) { - var authHeader = request._auth.onResponse(response) - if (authHeader) { - request.setHeader('authorization', authHeader) - redirectTo = request.uri - } - } - return redirectTo -} - -Redirect.prototype.onResponse = function (response) { - var self = this - , request = self.request - - var redirectTo = self.redirectTo(response) - if (!redirectTo || !self.allowRedirect.call(request, response)) { - return false - } - - request.debug('redirect to', redirectTo) - - // ignore any potential response body. it cannot possibly be useful - // to us at this point. - // response.resume should be defined, but check anyway before calling. Workaround for browserify. - if (response.resume) { - response.resume() - } - - if (self.redirectsFollowed >= self.maxRedirects) { - request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href)) - return false - } - self.redirectsFollowed += 1 - - if (!isUrl.test(redirectTo)) { - redirectTo = url.resolve(request.uri.href, redirectTo) - } - - var uriPrev = request.uri - request.uri = url.parse(redirectTo) - - // handle the case where we change protocol from https to http or vice versa - if (request.uri.protocol !== uriPrev.protocol) { - delete request.agent - } - - self.redirects.push( - { statusCode : response.statusCode - , redirectUri: redirectTo - } - ) - if (self.followAllRedirects && request.method !== 'HEAD' - && response.statusCode !== 401 && response.statusCode !== 307) { - request.method = 'GET' - } - // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215 - delete request.src - delete request.req - delete request._started - if (response.statusCode !== 401 && response.statusCode !== 307) { - // Remove parameters from the previous response, unless this is the second request - // for a server that requires digest authentication. - delete request.body - delete request._form - if (request.headers) { - request.removeHeader('host') - request.removeHeader('content-type') - request.removeHeader('content-length') - if (request.uri.hostname !== request.originalHost.split(':')[0]) { - // Remove authorization if changing hostnames (but not if just - // changing ports or protocols). This matches the behavior of curl: - // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710 - request.removeHeader('authorization') - } - } - } - - if (!self.removeRefererHeader) { - request.setHeader('referer', uriPrev.href) - } - - request.emit('redirect') - - request.init() - - return true -} - -exports.Redirect = Redirect diff --git a/node_modules/request/lib/tunnel.js b/node_modules/request/lib/tunnel.js deleted file mode 100644 index bf96a8f..0000000 --- a/node_modules/request/lib/tunnel.js +++ /dev/null @@ -1,176 +0,0 @@ -'use strict' - -var url = require('url') - , tunnel = require('tunnel-agent') - -var defaultProxyHeaderWhiteList = [ - 'accept', - 'accept-charset', - 'accept-encoding', - 'accept-language', - 'accept-ranges', - 'cache-control', - 'content-encoding', - 'content-language', - 'content-location', - 'content-md5', - 'content-range', - 'content-type', - 'connection', - 'date', - 'expect', - 'max-forwards', - 'pragma', - 'referer', - 'te', - 'user-agent', - 'via' -] - -var defaultProxyHeaderExclusiveList = [ - 'proxy-authorization' -] - -function constructProxyHost(uriObject) { - var port = uriObject.port - , protocol = uriObject.protocol - , proxyHost = uriObject.hostname + ':' - - if (port) { - proxyHost += port - } else if (protocol === 'https:') { - proxyHost += '443' - } else { - proxyHost += '80' - } - - return proxyHost -} - -function constructProxyHeaderWhiteList(headers, proxyHeaderWhiteList) { - var whiteList = proxyHeaderWhiteList - .reduce(function (set, header) { - set[header.toLowerCase()] = true - return set - }, {}) - - return Object.keys(headers) - .filter(function (header) { - return whiteList[header.toLowerCase()] - }) - .reduce(function (set, header) { - set[header] = headers[header] - return set - }, {}) -} - -function constructTunnelOptions (request, proxyHeaders) { - var proxy = request.proxy - - var tunnelOptions = { - proxy : { - host : proxy.hostname, - port : +proxy.port, - proxyAuth : proxy.auth, - headers : proxyHeaders - }, - headers : request.headers, - ca : request.ca, - cert : request.cert, - key : request.key, - passphrase : request.passphrase, - pfx : request.pfx, - ciphers : request.ciphers, - rejectUnauthorized : request.rejectUnauthorized, - secureOptions : request.secureOptions, - secureProtocol : request.secureProtocol - } - - return tunnelOptions -} - -function constructTunnelFnName(uri, proxy) { - var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http') - var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http') - return [uriProtocol, proxyProtocol].join('Over') -} - -function getTunnelFn(request) { - var uri = request.uri - var proxy = request.proxy - var tunnelFnName = constructTunnelFnName(uri, proxy) - return tunnel[tunnelFnName] -} - - -function Tunnel (request) { - this.request = request - this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList - this.proxyHeaderExclusiveList = [] - if (typeof request.tunnel !== 'undefined') { - this.tunnelOverride = request.tunnel - } -} - -Tunnel.prototype.isEnabled = function () { - var self = this - , request = self.request - // Tunnel HTTPS by default. Allow the user to override this setting. - - // If self.tunnelOverride is set (the user specified a value), use it. - if (typeof self.tunnelOverride !== 'undefined') { - return self.tunnelOverride - } - - // If the destination is HTTPS, tunnel. - if (request.uri.protocol === 'https:') { - return true - } - - // Otherwise, do not use tunnel. - return false -} - -Tunnel.prototype.setup = function (options) { - var self = this - , request = self.request - - options = options || {} - - if (typeof request.proxy === 'string') { - request.proxy = url.parse(request.proxy) - } - - if (!request.proxy || !request.tunnel) { - return false - } - - // Setup Proxy Header Exclusive List and White List - if (options.proxyHeaderWhiteList) { - self.proxyHeaderWhiteList = options.proxyHeaderWhiteList - } - if (options.proxyHeaderExclusiveList) { - self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList - } - - var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList) - var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList) - - // Setup Proxy Headers and Proxy Headers Host - // Only send the Proxy White Listed Header names - var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList) - proxyHeaders.host = constructProxyHost(request.uri) - - proxyHeaderExclusiveList.forEach(request.removeHeader, request) - - // Set Agent from Tunnel Data - var tunnelFn = getTunnelFn(request) - var tunnelOptions = constructTunnelOptions(request, proxyHeaders) - request.agent = tunnelFn(tunnelOptions) - - return true -} - -Tunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList -Tunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList -exports.Tunnel = Tunnel diff --git a/node_modules/request/package.json b/node_modules/request/package.json deleted file mode 100644 index c71057a..0000000 --- a/node_modules/request/package.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "_args": [ - [ - "request@^2.67.0", - "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine" - ] - ], - "_from": "request@>=2.67.0 <3.0.0", - "_id": "request@2.75.0", - "_inCache": true, - "_installable": true, - "_location": "/request", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/request-2.75.0.tgz_1474151606844_0.8052814984694123" - }, - "_npmUser": { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - }, - "_npmVersion": "2.15.9", - "_phantomChildren": {}, - "_requested": { - "name": "request", - "raw": "request@^2.67.0", - "rawSpec": "^2.67.0", - "scope": null, - "spec": ">=2.67.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", - "_shasum": "d2b8268a286da13eaa5d01adf5d18cc90f657d93", - "_shrinkwrap": null, - "_spec": "request@^2.67.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine", - "author": { - "email": "mikeal.rogers@gmail.com", - "name": "Mikeal Rogers" - }, - "bugs": { - "url": "http://github.com/request/request/issues" - }, - "dependencies": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "bl": "~1.1.2", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.0.0", - "har-validator": "~2.0.6", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "node-uuid": "~1.4.7", - "oauth-sign": "~0.8.1", - "qs": "~6.2.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "~0.4.1" - }, - "description": "Simplified HTTP request client.", - "devDependencies": { - "bluebird": "^3.2.1", - "browserify": "^13.0.1", - "browserify-istanbul": "^2.0.0", - "buffer-equal": "^1.0.0", - "codecov": "^1.0.1", - "coveralls": "^2.11.4", - "eslint": "^2.5.3", - "function-bind": "^1.0.2", - "istanbul": "^0.4.0", - "karma": "^1.1.1", - "karma-browserify": "^5.0.1", - "karma-cli": "^1.0.0", - "karma-coverage": "^1.0.0", - "karma-phantomjs-launcher": "^1.0.0", - "karma-tap": "^3.0.1", - "phantomjs-prebuilt": "^2.1.3", - "rimraf": "^2.2.8", - "server-destroy": "^1.0.1", - "tape": "^4.6.0", - "taper": "^0.4.0" - }, - "directories": {}, - "dist": { - "shasum": "d2b8268a286da13eaa5d01adf5d18cc90f657d93", - "tarball": "https://registry.npmjs.org/request/-/request-2.75.0.tgz" - }, - "engines": { - "node": ">=0.8.0" - }, - "gitHead": "e9f09c2832073858d6d988ba82a2895f36efa92d", - "greenkeeper": { - "ignore": [ - "eslint", - "hawk", - "har-validator" - ] - }, - "homepage": "https://github.com/request/request#readme", - "license": "Apache-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - }, - { - "email": "jnylen@gmail.com", - "name": "nylen" - }, - { - "email": "fkschott@gmail.com", - "name": "fredkschott" - }, - { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - } - ], - "name": "request", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/request/request.git" - }, - "scripts": { - "lint": "eslint lib/ *.js tests/ && echo Lint passed.", - "test": "npm run lint && npm run test-ci && npm run test-browser", - "test-browser": "node tests/browser/start.js", - "test-ci": "taper tests/test-*.js", - "test-cov": "istanbul cover tape tests/test-*.js" - }, - "tags": [ - "http", - "simple", - "util", - "utility" - ], - "version": "2.75.0" -} diff --git a/node_modules/request/request.js b/node_modules/request/request.js deleted file mode 100644 index 96a71b6..0000000 --- a/node_modules/request/request.js +++ /dev/null @@ -1,1438 +0,0 @@ -'use strict' - -var http = require('http') - , https = require('https') - , url = require('url') - , util = require('util') - , stream = require('stream') - , zlib = require('zlib') - , bl = require('bl') - , hawk = require('hawk') - , aws2 = require('aws-sign2') - , aws4 = require('aws4') - , httpSignature = require('http-signature') - , mime = require('mime-types') - , stringstream = require('stringstream') - , caseless = require('caseless') - , ForeverAgent = require('forever-agent') - , FormData = require('form-data') - , extend = require('extend') - , isstream = require('isstream') - , isTypedArray = require('is-typedarray').strict - , helpers = require('./lib/helpers') - , cookies = require('./lib/cookies') - , getProxyFromURI = require('./lib/getProxyFromURI') - , Querystring = require('./lib/querystring').Querystring - , Har = require('./lib/har').Har - , Auth = require('./lib/auth').Auth - , OAuth = require('./lib/oauth').OAuth - , Multipart = require('./lib/multipart').Multipart - , Redirect = require('./lib/redirect').Redirect - , Tunnel = require('./lib/tunnel').Tunnel - -var safeStringify = helpers.safeStringify - , isReadStream = helpers.isReadStream - , toBase64 = helpers.toBase64 - , defer = helpers.defer - , copy = helpers.copy - , version = helpers.version - , globalCookieJar = cookies.jar() - - -var globalPool = {} - -function filterForNonReserved(reserved, options) { - // Filter out properties that are not reserved. - // Reserved values are passed in at call site. - - var object = {} - for (var i in options) { - var notReserved = (reserved.indexOf(i) === -1) - if (notReserved) { - object[i] = options[i] - } - } - return object -} - -function filterOutReservedFunctions(reserved, options) { - // Filter out properties that are functions and are reserved. - // Reserved values are passed in at call site. - - var object = {} - for (var i in options) { - var isReserved = !(reserved.indexOf(i) === -1) - var isFunction = (typeof options[i] === 'function') - if (!(isReserved && isFunction)) { - object[i] = options[i] - } - } - return object - -} - -// Return a simpler request object to allow serialization -function requestToJSON() { - var self = this - return { - uri: self.uri, - method: self.method, - headers: self.headers - } -} - -// Return a simpler response object to allow serialization -function responseToJSON() { - var self = this - return { - statusCode: self.statusCode, - body: self.body, - headers: self.headers, - request: requestToJSON.call(self.request) - } -} - -function Request (options) { - // if given the method property in options, set property explicitMethod to true - - // extend the Request instance with any non-reserved properties - // remove any reserved functions from the options object - // set Request instance to be readable and writable - // call init - - var self = this - - // start with HAR, then override with additional options - if (options.har) { - self._har = new Har(self) - options = self._har.options(options) - } - - stream.Stream.call(self) - var reserved = Object.keys(Request.prototype) - var nonReserved = filterForNonReserved(reserved, options) - - extend(self, nonReserved) - options = filterOutReservedFunctions(reserved, options) - - self.readable = true - self.writable = true - if (options.method) { - self.explicitMethod = true - } - self._qs = new Querystring(self) - self._auth = new Auth(self) - self._oauth = new OAuth(self) - self._multipart = new Multipart(self) - self._redirect = new Redirect(self) - self._tunnel = new Tunnel(self) - self.init(options) -} - -util.inherits(Request, stream.Stream) - -// Debugging -Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG) -function debug() { - if (Request.debug) { - console.error('REQUEST %s', util.format.apply(util, arguments)) - } -} -Request.prototype.debug = debug - -Request.prototype.init = function (options) { - // init() contains all the code to setup the request object. - // the actual outgoing request is not started until start() is called - // this function is called from both the constructor and on redirect. - var self = this - if (!options) { - options = {} - } - self.headers = self.headers ? copy(self.headers) : {} - - // Delete headers with value undefined since they break - // ClientRequest.OutgoingMessage.setHeader in node 0.12 - for (var headerName in self.headers) { - if (typeof self.headers[headerName] === 'undefined') { - delete self.headers[headerName] - } - } - - caseless.httpify(self, self.headers) - - if (!self.method) { - self.method = options.method || 'GET' - } - if (!self.localAddress) { - self.localAddress = options.localAddress - } - - self._qs.init(options) - - debug(options) - if (!self.pool && self.pool !== false) { - self.pool = globalPool - } - self.dests = self.dests || [] - self.__isRequestRequest = true - - // Protect against double callback - if (!self._callback && self.callback) { - self._callback = self.callback - self.callback = function () { - if (self._callbackCalled) { - return // Print a warning maybe? - } - self._callbackCalled = true - self._callback.apply(self, arguments) - } - self.on('error', self.callback.bind()) - self.on('complete', self.callback.bind(self, null)) - } - - // People use this property instead all the time, so support it - if (!self.uri && self.url) { - self.uri = self.url - delete self.url - } - - // If there's a baseUrl, then use it as the base URL (i.e. uri must be - // specified as a relative path and is appended to baseUrl). - if (self.baseUrl) { - if (typeof self.baseUrl !== 'string') { - return self.emit('error', new Error('options.baseUrl must be a string')) - } - - if (typeof self.uri !== 'string') { - return self.emit('error', new Error('options.uri must be a string when using options.baseUrl')) - } - - if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) { - return self.emit('error', new Error('options.uri must be a path when using options.baseUrl')) - } - - // Handle all cases to make sure that there's only one slash between - // baseUrl and uri. - var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1 - var uriStartsWithSlash = self.uri.indexOf('/') === 0 - - if (baseUrlEndsWithSlash && uriStartsWithSlash) { - self.uri = self.baseUrl + self.uri.slice(1) - } else if (baseUrlEndsWithSlash || uriStartsWithSlash) { - self.uri = self.baseUrl + self.uri - } else if (self.uri === '') { - self.uri = self.baseUrl - } else { - self.uri = self.baseUrl + '/' + self.uri - } - delete self.baseUrl - } - - // A URI is needed by this point, emit error if we haven't been able to get one - if (!self.uri) { - return self.emit('error', new Error('options.uri is a required argument')) - } - - // If a string URI/URL was given, parse it into a URL object - if (typeof self.uri === 'string') { - self.uri = url.parse(self.uri) - } - - // Some URL objects are not from a URL parsed string and need href added - if (!self.uri.href) { - self.uri.href = url.format(self.uri) - } - - // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme - if (self.uri.protocol === 'unix:') { - return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`')) - } - - // Support Unix Sockets - if (self.uri.host === 'unix') { - self.enableUnixSocket() - } - - if (self.strictSSL === false) { - self.rejectUnauthorized = false - } - - if (!self.uri.pathname) {self.uri.pathname = '/'} - - if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) { - // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar - // Detect and reject it as soon as possible - var faultyUri = url.format(self.uri) - var message = 'Invalid URI "' + faultyUri + '"' - if (Object.keys(options).length === 0) { - // No option ? This can be the sign of a redirect - // As this is a case where the user cannot do anything (they didn't call request directly with this URL) - // they should be warned that it can be caused by a redirection (can save some hair) - message += '. This can be caused by a crappy redirection.' - } - // This error was fatal - self.abort() - return self.emit('error', new Error(message)) - } - - if (!self.hasOwnProperty('proxy')) { - self.proxy = getProxyFromURI(self.uri) - } - - self.tunnel = self._tunnel.isEnabled() - if (self.proxy) { - self._tunnel.setup(options) - } - - self._redirect.onRequest(options) - - self.setHost = false - if (!self.hasHeader('host')) { - var hostHeaderName = self.originalHostHeaderName || 'host' - self.setHeader(hostHeaderName, self.uri.hostname) - if (self.uri.port) { - if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') && - !(self.uri.port === 443 && self.uri.protocol === 'https:') ) { - self.setHeader(hostHeaderName, self.getHeader('host') + (':' + self.uri.port) ) - } - } - self.setHost = true - } - - self.jar(self._jar || options.jar) - - if (!self.uri.port) { - if (self.uri.protocol === 'http:') {self.uri.port = 80} - else if (self.uri.protocol === 'https:') {self.uri.port = 443} - } - - if (self.proxy && !self.tunnel) { - self.port = self.proxy.port - self.host = self.proxy.hostname - } else { - self.port = self.uri.port - self.host = self.uri.hostname - } - - if (options.form) { - self.form(options.form) - } - - if (options.formData) { - var formData = options.formData - var requestForm = self.form() - var appendFormValue = function (key, value) { - if (value && value.hasOwnProperty('value') && value.hasOwnProperty('options')) { - requestForm.append(key, value.value, value.options) - } else { - requestForm.append(key, value) - } - } - for (var formKey in formData) { - if (formData.hasOwnProperty(formKey)) { - var formValue = formData[formKey] - if (formValue instanceof Array) { - for (var j = 0; j < formValue.length; j++) { - appendFormValue(formKey, formValue[j]) - } - } else { - appendFormValue(formKey, formValue) - } - } - } - } - - if (options.qs) { - self.qs(options.qs) - } - - if (self.uri.path) { - self.path = self.uri.path - } else { - self.path = self.uri.pathname + (self.uri.search || '') - } - - if (self.path.length === 0) { - self.path = '/' - } - - // Auth must happen last in case signing is dependent on other headers - if (options.aws) { - self.aws(options.aws) - } - - if (options.hawk) { - self.hawk(options.hawk) - } - - if (options.httpSignature) { - self.httpSignature(options.httpSignature) - } - - if (options.auth) { - if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) { - options.auth.user = options.auth.username - } - if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) { - options.auth.pass = options.auth.password - } - - self.auth( - options.auth.user, - options.auth.pass, - options.auth.sendImmediately, - options.auth.bearer - ) - } - - if (self.gzip && !self.hasHeader('accept-encoding')) { - self.setHeader('accept-encoding', 'gzip, deflate') - } - - if (self.uri.auth && !self.hasHeader('authorization')) { - var uriAuthPieces = self.uri.auth.split(':').map(function(item) {return self._qs.unescape(item)}) - self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true) - } - - if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) { - var proxyAuthPieces = self.proxy.auth.split(':').map(function(item) {return self._qs.unescape(item)}) - var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':')) - self.setHeader('proxy-authorization', authHeader) - } - - if (self.proxy && !self.tunnel) { - self.path = (self.uri.protocol + '//' + self.uri.host + self.path) - } - - if (options.json) { - self.json(options.json) - } - if (options.multipart) { - self.multipart(options.multipart) - } - - if (options.time) { - self.timing = true - self.elapsedTime = self.elapsedTime || 0 - } - - function setContentLength () { - if (isTypedArray(self.body)) { - self.body = new Buffer(self.body) - } - - if (!self.hasHeader('content-length')) { - var length - if (typeof self.body === 'string') { - length = Buffer.byteLength(self.body) - } - else if (Array.isArray(self.body)) { - length = self.body.reduce(function (a, b) {return a + b.length}, 0) - } - else { - length = self.body.length - } - - if (length) { - self.setHeader('content-length', length) - } else { - self.emit('error', new Error('Argument error, options.body.')) - } - } - } - if (self.body && !isstream(self.body)) { - setContentLength() - } - - if (options.oauth) { - self.oauth(options.oauth) - } else if (self._oauth.params && self.hasHeader('authorization')) { - self.oauth(self._oauth.params) - } - - var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol - , defaultModules = {'http:':http, 'https:':https} - , httpModules = self.httpModules || {} - - self.httpModule = httpModules[protocol] || defaultModules[protocol] - - if (!self.httpModule) { - return self.emit('error', new Error('Invalid protocol: ' + protocol)) - } - - if (options.ca) { - self.ca = options.ca - } - - if (!self.agent) { - if (options.agentOptions) { - self.agentOptions = options.agentOptions - } - - if (options.agentClass) { - self.agentClass = options.agentClass - } else if (options.forever) { - var v = version() - // use ForeverAgent in node 0.10- only - if (v.major === 0 && v.minor <= 10) { - self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL - } else { - self.agentClass = self.httpModule.Agent - self.agentOptions = self.agentOptions || {} - self.agentOptions.keepAlive = true - } - } else { - self.agentClass = self.httpModule.Agent - } - } - - if (self.pool === false) { - self.agent = false - } else { - self.agent = self.agent || self.getNewAgent() - } - - self.on('pipe', function (src) { - if (self.ntick && self._started) { - self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.')) - } - self.src = src - if (isReadStream(src)) { - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', mime.lookup(src.path)) - } - } else { - if (src.headers) { - for (var i in src.headers) { - if (!self.hasHeader(i)) { - self.setHeader(i, src.headers[i]) - } - } - } - if (self._json && !self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - if (src.method && !self.explicitMethod) { - self.method = src.method - } - } - - // self.on('pipe', function () { - // console.error('You have already piped to this stream. Pipeing twice is likely to break the request.') - // }) - }) - - defer(function () { - if (self._aborted) { - return - } - - var end = function () { - if (self._form) { - if (!self._auth.hasAuth) { - self._form.pipe(self) - } - else if (self._auth.hasAuth && self._auth.sentAuth) { - self._form.pipe(self) - } - } - if (self._multipart && self._multipart.chunked) { - self._multipart.body.pipe(self) - } - if (self.body) { - if (isstream(self.body)) { - self.body.pipe(self) - } else { - setContentLength() - if (Array.isArray(self.body)) { - self.body.forEach(function (part) { - self.write(part) - }) - } else { - self.write(self.body) - } - self.end() - } - } else if (self.requestBodyStream) { - console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.') - self.requestBodyStream.pipe(self) - } else if (!self.src) { - if (self._auth.hasAuth && !self._auth.sentAuth) { - self.end() - return - } - if (self.method !== 'GET' && typeof self.method !== 'undefined') { - self.setHeader('content-length', 0) - } - self.end() - } - } - - if (self._form && !self.hasHeader('content-length')) { - // Before ending the request, we had to compute the length of the whole form, asyncly - self.setHeader(self._form.getHeaders(), true) - self._form.getLength(function (err, length) { - if (!err && !isNaN(length)) { - self.setHeader('content-length', length) - } - end() - }) - } else { - end() - } - - self.ntick = true - }) - -} - -Request.prototype.getNewAgent = function () { - var self = this - var Agent = self.agentClass - var options = {} - if (self.agentOptions) { - for (var i in self.agentOptions) { - options[i] = self.agentOptions[i] - } - } - if (self.ca) { - options.ca = self.ca - } - if (self.ciphers) { - options.ciphers = self.ciphers - } - if (self.secureProtocol) { - options.secureProtocol = self.secureProtocol - } - if (self.secureOptions) { - options.secureOptions = self.secureOptions - } - if (typeof self.rejectUnauthorized !== 'undefined') { - options.rejectUnauthorized = self.rejectUnauthorized - } - - if (self.cert && self.key) { - options.key = self.key - options.cert = self.cert - } - - if (self.pfx) { - options.pfx = self.pfx - } - - if (self.passphrase) { - options.passphrase = self.passphrase - } - - var poolKey = '' - - // different types of agents are in different pools - if (Agent !== self.httpModule.Agent) { - poolKey += Agent.name - } - - // ca option is only relevant if proxy or destination are https - var proxy = self.proxy - if (typeof proxy === 'string') { - proxy = url.parse(proxy) - } - var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:' - - if (isHttps) { - if (options.ca) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.ca - } - - if (typeof options.rejectUnauthorized !== 'undefined') { - if (poolKey) { - poolKey += ':' - } - poolKey += options.rejectUnauthorized - } - - if (options.cert) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.cert.toString('ascii') + options.key.toString('ascii') - } - - if (options.pfx) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.pfx.toString('ascii') - } - - if (options.ciphers) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.ciphers - } - - if (options.secureProtocol) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.secureProtocol - } - - if (options.secureOptions) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.secureOptions - } - } - - if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) { - // not doing anything special. Use the globalAgent - return self.httpModule.globalAgent - } - - // we're using a stored agent. Make sure it's protocol-specific - poolKey = self.uri.protocol + poolKey - - // generate a new agent for this setting if none yet exists - if (!self.pool[poolKey]) { - self.pool[poolKey] = new Agent(options) - // properly set maxSockets on new agents - if (self.pool.maxSockets) { - self.pool[poolKey].maxSockets = self.pool.maxSockets - } - } - - return self.pool[poolKey] -} - -Request.prototype.start = function () { - // start() is called once we are ready to send the outgoing HTTP request. - // this is usually called on the first write(), end() or on nextTick() - var self = this - - if (self._aborted) { - return - } - - self._started = true - self.method = self.method || 'GET' - self.href = self.uri.href - - if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) { - self.setHeader('content-length', self.src.stat.size) - } - if (self._aws) { - self.aws(self._aws, true) - } - - // We have a method named auth, which is completely different from the http.request - // auth option. If we don't remove it, we're gonna have a bad time. - var reqOptions = copy(self) - delete reqOptions.auth - - debug('make request', self.uri.href) - - try { - self.req = self.httpModule.request(reqOptions) - } catch (err) { - self.emit('error', err) - return - } - - if (self.timing) { - self.startTime = new Date().getTime() - } - - if (self.timeout && !self.timeoutTimer) { - var timeout = self.timeout < 0 ? 0 : self.timeout - // Set a timeout in memory - this block will throw if the server takes more - // than `timeout` to write the HTTP status and headers (corresponding to - // the on('response') event on the client). NB: this measures wall-clock - // time, not the time between bytes sent by the server. - self.timeoutTimer = setTimeout(function () { - var connectTimeout = self.req.socket && self.req.socket.readable === false - self.abort() - var e = new Error('ETIMEDOUT') - e.code = 'ETIMEDOUT' - e.connect = connectTimeout - self.emit('error', e) - }, timeout) - - if (self.req.setTimeout) { // only works on node 0.6+ - // Set an additional timeout on the socket, via the `setsockopt` syscall. - // This timeout sets the amount of time to wait *between* bytes sent - // from the server, and may or may not correspond to the wall-clock time - // elapsed from the start of the request. - // - // In particular, it's useful for erroring if the server fails to send - // data halfway through streaming a response. - self.req.setTimeout(timeout, function () { - if (self.req) { - self.req.abort() - var e = new Error('ESOCKETTIMEDOUT') - e.code = 'ESOCKETTIMEDOUT' - e.connect = false - self.emit('error', e) - } - }) - } - } - - self.req.on('response', self.onRequestResponse.bind(self)) - self.req.on('error', self.onRequestError.bind(self)) - self.req.on('drain', function() { - self.emit('drain') - }) - self.req.on('socket', function(socket) { - self.emit('socket', socket) - }) - - self.emit('request', self.req) -} - -Request.prototype.onRequestError = function (error) { - var self = this - if (self._aborted) { - return - } - if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' - && self.agent.addRequestNoreuse) { - self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) } - self.start() - self.req.end() - return - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - self.emit('error', error) -} - -Request.prototype.onRequestResponse = function (response) { - var self = this - debug('onRequestResponse', self.uri.href, response.statusCode, response.headers) - response.on('end', function() { - if (self.timing) { - self.elapsedTime += (new Date().getTime() - self.startTime) - debug('elapsed time', self.elapsedTime) - response.elapsedTime = self.elapsedTime - } - debug('response end', self.uri.href, response.statusCode, response.headers) - }) - - if (self._aborted) { - debug('aborted', self.uri.href) - response.resume() - return - } - - self.response = response - response.request = self - response.toJSON = responseToJSON - - // XXX This is different on 0.10, because SSL is strict by default - if (self.httpModule === https && - self.strictSSL && (!response.hasOwnProperty('socket') || - !response.socket.authorized)) { - debug('strict ssl error', self.uri.href) - var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL' - self.emit('error', new Error('SSL Error: ' + sslErr)) - return - } - - // Save the original host before any redirect (if it changes, we need to - // remove any authorization headers). Also remember the case of the header - // name because lots of broken servers expect Host instead of host and we - // want the caller to be able to specify this. - self.originalHost = self.getHeader('host') - if (!self.originalHostHeaderName) { - self.originalHostHeaderName = self.hasHeader('host') - } - if (self.setHost) { - self.removeHeader('host') - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - - var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar - var addCookie = function (cookie) { - //set the cookie if it's domain in the href's domain. - try { - targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true}) - } catch (e) { - self.emit('error', e) - } - } - - response.caseless = caseless(response.headers) - - if (response.caseless.has('set-cookie') && (!self._disableCookies)) { - var headerName = response.caseless.has('set-cookie') - if (Array.isArray(response.headers[headerName])) { - response.headers[headerName].forEach(addCookie) - } else { - addCookie(response.headers[headerName]) - } - } - - if (self._redirect.onResponse(response)) { - return // Ignore the rest of the response - } else { - // Be a good stream and emit end when the response is finished. - // Hack to emit end on close because of a core bug that never fires end - response.on('close', function () { - if (!self._ended) { - self.response.emit('end') - } - }) - - response.on('end', function () { - self._ended = true - }) - - var noBody = function (code) { - return ( - self.method === 'HEAD' - // Informational - || (code >= 100 && code < 200) - // No Content - || code === 204 - // Not Modified - || code === 304 - ) - } - - var responseContent - if (self.gzip && !noBody(response.statusCode)) { - var contentEncoding = response.headers['content-encoding'] || 'identity' - contentEncoding = contentEncoding.trim().toLowerCase() - - if (contentEncoding === 'gzip') { - responseContent = zlib.createGunzip() - response.pipe(responseContent) - } else if (contentEncoding === 'deflate') { - responseContent = zlib.createInflate() - response.pipe(responseContent) - } else { - // Since previous versions didn't check for Content-Encoding header, - // ignore any invalid values to preserve backwards-compatibility - if (contentEncoding !== 'identity') { - debug('ignoring unrecognized Content-Encoding ' + contentEncoding) - } - responseContent = response - } - } else { - responseContent = response - } - - if (self.encoding) { - if (self.dests.length !== 0) { - console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.') - } else if (responseContent.setEncoding) { - responseContent.setEncoding(self.encoding) - } else { - // Should only occur on node pre-v0.9.4 (joyent/node@9b5abe5) with - // zlib streams. - // If/When support for 0.9.4 is dropped, this should be unnecessary. - responseContent = responseContent.pipe(stringstream(self.encoding)) - } - } - - if (self._paused) { - responseContent.pause() - } - - self.responseContent = responseContent - - self.emit('response', response) - - self.dests.forEach(function (dest) { - self.pipeDest(dest) - }) - - responseContent.on('data', function (chunk) { - if (self.timing && !self.responseStarted) { - self.responseStartTime = (new Date()).getTime() - response.responseStartTime = self.responseStartTime - } - self._destdata = true - self.emit('data', chunk) - }) - responseContent.on('end', function (chunk) { - self.emit('end', chunk) - }) - responseContent.on('error', function (error) { - self.emit('error', error) - }) - responseContent.on('close', function () {self.emit('close')}) - - if (self.callback) { - self.readResponseBody(response) - } - //if no callback - else { - self.on('end', function () { - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - self.emit('complete', response) - }) - } - } - debug('finish init function', self.uri.href) -} - -Request.prototype.readResponseBody = function (response) { - var self = this - debug('reading response\'s body') - var buffer = bl() - , strings = [] - - self.on('data', function (chunk) { - if (Buffer.isBuffer(chunk)) { - buffer.append(chunk) - } else { - strings.push(chunk) - } - }) - self.on('end', function () { - debug('end event', self.uri.href) - if (self._aborted) { - debug('aborted', self.uri.href) - // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request. - // This can lead to leaky behavior if the user retains a reference to the request object. - buffer.destroy() - return - } - - if (buffer.length) { - debug('has body', self.uri.href, buffer.length) - if (self.encoding === null) { - // response.body = buffer - // can't move to this until https://github.com/rvagg/bl/issues/13 - response.body = buffer.slice() - } else { - response.body = buffer.toString(self.encoding) - } - // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request. - // This can lead to leaky behavior if the user retains a reference to the request object. - buffer.destroy() - } else if (strings.length) { - // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. - // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). - if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') { - strings[0] = strings[0].substring(1) - } - response.body = strings.join('') - } - - if (self._json) { - try { - response.body = JSON.parse(response.body, self._jsonReviver) - } catch (e) { - debug('invalid JSON received', self.uri.href) - } - } - debug('emitting complete', self.uri.href) - if (typeof response.body === 'undefined' && !self._json) { - response.body = self.encoding === null ? new Buffer(0) : '' - } - self.emit('complete', response, response.body) - }) -} - -Request.prototype.abort = function () { - var self = this - self._aborted = true - - if (self.req) { - self.req.abort() - } - else if (self.response) { - self.response.destroy() - } - - self.emit('abort') -} - -Request.prototype.pipeDest = function (dest) { - var self = this - var response = self.response - // Called after the response is received - if (dest.headers && !dest.headersSent) { - if (response.caseless.has('content-type')) { - var ctname = response.caseless.has('content-type') - if (dest.setHeader) { - dest.setHeader(ctname, response.headers[ctname]) - } - else { - dest.headers[ctname] = response.headers[ctname] - } - } - - if (response.caseless.has('content-length')) { - var clname = response.caseless.has('content-length') - if (dest.setHeader) { - dest.setHeader(clname, response.headers[clname]) - } else { - dest.headers[clname] = response.headers[clname] - } - } - } - if (dest.setHeader && !dest.headersSent) { - for (var i in response.headers) { - // If the response content is being decoded, the Content-Encoding header - // of the response doesn't represent the piped content, so don't pass it. - if (!self.gzip || i !== 'content-encoding') { - dest.setHeader(i, response.headers[i]) - } - } - dest.statusCode = response.statusCode - } - if (self.pipefilter) { - self.pipefilter(response, dest) - } -} - -Request.prototype.qs = function (q, clobber) { - var self = this - var base - if (!clobber && self.uri.query) { - base = self._qs.parse(self.uri.query) - } else { - base = {} - } - - for (var i in q) { - base[i] = q[i] - } - - var qs = self._qs.stringify(base) - - if (qs === '') { - return self - } - - self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs) - self.url = self.uri - self.path = self.uri.path - - if (self.uri.host === 'unix') { - self.enableUnixSocket() - } - - return self -} -Request.prototype.form = function (form) { - var self = this - if (form) { - if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { - self.setHeader('content-type', 'application/x-www-form-urlencoded') - } - self.body = (typeof form === 'string') - ? self._qs.rfc3986(form.toString('utf8')) - : self._qs.stringify(form).toString('utf8') - return self - } - // create form-data object - self._form = new FormData() - self._form.on('error', function(err) { - err.message = 'form-data: ' + err.message - self.emit('error', err) - self.abort() - }) - return self._form -} -Request.prototype.multipart = function (multipart) { - var self = this - - self._multipart.onRequest(multipart) - - if (!self._multipart.chunked) { - self.body = self._multipart.body - } - - return self -} -Request.prototype.json = function (val) { - var self = this - - if (!self.hasHeader('accept')) { - self.setHeader('accept', 'application/json') - } - - if (typeof self.jsonReplacer === 'function') { - self._jsonReplacer = self.jsonReplacer - } - - self._json = true - if (typeof val === 'boolean') { - if (self.body !== undefined) { - if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { - self.body = safeStringify(self.body, self._jsonReplacer) - } else { - self.body = self._qs.rfc3986(self.body) - } - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - } - } else { - self.body = safeStringify(val, self._jsonReplacer) - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - } - - if (typeof self.jsonReviver === 'function') { - self._jsonReviver = self.jsonReviver - } - - return self -} -Request.prototype.getHeader = function (name, headers) { - var self = this - var result, re, match - if (!headers) { - headers = self.headers - } - Object.keys(headers).forEach(function (key) { - if (key.length !== name.length) { - return - } - re = new RegExp(name, 'i') - match = key.match(re) - if (match) { - result = headers[key] - } - }) - return result -} -Request.prototype.enableUnixSocket = function () { - // Get the socket & request paths from the URL - var unixParts = this.uri.path.split(':') - , host = unixParts[0] - , path = unixParts[1] - // Apply unix properties to request - this.socketPath = host - this.uri.pathname = path - this.uri.path = path - this.uri.host = host - this.uri.hostname = host - this.uri.isUnix = true -} - - -Request.prototype.auth = function (user, pass, sendImmediately, bearer) { - var self = this - - self._auth.onRequest(user, pass, sendImmediately, bearer) - - return self -} -Request.prototype.aws = function (opts, now) { - var self = this - - if (!now) { - self._aws = opts - return self - } - - if (opts.sign_version == 4 || opts.sign_version == '4') { - // use aws4 - var options = { - host: self.uri.host, - path: self.uri.path, - method: self.method, - headers: { - 'content-type': self.getHeader('content-type') || '' - }, - body: self.body - } - var signRes = aws4.sign(options, { - accessKeyId: opts.key, - secretAccessKey: opts.secret - }) - self.setHeader('authorization', signRes.headers.Authorization) - self.setHeader('x-amz-date', signRes.headers['X-Amz-Date']) - } - else { - // default: use aws-sign2 - var date = new Date() - self.setHeader('date', date.toUTCString()) - var auth = - { key: opts.key - , secret: opts.secret - , verb: self.method.toUpperCase() - , date: date - , contentType: self.getHeader('content-type') || '' - , md5: self.getHeader('content-md5') || '' - , amazonHeaders: aws2.canonicalizeHeaders(self.headers) - } - var path = self.uri.path - if (opts.bucket && path) { - auth.resource = '/' + opts.bucket + path - } else if (opts.bucket && !path) { - auth.resource = '/' + opts.bucket - } else if (!opts.bucket && path) { - auth.resource = path - } else if (!opts.bucket && !path) { - auth.resource = '/' - } - auth.resource = aws2.canonicalizeResource(auth.resource) - self.setHeader('authorization', aws2.authorization(auth)) - } - - return self -} -Request.prototype.httpSignature = function (opts) { - var self = this - httpSignature.signRequest({ - getHeader: function(header) { - return self.getHeader(header, self.headers) - }, - setHeader: function(header, value) { - self.setHeader(header, value) - }, - method: self.method, - path: self.path - }, opts) - debug('httpSignature authorization', self.getHeader('authorization')) - - return self -} -Request.prototype.hawk = function (opts) { - var self = this - self.setHeader('Authorization', hawk.client.header(self.uri, self.method, opts).field) -} -Request.prototype.oauth = function (_oauth) { - var self = this - - self._oauth.onRequest(_oauth) - - return self -} - -Request.prototype.jar = function (jar) { - var self = this - var cookies - - if (self._redirect.redirectsFollowed === 0) { - self.originalCookieHeader = self.getHeader('cookie') - } - - if (!jar) { - // disable cookies - cookies = false - self._disableCookies = true - } else { - var targetCookieJar = (jar && jar.getCookieString) ? jar : globalCookieJar - var urihref = self.uri.href - //fetch cookie in the Specified host - if (targetCookieJar) { - cookies = targetCookieJar.getCookieString(urihref) - } - } - - //if need cookie and cookie is not empty - if (cookies && cookies.length) { - if (self.originalCookieHeader) { - // Don't overwrite existing Cookie header - self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies) - } else { - self.setHeader('cookie', cookies) - } - } - self._jar = jar - return self -} - - -// Stream API -Request.prototype.pipe = function (dest, opts) { - var self = this - - if (self.response) { - if (self._destdata) { - self.emit('error', new Error('You cannot pipe after data has been emitted from the response.')) - } else if (self._ended) { - self.emit('error', new Error('You cannot pipe after the response has been ended.')) - } else { - stream.Stream.prototype.pipe.call(self, dest, opts) - self.pipeDest(dest) - return dest - } - } else { - self.dests.push(dest) - stream.Stream.prototype.pipe.call(self, dest, opts) - return dest - } -} -Request.prototype.write = function () { - var self = this - if (self._aborted) {return} - - if (!self._started) { - self.start() - } - if (self.req) { - return self.req.write.apply(self.req, arguments) - } -} -Request.prototype.end = function (chunk) { - var self = this - if (self._aborted) {return} - - if (chunk) { - self.write(chunk) - } - if (!self._started) { - self.start() - } - if (self.req) { - self.req.end() - } -} -Request.prototype.pause = function () { - var self = this - if (!self.responseContent) { - self._paused = true - } else { - self.responseContent.pause.apply(self.responseContent, arguments) - } -} -Request.prototype.resume = function () { - var self = this - if (!self.responseContent) { - self._paused = false - } else { - self.responseContent.resume.apply(self.responseContent, arguments) - } -} -Request.prototype.destroy = function () { - var self = this - if (!self._ended) { - self.end() - } else if (self.response) { - self.response.destroy() - } -} - -Request.defaultProxyHeaderWhiteList = - Tunnel.defaultProxyHeaderWhiteList.slice() - -Request.defaultProxyHeaderExclusiveList = - Tunnel.defaultProxyHeaderExclusiveList.slice() - -// Exports - -Request.prototype.toJSON = requestToJSON -module.exports = Request diff --git a/node_modules/require-directory/.jshintrc b/node_modules/require-directory/.jshintrc deleted file mode 100644 index e14e4dc..0000000 --- a/node_modules/require-directory/.jshintrc +++ /dev/null @@ -1,67 +0,0 @@ -{ - "maxerr" : 50, - "bitwise" : true, - "camelcase" : true, - "curly" : true, - "eqeqeq" : true, - "forin" : true, - "immed" : true, - "indent" : 2, - "latedef" : true, - "newcap" : true, - "noarg" : true, - "noempty" : true, - "nonew" : true, - "plusplus" : true, - "quotmark" : true, - "undef" : true, - "unused" : true, - "strict" : true, - "trailing" : true, - "maxparams" : false, - "maxdepth" : false, - "maxstatements" : false, - "maxcomplexity" : false, - "maxlen" : false, - "asi" : false, - "boss" : false, - "debug" : false, - "eqnull" : true, - "es5" : false, - "esnext" : false, - "moz" : false, - "evil" : false, - "expr" : true, - "funcscope" : true, - "globalstrict" : true, - "iterator" : true, - "lastsemic" : false, - "laxbreak" : false, - "laxcomma" : false, - "loopfunc" : false, - "multistr" : false, - "proto" : false, - "scripturl" : false, - "smarttabs" : false, - "shadow" : false, - "sub" : false, - "supernew" : false, - "validthis" : false, - "browser" : true, - "couch" : false, - "devel" : true, - "dojo" : false, - "jquery" : false, - "mootools" : false, - "node" : true, - "nonstandard" : false, - "prototypejs" : false, - "rhino" : false, - "worker" : false, - "wsh" : false, - "yui" : false, - "nomen" : true, - "onevar" : true, - "passfail" : false, - "white" : true -} diff --git a/node_modules/require-directory/.npmignore b/node_modules/require-directory/.npmignore deleted file mode 100644 index 47cf365..0000000 --- a/node_modules/require-directory/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test/** diff --git a/node_modules/require-directory/.travis.yml b/node_modules/require-directory/.travis.yml deleted file mode 100644 index 20fd86b..0000000 --- a/node_modules/require-directory/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.10 diff --git a/node_modules/require-directory/LICENSE b/node_modules/require-directory/LICENSE deleted file mode 100644 index a70f253..0000000 --- a/node_modules/require-directory/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011 Troy Goode - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/require-directory/README.markdown b/node_modules/require-directory/README.markdown deleted file mode 100644 index 926a063..0000000 --- a/node_modules/require-directory/README.markdown +++ /dev/null @@ -1,184 +0,0 @@ -# require-directory - -Recursively iterates over specified directory, `require()`'ing each file, and returning a nested hash structure containing those modules. - -**[Follow me (@troygoode) on Twitter!](https://twitter.com/intent/user?screen_name=troygoode)** - -[![NPM](https://nodei.co/npm/require-directory.png?downloads=true&stars=true)](https://nodei.co/npm/require-directory/) - -[![build status](https://secure.travis-ci.org/troygoode/node-require-directory.png)](http://travis-ci.org/troygoode/node-require-directory) - -## How To Use - -### Installation (via [npm](https://npmjs.org/package/require-directory)) - -```bash -$ npm install require-directory -``` - -### Usage - -A common pattern in node.js is to include an index file which creates a hash of the files in its current directory. Given a directory structure like so: - -* app.js -* routes/ - * index.js - * home.js - * auth/ - * login.js - * logout.js - * register.js - -`routes/index.js` uses `require-directory` to build the hash (rather than doing so manually) like so: - -```javascript -var requireDirectory = require('require-directory'); -module.exports = requireDirectory(module); -``` - -`app.js` references `routes/index.js` like any other module, but it now has a hash/tree of the exports from the `./routes/` directory: - -```javascript -var routes = require('./routes'); - -// snip - -app.get('/', routes.home); -app.get('/register', routes.auth.register); -app.get('/login', routes.auth.login); -app.get('/logout', routes.auth.logout); -``` - -The `routes` variable above is the equivalent of this: - -```javascript -var routes = { - home: require('routes/home.js'), - auth: { - login: require('routes/auth/login.js'), - logout: require('routes/auth/logout.js'), - register: require('routes/auth/register.js') - } -}; -``` - -*Note that `routes.index` will be `undefined` as you would hope.* - -### Specifying Another Directory - -You can specify which directory you want to build a tree of (if it isn't the current directory for whatever reason) by passing it as the second parameter. Not specifying the path (`requireDirectory(module)`) is the equivelant of `requireDirectory(module, __dirname)`: - -```javascript -var requireDirectory = require('require-directory'); -module.exports = requireDirectory(module, './some/subdirectory'); -``` - -For example, in the [example in the Usage section](#usage) we could have avoided creating `routes/index.js` and instead changed the first lines of `app.js` to: - -```javascript -var requireDirectory = require('require-directory'); -var routes = requireDirectory(module, './routes'); -``` - -## Options - -You can pass an options hash to `require-directory` as the 2nd parameter (or 3rd if you're passing the path to another directory as the 2nd parameter already). Here are the available options: - -### Whitelisting - -Whitelisting (either via RegExp or function) allows you to specify that only certain files be loaded. - -```javascript -var requireDirectory = require('require-directory'), - whitelist = /onlyinclude.js$/, - hash = requireDirectory(module, {include: whitelist}); -``` - -```javascript -var requireDirectory = require('require-directory'), - check = function(path){ - if(/onlyinclude.js$/.test(path)){ - return true; // don't include - }else{ - return false; // go ahead and include - } - }, - hash = requireDirectory(module, {include: check}); -``` - -### Blacklisting - -Blacklisting (either via RegExp or function) allows you to specify that all but certain files should be loaded. - -```javascript -var requireDirectory = require('require-directory'), - blacklist = /dontinclude\.js$/, - hash = requireDirectory(module, {exclude: blacklist}); -``` - -```javascript -var requireDirectory = require('require-directory'), - check = function(path){ - if(/dontinclude\.js$/.test(path)){ - return false; // don't include - }else{ - return true; // go ahead and include - } - }, - hash = requireDirectory(module, {exclude: check}); -``` - -### Visiting Objects As They're Loaded - -`require-directory` takes a function as the `visit` option that will be called for each module that is added to module.exports. - -```javascript -var requireDirectory = require('require-directory'), - visitor = function(obj) { - console.log(obj); // will be called for every module that is loaded - }, - hash = requireDirectory(module, {visit: visitor}); -``` - -The visitor can also transform the objects by returning a value: - -```javascript -var requireDirectory = require('require-directory'), - visitor = function(obj) { - return obj(new Date()); - }, - hash = requireDirectory(module, {visit: visitor}); -``` - -### Renaming Keys - -```javascript -var requireDirectory = require('require-directory'), - renamer = function(name) { - return name.toUpperCase(); - }, - hash = requireDirectory(module, {rename: renamer}); -``` - -### No Recursion - -```javascript -var requireDirectory = require('require-directory'), - hash = requireDirectory(module, {recurse: false}); -``` - -## Run Unit Tests - -```bash -$ npm run lint -$ npm test -``` - -## License - -[MIT License](http://www.opensource.org/licenses/mit-license.php) - -## Author - -[Troy Goode](https://github.com/TroyGoode) ([troygoode@gmail.com](mailto:troygoode@gmail.com)) - diff --git a/node_modules/require-directory/index.js b/node_modules/require-directory/index.js deleted file mode 100644 index cd37da7..0000000 --- a/node_modules/require-directory/index.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict'; - -var fs = require('fs'), - join = require('path').join, - resolve = require('path').resolve, - dirname = require('path').dirname, - defaultOptions = { - extensions: ['js', 'json', 'coffee'], - recurse: true, - rename: function (name) { - return name; - }, - visit: function (obj) { - return obj; - } - }; - -function checkFileInclusion(path, filename, options) { - return ( - // verify file has valid extension - (new RegExp('\\.(' + options.extensions.join('|') + ')$', 'i').test(filename)) && - - // if options.include is a RegExp, evaluate it and make sure the path passes - !(options.include && options.include instanceof RegExp && !options.include.test(path)) && - - // if options.include is a function, evaluate it and make sure the path passes - !(options.include && typeof options.include === 'function' && !options.include(path, filename)) && - - // if options.exclude is a RegExp, evaluate it and make sure the path doesn't pass - !(options.exclude && options.exclude instanceof RegExp && options.exclude.test(path)) && - - // if options.exclude is a function, evaluate it and make sure the path doesn't pass - !(options.exclude && typeof options.exclude === 'function' && options.exclude(path, filename)) - ); -} - -function requireDirectory(m, path, options) { - var retval = {}; - - // path is optional - if (path && !options && typeof path !== 'string') { - options = path; - path = null; - } - - // default options - options = options || {}; - for (var prop in defaultOptions) { - if (typeof options[prop] === 'undefined') { - options[prop] = defaultOptions[prop]; - } - } - - // if no path was passed in, assume the equivelant of __dirname from caller - // otherwise, resolve path relative to the equivalent of __dirname - path = !path ? dirname(m.filename) : resolve(dirname(m.filename), path); - - // get the path of each file in specified directory, append to current tree node, recurse - fs.readdirSync(path).forEach(function (filename) { - var joined = join(path, filename), - files, - key, - obj; - - if (fs.statSync(joined).isDirectory() && options.recurse) { - // this node is a directory; recurse - files = requireDirectory(m, joined, options); - // exclude empty directories - if (Object.keys(files).length) { - retval[options.rename(filename, joined, filename)] = files; - } - } else { - if (joined !== m.filename && checkFileInclusion(joined, filename, options)) { - // hash node key shouldn't include file extension - key = filename.substring(0, filename.lastIndexOf('.')); - obj = m.require(joined); - retval[options.rename(key, joined, filename)] = options.visit(obj, joined, filename) || obj; - } - } - }); - - return retval; -} - -module.exports = requireDirectory; -module.exports.defaults = defaultOptions; diff --git a/node_modules/require-directory/package.json b/node_modules/require-directory/package.json deleted file mode 100644 index 2f9b94e..0000000 --- a/node_modules/require-directory/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "require-directory@^2.1.1", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "require-directory@>=2.1.1 <3.0.0", - "_id": "require-directory@2.1.1", - "_inCache": true, - "_installable": true, - "_location": "/require-directory", - "_nodeVersion": "0.12.0", - "_npmUser": { - "email": "troygoode@gmail.com", - "name": "troygoode" - }, - "_npmVersion": "2.5.1", - "_phantomChildren": {}, - "_requested": { - "name": "require-directory", - "raw": "require-directory@^2.1.1", - "rawSpec": "^2.1.1", - "scope": null, - "spec": ">=2.1.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs" - ], - "_resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "_shasum": "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", - "_shrinkwrap": null, - "_spec": "require-directory@^2.1.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "troygoode@gmail.com", - "name": "Troy Goode", - "url": "http://github.com/troygoode/" - }, - "bugs": { - "url": "http://github.com/troygoode/node-require-directory/issues/" - }, - "contributors": [ - { - "email": "troygoode@gmail.com", - "name": "Troy Goode", - "url": "http://github.com/troygoode/" - } - ], - "dependencies": {}, - "description": "Recursively iterates over specified directory, require()'ing each file, and returning a nested hash structure containing those modules.", - "devDependencies": { - "jshint": "^2.6.0", - "mocha": "^2.1.0" - }, - "directories": {}, - "dist": { - "shasum": "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", - "tarball": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "gitHead": "cc71c23dd0c16cefd26855303c16ca1b9b50a36d", - "homepage": "https://github.com/troygoode/node-require-directory/", - "keywords": [ - "require", - "directory", - "library", - "recursive" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "troygoode@gmail.com", - "name": "troygoode" - } - ], - "name": "require-directory", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/troygoode/node-require-directory.git" - }, - "scripts": { - "lint": "jshint index.js test/test.js", - "test": "mocha" - }, - "version": "2.1.1" -} diff --git a/node_modules/require-from-string/index.js b/node_modules/require-from-string/index.js deleted file mode 100644 index d3d380a..0000000 --- a/node_modules/require-from-string/index.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var Module = require('module'); -var path = require('path'); - -module.exports = function requireFromString(code, filename, opts) { - if (typeof filename === 'object') { - opts = filename; - filename = undefined; - } - - opts = opts || {}; - filename = filename || ''; - - opts.appendPaths = opts.appendPaths || []; - opts.prependPaths = opts.prependPaths || []; - - if (typeof code !== 'string') { - throw new Error('code must be a string, not ' + typeof code); - } - - var paths = Module._nodeModulePaths(path.dirname(filename)); - - var m = new Module(filename, module.parent); - m.filename = filename; - m.paths = [].concat(opts.prependPaths).concat(paths).concat(opts.appendPaths); - m._compile(code, filename); - - return m.exports; -}; diff --git a/node_modules/require-from-string/license b/node_modules/require-from-string/license deleted file mode 100644 index 1aeb74f..0000000 --- a/node_modules/require-from-string/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/require-from-string/package.json b/node_modules/require-from-string/package.json deleted file mode 100644 index 292bd2e..0000000 --- a/node_modules/require-from-string/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_args": [ - [ - "require-from-string@^1.1.0", - "/Users/jbaylina/git/MVP/node_modules/solc" - ] - ], - "_from": "require-from-string@>=1.1.0 <2.0.0", - "_id": "require-from-string@1.2.1", - "_inCache": true, - "_installable": true, - "_location": "/require-from-string", - "_nodeVersion": "6.6.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/require-from-string-1.2.1.tgz_1475350323439_0.3740670408587903" - }, - "_npmUser": { - "email": "floatdrop@gmail.com", - "name": "floatdrop" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "require-from-string", - "raw": "require-from-string@^1.1.0", - "rawSpec": "^1.1.0", - "scope": null, - "spec": ">=1.1.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc" - ], - "_resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "_shasum": "529c9ccef27380adfec9a2f965b649bbee636418", - "_shrinkwrap": null, - "_spec": "require-from-string@^1.1.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc", - "author": { - "email": "floatdrop@gmail.com", - "name": "Vsevolod Strukchinsky", - "url": "github.com/floatdrop" - }, - "bugs": { - "url": "https://github.com/floatdrop/require-from-string/issues" - }, - "dependencies": {}, - "description": "Require module from string", - "devDependencies": { - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "529c9ccef27380adfec9a2f965b649bbee636418", - "tarball": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "b81e995c6ff82fbf71d9ee7a9990b10794fecb98", - "homepage": "https://github.com/floatdrop/require-from-string#readme", - "keywords": [], - "license": "MIT", - "maintainers": [ - { - "email": "floatdrop@gmail.com", - "name": "floatdrop" - } - ], - "name": "require-from-string", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/floatdrop/require-from-string.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "1.2.1" -} diff --git a/node_modules/require-from-string/readme.md b/node_modules/require-from-string/readme.md deleted file mode 100644 index 1b4e6bc..0000000 --- a/node_modules/require-from-string/readme.md +++ /dev/null @@ -1,56 +0,0 @@ -# require-from-string [![Build Status](https://travis-ci.org/floatdrop/require-from-string.svg?branch=master)](https://travis-ci.org/floatdrop/require-from-string) - -Load module from string in Node. - -## Install - -``` -$ npm install --save require-from-string -``` - - -## Usage - -```js -var requireFromString = require('require-from-string'); - -requireFromString('module.exports = 1'); -//=> 1 -``` - - -## API - -### requireFromString(code, [filename], [options]) - -#### code - -*Required* -Type: `string` - -Module code. - -#### filename -Type: `string` -Default: `''` - -Optional filename. - - -#### options -Type: `object` - -##### appendPaths -Type: `Array` - -List of `paths`, that will be appended to module `paths`. Useful, when you want -to be able require modules from these paths. - -##### prependPaths -Type: `Array` - -Same as `appendPath`, but paths will be prepended. - -## License - -MIT © [Vsevolod Strukchinsky](http://github.com/floatdrop) diff --git a/node_modules/require-main-filename/.npmignore b/node_modules/require-main-filename/.npmignore deleted file mode 100644 index 6f9fe6b..0000000 --- a/node_modules/require-main-filename/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -.DS_Store -.nyc_output diff --git a/node_modules/require-main-filename/.travis.yml b/node_modules/require-main-filename/.travis.yml deleted file mode 100644 index ab61ce7..0000000 --- a/node_modules/require-main-filename/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "0.10" - - "0.12" - - "4.1" - - "node" diff --git a/node_modules/require-main-filename/LICENSE.txt b/node_modules/require-main-filename/LICENSE.txt deleted file mode 100644 index 836440b..0000000 --- a/node_modules/require-main-filename/LICENSE.txt +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/require-main-filename/README.md b/node_modules/require-main-filename/README.md deleted file mode 100644 index 820d9f5..0000000 --- a/node_modules/require-main-filename/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# require-main-filename - -[![Build Status](https://travis-ci.org/yargs/require-main-filename.png)](https://travis-ci.org/yargs/require-main-filename) -[![Coverage Status](https://coveralls.io/repos/yargs/require-main-filename/badge.svg?branch=master)](https://coveralls.io/r/yargs/require-main-filename?branch=master) -[![NPM version](https://img.shields.io/npm/v/require-main-filename.svg)](https://www.npmjs.com/package/require-main-filename) - -`require.main.filename` is great for figuring out the entry -point for the current application. This can be combined with a module like -[pkg-conf](https://www.npmjs.com/package/pkg-conf) to, _as if by magic_, load -top-level configuration. - -Unfortunately, `require.main.filename` sometimes fails when an application is -executed with an alternative process manager, e.g., [iisnode](https://github.com/tjanczuk/iisnode). - -`require-main-filename` is a shim that addresses this problem. - -## Usage - -```js -var main = require('require-main-filename')() -// use main as an alternative to require.main.filename. -``` - -## License - -ISC diff --git a/node_modules/require-main-filename/index.js b/node_modules/require-main-filename/index.js deleted file mode 100644 index dca7f0c..0000000 --- a/node_modules/require-main-filename/index.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = function (_require) { - _require = _require || require - var main = _require.main - if (main && isIISNode(main)) return handleIISNode(main) - else return main ? main.filename : process.cwd() -} - -function isIISNode (main) { - return /\\iisnode\\/.test(main.filename) -} - -function handleIISNode (main) { - if (!main.children.length) { - return main.filename - } else { - return main.children[0].filename - } -} diff --git a/node_modules/require-main-filename/package.json b/node_modules/require-main-filename/package.json deleted file mode 100644 index 8f43bac..0000000 --- a/node_modules/require-main-filename/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_args": [ - [ - "require-main-filename@^1.0.1", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "require-main-filename@>=1.0.1 <2.0.0", - "_id": "require-main-filename@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/require-main-filename", - "_nodeVersion": "3.2.0", - "_npmOperationalInternal": { - "host": "packages-6-west.internal.npmjs.com", - "tmp": "tmp/require-main-filename-1.0.1.tgz_1455688492890_0.0750324921682477" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "require-main-filename", - "raw": "require-main-filename@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs" - ], - "_resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "_shasum": "97f717b69d48784f5f526a6c5aa8ffdda055a4d1", - "_shrinkwrap": null, - "_spec": "require-main-filename@^1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "ben@npmjs.com", - "name": "Ben Coe" - }, - "bugs": { - "url": "https://github.com/yargs/require-main-filename/issues" - }, - "dependencies": {}, - "description": "shim for require.main.filename() that works in as many environments as possible", - "devDependencies": { - "chai": "^3.5.0", - "standard": "^6.0.5", - "tap": "^5.2.0" - }, - "directories": {}, - "dist": { - "shasum": "97f717b69d48784f5f526a6c5aa8ffdda055a4d1", - "tarball": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" - }, - "gitHead": "6dd2291332bed764c56302ccdd14da8a213249a1", - "homepage": "https://github.com/yargs/require-main-filename#readme", - "keywords": [ - "require", - "shim", - "iisnode" - ], - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - } - ], - "name": "require-main-filename", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/yargs/require-main-filename.git" - }, - "scripts": { - "pretest": "standard", - "test": "tap --coverage test.js" - }, - "version": "1.0.1" -} diff --git a/node_modules/require-main-filename/test.js b/node_modules/require-main-filename/test.js deleted file mode 100644 index d89e7dc..0000000 --- a/node_modules/require-main-filename/test.js +++ /dev/null @@ -1,36 +0,0 @@ -/* global describe, it */ - -var requireMainFilename = require('./') - -require('tap').mochaGlobals() -require('chai').should() - -describe('require-main-filename', function () { - it('returns require.main.filename in normal circumstances', function () { - requireMainFilename().should.match(/test\.js/) - }) - - it('should use children[0].filename when running on iisnode', function () { - var main = { - filename: 'D:\\Program Files (x86)\\iisnode\\interceptor.js', - children: [ {filename: 'D:\\home\\site\\wwwroot\\server.js'} ] - } - requireMainFilename({ - main: main - }).should.match(/server\.js/) - }) - - it('should not use children[0] if no children exist', function () { - var main = { - filename: 'D:\\Program Files (x86)\\iisnode\\interceptor.js', - children: [] - } - requireMainFilename({ - main: main - }).should.match(/interceptor\.js/) - }) - - it('should default to process.cwd() if require.main is undefined', function () { - requireMainFilename({}).should.match(/require-main-filename/) - }) -}) diff --git a/node_modules/resolve/.travis.yml b/node_modules/resolve/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/resolve/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/resolve/LICENSE b/node_modules/resolve/LICENSE deleted file mode 100644 index ee27ba4..0000000 --- a/node_modules/resolve/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/resolve/example/async.js b/node_modules/resolve/example/async.js deleted file mode 100644 index 6624ff7..0000000 --- a/node_modules/resolve/example/async.js +++ /dev/null @@ -1,5 +0,0 @@ -var resolve = require('../'); -resolve('tap', { basedir: __dirname }, function (err, res) { - if (err) console.error(err) - else console.log(res) -}); diff --git a/node_modules/resolve/example/sync.js b/node_modules/resolve/example/sync.js deleted file mode 100644 index 54b2cc1..0000000 --- a/node_modules/resolve/example/sync.js +++ /dev/null @@ -1,3 +0,0 @@ -var resolve = require('../'); -var res = resolve.sync('tap', { basedir: __dirname }); -console.log(res); diff --git a/node_modules/resolve/index.js b/node_modules/resolve/index.js deleted file mode 100644 index 51f194b..0000000 --- a/node_modules/resolve/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var core = require('./lib/core'); -exports = module.exports = require('./lib/async'); -exports.core = core; -exports.isCore = function (x) { return core[x] }; -exports.sync = require('./lib/sync'); diff --git a/node_modules/resolve/lib/async.js b/node_modules/resolve/lib/async.js deleted file mode 100644 index 0f0eeca..0000000 --- a/node_modules/resolve/lib/async.js +++ /dev/null @@ -1,192 +0,0 @@ -var core = require('./core'); -var fs = require('fs'); -var path = require('path'); -var caller = require('./caller.js'); -var nodeModulesPaths = require('./node-modules-paths.js'); -var splitRe = process.platform === 'win32' ? /[\/\\]/ : /\//; - -module.exports = function resolve (x, opts, cb) { - if (typeof opts === 'function') { - cb = opts; - opts = {}; - } - if (!opts) opts = {}; - if (typeof x !== 'string') { - return process.nextTick(function () { - cb(new Error('path must be a string')); - }); - } - - var isFile = opts.isFile || function (file, cb) { - fs.stat(file, function (err, stat) { - if (err && err.code === 'ENOENT') cb(null, false) - else if (err) cb(err) - else cb(null, stat.isFile() || stat.isFIFO()) - }); - }; - var readFile = opts.readFile || fs.readFile; - - var extensions = opts.extensions || [ '.js' ]; - var y = opts.basedir || path.dirname(caller()); - - opts.paths = opts.paths || []; - - if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[\\\/])/.test(x)) { - var res = path.resolve(y, x); - if (x === '..') res += '/'; - if (/\/$/.test(x) && res === y) { - loadAsDirectory(res, opts.package, onfile); - } - else loadAsFile(res, opts.package, onfile); - } - else loadNodeModules(x, y, function (err, n, pkg) { - if (err) cb(err) - else if (n) cb(null, n, pkg) - else if (core[x]) return cb(null, x); - else cb(new Error("Cannot find module '" + x + "' from '" + y + "'")) - }); - - function onfile (err, m, pkg) { - if (err) cb(err) - else if (m) cb(null, m, pkg) - else loadAsDirectory(res, function (err, d, pkg) { - if (err) cb(err) - else if (d) cb(null, d, pkg) - else cb(new Error("Cannot find module '" + x + "' from '" + y + "'")) - }) - } - - function loadAsFile (x, pkg, cb) { - if (typeof pkg === 'function') { - cb = pkg; - pkg = undefined; - } - - var exts = [''].concat(extensions); - load(exts, x, pkg) - - function load (exts, x, pkg) { - if (exts.length === 0) return cb(null, undefined, pkg); - var file = x + exts[0]; - - if (pkg) onpkg(null, pkg) - else loadpkg(path.dirname(file), onpkg); - - function onpkg (err, pkg_, dir) { - pkg = pkg_; - if (err) return cb(err) - if (dir && pkg && opts.pathFilter) { - var rfile = path.relative(dir, file); - var rel = rfile.slice(0, rfile.length - exts[0].length); - var r = opts.pathFilter(pkg, x, rel); - if (r) return load( - [''].concat(extensions.slice()), - path.resolve(dir, r), - pkg - ); - } - isFile(file, onex); - } - function onex (err, ex) { - if (err) cb(err) - else if (!ex) load(exts.slice(1), x, pkg) - else cb(null, file, pkg) - } - } - } - - function loadpkg (dir, cb) { - if (dir === '' || dir === '/') return cb(null); - if (process.platform === 'win32' && /^\w:[\\\/]*$/.test(dir)) { - return cb(null); - } - if (/[\\\/]node_modules[\\\/]*$/.test(dir)) return cb(null); - - var pkgfile = path.join(dir, 'package.json'); - isFile(pkgfile, function (err, ex) { - // on err, ex is false - if (!ex) return loadpkg( - path.dirname(dir), cb - ); - - readFile(pkgfile, function (err, body) { - if (err) cb(err); - try { var pkg = JSON.parse(body) } - catch (err) {} - - if (pkg && opts.packageFilter) { - pkg = opts.packageFilter(pkg, pkgfile); - } - cb(null, pkg, dir); - }); - }); - } - - function loadAsDirectory (x, fpkg, cb) { - if (typeof fpkg === 'function') { - cb = fpkg; - fpkg = opts.package; - } - - var pkgfile = path.join(x, '/package.json'); - isFile(pkgfile, function (err, ex) { - if (err) return cb(err); - if (!ex) return loadAsFile(path.join(x, '/index'), fpkg, cb); - - readFile(pkgfile, function (err, body) { - if (err) return cb(err); - try { - var pkg = JSON.parse(body); - } - catch (err) {} - - if (opts.packageFilter) { - pkg = opts.packageFilter(pkg, pkgfile); - } - - if (pkg.main) { - if (pkg.main === '.' || pkg.main === './'){ - pkg.main = 'index' - } - loadAsFile(path.resolve(x, pkg.main), pkg, function (err, m, pkg) { - if (err) return cb(err); - if (m) return cb(null, m, pkg); - if (!pkg) return loadAsFile(path.join(x, '/index'), pkg, cb); - - var dir = path.resolve(x, pkg.main); - loadAsDirectory(dir, pkg, function (err, n, pkg) { - if (err) return cb(err); - if (n) return cb(null, n, pkg); - loadAsFile(path.join(x, '/index'), pkg, cb); - }); - }); - return; - } - - loadAsFile(path.join(x, '/index'), pkg, cb); - }); - }); - } - - function loadNodeModules (x, start, cb) { - (function process (dirs) { - if (dirs.length === 0) return cb(null, undefined); - var dir = dirs[0]; - - var file = path.join(dir, '/', x); - loadAsFile(file, undefined, onfile); - - function onfile (err, m, pkg) { - if (err) return cb(err); - if (m) return cb(null, m, pkg); - loadAsDirectory(path.join(dir, '/', x), undefined, ondir); - } - - function ondir (err, n, pkg) { - if (err) return cb(err); - if (n) return cb(null, n, pkg); - process(dirs.slice(1)); - } - })(nodeModulesPaths(start, opts)); - } -}; diff --git a/node_modules/resolve/lib/caller.js b/node_modules/resolve/lib/caller.js deleted file mode 100644 index 5536549..0000000 --- a/node_modules/resolve/lib/caller.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = function () { - // see https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi - var origPrepareStackTrace = Error.prepareStackTrace; - Error.prepareStackTrace = function (_, stack) { return stack }; - var stack = (new Error()).stack; - Error.prepareStackTrace = origPrepareStackTrace; - return stack[2].getFileName(); -}; diff --git a/node_modules/resolve/lib/core.js b/node_modules/resolve/lib/core.js deleted file mode 100644 index ea4a6c8..0000000 --- a/node_modules/resolve/lib/core.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = require('./core.json').reduce(function (acc, x) { - acc[x] = true; - return acc; -}, {}); diff --git a/node_modules/resolve/lib/core.json b/node_modules/resolve/lib/core.json deleted file mode 100644 index 28560f7..0000000 --- a/node_modules/resolve/lib/core.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - "assert", - "buffer_ieee754", - "buffer", - "child_process", - "cluster", - "console", - "constants", - "crypto", - "_debugger", - "dgram", - "dns", - "domain", - "events", - "freelist", - "fs", - "http", - "https", - "_linklist", - "module", - "net", - "os", - "path", - "punycode", - "querystring", - "readline", - "repl", - "stream", - "string_decoder", - "sys", - "timers", - "tls", - "tty", - "url", - "util", - "vm", - "zlib" -] diff --git a/node_modules/resolve/lib/node-modules-paths.js b/node_modules/resolve/lib/node-modules-paths.js deleted file mode 100644 index ce0a0d9..0000000 --- a/node_modules/resolve/lib/node-modules-paths.js +++ /dev/null @@ -1,38 +0,0 @@ -var path = require('path'); - -module.exports = function (start, opts) { - var modules = opts.moduleDirectory - ? [].concat(opts.moduleDirectory) - : ['node_modules'] - ; - - // ensure that `start` is an absolute path at this point, - // resolving against the process' current working directory - start = path.resolve(start); - - var prefix = '/'; - if (/^([A-Za-z]:)/.test(start)) { - prefix = ''; - } else if (/^\\\\/.test(start)) { - prefix = '\\\\'; - } - - var splitRe = process.platform === 'win32' ? /[\/\\]/ : /\/+/; - - var parts = start.split(splitRe); - - var dirs = []; - for (var i = parts.length - 1; i >= 0; i--) { - if (modules.indexOf(parts[i]) !== -1) continue; - dirs = dirs.concat(modules.map(function(module_dir) { - return prefix + path.join( - path.join.apply(path, parts.slice(0, i + 1)), - module_dir - ); - })); - } - if (process.platform === 'win32'){ - dirs[dirs.length-1] = dirs[dirs.length-1].replace(":", ":\\"); - } - return dirs.concat(opts.paths); -} diff --git a/node_modules/resolve/lib/sync.js b/node_modules/resolve/lib/sync.js deleted file mode 100644 index ef91edd..0000000 --- a/node_modules/resolve/lib/sync.js +++ /dev/null @@ -1,81 +0,0 @@ -var core = require('./core'); -var fs = require('fs'); -var path = require('path'); -var caller = require('./caller.js'); -var nodeModulesPaths = require('./node-modules-paths.js'); - -module.exports = function (x, opts) { - if (!opts) opts = {}; - var isFile = opts.isFile || function (file) { - try { var stat = fs.statSync(file) } - catch (err) { if (err && err.code === 'ENOENT') return false } - return stat.isFile() || stat.isFIFO(); - }; - var readFileSync = opts.readFileSync || fs.readFileSync; - - var extensions = opts.extensions || [ '.js' ]; - var y = opts.basedir || path.dirname(caller()); - - opts.paths = opts.paths || []; - - if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[\\\/])/.test(x)) { - var res = path.resolve(y, x); - if (x === '..') res += '/'; - var m = loadAsFileSync(res) || loadAsDirectorySync(res); - if (m) return m; - } else { - var n = loadNodeModulesSync(x, y); - if (n) return n; - } - - if (core[x]) return x; - - throw new Error("Cannot find module '" + x + "' from '" + y + "'"); - - function loadAsFileSync (x) { - if (isFile(x)) { - return x; - } - - for (var i = 0; i < extensions.length; i++) { - var file = x + extensions[i]; - if (isFile(file)) { - return file; - } - } - } - - function loadAsDirectorySync (x) { - var pkgfile = path.join(x, '/package.json'); - if (isFile(pkgfile)) { - var body = readFileSync(pkgfile, 'utf8'); - try { - var pkg = JSON.parse(body); - if (opts.packageFilter) { - pkg = opts.packageFilter(pkg, x); - } - - if (pkg.main) { - var m = loadAsFileSync(path.resolve(x, pkg.main)); - if (m) return m; - var n = loadAsDirectorySync(path.resolve(x, pkg.main)); - if (n) return n; - } - } - catch (err) {} - } - - return loadAsFileSync(path.join( x, '/index')); - } - - function loadNodeModulesSync (x, start) { - var dirs = nodeModulesPaths(start, opts); - for (var i = 0; i < dirs.length; i++) { - var dir = dirs[i]; - var m = loadAsFileSync(path.join( dir, '/', x)); - if (m) return m; - var n = loadAsDirectorySync(path.join( dir, '/', x )); - if (n) return n; - } - } -}; diff --git a/node_modules/resolve/package.json b/node_modules/resolve/package.json deleted file mode 100644 index 84a0b3f..0000000 --- a/node_modules/resolve/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "resolve@~1.1.7", - "/Users/jbaylina/git/MVP/node_modules/tape" - ] - ], - "_from": "resolve@>=1.1.7 <1.2.0", - "_id": "resolve@1.1.7", - "_inCache": true, - "_installable": true, - "_location": "/resolve", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "substack@gmail.com", - "name": "substack" - }, - "_npmVersion": "3.4.1", - "_phantomChildren": {}, - "_requested": { - "name": "resolve", - "raw": "resolve@~1.1.7", - "rawSpec": "~1.1.7", - "scope": null, - "spec": ">=1.1.7 <1.2.0", - "type": "range" - }, - "_requiredBy": [ - "/tape" - ], - "_resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "_shasum": "203114d82ad2c5ed9e8e0411b3932875e889e97b", - "_shrinkwrap": null, - "_spec": "resolve@~1.1.7", - "_where": "/Users/jbaylina/git/MVP/node_modules/tape", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/node-resolve/issues" - }, - "dependencies": {}, - "description": "resolve like require.resolve() on behalf of files asynchronously and synchronously", - "devDependencies": { - "tap": "0.4.13", - "tape": "^3.5.0" - }, - "directories": {}, - "dist": { - "shasum": "203114d82ad2c5ed9e8e0411b3932875e889e97b", - "tarball": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" - }, - "gitHead": "bb37f0d4400e4d7835375be4bd3ad1264bac3689", - "homepage": "https://github.com/substack/node-resolve#readme", - "keywords": [ - "resolve", - "require", - "node", - "module" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "resolve", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/node-resolve.git" - }, - "scripts": { - "test": "tape test/*.js" - }, - "version": "1.1.7" -} diff --git a/node_modules/resolve/readme.markdown b/node_modules/resolve/readme.markdown deleted file mode 100644 index 4fab9b0..0000000 --- a/node_modules/resolve/readme.markdown +++ /dev/null @@ -1,148 +0,0 @@ -# resolve - -implements the [node `require.resolve()` -algorithm](http://nodejs.org/docs/v0.4.8/api/all.html#all_Together...) -such that you can `require.resolve()` on behalf of a file asynchronously and -synchronously - -[![build status](https://secure.travis-ci.org/substack/node-resolve.png)](http://travis-ci.org/substack/node-resolve) - -# example - -asynchronously resolve: - -``` js -var resolve = require('resolve'); -resolve('tap', { basedir: __dirname }, function (err, res) { - if (err) console.error(err) - else console.log(res) -}); -``` - -``` -$ node example/async.js -/home/substack/projects/node-resolve/node_modules/tap/lib/main.js -``` - -synchronously resolve: - -``` js -var resolve = require('resolve'); -var res = resolve.sync('tap', { basedir: __dirname }); -console.log(res); -``` - -``` -$ node example/sync.js -/home/substack/projects/node-resolve/node_modules/tap/lib/main.js -``` - -# methods - -``` js -var resolve = require('resolve') -``` - -## resolve(id, opts={}, cb) - -Asynchronously resolve the module path string `id` into `cb(err, res [, pkg])`, where `pkg` (if defined) is the data from `package.json`. - -options are: - -* opts.basedir - directory to begin resolving from - -* opts.package - `package.json` data applicable to the module being loaded - -* opts.extensions - array of file extensions to search in order - -* opts.readFile - how to read files asynchronously - -* opts.isFile - function to asynchronously test whether a file exists - -* opts.packageFilter - transform the parsed package.json contents before looking -at the "main" field - -* opts.pathFilter(pkg, path, relativePath) - transform a path within a package - * pkg - package data - * path - the path being resolved - * relativePath - the path relative from the package.json location - * returns - a relative path that will be joined from the package.json location - -* opts.paths - require.paths array to use if nothing is found on the normal -node_modules recursive walk (probably don't use this) - -* opts.moduleDirectory - directory (or directories) in which to recursively look for modules. default: `"node_modules"` - -default `opts` values: - -``` javascript -{ - paths: [], - basedir: __dirname, - extensions: [ '.js' ], - readFile: fs.readFile, - isFile: function (file, cb) { - fs.stat(file, function (err, stat) { - if (err && err.code === 'ENOENT') cb(null, false) - else if (err) cb(err) - else cb(null, stat.isFile()) - }); - }, - moduleDirectory: 'node_modules' -} -``` - -## resolve.sync(id, opts) - -Synchronously resolve the module path string `id`, returning the result and -throwing an error when `id` can't be resolved. - -options are: - -* opts.basedir - directory to begin resolving from - -* opts.extensions - array of file extensions to search in order - -* opts.readFile - how to read files synchronously - -* opts.isFile - function to synchronously test whether a file exists - -* `opts.packageFilter(pkg, pkgfile)` - transform the parsed package.json -* contents before looking at the "main" field - -* opts.paths - require.paths array to use if nothing is found on the normal -node_modules recursive walk (probably don't use this) - -* opts.moduleDirectory - directory (or directories) in which to recursively look for modules. default: `"node_modules"` - -default `opts` values: - -``` javascript -{ - paths: [], - basedir: __dirname, - extensions: [ '.js' ], - readFileSync: fs.readFileSync, - isFile: function (file) { - try { return fs.statSync(file).isFile() } - catch (e) { return false } - }, - moduleDirectory: 'node_modules' -} -```` - -## resolve.isCore(pkg) - -Return whether a package is in core. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install resolve -``` - -# license - -MIT diff --git a/node_modules/resolve/test/core.js b/node_modules/resolve/test/core.js deleted file mode 100644 index 4a56682..0000000 --- a/node_modules/resolve/test/core.js +++ /dev/null @@ -1,12 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); - -test('core modules', function (t) { - t.ok(resolve.isCore('fs')); - t.ok(resolve.isCore('net')); - t.ok(resolve.isCore('http')); - - t.ok(!resolve.isCore('seq')); - t.ok(!resolve.isCore('../')); - t.end(); -}); diff --git a/node_modules/resolve/test/dotdot.js b/node_modules/resolve/test/dotdot.js deleted file mode 100644 index b876772..0000000 --- a/node_modules/resolve/test/dotdot.js +++ /dev/null @@ -1,29 +0,0 @@ -var path = require('path'); -var test = require('tape'); -var resolve = require('../'); - -test('dotdot', function (t) { - t.plan(4); - var dir = __dirname + '/dotdot/abc'; - - resolve('..', { basedir : dir }, function (err, res, pkg) { - t.ifError(err); - t.equal(res, __dirname + '/dotdot/index.js'); - }); - - resolve('.', { basedir : dir }, function (err, res, pkg) { - t.ifError(err); - t.equal(res, dir + '/index.js'); - }); -}); - -test('dotdot sync', function (t) { - t.plan(2); - var dir = __dirname + '/dotdot/abc'; - - var a = resolve.sync('..', { basedir : dir }); - t.equal(a, __dirname + '/dotdot/index.js'); - - var b = resolve.sync('.', { basedir : dir }); - t.equal(b, dir + '/index.js'); -}); diff --git a/node_modules/resolve/test/dotdot/abc/index.js b/node_modules/resolve/test/dotdot/abc/index.js deleted file mode 100644 index 67f2534..0000000 --- a/node_modules/resolve/test/dotdot/abc/index.js +++ /dev/null @@ -1,2 +0,0 @@ -var x = require('..'); -console.log(x); diff --git a/node_modules/resolve/test/dotdot/index.js b/node_modules/resolve/test/dotdot/index.js deleted file mode 100644 index afec736..0000000 --- a/node_modules/resolve/test/dotdot/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'whatever' diff --git a/node_modules/resolve/test/faulty_basedir.js b/node_modules/resolve/test/faulty_basedir.js deleted file mode 100644 index 2440818..0000000 --- a/node_modules/resolve/test/faulty_basedir.js +++ /dev/null @@ -1,17 +0,0 @@ -var path = require('path'); -var test = require('tape'); -var resolve = require('../'); - -// not sure what's up with this test anymore -if (process.platform !== 'win32') return; - -test('faulty basedir must produce error in windows', function (t) { - t.plan(1); - - var resolverDir = 'C:\\a\\b\\c\\d'; - - resolve('tape/lib/test.js', { basedir : resolverDir }, function (err, res, pkg) { - t.equal(true, !!err); - }); - -}); diff --git a/node_modules/resolve/test/filter.js b/node_modules/resolve/test/filter.js deleted file mode 100644 index 07c38f3..0000000 --- a/node_modules/resolve/test/filter.js +++ /dev/null @@ -1,18 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); - -test('filter', function (t) { - t.plan(2); - var dir = __dirname + '/resolver'; - resolve('./baz', { - basedir : dir, - packageFilter : function (pkg) { - pkg.main = 'doom'; - return pkg; - } - }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/baz/doom.js'); - t.equal(pkg.main, 'doom'); - }); -}); diff --git a/node_modules/resolve/test/filter_sync.js b/node_modules/resolve/test/filter_sync.js deleted file mode 100644 index 3f89b79..0000000 --- a/node_modules/resolve/test/filter_sync.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); - -test('filter', function (t) { - var dir = __dirname + '/resolver'; - var res = resolve.sync('./baz', { - basedir : dir, - packageFilter : function (pkg) { - pkg.main = 'doom' - return pkg; - } - }); - t.equal(res, dir + '/baz/doom.js'); - t.end(); -}); diff --git a/node_modules/resolve/test/mock.js b/node_modules/resolve/test/mock.js deleted file mode 100644 index 1cf3b12..0000000 --- a/node_modules/resolve/test/mock.js +++ /dev/null @@ -1,142 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); - -test('mock', function (t) { - t.plan(6); - - var files = { - '/foo/bar/baz.js' : 'beep' - }; - - function opts (basedir) { - return { - basedir : basedir, - isFile : function (file, cb) { - cb(null, files.hasOwnProperty(file)); - }, - readFile : function (file, cb) { - cb(null, files[file]); - } - } - } - - resolve('./baz', opts('/foo/bar'), function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, '/foo/bar/baz.js'); - t.equal(pkg, undefined); - }); - - resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, '/foo/bar/baz.js'); - t.equal(pkg, undefined); - }); - - resolve('baz', opts('/foo/bar'), function (err, res) { - t.equal(err.message, "Cannot find module 'baz' from '/foo/bar'"); - }); - - resolve('../baz', opts('/foo/bar'), function (err, res) { - t.equal(err.message, "Cannot find module '../baz' from '/foo/bar'"); - }); -}); - -test('mock from package', function (t) { - t.plan(6); - - var files = { - '/foo/bar/baz.js' : 'beep' - }; - - function opts (basedir) { - return { - basedir : basedir, - package : { main: 'bar' }, - isFile : function (file, cb) { - cb(null, files.hasOwnProperty(file)); - }, - readFile : function (file, cb) { - cb(null, files[file]); - } - } - } - - resolve('./baz', opts('/foo/bar'), function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, '/foo/bar/baz.js'); - t.equal(pkg.main, 'bar'); - }); - - resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, '/foo/bar/baz.js'); - t.equal(pkg.main, 'bar'); - }); - - resolve('baz', opts('/foo/bar'), function (err, res) { - t.equal(err.message, "Cannot find module 'baz' from '/foo/bar'"); - }); - - resolve('../baz', opts('/foo/bar'), function (err, res) { - t.equal(err.message, "Cannot find module '../baz' from '/foo/bar'"); - }); -}); - -test('mock package', function (t) { - t.plan(2); - - var files = { - '/foo/node_modules/bar/baz.js' : 'beep', - '/foo/node_modules/bar/package.json' : JSON.stringify({ - main : './baz.js' - }) - }; - - function opts (basedir) { - return { - basedir : basedir, - isFile : function (file, cb) { - cb(null, files.hasOwnProperty(file)); - }, - readFile : function (file, cb) { - cb(null, files[file]); - } - } - } - - resolve('bar', opts('/foo'), function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, '/foo/node_modules/bar/baz.js'); - t.equal(pkg.main, './baz.js'); - }); -}); - -test('mock package from package', function (t) { - t.plan(2); - - var files = { - '/foo/node_modules/bar/baz.js' : 'beep', - '/foo/node_modules/bar/package.json' : JSON.stringify({ - main : './baz.js' - }) - }; - - function opts (basedir) { - return { - basedir : basedir, - package : { main: 'bar' }, - isFile : function (file, cb) { - cb(null, files.hasOwnProperty(file)); - }, - readFile : function (file, cb) { - cb(null, files[file]); - } - } - } - - resolve('bar', opts('/foo'), function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, '/foo/node_modules/bar/baz.js'); - t.equal(pkg.main, './baz.js'); - }); -}); diff --git a/node_modules/resolve/test/mock_sync.js b/node_modules/resolve/test/mock_sync.js deleted file mode 100644 index abfd289..0000000 --- a/node_modules/resolve/test/mock_sync.js +++ /dev/null @@ -1,68 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); - -test('mock', function (t) { - t.plan(4); - - var files = { - '/foo/bar/baz.js' : 'beep' - }; - - function opts (basedir) { - return { - basedir : basedir, - isFile : function (file) { - return files.hasOwnProperty(file) - }, - readFileSync : function (file) { - return files[file] - } - } - } - - t.equal( - resolve.sync('./baz', opts('/foo/bar')), - '/foo/bar/baz.js' - ); - - t.equal( - resolve.sync('./baz.js', opts('/foo/bar')), - '/foo/bar/baz.js' - ); - - t.throws(function () { - resolve.sync('baz', opts('/foo/bar')); - }); - - t.throws(function () { - resolve.sync('../baz', opts('/foo/bar')); - }); -}); - -test('mock package', function (t) { - t.plan(1); - - var files = { - '/foo/node_modules/bar/baz.js' : 'beep', - '/foo/node_modules/bar/package.json' : JSON.stringify({ - main : './baz.js' - }) - }; - - function opts (basedir) { - return { - basedir : basedir, - isFile : function (file) { - return files.hasOwnProperty(file) - }, - readFileSync : function (file) { - return files[file] - } - } - } - - t.equal( - resolve.sync('bar', opts('/foo')), - '/foo/node_modules/bar/baz.js' - ); -}); diff --git a/node_modules/resolve/test/module_dir.js b/node_modules/resolve/test/module_dir.js deleted file mode 100644 index 06395d8..0000000 --- a/node_modules/resolve/test/module_dir.js +++ /dev/null @@ -1,56 +0,0 @@ -var path = require('path'); -var test = require('tape'); -var resolve = require('../'); - -test('moduleDirectory strings', function (t) { - t.plan(4); - var dir = __dirname + '/module_dir'; - var xopts = { - basedir : dir, - moduleDirectory: 'xmodules' - }; - resolve('aaa', xopts, function (err, res, pkg) { - t.ifError(err); - t.equal(res, dir + '/xmodules/aaa/index.js'); - }); - - var yopts = { - basedir : dir, - moduleDirectory: 'ymodules' - }; - resolve('aaa', yopts, function (err, res, pkg) { - t.ifError(err); - t.equal(res, dir + '/ymodules/aaa/index.js'); - }); -}); - -test('moduleDirectory array', function (t) { - t.plan(6); - var dir = __dirname + '/module_dir'; - var aopts = { - basedir : dir, - moduleDirectory: [ 'xmodules', 'ymodules', 'zmodules' ] - }; - resolve('aaa', aopts, function (err, res, pkg) { - t.ifError(err); - t.equal(res, dir + '/xmodules/aaa/index.js'); - }); - - var bopts = { - basedir : dir, - moduleDirectory: [ 'zmodules', 'ymodules', 'xmodules' ] - }; - resolve('aaa', bopts, function (err, res, pkg) { - t.ifError(err); - t.equal(res, dir + '/ymodules/aaa/index.js'); - }); - - var copts = { - basedir : dir, - moduleDirectory: [ 'xmodules', 'ymodules', 'zmodules' ] - }; - resolve('bbb', copts, function (err, res, pkg) { - t.ifError(err); - t.equal(res, dir + '/zmodules/bbb/main.js'); - }); -}); diff --git a/node_modules/resolve/test/module_dir/xmodules/aaa/index.js b/node_modules/resolve/test/module_dir/xmodules/aaa/index.js deleted file mode 100644 index 55cd18c..0000000 --- a/node_modules/resolve/test/module_dir/xmodules/aaa/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = function (x) { return x * 100 } diff --git a/node_modules/resolve/test/module_dir/ymodules/aaa/index.js b/node_modules/resolve/test/module_dir/ymodules/aaa/index.js deleted file mode 100644 index 651aca8..0000000 --- a/node_modules/resolve/test/module_dir/ymodules/aaa/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = function (x) { return x + 100 } diff --git a/node_modules/resolve/test/module_dir/zmodules/bbb/main.js b/node_modules/resolve/test/module_dir/zmodules/bbb/main.js deleted file mode 100644 index 4325a0b..0000000 --- a/node_modules/resolve/test/module_dir/zmodules/bbb/main.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = function (n) { return n * 111 } diff --git a/node_modules/resolve/test/module_dir/zmodules/bbb/package.json b/node_modules/resolve/test/module_dir/zmodules/bbb/package.json deleted file mode 100644 index c13b8cf..0000000 --- a/node_modules/resolve/test/module_dir/zmodules/bbb/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "main": "main.js" -} diff --git a/node_modules/resolve/test/node_path.js b/node_modules/resolve/test/node_path.js deleted file mode 100644 index 2407189..0000000 --- a/node_modules/resolve/test/node_path.js +++ /dev/null @@ -1,48 +0,0 @@ -var path = require('path'); -var test = require('tape'); -var resolve = require('../'); - -test('$NODE_PATH', function (t) { - t.plan(4); - - resolve('aaa', { - paths: [ - __dirname + '/node_path/x', - __dirname + '/node_path/y' - ], - basedir: __dirname, - }, function (err, res) { - t.equal(res, __dirname + '/node_path/x/aaa/index.js'); - }); - - resolve('bbb', { - paths: [ - __dirname + '/node_path/x', - __dirname + '/node_path/y' - ], - basedir: __dirname, - }, function (err, res) { - t.equal(res, __dirname + '/node_path/y/bbb/index.js'); - }); - - resolve('ccc', { - paths: [ - __dirname + '/node_path/x', - __dirname + '/node_path/y' - ], - basedir: __dirname, - }, function (err, res) { - t.equal(res, __dirname + '/node_path/x/ccc/index.js'); - }); - - // ensure that relative paths still resolve against the - // regular `node_modules` correctly - resolve('tap', { - paths: [ - 'node_path', - ], - basedir: 'node_path/x', - }, function (err, res) { - t.equal(res, path.resolve(__dirname, '..', 'node_modules/tap/lib/main.js')); - }); -}); diff --git a/node_modules/resolve/test/node_path/x/aaa/index.js b/node_modules/resolve/test/node_path/x/aaa/index.js deleted file mode 100644 index 1ea5913..0000000 --- a/node_modules/resolve/test/node_path/x/aaa/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'A' diff --git a/node_modules/resolve/test/node_path/x/ccc/index.js b/node_modules/resolve/test/node_path/x/ccc/index.js deleted file mode 100644 index f186fa7..0000000 --- a/node_modules/resolve/test/node_path/x/ccc/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'C' diff --git a/node_modules/resolve/test/node_path/y/bbb/index.js b/node_modules/resolve/test/node_path/y/bbb/index.js deleted file mode 100644 index e22dd83..0000000 --- a/node_modules/resolve/test/node_path/y/bbb/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'B' diff --git a/node_modules/resolve/test/node_path/y/ccc/index.js b/node_modules/resolve/test/node_path/y/ccc/index.js deleted file mode 100644 index d0043d1..0000000 --- a/node_modules/resolve/test/node_path/y/ccc/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'CY' diff --git a/node_modules/resolve/test/nonstring.js b/node_modules/resolve/test/nonstring.js deleted file mode 100644 index ef63c40..0000000 --- a/node_modules/resolve/test/nonstring.js +++ /dev/null @@ -1,9 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); - -test('nonstring', function (t) { - t.plan(1); - resolve(555, function (err, res, pkg) { - t.ok(err); - }); -}); diff --git a/node_modules/resolve/test/pathfilter.js b/node_modules/resolve/test/pathfilter.js deleted file mode 100644 index 142f94d..0000000 --- a/node_modules/resolve/test/pathfilter.js +++ /dev/null @@ -1,35 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); - -test('#62: deep module references and the pathFilter', function(t){ - t.plan(9); - - var resolverDir = __dirname + '/pathfilter/deep_ref'; - var pathFilter = function(pkg, x, remainder){ - t.equal(pkg.version, "1.2.3"); - t.equal(x, resolverDir + '/node_modules/deep/ref'); - t.equal(remainder, "ref"); - return "alt"; - }; - - resolve('deep/ref', { basedir : resolverDir }, function (err, res, pkg) { - if (err) t.fail(err); - - t.equal(pkg.version, "1.2.3"); - t.equal(res, resolverDir + '/node_modules/deep/ref.js'); - }); - - resolve('deep/deeper/ref', { basedir: resolverDir }, - function(err, res, pkg) { - if(err) t.fail(err); - t.notEqual(pkg, undefined); - t.equal(pkg.version, "1.2.3"); - t.equal(res, resolverDir + '/node_modules/deep/deeper/ref.js'); - }); - - resolve('deep/ref', { basedir : resolverDir, pathFilter : pathFilter }, - function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, resolverDir + '/node_modules/deep/alt.js'); - }); -}); diff --git a/node_modules/resolve/test/pathfilter/deep_ref/main.js b/node_modules/resolve/test/pathfilter/deep_ref/main.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/alt.js b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/alt.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/deeper/ref.js b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/deeper/ref.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/package.json b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/package.json deleted file mode 100644 index fe4b408..0000000 --- a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "deep", - "version": "1.2.3" -} diff --git a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/ref.js b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/ref.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/precedence.js b/node_modules/resolve/test/precedence.js deleted file mode 100644 index c716f0e..0000000 --- a/node_modules/resolve/test/precedence.js +++ /dev/null @@ -1,23 +0,0 @@ -var path = require('path'); -var test = require('tape'); -var resolve = require('../'); - -test('precedence', function (t) { - t.plan(3); - var dir = path.join(__dirname, 'precedence/aaa'); - - resolve('./', { basedir : dir }, function (err, res, pkg) { - t.ifError(err); - t.equal(res, path.join(dir, 'index.js')); - t.equal(pkg.name, 'resolve'); - }); -}); - -test('./ should not load ${dir}.js', function (t) { - t.plan(1); - var dir = path.join(__dirname, 'precedence/bbb'); - - resolve('./', { basedir : dir }, function (err, res, pkg) { - t.ok(err); - }); -}); diff --git a/node_modules/resolve/test/precedence/aaa.js b/node_modules/resolve/test/precedence/aaa.js deleted file mode 100644 index a182397..0000000 --- a/node_modules/resolve/test/precedence/aaa.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'wtf' diff --git a/node_modules/resolve/test/precedence/aaa/index.js b/node_modules/resolve/test/precedence/aaa/index.js deleted file mode 100644 index 993b03c..0000000 --- a/node_modules/resolve/test/precedence/aaa/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'okok' diff --git a/node_modules/resolve/test/precedence/aaa/main.js b/node_modules/resolve/test/precedence/aaa/main.js deleted file mode 100644 index db38959..0000000 --- a/node_modules/resolve/test/precedence/aaa/main.js +++ /dev/null @@ -1 +0,0 @@ -console.log(require('./')) diff --git a/node_modules/resolve/test/precedence/bbb.js b/node_modules/resolve/test/precedence/bbb.js deleted file mode 100644 index c8a9996..0000000 --- a/node_modules/resolve/test/precedence/bbb.js +++ /dev/null @@ -1 +0,0 @@ -module.exports '>_<' diff --git a/node_modules/resolve/test/precedence/bbb/main.js b/node_modules/resolve/test/precedence/bbb/main.js deleted file mode 100644 index 716b81d..0000000 --- a/node_modules/resolve/test/precedence/bbb/main.js +++ /dev/null @@ -1 +0,0 @@ -console.log(require('./')); // should throw diff --git a/node_modules/resolve/test/resolver.js b/node_modules/resolve/test/resolver.js deleted file mode 100644 index 5bbb05f..0000000 --- a/node_modules/resolve/test/resolver.js +++ /dev/null @@ -1,281 +0,0 @@ -var path = require('path'); -var test = require('tape'); -var resolve = require('../'); - -test('async foo', function (t) { - t.plan(9); - var dir = __dirname + '/resolver'; - - resolve('./foo', { basedir : dir }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/foo.js'); - t.equal(pkg.name, 'resolve'); - }); - - resolve('./foo.js', { basedir : dir }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/foo.js'); - t.equal(pkg.name, 'resolve'); - }); - - resolve('./foo', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/foo.js'); - t.equal(pkg.main, 'resolver'); - }); - - resolve('./foo.js', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/foo.js'); - t.equal(pkg.main, 'resolver'); - }); - - resolve('foo', { basedir : dir }, function (err) { - t.equal(err.message, "Cannot find module 'foo' from '" + path.resolve(dir) + "'"); - }); -}); - -test('bar', function (t) { - t.plan(6); - var dir = __dirname + '/resolver'; - - resolve('foo', { basedir : dir + '/bar' }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/bar/node_modules/foo/index.js'); - t.equal(pkg, undefined); - }); - - resolve('foo', { basedir : dir + '/bar' }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/bar/node_modules/foo/index.js'); - t.equal(pkg, undefined); - }); - - resolve('foo', { basedir : dir + '/bar', package: { main: 'bar' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/bar/node_modules/foo/index.js'); - t.equal(pkg, undefined); - }); -}); - -test('baz', function (t) { - t.plan(4); - var dir = __dirname + '/resolver'; - - resolve('./baz', { basedir : dir }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/baz/quux.js'); - t.equal(pkg.main, 'quux.js'); - }); - - resolve('./baz', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/baz/quux.js'); - t.equal(pkg.main, 'quux.js'); - }); -}); - -test('biz', function (t) { - t.plan(24); - var dir = __dirname + '/resolver/biz/node_modules'; - - resolve('./grux', { basedir : dir }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/grux/index.js'); - t.equal(pkg, undefined); - }); - - resolve('./grux', { basedir : dir, package: { main: 'biz' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/grux/index.js'); - t.equal(pkg.main, 'biz'); - }); - - resolve('./garply', { basedir : dir }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/garply/lib/index.js'); - t.equal(pkg.main, './lib'); - }); - - resolve('./garply', { basedir : dir, package: { main: 'biz' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/garply/lib/index.js'); - t.equal(pkg.main, './lib'); - }); - - resolve('tiv', { basedir : dir + '/grux' }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/tiv/index.js'); - t.equal(pkg, undefined); - }); - - resolve('tiv', { basedir : dir + '/grux', package: { main: 'grux' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/tiv/index.js'); - t.equal(pkg, undefined); - }); - - resolve('tiv', { basedir : dir + '/garply' }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/tiv/index.js'); - t.equal(pkg, undefined); - }); - - resolve('tiv', { basedir : dir + '/garply', package: { main: './lib' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/tiv/index.js'); - t.equal(pkg, undefined); - }); - - resolve('grux', { basedir : dir + '/tiv' }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/grux/index.js'); - t.equal(pkg, undefined); - }); - - resolve('grux', { basedir : dir + '/tiv', package: { main: 'tiv' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/grux/index.js'); - t.equal(pkg, undefined); - }); - - resolve('garply', { basedir : dir + '/tiv' }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/garply/lib/index.js'); - t.equal(pkg.main, './lib'); - }); - - resolve('garply', { basedir : dir + '/tiv', package: { main: 'tiv' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/garply/lib/index.js'); - t.equal(pkg.main, './lib'); - }); -}); - -test('quux', function (t) { - t.plan(2); - var dir = __dirname + '/resolver/quux'; - - resolve('./foo', { basedir : dir, package: { main: 'quux' } }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/foo/index.js'); - t.equal(pkg.main, 'quux'); - }); -}); - -test('normalize', function (t) { - t.plan(2); - var dir = __dirname + '/resolver/biz/node_modules/grux'; - - resolve('../grux', { basedir : dir }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/index.js'); - t.equal(pkg, undefined); - }); -}); - -test('cup', function (t) { - t.plan(3); - var dir = __dirname + '/resolver'; - - resolve('./cup', { basedir : dir, extensions : [ '.js', '.coffee' ] }, - function (err, res) { - if (err) t.fail(err); - t.equal(res, dir + '/cup.coffee'); - }); - - resolve('./cup.coffee', { basedir : dir }, function (err, res) { - if (err) t.fail(err); - t.equal(res, dir + '/cup.coffee'); - }); - - resolve('./cup', { basedir : dir, extensions : [ '.js' ] }, - function (err, res) { - t.equal(err.message, "Cannot find module './cup' from '" + path.resolve(dir) + "'"); - }); -}); - -test('mug', function (t) { - t.plan(3); - var dir = __dirname + '/resolver'; - - resolve('./mug', { basedir : dir }, function (err, res) { - if (err) t.fail(err); - t.equal(res, dir + '/mug.js'); - }); - - resolve('./mug', { basedir : dir, extensions : [ '.coffee', '.js' ] }, - function (err, res) { - if (err) t.fail(err); - t.equal(res, dir + '/mug.coffee'); - }); - - resolve('./mug', { basedir : dir, extensions : [ '.js', '.coffee' ] }, - function (err, res) { - t.equal(res, dir + '/mug.js'); - }); -}); - -test('other path', function (t) { - t.plan(4); - var resolverDir = __dirname + '/resolver'; - var dir = resolverDir + '/bar'; - var otherDir = resolverDir + '/other_path'; - - resolve('root', { basedir : dir, paths: [otherDir] }, function (err, res) { - if (err) t.fail(err); - t.equal(res, resolverDir + '/other_path/root.js'); - }); - - resolve('lib/other-lib', { basedir : dir, paths: [otherDir] }, - function (err, res) { - if (err) t.fail(err); - t.equal(res, resolverDir + '/other_path/lib/other-lib.js'); - }); - - resolve('root', { basedir : dir, }, function (err, res) { - t.equal(err.message, "Cannot find module 'root' from '" + path.resolve(dir) + "'"); - }); - - resolve('zzz', { basedir : dir, paths: [otherDir] }, function (err, res) { - t.equal(err.message, "Cannot find module 'zzz' from '" + path.resolve(dir) + "'"); - }); -}); - -test('incorrect main', function (t) { - t.plan(1) - - var resolverDir = __dirname + '/resolver'; - var dir = resolverDir + '/incorrect_main'; - - resolve('./incorrect_main', { basedir : resolverDir }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, dir + '/index.js'); - }); -}); - -test('without basedir', function (t) { - t.plan(1); - - var dir = __dirname + '/resolver/without_basedir'; - var tester = require(dir + '/main.js'); - - tester(t, function (err, res, pkg){ - if (err) { - t.fail(err); - } else { - t.equal(res, dir + '/node_modules/mymodule.js'); - } - }); -}); - -test('#25: node modules with the same name as node stdlib modules', function (t) { - t.plan(1); - - var resolverDir = __dirname + '/resolver/punycode'; - - resolve('punycode', { basedir : resolverDir }, function (err, res, pkg) { - if (err) t.fail(err); - t.equal(res, resolverDir + '/node_modules/punycode/index.js'); - }); -}); diff --git a/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js b/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js deleted file mode 100644 index bd816ea..0000000 --- a/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 1; diff --git a/node_modules/resolve/test/resolver/baz/doom.js b/node_modules/resolve/test/resolver/baz/doom.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/resolver/baz/package.json b/node_modules/resolve/test/resolver/baz/package.json deleted file mode 100644 index 6b81dcd..0000000 --- a/node_modules/resolve/test/resolver/baz/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "main" : "quux.js" -} diff --git a/node_modules/resolve/test/resolver/baz/quux.js b/node_modules/resolve/test/resolver/baz/quux.js deleted file mode 100644 index bd816ea..0000000 --- a/node_modules/resolve/test/resolver/baz/quux.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 1; diff --git a/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js b/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js deleted file mode 100644 index 0379e29..0000000 --- a/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'hello garply'; diff --git a/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json b/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json deleted file mode 100644 index babaac5..0000000 --- a/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "main" : "./lib" -} diff --git a/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js b/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js deleted file mode 100644 index 4996055..0000000 --- a/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('tiv') * 100; diff --git a/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js b/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js deleted file mode 100644 index 690aad3..0000000 --- a/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 3; diff --git a/node_modules/resolve/test/resolver/cup.coffee b/node_modules/resolve/test/resolver/cup.coffee deleted file mode 100644 index 8b13789..0000000 --- a/node_modules/resolve/test/resolver/cup.coffee +++ /dev/null @@ -1 +0,0 @@ - diff --git a/node_modules/resolve/test/resolver/foo.js b/node_modules/resolve/test/resolver/foo.js deleted file mode 100644 index bd816ea..0000000 --- a/node_modules/resolve/test/resolver/foo.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 1; diff --git a/node_modules/resolve/test/resolver/incorrect_main/index.js b/node_modules/resolve/test/resolver/incorrect_main/index.js deleted file mode 100644 index bc1fb0a..0000000 --- a/node_modules/resolve/test/resolver/incorrect_main/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// this is the actual main file 'index.js', not 'wrong.js' like the package.json would indicate -module.exports = 1; diff --git a/node_modules/resolve/test/resolver/incorrect_main/package.json b/node_modules/resolve/test/resolver/incorrect_main/package.json deleted file mode 100644 index 1592ed3..0000000 --- a/node_modules/resolve/test/resolver/incorrect_main/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "main" : "wrong.js" -} diff --git a/node_modules/resolve/test/resolver/mug.coffee b/node_modules/resolve/test/resolver/mug.coffee deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/resolver/mug.js b/node_modules/resolve/test/resolver/mug.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/resolver/other_path/lib/other-lib.js b/node_modules/resolve/test/resolver/other_path/lib/other-lib.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/resolver/other_path/root.js b/node_modules/resolve/test/resolver/other_path/root.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js b/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/resolve/test/resolver/quux/foo/index.js b/node_modules/resolve/test/resolver/quux/foo/index.js deleted file mode 100644 index bd816ea..0000000 --- a/node_modules/resolve/test/resolver/quux/foo/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 1; diff --git a/node_modules/resolve/test/resolver/without_basedir/main.js b/node_modules/resolve/test/resolver/without_basedir/main.js deleted file mode 100644 index 5f211e9..0000000 --- a/node_modules/resolve/test/resolver/without_basedir/main.js +++ /dev/null @@ -1,6 +0,0 @@ -resolve = require('../../../'); - -module.exports = function(t, cb) { - resolve('mymodule', null, cb); -} - diff --git a/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js b/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js deleted file mode 100644 index 2b58aa4..0000000 --- a/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = "The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.- E. Dijkstra" diff --git a/node_modules/resolve/test/resolver_sync.js b/node_modules/resolve/test/resolver_sync.js deleted file mode 100644 index 5982531..0000000 --- a/node_modules/resolve/test/resolver_sync.js +++ /dev/null @@ -1,180 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); - -test('foo', function (t) { - var dir = __dirname + '/resolver'; - - t.equal( - resolve.sync('./foo', { basedir : dir }), - dir + '/foo.js' - ); - - t.equal( - resolve.sync('./foo.js', { basedir : dir }), - dir + '/foo.js' - ); - - t.throws(function () { - resolve.sync('foo', { basedir : dir }); - }); - - t.end(); -}); - -test('bar', function (t) { - var dir = __dirname + '/resolver'; - - t.equal( - resolve.sync('foo', { basedir : dir + '/bar' }), - dir + '/bar/node_modules/foo/index.js' - ); - t.end(); -}); - -test('baz', function (t) { - var dir = __dirname + '/resolver'; - - t.equal( - resolve.sync('./baz', { basedir : dir }), - dir + '/baz/quux.js' - ); - t.end(); -}); - -test('biz', function (t) { - var dir = __dirname + '/resolver/biz/node_modules'; - t.equal( - resolve.sync('./grux', { basedir : dir }), - dir + '/grux/index.js' - ); - - t.equal( - resolve.sync('tiv', { basedir : dir + '/grux' }), - dir + '/tiv/index.js' - ); - - t.equal( - resolve.sync('grux', { basedir : dir + '/tiv' }), - dir + '/grux/index.js' - ); - t.end(); -}); - -test('normalize', function (t) { - var dir = __dirname + '/resolver/biz/node_modules/grux'; - t.equal( - resolve.sync('../grux', { basedir : dir }), - dir + '/index.js' - ); - t.end(); -}); - -test('cup', function (t) { - var dir = __dirname + '/resolver'; - t.equal( - resolve.sync('./cup', { - basedir : dir, - extensions : [ '.js', '.coffee' ] - }), - dir + '/cup.coffee' - ); - - t.equal( - resolve.sync('./cup.coffee', { - basedir : dir - }), - dir + '/cup.coffee' - ); - - t.throws(function () { - resolve.sync('./cup', { - basedir : dir, - extensions : [ '.js' ] - }) - }); - - t.end(); -}); - -test('mug', function (t) { - var dir = __dirname + '/resolver'; - t.equal( - resolve.sync('./mug', { basedir : dir }), - dir + '/mug.js' - ); - - t.equal( - resolve.sync('./mug', { - basedir : dir, - extensions : [ '.coffee', '.js' ] - }), - dir + '/mug.coffee' - ); - - t.equal( - resolve.sync('./mug', { - basedir : dir, - extensions : [ '.js', '.coffee' ] - }), - dir + '/mug.js' - ); - - t.end(); -}); - -test('other path', function (t) { - var resolverDir = __dirname + '/resolver'; - var dir = resolverDir + '/bar'; - var otherDir = resolverDir + '/other_path'; - - var path = require('path'); - - t.equal( - resolve.sync('root', { - basedir : dir, - paths: [otherDir] }), - resolverDir + '/other_path/root.js' - ); - - t.equal( - resolve.sync('lib/other-lib', { - basedir : dir, - paths: [otherDir] }), - resolverDir + '/other_path/lib/other-lib.js' - ); - - t.throws(function () { - resolve.sync('root', { basedir : dir, }); - }); - - t.throws(function () { - resolve.sync('zzz', { - basedir : dir, - paths: [otherDir] }); - }); - - t.end(); -}); - -test('incorrect main', function (t) { - var resolverDir = __dirname + '/resolver'; - var dir = resolverDir + '/incorrect_main'; - - t.equal( - resolve.sync('./incorrect_main', { basedir : resolverDir }), - dir + '/index.js' - ) - - t.end() -}); - -test('#25: node modules with the same name as node stdlib modules', function (t) { - var resolverDir = __dirname + '/resolver/punycode'; - - t.equal( - resolve.sync('punycode', { basedir : resolverDir }), - resolverDir + '/node_modules/punycode/index.js' - ) - - t.end() -}); diff --git a/node_modules/resolve/test/subdirs.js b/node_modules/resolve/test/subdirs.js deleted file mode 100644 index 957abfe..0000000 --- a/node_modules/resolve/test/subdirs.js +++ /dev/null @@ -1,13 +0,0 @@ -var test = require('tape'); -var resolve = require('../'); -var path = require('path'); - -test('subdirs', function (t) { - t.plan(2); - - var dir = path.join(__dirname, '/subdirs'); - resolve('a/b/c/x.json', { basedir: dir }, function (err, res) { - t.ifError(err); - t.equal(res, path.join(dir, 'node_modules/a/b/c/x.json')); - }); -}); diff --git a/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json b/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json deleted file mode 100644 index 3cc0ecb..0000000 --- a/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json +++ /dev/null @@ -1 +0,0 @@ -[1,2,3] diff --git a/node_modules/resolve/test/subdirs/node_modules/a/package.json b/node_modules/resolve/test/subdirs/node_modules/a/package.json deleted file mode 100644 index 0967ef4..0000000 --- a/node_modules/resolve/test/subdirs/node_modules/a/package.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/node_modules/resumer/.travis.yml b/node_modules/resumer/.travis.yml deleted file mode 100644 index cc4dba2..0000000 --- a/node_modules/resumer/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/resumer/LICENSE b/node_modules/resumer/LICENSE deleted file mode 100644 index ee27ba4..0000000 --- a/node_modules/resumer/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/resumer/example/resume.js b/node_modules/resumer/example/resume.js deleted file mode 100644 index d04e61a..0000000 --- a/node_modules/resumer/example/resume.js +++ /dev/null @@ -1,8 +0,0 @@ -var resumer = require('../'); -createStream().pipe(process.stdout); - -function createStream () { - var stream = resumer(); - stream.queue('beep boop\n'); - return stream; -} diff --git a/node_modules/resumer/index.js b/node_modules/resumer/index.js deleted file mode 100644 index 14de798..0000000 --- a/node_modules/resumer/index.js +++ /dev/null @@ -1,29 +0,0 @@ -var through = require('through'); -var nextTick = typeof setImmediate !== 'undefined' - ? setImmediate - : process.nextTick -; - -module.exports = function (write, end) { - var tr = through(write, end); - tr.pause(); - var resume = tr.resume; - var pause = tr.pause; - var paused = false; - - tr.pause = function () { - paused = true; - return pause.apply(this, arguments); - }; - - tr.resume = function () { - paused = false; - return resume.apply(this, arguments); - }; - - nextTick(function () { - if (!paused) tr.resume(); - }); - - return tr; -}; diff --git a/node_modules/resumer/package.json b/node_modules/resumer/package.json deleted file mode 100644 index 73c5655..0000000 --- a/node_modules/resumer/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "resumer@~0.0.0", - "/Users/jbaylina/git/MVP/node_modules/tape" - ] - ], - "_from": "resumer@>=0.0.0 <0.1.0", - "_id": "resumer@0.0.0", - "_inCache": true, - "_installable": true, - "_location": "/resumer", - "_npmUser": { - "email": "mail@substack.net", - "name": "substack" - }, - "_npmVersion": "1.2.2", - "_phantomChildren": {}, - "_requested": { - "name": "resumer", - "raw": "resumer@~0.0.0", - "rawSpec": "~0.0.0", - "scope": null, - "spec": ">=0.0.0 <0.1.0", - "type": "range" - }, - "_requiredBy": [ - "/tape" - ], - "_resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "_shasum": "f1e8f461e4064ba39e82af3cdc2a8c893d076759", - "_shrinkwrap": null, - "_spec": "resumer@~0.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/tape", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/resumer/issues" - }, - "dependencies": { - "through": "~2.3.4" - }, - "description": "a through stream that starts paused and resumes on the next tick", - "devDependencies": { - "concat-stream": "~0.1.1", - "tap": "~0.4.0", - "tape": "~1.0.2" - }, - "directories": {}, - "dist": { - "shasum": "f1e8f461e4064ba39e82af3cdc2a8c893d076759", - "tarball": "http://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz" - }, - "homepage": "https://github.com/substack/resumer", - "keywords": [ - "through", - "stream", - "pause", - "resume" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "resumer", - "optionalDependencies": {}, - "readme": "# resumer\n\nReturn a through stream that starts out paused and resumes on the next tick,\nunless somebody called `.pause()`.\n\nThis module has the same signature as\n[through](https://npmjs.com/package/through).\n\n[![browser support](https://ci.testling.com/substack/resumer.png)](http://ci.testling.com/substack/resumer)\n\n[![build status](https://secure.travis-ci.org/substack/resumer.png)](http://travis-ci.org/substack/resumer)\n\n# example\n\n``` js\nvar resumer = require('resumer');\nvar s = createStream();\ns.pipe(process.stdout);\n\nfunction createStream () {\n var stream = resumer();\n stream.queue('beep boop\\n');\n return stream;\n}\n```\n\n```\n$ node example/resume.js\nbeep boop\n```\n\n# methods\n\n``` js\nvar resumer = require('resumer')\n```\n\n## resumer(write, end)\n\nReturn a new through stream from `write` and `end`, which default to\npass-through `.queue()` functions if not specified.\n\nThe stream starts out paused and will be resumed on the next tick unless you\ncall `.pause()` first.\n\n`write` and `end` get passed directly through to\n[through](https://npmjs.com/package/through).\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install resumer\n```\n\n# license\n\nMIT\n", - "readmeFilename": "readme.markdown", - "repository": { - "type": "git", - "url": "git://github.com/substack/resumer.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "testling": { - "browsers": [ - "ie/6..latest", - "chrome/20..latest", - "firefox/10..latest", - "safari/latest", - "opera/11.0..latest", - "iphone/6", - "ipad/6" - ], - "files": "test/*.js" - }, - "version": "0.0.0" -} diff --git a/node_modules/resumer/readme.markdown b/node_modules/resumer/readme.markdown deleted file mode 100644 index 5d9df66..0000000 --- a/node_modules/resumer/readme.markdown +++ /dev/null @@ -1,59 +0,0 @@ -# resumer - -Return a through stream that starts out paused and resumes on the next tick, -unless somebody called `.pause()`. - -This module has the same signature as -[through](https://npmjs.com/package/through). - -[![browser support](https://ci.testling.com/substack/resumer.png)](http://ci.testling.com/substack/resumer) - -[![build status](https://secure.travis-ci.org/substack/resumer.png)](http://travis-ci.org/substack/resumer) - -# example - -``` js -var resumer = require('resumer'); -var s = createStream(); -s.pipe(process.stdout); - -function createStream () { - var stream = resumer(); - stream.queue('beep boop\n'); - return stream; -} -``` - -``` -$ node example/resume.js -beep boop -``` - -# methods - -``` js -var resumer = require('resumer') -``` - -## resumer(write, end) - -Return a new through stream from `write` and `end`, which default to -pass-through `.queue()` functions if not specified. - -The stream starts out paused and will be resumed on the next tick unless you -call `.pause()` first. - -`write` and `end` get passed directly through to -[through](https://npmjs.com/package/through). - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install resumer -``` - -# license - -MIT diff --git a/node_modules/resumer/test/resume.js b/node_modules/resumer/test/resume.js deleted file mode 100644 index 1eaecac..0000000 --- a/node_modules/resumer/test/resume.js +++ /dev/null @@ -1,37 +0,0 @@ -var test = require('tape'); -var resumer = require('../'); -var concat = require('concat-stream'); - -test('implicit resume', function (t) { - t.plan(1); - - var s = createStream(); - s.pipe(concat(function (err, body) { - t.equal(body, 'beep boop\n'); - })); -}); - -test('pause/resume', function (t) { - t.plan(2); - - var s = createStream(); - s.pause(); - - var paused = true; - setTimeout(function () { - paused = false; - s.resume(); - }, 100); - - s.pipe(concat(function (err, body) { - t.equal(paused, false); - t.equal(body, 'beep boop\n'); - })); -}); - -function createStream () { - var stream = resumer(); - stream.queue('beep boop\n'); - stream.queue(null); - return stream; -} diff --git a/node_modules/resumer/test/through.js b/node_modules/resumer/test/through.js deleted file mode 100644 index ddcaf48..0000000 --- a/node_modules/resumer/test/through.js +++ /dev/null @@ -1,36 +0,0 @@ -var test = require('tape'); -var resumer = require('../'); -var concat = require('concat-stream'); - -test('through write/end', function (t) { - t.plan(2); - - var s = createStream(); - - s.on('okok', function () { - t.ok(true); - }); - - s.pipe(concat(function (err, body) { - t.equal(body, 'BEGIN\nRAWR\nEND\n'); - })); - - setTimeout(function () { - s.end('rawr\n'); - }, 50); -}); - -function createStream () { - var stream = resumer(write, end); - stream.queue('BEGIN\n'); - return stream; - - function write (x) { - this.queue(String(x).toUpperCase()); - } - function end () { - this.emit('okok'); - this.queue('END\n'); - this.queue(null); - } -} diff --git a/node_modules/ripemd160/.npmignore b/node_modules/ripemd160/.npmignore deleted file mode 100644 index a091fb1..0000000 --- a/node_modules/ripemd160/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.gitignore -test/ -.DS_Store -.min-wd -Makefile diff --git a/node_modules/ripemd160/CHANGELOG.md b/node_modules/ripemd160/CHANGELOG.md deleted file mode 100644 index 9e1e6df..0000000 --- a/node_modules/ripemd160/CHANGELOG.md +++ /dev/null @@ -1,36 +0,0 @@ -1.0.1 / 2015-05-05 ------------------- -- standard formatting - -1.0.0 / 2015-01-14 ------------------- -- updated dev deps -- added more test fixtures -- updated readme with usage, testing, etc -- moved from https://github.com/cryptocoinjs/ripemd160 to https://github.com/crypto-browserify/ripemd160 - -0.2.1 / 2014-12-31 ------------------- -- made license clear in `package.json` -- deleted `Makefile`, moved targets to `package.json` -- removed `terst` for `assert` - -0.2.0 / 2014-03-09 ------------------- -* removed bower.json and component.json -* changed 4 spacing to 2 -* returns `Buffer` type now, input must be Array, Uint8Array, Buffer, or string -* remove deps: `convert-hex` and `convert-string` - -0.1.0 / 2013-11-20 ------------------- -* changed package name -* removed AMD support - -0.0.2 / 2013-11-06 ------------------- -* fixed component.json file - -0.0.1 / 2013-11-03 ------------------- -* initial release diff --git a/node_modules/ripemd160/README.md b/node_modules/ripemd160/README.md deleted file mode 100644 index c09f50b..0000000 --- a/node_modules/ripemd160/README.md +++ /dev/null @@ -1,100 +0,0 @@ -ripemd160 -========= - -JavaScript component to compute the RIPEMD-160 hash of strings or bytes. This hash is commonly used in crypto currencies -like Bitcoin. - -Usage ------ - -### Install - - npm install --save ripemd160 - - -### ripemd160(input) - -`input` should be either a `string`, `Buffer`, or an `Array`. It returns a `Buffer`. - -**example 1**: - -```js -var ripemd16 = require('ripemd160') - -var data = 'hello' -var result = ripemd160(data) -console.log(result.toString('hex')) -// => 108f07b8382412612c048d07d13f814118445acd -``` - -**example 2**: - -```js -var ripemd16 = require('ripemd160') - -var data = new Buffer('hello', 'utf8') -var result = ripemd160(data) -console.log(result.toString('hex')) -// => 108f07b8382412612c048d07d13f814118445acd -``` - - -#### Converting Buffers - -If you're not familiar with the Node.js ecosystem, type `Buffer` is a common way that a developer can pass around -binary data. `Buffer` also exists in the [Browserify](http://browserify.org/) environment. Converting to and from Buffers is very easy. - -##### To buffer - -```js -// from string -var buf = new Buffer('some string', 'utf8') - -// from hex string -var buf = new Buffer('3f5a4c22', 'hex') - -// from array -var buf = new Buffer([1, 2, 3, 4]) -``` - -#### From buffer - -```js -// to string -var str = buf.toString('utf8') - -// to hex string -var hex = buf.toString('hex') - -// to array -var arr = [].slice.call(buf) -``` - - -Testing -------- - -### Install dev deps: - - npm install --development - -### Test in Node.js: - - npm run test - -### Test in a Browser: - -Testing in the browser uses the excellent [Mochify](https://github.com/mantoni/mochify.js). Mochify can use either PhantomJS -or an actual browser. You must have Selenium installed if you want to use an actual browser. The easiest way is to -`npm install -g start-selenium` and then run `start-selenium`. - -Then run: - - npm run browser-test - - - -License -------- - -Licensed: BSD3-Clause diff --git a/node_modules/ripemd160/lib/ripemd160.js b/node_modules/ripemd160/lib/ripemd160.js deleted file mode 100644 index a96ac5b..0000000 --- a/node_modules/ripemd160/lib/ripemd160.js +++ /dev/null @@ -1,210 +0,0 @@ -/* -CryptoJS v3.1.2 -code.google.com/p/crypto-js -(c) 2009-2013 by Jeff Mott. All rights reserved. -code.google.com/p/crypto-js/wiki/License -*/ -/** @preserve -(c) 2012 by Cédric Mesnil. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// constants table -var zl = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -] - -var zr = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -] - -var sl = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -] - -var sr = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -] - -var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E] -var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000] - -function bytesToWords (bytes) { - var words = [] - for (var i = 0, b = 0; i < bytes.length; i++, b += 8) { - words[b >>> 5] |= bytes[i] << (24 - b % 32) - } - return words -} - -function wordsToBytes (words) { - var bytes = [] - for (var b = 0; b < words.length * 32; b += 8) { - bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF) - } - return bytes -} - -function processBlock (H, M, offset) { - // swap endian - for (var i = 0; i < 16; i++) { - var offset_i = offset + i - var M_offset_i = M[offset_i] - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ) - } - - // Working variables - var al, bl, cl, dl, el - var ar, br, cr, dr, er - - ar = al = H[0] - br = bl = H[1] - cr = cl = H[2] - dr = dl = H[3] - er = el = H[4] - - // computation - var t - for (i = 0; i < 80; i += 1) { - t = (al + M[offset + zl[i]]) | 0 - if (i < 16) { - t += f1(bl, cl, dl) + hl[0] - } else if (i < 32) { - t += f2(bl, cl, dl) + hl[1] - } else if (i < 48) { - t += f3(bl, cl, dl) + hl[2] - } else if (i < 64) { - t += f4(bl, cl, dl) + hl[3] - } else {// if (i<80) { - t += f5(bl, cl, dl) + hl[4] - } - t = t | 0 - t = rotl(t, sl[i]) - t = (t + el) | 0 - al = el - el = dl - dl = rotl(cl, 10) - cl = bl - bl = t - - t = (ar + M[offset + zr[i]]) | 0 - if (i < 16) { - t += f5(br, cr, dr) + hr[0] - } else if (i < 32) { - t += f4(br, cr, dr) + hr[1] - } else if (i < 48) { - t += f3(br, cr, dr) + hr[2] - } else if (i < 64) { - t += f2(br, cr, dr) + hr[3] - } else {// if (i<80) { - t += f1(br, cr, dr) + hr[4] - } - - t = t | 0 - t = rotl(t, sr[i]) - t = (t + er) | 0 - ar = er - er = dr - dr = rotl(cr, 10) - cr = br - br = t - } - - // intermediate hash value - t = (H[1] + cl + dr) | 0 - H[1] = (H[2] + dl + er) | 0 - H[2] = (H[3] + el + ar) | 0 - H[3] = (H[4] + al + br) | 0 - H[4] = (H[0] + bl + cr) | 0 - H[0] = t -} - -function f1 (x, y, z) { - return ((x) ^ (y) ^ (z)) -} - -function f2 (x, y, z) { - return (((x) & (y)) | ((~x) & (z))) -} - -function f3 (x, y, z) { - return (((x) | (~(y))) ^ (z)) -} - -function f4 (x, y, z) { - return (((x) & (z)) | ((y) & (~(z)))) -} - -function f5 (x, y, z) { - return ((x) ^ ((y) | (~(z)))) -} - -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) -} - -function ripemd160 (message) { - var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0] - - if (typeof message === 'string') { - message = new Buffer(message, 'utf8') - } - - var m = bytesToWords(message) - - var nBitsLeft = message.length * 8 - var nBitsTotal = message.length * 8 - - // Add padding - m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32) - m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ) - - for (var i = 0; i < m.length; i += 16) { - processBlock(H, m, i) - } - - // swap endian - for (i = 0; i < 5; i++) { - // shortcut - var H_i = H[i] - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00) - } - - var digestbytes = wordsToBytes(H) - return new Buffer(digestbytes) -} - -module.exports = ripemd160 diff --git a/node_modules/ripemd160/package.json b/node_modules/ripemd160/package.json deleted file mode 100644 index 3f5c6b5..0000000 --- a/node_modules/ripemd160/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_args": [ - [ - "ripemd160@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/create-hash" - ] - ], - "_from": "ripemd160@>=1.0.0 <2.0.0", - "_id": "ripemd160@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/ripemd160", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "jprichardson@gmail.com", - "name": "jprichardson" - }, - "_npmVersion": "2.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "ripemd160", - "raw": "ripemd160@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/create-hash" - ], - "_resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-1.0.1.tgz", - "_shasum": "93a4bbd4942bc574b69a8fa57c71de10ecca7d6e", - "_shrinkwrap": null, - "_spec": "ripemd160@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/create-hash", - "bugs": { - "url": "https://github.com/crypto-browserify/ripemd160/issues" - }, - "dependencies": {}, - "description": "Compute ripemd160 of bytes or strings.", - "devDependencies": { - "mocha": "^2.1.0", - "mochify": "^2.1.1", - "standard": "3.x" - }, - "directories": {}, - "dist": { - "shasum": "93a4bbd4942bc574b69a8fa57c71de10ecca7d6e", - "tarball": "https://registry.npmjs.org/ripemd160/-/ripemd160-1.0.1.tgz" - }, - "gitHead": "42172c6527a55a24a9ee306996b4a8578d4780db", - "homepage": "https://github.com/crypto-browserify/ripemd160", - "keywords": [ - "string", - "strings", - "ripemd160", - "ripe160", - "bitcoin", - "bytes", - "cryptography" - ], - "license": "BSD-3-Clause", - "main": "./lib/ripemd160.js", - "maintainers": [ - { - "email": "vbuterin@gmail.com", - "name": "vbuterin" - }, - { - "email": "boydb@midnightdesign.ws", - "name": "midnightlightning" - }, - { - "email": "npm@shesek.info", - "name": "nadav" - }, - { - "email": "email@dcousens.com", - "name": "dcousens" - }, - { - "email": "dominic.tarr@gmail.com", - "name": "dominictarr" - }, - { - "email": "calvin.metcalf@gmail.com", - "name": "cwmma" - }, - { - "email": "jprichardson@gmail.com", - "name": "jprichardson" - } - ], - "name": "ripemd160", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/ripemd160.git" - }, - "scripts": { - "browser-test": "mochify --wd -R spec", - "test": "mocha test" - }, - "version": "1.0.1" -} diff --git a/node_modules/rlp/.travis.yml b/node_modules/rlp/.travis.yml deleted file mode 100644 index 6e5919d..0000000 --- a/node_modules/rlp/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/node_modules/rlp/LICENSE b/node_modules/rlp/LICENSE deleted file mode 100644 index 22fbe5d..0000000 --- a/node_modules/rlp/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {description} - Copyright (C) {year} {fullname} - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - {signature of Ty Coon}, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. \ No newline at end of file diff --git a/node_modules/rlp/README.md b/node_modules/rlp/README.md deleted file mode 100644 index fd8764c..0000000 --- a/node_modules/rlp/README.md +++ /dev/null @@ -1,41 +0,0 @@ -SYNOPSIS -===== -[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard) -[![Build Status](https://travis-ci.org/wanderer/rlp.png?branch=master)](https://travis-ci.org/wanderer/rlp) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ethereum/ethereumjs-lib?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) or #ethereumjs on freenode - -[Recursive Length](https://github.com/ethereum/wiki/wiki/RLP) Prefix Encoding for node.js. - -INSTALL -====== -`npm install rlp` -install with `-g` if you want to use the cli. - -USAGE -======= - -```javascript -var RLP = require('rlp'); - -var nestedList = [ [], [[]], [ [], [[]] ] ]; -var encoded = RLP.encode(nestedList); -var decoded = RLP.decode(encoded); - assert.deepEqual(nestedList, decoded); -}); - -``` - -API -===== -`rlp.encode(plain)` - RLP encodes an `Array`, `Buffer` or `String` and returns a `Buffer`. - -`rlp.decode(encoded, [skipRemainderCheck=false])` - Decodes a RLP encoded `Buffer`, `Array` or `String` and returns a `Buffer` or an `Array` of `Buffers`. If `skipRemainderCheck` is enabled `rlp` will just decode the first rlp sequence in the buffer. By default it would through an error if there is more bytes in Buffer than used by rlp sequence. - -CLI -=== -`rlp decode ` -`rlp encode ` - -TESTS -===== -test uses mocha. To run -`npm test` diff --git a/node_modules/rlp/bin/rlp b/node_modules/rlp/bin/rlp deleted file mode 100755 index 0c94baa..0000000 --- a/node_modules/rlp/bin/rlp +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env node - -const rlp = require('../index.js') -const command = process.argv[2] -var raw = process.argv[3] - -if (command === 'encode') { - try { - const json = JSON.parse(raw) - console.log(rlp.encode(json).toString('hex')) - } catch (e) { - console.log('invalid json') - } -} else { - if (!raw) { - raw = command - } - try { - console.log(baToJSON(rlp.decode(raw))) - } catch (e) { - console.log('invalid RLP' + e) - } -} - -function baToJSON (ba) { - if (Buffer.isBuffer(ba)) { - return ba.toString('hex') - } else if (ba instanceof Array) { - var array = [] - for (var i = 0; i < ba.length; i++) { - array.push(baToJSON(ba[i])) - } - return array - } -} diff --git a/node_modules/rlp/index.js b/node_modules/rlp/index.js deleted file mode 100644 index 46444a7..0000000 --- a/node_modules/rlp/index.js +++ /dev/null @@ -1,229 +0,0 @@ -const assert = require('assert') -/** - * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP - * This function takes in a data, convert it to buffer if not, and a length for recursion - * - * @param {Buffer,String,Integer,Array} data - will be converted to buffer - * @returns {Buffer} - returns buffer of encoded data - **/ -exports.encode = function (input) { - if (input instanceof Array) { - var output = [] - for (var i = 0; i < input.length; i++) { - output.push(exports.encode(input[i])) - } - var buf = Buffer.concat(output) - return Buffer.concat([encodeLength(buf.length, 192), buf]) - } else { - input = toBuffer(input) - if (input.length === 1 && input[0] < 128) { - return input - } else { - return Buffer.concat([encodeLength(input.length, 128), input]) - } - } -} - -function safeParseInt (v, base) { - if (v.slice(0, 2) === '00') { - throw (new Error('invalid RLP: extra zeros')) - } - - return parseInt(v, base) -} - -function encodeLength (len, offset) { - if (len < 56) { - return new Buffer([len + offset]) - } else { - var hexLength = intToHex(len) - var lLength = hexLength.length / 2 - var firstByte = intToHex(offset + 55 + lLength) - return new Buffer(firstByte + hexLength, 'hex') - } -} - -/** - * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP} - * @param {Buffer,String,Integer,Array} data - will be converted to buffer - * @returns {Array} - returns decode Array of Buffers containg the original message - **/ -exports.decode = function (input, stream) { - if (!input || input.length === 0) { - return new Buffer([]) - } - - input = toBuffer(input) - var decoded = _decode(input) - - if (stream) { - return decoded - } - - assert.equal(decoded.remainder.length, 0, 'invalid remainder') - return decoded.data -} - -exports.getLength = function (input) { - if (!input || input.length === 0) { - return new Buffer([]) - } - - input = toBuffer(input) - var firstByte = input[0] - if (firstByte <= 0x7f) { - return input.length - } else if (firstByte <= 0xb7) { - return firstByte - 0x7f - } else if (firstByte <= 0xbf) { - return firstByte - 0xb6 - } else if (firstByte <= 0xf7) { - // a list between 0-55 bytes long - return firstByte - 0xbf - } else { - // a list over 55 bytes long - var llength = firstByte - 0xf6 - var length = safeParseInt(input.slice(1, llength).toString('hex'), 16) - return llength + length - } -} - -function _decode (input) { - var length, llength, data, innerRemainder, d - var decoded = [] - var firstByte = input[0] - - if (firstByte <= 0x7f) { - // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding. - return { - data: input.slice(0, 1), - remainder: input.slice(1) - } - } else if (firstByte <= 0xb7) { - // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string - // The range of the first byte is [0x80, 0xb7] - length = firstByte - 0x7f - - // set 0x80 null to 0 - if (firstByte === 0x80) { - data = new Buffer([]) - } else { - data = input.slice(1, length) - } - - if (length === 2 && data[0] < 0x80) { - throw new Error('invalid rlp encoding: byte must be less 0x80') - } - - return { - data: data, - remainder: input.slice(length) - } - } else if (firstByte <= 0xbf) { - llength = firstByte - 0xb6 - length = safeParseInt(input.slice(1, llength).toString('hex'), 16) - data = input.slice(llength, length + llength) - if (data.length < length) { - throw (new Error('invalid RLP')) - } - - return { - data: data, - remainder: input.slice(length + llength) - } - } else if (firstByte <= 0xf7) { - // a list between 0-55 bytes long - length = firstByte - 0xbf - innerRemainder = input.slice(1, length) - while (innerRemainder.length) { - d = _decode(innerRemainder) - decoded.push(d.data) - innerRemainder = d.remainder - } - - return { - data: decoded, - remainder: input.slice(length) - } - } else { - // a list over 55 bytes long - llength = firstByte - 0xf6 - length = safeParseInt(input.slice(1, llength).toString('hex'), 16) - var totalLength = llength + length - if (totalLength > input.length) { - throw new Error('invalid rlp: total length is larger than the data') - } - - innerRemainder = input.slice(llength, totalLength) - if (innerRemainder.length === 0) { - throw new Error('invalid rlp, List has a invalid length') - } - - while (innerRemainder.length) { - d = _decode(innerRemainder) - decoded.push(d.data) - innerRemainder = d.remainder - } - return { - data: decoded, - remainder: input.slice(totalLength) - } - } -} - -function isHexPrefixed (str) { - return str.slice(0, 2) === '0x' -} - -// Removes 0x from a given String -function stripHexPrefix (str) { - if (typeof str !== 'string') { - return str - } - return isHexPrefixed(str) ? str.slice(2) : str -} - -function intToHex (i) { - var hex = i.toString(16) - if (hex.length % 2) { - hex = '0' + hex - } - - return hex -} - -function padToEven (a) { - if (a.length % 2) a = '0' + a - return a -} - -function intToBuffer (i) { - var hex = intToHex(i) - return new Buffer(hex, 'hex') -} - -function toBuffer (v) { - if (!Buffer.isBuffer(v)) { - if (typeof v === 'string') { - if (isHexPrefixed(v)) { - v = new Buffer(padToEven(stripHexPrefix(v)), 'hex') - } else { - v = new Buffer(v) - } - } else if (typeof v === 'number') { - if (!v) { - v = new Buffer([]) - } else { - v = intToBuffer(v) - } - } else if (v === null || v === undefined) { - v = new Buffer([]) - } else if (v.toArray) { - // converts a BN to a Buffer - v = new Buffer(v.toArray()) - } else { - throw new Error('invalid type') - } - } - return v -} diff --git a/node_modules/rlp/package.json b/node_modules/rlp/package.json deleted file mode 100644 index 7268c5b..0000000 --- a/node_modules/rlp/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "rlp@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-account" - ] - ], - "_from": "rlp@>=2.0.0 <3.0.0", - "_id": "rlp@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/rlp", - "_nodeVersion": "4.0.0", - "_npmUser": { - "email": "mjbecze@gmail.com", - "name": "null_radix" - }, - "_npmVersion": "3.3.3", - "_phantomChildren": {}, - "_requested": { - "name": "rlp", - "raw": "rlp@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-account", - "/ethereumjs-util", - "/merkle-patricia-tree" - ], - "_resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", - "_shasum": "9db384ff4b89a8f61563d92395d8625b18f3afb0", - "_shrinkwrap": null, - "_spec": "rlp@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-account", - "author": { - "email": "mjbecze@gmail.com", - "name": "martin becze" - }, - "bin": { - "rlp": "./bin/rlp" - }, - "bugs": { - "url": "https://github.com/wanderer/rlp/issues" - }, - "dependencies": {}, - "description": "Recursive Length Prefix Encoding Module", - "devDependencies": { - "ethereumjs-testing": "git+https://github.com/wanderer/ethereumjs-testing.git", - "mocha": "~1.17.1", - "standard": "^5.3.1" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "9db384ff4b89a8f61563d92395d8625b18f3afb0", - "tarball": "http://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz" - }, - "gitHead": "0ce09db81fc303fcee593f7cc094ba44015f9b92", - "homepage": "https://github.com/wanderer/rlp#readme", - "keywords": [ - "rlp", - "ethereum" - ], - "license": "MPL-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "null_radix@riseup.net", - "name": "null_radix" - } - ], - "name": "rlp", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/wanderer/rlp.git" - }, - "scripts": { - "test": "standard ./index.js ./bin/rlp && ./node_modules/mocha/bin/mocha --reporter spec ./test/", - "webtest": "browserify test/max.js | testling -u" - }, - "testling": { - "browsers": [ - "chrome/22..latest", - "firefox/16..latest", - "safari/latest", - "opera/11.0..latest", - "iphone/6", - "ipad/6", - "android-browser/latest" - ], - "files": "test/*.js", - "harness": "mocha-bdd" - }, - "version": "2.0.0" -} diff --git a/node_modules/rlp/test/index.js b/node_modules/rlp/test/index.js deleted file mode 100644 index d451f44..0000000 --- a/node_modules/rlp/test/index.js +++ /dev/null @@ -1,277 +0,0 @@ -const assert = require('assert') -const RLP = require('../index.js') -const officalTests = require('ethereumjs-testing').tests.rlptest - -describe('invalid rlps', function () { - it('should not crash on an invalid rlp', function () { - var a = new Buffer([239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 191, 189, 29, 239, 191, 189, 77, 239, 191, 189, 239, 191, 189, 239, 191, 189, 93, 122, 239, 191, 189, 239, 191, 189, 239, 191, 189, 103, 239, 191, 189, 239, 191, 189, 239, 191, 189, 26, 239, 191, 189, 18, 69, 27, 239, 191, 189, 239, 191, 189, 116, 19, 239, 191, 189, 239, 191, 189, 66, 239, 191, 189, 64, 212, 147, 71, 239, 191, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 191, 189, 11, 222, 155, 122, 54, 42, 194, 169, 239, 191, 189, 70, 239, 191, 189, 72, 239, 191, 189, 239, 191, 189, 54, 53, 239, 191, 189, 100, 73, 239, 191, 189, 55, 239, 191, 189, 239, 191, 189, 59, 1, 239, 191, 189, 109, 239, 191, 189, 239, 191, 189, 93, 239, 191, 189, 208, 128, 239, 191, 189, 239, 191, 189, 0, 239, 191, 189, 239, 191, 189, 239, 191, 189, 15, 66, 64, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 4, 239, 191, 189, 79, 103, 239, 191, 189, 85, 239, 191, 189, 239, 191, 189, 239, 191, 189, 74, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 54, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 83, 239, 191, 189, 14, 239, 191, 189, 239, 191, 189, 239, 191, 189, 4, 63, 239, 191, 189, 63, 239, 191, 189, 41, 239, 191, 189, 239, 191, 189, 239, 191, 189, 67, 28, 239, 191, 189, 239, 191, 189, 11, 239, 191, 189, 31, 239, 191, 189, 239, 191, 189, 104, 96, 100, 239, 191, 189, 239, 191, 189, 12, 239, 191, 189, 239, 191, 189, 206, 152, 239, 191, 189, 239, 191, 189, 31, 112, 111, 239, 191, 189, 239, 191, 189, 65, 239, 191, 189, 41, 239, 191, 189, 239, 191, 189, 53, 84, 11, 239, 191, 189, 239, 191, 189, 12, 102, 24, 12, 42, 105, 109, 239, 191, 189, 58, 239, 191, 189, 4, 239, 191, 189, 104, 82, 9, 239, 191, 189, 6, 66, 91, 43, 38, 102, 117, 239, 191, 189, 105, 239, 191, 189, 239, 191, 189, 239, 191, 189, 89, 127, 239, 191, 189, 114]) - try { - rlp.decode(a) - } catch (e) { - assert(true) - } - }) -}) - -describe('RLP encoding (string):', function () { - it('should return itself if single byte and less than 0x7f:', function () { - var encodedSelf = RLP.encode('a') - assert.equal(encodedSelf.toString(), 'a') - }) - - it('length of string 0-55 should return (0x80+len(data)) plus data', function () { - var encodedDog = RLP.encode('dog') - assert.equal(4, encodedDog.length) - assert.equal(encodedDog[0], 131) - assert.equal(encodedDog[1], 100) - assert.equal(encodedDog[2], 111) - assert.equal(encodedDog[3], 103) - }) - - it('length of string >55 should return 0xb7+len(len(data)) plus len(data) plus data', function () { - var encodedLongString = RLP.encode('zoo255zoo255zzzzzzzzzzzzssssssssssssssssssssssssssssssssssssssssssssss') - assert.equal(72, encodedLongString.length) - assert.equal(encodedLongString[0], 184) - assert.equal(encodedLongString[1], 70) - assert.equal(encodedLongString[2], 122) - assert.equal(encodedLongString[3], 111) - assert.equal(encodedLongString[12], 53) - }) -}) - -describe('RLP encoding (list):', function () { - it('length of list 0-55 should return (0xc0+len(data)) plus data', function () { - var encodedArrayOfStrings = RLP.encode(['dog', 'god', 'cat']) - assert.equal(13, encodedArrayOfStrings.length) - assert.equal(encodedArrayOfStrings[0], 204) - assert.equal(encodedArrayOfStrings[1], 131) - assert.equal(encodedArrayOfStrings[11], 97) - assert.equal(encodedArrayOfStrings[12], 116) - }) - -// it('length of list >55 should return 0xf7+len(len(data)) plus len(data) plus data', function () { -// // need a test case here! -// }) -}) - -describe('RLP encoding (integer):', function () { - it('length of int = 1, less than 0x7f, similar to string', function () { - var encodedNumber = RLP.encode(15) - assert.equal(1, encodedNumber.length) - assert.equal(encodedNumber[0], 15) - }) - - it('length of int > 55, similar to string', function () { - var encodedNumber = RLP.encode(1024) - assert.equal(3, encodedNumber.length) - assert.equal(encodedNumber[0], 130) - assert.equal(encodedNumber[1], 4) - assert.equal(encodedNumber[2], 0) - }) - - it('it should handle zero', function () { - assert.equal(RLP.encode(0).toString('hex'), '80') - }) -}) - -describe('RLP decoding (string):', function () { - it('first byte < 0x7f, return byte itself', function () { - var decodedStr = RLP.decode(new Buffer([97])) - assert.equal(1, decodedStr.length) - assert.equal(decodedStr.toString(), 'a') - }) - - it('first byte < 0xb7, data is everything except first byte', function () { - var decodedStr = RLP.decode(new Buffer([131, 100, 111, 103])) - assert.equal(3, decodedStr.length) - assert.equal(decodedStr.toString(), 'dog') - }) - - it('array', function () { - var decodedBufferArray = RLP.decode(new Buffer([204, 131, 100, 111, 103, 131, 103, 111, 100, 131, 99, 97, 116])) - assert.deepEqual(decodedBufferArray, [new Buffer('dog'), new Buffer('god'), new Buffer('cat')]) - }) -}) - -describe('RLP decoding (int):', function () { - it('first byte < 0x7f, return itself', function () { - var decodedSmallNum = RLP.decode(new Buffer([15])) - assert.equal(1, decodedSmallNum.length) - assert.equal(decodedSmallNum[0], 15) - }) - - it('first byte < 0xb7, data is everything except first byte', function () { - var decodedNum = RLP.decode(new Buffer([130, 4, 0])) - assert.equal(2, decodedNum.length) - assert.equal(decodedNum.toString('hex'), '0400') - }) -}) - -describe('strings over 55 bytes long', function () { - var testString = 'This function takes in a data, convert it to buffer if not, and a length for recursion' - testString = new Buffer(testString) - var encoded = null - it('should encode it', function () { - encoded = RLP.encode(testString) - assert.equal(encoded[0], 184) - assert.equal(encoded[1], 86) - }) - - it('should decode', function () { - var decoded = RLP.decode(encoded) - assert.equal(decoded.toString(), testString) - }) - -}) - -describe('list over 55 bytes long', function () { - var testString = ['This', 'function', 'takes', 'in', 'a', 'data', 'convert', 'it', 'to', 'buffer', 'if', 'not', 'and', 'a', 'length', 'for', 'recursion', 'a1', 'a2', 'a3', 'ia4', 'a5', 'a6', 'a7', 'a8', 'ba9'] - var encoded = null - - it('should encode it', function () { - encoded = RLP.encode(testString) - }) - - it('should decode', function () { - var decoded = RLP.decode(encoded) - for (var i = 0; i < decoded.length; i++) { - decoded[i] = decoded[i].toString() - } - assert.deepEqual(decoded, testString) - }) - -}) - -describe('nested lists:', function () { - var nestedList = [ - [], - [ - [] - ], - [ - [], - [ - [] - ] - ] - ] - var encoded - it('encode a nested list', function () { - encoded = RLP.encode(nestedList) - assert.deepEqual(encoded, new Buffer([0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0])) - }) - - it('should decode a nested list', function () { - var decoded = RLP.decode(encoded) - assert.deepEqual(nestedList, decoded) - }) -}) - -describe('null values', function () { - var nestedList = [null] - var encoded - it('encode a null array', function () { - encoded = RLP.encode(nestedList) - assert.deepEqual(encoded, new Buffer([0xc1, 0x80])) - }) - - it('should decode a null value', function () { - assert.deepEqual(new Buffer([]), RLP.decode(new Buffer('80', 'hex'))) - }) -}) - -describe('zero values', function () { - var nestedList = [null] - var encoded - it('encode a zero', function () { - encoded = RLP.encode(new Buffer([0])) - assert.deepEqual(encoded, new Buffer([0])) - }) - - it('decode a zero', function () { - var decode = RLP.decode(new Buffer([0])) - assert.deepEqual(decode, new Buffer([0])) - }) -}) - -describe('bad values', function () { - it('wrong encoded a zero', function () { - var val = new Buffer('f9005f030182520894b94f5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca098ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4aa08887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3', 'hex') - var result - try { - result = RLP.decode(val) - } catch (e) {} - assert.equal(result, undefined) - }) - - it('invalid length', function () { - var a = new Buffer('f86081000182520894b94f5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca098ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4aa08887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3', 'hex') - - var result - try { - result = RLP.decode(a) - } catch (e) {} - assert.equal(result, undefined) - }) - - it('extra data at end', function () { - var c = 'f90260f901f9a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0ef' - - var a = new Buffer(c, 'hex') - - var result - try { - result = RLP.decode(a) - } catch (e) {} - assert.equal(result, undefined) - }) - - it('extra data at end', function () { - var c = 'f9ffffffc260f901f9a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0' - - var a = new Buffer(c, 'hex') - - var result - try { - result = RLP.decode(a) - } catch (e) {} - assert.equal(result, undefined) - }) - - it('list length longer than data', function () { - var c = 'f9ffffffc260f901f9a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0' - - var a = new Buffer(c, 'hex') - - var result - try { - result = RLP.decode(a) - } catch (e) {} - assert.equal(result, undefined) - }) -}) - -describe('hex prefix', function () { - it('should have the same value', function () { - var a = RLP.encode('0x88f') - var b = RLP.encode('88f') - assert.notEqual(a.toString('hex'), b.toString('hex')) - }) -}) - -describe('offical tests', function () { - it('pass all tests', function (done) { - for (var test in officalTests) { - var incoming = officalTests[test].in - // if we are testing a big number - if (incoming[0] === '#') { - var bn = new Bignum(incoming.slice(1)) - incoming = new Buffer(bn.toArray()) - } - - var encoded = RLP.encode(incoming) - assert.equal(encoded.toString('hex'), officalTests[test].out.toLowerCase()) - } - done() - }) -}) diff --git a/node_modules/scrypt.js/.npmignore b/node_modules/scrypt.js/.npmignore deleted file mode 100644 index 123ae94..0000000 --- a/node_modules/scrypt.js/.npmignore +++ /dev/null @@ -1,27 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules diff --git a/node_modules/scrypt.js/LICENSE b/node_modules/scrypt.js/LICENSE deleted file mode 100644 index 21315b2..0000000 --- a/node_modules/scrypt.js/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Alex Beregszaszi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/scrypt.js/README.md b/node_modules/scrypt.js/README.md deleted file mode 100644 index 9831e9e..0000000 --- a/node_modules/scrypt.js/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# scrypt.js - -This purpose of this library is to provide a single interface to both a C and a pure Javascript based scrypt implementation. -Supports browserify and will select the best option when running under Node or in the browser. - -It is using the following two underlying implementations: -- [scryptsy](https://github.com/cryptocoinjs/scryptsy) for the pure Javascript implementation -- [scrypt](https://www.npmjs.com/package/scrypt) for the C version - -It only supports hashing. Doesn't offer an async option and doesn't implement the HMAC format. If you are looking for those, -please use the Node `scrypt` library. - -## API - -There is only one method returned for hashing using scrypt. All parameters are mandatory except the progress callback: -- `key` - The key/passphrase. Although it accepts a String, please use a Buffer to avoid problems later. -- `salt` - The salt. Same as with the `key`, please try to use a Buffer. -- `n` - Iteration count. -- `r` - Block size for the underlying hash. -- `p` - Parallelization factor. -- `dklen` - The derived key length aka. output size. - -## Example usage - -```js -// Load default implementation -var scrypt = require('scrypt.js') - -// Load specific version -var scrypt = require('scrypt.js/js') // pure Javascript -var scrypt = require('scrypt.js/node') // C on Node - -scrypt(key, salt, n, r, p, dklen, progressCb) // returns Buffer -``` - -### The progress callback - -This callback (`progressCb` in the above example) is not available on Node. - -Every 1000 iterations it will return an object with the following properties: -- `current` - Current iteration number. -- `total` - Total iterations. -- `percent` - Progress in percentage (double). - -## Other scrypt implementations - -- https://www.npmjs.com/package/scrypt: Uses the C implementation (version 1.2.0), both async and async. -- https://www.npmjs.com/package/scrypt-hash: Uses the C implementation and offers only an async option. -- https://www.npmjs.com/package/scryptsy: A pure Javacript implementation. Offers a progress callback. -- https://www.npmjs.com/package/scrypt256-hash: Another C implementation. Doesn't seem to be maintained. -- https://www.npmjs.com/package/scrypt-jane-hash: Uses an alternative C implementation (called scrypt-jane). Doesn't seem to be maintained. -- https://www.npmjs.com/package/js-scrypt-em: Emscripten-compiled scrypt 1.1.6. Doesn't seem to be maintained. -- https://www.npmjs.com/package/js-scrypt: Wraps `js-scrypt-em` and offers sync and async options. Doesn't seem to be maintained. diff --git a/node_modules/scrypt.js/js.js b/node_modules/scrypt.js/js.js deleted file mode 100644 index 904f1da..0000000 --- a/node_modules/scrypt.js/js.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('scryptsy') diff --git a/node_modules/scrypt.js/node.js b/node_modules/scrypt.js/node.js deleted file mode 100644 index 7fc61b9..0000000 --- a/node_modules/scrypt.js/node.js +++ /dev/null @@ -1,7 +0,0 @@ -var scrypt = require('scrypt') - -function hash(key, salt, n, r, p, dklen, progressCb) { - return scrypt.hashSync(key, { N: n, r: r, p: p }, dklen, salt) -} - -module.exports = hash diff --git a/node_modules/scrypt.js/package.json b/node_modules/scrypt.js/package.json deleted file mode 100644 index 133bfff..0000000 --- a/node_modules/scrypt.js/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_args": [ - [ - "scrypt.js@^0.2.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet" - ] - ], - "_from": "scrypt.js@>=0.2.0 <0.3.0", - "_id": "scrypt.js@0.2.0", - "_inCache": true, - "_installable": true, - "_location": "/scrypt.js", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/scrypt.js-0.2.0.tgz_1461607227159_0.24605823424644768" - }, - "_npmUser": { - "email": "alex@rtfs.hu", - "name": "axic" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "scrypt.js", - "raw": "scrypt.js@^0.2.0", - "rawSpec": "^0.2.0", - "scope": null, - "spec": ">=0.2.0 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-wallet" - ], - "_resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "_shasum": "af8d1465b71e9990110bedfc593b9479e03a8ada", - "_shrinkwrap": null, - "_spec": "scrypt.js@^0.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet", - "author": { - "email": "alex@rtfs.hu", - "name": "Alex Beregszaszi" - }, - "browser": "js.js", - "bugs": { - "url": "https://github.com/axic/scryptjs/issues" - }, - "dependencies": { - "scrypt": "^6.0.2", - "scryptsy": "^1.2.1" - }, - "description": "Scrypt in Node.js and in the browser. Fast & simple.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "af8d1465b71e9990110bedfc593b9479e03a8ada", - "tarball": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz" - }, - "gitHead": "2368199c33f8a4226d41a73b2f40dafe3b497dd2", - "homepage": "https://github.com/axic/scryptjs#readme", - "keywords": [ - "crypto", - "scrypt", - "hash", - "kdf" - ], - "license": "MIT", - "main": "node.js", - "maintainers": [ - { - "email": "alex@rtfs.hu", - "name": "axic" - } - ], - "name": "scrypt.js", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/axic/scryptjs.git" - }, - "scripts": { - "test": "exit 0" - }, - "version": "0.2.0" -} diff --git a/node_modules/scrypt/.npmignore b/node_modules/scrypt/.npmignore deleted file mode 100644 index fa69cec..0000000 --- a/node_modules/scrypt/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -node_modules/* -build/* -*.DS_Store -*.swp -npm-debug.log -scrypt/scrypt-1.1.6/config.h -scrypt/configuration/config_output diff --git a/node_modules/scrypt/.travis.yml b/node_modules/scrypt/.travis.yml deleted file mode 100644 index 09b4cf6..0000000 --- a/node_modules/scrypt/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -sudo: false -language: node_js -node_js: - - "4" -compiler: - - gcc - - clang -install: -env: - - CXX=g++-4.8 -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - gcc-4.8 - - g++-4.8 - - clang diff --git a/node_modules/scrypt/README.md b/node_modules/scrypt/README.md deleted file mode 100644 index 09390a9..0000000 --- a/node_modules/scrypt/README.md +++ /dev/null @@ -1,411 +0,0 @@ -# Scrypt For Node - -[![Build Status](https://travis-ci.org/barrysteyn/node-scrypt.png?branch=master)](https://travis-ci.org/barrysteyn/node-scrypt) -[![npm version](https://badge.fury.io/js/scrypt.svg)](http://badge.fury.io/js/scrypt) - -Scrypt for Node/IO is a native node/io C++ wrapper for Colin Percival's -[scrypt](https://www.tarsnap.com/scrypt.html) cryptographic hash utility. - -As should be the case with any security tool, this library should be scrutinized -by anyone using it. If you find or suspect an issue with the code- please bring -it to my attention and I'll spend some time trying to make sure that this tool is -as secure as possible. - -## Node-Scrypt Version 6 -Version 6 is a major new release. It is by and large compatible with version 5. - - * Scrypt version 1.2.0 is being used (a very recently released version of Scrypt) - * Using Node's internal cryptographic libraries - for windows users, there is no need to use an external OpenSSL library anymore. - * Using Node's OS module to check for freemem, meaning no need to use any system calls and therefore no external dependencies - -Version 6 should work much better on all platforms - -## Past Releases -### Node-Scrypt Version 5 -Version 5 is a major new release that is **not backward compatible** with any -previous version. Some highlights: - - * C++ addon code rewritten: - * Using [Nan 2.x](https://github.com/nodejs/nan) - * Code has been greatly simplified - * ES6 Promise aware. - * API has changed: - * Every output is a buffer. - * Separated functions into async and sync versions. - * Api name swap: What was kdf in previous versions is now hash (and vice versa). - * Async functions will return a Promise if no callback function is present and Promises are available (else it will throw a SyntaxError). - * Using correct [JavaScript Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object for all errors. - -### Migrating To Version 5 -Version 5 is not backward compatible, but it should still be easy to migrate. -Please read the [api section](#api) to see what's changed. One big change that is -worth noting is a name change: What used to be called **hash** has now been -changed to **kdf** and conversely, what was **kdf** is now called **hash**. - -## Table Of Contents - - * [Scrypt](#scrypt) - * [Installation Instructions](#installation-instructions) - * [API](#api) - The module consists of four functions: - * [params](#params) - a translation function that produces scrypt parameters - * [kdf](#kdf) - a key derivation function designed for password hashing - * [verifyKdf](#verifykdf) - checks if a key matches a kdf - * [hash](#hash) - the raw underlying scrypt hash function - * [Example Usage](#example-usage) - * [FAQ](#faq) - * [Roadmap and Changelog](#roadmap) - * [Credits](#credits) - -# Scrypt -Scrypt is an advanced crypto library used mainly for [key derivation](http://en.wikipedia.org/wiki/Key_derivation_function): -More information can be found here: - -* [Tarsnap blurb about scrypt](http://www.tarsnap.com/scrypt.html) - Colin Percival -(the author of scrypt) explains a bit about it. -* [Academic paper explaining scrypt](http://www.tarsnap.com/scrypt/scrypt.pdf). -* [Wikipedia Article on scrypt](http://en.wikipedia.org/wiki/Scrypt). - -# Installation Instructions - -## Pre-Requisistes -### Windows - - * [Node-Gyp](https://github.com/TooTallNate/node-gyp) for Windows: - * Installation instructions: [node-gyp for windows](https://github.com/TooTallNate/node-gyp#installation) - * Look [here](https://github.com/TooTallNate/node-gyp/wiki/Visual-Studio-2010-Setup) for additional information/helpful hints. - -### Linux/MacOS -[Node-gyp](https://github.com/TooTallNate/node-gyp) is needed to build this module. It should be installed globally, that is, with the `-g` switch: - - npm install -g node-gyp - -## Install From NPM - - npm install scrypt - -## Install From Source - - git clone https://github.com/barrysteyn/node-scrypt.git - cd node-scrypt - npm install - node-gyp configure build - -## Testing -To test, go to the folder where scrypt was installed, and type: - - npm test - -# API - -## params -Translates human understandable parameters to scrypt's internal parameters. - -> - scrypt.paramsSync
    - scrypt.params(maxtime, [maxmem, [max_memfrac]], [function(err, obj) {}]) - - * maxtime - [REQUIRED] - a decimal (double) representing the maximum amount of time in seconds scrypt will spend when computing the derived key. - * maxmem - [OPTIONAL] - an integer, specifying the maximum number of bytes of RAM used when computing the derived encryption key. If not present, will default to 0. - * maxmemfrac - [OPTIONAL only if maxmem is present] - a double value between 0.0 and 1.0, representing the fraction (normalized percentage value) of the available RAM used when computing the derived key. If not present, will default to 0.5. - * callback_function - [OPTIONAL] - not applicable to synchronous function. If present in async function, then it will be treated as a normal async callback. If not present, a Promise will be returned if ES6 promises are available. If not present and ES6 promises are not present, a SyntaxError will be thrown. - -## kdf -**Note**: In previous versions, this was called *hash*. - -Produces a key derivation function that uses the scrypt hash function. This -should be used for hashing and checking passwords as it incorporates salt as well -as [HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code) into -its format. It is based on a design by Colin Percival, the author of scrypt. The format -can be seen [here](http://security.stackexchange.com/questions/88678/why-does-node-js-scrypt-function-use-hmac-this-way/91050#91050). - -> - scrypt.kdfSync
    - scrypt.kdf(key, paramsObject, [function(err, obj){}]) - - * key - [REQUIRED] - a string (or buffer) representing the key (password) that is to be hashed. - * paramsObject - [REQUIRED] - parameters to control scrypt hashing (see params above). - * callback_function - [OPTIONAL] - not applicable to synchronous function. If present in async function, then it will be treated as a normal async callback. If not present, a Promise will be returned if ES6 promises are available. If not present and ES6 promises are not present, a SyntaxError will be thrown. - -## verifyKdf - -Checks if a key (password) matches a kdf. - -> - scrypt.verifyKdfSync
    - scrypt.verifyKdf(kdf, key, [function(err, result){}]) - - * kdf [REQUIRED] - see kdf above. - * key - [REQUIRED] - a string (or buffer) representing the key (password) that is to be checked. - * callback_function - [OPTIONAL] - not applicable to synchronous function. If present in async function, then it will be treated as a normal async callback. If not present, a Promise will be returned if ES6 promises are available. If not present and ES6 promises are not present, a SyntaxError will be thrown. - -## hash -**Note**: In previous versions, this was called *kdf*. - -This is the raw scrypt hash function. - -> - scrypt.hashSync
    - scrypt.hash(key, paramsObject, output_length, salt, function(err, obj){}) - - * key - [REQUIRED] - a string (or buffer) representing the key (password) that is to be checked. - * paramsObject - [REQUIRED] - parameters to control scrypt hashing (see params above). - * output_length - [REQUIRED] - the length of the resulting hashed output. - * salt - [REQUIRED] - a string (or buffer) used for salt. The string (or buffer) can be empty. - * callback_function - [OPTIONAL] - not applicable to synchronous function. If present in async function, then it will be treated as a normal async callback. If not present, a Promise will be returned if ES6 promises are available. If not present and ES6 promises are not present, a SyntaxError will be thrown. - -# Example Usage - -## params - -```JavaScript -var scrypt = require("scrypt"); - -//Synchronous -try { - //Uses 0.1 for maxtime, and default values maxmem and maxmemfrac - var scryptParameters = scrypt.paramsSync(0.1); - console.log(scryptParameters); -} catch(err) { - //handle error -} - -//Asynchronous with callback -scrypt.params(0.1, function(err, scryptParameters) { - console.log(scryptParameters); -}); - -//Asynchronous with promise -scrypt.params(0.1).then(function(result){ - console.log(result); -}, function(err) { - console.log(err); -}); -``` - -## kdf - -```JavaScript -var scrypt = require("scrypt"); -var scryptParameters = scrypt.paramsSync(0.1); -var key = new Buffer("this is a key"); //could also be a string - -//Synchronous example that will output in hexidecimal encoding -var kdfResult = scrypt.kdfSync(key, scryptParameters); //should be wrapped in try catch, but leaving it out for brevity -console.log("Synchronous result: "+kdfResult.toString("hex")); - -//Asynchronous example that expects key to be ascii encoded -scrypt.kdf("ascii encoded key", {N: 1, r:1, p:1}, function(err, result){ - //Note how scrypt parameters was passed as a JSON object - console.log("Asynchronous result: "+result.toString("base64")); -}); - -//Asynchronous with promise -scrypt.kdf("ascii encoded key", {N: 1, r:1, p:1}).then(function(result){ - console.log("Asynchronous result: "+result.toString("base64")); -}, function(err){ -}); -``` - -## verifyKdf - -```JavaScript -var scrypt = require("scrypt"); -var scryptParameters = scrypt.paramsSync(0.1); -var kdfResult = scrypt.kdfSync("password", scryptParameters); - -//Synchronous -scrypt.verifyKdfSync(kdfResult, "password"); // returns true -scrypt.verifyKdfSync(kdfResult, "incorrect password"); // returns false - -//Asynchronous -scrypt.verifyKdf(kdfResult, new Buffer("password"), function(err, result) { - //result will be true -}); - -//Asynchronous with promise -scrypt.verifyKdf(kdfResult, "incorrect password").then(function(result) { - //result will be false -}, function(err) { -}); -``` - -## hash -The [scrypt paper](http://www.tarsnap.com/scrypt/scrypt.pdf) lists four [test vectors](http://tools.ietf.org/html/draft-josefsson-scrypt-kdf-00#page-11) to test implementation. This example will show how to produce these test vectors from within this module. - -### Test Vector 1 - -```JavaScript -var scrypt = require("scrypt"); -var key = new Buffer(""); - -//Synchronous -var result = scrypt.hashSync(key,{"N":16,"r":1,"p":1},64,""); -console.log(result.toString("hex")); - -//Asynchronous -scrypt.hash(key, {"N":16,"r":1,"p":1},64,"", function(err, res) { - console.log(result.toString("hex")); -}); - -//Asynchronous with promise -scrypt.hash(key, {"N":16,"r":1,"p":1},64,"").then(function(result) { - console.log(result.toString("hex")); -}, function(err){}); -``` - -### Test Vector 2 - -```JavaScript -var scrypt = require("scrypt"); -var salt = new Buffer("NaCl"); - -//Synchronous -var result = scrypt.hashSync("password", {"N":1024,"r":8,"p":16}, 64, salt); -console.log(result.toString("hex")); - -scrypt.hash("password", {"N":1024,"r":8,"p":16},64,salt, function(err, result) { - console.log(result.toString("hex")); -}); -``` - -### Test Vector 3 - -```JavaScript -var scrypt = require("scrypt"); -var key = new Buffer("pleaseletmein"); -var salt = new Buffer("SodiumChloride"); - -//Synchronous -var result = scrypt.hashSync(key,{"N":16384,"r":8,"p":1},64,salt); -console.log(result.toString("hex")); - -//Asynchronous -scrypt.hash(key, {"N":16384,"r":8,"p":1}, 64, salt, function(err, result) { - console.log(result.toString("hex")); -}); -``` - -### Test Vector 4 -Note: This test vector is very taxing in terms of resources. - -```JavaScript -var scrypt = require("scrypt"); - -//Synchronous -var result = scrypt.hashSync("pleaseletmein",{"N":1048576,"r":8,"p":1},64,"SodiumChloride"); -console.log(result.toString("hex")); - -//Asynchronous -scrypt.hash("pleaseletmein", {"N":1048576,"r":8,"p":1},64,"SodiumChloride", function(err, result) { - console.log(result.toString("hex")); -}); -``` - -# FAQ -## General -### What Platforms Are Supported? -This module supports most posix platforms, as well as Microsoft Windows. It has been tested on the -following platforms: **Linux**, **MAC OS**, **SmartOS** (so its ready for Joyent Cloud) -and **Microsoft Windows**. It also works on FreeBSD, OpenBSD, SunOS etc. - -## Scrypt -### Why Use Scrypt? - -It is probably the most advanced key derivation function available. This is is quote taken -from a comment in hacker news: - ->Passwords hashed with scrypt with sufficiently-high strength values (there are 3 tweakable -input numbers) are fundamentally impervious to being cracked. I use the word "fundamental" -in the literal sense, here; even if you had the resources of a large country, you would not -be able to design any hardware (whether it be GPU hardware, custom-designed hardware, or -otherwise) which could crack these hashes. Ever. (For sufficiently-small definitions of -"ever". At the very least "within your lifetime"; probably far longer.) - -### What Are The Pros And Cons For Using Scrypt? -#### Pros - -* The scrypt algorithm has been published by [IETF](http://en.wikipedia.org/wiki/IETF) -as an [Internet Draft](http://en.wikipedia.org/wiki/Internet_Draft) and is thus on track to becoming a standard. See [here](https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-00) for the draft. -* It is being actively used in production at [Tarsnap](http://www.tarsnap.com/). -* It is much more secure than bcrypt. -* It is designed to be future proof against attacks with future (and more advanced) hardware. -* It is designed to defend against large scale custom hardware attacks. -* It is production ready. -* There is a scrypt library for most major scripting languages -(Python, Ruby etc). Now this module provides the library for NodeJS :) - -I will end this section with a quote from Colin Percival (author of scrypt): - -> We estimate that on modern (2009) hardware, if 5 seconds are spent computing a derived key, -the cost of a hardware brute-force attack against scrypt is roughly 4000 times greater than the -cost of a similar attack against bcrypt (to find the same password), and 20000 times greater -than a similar attack against PBKDF2. - -#### Cons -There is just one con I can think of: It is a relatively new library (only been around since 2009). -Cryptographers don't really like new libraries for production deployment as it has not been *battle -tested*. That being said, it is being actively used in [Tarsnap](http://www.tarsnap.com/) -(as mentioned above) and the author is very active. - -## Using Scrypt With Passwords -### What Are The Essential Properties For Storing Passwords? -Storing passwords requires three essential properties - -* The password must not be stored in plaintext. -* The password hash must be salted. (Making a rainbow table attack very -difficult to pull off). -* The salted hash function must not be fast. (If someone does get hold -of the salted hashes, their only option will be brute force which will -be very slow). - -As an example of how storing passwords can be done badly, take [LinkedIn](http://www.linkedin.com). -In 2012, they [came under fire](http://thenextweb.com/socialmedia/2012/06/06/bad-day-for-linkedin-6-5-million-hashed-passwords-reportedly-leaked-change-yours-now/#!rS1HT) -for using unsalted hashes to store their passwords. As most commentators at -the time were focusing no salt being present, the big picture was missed. -In fact, their biggest problem was that they used [sha1](http://en.wikipedia.org/wiki/SHA-1), -a very fast hash function. - -### If random salts are used, why do all resulting KDF's start with *c2NyeXB0*? -The kdf has a [specific format](http://security.stackexchange.com/questions/88678/why-does-node-js-scrypt-function-use-hmac-this-way/91050#91050): -The word *"scrypt"* is added as a prefix. The reason for this is because -I am sticking to Colin Percival's (the creator of scrypt) reference implementation, -whereby he prefixes *scrypt* in this way. The base64 encoding of the ascii *"scrypt"* -is *c2NyeXB0*. The scrypt parameters are then appended. Users of scrypt normally do -not change this information once it is settled upon (hence this will also look the -be identical). - - -To illustrate with an example, I have hashed two password: *password1* and *password2*. -Their Base64 outputs are as follows: - - password1 - c2NyeXB0AAwAAAAIAAAAAcQ0zwp7QNLklxCn14vB75AYWDIrrT9I/7F9+lVGBfKN/1TH2hs - /HboSy1ptzN0YzHJhC7PZIEPQzf2nuoaqVZg8VkKEJlo8/QaH7qjU2VwB - - password2 - c2NyeXB0AAwAAAAIAAAAAZ/+bp8gWcTZgEC7YQZeLLyxFeKRRdDkwbaGeFC0NkdUr/YFAWY - /UwdOH4i/PxW48fXeXBDOTvGWtS3lLUgzNM0PlJbXhMOGd2bke0PvTSnW - -As one can see from the above example, both hashes start off by looking similar (they both start -with *c2NyeXB0AAwAAAAIAAAAA* - as explained above), but after this, things change very rapidly. -In fact, I hashed the password *password1* again: - - password1 - c2NyeXB0AAwAAAAIAAAAATpP+fdQAryDiRmCmcoOrZa2mZ049KdbA/ofTTrATQQ+m - 0L/gR811d0WQyip6p2skXVEMz2+8U+xGryFu2p0yzfCxYLUrAaIzaZELkN2M6k0 - -Compare this hash to the one above. Even though they start off looking similar, their outputs -are vastly different (even though it is the same password being hashed). This is because of -the **random** salt that has been added, ensuring that no two hashes will ever be identical, -even if the password that is being hashed is the same. - -For those that are curious or paranoid, please look at how the kdf is both [produced](https://github.com/barrysteyn/node-scrypt/blob/master/src/scryptwrapper/keyderivation.c#L36-L80) -and [verified](https://github.com/barrysteyn/node-scrypt/blob/master/src/scryptwrapper/keyderivation.c#L82-L121) (you are going to need some knowledge of the [C language](http://c.learncodethehardway.org/book/) for this). - -# Roadmap -See [changelog](https://github.com/barrysteyn/node-scrypt/blob/master/changelog.md) for upcoming features. - -# Credits -The scrypt library is Colin Percival's [scrypt](http://www.tarsnap.com/scrypt.html) project. - -Syed Beparey was instrumental in getting the Windows build working, with most of the Windows build based off the work done by Dinesh Shanbhag. diff --git a/node_modules/scrypt/binding.gyp b/node_modules/scrypt/binding.gyp deleted file mode 100644 index cbbaea8..0000000 --- a/node_modules/scrypt/binding.gyp +++ /dev/null @@ -1,131 +0,0 @@ -{ - 'variables': { - 'compiler-flags': [], - 'scrypt_platform_specific_files': [], - 'scrypt_platform_specific_includes': [], - 'conditions': [ - ['OS=="win"', { - 'scrypt_platform_specific_files': [ - 'scrypt/win/mman.c', - 'scrypt/win/gettimeofday.c' - ], - 'scrypt_platform_specific_includes': [ - 'scrypt/win/include', - ], - }], - ['OS!="win"',{ - 'compiler-flags': ['-std=c++11'] - }], - ['OS=="mac"', { - 'xcode_settings': { - 'OTHER_CPLUSPLUSFLAGS' : ['-stdlib=libc++'], - }, - }], - ], - }, - - 'target_defaults': { - 'default_configuration': 'Release', - 'msvs_settings': { - 'VCCLCompilerTool': { - 'RuntimeLibrary': 0, # static release - 'ExceptionHandling': '2', - 'AdditionalOptions': ['/EHsc'], - 'DisableSpecificWarnings': ['4506'], - }, - }, - }, - - 'targets': [ - { - 'target_name': 'copied_files', - 'conditions': [ - ['OS=="win"', { - 'copies' : [{ - 'destination':'scrypt/scrypt-1.2.0/', - 'files' : [ - 'scrypt/win/include/config.h' - ] - }], - }] - ] - }, - { - 'target_name': 'scrypt_lib', - 'type' : 'static_library', - 'sources': [ - 'scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.c', - 'scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.c', - 'scrypt/scrypt-1.2.0/libcperciva/util/warnp.c', - 'scrypt/scrypt-1.2.0/libcperciva/alg/sha256.c', - 'scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.c', - 'scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.c', - '<@(scrypt_platform_specific_files)', - ], - 'include_dirs': [ - 'scrypt/scrypt-1.2.0/', - 'scrypt/scrypt-1.2.0/libcperciva/cpusupport', - 'scrypt/scrypt-1.2.0/libcperciva/alg', - 'scrypt/scrypt-1.2.0/libcperciva/util', - 'scrypt/scrypt-1.2.0/lib/crypto', - '<@(scrypt_platform_specific_includes)', - ], - 'defines': [ - 'HAVE_CONFIG_H' - ], - 'conditions': [ - ['OS=="win"', { 'defines' : [ 'inline=__inline' ] }], - ], - 'dependencies': ['copied_files'], - }, - { - 'target_name': 'scrypt_wrapper', - 'type' : 'static_library', - 'sources': [ - 'src/util/memlimit.c', - 'src/scryptwrapper/keyderivation.c', - 'src/scryptwrapper/pickparams.c', - 'src/scryptwrapper/hash.c' - ], - 'include_dirs': [ - 'src/scryptwrapper/inc', - 'src', - 'scrypt/scrypt-1.2.0/libcperciva/alg', - 'scrypt/scrypt-1.2.0/libcperciva/util', - 'scrypt/scrypt-1.2.0/lib/crypto', - 'scrypt/scrypt-1.2.0/lib/util/', - 'scrypt/scrypt-1.2.0/lib/scryptenc/', - '<@(scrypt_platform_specific_includes)', - ], - 'defines': [ - 'HAVE_CONFIG_H' - ], - 'conditions': [ - ['OS=="win"', { 'defines' : [ 'inline=__inline' ] }], - ], - }, - { - 'target_name': 'scrypt', - 'sources': [ - 'src/node-boilerplate/scrypt_common.cc', - 'src/node-boilerplate/scrypt_params_async.cc', - 'src/node-boilerplate/scrypt_params_sync.cc', - 'src/node-boilerplate/scrypt_kdf_async.cc', - 'src/node-boilerplate/scrypt_kdf_sync.cc', - 'src/node-boilerplate/scrypt_kdf-verify_sync.cc', - 'src/node-boilerplate/scrypt_kdf-verify_async.cc', - 'src/node-boilerplate/scrypt_hash_sync.cc', - 'src/node-boilerplate/scrypt_hash_async.cc', - 'scrypt_node.cc' - ], - 'include_dirs': [ - '> $(depfile) -# Add extra rules as in (2). -# We remove slashes and replace spaces with new lines; -# remove blank lines; -# delete the first line and append a colon to the remaining lines. -sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ - grep -v '^$$' |\ - sed -e 1d -e 's|$$|:|' \ - >> $(depfile) -rm $(depfile).raw -endef - -# Command definitions: -# - cmd_foo is the actual command to run; -# - quiet_cmd_foo is the brief-output summary of the command. - -quiet_cmd_cc = CC($(TOOLSET)) $@ -cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_cxx = CXX($(TOOLSET)) $@ -cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_objc = CXX($(TOOLSET)) $@ -cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< - -quiet_cmd_objcxx = CXX($(TOOLSET)) $@ -cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# Commands for precompiled header files. -quiet_cmd_pch_c = CXX($(TOOLSET)) $@ -cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ -cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_m = CXX($(TOOLSET)) $@ -cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< -quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ -cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# gyp-mac-tool is written next to the root Makefile by gyp. -# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd -# already. -quiet_cmd_mac_tool = MACTOOL $(4) $< -cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" - -quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ -cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) - -quiet_cmd_infoplist = INFOPLIST $@ -cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" - -quiet_cmd_touch = TOUCH $@ -cmd_touch = touch $@ - -quiet_cmd_copy = COPY $@ -# send stderr to /dev/null to ignore messages when linking directories. -cmd_copy = rm -rf "$@" && cp -af "$<" "$@" - -quiet_cmd_alink = LIBTOOL-STATIC $@ -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) - -quiet_cmd_link = LINK($(TOOLSET)) $@ -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) - -quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) - -quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) - - -# Define an escape_quotes function to escape single quotes. -# This allows us to handle quotes properly as long as we always use -# use single quotes and escape_quotes. -escape_quotes = $(subst ','\'',$(1)) -# This comment is here just to include a ' to unconfuse syntax highlighting. -# Define an escape_vars function to escape '$' variable syntax. -# This allows us to read/write command lines with shell variables (e.g. -# $LD_LIBRARY_PATH), without triggering make substitution. -escape_vars = $(subst $$,$$$$,$(1)) -# Helper that expands to a shell command to echo a string exactly as it is in -# make. This uses printf instead of echo because printf's behaviour with respect -# to escape sequences is more portable than echo's across different shells -# (e.g., dash, bash). -exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' - -# Helper to compare the command we're about to run against the command -# we logged the last time we ran the command. Produces an empty -# string (false) when the commands match. -# Tricky point: Make has no string-equality test function. -# The kernel uses the following, but it seems like it would have false -# positives, where one string reordered its arguments. -# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ -# $(filter-out $(cmd_$@), $(cmd_$(1)))) -# We instead substitute each for the empty string into the other, and -# say they're equal if both substitutions produce the empty string. -# .d files contain ? instead of spaces, take that into account. -command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ - $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) - -# Helper that is non-empty when a prerequisite changes. -# Normally make does this implicitly, but we force rules to always run -# so we can check their command lines. -# $? -- new prerequisites -# $| -- order-only dependencies -prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) - -# Helper that executes all postbuilds until one fails. -define do_postbuilds - @E=0;\ - for p in $(POSTBUILDS); do\ - eval $$p;\ - E=$$?;\ - if [ $$E -ne 0 ]; then\ - break;\ - fi;\ - done;\ - if [ $$E -ne 0 ]; then\ - rm -rf "$@";\ - exit $$E;\ - fi -endef - -# do_cmd: run a command via the above cmd_foo names, if necessary. -# Should always run for a given target to handle command-line changes. -# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. -# Third argument, if non-zero, makes it do POSTBUILDS processing. -# Note: We intentionally do NOT call dirx for depfile, since it contains ? for -# spaces already and dirx strips the ? characters. -define do_cmd -$(if $(or $(command_changed),$(prereq_changed)), - @$(call exact_echo, $($(quiet)cmd_$(1))) - @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" - $(if $(findstring flock,$(word 2,$(cmd_$1))), - @$(cmd_$(1)) - @echo " $(quiet_cmd_$(1)): Finished", - @$(cmd_$(1)) - ) - @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) - @$(if $(2),$(fixup_dep)) - $(if $(and $(3), $(POSTBUILDS)), - $(call do_postbuilds) - ) -) -endef - -# Declare the "all" target first so it is the default, -# even though we don't have the deps yet. -.PHONY: all -all: - -# make looks for ways to re-generate included makefiles, but in our case, we -# don't have a direct way. Explicitly telling make that it has nothing to do -# for them makes it go faster. -%.d: ; - -# Use FORCE_DO_CMD to force a target to run. Should be coupled with -# do_cmd. -.PHONY: FORCE_DO_CMD -FORCE_DO_CMD: - -TOOLSET := target -# Suffix rules, putting all outputs into $(obj). -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - - -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,copied_files.target.mk)))),) - include copied_files.target.mk -endif -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,scrypt.target.mk)))),) - include scrypt.target.mk -endif -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,scrypt_lib.target.mk)))),) - include scrypt_lib.target.mk -endif -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,scrypt_wrapper.target.mk)))),) - include scrypt_wrapper.target.mk -endif - -quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = cd $(srcdir); /Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "--toplevel-dir=." -I/Users/jbaylina/git/MVP/node_modules/scrypt/build/config.gypi -I/Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/jbaylina/.node-gyp/5.9.0/include/node/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/jbaylina/.node-gyp/5.9.0" "-Dnode_gyp_dir=/Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp" "-Dnode_lib_file=node.lib" "-Dmodule_root_dir=/Users/jbaylina/git/MVP/node_modules/scrypt" binding.gyp -Makefile: $(srcdir)/../../../../.node-gyp/5.9.0/include/node/common.gypi $(srcdir)/../../../../n/lib/node_modules/npm/node_modules/node-gyp/addon.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp - $(call do_cmd,regen_makefile) - -# "all" is a concatenation of the "all" targets from all the included -# sub-makefiles. This is just here to clarify. -all: - -# Add in dependency-tracking rules. $(all_deps) is the list of every single -# target in our tree. Only consider the ones with .d (dependency) info: -d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) -ifneq ($(d_files),) - include $(d_files) -endif diff --git a/node_modules/scrypt/build/Release/.deps/Release/copied_files.node.d b/node_modules/scrypt/build/Release/.deps/Release/copied_files.node.d deleted file mode 100644 index 07337a9..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/copied_files.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/copied_files.node := c++ -bundle -undefined dynamic_lookup -Wl,-search_paths_first -mmacosx-version-min=10.5 -arch x86_64 -L./Release -o Release/copied_files.node diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/scrypt_node.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/scrypt_node.o.d deleted file mode 100644 index 54c1a79..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/scrypt_node.o.d +++ /dev/null @@ -1,47 +0,0 @@ -cmd_Release/obj.target/scrypt/scrypt_node.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/scrypt_node.o.d.raw -c -o Release/obj.target/scrypt/scrypt_node.o ../scrypt_node.cc -Release/obj.target/scrypt/scrypt_node.o: ../scrypt_node.cc \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - ../../nan/nan.h /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h -../scrypt_node.cc: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o.d deleted file mode 100644 index 7634467..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o.d +++ /dev/null @@ -1,48 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o ../src/node-boilerplate/scrypt_common.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o: \ - ../src/node-boilerplate/scrypt_common.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h -../src/node-boilerplate/scrypt_common.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o.d deleted file mode 100644 index 345ef66..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o.d +++ /dev/null @@ -1,56 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o ../src/node-boilerplate/scrypt_hash_async.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o: \ - ../src/node-boilerplate/scrypt_hash_async.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/node-boilerplate/inc/scrypt_hash_async.h \ - ../src/node-boilerplate/inc/scrypt_async.h \ - ../src/node-boilerplate/inc/scrypt_common.h \ - ../src/scryptwrapper/inc/hash.h -../src/node-boilerplate/scrypt_hash_async.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/node-boilerplate/inc/scrypt_hash_async.h: -../src/node-boilerplate/inc/scrypt_async.h: -../src/node-boilerplate/inc/scrypt_common.h: -../src/scryptwrapper/inc/hash.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o.d deleted file mode 100644 index 39b79bb..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o.d +++ /dev/null @@ -1,52 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o ../src/node-boilerplate/scrypt_hash_sync.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o: \ - ../src/node-boilerplate/scrypt_hash_sync.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/node-boilerplate/inc/scrypt_common.h \ - ../src/scryptwrapper/inc/hash.h -../src/node-boilerplate/scrypt_hash_sync.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/node-boilerplate/inc/scrypt_common.h: -../src/scryptwrapper/inc/hash.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o.d deleted file mode 100644 index 9941dfa..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o.d +++ /dev/null @@ -1,56 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o ../src/node-boilerplate/scrypt_kdf-verify_async.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o: \ - ../src/node-boilerplate/scrypt_kdf-verify_async.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/node-boilerplate/inc/scrypt_kdf-verify_async.h \ - ../src/node-boilerplate/inc/scrypt_async.h \ - ../src/node-boilerplate/inc/scrypt_common.h \ - ../src/scryptwrapper/inc/keyderivation.h -../src/node-boilerplate/scrypt_kdf-verify_async.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/node-boilerplate/inc/scrypt_kdf-verify_async.h: -../src/node-boilerplate/inc/scrypt_async.h: -../src/node-boilerplate/inc/scrypt_common.h: -../src/scryptwrapper/inc/keyderivation.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o.d deleted file mode 100644 index 92d5b86..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o.d +++ /dev/null @@ -1,52 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o ../src/node-boilerplate/scrypt_kdf-verify_sync.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o: \ - ../src/node-boilerplate/scrypt_kdf-verify_sync.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/node-boilerplate/inc/scrypt_common.h \ - ../src/scryptwrapper/inc/keyderivation.h -../src/node-boilerplate/scrypt_kdf-verify_sync.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/node-boilerplate/inc/scrypt_common.h: -../src/scryptwrapper/inc/keyderivation.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o.d deleted file mode 100644 index 5797719..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o.d +++ /dev/null @@ -1,56 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o ../src/node-boilerplate/scrypt_kdf_async.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o: \ - ../src/node-boilerplate/scrypt_kdf_async.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/node-boilerplate/inc/scrypt_kdf_async.h \ - ../src/node-boilerplate/inc/scrypt_async.h \ - ../src/node-boilerplate/inc/scrypt_common.h \ - ../src/scryptwrapper/inc/keyderivation.h -../src/node-boilerplate/scrypt_kdf_async.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/node-boilerplate/inc/scrypt_kdf_async.h: -../src/node-boilerplate/inc/scrypt_async.h: -../src/node-boilerplate/inc/scrypt_common.h: -../src/scryptwrapper/inc/keyderivation.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o.d deleted file mode 100644 index e20dfab..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o.d +++ /dev/null @@ -1,52 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o ../src/node-boilerplate/scrypt_kdf_sync.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o: \ - ../src/node-boilerplate/scrypt_kdf_sync.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/node-boilerplate/inc/scrypt_common.h \ - ../src/scryptwrapper/inc/keyderivation.h -../src/node-boilerplate/scrypt_kdf_sync.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/node-boilerplate/inc/scrypt_common.h: -../src/scryptwrapper/inc/keyderivation.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o.d deleted file mode 100644 index c817bf9..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o.d +++ /dev/null @@ -1,56 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o ../src/node-boilerplate/scrypt_params_async.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o: \ - ../src/node-boilerplate/scrypt_params_async.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/node-boilerplate/inc/scrypt_params_async.h \ - ../src/node-boilerplate/inc/scrypt_async.h \ - ../src/node-boilerplate/inc/scrypt_common.h \ - ../src/scryptwrapper/inc/pickparams.h -../src/node-boilerplate/scrypt_params_async.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/node-boilerplate/inc/scrypt_params_async.h: -../src/node-boilerplate/inc/scrypt_async.h: -../src/node-boilerplate/inc/scrypt_common.h: -../src/scryptwrapper/inc/pickparams.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o.d deleted file mode 100644 index 16628e5..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o.d +++ /dev/null @@ -1,52 +0,0 @@ -cmd_Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o := c++ '-DNODE_GYP_MODULE_NAME=scrypt' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -I../src/util -I../src/scryptwrapper/inc -I../src/node-boilerplate/inc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o.d.raw -c -o Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o ../src/node-boilerplate/scrypt_params_sync.cc -Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o: \ - ../src/node-boilerplate/scrypt_params_sync.cc ../../nan/nan.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/node-boilerplate/inc/scrypt_common.h \ - ../src/scryptwrapper/inc/pickparams.h -../src/node-boilerplate/scrypt_params_sync.cc: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/node-boilerplate/inc/scrypt_common.h: -../src/scryptwrapper/inc/pickparams.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o.d deleted file mode 100644 index 9f0e8c1..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o.d +++ /dev/null @@ -1,20 +0,0 @@ -cmd_Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_lib' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../scrypt/scrypt-1.2.0 -I../scrypt/scrypt-1.2.0/libcperciva/cpusupport -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o.d.raw -c -o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.c -Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o: \ - ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.c \ - ../scrypt/scrypt-1.2.0/scrypt_platform.h \ - ../scrypt/scrypt-1.2.0/config.h \ - ../scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport.h \ - ../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h \ - ../scrypt/scrypt-1.2.0/libcperciva/util/warnp.h \ - ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.h \ - ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix_sse2.h \ - ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h -../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.c: -../scrypt/scrypt-1.2.0/scrypt_platform.h: -../scrypt/scrypt-1.2.0/config.h: -../scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport.h: -../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h: -../scrypt/scrypt-1.2.0/libcperciva/util/warnp.h: -../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.h: -../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix_sse2.h: -../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o.d deleted file mode 100644 index c895820..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o.d +++ /dev/null @@ -1,10 +0,0 @@ -cmd_Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_lib' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../scrypt/scrypt-1.2.0 -I../scrypt/scrypt-1.2.0/libcperciva/cpusupport -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o.d.raw -c -o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.c -Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o: \ - ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.c \ - ../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h \ - ../scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h \ - ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.h -../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.c: -../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h: -../scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h: -../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o.d deleted file mode 100644 index 4e6a547..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o.d +++ /dev/null @@ -1,12 +0,0 @@ -cmd_Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_lib' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../scrypt/scrypt-1.2.0 -I../scrypt/scrypt-1.2.0/libcperciva/cpusupport -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o.d.raw -c -o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o ../scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.c -Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o: \ - ../scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.c \ - ../scrypt/scrypt-1.2.0/scrypt_platform.h \ - ../scrypt/scrypt-1.2.0/config.h \ - ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h \ - ../scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.h -../scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.c: -../scrypt/scrypt-1.2.0/scrypt_platform.h: -../scrypt/scrypt-1.2.0/config.h: -../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h: -../scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o.d deleted file mode 100644 index c049ead..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o.d +++ /dev/null @@ -1,10 +0,0 @@ -cmd_Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_lib' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../scrypt/scrypt-1.2.0 -I../scrypt/scrypt-1.2.0/libcperciva/cpusupport -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o.d.raw -c -o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o ../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.c -Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o: \ - ../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.c \ - ../scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.h \ - ../scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h \ - ../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h -../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.c: -../scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.h: -../scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h: -../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o.d deleted file mode 100644 index 3ca73d6..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o.d +++ /dev/null @@ -1,6 +0,0 @@ -cmd_Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_lib' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../scrypt/scrypt-1.2.0 -I../scrypt/scrypt-1.2.0/libcperciva/cpusupport -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o.d.raw -c -o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o ../scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.c -Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o: \ - ../scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.c \ - ../scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.h -../scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.c: -../scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o.d deleted file mode 100644 index 745e455..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o.d +++ /dev/null @@ -1,6 +0,0 @@ -cmd_Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_lib' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../scrypt/scrypt-1.2.0 -I../scrypt/scrypt-1.2.0/libcperciva/cpusupport -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o.d.raw -c -o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o ../scrypt/scrypt-1.2.0/libcperciva/util/warnp.c -Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o: \ - ../scrypt/scrypt-1.2.0/libcperciva/util/warnp.c \ - ../scrypt/scrypt-1.2.0/libcperciva/util/warnp.h -../scrypt/scrypt-1.2.0/libcperciva/util/warnp.c: -../scrypt/scrypt-1.2.0/libcperciva/util/warnp.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o.d deleted file mode 100644 index ab8ef9c..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o.d +++ /dev/null @@ -1,8 +0,0 @@ -cmd_Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_wrapper' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../src/scryptwrapper/inc -I../src -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -I../scrypt/scrypt-1.2.0/lib/util -I../scrypt/scrypt-1.2.0/lib/scryptenc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o.d.raw -c -o Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o ../src/scryptwrapper/hash.c -Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o: \ - ../src/scryptwrapper/hash.c \ - ../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h \ - ../src/scryptwrapper/inc/pickparams.h -../src/scryptwrapper/hash.c: -../scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h: -../src/scryptwrapper/inc/pickparams.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o.d deleted file mode 100644 index d515da5..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o.d +++ /dev/null @@ -1,11 +0,0 @@ -cmd_Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_wrapper' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../src/scryptwrapper/inc -I../src -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -I../scrypt/scrypt-1.2.0/lib/util -I../scrypt/scrypt-1.2.0/lib/scryptenc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o.d.raw -c -o Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o ../src/scryptwrapper/keyderivation.c -Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o: \ - ../src/scryptwrapper/keyderivation.c \ - ../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h \ - ../src/scryptwrapper/inc/hash.h ../src/scryptwrapper/inc/pickparams.h \ - ../scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h -../src/scryptwrapper/keyderivation.c: -../scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h: -../src/scryptwrapper/inc/hash.h: -../src/scryptwrapper/inc/pickparams.h: -../scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o.d deleted file mode 100644 index 1590081..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o.d +++ /dev/null @@ -1,10 +0,0 @@ -cmd_Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_wrapper' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../src/scryptwrapper/inc -I../src -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -I../scrypt/scrypt-1.2.0/lib/util -I../scrypt/scrypt-1.2.0/lib/scryptenc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o.d.raw -c -o Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o ../src/scryptwrapper/pickparams.c -Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o: \ - ../src/scryptwrapper/pickparams.c \ - ../src/scryptwrapper/inc/pickparams.h \ - ../scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.h \ - ../src/util/memlimit.h -../src/scryptwrapper/pickparams.c: -../src/scryptwrapper/inc/pickparams.h: -../scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.h: -../src/util/memlimit.h: diff --git a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/util/memlimit.o.d b/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/util/memlimit.o.d deleted file mode 100644 index b18e091..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/obj.target/scrypt_wrapper/src/util/memlimit.o.d +++ /dev/null @@ -1,4 +0,0 @@ -cmd_Release/obj.target/scrypt_wrapper/src/util/memlimit.o := cc '-DNODE_GYP_MODULE_NAME=scrypt_wrapper' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DHAVE_CONFIG_H' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../src/scryptwrapper/inc -I../src -I../scrypt/scrypt-1.2.0/libcperciva/alg -I../scrypt/scrypt-1.2.0/libcperciva/util -I../scrypt/scrypt-1.2.0/lib/crypto -I../scrypt/scrypt-1.2.0/lib/util -I../scrypt/scrypt-1.2.0/lib/scryptenc -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/scrypt_wrapper/src/util/memlimit.o.d.raw -c -o Release/obj.target/scrypt_wrapper/src/util/memlimit.o ../src/util/memlimit.c -Release/obj.target/scrypt_wrapper/src/util/memlimit.o: \ - ../src/util/memlimit.c -../src/util/memlimit.c: diff --git a/node_modules/scrypt/build/Release/.deps/Release/scrypt.node.d b/node_modules/scrypt/build/Release/.deps/Release/scrypt.node.d deleted file mode 100644 index 5031fc6..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/scrypt.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/scrypt.node := c++ -bundle -undefined dynamic_lookup -Wl,-search_paths_first -mmacosx-version-min=10.5 -arch x86_64 -L./Release -o Release/scrypt.node Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o Release/obj.target/scrypt/scrypt_node.o Release/scrypt_wrapper.a Release/scrypt_lib.a diff --git a/node_modules/scrypt/build/Release/.deps/Release/scrypt_lib.a.d b/node_modules/scrypt/build/Release/.deps/Release/scrypt_lib.a.d deleted file mode 100644 index 2f54bb0..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/scrypt_lib.a.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/scrypt_lib.a := rm -f Release/scrypt_lib.a && ./gyp-mac-tool filter-libtool libtool -static -o Release/scrypt_lib.a Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o diff --git a/node_modules/scrypt/build/Release/.deps/Release/scrypt_wrapper.a.d b/node_modules/scrypt/build/Release/.deps/Release/scrypt_wrapper.a.d deleted file mode 100644 index 2e4a7a7..0000000 --- a/node_modules/scrypt/build/Release/.deps/Release/scrypt_wrapper.a.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/scrypt_wrapper.a := rm -f Release/scrypt_wrapper.a && ./gyp-mac-tool filter-libtool libtool -static -o Release/scrypt_wrapper.a Release/obj.target/scrypt_wrapper/src/util/memlimit.o Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o diff --git a/node_modules/scrypt/build/Release/copied_files.node b/node_modules/scrypt/build/Release/copied_files.node deleted file mode 100755 index 6a2d945..0000000 Binary files a/node_modules/scrypt/build/Release/copied_files.node and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/scrypt_node.o b/node_modules/scrypt/build/Release/obj.target/scrypt/scrypt_node.o deleted file mode 100644 index 83622d2..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/scrypt_node.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o deleted file mode 100644 index 4b849ee..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o deleted file mode 100644 index 54292a3..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o deleted file mode 100644 index 4a91afd..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o deleted file mode 100644 index 265a1b7..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o deleted file mode 100644 index 22fda6c..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o deleted file mode 100644 index 137c843..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o deleted file mode 100644 index 6e8d614..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o deleted file mode 100644 index 11a2600..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o b/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o deleted file mode 100644 index 6b6073a..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o b/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o deleted file mode 100644 index 9a7fb03..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o b/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o deleted file mode 100644 index 5028b58..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o b/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o deleted file mode 100644 index 87787fc..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o b/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o deleted file mode 100644 index 2b2903f..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o b/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o deleted file mode 100644 index 12f2984..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o b/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o deleted file mode 100644 index 6f05221..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o b/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o deleted file mode 100644 index 728b370..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o b/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o deleted file mode 100644 index b473b76..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o b/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o deleted file mode 100644 index a23a069..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/util/memlimit.o b/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/util/memlimit.o deleted file mode 100644 index 887ece2..0000000 Binary files a/node_modules/scrypt/build/Release/obj.target/scrypt_wrapper/src/util/memlimit.o and /dev/null differ diff --git a/node_modules/scrypt/build/Release/scrypt.node b/node_modules/scrypt/build/Release/scrypt.node deleted file mode 100755 index 7a6c0e3..0000000 Binary files a/node_modules/scrypt/build/Release/scrypt.node and /dev/null differ diff --git a/node_modules/scrypt/build/Release/scrypt_lib.a b/node_modules/scrypt/build/Release/scrypt_lib.a deleted file mode 100644 index a9f645f..0000000 Binary files a/node_modules/scrypt/build/Release/scrypt_lib.a and /dev/null differ diff --git a/node_modules/scrypt/build/Release/scrypt_wrapper.a b/node_modules/scrypt/build/Release/scrypt_wrapper.a deleted file mode 100644 index 66460a8..0000000 Binary files a/node_modules/scrypt/build/Release/scrypt_wrapper.a and /dev/null differ diff --git a/node_modules/scrypt/build/binding.Makefile b/node_modules/scrypt/build/binding.Makefile deleted file mode 100644 index 8c7d3e9..0000000 --- a/node_modules/scrypt/build/binding.Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# This file is generated by gyp; do not edit. - -export builddir_name ?= ./build/. -.PHONY: all -all: - $(MAKE) scrypt_wrapper copied_files scrypt_lib scrypt diff --git a/node_modules/scrypt/build/config.gypi b/node_modules/scrypt/build/config.gypi deleted file mode 100644 index ea3cb54..0000000 --- a/node_modules/scrypt/build/config.gypi +++ /dev/null @@ -1,144 +0,0 @@ -# Do not edit. File was generated by node-gyp's "configure" step -{ - "target_defaults": { - "cflags": [], - "default_configuration": "Release", - "defines": [], - "include_dirs": [], - "libraries": [] - }, - "variables": { - "asan": 0, - "host_arch": "x64", - "icu_data_file": "icudt56l.dat", - "icu_data_in": "../../deps/icu/source/data/in/icudt56l.dat", - "icu_endianness": "l", - "icu_gyp_path": "tools/icu/icu-generic.gyp", - "icu_locales": "en,root", - "icu_path": "./deps/icu", - "icu_small": "true", - "icu_ver_major": "56", - "llvm_version": 0, - "node_byteorder": "little", - "node_enable_v8_vtunejit": "false", - "node_install_npm": "true", - "node_prefix": "/", - "node_release_urlbase": "https://nodejs.org/download/release/", - "node_shared_http_parser": "false", - "node_shared_libuv": "false", - "node_shared_openssl": "false", - "node_shared_zlib": "false", - "node_tag": "", - "node_use_dtrace": "true", - "node_use_etw": "false", - "node_use_lttng": "false", - "node_use_openssl": "true", - "node_use_perfctr": "false", - "openssl_fips": "", - "openssl_no_asm": 0, - "target_arch": "x64", - "uv_parent_path": "/deps/uv/", - "uv_use_dtrace": "true", - "v8_enable_gdbjit": 0, - "v8_enable_i18n_support": 1, - "v8_no_strict_aliasing": 1, - "v8_optimized_debug": 0, - "v8_random_seed": 0, - "v8_use_snapshot": "true", - "want_separate_host_toolset": 0, - "xcode_version": "7.0", - "nodedir": "/Users/jbaylina/.node-gyp/5.9.0", - "copy_dev_lib": "true", - "standalone_static_library": 1, - "dry_run": "", - "legacy_bundling": "", - "save_dev": "", - "browser": "", - "only": "", - "viewer": "man", - "also": "", - "rollback": "true", - "usage": "", - "globalignorefile": "/Users/jbaylina/n/etc/npmignore", - "init_author_url": "", - "shell": "/bin/bash", - "parseable": "", - "shrinkwrap": "true", - "init_license": "ISC", - "if_present": "", - "cache_max": "Infinity", - "init_author_email": "", - "sign_git_tag": "", - "cert": "", - "git_tag_version": "true", - "local_address": "", - "long": "", - "fetch_retries": "2", - "npat": "", - "registry": "https://registry.npmjs.org/", - "key": "", - "message": "%s", - "versions": "", - "globalconfig": "/Users/jbaylina/n/etc/npmrc", - "always_auth": "", - "cache_lock_retries": "10", - "global_style": "", - "cafile": "", - "heading": "npm", - "fetch_retry_mintimeout": "10000", - "proprietary_attribs": "true", - "access": "", - "json": "", - "description": "true", - "engine_strict": "", - "https_proxy": "", - "init_module": "/Users/jbaylina/.npm-init.js", - "userconfig": "/Users/jbaylina/.npmrc", - "node_version": "5.9.0", - "user": "501", - "save": "true", - "editor": "vi", - "tag": "latest", - "global": "", - "progress": "true", - "optional": "true", - "bin_links": "true", - "force": "", - "searchopts": "", - "depth": "Infinity", - "rebuild_bundle": "true", - "searchsort": "name", - "unicode": "true", - "fetch_retry_maxtimeout": "60000", - "ca": "", - "save_prefix": "^", - "strict_ssl": "true", - "tag_version_prefix": "v", - "dev": "", - "fetch_retry_factor": "10", - "group": "20", - "save_exact": "", - "cache_lock_stale": "60000", - "version": "", - "cache_min": "10", - "cache": "/Users/jbaylina/.npm", - "searchexclude": "", - "color": "true", - "save_optional": "", - "user_agent": "npm/3.7.3 node/v5.9.0 darwin x64", - "ignore_scripts": "", - "cache_lock_wait": "10000", - "production": "", - "save_bundle": "", - "init_version": "1.0.0", - "umask": "0022", - "git": "git", - "init_author_name": "", - "scope": "", - "onload_script": "", - "tmp": "/var/folders/g_/74y0ll3503d4sm0c64jw432r0000gn/T", - "unsafe_perm": "true", - "link": "", - "prefix": "/Users/jbaylina/n" - } -} diff --git a/node_modules/scrypt/build/copied_files.target.mk b/node_modules/scrypt/build/copied_files.target.mk deleted file mode 100644 index b8e9e46..0000000 --- a/node_modules/scrypt/build/copied_files.target.mk +++ /dev/null @@ -1,49 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := copied_files -### Rules for final target. -LDFLAGS_Debug := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Debug := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first - -LDFLAGS_Release := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Release := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first - -LIBS := - -$(builddir)/copied_files.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/copied_files.node: LIBS := $(LIBS) -$(builddir)/copied_files.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/copied_files.node: TOOLSET := $(TOOLSET) -$(builddir)/copied_files.node: FORCE_DO_CMD - $(call do_cmd,solink_module) - -all_deps += $(builddir)/copied_files.node -# Add target alias -.PHONY: copied_files -copied_files: $(builddir)/copied_files.node - -# Short alias for building this executable. -.PHONY: copied_files.node -copied_files.node: $(builddir)/copied_files.node - -# Add executable to "all" target. -.PHONY: all -all: $(builddir)/copied_files.node - diff --git a/node_modules/scrypt/build/gyp-mac-tool b/node_modules/scrypt/build/gyp-mac-tool deleted file mode 100755 index 8ef02b0..0000000 --- a/node_modules/scrypt/build/gyp-mac-tool +++ /dev/null @@ -1,611 +0,0 @@ -#!/usr/bin/env python -# Generated by gyp. Do not edit. -# Copyright (c) 2012 Google Inc. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Utility functions to perform Xcode-style build steps. - -These functions are executed via gyp-mac-tool when using the Makefile generator. -""" - -import fcntl -import fnmatch -import glob -import json -import os -import plistlib -import re -import shutil -import string -import subprocess -import sys -import tempfile - - -def main(args): - executor = MacTool() - exit_code = executor.Dispatch(args) - if exit_code is not None: - sys.exit(exit_code) - - -class MacTool(object): - """This class performs all the Mac tooling steps. The methods can either be - executed directly, or dispatched from an argument list.""" - - def Dispatch(self, args): - """Dispatches a string command to a method.""" - if len(args) < 1: - raise Exception("Not enough arguments") - - method = "Exec%s" % self._CommandifyName(args[0]) - return getattr(self, method)(*args[1:]) - - def _CommandifyName(self, name_string): - """Transforms a tool name like copy-info-plist to CopyInfoPlist""" - return name_string.title().replace('-', '') - - def ExecCopyBundleResource(self, source, dest, convert_to_binary): - """Copies a resource file to the bundle/Resources directory, performing any - necessary compilation on each resource.""" - extension = os.path.splitext(source)[1].lower() - if os.path.isdir(source): - # Copy tree. - # TODO(thakis): This copies file attributes like mtime, while the - # single-file branch below doesn't. This should probably be changed to - # be consistent with the single-file branch. - if os.path.exists(dest): - shutil.rmtree(dest) - shutil.copytree(source, dest) - elif extension == '.xib': - return self._CopyXIBFile(source, dest) - elif extension == '.storyboard': - return self._CopyXIBFile(source, dest) - elif extension == '.strings': - self._CopyStringsFile(source, dest, convert_to_binary) - else: - shutil.copy(source, dest) - - def _CopyXIBFile(self, source, dest): - """Compiles a XIB file with ibtool into a binary plist in the bundle.""" - - # ibtool sometimes crashes with relative paths. See crbug.com/314728. - base = os.path.dirname(os.path.realpath(__file__)) - if os.path.relpath(source): - source = os.path.join(base, source) - if os.path.relpath(dest): - dest = os.path.join(base, dest) - - args = ['xcrun', 'ibtool', '--errors', '--warnings', '--notices', - '--output-format', 'human-readable-text', '--compile', dest, source] - ibtool_section_re = re.compile(r'/\*.*\*/') - ibtool_re = re.compile(r'.*note:.*is clipping its content') - ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE) - current_section_header = None - for line in ibtoolout.stdout: - if ibtool_section_re.match(line): - current_section_header = line - elif not ibtool_re.match(line): - if current_section_header: - sys.stdout.write(current_section_header) - current_section_header = None - sys.stdout.write(line) - return ibtoolout.returncode - - def _ConvertToBinary(self, dest): - subprocess.check_call([ - 'xcrun', 'plutil', '-convert', 'binary1', '-o', dest, dest]) - - def _CopyStringsFile(self, source, dest, convert_to_binary): - """Copies a .strings file using iconv to reconvert the input into UTF-16.""" - input_code = self._DetectInputEncoding(source) or "UTF-8" - - # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call - # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints - # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing - # semicolon in dictionary. - # on invalid files. Do the same kind of validation. - import CoreFoundation - s = open(source, 'rb').read() - d = CoreFoundation.CFDataCreate(None, s, len(s)) - _, error = CoreFoundation.CFPropertyListCreateFromXMLData(None, d, 0, None) - if error: - return - - fp = open(dest, 'wb') - fp.write(s.decode(input_code).encode('UTF-16')) - fp.close() - - if convert_to_binary == 'True': - self._ConvertToBinary(dest) - - def _DetectInputEncoding(self, file_name): - """Reads the first few bytes from file_name and tries to guess the text - encoding. Returns None as a guess if it can't detect it.""" - fp = open(file_name, 'rb') - try: - header = fp.read(3) - except e: - fp.close() - return None - fp.close() - if header.startswith("\xFE\xFF"): - return "UTF-16" - elif header.startswith("\xFF\xFE"): - return "UTF-16" - elif header.startswith("\xEF\xBB\xBF"): - return "UTF-8" - else: - return None - - def ExecCopyInfoPlist(self, source, dest, convert_to_binary, *keys): - """Copies the |source| Info.plist to the destination directory |dest|.""" - # Read the source Info.plist into memory. - fd = open(source, 'r') - lines = fd.read() - fd.close() - - # Insert synthesized key/value pairs (e.g. BuildMachineOSBuild). - plist = plistlib.readPlistFromString(lines) - if keys: - plist = dict(plist.items() + json.loads(keys[0]).items()) - lines = plistlib.writePlistToString(plist) - - # Go through all the environment variables and replace them as variables in - # the file. - IDENT_RE = re.compile(r'[/\s]') - for key in os.environ: - if key.startswith('_'): - continue - evar = '${%s}' % key - evalue = os.environ[key] - lines = string.replace(lines, evar, evalue) - - # Xcode supports various suffices on environment variables, which are - # all undocumented. :rfc1034identifier is used in the standard project - # template these days, and :identifier was used earlier. They are used to - # convert non-url characters into things that look like valid urls -- - # except that the replacement character for :identifier, '_' isn't valid - # in a URL either -- oops, hence :rfc1034identifier was born. - evar = '${%s:identifier}' % key - evalue = IDENT_RE.sub('_', os.environ[key]) - lines = string.replace(lines, evar, evalue) - - evar = '${%s:rfc1034identifier}' % key - evalue = IDENT_RE.sub('-', os.environ[key]) - lines = string.replace(lines, evar, evalue) - - # Remove any keys with values that haven't been replaced. - lines = lines.split('\n') - for i in range(len(lines)): - if lines[i].strip().startswith("${"): - lines[i] = None - lines[i - 1] = None - lines = '\n'.join(filter(lambda x: x is not None, lines)) - - # Write out the file with variables replaced. - fd = open(dest, 'w') - fd.write(lines) - fd.close() - - # Now write out PkgInfo file now that the Info.plist file has been - # "compiled". - self._WritePkgInfo(dest) - - if convert_to_binary == 'True': - self._ConvertToBinary(dest) - - def _WritePkgInfo(self, info_plist): - """This writes the PkgInfo file from the data stored in Info.plist.""" - plist = plistlib.readPlist(info_plist) - if not plist: - return - - # Only create PkgInfo for executable types. - package_type = plist['CFBundlePackageType'] - if package_type != 'APPL': - return - - # The format of PkgInfo is eight characters, representing the bundle type - # and bundle signature, each four characters. If that is missing, four - # '?' characters are used instead. - signature_code = plist.get('CFBundleSignature', '????') - if len(signature_code) != 4: # Wrong length resets everything, too. - signature_code = '?' * 4 - - dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') - fp = open(dest, 'w') - fp.write('%s%s' % (package_type, signature_code)) - fp.close() - - def ExecFlock(self, lockfile, *cmd_list): - """Emulates the most basic behavior of Linux's flock(1).""" - # Rely on exception handling to report errors. - fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) - fcntl.flock(fd, fcntl.LOCK_EX) - return subprocess.call(cmd_list) - - def ExecFilterLibtool(self, *cmd_list): - """Calls libtool and filters out '/path/to/libtool: file: foo.o has no - symbols'.""" - libtool_re = re.compile(r'^.*libtool: file: .* has no symbols$') - libtool_re5 = re.compile( - r'^.*libtool: warning for library: ' + - r'.* the table of contents is empty ' + - r'\(no object file members in the library define global symbols\)$') - env = os.environ.copy() - # Ref: - # http://www.opensource.apple.com/source/cctools/cctools-809/misc/libtool.c - # The problem with this flag is that it resets the file mtime on the file to - # epoch=0, e.g. 1970-1-1 or 1969-12-31 depending on timezone. - env['ZERO_AR_DATE'] = '1' - libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE, env=env) - _, err = libtoolout.communicate() - for line in err.splitlines(): - if not libtool_re.match(line) and not libtool_re5.match(line): - print >>sys.stderr, line - # Unconditionally touch the output .a file on the command line if present - # and the command succeeded. A bit hacky. - if not libtoolout.returncode: - for i in range(len(cmd_list) - 1): - if cmd_list[i] == "-o" and cmd_list[i+1].endswith('.a'): - os.utime(cmd_list[i+1], None) - break - return libtoolout.returncode - - def ExecPackageFramework(self, framework, version): - """Takes a path to Something.framework and the Current version of that and - sets up all the symlinks.""" - # Find the name of the binary based on the part before the ".framework". - binary = os.path.basename(framework).split('.')[0] - - CURRENT = 'Current' - RESOURCES = 'Resources' - VERSIONS = 'Versions' - - if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): - # Binary-less frameworks don't seem to contain symlinks (see e.g. - # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). - return - - # Move into the framework directory to set the symlinks correctly. - pwd = os.getcwd() - os.chdir(framework) - - # Set up the Current version. - self._Relink(version, os.path.join(VERSIONS, CURRENT)) - - # Set up the root symlinks. - self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) - self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) - - # Back to where we were before! - os.chdir(pwd) - - def _Relink(self, dest, link): - """Creates a symlink to |dest| named |link|. If |link| already exists, - it is overwritten.""" - if os.path.lexists(link): - os.remove(link) - os.symlink(dest, link) - - def ExecCompileXcassets(self, keys, *inputs): - """Compiles multiple .xcassets files into a single .car file. - - This invokes 'actool' to compile all the inputs .xcassets files. The - |keys| arguments is a json-encoded dictionary of extra arguments to - pass to 'actool' when the asset catalogs contains an application icon - or a launch image. - - Note that 'actool' does not create the Assets.car file if the asset - catalogs does not contains imageset. - """ - command_line = [ - 'xcrun', 'actool', '--output-format', 'human-readable-text', - '--compress-pngs', '--notices', '--warnings', '--errors', - ] - is_iphone_target = 'IPHONEOS_DEPLOYMENT_TARGET' in os.environ - if is_iphone_target: - platform = os.environ['CONFIGURATION'].split('-')[-1] - if platform not in ('iphoneos', 'iphonesimulator'): - platform = 'iphonesimulator' - command_line.extend([ - '--platform', platform, '--target-device', 'iphone', - '--target-device', 'ipad', '--minimum-deployment-target', - os.environ['IPHONEOS_DEPLOYMENT_TARGET'], '--compile', - os.path.abspath(os.environ['CONTENTS_FOLDER_PATH']), - ]) - else: - command_line.extend([ - '--platform', 'macosx', '--target-device', 'mac', - '--minimum-deployment-target', os.environ['MACOSX_DEPLOYMENT_TARGET'], - '--compile', - os.path.abspath(os.environ['UNLOCALIZED_RESOURCES_FOLDER_PATH']), - ]) - if keys: - keys = json.loads(keys) - for key, value in keys.iteritems(): - arg_name = '--' + key - if isinstance(value, bool): - if value: - command_line.append(arg_name) - elif isinstance(value, list): - for v in value: - command_line.append(arg_name) - command_line.append(str(v)) - else: - command_line.append(arg_name) - command_line.append(str(value)) - # Note: actool crashes if inputs path are relative, so use os.path.abspath - # to get absolute path name for inputs. - command_line.extend(map(os.path.abspath, inputs)) - subprocess.check_call(command_line) - - def ExecMergeInfoPlist(self, output, *inputs): - """Merge multiple .plist files into a single .plist file.""" - merged_plist = {} - for path in inputs: - plist = self._LoadPlistMaybeBinary(path) - self._MergePlist(merged_plist, plist) - plistlib.writePlist(merged_plist, output) - - def ExecCodeSignBundle(self, key, resource_rules, entitlements, provisioning): - """Code sign a bundle. - - This function tries to code sign an iOS bundle, following the same - algorithm as Xcode: - 1. copy ResourceRules.plist from the user or the SDK into the bundle, - 2. pick the provisioning profile that best match the bundle identifier, - and copy it into the bundle as embedded.mobileprovision, - 3. copy Entitlements.plist from user or SDK next to the bundle, - 4. code sign the bundle. - """ - resource_rules_path = self._InstallResourceRules(resource_rules) - substitutions, overrides = self._InstallProvisioningProfile( - provisioning, self._GetCFBundleIdentifier()) - entitlements_path = self._InstallEntitlements( - entitlements, substitutions, overrides) - subprocess.check_call([ - 'codesign', '--force', '--sign', key, '--resource-rules', - resource_rules_path, '--entitlements', entitlements_path, - os.path.join( - os.environ['TARGET_BUILD_DIR'], - os.environ['FULL_PRODUCT_NAME'])]) - - def _InstallResourceRules(self, resource_rules): - """Installs ResourceRules.plist from user or SDK into the bundle. - - Args: - resource_rules: string, optional, path to the ResourceRules.plist file - to use, default to "${SDKROOT}/ResourceRules.plist" - - Returns: - Path to the copy of ResourceRules.plist into the bundle. - """ - source_path = resource_rules - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['CONTENTS_FOLDER_PATH'], - 'ResourceRules.plist') - if not source_path: - source_path = os.path.join( - os.environ['SDKROOT'], 'ResourceRules.plist') - shutil.copy2(source_path, target_path) - return target_path - - def _InstallProvisioningProfile(self, profile, bundle_identifier): - """Installs embedded.mobileprovision into the bundle. - - Args: - profile: string, optional, short name of the .mobileprovision file - to use, if empty or the file is missing, the best file installed - will be used - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - - Returns: - A tuple containing two dictionary: variables substitutions and values - to overrides when generating the entitlements file. - """ - source_path, provisioning_data, team_id = self._FindProvisioningProfile( - profile, bundle_identifier) - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['CONTENTS_FOLDER_PATH'], - 'embedded.mobileprovision') - shutil.copy2(source_path, target_path) - substitutions = self._GetSubstitutions(bundle_identifier, team_id + '.') - return substitutions, provisioning_data['Entitlements'] - - def _FindProvisioningProfile(self, profile, bundle_identifier): - """Finds the .mobileprovision file to use for signing the bundle. - - Checks all the installed provisioning profiles (or if the user specified - the PROVISIONING_PROFILE variable, only consult it) and select the most - specific that correspond to the bundle identifier. - - Args: - profile: string, optional, short name of the .mobileprovision file - to use, if empty or the file is missing, the best file installed - will be used - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - - Returns: - A tuple of the path to the selected provisioning profile, the data of - the embedded plist in the provisioning profile and the team identifier - to use for code signing. - - Raises: - SystemExit: if no .mobileprovision can be used to sign the bundle. - """ - profiles_dir = os.path.join( - os.environ['HOME'], 'Library', 'MobileDevice', 'Provisioning Profiles') - if not os.path.isdir(profiles_dir): - print >>sys.stderr, ( - 'cannot find mobile provisioning for %s' % bundle_identifier) - sys.exit(1) - provisioning_profiles = None - if profile: - profile_path = os.path.join(profiles_dir, profile + '.mobileprovision') - if os.path.exists(profile_path): - provisioning_profiles = [profile_path] - if not provisioning_profiles: - provisioning_profiles = glob.glob( - os.path.join(profiles_dir, '*.mobileprovision')) - valid_provisioning_profiles = {} - for profile_path in provisioning_profiles: - profile_data = self._LoadProvisioningProfile(profile_path) - app_id_pattern = profile_data.get( - 'Entitlements', {}).get('application-identifier', '') - for team_identifier in profile_data.get('TeamIdentifier', []): - app_id = '%s.%s' % (team_identifier, bundle_identifier) - if fnmatch.fnmatch(app_id, app_id_pattern): - valid_provisioning_profiles[app_id_pattern] = ( - profile_path, profile_data, team_identifier) - if not valid_provisioning_profiles: - print >>sys.stderr, ( - 'cannot find mobile provisioning for %s' % bundle_identifier) - sys.exit(1) - # If the user has multiple provisioning profiles installed that can be - # used for ${bundle_identifier}, pick the most specific one (ie. the - # provisioning profile whose pattern is the longest). - selected_key = max(valid_provisioning_profiles, key=lambda v: len(v)) - return valid_provisioning_profiles[selected_key] - - def _LoadProvisioningProfile(self, profile_path): - """Extracts the plist embedded in a provisioning profile. - - Args: - profile_path: string, path to the .mobileprovision file - - Returns: - Content of the plist embedded in the provisioning profile as a dictionary. - """ - with tempfile.NamedTemporaryFile() as temp: - subprocess.check_call([ - 'security', 'cms', '-D', '-i', profile_path, '-o', temp.name]) - return self._LoadPlistMaybeBinary(temp.name) - - def _MergePlist(self, merged_plist, plist): - """Merge |plist| into |merged_plist|.""" - for key, value in plist.iteritems(): - if isinstance(value, dict): - merged_value = merged_plist.get(key, {}) - if isinstance(merged_value, dict): - self._MergePlist(merged_value, value) - merged_plist[key] = merged_value - else: - merged_plist[key] = value - else: - merged_plist[key] = value - - def _LoadPlistMaybeBinary(self, plist_path): - """Loads into a memory a plist possibly encoded in binary format. - - This is a wrapper around plistlib.readPlist that tries to convert the - plist to the XML format if it can't be parsed (assuming that it is in - the binary format). - - Args: - plist_path: string, path to a plist file, in XML or binary format - - Returns: - Content of the plist as a dictionary. - """ - try: - # First, try to read the file using plistlib that only supports XML, - # and if an exception is raised, convert a temporary copy to XML and - # load that copy. - return plistlib.readPlist(plist_path) - except: - pass - with tempfile.NamedTemporaryFile() as temp: - shutil.copy2(plist_path, temp.name) - subprocess.check_call(['plutil', '-convert', 'xml1', temp.name]) - return plistlib.readPlist(temp.name) - - def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix): - """Constructs a dictionary of variable substitutions for Entitlements.plist. - - Args: - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - app_identifier_prefix: string, value for AppIdentifierPrefix - - Returns: - Dictionary of substitutions to apply when generating Entitlements.plist. - """ - return { - 'CFBundleIdentifier': bundle_identifier, - 'AppIdentifierPrefix': app_identifier_prefix, - } - - def _GetCFBundleIdentifier(self): - """Extracts CFBundleIdentifier value from Info.plist in the bundle. - - Returns: - Value of CFBundleIdentifier in the Info.plist located in the bundle. - """ - info_plist_path = os.path.join( - os.environ['TARGET_BUILD_DIR'], - os.environ['INFOPLIST_PATH']) - info_plist_data = self._LoadPlistMaybeBinary(info_plist_path) - return info_plist_data['CFBundleIdentifier'] - - def _InstallEntitlements(self, entitlements, substitutions, overrides): - """Generates and install the ${BundleName}.xcent entitlements file. - - Expands variables "$(variable)" pattern in the source entitlements file, - add extra entitlements defined in the .mobileprovision file and the copy - the generated plist to "${BundlePath}.xcent". - - Args: - entitlements: string, optional, path to the Entitlements.plist template - to use, defaults to "${SDKROOT}/Entitlements.plist" - substitutions: dictionary, variable substitutions - overrides: dictionary, values to add to the entitlements - - Returns: - Path to the generated entitlements file. - """ - source_path = entitlements - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['PRODUCT_NAME'] + '.xcent') - if not source_path: - source_path = os.path.join( - os.environ['SDKROOT'], - 'Entitlements.plist') - shutil.copy2(source_path, target_path) - data = self._LoadPlistMaybeBinary(target_path) - data = self._ExpandVariables(data, substitutions) - if overrides: - for key in overrides: - if key not in data: - data[key] = overrides[key] - plistlib.writePlist(data, target_path) - return target_path - - def _ExpandVariables(self, data, substitutions): - """Expands variables "$(variable)" in data. - - Args: - data: object, can be either string, list or dictionary - substitutions: dictionary, variable substitutions to perform - - Returns: - Copy of data where each references to "$(variable)" has been replaced - by the corresponding value found in substitutions, or left intact if - the key was not found. - """ - if isinstance(data, str): - for key, value in substitutions.iteritems(): - data = data.replace('$(%s)' % key, value) - return data - if isinstance(data, list): - return [self._ExpandVariables(v, substitutions) for v in data] - if isinstance(data, dict): - return {k: self._ExpandVariables(data[k], substitutions) for k in data} - return data - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/node_modules/scrypt/build/scrypt.target.mk b/node_modules/scrypt/build/scrypt.target.mk deleted file mode 100644 index 98dc005..0000000 --- a/node_modules/scrypt/build/scrypt.target.mk +++ /dev/null @@ -1,183 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := scrypt -DEFS_Debug := \ - '-DNODE_GYP_MODULE_NAME=scrypt' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' \ - '-DDEBUG' \ - '-D_DEBUG' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := - -INCS_Debug := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I$(srcdir)/../nan \ - -I$(srcdir)/src/util \ - -I$(srcdir)/src/scryptwrapper/inc \ - -I$(srcdir)/src/node-boilerplate/inc - -DEFS_Release := \ - '-DNODE_GYP_MODULE_NAME=scrypt' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' - -# Flags passed to all source files. -CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := - -INCS_Release := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I$(srcdir)/../nan \ - -I$(srcdir)/src/util \ - -I$(srcdir)/src/scryptwrapper/inc \ - -I$(srcdir)/src/node-boilerplate/inc - -OBJS := \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_common.o \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_params_async.o \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_params_sync.o \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_kdf_async.o \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_kdf_sync.o \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_kdf-verify_sync.o \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_kdf-verify_async.o \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_hash_sync.o \ - $(obj).target/$(TARGET)/src/node-boilerplate/scrypt_hash_async.o \ - $(obj).target/$(TARGET)/scrypt_node.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# Make sure our dependencies are built before any of us. -$(OBJS): | $(builddir)/scrypt_wrapper.a $(builddir)/scrypt_lib.a - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Debug := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first - -LDFLAGS_Release := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Release := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first - -LIBS := - -$(builddir)/scrypt.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/scrypt.node: LIBS := $(LIBS) -$(builddir)/scrypt.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/scrypt.node: TOOLSET := $(TOOLSET) -$(builddir)/scrypt.node: $(OBJS) $(builddir)/scrypt_wrapper.a $(builddir)/scrypt_lib.a FORCE_DO_CMD - $(call do_cmd,solink_module) - -all_deps += $(builddir)/scrypt.node -# Add target alias -.PHONY: scrypt -scrypt: $(builddir)/scrypt.node - -# Short alias for building this executable. -.PHONY: scrypt.node -scrypt.node: $(builddir)/scrypt.node - -# Add executable to "all" target. -.PHONY: all -all: $(builddir)/scrypt.node - diff --git a/node_modules/scrypt/build/scrypt_lib.target.mk b/node_modules/scrypt/build/scrypt_lib.target.mk deleted file mode 100644 index 24ec5e4..0000000 --- a/node_modules/scrypt/build/scrypt_lib.target.mk +++ /dev/null @@ -1,181 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := scrypt_lib -DEFS_Debug := \ - '-DNODE_GYP_MODULE_NAME=scrypt_lib' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DHAVE_CONFIG_H' \ - '-DDEBUG' \ - '-D_DEBUG' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := - -INCS_Debug := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I$(srcdir)/scrypt/scrypt-1.2.0 \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/cpusupport \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/alg \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/util \ - -I$(srcdir)/scrypt/scrypt-1.2.0/lib/crypto - -DEFS_Release := \ - '-DNODE_GYP_MODULE_NAME=scrypt_lib' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DHAVE_CONFIG_H' - -# Flags passed to all source files. -CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := - -INCS_Release := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I$(srcdir)/scrypt/scrypt-1.2.0 \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/cpusupport \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/alg \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/util \ - -I$(srcdir)/scrypt/scrypt-1.2.0/lib/crypto - -OBJS := \ - $(obj).target/$(TARGET)/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o \ - $(obj).target/$(TARGET)/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o \ - $(obj).target/$(TARGET)/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o \ - $(obj).target/$(TARGET)/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o \ - $(obj).target/$(TARGET)/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o \ - $(obj).target/$(TARGET)/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# Make sure our dependencies are built before any of us. -$(OBJS): | $(builddir)/copied_files.node - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Debug := - -LDFLAGS_Release := \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Release := - -LIBS := - -$(builddir)/scrypt_lib.a: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/scrypt_lib.a: LIBS := $(LIBS) -$(builddir)/scrypt_lib.a: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/scrypt_lib.a: TOOLSET := $(TOOLSET) -$(builddir)/scrypt_lib.a: $(OBJS) FORCE_DO_CMD - $(call do_cmd,alink) - -all_deps += $(builddir)/scrypt_lib.a -# Add target alias -.PHONY: scrypt_lib -scrypt_lib: $(builddir)/scrypt_lib.a - -# Add target alias to "all" target. -.PHONY: all -all: scrypt_lib - -# Add target alias -.PHONY: scrypt_lib -scrypt_lib: $(builddir)/scrypt_lib.a - -# Short alias for building this static library. -.PHONY: scrypt_lib.a -scrypt_lib.a: $(builddir)/scrypt_lib.a - -# Add static library to "all" target. -.PHONY: all -all: $(builddir)/scrypt_lib.a - diff --git a/node_modules/scrypt/build/scrypt_wrapper.target.mk b/node_modules/scrypt/build/scrypt_wrapper.target.mk deleted file mode 100644 index eb73899..0000000 --- a/node_modules/scrypt/build/scrypt_wrapper.target.mk +++ /dev/null @@ -1,180 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := scrypt_wrapper -DEFS_Debug := \ - '-DNODE_GYP_MODULE_NAME=scrypt_wrapper' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DHAVE_CONFIG_H' \ - '-DDEBUG' \ - '-D_DEBUG' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := - -INCS_Debug := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I$(srcdir)/src/scryptwrapper/inc \ - -I$(srcdir)/src \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/alg \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/util \ - -I$(srcdir)/scrypt/scrypt-1.2.0/lib/crypto \ - -I$(srcdir)/scrypt/scrypt-1.2.0/lib/util \ - -I$(srcdir)/scrypt/scrypt-1.2.0/lib/scryptenc - -DEFS_Release := \ - '-DNODE_GYP_MODULE_NAME=scrypt_wrapper' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DHAVE_CONFIG_H' - -# Flags passed to all source files. -CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := - -INCS_Release := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I$(srcdir)/src/scryptwrapper/inc \ - -I$(srcdir)/src \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/alg \ - -I$(srcdir)/scrypt/scrypt-1.2.0/libcperciva/util \ - -I$(srcdir)/scrypt/scrypt-1.2.0/lib/crypto \ - -I$(srcdir)/scrypt/scrypt-1.2.0/lib/util \ - -I$(srcdir)/scrypt/scrypt-1.2.0/lib/scryptenc - -OBJS := \ - $(obj).target/$(TARGET)/src/util/memlimit.o \ - $(obj).target/$(TARGET)/src/scryptwrapper/keyderivation.o \ - $(obj).target/$(TARGET)/src/scryptwrapper/pickparams.o \ - $(obj).target/$(TARGET)/src/scryptwrapper/hash.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Debug := - -LDFLAGS_Release := \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Release := - -LIBS := - -$(builddir)/scrypt_wrapper.a: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/scrypt_wrapper.a: LIBS := $(LIBS) -$(builddir)/scrypt_wrapper.a: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/scrypt_wrapper.a: TOOLSET := $(TOOLSET) -$(builddir)/scrypt_wrapper.a: $(OBJS) FORCE_DO_CMD - $(call do_cmd,alink) - -all_deps += $(builddir)/scrypt_wrapper.a -# Add target alias -.PHONY: scrypt_wrapper -scrypt_wrapper: $(builddir)/scrypt_wrapper.a - -# Add target alias to "all" target. -.PHONY: all -all: scrypt_wrapper - -# Add target alias -.PHONY: scrypt_wrapper -scrypt_wrapper: $(builddir)/scrypt_wrapper.a - -# Short alias for building this static library. -.PHONY: scrypt_wrapper.a -scrypt_wrapper.a: $(builddir)/scrypt_wrapper.a - -# Add static library to "all" target. -.PHONY: all -all: $(builddir)/scrypt_wrapper.a - diff --git a/node_modules/scrypt/changelog.md b/node_modules/scrypt/changelog.md deleted file mode 100644 index 50b14e3..0000000 --- a/node_modules/scrypt/changelog.md +++ /dev/null @@ -1,53 +0,0 @@ -# Change Log -All notable changes to this project will be documented in this file. -This project adheres to [Semantic Versioning](http://semver.org/). - -## [6.0.2] - 2016-04-17 -### Fixed -- Microsoft compile issues - -## [5.4.1] - 2015-10-12 -### Fixed -- Corrected Hash API documentation in README - -## [5.4.0] - 2015-10-09 -### Fixed -- Check for empty buffer (see #97) - -## [5.3.0] - 2015-10-08 -### Added -- This changelog file - -### Changed -- Renamed Readme.md to README.md -- Inserted link to changelog in README.md - -## [5.2.0] - 2015-10-06 -### Fixed -- Allow building on MS 2015 - -## [5.1.1] - 2015-09-21 -### Fixed -- Remove hardcoded nan paths - issue 92 - -## [5.1.0] - 2015-09-21 -### Changed -- Updated Readme documentation to include ..... - -## [5.0] - 2015-09-13 -### Added -- Made module ES6 Promise compatible -- ... - -### Fixed -- Fixes ... - -### Changed -- C++ addon code rewritten using Nan 2.x -- API has changed: -- Every output is a buffer. -- Separated functions into async and sync versions. -- Api name swap: What was kdf in previous versions is now hash (and vice versa). -- Async functions will return a Promise if no callback function is present and Promises are available (else it will throw a SyntaxError). -- Using correct JavaScript Error object for all errors -- Updated Readme documentation to include ..... diff --git a/node_modules/scrypt/index.js b/node_modules/scrypt/index.js deleted file mode 100644 index 7b13a79..0000000 --- a/node_modules/scrypt/index.js +++ /dev/null @@ -1,386 +0,0 @@ -"use strict"; - -var scryptNative = require("./build/Release/scrypt") - , Crypto = require("crypto") - , Os = require("os"); - -var checkNumberOfArguments = function(args, message, numberOfArguments) { - if (message === undefined) message = "No arguments present"; - if (numberOfArguments === undefined) numberOfArguments = 1; - - if (args.length < numberOfArguments) { - var error = new SyntaxError(message); - throw error; - } -} - -// -// Checks async arguments. Will throw error if callback does not exist and -// promises are not available -// -var checkAsyncArguments = function(args, callback_least_needed_pos, message) { - checkNumberOfArguments(args); - - var callback_index = (function(){ - for (var i=0; i < args.length; i++) { - if (typeof args[i] === "function") { - return i; - } - } - })(); - - if (callback_index === undefined) { - if (typeof Promise !== "undefined") - return undefined; // if promises are available, don't worry about call backs - - var error = new SyntaxError("No callback function present, and Promises are not available"); - throw error; - } - - if (callback_index < callback_least_needed_pos) { - var error = new SyntaxError(message); - throw error; - } - - return callback_index; -} - -// -// Checks the scrypt parameters object -// -var checkScryptParametersObject = function(params) { - var error = undefined; - - if (typeof params !== "object") { - var error = new TypeError("Scrypt parameters type is incorrect: It must be a JSON object"); - } - - if (!error && !params.hasOwnProperty("N")) { - var error = new TypeError("Scrypt params object does not have 'N' property present"); - } - - if (!error && params.N !== parseInt(params.N)) { - var error = new TypeError("Scrypt params object 'N' property is not an integer"); - } - - if (!error && !params.hasOwnProperty("r")) { - var error = new TypeError("Scrypt params object does not have 'r' property present"); - } - - if (!error && params.r !== parseInt(params.r)) { - var error = new TypeError("Scrypt params object 'r' property is not an integer"); - } - - if (!error && !params.hasOwnProperty("p")) { - var error = new TypeError("Scrypt params object does not have 'p' property present"); - } - - if (!error && params.p !== parseInt(params.p)) { - var error = new TypeError("Scrypt params object 'p' property is not an integer"); - } - - if (error) { - error.propertyName = "Scrypt parameters object"; - error.propertyValue = params; - throw error; - } -} - -var processParamsArguments = function(args) { - var error = undefined; - - checkNumberOfArguments(args, "At least one argument is needed - the maxtime", 1); - - // Set defaults (if necessary) - if (args[1] === undefined) args[1] = 0; //maxmem default to 0 - if (args[2] === undefined) args[2] = 0.5; //max_memfrac default to 0.5 - - for(var i=0; i < Math.min(3, args.length); i++) { - var propertyName = (function() { - if (i === 0) return "maxtime"; - if (i === 1) return "maxmem"; - if (i === 2) return "max_memfrac"; - })(); - - // All args must be of type number - if (!error && typeof args[i] !== "number") { - error = new TypeError(propertyName + " must be a number"); - } - - // Specific argument checks - if (!error) { - switch (i) { - case 0: //maxtime - if (args[0] <= 0) { - error = new RangeError(propertyName + " must be greater than 0"); - } - break; - - case 1: //maxmem - if (args[1] !== parseInt(args[1], 10)) { - error = new TypeError(propertyName + " must be an integer"); - } - - if (!error && args[1] < 0) { - error = new RangeError(propertyName + " must be greater than or equal to 0") - } - break; - - case 2: //max_memfrac - if (args[2] < 0.0 || args[2] > 1.0) { - error = new RangeError(propertyName + " must be between 0.0 and 1.0 inclusive") - } - break; - } - } - - // Throw error if necessary - if (error) { - error.propertyName = propertyName; - error.propertyValue = args[i]; - throw error; - } - } - - return args; -} - -var processKDFArguments = function(args) { - checkNumberOfArguments(args, "At least two arguments are needed - the key and the Scrypt paramaters object", 2) - - // - // Check key argument - // - if (typeof args[0] === "string") - // Convert string to buffer (if necessary) - args[0] = new Buffer(args[0]); - else if (!Buffer.isBuffer(args[0])) { - var error = new TypeError("Key type is incorrect: It can only be of type string or Buffer"); - error.propertyName = "key"; - error.propertyValue = args[0]; - throw error; - } - - // - // Check Scrypt Parameters object - // - checkScryptParametersObject(args[1]) - - return args; -} - -var processVerifyArguments = function(args) { - checkNumberOfArguments(args, "At least two arguments are needed - the KDF and the key", 2); - - // - // Check KDF - // - if (typeof args[0] === "string") - // Convert string to buffer (if necessary) - args[0] = new Buffer(args[0]); - else if (!Buffer.isBuffer(args[0])) { - var error = new TypeError("KDF type is incorrect: It can only be of type string or Buffer"); - error.propertyName = "KDF"; - error.propertyValue = args[0]; - throw error; - } - - // - // Check Key - // - if (typeof args[1] === "string") - // Convert string to buffer (if necessary) - args[1] = new Buffer(args[1]); - else if (!Buffer.isBuffer(args[1])) { - var error = new TypeError("Key type is incorrect: It can only be of type string or Buffer"); - error.propertyName = "key"; - error.propertyValue = args[1]; - throw error; - } - - return args; -} - -var processHashArguments = function(args) { - checkNumberOfArguments(args, "At least four arguments are needed - the key to hash, the scrypt params object, the output length of the hash and the salt", 4); - - // - // Check Key - // - if (typeof args[0] === "string") - // Convert string to buffer (if necessary) - args[0] = new Buffer(args[0]); - else if (!Buffer.isBuffer(args[0])) { - var error = new TypeError("Key type is incorrect: It can only be of type string or Buffer"); - error.propertyName = "KDF"; - error.propertyValue = args[0]; - throw error; - } - - // - // Check Scrypt Parameters object - // - checkScryptParametersObject(args[1]) - - // - // Check the hash output length - // - if (typeof args[2] !== "number" || args[2] !== parseInt(args[2],10)) { - error = new TypeError("Hash length must be an integer"); - throw error; - } - - // - // Check Salt - // - if (typeof args[3] === "string") - // Convert string to buffer (if necessary) - args[3] = new Buffer(args[3]); - else if (!Buffer.isBuffer(args[3])) { - var error = new TypeError("Salt type is incorrect: It can only be of type string or Buffer"); - error.propertyName = "salt"; - error.propertyValue = args[3]; - throw error; - } - - return args; -} - -// -// Scrypt Object -// -var scrypt = { - paramsSync: function() { - var args = processParamsArguments(arguments); - return scryptNative.paramsSync(args[0], args[1], args[2], Os.totalmem()); - }, - - params: function() { - var args = arguments - , callback_index = checkAsyncArguments(args, 1, "At least one argument is needed before the callback - the maxtime"); - - if (callback_index === undefined) { - // Promise - return new Promise(function(resolve, reject) { - args = processParamsArguments(args); - scryptNative.params(args[0], args[1], args[2], Os.totalmem(), function(err, params) { - if (err) { - reject(err); - } else { - resolve(params); - } - }); - }) - } else { - // Normal async with callback - - // If not using promise (so using callback), - // remove callback function from args and - // put it in it's own variable. This allows - // sync check to be used (DRY) - var callback = args[callback_index]; - delete args[callback_index]; - args = processParamsArguments(args); - args[3] = callback; - scryptNative.params(args[0], args[1], args[2], Os.totalmem(), args[3]); - } - }, - - kdfSync: function() { - var args = processKDFArguments(arguments); - return scryptNative.kdfSync(args[0], args[1], Crypto.randomBytes(256)); - }, - - kdf: function() { - var args = arguments - , callback_index = checkAsyncArguments(args, 2, "At least two arguments are needed before the call back function - the key and the Scrypt parameters object") - , that = this; - - args = processKDFArguments(args); - - if (callback_index === undefined) { // promise - return new Promise(function(resolve, reject) { - - // Get some async salt - Crypto.randomBytes(256, function(err, salt) { - if (err) reject(err); - else { - scryptNative.kdf(args[0], args[1], salt, function(err, kdfResult) { - if (err) { - reject(err); - } else { - resolve(kdfResult); - } - }); - } - }); - }); - } else { // Normal async with callback - Crypto.randomBytes(256, function(err, salt) { - // Normal async with callback - if (err) // Crypto.randomBytes err - args[2](err); // call callback with error - else - scryptNative.kdf(args[0], args[1], salt, args[2]); - }); - } - }, - - verifyKdfSync: function() { - var args = processVerifyArguments(arguments); - return scryptNative.verifySync(args[0], args[1]); - }, - - verifyKdf: function() { - var args = arguments - , callback_index = checkAsyncArguments(args, 2, "At least two arguments are needed before the callback function - the KDF and the key"); - - if (callback_index === undefined) { - // Promise - return new Promise(function(resolve, reject) { - args = processVerifyArguments(args); - scryptNative.verify(args[0], args[1], function(err, match) { - if (err) { - reject(err); - } else { - resolve(match); - } - }); - }) - } else { - // Normal async with callback - args = processVerifyArguments(args); - scryptNative.verify(args[0], args[1], args[2]); - } - }, - - hashSync: function() { - var args = processHashArguments(arguments); - return scryptNative.hashSync(args[0], args[1], args[2], args[3]); - }, - - hash: function() { - var args = arguments - , callback_index = checkAsyncArguments(args, 4, "At least four arguments are needed before the callback - the key to hash, the scrypt params object, the output length of the hash and the salt"); - - args = processHashArguments(args); - - if (callback_index === undefined) { - //Promise - return new Promise(function(resolve, reject) { - scryptNative.hash(args[0], args[1], args[2], args[3], function(err, hash) { - if (err) { - reject(err); - } else { - resolve(hash); - } - }); - }); - } else { - // Normal async with callback - scryptNative.hash(args[0], args[1], args[2], args[3], args[4]); - } - } -}; - -module.exports = scrypt; diff --git a/node_modules/scrypt/node-scrypt-preinstall.js b/node_modules/scrypt/node-scrypt-preinstall.js deleted file mode 100644 index 857bc04..0000000 --- a/node_modules/scrypt/node-scrypt-preinstall.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -var OS = require("os") - , path = require('path').dirname(require.main.filename) - , exec = require('child_process').exec - , puts = function(error, stdout, stderr) { if (error) console.log("Error: " + error);}; - -// Regenerate config if not a windows platform -// if windows, use the default config.h -if (OS.platform() !== "win32") { - exec("make clean", {"cwd": path + "/scrypt/scrypt-1.2.0"}); - exec("./configure", {cwd: path + "/scrypt/scrypt-1.2.0"}, puts); -} diff --git a/node_modules/scrypt/package.json b/node_modules/scrypt/package.json deleted file mode 100644 index 2b03817..0000000 --- a/node_modules/scrypt/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "scrypt@^6.0.2", - "/Users/jbaylina/git/MVP/node_modules/scrypt.js" - ] - ], - "_from": "scrypt@>=6.0.2 <7.0.0", - "_id": "scrypt@6.0.3", - "_inCache": true, - "_installable": true, - "_location": "/scrypt", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/scrypt-6.0.3.tgz_1462128108810_0.8990948260761797" - }, - "_npmUser": { - "email": "barry.steyn@gmail.com", - "name": "baz" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "scrypt", - "raw": "scrypt@^6.0.2", - "rawSpec": "^6.0.2", - "scope": null, - "spec": ">=6.0.2 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/scrypt.js" - ], - "_resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "_shasum": "04e014a5682b53fa50c2d5cce167d719c06d870d", - "_shrinkwrap": null, - "_spec": "scrypt@^6.0.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/scrypt.js", - "author": { - "email": "barry.steyn@gmail.com", - "name": "Barry Steyn", - "url": "http://doctrina.org" - }, - "bugs": { - "url": "https://github.com/barrysteyn/node-scrypt/issues" - }, - "dependencies": { - "nan": "^2.0.8" - }, - "description": "The scrypt crypto library for NodeJS", - "devDependencies": { - "chai": "3.0.0", - "chai-as-promised": "^5.1.0", - "mocha": "2.2.5" - }, - "directories": {}, - "dist": { - "shasum": "04e014a5682b53fa50c2d5cce167d719c06d870d", - "tarball": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz" - }, - "engines": { - "node": ">= 0.10" - }, - "gitHead": "68e269832a6504ec53d412130f9b1e3b45ee8d8e", - "homepage": "https://github.com/barrysteyn/node-scrypt", - "keywords": [ - "scrypt", - "password", - "auth", - "authentication", - "encryption", - "crypto", - "secret", - "key", - "secret key", - "hash", - "verify" - ], - "license": "zlib", - "licenses": [ - { - "type": "MIT" - } - ], - "maintainers": [ - { - "email": "barry.steyn@gmail.com", - "name": "baz" - } - ], - "name": "scrypt", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/barrysteyn/node-scrypt.git" - }, - "scripts": { - "install": "node-gyp rebuild", - "preinstall": "node node-scrypt-preinstall.js", - "test": "mocha tests/scrypt-tests.js" - }, - "version": "6.0.3" -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/.deps/scrypt-main.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/.deps/scrypt-main.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/.deps/scrypt-main.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/FORMAT b/node_modules/scrypt/scrypt/scrypt-1.2.0/FORMAT deleted file mode 100644 index ce8c3ee..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/FORMAT +++ /dev/null @@ -1,18 +0,0 @@ -scrypt encrypted data format ----------------------------- - -offset length -0 6 "scrypt" -6 1 scrypt data file version number (== 0) -7 1 log2(N) (must be between 1 and 63 inclusive) -8 4 r (big-endian integer; must satisfy r * p < 2^30) -12 4 p (big-endian integer; must satisfy r * p < 2^30) -16 32 salt -48 16 first 16 bytes of SHA256(bytes 0 .. 47) -64 32 HMAC-SHA256(bytes 0 .. 63) -96 X data xor AES256-CTR key stream generated with nonce == 0 -96+X 32 HMAC-SHA256(bytes 0 .. 96 + (X - 1)) - -AES256-CTR is computed with a 256-bit AES key key_enc, and HMAC-SHA256 is -computed with a 256-bit key key_hmac, where - scrypt(password, salt, N, r, p, 64) == [key_enc][key_hmac] diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/Makefile b/node_modules/scrypt/scrypt/scrypt-1.2.0/Makefile deleted file mode 100644 index 6521184..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/Makefile +++ /dev/null @@ -1,1318 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/scrypt -pkgincludedir = $(includedir)/scrypt -pkglibdir = $(libdir)/scrypt -pkglibexecdir = $(libexecdir)/scrypt -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -bin_PROGRAMS = scrypt$(EXEEXT) -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/scrypt-version \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ - $(am__configure_deps) $(am__DIST_COMMON) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LIBRARIES = $(noinst_LIBRARIES) -AR = ar -ARFLAGS = cru -AM_V_AR = $(am__v_AR_$(V)) -am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY)) -am__v_AR_0 = @echo " AR " $@; -am__v_AR_1 = -libcperciva_aesni_a_AR = $(AR) $(ARFLAGS) -libcperciva_aesni_a_LIBADD = -am__dirstamp = $(am__leading_dot)dirstamp -am_libcperciva_aesni_a_OBJECTS = libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.$(OBJEXT) -libcperciva_aesni_a_OBJECTS = $(am_libcperciva_aesni_a_OBJECTS) -libscrypt_sse2_a_AR = $(AR) $(ARFLAGS) -libscrypt_sse2_a_LIBADD = -am_libscrypt_sse2_a_OBJECTS = \ - lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.$(OBJEXT) -libscrypt_sse2_a_OBJECTS = $(am_libscrypt_sse2_a_OBJECTS) -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -PROGRAMS = $(bin_PROGRAMS) -am_scrypt_OBJECTS = scrypt-main.$(OBJEXT) \ - libcperciva/alg/scrypt-sha256.$(OBJEXT) \ - libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.$(OBJEXT) \ - libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.$(OBJEXT) \ - libcperciva/crypto/scrypt-crypto_aes.$(OBJEXT) \ - libcperciva/crypto/scrypt-crypto_aesctr.$(OBJEXT) \ - libcperciva/crypto/scrypt-crypto_entropy.$(OBJEXT) \ - libcperciva/util/scrypt-entropy.$(OBJEXT) \ - libcperciva/util/scrypt-insecure_memzero.$(OBJEXT) \ - libcperciva/util/scrypt-readpass.$(OBJEXT) \ - libcperciva/util/scrypt-warnp.$(OBJEXT) \ - lib/crypto/scrypt-crypto_scrypt.$(OBJEXT) \ - lib/crypto/scrypt-crypto_scrypt_smix.$(OBJEXT) \ - lib/scryptenc/scrypt-scryptenc.$(OBJEXT) \ - lib/scryptenc/scrypt-scryptenc_cpuperf.$(OBJEXT) \ - lib/util/scrypt-memlimit.$(OBJEXT) -scrypt_OBJECTS = $(am_scrypt_OBJECTS) -scrypt_DEPENDENCIES = libcperciva_aesni.a libscrypt_sse2.a -scrypt_LINK = $(CCLD) $(scrypt_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -depcomp = $(SHELL) $(top_srcdir)/config.aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libcperciva_aesni_a_SOURCES) $(libscrypt_sse2_a_SOURCES) \ - $(scrypt_SOURCES) -DIST_SOURCES = $(libcperciva_aesni_a_SOURCES) \ - $(libscrypt_sse2_a_SOURCES) $(scrypt_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -man1dir = $(mandir)/man1 -NROFF = nroff -MANS = $(dist_man_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -AM_RECURSIVE_TARGETS = cscope -am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ - $(srcdir)/config.h.in $(top_srcdir)/config.aux/compile \ - $(top_srcdir)/config.aux/depcomp \ - $(top_srcdir)/config.aux/install-sh \ - $(top_srcdir)/config.aux/missing config.aux/compile \ - config.aux/depcomp config.aux/install-sh config.aux/missing -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -DIST_TARGETS = dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = ${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing aclocal-1.15 -AMTAR = $${TAR-tar} -AM_DEFAULT_VERBOSITY = 1 -AUTOCONF = ${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing autoconf -AUTOHEADER = ${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing autoheader -AUTOMAKE = ${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing automake-1.15 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -GREP = /usr/bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LDFLAGS = -LIBOBJS = -LIBS = -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing makeinfo -MKDIR_P = config.aux/install-sh -c -d -OBJEXT = o -PACKAGE = scrypt -PACKAGE_BUGREPORT = -PACKAGE_NAME = scrypt -PACKAGE_STRING = scrypt 1.2.0 -PACKAGE_TARNAME = scrypt -PACKAGE_URL = -PACKAGE_VERSION = 1.2.0 -PATH_SEPARATOR = : -RANLIB = ranlib -SET_MAKE = -SHELL = /bin/sh -STRIP = -VERSION = 1.2.0 -abs_builddir = /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0 -abs_srcdir = /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0 -abs_top_builddir = /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0 -abs_top_srcdir = /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0 -ac_ct_CC = gcc -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -bindir = ${exec_prefix}/bin -build_alias = -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host_alias = -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = -top_builddir = . -top_srcdir = . -AUTOMAKE_OPTIONS = foreign subdir-objects -dist_man_MANS = $(scrypt_man_MANS) -scrypt_SOURCES = main.c \ - libcperciva/alg/sha256.c \ - libcperciva/cpusupport/cpusupport_x86_aesni.c \ - libcperciva/cpusupport/cpusupport_x86_sse2.c \ - libcperciva/crypto/crypto_aes.c \ - libcperciva/crypto/crypto_aesctr.c \ - libcperciva/crypto/crypto_entropy.c \ - libcperciva/util/entropy.c \ - libcperciva/util/insecure_memzero.c \ - libcperciva/util/readpass.c \ - libcperciva/util/warnp.c \ - lib/crypto/crypto_scrypt.c \ - lib/crypto/crypto_scrypt_smix.c \ - lib/scryptenc/scryptenc.c \ - lib/scryptenc/scryptenc_cpuperf.c \ - lib/util/memlimit.c \ - cpusupport-config.h - -scrypt_CFLAGS = -I $(srcdir)/libcperciva/alg \ - -I $(srcdir)/libcperciva/cpusupport \ - -I $(srcdir)/libcperciva/crypto \ - -I $(srcdir)/libcperciva/util \ - -I $(srcdir)/lib/crypto \ - -I $(srcdir)/lib/scryptenc \ - -I $(srcdir)/lib/util \ - -I . -D CPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" - -scrypt_LDADD = -lcrypto libcperciva_aesni.a libscrypt_sse2.a -scrypt_man_MANS = scrypt.1 -BUILT_SOURCES = cpusupport-config.h -CLEANFILES = cpusupport-config.h cpusupport-config.h.tmp -noinst_LIBRARIES = libcperciva_aesni.a libscrypt_sse2.a -libcperciva_aesni_a_SOURCES = libcperciva/crypto/crypto_aes_aesni.c -libcperciva_aesni_a_CFLAGS = $(scrypt_CFLAGS) \ - `. ./cpusupport-config.h; echo $${CFLAGS_X86_AESNI}` - -libscrypt_sse2_a_SOURCES = lib/crypto/crypto_scrypt_smix_sse2.c -libscrypt_sse2_a_CFLAGS = $(scrypt_CFLAGS) \ - `. ./cpusupport-config.h; echo $${CFLAGS_X86_SSE2}` - -all: $(BUILT_SOURCES) config.h - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: # $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @test -f $@ || rm -f stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: # $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 - -clean-noinstLIBRARIES: - -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libcperciva/crypto/$(am__dirstamp): - @$(MKDIR_P) libcperciva/crypto - @: > libcperciva/crypto/$(am__dirstamp) -libcperciva/crypto/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libcperciva/crypto/$(DEPDIR) - @: > libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) -libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.$(OBJEXT): \ - libcperciva/crypto/$(am__dirstamp) \ - libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) - -libcperciva_aesni.a: $(libcperciva_aesni_a_OBJECTS) $(libcperciva_aesni_a_DEPENDENCIES) $(EXTRA_libcperciva_aesni_a_DEPENDENCIES) - $(AM_V_at)-rm -f libcperciva_aesni.a - $(AM_V_AR)$(libcperciva_aesni_a_AR) libcperciva_aesni.a $(libcperciva_aesni_a_OBJECTS) $(libcperciva_aesni_a_LIBADD) - $(AM_V_at)$(RANLIB) libcperciva_aesni.a -lib/crypto/$(am__dirstamp): - @$(MKDIR_P) lib/crypto - @: > lib/crypto/$(am__dirstamp) -lib/crypto/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) lib/crypto/$(DEPDIR) - @: > lib/crypto/$(DEPDIR)/$(am__dirstamp) -lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.$(OBJEXT): \ - lib/crypto/$(am__dirstamp) \ - lib/crypto/$(DEPDIR)/$(am__dirstamp) - -libscrypt_sse2.a: $(libscrypt_sse2_a_OBJECTS) $(libscrypt_sse2_a_DEPENDENCIES) $(EXTRA_libscrypt_sse2_a_DEPENDENCIES) - $(AM_V_at)-rm -f libscrypt_sse2.a - $(AM_V_AR)$(libscrypt_sse2_a_AR) libscrypt_sse2.a $(libscrypt_sse2_a_OBJECTS) $(libscrypt_sse2_a_LIBADD) - $(AM_V_at)$(RANLIB) libscrypt_sse2.a -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) -libcperciva/alg/$(am__dirstamp): - @$(MKDIR_P) libcperciva/alg - @: > libcperciva/alg/$(am__dirstamp) -libcperciva/alg/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libcperciva/alg/$(DEPDIR) - @: > libcperciva/alg/$(DEPDIR)/$(am__dirstamp) -libcperciva/alg/scrypt-sha256.$(OBJEXT): \ - libcperciva/alg/$(am__dirstamp) \ - libcperciva/alg/$(DEPDIR)/$(am__dirstamp) -libcperciva/cpusupport/$(am__dirstamp): - @$(MKDIR_P) libcperciva/cpusupport - @: > libcperciva/cpusupport/$(am__dirstamp) -libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libcperciva/cpusupport/$(DEPDIR) - @: > libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp) -libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.$(OBJEXT): \ - libcperciva/cpusupport/$(am__dirstamp) \ - libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp) -libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.$(OBJEXT): \ - libcperciva/cpusupport/$(am__dirstamp) \ - libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp) -libcperciva/crypto/scrypt-crypto_aes.$(OBJEXT): \ - libcperciva/crypto/$(am__dirstamp) \ - libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) -libcperciva/crypto/scrypt-crypto_aesctr.$(OBJEXT): \ - libcperciva/crypto/$(am__dirstamp) \ - libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) -libcperciva/crypto/scrypt-crypto_entropy.$(OBJEXT): \ - libcperciva/crypto/$(am__dirstamp) \ - libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/$(am__dirstamp): - @$(MKDIR_P) libcperciva/util - @: > libcperciva/util/$(am__dirstamp) -libcperciva/util/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libcperciva/util/$(DEPDIR) - @: > libcperciva/util/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/scrypt-entropy.$(OBJEXT): \ - libcperciva/util/$(am__dirstamp) \ - libcperciva/util/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/scrypt-insecure_memzero.$(OBJEXT): \ - libcperciva/util/$(am__dirstamp) \ - libcperciva/util/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/scrypt-readpass.$(OBJEXT): \ - libcperciva/util/$(am__dirstamp) \ - libcperciva/util/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/scrypt-warnp.$(OBJEXT): \ - libcperciva/util/$(am__dirstamp) \ - libcperciva/util/$(DEPDIR)/$(am__dirstamp) -lib/crypto/scrypt-crypto_scrypt.$(OBJEXT): lib/crypto/$(am__dirstamp) \ - lib/crypto/$(DEPDIR)/$(am__dirstamp) -lib/crypto/scrypt-crypto_scrypt_smix.$(OBJEXT): \ - lib/crypto/$(am__dirstamp) \ - lib/crypto/$(DEPDIR)/$(am__dirstamp) -lib/scryptenc/$(am__dirstamp): - @$(MKDIR_P) lib/scryptenc - @: > lib/scryptenc/$(am__dirstamp) -lib/scryptenc/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) lib/scryptenc/$(DEPDIR) - @: > lib/scryptenc/$(DEPDIR)/$(am__dirstamp) -lib/scryptenc/scrypt-scryptenc.$(OBJEXT): \ - lib/scryptenc/$(am__dirstamp) \ - lib/scryptenc/$(DEPDIR)/$(am__dirstamp) -lib/scryptenc/scrypt-scryptenc_cpuperf.$(OBJEXT): \ - lib/scryptenc/$(am__dirstamp) \ - lib/scryptenc/$(DEPDIR)/$(am__dirstamp) -lib/util/$(am__dirstamp): - @$(MKDIR_P) lib/util - @: > lib/util/$(am__dirstamp) -lib/util/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) lib/util/$(DEPDIR) - @: > lib/util/$(DEPDIR)/$(am__dirstamp) -lib/util/scrypt-memlimit.$(OBJEXT): lib/util/$(am__dirstamp) \ - lib/util/$(DEPDIR)/$(am__dirstamp) - -scrypt$(EXEEXT): $(scrypt_OBJECTS) $(scrypt_DEPENDENCIES) $(EXTRA_scrypt_DEPENDENCIES) - @rm -f scrypt$(EXEEXT) - $(AM_V_CCLD)$(scrypt_LINK) $(scrypt_OBJECTS) $(scrypt_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -rm -f lib/crypto/*.$(OBJEXT) - -rm -f lib/scryptenc/*.$(OBJEXT) - -rm -f lib/util/*.$(OBJEXT) - -rm -f libcperciva/alg/*.$(OBJEXT) - -rm -f libcperciva/cpusupport/*.$(OBJEXT) - -rm -f libcperciva/crypto/*.$(OBJEXT) - -rm -f libcperciva/util/*.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/scrypt-main.Po -include lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po -include lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Po -include lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Po -include lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Po -include lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Po -include lib/util/$(DEPDIR)/scrypt-memlimit.Po -include libcperciva/alg/$(DEPDIR)/scrypt-sha256.Po -include libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Po -include libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Po -include libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Po -include libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Po -include libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Po -include libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Po -include libcperciva/util/$(DEPDIR)/scrypt-entropy.Po -include libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Po -include libcperciva/util/$(DEPDIR)/scrypt-readpass.Po -include libcperciva/util/$(DEPDIR)/scrypt-warnp.Po - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o: libcperciva/crypto/crypto_aes_aesni.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcperciva_aesni_a_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o -MD -MP -MF libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Tpo -c -o libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o `test -f 'libcperciva/crypto/crypto_aes_aesni.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aes_aesni.c - $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Tpo libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Po -# $(AM_V_CC)source='libcperciva/crypto/crypto_aes_aesni.c' object='libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcperciva_aesni_a_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o `test -f 'libcperciva/crypto/crypto_aes_aesni.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aes_aesni.c - -libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj: libcperciva/crypto/crypto_aes_aesni.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcperciva_aesni_a_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj -MD -MP -MF libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Tpo -c -o libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj `if test -f 'libcperciva/crypto/crypto_aes_aesni.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aes_aesni.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aes_aesni.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Tpo libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Po -# $(AM_V_CC)source='libcperciva/crypto/crypto_aes_aesni.c' object='libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcperciva_aesni_a_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj `if test -f 'libcperciva/crypto/crypto_aes_aesni.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aes_aesni.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aes_aesni.c'; fi` - -lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o: lib/crypto/crypto_scrypt_smix_sse2.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscrypt_sse2_a_CFLAGS) $(CFLAGS) -MT lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o -MD -MP -MF lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Tpo -c -o lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o `test -f 'lib/crypto/crypto_scrypt_smix_sse2.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt_smix_sse2.c - $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Tpo lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po -# $(AM_V_CC)source='lib/crypto/crypto_scrypt_smix_sse2.c' object='lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscrypt_sse2_a_CFLAGS) $(CFLAGS) -c -o lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o `test -f 'lib/crypto/crypto_scrypt_smix_sse2.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt_smix_sse2.c - -lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj: lib/crypto/crypto_scrypt_smix_sse2.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscrypt_sse2_a_CFLAGS) $(CFLAGS) -MT lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj -MD -MP -MF lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Tpo -c -o lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj `if test -f 'lib/crypto/crypto_scrypt_smix_sse2.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt_smix_sse2.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt_smix_sse2.c'; fi` - $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Tpo lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po -# $(AM_V_CC)source='lib/crypto/crypto_scrypt_smix_sse2.c' object='lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscrypt_sse2_a_CFLAGS) $(CFLAGS) -c -o lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj `if test -f 'lib/crypto/crypto_scrypt_smix_sse2.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt_smix_sse2.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt_smix_sse2.c'; fi` - -scrypt-main.o: main.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT scrypt-main.o -MD -MP -MF $(DEPDIR)/scrypt-main.Tpo -c -o scrypt-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c - $(AM_V_at)$(am__mv) $(DEPDIR)/scrypt-main.Tpo $(DEPDIR)/scrypt-main.Po -# $(AM_V_CC)source='main.c' object='scrypt-main.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o scrypt-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c - -scrypt-main.obj: main.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT scrypt-main.obj -MD -MP -MF $(DEPDIR)/scrypt-main.Tpo -c -o scrypt-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/scrypt-main.Tpo $(DEPDIR)/scrypt-main.Po -# $(AM_V_CC)source='main.c' object='scrypt-main.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o scrypt-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` - -libcperciva/alg/scrypt-sha256.o: libcperciva/alg/sha256.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/alg/scrypt-sha256.o -MD -MP -MF libcperciva/alg/$(DEPDIR)/scrypt-sha256.Tpo -c -o libcperciva/alg/scrypt-sha256.o `test -f 'libcperciva/alg/sha256.c' || echo '$(srcdir)/'`libcperciva/alg/sha256.c - $(AM_V_at)$(am__mv) libcperciva/alg/$(DEPDIR)/scrypt-sha256.Tpo libcperciva/alg/$(DEPDIR)/scrypt-sha256.Po -# $(AM_V_CC)source='libcperciva/alg/sha256.c' object='libcperciva/alg/scrypt-sha256.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/alg/scrypt-sha256.o `test -f 'libcperciva/alg/sha256.c' || echo '$(srcdir)/'`libcperciva/alg/sha256.c - -libcperciva/alg/scrypt-sha256.obj: libcperciva/alg/sha256.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/alg/scrypt-sha256.obj -MD -MP -MF libcperciva/alg/$(DEPDIR)/scrypt-sha256.Tpo -c -o libcperciva/alg/scrypt-sha256.obj `if test -f 'libcperciva/alg/sha256.c'; then $(CYGPATH_W) 'libcperciva/alg/sha256.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/alg/sha256.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/alg/$(DEPDIR)/scrypt-sha256.Tpo libcperciva/alg/$(DEPDIR)/scrypt-sha256.Po -# $(AM_V_CC)source='libcperciva/alg/sha256.c' object='libcperciva/alg/scrypt-sha256.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/alg/scrypt-sha256.obj `if test -f 'libcperciva/alg/sha256.c'; then $(CYGPATH_W) 'libcperciva/alg/sha256.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/alg/sha256.c'; fi` - -libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o: libcperciva/cpusupport/cpusupport_x86_aesni.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o -MD -MP -MF libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Tpo -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o `test -f 'libcperciva/cpusupport/cpusupport_x86_aesni.c' || echo '$(srcdir)/'`libcperciva/cpusupport/cpusupport_x86_aesni.c - $(AM_V_at)$(am__mv) libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Tpo libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Po -# $(AM_V_CC)source='libcperciva/cpusupport/cpusupport_x86_aesni.c' object='libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o `test -f 'libcperciva/cpusupport/cpusupport_x86_aesni.c' || echo '$(srcdir)/'`libcperciva/cpusupport/cpusupport_x86_aesni.c - -libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj: libcperciva/cpusupport/cpusupport_x86_aesni.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj -MD -MP -MF libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Tpo -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj `if test -f 'libcperciva/cpusupport/cpusupport_x86_aesni.c'; then $(CYGPATH_W) 'libcperciva/cpusupport/cpusupport_x86_aesni.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/cpusupport/cpusupport_x86_aesni.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Tpo libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Po -# $(AM_V_CC)source='libcperciva/cpusupport/cpusupport_x86_aesni.c' object='libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj `if test -f 'libcperciva/cpusupport/cpusupport_x86_aesni.c'; then $(CYGPATH_W) 'libcperciva/cpusupport/cpusupport_x86_aesni.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/cpusupport/cpusupport_x86_aesni.c'; fi` - -libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o: libcperciva/cpusupport/cpusupport_x86_sse2.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o -MD -MP -MF libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Tpo -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o `test -f 'libcperciva/cpusupport/cpusupport_x86_sse2.c' || echo '$(srcdir)/'`libcperciva/cpusupport/cpusupport_x86_sse2.c - $(AM_V_at)$(am__mv) libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Tpo libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Po -# $(AM_V_CC)source='libcperciva/cpusupport/cpusupport_x86_sse2.c' object='libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o `test -f 'libcperciva/cpusupport/cpusupport_x86_sse2.c' || echo '$(srcdir)/'`libcperciva/cpusupport/cpusupport_x86_sse2.c - -libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj: libcperciva/cpusupport/cpusupport_x86_sse2.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj -MD -MP -MF libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Tpo -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj `if test -f 'libcperciva/cpusupport/cpusupport_x86_sse2.c'; then $(CYGPATH_W) 'libcperciva/cpusupport/cpusupport_x86_sse2.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/cpusupport/cpusupport_x86_sse2.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Tpo libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Po -# $(AM_V_CC)source='libcperciva/cpusupport/cpusupport_x86_sse2.c' object='libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj `if test -f 'libcperciva/cpusupport/cpusupport_x86_sse2.c'; then $(CYGPATH_W) 'libcperciva/cpusupport/cpusupport_x86_sse2.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/cpusupport/cpusupport_x86_sse2.c'; fi` - -libcperciva/crypto/scrypt-crypto_aes.o: libcperciva/crypto/crypto_aes.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_aes.o -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Tpo -c -o libcperciva/crypto/scrypt-crypto_aes.o `test -f 'libcperciva/crypto/crypto_aes.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aes.c - $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Po -# $(AM_V_CC)source='libcperciva/crypto/crypto_aes.c' object='libcperciva/crypto/scrypt-crypto_aes.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_aes.o `test -f 'libcperciva/crypto/crypto_aes.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aes.c - -libcperciva/crypto/scrypt-crypto_aes.obj: libcperciva/crypto/crypto_aes.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_aes.obj -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Tpo -c -o libcperciva/crypto/scrypt-crypto_aes.obj `if test -f 'libcperciva/crypto/crypto_aes.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aes.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aes.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Po -# $(AM_V_CC)source='libcperciva/crypto/crypto_aes.c' object='libcperciva/crypto/scrypt-crypto_aes.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_aes.obj `if test -f 'libcperciva/crypto/crypto_aes.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aes.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aes.c'; fi` - -libcperciva/crypto/scrypt-crypto_aesctr.o: libcperciva/crypto/crypto_aesctr.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_aesctr.o -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Tpo -c -o libcperciva/crypto/scrypt-crypto_aesctr.o `test -f 'libcperciva/crypto/crypto_aesctr.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aesctr.c - $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Po -# $(AM_V_CC)source='libcperciva/crypto/crypto_aesctr.c' object='libcperciva/crypto/scrypt-crypto_aesctr.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_aesctr.o `test -f 'libcperciva/crypto/crypto_aesctr.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aesctr.c - -libcperciva/crypto/scrypt-crypto_aesctr.obj: libcperciva/crypto/crypto_aesctr.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_aesctr.obj -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Tpo -c -o libcperciva/crypto/scrypt-crypto_aesctr.obj `if test -f 'libcperciva/crypto/crypto_aesctr.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aesctr.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aesctr.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Po -# $(AM_V_CC)source='libcperciva/crypto/crypto_aesctr.c' object='libcperciva/crypto/scrypt-crypto_aesctr.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_aesctr.obj `if test -f 'libcperciva/crypto/crypto_aesctr.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aesctr.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aesctr.c'; fi` - -libcperciva/crypto/scrypt-crypto_entropy.o: libcperciva/crypto/crypto_entropy.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_entropy.o -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Tpo -c -o libcperciva/crypto/scrypt-crypto_entropy.o `test -f 'libcperciva/crypto/crypto_entropy.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_entropy.c - $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Po -# $(AM_V_CC)source='libcperciva/crypto/crypto_entropy.c' object='libcperciva/crypto/scrypt-crypto_entropy.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_entropy.o `test -f 'libcperciva/crypto/crypto_entropy.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_entropy.c - -libcperciva/crypto/scrypt-crypto_entropy.obj: libcperciva/crypto/crypto_entropy.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_entropy.obj -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Tpo -c -o libcperciva/crypto/scrypt-crypto_entropy.obj `if test -f 'libcperciva/crypto/crypto_entropy.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_entropy.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_entropy.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Po -# $(AM_V_CC)source='libcperciva/crypto/crypto_entropy.c' object='libcperciva/crypto/scrypt-crypto_entropy.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_entropy.obj `if test -f 'libcperciva/crypto/crypto_entropy.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_entropy.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_entropy.c'; fi` - -libcperciva/util/scrypt-entropy.o: libcperciva/util/entropy.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-entropy.o -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-entropy.Tpo -c -o libcperciva/util/scrypt-entropy.o `test -f 'libcperciva/util/entropy.c' || echo '$(srcdir)/'`libcperciva/util/entropy.c - $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-entropy.Tpo libcperciva/util/$(DEPDIR)/scrypt-entropy.Po -# $(AM_V_CC)source='libcperciva/util/entropy.c' object='libcperciva/util/scrypt-entropy.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-entropy.o `test -f 'libcperciva/util/entropy.c' || echo '$(srcdir)/'`libcperciva/util/entropy.c - -libcperciva/util/scrypt-entropy.obj: libcperciva/util/entropy.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-entropy.obj -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-entropy.Tpo -c -o libcperciva/util/scrypt-entropy.obj `if test -f 'libcperciva/util/entropy.c'; then $(CYGPATH_W) 'libcperciva/util/entropy.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/entropy.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-entropy.Tpo libcperciva/util/$(DEPDIR)/scrypt-entropy.Po -# $(AM_V_CC)source='libcperciva/util/entropy.c' object='libcperciva/util/scrypt-entropy.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-entropy.obj `if test -f 'libcperciva/util/entropy.c'; then $(CYGPATH_W) 'libcperciva/util/entropy.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/entropy.c'; fi` - -libcperciva/util/scrypt-insecure_memzero.o: libcperciva/util/insecure_memzero.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-insecure_memzero.o -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Tpo -c -o libcperciva/util/scrypt-insecure_memzero.o `test -f 'libcperciva/util/insecure_memzero.c' || echo '$(srcdir)/'`libcperciva/util/insecure_memzero.c - $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Tpo libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Po -# $(AM_V_CC)source='libcperciva/util/insecure_memzero.c' object='libcperciva/util/scrypt-insecure_memzero.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-insecure_memzero.o `test -f 'libcperciva/util/insecure_memzero.c' || echo '$(srcdir)/'`libcperciva/util/insecure_memzero.c - -libcperciva/util/scrypt-insecure_memzero.obj: libcperciva/util/insecure_memzero.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-insecure_memzero.obj -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Tpo -c -o libcperciva/util/scrypt-insecure_memzero.obj `if test -f 'libcperciva/util/insecure_memzero.c'; then $(CYGPATH_W) 'libcperciva/util/insecure_memzero.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/insecure_memzero.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Tpo libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Po -# $(AM_V_CC)source='libcperciva/util/insecure_memzero.c' object='libcperciva/util/scrypt-insecure_memzero.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-insecure_memzero.obj `if test -f 'libcperciva/util/insecure_memzero.c'; then $(CYGPATH_W) 'libcperciva/util/insecure_memzero.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/insecure_memzero.c'; fi` - -libcperciva/util/scrypt-readpass.o: libcperciva/util/readpass.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-readpass.o -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-readpass.Tpo -c -o libcperciva/util/scrypt-readpass.o `test -f 'libcperciva/util/readpass.c' || echo '$(srcdir)/'`libcperciva/util/readpass.c - $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-readpass.Tpo libcperciva/util/$(DEPDIR)/scrypt-readpass.Po -# $(AM_V_CC)source='libcperciva/util/readpass.c' object='libcperciva/util/scrypt-readpass.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-readpass.o `test -f 'libcperciva/util/readpass.c' || echo '$(srcdir)/'`libcperciva/util/readpass.c - -libcperciva/util/scrypt-readpass.obj: libcperciva/util/readpass.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-readpass.obj -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-readpass.Tpo -c -o libcperciva/util/scrypt-readpass.obj `if test -f 'libcperciva/util/readpass.c'; then $(CYGPATH_W) 'libcperciva/util/readpass.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/readpass.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-readpass.Tpo libcperciva/util/$(DEPDIR)/scrypt-readpass.Po -# $(AM_V_CC)source='libcperciva/util/readpass.c' object='libcperciva/util/scrypt-readpass.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-readpass.obj `if test -f 'libcperciva/util/readpass.c'; then $(CYGPATH_W) 'libcperciva/util/readpass.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/readpass.c'; fi` - -libcperciva/util/scrypt-warnp.o: libcperciva/util/warnp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-warnp.o -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-warnp.Tpo -c -o libcperciva/util/scrypt-warnp.o `test -f 'libcperciva/util/warnp.c' || echo '$(srcdir)/'`libcperciva/util/warnp.c - $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-warnp.Tpo libcperciva/util/$(DEPDIR)/scrypt-warnp.Po -# $(AM_V_CC)source='libcperciva/util/warnp.c' object='libcperciva/util/scrypt-warnp.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-warnp.o `test -f 'libcperciva/util/warnp.c' || echo '$(srcdir)/'`libcperciva/util/warnp.c - -libcperciva/util/scrypt-warnp.obj: libcperciva/util/warnp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-warnp.obj -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-warnp.Tpo -c -o libcperciva/util/scrypt-warnp.obj `if test -f 'libcperciva/util/warnp.c'; then $(CYGPATH_W) 'libcperciva/util/warnp.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/warnp.c'; fi` - $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-warnp.Tpo libcperciva/util/$(DEPDIR)/scrypt-warnp.Po -# $(AM_V_CC)source='libcperciva/util/warnp.c' object='libcperciva/util/scrypt-warnp.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-warnp.obj `if test -f 'libcperciva/util/warnp.c'; then $(CYGPATH_W) 'libcperciva/util/warnp.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/warnp.c'; fi` - -lib/crypto/scrypt-crypto_scrypt.o: lib/crypto/crypto_scrypt.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/crypto/scrypt-crypto_scrypt.o -MD -MP -MF lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Tpo -c -o lib/crypto/scrypt-crypto_scrypt.o `test -f 'lib/crypto/crypto_scrypt.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt.c - $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Tpo lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Po -# $(AM_V_CC)source='lib/crypto/crypto_scrypt.c' object='lib/crypto/scrypt-crypto_scrypt.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/crypto/scrypt-crypto_scrypt.o `test -f 'lib/crypto/crypto_scrypt.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt.c - -lib/crypto/scrypt-crypto_scrypt.obj: lib/crypto/crypto_scrypt.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/crypto/scrypt-crypto_scrypt.obj -MD -MP -MF lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Tpo -c -o lib/crypto/scrypt-crypto_scrypt.obj `if test -f 'lib/crypto/crypto_scrypt.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt.c'; fi` - $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Tpo lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Po -# $(AM_V_CC)source='lib/crypto/crypto_scrypt.c' object='lib/crypto/scrypt-crypto_scrypt.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/crypto/scrypt-crypto_scrypt.obj `if test -f 'lib/crypto/crypto_scrypt.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt.c'; fi` - -lib/crypto/scrypt-crypto_scrypt_smix.o: lib/crypto/crypto_scrypt_smix.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/crypto/scrypt-crypto_scrypt_smix.o -MD -MP -MF lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Tpo -c -o lib/crypto/scrypt-crypto_scrypt_smix.o `test -f 'lib/crypto/crypto_scrypt_smix.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt_smix.c - $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Tpo lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Po -# $(AM_V_CC)source='lib/crypto/crypto_scrypt_smix.c' object='lib/crypto/scrypt-crypto_scrypt_smix.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/crypto/scrypt-crypto_scrypt_smix.o `test -f 'lib/crypto/crypto_scrypt_smix.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt_smix.c - -lib/crypto/scrypt-crypto_scrypt_smix.obj: lib/crypto/crypto_scrypt_smix.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/crypto/scrypt-crypto_scrypt_smix.obj -MD -MP -MF lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Tpo -c -o lib/crypto/scrypt-crypto_scrypt_smix.obj `if test -f 'lib/crypto/crypto_scrypt_smix.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt_smix.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt_smix.c'; fi` - $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Tpo lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Po -# $(AM_V_CC)source='lib/crypto/crypto_scrypt_smix.c' object='lib/crypto/scrypt-crypto_scrypt_smix.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/crypto/scrypt-crypto_scrypt_smix.obj `if test -f 'lib/crypto/crypto_scrypt_smix.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt_smix.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt_smix.c'; fi` - -lib/scryptenc/scrypt-scryptenc.o: lib/scryptenc/scryptenc.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/scryptenc/scrypt-scryptenc.o -MD -MP -MF lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Tpo -c -o lib/scryptenc/scrypt-scryptenc.o `test -f 'lib/scryptenc/scryptenc.c' || echo '$(srcdir)/'`lib/scryptenc/scryptenc.c - $(AM_V_at)$(am__mv) lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Tpo lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Po -# $(AM_V_CC)source='lib/scryptenc/scryptenc.c' object='lib/scryptenc/scrypt-scryptenc.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/scryptenc/scrypt-scryptenc.o `test -f 'lib/scryptenc/scryptenc.c' || echo '$(srcdir)/'`lib/scryptenc/scryptenc.c - -lib/scryptenc/scrypt-scryptenc.obj: lib/scryptenc/scryptenc.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/scryptenc/scrypt-scryptenc.obj -MD -MP -MF lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Tpo -c -o lib/scryptenc/scrypt-scryptenc.obj `if test -f 'lib/scryptenc/scryptenc.c'; then $(CYGPATH_W) 'lib/scryptenc/scryptenc.c'; else $(CYGPATH_W) '$(srcdir)/lib/scryptenc/scryptenc.c'; fi` - $(AM_V_at)$(am__mv) lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Tpo lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Po -# $(AM_V_CC)source='lib/scryptenc/scryptenc.c' object='lib/scryptenc/scrypt-scryptenc.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/scryptenc/scrypt-scryptenc.obj `if test -f 'lib/scryptenc/scryptenc.c'; then $(CYGPATH_W) 'lib/scryptenc/scryptenc.c'; else $(CYGPATH_W) '$(srcdir)/lib/scryptenc/scryptenc.c'; fi` - -lib/scryptenc/scrypt-scryptenc_cpuperf.o: lib/scryptenc/scryptenc_cpuperf.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/scryptenc/scrypt-scryptenc_cpuperf.o -MD -MP -MF lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Tpo -c -o lib/scryptenc/scrypt-scryptenc_cpuperf.o `test -f 'lib/scryptenc/scryptenc_cpuperf.c' || echo '$(srcdir)/'`lib/scryptenc/scryptenc_cpuperf.c - $(AM_V_at)$(am__mv) lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Tpo lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Po -# $(AM_V_CC)source='lib/scryptenc/scryptenc_cpuperf.c' object='lib/scryptenc/scrypt-scryptenc_cpuperf.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/scryptenc/scrypt-scryptenc_cpuperf.o `test -f 'lib/scryptenc/scryptenc_cpuperf.c' || echo '$(srcdir)/'`lib/scryptenc/scryptenc_cpuperf.c - -lib/scryptenc/scrypt-scryptenc_cpuperf.obj: lib/scryptenc/scryptenc_cpuperf.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/scryptenc/scrypt-scryptenc_cpuperf.obj -MD -MP -MF lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Tpo -c -o lib/scryptenc/scrypt-scryptenc_cpuperf.obj `if test -f 'lib/scryptenc/scryptenc_cpuperf.c'; then $(CYGPATH_W) 'lib/scryptenc/scryptenc_cpuperf.c'; else $(CYGPATH_W) '$(srcdir)/lib/scryptenc/scryptenc_cpuperf.c'; fi` - $(AM_V_at)$(am__mv) lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Tpo lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Po -# $(AM_V_CC)source='lib/scryptenc/scryptenc_cpuperf.c' object='lib/scryptenc/scrypt-scryptenc_cpuperf.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/scryptenc/scrypt-scryptenc_cpuperf.obj `if test -f 'lib/scryptenc/scryptenc_cpuperf.c'; then $(CYGPATH_W) 'lib/scryptenc/scryptenc_cpuperf.c'; else $(CYGPATH_W) '$(srcdir)/lib/scryptenc/scryptenc_cpuperf.c'; fi` - -lib/util/scrypt-memlimit.o: lib/util/memlimit.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/util/scrypt-memlimit.o -MD -MP -MF lib/util/$(DEPDIR)/scrypt-memlimit.Tpo -c -o lib/util/scrypt-memlimit.o `test -f 'lib/util/memlimit.c' || echo '$(srcdir)/'`lib/util/memlimit.c - $(AM_V_at)$(am__mv) lib/util/$(DEPDIR)/scrypt-memlimit.Tpo lib/util/$(DEPDIR)/scrypt-memlimit.Po -# $(AM_V_CC)source='lib/util/memlimit.c' object='lib/util/scrypt-memlimit.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/util/scrypt-memlimit.o `test -f 'lib/util/memlimit.c' || echo '$(srcdir)/'`lib/util/memlimit.c - -lib/util/scrypt-memlimit.obj: lib/util/memlimit.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/util/scrypt-memlimit.obj -MD -MP -MF lib/util/$(DEPDIR)/scrypt-memlimit.Tpo -c -o lib/util/scrypt-memlimit.obj `if test -f 'lib/util/memlimit.c'; then $(CYGPATH_W) 'lib/util/memlimit.c'; else $(CYGPATH_W) '$(srcdir)/lib/util/memlimit.c'; fi` - $(AM_V_at)$(am__mv) lib/util/$(DEPDIR)/scrypt-memlimit.Tpo lib/util/$(DEPDIR)/scrypt-memlimit.Po -# $(AM_V_CC)source='lib/util/memlimit.c' object='lib/util/scrypt-memlimit.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/util/scrypt-memlimit.obj `if test -f 'lib/util/memlimit.c'; then $(CYGPATH_W) 'lib/util/memlimit.c'; else $(CYGPATH_W) '$(srcdir)/lib/util/memlimit.c'; fi` -install-man1: $(dist_man_MANS) - @$(NORMAL_INSTALL) - @list1=''; \ - list2='$(dist_man_MANS)'; \ - test -n "$(man1dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.1[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build/sub \ - && ../../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=../.. --prefix="$$dc_install_base" \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) config.h -installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f lib/crypto/$(DEPDIR)/$(am__dirstamp) - -rm -f lib/crypto/$(am__dirstamp) - -rm -f lib/scryptenc/$(DEPDIR)/$(am__dirstamp) - -rm -f lib/scryptenc/$(am__dirstamp) - -rm -f lib/util/$(DEPDIR)/$(am__dirstamp) - -rm -f lib/util/$(am__dirstamp) - -rm -f libcperciva/alg/$(DEPDIR)/$(am__dirstamp) - -rm -f libcperciva/alg/$(am__dirstamp) - -rm -f libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp) - -rm -f libcperciva/cpusupport/$(am__dirstamp) - -rm -f libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) - -rm -f libcperciva/crypto/$(am__dirstamp) - -rm -f libcperciva/util/$(DEPDIR)/$(am__dirstamp) - -rm -f libcperciva/util/$(am__dirstamp) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) lib/crypto/$(DEPDIR) lib/scryptenc/$(DEPDIR) lib/util/$(DEPDIR) libcperciva/alg/$(DEPDIR) libcperciva/cpusupport/$(DEPDIR) libcperciva/crypto/$(DEPDIR) libcperciva/util/$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) lib/crypto/$(DEPDIR) lib/scryptenc/$(DEPDIR) lib/util/$(DEPDIR) libcperciva/alg/$(DEPDIR) libcperciva/cpusupport/$(DEPDIR) libcperciva/crypto/$(DEPDIR) libcperciva/util/$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: all check install install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ - clean-binPROGRAMS clean-cscope clean-generic \ - clean-noinstLIBRARIES cscope cscopelist-am ctags ctags-am dist \ - dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-man1 install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS uninstall-man \ - uninstall-man1 - -.PRECIOUS: Makefile - - -cpusupport-config.h: - ( export CC="${CC}"; export CFLAGS="${CFLAGS}"; command -p sh $(srcdir)/libcperciva/cpusupport/Build/cpusupport.sh ) > cpusupport-config.h.tmp && command -p mv cpusupport-config.h.tmp cpusupport-config.h - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/Makefile.in b/node_modules/scrypt/scrypt/scrypt-1.2.0/Makefile.in deleted file mode 100644 index 34652e7..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/Makefile.in +++ /dev/null @@ -1,1318 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -bin_PROGRAMS = scrypt$(EXEEXT) -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/scrypt-version \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ - $(am__configure_deps) $(am__DIST_COMMON) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LIBRARIES = $(noinst_LIBRARIES) -AR = ar -ARFLAGS = cru -AM_V_AR = $(am__v_AR_@AM_V@) -am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) -am__v_AR_0 = @echo " AR " $@; -am__v_AR_1 = -libcperciva_aesni_a_AR = $(AR) $(ARFLAGS) -libcperciva_aesni_a_LIBADD = -am__dirstamp = $(am__leading_dot)dirstamp -am_libcperciva_aesni_a_OBJECTS = libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.$(OBJEXT) -libcperciva_aesni_a_OBJECTS = $(am_libcperciva_aesni_a_OBJECTS) -libscrypt_sse2_a_AR = $(AR) $(ARFLAGS) -libscrypt_sse2_a_LIBADD = -am_libscrypt_sse2_a_OBJECTS = \ - lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.$(OBJEXT) -libscrypt_sse2_a_OBJECTS = $(am_libscrypt_sse2_a_OBJECTS) -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -PROGRAMS = $(bin_PROGRAMS) -am_scrypt_OBJECTS = scrypt-main.$(OBJEXT) \ - libcperciva/alg/scrypt-sha256.$(OBJEXT) \ - libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.$(OBJEXT) \ - libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.$(OBJEXT) \ - libcperciva/crypto/scrypt-crypto_aes.$(OBJEXT) \ - libcperciva/crypto/scrypt-crypto_aesctr.$(OBJEXT) \ - libcperciva/crypto/scrypt-crypto_entropy.$(OBJEXT) \ - libcperciva/util/scrypt-entropy.$(OBJEXT) \ - libcperciva/util/scrypt-insecure_memzero.$(OBJEXT) \ - libcperciva/util/scrypt-readpass.$(OBJEXT) \ - libcperciva/util/scrypt-warnp.$(OBJEXT) \ - lib/crypto/scrypt-crypto_scrypt.$(OBJEXT) \ - lib/crypto/scrypt-crypto_scrypt_smix.$(OBJEXT) \ - lib/scryptenc/scrypt-scryptenc.$(OBJEXT) \ - lib/scryptenc/scrypt-scryptenc_cpuperf.$(OBJEXT) \ - lib/util/scrypt-memlimit.$(OBJEXT) -scrypt_OBJECTS = $(am_scrypt_OBJECTS) -scrypt_DEPENDENCIES = libcperciva_aesni.a libscrypt_sse2.a -scrypt_LINK = $(CCLD) $(scrypt_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/config.aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libcperciva_aesni_a_SOURCES) $(libscrypt_sse2_a_SOURCES) \ - $(scrypt_SOURCES) -DIST_SOURCES = $(libcperciva_aesni_a_SOURCES) \ - $(libscrypt_sse2_a_SOURCES) $(scrypt_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -man1dir = $(mandir)/man1 -NROFF = nroff -MANS = $(dist_man_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -AM_RECURSIVE_TARGETS = cscope -am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ - $(srcdir)/config.h.in $(top_srcdir)/config.aux/compile \ - $(top_srcdir)/config.aux/depcomp \ - $(top_srcdir)/config.aux/install-sh \ - $(top_srcdir)/config.aux/missing config.aux/compile \ - config.aux/depcomp config.aux/install-sh config.aux/missing -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -DIST_TARGETS = dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build_alias = @build_alias@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host_alias = @host_alias@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign subdir-objects -dist_man_MANS = $(scrypt_man_MANS) -scrypt_SOURCES = main.c \ - libcperciva/alg/sha256.c \ - libcperciva/cpusupport/cpusupport_x86_aesni.c \ - libcperciva/cpusupport/cpusupport_x86_sse2.c \ - libcperciva/crypto/crypto_aes.c \ - libcperciva/crypto/crypto_aesctr.c \ - libcperciva/crypto/crypto_entropy.c \ - libcperciva/util/entropy.c \ - libcperciva/util/insecure_memzero.c \ - libcperciva/util/readpass.c \ - libcperciva/util/warnp.c \ - lib/crypto/crypto_scrypt.c \ - lib/crypto/crypto_scrypt_smix.c \ - lib/scryptenc/scryptenc.c \ - lib/scryptenc/scryptenc_cpuperf.c \ - lib/util/memlimit.c \ - cpusupport-config.h - -scrypt_CFLAGS = -I $(srcdir)/libcperciva/alg \ - -I $(srcdir)/libcperciva/cpusupport \ - -I $(srcdir)/libcperciva/crypto \ - -I $(srcdir)/libcperciva/util \ - -I $(srcdir)/lib/crypto \ - -I $(srcdir)/lib/scryptenc \ - -I $(srcdir)/lib/util \ - -I . -D CPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" - -scrypt_LDADD = -lcrypto libcperciva_aesni.a libscrypt_sse2.a -scrypt_man_MANS = scrypt.1 -BUILT_SOURCES = cpusupport-config.h -CLEANFILES = cpusupport-config.h cpusupport-config.h.tmp -noinst_LIBRARIES = libcperciva_aesni.a libscrypt_sse2.a -libcperciva_aesni_a_SOURCES = libcperciva/crypto/crypto_aes_aesni.c -libcperciva_aesni_a_CFLAGS = $(scrypt_CFLAGS) \ - `. ./cpusupport-config.h; echo $${CFLAGS_X86_AESNI}` - -libscrypt_sse2_a_SOURCES = lib/crypto/crypto_scrypt_smix_sse2.c -libscrypt_sse2_a_CFLAGS = $(scrypt_CFLAGS) \ - `. ./cpusupport-config.h; echo $${CFLAGS_X86_SSE2}` - -all: $(BUILT_SOURCES) config.h - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @test -f $@ || rm -f stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 - -clean-noinstLIBRARIES: - -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libcperciva/crypto/$(am__dirstamp): - @$(MKDIR_P) libcperciva/crypto - @: > libcperciva/crypto/$(am__dirstamp) -libcperciva/crypto/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libcperciva/crypto/$(DEPDIR) - @: > libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) -libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.$(OBJEXT): \ - libcperciva/crypto/$(am__dirstamp) \ - libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) - -libcperciva_aesni.a: $(libcperciva_aesni_a_OBJECTS) $(libcperciva_aesni_a_DEPENDENCIES) $(EXTRA_libcperciva_aesni_a_DEPENDENCIES) - $(AM_V_at)-rm -f libcperciva_aesni.a - $(AM_V_AR)$(libcperciva_aesni_a_AR) libcperciva_aesni.a $(libcperciva_aesni_a_OBJECTS) $(libcperciva_aesni_a_LIBADD) - $(AM_V_at)$(RANLIB) libcperciva_aesni.a -lib/crypto/$(am__dirstamp): - @$(MKDIR_P) lib/crypto - @: > lib/crypto/$(am__dirstamp) -lib/crypto/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) lib/crypto/$(DEPDIR) - @: > lib/crypto/$(DEPDIR)/$(am__dirstamp) -lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.$(OBJEXT): \ - lib/crypto/$(am__dirstamp) \ - lib/crypto/$(DEPDIR)/$(am__dirstamp) - -libscrypt_sse2.a: $(libscrypt_sse2_a_OBJECTS) $(libscrypt_sse2_a_DEPENDENCIES) $(EXTRA_libscrypt_sse2_a_DEPENDENCIES) - $(AM_V_at)-rm -f libscrypt_sse2.a - $(AM_V_AR)$(libscrypt_sse2_a_AR) libscrypt_sse2.a $(libscrypt_sse2_a_OBJECTS) $(libscrypt_sse2_a_LIBADD) - $(AM_V_at)$(RANLIB) libscrypt_sse2.a -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) -libcperciva/alg/$(am__dirstamp): - @$(MKDIR_P) libcperciva/alg - @: > libcperciva/alg/$(am__dirstamp) -libcperciva/alg/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libcperciva/alg/$(DEPDIR) - @: > libcperciva/alg/$(DEPDIR)/$(am__dirstamp) -libcperciva/alg/scrypt-sha256.$(OBJEXT): \ - libcperciva/alg/$(am__dirstamp) \ - libcperciva/alg/$(DEPDIR)/$(am__dirstamp) -libcperciva/cpusupport/$(am__dirstamp): - @$(MKDIR_P) libcperciva/cpusupport - @: > libcperciva/cpusupport/$(am__dirstamp) -libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libcperciva/cpusupport/$(DEPDIR) - @: > libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp) -libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.$(OBJEXT): \ - libcperciva/cpusupport/$(am__dirstamp) \ - libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp) -libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.$(OBJEXT): \ - libcperciva/cpusupport/$(am__dirstamp) \ - libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp) -libcperciva/crypto/scrypt-crypto_aes.$(OBJEXT): \ - libcperciva/crypto/$(am__dirstamp) \ - libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) -libcperciva/crypto/scrypt-crypto_aesctr.$(OBJEXT): \ - libcperciva/crypto/$(am__dirstamp) \ - libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) -libcperciva/crypto/scrypt-crypto_entropy.$(OBJEXT): \ - libcperciva/crypto/$(am__dirstamp) \ - libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/$(am__dirstamp): - @$(MKDIR_P) libcperciva/util - @: > libcperciva/util/$(am__dirstamp) -libcperciva/util/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libcperciva/util/$(DEPDIR) - @: > libcperciva/util/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/scrypt-entropy.$(OBJEXT): \ - libcperciva/util/$(am__dirstamp) \ - libcperciva/util/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/scrypt-insecure_memzero.$(OBJEXT): \ - libcperciva/util/$(am__dirstamp) \ - libcperciva/util/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/scrypt-readpass.$(OBJEXT): \ - libcperciva/util/$(am__dirstamp) \ - libcperciva/util/$(DEPDIR)/$(am__dirstamp) -libcperciva/util/scrypt-warnp.$(OBJEXT): \ - libcperciva/util/$(am__dirstamp) \ - libcperciva/util/$(DEPDIR)/$(am__dirstamp) -lib/crypto/scrypt-crypto_scrypt.$(OBJEXT): lib/crypto/$(am__dirstamp) \ - lib/crypto/$(DEPDIR)/$(am__dirstamp) -lib/crypto/scrypt-crypto_scrypt_smix.$(OBJEXT): \ - lib/crypto/$(am__dirstamp) \ - lib/crypto/$(DEPDIR)/$(am__dirstamp) -lib/scryptenc/$(am__dirstamp): - @$(MKDIR_P) lib/scryptenc - @: > lib/scryptenc/$(am__dirstamp) -lib/scryptenc/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) lib/scryptenc/$(DEPDIR) - @: > lib/scryptenc/$(DEPDIR)/$(am__dirstamp) -lib/scryptenc/scrypt-scryptenc.$(OBJEXT): \ - lib/scryptenc/$(am__dirstamp) \ - lib/scryptenc/$(DEPDIR)/$(am__dirstamp) -lib/scryptenc/scrypt-scryptenc_cpuperf.$(OBJEXT): \ - lib/scryptenc/$(am__dirstamp) \ - lib/scryptenc/$(DEPDIR)/$(am__dirstamp) -lib/util/$(am__dirstamp): - @$(MKDIR_P) lib/util - @: > lib/util/$(am__dirstamp) -lib/util/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) lib/util/$(DEPDIR) - @: > lib/util/$(DEPDIR)/$(am__dirstamp) -lib/util/scrypt-memlimit.$(OBJEXT): lib/util/$(am__dirstamp) \ - lib/util/$(DEPDIR)/$(am__dirstamp) - -scrypt$(EXEEXT): $(scrypt_OBJECTS) $(scrypt_DEPENDENCIES) $(EXTRA_scrypt_DEPENDENCIES) - @rm -f scrypt$(EXEEXT) - $(AM_V_CCLD)$(scrypt_LINK) $(scrypt_OBJECTS) $(scrypt_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -rm -f lib/crypto/*.$(OBJEXT) - -rm -f lib/scryptenc/*.$(OBJEXT) - -rm -f lib/util/*.$(OBJEXT) - -rm -f libcperciva/alg/*.$(OBJEXT) - -rm -f libcperciva/cpusupport/*.$(OBJEXT) - -rm -f libcperciva/crypto/*.$(OBJEXT) - -rm -f libcperciva/util/*.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scrypt-main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/util/$(DEPDIR)/scrypt-memlimit.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/alg/$(DEPDIR)/scrypt-sha256.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/util/$(DEPDIR)/scrypt-entropy.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/util/$(DEPDIR)/scrypt-readpass.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libcperciva/util/$(DEPDIR)/scrypt-warnp.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o: libcperciva/crypto/crypto_aes_aesni.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcperciva_aesni_a_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o -MD -MP -MF libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Tpo -c -o libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o `test -f 'libcperciva/crypto/crypto_aes_aesni.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aes_aesni.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Tpo libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/crypto/crypto_aes_aesni.c' object='libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcperciva_aesni_a_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.o `test -f 'libcperciva/crypto/crypto_aes_aesni.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aes_aesni.c - -libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj: libcperciva/crypto/crypto_aes_aesni.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcperciva_aesni_a_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj -MD -MP -MF libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Tpo -c -o libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj `if test -f 'libcperciva/crypto/crypto_aes_aesni.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aes_aesni.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aes_aesni.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Tpo libcperciva/crypto/$(DEPDIR)/libcperciva_aesni_a-crypto_aes_aesni.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/crypto/crypto_aes_aesni.c' object='libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcperciva_aesni_a_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/libcperciva_aesni_a-crypto_aes_aesni.obj `if test -f 'libcperciva/crypto/crypto_aes_aesni.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aes_aesni.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aes_aesni.c'; fi` - -lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o: lib/crypto/crypto_scrypt_smix_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscrypt_sse2_a_CFLAGS) $(CFLAGS) -MT lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o -MD -MP -MF lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Tpo -c -o lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o `test -f 'lib/crypto/crypto_scrypt_smix_sse2.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt_smix_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Tpo lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto/crypto_scrypt_smix_sse2.c' object='lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscrypt_sse2_a_CFLAGS) $(CFLAGS) -c -o lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.o `test -f 'lib/crypto/crypto_scrypt_smix_sse2.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt_smix_sse2.c - -lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj: lib/crypto/crypto_scrypt_smix_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscrypt_sse2_a_CFLAGS) $(CFLAGS) -MT lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj -MD -MP -MF lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Tpo -c -o lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj `if test -f 'lib/crypto/crypto_scrypt_smix_sse2.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt_smix_sse2.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt_smix_sse2.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Tpo lib/crypto/$(DEPDIR)/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto/crypto_scrypt_smix_sse2.c' object='lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscrypt_sse2_a_CFLAGS) $(CFLAGS) -c -o lib/crypto/libscrypt_sse2_a-crypto_scrypt_smix_sse2.obj `if test -f 'lib/crypto/crypto_scrypt_smix_sse2.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt_smix_sse2.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt_smix_sse2.c'; fi` - -scrypt-main.o: main.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT scrypt-main.o -MD -MP -MF $(DEPDIR)/scrypt-main.Tpo -c -o scrypt-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/scrypt-main.Tpo $(DEPDIR)/scrypt-main.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='scrypt-main.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o scrypt-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c - -scrypt-main.obj: main.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT scrypt-main.obj -MD -MP -MF $(DEPDIR)/scrypt-main.Tpo -c -o scrypt-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/scrypt-main.Tpo $(DEPDIR)/scrypt-main.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='scrypt-main.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o scrypt-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` - -libcperciva/alg/scrypt-sha256.o: libcperciva/alg/sha256.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/alg/scrypt-sha256.o -MD -MP -MF libcperciva/alg/$(DEPDIR)/scrypt-sha256.Tpo -c -o libcperciva/alg/scrypt-sha256.o `test -f 'libcperciva/alg/sha256.c' || echo '$(srcdir)/'`libcperciva/alg/sha256.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/alg/$(DEPDIR)/scrypt-sha256.Tpo libcperciva/alg/$(DEPDIR)/scrypt-sha256.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/alg/sha256.c' object='libcperciva/alg/scrypt-sha256.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/alg/scrypt-sha256.o `test -f 'libcperciva/alg/sha256.c' || echo '$(srcdir)/'`libcperciva/alg/sha256.c - -libcperciva/alg/scrypt-sha256.obj: libcperciva/alg/sha256.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/alg/scrypt-sha256.obj -MD -MP -MF libcperciva/alg/$(DEPDIR)/scrypt-sha256.Tpo -c -o libcperciva/alg/scrypt-sha256.obj `if test -f 'libcperciva/alg/sha256.c'; then $(CYGPATH_W) 'libcperciva/alg/sha256.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/alg/sha256.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/alg/$(DEPDIR)/scrypt-sha256.Tpo libcperciva/alg/$(DEPDIR)/scrypt-sha256.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/alg/sha256.c' object='libcperciva/alg/scrypt-sha256.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/alg/scrypt-sha256.obj `if test -f 'libcperciva/alg/sha256.c'; then $(CYGPATH_W) 'libcperciva/alg/sha256.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/alg/sha256.c'; fi` - -libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o: libcperciva/cpusupport/cpusupport_x86_aesni.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o -MD -MP -MF libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Tpo -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o `test -f 'libcperciva/cpusupport/cpusupport_x86_aesni.c' || echo '$(srcdir)/'`libcperciva/cpusupport/cpusupport_x86_aesni.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Tpo libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/cpusupport/cpusupport_x86_aesni.c' object='libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.o `test -f 'libcperciva/cpusupport/cpusupport_x86_aesni.c' || echo '$(srcdir)/'`libcperciva/cpusupport/cpusupport_x86_aesni.c - -libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj: libcperciva/cpusupport/cpusupport_x86_aesni.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj -MD -MP -MF libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Tpo -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj `if test -f 'libcperciva/cpusupport/cpusupport_x86_aesni.c'; then $(CYGPATH_W) 'libcperciva/cpusupport/cpusupport_x86_aesni.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/cpusupport/cpusupport_x86_aesni.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Tpo libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_aesni.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/cpusupport/cpusupport_x86_aesni.c' object='libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_aesni.obj `if test -f 'libcperciva/cpusupport/cpusupport_x86_aesni.c'; then $(CYGPATH_W) 'libcperciva/cpusupport/cpusupport_x86_aesni.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/cpusupport/cpusupport_x86_aesni.c'; fi` - -libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o: libcperciva/cpusupport/cpusupport_x86_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o -MD -MP -MF libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Tpo -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o `test -f 'libcperciva/cpusupport/cpusupport_x86_sse2.c' || echo '$(srcdir)/'`libcperciva/cpusupport/cpusupport_x86_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Tpo libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/cpusupport/cpusupport_x86_sse2.c' object='libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.o `test -f 'libcperciva/cpusupport/cpusupport_x86_sse2.c' || echo '$(srcdir)/'`libcperciva/cpusupport/cpusupport_x86_sse2.c - -libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj: libcperciva/cpusupport/cpusupport_x86_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj -MD -MP -MF libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Tpo -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj `if test -f 'libcperciva/cpusupport/cpusupport_x86_sse2.c'; then $(CYGPATH_W) 'libcperciva/cpusupport/cpusupport_x86_sse2.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/cpusupport/cpusupport_x86_sse2.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Tpo libcperciva/cpusupport/$(DEPDIR)/scrypt-cpusupport_x86_sse2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/cpusupport/cpusupport_x86_sse2.c' object='libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/cpusupport/scrypt-cpusupport_x86_sse2.obj `if test -f 'libcperciva/cpusupport/cpusupport_x86_sse2.c'; then $(CYGPATH_W) 'libcperciva/cpusupport/cpusupport_x86_sse2.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/cpusupport/cpusupport_x86_sse2.c'; fi` - -libcperciva/crypto/scrypt-crypto_aes.o: libcperciva/crypto/crypto_aes.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_aes.o -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Tpo -c -o libcperciva/crypto/scrypt-crypto_aes.o `test -f 'libcperciva/crypto/crypto_aes.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aes.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/crypto/crypto_aes.c' object='libcperciva/crypto/scrypt-crypto_aes.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_aes.o `test -f 'libcperciva/crypto/crypto_aes.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aes.c - -libcperciva/crypto/scrypt-crypto_aes.obj: libcperciva/crypto/crypto_aes.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_aes.obj -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Tpo -c -o libcperciva/crypto/scrypt-crypto_aes.obj `if test -f 'libcperciva/crypto/crypto_aes.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aes.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aes.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aes.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/crypto/crypto_aes.c' object='libcperciva/crypto/scrypt-crypto_aes.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_aes.obj `if test -f 'libcperciva/crypto/crypto_aes.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aes.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aes.c'; fi` - -libcperciva/crypto/scrypt-crypto_aesctr.o: libcperciva/crypto/crypto_aesctr.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_aesctr.o -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Tpo -c -o libcperciva/crypto/scrypt-crypto_aesctr.o `test -f 'libcperciva/crypto/crypto_aesctr.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aesctr.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/crypto/crypto_aesctr.c' object='libcperciva/crypto/scrypt-crypto_aesctr.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_aesctr.o `test -f 'libcperciva/crypto/crypto_aesctr.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_aesctr.c - -libcperciva/crypto/scrypt-crypto_aesctr.obj: libcperciva/crypto/crypto_aesctr.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_aesctr.obj -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Tpo -c -o libcperciva/crypto/scrypt-crypto_aesctr.obj `if test -f 'libcperciva/crypto/crypto_aesctr.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aesctr.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aesctr.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_aesctr.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/crypto/crypto_aesctr.c' object='libcperciva/crypto/scrypt-crypto_aesctr.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_aesctr.obj `if test -f 'libcperciva/crypto/crypto_aesctr.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_aesctr.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_aesctr.c'; fi` - -libcperciva/crypto/scrypt-crypto_entropy.o: libcperciva/crypto/crypto_entropy.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_entropy.o -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Tpo -c -o libcperciva/crypto/scrypt-crypto_entropy.o `test -f 'libcperciva/crypto/crypto_entropy.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_entropy.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/crypto/crypto_entropy.c' object='libcperciva/crypto/scrypt-crypto_entropy.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_entropy.o `test -f 'libcperciva/crypto/crypto_entropy.c' || echo '$(srcdir)/'`libcperciva/crypto/crypto_entropy.c - -libcperciva/crypto/scrypt-crypto_entropy.obj: libcperciva/crypto/crypto_entropy.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/crypto/scrypt-crypto_entropy.obj -MD -MP -MF libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Tpo -c -o libcperciva/crypto/scrypt-crypto_entropy.obj `if test -f 'libcperciva/crypto/crypto_entropy.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_entropy.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_entropy.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Tpo libcperciva/crypto/$(DEPDIR)/scrypt-crypto_entropy.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/crypto/crypto_entropy.c' object='libcperciva/crypto/scrypt-crypto_entropy.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/crypto/scrypt-crypto_entropy.obj `if test -f 'libcperciva/crypto/crypto_entropy.c'; then $(CYGPATH_W) 'libcperciva/crypto/crypto_entropy.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/crypto/crypto_entropy.c'; fi` - -libcperciva/util/scrypt-entropy.o: libcperciva/util/entropy.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-entropy.o -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-entropy.Tpo -c -o libcperciva/util/scrypt-entropy.o `test -f 'libcperciva/util/entropy.c' || echo '$(srcdir)/'`libcperciva/util/entropy.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-entropy.Tpo libcperciva/util/$(DEPDIR)/scrypt-entropy.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/util/entropy.c' object='libcperciva/util/scrypt-entropy.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-entropy.o `test -f 'libcperciva/util/entropy.c' || echo '$(srcdir)/'`libcperciva/util/entropy.c - -libcperciva/util/scrypt-entropy.obj: libcperciva/util/entropy.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-entropy.obj -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-entropy.Tpo -c -o libcperciva/util/scrypt-entropy.obj `if test -f 'libcperciva/util/entropy.c'; then $(CYGPATH_W) 'libcperciva/util/entropy.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/entropy.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-entropy.Tpo libcperciva/util/$(DEPDIR)/scrypt-entropy.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/util/entropy.c' object='libcperciva/util/scrypt-entropy.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-entropy.obj `if test -f 'libcperciva/util/entropy.c'; then $(CYGPATH_W) 'libcperciva/util/entropy.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/entropy.c'; fi` - -libcperciva/util/scrypt-insecure_memzero.o: libcperciva/util/insecure_memzero.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-insecure_memzero.o -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Tpo -c -o libcperciva/util/scrypt-insecure_memzero.o `test -f 'libcperciva/util/insecure_memzero.c' || echo '$(srcdir)/'`libcperciva/util/insecure_memzero.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Tpo libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/util/insecure_memzero.c' object='libcperciva/util/scrypt-insecure_memzero.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-insecure_memzero.o `test -f 'libcperciva/util/insecure_memzero.c' || echo '$(srcdir)/'`libcperciva/util/insecure_memzero.c - -libcperciva/util/scrypt-insecure_memzero.obj: libcperciva/util/insecure_memzero.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-insecure_memzero.obj -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Tpo -c -o libcperciva/util/scrypt-insecure_memzero.obj `if test -f 'libcperciva/util/insecure_memzero.c'; then $(CYGPATH_W) 'libcperciva/util/insecure_memzero.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/insecure_memzero.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Tpo libcperciva/util/$(DEPDIR)/scrypt-insecure_memzero.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/util/insecure_memzero.c' object='libcperciva/util/scrypt-insecure_memzero.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-insecure_memzero.obj `if test -f 'libcperciva/util/insecure_memzero.c'; then $(CYGPATH_W) 'libcperciva/util/insecure_memzero.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/insecure_memzero.c'; fi` - -libcperciva/util/scrypt-readpass.o: libcperciva/util/readpass.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-readpass.o -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-readpass.Tpo -c -o libcperciva/util/scrypt-readpass.o `test -f 'libcperciva/util/readpass.c' || echo '$(srcdir)/'`libcperciva/util/readpass.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-readpass.Tpo libcperciva/util/$(DEPDIR)/scrypt-readpass.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/util/readpass.c' object='libcperciva/util/scrypt-readpass.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-readpass.o `test -f 'libcperciva/util/readpass.c' || echo '$(srcdir)/'`libcperciva/util/readpass.c - -libcperciva/util/scrypt-readpass.obj: libcperciva/util/readpass.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-readpass.obj -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-readpass.Tpo -c -o libcperciva/util/scrypt-readpass.obj `if test -f 'libcperciva/util/readpass.c'; then $(CYGPATH_W) 'libcperciva/util/readpass.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/readpass.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-readpass.Tpo libcperciva/util/$(DEPDIR)/scrypt-readpass.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/util/readpass.c' object='libcperciva/util/scrypt-readpass.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-readpass.obj `if test -f 'libcperciva/util/readpass.c'; then $(CYGPATH_W) 'libcperciva/util/readpass.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/readpass.c'; fi` - -libcperciva/util/scrypt-warnp.o: libcperciva/util/warnp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-warnp.o -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-warnp.Tpo -c -o libcperciva/util/scrypt-warnp.o `test -f 'libcperciva/util/warnp.c' || echo '$(srcdir)/'`libcperciva/util/warnp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-warnp.Tpo libcperciva/util/$(DEPDIR)/scrypt-warnp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/util/warnp.c' object='libcperciva/util/scrypt-warnp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-warnp.o `test -f 'libcperciva/util/warnp.c' || echo '$(srcdir)/'`libcperciva/util/warnp.c - -libcperciva/util/scrypt-warnp.obj: libcperciva/util/warnp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT libcperciva/util/scrypt-warnp.obj -MD -MP -MF libcperciva/util/$(DEPDIR)/scrypt-warnp.Tpo -c -o libcperciva/util/scrypt-warnp.obj `if test -f 'libcperciva/util/warnp.c'; then $(CYGPATH_W) 'libcperciva/util/warnp.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/warnp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libcperciva/util/$(DEPDIR)/scrypt-warnp.Tpo libcperciva/util/$(DEPDIR)/scrypt-warnp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcperciva/util/warnp.c' object='libcperciva/util/scrypt-warnp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o libcperciva/util/scrypt-warnp.obj `if test -f 'libcperciva/util/warnp.c'; then $(CYGPATH_W) 'libcperciva/util/warnp.c'; else $(CYGPATH_W) '$(srcdir)/libcperciva/util/warnp.c'; fi` - -lib/crypto/scrypt-crypto_scrypt.o: lib/crypto/crypto_scrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/crypto/scrypt-crypto_scrypt.o -MD -MP -MF lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Tpo -c -o lib/crypto/scrypt-crypto_scrypt.o `test -f 'lib/crypto/crypto_scrypt.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Tpo lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto/crypto_scrypt.c' object='lib/crypto/scrypt-crypto_scrypt.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/crypto/scrypt-crypto_scrypt.o `test -f 'lib/crypto/crypto_scrypt.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt.c - -lib/crypto/scrypt-crypto_scrypt.obj: lib/crypto/crypto_scrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/crypto/scrypt-crypto_scrypt.obj -MD -MP -MF lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Tpo -c -o lib/crypto/scrypt-crypto_scrypt.obj `if test -f 'lib/crypto/crypto_scrypt.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Tpo lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto/crypto_scrypt.c' object='lib/crypto/scrypt-crypto_scrypt.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/crypto/scrypt-crypto_scrypt.obj `if test -f 'lib/crypto/crypto_scrypt.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt.c'; fi` - -lib/crypto/scrypt-crypto_scrypt_smix.o: lib/crypto/crypto_scrypt_smix.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/crypto/scrypt-crypto_scrypt_smix.o -MD -MP -MF lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Tpo -c -o lib/crypto/scrypt-crypto_scrypt_smix.o `test -f 'lib/crypto/crypto_scrypt_smix.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt_smix.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Tpo lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto/crypto_scrypt_smix.c' object='lib/crypto/scrypt-crypto_scrypt_smix.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/crypto/scrypt-crypto_scrypt_smix.o `test -f 'lib/crypto/crypto_scrypt_smix.c' || echo '$(srcdir)/'`lib/crypto/crypto_scrypt_smix.c - -lib/crypto/scrypt-crypto_scrypt_smix.obj: lib/crypto/crypto_scrypt_smix.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/crypto/scrypt-crypto_scrypt_smix.obj -MD -MP -MF lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Tpo -c -o lib/crypto/scrypt-crypto_scrypt_smix.obj `if test -f 'lib/crypto/crypto_scrypt_smix.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt_smix.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt_smix.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Tpo lib/crypto/$(DEPDIR)/scrypt-crypto_scrypt_smix.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto/crypto_scrypt_smix.c' object='lib/crypto/scrypt-crypto_scrypt_smix.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/crypto/scrypt-crypto_scrypt_smix.obj `if test -f 'lib/crypto/crypto_scrypt_smix.c'; then $(CYGPATH_W) 'lib/crypto/crypto_scrypt_smix.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto/crypto_scrypt_smix.c'; fi` - -lib/scryptenc/scrypt-scryptenc.o: lib/scryptenc/scryptenc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/scryptenc/scrypt-scryptenc.o -MD -MP -MF lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Tpo -c -o lib/scryptenc/scrypt-scryptenc.o `test -f 'lib/scryptenc/scryptenc.c' || echo '$(srcdir)/'`lib/scryptenc/scryptenc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Tpo lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/scryptenc/scryptenc.c' object='lib/scryptenc/scrypt-scryptenc.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/scryptenc/scrypt-scryptenc.o `test -f 'lib/scryptenc/scryptenc.c' || echo '$(srcdir)/'`lib/scryptenc/scryptenc.c - -lib/scryptenc/scrypt-scryptenc.obj: lib/scryptenc/scryptenc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/scryptenc/scrypt-scryptenc.obj -MD -MP -MF lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Tpo -c -o lib/scryptenc/scrypt-scryptenc.obj `if test -f 'lib/scryptenc/scryptenc.c'; then $(CYGPATH_W) 'lib/scryptenc/scryptenc.c'; else $(CYGPATH_W) '$(srcdir)/lib/scryptenc/scryptenc.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Tpo lib/scryptenc/$(DEPDIR)/scrypt-scryptenc.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/scryptenc/scryptenc.c' object='lib/scryptenc/scrypt-scryptenc.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/scryptenc/scrypt-scryptenc.obj `if test -f 'lib/scryptenc/scryptenc.c'; then $(CYGPATH_W) 'lib/scryptenc/scryptenc.c'; else $(CYGPATH_W) '$(srcdir)/lib/scryptenc/scryptenc.c'; fi` - -lib/scryptenc/scrypt-scryptenc_cpuperf.o: lib/scryptenc/scryptenc_cpuperf.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/scryptenc/scrypt-scryptenc_cpuperf.o -MD -MP -MF lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Tpo -c -o lib/scryptenc/scrypt-scryptenc_cpuperf.o `test -f 'lib/scryptenc/scryptenc_cpuperf.c' || echo '$(srcdir)/'`lib/scryptenc/scryptenc_cpuperf.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Tpo lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/scryptenc/scryptenc_cpuperf.c' object='lib/scryptenc/scrypt-scryptenc_cpuperf.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/scryptenc/scrypt-scryptenc_cpuperf.o `test -f 'lib/scryptenc/scryptenc_cpuperf.c' || echo '$(srcdir)/'`lib/scryptenc/scryptenc_cpuperf.c - -lib/scryptenc/scrypt-scryptenc_cpuperf.obj: lib/scryptenc/scryptenc_cpuperf.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/scryptenc/scrypt-scryptenc_cpuperf.obj -MD -MP -MF lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Tpo -c -o lib/scryptenc/scrypt-scryptenc_cpuperf.obj `if test -f 'lib/scryptenc/scryptenc_cpuperf.c'; then $(CYGPATH_W) 'lib/scryptenc/scryptenc_cpuperf.c'; else $(CYGPATH_W) '$(srcdir)/lib/scryptenc/scryptenc_cpuperf.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Tpo lib/scryptenc/$(DEPDIR)/scrypt-scryptenc_cpuperf.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/scryptenc/scryptenc_cpuperf.c' object='lib/scryptenc/scrypt-scryptenc_cpuperf.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/scryptenc/scrypt-scryptenc_cpuperf.obj `if test -f 'lib/scryptenc/scryptenc_cpuperf.c'; then $(CYGPATH_W) 'lib/scryptenc/scryptenc_cpuperf.c'; else $(CYGPATH_W) '$(srcdir)/lib/scryptenc/scryptenc_cpuperf.c'; fi` - -lib/util/scrypt-memlimit.o: lib/util/memlimit.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/util/scrypt-memlimit.o -MD -MP -MF lib/util/$(DEPDIR)/scrypt-memlimit.Tpo -c -o lib/util/scrypt-memlimit.o `test -f 'lib/util/memlimit.c' || echo '$(srcdir)/'`lib/util/memlimit.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/util/$(DEPDIR)/scrypt-memlimit.Tpo lib/util/$(DEPDIR)/scrypt-memlimit.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/util/memlimit.c' object='lib/util/scrypt-memlimit.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/util/scrypt-memlimit.o `test -f 'lib/util/memlimit.c' || echo '$(srcdir)/'`lib/util/memlimit.c - -lib/util/scrypt-memlimit.obj: lib/util/memlimit.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -MT lib/util/scrypt-memlimit.obj -MD -MP -MF lib/util/$(DEPDIR)/scrypt-memlimit.Tpo -c -o lib/util/scrypt-memlimit.obj `if test -f 'lib/util/memlimit.c'; then $(CYGPATH_W) 'lib/util/memlimit.c'; else $(CYGPATH_W) '$(srcdir)/lib/util/memlimit.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/util/$(DEPDIR)/scrypt-memlimit.Tpo lib/util/$(DEPDIR)/scrypt-memlimit.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/util/memlimit.c' object='lib/util/scrypt-memlimit.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scrypt_CFLAGS) $(CFLAGS) -c -o lib/util/scrypt-memlimit.obj `if test -f 'lib/util/memlimit.c'; then $(CYGPATH_W) 'lib/util/memlimit.c'; else $(CYGPATH_W) '$(srcdir)/lib/util/memlimit.c'; fi` -install-man1: $(dist_man_MANS) - @$(NORMAL_INSTALL) - @list1=''; \ - list2='$(dist_man_MANS)'; \ - test -n "$(man1dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.1[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build/sub \ - && ../../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=../.. --prefix="$$dc_install_base" \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) config.h -installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f lib/crypto/$(DEPDIR)/$(am__dirstamp) - -rm -f lib/crypto/$(am__dirstamp) - -rm -f lib/scryptenc/$(DEPDIR)/$(am__dirstamp) - -rm -f lib/scryptenc/$(am__dirstamp) - -rm -f lib/util/$(DEPDIR)/$(am__dirstamp) - -rm -f lib/util/$(am__dirstamp) - -rm -f libcperciva/alg/$(DEPDIR)/$(am__dirstamp) - -rm -f libcperciva/alg/$(am__dirstamp) - -rm -f libcperciva/cpusupport/$(DEPDIR)/$(am__dirstamp) - -rm -f libcperciva/cpusupport/$(am__dirstamp) - -rm -f libcperciva/crypto/$(DEPDIR)/$(am__dirstamp) - -rm -f libcperciva/crypto/$(am__dirstamp) - -rm -f libcperciva/util/$(DEPDIR)/$(am__dirstamp) - -rm -f libcperciva/util/$(am__dirstamp) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) lib/crypto/$(DEPDIR) lib/scryptenc/$(DEPDIR) lib/util/$(DEPDIR) libcperciva/alg/$(DEPDIR) libcperciva/cpusupport/$(DEPDIR) libcperciva/crypto/$(DEPDIR) libcperciva/util/$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) lib/crypto/$(DEPDIR) lib/scryptenc/$(DEPDIR) lib/util/$(DEPDIR) libcperciva/alg/$(DEPDIR) libcperciva/cpusupport/$(DEPDIR) libcperciva/crypto/$(DEPDIR) libcperciva/util/$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: all check install install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ - clean-binPROGRAMS clean-cscope clean-generic \ - clean-noinstLIBRARIES cscope cscopelist-am ctags ctags-am dist \ - dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-man1 install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS uninstall-man \ - uninstall-man1 - -.PRECIOUS: Makefile - - -cpusupport-config.h: - ( export CC="${CC}"; export CFLAGS="${CFLAGS}"; command -p sh $(srcdir)/libcperciva/cpusupport/Build/cpusupport.sh ) > cpusupport-config.h.tmp && command -p mv cpusupport-config.h.tmp cpusupport-config.h - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/autocrap/Makefile.am b/node_modules/scrypt/scrypt/scrypt-1.2.0/autocrap/Makefile.am deleted file mode 100644 index 556cb42..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/autocrap/Makefile.am +++ /dev/null @@ -1,47 +0,0 @@ -AUTOMAKE_OPTIONS= foreign subdir-objects - -bin_PROGRAMS= scrypt -dist_man_MANS=$(scrypt_man_MANS) - -scrypt_SOURCES= main.c \ - libcperciva/alg/sha256.c \ - libcperciva/cpusupport/cpusupport_x86_aesni.c \ - libcperciva/cpusupport/cpusupport_x86_sse2.c \ - libcperciva/crypto/crypto_aes.c \ - libcperciva/crypto/crypto_aesctr.c \ - libcperciva/crypto/crypto_entropy.c \ - libcperciva/util/entropy.c \ - libcperciva/util/insecure_memzero.c \ - libcperciva/util/readpass.c \ - libcperciva/util/warnp.c \ - lib/crypto/crypto_scrypt.c \ - lib/crypto/crypto_scrypt_smix.c \ - lib/scryptenc/scryptenc.c \ - lib/scryptenc/scryptenc_cpuperf.c \ - lib/util/memlimit.c \ - cpusupport-config.h -scrypt_CFLAGS= -I $(srcdir)/libcperciva/alg \ - -I $(srcdir)/libcperciva/cpusupport \ - -I $(srcdir)/libcperciva/crypto \ - -I $(srcdir)/libcperciva/util \ - -I $(srcdir)/lib/crypto \ - -I $(srcdir)/lib/scryptenc \ - -I $(srcdir)/lib/util \ - -I . -D CPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -scrypt_LDADD= -lcrypto libcperciva_aesni.a libscrypt_sse2.a -scrypt_man_MANS= scrypt.1 - -cpusupport-config.h: - ( export CC="${CC}"; export CFLAGS="${CFLAGS}"; command -p sh $(srcdir)/libcperciva/cpusupport/Build/cpusupport.sh ) > cpusupport-config.h.tmp && command -p mv cpusupport-config.h.tmp cpusupport-config.h -BUILT_SOURCES= cpusupport-config.h -CLEANFILES= cpusupport-config.h cpusupport-config.h.tmp - -noinst_LIBRARIES= libcperciva_aesni.a -libcperciva_aesni_a_SOURCES= libcperciva/crypto/crypto_aes_aesni.c -libcperciva_aesni_a_CFLAGS= $(scrypt_CFLAGS) \ - `. ./cpusupport-config.h; echo $${CFLAGS_X86_AESNI}` - -noinst_LIBRARIES+= libscrypt_sse2.a -libscrypt_sse2_a_SOURCES= lib/crypto/crypto_scrypt_smix_sse2.c -libscrypt_sse2_a_CFLAGS= $(scrypt_CFLAGS) \ - `. ./cpusupport-config.h; echo $${CFLAGS_X86_SSE2}` diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/autocrap/configure.ac b/node_modules/scrypt/scrypt/scrypt-1.2.0/autocrap/configure.ac deleted file mode 100644 index 24e03fd..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/autocrap/configure.ac +++ /dev/null @@ -1,42 +0,0 @@ -m4_define([SCRYPT_VERS],m4_include([scrypt-version])) -AC_INIT([scrypt],SCRYPT_VERS()) -AC_CONFIG_AUX_DIR([config.aux]) -AM_INIT_AUTOMAKE() -AC_PROG_CC -AC_PROG_RANLIB - -# Don't rebuild the configure script. I'm distributing a perfectly good one. -AM_MAINTAINER_MODE - -# Check for clock_gettime. On some systems, this is provided via librt. -AC_CHECK_LIB(rt, clock_gettime) -AC_CHECK_FUNCS([clock_gettime]) - -# Check for a linuxy sysinfo syscall; and while we're doing that, check if -# struct sysinfo is the old version (total RAM == totalmem) or the new -# version (total RAM == totalmem * mem_unit). -AC_CHECK_HEADERS([sys/sysinfo.h]) -AC_CHECK_FUNCS([sysinfo]) -AC_CHECK_TYPES([struct sysinfo], [], [], [[#include ]]) -AC_CHECK_MEMBERS([struct sysinfo.totalram, struct sysinfo.mem_unit], [], [], - [[#include ]]) - -# Check if we have , since some systems require it for sysctl -# to work. -AC_CHECK_HEADERS([sys/param.h]) - -# Check for . If it exists and it defines HW_USERMEM -# and/or HW_MEMSIZE, we'll try using those as memory limits. -AC_CHECK_HEADERS([sys/sysctl.h]) - -# Check for posix_memalign -AC_CHECK_FUNCS([posix_memalign]) - -# Check for mmap so we can work around its absence on Minix -AC_CHECK_FUNCS([mmap]) - -AC_SYS_LARGEFILE - -AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/compile b/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/compile deleted file mode 100755 index a85b723..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/compile +++ /dev/null @@ -1,347 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand '-c -o'. - -scriptversion=2012-10-14.11; # UTC - -# Copyright (C) 1999-2014 Free Software Foundation, Inc. -# Written by Tom Tromey . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' - -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent tools from complaining about whitespace usage. -IFS=" "" $nl" - -file_conv= - -# func_file_conv build_file lazy -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. If the determined conversion -# type is listed in (the comma separated) LAZY, no conversion will -# take place. -func_file_conv () -{ - file=$1 - case $file in - / | /[!/]*) # absolute file, and not a UNC file - if test -z "$file_conv"; then - # lazily determine how to convert abs files - case `uname -s` in - MINGW*) - file_conv=mingw - ;; - CYGWIN*) - file_conv=cygwin - ;; - *) - file_conv=wine - ;; - esac - fi - case $file_conv/,$2, in - *,$file_conv,*) - ;; - mingw/*) - file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` - ;; - cygwin/*) - file=`cygpath -m "$file" || echo "$file"` - ;; - wine/*) - file=`winepath -w "$file" || echo "$file"` - ;; - esac - ;; - esac -} - -# func_cl_dashL linkdir -# Make cl look for libraries in LINKDIR -func_cl_dashL () -{ - func_file_conv "$1" - if test -z "$lib_path"; then - lib_path=$file - else - lib_path="$lib_path;$file" - fi - linker_opts="$linker_opts -LIBPATH:$file" -} - -# func_cl_dashl library -# Do a library search-path lookup for cl -func_cl_dashl () -{ - lib=$1 - found=no - save_IFS=$IFS - IFS=';' - for dir in $lib_path $LIB - do - IFS=$save_IFS - if $shared && test -f "$dir/$lib.dll.lib"; then - found=yes - lib=$dir/$lib.dll.lib - break - fi - if test -f "$dir/$lib.lib"; then - found=yes - lib=$dir/$lib.lib - break - fi - if test -f "$dir/lib$lib.a"; then - found=yes - lib=$dir/lib$lib.a - break - fi - done - IFS=$save_IFS - - if test "$found" != yes; then - lib=$lib.lib - fi -} - -# func_cl_wrapper cl arg... -# Adjust compile command to suit cl -func_cl_wrapper () -{ - # Assume a capable shell - lib_path= - shared=: - linker_opts= - for arg - do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - eat=1 - case $2 in - *.o | *.[oO][bB][jJ]) - func_file_conv "$2" - set x "$@" -Fo"$file" - shift - ;; - *) - func_file_conv "$2" - set x "$@" -Fe"$file" - shift - ;; - esac - ;; - -I) - eat=1 - func_file_conv "$2" mingw - set x "$@" -I"$file" - shift - ;; - -I*) - func_file_conv "${1#-I}" mingw - set x "$@" -I"$file" - shift - ;; - -l) - eat=1 - func_cl_dashl "$2" - set x "$@" "$lib" - shift - ;; - -l*) - func_cl_dashl "${1#-l}" - set x "$@" "$lib" - shift - ;; - -L) - eat=1 - func_cl_dashL "$2" - ;; - -L*) - func_cl_dashL "${1#-L}" - ;; - -static) - shared=false - ;; - -Wl,*) - arg=${1#-Wl,} - save_ifs="$IFS"; IFS=',' - for flag in $arg; do - IFS="$save_ifs" - linker_opts="$linker_opts $flag" - done - IFS="$save_ifs" - ;; - -Xlinker) - eat=1 - linker_opts="$linker_opts $2" - ;; - -*) - set x "$@" "$1" - shift - ;; - *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) - func_file_conv "$1" - set x "$@" -Tp"$file" - shift - ;; - *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) - func_file_conv "$1" mingw - set x "$@" "$file" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift - done - if test -n "$linker_opts"; then - linker_opts="-link$linker_opts" - fi - exec "$@" $linker_opts - exit 1 -} - -eat= - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand '-c -o'. -Remove '-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file 'INSTALL'. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "compile $scriptversion" - exit $? - ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) - func_cl_wrapper "$@" # Doesn't return... - ;; -esac - -ofile= -cfile= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - # So we strip '-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no '-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # '.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` - -# Create the lock directory. -# Note: use '[/\\:.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - test "$cofile" = "$ofile" || mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/depcomp b/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/depcomp deleted file mode 100755 index fc98710..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/depcomp +++ /dev/null @@ -1,791 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2013-05-30.07; # UTC - -# Copyright (C) 1999-2014 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by 'PROGRAMS ARGS'. - object Object file output by 'PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputting dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -# Get the directory component of the given path, and save it in the -# global variables '$dir'. Note that this directory component will -# be either empty or ending with a '/' character. This is deliberate. -set_dir_from () -{ - case $1 in - */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; - *) dir=;; - esac -} - -# Get the suffix-stripped basename of the given path, and save it the -# global variable '$base'. -set_base_from () -{ - base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` -} - -# If no dependency file was actually created by the compiler invocation, -# we still have to create a dummy depfile, to avoid errors with the -# Makefile "include basename.Plo" scheme. -make_dummy_depfile () -{ - echo "#dummy" > "$depfile" -} - -# Factor out some common post-processing of the generated depfile. -# Requires the auxiliary global variable '$tmpdepfile' to be set. -aix_post_process_depfile () -{ - # If the compiler actually managed to produce a dependency file, - # post-process it. - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependency.h'. - # Do two passes, one to just change these to - # $object: dependency.h - # and one to simply output - # dependency.h: - # which is needed to avoid the deleted-header problem. - { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" - sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" - } > "$depfile" - rm -f "$tmpdepfile" - else - make_dummy_depfile - fi -} - -# A tabulation character. -tab=' ' -# A newline character. -nl=' -' -# Character ranges might be problematic outside the C locale. -# These definitions help. -upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ -lower=abcdefghijklmnopqrstuvwxyz -digits=0123456789 -alpha=${upper}${lower} - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Avoid interferences from the environment. -gccflag= dashmflag= - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp -fi - -if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 -fi - -if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. - gccflag=-qmakedep=gcc,-MF - depmode=gcc -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. -## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. -## (see the conditional assignment to $gccflag above). -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). Also, it might not be -## supported by the other compilers which use the 'gcc' depmode. -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The second -e expression handles DOS-style file names with drive - # letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the "deleted header file" problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. -## Some versions of gcc put a space before the ':'. On the theory -## that the space means something, we add a space to the output as -## well. hp depmode also adds that space, but also prefixes the VPATH -## to the object. Take care to not repeat it in the output. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like '#:fec' to the end of the - # dependency line. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ - | tr "$nl" ' ' >> "$depfile" - echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" - ;; - -xlc) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts '$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - aix_post_process_depfile - ;; - -tcc) - # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 - # FIXME: That version still under development at the moment of writing. - # Make that this statement remains true also for stable, released - # versions. - # It will wrap lines (doesn't matter whether long or short) with a - # trailing '\', as in: - # - # foo.o : \ - # foo.c \ - # foo.h \ - # - # It will put a trailing '\' even on the last line, and will use leading - # spaces rather than leading tabs (at least since its commit 0394caf7 - # "Emit spaces for -MD"). - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. - # We have to change lines of the first kind to '$object: \'. - sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" - # And for each line of the second kind, we have to emit a 'dep.h:' - # dummy dependency, to avoid the deleted-header problem. - sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" - rm -f "$tmpdepfile" - ;; - -## The order of this option in the case statement is important, since the -## shell code in configure will try each of these formats in the order -## listed in this file. A plain '-MD' option would be understood by many -## compilers, so we must ensure this comes after the gcc and icc options. -pgcc) - # Portland's C compiler understands '-MD'. - # Will always output deps to 'file.d' where file is the root name of the - # source file under compilation, even if file resides in a subdirectory. - # The object file name does not affect the name of the '.d' file. - # pgcc 10.2 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\' : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - set_dir_from "$object" - # Use the source, not the object, to determine the base name, since - # that's sadly what pgcc will do too. - set_base_from "$source" - tmpdepfile=$base.d - - # For projects that build the same source file twice into different object - # files, the pgcc approach of using the *source* file root name can cause - # problems in parallel builds. Use a locking strategy to avoid stomping on - # the same $tmpdepfile. - lockdir=$base.d-lock - trap " - echo '$0: caught signal, cleaning up...' >&2 - rmdir '$lockdir' - exit 1 - " 1 2 13 15 - numtries=100 - i=$numtries - while test $i -gt 0; do - # mkdir is a portable test-and-set. - if mkdir "$lockdir" 2>/dev/null; then - # This process acquired the lock. - "$@" -MD - stat=$? - # Release the lock. - rmdir "$lockdir" - break - else - # If the lock is being held by a different process, wait - # until the winning process is done or we timeout. - while test -d "$lockdir" && test $i -gt 0; do - sleep 1 - i=`expr $i - 1` - done - fi - i=`expr $i - 1` - done - trap - 1 2 13 15 - if test $i -le 0; then - echo "$0: failed to acquire lock after $numtries attempts" >&2 - echo "$0: check lockdir '$lockdir'" >&2 - exit 1 - fi - - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" - # Add 'dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in 'foo.d' instead, so we check for that too. - # Subdirectories are respected. - set_dir_from "$object" - set_base_from "$object" - - if test "$libtool" = yes; then - # Libtool generates 2 separate objects for the 2 libraries. These - # two compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir$base.o.d # libtool 1.5 - tmpdepfile2=$dir.libs/$base.o.d # Likewise. - tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - # Same post-processing that is required for AIX mode. - aix_post_process_depfile - ;; - -msvc7) - if test "$libtool" = yes; then - showIncludes=-Wc,-showIncludes - else - showIncludes=-showIncludes - fi - "$@" $showIncludes > "$tmpdepfile" - stat=$? - grep -v '^Note: including file: ' "$tmpdepfile" - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The first sed program below extracts the file names and escapes - # backslashes for cygpath. The second sed program outputs the file - # name when reading, but also accumulates all include files in the - # hold buffer in order to output them again at the end. This only - # works with sed implementations that can handle large buffers. - sed < "$tmpdepfile" -n ' -/^Note: including file: *\(.*\)/ { - s//\1/ - s/\\/\\\\/g - p -}' | $cygpath_u | sort -u | sed -n ' -s/ /\\ /g -s/\(.*\)/'"$tab"'\1 \\/p -s/.\(.*\) \\/\1:/ -H -$ { - s/.*/'"$tab"'/ - G - p -}' >> "$depfile" - echo >> "$depfile" # make sure the fragment doesn't end with a backslash - rm -f "$tmpdepfile" - ;; - -msvc7msys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for ':' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. - "$@" $dashmflag | - sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this sed invocation - # correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - # makedepend may prepend the VPATH from the source file name to the object. - # No need to regex-escape $object, excess matching of '.' is harmless. - sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process the last invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed '1,2d' "$tmpdepfile" \ - | tr ' ' "$nl" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E \ - | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - | sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" - echo "$tab" >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/install-sh b/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/install-sh deleted file mode 100755 index 0b0fdcb..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/install-sh +++ /dev/null @@ -1,501 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2013-12-25.23; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# 'make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -tab=' ' -nl=' -' -IFS=" $tab$nl" - -# Set DOITPROG to "echo" to test this script. - -doit=${DOITPROG-} -doit_exec=${doit:-exec} - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -is_target_a_directory=possibly - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) - is_target_a_directory=always - dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; - - -T) is_target_a_directory=never;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -# We allow the use of options -d and -T together, by making -d -# take the precedence; this is for compatibility with GNU install. - -if test -n "$dir_arg"; then - if test -n "$dst_arg"; then - echo "$0: target directory not allowed when installing a directory." >&2 - exit 1 - fi -fi - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call 'install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - if test $# -gt 1 || test "$is_target_a_directory" = always; then - if test ! -d "$dst_arg"; then - echo "$0: $dst_arg: Is not a directory." >&2 - exit 1 - fi - fi -fi - -if test -z "$dir_arg"; then - do_exit='(exit $ret); exit $ret' - trap "ret=129; $do_exit" 1 - trap "ret=130; $do_exit" 2 - trap "ret=141; $do_exit" 13 - trap "ret=143; $do_exit" 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names problematic for 'test' and other utilities. - case $src in - -* | [=\(\)!]) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - dst=$dst_arg - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test "$is_target_a_directory" = never; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - dstdir=`dirname "$dst"` - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; - esac - - oIFS=$IFS - IFS=/ - set -f - set fnord $dstdir - shift - set +f - IFS=$oIFS - - prefixes= - - for d - do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - set +f && - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/missing b/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/missing deleted file mode 100755 index f62bbae..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.aux/missing +++ /dev/null @@ -1,215 +0,0 @@ -#! /bin/sh -# Common wrapper for a few potentially missing GNU programs. - -scriptversion=2013-10-28.13; # UTC - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# Originally written by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try '$0 --help' for more information" - exit 1 -fi - -case $1 in - - --is-lightweight) - # Used by our autoconf macros to check whether the available missing - # script is modern enough. - exit 0 - ;; - - --run) - # Back-compat with the calling convention used by older automake. - shift - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due -to PROGRAM being missing or too old. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - -Supported PROGRAM values: - aclocal autoconf autoheader autom4te automake makeinfo - bison yacc flex lex help2man - -Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and -'g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: unknown '$1' option" - echo 1>&2 "Try '$0 --help' for more information" - exit 1 - ;; - -esac - -# Run the given program, remember its exit status. -"$@"; st=$? - -# If it succeeded, we are done. -test $st -eq 0 && exit 0 - -# Also exit now if we it failed (or wasn't found), and '--version' was -# passed; such an option is passed most likely to detect whether the -# program is present and works. -case $2 in --version|--help) exit $st;; esac - -# Exit code 63 means version mismatch. This often happens when the user -# tries to use an ancient version of a tool on a file that requires a -# minimum version. -if test $st -eq 63; then - msg="probably too old" -elif test $st -eq 127; then - # Program was missing. - msg="missing on your system" -else - # Program was found and executed, but failed. Give up. - exit $st -fi - -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software - -program_details () -{ - case $1 in - aclocal|automake) - echo "The '$1' program is part of the GNU Automake package:" - echo "<$gnu_software_URL/automake>" - echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/autoconf>" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - autoconf|autom4te|autoheader) - echo "The '$1' program is part of the GNU Autoconf package:" - echo "<$gnu_software_URL/autoconf/>" - echo "It also requires GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - esac -} - -give_advice () -{ - # Normalize program name to check for. - normalized_program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - - printf '%s\n' "'$1' is $msg." - - configure_deps="'configure.ac' or m4 files included by 'configure.ac'" - case $normalized_program in - autoconf*) - echo "You should only need it if you modified 'configure.ac'," - echo "or m4 files included by it." - program_details 'autoconf' - ;; - autoheader*) - echo "You should only need it if you modified 'acconfig.h' or" - echo "$configure_deps." - program_details 'autoheader' - ;; - automake*) - echo "You should only need it if you modified 'Makefile.am' or" - echo "$configure_deps." - program_details 'automake' - ;; - aclocal*) - echo "You should only need it if you modified 'acinclude.m4' or" - echo "$configure_deps." - program_details 'aclocal' - ;; - autom4te*) - echo "You might have modified some maintainer files that require" - echo "the 'autom4te' program to be rebuilt." - program_details 'autom4te' - ;; - bison*|yacc*) - echo "You should only need it if you modified a '.y' file." - echo "You may want to install the GNU Bison package:" - echo "<$gnu_software_URL/bison/>" - ;; - lex*|flex*) - echo "You should only need it if you modified a '.l' file." - echo "You may want to install the Fast Lexical Analyzer package:" - echo "<$flex_URL>" - ;; - help2man*) - echo "You should only need it if you modified a dependency" \ - "of a man page." - echo "You may want to install the GNU Help2man package:" - echo "<$gnu_software_URL/help2man/>" - ;; - makeinfo*) - echo "You should only need it if you modified a '.texi' file, or" - echo "any other file indirectly affecting the aspect of the manual." - echo "You might want to install the Texinfo package:" - echo "<$gnu_software_URL/texinfo/>" - echo "The spurious makeinfo call might also be the consequence of" - echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" - echo "want to install GNU make:" - echo "<$gnu_software_URL/make/>" - ;; - *) - echo "You might have modified some files without having the proper" - echo "tools for further handling them. Check the 'README' file, it" - echo "often tells you about the needed prerequisites for installing" - echo "this package. You may also peek at any GNU archive site, in" - echo "case some other package contains this missing '$1' program." - ;; - esac -} - -give_advice "$1" | sed -e '1s/^/WARNING: /' \ - -e '2,$s/^/ /' >&2 - -# Propagate the correct exit status (expected to be 127 for a program -# not found, 63 for a program that failed due to version mismatch). -exit $st - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/config.h deleted file mode 100644 index cb0d489..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.h +++ /dev/null @@ -1,100 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the `clock_gettime' function. */ -#define HAVE_CLOCK_GETTIME 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `rt' library (-lrt). */ -/* #undef HAVE_LIBRT */ - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `mmap' function. */ -#define HAVE_MMAP 1 - -/* Define to 1 if you have the `posix_memalign' function. */ -#define HAVE_POSIX_MEMALIGN 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if the system has the type `struct sysinfo'. */ -/* #undef HAVE_STRUCT_SYSINFO */ - -/* Define to 1 if `mem_unit' is a member of `struct sysinfo'. */ -/* #undef HAVE_STRUCT_SYSINFO_MEM_UNIT */ - -/* Define to 1 if `totalram' is a member of `struct sysinfo'. */ -/* #undef HAVE_STRUCT_SYSINFO_TOTALRAM */ - -/* Define to 1 if you have the `sysinfo' function. */ -/* #undef HAVE_SYSINFO */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_PARAM_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SYSCTL_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_SYSINFO_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Name of package */ -#define PACKAGE "scrypt" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "scrypt" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "scrypt 1.2.0" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "scrypt" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "1.2.0" - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#define VERSION "1.2.0" - -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -/* #undef _FILE_OFFSET_BITS */ - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.h.in b/node_modules/scrypt/scrypt/scrypt-1.2.0/config.h.in deleted file mode 100644 index 7d9f4da..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.h.in +++ /dev/null @@ -1,99 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the `clock_gettime' function. */ -#undef HAVE_CLOCK_GETTIME - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `rt' library (-lrt). */ -#undef HAVE_LIBRT - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `mmap' function. */ -#undef HAVE_MMAP - -/* Define to 1 if you have the `posix_memalign' function. */ -#undef HAVE_POSIX_MEMALIGN - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if the system has the type `struct sysinfo'. */ -#undef HAVE_STRUCT_SYSINFO - -/* Define to 1 if `mem_unit' is a member of `struct sysinfo'. */ -#undef HAVE_STRUCT_SYSINFO_MEM_UNIT - -/* Define to 1 if `totalram' is a member of `struct sysinfo'. */ -#undef HAVE_STRUCT_SYSINFO_TOTALRAM - -/* Define to 1 if you have the `sysinfo' function. */ -#undef HAVE_SYSINFO - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_PARAM_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSCTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSINFO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION - -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.log b/node_modules/scrypt/scrypt/scrypt-1.2.0/config.log deleted file mode 100644 index 47016df..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.log +++ /dev/null @@ -1,889 +0,0 @@ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by scrypt configure 1.2.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ ./configure - -## --------- ## -## Platform. ## -## --------- ## - -hostname = MacBook-Pro-3.local -uname -m = x86_64 -uname -r = 16.0.0 -uname -s = Darwin -uname -v = Darwin Kernel Version 16.0.0: Mon Aug 29 17:56:20 PDT 2016; root:xnu-3789.1.32~3/RELEASE_X86_64 - -/usr/bin/uname -p = i386 -/bin/uname -X = unknown - -/bin/arch = unknown -/usr/bin/arch -k = unknown -/usr/convex/getsysinfo = unknown -/usr/bin/hostinfo = Mach kernel version: - Darwin Kernel Version 16.0.0: Mon Aug 29 17:56:20 PDT 2016; root:xnu-3789.1.32~3/RELEASE_X86_64 -Kernel configured for up to 8 processors. -4 processors are physically available. -8 processors are logically available. -Processor type: x86_64h (Intel x86-64h Haswell) -Processors active: 0 1 2 3 4 5 6 7 -Primary memory available: 16.00 gigabytes -Default processor set: 326 tasks, 1568 threads, 8 processors -Load average: 2.58, Mach factor: 5.40 -/bin/machine = unknown -/usr/bin/oslevel = unknown -/bin/universe = unknown - -PATH: /Users/jbaylina/n/lib/node_modules/npm/bin/node-gyp-bin -PATH: /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/node_modules/.bin -PATH: /Users/jbaylina/git/MVP/node_modules/.bin -PATH: /Users/jbaylina/n/bin -PATH: /Library/Frameworks/Python.framework/Versions/3.5/bin -PATH: /usr/local/bin -PATH: /usr/bin -PATH: /bin -PATH: /usr/sbin -PATH: /sbin -PATH: /usr/local/git/bin -PATH: /usr/local/go/bin -PATH: /Users/jbaylina/n/bin - - -## ----------- ## -## Core tests. ## -## ----------- ## - -configure:2301: checking for a BSD-compatible install -configure:2369: result: /usr/bin/install -c -configure:2380: checking whether build environment is sane -configure:2435: result: yes -configure:2586: checking for a thread-safe mkdir -p -configure:2625: result: config.aux/install-sh -c -d -configure:2632: checking for gawk -configure:2662: result: no -configure:2632: checking for mawk -configure:2662: result: no -configure:2632: checking for nawk -configure:2662: result: no -configure:2632: checking for awk -configure:2648: found /usr/bin/awk -configure:2659: result: awk -configure:2670: checking whether make sets $(MAKE) -configure:2692: result: yes -configure:2721: checking whether make supports nested variables -configure:2738: result: yes -configure:2912: checking for gcc -configure:2928: found /usr/bin/gcc -configure:2939: result: gcc -configure:3168: checking for C compiler version -configure:3177: gcc --version >&5 -Apple LLVM version 8.0.0 (clang-800.0.38) -Target: x86_64-apple-darwin16.0.0 -Thread model: posix -InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin -Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/c++/4.2.1 -configure:3188: $? = 0 -configure:3177: gcc -v >&5 -Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/c++/4.2.1 -Apple LLVM version 8.0.0 (clang-800.0.38) -Target: x86_64-apple-darwin16.0.0 -Thread model: posix -InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin -configure:3188: $? = 0 -configure:3177: gcc -V >&5 -clang: error: argument to '-V' is missing (expected 1 value) -clang: error: no input files -configure:3188: $? = 1 -configure:3177: gcc -qversion >&5 -clang: error: unknown argument: '-qversion' -clang: error: no input files -configure:3188: $? = 1 -configure:3208: checking whether the C compiler works -configure:3230: gcc conftest.c >&5 -configure:3234: $? = 0 -configure:3282: result: yes -configure:3285: checking for C compiler default output file name -configure:3287: result: a.out -configure:3293: checking for suffix of executables -configure:3300: gcc -o conftest conftest.c >&5 -configure:3304: $? = 0 -configure:3326: result: -configure:3348: checking whether we are cross compiling -configure:3356: gcc -o conftest conftest.c >&5 -configure:3360: $? = 0 -configure:3367: ./conftest -configure:3371: $? = 0 -configure:3386: result: no -configure:3391: checking for suffix of object files -configure:3413: gcc -c conftest.c >&5 -configure:3417: $? = 0 -configure:3438: result: o -configure:3442: checking whether we are using the GNU C compiler -configure:3461: gcc -c conftest.c >&5 -configure:3461: $? = 0 -configure:3470: result: yes -configure:3479: checking whether gcc accepts -g -configure:3499: gcc -c -g conftest.c >&5 -configure:3499: $? = 0 -configure:3540: result: yes -configure:3557: checking for gcc option to accept ISO C89 -configure:3620: gcc -c -g -O2 conftest.c >&5 -configure:3620: $? = 0 -configure:3633: result: none needed -configure:3658: checking whether gcc understands -c and -o together -configure:3680: gcc -c conftest.c -o conftest2.o -configure:3683: $? = 0 -configure:3680: gcc -c conftest.c -o conftest2.o -configure:3683: $? = 0 -configure:3695: result: yes -configure:3723: checking for style of include used by make -configure:3751: result: GNU -configure:3777: checking dependency style of gcc -configure:3888: result: gcc3 -configure:3946: checking for ranlib -configure:3962: found /usr/bin/ranlib -configure:3973: result: ranlib -configure:3998: checking whether to enable maintainer-specific portions of Makefiles -configure:4007: result: no -configure:4023: checking for clock_gettime in -lrt -configure:4048: gcc -o conftest -g -O2 conftest.c -lrt >&5 -ld: library not found for -lrt -clang: error: linker command failed with exit code 1 (use -v to see invocation) -configure:4048: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| /* end confdefs.h. */ -| -| /* Override any GCC internal prototype to avoid an error. -| Use char because int might match the return type of a GCC -| builtin and then its argument prototype would still apply. */ -| #ifdef __cplusplus -| extern "C" -| #endif -| char clock_gettime (); -| int -| main () -| { -| return clock_gettime (); -| ; -| return 0; -| } -configure:4057: result: no -configure:4070: checking for clock_gettime -configure:4070: gcc -o conftest -g -O2 conftest.c >&5 -configure:4070: $? = 0 -configure:4070: result: yes -configure:4088: checking how to run the C preprocessor -configure:4119: gcc -E conftest.c -configure:4119: $? = 0 -configure:4133: gcc -E conftest.c -conftest.c:12:10: fatal error: 'ac_nonexistent.h' file not found -#include - ^ -1 error generated. -configure:4133: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| /* end confdefs.h. */ -| #include -configure:4158: result: gcc -E -configure:4178: gcc -E conftest.c -configure:4178: $? = 0 -configure:4192: gcc -E conftest.c -conftest.c:12:10: fatal error: 'ac_nonexistent.h' file not found -#include - ^ -1 error generated. -configure:4192: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| /* end confdefs.h. */ -| #include -configure:4221: checking for grep that handles long lines and -e -configure:4279: result: /usr/bin/grep -configure:4284: checking for egrep -configure:4346: result: /usr/bin/grep -E -configure:4351: checking for ANSI C header files -configure:4371: gcc -c -g -O2 conftest.c >&5 -configure:4371: $? = 0 -configure:4444: gcc -o conftest -g -O2 conftest.c >&5 -configure:4444: $? = 0 -configure:4444: ./conftest -configure:4444: $? = 0 -configure:4455: result: yes -configure:4468: checking for sys/types.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4468: checking for sys/stat.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4468: checking for stdlib.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4468: checking for string.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4468: checking for memory.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4468: checking for strings.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4468: checking for inttypes.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4468: checking for stdint.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4468: checking for unistd.h -configure:4468: gcc -c -g -O2 conftest.c >&5 -configure:4468: $? = 0 -configure:4468: result: yes -configure:4482: checking sys/sysinfo.h usability -configure:4482: gcc -c -g -O2 conftest.c >&5 -conftest.c:55:10: fatal error: 'sys/sysinfo.h' file not found -#include - ^ -1 error generated. -configure:4482: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| /* end confdefs.h. */ -| #include -| #ifdef HAVE_SYS_TYPES_H -| # include -| #endif -| #ifdef HAVE_SYS_STAT_H -| # include -| #endif -| #ifdef STDC_HEADERS -| # include -| # include -| #else -| # ifdef HAVE_STDLIB_H -| # include -| # endif -| #endif -| #ifdef HAVE_STRING_H -| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H -| # include -| # endif -| # include -| #endif -| #ifdef HAVE_STRINGS_H -| # include -| #endif -| #ifdef HAVE_INTTYPES_H -| # include -| #endif -| #ifdef HAVE_STDINT_H -| # include -| #endif -| #ifdef HAVE_UNISTD_H -| # include -| #endif -| #include -configure:4482: result: no -configure:4482: checking sys/sysinfo.h presence -configure:4482: gcc -E conftest.c -conftest.c:22:10: fatal error: 'sys/sysinfo.h' file not found -#include - ^ -1 error generated. -configure:4482: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| /* end confdefs.h. */ -| #include -configure:4482: result: no -configure:4482: checking for sys/sysinfo.h -configure:4482: result: no -configure:4494: checking for sysinfo -configure:4494: gcc -o conftest -g -O2 conftest.c >&5 -Undefined symbols for architecture x86_64: - "_sysinfo", referenced from: - _main in conftest-d88522.o -ld: symbol(s) not found for architecture x86_64 -clang: error: linker command failed with exit code 1 (use -v to see invocation) -configure:4494: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| /* end confdefs.h. */ -| /* Define sysinfo to an innocuous variant, in case declares sysinfo. -| For example, HP-UX 11i declares gettimeofday. */ -| #define sysinfo innocuous_sysinfo -| -| /* System header to define __stub macros and hopefully few prototypes, -| which can conflict with char sysinfo (); below. -| Prefer to if __STDC__ is defined, since -| exists even on freestanding compilers. */ -| -| #ifdef __STDC__ -| # include -| #else -| # include -| #endif -| -| #undef sysinfo -| -| /* Override any GCC internal prototype to avoid an error. -| Use char because int might match the return type of a GCC -| builtin and then its argument prototype would still apply. */ -| #ifdef __cplusplus -| extern "C" -| #endif -| char sysinfo (); -| /* The GNU C library defines this for functions which it implements -| to always fail with ENOSYS. Some functions are actually named -| something starting with __ and the normal name is an alias. */ -| #if defined __stub_sysinfo || defined __stub___sysinfo -| choke me -| #endif -| -| int -| main () -| { -| return sysinfo (); -| ; -| return 0; -| } -configure:4494: result: no -configure:4503: checking for struct sysinfo -configure:4503: gcc -c -g -O2 conftest.c >&5 -conftest.c:22:10: fatal error: 'sys/sysinfo.h' file not found -#include - ^ -1 error generated. -configure:4503: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| /* end confdefs.h. */ -| #include -| -| int -| main () -| { -| if (sizeof (struct sysinfo)) -| return 0; -| ; -| return 0; -| } -configure:4503: result: no -configure:4514: checking for struct sysinfo.totalram -configure:4514: gcc -c -g -O2 conftest.c >&5 -conftest.c:22:10: fatal error: 'sys/sysinfo.h' file not found -#include - ^ -1 error generated. -configure:4514: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| /* end confdefs.h. */ -| #include -| -| int -| main () -| { -| static struct sysinfo ac_aggr; -| if (ac_aggr.totalram) -| return 0; -| ; -| return 0; -| } -configure:4514: gcc -c -g -O2 conftest.c >&5 -conftest.c:22:10: fatal error: 'sys/sysinfo.h' file not found -#include - ^ -1 error generated. -configure:4514: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| /* end confdefs.h. */ -| #include -| -| int -| main () -| { -| static struct sysinfo ac_aggr; -| if (sizeof ac_aggr.totalram) -| return 0; -| ; -| return 0; -| } -configure:4514: result: no -configure:4524: checking for struct sysinfo.mem_unit -configure:4524: gcc -c -g -O2 conftest.c >&5 -conftest.c:22:10: fatal error: 'sys/sysinfo.h' file not found -#include - ^ -1 error generated. -configure:4524: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| /* end confdefs.h. */ -| #include -| -| int -| main () -| { -| static struct sysinfo ac_aggr; -| if (ac_aggr.mem_unit) -| return 0; -| ; -| return 0; -| } -configure:4524: gcc -c -g -O2 conftest.c >&5 -conftest.c:22:10: fatal error: 'sys/sysinfo.h' file not found -#include - ^ -1 error generated. -configure:4524: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "scrypt" -| #define PACKAGE_TARNAME "scrypt" -| #define PACKAGE_VERSION "1.2.0" -| #define PACKAGE_STRING "scrypt 1.2.0" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "scrypt" -| #define VERSION "1.2.0" -| #define HAVE_CLOCK_GETTIME 1 -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| /* end confdefs.h. */ -| #include -| -| int -| main () -| { -| static struct sysinfo ac_aggr; -| if (sizeof ac_aggr.mem_unit) -| return 0; -| ; -| return 0; -| } -configure:4524: result: no -configure:4540: checking sys/param.h usability -configure:4540: gcc -c -g -O2 conftest.c >&5 -configure:4540: $? = 0 -configure:4540: result: yes -configure:4540: checking sys/param.h presence -configure:4540: gcc -E conftest.c -configure:4540: $? = 0 -configure:4540: result: yes -configure:4540: checking for sys/param.h -configure:4540: result: yes -configure:4555: checking sys/sysctl.h usability -configure:4555: gcc -c -g -O2 conftest.c >&5 -configure:4555: $? = 0 -configure:4555: result: yes -configure:4555: checking sys/sysctl.h presence -configure:4555: gcc -E conftest.c -configure:4555: $? = 0 -configure:4555: result: yes -configure:4555: checking for sys/sysctl.h -configure:4555: result: yes -configure:4569: checking for posix_memalign -configure:4569: gcc -o conftest -g -O2 conftest.c >&5 -configure:4569: $? = 0 -configure:4569: result: yes -configure:4582: checking for mmap -configure:4582: gcc -o conftest -g -O2 conftest.c >&5 -configure:4582: $? = 0 -configure:4582: result: yes -configure:4599: checking for special C compiler options needed for large files -configure:4644: result: no -configure:4650: checking for _FILE_OFFSET_BITS value needed for large files -configure:4675: gcc -c -g -O2 conftest.c >&5 -configure:4675: $? = 0 -configure:4707: result: no -configure:4906: checking that generated files are newer than configure -configure:4912: result: done -configure:4939: creating ./config.status - -## ---------------------- ## -## Running config.status. ## -## ---------------------- ## - -This file was extended by scrypt config.status 1.2.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = - CONFIG_HEADERS = - CONFIG_LINKS = - CONFIG_COMMANDS = - $ ./config.status - -on MacBook-Pro-3.local - -config.status:861: creating Makefile -config.status:861: creating config.h -config.status:1090: executing depfiles commands - -## ---------------- ## -## Cache variables. ## -## ---------------- ## - -ac_cv_c_compiler_gnu=yes -ac_cv_env_CC_set= -ac_cv_env_CC_value= -ac_cv_env_CFLAGS_set= -ac_cv_env_CFLAGS_value= -ac_cv_env_CPPFLAGS_set= -ac_cv_env_CPPFLAGS_value= -ac_cv_env_CPP_set= -ac_cv_env_CPP_value= -ac_cv_env_LDFLAGS_set= -ac_cv_env_LDFLAGS_value= -ac_cv_env_LIBS_set= -ac_cv_env_LIBS_value= -ac_cv_env_build_alias_set= -ac_cv_env_build_alias_value= -ac_cv_env_host_alias_set= -ac_cv_env_host_alias_value= -ac_cv_env_target_alias_set= -ac_cv_env_target_alias_value= -ac_cv_func_clock_gettime=yes -ac_cv_func_mmap=yes -ac_cv_func_posix_memalign=yes -ac_cv_func_sysinfo=no -ac_cv_header_inttypes_h=yes -ac_cv_header_memory_h=yes -ac_cv_header_stdc=yes -ac_cv_header_stdint_h=yes -ac_cv_header_stdlib_h=yes -ac_cv_header_string_h=yes -ac_cv_header_strings_h=yes -ac_cv_header_sys_param_h=yes -ac_cv_header_sys_stat_h=yes -ac_cv_header_sys_sysctl_h=yes -ac_cv_header_sys_sysinfo_h=no -ac_cv_header_sys_types_h=yes -ac_cv_header_unistd_h=yes -ac_cv_lib_rt_clock_gettime=no -ac_cv_member_struct_sysinfo_mem_unit=no -ac_cv_member_struct_sysinfo_totalram=no -ac_cv_objext=o -ac_cv_path_EGREP='/usr/bin/grep -E' -ac_cv_path_GREP=/usr/bin/grep -ac_cv_path_install='/usr/bin/install -c' -ac_cv_prog_AWK=awk -ac_cv_prog_CPP='gcc -E' -ac_cv_prog_ac_ct_CC=gcc -ac_cv_prog_ac_ct_RANLIB=ranlib -ac_cv_prog_cc_c89= -ac_cv_prog_cc_g=yes -ac_cv_prog_make_make_set=yes -ac_cv_sys_file_offset_bits=no -ac_cv_sys_largefile_CC=no -ac_cv_type_struct_sysinfo=no -am_cv_CC_dependencies_compiler_type=gcc3 -am_cv_make_support_nested_variables=yes -am_cv_prog_cc_c_o=yes - -## ----------------- ## -## Output variables. ## -## ----------------- ## - -ACLOCAL='${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing aclocal-1.15' -AMDEPBACKSLASH='\' -AMDEP_FALSE='#' -AMDEP_TRUE='' -AMTAR='$${TAR-tar}' -AM_BACKSLASH='\' -AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -AM_DEFAULT_VERBOSITY='1' -AM_V='$(V)' -AUTOCONF='${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing autoconf' -AUTOHEADER='${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing autoheader' -AUTOMAKE='${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing automake-1.15' -AWK='awk' -CC='gcc' -CCDEPMODE='depmode=gcc3' -CFLAGS='-g -O2' -CPP='gcc -E' -CPPFLAGS='' -CYGPATH_W='echo' -DEFS='-DHAVE_CONFIG_H' -DEPDIR='.deps' -ECHO_C='\c' -ECHO_N='' -ECHO_T='' -EGREP='/usr/bin/grep -E' -EXEEXT='' -GREP='/usr/bin/grep' -INSTALL_DATA='${INSTALL} -m 644' -INSTALL_PROGRAM='${INSTALL}' -INSTALL_SCRIPT='${INSTALL}' -INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' -LDFLAGS='' -LIBOBJS='' -LIBS='' -LTLIBOBJS='' -MAINT='#' -MAINTAINER_MODE_FALSE='' -MAINTAINER_MODE_TRUE='#' -MAKEINFO='${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing makeinfo' -MKDIR_P='config.aux/install-sh -c -d' -OBJEXT='o' -PACKAGE='scrypt' -PACKAGE_BUGREPORT='' -PACKAGE_NAME='scrypt' -PACKAGE_STRING='scrypt 1.2.0' -PACKAGE_TARNAME='scrypt' -PACKAGE_URL='' -PACKAGE_VERSION='1.2.0' -PATH_SEPARATOR=':' -RANLIB='ranlib' -SET_MAKE='' -SHELL='/bin/sh' -STRIP='' -VERSION='1.2.0' -ac_ct_CC='gcc' -am__EXEEXT_FALSE='' -am__EXEEXT_TRUE='#' -am__fastdepCC_FALSE='#' -am__fastdepCC_TRUE='' -am__include='include' -am__isrc='' -am__leading_dot='.' -am__nodep='_no' -am__quote='' -am__tar='$${TAR-tar} chof - "$$tardir"' -am__untar='$${TAR-tar} xf -' -bindir='${exec_prefix}/bin' -build_alias='' -datadir='${datarootdir}' -datarootdir='${prefix}/share' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -dvidir='${docdir}' -exec_prefix='${prefix}' -host_alias='' -htmldir='${docdir}' -includedir='${prefix}/include' -infodir='${datarootdir}/info' -install_sh='${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/install-sh' -libdir='${exec_prefix}/lib' -libexecdir='${exec_prefix}/libexec' -localedir='${datarootdir}/locale' -localstatedir='${prefix}/var' -mandir='${datarootdir}/man' -mkdir_p='$(MKDIR_P)' -oldincludedir='/usr/include' -pdfdir='${docdir}' -prefix='/usr/local' -program_transform_name='s,x,x,' -psdir='${docdir}' -sbindir='${exec_prefix}/sbin' -sharedstatedir='${prefix}/com' -sysconfdir='${prefix}/etc' -target_alias='' - -## ----------- ## -## confdefs.h. ## -## ----------- ## - -/* confdefs.h */ -#define PACKAGE_NAME "scrypt" -#define PACKAGE_TARNAME "scrypt" -#define PACKAGE_VERSION "1.2.0" -#define PACKAGE_STRING "scrypt 1.2.0" -#define PACKAGE_BUGREPORT "" -#define PACKAGE_URL "" -#define PACKAGE "scrypt" -#define VERSION "1.2.0" -#define HAVE_CLOCK_GETTIME 1 -#define STDC_HEADERS 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRING_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_UNISTD_H 1 -#define HAVE_SYS_PARAM_H 1 -#define HAVE_SYS_SYSCTL_H 1 -#define HAVE_POSIX_MEMALIGN 1 -#define HAVE_MMAP 1 - -configure: exit 0 diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.status b/node_modules/scrypt/scrypt/scrypt-1.2.0/config.status deleted file mode 100755 index 8ba336e..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/config.status +++ /dev/null @@ -1,1195 +0,0 @@ -#! /bin/sh -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by scrypt $as_me 1.2.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -# Files that config.status was made for. -config_files=" Makefile" -config_headers=" config.h" -config_commands=" depfiles" - -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -ac_cs_config="" -ac_cs_version="\ -scrypt config.status 1.2.0 -configured by ./configure, generated by GNU Autoconf 2.69, - with options \"$ac_cs_config\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='/Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0' -srcdir='.' -INSTALL='/usr/bin/install -c' -MKDIR_P='config.aux/install-sh -c -d' -AWK='awk' -test -n "$AWK" || AWK=awk -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -if $ac_cs_recheck; then - set X /bin/sh './configure' $ac_configure_extra_args --no-create --no-recursion - shift - $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 - CONFIG_SHELL='/bin/sh' - export CONFIG_SHELL - exec "$@" -fi - -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -# -# INIT-COMMANDS -# -AMDEP_TRUE="" ac_aux_dir="config.aux" - - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && -S["am__EXEEXT_FALSE"]="" -S["am__EXEEXT_TRUE"]="#" -S["LTLIBOBJS"]="" -S["LIBOBJS"]="" -S["EGREP"]="/usr/bin/grep -E" -S["GREP"]="/usr/bin/grep" -S["CPP"]="gcc -E" -S["MAINT"]="#" -S["MAINTAINER_MODE_FALSE"]="" -S["MAINTAINER_MODE_TRUE"]="#" -S["RANLIB"]="ranlib" -S["am__fastdepCC_FALSE"]="#" -S["am__fastdepCC_TRUE"]="" -S["CCDEPMODE"]="depmode=gcc3" -S["am__nodep"]="_no" -S["AMDEPBACKSLASH"]="\\" -S["AMDEP_FALSE"]="#" -S["AMDEP_TRUE"]="" -S["am__quote"]="" -S["am__include"]="include" -S["DEPDIR"]=".deps" -S["OBJEXT"]="o" -S["EXEEXT"]="" -S["ac_ct_CC"]="gcc" -S["CPPFLAGS"]="" -S["LDFLAGS"]="" -S["CFLAGS"]="-g -O2" -S["CC"]="gcc" -S["AM_BACKSLASH"]="\\" -S["AM_DEFAULT_VERBOSITY"]="1" -S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" -S["AM_V"]="$(V)" -S["am__untar"]="$${TAR-tar} xf -" -S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" -S["AMTAR"]="$${TAR-tar}" -S["am__leading_dot"]="." -S["SET_MAKE"]="" -S["AWK"]="awk" -S["mkdir_p"]="$(MKDIR_P)" -S["MKDIR_P"]="config.aux/install-sh -c -d" -S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" -S["STRIP"]="" -S["install_sh"]="${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/install-sh" -S["MAKEINFO"]="${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing makeinfo" -S["AUTOHEADER"]="${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing autoheader" -S["AUTOMAKE"]="${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing automake-1.15" -S["AUTOCONF"]="${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing autoconf" -S["ACLOCAL"]="${SHELL} /Users/jbaylina/git/MVP/node_modules/.staging/scrypt-a4caa518/scrypt/scrypt-1.2.0/config.aux/missing aclocal-1.15" -S["VERSION"]="1.2.0" -S["PACKAGE"]="scrypt" -S["CYGPATH_W"]="echo" -S["am__isrc"]="" -S["INSTALL_DATA"]="${INSTALL} -m 644" -S["INSTALL_SCRIPT"]="${INSTALL}" -S["INSTALL_PROGRAM"]="${INSTALL}" -S["target_alias"]="" -S["host_alias"]="" -S["build_alias"]="" -S["LIBS"]="" -S["ECHO_T"]="" -S["ECHO_N"]="" -S["ECHO_C"]="\\c" -S["DEFS"]="-DHAVE_CONFIG_H" -S["mandir"]="${datarootdir}/man" -S["localedir"]="${datarootdir}/locale" -S["libdir"]="${exec_prefix}/lib" -S["psdir"]="${docdir}" -S["pdfdir"]="${docdir}" -S["dvidir"]="${docdir}" -S["htmldir"]="${docdir}" -S["infodir"]="${datarootdir}/info" -S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" -S["oldincludedir"]="/usr/include" -S["includedir"]="${prefix}/include" -S["localstatedir"]="${prefix}/var" -S["sharedstatedir"]="${prefix}/com" -S["sysconfdir"]="${prefix}/etc" -S["datadir"]="${datarootdir}" -S["datarootdir"]="${prefix}/share" -S["libexecdir"]="${exec_prefix}/libexec" -S["sbindir"]="${exec_prefix}/sbin" -S["bindir"]="${exec_prefix}/bin" -S["program_transform_name"]="s,x,x," -S["prefix"]="/usr/local" -S["exec_prefix"]="${prefix}" -S["PACKAGE_URL"]="" -S["PACKAGE_BUGREPORT"]="" -S["PACKAGE_STRING"]="scrypt 1.2.0" -S["PACKAGE_VERSION"]="1.2.0" -S["PACKAGE_TARNAME"]="scrypt" -S["PACKAGE_NAME"]="scrypt" -S["PATH_SEPARATOR"]=":" -S["SHELL"]="/bin/sh" -_ACAWK -cat >>"$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -D["PACKAGE_NAME"]=" \"scrypt\"" -D["PACKAGE_TARNAME"]=" \"scrypt\"" -D["PACKAGE_VERSION"]=" \"1.2.0\"" -D["PACKAGE_STRING"]=" \"scrypt 1.2.0\"" -D["PACKAGE_BUGREPORT"]=" \"\"" -D["PACKAGE_URL"]=" \"\"" -D["PACKAGE"]=" \"scrypt\"" -D["VERSION"]=" \"1.2.0\"" -D["HAVE_CLOCK_GETTIME"]=" 1" -D["STDC_HEADERS"]=" 1" -D["HAVE_SYS_TYPES_H"]=" 1" -D["HAVE_SYS_STAT_H"]=" 1" -D["HAVE_STDLIB_H"]=" 1" -D["HAVE_STRING_H"]=" 1" -D["HAVE_MEMORY_H"]=" 1" -D["HAVE_STRINGS_H"]=" 1" -D["HAVE_INTTYPES_H"]=" 1" -D["HAVE_STDINT_H"]=" 1" -D["HAVE_UNISTD_H"]=" 1" -D["HAVE_SYS_PARAM_H"]=" 1" -D["HAVE_SYS_SYSCTL_H"]=" 1" -D["HAVE_POSIX_MEMALIGN"]=" 1" -D["HAVE_MMAP"]=" 1" - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { - line = $ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - ac_datarootdir_hack=' - s&@datadir@&${datarootdir}&g - s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g - s&@infodir@&${datarootdir}/info&g - s&@localedir@&${datarootdir}/locale&g - s&@mandir@&${datarootdir}/man&g - s&\${datarootdir}&${prefix}/share&g' ;; -esac -ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -} - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/configure b/node_modules/scrypt/scrypt/scrypt-1.2.0/configure deleted file mode 100755 index 94de63f..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/configure +++ /dev/null @@ -1,6254 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for scrypt 1.2.0. -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='scrypt' -PACKAGE_TARNAME='scrypt' -PACKAGE_VERSION='1.2.0' -PACKAGE_STRING='scrypt 1.2.0' -PACKAGE_BUGREPORT='' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -EGREP -GREP -CPP -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -RANLIB -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -AM_DEFAULT_V -AM_V -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -enable_dependency_tracking -enable_maintainer_mode -enable_largefile -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures scrypt 1.2.0 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/scrypt] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of scrypt 1.2.0:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --enable-maintainer-mode - enable make rules and dependencies not useful (and - sometimes confusing) to the casual installer - --disable-largefile omit support for large files - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -scrypt configure 1.2.0 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type - -# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES -# ---------------------------------------------------- -# Tries to find if the field MEMBER exists in type AGGR, after including -# INCLUDES, setting cache variable VAR accordingly. -ac_fn_c_check_member () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - eval "$4=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_member -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by scrypt $as_me 1.2.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_aux_dir= -for ac_dir in config.aux "$srcdir"/config.aux; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in config.aux \"$srcdir\"/config.aux" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -am__api_version='1.15' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='scrypt' - VERSION='1.2.0' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -mkdir_p='$(MKDIR_P)' - -# We need awk for the "check" target (and possibly the TAP driver). The -# system "awk" is bad on some platforms. -# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AMTAR='$${TAR-tar}' - - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' - - - - - - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - -# Don't rebuild the configure script. I'm distributing a perfectly good one. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - -# Check for clock_gettime. On some systems, this is provided via librt. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 -$as_echo_n "checking for clock_gettime in -lrt... " >&6; } -if ${ac_cv_lib_rt_clock_gettime+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lrt $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char clock_gettime (); -int -main () -{ -return clock_gettime (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_rt_clock_gettime=yes -else - ac_cv_lib_rt_clock_gettime=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 -$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } -if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBRT 1 -_ACEOF - - LIBS="-lrt $LIBS" - -fi - -for ac_func in clock_gettime -do : - ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" -if test "x$ac_cv_func_clock_gettime" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CLOCK_GETTIME 1 -_ACEOF - -fi -done - - -# Check for a linuxy sysinfo syscall; and while we're doing that, check if -# struct sysinfo is the old version (total RAM == totalmem) or the new -# version (total RAM == totalmem * mem_unit). -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in sys/sysinfo.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/sysinfo.h" "ac_cv_header_sys_sysinfo_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sysinfo_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SYSINFO_H 1 -_ACEOF - -fi - -done - -for ac_func in sysinfo -do : - ac_fn_c_check_func "$LINENO" "sysinfo" "ac_cv_func_sysinfo" -if test "x$ac_cv_func_sysinfo" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYSINFO 1 -_ACEOF - -fi -done - -ac_fn_c_check_type "$LINENO" "struct sysinfo" "ac_cv_type_struct_sysinfo" "#include -" -if test "x$ac_cv_type_struct_sysinfo" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SYSINFO 1 -_ACEOF - - -fi - -ac_fn_c_check_member "$LINENO" "struct sysinfo" "totalram" "ac_cv_member_struct_sysinfo_totalram" "#include -" -if test "x$ac_cv_member_struct_sysinfo_totalram" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SYSINFO_TOTALRAM 1 -_ACEOF - - -fi -ac_fn_c_check_member "$LINENO" "struct sysinfo" "mem_unit" "ac_cv_member_struct_sysinfo_mem_unit" "#include -" -if test "x$ac_cv_member_struct_sysinfo_mem_unit" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SYSINFO_MEM_UNIT 1 -_ACEOF - - -fi - - -# Check if we have , since some systems require it for sysctl -# to work. -for ac_header in sys/param.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_param_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_PARAM_H 1 -_ACEOF - -fi - -done - - -# Check for . If it exists and it defines HW_USERMEM -# and/or HW_MEMSIZE, we'll try using those as memory limits. -for ac_header in sys/sysctl.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sysctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SYSCTL_H 1 -_ACEOF - -fi - -done - - -# Check for posix_memalign -for ac_func in posix_memalign -do : - ac_fn_c_check_func "$LINENO" "posix_memalign" "ac_cv_func_posix_memalign" -if test "x$ac_cv_func_posix_memalign" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_POSIX_MEMALIGN 1 -_ACEOF - -fi -done - - -# Check for mmap so we can work around its absence on Minix -for ac_func in mmap -do : - ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MMAP 1 -_ACEOF - -fi -done - - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if ${ac_cv_sys_largefile_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF - if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_largefile_CC=' -n32'; break -fi -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if ${ac_cv_sys_file_offset_bits+:} false; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if ${ac_cv_sys_large_files+:} false; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=1; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -rf conftest* - fi - - -fi - - -ac_config_headers="$ac_config_headers config.h" - -ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by scrypt $as_me 1.2.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -scrypt config.status 1.2.0 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/hash.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/hash.c deleted file mode 100644 index 20a4b0c..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/hash.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -hash.c - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#include -#include "crypto_scrypt.h" - -// -// This is the actual key derivation function. -// It is binary safe and is exposed to this module for -// access to the underlying key derivation function of Scrypt -// -int -ScryptHashFunction(const uint8_t* key, size_t keylen, const uint8_t *salt, size_t saltlen, uint64_t N, uint32_t r, uint32_t p,uint8_t *buf, size_t buflen) { - if (crypto_scrypt(key, keylen, salt, saltlen, N, r, p, buf, buflen)) - return (3); - - return 0; //success -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/hash.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/hash.h deleted file mode 100644 index 1c5358d..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/hash.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -hash.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _KEYDERIVATION_H_ -#define _KEYDERIVATION_H_ - -int -ScryptHashFunction(const uint8_t*, size_t, const uint8_t*, size_t, uint64_t, uint32_t, uint32_t, uint8_t*, size_t); - -#endif /* !_KEYDERIVATION_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/keyderivation.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/keyderivation.c deleted file mode 100644 index f2ef379..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/keyderivation.c +++ /dev/null @@ -1,121 +0,0 @@ -/* -keyderivation.c - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#include "sha256.h" -#include "hash.h" -#include "pickparams.h" -#include "sysendian.h" -#include "salt.h" - -#include -#include - -// -// Creates a password hash. This is the actual key derivation function -// -int -KDF(const uint8_t* passwd, size_t passwdSize, uint8_t* kdf, uint32_t logN, uint32_t r, uint32_t p) { - uint64_t N=1; - uint8_t dk[64], - salt[32], - hbuf[32]; - uint8_t *key_hmac = &dk[32]; - SHA256_CTX ctx; - HMAC_SHA256_CTX hctx; - int rc; - - /* Get Some Salt */ - if ((rc = getsalt(salt, 32)) != 0) - return (rc); - - /* Generate the derived keys. */ - N <<= logN; - if (ScryptHashFunction(passwd, passwdSize, salt, 32, N, r, p, dk, 64)) - return (3); - - /* Construct the hash. */ - memcpy(kdf, "scrypt", 6); //Sticking with Colin Percival's format of putting scrypt at the beginning - kdf[6] = 0; - kdf[7] = logN; - be32enc(&kdf[8], r); - be32enc(&kdf[12], p); - memcpy(&kdf[16], salt, 32); - - /* Add hash checksum. */ - SHA256_Init(&ctx); - scrypt_SHA256_Update(&ctx, kdf, 48); - scrypt_SHA256_Final(hbuf, &ctx); - memcpy(&kdf[48], hbuf, 16); - - /* Add hash signature (used for verifying password). */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, kdf, 64); - HMAC_SHA256_Final(hbuf, &hctx); - memcpy(&kdf[64], hbuf, 32); - - return 0; //success -} - -// -// Verifies password hash (also ensures hash integrity at same time) -// -int -Verify(const uint8_t* kdf, const uint8_t* passwd, size_t passwdSize) { - uint64_t N=0; - uint32_t r=0, p=0; - uint8_t dk[64], - salt[32], - hbuf[32]; - uint8_t * key_hmac = &dk[32]; - HMAC_SHA256_CTX hctx; - SHA256_CTX ctx; - - /* Parse N, r, p, salt. */ - N = (uint64_t)1 << kdf[7]; //Remember, kdf[7] is actually LogN - r = be32dec(&kdf[8]); - p = be32dec(&kdf[12]); - memcpy(salt, &kdf[16], 32); - - /* Verify hash checksum. */ - SHA256_Init(&ctx); - scrypt_SHA256_Update(&ctx, kdf, 48); - scrypt_SHA256_Final(hbuf, &ctx); - if (memcmp(&kdf[48], hbuf, 16)) - return (7); - - /* Compute Derived Key */ - if (ScryptHashFunction(passwd, passwdSize, salt, 32, N, r, p, dk, 64)) - return (3); - - /* Check hash signature (i.e., verify password). */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, kdf, 64); - HMAC_SHA256_Final(hbuf, &hctx); - if (memcmp(hbuf, &kdf[64], 32)) - return (11); - - return (0); //Success -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/keyderivation.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/keyderivation.h deleted file mode 100644 index db07fe0..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/keyderivation.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -keyderivation.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _SCRYPTHASH_H_ -#define _SCRYPTHASH_H_ - -int -KDF(const uint8_t*, size_t, uint8_t*, uint32_t, uint32_t, uint32_t); - -int -Verify(const uint8_t*, const uint8_t*, size_t); - -#endif /* !_SCRYPTHASH_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/README b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/README deleted file mode 100644 index 3bb211e..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/README +++ /dev/null @@ -1,6 +0,0 @@ -The source code under this directory is taken from the client for the -Tarsnap online backup system (and released under the 2-clause BSD license -with permission of the author); keeping this code in sync with the Tarsnap -code is highly desirable and explains why there is some functionality -included here which is not actually used by the scrypt file encryption -utility. diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/libscrypt_sse2_a-crypto_scrypt_smix_sse2.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/scrypt-crypto_scrypt.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/scrypt-crypto_scrypt.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/scrypt-crypto_scrypt.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/scrypt-crypto_scrypt_smix.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/scrypt-crypto_scrypt_smix.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/.deps/scrypt-crypto_scrypt_smix.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt-ref.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt-ref.c deleted file mode 100644 index dca1663..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt-ref.c +++ /dev/null @@ -1,285 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#include "scrypt_platform.h" - -#include -#include -#include -#include - -#include "sha256.h" -#include "sysendian.h" - -#include "crypto_scrypt.h" - -static void blkcpy(uint8_t *, uint8_t *, size_t); -static void blkxor(uint8_t *, uint8_t *, size_t); -static void salsa20_8(uint8_t[64]); -static void blockmix_salsa8(uint8_t *, uint8_t *, size_t); -static uint64_t integerify(uint8_t *, size_t); -static void smix(uint8_t *, size_t, uint64_t, uint8_t *, uint8_t *); - -static void -blkcpy(uint8_t * dest, uint8_t * src, size_t len) -{ - size_t i; - - for (i = 0; i < len; i++) - dest[i] = src[i]; -} - -static void -blkxor(uint8_t * dest, uint8_t * src, size_t len) -{ - size_t i; - - for (i = 0; i < len; i++) - dest[i] ^= src[i]; -} - -/** - * salsa20_8(B): - * Apply the salsa20/8 core to the provided block. - */ -static void -salsa20_8(uint8_t B[64]) -{ - uint32_t B32[16]; - uint32_t x[16]; - size_t i; - - /* Convert little-endian values in. */ - for (i = 0; i < 16; i++) - B32[i] = le32dec(&B[i * 4]); - - /* Compute x = doubleround^4(B32). */ - for (i = 0; i < 16; i++) - x[i] = B32[i]; - for (i = 0; i < 8; i += 2) { -#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) - /* Operate on columns. */ - x[ 4] ^= R(x[ 0]+x[12], 7); x[ 8] ^= R(x[ 4]+x[ 0], 9); - x[12] ^= R(x[ 8]+x[ 4],13); x[ 0] ^= R(x[12]+x[ 8],18); - - x[ 9] ^= R(x[ 5]+x[ 1], 7); x[13] ^= R(x[ 9]+x[ 5], 9); - x[ 1] ^= R(x[13]+x[ 9],13); x[ 5] ^= R(x[ 1]+x[13],18); - - x[14] ^= R(x[10]+x[ 6], 7); x[ 2] ^= R(x[14]+x[10], 9); - x[ 6] ^= R(x[ 2]+x[14],13); x[10] ^= R(x[ 6]+x[ 2],18); - - x[ 3] ^= R(x[15]+x[11], 7); x[ 7] ^= R(x[ 3]+x[15], 9); - x[11] ^= R(x[ 7]+x[ 3],13); x[15] ^= R(x[11]+x[ 7],18); - - /* Operate on rows. */ - x[ 1] ^= R(x[ 0]+x[ 3], 7); x[ 2] ^= R(x[ 1]+x[ 0], 9); - x[ 3] ^= R(x[ 2]+x[ 1],13); x[ 0] ^= R(x[ 3]+x[ 2],18); - - x[ 6] ^= R(x[ 5]+x[ 4], 7); x[ 7] ^= R(x[ 6]+x[ 5], 9); - x[ 4] ^= R(x[ 7]+x[ 6],13); x[ 5] ^= R(x[ 4]+x[ 7],18); - - x[11] ^= R(x[10]+x[ 9], 7); x[ 8] ^= R(x[11]+x[10], 9); - x[ 9] ^= R(x[ 8]+x[11],13); x[10] ^= R(x[ 9]+x[ 8],18); - - x[12] ^= R(x[15]+x[14], 7); x[13] ^= R(x[12]+x[15], 9); - x[14] ^= R(x[13]+x[12],13); x[15] ^= R(x[14]+x[13],18); -#undef R - } - - /* Compute B32 = B32 + x. */ - for (i = 0; i < 16; i++) - B32[i] += x[i]; - - /* Convert little-endian values out. */ - for (i = 0; i < 16; i++) - le32enc(&B[4 * i], B32[i]); -} - -/** - * blockmix_salsa8(B, Y, r): - * Compute B = BlockMix_{salsa20/8, r}(B). The input B must be 128r bytes in - * length; the temporary space Y must also be the same size. - */ -static void -blockmix_salsa8(uint8_t * B, uint8_t * Y, size_t r) -{ - uint8_t X[64]; - size_t i; - - /* 1: X <-- B_{2r - 1} */ - blkcpy(X, &B[(2 * r - 1) * 64], 64); - - /* 2: for i = 0 to 2r - 1 do */ - for (i = 0; i < 2 * r; i++) { - /* 3: X <-- H(X \xor B_i) */ - blkxor(X, &B[i * 64], 64); - salsa20_8(X); - - /* 4: Y_i <-- X */ - blkcpy(&Y[i * 64], X, 64); - } - - /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ - for (i = 0; i < r; i++) - blkcpy(&B[i * 64], &Y[(i * 2) * 64], 64); - for (i = 0; i < r; i++) - blkcpy(&B[(i + r) * 64], &Y[(i * 2 + 1) * 64], 64); -} - -/** - * integerify(B, r): - * Return the result of parsing B_{2r-1} as a little-endian integer. - */ -static uint64_t -integerify(uint8_t * B, size_t r) -{ - uint8_t * X = &B[(2 * r - 1) * 64]; - - return (le64dec(X)); -} - -/** - * smix(B, r, N, V, XY): - * Compute B = SMix_r(B, N). The input B must be 128r bytes in length; the - * temporary storage V must be 128rN bytes in length; the temporary storage - * XY must be 256r bytes in length. The value N must be a power of 2. - */ -static void -smix(uint8_t * B, size_t r, uint64_t N, uint8_t * V, uint8_t * XY) -{ - uint8_t * X = XY; - uint8_t * Y = &XY[128 * r]; - uint64_t i; - uint64_t j; - - /* 1: X <-- B */ - blkcpy(X, B, 128 * r); - - /* 2: for i = 0 to N - 1 do */ - for (i = 0; i < N; i++) { - /* 3: V_i <-- X */ - blkcpy(&V[i * (128 * r)], X, 128 * r); - - /* 4: X <-- H(X) */ - blockmix_salsa8(X, Y, r); - } - - /* 6: for i = 0 to N - 1 do */ - for (i = 0; i < N; i++) { - /* 7: j <-- Integerify(X) mod N */ - j = integerify(X, r) & (N - 1); - - /* 8: X <-- H(X \xor V_j) */ - blkxor(X, &V[j * (128 * r)], 128 * r); - blockmix_salsa8(X, Y, r); - } - - /* 10: B' <-- X */ - blkcpy(B, X, 128 * r); -} - -/** - * crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen): - * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, - * p, buflen) and write the result into buf. The parameters r, p, and buflen - * must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32. The parameter N - * must be a power of 2. - * - * Return 0 on success; or -1 on error. - */ -int -crypto_scrypt(const uint8_t * passwd, size_t passwdlen, - const uint8_t * salt, size_t saltlen, uint64_t N, uint32_t _r, uint32_t _p, - uint8_t * buf, size_t buflen) -{ - uint8_t * B; - uint8_t * V; - uint8_t * XY; - size_t r = _r, p = _p; - uint32_t i; - - /* Sanity-check parameters. */ -#if SIZE_MAX > UINT32_MAX - if (buflen > (((uint64_t)(1) << 32) - 1) * 32) { - errno = EFBIG; - goto err0; - } -#endif - if ((uint64_t)(r) * (uint64_t)(p) >= (1 << 30)) { - errno = EFBIG; - goto err0; - } - if (((N & (N - 1)) != 0) || (N == 0)) { - errno = EINVAL; - goto err0; - } - if ((r > SIZE_MAX / 128 / p) || -#if SIZE_MAX / 256 <= UINT32_MAX - (r > SIZE_MAX / 256) || -#endif - (N > SIZE_MAX / 128 / r)) { - errno = ENOMEM; - goto err0; - } - - /* Allocate memory. */ - if ((B = malloc(128 * r * p)) == NULL) - goto err0; - if ((XY = malloc(256 * r)) == NULL) - goto err1; - if ((V = malloc(128 * r * N)) == NULL) - goto err2; - - /* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */ - PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, 1, B, p * 128 * r); - - /* 2: for i = 0 to p - 1 do */ - for (i = 0; i < p; i++) { - /* 3: B_i <-- MF(B_i, N) */ - smix(&B[i * 128 * r], r, N, V, XY); - } - - /* 5: DK <-- PBKDF2(P, B, 1, dkLen) */ - PBKDF2_SHA256(passwd, passwdlen, B, p * 128 * r, 1, buf, buflen); - - /* Free memory. */ - free(V); - free(XY); - free(B); - - /* Success! */ - return (0); - -err2: - free(XY); -err1: - free(B); -err0: - /* Failure! */ - return (-1); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.c deleted file mode 100644 index 748e466..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.c +++ /dev/null @@ -1,252 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#include "scrypt_platform.h" - -#include -#include - -#include -#include -#include -#include - -#include "cpusupport.h" -#include "sha256.h" -#include "warnp.h" - -#include "crypto_scrypt_smix.h" -#include "crypto_scrypt_smix_sse2.h" - -#include "crypto_scrypt.h" - -static void (*smix_func)(uint8_t *, size_t, uint64_t, void *, void *) = NULL; - -/** - * _crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen, smix): - * Perform the requested scrypt computation, using ${smix} as the smix routine. - */ -static int -_crypto_scrypt(const uint8_t * passwd, size_t passwdlen, - const uint8_t * salt, size_t saltlen, uint64_t N, uint32_t _r, uint32_t _p, - uint8_t * buf, size_t buflen, - void (*smix)(uint8_t *, size_t, uint64_t, void *, void *)) -{ - void * B0, * V0, * XY0; - uint8_t * B; - uint32_t * V; - uint32_t * XY; - size_t r = _r, p = _p; - uint32_t i; - - /* Sanity-check parameters. */ -#if SIZE_MAX > UINT32_MAX - if (buflen > (((uint64_t)(1) << 32) - 1) * 32) { - errno = EFBIG; - goto err0; - } -#endif - if ((uint64_t)(r) * (uint64_t)(p) >= (1 << 30)) { - errno = EFBIG; - goto err0; - } - if (((N & (N - 1)) != 0) || (N < 2)) { - errno = EINVAL; - goto err0; - } - if ((r > SIZE_MAX / 128 / p) || -#if SIZE_MAX / 256 <= UINT32_MAX - (r > (SIZE_MAX - 64) / 256) || -#endif - (N > SIZE_MAX / 128 / r)) { - errno = ENOMEM; - goto err0; - } - - /* Allocate memory. */ -#ifdef HAVE_POSIX_MEMALIGN - if ((errno = posix_memalign(&B0, 64, 128 * r * p)) != 0) - goto err0; - B = (uint8_t *)(B0); - if ((errno = posix_memalign(&XY0, 64, 256 * r + 64)) != 0) - goto err1; - XY = (uint32_t *)(XY0); -#if !defined(MAP_ANON) || !defined(HAVE_MMAP) - if ((errno = posix_memalign(&V0, 64, 128 * r * N)) != 0) - goto err2; - V = (uint32_t *)(V0); -#endif -#else - if ((B0 = malloc(128 * r * p + 63)) == NULL) - goto err0; - B = (uint8_t *)(((uintptr_t)(B0) + 63) & ~ (uintptr_t)(63)); - if ((XY0 = malloc(256 * r + 64 + 63)) == NULL) - goto err1; - XY = (uint32_t *)(((uintptr_t)(XY0) + 63) & ~ (uintptr_t)(63)); -#if !defined(MAP_ANON) || !defined(HAVE_MMAP) - if ((V0 = malloc(128 * r * N + 63)) == NULL) - goto err2; - V = (uint32_t *)(((uintptr_t)(V0) + 63) & ~ (uintptr_t)(63)); -#endif -#endif -#if defined(MAP_ANON) && defined(HAVE_MMAP) - if ((V0 = mmap(NULL, 128 * r * N, PROT_READ | PROT_WRITE, -#ifdef MAP_NOCORE - MAP_ANON | MAP_PRIVATE | MAP_NOCORE, -#else - MAP_ANON | MAP_PRIVATE, -#endif - -1, 0)) == MAP_FAILED) - goto err2; - V = (uint32_t *)(V0); -#endif - - /* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */ - PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, 1, B, p * 128 * r); - - /* 2: for i = 0 to p - 1 do */ - for (i = 0; i < p; i++) { - /* 3: B_i <-- MF(B_i, N) */ - (smix)(&B[i * 128 * r], r, N, V, XY); - } - - /* 5: DK <-- PBKDF2(P, B, 1, dkLen) */ - PBKDF2_SHA256(passwd, passwdlen, B, p * 128 * r, 1, buf, buflen); - - /* Free memory. */ -#if defined(MAP_ANON) && defined(HAVE_MMAP) - if (munmap(V0, 128 * r * N)) - goto err2; -#else - free(V0); -#endif - free(XY0); - free(B0); - - /* Success! */ - return (0); - -err2: - free(XY0); -err1: - free(B0); -err0: - /* Failure! */ - return (-1); -} - -#define TESTLEN 64 -static struct scrypt_test { - const char * passwd; - const char * salt; - uint64_t N; - uint32_t r; - uint32_t p; - uint8_t result[TESTLEN]; -} testcase = { - .passwd = "pleaseletmein", - .salt = "SodiumChloride", - .N = 16, - .r = 8, - .p = 1, - .result = { - 0x25, 0xa9, 0xfa, 0x20, 0x7f, 0x87, 0xca, 0x09, - 0xa4, 0xef, 0x8b, 0x9f, 0x77, 0x7a, 0xca, 0x16, - 0xbe, 0xb7, 0x84, 0xae, 0x18, 0x30, 0xbf, 0xbf, - 0xd3, 0x83, 0x25, 0xaa, 0xbb, 0x93, 0x77, 0xdf, - 0x1b, 0xa7, 0x84, 0xd7, 0x46, 0xea, 0x27, 0x3b, - 0xf5, 0x16, 0xa4, 0x6f, 0xbf, 0xac, 0xf5, 0x11, - 0xc5, 0xbe, 0xba, 0x4c, 0x4a, 0xb3, 0xac, 0xc7, - 0xfa, 0x6f, 0x46, 0x0b, 0x6c, 0x0f, 0x47, 0x7b, - } -}; - -static int -testsmix(void (*smix)(uint8_t *, size_t, uint64_t, void *, void *)) -{ - uint8_t hbuf[TESTLEN]; - - /* Perform the computation. */ - if (_crypto_scrypt( - (const uint8_t *)testcase.passwd, strlen(testcase.passwd), - (const uint8_t *)testcase.salt, strlen(testcase.salt), - testcase.N, testcase.r, testcase.p, hbuf, TESTLEN, smix)) - return (-1); - - /* Does it match? */ - return (memcmp(testcase.result, hbuf, TESTLEN)); -} - -static void -selectsmix(void) -{ - -#ifdef CPUSUPPORT_X86_SSE2 - /* If we're running on an SSE2-capable CPU, try that code. */ - if (cpusupport_x86_sse2()) { - /* If SSE2ized smix works, use it. */ - if (!testsmix(crypto_scrypt_smix_sse2)) { - smix_func = crypto_scrypt_smix_sse2; - return; - } - warn0("Disabling broken SSE2 scrypt support - please report bug!"); - } -#endif - - /* If generic smix works, use it. */ - if (!testsmix(crypto_scrypt_smix)) { - smix_func = crypto_scrypt_smix; - return; - } - warn0("Generic scrypt code is broken - please report bug!"); - - /* If we get here, something really bad happened. */ - abort(); -} - -/** - * crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen): - * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, - * p, buflen) and write the result into buf. The parameters r, p, and buflen - * must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32. The parameter N - * must be a power of 2 greater than 1. - * - * Return 0 on success; or -1 on error. - */ -int -crypto_scrypt(const uint8_t * passwd, size_t passwdlen, - const uint8_t * salt, size_t saltlen, uint64_t N, uint32_t _r, uint32_t _p, - uint8_t * buf, size_t buflen) -{ - - if (smix_func == NULL) - selectsmix(); - - return (_crypto_scrypt(passwd, passwdlen, salt, saltlen, N, _r, _p, - buf, buflen, smix_func)); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h deleted file mode 100644 index e7e0082..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.h +++ /dev/null @@ -1,47 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#ifndef _CRYPTO_SCRYPT_H_ -#define _CRYPTO_SCRYPT_H_ - -#include -#include - -/** - * crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen): - * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, - * p, buflen) and write the result into buf. The parameters r, p, and buflen - * must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32. The parameter N - * must be a power of 2 greater than 1. - * - * Return 0 on success; or -1 on error. - */ -int crypto_scrypt(const uint8_t *, size_t, const uint8_t *, size_t, uint64_t, - uint32_t, uint32_t, uint8_t *, size_t); - -#endif /* !_CRYPTO_SCRYPT_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.c deleted file mode 100644 index ec3ec29..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.c +++ /dev/null @@ -1,215 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#include -#include - -#include "sha256.h" -#include "sysendian.h" - -#include "crypto_scrypt_smix.h" - -static void blkcpy(void *, const void *, size_t); -static void blkxor(void *, const void *, size_t); -static void salsa20_8(uint32_t[16]); -static void blockmix_salsa8(const uint32_t *, uint32_t *, uint32_t *, size_t); -static uint64_t integerify(const void *, size_t); - -static void -blkcpy(void * dest, const void * src, size_t len) -{ - size_t * D = dest; - const size_t * S = src; - size_t L = len / sizeof(size_t); - size_t i; - - for (i = 0; i < L; i++) - D[i] = S[i]; -} - -static void -blkxor(void * dest, const void * src, size_t len) -{ - size_t * D = dest; - const size_t * S = src; - size_t L = len / sizeof(size_t); - size_t i; - - for (i = 0; i < L; i++) - D[i] ^= S[i]; -} - -/** - * salsa20_8(B): - * Apply the salsa20/8 core to the provided block. - */ -static void -salsa20_8(uint32_t B[16]) -{ - uint32_t x[16]; - size_t i; - - blkcpy(x, B, 64); - for (i = 0; i < 8; i += 2) { -#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) - /* Operate on columns. */ - x[ 4] ^= R(x[ 0]+x[12], 7); x[ 8] ^= R(x[ 4]+x[ 0], 9); - x[12] ^= R(x[ 8]+x[ 4],13); x[ 0] ^= R(x[12]+x[ 8],18); - - x[ 9] ^= R(x[ 5]+x[ 1], 7); x[13] ^= R(x[ 9]+x[ 5], 9); - x[ 1] ^= R(x[13]+x[ 9],13); x[ 5] ^= R(x[ 1]+x[13],18); - - x[14] ^= R(x[10]+x[ 6], 7); x[ 2] ^= R(x[14]+x[10], 9); - x[ 6] ^= R(x[ 2]+x[14],13); x[10] ^= R(x[ 6]+x[ 2],18); - - x[ 3] ^= R(x[15]+x[11], 7); x[ 7] ^= R(x[ 3]+x[15], 9); - x[11] ^= R(x[ 7]+x[ 3],13); x[15] ^= R(x[11]+x[ 7],18); - - /* Operate on rows. */ - x[ 1] ^= R(x[ 0]+x[ 3], 7); x[ 2] ^= R(x[ 1]+x[ 0], 9); - x[ 3] ^= R(x[ 2]+x[ 1],13); x[ 0] ^= R(x[ 3]+x[ 2],18); - - x[ 6] ^= R(x[ 5]+x[ 4], 7); x[ 7] ^= R(x[ 6]+x[ 5], 9); - x[ 4] ^= R(x[ 7]+x[ 6],13); x[ 5] ^= R(x[ 4]+x[ 7],18); - - x[11] ^= R(x[10]+x[ 9], 7); x[ 8] ^= R(x[11]+x[10], 9); - x[ 9] ^= R(x[ 8]+x[11],13); x[10] ^= R(x[ 9]+x[ 8],18); - - x[12] ^= R(x[15]+x[14], 7); x[13] ^= R(x[12]+x[15], 9); - x[14] ^= R(x[13]+x[12],13); x[15] ^= R(x[14]+x[13],18); -#undef R - } - for (i = 0; i < 16; i++) - B[i] += x[i]; -} - -/** - * blockmix_salsa8(Bin, Bout, X, r): - * Compute Bout = BlockMix_{salsa20/8, r}(Bin). The input Bin must be 128r - * bytes in length; the output Bout must also be the same size. The - * temporary space X must be 64 bytes. - */ -static void -blockmix_salsa8(const uint32_t * Bin, uint32_t * Bout, uint32_t * X, size_t r) -{ - size_t i; - - /* 1: X <-- B_{2r - 1} */ - blkcpy(X, &Bin[(2 * r - 1) * 16], 64); - - /* 2: for i = 0 to 2r - 1 do */ - for (i = 0; i < 2 * r; i += 2) { - /* 3: X <-- H(X \xor B_i) */ - blkxor(X, &Bin[i * 16], 64); - salsa20_8(X); - - /* 4: Y_i <-- X */ - /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ - blkcpy(&Bout[i * 8], X, 64); - - /* 3: X <-- H(X \xor B_i) */ - blkxor(X, &Bin[i * 16 + 16], 64); - salsa20_8(X); - - /* 4: Y_i <-- X */ - /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ - blkcpy(&Bout[i * 8 + r * 16], X, 64); - } -} - -/** - * integerify(B, r): - * Return the result of parsing B_{2r-1} as a little-endian integer. - */ -static uint64_t -integerify(const void * B, size_t r) -{ - const uint32_t * X = (const void *)((uintptr_t)(B) + (2 * r - 1) * 64); - - return (((uint64_t)(X[1]) << 32) + X[0]); -} - -/** - * crypto_scrypt_smix(B, r, N, V, XY): - * Compute B = SMix_r(B, N). The input B must be 128r bytes in length; - * the temporary storage V must be 128rN bytes in length; the temporary - * storage XY must be 256r + 64 bytes in length. The value N must be a - * power of 2 greater than 1. The arrays B, V, and XY must be aligned to a - * multiple of 64 bytes. - */ -void -crypto_scrypt_smix(uint8_t * B, size_t r, uint64_t N, void * _V, void * XY) -{ - uint32_t * X = XY; - uint32_t * Y = (void *)((uint8_t *)(XY) + 128 * r); - uint32_t * Z = (void *)((uint8_t *)(XY) + 256 * r); - uint32_t * V = _V; - uint64_t i; - uint64_t j; - size_t k; - - /* 1: X <-- B */ - for (k = 0; k < 32 * r; k++) - X[k] = le32dec(&B[4 * k]); - - /* 2: for i = 0 to N - 1 do */ - for (i = 0; i < N; i += 2) { - /* 3: V_i <-- X */ - blkcpy(&V[i * (32 * r)], X, 128 * r); - - /* 4: X <-- H(X) */ - blockmix_salsa8(X, Y, Z, r); - - /* 3: V_i <-- X */ - blkcpy(&V[(i + 1) * (32 * r)], Y, 128 * r); - - /* 4: X <-- H(X) */ - blockmix_salsa8(Y, X, Z, r); - } - - /* 6: for i = 0 to N - 1 do */ - for (i = 0; i < N; i += 2) { - /* 7: j <-- Integerify(X) mod N */ - j = integerify(X, r) & (N - 1); - - /* 8: X <-- H(X \xor V_j) */ - blkxor(X, &V[j * (32 * r)], 128 * r); - blockmix_salsa8(X, Y, Z, r); - - /* 7: j <-- Integerify(X) mod N */ - j = integerify(Y, r) & (N - 1); - - /* 8: X <-- H(X \xor V_j) */ - blkxor(Y, &V[j * (32 * r)], 128 * r); - blockmix_salsa8(Y, X, Z, r); - } - - /* 10: B' <-- X */ - for (k = 0; k < 32 * r; k++) - le32enc(&B[4 * k], X[k]); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.h deleted file mode 100644 index b52067f..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _CRYPTO_SCRYPT_SMIX_H_ -#define _CRYPTO_SCRYPT_SMIX_H_ - -/** - * crypto_scrypt_smix(B, r, N, V, XY): - * Compute B = SMix_r(B, N). The input B must be 128r bytes in length; - * the temporary storage V must be 128rN bytes in length; the temporary - * storage XY must be 256r + 64 bytes in length. The value N must be a - * power of 2 greater than 1. The arrays B, V, and XY must be aligned to a - * multiple of 64 bytes. - */ -void crypto_scrypt_smix(uint8_t *, size_t, uint64_t, void *, void *); - -#endif /* !_CRYPTO_SCRYPT_SMIX_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix_sse2.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix_sse2.c deleted file mode 100644 index 9fd0308..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix_sse2.c +++ /dev/null @@ -1,247 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#include "cpusupport.h" -#ifdef CPUSUPPORT_X86_SSE2 - -#include -#include - -#include "sysendian.h" - -#include "crypto_scrypt_smix_sse2.h" - -static void blkcpy(void *, const void *, size_t); -static void blkxor(void *, const void *, size_t); -static void salsa20_8(__m128i *); -static void blockmix_salsa8(const __m128i *, __m128i *, __m128i *, size_t); -static uint64_t integerify(const void *, size_t); - -static void -blkcpy(void * dest, const void * src, size_t len) -{ - __m128i * D = dest; - const __m128i * S = src; - size_t L = len / 16; - size_t i; - - for (i = 0; i < L; i++) - D[i] = S[i]; -} - -static void -blkxor(void * dest, const void * src, size_t len) -{ - __m128i * D = dest; - const __m128i * S = src; - size_t L = len / 16; - size_t i; - - for (i = 0; i < L; i++) - D[i] = _mm_xor_si128(D[i], S[i]); -} - -/** - * salsa20_8(B): - * Apply the salsa20/8 core to the provided block. - */ -static void -salsa20_8(__m128i B[4]) -{ - __m128i X0, X1, X2, X3; - __m128i T; - size_t i; - - X0 = B[0]; - X1 = B[1]; - X2 = B[2]; - X3 = B[3]; - - for (i = 0; i < 8; i += 2) { - /* Operate on "columns". */ - T = _mm_add_epi32(X0, X3); - X1 = _mm_xor_si128(X1, _mm_slli_epi32(T, 7)); - X1 = _mm_xor_si128(X1, _mm_srli_epi32(T, 25)); - T = _mm_add_epi32(X1, X0); - X2 = _mm_xor_si128(X2, _mm_slli_epi32(T, 9)); - X2 = _mm_xor_si128(X2, _mm_srli_epi32(T, 23)); - T = _mm_add_epi32(X2, X1); - X3 = _mm_xor_si128(X3, _mm_slli_epi32(T, 13)); - X3 = _mm_xor_si128(X3, _mm_srli_epi32(T, 19)); - T = _mm_add_epi32(X3, X2); - X0 = _mm_xor_si128(X0, _mm_slli_epi32(T, 18)); - X0 = _mm_xor_si128(X0, _mm_srli_epi32(T, 14)); - - /* Rearrange data. */ - X1 = _mm_shuffle_epi32(X1, 0x93); - X2 = _mm_shuffle_epi32(X2, 0x4E); - X3 = _mm_shuffle_epi32(X3, 0x39); - - /* Operate on "rows". */ - T = _mm_add_epi32(X0, X1); - X3 = _mm_xor_si128(X3, _mm_slli_epi32(T, 7)); - X3 = _mm_xor_si128(X3, _mm_srli_epi32(T, 25)); - T = _mm_add_epi32(X3, X0); - X2 = _mm_xor_si128(X2, _mm_slli_epi32(T, 9)); - X2 = _mm_xor_si128(X2, _mm_srli_epi32(T, 23)); - T = _mm_add_epi32(X2, X3); - X1 = _mm_xor_si128(X1, _mm_slli_epi32(T, 13)); - X1 = _mm_xor_si128(X1, _mm_srli_epi32(T, 19)); - T = _mm_add_epi32(X1, X2); - X0 = _mm_xor_si128(X0, _mm_slli_epi32(T, 18)); - X0 = _mm_xor_si128(X0, _mm_srli_epi32(T, 14)); - - /* Rearrange data. */ - X1 = _mm_shuffle_epi32(X1, 0x39); - X2 = _mm_shuffle_epi32(X2, 0x4E); - X3 = _mm_shuffle_epi32(X3, 0x93); - } - - B[0] = _mm_add_epi32(B[0], X0); - B[1] = _mm_add_epi32(B[1], X1); - B[2] = _mm_add_epi32(B[2], X2); - B[3] = _mm_add_epi32(B[3], X3); -} - -/** - * blockmix_salsa8(Bin, Bout, X, r): - * Compute Bout = BlockMix_{salsa20/8, r}(Bin). The input Bin must be 128r - * bytes in length; the output Bout must also be the same size. The - * temporary space X must be 64 bytes. - */ -static void -blockmix_salsa8(const __m128i * Bin, __m128i * Bout, __m128i * X, size_t r) -{ - size_t i; - - /* 1: X <-- B_{2r - 1} */ - blkcpy(X, &Bin[8 * r - 4], 64); - - /* 2: for i = 0 to 2r - 1 do */ - for (i = 0; i < r; i++) { - /* 3: X <-- H(X \xor B_i) */ - blkxor(X, &Bin[i * 8], 64); - salsa20_8(X); - - /* 4: Y_i <-- X */ - /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ - blkcpy(&Bout[i * 4], X, 64); - - /* 3: X <-- H(X \xor B_i) */ - blkxor(X, &Bin[i * 8 + 4], 64); - salsa20_8(X); - - /* 4: Y_i <-- X */ - /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ - blkcpy(&Bout[(r + i) * 4], X, 64); - } -} - -/** - * integerify(B, r): - * Return the result of parsing B_{2r-1} as a little-endian integer. - */ -static uint64_t -integerify(const void * B, size_t r) -{ - const uint32_t * X = (const void *)((uintptr_t)(B) + (2 * r - 1) * 64); - - return (((uint64_t)(X[13]) << 32) + X[0]); -} - -/** - * crypto_scrypt_smix_sse2(B, r, N, V, XY): - * Compute B = SMix_r(B, N). The input B must be 128r bytes in length; - * the temporary storage V must be 128rN bytes in length; the temporary - * storage XY must be 256r + 64 bytes in length. The value N must be a - * power of 2 greater than 1. The arrays B, V, and XY must be aligned to a - * multiple of 64 bytes. - * - * Use SSE2 instructions. - */ -void -crypto_scrypt_smix_sse2(uint8_t * B, size_t r, uint64_t N, void * V, void * XY) -{ - __m128i * X = XY; - __m128i * Y = (void *)((uintptr_t)(XY) + 128 * r); - __m128i * Z = (void *)((uintptr_t)(XY) + 256 * r); - uint32_t * X32 = (void *)X; - uint64_t i, j; - size_t k; - - /* 1: X <-- B */ - for (k = 0; k < 2 * r; k++) { - for (i = 0; i < 16; i++) { - X32[k * 16 + i] = - le32dec(&B[(k * 16 + (i * 5 % 16)) * 4]); - } - } - - /* 2: for i = 0 to N - 1 do */ - for (i = 0; i < N; i += 2) { - /* 3: V_i <-- X */ - blkcpy((void *)((uintptr_t)(V) + i * 128 * r), X, 128 * r); - - /* 4: X <-- H(X) */ - blockmix_salsa8(X, Y, Z, r); - - /* 3: V_i <-- X */ - blkcpy((void *)((uintptr_t)(V) + (i + 1) * 128 * r), - Y, 128 * r); - - /* 4: X <-- H(X) */ - blockmix_salsa8(Y, X, Z, r); - } - - /* 6: for i = 0 to N - 1 do */ - for (i = 0; i < N; i += 2) { - /* 7: j <-- Integerify(X) mod N */ - j = integerify(X, r) & (N - 1); - - /* 8: X <-- H(X \xor V_j) */ - blkxor(X, (void *)((uintptr_t)(V) + j * 128 * r), 128 * r); - blockmix_salsa8(X, Y, Z, r); - - /* 7: j <-- Integerify(X) mod N */ - j = integerify(Y, r) & (N - 1); - - /* 8: X <-- H(X \xor V_j) */ - blkxor(Y, (void *)((uintptr_t)(V) + j * 128 * r), 128 * r); - blockmix_salsa8(Y, X, Z, r); - } - - /* 10: B' <-- X */ - for (k = 0; k < 2 * r; k++) { - for (i = 0; i < 16; i++) { - le32enc(&B[(k * 16 + (i * 5 % 16)) * 4], - X32[k * 16 + i]); - } - } -} - -#endif /* CPUSUPPORT_X86_SSE2 */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix_sse2.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix_sse2.h deleted file mode 100644 index eda43a4..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix_sse2.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _CRYPTO_SCRYPT_SMIX_SSE2_H_ -#define _CRYPTO_SCRYPT_SMIX_SSE2_H_ - -/** - * crypto_scrypt_smix_sse2(B, r, N, V, XY): - * Compute B = SMix_r(B, N). The input B must be 128r bytes in length; - * the temporary storage V must be 128rN bytes in length; the temporary - * storage XY must be 256r + 64 bytes in length. The value N must be a - * power of 2 greater than 1. The arrays B, V, and XY must be aligned to a - * multiple of 64 bytes. - * - * Use SSE2 instructions. - */ -void crypto_scrypt_smix_sse2(uint8_t *, size_t, uint64_t, void *, void *); - -#endif /* !_CRYPTO_SCRYPT_SMIX_SSE2_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/.deps/scrypt-scryptenc.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/.deps/scrypt-scryptenc.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/.deps/scrypt-scryptenc.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/.deps/scrypt-scryptenc_cpuperf.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/.deps/scrypt-scryptenc_cpuperf.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/.deps/scrypt-scryptenc_cpuperf.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc.c deleted file mode 100644 index fc58c48..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc.c +++ /dev/null @@ -1,569 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#include "scrypt_platform.h" - -#include -#include -#include -#include -#include -#include - -#include "crypto_aes.h" -#include "crypto_aesctr.h" -#include "crypto_entropy.h" -#include "insecure_memzero.h" -#include "sha256.h" -#include "sysendian.h" - -#include "crypto_scrypt.h" -#include "memlimit.h" -#include "scryptenc_cpuperf.h" - -#include "scryptenc.h" - -#define ENCBLOCK 65536 - -static int pickparams(size_t, double, double, - int *, uint32_t *, uint32_t *); -static int checkparams(size_t, double, double, int, uint32_t, uint32_t); - -static int -pickparams(size_t maxmem, double maxmemfrac, double maxtime, - int * logN, uint32_t * r, uint32_t * p) -{ - size_t memlimit; - double opps; - double opslimit; - double maxN, maxrp; - int rc; - - /* Figure out how much memory to use. */ - if (memtouse(maxmem, maxmemfrac, &memlimit)) - return (1); - - /* Figure out how fast the CPU is. */ - if ((rc = scryptenc_cpuperf(&opps)) != 0) - return (rc); - opslimit = opps * maxtime; - - /* Allow a minimum of 2^15 salsa20/8 cores. */ - if (opslimit < 32768) - opslimit = 32768; - - /* Fix r = 8 for now. */ - *r = 8; - - /* - * The memory limit requires that 128Nr <= memlimit, while the CPU - * limit requires that 4Nrp <= opslimit. If opslimit < memlimit/32, - * opslimit imposes the stronger limit on N. - */ -#ifdef DEBUG - fprintf(stderr, "Requiring 128Nr <= %zu, 4Nrp <= %f\n", - memlimit, opslimit); -#endif - if (opslimit < memlimit/32) { - /* Set p = 1 and choose N based on the CPU limit. */ - *p = 1; - maxN = opslimit / (*r * 4); - for (*logN = 1; *logN < 63; *logN += 1) { - if ((uint64_t)(1) << *logN > maxN / 2) - break; - } - } else { - /* Set N based on the memory limit. */ - maxN = memlimit / (*r * 128); - for (*logN = 1; *logN < 63; *logN += 1) { - if ((uint64_t)(1) << *logN > maxN / 2) - break; - } - - /* Choose p based on the CPU limit. */ - maxrp = (opslimit / 4) / ((uint64_t)(1) << *logN); - if (maxrp > 0x3fffffff) - maxrp = 0x3fffffff; - *p = (uint32_t)(maxrp) / *r; - } - -#ifdef DEBUG - fprintf(stderr, "N = %zu r = %d p = %d\n", - (size_t)(1) << *logN, (int)(*r), (int)(*p)); -#endif - - /* Success! */ - return (0); -} - -static int -checkparams(size_t maxmem, double maxmemfrac, double maxtime, - int logN, uint32_t r, uint32_t p) -{ - size_t memlimit; - double opps; - double opslimit; - uint64_t N; - int rc; - - /* Figure out the maximum amount of memory we can use. */ - if (memtouse(maxmem, maxmemfrac, &memlimit)) - return (1); - - /* Figure out how fast the CPU is. */ - if ((rc = scryptenc_cpuperf(&opps)) != 0) - return (rc); - opslimit = opps * maxtime; - - /* Sanity-check values. */ - if ((logN < 1) || (logN > 63)) - return (7); - if ((uint64_t)(r) * (uint64_t)(p) >= 0x40000000) - return (7); - - /* Check limits. */ - N = (uint64_t)(1) << logN; - if ((memlimit / N) / r < 128) - return (9); - if ((opslimit / N) / (r * p) < 4) - return (10); - - /* Success! */ - return (0); -} - -static int -scryptenc_setup(uint8_t header[96], uint8_t dk[64], - const uint8_t * passwd, size_t passwdlen, - size_t maxmem, double maxmemfrac, double maxtime) -{ - uint8_t salt[32]; - uint8_t hbuf[32]; - int logN; - uint64_t N; - uint32_t r; - uint32_t p; - SHA256_CTX ctx; - uint8_t * key_hmac = &dk[32]; - HMAC_SHA256_CTX hctx; - int rc; - - /* Pick values for N, r, p. */ - if ((rc = pickparams(maxmem, maxmemfrac, maxtime, - &logN, &r, &p)) != 0) - return (rc); - N = (uint64_t)(1) << logN; - - /* Get some salt. */ - if (crypto_entropy_read(salt, 32)) - return (4); - - /* Generate the derived keys. */ - if (crypto_scrypt(passwd, passwdlen, salt, 32, N, r, p, dk, 64)) - return (3); - - /* Construct the file header. */ - memcpy(header, "scrypt", 6); - header[6] = 0; - header[7] = logN; - be32enc(&header[8], r); - be32enc(&header[12], p); - memcpy(&header[16], salt, 32); - - /* Add header checksum. */ - SHA256_Init(&ctx); - SHA256_Update(&ctx, header, 48); - SHA256_Final(hbuf, &ctx); - memcpy(&header[48], hbuf, 16); - - /* Add header signature (used for verifying password). */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, header, 64); - HMAC_SHA256_Final(hbuf, &hctx); - memcpy(&header[64], hbuf, 32); - - /* Success! */ - return (0); -} - -static int -scryptdec_setup(const uint8_t header[96], uint8_t dk[64], - const uint8_t * passwd, size_t passwdlen, - size_t maxmem, double maxmemfrac, double maxtime) -{ - uint8_t salt[32]; - uint8_t hbuf[32]; - int logN; - uint32_t r; - uint32_t p; - uint64_t N; - SHA256_CTX ctx; - uint8_t * key_hmac = &dk[32]; - HMAC_SHA256_CTX hctx; - int rc; - - /* Parse N, r, p, salt. */ - logN = header[7]; - r = be32dec(&header[8]); - p = be32dec(&header[12]); - memcpy(salt, &header[16], 32); - - /* Verify header checksum. */ - SHA256_Init(&ctx); - SHA256_Update(&ctx, header, 48); - SHA256_Final(hbuf, &ctx); - if (memcmp(&header[48], hbuf, 16)) - return (7); - - /* - * Check whether the provided parameters are valid and whether the - * key derivation function can be computed within the allowed memory - * and CPU time. - */ - if ((rc = checkparams(maxmem, maxmemfrac, maxtime, logN, r, p)) != 0) - return (rc); - - /* Compute the derived keys. */ - N = (uint64_t)(1) << logN; - if (crypto_scrypt(passwd, passwdlen, salt, 32, N, r, p, dk, 64)) - return (3); - - /* Check header signature (i.e., verify password). */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, header, 64); - HMAC_SHA256_Final(hbuf, &hctx); - if (memcmp(hbuf, &header[64], 32)) - return (11); - - /* Success! */ - return (0); -} - -/** - * scryptenc_buf(inbuf, inbuflen, outbuf, passwd, passwdlen, - * maxmem, maxmemfrac, maxtime): - * Encrypt inbuflen bytes from inbuf, writing the resulting inbuflen + 128 - * bytes to outbuf. - */ -int -scryptenc_buf(const uint8_t * inbuf, size_t inbuflen, uint8_t * outbuf, - const uint8_t * passwd, size_t passwdlen, - size_t maxmem, double maxmemfrac, double maxtime) -{ - uint8_t dk[64]; - uint8_t hbuf[32]; - uint8_t header[96]; - uint8_t * key_enc = dk; - uint8_t * key_hmac = &dk[32]; - int rc; - HMAC_SHA256_CTX hctx; - struct crypto_aes_key * key_enc_exp; - struct crypto_aesctr * AES; - - /* Generate the header and derived key. */ - if ((rc = scryptenc_setup(header, dk, passwd, passwdlen, - maxmem, maxmemfrac, maxtime)) != 0) - return (rc); - - /* Copy header into output buffer. */ - memcpy(outbuf, header, 96); - - /* Encrypt data. */ - if ((key_enc_exp = crypto_aes_key_expand(key_enc, 32)) == NULL) - return (5); - if ((AES = crypto_aesctr_init(key_enc_exp, 0)) == NULL) - return (6); - crypto_aesctr_stream(AES, inbuf, &outbuf[96], inbuflen); - crypto_aesctr_free(AES); - crypto_aes_key_free(key_enc_exp); - - /* Add signature. */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, outbuf, 96 + inbuflen); - HMAC_SHA256_Final(hbuf, &hctx); - memcpy(&outbuf[96 + inbuflen], hbuf, 32); - - /* Zero sensitive data. */ - insecure_memzero(dk, 64); - - /* Success! */ - return (0); -} - -/** - * scryptdec_buf(inbuf, inbuflen, outbuf, outlen, passwd, passwdlen, - * maxmem, maxmemfrac, maxtime): - * Decrypt inbuflen bytes from inbuf, writing the result into outbuf and the - * decrypted data length to outlen. The allocated length of outbuf must - * be at least inbuflen. - */ -int -scryptdec_buf(const uint8_t * inbuf, size_t inbuflen, uint8_t * outbuf, - size_t * outlen, const uint8_t * passwd, size_t passwdlen, - size_t maxmem, double maxmemfrac, double maxtime) -{ - uint8_t hbuf[32]; - uint8_t dk[64]; - uint8_t * key_enc = dk; - uint8_t * key_hmac = &dk[32]; - int rc; - HMAC_SHA256_CTX hctx; - struct crypto_aes_key * key_enc_exp; - struct crypto_aesctr * AES; - - /* - * All versions of the scrypt format will start with "scrypt" and - * have at least 7 bytes of header. - */ - if ((inbuflen < 7) || (memcmp(inbuf, "scrypt", 6) != 0)) - return (7); - - /* Check the format. */ - if (inbuf[6] != 0) - return (8); - - /* We must have at least 128 bytes. */ - if (inbuflen < 128) - return (7); - - /* Parse the header and generate derived keys. */ - if ((rc = scryptdec_setup(inbuf, dk, passwd, passwdlen, - maxmem, maxmemfrac, maxtime)) != 0) - return (rc); - - /* Decrypt data. */ - if ((key_enc_exp = crypto_aes_key_expand(key_enc, 32)) == NULL) - return (5); - if ((AES = crypto_aesctr_init(key_enc_exp, 0)) == NULL) - return (6); - crypto_aesctr_stream(AES, &inbuf[96], outbuf, inbuflen - 128); - crypto_aesctr_free(AES); - crypto_aes_key_free(key_enc_exp); - *outlen = inbuflen - 128; - - /* Verify signature. */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, inbuf, inbuflen - 32); - HMAC_SHA256_Final(hbuf, &hctx); - if (memcmp(hbuf, &inbuf[inbuflen - 32], 32)) - return (7); - - /* Zero sensitive data. */ - insecure_memzero(dk, 64); - - /* Success! */ - return (0); -} - -/** - * scryptenc_file(infile, outfile, passwd, passwdlen, - * maxmem, maxmemfrac, maxtime): - * Read a stream from infile and encrypt it, writing the resulting stream to - * outfile. - */ -int -scryptenc_file(FILE * infile, FILE * outfile, - const uint8_t * passwd, size_t passwdlen, - size_t maxmem, double maxmemfrac, double maxtime) -{ - uint8_t buf[ENCBLOCK]; - uint8_t dk[64]; - uint8_t hbuf[32]; - uint8_t header[96]; - uint8_t * key_enc = dk; - uint8_t * key_hmac = &dk[32]; - size_t readlen; - HMAC_SHA256_CTX hctx; - struct crypto_aes_key * key_enc_exp; - struct crypto_aesctr * AES; - int rc; - - /* Generate the header and derived key. */ - if ((rc = scryptenc_setup(header, dk, passwd, passwdlen, - maxmem, maxmemfrac, maxtime)) != 0) - return (rc); - - /* Hash and write the header. */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, header, 96); - if (fwrite(header, 96, 1, outfile) != 1) - return (12); - - /* - * Read blocks of data, encrypt them, and write them out; hash the - * data as it is produced. - */ - if ((key_enc_exp = crypto_aes_key_expand(key_enc, 32)) == NULL) - return (5); - if ((AES = crypto_aesctr_init(key_enc_exp, 0)) == NULL) - return (6); - do { - if ((readlen = fread(buf, 1, ENCBLOCK, infile)) == 0) - break; - crypto_aesctr_stream(AES, buf, buf, readlen); - HMAC_SHA256_Update(&hctx, buf, readlen); - if (fwrite(buf, 1, readlen, outfile) < readlen) { - crypto_aesctr_free(AES); - return (12); - } - } while (1); - crypto_aesctr_free(AES); - crypto_aes_key_free(key_enc_exp); - - /* Did we exit the loop due to a read error? */ - if (ferror(infile)) - return (13); - - /* Compute the final HMAC and output it. */ - HMAC_SHA256_Final(hbuf, &hctx); - if (fwrite(hbuf, 32, 1, outfile) != 1) - return (12); - - /* Zero sensitive data. */ - insecure_memzero(dk, 64); - - /* Success! */ - return (0); -} - -/** - * scryptdec_file(infile, outfile, passwd, passwdlen, - * maxmem, maxmemfrac, maxtime): - * Read a stream from infile and decrypt it, writing the resulting stream to - * outfile. - */ -int -scryptdec_file(FILE * infile, FILE * outfile, - const uint8_t * passwd, size_t passwdlen, - size_t maxmem, double maxmemfrac, double maxtime) -{ - uint8_t buf[ENCBLOCK + 32]; - uint8_t header[96]; - uint8_t hbuf[32]; - uint8_t dk[64]; - uint8_t * key_enc = dk; - uint8_t * key_hmac = &dk[32]; - size_t buflen = 0; - size_t readlen; - HMAC_SHA256_CTX hctx; - struct crypto_aes_key * key_enc_exp; - struct crypto_aesctr * AES; - int rc; - - /* - * Read the first 7 bytes of the file; all future versions of scrypt - * are guaranteed to have at least 7 bytes of header. - */ - if (fread(header, 7, 1, infile) < 1) { - if (ferror(infile)) - return (13); - else - return (7); - } - - /* Do we have the right magic? */ - if (memcmp(header, "scrypt", 6)) - return (7); - if (header[6] != 0) - return (8); - - /* - * Read another 89 bytes of the file; version 0 of the scrypt file - * format has a 96-byte header. - */ - if (fread(&header[7], 89, 1, infile) < 1) { - if (ferror(infile)) - return (13); - else - return (7); - } - - /* Parse the header and generate derived keys. */ - if ((rc = scryptdec_setup(header, dk, passwd, passwdlen, - maxmem, maxmemfrac, maxtime)) != 0) - return (rc); - - /* Start hashing with the header. */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, header, 96); - - /* - * We don't know how long the encrypted data block is (we can't know, - * since data can be streamed into 'scrypt enc') so we need to read - * data and decrypt all of it except the final 32 bytes, then check - * if that final 32 bytes is the correct signature. - */ - if ((key_enc_exp = crypto_aes_key_expand(key_enc, 32)) == NULL) - return (5); - if ((AES = crypto_aesctr_init(key_enc_exp, 0)) == NULL) - return (6); - do { - /* Read data until we have more than 32 bytes of it. */ - if ((readlen = fread(&buf[buflen], 1, - ENCBLOCK + 32 - buflen, infile)) == 0) - break; - buflen += readlen; - if (buflen <= 32) - continue; - - /* - * Decrypt, hash, and output everything except the last 32 - * bytes out of what we have in our buffer. - */ - HMAC_SHA256_Update(&hctx, buf, buflen - 32); - crypto_aesctr_stream(AES, buf, buf, buflen - 32); - if (fwrite(buf, 1, buflen - 32, outfile) < buflen - 32) { - crypto_aesctr_free(AES); - return (12); - } - - /* Move the last 32 bytes to the start of the buffer. */ - memmove(buf, &buf[buflen - 32], 32); - buflen = 32; - } while (1); - crypto_aesctr_free(AES); - crypto_aes_key_free(key_enc_exp); - - /* Did we exit the loop due to a read error? */ - if (ferror(infile)) - return (13); - - /* Did we read enough data that we *might* have a valid signature? */ - if (buflen < 32) - return (7); - - /* Verify signature. */ - HMAC_SHA256_Final(hbuf, &hctx); - if (memcmp(hbuf, buf, 32)) - return (7); - - /* Zero sensitive data. */ - insecure_memzero(dk, 64); - - return (0); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc.h deleted file mode 100644 index 99090d4..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc.h +++ /dev/null @@ -1,120 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#ifndef _SCRYPTENC_H_ -#define _SCRYPTENC_H_ - -#include -#include - -/** - * NOTE: This file provides prototypes for routines which encrypt/decrypt data - * using a key derived from a password by using the scrypt key derivation - * function. If you are just trying to "hash" a password for user logins, - * this is not the code you are looking for. You want to use the crypt_scrypt - * function directly. - */ - -/** - * The parameters maxmem, maxmemfrac, and maxtime used by all of these - * functions are defined as follows: - * maxmem - maximum number of bytes of storage to use for V array (which is - * by far the largest consumer of memory). If this value is set to 0, no - * maximum will be enforced; any other value less than 1 MiB will be - * treated as 1 MiB. - * maxmemfrac - maximum fraction of available storage to use for the V array, - * where "available storage" is defined as the minimum out of the - * RLIMIT_AS, RLIMIT_DATA. and RLIMIT_RSS resource limits (if any are - * set). If this value is set to 0 or more than 0.5 it will be treated - * as 0.5; and this value will never cause a limit of less than 1 MiB to - * be enforced. - * maxtime - maximum amount of CPU time to spend computing the derived keys, - * in seconds. This limit is only approximately enforced; the CPU - * performance is estimated and parameter limits are chosen accordingly. - * For the encryption functions, the parameters to the scrypt key derivation - * function are chosen to make the key as strong as possible subject to the - * specified limits; for the decryption functions, the parameters used are - * compared to the computed limits and an error is returned if decrypting - * the data would take too much memory or CPU time. - */ -/** - * Return codes from scrypt(enc|dec)_(buf|file): - * 0 success - * 1 getrlimit or sysctl(hw.usermem) failed - * 2 clock_getres or clock_gettime failed - * 3 error computing derived key - * 4 could not read salt from /dev/urandom - * 5 error in OpenSSL - * 6 malloc failed - * 7 data is not a valid scrypt-encrypted block - * 8 unrecognized scrypt format - * 9 decrypting file would take too much memory - * 10 decrypting file would take too long - * 11 password is incorrect - * 12 error writing output file - * 13 error reading input file - */ - -/** - * scryptenc_buf(inbuf, inbuflen, outbuf, passwd, passwdlen, - * maxmem, maxmemfrac, maxtime): - * Encrypt inbuflen bytes from inbuf, writing the resulting inbuflen + 128 - * bytes to outbuf. - */ -int scryptenc_buf(const uint8_t *, size_t, uint8_t *, - const uint8_t *, size_t, size_t, double, double); - -/** - * scryptdec_buf(inbuf, inbuflen, outbuf, outlen, passwd, passwdlen, - * maxmem, maxmemfrac, maxtime): - * Decrypt inbuflen bytes from inbuf, writing the result into outbuf and the - * decrypted data length to outlen. The allocated length of outbuf must - * be at least inbuflen. - */ -int scryptdec_buf(const uint8_t *, size_t, uint8_t *, size_t *, - const uint8_t *, size_t, size_t, double, double); - -/** - * scryptenc_file(infile, outfile, passwd, passwdlen, - * maxmem, maxmemfrac, maxtime): - * Read a stream from infile and encrypt it, writing the resulting stream to - * outfile. - */ -int scryptenc_file(FILE *, FILE *, const uint8_t *, size_t, - size_t, double, double); - -/** - * scryptdec_file(infile, outfile, passwd, passwdlen, - * maxmem, maxmemfrac, maxtime): - * Read a stream from infile and decrypt it, writing the resulting stream to - * outfile. - */ -int scryptdec_file(FILE *, FILE *, const uint8_t *, size_t, - size_t, double, double); - -#endif /* !_SCRYPTENC_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.c deleted file mode 100644 index d5e9aaa..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.c +++ /dev/null @@ -1,190 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#include "scrypt_platform.h" - -#ifndef _MSC_VER -#include -#else /* For 'struct timeval' and custom gettimeofday() on windows */ -#include -#include "gettimeofday.h" -#endif /* _MSC_VER */ - -#include -#include -#include - -#include "crypto_scrypt.h" - -#include "scryptenc_cpuperf.h" - -#ifdef HAVE_CLOCK_GETTIME - -static clock_t clocktouse; - -static int -getclockres(double * resd) -{ - struct timespec res; - - /* - * Try clocks in order of preference until we find one which works. - * (We assume that if clock_getres works, clock_gettime will, too.) - * The use of if/else/if/else/if/else rather than if/elif/elif/else - * is ugly but legal, and allows us to #ifdef things appropriately. - */ -#ifdef CLOCK_VIRTUAL - if (clock_getres(CLOCK_VIRTUAL, &res) == 0) - clocktouse = CLOCK_VIRTUAL; - else -#endif -#ifdef CLOCK_MONOTONIC - if (clock_getres(CLOCK_MONOTONIC, &res) == 0) - clocktouse = CLOCK_MONOTONIC; - else -#endif - if (clock_getres(CLOCK_REALTIME, &res) == 0) - clocktouse = CLOCK_REALTIME; - else - return (-1); - - /* Convert clock resolution to a double. */ - *resd = res.tv_sec + res.tv_nsec * 0.000000001; - - return (0); -} - -static int -getclocktime(struct timespec * ts) -{ - - if (clock_gettime(clocktouse, ts)) - return (-1); - - return (0); -} - -#else -static int -getclockres(double * resd) -{ - - *resd = 1.0 / CLOCKS_PER_SEC; - - return (0); -} - -static int -getclocktime(struct timespec * ts) -{ - struct timeval tv; - - if (gettimeofday(&tv, NULL)) - return (-1); - ts->tv_sec = tv.tv_sec; - ts->tv_nsec = tv.tv_usec * 1000; - - return (0); -} -#endif - -static int -getclockdiff(struct timespec * st, double * diffd) -{ - struct timespec en; - - if (getclocktime(&en)) - return (1); - *diffd = (en.tv_nsec - st->tv_nsec) * 0.000000001 + - (en.tv_sec - st->tv_sec); - - return (0); -} - -/** - * scryptenc_cpuperf(opps): - * Estimate the number of salsa20/8 cores which can be executed per second, - * and return the value via opps. - */ -int -scryptenc_cpuperf(double * opps) -{ - struct timespec st; - double resd, diffd; - uint64_t i = 0; - - /* Get the clock resolution. */ - if (getclockres(&resd)) - return (2); - -#ifdef DEBUG - fprintf(stderr, "Clock resolution is %f\n", resd); -#endif - - /* Loop until the clock ticks. */ - if (getclocktime(&st)) - return (2); - do { - /* Do an scrypt. */ - if (crypto_scrypt(NULL, 0, NULL, 0, 16, 1, 1, NULL, 0)) - return (3); - - /* Has the clock ticked? */ - if (getclockdiff(&st, &diffd)) - return (2); - if (diffd > 0) - break; - } while (1); - - /* Count how many scrypts we can do before the next tick. */ - if (getclocktime(&st)) - return (2); - do { - /* Do an scrypt. */ - if (crypto_scrypt(NULL, 0, NULL, 0, 128, 1, 1, NULL, 0)) - return (3); - - /* We invoked the salsa20/8 core 512 times. */ - i += 512; - - /* Check if we have looped for long enough. */ - if (getclockdiff(&st, &diffd)) - return (2); - if (diffd > resd) - break; - } while (1); - -#ifdef DEBUG - fprintf(stderr, "%ju salsa20/8 cores performed in %f seconds\n", - (uintmax_t)i, diffd); -#endif - - /* We can do approximately i salsa20/8 cores per diffd seconds. */ - *opps = i / diffd; - return (0); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.h deleted file mode 100644 index e236fff..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.h +++ /dev/null @@ -1,39 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#ifndef _SCRYPTENC_CPUPERF_H_ -#define _SCRYPTENC_CPUPERF_H_ - -/** - * scryptenc_cpuperf(opps): - * Estimate the number of salsa20/8 cores which can be executed per second, - * and return the value via opps. - */ -int scryptenc_cpuperf(double *); - -#endif /* !_SCRYPTENC_CPUPERF_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/.deps/scrypt-memlimit.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/.deps/scrypt-memlimit.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/.deps/scrypt-memlimit.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/build/config.gypi b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/build/config.gypi deleted file mode 100644 index fc2fb50..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/build/config.gypi +++ /dev/null @@ -1,40 +0,0 @@ -# Do not edit. File was generated by node-gyp's "configure" step -{ - "target_defaults": { - "cflags": [], - "default_configuration": "Release", - "defines": [], - "include_dirs": [], - "libraries": [] - }, - "variables": { - "clang": 0, - "gcc_version": 48, - "host_arch": "x64", - "node_install_npm": "true", - "node_prefix": "/usr", - "node_shared_cares": "false", - "node_shared_http_parser": "false", - "node_shared_libuv": "false", - "node_shared_openssl": "false", - "node_shared_v8": "false", - "node_shared_zlib": "false", - "node_tag": "", - "node_unsafe_optimizations": 0, - "node_use_dtrace": "false", - "node_use_etw": "false", - "node_use_openssl": "true", - "node_use_perfctr": "false", - "node_use_systemtap": "false", - "openssl_no_asm": 0, - "python": "/usr/bin/python", - "target_arch": "x64", - "v8_enable_gdbjit": 0, - "v8_no_strict_aliasing": 1, - "v8_use_snapshot": "false", - "want_separate_host_toolset": 0, - "nodedir": "/home/baz/.node-gyp/0.10.33", - "copy_dev_lib": "true", - "standalone_static_library": 1 - } -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/memlimit.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/memlimit.c deleted file mode 100644 index a2e1da2..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/memlimit.c +++ /dev/null @@ -1,318 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#include "scrypt_platform.h" - -#include -#include - -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#ifdef HAVE_SYS_SYSCTL_H -#include -#endif -#ifdef HAVE_SYS_SYSINFO_H -#include -#endif - -#include -#include -#include -#include -#include - -#ifdef DEBUG -#include -#endif - -#include "memlimit.h" - -/* If we don't have CTL_HW, we can't use HW_USERMEM. */ -#ifndef CTL_HW -#undef HW_USERMEM -#endif - -#ifdef CTL_HW -static int -memlimit_sysctl_hw(size_t * memlimit, int mibleaf) -{ - int mib[2]; - uint8_t sysctlbuf[8]; - size_t sysctlbuflen = 8; - uint64_t sysctlval; - - /* Ask the kernel how much RAM we have. */ - mib[0] = CTL_HW; - mib[1] = mibleaf; - if (sysctl(mib, 2, sysctlbuf, &sysctlbuflen, NULL, 0)) - return (1); - - /* - * If we read 8 bytes out, assume this is a system-endian uint64_t. - * If we only read 4 bytes out, the OS is trying to give us a - * uint32_t answer -- but given how many systems now have 4GB+ of RAM, - * it's probably truncating, and we really can't trust the value we - * have returned to us. - */ - if (sysctlbuflen == sizeof(uint64_t)) - memcpy(&sysctlval, sysctlbuf, sizeof(uint64_t)); - else if (sysctlbuflen == sizeof(uint32_t)) - sysctlval = SIZE_MAX; - else - return (1); - - /* Return the sysctl value, but clamp to SIZE_MAX if necessary. */ -#if UINT64_MAX > SIZE_MAX - if (sysctlval > SIZE_MAX) - *memlimit = SIZE_MAX; - else - *memlimit = sysctlval; -#else - *memlimit = sysctlval; -#endif - - /* Success! */ - return (0); -} -#endif - -/* If we don't HAVE_STRUCT_SYSINFO, we can't use sysinfo. */ -#ifndef HAVE_STRUCT_SYSINFO -#undef HAVE_SYSINFO -#endif - -/* If we don't HAVE_STRUCT_SYSINFO_TOTALRAM, we can't use sysinfo. */ -#ifndef HAVE_STRUCT_SYSINFO_TOTALRAM -#undef HAVE_SYSINFO -#endif - -#ifdef HAVE_SYSINFO -static int -memlimit_sysinfo(size_t * memlimit) -{ - struct sysinfo info; - uint64_t totalmem; - - /* Get information from the kernel. */ - if (sysinfo(&info)) - return (1); - totalmem = info.totalram; - - /* If we're on a modern kernel, adjust based on mem_unit. */ -#ifdef HAVE_STRUCT_SYSINFO_MEM_UNIT - totalmem = totalmem * info.mem_unit; -#endif - - /* Return the value, but clamp to SIZE_MAX if necessary. */ -#if UINT64_MAX > SIZE_MAX - if (totalmem > SIZE_MAX) - *memlimit = SIZE_MAX; - else - *memlimit = totalmem; -#else - *memlimit = totalmem; -#endif - - /* Success! */ - return (0); -} -#endif /* HAVE_SYSINFO */ - -static int -memlimit_rlimit(size_t * memlimit) -{ - struct rlimit rl; - uint64_t memrlimit; - - /* Find the least of... */ - memrlimit = (uint64_t)(-1); - - /* ... RLIMIT_AS... */ -#ifdef RLIMIT_AS - if (getrlimit(RLIMIT_AS, &rl)) - return (1); - if ((rl.rlim_cur != RLIM_INFINITY) && - ((uint64_t)rl.rlim_cur < memrlimit)) - memrlimit = rl.rlim_cur; -#endif - - /* ... RLIMIT_DATA... */ - if (getrlimit(RLIMIT_DATA, &rl)) - return (1); - if ((rl.rlim_cur != RLIM_INFINITY) && - ((uint64_t)rl.rlim_cur < memrlimit)) - memrlimit = rl.rlim_cur; - - /* ... and RLIMIT_RSS. */ -#ifdef RLIMIT_RSS - if (getrlimit(RLIMIT_RSS, &rl)) - return (1); - if ((rl.rlim_cur != RLIM_INFINITY) && - ((uint64_t)rl.rlim_cur < memrlimit)) - memrlimit = rl.rlim_cur; -#endif - - /* Return the value, but clamp to SIZE_MAX if necessary. */ -#if UINT64_MAX > SIZE_MAX - if (memrlimit > SIZE_MAX) - *memlimit = SIZE_MAX; - else - *memlimit = memrlimit; -#else - *memlimit = memrlimit; -#endif - - /* Success! */ - return (0); -} - -#ifdef _SC_PHYS_PAGES - -/* Some systems define _SC_PAGESIZE instead of _SC_PAGE_SIZE. */ -#ifndef _SC_PAGE_SIZE -#define _SC_PAGE_SIZE _SC_PAGESIZE -#endif - -static int -memlimit_sysconf(size_t * memlimit) -{ - long pagesize; - long physpages; - uint64_t totalmem; - - /* Set errno to 0 in order to distinguish "no limit" from "error". */ - errno = 0; - - /* Read the two limits. */ - if (((pagesize = sysconf(_SC_PAGE_SIZE)) == -1) || - ((physpages = sysconf(_SC_PHYS_PAGES)) == -1)) { - /* Did an error occur? */ - if (errno != 0) - return (1); - - /* If not, there is no limit. */ - totalmem = (uint64_t)(-1); - } else { - /* Compute the limit. */ - totalmem = (uint64_t)(pagesize) * (uint64_t)(physpages); - } - - /* Return the value, but clamp to SIZE_MAX if necessary. */ -#if UINT64_MAX > SIZE_MAX - if (totalmem > SIZE_MAX) - *memlimit = SIZE_MAX; - else - *memlimit = totalmem; -#else - *memlimit = totalmem; -#endif - - /* Success! */ - return (0); -} -#endif - -int -memtouse(size_t maxmem, double maxmemfrac, size_t * memlimit) -{ - size_t usermem_memlimit, memsize_memlimit; - size_t sysinfo_memlimit, rlimit_memlimit; - size_t sysconf_memlimit; - size_t memlimit_min; - size_t memavail; - - /* Get memory limits. */ -#ifdef HW_USERMEM - if (memlimit_sysctl_hw(&usermem_memlimit, HW_USERMEM)) - return (1); -#else - usermem_memlimit = SIZE_MAX; -#endif -#ifdef HW_MEMSIZE - if (memlimit_sysctl_hw(&memsize_memlimit, HW_MEMSIZE)) - return (1); -#else - memsize_memlimit = SIZE_MAX; -#endif -#ifdef HAVE_SYSINFO - if (memlimit_sysinfo(&sysinfo_memlimit)) - return (1); -#else - sysinfo_memlimit = SIZE_MAX; -#endif - if (memlimit_rlimit(&rlimit_memlimit)) - return (1); -#ifdef _SC_PHYS_PAGES - if (memlimit_sysconf(&sysconf_memlimit)) - return (1); -#else - sysconf_memlimit = SIZE_MAX; -#endif - -#ifdef DEBUG - fprintf(stderr, "Memory limits are %zu %zu %zu %zu %zu\n", - usermem_memlimit, memsize_memlimit, - sysinfo_memlimit, rlimit_memlimit, - sysconf_memlimit); -#endif - - /* Find the smallest of them. */ - memlimit_min = SIZE_MAX; - if (memlimit_min > usermem_memlimit) - memlimit_min = usermem_memlimit; - if (memlimit_min > memsize_memlimit) - memlimit_min = memsize_memlimit; - if (memlimit_min > sysinfo_memlimit) - memlimit_min = sysinfo_memlimit; - if (memlimit_min > rlimit_memlimit) - memlimit_min = rlimit_memlimit; - if (memlimit_min > sysconf_memlimit) - memlimit_min = sysconf_memlimit; - - /* Only use the specified fraction of the available memory. */ - if ((maxmemfrac > 0.5) || (maxmemfrac == 0.0)) - maxmemfrac = 0.5; - memavail = maxmemfrac * memlimit_min; - - /* Don't use more than the specified maximum. */ - if ((maxmem > 0) && (memavail > maxmem)) - memavail = maxmem; - - /* But always allow at least 1 MiB. */ - if (memavail < 1048576) - memavail = 1048576; - -#ifdef DEBUG - fprintf(stderr, "Allowing up to %zu memory to be used\n", memavail); -#endif - - /* Return limit via the provided pointer. */ - *memlimit = memavail; - return (0); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/memlimit.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/memlimit.h deleted file mode 100644 index d3b4891..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/lib/util/memlimit.h +++ /dev/null @@ -1,42 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#ifndef _MEMLIMIT_H_ -#define _MEMLIMIT_H_ - -#include - -/** - * memtouse(maxmem, maxmemfrac, memlimit): - * Examine the system and return via memlimit the amount of RAM which should - * be used -- the specified fraction of the available RAM, but no more than - * maxmem, and no less than 1MiB. - */ -int memtouse(size_t, double, size_t *); - -#endif /* !_MEMLIMIT_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/COPYRIGHT b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/COPYRIGHT deleted file mode 100644 index c6794b7..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/COPYRIGHT +++ /dev/null @@ -1,26 +0,0 @@ -The code and documentation in this directory ("libcperciva") is distributed -under the following terms: - -Copyright 2005-2014 Colin Percival. All rights reserved. -Copyright 2014 Sean Kelly. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/.deps/scrypt-sha256.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/.deps/scrypt-sha256.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/.deps/scrypt-sha256.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.c deleted file mode 100644 index e204501..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.c +++ /dev/null @@ -1,442 +0,0 @@ -#include -#include -#include - -#include "insecure_memzero.h" -#include "sysendian.h" - -#include "sha256.h" - -/* - * Encode a length len/4 vector of (uint32_t) into a length len vector of - * (uint8_t) in big-endian form. Assumes len is a multiple of 4. - */ -static void -be32enc_vect(uint8_t * dst, const uint32_t * src, size_t len) -{ - size_t i; - - /* Sanity-check. */ - assert(len % 4 == 0); - - /* Encode vector, one word at a time. */ - for (i = 0; i < len / 4; i++) - be32enc(dst + i * 4, src[i]); -} - -/* - * Decode a big-endian length len vector of (uint8_t) into a length - * len/4 vector of (uint32_t). Assumes len is a multiple of 4. - */ -static void -be32dec_vect(uint32_t * dst, const uint8_t * src, size_t len) -{ - size_t i; - - /* Sanity-check. */ - assert(len % 4 == 0); - - /* Decode vector, one word at a time. */ - for (i = 0; i < len / 4; i++) - dst[i] = be32dec(src + i * 4); -} - -/* Elementary functions used by SHA256 */ -#define Ch(x, y, z) ((x & (y ^ z)) ^ z) -#define Maj(x, y, z) ((x & (y | z)) | (y & z)) -#define SHR(x, n) (x >> n) -#define ROTR(x, n) ((x >> n) | (x << (32 - n))) -#define S0(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) -#define S1(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) -#define s0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3)) -#define s1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10)) - -/* SHA256 round function */ -#define RND(a, b, c, d, e, f, g, h, k) \ - t0 = h + S1(e) + Ch(e, f, g) + k; \ - t1 = S0(a) + Maj(a, b, c); \ - d += t0; \ - h = t0 + t1; - -/* Adjusted round function for rotating state */ -#define RNDr(S, W, i, k) \ - RND(S[(64 - i) % 8], S[(65 - i) % 8], \ - S[(66 - i) % 8], S[(67 - i) % 8], \ - S[(68 - i) % 8], S[(69 - i) % 8], \ - S[(70 - i) % 8], S[(71 - i) % 8], \ - W[i] + k) - -/* - * SHA256 block compression function. The 256-bit state is transformed via - * the 512-bit input block to produce a new state. - */ -static void -SHA256_Transform(uint32_t * state, const uint8_t block[64]) -{ - uint32_t W[64]; - uint32_t S[8]; - uint32_t t0, t1; - int i; - - /* 1. Prepare message schedule W. */ - be32dec_vect(W, block, 64); - for (i = 16; i < 64; i++) - W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16]; - - /* 2. Initialize working variables. */ - memcpy(S, state, 32); - - /* 3. Mix. */ - RNDr(S, W, 0, 0x428a2f98); - RNDr(S, W, 1, 0x71374491); - RNDr(S, W, 2, 0xb5c0fbcf); - RNDr(S, W, 3, 0xe9b5dba5); - RNDr(S, W, 4, 0x3956c25b); - RNDr(S, W, 5, 0x59f111f1); - RNDr(S, W, 6, 0x923f82a4); - RNDr(S, W, 7, 0xab1c5ed5); - RNDr(S, W, 8, 0xd807aa98); - RNDr(S, W, 9, 0x12835b01); - RNDr(S, W, 10, 0x243185be); - RNDr(S, W, 11, 0x550c7dc3); - RNDr(S, W, 12, 0x72be5d74); - RNDr(S, W, 13, 0x80deb1fe); - RNDr(S, W, 14, 0x9bdc06a7); - RNDr(S, W, 15, 0xc19bf174); - RNDr(S, W, 16, 0xe49b69c1); - RNDr(S, W, 17, 0xefbe4786); - RNDr(S, W, 18, 0x0fc19dc6); - RNDr(S, W, 19, 0x240ca1cc); - RNDr(S, W, 20, 0x2de92c6f); - RNDr(S, W, 21, 0x4a7484aa); - RNDr(S, W, 22, 0x5cb0a9dc); - RNDr(S, W, 23, 0x76f988da); - RNDr(S, W, 24, 0x983e5152); - RNDr(S, W, 25, 0xa831c66d); - RNDr(S, W, 26, 0xb00327c8); - RNDr(S, W, 27, 0xbf597fc7); - RNDr(S, W, 28, 0xc6e00bf3); - RNDr(S, W, 29, 0xd5a79147); - RNDr(S, W, 30, 0x06ca6351); - RNDr(S, W, 31, 0x14292967); - RNDr(S, W, 32, 0x27b70a85); - RNDr(S, W, 33, 0x2e1b2138); - RNDr(S, W, 34, 0x4d2c6dfc); - RNDr(S, W, 35, 0x53380d13); - RNDr(S, W, 36, 0x650a7354); - RNDr(S, W, 37, 0x766a0abb); - RNDr(S, W, 38, 0x81c2c92e); - RNDr(S, W, 39, 0x92722c85); - RNDr(S, W, 40, 0xa2bfe8a1); - RNDr(S, W, 41, 0xa81a664b); - RNDr(S, W, 42, 0xc24b8b70); - RNDr(S, W, 43, 0xc76c51a3); - RNDr(S, W, 44, 0xd192e819); - RNDr(S, W, 45, 0xd6990624); - RNDr(S, W, 46, 0xf40e3585); - RNDr(S, W, 47, 0x106aa070); - RNDr(S, W, 48, 0x19a4c116); - RNDr(S, W, 49, 0x1e376c08); - RNDr(S, W, 50, 0x2748774c); - RNDr(S, W, 51, 0x34b0bcb5); - RNDr(S, W, 52, 0x391c0cb3); - RNDr(S, W, 53, 0x4ed8aa4a); - RNDr(S, W, 54, 0x5b9cca4f); - RNDr(S, W, 55, 0x682e6ff3); - RNDr(S, W, 56, 0x748f82ee); - RNDr(S, W, 57, 0x78a5636f); - RNDr(S, W, 58, 0x84c87814); - RNDr(S, W, 59, 0x8cc70208); - RNDr(S, W, 60, 0x90befffa); - RNDr(S, W, 61, 0xa4506ceb); - RNDr(S, W, 62, 0xbef9a3f7); - RNDr(S, W, 63, 0xc67178f2); - - /* 4. Mix local working variables into global state. */ - for (i = 0; i < 8; i++) - state[i] += S[i]; - - /* Clean the stack. */ - insecure_memzero(W, 256); - insecure_memzero(S, 32); - insecure_memzero(&t0, sizeof(uint32_t)); - insecure_memzero(&t1, sizeof(uint32_t)); -} - -static uint8_t PAD[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* Add padding and terminating bit-count. */ -static void -SHA256_Pad(SHA256_CTX * ctx) -{ - uint8_t len[8]; - uint32_t r, plen; - - /* - * Convert length to a vector of bytes -- we do this now rather - * than later because the length will change after we pad. - */ - be64enc(len, ctx->count); - - /* Add 1--64 bytes so that the resulting length is 56 mod 64. */ - r = (ctx->count >> 3) & 0x3f; - plen = (r < 56) ? (56 - r) : (120 - r); - SHA256_Update(ctx, PAD, (size_t)plen); - - /* Add the terminating bit-count. */ - SHA256_Update(ctx, len, 8); -} - -/* Magic initialization constants. */ -static const uint32_t initstate[8] = { - 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, - 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 -}; - -/** - * SHA256_Init(ctx): - * Initialize the SHA256 context ${ctx}. - */ -void -SHA256_Init(SHA256_CTX * ctx) -{ - - /* Zero bits processed so far. */ - ctx->count = 0; - - /* Initialize state. */ - memcpy(ctx->state, initstate, sizeof(initstate)); -} - -/** - * SHA256_Update(ctx, in, len): - * Input ${len} bytes from ${in} into the SHA256 context ${ctx}. - */ -void -SHA256_Update(SHA256_CTX * ctx, const void * in, size_t len) -{ - uint32_t r; - const uint8_t * src = in; - - /* Return immediately if we have nothing to do. */ - if (len == 0) - return; - - /* Number of bytes left in the buffer from previous updates. */ - r = (ctx->count >> 3) & 0x3f; - - /* Update number of bits. */ - ctx->count += (uint64_t)(len) << 3; - - /* Handle the case where we don't need to perform any transforms. */ - if (len < 64 - r) { - memcpy(&ctx->buf[r], src, len); - return; - } - - /* Finish the current block. */ - memcpy(&ctx->buf[r], src, 64 - r); - SHA256_Transform(ctx->state, ctx->buf); - src += 64 - r; - len -= 64 - r; - - /* Perform complete blocks. */ - while (len >= 64) { - SHA256_Transform(ctx->state, src); - src += 64; - len -= 64; - } - - /* Copy left over data into buffer. */ - memcpy(ctx->buf, src, len); -} - -/** - * SHA256_Final(digest, ctx): - * Output the SHA256 hash of the data input to the context ${ctx} into the - * buffer ${digest}. - */ -void -SHA256_Final(uint8_t digest[32], SHA256_CTX * ctx) -{ - - /* Add padding. */ - SHA256_Pad(ctx); - - /* Write the hash. */ - be32enc_vect(digest, ctx->state, 32); - - /* Clear the context state. */ - insecure_memzero(ctx, sizeof(SHA256_CTX)); -} - -/** - * SHA256_Buf(in, len, digest): - * Compute the SHA256 hash of ${len} bytes from $in} and write it to ${digest}. - */ -void -SHA256_Buf(const void * in, size_t len, uint8_t digest[32]) -{ - SHA256_CTX ctx; - - SHA256_Init(&ctx); - SHA256_Update(&ctx, in, len); - SHA256_Final(digest, &ctx); -} - -/** - * HMAC_SHA256_Init(ctx, K, Klen): - * Initialize the HMAC-SHA256 context ${ctx} with ${Klen} bytes of key from - * ${K}. - */ -void -HMAC_SHA256_Init(HMAC_SHA256_CTX * ctx, const void * _K, size_t Klen) -{ - uint8_t pad[64]; - uint8_t khash[32]; - const uint8_t * K = _K; - size_t i; - - /* If Klen > 64, the key is really SHA256(K). */ - if (Klen > 64) { - SHA256_Init(&ctx->ictx); - SHA256_Update(&ctx->ictx, K, Klen); - SHA256_Final(khash, &ctx->ictx); - K = khash; - Klen = 32; - } - - /* Inner SHA256 operation is SHA256(K xor [block of 0x36] || data). */ - SHA256_Init(&ctx->ictx); - memset(pad, 0x36, 64); - for (i = 0; i < Klen; i++) - pad[i] ^= K[i]; - SHA256_Update(&ctx->ictx, pad, 64); - - /* Outer SHA256 operation is SHA256(K xor [block of 0x5c] || hash). */ - SHA256_Init(&ctx->octx); - memset(pad, 0x5c, 64); - for (i = 0; i < Klen; i++) - pad[i] ^= K[i]; - SHA256_Update(&ctx->octx, pad, 64); - - /* Clean the stack. */ - insecure_memzero(khash, 32); - insecure_memzero(pad, 64); -} - -/** - * HMAC_SHA256_Update(ctx, in, len): - * Input ${len} bytes from ${in} into the HMAC-SHA256 context ${ctx}. - */ -void -HMAC_SHA256_Update(HMAC_SHA256_CTX * ctx, const void * in, size_t len) -{ - - /* Feed data to the inner SHA256 operation. */ - SHA256_Update(&ctx->ictx, in, len); -} - -/** - * HMAC_SHA256_Final(digest, ctx): - * Output the HMAC-SHA256 of the data input to the context ${ctx} into the - * buffer ${digest}. - */ -void -HMAC_SHA256_Final(uint8_t digest[32], HMAC_SHA256_CTX * ctx) -{ - uint8_t ihash[32]; - - /* Finish the inner SHA256 operation. */ - SHA256_Final(ihash, &ctx->ictx); - - /* Feed the inner hash to the outer SHA256 operation. */ - SHA256_Update(&ctx->octx, ihash, 32); - - /* Finish the outer SHA256 operation. */ - SHA256_Final(digest, &ctx->octx); - - /* Clean the stack. */ - insecure_memzero(ihash, 32); -} - -/** - * HMAC_SHA256_Buf(K, Klen, in, len, digest): - * Compute the HMAC-SHA256 of ${len} bytes from ${in} using the key ${K} of - * length ${Klen}, and write the result to ${digest}. - */ -void -HMAC_SHA256_Buf(const void * K, size_t Klen, const void * in, size_t len, - uint8_t digest[32]) -{ - HMAC_SHA256_CTX ctx; - - HMAC_SHA256_Init(&ctx, K, Klen); - HMAC_SHA256_Update(&ctx, in, len); - HMAC_SHA256_Final(digest, &ctx); -} - -/** - * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen): - * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and - * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). - */ -void -PBKDF2_SHA256(const uint8_t * passwd, size_t passwdlen, const uint8_t * salt, - size_t saltlen, uint64_t c, uint8_t * buf, size_t dkLen) -{ - HMAC_SHA256_CTX PShctx, hctx; - size_t i; - uint8_t ivec[4]; - uint8_t U[32]; - uint8_t T[32]; - uint64_t j; - int k; - size_t clen; - - /* Sanity-check. */ - assert(dkLen <= 32 * (size_t)(UINT32_MAX)); - - /* Compute HMAC state after processing P and S. */ - HMAC_SHA256_Init(&PShctx, passwd, passwdlen); - HMAC_SHA256_Update(&PShctx, salt, saltlen); - - /* Iterate through the blocks. */ - for (i = 0; i * 32 < dkLen; i++) { - /* Generate INT(i + 1). */ - be32enc(ivec, (uint32_t)(i + 1)); - - /* Compute U_1 = PRF(P, S || INT(i)). */ - memcpy(&hctx, &PShctx, sizeof(HMAC_SHA256_CTX)); - HMAC_SHA256_Update(&hctx, ivec, 4); - HMAC_SHA256_Final(U, &hctx); - - /* T_i = U_1 ... */ - memcpy(T, U, 32); - - for (j = 2; j <= c; j++) { - /* Compute U_j. */ - HMAC_SHA256_Init(&hctx, passwd, passwdlen); - HMAC_SHA256_Update(&hctx, U, 32); - HMAC_SHA256_Final(U, &hctx); - - /* ... xor U_j ... */ - for (k = 0; k < 32; k++) - T[k] ^= U[k]; - } - - /* Copy as many bytes as necessary into buf. */ - clen = dkLen - i * 32; - if (clen > 32) - clen = 32; - memcpy(&buf[i * 32], T, clen); - } - - /* Clean PShctx, since we never called _Final on it. */ - insecure_memzero(&PShctx, sizeof(HMAC_SHA256_CTX)); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h deleted file mode 100644 index 5cd824b..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef _SHA256_H_ -#define _SHA256_H_ - -#include -#include - -/* - * Use #defines in order to avoid namespace collisions with anyone else's - * SHA256 code (e.g., the code in OpenSSL). - */ -#define SHA256_Init libcperciva_SHA256_Init -#define SHA256_Update libcperciva_SHA256_Update -#define SHA256_Final libcperciva_SHA256_Final -#define SHA256_Buf libcperciva_SHA256_Buf -#define SHA256_CTX libcperciva_SHA256_CTX -#define HMAC_SHA256_Init libcperciva_HMAC_SHA256_Init -#define HMAC_SHA256_Update libcperciva_HMAC_SHA256_Update -#define HMAC_SHA256_Final libcperciva_HMAC_SHA256_Final -#define HMAC_SHA256_Buf libcperciva_HMAC_SHA256_Buf -#define HMAC_SHA256_CTX libcperciva_HMAC_SHA256_CTX - -/* Context structure for SHA256 operations. */ -typedef struct { - uint32_t state[8]; - uint64_t count; - uint8_t buf[64]; -} SHA256_CTX; - -/** - * SHA256_Init(ctx): - * Initialize the SHA256 context ${ctx}. - */ -void SHA256_Init(SHA256_CTX *); - -/** - * SHA256_Update(ctx, in, len): - * Input ${len} bytes from ${in} into the SHA256 context ${ctx}. - */ -void SHA256_Update(SHA256_CTX *, const void *, size_t); - -/** - * SHA256_Final(digest, ctx): - * Output the SHA256 hash of the data input to the context ${ctx} into the - * buffer ${digest}. - */ -void SHA256_Final(uint8_t[32], SHA256_CTX *); - -/** - * SHA256_Buf(in, len, digest): - * Compute the SHA256 hash of ${len} bytes from $in} and write it to ${digest}. - */ -void SHA256_Buf(const void *, size_t, uint8_t[32]); - -/* Context structure for HMAC-SHA256 operations. */ -typedef struct { - SHA256_CTX ictx; - SHA256_CTX octx; -} HMAC_SHA256_CTX; - -/** - * HMAC_SHA256_Init(ctx, K, Klen): - * Initialize the HMAC-SHA256 context ${ctx} with ${Klen} bytes of key from - * ${K}. - */ -void HMAC_SHA256_Init(HMAC_SHA256_CTX *, const void *, size_t); - -/** - * HMAC_SHA256_Update(ctx, in, len): - * Input ${len} bytes from ${in} into the HMAC-SHA256 context ${ctx}. - */ -void HMAC_SHA256_Update(HMAC_SHA256_CTX *, const void *, size_t); - -/** - * HMAC_SHA256_Final(digest, ctx): - * Output the HMAC-SHA256 of the data input to the context ${ctx} into the - * buffer ${digest}. - */ -void HMAC_SHA256_Final(uint8_t[32], HMAC_SHA256_CTX *); - -/** - * HMAC_SHA256_Buf(K, Klen, in, len, digest): - * Compute the HMAC-SHA256 of ${len} bytes from ${in} using the key ${K} of - * length ${Klen}, and write the result to ${digest}. - */ -void HMAC_SHA256_Buf(const void *, size_t, const void *, size_t, uint8_t[32]); - -/** - * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen): - * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and - * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). - */ -void PBKDF2_SHA256(const uint8_t *, size_t, const uint8_t *, size_t, - uint64_t, uint8_t *, size_t); - -#endif /* !_SHA256_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/.deps/scrypt-cpusupport_x86_aesni.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/.deps/scrypt-cpusupport_x86_aesni.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/.deps/scrypt-cpusupport_x86_aesni.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/.deps/scrypt-cpusupport_x86_sse2.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/.deps/scrypt-cpusupport_x86_sse2.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/.deps/scrypt-cpusupport_x86_sse2.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-AESNI.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-AESNI.c deleted file mode 100644 index 2af3b76..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-AESNI.c +++ /dev/null @@ -1,13 +0,0 @@ -#include - -static char a[16]; - -int main(void) -{ - __m128i x, y; - - x = _mm_loadu_si128((__m128i *)a); - y = _mm_aesenc_si128(x, x); - _mm_storeu_si128((__m128i *)a, y); - return (a[0]); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-CPUID.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-CPUID.c deleted file mode 100644 index 96ddde6..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-CPUID.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -int main(void) -{ - unsigned int a, b, c, d; - - return __get_cpuid(0, &a, &b, &c, &d); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-SSE2.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-SSE2.c deleted file mode 100644 index 0a5ad6c..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport-X86-SSE2.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -static char a[16]; - -int main(void) -{ - __m128i x; - - x = _mm_loadu_si128((__m128i *)a); - _mm_storeu_si128((__m128i *)a, x); - return (a[0]); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport.sh b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport.sh deleted file mode 100755 index 05051fd..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/Build/cpusupport.sh +++ /dev/null @@ -1,41 +0,0 @@ -# Should be sourced by `command -p sh path/to/cpusupport.sh` from -# within a Makefile. -# Standard output should be written to cpusupport-config.h, which is both a -# C header file defining CPUSUPPORT_ARCH_FEATURE macros and sourceable sh -# code which sets CFLAGS_ARCH_FEATURE environment variables. -SRCDIR=`command -p dirname "$0"` - -feature() { - ARCH=$1 - FEATURE=$2 - shift 2; - printf "Checking if compiler supports $ARCH $FEATURE feature..." 1>&2 - for CFLAG in "$@"; do - if ${CC} ${CFLAGS} -D_POSIX_C_SOURCE=200809L ${CFLAG} \ - ${SRCDIR}/cpusupport-$ARCH-$FEATURE.c 2>/dev/null; then - rm -f a.out - break; - fi - CFLAG=NOTSUPPORTED; - done - case $CFLAG in - NOTSUPPORTED) - echo " no" 1>&2 - ;; - "") - echo " yes" 1>&2 - echo "#define CPUSUPPORT_${ARCH}_${FEATURE}" - ;; - *) - echo " yes, via $CFLAG" 1>&2 - echo "#define CPUSUPPORT_${ARCH}_${FEATURE}" - echo "#ifdef cpusupport_dummy" - echo "export CFLAGS_${ARCH}_${FEATURE}=\"${CFLAG}\"" - echo "#endif" - ;; - esac -} - -feature X86 CPUID "" -feature X86 SSE2 "" "-msse2" "-msse2 -Wno-cast-align" -feature X86 AESNI "" "-maes" "-maes -Wno-cast-align" "-maes -Wno-missing-prototypes -Wno-cast-qual" diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport.h deleted file mode 100644 index 36d3a07..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef _CPUSUPPORT_H_ -#define _CPUSUPPORT_H_ - -/* - * To enable support for non-portable CPU features at compile time, one or - * more CPUSUPPORT_ARCH_FEATURE macros should be defined. This can be done - * directly on the compiler command line; or a file can be created with the - * necessary #define lines and then -D CPUSUPPORT_CONFIG_FILE=cpuconfig.h - * (or similar) can be provided to include that file here. - */ -#ifdef CPUSUPPORT_CONFIG_FILE -#include CPUSUPPORT_CONFIG_FILE -#endif - -/* - * The CPUSUPPORT_FEATURE macro declares the necessary variables and - * functions for detecting CPU feature support at run time. The function - * defined in the macro acts to cache the result of the ..._detect function - * using the ..._present and ..._init variables. - */ -#define CPUSUPPORT_FEATURE(arch, feature) \ - extern int cpusupport_ ## arch ## _ ## feature ## _present; \ - extern int cpusupport_ ## arch ## _ ## feature ## _init; \ - int cpusupport_ ## arch ## _ ## feature ## _detect(void); \ - \ - static inline int \ - cpusupport_ ## arch ## _ ## feature(void) \ - { \ - \ - if (cpusupport_ ## arch ## _ ## feature ## _present) \ - return (1); \ - else if (cpusupport_ ## arch ## _ ## feature ## _init) \ - return (0); \ - cpusupport_ ## arch ## _ ## feature ## _present = \ - cpusupport_ ## arch ##_ ## feature ## _detect(); \ - cpusupport_ ## arch ## _ ## feature ## _init = 1; \ - return (cpusupport_ ## arch ## _ ## feature ## _present); \ - } \ - struct cpusupport_ ## arch ## _ ## feature ## _dummy - -/* - * CPUSUPPORT_FEATURE_DECL(arch, feature): - * Macro which defines variables and provides a function declaration for - * detecting the presence of "feature" on the "arch" architecture. The - * function body following this macro expansion must return nonzero if the - * feature is present, or zero if the feature is not present or the detection - * fails for any reason. - */ -#define CPUSUPPORT_FEATURE_DECL(arch, feature) \ - int cpusupport_ ## arch ## _ ## feature ## _present = 0; \ - int cpusupport_ ## arch ## _ ## feature ## _init = 0; \ - int \ - cpusupport_ ## arch ## _ ## feature ## _detect(void) - -/* - * Any features listed here must have associated C files compiled and linked - * in, since the macro references symbols which must be defined. Projects - * which do not need to detect certain CPU features may wish to remove lines - * from this list so that the associated C files can be omitted. - */ -CPUSUPPORT_FEATURE(x86, aesni); -CPUSUPPORT_FEATURE(x86, sse2); - -#endif /* !_CPUSUPPORT_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport_x86_aesni.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport_x86_aesni.c deleted file mode 100644 index e415999..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport_x86_aesni.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "cpusupport.h" - -#ifdef CPUSUPPORT_X86_CPUID -#include -#endif - -#define CPUID_AESNI_BIT (1 << 25) - -CPUSUPPORT_FEATURE_DECL(x86, aesni) -{ -#ifdef CPUSUPPORT_X86_CPUID - unsigned int eax, ebx, ecx, edx; - - /* Check if CPUID supports the level we need. */ - if (!__get_cpuid(0, &eax, &ebx, &ecx, &edx)) - goto unsupported; - if (eax < 1) - goto unsupported; - - /* Ask about CPU features. */ - if (!__get_cpuid(1, &eax, &ebx, &ecx, &edx)) - goto unsupported; - - /* Return the relevant feature bit. */ - return (ecx & CPUID_AESNI_BIT); - -unsupported: -#endif - return (0); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport_x86_sse2.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport_x86_sse2.c deleted file mode 100644 index 848bcf9..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/cpusupport/cpusupport_x86_sse2.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "cpusupport.h" - -#ifdef CPUSUPPORT_X86_CPUID -#include -#endif - -#define CPUID_SSE2_BIT (1 << 26) - -CPUSUPPORT_FEATURE_DECL(x86, sse2) -{ -#ifdef CPUSUPPORT_X86_CPUID - unsigned int eax, ebx, ecx, edx; - - /* Check if CPUID supports the level we need. */ - if (!__get_cpuid(0, &eax, &ebx, &ecx, &edx)) - goto unsupported; - if (eax < 1) - goto unsupported; - - /* Ask about CPU features. */ - if (!__get_cpuid(1, &eax, &ebx, &ecx, &edx)) - goto unsupported; - - /* Return the relevant feature bit. */ - return (edx & CPUID_SSE2_BIT); - -unsupported: -#endif - return (0); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/libcperciva_aesni_a-crypto_aes_aesni.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/libcperciva_aesni_a-crypto_aes_aesni.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/libcperciva_aesni_a-crypto_aes_aesni.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_aes.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_aes.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_aes.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_aesctr.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_aesctr.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_aesctr.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_entropy.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_entropy.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/.deps/scrypt-crypto_entropy.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes.c deleted file mode 100644 index 41d5e12..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes.c +++ /dev/null @@ -1,166 +0,0 @@ -#include -#include -#include -#include - -#include - -#include "cpusupport.h" -#include "crypto_aes_aesni.h" -#include "insecure_memzero.h" -#include "warnp.h" - -#include "crypto_aes.h" - -/** - * This represents either an AES_KEY or a struct crypto_aes_key_aesni; we - * know which it is based on whether we're using AESNI code or not. As such, - * it's just an opaque pointer; but declaring it as a named structure type - * prevents type-mismatch bugs in upstream code. - */ -struct crypto_aes_key; - -#ifdef CPUSUPPORT_X86_AESNI -/* Test whether OpenSSL and AESNI code produce the same AES ciphertext. */ -static int -aesnitest(uint8_t ptext[16], uint8_t * key, size_t keylen) -{ - AES_KEY kexp_openssl; - void * kexp_aesni; - uint8_t ctext_openssl[16]; - uint8_t ctext_aesni[16]; - - /* Expand the key. */ - AES_set_encrypt_key(key, keylen * 8, &kexp_openssl); - if ((kexp_aesni = crypto_aes_key_expand_aesni(key, keylen)) == NULL) - goto err0; - - /* Encrypt the block. */ - AES_encrypt(ptext, ctext_openssl, &kexp_openssl); - crypto_aes_encrypt_block_aesni(ptext, ctext_aesni, kexp_aesni); - - /* Free the AESNI expanded key. */ - crypto_aes_key_free_aesni(kexp_aesni); - - /* Do the outputs match? */ - return (memcmp(ctext_openssl, ctext_aesni, 16)); - -err0: - /* Failure! */ - return (-1); -} - -/* Should we use AESNI? */ -static int -useaesni(void) -{ - static int aesnigood = -1; - uint8_t key[32]; - uint8_t ptext[16]; - size_t i; - - /* If we haven't decided which code to use yet, decide now. */ - while (aesnigood == -1) { - /* Default to OpenSSL. */ - aesnigood = 0; - - /* If the CPU doesn't claim to support AESNI, stop here. */ - if (!cpusupport_x86_aesni()) - break; - - /* Test cases: key is 0x00010203..., ptext is 0x00112233... */ - for (i = 0; i < 16; i++) - ptext[i] = 0x11 * i; - for (i = 0; i < 32; i++) - key[i] = i; - - /* Test that AESNI and OpenSSL produce the same results. */ - if (aesnitest(ptext, key, 16) || aesnitest(ptext, key, 32)) { - warn0("Disabling AESNI due to failed self-test"); - break; - } - - /* AESNI works; use it. */ - aesnigood = 1; - } - - return (aesnigood); -} -#endif /* CPUSUPPORT_X86_AESNI */ - -/** - * crypto_aes_key_expand(key, len): - * Expand the ${len}-byte AES key ${key} into a structure which can be passed - * to crypto_aes_encrypt_block. The length must be 16 or 32. - */ -struct crypto_aes_key * -crypto_aes_key_expand(const uint8_t * key, size_t len) -{ - AES_KEY * kexp; - - /* Sanity-check. */ - assert((len == 16) || (len == 32)); - -#ifdef CPUSUPPORT_X86_AESNI - /* Use AESNI if we can. */ - if (useaesni()) - return (crypto_aes_key_expand_aesni(key, len)); -#endif - - /* Allocate structure. */ - if ((kexp = malloc(sizeof(AES_KEY))) == NULL) - goto err0; - - /* Expand the key. */ - AES_set_encrypt_key(key, len * 8, kexp); - - /* Success! */ - return ((void *)kexp); - -err0: - /* Failure! */ - return (NULL); -} - -/** - * crypto_aes_encrypt_block(in, out, key): - * Using the expanded AES key ${key}, encrypt the block ${in} and write the - * resulting ciphertext to ${out}. - */ -void -crypto_aes_encrypt_block(const uint8_t * in, uint8_t * out, - const struct crypto_aes_key * key) -{ - -#ifdef CPUSUPPORT_X86_AESNI - if (useaesni()) { - crypto_aes_encrypt_block_aesni(in, out, (const void *)key); - return; - } -#endif - - /* Get AES to do the work. */ - AES_encrypt(in, out, (const void *)key); -} - -/** - * crypto_aes_key_free(key): - * Free the expanded AES key ${key}. - */ -void -crypto_aes_key_free(struct crypto_aes_key * key) -{ - -#ifdef CPUSUPPORT_X86_AESNI - if (useaesni()) { - crypto_aes_key_free_aesni((void *)key); - return; - } -#endif - - /* Attempt to zero the expanded key. */ - insecure_memzero(key, sizeof(AES_KEY)); - - /* Free the key. */ - free(key); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes.h deleted file mode 100644 index beaac65..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _CRYPTO_AES_H_ -#define _CRYPTO_AES_H_ - -#include -#include - -/* Opaque structure. */ -struct crypto_aes_key; - -/** - * crypto_aes_key_expand(key, len): - * Expand the ${len}-byte AES key ${key} into a structure which can be passed - * to crypto_aes_encrypt_block. The length must be 16 or 32. - */ -struct crypto_aes_key * crypto_aes_key_expand(const uint8_t *, size_t); - -/** - * crypto_aes_encrypt_block(in, out, key): - * Using the expanded AES key ${key}, encrypt the block ${in} and write the - * resulting ciphertext to ${out}. - */ -void crypto_aes_encrypt_block(const uint8_t *, uint8_t *, - const struct crypto_aes_key *); - -/** - * crypto_aes_key_free(key): - * Free the expanded AES key ${key}. - */ -void crypto_aes_key_free(struct crypto_aes_key *); - -#endif /* !_CRYPTO_AES_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes_aesni.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes_aesni.c deleted file mode 100644 index 4559c1a..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes_aesni.c +++ /dev/null @@ -1,236 +0,0 @@ -#include "cpusupport.h" -#ifdef CPUSUPPORT_X86_AESNI - -#include -#include -#include -#include - -#include "insecure_memzero.h" -#include "warnp.h" - -#include "crypto_aes_aesni.h" - -/* Expanded-key structure. */ -struct crypto_aes_key_aesni { - uint8_t rkeys_buf[15 * sizeof(__m128i) + (sizeof(__m128i) - 1)]; - __m128i * rkeys; - size_t nr; -}; - -/* Compute an AES-128 round key. */ -#define MKRKEY128(rkeys, i, rcon) do { \ - __m128i _s = rkeys[i - 1]; \ - __m128i _t = rkeys[i - 1]; \ - _s = _mm_xor_si128(_s, _mm_slli_si128(_s, 4)); \ - _s = _mm_xor_si128(_s, _mm_slli_si128(_s, 8)); \ - _t = _mm_aeskeygenassist_si128(_t, rcon); \ - _t = _mm_shuffle_epi32(_t, 0xff); \ - rkeys[i] = _mm_xor_si128(_s, _t); \ -} while (0) - -/** - * crypto_aes_key_expand_128_aesni(key, rkeys): - * Expand the 128-bit AES key ${key} into the 11 round keys ${rkeys}. This - * implementation uses x86 AESNI instructions, and should only be used if - * CPUSUPPORT_X86_AESNI is defined and cpusupport_x86_aesni() returns nonzero. - */ -static void -crypto_aes_key_expand_128_aesni(const uint8_t key[16], __m128i rkeys[11]) -{ - - /* The first round key is just the key. */ - /** - * XXX Compiler breakage: - * The intrinsic defined by Intel for _mm_loadu_si128 defines it as - * taking a (const __m128i *) parameter. This forces us to write a - * bug: The cast to (const __m128i *) is invalid since it increases - * the alignment requirement of the pointer. Alas, until compilers - * get fixed intrinsics, all we can do is code the bug and require - * that alignment-requirement-increasing compiler warnings get - * disabled. - */ - rkeys[0] = _mm_loadu_si128((const __m128i *)&key[0]); - - /* - * Each of the remaining round keys are computed from the preceding - * round key: rotword+subword+rcon (provided as aeskeygenassist) to - * compute the 'temp' value, then xor with 1, 2, 3, or all 4 of the - * 32-bit words from the preceding round key. Unfortunately, 'rcon' - * is encoded as an immediate value, so we need to write the loop out - * ourselves rather than allowing the compiler to expand it. - */ - MKRKEY128(rkeys, 1, 0x01); - MKRKEY128(rkeys, 2, 0x02); - MKRKEY128(rkeys, 3, 0x04); - MKRKEY128(rkeys, 4, 0x08); - MKRKEY128(rkeys, 5, 0x10); - MKRKEY128(rkeys, 6, 0x20); - MKRKEY128(rkeys, 7, 0x40); - MKRKEY128(rkeys, 8, 0x80); - MKRKEY128(rkeys, 9, 0x1b); - MKRKEY128(rkeys, 10, 0x36); -} - -/* Compute an AES-256 round key. */ -#define MKRKEY256(rkeys, i, shuffle, rcon) do { \ - __m128i _s = rkeys[i - 2]; \ - __m128i _t = rkeys[i - 1]; \ - _s = _mm_xor_si128(_s, _mm_slli_si128(_s, 4)); \ - _s = _mm_xor_si128(_s, _mm_slli_si128(_s, 8)); \ - _t = _mm_aeskeygenassist_si128(_t, rcon); \ - _t = _mm_shuffle_epi32(_t, shuffle); \ - rkeys[i] = _mm_xor_si128(_s, _t); \ -} while (0) - -/** - * crypto_aes_key_expand_256_aesni(key, rkeys): - * Expand the 256-bit AES key ${key} into the 15 round keys ${rkeys}. This - * implementation uses x86 AESNI instructions, and should only be used if - * CPUSUPPORT_X86_AESNI is defined and cpusupport_x86_aesni() returns nonzero. - */ -static void -crypto_aes_key_expand_256_aesni(const uint8_t key[32], __m128i rkeys[15]) -{ - - /* The first two round keys are just the key. */ - /** - * XXX Compiler breakage: - * The intrinsic defined by Intel for _mm_loadu_si128 defines it as - * taking a (const __m128i *) parameter. This forces us to write a - * bug: The cast to (const __m128i *) is invalid since it increases - * the alignment requirement of the pointer. Alas, until compilers - * get fixed intrinsics, all we can do is code the bug and require - * that alignment-requirement-increasing compiler warnings get - * disabled. - */ - rkeys[0] = _mm_loadu_si128((const __m128i *)&key[0]); - rkeys[1] = _mm_loadu_si128((const __m128i *)&key[16]); - - /* - * Each of the remaining round keys are computed from the preceding - * pair of keys. Even rounds use rotword+subword+rcon, while odd - * rounds just use subword; the aeskeygenassist instruction computes - * both, and we use 0xff or 0xaa to select the one we need. The rcon - * value used is irrelevant for odd rounds since we ignore the value - * which it feeds into. Unfortunately, the 'shuffle' and 'rcon' - * values are encoded into the instructions as immediates, so we need - * to write the loop out ourselves rather than allowing the compiler - * to expand it. - */ - MKRKEY256(rkeys, 2, 0xff, 0x01); - MKRKEY256(rkeys, 3, 0xaa, 0x00); - MKRKEY256(rkeys, 4, 0xff, 0x02); - MKRKEY256(rkeys, 5, 0xaa, 0x00); - MKRKEY256(rkeys, 6, 0xff, 0x04); - MKRKEY256(rkeys, 7, 0xaa, 0x00); - MKRKEY256(rkeys, 8, 0xff, 0x08); - MKRKEY256(rkeys, 9, 0xaa, 0x00); - MKRKEY256(rkeys, 10, 0xff, 0x10); - MKRKEY256(rkeys, 11, 0xaa, 0x00); - MKRKEY256(rkeys, 12, 0xff, 0x20); - MKRKEY256(rkeys, 13, 0xaa, 0x00); - MKRKEY256(rkeys, 14, 0xff, 0x40); -} - -/** - * crypto_aes_key_expand_aesni(key, len): - * Expand the ${len}-byte AES key ${key} into a structure which can be passed - * to crypto_aes_encrypt_block_aesni. The length must be 16 or 32. This - * implementation uses x86 AESNI instructions, and should only be used if - * CPUSUPPORT_X86_AESNI is defined and cpusupport_x86_aesni() returns nonzero. - */ -void * -crypto_aes_key_expand_aesni(const uint8_t * key, size_t len) -{ - struct crypto_aes_key_aesni * kexp; - size_t rkey_offset; - - /* Allocate structure. */ - if ((kexp = malloc(sizeof(struct crypto_aes_key_aesni))) == NULL) - goto err0; - - /* Figure out where to put the round keys. */ - rkey_offset = (uintptr_t)(&kexp->rkeys_buf[0]) % sizeof(__m128i); - rkey_offset = (sizeof(__m128i) - rkey_offset) % sizeof(__m128i); - kexp->rkeys = (void *)&kexp->rkeys_buf[rkey_offset]; - - /* Compute round keys. */ - if (len == 16) { - kexp->nr = 10; - crypto_aes_key_expand_128_aesni(key, kexp->rkeys); - } else if (len == 32) { - kexp->nr = 14; - crypto_aes_key_expand_256_aesni(key, kexp->rkeys); - } else { - warn0("Unsupported AES key length: %zu bytes", len); - goto err1; - } - - /* Success! */ - return (kexp); - -err1: - free(kexp); -err0: - /* Failure! */ - return (NULL); -} - -/** - * crypto_aes_encrypt_block_aesni(in, out, key): - * Using the expanded AES key ${key}, encrypt the block ${in} and write the - * resulting ciphertext to ${out}. This implementation uses x86 AESNI - * instructions, and should only be used if CPUSUPPORT_X86_AESNI is defined - * and cpusupport_x86_aesni() returns nonzero. - */ -void -crypto_aes_encrypt_block_aesni(const uint8_t * in, uint8_t * out, - const void * key) -{ - const struct crypto_aes_key_aesni * _key = key; - const __m128i * aes_key = _key->rkeys; - __m128i aes_state; - size_t nr = _key->nr; - - aes_state = _mm_loadu_si128((const __m128i *)in); - aes_state = _mm_xor_si128(aes_state, aes_key[0]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[1]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[2]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[3]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[4]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[5]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[6]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[7]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[8]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[9]); - if (nr > 10) { - aes_state = _mm_aesenc_si128(aes_state, aes_key[10]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[11]); - - if (nr > 12) { - aes_state = _mm_aesenc_si128(aes_state, aes_key[12]); - aes_state = _mm_aesenc_si128(aes_state, aes_key[13]); - } - } - - aes_state = _mm_aesenclast_si128(aes_state, aes_key[nr]); - _mm_storeu_si128((__m128i *)out, aes_state); -} - -/** - * crypto_aes_key_free_aesni(key): - * Free the expanded AES key ${key}. - */ -void -crypto_aes_key_free_aesni(void * key) -{ - - /* Attempt to zero the expanded key. */ - insecure_memzero(key, sizeof(struct crypto_aes_key_aesni)); - - /* Free the key. */ - free(key); -} - -#endif /* CPUSUPPORT_X86_AESNI */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes_aesni.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes_aesni.h deleted file mode 100644 index af5a55a..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aes_aesni.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _CRYPTO_AES_AESNI_H_ -#define _CRYPTO_AES_AESNI_H_ - -#include -#include - -/** - * crypto_aes_key_expand_aesni(key, len): - * Expand the ${len}-byte AES key ${key} into a structure which can be passed - * to crypto_aes_encrypt_block_aesni. The length must be 16 or 32. This - * implementation uses x86 AESNI instructions, and should only be used if - * CPUSUPPORT_X86_AESNI is defined and cpusupport_x86_aesni() returns nonzero. - */ -void * crypto_aes_key_expand_aesni(const uint8_t *, size_t); - -/** - * crypto_aes_encrypt_block_aesni(in, out, key): - * Using the expanded AES key ${key}, encrypt the block ${in} and write the - * resulting ciphertext to ${out}. This implementation uses x86 AESNI - * instructions, and should only be used if CPUSUPPORT_X86_AESNI is defined - * and cpusupport_x86_aesni() returns nonzero. - */ -void crypto_aes_encrypt_block_aesni(const uint8_t *, uint8_t *, const void *); - -/** - * crypto_aes_key_free_aesni(key): - * Free the expanded AES key ${key}. - */ -void crypto_aes_key_free_aesni(void *); - -#endif /* !_CRYPTO_AES_AESNI_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aesctr.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aesctr.c deleted file mode 100644 index a8900f0..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aesctr.c +++ /dev/null @@ -1,124 +0,0 @@ -#include -#include - -#include "crypto_aes.h" -#include "sysendian.h" - -#include "crypto_aesctr.h" - -struct crypto_aesctr { - const struct crypto_aes_key * key; - uint64_t nonce; - uint64_t bytectr; - uint8_t buf[16]; -}; - -/** - * crypto_aesctr_init(key, nonce): - * Prepare to encrypt/decrypt data with AES in CTR mode, using the provided - * expanded key and nonce. The key provided must remain valid for the - * lifetime of the stream. - */ -struct crypto_aesctr * -crypto_aesctr_init(const struct crypto_aes_key * key, uint64_t nonce) -{ - struct crypto_aesctr * stream; - - /* Allocate memory. */ - if ((stream = malloc(sizeof(struct crypto_aesctr))) == NULL) - goto err0; - - /* Initialize values. */ - stream->key = key; - stream->nonce = nonce; - stream->bytectr = 0; - - /* Success! */ - return (stream); - -err0: - /* Failure! */ - return (NULL); -} - -/** - * crypto_aesctr_stream(stream, inbuf, outbuf, buflen): - * Generate the next ${buflen} bytes of the AES-CTR stream and xor them with - * bytes from ${inbuf}, writing the result into ${outbuf}. If the buffers - * ${inbuf} and ${outbuf} overlap, they must be identical. - */ -void -crypto_aesctr_stream(struct crypto_aesctr * stream, const uint8_t * inbuf, - uint8_t * outbuf, size_t buflen) -{ - uint8_t pblk[16]; - size_t pos; - int bytemod; - - for (pos = 0; pos < buflen; pos++) { - /* How far through the buffer are we? */ - bytemod = stream->bytectr % 16; - - /* Generate a block of cipherstream if needed. */ - if (bytemod == 0) { - be64enc(pblk, stream->nonce); - be64enc(pblk + 8, stream->bytectr / 16); - crypto_aes_encrypt_block(pblk, stream->buf, - stream->key); - } - - /* Encrypt a byte. */ - outbuf[pos] = inbuf[pos] ^ stream->buf[bytemod]; - - /* Move to the next byte of cipherstream. */ - stream->bytectr += 1; - } -} - -/** - * crypto_aesctr_free(stream): - * Free the provided stream object. - */ -void -crypto_aesctr_free(struct crypto_aesctr * stream) -{ - int i; - - /* Be compatible with free(NULL). */ - if (stream == NULL) - return; - - /* Zero potentially sensitive information. */ - for (i = 0; i < 16; i++) - stream->buf[i] = 0; - stream->bytectr = stream->nonce = 0; - - /* Free the stream. */ - free(stream); -} - -/** - * crypto_aesctr_buf(key, nonce, inbuf, outbuf, buflen): - * Equivalent to init(key, nonce); stream(inbuf, outbuf, buflen); free. - */ -void -crypto_aesctr_buf(const struct crypto_aes_key * key, uint64_t nonce, - const uint8_t * inbuf, uint8_t * outbuf, size_t buflen) -{ - struct crypto_aesctr stream_rec; - struct crypto_aesctr * stream = &stream_rec; - int i; - - /* Initialize values. */ - stream->key = key; - stream->nonce = nonce; - stream->bytectr = 0; - - /* Perform the encryption. */ - crypto_aesctr_stream(stream, inbuf, outbuf, buflen); - - /* Zero potentially sensitive information. */ - for (i = 0; i < 16; i++) - stream->buf[i] = 0; - stream->bytectr = stream->nonce = 0; -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aesctr.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aesctr.h deleted file mode 100644 index 7ab9839..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_aesctr.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _CRYPTO_AESCTR_H_ -#define _CRYPTO_AESCTR_H_ - -#include -#include - -/* Opaque type. */ -struct crypto_aes_key; - -/** - * crypto_aesctr_init(key, nonce): - * Prepare to encrypt/decrypt data with AES in CTR mode, using the provided - * expanded key and nonce. The key provided must remain valid for the - * lifetime of the stream. - */ -struct crypto_aesctr * crypto_aesctr_init(const struct crypto_aes_key *, - uint64_t); - -/** - * crypto_aesctr_stream(stream, inbuf, outbuf, buflen): - * Generate the next ${buflen} bytes of the AES-CTR stream and xor them with - * bytes from ${inbuf}, writing the result into ${outbuf}. If the buffers - * ${inbuf} and ${outbuf} overlap, they must be identical. - */ -void crypto_aesctr_stream(struct crypto_aesctr *, const uint8_t *, - uint8_t *, size_t); - -/** - * crypto_aesctr_free(stream): - * Free the provided stream object. - */ -void crypto_aesctr_free(struct crypto_aesctr *); - -/** - * crypto_aesctr_buf(key, nonce, inbuf, outbuf, buflen): - * Equivalent to init(key, nonce); stream(inbuf, outbuf, buflen); free. - */ -void crypto_aesctr_buf(const struct crypto_aes_key *, uint64_t, - const uint8_t *, uint8_t *, size_t); - -#endif /* !_CRYPTO_AESCTR_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_entropy.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_entropy.c deleted file mode 100644 index d9a3fba..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_entropy.c +++ /dev/null @@ -1,215 +0,0 @@ -#include -#include -#include - -#include "entropy.h" -#include "insecure_memzero.h" - -#include "sha256.h" - -#include "crypto_entropy.h" - -/** - * This system implements the HMAC_DRBG pseudo-random number generator as - * specified in section 10.1.2 of the NIST SP 800-90 standard. In this - * implementation, the optional personalization_string and additional_input - * specified in the standard are not implemented. - */ - -/* Internal HMAC_DRBG state. */ -static struct { - uint8_t Key[32]; - uint8_t V[32]; - uint32_t reseed_counter; -} drbg; - -/* Set to non-zero once the PRNG has been instantiated. */ -static int instantiated = 0; - -/* Could be as high as 2^48 if we wanted... */ -#define RESEED_INTERVAL 256 - -/* Limited to 2^16 by specification. */ -#define GENERATE_MAXLEN 65536 - -static int instantiate(void); -static void update(uint8_t *, size_t); -static int reseed(void); -static void generate(uint8_t *, size_t); - -/** - * instantiate(void): - * Initialize the DRBG state. (Section 10.1.2.3) - */ -static int -instantiate(void) -{ - uint8_t seed_material[48]; - - /* Obtain random seed_material = (entropy_input || nonce). */ - if (entropy_read(seed_material, 48)) - return (-1); - - /* Initialize Key, V, and reseed_counter. */ - memset(drbg.Key, 0x00, 32); - memset(drbg.V, 0x01, 32); - drbg.reseed_counter = 1; - - /* Mix the random seed into the state. */ - update(seed_material, 48); - - /* Clean the stack. */ - insecure_memzero(seed_material, 48); - - /* Success! */ - return (0); -} - -/** - * update(data, datalen): - * Update the DRBG state using the provided data. (Section 10.1.2.2) - */ -static void -update(uint8_t * data, size_t datalen) -{ - HMAC_SHA256_CTX ctx; - uint8_t K[32]; - uint8_t Vx[33]; - - /* Load (Key, V) into (K, Vx). */ - memcpy(K, drbg.Key, 32); - memcpy(Vx, drbg.V, 32); - - /* K <- HMAC(K, V || 0x00 || data). */ - Vx[32] = 0x00; - HMAC_SHA256_Init(&ctx, K, 32); - HMAC_SHA256_Update(&ctx, Vx, 33); - HMAC_SHA256_Update(&ctx, data, datalen); - HMAC_SHA256_Final(K, &ctx); - - /* V <- HMAC(K, V). */ - HMAC_SHA256_Buf(K, 32, Vx, 32, Vx); - - /* If the provided data is non-Null, perform another mixing stage. */ - if (datalen != 0) { - /* K <- HMAC(K, V || 0x01 || data). */ - Vx[32] = 0x01; - HMAC_SHA256_Init(&ctx, K, 32); - HMAC_SHA256_Update(&ctx, Vx, 33); - HMAC_SHA256_Update(&ctx, data, datalen); - HMAC_SHA256_Final(K, &ctx); - - /* V <- HMAC(K, V). */ - HMAC_SHA256_Buf(K, 32, Vx, 32, Vx); - } - - /* Copy (K, Vx) back to (Key, V). */ - memcpy(drbg.Key, K, 32); - memcpy(drbg.V, Vx, 32); - - /* Clean the stack. */ - insecure_memzero(K, 32); - insecure_memzero(Vx, 33); -} - -/** - * reseed(void): - * Reseed the DRBG state (mix in new entropy). (Section 10.1.2.4) - */ -static int -reseed(void) -{ - uint8_t seed_material[32]; - - /* Obtain random seed_material = entropy_input. */ - if (entropy_read(seed_material, 32)) - return (-1); - - /* Mix the random seed into the state. */ - update(seed_material, 32); - - /* Reset the reseed_counter. */ - drbg.reseed_counter = 1; - - /* Clean the stack. */ - insecure_memzero(seed_material, 32); - - /* Success! */ - return (0); -} - -/** - * generate(buf, buflen): - * Fill the provided buffer with random bits, assuming that reseed_counter - * is less than RESEED_INTERVAL (the caller is responsible for calling - * reseed() as needed) and ${buflen} is less than 2^16 (the caller is - * responsible for splitting up larger requests). (Section 10.1.2.5) - */ -static void -generate(uint8_t * buf, size_t buflen) -{ - size_t bufpos; - - assert(buflen <= GENERATE_MAXLEN); - assert(drbg.reseed_counter <= RESEED_INTERVAL); - - /* Iterate until we've filled the buffer. */ - for (bufpos = 0; bufpos < buflen; bufpos += 32) { - HMAC_SHA256_Buf(drbg.Key, 32, drbg.V, 32, drbg.V); - if (buflen - bufpos >= 32) - memcpy(&buf[bufpos], drbg.V, 32); - else - memcpy(&buf[bufpos], drbg.V, buflen - bufpos); - } - - /* Mix up state. */ - update(NULL, 0); - - /* We're one data-generation step closer to needing a reseed. */ - drbg.reseed_counter += 1; -} - -/** - * crypto_entropy_read(buf, buflen): - * Fill the buffer with unpredictable bits. - */ -int -crypto_entropy_read(uint8_t * buf, size_t buflen) -{ - size_t bytes_to_provide; - - /* Instantiate if needed. */ - if (instantiated == 0) { - /* Try to instantiate the PRNG. */ - if (instantiate()) - return (-1); - - /* We have instantiated the PRNG. */ - instantiated = 1; - } - - /* Loop until we've filled the buffer. */ - while (buflen > 0) { - /* Do we need to reseed? */ - if (drbg.reseed_counter > RESEED_INTERVAL) { - if (reseed()) - return (-1); - } - - /* How much data are we generating in this step? */ - if (buflen > GENERATE_MAXLEN) - bytes_to_provide = GENERATE_MAXLEN; - else - bytes_to_provide = buflen; - - /* Generate bytes. */ - generate(buf, bytes_to_provide); - - /* We've done part of the buffer. */ - buf += bytes_to_provide; - buflen -= bytes_to_provide; - } - - /* Success! */ - return (0); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_entropy.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_entropy.h deleted file mode 100644 index 1137710..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/crypto/crypto_entropy.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _CRYPTO_ENTROPY_H_ -#define _CRYPTO_ENTROPY_H_ - -#include -#include - -/** - * crypto_entropy_read(buf, buflen): - * Fill the buffer with unpredictable bits. The value ${buflen} must be - * less than 2^16. - */ -int crypto_entropy_read(uint8_t *, size_t); - -#endif /* !_CRYPTO_ENTROPY_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-entropy.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-entropy.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-entropy.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-insecure_memzero.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-insecure_memzero.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-insecure_memzero.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-readpass.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-readpass.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-readpass.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-warnp.Po b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-warnp.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/.deps/scrypt-warnp.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/entropy.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/entropy.c deleted file mode 100644 index 0c6bbf8..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/entropy.c +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include -#include -#include - -#include "warnp.h" - -#include "entropy.h" - -/** - * XXX Portability - * XXX We obtain random bytes from the operating system by opening - * XXX /dev/urandom and reading them from that device; this works on - * XXX modern UNIX-like operating systems but not on systems like - * XXX win32 where there is no concept of /dev/urandom. - */ - -/** - * entropy_read(buf, buflen): - * Fill the given buffer with random bytes provided by the operating system. - */ -int -entropy_read(uint8_t * buf, size_t buflen) -{ - int fd; - ssize_t lenread; - - /* Sanity-check the buffer size. */ - if (buflen > SSIZE_MAX) { - warn0("Programmer error: " - "Trying to read insane amount of random data: %zu", - buflen); - goto err0; - } - - /* Open /dev/urandom. */ - if ((fd = open("/dev/urandom", O_RDONLY)) == -1) { - warnp("open(/dev/urandom)"); - goto err0; - } - - /* Read bytes until we have filled the buffer. */ - while (buflen > 0) { - if ((lenread = read(fd, buf, buflen)) == -1) { - warnp("read(/dev/urandom)"); - goto err1; - } - - /* The random device should never EOF. */ - if (lenread == 0) { - warn0("EOF on /dev/urandom?"); - goto err1; - } - - /* We've filled a portion of the buffer. */ - buf += lenread; - buflen -= lenread; - } - - /* Close the device. */ - while (close(fd) == -1) { - if (errno != EINTR) { - warnp("close(/dev/urandom)"); - goto err0; - } - } - - /* Success! */ - return (0); - -err1: - close(fd); -err0: - /* Failure! */ - return (-1); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/entropy.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/entropy.h deleted file mode 100644 index fa6f1cf..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/entropy.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _ENTROPY_H_ -#define _ENTROPY_H_ - -#include -#include - -/** - * entropy_read(buf, buflen): - * Fill the given buffer with random bytes provided by the operating system. - */ -int entropy_read(uint8_t *, size_t); - -#endif /* !_ENTROPY_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.c deleted file mode 100644 index bd26bac..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.c +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -#include "insecure_memzero.h" - -/* Function which does the zeroing. */ -static void -insecure_memzero_func(volatile void * buf, size_t len) -{ - volatile uint8_t * _buf = buf; - size_t i; - - for (i = 0; i < len; i++) - _buf[i] = 0; -} - -/* Pointer to memory-zeroing function. */ -void (* volatile insecure_memzero_ptr)(volatile void *, size_t) = - insecure_memzero_func; diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.h deleted file mode 100644 index 1c3f06b..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _INSECURE_MEMZERO_H_ -#define _INSECURE_MEMZERO_H_ - -#include - -/* Pointer to memory-zeroing function. */ -extern void (* volatile insecure_memzero_ptr)(volatile void *, size_t); - -/** - * insecure_memzero(buf, len): - * Attempt to zero ${len} bytes at ${buf} in spite of optimizing compilers' - * best (standards-compliant) attempts to remove the buffer-zeroing. In - * particular, to avoid performing the zeroing, a compiler would need to - * use optimistic devirtualization; recognize that non-volatile objects do not - * need to be treated as volatile, even if they are accessed via volatile - * qualified pointers; and perform link-time optimization; in addition to the - * dead-code elimination which often causes buffer-zeroing to be elided. - * - * Note however that zeroing a buffer does not guarantee that the data held - * in the buffer is not stored elsewhere; in particular, there may be copies - * held in CPU registers or in anonymous allocations on the stack, even if - * every named variable is successfully sanitized. Solving the "wipe data - * from the system" problem will require a C language extension which does not - * yet exist. - * - * For more information, see: - * http://www.daemonology.net/blog/2014-09-04-how-to-zero-a-buffer.html - * http://www.daemonology.net/blog/2014-09-06-zeroing-buffers-is-insufficient.html - */ -static inline void -insecure_memzero(volatile void * buf, size_t len) -{ - - (insecure_memzero_ptr)(buf, len); -} - -#endif /* !_INSECURE_MEMZERO_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/readpass.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/readpass.c deleted file mode 100644 index 965ef55..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/readpass.c +++ /dev/null @@ -1,184 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "insecure_memzero.h" -#include "warnp.h" - -#include "readpass.h" - -#define MAXPASSLEN 2048 - -/* Signals we need to block. */ -static const int badsigs[] = { - SIGALRM, SIGHUP, SIGINT, - SIGPIPE, SIGQUIT, SIGTERM, - SIGTSTP, SIGTTIN, SIGTTOU -}; -#define NSIGS sizeof(badsigs)/sizeof(badsigs[0]) - -/* Highest signal number we care about. */ -#define MAX2(a, b) ((a) > (b) ? (a) : (b)) -#define MAX4(a, b, c, d) MAX2(MAX2(a, b), MAX2(c, d)) -#define MAX8(a, b, c, d, e, f, g, h) MAX2(MAX4(a, b, c, d), MAX4(e, f, g, h)) -#define MAXBADSIG MAX2(SIGALRM, MAX8(SIGHUP, SIGINT, SIGPIPE, SIGQUIT, \ - SIGTERM, SIGTSTP, SIGTTIN, SIGTTOU)) - -/* Has a signal of this type been received? */ -static volatile sig_atomic_t gotsig[MAXBADSIG + 1]; - -/* Signal handler. */ -static void -handle(int sig) -{ - - gotsig[sig] = 1; -} - -/** - * readpass(passwd, prompt, confirmprompt, devtty) - * If ${devtty} is non-zero, read a password from /dev/tty if possible; if - * not, read from stdin. If reading from a tty (either /dev/tty or stdin), - * disable echo and prompt the user by printing ${prompt} to stderr. If - * ${confirmprompt} is non-NULL, read a second password (prompting if a - * terminal is being used) and repeat until the user enters the same password - * twice. Return the password as a malloced NUL-terminated string via - * ${passwd}. - */ -int -readpass(char ** passwd, const char * prompt, - const char * confirmprompt, int devtty) -{ - FILE * readfrom; - char passbuf[MAXPASSLEN]; - char confpassbuf[MAXPASSLEN]; - struct sigaction sa, savedsa[NSIGS]; - struct termios term, term_old; - size_t i; - int usingtty; - - /* - * If devtty != 0, try to open /dev/tty; if that fails, or if devtty - * is zero, we'll read the password from stdin instead. - */ - if ((devtty == 0) || ((readfrom = fopen("/dev/tty", "r")) == NULL)) - readfrom = stdin; - - /* We have not received any signals yet. */ - for (i = 0; i <= MAXBADSIG; i++) - gotsig[i] = 0; - - /* - * If we receive a signal while we're reading the password, we might - * end up with echo disabled; to prevent this, we catch the signals - * here, and we'll re-send them to ourselves later after we re-enable - * terminal echo. - */ - sa.sa_handler = handle; - sa.sa_flags = 0; - sigemptyset(&sa.sa_mask); - for (i = 0; i < NSIGS; i++) - sigaction(badsigs[i], &sa, &savedsa[i]); - - /* If we're reading from a terminal, try to disable echo. */ - if ((usingtty = isatty(fileno(readfrom))) != 0) { - if (tcgetattr(fileno(readfrom), &term_old)) { - warnp("Cannot read terminal settings"); - goto err2; - } - memcpy(&term, &term_old, sizeof(struct termios)); - term.c_lflag = (term.c_lflag & ~ECHO) | ECHONL; - if (tcsetattr(fileno(readfrom), TCSANOW, &term)) { - warnp("Cannot set terminal settings"); - goto err2; - } - } - -retry: - /* If we have a terminal, prompt the user to enter the password. */ - if (usingtty) - fprintf(stderr, "%s: ", prompt); - - /* Read the password. */ - if (fgets(passbuf, MAXPASSLEN, readfrom) == NULL) { - warnp("Cannot read password"); - goto err3; - } - - /* Confirm the password if necessary. */ - if (confirmprompt != NULL) { - if (usingtty) - fprintf(stderr, "%s: ", confirmprompt); - if (fgets(confpassbuf, MAXPASSLEN, readfrom) == NULL) { - warnp("Cannot read password"); - goto err3; - } - if (strcmp(passbuf, confpassbuf)) { - fprintf(stderr, - "Passwords mismatch, please try again\n"); - goto retry; - } - } - - /* Terminate the string at the first "\r" or "\n" (if any). */ - passbuf[strcspn(passbuf, "\r\n")] = '\0'; - - /* If we changed terminal settings, reset them. */ - if (usingtty) - tcsetattr(fileno(readfrom), TCSANOW, &term_old); - - /* Restore old signals. */ - for (i = 0; i < NSIGS; i++) - sigaction(badsigs[i], &savedsa[i], NULL); - - /* If we intercepted a signal, re-issue it. */ - for (i = 0; i < NSIGS; i++) { - if (gotsig[badsigs[i]]) - raise(badsigs[i]); - } - - /* Close /dev/tty if we opened it. */ - if (readfrom != stdin) - fclose(readfrom); - - /* Copy the password out. */ - if ((*passwd = strdup(passbuf)) == NULL) { - warnp("Cannot allocate memory"); - goto err1; - } - - /* - * Zero any stored passwords. This is not guaranteed to work, since a - * "sufficiently intelligent" compiler can optimize these out due to - * the values not being accessed again; and even if we outwitted the - * compiler, all we can do is ensure that *a* buffer is zeroed but - * not that it is the only buffer containing the data in question. - * Unfortunately the C standard does not provide any way to mark data - * as "sensitive" in order to prevent extra copies being sprinkled - * around the implementation address space. - */ - insecure_memzero(passbuf, MAXPASSLEN); - insecure_memzero(confpassbuf, MAXPASSLEN); - - /* Success! */ - return (0); - -err3: - /* Reset terminal settings if necessary. */ - if (usingtty) - tcsetattr(fileno(readfrom), TCSAFLUSH, &term_old); -err2: - /* Close /dev/tty if we opened it. */ - if (readfrom != stdin) - fclose(readfrom); -err1: - /* Zero any stored passwords. */ - insecure_memzero(passbuf, MAXPASSLEN); - insecure_memzero(confpassbuf, MAXPASSLEN); - - /* Failure! */ - return (-1); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/readpass.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/readpass.h deleted file mode 100644 index 390c816..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/readpass.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _READPASS_H_ -#define _READPASS_H_ - -/* Avoid namespace collisions with other "readpass" functions. */ -#ifdef readpass -#undef readpass -#endif -#define readpass libcperciva_readpass - -/** - * readpass(passwd, prompt, confirmprompt, devtty) - * If ${devtty} is non-zero, read a password from /dev/tty if possible; if - * not, read from stdin. If reading from a tty (either /dev/tty or stdin), - * disable echo and prompt the user by printing ${prompt} to stderr. If - * ${confirmprompt} is non-NULL, read a second password (prompting if a - * terminal is being used) and repeat until the user enters the same password - * twice. Return the password as a malloced NUL-terminated string via - * ${passwd}. - */ -int readpass(char **, const char *, const char *, int); - -#endif /* !_READPASS_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h deleted file mode 100644 index 7bed2f5..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/sysendian.h +++ /dev/null @@ -1,146 +0,0 @@ -#ifndef _SYSENDIAN_H_ -#define _SYSENDIAN_H_ - -#include - -/* Avoid namespace collisions with BSD . */ -#define be16dec libcperciva_be16dec -#define be16enc libcperciva_be16enc -#define be32dec libcperciva_be32dec -#define be32enc libcperciva_be32enc -#define be64dec libcperciva_be64dec -#define be64enc libcperciva_be64enc -#define le16dec libcperciva_le16dec -#define le16enc libcperciva_le16enc -#define le32dec libcperciva_le32dec -#define le32enc libcperciva_le32enc -#define le64dec libcperciva_le64dec -#define le64enc libcperciva_le64enc - -static inline uint16_t -be16dec(const void * pp) -{ - const uint8_t * p = (uint8_t const *)pp; - - return ((uint16_t)(p[1]) + ((uint16_t)(p[0]) << 8)); -} - -static inline void -be16enc(void * pp, uint16_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[1] = x & 0xff; - p[0] = (x >> 8) & 0xff; -} - -static inline uint32_t -be32dec(const void * pp) -{ - const uint8_t * p = (uint8_t const *)pp; - - return ((uint32_t)(p[3]) + ((uint32_t)(p[2]) << 8) + - ((uint32_t)(p[1]) << 16) + ((uint32_t)(p[0]) << 24)); -} - -static inline void -be32enc(void * pp, uint32_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[3] = x & 0xff; - p[2] = (x >> 8) & 0xff; - p[1] = (x >> 16) & 0xff; - p[0] = (x >> 24) & 0xff; -} - -static inline uint64_t -be64dec(const void * pp) -{ - const uint8_t * p = (uint8_t const *)pp; - - return ((uint64_t)(p[7]) + ((uint64_t)(p[6]) << 8) + - ((uint64_t)(p[5]) << 16) + ((uint64_t)(p[4]) << 24) + - ((uint64_t)(p[3]) << 32) + ((uint64_t)(p[2]) << 40) + - ((uint64_t)(p[1]) << 48) + ((uint64_t)(p[0]) << 56)); -} - -static inline void -be64enc(void * pp, uint64_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[7] = x & 0xff; - p[6] = (x >> 8) & 0xff; - p[5] = (x >> 16) & 0xff; - p[4] = (x >> 24) & 0xff; - p[3] = (x >> 32) & 0xff; - p[2] = (x >> 40) & 0xff; - p[1] = (x >> 48) & 0xff; - p[0] = (x >> 56) & 0xff; -} - -static inline uint16_t -le16dec(const void * pp) -{ - const uint8_t * p = (uint8_t const *)pp; - - return ((uint16_t)(p[0]) + ((uint16_t)(p[1]) << 8)); -} - -static inline void -le16enc(void * pp, uint16_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[0] = x & 0xff; - p[1] = (x >> 8) & 0xff; -} - -static inline uint32_t -le32dec(const void * pp) -{ - const uint8_t * p = (uint8_t const *)pp; - - return ((uint32_t)(p[0]) + ((uint32_t)(p[1]) << 8) + - ((uint32_t)(p[2]) << 16) + ((uint32_t)(p[3]) << 24)); -} - -static inline void -le32enc(void * pp, uint32_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[0] = x & 0xff; - p[1] = (x >> 8) & 0xff; - p[2] = (x >> 16) & 0xff; - p[3] = (x >> 24) & 0xff; -} - -static inline uint64_t -le64dec(const void * pp) -{ - const uint8_t * p = (uint8_t const *)pp; - - return ((uint64_t)(p[0]) + ((uint64_t)(p[1]) << 8) + - ((uint64_t)(p[2]) << 16) + ((uint64_t)(p[3]) << 24) + - ((uint64_t)(p[4]) << 32) + ((uint64_t)(p[5]) << 40) + - ((uint64_t)(p[6]) << 48) + ((uint64_t)(p[7]) << 56)); -} - -static inline void -le64enc(void * pp, uint64_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[0] = x & 0xff; - p[1] = (x >> 8) & 0xff; - p[2] = (x >> 16) & 0xff; - p[3] = (x >> 24) & 0xff; - p[4] = (x >> 32) & 0xff; - p[5] = (x >> 40) & 0xff; - p[6] = (x >> 48) & 0xff; - p[7] = (x >> 56) & 0xff; -} - -#endif /* !_SYSENDIAN_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/warnp.c b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/warnp.c deleted file mode 100644 index 2ec5a57..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/warnp.c +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include -#include -#include -#include - -#include "warnp.h" - -static int initialized = 0; -static char * name = NULL; - -/* Free the name string. */ -static void -done(void) -{ - - free(name); - name = NULL; -} - -/** - * warnp_setprogname(progname): - * Set the program name to be used by warn() and warnx() to ${progname}. - */ -void -warnp_setprogname(const char * progname) -{ - const char * p; - - /* Free the name if we already have one. */ - free(name); - - /* Find the last segment of the program name. */ - for (p = progname; progname[0] != '\0'; progname++) - if (progname[0] == '/') - p = progname + 1; - - /* Copy the name string. */ - name = strdup(p); - - /* If we haven't already done so, register our exit handler. */ - if (initialized == 0) { - atexit(done); - initialized = 1; - } -} - -void -warn(const char * fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - fprintf(stderr, "%s", (name != NULL) ? name : "(unknown)"); - if (fmt != NULL) { - fprintf(stderr, ": "); - vfprintf(stderr, fmt, ap); - } - fprintf(stderr, ": %s\n", strerror(errno)); - va_end(ap); -} - -void -warnx(const char * fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - fprintf(stderr, "%s", (name != NULL) ? name : "(unknown)"); - if (fmt != NULL) { - fprintf(stderr, ": "); - vfprintf(stderr, fmt, ap); - } - fprintf(stderr, "\n"); - va_end(ap); -} diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/warnp.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/warnp.h deleted file mode 100644 index 2dadbdf..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/libcperciva/util/warnp.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef _WARNP_H_ -#define _WARNP_H_ - -#include - -/* Avoid namespace collisions with BSD . */ -#define warn libcperciva_warn -#define warnx libcperciva_warnx - -/** - * warnp_setprogname(progname): - * Set the program name to be used by warn() and warnx() to ${progname}. - */ -void warnp_setprogname(const char *); -#define WARNP_INIT do { \ - if (argv[0] != NULL) \ - warnp_setprogname(argv[0]); \ -} while (0) - -/* As in BSD . */ -void warn(const char *, ...); -void warnx(const char *, ...); - -/* - * If compiled with DEBUG defined, print __FILE__ and __LINE__. - */ -#ifdef DEBUG -#define warnline do { \ - warnx("%s, %d", __FILE__, __LINE__); \ -} while (0) -#else -#define warnline -#endif - -/* - * Call warn(3) or warnx(3) depending upon whether errno == 0; and clear - * errno (so that the standard error message isn't repeated later). - */ -#define warnp(...) do { \ - warnline; \ - if (errno != 0) { \ - warn(__VA_ARGS__); \ - errno = 0; \ - } else \ - warnx(__VA_ARGS__); \ -} while (0) - -/* - * Call warnx(3) and set errno == 0. Unlike warnp, this should be used - * in cases where we're reporting a problem which we discover ourselves - * rather than one which is reported to us from a library or the kernel. - */ -#define warn0(...) do { \ - warnline; \ - warnx(__VA_ARGS__); \ - errno = 0; \ -} while (0) - -#endif /* !_WARNP_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/scrypt_platform.h b/node_modules/scrypt/scrypt/scrypt-1.2.0/scrypt_platform.h deleted file mode 100644 index 5cec236..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/scrypt_platform.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _SCRYPT_PLATFORM_H_ -#define _SCRYPT_PLATFORM_H_ - -#if defined(CONFIG_H_FILE) -#include CONFIG_H_FILE -#elif defined(HAVE_CONFIG_H) -#include "config.h" -#else -#error Need either CONFIG_H_FILE or HAVE_CONFIG_H defined. -#endif - -#endif /* !_SCRYPT_PLATFORM_H_ */ diff --git a/node_modules/scrypt/scrypt/scrypt-1.2.0/stamp-h1 b/node_modules/scrypt/scrypt/scrypt-1.2.0/stamp-h1 deleted file mode 100644 index 4547fe1..0000000 --- a/node_modules/scrypt/scrypt/scrypt-1.2.0/stamp-h1 +++ /dev/null @@ -1 +0,0 @@ -timestamp for config.h diff --git a/node_modules/scrypt/scrypt/win/gettimeofday.c b/node_modules/scrypt/scrypt/win/gettimeofday.c deleted file mode 100644 index 90e9f94..0000000 --- a/node_modules/scrypt/scrypt/win/gettimeofday.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copied from PostgreSQL source: - * http://doxygen.postgresql.org/gettimeofday_8c_source.html - * - */ - -/* - * gettimeofday.c - * Win32 gettimeofday() replacement - * - * src/port/gettimeofday.c - * - * Copyright (c) 2003 SRA, Inc. - * Copyright (c) 2003 SKC, Inc. - * - * Permission to use, copy, modify, and distribute this software and - * its documentation for any purpose, without fee, and without a - * written agreement is hereby granted, provided that the above - * copyright notice and this paragraph and the following two - * paragraphs appear in all copies. - * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, - * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING - * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS - * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS - * IS" BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, - * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - */ - -#include - -/* FILETIME of Jan 1 1970 00:00:00. */ -static const unsigned __int64 epoch = 116444736000000000Ui64; - -/* - * timezone information is stored outside the kernel so tzp isn't used anymore. - * - * Note: this function is not for Win32 high precision timing purpose. See - * elapsed_time(). - */ -int -gettimeofday(struct timeval * tp, struct timezone * tzp) -{ - FILETIME file_time; - SYSTEMTIME system_time; - ULARGE_INTEGER ularge; - - GetSystemTime(&system_time); - SystemTimeToFileTime(&system_time, &file_time); - ularge.LowPart = file_time.dwLowDateTime; - ularge.HighPart = file_time.dwHighDateTime; - - tp->tv_sec = (long) ((ularge.QuadPart - epoch) / 10000000L); - tp->tv_usec = (long) (system_time.wMilliseconds * 1000); - - return 0; -} diff --git a/node_modules/scrypt/scrypt/win/include/gettimeofday.h b/node_modules/scrypt/scrypt/win/include/gettimeofday.h deleted file mode 100644 index 82bf768..0000000 --- a/node_modules/scrypt/scrypt/win/include/gettimeofday.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _MY_GETTIMEOFDAY_H_ -#define _MY_GETTIMEOFDAY_H_ - -#ifdef _MSC_VER - -#include -int gettimeofday(struct timeval * tp, struct timezone * tzp); - -#if _MSC_VER < 1900 -struct timespec { - time_t tv_sec; - time_t tv_nsec; -}; -#endif - -#endif /* _MSC_VER */ - -#endif /* _MY_GETTIMEOFDAY_H_ */ diff --git a/node_modules/scrypt/scrypt/win/include/inttypes.h b/node_modules/scrypt/scrypt/win/include/inttypes.h deleted file mode 100644 index ead903f..0000000 --- a/node_modules/scrypt/scrypt/win/include/inttypes.h +++ /dev/null @@ -1,305 +0,0 @@ -// ISO C9x compliant inttypes.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_INTTYPES_H_ // [ -#define _MSC_INTTYPES_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include "stdint.h" - -// 7.8 Format conversion of integer types - -typedef struct { - intmax_t quot; - intmax_t rem; -} imaxdiv_t; - -// 7.8.1 Macros for format specifiers - -#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 - -// The fprintf macros for signed integers are: -#define PRId8 "d" -#define PRIi8 "i" -#define PRIdLEAST8 "d" -#define PRIiLEAST8 "i" -#define PRIdFAST8 "d" -#define PRIiFAST8 "i" - -#define PRId16 "hd" -#define PRIi16 "hi" -#define PRIdLEAST16 "hd" -#define PRIiLEAST16 "hi" -#define PRIdFAST16 "hd" -#define PRIiFAST16 "hi" - -#define PRId32 "I32d" -#define PRIi32 "I32i" -#define PRIdLEAST32 "I32d" -#define PRIiLEAST32 "I32i" -#define PRIdFAST32 "I32d" -#define PRIiFAST32 "I32i" - -#define PRId64 "I64d" -#define PRIi64 "I64i" -#define PRIdLEAST64 "I64d" -#define PRIiLEAST64 "I64i" -#define PRIdFAST64 "I64d" -#define PRIiFAST64 "I64i" - -#define PRIdMAX "I64d" -#define PRIiMAX "I64i" - -#define PRIdPTR "Id" -#define PRIiPTR "Ii" - -// The fprintf macros for unsigned integers are: -#define PRIo8 "o" -#define PRIu8 "u" -#define PRIx8 "x" -#define PRIX8 "X" -#define PRIoLEAST8 "o" -#define PRIuLEAST8 "u" -#define PRIxLEAST8 "x" -#define PRIXLEAST8 "X" -#define PRIoFAST8 "o" -#define PRIuFAST8 "u" -#define PRIxFAST8 "x" -#define PRIXFAST8 "X" - -#define PRIo16 "ho" -#define PRIu16 "hu" -#define PRIx16 "hx" -#define PRIX16 "hX" -#define PRIoLEAST16 "ho" -#define PRIuLEAST16 "hu" -#define PRIxLEAST16 "hx" -#define PRIXLEAST16 "hX" -#define PRIoFAST16 "ho" -#define PRIuFAST16 "hu" -#define PRIxFAST16 "hx" -#define PRIXFAST16 "hX" - -#define PRIo32 "I32o" -#define PRIu32 "I32u" -#define PRIx32 "I32x" -#define PRIX32 "I32X" -#define PRIoLEAST32 "I32o" -#define PRIuLEAST32 "I32u" -#define PRIxLEAST32 "I32x" -#define PRIXLEAST32 "I32X" -#define PRIoFAST32 "I32o" -#define PRIuFAST32 "I32u" -#define PRIxFAST32 "I32x" -#define PRIXFAST32 "I32X" - -#define PRIo64 "I64o" -#define PRIu64 "I64u" -#define PRIx64 "I64x" -#define PRIX64 "I64X" -#define PRIoLEAST64 "I64o" -#define PRIuLEAST64 "I64u" -#define PRIxLEAST64 "I64x" -#define PRIXLEAST64 "I64X" -#define PRIoFAST64 "I64o" -#define PRIuFAST64 "I64u" -#define PRIxFAST64 "I64x" -#define PRIXFAST64 "I64X" - -#define PRIoMAX "I64o" -#define PRIuMAX "I64u" -#define PRIxMAX "I64x" -#define PRIXMAX "I64X" - -#define PRIoPTR "Io" -#define PRIuPTR "Iu" -#define PRIxPTR "Ix" -#define PRIXPTR "IX" - -// The fscanf macros for signed integers are: -#define SCNd8 "d" -#define SCNi8 "i" -#define SCNdLEAST8 "d" -#define SCNiLEAST8 "i" -#define SCNdFAST8 "d" -#define SCNiFAST8 "i" - -#define SCNd16 "hd" -#define SCNi16 "hi" -#define SCNdLEAST16 "hd" -#define SCNiLEAST16 "hi" -#define SCNdFAST16 "hd" -#define SCNiFAST16 "hi" - -#define SCNd32 "ld" -#define SCNi32 "li" -#define SCNdLEAST32 "ld" -#define SCNiLEAST32 "li" -#define SCNdFAST32 "ld" -#define SCNiFAST32 "li" - -#define SCNd64 "I64d" -#define SCNi64 "I64i" -#define SCNdLEAST64 "I64d" -#define SCNiLEAST64 "I64i" -#define SCNdFAST64 "I64d" -#define SCNiFAST64 "I64i" - -#define SCNdMAX "I64d" -#define SCNiMAX "I64i" - -#ifdef _WIN64 // [ -# define SCNdPTR "I64d" -# define SCNiPTR "I64i" -#else // _WIN64 ][ -# define SCNdPTR "ld" -# define SCNiPTR "li" -#endif // _WIN64 ] - -// The fscanf macros for unsigned integers are: -#define SCNo8 "o" -#define SCNu8 "u" -#define SCNx8 "x" -#define SCNX8 "X" -#define SCNoLEAST8 "o" -#define SCNuLEAST8 "u" -#define SCNxLEAST8 "x" -#define SCNXLEAST8 "X" -#define SCNoFAST8 "o" -#define SCNuFAST8 "u" -#define SCNxFAST8 "x" -#define SCNXFAST8 "X" - -#define SCNo16 "ho" -#define SCNu16 "hu" -#define SCNx16 "hx" -#define SCNX16 "hX" -#define SCNoLEAST16 "ho" -#define SCNuLEAST16 "hu" -#define SCNxLEAST16 "hx" -#define SCNXLEAST16 "hX" -#define SCNoFAST16 "ho" -#define SCNuFAST16 "hu" -#define SCNxFAST16 "hx" -#define SCNXFAST16 "hX" - -#define SCNo32 "lo" -#define SCNu32 "lu" -#define SCNx32 "lx" -#define SCNX32 "lX" -#define SCNoLEAST32 "lo" -#define SCNuLEAST32 "lu" -#define SCNxLEAST32 "lx" -#define SCNXLEAST32 "lX" -#define SCNoFAST32 "lo" -#define SCNuFAST32 "lu" -#define SCNxFAST32 "lx" -#define SCNXFAST32 "lX" - -#define SCNo64 "I64o" -#define SCNu64 "I64u" -#define SCNx64 "I64x" -#define SCNX64 "I64X" -#define SCNoLEAST64 "I64o" -#define SCNuLEAST64 "I64u" -#define SCNxLEAST64 "I64x" -#define SCNXLEAST64 "I64X" -#define SCNoFAST64 "I64o" -#define SCNuFAST64 "I64u" -#define SCNxFAST64 "I64x" -#define SCNXFAST64 "I64X" - -#define SCNoMAX "I64o" -#define SCNuMAX "I64u" -#define SCNxMAX "I64x" -#define SCNXMAX "I64X" - -#ifdef _WIN64 // [ -# define SCNoPTR "I64o" -# define SCNuPTR "I64u" -# define SCNxPTR "I64x" -# define SCNXPTR "I64X" -#else // _WIN64 ][ -# define SCNoPTR "lo" -# define SCNuPTR "lu" -# define SCNxPTR "lx" -# define SCNXPTR "lX" -#endif // _WIN64 ] - -#endif // __STDC_FORMAT_MACROS ] - -// 7.8.2 Functions for greatest-width integer types - -// 7.8.2.1 The imaxabs function -#define imaxabs _abs64 - -// 7.8.2.2 The imaxdiv function - -// This is modified version of div() function from Microsoft's div.c found -// in %MSVC.NET%\crt\src\div.c -#ifdef STATIC_IMAXDIV // [ -static -#else // STATIC_IMAXDIV ][ -_inline -#endif // STATIC_IMAXDIV ] -imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) -{ - imaxdiv_t result; - - result.quot = numer / denom; - result.rem = numer % denom; - - if (numer < 0 && result.rem > 0) { - // did division wrong; must fix up - ++result.quot; - result.rem -= denom; - } - - return result; -} - -// 7.8.2.3 The strtoimax and strtoumax functions -#define strtoimax _strtoi64 -#define strtoumax _strtoui64 - -// 7.8.2.4 The wcstoimax and wcstoumax functions -#define wcstoimax _wcstoi64 -#define wcstoumax _wcstoui64 - - -#endif // _MSC_INTTYPES_H_ ] diff --git a/node_modules/scrypt/scrypt/win/include/stdint.h b/node_modules/scrypt/scrypt/win/include/stdint.h deleted file mode 100644 index c66fbb8..0000000 --- a/node_modules/scrypt/scrypt/win/include/stdint.h +++ /dev/null @@ -1,247 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006-2008 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include - -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when -// compiling for ARM we should wrap include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#ifdef __cplusplus -extern "C" { -#endif -# include -#ifdef __cplusplus -} -#endif - -// Define _W64 macros to mark types changing their size, like intptr_t. -#ifndef _W64 -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif - - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types - -// Visual Studio 6 and Embedded Visual C++ 4 doesn't -// realize that, e.g. char has the same size as __int8 -// so we give up on __intX for them. -#if (_MSC_VER < 1300) - typedef signed char int8_t; - typedef signed short int16_t; - typedef signed int int32_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; -#else - typedef signed __int8 int8_t; - typedef signed __int16 int16_t; - typedef signed __int32 int32_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -#endif -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; - - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef signed __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef _W64 signed int intptr_t; - typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN ((int8_t)_I8_MIN) -#define INT8_MAX _I8_MAX -#define INT16_MIN ((int16_t)_I16_MIN) -#define INT16_MAX _I16_MAX -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX _I32_MAX -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val##i8 -#define INT16_C(val) val##i16 -#define INT32_C(val) val##i32 -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val##ui8 -#define UINT16_C(val) val##ui16 -#define UINT32_C(val) val##ui32 -#define UINT64_C(val) val##ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - - -#endif // _MSC_STDINT_H_ ] diff --git a/node_modules/scrypt/scrypt/win/include/sys/mman.h b/node_modules/scrypt/scrypt/win/include/sys/mman.h deleted file mode 100644 index d363479..0000000 --- a/node_modules/scrypt/scrypt/win/include/sys/mman.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * sys/mman.h - * mman-win32 - */ - -#ifndef _SYS_MMAN_H_ -#define _SYS_MMAN_H_ - -#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. -#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. -#endif - -/* All the headers include this file. */ -#ifndef _MSC_VER -#include <_mingw.h> -#else -#include "inttypes.h" -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define PROT_NONE 0 -#define PROT_READ 1 -#define PROT_WRITE 2 -#define PROT_EXEC 4 - -#define MAP_FILE 0 -#define MAP_SHARED 1 -#define MAP_PRIVATE 2 -#define MAP_TYPE 0xf -#define MAP_FIXED 0x10 -#define MAP_ANONYMOUS 0x20 -#define MAP_ANON MAP_ANONYMOUS - -#define MAP_FAILED ((void *)-1) - -/* Flags for msync. */ -#define MS_ASYNC 1 -#define MS_SYNC 2 -#define MS_INVALIDATE 4 - -void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); -int munmap(void *addr, size_t len); -int mprotect(void *addr, size_t len, int prot); -int msync(void *addr, size_t len, int flags); -int mlock(const void *addr, size_t len); -int munlock(const void *addr, size_t len); - -#ifdef __cplusplus -}; -#endif - -#endif /* _SYS_MMAN_H_ */ diff --git a/node_modules/scrypt/scrypt/win/include/unistd.h b/node_modules/scrypt/scrypt/win/include/unistd.h deleted file mode 100644 index 64bbcb5..0000000 --- a/node_modules/scrypt/scrypt/win/include/unistd.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copied from StackOverflow: - * http://stackoverflow.com/a/826027 - */ - -#ifndef _UNISTD_H -#define _UNISTD_H 1 - -/* This file intended to serve as a drop-in replacement for - * unistd.h on Windows - * Please add functionality as neeeded - */ - -#include -#include -#include /* for getpid() and the exec..() family */ - -#define srandom srand -#define random rand - -/* Values for the second argument to access. - These may be OR'd together. */ -#define R_OK 4 /* Test for read permission. */ -#define W_OK 2 /* Test for write permission. */ -//#define X_OK 1 /* execute permission - unsupported in windows*/ -#define F_OK 0 /* Test for existence. */ - -#define access _access -#define ftruncate _chsize -#define unlink _unlink - -#define ssize_t int - -#define STDIN_FILENO 0 -#define STDOUT_FILENO 1 -#define STDERR_FILENO 2 -/* should be in some equivalent to */ -typedef __int8 int8_t; -typedef __int16 int16_t; -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int8 uint8_t; -typedef unsigned __int16 uint16_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; - -#endif /* unistd.h */ diff --git a/node_modules/scrypt/scrypt/win/memlimit.c b/node_modules/scrypt/scrypt/win/memlimit.c deleted file mode 100644 index 1649155..0000000 --- a/node_modules/scrypt/scrypt/win/memlimit.c +++ /dev/null @@ -1,281 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ -#include "scrypt_platform.h" -#include -#include - -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#ifdef HAVE_SYSCTL_HW_USERMEM -#include -#endif -#ifdef HAVE_SYS_SYSINFO_H -#include -#endif - -#include -#include -#include -#include - -#ifdef DEBUG -#include -#endif - -#include "memlimit.h" - -#ifdef HAVE_SYSCTL_HW_USERMEM -static int -memlimit_sysctl_hw_usermem(size_t * memlimit) -{ - int mib[2]; - uint8_t usermembuf[8]; - size_t usermemlen = 8; - uint64_t usermem; - - /* Ask the kernel how much RAM we have. */ - mib[0] = CTL_HW; - mib[1] = HW_USERMEM; - if (sysctl(mib, 2, usermembuf, &usermemlen, NULL, 0)) - return (1); - - /* - * Parse as either a uint64_t or a uint32_t based on the length of - * output the kernel reports having copied out. It appears that all - * systems providing a sysctl interface for reading integers copy - * them out as system-endian values, so we don't need to worry about - * parsing them. - */ - if (usermemlen == sizeof(uint64_t)) - usermem = *(uint64_t *)usermembuf; - else if (usermemlen == sizeof(uint32_t)) - usermem = *(uint32_t *)usermembuf; - else - return (1); - - /* Return the sysctl value, but clamp to SIZE_MAX if necessary. */ -#if UINT64_MAX > SIZE_MAX - if (usermem > SIZE_MAX) - *memlimit = SIZE_MAX; - else - *memlimit = usermem; -#else - *memlimit = usermem; -#endif - - /* Success! */ - return (0); -} -#endif - -/* If we don't HAVE_STRUCT_SYSINFO, we can't use sysinfo. */ -#ifndef HAVE_STRUCT_SYSINFO -#undef HAVE_SYSINFO -#endif - -/* If we don't HAVE_STRUCT_SYSINFO_TOTALRAM, we can't use sysinfo. */ -#ifndef HAVE_STRUCT_SYSINFO_TOTALRAM -#undef HAVE_SYSINFO -#endif - -#ifdef HAVE_SYSINFO -static int -memlimit_sysinfo(size_t * memlimit) -{ - struct sysinfo info; - uint64_t totalmem; - - /* Get information from the kernel. */ - if (sysinfo(&info)) - return (1); - totalmem = info.totalram; - - /* If we're on a modern kernel, adjust based on mem_unit. */ -#ifdef HAVE_STRUCT_SYSINFO_MEM_UNIT - totalmem = totalmem * info.mem_unit; -#endif - - /* Return the value, but clamp to SIZE_MAX if necessary. */ -#if UINT64_MAX > SIZE_MAX - if (totalmem > SIZE_MAX) - *memlimit = SIZE_MAX; - else - *memlimit = totalmem; -#else - *memlimit = totalmem; -#endif - - /* Success! */ - return (0); -} -#endif /* HAVE_SYSINFO */ - -static int -memlimit_rlimit(size_t * memlimit) -{ - SYSTEM_INFO sysinfo; - HANDLE hproc; - SIZE_T dwmin = 0; - SIZE_T dwmax = 345; /* Seems like the default max from msdn */ - - sysinfo.dwPageSize = 4096; /* Default to 4K */ - GetSystemInfo(&sysinfo); - - hproc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, - FALSE, _getpid()); - if (!GetProcessWorkingSetSize(hproc, &dwmin, &dwmax)) { -#ifdef DEBUG - fprintf(stderr, "failed to get max working set size. E=%d\n", - GetLastError()); -#endif - } - CloseHandle(hproc); - *memlimit = dwmax * sysinfo.dwPageSize; - return (0); -} - -#ifdef _SC_PHYS_PAGES - -/* Some systems define _SC_PAGESIZE instead of _SC_PAGE_SIZE. */ -#ifndef _SC_PAGE_SIZE -#define _SC_PAGE_SIZE _SC_PAGESIZE -#endif - -static int -memlimit_sysconf(size_t * memlimit) -{ - long pagesize; - long physpages; - uint64_t totalmem; - - /* Set errno to 0 in order to distinguish "no limit" from "error". */ - errno = 0; - - /* Read the two limits. */ - if (((pagesize = sysconf(_SC_PAGE_SIZE)) == -1) || - ((physpages = sysconf(_SC_PHYS_PAGES)) == -1)) { - /* Did an error occur? */ - if (errno != 0) - return (1); - - /* If not, there is no limit. */ - totalmem = (uint64_t)(-1); - } else { - /* Compute the limit. */ - totalmem = (uint64_t)(pagesize) * (uint64_t)(physpages); - } - - /* Return the value, but clamp to SIZE_MAX if necessary. */ -#if UINT64_MAX > SIZE_MAX - if (totalmem > SIZE_MAX) - *memlimit = SIZE_MAX; - else - *memlimit = totalmem; -#else - *memlimit = totalmem; -#endif - - /* Success! */ - return (0); -} -#endif - -int -memtouse(size_t maxmem, double maxmemfrac, size_t * memlimit) -{ - size_t sysctl_memlimit, sysinfo_memlimit, rlimit_memlimit; - size_t sysconf_memlimit; - size_t memlimit_min; - size_t memavail; - - /* Get memory limits. */ -#ifdef HAVE_SYSCTL_HW_USERMEM - if (memlimit_sysctl_hw_usermem(&sysctl_memlimit)) - return (1); -#else - sysctl_memlimit = (size_t)(-1); -#endif -#ifdef HAVE_SYSINFO - if (memlimit_sysinfo(&sysinfo_memlimit)) - return (1); -#else - sysinfo_memlimit = (size_t)(-1); -#endif - if (memlimit_rlimit(&rlimit_memlimit)) - return (1); -#ifdef _SC_PHYS_PAGES - if (memlimit_sysconf(&sysconf_memlimit)) - return (1); -#else - sysconf_memlimit = (size_t)(-1); -#endif - -#ifdef DEBUG - fprintf(stderr, "Memory limits are %llu %llu %llu %llu\n", - (unsigned long long) sysctl_memlimit, - (unsigned long long) sysinfo_memlimit, - (unsigned long long) rlimit_memlimit, - (unsigned long long) sysconf_memlimit); -#endif - - /* Find the smallest of them. */ - memlimit_min = (size_t)(-1); - if (memlimit_min > sysctl_memlimit) - memlimit_min = sysctl_memlimit; - if (memlimit_min > sysinfo_memlimit) - memlimit_min = sysinfo_memlimit; - if (memlimit_min > rlimit_memlimit) - memlimit_min = rlimit_memlimit; - if (memlimit_min > sysconf_memlimit) - memlimit_min = sysconf_memlimit; - - /* Only use the specified fraction of the available memory. */ - if ((maxmemfrac > 0.5) || (maxmemfrac == 0.0)) - maxmemfrac = 0.5; - - memavail = (size_t)maxmemfrac * memlimit_min; - - /* Don't use more than the specified maximum. */ - if ((maxmem > 0) && (memavail > maxmem)) - memavail = maxmem; - - /* But always allow at least 1 MiB. */ - if (memavail < 1048576) - memavail = 1048576; - -#ifdef DEBUG - fprintf(stderr, "Allowing up to %llu memory to be used\n", - (unsigned long long) memavail); -#endif - - /* Return limit via the provided pointer. */ - *memlimit = memavail; - return (0); -} \ No newline at end of file diff --git a/node_modules/scrypt/scrypt/win/mman.c b/node_modules/scrypt/scrypt/win/mman.c deleted file mode 100644 index 76af334..0000000 --- a/node_modules/scrypt/scrypt/win/mman.c +++ /dev/null @@ -1,180 +0,0 @@ - -#include -#include -#include - -#include "sys/mman.h" - -#ifndef FILE_MAP_EXECUTE -#define FILE_MAP_EXECUTE 0x0020 -#endif /* FILE_MAP_EXECUTE */ - -static int __map_mman_error(const DWORD err, const int deferr) -{ - if (err == 0) - return 0; - //TODO: implement - return err; -} - -static DWORD __map_mmap_prot_page(const int prot) -{ - DWORD protect = 0; - - if (prot == PROT_NONE) - return protect; - - if ((prot & PROT_EXEC) != 0) - { - protect = ((prot & PROT_WRITE) != 0) ? - PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ; - } - else - { - protect = ((prot & PROT_WRITE) != 0) ? - PAGE_READWRITE : PAGE_READONLY; - } - - return protect; -} - -static DWORD __map_mmap_prot_file(const int prot) -{ - DWORD desiredAccess = 0; - - if (prot == PROT_NONE) - return desiredAccess; - - if ((prot & PROT_READ) != 0) - desiredAccess |= FILE_MAP_READ; - if ((prot & PROT_WRITE) != 0) - desiredAccess |= FILE_MAP_WRITE; - if ((prot & PROT_EXEC) != 0) - desiredAccess |= FILE_MAP_EXECUTE; - - return desiredAccess; -} - -void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off) -{ - HANDLE fm, h; - - void * map = MAP_FAILED; - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable: 4293) -#endif - - const DWORD dwFileOffsetLow = (sizeof(off_t) <= sizeof(DWORD)) ? - (DWORD)off : (DWORD)(off & 0xFFFFFFFFL); - const DWORD dwFileOffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ? - (DWORD)0 : (DWORD)((off >> 32) & 0xFFFFFFFFL); - const DWORD protect = __map_mmap_prot_page(prot); - const DWORD desiredAccess = __map_mmap_prot_file(prot); - - const off_t maxSize = off + (off_t)len; - - const DWORD dwMaxSizeLow = (sizeof(off_t) <= sizeof(DWORD)) ? - (DWORD)maxSize : (DWORD)(maxSize & 0xFFFFFFFFL); - const DWORD dwMaxSizeHigh = (sizeof(off_t) <= sizeof(DWORD)) ? - (DWORD)0 : (DWORD)((maxSize >> 32) & 0xFFFFFFFFL); - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - - errno = 0; - - if (len == 0 - /* Unsupported flag combinations */ - || (flags & MAP_FIXED) != 0 - /* Usupported protection combinations */ - || prot == PROT_EXEC) - { - errno = EINVAL; - return MAP_FAILED; - } - - h = ((flags & MAP_ANONYMOUS) == 0) ? - (HANDLE)_get_osfhandle(fildes) : INVALID_HANDLE_VALUE; - - if ((flags & MAP_ANONYMOUS) == 0 && h == INVALID_HANDLE_VALUE) - { - errno = EBADF; - return MAP_FAILED; - } - - fm = CreateFileMapping(h, NULL, protect, dwMaxSizeHigh, dwMaxSizeLow, NULL); - - if (fm == NULL) - { - errno = __map_mman_error(GetLastError(), EPERM); - return MAP_FAILED; - } - - map = MapViewOfFile(fm, desiredAccess, dwFileOffsetHigh, dwFileOffsetLow, len); - - CloseHandle(fm); - - if (map == NULL) - { - errno = __map_mman_error(GetLastError(), EPERM); - return MAP_FAILED; - } - - return map; -} - -int munmap(void *addr, size_t len) -{ - if (UnmapViewOfFile(addr)) - return 0; - - errno = __map_mman_error(GetLastError(), EPERM); - - return -1; -} - -int mprotect(void *addr, size_t len, int prot) -{ - DWORD newProtect = __map_mmap_prot_page(prot); - DWORD oldProtect = 0; - - if (VirtualProtect(addr, len, newProtect, &oldProtect)) - return 0; - - errno = __map_mman_error(GetLastError(), EPERM); - - return -1; -} - -int msync(void *addr, size_t len, int flags) -{ - if (FlushViewOfFile(addr, len)) - return 0; - - errno = __map_mman_error(GetLastError(), EPERM); - - return -1; -} - -int mlock(const void *addr, size_t len) -{ - if (VirtualLock((LPVOID)addr, len)) - return 0; - - errno = __map_mman_error(GetLastError(), EPERM); - - return -1; -} - -int munlock(const void *addr, size_t len) -{ - if (VirtualUnlock((LPVOID)addr, len)) - return 0; - - errno = __map_mman_error(GetLastError(), EPERM); - - return -1; -} diff --git a/node_modules/scrypt/scrypt_node.cc b/node_modules/scrypt/scrypt_node.cc deleted file mode 100644 index 1a38ba7..0000000 --- a/node_modules/scrypt/scrypt_node.cc +++ /dev/null @@ -1,75 +0,0 @@ -/* - scrypt_node.cc - - Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - - This source code is provided 'as-is', without any express or implied - warranty. In no event will the author be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - - 3. This notice may not be removed or altered from any source distribution. - - Barry Steyn barry.steyn@gmail.com - -*/ -#include -#include -#include - -using namespace v8; - -// -// Forward declarations -// -NAN_METHOD(paramsSync); -NAN_METHOD(params); -NAN_METHOD(kdfSync); -NAN_METHOD(kdf); -NAN_METHOD(kdfVerifySync); -NAN_METHOD(kdfVerify); -NAN_METHOD(hashSync); -NAN_METHOD(hash); - -// -// Module initialisation -// -NAN_MODULE_INIT(InitAll) { - - Nan::Set(target, Nan::New("paramsSync").ToLocalChecked(), - Nan::GetFunction(Nan::New(paramsSync)).ToLocalChecked()); - - Nan::Set(target, Nan::New("params").ToLocalChecked(), - Nan::GetFunction(Nan::New(params)).ToLocalChecked()); - - Nan::Set(target, Nan::New("kdfSync").ToLocalChecked(), - Nan::GetFunction(Nan::New(kdfSync)).ToLocalChecked()); - - Nan::Set(target, Nan::New("kdf").ToLocalChecked(), - Nan::GetFunction(Nan::New(kdf)).ToLocalChecked()); - - Nan::Set(target, Nan::New("verifySync").ToLocalChecked(), - Nan::GetFunction(Nan::New(kdfVerifySync)).ToLocalChecked()); - - Nan::Set(target, Nan::New("verify").ToLocalChecked(), - Nan::GetFunction(Nan::New(kdfVerify)).ToLocalChecked()); - - Nan::Set(target, Nan::New("hashSync").ToLocalChecked(), - Nan::GetFunction(Nan::New(hashSync)).ToLocalChecked()); - - Nan::Set(target, Nan::New("hash").ToLocalChecked(), - Nan::GetFunction(Nan::New(hash)).ToLocalChecked()); -} - -NODE_MODULE(scrypt, InitAll) diff --git a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_async.h b/node_modules/scrypt/src/node-boilerplate/inc/scrypt_async.h deleted file mode 100644 index f58a0f5..0000000 --- a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_async.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -scrypt_async.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _SCRYPTASYNC_H_ -#define _SCRYPTASYNC_H_ - -#include "scrypt_common.h" - -// -// Scrypt Async Worker -// - -//Note: This class is implemented for common async -// class properties that applies to Scrypt functionality -// only. These properties are: -// (1) Creation of Scrypt specific Error Object -// (2) result integer that denotes the response from the Scrypt C library -// (3) ScryptPeristentObject that holds input arguments from JS land -class ScryptAsyncWorker : public Nan::AsyncWorker { - public: - ScryptAsyncWorker(Nan::Callback* callback) : Nan::AsyncWorker(callback), result(0) {}; - - // - // Overrides Nan, needed for creating Scrypt Error - // - void HandleErrorCallback() { - Nan::HandleScope scope; - - v8::Local argv[] = { - NodeScrypt::ScryptError(result) - }; - callback->Call(1, argv); - } - - // - // Overrides Nan, needed for checking result - // - void WorkComplete() { - Nan::HandleScope scope; - - if (result == 0) - HandleOKCallback(); - else - HandleErrorCallback(); - - delete callback; - callback = NULL; - } - - protected: - // - // Scrypt specific state - // - v8::Local ScryptPeristentObject; // Anything persistent stored here - unsigned int result; // Result of Scrypt functions -}; - -#endif /* _SCRYPTASYNC_H_ */ diff --git a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_common.h b/node_modules/scrypt/src/node-boilerplate/inc/scrypt_common.h deleted file mode 100644 index 5fc6f98..0000000 --- a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_common.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -scrypt_common.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _SCRYPTCOMMON_H_ -#define _SCRYPTCOMMON_H_ - -namespace NodeScrypt { - - // - // Holds N,r and p parameters - // - struct Params { - const uint32_t N; - const uint32_t r; - const uint32_t p; - - Params(const v8::Local &obj) : - N(obj->Get(Nan::New("N").ToLocalChecked())->Uint32Value()), - r(obj->Get(Nan::New("r").ToLocalChecked())->Uint32Value()), - p(obj->Get(Nan::New("p").ToLocalChecked())->Uint32Value()) {} - }; - - // - // Create a Scrypt error - // - v8::Local ScryptError(const unsigned int error); -}; - -#endif /* _SCRYPTCOMMON_H_ */ diff --git a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_hash_async.h b/node_modules/scrypt/src/node-boilerplate/inc/scrypt_hash_async.h deleted file mode 100644 index fcb2e36..0000000 --- a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_hash_async.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -scrypt_hash_async.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _SCRYPTHASHASYNC_ -#define _SCRYPTHASHASYNC_ - -#include "scrypt_async.h" - -class ScryptHashAsyncWorker : public ScryptAsyncWorker { - public: - ScryptHashAsyncWorker(Nan::NAN_METHOD_ARGS_TYPE info) : - ScryptAsyncWorker(new Nan::Callback(info[4].As())), - key_ptr(reinterpret_cast(node::Buffer::Data(info[0]))), - key_size(node::Buffer::Length(info[0])), - params(info[1]->ToObject()), - hash_size(info[2]->IntegerValue()), - salt_ptr(reinterpret_cast(node::Buffer::Data(info[3]))), - salt_size(static_cast(node::Buffer::Length(info[3]))) - { - ScryptPeristentObject = Nan::New(); - ScryptPeristentObject->Set(Nan::New("KeyBuffer").ToLocalChecked(), info[0]); - ScryptPeristentObject->Set(Nan::New("HashBuffer").ToLocalChecked(), Nan::NewBuffer(static_cast(hash_size)).ToLocalChecked()); - ScryptPeristentObject->Set(Nan::New("SaltBuffer").ToLocalChecked(), info[3]); - SaveToPersistent("ScryptPeristentObject", ScryptPeristentObject); - - hash_ptr = reinterpret_cast(node::Buffer::Data(ScryptPeristentObject->Get(Nan::New("HashBuffer").ToLocalChecked()))); - }; - - void Execute(); - void HandleOKCallback(); - - private: - const uint8_t* key_ptr; - const size_t key_size; - const NodeScrypt::Params params; - const size_t hash_size; - const uint8_t* salt_ptr; - const size_t salt_size; - uint8_t* hash_ptr; -}; - -#endif /* _SCRYPTHASHASYNC_ */ diff --git a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_kdf-verify_async.h b/node_modules/scrypt/src/node-boilerplate/inc/scrypt_kdf-verify_async.h deleted file mode 100644 index bef4ccc..0000000 --- a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_kdf-verify_async.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -scrypt_kdf_verify_async.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _KDF_VERIFY_ASYNC_H -#define _KDF_VERIFY_ASYNC_H - -#include "scrypt_async.h" - -class ScryptKDFVerifyAsyncWorker : public ScryptAsyncWorker { - public: - ScryptKDFVerifyAsyncWorker(Nan::NAN_METHOD_ARGS_TYPE info) : - ScryptAsyncWorker(new Nan::Callback(info[2].As())), - kdf_ptr(reinterpret_cast(node::Buffer::Data(info[0]))), - key_ptr(reinterpret_cast(node::Buffer::Data(info[1]))), - key_size(node::Buffer::Length(info[1])), - match(false) - { - ScryptPeristentObject = Nan::New(); - ScryptPeristentObject->Set(Nan::New("KDFBuffer").ToLocalChecked(), info[0]); - ScryptPeristentObject->Set(Nan::New("KeyBuffer").ToLocalChecked(), info[1]); - SaveToPersistent("ScryptPeristentObject", ScryptPeristentObject); - }; - - void Execute(); - void HandleOKCallback(); - - private: - const uint8_t* kdf_ptr; - const uint8_t* key_ptr; - const size_t key_size; - bool match; -}; - -#endif /* _KDF_VERIFY_ASYNC_H */ diff --git a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_kdf_async.h b/node_modules/scrypt/src/node-boilerplate/inc/scrypt_kdf_async.h deleted file mode 100644 index 87d645e..0000000 --- a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_kdf_async.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -scrypt_kdf_async.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _SCRYPT_KDF_ASYNC_H -#define _SCRYPT_KDF_ASYNC_H - -#include "scrypt_async.h" - -class ScryptKDFAsyncWorker : public ScryptAsyncWorker { - public: - ScryptKDFAsyncWorker(Nan::NAN_METHOD_ARGS_TYPE args) : - ScryptAsyncWorker(new Nan::Callback(args[3].As())), - key_ptr(reinterpret_cast(node::Buffer::Data(args[0]))), - key_size(node::Buffer::Length(args[0])), - params(args[1]->ToObject()), - salt_ptr(reinterpret_cast(node::Buffer::Data(args[2]))) - { - ScryptPeristentObject = Nan::New(); - ScryptPeristentObject->Set(Nan::New("keyBuffer").ToLocalChecked(), args[0]); - ScryptPeristentObject->Set(Nan::New("KDFResult").ToLocalChecked(), Nan::NewBuffer(96).ToLocalChecked()); - ScryptPeristentObject->Set(Nan::New("salt").ToLocalChecked(), args[2]); - SaveToPersistent("ScryptPeristentObject", ScryptPeristentObject); - - KDFResult_ptr = reinterpret_cast(node::Buffer::Data(ScryptPeristentObject->Get(Nan::New("KDFResult").ToLocalChecked()))); - }; - - void Execute(); - void HandleOKCallback(); - - private: - uint8_t* KDFResult_ptr; - const uint8_t* key_ptr; - const size_t key_size; - const NodeScrypt::Params params; - const uint8_t* salt_ptr; -}; - -#endif /* _SCRYPT_KDF_ASYNC_H */ diff --git a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_params_async.h b/node_modules/scrypt/src/node-boilerplate/inc/scrypt_params_async.h deleted file mode 100644 index 9d64833..0000000 --- a/node_modules/scrypt/src/node-boilerplate/inc/scrypt_params_async.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -scrypt_params_async.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _SCRYPT_PARAMS_ASYNC_H -#define _SCRYPT_PARAMS_ASYNC_H - -#include "scrypt_async.h" - -// Async class -class ScryptParamsAsyncWorker : public ScryptAsyncWorker { - public: - ScryptParamsAsyncWorker(Nan::NAN_METHOD_ARGS_TYPE info) : - ScryptAsyncWorker(new Nan::Callback(info[4].As())), - maxtime(info[0]->NumberValue()), - maxmemfrac(info[1]->NumberValue()), - maxmem(info[2]->IntegerValue()), - osfreemem(info[3]->IntegerValue()) - { - logN = 0; - r = 0; - p = 0; - }; - - void Execute(); - void HandleOKCallback(); - - private: - const double maxtime; - const double maxmemfrac; - const size_t maxmem; - const size_t osfreemem; - - int logN; - uint32_t r; - uint32_t p; -}; - -#endif /* _SCRYPT_PARAMS_ASYNC_H */ diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_common.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_common.cc deleted file mode 100644 index 4df56b1..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_common.cc +++ /dev/null @@ -1,112 +0,0 @@ -/* -scrypt_common.cc - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - - -#include - -#include - -extern "C" { - #include -} - -#include -#include - -#include -#include - -#include - -// -// Anonymous namespace -// -namespace { - // - // Returns error descriptions as generated by Scrypt - // - const char* InternalErrorDescr(const unsigned int error) { - switch(error) { - case 0: - return "success"; - case 1: - return "getrlimit or sysctl(hw.usermem) failed"; - case 2: - return "clock_getres or clock_gettime failed"; - case 3: - return "error computing derived key"; - case 4: - return "could not read salt from /dev/urandom"; - case 5: - return "error in OpenSSL"; - case 6: - return "malloc failed"; - case 7: - return "data is not a valid scrypt-encrypted block"; - case 8: - return "unrecognized scrypt format"; - case 9: - return "decrypting file would take too much memory"; - case 10: - return "decrypting file would take too long"; - case 11: - return "password is incorrect"; - case 12: - return "error writing output file"; - case 13: - return "error reading input file"; - default: - return "error unkown"; - } - } - - // - // Returns error descriptions as generated by Scrypt - // - const char* ScryptErrorDescr(const unsigned int error) { - - unsigned int mask = -1, - base_error = (mask >> 16) & error, - sub_error = (((mask << 16) & error) >> 16); - std::string scrypt_err_description = InternalErrorDescr(base_error); - - if (sub_error) { - scrypt_err_description += " - " + std::string(strerror(sub_error)); - } - - return scrypt_err_description.c_str(); - } -} /* end anonymous namespace */ - -namespace NodeScrypt { - - // - // Creates a Scrypt specific JavaScript Error object - // - v8::Local ScryptError(const unsigned int error) { - Nan::EscapableHandleScope scope; - v8::Local scryptError = Nan::Error(ScryptErrorDescr(error)); - return scope.Escape(scryptError); - } -} //end Scrypt namespace diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_hash_async.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_hash_async.cc deleted file mode 100644 index efa189e..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_hash_async.cc +++ /dev/null @@ -1,60 +0,0 @@ -/* -scrypt_hash_async.cc - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#include -#include - -#include "scrypt_hash_async.h" - -//C linkings needed for Scrypt -extern "C" { - #include "hash.h" -} - -using namespace v8; - -// -// Scrypt Hash Function -// -void ScryptHashAsyncWorker::Execute() { - result = ScryptHashFunction(key_ptr, key_size, salt_ptr, salt_size, params.N, params.r, params.p, hash_ptr, hash_size); -} - -void ScryptHashAsyncWorker::HandleOKCallback() { - Nan::HandleScope scope; - - Local argv[] = { - Nan::Null(), - GetFromPersistent("ScryptPeristentObject")->ToObject()->Get(Nan::New("HashBuffer").ToLocalChecked()) - }; - - callback->Call(2, argv); -} - -// -// Asynchronous Scrypt Params -// -NAN_METHOD(hash) { - Nan::AsyncQueueWorker(new ScryptHashAsyncWorker(info)); -} diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_hash_sync.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_hash_sync.cc deleted file mode 100644 index c917baa..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_hash_sync.cc +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include - -#include "scrypt_common.h" - -// -// Scrypt is a C library and there needs c linkings -// -extern "C" { - #include "hash.h" -} - -using namespace v8; - -// -// Synchronous Scrypt params -// -NAN_METHOD(hashSync) { - // - // Arguments from JavaScript - // - const uint8_t* key_ptr = reinterpret_cast(node::Buffer::Data(info[0])); - const size_t key_size = node::Buffer::Length(info[0]); - const NodeScrypt::Params params = info[1]->ToObject(); - const size_t hash_size = info[2]->IntegerValue(); - const uint8_t* salt_ptr = reinterpret_cast(node::Buffer::Data(info[3])); - const size_t salt_size = node::Buffer::Length(info[3]); - - // - // Variable Declaration - // - Local hash_result = Nan::NewBuffer(static_cast(hash_size)).ToLocalChecked(); - uint8_t* hash_ptr = reinterpret_cast(node::Buffer::Data(hash_result)); - - // - // Scrypt key derivation function - // - const unsigned int result = ScryptHashFunction(key_ptr, key_size, salt_ptr, salt_size, params.N, params.r, params.p, hash_ptr, hash_size); - - // - // Error handling - // - if (result) { - Nan::ThrowError(NodeScrypt::ScryptError(result)); - } - - info.GetReturnValue().Set(hash_result); -} diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.cc deleted file mode 100644 index e9c6425..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.cc +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include - -#include "scrypt_kdf-verify_async.h" - -//Scrypt is a C library and there needs c linkings -extern "C" { - #include "keyderivation.h" -} - -using namespace v8; - -void ScryptKDFVerifyAsyncWorker::Execute() { - // - // Scrypt KDF Verification function - // - result = Verify(kdf_ptr, key_ptr, key_size); - match = (result == 0); - result = (result == 11) ? 0 : result; // Set result to 0 if 11 so error not thrown -} - -void ScryptKDFVerifyAsyncWorker::HandleOKCallback() { - Nan::HandleScope scope; - - Local argv[] = { - Nan::Null(), - (match) ? Nan::True() : Nan::False() - }; - - callback->Call(2, argv); -} - -NAN_METHOD(kdfVerify) { - Nan::AsyncQueueWorker(new ScryptKDFVerifyAsyncWorker(info)); -} diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.cc deleted file mode 100644 index b6f012a..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.cc +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include - -#include "scrypt_common.h" - -//Scrypt is a C library and there needs c linkings -extern "C" { - #include "keyderivation.h" -} - -using namespace v8; - -//Synchronous access to scrypt params -NAN_METHOD(kdfVerifySync) { - // - // Variable Declaration - // - const uint8_t* kdf_ptr = reinterpret_cast(node::Buffer::Data(info[0])); - const uint8_t* key_ptr = reinterpret_cast(node::Buffer::Data(info[1])); - const size_t key_size = node::Buffer::Length(info[1]); - - // - // Scrypt KDF Verification - // - const unsigned int result = Verify(kdf_ptr, key_ptr, key_size); - - // - // Return result (or error) - // - if (result && result != 11) { // 11 is the "error" code for an incorrect match - Nan::ThrowError(NodeScrypt::ScryptError(result)); - } - - info.GetReturnValue().Set((!result) ? Nan::True() : Nan::False()); -} diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_kdf_async.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_kdf_async.cc deleted file mode 100644 index 0d65fde..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_kdf_async.cc +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include - -#include "scrypt_kdf_async.h" - -//Scrypt is a C library and there needs c linkings -extern "C" { - #include "keyderivation.h" -} - -using namespace v8; - -void ScryptKDFAsyncWorker::Execute() { - // - // Scrypt key derivation function - // - result = KDF(key_ptr, key_size, KDFResult_ptr, params.N, params.r, params.p, salt_ptr); -} - -void ScryptKDFAsyncWorker::HandleOKCallback() { - Nan::HandleScope scope; - - Local argv[] = { - Nan::Null(), - GetFromPersistent("ScryptPeristentObject")->ToObject()->Get(Nan::New("KDFResult").ToLocalChecked()) - }; - - callback->Call(2, argv); -} - -// Asynchronous access to scrypt params -NAN_METHOD(kdf) { - Nan::AsyncQueueWorker(new ScryptKDFAsyncWorker(info)); -} diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_kdf_sync.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_kdf_sync.cc deleted file mode 100644 index f874bff..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_kdf_sync.cc +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include - -#include "scrypt_common.h" - -// -// Scrypt is a C library and there needs c linkings -// -extern "C" { - #include "keyderivation.h" -} - -using namespace v8; - -// -// Synchronous Scrypt params -// -NAN_METHOD(kdfSync) { - // - // Variable Declaration - // - Local kdfResult = Nan::NewBuffer(96).ToLocalChecked(); - - // - // Arguments from JavaScript - // - const uint8_t* key_ptr = reinterpret_cast(node::Buffer::Data(info[0])); //assume info[0] is a buffer (checked in JS land) - const size_t keySize = node::Buffer::Length(info[0]); - const NodeScrypt::Params params = info[1]->ToObject(); - const uint8_t* salt_ptr = reinterpret_cast(node::Buffer::Data(info[2])); - - // - // Scrypt key derivation function - // - const unsigned int result = KDF(key_ptr, keySize, reinterpret_cast(node::Buffer::Data(kdfResult)), params.N, params.r, params.p, salt_ptr); - - // - // Error handling - // - if (result) { - Nan::ThrowError(NodeScrypt::ScryptError(result)); - } - - info.GetReturnValue().Set(kdfResult); -} diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_params_async.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_params_async.cc deleted file mode 100644 index 9d5e26a..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_params_async.cc +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include - -#include "scrypt_params_async.h" - -//Scrypt is a C library and there needs c linkings -extern "C" { - #include "pickparams.h" -} - -using namespace v8; - -void ScryptParamsAsyncWorker::Execute() { - // Scrypt: calculate input parameters - result = pickparams(&logN, &r, &p, maxtime, maxmem, maxmemfrac, osfreemem); -} - -void ScryptParamsAsyncWorker::HandleOKCallback() { - Nan::HandleScope scope; - - // Returned params in JSON object - Local obj = Nan::New(); - obj->Set(Nan::New("N").ToLocalChecked(), Nan::New(logN)); - obj->Set(Nan::New("r").ToLocalChecked(), Nan::New(r)); - obj->Set(Nan::New("p").ToLocalChecked(), Nan::New(p)); - - Local argv[] = { - Nan::Null(), - obj - }; - - callback->Call(2, argv); -} - -// Asynchronous access to scrypt params -NAN_METHOD(params) { - Nan::AsyncQueueWorker(new ScryptParamsAsyncWorker(info)); -} diff --git a/node_modules/scrypt/src/node-boilerplate/scrypt_params_sync.cc b/node_modules/scrypt/src/node-boilerplate/scrypt_params_sync.cc deleted file mode 100644 index 450c17f..0000000 --- a/node_modules/scrypt/src/node-boilerplate/scrypt_params_sync.cc +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include - -#include "scrypt_common.h" - -//Scrypt is a C library and there needs c linkings -extern "C" { - #include "pickparams.h" -} - -using namespace v8; - -//Synchronous access to scrypt params -NAN_METHOD(paramsSync) { - // - // Variable Declaration - // - int logN = 0; - uint32_t r = 0; - uint32_t p = 0; - - // - // Arguments from JavaScript - // - const double maxtime = info[0]->NumberValue(); - const size_t maxmem = info[2]->IntegerValue(); - const double maxmemfrac = info[1]->NumberValue(); - const size_t osfreemem = info[3]->IntegerValue(); - - // - // Scrypt: calculate input parameters - // - const unsigned int result = pickparams(&logN, &r, &p, maxtime, maxmem, maxmemfrac, osfreemem); - - // - // Error handling - // - if (result) { - Nan::ThrowError(NodeScrypt::ScryptError(result)); - } - - // - // Return values in JSON object - // - Local obj = Nan::New(); - obj->Set(Nan::New("N").ToLocalChecked(), Nan::New(logN)); - obj->Set(Nan::New("r").ToLocalChecked(), Nan::New(r)); - obj->Set(Nan::New("p").ToLocalChecked(), Nan::New(p)); - - info.GetReturnValue().Set(obj); -} diff --git a/node_modules/scrypt/src/scryptwrapper/hash.c b/node_modules/scrypt/src/scryptwrapper/hash.c deleted file mode 100644 index e73fbdb..0000000 --- a/node_modules/scrypt/src/scryptwrapper/hash.c +++ /dev/null @@ -1,49 +0,0 @@ -/* -hash.c - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#include - -#include -#include -#include "crypto_scrypt.h" -#include "pickparams.h" - -// -// This is the actual key derivation function. -// It is binary safe and is exposed to this module for -// access to the underlying key derivation function of Scrypt -// -unsigned int -ScryptHashFunction(const uint8_t* key, size_t keylen, const uint8_t *salt, size_t saltlen, uint64_t N, uint32_t r, uint32_t p,uint8_t *buf, size_t buflen) { - int rc = crypto_scrypt(key, keylen, salt, saltlen, N, r, p, buf, buflen); - unsigned int error = (rc == 0) ? 0 : 3; - - if (error && errno) { - error |= (errno << 16); - } - - return (error); -} diff --git a/node_modules/scrypt/src/scryptwrapper/inc/hash.h b/node_modules/scrypt/src/scryptwrapper/inc/hash.h deleted file mode 100644 index c286c22..0000000 --- a/node_modules/scrypt/src/scryptwrapper/inc/hash.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -hash.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _KEYDERIVATION_H_ -#define _KEYDERIVATION_H_ - -unsigned int -ScryptHashFunction(const uint8_t*, size_t, const uint8_t*, size_t, uint64_t, uint32_t, uint32_t, uint8_t*, size_t); - -#endif /* !_KEYDERIVATION_H_ */ diff --git a/node_modules/scrypt/src/scryptwrapper/inc/keyderivation.h b/node_modules/scrypt/src/scryptwrapper/inc/keyderivation.h deleted file mode 100644 index fad731b..0000000 --- a/node_modules/scrypt/src/scryptwrapper/inc/keyderivation.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -keyderivation.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _SCRYPTHASH_H_ -#define _SCRYPTHASH_H_ - -unsigned int -KDF(const uint8_t*, size_t, uint8_t*, uint32_t, uint32_t, uint32_t, const uint8_t*); - -unsigned int -Verify(const uint8_t*, const uint8_t*, size_t); - -#endif /* !_SCRYPTHASH_H_ */ diff --git a/node_modules/scrypt/src/scryptwrapper/inc/pickparams.h b/node_modules/scrypt/src/scryptwrapper/inc/pickparams.h deleted file mode 100644 index d3b777b..0000000 --- a/node_modules/scrypt/src/scryptwrapper/inc/pickparams.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -pickparams.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#ifndef _PICKPARAMS_H_ -#define _PICKPARAMS_H_ - -unsigned int -pickparams(int*, uint32_t*, uint32_t*, double, size_t, double, size_t); - -#endif /* !_PICKPARAMS_H_ */ diff --git a/node_modules/scrypt/src/scryptwrapper/keyderivation.c b/node_modules/scrypt/src/scryptwrapper/keyderivation.c deleted file mode 100644 index c04e431..0000000 --- a/node_modules/scrypt/src/scryptwrapper/keyderivation.c +++ /dev/null @@ -1,114 +0,0 @@ -/* -keyderivation.c - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#include "sha256.h" -#include "hash.h" -#include "pickparams.h" -#include "sysendian.h" - -#include -#include - -// -// Creates a password hash. This is the actual key derivation function -// -unsigned int -KDF(const uint8_t* passwd, size_t passwdSize, uint8_t* kdf, uint32_t logN, uint32_t r, uint32_t p, const uint8_t* salt) { - uint64_t N=1; - uint8_t dk[64], - hbuf[32]; - uint8_t *key_hmac = &dk[32]; - SHA256_CTX ctx; - HMAC_SHA256_CTX hctx; - - /* Generate the derived keys. */ - N <<= logN; - if (ScryptHashFunction(passwd, passwdSize, salt, 32, N, r, p, dk, 64)) - return (3); - - /* Construct the hash. */ - memcpy(kdf, "scrypt", 6); //Sticking with Colin Percival's format of putting scrypt at the beginning - kdf[6] = 0; - kdf[7] = logN; - be32enc(&kdf[8], r); - be32enc(&kdf[12], p); - memcpy(&kdf[16], salt, 32); - - /* Add hash checksum. */ - SHA256_Init(&ctx); - SHA256_Update(&ctx, kdf, 48); - SHA256_Final(hbuf, &ctx); - memcpy(&kdf[48], hbuf, 16); - - /* Add hash signature (used for verifying password). */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, kdf, 64); - HMAC_SHA256_Final(hbuf, &hctx); - memcpy(&kdf[64], hbuf, 32); - - return 0; //success -} - -// -// Verifies password hash (also ensures hash integrity at same time) -// -int -Verify(const uint8_t* kdf, const uint8_t* passwd, size_t passwdSize) { - uint64_t N=0; - uint32_t r=0, p=0; - uint8_t dk[64], - salt[32], - hbuf[32]; - uint8_t * key_hmac = &dk[32]; - HMAC_SHA256_CTX hctx; - SHA256_CTX ctx; - - /* Parse N, r, p, salt. */ - N = (uint64_t)1 << kdf[7]; //Remember, kdf[7] is actually LogN - r = be32dec(&kdf[8]); - p = be32dec(&kdf[12]); - memcpy(salt, &kdf[16], 32); - - /* Verify hash checksum. */ - SHA256_Init(&ctx); - SHA256_Update(&ctx, kdf, 48); - SHA256_Final(hbuf, &ctx); - if (memcmp(&kdf[48], hbuf, 16)) - return (7); - - /* Compute Derived Key */ - if (ScryptHashFunction(passwd, passwdSize, salt, 32, N, r, p, dk, 64)) - return (3); - - /* Check hash signature (i.e., verify password). */ - HMAC_SHA256_Init(&hctx, key_hmac, 32); - HMAC_SHA256_Update(&hctx, kdf, 64); - HMAC_SHA256_Final(hbuf, &hctx); - if (memcmp(hbuf, &kdf[64], 32)) - return (11); - - return (0); //Success -} diff --git a/node_modules/scrypt/src/scryptwrapper/pickparams.c b/node_modules/scrypt/src/scryptwrapper/pickparams.c deleted file mode 100644 index c82e52a..0000000 --- a/node_modules/scrypt/src/scryptwrapper/pickparams.c +++ /dev/null @@ -1,101 +0,0 @@ -/* -pickparams.c - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#include -#include - -#include "pickparams.h" -#include "scryptenc_cpuperf.h" -#include "util/memlimit.h" - - -///remove - -#include -//end remove - -/* - * Given maxmem, maxmemfrac and maxtime, this functions calculates the N,r,p variables. - * Values for N,r,p are machine dependent. This is copied directly from Colin Percival's srypt reference code - */ -unsigned int -pickparams(int *logN, uint32_t *r, uint32_t *p, double maxtime, size_t maxmem, double maxmemfrac, size_t osfreemem) { - //Note: logN (as opposed to N) is calculated here. This is because it is compact (it can be represented by an int) - // and it is easy (and quick) to convert to N by right shifting bits. Most importantly, using logN only requires - // 32 bits to be stored. Seeing as it is embedded inside the hash, the smaller the better - size_t memlimit; - double opps; - double opslimit; - double maxN, maxrp; - int rc; - - /* Figure out how much memory to use. */ - if (memtouse(maxmem, maxmemfrac, osfreemem, &memlimit)) - return (1); - - /* Figure out how fast the CPU is. */ - if ((rc = scryptenc_cpuperf(&opps)) != 0) - return ((unsigned int)(rc)); // type cast works since Colin is only using positive integers - opslimit = opps * maxtime; - - /* Allow a minimum of 2^15 salsa20/8 cores. */ - if (opslimit < 32768) - opslimit = 32768; - - /* Set r to 8 */ - *r = 8; // r is the underlying block size, Colin Percival defaults to 8 in his reference implementation - - /* - * The memory limit requires that 128Nr <= memlimit, while the CPU - * limit requires that 4Nrp <= opslimit. If opslimit < memlimit/32, - * opslimit imposes the stronger limit on N. - */ - if (opslimit < memlimit/32) { - /* Set p = 1 and choose N based on the CPU limit. */ - *p = 1; - maxN = opslimit / (*r * 4); - for (*logN = 1; *logN < 63; *logN += 1) { - if ((uint64_t)(1) << *logN > maxN / 2) - break; - } - } else { - /* Set N based on the memory limit. */ - maxN = (double)(memlimit / (*r * 128)); - for (*logN = 1; *logN < 63; *logN += 1) { - if ((uint64_t)(1) << *logN > maxN / 2) - break; - } - - /* Choose p based on the CPU limit. */ - maxrp = (opslimit / 4) / ((uint64_t)(1) << *logN); - if (maxrp > 0x3fffffff) - maxrp = 0x3fffffff; - *p = (uint32_t)(maxrp) / *r; - } - - /* Success! */ - return (0); -} diff --git a/node_modules/scrypt/src/util/memlimit.c b/node_modules/scrypt/src/util/memlimit.c deleted file mode 100644 index ba9f749..0000000 --- a/node_modules/scrypt/src/util/memlimit.c +++ /dev/null @@ -1,50 +0,0 @@ -/* -memlimit.c - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ - -#include - -int -memtouse(size_t maxmem, double maxmemfrac, size_t memlimit_min, size_t * memlimit) -{ - size_t memavail; - - /* Only use the specified fraction of the available memory. */ - if ((maxmemfrac > 0.5) || (maxmemfrac == 0.0)) - maxmemfrac = 0.5; - memavail = (size_t)(maxmemfrac * (double)memlimit_min); - - /* Don't use more than the specified maximum. */ - if ((maxmem > 0) && (memavail > maxmem)) - memavail = maxmem; - - /* But always allow at least 1 MiB. */ - if (memavail < 1048576) - memavail = 1048576; - - /* Return limit via the provided pointer. */ - *memlimit = memavail; - return (0); -} diff --git a/node_modules/scrypt/src/util/memlimit.h b/node_modules/scrypt/src/util/memlimit.h deleted file mode 100644 index af242c8..0000000 --- a/node_modules/scrypt/src/util/memlimit.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -memlimit.h - -Copyright (C) 2013 Barry Steyn (http://doctrina.org/Scrypt-Authentication-For-Node.html) - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -Barry Steyn barry.steyn@gmail.com -*/ -#ifndef _MEMLIMIT_H_ -#define _MEMLIMIT_H_ - -/** - * memtouse(maxmem, maxmemfrac, memlimit): - * Examine the system and return via memlimit the amount of RAM which should - * be used -- the specified fraction of the available RAM, but no more than - * maxmem, and no less than 1MiB. - */ -int memtouse(size_t, double, size_t, size_t*); - -#endif /* !_MEMLIMIT_H_ */ diff --git a/node_modules/scrypt/tests/scrypt-tests.js b/node_modules/scrypt/tests/scrypt-tests.js deleted file mode 100644 index 3fda751..0000000 --- a/node_modules/scrypt/tests/scrypt-tests.js +++ /dev/null @@ -1,789 +0,0 @@ -var chai = require("chai") - , chaiAsPromised = require("chai-as-promised") - , scrypt = require("../"); - -chai.use(chaiAsPromised); - -var expect = chai.expect; - -describe("Scrypt Node Module Tests", function() { - describe("Scrypt Params Function", function() { - //Examines a returned Params JSON object - var examine = function(obj, err) { - expect(err) - .to.not.exist; - - expect(obj) - .to.be.a("Object") - .and.to.have.all.keys("N","r","p"); - - expect(obj) - .to.have.property("N") - .and.to.be.a("Number"); - - expect(obj) - .to.have.property("r") - .and.to.be.a("Number"); - - expect(obj) - .to.have.property("p") - .and.to.be.a("Number"); - } - - describe("Synchronous functionality with incorrect arguments", function () { - it("Will throw SyntexError exception if called without arguments", function () { - expect(scrypt.paramsSync) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: At least one argument is needed - the maxtime$/); - }); - - it("Will throw a RangeError exception if maxtime argument is less than zero", function() { - expect(function() { scrypt.paramsSync(-1); }) - .to.throw(RangeError) - .to.match(/^RangeError: maxtime must be greater than 0$/); - }); - - it("Will throw a TypeError exception if maxmem is not an integer", function() { - expect(function() { scrypt.paramsSync(1, 2.4); }) - .to.throw(TypeError) - .to.match(/^TypeError: maxmem must be an integer$/); - }); - - it("Will throw a RangeError exception if maxmem is less than 0", function() { - expect(function() { scrypt.paramsSync(1, -2); }) - .to.throw(RangeError) - .to.match(/^RangeError: maxmem must be greater than or equal to 0$/); - }); - - it("Will throw a RangeError exception if max_memfrac is not between 0.0 and 1.0", function() { - expect(function() { scrypt.paramsSync(1, 2, -0.1); }) - .to.throw(RangeError) - .to.match(/^RangeError: max_memfrac must be between 0.0 and 1.0 inclusive$/); - - expect(function() { scrypt.paramsSync(1, 2, 1.1); }) - .to.throw(RangeError) - .to.match(/^RangeError: max_memfrac must be between 0.0 and 1.0 inclusive$/); - }); - - it("Will throw a TypeError if any arguments are not numbers", function() { - var args = [1, 2, 0.9]; - - for (var i=0; i < args.length; i++) { - var temp = args[i]; - args[i] = "not a number"; - expect(function() { scrypt.paramsSync(args[0], args[1], args[2]); }) - .to.throw(TypeError) - .to.match(/^TypeError: (maxtime|maxmem|max_memfrac) must be a number$/); - - args[i] = temp; - } - }); - }); - - describe("Synchronous functionality with correct arguments", function() { - it("Should return a JSON object when only maxtime is defined", function() { - var params = scrypt.paramsSync(1); - examine(params); - }); - - it("Should return a JSON object when only maxtime and maxmem are defined", function() { - var params = scrypt.paramsSync(1, 2); - examine(params); - }); - - it("Should return a JSON object when maxtime, maxmem and max_memfrac are defined", function() { - var params = scrypt.paramsSync(1, 2, 0.5); - examine(params); - }); - }); - - describe("Asynchronous functionality with incorrect arguments", function() { - var promise = undefined; - - // Disables promises for async test (if promises are available) - before(function() { - if (typeof Promise !== "undefined") { - promise = Promise; - Promise = undefined; - } - }); - - // Restores promises - after(function() { - if (typeof Promise === "undefined" && promise) { - Promise = promise; - } - }); - - it("Will throw SyntexError exception if called without arguments", function () { - expect(scrypt.params) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: No arguments present$/); - }); - - it("Will throw a SyntaxError if no callback function is present", function() { - expect(function() {scrypt.params(1);}) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: No callback function present, and Promises are not available$/); - }) - - it("Will throw a SyntaxError if callback function is the first argument present", function() { - expect(function() {scrypt.params(function(){});}) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: At least one argument is needed before the callback - the maxtime$/); - }) - - it("Will throw a RangeError exception if maxtime argument is less than zero", function() { - expect(function() { scrypt.params(-1, function(){}); }) - .to.throw(RangeError) - .to.match(/^RangeError: maxtime must be greater than 0$/); - }); - - it("Will throw a TypeError exception if maxmem is not an integer", function() { - expect(function() { scrypt.params(1, 2.4, function(){}); }) - .to.throw(TypeError) - .to.match(/^TypeError: maxmem must be an integer$/); - }); - - it("Will throw a RangeError exception if maxmem is less than 0", function() { - expect(function() { scrypt.params(1, -2, function(){}); }) - .to.throw(RangeError) - .to.match(/^RangeError: maxmem must be greater than or equal to 0$/); - }); - - it("Will throw a RangeError exception if max_memfrac is not between 0.0 and 1.0", function() { - expect(function() { scrypt.params(1, 2, -0.1, function(){}); }) - .to.throw(RangeError) - .to.match(/^RangeError: max_memfrac must be between 0.0 and 1.0 inclusive$/); - - expect(function() { scrypt.params(1, 2, 1.1, function(){}); }) - .to.throw(RangeError) - .to.match(/^RangeError: max_memfrac must be between 0.0 and 1.0 inclusive$/); - }); - - it("Will throw a TypeError if any arguments are not numbers", function() { - var args = [1, 2, 0.9]; - - for (var i=0; i < args.length; i++) { - var temp = args[i]; - args[i] = "not a number"; - expect(function() { scrypt.params(args[0], args[1], args[2], function(){}); }) - .to.throw(TypeError) - .to.match(/^TypeError: (maxtime|maxmem|max_memfrac) must be a number$/); - - args[i] = temp; - } - }); - }); - - describe("Asynchronous functionality with correct arguments", function() { - it("Should return a JSON object when only maxtime is defined", function(done) { - scrypt.params(1, function(err, params) { - examine(params, err); - done(); - }); - }); - - it("Should return a JSON object when only maxtime and maxmem are defined", function(done) { - scrypt.params(1, 2, function(err, params){ - examine(params, err); - done(); - }); - }); - - it("Should return a JSON object when maxtime, maxmem and max_memfrac are defined", function(done) { - scrypt.params(1, 2, 0.5, function(err, params){ - examine(params, err); - done(); - }); - }); - }); - - describe("Promise asynchronous functionality with correct arguments", function() { - if (typeof Promise !== "undefined") { - it("Should return a JSON object when only maxtime is defined", function(done){ - scrypt.params(1).then(function(params) { - examine(params); - done(); - }); - }); - - it("Should return a JSON object when only maxtime and maxmem are defined", function(done) { - scrypt.params(1, 2).then(function(params) { - examine(params); - done(); - }); - }); - - it("Should return a JSON object when maxtime, maxmem and max_memfrac are defined", function(done) { - scrypt.params(1, 2, 0.5).then(function(params) { - examine(params); - done(); - }); - }); - } - }); - }); - - describe("Scrypt KDF Function", function() { - describe("Synchronous functionality with incorrect arguments", function(){ - it("Will throw SyntexError exception if called without arguments", function () { - expect(scrypt.kdfSync) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: At least two arguments are needed - the key and the Scrypt paramaters object$/); - }); - - it("Will throw a TypeError if the key is not a string or a Buffer object", function() { - expect(function(){scrypt.kdfSync(1123, {N:1, r:1, p:1})}) - .to.throw(TypeError) - .to.match(/^TypeError: Key type is incorrect: It can only be of type string or Buffer$/); - }) - - it("Will throw a TypeError if the Scrypt params object is incorrect", function() { - expect(function(){scrypt.kdfSync("password", {N:1, p:1})}) - .to.throw(TypeError) - .to.match(/^TypeError: Scrypt params object does not have 'r' property present$/); - }) - }); - - describe("Synchronous functionality with correct arguments", function() { - it("Will return a buffer object containing the KDF with a string input", function() { - var result = scrypt.kdfSync("password", {N:1, r:1, p:1}); - expect(result) - .to.be.an.instanceof(Buffer); - expect(result) - .to.have.length.above(0); - }); - }); - - describe("Asynchronous functionality with incorrect arguments", function() { - var promise = undefined; - - // Disables promises for async test (if promises are available) - before(function() { - if (typeof Promise !== "undefined") { - promise = Promise; - Promise = undefined; - } - }); - - // Restores promises - after(function() { - if (typeof Promise === "undefined" && promise) { - Promise = promise; - } - }); - - it("Will throw SyntexError exception if called without arguments", function () { - expect(scrypt.kdf) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: No arguments present$/); - }); - - it("Will throw a SyntaxError if no callback function is present", function() { - expect(function() {scrypt.kdf(new Buffer("password"), {N:1, r:1, p:1});}) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: No callback function present, and Promises are not available$/); - }) - - it("Will throw a TypeError if the key is not a string or a Buffer object", function() { - expect(function(){scrypt.kdf(1123, {N:1, r:1, p:1}, function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: Key type is incorrect: It can only be of type string or Buffer$/); - }) - - it("Will throw a TypeError if the Scrypt params object is incorrect", function() { - expect(function(){scrypt.kdf("password", {N:1, r:1}, function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: Scrypt params object does not have 'p' property present$/); - }) - }); - - describe("Asynchronous functionality with correct arguments", function() { - it("Will return a buffer object containing the KDF with a buffer input", function(done) { - scrypt.kdf(new Buffer("password"), {N:1, r:1, p:1}, function(err, result) { - expect(result) - .to.be.an.instanceof(Buffer); - expect(result) - .to.have.length.above(0); - expect(err) - .to.not.exist; - done(); - }); - }); - }); - - describe("Promise asynchronous functionality with correct arguments", function() { - if (typeof Promise !== "undefined") { - it("Will return a buffer object containing the KDF with a buffer input", function(done) { - scrypt.kdf(new Buffer("password"), {N:16, r:1, p:1}).then(function(result) { - expect(result) - .to.be.an.instanceof(Buffer); - expect(result) - .to.have.length.above(0); - done(); - }); - }); - } - }); - }); - - describe("Scrypt Hash Function", function() { - describe("Create Hash", function() { - describe("Synchronous functionality with incorrect arguments", function() { - it("Will throw SyntexError exception if called without arguments", function () { - expect(scrypt.hashSync) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: At least four arguments are needed - the key to hash, the scrypt params object, the output length of the hash and the salt$/); - }); - - it("Will throw a TypeError if the key is not a string or a Buffer object", function() { - expect(function(){scrypt.hashSync(1123, {N:1, r:1, p:1}, 32, "NaCl")}) - .to.throw(TypeError) - .to.match(/^TypeError: Key type is incorrect: It can only be of type string or Buffer$/); - }) - - it("Will throw a TypeError if the Scrypt params object is incorrect", function() { - expect(function(){scrypt.hashSync("hash something", {N:1, r:1}, 32, "NaCl")}) - .to.throw(TypeError) - .to.match(/^TypeError: Scrypt params object does not have 'p' property present$/); - }) - - it("Will throw a TypeError if the hash length is not an integer", function() { - expect(function(){scrypt.hashSync("hash something", {N:1, r:1, p:1}, 32.5, new Buffer("NaCl"))}) - .to.throw(TypeError) - .to.match(/^TypeError: Hash length must be an integer$/); - - expect(function(){scrypt.hashSync("hash something", {N:1, r:1, p:1}, "thirty-two", "NaCl")}) - .to.throw(TypeError) - .to.match(/^TypeError: Hash length must be an integer$/); - }) - - it("Will throw a TypeError if the salt is not a string or a Buffer object", function() { - expect(function(){scrypt.hashSync("hash something", {N:1, r:1, p:1}, 32, 45)}) - .to.throw(TypeError) - .to.match(/^TypeError: Salt type is incorrect: It can only be of type string or Buffer$/); - }) - }); - - describe("Synchronous functionality with correct arguments", function() { - var hash_length = Math.floor(Math.random() * 100) + 1; //Choose random number between 1 and 100 - it("Will return a buffer object containing the hash with a string input", function() { - var result = scrypt.hashSync("hash something", {N:16, r:1, p:1}, hash_length, "NaCl"); - expect(result) - .to.be.an.instanceof(Buffer); - expect(result) - .to.have.length(hash_length); - }); - }); - - describe("Asynchronous functionality with incorrect arguments", function() { - var promise = undefined; - - // Disables promises for async test (if promises are available) - before(function() { - if (typeof Promise !== "undefined") { - promise = Promise; - Promise = undefined; - } - }); - - // Restores promises - after(function() { - if (typeof Promise === "undefined" && promise) { - Promise = promise; - } - }); - - it("Will throw SyntexError exception if called without arguments", function () { - expect(scrypt.hash) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: No arguments present$/); - }); - - it("Will throw a SyntaxError if no callback function is present", function() { - expect(function() {scrypt.hash("hash something", {N:16, r:1, p:1}, 64, "NaCl");}) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: No callback function present, and Promises are not available$/); - }) - - it("Will throw a TypeError if the key is not a string or a Buffer object", function() { - expect(function(){scrypt.hash(1123, {N:16, r:1, p:1}, 32, "NaCl", function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: Key type is incorrect: It can only be of type string or Buffer$/); - }) - - it("Will throw a TypeError if the Scrypt params object is incorrect", function() { - expect(function(){scrypt.hash("hash something", {N:16, r:1}, 32, "NaCl", function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: Scrypt params object does not have 'p' property present$/); - }) - - it("Will throw a TypeError if the hash length is not an integer", function() { - expect(function(){scrypt.hash("hash something", {N:16, r:1, p:1}, 32.5, new Buffer("NaCl"), function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: Hash length must be an integer$/); - - expect(function(){scrypt.hash("hash something", {N:16, r:1, p:1}, "thirty-two", "NaCl", function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: Hash length must be an integer$/); - }) - - it("Will throw a TypeError if the salt is not a string or a Buffer object", function() { - expect(function(){scrypt.hash("hash something", {N:16, r:1, p:1}, 32, 45, function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: Salt type is incorrect: It can only be of type string or Buffer$/); - }) - }); - - describe("Asynchronous functionality with correct arguments", function() { - var hash_length = Math.floor(Math.random() * 100) + 1; //Choose random number between 1 and 100 - it("Will return a buffer object containing the hash with a string input", function(done) { - scrypt.hash("hash something", {N:16, r:1, p:1}, hash_length, "NaCl", function(err, result){ - expect(result) - .to.be.an.instanceof(Buffer); - expect(result) - .to.have.length(hash_length); - expect(err) - .to.not.exist; - done(); - }); - }); - }); - - describe("Promise asynchronous functionality with correct arguments", function() { - if (typeof Promise !== "undefined") { - var hash_length = Math.floor(Math.random() * 100) + 1; //Choose random number between 1 and 100 - it("Will return a buffer object containing the hash with a string input", function(done) { - scrypt.hash("hash something", {N:16, r:1, p:1}, hash_length, "NaCl").then(function(result){ - expect(result) - .to.be.an.instanceof(Buffer); - expect(result) - .to.have.length(hash_length); - done(); - }); - }); - } - }); - }); - - describe("Verify Hash", function() { - describe("Synchronous functionality with incorrect arguments", function() { - it("Will throw SyntexError exception if called without arguments", function () { - expect(scrypt.verifyKdfSync) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: At least two arguments are needed - the KDF and the key$/); - }); - - it("Will throw a TypeError if the KDF is not a string or a Buffer object", function() { - expect(function(){scrypt.verifyKdfSync(1232,"key")}) - .to.throw(TypeError) - .to.match(/^TypeError: KDF type is incorrect: It can only be of type string or Buffer$/); - }); - - it("Will throw a TypeError if the key is not a string or a Buffer object", function() { - expect(function(){scrypt.verifyKdfSync("KDF", 1232)}) - .to.throw(TypeError) - .to.match(/^TypeError: Key type is incorrect: It can only be of type string or Buffer$/); - }); - - it("Will throw an Error if KDF buffer is not a valid scrypt-encrypted block", function() { - expect(function(){scrypt.verifyKdfSync("KDF", "key")}) - .to.throw(Error) - .to.match(/^Error: data is not a valid scrypt-encrypted block$/); - }); - }); - - describe("Synchronous functionality with correct arguments", function() { - var key = "kdf" - , kdf = scrypt.kdfSync(key, {N:16, r:1, p:1}); - - it("Will produce a boolean value", function(){ - expect(scrypt.verifyKdfSync(kdf, key)) - .to.be.a('boolean'); - - expect(scrypt.verifyKdfSync(kdf, "different key")) - .to.be.a('boolean'); - }); - }); - - describe("Asynchronous functionality with incorrect arguments", function() { - var promise = undefined; - - // Disables promises for async test (if promises are available) - before(function() { - if (typeof Promise !== "undefined") { - promise = Promise; - Promise = undefined; - } - }); - - // Restores promises - after(function() { - if (typeof Promise === "undefined" && promise) { - Promise = promise; - } - }); - - it("Will throw SyntexError exception if called without arguments", function () { - expect(scrypt.verifyKdf) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: No arguments present$/); - }); - - it("Will throw a SyntaxError if no callback function is present", function() { - var key = "kdf" - , kdf = scrypt.kdfSync(key, {N:16, r:1, p:1}); - - expect(function() {scrypt.verifyKdf(kdf, key);}) - .to.throw(SyntaxError) - .to.match(/^SyntaxError: No callback function present, and Promises are not available$/); - }) - - it("Will throw a TypeError if the KDF is not a string or a Buffer object", function() { - expect(function(){scrypt.verifyKdf(1232,"key", function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: KDF type is incorrect: It can only be of type string or Buffer$/); - }); - - it("Will throw a TypeError if the key is not a string or a Buffer object", function() { - expect(function(){scrypt.verifyKdfSync("KDF", 1232, function(){})}) - .to.throw(TypeError) - .to.match(/^TypeError: Key type is incorrect: It can only be of type string or Buffer$/); - }); - - it("Will throw an Error if KDF buffer is not a valid scrypt-encrypted block", function() { - expect(function(){scrypt.verifyKdfSync("KDF", "key", function(){})}) - .to.throw(Error) - .to.match(/^Error: data is not a valid scrypt-encrypted block$/); - }); - }); - - describe("Asynchronous functionality with correct arguments", function() { - var key = "kdf" - , kdf = scrypt.kdfSync(key, {N:16, r:1, p:1}); - - it("Will produce a boolean value", function(done){ - scrypt.verifyKdf(kdf, key, function(err, result) { - expect(result) - .to.be.a('boolean') - .to.equal(true); - expect(err) - .to.not.exist; - - scrypt.verifyKdf(kdf, "different key", function(err, result) { - expect(result) - .to.be.a('boolean') - .to.equal(false); - expect(err) - .to.not.exist; - done(); - }); - }); - }); - }); - - describe("Promise asynchronous functionality with correct arguments", function() { - var key = "kdf" - , kdf = scrypt.kdfSync(key, {N:16, r:1, p:1}); - - if (typeof Promise !== "undefined") { - it("Will produce a boolean value", function(done){ - scrypt.verifyKdf(kdf, key).then(function(result) { - expect(result) - .to.be.a('boolean') - .to.equal(true); - - scrypt.verifyKdf(kdf, "different key").then(function(result) { - expect(result) - .to.be.a('boolean') - .to.equal(false); - done(); - }); - }); - }); - } - }); - }); - }); - - describe("Logic", function() { - describe("Test vectors", function() { - describe("Synchronous", function() { - it("Vector 1: Will produce an identical vector to scrypt paper", function() { - var result = scrypt.hashSync("", {"N":16,"r":1,"p":1}, 64, ""); - expect(result.toString("hex")) - .to.equal("77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906"); - }) - - it("Vector 2: Will produce an identical vector to scrypt paper", function() { - var result = scrypt.hashSync("password",{"N":1024,"r":8,"p":16},64, new Buffer("NaCl")); - expect(result.toString("hex")) - .to.equal("fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640"); - }) - - it("Vector 3: Will produce an identical vector to scrypt paper", function() { - var result = scrypt.hashSync(new Buffer("pleaseletmein"),{"N":16384,"r":8,"p":1},64, "SodiumChloride"); - expect(result.toString("hex")) - .to.equal("7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887"); - }) - }); - describe("Aynchronous", function() { - it("Vector 1: Will produce an identical vector to scrypt paper", function(done) { - scrypt.hash("", {"N":16,"r":1,"p":1}, 64, "", function(err, result) { - expect(result.toString("hex")) - .to.equal("77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906"); - expect(err) - .to.not.exist; - done(); - }); - }); - - it("Vector 2: Will produce an identical vector to scrypt paper", function(done) { - scrypt.hash(new Buffer("password"),{"N":1024,"r":8,"p":16},64, new Buffer("NaCl"), function(err, result) { - expect(result.toString("hex")) - .to.equal("fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640"); - expect(err) - .to.not.exist; - done(); - }); - }); - - it("Vector 3: Will produce an identical vector to scrypt paper", function(done) { - scrypt.hash("pleaseletmein",{"N":16384,"r":8,"p":1},64, "SodiumChloride", function(err, result) { - expect(result.toString("hex")) - .to.equal("7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887"); - expect(err) - .to.not.exist; - done(); - }); - }); - }); - }); - - describe("Kdf Logic", function() { - describe("Synchronous", function() { - it("Will use random salt to ensure no two KDFs are the same, even if the keys are identical", function(){ - var result1 = scrypt.kdfSync("password", {N:16, r:1, p:1}) - , result2 = scrypt.kdfSync("password", {N:16, r:1, p:1}); - - expect(result1.toString("base64")) - .to.not.equal(result2.toString("base64")); - }); - - it("Will correctly verify hash as true if identical keys are used for kdf and verify", function(){ - var key = "this is a key" - , kdf = scrypt.kdfSync(key, {N:16, r:1, p:1}) - , result = scrypt.verifyKdfSync(kdf, key); - - expect(result) - .to.be.a("boolean") - .to.equal(true); - }); - - it("Will correctly verify hash as false if different keys are used for kdf and verify", function(){ - var key = "this is a key" - , kdf = scrypt.kdfSync(key, {N:16, r:1, p:1}) - , result = scrypt.verifyKdfSync(kdf, new Buffer("Another key")); - - expect(result) - .to.be.a("boolean") - .to.equal(false); - }); - }); - - describe("Asynchronous", function() { - it("Will use random salt to ensure no two KDFs are the same, even if the keys are identical", function(done) { - scrypt.kdf("password", {N:16, r:1, p:1}, function(err, result1) { - expect(err) - .to.not.exist; - scrypt.kdf("password", {N:16, r:1, p:1}, function(err, result2) { - expect(err) - .to.not.exist; - expect(result1.toString("base64")) - .to.not.equal(result2.toString("base64")); - done(); - }); - }); - }); - - it("Will correctly verify hash as true if identical keys are used for kdf and verify", function(done){ - var key = "this is a key" - , kdf = scrypt.kdfSync(key, {N:16, r:1, p:1}); - - scrypt.verifyKdf(kdf, key, function(err, result) { - expect(result) - .to.be.a("boolean") - .to.equal(true); - expect(err) - .to.not.exist; - done(); - }); - }); - - it("Will correctly verify hash as false if different keys are used for kdf and verify", function(done){ - var key = "this is a key" - , kdf = scrypt.kdfSync(key, {N:16, r:1, p:1}); - - scrypt.verifyKdf(kdf, "Another Key", function(err, result) { - expect(result) - .to.be.a("boolean") - .to.equal(false); - expect(err) - .to.not.exist; - done(); - }); - }); - }); - }); - - describe("Hash Logic", function() { - var hash_length = Math.floor(Math.random() * 100) + 1; //Choose random number between 1 and 100 - describe("Synchronous", function() { - it("Will be deterministic if salts are identical", function() { - var result1 = scrypt.hashSync(new Buffer("hash something"), {N:16, r:1, p:1}, hash_length, "NaCl"); - expect(result1) - .to.be.an.instanceof(Buffer); - expect(result1) - .to.have.length(hash_length); - - var result2 = scrypt.hashSync("hash something", {N:16, r:1, p:1}, hash_length, new Buffer("NaCl")); - expect(result2) - .to.be.an.instanceof(Buffer); - expect(result2) - .to.have.length(hash_length); - - expect(result1.toString("base64")) - .to.equal(result2.toString("base64")); - }); - }); - - describe("Asynchronous", function() { - it("Will be deterministic if salts are identical", function(done) { - scrypt.hash(new Buffer("hash something"), {N:16, r:1, p:1}, hash_length, "NaCl", function(err, result1) { - expect(result1) - .to.be.an.instanceof(Buffer); - expect(result1) - .to.have.length(hash_length); - expect(err) - .to.not.exist; - - scrypt.hash("hash something", {N:16, r:1, p:1}, hash_length, new Buffer("NaCl"), function(err, result2) { - expect(result2) - .to.be.an.instanceof(Buffer); - expect(result2) - .to.have.length(hash_length); - expect(err) - .to.not.exist; - - expect(result1.toString("base64")) - .to.equal(result2.toString("base64")); - - done(); - }); - }); - }); - }); - }); - }); -}); diff --git a/node_modules/scryptsy/.npmignore b/node_modules/scryptsy/.npmignore deleted file mode 100644 index b14f576..0000000 --- a/node_modules/scryptsy/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -test/ -.gitignore -.min-wd \ No newline at end of file diff --git a/node_modules/scryptsy/.travis.yml b/node_modules/scryptsy/.travis.yml deleted file mode 100644 index df73628..0000000 --- a/node_modules/scryptsy/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -before_install: - - "npm install npm -g" -node_js: - - 0.12 - - 0.10 - - iojs -env: - - TEST_SUITE=unit - - TEST_SUITE=standard - - TEST_SUITE=coveralls -script: "npm run-script $TEST_SUITE" diff --git a/node_modules/scryptsy/CHANGELOG.md b/node_modules/scryptsy/CHANGELOG.md deleted file mode 100644 index a7365a2..0000000 --- a/node_modules/scryptsy/CHANGELOG.md +++ /dev/null @@ -1,40 +0,0 @@ -1.2.1 / 2015-03-01 ------------------- -- now using standard for code formatting -- now using `pbkdf2` module over `pbkdf2-sha256`, huge performance increase in Node - -1.2.0 / 2014-12-11 ------------------- -- upgraded `pbkdf2-sha256` from `1.0.1` to `1.1.0` -- removed `browser` field for `crypto`; not-necessary anymore - -1.1.0 / 2014-07-28 ------------------- -- added `progressCallback` (Nadav Ivgi / #4)[https://github.com/cryptocoinjs/scryptsy/pull/4] - -1.0.0 / 2014-06-10 ------------------- -- moved tests to fixtures -- removed semilcolons per http://cryptocoinjs.com/about/contributing/#semicolons -- changed `module.exports.scrypt = funct..` to `module.exports = funct...` -- removed `terst` from dev deps -- upgraded `"pbkdf2-sha256": "~0.1.1"` to `"pbkdf2-sha256": "^1.0.1"` -- added `crypto-browserify` dev dep for `pbkdf2-sha256` tests -- added TravisCI -- added Coveralls -- added testling - -0.2.0 / 2014-03-05 ------------------- -- made a lot of scrypt functions internal along with variables to make thread safe - -0.1.0 / 2014-02-18 ------------------- -- changed spacing from 4 to 2 -- removed unneeded JavaScript implementations. Using `pbkdf2-sha256` dep now. -- add browser test support -- convert from `Array` to typed arrays and `Buffer` - -0.0.1 / 2014-02-18 ------------------- -- initial release. Forked from https://github.com/cheongwy/node-scrypt-js and added tests. diff --git a/node_modules/scryptsy/README.md b/node_modules/scryptsy/README.md deleted file mode 100644 index 8e03bda..0000000 --- a/node_modules/scryptsy/README.md +++ /dev/null @@ -1,14 +0,0 @@ -scryptsy -======== - -[![build status](https://secure.travis-ci.org/cryptocoinjs/scryptsy.png)](http://travis-ci.org/cryptocoinjs/scryptsy) -[![Coverage Status](https://img.shields.io/coveralls/cryptocoinjs/scryptsy.svg)](https://coveralls.io/r/cryptocoinjs/scryptsy) -[![Version](http://img.shields.io/npm/v/scryptsy.svg)](https://www.npmjs.org/package/scryptsy) - -`scryptsy` is a pure JavaScript implementation of the [scrypt][wiki] key deriviation function that is fully compatible with Node.js and the browser (via Browserify). - -### Official documentation: - -http://cryptocoinjs.com/modules/crypto/scryptsy/ - -[wiki]: http://en.wikipedia.org/wiki/Scrypt diff --git a/node_modules/scryptsy/lib/scrypt.js b/node_modules/scryptsy/lib/scrypt.js deleted file mode 100644 index e19568e..0000000 --- a/node_modules/scryptsy/lib/scrypt.js +++ /dev/null @@ -1,179 +0,0 @@ -var pbkdf2Sync = require('pbkdf2').pbkdf2Sync - -var MAX_VALUE = 0x7fffffff - -// N = Cpu cost, r = Memory cost, p = parallelization cost -function scrypt (key, salt, N, r, p, dkLen, progressCallback) { - if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2') - - if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large') - if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large') - - var XY = new Buffer(256 * r) - var V = new Buffer(128 * r * N) - - // pseudo global - var B32 = new Int32Array(16) // salsa20_8 - var x = new Int32Array(16) // salsa20_8 - var _X = new Buffer(64) // blockmix_salsa8 - - // pseudo global - var B = pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256') - - var tickCallback - if (progressCallback) { - var totalOps = p * N * 2 - var currentOp = 0 - - tickCallback = function () { - ++currentOp - - // send progress notifications once every 1,000 ops - if (currentOp % 1000 === 0) { - progressCallback({ - current: currentOp, - total: totalOps, - percent: (currentOp / totalOps) * 100.0 - }) - } - } - } - - for (var i = 0; i < p; i++) { - smix(B, i * 128 * r, r, N, V, XY) - } - - return pbkdf2Sync(key, B, 1, dkLen, 'sha256') - - // all of these functions are actually moved to the top - // due to function hoisting - - function smix (B, Bi, r, N, V, XY) { - var Xi = 0 - var Yi = 128 * r - var i - - B.copy(XY, Xi, Bi, Bi + Yi) - - for (i = 0; i < N; i++) { - XY.copy(V, i * Yi, Xi, Xi + Yi) - blockmix_salsa8(XY, Xi, Yi, r) - - if (tickCallback) tickCallback() - } - - for (i = 0; i < N; i++) { - var offset = Xi + (2 * r - 1) * 64 - var j = XY.readUInt32LE(offset) & (N - 1) - blockxor(V, j * Yi, XY, Xi, Yi) - blockmix_salsa8(XY, Xi, Yi, r) - - if (tickCallback) tickCallback() - } - - XY.copy(B, Bi, Xi, Xi + Yi) - } - - function blockmix_salsa8 (BY, Bi, Yi, r) { - var i - - arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64) - - for (i = 0; i < 2 * r; i++) { - blockxor(BY, i * 64, _X, 0, 64) - salsa20_8(_X) - arraycopy(_X, 0, BY, Yi + (i * 64), 64) - } - - for (i = 0; i < r; i++) { - arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64) - } - - for (i = 0; i < r; i++) { - arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64) - } - } - - function R (a, b) { - return (a << b) | (a >>> (32 - b)) - } - - function salsa20_8 (B) { - var i - - for (i = 0; i < 16; i++) { - B32[i] = (B[i * 4 + 0] & 0xff) << 0 - B32[i] |= (B[i * 4 + 1] & 0xff) << 8 - B32[i] |= (B[i * 4 + 2] & 0xff) << 16 - B32[i] |= (B[i * 4 + 3] & 0xff) << 24 - // B32[i] = B.readUInt32LE(i*4) <--- this is signficantly slower even in Node.js - } - - arraycopy(B32, 0, x, 0, 16) - - for (i = 8; i > 0; i -= 2) { - x[ 4] ^= R(x[ 0] + x[12], 7) - x[ 8] ^= R(x[ 4] + x[ 0], 9) - x[12] ^= R(x[ 8] + x[ 4], 13) - x[ 0] ^= R(x[12] + x[ 8], 18) - x[ 9] ^= R(x[ 5] + x[ 1], 7) - x[13] ^= R(x[ 9] + x[ 5], 9) - x[ 1] ^= R(x[13] + x[ 9], 13) - x[ 5] ^= R(x[ 1] + x[13], 18) - x[14] ^= R(x[10] + x[ 6], 7) - x[ 2] ^= R(x[14] + x[10], 9) - x[ 6] ^= R(x[ 2] + x[14], 13) - x[10] ^= R(x[ 6] + x[ 2], 18) - x[ 3] ^= R(x[15] + x[11], 7) - x[ 7] ^= R(x[ 3] + x[15], 9) - x[11] ^= R(x[ 7] + x[ 3], 13) - x[15] ^= R(x[11] + x[ 7], 18) - x[ 1] ^= R(x[ 0] + x[ 3], 7) - x[ 2] ^= R(x[ 1] + x[ 0], 9) - x[ 3] ^= R(x[ 2] + x[ 1], 13) - x[ 0] ^= R(x[ 3] + x[ 2], 18) - x[ 6] ^= R(x[ 5] + x[ 4], 7) - x[ 7] ^= R(x[ 6] + x[ 5], 9) - x[ 4] ^= R(x[ 7] + x[ 6], 13) - x[ 5] ^= R(x[ 4] + x[ 7], 18) - x[11] ^= R(x[10] + x[ 9], 7) - x[ 8] ^= R(x[11] + x[10], 9) - x[ 9] ^= R(x[ 8] + x[11], 13) - x[10] ^= R(x[ 9] + x[ 8], 18) - x[12] ^= R(x[15] + x[14], 7) - x[13] ^= R(x[12] + x[15], 9) - x[14] ^= R(x[13] + x[12], 13) - x[15] ^= R(x[14] + x[13], 18) - } - - for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i] - - for (i = 0; i < 16; i++) { - var bi = i * 4 - B[bi + 0] = (B32[i] >> 0 & 0xff) - B[bi + 1] = (B32[i] >> 8 & 0xff) - B[bi + 2] = (B32[i] >> 16 & 0xff) - B[bi + 3] = (B32[i] >> 24 & 0xff) - // B.writeInt32LE(B32[i], i*4) //<--- this is signficantly slower even in Node.js - } - } - - // naive approach... going back to loop unrolling may yield additional performance - function blockxor (S, Si, D, Di, len) { - for (var i = 0; i < len; i++) { - D[Di + i] ^= S[Si + i] - } - } -} - -function arraycopy (src, srcPos, dest, destPos, length) { - if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) { - src.copy(dest, destPos, srcPos, srcPos + length) - } else { - while (length--) { - dest[destPos++] = src[srcPos++] - } - } -} - -module.exports = scrypt diff --git a/node_modules/scryptsy/package.json b/node_modules/scryptsy/package.json deleted file mode 100644 index fd912cc..0000000 --- a/node_modules/scryptsy/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "scryptsy@^1.2.1", - "/Users/jbaylina/git/MVP/node_modules/scrypt.js" - ] - ], - "_from": "scryptsy@>=1.2.1 <2.0.0", - "_id": "scryptsy@1.2.1", - "_inCache": true, - "_installable": true, - "_location": "/scryptsy", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "jprichardson@gmail.com", - "name": "jprichardson" - }, - "_npmVersion": "2.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "scryptsy", - "raw": "scryptsy@^1.2.1", - "rawSpec": "^1.2.1", - "scope": null, - "spec": ">=1.2.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/scrypt.js" - ], - "_resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "_shasum": "a3225fa4b2524f802700761e2855bdf3b2d92163", - "_shrinkwrap": null, - "_spec": "scryptsy@^1.2.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/scrypt.js", - "author": "", - "bugs": { - "url": "https://github.com/cryptocoinjs/scryptsy/issues" - }, - "dependencies": { - "pbkdf2": "^3.0.3" - }, - "description": "Pure JavaScript implementation of the scrypt key deriviation function that is fully compatible with Node.js and the browser.", - "devDependencies": { - "coveralls": "^2.10.0", - "istanbul": "^0.3.5", - "mocha": "^2.2.0", - "mochify": "^2.1.0", - "standard": "^3.2.0" - }, - "directories": {}, - "dist": { - "shasum": "a3225fa4b2524f802700761e2855bdf3b2d92163", - "tarball": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz" - }, - "gitHead": "8654535daac060c0b8b6288eb35ca194f1e67d58", - "homepage": "https://github.com/cryptocoinjs/scryptsy", - "keywords": [ - "crytpo", - "cryptography", - "scrypt", - "kdf", - "litecoin", - "dogecoin", - "bitcoin", - "bip38" - ], - "license": "MIT", - "main": "lib/scrypt.js", - "maintainers": [ - { - "email": "npm@shesek.info", - "name": "nadav" - }, - { - "email": "jprichardson@gmail.com", - "name": "jprichardson" - } - ], - "name": "scryptsy", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/cryptocoinjs/scryptsy.git" - }, - "scripts": { - "browser-test": "mochify --wd -R spec", - "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js", - "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info", - "standard": "standard", - "test": "mocha --ui bdd", - "unit": "mocha" - }, - "version": "1.2.1" -} diff --git a/node_modules/secp256k1/API.md b/node_modules/secp256k1/API.md deleted file mode 100644 index c323299..0000000 --- a/node_modules/secp256k1/API.md +++ /dev/null @@ -1,154 +0,0 @@ -# API Reference (v3.x) - -- [`.privateKeyVerify(Buffer privateKey)`](#privatekeyverifybuffer-privatekey---boolean) -- [`.privateKeyExport(Buffer privateKey [, Boolean compressed = true])`](#privatekeyexportbuffer-privatekey--boolean-compressed--true---buffer) -- [`.privateKeyImport(Buffer privateKey)`](#privatekeyimportbuffer-privatekey---buffer) -- [`.privateKeyTweakAdd(Buffer privateKey, Buffer tweak)`](#privatekeytweakaddbuffer-privatekey-buffer-tweak---buffer) -- [`.privateKeyTweakMul(Buffer privateKey, Buffer tweak)`](#privatekeytweakmulbuffer-privatekey-buffer-tweak---buffer) -- [`.publicKeyCreate(Buffer privateKey [, Boolean compressed = true])`](#publickeycreatebuffer-privatekey--boolean-compressed--true---buffer) -- [`.publicKeyConvert(Buffer publicKey [, Boolean compressed = true])`](#publickeyconvertbuffer-publickey--boolean-compressed--true---buffer) -- [`.publicKeyVerify(Buffer publicKey)`](#publickeyverifybuffer-publickey---boolean) -- [`.publicKeyTweakAdd(Buffer publicKey, Buffer tweak [, Boolean compressed = true])`](#publickeytweakaddbuffer-publickey-buffer-tweak--boolean-compressed--true---buffer) -- [`.publicKeyTweakMul(Buffer publicKey, Buffer tweak [, Boolean compressed = true])`](#publickeytweakmulbuffer-publickey-buffer-tweak--boolean-compressed--true---buffer) -- [`.publicKeyCombine(Array publicKeys [, Boolean compressed = true])`](#publickeycombinearraybuffer-publickeys--boolean-compressed--true---buffer) -- [`.signatureNormalize(Buffer signature)`](#signaturenormalizebuffer-signature---buffer) -- [`.signatureExport(Buffer signature)`](#signatureexportbuffer-signature---buffer) -- [`.signatureImport(Buffer signature)`](#signatureimportbuffer-signature---buffer) -- [`.signatureImportLax(Buffer signature)`](#signatureimportlaxbuffer-signature---buffer) -- [`.sign(Buffer message, Buffer privateKey [, Object options])`](#signbuffer-message-buffer-privatekey--object-options---signature-buffer-recovery-number) - - [Option: `Function noncefn`](#option-function-noncefn) - - [Option: `Buffer data`](#option-buffer-data) -- [`.verify(Buffer message, Buffer signature, Buffer publicKey)`](#verifybuffer-message-buffer-signature-buffer-publickey---boolean) -- [`.recover(Buffer message, Buffer signature, Number recovery [, Boolean compressed = true])`](#recoverbuffer-message-buffer-signature-number-recovery--boolean-compressed--true---buffer) -- [`.ecdh(Buffer publicKey, Buffer privateKey)`](#ecdhbuffer-publickey-buffer-privatekey---buffer) -- [`.ecdhUnsafe(Buffer publicKey, Buffer privateKey [, Boolean compressed = true])`](#ecdhunsafebuffer-publickey-buffer-privatekey--boolean-compressed--true---buffer) - -#####`.privateKeyVerify(Buffer privateKey)` -> `Boolean` - -Verify an ECDSA *privateKey*. - -
    - -#####`.privateKeyExport(Buffer privateKey [, Boolean compressed = true])` -> `Buffer` - -Export a *privateKey* in DER format. - -
    - -#####`.privateKeyImport(Buffer privateKey)` -> `Buffer` - -Import a *privateKey* in DER format. - -
    - -#####`.privateKeyTweakAdd(Buffer privateKey, Buffer tweak)` -> `Buffer` - -Tweak a *privateKey* by adding *tweak* to it. - -
    - -#####`.privateKeyTweakMul(Buffer privateKey, Buffer tweak)` -> `Buffer` - -Tweak a *privateKey* by multiplying it by a *tweak*. - -
    - -#####`.publicKeyCreate(Buffer privateKey [, Boolean compressed = true])` -> `Buffer` - -Compute the public key for a *privateKey*. - -
    - -#####`.publicKeyConvert(Buffer publicKey [, Boolean compressed = true])` -> `Buffer` - -Convert a *publicKey* to *compressed* or *uncompressed* form. - -
    - -#####`.publicKeyVerify(Buffer publicKey)` -> `Boolean` - -Verify an ECDSA *publicKey*. - -
    - -#####`.publicKeyTweakAdd(Buffer publicKey, Buffer tweak [, Boolean compressed = true])` -> `Buffer` - -Tweak a *publicKey* by adding *tweak* times the generator to it. - -
    - -#####`.publicKeyTweakMul(Buffer publicKey, Buffer tweak [, Boolean compressed = true])` -> `Buffer` - -Tweak a *publicKey* by multiplying it by a *tweak* value. - -
    - -#####`.publicKeyCombine(Array publicKeys [, Boolean compressed = true])` -> `Buffer` - -Add a given *publicKeys* together. - -
    - -#####`.signatureNormalize(Buffer signature)` -> `Buffer` - -Convert a *signature* to a normalized lower-S form. - -
    - -#####`.signatureExport(Buffer signature)` -> `Buffer` - -Serialize an ECDSA *signature* in DER format. - -
    - -#####`.signatureImport(Buffer signature)` -> `Buffer` - -Parse a DER ECDSA *signature* (follow by [BIP66](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki)). - -
    - -#####`.signatureImportLax(Buffer signature)` -> `Buffer` - -Same as [signatureImport](#signatureimportbuffer-signature---buffer) but not follow by [BIP66](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki). - -
    - -#####`.sign(Buffer message, Buffer privateKey [, Object options])` -> `{signature: Buffer, recovery: number}` - -Create an ECDSA signature. Always return low-S signature. - -######Option: `Function noncefn` - -Nonce generator. By default it is [rfc6979](https://tools.ietf.org/html/rfc6979). - -Function signature: `noncefn(Buffer message, Buffer privateKey, ?Buffer algo, ?Buffer data, Number attempt)` -> `Buffer` - -######Option: `Buffer data` - -Additional data for [noncefn](#option-function-noncefn) (RFC 6979 3.6) (32 bytes). By default is `null`. - -
    - -#####`.verify(Buffer message, Buffer signature, Buffer publicKey)` -> `Boolean` - -Verify an ECDSA signature. - -Note: **return false for high signatures!** - -
    - -#####`.recover(Buffer message, Buffer signature, Number recovery [, Boolean compressed = true])` -> `Buffer` - -Recover an ECDSA public key from a signature. - -
    - -#####`.ecdh(Buffer publicKey, Buffer privateKey)` -> `Buffer` - -Compute an EC Diffie-Hellman secret and applied sha256 to compressed public key. - -
    - -#####`.ecdhUnsafe(Buffer publicKey, Buffer privateKey [, Boolean compressed = true])` -> `Buffer` - -Compute an EC Diffie-Hellman secret and return public key as result. diff --git a/node_modules/secp256k1/LICENSE b/node_modules/secp256k1/LICENSE deleted file mode 100644 index f2369eb..0000000 --- a/node_modules/secp256k1/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2016 secp256k1-node contributors - -Parts of this software are based on bn.js, elliptic, hash.js -Copyright (c) 2014-2016 Fedor Indutny - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/secp256k1/README.md b/node_modules/secp256k1/README.md deleted file mode 100644 index b52bc72..0000000 --- a/node_modules/secp256k1/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# secp256k1-node - -[![NPM Package](https://img.shields.io/npm/v/secp256k1.svg?style=flat-square)](https://www.npmjs.org/package/secp256k1) -[![Build Status](https://img.shields.io/travis/cryptocoinjs/secp256k1-node.svg?branch=master&style=flat-square)](https://travis-ci.org/cryptocoinjs/secp256k1-node) -[![Dependency status](https://img.shields.io/david/cryptocoinjs/secp256k1-node.svg?style=flat-square)](https://david-dm.org/cryptocoinjs/secp256k1-node#info=dependencies) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -This module provides native bindings to ecdsa [secp256k1](https://github.com/bitcoin-core/secp256k1) functions. -This library is experimental, so use at your own risk. Works on node version 0.10 or greater and in the Browser via browserify. - -## Installation - -If you have [gmp](https://gmplib.org/) installed [secp256k1](https://github.com/bitcoin-core/secp256k1) will use it. Otherwise it should fallback to [OpenSSL](https://www.openssl.org/). -* arch `pacman -S gmp` -* ubuntu `sudo apt-get install libgmp-dev` - -##### from npm - -`npm install secp256k1` - -##### from git - -``` -git clone git@github.com:cryptocoinjs/secp256k1-node.git -cd secp256k1-node -git submodule init -git submodule update -npm install -``` - -##### Windows - -Required software: - - * Git: https://git-scm.com/download/win - * nvm: https://github.com/coreybutler/nvm-windows - * Python 2.7: https://www.python.org/downloads/release/python-2712/ - * OpenSSL: https://wiki.openssl.org/index.php/Binaries (should be installed in `C:\OpenSSL-Win32` or `C:\OpenSSL-Win64` on 64-bit system, or check https://github.com/nodejs/node-gyp/wiki/Linking-to-OpenSSL#windows) - * Visual C++ Build Tools: http://landinghub.visualstudio.com/visual-cpp-build-tools (Custom Install, and select both Windows 8.1 and Windows 10 SDKs) - -Additional commands: - -``` -npm config set msvs_version 2015 --global -npm install npm@next -g -``` - -Useful resources: - - * https://github.com/nodejs/node-gyp/issues/629#issuecomment-153196245 - * https://github.com/nodejs/node-gyp/issues/972 - -## Usage - -* [API Reference (v3.x)](https://github.com/cryptocoinjs/secp256k1-node/blob/master/API.md) -* [API Reference (v2.x)](https://github.com/cryptocoinjs/secp256k1-node/blob/v2.x/API.md) - -```js -var crypto = require('crypto') -var secp256k1 = require('secp256k1') -// or require('secp256k1/js') -// if you want to use pure js implementation in node - -// generate message to sign -var msg = crypto.randomBytes(32) - -// generate privKey -var privKey -do { - privKey = crypto.randomBytes(32) -} while (!secp256k1.privateKeyVerify(privKey)) - -// get the public key in a compressed format -var pubKey = secp256k1.publicKeyCreate(privKey) - -// sign the message -var sigObj = secp256k1.sign(msg, privKey) - -// verify the signature -console.log(secp256k1.verify(msg, sigObj.signature, pubKey)) -``` - -\* **.verify return false for high signatures** - -## Elliptic vs "embedded" - -secp256k1-node has pure JavaScript implementation secp256k1 based on [elliptic](http://github.com/indutny/elliptic), [bn.js](http://github.com/indutny/bn.js), [hash.js](http://github.com/indutny/hash.js). -The main purpose of this implementation is more [high performance](#performance), [smaller size](#code-size) and simple code audit. - -##### Code size: -| | browserifiable | + uglified | + gzipped | -|:------:|:--------------:|:----------:|:---------:| -|elliptic|303555 |211777 |62124 | -|embedded|241829 |152989 |35908 | -|diff |25% |38% |73% | - -##### Performance: -``` -$ node benchmark/benchmark.js -Set seed: 5120779d9d961dc818363811b3cf44ace2323ccf5e265749206d37442a0deac5 -100% (1000/1000), 2.8s elapsed, eta 0.0s -Create 1000 fixtures -++++++++++++++++++++++++++++++++++++++++++++++++++ -Benchmarking: publicKeyCreate --------------------------------------------------- -bindings x 13,945 ops/sec ±0.76% (101 runs sampled) -secp256k1js x 967 ops/sec ±0.41% (100 runs sampled) -elliptic x 838 ops/sec ±0.66% (99 runs sampled) -================================================== -Benchmarking: sign --------------------------------------------------- -bindings x 8,219 ops/sec ±0.13% (102 runs sampled) -secp256k1js x 773 ops/sec ±0.47% (98 runs sampled) -elliptic x 615 ops/sec ±0.43% (97 runs sampled) -================================================== -Benchmarking: verify --------------------------------------------------- -bindings x 5,350 ops/sec ±0.11% (103 runs sampled) -secp256k1js x 208 ops/sec ±0.19% (91 runs sampled) -elliptic x 131 ops/sec ±2.05% (87 runs sampled) -================================================== -``` - -## LICENSE - -This library is free and open-source software released under the MIT license. diff --git a/node_modules/secp256k1/binding.gyp b/node_modules/secp256k1/binding.gyp deleted file mode 100644 index 64005d3..0000000 --- a/node_modules/secp256k1/binding.gyp +++ /dev/null @@ -1,135 +0,0 @@ -{ - "targets": [{ - "target_name": "secp256k1", - "variables": { - "conditions": [ - [ - "OS=='win'", { - "with_gmp%": "false", - "conditions": [ - ["target_arch=='ia32'", {"openssl_root%": "C:/OpenSSL-Win32"}, {"openssl_root%": "C:/OpenSSL-Win64"}] - ] - }, - { - "with_gmp%": "> $(depfile) -# Add extra rules as in (2). -# We remove slashes and replace spaces with new lines; -# remove blank lines; -# delete the first line and append a colon to the remaining lines. -sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ - grep -v '^$$' |\ - sed -e 1d -e 's|$$|:|' \ - >> $(depfile) -rm $(depfile).raw -endef - -# Command definitions: -# - cmd_foo is the actual command to run; -# - quiet_cmd_foo is the brief-output summary of the command. - -quiet_cmd_cc = CC($(TOOLSET)) $@ -cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_cxx = CXX($(TOOLSET)) $@ -cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_objc = CXX($(TOOLSET)) $@ -cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< - -quiet_cmd_objcxx = CXX($(TOOLSET)) $@ -cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# Commands for precompiled header files. -quiet_cmd_pch_c = CXX($(TOOLSET)) $@ -cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ -cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_m = CXX($(TOOLSET)) $@ -cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< -quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ -cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# gyp-mac-tool is written next to the root Makefile by gyp. -# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd -# already. -quiet_cmd_mac_tool = MACTOOL $(4) $< -cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" - -quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ -cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) - -quiet_cmd_infoplist = INFOPLIST $@ -cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" - -quiet_cmd_touch = TOUCH $@ -cmd_touch = touch $@ - -quiet_cmd_copy = COPY $@ -# send stderr to /dev/null to ignore messages when linking directories. -cmd_copy = rm -rf "$@" && cp -af "$<" "$@" - -quiet_cmd_alink = LIBTOOL-STATIC $@ -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) - -quiet_cmd_link = LINK($(TOOLSET)) $@ -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) - -quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) - -quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) - - -# Define an escape_quotes function to escape single quotes. -# This allows us to handle quotes properly as long as we always use -# use single quotes and escape_quotes. -escape_quotes = $(subst ','\'',$(1)) -# This comment is here just to include a ' to unconfuse syntax highlighting. -# Define an escape_vars function to escape '$' variable syntax. -# This allows us to read/write command lines with shell variables (e.g. -# $LD_LIBRARY_PATH), without triggering make substitution. -escape_vars = $(subst $$,$$$$,$(1)) -# Helper that expands to a shell command to echo a string exactly as it is in -# make. This uses printf instead of echo because printf's behaviour with respect -# to escape sequences is more portable than echo's across different shells -# (e.g., dash, bash). -exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' - -# Helper to compare the command we're about to run against the command -# we logged the last time we ran the command. Produces an empty -# string (false) when the commands match. -# Tricky point: Make has no string-equality test function. -# The kernel uses the following, but it seems like it would have false -# positives, where one string reordered its arguments. -# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ -# $(filter-out $(cmd_$@), $(cmd_$(1)))) -# We instead substitute each for the empty string into the other, and -# say they're equal if both substitutions produce the empty string. -# .d files contain ? instead of spaces, take that into account. -command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ - $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) - -# Helper that is non-empty when a prerequisite changes. -# Normally make does this implicitly, but we force rules to always run -# so we can check their command lines. -# $? -- new prerequisites -# $| -- order-only dependencies -prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) - -# Helper that executes all postbuilds until one fails. -define do_postbuilds - @E=0;\ - for p in $(POSTBUILDS); do\ - eval $$p;\ - E=$$?;\ - if [ $$E -ne 0 ]; then\ - break;\ - fi;\ - done;\ - if [ $$E -ne 0 ]; then\ - rm -rf "$@";\ - exit $$E;\ - fi -endef - -# do_cmd: run a command via the above cmd_foo names, if necessary. -# Should always run for a given target to handle command-line changes. -# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. -# Third argument, if non-zero, makes it do POSTBUILDS processing. -# Note: We intentionally do NOT call dirx for depfile, since it contains ? for -# spaces already and dirx strips the ? characters. -define do_cmd -$(if $(or $(command_changed),$(prereq_changed)), - @$(call exact_echo, $($(quiet)cmd_$(1))) - @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" - $(if $(findstring flock,$(word 2,$(cmd_$1))), - @$(cmd_$(1)) - @echo " $(quiet_cmd_$(1)): Finished", - @$(cmd_$(1)) - ) - @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) - @$(if $(2),$(fixup_dep)) - $(if $(and $(3), $(POSTBUILDS)), - $(call do_postbuilds) - ) -) -endef - -# Declare the "all" target first so it is the default, -# even though we don't have the deps yet. -.PHONY: all -all: - -# make looks for ways to re-generate included makefiles, but in our case, we -# don't have a direct way. Explicitly telling make that it has nothing to do -# for them makes it go faster. -%.d: ; - -# Use FORCE_DO_CMD to force a target to run. Should be coupled with -# do_cmd. -.PHONY: FORCE_DO_CMD -FORCE_DO_CMD: - -TOOLSET := target -# Suffix rules, putting all outputs into $(obj). -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - - -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,secp256k1.target.mk)))),) - include secp256k1.target.mk -endif - -quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = cd $(srcdir); /Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "--toplevel-dir=." -I/Users/jbaylina/git/MVP/node_modules/secp256k1/build/config.gypi -I/Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/jbaylina/.node-gyp/5.9.0/include/node/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/jbaylina/.node-gyp/5.9.0" "-Dnode_gyp_dir=/Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp" "-Dnode_lib_file=node.lib" "-Dmodule_root_dir=/Users/jbaylina/git/MVP/node_modules/secp256k1" binding.gyp -Makefile: $(srcdir)/../../../../.node-gyp/5.9.0/include/node/common.gypi $(srcdir)/../../../../n/lib/node_modules/npm/node_modules/node-gyp/addon.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp - $(call do_cmd,regen_makefile) - -# "all" is a concatenation of the "all" targets from all the included -# sub-makefiles. This is just here to clarify. -all: - -# Add in dependency-tracking rules. $(all_deps) is the list of every single -# target in our tree. Only consider the ones with .d (dependency) info: -d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) -ifneq ($(d_files),) - include $(d_files) -endif diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/addon.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/addon.o.d deleted file mode 100644 index b5051bd..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/addon.o.d +++ /dev/null @@ -1,55 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/addon.o := c++ '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -stdlib=libc++ -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/addon.o.d.raw -c -o Release/obj.target/secp256k1/src/addon.o ../src/addon.cc -Release/obj.target/secp256k1/src/addon.o: ../src/addon.cc \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - ../../nan/nan.h /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/secp256k1-src/include/secp256k1.h ../src/privatekey.h \ - ../src/publickey.h ../src/signature.h ../src/ecdsa.h ../src/ecdh.h -../src/addon.cc: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/secp256k1-src/include/secp256k1.h: -../src/privatekey.h: -../src/publickey.h: -../src/signature.h: -../src/ecdsa.h: -../src/ecdh.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/ecdh.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/ecdh.o.d deleted file mode 100644 index 2918c8f..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/ecdh.o.d +++ /dev/null @@ -1,90 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/ecdh.o := c++ '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -stdlib=libc++ -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/ecdh.o.d.raw -c -o Release/obj.target/secp256k1/src/ecdh.o ../src/ecdh.cc -Release/obj.target/secp256k1/src/ecdh.o: ../src/ecdh.cc \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - ../../nan/nan.h /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/secp256k1-src/include/secp256k1.h \ - ../src/secp256k1-src/src/util.h ../src/secp256k1-src/src/field_impl.h \ - ../src/secp256k1-src/src/field_5x52_impl.h \ - ../src/secp256k1-src/src/num.h ../src/secp256k1-src/src/field.h \ - ../src/secp256k1-src/src/field_5x52.h \ - ../src/secp256k1-src/src/field_5x52_int128_impl.h \ - ../src/secp256k1-src/src/scalar_impl.h \ - ../src/secp256k1-src/src/group.h ../src/secp256k1-src/src/scalar.h \ - ../src/secp256k1-src/src/scalar_4x64.h \ - ../src/secp256k1-src/src/scalar_4x64_impl.h \ - ../src/secp256k1-src/src/group_impl.h \ - ../src/secp256k1-src/src/ecmult_const_impl.h \ - ../src/secp256k1-src/src/ecmult_const.h \ - ../src/secp256k1-src/src/ecmult_impl.h \ - ../src/secp256k1-src/src/ecmult.h \ - ../src/secp256k1-src/src/ecmult_gen_impl.h \ - ../src/secp256k1-src/src/ecmult_gen.h \ - ../src/secp256k1-src/src/hash_impl.h ../src/secp256k1-src/src/hash.h \ - ../src/messages.h ../src/util.h -../src/ecdh.cc: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/secp256k1-src/include/secp256k1.h: -../src/secp256k1-src/src/util.h: -../src/secp256k1-src/src/field_impl.h: -../src/secp256k1-src/src/field_5x52_impl.h: -../src/secp256k1-src/src/num.h: -../src/secp256k1-src/src/field.h: -../src/secp256k1-src/src/field_5x52.h: -../src/secp256k1-src/src/field_5x52_int128_impl.h: -../src/secp256k1-src/src/scalar_impl.h: -../src/secp256k1-src/src/group.h: -../src/secp256k1-src/src/scalar.h: -../src/secp256k1-src/src/scalar_4x64.h: -../src/secp256k1-src/src/scalar_4x64_impl.h: -../src/secp256k1-src/src/group_impl.h: -../src/secp256k1-src/src/ecmult_const_impl.h: -../src/secp256k1-src/src/ecmult_const.h: -../src/secp256k1-src/src/ecmult_impl.h: -../src/secp256k1-src/src/ecmult.h: -../src/secp256k1-src/src/ecmult_gen_impl.h: -../src/secp256k1-src/src/ecmult_gen.h: -../src/secp256k1-src/src/hash_impl.h: -../src/secp256k1-src/src/hash.h: -../src/messages.h: -../src/util.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/ecdsa.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/ecdsa.o.d deleted file mode 100644 index f587e77..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/ecdsa.o.d +++ /dev/null @@ -1,54 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/ecdsa.o := c++ '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -stdlib=libc++ -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/ecdsa.o.d.raw -c -o Release/obj.target/secp256k1/src/ecdsa.o ../src/ecdsa.cc -Release/obj.target/secp256k1/src/ecdsa.o: ../src/ecdsa.cc \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - ../../nan/nan.h /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/secp256k1-src/include/secp256k1.h \ - ../src/secp256k1-src/include/secp256k1_recovery.h ../src/messages.h \ - ../src/util.h -../src/ecdsa.cc: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/secp256k1-src/include/secp256k1.h: -../src/secp256k1-src/include/secp256k1_recovery.h: -../src/messages.h: -../src/util.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/privatekey.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/privatekey.o.d deleted file mode 100644 index fa2d7a7..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/privatekey.o.d +++ /dev/null @@ -1,54 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/privatekey.o := c++ '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -stdlib=libc++ -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/privatekey.o.d.raw -c -o Release/obj.target/secp256k1/src/privatekey.o ../src/privatekey.cc -Release/obj.target/secp256k1/src/privatekey.o: ../src/privatekey.cc \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - ../../nan/nan.h /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/secp256k1-src/include/secp256k1.h \ - ../src/secp256k1-src/contrib/lax_der_privatekey_parsing.h \ - ../src/messages.h ../src/util.h -../src/privatekey.cc: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/secp256k1-src/include/secp256k1.h: -../src/secp256k1-src/contrib/lax_der_privatekey_parsing.h: -../src/messages.h: -../src/util.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/publickey.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/publickey.o.d deleted file mode 100644 index 955519d..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/publickey.o.d +++ /dev/null @@ -1,52 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/publickey.o := c++ '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -stdlib=libc++ -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/publickey.o.d.raw -c -o Release/obj.target/secp256k1/src/publickey.o ../src/publickey.cc -Release/obj.target/secp256k1/src/publickey.o: ../src/publickey.cc \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - ../../nan/nan.h /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/secp256k1-src/include/secp256k1.h ../src/messages.h \ - ../src/util.h -../src/publickey.cc: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/secp256k1-src/include/secp256k1.h: -../src/messages.h: -../src/util.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o.d deleted file mode 100644 index de51ac0..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o.d +++ /dev/null @@ -1,8 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o := cc '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o.d.raw -c -o Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o ../src/secp256k1-src/contrib/lax_der_parsing.c -Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o: \ - ../src/secp256k1-src/contrib/lax_der_parsing.c \ - ../src/secp256k1-src/include/secp256k1.h \ - ../src/secp256k1-src/contrib/lax_der_parsing.h -../src/secp256k1-src/contrib/lax_der_parsing.c: -../src/secp256k1-src/include/secp256k1.h: -../src/secp256k1-src/contrib/lax_der_parsing.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o.d deleted file mode 100644 index 8f4aeb1..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o.d +++ /dev/null @@ -1,8 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o := cc '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o.d.raw -c -o Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o ../src/secp256k1-src/contrib/lax_der_privatekey_parsing.c -Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o: \ - ../src/secp256k1-src/contrib/lax_der_privatekey_parsing.c \ - ../src/secp256k1-src/include/secp256k1.h \ - ../src/secp256k1-src/contrib/lax_der_privatekey_parsing.h -../src/secp256k1-src/contrib/lax_der_privatekey_parsing.c: -../src/secp256k1-src/include/secp256k1.h: -../src/secp256k1-src/contrib/lax_der_privatekey_parsing.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o.d deleted file mode 100644 index c5e2874..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o.d +++ /dev/null @@ -1,55 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o := cc '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o.d.raw -c -o Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o ../src/secp256k1-src/src/secp256k1.c -Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o: \ - ../src/secp256k1-src/src/secp256k1.c \ - ../src/secp256k1-src/include/secp256k1.h \ - ../src/secp256k1-src/src/util.h ../src/secp256k1-src/src/num_impl.h \ - ../src/secp256k1-src/src/num.h ../src/secp256k1-src/src/field_impl.h \ - ../src/secp256k1-src/src/field_5x52_impl.h \ - ../src/secp256k1-src/src/field.h ../src/secp256k1-src/src/field_5x52.h \ - ../src/secp256k1-src/src/field_5x52_int128_impl.h \ - ../src/secp256k1-src/src/scalar_impl.h \ - ../src/secp256k1-src/src/group.h ../src/secp256k1-src/src/scalar.h \ - ../src/secp256k1-src/src/scalar_4x64.h \ - ../src/secp256k1-src/src/scalar_4x64_impl.h \ - ../src/secp256k1-src/src/group_impl.h \ - ../src/secp256k1-src/src/ecmult_impl.h \ - ../src/secp256k1-src/src/ecmult.h \ - ../src/secp256k1-src/src/ecmult_const_impl.h \ - ../src/secp256k1-src/src/ecmult_const.h \ - ../src/secp256k1-src/src/ecmult_gen_impl.h \ - ../src/secp256k1-src/src/ecmult_gen.h \ - ../src/secp256k1-src/src/hash_impl.h ../src/secp256k1-src/src/hash.h \ - ../src/secp256k1-src/src/ecdsa_impl.h ../src/secp256k1-src/src/ecdsa.h \ - ../src/secp256k1-src/src/eckey_impl.h ../src/secp256k1-src/src/eckey.h \ - ../src/secp256k1-src/src/modules/recovery/main_impl.h \ - ../src/secp256k1-src/include/secp256k1_recovery.h -../src/secp256k1-src/src/secp256k1.c: -../src/secp256k1-src/include/secp256k1.h: -../src/secp256k1-src/src/util.h: -../src/secp256k1-src/src/num_impl.h: -../src/secp256k1-src/src/num.h: -../src/secp256k1-src/src/field_impl.h: -../src/secp256k1-src/src/field_5x52_impl.h: -../src/secp256k1-src/src/field.h: -../src/secp256k1-src/src/field_5x52.h: -../src/secp256k1-src/src/field_5x52_int128_impl.h: -../src/secp256k1-src/src/scalar_impl.h: -../src/secp256k1-src/src/group.h: -../src/secp256k1-src/src/scalar.h: -../src/secp256k1-src/src/scalar_4x64.h: -../src/secp256k1-src/src/scalar_4x64_impl.h: -../src/secp256k1-src/src/group_impl.h: -../src/secp256k1-src/src/ecmult_impl.h: -../src/secp256k1-src/src/ecmult.h: -../src/secp256k1-src/src/ecmult_const_impl.h: -../src/secp256k1-src/src/ecmult_const.h: -../src/secp256k1-src/src/ecmult_gen_impl.h: -../src/secp256k1-src/src/ecmult_gen.h: -../src/secp256k1-src/src/hash_impl.h: -../src/secp256k1-src/src/hash.h: -../src/secp256k1-src/src/ecdsa_impl.h: -../src/secp256k1-src/src/ecdsa.h: -../src/secp256k1-src/src/eckey_impl.h: -../src/secp256k1-src/src/eckey.h: -../src/secp256k1-src/src/modules/recovery/main_impl.h: -../src/secp256k1-src/include/secp256k1_recovery.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/signature.o.d b/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/signature.o.d deleted file mode 100644 index b749524..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/obj.target/secp256k1/src/signature.o.d +++ /dev/null @@ -1,54 +0,0 @@ -cmd_Release/obj.target/secp256k1/src/signature.o := c++ '-DNODE_GYP_MODULE_NAME=secp256k1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSE_NUM_NONE=1' '-DUSE_SCALAR_INV_BUILTIN=1' '-DUSE_FIELD_INV_BUILTIN=1' '-DENABLE_MODULE_RECOVERY=1' '-DHAVE___INT128=1USE_ASM_X86_64=1' '-DUSE_FIELD_5X52=1' '-DUSE_FIELD_5X52_INT128=1' '-DUSE_SCALAR_4X64=1' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I/usr/local/include -I../src/secp256k1-src -I../src/secp256k1-src/contrib -I../src/secp256k1-src/include -I../src/secp256k1-src/src -I../../nan -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -stdlib=libc++ -MMD -MF ./Release/.deps/Release/obj.target/secp256k1/src/signature.o.d.raw -c -o Release/obj.target/secp256k1/src/signature.o ../src/signature.cc -Release/obj.target/secp256k1/src/signature.o: ../src/signature.cc \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - ../../nan/nan.h /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/secp256k1-src/include/secp256k1.h \ - ../src/secp256k1-src/contrib/lax_der_parsing.h ../src/messages.h \ - ../src/util.h -../src/signature.cc: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/secp256k1-src/include/secp256k1.h: -../src/secp256k1-src/contrib/lax_der_parsing.h: -../src/messages.h: -../src/util.h: diff --git a/node_modules/secp256k1/build/Release/.deps/Release/secp256k1.node.d b/node_modules/secp256k1/build/Release/.deps/Release/secp256k1.node.d deleted file mode 100644 index 97b07ed..0000000 --- a/node_modules/secp256k1/build/Release/.deps/Release/secp256k1.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/secp256k1.node := c++ -bundle -undefined dynamic_lookup -Wl,-search_paths_first -mmacosx-version-min=10.7 -arch x86_64 -L./Release -o Release/secp256k1.node Release/obj.target/secp256k1/src/addon.o Release/obj.target/secp256k1/src/privatekey.o Release/obj.target/secp256k1/src/publickey.o Release/obj.target/secp256k1/src/signature.o Release/obj.target/secp256k1/src/ecdsa.o Release/obj.target/secp256k1/src/ecdh.o Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o -L/usr/local/lib diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/addon.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/addon.o deleted file mode 100644 index fb32e70..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/addon.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/ecdh.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/ecdh.o deleted file mode 100644 index 26cff52..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/ecdh.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/ecdsa.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/ecdsa.o deleted file mode 100644 index 0f6db6f..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/ecdsa.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/privatekey.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/privatekey.o deleted file mode 100644 index ea1fdfd..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/privatekey.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/publickey.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/publickey.o deleted file mode 100644 index 2bb213a..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/publickey.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o deleted file mode 100644 index f9c5206..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o deleted file mode 100644 index e20fe78..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o deleted file mode 100644 index 26d3851..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/secp256k1-src/src/secp256k1.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/signature.o b/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/signature.o deleted file mode 100644 index 6fb2220..0000000 Binary files a/node_modules/secp256k1/build/Release/obj.target/secp256k1/src/signature.o and /dev/null differ diff --git a/node_modules/secp256k1/build/Release/secp256k1.node b/node_modules/secp256k1/build/Release/secp256k1.node deleted file mode 100755 index c488367..0000000 Binary files a/node_modules/secp256k1/build/Release/secp256k1.node and /dev/null differ diff --git a/node_modules/secp256k1/build/binding.Makefile b/node_modules/secp256k1/build/binding.Makefile deleted file mode 100644 index 38604b8..0000000 --- a/node_modules/secp256k1/build/binding.Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# This file is generated by gyp; do not edit. - -export builddir_name ?= ./build/. -.PHONY: all -all: - $(MAKE) secp256k1 diff --git a/node_modules/secp256k1/build/config.gypi b/node_modules/secp256k1/build/config.gypi deleted file mode 100644 index 6ac2691..0000000 --- a/node_modules/secp256k1/build/config.gypi +++ /dev/null @@ -1,144 +0,0 @@ -# Do not edit. File was generated by node-gyp's "configure" step -{ - "target_defaults": { - "cflags": [], - "default_configuration": "Release", - "defines": [], - "include_dirs": [], - "libraries": [] - }, - "variables": { - "asan": 0, - "host_arch": "x64", - "icu_data_file": "icudt56l.dat", - "icu_data_in": "../../deps/icu/source/data/in/icudt56l.dat", - "icu_endianness": "l", - "icu_gyp_path": "tools/icu/icu-generic.gyp", - "icu_locales": "en,root", - "icu_path": "./deps/icu", - "icu_small": "true", - "icu_ver_major": "56", - "llvm_version": 0, - "node_byteorder": "little", - "node_enable_v8_vtunejit": "false", - "node_install_npm": "true", - "node_prefix": "/", - "node_release_urlbase": "https://nodejs.org/download/release/", - "node_shared_http_parser": "false", - "node_shared_libuv": "false", - "node_shared_openssl": "false", - "node_shared_zlib": "false", - "node_tag": "", - "node_use_dtrace": "true", - "node_use_etw": "false", - "node_use_lttng": "false", - "node_use_openssl": "true", - "node_use_perfctr": "false", - "openssl_fips": "", - "openssl_no_asm": 0, - "target_arch": "x64", - "uv_parent_path": "/deps/uv/", - "uv_use_dtrace": "true", - "v8_enable_gdbjit": 0, - "v8_enable_i18n_support": 1, - "v8_no_strict_aliasing": 1, - "v8_optimized_debug": 0, - "v8_random_seed": 0, - "v8_use_snapshot": "true", - "want_separate_host_toolset": 0, - "xcode_version": "7.0", - "nodedir": "/Users/jbaylina/.node-gyp/5.9.0", - "copy_dev_lib": "true", - "standalone_static_library": 1, - "dry_run": "", - "legacy_bundling": "", - "save_dev": "", - "viewer": "man", - "browser": "", - "only": "", - "also": "", - "rollback": "true", - "usage": "", - "globalignorefile": "/Users/jbaylina/n/etc/npmignore", - "shell": "/bin/bash", - "init_author_url": "", - "shrinkwrap": "true", - "parseable": "", - "init_license": "ISC", - "if_present": "", - "cache_max": "Infinity", - "init_author_email": "", - "sign_git_tag": "", - "git_tag_version": "true", - "cert": "", - "local_address": "", - "long": "", - "fetch_retries": "2", - "registry": "https://registry.npmjs.org/", - "npat": "", - "message": "%s", - "key": "", - "versions": "", - "globalconfig": "/Users/jbaylina/n/etc/npmrc", - "always_auth": "", - "cache_lock_retries": "10", - "global_style": "", - "cafile": "", - "heading": "npm", - "fetch_retry_mintimeout": "10000", - "proprietary_attribs": "true", - "access": "", - "json": "", - "description": "true", - "engine_strict": "", - "https_proxy": "", - "init_module": "/Users/jbaylina/.npm-init.js", - "userconfig": "/Users/jbaylina/.npmrc", - "node_version": "5.9.0", - "user": "501", - "save": "true", - "editor": "vi", - "tag": "latest", - "progress": "true", - "global": "", - "optional": "true", - "bin_links": "true", - "force": "", - "searchopts": "", - "depth": "Infinity", - "rebuild_bundle": "true", - "searchsort": "name", - "unicode": "true", - "fetch_retry_maxtimeout": "60000", - "save_prefix": "^", - "strict_ssl": "true", - "tag_version_prefix": "v", - "ca": "", - "fetch_retry_factor": "10", - "group": "20", - "dev": "", - "save_exact": "", - "cache_lock_stale": "60000", - "version": "", - "cache_min": "10", - "cache": "/Users/jbaylina/.npm", - "searchexclude": "", - "color": "true", - "save_optional": "", - "user_agent": "npm/3.7.3 node/v5.9.0 darwin x64", - "ignore_scripts": "", - "cache_lock_wait": "10000", - "production": "", - "save_bundle": "", - "init_version": "1.0.0", - "umask": "0022", - "git": "git", - "init_author_name": "", - "scope": "", - "tmp": "/var/folders/g_/74y0ll3503d4sm0c64jw432r0000gn/T", - "unsafe_perm": "true", - "onload_script": "", - "prefix": "/Users/jbaylina/n", - "link": "" - } -} diff --git a/node_modules/secp256k1/build/gyp-mac-tool b/node_modules/secp256k1/build/gyp-mac-tool deleted file mode 100755 index 8ef02b0..0000000 --- a/node_modules/secp256k1/build/gyp-mac-tool +++ /dev/null @@ -1,611 +0,0 @@ -#!/usr/bin/env python -# Generated by gyp. Do not edit. -# Copyright (c) 2012 Google Inc. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Utility functions to perform Xcode-style build steps. - -These functions are executed via gyp-mac-tool when using the Makefile generator. -""" - -import fcntl -import fnmatch -import glob -import json -import os -import plistlib -import re -import shutil -import string -import subprocess -import sys -import tempfile - - -def main(args): - executor = MacTool() - exit_code = executor.Dispatch(args) - if exit_code is not None: - sys.exit(exit_code) - - -class MacTool(object): - """This class performs all the Mac tooling steps. The methods can either be - executed directly, or dispatched from an argument list.""" - - def Dispatch(self, args): - """Dispatches a string command to a method.""" - if len(args) < 1: - raise Exception("Not enough arguments") - - method = "Exec%s" % self._CommandifyName(args[0]) - return getattr(self, method)(*args[1:]) - - def _CommandifyName(self, name_string): - """Transforms a tool name like copy-info-plist to CopyInfoPlist""" - return name_string.title().replace('-', '') - - def ExecCopyBundleResource(self, source, dest, convert_to_binary): - """Copies a resource file to the bundle/Resources directory, performing any - necessary compilation on each resource.""" - extension = os.path.splitext(source)[1].lower() - if os.path.isdir(source): - # Copy tree. - # TODO(thakis): This copies file attributes like mtime, while the - # single-file branch below doesn't. This should probably be changed to - # be consistent with the single-file branch. - if os.path.exists(dest): - shutil.rmtree(dest) - shutil.copytree(source, dest) - elif extension == '.xib': - return self._CopyXIBFile(source, dest) - elif extension == '.storyboard': - return self._CopyXIBFile(source, dest) - elif extension == '.strings': - self._CopyStringsFile(source, dest, convert_to_binary) - else: - shutil.copy(source, dest) - - def _CopyXIBFile(self, source, dest): - """Compiles a XIB file with ibtool into a binary plist in the bundle.""" - - # ibtool sometimes crashes with relative paths. See crbug.com/314728. - base = os.path.dirname(os.path.realpath(__file__)) - if os.path.relpath(source): - source = os.path.join(base, source) - if os.path.relpath(dest): - dest = os.path.join(base, dest) - - args = ['xcrun', 'ibtool', '--errors', '--warnings', '--notices', - '--output-format', 'human-readable-text', '--compile', dest, source] - ibtool_section_re = re.compile(r'/\*.*\*/') - ibtool_re = re.compile(r'.*note:.*is clipping its content') - ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE) - current_section_header = None - for line in ibtoolout.stdout: - if ibtool_section_re.match(line): - current_section_header = line - elif not ibtool_re.match(line): - if current_section_header: - sys.stdout.write(current_section_header) - current_section_header = None - sys.stdout.write(line) - return ibtoolout.returncode - - def _ConvertToBinary(self, dest): - subprocess.check_call([ - 'xcrun', 'plutil', '-convert', 'binary1', '-o', dest, dest]) - - def _CopyStringsFile(self, source, dest, convert_to_binary): - """Copies a .strings file using iconv to reconvert the input into UTF-16.""" - input_code = self._DetectInputEncoding(source) or "UTF-8" - - # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call - # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints - # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing - # semicolon in dictionary. - # on invalid files. Do the same kind of validation. - import CoreFoundation - s = open(source, 'rb').read() - d = CoreFoundation.CFDataCreate(None, s, len(s)) - _, error = CoreFoundation.CFPropertyListCreateFromXMLData(None, d, 0, None) - if error: - return - - fp = open(dest, 'wb') - fp.write(s.decode(input_code).encode('UTF-16')) - fp.close() - - if convert_to_binary == 'True': - self._ConvertToBinary(dest) - - def _DetectInputEncoding(self, file_name): - """Reads the first few bytes from file_name and tries to guess the text - encoding. Returns None as a guess if it can't detect it.""" - fp = open(file_name, 'rb') - try: - header = fp.read(3) - except e: - fp.close() - return None - fp.close() - if header.startswith("\xFE\xFF"): - return "UTF-16" - elif header.startswith("\xFF\xFE"): - return "UTF-16" - elif header.startswith("\xEF\xBB\xBF"): - return "UTF-8" - else: - return None - - def ExecCopyInfoPlist(self, source, dest, convert_to_binary, *keys): - """Copies the |source| Info.plist to the destination directory |dest|.""" - # Read the source Info.plist into memory. - fd = open(source, 'r') - lines = fd.read() - fd.close() - - # Insert synthesized key/value pairs (e.g. BuildMachineOSBuild). - plist = plistlib.readPlistFromString(lines) - if keys: - plist = dict(plist.items() + json.loads(keys[0]).items()) - lines = plistlib.writePlistToString(plist) - - # Go through all the environment variables and replace them as variables in - # the file. - IDENT_RE = re.compile(r'[/\s]') - for key in os.environ: - if key.startswith('_'): - continue - evar = '${%s}' % key - evalue = os.environ[key] - lines = string.replace(lines, evar, evalue) - - # Xcode supports various suffices on environment variables, which are - # all undocumented. :rfc1034identifier is used in the standard project - # template these days, and :identifier was used earlier. They are used to - # convert non-url characters into things that look like valid urls -- - # except that the replacement character for :identifier, '_' isn't valid - # in a URL either -- oops, hence :rfc1034identifier was born. - evar = '${%s:identifier}' % key - evalue = IDENT_RE.sub('_', os.environ[key]) - lines = string.replace(lines, evar, evalue) - - evar = '${%s:rfc1034identifier}' % key - evalue = IDENT_RE.sub('-', os.environ[key]) - lines = string.replace(lines, evar, evalue) - - # Remove any keys with values that haven't been replaced. - lines = lines.split('\n') - for i in range(len(lines)): - if lines[i].strip().startswith("${"): - lines[i] = None - lines[i - 1] = None - lines = '\n'.join(filter(lambda x: x is not None, lines)) - - # Write out the file with variables replaced. - fd = open(dest, 'w') - fd.write(lines) - fd.close() - - # Now write out PkgInfo file now that the Info.plist file has been - # "compiled". - self._WritePkgInfo(dest) - - if convert_to_binary == 'True': - self._ConvertToBinary(dest) - - def _WritePkgInfo(self, info_plist): - """This writes the PkgInfo file from the data stored in Info.plist.""" - plist = plistlib.readPlist(info_plist) - if not plist: - return - - # Only create PkgInfo for executable types. - package_type = plist['CFBundlePackageType'] - if package_type != 'APPL': - return - - # The format of PkgInfo is eight characters, representing the bundle type - # and bundle signature, each four characters. If that is missing, four - # '?' characters are used instead. - signature_code = plist.get('CFBundleSignature', '????') - if len(signature_code) != 4: # Wrong length resets everything, too. - signature_code = '?' * 4 - - dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') - fp = open(dest, 'w') - fp.write('%s%s' % (package_type, signature_code)) - fp.close() - - def ExecFlock(self, lockfile, *cmd_list): - """Emulates the most basic behavior of Linux's flock(1).""" - # Rely on exception handling to report errors. - fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) - fcntl.flock(fd, fcntl.LOCK_EX) - return subprocess.call(cmd_list) - - def ExecFilterLibtool(self, *cmd_list): - """Calls libtool and filters out '/path/to/libtool: file: foo.o has no - symbols'.""" - libtool_re = re.compile(r'^.*libtool: file: .* has no symbols$') - libtool_re5 = re.compile( - r'^.*libtool: warning for library: ' + - r'.* the table of contents is empty ' + - r'\(no object file members in the library define global symbols\)$') - env = os.environ.copy() - # Ref: - # http://www.opensource.apple.com/source/cctools/cctools-809/misc/libtool.c - # The problem with this flag is that it resets the file mtime on the file to - # epoch=0, e.g. 1970-1-1 or 1969-12-31 depending on timezone. - env['ZERO_AR_DATE'] = '1' - libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE, env=env) - _, err = libtoolout.communicate() - for line in err.splitlines(): - if not libtool_re.match(line) and not libtool_re5.match(line): - print >>sys.stderr, line - # Unconditionally touch the output .a file on the command line if present - # and the command succeeded. A bit hacky. - if not libtoolout.returncode: - for i in range(len(cmd_list) - 1): - if cmd_list[i] == "-o" and cmd_list[i+1].endswith('.a'): - os.utime(cmd_list[i+1], None) - break - return libtoolout.returncode - - def ExecPackageFramework(self, framework, version): - """Takes a path to Something.framework and the Current version of that and - sets up all the symlinks.""" - # Find the name of the binary based on the part before the ".framework". - binary = os.path.basename(framework).split('.')[0] - - CURRENT = 'Current' - RESOURCES = 'Resources' - VERSIONS = 'Versions' - - if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): - # Binary-less frameworks don't seem to contain symlinks (see e.g. - # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). - return - - # Move into the framework directory to set the symlinks correctly. - pwd = os.getcwd() - os.chdir(framework) - - # Set up the Current version. - self._Relink(version, os.path.join(VERSIONS, CURRENT)) - - # Set up the root symlinks. - self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) - self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) - - # Back to where we were before! - os.chdir(pwd) - - def _Relink(self, dest, link): - """Creates a symlink to |dest| named |link|. If |link| already exists, - it is overwritten.""" - if os.path.lexists(link): - os.remove(link) - os.symlink(dest, link) - - def ExecCompileXcassets(self, keys, *inputs): - """Compiles multiple .xcassets files into a single .car file. - - This invokes 'actool' to compile all the inputs .xcassets files. The - |keys| arguments is a json-encoded dictionary of extra arguments to - pass to 'actool' when the asset catalogs contains an application icon - or a launch image. - - Note that 'actool' does not create the Assets.car file if the asset - catalogs does not contains imageset. - """ - command_line = [ - 'xcrun', 'actool', '--output-format', 'human-readable-text', - '--compress-pngs', '--notices', '--warnings', '--errors', - ] - is_iphone_target = 'IPHONEOS_DEPLOYMENT_TARGET' in os.environ - if is_iphone_target: - platform = os.environ['CONFIGURATION'].split('-')[-1] - if platform not in ('iphoneos', 'iphonesimulator'): - platform = 'iphonesimulator' - command_line.extend([ - '--platform', platform, '--target-device', 'iphone', - '--target-device', 'ipad', '--minimum-deployment-target', - os.environ['IPHONEOS_DEPLOYMENT_TARGET'], '--compile', - os.path.abspath(os.environ['CONTENTS_FOLDER_PATH']), - ]) - else: - command_line.extend([ - '--platform', 'macosx', '--target-device', 'mac', - '--minimum-deployment-target', os.environ['MACOSX_DEPLOYMENT_TARGET'], - '--compile', - os.path.abspath(os.environ['UNLOCALIZED_RESOURCES_FOLDER_PATH']), - ]) - if keys: - keys = json.loads(keys) - for key, value in keys.iteritems(): - arg_name = '--' + key - if isinstance(value, bool): - if value: - command_line.append(arg_name) - elif isinstance(value, list): - for v in value: - command_line.append(arg_name) - command_line.append(str(v)) - else: - command_line.append(arg_name) - command_line.append(str(value)) - # Note: actool crashes if inputs path are relative, so use os.path.abspath - # to get absolute path name for inputs. - command_line.extend(map(os.path.abspath, inputs)) - subprocess.check_call(command_line) - - def ExecMergeInfoPlist(self, output, *inputs): - """Merge multiple .plist files into a single .plist file.""" - merged_plist = {} - for path in inputs: - plist = self._LoadPlistMaybeBinary(path) - self._MergePlist(merged_plist, plist) - plistlib.writePlist(merged_plist, output) - - def ExecCodeSignBundle(self, key, resource_rules, entitlements, provisioning): - """Code sign a bundle. - - This function tries to code sign an iOS bundle, following the same - algorithm as Xcode: - 1. copy ResourceRules.plist from the user or the SDK into the bundle, - 2. pick the provisioning profile that best match the bundle identifier, - and copy it into the bundle as embedded.mobileprovision, - 3. copy Entitlements.plist from user or SDK next to the bundle, - 4. code sign the bundle. - """ - resource_rules_path = self._InstallResourceRules(resource_rules) - substitutions, overrides = self._InstallProvisioningProfile( - provisioning, self._GetCFBundleIdentifier()) - entitlements_path = self._InstallEntitlements( - entitlements, substitutions, overrides) - subprocess.check_call([ - 'codesign', '--force', '--sign', key, '--resource-rules', - resource_rules_path, '--entitlements', entitlements_path, - os.path.join( - os.environ['TARGET_BUILD_DIR'], - os.environ['FULL_PRODUCT_NAME'])]) - - def _InstallResourceRules(self, resource_rules): - """Installs ResourceRules.plist from user or SDK into the bundle. - - Args: - resource_rules: string, optional, path to the ResourceRules.plist file - to use, default to "${SDKROOT}/ResourceRules.plist" - - Returns: - Path to the copy of ResourceRules.plist into the bundle. - """ - source_path = resource_rules - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['CONTENTS_FOLDER_PATH'], - 'ResourceRules.plist') - if not source_path: - source_path = os.path.join( - os.environ['SDKROOT'], 'ResourceRules.plist') - shutil.copy2(source_path, target_path) - return target_path - - def _InstallProvisioningProfile(self, profile, bundle_identifier): - """Installs embedded.mobileprovision into the bundle. - - Args: - profile: string, optional, short name of the .mobileprovision file - to use, if empty or the file is missing, the best file installed - will be used - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - - Returns: - A tuple containing two dictionary: variables substitutions and values - to overrides when generating the entitlements file. - """ - source_path, provisioning_data, team_id = self._FindProvisioningProfile( - profile, bundle_identifier) - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['CONTENTS_FOLDER_PATH'], - 'embedded.mobileprovision') - shutil.copy2(source_path, target_path) - substitutions = self._GetSubstitutions(bundle_identifier, team_id + '.') - return substitutions, provisioning_data['Entitlements'] - - def _FindProvisioningProfile(self, profile, bundle_identifier): - """Finds the .mobileprovision file to use for signing the bundle. - - Checks all the installed provisioning profiles (or if the user specified - the PROVISIONING_PROFILE variable, only consult it) and select the most - specific that correspond to the bundle identifier. - - Args: - profile: string, optional, short name of the .mobileprovision file - to use, if empty or the file is missing, the best file installed - will be used - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - - Returns: - A tuple of the path to the selected provisioning profile, the data of - the embedded plist in the provisioning profile and the team identifier - to use for code signing. - - Raises: - SystemExit: if no .mobileprovision can be used to sign the bundle. - """ - profiles_dir = os.path.join( - os.environ['HOME'], 'Library', 'MobileDevice', 'Provisioning Profiles') - if not os.path.isdir(profiles_dir): - print >>sys.stderr, ( - 'cannot find mobile provisioning for %s' % bundle_identifier) - sys.exit(1) - provisioning_profiles = None - if profile: - profile_path = os.path.join(profiles_dir, profile + '.mobileprovision') - if os.path.exists(profile_path): - provisioning_profiles = [profile_path] - if not provisioning_profiles: - provisioning_profiles = glob.glob( - os.path.join(profiles_dir, '*.mobileprovision')) - valid_provisioning_profiles = {} - for profile_path in provisioning_profiles: - profile_data = self._LoadProvisioningProfile(profile_path) - app_id_pattern = profile_data.get( - 'Entitlements', {}).get('application-identifier', '') - for team_identifier in profile_data.get('TeamIdentifier', []): - app_id = '%s.%s' % (team_identifier, bundle_identifier) - if fnmatch.fnmatch(app_id, app_id_pattern): - valid_provisioning_profiles[app_id_pattern] = ( - profile_path, profile_data, team_identifier) - if not valid_provisioning_profiles: - print >>sys.stderr, ( - 'cannot find mobile provisioning for %s' % bundle_identifier) - sys.exit(1) - # If the user has multiple provisioning profiles installed that can be - # used for ${bundle_identifier}, pick the most specific one (ie. the - # provisioning profile whose pattern is the longest). - selected_key = max(valid_provisioning_profiles, key=lambda v: len(v)) - return valid_provisioning_profiles[selected_key] - - def _LoadProvisioningProfile(self, profile_path): - """Extracts the plist embedded in a provisioning profile. - - Args: - profile_path: string, path to the .mobileprovision file - - Returns: - Content of the plist embedded in the provisioning profile as a dictionary. - """ - with tempfile.NamedTemporaryFile() as temp: - subprocess.check_call([ - 'security', 'cms', '-D', '-i', profile_path, '-o', temp.name]) - return self._LoadPlistMaybeBinary(temp.name) - - def _MergePlist(self, merged_plist, plist): - """Merge |plist| into |merged_plist|.""" - for key, value in plist.iteritems(): - if isinstance(value, dict): - merged_value = merged_plist.get(key, {}) - if isinstance(merged_value, dict): - self._MergePlist(merged_value, value) - merged_plist[key] = merged_value - else: - merged_plist[key] = value - else: - merged_plist[key] = value - - def _LoadPlistMaybeBinary(self, plist_path): - """Loads into a memory a plist possibly encoded in binary format. - - This is a wrapper around plistlib.readPlist that tries to convert the - plist to the XML format if it can't be parsed (assuming that it is in - the binary format). - - Args: - plist_path: string, path to a plist file, in XML or binary format - - Returns: - Content of the plist as a dictionary. - """ - try: - # First, try to read the file using plistlib that only supports XML, - # and if an exception is raised, convert a temporary copy to XML and - # load that copy. - return plistlib.readPlist(plist_path) - except: - pass - with tempfile.NamedTemporaryFile() as temp: - shutil.copy2(plist_path, temp.name) - subprocess.check_call(['plutil', '-convert', 'xml1', temp.name]) - return plistlib.readPlist(temp.name) - - def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix): - """Constructs a dictionary of variable substitutions for Entitlements.plist. - - Args: - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - app_identifier_prefix: string, value for AppIdentifierPrefix - - Returns: - Dictionary of substitutions to apply when generating Entitlements.plist. - """ - return { - 'CFBundleIdentifier': bundle_identifier, - 'AppIdentifierPrefix': app_identifier_prefix, - } - - def _GetCFBundleIdentifier(self): - """Extracts CFBundleIdentifier value from Info.plist in the bundle. - - Returns: - Value of CFBundleIdentifier in the Info.plist located in the bundle. - """ - info_plist_path = os.path.join( - os.environ['TARGET_BUILD_DIR'], - os.environ['INFOPLIST_PATH']) - info_plist_data = self._LoadPlistMaybeBinary(info_plist_path) - return info_plist_data['CFBundleIdentifier'] - - def _InstallEntitlements(self, entitlements, substitutions, overrides): - """Generates and install the ${BundleName}.xcent entitlements file. - - Expands variables "$(variable)" pattern in the source entitlements file, - add extra entitlements defined in the .mobileprovision file and the copy - the generated plist to "${BundlePath}.xcent". - - Args: - entitlements: string, optional, path to the Entitlements.plist template - to use, defaults to "${SDKROOT}/Entitlements.plist" - substitutions: dictionary, variable substitutions - overrides: dictionary, values to add to the entitlements - - Returns: - Path to the generated entitlements file. - """ - source_path = entitlements - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['PRODUCT_NAME'] + '.xcent') - if not source_path: - source_path = os.path.join( - os.environ['SDKROOT'], - 'Entitlements.plist') - shutil.copy2(source_path, target_path) - data = self._LoadPlistMaybeBinary(target_path) - data = self._ExpandVariables(data, substitutions) - if overrides: - for key in overrides: - if key not in data: - data[key] = overrides[key] - plistlib.writePlist(data, target_path) - return target_path - - def _ExpandVariables(self, data, substitutions): - """Expands variables "$(variable)" in data. - - Args: - data: object, can be either string, list or dictionary - substitutions: dictionary, variable substitutions to perform - - Returns: - Copy of data where each references to "$(variable)" has been replaced - by the corresponding value found in substitutions, or left intact if - the key was not found. - """ - if isinstance(data, str): - for key, value in substitutions.iteritems(): - data = data.replace('$(%s)' % key, value) - return data - if isinstance(data, list): - return [self._ExpandVariables(v, substitutions) for v in data] - if isinstance(data, dict): - return {k: self._ExpandVariables(data[k], substitutions) for k in data} - return data - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/node_modules/secp256k1/build/secp256k1.target.mk b/node_modules/secp256k1/build/secp256k1.target.mk deleted file mode 100644 index 88393c3..0000000 --- a/node_modules/secp256k1/build/secp256k1.target.mk +++ /dev/null @@ -1,213 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := secp256k1 -DEFS_Debug := \ - '-DNODE_GYP_MODULE_NAME=secp256k1' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DUSE_NUM_NONE=1' \ - '-DUSE_SCALAR_INV_BUILTIN=1' \ - '-DUSE_FIELD_INV_BUILTIN=1' \ - '-DENABLE_MODULE_RECOVERY=1' \ - '-DHAVE___INT128=1USE_ASM_X86_64=1' \ - '-DUSE_FIELD_5X52=1' \ - '-DUSE_FIELD_5X52_INT128=1' \ - '-DUSE_SCALAR_4X64=1' \ - '-DBUILDING_NODE_EXTENSION' \ - '-DDEBUG' \ - '-D_DEBUG' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.7 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -stdlib=libc++ - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := - -INCS_Debug := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I/usr/local/include \ - -I$(srcdir)/src/secp256k1-src \ - -I$(srcdir)/src/secp256k1-src/contrib \ - -I$(srcdir)/src/secp256k1-src/include \ - -I$(srcdir)/src/secp256k1-src/src \ - -I$(srcdir)/../nan \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 - -DEFS_Release := \ - '-DNODE_GYP_MODULE_NAME=secp256k1' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DUSE_NUM_NONE=1' \ - '-DUSE_SCALAR_INV_BUILTIN=1' \ - '-DUSE_FIELD_INV_BUILTIN=1' \ - '-DENABLE_MODULE_RECOVERY=1' \ - '-DHAVE___INT128=1USE_ASM_X86_64=1' \ - '-DUSE_FIELD_5X52=1' \ - '-DUSE_FIELD_5X52_INT128=1' \ - '-DUSE_SCALAR_4X64=1' \ - '-DBUILDING_NODE_EXTENSION' - -# Flags passed to all source files. -CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.7 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -stdlib=libc++ - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := - -INCS_Release := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I/usr/local/include \ - -I$(srcdir)/src/secp256k1-src \ - -I$(srcdir)/src/secp256k1-src/contrib \ - -I$(srcdir)/src/secp256k1-src/include \ - -I$(srcdir)/src/secp256k1-src/src \ - -I$(srcdir)/../nan \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/openssl/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/openssl/config/k8 - -OBJS := \ - $(obj).target/$(TARGET)/src/addon.o \ - $(obj).target/$(TARGET)/src/privatekey.o \ - $(obj).target/$(TARGET)/src/publickey.o \ - $(obj).target/$(TARGET)/src/signature.o \ - $(obj).target/$(TARGET)/src/ecdsa.o \ - $(obj).target/$(TARGET)/src/ecdh.o \ - $(obj).target/$(TARGET)/src/secp256k1-src/src/secp256k1.o \ - $(obj).target/$(TARGET)/src/secp256k1-src/contrib/lax_der_parsing.o \ - $(obj).target/$(TARGET)/src/secp256k1-src/contrib/lax_der_privatekey_parsing.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.7 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Debug := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first - -LDFLAGS_Release := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.7 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Release := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first - -LIBS := \ - -L/usr/local/lib - -$(builddir)/secp256k1.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/secp256k1.node: LIBS := $(LIBS) -$(builddir)/secp256k1.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/secp256k1.node: TOOLSET := $(TOOLSET) -$(builddir)/secp256k1.node: $(OBJS) FORCE_DO_CMD - $(call do_cmd,solink_module) - -all_deps += $(builddir)/secp256k1.node -# Add target alias -.PHONY: secp256k1 -secp256k1: $(builddir)/secp256k1.node - -# Short alias for building this executable. -.PHONY: secp256k1.node -secp256k1.node: $(builddir)/secp256k1.node - -# Add executable to "all" target. -.PHONY: all -all: $(builddir)/secp256k1.node - diff --git a/node_modules/secp256k1/elliptic.js b/node_modules/secp256k1/elliptic.js deleted file mode 100644 index 980605d..0000000 --- a/node_modules/secp256k1/elliptic.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict' -module.exports = require('./lib')(require('./lib/elliptic')) diff --git a/node_modules/secp256k1/index.js b/node_modules/secp256k1/index.js deleted file mode 100644 index 3bf7c0d..0000000 --- a/node_modules/secp256k1/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict' -try { - module.exports = require('./bindings') -} catch (err) { - console.log('Secp256k1 bindings are not compiled. Pure JS implementation will be used.') - module.exports = require('./elliptic') -} diff --git a/node_modules/secp256k1/js.js b/node_modules/secp256k1/js.js deleted file mode 100644 index 8de8d4b..0000000 --- a/node_modules/secp256k1/js.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict' -module.exports = require('./lib')(require('./lib/js')) diff --git a/node_modules/secp256k1/lib/assert.js b/node_modules/secp256k1/lib/assert.js deleted file mode 100644 index f6999e4..0000000 --- a/node_modules/secp256k1/lib/assert.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict' -var toString = Object.prototype.toString - -// TypeError -exports.isArray = function (value, message) { - if (!Array.isArray(value)) throw TypeError(message) -} - -exports.isBoolean = function (value, message) { - if (toString.call(value) !== '[object Boolean]') throw TypeError(message) -} - -exports.isBuffer = function (value, message) { - if (!Buffer.isBuffer(value)) throw TypeError(message) -} - -exports.isFunction = function (value, message) { - if (toString.call(value) !== '[object Function]') throw TypeError(message) -} - -exports.isNumber = function (value, message) { - if (toString.call(value) !== '[object Number]') throw TypeError(message) -} - -exports.isObject = function (value, message) { - if (toString.call(value) !== '[object Object]') throw TypeError(message) -} - -// RangeError -exports.isBufferLength = function (buffer, length, message) { - if (buffer.length !== length) throw RangeError(message) -} - -exports.isBufferLength2 = function (buffer, length1, length2, message) { - if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message) -} - -exports.isLengthGTZero = function (value, message) { - if (value.length === 0) throw RangeError(message) -} - -exports.isNumberInInterval = function (number, x, y, message) { - if (number <= x || number >= y) throw RangeError(message) -} diff --git a/node_modules/secp256k1/lib/der.js b/node_modules/secp256k1/lib/der.js deleted file mode 100644 index 18a9035..0000000 --- a/node_modules/secp256k1/lib/der.js +++ /dev/null @@ -1,197 +0,0 @@ -'use strict' -var bip66 = require('bip66') - -var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([ - // begin - 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20, - // private key - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // middle - 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, - 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04, - 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87, - 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, - 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E, - 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00, - // public key - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00 -]) - -var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([ - // begin - 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20, - // private key - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // middle - 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, - 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04, - 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87, - 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, - 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11, - 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, - 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E, - 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00, - // public key - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00 -]) - -var ZERO_BUFFER_32 = new Buffer([ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -]) - -exports.privateKeyExport = function (privateKey, publicKey, compressed) { - var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED) - privateKey.copy(result, compressed ? 8 : 9) - publicKey.copy(result, compressed ? 181 : 214) - return result -} - -exports.privateKeyImport = function (privateKey) { - var length = privateKey.length - - // sequence header - var index = 0 - if (length < index + 1 || privateKey[index] !== 0x30) return - index += 1 - - // sequence length constructor - if (length < index + 1 || !(privateKey[index] & 0x80)) return - - var lenb = privateKey[index] & 0x7f - index += 1 - if (lenb < 1 || lenb > 2) return - if (length < index + lenb) return - - // sequence length - var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0) - index += lenb - if (length < index + len) return - - // sequence element 0: version number (=1) - if (length < index + 3 || - privateKey[index] !== 0x02 || - privateKey[index + 1] !== 0x01 || - privateKey[index + 2] !== 0x01) { - return - } - index += 3 - - // sequence element 1: octet string, up to 32 bytes - if (length < index + 2 || - privateKey[index] !== 0x04 || - privateKey[index + 1] > 0x20 || - length < index + 2 + privateKey[index + 1]) { - return - } - - return privateKey.slice(index + 2, index + 2 + privateKey[index + 1]) -} - -exports.signatureExport = function (sigObj) { - var r = Buffer.concat([new Buffer([0]), sigObj.r]) - for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR); - - var s = Buffer.concat([new Buffer([0]), sigObj.s]) - for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS); - - return bip66.encode(r.slice(posR), s.slice(posS)) -} - -exports.signatureImport = function (sig) { - var r = new Buffer(ZERO_BUFFER_32) - var s = new Buffer(ZERO_BUFFER_32) - - try { - var sigObj = bip66.decode(sig) - if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1) - if (sigObj.r.length > 32) throw new Error('R length is too long') - if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1) - if (sigObj.s.length > 32) throw new Error('S length is too long') - } catch (err) { - return - } - - sigObj.r.copy(r, 32 - sigObj.r.length) - sigObj.s.copy(s, 32 - sigObj.s.length) - - return { r: r, s: s } -} - -exports.signatureImportLax = function (sig) { - var r = new Buffer(ZERO_BUFFER_32) - var s = new Buffer(ZERO_BUFFER_32) - - var length = sig.length - var index = 0 - - // sequence tag byte - if (sig[index++] !== 0x30) return - - // sequence length byte - var lenbyte = sig[index++] - if (lenbyte & 0x80) { - index += lenbyte - 0x80 - if (index > length) return - } - - // sequence tag byte for r - if (sig[index++] !== 0x02) return - - // length for r - var rlen = sig[index++] - if (rlen & 0x80) { - lenbyte = rlen - 0x80 - if (index + lenbyte > length) return - for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1); - for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index] - } - if (rlen > length - index) return - var rindex = index - index += rlen - - // sequence tag byte for s - if (sig[index++] !== 0x02) return - - // length for s - var slen = sig[index++] - if (slen & 0x80) { - lenbyte = slen - 0x80 - if (index + lenbyte > length) return - for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1); - for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index] - } - if (slen > length - index) return - var sindex = index - index += slen - - // ignore leading zeros in r - for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1); - // copy r value - if (rlen > 32) return - var rvalue = sig.slice(rindex, rindex + rlen) - rvalue.copy(r, 32 - rvalue.length) - - // ignore leading zeros in s - for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1); - // copy s value - if (slen > 32) return - var svalue = sig.slice(sindex, sindex + slen) - svalue.copy(s, 32 - svalue.length) - - return { r: r, s: s } -} diff --git a/node_modules/secp256k1/lib/elliptic/index.js b/node_modules/secp256k1/lib/elliptic/index.js deleted file mode 100644 index 55bea03..0000000 --- a/node_modules/secp256k1/lib/elliptic/index.js +++ /dev/null @@ -1,247 +0,0 @@ -'use strict' -var createHash = require('create-hash') -var BN = require('bn.js') -var EC = require('elliptic').ec - -var messages = require('../messages.json') - -var ec = new EC('secp256k1') -var ecparams = ec.curve - -function loadCompressedPublicKey (first, xBuffer) { - var x = new BN(xBuffer) - - // overflow - if (x.cmp(ecparams.p) >= 0) return null - x = x.toRed(ecparams.red) - - // compute corresponding Y - var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt() - if ((first === 0x03) !== y.isOdd()) y = y.redNeg() - - return ec.keyPair({ pub: { x: x, y: y } }) -} - -function loadUncompressedPublicKey (first, xBuffer, yBuffer) { - var x = new BN(xBuffer) - var y = new BN(yBuffer) - - // overflow - if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null - - x = x.toRed(ecparams.red) - y = y.toRed(ecparams.red) - - // is odd flag - if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null - - // x*x*x + b = y*y - var x3 = x.redSqr().redIMul(x) - if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null - - return ec.keyPair({ pub: { x: x, y: y } }) -} - -function loadPublicKey (publicKey) { - var first = publicKey[0] - switch (first) { - case 0x02: - case 0x03: - if (publicKey.length !== 33) return null - return loadCompressedPublicKey(first, publicKey.slice(1, 33)) - case 0x04: - case 0x06: - case 0x07: - if (publicKey.length !== 65) return null - return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65)) - default: - return null - } -} - -exports.privateKeyVerify = function (privateKey) { - var bn = new BN(privateKey) - return bn.cmp(ecparams.n) < 0 && !bn.isZero() -} - -exports.privateKeyExport = function (privateKey, compressed) { - var d = new BN(privateKey) - if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL) - - return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true)) -} - -exports.privateKeyTweakAdd = function (privateKey, tweak) { - var bn = new BN(tweak) - if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL) - - bn.iadd(new BN(privateKey)) - if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n) - if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL) - - return bn.toArrayLike(Buffer, 'be', 32) -} - -exports.privateKeyTweakMul = function (privateKey, tweak) { - var bn = new BN(tweak) - if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL) - - bn.imul(new BN(privateKey)) - if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n) - - return bn.toArrayLike(Buffer, 'be', 32) -} - -exports.publicKeyCreate = function (privateKey, compressed) { - var d = new BN(privateKey) - if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL) - - return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true)) -} - -exports.publicKeyConvert = function (publicKey, compressed) { - var pair = loadPublicKey(publicKey) - if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - return new Buffer(pair.getPublic(compressed, true)) -} - -exports.publicKeyVerify = function (publicKey) { - return loadPublicKey(publicKey) !== null -} - -exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) { - var pair = loadPublicKey(publicKey) - if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - tweak = new BN(tweak) - if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL) - - return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed)) -} - -exports.publicKeyTweakMul = function (publicKey, tweak, compressed) { - var pair = loadPublicKey(publicKey) - if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - tweak = new BN(tweak) - if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL) - - return new Buffer(pair.pub.mul(tweak).encode(true, compressed)) -} - -exports.publicKeyCombine = function (publicKeys, compressed) { - var pairs = new Array(publicKeys.length) - for (var i = 0; i < publicKeys.length; ++i) { - pairs[i] = loadPublicKey(publicKeys[i]) - if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - } - - var point = pairs[0].pub - for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub) - if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL) - - return new Buffer(point.encode(true, compressed)) -} - -exports.signatureNormalize = function (signature) { - var r = new BN(signature.slice(0, 32)) - var s = new BN(signature.slice(32, 64)) - if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - - var result = new Buffer(signature) - if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32) - - return result -} - -exports.signatureExport = function (signature) { - var r = signature.slice(0, 32) - var s = signature.slice(32, 64) - if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - - return { r: r, s: s } -} - -exports.signatureImport = function (sigObj) { - var r = new BN(sigObj.r) - if (r.cmp(ecparams.n) >= 0) r = new BN(0) - - var s = new BN(sigObj.s) - if (s.cmp(ecparams.n) >= 0) s = new BN(0) - - return Buffer.concat([ - r.toArrayLike(Buffer, 'be', 32), - s.toArrayLike(Buffer, 'be', 32) - ]) -} - -exports.sign = function (message, privateKey, noncefn, data) { - if (typeof noncefn === 'function') { - var getNonce = noncefn - noncefn = function (counter) { - var nonce = getNonce(message, privateKey, null, data, counter) - if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL) - - return new BN(nonce) - } - } - - var d = new BN(privateKey) - if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL) - - var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data }) - return { - signature: Buffer.concat([ - result.r.toArrayLike(Buffer, 'be', 32), - result.s.toArrayLike(Buffer, 'be', 32) - ]), - recovery: result.recoveryParam - } -} - -exports.verify = function (message, signature, publicKey) { - var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)} - - var sigr = new BN(sigObj.r) - var sigs = new BN(sigObj.s) - if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false - - var pair = loadPublicKey(publicKey) - if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y}) -} - -exports.recover = function (message, signature, recovery, compressed) { - var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)} - - var sigr = new BN(sigObj.r) - var sigs = new BN(sigObj.s) - if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - - try { - if (sigr.isZero() || sigs.isZero()) throw new Error() - - var point = ec.recoverPubKey(message, sigObj, recovery) - return new Buffer(point.encode(true, compressed)) - } catch (err) { - throw new Error(messages.ECDSA_RECOVER_FAIL) - } -} - -exports.ecdh = function (publicKey, privateKey) { - var shared = exports.ecdhUnsafe(publicKey, privateKey, true) - return createHash('sha256').update(shared).digest() -} - -exports.ecdhUnsafe = function (publicKey, privateKey, compressed) { - var pair = loadPublicKey(publicKey) - if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - var scalar = new BN(privateKey) - if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL) - - return new Buffer(pair.pub.mul(scalar).encode(true, compressed)) -} diff --git a/node_modules/secp256k1/lib/index.js b/node_modules/secp256k1/lib/index.js deleted file mode 100644 index dac713b..0000000 --- a/node_modules/secp256k1/lib/index.js +++ /dev/null @@ -1,231 +0,0 @@ -'use strict' -var assert = require('./assert') -var der = require('./der') -var messages = require('./messages.json') - -function initCompressedValue (value, defaultValue) { - if (value === undefined) return defaultValue - - assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID) - return value -} - -module.exports = function (secp256k1) { - return { - privateKeyVerify: function (privateKey) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey) - }, - - privateKeyExport: function (privateKey, compressed) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) - - compressed = initCompressedValue(compressed, true) - var publicKey = secp256k1.privateKeyExport(privateKey, compressed) - - return der.privateKeyExport(privateKey, publicKey, compressed) - }, - - privateKeyImport: function (privateKey) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - - privateKey = der.privateKeyImport(privateKey) - if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey - - throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL) - }, - - privateKeyTweakAdd: function (privateKey, tweak) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) - - assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) - assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) - - return secp256k1.privateKeyTweakAdd(privateKey, tweak) - }, - - privateKeyTweakMul: function (privateKey, tweak) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) - - assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) - assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) - - return secp256k1.privateKeyTweakMul(privateKey, tweak) - }, - - publicKeyCreate: function (privateKey, compressed) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) - - compressed = initCompressedValue(compressed, true) - - return secp256k1.publicKeyCreate(privateKey, compressed) - }, - - publicKeyConvert: function (publicKey, compressed) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - - compressed = initCompressedValue(compressed, true) - - return secp256k1.publicKeyConvert(publicKey, compressed) - }, - - publicKeyVerify: function (publicKey) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - return secp256k1.publicKeyVerify(publicKey) - }, - - publicKeyTweakAdd: function (publicKey, tweak, compressed) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - - assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) - assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) - - compressed = initCompressedValue(compressed, true) - - return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed) - }, - - publicKeyTweakMul: function (publicKey, tweak, compressed) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - - assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) - assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) - - compressed = initCompressedValue(compressed, true) - - return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed) - }, - - publicKeyCombine: function (publicKeys, compressed) { - assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID) - assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID) - for (var i = 0; i < publicKeys.length; ++i) { - assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - } - - compressed = initCompressedValue(compressed, true) - - return secp256k1.publicKeyCombine(publicKeys, compressed) - }, - - signatureNormalize: function (signature) { - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - - return secp256k1.signatureNormalize(signature) - }, - - signatureExport: function (signature) { - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - - var sigObj = secp256k1.signatureExport(signature) - return der.signatureExport(sigObj) - }, - - signatureImport: function (sig) { - assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - - var sigObj = der.signatureImport(sig) - if (sigObj) return secp256k1.signatureImport(sigObj) - - throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL) - }, - - signatureImportLax: function (sig) { - assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - - var sigObj = der.signatureImportLax(sig) - if (sigObj) return secp256k1.signatureImport(sigObj) - - throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL) - }, - - sign: function (message, privateKey, options) { - assert.isBuffer(message, messages.MSG32_TYPE_INVALID) - assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) - - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) - - var data = null - var noncefn = null - if (options !== undefined) { - assert.isObject(options, messages.OPTIONS_TYPE_INVALID) - - if (options.data !== undefined) { - assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID) - assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID) - data = options.data - } - - if (options.noncefn !== undefined) { - assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID) - noncefn = options.noncefn - } - } - - return secp256k1.sign(message, privateKey, noncefn, data) - }, - - verify: function (message, signature, publicKey) { - assert.isBuffer(message, messages.MSG32_TYPE_INVALID) - assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) - - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - - return secp256k1.verify(message, signature, publicKey) - }, - - recover: function (message, signature, recovery, compressed) { - assert.isBuffer(message, messages.MSG32_TYPE_INVALID) - assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) - - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - - assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID) - assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID) - - compressed = initCompressedValue(compressed, true) - - return secp256k1.recover(message, signature, recovery, compressed) - }, - - ecdh: function (publicKey, privateKey) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) - - return secp256k1.ecdh(publicKey, privateKey) - }, - - ecdhUnsafe: function (publicKey, privateKey, compressed) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) - - compressed = initCompressedValue(compressed, true) - - return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed) - } - } -} diff --git a/node_modules/secp256k1/lib/js/bn/index.js b/node_modules/secp256k1/lib/js/bn/index.js deleted file mode 100644 index b40e93b..0000000 --- a/node_modules/secp256k1/lib/js/bn/index.js +++ /dev/null @@ -1,661 +0,0 @@ -'use strict' -var optimized = require('./optimized') - -function BN () { - this.negative = 0 - this.words = null - this.length = 0 -} - -BN.fromNumber = function (n) { - var bn = new BN() - bn.words = [n & 0x03ffffff] - bn.length = 1 - return bn -} - -BN.fromBuffer = function (b32) { - var bn = new BN() - - bn.words = new Array(10) - bn.words[0] = (b32[28] & 0x03) << 24 | b32[29] << 16 | b32[30] << 8 | b32[31] - bn.words[1] = (b32[25] & 0x0F) << 22 | b32[26] << 14 | b32[27] << 6 | b32[28] >>> 2 - bn.words[2] = (b32[22] & 0x3F) << 20 | b32[23] << 12 | b32[24] << 4 | b32[25] >>> 4 - bn.words[3] = (b32[19] & 0xFF) << 18 | b32[20] << 10 | b32[21] << 2 | b32[22] >>> 6 - - bn.words[4] = (b32[15] & 0x03) << 24 | b32[16] << 16 | b32[17] << 8 | b32[18] - bn.words[5] = (b32[12] & 0x0F) << 22 | b32[13] << 14 | b32[14] << 6 | b32[15] >>> 2 - bn.words[6] = (b32[9] & 0x3F) << 20 | b32[10] << 12 | b32[11] << 4 | b32[12] >>> 4 - bn.words[7] = (b32[6] & 0xFF) << 18 | b32[7] << 10 | b32[8] << 2 | b32[9] >>> 6 - - bn.words[8] = (b32[2] & 0x03) << 24 | b32[3] << 16 | b32[4] << 8 | b32[5] - bn.words[9] = b32[0] << 14 | b32[1] << 6 | b32[2] >>> 2 - - bn.length = 10 - return bn.strip() -} - -BN.prototype.toBuffer = function () { - var w = this.words - for (var i = this.length; i < 10; ++i) w[i] = 0 - - return new Buffer([ - (w[9] >>> 14) & 0xFF, (w[9] >>> 6) & 0xFF, (w[9] & 0x3F) << 2 | ((w[8] >>> 24) & 0x03), // 0, 1, 2 - (w[8] >>> 16) & 0xFF, (w[8] >>> 8) & 0xFF, w[8] & 0xFF, // 3, 4, 5 - - (w[7] >>> 18) & 0xFF, (w[7] >>> 10) & 0xFF, (w[7] >>> 2) & 0xFF, // 6, 7, 8 - ((w[7] & 0x03) << 6) | ((w[6] >>> 20) & 0x3F), (w[6] >>> 12) & 0xFF, (w[6] >>> 4) & 0xFF, // 9, 10, 11 - ((w[6] & 0x0F) << 4) | ((w[5] >>> 22) & 0x0F), (w[5] >>> 14) & 0xFF, (w[5] >>> 6) & 0xFF, // 12, 13, 14 - ((w[5] & 0x3F) << 2) | ((w[4] >>> 24) & 0x03), (w[4] >>> 16) & 0xFF, (w[4] >>> 8) & 0xFF, w[4] & 0xFF, // 15, 16, 17, 18 - - (w[3] >>> 18) & 0xFF, (w[3] >>> 10) & 0xFF, (w[3] >>> 2) & 0xFF, // 19, 20, 21 - ((w[3] & 0x03) << 6) | ((w[2] >>> 20) & 0x3F), (w[2] >>> 12) & 0xFF, (w[2] >>> 4) & 0xFF, // 22, 23, 24 - ((w[2] & 0x0F) << 4) | ((w[1] >>> 22) & 0x0F), (w[1] >>> 14) & 0xFF, (w[1] >>> 6) & 0xFF, // 25, 26, 27 - ((w[1] & 0x3F) << 2) | ((w[0] >>> 24) & 0x03), (w[0] >>> 16) & 0xFF, (w[0] >>> 8) & 0xFF, w[0] & 0xFF // 28, 29, 30, 31 - ]) -} - -BN.prototype.clone = function () { - var r = new BN() - r.words = new Array(this.length) - for (var i = 0; i < this.length; i++) r.words[i] = this.words[i] - r.length = this.length - r.negative = this.negative - return r -} - -BN.prototype.strip = function () { - while (this.length > 1 && (this.words[this.length - 1] | 0) === 0) this.length-- - return this -} - -BN.prototype.normSign = function () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) this.negative = 0 - return this -} - -BN.prototype.isEven = function () { - return (this.words[0] & 1) === 0 -} - -BN.prototype.isOdd = function () { - return (this.words[0] & 1) === 1 -} - -BN.prototype.isZero = function () { - return this.length === 1 && this.words[0] === 0 -} - -BN.prototype.ucmp = function (num) { - if (this.length !== num.length) return this.length > num.length ? 1 : -1 - - for (var i = this.length - 1; i >= 0; --i) { - if (this.words[i] !== num.words[i]) return this.words[i] > num.words[i] ? 1 : -1 - } - - return 0 -} - -BN.prototype.gtOne = function () { - return this.length > 1 || this.words[0] > 1 -} - -BN.prototype.isOverflow = function () { - return this.ucmp(BN.n) >= 0 -} - -BN.prototype.isHigh = function () { - return this.ucmp(BN.nh) === 1 -} - -BN.prototype.bitLengthGT256 = function () { - return this.length > 10 || (this.length === 10 && this.words[9] > 0x003fffff) -} - -BN.prototype.iuaddn = function (num) { - this.words[0] += num - - for (var i = 0; this.words[i] > 0x03ffffff && i < this.length; ++i) { - this.words[i] -= 0x04000000 - this.words[i + 1] += 1 - } - - if (i === this.length) { - this.words[i] = 1 - this.length += 1 - } - - return this -} - -BN.prototype.iadd = function (num) { - // (-this) + num -> -(this - num) - // this + (-num) -> this - num - if (this.negative !== num.negative) { - if (this.negative !== 0) { - this.negative = 0 - this.isub(num) - this.negative ^= 1 - } else { - num.negative = 0 - this.isub(num) - num.negative = 1 - } - - return this.normSign() - } - - // a.length > b.length - var a - var b - if (this.length > num.length) { - a = this - b = num - } else { - a = num - b = this - } - - for (var i = 0, carry = 0; i < b.length; ++i) { - var word = a.words[i] + b.words[i] + carry - this.words[i] = word & 0x03ffffff - carry = word >>> 26 - } - - for (; carry !== 0 && i < a.length; ++i) { - word = a.words[i] + carry - this.words[i] = word & 0x03ffffff - carry = word >>> 26 - } - - this.length = a.length - if (carry !== 0) { - this.words[this.length++] = carry - } else if (a !== this) { - for (; i < a.length; ++i) { - this.words[i] = a.words[i] - } - } - - return this -} - -BN.prototype.add = function (num) { - return this.clone().iadd(num) -} - -BN.prototype.isub = function (num) { - // (-this) - num -> -(this + num) - // this - (-num) -> this + num - if (this.negative !== num.negative) { - if (this.negative !== 0) { - this.negative = 0 - this.iadd(num) - this.negative = 1 - } else { - num.negative = 0 - this.iadd(num) - num.negative = 1 - } - - return this.normSign() - } - - var cmp = this.ucmp(num) - if (cmp === 0) { - this.negative = 0 - this.words[0] = 0 - this.length = 1 - return this - } - - // a > b - var a - var b - if (cmp > 0) { - a = this - b = num - } else { - a = num - b = this - } - - for (var i = 0, carry = 0; i < b.length; ++i) { - var word = a.words[i] - b.words[i] + carry - carry = word >> 26 - this.words[i] = word & 0x03ffffff - } - - for (; carry !== 0 && i < a.length; ++i) { - word = a.words[i] + carry - carry = word >> 26 - this.words[i] = word & 0x03ffffff - } - - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; ++i) this.words[i] = a.words[i] - } - - this.length = Math.max(this.length, i) - - if (a !== this) this.negative ^= 1 - - return this.strip().normSign() -} - -BN.prototype.sub = function (num) { - return this.clone().isub(num) -} - -BN.umulTo = function (num1, num2, out) { - out.length = num1.length + num2.length - 1 - - var a1 = num1.words[0] - var b1 = num2.words[0] - var r1 = a1 * b1 - - var carry = (r1 / 0x04000000) | 0 - out.words[0] = r1 & 0x03ffffff - - for (var k = 1, maxK = out.length; k < maxK; k++) { - var ncarry = carry >>> 26 - var rword = carry & 0x03ffffff - for (var j = Math.max(0, k - num1.length + 1), maxJ = Math.min(k, num2.length - 1); j <= maxJ; j++) { - var i = k - j - var a = num1.words[i] - var b = num2.words[j] - var r = a * b + rword - ncarry += (r / 0x04000000) | 0 - rword = r & 0x03ffffff - } - out.words[k] = rword - carry = ncarry - } - - if (carry !== 0) out.words[out.length++] = carry - - return out.strip() -} - -BN.umulTo10x10 = Math.imul ? optimized.umulTo10x10 : BN.umulTo - -BN.umulnTo = function (num, k, out) { - if (k === 0) { - out.words = [0] - out.length = 1 - return out - } - - for (var i = 0, carry = 0; i < num.length; ++i) { - var r = num.words[i] * k + carry - out.words[i] = r & 0x03ffffff - carry = (r / 0x04000000) | 0 - } - - if (carry > 0) { - out.words[i] = carry - out.length = num.length + 1 - } else { - out.length = num.length - } - - return out -} - -BN.prototype.umul = function (num) { - var out = new BN() - out.words = new Array(this.length + num.length) - - if (this.length === 10 && num.length === 10) { - return BN.umulTo10x10(this, num, out) - } else if (this.length === 1) { - return BN.umulnTo(num, this.words[0], out) - } else if (num.length === 1) { - return BN.umulnTo(this, num.words[0], out) - } else { - return BN.umulTo(this, num, out) - } -} - -BN.prototype.isplit = function (output) { - output.length = Math.min(this.length, 9) - for (var i = 0; i < output.length; ++i) output.words[i] = this.words[i] - - if (this.length <= 9) { - this.words[0] = 0 - this.length = 1 - return this - } - - // Shift by 9 limbs - var prev = this.words[9] - output.words[output.length++] = prev & 0x003fffff - - for (i = 10; i < this.length; ++i) { - var word = this.words[i] - this.words[i - 10] = ((word & 0x003fffff) << 4) | (prev >>> 22) - prev = word - } - prev >>>= 22 - this.words[i - 10] = prev - - if (prev === 0 && this.length > 10) { - this.length -= 10 - } else { - this.length -= 9 - } - - return this -} - -BN.prototype.fireduce = function () { - if (this.isOverflow()) this.isub(BN.n) - return this -} - -BN.prototype.ureduce = function () { - var num = this.clone().isplit(BN.tmp).umul(BN.nc).iadd(BN.tmp) - if (num.bitLengthGT256()) { - num = num.isplit(BN.tmp).umul(BN.nc).iadd(BN.tmp) - if (num.bitLengthGT256()) num = num.isplit(BN.tmp).umul(BN.nc).iadd(BN.tmp) - } - - return num.fireduce() -} - -BN.prototype.ishrn = function (n) { - var mask = (1 << n) - 1 - var m = 26 - n - - for (var i = this.length - 1, carry = 0; i >= 0; --i) { - var word = this.words[i] - this.words[i] = (carry << m) | (word >>> n) - carry = word & mask - } - - if (this.length > 1 && this.words[this.length - 1] === 0) this.length -= 1 - - return this -} - -BN.prototype.uinvm = function () { - var x = this.clone() - var y = BN.n.clone() - - // A * x + B * y = x - var A = BN.fromNumber(1) - var B = BN.fromNumber(0) - - // C * x + D * y = y - var C = BN.fromNumber(0) - var D = BN.fromNumber(1) - - while (x.isEven() && y.isEven()) { - for (var k = 1, m = 1; (x.words[0] & m) === 0 && (y.words[0] & m) === 0 && k < 26; ++k, m <<= 1); - x.ishrn(k) - y.ishrn(k) - } - - var yp = y.clone() - var xp = x.clone() - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.ishrn(i) - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp) - B.isub(xp) - } - - A.ishrn(1) - B.ishrn(1) - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.ishrn(j) - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp) - D.isub(xp) - } - - C.ishrn(1) - D.ishrn(1) - } - } - - if (x.ucmp(y) >= 0) { - x.isub(y) - A.isub(C) - B.isub(D) - } else { - y.isub(x) - C.isub(A) - D.isub(B) - } - } - - if (C.negative === 1) { - C.negative = 0 - var result = C.ureduce() - result.negative ^= 1 - return result.normSign().iadd(BN.n) - } else { - return C.ureduce() - } -} - -BN.prototype.imulK = function () { - this.words[this.length] = 0 - this.words[this.length + 1] = 0 - this.length += 2 - - for (var i = 0, lo = 0; i < this.length; ++i) { - var w = this.words[i] | 0 - lo += w * 0x3d1 - this.words[i] = lo & 0x03ffffff - lo = w * 0x40 + ((lo / 0x04000000) | 0) - } - - if (this.words[this.length - 1] === 0) { - this.length -= 1 - if (this.words[this.length - 1] === 0) this.length -= 1 - } - - return this -} - -BN.prototype.redIReduce = function () { - this.isplit(BN.tmp).imulK().iadd(BN.tmp) - if (this.bitLengthGT256()) this.isplit(BN.tmp).imulK().iadd(BN.tmp) - - var cmp = this.ucmp(BN.p) - if (cmp === 0) { - this.words[0] = 0 - this.length = 1 - } else if (cmp > 0) { - this.isub(BN.p) - } else { - this.strip() - } - - return this -} - -BN.prototype.redNeg = function () { - if (this.isZero()) return BN.fromNumber(0) - - return BN.p.sub(this) -} - -BN.prototype.redAdd = function (num) { - return this.clone().redIAdd(num) -} - -BN.prototype.redIAdd = function (num) { - this.iadd(num) - if (this.ucmp(BN.p) >= 0) this.isub(BN.p) - - return this -} - -BN.prototype.redIAdd7 = function () { - this.iuaddn(7) - if (this.ucmp(BN.p) >= 0) this.isub(BN.p) - - return this -} - -BN.prototype.redSub = function (num) { - return this.clone().redISub(num) -} - -BN.prototype.redISub = function (num) { - this.isub(num) - if (this.negative !== 0) this.iadd(BN.p) - - return this -} - -BN.prototype.redMul = function (num) { - return this.umul(num).redIReduce() -} - -BN.prototype.redSqr = function () { - return this.umul(this).redIReduce() -} - -BN.prototype.redSqrt = function () { - if (this.isZero()) return this.clone() - - var wv2 = this.redSqr() - var wv4 = wv2.redSqr() - var wv12 = wv4.redSqr().redMul(wv4) - var wv14 = wv12.redMul(wv2) - var wv15 = wv14.redMul(this) - - var out = wv15 - for (var i = 0; i < 54; ++i) out = out.redSqr().redSqr().redSqr().redSqr().redMul(wv15) - out = out.redSqr().redSqr().redSqr().redSqr().redMul(wv14) - for (i = 0; i < 5; ++i) out = out.redSqr().redSqr().redSqr().redSqr().redMul(wv15) - out = out.redSqr().redSqr().redSqr().redSqr().redMul(wv12) - out = out.redSqr().redSqr().redSqr().redSqr().redSqr().redSqr().redMul(wv12) - - if (out.redSqr().ucmp(this) === 0) { - return out - } else { - return null - } -} - -BN.prototype.redInvm = function () { - var a = this.clone() - var b = BN.p.clone() - - var x1 = BN.fromNumber(1) - var x2 = BN.fromNumber(0) - - while (a.gtOne() && b.gtOne()) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.ishrn(i) - while (i-- > 0) { - if (x1.isOdd()) x1.iadd(BN.p) - x1.ishrn(1) - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.ishrn(j) - while (j-- > 0) { - if (x2.isOdd()) x2.iadd(BN.p) - x2.ishrn(1) - } - } - - if (a.ucmp(b) >= 0) { - a.isub(b) - x1.isub(x2) - } else { - b.isub(a) - x2.isub(x1) - } - } - - var res - if (a.length === 1 && a.words[0] === 1) { - res = x1 - } else { - res = x2 - } - - if (res.negative !== 0) res.iadd(BN.p) - - if (res.negative !== 0) { - res.negative = 0 - return res.redIReduce().redNeg() - } else { - return res.redIReduce() - } -} - -BN.prototype.getNAF = function (w) { - var naf = [] - var ws = 1 << (w + 1) - var wsm1 = ws - 1 - var ws2 = ws >> 1 - - var k = this.clone() - while (!k.isZero()) { - for (var i = 0, m = 1; (k.words[0] & m) === 0 && i < 26; ++i, m <<= 1) naf.push(0) - - if (i !== 0) { - k.ishrn(i) - } else { - var mod = k.words[0] & wsm1 - if (mod >= ws2) { - naf.push(ws2 - mod) - k.iuaddn(mod - ws2).ishrn(1) - } else { - naf.push(mod) - k.words[0] -= mod - if (!k.isZero()) { - for (i = w - 1; i > 0; --i) naf.push(0) - k.ishrn(w) - } - } - } - } - - return naf -} - -BN.prototype.inspect = function () { - if (this.isZero()) return '0' - - var buffer = this.toBuffer().toString('hex') - for (var i = 0; buffer[i] === '0'; ++i); - return buffer.slice(i) -} - -BN.n = BN.fromBuffer(new Buffer('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141', 'hex')) -BN.nh = BN.n.clone().ishrn(1) -BN.nc = BN.fromBuffer(new Buffer('000000000000000000000000000000014551231950B75FC4402DA1732FC9BEBF', 'hex')) -BN.p = BN.fromBuffer(new Buffer('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F', 'hex')) -BN.psn = BN.p.sub(BN.n) -BN.tmp = new BN() -BN.tmp.words = new Array(10) - -// WTF?! it speed-up benchmark on ~20% -;(function () { - var x = BN.fromNumber(1) - x.words[3] = 0 -})() - -module.exports = BN diff --git a/node_modules/secp256k1/lib/js/bn/optimized.js b/node_modules/secp256k1/lib/js/bn/optimized.js deleted file mode 100644 index 1eebd07..0000000 --- a/node_modules/secp256k1/lib/js/bn/optimized.js +++ /dev/null @@ -1,572 +0,0 @@ -'use strict' -exports.umulTo10x10 = function (num1, num2, out) { - var a = num1.words - var b = num2.words - var o = out.words - var c = 0 - var lo - var mid - var hi - var a0 = a[0] | 0 - var al0 = a0 & 0x1fff - var ah0 = a0 >>> 13 - var a1 = a[1] | 0 - var al1 = a1 & 0x1fff - var ah1 = a1 >>> 13 - var a2 = a[2] | 0 - var al2 = a2 & 0x1fff - var ah2 = a2 >>> 13 - var a3 = a[3] | 0 - var al3 = a3 & 0x1fff - var ah3 = a3 >>> 13 - var a4 = a[4] | 0 - var al4 = a4 & 0x1fff - var ah4 = a4 >>> 13 - var a5 = a[5] | 0 - var al5 = a5 & 0x1fff - var ah5 = a5 >>> 13 - var a6 = a[6] | 0 - var al6 = a6 & 0x1fff - var ah6 = a6 >>> 13 - var a7 = a[7] | 0 - var al7 = a7 & 0x1fff - var ah7 = a7 >>> 13 - var a8 = a[8] | 0 - var al8 = a8 & 0x1fff - var ah8 = a8 >>> 13 - var a9 = a[9] | 0 - var al9 = a9 & 0x1fff - var ah9 = a9 >>> 13 - var b0 = b[0] | 0 - var bl0 = b0 & 0x1fff - var bh0 = b0 >>> 13 - var b1 = b[1] | 0 - var bl1 = b1 & 0x1fff - var bh1 = b1 >>> 13 - var b2 = b[2] | 0 - var bl2 = b2 & 0x1fff - var bh2 = b2 >>> 13 - var b3 = b[3] | 0 - var bl3 = b3 & 0x1fff - var bh3 = b3 >>> 13 - var b4 = b[4] | 0 - var bl4 = b4 & 0x1fff - var bh4 = b4 >>> 13 - var b5 = b[5] | 0 - var bl5 = b5 & 0x1fff - var bh5 = b5 >>> 13 - var b6 = b[6] | 0 - var bl6 = b6 & 0x1fff - var bh6 = b6 >>> 13 - var b7 = b[7] | 0 - var bl7 = b7 & 0x1fff - var bh7 = b7 >>> 13 - var b8 = b[8] | 0 - var bl8 = b8 & 0x1fff - var bh8 = b8 >>> 13 - var b9 = b[9] | 0 - var bl9 = b9 & 0x1fff - var bh9 = b9 >>> 13 - - out.length = 19 - /* k = 0 */ - lo = Math.imul(al0, bl0) - mid = Math.imul(al0, bh0) - mid += Math.imul(ah0, bl0) - hi = Math.imul(ah0, bh0) - var w0 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w0 >>> 26) - w0 &= 0x3ffffff - /* k = 1 */ - lo = Math.imul(al1, bl0) - mid = Math.imul(al1, bh0) - mid += Math.imul(ah1, bl0) - hi = Math.imul(ah1, bh0) - lo += Math.imul(al0, bl1) - mid += Math.imul(al0, bh1) - mid += Math.imul(ah0, bl1) - hi += Math.imul(ah0, bh1) - var w1 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w1 >>> 26) - w1 &= 0x3ffffff - /* k = 2 */ - lo = Math.imul(al2, bl0) - mid = Math.imul(al2, bh0) - mid += Math.imul(ah2, bl0) - hi = Math.imul(ah2, bh0) - lo += Math.imul(al1, bl1) - mid += Math.imul(al1, bh1) - mid += Math.imul(ah1, bl1) - hi += Math.imul(ah1, bh1) - lo += Math.imul(al0, bl2) - mid += Math.imul(al0, bh2) - mid += Math.imul(ah0, bl2) - hi += Math.imul(ah0, bh2) - var w2 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w2 >>> 26) - w2 &= 0x3ffffff - /* k = 3 */ - lo = Math.imul(al3, bl0) - mid = Math.imul(al3, bh0) - mid += Math.imul(ah3, bl0) - hi = Math.imul(ah3, bh0) - lo += Math.imul(al2, bl1) - mid += Math.imul(al2, bh1) - mid += Math.imul(ah2, bl1) - hi += Math.imul(ah2, bh1) - lo += Math.imul(al1, bl2) - mid += Math.imul(al1, bh2) - mid += Math.imul(ah1, bl2) - hi += Math.imul(ah1, bh2) - lo += Math.imul(al0, bl3) - mid += Math.imul(al0, bh3) - mid += Math.imul(ah0, bl3) - hi += Math.imul(ah0, bh3) - var w3 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w3 >>> 26) - w3 &= 0x3ffffff - /* k = 4 */ - lo = Math.imul(al4, bl0) - mid = Math.imul(al4, bh0) - mid += Math.imul(ah4, bl0) - hi = Math.imul(ah4, bh0) - lo += Math.imul(al3, bl1) - mid += Math.imul(al3, bh1) - mid += Math.imul(ah3, bl1) - hi += Math.imul(ah3, bh1) - lo += Math.imul(al2, bl2) - mid += Math.imul(al2, bh2) - mid += Math.imul(ah2, bl2) - hi += Math.imul(ah2, bh2) - lo += Math.imul(al1, bl3) - mid += Math.imul(al1, bh3) - mid += Math.imul(ah1, bl3) - hi += Math.imul(ah1, bh3) - lo += Math.imul(al0, bl4) - mid += Math.imul(al0, bh4) - mid += Math.imul(ah0, bl4) - hi += Math.imul(ah0, bh4) - var w4 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w4 >>> 26) - w4 &= 0x3ffffff - /* k = 5 */ - lo = Math.imul(al5, bl0) - mid = Math.imul(al5, bh0) - mid += Math.imul(ah5, bl0) - hi = Math.imul(ah5, bh0) - lo += Math.imul(al4, bl1) - mid += Math.imul(al4, bh1) - mid += Math.imul(ah4, bl1) - hi += Math.imul(ah4, bh1) - lo += Math.imul(al3, bl2) - mid += Math.imul(al3, bh2) - mid += Math.imul(ah3, bl2) - hi += Math.imul(ah3, bh2) - lo += Math.imul(al2, bl3) - mid += Math.imul(al2, bh3) - mid += Math.imul(ah2, bl3) - hi += Math.imul(ah2, bh3) - lo += Math.imul(al1, bl4) - mid += Math.imul(al1, bh4) - mid += Math.imul(ah1, bl4) - hi += Math.imul(ah1, bh4) - lo += Math.imul(al0, bl5) - mid += Math.imul(al0, bh5) - mid += Math.imul(ah0, bl5) - hi += Math.imul(ah0, bh5) - var w5 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w5 >>> 26) - w5 &= 0x3ffffff - /* k = 6 */ - lo = Math.imul(al6, bl0) - mid = Math.imul(al6, bh0) - mid += Math.imul(ah6, bl0) - hi = Math.imul(ah6, bh0) - lo += Math.imul(al5, bl1) - mid += Math.imul(al5, bh1) - mid += Math.imul(ah5, bl1) - hi += Math.imul(ah5, bh1) - lo += Math.imul(al4, bl2) - mid += Math.imul(al4, bh2) - mid += Math.imul(ah4, bl2) - hi += Math.imul(ah4, bh2) - lo += Math.imul(al3, bl3) - mid += Math.imul(al3, bh3) - mid += Math.imul(ah3, bl3) - hi += Math.imul(ah3, bh3) - lo += Math.imul(al2, bl4) - mid += Math.imul(al2, bh4) - mid += Math.imul(ah2, bl4) - hi += Math.imul(ah2, bh4) - lo += Math.imul(al1, bl5) - mid += Math.imul(al1, bh5) - mid += Math.imul(ah1, bl5) - hi += Math.imul(ah1, bh5) - lo += Math.imul(al0, bl6) - mid += Math.imul(al0, bh6) - mid += Math.imul(ah0, bl6) - hi += Math.imul(ah0, bh6) - var w6 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w6 >>> 26) - w6 &= 0x3ffffff - /* k = 7 */ - lo = Math.imul(al7, bl0) - mid = Math.imul(al7, bh0) - mid += Math.imul(ah7, bl0) - hi = Math.imul(ah7, bh0) - lo += Math.imul(al6, bl1) - mid += Math.imul(al6, bh1) - mid += Math.imul(ah6, bl1) - hi += Math.imul(ah6, bh1) - lo += Math.imul(al5, bl2) - mid += Math.imul(al5, bh2) - mid += Math.imul(ah5, bl2) - hi += Math.imul(ah5, bh2) - lo += Math.imul(al4, bl3) - mid += Math.imul(al4, bh3) - mid += Math.imul(ah4, bl3) - hi += Math.imul(ah4, bh3) - lo += Math.imul(al3, bl4) - mid += Math.imul(al3, bh4) - mid += Math.imul(ah3, bl4) - hi += Math.imul(ah3, bh4) - lo += Math.imul(al2, bl5) - mid += Math.imul(al2, bh5) - mid += Math.imul(ah2, bl5) - hi += Math.imul(ah2, bh5) - lo += Math.imul(al1, bl6) - mid += Math.imul(al1, bh6) - mid += Math.imul(ah1, bl6) - hi += Math.imul(ah1, bh6) - lo += Math.imul(al0, bl7) - mid += Math.imul(al0, bh7) - mid += Math.imul(ah0, bl7) - hi += Math.imul(ah0, bh7) - var w7 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w7 >>> 26) - w7 &= 0x3ffffff - /* k = 8 */ - lo = Math.imul(al8, bl0) - mid = Math.imul(al8, bh0) - mid += Math.imul(ah8, bl0) - hi = Math.imul(ah8, bh0) - lo += Math.imul(al7, bl1) - mid += Math.imul(al7, bh1) - mid += Math.imul(ah7, bl1) - hi += Math.imul(ah7, bh1) - lo += Math.imul(al6, bl2) - mid += Math.imul(al6, bh2) - mid += Math.imul(ah6, bl2) - hi += Math.imul(ah6, bh2) - lo += Math.imul(al5, bl3) - mid += Math.imul(al5, bh3) - mid += Math.imul(ah5, bl3) - hi += Math.imul(ah5, bh3) - lo += Math.imul(al4, bl4) - mid += Math.imul(al4, bh4) - mid += Math.imul(ah4, bl4) - hi += Math.imul(ah4, bh4) - lo += Math.imul(al3, bl5) - mid += Math.imul(al3, bh5) - mid += Math.imul(ah3, bl5) - hi += Math.imul(ah3, bh5) - lo += Math.imul(al2, bl6) - mid += Math.imul(al2, bh6) - mid += Math.imul(ah2, bl6) - hi += Math.imul(ah2, bh6) - lo += Math.imul(al1, bl7) - mid += Math.imul(al1, bh7) - mid += Math.imul(ah1, bl7) - hi += Math.imul(ah1, bh7) - lo += Math.imul(al0, bl8) - mid += Math.imul(al0, bh8) - mid += Math.imul(ah0, bl8) - hi += Math.imul(ah0, bh8) - var w8 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w8 >>> 26) - w8 &= 0x3ffffff - /* k = 9 */ - lo = Math.imul(al9, bl0) - mid = Math.imul(al9, bh0) - mid += Math.imul(ah9, bl0) - hi = Math.imul(ah9, bh0) - lo += Math.imul(al8, bl1) - mid += Math.imul(al8, bh1) - mid += Math.imul(ah8, bl1) - hi += Math.imul(ah8, bh1) - lo += Math.imul(al7, bl2) - mid += Math.imul(al7, bh2) - mid += Math.imul(ah7, bl2) - hi += Math.imul(ah7, bh2) - lo += Math.imul(al6, bl3) - mid += Math.imul(al6, bh3) - mid += Math.imul(ah6, bl3) - hi += Math.imul(ah6, bh3) - lo += Math.imul(al5, bl4) - mid += Math.imul(al5, bh4) - mid += Math.imul(ah5, bl4) - hi += Math.imul(ah5, bh4) - lo += Math.imul(al4, bl5) - mid += Math.imul(al4, bh5) - mid += Math.imul(ah4, bl5) - hi += Math.imul(ah4, bh5) - lo += Math.imul(al3, bl6) - mid += Math.imul(al3, bh6) - mid += Math.imul(ah3, bl6) - hi += Math.imul(ah3, bh6) - lo += Math.imul(al2, bl7) - mid += Math.imul(al2, bh7) - mid += Math.imul(ah2, bl7) - hi += Math.imul(ah2, bh7) - lo += Math.imul(al1, bl8) - mid += Math.imul(al1, bh8) - mid += Math.imul(ah1, bl8) - hi += Math.imul(ah1, bh8) - lo += Math.imul(al0, bl9) - mid += Math.imul(al0, bh9) - mid += Math.imul(ah0, bl9) - hi += Math.imul(ah0, bh9) - var w9 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w9 >>> 26) - w9 &= 0x3ffffff - /* k = 10 */ - lo = Math.imul(al9, bl1) - mid = Math.imul(al9, bh1) - mid += Math.imul(ah9, bl1) - hi = Math.imul(ah9, bh1) - lo += Math.imul(al8, bl2) - mid += Math.imul(al8, bh2) - mid += Math.imul(ah8, bl2) - hi += Math.imul(ah8, bh2) - lo += Math.imul(al7, bl3) - mid += Math.imul(al7, bh3) - mid += Math.imul(ah7, bl3) - hi += Math.imul(ah7, bh3) - lo += Math.imul(al6, bl4) - mid += Math.imul(al6, bh4) - mid += Math.imul(ah6, bl4) - hi += Math.imul(ah6, bh4) - lo += Math.imul(al5, bl5) - mid += Math.imul(al5, bh5) - mid += Math.imul(ah5, bl5) - hi += Math.imul(ah5, bh5) - lo += Math.imul(al4, bl6) - mid += Math.imul(al4, bh6) - mid += Math.imul(ah4, bl6) - hi += Math.imul(ah4, bh6) - lo += Math.imul(al3, bl7) - mid += Math.imul(al3, bh7) - mid += Math.imul(ah3, bl7) - hi += Math.imul(ah3, bh7) - lo += Math.imul(al2, bl8) - mid += Math.imul(al2, bh8) - mid += Math.imul(ah2, bl8) - hi += Math.imul(ah2, bh8) - lo += Math.imul(al1, bl9) - mid += Math.imul(al1, bh9) - mid += Math.imul(ah1, bl9) - hi += Math.imul(ah1, bh9) - var w10 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w10 >>> 26) - w10 &= 0x3ffffff - /* k = 11 */ - lo = Math.imul(al9, bl2) - mid = Math.imul(al9, bh2) - mid += Math.imul(ah9, bl2) - hi = Math.imul(ah9, bh2) - lo += Math.imul(al8, bl3) - mid += Math.imul(al8, bh3) - mid += Math.imul(ah8, bl3) - hi += Math.imul(ah8, bh3) - lo += Math.imul(al7, bl4) - mid += Math.imul(al7, bh4) - mid += Math.imul(ah7, bl4) - hi += Math.imul(ah7, bh4) - lo += Math.imul(al6, bl5) - mid += Math.imul(al6, bh5) - mid += Math.imul(ah6, bl5) - hi += Math.imul(ah6, bh5) - lo += Math.imul(al5, bl6) - mid += Math.imul(al5, bh6) - mid += Math.imul(ah5, bl6) - hi += Math.imul(ah5, bh6) - lo += Math.imul(al4, bl7) - mid += Math.imul(al4, bh7) - mid += Math.imul(ah4, bl7) - hi += Math.imul(ah4, bh7) - lo += Math.imul(al3, bl8) - mid += Math.imul(al3, bh8) - mid += Math.imul(ah3, bl8) - hi += Math.imul(ah3, bh8) - lo += Math.imul(al2, bl9) - mid += Math.imul(al2, bh9) - mid += Math.imul(ah2, bl9) - hi += Math.imul(ah2, bh9) - var w11 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w11 >>> 26) - w11 &= 0x3ffffff - /* k = 12 */ - lo = Math.imul(al9, bl3) - mid = Math.imul(al9, bh3) - mid += Math.imul(ah9, bl3) - hi = Math.imul(ah9, bh3) - lo += Math.imul(al8, bl4) - mid += Math.imul(al8, bh4) - mid += Math.imul(ah8, bl4) - hi += Math.imul(ah8, bh4) - lo += Math.imul(al7, bl5) - mid += Math.imul(al7, bh5) - mid += Math.imul(ah7, bl5) - hi += Math.imul(ah7, bh5) - lo += Math.imul(al6, bl6) - mid += Math.imul(al6, bh6) - mid += Math.imul(ah6, bl6) - hi += Math.imul(ah6, bh6) - lo += Math.imul(al5, bl7) - mid += Math.imul(al5, bh7) - mid += Math.imul(ah5, bl7) - hi += Math.imul(ah5, bh7) - lo += Math.imul(al4, bl8) - mid += Math.imul(al4, bh8) - mid += Math.imul(ah4, bl8) - hi += Math.imul(ah4, bh8) - lo += Math.imul(al3, bl9) - mid += Math.imul(al3, bh9) - mid += Math.imul(ah3, bl9) - hi += Math.imul(ah3, bh9) - var w12 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w12 >>> 26) - w12 &= 0x3ffffff - /* k = 13 */ - lo = Math.imul(al9, bl4) - mid = Math.imul(al9, bh4) - mid += Math.imul(ah9, bl4) - hi = Math.imul(ah9, bh4) - lo += Math.imul(al8, bl5) - mid += Math.imul(al8, bh5) - mid += Math.imul(ah8, bl5) - hi += Math.imul(ah8, bh5) - lo += Math.imul(al7, bl6) - mid += Math.imul(al7, bh6) - mid += Math.imul(ah7, bl6) - hi += Math.imul(ah7, bh6) - lo += Math.imul(al6, bl7) - mid += Math.imul(al6, bh7) - mid += Math.imul(ah6, bl7) - hi += Math.imul(ah6, bh7) - lo += Math.imul(al5, bl8) - mid += Math.imul(al5, bh8) - mid += Math.imul(ah5, bl8) - hi += Math.imul(ah5, bh8) - lo += Math.imul(al4, bl9) - mid += Math.imul(al4, bh9) - mid += Math.imul(ah4, bl9) - hi += Math.imul(ah4, bh9) - var w13 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w13 >>> 26) - w13 &= 0x3ffffff - /* k = 14 */ - lo = Math.imul(al9, bl5) - mid = Math.imul(al9, bh5) - mid += Math.imul(ah9, bl5) - hi = Math.imul(ah9, bh5) - lo += Math.imul(al8, bl6) - mid += Math.imul(al8, bh6) - mid += Math.imul(ah8, bl6) - hi += Math.imul(ah8, bh6) - lo += Math.imul(al7, bl7) - mid += Math.imul(al7, bh7) - mid += Math.imul(ah7, bl7) - hi += Math.imul(ah7, bh7) - lo += Math.imul(al6, bl8) - mid += Math.imul(al6, bh8) - mid += Math.imul(ah6, bl8) - hi += Math.imul(ah6, bh8) - lo += Math.imul(al5, bl9) - mid += Math.imul(al5, bh9) - mid += Math.imul(ah5, bl9) - hi += Math.imul(ah5, bh9) - var w14 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w14 >>> 26) - w14 &= 0x3ffffff - /* k = 15 */ - lo = Math.imul(al9, bl6) - mid = Math.imul(al9, bh6) - mid += Math.imul(ah9, bl6) - hi = Math.imul(ah9, bh6) - lo += Math.imul(al8, bl7) - mid += Math.imul(al8, bh7) - mid += Math.imul(ah8, bl7) - hi += Math.imul(ah8, bh7) - lo += Math.imul(al7, bl8) - mid += Math.imul(al7, bh8) - mid += Math.imul(ah7, bl8) - hi += Math.imul(ah7, bh8) - lo += Math.imul(al6, bl9) - mid += Math.imul(al6, bh9) - mid += Math.imul(ah6, bl9) - hi += Math.imul(ah6, bh9) - var w15 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w15 >>> 26) - w15 &= 0x3ffffff - /* k = 16 */ - lo = Math.imul(al9, bl7) - mid = Math.imul(al9, bh7) - mid += Math.imul(ah9, bl7) - hi = Math.imul(ah9, bh7) - lo += Math.imul(al8, bl8) - mid += Math.imul(al8, bh8) - mid += Math.imul(ah8, bl8) - hi += Math.imul(ah8, bh8) - lo += Math.imul(al7, bl9) - mid += Math.imul(al7, bh9) - mid += Math.imul(ah7, bl9) - hi += Math.imul(ah7, bh9) - var w16 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w16 >>> 26) - w16 &= 0x3ffffff - /* k = 17 */ - lo = Math.imul(al9, bl8) - mid = Math.imul(al9, bh8) - mid += Math.imul(ah9, bl8) - hi = Math.imul(ah9, bh8) - lo += Math.imul(al8, bl9) - mid += Math.imul(al8, bh9) - mid += Math.imul(ah8, bl9) - hi += Math.imul(ah8, bh9) - var w17 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w17 >>> 26) - w17 &= 0x3ffffff - /* k = 18 */ - lo = Math.imul(al9, bl9) - mid = Math.imul(al9, bh9) - mid += Math.imul(ah9, bl9) - hi = Math.imul(ah9, bh9) - var w18 = c + lo + ((mid & 0x1fff) << 13) - c = hi + (mid >>> 13) + (w18 >>> 26) - w18 &= 0x3ffffff - o[0] = w0 - o[1] = w1 - o[2] = w2 - o[3] = w3 - o[4] = w4 - o[5] = w5 - o[6] = w6 - o[7] = w7 - o[8] = w8 - o[9] = w9 - o[10] = w10 - o[11] = w11 - o[12] = w12 - o[13] = w13 - o[14] = w14 - o[15] = w15 - o[16] = w16 - o[17] = w17 - o[18] = w18 - if (c !== 0) { - o[19] = c - out.length++ - } - return out -} diff --git a/node_modules/secp256k1/lib/js/ecjpoint.js b/node_modules/secp256k1/lib/js/ecjpoint.js deleted file mode 100644 index 17a12d7..0000000 --- a/node_modules/secp256k1/lib/js/ecjpoint.js +++ /dev/null @@ -1,179 +0,0 @@ -'use strict' -var BN = require('./bn') - -function ECJPoint (x, y, z) { - if (x === null && y === null && z === null) { - this.x = ECJPoint.one - this.y = ECJPoint.one - this.z = ECJPoint.zero - } else { - this.x = x - this.y = y - this.z = z - } - - this.zOne = this.z === ECJPoint.one -} - -ECJPoint.zero = BN.fromNumber(0) -ECJPoint.one = BN.fromNumber(1) - -ECJPoint.prototype.neg = function () { - if (this.inf) return this - - return new ECJPoint(this.x, this.y.redNeg(), this.z) -} - -ECJPoint.prototype.add = function (p) { - // O + P = P - if (this.inf) return p - - // P + O = P - if (p.inf) return this - - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-1998-cmo-2 - // 12M + 4S + 7A - var pz2 = p.z.redSqr() - var z2 = this.z.redSqr() - var u1 = this.x.redMul(pz2) - var u2 = p.x.redMul(z2) - var s1 = this.y.redMul(pz2).redMul(p.z) - var s2 = p.y.redMul(z2).redMul(this.z) - - var h = u1.redSub(u2) - var r = s1.redSub(s2) - if (h.isZero()) { - if (r.isZero()) return this.dbl() - return new ECJPoint(null, null, null) - } - - var h2 = h.redSqr() - var v = u1.redMul(h2) - var h3 = h2.redMul(h) - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v) - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)) - var nz = this.z.redMul(p.z).redMul(h) - - return new ECJPoint(nx, ny, nz) -} - -ECJPoint.prototype.mixedAdd = function (p) { - // O + P = P - if (this.inf) return p.toECJPoint() - - // P + O = P - if (p.inf) return this - - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-1998-cmo-2 - // with p.z = 1 - // 8M + 3S + 7A - var z2 = this.z.redSqr() - var u1 = this.x - var u2 = p.x.redMul(z2) - var s1 = this.y - var s2 = p.y.redMul(z2).redMul(this.z) - - var h = u1.redSub(u2) - var r = s1.redSub(s2) - if (h.isZero()) { - if (r.isZero()) return this.dbl() - return new ECJPoint(null, null, null) - } - - var h2 = h.redSqr() - var v = u1.redMul(h2) - var h3 = h2.redMul(h) - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v) - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)) - var nz = this.z.redMul(h) - - return new ECJPoint(nx, ny, nz) -} - -ECJPoint.prototype.dbl = function () { - if (this.inf) return this - - var nx - var ny - var nz - - // Z = 1 - if (this.zOne) { - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-mdbl-2007-bl - // 1M + 5S + 6A + 3*2 + 1*3 + 1*8 - - // XX = X1^2 - var xx = this.x.redSqr() - // YY = Y1^2 - var yy = this.y.redSqr() - // YYYY = YY^2 - var yyyy = yy.redSqr() - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy) - s = s.redIAdd(s) - // M = 3 * XX - var m = xx.redAdd(xx).redIAdd(xx) - // T = M ^ 2 - 2*S - var t = m.redSqr().redISub(s).redISub(s) - - // 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy).redIAdd(yyyy).redIAdd(yyyy) - - // X3 = T - nx = t - // Y3 = M * (S - T) - 8 * YYYY - ny = m.redMul(s.redISub(t)).redISub(yyyy8) - // Z3 = 2*Y1 - nz = this.y.redAdd(this.y) - } else { - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l - // 2M + 5S + 6A + 3*2 + 1*3 + 1*8 - - // A = X1^2 - var a = this.x.redSqr() - // B = Y1^2 - var b = this.y.redSqr() - // C = B^2 - var c = b.redSqr() - // D = 2 * ((X1 + B)^2 - A - C) - var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c) - d = d.redIAdd(d) - // E = 3 * A - var e = a.redAdd(a).redIAdd(a) - // F = E^2 - var f = e.redSqr() - - // 8 * C - var c8 = c.redIAdd(c).redIAdd(c).redIAdd(c) - - // X3 = F - 2 * D - nx = f.redISub(d).redISub(d) - // Y3 = E * (D - X3) - 8 * C - ny = e.redMul(d.redISub(nx)).redISub(c8) - // Z3 = 2 * Y1 * Z1 - nz = this.y.redMul(this.z) - nz = nz.redIAdd(nz) - } - - return new ECJPoint(nx, ny, nz) -} - -ECJPoint.prototype.dblp = function (pow) { - if (pow === 0 || this.inf) return this - - var point = this - for (var i = 0; i < pow; i++) point = point.dbl() - - return point -} - -Object.defineProperty(ECJPoint.prototype, 'inf', { - enumerable: true, - get: function () { - return this.z.isZero() - } -}) - -module.exports = ECJPoint diff --git a/node_modules/secp256k1/lib/js/ecpoint.js b/node_modules/secp256k1/lib/js/ecpoint.js deleted file mode 100644 index 3d064d7..0000000 --- a/node_modules/secp256k1/lib/js/ecpoint.js +++ /dev/null @@ -1,181 +0,0 @@ -'use strict' -var BN = require('./bn') -var ECJPoint = require('./ecjpoint') - -function ECPoint (x, y) { - if (x === null && y === null) { - this.x = this.y = null - this.inf = true - } else { - this.x = x - this.y = y - this.inf = false - } -} - -ECPoint.fromPublicKey = function (publicKey) { - var first = publicKey[0] - var x - var y - - if (publicKey.length === 33 && (first === 0x02 || first === 0x03)) { - x = BN.fromBuffer(publicKey.slice(1, 33)) - - // overflow - if (x.ucmp(BN.p) >= 0) return null - - // create from X - y = x.redSqr().redMul(x).redIAdd7().redSqrt() - if (y === null) return null - if ((first === 0x03) !== y.isOdd()) y = y.redNeg() - - return new ECPoint(x, y) - } - - if (publicKey.length === 65 && (first === 0x04 || first === 0x06 || first === 0x07)) { - x = BN.fromBuffer(publicKey.slice(1, 33)) - y = BN.fromBuffer(publicKey.slice(33, 65)) - - // overflow - if (x.ucmp(BN.p) >= 0 || y.ucmp(BN.p) >= 0) return null - - // is odd flag - if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null - - // x*x*x + 7 = y*y - if (x.redSqr().redMul(x).redIAdd7().ucmp(y.redSqr()) !== 0) return null - - return new ECPoint(x, y) - } - - return null -} - -ECPoint.prototype.toPublicKey = function (compressed) { - var x = this.x - var y = this.y - var publicKey - - if (compressed) { - publicKey = new Buffer(33) - publicKey[0] = y.isOdd() ? 0x03 : 0x02 - x.toBuffer().copy(publicKey, 1) - } else { - publicKey = new Buffer(65) - publicKey[0] = 0x04 - x.toBuffer().copy(publicKey, 1) - y.toBuffer().copy(publicKey, 33) - } - - return publicKey -} - -ECPoint.fromECJPoint = function (p) { - if (p.inf) return new ECPoint(null, null) - - var zinv = p.z.redInvm() - var zinv2 = zinv.redSqr() - var ax = p.x.redMul(zinv2) - var ay = p.y.redMul(zinv2).redMul(zinv) - - return new ECPoint(ax, ay) -} - -ECPoint.prototype.toECJPoint = function () { - if (this.inf) return new ECJPoint(null, null, null) - - return new ECJPoint(this.x, this.y, ECJPoint.one) -} - -ECPoint.prototype.neg = function () { - if (this.inf) return this - - return new ECPoint(this.x, this.y.redNeg()) -} - -ECPoint.prototype.add = function (p) { - // O + P = P - if (this.inf) return p - - // P + O = P - if (p.inf) return this - - if (this.x.ucmp(p.x) === 0) { - // P + P = 2P - if (this.y.ucmp(p.y) === 0) return this.dbl() - // P + (-P) = O - return new ECPoint(null, null) - } - - // s = (y - yp) / (x - xp) - // nx = s^2 - x - xp - // ny = s * (x - nx) - y - var s = this.y.redSub(p.y) - if (!s.isZero()) s = s.redMul(this.x.redSub(p.x).redInvm()) - - var nx = s.redSqr().redISub(this.x).redISub(p.x) - var ny = s.redMul(this.x.redSub(nx)).redISub(this.y) - return new ECPoint(nx, ny) -} - -ECPoint.prototype.dbl = function () { - if (this.inf) return this - - // 2P = O - var yy = this.y.redAdd(this.y) - if (yy.isZero()) return new ECPoint(null, null) - - // s = (3 * x^2) / (2 * y) - // nx = s^2 - 2*x - // ny = s * (x - nx) - y - var x2 = this.x.redSqr() - var s = x2.redAdd(x2).redIAdd(x2).redMul(yy.redInvm()) - - var nx = s.redSqr().redISub(this.x.redAdd(this.x)) - var ny = s.redMul(this.x.redSub(nx)).redISub(this.y) - return new ECPoint(nx, ny) -} - -ECPoint.prototype.mul = function (num) { - // Algorithm 3.36 Window NAF method for point multiplication - var nafPoints = this._getNAFPoints(4) - var points = nafPoints.points - - // Get NAF form - var naf = num.getNAF(nafPoints.wnd) - - // Add `this`*(N+1) for every w-NAF index - var acc = new ECJPoint(null, null, null) - for (var i = naf.length - 1; i >= 0; i--) { - // Count zeroes - for (var k = 0; i >= 0 && naf[i] === 0; i--, ++k); - if (i >= 0) k += 1 - acc = acc.dblp(k) - - if (i < 0) break - - // J +- P - var z = naf[i] - if (z > 0) { - acc = acc.mixedAdd(points[(z - 1) >> 1]) - } else { - acc = acc.mixedAdd(points[(-z - 1) >> 1].neg()) - } - } - - return ECPoint.fromECJPoint(acc) -} - -ECPoint.prototype._getNAFPoints1 = function () { - return { wnd: 1, points: [this] } -} - -ECPoint.prototype._getNAFPoints = function (wnd) { - var points = new Array((1 << wnd) - 1) - points[0] = this - var dbl = this.dbl() - for (var i = 1; i < points.length; ++i) points[i] = points[i - 1].add(dbl) - return { wnd: wnd, points: points } -} - -module.exports = ECPoint diff --git a/node_modules/secp256k1/lib/js/ecpointg.js b/node_modules/secp256k1/lib/js/ecpointg.js deleted file mode 100644 index a4c5ba9..0000000 --- a/node_modules/secp256k1/lib/js/ecpointg.js +++ /dev/null @@ -1,115 +0,0 @@ -'use strict' -var BN = require('./bn') -var ECPoint = require('./ecpoint') -var ECJPoint = require('./ecjpoint') - -function ECPointG () { - this.x = BN.fromBuffer(new Buffer('79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798', 'hex')) - this.y = BN.fromBuffer(new Buffer('483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8', 'hex')) - this.inf = false - - this._precompute() -} - -ECPointG.prototype._precompute = function () { - var ecpoint = new ECPoint(this.x, this.y) - - var dstep = 4 - var points = new Array(1 + Math.ceil(257 / dstep)) - var acc = points[0] = ecpoint - for (var i = 1; i < points.length; ++i) { - for (var j = 0; j < dstep; j++) acc = acc.dbl() - points[i] = acc - } - - this.precomputed = { - naf: ecpoint._getNAFPoints(7), - doubles: { - step: dstep, - points: points, - negpoints: points.map(function (p) { return p.neg() }) - } - } -} - -ECPointG.prototype.mul = function (num) { - // Algorithm 3.42 Fixed-base NAF windowing method for point multiplication - var step = this.precomputed.doubles.step - var points = this.precomputed.doubles.points - var negpoints = this.precomputed.doubles.negpoints - - var naf = num.getNAF(1) - var I = ((1 << (step + 1)) - (step % 2 === 0 ? 2 : 1)) / 3 - - // Translate into more windowed form - var repr = [] - for (var j = 0; j < naf.length; j += step) { - var nafW = 0 - for (var k = j + step - 1; k >= j; k--) nafW = (nafW << 1) + naf[k] - repr.push(nafW) - } - - var a = new ECJPoint(null, null, null) - var b = new ECJPoint(null, null, null) - for (var i = I; i > 0; i--) { - for (var jj = 0; jj < repr.length; jj++) { - if (repr[jj] === i) { - b = b.mixedAdd(points[jj]) - } else if (repr[jj] === -i) { - b = b.mixedAdd(negpoints[jj]) - } - } - - a = a.add(b) - } - - return ECPoint.fromECJPoint(a) -} - -ECPointG.prototype.mulAdd = function (k1, p2, k2) { - var nafPointsP1 = this.precomputed.naf - var nafPointsP2 = p2._getNAFPoints1() - var wnd = [nafPointsP1.points, nafPointsP2.points] - var naf = [k1.getNAF(nafPointsP1.wnd), k2.getNAF(nafPointsP2.wnd)] - - var acc = new ECJPoint(null, null, null) - var tmp = [null, null] - for (var i = Math.max(naf[0].length, naf[1].length); i >= 0; i--) { - var k = 0 - - for (; i >= 0; ++k, --i) { - tmp[0] = naf[0][i] | 0 - tmp[1] = naf[1][i] | 0 - - if (tmp[0] !== 0 || tmp[1] !== 0) break - } - - if (i >= 0) k += 1 - acc = acc.dblp(k) - - if (i < 0) break - - for (var jj = 0; jj < 2; jj++) { - var z = tmp[jj] - var p - if (z === 0) { - continue - } else if (z > 0) { - p = wnd[jj][z >> 1] - } else if (z < 0) { - p = wnd[jj][-z >> 1].neg() - } - - // hack: ECPoint detection - if (p.z === undefined) { - acc = acc.mixedAdd(p) - } else { - acc = acc.add(p) - } - } - } - - return acc -} - -module.exports = new ECPointG() diff --git a/node_modules/secp256k1/lib/js/index.js b/node_modules/secp256k1/lib/js/index.js deleted file mode 100644 index 212534b..0000000 --- a/node_modules/secp256k1/lib/js/index.js +++ /dev/null @@ -1,223 +0,0 @@ -'use strict' -var createHash = require('create-hash') -var HmacDRBG = require('drbg.js/hmac') -var messages = require('../messages.json') -var BN = require('./bn') -var ECPoint = require('./ecpoint') -var g = require('./ecpointg') - -exports.privateKeyVerify = function (privateKey) { - var bn = BN.fromBuffer(privateKey) - return !(bn.isOverflow() || bn.isZero()) -} - -exports.privateKeyExport = function (privateKey, compressed) { - var d = BN.fromBuffer(privateKey) - if (d.isOverflow() || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL) - - return g.mul(d).toPublicKey(compressed) -} - -exports.privateKeyTweakAdd = function (privateKey, tweak) { - var bn = BN.fromBuffer(tweak) - if (bn.isOverflow()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL) - - bn.iadd(BN.fromBuffer(privateKey)) - if (bn.isOverflow()) bn.isub(BN.n) - if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL) - - return bn.toBuffer() -} - -exports.privateKeyTweakMul = function (privateKey, tweak) { - var bn = BN.fromBuffer(tweak) - if (bn.isOverflow() || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL) - - var d = BN.fromBuffer(privateKey) - return bn.umul(d).ureduce().toBuffer() -} - -exports.publicKeyCreate = function (privateKey, compressed) { - var d = BN.fromBuffer(privateKey) - if (d.isOverflow() || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL) - - return g.mul(d).toPublicKey(compressed) -} - -exports.publicKeyConvert = function (publicKey, compressed) { - var point = ECPoint.fromPublicKey(publicKey) - if (point === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - return point.toPublicKey(compressed) -} - -exports.publicKeyVerify = function (publicKey) { - return ECPoint.fromPublicKey(publicKey) !== null -} - -exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) { - var point = ECPoint.fromPublicKey(publicKey) - if (point === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - tweak = BN.fromBuffer(tweak) - if (tweak.isOverflow()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL) - - return g.mul(tweak).add(point).toPublicKey(compressed) -} - -exports.publicKeyTweakMul = function (publicKey, tweak, compressed) { - var point = ECPoint.fromPublicKey(publicKey) - if (point === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - tweak = BN.fromBuffer(tweak) - if (tweak.isOverflow() || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL) - - return point.mul(tweak).toPublicKey(compressed) -} - -exports.publicKeyCombine = function (publicKeys, compressed) { - var points = new Array(publicKeys.length) - for (var i = 0; i < publicKeys.length; ++i) { - points[i] = ECPoint.fromPublicKey(publicKeys[i]) - if (points[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - } - - var point = points[0] - for (var j = 1; j < points.length; ++j) point = point.add(points[j]) - if (point.inf) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL) - - return point.toPublicKey(compressed) -} - -exports.signatureNormalize = function (signature) { - var r = BN.fromBuffer(signature.slice(0, 32)) - var s = BN.fromBuffer(signature.slice(32, 64)) - if (r.isOverflow() || s.isOverflow()) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - - var result = new Buffer(signature) - if (s.isHigh()) BN.n.sub(s).toBuffer().copy(result, 32) - - return result -} - -exports.signatureExport = function (signature) { - var r = signature.slice(0, 32) - var s = signature.slice(32, 64) - if (BN.fromBuffer(r).isOverflow() || BN.fromBuffer(s).isOverflow()) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - - return { r: r, s: s } -} - -exports.signatureImport = function (sigObj) { - var r = BN.fromBuffer(sigObj.r) - if (r.isOverflow()) r = BN.fromNumber(0) - - var s = BN.fromBuffer(sigObj.s) - if (s.isOverflow()) s = BN.fromNumber(0) - - return Buffer.concat([r.toBuffer(), s.toBuffer()]) -} - -exports.sign = function (message, privateKey, noncefn, data) { - var d = BN.fromBuffer(privateKey) - if (d.isOverflow() || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL) - - if (noncefn === null) { - var drbg = new HmacDRBG('sha256', privateKey, message, data) - noncefn = function () { return drbg.generate(32) } - } - - var bnMessage = BN.fromBuffer(message) - for (var count = 0; ; ++count) { - var nonce = noncefn(message, privateKey, null, data, count) - if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL) - - var k = BN.fromBuffer(nonce) - if (k.isOverflow() || k.isZero()) continue - - var kp = g.mul(k) - var r = kp.x.fireduce() - if (r.isZero()) continue - - var s = k.uinvm().umul(r.umul(d).ureduce().iadd(bnMessage).fireduce()).ureduce() - if (s.isZero()) continue - - var recovery = (kp.x.ucmp(r) !== 0 ? 2 : 0) | (kp.y.isOdd() ? 1 : 0) - if (s.isHigh()) { - s = BN.n.sub(s) - recovery ^= 1 - } - - return { - signature: Buffer.concat([r.toBuffer(), s.toBuffer()]), - recovery: recovery - } - } -} - -exports.verify = function (message, signature, publicKey) { - var sigr = BN.fromBuffer(signature.slice(0, 32)) - var sigs = BN.fromBuffer(signature.slice(32, 64)) - if (sigr.isOverflow() || sigs.isOverflow()) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - - if (sigs.isHigh() || sigr.isZero() || sigs.isZero()) return false - - var pub = ECPoint.fromPublicKey(publicKey) - if (pub === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - var sinv = sigs.uinvm() - var u1 = sinv.umul(BN.fromBuffer(message)).ureduce() - var u2 = sinv.umul(sigr).ureduce() - var point = g.mulAdd(u1, pub, u2) - if (point.inf) return false - - // return ECPoint.fromECJPoint(point).x.fireduce().ucmp(sigr) === 0 - // Inversion-free - var z2 = point.z.redSqr() - if (sigr.redMul(z2).ucmp(point.x) === 0) return true - if (sigr.ucmp(BN.psn) >= 0) return false - - return sigr.iadd(BN.psn).redMul(z2).ucmp(point.x) === 0 -} - -exports.recover = function (message, signature, recovery, compressed) { - var sigr = BN.fromBuffer(signature.slice(0, 32)) - var sigs = BN.fromBuffer(signature.slice(32, 64)) - if (sigr.isOverflow() || sigs.isOverflow()) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - - do { - if (sigr.isZero() || sigs.isZero()) break - - var kpx = sigr - if (recovery >> 1) { - if (kpx.ucmp(BN.psn) >= 0) break - kpx = sigr.add(BN.n) - } - - var kpPublicKey = Buffer.concat([new Buffer([0x02 + (recovery & 0x01)]), kpx.toBuffer()]) - var kp = ECPoint.fromPublicKey(kpPublicKey) - if (kp === null) break - - var eNeg = BN.n.sub(BN.fromBuffer(message)) - var rInv = sigr.uinvm() - var point = ECPoint.fromECJPoint(g.mulAdd(eNeg, kp, sigs)) - return point.mul(rInv).toPublicKey(compressed) - } while (false) - - throw new Error(messages.ECDSA_RECOVER_FAIL) -} - -exports.ecdh = function (publicKey, privateKey) { - var shared = exports.ecdhUnsafe(publicKey, privateKey, true) - return createHash('sha256').update(shared).digest() -} - -exports.ecdhUnsafe = function (publicKey, privateKey, compressed) { - var point = ECPoint.fromPublicKey(publicKey) - if (point === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - - var scalar = BN.fromBuffer(privateKey) - if (scalar.isOverflow() || scalar.isZero()) throw new Error(messages.ECDH_FAIL) - - return point.mul(scalar).toPublicKey(compressed) -} diff --git a/node_modules/secp256k1/lib/messages.json b/node_modules/secp256k1/lib/messages.json deleted file mode 100644 index 52bf762..0000000 --- a/node_modules/secp256k1/lib/messages.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "COMPRESSED_TYPE_INVALID": "compressed should be a boolean", - "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer", - "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid", - "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid", - "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range", - "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format", - "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format", - "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array", - "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element", - "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer", - "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid", - "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid", - "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again", - "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid", - "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range", - "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid", - "ECDH_FAIL": "scalar was invalid (zero or overflow)", - "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer", - "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid", - "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature", - "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature", - "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format", - "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid", - "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature", - "MSG32_TYPE_INVALID": "message should be a Buffer", - "MSG32_LENGTH_INVALID": "message length is invalid", - "OPTIONS_TYPE_INVALID": "options should be an Object", - "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer", - "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid", - "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function", - "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number", - "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4", - "TWEAK_TYPE_INVALID": "tweak should be a Buffer", - "TWEAK_LENGTH_INVALID": "tweak length is invalid" -} diff --git a/node_modules/secp256k1/package.json b/node_modules/secp256k1/package.json deleted file mode 100644 index 6c74899..0000000 --- a/node_modules/secp256k1/package.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "_args": [ - [ - "secp256k1@^3.0.1", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-util" - ] - ], - "_from": "secp256k1@>=3.0.1 <4.0.0", - "_id": "secp256k1@3.2.0", - "_inCache": true, - "_installable": true, - "_location": "/secp256k1", - "_nodeVersion": "6.4.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/secp256k1-3.2.0.tgz_1471503729451_0.8396295090205967" - }, - "_npmUser": { - "email": "fanatid@ya.ru", - "name": "fanatid" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "secp256k1", - "raw": "secp256k1@^3.0.1", - "rawSpec": "^3.0.1", - "scope": null, - "spec": ">=3.0.1 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-util", - "/hdkey" - ], - "_resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.2.0.tgz", - "_shasum": "4503def2190f501d6baa93d63c384550a1d726f6", - "_shrinkwrap": null, - "_spec": "secp256k1@^3.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-util", - "author": { - "email": "mjbecze@gmail.com", - "name": "Martin Becze" - }, - "browser": { - "./index.js": "./elliptic.js" - }, - "bugs": { - "url": "https://github.com/cryptocoinjs/secp256k1-node/issues" - }, - "contributors": [ - { - "name": "Aaron Davis", - "url": "https://github.com/kumavis" - }, - { - "name": "Ian Matyssik", - "url": "https://github.com/phpb-com" - }, - { - "email": "kagami@genshiken.org", - "name": "Kagami Hiiragi", - "url": "http://kagami.genshiken.org/" - }, - { - "name": "ethers", - "url": "https://github.com/ethers" - }, - { - "email": "fanatid@ya.ru", - "name": "Kirill Fomichev", - "url": "https://github.com/fanatid" - } - ], - "dependencies": { - "bindings": "^1.2.1", - "bip66": "^1.1.3", - "bn.js": "^4.11.3", - "create-hash": "^1.1.2", - "drbg.js": "^1.0.1", - "elliptic": "^6.2.3", - "nan": "^2.2.1" - }, - "description": "This module provides native bindings to ecdsa secp256k1 functions", - "devDependencies": { - "bignum": "^0.11.0", - "browserify": "^13.0.0", - "faucet": "0.0.1", - "karma": "^0.13.22", - "karma-browserify": "^5.0.4", - "karma-chrome-launcher": "^0.2.3", - "karma-detect-browsers": "^2.1.0", - "karma-env-preprocessor": "^0.1.1", - "karma-firefox-launcher": "^0.1.6", - "karma-tap": "^1.0.4", - "node-gyp": "^3.3.1", - "nyc": "^6.4.0", - "standard": "^7.0.0", - "tape": "^4.5.1", - "xorshift.js": "^1.0.3" - }, - "directories": {}, - "dist": { - "shasum": "4503def2190f501d6baa93d63c384550a1d726f6", - "tarball": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.2.0.tgz" - }, - "engines": { - "node": ">=0.10" - }, - "files": [ - "lib", - "src", - "API.md", - "binding.gyp", - "bindings.js", - "elliptic.js", - "index.js", - "js.js", - "utils/has_lib.sh" - ], - "gitHead": "52e0cbe6bac6921d3aa3f808b627537c18ff61ce", - "gypfile": true, - "homepage": "https://github.com/cryptocoinjs/secp256k1-node#readme", - "keywords": [ - "ec", - "ecdh", - "ecdsa", - "secp256k1" - ], - "license": "MIT", - "main": "./index.js", - "maintainers": [ - { - "email": "email@dcousens.com", - "name": "dcousens" - }, - { - "email": "fanatid@ya.ru", - "name": "fanatid" - }, - { - "email": "jprichardson@gmail.com", - "name": "jprichardson" - }, - { - "email": "null_radix@riseup.net", - "name": "null_radix" - } - ], - "name": "secp256k1", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/cryptocoinjs/secp256k1-node.git" - }, - "scripts": { - "clean": "node-gyp clean", - "coverage": "RANDOM_TESTS_REPEAT=1 nyc tape test/index.js", - "coverage-lcov": "npm run coverage && nyc report -r lcov", - "install": "npm run rebuild || echo \"Secp256k1 bindings compilation fail. Pure JS implementation will be used.\"", - "lint": "standard", - "rebuild": "node-gyp rebuild", - "test": "npm run lint && npm run unit:node", - "unit:browser": "karma start karma.conf.js", - "unit:node": "tape test/index.js |faucet" - }, - "version": "3.2.0" -} diff --git a/node_modules/secp256k1/src/addon.cc b/node_modules/secp256k1/src/addon.cc deleted file mode 100644 index 5451083..0000000 --- a/node_modules/secp256k1/src/addon.cc +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include -#include - -#include "privatekey.h" -#include "publickey.h" -#include "signature.h" -#include "ecdsa.h" -#include "ecdh.h" - -secp256k1_context* secp256k1ctx; - -NAN_MODULE_INIT(Init) { - secp256k1ctx = secp256k1_context_create( - SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); - - // secret key - Nan::Export(target, "privateKeyVerify", privateKeyVerify); - Nan::Export(target, "privateKeyExport", privateKeyExport); - Nan::Export(target, "privateKeyImport", privateKeyImport); - Nan::Export(target, "privateKeyTweakAdd", privateKeyTweakAdd); - Nan::Export(target, "privateKeyTweakMul", privateKeyTweakMul); - - // public key - Nan::Export(target, "publicKeyCreate", publicKeyCreate); - Nan::Export(target, "publicKeyConvert", publicKeyConvert); - Nan::Export(target, "publicKeyVerify", publicKeyVerify); - Nan::Export(target, "publicKeyTweakAdd", publicKeyTweakAdd); - Nan::Export(target, "publicKeyTweakMul", publicKeyTweakMul); - Nan::Export(target, "publicKeyCombine", publicKeyCombine); - - // signature - Nan::Export(target, "signatureNormalize", signatureNormalize); - Nan::Export(target, "signatureExport", signatureExport); - Nan::Export(target, "signatureImport", signatureImport); - Nan::Export(target, "signatureImportLax", signatureImportLax); - - // ecdsa - Nan::Export(target, "sign", sign); - Nan::Export(target, "verify", verify); - Nan::Export(target, "recover", recover); - - // ecdh - Nan::Export(target, "ecdh", ecdh); - Nan::Export(target, "ecdhUnsafe", ecdhUnsafe); -} - -NODE_MODULE(secp256k1, Init) diff --git a/node_modules/secp256k1/src/ecdh.cc b/node_modules/secp256k1/src/ecdh.cc deleted file mode 100644 index 0bf4282..0000000 --- a/node_modules/secp256k1/src/ecdh.cc +++ /dev/null @@ -1,184 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "messages.h" -#include "util.h" - -extern secp256k1_context* secp256k1ctx; - -// from bitcoin/secp256k1 -#define ARG_CHECK(cond) do { \ - if (EXPECT(!(cond), 0)) { \ - secp256k1_callback_call(&ctx->illegal_callback, #cond); \ - return 0; \ - } \ -} while(0) - -static void default_illegal_callback_fn(const char* str, void* data) { - (void)data; - fprintf(stderr, "[libsecp256k1] illegal argument: %s\n", str); - abort(); -} - -static const secp256k1_callback default_illegal_callback = { - default_illegal_callback_fn, - NULL -}; - -static void default_error_callback_fn(const char* str, void* data) { - (void)data; - fprintf(stderr, "[libsecp256k1] internal consistency check failed: %s\n", str); - abort(); -} - -static const secp256k1_callback default_error_callback = { - default_error_callback_fn, - NULL -}; - -struct secp256k1_context_struct { - secp256k1_ecmult_context ecmult_ctx; - secp256k1_ecmult_gen_context ecmult_gen_ctx; - secp256k1_callback illegal_callback; - secp256k1_callback error_callback; -}; - -int secp256k1_pubkey_load(const secp256k1_context* ctx, secp256k1_ge* ge, const secp256k1_pubkey* pubkey) { - if (sizeof(secp256k1_ge_storage) == 64) { - /* When the secp256k1_ge_storage type is exactly 64 byte, use its - * representation inside secp256k1_pubkey, as conversion is very fast. - * Note that secp256k1_pubkey_save must use the same representation. */ - secp256k1_ge_storage s; - memcpy(&s, &pubkey->data[0], 64); - secp256k1_ge_from_storage(ge, &s); - } else { - /* Otherwise, fall back to 32-byte big endian for X and Y. */ - secp256k1_fe x, y; - secp256k1_fe_set_b32(&x, pubkey->data); - secp256k1_fe_set_b32(&y, pubkey->data + 32); - secp256k1_ge_set_xy(ge, &x, &y); - } - ARG_CHECK(!secp256k1_fe_is_zero(&ge->x)); - return 1; -} - -void secp256k1_pubkey_save(secp256k1_pubkey* pubkey, secp256k1_ge* ge) { - if (sizeof(secp256k1_ge_storage) == 64) { - secp256k1_ge_storage s; - secp256k1_ge_to_storage(&s, ge); - memcpy(&pubkey->data[0], &s, 64); - } else { - VERIFY_CHECK(!secp256k1_ge_is_infinity(ge)); - secp256k1_fe_normalize_var(&ge->x); - secp256k1_fe_normalize_var(&ge->y); - secp256k1_fe_get_b32(pubkey->data, &ge->x); - secp256k1_fe_get_b32(pubkey->data + 32, &ge->y); - } -} - -// bindings -NAN_METHOD(ecdh) { - Nan::HandleScope scope; - - v8::Local pubkey_buffer = info[0].As(); - CHECK_TYPE_BUFFER(pubkey_buffer, EC_PUBLIC_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH2(pubkey_buffer, 33, 65, EC_PUBLIC_KEY_LENGTH_INVALID); - const unsigned char* public_key_input = (unsigned char*) node::Buffer::Data(pubkey_buffer); - size_t public_key_input_length = node::Buffer::Length(pubkey_buffer); - - v8::Local private_key_buffer = info[1].As(); - CHECK_TYPE_BUFFER(private_key_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH(private_key_buffer, 32, EC_PRIVATE_KEY_LENGTH_INVALID); - const unsigned char* private_key = (const unsigned char*) node::Buffer::Data(private_key_buffer); - - secp256k1_pubkey public_key; - if (secp256k1_ec_pubkey_parse(secp256k1ctx, &public_key, public_key_input, public_key_input_length) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_PARSE_FAIL); - } - - secp256k1_scalar s; - int overflow = 0; - secp256k1_scalar_set_b32(&s, private_key, &overflow); - if (overflow || secp256k1_scalar_is_zero(&s)) { - secp256k1_scalar_clear(&s); - return Nan::ThrowError(ECDH_FAIL); - } - - secp256k1_ge pt; - secp256k1_gej res; - unsigned char y[1]; - unsigned char x[32]; - secp256k1_sha256_t sha; - unsigned char output[32]; - - secp256k1_pubkey_load(secp256k1ctx, &pt, &public_key); - secp256k1_ecmult_const(&res, &pt, &s); - secp256k1_scalar_clear(&s); - - secp256k1_ge_set_gej(&pt, &res); - secp256k1_fe_normalize(&pt.y); - secp256k1_fe_normalize(&pt.x); - - y[0] = 0x02 | secp256k1_fe_is_odd(&pt.y); - secp256k1_fe_get_b32(&x[0], &pt.x); - - secp256k1_sha256_initialize(&sha); - secp256k1_sha256_write(&sha, y, sizeof(y)); - secp256k1_sha256_write(&sha, x, sizeof(x)); - secp256k1_sha256_finalize(&sha, &output[0]); - - info.GetReturnValue().Set(COPY_BUFFER(&output[0], 32)); -} - -NAN_METHOD(ecdhUnsafe) { - Nan::HandleScope scope; - - v8::Local pubkey_buffer = info[0].As(); - CHECK_TYPE_BUFFER(pubkey_buffer, EC_PUBLIC_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH2(pubkey_buffer, 33, 65, EC_PUBLIC_KEY_LENGTH_INVALID); - const unsigned char* public_key_input = (unsigned char*) node::Buffer::Data(pubkey_buffer); - size_t public_key_input_length = node::Buffer::Length(pubkey_buffer); - - v8::Local private_key_buffer = info[1].As(); - CHECK_TYPE_BUFFER(private_key_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH(private_key_buffer, 32, EC_PRIVATE_KEY_LENGTH_INVALID); - const unsigned char* private_key = (const unsigned char*) node::Buffer::Data(private_key_buffer); - - secp256k1_pubkey public_key; - if (secp256k1_ec_pubkey_parse(secp256k1ctx, &public_key, public_key_input, public_key_input_length) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_PARSE_FAIL); - } - - unsigned int flags = SECP256K1_EC_COMPRESSED; - UPDATE_COMPRESSED_VALUE(flags, info[2], SECP256K1_EC_COMPRESSED, SECP256K1_EC_UNCOMPRESSED); - - secp256k1_scalar s; - int overflow = 0; - secp256k1_scalar_set_b32(&s, private_key, &overflow); - if (overflow || secp256k1_scalar_is_zero(&s)) { - secp256k1_scalar_clear(&s); - return Nan::ThrowError(ECDH_FAIL); - } - - secp256k1_ge pt; - secp256k1_gej res; - unsigned char output[65]; - size_t output_length = 65; - - secp256k1_pubkey_load(secp256k1ctx, &pt, &public_key); - secp256k1_ecmult_const(&res, &pt, &s); - secp256k1_scalar_clear(&s); - - secp256k1_ge_set_gej(&pt, &res); - secp256k1_pubkey_save(&public_key, &pt); - - secp256k1_ec_pubkey_serialize(secp256k1ctx, &output[0], &output_length, &public_key, flags); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], output_length)); -} diff --git a/node_modules/secp256k1/src/ecdh.h b/node_modules/secp256k1/src/ecdh.h deleted file mode 100644 index 86690c9..0000000 --- a/node_modules/secp256k1/src/ecdh.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _SECP256K1_NODE_ECDH_ -# define _SECP256K1_NODE_ECDH_ - -#include -#include - -NAN_METHOD(ecdh); -NAN_METHOD(ecdhUnsafe); - -#endif diff --git a/node_modules/secp256k1/src/ecdsa.cc b/node_modules/secp256k1/src/ecdsa.cc deleted file mode 100644 index 0bf3b43..0000000 --- a/node_modules/secp256k1/src/ecdsa.cc +++ /dev/null @@ -1,152 +0,0 @@ -#include -#include -#include -#include - -#include "messages.h" -#include "util.h" - -extern secp256k1_context* secp256k1ctx; - -v8::Local noncefn_callback; -int nonce_function_custom(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) { - v8::Local argv[] = { - COPY_BUFFER(msg32, 32), - COPY_BUFFER(key32, 32), - algo16 == NULL ? v8::Local(Nan::Null()) : v8::Local(COPY_BUFFER(algo16, 16)), - data == NULL ? v8::Local(Nan::Null()) : v8::Local(COPY_BUFFER(data, 32)), - Nan::New(counter) - }; - -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::Local result = noncefn_callback->Call(isolate->GetCurrentContext()->Global(), 5, argv); -#else - v8::Local result = noncefn_callback->Call(v8::Context::GetCurrent()->Global(), 5, argv); -#endif - - if (!node::Buffer::HasInstance(result) || node::Buffer::Length(result) != 32) { - return 0; - } - - memcpy(nonce32, node::Buffer::Data(result), 32); - return 1; -} - -NAN_METHOD(sign) { - Nan::HandleScope scope; - - v8::Local msg32_buffer = info[0].As(); - CHECK_TYPE_BUFFER(msg32_buffer, MSG32_TYPE_INVALID); - CHECK_BUFFER_LENGTH(msg32_buffer, 32, MSG32_LENGTH_INVALID); - const unsigned char* msg32 = (const unsigned char*) node::Buffer::Data(msg32_buffer); - - v8::Local private_buffer = info[1].As(); - CHECK_TYPE_BUFFER(private_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH(private_buffer, 32, EC_PRIVATE_KEY_LENGTH_INVALID); - const unsigned char* private_key = (const unsigned char*) node::Buffer::Data(private_buffer); - - secp256k1_nonce_function noncefn = secp256k1_nonce_function_rfc6979; - void* data = NULL; - v8::Local options = info[2].As(); - if (!options->IsUndefined()) { - CHECK_TYPE_OBJECT(options, OPTIONS_TYPE_INVALID); - - v8::Local data_value = options->Get(Nan::New("data").ToLocalChecked()); - if (!data_value->IsUndefined()) { - CHECK_TYPE_BUFFER(data_value, OPTIONS_DATA_TYPE_INVALID); - CHECK_BUFFER_LENGTH(data_value, 32, OPTIONS_DATA_LENGTH_INVALID); - data = (void*) node::Buffer::Data(data_value); - } - - noncefn_callback = v8::Local::Cast(options->Get(Nan::New("noncefn").ToLocalChecked())); - if (!noncefn_callback->IsUndefined()) { - CHECK_TYPE_FUNCTION(noncefn_callback, OPTIONS_NONCEFN_TYPE_INVALID); - noncefn = nonce_function_custom; - } - } - - secp256k1_ecdsa_recoverable_signature sig; - if (secp256k1_ecdsa_sign_recoverable(secp256k1ctx, &sig, msg32, private_key, noncefn, data) == 0) { - return Nan::ThrowError(ECDSA_SIGN_FAIL); - } - - unsigned char output[64]; - int recid; - secp256k1_ecdsa_recoverable_signature_serialize_compact(secp256k1ctx, &output[0], &recid, &sig); - - v8::Local obj = Nan::New(); - obj->Set(Nan::New("signature").ToLocalChecked(), COPY_BUFFER(&output[0], 64)); - obj->Set(Nan::New("recovery").ToLocalChecked(), Nan::New(recid)); - info.GetReturnValue().Set(obj); -} - -NAN_METHOD(verify) { - Nan::HandleScope scope; - - v8::Local msg32_buffer = info[0].As(); - CHECK_TYPE_BUFFER(msg32_buffer, MSG32_TYPE_INVALID); - CHECK_BUFFER_LENGTH(msg32_buffer, 32, MSG32_LENGTH_INVALID); - const unsigned char* msg32 = (const unsigned char*) node::Buffer::Data(msg32_buffer); - - v8::Local sig_input_buffer = info[1].As(); - CHECK_TYPE_BUFFER(sig_input_buffer, ECDSA_SIGNATURE_TYPE_INVALID); - CHECK_BUFFER_LENGTH(sig_input_buffer, 64, ECDSA_SIGNATURE_LENGTH_INVALID); - const unsigned char* sig_input = (unsigned char*) node::Buffer::Data(sig_input_buffer); - - v8::Local public_key_buffer = info[2].As(); - CHECK_TYPE_BUFFER(public_key_buffer, EC_PUBLIC_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH2(public_key_buffer, 33, 65, EC_PUBLIC_KEY_LENGTH_INVALID); - const unsigned char* public_key_input = (unsigned char*) node::Buffer::Data(public_key_buffer); - size_t public_key_input_length = node::Buffer::Length(public_key_buffer); - - secp256k1_ecdsa_signature sig; - if (secp256k1_ecdsa_signature_parse_compact(secp256k1ctx, &sig, sig_input) == 0) { - return Nan::ThrowError(ECDSA_SIGNATURE_PARSE_FAIL); - } - - secp256k1_pubkey public_key; - if (secp256k1_ec_pubkey_parse(secp256k1ctx, &public_key, public_key_input, public_key_input_length) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_PARSE_FAIL); - } - - int result = secp256k1_ecdsa_verify(secp256k1ctx, &sig, msg32, &public_key); - info.GetReturnValue().Set(Nan::New(result)); -} - -NAN_METHOD(recover) { - Nan::HandleScope scope; - - v8::Local msg32_buffer = info[0].As(); - CHECK_TYPE_BUFFER(msg32_buffer, MSG32_TYPE_INVALID); - CHECK_BUFFER_LENGTH(msg32_buffer, 32, MSG32_LENGTH_INVALID); - const unsigned char* msg32 = (const unsigned char*) node::Buffer::Data(msg32_buffer); - - v8::Local sig_input_buffer = info[1].As(); - CHECK_TYPE_BUFFER(sig_input_buffer, ECDSA_SIGNATURE_TYPE_INVALID); - CHECK_BUFFER_LENGTH(sig_input_buffer, 64, ECDSA_SIGNATURE_LENGTH_INVALID); - const unsigned char* sig_input = (unsigned char*) node::Buffer::Data(sig_input_buffer); - - v8::Local recid_object = info[2].As(); - CHECK_TYPE_NUMBER(recid_object, RECOVERY_ID_TYPE_INVALID); - CHECK_NUMBER_IN_INTERVAL(recid_object, -1, 4, RECOVERY_ID_VALUE_INVALID); - int recid = (int) recid_object->IntegerValue(); - - unsigned int flags = SECP256K1_EC_COMPRESSED; - UPDATE_COMPRESSED_VALUE(flags, info[3], SECP256K1_EC_COMPRESSED, SECP256K1_EC_UNCOMPRESSED); - - secp256k1_ecdsa_recoverable_signature sig; - if (secp256k1_ecdsa_recoverable_signature_parse_compact(secp256k1ctx, &sig, sig_input, recid) == 0) { - return Nan::ThrowError(ECDSA_SIGNATURE_PARSE_FAIL); - } - - secp256k1_pubkey public_key; - if (secp256k1_ecdsa_recover(secp256k1ctx, &public_key, &sig, msg32) == 0) { - return Nan::ThrowError(ECDSA_RECOVER_FAIL); - } - - unsigned char output[65]; - size_t output_length = 65; - secp256k1_ec_pubkey_serialize(secp256k1ctx, &output[0], &output_length, &public_key, flags); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], output_length)); -} diff --git a/node_modules/secp256k1/src/ecdsa.h b/node_modules/secp256k1/src/ecdsa.h deleted file mode 100644 index 1cbf80a..0000000 --- a/node_modules/secp256k1/src/ecdsa.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _SECP256K1_NODE_ECDSA_ -# define _SECP256K1_NODE_ECDSA_ - -#include -#include - -NAN_METHOD(sign); -NAN_METHOD(verify); -NAN_METHOD(recover); - -#endif diff --git a/node_modules/secp256k1/src/messages.h b/node_modules/secp256k1/src/messages.h deleted file mode 100644 index 8d1344a..0000000 --- a/node_modules/secp256k1/src/messages.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef _SECP256K1_NODE_MESSAGES_ -# define _SECP256K1_NODE_MESSAGES_ - -#define COMPRESSED_TYPE_INVALID "compressed should be a boolean" - -#define EC_PRIVATE_KEY_TYPE_INVALID "private key should be a Buffer" -#define EC_PRIVATE_KEY_LENGTH_INVALID "private key length is invalid" -#define EC_PRIVATE_KEY_TWEAK_ADD_FAIL "tweak out of range or resulting private key is invalid" -#define EC_PRIVATE_KEY_TWEAK_MUL_FAIL "tweak out of range" -#define EC_PRIVATE_KEY_EXPORT_DER_FAIL "couldn't export to DER format" -#define EC_PRIVATE_KEY_IMPORT_DER_FAIL "couldn't import from DER format" - -#define EC_PUBLIC_KEYS_TYPE_INVALID "public keys should be an Array" -#define EC_PUBLIC_KEYS_LENGTH_INVALID "public keys Array should have at least 1 element" -#define EC_PUBLIC_KEY_TYPE_INVALID "public key should be a Buffer" -#define EC_PUBLIC_KEY_LENGTH_INVALID "public key length is invalid" -#define EC_PUBLIC_KEY_PARSE_FAIL "the public key could not be parsed or is invalid" -#define EC_PUBLIC_KEY_CREATE_FAIL "private was invalid, try again" -#define EC_PUBLIC_KEY_TWEAK_ADD_FAIL "tweak out of range or resulting public key is invalid" -#define EC_PUBLIC_KEY_TWEAK_MUL_FAIL "tweak out of range" -#define EC_PUBLIC_KEY_COMBINE_FAIL "the sum of the public keys is not valid" - -#define ECDH_FAIL "scalar was invalid (zero or overflow)" - -#define ECDSA_SIGNATURE_TYPE_INVALID "signature should be a Buffer" -#define ECDSA_SIGNATURE_LENGTH_INVALID "signature length is invalid" -#define ECDSA_SIGNATURE_PARSE_FAIL "couldn't parse signature" -#define ECDSA_SIGNATURE_PARSE_DER_FAIL "couldn't parse DER signature" -#define ECDSA_SIGNATURE_SERIALIZE_DER_FAIL "couldn't serialize signature to DER format" - -#define ECDSA_SIGN_FAIL "nonce generation function failed or private key is invalid" -#define ECDSA_RECOVER_FAIL "couldn't recover public key from signature" - -#define MSG32_TYPE_INVALID "message should be a Buffer" -#define MSG32_LENGTH_INVALID "message length is invalid" - -#define OPTIONS_TYPE_INVALID "options should be an Object" -#define OPTIONS_DATA_TYPE_INVALID "options.data should be a Buffer" -#define OPTIONS_DATA_LENGTH_INVALID "options.data length is invalid" -#define OPTIONS_NONCEFN_TYPE_INVALID "options.noncefn should be a Function" - -#define RECOVERY_ID_TYPE_INVALID "recovery should be a Number" -#define RECOVERY_ID_VALUE_INVALID "recovery should have value between -1 and 4" - -#define TWEAK_TYPE_INVALID "tweak should be a Buffer" -#define TWEAK_LENGTH_INVALID "tweak length is invalid" - -#endif diff --git a/node_modules/secp256k1/src/privatekey.cc b/node_modules/secp256k1/src/privatekey.cc deleted file mode 100644 index 70512d4..0000000 --- a/node_modules/secp256k1/src/privatekey.cc +++ /dev/null @@ -1,103 +0,0 @@ -#include -#include -#include -#include - -#include "messages.h" -#include "util.h" - -extern secp256k1_context* secp256k1ctx; - -NAN_METHOD(privateKeyVerify) { - Nan::HandleScope scope; - - v8::Local private_key_buffer = info[0].As(); - CHECK_TYPE_BUFFER(private_key_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - const unsigned char* private_key = (const unsigned char*) node::Buffer::Data(private_key_buffer); - - if (node::Buffer::Length(private_key_buffer) != 32) { - return info.GetReturnValue().Set(Nan::New(false)); - } - - int result = secp256k1_ec_seckey_verify(secp256k1ctx, private_key); - info.GetReturnValue().Set(Nan::New(result)); -} - -NAN_METHOD(privateKeyExport) { - Nan::HandleScope scope; - - v8::Local private_key_buffer = info[0].As(); - CHECK_TYPE_BUFFER(private_key_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH(private_key_buffer, 32, EC_PRIVATE_KEY_LENGTH_INVALID); - const unsigned char* private_key = (const unsigned char*) node::Buffer::Data(private_key_buffer); - - int compressed = 1; - UPDATE_COMPRESSED_VALUE(compressed, info[1], 1, 0); - - unsigned char output[279]; - size_t output_length; - if (ec_privkey_export_der(secp256k1ctx, &output[0], &output_length, private_key, compressed) == 0) { - return Nan::ThrowError(EC_PRIVATE_KEY_EXPORT_DER_FAIL); - } - - info.GetReturnValue().Set(COPY_BUFFER(output, output_length)); -} - -NAN_METHOD(privateKeyImport) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH_GT_ZERO(input_buffer, EC_PRIVATE_KEY_LENGTH_INVALID); - const unsigned char* input = (const unsigned char*) node::Buffer::Data(input_buffer); - size_t input_length = node::Buffer::Length(input_buffer); - - unsigned char private_key[32]; - if (ec_privkey_import_der(secp256k1ctx, &private_key[0], input, input_length) == 0) { - return Nan::ThrowError(EC_PRIVATE_KEY_IMPORT_DER_FAIL); - } - - info.GetReturnValue().Set(COPY_BUFFER(private_key, 32)); -} - -NAN_METHOD(privateKeyTweakAdd) { - Nan::HandleScope scope; - - v8::Local private_key_buffer = info[0].As(); - CHECK_TYPE_BUFFER(private_key_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH(private_key_buffer, 32, EC_PRIVATE_KEY_LENGTH_INVALID); - unsigned char private_key[32]; - memcpy(&private_key[0], node::Buffer::Data(private_key_buffer), 32); - - v8::Local tweak_buffer = info[1].As(); - CHECK_TYPE_BUFFER(tweak_buffer, TWEAK_TYPE_INVALID); - CHECK_BUFFER_LENGTH(tweak_buffer, 32, TWEAK_LENGTH_INVALID); - const unsigned char* tweak = (unsigned char *) node::Buffer::Data(tweak_buffer); - - if (secp256k1_ec_privkey_tweak_add(secp256k1ctx, &private_key[0], tweak) == 0) { - return Nan::ThrowError(EC_PRIVATE_KEY_TWEAK_ADD_FAIL); - } - - info.GetReturnValue().Set(COPY_BUFFER(&private_key[0], 32)); -} - -NAN_METHOD(privateKeyTweakMul) { - Nan::HandleScope scope; - - v8::Local private_key_buffer = info[0].As(); - CHECK_TYPE_BUFFER(private_key_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH(private_key_buffer, 32, EC_PRIVATE_KEY_LENGTH_INVALID); - unsigned char private_key[32]; - memcpy(&private_key[0], node::Buffer::Data(private_key_buffer), 32); - - v8::Local tweak_buffer = info[1].As(); - CHECK_TYPE_BUFFER(tweak_buffer, TWEAK_TYPE_INVALID); - CHECK_BUFFER_LENGTH(tweak_buffer, 32, TWEAK_LENGTH_INVALID); - const unsigned char* tweak = (unsigned char *) node::Buffer::Data(tweak_buffer); - - if (secp256k1_ec_privkey_tweak_mul(secp256k1ctx, &private_key[0], tweak) == 0) { - return Nan::ThrowError(EC_PRIVATE_KEY_TWEAK_MUL_FAIL); - } - - info.GetReturnValue().Set(COPY_BUFFER(&private_key[0], 32)); -} diff --git a/node_modules/secp256k1/src/privatekey.h b/node_modules/secp256k1/src/privatekey.h deleted file mode 100644 index 76c744d..0000000 --- a/node_modules/secp256k1/src/privatekey.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _SECP256K1_NODE_PRIVATEKEY_ -# define _SECP256K1_NODE_PRIVATEKEY_ - -#include -#include - -NAN_METHOD(privateKeyVerify); -NAN_METHOD(privateKeyExport); -NAN_METHOD(privateKeyImport); -NAN_METHOD(privateKeyTweakAdd); -NAN_METHOD(privateKeyTweakMul); - -#endif diff --git a/node_modules/secp256k1/src/publickey.cc b/node_modules/secp256k1/src/publickey.cc deleted file mode 100644 index 1f7c46c..0000000 --- a/node_modules/secp256k1/src/publickey.cc +++ /dev/null @@ -1,168 +0,0 @@ -#include -#include -#include -#include - -#include "messages.h" -#include "util.h" - -extern secp256k1_context* secp256k1ctx; - -NAN_METHOD(publicKeyCreate) { - Nan::HandleScope scope; - - v8::Local private_key_buffer = info[0].As(); - CHECK_TYPE_BUFFER(private_key_buffer, EC_PRIVATE_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH(private_key_buffer, 32, EC_PRIVATE_KEY_LENGTH_INVALID); - const unsigned char* private_key = (const unsigned char*) node::Buffer::Data(private_key_buffer); - - unsigned int flags = SECP256K1_EC_COMPRESSED; - UPDATE_COMPRESSED_VALUE(flags, info[1], SECP256K1_EC_COMPRESSED, SECP256K1_EC_UNCOMPRESSED); - - secp256k1_pubkey public_key; - if (secp256k1_ec_pubkey_create(secp256k1ctx, &public_key, private_key) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_CREATE_FAIL); - } - - unsigned char output[65]; - size_t output_length = 65; - secp256k1_ec_pubkey_serialize(secp256k1ctx, &output[0], &output_length, &public_key, flags); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], output_length)); -} - -NAN_METHOD(publicKeyConvert) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, EC_PUBLIC_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH2(input_buffer, 33, 65, EC_PUBLIC_KEY_LENGTH_INVALID); - const unsigned char* input = (unsigned char*) node::Buffer::Data(input_buffer); - size_t input_length = node::Buffer::Length(input_buffer); - - unsigned int flags = SECP256K1_EC_COMPRESSED; - UPDATE_COMPRESSED_VALUE(flags, info[1], SECP256K1_EC_COMPRESSED, SECP256K1_EC_UNCOMPRESSED); - - secp256k1_pubkey public_key; - if (secp256k1_ec_pubkey_parse(secp256k1ctx, &public_key, input, input_length) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_PARSE_FAIL); - } - - unsigned char output[65]; - size_t output_length = 65; - secp256k1_ec_pubkey_serialize(secp256k1ctx, &output[0], &output_length, &public_key, flags); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], output_length)); -} - -NAN_METHOD(publicKeyVerify) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, EC_PUBLIC_KEY_TYPE_INVALID); - const unsigned char* input = (unsigned char*) node::Buffer::Data(input_buffer); - size_t input_length = node::Buffer::Length(input_buffer); - - secp256k1_pubkey public_key; - int result = secp256k1_ec_pubkey_parse(secp256k1ctx, &public_key, input, input_length); - info.GetReturnValue().Set(Nan::New(result)); -} - -NAN_METHOD(publicKeyTweakAdd) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, EC_PUBLIC_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH2(input_buffer, 33, 65, EC_PUBLIC_KEY_LENGTH_INVALID); - const unsigned char* input = (unsigned char*) node::Buffer::Data(input_buffer); - size_t input_length = node::Buffer::Length(input_buffer); - - v8::Local tweak_buffer = info[1].As(); - CHECK_TYPE_BUFFER(tweak_buffer, TWEAK_TYPE_INVALID); - CHECK_BUFFER_LENGTH(tweak_buffer, 32, TWEAK_LENGTH_INVALID); - const unsigned char* tweak = (const unsigned char *) node::Buffer::Data(tweak_buffer); - - unsigned int flags = SECP256K1_EC_COMPRESSED; - UPDATE_COMPRESSED_VALUE(flags, info[2], SECP256K1_EC_COMPRESSED, SECP256K1_EC_UNCOMPRESSED); - - secp256k1_pubkey public_key; - if (secp256k1_ec_pubkey_parse(secp256k1ctx, &public_key, input, input_length) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_PARSE_FAIL); - } - - if (secp256k1_ec_pubkey_tweak_add(secp256k1ctx, &public_key, tweak) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_TWEAK_ADD_FAIL); - } - - unsigned char output[65]; - size_t output_length = 65; - secp256k1_ec_pubkey_serialize(secp256k1ctx, &output[0], &output_length, &public_key, flags); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], output_length)); -} - -NAN_METHOD(publicKeyTweakMul) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, EC_PUBLIC_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH2(input_buffer, 33, 65, EC_PUBLIC_KEY_LENGTH_INVALID); - const unsigned char* input = (unsigned char*) node::Buffer::Data(input_buffer); - size_t input_length = node::Buffer::Length(input_buffer); - - v8::Local tweak_buffer = info[1].As(); - CHECK_TYPE_BUFFER(tweak_buffer, TWEAK_TYPE_INVALID); - CHECK_BUFFER_LENGTH(tweak_buffer, 32, TWEAK_LENGTH_INVALID); - const unsigned char* tweak = (const unsigned char *) node::Buffer::Data(tweak_buffer); - - unsigned int flags = SECP256K1_EC_COMPRESSED; - UPDATE_COMPRESSED_VALUE(flags, info[2], SECP256K1_EC_COMPRESSED, SECP256K1_EC_UNCOMPRESSED); - - secp256k1_pubkey public_key; - if (secp256k1_ec_pubkey_parse(secp256k1ctx, &public_key, input, input_length) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_PARSE_FAIL); - } - - if (secp256k1_ec_pubkey_tweak_mul(secp256k1ctx, &public_key, tweak) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_TWEAK_MUL_FAIL); - } - - unsigned char output[65]; - size_t output_length = 65; - secp256k1_ec_pubkey_serialize(secp256k1ctx, &output[0], &output_length, &public_key, flags); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], output_length)); -} - -NAN_METHOD(publicKeyCombine) { - Nan::HandleScope scope; - - v8::Local input_buffers = info[0].As(); - CHECK_TYPE_ARRAY(input_buffers, EC_PUBLIC_KEYS_TYPE_INVALID); - CHECK_LENGTH_GT_ZERO(input_buffers, EC_PUBLIC_KEYS_LENGTH_INVALID); - - unsigned int flags = SECP256K1_EC_COMPRESSED; - UPDATE_COMPRESSED_VALUE(flags, info[1], SECP256K1_EC_COMPRESSED, SECP256K1_EC_UNCOMPRESSED); - - std::unique_ptr public_keys(new secp256k1_pubkey[input_buffers->Length()]); - std::unique_ptr ins(new secp256k1_pubkey*[input_buffers->Length()]); - for (unsigned int i = 0; i < input_buffers->Length(); ++i) { - v8::Local public_key_buffer = v8::Local::Cast(input_buffers->Get(i)); - CHECK_TYPE_BUFFER(public_key_buffer, EC_PUBLIC_KEY_TYPE_INVALID); - CHECK_BUFFER_LENGTH2(public_key_buffer, 33, 65, EC_PUBLIC_KEY_LENGTH_INVALID); - - const unsigned char* input = (unsigned char*) node::Buffer::Data(public_key_buffer); - size_t input_length = node::Buffer::Length(public_key_buffer); - if (secp256k1_ec_pubkey_parse(secp256k1ctx, &public_keys[i], input, input_length) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_PARSE_FAIL); - } - - ins[i] = &public_keys[i]; - } - - secp256k1_pubkey public_key; - if (secp256k1_ec_pubkey_combine(secp256k1ctx, &public_key, ins.get(), input_buffers->Length()) == 0) { - return Nan::ThrowError(EC_PUBLIC_KEY_COMBINE_FAIL); - } - - unsigned char output[65]; - size_t output_length = 65; - secp256k1_ec_pubkey_serialize(secp256k1ctx, &output[0], &output_length, &public_key, flags); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], output_length)); -} diff --git a/node_modules/secp256k1/src/publickey.h b/node_modules/secp256k1/src/publickey.h deleted file mode 100644 index 97ad04f..0000000 --- a/node_modules/secp256k1/src/publickey.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _SECP256K1_NODE_PUBLICKEY_ -# define _SECP256K1_NODE_PUBLICKEY_ - -#include -#include - -NAN_METHOD(publicKeyCreate); -NAN_METHOD(publicKeyConvert); -NAN_METHOD(publicKeyVerify); -NAN_METHOD(publicKeyTweakAdd); -NAN_METHOD(publicKeyTweakMul); -NAN_METHOD(publicKeyCombine); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/.npmignore b/node_modules/secp256k1/src/secp256k1-src/.npmignore deleted file mode 100644 index efb277d..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/.npmignore +++ /dev/null @@ -1,48 +0,0 @@ -bench_inv -bench_ecdh -bench_sign -bench_verify -bench_schnorr_verify -bench_recover -bench_internal -tests -gen_context -*.exe -*.so -*.a -!.gitignore - -Makefile -configure -.libs/ -Makefile.in -aclocal.m4 -autom4te.cache/ -config.log -config.status -*.tar.gz -*.la -libtool -.deps/ -.dirstamp -*.lo -*.o -*~ -src/libsecp256k1-config.h -src/libsecp256k1-config.h.in -src/ecmult_static_context.h -build-aux/config.guess -build-aux/config.sub -build-aux/depcomp -build-aux/install-sh -build-aux/ltmain.sh -build-aux/m4/libtool.m4 -build-aux/m4/lt~obsolete.m4 -build-aux/m4/ltoptions.m4 -build-aux/m4/ltsugar.m4 -build-aux/m4/ltversion.m4 -build-aux/missing -build-aux/compile -build-aux/test-driver -src/stamp-h1 -libsecp256k1.pc diff --git a/node_modules/secp256k1/src/secp256k1-src/.travis.yml b/node_modules/secp256k1/src/secp256k1-src/.travis.yml deleted file mode 100644 index 2c5c63a..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/.travis.yml +++ /dev/null @@ -1,70 +0,0 @@ -language: c -sudo: false -addons: - apt: - packages: libgmp-dev -compiler: - - clang - - gcc -cache: - directories: - - src/java/guava/ -env: - global: - - FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no schnorr=no RECOVERY=no EXPERIMENTAL=no - - GUAVA_URL=https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar GUAVA_JAR=src/java/guava/guava-18.0.jar - matrix: - - SCALAR=32bit RECOVERY=yes - - SCALAR=32bit FIELD=32bit ECDH=yes EXPERIMENTAL=yes - - SCALAR=64bit - - FIELD=64bit RECOVERY=yes - - FIELD=64bit ENDOMORPHISM=yes - - FIELD=64bit ENDOMORPHISM=yes ECDH=yes EXPERIMENTAL=yes - - FIELD=64bit ASM=x86_64 - - FIELD=64bit ENDOMORPHISM=yes ASM=x86_64 - - FIELD=32bit SCHNORR=yes EXPERIMENTAL=yes - - FIELD=32bit ENDOMORPHISM=yes - - BIGNUM=no - - BIGNUM=no ENDOMORPHISM=yes SCHNORR=yes RECOVERY=yes EXPERIMENTAL=yes - - BIGNUM=no STATICPRECOMPUTATION=no - - BUILD=distcheck - - EXTRAFLAGS=CPPFLAGS=-DDETERMINISTIC - - EXTRAFLAGS=CFLAGS=-O0 - - BUILD=check-java ECDH=yes SCHNORR=yes EXPERIMENTAL=yes -matrix: - fast_finish: true - include: - - compiler: clang - env: HOST=i686-linux-gnu ENDOMORPHISM=yes - addons: - apt: - packages: - - gcc-multilib - - libgmp-dev:i386 - - compiler: clang - env: HOST=i686-linux-gnu - addons: - apt: - packages: - - gcc-multilib - - compiler: gcc - env: HOST=i686-linux-gnu ENDOMORPHISM=yes - addons: - apt: - packages: - - gcc-multilib - - compiler: gcc - env: HOST=i686-linux-gnu - addons: - apt: - packages: - - gcc-multilib - - libgmp-dev:i386 -before_install: mkdir -p `dirname $GUAVA_JAR` -install: if [ ! -f $GUAVA_JAR ]; then wget $GUAVA_URL -O $GUAVA_JAR; fi -before_script: ./autogen.sh -script: - - if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi - - if [ "x$HOST" = "xi686-linux-gnu" ]; then export CC="$CC -m32"; fi - - ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --enable-module-ecdh=$ECDH --enable-module-schnorr=$SCHNORR --enable-module-recovery=$RECOVERY $EXTRAFLAGS $USE_HOST && make -j2 $BUILD -os: linux diff --git a/node_modules/secp256k1/src/secp256k1-src/COPYING b/node_modules/secp256k1/src/secp256k1-src/COPYING deleted file mode 100644 index 4522a59..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/COPYING +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013 Pieter Wuille - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/secp256k1/src/secp256k1-src/Makefile.am b/node_modules/secp256k1/src/secp256k1-src/Makefile.am deleted file mode 100644 index 3d130bd..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/Makefile.am +++ /dev/null @@ -1,163 +0,0 @@ -ACLOCAL_AMFLAGS = -I build-aux/m4 - -lib_LTLIBRARIES = libsecp256k1.la -if USE_JNI -JNI_LIB = libsecp256k1_jni.la -noinst_LTLIBRARIES = $(JNI_LIB) -else -JNI_LIB = -endif -include_HEADERS = include/secp256k1.h -noinst_HEADERS = -noinst_HEADERS += src/scalar.h -noinst_HEADERS += src/scalar_4x64.h -noinst_HEADERS += src/scalar_8x32.h -noinst_HEADERS += src/scalar_impl.h -noinst_HEADERS += src/scalar_4x64_impl.h -noinst_HEADERS += src/scalar_8x32_impl.h -noinst_HEADERS += src/group.h -noinst_HEADERS += src/group_impl.h -noinst_HEADERS += src/num_gmp.h -noinst_HEADERS += src/num_gmp_impl.h -noinst_HEADERS += src/ecdsa.h -noinst_HEADERS += src/ecdsa_impl.h -noinst_HEADERS += src/eckey.h -noinst_HEADERS += src/eckey_impl.h -noinst_HEADERS += src/ecmult.h -noinst_HEADERS += src/ecmult_impl.h -noinst_HEADERS += src/ecmult_const.h -noinst_HEADERS += src/ecmult_const_impl.h -noinst_HEADERS += src/ecmult_gen.h -noinst_HEADERS += src/ecmult_gen_impl.h -noinst_HEADERS += src/num.h -noinst_HEADERS += src/num_impl.h -noinst_HEADERS += src/field_10x26.h -noinst_HEADERS += src/field_10x26_impl.h -noinst_HEADERS += src/field_5x52.h -noinst_HEADERS += src/field_5x52_impl.h -noinst_HEADERS += src/field_5x52_int128_impl.h -noinst_HEADERS += src/field_5x52_asm_impl.h -noinst_HEADERS += src/java/org_bitcoin_NativeSecp256k1.h -noinst_HEADERS += src/java/org_bitcoin_Secp256k1Context.h -noinst_HEADERS += src/util.h -noinst_HEADERS += src/testrand.h -noinst_HEADERS += src/testrand_impl.h -noinst_HEADERS += src/hash.h -noinst_HEADERS += src/hash_impl.h -noinst_HEADERS += src/field.h -noinst_HEADERS += src/field_impl.h -noinst_HEADERS += src/bench.h -noinst_HEADERS += contrib/lax_der_parsing.h -noinst_HEADERS += contrib/lax_der_parsing.c -noinst_HEADERS += contrib/lax_der_privatekey_parsing.h -noinst_HEADERS += contrib/lax_der_privatekey_parsing.c - -if USE_EXTERNAL_ASM -COMMON_LIB = libsecp256k1_common.la -noinst_LTLIBRARIES = $(COMMON_LIB) -else -COMMON_LIB = -endif - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libsecp256k1.pc - -if USE_EXTERNAL_ASM -if USE_ASM_ARM -libsecp256k1_common_la_SOURCES = src/asm/field_10x26_arm.s -endif -endif - -libsecp256k1_la_SOURCES = src/secp256k1.c -libsecp256k1_la_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/include -I$(top_srcdir)/src $(SECP_INCLUDES) -libsecp256k1_la_LIBADD = $(JNI_LIB) $(SECP_LIBS) $(COMMON_LIB) - -libsecp256k1_jni_la_SOURCES = src/java/org_bitcoin_NativeSecp256k1.c src/java/org_bitcoin_Secp256k1Context.c -libsecp256k1_jni_la_CPPFLAGS = -DSECP256K1_BUILD $(JNI_INCLUDES) - -noinst_PROGRAMS = -if USE_BENCHMARK -noinst_PROGRAMS += bench_verify bench_sign bench_internal -bench_verify_SOURCES = src/bench_verify.c -bench_verify_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB) -bench_sign_SOURCES = src/bench_sign.c -bench_sign_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB) -bench_internal_SOURCES = src/bench_internal.c -bench_internal_LDADD = $(SECP_LIBS) $(COMMON_LIB) -bench_internal_CPPFLAGS = -DSECP256K1_BUILD $(SECP_INCLUDES) -endif - -if USE_TESTS -noinst_PROGRAMS += tests -tests_SOURCES = src/tests.c -tests_CPPFLAGS = -DSECP256K1_BUILD -DVERIFY -I$(top_srcdir)/src -I$(top_srcdir)/include $(SECP_INCLUDES) $(SECP_TEST_INCLUDES) -tests_LDADD = $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB) -tests_LDFLAGS = -static -TESTS = tests -endif - -JAVAROOT=src/java -JAVAORG=org/bitcoin -JAVA_GUAVA=$(srcdir)/$(JAVAROOT)/guava/guava-18.0.jar -CLASSPATH_ENV=CLASSPATH=$(JAVA_GUAVA) -JAVA_FILES= \ - $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1.java \ - $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Test.java \ - $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Util.java \ - $(JAVAROOT)/$(JAVAORG)/Secp256k1Context.java - -if USE_JNI - -$(JAVA_GUAVA): - @echo Guava is missing. Fetch it via: \ - wget https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar -O $(@) - @false - -.stamp-java: $(JAVA_FILES) - @echo Compiling $^ - $(AM_V_at)$(CLASSPATH_ENV) javac $^ - @touch $@ - -if USE_TESTS - -check-java: libsecp256k1.la $(JAVA_GUAVA) .stamp-java - $(AM_V_at)java -Djava.library.path="./:./src:./src/.libs:.libs/" -cp "$(JAVA_GUAVA):$(JAVAROOT)" $(JAVAORG)/NativeSecp256k1Test - -endif -endif - -if USE_ECMULT_STATIC_PRECOMPUTATION -CPPFLAGS_FOR_BUILD +=-I$(top_srcdir) -CFLAGS_FOR_BUILD += -Wall -Wextra -Wno-unused-function - -gen_context_OBJECTS = gen_context.o -gen_context_BIN = gen_context$(BUILD_EXEEXT) -gen_%.o: src/gen_%.c - $(CC_FOR_BUILD) $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -c $< -o $@ - -$(gen_context_BIN): $(gen_context_OBJECTS) - $(CC_FOR_BUILD) $^ -o $@ - -$(libsecp256k1_la_OBJECTS): src/ecmult_static_context.h -$(tests_OBJECTS): src/ecmult_static_context.h -$(bench_internal_OBJECTS): src/ecmult_static_context.h - -src/ecmult_static_context.h: $(gen_context_BIN) - ./$(gen_context_BIN) - -CLEANFILES = $(gen_context_BIN) src/ecmult_static_context.h $(JAVAROOT)/$(JAVAORG)/*.class .stamp-java -endif - -EXTRA_DIST = autogen.sh src/gen_context.c src/basic-config.h $(JAVA_FILES) - -if ENABLE_MODULE_ECDH -include src/modules/ecdh/Makefile.am.include -endif - -if ENABLE_MODULE_SCHNORR -include src/modules/schnorr/Makefile.am.include -endif - -if ENABLE_MODULE_RECOVERY -include src/modules/recovery/Makefile.am.include -endif diff --git a/node_modules/secp256k1/src/secp256k1-src/README.md b/node_modules/secp256k1/src/secp256k1-src/README.md deleted file mode 100644 index 8cd344e..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/README.md +++ /dev/null @@ -1,61 +0,0 @@ -libsecp256k1 -============ - -[![Build Status](https://travis-ci.org/bitcoin-core/secp256k1.svg?branch=master)](https://travis-ci.org/bitcoin-core/secp256k1) - -Optimized C library for EC operations on curve secp256k1. - -This library is a work in progress and is being used to research best practices. Use at your own risk. - -Features: -* secp256k1 ECDSA signing/verification and key generation. -* Adding/multiplying private/public keys. -* Serialization/parsing of private keys, public keys, signatures. -* Constant time, constant memory access signing and pubkey generation. -* Derandomized DSA (via RFC6979 or with a caller provided function.) -* Very efficient implementation. - -Implementation details ----------------------- - -* General - * No runtime heap allocation. - * Extensive testing infrastructure. - * Structured to facilitate review and analysis. - * Intended to be portable to any system with a C89 compiler and uint64_t support. - * Expose only higher level interfaces to minimize the API surface and improve application security. ("Be difficult to use insecurely.") -* Field operations - * Optimized implementation of arithmetic modulo the curve's field size (2^256 - 0x1000003D1). - * Using 5 52-bit limbs (including hand-optimized assembly for x86_64, by Diederik Huys). - * Using 10 26-bit limbs. - * Field inverses and square roots using a sliding window over blocks of 1s (by Peter Dettman). -* Scalar operations - * Optimized implementation without data-dependent branches of arithmetic modulo the curve's order. - * Using 4 64-bit limbs (relying on __int128 support in the compiler). - * Using 8 32-bit limbs. -* Group operations - * Point addition formula specifically simplified for the curve equation (y^2 = x^3 + 7). - * Use addition between points in Jacobian and affine coordinates where possible. - * Use a unified addition/doubling formula where necessary to avoid data-dependent branches. - * Point/x comparison without a field inversion by comparison in the Jacobian coordinate space. -* Point multiplication for verification (a*P + b*G). - * Use wNAF notation for point multiplicands. - * Use a much larger window for multiples of G, using precomputed multiples. - * Use Shamir's trick to do the multiplication with the public key and the generator simultaneously. - * Optionally (off by default) use secp256k1's efficiently-computable endomorphism to split the P multiplicand into 2 half-sized ones. -* Point multiplication for signing - * Use a precomputed table of multiples of powers of 16 multiplied with the generator, so general multiplication becomes a series of additions. - * Access the table with branch-free conditional moves so memory access is uniform. - * No data-dependent branches - * The precomputed tables add and eventually subtract points for which no known scalar (private key) is known, preventing even an attacker with control over the private key used to control the data internally. - -Build steps ------------ - -libsecp256k1 is built using autotools: - - $ ./autogen.sh - $ ./configure - $ make - $ ./tests - $ sudo make install # optional diff --git a/node_modules/secp256k1/src/secp256k1-src/TODO b/node_modules/secp256k1/src/secp256k1-src/TODO deleted file mode 100644 index a300e1c..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/TODO +++ /dev/null @@ -1,3 +0,0 @@ -* Unit tests for fieldelem/groupelem, including ones intended to - trigger fieldelem's boundary cases. -* Complete constant-time operations for signing/keygen diff --git a/node_modules/secp256k1/src/secp256k1-src/autogen.sh b/node_modules/secp256k1/src/secp256k1-src/autogen.sh deleted file mode 100755 index 65286b9..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/autogen.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -e -autoreconf -if --warnings=all diff --git a/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/ax_jni_include_dir.m4 b/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/ax_jni_include_dir.m4 deleted file mode 100644 index 1fc3627..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/ax_jni_include_dir.m4 +++ /dev/null @@ -1,140 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_JNI_INCLUDE_DIR -# -# DESCRIPTION -# -# AX_JNI_INCLUDE_DIR finds include directories needed for compiling -# programs using the JNI interface. -# -# JNI include directories are usually in the Java distribution. This is -# deduced from the value of $JAVA_HOME, $JAVAC, or the path to "javac", in -# that order. When this macro completes, a list of directories is left in -# the variable JNI_INCLUDE_DIRS. -# -# Example usage follows: -# -# AX_JNI_INCLUDE_DIR -# -# for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS -# do -# CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR" -# done -# -# If you want to force a specific compiler: -# -# - at the configure.in level, set JAVAC=yourcompiler before calling -# AX_JNI_INCLUDE_DIR -# -# - at the configure level, setenv JAVAC -# -# Note: This macro can work with the autoconf M4 macros for Java programs. -# This particular macro is not part of the original set of macros. -# -# LICENSE -# -# Copyright (c) 2008 Don Anderson -# -# Copying and distribution of this file, with or without modification, are -# permitted in any medium without royalty provided the copyright notice -# and this notice are preserved. This file is offered as-is, without any -# warranty. - -#serial 10 - -AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR]) -AC_DEFUN([AX_JNI_INCLUDE_DIR],[ - -JNI_INCLUDE_DIRS="" - -if test "x$JAVA_HOME" != x; then - _JTOPDIR="$JAVA_HOME" -else - if test "x$JAVAC" = x; then - JAVAC=javac - fi - AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no]) - if test "x$_ACJNI_JAVAC" = xno; then - AC_MSG_WARN([cannot find JDK; try setting \$JAVAC or \$JAVA_HOME]) - fi - _ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC") - _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'` -fi - -case "$host_os" in - darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` - _JINC="$_JTOPDIR/Headers";; - *) _JINC="$_JTOPDIR/include";; -esac -_AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR]) -_AS_ECHO_LOG([_JINC=$_JINC]) - -# On Mac OS X 10.6.4, jni.h is a symlink: -# /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h -# -> ../../CurrentJDK/Headers/jni.h. - -AC_CACHE_CHECK(jni headers, ac_cv_jni_header_path, -[ -if test -f "$_JINC/jni.h"; then - ac_cv_jni_header_path="$_JINC" - JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path" -else - _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` - if test -f "$_JTOPDIR/include/jni.h"; then - ac_cv_jni_header_path="$_JTOPDIR/include" - JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path" - else - ac_cv_jni_header_path=none - fi -fi -]) - - - -# get the likely subdirectories for system specific java includes -case "$host_os" in -bsdi*) _JNI_INC_SUBDIRS="bsdos";; -darwin*) _JNI_INC_SUBDIRS="darwin";; -freebsd*) _JNI_INC_SUBDIRS="freebsd";; -linux*) _JNI_INC_SUBDIRS="linux genunix";; -osf*) _JNI_INC_SUBDIRS="alpha";; -solaris*) _JNI_INC_SUBDIRS="solaris";; -mingw*) _JNI_INC_SUBDIRS="win32";; -cygwin*) _JNI_INC_SUBDIRS="win32";; -*) _JNI_INC_SUBDIRS="genunix";; -esac - -if test "x$ac_cv_jni_header_path" != "xnone"; then - # add any subdirectories that are present - for JINCSUBDIR in $_JNI_INC_SUBDIRS - do - if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then - JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR" - fi - done -fi -]) - -# _ACJNI_FOLLOW_SYMLINKS -# Follows symbolic links on , -# finally setting variable _ACJNI_FOLLOWED -# ---------------------------------------- -AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[ -# find the include directory relative to the javac executable -_cur="$1" -while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do - AC_MSG_CHECKING([symlink for $_cur]) - _slink=`ls -ld "$_cur" | sed 's/.* -> //'` - case "$_slink" in - /*) _cur="$_slink";; - # 'X' avoids triggering unwanted echo options. - *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";; - esac - AC_MSG_RESULT([$_cur]) -done -_ACJNI_FOLLOWED="$_cur" -])# _ACJNI diff --git a/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/ax_prog_cc_for_build.m4 b/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/ax_prog_cc_for_build.m4 deleted file mode 100644 index 77fd346..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/ax_prog_cc_for_build.m4 +++ /dev/null @@ -1,125 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_PROG_CC_FOR_BUILD -# -# DESCRIPTION -# -# This macro searches for a C compiler that generates native executables, -# that is a C compiler that surely is not a cross-compiler. This can be -# useful if you have to generate source code at compile-time like for -# example GCC does. -# -# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything -# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD). -# The value of these variables can be overridden by the user by specifying -# a compiler with an environment variable (like you do for standard CC). -# -# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object -# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if -# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are -# substituted in the Makefile. -# -# LICENSE -# -# Copyright (c) 2008 Paolo Bonzini -# -# Copying and distribution of this file, with or without modification, are -# permitted in any medium without royalty provided the copyright notice -# and this notice are preserved. This file is offered as-is, without any -# warranty. - -#serial 8 - -AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD]) -AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_CPP])dnl -AC_REQUIRE([AC_EXEEXT])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl - -dnl Use the standard macros, but make them use other variable names -dnl -pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl -pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl -pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl -pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl -pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl -pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl -pushdef([ac_cv_objext], ac_cv_build_objext)dnl -pushdef([ac_exeext], ac_build_exeext)dnl -pushdef([ac_objext], ac_build_objext)dnl -pushdef([CC], CC_FOR_BUILD)dnl -pushdef([CPP], CPP_FOR_BUILD)dnl -pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl -pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl -pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl -pushdef([host], build)dnl -pushdef([host_alias], build_alias)dnl -pushdef([host_cpu], build_cpu)dnl -pushdef([host_vendor], build_vendor)dnl -pushdef([host_os], build_os)dnl -pushdef([ac_cv_host], ac_cv_build)dnl -pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl -pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl -pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl -pushdef([ac_cv_host_os], ac_cv_build_os)dnl -pushdef([ac_cpp], ac_build_cpp)dnl -pushdef([ac_compile], ac_build_compile)dnl -pushdef([ac_link], ac_build_link)dnl - -save_cross_compiling=$cross_compiling -save_ac_tool_prefix=$ac_tool_prefix -cross_compiling=no -ac_tool_prefix= - -AC_PROG_CC -AC_PROG_CPP -AC_EXEEXT - -ac_tool_prefix=$save_ac_tool_prefix -cross_compiling=$save_cross_compiling - -dnl Restore the old definitions -dnl -popdef([ac_link])dnl -popdef([ac_compile])dnl -popdef([ac_cpp])dnl -popdef([ac_cv_host_os])dnl -popdef([ac_cv_host_vendor])dnl -popdef([ac_cv_host_cpu])dnl -popdef([ac_cv_host_alias])dnl -popdef([ac_cv_host])dnl -popdef([host_os])dnl -popdef([host_vendor])dnl -popdef([host_cpu])dnl -popdef([host_alias])dnl -popdef([host])dnl -popdef([LDFLAGS])dnl -popdef([CPPFLAGS])dnl -popdef([CFLAGS])dnl -popdef([CPP])dnl -popdef([CC])dnl -popdef([ac_objext])dnl -popdef([ac_exeext])dnl -popdef([ac_cv_objext])dnl -popdef([ac_cv_exeext])dnl -popdef([ac_cv_prog_cc_g])dnl -popdef([ac_cv_prog_cc_cross])dnl -popdef([ac_cv_prog_cc_works])dnl -popdef([ac_cv_prog_gcc])dnl -popdef([ac_cv_prog_CPP])dnl - -dnl Finally, set Makefile variables -dnl -BUILD_EXEEXT=$ac_build_exeext -BUILD_OBJEXT=$ac_build_objext -AC_SUBST(BUILD_EXEEXT)dnl -AC_SUBST(BUILD_OBJEXT)dnl -AC_SUBST([CFLAGS_FOR_BUILD])dnl -AC_SUBST([CPPFLAGS_FOR_BUILD])dnl -AC_SUBST([LDFLAGS_FOR_BUILD])dnl -]) diff --git a/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/bitcoin_secp.m4 b/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/bitcoin_secp.m4 deleted file mode 100644 index b25d8ad..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/build-aux/m4/bitcoin_secp.m4 +++ /dev/null @@ -1,65 +0,0 @@ -dnl libsecp25k1 helper checks -AC_DEFUN([SECP_INT128_CHECK],[ -has_int128=$ac_cv_type___int128 -]) - -dnl escape "$0x" below using the m4 quadrigaph @S|@, and escape it again with a \ for the shell. -AC_DEFUN([SECP_64BIT_ASM_CHECK],[ -AC_MSG_CHECKING(for x86_64 assembly availability) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #include ]],[[ - uint64_t a = 11, tmp; - __asm__ __volatile__("movq \@S|@0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx"); - ]])],[has_64bit_asm=yes],[has_64bit_asm=no]) -AC_MSG_RESULT([$has_64bit_asm]) -]) - -dnl -AC_DEFUN([SECP_OPENSSL_CHECK],[ - has_libcrypto=no - m4_ifdef([PKG_CHECK_MODULES],[ - PKG_CHECK_MODULES([CRYPTO], [libcrypto], [has_libcrypto=yes],[has_libcrypto=no]) - if test x"$has_libcrypto" = x"yes"; then - TEMP_LIBS="$LIBS" - LIBS="$LIBS $CRYPTO_LIBS" - AC_CHECK_LIB(crypto, main,[AC_DEFINE(HAVE_LIBCRYPTO,1,[Define this symbol if libcrypto is installed])],[has_libcrypto=no]) - LIBS="$TEMP_LIBS" - fi - ]) - if test x$has_libcrypto = xno; then - AC_CHECK_HEADER(openssl/crypto.h,[ - AC_CHECK_LIB(crypto, main,[ - has_libcrypto=yes - CRYPTO_LIBS=-lcrypto - AC_DEFINE(HAVE_LIBCRYPTO,1,[Define this symbol if libcrypto is installed]) - ]) - ]) - LIBS= - fi -if test x"$has_libcrypto" = x"yes" && test x"$has_openssl_ec" = x; then - AC_MSG_CHECKING(for EC functions in libcrypto) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #include - #include - #include ]],[[ - EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_secp256k1); - ECDSA_sign(0, NULL, 0, NULL, NULL, eckey); - ECDSA_verify(0, NULL, 0, NULL, 0, eckey); - EC_KEY_free(eckey); - ]])],[has_openssl_ec=yes],[has_openssl_ec=no]) - AC_MSG_RESULT([$has_openssl_ec]) -fi -]) - -dnl -AC_DEFUN([SECP_GMP_CHECK],[ -if test x"$has_gmp" != x"yes"; then - CPPFLAGS_TEMP="$CPPFLAGS" - CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS" - LIBS_TEMP="$LIBS" - LIBS="$GMP_LIBS $LIBS" - AC_CHECK_HEADER(gmp.h,[AC_CHECK_LIB(gmp, __gmpz_init,[has_gmp=yes; GMP_LIBS="$GMP_LIBS -lgmp"; AC_DEFINE(HAVE_LIBGMP,1,[Define this symbol if libgmp is installed])])]) - CPPFLAGS="$CPPFLAGS_TEMP" - LIBS="$LIBS_TEMP" -fi -]) diff --git a/node_modules/secp256k1/src/secp256k1-src/configure.ac b/node_modules/secp256k1/src/secp256k1-src/configure.ac deleted file mode 100644 index 0743c36..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/configure.ac +++ /dev/null @@ -1,490 +0,0 @@ -AC_PREREQ([2.60]) -AC_INIT([libsecp256k1],[0.1]) -AC_CONFIG_AUX_DIR([build-aux]) -AC_CONFIG_MACRO_DIR([build-aux/m4]) -AC_CANONICAL_HOST -AH_TOP([#ifndef LIBSECP256K1_CONFIG_H]) -AH_TOP([#define LIBSECP256K1_CONFIG_H]) -AH_BOTTOM([#endif /*LIBSECP256K1_CONFIG_H*/]) -AM_INIT_AUTOMAKE([foreign subdir-objects]) -LT_INIT - -dnl make the compilation flags quiet unless V=1 is used -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) - -PKG_PROG_PKG_CONFIG - -AC_PATH_TOOL(AR, ar) -AC_PATH_TOOL(RANLIB, ranlib) -AC_PATH_TOOL(STRIP, strip) -AX_PROG_CC_FOR_BUILD - -if test "x$CFLAGS" = "x"; then - CFLAGS="-O3 -g" -fi - -AM_PROG_CC_C_O - -AC_PROG_CC_C89 -if test x"$ac_cv_prog_cc_c89" = x"no"; then - AC_MSG_ERROR([c89 compiler support required]) -fi -AM_PROG_AS - -case $host_os in - *darwin*) - if test x$cross_compiling != xyes; then - AC_PATH_PROG([BREW],brew,) - if test x$BREW != x; then - dnl These Homebrew packages may be keg-only, meaning that they won't be found - dnl in expected paths because they may conflict with system files. Ask - dnl Homebrew where each one is located, then adjust paths accordingly. - - openssl_prefix=`$BREW --prefix openssl 2>/dev/null` - gmp_prefix=`$BREW --prefix gmp 2>/dev/null` - if test x$openssl_prefix != x; then - PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH" - export PKG_CONFIG_PATH - fi - if test x$gmp_prefix != x; then - GMP_CPPFLAGS="-I$gmp_prefix/include" - GMP_LIBS="-L$gmp_prefix/lib" - fi - else - AC_PATH_PROG([PORT],port,) - dnl if homebrew isn't installed and macports is, add the macports default paths - dnl as a last resort. - if test x$PORT != x; then - CPPFLAGS="$CPPFLAGS -isystem /opt/local/include" - LDFLAGS="$LDFLAGS -L/opt/local/lib" - fi - fi - fi - ;; -esac - -CFLAGS="$CFLAGS -W" - -warn_CFLAGS="-std=c89 -pedantic -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function -Wno-long-long -Wno-overlength-strings" -saved_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $warn_CFLAGS" -AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], - [ AC_MSG_RESULT([yes]) ], - [ AC_MSG_RESULT([no]) - CFLAGS="$saved_CFLAGS" - ]) - -saved_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -fvisibility=hidden" -AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], - [ AC_MSG_RESULT([yes]) ], - [ AC_MSG_RESULT([no]) - CFLAGS="$saved_CFLAGS" - ]) - -AC_ARG_ENABLE(benchmark, - AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is no)]), - [use_benchmark=$enableval], - [use_benchmark=no]) - -AC_ARG_ENABLE(tests, - AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]), - [use_tests=$enableval], - [use_tests=yes]) - -AC_ARG_ENABLE(openssl_tests, - AS_HELP_STRING([--enable-openssl-tests],[enable OpenSSL tests, if OpenSSL is available (default is auto)]), - [enable_openssl_tests=$enableval], - [enable_openssl_tests=auto]) - -AC_ARG_ENABLE(experimental, - AS_HELP_STRING([--enable-experimental],[allow experimental configure options (default is no)]), - [use_experimental=$enableval], - [use_experimental=no]) - -AC_ARG_ENABLE(endomorphism, - AS_HELP_STRING([--enable-endomorphism],[enable endomorphism (default is no)]), - [use_endomorphism=$enableval], - [use_endomorphism=no]) - -AC_ARG_ENABLE(ecmult_static_precomputation, - AS_HELP_STRING([--enable-ecmult-static-precomputation],[enable precomputed ecmult table for signing (default is yes)]), - [use_ecmult_static_precomputation=$enableval], - [use_ecmult_static_precomputation=auto]) - -AC_ARG_ENABLE(module_ecdh, - AS_HELP_STRING([--enable-module-ecdh],[enable ECDH shared secret computation (experimental)]), - [enable_module_ecdh=$enableval], - [enable_module_ecdh=no]) - -AC_ARG_ENABLE(module_schnorr, - AS_HELP_STRING([--enable-module-schnorr],[enable Schnorr signature module (experimental)]), - [enable_module_schnorr=$enableval], - [enable_module_schnorr=no]) - -AC_ARG_ENABLE(module_recovery, - AS_HELP_STRING([--enable-module-recovery],[enable ECDSA pubkey recovery module (default is no)]), - [enable_module_recovery=$enableval], - [enable_module_recovery=no]) - -AC_ARG_ENABLE(jni, - AS_HELP_STRING([--enable-jni],[enable libsecp256k1_jni (default is auto)]), - [use_jni=$enableval], - [use_jni=auto]) - -AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=64bit|32bit|auto], -[Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto]) - -AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|no|auto], -[Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto]) - -AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto], -[Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto]) - -AC_ARG_WITH([asm], [AS_HELP_STRING([--with-asm=x86_64|arm|no|auto] -[Specify assembly optimizations to use. Default is auto (experimental: arm)])],[req_asm=$withval], [req_asm=auto]) - -AC_CHECK_TYPES([__int128]) - -AC_MSG_CHECKING([for __builtin_expect]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[void myfunc() {__builtin_expect(0,0);}]])], - [ AC_MSG_RESULT([yes]);AC_DEFINE(HAVE_BUILTIN_EXPECT,1,[Define this symbol if __builtin_expect is available]) ], - [ AC_MSG_RESULT([no]) - ]) - -if test x"$use_ecmult_static_precomputation" != x"no"; then - save_cross_compiling=$cross_compiling - cross_compiling=no - TEMP_CC="$CC" - CC="$CC_FOR_BUILD" - AC_MSG_CHECKING([native compiler: ${CC_FOR_BUILD}]) - AC_RUN_IFELSE( - [AC_LANG_PROGRAM([], [return 0])], - [working_native_cc=yes], - [working_native_cc=no],[dnl]) - CC="$TEMP_CC" - cross_compiling=$save_cross_compiling - - if test x"$working_native_cc" = x"no"; then - set_precomp=no - if test x"$use_ecmult_static_precomputation" = x"yes"; then - AC_MSG_ERROR([${CC_FOR_BUILD} does not produce working binaries. Please set CC_FOR_BUILD]) - else - AC_MSG_RESULT([${CC_FOR_BUILD} does not produce working binaries. Please set CC_FOR_BUILD]) - fi - else - AC_MSG_RESULT([ok]) - set_precomp=yes - fi -else - set_precomp=no -fi - -if test x"$req_asm" = x"auto"; then - SECP_64BIT_ASM_CHECK - if test x"$has_64bit_asm" = x"yes"; then - set_asm=x86_64 - fi - if test x"$set_asm" = x; then - set_asm=no - fi -else - set_asm=$req_asm - case $set_asm in - x86_64) - SECP_64BIT_ASM_CHECK - if test x"$has_64bit_asm" != x"yes"; then - AC_MSG_ERROR([x86_64 assembly optimization requested but not available]) - fi - ;; - arm) - ;; - no) - ;; - *) - AC_MSG_ERROR([invalid assembly optimization selection]) - ;; - esac -fi - -if test x"$req_field" = x"auto"; then - if test x"set_asm" = x"x86_64"; then - set_field=64bit - fi - if test x"$set_field" = x; then - SECP_INT128_CHECK - if test x"$has_int128" = x"yes"; then - set_field=64bit - fi - fi - if test x"$set_field" = x; then - set_field=32bit - fi -else - set_field=$req_field - case $set_field in - 64bit) - if test x"$set_asm" != x"x86_64"; then - SECP_INT128_CHECK - if test x"$has_int128" != x"yes"; then - AC_MSG_ERROR([64bit field explicitly requested but neither __int128 support or x86_64 assembly available]) - fi - fi - ;; - 32bit) - ;; - *) - AC_MSG_ERROR([invalid field implementation selection]) - ;; - esac -fi - -if test x"$req_scalar" = x"auto"; then - SECP_INT128_CHECK - if test x"$has_int128" = x"yes"; then - set_scalar=64bit - fi - if test x"$set_scalar" = x; then - set_scalar=32bit - fi -else - set_scalar=$req_scalar - case $set_scalar in - 64bit) - SECP_INT128_CHECK - if test x"$has_int128" != x"yes"; then - AC_MSG_ERROR([64bit scalar explicitly requested but __int128 support not available]) - fi - ;; - 32bit) - ;; - *) - AC_MSG_ERROR([invalid scalar implementation selected]) - ;; - esac -fi - -if test x"$req_bignum" = x"auto"; then - SECP_GMP_CHECK - if test x"$has_gmp" = x"yes"; then - set_bignum=gmp - fi - - if test x"$set_bignum" = x; then - set_bignum=no - fi -else - set_bignum=$req_bignum - case $set_bignum in - gmp) - SECP_GMP_CHECK - if test x"$has_gmp" != x"yes"; then - AC_MSG_ERROR([gmp bignum explicitly requested but libgmp not available]) - fi - ;; - no) - ;; - *) - AC_MSG_ERROR([invalid bignum implementation selection]) - ;; - esac -fi - -# select assembly optimization -use_external_asm=no - -case $set_asm in -x86_64) - AC_DEFINE(USE_ASM_X86_64, 1, [Define this symbol to enable x86_64 assembly optimizations]) - ;; -arm) - use_external_asm=yes - ;; -no) - ;; -*) - AC_MSG_ERROR([invalid assembly optimizations]) - ;; -esac - -# select field implementation -case $set_field in -64bit) - AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation]) - ;; -32bit) - AC_DEFINE(USE_FIELD_10X26, 1, [Define this symbol to use the FIELD_10X26 implementation]) - ;; -*) - AC_MSG_ERROR([invalid field implementation]) - ;; -esac - -# select bignum implementation -case $set_bignum in -gmp) - AC_DEFINE(HAVE_LIBGMP, 1, [Define this symbol if libgmp is installed]) - AC_DEFINE(USE_NUM_GMP, 1, [Define this symbol to use the gmp implementation for num]) - AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the num-based field inverse implementation]) - AC_DEFINE(USE_SCALAR_INV_NUM, 1, [Define this symbol to use the num-based scalar inverse implementation]) - ;; -no) - AC_DEFINE(USE_NUM_NONE, 1, [Define this symbol to use no num implementation]) - AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the native field inverse implementation]) - AC_DEFINE(USE_SCALAR_INV_BUILTIN, 1, [Define this symbol to use the native scalar inverse implementation]) - ;; -*) - AC_MSG_ERROR([invalid bignum implementation]) - ;; -esac - -#select scalar implementation -case $set_scalar in -64bit) - AC_DEFINE(USE_SCALAR_4X64, 1, [Define this symbol to use the 4x64 scalar implementation]) - ;; -32bit) - AC_DEFINE(USE_SCALAR_8X32, 1, [Define this symbol to use the 8x32 scalar implementation]) - ;; -*) - AC_MSG_ERROR([invalid scalar implementation]) - ;; -esac - -if test x"$use_tests" = x"yes"; then - SECP_OPENSSL_CHECK - if test x"$has_openssl_ec" = x"yes"; then - if test x"$enable_openssl_tests" != x"no"; then - AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available]) - SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS" - SECP_TEST_LIBS="$CRYPTO_LIBS" - - case $host in - *mingw*) - SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32" - ;; - esac - fi - else - if test x"$enable_openssl_tests" = x"yes"; then - AC_MSG_ERROR([OpenSSL tests requested but OpenSSL with EC support is not available]) - fi - fi -else - if test x"$enable_openssl_tests" = x"yes"; then - AC_MSG_ERROR([OpenSSL tests requested but tests are not enabled]) - fi -fi - -if test x"$use_jni" != x"no"; then - AX_JNI_INCLUDE_DIR - have_jni_dependencies=yes - if test x"$enable_module_schnorr" = x"no"; then - have_jni_dependencies=no - fi - if test x"$enable_module_ecdh" = x"no"; then - have_jni_dependencies=no - fi - if test "x$JNI_INCLUDE_DIRS" = "x"; then - have_jni_dependencies=no - fi - if test "x$have_jni_dependencies" = "xno"; then - if test x"$use_jni" = x"yes"; then - AC_MSG_ERROR([jni support explicitly requested but headers/dependencies were not found. Enable ECDH and Schnorr and try again.]) - fi - AC_MSG_WARN([jni headers/dependencies not found. jni support disabled]) - use_jni=no - else - use_jni=yes - for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS; do - JNI_INCLUDES="$JNI_INCLUDES -I$JNI_INCLUDE_DIR" - done - fi -fi - -if test x"$set_bignum" = x"gmp"; then - SECP_LIBS="$SECP_LIBS $GMP_LIBS" - SECP_INCLUDES="$SECP_INCLUDES $GMP_CPPFLAGS" -fi - -if test x"$use_endomorphism" = x"yes"; then - AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism optimization]) -fi - -if test x"$use_ecmult_static_precomputation" = x"yes"; then - AC_DEFINE(USE_ECMULT_STATIC_PRECOMPUTATION, 1, [Define this symbol to use a statically generated ecmult table]) -fi - -if test x"$enable_module_ecdh" = x"yes"; then - AC_DEFINE(ENABLE_MODULE_ECDH, 1, [Define this symbol to enable the ECDH module]) -fi - -if test x"$enable_module_schnorr" = x"yes"; then - AC_DEFINE(ENABLE_MODULE_SCHNORR, 1, [Define this symbol to enable the Schnorr signature module]) -fi - -if test x"$enable_module_recovery" = x"yes"; then - AC_DEFINE(ENABLE_MODULE_RECOVERY, 1, [Define this symbol to enable the ECDSA pubkey recovery module]) -fi - -AC_C_BIGENDIAN() - -if test x"$use_external_asm" = x"yes"; then - AC_DEFINE(USE_EXTERNAL_ASM, 1, [Define this symbol if an external (non-inline) assembly implementation is used]) -fi - -AC_MSG_NOTICE([Using static precomputation: $set_precomp]) -AC_MSG_NOTICE([Using assembly optimizations: $set_asm]) -AC_MSG_NOTICE([Using field implementation: $set_field]) -AC_MSG_NOTICE([Using bignum implementation: $set_bignum]) -AC_MSG_NOTICE([Using scalar implementation: $set_scalar]) -AC_MSG_NOTICE([Using endomorphism optimizations: $use_endomorphism]) -AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh]) -AC_MSG_NOTICE([Building Schnorr signatures module: $enable_module_schnorr]) -AC_MSG_NOTICE([Building ECDSA pubkey recovery module: $enable_module_recovery]) -AC_MSG_NOTICE([Using jni: $use_jni]) - -if test x"$enable_experimental" = x"yes"; then - AC_MSG_NOTICE([******]) - AC_MSG_NOTICE([WARNING: experimental build]) - AC_MSG_NOTICE([Experimental features do not have stable APIs or properties, and may not be safe for production use.]) - AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh]) - AC_MSG_NOTICE([Building Schnorr signatures module: $enable_module_schnorr]) - AC_MSG_NOTICE([******]) -else - if test x"$enable_module_schnorr" = x"yes"; then - AC_MSG_ERROR([Schnorr signature module is experimental. Use --enable-experimental to allow.]) - fi - if test x"$enable_module_ecdh" = x"yes"; then - AC_MSG_ERROR([ECDH module is experimental. Use --enable-experimental to allow.]) - fi - if test x"$set_asm" = x"arm"; then - AC_MSG_ERROR([ARM assembly optimization is experimental. Use --enable-experimental to allow.]) - fi -fi - -AC_CONFIG_HEADERS([src/libsecp256k1-config.h]) -AC_CONFIG_FILES([Makefile libsecp256k1.pc]) -AC_SUBST(JNI_INCLUDES) -AC_SUBST(SECP_INCLUDES) -AC_SUBST(SECP_LIBS) -AC_SUBST(SECP_TEST_LIBS) -AC_SUBST(SECP_TEST_INCLUDES) -AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"]) -AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" = x"yes"]) -AM_CONDITIONAL([USE_ECMULT_STATIC_PRECOMPUTATION], [test x"$use_ecmult_static_precomputation" = x"yes"]) -AM_CONDITIONAL([ENABLE_MODULE_ECDH], [test x"$enable_module_ecdh" = x"yes"]) -AM_CONDITIONAL([ENABLE_MODULE_SCHNORR], [test x"$enable_module_schnorr" = x"yes"]) -AM_CONDITIONAL([ENABLE_MODULE_RECOVERY], [test x"$enable_module_recovery" = x"yes"]) -AM_CONDITIONAL([USE_JNI], [test x"$use_jni" == x"yes"]) -AM_CONDITIONAL([USE_EXTERNAL_ASM], [test x"$use_external_asm" = x"yes"]) -AM_CONDITIONAL([USE_ASM_ARM], [test x"$set_asm" = x"arm"]) - -dnl make sure nothing new is exported so that we don't break the cache -PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH" -unset PKG_CONFIG_PATH -PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP" - -AC_OUTPUT diff --git a/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.c b/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.c deleted file mode 100644 index 5b141a9..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.c +++ /dev/null @@ -1,150 +0,0 @@ -/********************************************************************** - * Copyright (c) 2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#include -#include - -#include "lax_der_parsing.h" - -int ecdsa_signature_parse_der_lax(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input, size_t inputlen) { - size_t rpos, rlen, spos, slen; - size_t pos = 0; - size_t lenbyte; - unsigned char tmpsig[64] = {0}; - int overflow = 0; - - /* Hack to initialize sig with a correctly-parsed but invalid signature. */ - secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig); - - /* Sequence tag byte */ - if (pos == inputlen || input[pos] != 0x30) { - return 0; - } - pos++; - - /* Sequence length bytes */ - if (pos == inputlen) { - return 0; - } - lenbyte = input[pos++]; - if (lenbyte & 0x80) { - lenbyte -= 0x80; - if (pos + lenbyte > inputlen) { - return 0; - } - pos += lenbyte; - } - - /* Integer tag byte for R */ - if (pos == inputlen || input[pos] != 0x02) { - return 0; - } - pos++; - - /* Integer length for R */ - if (pos == inputlen) { - return 0; - } - lenbyte = input[pos++]; - if (lenbyte & 0x80) { - lenbyte -= 0x80; - if (pos + lenbyte > inputlen) { - return 0; - } - while (lenbyte > 0 && input[pos] == 0) { - pos++; - lenbyte--; - } - if (lenbyte >= sizeof(size_t)) { - return 0; - } - rlen = 0; - while (lenbyte > 0) { - rlen = (rlen << 8) + input[pos]; - pos++; - lenbyte--; - } - } else { - rlen = lenbyte; - } - if (rlen > inputlen - pos) { - return 0; - } - rpos = pos; - pos += rlen; - - /* Integer tag byte for S */ - if (pos == inputlen || input[pos] != 0x02) { - return 0; - } - pos++; - - /* Integer length for S */ - if (pos == inputlen) { - return 0; - } - lenbyte = input[pos++]; - if (lenbyte & 0x80) { - lenbyte -= 0x80; - if (pos + lenbyte > inputlen) { - return 0; - } - while (lenbyte > 0 && input[pos] == 0) { - pos++; - lenbyte--; - } - if (lenbyte >= sizeof(size_t)) { - return 0; - } - slen = 0; - while (lenbyte > 0) { - slen = (slen << 8) + input[pos]; - pos++; - lenbyte--; - } - } else { - slen = lenbyte; - } - if (slen > inputlen - pos) { - return 0; - } - spos = pos; - pos += slen; - - /* Ignore leading zeroes in R */ - while (rlen > 0 && input[rpos] == 0) { - rlen--; - rpos++; - } - /* Copy R value */ - if (rlen > 32) { - overflow = 1; - } else { - memcpy(tmpsig + 32 - rlen, input + rpos, rlen); - } - - /* Ignore leading zeroes in S */ - while (slen > 0 && input[spos] == 0) { - slen--; - spos++; - } - /* Copy S value */ - if (slen > 32) { - overflow = 1; - } else { - memcpy(tmpsig + 64 - slen, input + spos, slen); - } - - if (!overflow) { - overflow = !secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig); - } - if (overflow) { - memset(tmpsig, 0, 64); - secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig); - } - return 1; -} - diff --git a/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.h b/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.h deleted file mode 100644 index 6d27871..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_parsing.h +++ /dev/null @@ -1,91 +0,0 @@ -/********************************************************************** - * Copyright (c) 2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -/**** - * Please do not link this file directly. It is not part of the libsecp256k1 - * project and does not promise any stability in its API, functionality or - * presence. Projects which use this code should instead copy this header - * and its accompanying .c file directly into their codebase. - ****/ - -/* This file defines a function that parses DER with various errors and - * violations. This is not a part of the library itself, because the allowed - * violations are chosen arbitrarily and do not follow or establish any - * standard. - * - * In many places it matters that different implementations do not only accept - * the same set of valid signatures, but also reject the same set of signatures. - * The only means to accomplish that is by strictly obeying a standard, and not - * accepting anything else. - * - * Nonetheless, sometimes there is a need for compatibility with systems that - * use signatures which do not strictly obey DER. The snippet below shows how - * certain violations are easily supported. You may need to adapt it. - * - * Do not use this for new systems. Use well-defined DER or compact signatures - * instead if you have the choice (see secp256k1_ecdsa_signature_parse_der and - * secp256k1_ecdsa_signature_parse_compact). - * - * The supported violations are: - * - All numbers are parsed as nonnegative integers, even though X.609-0207 - * section 8.3.3 specifies that integers are always encoded as two's - * complement. - * - Integers can have length 0, even though section 8.3.1 says they can't. - * - Integers with overly long padding are accepted, violation section - * 8.3.2. - * - 127-byte long length descriptors are accepted, even though section - * 8.1.3.5.c says that they are not. - * - Trailing garbage data inside or after the signature is ignored. - * - The length descriptor of the sequence is ignored. - * - * Compared to for example OpenSSL, many violations are NOT supported: - * - Using overly long tag descriptors for the sequence or integers inside, - * violating section 8.1.2.2. - * - Encoding primitive integers as constructed values, violating section - * 8.3.1. - */ - -#ifndef _SECP256K1_CONTRIB_LAX_DER_PARSING_H_ -#define _SECP256K1_CONTRIB_LAX_DER_PARSING_H_ - -#include - -# ifdef __cplusplus -extern "C" { -# endif - -/** Parse a signature in "lax DER" format - * - * Returns: 1 when the signature could be parsed, 0 otherwise. - * Args: ctx: a secp256k1 context object - * Out: sig: a pointer to a signature object - * In: input: a pointer to the signature to be parsed - * inputlen: the length of the array pointed to be input - * - * This function will accept any valid DER encoded signature, even if the - * encoded numbers are out of range. In addition, it will accept signatures - * which violate the DER spec in various ways. Its purpose is to allow - * validation of the Bitcoin blockchain, which includes non-DER signatures - * from before the network rules were updated to enforce DER. Note that - * the set of supported violations is a strict subset of what OpenSSL will - * accept. - * - * After the call, sig will always be initialized. If parsing failed or the - * encoded numbers are out of range, signature validation with it is - * guaranteed to fail for every message and public key. - */ -int ecdsa_signature_parse_der_lax( - const secp256k1_context* ctx, - secp256k1_ecdsa_signature* sig, - const unsigned char *input, - size_t inputlen -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.c b/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.c deleted file mode 100644 index c2e63b4..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.c +++ /dev/null @@ -1,113 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014, 2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#include -#include - -#include "lax_der_privatekey_parsing.h" - -int ec_privkey_import_der(const secp256k1_context* ctx, unsigned char *out32, const unsigned char *privkey, size_t privkeylen) { - const unsigned char *end = privkey + privkeylen; - int lenb = 0; - int len = 0; - memset(out32, 0, 32); - /* sequence header */ - if (end < privkey+1 || *privkey != 0x30) { - return 0; - } - privkey++; - /* sequence length constructor */ - if (end < privkey+1 || !(*privkey & 0x80)) { - return 0; - } - lenb = *privkey & ~0x80; privkey++; - if (lenb < 1 || lenb > 2) { - return 0; - } - if (end < privkey+lenb) { - return 0; - } - /* sequence length */ - len = privkey[lenb-1] | (lenb > 1 ? privkey[lenb-2] << 8 : 0); - privkey += lenb; - if (end < privkey+len) { - return 0; - } - /* sequence element 0: version number (=1) */ - if (end < privkey+3 || privkey[0] != 0x02 || privkey[1] != 0x01 || privkey[2] != 0x01) { - return 0; - } - privkey += 3; - /* sequence element 1: octet string, up to 32 bytes */ - if (end < privkey+2 || privkey[0] != 0x04 || privkey[1] > 0x20 || end < privkey+2+privkey[1]) { - return 0; - } - memcpy(out32 + 32 - privkey[1], privkey + 2, privkey[1]); - if (!secp256k1_ec_seckey_verify(ctx, out32)) { - memset(out32, 0, 32); - return 0; - } - return 1; -} - -int ec_privkey_export_der(const secp256k1_context *ctx, unsigned char *privkey, size_t *privkeylen, const unsigned char *key32, int compressed) { - secp256k1_pubkey pubkey; - size_t pubkeylen = 0; - if (!secp256k1_ec_pubkey_create(ctx, &pubkey, key32)) { - *privkeylen = 0; - return 0; - } - if (compressed) { - static const unsigned char begin[] = { - 0x30,0x81,0xD3,0x02,0x01,0x01,0x04,0x20 - }; - static const unsigned char middle[] = { - 0xA0,0x81,0x85,0x30,0x81,0x82,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0x48, - 0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0x04, - 0x21,0x02,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87, - 0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8, - 0x17,0x98,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E, - 0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x24,0x03,0x22,0x00 - }; - unsigned char *ptr = privkey; - memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin); - memcpy(ptr, key32, 32); ptr += 32; - memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle); - pubkeylen = 33; - secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED); - ptr += pubkeylen; - *privkeylen = ptr - privkey; - } else { - static const unsigned char begin[] = { - 0x30,0x82,0x01,0x13,0x02,0x01,0x01,0x04,0x20 - }; - static const unsigned char middle[] = { - 0xA0,0x81,0xA5,0x30,0x81,0xA2,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0x48, - 0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0x04, - 0x41,0x04,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87, - 0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8, - 0x17,0x98,0x48,0x3A,0xDA,0x77,0x26,0xA3,0xC4,0x65,0x5D,0xA4,0xFB,0xFC,0x0E,0x11, - 0x08,0xA8,0xFD,0x17,0xB4,0x48,0xA6,0x85,0x54,0x19,0x9C,0x47,0xD0,0x8F,0xFB,0x10, - 0xD4,0xB8,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E, - 0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x44,0x03,0x42,0x00 - }; - unsigned char *ptr = privkey; - memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin); - memcpy(ptr, key32, 32); ptr += 32; - memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle); - pubkeylen = 65; - secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_UNCOMPRESSED); - ptr += pubkeylen; - *privkeylen = ptr - privkey; - } - return 1; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.h b/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.h deleted file mode 100644 index 2fd088f..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/contrib/lax_der_privatekey_parsing.h +++ /dev/null @@ -1,90 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014, 2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -/**** - * Please do not link this file directly. It is not part of the libsecp256k1 - * project and does not promise any stability in its API, functionality or - * presence. Projects which use this code should instead copy this header - * and its accompanying .c file directly into their codebase. - ****/ - -/* This file contains code snippets that parse DER private keys with - * various errors and violations. This is not a part of the library - * itself, because the allowed violations are chosen arbitrarily and - * do not follow or establish any standard. - * - * It also contains code to serialize private keys in a compatible - * manner. - * - * These functions are meant for compatibility with applications - * that require BER encoded keys. When working with secp256k1-specific - * code, the simple 32-byte private keys normally used by the - * library are sufficient. - */ - -#ifndef _SECP256K1_CONTRIB_BER_PRIVATEKEY_H_ -#define _SECP256K1_CONTRIB_BER_PRIVATEKEY_H_ - -#include - -# ifdef __cplusplus -extern "C" { -# endif - -/** Export a private key in DER format. - * - * Returns: 1 if the private key was valid. - * Args: ctx: pointer to a context object, initialized for signing (cannot - * be NULL) - * Out: privkey: pointer to an array for storing the private key in BER. - * Should have space for 279 bytes, and cannot be NULL. - * privkeylen: Pointer to an int where the length of the private key in - * privkey will be stored. - * In: seckey: pointer to a 32-byte secret key to export. - * compressed: 1 if the key should be exported in - * compressed format, 0 otherwise - * - * This function is purely meant for compatibility with applications that - * require BER encoded keys. When working with secp256k1-specific code, the - * simple 32-byte private keys are sufficient. - * - * Note that this function does not guarantee correct DER output. It is - * guaranteed to be parsable by secp256k1_ec_privkey_import_der - */ -SECP256K1_WARN_UNUSED_RESULT int ec_privkey_export_der( - const secp256k1_context* ctx, - unsigned char *privkey, - size_t *privkeylen, - const unsigned char *seckey, - int compressed -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Import a private key in DER format. - * Returns: 1 if a private key was extracted. - * Args: ctx: pointer to a context object (cannot be NULL). - * Out: seckey: pointer to a 32-byte array for storing the private key. - * (cannot be NULL). - * In: privkey: pointer to a private key in DER format (cannot be NULL). - * privkeylen: length of the DER private key pointed to be privkey. - * - * This function will accept more than just strict DER, and even allow some BER - * violations. The public key stored inside the DER-encoded private key is not - * verified for correctness, nor are the curve parameters. Use this function - * only if you know in advance it is supposed to contain a secp256k1 private - * key. - */ -SECP256K1_WARN_UNUSED_RESULT int ec_privkey_import_der( - const secp256k1_context* ctx, - unsigned char *seckey, - const unsigned char *privkey, - size_t privkeylen -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/include/secp256k1.h b/node_modules/secp256k1/src/secp256k1-src/include/secp256k1.h deleted file mode 100644 index 7145dbc..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/include/secp256k1.h +++ /dev/null @@ -1,583 +0,0 @@ -#ifndef _SECP256K1_ -# define _SECP256K1_ - -# ifdef __cplusplus -extern "C" { -# endif - -#include - -/* These rules specify the order of arguments in API calls: - * - * 1. Context pointers go first, followed by output arguments, combined - * output/input arguments, and finally input-only arguments. - * 2. Array lengths always immediately the follow the argument whose length - * they describe, even if this violates rule 1. - * 3. Within the OUT/OUTIN/IN groups, pointers to data that is typically generated - * later go first. This means: signatures, public nonces, private nonces, - * messages, public keys, secret keys, tweaks. - * 4. Arguments that are not data pointers go last, from more complex to less - * complex: function pointers, algorithm names, messages, void pointers, - * counts, flags, booleans. - * 5. Opaque data pointers follow the function pointer they are to be passed to. - */ - -/** Opaque data structure that holds context information (precomputed tables etc.). - * - * The purpose of context structures is to cache large precomputed data tables - * that are expensive to construct, and also to maintain the randomization data - * for blinding. - * - * Do not create a new context object for each operation, as construction is - * far slower than all other API calls (~100 times slower than an ECDSA - * verification). - * - * A constructed context can safely be used from multiple threads - * simultaneously, but API call that take a non-const pointer to a context - * need exclusive access to it. In particular this is the case for - * secp256k1_context_destroy and secp256k1_context_randomize. - * - * Regarding randomization, either do it once at creation time (in which case - * you do not need any locking for the other calls), or use a read-write lock. - */ -typedef struct secp256k1_context_struct secp256k1_context; - -/** Opaque data structure that holds a parsed and valid public key. - * - * The exact representation of data inside is implementation defined and not - * guaranteed to be portable between different platforms or versions. It is - * however guaranteed to be 64 bytes in size, and can be safely copied/moved. - * If you need to convert to a format suitable for storage or transmission, use - * secp256k1_ec_pubkey_serialize and secp256k1_ec_pubkey_parse. - * - * Furthermore, it is guaranteed that identical public keys (ignoring - * compression) will have identical representation, so they can be memcmp'ed. - */ -typedef struct { - unsigned char data[64]; -} secp256k1_pubkey; - -/** Opaque data structured that holds a parsed ECDSA signature. - * - * The exact representation of data inside is implementation defined and not - * guaranteed to be portable between different platforms or versions. It is - * however guaranteed to be 64 bytes in size, and can be safely copied/moved. - * If you need to convert to a format suitable for storage or transmission, use - * the secp256k1_ecdsa_signature_serialize_* and - * secp256k1_ecdsa_signature_serialize_* functions. - * - * Furthermore, it is guaranteed to identical signatures will have identical - * representation, so they can be memcmp'ed. - */ -typedef struct { - unsigned char data[64]; -} secp256k1_ecdsa_signature; - -/** A pointer to a function to deterministically generate a nonce. - * - * Returns: 1 if a nonce was successfully generated. 0 will cause signing to fail. - * Out: nonce32: pointer to a 32-byte array to be filled by the function. - * In: msg32: the 32-byte message hash being verified (will not be NULL) - * key32: pointer to a 32-byte secret key (will not be NULL) - * algo16: pointer to a 16-byte array describing the signature - * algorithm (will be NULL for ECDSA for compatibility). - * data: Arbitrary data pointer that is passed through. - * attempt: how many iterations we have tried to find a nonce. - * This will almost always be 0, but different attempt values - * are required to result in a different nonce. - * - * Except for test cases, this function should compute some cryptographic hash of - * the message, the algorithm, the key and the attempt. - */ -typedef int (*secp256k1_nonce_function)( - unsigned char *nonce32, - const unsigned char *msg32, - const unsigned char *key32, - const unsigned char *algo16, - void *data, - unsigned int attempt -); - -# if !defined(SECP256K1_GNUC_PREREQ) -# if defined(__GNUC__)&&defined(__GNUC_MINOR__) -# define SECP256K1_GNUC_PREREQ(_maj,_min) \ - ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min)) -# else -# define SECP256K1_GNUC_PREREQ(_maj,_min) 0 -# endif -# endif - -# if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) ) -# if SECP256K1_GNUC_PREREQ(2,7) -# define SECP256K1_INLINE __inline__ -# elif (defined(_MSC_VER)) -# define SECP256K1_INLINE __inline -# else -# define SECP256K1_INLINE -# endif -# else -# define SECP256K1_INLINE inline -# endif - -#ifndef SECP256K1_API -# if defined(_WIN32) -# ifdef SECP256K1_BUILD -# define SECP256K1_API __declspec(dllexport) -# else -# define SECP256K1_API -# endif -# elif defined(__GNUC__) && defined(SECP256K1_BUILD) -# define SECP256K1_API __attribute__ ((visibility ("default"))) -# else -# define SECP256K1_API -# endif -#endif - -/**Warning attributes - * NONNULL is not used if SECP256K1_BUILD is set to avoid the compiler optimizing out - * some paranoid null checks. */ -# if defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4) -# define SECP256K1_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__)) -# else -# define SECP256K1_WARN_UNUSED_RESULT -# endif -# if !defined(SECP256K1_BUILD) && defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4) -# define SECP256K1_ARG_NONNULL(_x) __attribute__ ((__nonnull__(_x))) -# else -# define SECP256K1_ARG_NONNULL(_x) -# endif - -/** All flags' lower 8 bits indicate what they're for. Do not use directly. */ -#define SECP256K1_FLAGS_TYPE_MASK ((1 << 8) - 1) -#define SECP256K1_FLAGS_TYPE_CONTEXT (1 << 0) -#define SECP256K1_FLAGS_TYPE_COMPRESSION (1 << 1) -/** The higher bits contain the actual data. Do not use directly. */ -#define SECP256K1_FLAGS_BIT_CONTEXT_VERIFY (1 << 8) -#define SECP256K1_FLAGS_BIT_CONTEXT_SIGN (1 << 9) -#define SECP256K1_FLAGS_BIT_COMPRESSION (1 << 8) - -/** Flags to pass to secp256k1_context_create. */ -#define SECP256K1_CONTEXT_VERIFY (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_VERIFY) -#define SECP256K1_CONTEXT_SIGN (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_SIGN) -#define SECP256K1_CONTEXT_NONE (SECP256K1_FLAGS_TYPE_CONTEXT) - -/** Flag to pass to secp256k1_ec_pubkey_serialize and secp256k1_ec_privkey_export. */ -#define SECP256K1_EC_COMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION | SECP256K1_FLAGS_BIT_COMPRESSION) -#define SECP256K1_EC_UNCOMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION) - -/** Create a secp256k1 context object. - * - * Returns: a newly created context object. - * In: flags: which parts of the context to initialize. - */ -SECP256K1_API secp256k1_context* secp256k1_context_create( - unsigned int flags -) SECP256K1_WARN_UNUSED_RESULT; - -/** Copies a secp256k1 context object. - * - * Returns: a newly created context object. - * Args: ctx: an existing context to copy (cannot be NULL) - */ -SECP256K1_API secp256k1_context* secp256k1_context_clone( - const secp256k1_context* ctx -) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT; - -/** Destroy a secp256k1 context object. - * - * The context pointer may not be used afterwards. - * Args: ctx: an existing context to destroy (cannot be NULL) - */ -SECP256K1_API void secp256k1_context_destroy( - secp256k1_context* ctx -); - -/** Set a callback function to be called when an illegal argument is passed to - * an API call. It will only trigger for violations that are mentioned - * explicitly in the header. - * - * The philosophy is that these shouldn't be dealt with through a - * specific return value, as calling code should not have branches to deal with - * the case that this code itself is broken. - * - * On the other hand, during debug stage, one would want to be informed about - * such mistakes, and the default (crashing) may be inadvisable. - * When this callback is triggered, the API function called is guaranteed not - * to cause a crash, though its return value and output arguments are - * undefined. - * - * Args: ctx: an existing context object (cannot be NULL) - * In: fun: a pointer to a function to call when an illegal argument is - * passed to the API, taking a message and an opaque pointer - * (NULL restores a default handler that calls abort). - * data: the opaque pointer to pass to fun above. - */ -SECP256K1_API void secp256k1_context_set_illegal_callback( - secp256k1_context* ctx, - void (*fun)(const char* message, void* data), - const void* data -) SECP256K1_ARG_NONNULL(1); - -/** Set a callback function to be called when an internal consistency check - * fails. The default is crashing. - * - * This can only trigger in case of a hardware failure, miscompilation, - * memory corruption, serious bug in the library, or other error would can - * otherwise result in undefined behaviour. It will not trigger due to mere - * incorrect usage of the API (see secp256k1_context_set_illegal_callback - * for that). After this callback returns, anything may happen, including - * crashing. - * - * Args: ctx: an existing context object (cannot be NULL) - * In: fun: a pointer to a function to call when an internal error occurs, - * taking a message and an opaque pointer (NULL restores a default - * handler that calls abort). - * data: the opaque pointer to pass to fun above. - */ -SECP256K1_API void secp256k1_context_set_error_callback( - secp256k1_context* ctx, - void (*fun)(const char* message, void* data), - const void* data -) SECP256K1_ARG_NONNULL(1); - -/** Parse a variable-length public key into the pubkey object. - * - * Returns: 1 if the public key was fully valid. - * 0 if the public key could not be parsed or is invalid. - * Args: ctx: a secp256k1 context object. - * Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to a - * parsed version of input. If not, its value is undefined. - * In: input: pointer to a serialized public key - * inputlen: length of the array pointed to by input - * - * This function supports parsing compressed (33 bytes, header byte 0x02 or - * 0x03), uncompressed (65 bytes, header byte 0x04), or hybrid (65 bytes, header - * byte 0x06 or 0x07) format public keys. - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse( - const secp256k1_context* ctx, - secp256k1_pubkey* pubkey, - const unsigned char *input, - size_t inputlen -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Serialize a pubkey object into a serialized byte sequence. - * - * Returns: 1 always. - * Args: ctx: a secp256k1 context object. - * Out: output: a pointer to a 65-byte (if compressed==0) or 33-byte (if - * compressed==1) byte array to place the serialized key - * in. - * In/Out: outputlen: a pointer to an integer which is initially set to the - * size of output, and is overwritten with the written - * size. - * In: pubkey: a pointer to a secp256k1_pubkey containing an - * initialized public key. - * flags: SECP256K1_EC_COMPRESSED if serialization should be in - * compressed format, otherwise SECP256K1_EC_UNCOMPRESSED. - */ -SECP256K1_API int secp256k1_ec_pubkey_serialize( - const secp256k1_context* ctx, - unsigned char *output, - size_t *outputlen, - const secp256k1_pubkey* pubkey, - unsigned int flags -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Parse an ECDSA signature in compact (64 bytes) format. - * - * Returns: 1 when the signature could be parsed, 0 otherwise. - * Args: ctx: a secp256k1 context object - * Out: sig: a pointer to a signature object - * In: input64: a pointer to the 64-byte array to parse - * - * The signature must consist of a 32-byte big endian R value, followed by a - * 32-byte big endian S value. If R or S fall outside of [0..order-1], the - * encoding is invalid. R and S with value 0 are allowed in the encoding. - * - * After the call, sig will always be initialized. If parsing failed or R or - * S are zero, the resulting sig value is guaranteed to fail validation for any - * message and public key. - */ -SECP256K1_API int secp256k1_ecdsa_signature_parse_compact( - const secp256k1_context* ctx, - secp256k1_ecdsa_signature* sig, - const unsigned char *input64 -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Parse a DER ECDSA signature. - * - * Returns: 1 when the signature could be parsed, 0 otherwise. - * Args: ctx: a secp256k1 context object - * Out: sig: a pointer to a signature object - * In: input: a pointer to the signature to be parsed - * inputlen: the length of the array pointed to be input - * - * This function will accept any valid DER encoded signature, even if the - * encoded numbers are out of range. - * - * After the call, sig will always be initialized. If parsing failed or the - * encoded numbers are out of range, signature validation with it is - * guaranteed to fail for every message and public key. - */ -SECP256K1_API int secp256k1_ecdsa_signature_parse_der( - const secp256k1_context* ctx, - secp256k1_ecdsa_signature* sig, - const unsigned char *input, - size_t inputlen -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Serialize an ECDSA signature in DER format. - * - * Returns: 1 if enough space was available to serialize, 0 otherwise - * Args: ctx: a secp256k1 context object - * Out: output: a pointer to an array to store the DER serialization - * In/Out: outputlen: a pointer to a length integer. Initially, this integer - * should be set to the length of output. After the call - * it will be set to the length of the serialization (even - * if 0 was returned). - * In: sig: a pointer to an initialized signature object - */ -SECP256K1_API int secp256k1_ecdsa_signature_serialize_der( - const secp256k1_context* ctx, - unsigned char *output, - size_t *outputlen, - const secp256k1_ecdsa_signature* sig -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Serialize an ECDSA signature in compact (64 byte) format. - * - * Returns: 1 - * Args: ctx: a secp256k1 context object - * Out: output64: a pointer to a 64-byte array to store the compact serialization - * In: sig: a pointer to an initialized signature object - * - * See secp256k1_ecdsa_signature_parse_compact for details about the encoding. - */ -SECP256K1_API int secp256k1_ecdsa_signature_serialize_compact( - const secp256k1_context* ctx, - unsigned char *output64, - const secp256k1_ecdsa_signature* sig -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Verify an ECDSA signature. - * - * Returns: 1: correct signature - * 0: incorrect or unparseable signature - * Args: ctx: a secp256k1 context object, initialized for verification. - * In: sig: the signature being verified (cannot be NULL) - * msg32: the 32-byte message hash being verified (cannot be NULL) - * pubkey: pointer to an initialized public key to verify with (cannot be NULL) - * - * To avoid accepting malleable signatures, only ECDSA signatures in lower-S - * form are accepted. - * - * If you need to accept ECDSA signatures from sources that do not obey this - * rule, apply secp256k1_ecdsa_signature_normalize to the signature prior to - * validation, but be aware that doing so results in malleable signatures. - * - * For details, see the comments for that function. - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_verify( - const secp256k1_context* ctx, - const secp256k1_ecdsa_signature *sig, - const unsigned char *msg32, - const secp256k1_pubkey *pubkey -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Convert a signature to a normalized lower-S form. - * - * Returns: 1 if sigin was not normalized, 0 if it already was. - * Args: ctx: a secp256k1 context object - * Out: sigout: a pointer to a signature to fill with the normalized form, - * or copy if the input was already normalized. (can be NULL if - * you're only interested in whether the input was already - * normalized). - * In: sigin: a pointer to a signature to check/normalize (cannot be NULL, - * can be identical to sigout) - * - * With ECDSA a third-party can forge a second distinct signature of the same - * message, given a single initial signature, but without knowing the key. This - * is done by negating the S value modulo the order of the curve, 'flipping' - * the sign of the random point R which is not included in the signature. - * - * Forgery of the same message isn't universally problematic, but in systems - * where message malleability or uniqueness of signatures is important this can - * cause issues. This forgery can be blocked by all verifiers forcing signers - * to use a normalized form. - * - * The lower-S form reduces the size of signatures slightly on average when - * variable length encodings (such as DER) are used and is cheap to verify, - * making it a good choice. Security of always using lower-S is assured because - * anyone can trivially modify a signature after the fact to enforce this - * property anyway. - * - * The lower S value is always between 0x1 and - * 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, - * inclusive. - * - * No other forms of ECDSA malleability are known and none seem likely, but - * there is no formal proof that ECDSA, even with this additional restriction, - * is free of other malleability. Commonly used serialization schemes will also - * accept various non-unique encodings, so care should be taken when this - * property is required for an application. - * - * The secp256k1_ecdsa_sign function will by default create signatures in the - * lower-S form, and secp256k1_ecdsa_verify will not accept others. In case - * signatures come from a system that cannot enforce this property, - * secp256k1_ecdsa_signature_normalize must be called before verification. - */ -SECP256K1_API int secp256k1_ecdsa_signature_normalize( - const secp256k1_context* ctx, - secp256k1_ecdsa_signature *sigout, - const secp256k1_ecdsa_signature *sigin -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3); - -/** An implementation of RFC6979 (using HMAC-SHA256) as nonce generation function. - * If a data pointer is passed, it is assumed to be a pointer to 32 bytes of - * extra entropy. - */ -SECP256K1_API extern const secp256k1_nonce_function secp256k1_nonce_function_rfc6979; - -/** A default safe nonce generation function (currently equal to secp256k1_nonce_function_rfc6979). */ -SECP256K1_API extern const secp256k1_nonce_function secp256k1_nonce_function_default; - -/** Create an ECDSA signature. - * - * Returns: 1: signature created - * 0: the nonce generation function failed, or the private key was invalid. - * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL) - * Out: sig: pointer to an array where the signature will be placed (cannot be NULL) - * In: msg32: the 32-byte message hash being signed (cannot be NULL) - * seckey: pointer to a 32-byte secret key (cannot be NULL) - * noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used - * ndata: pointer to arbitrary data used by the nonce generation function (can be NULL) - * - * The created signature is always in lower-S form. See - * secp256k1_ecdsa_signature_normalize for more details. - */ -SECP256K1_API int secp256k1_ecdsa_sign( - const secp256k1_context* ctx, - secp256k1_ecdsa_signature *sig, - const unsigned char *msg32, - const unsigned char *seckey, - secp256k1_nonce_function noncefp, - const void *ndata -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Verify an ECDSA secret key. - * - * Returns: 1: secret key is valid - * 0: secret key is invalid - * Args: ctx: pointer to a context object (cannot be NULL) - * In: seckey: pointer to a 32-byte secret key (cannot be NULL) - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify( - const secp256k1_context* ctx, - const unsigned char *seckey -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2); - -/** Compute the public key for a secret key. - * - * Returns: 1: secret was valid, public key stores - * 0: secret was invalid, try again - * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL) - * Out: pubkey: pointer to the created public key (cannot be NULL) - * In: seckey: pointer to a 32-byte private key (cannot be NULL) - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create( - const secp256k1_context* ctx, - secp256k1_pubkey *pubkey, - const unsigned char *seckey -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Tweak a private key by adding tweak to it. - * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for - * uniformly random 32-byte arrays, or if the resulting private key - * would be invalid (only when the tweak is the complement of the - * private key). 1 otherwise. - * Args: ctx: pointer to a context object (cannot be NULL). - * In/Out: seckey: pointer to a 32-byte private key. - * In: tweak: pointer to a 32-byte tweak. - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add( - const secp256k1_context* ctx, - unsigned char *seckey, - const unsigned char *tweak -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Tweak a public key by adding tweak times the generator to it. - * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for - * uniformly random 32-byte arrays, or if the resulting public key - * would be invalid (only when the tweak is the complement of the - * corresponding private key). 1 otherwise. - * Args: ctx: pointer to a context object initialized for validation - * (cannot be NULL). - * In/Out: pubkey: pointer to a public key object. - * In: tweak: pointer to a 32-byte tweak. - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add( - const secp256k1_context* ctx, - secp256k1_pubkey *pubkey, - const unsigned char *tweak -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Tweak a private key by multiplying it by a tweak. - * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for - * uniformly random 32-byte arrays, or equal to zero. 1 otherwise. - * Args: ctx: pointer to a context object (cannot be NULL). - * In/Out: seckey: pointer to a 32-byte private key. - * In: tweak: pointer to a 32-byte tweak. - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul( - const secp256k1_context* ctx, - unsigned char *seckey, - const unsigned char *tweak -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Tweak a public key by multiplying it by a tweak value. - * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for - * uniformly random 32-byte arrays, or equal to zero. 1 otherwise. - * Args: ctx: pointer to a context object initialized for validation - * (cannot be NULL). - * In/Out: pubkey: pointer to a public key obkect. - * In: tweak: pointer to a 32-byte tweak. - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul( - const secp256k1_context* ctx, - secp256k1_pubkey *pubkey, - const unsigned char *tweak -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Updates the context randomization. - * Returns: 1: randomization successfully updated - * 0: error - * Args: ctx: pointer to a context object (cannot be NULL) - * In: seed32: pointer to a 32-byte random seed (NULL resets to initial state) - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize( - secp256k1_context* ctx, - const unsigned char *seed32 -) SECP256K1_ARG_NONNULL(1); - -/** Add a number of public keys together. - * Returns: 1: the sum of the public keys is valid. - * 0: the sum of the public keys is not valid. - * Args: ctx: pointer to a context object - * Out: out: pointer to a public key object for placing the resulting public key - * (cannot be NULL) - * In: ins: pointer to array of pointers to public keys (cannot be NULL) - * n: the number of public keys to add together (must be at least 1) - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_combine( - const secp256k1_context* ctx, - secp256k1_pubkey *out, - const secp256k1_pubkey * const * ins, - size_t n -) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_ecdh.h b/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_ecdh.h deleted file mode 100644 index 4b84d7a..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_ecdh.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _SECP256K1_ECDH_ -# define _SECP256K1_ECDH_ - -# include "secp256k1.h" - -# ifdef __cplusplus -extern "C" { -# endif - -/** Compute an EC Diffie-Hellman secret in constant time - * Returns: 1: exponentiation was successful - * 0: scalar was invalid (zero or overflow) - * Args: ctx: pointer to a context object (cannot be NULL) - * Out: result: a 32-byte array which will be populated by an ECDH - * secret computed from the point and scalar - * In: pubkey: a pointer to a secp256k1_pubkey containing an - * initialized public key - * privkey: a 32-byte scalar with which to multiply the point - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdh( - const secp256k1_context* ctx, - unsigned char *result, - const secp256k1_pubkey *pubkey, - const unsigned char *privkey -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_recovery.h b/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_recovery.h deleted file mode 100644 index 0553797..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_recovery.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef _SECP256K1_RECOVERY_ -# define _SECP256K1_RECOVERY_ - -# include "secp256k1.h" - -# ifdef __cplusplus -extern "C" { -# endif - -/** Opaque data structured that holds a parsed ECDSA signature, - * supporting pubkey recovery. - * - * The exact representation of data inside is implementation defined and not - * guaranteed to be portable between different platforms or versions. It is - * however guaranteed to be 65 bytes in size, and can be safely copied/moved. - * If you need to convert to a format suitable for storage or transmission, use - * the secp256k1_ecdsa_signature_serialize_* and - * secp256k1_ecdsa_signature_parse_* functions. - * - * Furthermore, it is guaranteed that identical signatures (including their - * recoverability) will have identical representation, so they can be - * memcmp'ed. - */ -typedef struct { - unsigned char data[65]; -} secp256k1_ecdsa_recoverable_signature; - -/** Parse a compact ECDSA signature (64 bytes + recovery id). - * - * Returns: 1 when the signature could be parsed, 0 otherwise - * Args: ctx: a secp256k1 context object - * Out: sig: a pointer to a signature object - * In: input64: a pointer to a 64-byte compact signature - * recid: the recovery id (0, 1, 2 or 3) - */ -SECP256K1_API int secp256k1_ecdsa_recoverable_signature_parse_compact( - const secp256k1_context* ctx, - secp256k1_ecdsa_recoverable_signature* sig, - const unsigned char *input64, - int recid -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Convert a recoverable signature into a normal signature. - * - * Returns: 1 - * Out: sig: a pointer to a normal signature (cannot be NULL). - * In: sigin: a pointer to a recoverable signature (cannot be NULL). - */ -SECP256K1_API int secp256k1_ecdsa_recoverable_signature_convert( - const secp256k1_context* ctx, - secp256k1_ecdsa_signature* sig, - const secp256k1_ecdsa_recoverable_signature* sigin -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Serialize an ECDSA signature in compact format (64 bytes + recovery id). - * - * Returns: 1 - * Args: ctx: a secp256k1 context object - * Out: output64: a pointer to a 64-byte array of the compact signature (cannot be NULL) - * recid: a pointer to an integer to hold the recovery id (can be NULL). - * In: sig: a pointer to an initialized signature object (cannot be NULL) - */ -SECP256K1_API int secp256k1_ecdsa_recoverable_signature_serialize_compact( - const secp256k1_context* ctx, - unsigned char *output64, - int *recid, - const secp256k1_ecdsa_recoverable_signature* sig -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Create a recoverable ECDSA signature. - * - * Returns: 1: signature created - * 0: the nonce generation function failed, or the private key was invalid. - * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL) - * Out: sig: pointer to an array where the signature will be placed (cannot be NULL) - * In: msg32: the 32-byte message hash being signed (cannot be NULL) - * seckey: pointer to a 32-byte secret key (cannot be NULL) - * noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used - * ndata: pointer to arbitrary data used by the nonce generation function (can be NULL) - */ -SECP256K1_API int secp256k1_ecdsa_sign_recoverable( - const secp256k1_context* ctx, - secp256k1_ecdsa_recoverable_signature *sig, - const unsigned char *msg32, - const unsigned char *seckey, - secp256k1_nonce_function noncefp, - const void *ndata -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Recover an ECDSA public key from a signature. - * - * Returns: 1: public key successfully recovered (which guarantees a correct signature). - * 0: otherwise. - * Args: ctx: pointer to a context object, initialized for verification (cannot be NULL) - * Out: pubkey: pointer to the recovered public key (cannot be NULL) - * In: sig: pointer to initialized signature that supports pubkey recovery (cannot be NULL) - * msg32: the 32-byte message hash assumed to be signed (cannot be NULL) - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_recover( - const secp256k1_context* ctx, - secp256k1_pubkey *pubkey, - const secp256k1_ecdsa_recoverable_signature *sig, - const unsigned char *msg32 -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_schnorr.h b/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_schnorr.h deleted file mode 100644 index dc32fec..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/include/secp256k1_schnorr.h +++ /dev/null @@ -1,173 +0,0 @@ -#ifndef _SECP256K1_SCHNORR_ -# define _SECP256K1_SCHNORR_ - -# include "secp256k1.h" - -# ifdef __cplusplus -extern "C" { -# endif - -/** Create a signature using a custom EC-Schnorr-SHA256 construction. It - * produces non-malleable 64-byte signatures which support public key recovery - * batch validation, and multiparty signing. - * Returns: 1: signature created - * 0: the nonce generation function failed, or the private key was - * invalid. - * Args: ctx: pointer to a context object, initialized for signing - * (cannot be NULL) - * Out: sig64: pointer to a 64-byte array where the signature will be - * placed (cannot be NULL) - * In: msg32: the 32-byte message hash being signed (cannot be NULL) - * seckey: pointer to a 32-byte secret key (cannot be NULL) - * noncefp:pointer to a nonce generation function. If NULL, - * secp256k1_nonce_function_default is used - * ndata: pointer to arbitrary data used by the nonce generation - * function (can be NULL) - */ -SECP256K1_API int secp256k1_schnorr_sign( - const secp256k1_context* ctx, - unsigned char *sig64, - const unsigned char *msg32, - const unsigned char *seckey, - secp256k1_nonce_function noncefp, - const void *ndata -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Verify a signature created by secp256k1_schnorr_sign. - * Returns: 1: correct signature - * 0: incorrect signature - * Args: ctx: a secp256k1 context object, initialized for verification. - * In: sig64: the 64-byte signature being verified (cannot be NULL) - * msg32: the 32-byte message hash being verified (cannot be NULL) - * pubkey: the public key to verify with (cannot be NULL) - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorr_verify( - const secp256k1_context* ctx, - const unsigned char *sig64, - const unsigned char *msg32, - const secp256k1_pubkey *pubkey -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Recover an EC public key from a Schnorr signature created using - * secp256k1_schnorr_sign. - * Returns: 1: public key successfully recovered (which guarantees a correct - * signature). - * 0: otherwise. - * Args: ctx: pointer to a context object, initialized for - * verification (cannot be NULL) - * Out: pubkey: pointer to a pubkey to set to the recovered public key - * (cannot be NULL). - * In: sig64: signature as 64 byte array (cannot be NULL) - * msg32: the 32-byte message hash assumed to be signed (cannot - * be NULL) - */ -SECP256K1_API int secp256k1_schnorr_recover( - const secp256k1_context* ctx, - secp256k1_pubkey *pubkey, - const unsigned char *sig64, - const unsigned char *msg32 -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); - -/** Generate a nonce pair deterministically for use with - * secp256k1_schnorr_partial_sign. - * Returns: 1: valid nonce pair was generated. - * 0: otherwise (nonce generation function failed) - * Args: ctx: pointer to a context object, initialized for signing - * (cannot be NULL) - * Out: pubnonce: public side of the nonce (cannot be NULL) - * privnonce32: private side of the nonce (32 byte) (cannot be NULL) - * In: msg32: the 32-byte message hash assumed to be signed (cannot - * be NULL) - * sec32: the 32-byte private key (cannot be NULL) - * noncefp: pointer to a nonce generation function. If NULL, - * secp256k1_nonce_function_default is used - * noncedata: pointer to arbitrary data used by the nonce generation - * function (can be NULL) - * - * Do not use the output as a private/public key pair for signing/validation. - */ -SECP256K1_API int secp256k1_schnorr_generate_nonce_pair( - const secp256k1_context* ctx, - secp256k1_pubkey *pubnonce, - unsigned char *privnonce32, - const unsigned char *msg32, - const unsigned char *sec32, - secp256k1_nonce_function noncefp, - const void* noncedata -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -/** Produce a partial Schnorr signature, which can be combined using - * secp256k1_schnorr_partial_combine, to end up with a full signature that is - * verifiable using secp256k1_schnorr_verify. - * Returns: 1: signature created successfully. - * 0: no valid signature exists with this combination of keys, nonces - * and message (chance around 1 in 2^128) - * -1: invalid private key, nonce, or public nonces. - * Args: ctx: pointer to context object, initialized for signing (cannot - * be NULL) - * Out: sig64: pointer to 64-byte array to put partial signature in - * In: msg32: pointer to 32-byte message to sign - * sec32: pointer to 32-byte private key - * pubnonce_others: pointer to pubkey containing the sum of the other's - * nonces (see secp256k1_ec_pubkey_combine) - * secnonce32: pointer to 32-byte array containing our nonce - * - * The intended procedure for creating a multiparty signature is: - * - Each signer S[i] with private key x[i] and public key Q[i] runs - * secp256k1_schnorr_generate_nonce_pair to produce a pair (k[i],R[i]) of - * private/public nonces. - * - All signers communicate their public nonces to each other (revealing your - * private nonce can lead to discovery of your private key, so it should be - * considered secret). - * - All signers combine all the public nonces they received (excluding their - * own) using secp256k1_ec_pubkey_combine to obtain an - * Rall[i] = sum(R[0..i-1,i+1..n]). - * - All signers produce a partial signature using - * secp256k1_schnorr_partial_sign, passing in their own private key x[i], - * their own private nonce k[i], and the sum of the others' public nonces - * Rall[i]. - * - All signers communicate their partial signatures to each other. - * - Someone combines all partial signatures using - * secp256k1_schnorr_partial_combine, to obtain a full signature. - * - The resulting signature is validatable using secp256k1_schnorr_verify, with - * public key equal to the result of secp256k1_ec_pubkey_combine of the - * signers' public keys (sum(Q[0..n])). - * - * Note that secp256k1_schnorr_partial_combine and secp256k1_ec_pubkey_combine - * function take their arguments in any order, and it is possible to - * pre-combine several inputs already with one call, and add more inputs later - * by calling the function again (they are commutative and associative). - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorr_partial_sign( - const secp256k1_context* ctx, - unsigned char *sig64, - const unsigned char *msg32, - const unsigned char *sec32, - const secp256k1_pubkey *pubnonce_others, - const unsigned char *secnonce32 -) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5) SECP256K1_ARG_NONNULL(6); - -/** Combine multiple Schnorr partial signatures. - * Returns: 1: the passed signatures were successfully combined. - * 0: the resulting signature is not valid (chance of 1 in 2^256) - * -1: some inputs were invalid, or the signatures were not created - * using the same set of nonces - * Args: ctx: pointer to a context object - * Out: sig64: pointer to a 64-byte array to place the combined signature - * (cannot be NULL) - * In: sig64sin: pointer to an array of n pointers to 64-byte input - * signatures - * n: the number of signatures to combine (at least 1) - */ -SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorr_partial_combine( - const secp256k1_context* ctx, - unsigned char *sig64, - const unsigned char * const * sig64sin, - size_t n -) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/libsecp256k1.pc.in b/node_modules/secp256k1/src/secp256k1-src/libsecp256k1.pc.in deleted file mode 100644 index a0d006f..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/libsecp256k1.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libsecp256k1 -Description: Optimized C library for EC operations on curve secp256k1 -URL: https://github.com/bitcoin-core/secp256k1 -Version: @PACKAGE_VERSION@ -Cflags: -I${includedir} -Libs.private: @SECP_LIBS@ -Libs: -L${libdir} -lsecp256k1 - diff --git a/node_modules/secp256k1/src/secp256k1-src/obj/.npmignore b/node_modules/secp256k1/src/secp256k1-src/obj/.npmignore deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/secp256k1/src/secp256k1-src/sage/group_prover.sage b/node_modules/secp256k1/src/secp256k1-src/sage/group_prover.sage deleted file mode 100644 index ab580c5..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/sage/group_prover.sage +++ /dev/null @@ -1,322 +0,0 @@ -# This code supports verifying group implementations which have branches -# or conditional statements (like cmovs), by allowing each execution path -# to independently set assumptions on input or intermediary variables. -# -# The general approach is: -# * A constraint is a tuple of two sets of of symbolic expressions: -# the first of which are required to evaluate to zero, the second of which -# are required to evaluate to nonzero. -# - A constraint is said to be conflicting if any of its nonzero expressions -# is in the ideal with basis the zero expressions (in other words: when the -# zero expressions imply that one of the nonzero expressions are zero). -# * There is a list of laws that describe the intended behaviour, including -# laws for addition and doubling. Each law is called with the symbolic point -# coordinates as arguments, and returns: -# - A constraint describing the assumptions under which it is applicable, -# called "assumeLaw" -# - A constraint describing the requirements of the law, called "require" -# * Implementations are transliterated into functions that operate as well on -# algebraic input points, and are called once per combination of branches -# exectured. Each execution returns: -# - A constraint describing the assumptions this implementation requires -# (such as Z1=1), called "assumeFormula" -# - A constraint describing the assumptions this specific branch requires, -# but which is by construction guaranteed to cover the entire space by -# merging the results from all branches, called "assumeBranch" -# - The result of the computation -# * All combinations of laws with implementation branches are tried, and: -# - If the combination of assumeLaw, assumeFormula, and assumeBranch results -# in a conflict, it means this law does not apply to this branch, and it is -# skipped. -# - For others, we try to prove the require constraints hold, assuming the -# information in assumeLaw + assumeFormula + assumeBranch, and if this does -# not succeed, we fail. -# + To prove an expression is zero, we check whether it belongs to the -# ideal with the assumed zero expressions as basis. This test is exact. -# + To prove an expression is nonzero, we check whether each of its -# factors is contained in the set of nonzero assumptions' factors. -# This test is not exact, so various combinations of original and -# reduced expressions' factors are tried. -# - If we succeed, we print out the assumptions from assumeFormula that -# weren't implied by assumeLaw already. Those from assumeBranch are skipped, -# as we assume that all constraints in it are complementary with each other. -# -# Based on the sage verification scripts used in the Explicit-Formulas Database -# by Tanja Lange and others, see http://hyperelliptic.org/EFD - -class fastfrac: - """Fractions over rings.""" - - def __init__(self,R,top,bot=1): - """Construct a fractional, given a ring, a numerator, and denominator.""" - self.R = R - if parent(top) == ZZ or parent(top) == R: - self.top = R(top) - self.bot = R(bot) - elif top.__class__ == fastfrac: - self.top = top.top - self.bot = top.bot * bot - else: - self.top = R(numerator(top)) - self.bot = R(denominator(top)) * bot - - def iszero(self,I): - """Return whether this fraction is zero given an ideal.""" - return self.top in I and self.bot not in I - - def reduce(self,assumeZero): - zero = self.R.ideal(map(numerator, assumeZero)) - return fastfrac(self.R, zero.reduce(self.top)) / fastfrac(self.R, zero.reduce(self.bot)) - - def __add__(self,other): - """Add two fractions.""" - if parent(other) == ZZ: - return fastfrac(self.R,self.top + self.bot * other,self.bot) - if other.__class__ == fastfrac: - return fastfrac(self.R,self.top * other.bot + self.bot * other.top,self.bot * other.bot) - return NotImplemented - - def __sub__(self,other): - """Subtract two fractions.""" - if parent(other) == ZZ: - return fastfrac(self.R,self.top - self.bot * other,self.bot) - if other.__class__ == fastfrac: - return fastfrac(self.R,self.top * other.bot - self.bot * other.top,self.bot * other.bot) - return NotImplemented - - def __neg__(self): - """Return the negation of a fraction.""" - return fastfrac(self.R,-self.top,self.bot) - - def __mul__(self,other): - """Multiply two fractions.""" - if parent(other) == ZZ: - return fastfrac(self.R,self.top * other,self.bot) - if other.__class__ == fastfrac: - return fastfrac(self.R,self.top * other.top,self.bot * other.bot) - return NotImplemented - - def __rmul__(self,other): - """Multiply something else with a fraction.""" - return self.__mul__(other) - - def __div__(self,other): - """Divide two fractions.""" - if parent(other) == ZZ: - return fastfrac(self.R,self.top,self.bot * other) - if other.__class__ == fastfrac: - return fastfrac(self.R,self.top * other.bot,self.bot * other.top) - return NotImplemented - - def __pow__(self,other): - """Compute a power of a fraction.""" - if parent(other) == ZZ: - if other < 0: - # Negative powers require flipping top and bottom - return fastfrac(self.R,self.bot ^ (-other),self.top ^ (-other)) - else: - return fastfrac(self.R,self.top ^ other,self.bot ^ other) - return NotImplemented - - def __str__(self): - return "fastfrac((" + str(self.top) + ") / (" + str(self.bot) + "))" - def __repr__(self): - return "%s" % self - - def numerator(self): - return self.top - -class constraints: - """A set of constraints, consisting of zero and nonzero expressions. - - Constraints can either be used to express knowledge or a requirement. - - Both the fields zero and nonzero are maps from expressions to description - strings. The expressions that are the keys in zero are required to be zero, - and the expressions that are the keys in nonzero are required to be nonzero. - - Note that (a != 0) and (b != 0) is the same as (a*b != 0), so all keys in - nonzero could be multiplied into a single key. This is often much less - efficient to work with though, so we keep them separate inside the - constraints. This allows higher-level code to do fast checks on the individual - nonzero elements, or combine them if needed for stronger checks. - - We can't multiply the different zero elements, as it would suffice for one of - the factors to be zero, instead of all of them. Instead, the zero elements are - typically combined into an ideal first. - """ - - def __init__(self, **kwargs): - if 'zero' in kwargs: - self.zero = dict(kwargs['zero']) - else: - self.zero = dict() - if 'nonzero' in kwargs: - self.nonzero = dict(kwargs['nonzero']) - else: - self.nonzero = dict() - - def negate(self): - return constraints(zero=self.nonzero, nonzero=self.zero) - - def __add__(self, other): - zero = self.zero.copy() - zero.update(other.zero) - nonzero = self.nonzero.copy() - nonzero.update(other.nonzero) - return constraints(zero=zero, nonzero=nonzero) - - def __str__(self): - return "constraints(zero=%s,nonzero=%s)" % (self.zero, self.nonzero) - - def __repr__(self): - return "%s" % self - - -def conflicts(R, con): - """Check whether any of the passed non-zero assumptions is implied by the zero assumptions""" - zero = R.ideal(map(numerator, con.zero)) - if 1 in zero: - return True - # First a cheap check whether any of the individual nonzero terms conflict on - # their own. - for nonzero in con.nonzero: - if nonzero.iszero(zero): - return True - # It can be the case that entries in the nonzero set do not individually - # conflict with the zero set, but their combination does. For example, knowing - # that either x or y is zero is equivalent to having x*y in the zero set. - # Having x or y individually in the nonzero set is not a conflict, but both - # simultaneously is, so that is the right thing to check for. - if reduce(lambda a,b: a * b, con.nonzero, fastfrac(R, 1)).iszero(zero): - return True - return False - - -def get_nonzero_set(R, assume): - """Calculate a simple set of nonzero expressions""" - zero = R.ideal(map(numerator, assume.zero)) - nonzero = set() - for nz in map(numerator, assume.nonzero): - for (f,n) in nz.factor(): - nonzero.add(f) - rnz = zero.reduce(nz) - for (f,n) in rnz.factor(): - nonzero.add(f) - return nonzero - - -def prove_nonzero(R, exprs, assume): - """Check whether an expression is provably nonzero, given assumptions""" - zero = R.ideal(map(numerator, assume.zero)) - nonzero = get_nonzero_set(R, assume) - expl = set() - ok = True - for expr in exprs: - if numerator(expr) in zero: - return (False, [exprs[expr]]) - allexprs = reduce(lambda a,b: numerator(a)*numerator(b), exprs, 1) - for (f, n) in allexprs.factor(): - if f not in nonzero: - ok = False - if ok: - return (True, None) - ok = True - for (f, n) in zero.reduce(numerator(allexprs)).factor(): - if f not in nonzero: - ok = False - if ok: - return (True, None) - ok = True - for expr in exprs: - for (f,n) in numerator(expr).factor(): - if f not in nonzero: - ok = False - if ok: - return (True, None) - ok = True - for expr in exprs: - for (f,n) in zero.reduce(numerator(expr)).factor(): - if f not in nonzero: - expl.add(exprs[expr]) - if expl: - return (False, list(expl)) - else: - return (True, None) - - -def prove_zero(R, exprs, assume): - """Check whether all of the passed expressions are provably zero, given assumptions""" - r, e = prove_nonzero(R, dict(map(lambda x: (fastfrac(R, x.bot, 1), exprs[x]), exprs)), assume) - if not r: - return (False, map(lambda x: "Possibly zero denominator: %s" % x, e)) - zero = R.ideal(map(numerator, assume.zero)) - nonzero = prod(x for x in assume.nonzero) - expl = [] - for expr in exprs: - if not expr.iszero(zero): - expl.append(exprs[expr]) - if not expl: - return (True, None) - return (False, expl) - - -def describe_extra(R, assume, assumeExtra): - """Describe what assumptions are added, given existing assumptions""" - zerox = assume.zero.copy() - zerox.update(assumeExtra.zero) - zero = R.ideal(map(numerator, assume.zero)) - zeroextra = R.ideal(map(numerator, zerox)) - nonzero = get_nonzero_set(R, assume) - ret = set() - # Iterate over the extra zero expressions - for base in assumeExtra.zero: - if base not in zero: - add = [] - for (f, n) in numerator(base).factor(): - if f not in nonzero: - add += ["%s" % f] - if add: - ret.add((" * ".join(add)) + " = 0 [%s]" % assumeExtra.zero[base]) - # Iterate over the extra nonzero expressions - for nz in assumeExtra.nonzero: - nzr = zeroextra.reduce(numerator(nz)) - if nzr not in zeroextra: - for (f,n) in nzr.factor(): - if zeroextra.reduce(f) not in nonzero: - ret.add("%s != 0" % zeroextra.reduce(f)) - return ", ".join(x for x in ret) - - -def check_symbolic(R, assumeLaw, assumeAssert, assumeBranch, require): - """Check a set of zero and nonzero requirements, given a set of zero and nonzero assumptions""" - assume = assumeLaw + assumeAssert + assumeBranch - - if conflicts(R, assume): - # This formula does not apply - return None - - describe = describe_extra(R, assumeLaw + assumeBranch, assumeAssert) - - ok, msg = prove_zero(R, require.zero, assume) - if not ok: - return "FAIL, %s fails (assuming %s)" % (str(msg), describe) - - res, expl = prove_nonzero(R, require.nonzero, assume) - if not res: - return "FAIL, %s fails (assuming %s)" % (str(expl), describe) - - if describe != "": - return "OK (assuming %s)" % describe - else: - return "OK" - - -def concrete_verify(c): - for k in c.zero: - if k != 0: - return (False, c.zero[k]) - for k in c.nonzero: - if k == 0: - return (False, c.nonzero[k]) - return (True, None) diff --git a/node_modules/secp256k1/src/secp256k1-src/sage/secp256k1.sage b/node_modules/secp256k1/src/secp256k1-src/sage/secp256k1.sage deleted file mode 100644 index a97e732..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/sage/secp256k1.sage +++ /dev/null @@ -1,306 +0,0 @@ -# Test libsecp256k1' group operation implementations using prover.sage - -import sys - -load("group_prover.sage") -load("weierstrass_prover.sage") - -def formula_secp256k1_gej_double_var(a): - """libsecp256k1's secp256k1_gej_double_var, used by various addition functions""" - rz = a.Z * a.Y - rz = rz * 2 - t1 = a.X^2 - t1 = t1 * 3 - t2 = t1^2 - t3 = a.Y^2 - t3 = t3 * 2 - t4 = t3^2 - t4 = t4 * 2 - t3 = t3 * a.X - rx = t3 - rx = rx * 4 - rx = -rx - rx = rx + t2 - t2 = -t2 - t3 = t3 * 6 - t3 = t3 + t2 - ry = t1 * t3 - t2 = -t4 - ry = ry + t2 - return jacobianpoint(rx, ry, rz) - -def formula_secp256k1_gej_add_var(branch, a, b): - """libsecp256k1's secp256k1_gej_add_var""" - if branch == 0: - return (constraints(), constraints(nonzero={a.Infinity : 'a_infinite'}), b) - if branch == 1: - return (constraints(), constraints(zero={a.Infinity : 'a_finite'}, nonzero={b.Infinity : 'b_infinite'}), a) - z22 = b.Z^2 - z12 = a.Z^2 - u1 = a.X * z22 - u2 = b.X * z12 - s1 = a.Y * z22 - s1 = s1 * b.Z - s2 = b.Y * z12 - s2 = s2 * a.Z - h = -u1 - h = h + u2 - i = -s1 - i = i + s2 - if branch == 2: - r = formula_secp256k1_gej_double_var(a) - return (constraints(), constraints(zero={h : 'h=0', i : 'i=0', a.Infinity : 'a_finite', b.Infinity : 'b_finite'}), r) - if branch == 3: - return (constraints(), constraints(zero={h : 'h=0', a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={i : 'i!=0'}), point_at_infinity()) - i2 = i^2 - h2 = h^2 - h3 = h2 * h - h = h * b.Z - rz = a.Z * h - t = u1 * h2 - rx = t - rx = rx * 2 - rx = rx + h3 - rx = -rx - rx = rx + i2 - ry = -rx - ry = ry + t - ry = ry * i - h3 = h3 * s1 - h3 = -h3 - ry = ry + h3 - return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz)) - -def formula_secp256k1_gej_add_ge_var(branch, a, b): - """libsecp256k1's secp256k1_gej_add_ge_var, which assume bz==1""" - if branch == 0: - return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(nonzero={a.Infinity : 'a_infinite'}), b) - if branch == 1: - return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite'}, nonzero={b.Infinity : 'b_infinite'}), a) - z12 = a.Z^2 - u1 = a.X - u2 = b.X * z12 - s1 = a.Y - s2 = b.Y * z12 - s2 = s2 * a.Z - h = -u1 - h = h + u2 - i = -s1 - i = i + s2 - if (branch == 2): - r = formula_secp256k1_gej_double_var(a) - return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0', i : 'i=0'}), r) - if (branch == 3): - return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0'}, nonzero={i : 'i!=0'}), point_at_infinity()) - i2 = i^2 - h2 = h^2 - h3 = h * h2 - rz = a.Z * h - t = u1 * h2 - rx = t - rx = rx * 2 - rx = rx + h3 - rx = -rx - rx = rx + i2 - ry = -rx - ry = ry + t - ry = ry * i - h3 = h3 * s1 - h3 = -h3 - ry = ry + h3 - return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz)) - -def formula_secp256k1_gej_add_zinv_var(branch, a, b): - """libsecp256k1's secp256k1_gej_add_zinv_var""" - bzinv = b.Z^(-1) - if branch == 0: - return (constraints(), constraints(nonzero={b.Infinity : 'b_infinite'}), a) - if branch == 1: - bzinv2 = bzinv^2 - bzinv3 = bzinv2 * bzinv - rx = b.X * bzinv2 - ry = b.Y * bzinv3 - rz = 1 - return (constraints(), constraints(zero={b.Infinity : 'b_finite'}, nonzero={a.Infinity : 'a_infinite'}), jacobianpoint(rx, ry, rz)) - azz = a.Z * bzinv - z12 = azz^2 - u1 = a.X - u2 = b.X * z12 - s1 = a.Y - s2 = b.Y * z12 - s2 = s2 * azz - h = -u1 - h = h + u2 - i = -s1 - i = i + s2 - if branch == 2: - r = formula_secp256k1_gej_double_var(a) - return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0', i : 'i=0'}), r) - if branch == 3: - return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0'}, nonzero={i : 'i!=0'}), point_at_infinity()) - i2 = i^2 - h2 = h^2 - h3 = h * h2 - rz = a.Z - rz = rz * h - t = u1 * h2 - rx = t - rx = rx * 2 - rx = rx + h3 - rx = -rx - rx = rx + i2 - ry = -rx - ry = ry + t - ry = ry * i - h3 = h3 * s1 - h3 = -h3 - ry = ry + h3 - return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz)) - -def formula_secp256k1_gej_add_ge(branch, a, b): - """libsecp256k1's secp256k1_gej_add_ge""" - zeroes = {} - nonzeroes = {} - a_infinity = False - if (branch & 4) != 0: - nonzeroes.update({a.Infinity : 'a_infinite'}) - a_infinity = True - else: - zeroes.update({a.Infinity : 'a_finite'}) - zz = a.Z^2 - u1 = a.X - u2 = b.X * zz - s1 = a.Y - s2 = b.Y * zz - s2 = s2 * a.Z - t = u1 - t = t + u2 - m = s1 - m = m + s2 - rr = t^2 - m_alt = -u2 - tt = u1 * m_alt - rr = rr + tt - degenerate = (branch & 3) == 3 - if (branch & 1) != 0: - zeroes.update({m : 'm_zero'}) - else: - nonzeroes.update({m : 'm_nonzero'}) - if (branch & 2) != 0: - zeroes.update({rr : 'rr_zero'}) - else: - nonzeroes.update({rr : 'rr_nonzero'}) - rr_alt = s1 - rr_alt = rr_alt * 2 - m_alt = m_alt + u1 - if not degenerate: - rr_alt = rr - m_alt = m - n = m_alt^2 - q = n * t - n = n^2 - if degenerate: - n = m - t = rr_alt^2 - rz = a.Z * m_alt - infinity = False - if (branch & 8) != 0: - if not a_infinity: - infinity = True - zeroes.update({rz : 'r.z=0'}) - else: - nonzeroes.update({rz : 'r.z!=0'}) - rz = rz * 2 - q = -q - t = t + q - rx = t - t = t * 2 - t = t + q - t = t * rr_alt - t = t + n - ry = -t - rx = rx * 4 - ry = ry * 4 - if a_infinity: - rx = b.X - ry = b.Y - rz = 1 - if infinity: - return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zeroes, nonzero=nonzeroes), point_at_infinity()) - return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zeroes, nonzero=nonzeroes), jacobianpoint(rx, ry, rz)) - -def formula_secp256k1_gej_add_ge_old(branch, a, b): - """libsecp256k1's old secp256k1_gej_add_ge, which fails when ay+by=0 but ax!=bx""" - a_infinity = (branch & 1) != 0 - zero = {} - nonzero = {} - if a_infinity: - nonzero.update({a.Infinity : 'a_infinite'}) - else: - zero.update({a.Infinity : 'a_finite'}) - zz = a.Z^2 - u1 = a.X - u2 = b.X * zz - s1 = a.Y - s2 = b.Y * zz - s2 = s2 * a.Z - z = a.Z - t = u1 - t = t + u2 - m = s1 - m = m + s2 - n = m^2 - q = n * t - n = n^2 - rr = t^2 - t = u1 * u2 - t = -t - rr = rr + t - t = rr^2 - rz = m * z - infinity = False - if (branch & 2) != 0: - if not a_infinity: - infinity = True - else: - return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(nonzero={z : 'conflict_a'}, zero={z : 'conflict_b'}), point_at_infinity()) - zero.update({rz : 'r.z=0'}) - else: - nonzero.update({rz : 'r.z!=0'}) - rz = rz * (0 if a_infinity else 2) - rx = t - q = -q - rx = rx + q - q = q * 3 - t = t * 2 - t = t + q - t = t * rr - t = t + n - ry = -t - rx = rx * (0 if a_infinity else 4) - ry = ry * (0 if a_infinity else 4) - t = b.X - t = t * (1 if a_infinity else 0) - rx = rx + t - t = b.Y - t = t * (1 if a_infinity else 0) - ry = ry + t - t = (1 if a_infinity else 0) - rz = rz + t - if infinity: - return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zero, nonzero=nonzero), point_at_infinity()) - return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zero, nonzero=nonzero), jacobianpoint(rx, ry, rz)) - -if __name__ == "__main__": - check_symbolic_jacobian_weierstrass("secp256k1_gej_add_var", 0, 7, 5, formula_secp256k1_gej_add_var) - check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge_var", 0, 7, 5, formula_secp256k1_gej_add_ge_var) - check_symbolic_jacobian_weierstrass("secp256k1_gej_add_zinv_var", 0, 7, 5, formula_secp256k1_gej_add_zinv_var) - check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge", 0, 7, 16, formula_secp256k1_gej_add_ge) - check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge_old [should fail]", 0, 7, 4, formula_secp256k1_gej_add_ge_old) - - if len(sys.argv) >= 2 and sys.argv[1] == "--exhaustive": - check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_var", 0, 7, 5, formula_secp256k1_gej_add_var, 43) - check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge_var", 0, 7, 5, formula_secp256k1_gej_add_ge_var, 43) - check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_zinv_var", 0, 7, 5, formula_secp256k1_gej_add_zinv_var, 43) - check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge", 0, 7, 16, formula_secp256k1_gej_add_ge, 43) - check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge_old [should fail]", 0, 7, 4, formula_secp256k1_gej_add_ge_old, 43) diff --git a/node_modules/secp256k1/src/secp256k1-src/sage/weierstrass_prover.sage b/node_modules/secp256k1/src/secp256k1-src/sage/weierstrass_prover.sage deleted file mode 100644 index 03ef2ec..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/sage/weierstrass_prover.sage +++ /dev/null @@ -1,264 +0,0 @@ -# Prover implementation for Weierstrass curves of the form -# y^2 = x^3 + A * x + B, specifically with a = 0 and b = 7, with group laws -# operating on affine and Jacobian coordinates, including the point at infinity -# represented by a 4th variable in coordinates. - -load("group_prover.sage") - - -class affinepoint: - def __init__(self, x, y, infinity=0): - self.x = x - self.y = y - self.infinity = infinity - def __str__(self): - return "affinepoint(x=%s,y=%s,inf=%s)" % (self.x, self.y, self.infinity) - - -class jacobianpoint: - def __init__(self, x, y, z, infinity=0): - self.X = x - self.Y = y - self.Z = z - self.Infinity = infinity - def __str__(self): - return "jacobianpoint(X=%s,Y=%s,Z=%s,inf=%s)" % (self.X, self.Y, self.Z, self.Infinity) - - -def point_at_infinity(): - return jacobianpoint(1, 1, 1, 1) - - -def negate(p): - if p.__class__ == affinepoint: - return affinepoint(p.x, -p.y) - if p.__class__ == jacobianpoint: - return jacobianpoint(p.X, -p.Y, p.Z) - assert(False) - - -def on_weierstrass_curve(A, B, p): - """Return a set of zero-expressions for an affine point to be on the curve""" - return constraints(zero={p.x^3 + A*p.x + B - p.y^2: 'on_curve'}) - - -def tangential_to_weierstrass_curve(A, B, p12, p3): - """Return a set of zero-expressions for ((x12,y12),(x3,y3)) to be a line that is tangential to the curve at (x12,y12)""" - return constraints(zero={ - (p12.y - p3.y) * (p12.y * 2) - (p12.x^2 * 3 + A) * (p12.x - p3.x): 'tangential_to_curve' - }) - - -def colinear(p1, p2, p3): - """Return a set of zero-expressions for ((x1,y1),(x2,y2),(x3,y3)) to be collinear""" - return constraints(zero={ - (p1.y - p2.y) * (p1.x - p3.x) - (p1.y - p3.y) * (p1.x - p2.x): 'colinear_1', - (p2.y - p3.y) * (p2.x - p1.x) - (p2.y - p1.y) * (p2.x - p3.x): 'colinear_2', - (p3.y - p1.y) * (p3.x - p2.x) - (p3.y - p2.y) * (p3.x - p1.x): 'colinear_3' - }) - - -def good_affine_point(p): - return constraints(nonzero={p.x : 'nonzero_x', p.y : 'nonzero_y'}) - - -def good_jacobian_point(p): - return constraints(nonzero={p.X : 'nonzero_X', p.Y : 'nonzero_Y', p.Z^6 : 'nonzero_Z'}) - - -def good_point(p): - return constraints(nonzero={p.Z^6 : 'nonzero_X'}) - - -def finite(p, *affine_fns): - con = good_point(p) + constraints(zero={p.Infinity : 'finite_point'}) - if p.Z != 0: - return con + reduce(lambda a, b: a + b, (f(affinepoint(p.X / p.Z^2, p.Y / p.Z^3)) for f in affine_fns), con) - else: - return con - -def infinite(p): - return constraints(nonzero={p.Infinity : 'infinite_point'}) - - -def law_jacobian_weierstrass_add(A, B, pa, pb, pA, pB, pC): - """Check whether the passed set of coordinates is a valid Jacobian add, given assumptions""" - assumeLaw = (good_affine_point(pa) + - good_affine_point(pb) + - good_jacobian_point(pA) + - good_jacobian_point(pB) + - on_weierstrass_curve(A, B, pa) + - on_weierstrass_curve(A, B, pb) + - finite(pA) + - finite(pB) + - constraints(nonzero={pa.x - pb.x : 'different_x'})) - require = (finite(pC, lambda pc: on_weierstrass_curve(A, B, pc) + - colinear(pa, pb, negate(pc)))) - return (assumeLaw, require) - - -def law_jacobian_weierstrass_double(A, B, pa, pb, pA, pB, pC): - """Check whether the passed set of coordinates is a valid Jacobian doubling, given assumptions""" - assumeLaw = (good_affine_point(pa) + - good_affine_point(pb) + - good_jacobian_point(pA) + - good_jacobian_point(pB) + - on_weierstrass_curve(A, B, pa) + - on_weierstrass_curve(A, B, pb) + - finite(pA) + - finite(pB) + - constraints(zero={pa.x - pb.x : 'equal_x', pa.y - pb.y : 'equal_y'})) - require = (finite(pC, lambda pc: on_weierstrass_curve(A, B, pc) + - tangential_to_weierstrass_curve(A, B, pa, negate(pc)))) - return (assumeLaw, require) - - -def law_jacobian_weierstrass_add_opposites(A, B, pa, pb, pA, pB, pC): - assumeLaw = (good_affine_point(pa) + - good_affine_point(pb) + - good_jacobian_point(pA) + - good_jacobian_point(pB) + - on_weierstrass_curve(A, B, pa) + - on_weierstrass_curve(A, B, pb) + - finite(pA) + - finite(pB) + - constraints(zero={pa.x - pb.x : 'equal_x', pa.y + pb.y : 'opposite_y'})) - require = infinite(pC) - return (assumeLaw, require) - - -def law_jacobian_weierstrass_add_infinite_a(A, B, pa, pb, pA, pB, pC): - assumeLaw = (good_affine_point(pa) + - good_affine_point(pb) + - good_jacobian_point(pA) + - good_jacobian_point(pB) + - on_weierstrass_curve(A, B, pb) + - infinite(pA) + - finite(pB)) - require = finite(pC, lambda pc: constraints(zero={pc.x - pb.x : 'c.x=b.x', pc.y - pb.y : 'c.y=b.y'})) - return (assumeLaw, require) - - -def law_jacobian_weierstrass_add_infinite_b(A, B, pa, pb, pA, pB, pC): - assumeLaw = (good_affine_point(pa) + - good_affine_point(pb) + - good_jacobian_point(pA) + - good_jacobian_point(pB) + - on_weierstrass_curve(A, B, pa) + - infinite(pB) + - finite(pA)) - require = finite(pC, lambda pc: constraints(zero={pc.x - pa.x : 'c.x=a.x', pc.y - pa.y : 'c.y=a.y'})) - return (assumeLaw, require) - - -def law_jacobian_weierstrass_add_infinite_ab(A, B, pa, pb, pA, pB, pC): - assumeLaw = (good_affine_point(pa) + - good_affine_point(pb) + - good_jacobian_point(pA) + - good_jacobian_point(pB) + - infinite(pA) + - infinite(pB)) - require = infinite(pC) - return (assumeLaw, require) - - -laws_jacobian_weierstrass = { - 'add': law_jacobian_weierstrass_add, - 'double': law_jacobian_weierstrass_double, - 'add_opposite': law_jacobian_weierstrass_add_opposites, - 'add_infinite_a': law_jacobian_weierstrass_add_infinite_a, - 'add_infinite_b': law_jacobian_weierstrass_add_infinite_b, - 'add_infinite_ab': law_jacobian_weierstrass_add_infinite_ab -} - - -def check_exhaustive_jacobian_weierstrass(name, A, B, branches, formula, p): - """Verify an implementation of addition of Jacobian points on a Weierstrass curve, by executing and validating the result for every possible addition in a prime field""" - F = Integers(p) - print "Formula %s on Z%i:" % (name, p) - points = [] - for x in xrange(0, p): - for y in xrange(0, p): - point = affinepoint(F(x), F(y)) - r, e = concrete_verify(on_weierstrass_curve(A, B, point)) - if r: - points.append(point) - - for za in xrange(1, p): - for zb in xrange(1, p): - for pa in points: - for pb in points: - for ia in xrange(2): - for ib in xrange(2): - pA = jacobianpoint(pa.x * F(za)^2, pa.y * F(za)^3, F(za), ia) - pB = jacobianpoint(pb.x * F(zb)^2, pb.y * F(zb)^3, F(zb), ib) - for branch in xrange(0, branches): - assumeAssert, assumeBranch, pC = formula(branch, pA, pB) - pC.X = F(pC.X) - pC.Y = F(pC.Y) - pC.Z = F(pC.Z) - pC.Infinity = F(pC.Infinity) - r, e = concrete_verify(assumeAssert + assumeBranch) - if r: - match = False - for key in laws_jacobian_weierstrass: - assumeLaw, require = laws_jacobian_weierstrass[key](A, B, pa, pb, pA, pB, pC) - r, e = concrete_verify(assumeLaw) - if r: - if match: - print " multiple branches for (%s,%s,%s,%s) + (%s,%s,%s,%s)" % (pA.X, pA.Y, pA.Z, pA.Infinity, pB.X, pB.Y, pB.Z, pB.Infinity) - else: - match = True - r, e = concrete_verify(require) - if not r: - print " failure in branch %i for (%s,%s,%s,%s) + (%s,%s,%s,%s) = (%s,%s,%s,%s): %s" % (branch, pA.X, pA.Y, pA.Z, pA.Infinity, pB.X, pB.Y, pB.Z, pB.Infinity, pC.X, pC.Y, pC.Z, pC.Infinity, e) - print - - -def check_symbolic_function(R, assumeAssert, assumeBranch, f, A, B, pa, pb, pA, pB, pC): - assumeLaw, require = f(A, B, pa, pb, pA, pB, pC) - return check_symbolic(R, assumeLaw, assumeAssert, assumeBranch, require) - -def check_symbolic_jacobian_weierstrass(name, A, B, branches, formula): - """Verify an implementation of addition of Jacobian points on a Weierstrass curve symbolically""" - R. = PolynomialRing(QQ,8,order='invlex') - lift = lambda x: fastfrac(R,x) - ax = lift(ax) - ay = lift(ay) - Az = lift(Az) - bx = lift(bx) - by = lift(by) - Bz = lift(Bz) - Ai = lift(Ai) - Bi = lift(Bi) - - pa = affinepoint(ax, ay, Ai) - pb = affinepoint(bx, by, Bi) - pA = jacobianpoint(ax * Az^2, ay * Az^3, Az, Ai) - pB = jacobianpoint(bx * Bz^2, by * Bz^3, Bz, Bi) - - res = {} - - for key in laws_jacobian_weierstrass: - res[key] = [] - - print ("Formula " + name + ":") - count = 0 - for branch in xrange(branches): - assumeFormula, assumeBranch, pC = formula(branch, pA, pB) - pC.X = lift(pC.X) - pC.Y = lift(pC.Y) - pC.Z = lift(pC.Z) - pC.Infinity = lift(pC.Infinity) - - for key in laws_jacobian_weierstrass: - res[key].append((check_symbolic_function(R, assumeFormula, assumeBranch, laws_jacobian_weierstrass[key], A, B, pa, pb, pA, pB, pC), branch)) - - for key in res: - print " %s:" % key - val = res[key] - for x in val: - if x[0] is not None: - print " branch %i: %s" % (x[1], x[0]) - - print diff --git a/node_modules/secp256k1/src/secp256k1-src/src/asm/field_10x26_arm.s b/node_modules/secp256k1/src/secp256k1-src/src/asm/field_10x26_arm.s deleted file mode 100644 index 5df561f..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/asm/field_10x26_arm.s +++ /dev/null @@ -1,919 +0,0 @@ -@ vim: set tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab syntax=armasm: -/********************************************************************** - * Copyright (c) 2014 Wladimir J. van der Laan * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ -/* -ARM implementation of field_10x26 inner loops. - -Note: - -- To avoid unnecessary loads and make use of available registers, two - 'passes' have every time been interleaved, with the odd passes accumulating c' and d' - which will be added to c and d respectively in the the even passes - -*/ - - .syntax unified - .arch armv7-a - @ eabi attributes - see readelf -A - .eabi_attribute 8, 1 @ Tag_ARM_ISA_use = yes - .eabi_attribute 9, 0 @ Tag_Thumb_ISA_use = no - .eabi_attribute 10, 0 @ Tag_FP_arch = none - .eabi_attribute 24, 1 @ Tag_ABI_align_needed = 8-byte - .eabi_attribute 25, 1 @ Tag_ABI_align_preserved = 8-byte, except leaf SP - .eabi_attribute 30, 2 @ Tag_ABI_optimization_goals = Agressive Speed - .eabi_attribute 34, 1 @ Tag_CPU_unaligned_access = v6 - .text - - @ Field constants - .set field_R0, 0x3d10 - .set field_R1, 0x400 - .set field_not_M, 0xfc000000 @ ~M = ~0x3ffffff - - .align 2 - .global secp256k1_fe_mul_inner - .type secp256k1_fe_mul_inner, %function - @ Arguments: - @ r0 r Restrict: can overlap with a, not with b - @ r1 a - @ r2 b - @ Stack (total 4+10*4 = 44) - @ sp + #0 saved 'r' pointer - @ sp + #4 + 4*X t0,t1,t2,t3,t4,t5,t6,t7,u8,t9 -secp256k1_fe_mul_inner: - stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r14} - sub sp, sp, #48 @ frame=44 + alignment - str r0, [sp, #0] @ save result address, we need it only at the end - - /****************************************** - * Main computation code. - ****************************************** - - Allocation: - r0,r14,r7,r8 scratch - r1 a (pointer) - r2 b (pointer) - r3:r4 c - r5:r6 d - r11:r12 c' - r9:r10 d' - - Note: do not write to r[] here, it may overlap with a[] - */ - - /* A - interleaved with B */ - ldr r7, [r1, #0*4] @ a[0] - ldr r8, [r2, #9*4] @ b[9] - ldr r0, [r1, #1*4] @ a[1] - umull r5, r6, r7, r8 @ d = a[0] * b[9] - ldr r14, [r2, #8*4] @ b[8] - umull r9, r10, r0, r8 @ d' = a[1] * b[9] - ldr r7, [r1, #2*4] @ a[2] - umlal r5, r6, r0, r14 @ d += a[1] * b[8] - ldr r8, [r2, #7*4] @ b[7] - umlal r9, r10, r7, r14 @ d' += a[2] * b[8] - ldr r0, [r1, #3*4] @ a[3] - umlal r5, r6, r7, r8 @ d += a[2] * b[7] - ldr r14, [r2, #6*4] @ b[6] - umlal r9, r10, r0, r8 @ d' += a[3] * b[7] - ldr r7, [r1, #4*4] @ a[4] - umlal r5, r6, r0, r14 @ d += a[3] * b[6] - ldr r8, [r2, #5*4] @ b[5] - umlal r9, r10, r7, r14 @ d' += a[4] * b[6] - ldr r0, [r1, #5*4] @ a[5] - umlal r5, r6, r7, r8 @ d += a[4] * b[5] - ldr r14, [r2, #4*4] @ b[4] - umlal r9, r10, r0, r8 @ d' += a[5] * b[5] - ldr r7, [r1, #6*4] @ a[6] - umlal r5, r6, r0, r14 @ d += a[5] * b[4] - ldr r8, [r2, #3*4] @ b[3] - umlal r9, r10, r7, r14 @ d' += a[6] * b[4] - ldr r0, [r1, #7*4] @ a[7] - umlal r5, r6, r7, r8 @ d += a[6] * b[3] - ldr r14, [r2, #2*4] @ b[2] - umlal r9, r10, r0, r8 @ d' += a[7] * b[3] - ldr r7, [r1, #8*4] @ a[8] - umlal r5, r6, r0, r14 @ d += a[7] * b[2] - ldr r8, [r2, #1*4] @ b[1] - umlal r9, r10, r7, r14 @ d' += a[8] * b[2] - ldr r0, [r1, #9*4] @ a[9] - umlal r5, r6, r7, r8 @ d += a[8] * b[1] - ldr r14, [r2, #0*4] @ b[0] - umlal r9, r10, r0, r8 @ d' += a[9] * b[1] - ldr r7, [r1, #0*4] @ a[0] - umlal r5, r6, r0, r14 @ d += a[9] * b[0] - @ r7,r14 used in B - - bic r0, r5, field_not_M @ t9 = d & M - str r0, [sp, #4 + 4*9] - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - - /* B */ - umull r3, r4, r7, r14 @ c = a[0] * b[0] - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u0 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u0 * R0 - umlal r3, r4, r0, r14 - - bic r14, r3, field_not_M @ t0 = c & M - str r14, [sp, #4 + 0*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u0 * R1 - umlal r3, r4, r0, r14 - - /* C - interleaved with D */ - ldr r7, [r1, #0*4] @ a[0] - ldr r8, [r2, #2*4] @ b[2] - ldr r14, [r2, #1*4] @ b[1] - umull r11, r12, r7, r8 @ c' = a[0] * b[2] - ldr r0, [r1, #1*4] @ a[1] - umlal r3, r4, r7, r14 @ c += a[0] * b[1] - ldr r8, [r2, #0*4] @ b[0] - umlal r11, r12, r0, r14 @ c' += a[1] * b[1] - ldr r7, [r1, #2*4] @ a[2] - umlal r3, r4, r0, r8 @ c += a[1] * b[0] - ldr r14, [r2, #9*4] @ b[9] - umlal r11, r12, r7, r8 @ c' += a[2] * b[0] - ldr r0, [r1, #3*4] @ a[3] - umlal r5, r6, r7, r14 @ d += a[2] * b[9] - ldr r8, [r2, #8*4] @ b[8] - umull r9, r10, r0, r14 @ d' = a[3] * b[9] - ldr r7, [r1, #4*4] @ a[4] - umlal r5, r6, r0, r8 @ d += a[3] * b[8] - ldr r14, [r2, #7*4] @ b[7] - umlal r9, r10, r7, r8 @ d' += a[4] * b[8] - ldr r0, [r1, #5*4] @ a[5] - umlal r5, r6, r7, r14 @ d += a[4] * b[7] - ldr r8, [r2, #6*4] @ b[6] - umlal r9, r10, r0, r14 @ d' += a[5] * b[7] - ldr r7, [r1, #6*4] @ a[6] - umlal r5, r6, r0, r8 @ d += a[5] * b[6] - ldr r14, [r2, #5*4] @ b[5] - umlal r9, r10, r7, r8 @ d' += a[6] * b[6] - ldr r0, [r1, #7*4] @ a[7] - umlal r5, r6, r7, r14 @ d += a[6] * b[5] - ldr r8, [r2, #4*4] @ b[4] - umlal r9, r10, r0, r14 @ d' += a[7] * b[5] - ldr r7, [r1, #8*4] @ a[8] - umlal r5, r6, r0, r8 @ d += a[7] * b[4] - ldr r14, [r2, #3*4] @ b[3] - umlal r9, r10, r7, r8 @ d' += a[8] * b[4] - ldr r0, [r1, #9*4] @ a[9] - umlal r5, r6, r7, r14 @ d += a[8] * b[3] - ldr r8, [r2, #2*4] @ b[2] - umlal r9, r10, r0, r14 @ d' += a[9] * b[3] - umlal r5, r6, r0, r8 @ d += a[9] * b[2] - - bic r0, r5, field_not_M @ u1 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u1 * R0 - umlal r3, r4, r0, r14 - - bic r14, r3, field_not_M @ t1 = c & M - str r14, [sp, #4 + 1*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u1 * R1 - umlal r3, r4, r0, r14 - - /* D */ - adds r3, r3, r11 @ c += c' - adc r4, r4, r12 - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u2 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u2 * R0 - umlal r3, r4, r0, r14 - - bic r14, r3, field_not_M @ t2 = c & M - str r14, [sp, #4 + 2*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u2 * R1 - umlal r3, r4, r0, r14 - - /* E - interleaved with F */ - ldr r7, [r1, #0*4] @ a[0] - ldr r8, [r2, #4*4] @ b[4] - umull r11, r12, r7, r8 @ c' = a[0] * b[4] - ldr r8, [r2, #3*4] @ b[3] - umlal r3, r4, r7, r8 @ c += a[0] * b[3] - ldr r7, [r1, #1*4] @ a[1] - umlal r11, r12, r7, r8 @ c' += a[1] * b[3] - ldr r8, [r2, #2*4] @ b[2] - umlal r3, r4, r7, r8 @ c += a[1] * b[2] - ldr r7, [r1, #2*4] @ a[2] - umlal r11, r12, r7, r8 @ c' += a[2] * b[2] - ldr r8, [r2, #1*4] @ b[1] - umlal r3, r4, r7, r8 @ c += a[2] * b[1] - ldr r7, [r1, #3*4] @ a[3] - umlal r11, r12, r7, r8 @ c' += a[3] * b[1] - ldr r8, [r2, #0*4] @ b[0] - umlal r3, r4, r7, r8 @ c += a[3] * b[0] - ldr r7, [r1, #4*4] @ a[4] - umlal r11, r12, r7, r8 @ c' += a[4] * b[0] - ldr r8, [r2, #9*4] @ b[9] - umlal r5, r6, r7, r8 @ d += a[4] * b[9] - ldr r7, [r1, #5*4] @ a[5] - umull r9, r10, r7, r8 @ d' = a[5] * b[9] - ldr r8, [r2, #8*4] @ b[8] - umlal r5, r6, r7, r8 @ d += a[5] * b[8] - ldr r7, [r1, #6*4] @ a[6] - umlal r9, r10, r7, r8 @ d' += a[6] * b[8] - ldr r8, [r2, #7*4] @ b[7] - umlal r5, r6, r7, r8 @ d += a[6] * b[7] - ldr r7, [r1, #7*4] @ a[7] - umlal r9, r10, r7, r8 @ d' += a[7] * b[7] - ldr r8, [r2, #6*4] @ b[6] - umlal r5, r6, r7, r8 @ d += a[7] * b[6] - ldr r7, [r1, #8*4] @ a[8] - umlal r9, r10, r7, r8 @ d' += a[8] * b[6] - ldr r8, [r2, #5*4] @ b[5] - umlal r5, r6, r7, r8 @ d += a[8] * b[5] - ldr r7, [r1, #9*4] @ a[9] - umlal r9, r10, r7, r8 @ d' += a[9] * b[5] - ldr r8, [r2, #4*4] @ b[4] - umlal r5, r6, r7, r8 @ d += a[9] * b[4] - - bic r0, r5, field_not_M @ u3 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u3 * R0 - umlal r3, r4, r0, r14 - - bic r14, r3, field_not_M @ t3 = c & M - str r14, [sp, #4 + 3*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u3 * R1 - umlal r3, r4, r0, r14 - - /* F */ - adds r3, r3, r11 @ c += c' - adc r4, r4, r12 - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u4 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u4 * R0 - umlal r3, r4, r0, r14 - - bic r14, r3, field_not_M @ t4 = c & M - str r14, [sp, #4 + 4*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u4 * R1 - umlal r3, r4, r0, r14 - - /* G - interleaved with H */ - ldr r7, [r1, #0*4] @ a[0] - ldr r8, [r2, #6*4] @ b[6] - ldr r14, [r2, #5*4] @ b[5] - umull r11, r12, r7, r8 @ c' = a[0] * b[6] - ldr r0, [r1, #1*4] @ a[1] - umlal r3, r4, r7, r14 @ c += a[0] * b[5] - ldr r8, [r2, #4*4] @ b[4] - umlal r11, r12, r0, r14 @ c' += a[1] * b[5] - ldr r7, [r1, #2*4] @ a[2] - umlal r3, r4, r0, r8 @ c += a[1] * b[4] - ldr r14, [r2, #3*4] @ b[3] - umlal r11, r12, r7, r8 @ c' += a[2] * b[4] - ldr r0, [r1, #3*4] @ a[3] - umlal r3, r4, r7, r14 @ c += a[2] * b[3] - ldr r8, [r2, #2*4] @ b[2] - umlal r11, r12, r0, r14 @ c' += a[3] * b[3] - ldr r7, [r1, #4*4] @ a[4] - umlal r3, r4, r0, r8 @ c += a[3] * b[2] - ldr r14, [r2, #1*4] @ b[1] - umlal r11, r12, r7, r8 @ c' += a[4] * b[2] - ldr r0, [r1, #5*4] @ a[5] - umlal r3, r4, r7, r14 @ c += a[4] * b[1] - ldr r8, [r2, #0*4] @ b[0] - umlal r11, r12, r0, r14 @ c' += a[5] * b[1] - ldr r7, [r1, #6*4] @ a[6] - umlal r3, r4, r0, r8 @ c += a[5] * b[0] - ldr r14, [r2, #9*4] @ b[9] - umlal r11, r12, r7, r8 @ c' += a[6] * b[0] - ldr r0, [r1, #7*4] @ a[7] - umlal r5, r6, r7, r14 @ d += a[6] * b[9] - ldr r8, [r2, #8*4] @ b[8] - umull r9, r10, r0, r14 @ d' = a[7] * b[9] - ldr r7, [r1, #8*4] @ a[8] - umlal r5, r6, r0, r8 @ d += a[7] * b[8] - ldr r14, [r2, #7*4] @ b[7] - umlal r9, r10, r7, r8 @ d' += a[8] * b[8] - ldr r0, [r1, #9*4] @ a[9] - umlal r5, r6, r7, r14 @ d += a[8] * b[7] - ldr r8, [r2, #6*4] @ b[6] - umlal r9, r10, r0, r14 @ d' += a[9] * b[7] - umlal r5, r6, r0, r8 @ d += a[9] * b[6] - - bic r0, r5, field_not_M @ u5 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u5 * R0 - umlal r3, r4, r0, r14 - - bic r14, r3, field_not_M @ t5 = c & M - str r14, [sp, #4 + 5*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u5 * R1 - umlal r3, r4, r0, r14 - - /* H */ - adds r3, r3, r11 @ c += c' - adc r4, r4, r12 - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u6 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u6 * R0 - umlal r3, r4, r0, r14 - - bic r14, r3, field_not_M @ t6 = c & M - str r14, [sp, #4 + 6*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u6 * R1 - umlal r3, r4, r0, r14 - - /* I - interleaved with J */ - ldr r8, [r2, #8*4] @ b[8] - ldr r7, [r1, #0*4] @ a[0] - ldr r14, [r2, #7*4] @ b[7] - umull r11, r12, r7, r8 @ c' = a[0] * b[8] - ldr r0, [r1, #1*4] @ a[1] - umlal r3, r4, r7, r14 @ c += a[0] * b[7] - ldr r8, [r2, #6*4] @ b[6] - umlal r11, r12, r0, r14 @ c' += a[1] * b[7] - ldr r7, [r1, #2*4] @ a[2] - umlal r3, r4, r0, r8 @ c += a[1] * b[6] - ldr r14, [r2, #5*4] @ b[5] - umlal r11, r12, r7, r8 @ c' += a[2] * b[6] - ldr r0, [r1, #3*4] @ a[3] - umlal r3, r4, r7, r14 @ c += a[2] * b[5] - ldr r8, [r2, #4*4] @ b[4] - umlal r11, r12, r0, r14 @ c' += a[3] * b[5] - ldr r7, [r1, #4*4] @ a[4] - umlal r3, r4, r0, r8 @ c += a[3] * b[4] - ldr r14, [r2, #3*4] @ b[3] - umlal r11, r12, r7, r8 @ c' += a[4] * b[4] - ldr r0, [r1, #5*4] @ a[5] - umlal r3, r4, r7, r14 @ c += a[4] * b[3] - ldr r8, [r2, #2*4] @ b[2] - umlal r11, r12, r0, r14 @ c' += a[5] * b[3] - ldr r7, [r1, #6*4] @ a[6] - umlal r3, r4, r0, r8 @ c += a[5] * b[2] - ldr r14, [r2, #1*4] @ b[1] - umlal r11, r12, r7, r8 @ c' += a[6] * b[2] - ldr r0, [r1, #7*4] @ a[7] - umlal r3, r4, r7, r14 @ c += a[6] * b[1] - ldr r8, [r2, #0*4] @ b[0] - umlal r11, r12, r0, r14 @ c' += a[7] * b[1] - ldr r7, [r1, #8*4] @ a[8] - umlal r3, r4, r0, r8 @ c += a[7] * b[0] - ldr r14, [r2, #9*4] @ b[9] - umlal r11, r12, r7, r8 @ c' += a[8] * b[0] - ldr r0, [r1, #9*4] @ a[9] - umlal r5, r6, r7, r14 @ d += a[8] * b[9] - ldr r8, [r2, #8*4] @ b[8] - umull r9, r10, r0, r14 @ d' = a[9] * b[9] - umlal r5, r6, r0, r8 @ d += a[9] * b[8] - - bic r0, r5, field_not_M @ u7 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u7 * R0 - umlal r3, r4, r0, r14 - - bic r14, r3, field_not_M @ t7 = c & M - str r14, [sp, #4 + 7*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u7 * R1 - umlal r3, r4, r0, r14 - - /* J */ - adds r3, r3, r11 @ c += c' - adc r4, r4, r12 - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u8 = d & M - str r0, [sp, #4 + 8*4] - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u8 * R0 - umlal r3, r4, r0, r14 - - /****************************************** - * compute and write back result - ****************************************** - Allocation: - r0 r - r3:r4 c - r5:r6 d - r7 t0 - r8 t1 - r9 t2 - r11 u8 - r12 t9 - r1,r2,r10,r14 scratch - - Note: do not read from a[] after here, it may overlap with r[] - */ - ldr r0, [sp, #0] - add r1, sp, #4 + 3*4 @ r[3..7] = t3..7, r11=u8, r12=t9 - ldmia r1, {r2,r7,r8,r9,r10,r11,r12} - add r1, r0, #3*4 - stmia r1, {r2,r7,r8,r9,r10} - - bic r2, r3, field_not_M @ r[8] = c & M - str r2, [r0, #8*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u8 * R1 - umlal r3, r4, r11, r14 - movw r14, field_R0 @ c += d * R0 - umlal r3, r4, r5, r14 - adds r3, r3, r12 @ c += t9 - adc r4, r4, #0 - - add r1, sp, #4 + 0*4 @ r7,r8,r9 = t0,t1,t2 - ldmia r1, {r7,r8,r9} - - ubfx r2, r3, #0, #22 @ r[9] = c & (M >> 4) - str r2, [r0, #9*4] - mov r3, r3, lsr #22 @ c >>= 22 - orr r3, r3, r4, asl #10 - mov r4, r4, lsr #22 - movw r14, field_R1 << 4 @ c += d * (R1 << 4) - umlal r3, r4, r5, r14 - - movw r14, field_R0 >> 4 @ d = c * (R0 >> 4) + t0 (64x64 multiply+add) - umull r5, r6, r3, r14 @ d = c.lo * (R0 >> 4) - adds r5, r5, r7 @ d.lo += t0 - mla r6, r14, r4, r6 @ d.hi += c.hi * (R0 >> 4) - adc r6, r6, 0 @ d.hi += carry - - bic r2, r5, field_not_M @ r[0] = d & M - str r2, [r0, #0*4] - - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - - movw r14, field_R1 >> 4 @ d += c * (R1 >> 4) + t1 (64x64 multiply+add) - umull r1, r2, r3, r14 @ tmp = c.lo * (R1 >> 4) - adds r5, r5, r8 @ d.lo += t1 - adc r6, r6, #0 @ d.hi += carry - adds r5, r5, r1 @ d.lo += tmp.lo - mla r2, r14, r4, r2 @ tmp.hi += c.hi * (R1 >> 4) - adc r6, r6, r2 @ d.hi += carry + tmp.hi - - bic r2, r5, field_not_M @ r[1] = d & M - str r2, [r0, #1*4] - mov r5, r5, lsr #26 @ d >>= 26 (ignore hi) - orr r5, r5, r6, asl #6 - - add r5, r5, r9 @ d += t2 - str r5, [r0, #2*4] @ r[2] = d - - add sp, sp, #48 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} - .size secp256k1_fe_mul_inner, .-secp256k1_fe_mul_inner - - .align 2 - .global secp256k1_fe_sqr_inner - .type secp256k1_fe_sqr_inner, %function - @ Arguments: - @ r0 r Can overlap with a - @ r1 a - @ Stack (total 4+10*4 = 44) - @ sp + #0 saved 'r' pointer - @ sp + #4 + 4*X t0,t1,t2,t3,t4,t5,t6,t7,u8,t9 -secp256k1_fe_sqr_inner: - stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r14} - sub sp, sp, #48 @ frame=44 + alignment - str r0, [sp, #0] @ save result address, we need it only at the end - /****************************************** - * Main computation code. - ****************************************** - - Allocation: - r0,r14,r2,r7,r8 scratch - r1 a (pointer) - r3:r4 c - r5:r6 d - r11:r12 c' - r9:r10 d' - - Note: do not write to r[] here, it may overlap with a[] - */ - /* A interleaved with B */ - ldr r0, [r1, #1*4] @ a[1]*2 - ldr r7, [r1, #0*4] @ a[0] - mov r0, r0, asl #1 - ldr r14, [r1, #9*4] @ a[9] - umull r3, r4, r7, r7 @ c = a[0] * a[0] - ldr r8, [r1, #8*4] @ a[8] - mov r7, r7, asl #1 - umull r5, r6, r7, r14 @ d = a[0]*2 * a[9] - ldr r7, [r1, #2*4] @ a[2]*2 - umull r9, r10, r0, r14 @ d' = a[1]*2 * a[9] - ldr r14, [r1, #7*4] @ a[7] - umlal r5, r6, r0, r8 @ d += a[1]*2 * a[8] - mov r7, r7, asl #1 - ldr r0, [r1, #3*4] @ a[3]*2 - umlal r9, r10, r7, r8 @ d' += a[2]*2 * a[8] - ldr r8, [r1, #6*4] @ a[6] - umlal r5, r6, r7, r14 @ d += a[2]*2 * a[7] - mov r0, r0, asl #1 - ldr r7, [r1, #4*4] @ a[4]*2 - umlal r9, r10, r0, r14 @ d' += a[3]*2 * a[7] - ldr r14, [r1, #5*4] @ a[5] - mov r7, r7, asl #1 - umlal r5, r6, r0, r8 @ d += a[3]*2 * a[6] - umlal r9, r10, r7, r8 @ d' += a[4]*2 * a[6] - umlal r5, r6, r7, r14 @ d += a[4]*2 * a[5] - umlal r9, r10, r14, r14 @ d' += a[5] * a[5] - - bic r0, r5, field_not_M @ t9 = d & M - str r0, [sp, #4 + 9*4] - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - - /* B */ - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u0 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u0 * R0 - umlal r3, r4, r0, r14 - bic r14, r3, field_not_M @ t0 = c & M - str r14, [sp, #4 + 0*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u0 * R1 - umlal r3, r4, r0, r14 - - /* C interleaved with D */ - ldr r0, [r1, #0*4] @ a[0]*2 - ldr r14, [r1, #1*4] @ a[1] - mov r0, r0, asl #1 - ldr r8, [r1, #2*4] @ a[2] - umlal r3, r4, r0, r14 @ c += a[0]*2 * a[1] - mov r7, r8, asl #1 @ a[2]*2 - umull r11, r12, r14, r14 @ c' = a[1] * a[1] - ldr r14, [r1, #9*4] @ a[9] - umlal r11, r12, r0, r8 @ c' += a[0]*2 * a[2] - ldr r0, [r1, #3*4] @ a[3]*2 - ldr r8, [r1, #8*4] @ a[8] - umlal r5, r6, r7, r14 @ d += a[2]*2 * a[9] - mov r0, r0, asl #1 - ldr r7, [r1, #4*4] @ a[4]*2 - umull r9, r10, r0, r14 @ d' = a[3]*2 * a[9] - ldr r14, [r1, #7*4] @ a[7] - umlal r5, r6, r0, r8 @ d += a[3]*2 * a[8] - mov r7, r7, asl #1 - ldr r0, [r1, #5*4] @ a[5]*2 - umlal r9, r10, r7, r8 @ d' += a[4]*2 * a[8] - ldr r8, [r1, #6*4] @ a[6] - mov r0, r0, asl #1 - umlal r5, r6, r7, r14 @ d += a[4]*2 * a[7] - umlal r9, r10, r0, r14 @ d' += a[5]*2 * a[7] - umlal r5, r6, r0, r8 @ d += a[5]*2 * a[6] - umlal r9, r10, r8, r8 @ d' += a[6] * a[6] - - bic r0, r5, field_not_M @ u1 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u1 * R0 - umlal r3, r4, r0, r14 - bic r14, r3, field_not_M @ t1 = c & M - str r14, [sp, #4 + 1*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u1 * R1 - umlal r3, r4, r0, r14 - - /* D */ - adds r3, r3, r11 @ c += c' - adc r4, r4, r12 - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u2 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u2 * R0 - umlal r3, r4, r0, r14 - bic r14, r3, field_not_M @ t2 = c & M - str r14, [sp, #4 + 2*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u2 * R1 - umlal r3, r4, r0, r14 - - /* E interleaved with F */ - ldr r7, [r1, #0*4] @ a[0]*2 - ldr r0, [r1, #1*4] @ a[1]*2 - ldr r14, [r1, #2*4] @ a[2] - mov r7, r7, asl #1 - ldr r8, [r1, #3*4] @ a[3] - ldr r2, [r1, #4*4] - umlal r3, r4, r7, r8 @ c += a[0]*2 * a[3] - mov r0, r0, asl #1 - umull r11, r12, r7, r2 @ c' = a[0]*2 * a[4] - mov r2, r2, asl #1 @ a[4]*2 - umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[3] - ldr r8, [r1, #9*4] @ a[9] - umlal r3, r4, r0, r14 @ c += a[1]*2 * a[2] - ldr r0, [r1, #5*4] @ a[5]*2 - umlal r11, r12, r14, r14 @ c' += a[2] * a[2] - ldr r14, [r1, #8*4] @ a[8] - mov r0, r0, asl #1 - umlal r5, r6, r2, r8 @ d += a[4]*2 * a[9] - ldr r7, [r1, #6*4] @ a[6]*2 - umull r9, r10, r0, r8 @ d' = a[5]*2 * a[9] - mov r7, r7, asl #1 - ldr r8, [r1, #7*4] @ a[7] - umlal r5, r6, r0, r14 @ d += a[5]*2 * a[8] - umlal r9, r10, r7, r14 @ d' += a[6]*2 * a[8] - umlal r5, r6, r7, r8 @ d += a[6]*2 * a[7] - umlal r9, r10, r8, r8 @ d' += a[7] * a[7] - - bic r0, r5, field_not_M @ u3 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u3 * R0 - umlal r3, r4, r0, r14 - bic r14, r3, field_not_M @ t3 = c & M - str r14, [sp, #4 + 3*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u3 * R1 - umlal r3, r4, r0, r14 - - /* F */ - adds r3, r3, r11 @ c += c' - adc r4, r4, r12 - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u4 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u4 * R0 - umlal r3, r4, r0, r14 - bic r14, r3, field_not_M @ t4 = c & M - str r14, [sp, #4 + 4*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u4 * R1 - umlal r3, r4, r0, r14 - - /* G interleaved with H */ - ldr r7, [r1, #0*4] @ a[0]*2 - ldr r0, [r1, #1*4] @ a[1]*2 - mov r7, r7, asl #1 - ldr r8, [r1, #5*4] @ a[5] - ldr r2, [r1, #6*4] @ a[6] - umlal r3, r4, r7, r8 @ c += a[0]*2 * a[5] - ldr r14, [r1, #4*4] @ a[4] - mov r0, r0, asl #1 - umull r11, r12, r7, r2 @ c' = a[0]*2 * a[6] - ldr r7, [r1, #2*4] @ a[2]*2 - umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[5] - mov r7, r7, asl #1 - ldr r8, [r1, #3*4] @ a[3] - umlal r3, r4, r0, r14 @ c += a[1]*2 * a[4] - mov r0, r2, asl #1 @ a[6]*2 - umlal r11, r12, r7, r14 @ c' += a[2]*2 * a[4] - ldr r14, [r1, #9*4] @ a[9] - umlal r3, r4, r7, r8 @ c += a[2]*2 * a[3] - ldr r7, [r1, #7*4] @ a[7]*2 - umlal r11, r12, r8, r8 @ c' += a[3] * a[3] - mov r7, r7, asl #1 - ldr r8, [r1, #8*4] @ a[8] - umlal r5, r6, r0, r14 @ d += a[6]*2 * a[9] - umull r9, r10, r7, r14 @ d' = a[7]*2 * a[9] - umlal r5, r6, r7, r8 @ d += a[7]*2 * a[8] - umlal r9, r10, r8, r8 @ d' += a[8] * a[8] - - bic r0, r5, field_not_M @ u5 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u5 * R0 - umlal r3, r4, r0, r14 - bic r14, r3, field_not_M @ t5 = c & M - str r14, [sp, #4 + 5*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u5 * R1 - umlal r3, r4, r0, r14 - - /* H */ - adds r3, r3, r11 @ c += c' - adc r4, r4, r12 - adds r5, r5, r9 @ d += d' - adc r6, r6, r10 - - bic r0, r5, field_not_M @ u6 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u6 * R0 - umlal r3, r4, r0, r14 - bic r14, r3, field_not_M @ t6 = c & M - str r14, [sp, #4 + 6*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u6 * R1 - umlal r3, r4, r0, r14 - - /* I interleaved with J */ - ldr r7, [r1, #0*4] @ a[0]*2 - ldr r0, [r1, #1*4] @ a[1]*2 - mov r7, r7, asl #1 - ldr r8, [r1, #7*4] @ a[7] - ldr r2, [r1, #8*4] @ a[8] - umlal r3, r4, r7, r8 @ c += a[0]*2 * a[7] - ldr r14, [r1, #6*4] @ a[6] - mov r0, r0, asl #1 - umull r11, r12, r7, r2 @ c' = a[0]*2 * a[8] - ldr r7, [r1, #2*4] @ a[2]*2 - umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[7] - ldr r8, [r1, #5*4] @ a[5] - umlal r3, r4, r0, r14 @ c += a[1]*2 * a[6] - ldr r0, [r1, #3*4] @ a[3]*2 - mov r7, r7, asl #1 - umlal r11, r12, r7, r14 @ c' += a[2]*2 * a[6] - ldr r14, [r1, #4*4] @ a[4] - mov r0, r0, asl #1 - umlal r3, r4, r7, r8 @ c += a[2]*2 * a[5] - mov r2, r2, asl #1 @ a[8]*2 - umlal r11, r12, r0, r8 @ c' += a[3]*2 * a[5] - umlal r3, r4, r0, r14 @ c += a[3]*2 * a[4] - umlal r11, r12, r14, r14 @ c' += a[4] * a[4] - ldr r8, [r1, #9*4] @ a[9] - umlal r5, r6, r2, r8 @ d += a[8]*2 * a[9] - @ r8 will be used in J - - bic r0, r5, field_not_M @ u7 = d & M - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u7 * R0 - umlal r3, r4, r0, r14 - bic r14, r3, field_not_M @ t7 = c & M - str r14, [sp, #4 + 7*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u7 * R1 - umlal r3, r4, r0, r14 - - /* J */ - adds r3, r3, r11 @ c += c' - adc r4, r4, r12 - umlal r5, r6, r8, r8 @ d += a[9] * a[9] - - bic r0, r5, field_not_M @ u8 = d & M - str r0, [sp, #4 + 8*4] - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - movw r14, field_R0 @ c += u8 * R0 - umlal r3, r4, r0, r14 - - /****************************************** - * compute and write back result - ****************************************** - Allocation: - r0 r - r3:r4 c - r5:r6 d - r7 t0 - r8 t1 - r9 t2 - r11 u8 - r12 t9 - r1,r2,r10,r14 scratch - - Note: do not read from a[] after here, it may overlap with r[] - */ - ldr r0, [sp, #0] - add r1, sp, #4 + 3*4 @ r[3..7] = t3..7, r11=u8, r12=t9 - ldmia r1, {r2,r7,r8,r9,r10,r11,r12} - add r1, r0, #3*4 - stmia r1, {r2,r7,r8,r9,r10} - - bic r2, r3, field_not_M @ r[8] = c & M - str r2, [r0, #8*4] - mov r3, r3, lsr #26 @ c >>= 26 - orr r3, r3, r4, asl #6 - mov r4, r4, lsr #26 - mov r14, field_R1 @ c += u8 * R1 - umlal r3, r4, r11, r14 - movw r14, field_R0 @ c += d * R0 - umlal r3, r4, r5, r14 - adds r3, r3, r12 @ c += t9 - adc r4, r4, #0 - - add r1, sp, #4 + 0*4 @ r7,r8,r9 = t0,t1,t2 - ldmia r1, {r7,r8,r9} - - ubfx r2, r3, #0, #22 @ r[9] = c & (M >> 4) - str r2, [r0, #9*4] - mov r3, r3, lsr #22 @ c >>= 22 - orr r3, r3, r4, asl #10 - mov r4, r4, lsr #22 - movw r14, field_R1 << 4 @ c += d * (R1 << 4) - umlal r3, r4, r5, r14 - - movw r14, field_R0 >> 4 @ d = c * (R0 >> 4) + t0 (64x64 multiply+add) - umull r5, r6, r3, r14 @ d = c.lo * (R0 >> 4) - adds r5, r5, r7 @ d.lo += t0 - mla r6, r14, r4, r6 @ d.hi += c.hi * (R0 >> 4) - adc r6, r6, 0 @ d.hi += carry - - bic r2, r5, field_not_M @ r[0] = d & M - str r2, [r0, #0*4] - - mov r5, r5, lsr #26 @ d >>= 26 - orr r5, r5, r6, asl #6 - mov r6, r6, lsr #26 - - movw r14, field_R1 >> 4 @ d += c * (R1 >> 4) + t1 (64x64 multiply+add) - umull r1, r2, r3, r14 @ tmp = c.lo * (R1 >> 4) - adds r5, r5, r8 @ d.lo += t1 - adc r6, r6, #0 @ d.hi += carry - adds r5, r5, r1 @ d.lo += tmp.lo - mla r2, r14, r4, r2 @ tmp.hi += c.hi * (R1 >> 4) - adc r6, r6, r2 @ d.hi += carry + tmp.hi - - bic r2, r5, field_not_M @ r[1] = d & M - str r2, [r0, #1*4] - mov r5, r5, lsr #26 @ d >>= 26 (ignore hi) - orr r5, r5, r6, asl #6 - - add r5, r5, r9 @ d += t2 - str r5, [r0, #2*4] @ r[2] = d - - add sp, sp, #48 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} - .size secp256k1_fe_sqr_inner, .-secp256k1_fe_sqr_inner - diff --git a/node_modules/secp256k1/src/secp256k1-src/src/basic-config.h b/node_modules/secp256k1/src/secp256k1-src/src/basic-config.h deleted file mode 100644 index c4c16eb..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/basic-config.h +++ /dev/null @@ -1,32 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_BASIC_CONFIG_ -#define _SECP256K1_BASIC_CONFIG_ - -#ifdef USE_BASIC_CONFIG - -#undef USE_ASM_X86_64 -#undef USE_ENDOMORPHISM -#undef USE_FIELD_10X26 -#undef USE_FIELD_5X52 -#undef USE_FIELD_INV_BUILTIN -#undef USE_FIELD_INV_NUM -#undef USE_NUM_GMP -#undef USE_NUM_NONE -#undef USE_SCALAR_4X64 -#undef USE_SCALAR_8X32 -#undef USE_SCALAR_INV_BUILTIN -#undef USE_SCALAR_INV_NUM - -#define USE_NUM_NONE 1 -#define USE_FIELD_INV_BUILTIN 1 -#define USE_SCALAR_INV_BUILTIN 1 -#define USE_FIELD_10X26 1 -#define USE_SCALAR_8X32 1 - -#endif // USE_BASIC_CONFIG -#endif // _SECP256K1_BASIC_CONFIG_ diff --git a/node_modules/secp256k1/src/secp256k1-src/src/bench.h b/node_modules/secp256k1/src/secp256k1-src/src/bench.h deleted file mode 100644 index 3a71b4a..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/bench.h +++ /dev/null @@ -1,66 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_BENCH_H_ -#define _SECP256K1_BENCH_H_ - -#include -#include -#include "sys/time.h" - -static double gettimedouble(void) { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_usec * 0.000001 + tv.tv_sec; -} - -void print_number(double x) { - double y = x; - int c = 0; - if (y < 0.0) { - y = -y; - } - while (y < 100.0) { - y *= 10.0; - c++; - } - printf("%.*f", c, x); -} - -void run_benchmark(char *name, void (*benchmark)(void*), void (*setup)(void*), void (*teardown)(void*), void* data, int count, int iter) { - int i; - double min = HUGE_VAL; - double sum = 0.0; - double max = 0.0; - for (i = 0; i < count; i++) { - double begin, total; - if (setup != NULL) { - setup(data); - } - begin = gettimedouble(); - benchmark(data); - total = gettimedouble() - begin; - if (teardown != NULL) { - teardown(data); - } - if (total < min) { - min = total; - } - if (total > max) { - max = total; - } - sum += total; - } - printf("%s: min ", name); - print_number(min * 1000000.0 / iter); - printf("us / avg "); - print_number((sum / count) * 1000000.0 / iter); - printf("us / max "); - print_number(max * 1000000.0 / iter); - printf("us\n"); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/bench_ecdh.c b/node_modules/secp256k1/src/secp256k1-src/src/bench_ecdh.c deleted file mode 100644 index cde5e2d..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/bench_ecdh.c +++ /dev/null @@ -1,54 +0,0 @@ -/********************************************************************** - * Copyright (c) 2015 Pieter Wuille, Andrew Poelstra * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#include - -#include "include/secp256k1.h" -#include "include/secp256k1_ecdh.h" -#include "util.h" -#include "bench.h" - -typedef struct { - secp256k1_context *ctx; - secp256k1_pubkey point; - unsigned char scalar[32]; -} bench_ecdh_t; - -static void bench_ecdh_setup(void* arg) { - int i; - bench_ecdh_t *data = (bench_ecdh_t*)arg; - const unsigned char point[] = { - 0x03, - 0x54, 0x94, 0xc1, 0x5d, 0x32, 0x09, 0x97, 0x06, - 0xc2, 0x39, 0x5f, 0x94, 0x34, 0x87, 0x45, 0xfd, - 0x75, 0x7c, 0xe3, 0x0e, 0x4e, 0x8c, 0x90, 0xfb, - 0xa2, 0xba, 0xd1, 0x84, 0xf8, 0x83, 0xc6, 0x9f - }; - - /* create a context with no capabilities */ - data->ctx = secp256k1_context_create(SECP256K1_FLAGS_TYPE_CONTEXT); - for (i = 0; i < 32; i++) { - data->scalar[i] = i + 1; - } - CHECK(secp256k1_ec_pubkey_parse(data->ctx, &data->point, point, sizeof(point)) == 1); -} - -static void bench_ecdh(void* arg) { - int i; - unsigned char res[32]; - bench_ecdh_t *data = (bench_ecdh_t*)arg; - - for (i = 0; i < 20000; i++) { - CHECK(secp256k1_ecdh(data->ctx, res, &data->point, data->scalar) == 1); - } -} - -int main(void) { - bench_ecdh_t data; - - run_benchmark("ecdh", bench_ecdh, bench_ecdh_setup, NULL, &data, 10, 20000); - return 0; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/bench_internal.c b/node_modules/secp256k1/src/secp256k1-src/src/bench_internal.c deleted file mode 100644 index 0809f77..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/bench_internal.c +++ /dev/null @@ -1,382 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ -#include - -#include "include/secp256k1.h" - -#include "util.h" -#include "hash_impl.h" -#include "num_impl.h" -#include "field_impl.h" -#include "group_impl.h" -#include "scalar_impl.h" -#include "ecmult_const_impl.h" -#include "ecmult_impl.h" -#include "bench.h" -#include "secp256k1.c" - -typedef struct { - secp256k1_scalar scalar_x, scalar_y; - secp256k1_fe fe_x, fe_y; - secp256k1_ge ge_x, ge_y; - secp256k1_gej gej_x, gej_y; - unsigned char data[64]; - int wnaf[256]; -} bench_inv_t; - -void bench_setup(void* arg) { - bench_inv_t *data = (bench_inv_t*)arg; - - static const unsigned char init_x[32] = { - 0x02, 0x03, 0x05, 0x07, 0x0b, 0x0d, 0x11, 0x13, - 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b, 0x2f, 0x35, - 0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59, - 0x61, 0x65, 0x67, 0x6b, 0x6d, 0x71, 0x7f, 0x83 - }; - - static const unsigned char init_y[32] = { - 0x82, 0x83, 0x85, 0x87, 0x8b, 0x8d, 0x81, 0x83, - 0x97, 0xad, 0xaf, 0xb5, 0xb9, 0xbb, 0xbf, 0xc5, - 0xdb, 0xdd, 0xe3, 0xe7, 0xe9, 0xef, 0xf3, 0xf9, - 0x11, 0x15, 0x17, 0x1b, 0x1d, 0xb1, 0xbf, 0xd3 - }; - - secp256k1_scalar_set_b32(&data->scalar_x, init_x, NULL); - secp256k1_scalar_set_b32(&data->scalar_y, init_y, NULL); - secp256k1_fe_set_b32(&data->fe_x, init_x); - secp256k1_fe_set_b32(&data->fe_y, init_y); - CHECK(secp256k1_ge_set_xo_var(&data->ge_x, &data->fe_x, 0)); - CHECK(secp256k1_ge_set_xo_var(&data->ge_y, &data->fe_y, 1)); - secp256k1_gej_set_ge(&data->gej_x, &data->ge_x); - secp256k1_gej_set_ge(&data->gej_y, &data->ge_y); - memcpy(data->data, init_x, 32); - memcpy(data->data + 32, init_y, 32); -} - -void bench_scalar_add(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 2000000; i++) { - secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y); - } -} - -void bench_scalar_negate(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 2000000; i++) { - secp256k1_scalar_negate(&data->scalar_x, &data->scalar_x); - } -} - -void bench_scalar_sqr(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 200000; i++) { - secp256k1_scalar_sqr(&data->scalar_x, &data->scalar_x); - } -} - -void bench_scalar_mul(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 200000; i++) { - secp256k1_scalar_mul(&data->scalar_x, &data->scalar_x, &data->scalar_y); - } -} - -#ifdef USE_ENDOMORPHISM -void bench_scalar_split(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 20000; i++) { - secp256k1_scalar l, r; - secp256k1_scalar_split_lambda(&l, &r, &data->scalar_x); - secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y); - } -} -#endif - -void bench_scalar_inverse(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 2000; i++) { - secp256k1_scalar_inverse(&data->scalar_x, &data->scalar_x); - secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y); - } -} - -void bench_scalar_inverse_var(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 2000; i++) { - secp256k1_scalar_inverse_var(&data->scalar_x, &data->scalar_x); - secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y); - } -} - -void bench_field_normalize(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 2000000; i++) { - secp256k1_fe_normalize(&data->fe_x); - } -} - -void bench_field_normalize_weak(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 2000000; i++) { - secp256k1_fe_normalize_weak(&data->fe_x); - } -} - -void bench_field_mul(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 200000; i++) { - secp256k1_fe_mul(&data->fe_x, &data->fe_x, &data->fe_y); - } -} - -void bench_field_sqr(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 200000; i++) { - secp256k1_fe_sqr(&data->fe_x, &data->fe_x); - } -} - -void bench_field_inverse(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 20000; i++) { - secp256k1_fe_inv(&data->fe_x, &data->fe_x); - secp256k1_fe_add(&data->fe_x, &data->fe_y); - } -} - -void bench_field_inverse_var(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 20000; i++) { - secp256k1_fe_inv_var(&data->fe_x, &data->fe_x); - secp256k1_fe_add(&data->fe_x, &data->fe_y); - } -} - -void bench_field_sqrt(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 20000; i++) { - secp256k1_fe_sqrt(&data->fe_x, &data->fe_x); - secp256k1_fe_add(&data->fe_x, &data->fe_y); - } -} - -void bench_group_double_var(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 200000; i++) { - secp256k1_gej_double_var(&data->gej_x, &data->gej_x, NULL); - } -} - -void bench_group_add_var(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 200000; i++) { - secp256k1_gej_add_var(&data->gej_x, &data->gej_x, &data->gej_y, NULL); - } -} - -void bench_group_add_affine(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 200000; i++) { - secp256k1_gej_add_ge(&data->gej_x, &data->gej_x, &data->ge_y); - } -} - -void bench_group_add_affine_var(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 200000; i++) { - secp256k1_gej_add_ge_var(&data->gej_x, &data->gej_x, &data->ge_y, NULL); - } -} - -void bench_group_jacobi_var(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 20000; i++) { - secp256k1_gej_has_quad_y_var(&data->gej_x); - } -} - -void bench_ecmult_wnaf(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 20000; i++) { - secp256k1_ecmult_wnaf(data->wnaf, 256, &data->scalar_x, WINDOW_A); - secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y); - } -} - -void bench_wnaf_const(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - - for (i = 0; i < 20000; i++) { - secp256k1_wnaf_const(data->wnaf, data->scalar_x, WINDOW_A); - secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y); - } -} - - -void bench_sha256(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - secp256k1_sha256_t sha; - - for (i = 0; i < 20000; i++) { - secp256k1_sha256_initialize(&sha); - secp256k1_sha256_write(&sha, data->data, 32); - secp256k1_sha256_finalize(&sha, data->data); - } -} - -void bench_hmac_sha256(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - secp256k1_hmac_sha256_t hmac; - - for (i = 0; i < 20000; i++) { - secp256k1_hmac_sha256_initialize(&hmac, data->data, 32); - secp256k1_hmac_sha256_write(&hmac, data->data, 32); - secp256k1_hmac_sha256_finalize(&hmac, data->data); - } -} - -void bench_rfc6979_hmac_sha256(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - secp256k1_rfc6979_hmac_sha256_t rng; - - for (i = 0; i < 20000; i++) { - secp256k1_rfc6979_hmac_sha256_initialize(&rng, data->data, 64); - secp256k1_rfc6979_hmac_sha256_generate(&rng, data->data, 32); - } -} - -void bench_context_verify(void* arg) { - int i; - (void)arg; - for (i = 0; i < 20; i++) { - secp256k1_context_destroy(secp256k1_context_create(SECP256K1_CONTEXT_VERIFY)); - } -} - -void bench_context_sign(void* arg) { - int i; - (void)arg; - for (i = 0; i < 200; i++) { - secp256k1_context_destroy(secp256k1_context_create(SECP256K1_CONTEXT_SIGN)); - } -} - -#ifndef USE_NUM_NONE -void bench_num_jacobi(void* arg) { - int i; - bench_inv_t *data = (bench_inv_t*)arg; - secp256k1_num nx, norder; - - secp256k1_scalar_get_num(&nx, &data->scalar_x); - secp256k1_scalar_order_get_num(&norder); - secp256k1_scalar_get_num(&norder, &data->scalar_y); - - for (i = 0; i < 200000; i++) { - secp256k1_num_jacobi(&nx, &norder); - } -} -#endif - -int have_flag(int argc, char** argv, char *flag) { - char** argm = argv + argc; - argv++; - if (argv == argm) { - return 1; - } - while (argv != NULL && argv != argm) { - if (strcmp(*argv, flag) == 0) { - return 1; - } - argv++; - } - return 0; -} - -int main(int argc, char **argv) { - bench_inv_t data; - if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "add")) run_benchmark("scalar_add", bench_scalar_add, bench_setup, NULL, &data, 10, 2000000); - if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "negate")) run_benchmark("scalar_negate", bench_scalar_negate, bench_setup, NULL, &data, 10, 2000000); - if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "sqr")) run_benchmark("scalar_sqr", bench_scalar_sqr, bench_setup, NULL, &data, 10, 200000); - if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "mul")) run_benchmark("scalar_mul", bench_scalar_mul, bench_setup, NULL, &data, 10, 200000); -#ifdef USE_ENDOMORPHISM - if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "split")) run_benchmark("scalar_split", bench_scalar_split, bench_setup, NULL, &data, 10, 20000); -#endif - if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "inverse")) run_benchmark("scalar_inverse", bench_scalar_inverse, bench_setup, NULL, &data, 10, 2000); - if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "inverse")) run_benchmark("scalar_inverse_var", bench_scalar_inverse_var, bench_setup, NULL, &data, 10, 2000); - - if (have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize", bench_field_normalize, bench_setup, NULL, &data, 10, 2000000); - if (have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize_weak", bench_field_normalize_weak, bench_setup, NULL, &data, 10, 2000000); - if (have_flag(argc, argv, "field") || have_flag(argc, argv, "sqr")) run_benchmark("field_sqr", bench_field_sqr, bench_setup, NULL, &data, 10, 200000); - if (have_flag(argc, argv, "field") || have_flag(argc, argv, "mul")) run_benchmark("field_mul", bench_field_mul, bench_setup, NULL, &data, 10, 200000); - if (have_flag(argc, argv, "field") || have_flag(argc, argv, "inverse")) run_benchmark("field_inverse", bench_field_inverse, bench_setup, NULL, &data, 10, 20000); - if (have_flag(argc, argv, "field") || have_flag(argc, argv, "inverse")) run_benchmark("field_inverse_var", bench_field_inverse_var, bench_setup, NULL, &data, 10, 20000); - if (have_flag(argc, argv, "field") || have_flag(argc, argv, "sqrt")) run_benchmark("field_sqrt", bench_field_sqrt, bench_setup, NULL, &data, 10, 20000); - - if (have_flag(argc, argv, "group") || have_flag(argc, argv, "double")) run_benchmark("group_double_var", bench_group_double_var, bench_setup, NULL, &data, 10, 200000); - if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_var", bench_group_add_var, bench_setup, NULL, &data, 10, 200000); - if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_affine", bench_group_add_affine, bench_setup, NULL, &data, 10, 200000); - if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_affine_var", bench_group_add_affine_var, bench_setup, NULL, &data, 10, 200000); - if (have_flag(argc, argv, "group") || have_flag(argc, argv, "jacobi")) run_benchmark("group_jacobi_var", bench_group_jacobi_var, bench_setup, NULL, &data, 10, 20000); - - if (have_flag(argc, argv, "ecmult") || have_flag(argc, argv, "wnaf")) run_benchmark("wnaf_const", bench_wnaf_const, bench_setup, NULL, &data, 10, 20000); - if (have_flag(argc, argv, "ecmult") || have_flag(argc, argv, "wnaf")) run_benchmark("ecmult_wnaf", bench_ecmult_wnaf, bench_setup, NULL, &data, 10, 20000); - - if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "sha256")) run_benchmark("hash_sha256", bench_sha256, bench_setup, NULL, &data, 10, 20000); - if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "hmac")) run_benchmark("hash_hmac_sha256", bench_hmac_sha256, bench_setup, NULL, &data, 10, 20000); - if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "rng6979")) run_benchmark("hash_rfc6979_hmac_sha256", bench_rfc6979_hmac_sha256, bench_setup, NULL, &data, 10, 20000); - - if (have_flag(argc, argv, "context") || have_flag(argc, argv, "verify")) run_benchmark("context_verify", bench_context_verify, bench_setup, NULL, &data, 10, 20); - if (have_flag(argc, argv, "context") || have_flag(argc, argv, "sign")) run_benchmark("context_sign", bench_context_sign, bench_setup, NULL, &data, 10, 200); - -#ifndef USE_NUM_NONE - if (have_flag(argc, argv, "num") || have_flag(argc, argv, "jacobi")) run_benchmark("num_jacobi", bench_num_jacobi, bench_setup, NULL, &data, 10, 200000); -#endif - return 0; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/bench_recover.c b/node_modules/secp256k1/src/secp256k1-src/src/bench_recover.c deleted file mode 100644 index 6489378..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/bench_recover.c +++ /dev/null @@ -1,60 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#include "include/secp256k1.h" -#include "include/secp256k1_recovery.h" -#include "util.h" -#include "bench.h" - -typedef struct { - secp256k1_context *ctx; - unsigned char msg[32]; - unsigned char sig[64]; -} bench_recover_t; - -void bench_recover(void* arg) { - int i; - bench_recover_t *data = (bench_recover_t*)arg; - secp256k1_pubkey pubkey; - unsigned char pubkeyc[33]; - - for (i = 0; i < 20000; i++) { - int j; - size_t pubkeylen = 33; - secp256k1_ecdsa_recoverable_signature sig; - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(data->ctx, &sig, data->sig, i % 2)); - CHECK(secp256k1_ecdsa_recover(data->ctx, &pubkey, &sig, data->msg)); - CHECK(secp256k1_ec_pubkey_serialize(data->ctx, pubkeyc, &pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED)); - for (j = 0; j < 32; j++) { - data->sig[j + 32] = data->msg[j]; /* Move former message to S. */ - data->msg[j] = data->sig[j]; /* Move former R to message. */ - data->sig[j] = pubkeyc[j + 1]; /* Move recovered pubkey X coordinate to R (which must be a valid X coordinate). */ - } - } -} - -void bench_recover_setup(void* arg) { - int i; - bench_recover_t *data = (bench_recover_t*)arg; - - for (i = 0; i < 32; i++) { - data->msg[i] = 1 + i; - } - for (i = 0; i < 64; i++) { - data->sig[i] = 65 + i; - } -} - -int main(void) { - bench_recover_t data; - - data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY); - - run_benchmark("ecdsa_recover", bench_recover, bench_recover_setup, NULL, &data, 10, 20000); - - secp256k1_context_destroy(data.ctx); - return 0; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/bench_schnorr_verify.c b/node_modules/secp256k1/src/secp256k1-src/src/bench_schnorr_verify.c deleted file mode 100644 index 5f137dd..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/bench_schnorr_verify.c +++ /dev/null @@ -1,73 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#include -#include - -#include "include/secp256k1.h" -#include "include/secp256k1_schnorr.h" -#include "util.h" -#include "bench.h" - -typedef struct { - unsigned char key[32]; - unsigned char sig[64]; - unsigned char pubkey[33]; - size_t pubkeylen; -} benchmark_schnorr_sig_t; - -typedef struct { - secp256k1_context *ctx; - unsigned char msg[32]; - benchmark_schnorr_sig_t sigs[64]; - int numsigs; -} benchmark_schnorr_verify_t; - -static void benchmark_schnorr_init(void* arg) { - int i, k; - benchmark_schnorr_verify_t* data = (benchmark_schnorr_verify_t*)arg; - - for (i = 0; i < 32; i++) { - data->msg[i] = 1 + i; - } - for (k = 0; k < data->numsigs; k++) { - secp256k1_pubkey pubkey; - for (i = 0; i < 32; i++) { - data->sigs[k].key[i] = 33 + i + k; - } - secp256k1_schnorr_sign(data->ctx, data->sigs[k].sig, data->msg, data->sigs[k].key, NULL, NULL); - data->sigs[k].pubkeylen = 33; - CHECK(secp256k1_ec_pubkey_create(data->ctx, &pubkey, data->sigs[k].key)); - CHECK(secp256k1_ec_pubkey_serialize(data->ctx, data->sigs[k].pubkey, &data->sigs[k].pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED)); - } -} - -static void benchmark_schnorr_verify(void* arg) { - int i; - benchmark_schnorr_verify_t* data = (benchmark_schnorr_verify_t*)arg; - - for (i = 0; i < 20000 / data->numsigs; i++) { - secp256k1_pubkey pubkey; - data->sigs[0].sig[(i >> 8) % 64] ^= (i & 0xFF); - CHECK(secp256k1_ec_pubkey_parse(data->ctx, &pubkey, data->sigs[0].pubkey, data->sigs[0].pubkeylen)); - CHECK(secp256k1_schnorr_verify(data->ctx, data->sigs[0].sig, data->msg, &pubkey) == ((i & 0xFF) == 0)); - data->sigs[0].sig[(i >> 8) % 64] ^= (i & 0xFF); - } -} - - - -int main(void) { - benchmark_schnorr_verify_t data; - - data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); - - data.numsigs = 1; - run_benchmark("schnorr_verify", benchmark_schnorr_verify, benchmark_schnorr_init, NULL, &data, 10, 20000); - - secp256k1_context_destroy(data.ctx); - return 0; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/bench_sign.c b/node_modules/secp256k1/src/secp256k1-src/src/bench_sign.c deleted file mode 100644 index ed7224d..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/bench_sign.c +++ /dev/null @@ -1,56 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#include "include/secp256k1.h" -#include "util.h" -#include "bench.h" - -typedef struct { - secp256k1_context* ctx; - unsigned char msg[32]; - unsigned char key[32]; -} bench_sign_t; - -static void bench_sign_setup(void* arg) { - int i; - bench_sign_t *data = (bench_sign_t*)arg; - - for (i = 0; i < 32; i++) { - data->msg[i] = i + 1; - } - for (i = 0; i < 32; i++) { - data->key[i] = i + 65; - } -} - -static void bench_sign(void* arg) { - int i; - bench_sign_t *data = (bench_sign_t*)arg; - - unsigned char sig[74]; - for (i = 0; i < 20000; i++) { - size_t siglen = 74; - int j; - secp256k1_ecdsa_signature signature; - CHECK(secp256k1_ecdsa_sign(data->ctx, &signature, data->msg, data->key, NULL, NULL)); - CHECK(secp256k1_ecdsa_signature_serialize_der(data->ctx, sig, &siglen, &signature)); - for (j = 0; j < 32; j++) { - data->msg[j] = sig[j]; - data->key[j] = sig[j + 32]; - } - } -} - -int main(void) { - bench_sign_t data; - - data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN); - - run_benchmark("ecdsa_sign", bench_sign, bench_sign_setup, NULL, &data, 10, 20000); - - secp256k1_context_destroy(data.ctx); - return 0; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/bench_verify.c b/node_modules/secp256k1/src/secp256k1-src/src/bench_verify.c deleted file mode 100644 index 418defa..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/bench_verify.c +++ /dev/null @@ -1,112 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#include -#include - -#include "include/secp256k1.h" -#include "util.h" -#include "bench.h" - -#ifdef ENABLE_OPENSSL_TESTS -#include -#include -#include -#endif - -typedef struct { - secp256k1_context *ctx; - unsigned char msg[32]; - unsigned char key[32]; - unsigned char sig[72]; - size_t siglen; - unsigned char pubkey[33]; - size_t pubkeylen; -#ifdef ENABLE_OPENSSL_TESTS - EC_GROUP* ec_group; -#endif -} benchmark_verify_t; - -static void benchmark_verify(void* arg) { - int i; - benchmark_verify_t* data = (benchmark_verify_t*)arg; - - for (i = 0; i < 20000; i++) { - secp256k1_pubkey pubkey; - secp256k1_ecdsa_signature sig; - data->sig[data->siglen - 1] ^= (i & 0xFF); - data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF); - data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF); - CHECK(secp256k1_ec_pubkey_parse(data->ctx, &pubkey, data->pubkey, data->pubkeylen) == 1); - CHECK(secp256k1_ecdsa_signature_parse_der(data->ctx, &sig, data->sig, data->siglen) == 1); - CHECK(secp256k1_ecdsa_verify(data->ctx, &sig, data->msg, &pubkey) == (i == 0)); - data->sig[data->siglen - 1] ^= (i & 0xFF); - data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF); - data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF); - } -} - -#ifdef ENABLE_OPENSSL_TESTS -static void benchmark_verify_openssl(void* arg) { - int i; - benchmark_verify_t* data = (benchmark_verify_t*)arg; - - for (i = 0; i < 20000; i++) { - data->sig[data->siglen - 1] ^= (i & 0xFF); - data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF); - data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF); - { - EC_KEY *pkey = EC_KEY_new(); - const unsigned char *pubkey = &data->pubkey[0]; - int result; - - CHECK(pkey != NULL); - result = EC_KEY_set_group(pkey, data->ec_group); - CHECK(result); - result = (o2i_ECPublicKey(&pkey, &pubkey, data->pubkeylen)) != NULL; - CHECK(result); - result = ECDSA_verify(0, &data->msg[0], sizeof(data->msg), &data->sig[0], data->siglen, pkey) == (i == 0); - CHECK(result); - EC_KEY_free(pkey); - } - data->sig[data->siglen - 1] ^= (i & 0xFF); - data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF); - data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF); - } -} -#endif - -int main(void) { - int i; - secp256k1_pubkey pubkey; - secp256k1_ecdsa_signature sig; - benchmark_verify_t data; - - data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); - - for (i = 0; i < 32; i++) { - data.msg[i] = 1 + i; - } - for (i = 0; i < 32; i++) { - data.key[i] = 33 + i; - } - data.siglen = 72; - CHECK(secp256k1_ecdsa_sign(data.ctx, &sig, data.msg, data.key, NULL, NULL)); - CHECK(secp256k1_ecdsa_signature_serialize_der(data.ctx, data.sig, &data.siglen, &sig)); - CHECK(secp256k1_ec_pubkey_create(data.ctx, &pubkey, data.key)); - data.pubkeylen = 33; - CHECK(secp256k1_ec_pubkey_serialize(data.ctx, data.pubkey, &data.pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED) == 1); - - run_benchmark("ecdsa_verify", benchmark_verify, NULL, NULL, &data, 10, 20000); -#ifdef ENABLE_OPENSSL_TESTS - data.ec_group = EC_GROUP_new_by_curve_name(NID_secp256k1); - run_benchmark("ecdsa_verify_openssl", benchmark_verify_openssl, NULL, NULL, &data, 10, 20000); - EC_GROUP_free(data.ec_group); -#endif - - secp256k1_context_destroy(data.ctx); - return 0; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/ecdsa.h b/node_modules/secp256k1/src/secp256k1-src/src/ecdsa.h deleted file mode 100644 index 54ae101..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/ecdsa.h +++ /dev/null @@ -1,21 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECDSA_ -#define _SECP256K1_ECDSA_ - -#include - -#include "scalar.h" -#include "group.h" -#include "ecmult.h" - -static int secp256k1_ecdsa_sig_parse(secp256k1_scalar *r, secp256k1_scalar *s, const unsigned char *sig, size_t size); -static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, size_t *size, const secp256k1_scalar *r, const secp256k1_scalar *s); -static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context *ctx, const secp256k1_scalar* r, const secp256k1_scalar* s, const secp256k1_ge *pubkey, const secp256k1_scalar *message); -static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context *ctx, secp256k1_scalar* r, secp256k1_scalar* s, const secp256k1_scalar *seckey, const secp256k1_scalar *message, const secp256k1_scalar *nonce, int *recid); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/ecdsa_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/ecdsa_impl.h deleted file mode 100644 index d110b4b..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/ecdsa_impl.h +++ /dev/null @@ -1,303 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - - -#ifndef _SECP256K1_ECDSA_IMPL_H_ -#define _SECP256K1_ECDSA_IMPL_H_ - -#include "scalar.h" -#include "field.h" -#include "group.h" -#include "ecmult.h" -#include "ecmult_gen.h" -#include "ecdsa.h" - -/** Group order for secp256k1 defined as 'n' in "Standards for Efficient Cryptography" (SEC2) 2.7.1 - * sage: for t in xrange(1023, -1, -1): - * .. p = 2**256 - 2**32 - t - * .. if p.is_prime(): - * .. print '%x'%p - * .. break - * 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f' - * sage: a = 0 - * sage: b = 7 - * sage: F = FiniteField (p) - * sage: '%x' % (EllipticCurve ([F (a), F (b)]).order()) - * 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141' - */ -static const secp256k1_fe secp256k1_ecdsa_const_order_as_fe = SECP256K1_FE_CONST( - 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL, - 0xBAAEDCE6UL, 0xAF48A03BUL, 0xBFD25E8CUL, 0xD0364141UL -); - -/** Difference between field and order, values 'p' and 'n' values defined in - * "Standards for Efficient Cryptography" (SEC2) 2.7.1. - * sage: p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F - * sage: a = 0 - * sage: b = 7 - * sage: F = FiniteField (p) - * sage: '%x' % (p - EllipticCurve ([F (a), F (b)]).order()) - * '14551231950b75fc4402da1722fc9baee' - */ -static const secp256k1_fe secp256k1_ecdsa_const_p_minus_order = SECP256K1_FE_CONST( - 0, 0, 0, 1, 0x45512319UL, 0x50B75FC4UL, 0x402DA172UL, 0x2FC9BAEEUL -); - -static int secp256k1_der_read_len(const unsigned char **sigp, const unsigned char *sigend) { - int lenleft, b1; - size_t ret = 0; - if (*sigp >= sigend) { - return -1; - } - b1 = *((*sigp)++); - if (b1 == 0xFF) { - /* X.690-0207 8.1.3.5.c the value 0xFF shall not be used. */ - return -1; - } - if ((b1 & 0x80) == 0) { - /* X.690-0207 8.1.3.4 short form length octets */ - return b1; - } - if (b1 == 0x80) { - /* Indefinite length is not allowed in DER. */ - return -1; - } - /* X.690-207 8.1.3.5 long form length octets */ - lenleft = b1 & 0x7F; - if (lenleft > sigend - *sigp) { - return -1; - } - if (**sigp == 0) { - /* Not the shortest possible length encoding. */ - return -1; - } - if ((size_t)lenleft > sizeof(size_t)) { - /* The resulting length would exceed the range of a size_t, so - * certainly longer than the passed array size. - */ - return -1; - } - while (lenleft > 0) { - if ((ret >> ((sizeof(size_t) - 1) * 8)) != 0) { - } - ret = (ret << 8) | **sigp; - if (ret + lenleft > (size_t)(sigend - *sigp)) { - /* Result exceeds the length of the passed array. */ - return -1; - } - (*sigp)++; - lenleft--; - } - if (ret < 128) { - /* Not the shortest possible length encoding. */ - return -1; - } - return ret; -} - -static int secp256k1_der_parse_integer(secp256k1_scalar *r, const unsigned char **sig, const unsigned char *sigend) { - int overflow = 0; - unsigned char ra[32] = {0}; - int rlen; - - if (*sig == sigend || **sig != 0x02) { - /* Not a primitive integer (X.690-0207 8.3.1). */ - return 0; - } - (*sig)++; - rlen = secp256k1_der_read_len(sig, sigend); - if (rlen <= 0 || (*sig) + rlen > sigend) { - /* Exceeds bounds or not at least length 1 (X.690-0207 8.3.1). */ - return 0; - } - if (**sig == 0x00 && rlen > 1 && (((*sig)[1]) & 0x80) == 0x00) { - /* Excessive 0x00 padding. */ - return 0; - } - if (**sig == 0xFF && rlen > 1 && (((*sig)[1]) & 0x80) == 0x80) { - /* Excessive 0xFF padding. */ - return 0; - } - if ((**sig & 0x80) == 0x80) { - /* Negative. */ - overflow = 1; - } - while (rlen > 0 && **sig == 0) { - /* Skip leading zero bytes */ - rlen--; - (*sig)++; - } - if (rlen > 32) { - overflow = 1; - } - if (!overflow) { - memcpy(ra + 32 - rlen, *sig, rlen); - secp256k1_scalar_set_b32(r, ra, &overflow); - } - if (overflow) { - secp256k1_scalar_set_int(r, 0); - } - (*sig) += rlen; - return 1; -} - -static int secp256k1_ecdsa_sig_parse(secp256k1_scalar *rr, secp256k1_scalar *rs, const unsigned char *sig, size_t size) { - const unsigned char *sigend = sig + size; - int rlen; - if (sig == sigend || *(sig++) != 0x30) { - /* The encoding doesn't start with a constructed sequence (X.690-0207 8.9.1). */ - return 0; - } - rlen = secp256k1_der_read_len(&sig, sigend); - if (rlen < 0 || sig + rlen > sigend) { - /* Tuple exceeds bounds */ - return 0; - } - if (sig + rlen != sigend) { - /* Garbage after tuple. */ - return 0; - } - - if (!secp256k1_der_parse_integer(rr, &sig, sigend)) { - return 0; - } - if (!secp256k1_der_parse_integer(rs, &sig, sigend)) { - return 0; - } - - if (sig != sigend) { - /* Trailing garbage inside tuple. */ - return 0; - } - - return 1; -} - -static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, size_t *size, const secp256k1_scalar* ar, const secp256k1_scalar* as) { - unsigned char r[33] = {0}, s[33] = {0}; - unsigned char *rp = r, *sp = s; - size_t lenR = 33, lenS = 33; - secp256k1_scalar_get_b32(&r[1], ar); - secp256k1_scalar_get_b32(&s[1], as); - while (lenR > 1 && rp[0] == 0 && rp[1] < 0x80) { lenR--; rp++; } - while (lenS > 1 && sp[0] == 0 && sp[1] < 0x80) { lenS--; sp++; } - if (*size < 6+lenS+lenR) { - *size = 6 + lenS + lenR; - return 0; - } - *size = 6 + lenS + lenR; - sig[0] = 0x30; - sig[1] = 4 + lenS + lenR; - sig[2] = 0x02; - sig[3] = lenR; - memcpy(sig+4, rp, lenR); - sig[4+lenR] = 0x02; - sig[5+lenR] = lenS; - memcpy(sig+lenR+6, sp, lenS); - return 1; -} - -static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context *ctx, const secp256k1_scalar *sigr, const secp256k1_scalar *sigs, const secp256k1_ge *pubkey, const secp256k1_scalar *message) { - unsigned char c[32]; - secp256k1_scalar sn, u1, u2; - secp256k1_fe xr; - secp256k1_gej pubkeyj; - secp256k1_gej pr; - - if (secp256k1_scalar_is_zero(sigr) || secp256k1_scalar_is_zero(sigs)) { - return 0; - } - - secp256k1_scalar_inverse_var(&sn, sigs); - secp256k1_scalar_mul(&u1, &sn, message); - secp256k1_scalar_mul(&u2, &sn, sigr); - secp256k1_gej_set_ge(&pubkeyj, pubkey); - secp256k1_ecmult(ctx, &pr, &pubkeyj, &u2, &u1); - if (secp256k1_gej_is_infinity(&pr)) { - return 0; - } - secp256k1_scalar_get_b32(c, sigr); - secp256k1_fe_set_b32(&xr, c); - - /** We now have the recomputed R point in pr, and its claimed x coordinate (modulo n) - * in xr. Naively, we would extract the x coordinate from pr (requiring a inversion modulo p), - * compute the remainder modulo n, and compare it to xr. However: - * - * xr == X(pr) mod n - * <=> exists h. (xr + h * n < p && xr + h * n == X(pr)) - * [Since 2 * n > p, h can only be 0 or 1] - * <=> (xr == X(pr)) || (xr + n < p && xr + n == X(pr)) - * [In Jacobian coordinates, X(pr) is pr.x / pr.z^2 mod p] - * <=> (xr == pr.x / pr.z^2 mod p) || (xr + n < p && xr + n == pr.x / pr.z^2 mod p) - * [Multiplying both sides of the equations by pr.z^2 mod p] - * <=> (xr * pr.z^2 mod p == pr.x) || (xr + n < p && (xr + n) * pr.z^2 mod p == pr.x) - * - * Thus, we can avoid the inversion, but we have to check both cases separately. - * secp256k1_gej_eq_x implements the (xr * pr.z^2 mod p == pr.x) test. - */ - if (secp256k1_gej_eq_x_var(&xr, &pr)) { - /* xr * pr.z^2 mod p == pr.x, so the signature is valid. */ - return 1; - } - if (secp256k1_fe_cmp_var(&xr, &secp256k1_ecdsa_const_p_minus_order) >= 0) { - /* xr + n >= p, so we can skip testing the second case. */ - return 0; - } - secp256k1_fe_add(&xr, &secp256k1_ecdsa_const_order_as_fe); - if (secp256k1_gej_eq_x_var(&xr, &pr)) { - /* (xr + n) * pr.z^2 mod p == pr.x, so the signature is valid. */ - return 1; - } - return 0; -} - -static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context *ctx, secp256k1_scalar *sigr, secp256k1_scalar *sigs, const secp256k1_scalar *seckey, const secp256k1_scalar *message, const secp256k1_scalar *nonce, int *recid) { - unsigned char b[32]; - secp256k1_gej rp; - secp256k1_ge r; - secp256k1_scalar n; - int overflow = 0; - - secp256k1_ecmult_gen(ctx, &rp, nonce); - secp256k1_ge_set_gej(&r, &rp); - secp256k1_fe_normalize(&r.x); - secp256k1_fe_normalize(&r.y); - secp256k1_fe_get_b32(b, &r.x); - secp256k1_scalar_set_b32(sigr, b, &overflow); - if (secp256k1_scalar_is_zero(sigr)) { - /* P.x = order is on the curve, so technically sig->r could end up zero, which would be an invalid signature. - * This branch is cryptographically unreachable as hitting it requires finding the discrete log of P.x = N. - */ - secp256k1_gej_clear(&rp); - secp256k1_ge_clear(&r); - return 0; - } - if (recid) { - /* The overflow condition is cryptographically unreachable as hitting it requires finding the discrete log - * of some P where P.x >= order, and only 1 in about 2^127 points meet this criteria. - */ - *recid = (overflow ? 2 : 0) | (secp256k1_fe_is_odd(&r.y) ? 1 : 0); - } - secp256k1_scalar_mul(&n, sigr, seckey); - secp256k1_scalar_add(&n, &n, message); - secp256k1_scalar_inverse(sigs, nonce); - secp256k1_scalar_mul(sigs, sigs, &n); - secp256k1_scalar_clear(&n); - secp256k1_gej_clear(&rp); - secp256k1_ge_clear(&r); - if (secp256k1_scalar_is_zero(sigs)) { - return 0; - } - if (secp256k1_scalar_is_high(sigs)) { - secp256k1_scalar_negate(sigs, sigs); - if (recid) { - *recid ^= 1; - } - } - return 1; -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/eckey.h b/node_modules/secp256k1/src/secp256k1-src/src/eckey.h deleted file mode 100644 index 42739a3..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/eckey.h +++ /dev/null @@ -1,25 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECKEY_ -#define _SECP256K1_ECKEY_ - -#include - -#include "group.h" -#include "scalar.h" -#include "ecmult.h" -#include "ecmult_gen.h" - -static int secp256k1_eckey_pubkey_parse(secp256k1_ge *elem, const unsigned char *pub, size_t size); -static int secp256k1_eckey_pubkey_serialize(secp256k1_ge *elem, unsigned char *pub, size_t *size, int compressed); - -static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar *key, const secp256k1_scalar *tweak); -static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak); -static int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar *key, const secp256k1_scalar *tweak); -static int secp256k1_eckey_pubkey_tweak_mul(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/eckey_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/eckey_impl.h deleted file mode 100644 index ce38071..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/eckey_impl.h +++ /dev/null @@ -1,99 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECKEY_IMPL_H_ -#define _SECP256K1_ECKEY_IMPL_H_ - -#include "eckey.h" - -#include "scalar.h" -#include "field.h" -#include "group.h" -#include "ecmult_gen.h" - -static int secp256k1_eckey_pubkey_parse(secp256k1_ge *elem, const unsigned char *pub, size_t size) { - if (size == 33 && (pub[0] == 0x02 || pub[0] == 0x03)) { - secp256k1_fe x; - return secp256k1_fe_set_b32(&x, pub+1) && secp256k1_ge_set_xo_var(elem, &x, pub[0] == 0x03); - } else if (size == 65 && (pub[0] == 0x04 || pub[0] == 0x06 || pub[0] == 0x07)) { - secp256k1_fe x, y; - if (!secp256k1_fe_set_b32(&x, pub+1) || !secp256k1_fe_set_b32(&y, pub+33)) { - return 0; - } - secp256k1_ge_set_xy(elem, &x, &y); - if ((pub[0] == 0x06 || pub[0] == 0x07) && secp256k1_fe_is_odd(&y) != (pub[0] == 0x07)) { - return 0; - } - return secp256k1_ge_is_valid_var(elem); - } else { - return 0; - } -} - -static int secp256k1_eckey_pubkey_serialize(secp256k1_ge *elem, unsigned char *pub, size_t *size, int compressed) { - if (secp256k1_ge_is_infinity(elem)) { - return 0; - } - secp256k1_fe_normalize_var(&elem->x); - secp256k1_fe_normalize_var(&elem->y); - secp256k1_fe_get_b32(&pub[1], &elem->x); - if (compressed) { - *size = 33; - pub[0] = 0x02 | (secp256k1_fe_is_odd(&elem->y) ? 0x01 : 0x00); - } else { - *size = 65; - pub[0] = 0x04; - secp256k1_fe_get_b32(&pub[33], &elem->y); - } - return 1; -} - -static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar *key, const secp256k1_scalar *tweak) { - secp256k1_scalar_add(key, key, tweak); - if (secp256k1_scalar_is_zero(key)) { - return 0; - } - return 1; -} - -static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak) { - secp256k1_gej pt; - secp256k1_scalar one; - secp256k1_gej_set_ge(&pt, key); - secp256k1_scalar_set_int(&one, 1); - secp256k1_ecmult(ctx, &pt, &pt, &one, tweak); - - if (secp256k1_gej_is_infinity(&pt)) { - return 0; - } - secp256k1_ge_set_gej(key, &pt); - return 1; -} - -static int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar *key, const secp256k1_scalar *tweak) { - if (secp256k1_scalar_is_zero(tweak)) { - return 0; - } - - secp256k1_scalar_mul(key, key, tweak); - return 1; -} - -static int secp256k1_eckey_pubkey_tweak_mul(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak) { - secp256k1_scalar zero; - secp256k1_gej pt; - if (secp256k1_scalar_is_zero(tweak)) { - return 0; - } - - secp256k1_scalar_set_int(&zero, 0); - secp256k1_gej_set_ge(&pt, key); - secp256k1_ecmult(ctx, &pt, &pt, tweak, &zero); - secp256k1_ge_set_gej(key, &pt); - return 1; -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/ecmult.h b/node_modules/secp256k1/src/secp256k1-src/src/ecmult.h deleted file mode 100644 index 2048413..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/ecmult.h +++ /dev/null @@ -1,31 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECMULT_ -#define _SECP256K1_ECMULT_ - -#include "num.h" -#include "group.h" - -typedef struct { - /* For accelerating the computation of a*P + b*G: */ - secp256k1_ge_storage (*pre_g)[]; /* odd multiples of the generator */ -#ifdef USE_ENDOMORPHISM - secp256k1_ge_storage (*pre_g_128)[]; /* odd multiples of 2^128*generator */ -#endif -} secp256k1_ecmult_context; - -static void secp256k1_ecmult_context_init(secp256k1_ecmult_context *ctx); -static void secp256k1_ecmult_context_build(secp256k1_ecmult_context *ctx, const secp256k1_callback *cb); -static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context *dst, - const secp256k1_ecmult_context *src, const secp256k1_callback *cb); -static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context *ctx); -static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context *ctx); - -/** Double multiply: R = na*A + ng*G */ -static void secp256k1_ecmult(const secp256k1_ecmult_context *ctx, secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_const.h b/node_modules/secp256k1/src/secp256k1-src/src/ecmult_const.h deleted file mode 100644 index 2b00976..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_const.h +++ /dev/null @@ -1,15 +0,0 @@ -/********************************************************************** - * Copyright (c) 2015 Andrew Poelstra * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECMULT_CONST_ -#define _SECP256K1_ECMULT_CONST_ - -#include "scalar.h" -#include "group.h" - -static void secp256k1_ecmult_const(secp256k1_gej *r, const secp256k1_ge *a, const secp256k1_scalar *q); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_const_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/ecmult_const_impl.h deleted file mode 100644 index 7a6a253..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_const_impl.h +++ /dev/null @@ -1,239 +0,0 @@ -/********************************************************************** - * Copyright (c) 2015 Pieter Wuille, Andrew Poelstra * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECMULT_CONST_IMPL_ -#define _SECP256K1_ECMULT_CONST_IMPL_ - -#include "scalar.h" -#include "group.h" -#include "ecmult_const.h" -#include "ecmult_impl.h" - -#ifdef USE_ENDOMORPHISM - #define WNAF_BITS 128 -#else - #define WNAF_BITS 256 -#endif -#define WNAF_SIZE(w) ((WNAF_BITS + (w) - 1) / (w)) - -/* This is like `ECMULT_TABLE_GET_GE` but is constant time */ -#define ECMULT_CONST_TABLE_GET_GE(r,pre,n,w) do { \ - int m; \ - int abs_n = (n) * (((n) > 0) * 2 - 1); \ - int idx_n = abs_n / 2; \ - secp256k1_fe neg_y; \ - VERIFY_CHECK(((n) & 1) == 1); \ - VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \ - VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \ - VERIFY_SETUP(secp256k1_fe_clear(&(r)->x)); \ - VERIFY_SETUP(secp256k1_fe_clear(&(r)->y)); \ - for (m = 0; m < ECMULT_TABLE_SIZE(w); m++) { \ - /* This loop is used to avoid secret data in array indices. See - * the comment in ecmult_gen_impl.h for rationale. */ \ - secp256k1_fe_cmov(&(r)->x, &(pre)[m].x, m == idx_n); \ - secp256k1_fe_cmov(&(r)->y, &(pre)[m].y, m == idx_n); \ - } \ - (r)->infinity = 0; \ - secp256k1_fe_negate(&neg_y, &(r)->y, 1); \ - secp256k1_fe_cmov(&(r)->y, &neg_y, (n) != abs_n); \ -} while(0) - - -/** Convert a number to WNAF notation. The number becomes represented by sum(2^{wi} * wnaf[i], i=0..return_val) - * with the following guarantees: - * - each wnaf[i] an odd integer between -(1 << w) and (1 << w) - * - each wnaf[i] is nonzero - * - the number of words set is returned; this is always (WNAF_BITS + w - 1) / w - * - * Adapted from `The Width-w NAF Method Provides Small Memory and Fast Elliptic Scalar - * Multiplications Secure against Side Channel Attacks`, Okeya and Tagaki. M. Joye (Ed.) - * CT-RSA 2003, LNCS 2612, pp. 328-443, 2003. Springer-Verlagy Berlin Heidelberg 2003 - * - * Numbers reference steps of `Algorithm SPA-resistant Width-w NAF with Odd Scalar` on pp. 335 - */ -static int secp256k1_wnaf_const(int *wnaf, secp256k1_scalar s, int w) { - int global_sign; - int skew = 0; - int word = 0; - - /* 1 2 3 */ - int u_last; - int u; - - int flip; - int bit; - secp256k1_scalar neg_s; - int not_neg_one; - /* Note that we cannot handle even numbers by negating them to be odd, as is - * done in other implementations, since if our scalars were specified to have - * width < 256 for performance reasons, their negations would have width 256 - * and we'd lose any performance benefit. Instead, we use a technique from - * Section 4.2 of the Okeya/Tagaki paper, which is to add either 1 (for even) - * or 2 (for odd) to the number we are encoding, returning a skew value indicating - * this, and having the caller compensate after doing the multiplication. */ - - /* Negative numbers will be negated to keep their bit representation below the maximum width */ - flip = secp256k1_scalar_is_high(&s); - /* We add 1 to even numbers, 2 to odd ones, noting that negation flips parity */ - bit = flip ^ (s.d[0] & 1); - /* We check for negative one, since adding 2 to it will cause an overflow */ - secp256k1_scalar_negate(&neg_s, &s); - not_neg_one = !secp256k1_scalar_is_one(&neg_s); - secp256k1_scalar_cadd_bit(&s, bit, not_neg_one); - /* If we had negative one, flip == 1, s.d[0] == 0, bit == 1, so caller expects - * that we added two to it and flipped it. In fact for -1 these operations are - * identical. We only flipped, but since skewing is required (in the sense that - * the skew must be 1 or 2, never zero) and flipping is not, we need to change - * our flags to claim that we only skewed. */ - global_sign = secp256k1_scalar_cond_negate(&s, flip); - global_sign *= not_neg_one * 2 - 1; - skew = 1 << bit; - - /* 4 */ - u_last = secp256k1_scalar_shr_int(&s, w); - while (word * w < WNAF_BITS) { - int sign; - int even; - - /* 4.1 4.4 */ - u = secp256k1_scalar_shr_int(&s, w); - /* 4.2 */ - even = ((u & 1) == 0); - sign = 2 * (u_last > 0) - 1; - u += sign * even; - u_last -= sign * even * (1 << w); - - /* 4.3, adapted for global sign change */ - wnaf[word++] = u_last * global_sign; - - u_last = u; - } - wnaf[word] = u * global_sign; - - VERIFY_CHECK(secp256k1_scalar_is_zero(&s)); - VERIFY_CHECK(word == WNAF_SIZE(w)); - return skew; -} - - -static void secp256k1_ecmult_const(secp256k1_gej *r, const secp256k1_ge *a, const secp256k1_scalar *scalar) { - secp256k1_ge pre_a[ECMULT_TABLE_SIZE(WINDOW_A)]; - secp256k1_ge tmpa; - secp256k1_fe Z; - - int skew_1; - int wnaf_1[1 + WNAF_SIZE(WINDOW_A - 1)]; -#ifdef USE_ENDOMORPHISM - secp256k1_ge pre_a_lam[ECMULT_TABLE_SIZE(WINDOW_A)]; - int wnaf_lam[1 + WNAF_SIZE(WINDOW_A - 1)]; - int skew_lam; - secp256k1_scalar q_1, q_lam; -#endif - - int i; - secp256k1_scalar sc = *scalar; - - /* build wnaf representation for q. */ -#ifdef USE_ENDOMORPHISM - /* split q into q_1 and q_lam (where q = q_1 + q_lam*lambda, and q_1 and q_lam are ~128 bit) */ - secp256k1_scalar_split_lambda(&q_1, &q_lam, &sc); - skew_1 = secp256k1_wnaf_const(wnaf_1, q_1, WINDOW_A - 1); - skew_lam = secp256k1_wnaf_const(wnaf_lam, q_lam, WINDOW_A - 1); -#else - skew_1 = secp256k1_wnaf_const(wnaf_1, sc, WINDOW_A - 1); -#endif - - /* Calculate odd multiples of a. - * All multiples are brought to the same Z 'denominator', which is stored - * in Z. Due to secp256k1' isomorphism we can do all operations pretending - * that the Z coordinate was 1, use affine addition formulae, and correct - * the Z coordinate of the result once at the end. - */ - secp256k1_gej_set_ge(r, a); - secp256k1_ecmult_odd_multiples_table_globalz_windowa(pre_a, &Z, r); - for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) { - secp256k1_fe_normalize_weak(&pre_a[i].y); - } -#ifdef USE_ENDOMORPHISM - for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) { - secp256k1_ge_mul_lambda(&pre_a_lam[i], &pre_a[i]); - } -#endif - - /* first loop iteration (separated out so we can directly set r, rather - * than having it start at infinity, get doubled several times, then have - * its new value added to it) */ - i = wnaf_1[WNAF_SIZE(WINDOW_A - 1)]; - VERIFY_CHECK(i != 0); - ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a, i, WINDOW_A); - secp256k1_gej_set_ge(r, &tmpa); -#ifdef USE_ENDOMORPHISM - i = wnaf_lam[WNAF_SIZE(WINDOW_A - 1)]; - VERIFY_CHECK(i != 0); - ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a_lam, i, WINDOW_A); - secp256k1_gej_add_ge(r, r, &tmpa); -#endif - /* remaining loop iterations */ - for (i = WNAF_SIZE(WINDOW_A - 1) - 1; i >= 0; i--) { - int n; - int j; - for (j = 0; j < WINDOW_A - 1; ++j) { - secp256k1_gej_double_nonzero(r, r, NULL); - } - - n = wnaf_1[i]; - ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A); - VERIFY_CHECK(n != 0); - secp256k1_gej_add_ge(r, r, &tmpa); -#ifdef USE_ENDOMORPHISM - n = wnaf_lam[i]; - ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a_lam, n, WINDOW_A); - VERIFY_CHECK(n != 0); - secp256k1_gej_add_ge(r, r, &tmpa); -#endif - } - - secp256k1_fe_mul(&r->z, &r->z, &Z); - - { - /* Correct for wNAF skew */ - secp256k1_ge correction = *a; - secp256k1_ge_storage correction_1_stor; -#ifdef USE_ENDOMORPHISM - secp256k1_ge_storage correction_lam_stor; -#endif - secp256k1_ge_storage a2_stor; - secp256k1_gej tmpj; - secp256k1_gej_set_ge(&tmpj, &correction); - secp256k1_gej_double_var(&tmpj, &tmpj, NULL); - secp256k1_ge_set_gej(&correction, &tmpj); - secp256k1_ge_to_storage(&correction_1_stor, a); -#ifdef USE_ENDOMORPHISM - secp256k1_ge_to_storage(&correction_lam_stor, a); -#endif - secp256k1_ge_to_storage(&a2_stor, &correction); - - /* For odd numbers this is 2a (so replace it), for even ones a (so no-op) */ - secp256k1_ge_storage_cmov(&correction_1_stor, &a2_stor, skew_1 == 2); -#ifdef USE_ENDOMORPHISM - secp256k1_ge_storage_cmov(&correction_lam_stor, &a2_stor, skew_lam == 2); -#endif - - /* Apply the correction */ - secp256k1_ge_from_storage(&correction, &correction_1_stor); - secp256k1_ge_neg(&correction, &correction); - secp256k1_gej_add_ge(r, r, &correction); - -#ifdef USE_ENDOMORPHISM - secp256k1_ge_from_storage(&correction, &correction_lam_stor); - secp256k1_ge_neg(&correction, &correction); - secp256k1_ge_mul_lambda(&correction, &correction); - secp256k1_gej_add_ge(r, r, &correction); -#endif - } -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_gen.h b/node_modules/secp256k1/src/secp256k1-src/src/ecmult_gen.h deleted file mode 100644 index eb2cc9e..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_gen.h +++ /dev/null @@ -1,43 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECMULT_GEN_ -#define _SECP256K1_ECMULT_GEN_ - -#include "scalar.h" -#include "group.h" - -typedef struct { - /* For accelerating the computation of a*G: - * To harden against timing attacks, use the following mechanism: - * * Break up the multiplicand into groups of 4 bits, called n_0, n_1, n_2, ..., n_63. - * * Compute sum(n_i * 16^i * G + U_i, i=0..63), where: - * * U_i = U * 2^i (for i=0..62) - * * U_i = U * (1-2^63) (for i=63) - * where U is a point with no known corresponding scalar. Note that sum(U_i, i=0..63) = 0. - * For each i, and each of the 16 possible values of n_i, (n_i * 16^i * G + U_i) is - * precomputed (call it prec(i, n_i)). The formula now becomes sum(prec(i, n_i), i=0..63). - * None of the resulting prec group elements have a known scalar, and neither do any of - * the intermediate sums while computing a*G. - */ - secp256k1_ge_storage (*prec)[64][16]; /* prec[j][i] = 16^j * i * G + U_i */ - secp256k1_scalar blind; - secp256k1_gej initial; -} secp256k1_ecmult_gen_context; - -static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context* ctx); -static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context* ctx, const secp256k1_callback* cb); -static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context *dst, - const secp256k1_ecmult_gen_context* src, const secp256k1_callback* cb); -static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context* ctx); -static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context* ctx); - -/** Multiply with the generator: R = a*G */ -static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context* ctx, secp256k1_gej *r, const secp256k1_scalar *a); - -static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context *ctx, const unsigned char *seed32); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_gen_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/ecmult_gen_impl.h deleted file mode 100644 index b63c4d8..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_gen_impl.h +++ /dev/null @@ -1,210 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECMULT_GEN_IMPL_H_ -#define _SECP256K1_ECMULT_GEN_IMPL_H_ - -#include "scalar.h" -#include "group.h" -#include "ecmult_gen.h" -#include "hash_impl.h" -#ifdef USE_ECMULT_STATIC_PRECOMPUTATION -#include "ecmult_static_context.h" -#endif -static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context *ctx) { - ctx->prec = NULL; -} - -static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context *ctx, const secp256k1_callback* cb) { -#ifndef USE_ECMULT_STATIC_PRECOMPUTATION - secp256k1_ge prec[1024]; - secp256k1_gej gj; - secp256k1_gej nums_gej; - int i, j; -#endif - - if (ctx->prec != NULL) { - return; - } -#ifndef USE_ECMULT_STATIC_PRECOMPUTATION - ctx->prec = (secp256k1_ge_storage (*)[64][16])checked_malloc(cb, sizeof(*ctx->prec)); - - /* get the generator */ - secp256k1_gej_set_ge(&gj, &secp256k1_ge_const_g); - - /* Construct a group element with no known corresponding scalar (nothing up my sleeve). */ - { - static const unsigned char nums_b32[33] = "The scalar for this x is unknown"; - secp256k1_fe nums_x; - secp256k1_ge nums_ge; - int r; - r = secp256k1_fe_set_b32(&nums_x, nums_b32); - (void)r; - VERIFY_CHECK(r); - r = secp256k1_ge_set_xo_var(&nums_ge, &nums_x, 0); - (void)r; - VERIFY_CHECK(r); - secp256k1_gej_set_ge(&nums_gej, &nums_ge); - /* Add G to make the bits in x uniformly distributed. */ - secp256k1_gej_add_ge_var(&nums_gej, &nums_gej, &secp256k1_ge_const_g, NULL); - } - - /* compute prec. */ - { - secp256k1_gej precj[1024]; /* Jacobian versions of prec. */ - secp256k1_gej gbase; - secp256k1_gej numsbase; - gbase = gj; /* 16^j * G */ - numsbase = nums_gej; /* 2^j * nums. */ - for (j = 0; j < 64; j++) { - /* Set precj[j*16 .. j*16+15] to (numsbase, numsbase + gbase, ..., numsbase + 15*gbase). */ - precj[j*16] = numsbase; - for (i = 1; i < 16; i++) { - secp256k1_gej_add_var(&precj[j*16 + i], &precj[j*16 + i - 1], &gbase, NULL); - } - /* Multiply gbase by 16. */ - for (i = 0; i < 4; i++) { - secp256k1_gej_double_var(&gbase, &gbase, NULL); - } - /* Multiply numbase by 2. */ - secp256k1_gej_double_var(&numsbase, &numsbase, NULL); - if (j == 62) { - /* In the last iteration, numsbase is (1 - 2^j) * nums instead. */ - secp256k1_gej_neg(&numsbase, &numsbase); - secp256k1_gej_add_var(&numsbase, &numsbase, &nums_gej, NULL); - } - } - secp256k1_ge_set_all_gej_var(1024, prec, precj, cb); - } - for (j = 0; j < 64; j++) { - for (i = 0; i < 16; i++) { - secp256k1_ge_to_storage(&(*ctx->prec)[j][i], &prec[j*16 + i]); - } - } -#else - (void)cb; - ctx->prec = (secp256k1_ge_storage (*)[64][16])secp256k1_ecmult_static_context; -#endif - secp256k1_ecmult_gen_blind(ctx, NULL); -} - -static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context* ctx) { - return ctx->prec != NULL; -} - -static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context *dst, - const secp256k1_ecmult_gen_context *src, const secp256k1_callback* cb) { - if (src->prec == NULL) { - dst->prec = NULL; - } else { -#ifndef USE_ECMULT_STATIC_PRECOMPUTATION - dst->prec = (secp256k1_ge_storage (*)[64][16])checked_malloc(cb, sizeof(*dst->prec)); - memcpy(dst->prec, src->prec, sizeof(*dst->prec)); -#else - (void)cb; - dst->prec = src->prec; -#endif - dst->initial = src->initial; - dst->blind = src->blind; - } -} - -static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context *ctx) { -#ifndef USE_ECMULT_STATIC_PRECOMPUTATION - free(ctx->prec); -#endif - secp256k1_scalar_clear(&ctx->blind); - secp256k1_gej_clear(&ctx->initial); - ctx->prec = NULL; -} - -static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp256k1_gej *r, const secp256k1_scalar *gn) { - secp256k1_ge add; - secp256k1_ge_storage adds; - secp256k1_scalar gnb; - int bits; - int i, j; - memset(&adds, 0, sizeof(adds)); - *r = ctx->initial; - /* Blind scalar/point multiplication by computing (n-b)G + bG instead of nG. */ - secp256k1_scalar_add(&gnb, gn, &ctx->blind); - add.infinity = 0; - for (j = 0; j < 64; j++) { - bits = secp256k1_scalar_get_bits(&gnb, j * 4, 4); - for (i = 0; i < 16; i++) { - /** This uses a conditional move to avoid any secret data in array indexes. - * _Any_ use of secret indexes has been demonstrated to result in timing - * sidechannels, even when the cache-line access patterns are uniform. - * See also: - * "A word of warning", CHES 2013 Rump Session, by Daniel J. Bernstein and Peter Schwabe - * (https://cryptojedi.org/peter/data/chesrump-20130822.pdf) and - * "Cache Attacks and Countermeasures: the Case of AES", RSA 2006, - * by Dag Arne Osvik, Adi Shamir, and Eran Tromer - * (http://www.tau.ac.il/~tromer/papers/cache.pdf) - */ - secp256k1_ge_storage_cmov(&adds, &(*ctx->prec)[j][i], i == bits); - } - secp256k1_ge_from_storage(&add, &adds); - secp256k1_gej_add_ge(r, r, &add); - } - bits = 0; - secp256k1_ge_clear(&add); - secp256k1_scalar_clear(&gnb); -} - -/* Setup blinding values for secp256k1_ecmult_gen. */ -static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context *ctx, const unsigned char *seed32) { - secp256k1_scalar b; - secp256k1_gej gb; - secp256k1_fe s; - unsigned char nonce32[32]; - secp256k1_rfc6979_hmac_sha256_t rng; - int retry; - unsigned char keydata[64] = {0}; - if (seed32 == NULL) { - /* When seed is NULL, reset the initial point and blinding value. */ - secp256k1_gej_set_ge(&ctx->initial, &secp256k1_ge_const_g); - secp256k1_gej_neg(&ctx->initial, &ctx->initial); - secp256k1_scalar_set_int(&ctx->blind, 1); - } - /* The prior blinding value (if not reset) is chained forward by including it in the hash. */ - secp256k1_scalar_get_b32(nonce32, &ctx->blind); - /** Using a CSPRNG allows a failure free interface, avoids needing large amounts of random data, - * and guards against weak or adversarial seeds. This is a simpler and safer interface than - * asking the caller for blinding values directly and expecting them to retry on failure. - */ - memcpy(keydata, nonce32, 32); - if (seed32 != NULL) { - memcpy(keydata + 32, seed32, 32); - } - secp256k1_rfc6979_hmac_sha256_initialize(&rng, keydata, seed32 ? 64 : 32); - memset(keydata, 0, sizeof(keydata)); - /* Retry for out of range results to achieve uniformity. */ - do { - secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32); - retry = !secp256k1_fe_set_b32(&s, nonce32); - retry |= secp256k1_fe_is_zero(&s); - } while (retry); /* This branch true is cryptographically unreachable. Requires sha256_hmac output > Fp. */ - /* Randomize the projection to defend against multiplier sidechannels. */ - secp256k1_gej_rescale(&ctx->initial, &s); - secp256k1_fe_clear(&s); - do { - secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32); - secp256k1_scalar_set_b32(&b, nonce32, &retry); - /* A blinding value of 0 works, but would undermine the projection hardening. */ - retry |= secp256k1_scalar_is_zero(&b); - } while (retry); /* This branch true is cryptographically unreachable. Requires sha256_hmac output > order. */ - secp256k1_rfc6979_hmac_sha256_finalize(&rng); - memset(nonce32, 0, 32); - secp256k1_ecmult_gen(ctx, &gb, &b); - secp256k1_scalar_negate(&b, &b); - ctx->blind = b; - ctx->initial = gb; - secp256k1_scalar_clear(&b); - secp256k1_gej_clear(&gb); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/ecmult_impl.h deleted file mode 100644 index 81ae08e..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/ecmult_impl.h +++ /dev/null @@ -1,391 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_ECMULT_IMPL_H_ -#define _SECP256K1_ECMULT_IMPL_H_ - -#include "group.h" -#include "scalar.h" -#include "ecmult.h" - -#include - -/* optimal for 128-bit and 256-bit exponents. */ -#define WINDOW_A 5 - -/** larger numbers may result in slightly better performance, at the cost of - exponentially larger precomputed tables. */ -#ifdef USE_ENDOMORPHISM -/** Two tables for window size 15: 1.375 MiB. */ -#define WINDOW_G 15 -#else -/** One table for window size 16: 1.375 MiB. */ -#define WINDOW_G 16 -#endif - -/** The number of entries a table with precomputed multiples needs to have. */ -#define ECMULT_TABLE_SIZE(w) (1 << ((w)-2)) - -/** Fill a table 'prej' with precomputed odd multiples of a. Prej will contain - * the values [1*a,3*a,...,(2*n-1)*a], so it space for n values. zr[0] will - * contain prej[0].z / a.z. The other zr[i] values = prej[i].z / prej[i-1].z. - * Prej's Z values are undefined, except for the last value. - */ -static void secp256k1_ecmult_odd_multiples_table(int n, secp256k1_gej *prej, secp256k1_fe *zr, const secp256k1_gej *a) { - secp256k1_gej d; - secp256k1_ge a_ge, d_ge; - int i; - - VERIFY_CHECK(!a->infinity); - - secp256k1_gej_double_var(&d, a, NULL); - - /* - * Perform the additions on an isomorphism where 'd' is affine: drop the z coordinate - * of 'd', and scale the 1P starting value's x/y coordinates without changing its z. - */ - d_ge.x = d.x; - d_ge.y = d.y; - d_ge.infinity = 0; - - secp256k1_ge_set_gej_zinv(&a_ge, a, &d.z); - prej[0].x = a_ge.x; - prej[0].y = a_ge.y; - prej[0].z = a->z; - prej[0].infinity = 0; - - zr[0] = d.z; - for (i = 1; i < n; i++) { - secp256k1_gej_add_ge_var(&prej[i], &prej[i-1], &d_ge, &zr[i]); - } - - /* - * Each point in 'prej' has a z coordinate too small by a factor of 'd.z'. Only - * the final point's z coordinate is actually used though, so just update that. - */ - secp256k1_fe_mul(&prej[n-1].z, &prej[n-1].z, &d.z); -} - -/** Fill a table 'pre' with precomputed odd multiples of a. - * - * There are two versions of this function: - * - secp256k1_ecmult_odd_multiples_table_globalz_windowa which brings its - * resulting point set to a single constant Z denominator, stores the X and Y - * coordinates as ge_storage points in pre, and stores the global Z in rz. - * It only operates on tables sized for WINDOW_A wnaf multiples. - * - secp256k1_ecmult_odd_multiples_table_storage_var, which converts its - * resulting point set to actually affine points, and stores those in pre. - * It operates on tables of any size, but uses heap-allocated temporaries. - * - * To compute a*P + b*G, we compute a table for P using the first function, - * and for G using the second (which requires an inverse, but it only needs to - * happen once). - */ -static void secp256k1_ecmult_odd_multiples_table_globalz_windowa(secp256k1_ge *pre, secp256k1_fe *globalz, const secp256k1_gej *a) { - secp256k1_gej prej[ECMULT_TABLE_SIZE(WINDOW_A)]; - secp256k1_fe zr[ECMULT_TABLE_SIZE(WINDOW_A)]; - - /* Compute the odd multiples in Jacobian form. */ - secp256k1_ecmult_odd_multiples_table(ECMULT_TABLE_SIZE(WINDOW_A), prej, zr, a); - /* Bring them to the same Z denominator. */ - secp256k1_ge_globalz_set_table_gej(ECMULT_TABLE_SIZE(WINDOW_A), pre, globalz, prej, zr); -} - -static void secp256k1_ecmult_odd_multiples_table_storage_var(int n, secp256k1_ge_storage *pre, const secp256k1_gej *a, const secp256k1_callback *cb) { - secp256k1_gej *prej = (secp256k1_gej*)checked_malloc(cb, sizeof(secp256k1_gej) * n); - secp256k1_ge *prea = (secp256k1_ge*)checked_malloc(cb, sizeof(secp256k1_ge) * n); - secp256k1_fe *zr = (secp256k1_fe*)checked_malloc(cb, sizeof(secp256k1_fe) * n); - int i; - - /* Compute the odd multiples in Jacobian form. */ - secp256k1_ecmult_odd_multiples_table(n, prej, zr, a); - /* Convert them in batch to affine coordinates. */ - secp256k1_ge_set_table_gej_var(n, prea, prej, zr); - /* Convert them to compact storage form. */ - for (i = 0; i < n; i++) { - secp256k1_ge_to_storage(&pre[i], &prea[i]); - } - - free(prea); - free(prej); - free(zr); -} - -/** The following two macro retrieves a particular odd multiple from a table - * of precomputed multiples. */ -#define ECMULT_TABLE_GET_GE(r,pre,n,w) do { \ - VERIFY_CHECK(((n) & 1) == 1); \ - VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \ - VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \ - if ((n) > 0) { \ - *(r) = (pre)[((n)-1)/2]; \ - } else { \ - secp256k1_ge_neg((r), &(pre)[(-(n)-1)/2]); \ - } \ -} while(0) - -#define ECMULT_TABLE_GET_GE_STORAGE(r,pre,n,w) do { \ - VERIFY_CHECK(((n) & 1) == 1); \ - VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \ - VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \ - if ((n) > 0) { \ - secp256k1_ge_from_storage((r), &(pre)[((n)-1)/2]); \ - } else { \ - secp256k1_ge_from_storage((r), &(pre)[(-(n)-1)/2]); \ - secp256k1_ge_neg((r), (r)); \ - } \ -} while(0) - -static void secp256k1_ecmult_context_init(secp256k1_ecmult_context *ctx) { - ctx->pre_g = NULL; -#ifdef USE_ENDOMORPHISM - ctx->pre_g_128 = NULL; -#endif -} - -static void secp256k1_ecmult_context_build(secp256k1_ecmult_context *ctx, const secp256k1_callback *cb) { - secp256k1_gej gj; - - if (ctx->pre_g != NULL) { - return; - } - - /* get the generator */ - secp256k1_gej_set_ge(&gj, &secp256k1_ge_const_g); - - ctx->pre_g = (secp256k1_ge_storage (*)[])checked_malloc(cb, sizeof((*ctx->pre_g)[0]) * ECMULT_TABLE_SIZE(WINDOW_G)); - - /* precompute the tables with odd multiples */ - secp256k1_ecmult_odd_multiples_table_storage_var(ECMULT_TABLE_SIZE(WINDOW_G), *ctx->pre_g, &gj, cb); - -#ifdef USE_ENDOMORPHISM - { - secp256k1_gej g_128j; - int i; - - ctx->pre_g_128 = (secp256k1_ge_storage (*)[])checked_malloc(cb, sizeof((*ctx->pre_g_128)[0]) * ECMULT_TABLE_SIZE(WINDOW_G)); - - /* calculate 2^128*generator */ - g_128j = gj; - for (i = 0; i < 128; i++) { - secp256k1_gej_double_var(&g_128j, &g_128j, NULL); - } - secp256k1_ecmult_odd_multiples_table_storage_var(ECMULT_TABLE_SIZE(WINDOW_G), *ctx->pre_g_128, &g_128j, cb); - } -#endif -} - -static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context *dst, - const secp256k1_ecmult_context *src, const secp256k1_callback *cb) { - if (src->pre_g == NULL) { - dst->pre_g = NULL; - } else { - size_t size = sizeof((*dst->pre_g)[0]) * ECMULT_TABLE_SIZE(WINDOW_G); - dst->pre_g = (secp256k1_ge_storage (*)[])checked_malloc(cb, size); - memcpy(dst->pre_g, src->pre_g, size); - } -#ifdef USE_ENDOMORPHISM - if (src->pre_g_128 == NULL) { - dst->pre_g_128 = NULL; - } else { - size_t size = sizeof((*dst->pre_g_128)[0]) * ECMULT_TABLE_SIZE(WINDOW_G); - dst->pre_g_128 = (secp256k1_ge_storage (*)[])checked_malloc(cb, size); - memcpy(dst->pre_g_128, src->pre_g_128, size); - } -#endif -} - -static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context *ctx) { - return ctx->pre_g != NULL; -} - -static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context *ctx) { - free(ctx->pre_g); -#ifdef USE_ENDOMORPHISM - free(ctx->pre_g_128); -#endif - secp256k1_ecmult_context_init(ctx); -} - -/** Convert a number to WNAF notation. The number becomes represented by sum(2^i * wnaf[i], i=0..bits), - * with the following guarantees: - * - each wnaf[i] is either 0, or an odd integer between -(1<<(w-1) - 1) and (1<<(w-1) - 1) - * - two non-zero entries in wnaf are separated by at least w-1 zeroes. - * - the number of set values in wnaf is returned. This number is at most 256, and at most one more - * than the number of bits in the (absolute value) of the input. - */ -static int secp256k1_ecmult_wnaf(int *wnaf, int len, const secp256k1_scalar *a, int w) { - secp256k1_scalar s = *a; - int last_set_bit = -1; - int bit = 0; - int sign = 1; - int carry = 0; - - VERIFY_CHECK(wnaf != NULL); - VERIFY_CHECK(0 <= len && len <= 256); - VERIFY_CHECK(a != NULL); - VERIFY_CHECK(2 <= w && w <= 31); - - memset(wnaf, 0, len * sizeof(wnaf[0])); - - if (secp256k1_scalar_get_bits(&s, 255, 1)) { - secp256k1_scalar_negate(&s, &s); - sign = -1; - } - - while (bit < len) { - int now; - int word; - if (secp256k1_scalar_get_bits(&s, bit, 1) == (unsigned int)carry) { - bit++; - continue; - } - - now = w; - if (now > len - bit) { - now = len - bit; - } - - word = secp256k1_scalar_get_bits_var(&s, bit, now) + carry; - - carry = (word >> (w-1)) & 1; - word -= carry << w; - - wnaf[bit] = sign * word; - last_set_bit = bit; - - bit += now; - } -#ifdef VERIFY - CHECK(carry == 0); - while (bit < 256) { - CHECK(secp256k1_scalar_get_bits(&s, bit++, 1) == 0); - } -#endif - return last_set_bit + 1; -} - -static void secp256k1_ecmult(const secp256k1_ecmult_context *ctx, secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng) { - secp256k1_ge pre_a[ECMULT_TABLE_SIZE(WINDOW_A)]; - secp256k1_ge tmpa; - secp256k1_fe Z; -#ifdef USE_ENDOMORPHISM - secp256k1_ge pre_a_lam[ECMULT_TABLE_SIZE(WINDOW_A)]; - secp256k1_scalar na_1, na_lam; - /* Splitted G factors. */ - secp256k1_scalar ng_1, ng_128; - int wnaf_na_1[130]; - int wnaf_na_lam[130]; - int bits_na_1; - int bits_na_lam; - int wnaf_ng_1[129]; - int bits_ng_1; - int wnaf_ng_128[129]; - int bits_ng_128; -#else - int wnaf_na[256]; - int bits_na; - int wnaf_ng[256]; - int bits_ng; -#endif - int i; - int bits; - -#ifdef USE_ENDOMORPHISM - /* split na into na_1 and na_lam (where na = na_1 + na_lam*lambda, and na_1 and na_lam are ~128 bit) */ - secp256k1_scalar_split_lambda(&na_1, &na_lam, na); - - /* build wnaf representation for na_1 and na_lam. */ - bits_na_1 = secp256k1_ecmult_wnaf(wnaf_na_1, 130, &na_1, WINDOW_A); - bits_na_lam = secp256k1_ecmult_wnaf(wnaf_na_lam, 130, &na_lam, WINDOW_A); - VERIFY_CHECK(bits_na_1 <= 130); - VERIFY_CHECK(bits_na_lam <= 130); - bits = bits_na_1; - if (bits_na_lam > bits) { - bits = bits_na_lam; - } -#else - /* build wnaf representation for na. */ - bits_na = secp256k1_ecmult_wnaf(wnaf_na, 256, na, WINDOW_A); - bits = bits_na; -#endif - - /* Calculate odd multiples of a. - * All multiples are brought to the same Z 'denominator', which is stored - * in Z. Due to secp256k1' isomorphism we can do all operations pretending - * that the Z coordinate was 1, use affine addition formulae, and correct - * the Z coordinate of the result once at the end. - * The exception is the precomputed G table points, which are actually - * affine. Compared to the base used for other points, they have a Z ratio - * of 1/Z, so we can use secp256k1_gej_add_zinv_var, which uses the same - * isomorphism to efficiently add with a known Z inverse. - */ - secp256k1_ecmult_odd_multiples_table_globalz_windowa(pre_a, &Z, a); - -#ifdef USE_ENDOMORPHISM - for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) { - secp256k1_ge_mul_lambda(&pre_a_lam[i], &pre_a[i]); - } - - /* split ng into ng_1 and ng_128 (where gn = gn_1 + gn_128*2^128, and gn_1 and gn_128 are ~128 bit) */ - secp256k1_scalar_split_128(&ng_1, &ng_128, ng); - - /* Build wnaf representation for ng_1 and ng_128 */ - bits_ng_1 = secp256k1_ecmult_wnaf(wnaf_ng_1, 129, &ng_1, WINDOW_G); - bits_ng_128 = secp256k1_ecmult_wnaf(wnaf_ng_128, 129, &ng_128, WINDOW_G); - if (bits_ng_1 > bits) { - bits = bits_ng_1; - } - if (bits_ng_128 > bits) { - bits = bits_ng_128; - } -#else - bits_ng = secp256k1_ecmult_wnaf(wnaf_ng, 256, ng, WINDOW_G); - if (bits_ng > bits) { - bits = bits_ng; - } -#endif - - secp256k1_gej_set_infinity(r); - - for (i = bits - 1; i >= 0; i--) { - int n; - secp256k1_gej_double_var(r, r, NULL); -#ifdef USE_ENDOMORPHISM - if (i < bits_na_1 && (n = wnaf_na_1[i])) { - ECMULT_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A); - secp256k1_gej_add_ge_var(r, r, &tmpa, NULL); - } - if (i < bits_na_lam && (n = wnaf_na_lam[i])) { - ECMULT_TABLE_GET_GE(&tmpa, pre_a_lam, n, WINDOW_A); - secp256k1_gej_add_ge_var(r, r, &tmpa, NULL); - } - if (i < bits_ng_1 && (n = wnaf_ng_1[i])) { - ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g, n, WINDOW_G); - secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z); - } - if (i < bits_ng_128 && (n = wnaf_ng_128[i])) { - ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g_128, n, WINDOW_G); - secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z); - } -#else - if (i < bits_na && (n = wnaf_na[i])) { - ECMULT_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A); - secp256k1_gej_add_ge_var(r, r, &tmpa, NULL); - } - if (i < bits_ng && (n = wnaf_ng[i])) { - ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g, n, WINDOW_G); - secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z); - } -#endif - } - - if (!r->infinity) { - secp256k1_fe_mul(&r->z, &r->z, &Z); - } -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/field.h b/node_modules/secp256k1/src/secp256k1-src/src/field.h deleted file mode 100644 index c5ba074..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/field.h +++ /dev/null @@ -1,127 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_FIELD_ -#define _SECP256K1_FIELD_ - -/** Field element module. - * - * Field elements can be represented in several ways, but code accessing - * it (and implementations) need to take certain properties into account: - * - Each field element can be normalized or not. - * - Each field element has a magnitude, which represents how far away - * its representation is away from normalization. Normalized elements - * always have a magnitude of 1, but a magnitude of 1 doesn't imply - * normality. - */ - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#if defined(USE_FIELD_10X26) -#include "field_10x26.h" -#elif defined(USE_FIELD_5X52) -#include "field_5x52.h" -#else -#error "Please select field implementation" -#endif - -/** Normalize a field element. */ -static void secp256k1_fe_normalize(secp256k1_fe *r); - -/** Weakly normalize a field element: reduce it magnitude to 1, but don't fully normalize. */ -static void secp256k1_fe_normalize_weak(secp256k1_fe *r); - -/** Normalize a field element, without constant-time guarantee. */ -static void secp256k1_fe_normalize_var(secp256k1_fe *r); - -/** Verify whether a field element represents zero i.e. would normalize to a zero value. The field - * implementation may optionally normalize the input, but this should not be relied upon. */ -static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r); - -/** Verify whether a field element represents zero i.e. would normalize to a zero value. The field - * implementation may optionally normalize the input, but this should not be relied upon. */ -static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r); - -/** Set a field element equal to a small integer. Resulting field element is normalized. */ -static void secp256k1_fe_set_int(secp256k1_fe *r, int a); - -/** Verify whether a field element is zero. Requires the input to be normalized. */ -static int secp256k1_fe_is_zero(const secp256k1_fe *a); - -/** Check the "oddness" of a field element. Requires the input to be normalized. */ -static int secp256k1_fe_is_odd(const secp256k1_fe *a); - -/** Compare two field elements. Requires magnitude-1 inputs. */ -static int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b); - -/** Same as secp256k1_fe_equal, but may be variable time. */ -static int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b); - -/** Compare two field elements. Requires both inputs to be normalized */ -static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b); - -/** Set a field element equal to 32-byte big endian value. If successful, the resulting field element is normalized. */ -static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a); - -/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */ -static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a); - -/** Set a field element equal to the additive inverse of another. Takes a maximum magnitude of the input - * as an argument. The magnitude of the output is one higher. */ -static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m); - -/** Multiplies the passed field element with a small integer constant. Multiplies the magnitude by that - * small integer. */ -static void secp256k1_fe_mul_int(secp256k1_fe *r, int a); - -/** Adds a field element to another. The result has the sum of the inputs' magnitudes as magnitude. */ -static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a); - -/** Sets a field element to be the product of two others. Requires the inputs' magnitudes to be at most 8. - * The output magnitude is 1 (but not guaranteed to be normalized). */ -static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b); - -/** Sets a field element to be the square of another. Requires the input's magnitude to be at most 8. - * The output magnitude is 1 (but not guaranteed to be normalized). */ -static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a); - -/** If a has a square root, it is computed in r and 1 is returned. If a does not - * have a square root, the root of its negation is computed and 0 is returned. - * The input's magnitude can be at most 8. The output magnitude is 1 (but not - * guaranteed to be normalized). The result in r will always be a square - * itself. */ -static int secp256k1_fe_sqrt(secp256k1_fe *r, const secp256k1_fe *a); - -/** Checks whether a field element is a quadratic residue. */ -static int secp256k1_fe_is_quad_var(const secp256k1_fe *a); - -/** Sets a field element to be the (modular) inverse of another. Requires the input's magnitude to be - * at most 8. The output magnitude is 1 (but not guaranteed to be normalized). */ -static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a); - -/** Potentially faster version of secp256k1_fe_inv, without constant-time guarantee. */ -static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a); - -/** Calculate the (modular) inverses of a batch of field elements. Requires the inputs' magnitudes to be - * at most 8. The output magnitudes are 1 (but not guaranteed to be normalized). The inputs and - * outputs must not overlap in memory. */ -static void secp256k1_fe_inv_all_var(size_t len, secp256k1_fe *r, const secp256k1_fe *a); - -/** Convert a field element to the storage type. */ -static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a); - -/** Convert a field element back from the storage type. */ -static void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a); - -/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */ -static void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag); - -/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */ -static void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/field_10x26.h b/node_modules/secp256k1/src/secp256k1-src/src/field_10x26.h deleted file mode 100644 index 61ee1e0..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/field_10x26.h +++ /dev/null @@ -1,47 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_FIELD_REPR_ -#define _SECP256K1_FIELD_REPR_ - -#include - -typedef struct { - /* X = sum(i=0..9, elem[i]*2^26) mod n */ - uint32_t n[10]; -#ifdef VERIFY - int magnitude; - int normalized; -#endif -} secp256k1_fe; - -/* Unpacks a constant into a overlapping multi-limbed FE element. */ -#define SECP256K1_FE_CONST_INNER(d7, d6, d5, d4, d3, d2, d1, d0) { \ - (d0) & 0x3FFFFFFUL, \ - (((uint32_t)d0) >> 26) | (((uint32_t)(d1) & 0xFFFFFUL) << 6), \ - (((uint32_t)d1) >> 20) | (((uint32_t)(d2) & 0x3FFFUL) << 12), \ - (((uint32_t)d2) >> 14) | (((uint32_t)(d3) & 0xFFUL) << 18), \ - (((uint32_t)d3) >> 8) | (((uint32_t)(d4) & 0x3UL) << 24), \ - (((uint32_t)d4) >> 2) & 0x3FFFFFFUL, \ - (((uint32_t)d4) >> 28) | (((uint32_t)(d5) & 0x3FFFFFUL) << 4), \ - (((uint32_t)d5) >> 22) | (((uint32_t)(d6) & 0xFFFFUL) << 10), \ - (((uint32_t)d6) >> 16) | (((uint32_t)(d7) & 0x3FFUL) << 16), \ - (((uint32_t)d7) >> 10) \ -} - -#ifdef VERIFY -#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0)), 1, 1} -#else -#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0))} -#endif - -typedef struct { - uint32_t n[8]; -} secp256k1_fe_storage; - -#define SECP256K1_FE_STORAGE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{ (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }} -#define SECP256K1_FE_STORAGE_CONST_GET(d) d.n[7], d.n[6], d.n[5], d.n[4],d.n[3], d.n[2], d.n[1], d.n[0] -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/field_10x26_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/field_10x26_impl.h deleted file mode 100644 index 7b8c079..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/field_10x26_impl.h +++ /dev/null @@ -1,1144 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_FIELD_REPR_IMPL_H_ -#define _SECP256K1_FIELD_REPR_IMPL_H_ - -#include "util.h" -#include "num.h" -#include "field.h" - -#ifdef VERIFY -static void secp256k1_fe_verify(const secp256k1_fe *a) { - const uint32_t *d = a->n; - int m = a->normalized ? 1 : 2 * a->magnitude, r = 1; - r &= (d[0] <= 0x3FFFFFFUL * m); - r &= (d[1] <= 0x3FFFFFFUL * m); - r &= (d[2] <= 0x3FFFFFFUL * m); - r &= (d[3] <= 0x3FFFFFFUL * m); - r &= (d[4] <= 0x3FFFFFFUL * m); - r &= (d[5] <= 0x3FFFFFFUL * m); - r &= (d[6] <= 0x3FFFFFFUL * m); - r &= (d[7] <= 0x3FFFFFFUL * m); - r &= (d[8] <= 0x3FFFFFFUL * m); - r &= (d[9] <= 0x03FFFFFUL * m); - r &= (a->magnitude >= 0); - r &= (a->magnitude <= 32); - if (a->normalized) { - r &= (a->magnitude <= 1); - if (r && (d[9] == 0x03FFFFFUL)) { - uint32_t mid = d[8] & d[7] & d[6] & d[5] & d[4] & d[3] & d[2]; - if (mid == 0x3FFFFFFUL) { - r &= ((d[1] + 0x40UL + ((d[0] + 0x3D1UL) >> 26)) <= 0x3FFFFFFUL); - } - } - } - VERIFY_CHECK(r == 1); -} -#else -static void secp256k1_fe_verify(const secp256k1_fe *a) { - (void)a; -} -#endif - -static void secp256k1_fe_normalize(secp256k1_fe *r) { - uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4], - t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9]; - - /* Reduce t9 at the start so there will be at most a single carry from the first pass */ - uint32_t m; - uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x3D1UL; t1 += (x << 6); - t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL; - t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; - t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; m = t2; - t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; m &= t3; - t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; m &= t4; - t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; m &= t5; - t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; m &= t6; - t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; m &= t7; - t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; m &= t8; - - /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t9 >> 23 == 0); - - /* At most a single final reduction is needed; check if the value is >= the field characteristic */ - x = (t9 >> 22) | ((t9 == 0x03FFFFFUL) & (m == 0x3FFFFFFUL) - & ((t1 + 0x40UL + ((t0 + 0x3D1UL) >> 26)) > 0x3FFFFFFUL)); - - /* Apply the final reduction (for constant-time behaviour, we do it always) */ - t0 += x * 0x3D1UL; t1 += (x << 6); - t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL; - t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; - t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; - t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; - t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; - t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; - t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; - t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; - t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; - - /* If t9 didn't carry to bit 22 already, then it should have after any final reduction */ - VERIFY_CHECK(t9 >> 22 == x); - - /* Mask off the possible multiple of 2^256 from the final reduction */ - t9 &= 0x03FFFFFUL; - - r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4; - r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9; - -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; - secp256k1_fe_verify(r); -#endif -} - -static void secp256k1_fe_normalize_weak(secp256k1_fe *r) { - uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4], - t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9]; - - /* Reduce t9 at the start so there will be at most a single carry from the first pass */ - uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x3D1UL; t1 += (x << 6); - t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL; - t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; - t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; - t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; - t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; - t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; - t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; - t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; - t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; - - /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t9 >> 23 == 0); - - r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4; - r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9; - -#ifdef VERIFY - r->magnitude = 1; - secp256k1_fe_verify(r); -#endif -} - -static void secp256k1_fe_normalize_var(secp256k1_fe *r) { - uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4], - t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9]; - - /* Reduce t9 at the start so there will be at most a single carry from the first pass */ - uint32_t m; - uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x3D1UL; t1 += (x << 6); - t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL; - t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; - t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; m = t2; - t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; m &= t3; - t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; m &= t4; - t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; m &= t5; - t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; m &= t6; - t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; m &= t7; - t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; m &= t8; - - /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t9 >> 23 == 0); - - /* At most a single final reduction is needed; check if the value is >= the field characteristic */ - x = (t9 >> 22) | ((t9 == 0x03FFFFFUL) & (m == 0x3FFFFFFUL) - & ((t1 + 0x40UL + ((t0 + 0x3D1UL) >> 26)) > 0x3FFFFFFUL)); - - if (x) { - t0 += 0x3D1UL; t1 += (x << 6); - t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL; - t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; - t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; - t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; - t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; - t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; - t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; - t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; - t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; - - /* If t9 didn't carry to bit 22 already, then it should have after any final reduction */ - VERIFY_CHECK(t9 >> 22 == x); - - /* Mask off the possible multiple of 2^256 from the final reduction */ - t9 &= 0x03FFFFFUL; - } - - r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4; - r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9; - -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; - secp256k1_fe_verify(r); -#endif -} - -static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r) { - uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4], - t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9]; - - /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */ - uint32_t z0, z1; - - /* Reduce t9 at the start so there will be at most a single carry from the first pass */ - uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x3D1UL; t1 += (x << 6); - t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL; z0 = t0; z1 = t0 ^ 0x3D0UL; - t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; z0 |= t1; z1 &= t1 ^ 0x40UL; - t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; z0 |= t2; z1 &= t2; - t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; z0 |= t3; z1 &= t3; - t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; z0 |= t4; z1 &= t4; - t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; z0 |= t5; z1 &= t5; - t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; z0 |= t6; z1 &= t6; - t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; z0 |= t7; z1 &= t7; - t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; z0 |= t8; z1 &= t8; - z0 |= t9; z1 &= t9 ^ 0x3C00000UL; - - /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t9 >> 23 == 0); - - return (z0 == 0) | (z1 == 0x3FFFFFFUL); -} - -static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r) { - uint32_t t0, t1, t2, t3, t4, t5, t6, t7, t8, t9; - uint32_t z0, z1; - uint32_t x; - - t0 = r->n[0]; - t9 = r->n[9]; - - /* Reduce t9 at the start so there will be at most a single carry from the first pass */ - x = t9 >> 22; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x3D1UL; - - /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */ - z0 = t0 & 0x3FFFFFFUL; - z1 = z0 ^ 0x3D0UL; - - /* Fast return path should catch the majority of cases */ - if ((z0 != 0UL) & (z1 != 0x3FFFFFFUL)) { - return 0; - } - - t1 = r->n[1]; - t2 = r->n[2]; - t3 = r->n[3]; - t4 = r->n[4]; - t5 = r->n[5]; - t6 = r->n[6]; - t7 = r->n[7]; - t8 = r->n[8]; - - t9 &= 0x03FFFFFUL; - t1 += (x << 6); - - t1 += (t0 >> 26); - t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; z0 |= t1; z1 &= t1 ^ 0x40UL; - t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; z0 |= t2; z1 &= t2; - t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; z0 |= t3; z1 &= t3; - t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; z0 |= t4; z1 &= t4; - t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; z0 |= t5; z1 &= t5; - t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; z0 |= t6; z1 &= t6; - t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; z0 |= t7; z1 &= t7; - t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; z0 |= t8; z1 &= t8; - z0 |= t9; z1 &= t9 ^ 0x3C00000UL; - - /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t9 >> 23 == 0); - - return (z0 == 0) | (z1 == 0x3FFFFFFUL); -} - -SECP256K1_INLINE static void secp256k1_fe_set_int(secp256k1_fe *r, int a) { - r->n[0] = a; - r->n[1] = r->n[2] = r->n[3] = r->n[4] = r->n[5] = r->n[6] = r->n[7] = r->n[8] = r->n[9] = 0; -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; - secp256k1_fe_verify(r); -#endif -} - -SECP256K1_INLINE static int secp256k1_fe_is_zero(const secp256k1_fe *a) { - const uint32_t *t = a->n; -#ifdef VERIFY - VERIFY_CHECK(a->normalized); - secp256k1_fe_verify(a); -#endif - return (t[0] | t[1] | t[2] | t[3] | t[4] | t[5] | t[6] | t[7] | t[8] | t[9]) == 0; -} - -SECP256K1_INLINE static int secp256k1_fe_is_odd(const secp256k1_fe *a) { -#ifdef VERIFY - VERIFY_CHECK(a->normalized); - secp256k1_fe_verify(a); -#endif - return a->n[0] & 1; -} - -SECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) { - int i; -#ifdef VERIFY - a->magnitude = 0; - a->normalized = 1; -#endif - for (i=0; i<10; i++) { - a->n[i] = 0; - } -} - -static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b) { - int i; -#ifdef VERIFY - VERIFY_CHECK(a->normalized); - VERIFY_CHECK(b->normalized); - secp256k1_fe_verify(a); - secp256k1_fe_verify(b); -#endif - for (i = 9; i >= 0; i--) { - if (a->n[i] > b->n[i]) { - return 1; - } - if (a->n[i] < b->n[i]) { - return -1; - } - } - return 0; -} - -static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a) { - int i; - r->n[0] = r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0; - r->n[5] = r->n[6] = r->n[7] = r->n[8] = r->n[9] = 0; - for (i=0; i<32; i++) { - int j; - for (j=0; j<4; j++) { - int limb = (8*i+2*j)/26; - int shift = (8*i+2*j)%26; - r->n[limb] |= (uint32_t)((a[31-i] >> (2*j)) & 0x3) << shift; - } - } - if (r->n[9] == 0x3FFFFFUL && (r->n[8] & r->n[7] & r->n[6] & r->n[5] & r->n[4] & r->n[3] & r->n[2]) == 0x3FFFFFFUL && (r->n[1] + 0x40UL + ((r->n[0] + 0x3D1UL) >> 26)) > 0x3FFFFFFUL) { - return 0; - } -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; - secp256k1_fe_verify(r); -#endif - return 1; -} - -/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */ -static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a) { - int i; -#ifdef VERIFY - VERIFY_CHECK(a->normalized); - secp256k1_fe_verify(a); -#endif - for (i=0; i<32; i++) { - int j; - int c = 0; - for (j=0; j<4; j++) { - int limb = (8*i+2*j)/26; - int shift = (8*i+2*j)%26; - c |= ((a->n[limb] >> shift) & 0x3) << (2 * j); - } - r[31-i] = c; - } -} - -SECP256K1_INLINE static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m) { -#ifdef VERIFY - VERIFY_CHECK(a->magnitude <= m); - secp256k1_fe_verify(a); -#endif - r->n[0] = 0x3FFFC2FUL * 2 * (m + 1) - a->n[0]; - r->n[1] = 0x3FFFFBFUL * 2 * (m + 1) - a->n[1]; - r->n[2] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[2]; - r->n[3] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[3]; - r->n[4] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[4]; - r->n[5] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[5]; - r->n[6] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[6]; - r->n[7] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[7]; - r->n[8] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[8]; - r->n[9] = 0x03FFFFFUL * 2 * (m + 1) - a->n[9]; -#ifdef VERIFY - r->magnitude = m + 1; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -SECP256K1_INLINE static void secp256k1_fe_mul_int(secp256k1_fe *r, int a) { - r->n[0] *= a; - r->n[1] *= a; - r->n[2] *= a; - r->n[3] *= a; - r->n[4] *= a; - r->n[5] *= a; - r->n[6] *= a; - r->n[7] *= a; - r->n[8] *= a; - r->n[9] *= a; -#ifdef VERIFY - r->magnitude *= a; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -SECP256K1_INLINE static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a) { -#ifdef VERIFY - secp256k1_fe_verify(a); -#endif - r->n[0] += a->n[0]; - r->n[1] += a->n[1]; - r->n[2] += a->n[2]; - r->n[3] += a->n[3]; - r->n[4] += a->n[4]; - r->n[5] += a->n[5]; - r->n[6] += a->n[6]; - r->n[7] += a->n[7]; - r->n[8] += a->n[8]; - r->n[9] += a->n[9]; -#ifdef VERIFY - r->magnitude += a->magnitude; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -#if defined(USE_EXTERNAL_ASM) - -/* External assembler implementation */ -void secp256k1_fe_mul_inner(uint32_t *r, const uint32_t *a, const uint32_t * SECP256K1_RESTRICT b); -void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t *a); - -#else - -#ifdef VERIFY -#define VERIFY_BITS(x, n) VERIFY_CHECK(((x) >> (n)) == 0) -#else -#define VERIFY_BITS(x, n) do { } while(0) -#endif - -SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint32_t *r, const uint32_t *a, const uint32_t * SECP256K1_RESTRICT b) { - uint64_t c, d; - uint64_t u0, u1, u2, u3, u4, u5, u6, u7, u8; - uint32_t t9, t1, t0, t2, t3, t4, t5, t6, t7; - const uint32_t M = 0x3FFFFFFUL, R0 = 0x3D10UL, R1 = 0x400UL; - - VERIFY_BITS(a[0], 30); - VERIFY_BITS(a[1], 30); - VERIFY_BITS(a[2], 30); - VERIFY_BITS(a[3], 30); - VERIFY_BITS(a[4], 30); - VERIFY_BITS(a[5], 30); - VERIFY_BITS(a[6], 30); - VERIFY_BITS(a[7], 30); - VERIFY_BITS(a[8], 30); - VERIFY_BITS(a[9], 26); - VERIFY_BITS(b[0], 30); - VERIFY_BITS(b[1], 30); - VERIFY_BITS(b[2], 30); - VERIFY_BITS(b[3], 30); - VERIFY_BITS(b[4], 30); - VERIFY_BITS(b[5], 30); - VERIFY_BITS(b[6], 30); - VERIFY_BITS(b[7], 30); - VERIFY_BITS(b[8], 30); - VERIFY_BITS(b[9], 26); - - /** [... a b c] is a shorthand for ... + a<<52 + b<<26 + c<<0 mod n. - * px is a shorthand for sum(a[i]*b[x-i], i=0..x). - * Note that [x 0 0 0 0 0 0 0 0 0 0] = [x*R1 x*R0]. - */ - - d = (uint64_t)a[0] * b[9] - + (uint64_t)a[1] * b[8] - + (uint64_t)a[2] * b[7] - + (uint64_t)a[3] * b[6] - + (uint64_t)a[4] * b[5] - + (uint64_t)a[5] * b[4] - + (uint64_t)a[6] * b[3] - + (uint64_t)a[7] * b[2] - + (uint64_t)a[8] * b[1] - + (uint64_t)a[9] * b[0]; - /* VERIFY_BITS(d, 64); */ - /* [d 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */ - t9 = d & M; d >>= 26; - VERIFY_BITS(t9, 26); - VERIFY_BITS(d, 38); - /* [d t9 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */ - - c = (uint64_t)a[0] * b[0]; - VERIFY_BITS(c, 60); - /* [d t9 0 0 0 0 0 0 0 0 c] = [p9 0 0 0 0 0 0 0 0 p0] */ - d += (uint64_t)a[1] * b[9] - + (uint64_t)a[2] * b[8] - + (uint64_t)a[3] * b[7] - + (uint64_t)a[4] * b[6] - + (uint64_t)a[5] * b[5] - + (uint64_t)a[6] * b[4] - + (uint64_t)a[7] * b[3] - + (uint64_t)a[8] * b[2] - + (uint64_t)a[9] * b[1]; - VERIFY_BITS(d, 63); - /* [d t9 0 0 0 0 0 0 0 0 c] = [p10 p9 0 0 0 0 0 0 0 0 p0] */ - u0 = d & M; d >>= 26; c += u0 * R0; - VERIFY_BITS(u0, 26); - VERIFY_BITS(d, 37); - VERIFY_BITS(c, 61); - /* [d u0 t9 0 0 0 0 0 0 0 0 c-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */ - t0 = c & M; c >>= 26; c += u0 * R1; - VERIFY_BITS(t0, 26); - VERIFY_BITS(c, 37); - /* [d u0 t9 0 0 0 0 0 0 0 c-u0*R1 t0-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */ - /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */ - - c += (uint64_t)a[0] * b[1] - + (uint64_t)a[1] * b[0]; - VERIFY_BITS(c, 62); - /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 p1 p0] */ - d += (uint64_t)a[2] * b[9] - + (uint64_t)a[3] * b[8] - + (uint64_t)a[4] * b[7] - + (uint64_t)a[5] * b[6] - + (uint64_t)a[6] * b[5] - + (uint64_t)a[7] * b[4] - + (uint64_t)a[8] * b[3] - + (uint64_t)a[9] * b[2]; - VERIFY_BITS(d, 63); - /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */ - u1 = d & M; d >>= 26; c += u1 * R0; - VERIFY_BITS(u1, 26); - VERIFY_BITS(d, 37); - VERIFY_BITS(c, 63); - /* [d u1 0 t9 0 0 0 0 0 0 0 c-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */ - t1 = c & M; c >>= 26; c += u1 * R1; - VERIFY_BITS(t1, 26); - VERIFY_BITS(c, 38); - /* [d u1 0 t9 0 0 0 0 0 0 c-u1*R1 t1-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */ - /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */ - - c += (uint64_t)a[0] * b[2] - + (uint64_t)a[1] * b[1] - + (uint64_t)a[2] * b[0]; - VERIFY_BITS(c, 62); - /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - d += (uint64_t)a[3] * b[9] - + (uint64_t)a[4] * b[8] - + (uint64_t)a[5] * b[7] - + (uint64_t)a[6] * b[6] - + (uint64_t)a[7] * b[5] - + (uint64_t)a[8] * b[4] - + (uint64_t)a[9] * b[3]; - VERIFY_BITS(d, 63); - /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - u2 = d & M; d >>= 26; c += u2 * R0; - VERIFY_BITS(u2, 26); - VERIFY_BITS(d, 37); - VERIFY_BITS(c, 63); - /* [d u2 0 0 t9 0 0 0 0 0 0 c-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - t2 = c & M; c >>= 26; c += u2 * R1; - VERIFY_BITS(t2, 26); - VERIFY_BITS(c, 38); - /* [d u2 0 0 t9 0 0 0 0 0 c-u2*R1 t2-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - - c += (uint64_t)a[0] * b[3] - + (uint64_t)a[1] * b[2] - + (uint64_t)a[2] * b[1] - + (uint64_t)a[3] * b[0]; - VERIFY_BITS(c, 63); - /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - d += (uint64_t)a[4] * b[9] - + (uint64_t)a[5] * b[8] - + (uint64_t)a[6] * b[7] - + (uint64_t)a[7] * b[6] - + (uint64_t)a[8] * b[5] - + (uint64_t)a[9] * b[4]; - VERIFY_BITS(d, 63); - /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - u3 = d & M; d >>= 26; c += u3 * R0; - VERIFY_BITS(u3, 26); - VERIFY_BITS(d, 37); - /* VERIFY_BITS(c, 64); */ - /* [d u3 0 0 0 t9 0 0 0 0 0 c-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - t3 = c & M; c >>= 26; c += u3 * R1; - VERIFY_BITS(t3, 26); - VERIFY_BITS(c, 39); - /* [d u3 0 0 0 t9 0 0 0 0 c-u3*R1 t3-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - - c += (uint64_t)a[0] * b[4] - + (uint64_t)a[1] * b[3] - + (uint64_t)a[2] * b[2] - + (uint64_t)a[3] * b[1] - + (uint64_t)a[4] * b[0]; - VERIFY_BITS(c, 63); - /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - d += (uint64_t)a[5] * b[9] - + (uint64_t)a[6] * b[8] - + (uint64_t)a[7] * b[7] - + (uint64_t)a[8] * b[6] - + (uint64_t)a[9] * b[5]; - VERIFY_BITS(d, 62); - /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - u4 = d & M; d >>= 26; c += u4 * R0; - VERIFY_BITS(u4, 26); - VERIFY_BITS(d, 36); - /* VERIFY_BITS(c, 64); */ - /* [d u4 0 0 0 0 t9 0 0 0 0 c-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - t4 = c & M; c >>= 26; c += u4 * R1; - VERIFY_BITS(t4, 26); - VERIFY_BITS(c, 39); - /* [d u4 0 0 0 0 t9 0 0 0 c-u4*R1 t4-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - - c += (uint64_t)a[0] * b[5] - + (uint64_t)a[1] * b[4] - + (uint64_t)a[2] * b[3] - + (uint64_t)a[3] * b[2] - + (uint64_t)a[4] * b[1] - + (uint64_t)a[5] * b[0]; - VERIFY_BITS(c, 63); - /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - d += (uint64_t)a[6] * b[9] - + (uint64_t)a[7] * b[8] - + (uint64_t)a[8] * b[7] - + (uint64_t)a[9] * b[6]; - VERIFY_BITS(d, 62); - /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - u5 = d & M; d >>= 26; c += u5 * R0; - VERIFY_BITS(u5, 26); - VERIFY_BITS(d, 36); - /* VERIFY_BITS(c, 64); */ - /* [d u5 0 0 0 0 0 t9 0 0 0 c-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - t5 = c & M; c >>= 26; c += u5 * R1; - VERIFY_BITS(t5, 26); - VERIFY_BITS(c, 39); - /* [d u5 0 0 0 0 0 t9 0 0 c-u5*R1 t5-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - - c += (uint64_t)a[0] * b[6] - + (uint64_t)a[1] * b[5] - + (uint64_t)a[2] * b[4] - + (uint64_t)a[3] * b[3] - + (uint64_t)a[4] * b[2] - + (uint64_t)a[5] * b[1] - + (uint64_t)a[6] * b[0]; - VERIFY_BITS(c, 63); - /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - d += (uint64_t)a[7] * b[9] - + (uint64_t)a[8] * b[8] - + (uint64_t)a[9] * b[7]; - VERIFY_BITS(d, 61); - /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - u6 = d & M; d >>= 26; c += u6 * R0; - VERIFY_BITS(u6, 26); - VERIFY_BITS(d, 35); - /* VERIFY_BITS(c, 64); */ - /* [d u6 0 0 0 0 0 0 t9 0 0 c-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - t6 = c & M; c >>= 26; c += u6 * R1; - VERIFY_BITS(t6, 26); - VERIFY_BITS(c, 39); - /* [d u6 0 0 0 0 0 0 t9 0 c-u6*R1 t6-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - - c += (uint64_t)a[0] * b[7] - + (uint64_t)a[1] * b[6] - + (uint64_t)a[2] * b[5] - + (uint64_t)a[3] * b[4] - + (uint64_t)a[4] * b[3] - + (uint64_t)a[5] * b[2] - + (uint64_t)a[6] * b[1] - + (uint64_t)a[7] * b[0]; - /* VERIFY_BITS(c, 64); */ - VERIFY_CHECK(c <= 0x8000007C00000007ULL); - /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - d += (uint64_t)a[8] * b[9] - + (uint64_t)a[9] * b[8]; - VERIFY_BITS(d, 58); - /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - u7 = d & M; d >>= 26; c += u7 * R0; - VERIFY_BITS(u7, 26); - VERIFY_BITS(d, 32); - /* VERIFY_BITS(c, 64); */ - VERIFY_CHECK(c <= 0x800001703FFFC2F7ULL); - /* [d u7 0 0 0 0 0 0 0 t9 0 c-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - t7 = c & M; c >>= 26; c += u7 * R1; - VERIFY_BITS(t7, 26); - VERIFY_BITS(c, 38); - /* [d u7 0 0 0 0 0 0 0 t9 c-u7*R1 t7-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - - c += (uint64_t)a[0] * b[8] - + (uint64_t)a[1] * b[7] - + (uint64_t)a[2] * b[6] - + (uint64_t)a[3] * b[5] - + (uint64_t)a[4] * b[4] - + (uint64_t)a[5] * b[3] - + (uint64_t)a[6] * b[2] - + (uint64_t)a[7] * b[1] - + (uint64_t)a[8] * b[0]; - /* VERIFY_BITS(c, 64); */ - VERIFY_CHECK(c <= 0x9000007B80000008ULL); - /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - d += (uint64_t)a[9] * b[9]; - VERIFY_BITS(d, 57); - /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - u8 = d & M; d >>= 26; c += u8 * R0; - VERIFY_BITS(u8, 26); - VERIFY_BITS(d, 31); - /* VERIFY_BITS(c, 64); */ - VERIFY_CHECK(c <= 0x9000016FBFFFC2F8ULL); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - - r[3] = t3; - VERIFY_BITS(r[3], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[4] = t4; - VERIFY_BITS(r[4], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[5] = t5; - VERIFY_BITS(r[5], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[6] = t6; - VERIFY_BITS(r[6], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[7] = t7; - VERIFY_BITS(r[7], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - - r[8] = c & M; c >>= 26; c += u8 * R1; - VERIFY_BITS(r[8], 26); - VERIFY_BITS(c, 39); - /* [d u8 0 0 0 0 0 0 0 0 t9+c-u8*R1 r8-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 0 0 0 t9+c r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - c += d * R0 + t9; - VERIFY_BITS(c, 45); - /* [d 0 0 0 0 0 0 0 0 0 c-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[9] = c & (M >> 4); c >>= 22; c += d * (R1 << 4); - VERIFY_BITS(r[9], 22); - VERIFY_BITS(c, 46); - /* [d 0 0 0 0 0 0 0 0 r9+((c-d*R1<<4)<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 0 -d*R1 r9+(c<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - - d = c * (R0 >> 4) + t0; - VERIFY_BITS(d, 56); - /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 d-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[0] = d & M; d >>= 26; - VERIFY_BITS(r[0], 26); - VERIFY_BITS(d, 30); - /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1+d r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - d += c * (R1 >> 4) + t1; - VERIFY_BITS(d, 53); - VERIFY_CHECK(d <= 0x10000003FFFFBFULL); - /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 d-c*R1>>4 r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [r9 r8 r7 r6 r5 r4 r3 t2 d r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[1] = d & M; d >>= 26; - VERIFY_BITS(r[1], 26); - VERIFY_BITS(d, 27); - VERIFY_CHECK(d <= 0x4000000ULL); - /* [r9 r8 r7 r6 r5 r4 r3 t2+d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - d += t2; - VERIFY_BITS(d, 27); - /* [r9 r8 r7 r6 r5 r4 r3 d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[2] = d; - VERIFY_BITS(r[2], 27); - /* [r9 r8 r7 r6 r5 r4 r3 r2 r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ -} - -SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t *a) { - uint64_t c, d; - uint64_t u0, u1, u2, u3, u4, u5, u6, u7, u8; - uint32_t t9, t0, t1, t2, t3, t4, t5, t6, t7; - const uint32_t M = 0x3FFFFFFUL, R0 = 0x3D10UL, R1 = 0x400UL; - - VERIFY_BITS(a[0], 30); - VERIFY_BITS(a[1], 30); - VERIFY_BITS(a[2], 30); - VERIFY_BITS(a[3], 30); - VERIFY_BITS(a[4], 30); - VERIFY_BITS(a[5], 30); - VERIFY_BITS(a[6], 30); - VERIFY_BITS(a[7], 30); - VERIFY_BITS(a[8], 30); - VERIFY_BITS(a[9], 26); - - /** [... a b c] is a shorthand for ... + a<<52 + b<<26 + c<<0 mod n. - * px is a shorthand for sum(a[i]*a[x-i], i=0..x). - * Note that [x 0 0 0 0 0 0 0 0 0 0] = [x*R1 x*R0]. - */ - - d = (uint64_t)(a[0]*2) * a[9] - + (uint64_t)(a[1]*2) * a[8] - + (uint64_t)(a[2]*2) * a[7] - + (uint64_t)(a[3]*2) * a[6] - + (uint64_t)(a[4]*2) * a[5]; - /* VERIFY_BITS(d, 64); */ - /* [d 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */ - t9 = d & M; d >>= 26; - VERIFY_BITS(t9, 26); - VERIFY_BITS(d, 38); - /* [d t9 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */ - - c = (uint64_t)a[0] * a[0]; - VERIFY_BITS(c, 60); - /* [d t9 0 0 0 0 0 0 0 0 c] = [p9 0 0 0 0 0 0 0 0 p0] */ - d += (uint64_t)(a[1]*2) * a[9] - + (uint64_t)(a[2]*2) * a[8] - + (uint64_t)(a[3]*2) * a[7] - + (uint64_t)(a[4]*2) * a[6] - + (uint64_t)a[5] * a[5]; - VERIFY_BITS(d, 63); - /* [d t9 0 0 0 0 0 0 0 0 c] = [p10 p9 0 0 0 0 0 0 0 0 p0] */ - u0 = d & M; d >>= 26; c += u0 * R0; - VERIFY_BITS(u0, 26); - VERIFY_BITS(d, 37); - VERIFY_BITS(c, 61); - /* [d u0 t9 0 0 0 0 0 0 0 0 c-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */ - t0 = c & M; c >>= 26; c += u0 * R1; - VERIFY_BITS(t0, 26); - VERIFY_BITS(c, 37); - /* [d u0 t9 0 0 0 0 0 0 0 c-u0*R1 t0-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */ - /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */ - - c += (uint64_t)(a[0]*2) * a[1]; - VERIFY_BITS(c, 62); - /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 p1 p0] */ - d += (uint64_t)(a[2]*2) * a[9] - + (uint64_t)(a[3]*2) * a[8] - + (uint64_t)(a[4]*2) * a[7] - + (uint64_t)(a[5]*2) * a[6]; - VERIFY_BITS(d, 63); - /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */ - u1 = d & M; d >>= 26; c += u1 * R0; - VERIFY_BITS(u1, 26); - VERIFY_BITS(d, 37); - VERIFY_BITS(c, 63); - /* [d u1 0 t9 0 0 0 0 0 0 0 c-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */ - t1 = c & M; c >>= 26; c += u1 * R1; - VERIFY_BITS(t1, 26); - VERIFY_BITS(c, 38); - /* [d u1 0 t9 0 0 0 0 0 0 c-u1*R1 t1-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */ - /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */ - - c += (uint64_t)(a[0]*2) * a[2] - + (uint64_t)a[1] * a[1]; - VERIFY_BITS(c, 62); - /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - d += (uint64_t)(a[3]*2) * a[9] - + (uint64_t)(a[4]*2) * a[8] - + (uint64_t)(a[5]*2) * a[7] - + (uint64_t)a[6] * a[6]; - VERIFY_BITS(d, 63); - /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - u2 = d & M; d >>= 26; c += u2 * R0; - VERIFY_BITS(u2, 26); - VERIFY_BITS(d, 37); - VERIFY_BITS(c, 63); - /* [d u2 0 0 t9 0 0 0 0 0 0 c-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - t2 = c & M; c >>= 26; c += u2 * R1; - VERIFY_BITS(t2, 26); - VERIFY_BITS(c, 38); - /* [d u2 0 0 t9 0 0 0 0 0 c-u2*R1 t2-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */ - - c += (uint64_t)(a[0]*2) * a[3] - + (uint64_t)(a[1]*2) * a[2]; - VERIFY_BITS(c, 63); - /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - d += (uint64_t)(a[4]*2) * a[9] - + (uint64_t)(a[5]*2) * a[8] - + (uint64_t)(a[6]*2) * a[7]; - VERIFY_BITS(d, 63); - /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - u3 = d & M; d >>= 26; c += u3 * R0; - VERIFY_BITS(u3, 26); - VERIFY_BITS(d, 37); - /* VERIFY_BITS(c, 64); */ - /* [d u3 0 0 0 t9 0 0 0 0 0 c-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - t3 = c & M; c >>= 26; c += u3 * R1; - VERIFY_BITS(t3, 26); - VERIFY_BITS(c, 39); - /* [d u3 0 0 0 t9 0 0 0 0 c-u3*R1 t3-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */ - - c += (uint64_t)(a[0]*2) * a[4] - + (uint64_t)(a[1]*2) * a[3] - + (uint64_t)a[2] * a[2]; - VERIFY_BITS(c, 63); - /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - d += (uint64_t)(a[5]*2) * a[9] - + (uint64_t)(a[6]*2) * a[8] - + (uint64_t)a[7] * a[7]; - VERIFY_BITS(d, 62); - /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - u4 = d & M; d >>= 26; c += u4 * R0; - VERIFY_BITS(u4, 26); - VERIFY_BITS(d, 36); - /* VERIFY_BITS(c, 64); */ - /* [d u4 0 0 0 0 t9 0 0 0 0 c-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - t4 = c & M; c >>= 26; c += u4 * R1; - VERIFY_BITS(t4, 26); - VERIFY_BITS(c, 39); - /* [d u4 0 0 0 0 t9 0 0 0 c-u4*R1 t4-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */ - - c += (uint64_t)(a[0]*2) * a[5] - + (uint64_t)(a[1]*2) * a[4] - + (uint64_t)(a[2]*2) * a[3]; - VERIFY_BITS(c, 63); - /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - d += (uint64_t)(a[6]*2) * a[9] - + (uint64_t)(a[7]*2) * a[8]; - VERIFY_BITS(d, 62); - /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - u5 = d & M; d >>= 26; c += u5 * R0; - VERIFY_BITS(u5, 26); - VERIFY_BITS(d, 36); - /* VERIFY_BITS(c, 64); */ - /* [d u5 0 0 0 0 0 t9 0 0 0 c-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - t5 = c & M; c >>= 26; c += u5 * R1; - VERIFY_BITS(t5, 26); - VERIFY_BITS(c, 39); - /* [d u5 0 0 0 0 0 t9 0 0 c-u5*R1 t5-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */ - - c += (uint64_t)(a[0]*2) * a[6] - + (uint64_t)(a[1]*2) * a[5] - + (uint64_t)(a[2]*2) * a[4] - + (uint64_t)a[3] * a[3]; - VERIFY_BITS(c, 63); - /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - d += (uint64_t)(a[7]*2) * a[9] - + (uint64_t)a[8] * a[8]; - VERIFY_BITS(d, 61); - /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - u6 = d & M; d >>= 26; c += u6 * R0; - VERIFY_BITS(u6, 26); - VERIFY_BITS(d, 35); - /* VERIFY_BITS(c, 64); */ - /* [d u6 0 0 0 0 0 0 t9 0 0 c-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - t6 = c & M; c >>= 26; c += u6 * R1; - VERIFY_BITS(t6, 26); - VERIFY_BITS(c, 39); - /* [d u6 0 0 0 0 0 0 t9 0 c-u6*R1 t6-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */ - - c += (uint64_t)(a[0]*2) * a[7] - + (uint64_t)(a[1]*2) * a[6] - + (uint64_t)(a[2]*2) * a[5] - + (uint64_t)(a[3]*2) * a[4]; - /* VERIFY_BITS(c, 64); */ - VERIFY_CHECK(c <= 0x8000007C00000007ULL); - /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - d += (uint64_t)(a[8]*2) * a[9]; - VERIFY_BITS(d, 58); - /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - u7 = d & M; d >>= 26; c += u7 * R0; - VERIFY_BITS(u7, 26); - VERIFY_BITS(d, 32); - /* VERIFY_BITS(c, 64); */ - VERIFY_CHECK(c <= 0x800001703FFFC2F7ULL); - /* [d u7 0 0 0 0 0 0 0 t9 0 c-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - t7 = c & M; c >>= 26; c += u7 * R1; - VERIFY_BITS(t7, 26); - VERIFY_BITS(c, 38); - /* [d u7 0 0 0 0 0 0 0 t9 c-u7*R1 t7-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */ - - c += (uint64_t)(a[0]*2) * a[8] - + (uint64_t)(a[1]*2) * a[7] - + (uint64_t)(a[2]*2) * a[6] - + (uint64_t)(a[3]*2) * a[5] - + (uint64_t)a[4] * a[4]; - /* VERIFY_BITS(c, 64); */ - VERIFY_CHECK(c <= 0x9000007B80000008ULL); - /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - d += (uint64_t)a[9] * a[9]; - VERIFY_BITS(d, 57); - /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - u8 = d & M; d >>= 26; c += u8 * R0; - VERIFY_BITS(u8, 26); - VERIFY_BITS(d, 31); - /* VERIFY_BITS(c, 64); */ - VERIFY_CHECK(c <= 0x9000016FBFFFC2F8ULL); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - - r[3] = t3; - VERIFY_BITS(r[3], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[4] = t4; - VERIFY_BITS(r[4], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[5] = t5; - VERIFY_BITS(r[5], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[6] = t6; - VERIFY_BITS(r[6], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[7] = t7; - VERIFY_BITS(r[7], 26); - /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - - r[8] = c & M; c >>= 26; c += u8 * R1; - VERIFY_BITS(r[8], 26); - VERIFY_BITS(c, 39); - /* [d u8 0 0 0 0 0 0 0 0 t9+c-u8*R1 r8-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 0 0 0 t9+c r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - c += d * R0 + t9; - VERIFY_BITS(c, 45); - /* [d 0 0 0 0 0 0 0 0 0 c-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[9] = c & (M >> 4); c >>= 22; c += d * (R1 << 4); - VERIFY_BITS(r[9], 22); - VERIFY_BITS(c, 46); - /* [d 0 0 0 0 0 0 0 0 r9+((c-d*R1<<4)<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [d 0 0 0 0 0 0 0 -d*R1 r9+(c<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - - d = c * (R0 >> 4) + t0; - VERIFY_BITS(d, 56); - /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 d-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[0] = d & M; d >>= 26; - VERIFY_BITS(r[0], 26); - VERIFY_BITS(d, 30); - /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1+d r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - d += c * (R1 >> 4) + t1; - VERIFY_BITS(d, 53); - VERIFY_CHECK(d <= 0x10000003FFFFBFULL); - /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 d-c*R1>>4 r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - /* [r9 r8 r7 r6 r5 r4 r3 t2 d r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[1] = d & M; d >>= 26; - VERIFY_BITS(r[1], 26); - VERIFY_BITS(d, 27); - VERIFY_CHECK(d <= 0x4000000ULL); - /* [r9 r8 r7 r6 r5 r4 r3 t2+d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - d += t2; - VERIFY_BITS(d, 27); - /* [r9 r8 r7 r6 r5 r4 r3 d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[2] = d; - VERIFY_BITS(r[2], 27); - /* [r9 r8 r7 r6 r5 r4 r3 r2 r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */ -} -#endif - -static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) { -#ifdef VERIFY - VERIFY_CHECK(a->magnitude <= 8); - VERIFY_CHECK(b->magnitude <= 8); - secp256k1_fe_verify(a); - secp256k1_fe_verify(b); - VERIFY_CHECK(r != b); -#endif - secp256k1_fe_mul_inner(r->n, a->n, b->n); -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) { -#ifdef VERIFY - VERIFY_CHECK(a->magnitude <= 8); - secp256k1_fe_verify(a); -#endif - secp256k1_fe_sqr_inner(r->n, a->n); -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -static SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag) { - uint32_t mask0, mask1; - mask0 = flag + ~((uint32_t)0); - mask1 = ~mask0; - r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1); - r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1); - r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1); - r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1); - r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1); - r->n[5] = (r->n[5] & mask0) | (a->n[5] & mask1); - r->n[6] = (r->n[6] & mask0) | (a->n[6] & mask1); - r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1); - r->n[8] = (r->n[8] & mask0) | (a->n[8] & mask1); - r->n[9] = (r->n[9] & mask0) | (a->n[9] & mask1); -#ifdef VERIFY - if (a->magnitude > r->magnitude) { - r->magnitude = a->magnitude; - } - r->normalized &= a->normalized; -#endif -} - -static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag) { - uint32_t mask0, mask1; - mask0 = flag + ~((uint32_t)0); - mask1 = ~mask0; - r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1); - r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1); - r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1); - r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1); - r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1); - r->n[5] = (r->n[5] & mask0) | (a->n[5] & mask1); - r->n[6] = (r->n[6] & mask0) | (a->n[6] & mask1); - r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1); -} - -static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) { -#ifdef VERIFY - VERIFY_CHECK(a->normalized); -#endif - r->n[0] = a->n[0] | a->n[1] << 26; - r->n[1] = a->n[1] >> 6 | a->n[2] << 20; - r->n[2] = a->n[2] >> 12 | a->n[3] << 14; - r->n[3] = a->n[3] >> 18 | a->n[4] << 8; - r->n[4] = a->n[4] >> 24 | a->n[5] << 2 | a->n[6] << 28; - r->n[5] = a->n[6] >> 4 | a->n[7] << 22; - r->n[6] = a->n[7] >> 10 | a->n[8] << 16; - r->n[7] = a->n[8] >> 16 | a->n[9] << 10; -} - -static SECP256K1_INLINE void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a) { - r->n[0] = a->n[0] & 0x3FFFFFFUL; - r->n[1] = a->n[0] >> 26 | ((a->n[1] << 6) & 0x3FFFFFFUL); - r->n[2] = a->n[1] >> 20 | ((a->n[2] << 12) & 0x3FFFFFFUL); - r->n[3] = a->n[2] >> 14 | ((a->n[3] << 18) & 0x3FFFFFFUL); - r->n[4] = a->n[3] >> 8 | ((a->n[4] << 24) & 0x3FFFFFFUL); - r->n[5] = (a->n[4] >> 2) & 0x3FFFFFFUL; - r->n[6] = a->n[4] >> 28 | ((a->n[5] << 4) & 0x3FFFFFFUL); - r->n[7] = a->n[5] >> 22 | ((a->n[6] << 10) & 0x3FFFFFFUL); - r->n[8] = a->n[6] >> 16 | ((a->n[7] << 16) & 0x3FFFFFFUL); - r->n[9] = a->n[7] >> 10; -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; -#endif -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/field_5x52.h b/node_modules/secp256k1/src/secp256k1-src/src/field_5x52.h deleted file mode 100644 index 8e69a56..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/field_5x52.h +++ /dev/null @@ -1,47 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_FIELD_REPR_ -#define _SECP256K1_FIELD_REPR_ - -#include - -typedef struct { - /* X = sum(i=0..4, elem[i]*2^52) mod n */ - uint64_t n[5]; -#ifdef VERIFY - int magnitude; - int normalized; -#endif -} secp256k1_fe; - -/* Unpacks a constant into a overlapping multi-limbed FE element. */ -#define SECP256K1_FE_CONST_INNER(d7, d6, d5, d4, d3, d2, d1, d0) { \ - (d0) | (((uint64_t)(d1) & 0xFFFFFUL) << 32), \ - ((uint64_t)(d1) >> 20) | (((uint64_t)(d2)) << 12) | (((uint64_t)(d3) & 0xFFUL) << 44), \ - ((uint64_t)(d3) >> 8) | (((uint64_t)(d4) & 0xFFFFFFFUL) << 24), \ - ((uint64_t)(d4) >> 28) | (((uint64_t)(d5)) << 4) | (((uint64_t)(d6) & 0xFFFFUL) << 36), \ - ((uint64_t)(d6) >> 16) | (((uint64_t)(d7)) << 16) \ -} - -#ifdef VERIFY -#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0)), 1, 1} -#else -#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0))} -#endif - -typedef struct { - uint64_t n[4]; -} secp256k1_fe_storage; - -#define SECP256K1_FE_STORAGE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{ \ - (d0) | (((uint64_t)(d1)) << 32), \ - (d2) | (((uint64_t)(d3)) << 32), \ - (d4) | (((uint64_t)(d5)) << 32), \ - (d6) | (((uint64_t)(d7)) << 32) \ -}} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_asm_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_asm_impl.h deleted file mode 100644 index 98cc004..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_asm_impl.h +++ /dev/null @@ -1,502 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013-2014 Diederik Huys, Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -/** - * Changelog: - * - March 2013, Diederik Huys: original version - * - November 2014, Pieter Wuille: updated to use Peter Dettman's parallel multiplication algorithm - * - December 2014, Pieter Wuille: converted from YASM to GCC inline assembly - */ - -#ifndef _SECP256K1_FIELD_INNER5X52_IMPL_H_ -#define _SECP256K1_FIELD_INNER5X52_IMPL_H_ - -SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint64_t *r, const uint64_t *a, const uint64_t * SECP256K1_RESTRICT b) { -/** - * Registers: rdx:rax = multiplication accumulator - * r9:r8 = c - * r15:rcx = d - * r10-r14 = a0-a4 - * rbx = b - * rdi = r - * rsi = a / t? - */ - uint64_t tmp1, tmp2, tmp3; -__asm__ __volatile__( - "movq 0(%%rsi),%%r10\n" - "movq 8(%%rsi),%%r11\n" - "movq 16(%%rsi),%%r12\n" - "movq 24(%%rsi),%%r13\n" - "movq 32(%%rsi),%%r14\n" - - /* d += a3 * b0 */ - "movq 0(%%rbx),%%rax\n" - "mulq %%r13\n" - "movq %%rax,%%rcx\n" - "movq %%rdx,%%r15\n" - /* d += a2 * b1 */ - "movq 8(%%rbx),%%rax\n" - "mulq %%r12\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a1 * b2 */ - "movq 16(%%rbx),%%rax\n" - "mulq %%r11\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d = a0 * b3 */ - "movq 24(%%rbx),%%rax\n" - "mulq %%r10\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* c = a4 * b4 */ - "movq 32(%%rbx),%%rax\n" - "mulq %%r14\n" - "movq %%rax,%%r8\n" - "movq %%rdx,%%r9\n" - /* d += (c & M) * R */ - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* c >>= 52 (%%r8 only) */ - "shrdq $52,%%r9,%%r8\n" - /* t3 (tmp1) = d & M */ - "movq %%rcx,%%rsi\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rsi\n" - "movq %%rsi,%q1\n" - /* d >>= 52 */ - "shrdq $52,%%r15,%%rcx\n" - "xorq %%r15,%%r15\n" - /* d += a4 * b0 */ - "movq 0(%%rbx),%%rax\n" - "mulq %%r14\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a3 * b1 */ - "movq 8(%%rbx),%%rax\n" - "mulq %%r13\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a2 * b2 */ - "movq 16(%%rbx),%%rax\n" - "mulq %%r12\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a1 * b3 */ - "movq 24(%%rbx),%%rax\n" - "mulq %%r11\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a0 * b4 */ - "movq 32(%%rbx),%%rax\n" - "mulq %%r10\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += c * R */ - "movq %%r8,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* t4 = d & M (%%rsi) */ - "movq %%rcx,%%rsi\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rsi\n" - /* d >>= 52 */ - "shrdq $52,%%r15,%%rcx\n" - "xorq %%r15,%%r15\n" - /* tx = t4 >> 48 (tmp3) */ - "movq %%rsi,%%rax\n" - "shrq $48,%%rax\n" - "movq %%rax,%q3\n" - /* t4 &= (M >> 4) (tmp2) */ - "movq $0xffffffffffff,%%rax\n" - "andq %%rax,%%rsi\n" - "movq %%rsi,%q2\n" - /* c = a0 * b0 */ - "movq 0(%%rbx),%%rax\n" - "mulq %%r10\n" - "movq %%rax,%%r8\n" - "movq %%rdx,%%r9\n" - /* d += a4 * b1 */ - "movq 8(%%rbx),%%rax\n" - "mulq %%r14\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a3 * b2 */ - "movq 16(%%rbx),%%rax\n" - "mulq %%r13\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a2 * b3 */ - "movq 24(%%rbx),%%rax\n" - "mulq %%r12\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a1 * b4 */ - "movq 32(%%rbx),%%rax\n" - "mulq %%r11\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* u0 = d & M (%%rsi) */ - "movq %%rcx,%%rsi\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rsi\n" - /* d >>= 52 */ - "shrdq $52,%%r15,%%rcx\n" - "xorq %%r15,%%r15\n" - /* u0 = (u0 << 4) | tx (%%rsi) */ - "shlq $4,%%rsi\n" - "movq %q3,%%rax\n" - "orq %%rax,%%rsi\n" - /* c += u0 * (R >> 4) */ - "movq $0x1000003d1,%%rax\n" - "mulq %%rsi\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* r[0] = c & M */ - "movq %%r8,%%rax\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rax\n" - "movq %%rax,0(%%rdi)\n" - /* c >>= 52 */ - "shrdq $52,%%r9,%%r8\n" - "xorq %%r9,%%r9\n" - /* c += a1 * b0 */ - "movq 0(%%rbx),%%rax\n" - "mulq %%r11\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* c += a0 * b1 */ - "movq 8(%%rbx),%%rax\n" - "mulq %%r10\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* d += a4 * b2 */ - "movq 16(%%rbx),%%rax\n" - "mulq %%r14\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a3 * b3 */ - "movq 24(%%rbx),%%rax\n" - "mulq %%r13\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a2 * b4 */ - "movq 32(%%rbx),%%rax\n" - "mulq %%r12\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* c += (d & M) * R */ - "movq %%rcx,%%rax\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* d >>= 52 */ - "shrdq $52,%%r15,%%rcx\n" - "xorq %%r15,%%r15\n" - /* r[1] = c & M */ - "movq %%r8,%%rax\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rax\n" - "movq %%rax,8(%%rdi)\n" - /* c >>= 52 */ - "shrdq $52,%%r9,%%r8\n" - "xorq %%r9,%%r9\n" - /* c += a2 * b0 */ - "movq 0(%%rbx),%%rax\n" - "mulq %%r12\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* c += a1 * b1 */ - "movq 8(%%rbx),%%rax\n" - "mulq %%r11\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* c += a0 * b2 (last use of %%r10 = a0) */ - "movq 16(%%rbx),%%rax\n" - "mulq %%r10\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* fetch t3 (%%r10, overwrites a0), t4 (%%rsi) */ - "movq %q2,%%rsi\n" - "movq %q1,%%r10\n" - /* d += a4 * b3 */ - "movq 24(%%rbx),%%rax\n" - "mulq %%r14\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* d += a3 * b4 */ - "movq 32(%%rbx),%%rax\n" - "mulq %%r13\n" - "addq %%rax,%%rcx\n" - "adcq %%rdx,%%r15\n" - /* c += (d & M) * R */ - "movq %%rcx,%%rax\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* d >>= 52 (%%rcx only) */ - "shrdq $52,%%r15,%%rcx\n" - /* r[2] = c & M */ - "movq %%r8,%%rax\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rax\n" - "movq %%rax,16(%%rdi)\n" - /* c >>= 52 */ - "shrdq $52,%%r9,%%r8\n" - "xorq %%r9,%%r9\n" - /* c += t3 */ - "addq %%r10,%%r8\n" - /* c += d * R */ - "movq %%rcx,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* r[3] = c & M */ - "movq %%r8,%%rax\n" - "movq $0xfffffffffffff,%%rdx\n" - "andq %%rdx,%%rax\n" - "movq %%rax,24(%%rdi)\n" - /* c >>= 52 (%%r8 only) */ - "shrdq $52,%%r9,%%r8\n" - /* c += t4 (%%r8 only) */ - "addq %%rsi,%%r8\n" - /* r[4] = c */ - "movq %%r8,32(%%rdi)\n" -: "+S"(a), "=m"(tmp1), "=m"(tmp2), "=m"(tmp3) -: "b"(b), "D"(r) -: "%rax", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", "cc", "memory" -); -} - -SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint64_t *r, const uint64_t *a) { -/** - * Registers: rdx:rax = multiplication accumulator - * r9:r8 = c - * rcx:rbx = d - * r10-r14 = a0-a4 - * r15 = M (0xfffffffffffff) - * rdi = r - * rsi = a / t? - */ - uint64_t tmp1, tmp2, tmp3; -__asm__ __volatile__( - "movq 0(%%rsi),%%r10\n" - "movq 8(%%rsi),%%r11\n" - "movq 16(%%rsi),%%r12\n" - "movq 24(%%rsi),%%r13\n" - "movq 32(%%rsi),%%r14\n" - "movq $0xfffffffffffff,%%r15\n" - - /* d = (a0*2) * a3 */ - "leaq (%%r10,%%r10,1),%%rax\n" - "mulq %%r13\n" - "movq %%rax,%%rbx\n" - "movq %%rdx,%%rcx\n" - /* d += (a1*2) * a2 */ - "leaq (%%r11,%%r11,1),%%rax\n" - "mulq %%r12\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* c = a4 * a4 */ - "movq %%r14,%%rax\n" - "mulq %%r14\n" - "movq %%rax,%%r8\n" - "movq %%rdx,%%r9\n" - /* d += (c & M) * R */ - "andq %%r15,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* c >>= 52 (%%r8 only) */ - "shrdq $52,%%r9,%%r8\n" - /* t3 (tmp1) = d & M */ - "movq %%rbx,%%rsi\n" - "andq %%r15,%%rsi\n" - "movq %%rsi,%q1\n" - /* d >>= 52 */ - "shrdq $52,%%rcx,%%rbx\n" - "xorq %%rcx,%%rcx\n" - /* a4 *= 2 */ - "addq %%r14,%%r14\n" - /* d += a0 * a4 */ - "movq %%r10,%%rax\n" - "mulq %%r14\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* d+= (a1*2) * a3 */ - "leaq (%%r11,%%r11,1),%%rax\n" - "mulq %%r13\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* d += a2 * a2 */ - "movq %%r12,%%rax\n" - "mulq %%r12\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* d += c * R */ - "movq %%r8,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* t4 = d & M (%%rsi) */ - "movq %%rbx,%%rsi\n" - "andq %%r15,%%rsi\n" - /* d >>= 52 */ - "shrdq $52,%%rcx,%%rbx\n" - "xorq %%rcx,%%rcx\n" - /* tx = t4 >> 48 (tmp3) */ - "movq %%rsi,%%rax\n" - "shrq $48,%%rax\n" - "movq %%rax,%q3\n" - /* t4 &= (M >> 4) (tmp2) */ - "movq $0xffffffffffff,%%rax\n" - "andq %%rax,%%rsi\n" - "movq %%rsi,%q2\n" - /* c = a0 * a0 */ - "movq %%r10,%%rax\n" - "mulq %%r10\n" - "movq %%rax,%%r8\n" - "movq %%rdx,%%r9\n" - /* d += a1 * a4 */ - "movq %%r11,%%rax\n" - "mulq %%r14\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* d += (a2*2) * a3 */ - "leaq (%%r12,%%r12,1),%%rax\n" - "mulq %%r13\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* u0 = d & M (%%rsi) */ - "movq %%rbx,%%rsi\n" - "andq %%r15,%%rsi\n" - /* d >>= 52 */ - "shrdq $52,%%rcx,%%rbx\n" - "xorq %%rcx,%%rcx\n" - /* u0 = (u0 << 4) | tx (%%rsi) */ - "shlq $4,%%rsi\n" - "movq %q3,%%rax\n" - "orq %%rax,%%rsi\n" - /* c += u0 * (R >> 4) */ - "movq $0x1000003d1,%%rax\n" - "mulq %%rsi\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* r[0] = c & M */ - "movq %%r8,%%rax\n" - "andq %%r15,%%rax\n" - "movq %%rax,0(%%rdi)\n" - /* c >>= 52 */ - "shrdq $52,%%r9,%%r8\n" - "xorq %%r9,%%r9\n" - /* a0 *= 2 */ - "addq %%r10,%%r10\n" - /* c += a0 * a1 */ - "movq %%r10,%%rax\n" - "mulq %%r11\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* d += a2 * a4 */ - "movq %%r12,%%rax\n" - "mulq %%r14\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* d += a3 * a3 */ - "movq %%r13,%%rax\n" - "mulq %%r13\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* c += (d & M) * R */ - "movq %%rbx,%%rax\n" - "andq %%r15,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* d >>= 52 */ - "shrdq $52,%%rcx,%%rbx\n" - "xorq %%rcx,%%rcx\n" - /* r[1] = c & M */ - "movq %%r8,%%rax\n" - "andq %%r15,%%rax\n" - "movq %%rax,8(%%rdi)\n" - /* c >>= 52 */ - "shrdq $52,%%r9,%%r8\n" - "xorq %%r9,%%r9\n" - /* c += a0 * a2 (last use of %%r10) */ - "movq %%r10,%%rax\n" - "mulq %%r12\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* fetch t3 (%%r10, overwrites a0),t4 (%%rsi) */ - "movq %q2,%%rsi\n" - "movq %q1,%%r10\n" - /* c += a1 * a1 */ - "movq %%r11,%%rax\n" - "mulq %%r11\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* d += a3 * a4 */ - "movq %%r13,%%rax\n" - "mulq %%r14\n" - "addq %%rax,%%rbx\n" - "adcq %%rdx,%%rcx\n" - /* c += (d & M) * R */ - "movq %%rbx,%%rax\n" - "andq %%r15,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* d >>= 52 (%%rbx only) */ - "shrdq $52,%%rcx,%%rbx\n" - /* r[2] = c & M */ - "movq %%r8,%%rax\n" - "andq %%r15,%%rax\n" - "movq %%rax,16(%%rdi)\n" - /* c >>= 52 */ - "shrdq $52,%%r9,%%r8\n" - "xorq %%r9,%%r9\n" - /* c += t3 */ - "addq %%r10,%%r8\n" - /* c += d * R */ - "movq %%rbx,%%rax\n" - "movq $0x1000003d10,%%rdx\n" - "mulq %%rdx\n" - "addq %%rax,%%r8\n" - "adcq %%rdx,%%r9\n" - /* r[3] = c & M */ - "movq %%r8,%%rax\n" - "andq %%r15,%%rax\n" - "movq %%rax,24(%%rdi)\n" - /* c >>= 52 (%%r8 only) */ - "shrdq $52,%%r9,%%r8\n" - /* c += t4 (%%r8 only) */ - "addq %%rsi,%%r8\n" - /* r[4] = c */ - "movq %%r8,32(%%rdi)\n" -: "+S"(a), "=m"(tmp1), "=m"(tmp2), "=m"(tmp3) -: "D"(r) -: "%rax", "%rbx", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", "cc", "memory" -); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_impl.h deleted file mode 100644 index 7a99eb2..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_impl.h +++ /dev/null @@ -1,455 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_FIELD_REPR_IMPL_H_ -#define _SECP256K1_FIELD_REPR_IMPL_H_ - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#include "util.h" -#include "num.h" -#include "field.h" - -#if defined(USE_ASM_X86_64) -#include "field_5x52_asm_impl.h" -#else -#include "field_5x52_int128_impl.h" -#endif - -/** Implements arithmetic modulo FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F, - * represented as 5 uint64_t's in base 2^52. The values are allowed to contain >52 each. In particular, - * each FieldElem has a 'magnitude' associated with it. Internally, a magnitude M means each element - * is at most M*(2^53-1), except the most significant one, which is limited to M*(2^49-1). All operations - * accept any input with magnitude at most M, and have different rules for propagating magnitude to their - * output. - */ - -#ifdef VERIFY -static void secp256k1_fe_verify(const secp256k1_fe *a) { - const uint64_t *d = a->n; - int m = a->normalized ? 1 : 2 * a->magnitude, r = 1; - /* secp256k1 'p' value defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */ - r &= (d[0] <= 0xFFFFFFFFFFFFFULL * m); - r &= (d[1] <= 0xFFFFFFFFFFFFFULL * m); - r &= (d[2] <= 0xFFFFFFFFFFFFFULL * m); - r &= (d[3] <= 0xFFFFFFFFFFFFFULL * m); - r &= (d[4] <= 0x0FFFFFFFFFFFFULL * m); - r &= (a->magnitude >= 0); - r &= (a->magnitude <= 2048); - if (a->normalized) { - r &= (a->magnitude <= 1); - if (r && (d[4] == 0x0FFFFFFFFFFFFULL) && ((d[3] & d[2] & d[1]) == 0xFFFFFFFFFFFFFULL)) { - r &= (d[0] < 0xFFFFEFFFFFC2FULL); - } - } - VERIFY_CHECK(r == 1); -} -#else -static void secp256k1_fe_verify(const secp256k1_fe *a) { - (void)a; -} -#endif - -static void secp256k1_fe_normalize(secp256k1_fe *r) { - uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4]; - - /* Reduce t4 at the start so there will be at most a single carry from the first pass */ - uint64_t m; - uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x1000003D1ULL; - t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; - t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; m = t1; - t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; m &= t2; - t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; m &= t3; - - /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t4 >> 49 == 0); - - /* At most a single final reduction is needed; check if the value is >= the field characteristic */ - x = (t4 >> 48) | ((t4 == 0x0FFFFFFFFFFFFULL) & (m == 0xFFFFFFFFFFFFFULL) - & (t0 >= 0xFFFFEFFFFFC2FULL)); - - /* Apply the final reduction (for constant-time behaviour, we do it always) */ - t0 += x * 0x1000003D1ULL; - t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; - t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; - t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; - t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; - - /* If t4 didn't carry to bit 48 already, then it should have after any final reduction */ - VERIFY_CHECK(t4 >> 48 == x); - - /* Mask off the possible multiple of 2^256 from the final reduction */ - t4 &= 0x0FFFFFFFFFFFFULL; - - r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4; - -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; - secp256k1_fe_verify(r); -#endif -} - -static void secp256k1_fe_normalize_weak(secp256k1_fe *r) { - uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4]; - - /* Reduce t4 at the start so there will be at most a single carry from the first pass */ - uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x1000003D1ULL; - t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; - t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; - t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; - t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; - - /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t4 >> 49 == 0); - - r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4; - -#ifdef VERIFY - r->magnitude = 1; - secp256k1_fe_verify(r); -#endif -} - -static void secp256k1_fe_normalize_var(secp256k1_fe *r) { - uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4]; - - /* Reduce t4 at the start so there will be at most a single carry from the first pass */ - uint64_t m; - uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x1000003D1ULL; - t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; - t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; m = t1; - t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; m &= t2; - t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; m &= t3; - - /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t4 >> 49 == 0); - - /* At most a single final reduction is needed; check if the value is >= the field characteristic */ - x = (t4 >> 48) | ((t4 == 0x0FFFFFFFFFFFFULL) & (m == 0xFFFFFFFFFFFFFULL) - & (t0 >= 0xFFFFEFFFFFC2FULL)); - - if (x) { - t0 += 0x1000003D1ULL; - t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; - t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; - t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; - t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; - - /* If t4 didn't carry to bit 48 already, then it should have after any final reduction */ - VERIFY_CHECK(t4 >> 48 == x); - - /* Mask off the possible multiple of 2^256 from the final reduction */ - t4 &= 0x0FFFFFFFFFFFFULL; - } - - r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4; - -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; - secp256k1_fe_verify(r); -#endif -} - -static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r) { - uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4]; - - /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */ - uint64_t z0, z1; - - /* Reduce t4 at the start so there will be at most a single carry from the first pass */ - uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x1000003D1ULL; - t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; z0 = t0; z1 = t0 ^ 0x1000003D0ULL; - t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; z0 |= t1; z1 &= t1; - t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; z0 |= t2; z1 &= t2; - t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; z0 |= t3; z1 &= t3; - z0 |= t4; z1 &= t4 ^ 0xF000000000000ULL; - - /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t4 >> 49 == 0); - - return (z0 == 0) | (z1 == 0xFFFFFFFFFFFFFULL); -} - -static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r) { - uint64_t t0, t1, t2, t3, t4; - uint64_t z0, z1; - uint64_t x; - - t0 = r->n[0]; - t4 = r->n[4]; - - /* Reduce t4 at the start so there will be at most a single carry from the first pass */ - x = t4 >> 48; - - /* The first pass ensures the magnitude is 1, ... */ - t0 += x * 0x1000003D1ULL; - - /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */ - z0 = t0 & 0xFFFFFFFFFFFFFULL; - z1 = z0 ^ 0x1000003D0ULL; - - /* Fast return path should catch the majority of cases */ - if ((z0 != 0ULL) & (z1 != 0xFFFFFFFFFFFFFULL)) { - return 0; - } - - t1 = r->n[1]; - t2 = r->n[2]; - t3 = r->n[3]; - - t4 &= 0x0FFFFFFFFFFFFULL; - - t1 += (t0 >> 52); - t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; z0 |= t1; z1 &= t1; - t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; z0 |= t2; z1 &= t2; - t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; z0 |= t3; z1 &= t3; - z0 |= t4; z1 &= t4 ^ 0xF000000000000ULL; - - /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */ - VERIFY_CHECK(t4 >> 49 == 0); - - return (z0 == 0) | (z1 == 0xFFFFFFFFFFFFFULL); -} - -SECP256K1_INLINE static void secp256k1_fe_set_int(secp256k1_fe *r, int a) { - r->n[0] = a; - r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0; -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; - secp256k1_fe_verify(r); -#endif -} - -SECP256K1_INLINE static int secp256k1_fe_is_zero(const secp256k1_fe *a) { - const uint64_t *t = a->n; -#ifdef VERIFY - VERIFY_CHECK(a->normalized); - secp256k1_fe_verify(a); -#endif - return (t[0] | t[1] | t[2] | t[3] | t[4]) == 0; -} - -SECP256K1_INLINE static int secp256k1_fe_is_odd(const secp256k1_fe *a) { -#ifdef VERIFY - VERIFY_CHECK(a->normalized); - secp256k1_fe_verify(a); -#endif - return a->n[0] & 1; -} - -SECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) { - int i; -#ifdef VERIFY - a->magnitude = 0; - a->normalized = 1; -#endif - for (i=0; i<5; i++) { - a->n[i] = 0; - } -} - -static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b) { - int i; -#ifdef VERIFY - VERIFY_CHECK(a->normalized); - VERIFY_CHECK(b->normalized); - secp256k1_fe_verify(a); - secp256k1_fe_verify(b); -#endif - for (i = 4; i >= 0; i--) { - if (a->n[i] > b->n[i]) { - return 1; - } - if (a->n[i] < b->n[i]) { - return -1; - } - } - return 0; -} - -static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a) { - int i; - r->n[0] = r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0; - for (i=0; i<32; i++) { - int j; - for (j=0; j<2; j++) { - int limb = (8*i+4*j)/52; - int shift = (8*i+4*j)%52; - r->n[limb] |= (uint64_t)((a[31-i] >> (4*j)) & 0xF) << shift; - } - } - if (r->n[4] == 0x0FFFFFFFFFFFFULL && (r->n[3] & r->n[2] & r->n[1]) == 0xFFFFFFFFFFFFFULL && r->n[0] >= 0xFFFFEFFFFFC2FULL) { - return 0; - } -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; - secp256k1_fe_verify(r); -#endif - return 1; -} - -/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */ -static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a) { - int i; -#ifdef VERIFY - VERIFY_CHECK(a->normalized); - secp256k1_fe_verify(a); -#endif - for (i=0; i<32; i++) { - int j; - int c = 0; - for (j=0; j<2; j++) { - int limb = (8*i+4*j)/52; - int shift = (8*i+4*j)%52; - c |= ((a->n[limb] >> shift) & 0xF) << (4 * j); - } - r[31-i] = c; - } -} - -SECP256K1_INLINE static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m) { -#ifdef VERIFY - VERIFY_CHECK(a->magnitude <= m); - secp256k1_fe_verify(a); -#endif - r->n[0] = 0xFFFFEFFFFFC2FULL * 2 * (m + 1) - a->n[0]; - r->n[1] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[1]; - r->n[2] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[2]; - r->n[3] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[3]; - r->n[4] = 0x0FFFFFFFFFFFFULL * 2 * (m + 1) - a->n[4]; -#ifdef VERIFY - r->magnitude = m + 1; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -SECP256K1_INLINE static void secp256k1_fe_mul_int(secp256k1_fe *r, int a) { - r->n[0] *= a; - r->n[1] *= a; - r->n[2] *= a; - r->n[3] *= a; - r->n[4] *= a; -#ifdef VERIFY - r->magnitude *= a; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -SECP256K1_INLINE static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a) { -#ifdef VERIFY - secp256k1_fe_verify(a); -#endif - r->n[0] += a->n[0]; - r->n[1] += a->n[1]; - r->n[2] += a->n[2]; - r->n[3] += a->n[3]; - r->n[4] += a->n[4]; -#ifdef VERIFY - r->magnitude += a->magnitude; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) { -#ifdef VERIFY - VERIFY_CHECK(a->magnitude <= 8); - VERIFY_CHECK(b->magnitude <= 8); - secp256k1_fe_verify(a); - secp256k1_fe_verify(b); - VERIFY_CHECK(r != b); -#endif - secp256k1_fe_mul_inner(r->n, a->n, b->n); -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) { -#ifdef VERIFY - VERIFY_CHECK(a->magnitude <= 8); - secp256k1_fe_verify(a); -#endif - secp256k1_fe_sqr_inner(r->n, a->n); -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 0; - secp256k1_fe_verify(r); -#endif -} - -static SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag) { - uint64_t mask0, mask1; - mask0 = flag + ~((uint64_t)0); - mask1 = ~mask0; - r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1); - r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1); - r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1); - r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1); - r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1); -#ifdef VERIFY - if (a->magnitude > r->magnitude) { - r->magnitude = a->magnitude; - } - r->normalized &= a->normalized; -#endif -} - -static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag) { - uint64_t mask0, mask1; - mask0 = flag + ~((uint64_t)0); - mask1 = ~mask0; - r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1); - r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1); - r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1); - r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1); -} - -static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) { -#ifdef VERIFY - VERIFY_CHECK(a->normalized); -#endif - r->n[0] = a->n[0] | a->n[1] << 52; - r->n[1] = a->n[1] >> 12 | a->n[2] << 40; - r->n[2] = a->n[2] >> 24 | a->n[3] << 28; - r->n[3] = a->n[3] >> 36 | a->n[4] << 16; -} - -static SECP256K1_INLINE void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a) { - r->n[0] = a->n[0] & 0xFFFFFFFFFFFFFULL; - r->n[1] = a->n[0] >> 52 | ((a->n[1] << 12) & 0xFFFFFFFFFFFFFULL); - r->n[2] = a->n[1] >> 40 | ((a->n[2] << 24) & 0xFFFFFFFFFFFFFULL); - r->n[3] = a->n[2] >> 28 | ((a->n[3] << 36) & 0xFFFFFFFFFFFFFULL); - r->n[4] = a->n[3] >> 16; -#ifdef VERIFY - r->magnitude = 1; - r->normalized = 1; -#endif -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_int128_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_int128_impl.h deleted file mode 100644 index 0bf22bd..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/field_5x52_int128_impl.h +++ /dev/null @@ -1,277 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_FIELD_INNER5X52_IMPL_H_ -#define _SECP256K1_FIELD_INNER5X52_IMPL_H_ - -#include - -#ifdef VERIFY -#define VERIFY_BITS(x, n) VERIFY_CHECK(((x) >> (n)) == 0) -#else -#define VERIFY_BITS(x, n) do { } while(0) -#endif - -SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint64_t *r, const uint64_t *a, const uint64_t * SECP256K1_RESTRICT b) { - uint128_t c, d; - uint64_t t3, t4, tx, u0; - uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4]; - const uint64_t M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL; - - VERIFY_BITS(a[0], 56); - VERIFY_BITS(a[1], 56); - VERIFY_BITS(a[2], 56); - VERIFY_BITS(a[3], 56); - VERIFY_BITS(a[4], 52); - VERIFY_BITS(b[0], 56); - VERIFY_BITS(b[1], 56); - VERIFY_BITS(b[2], 56); - VERIFY_BITS(b[3], 56); - VERIFY_BITS(b[4], 52); - VERIFY_CHECK(r != b); - - /* [... a b c] is a shorthand for ... + a<<104 + b<<52 + c<<0 mod n. - * px is a shorthand for sum(a[i]*b[x-i], i=0..x). - * Note that [x 0 0 0 0 0] = [x*R]. - */ - - d = (uint128_t)a0 * b[3] - + (uint128_t)a1 * b[2] - + (uint128_t)a2 * b[1] - + (uint128_t)a3 * b[0]; - VERIFY_BITS(d, 114); - /* [d 0 0 0] = [p3 0 0 0] */ - c = (uint128_t)a4 * b[4]; - VERIFY_BITS(c, 112); - /* [c 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */ - d += (c & M) * R; c >>= 52; - VERIFY_BITS(d, 115); - VERIFY_BITS(c, 60); - /* [c 0 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */ - t3 = d & M; d >>= 52; - VERIFY_BITS(t3, 52); - VERIFY_BITS(d, 63); - /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */ - - d += (uint128_t)a0 * b[4] - + (uint128_t)a1 * b[3] - + (uint128_t)a2 * b[2] - + (uint128_t)a3 * b[1] - + (uint128_t)a4 * b[0]; - VERIFY_BITS(d, 115); - /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */ - d += c * R; - VERIFY_BITS(d, 116); - /* [d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */ - t4 = d & M; d >>= 52; - VERIFY_BITS(t4, 52); - VERIFY_BITS(d, 64); - /* [d t4 t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */ - tx = (t4 >> 48); t4 &= (M >> 4); - VERIFY_BITS(tx, 4); - VERIFY_BITS(t4, 48); - /* [d t4+(tx<<48) t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */ - - c = (uint128_t)a0 * b[0]; - VERIFY_BITS(c, 112); - /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 0 p4 p3 0 0 p0] */ - d += (uint128_t)a1 * b[4] - + (uint128_t)a2 * b[3] - + (uint128_t)a3 * b[2] - + (uint128_t)a4 * b[1]; - VERIFY_BITS(d, 115); - /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - u0 = d & M; d >>= 52; - VERIFY_BITS(u0, 52); - VERIFY_BITS(d, 63); - /* [d u0 t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - /* [d 0 t4+(tx<<48)+(u0<<52) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - u0 = (u0 << 4) | tx; - VERIFY_BITS(u0, 56); - /* [d 0 t4+(u0<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - c += (uint128_t)u0 * (R >> 4); - VERIFY_BITS(c, 115); - /* [d 0 t4 t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - r[0] = c & M; c >>= 52; - VERIFY_BITS(r[0], 52); - VERIFY_BITS(c, 61); - /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 0 p0] */ - - c += (uint128_t)a0 * b[1] - + (uint128_t)a1 * b[0]; - VERIFY_BITS(c, 114); - /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 p1 p0] */ - d += (uint128_t)a2 * b[4] - + (uint128_t)a3 * b[3] - + (uint128_t)a4 * b[2]; - VERIFY_BITS(d, 114); - /* [d 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */ - c += (d & M) * R; d >>= 52; - VERIFY_BITS(c, 115); - VERIFY_BITS(d, 62); - /* [d 0 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */ - r[1] = c & M; c >>= 52; - VERIFY_BITS(r[1], 52); - VERIFY_BITS(c, 63); - /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */ - - c += (uint128_t)a0 * b[2] - + (uint128_t)a1 * b[1] - + (uint128_t)a2 * b[0]; - VERIFY_BITS(c, 114); - /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 p2 p1 p0] */ - d += (uint128_t)a3 * b[4] - + (uint128_t)a4 * b[3]; - VERIFY_BITS(d, 114); - /* [d 0 0 t4 t3 c t1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - c += (d & M) * R; d >>= 52; - VERIFY_BITS(c, 115); - VERIFY_BITS(d, 62); - /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - - /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[2] = c & M; c >>= 52; - VERIFY_BITS(r[2], 52); - VERIFY_BITS(c, 63); - /* [d 0 0 0 t4 t3+c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - c += d * R + t3; - VERIFY_BITS(c, 100); - /* [t4 c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[3] = c & M; c >>= 52; - VERIFY_BITS(r[3], 52); - VERIFY_BITS(c, 48); - /* [t4+c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - c += t4; - VERIFY_BITS(c, 49); - /* [c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[4] = c; - VERIFY_BITS(r[4], 49); - /* [r4 r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ -} - -SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint64_t *r, const uint64_t *a) { - uint128_t c, d; - uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4]; - int64_t t3, t4, tx, u0; - const uint64_t M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL; - - VERIFY_BITS(a[0], 56); - VERIFY_BITS(a[1], 56); - VERIFY_BITS(a[2], 56); - VERIFY_BITS(a[3], 56); - VERIFY_BITS(a[4], 52); - - /** [... a b c] is a shorthand for ... + a<<104 + b<<52 + c<<0 mod n. - * px is a shorthand for sum(a[i]*a[x-i], i=0..x). - * Note that [x 0 0 0 0 0] = [x*R]. - */ - - d = (uint128_t)(a0*2) * a3 - + (uint128_t)(a1*2) * a2; - VERIFY_BITS(d, 114); - /* [d 0 0 0] = [p3 0 0 0] */ - c = (uint128_t)a4 * a4; - VERIFY_BITS(c, 112); - /* [c 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */ - d += (c & M) * R; c >>= 52; - VERIFY_BITS(d, 115); - VERIFY_BITS(c, 60); - /* [c 0 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */ - t3 = d & M; d >>= 52; - VERIFY_BITS(t3, 52); - VERIFY_BITS(d, 63); - /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */ - - a4 *= 2; - d += (uint128_t)a0 * a4 - + (uint128_t)(a1*2) * a3 - + (uint128_t)a2 * a2; - VERIFY_BITS(d, 115); - /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */ - d += c * R; - VERIFY_BITS(d, 116); - /* [d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */ - t4 = d & M; d >>= 52; - VERIFY_BITS(t4, 52); - VERIFY_BITS(d, 64); - /* [d t4 t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */ - tx = (t4 >> 48); t4 &= (M >> 4); - VERIFY_BITS(tx, 4); - VERIFY_BITS(t4, 48); - /* [d t4+(tx<<48) t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */ - - c = (uint128_t)a0 * a0; - VERIFY_BITS(c, 112); - /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 0 p4 p3 0 0 p0] */ - d += (uint128_t)a1 * a4 - + (uint128_t)(a2*2) * a3; - VERIFY_BITS(d, 114); - /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - u0 = d & M; d >>= 52; - VERIFY_BITS(u0, 52); - VERIFY_BITS(d, 62); - /* [d u0 t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - /* [d 0 t4+(tx<<48)+(u0<<52) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - u0 = (u0 << 4) | tx; - VERIFY_BITS(u0, 56); - /* [d 0 t4+(u0<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - c += (uint128_t)u0 * (R >> 4); - VERIFY_BITS(c, 113); - /* [d 0 t4 t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */ - r[0] = c & M; c >>= 52; - VERIFY_BITS(r[0], 52); - VERIFY_BITS(c, 61); - /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 0 p0] */ - - a0 *= 2; - c += (uint128_t)a0 * a1; - VERIFY_BITS(c, 114); - /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 p1 p0] */ - d += (uint128_t)a2 * a4 - + (uint128_t)a3 * a3; - VERIFY_BITS(d, 114); - /* [d 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */ - c += (d & M) * R; d >>= 52; - VERIFY_BITS(c, 115); - VERIFY_BITS(d, 62); - /* [d 0 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */ - r[1] = c & M; c >>= 52; - VERIFY_BITS(r[1], 52); - VERIFY_BITS(c, 63); - /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */ - - c += (uint128_t)a0 * a2 - + (uint128_t)a1 * a1; - VERIFY_BITS(c, 114); - /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 p2 p1 p0] */ - d += (uint128_t)a3 * a4; - VERIFY_BITS(d, 114); - /* [d 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - c += (d & M) * R; d >>= 52; - VERIFY_BITS(c, 115); - VERIFY_BITS(d, 62); - /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[2] = c & M; c >>= 52; - VERIFY_BITS(r[2], 52); - VERIFY_BITS(c, 63); - /* [d 0 0 0 t4 t3+c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - - c += d * R + t3; - VERIFY_BITS(c, 100); - /* [t4 c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[3] = c & M; c >>= 52; - VERIFY_BITS(r[3], 52); - VERIFY_BITS(c, 48); - /* [t4+c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - c += t4; - VERIFY_BITS(c, 49); - /* [c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ - r[4] = c; - VERIFY_BITS(r[4], 49); - /* [r4 r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */ -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/field_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/field_impl.h deleted file mode 100644 index 52cd902..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/field_impl.h +++ /dev/null @@ -1,315 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_FIELD_IMPL_H_ -#define _SECP256K1_FIELD_IMPL_H_ - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#include "util.h" - -#if defined(USE_FIELD_10X26) -#include "field_10x26_impl.h" -#elif defined(USE_FIELD_5X52) -#include "field_5x52_impl.h" -#else -#error "Please select field implementation" -#endif - -SECP256K1_INLINE static int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b) { - secp256k1_fe na; - secp256k1_fe_negate(&na, a, 1); - secp256k1_fe_add(&na, b); - return secp256k1_fe_normalizes_to_zero(&na); -} - -SECP256K1_INLINE static int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b) { - secp256k1_fe na; - secp256k1_fe_negate(&na, a, 1); - secp256k1_fe_add(&na, b); - return secp256k1_fe_normalizes_to_zero_var(&na); -} - -static int secp256k1_fe_sqrt(secp256k1_fe *r, const secp256k1_fe *a) { - /** Given that p is congruent to 3 mod 4, we can compute the square root of - * a mod p as the (p+1)/4'th power of a. - * - * As (p+1)/4 is an even number, it will have the same result for a and for - * (-a). Only one of these two numbers actually has a square root however, - * so we test at the end by squaring and comparing to the input. - * Also because (p+1)/4 is an even number, the computed square root is - * itself always a square (a ** ((p+1)/4) is the square of a ** ((p+1)/8)). - */ - secp256k1_fe x2, x3, x6, x9, x11, x22, x44, x88, x176, x220, x223, t1; - int j; - - /** The binary representation of (p + 1)/4 has 3 blocks of 1s, with lengths in - * { 2, 22, 223 }. Use an addition chain to calculate 2^n - 1 for each block: - * 1, [2], 3, 6, 9, 11, [22], 44, 88, 176, 220, [223] - */ - - secp256k1_fe_sqr(&x2, a); - secp256k1_fe_mul(&x2, &x2, a); - - secp256k1_fe_sqr(&x3, &x2); - secp256k1_fe_mul(&x3, &x3, a); - - x6 = x3; - for (j=0; j<3; j++) { - secp256k1_fe_sqr(&x6, &x6); - } - secp256k1_fe_mul(&x6, &x6, &x3); - - x9 = x6; - for (j=0; j<3; j++) { - secp256k1_fe_sqr(&x9, &x9); - } - secp256k1_fe_mul(&x9, &x9, &x3); - - x11 = x9; - for (j=0; j<2; j++) { - secp256k1_fe_sqr(&x11, &x11); - } - secp256k1_fe_mul(&x11, &x11, &x2); - - x22 = x11; - for (j=0; j<11; j++) { - secp256k1_fe_sqr(&x22, &x22); - } - secp256k1_fe_mul(&x22, &x22, &x11); - - x44 = x22; - for (j=0; j<22; j++) { - secp256k1_fe_sqr(&x44, &x44); - } - secp256k1_fe_mul(&x44, &x44, &x22); - - x88 = x44; - for (j=0; j<44; j++) { - secp256k1_fe_sqr(&x88, &x88); - } - secp256k1_fe_mul(&x88, &x88, &x44); - - x176 = x88; - for (j=0; j<88; j++) { - secp256k1_fe_sqr(&x176, &x176); - } - secp256k1_fe_mul(&x176, &x176, &x88); - - x220 = x176; - for (j=0; j<44; j++) { - secp256k1_fe_sqr(&x220, &x220); - } - secp256k1_fe_mul(&x220, &x220, &x44); - - x223 = x220; - for (j=0; j<3; j++) { - secp256k1_fe_sqr(&x223, &x223); - } - secp256k1_fe_mul(&x223, &x223, &x3); - - /* The final result is then assembled using a sliding window over the blocks. */ - - t1 = x223; - for (j=0; j<23; j++) { - secp256k1_fe_sqr(&t1, &t1); - } - secp256k1_fe_mul(&t1, &t1, &x22); - for (j=0; j<6; j++) { - secp256k1_fe_sqr(&t1, &t1); - } - secp256k1_fe_mul(&t1, &t1, &x2); - secp256k1_fe_sqr(&t1, &t1); - secp256k1_fe_sqr(r, &t1); - - /* Check that a square root was actually calculated */ - - secp256k1_fe_sqr(&t1, r); - return secp256k1_fe_equal(&t1, a); -} - -static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a) { - secp256k1_fe x2, x3, x6, x9, x11, x22, x44, x88, x176, x220, x223, t1; - int j; - - /** The binary representation of (p - 2) has 5 blocks of 1s, with lengths in - * { 1, 2, 22, 223 }. Use an addition chain to calculate 2^n - 1 for each block: - * [1], [2], 3, 6, 9, 11, [22], 44, 88, 176, 220, [223] - */ - - secp256k1_fe_sqr(&x2, a); - secp256k1_fe_mul(&x2, &x2, a); - - secp256k1_fe_sqr(&x3, &x2); - secp256k1_fe_mul(&x3, &x3, a); - - x6 = x3; - for (j=0; j<3; j++) { - secp256k1_fe_sqr(&x6, &x6); - } - secp256k1_fe_mul(&x6, &x6, &x3); - - x9 = x6; - for (j=0; j<3; j++) { - secp256k1_fe_sqr(&x9, &x9); - } - secp256k1_fe_mul(&x9, &x9, &x3); - - x11 = x9; - for (j=0; j<2; j++) { - secp256k1_fe_sqr(&x11, &x11); - } - secp256k1_fe_mul(&x11, &x11, &x2); - - x22 = x11; - for (j=0; j<11; j++) { - secp256k1_fe_sqr(&x22, &x22); - } - secp256k1_fe_mul(&x22, &x22, &x11); - - x44 = x22; - for (j=0; j<22; j++) { - secp256k1_fe_sqr(&x44, &x44); - } - secp256k1_fe_mul(&x44, &x44, &x22); - - x88 = x44; - for (j=0; j<44; j++) { - secp256k1_fe_sqr(&x88, &x88); - } - secp256k1_fe_mul(&x88, &x88, &x44); - - x176 = x88; - for (j=0; j<88; j++) { - secp256k1_fe_sqr(&x176, &x176); - } - secp256k1_fe_mul(&x176, &x176, &x88); - - x220 = x176; - for (j=0; j<44; j++) { - secp256k1_fe_sqr(&x220, &x220); - } - secp256k1_fe_mul(&x220, &x220, &x44); - - x223 = x220; - for (j=0; j<3; j++) { - secp256k1_fe_sqr(&x223, &x223); - } - secp256k1_fe_mul(&x223, &x223, &x3); - - /* The final result is then assembled using a sliding window over the blocks. */ - - t1 = x223; - for (j=0; j<23; j++) { - secp256k1_fe_sqr(&t1, &t1); - } - secp256k1_fe_mul(&t1, &t1, &x22); - for (j=0; j<5; j++) { - secp256k1_fe_sqr(&t1, &t1); - } - secp256k1_fe_mul(&t1, &t1, a); - for (j=0; j<3; j++) { - secp256k1_fe_sqr(&t1, &t1); - } - secp256k1_fe_mul(&t1, &t1, &x2); - for (j=0; j<2; j++) { - secp256k1_fe_sqr(&t1, &t1); - } - secp256k1_fe_mul(r, a, &t1); -} - -static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a) { -#if defined(USE_FIELD_INV_BUILTIN) - secp256k1_fe_inv(r, a); -#elif defined(USE_FIELD_INV_NUM) - secp256k1_num n, m; - static const secp256k1_fe negone = SECP256K1_FE_CONST( - 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, - 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL, 0xFFFFFC2EUL - ); - /* secp256k1 field prime, value p defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */ - static const unsigned char prime[32] = { - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F - }; - unsigned char b[32]; - int res; - secp256k1_fe c = *a; - secp256k1_fe_normalize_var(&c); - secp256k1_fe_get_b32(b, &c); - secp256k1_num_set_bin(&n, b, 32); - secp256k1_num_set_bin(&m, prime, 32); - secp256k1_num_mod_inverse(&n, &n, &m); - secp256k1_num_get_bin(b, 32, &n); - res = secp256k1_fe_set_b32(r, b); - (void)res; - VERIFY_CHECK(res); - /* Verify the result is the (unique) valid inverse using non-GMP code. */ - secp256k1_fe_mul(&c, &c, r); - secp256k1_fe_add(&c, &negone); - CHECK(secp256k1_fe_normalizes_to_zero_var(&c)); -#else -#error "Please select field inverse implementation" -#endif -} - -static void secp256k1_fe_inv_all_var(size_t len, secp256k1_fe *r, const secp256k1_fe *a) { - secp256k1_fe u; - size_t i; - if (len < 1) { - return; - } - - VERIFY_CHECK((r + len <= a) || (a + len <= r)); - - r[0] = a[0]; - - i = 0; - while (++i < len) { - secp256k1_fe_mul(&r[i], &r[i - 1], &a[i]); - } - - secp256k1_fe_inv_var(&u, &r[--i]); - - while (i > 0) { - size_t j = i--; - secp256k1_fe_mul(&r[j], &r[i], &u); - secp256k1_fe_mul(&u, &u, &a[j]); - } - - r[0] = u; -} - -static int secp256k1_fe_is_quad_var(const secp256k1_fe *a) { -#ifndef USE_NUM_NONE - unsigned char b[32]; - secp256k1_num n; - secp256k1_num m; - /* secp256k1 field prime, value p defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */ - static const unsigned char prime[32] = { - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F - }; - - secp256k1_fe c = *a; - secp256k1_fe_normalize_var(&c); - secp256k1_fe_get_b32(b, &c); - secp256k1_num_set_bin(&n, b, 32); - secp256k1_num_set_bin(&m, prime, 32); - return secp256k1_num_jacobi(&n, &m) >= 0; -#else - secp256k1_fe r; - return secp256k1_fe_sqrt(&r, a); -#endif -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/gen_context.c b/node_modules/secp256k1/src/secp256k1-src/src/gen_context.c deleted file mode 100644 index 1835fd4..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/gen_context.c +++ /dev/null @@ -1,74 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014, 2015 Thomas Daede, Cory Fields * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#define USE_BASIC_CONFIG 1 - -#include "basic-config.h" -#include "include/secp256k1.h" -#include "field_impl.h" -#include "scalar_impl.h" -#include "group_impl.h" -#include "ecmult_gen_impl.h" - -static void default_error_callback_fn(const char* str, void* data) { - (void)data; - fprintf(stderr, "[libsecp256k1] internal consistency check failed: %s\n", str); - abort(); -} - -static const secp256k1_callback default_error_callback = { - default_error_callback_fn, - NULL -}; - -int main(int argc, char **argv) { - secp256k1_ecmult_gen_context ctx; - int inner; - int outer; - FILE* fp; - - (void)argc; - (void)argv; - - fp = fopen("src/ecmult_static_context.h","w"); - if (fp == NULL) { - fprintf(stderr, "Could not open src/ecmult_static_context.h for writing!\n"); - return -1; - } - - fprintf(fp, "#ifndef _SECP256K1_ECMULT_STATIC_CONTEXT_\n"); - fprintf(fp, "#define _SECP256K1_ECMULT_STATIC_CONTEXT_\n"); - fprintf(fp, "#include \"group.h\"\n"); - fprintf(fp, "#define SC SECP256K1_GE_STORAGE_CONST\n"); - fprintf(fp, "static const secp256k1_ge_storage secp256k1_ecmult_static_context[64][16] = {\n"); - - secp256k1_ecmult_gen_context_init(&ctx); - secp256k1_ecmult_gen_context_build(&ctx, &default_error_callback); - for(outer = 0; outer != 64; outer++) { - fprintf(fp,"{\n"); - for(inner = 0; inner != 16; inner++) { - fprintf(fp," SC(%uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu)", SECP256K1_GE_STORAGE_CONST_GET((*ctx.prec)[outer][inner])); - if (inner != 15) { - fprintf(fp,",\n"); - } else { - fprintf(fp,"\n"); - } - } - if (outer != 63) { - fprintf(fp,"},\n"); - } else { - fprintf(fp,"}\n"); - } - } - fprintf(fp,"};\n"); - secp256k1_ecmult_gen_context_clear(&ctx); - - fprintf(fp, "#undef SC\n"); - fprintf(fp, "#endif\n"); - fclose(fp); - - return 0; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/group.h b/node_modules/secp256k1/src/secp256k1-src/src/group.h deleted file mode 100644 index d515716..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/group.h +++ /dev/null @@ -1,144 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_GROUP_ -#define _SECP256K1_GROUP_ - -#include "num.h" -#include "field.h" - -/** A group element of the secp256k1 curve, in affine coordinates. */ -typedef struct { - secp256k1_fe x; - secp256k1_fe y; - int infinity; /* whether this represents the point at infinity */ -} secp256k1_ge; - -#define SECP256K1_GE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), 0} -#define SECP256K1_GE_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1} - -/** A group element of the secp256k1 curve, in jacobian coordinates. */ -typedef struct { - secp256k1_fe x; /* actual X: x/z^2 */ - secp256k1_fe y; /* actual Y: y/z^3 */ - secp256k1_fe z; - int infinity; /* whether this represents the point at infinity */ -} secp256k1_gej; - -#define SECP256K1_GEJ_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1), 0} -#define SECP256K1_GEJ_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1} - -typedef struct { - secp256k1_fe_storage x; - secp256k1_fe_storage y; -} secp256k1_ge_storage; - -#define SECP256K1_GE_STORAGE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_STORAGE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_STORAGE_CONST((i),(j),(k),(l),(m),(n),(o),(p))} - -#define SECP256K1_GE_STORAGE_CONST_GET(t) SECP256K1_FE_STORAGE_CONST_GET(t.x), SECP256K1_FE_STORAGE_CONST_GET(t.y) - -/** Set a group element equal to the point with given X and Y coordinates */ -static void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y); - -/** Set a group element (affine) equal to the point with the given X coordinate - * and a Y coordinate that is a quadratic residue modulo p. The return value - * is true iff a coordinate with the given X coordinate exists. - */ -static int secp256k1_ge_set_xquad(secp256k1_ge *r, const secp256k1_fe *x); - -/** Set a group element (affine) equal to the point with the given X coordinate, and given oddness - * for Y. Return value indicates whether the result is valid. */ -static int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd); - -/** Check whether a group element is the point at infinity. */ -static int secp256k1_ge_is_infinity(const secp256k1_ge *a); - -/** Check whether a group element is valid (i.e., on the curve). */ -static int secp256k1_ge_is_valid_var(const secp256k1_ge *a); - -static void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a); - -/** Set a group element equal to another which is given in jacobian coordinates */ -static void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a); - -/** Set a batch of group elements equal to the inputs given in jacobian coordinates */ -static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_callback *cb); - -/** Set a batch of group elements equal to the inputs given in jacobian - * coordinates (with known z-ratios). zr must contain the known z-ratios such - * that mul(a[i].z, zr[i+1]) == a[i+1].z. zr[0] is ignored. */ -static void secp256k1_ge_set_table_gej_var(size_t len, secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zr); - -/** Bring a batch inputs given in jacobian coordinates (with known z-ratios) to - * the same global z "denominator". zr must contain the known z-ratios such - * that mul(a[i].z, zr[i+1]) == a[i+1].z. zr[0] is ignored. The x and y - * coordinates of the result are stored in r, the common z coordinate is - * stored in globalz. */ -static void secp256k1_ge_globalz_set_table_gej(size_t len, secp256k1_ge *r, secp256k1_fe *globalz, const secp256k1_gej *a, const secp256k1_fe *zr); - -/** Set a group element (jacobian) equal to the point at infinity. */ -static void secp256k1_gej_set_infinity(secp256k1_gej *r); - -/** Set a group element (jacobian) equal to another which is given in affine coordinates. */ -static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a); - -/** Compare the X coordinate of a group element (jacobian). */ -static int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a); - -/** Set r equal to the inverse of a (i.e., mirrored around the X axis) */ -static void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a); - -/** Check whether a group element is the point at infinity. */ -static int secp256k1_gej_is_infinity(const secp256k1_gej *a); - -/** Check whether a group element's y coordinate is a quadratic residue. */ -static int secp256k1_gej_has_quad_y_var(const secp256k1_gej *a); - -/** Set r equal to the double of a. If rzr is not-NULL, r->z = a->z * *rzr (where infinity means an implicit z = 0). - * a may not be zero. Constant time. */ -static void secp256k1_gej_double_nonzero(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr); - -/** Set r equal to the double of a. If rzr is not-NULL, r->z = a->z * *rzr (where infinity means an implicit z = 0). */ -static void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr); - -/** Set r equal to the sum of a and b. If rzr is non-NULL, r->z = a->z * *rzr (a cannot be infinity in that case). */ -static void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr); - -/** Set r equal to the sum of a and b (with b given in affine coordinates, and not infinity). */ -static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b); - -/** Set r equal to the sum of a and b (with b given in affine coordinates). This is more efficient - than secp256k1_gej_add_var. It is identical to secp256k1_gej_add_ge but without constant-time - guarantee, and b is allowed to be infinity. If rzr is non-NULL, r->z = a->z * *rzr (a cannot be infinity in that case). */ -static void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr); - -/** Set r equal to the sum of a and b (with the inverse of b's Z coordinate passed as bzinv). */ -static void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv); - -#ifdef USE_ENDOMORPHISM -/** Set r to be equal to lambda times a, where lambda is chosen in a way such that this is very fast. */ -static void secp256k1_ge_mul_lambda(secp256k1_ge *r, const secp256k1_ge *a); -#endif - -/** Clear a secp256k1_gej to prevent leaking sensitive information. */ -static void secp256k1_gej_clear(secp256k1_gej *r); - -/** Clear a secp256k1_ge to prevent leaking sensitive information. */ -static void secp256k1_ge_clear(secp256k1_ge *r); - -/** Convert a group element to the storage type. */ -static void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a); - -/** Convert a group element back from the storage type. */ -static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a); - -/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */ -static void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag); - -/** Rescale a jacobian point by b which must be non-zero. Constant-time. */ -static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *b); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/group_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/group_impl.h deleted file mode 100644 index 3e9c4c4..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/group_impl.h +++ /dev/null @@ -1,650 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_GROUP_IMPL_H_ -#define _SECP256K1_GROUP_IMPL_H_ - -#include "num.h" -#include "field.h" -#include "group.h" - -/** Generator for secp256k1, value 'g' defined in - * "Standards for Efficient Cryptography" (SEC2) 2.7.1. - */ -static const secp256k1_ge secp256k1_ge_const_g = SECP256K1_GE_CONST( - 0x79BE667EUL, 0xF9DCBBACUL, 0x55A06295UL, 0xCE870B07UL, - 0x029BFCDBUL, 0x2DCE28D9UL, 0x59F2815BUL, 0x16F81798UL, - 0x483ADA77UL, 0x26A3C465UL, 0x5DA4FBFCUL, 0x0E1108A8UL, - 0xFD17B448UL, 0xA6855419UL, 0x9C47D08FUL, 0xFB10D4B8UL -); - -static void secp256k1_ge_set_gej_zinv(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zi) { - secp256k1_fe zi2; - secp256k1_fe zi3; - secp256k1_fe_sqr(&zi2, zi); - secp256k1_fe_mul(&zi3, &zi2, zi); - secp256k1_fe_mul(&r->x, &a->x, &zi2); - secp256k1_fe_mul(&r->y, &a->y, &zi3); - r->infinity = a->infinity; -} - -static void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y) { - r->infinity = 0; - r->x = *x; - r->y = *y; -} - -static int secp256k1_ge_is_infinity(const secp256k1_ge *a) { - return a->infinity; -} - -static void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a) { - *r = *a; - secp256k1_fe_normalize_weak(&r->y); - secp256k1_fe_negate(&r->y, &r->y, 1); -} - -static void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a) { - secp256k1_fe z2, z3; - r->infinity = a->infinity; - secp256k1_fe_inv(&a->z, &a->z); - secp256k1_fe_sqr(&z2, &a->z); - secp256k1_fe_mul(&z3, &a->z, &z2); - secp256k1_fe_mul(&a->x, &a->x, &z2); - secp256k1_fe_mul(&a->y, &a->y, &z3); - secp256k1_fe_set_int(&a->z, 1); - r->x = a->x; - r->y = a->y; -} - -static void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a) { - secp256k1_fe z2, z3; - r->infinity = a->infinity; - if (a->infinity) { - return; - } - secp256k1_fe_inv_var(&a->z, &a->z); - secp256k1_fe_sqr(&z2, &a->z); - secp256k1_fe_mul(&z3, &a->z, &z2); - secp256k1_fe_mul(&a->x, &a->x, &z2); - secp256k1_fe_mul(&a->y, &a->y, &z3); - secp256k1_fe_set_int(&a->z, 1); - r->x = a->x; - r->y = a->y; -} - -static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_callback *cb) { - secp256k1_fe *az; - secp256k1_fe *azi; - size_t i; - size_t count = 0; - az = (secp256k1_fe *)checked_malloc(cb, sizeof(secp256k1_fe) * len); - for (i = 0; i < len; i++) { - if (!a[i].infinity) { - az[count++] = a[i].z; - } - } - - azi = (secp256k1_fe *)checked_malloc(cb, sizeof(secp256k1_fe) * count); - secp256k1_fe_inv_all_var(count, azi, az); - free(az); - - count = 0; - for (i = 0; i < len; i++) { - r[i].infinity = a[i].infinity; - if (!a[i].infinity) { - secp256k1_ge_set_gej_zinv(&r[i], &a[i], &azi[count++]); - } - } - free(azi); -} - -static void secp256k1_ge_set_table_gej_var(size_t len, secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zr) { - size_t i = len - 1; - secp256k1_fe zi; - - if (len > 0) { - /* Compute the inverse of the last z coordinate, and use it to compute the last affine output. */ - secp256k1_fe_inv(&zi, &a[i].z); - secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zi); - - /* Work out way backwards, using the z-ratios to scale the x/y values. */ - while (i > 0) { - secp256k1_fe_mul(&zi, &zi, &zr[i]); - i--; - secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zi); - } - } -} - -static void secp256k1_ge_globalz_set_table_gej(size_t len, secp256k1_ge *r, secp256k1_fe *globalz, const secp256k1_gej *a, const secp256k1_fe *zr) { - size_t i = len - 1; - secp256k1_fe zs; - - if (len > 0) { - /* The z of the final point gives us the "global Z" for the table. */ - r[i].x = a[i].x; - r[i].y = a[i].y; - *globalz = a[i].z; - r[i].infinity = 0; - zs = zr[i]; - - /* Work our way backwards, using the z-ratios to scale the x/y values. */ - while (i > 0) { - if (i != len - 1) { - secp256k1_fe_mul(&zs, &zs, &zr[i]); - } - i--; - secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zs); - } - } -} - -static void secp256k1_gej_set_infinity(secp256k1_gej *r) { - r->infinity = 1; - secp256k1_fe_set_int(&r->x, 0); - secp256k1_fe_set_int(&r->y, 0); - secp256k1_fe_set_int(&r->z, 0); -} - -static void secp256k1_gej_clear(secp256k1_gej *r) { - r->infinity = 0; - secp256k1_fe_clear(&r->x); - secp256k1_fe_clear(&r->y); - secp256k1_fe_clear(&r->z); -} - -static void secp256k1_ge_clear(secp256k1_ge *r) { - r->infinity = 0; - secp256k1_fe_clear(&r->x); - secp256k1_fe_clear(&r->y); -} - -static int secp256k1_ge_set_xquad(secp256k1_ge *r, const secp256k1_fe *x) { - secp256k1_fe x2, x3, c; - r->x = *x; - secp256k1_fe_sqr(&x2, x); - secp256k1_fe_mul(&x3, x, &x2); - r->infinity = 0; - secp256k1_fe_set_int(&c, 7); - secp256k1_fe_add(&c, &x3); - return secp256k1_fe_sqrt(&r->y, &c); -} - -static int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd) { - if (!secp256k1_ge_set_xquad(r, x)) { - return 0; - } - secp256k1_fe_normalize_var(&r->y); - if (secp256k1_fe_is_odd(&r->y) != odd) { - secp256k1_fe_negate(&r->y, &r->y, 1); - } - return 1; - -} - -static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a) { - r->infinity = a->infinity; - r->x = a->x; - r->y = a->y; - secp256k1_fe_set_int(&r->z, 1); -} - -static int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a) { - secp256k1_fe r, r2; - VERIFY_CHECK(!a->infinity); - secp256k1_fe_sqr(&r, &a->z); secp256k1_fe_mul(&r, &r, x); - r2 = a->x; secp256k1_fe_normalize_weak(&r2); - return secp256k1_fe_equal_var(&r, &r2); -} - -static void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a) { - r->infinity = a->infinity; - r->x = a->x; - r->y = a->y; - r->z = a->z; - secp256k1_fe_normalize_weak(&r->y); - secp256k1_fe_negate(&r->y, &r->y, 1); -} - -static int secp256k1_gej_is_infinity(const secp256k1_gej *a) { - return a->infinity; -} - -static int secp256k1_gej_is_valid_var(const secp256k1_gej *a) { - secp256k1_fe y2, x3, z2, z6; - if (a->infinity) { - return 0; - } - /** y^2 = x^3 + 7 - * (Y/Z^3)^2 = (X/Z^2)^3 + 7 - * Y^2 / Z^6 = X^3 / Z^6 + 7 - * Y^2 = X^3 + 7*Z^6 - */ - secp256k1_fe_sqr(&y2, &a->y); - secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x); - secp256k1_fe_sqr(&z2, &a->z); - secp256k1_fe_sqr(&z6, &z2); secp256k1_fe_mul(&z6, &z6, &z2); - secp256k1_fe_mul_int(&z6, 7); - secp256k1_fe_add(&x3, &z6); - secp256k1_fe_normalize_weak(&x3); - return secp256k1_fe_equal_var(&y2, &x3); -} - -static int secp256k1_ge_is_valid_var(const secp256k1_ge *a) { - secp256k1_fe y2, x3, c; - if (a->infinity) { - return 0; - } - /* y^2 = x^3 + 7 */ - secp256k1_fe_sqr(&y2, &a->y); - secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x); - secp256k1_fe_set_int(&c, 7); - secp256k1_fe_add(&x3, &c); - secp256k1_fe_normalize_weak(&x3); - return secp256k1_fe_equal_var(&y2, &x3); -} - -static void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr) { - /* Operations: 3 mul, 4 sqr, 0 normalize, 12 mul_int/add/negate. - * - * Note that there is an implementation described at - * https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l - * which trades a multiply for a square, but in practice this is actually slower, - * mainly because it requires more normalizations. - */ - secp256k1_fe t1,t2,t3,t4; - /** For secp256k1, 2Q is infinity if and only if Q is infinity. This is because if 2Q = infinity, - * Q must equal -Q, or that Q.y == -(Q.y), or Q.y is 0. For a point on y^2 = x^3 + 7 to have - * y=0, x^3 must be -7 mod p. However, -7 has no cube root mod p. - * - * Having said this, if this function receives a point on a sextic twist, e.g. by - * a fault attack, it is possible for y to be 0. This happens for y^2 = x^3 + 6, - * since -6 does have a cube root mod p. For this point, this function will not set - * the infinity flag even though the point doubles to infinity, and the result - * point will be gibberish (z = 0 but infinity = 0). - */ - r->infinity = a->infinity; - if (r->infinity) { - if (rzr != NULL) { - secp256k1_fe_set_int(rzr, 1); - } - return; - } - - if (rzr != NULL) { - *rzr = a->y; - secp256k1_fe_normalize_weak(rzr); - secp256k1_fe_mul_int(rzr, 2); - } - - secp256k1_fe_mul(&r->z, &a->z, &a->y); - secp256k1_fe_mul_int(&r->z, 2); /* Z' = 2*Y*Z (2) */ - secp256k1_fe_sqr(&t1, &a->x); - secp256k1_fe_mul_int(&t1, 3); /* T1 = 3*X^2 (3) */ - secp256k1_fe_sqr(&t2, &t1); /* T2 = 9*X^4 (1) */ - secp256k1_fe_sqr(&t3, &a->y); - secp256k1_fe_mul_int(&t3, 2); /* T3 = 2*Y^2 (2) */ - secp256k1_fe_sqr(&t4, &t3); - secp256k1_fe_mul_int(&t4, 2); /* T4 = 8*Y^4 (2) */ - secp256k1_fe_mul(&t3, &t3, &a->x); /* T3 = 2*X*Y^2 (1) */ - r->x = t3; - secp256k1_fe_mul_int(&r->x, 4); /* X' = 8*X*Y^2 (4) */ - secp256k1_fe_negate(&r->x, &r->x, 4); /* X' = -8*X*Y^2 (5) */ - secp256k1_fe_add(&r->x, &t2); /* X' = 9*X^4 - 8*X*Y^2 (6) */ - secp256k1_fe_negate(&t2, &t2, 1); /* T2 = -9*X^4 (2) */ - secp256k1_fe_mul_int(&t3, 6); /* T3 = 12*X*Y^2 (6) */ - secp256k1_fe_add(&t3, &t2); /* T3 = 12*X*Y^2 - 9*X^4 (8) */ - secp256k1_fe_mul(&r->y, &t1, &t3); /* Y' = 36*X^3*Y^2 - 27*X^6 (1) */ - secp256k1_fe_negate(&t2, &t4, 2); /* T2 = -8*Y^4 (3) */ - secp256k1_fe_add(&r->y, &t2); /* Y' = 36*X^3*Y^2 - 27*X^6 - 8*Y^4 (4) */ -} - -static SECP256K1_INLINE void secp256k1_gej_double_nonzero(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr) { - VERIFY_CHECK(!secp256k1_gej_is_infinity(a)); - secp256k1_gej_double_var(r, a, rzr); -} - -static void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr) { - /* Operations: 12 mul, 4 sqr, 2 normalize, 12 mul_int/add/negate */ - secp256k1_fe z22, z12, u1, u2, s1, s2, h, i, i2, h2, h3, t; - - if (a->infinity) { - VERIFY_CHECK(rzr == NULL); - *r = *b; - return; - } - - if (b->infinity) { - if (rzr != NULL) { - secp256k1_fe_set_int(rzr, 1); - } - *r = *a; - return; - } - - r->infinity = 0; - secp256k1_fe_sqr(&z22, &b->z); - secp256k1_fe_sqr(&z12, &a->z); - secp256k1_fe_mul(&u1, &a->x, &z22); - secp256k1_fe_mul(&u2, &b->x, &z12); - secp256k1_fe_mul(&s1, &a->y, &z22); secp256k1_fe_mul(&s1, &s1, &b->z); - secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z); - secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2); - secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2); - if (secp256k1_fe_normalizes_to_zero_var(&h)) { - if (secp256k1_fe_normalizes_to_zero_var(&i)) { - secp256k1_gej_double_var(r, a, rzr); - } else { - if (rzr != NULL) { - secp256k1_fe_set_int(rzr, 0); - } - r->infinity = 1; - } - return; - } - secp256k1_fe_sqr(&i2, &i); - secp256k1_fe_sqr(&h2, &h); - secp256k1_fe_mul(&h3, &h, &h2); - secp256k1_fe_mul(&h, &h, &b->z); - if (rzr != NULL) { - *rzr = h; - } - secp256k1_fe_mul(&r->z, &a->z, &h); - secp256k1_fe_mul(&t, &u1, &h2); - r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2); - secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i); - secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1); - secp256k1_fe_add(&r->y, &h3); -} - -static void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr) { - /* 8 mul, 3 sqr, 4 normalize, 12 mul_int/add/negate */ - secp256k1_fe z12, u1, u2, s1, s2, h, i, i2, h2, h3, t; - if (a->infinity) { - VERIFY_CHECK(rzr == NULL); - secp256k1_gej_set_ge(r, b); - return; - } - if (b->infinity) { - if (rzr != NULL) { - secp256k1_fe_set_int(rzr, 1); - } - *r = *a; - return; - } - r->infinity = 0; - - secp256k1_fe_sqr(&z12, &a->z); - u1 = a->x; secp256k1_fe_normalize_weak(&u1); - secp256k1_fe_mul(&u2, &b->x, &z12); - s1 = a->y; secp256k1_fe_normalize_weak(&s1); - secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z); - secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2); - secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2); - if (secp256k1_fe_normalizes_to_zero_var(&h)) { - if (secp256k1_fe_normalizes_to_zero_var(&i)) { - secp256k1_gej_double_var(r, a, rzr); - } else { - if (rzr != NULL) { - secp256k1_fe_set_int(rzr, 0); - } - r->infinity = 1; - } - return; - } - secp256k1_fe_sqr(&i2, &i); - secp256k1_fe_sqr(&h2, &h); - secp256k1_fe_mul(&h3, &h, &h2); - if (rzr != NULL) { - *rzr = h; - } - secp256k1_fe_mul(&r->z, &a->z, &h); - secp256k1_fe_mul(&t, &u1, &h2); - r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2); - secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i); - secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1); - secp256k1_fe_add(&r->y, &h3); -} - -static void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv) { - /* 9 mul, 3 sqr, 4 normalize, 12 mul_int/add/negate */ - secp256k1_fe az, z12, u1, u2, s1, s2, h, i, i2, h2, h3, t; - - if (b->infinity) { - *r = *a; - return; - } - if (a->infinity) { - secp256k1_fe bzinv2, bzinv3; - r->infinity = b->infinity; - secp256k1_fe_sqr(&bzinv2, bzinv); - secp256k1_fe_mul(&bzinv3, &bzinv2, bzinv); - secp256k1_fe_mul(&r->x, &b->x, &bzinv2); - secp256k1_fe_mul(&r->y, &b->y, &bzinv3); - secp256k1_fe_set_int(&r->z, 1); - return; - } - r->infinity = 0; - - /** We need to calculate (rx,ry,rz) = (ax,ay,az) + (bx,by,1/bzinv). Due to - * secp256k1's isomorphism we can multiply the Z coordinates on both sides - * by bzinv, and get: (rx,ry,rz*bzinv) = (ax,ay,az*bzinv) + (bx,by,1). - * This means that (rx,ry,rz) can be calculated as - * (ax,ay,az*bzinv) + (bx,by,1), when not applying the bzinv factor to rz. - * The variable az below holds the modified Z coordinate for a, which is used - * for the computation of rx and ry, but not for rz. - */ - secp256k1_fe_mul(&az, &a->z, bzinv); - - secp256k1_fe_sqr(&z12, &az); - u1 = a->x; secp256k1_fe_normalize_weak(&u1); - secp256k1_fe_mul(&u2, &b->x, &z12); - s1 = a->y; secp256k1_fe_normalize_weak(&s1); - secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &az); - secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2); - secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2); - if (secp256k1_fe_normalizes_to_zero_var(&h)) { - if (secp256k1_fe_normalizes_to_zero_var(&i)) { - secp256k1_gej_double_var(r, a, NULL); - } else { - r->infinity = 1; - } - return; - } - secp256k1_fe_sqr(&i2, &i); - secp256k1_fe_sqr(&h2, &h); - secp256k1_fe_mul(&h3, &h, &h2); - r->z = a->z; secp256k1_fe_mul(&r->z, &r->z, &h); - secp256k1_fe_mul(&t, &u1, &h2); - r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2); - secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i); - secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1); - secp256k1_fe_add(&r->y, &h3); -} - - -static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b) { - /* Operations: 7 mul, 5 sqr, 4 normalize, 21 mul_int/add/negate/cmov */ - static const secp256k1_fe fe_1 = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1); - secp256k1_fe zz, u1, u2, s1, s2, t, tt, m, n, q, rr; - secp256k1_fe m_alt, rr_alt; - int infinity, degenerate; - VERIFY_CHECK(!b->infinity); - VERIFY_CHECK(a->infinity == 0 || a->infinity == 1); - - /** In: - * Eric Brier and Marc Joye, Weierstrass Elliptic Curves and Side-Channel Attacks. - * In D. Naccache and P. Paillier, Eds., Public Key Cryptography, vol. 2274 of Lecture Notes in Computer Science, pages 335-345. Springer-Verlag, 2002. - * we find as solution for a unified addition/doubling formula: - * lambda = ((x1 + x2)^2 - x1 * x2 + a) / (y1 + y2), with a = 0 for secp256k1's curve equation. - * x3 = lambda^2 - (x1 + x2) - * 2*y3 = lambda * (x1 + x2 - 2 * x3) - (y1 + y2). - * - * Substituting x_i = Xi / Zi^2 and yi = Yi / Zi^3, for i=1,2,3, gives: - * U1 = X1*Z2^2, U2 = X2*Z1^2 - * S1 = Y1*Z2^3, S2 = Y2*Z1^3 - * Z = Z1*Z2 - * T = U1+U2 - * M = S1+S2 - * Q = T*M^2 - * R = T^2-U1*U2 - * X3 = 4*(R^2-Q) - * Y3 = 4*(R*(3*Q-2*R^2)-M^4) - * Z3 = 2*M*Z - * (Note that the paper uses xi = Xi / Zi and yi = Yi / Zi instead.) - * - * This formula has the benefit of being the same for both addition - * of distinct points and doubling. However, it breaks down in the - * case that either point is infinity, or that y1 = -y2. We handle - * these cases in the following ways: - * - * - If b is infinity we simply bail by means of a VERIFY_CHECK. - * - * - If a is infinity, we detect this, and at the end of the - * computation replace the result (which will be meaningless, - * but we compute to be constant-time) with b.x : b.y : 1. - * - * - If a = -b, we have y1 = -y2, which is a degenerate case. - * But here the answer is infinity, so we simply set the - * infinity flag of the result, overriding the computed values - * without even needing to cmov. - * - * - If y1 = -y2 but x1 != x2, which does occur thanks to certain - * properties of our curve (specifically, 1 has nontrivial cube - * roots in our field, and the curve equation has no x coefficient) - * then the answer is not infinity but also not given by the above - * equation. In this case, we cmov in place an alternate expression - * for lambda. Specifically (y1 - y2)/(x1 - x2). Where both these - * expressions for lambda are defined, they are equal, and can be - * obtained from each other by multiplication by (y1 + y2)/(y1 + y2) - * then substitution of x^3 + 7 for y^2 (using the curve equation). - * For all pairs of nonzero points (a, b) at least one is defined, - * so this covers everything. - */ - - secp256k1_fe_sqr(&zz, &a->z); /* z = Z1^2 */ - u1 = a->x; secp256k1_fe_normalize_weak(&u1); /* u1 = U1 = X1*Z2^2 (1) */ - secp256k1_fe_mul(&u2, &b->x, &zz); /* u2 = U2 = X2*Z1^2 (1) */ - s1 = a->y; secp256k1_fe_normalize_weak(&s1); /* s1 = S1 = Y1*Z2^3 (1) */ - secp256k1_fe_mul(&s2, &b->y, &zz); /* s2 = Y2*Z1^2 (1) */ - secp256k1_fe_mul(&s2, &s2, &a->z); /* s2 = S2 = Y2*Z1^3 (1) */ - t = u1; secp256k1_fe_add(&t, &u2); /* t = T = U1+U2 (2) */ - m = s1; secp256k1_fe_add(&m, &s2); /* m = M = S1+S2 (2) */ - secp256k1_fe_sqr(&rr, &t); /* rr = T^2 (1) */ - secp256k1_fe_negate(&m_alt, &u2, 1); /* Malt = -X2*Z1^2 */ - secp256k1_fe_mul(&tt, &u1, &m_alt); /* tt = -U1*U2 (2) */ - secp256k1_fe_add(&rr, &tt); /* rr = R = T^2-U1*U2 (3) */ - /** If lambda = R/M = 0/0 we have a problem (except in the "trivial" - * case that Z = z1z2 = 0, and this is special-cased later on). */ - degenerate = secp256k1_fe_normalizes_to_zero(&m) & - secp256k1_fe_normalizes_to_zero(&rr); - /* This only occurs when y1 == -y2 and x1^3 == x2^3, but x1 != x2. - * This means either x1 == beta*x2 or beta*x1 == x2, where beta is - * a nontrivial cube root of one. In either case, an alternate - * non-indeterminate expression for lambda is (y1 - y2)/(x1 - x2), - * so we set R/M equal to this. */ - rr_alt = s1; - secp256k1_fe_mul_int(&rr_alt, 2); /* rr = Y1*Z2^3 - Y2*Z1^3 (2) */ - secp256k1_fe_add(&m_alt, &u1); /* Malt = X1*Z2^2 - X2*Z1^2 */ - - secp256k1_fe_cmov(&rr_alt, &rr, !degenerate); - secp256k1_fe_cmov(&m_alt, &m, !degenerate); - /* Now Ralt / Malt = lambda and is guaranteed not to be 0/0. - * From here on out Ralt and Malt represent the numerator - * and denominator of lambda; R and M represent the explicit - * expressions x1^2 + x2^2 + x1x2 and y1 + y2. */ - secp256k1_fe_sqr(&n, &m_alt); /* n = Malt^2 (1) */ - secp256k1_fe_mul(&q, &n, &t); /* q = Q = T*Malt^2 (1) */ - /* These two lines use the observation that either M == Malt or M == 0, - * so M^3 * Malt is either Malt^4 (which is computed by squaring), or - * zero (which is "computed" by cmov). So the cost is one squaring - * versus two multiplications. */ - secp256k1_fe_sqr(&n, &n); - secp256k1_fe_cmov(&n, &m, degenerate); /* n = M^3 * Malt (2) */ - secp256k1_fe_sqr(&t, &rr_alt); /* t = Ralt^2 (1) */ - secp256k1_fe_mul(&r->z, &a->z, &m_alt); /* r->z = Malt*Z (1) */ - infinity = secp256k1_fe_normalizes_to_zero(&r->z) * (1 - a->infinity); - secp256k1_fe_mul_int(&r->z, 2); /* r->z = Z3 = 2*Malt*Z (2) */ - secp256k1_fe_negate(&q, &q, 1); /* q = -Q (2) */ - secp256k1_fe_add(&t, &q); /* t = Ralt^2-Q (3) */ - secp256k1_fe_normalize_weak(&t); - r->x = t; /* r->x = Ralt^2-Q (1) */ - secp256k1_fe_mul_int(&t, 2); /* t = 2*x3 (2) */ - secp256k1_fe_add(&t, &q); /* t = 2*x3 - Q: (4) */ - secp256k1_fe_mul(&t, &t, &rr_alt); /* t = Ralt*(2*x3 - Q) (1) */ - secp256k1_fe_add(&t, &n); /* t = Ralt*(2*x3 - Q) + M^3*Malt (3) */ - secp256k1_fe_negate(&r->y, &t, 3); /* r->y = Ralt*(Q - 2x3) - M^3*Malt (4) */ - secp256k1_fe_normalize_weak(&r->y); - secp256k1_fe_mul_int(&r->x, 4); /* r->x = X3 = 4*(Ralt^2-Q) */ - secp256k1_fe_mul_int(&r->y, 4); /* r->y = Y3 = 4*Ralt*(Q - 2x3) - 4*M^3*Malt (4) */ - - /** In case a->infinity == 1, replace r with (b->x, b->y, 1). */ - secp256k1_fe_cmov(&r->x, &b->x, a->infinity); - secp256k1_fe_cmov(&r->y, &b->y, a->infinity); - secp256k1_fe_cmov(&r->z, &fe_1, a->infinity); - r->infinity = infinity; -} - -static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *s) { - /* Operations: 4 mul, 1 sqr */ - secp256k1_fe zz; - VERIFY_CHECK(!secp256k1_fe_is_zero(s)); - secp256k1_fe_sqr(&zz, s); - secp256k1_fe_mul(&r->x, &r->x, &zz); /* r->x *= s^2 */ - secp256k1_fe_mul(&r->y, &r->y, &zz); - secp256k1_fe_mul(&r->y, &r->y, s); /* r->y *= s^3 */ - secp256k1_fe_mul(&r->z, &r->z, s); /* r->z *= s */ -} - -static void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a) { - secp256k1_fe x, y; - VERIFY_CHECK(!a->infinity); - x = a->x; - secp256k1_fe_normalize(&x); - y = a->y; - secp256k1_fe_normalize(&y); - secp256k1_fe_to_storage(&r->x, &x); - secp256k1_fe_to_storage(&r->y, &y); -} - -static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a) { - secp256k1_fe_from_storage(&r->x, &a->x); - secp256k1_fe_from_storage(&r->y, &a->y); - r->infinity = 0; -} - -static SECP256K1_INLINE void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag) { - secp256k1_fe_storage_cmov(&r->x, &a->x, flag); - secp256k1_fe_storage_cmov(&r->y, &a->y, flag); -} - -#ifdef USE_ENDOMORPHISM -static void secp256k1_ge_mul_lambda(secp256k1_ge *r, const secp256k1_ge *a) { - static const secp256k1_fe beta = SECP256K1_FE_CONST( - 0x7ae96a2bul, 0x657c0710ul, 0x6e64479eul, 0xac3434e9ul, - 0x9cf04975ul, 0x12f58995ul, 0xc1396c28ul, 0x719501eeul - ); - *r = *a; - secp256k1_fe_mul(&r->x, &r->x, &beta); -} -#endif - -static int secp256k1_gej_has_quad_y_var(const secp256k1_gej *a) { - secp256k1_fe yz; - - if (a->infinity) { - return 0; - } - - /* We rely on the fact that the Jacobi symbol of 1 / a->z^3 is the same as - * that of a->z. Thus a->y / a->z^3 is a quadratic residue iff a->y * a->z - is */ - secp256k1_fe_mul(&yz, &a->y, &a->z); - return secp256k1_fe_is_quad_var(&yz); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/hash.h b/node_modules/secp256k1/src/secp256k1-src/src/hash.h deleted file mode 100644 index fca98ca..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/hash.h +++ /dev/null @@ -1,41 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_HASH_ -#define _SECP256K1_HASH_ - -#include -#include - -typedef struct { - uint32_t s[8]; - uint32_t buf[16]; /* In big endian */ - size_t bytes; -} secp256k1_sha256_t; - -static void secp256k1_sha256_initialize(secp256k1_sha256_t *hash); -static void secp256k1_sha256_write(secp256k1_sha256_t *hash, const unsigned char *data, size_t size); -static void secp256k1_sha256_finalize(secp256k1_sha256_t *hash, unsigned char *out32); - -typedef struct { - secp256k1_sha256_t inner, outer; -} secp256k1_hmac_sha256_t; - -static void secp256k1_hmac_sha256_initialize(secp256k1_hmac_sha256_t *hash, const unsigned char *key, size_t size); -static void secp256k1_hmac_sha256_write(secp256k1_hmac_sha256_t *hash, const unsigned char *data, size_t size); -static void secp256k1_hmac_sha256_finalize(secp256k1_hmac_sha256_t *hash, unsigned char *out32); - -typedef struct { - unsigned char v[32]; - unsigned char k[32]; - int retry; -} secp256k1_rfc6979_hmac_sha256_t; - -static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen); -static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen); -static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/hash_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/hash_impl.h deleted file mode 100644 index b47e65f..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/hash_impl.h +++ /dev/null @@ -1,281 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_HASH_IMPL_H_ -#define _SECP256K1_HASH_IMPL_H_ - -#include "hash.h" - -#include -#include -#include - -#define Ch(x,y,z) ((z) ^ ((x) & ((y) ^ (z)))) -#define Maj(x,y,z) (((x) & (y)) | ((z) & ((x) | (y)))) -#define Sigma0(x) (((x) >> 2 | (x) << 30) ^ ((x) >> 13 | (x) << 19) ^ ((x) >> 22 | (x) << 10)) -#define Sigma1(x) (((x) >> 6 | (x) << 26) ^ ((x) >> 11 | (x) << 21) ^ ((x) >> 25 | (x) << 7)) -#define sigma0(x) (((x) >> 7 | (x) << 25) ^ ((x) >> 18 | (x) << 14) ^ ((x) >> 3)) -#define sigma1(x) (((x) >> 17 | (x) << 15) ^ ((x) >> 19 | (x) << 13) ^ ((x) >> 10)) - -#define Round(a,b,c,d,e,f,g,h,k,w) do { \ - uint32_t t1 = (h) + Sigma1(e) + Ch((e), (f), (g)) + (k) + (w); \ - uint32_t t2 = Sigma0(a) + Maj((a), (b), (c)); \ - (d) += t1; \ - (h) = t1 + t2; \ -} while(0) - -#ifdef WORDS_BIGENDIAN -#define BE32(x) (x) -#else -#define BE32(p) ((((p) & 0xFF) << 24) | (((p) & 0xFF00) << 8) | (((p) & 0xFF0000) >> 8) | (((p) & 0xFF000000) >> 24)) -#endif - -static void secp256k1_sha256_initialize(secp256k1_sha256_t *hash) { - hash->s[0] = 0x6a09e667ul; - hash->s[1] = 0xbb67ae85ul; - hash->s[2] = 0x3c6ef372ul; - hash->s[3] = 0xa54ff53aul; - hash->s[4] = 0x510e527ful; - hash->s[5] = 0x9b05688cul; - hash->s[6] = 0x1f83d9abul; - hash->s[7] = 0x5be0cd19ul; - hash->bytes = 0; -} - -/** Perform one SHA-256 transformation, processing 16 big endian 32-bit words. */ -static void secp256k1_sha256_transform(uint32_t* s, const uint32_t* chunk) { - uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7]; - uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; - - Round(a, b, c, d, e, f, g, h, 0x428a2f98, w0 = BE32(chunk[0])); - Round(h, a, b, c, d, e, f, g, 0x71374491, w1 = BE32(chunk[1])); - Round(g, h, a, b, c, d, e, f, 0xb5c0fbcf, w2 = BE32(chunk[2])); - Round(f, g, h, a, b, c, d, e, 0xe9b5dba5, w3 = BE32(chunk[3])); - Round(e, f, g, h, a, b, c, d, 0x3956c25b, w4 = BE32(chunk[4])); - Round(d, e, f, g, h, a, b, c, 0x59f111f1, w5 = BE32(chunk[5])); - Round(c, d, e, f, g, h, a, b, 0x923f82a4, w6 = BE32(chunk[6])); - Round(b, c, d, e, f, g, h, a, 0xab1c5ed5, w7 = BE32(chunk[7])); - Round(a, b, c, d, e, f, g, h, 0xd807aa98, w8 = BE32(chunk[8])); - Round(h, a, b, c, d, e, f, g, 0x12835b01, w9 = BE32(chunk[9])); - Round(g, h, a, b, c, d, e, f, 0x243185be, w10 = BE32(chunk[10])); - Round(f, g, h, a, b, c, d, e, 0x550c7dc3, w11 = BE32(chunk[11])); - Round(e, f, g, h, a, b, c, d, 0x72be5d74, w12 = BE32(chunk[12])); - Round(d, e, f, g, h, a, b, c, 0x80deb1fe, w13 = BE32(chunk[13])); - Round(c, d, e, f, g, h, a, b, 0x9bdc06a7, w14 = BE32(chunk[14])); - Round(b, c, d, e, f, g, h, a, 0xc19bf174, w15 = BE32(chunk[15])); - - Round(a, b, c, d, e, f, g, h, 0xe49b69c1, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, c, d, e, f, g, 0xefbe4786, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, b, c, d, e, f, 0x0fc19dc6, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, a, b, c, d, e, 0x240ca1cc, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, h, a, b, c, d, 0x2de92c6f, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, g, h, a, b, c, 0x4a7484aa, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, f, g, h, a, b, 0x5cb0a9dc, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, e, f, g, h, a, 0x76f988da, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, d, e, f, g, h, 0x983e5152, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, c, d, e, f, g, 0xa831c66d, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, b, c, d, e, f, 0xb00327c8, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, a, b, c, d, e, 0xbf597fc7, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, h, a, b, c, d, 0xc6e00bf3, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, g, h, a, b, c, 0xd5a79147, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, f, g, h, a, b, 0x06ca6351, w14 += sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, e, f, g, h, a, 0x14292967, w15 += sigma1(w13) + w8 + sigma0(w0)); - - Round(a, b, c, d, e, f, g, h, 0x27b70a85, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, c, d, e, f, g, 0x2e1b2138, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, b, c, d, e, f, 0x4d2c6dfc, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, a, b, c, d, e, 0x53380d13, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, h, a, b, c, d, 0x650a7354, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, g, h, a, b, c, 0x766a0abb, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, f, g, h, a, b, 0x81c2c92e, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, e, f, g, h, a, 0x92722c85, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, c, d, e, f, g, 0xa81a664b, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, b, c, d, e, f, 0xc24b8b70, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, a, b, c, d, e, 0xc76c51a3, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, h, a, b, c, d, 0xd192e819, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, g, h, a, b, c, 0xd6990624, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, f, g, h, a, b, 0xf40e3585, w14 += sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, e, f, g, h, a, 0x106aa070, w15 += sigma1(w13) + w8 + sigma0(w0)); - - Round(a, b, c, d, e, f, g, h, 0x19a4c116, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, c, d, e, f, g, 0x1e376c08, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, b, c, d, e, f, 0x2748774c, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, a, b, c, d, e, 0x34b0bcb5, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, h, a, b, c, d, 0x391c0cb3, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, g, h, a, b, c, 0x4ed8aa4a, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, f, g, h, a, b, 0x5b9cca4f, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, e, f, g, h, a, 0x682e6ff3, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, d, e, f, g, h, 0x748f82ee, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, c, d, e, f, g, 0x78a5636f, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, b, c, d, e, f, 0x84c87814, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, a, b, c, d, e, 0x8cc70208, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, h, a, b, c, d, 0x90befffa, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, g, h, a, b, c, 0xa4506ceb, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, f, g, h, a, b, 0xbef9a3f7, w14 + sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, e, f, g, h, a, 0xc67178f2, w15 + sigma1(w13) + w8 + sigma0(w0)); - - s[0] += a; - s[1] += b; - s[2] += c; - s[3] += d; - s[4] += e; - s[5] += f; - s[6] += g; - s[7] += h; -} - -static void secp256k1_sha256_write(secp256k1_sha256_t *hash, const unsigned char *data, size_t len) { - size_t bufsize = hash->bytes & 0x3F; - hash->bytes += len; - while (bufsize + len >= 64) { - /* Fill the buffer, and process it. */ - memcpy(((unsigned char*)hash->buf) + bufsize, data, 64 - bufsize); - data += 64 - bufsize; - len -= 64 - bufsize; - secp256k1_sha256_transform(hash->s, hash->buf); - bufsize = 0; - } - if (len) { - /* Fill the buffer with what remains. */ - memcpy(((unsigned char*)hash->buf) + bufsize, data, len); - } -} - -static void secp256k1_sha256_finalize(secp256k1_sha256_t *hash, unsigned char *out32) { - static const unsigned char pad[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - uint32_t sizedesc[2]; - uint32_t out[8]; - int i = 0; - sizedesc[0] = BE32(hash->bytes >> 29); - sizedesc[1] = BE32(hash->bytes << 3); - secp256k1_sha256_write(hash, pad, 1 + ((119 - (hash->bytes % 64)) % 64)); - secp256k1_sha256_write(hash, (const unsigned char*)sizedesc, 8); - for (i = 0; i < 8; i++) { - out[i] = BE32(hash->s[i]); - hash->s[i] = 0; - } - memcpy(out32, (const unsigned char*)out, 32); -} - -static void secp256k1_hmac_sha256_initialize(secp256k1_hmac_sha256_t *hash, const unsigned char *key, size_t keylen) { - int n; - unsigned char rkey[64]; - if (keylen <= 64) { - memcpy(rkey, key, keylen); - memset(rkey + keylen, 0, 64 - keylen); - } else { - secp256k1_sha256_t sha256; - secp256k1_sha256_initialize(&sha256); - secp256k1_sha256_write(&sha256, key, keylen); - secp256k1_sha256_finalize(&sha256, rkey); - memset(rkey + 32, 0, 32); - } - - secp256k1_sha256_initialize(&hash->outer); - for (n = 0; n < 64; n++) { - rkey[n] ^= 0x5c; - } - secp256k1_sha256_write(&hash->outer, rkey, 64); - - secp256k1_sha256_initialize(&hash->inner); - for (n = 0; n < 64; n++) { - rkey[n] ^= 0x5c ^ 0x36; - } - secp256k1_sha256_write(&hash->inner, rkey, 64); - memset(rkey, 0, 64); -} - -static void secp256k1_hmac_sha256_write(secp256k1_hmac_sha256_t *hash, const unsigned char *data, size_t size) { - secp256k1_sha256_write(&hash->inner, data, size); -} - -static void secp256k1_hmac_sha256_finalize(secp256k1_hmac_sha256_t *hash, unsigned char *out32) { - unsigned char temp[32]; - secp256k1_sha256_finalize(&hash->inner, temp); - secp256k1_sha256_write(&hash->outer, temp, 32); - memset(temp, 0, 32); - secp256k1_sha256_finalize(&hash->outer, out32); -} - - -static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen) { - secp256k1_hmac_sha256_t hmac; - static const unsigned char zero[1] = {0x00}; - static const unsigned char one[1] = {0x01}; - - memset(rng->v, 0x01, 32); /* RFC6979 3.2.b. */ - memset(rng->k, 0x00, 32); /* RFC6979 3.2.c. */ - - /* RFC6979 3.2.d. */ - secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32); - secp256k1_hmac_sha256_write(&hmac, rng->v, 32); - secp256k1_hmac_sha256_write(&hmac, zero, 1); - secp256k1_hmac_sha256_write(&hmac, key, keylen); - secp256k1_hmac_sha256_finalize(&hmac, rng->k); - secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32); - secp256k1_hmac_sha256_write(&hmac, rng->v, 32); - secp256k1_hmac_sha256_finalize(&hmac, rng->v); - - /* RFC6979 3.2.f. */ - secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32); - secp256k1_hmac_sha256_write(&hmac, rng->v, 32); - secp256k1_hmac_sha256_write(&hmac, one, 1); - secp256k1_hmac_sha256_write(&hmac, key, keylen); - secp256k1_hmac_sha256_finalize(&hmac, rng->k); - secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32); - secp256k1_hmac_sha256_write(&hmac, rng->v, 32); - secp256k1_hmac_sha256_finalize(&hmac, rng->v); - rng->retry = 0; -} - -static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen) { - /* RFC6979 3.2.h. */ - static const unsigned char zero[1] = {0x00}; - if (rng->retry) { - secp256k1_hmac_sha256_t hmac; - secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32); - secp256k1_hmac_sha256_write(&hmac, rng->v, 32); - secp256k1_hmac_sha256_write(&hmac, zero, 1); - secp256k1_hmac_sha256_finalize(&hmac, rng->k); - secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32); - secp256k1_hmac_sha256_write(&hmac, rng->v, 32); - secp256k1_hmac_sha256_finalize(&hmac, rng->v); - } - - while (outlen > 0) { - secp256k1_hmac_sha256_t hmac; - int now = outlen; - secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32); - secp256k1_hmac_sha256_write(&hmac, rng->v, 32); - secp256k1_hmac_sha256_finalize(&hmac, rng->v); - if (now > 32) { - now = 32; - } - memcpy(out, rng->v, now); - out += now; - outlen -= now; - } - - rng->retry = 1; -} - -static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng) { - memset(rng->k, 0, 32); - memset(rng->v, 0, 32); - rng->retry = 0; -} - -#undef BE32 -#undef Round -#undef sigma1 -#undef sigma0 -#undef Sigma1 -#undef Sigma0 -#undef Maj -#undef Ch - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1.java b/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1.java deleted file mode 100644 index be67048..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1.java +++ /dev/null @@ -1,478 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * Copyright 2014-2016 the libsecp256k1 contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.bitcoin; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -import java.math.BigInteger; -import com.google.common.base.Preconditions; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantReadWriteLock; -import static org.bitcoin.NativeSecp256k1Util.*; - -/** - *

    This class holds native methods to handle ECDSA verification.

    - * - *

    You can find an example library that can be used for this at https://github.com/bitcoin/secp256k1

    - * - *

    To build secp256k1 for use with bitcoinj, run - * `./configure --enable-jni --enable-experimental --enable-module-schnorr --enable-module-ecdh` - * and `make` then copy `.libs/libsecp256k1.so` to your system library path - * or point the JVM to the folder containing it with -Djava.library.path - *

    - */ -public class NativeSecp256k1 { - - private static final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); - private static final Lock r = rwl.readLock(); - private static final Lock w = rwl.writeLock(); - private static ThreadLocal nativeECDSABuffer = new ThreadLocal(); - /** - * Verifies the given secp256k1 signature in native code. - * Calling when enabled == false is undefined (probably library not loaded) - * - * @param data The data which was signed, must be exactly 32 bytes - * @param signature The signature - * @param pub The public key which did the signing - */ - public static boolean verify(byte[] data, byte[] signature, byte[] pub) throws AssertFailException{ - Preconditions.checkArgument(data.length == 32 && signature.length <= 520 && pub.length <= 520); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < 520) { - byteBuff = ByteBuffer.allocateDirect(520); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(data); - byteBuff.put(signature); - byteBuff.put(pub); - - byte[][] retByteArray; - - r.lock(); - try { - return secp256k1_ecdsa_verify(byteBuff, Secp256k1Context.getContext(), signature.length, pub.length) == 1; - } finally { - r.unlock(); - } - } - - /** - * libsecp256k1 Create an ECDSA signature. - * - * @param data Message hash, 32 bytes - * @param key Secret key, 32 bytes - * - * Return values - * @param sig byte array of signature - */ - public static byte[] sign(byte[] data, byte[] sec) throws AssertFailException{ - Preconditions.checkArgument(data.length == 32 && sec.length <= 32); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < 32 + 32) { - byteBuff = ByteBuffer.allocateDirect(32 + 32); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(data); - byteBuff.put(sec); - - byte[][] retByteArray; - - r.lock(); - try { - retByteArray = secp256k1_ecdsa_sign(byteBuff, Secp256k1Context.getContext()); - } finally { - r.unlock(); - } - - byte[] sigArr = retByteArray[0]; - int sigLen = new BigInteger(new byte[] { retByteArray[1][0] }).intValue(); - int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue(); - - assertEquals(sigArr.length, sigLen, "Got bad signature length."); - - return retVal == 0 ? new byte[0] : sigArr; - } - - /** - * libsecp256k1 Seckey Verify - returns 1 if valid, 0 if invalid - * - * @param seckey ECDSA Secret key, 32 bytes - */ - public static boolean secKeyVerify(byte[] seckey) { - Preconditions.checkArgument(seckey.length == 32); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < seckey.length) { - byteBuff = ByteBuffer.allocateDirect(seckey.length); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(seckey); - - r.lock(); - try { - return secp256k1_ec_seckey_verify(byteBuff,Secp256k1Context.getContext()) == 1; - } finally { - r.unlock(); - } - } - - - /** - * libsecp256k1 Compute Pubkey - computes public key from secret key - * - * @param seckey ECDSA Secret key, 32 bytes - * - * Return values - * @param pubkey ECDSA Public key, 33 or 65 bytes - */ - //TODO add a 'compressed' arg - public static byte[] computePubkey(byte[] seckey) throws AssertFailException{ - Preconditions.checkArgument(seckey.length == 32); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < seckey.length) { - byteBuff = ByteBuffer.allocateDirect(seckey.length); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(seckey); - - byte[][] retByteArray; - - r.lock(); - try { - retByteArray = secp256k1_ec_pubkey_create(byteBuff, Secp256k1Context.getContext()); - } finally { - r.unlock(); - } - - byte[] pubArr = retByteArray[0]; - int pubLen = new BigInteger(new byte[] { retByteArray[1][0] }).intValue(); - int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue(); - - assertEquals(pubArr.length, pubLen, "Got bad pubkey length."); - - return retVal == 0 ? new byte[0]: pubArr; - } - - /** - * libsecp256k1 Cleanup - This destroys the secp256k1 context object - * This should be called at the end of the program for proper cleanup of the context. - */ - public static synchronized void cleanup() { - w.lock(); - try { - secp256k1_destroy_context(Secp256k1Context.getContext()); - } finally { - w.unlock(); - } - } - - public static long cloneContext() { - r.lock(); - try { - return secp256k1_ctx_clone(Secp256k1Context.getContext()); - } finally { r.unlock(); } - } - - /** - * libsecp256k1 PrivKey Tweak-Mul - Tweak privkey by multiplying to it - * - * @param tweak some bytes to tweak with - * @param seckey 32-byte seckey - */ - public static byte[] privKeyTweakMul(byte[] privkey, byte[] tweak) throws AssertFailException{ - Preconditions.checkArgument(privkey.length == 32); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < privkey.length + tweak.length) { - byteBuff = ByteBuffer.allocateDirect(privkey.length + tweak.length); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(privkey); - byteBuff.put(tweak); - - byte[][] retByteArray; - r.lock(); - try { - retByteArray = secp256k1_privkey_tweak_mul(byteBuff,Secp256k1Context.getContext()); - } finally { - r.unlock(); - } - - byte[] privArr = retByteArray[0]; - - int privLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF; - int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue(); - - assertEquals(privArr.length, privLen, "Got bad pubkey length."); - - assertEquals(retVal, 1, "Failed return value check."); - - return privArr; - } - - /** - * libsecp256k1 PrivKey Tweak-Add - Tweak privkey by adding to it - * - * @param tweak some bytes to tweak with - * @param seckey 32-byte seckey - */ - public static byte[] privKeyTweakAdd(byte[] privkey, byte[] tweak) throws AssertFailException{ - Preconditions.checkArgument(privkey.length == 32); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < privkey.length + tweak.length) { - byteBuff = ByteBuffer.allocateDirect(privkey.length + tweak.length); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(privkey); - byteBuff.put(tweak); - - byte[][] retByteArray; - r.lock(); - try { - retByteArray = secp256k1_privkey_tweak_add(byteBuff,Secp256k1Context.getContext()); - } finally { - r.unlock(); - } - - byte[] privArr = retByteArray[0]; - - int privLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF; - int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue(); - - assertEquals(privArr.length, privLen, "Got bad pubkey length."); - - assertEquals(retVal, 1, "Failed return value check."); - - return privArr; - } - - /** - * libsecp256k1 PubKey Tweak-Add - Tweak pubkey by adding to it - * - * @param tweak some bytes to tweak with - * @param pubkey 32-byte seckey - */ - public static byte[] pubKeyTweakAdd(byte[] pubkey, byte[] tweak) throws AssertFailException{ - Preconditions.checkArgument(pubkey.length == 33 || pubkey.length == 65); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < pubkey.length + tweak.length) { - byteBuff = ByteBuffer.allocateDirect(pubkey.length + tweak.length); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(pubkey); - byteBuff.put(tweak); - - byte[][] retByteArray; - r.lock(); - try { - retByteArray = secp256k1_pubkey_tweak_add(byteBuff,Secp256k1Context.getContext(), pubkey.length); - } finally { - r.unlock(); - } - - byte[] pubArr = retByteArray[0]; - - int pubLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF; - int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue(); - - assertEquals(pubArr.length, pubLen, "Got bad pubkey length."); - - assertEquals(retVal, 1, "Failed return value check."); - - return pubArr; - } - - /** - * libsecp256k1 PubKey Tweak-Mul - Tweak pubkey by multiplying to it - * - * @param tweak some bytes to tweak with - * @param pubkey 32-byte seckey - */ - public static byte[] pubKeyTweakMul(byte[] pubkey, byte[] tweak) throws AssertFailException{ - Preconditions.checkArgument(pubkey.length == 33 || pubkey.length == 65); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < pubkey.length + tweak.length) { - byteBuff = ByteBuffer.allocateDirect(pubkey.length + tweak.length); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(pubkey); - byteBuff.put(tweak); - - byte[][] retByteArray; - r.lock(); - try { - retByteArray = secp256k1_pubkey_tweak_mul(byteBuff,Secp256k1Context.getContext(), pubkey.length); - } finally { - r.unlock(); - } - - byte[] pubArr = retByteArray[0]; - - int pubLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF; - int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue(); - - assertEquals(pubArr.length, pubLen, "Got bad pubkey length."); - - assertEquals(retVal, 1, "Failed return value check."); - - return pubArr; - } - - /** - * libsecp256k1 create ECDH secret - constant time ECDH calculation - * - * @param seckey byte array of secret key used in exponentiaion - * @param pubkey byte array of public key used in exponentiaion - */ - public static byte[] createECDHSecret(byte[] seckey, byte[] pubkey) throws AssertFailException{ - Preconditions.checkArgument(seckey.length <= 32 && pubkey.length <= 65); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < 32 + pubkey.length) { - byteBuff = ByteBuffer.allocateDirect(32 + pubkey.length); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(seckey); - byteBuff.put(pubkey); - - byte[][] retByteArray; - r.lock(); - try { - retByteArray = secp256k1_ecdh(byteBuff, Secp256k1Context.getContext(), pubkey.length); - } finally { - r.unlock(); - } - - byte[] resArr = retByteArray[0]; - int retVal = new BigInteger(new byte[] { retByteArray[1][0] }).intValue(); - - assertEquals(resArr.length, 32, "Got bad result length."); - assertEquals(retVal, 1, "Failed return value check."); - - return resArr; - } - - /** - * libsecp256k1 randomize - updates the context randomization - * - * @param seed 32-byte random seed - */ - public static synchronized boolean randomize(byte[] seed) throws AssertFailException{ - Preconditions.checkArgument(seed.length == 32 || seed == null); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null || byteBuff.capacity() < seed.length) { - byteBuff = ByteBuffer.allocateDirect(seed.length); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(seed); - - w.lock(); - try { - return secp256k1_context_randomize(byteBuff, Secp256k1Context.getContext()) == 1; - } finally { - w.unlock(); - } - } - - public static byte[] schnorrSign(byte[] data, byte[] sec) throws AssertFailException { - Preconditions.checkArgument(data.length == 32 && sec.length <= 32); - - ByteBuffer byteBuff = nativeECDSABuffer.get(); - if (byteBuff == null) { - byteBuff = ByteBuffer.allocateDirect(32 + 32); - byteBuff.order(ByteOrder.nativeOrder()); - nativeECDSABuffer.set(byteBuff); - } - byteBuff.rewind(); - byteBuff.put(data); - byteBuff.put(sec); - - byte[][] retByteArray; - - r.lock(); - try { - retByteArray = secp256k1_schnorr_sign(byteBuff, Secp256k1Context.getContext()); - } finally { - r.unlock(); - } - - byte[] sigArr = retByteArray[0]; - int retVal = new BigInteger(new byte[] { retByteArray[1][0] }).intValue(); - - assertEquals(sigArr.length, 64, "Got bad signature length."); - - return retVal == 0 ? new byte[0] : sigArr; - } - - private static native long secp256k1_ctx_clone(long context); - - private static native int secp256k1_context_randomize(ByteBuffer byteBuff, long context); - - private static native byte[][] secp256k1_privkey_tweak_add(ByteBuffer byteBuff, long context); - - private static native byte[][] secp256k1_privkey_tweak_mul(ByteBuffer byteBuff, long context); - - private static native byte[][] secp256k1_pubkey_tweak_add(ByteBuffer byteBuff, long context, int pubLen); - - private static native byte[][] secp256k1_pubkey_tweak_mul(ByteBuffer byteBuff, long context, int pubLen); - - private static native void secp256k1_destroy_context(long context); - - private static native int secp256k1_ecdsa_verify(ByteBuffer byteBuff, long context, int sigLen, int pubLen); - - private static native byte[][] secp256k1_ecdsa_sign(ByteBuffer byteBuff, long context); - - private static native int secp256k1_ec_seckey_verify(ByteBuffer byteBuff, long context); - - private static native byte[][] secp256k1_ec_pubkey_create(ByteBuffer byteBuff, long context); - - private static native byte[][] secp256k1_ec_pubkey_parse(ByteBuffer byteBuff, long context, int inputLen); - - private static native byte[][] secp256k1_schnorr_sign(ByteBuffer byteBuff, long context); - - private static native byte[][] secp256k1_ecdh(ByteBuffer byteBuff, long context, int inputLen); - -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1Test.java b/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1Test.java deleted file mode 100644 index f18ce95..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1Test.java +++ /dev/null @@ -1,247 +0,0 @@ -package org.bitcoin; - -import com.google.common.io.BaseEncoding; -import java.util.Arrays; -import java.math.BigInteger; -import javax.xml.bind.DatatypeConverter; -import static org.bitcoin.NativeSecp256k1Util.*; - -/** - * This class holds test cases defined for testing this library. - */ -public class NativeSecp256k1Test { - - //TODO improve comments/add more tests - /** - * This tests verify() for a valid signature - */ - public static void testVerifyPos() throws AssertFailException{ - boolean result = false; - byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing" - byte[] sig = BaseEncoding.base16().lowerCase().decode("3044022079BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980220294F14E883B3F525B5367756C2A11EF6CF84B730B36C17CB0C56F0AAB2C98589".toLowerCase()); - byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); - - result = NativeSecp256k1.verify( data, sig, pub); - assertEquals( result, true , "testVerifyPos"); - } - - /** - * This tests verify() for a non-valid signature - */ - public static void testVerifyNeg() throws AssertFailException{ - boolean result = false; - byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A91".toLowerCase()); //sha256hash of "testing" - byte[] sig = BaseEncoding.base16().lowerCase().decode("3044022079BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980220294F14E883B3F525B5367756C2A11EF6CF84B730B36C17CB0C56F0AAB2C98589".toLowerCase()); - byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); - - result = NativeSecp256k1.verify( data, sig, pub); - //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16)); - assertEquals( result, false , "testVerifyNeg"); - } - - /** - * This tests secret key verify() for a valid secretkey - */ - public static void testSecKeyVerifyPos() throws AssertFailException{ - boolean result = false; - byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); - - result = NativeSecp256k1.secKeyVerify( sec ); - //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16)); - assertEquals( result, true , "testSecKeyVerifyPos"); - } - - /** - * This tests secret key verify() for a invalid secretkey - */ - public static void testSecKeyVerifyNeg() throws AssertFailException{ - boolean result = false; - byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase()); - - result = NativeSecp256k1.secKeyVerify( sec ); - //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16)); - assertEquals( result, false , "testSecKeyVerifyNeg"); - } - - /** - * This tests public key create() for a valid secretkey - */ - public static void testPubKeyCreatePos() throws AssertFailException{ - byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); - - byte[] resultArr = NativeSecp256k1.computePubkey( sec); - String pubkeyString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( pubkeyString , "04C591A8FF19AC9C4E4E5793673B83123437E975285E7B442F4EE2654DFFCA5E2D2103ED494718C697AC9AEBCFD19612E224DB46661011863ED2FC54E71861E2A6" , "testPubKeyCreatePos"); - } - - /** - * This tests public key create() for a invalid secretkey - */ - public static void testPubKeyCreateNeg() throws AssertFailException{ - byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase()); - - byte[] resultArr = NativeSecp256k1.computePubkey( sec); - String pubkeyString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( pubkeyString, "" , "testPubKeyCreateNeg"); - } - - /** - * This tests sign() for a valid secretkey - */ - public static void testSignPos() throws AssertFailException{ - - byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing" - byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); - - byte[] resultArr = NativeSecp256k1.sign(data, sec); - String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( sigString, "30440220182A108E1448DC8F1FB467D06A0F3BB8EA0533584CB954EF8DA112F1D60E39A202201C66F36DA211C087F3AF88B50EDF4F9BDAA6CF5FD6817E74DCA34DB12390C6E9" , "testSignPos"); - } - - /** - * This tests sign() for a invalid secretkey - */ - public static void testSignNeg() throws AssertFailException{ - byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing" - byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase()); - - byte[] resultArr = NativeSecp256k1.sign(data, sec); - String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( sigString, "" , "testSignNeg"); - } - - /** - * This tests private key tweak-add - */ - public static void testPrivKeyTweakAdd_1() throws AssertFailException { - byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); - byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak" - - byte[] resultArr = NativeSecp256k1.privKeyTweakAdd( sec , data ); - String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( sigString , "A168571E189E6F9A7E2D657A4B53AE99B909F7E712D1C23CED28093CD57C88F3" , "testPrivKeyAdd_1"); - } - - /** - * This tests private key tweak-mul - */ - public static void testPrivKeyTweakMul_1() throws AssertFailException { - byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); - byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak" - - byte[] resultArr = NativeSecp256k1.privKeyTweakMul( sec , data ); - String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( sigString , "97F8184235F101550F3C71C927507651BD3F1CDB4A5A33B8986ACF0DEE20FFFC" , "testPrivKeyMul_1"); - } - - /** - * This tests private key tweak-add uncompressed - */ - public static void testPrivKeyTweakAdd_2() throws AssertFailException { - byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); - byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak" - - byte[] resultArr = NativeSecp256k1.pubKeyTweakAdd( pub , data ); - String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( sigString , "0411C6790F4B663CCE607BAAE08C43557EDC1A4D11D88DFCB3D841D0C6A941AF525A268E2A863C148555C48FB5FBA368E88718A46E205FABC3DBA2CCFFAB0796EF" , "testPrivKeyAdd_2"); - } - - /** - * This tests private key tweak-mul uncompressed - */ - public static void testPrivKeyTweakMul_2() throws AssertFailException { - byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); - byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak" - - byte[] resultArr = NativeSecp256k1.pubKeyTweakMul( pub , data ); - String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( sigString , "04E0FE6FE55EBCA626B98A807F6CAF654139E14E5E3698F01A9A658E21DC1D2791EC060D4F412A794D5370F672BC94B722640B5F76914151CFCA6E712CA48CC589" , "testPrivKeyMul_2"); - } - - /** - * This tests seed randomization - */ - public static void testRandomize() throws AssertFailException { - byte[] seed = BaseEncoding.base16().lowerCase().decode("A441B15FE9A3CF56661190A0B93B9DEC7D04127288CC87250967CF3B52894D11".toLowerCase()); //sha256hash of "random" - boolean result = NativeSecp256k1.randomize(seed); - assertEquals( result, true, "testRandomize"); - } - - /** - * This tests signSchnorr() for a valid secretkey - */ - public static void testSchnorrSign() throws AssertFailException{ - - byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing" - byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); - - byte[] resultArr = NativeSecp256k1.schnorrSign(data, sec); - String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( sigString, "C5E929AA058B982048760422D3B563749B7D0E50C5EBD8CD2FFC23214BD6A2F1B072C13880997EBA847CF20F2F90FCE07C1CA33A890A4127095A351127F8D95F" , "testSchnorrSign"); - } - - /** - * This tests signSchnorr() for a valid secretkey - */ - public static void testCreateECDHSecret() throws AssertFailException{ - - byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); - byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); - - byte[] resultArr = NativeSecp256k1.createECDHSecret(sec, pub); - String ecdhString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); - assertEquals( ecdhString, "2A2A67007A926E6594AF3EB564FC74005B37A9C8AEF2033C4552051B5C87F043" , "testCreateECDHSecret"); - } - - public static void main(String[] args) throws AssertFailException{ - - - System.out.println("\n libsecp256k1 enabled: " + Secp256k1Context.isEnabled() + "\n"); - - assertEquals( Secp256k1Context.isEnabled(), true, "isEnabled" ); - - //Test verify() success/fail - testVerifyPos(); - testVerifyNeg(); - - //Test secKeyVerify() success/fail - testSecKeyVerifyPos(); - testSecKeyVerifyNeg(); - - //Test computePubkey() success/fail - testPubKeyCreatePos(); - testPubKeyCreateNeg(); - - //Test sign() success/fail - testSignPos(); - testSignNeg(); - - //Test Schnorr (partial support) //TODO - testSchnorrSign(); - //testSchnorrVerify - //testSchnorrRecovery - - //Test privKeyTweakAdd() 1 - testPrivKeyTweakAdd_1(); - - //Test privKeyTweakMul() 2 - testPrivKeyTweakMul_1(); - - //Test privKeyTweakAdd() 3 - testPrivKeyTweakAdd_2(); - - //Test privKeyTweakMul() 4 - testPrivKeyTweakMul_2(); - - //Test randomize() - testRandomize(); - - //Test ECDH - testCreateECDHSecret(); - - NativeSecp256k1.cleanup(); - - System.out.println(" All tests passed." ); - - } -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1Util.java b/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1Util.java deleted file mode 100644 index 04732ba..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/NativeSecp256k1Util.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2014-2016 the libsecp256k1 contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.bitcoin; - -public class NativeSecp256k1Util{ - - public static void assertEquals( int val, int val2, String message ) throws AssertFailException{ - if( val != val2 ) - throw new AssertFailException("FAIL: " + message); - } - - public static void assertEquals( boolean val, boolean val2, String message ) throws AssertFailException{ - if( val != val2 ) - throw new AssertFailException("FAIL: " + message); - else - System.out.println("PASS: " + message); - } - - public static void assertEquals( String val, String val2, String message ) throws AssertFailException{ - if( !val.equals(val2) ) - throw new AssertFailException("FAIL: " + message); - else - System.out.println("PASS: " + message); - } - - public static class AssertFailException extends Exception { - public AssertFailException(String message) { - super( message ); - } - } -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/Secp256k1Context.java b/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/Secp256k1Context.java deleted file mode 100644 index 216c986..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/java/org/bitcoin/Secp256k1Context.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2014-2016 the libsecp256k1 contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.bitcoin; - -/** - * This class holds the context reference used in native methods - * to handle ECDSA operations. - */ -public class Secp256k1Context { - private static final boolean enabled; //true if the library is loaded - private static final long context; //ref to pointer to context obj - - static { //static initializer - boolean isEnabled = true; - long contextRef = -1; - try { - System.loadLibrary("secp256k1"); - contextRef = secp256k1_init_context(); - } catch (UnsatisfiedLinkError e) { - System.out.println("UnsatisfiedLinkError: " + e.toString()); - isEnabled = false; - } - enabled = isEnabled; - context = contextRef; - } - - public static boolean isEnabled() { - return enabled; - } - - public static long getContext() { - if(!enabled) return -1; //sanity check - return context; - } - - private static native long secp256k1_init_context(); -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_NativeSecp256k1.c b/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_NativeSecp256k1.c deleted file mode 100644 index dba9524..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_NativeSecp256k1.c +++ /dev/null @@ -1,411 +0,0 @@ -#include -#include -#include -#include "org_bitcoin_NativeSecp256k1.h" -#include "include/secp256k1.h" -#include "include/secp256k1_ecdh.h" -#include "include/secp256k1_recovery.h" -#include "include/secp256k1_schnorr.h" - - -SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ctx_1clone - (JNIEnv* env, jclass classObject, jlong ctx_l) -{ - const secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - - jlong ctx_clone_l = (uintptr_t) secp256k1_context_clone(ctx); - - (void)classObject;(void)env; - - return ctx_clone_l; - -} - -SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1context_1randomize - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - - const unsigned char* seed = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); - - (void)classObject; - - return secp256k1_context_randomize(ctx, seed); - -} - -SECP256K1_API void JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1destroy_1context - (JNIEnv* env, jclass classObject, jlong ctx_l) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - - secp256k1_context_destroy(ctx); - - (void)classObject;(void)env; -} - -SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1verify - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint siglen, jint publen) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - - unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); - const unsigned char* sigdata = { (unsigned char*) (data + 32) }; - const unsigned char* pubdata = { (unsigned char*) (data + siglen + 32) }; - - secp256k1_ecdsa_signature sig; - secp256k1_pubkey pubkey; - - int ret = secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigdata, siglen); - - if( ret ) { - ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pubdata, publen); - - if( ret ) { - ret = secp256k1_ecdsa_verify(ctx, &sig, data, &pubkey); - } - } - - (void)classObject; - - return ret; -} - -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1sign - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); - unsigned char* secKey = (unsigned char*) (data + 32); - - jobjectArray retArray; - jbyteArray sigArray, intsByteArray; - unsigned char intsarray[2]; - - secp256k1_ecdsa_signature sig[72]; - - int ret = secp256k1_ecdsa_sign(ctx, sig, data, secKey, NULL, NULL ); - - unsigned char outputSer[72]; - size_t outputLen = 72; - - if( ret ) { - int ret2 = secp256k1_ecdsa_signature_serialize_der(ctx,outputSer, &outputLen, sig ); (void)ret2; - } - - intsarray[0] = outputLen; - intsarray[1] = ret; - - retArray = (*env)->NewObjectArray(env, 2, - (*env)->FindClass(env, "[B"), - (*env)->NewByteArray(env, 1)); - - sigArray = (*env)->NewByteArray(env, outputLen); - (*env)->SetByteArrayRegion(env, sigArray, 0, outputLen, (jbyte*)outputSer); - (*env)->SetObjectArrayElement(env, retArray, 0, sigArray); - - intsByteArray = (*env)->NewByteArray(env, 2); - (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray); - (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray); - - (void)classObject; - - return retArray; -} - -SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1seckey_1verify - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - unsigned char* secKey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); - - (void)classObject; - - return secp256k1_ec_seckey_verify(ctx, secKey); -} - -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1create - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - const unsigned char* secKey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); - - secp256k1_pubkey pubkey; - - jobjectArray retArray; - jbyteArray pubkeyArray, intsByteArray; - unsigned char intsarray[2]; - - int ret = secp256k1_ec_pubkey_create(ctx, &pubkey, secKey); - - unsigned char outputSer[65]; - size_t outputLen = 65; - - if( ret ) { - int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2; - } - - intsarray[0] = outputLen; - intsarray[1] = ret; - - retArray = (*env)->NewObjectArray(env, 2, - (*env)->FindClass(env, "[B"), - (*env)->NewByteArray(env, 1)); - - pubkeyArray = (*env)->NewByteArray(env, outputLen); - (*env)->SetByteArrayRegion(env, pubkeyArray, 0, outputLen, (jbyte*)outputSer); - (*env)->SetObjectArrayElement(env, retArray, 0, pubkeyArray); - - intsByteArray = (*env)->NewByteArray(env, 2); - (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray); - (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray); - - (void)classObject; - - return retArray; - -} - -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1add - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - unsigned char* privkey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); - const unsigned char* tweak = (unsigned char*) (privkey + 32); - - jobjectArray retArray; - jbyteArray privArray, intsByteArray; - unsigned char intsarray[2]; - - int privkeylen = 32; - - int ret = secp256k1_ec_privkey_tweak_add(ctx, privkey, tweak); - - intsarray[0] = privkeylen; - intsarray[1] = ret; - - retArray = (*env)->NewObjectArray(env, 2, - (*env)->FindClass(env, "[B"), - (*env)->NewByteArray(env, 1)); - - privArray = (*env)->NewByteArray(env, privkeylen); - (*env)->SetByteArrayRegion(env, privArray, 0, privkeylen, (jbyte*)privkey); - (*env)->SetObjectArrayElement(env, retArray, 0, privArray); - - intsByteArray = (*env)->NewByteArray(env, 2); - (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray); - (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray); - - (void)classObject; - - return retArray; -} - -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1mul - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - unsigned char* privkey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); - const unsigned char* tweak = (unsigned char*) (privkey + 32); - - jobjectArray retArray; - jbyteArray privArray, intsByteArray; - unsigned char intsarray[2]; - - int privkeylen = 32; - - int ret = secp256k1_ec_privkey_tweak_mul(ctx, privkey, tweak); - - intsarray[0] = privkeylen; - intsarray[1] = ret; - - retArray = (*env)->NewObjectArray(env, 2, - (*env)->FindClass(env, "[B"), - (*env)->NewByteArray(env, 1)); - - privArray = (*env)->NewByteArray(env, privkeylen); - (*env)->SetByteArrayRegion(env, privArray, 0, privkeylen, (jbyte*)privkey); - (*env)->SetObjectArrayElement(env, retArray, 0, privArray); - - intsByteArray = (*env)->NewByteArray(env, 2); - (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray); - (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray); - - (void)classObject; - - return retArray; -} - -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1add - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; -/* secp256k1_pubkey* pubkey = (secp256k1_pubkey*) (*env)->GetDirectBufferAddress(env, byteBufferObject);*/ - unsigned char* pkey = (*env)->GetDirectBufferAddress(env, byteBufferObject); - const unsigned char* tweak = (unsigned char*) (pkey + publen); - - jobjectArray retArray; - jbyteArray pubArray, intsByteArray; - unsigned char intsarray[2]; - unsigned char outputSer[65]; - size_t outputLen = 65; - - secp256k1_pubkey pubkey; - int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pkey, publen); - - if( ret ) { - ret = secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, tweak); - } - - if( ret ) { - int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2; - } - - intsarray[0] = outputLen; - intsarray[1] = ret; - - retArray = (*env)->NewObjectArray(env, 2, - (*env)->FindClass(env, "[B"), - (*env)->NewByteArray(env, 1)); - - pubArray = (*env)->NewByteArray(env, outputLen); - (*env)->SetByteArrayRegion(env, pubArray, 0, outputLen, (jbyte*)outputSer); - (*env)->SetObjectArrayElement(env, retArray, 0, pubArray); - - intsByteArray = (*env)->NewByteArray(env, 2); - (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray); - (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray); - - (void)classObject; - - return retArray; -} - -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1mul - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - unsigned char* pkey = (*env)->GetDirectBufferAddress(env, byteBufferObject); - const unsigned char* tweak = (unsigned char*) (pkey + publen); - - jobjectArray retArray; - jbyteArray pubArray, intsByteArray; - unsigned char intsarray[2]; - unsigned char outputSer[65]; - size_t outputLen = 65; - - secp256k1_pubkey pubkey; - int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pkey, publen); - - if ( ret ) { - ret = secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, tweak); - } - - if( ret ) { - int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2; - } - - intsarray[0] = outputLen; - intsarray[1] = ret; - - retArray = (*env)->NewObjectArray(env, 2, - (*env)->FindClass(env, "[B"), - (*env)->NewByteArray(env, 1)); - - pubArray = (*env)->NewByteArray(env, outputLen); - (*env)->SetByteArrayRegion(env, pubArray, 0, outputLen, (jbyte*)outputSer); - (*env)->SetObjectArrayElement(env, retArray, 0, pubArray); - - intsByteArray = (*env)->NewByteArray(env, 2); - (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray); - (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray); - - (void)classObject; - - return retArray; -} - -SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1pubkey_1combine - (JNIEnv * env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint numkeys) -{ - (void)classObject;(void)env;(void)byteBufferObject;(void)ctx_l;(void)numkeys; - - return 0; -} - -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1schnorr_1sign - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); - unsigned char* secKey = (unsigned char*) (data + 32); - - jobjectArray retArray; - jbyteArray sigArray, intsByteArray; - unsigned char intsarray[1]; - unsigned char sig[64]; - - int ret = secp256k1_schnorr_sign(ctx, sig, data, secKey, NULL, NULL); - - intsarray[0] = ret; - - retArray = (*env)->NewObjectArray(env, 2, - (*env)->FindClass(env, "[B"), - (*env)->NewByteArray(env, 1)); - - sigArray = (*env)->NewByteArray(env, 64); - (*env)->SetByteArrayRegion(env, sigArray, 0, 64, (jbyte*)sig); - (*env)->SetObjectArrayElement(env, retArray, 0, sigArray); - - intsByteArray = (*env)->NewByteArray(env, 1); - (*env)->SetByteArrayRegion(env, intsByteArray, 0, 1, (jbyte*)intsarray); - (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray); - - (void)classObject; - - return retArray; -} - -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdh - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen) -{ - secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l; - const unsigned char* secdata = (*env)->GetDirectBufferAddress(env, byteBufferObject); - const unsigned char* pubdata = (const unsigned char*) (secdata + 32); - - jobjectArray retArray; - jbyteArray outArray, intsByteArray; - unsigned char intsarray[1]; - secp256k1_pubkey pubkey; - unsigned char nonce_res[32]; - size_t outputLen = 32; - - int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pubdata, publen); - - if (ret) { - ret = secp256k1_ecdh( - ctx, - nonce_res, - &pubkey, - secdata - ); - } - - intsarray[0] = ret; - - retArray = (*env)->NewObjectArray(env, 2, - (*env)->FindClass(env, "[B"), - (*env)->NewByteArray(env, 1)); - - outArray = (*env)->NewByteArray(env, outputLen); - (*env)->SetByteArrayRegion(env, outArray, 0, 32, (jbyte*)nonce_res); - (*env)->SetObjectArrayElement(env, retArray, 0, outArray); - - intsByteArray = (*env)->NewByteArray(env, 1); - (*env)->SetByteArrayRegion(env, intsByteArray, 0, 1, (jbyte*)intsarray); - (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray); - - (void)classObject; - - return retArray; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_NativeSecp256k1.h b/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_NativeSecp256k1.h deleted file mode 100644 index 4125a1f..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_NativeSecp256k1.h +++ /dev/null @@ -1,127 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -#include "include/secp256k1.h" -/* Header for class org_bitcoin_NativeSecp256k1 */ - -#ifndef _Included_org_bitcoin_NativeSecp256k1 -#define _Included_org_bitcoin_NativeSecp256k1 -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_ctx_clone - * Signature: (J)J - */ -SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ctx_1clone - (JNIEnv *, jclass, jlong); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_context_randomize - * Signature: (Ljava/nio/ByteBuffer;J)I - */ -SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1context_1randomize - (JNIEnv *, jclass, jobject, jlong); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_privkey_tweak_add - * Signature: (Ljava/nio/ByteBuffer;J)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1add - (JNIEnv *, jclass, jobject, jlong); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_privkey_tweak_mul - * Signature: (Ljava/nio/ByteBuffer;J)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1mul - (JNIEnv *, jclass, jobject, jlong); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_pubkey_tweak_add - * Signature: (Ljava/nio/ByteBuffer;JI)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1add - (JNIEnv *, jclass, jobject, jlong, jint); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_pubkey_tweak_mul - * Signature: (Ljava/nio/ByteBuffer;JI)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1mul - (JNIEnv *, jclass, jobject, jlong, jint); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_destroy_context - * Signature: (J)V - */ -SECP256K1_API void JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1destroy_1context - (JNIEnv *, jclass, jlong); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_ecdsa_verify - * Signature: (Ljava/nio/ByteBuffer;JII)I - */ -SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1verify - (JNIEnv *, jclass, jobject, jlong, jint, jint); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_ecdsa_sign - * Signature: (Ljava/nio/ByteBuffer;J)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1sign - (JNIEnv *, jclass, jobject, jlong); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_ec_seckey_verify - * Signature: (Ljava/nio/ByteBuffer;J)I - */ -SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1seckey_1verify - (JNIEnv *, jclass, jobject, jlong); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_ec_pubkey_create - * Signature: (Ljava/nio/ByteBuffer;J)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1create - (JNIEnv *, jclass, jobject, jlong); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_ec_pubkey_parse - * Signature: (Ljava/nio/ByteBuffer;JI)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1parse - (JNIEnv *, jclass, jobject, jlong, jint); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_schnorr_sign - * Signature: (Ljava/nio/ByteBuffer;JI)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1schnorr_1sign - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l); - -/* - * Class: org_bitcoin_NativeSecp256k1 - * Method: secp256k1_ecdh - * Signature: (Ljava/nio/ByteBuffer;JI)[[B - */ -SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdh - (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_Secp256k1Context.c b/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_Secp256k1Context.c deleted file mode 100644 index a52939e..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_Secp256k1Context.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include "org_bitcoin_Secp256k1Context.h" -#include "include/secp256k1.h" - -SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context - (JNIEnv* env, jclass classObject) -{ - secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); - - (void)classObject;(void)env; - - return (uintptr_t)ctx; -} - diff --git a/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_Secp256k1Context.h b/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_Secp256k1Context.h deleted file mode 100644 index 0d2bc84..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/java/org_bitcoin_Secp256k1Context.h +++ /dev/null @@ -1,22 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -#include "include/secp256k1.h" -/* Header for class org_bitcoin_Secp256k1Context */ - -#ifndef _Included_org_bitcoin_Secp256k1Context -#define _Included_org_bitcoin_Secp256k1Context -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_bitcoin_Secp256k1Context - * Method: secp256k1_init_context - * Signature: ()J - */ -SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/Makefile.am.include b/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/Makefile.am.include deleted file mode 100644 index e3088b4..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/Makefile.am.include +++ /dev/null @@ -1,8 +0,0 @@ -include_HEADERS += include/secp256k1_ecdh.h -noinst_HEADERS += src/modules/ecdh/main_impl.h -noinst_HEADERS += src/modules/ecdh/tests_impl.h -if USE_BENCHMARK -noinst_PROGRAMS += bench_ecdh -bench_ecdh_SOURCES = src/bench_ecdh.c -bench_ecdh_LDADD = libsecp256k1.la $(SECP_LIBS) $(COMMON_LIB) -endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/main_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/main_impl.h deleted file mode 100644 index c23e4f8..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/main_impl.h +++ /dev/null @@ -1,54 +0,0 @@ -/********************************************************************** - * Copyright (c) 2015 Andrew Poelstra * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_MODULE_ECDH_MAIN_ -#define _SECP256K1_MODULE_ECDH_MAIN_ - -#include "include/secp256k1_ecdh.h" -#include "ecmult_const_impl.h" - -int secp256k1_ecdh(const secp256k1_context* ctx, unsigned char *result, const secp256k1_pubkey *point, const unsigned char *scalar) { - int ret = 0; - int overflow = 0; - secp256k1_gej res; - secp256k1_ge pt; - secp256k1_scalar s; - ARG_CHECK(result != NULL); - ARG_CHECK(point != NULL); - ARG_CHECK(scalar != NULL); - (void)ctx; - - secp256k1_pubkey_load(ctx, &pt, point); - secp256k1_scalar_set_b32(&s, scalar, &overflow); - if (overflow || secp256k1_scalar_is_zero(&s)) { - ret = 0; - } else { - unsigned char x[32]; - unsigned char y[1]; - secp256k1_sha256_t sha; - - secp256k1_ecmult_const(&res, &pt, &s); - secp256k1_ge_set_gej(&pt, &res); - /* Compute a hash of the point in compressed form - * Note we cannot use secp256k1_eckey_pubkey_serialize here since it does not - * expect its output to be secret and has a timing sidechannel. */ - secp256k1_fe_normalize(&pt.x); - secp256k1_fe_normalize(&pt.y); - secp256k1_fe_get_b32(x, &pt.x); - y[0] = 0x02 | secp256k1_fe_is_odd(&pt.y); - - secp256k1_sha256_initialize(&sha); - secp256k1_sha256_write(&sha, y, sizeof(y)); - secp256k1_sha256_write(&sha, x, sizeof(x)); - secp256k1_sha256_finalize(&sha, result); - ret = 1; - } - - secp256k1_scalar_clear(&s); - return ret; -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/tests_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/tests_impl.h deleted file mode 100644 index 7badc90..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/ecdh/tests_impl.h +++ /dev/null @@ -1,75 +0,0 @@ -/********************************************************************** - * Copyright (c) 2015 Andrew Poelstra * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_MODULE_ECDH_TESTS_ -#define _SECP256K1_MODULE_ECDH_TESTS_ - -void test_ecdh_generator_basepoint(void) { - unsigned char s_one[32] = { 0 }; - secp256k1_pubkey point[2]; - int i; - - s_one[31] = 1; - /* Check against pubkey creation when the basepoint is the generator */ - for (i = 0; i < 100; ++i) { - secp256k1_sha256_t sha; - unsigned char s_b32[32]; - unsigned char output_ecdh[32]; - unsigned char output_ser[32]; - unsigned char point_ser[33]; - size_t point_ser_len = sizeof(point_ser); - secp256k1_scalar s; - - random_scalar_order(&s); - secp256k1_scalar_get_b32(s_b32, &s); - - /* compute using ECDH function */ - CHECK(secp256k1_ec_pubkey_create(ctx, &point[0], s_one) == 1); - CHECK(secp256k1_ecdh(ctx, output_ecdh, &point[0], s_b32) == 1); - /* compute "explicitly" */ - CHECK(secp256k1_ec_pubkey_create(ctx, &point[1], s_b32) == 1); - CHECK(secp256k1_ec_pubkey_serialize(ctx, point_ser, &point_ser_len, &point[1], SECP256K1_EC_COMPRESSED) == 1); - CHECK(point_ser_len == sizeof(point_ser)); - secp256k1_sha256_initialize(&sha); - secp256k1_sha256_write(&sha, point_ser, point_ser_len); - secp256k1_sha256_finalize(&sha, output_ser); - /* compare */ - CHECK(memcmp(output_ecdh, output_ser, sizeof(output_ser)) == 0); - } -} - -void test_bad_scalar(void) { - unsigned char s_zero[32] = { 0 }; - unsigned char s_overflow[32] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, - 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41 - }; - unsigned char s_rand[32] = { 0 }; - unsigned char output[32]; - secp256k1_scalar rand; - secp256k1_pubkey point; - - /* Create random point */ - random_scalar_order(&rand); - secp256k1_scalar_get_b32(s_rand, &rand); - CHECK(secp256k1_ec_pubkey_create(ctx, &point, s_rand) == 1); - - /* Try to multiply it by bad values */ - CHECK(secp256k1_ecdh(ctx, output, &point, s_zero) == 0); - CHECK(secp256k1_ecdh(ctx, output, &point, s_overflow) == 0); - /* ...and a good one */ - s_overflow[31] -= 1; - CHECK(secp256k1_ecdh(ctx, output, &point, s_overflow) == 1); -} - -void run_ecdh_tests(void) { - test_ecdh_generator_basepoint(); - test_bad_scalar(); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/Makefile.am.include b/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/Makefile.am.include deleted file mode 100644 index bf23c26..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/Makefile.am.include +++ /dev/null @@ -1,8 +0,0 @@ -include_HEADERS += include/secp256k1_recovery.h -noinst_HEADERS += src/modules/recovery/main_impl.h -noinst_HEADERS += src/modules/recovery/tests_impl.h -if USE_BENCHMARK -noinst_PROGRAMS += bench_recover -bench_recover_SOURCES = src/bench_recover.c -bench_recover_LDADD = libsecp256k1.la $(SECP_LIBS) $(COMMON_LIB) -endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/main_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/main_impl.h deleted file mode 100644 index ec42f4b..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/main_impl.h +++ /dev/null @@ -1,193 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_MODULE_RECOVERY_MAIN_ -#define _SECP256K1_MODULE_RECOVERY_MAIN_ - -#include "include/secp256k1_recovery.h" - -static void secp256k1_ecdsa_recoverable_signature_load(const secp256k1_context* ctx, secp256k1_scalar* r, secp256k1_scalar* s, int* recid, const secp256k1_ecdsa_recoverable_signature* sig) { - (void)ctx; - if (sizeof(secp256k1_scalar) == 32) { - /* When the secp256k1_scalar type is exactly 32 byte, use its - * representation inside secp256k1_ecdsa_signature, as conversion is very fast. - * Note that secp256k1_ecdsa_signature_save must use the same representation. */ - memcpy(r, &sig->data[0], 32); - memcpy(s, &sig->data[32], 32); - } else { - secp256k1_scalar_set_b32(r, &sig->data[0], NULL); - secp256k1_scalar_set_b32(s, &sig->data[32], NULL); - } - *recid = sig->data[64]; -} - -static void secp256k1_ecdsa_recoverable_signature_save(secp256k1_ecdsa_recoverable_signature* sig, const secp256k1_scalar* r, const secp256k1_scalar* s, int recid) { - if (sizeof(secp256k1_scalar) == 32) { - memcpy(&sig->data[0], r, 32); - memcpy(&sig->data[32], s, 32); - } else { - secp256k1_scalar_get_b32(&sig->data[0], r); - secp256k1_scalar_get_b32(&sig->data[32], s); - } - sig->data[64] = recid; -} - -int secp256k1_ecdsa_recoverable_signature_parse_compact(const secp256k1_context* ctx, secp256k1_ecdsa_recoverable_signature* sig, const unsigned char *input64, int recid) { - secp256k1_scalar r, s; - int ret = 1; - int overflow = 0; - - (void)ctx; - ARG_CHECK(sig != NULL); - ARG_CHECK(input64 != NULL); - ARG_CHECK(recid >= 0 && recid <= 3); - - secp256k1_scalar_set_b32(&r, &input64[0], &overflow); - ret &= !overflow; - secp256k1_scalar_set_b32(&s, &input64[32], &overflow); - ret &= !overflow; - if (ret) { - secp256k1_ecdsa_recoverable_signature_save(sig, &r, &s, recid); - } else { - memset(sig, 0, sizeof(*sig)); - } - return ret; -} - -int secp256k1_ecdsa_recoverable_signature_serialize_compact(const secp256k1_context* ctx, unsigned char *output64, int *recid, const secp256k1_ecdsa_recoverable_signature* sig) { - secp256k1_scalar r, s; - - (void)ctx; - ARG_CHECK(output64 != NULL); - ARG_CHECK(sig != NULL); - ARG_CHECK(recid != NULL); - - secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, recid, sig); - secp256k1_scalar_get_b32(&output64[0], &r); - secp256k1_scalar_get_b32(&output64[32], &s); - return 1; -} - -int secp256k1_ecdsa_recoverable_signature_convert(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const secp256k1_ecdsa_recoverable_signature* sigin) { - secp256k1_scalar r, s; - int recid; - - (void)ctx; - ARG_CHECK(sig != NULL); - ARG_CHECK(sigin != NULL); - - secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, sigin); - secp256k1_ecdsa_signature_save(sig, &r, &s); - return 1; -} - -static int secp256k1_ecdsa_sig_recover(const secp256k1_ecmult_context *ctx, const secp256k1_scalar *sigr, const secp256k1_scalar* sigs, secp256k1_ge *pubkey, const secp256k1_scalar *message, int recid) { - unsigned char brx[32]; - secp256k1_fe fx; - secp256k1_ge x; - secp256k1_gej xj; - secp256k1_scalar rn, u1, u2; - secp256k1_gej qj; - int r; - - if (secp256k1_scalar_is_zero(sigr) || secp256k1_scalar_is_zero(sigs)) { - return 0; - } - - secp256k1_scalar_get_b32(brx, sigr); - r = secp256k1_fe_set_b32(&fx, brx); - (void)r; - VERIFY_CHECK(r); /* brx comes from a scalar, so is less than the order; certainly less than p */ - if (recid & 2) { - if (secp256k1_fe_cmp_var(&fx, &secp256k1_ecdsa_const_p_minus_order) >= 0) { - return 0; - } - secp256k1_fe_add(&fx, &secp256k1_ecdsa_const_order_as_fe); - } - if (!secp256k1_ge_set_xo_var(&x, &fx, recid & 1)) { - return 0; - } - secp256k1_gej_set_ge(&xj, &x); - secp256k1_scalar_inverse_var(&rn, sigr); - secp256k1_scalar_mul(&u1, &rn, message); - secp256k1_scalar_negate(&u1, &u1); - secp256k1_scalar_mul(&u2, &rn, sigs); - secp256k1_ecmult(ctx, &qj, &xj, &u2, &u1); - secp256k1_ge_set_gej_var(pubkey, &qj); - return !secp256k1_gej_is_infinity(&qj); -} - -int secp256k1_ecdsa_sign_recoverable(const secp256k1_context* ctx, secp256k1_ecdsa_recoverable_signature *signature, const unsigned char *msg32, const unsigned char *seckey, secp256k1_nonce_function noncefp, const void* noncedata) { - secp256k1_scalar r, s; - secp256k1_scalar sec, non, msg; - int recid; - int ret = 0; - int overflow = 0; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(signature != NULL); - ARG_CHECK(seckey != NULL); - if (noncefp == NULL) { - noncefp = secp256k1_nonce_function_default; - } - - secp256k1_scalar_set_b32(&sec, seckey, &overflow); - /* Fail if the secret key is invalid. */ - if (!overflow && !secp256k1_scalar_is_zero(&sec)) { - unsigned int count = 0; - secp256k1_scalar_set_b32(&msg, msg32, NULL); - while (1) { - unsigned char nonce32[32]; - ret = noncefp(nonce32, msg32, seckey, NULL, (void*)noncedata, count); - if (!ret) { - break; - } - secp256k1_scalar_set_b32(&non, nonce32, &overflow); - memset(nonce32, 0, 32); - if (!secp256k1_scalar_is_zero(&non) && !overflow) { - if (secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, &r, &s, &sec, &msg, &non, &recid)) { - break; - } - } - count++; - } - secp256k1_scalar_clear(&msg); - secp256k1_scalar_clear(&non); - secp256k1_scalar_clear(&sec); - } - if (ret) { - secp256k1_ecdsa_recoverable_signature_save(signature, &r, &s, recid); - } else { - memset(signature, 0, sizeof(*signature)); - } - return ret; -} - -int secp256k1_ecdsa_recover(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const secp256k1_ecdsa_recoverable_signature *signature, const unsigned char *msg32) { - secp256k1_ge q; - secp256k1_scalar r, s; - secp256k1_scalar m; - int recid; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(signature != NULL); - ARG_CHECK(pubkey != NULL); - - secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, signature); - ARG_CHECK(recid >= 0 && recid < 4); - secp256k1_scalar_set_b32(&m, msg32, NULL); - if (secp256k1_ecdsa_sig_recover(&ctx->ecmult_ctx, &r, &s, &q, &m, recid)) { - secp256k1_pubkey_save(pubkey, &q); - return 1; - } else { - memset(pubkey, 0, sizeof(*pubkey)); - return 0; - } -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/tests_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/tests_impl.h deleted file mode 100644 index 8932d5f..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/recovery/tests_impl.h +++ /dev/null @@ -1,250 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_MODULE_RECOVERY_TESTS_ -#define _SECP256K1_MODULE_RECOVERY_TESTS_ - -void test_ecdsa_recovery_end_to_end(void) { - unsigned char extra[32] = {0x00}; - unsigned char privkey[32]; - unsigned char message[32]; - secp256k1_ecdsa_signature signature[5]; - secp256k1_ecdsa_recoverable_signature rsignature[5]; - unsigned char sig[74]; - secp256k1_pubkey pubkey; - secp256k1_pubkey recpubkey; - int recid = 0; - - /* Generate a random key and message. */ - { - secp256k1_scalar msg, key; - random_scalar_order_test(&msg); - random_scalar_order_test(&key); - secp256k1_scalar_get_b32(privkey, &key); - secp256k1_scalar_get_b32(message, &msg); - } - - /* Construct and verify corresponding public key. */ - CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1); - - /* Serialize/parse compact and verify/recover. */ - extra[0] = 0; - CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[0], message, privkey, NULL, NULL) == 1); - CHECK(secp256k1_ecdsa_sign(ctx, &signature[0], message, privkey, NULL, NULL) == 1); - CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[4], message, privkey, NULL, NULL) == 1); - CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[1], message, privkey, NULL, extra) == 1); - extra[31] = 1; - CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[2], message, privkey, NULL, extra) == 1); - extra[31] = 0; - extra[0] = 1; - CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[3], message, privkey, NULL, extra) == 1); - CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(ctx, sig, &recid, &rsignature[4]) == 1); - CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1); - CHECK(memcmp(&signature[4], &signature[0], 64) == 0); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 1); - memset(&rsignature[4], 0, sizeof(rsignature[4])); - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1); - CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 1); - /* Parse compact (with recovery id) and recover. */ - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1); - CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 1); - CHECK(memcmp(&pubkey, &recpubkey, sizeof(pubkey)) == 0); - /* Serialize/destroy/parse signature and verify again. */ - CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(ctx, sig, &recid, &rsignature[4]) == 1); - sig[secp256k1_rand_bits(6)] += 1 + secp256k1_rand_int(255); - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1); - CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 0); - /* Recover again */ - CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 0 || - memcmp(&pubkey, &recpubkey, sizeof(pubkey)) != 0); -} - -/* Tests several edge cases. */ -void test_ecdsa_recovery_edge_cases(void) { - const unsigned char msg32[32] = { - 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', - 'a', ' ', 'v', 'e', 'r', 'y', ' ', 's', - 'e', 'c', 'r', 'e', 't', ' ', 'm', 'e', - 's', 's', 'a', 'g', 'e', '.', '.', '.' - }; - const unsigned char sig64[64] = { - /* Generated by signing the above message with nonce 'This is the nonce we will use...' - * and secret key 0 (which is not valid), resulting in recid 0. */ - 0x67, 0xCB, 0x28, 0x5F, 0x9C, 0xD1, 0x94, 0xE8, - 0x40, 0xD6, 0x29, 0x39, 0x7A, 0xF5, 0x56, 0x96, - 0x62, 0xFD, 0xE4, 0x46, 0x49, 0x99, 0x59, 0x63, - 0x17, 0x9A, 0x7D, 0xD1, 0x7B, 0xD2, 0x35, 0x32, - 0x4B, 0x1B, 0x7D, 0xF3, 0x4C, 0xE1, 0xF6, 0x8E, - 0x69, 0x4F, 0xF6, 0xF1, 0x1A, 0xC7, 0x51, 0xDD, - 0x7D, 0xD7, 0x3E, 0x38, 0x7E, 0xE4, 0xFC, 0x86, - 0x6E, 0x1B, 0xE8, 0xEC, 0xC7, 0xDD, 0x95, 0x57 - }; - secp256k1_pubkey pubkey; - /* signature (r,s) = (4,4), which can be recovered with all 4 recids. */ - const unsigned char sigb64[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - }; - secp256k1_pubkey pubkeyb; - secp256k1_ecdsa_recoverable_signature rsig; - secp256k1_ecdsa_signature sig; - int recid; - - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 0)); - CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32)); - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 1)); - CHECK(secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32)); - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 2)); - CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32)); - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 3)); - CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32)); - - for (recid = 0; recid < 4; recid++) { - int i; - int recid2; - /* (4,4) encoded in DER. */ - unsigned char sigbder[8] = {0x30, 0x06, 0x02, 0x01, 0x04, 0x02, 0x01, 0x04}; - unsigned char sigcder_zr[7] = {0x30, 0x05, 0x02, 0x00, 0x02, 0x01, 0x01}; - unsigned char sigcder_zs[7] = {0x30, 0x05, 0x02, 0x01, 0x01, 0x02, 0x00}; - unsigned char sigbderalt1[39] = { - 0x30, 0x25, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x04, - }; - unsigned char sigbderalt2[39] = { - 0x30, 0x25, 0x02, 0x01, 0x04, 0x02, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - }; - unsigned char sigbderalt3[40] = { - 0x30, 0x26, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x04, - }; - unsigned char sigbderalt4[40] = { - 0x30, 0x26, 0x02, 0x01, 0x04, 0x02, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - }; - /* (order + r,4) encoded in DER. */ - unsigned char sigbderlong[40] = { - 0x30, 0x26, 0x02, 0x21, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, - 0xE6, 0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E, - 0x8C, 0xD0, 0x36, 0x41, 0x45, 0x02, 0x01, 0x04 - }; - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigb64, recid) == 1); - CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 1); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 1); - for (recid2 = 0; recid2 < 4; recid2++) { - secp256k1_pubkey pubkey2b; - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigb64, recid2) == 1); - CHECK(secp256k1_ecdsa_recover(ctx, &pubkey2b, &rsig, msg32) == 1); - /* Verifying with (order + r,4) should always fail. */ - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderlong, sizeof(sigbderlong)) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0); - } - /* DER parsing tests. */ - /* Zero length r/s. */ - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder_zr, sizeof(sigcder_zr)) == 0); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder_zs, sizeof(sigcder_zs)) == 0); - /* Leading zeros. */ - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt1, sizeof(sigbderalt1)) == 0); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt2, sizeof(sigbderalt2)) == 0); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt3, sizeof(sigbderalt3)) == 0); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt4, sizeof(sigbderalt4)) == 0); - sigbderalt3[4] = 1; - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt3, sizeof(sigbderalt3)) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0); - sigbderalt4[7] = 1; - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt4, sizeof(sigbderalt4)) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0); - /* Damage signature. */ - sigbder[7]++; - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0); - sigbder[7]--; - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, 6) == 0); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder) - 1) == 0); - for(i = 0; i < 8; i++) { - int c; - unsigned char orig = sigbder[i]; - /*Try every single-byte change.*/ - for (c = 0; c < 256; c++) { - if (c == orig ) { - continue; - } - sigbder[i] = c; - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 0 || secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0); - } - sigbder[i] = orig; - } - } - - /* Test r/s equal to zero */ - { - /* (1,1) encoded in DER. */ - unsigned char sigcder[8] = {0x30, 0x06, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01}; - unsigned char sigc64[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - }; - secp256k1_pubkey pubkeyc; - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1); - CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyc, &rsig, msg32) == 1); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 1); - sigcder[4] = 0; - sigc64[31] = 0; - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1); - CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 0); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 0); - sigcder[4] = 1; - sigcder[7] = 0; - sigc64[31] = 1; - sigc64[63] = 0; - CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1); - CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 0); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 0); - } -} - -void run_recovery_tests(void) { - int i; - for (i = 0; i < 64*count; i++) { - test_ecdsa_recovery_end_to_end(); - } - test_ecdsa_recovery_edge_cases(); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/Makefile.am.include b/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/Makefile.am.include deleted file mode 100644 index f1af8e8..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/Makefile.am.include +++ /dev/null @@ -1,10 +0,0 @@ -include_HEADERS += include/secp256k1_schnorr.h -noinst_HEADERS += src/modules/schnorr/main_impl.h -noinst_HEADERS += src/modules/schnorr/schnorr.h -noinst_HEADERS += src/modules/schnorr/schnorr_impl.h -noinst_HEADERS += src/modules/schnorr/tests_impl.h -if USE_BENCHMARK -noinst_PROGRAMS += bench_schnorr_verify -bench_schnorr_verify_SOURCES = src/bench_schnorr_verify.c -bench_schnorr_verify_LDADD = libsecp256k1.la $(SECP_LIBS) $(COMMON_LIB) -endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/main_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/main_impl.h deleted file mode 100644 index fa176a1..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/main_impl.h +++ /dev/null @@ -1,164 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef SECP256K1_MODULE_SCHNORR_MAIN -#define SECP256K1_MODULE_SCHNORR_MAIN - -#include "include/secp256k1_schnorr.h" -#include "modules/schnorr/schnorr_impl.h" - -static void secp256k1_schnorr_msghash_sha256(unsigned char *h32, const unsigned char *r32, const unsigned char *msg32) { - secp256k1_sha256_t sha; - secp256k1_sha256_initialize(&sha); - secp256k1_sha256_write(&sha, r32, 32); - secp256k1_sha256_write(&sha, msg32, 32); - secp256k1_sha256_finalize(&sha, h32); -} - -static const unsigned char secp256k1_schnorr_algo16[17] = "Schnorr+SHA256 "; - -int secp256k1_schnorr_sign(const secp256k1_context* ctx, unsigned char *sig64, const unsigned char *msg32, const unsigned char *seckey, secp256k1_nonce_function noncefp, const void* noncedata) { - secp256k1_scalar sec, non; - int ret = 0; - int overflow = 0; - unsigned int count = 0; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(sig64 != NULL); - ARG_CHECK(seckey != NULL); - if (noncefp == NULL) { - noncefp = secp256k1_nonce_function_default; - } - - secp256k1_scalar_set_b32(&sec, seckey, NULL); - while (1) { - unsigned char nonce32[32]; - ret = noncefp(nonce32, msg32, seckey, secp256k1_schnorr_algo16, (void*)noncedata, count); - if (!ret) { - break; - } - secp256k1_scalar_set_b32(&non, nonce32, &overflow); - memset(nonce32, 0, 32); - if (!secp256k1_scalar_is_zero(&non) && !overflow) { - if (secp256k1_schnorr_sig_sign(&ctx->ecmult_gen_ctx, sig64, &sec, &non, NULL, secp256k1_schnorr_msghash_sha256, msg32)) { - break; - } - } - count++; - } - if (!ret) { - memset(sig64, 0, 64); - } - secp256k1_scalar_clear(&non); - secp256k1_scalar_clear(&sec); - return ret; -} - -int secp256k1_schnorr_verify(const secp256k1_context* ctx, const unsigned char *sig64, const unsigned char *msg32, const secp256k1_pubkey *pubkey) { - secp256k1_ge q; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(sig64 != NULL); - ARG_CHECK(pubkey != NULL); - - secp256k1_pubkey_load(ctx, &q, pubkey); - return secp256k1_schnorr_sig_verify(&ctx->ecmult_ctx, sig64, &q, secp256k1_schnorr_msghash_sha256, msg32); -} - -int secp256k1_schnorr_recover(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *sig64, const unsigned char *msg32) { - secp256k1_ge q; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(sig64 != NULL); - ARG_CHECK(pubkey != NULL); - - if (secp256k1_schnorr_sig_recover(&ctx->ecmult_ctx, sig64, &q, secp256k1_schnorr_msghash_sha256, msg32)) { - secp256k1_pubkey_save(pubkey, &q); - return 1; - } else { - memset(pubkey, 0, sizeof(*pubkey)); - return 0; - } -} - -int secp256k1_schnorr_generate_nonce_pair(const secp256k1_context* ctx, secp256k1_pubkey *pubnonce, unsigned char *privnonce32, const unsigned char *sec32, const unsigned char *msg32, secp256k1_nonce_function noncefp, const void* noncedata) { - int count = 0; - int ret = 1; - secp256k1_gej Qj; - secp256k1_ge Q; - secp256k1_scalar sec; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(sec32 != NULL); - ARG_CHECK(pubnonce != NULL); - ARG_CHECK(privnonce32 != NULL); - - if (noncefp == NULL) { - noncefp = secp256k1_nonce_function_default; - } - - do { - int overflow; - ret = noncefp(privnonce32, sec32, msg32, secp256k1_schnorr_algo16, (void*)noncedata, count++); - if (!ret) { - break; - } - secp256k1_scalar_set_b32(&sec, privnonce32, &overflow); - if (overflow || secp256k1_scalar_is_zero(&sec)) { - continue; - } - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &Qj, &sec); - secp256k1_ge_set_gej(&Q, &Qj); - - secp256k1_pubkey_save(pubnonce, &Q); - break; - } while(1); - - secp256k1_scalar_clear(&sec); - if (!ret) { - memset(pubnonce, 0, sizeof(*pubnonce)); - } - return ret; -} - -int secp256k1_schnorr_partial_sign(const secp256k1_context* ctx, unsigned char *sig64, const unsigned char *msg32, const unsigned char *sec32, const secp256k1_pubkey *pubnonce_others, const unsigned char *secnonce32) { - int overflow = 0; - secp256k1_scalar sec, non; - secp256k1_ge pubnon; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(sig64 != NULL); - ARG_CHECK(sec32 != NULL); - ARG_CHECK(secnonce32 != NULL); - ARG_CHECK(pubnonce_others != NULL); - - secp256k1_scalar_set_b32(&sec, sec32, &overflow); - if (overflow || secp256k1_scalar_is_zero(&sec)) { - return -1; - } - secp256k1_scalar_set_b32(&non, secnonce32, &overflow); - if (overflow || secp256k1_scalar_is_zero(&non)) { - return -1; - } - secp256k1_pubkey_load(ctx, &pubnon, pubnonce_others); - return secp256k1_schnorr_sig_sign(&ctx->ecmult_gen_ctx, sig64, &sec, &non, &pubnon, secp256k1_schnorr_msghash_sha256, msg32); -} - -int secp256k1_schnorr_partial_combine(const secp256k1_context* ctx, unsigned char *sig64, const unsigned char * const *sig64sin, size_t n) { - ARG_CHECK(sig64 != NULL); - ARG_CHECK(n >= 1); - ARG_CHECK(sig64sin != NULL); - return secp256k1_schnorr_sig_combine(sig64, n, sig64sin); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/schnorr.h b/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/schnorr.h deleted file mode 100644 index de18147..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/schnorr.h +++ /dev/null @@ -1,20 +0,0 @@ -/*********************************************************************** - * Copyright (c) 2014-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php. * - ***********************************************************************/ - -#ifndef _SECP256K1_MODULE_SCHNORR_H_ -#define _SECP256K1_MODULE_SCHNORR_H_ - -#include "scalar.h" -#include "group.h" - -typedef void (*secp256k1_schnorr_msghash)(unsigned char *h32, const unsigned char *r32, const unsigned char *msg32); - -static int secp256k1_schnorr_sig_sign(const secp256k1_ecmult_gen_context* ctx, unsigned char *sig64, const secp256k1_scalar *key, const secp256k1_scalar *nonce, const secp256k1_ge *pubnonce, secp256k1_schnorr_msghash hash, const unsigned char *msg32); -static int secp256k1_schnorr_sig_verify(const secp256k1_ecmult_context* ctx, const unsigned char *sig64, const secp256k1_ge *pubkey, secp256k1_schnorr_msghash hash, const unsigned char *msg32); -static int secp256k1_schnorr_sig_recover(const secp256k1_ecmult_context* ctx, const unsigned char *sig64, secp256k1_ge *pubkey, secp256k1_schnorr_msghash hash, const unsigned char *msg32); -static int secp256k1_schnorr_sig_combine(unsigned char *sig64, size_t n, const unsigned char * const *sig64ins); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/schnorr_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/schnorr_impl.h deleted file mode 100644 index e13ab6d..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/schnorr_impl.h +++ /dev/null @@ -1,207 +0,0 @@ -/*********************************************************************** - * Copyright (c) 2014-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php. * - ***********************************************************************/ - -#ifndef _SECP256K1_SCHNORR_IMPL_H_ -#define _SECP256K1_SCHNORR_IMPL_H_ - -#include - -#include "schnorr.h" -#include "num.h" -#include "field.h" -#include "group.h" -#include "ecmult.h" -#include "ecmult_gen.h" - -/** - * Custom Schnorr-based signature scheme. They support multiparty signing, public key - * recovery and batch validation. - * - * Rationale for verifying R's y coordinate: - * In order to support batch validation and public key recovery, the full R point must - * be known to verifiers, rather than just its x coordinate. In order to not risk - * being more strict in batch validation than normal validation, validators must be - * required to reject signatures with incorrect y coordinate. This is only possible - * by including a (relatively slow) field inverse, or a field square root. However, - * batch validation offers potentially much higher benefits than this cost. - * - * Rationale for having an implicit y coordinate oddness: - * If we commit to having the full R point known to verifiers, there are two mechanism. - * Either include its oddness in the signature, or give it an implicit fixed value. - * As the R y coordinate can be flipped by a simple negation of the nonce, we choose the - * latter, as it comes with nearly zero impact on signing or validation performance, and - * saves a byte in the signature. - * - * Signing: - * Inputs: 32-byte message m, 32-byte scalar key x (!=0), 32-byte scalar nonce k (!=0) - * - * Compute point R = k * G. Reject nonce if R's y coordinate is odd (or negate nonce). - * Compute 32-byte r, the serialization of R's x coordinate. - * Compute scalar h = Hash(r || m). Reject nonce if h == 0 or h >= order. - * Compute scalar s = k - h * x. - * The signature is (r, s). - * - * - * Verification: - * Inputs: 32-byte message m, public key point Q, signature: (32-byte r, scalar s) - * - * Signature is invalid if s >= order. - * Signature is invalid if r >= p. - * Compute scalar h = Hash(r || m). Signature is invalid if h == 0 or h >= order. - * Option 1 (faster for single verification): - * Compute point R = h * Q + s * G. Signature is invalid if R is infinity or R's y coordinate is odd. - * Signature is valid if the serialization of R's x coordinate equals r. - * Option 2 (allows batch validation and pubkey recovery): - * Decompress x coordinate r into point R, with odd y coordinate. Fail if R is not on the curve. - * Signature is valid if R + h * Q + s * G == 0. - */ - -static int secp256k1_schnorr_sig_sign(const secp256k1_ecmult_gen_context* ctx, unsigned char *sig64, const secp256k1_scalar *key, const secp256k1_scalar *nonce, const secp256k1_ge *pubnonce, secp256k1_schnorr_msghash hash, const unsigned char *msg32) { - secp256k1_gej Rj; - secp256k1_ge Ra; - unsigned char h32[32]; - secp256k1_scalar h, s; - int overflow; - secp256k1_scalar n; - - if (secp256k1_scalar_is_zero(key) || secp256k1_scalar_is_zero(nonce)) { - return 0; - } - n = *nonce; - - secp256k1_ecmult_gen(ctx, &Rj, &n); - if (pubnonce != NULL) { - secp256k1_gej_add_ge(&Rj, &Rj, pubnonce); - } - secp256k1_ge_set_gej(&Ra, &Rj); - secp256k1_fe_normalize(&Ra.y); - if (secp256k1_fe_is_odd(&Ra.y)) { - /* R's y coordinate is odd, which is not allowed (see rationale above). - Force it to be even by negating the nonce. Note that this even works - for multiparty signing, as the R point is known to all participants, - which can all decide to flip the sign in unison, resulting in the - overall R point to be negated too. */ - secp256k1_scalar_negate(&n, &n); - } - secp256k1_fe_normalize(&Ra.x); - secp256k1_fe_get_b32(sig64, &Ra.x); - hash(h32, sig64, msg32); - overflow = 0; - secp256k1_scalar_set_b32(&h, h32, &overflow); - if (overflow || secp256k1_scalar_is_zero(&h)) { - secp256k1_scalar_clear(&n); - return 0; - } - secp256k1_scalar_mul(&s, &h, key); - secp256k1_scalar_negate(&s, &s); - secp256k1_scalar_add(&s, &s, &n); - secp256k1_scalar_clear(&n); - secp256k1_scalar_get_b32(sig64 + 32, &s); - return 1; -} - -static int secp256k1_schnorr_sig_verify(const secp256k1_ecmult_context* ctx, const unsigned char *sig64, const secp256k1_ge *pubkey, secp256k1_schnorr_msghash hash, const unsigned char *msg32) { - secp256k1_gej Qj, Rj; - secp256k1_ge Ra; - secp256k1_fe Rx; - secp256k1_scalar h, s; - unsigned char hh[32]; - int overflow; - - if (secp256k1_ge_is_infinity(pubkey)) { - return 0; - } - hash(hh, sig64, msg32); - overflow = 0; - secp256k1_scalar_set_b32(&h, hh, &overflow); - if (overflow || secp256k1_scalar_is_zero(&h)) { - return 0; - } - overflow = 0; - secp256k1_scalar_set_b32(&s, sig64 + 32, &overflow); - if (overflow) { - return 0; - } - if (!secp256k1_fe_set_b32(&Rx, sig64)) { - return 0; - } - secp256k1_gej_set_ge(&Qj, pubkey); - secp256k1_ecmult(ctx, &Rj, &Qj, &h, &s); - if (secp256k1_gej_is_infinity(&Rj)) { - return 0; - } - secp256k1_ge_set_gej_var(&Ra, &Rj); - secp256k1_fe_normalize_var(&Ra.y); - if (secp256k1_fe_is_odd(&Ra.y)) { - return 0; - } - return secp256k1_fe_equal_var(&Rx, &Ra.x); -} - -static int secp256k1_schnorr_sig_recover(const secp256k1_ecmult_context* ctx, const unsigned char *sig64, secp256k1_ge *pubkey, secp256k1_schnorr_msghash hash, const unsigned char *msg32) { - secp256k1_gej Qj, Rj; - secp256k1_ge Ra; - secp256k1_fe Rx; - secp256k1_scalar h, s; - unsigned char hh[32]; - int overflow; - - hash(hh, sig64, msg32); - overflow = 0; - secp256k1_scalar_set_b32(&h, hh, &overflow); - if (overflow || secp256k1_scalar_is_zero(&h)) { - return 0; - } - overflow = 0; - secp256k1_scalar_set_b32(&s, sig64 + 32, &overflow); - if (overflow) { - return 0; - } - if (!secp256k1_fe_set_b32(&Rx, sig64)) { - return 0; - } - if (!secp256k1_ge_set_xo_var(&Ra, &Rx, 0)) { - return 0; - } - secp256k1_gej_set_ge(&Rj, &Ra); - secp256k1_scalar_inverse_var(&h, &h); - secp256k1_scalar_negate(&s, &s); - secp256k1_scalar_mul(&s, &s, &h); - secp256k1_ecmult(ctx, &Qj, &Rj, &h, &s); - if (secp256k1_gej_is_infinity(&Qj)) { - return 0; - } - secp256k1_ge_set_gej(pubkey, &Qj); - return 1; -} - -static int secp256k1_schnorr_sig_combine(unsigned char *sig64, size_t n, const unsigned char * const *sig64ins) { - secp256k1_scalar s = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0); - size_t i; - for (i = 0; i < n; i++) { - secp256k1_scalar si; - int overflow; - secp256k1_scalar_set_b32(&si, sig64ins[i] + 32, &overflow); - if (overflow) { - return -1; - } - if (i) { - if (memcmp(sig64ins[i - 1], sig64ins[i], 32) != 0) { - return -1; - } - } - secp256k1_scalar_add(&s, &s, &si); - } - if (secp256k1_scalar_is_zero(&s)) { - return 0; - } - memcpy(sig64, sig64ins[0], 32); - secp256k1_scalar_get_b32(sig64 + 32, &s); - secp256k1_scalar_clear(&s); - return 1; -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/tests_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/tests_impl.h deleted file mode 100644 index 5bd14a0..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/modules/schnorr/tests_impl.h +++ /dev/null @@ -1,175 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef SECP256K1_MODULE_SCHNORR_TESTS -#define SECP256K1_MODULE_SCHNORR_TESTS - -#include "include/secp256k1_schnorr.h" - -void test_schnorr_end_to_end(void) { - unsigned char privkey[32]; - unsigned char message[32]; - unsigned char schnorr_signature[64]; - secp256k1_pubkey pubkey, recpubkey; - - /* Generate a random key and message. */ - { - secp256k1_scalar key; - random_scalar_order_test(&key); - secp256k1_scalar_get_b32(privkey, &key); - secp256k1_rand256_test(message); - } - - /* Construct and verify corresponding public key. */ - CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1); - - /* Schnorr sign. */ - CHECK(secp256k1_schnorr_sign(ctx, schnorr_signature, message, privkey, NULL, NULL) == 1); - CHECK(secp256k1_schnorr_verify(ctx, schnorr_signature, message, &pubkey) == 1); - CHECK(secp256k1_schnorr_recover(ctx, &recpubkey, schnorr_signature, message) == 1); - CHECK(memcmp(&pubkey, &recpubkey, sizeof(pubkey)) == 0); - /* Destroy signature and verify again. */ - schnorr_signature[secp256k1_rand_bits(6)] += 1 + secp256k1_rand_int(255); - CHECK(secp256k1_schnorr_verify(ctx, schnorr_signature, message, &pubkey) == 0); - CHECK(secp256k1_schnorr_recover(ctx, &recpubkey, schnorr_signature, message) != 1 || - memcmp(&pubkey, &recpubkey, sizeof(pubkey)) != 0); -} - -/** Horribly broken hash function. Do not use for anything but tests. */ -void test_schnorr_hash(unsigned char *h32, const unsigned char *r32, const unsigned char *msg32) { - int i; - for (i = 0; i < 32; i++) { - h32[i] = r32[i] ^ msg32[i]; - } -} - -void test_schnorr_sign_verify(void) { - unsigned char msg32[32]; - unsigned char sig64[3][64]; - secp256k1_gej pubkeyj[3]; - secp256k1_ge pubkey[3]; - secp256k1_scalar nonce[3], key[3]; - int i = 0; - int k; - - secp256k1_rand256_test(msg32); - - for (k = 0; k < 3; k++) { - random_scalar_order_test(&key[k]); - - do { - random_scalar_order_test(&nonce[k]); - if (secp256k1_schnorr_sig_sign(&ctx->ecmult_gen_ctx, sig64[k], &key[k], &nonce[k], NULL, &test_schnorr_hash, msg32)) { - break; - } - } while(1); - - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pubkeyj[k], &key[k]); - secp256k1_ge_set_gej_var(&pubkey[k], &pubkeyj[k]); - CHECK(secp256k1_schnorr_sig_verify(&ctx->ecmult_ctx, sig64[k], &pubkey[k], &test_schnorr_hash, msg32)); - - for (i = 0; i < 4; i++) { - int pos = secp256k1_rand_bits(6); - int mod = 1 + secp256k1_rand_int(255); - sig64[k][pos] ^= mod; - CHECK(secp256k1_schnorr_sig_verify(&ctx->ecmult_ctx, sig64[k], &pubkey[k], &test_schnorr_hash, msg32) == 0); - sig64[k][pos] ^= mod; - } - } -} - -void test_schnorr_threshold(void) { - unsigned char msg[32]; - unsigned char sec[5][32]; - secp256k1_pubkey pub[5]; - unsigned char nonce[5][32]; - secp256k1_pubkey pubnonce[5]; - unsigned char sig[5][64]; - const unsigned char* sigs[5]; - unsigned char allsig[64]; - const secp256k1_pubkey* pubs[5]; - secp256k1_pubkey allpub; - int n, i; - int damage; - int ret = 0; - - damage = secp256k1_rand_bits(1) ? (1 + secp256k1_rand_int(4)) : 0; - secp256k1_rand256_test(msg); - n = 2 + secp256k1_rand_int(4); - for (i = 0; i < n; i++) { - do { - secp256k1_rand256_test(sec[i]); - } while (!secp256k1_ec_seckey_verify(ctx, sec[i])); - CHECK(secp256k1_ec_pubkey_create(ctx, &pub[i], sec[i])); - CHECK(secp256k1_schnorr_generate_nonce_pair(ctx, &pubnonce[i], nonce[i], msg, sec[i], NULL, NULL)); - pubs[i] = &pub[i]; - } - if (damage == 1) { - nonce[secp256k1_rand_int(n)][secp256k1_rand_int(32)] ^= 1 + secp256k1_rand_int(255); - } else if (damage == 2) { - sec[secp256k1_rand_int(n)][secp256k1_rand_int(32)] ^= 1 + secp256k1_rand_int(255); - } - for (i = 0; i < n; i++) { - secp256k1_pubkey allpubnonce; - const secp256k1_pubkey *pubnonces[4]; - int j; - for (j = 0; j < i; j++) { - pubnonces[j] = &pubnonce[j]; - } - for (j = i + 1; j < n; j++) { - pubnonces[j - 1] = &pubnonce[j]; - } - CHECK(secp256k1_ec_pubkey_combine(ctx, &allpubnonce, pubnonces, n - 1)); - ret |= (secp256k1_schnorr_partial_sign(ctx, sig[i], msg, sec[i], &allpubnonce, nonce[i]) != 1) * 1; - sigs[i] = sig[i]; - } - if (damage == 3) { - sig[secp256k1_rand_int(n)][secp256k1_rand_bits(6)] ^= 1 + secp256k1_rand_int(255); - } - ret |= (secp256k1_ec_pubkey_combine(ctx, &allpub, pubs, n) != 1) * 2; - if ((ret & 1) == 0) { - ret |= (secp256k1_schnorr_partial_combine(ctx, allsig, sigs, n) != 1) * 4; - } - if (damage == 4) { - allsig[secp256k1_rand_int(32)] ^= 1 + secp256k1_rand_int(255); - } - if ((ret & 7) == 0) { - ret |= (secp256k1_schnorr_verify(ctx, allsig, msg, &allpub) != 1) * 8; - } - CHECK((ret == 0) == (damage == 0)); -} - -void test_schnorr_recovery(void) { - unsigned char msg32[32]; - unsigned char sig64[64]; - secp256k1_ge Q; - - secp256k1_rand256_test(msg32); - secp256k1_rand256_test(sig64); - secp256k1_rand256_test(sig64 + 32); - if (secp256k1_schnorr_sig_recover(&ctx->ecmult_ctx, sig64, &Q, &test_schnorr_hash, msg32) == 1) { - CHECK(secp256k1_schnorr_sig_verify(&ctx->ecmult_ctx, sig64, &Q, &test_schnorr_hash, msg32) == 1); - } -} - -void run_schnorr_tests(void) { - int i; - for (i = 0; i < 32*count; i++) { - test_schnorr_end_to_end(); - } - for (i = 0; i < 32 * count; i++) { - test_schnorr_sign_verify(); - } - for (i = 0; i < 16 * count; i++) { - test_schnorr_recovery(); - } - for (i = 0; i < 10 * count; i++) { - test_schnorr_threshold(); - } -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/num.h b/node_modules/secp256k1/src/secp256k1-src/src/num.h deleted file mode 100644 index 7bb9c5b..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/num.h +++ /dev/null @@ -1,74 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_NUM_ -#define _SECP256K1_NUM_ - -#ifndef USE_NUM_NONE - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#if defined(USE_NUM_GMP) -#include "num_gmp.h" -#else -#error "Please select num implementation" -#endif - -/** Copy a number. */ -static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a); - -/** Convert a number's absolute value to a binary big-endian string. - * There must be enough place. */ -static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a); - -/** Set a number to the value of a binary big-endian string. */ -static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen); - -/** Compute a modular inverse. The input must be less than the modulus. */ -static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m); - -/** Compute the jacobi symbol (a|b). b must be positive and odd. */ -static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b); - -/** Compare the absolute value of two numbers. */ -static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b); - -/** Test whether two number are equal (including sign). */ -static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b); - -/** Add two (signed) numbers. */ -static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b); - -/** Subtract two (signed) numbers. */ -static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b); - -/** Multiply two (signed) numbers. */ -static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b); - -/** Replace a number by its remainder modulo m. M's sign is ignored. The result is a number between 0 and m-1, - even if r was negative. */ -static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m); - -/** Right-shift the passed number by bits bits. */ -static void secp256k1_num_shift(secp256k1_num *r, int bits); - -/** Check whether a number is zero. */ -static int secp256k1_num_is_zero(const secp256k1_num *a); - -/** Check whether a number is one. */ -static int secp256k1_num_is_one(const secp256k1_num *a); - -/** Check whether a number is strictly negative. */ -static int secp256k1_num_is_neg(const secp256k1_num *a); - -/** Change a number's sign. */ -static void secp256k1_num_negate(secp256k1_num *r); - -#endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/num_gmp.h b/node_modules/secp256k1/src/secp256k1-src/src/num_gmp.h deleted file mode 100644 index 7dd8130..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/num_gmp.h +++ /dev/null @@ -1,20 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_NUM_REPR_ -#define _SECP256K1_NUM_REPR_ - -#include - -#define NUM_LIMBS ((256+GMP_NUMB_BITS-1)/GMP_NUMB_BITS) - -typedef struct { - mp_limb_t data[2*NUM_LIMBS]; - int neg; - int limbs; -} secp256k1_num; - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/num_gmp_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/num_gmp_impl.h deleted file mode 100644 index 3a46495..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/num_gmp_impl.h +++ /dev/null @@ -1,288 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_NUM_REPR_IMPL_H_ -#define _SECP256K1_NUM_REPR_IMPL_H_ - -#include -#include -#include - -#include "util.h" -#include "num.h" - -#ifdef VERIFY -static void secp256k1_num_sanity(const secp256k1_num *a) { - VERIFY_CHECK(a->limbs == 1 || (a->limbs > 1 && a->data[a->limbs-1] != 0)); -} -#else -#define secp256k1_num_sanity(a) do { } while(0) -#endif - -static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a) { - *r = *a; -} - -static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a) { - unsigned char tmp[65]; - int len = 0; - int shift = 0; - if (a->limbs>1 || a->data[0] != 0) { - len = mpn_get_str(tmp, 256, (mp_limb_t*)a->data, a->limbs); - } - while (shift < len && tmp[shift] == 0) shift++; - VERIFY_CHECK(len-shift <= (int)rlen); - memset(r, 0, rlen - len + shift); - if (len > shift) { - memcpy(r + rlen - len + shift, tmp + shift, len - shift); - } - memset(tmp, 0, sizeof(tmp)); -} - -static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen) { - int len; - VERIFY_CHECK(alen > 0); - VERIFY_CHECK(alen <= 64); - len = mpn_set_str(r->data, a, alen, 256); - if (len == 0) { - r->data[0] = 0; - len = 1; - } - VERIFY_CHECK(len <= NUM_LIMBS*2); - r->limbs = len; - r->neg = 0; - while (r->limbs > 1 && r->data[r->limbs-1]==0) { - r->limbs--; - } -} - -static void secp256k1_num_add_abs(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) { - mp_limb_t c = mpn_add(r->data, a->data, a->limbs, b->data, b->limbs); - r->limbs = a->limbs; - if (c != 0) { - VERIFY_CHECK(r->limbs < 2*NUM_LIMBS); - r->data[r->limbs++] = c; - } -} - -static void secp256k1_num_sub_abs(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) { - mp_limb_t c = mpn_sub(r->data, a->data, a->limbs, b->data, b->limbs); - (void)c; - VERIFY_CHECK(c == 0); - r->limbs = a->limbs; - while (r->limbs > 1 && r->data[r->limbs-1]==0) { - r->limbs--; - } -} - -static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m) { - secp256k1_num_sanity(r); - secp256k1_num_sanity(m); - - if (r->limbs >= m->limbs) { - mp_limb_t t[2*NUM_LIMBS]; - mpn_tdiv_qr(t, r->data, 0, r->data, r->limbs, m->data, m->limbs); - memset(t, 0, sizeof(t)); - r->limbs = m->limbs; - while (r->limbs > 1 && r->data[r->limbs-1]==0) { - r->limbs--; - } - } - - if (r->neg && (r->limbs > 1 || r->data[0] != 0)) { - secp256k1_num_sub_abs(r, m, r); - r->neg = 0; - } -} - -static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m) { - int i; - mp_limb_t g[NUM_LIMBS+1]; - mp_limb_t u[NUM_LIMBS+1]; - mp_limb_t v[NUM_LIMBS+1]; - mp_size_t sn; - mp_size_t gn; - secp256k1_num_sanity(a); - secp256k1_num_sanity(m); - - /** mpn_gcdext computes: (G,S) = gcdext(U,V), where - * * G = gcd(U,V) - * * G = U*S + V*T - * * U has equal or more limbs than V, and V has no padding - * If we set U to be (a padded version of) a, and V = m: - * G = a*S + m*T - * G = a*S mod m - * Assuming G=1: - * S = 1/a mod m - */ - VERIFY_CHECK(m->limbs <= NUM_LIMBS); - VERIFY_CHECK(m->data[m->limbs-1] != 0); - for (i = 0; i < m->limbs; i++) { - u[i] = (i < a->limbs) ? a->data[i] : 0; - v[i] = m->data[i]; - } - sn = NUM_LIMBS+1; - gn = mpn_gcdext(g, r->data, &sn, u, m->limbs, v, m->limbs); - (void)gn; - VERIFY_CHECK(gn == 1); - VERIFY_CHECK(g[0] == 1); - r->neg = a->neg ^ m->neg; - if (sn < 0) { - mpn_sub(r->data, m->data, m->limbs, r->data, -sn); - r->limbs = m->limbs; - while (r->limbs > 1 && r->data[r->limbs-1]==0) { - r->limbs--; - } - } else { - r->limbs = sn; - } - memset(g, 0, sizeof(g)); - memset(u, 0, sizeof(u)); - memset(v, 0, sizeof(v)); -} - -static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b) { - int ret; - mpz_t ga, gb; - secp256k1_num_sanity(a); - secp256k1_num_sanity(b); - VERIFY_CHECK(!b->neg && (b->limbs > 0) && (b->data[0] & 1)); - - mpz_inits(ga, gb, NULL); - - mpz_import(gb, b->limbs, -1, sizeof(mp_limb_t), 0, 0, b->data); - mpz_import(ga, a->limbs, -1, sizeof(mp_limb_t), 0, 0, a->data); - if (a->neg) { - mpz_neg(ga, ga); - } - - ret = mpz_jacobi(ga, gb); - - mpz_clears(ga, gb, NULL); - - return ret; -} - -static int secp256k1_num_is_one(const secp256k1_num *a) { - return (a->limbs == 1 && a->data[0] == 1); -} - -static int secp256k1_num_is_zero(const secp256k1_num *a) { - return (a->limbs == 1 && a->data[0] == 0); -} - -static int secp256k1_num_is_neg(const secp256k1_num *a) { - return (a->limbs > 1 || a->data[0] != 0) && a->neg; -} - -static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b) { - if (a->limbs > b->limbs) { - return 1; - } - if (a->limbs < b->limbs) { - return -1; - } - return mpn_cmp(a->data, b->data, a->limbs); -} - -static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b) { - if (a->limbs > b->limbs) { - return 0; - } - if (a->limbs < b->limbs) { - return 0; - } - if ((a->neg && !secp256k1_num_is_zero(a)) != (b->neg && !secp256k1_num_is_zero(b))) { - return 0; - } - return mpn_cmp(a->data, b->data, a->limbs) == 0; -} - -static void secp256k1_num_subadd(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b, int bneg) { - if (!(b->neg ^ bneg ^ a->neg)) { /* a and b have the same sign */ - r->neg = a->neg; - if (a->limbs >= b->limbs) { - secp256k1_num_add_abs(r, a, b); - } else { - secp256k1_num_add_abs(r, b, a); - } - } else { - if (secp256k1_num_cmp(a, b) > 0) { - r->neg = a->neg; - secp256k1_num_sub_abs(r, a, b); - } else { - r->neg = b->neg ^ bneg; - secp256k1_num_sub_abs(r, b, a); - } - } -} - -static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) { - secp256k1_num_sanity(a); - secp256k1_num_sanity(b); - secp256k1_num_subadd(r, a, b, 0); -} - -static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) { - secp256k1_num_sanity(a); - secp256k1_num_sanity(b); - secp256k1_num_subadd(r, a, b, 1); -} - -static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) { - mp_limb_t tmp[2*NUM_LIMBS+1]; - secp256k1_num_sanity(a); - secp256k1_num_sanity(b); - - VERIFY_CHECK(a->limbs + b->limbs <= 2*NUM_LIMBS+1); - if ((a->limbs==1 && a->data[0]==0) || (b->limbs==1 && b->data[0]==0)) { - r->limbs = 1; - r->neg = 0; - r->data[0] = 0; - return; - } - if (a->limbs >= b->limbs) { - mpn_mul(tmp, a->data, a->limbs, b->data, b->limbs); - } else { - mpn_mul(tmp, b->data, b->limbs, a->data, a->limbs); - } - r->limbs = a->limbs + b->limbs; - if (r->limbs > 1 && tmp[r->limbs - 1]==0) { - r->limbs--; - } - VERIFY_CHECK(r->limbs <= 2*NUM_LIMBS); - mpn_copyi(r->data, tmp, r->limbs); - r->neg = a->neg ^ b->neg; - memset(tmp, 0, sizeof(tmp)); -} - -static void secp256k1_num_shift(secp256k1_num *r, int bits) { - if (bits % GMP_NUMB_BITS) { - /* Shift within limbs. */ - mpn_rshift(r->data, r->data, r->limbs, bits % GMP_NUMB_BITS); - } - if (bits >= GMP_NUMB_BITS) { - int i; - /* Shift full limbs. */ - for (i = 0; i < r->limbs; i++) { - int index = i + (bits / GMP_NUMB_BITS); - if (index < r->limbs && index < 2*NUM_LIMBS) { - r->data[i] = r->data[index]; - } else { - r->data[i] = 0; - } - } - } - while (r->limbs>1 && r->data[r->limbs-1]==0) { - r->limbs--; - } -} - -static void secp256k1_num_negate(secp256k1_num *r) { - r->neg ^= 1; -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/num_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/num_impl.h deleted file mode 100644 index 0b0e3a0..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/num_impl.h +++ /dev/null @@ -1,24 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_NUM_IMPL_H_ -#define _SECP256K1_NUM_IMPL_H_ - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#include "num.h" - -#if defined(USE_NUM_GMP) -#include "num_gmp_impl.h" -#elif defined(USE_NUM_NONE) -/* Nothing. */ -#else -#error "Please select num implementation" -#endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/scalar.h b/node_modules/secp256k1/src/secp256k1-src/src/scalar.h deleted file mode 100644 index b590ccd..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/scalar.h +++ /dev/null @@ -1,104 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_SCALAR_ -#define _SECP256K1_SCALAR_ - -#include "num.h" - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#if defined(USE_SCALAR_4X64) -#include "scalar_4x64.h" -#elif defined(USE_SCALAR_8X32) -#include "scalar_8x32.h" -#else -#error "Please select scalar implementation" -#endif - -/** Clear a scalar to prevent the leak of sensitive data. */ -static void secp256k1_scalar_clear(secp256k1_scalar *r); - -/** Access bits from a scalar. All requested bits must belong to the same 32-bit limb. */ -static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count); - -/** Access bits from a scalar. Not constant time. */ -static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count); - -/** Set a scalar from a big endian byte array. */ -static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *bin, int *overflow); - -/** Set a scalar to an unsigned integer. */ -static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v); - -/** Convert a scalar to a byte array. */ -static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a); - -/** Add two scalars together (modulo the group order). Returns whether it overflowed. */ -static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b); - -/** Conditionally add a power of two to a scalar. The result is not allowed to overflow. */ -static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag); - -/** Multiply two scalars (modulo the group order). */ -static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b); - -/** Shift a scalar right by some amount strictly between 0 and 16, returning - * the low bits that were shifted off */ -static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n); - -/** Compute the square of a scalar (modulo the group order). */ -static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a); - -/** Compute the inverse of a scalar (modulo the group order). */ -static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *a); - -/** Compute the inverse of a scalar (modulo the group order), without constant-time guarantee. */ -static void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *a); - -/** Compute the complement of a scalar (modulo the group order). */ -static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a); - -/** Check whether a scalar equals zero. */ -static int secp256k1_scalar_is_zero(const secp256k1_scalar *a); - -/** Check whether a scalar equals one. */ -static int secp256k1_scalar_is_one(const secp256k1_scalar *a); - -/** Check whether a scalar, considered as an nonnegative integer, is even. */ -static int secp256k1_scalar_is_even(const secp256k1_scalar *a); - -/** Check whether a scalar is higher than the group order divided by 2. */ -static int secp256k1_scalar_is_high(const secp256k1_scalar *a); - -/** Conditionally negate a number, in constant time. - * Returns -1 if the number was negated, 1 otherwise */ -static int secp256k1_scalar_cond_negate(secp256k1_scalar *a, int flag); - -#ifndef USE_NUM_NONE -/** Convert a scalar to a number. */ -static void secp256k1_scalar_get_num(secp256k1_num *r, const secp256k1_scalar *a); - -/** Get the order of the group as a number. */ -static void secp256k1_scalar_order_get_num(secp256k1_num *r); -#endif - -/** Compare two scalars. */ -static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b); - -#ifdef USE_ENDOMORPHISM -/** Find r1 and r2 such that r1+r2*2^128 = a. */ -static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a); -/** Find r1 and r2 such that r1+r2*lambda = a, and r1 and r2 are maximum 128 bits long (see secp256k1_gej_mul_lambda). */ -static void secp256k1_scalar_split_lambda(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a); -#endif - -/** Multiply a and b (without taking the modulus!), divide by 2**shift, and round to the nearest integer. Shift must be at least 256. */ -static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/scalar_4x64.h b/node_modules/secp256k1/src/secp256k1-src/src/scalar_4x64.h deleted file mode 100644 index cff4060..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/scalar_4x64.h +++ /dev/null @@ -1,19 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_SCALAR_REPR_ -#define _SECP256K1_SCALAR_REPR_ - -#include - -/** A scalar modulo the group order of the secp256k1 curve. */ -typedef struct { - uint64_t d[4]; -} secp256k1_scalar; - -#define SECP256K1_SCALAR_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{((uint64_t)(d1)) << 32 | (d0), ((uint64_t)(d3)) << 32 | (d2), ((uint64_t)(d5)) << 32 | (d4), ((uint64_t)(d7)) << 32 | (d6)}} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/scalar_4x64_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/scalar_4x64_impl.h deleted file mode 100644 index aa2703d..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/scalar_4x64_impl.h +++ /dev/null @@ -1,949 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_ -#define _SECP256K1_SCALAR_REPR_IMPL_H_ - -/* Limbs of the secp256k1 order. */ -#define SECP256K1_N_0 ((uint64_t)0xBFD25E8CD0364141ULL) -#define SECP256K1_N_1 ((uint64_t)0xBAAEDCE6AF48A03BULL) -#define SECP256K1_N_2 ((uint64_t)0xFFFFFFFFFFFFFFFEULL) -#define SECP256K1_N_3 ((uint64_t)0xFFFFFFFFFFFFFFFFULL) - -/* Limbs of 2^256 minus the secp256k1 order. */ -#define SECP256K1_N_C_0 (~SECP256K1_N_0 + 1) -#define SECP256K1_N_C_1 (~SECP256K1_N_1) -#define SECP256K1_N_C_2 (1) - -/* Limbs of half the secp256k1 order. */ -#define SECP256K1_N_H_0 ((uint64_t)0xDFE92F46681B20A0ULL) -#define SECP256K1_N_H_1 ((uint64_t)0x5D576E7357A4501DULL) -#define SECP256K1_N_H_2 ((uint64_t)0xFFFFFFFFFFFFFFFFULL) -#define SECP256K1_N_H_3 ((uint64_t)0x7FFFFFFFFFFFFFFFULL) - -SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) { - r->d[0] = 0; - r->d[1] = 0; - r->d[2] = 0; - r->d[3] = 0; -} - -SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) { - r->d[0] = v; - r->d[1] = 0; - r->d[2] = 0; - r->d[3] = 0; -} - -SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) { - VERIFY_CHECK((offset + count - 1) >> 6 == offset >> 6); - return (a->d[offset >> 6] >> (offset & 0x3F)) & ((((uint64_t)1) << count) - 1); -} - -SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) { - VERIFY_CHECK(count < 32); - VERIFY_CHECK(offset + count <= 256); - if ((offset + count - 1) >> 6 == offset >> 6) { - return secp256k1_scalar_get_bits(a, offset, count); - } else { - VERIFY_CHECK((offset >> 6) + 1 < 4); - return ((a->d[offset >> 6] >> (offset & 0x3F)) | (a->d[(offset >> 6) + 1] << (64 - (offset & 0x3F)))) & ((((uint64_t)1) << count) - 1); - } -} - -SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) { - int yes = 0; - int no = 0; - no |= (a->d[3] < SECP256K1_N_3); /* No need for a > check. */ - no |= (a->d[2] < SECP256K1_N_2); - yes |= (a->d[2] > SECP256K1_N_2) & ~no; - no |= (a->d[1] < SECP256K1_N_1); - yes |= (a->d[1] > SECP256K1_N_1) & ~no; - yes |= (a->d[0] >= SECP256K1_N_0) & ~no; - return yes; -} - -SECP256K1_INLINE static int secp256k1_scalar_reduce(secp256k1_scalar *r, unsigned int overflow) { - uint128_t t; - VERIFY_CHECK(overflow <= 1); - t = (uint128_t)r->d[0] + overflow * SECP256K1_N_C_0; - r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint128_t)r->d[1] + overflow * SECP256K1_N_C_1; - r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint128_t)r->d[2] + overflow * SECP256K1_N_C_2; - r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint64_t)r->d[3]; - r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL; - return overflow; -} - -static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) { - int overflow; - uint128_t t = (uint128_t)a->d[0] + b->d[0]; - r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint128_t)a->d[1] + b->d[1]; - r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint128_t)a->d[2] + b->d[2]; - r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint128_t)a->d[3] + b->d[3]; - r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - overflow = t + secp256k1_scalar_check_overflow(r); - VERIFY_CHECK(overflow == 0 || overflow == 1); - secp256k1_scalar_reduce(r, overflow); - return overflow; -} - -static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) { - uint128_t t; - VERIFY_CHECK(bit < 256); - bit += ((uint32_t) flag - 1) & 0x100; /* forcing (bit >> 6) > 3 makes this a noop */ - t = (uint128_t)r->d[0] + (((uint64_t)((bit >> 6) == 0)) << (bit & 0x3F)); - r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint128_t)r->d[1] + (((uint64_t)((bit >> 6) == 1)) << (bit & 0x3F)); - r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint128_t)r->d[2] + (((uint64_t)((bit >> 6) == 2)) << (bit & 0x3F)); - r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64; - t += (uint128_t)r->d[3] + (((uint64_t)((bit >> 6) == 3)) << (bit & 0x3F)); - r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL; -#ifdef VERIFY - VERIFY_CHECK((t >> 64) == 0); - VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0); -#endif -} - -static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) { - int over; - r->d[0] = (uint64_t)b32[31] | (uint64_t)b32[30] << 8 | (uint64_t)b32[29] << 16 | (uint64_t)b32[28] << 24 | (uint64_t)b32[27] << 32 | (uint64_t)b32[26] << 40 | (uint64_t)b32[25] << 48 | (uint64_t)b32[24] << 56; - r->d[1] = (uint64_t)b32[23] | (uint64_t)b32[22] << 8 | (uint64_t)b32[21] << 16 | (uint64_t)b32[20] << 24 | (uint64_t)b32[19] << 32 | (uint64_t)b32[18] << 40 | (uint64_t)b32[17] << 48 | (uint64_t)b32[16] << 56; - r->d[2] = (uint64_t)b32[15] | (uint64_t)b32[14] << 8 | (uint64_t)b32[13] << 16 | (uint64_t)b32[12] << 24 | (uint64_t)b32[11] << 32 | (uint64_t)b32[10] << 40 | (uint64_t)b32[9] << 48 | (uint64_t)b32[8] << 56; - r->d[3] = (uint64_t)b32[7] | (uint64_t)b32[6] << 8 | (uint64_t)b32[5] << 16 | (uint64_t)b32[4] << 24 | (uint64_t)b32[3] << 32 | (uint64_t)b32[2] << 40 | (uint64_t)b32[1] << 48 | (uint64_t)b32[0] << 56; - over = secp256k1_scalar_reduce(r, secp256k1_scalar_check_overflow(r)); - if (overflow) { - *overflow = over; - } -} - -static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) { - bin[0] = a->d[3] >> 56; bin[1] = a->d[3] >> 48; bin[2] = a->d[3] >> 40; bin[3] = a->d[3] >> 32; bin[4] = a->d[3] >> 24; bin[5] = a->d[3] >> 16; bin[6] = a->d[3] >> 8; bin[7] = a->d[3]; - bin[8] = a->d[2] >> 56; bin[9] = a->d[2] >> 48; bin[10] = a->d[2] >> 40; bin[11] = a->d[2] >> 32; bin[12] = a->d[2] >> 24; bin[13] = a->d[2] >> 16; bin[14] = a->d[2] >> 8; bin[15] = a->d[2]; - bin[16] = a->d[1] >> 56; bin[17] = a->d[1] >> 48; bin[18] = a->d[1] >> 40; bin[19] = a->d[1] >> 32; bin[20] = a->d[1] >> 24; bin[21] = a->d[1] >> 16; bin[22] = a->d[1] >> 8; bin[23] = a->d[1]; - bin[24] = a->d[0] >> 56; bin[25] = a->d[0] >> 48; bin[26] = a->d[0] >> 40; bin[27] = a->d[0] >> 32; bin[28] = a->d[0] >> 24; bin[29] = a->d[0] >> 16; bin[30] = a->d[0] >> 8; bin[31] = a->d[0]; -} - -SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) { - return (a->d[0] | a->d[1] | a->d[2] | a->d[3]) == 0; -} - -static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) { - uint64_t nonzero = 0xFFFFFFFFFFFFFFFFULL * (secp256k1_scalar_is_zero(a) == 0); - uint128_t t = (uint128_t)(~a->d[0]) + SECP256K1_N_0 + 1; - r->d[0] = t & nonzero; t >>= 64; - t += (uint128_t)(~a->d[1]) + SECP256K1_N_1; - r->d[1] = t & nonzero; t >>= 64; - t += (uint128_t)(~a->d[2]) + SECP256K1_N_2; - r->d[2] = t & nonzero; t >>= 64; - t += (uint128_t)(~a->d[3]) + SECP256K1_N_3; - r->d[3] = t & nonzero; -} - -SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) { - return ((a->d[0] ^ 1) | a->d[1] | a->d[2] | a->d[3]) == 0; -} - -static int secp256k1_scalar_is_high(const secp256k1_scalar *a) { - int yes = 0; - int no = 0; - no |= (a->d[3] < SECP256K1_N_H_3); - yes |= (a->d[3] > SECP256K1_N_H_3) & ~no; - no |= (a->d[2] < SECP256K1_N_H_2) & ~yes; /* No need for a > check. */ - no |= (a->d[1] < SECP256K1_N_H_1) & ~yes; - yes |= (a->d[1] > SECP256K1_N_H_1) & ~no; - yes |= (a->d[0] > SECP256K1_N_H_0) & ~no; - return yes; -} - -static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) { - /* If we are flag = 0, mask = 00...00 and this is a no-op; - * if we are flag = 1, mask = 11...11 and this is identical to secp256k1_scalar_negate */ - uint64_t mask = !flag - 1; - uint64_t nonzero = (secp256k1_scalar_is_zero(r) != 0) - 1; - uint128_t t = (uint128_t)(r->d[0] ^ mask) + ((SECP256K1_N_0 + 1) & mask); - r->d[0] = t & nonzero; t >>= 64; - t += (uint128_t)(r->d[1] ^ mask) + (SECP256K1_N_1 & mask); - r->d[1] = t & nonzero; t >>= 64; - t += (uint128_t)(r->d[2] ^ mask) + (SECP256K1_N_2 & mask); - r->d[2] = t & nonzero; t >>= 64; - t += (uint128_t)(r->d[3] ^ mask) + (SECP256K1_N_3 & mask); - r->d[3] = t & nonzero; - return 2 * (mask == 0) - 1; -} - -/* Inspired by the macros in OpenSSL's crypto/bn/asm/x86_64-gcc.c. */ - -/** Add a*b to the number defined by (c0,c1,c2). c2 must never overflow. */ -#define muladd(a,b) { \ - uint64_t tl, th; \ - { \ - uint128_t t = (uint128_t)a * b; \ - th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \ - tl = t; \ - } \ - c0 += tl; /* overflow is handled on the next line */ \ - th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \ - c1 += th; /* overflow is handled on the next line */ \ - c2 += (c1 < th) ? 1 : 0; /* never overflows by contract (verified in the next line) */ \ - VERIFY_CHECK((c1 >= th) || (c2 != 0)); \ -} - -/** Add a*b to the number defined by (c0,c1). c1 must never overflow. */ -#define muladd_fast(a,b) { \ - uint64_t tl, th; \ - { \ - uint128_t t = (uint128_t)a * b; \ - th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \ - tl = t; \ - } \ - c0 += tl; /* overflow is handled on the next line */ \ - th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \ - c1 += th; /* never overflows by contract (verified in the next line) */ \ - VERIFY_CHECK(c1 >= th); \ -} - -/** Add 2*a*b to the number defined by (c0,c1,c2). c2 must never overflow. */ -#define muladd2(a,b) { \ - uint64_t tl, th, th2, tl2; \ - { \ - uint128_t t = (uint128_t)a * b; \ - th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \ - tl = t; \ - } \ - th2 = th + th; /* at most 0xFFFFFFFFFFFFFFFE (in case th was 0x7FFFFFFFFFFFFFFF) */ \ - c2 += (th2 < th) ? 1 : 0; /* never overflows by contract (verified the next line) */ \ - VERIFY_CHECK((th2 >= th) || (c2 != 0)); \ - tl2 = tl + tl; /* at most 0xFFFFFFFFFFFFFFFE (in case the lowest 63 bits of tl were 0x7FFFFFFFFFFFFFFF) */ \ - th2 += (tl2 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \ - c0 += tl2; /* overflow is handled on the next line */ \ - th2 += (c0 < tl2) ? 1 : 0; /* second overflow is handled on the next line */ \ - c2 += (c0 < tl2) & (th2 == 0); /* never overflows by contract (verified the next line) */ \ - VERIFY_CHECK((c0 >= tl2) || (th2 != 0) || (c2 != 0)); \ - c1 += th2; /* overflow is handled on the next line */ \ - c2 += (c1 < th2) ? 1 : 0; /* never overflows by contract (verified the next line) */ \ - VERIFY_CHECK((c1 >= th2) || (c2 != 0)); \ -} - -/** Add a to the number defined by (c0,c1,c2). c2 must never overflow. */ -#define sumadd(a) { \ - unsigned int over; \ - c0 += (a); /* overflow is handled on the next line */ \ - over = (c0 < (a)) ? 1 : 0; \ - c1 += over; /* overflow is handled on the next line */ \ - c2 += (c1 < over) ? 1 : 0; /* never overflows by contract */ \ -} - -/** Add a to the number defined by (c0,c1). c1 must never overflow, c2 must be zero. */ -#define sumadd_fast(a) { \ - c0 += (a); /* overflow is handled on the next line */ \ - c1 += (c0 < (a)) ? 1 : 0; /* never overflows by contract (verified the next line) */ \ - VERIFY_CHECK((c1 != 0) | (c0 >= (a))); \ - VERIFY_CHECK(c2 == 0); \ -} - -/** Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits. */ -#define extract(n) { \ - (n) = c0; \ - c0 = c1; \ - c1 = c2; \ - c2 = 0; \ -} - -/** Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits. c2 is required to be zero. */ -#define extract_fast(n) { \ - (n) = c0; \ - c0 = c1; \ - c1 = 0; \ - VERIFY_CHECK(c2 == 0); \ -} - -static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint64_t *l) { -#ifdef USE_ASM_X86_64 - /* Reduce 512 bits into 385. */ - uint64_t m0, m1, m2, m3, m4, m5, m6; - uint64_t p0, p1, p2, p3, p4; - uint64_t c; - - __asm__ __volatile__( - /* Preload. */ - "movq 32(%%rsi), %%r11\n" - "movq 40(%%rsi), %%r12\n" - "movq 48(%%rsi), %%r13\n" - "movq 56(%%rsi), %%r14\n" - /* Initialize r8,r9,r10 */ - "movq 0(%%rsi), %%r8\n" - "movq $0, %%r9\n" - "movq $0, %%r10\n" - /* (r8,r9) += n0 * c0 */ - "movq %8, %%rax\n" - "mulq %%r11\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - /* extract m0 */ - "movq %%r8, %q0\n" - "movq $0, %%r8\n" - /* (r9,r10) += l1 */ - "addq 8(%%rsi), %%r9\n" - "adcq $0, %%r10\n" - /* (r9,r10,r8) += n1 * c0 */ - "movq %8, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* (r9,r10,r8) += n0 * c1 */ - "movq %9, %%rax\n" - "mulq %%r11\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* extract m1 */ - "movq %%r9, %q1\n" - "movq $0, %%r9\n" - /* (r10,r8,r9) += l2 */ - "addq 16(%%rsi), %%r10\n" - "adcq $0, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += n2 * c0 */ - "movq %8, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += n1 * c1 */ - "movq %9, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += n0 */ - "addq %%r11, %%r10\n" - "adcq $0, %%r8\n" - "adcq $0, %%r9\n" - /* extract m2 */ - "movq %%r10, %q2\n" - "movq $0, %%r10\n" - /* (r8,r9,r10) += l3 */ - "addq 24(%%rsi), %%r8\n" - "adcq $0, %%r9\n" - "adcq $0, %%r10\n" - /* (r8,r9,r10) += n3 * c0 */ - "movq %8, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* (r8,r9,r10) += n2 * c1 */ - "movq %9, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* (r8,r9,r10) += n1 */ - "addq %%r12, %%r8\n" - "adcq $0, %%r9\n" - "adcq $0, %%r10\n" - /* extract m3 */ - "movq %%r8, %q3\n" - "movq $0, %%r8\n" - /* (r9,r10,r8) += n3 * c1 */ - "movq %9, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* (r9,r10,r8) += n2 */ - "addq %%r13, %%r9\n" - "adcq $0, %%r10\n" - "adcq $0, %%r8\n" - /* extract m4 */ - "movq %%r9, %q4\n" - /* (r10,r8) += n3 */ - "addq %%r14, %%r10\n" - "adcq $0, %%r8\n" - /* extract m5 */ - "movq %%r10, %q5\n" - /* extract m6 */ - "movq %%r8, %q6\n" - : "=g"(m0), "=g"(m1), "=g"(m2), "=g"(m3), "=g"(m4), "=g"(m5), "=g"(m6) - : "S"(l), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1) - : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "cc"); - - /* Reduce 385 bits into 258. */ - __asm__ __volatile__( - /* Preload */ - "movq %q9, %%r11\n" - "movq %q10, %%r12\n" - "movq %q11, %%r13\n" - /* Initialize (r8,r9,r10) */ - "movq %q5, %%r8\n" - "movq $0, %%r9\n" - "movq $0, %%r10\n" - /* (r8,r9) += m4 * c0 */ - "movq %12, %%rax\n" - "mulq %%r11\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - /* extract p0 */ - "movq %%r8, %q0\n" - "movq $0, %%r8\n" - /* (r9,r10) += m1 */ - "addq %q6, %%r9\n" - "adcq $0, %%r10\n" - /* (r9,r10,r8) += m5 * c0 */ - "movq %12, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* (r9,r10,r8) += m4 * c1 */ - "movq %13, %%rax\n" - "mulq %%r11\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* extract p1 */ - "movq %%r9, %q1\n" - "movq $0, %%r9\n" - /* (r10,r8,r9) += m2 */ - "addq %q7, %%r10\n" - "adcq $0, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += m6 * c0 */ - "movq %12, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += m5 * c1 */ - "movq %13, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += m4 */ - "addq %%r11, %%r10\n" - "adcq $0, %%r8\n" - "adcq $0, %%r9\n" - /* extract p2 */ - "movq %%r10, %q2\n" - /* (r8,r9) += m3 */ - "addq %q8, %%r8\n" - "adcq $0, %%r9\n" - /* (r8,r9) += m6 * c1 */ - "movq %13, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - /* (r8,r9) += m5 */ - "addq %%r12, %%r8\n" - "adcq $0, %%r9\n" - /* extract p3 */ - "movq %%r8, %q3\n" - /* (r9) += m6 */ - "addq %%r13, %%r9\n" - /* extract p4 */ - "movq %%r9, %q4\n" - : "=&g"(p0), "=&g"(p1), "=&g"(p2), "=g"(p3), "=g"(p4) - : "g"(m0), "g"(m1), "g"(m2), "g"(m3), "g"(m4), "g"(m5), "g"(m6), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1) - : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "cc"); - - /* Reduce 258 bits into 256. */ - __asm__ __volatile__( - /* Preload */ - "movq %q5, %%r10\n" - /* (rax,rdx) = p4 * c0 */ - "movq %7, %%rax\n" - "mulq %%r10\n" - /* (rax,rdx) += p0 */ - "addq %q1, %%rax\n" - "adcq $0, %%rdx\n" - /* extract r0 */ - "movq %%rax, 0(%q6)\n" - /* Move to (r8,r9) */ - "movq %%rdx, %%r8\n" - "movq $0, %%r9\n" - /* (r8,r9) += p1 */ - "addq %q2, %%r8\n" - "adcq $0, %%r9\n" - /* (r8,r9) += p4 * c1 */ - "movq %8, %%rax\n" - "mulq %%r10\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - /* Extract r1 */ - "movq %%r8, 8(%q6)\n" - "movq $0, %%r8\n" - /* (r9,r8) += p4 */ - "addq %%r10, %%r9\n" - "adcq $0, %%r8\n" - /* (r9,r8) += p2 */ - "addq %q3, %%r9\n" - "adcq $0, %%r8\n" - /* Extract r2 */ - "movq %%r9, 16(%q6)\n" - "movq $0, %%r9\n" - /* (r8,r9) += p3 */ - "addq %q4, %%r8\n" - "adcq $0, %%r9\n" - /* Extract r3 */ - "movq %%r8, 24(%q6)\n" - /* Extract c */ - "movq %%r9, %q0\n" - : "=g"(c) - : "g"(p0), "g"(p1), "g"(p2), "g"(p3), "g"(p4), "D"(r), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1) - : "rax", "rdx", "r8", "r9", "r10", "cc", "memory"); -#else - uint128_t c; - uint64_t c0, c1, c2; - uint64_t n0 = l[4], n1 = l[5], n2 = l[6], n3 = l[7]; - uint64_t m0, m1, m2, m3, m4, m5; - uint32_t m6; - uint64_t p0, p1, p2, p3; - uint32_t p4; - - /* Reduce 512 bits into 385. */ - /* m[0..6] = l[0..3] + n[0..3] * SECP256K1_N_C. */ - c0 = l[0]; c1 = 0; c2 = 0; - muladd_fast(n0, SECP256K1_N_C_0); - extract_fast(m0); - sumadd_fast(l[1]); - muladd(n1, SECP256K1_N_C_0); - muladd(n0, SECP256K1_N_C_1); - extract(m1); - sumadd(l[2]); - muladd(n2, SECP256K1_N_C_0); - muladd(n1, SECP256K1_N_C_1); - sumadd(n0); - extract(m2); - sumadd(l[3]); - muladd(n3, SECP256K1_N_C_0); - muladd(n2, SECP256K1_N_C_1); - sumadd(n1); - extract(m3); - muladd(n3, SECP256K1_N_C_1); - sumadd(n2); - extract(m4); - sumadd_fast(n3); - extract_fast(m5); - VERIFY_CHECK(c0 <= 1); - m6 = c0; - - /* Reduce 385 bits into 258. */ - /* p[0..4] = m[0..3] + m[4..6] * SECP256K1_N_C. */ - c0 = m0; c1 = 0; c2 = 0; - muladd_fast(m4, SECP256K1_N_C_0); - extract_fast(p0); - sumadd_fast(m1); - muladd(m5, SECP256K1_N_C_0); - muladd(m4, SECP256K1_N_C_1); - extract(p1); - sumadd(m2); - muladd(m6, SECP256K1_N_C_0); - muladd(m5, SECP256K1_N_C_1); - sumadd(m4); - extract(p2); - sumadd_fast(m3); - muladd_fast(m6, SECP256K1_N_C_1); - sumadd_fast(m5); - extract_fast(p3); - p4 = c0 + m6; - VERIFY_CHECK(p4 <= 2); - - /* Reduce 258 bits into 256. */ - /* r[0..3] = p[0..3] + p[4] * SECP256K1_N_C. */ - c = p0 + (uint128_t)SECP256K1_N_C_0 * p4; - r->d[0] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64; - c += p1 + (uint128_t)SECP256K1_N_C_1 * p4; - r->d[1] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64; - c += p2 + (uint128_t)p4; - r->d[2] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64; - c += p3; - r->d[3] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64; -#endif - - /* Final reduction of r. */ - secp256k1_scalar_reduce(r, c + secp256k1_scalar_check_overflow(r)); -} - -static void secp256k1_scalar_mul_512(uint64_t l[8], const secp256k1_scalar *a, const secp256k1_scalar *b) { -#ifdef USE_ASM_X86_64 - const uint64_t *pb = b->d; - __asm__ __volatile__( - /* Preload */ - "movq 0(%%rdi), %%r15\n" - "movq 8(%%rdi), %%rbx\n" - "movq 16(%%rdi), %%rcx\n" - "movq 0(%%rdx), %%r11\n" - "movq 8(%%rdx), %%r12\n" - "movq 16(%%rdx), %%r13\n" - "movq 24(%%rdx), %%r14\n" - /* (rax,rdx) = a0 * b0 */ - "movq %%r15, %%rax\n" - "mulq %%r11\n" - /* Extract l0 */ - "movq %%rax, 0(%%rsi)\n" - /* (r8,r9,r10) = (rdx) */ - "movq %%rdx, %%r8\n" - "xorq %%r9, %%r9\n" - "xorq %%r10, %%r10\n" - /* (r8,r9,r10) += a0 * b1 */ - "movq %%r15, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* (r8,r9,r10) += a1 * b0 */ - "movq %%rbx, %%rax\n" - "mulq %%r11\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* Extract l1 */ - "movq %%r8, 8(%%rsi)\n" - "xorq %%r8, %%r8\n" - /* (r9,r10,r8) += a0 * b2 */ - "movq %%r15, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* (r9,r10,r8) += a1 * b1 */ - "movq %%rbx, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* (r9,r10,r8) += a2 * b0 */ - "movq %%rcx, %%rax\n" - "mulq %%r11\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* Extract l2 */ - "movq %%r9, 16(%%rsi)\n" - "xorq %%r9, %%r9\n" - /* (r10,r8,r9) += a0 * b3 */ - "movq %%r15, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* Preload a3 */ - "movq 24(%%rdi), %%r15\n" - /* (r10,r8,r9) += a1 * b2 */ - "movq %%rbx, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += a2 * b1 */ - "movq %%rcx, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += a3 * b0 */ - "movq %%r15, %%rax\n" - "mulq %%r11\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* Extract l3 */ - "movq %%r10, 24(%%rsi)\n" - "xorq %%r10, %%r10\n" - /* (r8,r9,r10) += a1 * b3 */ - "movq %%rbx, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* (r8,r9,r10) += a2 * b2 */ - "movq %%rcx, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* (r8,r9,r10) += a3 * b1 */ - "movq %%r15, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* Extract l4 */ - "movq %%r8, 32(%%rsi)\n" - "xorq %%r8, %%r8\n" - /* (r9,r10,r8) += a2 * b3 */ - "movq %%rcx, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* (r9,r10,r8) += a3 * b2 */ - "movq %%r15, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* Extract l5 */ - "movq %%r9, 40(%%rsi)\n" - /* (r10,r8) += a3 * b3 */ - "movq %%r15, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - /* Extract l6 */ - "movq %%r10, 48(%%rsi)\n" - /* Extract l7 */ - "movq %%r8, 56(%%rsi)\n" - : "+d"(pb) - : "S"(l), "D"(a->d) - : "rax", "rbx", "rcx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "cc", "memory"); -#else - /* 160 bit accumulator. */ - uint64_t c0 = 0, c1 = 0; - uint32_t c2 = 0; - - /* l[0..7] = a[0..3] * b[0..3]. */ - muladd_fast(a->d[0], b->d[0]); - extract_fast(l[0]); - muladd(a->d[0], b->d[1]); - muladd(a->d[1], b->d[0]); - extract(l[1]); - muladd(a->d[0], b->d[2]); - muladd(a->d[1], b->d[1]); - muladd(a->d[2], b->d[0]); - extract(l[2]); - muladd(a->d[0], b->d[3]); - muladd(a->d[1], b->d[2]); - muladd(a->d[2], b->d[1]); - muladd(a->d[3], b->d[0]); - extract(l[3]); - muladd(a->d[1], b->d[3]); - muladd(a->d[2], b->d[2]); - muladd(a->d[3], b->d[1]); - extract(l[4]); - muladd(a->d[2], b->d[3]); - muladd(a->d[3], b->d[2]); - extract(l[5]); - muladd_fast(a->d[3], b->d[3]); - extract_fast(l[6]); - VERIFY_CHECK(c1 == 0); - l[7] = c0; -#endif -} - -static void secp256k1_scalar_sqr_512(uint64_t l[8], const secp256k1_scalar *a) { -#ifdef USE_ASM_X86_64 - __asm__ __volatile__( - /* Preload */ - "movq 0(%%rdi), %%r11\n" - "movq 8(%%rdi), %%r12\n" - "movq 16(%%rdi), %%r13\n" - "movq 24(%%rdi), %%r14\n" - /* (rax,rdx) = a0 * a0 */ - "movq %%r11, %%rax\n" - "mulq %%r11\n" - /* Extract l0 */ - "movq %%rax, 0(%%rsi)\n" - /* (r8,r9,r10) = (rdx,0) */ - "movq %%rdx, %%r8\n" - "xorq %%r9, %%r9\n" - "xorq %%r10, %%r10\n" - /* (r8,r9,r10) += 2 * a0 * a1 */ - "movq %%r11, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* Extract l1 */ - "movq %%r8, 8(%%rsi)\n" - "xorq %%r8, %%r8\n" - /* (r9,r10,r8) += 2 * a0 * a2 */ - "movq %%r11, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* (r9,r10,r8) += a1 * a1 */ - "movq %%r12, %%rax\n" - "mulq %%r12\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* Extract l2 */ - "movq %%r9, 16(%%rsi)\n" - "xorq %%r9, %%r9\n" - /* (r10,r8,r9) += 2 * a0 * a3 */ - "movq %%r11, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* (r10,r8,r9) += 2 * a1 * a2 */ - "movq %%r12, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - "adcq $0, %%r9\n" - /* Extract l3 */ - "movq %%r10, 24(%%rsi)\n" - "xorq %%r10, %%r10\n" - /* (r8,r9,r10) += 2 * a1 * a3 */ - "movq %%r12, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* (r8,r9,r10) += a2 * a2 */ - "movq %%r13, %%rax\n" - "mulq %%r13\n" - "addq %%rax, %%r8\n" - "adcq %%rdx, %%r9\n" - "adcq $0, %%r10\n" - /* Extract l4 */ - "movq %%r8, 32(%%rsi)\n" - "xorq %%r8, %%r8\n" - /* (r9,r10,r8) += 2 * a2 * a3 */ - "movq %%r13, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - "addq %%rax, %%r9\n" - "adcq %%rdx, %%r10\n" - "adcq $0, %%r8\n" - /* Extract l5 */ - "movq %%r9, 40(%%rsi)\n" - /* (r10,r8) += a3 * a3 */ - "movq %%r14, %%rax\n" - "mulq %%r14\n" - "addq %%rax, %%r10\n" - "adcq %%rdx, %%r8\n" - /* Extract l6 */ - "movq %%r10, 48(%%rsi)\n" - /* Extract l7 */ - "movq %%r8, 56(%%rsi)\n" - : - : "S"(l), "D"(a->d) - : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "cc", "memory"); -#else - /* 160 bit accumulator. */ - uint64_t c0 = 0, c1 = 0; - uint32_t c2 = 0; - - /* l[0..7] = a[0..3] * b[0..3]. */ - muladd_fast(a->d[0], a->d[0]); - extract_fast(l[0]); - muladd2(a->d[0], a->d[1]); - extract(l[1]); - muladd2(a->d[0], a->d[2]); - muladd(a->d[1], a->d[1]); - extract(l[2]); - muladd2(a->d[0], a->d[3]); - muladd2(a->d[1], a->d[2]); - extract(l[3]); - muladd2(a->d[1], a->d[3]); - muladd(a->d[2], a->d[2]); - extract(l[4]); - muladd2(a->d[2], a->d[3]); - extract(l[5]); - muladd_fast(a->d[3], a->d[3]); - extract_fast(l[6]); - VERIFY_CHECK(c1 == 0); - l[7] = c0; -#endif -} - -#undef sumadd -#undef sumadd_fast -#undef muladd -#undef muladd_fast -#undef muladd2 -#undef extract -#undef extract_fast - -static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) { - uint64_t l[8]; - secp256k1_scalar_mul_512(l, a, b); - secp256k1_scalar_reduce_512(r, l); -} - -static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) { - int ret; - VERIFY_CHECK(n > 0); - VERIFY_CHECK(n < 16); - ret = r->d[0] & ((1 << n) - 1); - r->d[0] = (r->d[0] >> n) + (r->d[1] << (64 - n)); - r->d[1] = (r->d[1] >> n) + (r->d[2] << (64 - n)); - r->d[2] = (r->d[2] >> n) + (r->d[3] << (64 - n)); - r->d[3] = (r->d[3] >> n); - return ret; -} - -static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) { - uint64_t l[8]; - secp256k1_scalar_sqr_512(l, a); - secp256k1_scalar_reduce_512(r, l); -} - -#ifdef USE_ENDOMORPHISM -static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) { - r1->d[0] = a->d[0]; - r1->d[1] = a->d[1]; - r1->d[2] = 0; - r1->d[3] = 0; - r2->d[0] = a->d[2]; - r2->d[1] = a->d[3]; - r2->d[2] = 0; - r2->d[3] = 0; -} -#endif - -SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) { - return ((a->d[0] ^ b->d[0]) | (a->d[1] ^ b->d[1]) | (a->d[2] ^ b->d[2]) | (a->d[3] ^ b->d[3])) == 0; -} - -SECP256K1_INLINE static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift) { - uint64_t l[8]; - unsigned int shiftlimbs; - unsigned int shiftlow; - unsigned int shifthigh; - VERIFY_CHECK(shift >= 256); - secp256k1_scalar_mul_512(l, a, b); - shiftlimbs = shift >> 6; - shiftlow = shift & 0x3F; - shifthigh = 64 - shiftlow; - r->d[0] = shift < 512 ? (l[0 + shiftlimbs] >> shiftlow | (shift < 448 && shiftlow ? (l[1 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[1] = shift < 448 ? (l[1 + shiftlimbs] >> shiftlow | (shift < 384 && shiftlow ? (l[2 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[2] = shift < 384 ? (l[2 + shiftlimbs] >> shiftlow | (shift < 320 && shiftlow ? (l[3 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[3] = shift < 320 ? (l[3 + shiftlimbs] >> shiftlow) : 0; - secp256k1_scalar_cadd_bit(r, 0, (l[(shift - 1) >> 6] >> ((shift - 1) & 0x3f)) & 1); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/scalar_8x32.h b/node_modules/secp256k1/src/secp256k1-src/src/scalar_8x32.h deleted file mode 100644 index 1319664..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/scalar_8x32.h +++ /dev/null @@ -1,19 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_SCALAR_REPR_ -#define _SECP256K1_SCALAR_REPR_ - -#include - -/** A scalar modulo the group order of the secp256k1 curve. */ -typedef struct { - uint32_t d[8]; -} secp256k1_scalar; - -#define SECP256K1_SCALAR_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{(d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7)}} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/scalar_8x32_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/scalar_8x32_impl.h deleted file mode 100644 index aae4f35..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/scalar_8x32_impl.h +++ /dev/null @@ -1,721 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_ -#define _SECP256K1_SCALAR_REPR_IMPL_H_ - -/* Limbs of the secp256k1 order. */ -#define SECP256K1_N_0 ((uint32_t)0xD0364141UL) -#define SECP256K1_N_1 ((uint32_t)0xBFD25E8CUL) -#define SECP256K1_N_2 ((uint32_t)0xAF48A03BUL) -#define SECP256K1_N_3 ((uint32_t)0xBAAEDCE6UL) -#define SECP256K1_N_4 ((uint32_t)0xFFFFFFFEUL) -#define SECP256K1_N_5 ((uint32_t)0xFFFFFFFFUL) -#define SECP256K1_N_6 ((uint32_t)0xFFFFFFFFUL) -#define SECP256K1_N_7 ((uint32_t)0xFFFFFFFFUL) - -/* Limbs of 2^256 minus the secp256k1 order. */ -#define SECP256K1_N_C_0 (~SECP256K1_N_0 + 1) -#define SECP256K1_N_C_1 (~SECP256K1_N_1) -#define SECP256K1_N_C_2 (~SECP256K1_N_2) -#define SECP256K1_N_C_3 (~SECP256K1_N_3) -#define SECP256K1_N_C_4 (1) - -/* Limbs of half the secp256k1 order. */ -#define SECP256K1_N_H_0 ((uint32_t)0x681B20A0UL) -#define SECP256K1_N_H_1 ((uint32_t)0xDFE92F46UL) -#define SECP256K1_N_H_2 ((uint32_t)0x57A4501DUL) -#define SECP256K1_N_H_3 ((uint32_t)0x5D576E73UL) -#define SECP256K1_N_H_4 ((uint32_t)0xFFFFFFFFUL) -#define SECP256K1_N_H_5 ((uint32_t)0xFFFFFFFFUL) -#define SECP256K1_N_H_6 ((uint32_t)0xFFFFFFFFUL) -#define SECP256K1_N_H_7 ((uint32_t)0x7FFFFFFFUL) - -SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) { - r->d[0] = 0; - r->d[1] = 0; - r->d[2] = 0; - r->d[3] = 0; - r->d[4] = 0; - r->d[5] = 0; - r->d[6] = 0; - r->d[7] = 0; -} - -SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) { - r->d[0] = v; - r->d[1] = 0; - r->d[2] = 0; - r->d[3] = 0; - r->d[4] = 0; - r->d[5] = 0; - r->d[6] = 0; - r->d[7] = 0; -} - -SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) { - VERIFY_CHECK((offset + count - 1) >> 5 == offset >> 5); - return (a->d[offset >> 5] >> (offset & 0x1F)) & ((1 << count) - 1); -} - -SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) { - VERIFY_CHECK(count < 32); - VERIFY_CHECK(offset + count <= 256); - if ((offset + count - 1) >> 5 == offset >> 5) { - return secp256k1_scalar_get_bits(a, offset, count); - } else { - VERIFY_CHECK((offset >> 5) + 1 < 8); - return ((a->d[offset >> 5] >> (offset & 0x1F)) | (a->d[(offset >> 5) + 1] << (32 - (offset & 0x1F)))) & ((((uint32_t)1) << count) - 1); - } -} - -SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) { - int yes = 0; - int no = 0; - no |= (a->d[7] < SECP256K1_N_7); /* No need for a > check. */ - no |= (a->d[6] < SECP256K1_N_6); /* No need for a > check. */ - no |= (a->d[5] < SECP256K1_N_5); /* No need for a > check. */ - no |= (a->d[4] < SECP256K1_N_4); - yes |= (a->d[4] > SECP256K1_N_4) & ~no; - no |= (a->d[3] < SECP256K1_N_3) & ~yes; - yes |= (a->d[3] > SECP256K1_N_3) & ~no; - no |= (a->d[2] < SECP256K1_N_2) & ~yes; - yes |= (a->d[2] > SECP256K1_N_2) & ~no; - no |= (a->d[1] < SECP256K1_N_1) & ~yes; - yes |= (a->d[1] > SECP256K1_N_1) & ~no; - yes |= (a->d[0] >= SECP256K1_N_0) & ~no; - return yes; -} - -SECP256K1_INLINE static int secp256k1_scalar_reduce(secp256k1_scalar *r, uint32_t overflow) { - uint64_t t; - VERIFY_CHECK(overflow <= 1); - t = (uint64_t)r->d[0] + overflow * SECP256K1_N_C_0; - r->d[0] = t & 0xFFFFFFFFUL; t >>= 32; - t += (uint64_t)r->d[1] + overflow * SECP256K1_N_C_1; - r->d[1] = t & 0xFFFFFFFFUL; t >>= 32; - t += (uint64_t)r->d[2] + overflow * SECP256K1_N_C_2; - r->d[2] = t & 0xFFFFFFFFUL; t >>= 32; - t += (uint64_t)r->d[3] + overflow * SECP256K1_N_C_3; - r->d[3] = t & 0xFFFFFFFFUL; t >>= 32; - t += (uint64_t)r->d[4] + overflow * SECP256K1_N_C_4; - r->d[4] = t & 0xFFFFFFFFUL; t >>= 32; - t += (uint64_t)r->d[5]; - r->d[5] = t & 0xFFFFFFFFUL; t >>= 32; - t += (uint64_t)r->d[6]; - r->d[6] = t & 0xFFFFFFFFUL; t >>= 32; - t += (uint64_t)r->d[7]; - r->d[7] = t & 0xFFFFFFFFUL; - return overflow; -} - -static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) { - int overflow; - uint64_t t = (uint64_t)a->d[0] + b->d[0]; - r->d[0] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)a->d[1] + b->d[1]; - r->d[1] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)a->d[2] + b->d[2]; - r->d[2] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)a->d[3] + b->d[3]; - r->d[3] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)a->d[4] + b->d[4]; - r->d[4] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)a->d[5] + b->d[5]; - r->d[5] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)a->d[6] + b->d[6]; - r->d[6] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)a->d[7] + b->d[7]; - r->d[7] = t & 0xFFFFFFFFULL; t >>= 32; - overflow = t + secp256k1_scalar_check_overflow(r); - VERIFY_CHECK(overflow == 0 || overflow == 1); - secp256k1_scalar_reduce(r, overflow); - return overflow; -} - -static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) { - uint64_t t; - VERIFY_CHECK(bit < 256); - bit += ((uint32_t) flag - 1) & 0x100; /* forcing (bit >> 5) > 7 makes this a noop */ - t = (uint64_t)r->d[0] + (((uint32_t)((bit >> 5) == 0)) << (bit & 0x1F)); - r->d[0] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)r->d[1] + (((uint32_t)((bit >> 5) == 1)) << (bit & 0x1F)); - r->d[1] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)r->d[2] + (((uint32_t)((bit >> 5) == 2)) << (bit & 0x1F)); - r->d[2] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)r->d[3] + (((uint32_t)((bit >> 5) == 3)) << (bit & 0x1F)); - r->d[3] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)r->d[4] + (((uint32_t)((bit >> 5) == 4)) << (bit & 0x1F)); - r->d[4] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)r->d[5] + (((uint32_t)((bit >> 5) == 5)) << (bit & 0x1F)); - r->d[5] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)r->d[6] + (((uint32_t)((bit >> 5) == 6)) << (bit & 0x1F)); - r->d[6] = t & 0xFFFFFFFFULL; t >>= 32; - t += (uint64_t)r->d[7] + (((uint32_t)((bit >> 5) == 7)) << (bit & 0x1F)); - r->d[7] = t & 0xFFFFFFFFULL; -#ifdef VERIFY - VERIFY_CHECK((t >> 32) == 0); - VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0); -#endif -} - -static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) { - int over; - r->d[0] = (uint32_t)b32[31] | (uint32_t)b32[30] << 8 | (uint32_t)b32[29] << 16 | (uint32_t)b32[28] << 24; - r->d[1] = (uint32_t)b32[27] | (uint32_t)b32[26] << 8 | (uint32_t)b32[25] << 16 | (uint32_t)b32[24] << 24; - r->d[2] = (uint32_t)b32[23] | (uint32_t)b32[22] << 8 | (uint32_t)b32[21] << 16 | (uint32_t)b32[20] << 24; - r->d[3] = (uint32_t)b32[19] | (uint32_t)b32[18] << 8 | (uint32_t)b32[17] << 16 | (uint32_t)b32[16] << 24; - r->d[4] = (uint32_t)b32[15] | (uint32_t)b32[14] << 8 | (uint32_t)b32[13] << 16 | (uint32_t)b32[12] << 24; - r->d[5] = (uint32_t)b32[11] | (uint32_t)b32[10] << 8 | (uint32_t)b32[9] << 16 | (uint32_t)b32[8] << 24; - r->d[6] = (uint32_t)b32[7] | (uint32_t)b32[6] << 8 | (uint32_t)b32[5] << 16 | (uint32_t)b32[4] << 24; - r->d[7] = (uint32_t)b32[3] | (uint32_t)b32[2] << 8 | (uint32_t)b32[1] << 16 | (uint32_t)b32[0] << 24; - over = secp256k1_scalar_reduce(r, secp256k1_scalar_check_overflow(r)); - if (overflow) { - *overflow = over; - } -} - -static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) { - bin[0] = a->d[7] >> 24; bin[1] = a->d[7] >> 16; bin[2] = a->d[7] >> 8; bin[3] = a->d[7]; - bin[4] = a->d[6] >> 24; bin[5] = a->d[6] >> 16; bin[6] = a->d[6] >> 8; bin[7] = a->d[6]; - bin[8] = a->d[5] >> 24; bin[9] = a->d[5] >> 16; bin[10] = a->d[5] >> 8; bin[11] = a->d[5]; - bin[12] = a->d[4] >> 24; bin[13] = a->d[4] >> 16; bin[14] = a->d[4] >> 8; bin[15] = a->d[4]; - bin[16] = a->d[3] >> 24; bin[17] = a->d[3] >> 16; bin[18] = a->d[3] >> 8; bin[19] = a->d[3]; - bin[20] = a->d[2] >> 24; bin[21] = a->d[2] >> 16; bin[22] = a->d[2] >> 8; bin[23] = a->d[2]; - bin[24] = a->d[1] >> 24; bin[25] = a->d[1] >> 16; bin[26] = a->d[1] >> 8; bin[27] = a->d[1]; - bin[28] = a->d[0] >> 24; bin[29] = a->d[0] >> 16; bin[30] = a->d[0] >> 8; bin[31] = a->d[0]; -} - -SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) { - return (a->d[0] | a->d[1] | a->d[2] | a->d[3] | a->d[4] | a->d[5] | a->d[6] | a->d[7]) == 0; -} - -static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) { - uint32_t nonzero = 0xFFFFFFFFUL * (secp256k1_scalar_is_zero(a) == 0); - uint64_t t = (uint64_t)(~a->d[0]) + SECP256K1_N_0 + 1; - r->d[0] = t & nonzero; t >>= 32; - t += (uint64_t)(~a->d[1]) + SECP256K1_N_1; - r->d[1] = t & nonzero; t >>= 32; - t += (uint64_t)(~a->d[2]) + SECP256K1_N_2; - r->d[2] = t & nonzero; t >>= 32; - t += (uint64_t)(~a->d[3]) + SECP256K1_N_3; - r->d[3] = t & nonzero; t >>= 32; - t += (uint64_t)(~a->d[4]) + SECP256K1_N_4; - r->d[4] = t & nonzero; t >>= 32; - t += (uint64_t)(~a->d[5]) + SECP256K1_N_5; - r->d[5] = t & nonzero; t >>= 32; - t += (uint64_t)(~a->d[6]) + SECP256K1_N_6; - r->d[6] = t & nonzero; t >>= 32; - t += (uint64_t)(~a->d[7]) + SECP256K1_N_7; - r->d[7] = t & nonzero; -} - -SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) { - return ((a->d[0] ^ 1) | a->d[1] | a->d[2] | a->d[3] | a->d[4] | a->d[5] | a->d[6] | a->d[7]) == 0; -} - -static int secp256k1_scalar_is_high(const secp256k1_scalar *a) { - int yes = 0; - int no = 0; - no |= (a->d[7] < SECP256K1_N_H_7); - yes |= (a->d[7] > SECP256K1_N_H_7) & ~no; - no |= (a->d[6] < SECP256K1_N_H_6) & ~yes; /* No need for a > check. */ - no |= (a->d[5] < SECP256K1_N_H_5) & ~yes; /* No need for a > check. */ - no |= (a->d[4] < SECP256K1_N_H_4) & ~yes; /* No need for a > check. */ - no |= (a->d[3] < SECP256K1_N_H_3) & ~yes; - yes |= (a->d[3] > SECP256K1_N_H_3) & ~no; - no |= (a->d[2] < SECP256K1_N_H_2) & ~yes; - yes |= (a->d[2] > SECP256K1_N_H_2) & ~no; - no |= (a->d[1] < SECP256K1_N_H_1) & ~yes; - yes |= (a->d[1] > SECP256K1_N_H_1) & ~no; - yes |= (a->d[0] > SECP256K1_N_H_0) & ~no; - return yes; -} - -static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) { - /* If we are flag = 0, mask = 00...00 and this is a no-op; - * if we are flag = 1, mask = 11...11 and this is identical to secp256k1_scalar_negate */ - uint32_t mask = !flag - 1; - uint32_t nonzero = 0xFFFFFFFFUL * (secp256k1_scalar_is_zero(r) == 0); - uint64_t t = (uint64_t)(r->d[0] ^ mask) + ((SECP256K1_N_0 + 1) & mask); - r->d[0] = t & nonzero; t >>= 32; - t += (uint64_t)(r->d[1] ^ mask) + (SECP256K1_N_1 & mask); - r->d[1] = t & nonzero; t >>= 32; - t += (uint64_t)(r->d[2] ^ mask) + (SECP256K1_N_2 & mask); - r->d[2] = t & nonzero; t >>= 32; - t += (uint64_t)(r->d[3] ^ mask) + (SECP256K1_N_3 & mask); - r->d[3] = t & nonzero; t >>= 32; - t += (uint64_t)(r->d[4] ^ mask) + (SECP256K1_N_4 & mask); - r->d[4] = t & nonzero; t >>= 32; - t += (uint64_t)(r->d[5] ^ mask) + (SECP256K1_N_5 & mask); - r->d[5] = t & nonzero; t >>= 32; - t += (uint64_t)(r->d[6] ^ mask) + (SECP256K1_N_6 & mask); - r->d[6] = t & nonzero; t >>= 32; - t += (uint64_t)(r->d[7] ^ mask) + (SECP256K1_N_7 & mask); - r->d[7] = t & nonzero; - return 2 * (mask == 0) - 1; -} - - -/* Inspired by the macros in OpenSSL's crypto/bn/asm/x86_64-gcc.c. */ - -/** Add a*b to the number defined by (c0,c1,c2). c2 must never overflow. */ -#define muladd(a,b) { \ - uint32_t tl, th; \ - { \ - uint64_t t = (uint64_t)a * b; \ - th = t >> 32; /* at most 0xFFFFFFFE */ \ - tl = t; \ - } \ - c0 += tl; /* overflow is handled on the next line */ \ - th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \ - c1 += th; /* overflow is handled on the next line */ \ - c2 += (c1 < th) ? 1 : 0; /* never overflows by contract (verified in the next line) */ \ - VERIFY_CHECK((c1 >= th) || (c2 != 0)); \ -} - -/** Add a*b to the number defined by (c0,c1). c1 must never overflow. */ -#define muladd_fast(a,b) { \ - uint32_t tl, th; \ - { \ - uint64_t t = (uint64_t)a * b; \ - th = t >> 32; /* at most 0xFFFFFFFE */ \ - tl = t; \ - } \ - c0 += tl; /* overflow is handled on the next line */ \ - th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \ - c1 += th; /* never overflows by contract (verified in the next line) */ \ - VERIFY_CHECK(c1 >= th); \ -} - -/** Add 2*a*b to the number defined by (c0,c1,c2). c2 must never overflow. */ -#define muladd2(a,b) { \ - uint32_t tl, th, th2, tl2; \ - { \ - uint64_t t = (uint64_t)a * b; \ - th = t >> 32; /* at most 0xFFFFFFFE */ \ - tl = t; \ - } \ - th2 = th + th; /* at most 0xFFFFFFFE (in case th was 0x7FFFFFFF) */ \ - c2 += (th2 < th) ? 1 : 0; /* never overflows by contract (verified the next line) */ \ - VERIFY_CHECK((th2 >= th) || (c2 != 0)); \ - tl2 = tl + tl; /* at most 0xFFFFFFFE (in case the lowest 63 bits of tl were 0x7FFFFFFF) */ \ - th2 += (tl2 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \ - c0 += tl2; /* overflow is handled on the next line */ \ - th2 += (c0 < tl2) ? 1 : 0; /* second overflow is handled on the next line */ \ - c2 += (c0 < tl2) & (th2 == 0); /* never overflows by contract (verified the next line) */ \ - VERIFY_CHECK((c0 >= tl2) || (th2 != 0) || (c2 != 0)); \ - c1 += th2; /* overflow is handled on the next line */ \ - c2 += (c1 < th2) ? 1 : 0; /* never overflows by contract (verified the next line) */ \ - VERIFY_CHECK((c1 >= th2) || (c2 != 0)); \ -} - -/** Add a to the number defined by (c0,c1,c2). c2 must never overflow. */ -#define sumadd(a) { \ - unsigned int over; \ - c0 += (a); /* overflow is handled on the next line */ \ - over = (c0 < (a)) ? 1 : 0; \ - c1 += over; /* overflow is handled on the next line */ \ - c2 += (c1 < over) ? 1 : 0; /* never overflows by contract */ \ -} - -/** Add a to the number defined by (c0,c1). c1 must never overflow, c2 must be zero. */ -#define sumadd_fast(a) { \ - c0 += (a); /* overflow is handled on the next line */ \ - c1 += (c0 < (a)) ? 1 : 0; /* never overflows by contract (verified the next line) */ \ - VERIFY_CHECK((c1 != 0) | (c0 >= (a))); \ - VERIFY_CHECK(c2 == 0); \ -} - -/** Extract the lowest 32 bits of (c0,c1,c2) into n, and left shift the number 32 bits. */ -#define extract(n) { \ - (n) = c0; \ - c0 = c1; \ - c1 = c2; \ - c2 = 0; \ -} - -/** Extract the lowest 32 bits of (c0,c1,c2) into n, and left shift the number 32 bits. c2 is required to be zero. */ -#define extract_fast(n) { \ - (n) = c0; \ - c0 = c1; \ - c1 = 0; \ - VERIFY_CHECK(c2 == 0); \ -} - -static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint32_t *l) { - uint64_t c; - uint32_t n0 = l[8], n1 = l[9], n2 = l[10], n3 = l[11], n4 = l[12], n5 = l[13], n6 = l[14], n7 = l[15]; - uint32_t m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12; - uint32_t p0, p1, p2, p3, p4, p5, p6, p7, p8; - - /* 96 bit accumulator. */ - uint32_t c0, c1, c2; - - /* Reduce 512 bits into 385. */ - /* m[0..12] = l[0..7] + n[0..7] * SECP256K1_N_C. */ - c0 = l[0]; c1 = 0; c2 = 0; - muladd_fast(n0, SECP256K1_N_C_0); - extract_fast(m0); - sumadd_fast(l[1]); - muladd(n1, SECP256K1_N_C_0); - muladd(n0, SECP256K1_N_C_1); - extract(m1); - sumadd(l[2]); - muladd(n2, SECP256K1_N_C_0); - muladd(n1, SECP256K1_N_C_1); - muladd(n0, SECP256K1_N_C_2); - extract(m2); - sumadd(l[3]); - muladd(n3, SECP256K1_N_C_0); - muladd(n2, SECP256K1_N_C_1); - muladd(n1, SECP256K1_N_C_2); - muladd(n0, SECP256K1_N_C_3); - extract(m3); - sumadd(l[4]); - muladd(n4, SECP256K1_N_C_0); - muladd(n3, SECP256K1_N_C_1); - muladd(n2, SECP256K1_N_C_2); - muladd(n1, SECP256K1_N_C_3); - sumadd(n0); - extract(m4); - sumadd(l[5]); - muladd(n5, SECP256K1_N_C_0); - muladd(n4, SECP256K1_N_C_1); - muladd(n3, SECP256K1_N_C_2); - muladd(n2, SECP256K1_N_C_3); - sumadd(n1); - extract(m5); - sumadd(l[6]); - muladd(n6, SECP256K1_N_C_0); - muladd(n5, SECP256K1_N_C_1); - muladd(n4, SECP256K1_N_C_2); - muladd(n3, SECP256K1_N_C_3); - sumadd(n2); - extract(m6); - sumadd(l[7]); - muladd(n7, SECP256K1_N_C_0); - muladd(n6, SECP256K1_N_C_1); - muladd(n5, SECP256K1_N_C_2); - muladd(n4, SECP256K1_N_C_3); - sumadd(n3); - extract(m7); - muladd(n7, SECP256K1_N_C_1); - muladd(n6, SECP256K1_N_C_2); - muladd(n5, SECP256K1_N_C_3); - sumadd(n4); - extract(m8); - muladd(n7, SECP256K1_N_C_2); - muladd(n6, SECP256K1_N_C_3); - sumadd(n5); - extract(m9); - muladd(n7, SECP256K1_N_C_3); - sumadd(n6); - extract(m10); - sumadd_fast(n7); - extract_fast(m11); - VERIFY_CHECK(c0 <= 1); - m12 = c0; - - /* Reduce 385 bits into 258. */ - /* p[0..8] = m[0..7] + m[8..12] * SECP256K1_N_C. */ - c0 = m0; c1 = 0; c2 = 0; - muladd_fast(m8, SECP256K1_N_C_0); - extract_fast(p0); - sumadd_fast(m1); - muladd(m9, SECP256K1_N_C_0); - muladd(m8, SECP256K1_N_C_1); - extract(p1); - sumadd(m2); - muladd(m10, SECP256K1_N_C_0); - muladd(m9, SECP256K1_N_C_1); - muladd(m8, SECP256K1_N_C_2); - extract(p2); - sumadd(m3); - muladd(m11, SECP256K1_N_C_0); - muladd(m10, SECP256K1_N_C_1); - muladd(m9, SECP256K1_N_C_2); - muladd(m8, SECP256K1_N_C_3); - extract(p3); - sumadd(m4); - muladd(m12, SECP256K1_N_C_0); - muladd(m11, SECP256K1_N_C_1); - muladd(m10, SECP256K1_N_C_2); - muladd(m9, SECP256K1_N_C_3); - sumadd(m8); - extract(p4); - sumadd(m5); - muladd(m12, SECP256K1_N_C_1); - muladd(m11, SECP256K1_N_C_2); - muladd(m10, SECP256K1_N_C_3); - sumadd(m9); - extract(p5); - sumadd(m6); - muladd(m12, SECP256K1_N_C_2); - muladd(m11, SECP256K1_N_C_3); - sumadd(m10); - extract(p6); - sumadd_fast(m7); - muladd_fast(m12, SECP256K1_N_C_3); - sumadd_fast(m11); - extract_fast(p7); - p8 = c0 + m12; - VERIFY_CHECK(p8 <= 2); - - /* Reduce 258 bits into 256. */ - /* r[0..7] = p[0..7] + p[8] * SECP256K1_N_C. */ - c = p0 + (uint64_t)SECP256K1_N_C_0 * p8; - r->d[0] = c & 0xFFFFFFFFUL; c >>= 32; - c += p1 + (uint64_t)SECP256K1_N_C_1 * p8; - r->d[1] = c & 0xFFFFFFFFUL; c >>= 32; - c += p2 + (uint64_t)SECP256K1_N_C_2 * p8; - r->d[2] = c & 0xFFFFFFFFUL; c >>= 32; - c += p3 + (uint64_t)SECP256K1_N_C_3 * p8; - r->d[3] = c & 0xFFFFFFFFUL; c >>= 32; - c += p4 + (uint64_t)p8; - r->d[4] = c & 0xFFFFFFFFUL; c >>= 32; - c += p5; - r->d[5] = c & 0xFFFFFFFFUL; c >>= 32; - c += p6; - r->d[6] = c & 0xFFFFFFFFUL; c >>= 32; - c += p7; - r->d[7] = c & 0xFFFFFFFFUL; c >>= 32; - - /* Final reduction of r. */ - secp256k1_scalar_reduce(r, c + secp256k1_scalar_check_overflow(r)); -} - -static void secp256k1_scalar_mul_512(uint32_t *l, const secp256k1_scalar *a, const secp256k1_scalar *b) { - /* 96 bit accumulator. */ - uint32_t c0 = 0, c1 = 0, c2 = 0; - - /* l[0..15] = a[0..7] * b[0..7]. */ - muladd_fast(a->d[0], b->d[0]); - extract_fast(l[0]); - muladd(a->d[0], b->d[1]); - muladd(a->d[1], b->d[0]); - extract(l[1]); - muladd(a->d[0], b->d[2]); - muladd(a->d[1], b->d[1]); - muladd(a->d[2], b->d[0]); - extract(l[2]); - muladd(a->d[0], b->d[3]); - muladd(a->d[1], b->d[2]); - muladd(a->d[2], b->d[1]); - muladd(a->d[3], b->d[0]); - extract(l[3]); - muladd(a->d[0], b->d[4]); - muladd(a->d[1], b->d[3]); - muladd(a->d[2], b->d[2]); - muladd(a->d[3], b->d[1]); - muladd(a->d[4], b->d[0]); - extract(l[4]); - muladd(a->d[0], b->d[5]); - muladd(a->d[1], b->d[4]); - muladd(a->d[2], b->d[3]); - muladd(a->d[3], b->d[2]); - muladd(a->d[4], b->d[1]); - muladd(a->d[5], b->d[0]); - extract(l[5]); - muladd(a->d[0], b->d[6]); - muladd(a->d[1], b->d[5]); - muladd(a->d[2], b->d[4]); - muladd(a->d[3], b->d[3]); - muladd(a->d[4], b->d[2]); - muladd(a->d[5], b->d[1]); - muladd(a->d[6], b->d[0]); - extract(l[6]); - muladd(a->d[0], b->d[7]); - muladd(a->d[1], b->d[6]); - muladd(a->d[2], b->d[5]); - muladd(a->d[3], b->d[4]); - muladd(a->d[4], b->d[3]); - muladd(a->d[5], b->d[2]); - muladd(a->d[6], b->d[1]); - muladd(a->d[7], b->d[0]); - extract(l[7]); - muladd(a->d[1], b->d[7]); - muladd(a->d[2], b->d[6]); - muladd(a->d[3], b->d[5]); - muladd(a->d[4], b->d[4]); - muladd(a->d[5], b->d[3]); - muladd(a->d[6], b->d[2]); - muladd(a->d[7], b->d[1]); - extract(l[8]); - muladd(a->d[2], b->d[7]); - muladd(a->d[3], b->d[6]); - muladd(a->d[4], b->d[5]); - muladd(a->d[5], b->d[4]); - muladd(a->d[6], b->d[3]); - muladd(a->d[7], b->d[2]); - extract(l[9]); - muladd(a->d[3], b->d[7]); - muladd(a->d[4], b->d[6]); - muladd(a->d[5], b->d[5]); - muladd(a->d[6], b->d[4]); - muladd(a->d[7], b->d[3]); - extract(l[10]); - muladd(a->d[4], b->d[7]); - muladd(a->d[5], b->d[6]); - muladd(a->d[6], b->d[5]); - muladd(a->d[7], b->d[4]); - extract(l[11]); - muladd(a->d[5], b->d[7]); - muladd(a->d[6], b->d[6]); - muladd(a->d[7], b->d[5]); - extract(l[12]); - muladd(a->d[6], b->d[7]); - muladd(a->d[7], b->d[6]); - extract(l[13]); - muladd_fast(a->d[7], b->d[7]); - extract_fast(l[14]); - VERIFY_CHECK(c1 == 0); - l[15] = c0; -} - -static void secp256k1_scalar_sqr_512(uint32_t *l, const secp256k1_scalar *a) { - /* 96 bit accumulator. */ - uint32_t c0 = 0, c1 = 0, c2 = 0; - - /* l[0..15] = a[0..7]^2. */ - muladd_fast(a->d[0], a->d[0]); - extract_fast(l[0]); - muladd2(a->d[0], a->d[1]); - extract(l[1]); - muladd2(a->d[0], a->d[2]); - muladd(a->d[1], a->d[1]); - extract(l[2]); - muladd2(a->d[0], a->d[3]); - muladd2(a->d[1], a->d[2]); - extract(l[3]); - muladd2(a->d[0], a->d[4]); - muladd2(a->d[1], a->d[3]); - muladd(a->d[2], a->d[2]); - extract(l[4]); - muladd2(a->d[0], a->d[5]); - muladd2(a->d[1], a->d[4]); - muladd2(a->d[2], a->d[3]); - extract(l[5]); - muladd2(a->d[0], a->d[6]); - muladd2(a->d[1], a->d[5]); - muladd2(a->d[2], a->d[4]); - muladd(a->d[3], a->d[3]); - extract(l[6]); - muladd2(a->d[0], a->d[7]); - muladd2(a->d[1], a->d[6]); - muladd2(a->d[2], a->d[5]); - muladd2(a->d[3], a->d[4]); - extract(l[7]); - muladd2(a->d[1], a->d[7]); - muladd2(a->d[2], a->d[6]); - muladd2(a->d[3], a->d[5]); - muladd(a->d[4], a->d[4]); - extract(l[8]); - muladd2(a->d[2], a->d[7]); - muladd2(a->d[3], a->d[6]); - muladd2(a->d[4], a->d[5]); - extract(l[9]); - muladd2(a->d[3], a->d[7]); - muladd2(a->d[4], a->d[6]); - muladd(a->d[5], a->d[5]); - extract(l[10]); - muladd2(a->d[4], a->d[7]); - muladd2(a->d[5], a->d[6]); - extract(l[11]); - muladd2(a->d[5], a->d[7]); - muladd(a->d[6], a->d[6]); - extract(l[12]); - muladd2(a->d[6], a->d[7]); - extract(l[13]); - muladd_fast(a->d[7], a->d[7]); - extract_fast(l[14]); - VERIFY_CHECK(c1 == 0); - l[15] = c0; -} - -#undef sumadd -#undef sumadd_fast -#undef muladd -#undef muladd_fast -#undef muladd2 -#undef extract -#undef extract_fast - -static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) { - uint32_t l[16]; - secp256k1_scalar_mul_512(l, a, b); - secp256k1_scalar_reduce_512(r, l); -} - -static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) { - int ret; - VERIFY_CHECK(n > 0); - VERIFY_CHECK(n < 16); - ret = r->d[0] & ((1 << n) - 1); - r->d[0] = (r->d[0] >> n) + (r->d[1] << (32 - n)); - r->d[1] = (r->d[1] >> n) + (r->d[2] << (32 - n)); - r->d[2] = (r->d[2] >> n) + (r->d[3] << (32 - n)); - r->d[3] = (r->d[3] >> n) + (r->d[4] << (32 - n)); - r->d[4] = (r->d[4] >> n) + (r->d[5] << (32 - n)); - r->d[5] = (r->d[5] >> n) + (r->d[6] << (32 - n)); - r->d[6] = (r->d[6] >> n) + (r->d[7] << (32 - n)); - r->d[7] = (r->d[7] >> n); - return ret; -} - -static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) { - uint32_t l[16]; - secp256k1_scalar_sqr_512(l, a); - secp256k1_scalar_reduce_512(r, l); -} - -#ifdef USE_ENDOMORPHISM -static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) { - r1->d[0] = a->d[0]; - r1->d[1] = a->d[1]; - r1->d[2] = a->d[2]; - r1->d[3] = a->d[3]; - r1->d[4] = 0; - r1->d[5] = 0; - r1->d[6] = 0; - r1->d[7] = 0; - r2->d[0] = a->d[4]; - r2->d[1] = a->d[5]; - r2->d[2] = a->d[6]; - r2->d[3] = a->d[7]; - r2->d[4] = 0; - r2->d[5] = 0; - r2->d[6] = 0; - r2->d[7] = 0; -} -#endif - -SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) { - return ((a->d[0] ^ b->d[0]) | (a->d[1] ^ b->d[1]) | (a->d[2] ^ b->d[2]) | (a->d[3] ^ b->d[3]) | (a->d[4] ^ b->d[4]) | (a->d[5] ^ b->d[5]) | (a->d[6] ^ b->d[6]) | (a->d[7] ^ b->d[7])) == 0; -} - -SECP256K1_INLINE static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift) { - uint32_t l[16]; - unsigned int shiftlimbs; - unsigned int shiftlow; - unsigned int shifthigh; - VERIFY_CHECK(shift >= 256); - secp256k1_scalar_mul_512(l, a, b); - shiftlimbs = shift >> 5; - shiftlow = shift & 0x1F; - shifthigh = 32 - shiftlow; - r->d[0] = shift < 512 ? (l[0 + shiftlimbs] >> shiftlow | (shift < 480 && shiftlow ? (l[1 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[1] = shift < 480 ? (l[1 + shiftlimbs] >> shiftlow | (shift < 448 && shiftlow ? (l[2 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[2] = shift < 448 ? (l[2 + shiftlimbs] >> shiftlow | (shift < 416 && shiftlow ? (l[3 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[3] = shift < 416 ? (l[3 + shiftlimbs] >> shiftlow | (shift < 384 && shiftlow ? (l[4 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[4] = shift < 384 ? (l[4 + shiftlimbs] >> shiftlow | (shift < 352 && shiftlow ? (l[5 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[5] = shift < 352 ? (l[5 + shiftlimbs] >> shiftlow | (shift < 320 && shiftlow ? (l[6 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[6] = shift < 320 ? (l[6 + shiftlimbs] >> shiftlow | (shift < 288 && shiftlow ? (l[7 + shiftlimbs] << shifthigh) : 0)) : 0; - r->d[7] = shift < 288 ? (l[7 + shiftlimbs] >> shiftlow) : 0; - secp256k1_scalar_cadd_bit(r, 0, (l[(shift - 1) >> 5] >> ((shift - 1) & 0x1f)) & 1); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/scalar_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/scalar_impl.h deleted file mode 100644 index c5baf4d..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/scalar_impl.h +++ /dev/null @@ -1,335 +0,0 @@ -/********************************************************************** - * Copyright (c) 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_SCALAR_IMPL_H_ -#define _SECP256K1_SCALAR_IMPL_H_ - -#include "group.h" -#include "scalar.h" - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#if defined(USE_SCALAR_4X64) -#include "scalar_4x64_impl.h" -#elif defined(USE_SCALAR_8X32) -#include "scalar_8x32_impl.h" -#else -#error "Please select scalar implementation" -#endif - -#ifndef USE_NUM_NONE -static void secp256k1_scalar_get_num(secp256k1_num *r, const secp256k1_scalar *a) { - unsigned char c[32]; - secp256k1_scalar_get_b32(c, a); - secp256k1_num_set_bin(r, c, 32); -} - -/** secp256k1 curve order, see secp256k1_ecdsa_const_order_as_fe in ecdsa_impl.h */ -static void secp256k1_scalar_order_get_num(secp256k1_num *r) { - static const unsigned char order[32] = { - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE, - 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B, - 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x41 - }; - secp256k1_num_set_bin(r, order, 32); -} -#endif - -static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *x) { - secp256k1_scalar *t; - int i; - /* First compute x ^ (2^N - 1) for some values of N. */ - secp256k1_scalar x2, x3, x4, x6, x7, x8, x15, x30, x60, x120, x127; - - secp256k1_scalar_sqr(&x2, x); - secp256k1_scalar_mul(&x2, &x2, x); - - secp256k1_scalar_sqr(&x3, &x2); - secp256k1_scalar_mul(&x3, &x3, x); - - secp256k1_scalar_sqr(&x4, &x3); - secp256k1_scalar_mul(&x4, &x4, x); - - secp256k1_scalar_sqr(&x6, &x4); - secp256k1_scalar_sqr(&x6, &x6); - secp256k1_scalar_mul(&x6, &x6, &x2); - - secp256k1_scalar_sqr(&x7, &x6); - secp256k1_scalar_mul(&x7, &x7, x); - - secp256k1_scalar_sqr(&x8, &x7); - secp256k1_scalar_mul(&x8, &x8, x); - - secp256k1_scalar_sqr(&x15, &x8); - for (i = 0; i < 6; i++) { - secp256k1_scalar_sqr(&x15, &x15); - } - secp256k1_scalar_mul(&x15, &x15, &x7); - - secp256k1_scalar_sqr(&x30, &x15); - for (i = 0; i < 14; i++) { - secp256k1_scalar_sqr(&x30, &x30); - } - secp256k1_scalar_mul(&x30, &x30, &x15); - - secp256k1_scalar_sqr(&x60, &x30); - for (i = 0; i < 29; i++) { - secp256k1_scalar_sqr(&x60, &x60); - } - secp256k1_scalar_mul(&x60, &x60, &x30); - - secp256k1_scalar_sqr(&x120, &x60); - for (i = 0; i < 59; i++) { - secp256k1_scalar_sqr(&x120, &x120); - } - secp256k1_scalar_mul(&x120, &x120, &x60); - - secp256k1_scalar_sqr(&x127, &x120); - for (i = 0; i < 6; i++) { - secp256k1_scalar_sqr(&x127, &x127); - } - secp256k1_scalar_mul(&x127, &x127, &x7); - - /* Then accumulate the final result (t starts at x127). */ - t = &x127; - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 4; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x3); /* 111 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 4; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x3); /* 111 */ - for (i = 0; i < 3; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x2); /* 11 */ - for (i = 0; i < 4; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x3); /* 111 */ - for (i = 0; i < 5; i++) { /* 00 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x3); /* 111 */ - for (i = 0; i < 4; i++) { /* 00 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x2); /* 11 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 5; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x4); /* 1111 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 3; i++) { /* 00 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 4; i++) { /* 000 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 10; i++) { /* 0000000 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x3); /* 111 */ - for (i = 0; i < 4; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x3); /* 111 */ - for (i = 0; i < 9; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x8); /* 11111111 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 3; i++) { /* 00 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 3; i++) { /* 00 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 5; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x4); /* 1111 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 5; i++) { /* 000 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x2); /* 11 */ - for (i = 0; i < 4; i++) { /* 00 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x2); /* 11 */ - for (i = 0; i < 2; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 8; i++) { /* 000000 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x2); /* 11 */ - for (i = 0; i < 3; i++) { /* 0 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, &x2); /* 11 */ - for (i = 0; i < 3; i++) { /* 00 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 6; i++) { /* 00000 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(t, t, x); /* 1 */ - for (i = 0; i < 8; i++) { /* 00 */ - secp256k1_scalar_sqr(t, t); - } - secp256k1_scalar_mul(r, t, &x6); /* 111111 */ -} - -SECP256K1_INLINE static int secp256k1_scalar_is_even(const secp256k1_scalar *a) { - /* d[0] is present and is the lowest word for all representations */ - return !(a->d[0] & 1); -} - -static void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *x) { -#if defined(USE_SCALAR_INV_BUILTIN) - secp256k1_scalar_inverse(r, x); -#elif defined(USE_SCALAR_INV_NUM) - unsigned char b[32]; - secp256k1_num n, m; - secp256k1_scalar t = *x; - secp256k1_scalar_get_b32(b, &t); - secp256k1_num_set_bin(&n, b, 32); - secp256k1_scalar_order_get_num(&m); - secp256k1_num_mod_inverse(&n, &n, &m); - secp256k1_num_get_bin(b, 32, &n); - secp256k1_scalar_set_b32(r, b, NULL); - /* Verify that the inverse was computed correctly, without GMP code. */ - secp256k1_scalar_mul(&t, &t, r); - CHECK(secp256k1_scalar_is_one(&t)); -#else -#error "Please select scalar inverse implementation" -#endif -} - -#ifdef USE_ENDOMORPHISM -/** - * The Secp256k1 curve has an endomorphism, where lambda * (x, y) = (beta * x, y), where - * lambda is {0x53,0x63,0xad,0x4c,0xc0,0x5c,0x30,0xe0,0xa5,0x26,0x1c,0x02,0x88,0x12,0x64,0x5a, - * 0x12,0x2e,0x22,0xea,0x20,0x81,0x66,0x78,0xdf,0x02,0x96,0x7c,0x1b,0x23,0xbd,0x72} - * - * "Guide to Elliptic Curve Cryptography" (Hankerson, Menezes, Vanstone) gives an algorithm - * (algorithm 3.74) to find k1 and k2 given k, such that k1 + k2 * lambda == k mod n, and k1 - * and k2 have a small size. - * It relies on constants a1, b1, a2, b2. These constants for the value of lambda above are: - * - * - a1 = {0x30,0x86,0xd2,0x21,0xa7,0xd4,0x6b,0xcd,0xe8,0x6c,0x90,0xe4,0x92,0x84,0xeb,0x15} - * - b1 = -{0xe4,0x43,0x7e,0xd6,0x01,0x0e,0x88,0x28,0x6f,0x54,0x7f,0xa9,0x0a,0xbf,0xe4,0xc3} - * - a2 = {0x01,0x14,0xca,0x50,0xf7,0xa8,0xe2,0xf3,0xf6,0x57,0xc1,0x10,0x8d,0x9d,0x44,0xcf,0xd8} - * - b2 = {0x30,0x86,0xd2,0x21,0xa7,0xd4,0x6b,0xcd,0xe8,0x6c,0x90,0xe4,0x92,0x84,0xeb,0x15} - * - * The algorithm then computes c1 = round(b1 * k / n) and c2 = round(b2 * k / n), and gives - * k1 = k - (c1*a1 + c2*a2) and k2 = -(c1*b1 + c2*b2). Instead, we use modular arithmetic, and - * compute k1 as k - k2 * lambda, avoiding the need for constants a1 and a2. - * - * g1, g2 are precomputed constants used to replace division with a rounded multiplication - * when decomposing the scalar for an endomorphism-based point multiplication. - * - * The possibility of using precomputed estimates is mentioned in "Guide to Elliptic Curve - * Cryptography" (Hankerson, Menezes, Vanstone) in section 3.5. - * - * The derivation is described in the paper "Efficient Software Implementation of Public-Key - * Cryptography on Sensor Networks Using the MSP430X Microcontroller" (Gouvea, Oliveira, Lopez), - * Section 4.3 (here we use a somewhat higher-precision estimate): - * d = a1*b2 - b1*a2 - * g1 = round((2^272)*b2/d) - * g2 = round((2^272)*b1/d) - * - * (Note that 'd' is also equal to the curve order here because [a1,b1] and [a2,b2] are found - * as outputs of the Extended Euclidean Algorithm on inputs 'order' and 'lambda'). - * - * The function below splits a in r1 and r2, such that r1 + lambda * r2 == a (mod order). - */ - -static void secp256k1_scalar_split_lambda(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) { - secp256k1_scalar c1, c2; - static const secp256k1_scalar minus_lambda = SECP256K1_SCALAR_CONST( - 0xAC9C52B3UL, 0x3FA3CF1FUL, 0x5AD9E3FDUL, 0x77ED9BA4UL, - 0xA880B9FCUL, 0x8EC739C2UL, 0xE0CFC810UL, 0xB51283CFUL - ); - static const secp256k1_scalar minus_b1 = SECP256K1_SCALAR_CONST( - 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, - 0xE4437ED6UL, 0x010E8828UL, 0x6F547FA9UL, 0x0ABFE4C3UL - ); - static const secp256k1_scalar minus_b2 = SECP256K1_SCALAR_CONST( - 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL, - 0x8A280AC5UL, 0x0774346DUL, 0xD765CDA8UL, 0x3DB1562CUL - ); - static const secp256k1_scalar g1 = SECP256K1_SCALAR_CONST( - 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00003086UL, - 0xD221A7D4UL, 0x6BCDE86CUL, 0x90E49284UL, 0xEB153DABUL - ); - static const secp256k1_scalar g2 = SECP256K1_SCALAR_CONST( - 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0000E443UL, - 0x7ED6010EUL, 0x88286F54UL, 0x7FA90ABFUL, 0xE4C42212UL - ); - VERIFY_CHECK(r1 != a); - VERIFY_CHECK(r2 != a); - /* these _var calls are constant time since the shift amount is constant */ - secp256k1_scalar_mul_shift_var(&c1, a, &g1, 272); - secp256k1_scalar_mul_shift_var(&c2, a, &g2, 272); - secp256k1_scalar_mul(&c1, &c1, &minus_b1); - secp256k1_scalar_mul(&c2, &c2, &minus_b2); - secp256k1_scalar_add(r2, &c1, &c2); - secp256k1_scalar_mul(r1, r2, &minus_lambda); - secp256k1_scalar_add(r1, r1, a); -} -#endif - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/secp256k1.c b/node_modules/secp256k1/src/secp256k1-src/src/secp256k1.c deleted file mode 100644 index 7973d60..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/secp256k1.c +++ /dev/null @@ -1,561 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#include "include/secp256k1.h" - -#include "util.h" -#include "num_impl.h" -#include "field_impl.h" -#include "scalar_impl.h" -#include "group_impl.h" -#include "ecmult_impl.h" -#include "ecmult_const_impl.h" -#include "ecmult_gen_impl.h" -#include "ecdsa_impl.h" -#include "eckey_impl.h" -#include "hash_impl.h" - -#define ARG_CHECK(cond) do { \ - if (EXPECT(!(cond), 0)) { \ - secp256k1_callback_call(&ctx->illegal_callback, #cond); \ - return 0; \ - } \ -} while(0) - -static void default_illegal_callback_fn(const char* str, void* data) { - (void)data; - fprintf(stderr, "[libsecp256k1] illegal argument: %s\n", str); - abort(); -} - -static const secp256k1_callback default_illegal_callback = { - default_illegal_callback_fn, - NULL -}; - -static void default_error_callback_fn(const char* str, void* data) { - (void)data; - fprintf(stderr, "[libsecp256k1] internal consistency check failed: %s\n", str); - abort(); -} - -static const secp256k1_callback default_error_callback = { - default_error_callback_fn, - NULL -}; - - -struct secp256k1_context_struct { - secp256k1_ecmult_context ecmult_ctx; - secp256k1_ecmult_gen_context ecmult_gen_ctx; - secp256k1_callback illegal_callback; - secp256k1_callback error_callback; -}; - -secp256k1_context* secp256k1_context_create(unsigned int flags) { - secp256k1_context* ret = (secp256k1_context*)checked_malloc(&default_error_callback, sizeof(secp256k1_context)); - ret->illegal_callback = default_illegal_callback; - ret->error_callback = default_error_callback; - - if (EXPECT((flags & SECP256K1_FLAGS_TYPE_MASK) != SECP256K1_FLAGS_TYPE_CONTEXT, 0)) { - secp256k1_callback_call(&ret->illegal_callback, - "Invalid flags"); - free(ret); - return NULL; - } - - secp256k1_ecmult_context_init(&ret->ecmult_ctx); - secp256k1_ecmult_gen_context_init(&ret->ecmult_gen_ctx); - - if (flags & SECP256K1_FLAGS_BIT_CONTEXT_SIGN) { - secp256k1_ecmult_gen_context_build(&ret->ecmult_gen_ctx, &ret->error_callback); - } - if (flags & SECP256K1_FLAGS_BIT_CONTEXT_VERIFY) { - secp256k1_ecmult_context_build(&ret->ecmult_ctx, &ret->error_callback); - } - - return ret; -} - -secp256k1_context* secp256k1_context_clone(const secp256k1_context* ctx) { - secp256k1_context* ret = (secp256k1_context*)checked_malloc(&ctx->error_callback, sizeof(secp256k1_context)); - ret->illegal_callback = ctx->illegal_callback; - ret->error_callback = ctx->error_callback; - secp256k1_ecmult_context_clone(&ret->ecmult_ctx, &ctx->ecmult_ctx, &ctx->error_callback); - secp256k1_ecmult_gen_context_clone(&ret->ecmult_gen_ctx, &ctx->ecmult_gen_ctx, &ctx->error_callback); - return ret; -} - -void secp256k1_context_destroy(secp256k1_context* ctx) { - if (ctx != NULL) { - secp256k1_ecmult_context_clear(&ctx->ecmult_ctx); - secp256k1_ecmult_gen_context_clear(&ctx->ecmult_gen_ctx); - - free(ctx); - } -} - -void secp256k1_context_set_illegal_callback(secp256k1_context* ctx, void (*fun)(const char* message, void* data), const void* data) { - if (fun == NULL) { - fun = default_illegal_callback_fn; - } - ctx->illegal_callback.fn = fun; - ctx->illegal_callback.data = data; -} - -void secp256k1_context_set_error_callback(secp256k1_context* ctx, void (*fun)(const char* message, void* data), const void* data) { - if (fun == NULL) { - fun = default_error_callback_fn; - } - ctx->error_callback.fn = fun; - ctx->error_callback.data = data; -} - -static int secp256k1_pubkey_load(const secp256k1_context* ctx, secp256k1_ge* ge, const secp256k1_pubkey* pubkey) { - if (sizeof(secp256k1_ge_storage) == 64) { - /* When the secp256k1_ge_storage type is exactly 64 byte, use its - * representation inside secp256k1_pubkey, as conversion is very fast. - * Note that secp256k1_pubkey_save must use the same representation. */ - secp256k1_ge_storage s; - memcpy(&s, &pubkey->data[0], 64); - secp256k1_ge_from_storage(ge, &s); - } else { - /* Otherwise, fall back to 32-byte big endian for X and Y. */ - secp256k1_fe x, y; - secp256k1_fe_set_b32(&x, pubkey->data); - secp256k1_fe_set_b32(&y, pubkey->data + 32); - secp256k1_ge_set_xy(ge, &x, &y); - } - ARG_CHECK(!secp256k1_fe_is_zero(&ge->x)); - return 1; -} - -static void secp256k1_pubkey_save(secp256k1_pubkey* pubkey, secp256k1_ge* ge) { - if (sizeof(secp256k1_ge_storage) == 64) { - secp256k1_ge_storage s; - secp256k1_ge_to_storage(&s, ge); - memcpy(&pubkey->data[0], &s, 64); - } else { - VERIFY_CHECK(!secp256k1_ge_is_infinity(ge)); - secp256k1_fe_normalize_var(&ge->x); - secp256k1_fe_normalize_var(&ge->y); - secp256k1_fe_get_b32(pubkey->data, &ge->x); - secp256k1_fe_get_b32(pubkey->data + 32, &ge->y); - } -} - -int secp256k1_ec_pubkey_parse(const secp256k1_context* ctx, secp256k1_pubkey* pubkey, const unsigned char *input, size_t inputlen) { - secp256k1_ge Q; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(pubkey != NULL); - memset(pubkey, 0, sizeof(*pubkey)); - ARG_CHECK(input != NULL); - if (!secp256k1_eckey_pubkey_parse(&Q, input, inputlen)) { - return 0; - } - secp256k1_pubkey_save(pubkey, &Q); - secp256k1_ge_clear(&Q); - return 1; -} - -int secp256k1_ec_pubkey_serialize(const secp256k1_context* ctx, unsigned char *output, size_t *outputlen, const secp256k1_pubkey* pubkey, unsigned int flags) { - secp256k1_ge Q; - size_t len; - int ret = 0; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(outputlen != NULL); - ARG_CHECK(*outputlen >= ((flags & SECP256K1_FLAGS_BIT_COMPRESSION) ? 33 : 65)); - len = *outputlen; - *outputlen = 0; - ARG_CHECK(output != NULL); - memset(output, 0, len); - ARG_CHECK(pubkey != NULL); - ARG_CHECK((flags & SECP256K1_FLAGS_TYPE_MASK) == SECP256K1_FLAGS_TYPE_COMPRESSION); - if (secp256k1_pubkey_load(ctx, &Q, pubkey)) { - ret = secp256k1_eckey_pubkey_serialize(&Q, output, &len, flags & SECP256K1_FLAGS_BIT_COMPRESSION); - if (ret) { - *outputlen = len; - } - } - return ret; -} - -static void secp256k1_ecdsa_signature_load(const secp256k1_context* ctx, secp256k1_scalar* r, secp256k1_scalar* s, const secp256k1_ecdsa_signature* sig) { - (void)ctx; - if (sizeof(secp256k1_scalar) == 32) { - /* When the secp256k1_scalar type is exactly 32 byte, use its - * representation inside secp256k1_ecdsa_signature, as conversion is very fast. - * Note that secp256k1_ecdsa_signature_save must use the same representation. */ - memcpy(r, &sig->data[0], 32); - memcpy(s, &sig->data[32], 32); - } else { - secp256k1_scalar_set_b32(r, &sig->data[0], NULL); - secp256k1_scalar_set_b32(s, &sig->data[32], NULL); - } -} - -static void secp256k1_ecdsa_signature_save(secp256k1_ecdsa_signature* sig, const secp256k1_scalar* r, const secp256k1_scalar* s) { - if (sizeof(secp256k1_scalar) == 32) { - memcpy(&sig->data[0], r, 32); - memcpy(&sig->data[32], s, 32); - } else { - secp256k1_scalar_get_b32(&sig->data[0], r); - secp256k1_scalar_get_b32(&sig->data[32], s); - } -} - -int secp256k1_ecdsa_signature_parse_der(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input, size_t inputlen) { - secp256k1_scalar r, s; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(sig != NULL); - ARG_CHECK(input != NULL); - - if (secp256k1_ecdsa_sig_parse(&r, &s, input, inputlen)) { - secp256k1_ecdsa_signature_save(sig, &r, &s); - return 1; - } else { - memset(sig, 0, sizeof(*sig)); - return 0; - } -} - -int secp256k1_ecdsa_signature_parse_compact(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input64) { - secp256k1_scalar r, s; - int ret = 1; - int overflow = 0; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(sig != NULL); - ARG_CHECK(input64 != NULL); - - secp256k1_scalar_set_b32(&r, &input64[0], &overflow); - ret &= !overflow; - secp256k1_scalar_set_b32(&s, &input64[32], &overflow); - ret &= !overflow; - if (ret) { - secp256k1_ecdsa_signature_save(sig, &r, &s); - } else { - memset(sig, 0, sizeof(*sig)); - } - return ret; -} - -int secp256k1_ecdsa_signature_serialize_der(const secp256k1_context* ctx, unsigned char *output, size_t *outputlen, const secp256k1_ecdsa_signature* sig) { - secp256k1_scalar r, s; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(output != NULL); - ARG_CHECK(outputlen != NULL); - ARG_CHECK(sig != NULL); - - secp256k1_ecdsa_signature_load(ctx, &r, &s, sig); - return secp256k1_ecdsa_sig_serialize(output, outputlen, &r, &s); -} - -int secp256k1_ecdsa_signature_serialize_compact(const secp256k1_context* ctx, unsigned char *output64, const secp256k1_ecdsa_signature* sig) { - secp256k1_scalar r, s; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(output64 != NULL); - ARG_CHECK(sig != NULL); - - secp256k1_ecdsa_signature_load(ctx, &r, &s, sig); - secp256k1_scalar_get_b32(&output64[0], &r); - secp256k1_scalar_get_b32(&output64[32], &s); - return 1; -} - -int secp256k1_ecdsa_signature_normalize(const secp256k1_context* ctx, secp256k1_ecdsa_signature *sigout, const secp256k1_ecdsa_signature *sigin) { - secp256k1_scalar r, s; - int ret = 0; - - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(sigin != NULL); - - secp256k1_ecdsa_signature_load(ctx, &r, &s, sigin); - ret = secp256k1_scalar_is_high(&s); - if (sigout != NULL) { - if (ret) { - secp256k1_scalar_negate(&s, &s); - } - secp256k1_ecdsa_signature_save(sigout, &r, &s); - } - - return ret; -} - -int secp256k1_ecdsa_verify(const secp256k1_context* ctx, const secp256k1_ecdsa_signature *sig, const unsigned char *msg32, const secp256k1_pubkey *pubkey) { - secp256k1_ge q; - secp256k1_scalar r, s; - secp256k1_scalar m; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(sig != NULL); - ARG_CHECK(pubkey != NULL); - - secp256k1_scalar_set_b32(&m, msg32, NULL); - secp256k1_ecdsa_signature_load(ctx, &r, &s, sig); - return (!secp256k1_scalar_is_high(&s) && - secp256k1_pubkey_load(ctx, &q, pubkey) && - secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &r, &s, &q, &m)); -} - -static int nonce_function_rfc6979(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) { - unsigned char keydata[112]; - int keylen = 64; - secp256k1_rfc6979_hmac_sha256_t rng; - unsigned int i; - /* We feed a byte array to the PRNG as input, consisting of: - * - the private key (32 bytes) and message (32 bytes), see RFC 6979 3.2d. - * - optionally 32 extra bytes of data, see RFC 6979 3.6 Additional Data. - * - optionally 16 extra bytes with the algorithm name. - * Because the arguments have distinct fixed lengths it is not possible for - * different argument mixtures to emulate each other and result in the same - * nonces. - */ - memcpy(keydata, key32, 32); - memcpy(keydata + 32, msg32, 32); - if (data != NULL) { - memcpy(keydata + 64, data, 32); - keylen = 96; - } - if (algo16 != NULL) { - memcpy(keydata + keylen, algo16, 16); - keylen += 16; - } - secp256k1_rfc6979_hmac_sha256_initialize(&rng, keydata, keylen); - memset(keydata, 0, sizeof(keydata)); - for (i = 0; i <= counter; i++) { - secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32); - } - secp256k1_rfc6979_hmac_sha256_finalize(&rng); - return 1; -} - -const secp256k1_nonce_function secp256k1_nonce_function_rfc6979 = nonce_function_rfc6979; -const secp256k1_nonce_function secp256k1_nonce_function_default = nonce_function_rfc6979; - -int secp256k1_ecdsa_sign(const secp256k1_context* ctx, secp256k1_ecdsa_signature *signature, const unsigned char *msg32, const unsigned char *seckey, secp256k1_nonce_function noncefp, const void* noncedata) { - secp256k1_scalar r, s; - secp256k1_scalar sec, non, msg; - int ret = 0; - int overflow = 0; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); - ARG_CHECK(msg32 != NULL); - ARG_CHECK(signature != NULL); - ARG_CHECK(seckey != NULL); - if (noncefp == NULL) { - noncefp = secp256k1_nonce_function_default; - } - - secp256k1_scalar_set_b32(&sec, seckey, &overflow); - /* Fail if the secret key is invalid. */ - if (!overflow && !secp256k1_scalar_is_zero(&sec)) { - unsigned int count = 0; - secp256k1_scalar_set_b32(&msg, msg32, NULL); - while (1) { - unsigned char nonce32[32]; - ret = noncefp(nonce32, msg32, seckey, NULL, (void*)noncedata, count); - if (!ret) { - break; - } - secp256k1_scalar_set_b32(&non, nonce32, &overflow); - memset(nonce32, 0, 32); - if (!overflow && !secp256k1_scalar_is_zero(&non)) { - if (secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, &r, &s, &sec, &msg, &non, NULL)) { - break; - } - } - count++; - } - secp256k1_scalar_clear(&msg); - secp256k1_scalar_clear(&non); - secp256k1_scalar_clear(&sec); - } - if (ret) { - secp256k1_ecdsa_signature_save(signature, &r, &s); - } else { - memset(signature, 0, sizeof(*signature)); - } - return ret; -} - -int secp256k1_ec_seckey_verify(const secp256k1_context* ctx, const unsigned char *seckey) { - secp256k1_scalar sec; - int ret; - int overflow; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(seckey != NULL); - - secp256k1_scalar_set_b32(&sec, seckey, &overflow); - ret = !overflow && !secp256k1_scalar_is_zero(&sec); - secp256k1_scalar_clear(&sec); - return ret; -} - -int secp256k1_ec_pubkey_create(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *seckey) { - secp256k1_gej pj; - secp256k1_ge p; - secp256k1_scalar sec; - int overflow; - int ret = 0; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(pubkey != NULL); - memset(pubkey, 0, sizeof(*pubkey)); - ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); - ARG_CHECK(seckey != NULL); - - secp256k1_scalar_set_b32(&sec, seckey, &overflow); - ret = (!overflow) & (!secp256k1_scalar_is_zero(&sec)); - if (ret) { - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec); - secp256k1_ge_set_gej(&p, &pj); - secp256k1_pubkey_save(pubkey, &p); - } - secp256k1_scalar_clear(&sec); - return ret; -} - -int secp256k1_ec_privkey_tweak_add(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) { - secp256k1_scalar term; - secp256k1_scalar sec; - int ret = 0; - int overflow = 0; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(seckey != NULL); - ARG_CHECK(tweak != NULL); - - secp256k1_scalar_set_b32(&term, tweak, &overflow); - secp256k1_scalar_set_b32(&sec, seckey, NULL); - - ret = !overflow && secp256k1_eckey_privkey_tweak_add(&sec, &term); - memset(seckey, 0, 32); - if (ret) { - secp256k1_scalar_get_b32(seckey, &sec); - } - - secp256k1_scalar_clear(&sec); - secp256k1_scalar_clear(&term); - return ret; -} - -int secp256k1_ec_pubkey_tweak_add(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) { - secp256k1_ge p; - secp256k1_scalar term; - int ret = 0; - int overflow = 0; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx)); - ARG_CHECK(pubkey != NULL); - ARG_CHECK(tweak != NULL); - - secp256k1_scalar_set_b32(&term, tweak, &overflow); - ret = !overflow && secp256k1_pubkey_load(ctx, &p, pubkey); - memset(pubkey, 0, sizeof(*pubkey)); - if (ret) { - if (secp256k1_eckey_pubkey_tweak_add(&ctx->ecmult_ctx, &p, &term)) { - secp256k1_pubkey_save(pubkey, &p); - } else { - ret = 0; - } - } - - return ret; -} - -int secp256k1_ec_privkey_tweak_mul(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) { - secp256k1_scalar factor; - secp256k1_scalar sec; - int ret = 0; - int overflow = 0; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(seckey != NULL); - ARG_CHECK(tweak != NULL); - - secp256k1_scalar_set_b32(&factor, tweak, &overflow); - secp256k1_scalar_set_b32(&sec, seckey, NULL); - ret = !overflow && secp256k1_eckey_privkey_tweak_mul(&sec, &factor); - memset(seckey, 0, 32); - if (ret) { - secp256k1_scalar_get_b32(seckey, &sec); - } - - secp256k1_scalar_clear(&sec); - secp256k1_scalar_clear(&factor); - return ret; -} - -int secp256k1_ec_pubkey_tweak_mul(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) { - secp256k1_ge p; - secp256k1_scalar factor; - int ret = 0; - int overflow = 0; - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx)); - ARG_CHECK(pubkey != NULL); - ARG_CHECK(tweak != NULL); - - secp256k1_scalar_set_b32(&factor, tweak, &overflow); - ret = !overflow && secp256k1_pubkey_load(ctx, &p, pubkey); - memset(pubkey, 0, sizeof(*pubkey)); - if (ret) { - if (secp256k1_eckey_pubkey_tweak_mul(&ctx->ecmult_ctx, &p, &factor)) { - secp256k1_pubkey_save(pubkey, &p); - } else { - ret = 0; - } - } - - return ret; -} - -int secp256k1_context_randomize(secp256k1_context* ctx, const unsigned char *seed32) { - VERIFY_CHECK(ctx != NULL); - ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); - secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, seed32); - return 1; -} - -int secp256k1_ec_pubkey_combine(const secp256k1_context* ctx, secp256k1_pubkey *pubnonce, const secp256k1_pubkey * const *pubnonces, size_t n) { - size_t i; - secp256k1_gej Qj; - secp256k1_ge Q; - - ARG_CHECK(pubnonce != NULL); - memset(pubnonce, 0, sizeof(*pubnonce)); - ARG_CHECK(n >= 1); - ARG_CHECK(pubnonces != NULL); - - secp256k1_gej_set_infinity(&Qj); - - for (i = 0; i < n; i++) { - secp256k1_pubkey_load(ctx, &Q, pubnonces[i]); - secp256k1_gej_add_ge(&Qj, &Qj, &Q); - } - if (secp256k1_gej_is_infinity(&Qj)) { - return 0; - } - secp256k1_ge_set_gej(&Q, &Qj); - secp256k1_pubkey_save(pubnonce, &Q); - return 1; -} - -#ifdef ENABLE_MODULE_ECDH -# include "modules/ecdh/main_impl.h" -#endif - -#ifdef ENABLE_MODULE_SCHNORR -# include "modules/schnorr/main_impl.h" -#endif - -#ifdef ENABLE_MODULE_RECOVERY -# include "modules/recovery/main_impl.h" -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/testrand.h b/node_modules/secp256k1/src/secp256k1-src/src/testrand.h deleted file mode 100644 index f8efa93..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/testrand.h +++ /dev/null @@ -1,38 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_TESTRAND_H_ -#define _SECP256K1_TESTRAND_H_ - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -/* A non-cryptographic RNG used only for test infrastructure. */ - -/** Seed the pseudorandom number generator for testing. */ -SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16); - -/** Generate a pseudorandom number in the range [0..2**32-1]. */ -static uint32_t secp256k1_rand32(void); - -/** Generate a pseudorandom number in the range [0..2**bits-1]. Bits must be 1 or - * more. */ -static uint32_t secp256k1_rand_bits(int bits); - -/** Generate a pseudorandom number in the range [0..range-1]. */ -static uint32_t secp256k1_rand_int(uint32_t range); - -/** Generate a pseudorandom 32-byte array. */ -static void secp256k1_rand256(unsigned char *b32); - -/** Generate a pseudorandom 32-byte array with long sequences of zero and one bits. */ -static void secp256k1_rand256_test(unsigned char *b32); - -/** Generate pseudorandom bytes with long sequences of zero and one bits. */ -static void secp256k1_rand_bytes_test(unsigned char *bytes, size_t len); - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/testrand_impl.h b/node_modules/secp256k1/src/secp256k1-src/src/testrand_impl.h deleted file mode 100644 index 15c7b9f..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/testrand_impl.h +++ /dev/null @@ -1,110 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013-2015 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_TESTRAND_IMPL_H_ -#define _SECP256K1_TESTRAND_IMPL_H_ - -#include -#include - -#include "testrand.h" -#include "hash.h" - -static secp256k1_rfc6979_hmac_sha256_t secp256k1_test_rng; -static uint32_t secp256k1_test_rng_precomputed[8]; -static int secp256k1_test_rng_precomputed_used = 8; -static uint64_t secp256k1_test_rng_integer; -static int secp256k1_test_rng_integer_bits_left = 0; - -SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16) { - secp256k1_rfc6979_hmac_sha256_initialize(&secp256k1_test_rng, seed16, 16); -} - -SECP256K1_INLINE static uint32_t secp256k1_rand32(void) { - if (secp256k1_test_rng_precomputed_used == 8) { - secp256k1_rfc6979_hmac_sha256_generate(&secp256k1_test_rng, (unsigned char*)(&secp256k1_test_rng_precomputed[0]), sizeof(secp256k1_test_rng_precomputed)); - secp256k1_test_rng_precomputed_used = 0; - } - return secp256k1_test_rng_precomputed[secp256k1_test_rng_precomputed_used++]; -} - -static uint32_t secp256k1_rand_bits(int bits) { - uint32_t ret; - if (secp256k1_test_rng_integer_bits_left < bits) { - secp256k1_test_rng_integer |= (((uint64_t)secp256k1_rand32()) << secp256k1_test_rng_integer_bits_left); - secp256k1_test_rng_integer_bits_left += 32; - } - ret = secp256k1_test_rng_integer; - secp256k1_test_rng_integer >>= bits; - secp256k1_test_rng_integer_bits_left -= bits; - ret &= ((~((uint32_t)0)) >> (32 - bits)); - return ret; -} - -static uint32_t secp256k1_rand_int(uint32_t range) { - /* We want a uniform integer between 0 and range-1, inclusive. - * B is the smallest number such that range <= 2**B. - * two mechanisms implemented here: - * - generate B bits numbers until one below range is found, and return it - * - find the largest multiple M of range that is <= 2**(B+A), generate B+A - * bits numbers until one below M is found, and return it modulo range - * The second mechanism consumes A more bits of entropy in every iteration, - * but may need fewer iterations due to M being closer to 2**(B+A) then - * range is to 2**B. The array below (indexed by B) contains a 0 when the - * first mechanism is to be used, and the number A otherwise. - */ - static const int addbits[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0}; - uint32_t trange, mult; - int bits = 0; - if (range <= 1) { - return 0; - } - trange = range - 1; - while (trange > 0) { - trange >>= 1; - bits++; - } - if (addbits[bits]) { - bits = bits + addbits[bits]; - mult = ((~((uint32_t)0)) >> (32 - bits)) / range; - trange = range * mult; - } else { - trange = range; - mult = 1; - } - while(1) { - uint32_t x = secp256k1_rand_bits(bits); - if (x < trange) { - return (mult == 1) ? x : (x % range); - } - } -} - -static void secp256k1_rand256(unsigned char *b32) { - secp256k1_rfc6979_hmac_sha256_generate(&secp256k1_test_rng, b32, 32); -} - -static void secp256k1_rand_bytes_test(unsigned char *bytes, size_t len) { - size_t bits = 0; - memset(bytes, 0, len); - while (bits < len * 8) { - int now; - uint32_t val; - now = 1 + (secp256k1_rand_bits(6) * secp256k1_rand_bits(5) + 16) / 31; - val = secp256k1_rand_bits(1); - while (now > 0 && bits < len * 8) { - bytes[bits / 8] |= val << (bits % 8); - now--; - bits++; - } - } -} - -static void secp256k1_rand256_test(unsigned char *b32) { - secp256k1_rand_bytes_test(b32, 32); -} - -#endif diff --git a/node_modules/secp256k1/src/secp256k1-src/src/tests.c b/node_modules/secp256k1/src/secp256k1-src/src/tests.c deleted file mode 100644 index b32cb90..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/tests.c +++ /dev/null @@ -1,4525 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#include -#include - -#include - -#include "secp256k1.c" -#include "include/secp256k1.h" -#include "testrand_impl.h" - -#ifdef ENABLE_OPENSSL_TESTS -#include "openssl/bn.h" -#include "openssl/ec.h" -#include "openssl/ecdsa.h" -#include "openssl/obj_mac.h" -#endif - -#include "contrib/lax_der_parsing.c" -#include "contrib/lax_der_privatekey_parsing.c" - -#if !defined(VG_CHECK) -# if defined(VALGRIND) -# include -# define VG_UNDEF(x,y) VALGRIND_MAKE_MEM_UNDEFINED((x),(y)) -# define VG_CHECK(x,y) VALGRIND_CHECK_MEM_IS_DEFINED((x),(y)) -# else -# define VG_UNDEF(x,y) -# define VG_CHECK(x,y) -# endif -#endif - -static int count = 64; -static secp256k1_context *ctx = NULL; - -static void counting_illegal_callback_fn(const char* str, void* data) { - /* Dummy callback function that just counts. */ - int32_t *p; - (void)str; - p = data; - (*p)++; -} - -static void uncounting_illegal_callback_fn(const char* str, void* data) { - /* Dummy callback function that just counts (backwards). */ - int32_t *p; - (void)str; - p = data; - (*p)--; -} - -void random_field_element_test(secp256k1_fe *fe) { - do { - unsigned char b32[32]; - secp256k1_rand256_test(b32); - if (secp256k1_fe_set_b32(fe, b32)) { - break; - } - } while(1); -} - -void random_field_element_magnitude(secp256k1_fe *fe) { - secp256k1_fe zero; - int n = secp256k1_rand_int(9); - secp256k1_fe_normalize(fe); - if (n == 0) { - return; - } - secp256k1_fe_clear(&zero); - secp256k1_fe_negate(&zero, &zero, 0); - secp256k1_fe_mul_int(&zero, n - 1); - secp256k1_fe_add(fe, &zero); - VERIFY_CHECK(fe->magnitude == n); -} - -void random_group_element_test(secp256k1_ge *ge) { - secp256k1_fe fe; - do { - random_field_element_test(&fe); - if (secp256k1_ge_set_xo_var(ge, &fe, secp256k1_rand_bits(1))) { - secp256k1_fe_normalize(&ge->y); - break; - } - } while(1); -} - -void random_group_element_jacobian_test(secp256k1_gej *gej, const secp256k1_ge *ge) { - secp256k1_fe z2, z3; - do { - random_field_element_test(&gej->z); - if (!secp256k1_fe_is_zero(&gej->z)) { - break; - } - } while(1); - secp256k1_fe_sqr(&z2, &gej->z); - secp256k1_fe_mul(&z3, &z2, &gej->z); - secp256k1_fe_mul(&gej->x, &ge->x, &z2); - secp256k1_fe_mul(&gej->y, &ge->y, &z3); - gej->infinity = ge->infinity; -} - -void random_scalar_order_test(secp256k1_scalar *num) { - do { - unsigned char b32[32]; - int overflow = 0; - secp256k1_rand256_test(b32); - secp256k1_scalar_set_b32(num, b32, &overflow); - if (overflow || secp256k1_scalar_is_zero(num)) { - continue; - } - break; - } while(1); -} - -void random_scalar_order(secp256k1_scalar *num) { - do { - unsigned char b32[32]; - int overflow = 0; - secp256k1_rand256(b32); - secp256k1_scalar_set_b32(num, b32, &overflow); - if (overflow || secp256k1_scalar_is_zero(num)) { - continue; - } - break; - } while(1); -} - -void run_context_tests(void) { - secp256k1_pubkey pubkey; - secp256k1_ecdsa_signature sig; - unsigned char ctmp[32]; - int32_t ecount; - int32_t ecount2; - secp256k1_context *none = secp256k1_context_create(SECP256K1_CONTEXT_NONE); - secp256k1_context *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN); - secp256k1_context *vrfy = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY); - secp256k1_context *both = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); - - secp256k1_gej pubj; - secp256k1_ge pub; - secp256k1_scalar msg, key, nonce; - secp256k1_scalar sigr, sigs; - - ecount = 0; - ecount2 = 10; - secp256k1_context_set_illegal_callback(vrfy, counting_illegal_callback_fn, &ecount); - secp256k1_context_set_illegal_callback(sign, counting_illegal_callback_fn, &ecount2); - secp256k1_context_set_error_callback(sign, counting_illegal_callback_fn, NULL); - CHECK(vrfy->error_callback.fn != sign->error_callback.fn); - - /*** clone and destroy all of them to make sure cloning was complete ***/ - { - secp256k1_context *ctx_tmp; - - ctx_tmp = none; none = secp256k1_context_clone(none); secp256k1_context_destroy(ctx_tmp); - ctx_tmp = sign; sign = secp256k1_context_clone(sign); secp256k1_context_destroy(ctx_tmp); - ctx_tmp = vrfy; vrfy = secp256k1_context_clone(vrfy); secp256k1_context_destroy(ctx_tmp); - ctx_tmp = both; both = secp256k1_context_clone(both); secp256k1_context_destroy(ctx_tmp); - } - - /* Verify that the error callback makes it across the clone. */ - CHECK(vrfy->error_callback.fn != sign->error_callback.fn); - /* And that it resets back to default. */ - secp256k1_context_set_error_callback(sign, NULL, NULL); - CHECK(vrfy->error_callback.fn == sign->error_callback.fn); - - /*** attempt to use them ***/ - random_scalar_order_test(&msg); - random_scalar_order_test(&key); - secp256k1_ecmult_gen(&both->ecmult_gen_ctx, &pubj, &key); - secp256k1_ge_set_gej(&pub, &pubj); - - /* Verify context-type checking illegal-argument errors. */ - memset(ctmp, 1, 32); - CHECK(secp256k1_ec_pubkey_create(vrfy, &pubkey, ctmp) == 0); - CHECK(ecount == 1); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_create(sign, &pubkey, ctmp) == 1); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ecdsa_sign(vrfy, &sig, ctmp, ctmp, NULL, NULL) == 0); - CHECK(ecount == 2); - VG_UNDEF(&sig, sizeof(sig)); - CHECK(secp256k1_ecdsa_sign(sign, &sig, ctmp, ctmp, NULL, NULL) == 1); - VG_CHECK(&sig, sizeof(sig)); - CHECK(ecount2 == 10); - CHECK(secp256k1_ecdsa_verify(sign, &sig, ctmp, &pubkey) == 0); - CHECK(ecount2 == 11); - CHECK(secp256k1_ecdsa_verify(vrfy, &sig, ctmp, &pubkey) == 1); - CHECK(ecount == 2); - CHECK(secp256k1_ec_pubkey_tweak_add(sign, &pubkey, ctmp) == 0); - CHECK(ecount2 == 12); - CHECK(secp256k1_ec_pubkey_tweak_add(vrfy, &pubkey, ctmp) == 1); - CHECK(ecount == 2); - CHECK(secp256k1_ec_pubkey_tweak_mul(sign, &pubkey, ctmp) == 0); - CHECK(ecount2 == 13); - CHECK(secp256k1_ec_pubkey_tweak_mul(vrfy, &pubkey, ctmp) == 1); - CHECK(ecount == 2); - CHECK(secp256k1_context_randomize(vrfy, ctmp) == 0); - CHECK(ecount == 3); - CHECK(secp256k1_context_randomize(sign, NULL) == 1); - CHECK(ecount2 == 13); - secp256k1_context_set_illegal_callback(vrfy, NULL, NULL); - secp256k1_context_set_illegal_callback(sign, NULL, NULL); - - /* This shouldn't leak memory, due to already-set tests. */ - secp256k1_ecmult_gen_context_build(&sign->ecmult_gen_ctx, NULL); - secp256k1_ecmult_context_build(&vrfy->ecmult_ctx, NULL); - - /* obtain a working nonce */ - do { - random_scalar_order_test(&nonce); - } while(!secp256k1_ecdsa_sig_sign(&both->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL)); - - /* try signing */ - CHECK(secp256k1_ecdsa_sig_sign(&sign->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL)); - CHECK(secp256k1_ecdsa_sig_sign(&both->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL)); - - /* try verifying */ - CHECK(secp256k1_ecdsa_sig_verify(&vrfy->ecmult_ctx, &sigr, &sigs, &pub, &msg)); - CHECK(secp256k1_ecdsa_sig_verify(&both->ecmult_ctx, &sigr, &sigs, &pub, &msg)); - - /* cleanup */ - secp256k1_context_destroy(none); - secp256k1_context_destroy(sign); - secp256k1_context_destroy(vrfy); - secp256k1_context_destroy(both); - /* Defined as no-op. */ - secp256k1_context_destroy(NULL); -} - -/***** HASH TESTS *****/ - -void run_sha256_tests(void) { - static const char *inputs[8] = { - "", "abc", "message digest", "secure hash algorithm", "SHA256 is considered to be safe", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - "For this sample, this 63-byte string will be used as input data", - "This is exactly 64 bytes long, not counting the terminating byte" - }; - static const unsigned char outputs[8][32] = { - {0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}, - {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad}, - {0xf7, 0x84, 0x6f, 0x55, 0xcf, 0x23, 0xe1, 0x4e, 0xeb, 0xea, 0xb5, 0xb4, 0xe1, 0x55, 0x0c, 0xad, 0x5b, 0x50, 0x9e, 0x33, 0x48, 0xfb, 0xc4, 0xef, 0xa3, 0xa1, 0x41, 0x3d, 0x39, 0x3c, 0xb6, 0x50}, - {0xf3, 0x0c, 0xeb, 0x2b, 0xb2, 0x82, 0x9e, 0x79, 0xe4, 0xca, 0x97, 0x53, 0xd3, 0x5a, 0x8e, 0xcc, 0x00, 0x26, 0x2d, 0x16, 0x4c, 0xc0, 0x77, 0x08, 0x02, 0x95, 0x38, 0x1c, 0xbd, 0x64, 0x3f, 0x0d}, - {0x68, 0x19, 0xd9, 0x15, 0xc7, 0x3f, 0x4d, 0x1e, 0x77, 0xe4, 0xe1, 0xb5, 0x2d, 0x1f, 0xa0, 0xf9, 0xcf, 0x9b, 0xea, 0xea, 0xd3, 0x93, 0x9f, 0x15, 0x87, 0x4b, 0xd9, 0x88, 0xe2, 0xa2, 0x36, 0x30}, - {0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39, 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1}, - {0xf0, 0x8a, 0x78, 0xcb, 0xba, 0xee, 0x08, 0x2b, 0x05, 0x2a, 0xe0, 0x70, 0x8f, 0x32, 0xfa, 0x1e, 0x50, 0xc5, 0xc4, 0x21, 0xaa, 0x77, 0x2b, 0xa5, 0xdb, 0xb4, 0x06, 0xa2, 0xea, 0x6b, 0xe3, 0x42}, - {0xab, 0x64, 0xef, 0xf7, 0xe8, 0x8e, 0x2e, 0x46, 0x16, 0x5e, 0x29, 0xf2, 0xbc, 0xe4, 0x18, 0x26, 0xbd, 0x4c, 0x7b, 0x35, 0x52, 0xf6, 0xb3, 0x82, 0xa9, 0xe7, 0xd3, 0xaf, 0x47, 0xc2, 0x45, 0xf8} - }; - int i; - for (i = 0; i < 8; i++) { - unsigned char out[32]; - secp256k1_sha256_t hasher; - secp256k1_sha256_initialize(&hasher); - secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i]), strlen(inputs[i])); - secp256k1_sha256_finalize(&hasher, out); - CHECK(memcmp(out, outputs[i], 32) == 0); - if (strlen(inputs[i]) > 0) { - int split = secp256k1_rand_int(strlen(inputs[i])); - secp256k1_sha256_initialize(&hasher); - secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i]), split); - secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i] + split), strlen(inputs[i]) - split); - secp256k1_sha256_finalize(&hasher, out); - CHECK(memcmp(out, outputs[i], 32) == 0); - } - } -} - -void run_hmac_sha256_tests(void) { - static const char *keys[6] = { - "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", - "\x4a\x65\x66\x65", - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", - "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" - }; - static const char *inputs[6] = { - "\x48\x69\x20\x54\x68\x65\x72\x65", - "\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20\x6e\x6f\x74\x68\x69\x6e\x67\x3f", - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", - "\x54\x65\x73\x74\x20\x55\x73\x69\x6e\x67\x20\x4c\x61\x72\x67\x65\x72\x20\x54\x68\x61\x6e\x20\x42\x6c\x6f\x63\x6b\x2d\x53\x69\x7a\x65\x20\x4b\x65\x79\x20\x2d\x20\x48\x61\x73\x68\x20\x4b\x65\x79\x20\x46\x69\x72\x73\x74", - "\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68\x6d\x2e" - }; - static const unsigned char outputs[6][32] = { - {0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7}, - {0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e, 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7, 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83, 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43}, - {0x77, 0x3e, 0xa9, 0x1e, 0x36, 0x80, 0x0e, 0x46, 0x85, 0x4d, 0xb8, 0xeb, 0xd0, 0x91, 0x81, 0xa7, 0x29, 0x59, 0x09, 0x8b, 0x3e, 0xf8, 0xc1, 0x22, 0xd9, 0x63, 0x55, 0x14, 0xce, 0xd5, 0x65, 0xfe}, - {0x82, 0x55, 0x8a, 0x38, 0x9a, 0x44, 0x3c, 0x0e, 0xa4, 0xcc, 0x81, 0x98, 0x99, 0xf2, 0x08, 0x3a, 0x85, 0xf0, 0xfa, 0xa3, 0xe5, 0x78, 0xf8, 0x07, 0x7a, 0x2e, 0x3f, 0xf4, 0x67, 0x29, 0x66, 0x5b}, - {0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f, 0x0d, 0x8a, 0x26, 0xaa, 0xcb, 0xf5, 0xb7, 0x7f, 0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28, 0xc5, 0x14, 0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54}, - {0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb, 0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44, 0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93, 0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2} - }; - int i; - for (i = 0; i < 6; i++) { - secp256k1_hmac_sha256_t hasher; - unsigned char out[32]; - secp256k1_hmac_sha256_initialize(&hasher, (const unsigned char*)(keys[i]), strlen(keys[i])); - secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i]), strlen(inputs[i])); - secp256k1_hmac_sha256_finalize(&hasher, out); - CHECK(memcmp(out, outputs[i], 32) == 0); - if (strlen(inputs[i]) > 0) { - int split = secp256k1_rand_int(strlen(inputs[i])); - secp256k1_hmac_sha256_initialize(&hasher, (const unsigned char*)(keys[i]), strlen(keys[i])); - secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i]), split); - secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i] + split), strlen(inputs[i]) - split); - secp256k1_hmac_sha256_finalize(&hasher, out); - CHECK(memcmp(out, outputs[i], 32) == 0); - } - } -} - -void run_rfc6979_hmac_sha256_tests(void) { - static const unsigned char key1[65] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x00, 0x4b, 0xf5, 0x12, 0x2f, 0x34, 0x45, 0x54, 0xc5, 0x3b, 0xde, 0x2e, 0xbb, 0x8c, 0xd2, 0xb7, 0xe3, 0xd1, 0x60, 0x0a, 0xd6, 0x31, 0xc3, 0x85, 0xa5, 0xd7, 0xcc, 0xe2, 0x3c, 0x77, 0x85, 0x45, 0x9a, 0}; - static const unsigned char out1[3][32] = { - {0x4f, 0xe2, 0x95, 0x25, 0xb2, 0x08, 0x68, 0x09, 0x15, 0x9a, 0xcd, 0xf0, 0x50, 0x6e, 0xfb, 0x86, 0xb0, 0xec, 0x93, 0x2c, 0x7b, 0xa4, 0x42, 0x56, 0xab, 0x32, 0x1e, 0x42, 0x1e, 0x67, 0xe9, 0xfb}, - {0x2b, 0xf0, 0xff, 0xf1, 0xd3, 0xc3, 0x78, 0xa2, 0x2d, 0xc5, 0xde, 0x1d, 0x85, 0x65, 0x22, 0x32, 0x5c, 0x65, 0xb5, 0x04, 0x49, 0x1a, 0x0c, 0xbd, 0x01, 0xcb, 0x8f, 0x3a, 0xa6, 0x7f, 0xfd, 0x4a}, - {0xf5, 0x28, 0xb4, 0x10, 0xcb, 0x54, 0x1f, 0x77, 0x00, 0x0d, 0x7a, 0xfb, 0x6c, 0x5b, 0x53, 0xc5, 0xc4, 0x71, 0xea, 0xb4, 0x3e, 0x46, 0x6d, 0x9a, 0xc5, 0x19, 0x0c, 0x39, 0xc8, 0x2f, 0xd8, 0x2e} - }; - - static const unsigned char key2[64] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}; - static const unsigned char out2[3][32] = { - {0x9c, 0x23, 0x6c, 0x16, 0x5b, 0x82, 0xae, 0x0c, 0xd5, 0x90, 0x65, 0x9e, 0x10, 0x0b, 0x6b, 0xab, 0x30, 0x36, 0xe7, 0xba, 0x8b, 0x06, 0x74, 0x9b, 0xaf, 0x69, 0x81, 0xe1, 0x6f, 0x1a, 0x2b, 0x95}, - {0xdf, 0x47, 0x10, 0x61, 0x62, 0x5b, 0xc0, 0xea, 0x14, 0xb6, 0x82, 0xfe, 0xee, 0x2c, 0x9c, 0x02, 0xf2, 0x35, 0xda, 0x04, 0x20, 0x4c, 0x1d, 0x62, 0xa1, 0x53, 0x6c, 0x6e, 0x17, 0xae, 0xd7, 0xa9}, - {0x75, 0x97, 0x88, 0x7c, 0xbd, 0x76, 0x32, 0x1f, 0x32, 0xe3, 0x04, 0x40, 0x67, 0x9a, 0x22, 0xcf, 0x7f, 0x8d, 0x9d, 0x2e, 0xac, 0x39, 0x0e, 0x58, 0x1f, 0xea, 0x09, 0x1c, 0xe2, 0x02, 0xba, 0x94} - }; - - secp256k1_rfc6979_hmac_sha256_t rng; - unsigned char out[32]; - int i; - - secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 64); - for (i = 0; i < 3; i++) { - secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32); - CHECK(memcmp(out, out1[i], 32) == 0); - } - secp256k1_rfc6979_hmac_sha256_finalize(&rng); - - secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 65); - for (i = 0; i < 3; i++) { - secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32); - CHECK(memcmp(out, out1[i], 32) != 0); - } - secp256k1_rfc6979_hmac_sha256_finalize(&rng); - - secp256k1_rfc6979_hmac_sha256_initialize(&rng, key2, 64); - for (i = 0; i < 3; i++) { - secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32); - CHECK(memcmp(out, out2[i], 32) == 0); - } - secp256k1_rfc6979_hmac_sha256_finalize(&rng); -} - -/***** RANDOM TESTS *****/ - -void test_rand_bits(int rand32, int bits) { - /* (1-1/2^B)^rounds[B] < 1/10^9, so rounds is the number of iterations to - * get a false negative chance below once in a billion */ - static const unsigned int rounds[7] = {1, 30, 73, 156, 322, 653, 1316}; - /* We try multiplying the results with various odd numbers, which shouldn't - * influence the uniform distribution modulo a power of 2. */ - static const uint32_t mults[6] = {1, 3, 21, 289, 0x9999, 0x80402011}; - /* We only select up to 6 bits from the output to analyse */ - unsigned int usebits = bits > 6 ? 6 : bits; - unsigned int maxshift = bits - usebits; - /* For each of the maxshift+1 usebits-bit sequences inside a bits-bit - number, track all observed outcomes, one per bit in a uint64_t. */ - uint64_t x[6][27] = {{0}}; - unsigned int i, shift, m; - /* Multiply the output of all rand calls with the odd number m, which - should not change the uniformity of its distribution. */ - for (i = 0; i < rounds[usebits]; i++) { - uint32_t r = (rand32 ? secp256k1_rand32() : secp256k1_rand_bits(bits)); - CHECK((((uint64_t)r) >> bits) == 0); - for (m = 0; m < sizeof(mults) / sizeof(mults[0]); m++) { - uint32_t rm = r * mults[m]; - for (shift = 0; shift <= maxshift; shift++) { - x[m][shift] |= (((uint64_t)1) << ((rm >> shift) & ((1 << usebits) - 1))); - } - } - } - for (m = 0; m < sizeof(mults) / sizeof(mults[0]); m++) { - for (shift = 0; shift <= maxshift; shift++) { - /* Test that the lower usebits bits of x[shift] are 1 */ - CHECK(((~x[m][shift]) << (64 - (1 << usebits))) == 0); - } - } -} - -/* Subrange must be a whole divisor of range, and at most 64 */ -void test_rand_int(uint32_t range, uint32_t subrange) { - /* (1-1/subrange)^rounds < 1/10^9 */ - int rounds = (subrange * 2073) / 100; - int i; - uint64_t x = 0; - CHECK((range % subrange) == 0); - for (i = 0; i < rounds; i++) { - uint32_t r = secp256k1_rand_int(range); - CHECK(r < range); - r = r % subrange; - x |= (((uint64_t)1) << r); - } - /* Test that the lower subrange bits of x are 1. */ - CHECK(((~x) << (64 - subrange)) == 0); -} - -void run_rand_bits(void) { - size_t b; - test_rand_bits(1, 32); - for (b = 1; b <= 32; b++) { - test_rand_bits(0, b); - } -} - -void run_rand_int(void) { - static const uint32_t ms[] = {1, 3, 17, 1000, 13771, 999999, 33554432}; - static const uint32_t ss[] = {1, 3, 6, 9, 13, 31, 64}; - unsigned int m, s; - for (m = 0; m < sizeof(ms) / sizeof(ms[0]); m++) { - for (s = 0; s < sizeof(ss) / sizeof(ss[0]); s++) { - test_rand_int(ms[m] * ss[s], ss[s]); - } - } -} - -/***** NUM TESTS *****/ - -#ifndef USE_NUM_NONE -void random_num_negate(secp256k1_num *num) { - if (secp256k1_rand_bits(1)) { - secp256k1_num_negate(num); - } -} - -void random_num_order_test(secp256k1_num *num) { - secp256k1_scalar sc; - random_scalar_order_test(&sc); - secp256k1_scalar_get_num(num, &sc); -} - -void random_num_order(secp256k1_num *num) { - secp256k1_scalar sc; - random_scalar_order(&sc); - secp256k1_scalar_get_num(num, &sc); -} - -void test_num_negate(void) { - secp256k1_num n1; - secp256k1_num n2; - random_num_order_test(&n1); /* n1 = R */ - random_num_negate(&n1); - secp256k1_num_copy(&n2, &n1); /* n2 = R */ - secp256k1_num_sub(&n1, &n2, &n1); /* n1 = n2-n1 = 0 */ - CHECK(secp256k1_num_is_zero(&n1)); - secp256k1_num_copy(&n1, &n2); /* n1 = R */ - secp256k1_num_negate(&n1); /* n1 = -R */ - CHECK(!secp256k1_num_is_zero(&n1)); - secp256k1_num_add(&n1, &n2, &n1); /* n1 = n2+n1 = 0 */ - CHECK(secp256k1_num_is_zero(&n1)); - secp256k1_num_copy(&n1, &n2); /* n1 = R */ - secp256k1_num_negate(&n1); /* n1 = -R */ - CHECK(secp256k1_num_is_neg(&n1) != secp256k1_num_is_neg(&n2)); - secp256k1_num_negate(&n1); /* n1 = R */ - CHECK(secp256k1_num_eq(&n1, &n2)); -} - -void test_num_add_sub(void) { - int i; - secp256k1_scalar s; - secp256k1_num n1; - secp256k1_num n2; - secp256k1_num n1p2, n2p1, n1m2, n2m1; - random_num_order_test(&n1); /* n1 = R1 */ - if (secp256k1_rand_bits(1)) { - random_num_negate(&n1); - } - random_num_order_test(&n2); /* n2 = R2 */ - if (secp256k1_rand_bits(1)) { - random_num_negate(&n2); - } - secp256k1_num_add(&n1p2, &n1, &n2); /* n1p2 = R1 + R2 */ - secp256k1_num_add(&n2p1, &n2, &n1); /* n2p1 = R2 + R1 */ - secp256k1_num_sub(&n1m2, &n1, &n2); /* n1m2 = R1 - R2 */ - secp256k1_num_sub(&n2m1, &n2, &n1); /* n2m1 = R2 - R1 */ - CHECK(secp256k1_num_eq(&n1p2, &n2p1)); - CHECK(!secp256k1_num_eq(&n1p2, &n1m2)); - secp256k1_num_negate(&n2m1); /* n2m1 = -R2 + R1 */ - CHECK(secp256k1_num_eq(&n2m1, &n1m2)); - CHECK(!secp256k1_num_eq(&n2m1, &n1)); - secp256k1_num_add(&n2m1, &n2m1, &n2); /* n2m1 = -R2 + R1 + R2 = R1 */ - CHECK(secp256k1_num_eq(&n2m1, &n1)); - CHECK(!secp256k1_num_eq(&n2p1, &n1)); - secp256k1_num_sub(&n2p1, &n2p1, &n2); /* n2p1 = R2 + R1 - R2 = R1 */ - CHECK(secp256k1_num_eq(&n2p1, &n1)); - - /* check is_one */ - secp256k1_scalar_set_int(&s, 1); - secp256k1_scalar_get_num(&n1, &s); - CHECK(secp256k1_num_is_one(&n1)); - /* check that 2^n + 1 is never 1 */ - secp256k1_scalar_get_num(&n2, &s); - for (i = 0; i < 250; ++i) { - secp256k1_num_add(&n1, &n1, &n1); /* n1 *= 2 */ - secp256k1_num_add(&n1p2, &n1, &n2); /* n1p2 = n1 + 1 */ - CHECK(!secp256k1_num_is_one(&n1p2)); - } -} - -void test_num_mod(void) { - int i; - secp256k1_scalar s; - secp256k1_num order, n; - - /* check that 0 mod anything is 0 */ - random_scalar_order_test(&s); - secp256k1_scalar_get_num(&order, &s); - secp256k1_scalar_set_int(&s, 0); - secp256k1_scalar_get_num(&n, &s); - secp256k1_num_mod(&n, &order); - CHECK(secp256k1_num_is_zero(&n)); - - /* check that anything mod 1 is 0 */ - secp256k1_scalar_set_int(&s, 1); - secp256k1_scalar_get_num(&order, &s); - secp256k1_scalar_get_num(&n, &s); - secp256k1_num_mod(&n, &order); - CHECK(secp256k1_num_is_zero(&n)); - - /* check that increasing the number past 2^256 does not break this */ - random_scalar_order_test(&s); - secp256k1_scalar_get_num(&n, &s); - /* multiply by 2^8, which'll test this case with high probability */ - for (i = 0; i < 8; ++i) { - secp256k1_num_add(&n, &n, &n); - } - secp256k1_num_mod(&n, &order); - CHECK(secp256k1_num_is_zero(&n)); -} - -void test_num_jacobi(void) { - secp256k1_scalar sqr; - secp256k1_scalar small; - secp256k1_scalar five; /* five is not a quadratic residue */ - secp256k1_num order, n; - int i; - /* squares mod 5 are 1, 4 */ - const int jacobi5[10] = { 0, 1, -1, -1, 1, 0, 1, -1, -1, 1 }; - - /* check some small values with 5 as the order */ - secp256k1_scalar_set_int(&five, 5); - secp256k1_scalar_get_num(&order, &five); - for (i = 0; i < 10; ++i) { - secp256k1_scalar_set_int(&small, i); - secp256k1_scalar_get_num(&n, &small); - CHECK(secp256k1_num_jacobi(&n, &order) == jacobi5[i]); - } - - /** test large values with 5 as group order */ - secp256k1_scalar_get_num(&order, &five); - /* we first need a scalar which is not a multiple of 5 */ - do { - secp256k1_num fiven; - random_scalar_order_test(&sqr); - secp256k1_scalar_get_num(&fiven, &five); - secp256k1_scalar_get_num(&n, &sqr); - secp256k1_num_mod(&n, &fiven); - } while (secp256k1_num_is_zero(&n)); - /* next force it to be a residue. 2 is a nonresidue mod 5 so we can - * just multiply by two, i.e. add the number to itself */ - if (secp256k1_num_jacobi(&n, &order) == -1) { - secp256k1_num_add(&n, &n, &n); - } - - /* test residue */ - CHECK(secp256k1_num_jacobi(&n, &order) == 1); - /* test nonresidue */ - secp256k1_num_add(&n, &n, &n); - CHECK(secp256k1_num_jacobi(&n, &order) == -1); - - /** test with secp group order as order */ - secp256k1_scalar_order_get_num(&order); - random_scalar_order_test(&sqr); - secp256k1_scalar_sqr(&sqr, &sqr); - /* test residue */ - secp256k1_scalar_get_num(&n, &sqr); - CHECK(secp256k1_num_jacobi(&n, &order) == 1); - /* test nonresidue */ - secp256k1_scalar_mul(&sqr, &sqr, &five); - secp256k1_scalar_get_num(&n, &sqr); - CHECK(secp256k1_num_jacobi(&n, &order) == -1); - /* test multiple of the order*/ - CHECK(secp256k1_num_jacobi(&order, &order) == 0); - - /* check one less than the order */ - secp256k1_scalar_set_int(&small, 1); - secp256k1_scalar_get_num(&n, &small); - secp256k1_num_sub(&n, &order, &n); - CHECK(secp256k1_num_jacobi(&n, &order) == 1); /* sage confirms this is 1 */ -} - -void run_num_smalltests(void) { - int i; - for (i = 0; i < 100*count; i++) { - test_num_negate(); - test_num_add_sub(); - test_num_mod(); - test_num_jacobi(); - } -} -#endif - -/***** SCALAR TESTS *****/ - -void scalar_test(void) { - secp256k1_scalar s; - secp256k1_scalar s1; - secp256k1_scalar s2; -#ifndef USE_NUM_NONE - secp256k1_num snum, s1num, s2num; - secp256k1_num order, half_order; -#endif - unsigned char c[32]; - - /* Set 's' to a random scalar, with value 'snum'. */ - random_scalar_order_test(&s); - - /* Set 's1' to a random scalar, with value 's1num'. */ - random_scalar_order_test(&s1); - - /* Set 's2' to a random scalar, with value 'snum2', and byte array representation 'c'. */ - random_scalar_order_test(&s2); - secp256k1_scalar_get_b32(c, &s2); - -#ifndef USE_NUM_NONE - secp256k1_scalar_get_num(&snum, &s); - secp256k1_scalar_get_num(&s1num, &s1); - secp256k1_scalar_get_num(&s2num, &s2); - - secp256k1_scalar_order_get_num(&order); - half_order = order; - secp256k1_num_shift(&half_order, 1); -#endif - - { - int i; - /* Test that fetching groups of 4 bits from a scalar and recursing n(i)=16*n(i-1)+p(i) reconstructs it. */ - secp256k1_scalar n; - secp256k1_scalar_set_int(&n, 0); - for (i = 0; i < 256; i += 4) { - secp256k1_scalar t; - int j; - secp256k1_scalar_set_int(&t, secp256k1_scalar_get_bits(&s, 256 - 4 - i, 4)); - for (j = 0; j < 4; j++) { - secp256k1_scalar_add(&n, &n, &n); - } - secp256k1_scalar_add(&n, &n, &t); - } - CHECK(secp256k1_scalar_eq(&n, &s)); - } - - { - /* Test that fetching groups of randomly-sized bits from a scalar and recursing n(i)=b*n(i-1)+p(i) reconstructs it. */ - secp256k1_scalar n; - int i = 0; - secp256k1_scalar_set_int(&n, 0); - while (i < 256) { - secp256k1_scalar t; - int j; - int now = secp256k1_rand_int(15) + 1; - if (now + i > 256) { - now = 256 - i; - } - secp256k1_scalar_set_int(&t, secp256k1_scalar_get_bits_var(&s, 256 - now - i, now)); - for (j = 0; j < now; j++) { - secp256k1_scalar_add(&n, &n, &n); - } - secp256k1_scalar_add(&n, &n, &t); - i += now; - } - CHECK(secp256k1_scalar_eq(&n, &s)); - } - -#ifndef USE_NUM_NONE - { - /* Test that adding the scalars together is equal to adding their numbers together modulo the order. */ - secp256k1_num rnum; - secp256k1_num r2num; - secp256k1_scalar r; - secp256k1_num_add(&rnum, &snum, &s2num); - secp256k1_num_mod(&rnum, &order); - secp256k1_scalar_add(&r, &s, &s2); - secp256k1_scalar_get_num(&r2num, &r); - CHECK(secp256k1_num_eq(&rnum, &r2num)); - } - - { - /* Test that multiplying the scalars is equal to multiplying their numbers modulo the order. */ - secp256k1_scalar r; - secp256k1_num r2num; - secp256k1_num rnum; - secp256k1_num_mul(&rnum, &snum, &s2num); - secp256k1_num_mod(&rnum, &order); - secp256k1_scalar_mul(&r, &s, &s2); - secp256k1_scalar_get_num(&r2num, &r); - CHECK(secp256k1_num_eq(&rnum, &r2num)); - /* The result can only be zero if at least one of the factors was zero. */ - CHECK(secp256k1_scalar_is_zero(&r) == (secp256k1_scalar_is_zero(&s) || secp256k1_scalar_is_zero(&s2))); - /* The results can only be equal to one of the factors if that factor was zero, or the other factor was one. */ - CHECK(secp256k1_num_eq(&rnum, &snum) == (secp256k1_scalar_is_zero(&s) || secp256k1_scalar_is_one(&s2))); - CHECK(secp256k1_num_eq(&rnum, &s2num) == (secp256k1_scalar_is_zero(&s2) || secp256k1_scalar_is_one(&s))); - } - - { - secp256k1_scalar neg; - secp256k1_num negnum; - secp256k1_num negnum2; - /* Check that comparison with zero matches comparison with zero on the number. */ - CHECK(secp256k1_num_is_zero(&snum) == secp256k1_scalar_is_zero(&s)); - /* Check that comparison with the half order is equal to testing for high scalar. */ - CHECK(secp256k1_scalar_is_high(&s) == (secp256k1_num_cmp(&snum, &half_order) > 0)); - secp256k1_scalar_negate(&neg, &s); - secp256k1_num_sub(&negnum, &order, &snum); - secp256k1_num_mod(&negnum, &order); - /* Check that comparison with the half order is equal to testing for high scalar after negation. */ - CHECK(secp256k1_scalar_is_high(&neg) == (secp256k1_num_cmp(&negnum, &half_order) > 0)); - /* Negating should change the high property, unless the value was already zero. */ - CHECK((secp256k1_scalar_is_high(&s) == secp256k1_scalar_is_high(&neg)) == secp256k1_scalar_is_zero(&s)); - secp256k1_scalar_get_num(&negnum2, &neg); - /* Negating a scalar should be equal to (order - n) mod order on the number. */ - CHECK(secp256k1_num_eq(&negnum, &negnum2)); - secp256k1_scalar_add(&neg, &neg, &s); - /* Adding a number to its negation should result in zero. */ - CHECK(secp256k1_scalar_is_zero(&neg)); - secp256k1_scalar_negate(&neg, &neg); - /* Negating zero should still result in zero. */ - CHECK(secp256k1_scalar_is_zero(&neg)); - } - - { - /* Test secp256k1_scalar_mul_shift_var. */ - secp256k1_scalar r; - secp256k1_num one; - secp256k1_num rnum; - secp256k1_num rnum2; - unsigned char cone[1] = {0x01}; - unsigned int shift = 256 + secp256k1_rand_int(257); - secp256k1_scalar_mul_shift_var(&r, &s1, &s2, shift); - secp256k1_num_mul(&rnum, &s1num, &s2num); - secp256k1_num_shift(&rnum, shift - 1); - secp256k1_num_set_bin(&one, cone, 1); - secp256k1_num_add(&rnum, &rnum, &one); - secp256k1_num_shift(&rnum, 1); - secp256k1_scalar_get_num(&rnum2, &r); - CHECK(secp256k1_num_eq(&rnum, &rnum2)); - } - - { - /* test secp256k1_scalar_shr_int */ - secp256k1_scalar r; - int i; - random_scalar_order_test(&r); - for (i = 0; i < 100; ++i) { - int low; - int shift = 1 + secp256k1_rand_int(15); - int expected = r.d[0] % (1 << shift); - low = secp256k1_scalar_shr_int(&r, shift); - CHECK(expected == low); - } - } -#endif - - { - /* Test that scalar inverses are equal to the inverse of their number modulo the order. */ - if (!secp256k1_scalar_is_zero(&s)) { - secp256k1_scalar inv; -#ifndef USE_NUM_NONE - secp256k1_num invnum; - secp256k1_num invnum2; -#endif - secp256k1_scalar_inverse(&inv, &s); -#ifndef USE_NUM_NONE - secp256k1_num_mod_inverse(&invnum, &snum, &order); - secp256k1_scalar_get_num(&invnum2, &inv); - CHECK(secp256k1_num_eq(&invnum, &invnum2)); -#endif - secp256k1_scalar_mul(&inv, &inv, &s); - /* Multiplying a scalar with its inverse must result in one. */ - CHECK(secp256k1_scalar_is_one(&inv)); - secp256k1_scalar_inverse(&inv, &inv); - /* Inverting one must result in one. */ - CHECK(secp256k1_scalar_is_one(&inv)); -#ifndef USE_NUM_NONE - secp256k1_scalar_get_num(&invnum, &inv); - CHECK(secp256k1_num_is_one(&invnum)); -#endif - } - } - - { - /* Test commutativity of add. */ - secp256k1_scalar r1, r2; - secp256k1_scalar_add(&r1, &s1, &s2); - secp256k1_scalar_add(&r2, &s2, &s1); - CHECK(secp256k1_scalar_eq(&r1, &r2)); - } - - { - secp256k1_scalar r1, r2; - secp256k1_scalar b; - int i; - /* Test add_bit. */ - int bit = secp256k1_rand_bits(8); - secp256k1_scalar_set_int(&b, 1); - CHECK(secp256k1_scalar_is_one(&b)); - for (i = 0; i < bit; i++) { - secp256k1_scalar_add(&b, &b, &b); - } - r1 = s1; - r2 = s1; - if (!secp256k1_scalar_add(&r1, &r1, &b)) { - /* No overflow happened. */ - secp256k1_scalar_cadd_bit(&r2, bit, 1); - CHECK(secp256k1_scalar_eq(&r1, &r2)); - /* cadd is a noop when flag is zero */ - secp256k1_scalar_cadd_bit(&r2, bit, 0); - CHECK(secp256k1_scalar_eq(&r1, &r2)); - } - } - - { - /* Test commutativity of mul. */ - secp256k1_scalar r1, r2; - secp256k1_scalar_mul(&r1, &s1, &s2); - secp256k1_scalar_mul(&r2, &s2, &s1); - CHECK(secp256k1_scalar_eq(&r1, &r2)); - } - - { - /* Test associativity of add. */ - secp256k1_scalar r1, r2; - secp256k1_scalar_add(&r1, &s1, &s2); - secp256k1_scalar_add(&r1, &r1, &s); - secp256k1_scalar_add(&r2, &s2, &s); - secp256k1_scalar_add(&r2, &s1, &r2); - CHECK(secp256k1_scalar_eq(&r1, &r2)); - } - - { - /* Test associativity of mul. */ - secp256k1_scalar r1, r2; - secp256k1_scalar_mul(&r1, &s1, &s2); - secp256k1_scalar_mul(&r1, &r1, &s); - secp256k1_scalar_mul(&r2, &s2, &s); - secp256k1_scalar_mul(&r2, &s1, &r2); - CHECK(secp256k1_scalar_eq(&r1, &r2)); - } - - { - /* Test distributitivity of mul over add. */ - secp256k1_scalar r1, r2, t; - secp256k1_scalar_add(&r1, &s1, &s2); - secp256k1_scalar_mul(&r1, &r1, &s); - secp256k1_scalar_mul(&r2, &s1, &s); - secp256k1_scalar_mul(&t, &s2, &s); - secp256k1_scalar_add(&r2, &r2, &t); - CHECK(secp256k1_scalar_eq(&r1, &r2)); - } - - { - /* Test square. */ - secp256k1_scalar r1, r2; - secp256k1_scalar_sqr(&r1, &s1); - secp256k1_scalar_mul(&r2, &s1, &s1); - CHECK(secp256k1_scalar_eq(&r1, &r2)); - } - - { - /* Test multiplicative identity. */ - secp256k1_scalar r1, v1; - secp256k1_scalar_set_int(&v1,1); - secp256k1_scalar_mul(&r1, &s1, &v1); - CHECK(secp256k1_scalar_eq(&r1, &s1)); - } - - { - /* Test additive identity. */ - secp256k1_scalar r1, v0; - secp256k1_scalar_set_int(&v0,0); - secp256k1_scalar_add(&r1, &s1, &v0); - CHECK(secp256k1_scalar_eq(&r1, &s1)); - } - - { - /* Test zero product property. */ - secp256k1_scalar r1, v0; - secp256k1_scalar_set_int(&v0,0); - secp256k1_scalar_mul(&r1, &s1, &v0); - CHECK(secp256k1_scalar_eq(&r1, &v0)); - } - -} - -void run_scalar_tests(void) { - int i; - for (i = 0; i < 128 * count; i++) { - scalar_test(); - } - - { - /* (-1)+1 should be zero. */ - secp256k1_scalar s, o; - secp256k1_scalar_set_int(&s, 1); - CHECK(secp256k1_scalar_is_one(&s)); - secp256k1_scalar_negate(&o, &s); - secp256k1_scalar_add(&o, &o, &s); - CHECK(secp256k1_scalar_is_zero(&o)); - secp256k1_scalar_negate(&o, &o); - CHECK(secp256k1_scalar_is_zero(&o)); - } - -#ifndef USE_NUM_NONE - { - /* A scalar with value of the curve order should be 0. */ - secp256k1_num order; - secp256k1_scalar zero; - unsigned char bin[32]; - int overflow = 0; - secp256k1_scalar_order_get_num(&order); - secp256k1_num_get_bin(bin, 32, &order); - secp256k1_scalar_set_b32(&zero, bin, &overflow); - CHECK(overflow == 1); - CHECK(secp256k1_scalar_is_zero(&zero)); - } -#endif - - { - /* Does check_overflow check catch all ones? */ - static const secp256k1_scalar overflowed = SECP256K1_SCALAR_CONST( - 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, - 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL - ); - CHECK(secp256k1_scalar_check_overflow(&overflowed)); - } - - { - /* Static test vectors. - * These were reduced from ~10^12 random vectors based on comparison-decision - * and edge-case coverage on 32-bit and 64-bit implementations. - * The responses were generated with Sage 5.9. - */ - secp256k1_scalar x; - secp256k1_scalar y; - secp256k1_scalar z; - secp256k1_scalar zz; - secp256k1_scalar one; - secp256k1_scalar r1; - secp256k1_scalar r2; -#if defined(USE_SCALAR_INV_NUM) - secp256k1_scalar zzv; -#endif - int overflow; - unsigned char chal[33][2][32] = { - {{0xff, 0xff, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, - 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff, 0xff}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff}}, - {{0xef, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x80, 0xff}}, - {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00}, - {0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xe0, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff}}, - {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x1e, 0xf8, 0xff, 0xff, 0xff, 0xfd, 0xff}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, - 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xe0, - 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, - 0xf3, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}}, - {{0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, - 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f, - 0x00, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff}}, - {{0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xfc, 0x9f, - 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x80, - 0xff, 0x0f, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, - 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00}, - {0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x00, 0xf8, 0xff, 0x0f, 0xc0, 0xff, 0xff, - 0xff, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x07, 0x80, 0xff, 0xff, 0xff}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x00, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf0}, - {0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, - {{0x00, 0xf8, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, - 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x03, 0xc0, 0xff, 0x0f, 0xfc, 0xff}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, - 0xff, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xc0, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, - {{0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, - {{0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x03, 0x00, 0x80, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x80, 0xff, 0x7f}, - {0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, - 0x00, 0xc0, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, - 0xbf, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xff, 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x80, - 0xff, 0x01, 0xfc, 0xff, 0x01, 0x00, 0xfe, 0xff}, - {0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00}}, - {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf8, 0xff, 0x01, 0x00, 0xf0, 0xff, 0xff, - 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x00}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, - 0xfc, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0x3f, - 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x0f, 0x7e, 0x00, 0x00}}, - {{0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfe, 0x07, 0x00}, - {0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xfb, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60}}, - {{0xff, 0x01, 0x00, 0xff, 0xff, 0xff, 0x0f, 0x00, - 0x80, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - {0xff, 0xff, 0x1f, 0x00, 0xf0, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00}}, - {{0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, - 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0xff, 0xff, 0xcf, 0xff, 0x1f, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x7e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00}, - {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0x7f, 0x00, 0x80, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00}, - {0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x80, - 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xff, 0x7f, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0xfe}}, - {{0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, - 0xff, 0x03, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, - 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, - {{0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - {0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xc0, - 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, - 0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff}}, - {{0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, - 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x7e, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, - 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - {0xff, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, - {{0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, - 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, - 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, - 0xff, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x3f, 0x00, 0x00, 0xc0, 0xf1, 0x7f, 0x00}}, - {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00}, - {0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, - 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, - 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0xff, 0xff}}, - {{0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x80, 0x00, 0x00, 0x80, 0xff, 0x03, 0xe0, 0x01, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xfc, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00}, - {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0xff, 0xff, 0xf0, 0x07, 0x00, 0x3c, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x07, 0xe0, 0xff, 0x00, 0x00, 0x00}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf8, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80}, - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x80, 0x00, - 0x00, 0x00, 0x00, 0xc0, 0x7f, 0xfe, 0xff, 0x1f, - 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff}}, - {{0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, - 0xff, 0xff, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, - 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf0}, - {0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, - 0xf8, 0x07, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xc7, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff}}, - {{0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00, - 0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x03, 0xfb, - 0xfa, 0x8a, 0x7d, 0xdf, 0x13, 0x86, 0xe2, 0x03}, - {0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00, - 0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x03, 0xfb, - 0xfa, 0x8a, 0x7d, 0xdf, 0x13, 0x86, 0xe2, 0x03}} - }; - unsigned char res[33][2][32] = { - {{0x0c, 0x3b, 0x0a, 0xca, 0x8d, 0x1a, 0x2f, 0xb9, - 0x8a, 0x7b, 0x53, 0x5a, 0x1f, 0xc5, 0x22, 0xa1, - 0x07, 0x2a, 0x48, 0xea, 0x02, 0xeb, 0xb3, 0xd6, - 0x20, 0x1e, 0x86, 0xd0, 0x95, 0xf6, 0x92, 0x35}, - {0xdc, 0x90, 0x7a, 0x07, 0x2e, 0x1e, 0x44, 0x6d, - 0xf8, 0x15, 0x24, 0x5b, 0x5a, 0x96, 0x37, 0x9c, - 0x37, 0x7b, 0x0d, 0xac, 0x1b, 0x65, 0x58, 0x49, - 0x43, 0xb7, 0x31, 0xbb, 0xa7, 0xf4, 0x97, 0x15}}, - {{0xf1, 0xf7, 0x3a, 0x50, 0xe6, 0x10, 0xba, 0x22, - 0x43, 0x4d, 0x1f, 0x1f, 0x7c, 0x27, 0xca, 0x9c, - 0xb8, 0xb6, 0xa0, 0xfc, 0xd8, 0xc0, 0x05, 0x2f, - 0xf7, 0x08, 0xe1, 0x76, 0xdd, 0xd0, 0x80, 0xc8}, - {0xe3, 0x80, 0x80, 0xb8, 0xdb, 0xe3, 0xa9, 0x77, - 0x00, 0xb0, 0xf5, 0x2e, 0x27, 0xe2, 0x68, 0xc4, - 0x88, 0xe8, 0x04, 0xc1, 0x12, 0xbf, 0x78, 0x59, - 0xe6, 0xa9, 0x7c, 0xe1, 0x81, 0xdd, 0xb9, 0xd5}}, - {{0x96, 0xe2, 0xee, 0x01, 0xa6, 0x80, 0x31, 0xef, - 0x5c, 0xd0, 0x19, 0xb4, 0x7d, 0x5f, 0x79, 0xab, - 0xa1, 0x97, 0xd3, 0x7e, 0x33, 0xbb, 0x86, 0x55, - 0x60, 0x20, 0x10, 0x0d, 0x94, 0x2d, 0x11, 0x7c}, - {0xcc, 0xab, 0xe0, 0xe8, 0x98, 0x65, 0x12, 0x96, - 0x38, 0x5a, 0x1a, 0xf2, 0x85, 0x23, 0x59, 0x5f, - 0xf9, 0xf3, 0xc2, 0x81, 0x70, 0x92, 0x65, 0x12, - 0x9c, 0x65, 0x1e, 0x96, 0x00, 0xef, 0xe7, 0x63}}, - {{0xac, 0x1e, 0x62, 0xc2, 0x59, 0xfc, 0x4e, 0x5c, - 0x83, 0xb0, 0xd0, 0x6f, 0xce, 0x19, 0xf6, 0xbf, - 0xa4, 0xb0, 0xe0, 0x53, 0x66, 0x1f, 0xbf, 0xc9, - 0x33, 0x47, 0x37, 0xa9, 0x3d, 0x5d, 0xb0, 0x48}, - {0x86, 0xb9, 0x2a, 0x7f, 0x8e, 0xa8, 0x60, 0x42, - 0x26, 0x6d, 0x6e, 0x1c, 0xa2, 0xec, 0xe0, 0xe5, - 0x3e, 0x0a, 0x33, 0xbb, 0x61, 0x4c, 0x9f, 0x3c, - 0xd1, 0xdf, 0x49, 0x33, 0xcd, 0x72, 0x78, 0x18}}, - {{0xf7, 0xd3, 0xcd, 0x49, 0x5c, 0x13, 0x22, 0xfb, - 0x2e, 0xb2, 0x2f, 0x27, 0xf5, 0x8a, 0x5d, 0x74, - 0xc1, 0x58, 0xc5, 0xc2, 0x2d, 0x9f, 0x52, 0xc6, - 0x63, 0x9f, 0xba, 0x05, 0x76, 0x45, 0x7a, 0x63}, - {0x8a, 0xfa, 0x55, 0x4d, 0xdd, 0xa3, 0xb2, 0xc3, - 0x44, 0xfd, 0xec, 0x72, 0xde, 0xef, 0xc0, 0x99, - 0xf5, 0x9f, 0xe2, 0x52, 0xb4, 0x05, 0x32, 0x58, - 0x57, 0xc1, 0x8f, 0xea, 0xc3, 0x24, 0x5b, 0x94}}, - {{0x05, 0x83, 0xee, 0xdd, 0x64, 0xf0, 0x14, 0x3b, - 0xa0, 0x14, 0x4a, 0x3a, 0x41, 0x82, 0x7c, 0xa7, - 0x2c, 0xaa, 0xb1, 0x76, 0xbb, 0x59, 0x64, 0x5f, - 0x52, 0xad, 0x25, 0x29, 0x9d, 0x8f, 0x0b, 0xb0}, - {0x7e, 0xe3, 0x7c, 0xca, 0xcd, 0x4f, 0xb0, 0x6d, - 0x7a, 0xb2, 0x3e, 0xa0, 0x08, 0xb9, 0xa8, 0x2d, - 0xc2, 0xf4, 0x99, 0x66, 0xcc, 0xac, 0xd8, 0xb9, - 0x72, 0x2a, 0x4a, 0x3e, 0x0f, 0x7b, 0xbf, 0xf4}}, - {{0x8c, 0x9c, 0x78, 0x2b, 0x39, 0x61, 0x7e, 0xf7, - 0x65, 0x37, 0x66, 0x09, 0x38, 0xb9, 0x6f, 0x70, - 0x78, 0x87, 0xff, 0xcf, 0x93, 0xca, 0x85, 0x06, - 0x44, 0x84, 0xa7, 0xfe, 0xd3, 0xa4, 0xe3, 0x7e}, - {0xa2, 0x56, 0x49, 0x23, 0x54, 0xa5, 0x50, 0xe9, - 0x5f, 0xf0, 0x4d, 0xe7, 0xdc, 0x38, 0x32, 0x79, - 0x4f, 0x1c, 0xb7, 0xe4, 0xbb, 0xf8, 0xbb, 0x2e, - 0x40, 0x41, 0x4b, 0xcc, 0xe3, 0x1e, 0x16, 0x36}}, - {{0x0c, 0x1e, 0xd7, 0x09, 0x25, 0x40, 0x97, 0xcb, - 0x5c, 0x46, 0xa8, 0xda, 0xef, 0x25, 0xd5, 0xe5, - 0x92, 0x4d, 0xcf, 0xa3, 0xc4, 0x5d, 0x35, 0x4a, - 0xe4, 0x61, 0x92, 0xf3, 0xbf, 0x0e, 0xcd, 0xbe}, - {0xe4, 0xaf, 0x0a, 0xb3, 0x30, 0x8b, 0x9b, 0x48, - 0x49, 0x43, 0xc7, 0x64, 0x60, 0x4a, 0x2b, 0x9e, - 0x95, 0x5f, 0x56, 0xe8, 0x35, 0xdc, 0xeb, 0xdc, - 0xc7, 0xc4, 0xfe, 0x30, 0x40, 0xc7, 0xbf, 0xa4}}, - {{0xd4, 0xa0, 0xf5, 0x81, 0x49, 0x6b, 0xb6, 0x8b, - 0x0a, 0x69, 0xf9, 0xfe, 0xa8, 0x32, 0xe5, 0xe0, - 0xa5, 0xcd, 0x02, 0x53, 0xf9, 0x2c, 0xe3, 0x53, - 0x83, 0x36, 0xc6, 0x02, 0xb5, 0xeb, 0x64, 0xb8}, - {0x1d, 0x42, 0xb9, 0xf9, 0xe9, 0xe3, 0x93, 0x2c, - 0x4c, 0xee, 0x6c, 0x5a, 0x47, 0x9e, 0x62, 0x01, - 0x6b, 0x04, 0xfe, 0xa4, 0x30, 0x2b, 0x0d, 0x4f, - 0x71, 0x10, 0xd3, 0x55, 0xca, 0xf3, 0x5e, 0x80}}, - {{0x77, 0x05, 0xf6, 0x0c, 0x15, 0x9b, 0x45, 0xe7, - 0xb9, 0x11, 0xb8, 0xf5, 0xd6, 0xda, 0x73, 0x0c, - 0xda, 0x92, 0xea, 0xd0, 0x9d, 0xd0, 0x18, 0x92, - 0xce, 0x9a, 0xaa, 0xee, 0x0f, 0xef, 0xde, 0x30}, - {0xf1, 0xf1, 0xd6, 0x9b, 0x51, 0xd7, 0x77, 0x62, - 0x52, 0x10, 0xb8, 0x7a, 0x84, 0x9d, 0x15, 0x4e, - 0x07, 0xdc, 0x1e, 0x75, 0x0d, 0x0c, 0x3b, 0xdb, - 0x74, 0x58, 0x62, 0x02, 0x90, 0x54, 0x8b, 0x43}}, - {{0xa6, 0xfe, 0x0b, 0x87, 0x80, 0x43, 0x67, 0x25, - 0x57, 0x5d, 0xec, 0x40, 0x50, 0x08, 0xd5, 0x5d, - 0x43, 0xd7, 0xe0, 0xaa, 0xe0, 0x13, 0xb6, 0xb0, - 0xc0, 0xd4, 0xe5, 0x0d, 0x45, 0x83, 0xd6, 0x13}, - {0x40, 0x45, 0x0a, 0x92, 0x31, 0xea, 0x8c, 0x60, - 0x8c, 0x1f, 0xd8, 0x76, 0x45, 0xb9, 0x29, 0x00, - 0x26, 0x32, 0xd8, 0xa6, 0x96, 0x88, 0xe2, 0xc4, - 0x8b, 0xdb, 0x7f, 0x17, 0x87, 0xcc, 0xc8, 0xf2}}, - {{0xc2, 0x56, 0xe2, 0xb6, 0x1a, 0x81, 0xe7, 0x31, - 0x63, 0x2e, 0xbb, 0x0d, 0x2f, 0x81, 0x67, 0xd4, - 0x22, 0xe2, 0x38, 0x02, 0x25, 0x97, 0xc7, 0x88, - 0x6e, 0xdf, 0xbe, 0x2a, 0xa5, 0x73, 0x63, 0xaa}, - {0x50, 0x45, 0xe2, 0xc3, 0xbd, 0x89, 0xfc, 0x57, - 0xbd, 0x3c, 0xa3, 0x98, 0x7e, 0x7f, 0x36, 0x38, - 0x92, 0x39, 0x1f, 0x0f, 0x81, 0x1a, 0x06, 0x51, - 0x1f, 0x8d, 0x6a, 0xff, 0x47, 0x16, 0x06, 0x9c}}, - {{0x33, 0x95, 0xa2, 0x6f, 0x27, 0x5f, 0x9c, 0x9c, - 0x64, 0x45, 0xcb, 0xd1, 0x3c, 0xee, 0x5e, 0x5f, - 0x48, 0xa6, 0xaf, 0xe3, 0x79, 0xcf, 0xb1, 0xe2, - 0xbf, 0x55, 0x0e, 0xa2, 0x3b, 0x62, 0xf0, 0xe4}, - {0x14, 0xe8, 0x06, 0xe3, 0xbe, 0x7e, 0x67, 0x01, - 0xc5, 0x21, 0x67, 0xd8, 0x54, 0xb5, 0x7f, 0xa4, - 0xf9, 0x75, 0x70, 0x1c, 0xfd, 0x79, 0xdb, 0x86, - 0xad, 0x37, 0x85, 0x83, 0x56, 0x4e, 0xf0, 0xbf}}, - {{0xbc, 0xa6, 0xe0, 0x56, 0x4e, 0xef, 0xfa, 0xf5, - 0x1d, 0x5d, 0x3f, 0x2a, 0x5b, 0x19, 0xab, 0x51, - 0xc5, 0x8b, 0xdd, 0x98, 0x28, 0x35, 0x2f, 0xc3, - 0x81, 0x4f, 0x5c, 0xe5, 0x70, 0xb9, 0xeb, 0x62}, - {0xc4, 0x6d, 0x26, 0xb0, 0x17, 0x6b, 0xfe, 0x6c, - 0x12, 0xf8, 0xe7, 0xc1, 0xf5, 0x2f, 0xfa, 0x91, - 0x13, 0x27, 0xbd, 0x73, 0xcc, 0x33, 0x31, 0x1c, - 0x39, 0xe3, 0x27, 0x6a, 0x95, 0xcf, 0xc5, 0xfb}}, - {{0x30, 0xb2, 0x99, 0x84, 0xf0, 0x18, 0x2a, 0x6e, - 0x1e, 0x27, 0xed, 0xa2, 0x29, 0x99, 0x41, 0x56, - 0xe8, 0xd4, 0x0d, 0xef, 0x99, 0x9c, 0xf3, 0x58, - 0x29, 0x55, 0x1a, 0xc0, 0x68, 0xd6, 0x74, 0xa4}, - {0x07, 0x9c, 0xe7, 0xec, 0xf5, 0x36, 0x73, 0x41, - 0xa3, 0x1c, 0xe5, 0x93, 0x97, 0x6a, 0xfd, 0xf7, - 0x53, 0x18, 0xab, 0xaf, 0xeb, 0x85, 0xbd, 0x92, - 0x90, 0xab, 0x3c, 0xbf, 0x30, 0x82, 0xad, 0xf6}}, - {{0xc6, 0x87, 0x8a, 0x2a, 0xea, 0xc0, 0xa9, 0xec, - 0x6d, 0xd3, 0xdc, 0x32, 0x23, 0xce, 0x62, 0x19, - 0xa4, 0x7e, 0xa8, 0xdd, 0x1c, 0x33, 0xae, 0xd3, - 0x4f, 0x62, 0x9f, 0x52, 0xe7, 0x65, 0x46, 0xf4}, - {0x97, 0x51, 0x27, 0x67, 0x2d, 0xa2, 0x82, 0x87, - 0x98, 0xd3, 0xb6, 0x14, 0x7f, 0x51, 0xd3, 0x9a, - 0x0b, 0xd0, 0x76, 0x81, 0xb2, 0x4f, 0x58, 0x92, - 0xa4, 0x86, 0xa1, 0xa7, 0x09, 0x1d, 0xef, 0x9b}}, - {{0xb3, 0x0f, 0x2b, 0x69, 0x0d, 0x06, 0x90, 0x64, - 0xbd, 0x43, 0x4c, 0x10, 0xe8, 0x98, 0x1c, 0xa3, - 0xe1, 0x68, 0xe9, 0x79, 0x6c, 0x29, 0x51, 0x3f, - 0x41, 0xdc, 0xdf, 0x1f, 0xf3, 0x60, 0xbe, 0x33}, - {0xa1, 0x5f, 0xf7, 0x1d, 0xb4, 0x3e, 0x9b, 0x3c, - 0xe7, 0xbd, 0xb6, 0x06, 0xd5, 0x60, 0x06, 0x6d, - 0x50, 0xd2, 0xf4, 0x1a, 0x31, 0x08, 0xf2, 0xea, - 0x8e, 0xef, 0x5f, 0x7d, 0xb6, 0xd0, 0xc0, 0x27}}, - {{0x62, 0x9a, 0xd9, 0xbb, 0x38, 0x36, 0xce, 0xf7, - 0x5d, 0x2f, 0x13, 0xec, 0xc8, 0x2d, 0x02, 0x8a, - 0x2e, 0x72, 0xf0, 0xe5, 0x15, 0x9d, 0x72, 0xae, - 0xfc, 0xb3, 0x4f, 0x02, 0xea, 0xe1, 0x09, 0xfe}, - {0x00, 0x00, 0x00, 0x00, 0xfa, 0x0a, 0x3d, 0xbc, - 0xad, 0x16, 0x0c, 0xb6, 0xe7, 0x7c, 0x8b, 0x39, - 0x9a, 0x43, 0xbb, 0xe3, 0xc2, 0x55, 0x15, 0x14, - 0x75, 0xac, 0x90, 0x9b, 0x7f, 0x9a, 0x92, 0x00}}, - {{0x8b, 0xac, 0x70, 0x86, 0x29, 0x8f, 0x00, 0x23, - 0x7b, 0x45, 0x30, 0xaa, 0xb8, 0x4c, 0xc7, 0x8d, - 0x4e, 0x47, 0x85, 0xc6, 0x19, 0xe3, 0x96, 0xc2, - 0x9a, 0xa0, 0x12, 0xed, 0x6f, 0xd7, 0x76, 0x16}, - {0x45, 0xaf, 0x7e, 0x33, 0xc7, 0x7f, 0x10, 0x6c, - 0x7c, 0x9f, 0x29, 0xc1, 0xa8, 0x7e, 0x15, 0x84, - 0xe7, 0x7d, 0xc0, 0x6d, 0xab, 0x71, 0x5d, 0xd0, - 0x6b, 0x9f, 0x97, 0xab, 0xcb, 0x51, 0x0c, 0x9f}}, - {{0x9e, 0xc3, 0x92, 0xb4, 0x04, 0x9f, 0xc8, 0xbb, - 0xdd, 0x9e, 0xc6, 0x05, 0xfd, 0x65, 0xec, 0x94, - 0x7f, 0x2c, 0x16, 0xc4, 0x40, 0xac, 0x63, 0x7b, - 0x7d, 0xb8, 0x0c, 0xe4, 0x5b, 0xe3, 0xa7, 0x0e}, - {0x43, 0xf4, 0x44, 0xe8, 0xcc, 0xc8, 0xd4, 0x54, - 0x33, 0x37, 0x50, 0xf2, 0x87, 0x42, 0x2e, 0x00, - 0x49, 0x60, 0x62, 0x02, 0xfd, 0x1a, 0x7c, 0xdb, - 0x29, 0x6c, 0x6d, 0x54, 0x53, 0x08, 0xd1, 0xc8}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}, - {{0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1, - 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0, - 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59, - 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92}, - {0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1, - 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0, - 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59, - 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92}}, - {{0x28, 0x56, 0xac, 0x0e, 0x4f, 0x98, 0x09, 0xf0, - 0x49, 0xfa, 0x7f, 0x84, 0xac, 0x7e, 0x50, 0x5b, - 0x17, 0x43, 0x14, 0x89, 0x9c, 0x53, 0xa8, 0x94, - 0x30, 0xf2, 0x11, 0x4d, 0x92, 0x14, 0x27, 0xe8}, - {0x39, 0x7a, 0x84, 0x56, 0x79, 0x9d, 0xec, 0x26, - 0x2c, 0x53, 0xc1, 0x94, 0xc9, 0x8d, 0x9e, 0x9d, - 0x32, 0x1f, 0xdd, 0x84, 0x04, 0xe8, 0xe2, 0x0a, - 0x6b, 0xbe, 0xbb, 0x42, 0x40, 0x67, 0x30, 0x6c}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4, - 0x40, 0x2d, 0xa1, 0x73, 0x2f, 0xc9, 0xbe, 0xbd}, - {0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1, - 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0, - 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59, - 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92}}, - {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, - 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}, - {{0x1c, 0xc4, 0xf7, 0xda, 0x0f, 0x65, 0xca, 0x39, - 0x70, 0x52, 0x92, 0x8e, 0xc3, 0xc8, 0x15, 0xea, - 0x7f, 0x10, 0x9e, 0x77, 0x4b, 0x6e, 0x2d, 0xdf, - 0xe8, 0x30, 0x9d, 0xda, 0xe8, 0x9a, 0x65, 0xae}, - {0x02, 0xb0, 0x16, 0xb1, 0x1d, 0xc8, 0x57, 0x7b, - 0xa2, 0x3a, 0xa2, 0xa3, 0x38, 0x5c, 0x8f, 0xeb, - 0x66, 0x37, 0x91, 0xa8, 0x5f, 0xef, 0x04, 0xf6, - 0x59, 0x75, 0xe1, 0xee, 0x92, 0xf6, 0x0e, 0x30}}, - {{0x8d, 0x76, 0x14, 0xa4, 0x14, 0x06, 0x9f, 0x9a, - 0xdf, 0x4a, 0x85, 0xa7, 0x6b, 0xbf, 0x29, 0x6f, - 0xbc, 0x34, 0x87, 0x5d, 0xeb, 0xbb, 0x2e, 0xa9, - 0xc9, 0x1f, 0x58, 0xd6, 0x9a, 0x82, 0xa0, 0x56}, - {0xd4, 0xb9, 0xdb, 0x88, 0x1d, 0x04, 0xe9, 0x93, - 0x8d, 0x3f, 0x20, 0xd5, 0x86, 0xa8, 0x83, 0x07, - 0xdb, 0x09, 0xd8, 0x22, 0x1f, 0x7f, 0xf1, 0x71, - 0xc8, 0xe7, 0x5d, 0x47, 0xaf, 0x8b, 0x72, 0xe9}}, - {{0x83, 0xb9, 0x39, 0xb2, 0xa4, 0xdf, 0x46, 0x87, - 0xc2, 0xb8, 0xf1, 0xe6, 0x4c, 0xd1, 0xe2, 0xa9, - 0xe4, 0x70, 0x30, 0x34, 0xbc, 0x52, 0x7c, 0x55, - 0xa6, 0xec, 0x80, 0xa4, 0xe5, 0xd2, 0xdc, 0x73}, - {0x08, 0xf1, 0x03, 0xcf, 0x16, 0x73, 0xe8, 0x7d, - 0xb6, 0x7e, 0x9b, 0xc0, 0xb4, 0xc2, 0xa5, 0x86, - 0x02, 0x77, 0xd5, 0x27, 0x86, 0xa5, 0x15, 0xfb, - 0xae, 0x9b, 0x8c, 0xa9, 0xf9, 0xf8, 0xa8, 0x4a}}, - {{0x8b, 0x00, 0x49, 0xdb, 0xfa, 0xf0, 0x1b, 0xa2, - 0xed, 0x8a, 0x9a, 0x7a, 0x36, 0x78, 0x4a, 0xc7, - 0xf7, 0xad, 0x39, 0xd0, 0x6c, 0x65, 0x7a, 0x41, - 0xce, 0xd6, 0xd6, 0x4c, 0x20, 0x21, 0x6b, 0xc7}, - {0xc6, 0xca, 0x78, 0x1d, 0x32, 0x6c, 0x6c, 0x06, - 0x91, 0xf2, 0x1a, 0xe8, 0x43, 0x16, 0xea, 0x04, - 0x3c, 0x1f, 0x07, 0x85, 0xf7, 0x09, 0x22, 0x08, - 0xba, 0x13, 0xfd, 0x78, 0x1e, 0x3f, 0x6f, 0x62}}, - {{0x25, 0x9b, 0x7c, 0xb0, 0xac, 0x72, 0x6f, 0xb2, - 0xe3, 0x53, 0x84, 0x7a, 0x1a, 0x9a, 0x98, 0x9b, - 0x44, 0xd3, 0x59, 0xd0, 0x8e, 0x57, 0x41, 0x40, - 0x78, 0xa7, 0x30, 0x2f, 0x4c, 0x9c, 0xb9, 0x68}, - {0xb7, 0x75, 0x03, 0x63, 0x61, 0xc2, 0x48, 0x6e, - 0x12, 0x3d, 0xbf, 0x4b, 0x27, 0xdf, 0xb1, 0x7a, - 0xff, 0x4e, 0x31, 0x07, 0x83, 0xf4, 0x62, 0x5b, - 0x19, 0xa5, 0xac, 0xa0, 0x32, 0x58, 0x0d, 0xa7}}, - {{0x43, 0x4f, 0x10, 0xa4, 0xca, 0xdb, 0x38, 0x67, - 0xfa, 0xae, 0x96, 0xb5, 0x6d, 0x97, 0xff, 0x1f, - 0xb6, 0x83, 0x43, 0xd3, 0xa0, 0x2d, 0x70, 0x7a, - 0x64, 0x05, 0x4c, 0xa7, 0xc1, 0xa5, 0x21, 0x51}, - {0xe4, 0xf1, 0x23, 0x84, 0xe1, 0xb5, 0x9d, 0xf2, - 0xb8, 0x73, 0x8b, 0x45, 0x2b, 0x35, 0x46, 0x38, - 0x10, 0x2b, 0x50, 0xf8, 0x8b, 0x35, 0xcd, 0x34, - 0xc8, 0x0e, 0xf6, 0xdb, 0x09, 0x35, 0xf0, 0xda}}, - {{0xdb, 0x21, 0x5c, 0x8d, 0x83, 0x1d, 0xb3, 0x34, - 0xc7, 0x0e, 0x43, 0xa1, 0x58, 0x79, 0x67, 0x13, - 0x1e, 0x86, 0x5d, 0x89, 0x63, 0xe6, 0x0a, 0x46, - 0x5c, 0x02, 0x97, 0x1b, 0x62, 0x43, 0x86, 0xf5}, - {0xdb, 0x21, 0x5c, 0x8d, 0x83, 0x1d, 0xb3, 0x34, - 0xc7, 0x0e, 0x43, 0xa1, 0x58, 0x79, 0x67, 0x13, - 0x1e, 0x86, 0x5d, 0x89, 0x63, 0xe6, 0x0a, 0x46, - 0x5c, 0x02, 0x97, 0x1b, 0x62, 0x43, 0x86, 0xf5}} - }; - secp256k1_scalar_set_int(&one, 1); - for (i = 0; i < 33; i++) { - secp256k1_scalar_set_b32(&x, chal[i][0], &overflow); - CHECK(!overflow); - secp256k1_scalar_set_b32(&y, chal[i][1], &overflow); - CHECK(!overflow); - secp256k1_scalar_set_b32(&r1, res[i][0], &overflow); - CHECK(!overflow); - secp256k1_scalar_set_b32(&r2, res[i][1], &overflow); - CHECK(!overflow); - secp256k1_scalar_mul(&z, &x, &y); - CHECK(!secp256k1_scalar_check_overflow(&z)); - CHECK(secp256k1_scalar_eq(&r1, &z)); - if (!secp256k1_scalar_is_zero(&y)) { - secp256k1_scalar_inverse(&zz, &y); - CHECK(!secp256k1_scalar_check_overflow(&zz)); -#if defined(USE_SCALAR_INV_NUM) - secp256k1_scalar_inverse_var(&zzv, &y); - CHECK(secp256k1_scalar_eq(&zzv, &zz)); -#endif - secp256k1_scalar_mul(&z, &z, &zz); - CHECK(!secp256k1_scalar_check_overflow(&z)); - CHECK(secp256k1_scalar_eq(&x, &z)); - secp256k1_scalar_mul(&zz, &zz, &y); - CHECK(!secp256k1_scalar_check_overflow(&zz)); - CHECK(secp256k1_scalar_eq(&one, &zz)); - } - secp256k1_scalar_mul(&z, &x, &x); - CHECK(!secp256k1_scalar_check_overflow(&z)); - secp256k1_scalar_sqr(&zz, &x); - CHECK(!secp256k1_scalar_check_overflow(&zz)); - CHECK(secp256k1_scalar_eq(&zz, &z)); - CHECK(secp256k1_scalar_eq(&r2, &zz)); - } - } -} - -/***** FIELD TESTS *****/ - -void random_fe(secp256k1_fe *x) { - unsigned char bin[32]; - do { - secp256k1_rand256(bin); - if (secp256k1_fe_set_b32(x, bin)) { - return; - } - } while(1); -} - -void random_fe_test(secp256k1_fe *x) { - unsigned char bin[32]; - do { - secp256k1_rand256_test(bin); - if (secp256k1_fe_set_b32(x, bin)) { - return; - } - } while(1); -} - -void random_fe_non_zero(secp256k1_fe *nz) { - int tries = 10; - while (--tries >= 0) { - random_fe(nz); - secp256k1_fe_normalize(nz); - if (!secp256k1_fe_is_zero(nz)) { - break; - } - } - /* Infinitesimal probability of spurious failure here */ - CHECK(tries >= 0); -} - -void random_fe_non_square(secp256k1_fe *ns) { - secp256k1_fe r; - random_fe_non_zero(ns); - if (secp256k1_fe_sqrt(&r, ns)) { - secp256k1_fe_negate(ns, ns, 1); - } -} - -int check_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b) { - secp256k1_fe an = *a; - secp256k1_fe bn = *b; - secp256k1_fe_normalize_weak(&an); - secp256k1_fe_normalize_var(&bn); - return secp256k1_fe_equal_var(&an, &bn); -} - -int check_fe_inverse(const secp256k1_fe *a, const secp256k1_fe *ai) { - secp256k1_fe x; - secp256k1_fe one = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1); - secp256k1_fe_mul(&x, a, ai); - return check_fe_equal(&x, &one); -} - -void run_field_convert(void) { - static const unsigned char b32[32] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, - 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, - 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x40 - }; - static const secp256k1_fe_storage fes = SECP256K1_FE_STORAGE_CONST( - 0x00010203UL, 0x04050607UL, 0x11121314UL, 0x15161718UL, - 0x22232425UL, 0x26272829UL, 0x33343536UL, 0x37383940UL - ); - static const secp256k1_fe fe = SECP256K1_FE_CONST( - 0x00010203UL, 0x04050607UL, 0x11121314UL, 0x15161718UL, - 0x22232425UL, 0x26272829UL, 0x33343536UL, 0x37383940UL - ); - secp256k1_fe fe2; - unsigned char b322[32]; - secp256k1_fe_storage fes2; - /* Check conversions to fe. */ - CHECK(secp256k1_fe_set_b32(&fe2, b32)); - CHECK(secp256k1_fe_equal_var(&fe, &fe2)); - secp256k1_fe_from_storage(&fe2, &fes); - CHECK(secp256k1_fe_equal_var(&fe, &fe2)); - /* Check conversion from fe. */ - secp256k1_fe_get_b32(b322, &fe); - CHECK(memcmp(b322, b32, 32) == 0); - secp256k1_fe_to_storage(&fes2, &fe); - CHECK(memcmp(&fes2, &fes, sizeof(fes)) == 0); -} - -int fe_memcmp(const secp256k1_fe *a, const secp256k1_fe *b) { - secp256k1_fe t = *b; -#ifdef VERIFY - t.magnitude = a->magnitude; - t.normalized = a->normalized; -#endif - return memcmp(a, &t, sizeof(secp256k1_fe)); -} - -void run_field_misc(void) { - secp256k1_fe x; - secp256k1_fe y; - secp256k1_fe z; - secp256k1_fe q; - secp256k1_fe fe5 = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 5); - int i, j; - for (i = 0; i < 5*count; i++) { - secp256k1_fe_storage xs, ys, zs; - random_fe(&x); - random_fe_non_zero(&y); - /* Test the fe equality and comparison operations. */ - CHECK(secp256k1_fe_cmp_var(&x, &x) == 0); - CHECK(secp256k1_fe_equal_var(&x, &x)); - z = x; - secp256k1_fe_add(&z,&y); - /* Test fe conditional move; z is not normalized here. */ - q = x; - secp256k1_fe_cmov(&x, &z, 0); - VERIFY_CHECK(!x.normalized && x.magnitude == z.magnitude); - secp256k1_fe_cmov(&x, &x, 1); - CHECK(fe_memcmp(&x, &z) != 0); - CHECK(fe_memcmp(&x, &q) == 0); - secp256k1_fe_cmov(&q, &z, 1); - VERIFY_CHECK(!q.normalized && q.magnitude == z.magnitude); - CHECK(fe_memcmp(&q, &z) == 0); - secp256k1_fe_normalize_var(&x); - secp256k1_fe_normalize_var(&z); - CHECK(!secp256k1_fe_equal_var(&x, &z)); - secp256k1_fe_normalize_var(&q); - secp256k1_fe_cmov(&q, &z, (i&1)); - VERIFY_CHECK(q.normalized && q.magnitude == 1); - for (j = 0; j < 6; j++) { - secp256k1_fe_negate(&z, &z, j+1); - secp256k1_fe_normalize_var(&q); - secp256k1_fe_cmov(&q, &z, (j&1)); - VERIFY_CHECK(!q.normalized && q.magnitude == (j+2)); - } - secp256k1_fe_normalize_var(&z); - /* Test storage conversion and conditional moves. */ - secp256k1_fe_to_storage(&xs, &x); - secp256k1_fe_to_storage(&ys, &y); - secp256k1_fe_to_storage(&zs, &z); - secp256k1_fe_storage_cmov(&zs, &xs, 0); - secp256k1_fe_storage_cmov(&zs, &zs, 1); - CHECK(memcmp(&xs, &zs, sizeof(xs)) != 0); - secp256k1_fe_storage_cmov(&ys, &xs, 1); - CHECK(memcmp(&xs, &ys, sizeof(xs)) == 0); - secp256k1_fe_from_storage(&x, &xs); - secp256k1_fe_from_storage(&y, &ys); - secp256k1_fe_from_storage(&z, &zs); - /* Test that mul_int, mul, and add agree. */ - secp256k1_fe_add(&y, &x); - secp256k1_fe_add(&y, &x); - z = x; - secp256k1_fe_mul_int(&z, 3); - CHECK(check_fe_equal(&y, &z)); - secp256k1_fe_add(&y, &x); - secp256k1_fe_add(&z, &x); - CHECK(check_fe_equal(&z, &y)); - z = x; - secp256k1_fe_mul_int(&z, 5); - secp256k1_fe_mul(&q, &x, &fe5); - CHECK(check_fe_equal(&z, &q)); - secp256k1_fe_negate(&x, &x, 1); - secp256k1_fe_add(&z, &x); - secp256k1_fe_add(&q, &x); - CHECK(check_fe_equal(&y, &z)); - CHECK(check_fe_equal(&q, &y)); - } -} - -void run_field_inv(void) { - secp256k1_fe x, xi, xii; - int i; - for (i = 0; i < 10*count; i++) { - random_fe_non_zero(&x); - secp256k1_fe_inv(&xi, &x); - CHECK(check_fe_inverse(&x, &xi)); - secp256k1_fe_inv(&xii, &xi); - CHECK(check_fe_equal(&x, &xii)); - } -} - -void run_field_inv_var(void) { - secp256k1_fe x, xi, xii; - int i; - for (i = 0; i < 10*count; i++) { - random_fe_non_zero(&x); - secp256k1_fe_inv_var(&xi, &x); - CHECK(check_fe_inverse(&x, &xi)); - secp256k1_fe_inv_var(&xii, &xi); - CHECK(check_fe_equal(&x, &xii)); - } -} - -void run_field_inv_all_var(void) { - secp256k1_fe x[16], xi[16], xii[16]; - int i; - /* Check it's safe to call for 0 elements */ - secp256k1_fe_inv_all_var(0, xi, x); - for (i = 0; i < count; i++) { - size_t j; - size_t len = secp256k1_rand_int(15) + 1; - for (j = 0; j < len; j++) { - random_fe_non_zero(&x[j]); - } - secp256k1_fe_inv_all_var(len, xi, x); - for (j = 0; j < len; j++) { - CHECK(check_fe_inverse(&x[j], &xi[j])); - } - secp256k1_fe_inv_all_var(len, xii, xi); - for (j = 0; j < len; j++) { - CHECK(check_fe_equal(&x[j], &xii[j])); - } - } -} - -void run_sqr(void) { - secp256k1_fe x, s; - - { - int i; - secp256k1_fe_set_int(&x, 1); - secp256k1_fe_negate(&x, &x, 1); - - for (i = 1; i <= 512; ++i) { - secp256k1_fe_mul_int(&x, 2); - secp256k1_fe_normalize(&x); - secp256k1_fe_sqr(&s, &x); - } - } -} - -void test_sqrt(const secp256k1_fe *a, const secp256k1_fe *k) { - secp256k1_fe r1, r2; - int v = secp256k1_fe_sqrt(&r1, a); - CHECK((v == 0) == (k == NULL)); - - if (k != NULL) { - /* Check that the returned root is +/- the given known answer */ - secp256k1_fe_negate(&r2, &r1, 1); - secp256k1_fe_add(&r1, k); secp256k1_fe_add(&r2, k); - secp256k1_fe_normalize(&r1); secp256k1_fe_normalize(&r2); - CHECK(secp256k1_fe_is_zero(&r1) || secp256k1_fe_is_zero(&r2)); - } -} - -void run_sqrt(void) { - secp256k1_fe ns, x, s, t; - int i; - - /* Check sqrt(0) is 0 */ - secp256k1_fe_set_int(&x, 0); - secp256k1_fe_sqr(&s, &x); - test_sqrt(&s, &x); - - /* Check sqrt of small squares (and their negatives) */ - for (i = 1; i <= 100; i++) { - secp256k1_fe_set_int(&x, i); - secp256k1_fe_sqr(&s, &x); - test_sqrt(&s, &x); - secp256k1_fe_negate(&t, &s, 1); - test_sqrt(&t, NULL); - } - - /* Consistency checks for large random values */ - for (i = 0; i < 10; i++) { - int j; - random_fe_non_square(&ns); - for (j = 0; j < count; j++) { - random_fe(&x); - secp256k1_fe_sqr(&s, &x); - test_sqrt(&s, &x); - secp256k1_fe_negate(&t, &s, 1); - test_sqrt(&t, NULL); - secp256k1_fe_mul(&t, &s, &ns); - test_sqrt(&t, NULL); - } - } -} - -/***** GROUP TESTS *****/ - -void ge_equals_ge(const secp256k1_ge *a, const secp256k1_ge *b) { - CHECK(a->infinity == b->infinity); - if (a->infinity) { - return; - } - CHECK(secp256k1_fe_equal_var(&a->x, &b->x)); - CHECK(secp256k1_fe_equal_var(&a->y, &b->y)); -} - -/* This compares jacobian points including their Z, not just their geometric meaning. */ -int gej_xyz_equals_gej(const secp256k1_gej *a, const secp256k1_gej *b) { - secp256k1_gej a2; - secp256k1_gej b2; - int ret = 1; - ret &= a->infinity == b->infinity; - if (ret && !a->infinity) { - a2 = *a; - b2 = *b; - secp256k1_fe_normalize(&a2.x); - secp256k1_fe_normalize(&a2.y); - secp256k1_fe_normalize(&a2.z); - secp256k1_fe_normalize(&b2.x); - secp256k1_fe_normalize(&b2.y); - secp256k1_fe_normalize(&b2.z); - ret &= secp256k1_fe_cmp_var(&a2.x, &b2.x) == 0; - ret &= secp256k1_fe_cmp_var(&a2.y, &b2.y) == 0; - ret &= secp256k1_fe_cmp_var(&a2.z, &b2.z) == 0; - } - return ret; -} - -void ge_equals_gej(const secp256k1_ge *a, const secp256k1_gej *b) { - secp256k1_fe z2s; - secp256k1_fe u1, u2, s1, s2; - CHECK(a->infinity == b->infinity); - if (a->infinity) { - return; - } - /* Check a.x * b.z^2 == b.x && a.y * b.z^3 == b.y, to avoid inverses. */ - secp256k1_fe_sqr(&z2s, &b->z); - secp256k1_fe_mul(&u1, &a->x, &z2s); - u2 = b->x; secp256k1_fe_normalize_weak(&u2); - secp256k1_fe_mul(&s1, &a->y, &z2s); secp256k1_fe_mul(&s1, &s1, &b->z); - s2 = b->y; secp256k1_fe_normalize_weak(&s2); - CHECK(secp256k1_fe_equal_var(&u1, &u2)); - CHECK(secp256k1_fe_equal_var(&s1, &s2)); -} - -void test_ge(void) { - int i, i1; -#ifdef USE_ENDOMORPHISM - int runs = 6; -#else - int runs = 4; -#endif - /* Points: (infinity, p1, p1, -p1, -p1, p2, p2, -p2, -p2, p3, p3, -p3, -p3, p4, p4, -p4, -p4). - * The second in each pair of identical points uses a random Z coordinate in the Jacobian form. - * All magnitudes are randomized. - * All 17*17 combinations of points are added to each other, using all applicable methods. - * - * When the endomorphism code is compiled in, p5 = lambda*p1 and p6 = lambda^2*p1 are added as well. - */ - secp256k1_ge *ge = (secp256k1_ge *)malloc(sizeof(secp256k1_ge) * (1 + 4 * runs)); - secp256k1_gej *gej = (secp256k1_gej *)malloc(sizeof(secp256k1_gej) * (1 + 4 * runs)); - secp256k1_fe *zinv = (secp256k1_fe *)malloc(sizeof(secp256k1_fe) * (1 + 4 * runs)); - secp256k1_fe zf; - secp256k1_fe zfi2, zfi3; - - secp256k1_gej_set_infinity(&gej[0]); - secp256k1_ge_clear(&ge[0]); - secp256k1_ge_set_gej_var(&ge[0], &gej[0]); - for (i = 0; i < runs; i++) { - int j; - secp256k1_ge g; - random_group_element_test(&g); -#ifdef USE_ENDOMORPHISM - if (i >= runs - 2) { - secp256k1_ge_mul_lambda(&g, &ge[1]); - } - if (i >= runs - 1) { - secp256k1_ge_mul_lambda(&g, &g); - } -#endif - ge[1 + 4 * i] = g; - ge[2 + 4 * i] = g; - secp256k1_ge_neg(&ge[3 + 4 * i], &g); - secp256k1_ge_neg(&ge[4 + 4 * i], &g); - secp256k1_gej_set_ge(&gej[1 + 4 * i], &ge[1 + 4 * i]); - random_group_element_jacobian_test(&gej[2 + 4 * i], &ge[2 + 4 * i]); - secp256k1_gej_set_ge(&gej[3 + 4 * i], &ge[3 + 4 * i]); - random_group_element_jacobian_test(&gej[4 + 4 * i], &ge[4 + 4 * i]); - for (j = 0; j < 4; j++) { - random_field_element_magnitude(&ge[1 + j + 4 * i].x); - random_field_element_magnitude(&ge[1 + j + 4 * i].y); - random_field_element_magnitude(&gej[1 + j + 4 * i].x); - random_field_element_magnitude(&gej[1 + j + 4 * i].y); - random_field_element_magnitude(&gej[1 + j + 4 * i].z); - } - } - - /* Compute z inverses. */ - { - secp256k1_fe *zs = malloc(sizeof(secp256k1_fe) * (1 + 4 * runs)); - for (i = 0; i < 4 * runs + 1; i++) { - if (i == 0) { - /* The point at infinity does not have a meaningful z inverse. Any should do. */ - do { - random_field_element_test(&zs[i]); - } while(secp256k1_fe_is_zero(&zs[i])); - } else { - zs[i] = gej[i].z; - } - } - secp256k1_fe_inv_all_var(4 * runs + 1, zinv, zs); - free(zs); - } - - /* Generate random zf, and zfi2 = 1/zf^2, zfi3 = 1/zf^3 */ - do { - random_field_element_test(&zf); - } while(secp256k1_fe_is_zero(&zf)); - random_field_element_magnitude(&zf); - secp256k1_fe_inv_var(&zfi3, &zf); - secp256k1_fe_sqr(&zfi2, &zfi3); - secp256k1_fe_mul(&zfi3, &zfi3, &zfi2); - - for (i1 = 0; i1 < 1 + 4 * runs; i1++) { - int i2; - for (i2 = 0; i2 < 1 + 4 * runs; i2++) { - /* Compute reference result using gej + gej (var). */ - secp256k1_gej refj, resj; - secp256k1_ge ref; - secp256k1_fe zr; - secp256k1_gej_add_var(&refj, &gej[i1], &gej[i2], secp256k1_gej_is_infinity(&gej[i1]) ? NULL : &zr); - /* Check Z ratio. */ - if (!secp256k1_gej_is_infinity(&gej[i1]) && !secp256k1_gej_is_infinity(&refj)) { - secp256k1_fe zrz; secp256k1_fe_mul(&zrz, &zr, &gej[i1].z); - CHECK(secp256k1_fe_equal_var(&zrz, &refj.z)); - } - secp256k1_ge_set_gej_var(&ref, &refj); - - /* Test gej + ge with Z ratio result (var). */ - secp256k1_gej_add_ge_var(&resj, &gej[i1], &ge[i2], secp256k1_gej_is_infinity(&gej[i1]) ? NULL : &zr); - ge_equals_gej(&ref, &resj); - if (!secp256k1_gej_is_infinity(&gej[i1]) && !secp256k1_gej_is_infinity(&resj)) { - secp256k1_fe zrz; secp256k1_fe_mul(&zrz, &zr, &gej[i1].z); - CHECK(secp256k1_fe_equal_var(&zrz, &resj.z)); - } - - /* Test gej + ge (var, with additional Z factor). */ - { - secp256k1_ge ge2_zfi = ge[i2]; /* the second term with x and y rescaled for z = 1/zf */ - secp256k1_fe_mul(&ge2_zfi.x, &ge2_zfi.x, &zfi2); - secp256k1_fe_mul(&ge2_zfi.y, &ge2_zfi.y, &zfi3); - random_field_element_magnitude(&ge2_zfi.x); - random_field_element_magnitude(&ge2_zfi.y); - secp256k1_gej_add_zinv_var(&resj, &gej[i1], &ge2_zfi, &zf); - ge_equals_gej(&ref, &resj); - } - - /* Test gej + ge (const). */ - if (i2 != 0) { - /* secp256k1_gej_add_ge does not support its second argument being infinity. */ - secp256k1_gej_add_ge(&resj, &gej[i1], &ge[i2]); - ge_equals_gej(&ref, &resj); - } - - /* Test doubling (var). */ - if ((i1 == 0 && i2 == 0) || ((i1 + 3)/4 == (i2 + 3)/4 && ((i1 + 3)%4)/2 == ((i2 + 3)%4)/2)) { - secp256k1_fe zr2; - /* Normal doubling with Z ratio result. */ - secp256k1_gej_double_var(&resj, &gej[i1], &zr2); - ge_equals_gej(&ref, &resj); - /* Check Z ratio. */ - secp256k1_fe_mul(&zr2, &zr2, &gej[i1].z); - CHECK(secp256k1_fe_equal_var(&zr2, &resj.z)); - /* Normal doubling. */ - secp256k1_gej_double_var(&resj, &gej[i2], NULL); - ge_equals_gej(&ref, &resj); - } - - /* Test adding opposites. */ - if ((i1 == 0 && i2 == 0) || ((i1 + 3)/4 == (i2 + 3)/4 && ((i1 + 3)%4)/2 != ((i2 + 3)%4)/2)) { - CHECK(secp256k1_ge_is_infinity(&ref)); - } - - /* Test adding infinity. */ - if (i1 == 0) { - CHECK(secp256k1_ge_is_infinity(&ge[i1])); - CHECK(secp256k1_gej_is_infinity(&gej[i1])); - ge_equals_gej(&ref, &gej[i2]); - } - if (i2 == 0) { - CHECK(secp256k1_ge_is_infinity(&ge[i2])); - CHECK(secp256k1_gej_is_infinity(&gej[i2])); - ge_equals_gej(&ref, &gej[i1]); - } - } - } - - /* Test adding all points together in random order equals infinity. */ - { - secp256k1_gej sum = SECP256K1_GEJ_CONST_INFINITY; - secp256k1_gej *gej_shuffled = (secp256k1_gej *)malloc((4 * runs + 1) * sizeof(secp256k1_gej)); - for (i = 0; i < 4 * runs + 1; i++) { - gej_shuffled[i] = gej[i]; - } - for (i = 0; i < 4 * runs + 1; i++) { - int swap = i + secp256k1_rand_int(4 * runs + 1 - i); - if (swap != i) { - secp256k1_gej t = gej_shuffled[i]; - gej_shuffled[i] = gej_shuffled[swap]; - gej_shuffled[swap] = t; - } - } - for (i = 0; i < 4 * runs + 1; i++) { - secp256k1_gej_add_var(&sum, &sum, &gej_shuffled[i], NULL); - } - CHECK(secp256k1_gej_is_infinity(&sum)); - free(gej_shuffled); - } - - /* Test batch gej -> ge conversion with and without known z ratios. */ - { - secp256k1_fe *zr = (secp256k1_fe *)malloc((4 * runs + 1) * sizeof(secp256k1_fe)); - secp256k1_ge *ge_set_table = (secp256k1_ge *)malloc((4 * runs + 1) * sizeof(secp256k1_ge)); - secp256k1_ge *ge_set_all = (secp256k1_ge *)malloc((4 * runs + 1) * sizeof(secp256k1_ge)); - for (i = 0; i < 4 * runs + 1; i++) { - /* Compute gej[i + 1].z / gez[i].z (with gej[n].z taken to be 1). */ - if (i < 4 * runs) { - secp256k1_fe_mul(&zr[i + 1], &zinv[i], &gej[i + 1].z); - } - } - secp256k1_ge_set_table_gej_var(4 * runs + 1, ge_set_table, gej, zr); - secp256k1_ge_set_all_gej_var(4 * runs + 1, ge_set_all, gej, &ctx->error_callback); - for (i = 0; i < 4 * runs + 1; i++) { - secp256k1_fe s; - random_fe_non_zero(&s); - secp256k1_gej_rescale(&gej[i], &s); - ge_equals_gej(&ge_set_table[i], &gej[i]); - ge_equals_gej(&ge_set_all[i], &gej[i]); - } - free(ge_set_table); - free(ge_set_all); - free(zr); - } - - free(ge); - free(gej); - free(zinv); -} - -void test_add_neg_y_diff_x(void) { - /* The point of this test is to check that we can add two points - * whose y-coordinates are negatives of each other but whose x - * coordinates differ. If the x-coordinates were the same, these - * points would be negatives of each other and their sum is - * infinity. This is cool because it "covers up" any degeneracy - * in the addition algorithm that would cause the xy coordinates - * of the sum to be wrong (since infinity has no xy coordinates). - * HOWEVER, if the x-coordinates are different, infinity is the - * wrong answer, and such degeneracies are exposed. This is the - * root of https://github.com/bitcoin-core/secp256k1/issues/257 - * which this test is a regression test for. - * - * These points were generated in sage as - * # secp256k1 params - * F = FiniteField (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F) - * C = EllipticCurve ([F (0), F (7)]) - * G = C.lift_x(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798) - * N = FiniteField(G.order()) - * - * # endomorphism values (lambda is 1^{1/3} in N, beta is 1^{1/3} in F) - * x = polygen(N) - * lam = (1 - x^3).roots()[1][0] - * - * # random "bad pair" - * P = C.random_element() - * Q = -int(lam) * P - * print " P: %x %x" % P.xy() - * print " Q: %x %x" % Q.xy() - * print "P + Q: %x %x" % (P + Q).xy() - */ - secp256k1_gej aj = SECP256K1_GEJ_CONST( - 0x8d24cd95, 0x0a355af1, 0x3c543505, 0x44238d30, - 0x0643d79f, 0x05a59614, 0x2f8ec030, 0xd58977cb, - 0x001e337a, 0x38093dcd, 0x6c0f386d, 0x0b1293a8, - 0x4d72c879, 0xd7681924, 0x44e6d2f3, 0x9190117d - ); - secp256k1_gej bj = SECP256K1_GEJ_CONST( - 0xc7b74206, 0x1f788cd9, 0xabd0937d, 0x164a0d86, - 0x95f6ff75, 0xf19a4ce9, 0xd013bd7b, 0xbf92d2a7, - 0xffe1cc85, 0xc7f6c232, 0x93f0c792, 0xf4ed6c57, - 0xb28d3786, 0x2897e6db, 0xbb192d0b, 0x6e6feab2 - ); - secp256k1_gej sumj = SECP256K1_GEJ_CONST( - 0x671a63c0, 0x3efdad4c, 0x389a7798, 0x24356027, - 0xb3d69010, 0x278625c3, 0x5c86d390, 0x184a8f7a, - 0x5f6409c2, 0x2ce01f2b, 0x511fd375, 0x25071d08, - 0xda651801, 0x70e95caf, 0x8f0d893c, 0xbed8fbbe - ); - secp256k1_ge b; - secp256k1_gej resj; - secp256k1_ge res; - secp256k1_ge_set_gej(&b, &bj); - - secp256k1_gej_add_var(&resj, &aj, &bj, NULL); - secp256k1_ge_set_gej(&res, &resj); - ge_equals_gej(&res, &sumj); - - secp256k1_gej_add_ge(&resj, &aj, &b); - secp256k1_ge_set_gej(&res, &resj); - ge_equals_gej(&res, &sumj); - - secp256k1_gej_add_ge_var(&resj, &aj, &b, NULL); - secp256k1_ge_set_gej(&res, &resj); - ge_equals_gej(&res, &sumj); -} - -void run_ge(void) { - int i; - for (i = 0; i < count * 32; i++) { - test_ge(); - } - test_add_neg_y_diff_x(); -} - -void test_ec_combine(void) { - secp256k1_scalar sum = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0); - secp256k1_pubkey data[6]; - const secp256k1_pubkey* d[6]; - secp256k1_pubkey sd; - secp256k1_pubkey sd2; - secp256k1_gej Qj; - secp256k1_ge Q; - int i; - for (i = 1; i <= 6; i++) { - secp256k1_scalar s; - random_scalar_order_test(&s); - secp256k1_scalar_add(&sum, &sum, &s); - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &Qj, &s); - secp256k1_ge_set_gej(&Q, &Qj); - secp256k1_pubkey_save(&data[i - 1], &Q); - d[i - 1] = &data[i - 1]; - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &Qj, &sum); - secp256k1_ge_set_gej(&Q, &Qj); - secp256k1_pubkey_save(&sd, &Q); - CHECK(secp256k1_ec_pubkey_combine(ctx, &sd2, d, i) == 1); - CHECK(memcmp(&sd, &sd2, sizeof(sd)) == 0); - } -} - -void run_ec_combine(void) { - int i; - for (i = 0; i < count * 8; i++) { - test_ec_combine(); - } -} - -void test_group_decompress(const secp256k1_fe* x) { - /* The input itself, normalized. */ - secp256k1_fe fex = *x; - secp256k1_fe fez; - /* Results of set_xquad_var, set_xo_var(..., 0), set_xo_var(..., 1). */ - secp256k1_ge ge_quad, ge_even, ge_odd; - secp256k1_gej gej_quad; - /* Return values of the above calls. */ - int res_quad, res_even, res_odd; - - secp256k1_fe_normalize_var(&fex); - - res_quad = secp256k1_ge_set_xquad(&ge_quad, &fex); - res_even = secp256k1_ge_set_xo_var(&ge_even, &fex, 0); - res_odd = secp256k1_ge_set_xo_var(&ge_odd, &fex, 1); - - CHECK(res_quad == res_even); - CHECK(res_quad == res_odd); - - if (res_quad) { - secp256k1_fe_normalize_var(&ge_quad.x); - secp256k1_fe_normalize_var(&ge_odd.x); - secp256k1_fe_normalize_var(&ge_even.x); - secp256k1_fe_normalize_var(&ge_quad.y); - secp256k1_fe_normalize_var(&ge_odd.y); - secp256k1_fe_normalize_var(&ge_even.y); - - /* No infinity allowed. */ - CHECK(!ge_quad.infinity); - CHECK(!ge_even.infinity); - CHECK(!ge_odd.infinity); - - /* Check that the x coordinates check out. */ - CHECK(secp256k1_fe_equal_var(&ge_quad.x, x)); - CHECK(secp256k1_fe_equal_var(&ge_even.x, x)); - CHECK(secp256k1_fe_equal_var(&ge_odd.x, x)); - - /* Check that the Y coordinate result in ge_quad is a square. */ - CHECK(secp256k1_fe_is_quad_var(&ge_quad.y)); - - /* Check odd/even Y in ge_odd, ge_even. */ - CHECK(secp256k1_fe_is_odd(&ge_odd.y)); - CHECK(!secp256k1_fe_is_odd(&ge_even.y)); - - /* Check secp256k1_gej_has_quad_y_var. */ - secp256k1_gej_set_ge(&gej_quad, &ge_quad); - CHECK(secp256k1_gej_has_quad_y_var(&gej_quad)); - do { - random_fe_test(&fez); - } while (secp256k1_fe_is_zero(&fez)); - secp256k1_gej_rescale(&gej_quad, &fez); - CHECK(secp256k1_gej_has_quad_y_var(&gej_quad)); - secp256k1_gej_neg(&gej_quad, &gej_quad); - CHECK(!secp256k1_gej_has_quad_y_var(&gej_quad)); - do { - random_fe_test(&fez); - } while (secp256k1_fe_is_zero(&fez)); - secp256k1_gej_rescale(&gej_quad, &fez); - CHECK(!secp256k1_gej_has_quad_y_var(&gej_quad)); - secp256k1_gej_neg(&gej_quad, &gej_quad); - CHECK(secp256k1_gej_has_quad_y_var(&gej_quad)); - } -} - -void run_group_decompress(void) { - int i; - for (i = 0; i < count * 4; i++) { - secp256k1_fe fe; - random_fe_test(&fe); - test_group_decompress(&fe); - } -} - -/***** ECMULT TESTS *****/ - -void run_ecmult_chain(void) { - /* random starting point A (on the curve) */ - secp256k1_gej a = SECP256K1_GEJ_CONST( - 0x8b30bbe9, 0xae2a9906, 0x96b22f67, 0x0709dff3, - 0x727fd8bc, 0x04d3362c, 0x6c7bf458, 0xe2846004, - 0xa357ae91, 0x5c4a6528, 0x1309edf2, 0x0504740f, - 0x0eb33439, 0x90216b4f, 0x81063cb6, 0x5f2f7e0f - ); - /* two random initial factors xn and gn */ - secp256k1_scalar xn = SECP256K1_SCALAR_CONST( - 0x84cc5452, 0xf7fde1ed, 0xb4d38a8c, 0xe9b1b84c, - 0xcef31f14, 0x6e569be9, 0x705d357a, 0x42985407 - ); - secp256k1_scalar gn = SECP256K1_SCALAR_CONST( - 0xa1e58d22, 0x553dcd42, 0xb2398062, 0x5d4c57a9, - 0x6e9323d4, 0x2b3152e5, 0xca2c3990, 0xedc7c9de - ); - /* two small multipliers to be applied to xn and gn in every iteration: */ - static const secp256k1_scalar xf = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0x1337); - static const secp256k1_scalar gf = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0x7113); - /* accumulators with the resulting coefficients to A and G */ - secp256k1_scalar ae = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1); - secp256k1_scalar ge = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0); - /* actual points */ - secp256k1_gej x; - secp256k1_gej x2; - int i; - - /* the point being computed */ - x = a; - for (i = 0; i < 200*count; i++) { - /* in each iteration, compute X = xn*X + gn*G; */ - secp256k1_ecmult(&ctx->ecmult_ctx, &x, &x, &xn, &gn); - /* also compute ae and ge: the actual accumulated factors for A and G */ - /* if X was (ae*A+ge*G), xn*X + gn*G results in (xn*ae*A + (xn*ge+gn)*G) */ - secp256k1_scalar_mul(&ae, &ae, &xn); - secp256k1_scalar_mul(&ge, &ge, &xn); - secp256k1_scalar_add(&ge, &ge, &gn); - /* modify xn and gn */ - secp256k1_scalar_mul(&xn, &xn, &xf); - secp256k1_scalar_mul(&gn, &gn, &gf); - - /* verify */ - if (i == 19999) { - /* expected result after 19999 iterations */ - secp256k1_gej rp = SECP256K1_GEJ_CONST( - 0xD6E96687, 0xF9B10D09, 0x2A6F3543, 0x9D86CEBE, - 0xA4535D0D, 0x409F5358, 0x6440BD74, 0xB933E830, - 0xB95CBCA2, 0xC77DA786, 0x539BE8FD, 0x53354D2D, - 0x3B4F566A, 0xE6580454, 0x07ED6015, 0xEE1B2A88 - ); - - secp256k1_gej_neg(&rp, &rp); - secp256k1_gej_add_var(&rp, &rp, &x, NULL); - CHECK(secp256k1_gej_is_infinity(&rp)); - } - } - /* redo the computation, but directly with the resulting ae and ge coefficients: */ - secp256k1_ecmult(&ctx->ecmult_ctx, &x2, &a, &ae, &ge); - secp256k1_gej_neg(&x2, &x2); - secp256k1_gej_add_var(&x2, &x2, &x, NULL); - CHECK(secp256k1_gej_is_infinity(&x2)); -} - -void test_point_times_order(const secp256k1_gej *point) { - /* X * (point + G) + (order-X) * (pointer + G) = 0 */ - secp256k1_scalar x; - secp256k1_scalar nx; - secp256k1_scalar zero = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0); - secp256k1_scalar one = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1); - secp256k1_gej res1, res2; - secp256k1_ge res3; - unsigned char pub[65]; - size_t psize = 65; - random_scalar_order_test(&x); - secp256k1_scalar_negate(&nx, &x); - secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &x, &x); /* calc res1 = x * point + x * G; */ - secp256k1_ecmult(&ctx->ecmult_ctx, &res2, point, &nx, &nx); /* calc res2 = (order - x) * point + (order - x) * G; */ - secp256k1_gej_add_var(&res1, &res1, &res2, NULL); - CHECK(secp256k1_gej_is_infinity(&res1)); - CHECK(secp256k1_gej_is_valid_var(&res1) == 0); - secp256k1_ge_set_gej(&res3, &res1); - CHECK(secp256k1_ge_is_infinity(&res3)); - CHECK(secp256k1_ge_is_valid_var(&res3) == 0); - CHECK(secp256k1_eckey_pubkey_serialize(&res3, pub, &psize, 0) == 0); - psize = 65; - CHECK(secp256k1_eckey_pubkey_serialize(&res3, pub, &psize, 1) == 0); - /* check zero/one edge cases */ - secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &zero, &zero); - secp256k1_ge_set_gej(&res3, &res1); - CHECK(secp256k1_ge_is_infinity(&res3)); - secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &one, &zero); - secp256k1_ge_set_gej(&res3, &res1); - ge_equals_gej(&res3, point); - secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &zero, &one); - secp256k1_ge_set_gej(&res3, &res1); - ge_equals_ge(&res3, &secp256k1_ge_const_g); -} - -void run_point_times_order(void) { - int i; - secp256k1_fe x = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 2); - static const secp256k1_fe xr = SECP256K1_FE_CONST( - 0x7603CB59, 0xB0EF6C63, 0xFE608479, 0x2A0C378C, - 0xDB3233A8, 0x0F8A9A09, 0xA877DEAD, 0x31B38C45 - ); - for (i = 0; i < 500; i++) { - secp256k1_ge p; - if (secp256k1_ge_set_xo_var(&p, &x, 1)) { - secp256k1_gej j; - CHECK(secp256k1_ge_is_valid_var(&p)); - secp256k1_gej_set_ge(&j, &p); - CHECK(secp256k1_gej_is_valid_var(&j)); - test_point_times_order(&j); - } - secp256k1_fe_sqr(&x, &x); - } - secp256k1_fe_normalize_var(&x); - CHECK(secp256k1_fe_equal_var(&x, &xr)); -} - -void ecmult_const_random_mult(void) { - /* random starting point A (on the curve) */ - secp256k1_ge a = SECP256K1_GE_CONST( - 0x6d986544, 0x57ff52b8, 0xcf1b8126, 0x5b802a5b, - 0xa97f9263, 0xb1e88044, 0x93351325, 0x91bc450a, - 0x535c59f7, 0x325e5d2b, 0xc391fbe8, 0x3c12787c, - 0x337e4a98, 0xe82a9011, 0x0123ba37, 0xdd769c7d - ); - /* random initial factor xn */ - secp256k1_scalar xn = SECP256K1_SCALAR_CONST( - 0x649d4f77, 0xc4242df7, 0x7f2079c9, 0x14530327, - 0xa31b876a, 0xd2d8ce2a, 0x2236d5c6, 0xd7b2029b - ); - /* expected xn * A (from sage) */ - secp256k1_ge expected_b = SECP256K1_GE_CONST( - 0x23773684, 0x4d209dc7, 0x098a786f, 0x20d06fcd, - 0x070a38bf, 0xc11ac651, 0x03004319, 0x1e2a8786, - 0xed8c3b8e, 0xc06dd57b, 0xd06ea66e, 0x45492b0f, - 0xb84e4e1b, 0xfb77e21f, 0x96baae2a, 0x63dec956 - ); - secp256k1_gej b; - secp256k1_ecmult_const(&b, &a, &xn); - - CHECK(secp256k1_ge_is_valid_var(&a)); - ge_equals_gej(&expected_b, &b); -} - -void ecmult_const_commutativity(void) { - secp256k1_scalar a; - secp256k1_scalar b; - secp256k1_gej res1; - secp256k1_gej res2; - secp256k1_ge mid1; - secp256k1_ge mid2; - random_scalar_order_test(&a); - random_scalar_order_test(&b); - - secp256k1_ecmult_const(&res1, &secp256k1_ge_const_g, &a); - secp256k1_ecmult_const(&res2, &secp256k1_ge_const_g, &b); - secp256k1_ge_set_gej(&mid1, &res1); - secp256k1_ge_set_gej(&mid2, &res2); - secp256k1_ecmult_const(&res1, &mid1, &b); - secp256k1_ecmult_const(&res2, &mid2, &a); - secp256k1_ge_set_gej(&mid1, &res1); - secp256k1_ge_set_gej(&mid2, &res2); - ge_equals_ge(&mid1, &mid2); -} - -void ecmult_const_mult_zero_one(void) { - secp256k1_scalar zero = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0); - secp256k1_scalar one = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1); - secp256k1_scalar negone; - secp256k1_gej res1; - secp256k1_ge res2; - secp256k1_ge point; - secp256k1_scalar_negate(&negone, &one); - - random_group_element_test(&point); - secp256k1_ecmult_const(&res1, &point, &zero); - secp256k1_ge_set_gej(&res2, &res1); - CHECK(secp256k1_ge_is_infinity(&res2)); - secp256k1_ecmult_const(&res1, &point, &one); - secp256k1_ge_set_gej(&res2, &res1); - ge_equals_ge(&res2, &point); - secp256k1_ecmult_const(&res1, &point, &negone); - secp256k1_gej_neg(&res1, &res1); - secp256k1_ge_set_gej(&res2, &res1); - ge_equals_ge(&res2, &point); -} - -void ecmult_const_chain_multiply(void) { - /* Check known result (randomly generated test problem from sage) */ - const secp256k1_scalar scalar = SECP256K1_SCALAR_CONST( - 0x4968d524, 0x2abf9b7a, 0x466abbcf, 0x34b11b6d, - 0xcd83d307, 0x827bed62, 0x05fad0ce, 0x18fae63b - ); - const secp256k1_gej expected_point = SECP256K1_GEJ_CONST( - 0x5494c15d, 0x32099706, 0xc2395f94, 0x348745fd, - 0x757ce30e, 0x4e8c90fb, 0xa2bad184, 0xf883c69f, - 0x5d195d20, 0xe191bf7f, 0x1be3e55f, 0x56a80196, - 0x6071ad01, 0xf1462f66, 0xc997fa94, 0xdb858435 - ); - secp256k1_gej point; - secp256k1_ge res; - int i; - - secp256k1_gej_set_ge(&point, &secp256k1_ge_const_g); - for (i = 0; i < 100; ++i) { - secp256k1_ge tmp; - secp256k1_ge_set_gej(&tmp, &point); - secp256k1_ecmult_const(&point, &tmp, &scalar); - } - secp256k1_ge_set_gej(&res, &point); - ge_equals_gej(&res, &expected_point); -} - -void run_ecmult_const_tests(void) { - ecmult_const_mult_zero_one(); - ecmult_const_random_mult(); - ecmult_const_commutativity(); - ecmult_const_chain_multiply(); -} - -void test_wnaf(const secp256k1_scalar *number, int w) { - secp256k1_scalar x, two, t; - int wnaf[256]; - int zeroes = -1; - int i; - int bits; - secp256k1_scalar_set_int(&x, 0); - secp256k1_scalar_set_int(&two, 2); - bits = secp256k1_ecmult_wnaf(wnaf, 256, number, w); - CHECK(bits <= 256); - for (i = bits-1; i >= 0; i--) { - int v = wnaf[i]; - secp256k1_scalar_mul(&x, &x, &two); - if (v) { - CHECK(zeroes == -1 || zeroes >= w-1); /* check that distance between non-zero elements is at least w-1 */ - zeroes=0; - CHECK((v & 1) == 1); /* check non-zero elements are odd */ - CHECK(v <= (1 << (w-1)) - 1); /* check range below */ - CHECK(v >= -(1 << (w-1)) - 1); /* check range above */ - } else { - CHECK(zeroes != -1); /* check that no unnecessary zero padding exists */ - zeroes++; - } - if (v >= 0) { - secp256k1_scalar_set_int(&t, v); - } else { - secp256k1_scalar_set_int(&t, -v); - secp256k1_scalar_negate(&t, &t); - } - secp256k1_scalar_add(&x, &x, &t); - } - CHECK(secp256k1_scalar_eq(&x, number)); /* check that wnaf represents number */ -} - -void test_constant_wnaf_negate(const secp256k1_scalar *number) { - secp256k1_scalar neg1 = *number; - secp256k1_scalar neg2 = *number; - int sign1 = 1; - int sign2 = 1; - - if (!secp256k1_scalar_get_bits(&neg1, 0, 1)) { - secp256k1_scalar_negate(&neg1, &neg1); - sign1 = -1; - } - sign2 = secp256k1_scalar_cond_negate(&neg2, secp256k1_scalar_is_even(&neg2)); - CHECK(sign1 == sign2); - CHECK(secp256k1_scalar_eq(&neg1, &neg2)); -} - -void test_constant_wnaf(const secp256k1_scalar *number, int w) { - secp256k1_scalar x, shift; - int wnaf[256] = {0}; - int i; - int skew; - secp256k1_scalar num = *number; - - secp256k1_scalar_set_int(&x, 0); - secp256k1_scalar_set_int(&shift, 1 << w); - /* With USE_ENDOMORPHISM on we only consider 128-bit numbers */ -#ifdef USE_ENDOMORPHISM - for (i = 0; i < 16; ++i) { - secp256k1_scalar_shr_int(&num, 8); - } -#endif - skew = secp256k1_wnaf_const(wnaf, num, w); - - for (i = WNAF_SIZE(w); i >= 0; --i) { - secp256k1_scalar t; - int v = wnaf[i]; - CHECK(v != 0); /* check nonzero */ - CHECK(v & 1); /* check parity */ - CHECK(v > -(1 << w)); /* check range above */ - CHECK(v < (1 << w)); /* check range below */ - - secp256k1_scalar_mul(&x, &x, &shift); - if (v >= 0) { - secp256k1_scalar_set_int(&t, v); - } else { - secp256k1_scalar_set_int(&t, -v); - secp256k1_scalar_negate(&t, &t); - } - secp256k1_scalar_add(&x, &x, &t); - } - /* Skew num because when encoding numbers as odd we use an offset */ - secp256k1_scalar_cadd_bit(&num, skew == 2, 1); - CHECK(secp256k1_scalar_eq(&x, &num)); -} - -void run_wnaf(void) { - int i; - secp256k1_scalar n = {{0}}; - - /* Sanity check: 1 and 2 are the smallest odd and even numbers and should - * have easier-to-diagnose failure modes */ - n.d[0] = 1; - test_constant_wnaf(&n, 4); - n.d[0] = 2; - test_constant_wnaf(&n, 4); - /* Random tests */ - for (i = 0; i < count; i++) { - random_scalar_order(&n); - test_wnaf(&n, 4+(i%10)); - test_constant_wnaf_negate(&n); - test_constant_wnaf(&n, 4 + (i % 10)); - } - secp256k1_scalar_set_int(&n, 0); - CHECK(secp256k1_scalar_cond_negate(&n, 1) == -1); - CHECK(secp256k1_scalar_is_zero(&n)); - CHECK(secp256k1_scalar_cond_negate(&n, 0) == 1); - CHECK(secp256k1_scalar_is_zero(&n)); -} - -void test_ecmult_constants(void) { - /* Test ecmult_gen() for [0..36) and [order-36..0). */ - secp256k1_scalar x; - secp256k1_gej r; - secp256k1_ge ng; - int i; - int j; - secp256k1_ge_neg(&ng, &secp256k1_ge_const_g); - for (i = 0; i < 36; i++ ) { - secp256k1_scalar_set_int(&x, i); - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &r, &x); - for (j = 0; j < i; j++) { - if (j == i - 1) { - ge_equals_gej(&secp256k1_ge_const_g, &r); - } - secp256k1_gej_add_ge(&r, &r, &ng); - } - CHECK(secp256k1_gej_is_infinity(&r)); - } - for (i = 1; i <= 36; i++ ) { - secp256k1_scalar_set_int(&x, i); - secp256k1_scalar_negate(&x, &x); - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &r, &x); - for (j = 0; j < i; j++) { - if (j == i - 1) { - ge_equals_gej(&ng, &r); - } - secp256k1_gej_add_ge(&r, &r, &secp256k1_ge_const_g); - } - CHECK(secp256k1_gej_is_infinity(&r)); - } -} - -void run_ecmult_constants(void) { - test_ecmult_constants(); -} - -void test_ecmult_gen_blind(void) { - /* Test ecmult_gen() blinding and confirm that the blinding changes, the affine points match, and the z's don't match. */ - secp256k1_scalar key; - secp256k1_scalar b; - unsigned char seed32[32]; - secp256k1_gej pgej; - secp256k1_gej pgej2; - secp256k1_gej i; - secp256k1_ge pge; - random_scalar_order_test(&key); - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pgej, &key); - secp256k1_rand256(seed32); - b = ctx->ecmult_gen_ctx.blind; - i = ctx->ecmult_gen_ctx.initial; - secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, seed32); - CHECK(!secp256k1_scalar_eq(&b, &ctx->ecmult_gen_ctx.blind)); - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pgej2, &key); - CHECK(!gej_xyz_equals_gej(&pgej, &pgej2)); - CHECK(!gej_xyz_equals_gej(&i, &ctx->ecmult_gen_ctx.initial)); - secp256k1_ge_set_gej(&pge, &pgej); - ge_equals_gej(&pge, &pgej2); -} - -void test_ecmult_gen_blind_reset(void) { - /* Test ecmult_gen() blinding reset and confirm that the blinding is consistent. */ - secp256k1_scalar b; - secp256k1_gej initial; - secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, 0); - b = ctx->ecmult_gen_ctx.blind; - initial = ctx->ecmult_gen_ctx.initial; - secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, 0); - CHECK(secp256k1_scalar_eq(&b, &ctx->ecmult_gen_ctx.blind)); - CHECK(gej_xyz_equals_gej(&initial, &ctx->ecmult_gen_ctx.initial)); -} - -void run_ecmult_gen_blind(void) { - int i; - test_ecmult_gen_blind_reset(); - for (i = 0; i < 10; i++) { - test_ecmult_gen_blind(); - } -} - -#ifdef USE_ENDOMORPHISM -/***** ENDOMORPHISH TESTS *****/ -void test_scalar_split(void) { - secp256k1_scalar full; - secp256k1_scalar s1, slam; - const unsigned char zero[32] = {0}; - unsigned char tmp[32]; - - random_scalar_order_test(&full); - secp256k1_scalar_split_lambda(&s1, &slam, &full); - - /* check that both are <= 128 bits in size */ - if (secp256k1_scalar_is_high(&s1)) { - secp256k1_scalar_negate(&s1, &s1); - } - if (secp256k1_scalar_is_high(&slam)) { - secp256k1_scalar_negate(&slam, &slam); - } - - secp256k1_scalar_get_b32(tmp, &s1); - CHECK(memcmp(zero, tmp, 16) == 0); - secp256k1_scalar_get_b32(tmp, &slam); - CHECK(memcmp(zero, tmp, 16) == 0); -} - -void run_endomorphism_tests(void) { - test_scalar_split(); -} -#endif - -void ec_pubkey_parse_pointtest(const unsigned char *input, int xvalid, int yvalid) { - unsigned char pubkeyc[65]; - secp256k1_pubkey pubkey; - secp256k1_ge ge; - size_t pubkeyclen; - int32_t ecount; - ecount = 0; - secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount); - for (pubkeyclen = 3; pubkeyclen <= 65; pubkeyclen++) { - /* Smaller sizes are tested exhaustively elsewhere. */ - int32_t i; - memcpy(&pubkeyc[1], input, 64); - VG_UNDEF(&pubkeyc[pubkeyclen], 65 - pubkeyclen); - for (i = 0; i < 256; i++) { - /* Try all type bytes. */ - int xpass; - int ypass; - int ysign; - pubkeyc[0] = i; - /* What sign does this point have? */ - ysign = (input[63] & 1) + 2; - /* For the current type (i) do we expect parsing to work? Handled all of compressed/uncompressed/hybrid. */ - xpass = xvalid && (pubkeyclen == 33) && ((i & 254) == 2); - /* Do we expect a parse and re-serialize as uncompressed to give a matching y? */ - ypass = xvalid && yvalid && ((i & 4) == ((pubkeyclen == 65) << 2)) && - ((i == 4) || ((i & 251) == ysign)) && ((pubkeyclen == 33) || (pubkeyclen == 65)); - if (xpass || ypass) { - /* These cases must parse. */ - unsigned char pubkeyo[65]; - size_t outl; - memset(&pubkey, 0, sizeof(pubkey)); - VG_UNDEF(&pubkey, sizeof(pubkey)); - ecount = 0; - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 1); - VG_CHECK(&pubkey, sizeof(pubkey)); - outl = 65; - VG_UNDEF(pubkeyo, 65); - CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyo, &outl, &pubkey, SECP256K1_EC_COMPRESSED) == 1); - VG_CHECK(pubkeyo, outl); - CHECK(outl == 33); - CHECK(memcmp(&pubkeyo[1], &pubkeyc[1], 32) == 0); - CHECK((pubkeyclen != 33) || (pubkeyo[0] == pubkeyc[0])); - if (ypass) { - /* This test isn't always done because we decode with alternative signs, so the y won't match. */ - CHECK(pubkeyo[0] == ysign); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 1); - memset(&pubkey, 0, sizeof(pubkey)); - VG_UNDEF(&pubkey, sizeof(pubkey)); - secp256k1_pubkey_save(&pubkey, &ge); - VG_CHECK(&pubkey, sizeof(pubkey)); - outl = 65; - VG_UNDEF(pubkeyo, 65); - CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyo, &outl, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 1); - VG_CHECK(pubkeyo, outl); - CHECK(outl == 65); - CHECK(pubkeyo[0] == 4); - CHECK(memcmp(&pubkeyo[1], input, 64) == 0); - } - CHECK(ecount == 0); - } else { - /* These cases must fail to parse. */ - memset(&pubkey, 0xfe, sizeof(pubkey)); - ecount = 0; - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 0); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0); - CHECK(ecount == 1); - } - } - } - secp256k1_context_set_illegal_callback(ctx, NULL, NULL); -} - -void run_ec_pubkey_parse_test(void) { -#define SECP256K1_EC_PARSE_TEST_NVALID (12) - const unsigned char valid[SECP256K1_EC_PARSE_TEST_NVALID][64] = { - { - /* Point with leading and trailing zeros in x and y serialization. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0xef, 0xa1, 0x7b, 0x77, 0x61, 0xe1, 0xe4, 0x27, 0x06, 0x98, 0x9f, 0xb4, 0x83, - 0xb8, 0xd2, 0xd4, 0x9b, 0xf7, 0x8f, 0xae, 0x98, 0x03, 0xf0, 0x99, 0xb8, 0x34, 0xed, 0xeb, 0x00 - }, - { - /* Point with x equal to a 3rd root of unity.*/ - 0x7a, 0xe9, 0x6a, 0x2b, 0x65, 0x7c, 0x07, 0x10, 0x6e, 0x64, 0x47, 0x9e, 0xac, 0x34, 0x34, 0xe9, - 0x9c, 0xf0, 0x49, 0x75, 0x12, 0xf5, 0x89, 0x95, 0xc1, 0x39, 0x6c, 0x28, 0x71, 0x95, 0x01, 0xee, - 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14, - 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee, - }, - { - /* Point with largest x. (1/2) */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2c, - 0x0e, 0x99, 0x4b, 0x14, 0xea, 0x72, 0xf8, 0xc3, 0xeb, 0x95, 0xc7, 0x1e, 0xf6, 0x92, 0x57, 0x5e, - 0x77, 0x50, 0x58, 0x33, 0x2d, 0x7e, 0x52, 0xd0, 0x99, 0x5c, 0xf8, 0x03, 0x88, 0x71, 0xb6, 0x7d, - }, - { - /* Point with largest x. (2/2) */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2c, - 0xf1, 0x66, 0xb4, 0xeb, 0x15, 0x8d, 0x07, 0x3c, 0x14, 0x6a, 0x38, 0xe1, 0x09, 0x6d, 0xa8, 0xa1, - 0x88, 0xaf, 0xa7, 0xcc, 0xd2, 0x81, 0xad, 0x2f, 0x66, 0xa3, 0x07, 0xfb, 0x77, 0x8e, 0x45, 0xb2, - }, - { - /* Point with smallest x. (1/2) */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14, - 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee, - }, - { - /* Point with smallest x. (2/2) */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xbd, 0xe7, 0x0d, 0xf5, 0x19, 0x39, 0xb9, 0x4c, 0x9c, 0x24, 0x97, 0x9f, 0xa7, 0xdd, 0x04, 0xeb, - 0xd9, 0xb3, 0x57, 0x2d, 0xa7, 0x80, 0x22, 0x90, 0x43, 0x8a, 0xf2, 0xa6, 0x81, 0x89, 0x54, 0x41, - }, - { - /* Point with largest y. (1/3) */ - 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6, - 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e, - }, - { - /* Point with largest y. (2/3) */ - 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c, - 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e, - }, - { - /* Point with largest y. (3/3) */ - 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc, - 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e, - }, - { - /* Point with smallest y. (1/3) */ - 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6, - 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - }, - { - /* Point with smallest y. (2/3) */ - 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c, - 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - }, - { - /* Point with smallest y. (3/3) */ - 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc, - 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 - } - }; -#define SECP256K1_EC_PARSE_TEST_NXVALID (4) - const unsigned char onlyxvalid[SECP256K1_EC_PARSE_TEST_NXVALID][64] = { - { - /* Valid if y overflow ignored (y = 1 mod p). (1/3) */ - 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6, - 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30, - }, - { - /* Valid if y overflow ignored (y = 1 mod p). (2/3) */ - 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c, - 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30, - }, - { - /* Valid if y overflow ignored (y = 1 mod p). (3/3)*/ - 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc, - 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30, - }, - { - /* x on curve, y is from y^2 = x^3 + 8. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 - } - }; -#define SECP256K1_EC_PARSE_TEST_NINVALID (7) - const unsigned char invalid[SECP256K1_EC_PARSE_TEST_NINVALID][64] = { - { - /* x is third root of -8, y is -1 * (x^3+7); also on the curve for y^2 = x^3 + 9. */ - 0x0a, 0x2d, 0x2b, 0xa9, 0x35, 0x07, 0xf1, 0xdf, 0x23, 0x37, 0x70, 0xc2, 0xa7, 0x97, 0x96, 0x2c, - 0xc6, 0x1f, 0x6d, 0x15, 0xda, 0x14, 0xec, 0xd4, 0x7d, 0x8d, 0x27, 0xae, 0x1c, 0xd5, 0xf8, 0x53, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - }, - { - /* Valid if x overflow ignored (x = 1 mod p). */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30, - 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14, - 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee, - }, - { - /* Valid if x overflow ignored (x = 1 mod p). */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30, - 0xbd, 0xe7, 0x0d, 0xf5, 0x19, 0x39, 0xb9, 0x4c, 0x9c, 0x24, 0x97, 0x9f, 0xa7, 0xdd, 0x04, 0xeb, - 0xd9, 0xb3, 0x57, 0x2d, 0xa7, 0x80, 0x22, 0x90, 0x43, 0x8a, 0xf2, 0xa6, 0x81, 0x89, 0x54, 0x41, - }, - { - /* x is -1, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 5. */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e, - 0xf4, 0x84, 0x14, 0x5c, 0xb0, 0x14, 0x9b, 0x82, 0x5d, 0xff, 0x41, 0x2f, 0xa0, 0x52, 0xa8, 0x3f, - 0xcb, 0x72, 0xdb, 0x61, 0xd5, 0x6f, 0x37, 0x70, 0xce, 0x06, 0x6b, 0x73, 0x49, 0xa2, 0xaa, 0x28, - }, - { - /* x is -1, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 5. */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e, - 0x0b, 0x7b, 0xeb, 0xa3, 0x4f, 0xeb, 0x64, 0x7d, 0xa2, 0x00, 0xbe, 0xd0, 0x5f, 0xad, 0x57, 0xc0, - 0x34, 0x8d, 0x24, 0x9e, 0x2a, 0x90, 0xc8, 0x8f, 0x31, 0xf9, 0x94, 0x8b, 0xb6, 0x5d, 0x52, 0x07, - }, - { - /* x is zero, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 7. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0x53, 0x7e, 0xef, 0xdf, 0xc1, 0x60, 0x6a, 0x07, 0x27, 0xcd, 0x69, 0xb4, 0xa7, 0x33, 0x3d, - 0x38, 0xed, 0x44, 0xe3, 0x93, 0x2a, 0x71, 0x79, 0xee, 0xcb, 0x4b, 0x6f, 0xba, 0x93, 0x60, 0xdc, - }, - { - /* x is zero, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 7. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xac, 0x81, 0x10, 0x20, 0x3e, 0x9f, 0x95, 0xf8, 0xd8, 0x32, 0x96, 0x4b, 0x58, 0xcc, 0xc2, - 0xc7, 0x12, 0xbb, 0x1c, 0x6c, 0xd5, 0x8e, 0x86, 0x11, 0x34, 0xb4, 0x8f, 0x45, 0x6c, 0x9b, 0x53 - } - }; - const unsigned char pubkeyc[66] = { - /* Serialization of G. */ - 0x04, 0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95, 0xCE, 0x87, 0x0B, - 0x07, 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9, 0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, - 0x98, 0x48, 0x3A, 0xDA, 0x77, 0x26, 0xA3, 0xC4, 0x65, 0x5D, 0xA4, 0xFB, 0xFC, 0x0E, 0x11, 0x08, - 0xA8, 0xFD, 0x17, 0xB4, 0x48, 0xA6, 0x85, 0x54, 0x19, 0x9C, 0x47, 0xD0, 0x8F, 0xFB, 0x10, 0xD4, - 0xB8, 0x00 - }; - unsigned char sout[65]; - unsigned char shortkey[2]; - secp256k1_ge ge; - secp256k1_pubkey pubkey; - size_t len; - int32_t i; - int32_t ecount; - int32_t ecount2; - ecount = 0; - /* Nothing should be reading this far into pubkeyc. */ - VG_UNDEF(&pubkeyc[65], 1); - secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount); - /* Zero length claimed, fail, zeroize, no illegal arg error. */ - memset(&pubkey, 0xfe, sizeof(pubkey)); - ecount = 0; - VG_UNDEF(shortkey, 2); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 0) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 0); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0); - CHECK(ecount == 1); - /* Length one claimed, fail, zeroize, no illegal arg error. */ - for (i = 0; i < 256 ; i++) { - memset(&pubkey, 0xfe, sizeof(pubkey)); - ecount = 0; - shortkey[0] = i; - VG_UNDEF(&shortkey[1], 1); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 1) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 0); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0); - CHECK(ecount == 1); - } - /* Length two claimed, fail, zeroize, no illegal arg error. */ - for (i = 0; i < 65536 ; i++) { - memset(&pubkey, 0xfe, sizeof(pubkey)); - ecount = 0; - shortkey[0] = i & 255; - shortkey[1] = i >> 8; - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 2) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 0); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0); - CHECK(ecount == 1); - } - memset(&pubkey, 0xfe, sizeof(pubkey)); - ecount = 0; - VG_UNDEF(&pubkey, sizeof(pubkey)); - /* 33 bytes claimed on otherwise valid input starting with 0x04, fail, zeroize output, no illegal arg error. */ - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 33) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 0); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0); - CHECK(ecount == 1); - /* NULL pubkey, illegal arg error. Pubkey isn't rewritten before this step, since it's NULL into the parser. */ - CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, pubkeyc, 65) == 0); - CHECK(ecount == 2); - /* NULL input string. Illegal arg and zeroize output. */ - memset(&pubkey, 0xfe, sizeof(pubkey)); - ecount = 0; - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, NULL, 65) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 1); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0); - CHECK(ecount == 2); - /* 64 bytes claimed on input starting with 0x04, fail, zeroize output, no illegal arg error. */ - memset(&pubkey, 0xfe, sizeof(pubkey)); - ecount = 0; - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 64) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 0); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0); - CHECK(ecount == 1); - /* 66 bytes claimed, fail, zeroize output, no illegal arg error. */ - memset(&pubkey, 0xfe, sizeof(pubkey)); - ecount = 0; - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 66) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 0); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0); - CHECK(ecount == 1); - /* Valid parse. */ - memset(&pubkey, 0, sizeof(pubkey)); - ecount = 0; - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 65) == 1); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(ecount == 0); - VG_UNDEF(&ge, sizeof(ge)); - CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 1); - VG_CHECK(&ge.x, sizeof(ge.x)); - VG_CHECK(&ge.y, sizeof(ge.y)); - VG_CHECK(&ge.infinity, sizeof(ge.infinity)); - ge_equals_ge(&secp256k1_ge_const_g, &ge); - CHECK(ecount == 0); - /* secp256k1_ec_pubkey_serialize illegal args. */ - ecount = 0; - len = 65; - CHECK(secp256k1_ec_pubkey_serialize(ctx, NULL, &len, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 0); - CHECK(ecount == 1); - CHECK(len == 0); - CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, NULL, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 0); - CHECK(ecount == 2); - len = 65; - VG_UNDEF(sout, 65); - CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, NULL, SECP256K1_EC_UNCOMPRESSED) == 0); - VG_CHECK(sout, 65); - CHECK(ecount == 3); - CHECK(len == 0); - len = 65; - CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, &pubkey, ~0) == 0); - CHECK(ecount == 4); - CHECK(len == 0); - len = 65; - VG_UNDEF(sout, 65); - CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 1); - VG_CHECK(sout, 65); - CHECK(ecount == 4); - CHECK(len == 65); - /* Multiple illegal args. Should still set arg error only once. */ - ecount = 0; - ecount2 = 11; - CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, NULL, 65) == 0); - CHECK(ecount == 1); - /* Does the illegal arg callback actually change the behavior? */ - secp256k1_context_set_illegal_callback(ctx, uncounting_illegal_callback_fn, &ecount2); - CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, NULL, 65) == 0); - CHECK(ecount == 1); - CHECK(ecount2 == 10); - secp256k1_context_set_illegal_callback(ctx, NULL, NULL); - /* Try a bunch of prefabbed points with all possible encodings. */ - for (i = 0; i < SECP256K1_EC_PARSE_TEST_NVALID; i++) { - ec_pubkey_parse_pointtest(valid[i], 1, 1); - } - for (i = 0; i < SECP256K1_EC_PARSE_TEST_NXVALID; i++) { - ec_pubkey_parse_pointtest(onlyxvalid[i], 1, 0); - } - for (i = 0; i < SECP256K1_EC_PARSE_TEST_NINVALID; i++) { - ec_pubkey_parse_pointtest(invalid[i], 0, 0); - } -} - -void run_eckey_edge_case_test(void) { - const unsigned char orderc[32] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, - 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41 - }; - const unsigned char zeros[sizeof(secp256k1_pubkey)] = {0x00}; - unsigned char ctmp[33]; - unsigned char ctmp2[33]; - secp256k1_pubkey pubkey; - secp256k1_pubkey pubkey2; - secp256k1_pubkey pubkey_one; - secp256k1_pubkey pubkey_negone; - const secp256k1_pubkey *pubkeys[3]; - size_t len; - int32_t ecount; - /* Group order is too large, reject. */ - CHECK(secp256k1_ec_seckey_verify(ctx, orderc) == 0); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, orderc) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - /* Maximum value is too large, reject. */ - memset(ctmp, 255, 32); - CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0); - memset(&pubkey, 1, sizeof(pubkey)); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - /* Zero is too small, reject. */ - memset(ctmp, 0, 32); - CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0); - memset(&pubkey, 1, sizeof(pubkey)); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - /* One must be accepted. */ - ctmp[31] = 0x01; - CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1); - memset(&pubkey, 0, sizeof(pubkey)); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 1); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0); - pubkey_one = pubkey; - /* Group order + 1 is too large, reject. */ - memcpy(ctmp, orderc, 32); - ctmp[31] = 0x42; - CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0); - memset(&pubkey, 1, sizeof(pubkey)); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - /* -1 must be accepted. */ - ctmp[31] = 0x40; - CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1); - memset(&pubkey, 0, sizeof(pubkey)); - VG_UNDEF(&pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 1); - VG_CHECK(&pubkey, sizeof(pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0); - pubkey_negone = pubkey; - /* Tweak of zero leaves the value changed. */ - memset(ctmp2, 0, 32); - CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, ctmp2) == 1); - CHECK(memcmp(orderc, ctmp, 31) == 0 && ctmp[31] == 0x40); - memcpy(&pubkey2, &pubkey, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1); - CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0); - /* Multiply tweak of zero zeroizes the output. */ - CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, ctmp2) == 0); - CHECK(memcmp(zeros, ctmp, 32) == 0); - CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, ctmp2) == 0); - CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0); - memcpy(&pubkey, &pubkey2, sizeof(pubkey)); - /* Overflowing key tweak zeroizes. */ - memcpy(ctmp, orderc, 32); - ctmp[31] = 0x40; - CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, orderc) == 0); - CHECK(memcmp(zeros, ctmp, 32) == 0); - memcpy(ctmp, orderc, 32); - ctmp[31] = 0x40; - CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, orderc) == 0); - CHECK(memcmp(zeros, ctmp, 32) == 0); - memcpy(ctmp, orderc, 32); - ctmp[31] = 0x40; - CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, orderc) == 0); - CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0); - memcpy(&pubkey, &pubkey2, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, orderc) == 0); - CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0); - memcpy(&pubkey, &pubkey2, sizeof(pubkey)); - /* Private key tweaks results in a key of zero. */ - ctmp2[31] = 1; - CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp2, ctmp) == 0); - CHECK(memcmp(zeros, ctmp2, 32) == 0); - ctmp2[31] = 1; - CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 0); - CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0); - memcpy(&pubkey, &pubkey2, sizeof(pubkey)); - /* Tweak computation wraps and results in a key of 1. */ - ctmp2[31] = 2; - CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp2, ctmp) == 1); - CHECK(memcmp(ctmp2, zeros, 31) == 0 && ctmp2[31] == 1); - ctmp2[31] = 2; - CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1); - ctmp2[31] = 1; - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, ctmp2) == 1); - CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0); - /* Tweak mul * 2 = 1+1. */ - CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1); - ctmp2[31] = 2; - CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey2, ctmp2) == 1); - CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0); - /* Test argument errors. */ - ecount = 0; - secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount); - CHECK(ecount == 0); - /* Zeroize pubkey on parse error. */ - memset(&pubkey, 0, 32); - CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 0); - CHECK(ecount == 1); - CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0); - memcpy(&pubkey, &pubkey2, sizeof(pubkey)); - memset(&pubkey2, 0, 32); - CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey2, ctmp2) == 0); - CHECK(ecount == 2); - CHECK(memcmp(&pubkey2, zeros, sizeof(pubkey2)) == 0); - /* Plain argument errors. */ - ecount = 0; - CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1); - CHECK(ecount == 0); - CHECK(secp256k1_ec_seckey_verify(ctx, NULL) == 0); - CHECK(ecount == 1); - ecount = 0; - memset(ctmp2, 0, 32); - ctmp2[31] = 4; - CHECK(secp256k1_ec_pubkey_tweak_add(ctx, NULL, ctmp2) == 0); - CHECK(ecount == 1); - CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, NULL) == 0); - CHECK(ecount == 2); - ecount = 0; - memset(ctmp2, 0, 32); - ctmp2[31] = 4; - CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, NULL, ctmp2) == 0); - CHECK(ecount == 1); - CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, NULL) == 0); - CHECK(ecount == 2); - ecount = 0; - memset(ctmp2, 0, 32); - CHECK(secp256k1_ec_privkey_tweak_add(ctx, NULL, ctmp2) == 0); - CHECK(ecount == 1); - CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, NULL) == 0); - CHECK(ecount == 2); - ecount = 0; - memset(ctmp2, 0, 32); - ctmp2[31] = 1; - CHECK(secp256k1_ec_privkey_tweak_mul(ctx, NULL, ctmp2) == 0); - CHECK(ecount == 1); - CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, NULL) == 0); - CHECK(ecount == 2); - ecount = 0; - CHECK(secp256k1_ec_pubkey_create(ctx, NULL, ctmp) == 0); - CHECK(ecount == 1); - memset(&pubkey, 1, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, NULL) == 0); - CHECK(ecount == 2); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - /* secp256k1_ec_pubkey_combine tests. */ - ecount = 0; - pubkeys[0] = &pubkey_one; - VG_UNDEF(&pubkeys[0], sizeof(secp256k1_pubkey *)); - VG_UNDEF(&pubkeys[1], sizeof(secp256k1_pubkey *)); - VG_UNDEF(&pubkeys[2], sizeof(secp256k1_pubkey *)); - memset(&pubkey, 255, sizeof(secp256k1_pubkey)); - VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 0) == 0); - VG_CHECK(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - CHECK(ecount == 1); - CHECK(secp256k1_ec_pubkey_combine(ctx, NULL, pubkeys, 1) == 0); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - CHECK(ecount == 2); - memset(&pubkey, 255, sizeof(secp256k1_pubkey)); - VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, NULL, 1) == 0); - VG_CHECK(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - CHECK(ecount == 3); - pubkeys[0] = &pubkey_negone; - memset(&pubkey, 255, sizeof(secp256k1_pubkey)); - VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 1) == 1); - VG_CHECK(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0); - CHECK(ecount == 3); - len = 33; - CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp, &len, &pubkey, SECP256K1_EC_COMPRESSED) == 1); - CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp2, &len, &pubkey_negone, SECP256K1_EC_COMPRESSED) == 1); - CHECK(memcmp(ctmp, ctmp2, 33) == 0); - /* Result is infinity. */ - pubkeys[0] = &pubkey_one; - pubkeys[1] = &pubkey_negone; - memset(&pubkey, 255, sizeof(secp256k1_pubkey)); - VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 2) == 0); - VG_CHECK(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0); - CHECK(ecount == 3); - /* Passes through infinity but comes out one. */ - pubkeys[2] = &pubkey_one; - memset(&pubkey, 255, sizeof(secp256k1_pubkey)); - VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 3) == 1); - VG_CHECK(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0); - CHECK(ecount == 3); - len = 33; - CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp, &len, &pubkey, SECP256K1_EC_COMPRESSED) == 1); - CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp2, &len, &pubkey_one, SECP256K1_EC_COMPRESSED) == 1); - CHECK(memcmp(ctmp, ctmp2, 33) == 0); - /* Adds to two. */ - pubkeys[1] = &pubkey_one; - memset(&pubkey, 255, sizeof(secp256k1_pubkey)); - VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 2) == 1); - VG_CHECK(&pubkey, sizeof(secp256k1_pubkey)); - CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0); - CHECK(ecount == 3); - secp256k1_context_set_illegal_callback(ctx, NULL, NULL); -} - -void random_sign(secp256k1_scalar *sigr, secp256k1_scalar *sigs, const secp256k1_scalar *key, const secp256k1_scalar *msg, int *recid) { - secp256k1_scalar nonce; - do { - random_scalar_order_test(&nonce); - } while(!secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, sigr, sigs, key, msg, &nonce, recid)); -} - -void test_ecdsa_sign_verify(void) { - secp256k1_gej pubj; - secp256k1_ge pub; - secp256k1_scalar one; - secp256k1_scalar msg, key; - secp256k1_scalar sigr, sigs; - int recid; - int getrec; - random_scalar_order_test(&msg); - random_scalar_order_test(&key); - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pubj, &key); - secp256k1_ge_set_gej(&pub, &pubj); - getrec = secp256k1_rand_bits(1); - random_sign(&sigr, &sigs, &key, &msg, getrec?&recid:NULL); - if (getrec) { - CHECK(recid >= 0 && recid < 4); - } - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &pub, &msg)); - secp256k1_scalar_set_int(&one, 1); - secp256k1_scalar_add(&msg, &msg, &one); - CHECK(!secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &pub, &msg)); -} - -void run_ecdsa_sign_verify(void) { - int i; - for (i = 0; i < 10*count; i++) { - test_ecdsa_sign_verify(); - } -} - -/** Dummy nonce generation function that just uses a precomputed nonce, and fails if it is not accepted. Use only for testing. */ -static int precomputed_nonce_function(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) { - (void)msg32; - (void)key32; - (void)algo16; - memcpy(nonce32, data, 32); - return (counter == 0); -} - -static int nonce_function_test_fail(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) { - /* Dummy nonce generator that has a fatal error on the first counter value. */ - if (counter == 0) { - return 0; - } - return nonce_function_rfc6979(nonce32, msg32, key32, algo16, data, counter - 1); -} - -static int nonce_function_test_retry(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) { - /* Dummy nonce generator that produces unacceptable nonces for the first several counter values. */ - if (counter < 3) { - memset(nonce32, counter==0 ? 0 : 255, 32); - if (counter == 2) { - nonce32[31]--; - } - return 1; - } - if (counter < 5) { - static const unsigned char order[] = { - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE, - 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B, - 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x41 - }; - memcpy(nonce32, order, 32); - if (counter == 4) { - nonce32[31]++; - } - return 1; - } - /* Retry rate of 6979 is negligible esp. as we only call this in deterministic tests. */ - /* If someone does fine a case where it retries for secp256k1, we'd like to know. */ - if (counter > 5) { - return 0; - } - return nonce_function_rfc6979(nonce32, msg32, key32, algo16, data, counter - 5); -} - -int is_empty_signature(const secp256k1_ecdsa_signature *sig) { - static const unsigned char res[sizeof(secp256k1_ecdsa_signature)] = {0}; - return memcmp(sig, res, sizeof(secp256k1_ecdsa_signature)) == 0; -} - -void test_ecdsa_end_to_end(void) { - unsigned char extra[32] = {0x00}; - unsigned char privkey[32]; - unsigned char message[32]; - unsigned char privkey2[32]; - secp256k1_ecdsa_signature signature[6]; - secp256k1_scalar r, s; - unsigned char sig[74]; - size_t siglen = 74; - unsigned char pubkeyc[65]; - size_t pubkeyclen = 65; - secp256k1_pubkey pubkey; - unsigned char seckey[300]; - size_t seckeylen = 300; - - /* Generate a random key and message. */ - { - secp256k1_scalar msg, key; - random_scalar_order_test(&msg); - random_scalar_order_test(&key); - secp256k1_scalar_get_b32(privkey, &key); - secp256k1_scalar_get_b32(message, &msg); - } - - /* Construct and verify corresponding public key. */ - CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1); - - /* Verify exporting and importing public key. */ - CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyc, &pubkeyclen, &pubkey, secp256k1_rand_bits(1) == 1 ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED)); - memset(&pubkey, 0, sizeof(pubkey)); - CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 1); - - /* Verify private key import and export. */ - CHECK(ec_privkey_export_der(ctx, seckey, &seckeylen, privkey, secp256k1_rand_bits(1) == 1)); - CHECK(ec_privkey_import_der(ctx, privkey2, seckey, seckeylen) == 1); - CHECK(memcmp(privkey, privkey2, 32) == 0); - - /* Optionally tweak the keys using addition. */ - if (secp256k1_rand_int(3) == 0) { - int ret1; - int ret2; - unsigned char rnd[32]; - secp256k1_pubkey pubkey2; - secp256k1_rand256_test(rnd); - ret1 = secp256k1_ec_privkey_tweak_add(ctx, privkey, rnd); - ret2 = secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, rnd); - CHECK(ret1 == ret2); - if (ret1 == 0) { - return; - } - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1); - CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0); - } - - /* Optionally tweak the keys using multiplication. */ - if (secp256k1_rand_int(3) == 0) { - int ret1; - int ret2; - unsigned char rnd[32]; - secp256k1_pubkey pubkey2; - secp256k1_rand256_test(rnd); - ret1 = secp256k1_ec_privkey_tweak_mul(ctx, privkey, rnd); - ret2 = secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, rnd); - CHECK(ret1 == ret2); - if (ret1 == 0) { - return; - } - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1); - CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0); - } - - /* Sign. */ - CHECK(secp256k1_ecdsa_sign(ctx, &signature[0], message, privkey, NULL, NULL) == 1); - CHECK(secp256k1_ecdsa_sign(ctx, &signature[4], message, privkey, NULL, NULL) == 1); - CHECK(secp256k1_ecdsa_sign(ctx, &signature[1], message, privkey, NULL, extra) == 1); - extra[31] = 1; - CHECK(secp256k1_ecdsa_sign(ctx, &signature[2], message, privkey, NULL, extra) == 1); - extra[31] = 0; - extra[0] = 1; - CHECK(secp256k1_ecdsa_sign(ctx, &signature[3], message, privkey, NULL, extra) == 1); - CHECK(memcmp(&signature[0], &signature[4], sizeof(signature[0])) == 0); - CHECK(memcmp(&signature[0], &signature[1], sizeof(signature[0])) != 0); - CHECK(memcmp(&signature[0], &signature[2], sizeof(signature[0])) != 0); - CHECK(memcmp(&signature[0], &signature[3], sizeof(signature[0])) != 0); - CHECK(memcmp(&signature[1], &signature[2], sizeof(signature[0])) != 0); - CHECK(memcmp(&signature[1], &signature[3], sizeof(signature[0])) != 0); - CHECK(memcmp(&signature[2], &signature[3], sizeof(signature[0])) != 0); - /* Verify. */ - CHECK(secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[1], message, &pubkey) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[2], message, &pubkey) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[3], message, &pubkey) == 1); - /* Test lower-S form, malleate, verify and fail, test again, malleate again */ - CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[0])); - secp256k1_ecdsa_signature_load(ctx, &r, &s, &signature[0]); - secp256k1_scalar_negate(&s, &s); - secp256k1_ecdsa_signature_save(&signature[5], &r, &s); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 0); - CHECK(secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5])); - CHECK(secp256k1_ecdsa_signature_normalize(ctx, &signature[5], &signature[5])); - CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5])); - CHECK(!secp256k1_ecdsa_signature_normalize(ctx, &signature[5], &signature[5])); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 1); - secp256k1_scalar_negate(&s, &s); - secp256k1_ecdsa_signature_save(&signature[5], &r, &s); - CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5])); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 1); - CHECK(memcmp(&signature[5], &signature[0], 64) == 0); - - /* Serialize/parse DER and verify again */ - CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, sig, &siglen, &signature[0]) == 1); - memset(&signature[0], 0, sizeof(signature[0])); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &signature[0], sig, siglen) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 1); - /* Serialize/destroy/parse DER and verify again. */ - siglen = 74; - CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, sig, &siglen, &signature[0]) == 1); - sig[secp256k1_rand_int(siglen)] += 1 + secp256k1_rand_int(255); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &signature[0], sig, siglen) == 0 || - secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 0); -} - -void test_random_pubkeys(void) { - secp256k1_ge elem; - secp256k1_ge elem2; - unsigned char in[65]; - /* Generate some randomly sized pubkeys. */ - size_t len = secp256k1_rand_bits(2) == 0 ? 65 : 33; - if (secp256k1_rand_bits(2) == 0) { - len = secp256k1_rand_bits(6); - } - if (len == 65) { - in[0] = secp256k1_rand_bits(1) ? 4 : (secp256k1_rand_bits(1) ? 6 : 7); - } else { - in[0] = secp256k1_rand_bits(1) ? 2 : 3; - } - if (secp256k1_rand_bits(3) == 0) { - in[0] = secp256k1_rand_bits(8); - } - if (len > 1) { - secp256k1_rand256(&in[1]); - } - if (len > 33) { - secp256k1_rand256(&in[33]); - } - if (secp256k1_eckey_pubkey_parse(&elem, in, len)) { - unsigned char out[65]; - unsigned char firstb; - int res; - size_t size = len; - firstb = in[0]; - /* If the pubkey can be parsed, it should round-trip... */ - CHECK(secp256k1_eckey_pubkey_serialize(&elem, out, &size, len == 33)); - CHECK(size == len); - CHECK(memcmp(&in[1], &out[1], len-1) == 0); - /* ... except for the type of hybrid inputs. */ - if ((in[0] != 6) && (in[0] != 7)) { - CHECK(in[0] == out[0]); - } - size = 65; - CHECK(secp256k1_eckey_pubkey_serialize(&elem, in, &size, 0)); - CHECK(size == 65); - CHECK(secp256k1_eckey_pubkey_parse(&elem2, in, size)); - ge_equals_ge(&elem,&elem2); - /* Check that the X9.62 hybrid type is checked. */ - in[0] = secp256k1_rand_bits(1) ? 6 : 7; - res = secp256k1_eckey_pubkey_parse(&elem2, in, size); - if (firstb == 2 || firstb == 3) { - if (in[0] == firstb + 4) { - CHECK(res); - } else { - CHECK(!res); - } - } - if (res) { - ge_equals_ge(&elem,&elem2); - CHECK(secp256k1_eckey_pubkey_serialize(&elem, out, &size, 0)); - CHECK(memcmp(&in[1], &out[1], 64) == 0); - } - } -} - -void run_random_pubkeys(void) { - int i; - for (i = 0; i < 10*count; i++) { - test_random_pubkeys(); - } -} - -void run_ecdsa_end_to_end(void) { - int i; - for (i = 0; i < 64*count; i++) { - test_ecdsa_end_to_end(); - } -} - -int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_der, int certainly_not_der) { - static const unsigned char zeroes[32] = {0}; -#ifdef ENABLE_OPENSSL_TESTS - static const unsigned char max_scalar[32] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, - 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40 - }; -#endif - - int ret = 0; - - secp256k1_ecdsa_signature sig_der; - unsigned char roundtrip_der[2048]; - unsigned char compact_der[64]; - size_t len_der = 2048; - int parsed_der = 0, valid_der = 0, roundtrips_der = 0; - - secp256k1_ecdsa_signature sig_der_lax; - unsigned char roundtrip_der_lax[2048]; - unsigned char compact_der_lax[64]; - size_t len_der_lax = 2048; - int parsed_der_lax = 0, valid_der_lax = 0, roundtrips_der_lax = 0; - -#ifdef ENABLE_OPENSSL_TESTS - ECDSA_SIG *sig_openssl; - const unsigned char *sigptr; - unsigned char roundtrip_openssl[2048]; - int len_openssl = 2048; - int parsed_openssl, valid_openssl = 0, roundtrips_openssl = 0; -#endif - - parsed_der = secp256k1_ecdsa_signature_parse_der(ctx, &sig_der, sig, siglen); - if (parsed_der) { - ret |= (!secp256k1_ecdsa_signature_serialize_compact(ctx, compact_der, &sig_der)) << 0; - valid_der = (memcmp(compact_der, zeroes, 32) != 0) && (memcmp(compact_der + 32, zeroes, 32) != 0); - } - if (valid_der) { - ret |= (!secp256k1_ecdsa_signature_serialize_der(ctx, roundtrip_der, &len_der, &sig_der)) << 1; - roundtrips_der = (len_der == siglen) && memcmp(roundtrip_der, sig, siglen) == 0; - } - - parsed_der_lax = ecdsa_signature_parse_der_lax(ctx, &sig_der_lax, sig, siglen); - if (parsed_der_lax) { - ret |= (!secp256k1_ecdsa_signature_serialize_compact(ctx, compact_der_lax, &sig_der_lax)) << 10; - valid_der_lax = (memcmp(compact_der_lax, zeroes, 32) != 0) && (memcmp(compact_der_lax + 32, zeroes, 32) != 0); - } - if (valid_der_lax) { - ret |= (!secp256k1_ecdsa_signature_serialize_der(ctx, roundtrip_der_lax, &len_der_lax, &sig_der_lax)) << 11; - roundtrips_der_lax = (len_der_lax == siglen) && memcmp(roundtrip_der_lax, sig, siglen) == 0; - } - - if (certainly_der) { - ret |= (!parsed_der) << 2; - } - if (certainly_not_der) { - ret |= (parsed_der) << 17; - } - if (valid_der) { - ret |= (!roundtrips_der) << 3; - } - - if (valid_der) { - ret |= (!roundtrips_der_lax) << 12; - ret |= (len_der != len_der_lax) << 13; - ret |= (memcmp(roundtrip_der_lax, roundtrip_der, len_der) != 0) << 14; - } - ret |= (roundtrips_der != roundtrips_der_lax) << 15; - if (parsed_der) { - ret |= (!parsed_der_lax) << 16; - } - -#ifdef ENABLE_OPENSSL_TESTS - sig_openssl = ECDSA_SIG_new(); - sigptr = sig; - parsed_openssl = (d2i_ECDSA_SIG(&sig_openssl, &sigptr, siglen) != NULL); - if (parsed_openssl) { - valid_openssl = !BN_is_negative(sig_openssl->r) && !BN_is_negative(sig_openssl->s) && BN_num_bits(sig_openssl->r) > 0 && BN_num_bits(sig_openssl->r) <= 256 && BN_num_bits(sig_openssl->s) > 0 && BN_num_bits(sig_openssl->s) <= 256; - if (valid_openssl) { - unsigned char tmp[32] = {0}; - BN_bn2bin(sig_openssl->r, tmp + 32 - BN_num_bytes(sig_openssl->r)); - valid_openssl = memcmp(tmp, max_scalar, 32) < 0; - } - if (valid_openssl) { - unsigned char tmp[32] = {0}; - BN_bn2bin(sig_openssl->s, tmp + 32 - BN_num_bytes(sig_openssl->s)); - valid_openssl = memcmp(tmp, max_scalar, 32) < 0; - } - } - len_openssl = i2d_ECDSA_SIG(sig_openssl, NULL); - if (len_openssl <= 2048) { - unsigned char *ptr = roundtrip_openssl; - CHECK(i2d_ECDSA_SIG(sig_openssl, &ptr) == len_openssl); - roundtrips_openssl = valid_openssl && ((size_t)len_openssl == siglen) && (memcmp(roundtrip_openssl, sig, siglen) == 0); - } else { - len_openssl = 0; - } - ECDSA_SIG_free(sig_openssl); - - ret |= (parsed_der && !parsed_openssl) << 4; - ret |= (valid_der && !valid_openssl) << 5; - ret |= (roundtrips_openssl && !parsed_der) << 6; - ret |= (roundtrips_der != roundtrips_openssl) << 7; - if (roundtrips_openssl) { - ret |= (len_der != (size_t)len_openssl) << 8; - ret |= (memcmp(roundtrip_der, roundtrip_openssl, len_der) != 0) << 9; - } -#endif - return ret; -} - -static void assign_big_endian(unsigned char *ptr, size_t ptrlen, uint32_t val) { - size_t i; - for (i = 0; i < ptrlen; i++) { - int shift = ptrlen - 1 - i; - if (shift >= 4) { - ptr[i] = 0; - } else { - ptr[i] = (val >> shift) & 0xFF; - } - } -} - -static void damage_array(unsigned char *sig, size_t *len) { - int pos; - int action = secp256k1_rand_bits(3); - if (action < 1 && *len > 3) { - /* Delete a byte. */ - pos = secp256k1_rand_int(*len); - memmove(sig + pos, sig + pos + 1, *len - pos - 1); - (*len)--; - return; - } else if (action < 2 && *len < 2048) { - /* Insert a byte. */ - pos = secp256k1_rand_int(1 + *len); - memmove(sig + pos + 1, sig + pos, *len - pos); - sig[pos] = secp256k1_rand_bits(8); - (*len)++; - return; - } else if (action < 4) { - /* Modify a byte. */ - sig[secp256k1_rand_int(*len)] += 1 + secp256k1_rand_int(255); - return; - } else { /* action < 8 */ - /* Modify a bit. */ - sig[secp256k1_rand_int(*len)] ^= 1 << secp256k1_rand_bits(3); - return; - } -} - -static void random_ber_signature(unsigned char *sig, size_t *len, int* certainly_der, int* certainly_not_der) { - int der; - int nlow[2], nlen[2], nlenlen[2], nhbit[2], nhbyte[2], nzlen[2]; - size_t tlen, elen, glen; - int indet; - int n; - - *len = 0; - der = secp256k1_rand_bits(2) == 0; - *certainly_der = der; - *certainly_not_der = 0; - indet = der ? 0 : secp256k1_rand_int(10) == 0; - - for (n = 0; n < 2; n++) { - /* We generate two classes of numbers: nlow==1 "low" ones (up to 32 bytes), nlow==0 "high" ones (32 bytes with 129 top bits set, or larger than 32 bytes) */ - nlow[n] = der ? 1 : (secp256k1_rand_bits(3) != 0); - /* The length of the number in bytes (the first byte of which will always be nonzero) */ - nlen[n] = nlow[n] ? secp256k1_rand_int(33) : 32 + secp256k1_rand_int(200) * secp256k1_rand_int(8) / 8; - CHECK(nlen[n] <= 232); - /* The top bit of the number. */ - nhbit[n] = (nlow[n] == 0 && nlen[n] == 32) ? 1 : (nlen[n] == 0 ? 0 : secp256k1_rand_bits(1)); - /* The top byte of the number (after the potential hardcoded 16 0xFF characters for "high" 32 bytes numbers) */ - nhbyte[n] = nlen[n] == 0 ? 0 : (nhbit[n] ? 128 + secp256k1_rand_bits(7) : 1 + secp256k1_rand_int(127)); - /* The number of zero bytes in front of the number (which is 0 or 1 in case of DER, otherwise we extend up to 300 bytes) */ - nzlen[n] = der ? ((nlen[n] == 0 || nhbit[n]) ? 1 : 0) : (nlow[n] ? secp256k1_rand_int(3) : secp256k1_rand_int(300 - nlen[n]) * secp256k1_rand_int(8) / 8); - if (nzlen[n] > ((nlen[n] == 0 || nhbit[n]) ? 1 : 0)) { - *certainly_not_der = 1; - } - CHECK(nlen[n] + nzlen[n] <= 300); - /* The length of the length descriptor for the number. 0 means short encoding, anything else is long encoding. */ - nlenlen[n] = nlen[n] + nzlen[n] < 128 ? 0 : (nlen[n] + nzlen[n] < 256 ? 1 : 2); - if (!der) { - /* nlenlen[n] max 127 bytes */ - int add = secp256k1_rand_int(127 - nlenlen[n]) * secp256k1_rand_int(16) * secp256k1_rand_int(16) / 256; - nlenlen[n] += add; - if (add != 0) { - *certainly_not_der = 1; - } - } - CHECK(nlen[n] + nzlen[n] + nlenlen[n] <= 427); - } - - /* The total length of the data to go, so far */ - tlen = 2 + nlenlen[0] + nlen[0] + nzlen[0] + 2 + nlenlen[1] + nlen[1] + nzlen[1]; - CHECK(tlen <= 856); - - /* The length of the garbage inside the tuple. */ - elen = (der || indet) ? 0 : secp256k1_rand_int(980 - tlen) * secp256k1_rand_int(8) / 8; - if (elen != 0) { - *certainly_not_der = 1; - } - tlen += elen; - CHECK(tlen <= 980); - - /* The length of the garbage after the end of the tuple. */ - glen = der ? 0 : secp256k1_rand_int(990 - tlen) * secp256k1_rand_int(8) / 8; - if (glen != 0) { - *certainly_not_der = 1; - } - CHECK(tlen + glen <= 990); - - /* Write the tuple header. */ - sig[(*len)++] = 0x30; - if (indet) { - /* Indeterminate length */ - sig[(*len)++] = 0x80; - *certainly_not_der = 1; - } else { - int tlenlen = tlen < 128 ? 0 : (tlen < 256 ? 1 : 2); - if (!der) { - int add = secp256k1_rand_int(127 - tlenlen) * secp256k1_rand_int(16) * secp256k1_rand_int(16) / 256; - tlenlen += add; - if (add != 0) { - *certainly_not_der = 1; - } - } - if (tlenlen == 0) { - /* Short length notation */ - sig[(*len)++] = tlen; - } else { - /* Long length notation */ - sig[(*len)++] = 128 + tlenlen; - assign_big_endian(sig + *len, tlenlen, tlen); - *len += tlenlen; - } - tlen += tlenlen; - } - tlen += 2; - CHECK(tlen + glen <= 1119); - - for (n = 0; n < 2; n++) { - /* Write the integer header. */ - sig[(*len)++] = 0x02; - if (nlenlen[n] == 0) { - /* Short length notation */ - sig[(*len)++] = nlen[n] + nzlen[n]; - } else { - /* Long length notation. */ - sig[(*len)++] = 128 + nlenlen[n]; - assign_big_endian(sig + *len, nlenlen[n], nlen[n] + nzlen[n]); - *len += nlenlen[n]; - } - /* Write zero padding */ - while (nzlen[n] > 0) { - sig[(*len)++] = 0x00; - nzlen[n]--; - } - if (nlen[n] == 32 && !nlow[n]) { - /* Special extra 16 0xFF bytes in "high" 32-byte numbers */ - int i; - for (i = 0; i < 16; i++) { - sig[(*len)++] = 0xFF; - } - nlen[n] -= 16; - } - /* Write first byte of number */ - if (nlen[n] > 0) { - sig[(*len)++] = nhbyte[n]; - nlen[n]--; - } - /* Generate remaining random bytes of number */ - secp256k1_rand_bytes_test(sig + *len, nlen[n]); - *len += nlen[n]; - nlen[n] = 0; - } - - /* Generate random garbage inside tuple. */ - secp256k1_rand_bytes_test(sig + *len, elen); - *len += elen; - - /* Generate end-of-contents bytes. */ - if (indet) { - sig[(*len)++] = 0; - sig[(*len)++] = 0; - tlen += 2; - } - CHECK(tlen + glen <= 1121); - - /* Generate random garbage outside tuple. */ - secp256k1_rand_bytes_test(sig + *len, glen); - *len += glen; - tlen += glen; - CHECK(tlen <= 1121); - CHECK(tlen == *len); -} - -void run_ecdsa_der_parse(void) { - int i,j; - for (i = 0; i < 200 * count; i++) { - unsigned char buffer[2048]; - size_t buflen = 0; - int certainly_der = 0; - int certainly_not_der = 0; - random_ber_signature(buffer, &buflen, &certainly_der, &certainly_not_der); - CHECK(buflen <= 2048); - for (j = 0; j < 16; j++) { - int ret = 0; - if (j > 0) { - damage_array(buffer, &buflen); - /* We don't know anything anymore about the DERness of the result */ - certainly_der = 0; - certainly_not_der = 0; - } - ret = test_ecdsa_der_parse(buffer, buflen, certainly_der, certainly_not_der); - if (ret != 0) { - size_t k; - fprintf(stderr, "Failure %x on ", ret); - for (k = 0; k < buflen; k++) { - fprintf(stderr, "%02x ", buffer[k]); - } - fprintf(stderr, "\n"); - } - CHECK(ret == 0); - } - } -} - -/* Tests several edge cases. */ -void test_ecdsa_edge_cases(void) { - int t; - secp256k1_ecdsa_signature sig; - - /* Test the case where ECDSA recomputes a point that is infinity. */ - { - secp256k1_gej keyj; - secp256k1_ge key; - secp256k1_scalar msg; - secp256k1_scalar sr, ss; - secp256k1_scalar_set_int(&ss, 1); - secp256k1_scalar_negate(&ss, &ss); - secp256k1_scalar_inverse(&ss, &ss); - secp256k1_scalar_set_int(&sr, 1); - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &keyj, &sr); - secp256k1_ge_set_gej(&key, &keyj); - msg = ss; - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0); - } - - /* Verify signature with r of zero fails. */ - { - const unsigned char pubkey_mods_zero[33] = { - 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, - 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, - 0x41 - }; - secp256k1_ge key; - secp256k1_scalar msg; - secp256k1_scalar sr, ss; - secp256k1_scalar_set_int(&ss, 1); - secp256k1_scalar_set_int(&msg, 0); - secp256k1_scalar_set_int(&sr, 0); - CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey_mods_zero, 33)); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0); - } - - /* Verify signature with s of zero fails. */ - { - const unsigned char pubkey[33] = { - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01 - }; - secp256k1_ge key; - secp256k1_scalar msg; - secp256k1_scalar sr, ss; - secp256k1_scalar_set_int(&ss, 0); - secp256k1_scalar_set_int(&msg, 0); - secp256k1_scalar_set_int(&sr, 1); - CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33)); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0); - } - - /* Verify signature with message 0 passes. */ - { - const unsigned char pubkey[33] = { - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02 - }; - const unsigned char pubkey2[33] = { - 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, - 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, - 0x43 - }; - secp256k1_ge key; - secp256k1_ge key2; - secp256k1_scalar msg; - secp256k1_scalar sr, ss; - secp256k1_scalar_set_int(&ss, 2); - secp256k1_scalar_set_int(&msg, 0); - secp256k1_scalar_set_int(&sr, 2); - CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33)); - CHECK(secp256k1_eckey_pubkey_parse(&key2, pubkey2, 33)); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1); - secp256k1_scalar_negate(&ss, &ss); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1); - secp256k1_scalar_set_int(&ss, 1); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 0); - } - - /* Verify signature with message 1 passes. */ - { - const unsigned char pubkey[33] = { - 0x02, 0x14, 0x4e, 0x5a, 0x58, 0xef, 0x5b, 0x22, - 0x6f, 0xd2, 0xe2, 0x07, 0x6a, 0x77, 0xcf, 0x05, - 0xb4, 0x1d, 0xe7, 0x4a, 0x30, 0x98, 0x27, 0x8c, - 0x93, 0xe6, 0xe6, 0x3c, 0x0b, 0xc4, 0x73, 0x76, - 0x25 - }; - const unsigned char pubkey2[33] = { - 0x02, 0x8a, 0xd5, 0x37, 0xed, 0x73, 0xd9, 0x40, - 0x1d, 0xa0, 0x33, 0xd2, 0xdc, 0xf0, 0xaf, 0xae, - 0x34, 0xcf, 0x5f, 0x96, 0x4c, 0x73, 0x28, 0x0f, - 0x92, 0xc0, 0xf6, 0x9d, 0xd9, 0xb2, 0x09, 0x10, - 0x62 - }; - const unsigned char csr[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4, - 0x40, 0x2d, 0xa1, 0x72, 0x2f, 0xc9, 0xba, 0xeb - }; - secp256k1_ge key; - secp256k1_ge key2; - secp256k1_scalar msg; - secp256k1_scalar sr, ss; - secp256k1_scalar_set_int(&ss, 1); - secp256k1_scalar_set_int(&msg, 1); - secp256k1_scalar_set_b32(&sr, csr, NULL); - CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33)); - CHECK(secp256k1_eckey_pubkey_parse(&key2, pubkey2, 33)); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1); - secp256k1_scalar_negate(&ss, &ss); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1); - secp256k1_scalar_set_int(&ss, 2); - secp256k1_scalar_inverse_var(&ss, &ss); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 0); - } - - /* Verify signature with message -1 passes. */ - { - const unsigned char pubkey[33] = { - 0x03, 0xaf, 0x97, 0xff, 0x7d, 0x3a, 0xf6, 0xa0, - 0x02, 0x94, 0xbd, 0x9f, 0x4b, 0x2e, 0xd7, 0x52, - 0x28, 0xdb, 0x49, 0x2a, 0x65, 0xcb, 0x1e, 0x27, - 0x57, 0x9c, 0xba, 0x74, 0x20, 0xd5, 0x1d, 0x20, - 0xf1 - }; - const unsigned char csr[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4, - 0x40, 0x2d, 0xa1, 0x72, 0x2f, 0xc9, 0xba, 0xee - }; - secp256k1_ge key; - secp256k1_scalar msg; - secp256k1_scalar sr, ss; - secp256k1_scalar_set_int(&ss, 1); - secp256k1_scalar_set_int(&msg, 1); - secp256k1_scalar_negate(&msg, &msg); - secp256k1_scalar_set_b32(&sr, csr, NULL); - CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33)); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1); - secp256k1_scalar_negate(&ss, &ss); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1); - secp256k1_scalar_set_int(&ss, 3); - secp256k1_scalar_inverse_var(&ss, &ss); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0); - } - - /* Signature where s would be zero. */ - { - secp256k1_pubkey pubkey; - size_t siglen; - int32_t ecount; - unsigned char signature[72]; - static const unsigned char nonce[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - }; - static const unsigned char nonce2[32] = { - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE, - 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B, - 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x40 - }; - const unsigned char key[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - }; - unsigned char msg[32] = { - 0x86, 0x41, 0x99, 0x81, 0x06, 0x23, 0x44, 0x53, - 0xaa, 0x5f, 0x9d, 0x6a, 0x31, 0x78, 0xf4, 0xf7, - 0xb8, 0x12, 0xe0, 0x0b, 0x81, 0x7a, 0x77, 0x62, - 0x65, 0xdf, 0xdd, 0x31, 0xb9, 0x3e, 0x29, 0xa9, - }; - ecount = 0; - secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount); - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce) == 0); - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce2) == 0); - msg[31] = 0xaa; - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce) == 1); - CHECK(ecount == 0); - CHECK(secp256k1_ecdsa_sign(ctx, NULL, msg, key, precomputed_nonce_function, nonce2) == 0); - CHECK(ecount == 1); - CHECK(secp256k1_ecdsa_sign(ctx, &sig, NULL, key, precomputed_nonce_function, nonce2) == 0); - CHECK(ecount == 2); - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, NULL, precomputed_nonce_function, nonce2) == 0); - CHECK(ecount == 3); - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce2) == 1); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, key) == 1); - CHECK(secp256k1_ecdsa_verify(ctx, NULL, msg, &pubkey) == 0); - CHECK(ecount == 4); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, NULL, &pubkey) == 0); - CHECK(ecount == 5); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, NULL) == 0); - CHECK(ecount == 6); - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, &pubkey) == 1); - CHECK(ecount == 6); - CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, NULL) == 0); - CHECK(ecount == 7); - /* That pubkeyload fails via an ARGCHECK is a little odd but makes sense because pubkeys are an opaque data type. */ - CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, &pubkey) == 0); - CHECK(ecount == 8); - siglen = 72; - CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, NULL, &siglen, &sig) == 0); - CHECK(ecount == 9); - CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, NULL, &sig) == 0); - CHECK(ecount == 10); - CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, NULL) == 0); - CHECK(ecount == 11); - CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, &sig) == 1); - CHECK(ecount == 11); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, NULL, signature, siglen) == 0); - CHECK(ecount == 12); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, NULL, siglen) == 0); - CHECK(ecount == 13); - CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, signature, siglen) == 1); - CHECK(ecount == 13); - siglen = 10; - /* Too little room for a signature does not fail via ARGCHECK. */ - CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, &sig) == 0); - CHECK(ecount == 13); - ecount = 0; - CHECK(secp256k1_ecdsa_signature_normalize(ctx, NULL, NULL) == 0); - CHECK(ecount == 1); - CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, NULL, &sig) == 0); - CHECK(ecount == 2); - CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, signature, NULL) == 0); - CHECK(ecount == 3); - CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, signature, &sig) == 1); - CHECK(ecount == 3); - CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, NULL, signature) == 0); - CHECK(ecount == 4); - CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, NULL) == 0); - CHECK(ecount == 5); - CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, signature) == 1); - CHECK(ecount == 5); - memset(signature, 255, 64); - CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, signature) == 0); - CHECK(ecount == 5); - secp256k1_context_set_illegal_callback(ctx, NULL, NULL); - } - - /* Nonce function corner cases. */ - for (t = 0; t < 2; t++) { - static const unsigned char zero[32] = {0x00}; - int i; - unsigned char key[32]; - unsigned char msg[32]; - secp256k1_ecdsa_signature sig2; - secp256k1_scalar sr[512], ss; - const unsigned char *extra; - extra = t == 0 ? NULL : zero; - memset(msg, 0, 32); - msg[31] = 1; - /* High key results in signature failure. */ - memset(key, 0xFF, 32); - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, NULL, extra) == 0); - CHECK(is_empty_signature(&sig)); - /* Zero key results in signature failure. */ - memset(key, 0, 32); - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, NULL, extra) == 0); - CHECK(is_empty_signature(&sig)); - /* Nonce function failure results in signature failure. */ - key[31] = 1; - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, nonce_function_test_fail, extra) == 0); - CHECK(is_empty_signature(&sig)); - /* The retry loop successfully makes its way to the first good value. */ - CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, nonce_function_test_retry, extra) == 1); - CHECK(!is_empty_signature(&sig)); - CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, nonce_function_rfc6979, extra) == 1); - CHECK(!is_empty_signature(&sig2)); - CHECK(memcmp(&sig, &sig2, sizeof(sig)) == 0); - /* The default nonce function is deterministic. */ - CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1); - CHECK(!is_empty_signature(&sig2)); - CHECK(memcmp(&sig, &sig2, sizeof(sig)) == 0); - /* The default nonce function changes output with different messages. */ - for(i = 0; i < 256; i++) { - int j; - msg[0] = i; - CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1); - CHECK(!is_empty_signature(&sig2)); - secp256k1_ecdsa_signature_load(ctx, &sr[i], &ss, &sig2); - for (j = 0; j < i; j++) { - CHECK(!secp256k1_scalar_eq(&sr[i], &sr[j])); - } - } - msg[0] = 0; - msg[31] = 2; - /* The default nonce function changes output with different keys. */ - for(i = 256; i < 512; i++) { - int j; - key[0] = i - 256; - CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1); - CHECK(!is_empty_signature(&sig2)); - secp256k1_ecdsa_signature_load(ctx, &sr[i], &ss, &sig2); - for (j = 0; j < i; j++) { - CHECK(!secp256k1_scalar_eq(&sr[i], &sr[j])); - } - } - key[0] = 0; - } - - { - /* Check that optional nonce arguments do not have equivalent effect. */ - const unsigned char zeros[32] = {0}; - unsigned char nonce[32]; - unsigned char nonce2[32]; - unsigned char nonce3[32]; - unsigned char nonce4[32]; - VG_UNDEF(nonce,32); - VG_UNDEF(nonce2,32); - VG_UNDEF(nonce3,32); - VG_UNDEF(nonce4,32); - CHECK(nonce_function_rfc6979(nonce, zeros, zeros, NULL, NULL, 0) == 1); - VG_CHECK(nonce,32); - CHECK(nonce_function_rfc6979(nonce2, zeros, zeros, zeros, NULL, 0) == 1); - VG_CHECK(nonce2,32); - CHECK(nonce_function_rfc6979(nonce3, zeros, zeros, NULL, (void *)zeros, 0) == 1); - VG_CHECK(nonce3,32); - CHECK(nonce_function_rfc6979(nonce4, zeros, zeros, zeros, (void *)zeros, 0) == 1); - VG_CHECK(nonce4,32); - CHECK(memcmp(nonce, nonce2, 32) != 0); - CHECK(memcmp(nonce, nonce3, 32) != 0); - CHECK(memcmp(nonce, nonce4, 32) != 0); - CHECK(memcmp(nonce2, nonce3, 32) != 0); - CHECK(memcmp(nonce2, nonce4, 32) != 0); - CHECK(memcmp(nonce3, nonce4, 32) != 0); - } - - - /* Privkey export where pubkey is the point at infinity. */ - { - unsigned char privkey[300]; - unsigned char seckey[32] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, - 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41, - }; - size_t outlen = 300; - CHECK(!ec_privkey_export_der(ctx, privkey, &outlen, seckey, 0)); - outlen = 300; - CHECK(!ec_privkey_export_der(ctx, privkey, &outlen, seckey, 1)); - } -} - -void run_ecdsa_edge_cases(void) { - test_ecdsa_edge_cases(); -} - -#ifdef ENABLE_OPENSSL_TESTS -EC_KEY *get_openssl_key(const unsigned char *key32) { - unsigned char privkey[300]; - size_t privkeylen; - const unsigned char* pbegin = privkey; - int compr = secp256k1_rand_bits(1); - EC_KEY *ec_key = EC_KEY_new_by_curve_name(NID_secp256k1); - CHECK(ec_privkey_export_der(ctx, privkey, &privkeylen, key32, compr)); - CHECK(d2i_ECPrivateKey(&ec_key, &pbegin, privkeylen)); - CHECK(EC_KEY_check_key(ec_key)); - return ec_key; -} - -void test_ecdsa_openssl(void) { - secp256k1_gej qj; - secp256k1_ge q; - secp256k1_scalar sigr, sigs; - secp256k1_scalar one; - secp256k1_scalar msg2; - secp256k1_scalar key, msg; - EC_KEY *ec_key; - unsigned int sigsize = 80; - size_t secp_sigsize = 80; - unsigned char message[32]; - unsigned char signature[80]; - unsigned char key32[32]; - secp256k1_rand256_test(message); - secp256k1_scalar_set_b32(&msg, message, NULL); - random_scalar_order_test(&key); - secp256k1_scalar_get_b32(key32, &key); - secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &qj, &key); - secp256k1_ge_set_gej(&q, &qj); - ec_key = get_openssl_key(key32); - CHECK(ec_key != NULL); - CHECK(ECDSA_sign(0, message, sizeof(message), signature, &sigsize, ec_key)); - CHECK(secp256k1_ecdsa_sig_parse(&sigr, &sigs, signature, sigsize)); - CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &q, &msg)); - secp256k1_scalar_set_int(&one, 1); - secp256k1_scalar_add(&msg2, &msg, &one); - CHECK(!secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &q, &msg2)); - - random_sign(&sigr, &sigs, &key, &msg, NULL); - CHECK(secp256k1_ecdsa_sig_serialize(signature, &secp_sigsize, &sigr, &sigs)); - CHECK(ECDSA_verify(0, message, sizeof(message), signature, secp_sigsize, ec_key) == 1); - - EC_KEY_free(ec_key); -} - -void run_ecdsa_openssl(void) { - int i; - for (i = 0; i < 10*count; i++) { - test_ecdsa_openssl(); - } -} -#endif - -#ifdef ENABLE_MODULE_ECDH -# include "modules/ecdh/tests_impl.h" -#endif - -#ifdef ENABLE_MODULE_SCHNORR -# include "modules/schnorr/tests_impl.h" -#endif - -#ifdef ENABLE_MODULE_RECOVERY -# include "modules/recovery/tests_impl.h" -#endif - -int main(int argc, char **argv) { - unsigned char seed16[16] = {0}; - unsigned char run32[32] = {0}; - /* find iteration count */ - if (argc > 1) { - count = strtol(argv[1], NULL, 0); - } - - /* find random seed */ - if (argc > 2) { - int pos = 0; - const char* ch = argv[2]; - while (pos < 16 && ch[0] != 0 && ch[1] != 0) { - unsigned short sh; - if (sscanf(ch, "%2hx", &sh)) { - seed16[pos] = sh; - } else { - break; - } - ch += 2; - pos++; - } - } else { - FILE *frand = fopen("/dev/urandom", "r"); - if ((frand == NULL) || !fread(&seed16, sizeof(seed16), 1, frand)) { - uint64_t t = time(NULL) * (uint64_t)1337; - seed16[0] ^= t; - seed16[1] ^= t >> 8; - seed16[2] ^= t >> 16; - seed16[3] ^= t >> 24; - seed16[4] ^= t >> 32; - seed16[5] ^= t >> 40; - seed16[6] ^= t >> 48; - seed16[7] ^= t >> 56; - } - fclose(frand); - } - secp256k1_rand_seed(seed16); - - printf("test count = %i\n", count); - printf("random seed = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", seed16[0], seed16[1], seed16[2], seed16[3], seed16[4], seed16[5], seed16[6], seed16[7], seed16[8], seed16[9], seed16[10], seed16[11], seed16[12], seed16[13], seed16[14], seed16[15]); - - /* initialize */ - run_context_tests(); - ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); - if (secp256k1_rand_bits(1)) { - secp256k1_rand256(run32); - CHECK(secp256k1_context_randomize(ctx, secp256k1_rand_bits(1) ? run32 : NULL)); - } - - run_rand_bits(); - run_rand_int(); - - run_sha256_tests(); - run_hmac_sha256_tests(); - run_rfc6979_hmac_sha256_tests(); - -#ifndef USE_NUM_NONE - /* num tests */ - run_num_smalltests(); -#endif - - /* scalar tests */ - run_scalar_tests(); - - /* field tests */ - run_field_inv(); - run_field_inv_var(); - run_field_inv_all_var(); - run_field_misc(); - run_field_convert(); - run_sqr(); - run_sqrt(); - - /* group tests */ - run_ge(); - run_group_decompress(); - - /* ecmult tests */ - run_wnaf(); - run_point_times_order(); - run_ecmult_chain(); - run_ecmult_constants(); - run_ecmult_gen_blind(); - run_ecmult_const_tests(); - run_ec_combine(); - - /* endomorphism tests */ -#ifdef USE_ENDOMORPHISM - run_endomorphism_tests(); -#endif - - /* EC point parser test */ - run_ec_pubkey_parse_test(); - - /* EC key edge cases */ - run_eckey_edge_case_test(); - -#ifdef ENABLE_MODULE_ECDH - /* ecdh tests */ - run_ecdh_tests(); -#endif - - /* ecdsa tests */ - run_random_pubkeys(); - run_ecdsa_der_parse(); - run_ecdsa_sign_verify(); - run_ecdsa_end_to_end(); - run_ecdsa_edge_cases(); -#ifdef ENABLE_OPENSSL_TESTS - run_ecdsa_openssl(); -#endif - -#ifdef ENABLE_MODULE_SCHNORR - /* Schnorr tests */ - run_schnorr_tests(); -#endif - -#ifdef ENABLE_MODULE_RECOVERY - /* ECDSA pubkey recovery tests */ - run_recovery_tests(); -#endif - - secp256k1_rand256(run32); - printf("random run = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", run32[0], run32[1], run32[2], run32[3], run32[4], run32[5], run32[6], run32[7], run32[8], run32[9], run32[10], run32[11], run32[12], run32[13], run32[14], run32[15]); - - /* shutdown */ - secp256k1_context_destroy(ctx); - - printf("no problems found\n"); - return 0; -} diff --git a/node_modules/secp256k1/src/secp256k1-src/src/util.h b/node_modules/secp256k1/src/secp256k1-src/src/util.h deleted file mode 100644 index 4eef4de..0000000 --- a/node_modules/secp256k1/src/secp256k1-src/src/util.h +++ /dev/null @@ -1,110 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file COPYING or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef _SECP256K1_UTIL_H_ -#define _SECP256K1_UTIL_H_ - -#if defined HAVE_CONFIG_H -#include "libsecp256k1-config.h" -#endif - -#include -#include -#include - -typedef struct { - void (*fn)(const char *text, void* data); - const void* data; -} secp256k1_callback; - -static SECP256K1_INLINE void secp256k1_callback_call(const secp256k1_callback * const cb, const char * const text) { - cb->fn(text, (void*)cb->data); -} - -#ifdef DETERMINISTIC -#define TEST_FAILURE(msg) do { \ - fprintf(stderr, "%s\n", msg); \ - abort(); \ -} while(0); -#else -#define TEST_FAILURE(msg) do { \ - fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, msg); \ - abort(); \ -} while(0) -#endif - -#ifdef HAVE_BUILTIN_EXPECT -#define EXPECT(x,c) __builtin_expect((x),(c)) -#else -#define EXPECT(x,c) (x) -#endif - -#ifdef DETERMINISTIC -#define CHECK(cond) do { \ - if (EXPECT(!(cond), 0)) { \ - TEST_FAILURE("test condition failed"); \ - } \ -} while(0) -#else -#define CHECK(cond) do { \ - if (EXPECT(!(cond), 0)) { \ - TEST_FAILURE("test condition failed: " #cond); \ - } \ -} while(0) -#endif - -/* Like assert(), but when VERIFY is defined, and side-effect safe. */ -#ifdef VERIFY -#define VERIFY_CHECK CHECK -#define VERIFY_SETUP(stmt) do { stmt; } while(0) -#else -#define VERIFY_CHECK(cond) do { (void)(cond); } while(0) -#define VERIFY_SETUP(stmt) -#endif - -static SECP256K1_INLINE void *checked_malloc(const secp256k1_callback* cb, size_t size) { - void *ret = malloc(size); - if (ret == NULL) { - secp256k1_callback_call(cb, "Out of memory"); - } - return ret; -} - -/* Macro for restrict, when available and not in a VERIFY build. */ -#if defined(SECP256K1_BUILD) && defined(VERIFY) -# define SECP256K1_RESTRICT -#else -# if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) ) -# if SECP256K1_GNUC_PREREQ(3,0) -# define SECP256K1_RESTRICT __restrict__ -# elif (defined(_MSC_VER) && _MSC_VER >= 1400) -# define SECP256K1_RESTRICT __restrict -# else -# define SECP256K1_RESTRICT -# endif -# else -# define SECP256K1_RESTRICT restrict -# endif -#endif - -#if defined(_WIN32) -# define I64FORMAT "I64d" -# define I64uFORMAT "I64u" -#else -# define I64FORMAT "lld" -# define I64uFORMAT "llu" -#endif - -#if defined(HAVE___INT128) -# if defined(__GNUC__) -# define SECP256K1_GNUC_EXT __extension__ -# else -# define SECP256K1_GNUC_EXT -# endif -SECP256K1_GNUC_EXT typedef unsigned __int128 uint128_t; -#endif - -#endif diff --git a/node_modules/secp256k1/src/signature.cc b/node_modules/secp256k1/src/signature.cc deleted file mode 100644 index db5ce7c..0000000 --- a/node_modules/secp256k1/src/signature.cc +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include -#include -#include - -#include "messages.h" -#include "util.h" - -extern secp256k1_context* secp256k1ctx; - -NAN_METHOD(signatureNormalize) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, ECDSA_SIGNATURE_TYPE_INVALID); - CHECK_BUFFER_LENGTH(input_buffer, 64, ECDSA_SIGNATURE_LENGTH_INVALID); - const unsigned char* input = (unsigned char*) node::Buffer::Data(input_buffer); - - secp256k1_ecdsa_signature sigin; - if (secp256k1_ecdsa_signature_parse_compact(secp256k1ctx, &sigin, input) == 0) { - return Nan::ThrowError(ECDSA_SIGNATURE_PARSE_FAIL); - } - - secp256k1_ecdsa_signature sigout; - secp256k1_ecdsa_signature_normalize(secp256k1ctx, &sigout, &sigin); - - unsigned char output[64]; - secp256k1_ecdsa_signature_serialize_compact(secp256k1ctx, &output[0], &sigout); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], 64)); -} - -NAN_METHOD(signatureExport) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, ECDSA_SIGNATURE_TYPE_INVALID); - CHECK_BUFFER_LENGTH(input_buffer, 64, ECDSA_SIGNATURE_LENGTH_INVALID); - const unsigned char* input = (unsigned char*) node::Buffer::Data(input_buffer); - - secp256k1_ecdsa_signature sig; - if (secp256k1_ecdsa_signature_parse_compact(secp256k1ctx, &sig, input) == 0) { - return Nan::ThrowError(ECDSA_SIGNATURE_PARSE_FAIL); - } - - unsigned char output[72]; - size_t output_length = 72; - if (secp256k1_ecdsa_signature_serialize_der(secp256k1ctx, &output[0], &output_length, &sig) == 0) { - return Nan::ThrowError(ECDSA_SIGNATURE_SERIALIZE_DER_FAIL); - } - - info.GetReturnValue().Set(COPY_BUFFER(&output[0], output_length)); -} - -NAN_METHOD(signatureImport) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, ECDSA_SIGNATURE_TYPE_INVALID); - CHECK_BUFFER_LENGTH_GT_ZERO(input_buffer, ECDSA_SIGNATURE_LENGTH_INVALID); - const unsigned char* input = (const unsigned char*) node::Buffer::Data(input_buffer); - size_t input_length = node::Buffer::Length(input_buffer); - - secp256k1_ecdsa_signature sig; - if (secp256k1_ecdsa_signature_parse_der(secp256k1ctx, &sig, input, input_length) == 0) { - return Nan::ThrowError(ECDSA_SIGNATURE_PARSE_DER_FAIL); - } - - unsigned char output[64]; - secp256k1_ecdsa_signature_serialize_compact(secp256k1ctx, &output[0], &sig); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], 64)); -} - -NAN_METHOD(signatureImportLax) { - Nan::HandleScope scope; - - v8::Local input_buffer = info[0].As(); - CHECK_TYPE_BUFFER(input_buffer, ECDSA_SIGNATURE_TYPE_INVALID); - CHECK_BUFFER_LENGTH_GT_ZERO(input_buffer, ECDSA_SIGNATURE_LENGTH_INVALID); - const unsigned char* input = (const unsigned char*) node::Buffer::Data(input_buffer); - size_t input_length = node::Buffer::Length(input_buffer); - - secp256k1_ecdsa_signature sig; - if (ecdsa_signature_parse_der_lax(secp256k1ctx, &sig, input, input_length) == 0) { - return Nan::ThrowError(ECDSA_SIGNATURE_PARSE_DER_FAIL); - } - - unsigned char output[64]; - secp256k1_ecdsa_signature_serialize_compact(secp256k1ctx, &output[0], &sig); - info.GetReturnValue().Set(COPY_BUFFER(&output[0], 64)); -} diff --git a/node_modules/secp256k1/src/signature.h b/node_modules/secp256k1/src/signature.h deleted file mode 100644 index 00b4046..0000000 --- a/node_modules/secp256k1/src/signature.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _SECP256K1_NODE_SIGNATURE_ -# define _SECP256K1_NODE_SIGNATURE_ - -#include -#include - -NAN_METHOD(signatureNormalize); -NAN_METHOD(signatureExport); -NAN_METHOD(signatureImport); -NAN_METHOD(signatureImportLax); - -#endif diff --git a/node_modules/secp256k1/src/util.h b/node_modules/secp256k1/src/util.h deleted file mode 100644 index 11d0752..0000000 --- a/node_modules/secp256k1/src/util.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef _SECP256K1_NODE_UTIL_ -# define _SECP256K1_NODE_UTIL_ - -#include -#include - -#include "messages.h" - -#define COPY_BUFFER(data, datalen) Nan::CopyBuffer((const char*) data, (uint32_t) datalen).ToLocalChecked() - -#define UPDATE_COMPRESSED_VALUE(compressed, value, v_true, v_false) { \ - if (!value->IsUndefined()) { \ - CHECK_TYPE_BOOLEAN(value, COMPRESSED_TYPE_INVALID); \ - compressed = value->BooleanValue() ? v_true : v_false; \ - } \ -} - -// TypeError -#define CHECK_TYPE_ARRAY(value, message) { \ - if (!value->IsArray()) { \ - return Nan::ThrowTypeError(message); \ - } \ -} - -#define CHECK_TYPE_BOOLEAN(value, message) { \ - if (!value->IsBoolean() && !value->IsBooleanObject()) { \ - return Nan::ThrowTypeError(message); \ - } \ -} - -#define CHECK_TYPE_BUFFER(value, message) { \ - if (!node::Buffer::HasInstance(value)) { \ - return Nan::ThrowTypeError(message); \ - } \ -} - -#define CHECK_TYPE_FUNCTION(value, message) { \ - if (!value->IsFunction()) { \ - return Nan::ThrowTypeError(message); \ - } \ -} - -#define CHECK_TYPE_NUMBER(value, message) { \ - if (!value->IsNumber() && !value->IsNumberObject()) { \ - return Nan::ThrowTypeError(message); \ - } \ -} - -#define CHECK_TYPE_OBJECT(value, message) { \ - if (!value->IsObject()) { \ - return Nan::ThrowTypeError(message); \ - } \ -} - -// RangeError -#define CHECK_BUFFER_LENGTH(buffer, length, message) { \ - if (node::Buffer::Length(buffer) != length) { \ - return Nan::ThrowRangeError(message); \ - } \ -} - -#define CHECK_BUFFER_LENGTH2(buffer, length1, length2, message) { \ - if (node::Buffer::Length(buffer) != length1 && \ - node::Buffer::Length(buffer) != length2) { \ - return Nan::ThrowRangeError(message); \ - } \ -} - -#define CHECK_BUFFER_LENGTH_GT_ZERO(buffer, message) { \ - if (node::Buffer::Length(buffer) == 0) { \ - return Nan::ThrowRangeError(message); \ - } \ -} - -#define CHECK_LENGTH_GT_ZERO(value, message) { \ - if (value->Length() == 0) { \ - return Nan::ThrowRangeError(message); \ - } \ -} - -#define CHECK_NUMBER_IN_INTERVAL(number, x, y, message) { \ - if (number->IntegerValue() <= x || number->IntegerValue() >= y) { \ - return Nan::ThrowRangeError(message); \ - } \ -} - -#endif diff --git a/node_modules/secp256k1/utils/has_lib.sh b/node_modules/secp256k1/utils/has_lib.sh deleted file mode 100755 index 49bed9f..0000000 --- a/node_modules/secp256k1/utils/has_lib.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -has_lib() { - local regex="lib$1.+(so|dylib)" - - # Add /sbin to path as ldconfig is located there on some systems - e.g. Debian - # (and it still can be used by unprivileged users): - PATH="$PATH:/sbin" - export PATH - - # Try just checking common library locations - for dir in /lib /usr/lib /usr/local/lib /opt/local/lib /usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu; do - test -d $dir && ls $dir | grep -E $regex && return 0 - done - - return 1 -} - -has_lib $1 > /dev/null -if test $? -eq 0; then - echo true -else - echo false -fi diff --git a/node_modules/seedrandom/.coveralls.yml b/node_modules/seedrandom/.coveralls.yml deleted file mode 100644 index 9160059..0000000 --- a/node_modules/seedrandom/.coveralls.yml +++ /dev/null @@ -1 +0,0 @@ -service_name: travis-ci diff --git a/node_modules/seedrandom/.npmignore b/node_modules/seedrandom/.npmignore deleted file mode 100644 index a088b6f..0000000 --- a/node_modules/seedrandom/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -bower_components diff --git a/node_modules/seedrandom/.travis.yml b/node_modules/seedrandom/.travis.yml deleted file mode 100644 index 036303f..0000000 --- a/node_modules/seedrandom/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: -- '0.10' -- '0.12' diff --git a/node_modules/seedrandom/Gruntfile.js b/node_modules/seedrandom/Gruntfile.js deleted file mode 100644 index f59ba6b..0000000 --- a/node_modules/seedrandom/Gruntfile.js +++ /dev/null @@ -1,86 +0,0 @@ -module.exports = function(grunt) { - "use strict"; - - grunt.initConfig({ - pkg: grunt.file.readJSON("package.json"), - bowercopy: { - options: { - clean: true - }, - test: { - options: { - destPrefix: "test/lib" - }, - files: { - "qunit.js" : "qunit/qunit/qunit.js", - "qunit.css" : "qunit/qunit/qunit.css", - "require.js" : "requirejs/require.js" - } - } - }, - uglify: { - all: { - files: { - "<%= pkg.name %>.min.js": [ "<%= pkg.name %>.js" ], - "lib/alea.min.js": [ "lib/alea.js" ], - "lib/tychei.min.js": [ "lib/tychei.js" ], - "lib/xor4096.min.js": [ "lib/xor4096.js" ], - "lib/xorshift7.min.js": [ "lib/xorshift7.js" ], - "lib/xorwow.min.js": [ "lib/xorwow.js" ], - "lib/xor128.min.js": [ "lib/xor128.js" ] - }, - options: { - preserveComments: false, - report: "min", - beautify: { - ascii_only: true - } - } - } - }, - sed: { - nullchar: { - path: "<%= pkg.name %>.min.js", - pattern: '\\\\x00', - replacement: '\\0' - }, - }, - qunit: { - options: { - noGlobals: true - }, - all: ["test/*.html"] - }, - mochacov: { - options: { - files: ['test/cryptotest.js', 'test/nodetest.js', 'test/prngtest.js'] - }, - coverage: { - options: { - coveralls: true - } - }, - test: { - options: { - reporter: 'dot' - } - } - }, - release: { - options: { - bump: false - } - } - }); - - grunt.loadNpmTasks('grunt-bowercopy'); - grunt.loadNpmTasks('grunt-contrib-qunit'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-mocha-cov'); - grunt.loadNpmTasks('grunt-release'); - grunt.loadNpmTasks('grunt-sed'); - - grunt.registerTask("default", ["uglify", "sed", "qunit", "mochacov:test"]); - grunt.registerTask("travis", ["default", "mochacov:coverage"]); -}; - diff --git a/node_modules/seedrandom/README.md b/node_modules/seedrandom/README.md deleted file mode 100644 index a8c06a8..0000000 --- a/node_modules/seedrandom/README.md +++ /dev/null @@ -1,297 +0,0 @@ -seedrandom.js -============= -[![Build Status](https://travis-ci.org/davidbau/seedrandom.svg?branch=master)](https://travis-ci.org/davidbau/seedrandom) -[![NPM version](https://badge.fury.io/js/seedrandom.svg)](http://badge.fury.io/js/seedrandom) -[![Bower version](https://badge.fury.io/bo/seedrandom.svg)](http://badge.fury.io/bo/seedrandom) - -Seeded random number generator for JavaScript. - -Version 2.4.2 - -Author: David Bau - -Date: 2015-07-04 - -Can be used as a plain script, a Node.js module or an AMD module. - - -Script tag usage ----------------- - -```html - -``` - -```js -// Sets Math.random to a PRNG initialized using the given explicit seed. -Math.seedrandom('hello.'); -console.log(Math.random()); // Always 0.9282578795792454 -console.log(Math.random()); // Always 0.3752569768646784 - -// Sets Math.random to an ARC4-based PRNG that is autoseeded using the -// current time, dom state, and other accumulated local entropy. -// The generated seed string is returned. -Math.seedrandom(); -console.log(Math.random()); // Reasonably unpredictable. - -// Seeds using the given explicit seed mixed with accumulated entropy. -Math.seedrandom('added entropy.', { entropy: true }); -console.log(Math.random()); // As unpredictable as added entropy. - -// Use "new" to create a local prng without altering Math.random. -var myrng = new Math.seedrandom('hello.'); -console.log(myrng()); // Always 0.9282578795792454 - -// Use "quick" to get only 32 bits of randomness in a float. -console.log(myrng.quick()); // Always 0.3752569768112153 - -// Use "int32" to get a 32 bit (signed) integer -console.log(myrng.int32()); // Always 986220731 - -``` - -Other Fast PRNG Algorithms --------------------------- - -The package includes some other fast PRNGs. To use Richard Brent's -xorgens-4096 PRNG: - - -```html - -``` - -```js -// Use xor4096 for Richard Brent's xorgens-4096 algorithm. -var xorgen = new xor4096('hello.'); - -// By default provides 32 bits of randomness in a float. -console.log(xorgen()); // Always 0.9798525865189731 - -// Use "double" to get 56 bits of randomness. -console.log(xorgen.double()); // Always 0.03583478477375346 - -// Use "int32" to get a 32 bit (signed) integer. -console.log(xorgen.int32()); // Always 1341429986 -```` - -Besides xor4096, there are several other faster PRNGs available. - -|PRNG name | Time vs native | Period | Author | -|-----------|----------------|-------------|----------------------| -|`alea` | 1.95 ns, 0.9x | ~2^116 | Baagoe | -|`xor128` | 2.04 ns, 0.9x | 2^128-1 | Marsaglia | -|`tychei` | 2.32 ns, 1.1x | ~2^127 | Neves/Araujo (ChaCha)| -|`xorwow` | 2.40 ns, 1.1x | 2^192-2^32 | Marsaglia | -|`xor4096` | 2.40 ns, 1.1x | 2^4096-2^32 | Brent (xorgens) | -|`xorshift7`| 2.64 ns, 1.3x | 2^256-1 | Panneton/L'ecuyer | -|`quick` | 3.80 ns, 1.8x | ~2^1600 | Bau (ARC4) | - -(Timings were done on node v0.12.2 on a single-core Google Compute Engine -instance. `quick` is just the 32-bit version of the RC4-based PRNG -originally packaged with seedrandom.) - - -Node.js usage -------------- - -``` -npm install seedrandom -``` - -```js -// Local PRNG: does not affect Math.random. -var seedrandom = require('seedrandom'); -var rng = seedrandom('hello.'); -console.log(rng()); // Always 0.9282578795792454 - -// Global PRNG: set Math.random. -seedrandom('hello.', { global: true }); -console.log(Math.random()); // Always 0.9282578795792454 - -// Autoseeded ARC4-based PRNG. -rng = seedrandom(); -console.log(rng()); // Reasonably unpredictable. - -// Mixing accumulated entropy. -rng = seedrandom('added entropy.', { entropy: true }); -console.log(rng()); // As unpredictable as added entropy. - -// Using alternate algorithms, as listed above. -var rng2 = seedrandom.xor4096('hello.') -console.log(rng2()); -``` - - -Require.js usage ----------------- - -Similar to Node.js usage: - -``` -bower install seedrandom -``` - -``` -require(['seedrandom'], function(seedrandom) { - var rng = seedrandom('hello.'); - console.log(rng()); // Always 0.9282578795792454 -}); -``` - - -Network seeding ---------------- - -```html - - - - - - -``` - -Reseeding using user input --------------------------- - -```js -var seed = Math.seedrandom(); // Use prng with an automatic seed. -document.write(Math.random()); // Pretty much unpredictable x. - -var rng = new Math.seedrandom(seed); // A new prng with the same seed. -document.write(rng()); // Repeat the 'unpredictable' x. - -function reseed(event, count) { // Define a custom entropy collector. - var t = []; - function w(e) { - t.push([e.pageX, e.pageY, +new Date]); - if (t.length < count) { return; } - document.removeEventListener(event, w); - Math.seedrandom(t, { entropy: true }); - } - document.addEventListener(event, w); -} -reseed('mousemove', 100); // Reseed after 100 mouse moves. -``` - -The "pass" option can be used to get both the prng and the seed. -The following returns both an autoseeded prng and the seed as an object, -without mutating Math.random: - -```js -var obj = Math.seedrandom(null, { pass: function(prng, seed) { - return { random: prng, seed: seed }; -}}); -``` - - -Saving and Restoring PRNG state -------------------------------- - -```js -var seedrandom = Math.seedrandom; -var saveable = seedrandom("secret-seed", {state: true}); -for (var j = 0; j < 1e5; ++j) saveable(); -var saved = saveable.state(); -var replica = seedrandom("", {state: saved}); -assert(replica() == saveable()); -``` - -In normal use the prng is opaque and its internal state cannot be accessed. -However, if the "state" option is specified, the prng gets a state() method -that returns a plain object the can be used to reconstruct a prng later in -the same state (by passing that saved object back as the state option). - - -Version notes -------------- - -The random number sequence is the same as version 1.0 for string seeds. - -* Version 2.0 changed the sequence for non-string seeds. -* Version 2.1 speeds seeding and uses window.crypto to autoseed if present. -* Version 2.2 alters non-crypto autoseeding to sweep up entropy from plugins. -* Version 2.3 adds support for "new", module loading, and a null seed arg. -* Version 2.3.1 adds a build environment, module packaging, and tests. -* Version 2.3.4 fixes bugs on IE8, and switches to MIT license. -* Version 2.3.6 adds a readable options object argument. -* Version 2.3.10 adds support for node.js crypto (contributed by ctd1500). -* Version 2.3.11 adds an option to load and save internal state. -* Version 2.4.0 adds implementations of several other fast PRNGs. -* Version 2.4.2 adds an implementation of Baagoe's very fast Alea PRNG. - -The standard ARC4 key scheduler cycles short keys, which means that -seedrandom('ab') is equivalent to seedrandom('abab') and 'ababab'. -Therefore it is a good idea to add a terminator to avoid trivial -equivalences on short string seeds, e.g., Math.seedrandom(str + '\0'). -Starting with version 2.0, a terminator is added automatically for -non-string seeds, so seeding with the number 111 is the same as seeding -with '111\0'. - -When seedrandom() is called with zero args or a null seed, it uses a -seed drawn from the browser crypto object if present. If there is no -crypto support, seedrandom() uses the current time, the native rng, -and a walk of several DOM objects to collect a few bits of entropy. - -Each time the one- or two-argument forms of seedrandom are called, -entropy from the passed seed is accumulated in a pool to help generate -future seeds for the zero- and two-argument forms of seedrandom. - -On speed - This javascript implementation of Math.random() is several -times slower than the built-in Math.random() because it is not native -code, but that is typically fast enough. Some details (timings on -Chrome 25 on a 2010 vintage macbook): - -* seeded Math.random() - avg less than 0.0002 milliseconds per call -* seedrandom('explicit.') - avg less than 0.2 milliseconds per call -* seedrandom('explicit.', true) - avg less than 0.2 milliseconds per call -* seedrandom() with crypto - avg less than 0.2 milliseconds per call - -Autoseeding without crypto is somewhat slow, about 20-30 milliseconds on -a 2012 windows 7 1.5ghz i5 laptop, as seen on Firefox 19, IE 10, and Opera. -Seeded rng calls themselves are fast across these browsers, with slowest -numbers on Opera at about 0.0005 ms per seeded Math.random(). - - -LICENSE (MIT) -------------- - -Copyright 2015 David Bau. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/node_modules/seedrandom/bower.json b/node_modules/seedrandom/bower.json deleted file mode 100644 index 8e62b3a..0000000 --- a/node_modules/seedrandom/bower.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "seedrandom", - "description": "Seeded random number generator for Javascript.", - "main": "seedrandom.js", - "license": "MIT", - "keywords": [ - "random", - "seed", - "crypto" - ], - "ignore": [], - "devDependencies": { - "qunit": "latest", - "requirejs": "latest" - } -} diff --git a/node_modules/seedrandom/component.json b/node_modules/seedrandom/component.json deleted file mode 100644 index fe1aa60..0000000 --- a/node_modules/seedrandom/component.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "seedrandom", - "version": "2.4.0", - "description": "Seeded random number generator for Javascript", - "repository": "davidbau/seedrandom", - "main": "seedrandom.js", - "scripts": [ "seedrandom.js" ], - "keywords": [ "random", "seed", "crypto" ], - "license": "MIT" -} diff --git a/node_modules/seedrandom/index.js b/node_modules/seedrandom/index.js deleted file mode 100644 index 513669a..0000000 --- a/node_modules/seedrandom/index.js +++ /dev/null @@ -1,60 +0,0 @@ -// A library of seedable RNGs implemented in Javascript. -// -// Usage: -// -// var seedrandom = require('seedrandom'); -// var random = seedrandom(1); // or any seed. -// var x = random(); // 0 <= x < 1. Every bit is random. -// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness. - -// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe. -// Period: ~2^116 -// Reported to pass all BigCrush tests. -var alea = require('./lib/alea'); - -// xor128, a pure xor-shift generator by George Marsaglia. -// Period: 2^128-1. -// Reported to fail: MatrixRank and LinearComp. -var xor128 = require('./lib/xor128'); - -// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl. -// Period: 2^192-2^32 -// Reported to fail: CollisionOver, SimpPoker, and LinearComp. -var xorwow = require('./lib/xorwow'); - -// xorshift7, by François Panneton and Pierre L'ecuyer, takes -// a different approach: it adds robustness by allowing more shifts -// than Marsaglia's original three. It is a 7-shift generator -// with 256 bits, that passes BigCrush with no systmatic failures. -// Period 2^256-1. -// No systematic BigCrush failures reported. -var xorshift7 = require('./lib/xorshift7'); - -// xor4096, by Richard Brent, is a 4096-bit xor-shift with a -// very long period that also adds a Weyl generator. It also passes -// BigCrush with no systematic failures. Its long period may -// be useful if you have many generators and need to avoid -// collisions. -// Period: 2^4128-2^32. -// No systematic BigCrush failures reported. -var xor4096 = require('./lib/xor4096'); - -// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random -// number generator derived from ChaCha, a modern stream cipher. -// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf -// Period: ~2^127 -// No systematic BigCrush failures reported. -var tychei = require('./lib/tychei'); - -// The original ARC4-based prng included in this library. -// Period: ~2^1600 -var sr = require('./seedrandom'); - -sr.alea = alea; -sr.xor128 = xor128; -sr.xorwow = xorwow; -sr.xorshift7 = xorshift7; -sr.xor4096 = xor4096; -sr.tychei = tychei; - -module.exports = sr; diff --git a/node_modules/seedrandom/lib/alea.js b/node_modules/seedrandom/lib/alea.js deleted file mode 100644 index f912ffd..0000000 --- a/node_modules/seedrandom/lib/alea.js +++ /dev/null @@ -1,114 +0,0 @@ -// A port of an algorithm by Johannes Baagøe , 2010 -// http://baagoe.com/en/RandomMusings/javascript/ -// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror -// Original work is under MIT license - - -// Copyright (C) 2010 by Johannes Baagøe -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - - - -(function(global, module, define) { - -function Alea(seed) { - var me = this, mash = Mash(); - - me.next = function() { - var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32 - me.s0 = me.s1; - me.s1 = me.s2; - return me.s2 = t - (me.c = t | 0); - }; - - // Apply the seeding algorithm from Baagoe. - me.c = 1; - me.s0 = mash(' '); - me.s1 = mash(' '); - me.s2 = mash(' '); - me.s0 -= mash(seed); - if (me.s0 < 0) { me.s0 += 1; } - me.s1 -= mash(seed); - if (me.s1 < 0) { me.s1 += 1; } - me.s2 -= mash(seed); - if (me.s2 < 0) { me.s2 += 1; } - mash = null; -} - -function copy(f, t) { - t.c = f.c; - t.s0 = f.s0; - t.s1 = f.s1; - t.s2 = f.s2; - return t; -} - -function impl(seed, opts) { - var xg = new Alea(seed), - state = opts && opts.state, - prng = xg.next; - prng.int32 = function() { return (xg.next() * 0x100000000) | 0; } - prng.double = function() { - return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53 - }; - prng.quick = prng; - if (state) { - if (typeof(state) == 'object') copy(state, xg); - prng.state = function() { return copy(xg, {}); } - } - return prng; -} - -function Mash() { - var n = 0xefc8249d; - - var mash = function(data) { - data = data.toString(); - for (var i = 0; i < data.length; i++) { - n += data.charCodeAt(i); - var h = 0.02519603282416938 * n; - n = h >>> 0; - h -= n; - h *= n; - n = h >>> 0; - h -= n; - n += h * 0x100000000; // 2^32 - } - return (n >>> 0) * 2.3283064365386963e-10; // 2^-32 - }; - - return mash; -} - - -if (module && module.exports) { - module.exports = impl; -} else if (define && define.amd) { - define(function() { return impl; }); -} else { - this.alea = impl; -} - -})( - this, - (typeof module) == 'object' && module, // present in node.js - (typeof define) == 'function' && define // present with an AMD loader -); - - diff --git a/node_modules/seedrandom/lib/alea.min.js b/node_modules/seedrandom/lib/alea.min.js deleted file mode 100644 index 319336d..0000000 --- a/node_modules/seedrandom/lib/alea.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b,c){function d(a){var b=this,c=g();b.next=function(){var a=2091639*b.s0+2.3283064365386963e-10*b.c;return b.s0=b.s1,b.s1=b.s2,b.s2=a-(b.c=0|a)},b.c=1,b.s0=c(" "),b.s1=c(" "),b.s2=c(" "),b.s0-=c(a),b.s0<0&&(b.s0+=1),b.s1-=c(a),b.s1<0&&(b.s1+=1),b.s2-=c(a),b.s2<0&&(b.s2+=1),c=null}function e(a,b){return b.c=a.c,b.s0=a.s0,b.s1=a.s1,b.s2=a.s2,b}function f(a,b){var c=new d(a),f=b&&b.state,g=c.next;return g.int32=function(){return 4294967296*c.next()|0},g["double"]=function(){return g()+1.1102230246251565e-16*(2097152*g()|0)},g.quick=g,f&&("object"==typeof f&&e(f,c),g.state=function(){return e(c,{})}),g}function g(){var a=4022871197,b=function(b){b=b.toString();for(var c=0;c>>0,d-=a,d*=a,a=d>>>0,d-=a,a+=4294967296*d}return 2.3283064365386963e-10*(a>>>0)};return b}b&&b.exports?b.exports=f:c&&c.amd?c(function(){return f}):this.alea=f}(this,"object"==typeof module&&module,"function"==typeof define&&define); \ No newline at end of file diff --git a/node_modules/seedrandom/lib/tychei.js b/node_modules/seedrandom/lib/tychei.js deleted file mode 100644 index 3d0ddd4..0000000 --- a/node_modules/seedrandom/lib/tychei.js +++ /dev/null @@ -1,103 +0,0 @@ -// A Javascript implementaion of the "Tyche-i" prng algorithm by -// Samuel Neves and Filipe Araujo. -// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf - -(function(global, module, define) { - -function XorGen(seed) { - var me = this, strseed = ''; - - // Set up generator function. - me.next = function() { - var b = me.b, c = me.c, d = me.d, a = me.a; - b = (b << 25) ^ (b >>> 7) ^ c; - c = (c - d) | 0; - d = (d << 24) ^ (d >>> 8) ^ a; - a = (a - b) | 0; - me.b = b = (b << 20) ^ (b >>> 12) ^ c; - me.c = c = (c - d) | 0; - me.d = (d << 16) ^ (c >>> 16) ^ a; - return me.a = (a - b) | 0; - }; - - /* The following is non-inverted tyche, which has better internal - * bit diffusion, but which is about 25% slower than tyche-i in JS. - me.next = function() { - var a = me.a, b = me.b, c = me.c, d = me.d; - a = (me.a + me.b | 0) >>> 0; - d = me.d ^ a; d = d << 16 ^ d >>> 16; - c = me.c + d | 0; - b = me.b ^ c; b = b << 12 ^ d >>> 20; - me.a = a = a + b | 0; - d = d ^ a; me.d = d = d << 8 ^ d >>> 24; - me.c = c = c + d | 0; - b = b ^ c; - return me.b = (b << 7 ^ b >>> 25); - } - */ - - me.a = 0; - me.b = 0; - me.c = 2654435769 | 0; - me.d = 1367130551; - - if (seed === Math.floor(seed)) { - // Integer seed. - me.a = (seed / 0x100000000) | 0; - me.b = seed | 0; - } else { - // String seed. - strseed += seed; - } - - // Mix in string seed, then discard an initial batch of 64 values. - for (var k = 0; k < strseed.length + 20; k++) { - me.b ^= strseed.charCodeAt(k) | 0; - me.next(); - } -} - -function copy(f, t) { - t.a = f.a; - t.b = f.b; - t.c = f.c; - t.d = f.d; - return t; -}; - -function impl(seed, opts) { - var xg = new XorGen(seed), - state = opts && opts.state, - prng = function() { return (xg.next() >>> 0) / 0x100000000; }; - prng.double = function() { - do { - var top = xg.next() >>> 11, - bot = (xg.next() >>> 0) / 0x100000000, - result = (top + bot) / (1 << 21); - } while (result === 0); - return result; - }; - prng.int32 = xg.next; - prng.quick = prng; - if (state) { - if (typeof(state) == 'object') copy(state, xg); - prng.state = function() { return copy(xg, {}); } - } - return prng; -} - -if (module && module.exports) { - module.exports = impl; -} else if (define && define.amd) { - define(function() { return impl; }); -} else { - this.tychei = impl; -} - -})( - this, - (typeof module) == 'object' && module, // present in node.js - (typeof define) == 'function' && define // present with an AMD loader -); - - diff --git a/node_modules/seedrandom/lib/tychei.min.js b/node_modules/seedrandom/lib/tychei.min.js deleted file mode 100644 index 28295f2..0000000 --- a/node_modules/seedrandom/lib/tychei.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b,c){function d(a){var b=this,c="";b.next=function(){var a=b.b,c=b.c,d=b.d,e=b.a;return a=a<<25^a>>>7^c,c=c-d|0,d=d<<24^d>>>8^e,e=e-a|0,b.b=a=a<<20^a>>>12^c,b.c=c=c-d|0,b.d=d<<16^c>>>16^e,b.a=e-a|0},b.a=0,b.b=0,b.c=-1640531527,b.d=1367130551,a===Math.floor(a)?(b.a=a/4294967296|0,b.b=0|a):c+=a;for(var d=0;d>>0)/4294967296};return g["double"]=function(){do var a=c.next()>>>11,b=(c.next()>>>0)/4294967296,d=(a+b)/(1<<21);while(0===d);return d},g.int32=c.next,g.quick=g,f&&("object"==typeof f&&e(f,c),g.state=function(){return e(c,{})}),g}b&&b.exports?b.exports=f:c&&c.amd?c(function(){return f}):this.tychei=f}(this,"object"==typeof module&&module,"function"==typeof define&&define); \ No newline at end of file diff --git a/node_modules/seedrandom/lib/xor128.js b/node_modules/seedrandom/lib/xor128.js deleted file mode 100644 index c461934..0000000 --- a/node_modules/seedrandom/lib/xor128.js +++ /dev/null @@ -1,81 +0,0 @@ -// A Javascript implementaion of the "xor128" prng algorithm by -// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper - -(function(global, module, define) { - -function XorGen(seed) { - var me = this, strseed = ''; - - me.x = 0; - me.y = 0; - me.z = 0; - me.w = 0; - - // Set up generator function. - me.next = function() { - var t = me.x ^ (me.x << 11); - me.x = me.y; - me.y = me.z; - me.z = me.w; - return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8); - }; - - if (seed === (seed | 0)) { - // Integer seed. - me.x = seed; - } else { - // String seed. - strseed += seed; - } - - // Mix in string seed, then discard an initial batch of 64 values. - for (var k = 0; k < strseed.length + 64; k++) { - me.x ^= strseed.charCodeAt(k) | 0; - me.next(); - } -} - -function copy(f, t) { - t.x = f.x; - t.y = f.y; - t.z = f.z; - t.w = f.w; - return t; -} - -function impl(seed, opts) { - var xg = new XorGen(seed), - state = opts && opts.state, - prng = function() { return (xg.next() >>> 0) / 0x100000000; }; - prng.double = function() { - do { - var top = xg.next() >>> 11, - bot = (xg.next() >>> 0) / 0x100000000, - result = (top + bot) / (1 << 21); - } while (result === 0); - return result; - }; - prng.int32 = xg.next; - prng.quick = prng; - if (state) { - if (typeof(state) == 'object') copy(state, xg); - prng.state = function() { return copy(xg, {}); } - } - return prng; -} - -if (module && module.exports) { - module.exports = impl; -} else if (define && define.amd) { - define(function() { return impl; }); -} else { - this.xor128 = impl; -} - -})( - this, - (typeof module) == 'object' && module, // present in node.js - (typeof define) == 'function' && define // present with an AMD loader -); - - diff --git a/node_modules/seedrandom/lib/xor128.min.js b/node_modules/seedrandom/lib/xor128.min.js deleted file mode 100644 index dc86a75..0000000 --- a/node_modules/seedrandom/lib/xor128.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b,c){function d(a){var b=this,c="";b.x=0,b.y=0,b.z=0,b.w=0,b.next=function(){var a=b.x^b.x<<11;return b.x=b.y,b.y=b.z,b.z=b.w,b.w^=b.w>>>19^a^a>>>8},a===(0|a)?b.x=a:c+=a;for(var d=0;d>>0)/4294967296};return g["double"]=function(){do var a=c.next()>>>11,b=(c.next()>>>0)/4294967296,d=(a+b)/(1<<21);while(0===d);return d},g.int32=c.next,g.quick=g,f&&("object"==typeof f&&e(f,c),g.state=function(){return e(c,{})}),g}b&&b.exports?b.exports=f:c&&c.amd?c(function(){return f}):this.xor128=f}(this,"object"==typeof module&&module,"function"==typeof define&&define); \ No newline at end of file diff --git a/node_modules/seedrandom/lib/xor4096.js b/node_modules/seedrandom/lib/xor4096.js deleted file mode 100644 index 950b50a..0000000 --- a/node_modules/seedrandom/lib/xor4096.js +++ /dev/null @@ -1,146 +0,0 @@ -// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm. -// -// This fast non-cryptographic random number generator is designed for -// use in Monte-Carlo algorithms. It combines a long-period xorshift -// generator with a Weyl generator, and it passes all common batteries -// of stasticial tests for randomness while consuming only a few nanoseconds -// for each prng generated. For background on the generator, see Brent's -// paper: "Some long-period random number generators using shifts and xors." -// http://arxiv.org/pdf/1104.3115.pdf -// -// Usage: -// -// var xor4096 = require('xor4096'); -// random = xor4096(1); // Seed with int32 or string. -// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits. -// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits. -// -// For nonzero numeric keys, this impelementation provides a sequence -// identical to that by Brent's xorgens 3 implementaion in C. This -// implementation also provides for initalizing the generator with -// string seeds, or for saving and restoring the state of the generator. -// -// On Chrome, this prng benchmarks about 2.1 times slower than -// Javascript's built-in Math.random(). - -(function(global, module, define) { - -function XorGen(seed) { - var me = this; - - // Set up generator function. - me.next = function() { - var w = me.w, - X = me.X, i = me.i, t, v; - // Update Weyl generator. - me.w = w = (w + 0x61c88647) | 0; - // Update xor generator. - v = X[(i + 34) & 127]; - t = X[i = ((i + 1) & 127)]; - v ^= v << 13; - t ^= t << 17; - v ^= v >>> 15; - t ^= t >>> 12; - // Update Xor generator array state. - v = X[i] = v ^ t; - me.i = i; - // Result is the combination. - return (v + (w ^ (w >>> 16))) | 0; - }; - - function init(me, seed) { - var t, v, i, j, w, X = [], limit = 128; - if (seed === (seed | 0)) { - // Numeric seeds initialize v, which is used to generates X. - v = seed; - seed = null; - } else { - // String seeds are mixed into v and X one character at a time. - seed = seed + '\0'; - v = 0; - limit = Math.max(limit, seed.length); - } - // Initialize circular array and weyl value. - for (i = 0, j = -32; j < limit; ++j) { - // Put the unicode characters into the array, and shuffle them. - if (seed) v ^= seed.charCodeAt((j + 32) % seed.length); - // After 32 shuffles, take v as the starting w value. - if (j === 0) w = v; - v ^= v << 10; - v ^= v >>> 15; - v ^= v << 4; - v ^= v >>> 13; - if (j >= 0) { - w = (w + 0x61c88647) | 0; // Weyl. - t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array. - i = (0 == t) ? i + 1 : 0; // Count zeroes. - } - } - // We have detected all zeroes; make the key nonzero. - if (i >= 128) { - X[(seed && seed.length || 0) & 127] = -1; - } - // Run the generator 512 times to further mix the state before using it. - // Factoring this as a function slows the main generator, so it is just - // unrolled here. The weyl generator is not advanced while warming up. - i = 127; - for (j = 4 * 128; j > 0; --j) { - v = X[(i + 34) & 127]; - t = X[i = ((i + 1) & 127)]; - v ^= v << 13; - t ^= t << 17; - v ^= v >>> 15; - t ^= t >>> 12; - X[i] = v ^ t; - } - // Storing state as object members is faster than using closure variables. - me.w = w; - me.X = X; - me.i = i; - } - - init(me, seed); -} - -function copy(f, t) { - t.i = f.i; - t.w = f.w; - t.X = f.X.slice(); - return t; -}; - -function impl(seed, opts) { - if (seed == null) seed = +(new Date); - var xg = new XorGen(seed), - state = opts && opts.state, - prng = function() { return (xg.next() >>> 0) / 0x100000000; }; - prng.double = function() { - do { - var top = xg.next() >>> 11, - bot = (xg.next() >>> 0) / 0x100000000, - result = (top + bot) / (1 << 21); - } while (result === 0); - return result; - }; - prng.int32 = xg.next; - prng.quick = prng; - if (state) { - if (state.X) copy(state, xg); - prng.state = function() { return copy(xg, {}); } - } - return prng; -} - -if (module && module.exports) { - module.exports = impl; -} else if (define && define.amd) { - define(function() { return impl; }); -} else { - this.xor4096 = impl; -} - -})( - this, // window object or global - (typeof module) == 'object' && module, // present in node.js - (typeof define) == 'function' && define // present with an AMD loader -); diff --git a/node_modules/seedrandom/lib/xor4096.min.js b/node_modules/seedrandom/lib/xor4096.min.js deleted file mode 100644 index c275aa6..0000000 --- a/node_modules/seedrandom/lib/xor4096.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b,c){function d(a){function b(a,b){var c,d,e,f,g,h=[],i=128;for(b===(0|b)?(d=b,b=null):(b+="\x00",d=0,i=Math.max(i,b.length)),e=0,f=-32;i>f;++f)b&&(d^=b.charCodeAt((f+32)%b.length)),0===f&&(g=d),d^=d<<10,d^=d>>>15,d^=d<<4,d^=d>>>13,f>=0&&(g=g+1640531527|0,c=h[127&f]^=d+g,e=0==c?e+1:0);for(e>=128&&(h[127&(b&&b.length||0)]=-1),e=127,f=512;f>0;--f)d=h[e+34&127],c=h[e=e+1&127],d^=d<<13,c^=c<<17,d^=d>>>15,c^=c>>>12,h[e]=d^c;a.w=g,a.X=h,a.i=e}var c=this;c.next=function(){var a,b,d=c.w,e=c.X,f=c.i;return c.w=d=d+1640531527|0,b=e[f+34&127],a=e[f=f+1&127],b^=b<<13,a^=a<<17,b^=b>>>15,a^=a>>>12,b=e[f]=b^a,c.i=f,b+(d^d>>>16)|0},b(c,a)}function e(a,b){return b.i=a.i,b.w=a.w,b.X=a.X.slice(),b}function f(a,b){null==a&&(a=+new Date);var c=new d(a),f=b&&b.state,g=function(){return(c.next()>>>0)/4294967296};return g["double"]=function(){do var a=c.next()>>>11,b=(c.next()>>>0)/4294967296,d=(a+b)/(1<<21);while(0===d);return d},g.int32=c.next,g.quick=g,f&&(f.X&&e(f,c),g.state=function(){return e(c,{})}),g}b&&b.exports?b.exports=f:c&&c.amd?c(function(){return f}):this.xor4096=f}(this,"object"==typeof module&&module,"function"==typeof define&&define); \ No newline at end of file diff --git a/node_modules/seedrandom/lib/xorshift7.js b/node_modules/seedrandom/lib/xorshift7.js deleted file mode 100644 index b7e5151..0000000 --- a/node_modules/seedrandom/lib/xorshift7.js +++ /dev/null @@ -1,97 +0,0 @@ -// A Javascript implementaion of the "xorshift7" algorithm by -// François Panneton and Pierre L'ecuyer: -// "On the Xorgshift Random Number Generators" -// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf - -(function(global, module, define) { - -function XorGen(seed) { - var me = this; - - // Set up generator function. - me.next = function() { - // Update xor generator. - var X = me.x, i = me.i, t, v, w; - t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24); - t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10); - t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3); - t = X[(i + 4) & 7]; v ^= t ^ (t << 7); - t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9); - X[i] = v; - me.i = (i + 1) & 7; - return v; - }; - - function init(me, seed) { - var j, w, X = []; - - if (seed === (seed | 0)) { - // Seed state array using a 32-bit integer. - w = X[0] = seed; - } else { - // Seed state using a string. - seed = '' + seed; - for (j = 0; j < seed.length; ++j) { - X[j & 7] = (X[j & 7] << 15) ^ - (seed.charCodeAt(j) + X[(j + 1) & 7] << 13); - } - } - // Enforce an array length of 8, not all zeroes. - while (X.length < 8) X.push(0); - for (j = 0; j < 8 && X[j] === 0; ++j); - if (j == 8) w = X[7] = -1; else w = X[j]; - - me.x = X; - me.i = 0; - - // Discard an initial 256 values. - for (j = 256; j > 0; --j) { - me.next(); - } - } - - init(me, seed); -} - -function copy(f, t) { - t.x = f.x.slice(); - t.i = f.i; - return t; -} - -function impl(seed, opts) { - if (seed == null) seed = +(new Date); - var xg = new XorGen(seed), - state = opts && opts.state, - prng = function() { return (xg.next() >>> 0) / 0x100000000; }; - prng.double = function() { - do { - var top = xg.next() >>> 11, - bot = (xg.next() >>> 0) / 0x100000000, - result = (top + bot) / (1 << 21); - } while (result === 0); - return result; - }; - prng.int32 = xg.next; - prng.quick = prng; - if (state) { - if (state.x) copy(state, xg); - prng.state = function() { return copy(xg, {}); } - } - return prng; -} - -if (module && module.exports) { - module.exports = impl; -} else if (define && define.amd) { - define(function() { return impl; }); -} else { - this.xorshift7 = impl; -} - -})( - this, - (typeof module) == 'object' && module, // present in node.js - (typeof define) == 'function' && define // present with an AMD loader -); - diff --git a/node_modules/seedrandom/lib/xorshift7.min.js b/node_modules/seedrandom/lib/xorshift7.min.js deleted file mode 100644 index 1ac58c1..0000000 --- a/node_modules/seedrandom/lib/xorshift7.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b,c){function d(a){function b(a,b){var c,d,e=[];if(b===(0|b))d=e[0]=b;else for(b=""+b,c=0;cc&&0===e[c];++c);for(d=8==c?e[7]=-1:e[c],a.x=e,a.i=0,c=256;c>0;--c)a.next()}var c=this;c.next=function(){var a,b,d=c.x,e=c.i;return a=d[e],a^=a>>>7,b=a^a<<24,a=d[e+1&7],b^=a^a>>>10,a=d[e+3&7],b^=a^a>>>3,a=d[e+4&7],b^=a^a<<7,a=d[e+7&7],a^=a<<13,b^=a^a<<9,d[e]=b,c.i=e+1&7,b},b(c,a)}function e(a,b){return b.x=a.x.slice(),b.i=a.i,b}function f(a,b){null==a&&(a=+new Date);var c=new d(a),f=b&&b.state,g=function(){return(c.next()>>>0)/4294967296};return g["double"]=function(){do var a=c.next()>>>11,b=(c.next()>>>0)/4294967296,d=(a+b)/(1<<21);while(0===d);return d},g.int32=c.next,g.quick=g,f&&(f.x&&e(f,c),g.state=function(){return e(c,{})}),g}b&&b.exports?b.exports=f:c&&c.amd?c(function(){return f}):this.xorshift7=f}(this,"object"==typeof module&&module,"function"==typeof define&&define); \ No newline at end of file diff --git a/node_modules/seedrandom/lib/xorwow.js b/node_modules/seedrandom/lib/xorwow.js deleted file mode 100644 index 79d5e44..0000000 --- a/node_modules/seedrandom/lib/xorwow.js +++ /dev/null @@ -1,86 +0,0 @@ -// A Javascript implementaion of the "xorwow" prng algorithm by -// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper - -(function(global, module, define) { - -function XorGen(seed) { - var me = this, strseed = ''; - - // Set up generator function. - me.next = function() { - var t = (me.x ^ (me.x >>> 2)); - me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v; - return (me.d = (me.d + 362437 | 0)) + - (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0; - }; - - me.x = 0; - me.y = 0; - me.z = 0; - me.w = 0; - me.v = 0; - - if (seed === (seed | 0)) { - // Integer seed. - me.x = seed; - } else { - // String seed. - strseed += seed; - } - - // Mix in string seed, then discard an initial batch of 64 values. - for (var k = 0; k < strseed.length + 64; k++) { - me.x ^= strseed.charCodeAt(k) | 0; - if (k == strseed.length) { - me.d = me.x << 10 ^ me.x >>> 4; - } - me.next(); - } -} - -function copy(f, t) { - t.x = f.x; - t.y = f.y; - t.z = f.z; - t.w = f.w; - t.v = f.v; - t.d = f.d; - return t; -} - -function impl(seed, opts) { - var xg = new XorGen(seed), - state = opts && opts.state, - prng = function() { return (xg.next() >>> 0) / 0x100000000; }; - prng.double = function() { - do { - var top = xg.next() >>> 11, - bot = (xg.next() >>> 0) / 0x100000000, - result = (top + bot) / (1 << 21); - } while (result === 0); - return result; - }; - prng.int32 = xg.next; - prng.quick = prng; - if (state) { - if (typeof(state) == 'object') copy(state, xg); - prng.state = function() { return copy(xg, {}); } - } - return prng; -} - -if (module && module.exports) { - module.exports = impl; -} else if (define && define.amd) { - define(function() { return impl; }); -} else { - this.xorwow = impl; -} - -})( - this, - (typeof module) == 'object' && module, // present in node.js - (typeof define) == 'function' && define // present with an AMD loader -); - - diff --git a/node_modules/seedrandom/lib/xorwow.min.js b/node_modules/seedrandom/lib/xorwow.min.js deleted file mode 100644 index db4966c..0000000 --- a/node_modules/seedrandom/lib/xorwow.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b,c){function d(a){var b=this,c="";b.next=function(){var a=b.x^b.x>>>2;return b.x=b.y,b.y=b.z,b.z=b.w,b.w=b.v,(b.d=b.d+362437|0)+(b.v=b.v^b.v<<4^(a^a<<1))|0},b.x=0,b.y=0,b.z=0,b.w=0,b.v=0,a===(0|a)?b.x=a:c+=a;for(var d=0;d>>4),b.next()}function e(a,b){return b.x=a.x,b.y=a.y,b.z=a.z,b.w=a.w,b.v=a.v,b.d=a.d,b}function f(a,b){var c=new d(a),f=b&&b.state,g=function(){return(c.next()>>>0)/4294967296};return g["double"]=function(){do var a=c.next()>>>11,b=(c.next()>>>0)/4294967296,d=(a+b)/(1<<21);while(0===d);return d},g.int32=c.next,g.quick=g,f&&("object"==typeof f&&e(f,c),g.state=function(){return e(c,{})}),g}b&&b.exports?b.exports=f:c&&c.amd?c(function(){return f}):this.xorwow=f}(this,"object"==typeof module&&module,"function"==typeof define&&define); \ No newline at end of file diff --git a/node_modules/seedrandom/package.json b/node_modules/seedrandom/package.json deleted file mode 100644 index e212979..0000000 --- a/node_modules/seedrandom/package.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "_args": [ - [ - "seedrandom@^2.4.2", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "seedrandom@>=2.4.2 <3.0.0", - "_id": "seedrandom@2.4.2", - "_inCache": true, - "_installable": true, - "_location": "/seedrandom", - "_nodeVersion": "0.12.2", - "_npmUser": { - "email": "david.bau@gmail.com", - "name": "davidbau" - }, - "_npmVersion": "2.7.4", - "_phantomChildren": {}, - "_requested": { - "name": "seedrandom", - "raw": "seedrandom@^2.4.2", - "rawSpec": "^2.4.2", - "scope": null, - "spec": ">=2.4.2 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc" - ], - "_resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.2.tgz", - "_shasum": "18d78c41287d13aff8eadb29e235938b248aa9ff", - "_shrinkwrap": null, - "_spec": "seedrandom@^2.4.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "name": "David Bau" - }, - "bugs": { - "url": "https://github.com/davidbau/seedrandom/issues" - }, - "config": { - "blanket": { - "pattern": [ - "seedrandom.js", - "lib/alea.js", - "lib/xor128.js", - "lib/xorwow.js", - "lib/xorshift7.js", - "lib/tychei.js", - "lib/xor4096.js" - ] - } - }, - "dependencies": {}, - "description": "Seeded random number generator for Javascript.", - "devDependencies": { - "blanket": "latest", - "grunt": "latest", - "grunt-bowercopy": "latest", - "grunt-cli": "latest", - "grunt-contrib-qunit": "<=0.5.2", - "grunt-contrib-uglify": "latest", - "grunt-mocha-cov": "latest", - "grunt-release": "latest", - "grunt-sed": "latest", - "phantomjs": "latest", - "proxyquire": "latest", - "requirejs": "latest" - }, - "directories": {}, - "dist": { - "shasum": "18d78c41287d13aff8eadb29e235938b248aa9ff", - "tarball": "http://registry.npmjs.org/seedrandom/-/seedrandom-2.4.2.tgz" - }, - "gitHead": "1b530945501d4bc4fb467b7d865cbadd0374cc31", - "homepage": "http://davidbau.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.html", - "keywords": [ - "random", - "seed", - "crypto" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "david.bau@gmail.com", - "name": "davidbau" - } - ], - "name": "seedrandom", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/davidbau/seedrandom.git" - }, - "scripts": { - "test": "grunt travis" - }, - "version": "2.4.2" -} diff --git a/node_modules/seedrandom/seedrandom.js b/node_modules/seedrandom/seedrandom.js deleted file mode 100644 index b54ea01..0000000 --- a/node_modules/seedrandom/seedrandom.js +++ /dev/null @@ -1,242 +0,0 @@ -/* -Copyright 2014 David Bau. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*/ - -(function (pool, math) { -// -// The following constants are related to IEEE 754 limits. -// -var global = this, - width = 256, // each RC4 output is 0 <= x < 256 - chunks = 6, // at least six RC4 outputs for each double - digits = 52, // there are 52 significant digits in a double - rngname = 'random', // rngname: name for Math.random and Math.seedrandom - startdenom = math.pow(width, chunks), - significance = math.pow(2, digits), - overflow = significance * 2, - mask = width - 1, - nodecrypto; // node.js crypto module, initialized at the bottom. - -// -// seedrandom() -// This is the seedrandom function described above. -// -function seedrandom(seed, options, callback) { - var key = []; - options = (options == true) ? { entropy: true } : (options || {}); - - // Flatten the seed string or build one from local entropy if needed. - var shortseed = mixkey(flatten( - options.entropy ? [seed, tostring(pool)] : - (seed == null) ? autoseed() : seed, 3), key); - - // Use the seed to initialize an ARC4 generator. - var arc4 = new ARC4(key); - - // This function returns a random double in [0, 1) that contains - // randomness in every bit of the mantissa of the IEEE 754 value. - var prng = function() { - var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48 - d = startdenom, // and denominator d = 2 ^ 48. - x = 0; // and no 'extra last byte'. - while (n < significance) { // Fill up all significant digits by - n = (n + x) * width; // shifting numerator and - d *= width; // denominator and generating a - x = arc4.g(1); // new least-significant-byte. - } - while (n >= overflow) { // To avoid rounding up, before adding - n /= 2; // last byte, shift everything - d /= 2; // right using integer math until - x >>>= 1; // we have exactly the desired bits. - } - return (n + x) / d; // Form the number within [0, 1). - }; - - prng.int32 = function() { return arc4.g(4) | 0; } - prng.quick = function() { return arc4.g(4) / 0x100000000; } - prng.double = prng; - - // Mix the randomness into accumulated entropy. - mixkey(tostring(arc4.S), pool); - - // Calling convention: what to return as a function of prng, seed, is_math. - return (options.pass || callback || - function(prng, seed, is_math_call, state) { - if (state) { - // Load the arc4 state from the given state if it has an S array. - if (state.S) { copy(state, arc4); } - // Only provide the .state method if requested via options.state. - prng.state = function() { return copy(arc4, {}); } - } - - // If called as a method of Math (Math.seedrandom()), mutate - // Math.random because that is how seedrandom.js has worked since v1.0. - if (is_math_call) { math[rngname] = prng; return seed; } - - // Otherwise, it is a newer calling convention, so return the - // prng directly. - else return prng; - })( - prng, - shortseed, - 'global' in options ? options.global : (this == math), - options.state); -} -math['seed' + rngname] = seedrandom; - -// -// ARC4 -// -// An ARC4 implementation. The constructor takes a key in the form of -// an array of at most (width) integers that should be 0 <= x < (width). -// -// The g(count) method returns a pseudorandom integer that concatenates -// the next (count) outputs from ARC4. Its return value is a number x -// that is in the range 0 <= x < (width ^ count). -// -function ARC4(key) { - var t, keylen = key.length, - me = this, i = 0, j = me.i = me.j = 0, s = me.S = []; - - // The empty key [] is treated as [0]. - if (!keylen) { key = [keylen++]; } - - // Set up S using the standard key scheduling algorithm. - while (i < width) { - s[i] = i++; - } - for (i = 0; i < width; i++) { - s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))]; - s[j] = t; - } - - // The "g" method returns the next (count) outputs as one number. - (me.g = function(count) { - // Using instance members instead of closure state nearly doubles speed. - var t, r = 0, - i = me.i, j = me.j, s = me.S; - while (count--) { - t = s[i = mask & (i + 1)]; - r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))]; - } - me.i = i; me.j = j; - return r; - // For robust unpredictability, the function call below automatically - // discards an initial batch of values. This is called RC4-drop[256]. - // See http://google.com/search?q=rsa+fluhrer+response&btnI - })(width); -} - -// -// copy() -// Copies internal state of ARC4 to or from a plain object. -// -function copy(f, t) { - t.i = f.i; - t.j = f.j; - t.S = f.S.slice(); - return t; -}; - -// -// flatten() -// Converts an object tree to nested arrays of strings. -// -function flatten(obj, depth) { - var result = [], typ = (typeof obj), prop; - if (depth && typ == 'object') { - for (prop in obj) { - try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {} - } - } - return (result.length ? result : typ == 'string' ? obj : obj + '\0'); -} - -// -// mixkey() -// Mixes a string seed into a key that is an array of integers, and -// returns a shortened string seed that is equivalent to the result key. -// -function mixkey(seed, key) { - var stringseed = seed + '', smear, j = 0; - while (j < stringseed.length) { - key[mask & j] = - mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++)); - } - return tostring(key); -} - -// -// autoseed() -// Returns an object for autoseeding, using window.crypto and Node crypto -// module if available. -// -function autoseed() { - try { - if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); } - var out = new Uint8Array(width); - (global.crypto || global.msCrypto).getRandomValues(out); - return tostring(out); - } catch (e) { - var browser = global.navigator, - plugins = browser && browser.plugins; - return [+new Date, global, plugins, global.screen, tostring(pool)]; - } -} - -// -// tostring() -// Converts an array of charcodes to a string -// -function tostring(a) { - return String.fromCharCode.apply(0, a); -} - -// -// When seedrandom.js is loaded, we immediately mix a few bits -// from the built-in RNG into the entropy pool. Because we do -// not want to interfere with deterministic PRNG state later, -// seedrandom will not call math.random on its own again after -// initialization. -// -mixkey(math.random(), pool); - -// -// Nodejs and AMD support: export the implementation as a module using -// either convention. -// -if ((typeof module) == 'object' && module.exports) { - module.exports = seedrandom; - // When in node.js, try using crypto package for autoseeding. - try { - nodecrypto = require('crypto'); - } catch (ex) {} -} else if ((typeof define) == 'function' && define.amd) { - define(function() { return seedrandom; }); -} - -// End anonymous scope, and pass initial values. -})( - [], // pool: entropy pool starts empty - Math // math: package containing random, pow, and seedrandom -); diff --git a/node_modules/seedrandom/seedrandom.min.js b/node_modules/seedrandom/seedrandom.min.js deleted file mode 100644 index f85e4df..0000000 --- a/node_modules/seedrandom/seedrandom.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b){function c(c,j,k){var n=[];j=1==j?{entropy:!0}:j||{};var s=g(f(j.entropy?[c,i(a)]:null==c?h():c,3),n),t=new d(n),u=function(){for(var a=t.g(m),b=p,c=0;q>a;)a=(a+c)*l,b*=l,c=t.g(1);for(;a>=r;)a/=2,b/=2,c>>>=1;return(a+c)/b};return u.int32=function(){return 0|t.g(4)},u.quick=function(){return t.g(4)/4294967296},u["double"]=u,g(i(t.S),a),(j.pass||k||function(a,c,d,f){return f&&(f.S&&e(f,t),a.state=function(){return e(t,{})}),d?(b[o]=a,c):a})(u,s,"global"in j?j.global:this==b,j.state)}function d(a){var b,c=a.length,d=this,e=0,f=d.i=d.j=0,g=d.S=[];for(c||(a=[c++]);l>e;)g[e]=e++;for(e=0;l>e;e++)g[e]=g[f=s&f+a[e%c]+(b=g[e])],g[f]=b;(d.g=function(a){for(var b,c=0,e=d.i,f=d.j,g=d.S;a--;)b=g[e=s&e+1],c=c*l+g[s&(g[e]=g[f=s&f+b])+(g[f]=b)];return d.i=e,d.j=f,c})(l)}function e(a,b){return b.i=a.i,b.j=a.j,b.S=a.S.slice(),b}function f(a,b){var c,d=[],e=typeof a;if(b&&"object"==e)for(c in a)try{d.push(f(a[c],b-1))}catch(g){}return d.length?d:"string"==e?a:a+"\0"}function g(a,b){for(var c,d=a+"",e=0;e - - - - -
    -
    - - - - - - diff --git a/node_modules/seedrandom/test/autoseed.html b/node_modules/seedrandom/test/autoseed.html deleted file mode 100644 index 3984e9b..0000000 --- a/node_modules/seedrandom/test/autoseed.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - -
    -
    - - - - - diff --git a/node_modules/seedrandom/test/bitgen.js b/node_modules/seedrandom/test/bitgen.js deleted file mode 100755 index c3563d5..0000000 --- a/node_modules/seedrandom/test/bitgen.js +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env node -var seedrandom = require('../seedrandom'); - -// process.on('SIGPIPE', process.exit); -function epipeBomb(stream, callback) { - if (stream == null) stream = process.stdout; - if (callback == null) callback = process.exit; - - function epipeFilter(err) { - if (err.code === 'EPIPE') return callback(); - - // If there's more than one error handler (ie, us), - // then the error won't be bubbled up anyway - if (stream.listeners('error').length <= 1) { - stream.removeAllListeners(); // Pretend we were never here - stream.emit('error', err); // Then emit as if we were never here - stream.on('error', epipeFilter);// Reattach, ready for the next error! - } - } - - stream.on('error', epipeFilter); -} - -epipeBomb(); - -var bufsize = 1024 * 256, - buf = new Buffer(bufsize * 4), - prng = seedrandom(0), - count = parseInt(process.argv[2]) || Infinity; -function dowrite() { - while (count > 0) { - for (var j = 0; j < bufsize; ++j) { - buf.writeUInt32BE(Math.floor( - prng() * 256 * 256 * 256 * 256 - ), j * 4); - } - count -= bufsize * 32; - if (!process.stdout.write(buf)) { - process.stdout.once('drain', function() { setTimeout(dowrite, 0) }); - return; - } - } -} - -dowrite(); diff --git a/node_modules/seedrandom/test/cryptotest.js b/node_modules/seedrandom/test/cryptotest.js deleted file mode 100644 index 1686e59..0000000 --- a/node_modules/seedrandom/test/cryptotest.js +++ /dev/null @@ -1,57 +0,0 @@ -var proxyquire = require('proxyquire'); -var assert = require("assert"); -var Module = require("module"); - -describe("Crypto API Test", function() { - -var crypto_stub = {}; -var original = Math.random; -var rng, r; - -// Load seedrandom in absence of any crypto package. -it("should be able to seed without crypto", function() { - var noncrypto_sr = proxyquire('../seedrandom', { crypto: null }); - rng = noncrypto_sr('hello.'); - assert.equal(typeof(rng), 'function', "Should return a function."); - r = rng(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - assert(original === Math.random, "Should not change Math.random."); - assert(original !== rng, "PRNG should not be Math.random."); - var noncrypto_sr = proxyquire('../seedrandom', { crypto: null }); - result = noncrypto_sr(); - assert.equal(typeof(result), 'function', "Should return function."); - assert(original === Math.random, "Should not change Math.random."); - r = result(); - assert(r != 0.9282578795792454, "Should not be 'hello.'#1"); - assert(r != 0.7316977468919549, "Should not be 'hello.'#3"); - assert(r != 0.23144008215179881, "Should not be '\\0'#1"); - assert(r != 0.7220382488550928, "Should not be '\\1'#1"); - // Recache original seedrandom. - proxyquire('../seedrandom', {}); -}); - -// Load seedrandom with zeroed-out crypto package. -it("should be able to seed ('hello.') with zero crypto", function() { - var zerocrypto_sr = proxyquire('../seedrandom', { - crypto: { randomBytes: function(n) { - result = []; while (n-- > 0) { result.push(1); } return result; } } - }); - rng = zerocrypto_sr('hello.'); - assert.equal(typeof(rng), 'function', "Should return a function."); - r = rng(); - assert.equal(r, 0.9282578795792454 , "Should be 'hello.'#1"); - assert(original === Math.random, "Should not change Math.random."); - assert(original !== rng, "PRNG should not be Math.random."); - rng = zerocrypto_sr(); - assert.equal(typeof(rng), 'function', "Should return function."); - assert(original === Math.random, "Should not change Math.random."); - r = rng(); - assert.equal(r, 0.7220382488550928, "Should be '\\1'#1"); - r = rng(); - assert.equal(r, 0.0259971860493045, "Should be '\\1'#2"); - // Recache original seedrandom. - proxyquire('../seedrandom', {}); -}); - - -}); diff --git a/node_modules/seedrandom/test/lib/qunit.css b/node_modules/seedrandom/test/lib/qunit.css deleted file mode 100644 index 93026e3..0000000 --- a/node_modules/seedrandom/test/lib/qunit.css +++ /dev/null @@ -1,237 +0,0 @@ -/*! - * QUnit 1.14.0 - * http://qunitjs.com/ - * - * Copyright 2013 jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-01-31T16:40Z - */ - -/** Font Family and Sizes */ - -#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { - font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; -} - -#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; } -#qunit-tests { font-size: smaller; } - - -/** Resets */ - -#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter { - margin: 0; - padding: 0; -} - - -/** Header */ - -#qunit-header { - padding: 0.5em 0 0.5em 1em; - - color: #8699A4; - background-color: #0D3349; - - font-size: 1.5em; - line-height: 1em; - font-weight: 400; - - border-radius: 5px 5px 0 0; -} - -#qunit-header a { - text-decoration: none; - color: #C2CCD1; -} - -#qunit-header a:hover, -#qunit-header a:focus { - color: #FFF; -} - -#qunit-testrunner-toolbar label { - display: inline-block; - padding: 0 0.5em 0 0.1em; -} - -#qunit-banner { - height: 5px; -} - -#qunit-testrunner-toolbar { - padding: 0.5em 0 0.5em 2em; - color: #5E740B; - background-color: #EEE; - overflow: hidden; -} - -#qunit-userAgent { - padding: 0.5em 0 0.5em 2.5em; - background-color: #2B81AF; - color: #FFF; - text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; -} - -#qunit-modulefilter-container { - float: right; -} - -/** Tests: Pass/Fail */ - -#qunit-tests { - list-style-position: inside; -} - -#qunit-tests li { - padding: 0.4em 0.5em 0.4em 2.5em; - border-bottom: 1px solid #FFF; - list-style-position: inside; -} - -#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { - display: none; -} - -#qunit-tests li strong { - cursor: pointer; -} - -#qunit-tests li a { - padding: 0.5em; - color: #C2CCD1; - text-decoration: none; -} -#qunit-tests li a:hover, -#qunit-tests li a:focus { - color: #000; -} - -#qunit-tests li .runtime { - float: right; - font-size: smaller; -} - -.qunit-assert-list { - margin-top: 0.5em; - padding: 0.5em; - - background-color: #FFF; - - border-radius: 5px; -} - -.qunit-collapsed { - display: none; -} - -#qunit-tests table { - border-collapse: collapse; - margin-top: 0.2em; -} - -#qunit-tests th { - text-align: right; - vertical-align: top; - padding: 0 0.5em 0 0; -} - -#qunit-tests td { - vertical-align: top; -} - -#qunit-tests pre { - margin: 0; - white-space: pre-wrap; - word-wrap: break-word; -} - -#qunit-tests del { - background-color: #E0F2BE; - color: #374E0C; - text-decoration: none; -} - -#qunit-tests ins { - background-color: #FFCACA; - color: #500; - text-decoration: none; -} - -/*** Test Counts */ - -#qunit-tests b.counts { color: #000; } -#qunit-tests b.passed { color: #5E740B; } -#qunit-tests b.failed { color: #710909; } - -#qunit-tests li li { - padding: 5px; - background-color: #FFF; - border-bottom: none; - list-style-position: inside; -} - -/*** Passing Styles */ - -#qunit-tests li li.pass { - color: #3C510C; - background-color: #FFF; - border-left: 10px solid #C6E746; -} - -#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; } -#qunit-tests .pass .test-name { color: #366097; } - -#qunit-tests .pass .test-actual, -#qunit-tests .pass .test-expected { color: #999; } - -#qunit-banner.qunit-pass { background-color: #C6E746; } - -/*** Failing Styles */ - -#qunit-tests li li.fail { - color: #710909; - background-color: #FFF; - border-left: 10px solid #EE5757; - white-space: pre; -} - -#qunit-tests > li:last-child { - border-radius: 0 0 5px 5px; -} - -#qunit-tests .fail { color: #000; background-color: #EE5757; } -#qunit-tests .fail .test-name, -#qunit-tests .fail .module-name { color: #000; } - -#qunit-tests .fail .test-actual { color: #EE5757; } -#qunit-tests .fail .test-expected { color: #008000; } - -#qunit-banner.qunit-fail { background-color: #EE5757; } - - -/** Result */ - -#qunit-testresult { - padding: 0.5em 0.5em 0.5em 2.5em; - - color: #2B81AF; - background-color: #D2E0E6; - - border-bottom: 1px solid #FFF; -} -#qunit-testresult .module-name { - font-weight: 700; -} - -/** Fixture */ - -#qunit-fixture { - position: absolute; - top: -10000px; - left: -10000px; - width: 1000px; - height: 1000px; -} diff --git a/node_modules/seedrandom/test/lib/qunit.js b/node_modules/seedrandom/test/lib/qunit.js deleted file mode 100644 index 0e279fd..0000000 --- a/node_modules/seedrandom/test/lib/qunit.js +++ /dev/null @@ -1,2288 +0,0 @@ -/*! - * QUnit 1.14.0 - * http://qunitjs.com/ - * - * Copyright 2013 jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-01-31T16:40Z - */ - -(function( window ) { - -var QUnit, - assert, - config, - onErrorFnPrev, - testId = 0, - fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""), - toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty, - // Keep a local reference to Date (GH-283) - Date = window.Date, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - defined = { - document: typeof window.document !== "undefined", - setTimeout: typeof window.setTimeout !== "undefined", - sessionStorage: (function() { - var x = "qunit-test-string"; - try { - sessionStorage.setItem( x, x ); - sessionStorage.removeItem( x ); - return true; - } catch( e ) { - return false; - } - }()) - }, - /** - * Provides a normalized error string, correcting an issue - * with IE 7 (and prior) where Error.prototype.toString is - * not properly implemented - * - * Based on http://es5.github.com/#x15.11.4.4 - * - * @param {String|Error} error - * @return {String} error message - */ - errorString = function( error ) { - var name, message, - errorString = error.toString(); - if ( errorString.substring( 0, 7 ) === "[object" ) { - name = error.name ? error.name.toString() : "Error"; - message = error.message ? error.message.toString() : ""; - if ( name && message ) { - return name + ": " + message; - } else if ( name ) { - return name; - } else if ( message ) { - return message; - } else { - return "Error"; - } - } else { - return errorString; - } - }, - /** - * Makes a clone of an object using only Array or Object as base, - * and copies over the own enumerable properties. - * - * @param {Object} obj - * @return {Object} New object with only the own properties (recursively). - */ - objectValues = function( obj ) { - // Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392. - /*jshint newcap: false */ - var key, val, - vals = QUnit.is( "array", obj ) ? [] : {}; - for ( key in obj ) { - if ( hasOwn.call( obj, key ) ) { - val = obj[key]; - vals[key] = val === Object(val) ? objectValues(val) : val; - } - } - return vals; - }; - - -// Root QUnit object. -// `QUnit` initialized at top of scope -QUnit = { - - // call on start of module test to prepend name to all tests - module: function( name, testEnvironment ) { - config.currentModule = name; - config.currentModuleTestEnvironment = testEnvironment; - config.modules[name] = true; - }, - - asyncTest: function( testName, expected, callback ) { - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - - QUnit.test( testName, expected, callback, true ); - }, - - test: function( testName, expected, callback, async ) { - var test, - nameHtml = "" + escapeText( testName ) + ""; - - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - - if ( config.currentModule ) { - nameHtml = "" + escapeText( config.currentModule ) + ": " + nameHtml; - } - - test = new Test({ - nameHtml: nameHtml, - testName: testName, - expected: expected, - async: async, - callback: callback, - module: config.currentModule, - moduleTestEnvironment: config.currentModuleTestEnvironment, - stack: sourceFromStacktrace( 2 ) - }); - - if ( !validTest( test ) ) { - return; - } - - test.queue(); - }, - - // Specify the number of expected assertions to guarantee that failed test (no assertions are run at all) don't slip through. - expect: function( asserts ) { - if (arguments.length === 1) { - config.current.expected = asserts; - } else { - return config.current.expected; - } - }, - - start: function( count ) { - // QUnit hasn't been initialized yet. - // Note: RequireJS (et al) may delay onLoad - if ( config.semaphore === undefined ) { - QUnit.begin(function() { - // This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first - setTimeout(function() { - QUnit.start( count ); - }); - }); - return; - } - - config.semaphore -= count || 1; - // don't start until equal number of stop-calls - if ( config.semaphore > 0 ) { - return; - } - // ignore if start is called more often then stop - if ( config.semaphore < 0 ) { - config.semaphore = 0; - QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) ); - return; - } - // A slight delay, to avoid any current callbacks - if ( defined.setTimeout ) { - setTimeout(function() { - if ( config.semaphore > 0 ) { - return; - } - if ( config.timeout ) { - clearTimeout( config.timeout ); - } - - config.blocking = false; - process( true ); - }, 13); - } else { - config.blocking = false; - process( true ); - } - }, - - stop: function( count ) { - config.semaphore += count || 1; - config.blocking = true; - - if ( config.testTimeout && defined.setTimeout ) { - clearTimeout( config.timeout ); - config.timeout = setTimeout(function() { - QUnit.ok( false, "Test timed out" ); - config.semaphore = 1; - QUnit.start(); - }, config.testTimeout ); - } - } -}; - -// We use the prototype to distinguish between properties that should -// be exposed as globals (and in exports) and those that shouldn't -(function() { - function F() {} - F.prototype = QUnit; - QUnit = new F(); - // Make F QUnit's constructor so that we can add to the prototype later - QUnit.constructor = F; -}()); - -/** - * Config object: Maintain internal state - * Later exposed as QUnit.config - * `config` initialized at top of scope - */ -config = { - // The queue of tests to run - queue: [], - - // block until document ready - blocking: true, - - // when enabled, show only failing tests - // gets persisted through sessionStorage and can be changed in UI via checkbox - hidepassed: false, - - // by default, run previously failed tests first - // very useful in combination with "Hide passed tests" checked - reorder: true, - - // by default, modify document.title when suite is done - altertitle: true, - - // by default, scroll to top of the page when suite is done - scrolltop: true, - - // when enabled, all tests must call expect() - requireExpects: false, - - // add checkboxes that are persisted in the query-string - // when enabled, the id is set to `true` as a `QUnit.config` property - urlConfig: [ - { - id: "noglobals", - label: "Check for Globals", - tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings." - }, - { - id: "notrycatch", - label: "No try-catch", - tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings." - } - ], - - // Set of all modules. - modules: {}, - - // logging callback queues - begin: [], - done: [], - log: [], - testStart: [], - testDone: [], - moduleStart: [], - moduleDone: [] -}; - -// Initialize more QUnit.config and QUnit.urlParams -(function() { - var i, current, - location = window.location || { search: "", protocol: "file:" }, - params = location.search.slice( 1 ).split( "&" ), - length = params.length, - urlParams = {}; - - if ( params[ 0 ] ) { - for ( i = 0; i < length; i++ ) { - current = params[ i ].split( "=" ); - current[ 0 ] = decodeURIComponent( current[ 0 ] ); - - // allow just a key to turn on a flag, e.g., test.html?noglobals - current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true; - if ( urlParams[ current[ 0 ] ] ) { - urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] ); - } else { - urlParams[ current[ 0 ] ] = current[ 1 ]; - } - } - } - - QUnit.urlParams = urlParams; - - // String search anywhere in moduleName+testName - config.filter = urlParams.filter; - - // Exact match of the module name - config.module = urlParams.module; - - config.testNumber = []; - if ( urlParams.testNumber ) { - - // Ensure that urlParams.testNumber is an array - urlParams.testNumber = [].concat( urlParams.testNumber ); - for ( i = 0; i < urlParams.testNumber.length; i++ ) { - current = urlParams.testNumber[ i ]; - config.testNumber.push( parseInt( current, 10 ) ); - } - } - - // Figure out if we're running the tests from a server or not - QUnit.isLocal = location.protocol === "file:"; -}()); - -extend( QUnit, { - - config: config, - - // Initialize the configuration options - init: function() { - extend( config, { - stats: { all: 0, bad: 0 }, - moduleStats: { all: 0, bad: 0 }, - started: +new Date(), - updateRate: 1000, - blocking: false, - autostart: true, - autorun: false, - filter: "", - queue: [], - semaphore: 1 - }); - - var tests, banner, result, - qunit = id( "qunit" ); - - if ( qunit ) { - qunit.innerHTML = - "

    " + escapeText( document.title ) + "

    " + - "

    " + - "
    " + - "

    " + - "
      "; - } - - tests = id( "qunit-tests" ); - banner = id( "qunit-banner" ); - result = id( "qunit-testresult" ); - - if ( tests ) { - tests.innerHTML = ""; - } - - if ( banner ) { - banner.className = ""; - } - - if ( result ) { - result.parentNode.removeChild( result ); - } - - if ( tests ) { - result = document.createElement( "p" ); - result.id = "qunit-testresult"; - result.className = "result"; - tests.parentNode.insertBefore( result, tests ); - result.innerHTML = "Running...
       "; - } - }, - - // Resets the test setup. Useful for tests that modify the DOM. - /* - DEPRECATED: Use multiple tests instead of resetting inside a test. - Use testStart or testDone for custom cleanup. - This method will throw an error in 2.0, and will be removed in 2.1 - */ - reset: function() { - var fixture = id( "qunit-fixture" ); - if ( fixture ) { - fixture.innerHTML = config.fixture; - } - }, - - // Safe object type checking - is: function( type, obj ) { - return QUnit.objectType( obj ) === type; - }, - - objectType: function( obj ) { - if ( typeof obj === "undefined" ) { - return "undefined"; - } - - // Consider: typeof null === object - if ( obj === null ) { - return "null"; - } - - var match = toString.call( obj ).match(/^\[object\s(.*)\]$/), - type = match && match[1] || ""; - - switch ( type ) { - case "Number": - if ( isNaN(obj) ) { - return "nan"; - } - return "number"; - case "String": - case "Boolean": - case "Array": - case "Date": - case "RegExp": - case "Function": - return type.toLowerCase(); - } - if ( typeof obj === "object" ) { - return "object"; - } - return undefined; - }, - - push: function( result, actual, expected, message ) { - if ( !config.current ) { - throw new Error( "assertion outside test context, was " + sourceFromStacktrace() ); - } - - var output, source, - details = { - module: config.current.module, - name: config.current.testName, - result: result, - message: message, - actual: actual, - expected: expected - }; - - message = escapeText( message ) || ( result ? "okay" : "failed" ); - message = "" + message + ""; - output = message; - - if ( !result ) { - expected = escapeText( QUnit.jsDump.parse(expected) ); - actual = escapeText( QUnit.jsDump.parse(actual) ); - output += ""; - - if ( actual !== expected ) { - output += ""; - output += ""; - } - - source = sourceFromStacktrace(); - - if ( source ) { - details.source = source; - output += ""; - } - - output += "
      Expected:
      " + expected + "
      Result:
      " + actual + "
      Diff:
      " + QUnit.diff( expected, actual ) + "
      Source:
      " + escapeText( source ) + "
      "; - } - - runLoggingCallbacks( "log", QUnit, details ); - - config.current.assertions.push({ - result: !!result, - message: output - }); - }, - - pushFailure: function( message, source, actual ) { - if ( !config.current ) { - throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) ); - } - - var output, - details = { - module: config.current.module, - name: config.current.testName, - result: false, - message: message - }; - - message = escapeText( message ) || "error"; - message = "" + message + ""; - output = message; - - output += ""; - - if ( actual ) { - output += ""; - } - - if ( source ) { - details.source = source; - output += ""; - } - - output += "
      Result:
      " + escapeText( actual ) + "
      Source:
      " + escapeText( source ) + "
      "; - - runLoggingCallbacks( "log", QUnit, details ); - - config.current.assertions.push({ - result: false, - message: output - }); - }, - - url: function( params ) { - params = extend( extend( {}, QUnit.urlParams ), params ); - var key, - querystring = "?"; - - for ( key in params ) { - if ( hasOwn.call( params, key ) ) { - querystring += encodeURIComponent( key ) + "=" + - encodeURIComponent( params[ key ] ) + "&"; - } - } - return window.location.protocol + "//" + window.location.host + - window.location.pathname + querystring.slice( 0, -1 ); - }, - - extend: extend, - id: id, - addEvent: addEvent, - addClass: addClass, - hasClass: hasClass, - removeClass: removeClass - // load, equiv, jsDump, diff: Attached later -}); - -/** - * @deprecated: Created for backwards compatibility with test runner that set the hook function - * into QUnit.{hook}, instead of invoking it and passing the hook function. - * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here. - * Doing this allows us to tell if the following methods have been overwritten on the actual - * QUnit object. - */ -extend( QUnit.constructor.prototype, { - - // Logging callbacks; all receive a single argument with the listed properties - // run test/logs.html for any related changes - begin: registerLoggingCallback( "begin" ), - - // done: { failed, passed, total, runtime } - done: registerLoggingCallback( "done" ), - - // log: { result, actual, expected, message } - log: registerLoggingCallback( "log" ), - - // testStart: { name } - testStart: registerLoggingCallback( "testStart" ), - - // testDone: { name, failed, passed, total, runtime } - testDone: registerLoggingCallback( "testDone" ), - - // moduleStart: { name } - moduleStart: registerLoggingCallback( "moduleStart" ), - - // moduleDone: { name, failed, passed, total } - moduleDone: registerLoggingCallback( "moduleDone" ) -}); - -if ( !defined.document || document.readyState === "complete" ) { - config.autorun = true; -} - -QUnit.load = function() { - runLoggingCallbacks( "begin", QUnit, {} ); - - // Initialize the config, saving the execution queue - var banner, filter, i, j, label, len, main, ol, toolbar, val, selection, - urlConfigContainer, moduleFilter, userAgent, - numModules = 0, - moduleNames = [], - moduleFilterHtml = "", - urlConfigHtml = "", - oldconfig = extend( {}, config ); - - QUnit.init(); - extend(config, oldconfig); - - config.blocking = false; - - len = config.urlConfig.length; - - for ( i = 0; i < len; i++ ) { - val = config.urlConfig[i]; - if ( typeof val === "string" ) { - val = { - id: val, - label: val - }; - } - config[ val.id ] = QUnit.urlParams[ val.id ]; - if ( !val.value || typeof val.value === "string" ) { - urlConfigHtml += ""; - } else { - urlConfigHtml += ""; - } - } - for ( i in config.modules ) { - if ( config.modules.hasOwnProperty( i ) ) { - moduleNames.push(i); - } - } - numModules = moduleNames.length; - moduleNames.sort( function( a, b ) { - return a.localeCompare( b ); - }); - moduleFilterHtml += ""; - - // `userAgent` initialized at top of scope - userAgent = id( "qunit-userAgent" ); - if ( userAgent ) { - userAgent.innerHTML = navigator.userAgent; - } - - // `banner` initialized at top of scope - banner = id( "qunit-header" ); - if ( banner ) { - banner.innerHTML = "" + banner.innerHTML + " "; - } - - // `toolbar` initialized at top of scope - toolbar = id( "qunit-testrunner-toolbar" ); - if ( toolbar ) { - // `filter` initialized at top of scope - filter = document.createElement( "input" ); - filter.type = "checkbox"; - filter.id = "qunit-filter-pass"; - - addEvent( filter, "click", function() { - var tmp, - ol = id( "qunit-tests" ); - - if ( filter.checked ) { - ol.className = ol.className + " hidepass"; - } else { - tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " "; - ol.className = tmp.replace( / hidepass /, " " ); - } - if ( defined.sessionStorage ) { - if (filter.checked) { - sessionStorage.setItem( "qunit-filter-passed-tests", "true" ); - } else { - sessionStorage.removeItem( "qunit-filter-passed-tests" ); - } - } - }); - - if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) { - filter.checked = true; - // `ol` initialized at top of scope - ol = id( "qunit-tests" ); - ol.className = ol.className + " hidepass"; - } - toolbar.appendChild( filter ); - - // `label` initialized at top of scope - label = document.createElement( "label" ); - label.setAttribute( "for", "qunit-filter-pass" ); - label.setAttribute( "title", "Only show tests and assertions that fail. Stored in sessionStorage." ); - label.innerHTML = "Hide passed tests"; - toolbar.appendChild( label ); - - urlConfigContainer = document.createElement("span"); - urlConfigContainer.innerHTML = urlConfigHtml; - // For oldIE support: - // * Add handlers to the individual elements instead of the container - // * Use "click" instead of "change" for checkboxes - // * Fallback from event.target to event.srcElement - addEvents( urlConfigContainer.getElementsByTagName("input"), "click", function( event ) { - var params = {}, - target = event.target || event.srcElement; - params[ target.name ] = target.checked ? - target.defaultValue || true : - undefined; - window.location = QUnit.url( params ); - }); - addEvents( urlConfigContainer.getElementsByTagName("select"), "change", function( event ) { - var params = {}, - target = event.target || event.srcElement; - params[ target.name ] = target.options[ target.selectedIndex ].value || undefined; - window.location = QUnit.url( params ); - }); - toolbar.appendChild( urlConfigContainer ); - - if (numModules > 1) { - moduleFilter = document.createElement( "span" ); - moduleFilter.setAttribute( "id", "qunit-modulefilter-container" ); - moduleFilter.innerHTML = moduleFilterHtml; - addEvent( moduleFilter.lastChild, "change", function() { - var selectBox = moduleFilter.getElementsByTagName("select")[0], - selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value); - - window.location = QUnit.url({ - module: ( selectedModule === "" ) ? undefined : selectedModule, - // Remove any existing filters - filter: undefined, - testNumber: undefined - }); - }); - toolbar.appendChild(moduleFilter); - } - } - - // `main` initialized at top of scope - main = id( "qunit-fixture" ); - if ( main ) { - config.fixture = main.innerHTML; - } - - if ( config.autostart ) { - QUnit.start(); - } -}; - -if ( defined.document ) { - addEvent( window, "load", QUnit.load ); -} - -// `onErrorFnPrev` initialized at top of scope -// Preserve other handlers -onErrorFnPrev = window.onerror; - -// Cover uncaught exceptions -// Returning true will suppress the default browser handler, -// returning false will let it run. -window.onerror = function ( error, filePath, linerNr ) { - var ret = false; - if ( onErrorFnPrev ) { - ret = onErrorFnPrev( error, filePath, linerNr ); - } - - // Treat return value as window.onerror itself does, - // Only do our handling if not suppressed. - if ( ret !== true ) { - if ( QUnit.config.current ) { - if ( QUnit.config.current.ignoreGlobalErrors ) { - return true; - } - QUnit.pushFailure( error, filePath + ":" + linerNr ); - } else { - QUnit.test( "global failure", extend( function() { - QUnit.pushFailure( error, filePath + ":" + linerNr ); - }, { validTest: validTest } ) ); - } - return false; - } - - return ret; -}; - -function done() { - config.autorun = true; - - // Log the last module results - if ( config.previousModule ) { - runLoggingCallbacks( "moduleDone", QUnit, { - name: config.previousModule, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all - }); - } - delete config.previousModule; - - var i, key, - banner = id( "qunit-banner" ), - tests = id( "qunit-tests" ), - runtime = +new Date() - config.started, - passed = config.stats.all - config.stats.bad, - html = [ - "Tests completed in ", - runtime, - " milliseconds.
      ", - "", - passed, - " assertions of ", - config.stats.all, - " passed, ", - config.stats.bad, - " failed." - ].join( "" ); - - if ( banner ) { - banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" ); - } - - if ( tests ) { - id( "qunit-testresult" ).innerHTML = html; - } - - if ( config.altertitle && defined.document && document.title ) { - // show ✖ for good, ✔ for bad suite result in title - // use escape sequences in case file gets loaded with non-utf-8-charset - document.title = [ - ( config.stats.bad ? "\u2716" : "\u2714" ), - document.title.replace( /^[\u2714\u2716] /i, "" ) - ].join( " " ); - } - - // clear own sessionStorage items if all tests passed - if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) { - // `key` & `i` initialized at top of scope - for ( i = 0; i < sessionStorage.length; i++ ) { - key = sessionStorage.key( i++ ); - if ( key.indexOf( "qunit-test-" ) === 0 ) { - sessionStorage.removeItem( key ); - } - } - } - - // scroll back to top to show results - if ( config.scrolltop && window.scrollTo ) { - window.scrollTo(0, 0); - } - - runLoggingCallbacks( "done", QUnit, { - failed: config.stats.bad, - passed: passed, - total: config.stats.all, - runtime: runtime - }); -} - -/** @return Boolean: true if this test should be ran */ -function validTest( test ) { - var include, - filter = config.filter && config.filter.toLowerCase(), - module = config.module && config.module.toLowerCase(), - fullName = ( test.module + ": " + test.testName ).toLowerCase(); - - // Internally-generated tests are always valid - if ( test.callback && test.callback.validTest === validTest ) { - delete test.callback.validTest; - return true; - } - - if ( config.testNumber.length > 0 ) { - if ( inArray( test.testNumber, config.testNumber ) < 0 ) { - return false; - } - } - - if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) { - return false; - } - - if ( !filter ) { - return true; - } - - include = filter.charAt( 0 ) !== "!"; - if ( !include ) { - filter = filter.slice( 1 ); - } - - // If the filter matches, we need to honour include - if ( fullName.indexOf( filter ) !== -1 ) { - return include; - } - - // Otherwise, do the opposite - return !include; -} - -// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions) -// Later Safari and IE10 are supposed to support error.stack as well -// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack -function extractStacktrace( e, offset ) { - offset = offset === undefined ? 3 : offset; - - var stack, include, i; - - if ( e.stacktrace ) { - // Opera - return e.stacktrace.split( "\n" )[ offset + 3 ]; - } else if ( e.stack ) { - // Firefox, Chrome - stack = e.stack.split( "\n" ); - if (/^error$/i.test( stack[0] ) ) { - stack.shift(); - } - if ( fileName ) { - include = []; - for ( i = offset; i < stack.length; i++ ) { - if ( stack[ i ].indexOf( fileName ) !== -1 ) { - break; - } - include.push( stack[ i ] ); - } - if ( include.length ) { - return include.join( "\n" ); - } - } - return stack[ offset ]; - } else if ( e.sourceURL ) { - // Safari, PhantomJS - // hopefully one day Safari provides actual stacktraces - // exclude useless self-reference for generated Error objects - if ( /qunit.js$/.test( e.sourceURL ) ) { - return; - } - // for actual exceptions, this is useful - return e.sourceURL + ":" + e.line; - } -} -function sourceFromStacktrace( offset ) { - try { - throw new Error(); - } catch ( e ) { - return extractStacktrace( e, offset ); - } -} - -/** - * Escape text for attribute or text content. - */ -function escapeText( s ) { - if ( !s ) { - return ""; - } - s = s + ""; - // Both single quotes and double quotes (for attributes) - return s.replace( /['"<>&]/g, function( s ) { - switch( s ) { - case "'": - return "'"; - case "\"": - return """; - case "<": - return "<"; - case ">": - return ">"; - case "&": - return "&"; - } - }); -} - -function synchronize( callback, last ) { - config.queue.push( callback ); - - if ( config.autorun && !config.blocking ) { - process( last ); - } -} - -function process( last ) { - function next() { - process( last ); - } - var start = new Date().getTime(); - config.depth = config.depth ? config.depth + 1 : 1; - - while ( config.queue.length && !config.blocking ) { - if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) { - config.queue.shift()(); - } else { - setTimeout( next, 13 ); - break; - } - } - config.depth--; - if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) { - done(); - } -} - -function saveGlobal() { - config.pollution = []; - - if ( config.noglobals ) { - for ( var key in window ) { - if ( hasOwn.call( window, key ) ) { - // in Opera sometimes DOM element ids show up here, ignore them - if ( /^qunit-test-output/.test( key ) ) { - continue; - } - config.pollution.push( key ); - } - } - } -} - -function checkPollution() { - var newGlobals, - deletedGlobals, - old = config.pollution; - - saveGlobal(); - - newGlobals = diff( config.pollution, old ); - if ( newGlobals.length > 0 ) { - QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") ); - } - - deletedGlobals = diff( old, config.pollution ); - if ( deletedGlobals.length > 0 ) { - QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") ); - } -} - -// returns a new Array with the elements that are in a but not in b -function diff( a, b ) { - var i, j, - result = a.slice(); - - for ( i = 0; i < result.length; i++ ) { - for ( j = 0; j < b.length; j++ ) { - if ( result[i] === b[j] ) { - result.splice( i, 1 ); - i--; - break; - } - } - } - return result; -} - -function extend( a, b ) { - for ( var prop in b ) { - if ( hasOwn.call( b, prop ) ) { - // Avoid "Member not found" error in IE8 caused by messing with window.constructor - if ( !( prop === "constructor" && a === window ) ) { - if ( b[ prop ] === undefined ) { - delete a[ prop ]; - } else { - a[ prop ] = b[ prop ]; - } - } - } - } - - return a; -} - -/** - * @param {HTMLElement} elem - * @param {string} type - * @param {Function} fn - */ -function addEvent( elem, type, fn ) { - if ( elem.addEventListener ) { - - // Standards-based browsers - elem.addEventListener( type, fn, false ); - } else if ( elem.attachEvent ) { - - // support: IE <9 - elem.attachEvent( "on" + type, fn ); - } else { - - // Caller must ensure support for event listeners is present - throw new Error( "addEvent() was called in a context without event listener support" ); - } -} - -/** - * @param {Array|NodeList} elems - * @param {string} type - * @param {Function} fn - */ -function addEvents( elems, type, fn ) { - var i = elems.length; - while ( i-- ) { - addEvent( elems[i], type, fn ); - } -} - -function hasClass( elem, name ) { - return (" " + elem.className + " ").indexOf(" " + name + " ") > -1; -} - -function addClass( elem, name ) { - if ( !hasClass( elem, name ) ) { - elem.className += (elem.className ? " " : "") + name; - } -} - -function removeClass( elem, name ) { - var set = " " + elem.className + " "; - // Class name may appear multiple times - while ( set.indexOf(" " + name + " ") > -1 ) { - set = set.replace(" " + name + " " , " "); - } - // If possible, trim it for prettiness, but not necessarily - elem.className = typeof set.trim === "function" ? set.trim() : set.replace(/^\s+|\s+$/g, ""); -} - -function id( name ) { - return defined.document && document.getElementById && document.getElementById( name ); -} - -function registerLoggingCallback( key ) { - return function( callback ) { - config[key].push( callback ); - }; -} - -// Supports deprecated method of completely overwriting logging callbacks -function runLoggingCallbacks( key, scope, args ) { - var i, callbacks; - if ( QUnit.hasOwnProperty( key ) ) { - QUnit[ key ].call(scope, args ); - } else { - callbacks = config[ key ]; - for ( i = 0; i < callbacks.length; i++ ) { - callbacks[ i ].call( scope, args ); - } - } -} - -// from jquery.js -function inArray( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; -} - -function Test( settings ) { - extend( this, settings ); - this.assertions = []; - this.testNumber = ++Test.count; -} - -Test.count = 0; - -Test.prototype = { - init: function() { - var a, b, li, - tests = id( "qunit-tests" ); - - if ( tests ) { - b = document.createElement( "strong" ); - b.innerHTML = this.nameHtml; - - // `a` initialized at top of scope - a = document.createElement( "a" ); - a.innerHTML = "Rerun"; - a.href = QUnit.url({ testNumber: this.testNumber }); - - li = document.createElement( "li" ); - li.appendChild( b ); - li.appendChild( a ); - li.className = "running"; - li.id = this.id = "qunit-test-output" + testId++; - - tests.appendChild( li ); - } - }, - setup: function() { - if ( - // Emit moduleStart when we're switching from one module to another - this.module !== config.previousModule || - // They could be equal (both undefined) but if the previousModule property doesn't - // yet exist it means this is the first test in a suite that isn't wrapped in a - // module, in which case we'll just emit a moduleStart event for 'undefined'. - // Without this, reporters can get testStart before moduleStart which is a problem. - !hasOwn.call( config, "previousModule" ) - ) { - if ( hasOwn.call( config, "previousModule" ) ) { - runLoggingCallbacks( "moduleDone", QUnit, { - name: config.previousModule, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all - }); - } - config.previousModule = this.module; - config.moduleStats = { all: 0, bad: 0 }; - runLoggingCallbacks( "moduleStart", QUnit, { - name: this.module - }); - } - - config.current = this; - - this.testEnvironment = extend({ - setup: function() {}, - teardown: function() {} - }, this.moduleTestEnvironment ); - - this.started = +new Date(); - runLoggingCallbacks( "testStart", QUnit, { - name: this.testName, - module: this.module - }); - - /*jshint camelcase:false */ - - - /** - * Expose the current test environment. - * - * @deprecated since 1.12.0: Use QUnit.config.current.testEnvironment instead. - */ - QUnit.current_testEnvironment = this.testEnvironment; - - /*jshint camelcase:true */ - - if ( !config.pollution ) { - saveGlobal(); - } - if ( config.notrycatch ) { - this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert ); - return; - } - try { - this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert ); - } catch( e ) { - QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) ); - } - }, - run: function() { - config.current = this; - - var running = id( "qunit-testresult" ); - - if ( running ) { - running.innerHTML = "Running:
      " + this.nameHtml; - } - - if ( this.async ) { - QUnit.stop(); - } - - this.callbackStarted = +new Date(); - - if ( config.notrycatch ) { - this.callback.call( this.testEnvironment, QUnit.assert ); - this.callbackRuntime = +new Date() - this.callbackStarted; - return; - } - - try { - this.callback.call( this.testEnvironment, QUnit.assert ); - this.callbackRuntime = +new Date() - this.callbackStarted; - } catch( e ) { - this.callbackRuntime = +new Date() - this.callbackStarted; - - QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) ); - // else next test will carry the responsibility - saveGlobal(); - - // Restart the tests if they're blocking - if ( config.blocking ) { - QUnit.start(); - } - } - }, - teardown: function() { - config.current = this; - if ( config.notrycatch ) { - if ( typeof this.callbackRuntime === "undefined" ) { - this.callbackRuntime = +new Date() - this.callbackStarted; - } - this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert ); - return; - } else { - try { - this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert ); - } catch( e ) { - QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) ); - } - } - checkPollution(); - }, - finish: function() { - config.current = this; - if ( config.requireExpects && this.expected === null ) { - QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack ); - } else if ( this.expected !== null && this.expected !== this.assertions.length ) { - QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack ); - } else if ( this.expected === null && !this.assertions.length ) { - QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack ); - } - - var i, assertion, a, b, time, li, ol, - test = this, - good = 0, - bad = 0, - tests = id( "qunit-tests" ); - - this.runtime = +new Date() - this.started; - config.stats.all += this.assertions.length; - config.moduleStats.all += this.assertions.length; - - if ( tests ) { - ol = document.createElement( "ol" ); - ol.className = "qunit-assert-list"; - - for ( i = 0; i < this.assertions.length; i++ ) { - assertion = this.assertions[i]; - - li = document.createElement( "li" ); - li.className = assertion.result ? "pass" : "fail"; - li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" ); - ol.appendChild( li ); - - if ( assertion.result ) { - good++; - } else { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - - // store result when possible - if ( QUnit.config.reorder && defined.sessionStorage ) { - if ( bad ) { - sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad ); - } else { - sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName ); - } - } - - if ( bad === 0 ) { - addClass( ol, "qunit-collapsed" ); - } - - // `b` initialized at top of scope - b = document.createElement( "strong" ); - b.innerHTML = this.nameHtml + " (" + bad + ", " + good + ", " + this.assertions.length + ")"; - - addEvent(b, "click", function() { - var next = b.parentNode.lastChild, - collapsed = hasClass( next, "qunit-collapsed" ); - ( collapsed ? removeClass : addClass )( next, "qunit-collapsed" ); - }); - - addEvent(b, "dblclick", function( e ) { - var target = e && e.target ? e.target : window.event.srcElement; - if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) { - target = target.parentNode; - } - if ( window.location && target.nodeName.toLowerCase() === "strong" ) { - window.location = QUnit.url({ testNumber: test.testNumber }); - } - }); - - // `time` initialized at top of scope - time = document.createElement( "span" ); - time.className = "runtime"; - time.innerHTML = this.runtime + " ms"; - - // `li` initialized at top of scope - li = id( this.id ); - li.className = bad ? "fail" : "pass"; - li.removeChild( li.firstChild ); - a = li.firstChild; - li.appendChild( b ); - li.appendChild( a ); - li.appendChild( time ); - li.appendChild( ol ); - - } else { - for ( i = 0; i < this.assertions.length; i++ ) { - if ( !this.assertions[i].result ) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - } - - runLoggingCallbacks( "testDone", QUnit, { - name: this.testName, - module: this.module, - failed: bad, - passed: this.assertions.length - bad, - total: this.assertions.length, - runtime: this.runtime, - // DEPRECATED: this property will be removed in 2.0.0, use runtime instead - duration: this.runtime - }); - - QUnit.reset(); - - config.current = undefined; - }, - - queue: function() { - var bad, - test = this; - - synchronize(function() { - test.init(); - }); - function run() { - // each of these can by async - synchronize(function() { - test.setup(); - }); - synchronize(function() { - test.run(); - }); - synchronize(function() { - test.teardown(); - }); - synchronize(function() { - test.finish(); - }); - } - - // `bad` initialized at top of scope - // defer when previous test run passed, if storage is available - bad = QUnit.config.reorder && defined.sessionStorage && - +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName ); - - if ( bad ) { - run(); - } else { - synchronize( run, true ); - } - } -}; - -// `assert` initialized at top of scope -// Assert helpers -// All of these must either call QUnit.push() or manually do: -// - runLoggingCallbacks( "log", .. ); -// - config.current.assertions.push({ .. }); -assert = QUnit.assert = { - /** - * Asserts rough true-ish result. - * @name ok - * @function - * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); - */ - ok: function( result, msg ) { - if ( !config.current ) { - throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) ); - } - result = !!result; - msg = msg || ( result ? "okay" : "failed" ); - - var source, - details = { - module: config.current.module, - name: config.current.testName, - result: result, - message: msg - }; - - msg = "" + escapeText( msg ) + ""; - - if ( !result ) { - source = sourceFromStacktrace( 2 ); - if ( source ) { - details.source = source; - msg += "
      Source:
      " +
      -					escapeText( source ) +
      -					"
      "; - } - } - runLoggingCallbacks( "log", QUnit, details ); - config.current.assertions.push({ - result: result, - message: msg - }); - }, - - /** - * Assert that the first two arguments are equal, with an optional message. - * Prints out both actual and expected values. - * @name equal - * @function - * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" ); - */ - equal: function( actual, expected, message ) { - /*jshint eqeqeq:false */ - QUnit.push( expected == actual, actual, expected, message ); - }, - - /** - * @name notEqual - * @function - */ - notEqual: function( actual, expected, message ) { - /*jshint eqeqeq:false */ - QUnit.push( expected != actual, actual, expected, message ); - }, - - /** - * @name propEqual - * @function - */ - propEqual: function( actual, expected, message ) { - actual = objectValues(actual); - expected = objectValues(expected); - QUnit.push( QUnit.equiv(actual, expected), actual, expected, message ); - }, - - /** - * @name notPropEqual - * @function - */ - notPropEqual: function( actual, expected, message ) { - actual = objectValues(actual); - expected = objectValues(expected); - QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message ); - }, - - /** - * @name deepEqual - * @function - */ - deepEqual: function( actual, expected, message ) { - QUnit.push( QUnit.equiv(actual, expected), actual, expected, message ); - }, - - /** - * @name notDeepEqual - * @function - */ - notDeepEqual: function( actual, expected, message ) { - QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message ); - }, - - /** - * @name strictEqual - * @function - */ - strictEqual: function( actual, expected, message ) { - QUnit.push( expected === actual, actual, expected, message ); - }, - - /** - * @name notStrictEqual - * @function - */ - notStrictEqual: function( actual, expected, message ) { - QUnit.push( expected !== actual, actual, expected, message ); - }, - - "throws": function( block, expected, message ) { - var actual, - expectedOutput = expected, - ok = false; - - // 'expected' is optional - if ( !message && typeof expected === "string" ) { - message = expected; - expected = null; - } - - config.current.ignoreGlobalErrors = true; - try { - block.call( config.current.testEnvironment ); - } catch (e) { - actual = e; - } - config.current.ignoreGlobalErrors = false; - - if ( actual ) { - - // we don't want to validate thrown error - if ( !expected ) { - ok = true; - expectedOutput = null; - - // expected is an Error object - } else if ( expected instanceof Error ) { - ok = actual instanceof Error && - actual.name === expected.name && - actual.message === expected.message; - - // expected is a regexp - } else if ( QUnit.objectType( expected ) === "regexp" ) { - ok = expected.test( errorString( actual ) ); - - // expected is a string - } else if ( QUnit.objectType( expected ) === "string" ) { - ok = expected === errorString( actual ); - - // expected is a constructor - } else if ( actual instanceof expected ) { - ok = true; - - // expected is a validation function which returns true is validation passed - } else if ( expected.call( {}, actual ) === true ) { - expectedOutput = null; - ok = true; - } - - QUnit.push( ok, actual, expectedOutput, message ); - } else { - QUnit.pushFailure( message, null, "No exception was thrown." ); - } - } -}; - -/** - * @deprecated since 1.8.0 - * Kept assertion helpers in root for backwards compatibility. - */ -extend( QUnit.constructor.prototype, assert ); - -/** - * @deprecated since 1.9.0 - * Kept to avoid TypeErrors for undefined methods. - */ -QUnit.constructor.prototype.raises = function() { - QUnit.push( false, false, false, "QUnit.raises has been deprecated since 2012 (fad3c1ea), use QUnit.throws instead" ); -}; - -/** - * @deprecated since 1.0.0, replaced with error pushes since 1.3.0 - * Kept to avoid TypeErrors for undefined methods. - */ -QUnit.constructor.prototype.equals = function() { - QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" ); -}; -QUnit.constructor.prototype.same = function() { - QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" ); -}; - -// Test for equality any JavaScript type. -// Author: Philippe Rathé -QUnit.equiv = (function() { - - // Call the o related callback with the given arguments. - function bindCallbacks( o, callbacks, args ) { - var prop = QUnit.objectType( o ); - if ( prop ) { - if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) { - return callbacks[ prop ].apply( callbacks, args ); - } else { - return callbacks[ prop ]; // or undefined - } - } - } - - // the real equiv function - var innerEquiv, - // stack to decide between skip/abort functions - callers = [], - // stack to avoiding loops from circular referencing - parents = [], - parentsB = [], - - getProto = Object.getPrototypeOf || function ( obj ) { - /*jshint camelcase:false */ - return obj.__proto__; - }, - callbacks = (function () { - - // for string, boolean, number and null - function useStrictEquality( b, a ) { - /*jshint eqeqeq:false */ - if ( b instanceof a.constructor || a instanceof b.constructor ) { - // to catch short annotation VS 'new' annotation of a - // declaration - // e.g. var i = 1; - // var j = new Number(1); - return a == b; - } else { - return a === b; - } - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function( b ) { - return isNaN( b ); - }, - - "date": function( b, a ) { - return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function( b, a ) { - return QUnit.objectType( b ) === "regexp" && - // the regex itself - a.source === b.source && - // and its modifiers - a.global === b.global && - // (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline && - a.sticky === b.sticky; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function() { - var caller = callers[callers.length - 1]; - return caller !== Object && typeof caller !== "undefined"; - }, - - "array": function( b, a ) { - var i, j, len, loop, aCircular, bCircular; - - // b could be an object literal here - if ( QUnit.objectType( b ) !== "array" ) { - return false; - } - - len = a.length; - if ( len !== b.length ) { - // safe and faster - return false; - } - - // track reference to avoid circular references - parents.push( a ); - parentsB.push( b ); - for ( i = 0; i < len; i++ ) { - loop = false; - for ( j = 0; j < parents.length; j++ ) { - aCircular = parents[j] === a[i]; - bCircular = parentsB[j] === b[i]; - if ( aCircular || bCircular ) { - if ( a[i] === b[i] || aCircular && bCircular ) { - loop = true; - } else { - parents.pop(); - parentsB.pop(); - return false; - } - } - } - if ( !loop && !innerEquiv(a[i], b[i]) ) { - parents.pop(); - parentsB.pop(); - return false; - } - } - parents.pop(); - parentsB.pop(); - return true; - }, - - "object": function( b, a ) { - /*jshint forin:false */ - var i, j, loop, aCircular, bCircular, - // Default to true - eq = true, - aProperties = [], - bProperties = []; - - // comparing constructors is more strict than using - // instanceof - if ( a.constructor !== b.constructor ) { - // Allow objects with no prototype to be equivalent to - // objects with Object as their constructor. - if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) || - ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) { - return false; - } - } - - // stack constructor before traversing properties - callers.push( a.constructor ); - - // track reference to avoid circular references - parents.push( a ); - parentsB.push( b ); - - // be strict: don't ensure hasOwnProperty and go deep - for ( i in a ) { - loop = false; - for ( j = 0; j < parents.length; j++ ) { - aCircular = parents[j] === a[i]; - bCircular = parentsB[j] === b[i]; - if ( aCircular || bCircular ) { - if ( a[i] === b[i] || aCircular && bCircular ) { - loop = true; - } else { - eq = false; - break; - } - } - } - aProperties.push(i); - if ( !loop && !innerEquiv(a[i], b[i]) ) { - eq = false; - break; - } - } - - parents.pop(); - parentsB.pop(); - callers.pop(); // unstack, we are done - - for ( i in b ) { - bProperties.push( i ); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv( aProperties.sort(), bProperties.sort() ); - } - }; - }()); - - innerEquiv = function() { // can take multiple arguments - var args = [].slice.apply( arguments ); - if ( args.length < 2 ) { - return true; // end transition - } - - return (function( a, b ) { - if ( a === b ) { - return true; // catch the most you can - } else if ( a === null || b === null || typeof a === "undefined" || - typeof b === "undefined" || - QUnit.objectType(a) !== QUnit.objectType(b) ) { - return false; // don't lose time with error prone cases - } else { - return bindCallbacks(a, callbacks, [ b, a ]); - } - - // apply transition with (1..n) arguments - }( args[0], args[1] ) && innerEquiv.apply( this, args.splice(1, args.length - 1 )) ); - }; - - return innerEquiv; -}()); - -/** - * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | - * http://flesler.blogspot.com Licensed under BSD - * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008 - * - * @projectDescription Advanced and extensible data dumping for Javascript. - * @version 1.0.0 - * @author Ariel Flesler - * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} - */ -QUnit.jsDump = (function() { - function quote( str ) { - return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\""; - } - function literal( o ) { - return o + ""; - } - function join( pre, arr, post ) { - var s = jsDump.separator(), - base = jsDump.indent(), - inner = jsDump.indent(1); - if ( arr.join ) { - arr = arr.join( "," + s + inner ); - } - if ( !arr ) { - return pre + post; - } - return [ pre, inner + arr, base + post ].join(s); - } - function array( arr, stack ) { - var i = arr.length, ret = new Array(i); - this.up(); - while ( i-- ) { - ret[i] = this.parse( arr[i] , undefined , stack); - } - this.down(); - return join( "[", ret, "]" ); - } - - var reName = /^function (\w+)/, - jsDump = { - // type is used mostly internally, you can fix a (custom)type in advance - parse: function( obj, type, stack ) { - stack = stack || [ ]; - var inStack, res, - parser = this.parsers[ type || this.typeOf(obj) ]; - - type = typeof parser; - inStack = inArray( obj, stack ); - - if ( inStack !== -1 ) { - return "recursion(" + (inStack - stack.length) + ")"; - } - if ( type === "function" ) { - stack.push( obj ); - res = parser.call( this, obj, stack ); - stack.pop(); - return res; - } - return ( type === "string" ) ? parser : this.parsers.error; - }, - typeOf: function( obj ) { - var type; - if ( obj === null ) { - type = "null"; - } else if ( typeof obj === "undefined" ) { - type = "undefined"; - } else if ( QUnit.is( "regexp", obj) ) { - type = "regexp"; - } else if ( QUnit.is( "date", obj) ) { - type = "date"; - } else if ( QUnit.is( "function", obj) ) { - type = "function"; - } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) { - type = "window"; - } else if ( obj.nodeType === 9 ) { - type = "document"; - } else if ( obj.nodeType ) { - type = "node"; - } else if ( - // native arrays - toString.call( obj ) === "[object Array]" || - // NodeList objects - ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) ) - ) { - type = "array"; - } else if ( obj.constructor === Error.prototype.constructor ) { - type = "error"; - } else { - type = typeof obj; - } - return type; - }, - separator: function() { - return this.multiline ? this.HTML ? "
      " : "\n" : this.HTML ? " " : " "; - }, - // extra can be a number, shortcut for increasing-calling-decreasing - indent: function( extra ) { - if ( !this.multiline ) { - return ""; - } - var chr = this.indentChar; - if ( this.HTML ) { - chr = chr.replace( /\t/g, " " ).replace( / /g, " " ); - } - return new Array( this.depth + ( extra || 0 ) ).join(chr); - }, - up: function( a ) { - this.depth += a || 1; - }, - down: function( a ) { - this.depth -= a || 1; - }, - setParser: function( name, parser ) { - this.parsers[name] = parser; - }, - // The next 3 are exposed so you can use them - quote: quote, - literal: literal, - join: join, - // - depth: 1, - // This is the list of parsers, to modify them, use jsDump.setParser - parsers: { - window: "[Window]", - document: "[Document]", - error: function(error) { - return "Error(\"" + error.message + "\")"; - }, - unknown: "[Unknown]", - "null": "null", - "undefined": "undefined", - "function": function( fn ) { - var ret = "function", - // functions never have name in IE - name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1]; - - if ( name ) { - ret += " " + name; - } - ret += "( "; - - ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" ); - return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" ); - }, - array: array, - nodelist: array, - "arguments": array, - object: function( map, stack ) { - /*jshint forin:false */ - var ret = [ ], keys, key, val, i; - QUnit.jsDump.up(); - keys = []; - for ( key in map ) { - keys.push( key ); - } - keys.sort(); - for ( i = 0; i < keys.length; i++ ) { - key = keys[ i ]; - val = map[ key ]; - ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) ); - } - QUnit.jsDump.down(); - return join( "{", ret, "}" ); - }, - node: function( node ) { - var len, i, val, - open = QUnit.jsDump.HTML ? "<" : "<", - close = QUnit.jsDump.HTML ? ">" : ">", - tag = node.nodeName.toLowerCase(), - ret = open + tag, - attrs = node.attributes; - - if ( attrs ) { - for ( i = 0, len = attrs.length; i < len; i++ ) { - val = attrs[i].nodeValue; - // IE6 includes all attributes in .attributes, even ones not explicitly set. - // Those have values like undefined, null, 0, false, "" or "inherit". - if ( val && val !== "inherit" ) { - ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" ); - } - } - } - ret += close; - - // Show content of TextNode or CDATASection - if ( node.nodeType === 3 || node.nodeType === 4 ) { - ret += node.nodeValue; - } - - return ret + open + "/" + tag + close; - }, - // function calls it internally, it's the arguments part of the function - functionArgs: function( fn ) { - var args, - l = fn.length; - - if ( !l ) { - return ""; - } - - args = new Array(l); - while ( l-- ) { - // 97 is 'a' - args[l] = String.fromCharCode(97+l); - } - return " " + args.join( ", " ) + " "; - }, - // object calls it internally, the key part of an item in a map - key: quote, - // function calls it internally, it's the content of the function - functionCode: "[code]", - // node calls it internally, it's an html attribute value - attribute: quote, - string: quote, - date: quote, - regexp: literal, - number: literal, - "boolean": literal - }, - // if true, entities are escaped ( <, >, \t, space and \n ) - HTML: false, - // indentation unit - indentChar: " ", - // if true, items in a collection, are separated by a \n, else just a space. - multiline: true - }; - - return jsDump; -}()); - -/* - * Javascript Diff Algorithm - * By John Resig (http://ejohn.org/) - * Modified by Chu Alan "sprite" - * - * Released under the MIT license. - * - * More Info: - * http://ejohn.org/projects/javascript-diff-algorithm/ - * - * Usage: QUnit.diff(expected, actual) - * - * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the quick brown fox jumped jumps over" - */ -QUnit.diff = (function() { - /*jshint eqeqeq:false, eqnull:true */ - function diff( o, n ) { - var i, - ns = {}, - os = {}; - - for ( i = 0; i < n.length; i++ ) { - if ( !hasOwn.call( ns, n[i] ) ) { - ns[ n[i] ] = { - rows: [], - o: null - }; - } - ns[ n[i] ].rows.push( i ); - } - - for ( i = 0; i < o.length; i++ ) { - if ( !hasOwn.call( os, o[i] ) ) { - os[ o[i] ] = { - rows: [], - n: null - }; - } - os[ o[i] ].rows.push( i ); - } - - for ( i in ns ) { - if ( hasOwn.call( ns, i ) ) { - if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) { - n[ ns[i].rows[0] ] = { - text: n[ ns[i].rows[0] ], - row: os[i].rows[0] - }; - o[ os[i].rows[0] ] = { - text: o[ os[i].rows[0] ], - row: ns[i].rows[0] - }; - } - } - } - - for ( i = 0; i < n.length - 1; i++ ) { - if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null && - n[ i + 1 ] == o[ n[i].row + 1 ] ) { - - n[ i + 1 ] = { - text: n[ i + 1 ], - row: n[i].row + 1 - }; - o[ n[i].row + 1 ] = { - text: o[ n[i].row + 1 ], - row: i + 1 - }; - } - } - - for ( i = n.length - 1; i > 0; i-- ) { - if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null && - n[ i - 1 ] == o[ n[i].row - 1 ]) { - - n[ i - 1 ] = { - text: n[ i - 1 ], - row: n[i].row - 1 - }; - o[ n[i].row - 1 ] = { - text: o[ n[i].row - 1 ], - row: i - 1 - }; - } - } - - return { - o: o, - n: n - }; - } - - return function( o, n ) { - o = o.replace( /\s+$/, "" ); - n = n.replace( /\s+$/, "" ); - - var i, pre, - str = "", - out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ), - oSpace = o.match(/\s+/g), - nSpace = n.match(/\s+/g); - - if ( oSpace == null ) { - oSpace = [ " " ]; - } - else { - oSpace.push( " " ); - } - - if ( nSpace == null ) { - nSpace = [ " " ]; - } - else { - nSpace.push( " " ); - } - - if ( out.n.length === 0 ) { - for ( i = 0; i < out.o.length; i++ ) { - str += "" + out.o[i] + oSpace[i] + ""; - } - } - else { - if ( out.n[0].text == null ) { - for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) { - str += "" + out.o[n] + oSpace[n] + ""; - } - } - - for ( i = 0; i < out.n.length; i++ ) { - if (out.n[i].text == null) { - str += "" + out.n[i] + nSpace[i] + ""; - } - else { - // `pre` initialized at top of scope - pre = ""; - - for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) { - pre += "" + out.o[n] + oSpace[n] + ""; - } - str += " " + out.n[i].text + nSpace[i] + pre; - } - } - } - - return str; - }; -}()); - -// For browser, export only select globals -if ( typeof window !== "undefined" ) { - extend( window, QUnit.constructor.prototype ); - window.QUnit = QUnit; -} - -// For CommonJS environments, export everything -if ( typeof module !== "undefined" && module.exports ) { - module.exports = QUnit; -} - - -// Get a reference to the global object, like window in browsers -}( (function() { - return this; -})() )); diff --git a/node_modules/seedrandom/test/lib/require.js b/node_modules/seedrandom/test/lib/require.js deleted file mode 100644 index 24b061e..0000000 --- a/node_modules/seedrandom/test/lib/require.js +++ /dev/null @@ -1,2068 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 2.1.11 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -//Not using strict: uneven strict support in browsers, #392, and causes -//problems with requirejs.exec()/transpiler plugins that may not be strict. -/*jslint regexp: true, nomen: true, sloppy: true */ -/*global window, navigator, document, importScripts, setTimeout, opera */ - -var requirejs, require, define; -(function (global) { - var req, s, head, baseElement, dataMain, src, - interactiveScript, currentlyAddingScript, mainScript, subPath, - version = '2.1.11', - commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, - cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, - jsSuffixRegExp = /\.js$/, - currDirRegExp = /^\.\//, - op = Object.prototype, - ostring = op.toString, - hasOwn = op.hasOwnProperty, - ap = Array.prototype, - apsp = ap.splice, - isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document), - isWebWorker = !isBrowser && typeof importScripts !== 'undefined', - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is 'loading', 'loaded', execution, - // then 'complete'. The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = '_', - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', - contexts = {}, - cfg = {}, - globalDefQueue = [], - useInteractive = false; - - function isFunction(it) { - return ostring.call(it) === '[object Function]'; - } - - function isArray(it) { - return ostring.call(it) === '[object Array]'; - } - - /** - * Helper function for iterating over an array. If the func returns - * a true value, it will break out of the loop. - */ - function each(ary, func) { - if (ary) { - var i; - for (i = 0; i < ary.length; i += 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - - /** - * Helper function for iterating over an array backwards. If the func - * returns a true value, it will break out of the loop. - */ - function eachReverse(ary, func) { - if (ary) { - var i; - for (i = ary.length - 1; i > -1; i -= 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - - function hasProp(obj, prop) { - return hasOwn.call(obj, prop); - } - - function getOwn(obj, prop) { - return hasProp(obj, prop) && obj[prop]; - } - - /** - * Cycles over properties in an object and calls a function for each - * property value. If the function returns a truthy value, then the - * iteration is stopped. - */ - function eachProp(obj, func) { - var prop; - for (prop in obj) { - if (hasProp(obj, prop)) { - if (func(obj[prop], prop)) { - break; - } - } - } - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - */ - function mixin(target, source, force, deepStringMixin) { - if (source) { - eachProp(source, function (value, prop) { - if (force || !hasProp(target, prop)) { - if (deepStringMixin && typeof value === 'object' && value && - !isArray(value) && !isFunction(value) && - !(value instanceof RegExp)) { - - if (!target[prop]) { - target[prop] = {}; - } - mixin(target[prop], value, force, deepStringMixin); - } else { - target[prop] = value; - } - } - }); - } - return target; - } - - //Similar to Function.prototype.bind, but the 'this' object is specified - //first, since it is easier to read/figure out what 'this' will be. - function bind(obj, fn) { - return function () { - return fn.apply(obj, arguments); - }; - } - - function scripts() { - return document.getElementsByTagName('script'); - } - - function defaultOnError(err) { - throw err; - } - - //Allow getting a global that is expressed in - //dot notation, like 'a.b.c'. - function getGlobal(value) { - if (!value) { - return value; - } - var g = global; - each(value.split('.'), function (part) { - g = g[part]; - }); - return g; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err, requireModules) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); - e.requireType = id; - e.requireModules = requireModules; - if (err) { - e.originalError = err; - } - return e; - } - - if (typeof define !== 'undefined') { - //If a define is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof requirejs !== 'undefined') { - if (isFunction(requirejs)) { - //Do not overwrite and existing requirejs instance. - return; - } - cfg = requirejs; - requirejs = undefined; - } - - //Allow for a require config object - if (typeof require !== 'undefined' && !isFunction(require)) { - //assume it is a config object. - cfg = require; - require = undefined; - } - - function newContext(contextName) { - var inCheckLoaded, Module, context, handlers, - checkLoadedTimeoutId, - config = { - //Defaults. Do not set a default for map - //config to speed up normalize(), which - //will run faster if there is no default. - waitSeconds: 7, - baseUrl: './', - paths: {}, - bundles: {}, - pkgs: {}, - shim: {}, - config: {} - }, - registry = {}, - //registry of just enabled modules, to speed - //cycle breaking code when lots of modules - //are registered, but not activated. - enabledRegistry = {}, - undefEvents = {}, - defQueue = [], - defined = {}, - urlFetched = {}, - bundlesMap = {}, - requireCounter = 1, - unnormalizedCounter = 1; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part, length = ary.length; - for (i = 0; i < length; i++) { - part = ary[i]; - if (part === '.') { - ary.splice(i, 1); - i -= 1; - } else if (part === '..') { - if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { - //End of the line. Keep at least one non-dot - //path segment at the front so it can be mapped - //correctly to disk. Otherwise, there is likely - //no path mapping for a path starting with '..'. - //This can still fail, but catches the most reasonable - //uses of .. - break; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @param {Boolean} applyMap apply the map config to the value. Should - * only be done if this normalization is for a dependency ID. - * @returns {String} normalized name - */ - function normalize(name, baseName, applyMap) { - var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, - foundMap, foundI, foundStarMap, starI, - baseParts = baseName && baseName.split('/'), - normalizedBaseParts = baseParts, - map = config.map, - starMap = map && map['*']; - - //Adjust any relative paths. - if (name && name.charAt(0) === '.') { - //If have a base name, try to normalize against it, - //otherwise, assume it is a top-level require that will - //be relative to baseUrl in the end. - if (baseName) { - //Convert baseName to array, and lop off the last part, - //so that . matches that 'directory' and not name of the baseName's - //module. For instance, baseName of 'one/two/three', maps to - //'one/two/three.js', but we want the directory, 'one/two' for - //this normalization. - normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); - name = name.split('/'); - lastIndex = name.length - 1; - - // If wanting node ID compatibility, strip .js from end - // of IDs. Have to do this here, and not in nameToUrl - // because node allows either .js or non .js to map - // to same file. - if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { - name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); - } - - name = normalizedBaseParts.concat(name); - trimDots(name); - name = name.join('/'); - } else if (name.indexOf('./') === 0) { - // No baseName, so this is ID is resolved relative - // to baseUrl, pull off the leading dot. - name = name.substring(2); - } - } - - //Apply map config if available. - if (applyMap && map && (baseParts || starMap)) { - nameParts = name.split('/'); - - outerLoop: for (i = nameParts.length; i > 0; i -= 1) { - nameSegment = nameParts.slice(0, i).join('/'); - - if (baseParts) { - //Find the longest baseName segment match in the config. - //So, do joins on the biggest to smallest lengths of baseParts. - for (j = baseParts.length; j > 0; j -= 1) { - mapValue = getOwn(map, baseParts.slice(0, j).join('/')); - - //baseName segment has config, find if it has one for - //this name. - if (mapValue) { - mapValue = getOwn(mapValue, nameSegment); - if (mapValue) { - //Match, update name to the new value. - foundMap = mapValue; - foundI = i; - break outerLoop; - } - } - } - } - - //Check for a star map match, but just hold on to it, - //if there is a shorter segment match later in a matching - //config, then favor over this star map. - if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { - foundStarMap = getOwn(starMap, nameSegment); - starI = i; - } - } - - if (!foundMap && foundStarMap) { - foundMap = foundStarMap; - foundI = starI; - } - - if (foundMap) { - nameParts.splice(0, foundI, foundMap); - name = nameParts.join('/'); - } - } - - // If the name points to a package's name, use - // the package main instead. - pkgMain = getOwn(config.pkgs, name); - - return pkgMain ? pkgMain : name; - } - - function removeScript(name) { - if (isBrowser) { - each(scripts(), function (scriptNode) { - if (scriptNode.getAttribute('data-requiremodule') === name && - scriptNode.getAttribute('data-requirecontext') === context.contextName) { - scriptNode.parentNode.removeChild(scriptNode); - return true; - } - }); - } - } - - function hasPathFallback(id) { - var pathConfig = getOwn(config.paths, id); - if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { - //Pop off the first array value, since it failed, and - //retry - pathConfig.shift(); - context.require.undef(id); - context.require([id]); - return true; - } - } - - //Turns a plugin!resource to [plugin, resource] - //with the plugin being undefined if the name - //did not have a plugin prefix. - function splitPrefix(name) { - var prefix, - index = name ? name.indexOf('!') : -1; - if (index > -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - return [prefix, name]; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * @param {Boolean} isNormalized: is the ID already normalized. - * This is true if this call is done for a define() module ID. - * @param {Boolean} applyMap: apply the map config to the ID. - * Should only be true if this map is for a dependency. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { - var url, pluginModule, suffix, nameParts, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - isDefine = true, - normalizedName = ''; - - //If no name, then it means it is a require call, generate an - //internal name. - if (!name) { - isDefine = false; - name = '_@r' + (requireCounter += 1); - } - - nameParts = splitPrefix(name); - prefix = nameParts[0]; - name = nameParts[1]; - - if (prefix) { - prefix = normalize(prefix, parentName, applyMap); - pluginModule = getOwn(defined, prefix); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - if (pluginModule && pluginModule.normalize) { - //Plugin is loaded, use its normalize method. - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName, applyMap); - }); - } else { - normalizedName = normalize(name, parentName, applyMap); - } - } else { - //A regular module. - normalizedName = normalize(name, parentName, applyMap); - - //Normalized name may be a plugin ID due to map config - //application in normalize. The map config values must - //already be normalized, so do not need to redo that part. - nameParts = splitPrefix(normalizedName); - prefix = nameParts[0]; - normalizedName = nameParts[1]; - isNormalized = true; - - url = context.nameToUrl(normalizedName); - } - } - - //If the id is a plugin id that cannot be determined if it needs - //normalization, stamp it with a unique ID so two matching relative - //ids that may conflict can be separate. - suffix = prefix && !pluginModule && !isNormalized ? - '_unnormalized' + (unnormalizedCounter += 1) : - ''; - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - unnormalized: !!suffix, - url: url, - originalName: originalName, - isDefine: isDefine, - id: (prefix ? - prefix + '!' + normalizedName : - normalizedName) + suffix - }; - } - - function getModule(depMap) { - var id = depMap.id, - mod = getOwn(registry, id); - - if (!mod) { - mod = registry[id] = new context.Module(depMap); - } - - return mod; - } - - function on(depMap, name, fn) { - var id = depMap.id, - mod = getOwn(registry, id); - - if (hasProp(defined, id) && - (!mod || mod.defineEmitComplete)) { - if (name === 'defined') { - fn(defined[id]); - } - } else { - mod = getModule(depMap); - if (mod.error && name === 'error') { - fn(mod.error); - } else { - mod.on(name, fn); - } - } - } - - function onError(err, errback) { - var ids = err.requireModules, - notified = false; - - if (errback) { - errback(err); - } else { - each(ids, function (id) { - var mod = getOwn(registry, id); - if (mod) { - //Set error on module, so it skips timeout checks. - mod.error = err; - if (mod.events.error) { - notified = true; - mod.emit('error', err); - } - } - }); - - if (!notified) { - req.onError(err); - } - } - } - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - function takeGlobalQueue() { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(defQueue, - [defQueue.length, 0].concat(globalDefQueue)); - globalDefQueue = []; - } - } - - handlers = { - 'require': function (mod) { - if (mod.require) { - return mod.require; - } else { - return (mod.require = context.makeRequire(mod.map)); - } - }, - 'exports': function (mod) { - mod.usingExports = true; - if (mod.map.isDefine) { - if (mod.exports) { - return (defined[mod.map.id] = mod.exports); - } else { - return (mod.exports = defined[mod.map.id] = {}); - } - } - }, - 'module': function (mod) { - if (mod.module) { - return mod.module; - } else { - return (mod.module = { - id: mod.map.id, - uri: mod.map.url, - config: function () { - return getOwn(config.config, mod.map.id) || {}; - }, - exports: mod.exports || (mod.exports = {}) - }); - } - } - }; - - function cleanRegistry(id) { - //Clean up machinery used for waiting modules. - delete registry[id]; - delete enabledRegistry[id]; - } - - function breakCycle(mod, traced, processed) { - var id = mod.map.id; - - if (mod.error) { - mod.emit('error', mod.error); - } else { - traced[id] = true; - each(mod.depMaps, function (depMap, i) { - var depId = depMap.id, - dep = getOwn(registry, depId); - - //Only force things that have not completed - //being defined, so still in the registry, - //and only if it has not been matched up - //in the module already. - if (dep && !mod.depMatched[i] && !processed[depId]) { - if (getOwn(traced, depId)) { - mod.defineDep(i, defined[depId]); - mod.check(); //pass false? - } else { - breakCycle(dep, traced, processed); - } - } - }); - processed[id] = true; - } - } - - function checkLoaded() { - var err, usingPathFallback, - waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = [], - reqCalls = [], - stillLoading = false, - needCycleCheck = true; - - //Do not bother if this call was a result of a cycle break. - if (inCheckLoaded) { - return; - } - - inCheckLoaded = true; - - //Figure out the state of all the modules. - eachProp(enabledRegistry, function (mod) { - var map = mod.map, - modId = map.id; - - //Skip things that are not enabled or in error state. - if (!mod.enabled) { - return; - } - - if (!map.isDefine) { - reqCalls.push(mod); - } - - if (!mod.error) { - //If the module should be executed, and it has not - //been inited and time is up, remember it. - if (!mod.inited && expired) { - if (hasPathFallback(modId)) { - usingPathFallback = true; - stillLoading = true; - } else { - noLoads.push(modId); - removeScript(modId); - } - } else if (!mod.inited && mod.fetched && map.isDefine) { - stillLoading = true; - if (!map.prefix) { - //No reason to keep looking for unfinished - //loading. If the only stillLoading is a - //plugin resource though, keep going, - //because it may be that a plugin resource - //is waiting on a non-plugin cycle. - return (needCycleCheck = false); - } - } - } - }); - - if (expired && noLoads.length) { - //If wait time expired, throw error of unloaded modules. - err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); - err.contextName = context.contextName; - return onError(err); - } - - //Not expired, check for a cycle. - if (needCycleCheck) { - each(reqCalls, function (mod) { - breakCycle(mod, {}, {}); - }); - } - - //If still waiting on loads, and the waiting load is something - //other than a plugin resource, or there are still outstanding - //scripts, then just try back later. - if ((!expired || usingPathFallback) && stillLoading) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - } - - inCheckLoaded = false; - } - - Module = function (map) { - this.events = getOwn(undefEvents, map.id) || {}; - this.map = map; - this.shim = getOwn(config.shim, map.id); - this.depExports = []; - this.depMaps = []; - this.depMatched = []; - this.pluginMaps = {}; - this.depCount = 0; - - /* this.exports this.factory - this.depMaps = [], - this.enabled, this.fetched - */ - }; - - Module.prototype = { - init: function (depMaps, factory, errback, options) { - options = options || {}; - - //Do not do more inits if already done. Can happen if there - //are multiple define calls for the same module. That is not - //a normal, common case, but it is also not unexpected. - if (this.inited) { - return; - } - - this.factory = factory; - - if (errback) { - //Register for errors on this module. - this.on('error', errback); - } else if (this.events.error) { - //If no errback already, but there are error listeners - //on this module, set up an errback to pass to the deps. - errback = bind(this, function (err) { - this.emit('error', err); - }); - } - - //Do a copy of the dependency array, so that - //source inputs are not modified. For example - //"shim" deps are passed in here directly, and - //doing a direct modification of the depMaps array - //would affect that config. - this.depMaps = depMaps && depMaps.slice(0); - - this.errback = errback; - - //Indicate this module has be initialized - this.inited = true; - - this.ignore = options.ignore; - - //Could have option to init this module in enabled mode, - //or could have been previously marked as enabled. However, - //the dependencies are not known until init is called. So - //if enabled previously, now trigger dependencies as enabled. - if (options.enabled || this.enabled) { - //Enable this module and dependencies. - //Will call this.check() - this.enable(); - } else { - this.check(); - } - }, - - defineDep: function (i, depExports) { - //Because of cycles, defined callback for a given - //export can be called more than once. - if (!this.depMatched[i]) { - this.depMatched[i] = true; - this.depCount -= 1; - this.depExports[i] = depExports; - } - }, - - fetch: function () { - if (this.fetched) { - return; - } - this.fetched = true; - - context.startTime = (new Date()).getTime(); - - var map = this.map; - - //If the manager is for a plugin managed resource, - //ask the plugin to load it now. - if (this.shim) { - context.makeRequire(this.map, { - enableBuildCallback: true - })(this.shim.deps || [], bind(this, function () { - return map.prefix ? this.callPlugin() : this.load(); - })); - } else { - //Regular dependency. - return map.prefix ? this.callPlugin() : this.load(); - } - }, - - load: function () { - var url = this.map.url; - - //Regular dependency. - if (!urlFetched[url]) { - urlFetched[url] = true; - context.load(this.map.id, url); - } - }, - - /** - * Checks if the module is ready to define itself, and if so, - * define it. - */ - check: function () { - if (!this.enabled || this.enabling) { - return; - } - - var err, cjsModule, - id = this.map.id, - depExports = this.depExports, - exports = this.exports, - factory = this.factory; - - if (!this.inited) { - this.fetch(); - } else if (this.error) { - this.emit('error', this.error); - } else if (!this.defining) { - //The factory could trigger another require call - //that would result in checking this module to - //define itself again. If already in the process - //of doing that, skip this work. - this.defining = true; - - if (this.depCount < 1 && !this.defined) { - if (isFunction(factory)) { - //If there is an error listener, favor passing - //to that instead of throwing an error. However, - //only do it for define()'d modules. require - //errbacks should not be called for failures in - //their callbacks (#699). However if a global - //onError is set, use that. - if ((this.events.error && this.map.isDefine) || - req.onError !== defaultOnError) { - try { - exports = context.execCb(id, factory, depExports, exports); - } catch (e) { - err = e; - } - } else { - exports = context.execCb(id, factory, depExports, exports); - } - - // Favor return value over exports. If node/cjs in play, - // then will not have a return value anyway. Favor - // module.exports assignment over exports object. - if (this.map.isDefine && exports === undefined) { - cjsModule = this.module; - if (cjsModule) { - exports = cjsModule.exports; - } else if (this.usingExports) { - //exports already set the defined value. - exports = this.exports; - } - } - - if (err) { - err.requireMap = this.map; - err.requireModules = this.map.isDefine ? [this.map.id] : null; - err.requireType = this.map.isDefine ? 'define' : 'require'; - return onError((this.error = err)); - } - - } else { - //Just a literal value - exports = factory; - } - - this.exports = exports; - - if (this.map.isDefine && !this.ignore) { - defined[id] = exports; - - if (req.onResourceLoad) { - req.onResourceLoad(context, this.map, this.depMaps); - } - } - - //Clean up - cleanRegistry(id); - - this.defined = true; - } - - //Finished the define stage. Allow calling check again - //to allow define notifications below in the case of a - //cycle. - this.defining = false; - - if (this.defined && !this.defineEmitted) { - this.defineEmitted = true; - this.emit('defined', this.exports); - this.defineEmitComplete = true; - } - - } - }, - - callPlugin: function () { - var map = this.map, - id = map.id, - //Map already normalized the prefix. - pluginMap = makeModuleMap(map.prefix); - - //Mark this as a dependency for this plugin, so it - //can be traced for cycles. - this.depMaps.push(pluginMap); - - on(pluginMap, 'defined', bind(this, function (plugin) { - var load, normalizedMap, normalizedMod, - bundleId = getOwn(bundlesMap, this.map.id), - name = this.map.name, - parentName = this.map.parentMap ? this.map.parentMap.name : null, - localRequire = context.makeRequire(map.parentMap, { - enableBuildCallback: true - }); - - //If current map is not normalized, wait for that - //normalized name to load instead of continuing. - if (this.map.unnormalized) { - //Normalize the ID if the plugin allows it. - if (plugin.normalize) { - name = plugin.normalize(name, function (name) { - return normalize(name, parentName, true); - }) || ''; - } - - //prefix and name should already be normalized, no need - //for applying map config again either. - normalizedMap = makeModuleMap(map.prefix + '!' + name, - this.map.parentMap); - on(normalizedMap, - 'defined', bind(this, function (value) { - this.init([], function () { return value; }, null, { - enabled: true, - ignore: true - }); - })); - - normalizedMod = getOwn(registry, normalizedMap.id); - if (normalizedMod) { - //Mark this as a dependency for this plugin, so it - //can be traced for cycles. - this.depMaps.push(normalizedMap); - - if (this.events.error) { - normalizedMod.on('error', bind(this, function (err) { - this.emit('error', err); - })); - } - normalizedMod.enable(); - } - - return; - } - - //If a paths config, then just load that file instead to - //resolve the plugin, as it is built into that paths layer. - if (bundleId) { - this.map.url = context.nameToUrl(bundleId); - this.load(); - return; - } - - load = bind(this, function (value) { - this.init([], function () { return value; }, null, { - enabled: true - }); - }); - - load.error = bind(this, function (err) { - this.inited = true; - this.error = err; - err.requireModules = [id]; - - //Remove temp unnormalized modules for this module, - //since they will never be resolved otherwise now. - eachProp(registry, function (mod) { - if (mod.map.id.indexOf(id + '_unnormalized') === 0) { - cleanRegistry(mod.map.id); - } - }); - - onError(err); - }); - - //Allow plugins to load other code without having to know the - //context or how to 'complete' the load. - load.fromText = bind(this, function (text, textAlt) { - /*jslint evil: true */ - var moduleName = map.name, - moduleMap = makeModuleMap(moduleName), - hasInteractive = useInteractive; - - //As of 2.1.0, support just passing the text, to reinforce - //fromText only being called once per resource. Still - //support old style of passing moduleName but discard - //that moduleName in favor of the internal ref. - if (textAlt) { - text = textAlt; - } - - //Turn off interactive script matching for IE for any define - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - //Prime the system by creating a module instance for - //it. - getModule(moduleMap); - - //Transfer any config to this other module. - if (hasProp(config.config, id)) { - config.config[moduleName] = config.config[id]; - } - - try { - req.exec(text); - } catch (e) { - return onError(makeError('fromtexteval', - 'fromText eval for ' + id + - ' failed: ' + e, - e, - [id])); - } - - if (hasInteractive) { - useInteractive = true; - } - - //Mark this as a dependency for the plugin - //resource - this.depMaps.push(moduleMap); - - //Support anonymous modules. - context.completeLoad(moduleName); - - //Bind the value of that module to the value for this - //resource ID. - localRequire([moduleName], load); - }); - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugin.load(map.name, localRequire, load, config); - })); - - context.enable(pluginMap, this); - this.pluginMaps[pluginMap.id] = pluginMap; - }, - - enable: function () { - enabledRegistry[this.map.id] = this; - this.enabled = true; - - //Set flag mentioning that the module is enabling, - //so that immediate calls to the defined callbacks - //for dependencies do not trigger inadvertent load - //with the depCount still being zero. - this.enabling = true; - - //Enable each dependency - each(this.depMaps, bind(this, function (depMap, i) { - var id, mod, handler; - - if (typeof depMap === 'string') { - //Dependency needs to be converted to a depMap - //and wired up to this module. - depMap = makeModuleMap(depMap, - (this.map.isDefine ? this.map : this.map.parentMap), - false, - !this.skipMap); - this.depMaps[i] = depMap; - - handler = getOwn(handlers, depMap.id); - - if (handler) { - this.depExports[i] = handler(this); - return; - } - - this.depCount += 1; - - on(depMap, 'defined', bind(this, function (depExports) { - this.defineDep(i, depExports); - this.check(); - })); - - if (this.errback) { - on(depMap, 'error', bind(this, this.errback)); - } - } - - id = depMap.id; - mod = registry[id]; - - //Skip special modules like 'require', 'exports', 'module' - //Also, don't call enable if it is already enabled, - //important in circular dependency cases. - if (!hasProp(handlers, id) && mod && !mod.enabled) { - context.enable(depMap, this); - } - })); - - //Enable each plugin that is used in - //a dependency - eachProp(this.pluginMaps, bind(this, function (pluginMap) { - var mod = getOwn(registry, pluginMap.id); - if (mod && !mod.enabled) { - context.enable(pluginMap, this); - } - })); - - this.enabling = false; - - this.check(); - }, - - on: function (name, cb) { - var cbs = this.events[name]; - if (!cbs) { - cbs = this.events[name] = []; - } - cbs.push(cb); - }, - - emit: function (name, evt) { - each(this.events[name], function (cb) { - cb(evt); - }); - if (name === 'error') { - //Now that the error handler was triggered, remove - //the listeners, since this broken Module instance - //can stay around for a while in the registry. - delete this.events[name]; - } - } - }; - - function callGetModule(args) { - //Skip modules already defined. - if (!hasProp(defined, args[0])) { - getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); - } - } - - function removeListener(node, func, name, ieName) { - //Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - if (ieName) { - node.detachEvent(ieName, func); - } - } else { - node.removeEventListener(name, func, false); - } - } - - /** - * Given an event from a script node, get the requirejs info from it, - * and then removes the event listeners on the node. - * @param {Event} evt - * @returns {Object} - */ - function getScriptData(evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement; - - //Remove the listeners once here. - removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); - removeListener(node, context.onScriptError, 'error'); - - return { - node: node, - id: node && node.getAttribute('data-requiremodule') - }; - } - - function intakeDefines() { - var args; - - //Any defined modules in the global queue, intake them now. - takeGlobalQueue(); - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); - } else { - //args are id, deps, factory. Should be normalized by the - //define() function. - callGetModule(args); - } - } - } - - context = { - config: config, - contextName: contextName, - registry: registry, - defined: defined, - urlFetched: urlFetched, - defQueue: defQueue, - Module: Module, - makeModuleMap: makeModuleMap, - nextTick: req.nextTick, - onError: onError, - - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { - cfg.baseUrl += '/'; - } - } - - //Save off the paths since they require special processing, - //they are additive. - var shim = config.shim, - objs = { - paths: true, - bundles: true, - config: true, - map: true - }; - - eachProp(cfg, function (value, prop) { - if (objs[prop]) { - if (!config[prop]) { - config[prop] = {}; - } - mixin(config[prop], value, true, true); - } else { - config[prop] = value; - } - }); - - //Reverse map the bundles - if (cfg.bundles) { - eachProp(cfg.bundles, function (value, prop) { - each(value, function (v) { - if (v !== prop) { - bundlesMap[v] = prop; - } - }); - }); - } - - //Merge shim - if (cfg.shim) { - eachProp(cfg.shim, function (value, id) { - //Normalize the structure - if (isArray(value)) { - value = { - deps: value - }; - } - if ((value.exports || value.init) && !value.exportsFn) { - value.exportsFn = context.makeShimExports(value); - } - shim[id] = value; - }); - config.shim = shim; - } - - //Adjust packages if necessary. - if (cfg.packages) { - each(cfg.packages, function (pkgObj) { - var location, name; - - pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; - - name = pkgObj.name; - location = pkgObj.location; - if (location) { - config.paths[name] = pkgObj.location; - } - - //Save pointer to main module ID for pkg name. - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main') - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, ''); - }); - } - - //If there are any "waiting to execute" modules in the registry, - //update the maps for them, since their info, like URLs to load, - //may have changed. - eachProp(registry, function (mod, id) { - //If module already has init called, since it is too - //late to modify them, and ignore unnormalized ones - //since they are transient. - if (!mod.inited && !mod.map.unnormalized) { - mod.map = makeModuleMap(id); - } - }); - - //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. - if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); - } - }, - - makeShimExports: function (value) { - function fn() { - var ret; - if (value.init) { - ret = value.init.apply(global, arguments); - } - return ret || (value.exports && getGlobal(value.exports)); - } - return fn; - }, - - makeRequire: function (relMap, options) { - options = options || {}; - - function localRequire(deps, callback, errback) { - var id, map, requireMod; - - if (options.enableBuildCallback && callback && isFunction(callback)) { - callback.__requireJsBuild = true; - } - - if (typeof deps === 'string') { - if (isFunction(callback)) { - //Invalid call - return onError(makeError('requireargs', 'Invalid require call'), errback); - } - - //If require|exports|module are requested, get the - //value for them from the special handlers. Caveat: - //this only works while module is being defined. - if (relMap && hasProp(handlers, deps)) { - return handlers[deps](registry[relMap.id]); - } - - //Synchronous access to one module. If require.get is - //available (as in the Node adapter), prefer that. - if (req.get) { - return req.get(context, deps, relMap, localRequire); - } - - //Normalize module name, if it contains . or .. - map = makeModuleMap(deps, relMap, false, true); - id = map.id; - - if (!hasProp(defined, id)) { - return onError(makeError('notloaded', 'Module name "' + - id + - '" has not been loaded yet for context: ' + - contextName + - (relMap ? '' : '. Use require([])'))); - } - return defined[id]; - } - - //Grab defines waiting in the global queue. - intakeDefines(); - - //Mark all the dependencies as needing to be loaded. - context.nextTick(function () { - //Some defines could have been added since the - //require call, collect them. - intakeDefines(); - - requireMod = getModule(makeModuleMap(null, relMap)); - - //Store if map config should be applied to this require - //call for dependencies. - requireMod.skipMap = options.skipMap; - - requireMod.init(deps, callback, errback, { - enabled: true - }); - - checkLoaded(); - }); - - return localRequire; - } - - mixin(localRequire, { - isBrowser: isBrowser, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt) { - var ext, - index = moduleNamePlusExt.lastIndexOf('.'), - segment = moduleNamePlusExt.split('/')[0], - isRelative = segment === '.' || segment === '..'; - - //Have a file extension alias, and it is not the - //dots from a relative path. - if (index !== -1 && (!isRelative || index > 1)) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(normalize(moduleNamePlusExt, - relMap && relMap.id, true), ext, true); - }, - - defined: function (id) { - return hasProp(defined, makeModuleMap(id, relMap, false, true).id); - }, - - specified: function (id) { - id = makeModuleMap(id, relMap, false, true).id; - return hasProp(defined, id) || hasProp(registry, id); - } - }); - - //Only allow undef on top level require calls - if (!relMap) { - localRequire.undef = function (id) { - //Bind any waiting define() calls to this context, - //fix for #408 - takeGlobalQueue(); - - var map = makeModuleMap(id, relMap, true), - mod = getOwn(registry, id); - - removeScript(id); - - delete defined[id]; - delete urlFetched[map.url]; - delete undefEvents[id]; - - //Clean queued defines too. Go backwards - //in array so that the splices do not - //mess up the iteration. - eachReverse(defQueue, function(args, i) { - if(args[0] === id) { - defQueue.splice(i, 1); - } - }); - - if (mod) { - //Hold on to listeners in case the - //module will be attempted to be reloaded - //using a different config. - if (mod.events.defined) { - undefEvents[id] = mod.events; - } - - cleanRegistry(id); - } - }; - } - - return localRequire; - }, - - /** - * Called to enable a module if it is still in the registry - * awaiting enablement. A second arg, parent, the parent module, - * is passed in for context, when this method is overridden by - * the optimizer. Not shown here to keep code compact. - */ - enable: function (depMap) { - var mod = getOwn(registry, depMap.id); - if (mod) { - getModule(depMap).enable(); - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var found, args, mod, - shim = getOwn(config.shim, moduleName) || {}, - shExports = shim.exports; - - takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - args[0] = moduleName; - //If already found an anonymous module and bound it - //to this name, then this is some other anon module - //waiting for its completeLoad to fire. - if (found) { - break; - } - found = true; - } else if (args[0] === moduleName) { - //Found matching define call for this script! - found = true; - } - - callGetModule(args); - } - - //Do this after the cycle of callGetModule in case the result - //of those calls/init calls changes the registry. - mod = getOwn(registry, moduleName); - - if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { - if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { - if (hasPathFallback(moduleName)) { - return; - } else { - return onError(makeError('nodefine', - 'No define call for ' + moduleName, - null, - [moduleName])); - } - } else { - //A script that does not call define(), so just simulate - //the call for it. - callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); - } - } - - checkLoaded(); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - * Note that it **does not** call normalize on the moduleName, - * it is assumed to have already been normalized. This is an - * internal API, not a public one. Use toUrl for the public API. - */ - nameToUrl: function (moduleName, ext, skipExt) { - var paths, syms, i, parentModule, url, - parentPath, bundleId, - pkgMain = getOwn(config.pkgs, moduleName); - - if (pkgMain) { - moduleName = pkgMain; - } - - bundleId = getOwn(bundlesMap, moduleName); - - if (bundleId) { - return context.nameToUrl(bundleId, ext, skipExt); - } - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) - //or ends with .js, then assume the user meant to use an url and not a module id. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext || ''); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - - syms = moduleName.split('/'); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i -= 1) { - parentModule = syms.slice(0, i).join('/'); - - parentPath = getOwn(paths, parentModule); - if (parentPath) { - //If an array, it means there are a few choices, - //Choose the one that is desired - if (isArray(parentPath)) { - parentPath = parentPath[0]; - } - syms.splice(0, i, parentPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join('/'); - url += (ext || (/^data\:|\?/.test(url) || skipExt ? '' : '.js')); - url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; - } - - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; - }, - - //Delegates to req.load. Broken out as a separate function to - //allow overriding in the optimizer. - load: function (id, url) { - req.load(context, id, url); - }, - - /** - * Executes a module callback function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - execCb: function (name, callback, args, exports) { - return callback.apply(exports, args); - }, - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - */ - onScriptLoad: function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - if (evt.type === 'load' || - (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - var data = getScriptData(evt); - context.completeLoad(data.id); - } - }, - - /** - * Callback for script errors. - */ - onScriptError: function (evt) { - var data = getScriptData(evt); - if (!hasPathFallback(data.id)) { - return onError(makeError('scripterror', 'Script error for: ' + data.id, evt, [data.id])); - } - } - }; - - context.require = context.makeRequire(); - return context; - } - - /** - * Main entry point. - * - * If the only argument to require is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = requirejs = function (deps, callback, errback, optional) { - - //Find the right context, use default - var context, config, - contextName = defContextName; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== 'string') { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = errback; - errback = optional; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = getOwn(contexts, contextName); - if (!context) { - context = contexts[contextName] = req.s.newContext(contextName); - } - - if (config) { - context.configure(config); - } - - return context.require(deps, callback, errback); - }; - - /** - * Support require.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Execute something after the current tick - * of the event loop. Override for other envs - * that have a better solution than setTimeout. - * @param {Function} fn function to execute later. - */ - req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { - setTimeout(fn, 4); - } : function (fn) { fn(); }; - - /** - * Export require as a global, but only if it does not already exist. - */ - if (!require) { - require = req; - } - - req.version = version; - - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - req.isBrowser = isBrowser; - s = req.s = { - contexts: contexts, - newContext: newContext - }; - - //Create default context. - req({}); - - //Exports some context-sensitive methods on global require. - each([ - 'toUrl', - 'undef', - 'defined', - 'specified' - ], function (prop) { - //Reference from contexts instead of early binding to default context, - //so that during builds, the latest instance of the default context - //with its config gets used. - req[prop] = function () { - var ctx = contexts[defContextName]; - return ctx.require[prop].apply(ctx, arguments); - }; - }); - - if (isBrowser) { - head = s.head = document.getElementsByTagName('head')[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName('base')[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that require explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = defaultOnError; - - /** - * Creates the node for the load command. Only used in browser envs. - */ - req.createNode = function (config, moduleName, url) { - var node = config.xhtml ? - document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : - document.createElement('script'); - node.type = config.scriptType || 'text/javascript'; - node.charset = 'utf-8'; - node.async = true; - return node; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the require context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var config = (context && context.config) || {}, - node; - if (isBrowser) { - //In the browser so use a script tag - node = req.createNode(config, moduleName, url); - - node.setAttribute('data-requirecontext', context.contextName); - node.setAttribute('data-requiremodule', moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && - //Check if node.attachEvent is artificially added by custom script or - //natively supported by browser - //read https://github.com/jrburke/requirejs/issues/187 - //if we can NOT find [native code] then it must NOT natively supported. - //in IE8, node.attachEvent does not have toString() - //Note the test for "[native code" with no closing brace, see: - //https://github.com/jrburke/requirejs/issues/273 - !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && - !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. - //However, IE reports the script as being in 'interactive' - //readyState at the time of the define call. - useInteractive = true; - - node.attachEvent('onreadystatechange', context.onScriptLoad); - //It would be great to add an error handler here to catch - //404s in IE9+. However, onreadystatechange will fire before - //the error handler, so that does not help. If addEventListener - //is used, then IE will fire error before load, but we cannot - //use that pathway given the connect.microsoft.com issue - //mentioned above about not doing the 'script execute, - //then fire the script load event listener before execute - //next script' that other browsers do. - //Best hope: IE10 fixes the issues, - //and then destroys all installs of IE 6-9. - //node.attachEvent('onerror', context.onScriptError); - } else { - node.addEventListener('load', context.onScriptLoad, false); - node.addEventListener('error', context.onScriptError, false); - } - node.src = url; - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - - return node; - } else if (isWebWorker) { - try { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } catch (e) { - context.onError(makeError('importscripts', - 'importScripts failed for ' + - moduleName + ' at ' + url, - e, - [moduleName])); - } - } - }; - - function getInteractiveScript() { - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - eachReverse(scripts(), function (script) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - }); - return interactiveScript; - } - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser && !cfg.skipDataMain) { - //Figure out baseUrl. Get it from the script tag with require.js in it. - eachReverse(scripts(), function (script) { - //Set the 'head' where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - dataMain = script.getAttribute('data-main'); - if (dataMain) { - //Preserve dataMain in case it is a path (i.e. contains '?') - mainScript = dataMain; - - //Set final baseUrl if there is not already an explicit one. - if (!cfg.baseUrl) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = mainScript.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - cfg.baseUrl = subPath; - } - - //Strip off any trailing .js since mainScript is now - //like a module name. - mainScript = mainScript.replace(jsSuffixRegExp, ''); - - //If mainScript is still a path, fall back to dataMain - if (req.jsExtRegExp.test(mainScript)) { - mainScript = dataMain; - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; - - return true; - } - }); - } - - /** - * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's - * name. - */ - define = function (name, deps, callback) { - var node, context; - - //Allow for anonymous modules - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!isArray(deps)) { - callback = deps; - deps = null; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!deps && isFunction(callback)) { - deps = []; - //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, '') - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without require calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous define() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute('data-requiremodule'); - } - context = contexts[node.getAttribute('data-requirecontext')]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); - }; - - define.amd = { - jQuery: true - }; - - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a better, environment-specific call. Only used for transpiling - * loader plugins, not for plain JS modules. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - /*jslint evil: true */ - return eval(text); - }; - - //Set up with config info. - req(cfg); -}(this)); diff --git a/node_modules/seedrandom/test/newapi.html b/node_modules/seedrandom/test/newapi.html deleted file mode 100644 index c32237d..0000000 --- a/node_modules/seedrandom/test/newapi.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - -
      -
      - - - - - diff --git a/node_modules/seedrandom/test/nodetest.js b/node_modules/seedrandom/test/nodetest.js deleted file mode 100644 index 8f0898c..0000000 --- a/node_modules/seedrandom/test/nodetest.js +++ /dev/null @@ -1,220 +0,0 @@ -var assert = require("assert"); -var seedrandom = require("../seedrandom"); -var requirejs = require("requirejs"); -requirejs.config({ - baseUrl: __dirname -}); - -describe("Nodejs API Test", function() { - -it('should pass basic tests.', function() { - var original = Math.random, - result, r, xprng, obj, as2, as3, autoseed1, myrng, - firstprng, secondprng, thirdprng; - - result = Math.seedrandom('hello.'); - firstprng = Math.random; - assert(original !== firstprng, "Should change Math.random."); - assert.equal(result, "hello.", "Should return short seed."); - r = Math.random(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - r = Math.random(); - assert.equal(r, 0.3752569768646784, "Should be 'hello.'#2"); - - // should be able to autoseed - result = Math.seedrandom(); - secondprng = Math.random; - assert(original !== secondprng, "Should change Math.random."); - assert(firstprng !== secondprng, "Should change Math.random."); - assert.equal(result.length, 256, "Should return short seed."); - r = Math.random(); - assert(r > 0, "Should be posititive."); - assert(r < 1, "Should be less than 1."); - assert(r != 0.9282578795792454, "Should not be 'hello.'#1"); - assert(r != 0.3752569768646784, "Should not be 'hello.'#2"); - assert(r != 0.7316977468919549, "Should not be 'hello.'#3"); - autoseed1 = r; - - // should be able to add entropy. - result = Math.seedrandom('added entropy.', { entropy:true }); - assert.equal(result.length, 256, "Should return short seed."); - thirdprng = Math.random; - assert(thirdprng !== secondprng, "Should change Math.random."); - r = Math.random(); - assert(r != 0.597067214994467, "Should not be 'added entropy.'#1"); - - // Reset to original Math.random. - Math.random = original; - // should be able to use new Math.seedrandom('hello.') - myrng = new Math.seedrandom('hello.'); - assert(original === Math.random, "Should not change Math.random."); - assert(original !== myrng, "PRNG should not be Math.random."); - r = myrng(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - - // should be able to use seedrandom('hello.')" - rng = seedrandom('hello.'); - assert.equal(typeof(rng), 'function', "Should return a function."); - r = rng(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - assert(original === Math.random, "Should not change Math.random."); - assert(original !== rng, "PRNG should not be Math.random."); - - // Global PRNG: set Math.random. - // should be able to use seedrandom('hello.', { global: true }) - result = seedrandom('hello.', { global: true }); - assert.equal(result, 'hello.', "Should return short seed."); - assert(original != Math.random, "Should change Math.random."); - r = Math.random(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - - // Autoseeded non-global - Math.random = original; - // should be able to use seedrandom() - result = seedrandom(); - assert.equal(typeof(result), 'function', "Should return function."); - assert(original === Math.random, "Should not change Math.random."); - r = result(); - // got " + r); - assert(r != autoseed1, "Should not repeat previous autoseed."); - assert(r != 0.9282578795792454, "Should not be 'hello.'#1"); - assert(r != 0.7316977468919549, "Should not be 'hello.'#3"); - - // Mixing accumulated entropy. - // should be able to use seedrandom('added entropy.', { entropy: true }) - rng = seedrandom('added entropy.', { entropy: true }); - r = result(); - // got " + r); - assert(r != autoseed1, "Should not repeat previous autoseed."); - assert(r != 0.597067214994467, "Should not be 'added entropy.'#1"); - - // Legacy calling convention for mixing accumulated entropy. - // should be able to use seedrandom('added entropy.', true) - rng = seedrandom('added entropy.', true); - r = result(); - // got " + r); - assert(r != autoseed1, "Should not repeat previous autoseed."); - assert(r != 0.597067214994467, "Should not be 'added entropy.'#1"); - - // The pass option - // should be able to use Math.seedrandom(null, { pass: ... - obj = Math.seedrandom(null, { pass: function(prng, seed) { - return { random: prng, seed: seed }; - }}); - assert(original === Math.random, "Should not change Math.random."); - assert(original !== obj.random, "Should be different from Math.random."); - assert.equal(typeof(obj.random), 'function', "Should return a PRNG function."); - assert.equal(typeof(obj.seed), 'string', "Should return a seed."); - as2 = obj.random(); - assert(as2 != 0.9282578795792454, "Should not be 'hello.'#1"); - rng = seedrandom(obj.seed); - as3 = rng(); - assert.equal(as2, as3, "Should be reproducible when using the seed."); - - // Exercise pass again, with explicit seed and global - // should be able to use Math.seedrandom('hello.', { pass: ... - result = Math.seedrandom('hello.', { - global: 'abc', - pass: function(prng, seed, global) { - assert.equal(typeof(prng), 'function', "Callback arg #1 assert"); - assert.equal(seed, 'hello.', "Callback arg #2 assert"); - assert.equal(global, 'abc', "Callback arg #3 passed through."); - assert.equal(prng(), 0.9282578795792454, "Should be 'hello.'#1"); - return 'def'; - }}); - assert.equal(result, 'def', "Should return value from callback."); - assert(original === Math.random, "Should not change Math.random."); - - // Legacy third argument callback argument: - // should be able to use Math.seedrandom('hello.', { global: 50 }, callback) - result = Math.seedrandom('hello.', { global: 50 }, - function(prng, seed, global) { - assert.equal(typeof(prng), 'function', "Callback arg #1 assert"); - assert.equal(seed, 'hello.', "Callback arg #2 assert"); - assert.equal(global, 50, "Callback arg #3 assert"); - assert.equal(prng(), 0.9282578795792454, "Should be 'hello.'#1"); - return 'zzz'; - }); - assert.equal(result, 'zzz', "Should return value from callback."); - assert(original === Math.random, "Should not change Math.random."); - - // Global: false. - // should be able to use new Math.seedrandom('hello.', {global: false}) - myrng = new Math.seedrandom('hello.', {global:false}); - assert.equal(typeof(myrng), 'function', "Should return a PRNG funciton."); - assert(original === Math.random, "Should not change Math.random."); - assert(original !== myrng, "PRNG should not be Math.random."); - r = myrng(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - - // options = {} when a method of Math. - // should be able to use Math.seedrandom('hello.', {}) - result = Math.seedrandom('hello.'); - xprng = Math.random; - assert(original !== xprng, "Should change Math.random."); - assert.equal(result, "hello.", "Should return short seed."); - r = Math.random(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - r = Math.random(); - assert.equal(r, 0.3752569768646784, "Should be 'hello.'#2"); - Math.random = original; - - // options = {} when not a method of Math - // should be able to use seedrandom('hello.', {}) - rng = seedrandom('hello.', {}); - assert.equal(typeof(rng), 'function', "Should return a function."); - r = rng(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - assert(original === Math.random, "Should not change Math.random."); - assert(original !== rng, "PRNG should not be Math.random."); -}); - -it('should support state api.', function() { - // Verify that there is no state method - var dummy = seedrandom('hello'); - var unexpected = -1; - var expected = -1; - try { - unexpected = dummy.state(); - } catch(e) { - expected = 1; - } - assert.equal(unexpected, -1); - assert.equal(expected, 1); - var count = 0; - for (var x in dummy) { - if (x == 'state') count += 1; - } - assert.equal(count, 0); - - // Verify that a state method can be added - var saveable = seedrandom("secret-seed", {state: true}); - var ordinary = seedrandom("secret-seed"); - for (var j = 0; j < 1e2; ++j) { - assert.equal(ordinary(), saveable()); - } - var virgin = seedrandom("secret-seed"); - var saved = saveable.state(); - var replica = seedrandom("", {state: saved}); - for (var j = 0; j < 1e2; ++j) { - var r = replica(); - assert.equal(r, saveable()); - assert.equal(r, ordinary()); - assert(r != virgin()); - } -}); - -it('should support requirejs in node.', function() { - var original = Math.random; - var rsr = requirejs('../seedrandom'); - var rng = rsr('hello.'); - assert.equal(typeof(rng), 'function', "Should return a function."); - var r = rng(); - assert.equal(r, 0.9282578795792454, "Should be 'hello.'#1"); - assert(original === Math.random, "Should not change Math.random."); - assert(original !== rng, "PRNG should not be Math.random."); -}); - -// End of test. - -}); diff --git a/node_modules/seedrandom/test/options.html b/node_modules/seedrandom/test/options.html deleted file mode 100644 index 38967df..0000000 --- a/node_modules/seedrandom/test/options.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - -
      -
      - - - - - diff --git a/node_modules/seedrandom/test/out/dieharder-report.txt b/node_modules/seedrandom/test/out/dieharder-report.txt deleted file mode 100644 index 9e94668..0000000 --- a/node_modules/seedrandom/test/out/dieharder-report.txt +++ /dev/null @@ -1,125 +0,0 @@ -#=============================================================================# -# dieharder version 3.31.1 Copyright 2003 Robert G. Brown # -#=============================================================================# - rng_name |rands/second| Seed | -stdin_input_raw| 8.07e+05 | 254212981| -#=============================================================================# - test_name |ntup| tsamples |psamples| p-value |Assessment -#=============================================================================# - diehard_birthdays| 0| 100| 100|0.55960061| PASSED - diehard_operm5| 0| 1000000| 100|0.10062010| PASSED - diehard_rank_32x32| 0| 40000| 100|0.70957907| PASSED - diehard_rank_6x8| 0| 100000| 100|0.55953143| PASSED - diehard_bitstream| 0| 2097152| 100|0.22843857| PASSED - diehard_opso| 0| 2097152| 100|0.72251086| PASSED - diehard_oqso| 0| 2097152| 100|0.30642074| PASSED - diehard_dna| 0| 2097152| 100|0.30448899| PASSED -diehard_count_1s_str| 0| 256000| 100|0.23557064| PASSED -diehard_count_1s_byt| 0| 256000| 100|0.71300874| PASSED - diehard_parking_lot| 0| 12000| 100|0.88217430| PASSED - diehard_2dsphere| 2| 8000| 100|0.32366362| PASSED - diehard_3dsphere| 3| 4000| 100|0.30804215| PASSED - diehard_squeeze| 0| 100000| 100|0.97856588| PASSED - diehard_sums| 0| 100| 100|0.01512286| PASSED - diehard_runs| 0| 100000| 100|0.39065054| PASSED - diehard_runs| 0| 100000| 100|0.10369088| PASSED - diehard_craps| 0| 200000| 100|0.57875078| PASSED - diehard_craps| 0| 200000| 100|0.96945165| PASSED - marsaglia_tsang_gcd| 0| 10000000| 100|0.58793715| PASSED - marsaglia_tsang_gcd| 0| 10000000| 100|0.59724594| PASSED - sts_monobit| 1| 100000| 100|0.49155110| PASSED - sts_runs| 2| 100000| 100|0.01880740| PASSED - sts_serial| 1| 100000| 100|0.79060354| PASSED - sts_serial| 2| 100000| 100|0.91055644| PASSED - sts_serial| 3| 100000| 100|0.15984346| PASSED - sts_serial| 3| 100000| 100|0.04426690| PASSED - sts_serial| 4| 100000| 100|0.31589675| PASSED - sts_serial| 4| 100000| 100|0.65789943| PASSED - sts_serial| 5| 100000| 100|0.84228003| PASSED - sts_serial| 5| 100000| 100|0.28748169| PASSED - sts_serial| 6| 100000| 100|0.00092985| WEAK - sts_serial| 6| 100000| 100|0.06074248| PASSED - sts_serial| 7| 100000| 100|0.54740122| PASSED - sts_serial| 7| 100000| 100|0.30286638| PASSED - sts_serial| 8| 100000| 100|0.56593073| PASSED - sts_serial| 8| 100000| 100|0.48256390| PASSED - sts_serial| 9| 100000| 100|0.70850963| PASSED - sts_serial| 9| 100000| 100|0.63732762| PASSED - sts_serial| 10| 100000| 100|0.70209276| PASSED - sts_serial| 10| 100000| 100|0.99576606| WEAK - sts_serial| 11| 100000| 100|0.96272563| PASSED - sts_serial| 11| 100000| 100|0.76682898| PASSED - sts_serial| 12| 100000| 100|0.51522677| PASSED - sts_serial| 12| 100000| 100|0.49381681| PASSED - sts_serial| 13| 100000| 100|0.24260261| PASSED - sts_serial| 13| 100000| 100|0.41953338| PASSED - sts_serial| 14| 100000| 100|0.34770045| PASSED - sts_serial| 14| 100000| 100|0.16117277| PASSED - sts_serial| 15| 100000| 100|0.27319992| PASSED - sts_serial| 15| 100000| 100|0.61170864| PASSED - sts_serial| 16| 100000| 100|0.90638742| PASSED - sts_serial| 16| 100000| 100|0.60186602| PASSED - rgb_bitdist| 1| 100000| 100|0.72630216| PASSED - rgb_bitdist| 2| 100000| 100|0.61396597| PASSED - rgb_bitdist| 3| 100000| 100|0.40711729| PASSED - rgb_bitdist| 4| 100000| 100|0.94730365| PASSED - rgb_bitdist| 5| 100000| 100|0.95781972| PASSED - rgb_bitdist| 6| 100000| 100|0.15054771| PASSED - rgb_bitdist| 7| 100000| 100|0.25022202| PASSED - rgb_bitdist| 8| 100000| 100|0.66027754| PASSED - rgb_bitdist| 9| 100000| 100|0.86566842| PASSED - rgb_bitdist| 10| 100000| 100|0.55219204| PASSED - rgb_bitdist| 11| 100000| 100|0.73446935| PASSED - rgb_bitdist| 12| 100000| 100|0.99761332| WEAK -rgb_minimum_distance| 2| 10000| 1000|0.42222311| PASSED -rgb_minimum_distance| 3| 10000| 1000|0.81566417| PASSED -rgb_minimum_distance| 4| 10000| 1000|0.84024874| PASSED -rgb_minimum_distance| 5| 10000| 1000|0.37732026| PASSED - rgb_permutations| 2| 100000| 100|0.10996142| PASSED - rgb_permutations| 3| 100000| 100|0.64682554| PASSED - rgb_permutations| 4| 100000| 100|0.75843859| PASSED - rgb_permutations| 5| 100000| 100|0.95248930| PASSED - rgb_lagged_sum| 0| 1000000| 100|0.57812648| PASSED - rgb_lagged_sum| 1| 1000000| 100|0.67863162| PASSED - rgb_lagged_sum| 2| 1000000| 100|0.70003210| PASSED - rgb_lagged_sum| 3| 1000000| 100|0.50312943| PASSED - rgb_lagged_sum| 4| 1000000| 100|0.80009739| PASSED - rgb_lagged_sum| 5| 1000000| 100|0.66383600| PASSED - rgb_lagged_sum| 6| 1000000| 100|0.65640392| PASSED - rgb_lagged_sum| 7| 1000000| 100|0.10710511| PASSED - rgb_lagged_sum| 8| 1000000| 100|0.70414014| PASSED - rgb_lagged_sum| 9| 1000000| 100|0.63857571| PASSED - rgb_lagged_sum| 10| 1000000| 100|0.25221229| PASSED - rgb_lagged_sum| 11| 1000000| 100|0.04199433| PASSED - rgb_lagged_sum| 12| 1000000| 100|0.82738115| PASSED - rgb_lagged_sum| 13| 1000000| 100|0.28316509| PASSED - rgb_lagged_sum| 14| 1000000| 100|0.21184422| PASSED - rgb_lagged_sum| 15| 1000000| 100|0.35537687| PASSED - rgb_lagged_sum| 16| 1000000| 100|0.40157319| PASSED - rgb_lagged_sum| 17| 1000000| 100|0.98108259| PASSED - rgb_lagged_sum| 18| 1000000| 100|0.65892868| PASSED - rgb_lagged_sum| 19| 1000000| 100|0.61659671| PASSED - rgb_lagged_sum| 20| 1000000| 100|0.21462018| PASSED - rgb_lagged_sum| 21| 1000000| 100|0.94489214| PASSED - rgb_lagged_sum| 22| 1000000| 100|0.76019491| PASSED - rgb_lagged_sum| 23| 1000000| 100|0.21024028| PASSED - rgb_lagged_sum| 24| 1000000| 100|0.25249456| PASSED - rgb_lagged_sum| 25| 1000000| 100|0.87385459| PASSED - rgb_lagged_sum| 26| 1000000| 100|0.81553540| PASSED - rgb_lagged_sum| 27| 1000000| 100|0.94450657| PASSED - rgb_lagged_sum| 28| 1000000| 100|0.82470366| PASSED - rgb_lagged_sum| 29| 1000000| 100|0.93993722| PASSED - rgb_lagged_sum| 30| 1000000| 100|0.52675692| PASSED - rgb_lagged_sum| 31| 1000000| 100|0.59975558| PASSED - rgb_lagged_sum| 32| 1000000| 100|0.27951088| PASSED - rgb_kstest_test| 0| 10000| 1000|0.49707175| PASSED - dab_bytedistrib| 0| 51200000| 1|0.73019918| PASSED - dab_dct| 256| 50000| 1|0.33856081| PASSED -Preparing to run test 207. ntuple = 0 - dab_filltree| 32| 15000000| 1|0.92953640| PASSED - dab_filltree| 32| 15000000| 1|0.10970674| PASSED -Preparing to run test 208. ntuple = 0 - dab_filltree2| 0| 5000000| 1|0.88411850| PASSED - dab_filltree2| 1| 5000000| 1|0.56835378| PASSED -Preparing to run test 209. ntuple = 0 - dab_monobit2| 12| 65000000| 1|0.07987839| PASSED diff --git a/node_modules/seedrandom/test/prngtest.js b/node_modules/seedrandom/test/prngtest.js deleted file mode 100644 index c5ae03a..0000000 --- a/node_modules/seedrandom/test/prngtest.js +++ /dev/null @@ -1,122 +0,0 @@ -// A simple smoke test and benchmark for the generators. - -var assert = require('assert'); -var xor128 = require('../lib/xor128'); -var xorwow = require('../lib/xorwow'); -var xs7 = require('../lib/xorshift7'); -var xor4096 = require('../lib/xor4096'); -var tychei = require('../lib/tychei'); -var alea = require('../lib/alea'); -var sr = require('../seedrandom'); - -describe("XOR-Shift generator test", function() { - -var benchmarks = { native: { rand: Math.random, times: [] } }; - -function test(label, alg, double1, float3, int4, hc, qc, ec, e2c) { - var fn = alg(1); - var fn2 = alg('hello.', { state: true }); - benchmarks[label] = {rand: fn.quick, times: []}; - it("should use " + label + " correctly", function() { - if (double1 != null) assert.equal(fn.double(), double1); - if (float3 != null) assert.equal(fn.quick(), float3); - if (int4 != null) assert.equal(fn.int32(), int4); - assert(fn() > 0); - assert(fn() < 1); - assert(fn2() > 0); - // Internal state is visible only if requested. - assert(!('state' in fn)); - assert('state' in fn2); - var ss = fn2.state(); - var rs = fn2(); - assert(rs < 1); - var j, h = 0, q = 0, e = 0, r, p, e2 = 0; - for (j = 0; j < 1024; ++j) { - r = fn(); - if (r < 0.5) h += 1; - if (r < 0.25) q += 1; - if (r < 0.125) e += 1; - r2 = fn2(); - if (r2 < 0.125) e2 += 1; - } - if (hc != null) { - assert.equal(h, hc); - assert.equal(q, qc); - assert.equal(e, ec); - assert.equal(e2, e2c); - h = q = e = p = 0; - for (j = 0; j < 1024; ++j) { - r = fn.double(); - if (r < 0.5) h += 1; - if (r < 0.25) q += 1; - if (r < 0.125) e += 1; - if (fn.int32() >= 0) p += 1; - } - // Sanity-check double() and int32. - assert(h >= 480 && h <= 543, h); - assert(q >= 226 && q <= 286, q); - assert(e >= 100 && e <= 156, e); - assert(e2 >= 100 && e2 <= 156, e2); - assert(p >= 482 && p <= 543, p); - } - var fn3 = alg(0, { state: ss }); - assert.equal(fn3(), rs); - }); -} - -test("xor128", xor128, - 0.7963797148975774, 0.22171171731315553, 317177041, 498, 236, 110, 115); -test("xorwow", xorwow, - 0.8178000247146859, 0.8407576507888734, 533150816, 519, 228, 121, 123); -test("xorshift7", xs7, - 0.21241471533241418, 0.9957620368804783, -1678071207, 510, 261, 143, 124); -test("tychei", tychei, - 0.42331440041340196, 0.9365617581643164, -884984569, 521, 242, 116, 126); -test("seedrandom", sr, - 0.1776348083296759, 0.2160690303426236, 1397712774, 526, 282, 131, 137); -test("xor4096", xor4096, - 0.1520436450538547, 0.4206166828516871, 1312695376, 496, 241, 113, 142); -test("alea", alea, - 0.5260470956849501, 0.47771977609954774, -1625913352, 494, 246, 125, 122); - -it("runs benchmarks", function() { - var n = 4; - var trials = 10; - var top = 4; - this.timeout(200 * n * trials); - this.slow(30 * n * trials); - var fn, k, start, end, j, t; - for (k in benchmarks) { - fn = benchmarks[k].rand; - // warmup. - for (j = 0; j < 1e5; ++j) fn(); - } - for (t = 0; t < trials; ++t) { - for (k in benchmarks) { - fn = benchmarks[k].rand; - start = +new Date; - // benchmark. - for (j = 0; j < n * 1e5; ++j) fn(); - end = +new Date; - benchmarks[k].times.push(end - start); - } - } - for (k in benchmarks) { - benchmarks[k].times.sort(); - } - function fastest(array) { - var sum = 0; - for (var j = 0; j < top; ++j) { - sum += array[j]; - } - return sum / top; - } - var nativetime = fastest(benchmarks.native.times); - for (k in benchmarks) { - var time = fastest(benchmarks[k].times); - console.log(k+ ': ' + time / n + ' nanoseconds per call, ' + - (time / nativetime).toFixed(1) + 'x native random.'); - } -}); - -}); diff --git a/node_modules/seedrandom/test/require.html b/node_modules/seedrandom/test/require.html deleted file mode 100644 index cf76f70..0000000 --- a/node_modules/seedrandom/test/require.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - -
      -
      - - - - diff --git a/node_modules/seedrandom/test/run_dieharder.sh b/node_modules/seedrandom/test/run_dieharder.sh deleted file mode 100755 index 89fb5e1..0000000 --- a/node_modules/seedrandom/test/run_dieharder.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -# http://www.phy.duke.edu/~rgb/General/dieharder.php -# How to run dieharder against seedrandom: - -node bitgen.js | dieharder -g 200 -a | tee out/dieharder-report.txt diff --git a/node_modules/seedrandom/test/state.html b/node_modules/seedrandom/test/state.html deleted file mode 100644 index f7b9f65..0000000 --- a/node_modules/seedrandom/test/state.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - -
      -
      - - - - - diff --git a/node_modules/semaphore/.npmignore b/node_modules/semaphore/.npmignore deleted file mode 100644 index 7dccd97..0000000 --- a/node_modules/semaphore/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz - -pids -logs -results - -node_modules -npm-debug.log \ No newline at end of file diff --git a/node_modules/semaphore/.travis.yml b/node_modules/semaphore/.travis.yml deleted file mode 100644 index 00d6ca5..0000000 --- a/node_modules/semaphore/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: node_js -node_js: - - "0.12" - - "0.10" - - "0.8" - - "iojs" - - "iojs-v1.0.4" - - "iojs-v2" - - "iojs-v3" -sudo: false diff --git a/node_modules/semaphore/README.md b/node_modules/semaphore/README.md deleted file mode 100644 index 351b873..0000000 --- a/node_modules/semaphore/README.md +++ /dev/null @@ -1,68 +0,0 @@ -semaphore.js -============ - -[![Build Status](https://travis-ci.org/abrkn/semaphore.js.svg?branch=master)](https://travis-ci.org/abrkn/semaphore.js) - -Install: -npm install semaphore - -Limit simultaneous access to a resource. - -```javascript -// Create -var sem = require('semaphore')(capacity); - -// Take -sem.take(fn[, n=1]) -sem.take(n, fn) - -// Leave -sem.leave([n]) -``` - - -```javascript -// Limit concurrent db access -var sem = require('semaphore')(1); -var server = require('http').createServer(req, res) { - sem.take(function() { - expensive_database_operation(function(err, res) { - sem.leave(); - - if (err) return res.end("Error"); - - return res.end(res); - }); - }); -}); -``` - -```javascript -// 2 clients at a time -var sem = require('semaphore')(2); -var server = require('http').createServer(req, res) { - res.write("Then good day, madam!"); - - sem.take(function() { - res.end("We hope to see you soon for tea."); - sem.leave(); - }); -}); -``` - -```javascript -// Rate limit -var sem = require('semaphore')(10); -var server = require('http').createServer(req, res) { - sem.take(function() { - res.end("."); - - setTimeout(sem.leave, 500) - }); -}); -``` - -License -=== - -MIT diff --git a/node_modules/semaphore/bower.json b/node_modules/semaphore/bower.json deleted file mode 100644 index af193c0..0000000 --- a/node_modules/semaphore/bower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "semaphore.js", - "version": "1.0.3", - "homepage": "https://github.com/abrkn/semaphore.js", - "authors": [ - "Andreas Brekken " - ], - "description": "Limit simultaneous access to a resource.", - "main": "lib/semaphore.js", - "moduleType": [ - "globals", - "node" - ], - "keywords": [ - "semaphore", - "concurrency" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/node_modules/semaphore/lib/semaphore.js b/node_modules/semaphore/lib/semaphore.js deleted file mode 100644 index 0fe3134..0000000 --- a/node_modules/semaphore/lib/semaphore.js +++ /dev/null @@ -1,95 +0,0 @@ -;(function(global) { - -'use strict'; - -function semaphore(capacity) { - var semaphore = { - capacity: capacity || 1, - current: 0, - queue: [], - firstHere: false, - - take: function() { - if (semaphore.firstHere === false) { - semaphore.current++; - semaphore.firstHere = true; - var isFirst = 1; - } else { - var isFirst = 0; - } - var item = { n: 1 }; - - if (typeof arguments[0] == 'function') { - item.task = arguments[0]; - } else { - item.n = arguments[0]; - } - - if (arguments.length >= 2) { - if (typeof arguments[1] == 'function') item.task = arguments[1]; - else item.n = arguments[1]; - } - - var task = item.task; - item.task = function() { task(semaphore.leave); }; - - if (semaphore.current + item.n - isFirst > semaphore.capacity) { - if (isFirst === 1) { - semaphore.current--; - semaphore.firstHere = false; - } - return semaphore.queue.push(item); - } - - semaphore.current += item.n - isFirst; - item.task(semaphore.leave); - if (isFirst === 1) semaphore.firstHere = false; - }, - - leave: function(n) { - n = n || 1; - - semaphore.current -= n; - - if (!semaphore.queue.length) { - if (semaphore.current < 0) { - throw new Error('leave called too many times.'); - } - - return; - } - - var item = semaphore.queue[0]; - - if (item.n + semaphore.current > semaphore.capacity) { - return; - } - - semaphore.queue.shift(); - semaphore.current += item.n; - - if (typeof process != 'undefined' && process && typeof process.nextTick == 'function') { - // node.js and the like - process.nextTick(item.task); - } else { - setTimeout(item.task,0); - } - } - }; - - return semaphore; -}; - -if (typeof exports === 'object') { - // node export - module.exports = semaphore; -} else if (typeof define === 'function' && define.amd) { - // amd export - define(function () { - return semaphore; - }); -} else { - // browser global - global.semaphore = semaphore; -} -}(this)); diff --git a/node_modules/semaphore/npm-shrinkwrap.json b/node_modules/semaphore/npm-shrinkwrap.json deleted file mode 100644 index d14744a..0000000 --- a/node_modules/semaphore/npm-shrinkwrap.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "semaphore", - "version": "1.0.5", - "dependencies": {} -} diff --git a/node_modules/semaphore/package.json b/node_modules/semaphore/package.json deleted file mode 100644 index ad8ea56..0000000 --- a/node_modules/semaphore/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_args": [ - [ - "semaphore@>=1.0.1", - "/Users/jbaylina/git/MVP/node_modules/merkle-patricia-tree" - ] - ], - "_from": "semaphore@>=1.0.1", - "_id": "semaphore@1.0.5", - "_inCache": true, - "_installable": true, - "_location": "/semaphore", - "_nodeVersion": "6.0.0-pre", - "_npmOperationalInternal": { - "host": "packages-9-west.internal.npmjs.com", - "tmp": "tmp/semaphore-1.0.5.tgz_1456608578363_0.32074872963130474" - }, - "_npmUser": { - "email": "sqrt@entless.org", - "name": "sqrt" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "semaphore", - "raw": "semaphore@>=1.0.1", - "rawSpec": ">=1.0.1", - "scope": null, - "spec": ">=1.0.1", - "type": "range" - }, - "_requiredBy": [ - "/merkle-patricia-tree", - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.0.5.tgz", - "_shasum": "b492576e66af193db95d65e25ec53f5f19798d60", - "_shrinkwrap": { - "dependencies": {}, - "name": "semaphore", - "version": "1.0.5" - }, - "_spec": "semaphore@>=1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/merkle-patricia-tree", - "bugs": { - "url": "https://github.com/abrkn/semaphore.js/issues" - }, - "dependencies": {}, - "description": "semaphore for node", - "devDependencies": { - "mocha": "2.x.x", - "should": "8.x.x" - }, - "directories": {}, - "dist": { - "shasum": "b492576e66af193db95d65e25ec53f5f19798d60", - "tarball": "https://registry.npmjs.org/semaphore/-/semaphore-1.0.5.tgz" - }, - "engines": { - "node": ">=0.8.0" - }, - "gitHead": "4b7471c5efc348b3279621e58e0b47b55ac60040", - "homepage": "https://github.com/abrkn/semaphore.js", - "main": "./lib/semaphore.js", - "maintainers": [ - { - "email": "andreas@opuno.com", - "name": "abrkn" - }, - { - "email": "sqrt@entless.org", - "name": "sqrt" - } - ], - "name": "semaphore", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/abrkn/semaphore.js.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "1.0.5" -} diff --git a/node_modules/semaphore/test/semaphore.js b/node_modules/semaphore/test/semaphore.js deleted file mode 100644 index c3358b1..0000000 --- a/node_modules/semaphore/test/semaphore.js +++ /dev/null @@ -1,167 +0,0 @@ -var should = require('should'); -var assert = require('assert'); -var semaphore = require("../lib/semaphore.js"); -require('mocha'); - -var Phone = function() { - return { - state: "free", - - dial: function(callback) { - if (this.state != "free") { - return callback(new Error("The phone is busy")); - } - - this.state = "busy"; - - setTimeout(function() { - callback(); - }, 100); - }, - - hangup: function() { - if (this.state == "free") { - return callback(new Error("The phone is not in use")); - } - - this.state = "free"; - } - }; -}; - -it("should not be using a bad example", function(done) { - var phone = new Phone(); - - // Call Bob - phone.dial(function(err) { - if (err) return done(err); - - phone.hangup(); - }); - - // Cannot call Bret, because the phone is already busy with Bob. - phone.dial(function(err) { - should.exist(err); - done(); - }); -}); - -it("should not break the phone", function(done) { - var phone = new Phone(); - var sem = require('../lib/semaphore.js')(1); - - // Call Jane - sem.take(function() { - phone.dial(function(err) { - if (err) return done(err); - - phone.hangup(); - - sem.leave(); - }); - }); - - // Call Jon (will need to wait for call with Jane to complete) - sem.take(function() { - phone.dial(function(err) { - if (err) return done(err); - - phone.hangup(); - - sem.leave(); - - done(); - }); - }); -}); - -it('should not be slow', function(done) { - var s = require('../lib/semaphore.js')(3); - var values = []; - - s.take(function() { values.push(1); s.leave(); }); - s.take(function() { values.push(2); s.leave(); }); - s.take(function() { values.push(3); s.leave(); }); - s.take(function() { values.push(4); s.leave(); }); - s.take(function() { values.push(5); s.leave(); }); - - process.nextTick(function() { - values.length.should.equal(5); - done(); - }); -}); - -it('should not let past more than capacity', function(done) { - this.timeout(6000); - - var s = require('../lib/semaphore.js')(3); - var values = []; - var speed = 250; - - s.take(function() { values.push(1); setTimeout(function() { s.leave(); }, speed * 1); }); - s.take(function() { values.push(2); setTimeout(function() { s.leave(); }, speed * 2); }); - s.take(function(leave) { values.push(3); setTimeout(function() { leave(); }, speed * 3); }); - s.take(function() { values.push(4); }); - s.take(function() { values.push(5); }); - - var tickN = 0; - - var check = function() { - switch (tickN++) { - case 0: // After 0 sec - console.log("0 seconds passed.") - s.current.should.equal(s.capacity); - s.queue.length.should.equal(2); - values.should.eql([1, 2, 3]); - break; - case 1: // After 1 sec - console.log("1 seconds passed."); - s.current.should.equal(s.capacity); - s.queue.length.should.equal(1); - values.should.eql([1, 2, 3, 4]); - break; - case 2: // After 2 sec - console.log("2 seconds passed."); - s.current.should.equal(3); - s.queue.length.should.equal(0); - values.should.eql([1, 2, 3, 4, 5]); - break; - case 3: // After 3 sec - console.log("3 seconds passed."); - s.current.should.equal(2); - s.queue.length.should.equal(0); - values.should.eql([1, 2, 3, 4, 5]); - return done(); - } - - setTimeout(check, speed * 1.1); - }; - - check(); -}); - -describe("should respect number", function() { - it("should fail when taking more than the capacity allows", function(done) { - var s = semaphore(1); - - s.take(2, function() { - assert.fail(); - }); - - process.nextTick(done); - }); - - it("should work fine with correct input values", function(done) { - var s = semaphore(10); // 10 - - s.take(5, function(leave) { // 5 - s.take(4, function() { // 1 - leave(4); // 5 - - s.take(5, function() { - return done() - }); // 0 - }); - }); - }); -}); diff --git a/node_modules/semver/.npmignore b/node_modules/semver/.npmignore deleted file mode 100644 index 534108e..0000000 --- a/node_modules/semver/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -coverage/ -.nyc_output/ -nyc_output/ diff --git a/node_modules/semver/.travis.yml b/node_modules/semver/.travis.yml deleted file mode 100644 index 9c1a7b6..0000000 --- a/node_modules/semver/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -sudo: false -language: node_js -node_js: - - '0.10' - - '0.12' - - '4' - - '5' diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/semver/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md deleted file mode 100644 index ab6a155..0000000 --- a/node_modules/semver/README.md +++ /dev/null @@ -1,344 +0,0 @@ -semver(1) -- The semantic versioner for npm -=========================================== - -## Usage - - $ npm install semver - - semver.valid('1.2.3') // '1.2.3' - semver.valid('a.b.c') // null - semver.clean(' =v1.2.3 ') // '1.2.3' - semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true - semver.gt('1.2.3', '9.8.7') // false - semver.lt('1.2.3', '9.8.7') // true - -As a command-line utility: - - $ semver -h - - SemVer 5.1.0 - - A JavaScript implementation of the http://semver.org/ specification - Copyright Isaac Z. Schlueter - - Usage: semver [options] [ [...]] - Prints valid versions sorted by SemVer precedence - - Options: - -r --range - Print versions that match the specified range. - - -i --increment [] - Increment a version by the specified level. Level can - be one of: major, minor, patch, premajor, preminor, - prepatch, or prerelease. Default level is 'patch'. - Only one version may be specified. - - --preid - Identifier to be used to prefix premajor, preminor, - prepatch or prerelease version increments. - - -l --loose - Interpret versions and ranges loosely - - Program exits successfully if any valid version satisfies - all supplied ranges, and prints all satisfying versions. - - If no satisfying versions are found, then exits failure. - - Versions are printed in ascending order, so supplying - multiple versions to the utility will just sort them. - -## Versions - -A "version" is described by the `v2.0.0` specification found at -. - -A leading `"="` or `"v"` character is stripped off and ignored. - -## Ranges - -A `version range` is a set of `comparators` which specify versions -that satisfy the range. - -A `comparator` is composed of an `operator` and a `version`. The set -of primitive `operators` is: - -* `<` Less than -* `<=` Less than or equal to -* `>` Greater than -* `>=` Greater than or equal to -* `=` Equal. If no operator is specified, then equality is assumed, - so this operator is optional, but MAY be included. - -For example, the comparator `>=1.2.7` would match the versions -`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` -or `1.1.0`. - -Comparators can be joined by whitespace to form a `comparator set`, -which is satisfied by the **intersection** of all of the comparators -it includes. - -A range is composed of one or more comparator sets, joined by `||`. A -version matches a range if and only if every comparator in at least -one of the `||`-separated comparator sets is satisfied by the version. - -For example, the range `>=1.2.7 <1.3.0` would match the versions -`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, -or `1.1.0`. - -The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, -`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. - -### Prerelease Tags - -If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then -it will only be allowed to satisfy comparator sets if at least one -comparator with the same `[major, minor, patch]` tuple also has a -prerelease tag. - -For example, the range `>1.2.3-alpha.3` would be allowed to match the -version `1.2.3-alpha.7`, but it would *not* be satisfied by -`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater -than" `1.2.3-alpha.3` according to the SemVer sort rules. The version -range only accepts prerelease tags on the `1.2.3` version. The -version `3.4.5` *would* satisfy the range, because it does not have a -prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. - -The purpose for this behavior is twofold. First, prerelease versions -frequently are updated very quickly, and contain many breaking changes -that are (by the author's design) not yet fit for public consumption. -Therefore, by default, they are excluded from range matching -semantics. - -Second, a user who has opted into using a prerelease version has -clearly indicated the intent to use *that specific* set of -alpha/beta/rc versions. By including a prerelease tag in the range, -the user is indicating that they are aware of the risk. However, it -is still not appropriate to assume that they have opted into taking a -similar risk on the *next* set of prerelease versions. - -#### Prerelease Identifiers - -The method `.inc` takes an additional `identifier` string argument that -will append the value of the string as a prerelease identifier: - -```javascript -> semver.inc('1.2.3', 'prerelease', 'beta') -'1.2.4-beta.0' -``` - -command-line example: - -```shell -$ semver 1.2.3 -i prerelease --preid beta -1.2.4-beta.0 -``` - -Which then can be used to increment further: - -```shell -$ semver 1.2.4-beta.0 -i prerelease -1.2.4-beta.1 -``` - -### Advanced Range Syntax - -Advanced range syntax desugars to primitive comparators in -deterministic ways. - -Advanced ranges may be combined in the same way as primitive -comparators using white space or `||`. - -#### Hyphen Ranges `X.Y.Z - A.B.C` - -Specifies an inclusive set. - -* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` - -If a partial version is provided as the first version in the inclusive -range, then the missing pieces are replaced with zeroes. - -* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` - -If a partial version is provided as the second version in the -inclusive range, then all versions that start with the supplied parts -of the tuple are accepted, but nothing that would be greater than the -provided tuple parts. - -* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` -* `1.2.3 - 2` := `>=1.2.3 <3.0.0` - -#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` - -Any of `X`, `x`, or `*` may be used to "stand in" for one of the -numeric values in the `[major, minor, patch]` tuple. - -* `*` := `>=0.0.0` (Any version satisfies) -* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) -* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) - -A partial version range is treated as an X-Range, so the special -character is in fact optional. - -* `""` (empty string) := `*` := `>=0.0.0` -* `1` := `1.x.x` := `>=1.0.0 <2.0.0` -* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` - -#### Tilde Ranges `~1.2.3` `~1.2` `~1` - -Allows patch-level changes if a minor version is specified on the -comparator. Allows minor-level changes if not. - -* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` -* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) -* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) -* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` -* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) -* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) -* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in - the `1.2.3` version will be allowed, if they are greater than or - equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but - `1.2.4-beta.2` would not, because it is a prerelease of a - different `[major, minor, patch]` tuple. - -#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` - -Allows changes that do not modify the left-most non-zero digit in the -`[major, minor, patch]` tuple. In other words, this allows patch and -minor updates for versions `1.0.0` and above, patch updates for -versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. - -Many authors treat a `0.x` version as if the `x` were the major -"breaking-change" indicator. - -Caret ranges are ideal when an author may make breaking changes -between `0.2.4` and `0.3.0` releases, which is a common practice. -However, it presumes that there will *not* be breaking changes between -`0.2.4` and `0.2.5`. It allows for changes that are presumed to be -additive (but non-breaking), according to commonly observed practices. - -* `^1.2.3` := `>=1.2.3 <2.0.0` -* `^0.2.3` := `>=0.2.3 <0.3.0` -* `^0.0.3` := `>=0.0.3 <0.0.4` -* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in - the `1.2.3` version will be allowed, if they are greater than or - equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but - `1.2.4-beta.2` would not, because it is a prerelease of a - different `[major, minor, patch]` tuple. -* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the - `0.0.3` version *only* will be allowed, if they are greater than or - equal to `beta`. So, `0.0.3-pr.2` would be allowed. - -When parsing caret ranges, a missing `patch` value desugars to the -number `0`, but will allow flexibility within that value, even if the -major and minor versions are both `0`. - -* `^1.2.x` := `>=1.2.0 <2.0.0` -* `^0.0.x` := `>=0.0.0 <0.1.0` -* `^0.0` := `>=0.0.0 <0.1.0` - -A missing `minor` and `patch` values will desugar to zero, but also -allow flexibility within those values, even if the major version is -zero. - -* `^1.x` := `>=1.0.0 <2.0.0` -* `^0.x` := `>=0.0.0 <1.0.0` - -### Range Grammar - -Putting all this together, here is a Backus-Naur grammar for ranges, -for the benefit of parser authors: - -```bnf -range-set ::= range ( logical-or range ) * -logical-or ::= ( ' ' ) * '||' ( ' ' ) * -range ::= hyphen | simple ( ' ' simple ) * | '' -hyphen ::= partial ' - ' partial -simple ::= primitive | partial | tilde | caret -primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial -partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? -xr ::= 'x' | 'X' | '*' | nr -nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * -tilde ::= '~' partial -caret ::= '^' partial -qualifier ::= ( '-' pre )? ( '+' build )? -pre ::= parts -build ::= parts -parts ::= part ( '.' part ) * -part ::= nr | [-0-9A-Za-z]+ -``` - -## Functions - -All methods and classes take a final `loose` boolean argument that, if -true, will be more forgiving about not-quite-valid semver strings. -The resulting output will always be 100% strict, of course. - -Strict-mode Comparators and Ranges will be strict about the SemVer -strings that they parse. - -* `valid(v)`: Return the parsed version, or null if it's not valid. -* `inc(v, release)`: Return the version incremented by the release - type (`major`, `premajor`, `minor`, `preminor`, `patch`, - `prepatch`, or `prerelease`), or null if it's not valid - * `premajor` in one call will bump the version up to the next major - version and down to a prerelease of that major version. - `preminor`, and `prepatch` work the same way. - * If called from a non-prerelease version, the `prerelease` will work the - same as `prepatch`. It increments the patch version, then makes a - prerelease. If the input version is already a prerelease it simply - increments it. -* `major(v)`: Return the major version number. -* `minor(v)`: Return the minor version number. -* `patch(v)`: Return the patch version number. - -### Comparison - -* `gt(v1, v2)`: `v1 > v2` -* `gte(v1, v2)`: `v1 >= v2` -* `lt(v1, v2)`: `v1 < v2` -* `lte(v1, v2)`: `v1 <= v2` -* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, - even if they're not the exact same string. You already know how to - compare strings. -* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. -* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call - the corresponding function above. `"==="` and `"!=="` do simple - string comparison, but are included for completeness. Throws if an - invalid comparison string is provided. -* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if - `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. -* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions - in descending order when passed to `Array.sort()`. -* `diff(v1, v2)`: Returns difference between two versions by the release type - (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), - or null if the versions are the same. - - -### Ranges - -* `validRange(range)`: Return the valid range or null if it's not valid -* `satisfies(version, range)`: Return true if the version satisfies the - range. -* `maxSatisfying(versions, range)`: Return the highest version in the list - that satisfies the range, or `null` if none of them do. -* `gtr(version, range)`: Return `true` if version is greater than all the - versions possible in the range. -* `ltr(version, range)`: Return `true` if version is less than all the - versions possible in the range. -* `outside(version, range, hilo)`: Return true if the version is outside - the bounds of the range in either the high or low direction. The - `hilo` argument must be either the string `'>'` or `'<'`. (This is - the function called by `gtr` and `ltr`.) - -Note that, since ranges may be non-contiguous, a version might not be -greater than a range, less than a range, *or* satisfy a range! For -example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` -until `2.0.0`, so the version `1.2.10` would not be greater than the -range (because `2.0.1` satisfies, which is higher), nor less than the -range (since `1.2.8` satisfies, which is lower), and it also does not -satisfy the range. - -If you want to know if a version satisfies or does not satisfy a -range, use the `satisfies(version, range)` function. diff --git a/node_modules/semver/bin/semver b/node_modules/semver/bin/semver deleted file mode 100755 index c5f2e85..0000000 --- a/node_modules/semver/bin/semver +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env node -// Standalone semver comparison program. -// Exits successfully and prints matching version(s) if -// any supplied version is valid and passes all tests. - -var argv = process.argv.slice(2) - , versions = [] - , range = [] - , gt = [] - , lt = [] - , eq = [] - , inc = null - , version = require("../package.json").version - , loose = false - , identifier = undefined - , semver = require("../semver") - , reverse = false - -main() - -function main () { - if (!argv.length) return help() - while (argv.length) { - var a = argv.shift() - var i = a.indexOf('=') - if (i !== -1) { - a = a.slice(0, i) - argv.unshift(a.slice(i + 1)) - } - switch (a) { - case "-rv": case "-rev": case "--rev": case "--reverse": - reverse = true - break - case "-l": case "--loose": - loose = true - break - case "-v": case "--version": - versions.push(argv.shift()) - break - case "-i": case "--inc": case "--increment": - switch (argv[0]) { - case "major": case "minor": case "patch": case "prerelease": - case "premajor": case "preminor": case "prepatch": - inc = argv.shift() - break - default: - inc = "patch" - break - } - break - case "--preid": - identifier = argv.shift() - break - case "-r": case "--range": - range.push(argv.shift()) - break - case "-h": case "--help": case "-?": - return help() - default: - versions.push(a) - break - } - } - - versions = versions.filter(function (v) { - return semver.valid(v, loose) - }) - if (!versions.length) return fail() - if (inc && (versions.length !== 1 || range.length)) - return failInc() - - for (var i = 0, l = range.length; i < l ; i ++) { - versions = versions.filter(function (v) { - return semver.satisfies(v, range[i], loose) - }) - if (!versions.length) return fail() - } - return success(versions) -} - -function failInc () { - console.error("--inc can only be used on a single version with no range") - fail() -} - -function fail () { process.exit(1) } - -function success () { - var compare = reverse ? "rcompare" : "compare" - versions.sort(function (a, b) { - return semver[compare](a, b, loose) - }).map(function (v) { - return semver.clean(v, loose) - }).map(function (v) { - return inc ? semver.inc(v, inc, loose, identifier) : v - }).forEach(function (v,i,_) { console.log(v) }) -} - -function help () { - console.log(["SemVer " + version - ,"" - ,"A JavaScript implementation of the http://semver.org/ specification" - ,"Copyright Isaac Z. Schlueter" - ,"" - ,"Usage: semver [options] [ [...]]" - ,"Prints valid versions sorted by SemVer precedence" - ,"" - ,"Options:" - ,"-r --range " - ," Print versions that match the specified range." - ,"" - ,"-i --increment []" - ," Increment a version by the specified level. Level can" - ," be one of: major, minor, patch, premajor, preminor," - ," prepatch, or prerelease. Default level is 'patch'." - ," Only one version may be specified." - ,"" - ,"--preid " - ," Identifier to be used to prefix premajor, preminor," - ," prepatch or prerelease version increments." - ,"" - ,"-l --loose" - ," Interpret versions and ranges loosely" - ,"" - ,"Program exits successfully if any valid version satisfies" - ,"all supplied ranges, and prints all satisfying versions." - ,"" - ,"If no satisfying versions are found, then exits failure." - ,"" - ,"Versions are printed in ascending order, so supplying" - ,"multiple versions to the utility will just sort them." - ].join("\n")) -} diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json deleted file mode 100644 index 0d7b468..0000000 --- a/node_modules/semver/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "semver@~5.1.0", - "/Users/jbaylina/git/MVP/node_modules/levelup" - ] - ], - "_from": "semver@>=5.1.0 <5.2.0", - "_id": "semver@5.1.1", - "_inCache": true, - "_installable": true, - "_location": "/semver", - "_nodeVersion": "4.4.4", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/semver-5.1.1.tgz_1466704850953_0.017174890032038093" - }, - "_npmUser": { - "email": "i@izs.me", - "name": "isaacs" - }, - "_npmVersion": "3.10.2", - "_phantomChildren": {}, - "_requested": { - "name": "semver", - "raw": "semver@~5.1.0", - "rawSpec": "~5.1.0", - "scope": null, - "spec": ">=5.1.0 <5.2.0", - "type": "range" - }, - "_requiredBy": [ - "/levelup", - "/normalize-package-data" - ], - "_resolved": "https://registry.npmjs.org/semver/-/semver-5.1.1.tgz", - "_shasum": "a3292a373e6f3e0798da0b20641b9a9c5bc47e19", - "_shrinkwrap": null, - "_spec": "semver@~5.1.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/levelup", - "bin": { - "semver": "./bin/semver" - }, - "bugs": { - "url": "https://github.com/npm/node-semver/issues" - }, - "dependencies": {}, - "description": "The semantic version parser used by npm.", - "devDependencies": { - "tap": "^2.0.0" - }, - "directories": {}, - "dist": { - "shasum": "a3292a373e6f3e0798da0b20641b9a9c5bc47e19", - "tarball": "https://registry.npmjs.org/semver/-/semver-5.1.1.tgz" - }, - "gitHead": "ad1d3658a1b5749c38b9d21280c629f4fa2fee54", - "homepage": "https://github.com/npm/node-semver#readme", - "license": "ISC", - "main": "semver.js", - "maintainers": [ - { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - { - "email": "ogd@aoaioxxysz.net", - "name": "othiym23" - } - ], - "name": "semver", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/node-semver.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "5.1.1" -} diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf deleted file mode 100644 index 25ebd5c..0000000 --- a/node_modules/semver/range.bnf +++ /dev/null @@ -1,16 +0,0 @@ -range-set ::= range ( logical-or range ) * -logical-or ::= ( ' ' ) * '||' ( ' ' ) * -range ::= hyphen | simple ( ' ' simple ) * | '' -hyphen ::= partial ' - ' partial -simple ::= primitive | partial | tilde | caret -primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial -partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? -xr ::= 'x' | 'X' | '*' | nr -nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * -tilde ::= '~' partial -caret ::= '^' partial -qualifier ::= ( '-' pre )? ( '+' build )? -pre ::= parts -build ::= parts -parts ::= part ( '.' part ) * -part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js deleted file mode 100644 index d9d8713..0000000 --- a/node_modules/semver/semver.js +++ /dev/null @@ -1,1188 +0,0 @@ -exports = module.exports = SemVer; - -// The debug function is excluded entirely from the minified version. -/* nomin */ var debug; -/* nomin */ if (typeof process === 'object' && - /* nomin */ process.env && - /* nomin */ process.env.NODE_DEBUG && - /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG)) - /* nomin */ debug = function() { - /* nomin */ var args = Array.prototype.slice.call(arguments, 0); - /* nomin */ args.unshift('SEMVER'); - /* nomin */ console.log.apply(console, args); - /* nomin */ }; -/* nomin */ else - /* nomin */ debug = function() {}; - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -exports.SEMVER_SPEC_VERSION = '2.0.0'; - -var MAX_LENGTH = 256; -var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; - -// The actual regexps go on exports.re -var re = exports.re = []; -var src = exports.src = []; -var R = 0; - -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. - -var NUMERICIDENTIFIER = R++; -src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'; -var NUMERICIDENTIFIERLOOSE = R++; -src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'; - - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -var NONNUMERICIDENTIFIER = R++; -src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'; - - -// ## Main Version -// Three dot-separated numeric identifiers. - -var MAINVERSION = R++; -src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')'; - -var MAINVERSIONLOOSE = R++; -src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')'; - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -var PRERELEASEIDENTIFIER = R++; -src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + - '|' + src[NONNUMERICIDENTIFIER] + ')'; - -var PRERELEASEIDENTIFIERLOOSE = R++; -src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + - '|' + src[NONNUMERICIDENTIFIER] + ')'; - - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -var PRERELEASE = R++; -src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + - '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'; - -var PRERELEASELOOSE = R++; -src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'; - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -var BUILDIDENTIFIER = R++; -src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'; - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -var BUILD = R++; -src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + - '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'; - - -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. - -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. - -var FULL = R++; -var FULLPLAIN = 'v?' + src[MAINVERSION] + - src[PRERELEASE] + '?' + - src[BUILD] + '?'; - -src[FULL] = '^' + FULLPLAIN + '$'; - -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + - src[PRERELEASELOOSE] + '?' + - src[BUILD] + '?'; - -var LOOSE = R++; -src[LOOSE] = '^' + LOOSEPLAIN + '$'; - -var GTLT = R++; -src[GTLT] = '((?:<|>)?=?)'; - -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -var XRANGEIDENTIFIERLOOSE = R++; -src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'; -var XRANGEIDENTIFIER = R++; -src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'; - -var XRANGEPLAIN = R++; -src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:' + src[PRERELEASE] + ')?' + - src[BUILD] + '?' + - ')?)?'; - -var XRANGEPLAINLOOSE = R++; -src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:' + src[PRERELEASELOOSE] + ')?' + - src[BUILD] + '?' + - ')?)?'; - -var XRANGE = R++; -src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'; -var XRANGELOOSE = R++; -src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'; - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -var LONETILDE = R++; -src[LONETILDE] = '(?:~>?)'; - -var TILDETRIM = R++; -src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'; -re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g'); -var tildeTrimReplace = '$1~'; - -var TILDE = R++; -src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'; -var TILDELOOSE = R++; -src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'; - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -var LONECARET = R++; -src[LONECARET] = '(?:\\^)'; - -var CARETTRIM = R++; -src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'; -re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g'); -var caretTrimReplace = '$1^'; - -var CARET = R++; -src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'; -var CARETLOOSE = R++; -src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'; - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -var COMPARATORLOOSE = R++; -src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'; -var COMPARATOR = R++; -src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'; - - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -var COMPARATORTRIM = R++; -src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + - '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'; - -// this one has to use the /g flag -re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g'); -var comparatorTrimReplace = '$1$2$3'; - - -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -var HYPHENRANGE = R++; -src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAIN] + ')' + - '\\s*$'; - -var HYPHENRANGELOOSE = R++; -src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s*$'; - -// Star ranges basically just allow anything at all. -var STAR = R++; -src[STAR] = '(<|>)?=?\\s*\\*'; - -// Compile to actual regexp objects. -// All are flag-free, unless they were created above with a flag. -for (var i = 0; i < R; i++) { - debug(i, src[i]); - if (!re[i]) - re[i] = new RegExp(src[i]); -} - -exports.parse = parse; -function parse(version, loose) { - if (version instanceof SemVer) - return version; - - if (typeof version !== 'string') - return null; - - if (version.length > MAX_LENGTH) - return null; - - var r = loose ? re[LOOSE] : re[FULL]; - if (!r.test(version)) - return null; - - try { - return new SemVer(version, loose); - } catch (er) { - return null; - } -} - -exports.valid = valid; -function valid(version, loose) { - var v = parse(version, loose); - return v ? v.version : null; -} - - -exports.clean = clean; -function clean(version, loose) { - var s = parse(version.trim().replace(/^[=v]+/, ''), loose); - return s ? s.version : null; -} - -exports.SemVer = SemVer; - -function SemVer(version, loose) { - if (version instanceof SemVer) { - if (version.loose === loose) - return version; - else - version = version.version; - } else if (typeof version !== 'string') { - throw new TypeError('Invalid Version: ' + version); - } - - if (version.length > MAX_LENGTH) - throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') - - if (!(this instanceof SemVer)) - return new SemVer(version, loose); - - debug('SemVer', version, loose); - this.loose = loose; - var m = version.trim().match(loose ? re[LOOSE] : re[FULL]); - - if (!m) - throw new TypeError('Invalid Version: ' + version); - - this.raw = version; - - // these are actually numbers - this.major = +m[1]; - this.minor = +m[2]; - this.patch = +m[3]; - - if (this.major > MAX_SAFE_INTEGER || this.major < 0) - throw new TypeError('Invalid major version') - - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) - throw new TypeError('Invalid minor version') - - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) - throw new TypeError('Invalid patch version') - - // numberify any prerelease numeric ids - if (!m[4]) - this.prerelease = []; - else - this.prerelease = m[4].split('.').map(function(id) { - if (/^[0-9]+$/.test(id)) { - var num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) - return num - } - return id; - }); - - this.build = m[5] ? m[5].split('.') : []; - this.format(); -} - -SemVer.prototype.format = function() { - this.version = this.major + '.' + this.minor + '.' + this.patch; - if (this.prerelease.length) - this.version += '-' + this.prerelease.join('.'); - return this.version; -}; - -SemVer.prototype.toString = function() { - return this.version; -}; - -SemVer.prototype.compare = function(other) { - debug('SemVer.compare', this.version, this.loose, other); - if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); - - return this.compareMain(other) || this.comparePre(other); -}; - -SemVer.prototype.compareMain = function(other) { - if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); - - return compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch); -}; - -SemVer.prototype.comparePre = function(other) { - if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) - return -1; - else if (!this.prerelease.length && other.prerelease.length) - return 1; - else if (!this.prerelease.length && !other.prerelease.length) - return 0; - - var i = 0; - do { - var a = this.prerelease[i]; - var b = other.prerelease[i]; - debug('prerelease compare', i, a, b); - if (a === undefined && b === undefined) - return 0; - else if (b === undefined) - return 1; - else if (a === undefined) - return -1; - else if (a === b) - continue; - else - return compareIdentifiers(a, b); - } while (++i); -}; - -// preminor will bump the version up to the next minor release, and immediately -// down to pre-release. premajor and prepatch work the same way. -SemVer.prototype.inc = function(release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0; - this.patch = 0; - this.minor = 0; - this.major++; - this.inc('pre', identifier); - break; - case 'preminor': - this.prerelease.length = 0; - this.patch = 0; - this.minor++; - this.inc('pre', identifier); - break; - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0; - this.inc('patch', identifier); - this.inc('pre', identifier); - break; - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) - this.inc('patch', identifier); - this.inc('pre', identifier); - break; - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) - this.major++; - this.minor = 0; - this.patch = 0; - this.prerelease = []; - break; - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) - this.minor++; - this.patch = 0; - this.prerelease = []; - break; - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) - this.patch++; - this.prerelease = []; - break; - // This probably shouldn't be used publicly. - // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) - this.prerelease = [0]; - else { - var i = this.prerelease.length; - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++; - i = -2; - } - } - if (i === -1) // didn't increment anything - this.prerelease.push(0); - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) - this.prerelease = [identifier, 0]; - } else - this.prerelease = [identifier, 0]; - } - break; - - default: - throw new Error('invalid increment argument: ' + release); - } - this.format(); - this.raw = this.version; - return this; -}; - -exports.inc = inc; -function inc(version, release, loose, identifier) { - if (typeof(loose) === 'string') { - identifier = loose; - loose = undefined; - } - - try { - return new SemVer(version, loose).inc(release, identifier).version; - } catch (er) { - return null; - } -} - -exports.diff = diff; -function diff(version1, version2) { - if (eq(version1, version2)) { - return null; - } else { - var v1 = parse(version1); - var v2 = parse(version2); - if (v1.prerelease.length || v2.prerelease.length) { - for (var key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return 'pre'+key; - } - } - } - return 'prerelease'; - } - for (var key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return key; - } - } - } - } -} - -exports.compareIdentifiers = compareIdentifiers; - -var numeric = /^[0-9]+$/; -function compareIdentifiers(a, b) { - var anum = numeric.test(a); - var bnum = numeric.test(b); - - if (anum && bnum) { - a = +a; - b = +b; - } - - return (anum && !bnum) ? -1 : - (bnum && !anum) ? 1 : - a < b ? -1 : - a > b ? 1 : - 0; -} - -exports.rcompareIdentifiers = rcompareIdentifiers; -function rcompareIdentifiers(a, b) { - return compareIdentifiers(b, a); -} - -exports.major = major; -function major(a, loose) { - return new SemVer(a, loose).major; -} - -exports.minor = minor; -function minor(a, loose) { - return new SemVer(a, loose).minor; -} - -exports.patch = patch; -function patch(a, loose) { - return new SemVer(a, loose).patch; -} - -exports.compare = compare; -function compare(a, b, loose) { - return new SemVer(a, loose).compare(b); -} - -exports.compareLoose = compareLoose; -function compareLoose(a, b) { - return compare(a, b, true); -} - -exports.rcompare = rcompare; -function rcompare(a, b, loose) { - return compare(b, a, loose); -} - -exports.sort = sort; -function sort(list, loose) { - return list.sort(function(a, b) { - return exports.compare(a, b, loose); - }); -} - -exports.rsort = rsort; -function rsort(list, loose) { - return list.sort(function(a, b) { - return exports.rcompare(a, b, loose); - }); -} - -exports.gt = gt; -function gt(a, b, loose) { - return compare(a, b, loose) > 0; -} - -exports.lt = lt; -function lt(a, b, loose) { - return compare(a, b, loose) < 0; -} - -exports.eq = eq; -function eq(a, b, loose) { - return compare(a, b, loose) === 0; -} - -exports.neq = neq; -function neq(a, b, loose) { - return compare(a, b, loose) !== 0; -} - -exports.gte = gte; -function gte(a, b, loose) { - return compare(a, b, loose) >= 0; -} - -exports.lte = lte; -function lte(a, b, loose) { - return compare(a, b, loose) <= 0; -} - -exports.cmp = cmp; -function cmp(a, op, b, loose) { - var ret; - switch (op) { - case '===': - if (typeof a === 'object') a = a.version; - if (typeof b === 'object') b = b.version; - ret = a === b; - break; - case '!==': - if (typeof a === 'object') a = a.version; - if (typeof b === 'object') b = b.version; - ret = a !== b; - break; - case '': case '=': case '==': ret = eq(a, b, loose); break; - case '!=': ret = neq(a, b, loose); break; - case '>': ret = gt(a, b, loose); break; - case '>=': ret = gte(a, b, loose); break; - case '<': ret = lt(a, b, loose); break; - case '<=': ret = lte(a, b, loose); break; - default: throw new TypeError('Invalid operator: ' + op); - } - return ret; -} - -exports.Comparator = Comparator; -function Comparator(comp, loose) { - if (comp instanceof Comparator) { - if (comp.loose === loose) - return comp; - else - comp = comp.value; - } - - if (!(this instanceof Comparator)) - return new Comparator(comp, loose); - - debug('comparator', comp, loose); - this.loose = loose; - this.parse(comp); - - if (this.semver === ANY) - this.value = ''; - else - this.value = this.operator + this.semver.version; - - debug('comp', this); -} - -var ANY = {}; -Comparator.prototype.parse = function(comp) { - var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; - var m = comp.match(r); - - if (!m) - throw new TypeError('Invalid comparator: ' + comp); - - this.operator = m[1]; - if (this.operator === '=') - this.operator = ''; - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) - this.semver = ANY; - else - this.semver = new SemVer(m[2], this.loose); -}; - -Comparator.prototype.toString = function() { - return this.value; -}; - -Comparator.prototype.test = function(version) { - debug('Comparator.test', version, this.loose); - - if (this.semver === ANY) - return true; - - if (typeof version === 'string') - version = new SemVer(version, this.loose); - - return cmp(version, this.operator, this.semver, this.loose); -}; - - -exports.Range = Range; -function Range(range, loose) { - if ((range instanceof Range) && range.loose === loose) - return range; - - if (!(this instanceof Range)) - return new Range(range, loose); - - this.loose = loose; - - // First, split based on boolean or || - this.raw = range; - this.set = range.split(/\s*\|\|\s*/).map(function(range) { - return this.parseRange(range.trim()); - }, this).filter(function(c) { - // throw out any that are not relevant for whatever reason - return c.length; - }); - - if (!this.set.length) { - throw new TypeError('Invalid SemVer Range: ' + range); - } - - this.format(); -} - -Range.prototype.format = function() { - this.range = this.set.map(function(comps) { - return comps.join(' ').trim(); - }).join('||').trim(); - return this.range; -}; - -Range.prototype.toString = function() { - return this.range; -}; - -Range.prototype.parseRange = function(range) { - var loose = this.loose; - range = range.trim(); - debug('range', range, loose); - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; - range = range.replace(hr, hyphenReplace); - debug('hyphen replace', range); - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); - debug('comparator trim', range, re[COMPARATORTRIM]); - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[TILDETRIM], tildeTrimReplace); - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[CARETTRIM], caretTrimReplace); - - // normalize spaces - range = range.split(/\s+/).join(' '); - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; - var set = range.split(' ').map(function(comp) { - return parseComparator(comp, loose); - }).join(' ').split(/\s+/); - if (this.loose) { - // in loose mode, throw out any that are not valid comparators - set = set.filter(function(comp) { - return !!comp.match(compRe); - }); - } - set = set.map(function(comp) { - return new Comparator(comp, loose); - }); - - return set; -}; - -// Mostly just for testing and legacy API reasons -exports.toComparators = toComparators; -function toComparators(range, loose) { - return new Range(range, loose).set.map(function(comp) { - return comp.map(function(c) { - return c.value; - }).join(' ').trim().split(' '); - }); -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -function parseComparator(comp, loose) { - debug('comp', comp); - comp = replaceCarets(comp, loose); - debug('caret', comp); - comp = replaceTildes(comp, loose); - debug('tildes', comp); - comp = replaceXRanges(comp, loose); - debug('xrange', comp); - comp = replaceStars(comp, loose); - debug('stars', comp); - return comp; -} - -function isX(id) { - return !id || id.toLowerCase() === 'x' || id === '*'; -} - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceTildes(comp, loose) { - return comp.trim().split(/\s+/).map(function(comp) { - return replaceTilde(comp, loose); - }).join(' '); -} - -function replaceTilde(comp, loose) { - var r = loose ? re[TILDELOOSE] : re[TILDE]; - return comp.replace(r, function(_, M, m, p, pr) { - debug('tilde', comp, _, M, m, p, pr); - var ret; - - if (isX(M)) - ret = ''; - else if (isX(m)) - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - else if (isX(p)) - // ~1.2 == >=1.2.0 <1.3.0 - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - else if (pr) { - debug('replaceTilde pr', pr); - if (pr.charAt(0) !== '-') - pr = '-' + pr; - ret = '>=' + M + '.' + m + '.' + p + pr + - ' <' + M + '.' + (+m + 1) + '.0'; - } else - // ~1.2.3 == >=1.2.3 <1.3.0 - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0'; - - debug('tilde return', ret); - return ret; - }); -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 -// ^1.2.3 --> >=1.2.3 <2.0.0 -// ^1.2.0 --> >=1.2.0 <2.0.0 -function replaceCarets(comp, loose) { - return comp.trim().split(/\s+/).map(function(comp) { - return replaceCaret(comp, loose); - }).join(' '); -} - -function replaceCaret(comp, loose) { - debug('caret', comp, loose); - var r = loose ? re[CARETLOOSE] : re[CARET]; - return comp.replace(r, function(_, M, m, p, pr) { - debug('caret', comp, _, M, m, p, pr); - var ret; - - if (isX(M)) - ret = ''; - else if (isX(m)) - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - else if (isX(p)) { - if (M === '0') - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - else - ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; - } else if (pr) { - debug('replaceCaret pr', pr); - if (pr.charAt(0) !== '-') - pr = '-' + pr; - if (M === '0') { - if (m === '0') - ret = '>=' + M + '.' + m + '.' + p + pr + - ' <' + M + '.' + m + '.' + (+p + 1); - else - ret = '>=' + M + '.' + m + '.' + p + pr + - ' <' + M + '.' + (+m + 1) + '.0'; - } else - ret = '>=' + M + '.' + m + '.' + p + pr + - ' <' + (+M + 1) + '.0.0'; - } else { - debug('no pr'); - if (M === '0') { - if (m === '0') - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + m + '.' + (+p + 1); - else - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0'; - } else - ret = '>=' + M + '.' + m + '.' + p + - ' <' + (+M + 1) + '.0.0'; - } - - debug('caret return', ret); - return ret; - }); -} - -function replaceXRanges(comp, loose) { - debug('replaceXRanges', comp, loose); - return comp.split(/\s+/).map(function(comp) { - return replaceXRange(comp, loose); - }).join(' '); -} - -function replaceXRange(comp, loose) { - comp = comp.trim(); - var r = loose ? re[XRANGELOOSE] : re[XRANGE]; - return comp.replace(r, function(ret, gtlt, M, m, p, pr) { - debug('xRange', comp, ret, gtlt, M, m, p, pr); - var xM = isX(M); - var xm = xM || isX(m); - var xp = xm || isX(p); - var anyX = xp; - - if (gtlt === '=' && anyX) - gtlt = ''; - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0'; - } else { - // nothing is forbidden - ret = '*'; - } - } else if (gtlt && anyX) { - // replace X with 0 - if (xm) - m = 0; - if (xp) - p = 0; - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - // >1.2.3 => >= 1.2.4 - gtlt = '>='; - if (xm) { - M = +M + 1; - m = 0; - p = 0; - } else if (xp) { - m = +m + 1; - p = 0; - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) - M = +M + 1 - else - m = +m + 1 - } - - ret = gtlt + M + '.' + m + '.' + p; - } else if (xm) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - } else if (xp) { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - } - - debug('xRange return', ret); - - return ret; - }); -} - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -function replaceStars(comp, loose) { - debug('replaceStars', comp, loose); - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[STAR], ''); -} - -// This function is passed to string.replace(re[HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0 -function hyphenReplace($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) { - - if (isX(fM)) - from = ''; - else if (isX(fm)) - from = '>=' + fM + '.0.0'; - else if (isX(fp)) - from = '>=' + fM + '.' + fm + '.0'; - else - from = '>=' + from; - - if (isX(tM)) - to = ''; - else if (isX(tm)) - to = '<' + (+tM + 1) + '.0.0'; - else if (isX(tp)) - to = '<' + tM + '.' + (+tm + 1) + '.0'; - else if (tpr) - to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; - else - to = '<=' + to; - - return (from + ' ' + to).trim(); -} - - -// if ANY of the sets match ALL of its comparators, then pass -Range.prototype.test = function(version) { - if (!version) - return false; - - if (typeof version === 'string') - version = new SemVer(version, this.loose); - - for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version)) - return true; - } - return false; -}; - -function testSet(set, version) { - for (var i = 0; i < set.length; i++) { - if (!set[i].test(version)) - return false; - } - - if (version.prerelease.length) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (var i = 0; i < set.length; i++) { - debug(set[i].semver); - if (set[i].semver === ANY) - continue; - - if (set[i].semver.prerelease.length > 0) { - var allowed = set[i].semver; - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) - return true; - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false; - } - - return true; -} - -exports.satisfies = satisfies; -function satisfies(version, range, loose) { - try { - range = new Range(range, loose); - } catch (er) { - return false; - } - return range.test(version); -} - -exports.maxSatisfying = maxSatisfying; -function maxSatisfying(versions, range, loose) { - return versions.filter(function(version) { - return satisfies(version, range, loose); - }).sort(function(a, b) { - return rcompare(a, b, loose); - })[0] || null; -} - -exports.validRange = validRange; -function validRange(range, loose) { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, loose).range || '*'; - } catch (er) { - return null; - } -} - -// Determine if version is less than all the versions possible in the range -exports.ltr = ltr; -function ltr(version, range, loose) { - return outside(version, range, '<', loose); -} - -// Determine if version is greater than all the versions possible in the range. -exports.gtr = gtr; -function gtr(version, range, loose) { - return outside(version, range, '>', loose); -} - -exports.outside = outside; -function outside(version, range, hilo, loose) { - version = new SemVer(version, loose); - range = new Range(range, loose); - - var gtfn, ltefn, ltfn, comp, ecomp; - switch (hilo) { - case '>': - gtfn = gt; - ltefn = lte; - ltfn = lt; - comp = '>'; - ecomp = '>='; - break; - case '<': - gtfn = lt; - ltefn = gte; - ltfn = gt; - comp = '<'; - ecomp = '<='; - break; - default: - throw new TypeError('Must provide a hilo val of "<" or ">"'); - } - - // If it satisifes the range it is not outside - if (satisfies(version, range, loose)) { - return false; - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i]; - - var high = null; - var low = null; - - comparators.forEach(function(comparator) { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator; - low = low || comparator; - if (gtfn(comparator.semver, high.semver, loose)) { - high = comparator; - } else if (ltfn(comparator.semver, low.semver, loose)) { - low = comparator; - } - }); - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false; - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false; - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false; - } - } - return true; -} diff --git a/node_modules/semver/test/big-numbers.js b/node_modules/semver/test/big-numbers.js deleted file mode 100644 index c051864..0000000 --- a/node_modules/semver/test/big-numbers.js +++ /dev/null @@ -1,31 +0,0 @@ -var test = require('tap').test -var semver = require('../') - -test('long version is too long', function (t) { - var v = '1.2.' + new Array(256).join('1') - t.throws(function () { - new semver.SemVer(v) - }) - t.equal(semver.valid(v, false), null) - t.equal(semver.valid(v, true), null) - t.equal(semver.inc(v, 'patch'), null) - t.end() -}) - -test('big number is like too long version', function (t) { - var v = '1.2.' + new Array(100).join('1') - t.throws(function () { - new semver.SemVer(v) - }) - t.equal(semver.valid(v, false), null) - t.equal(semver.valid(v, true), null) - t.equal(semver.inc(v, 'patch'), null) - t.end() -}) - -test('parsing null does not throw', function (t) { - t.equal(semver.parse(null), null) - t.equal(semver.parse({}), null) - t.equal(semver.parse(new semver.SemVer('1.2.3')).version, '1.2.3') - t.end() -}) diff --git a/node_modules/semver/test/clean.js b/node_modules/semver/test/clean.js deleted file mode 100644 index 9e268de..0000000 --- a/node_modules/semver/test/clean.js +++ /dev/null @@ -1,29 +0,0 @@ -var tap = require('tap'); -var test = tap.test; -var semver = require('../semver.js'); -var clean = semver.clean; - -test('\nclean tests', function(t) { - // [range, version] - // Version should be detectable despite extra characters - [ - ['1.2.3', '1.2.3'], - [' 1.2.3 ', '1.2.3'], - [' 1.2.3-4 ', '1.2.3-4'], - [' 1.2.3-pre ', '1.2.3-pre'], - [' =v1.2.3 ', '1.2.3'], - ['v1.2.3', '1.2.3'], - [' v1.2.3 ', '1.2.3'], - ['\t1.2.3', '1.2.3'], - ['>1.2.3', null], - ['~1.2.3', null], - ['<=1.2.3', null], - ['1.2.x', null] - ].forEach(function(tuple) { - var range = tuple[0]; - var version = tuple[1]; - var msg = 'clean(' + range + ') = ' + version; - t.equal(clean(range), version, msg); - }); - t.end(); -}); diff --git a/node_modules/semver/test/gtr.js b/node_modules/semver/test/gtr.js deleted file mode 100644 index bbb8789..0000000 --- a/node_modules/semver/test/gtr.js +++ /dev/null @@ -1,173 +0,0 @@ -var tap = require('tap'); -var test = tap.test; -var semver = require('../semver.js'); -var gtr = semver.gtr; - -test('\ngtr tests', function(t) { - // [range, version, loose] - // Version should be greater than range - [ - ['~1.2.2', '1.3.0'], - ['~0.6.1-1', '0.7.1-1'], - ['1.0.0 - 2.0.0', '2.0.1'], - ['1.0.0', '1.0.1-beta1'], - ['1.0.0', '2.0.0'], - ['<=2.0.0', '2.1.1'], - ['<=2.0.0', '3.2.9'], - ['<2.0.0', '2.0.0'], - ['0.1.20 || 1.2.4', '1.2.5'], - ['2.x.x', '3.0.0'], - ['1.2.x', '1.3.0'], - ['1.2.x || 2.x', '3.0.0'], - ['2.*.*', '5.0.1'], - ['1.2.*', '1.3.3'], - ['1.2.* || 2.*', '4.0.0'], - ['2', '3.0.0'], - ['2.3', '2.4.2'], - ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0 - ['~2.4', '2.5.5'], - ['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0 - ['~1', '2.2.3'], // >=1.0.0 <2.0.0 - ['~>1', '2.2.4'], - ['~> 1', '3.2.3'], - ['~1.0', '1.1.2'], // >=1.0.0 <1.1.0 - ['~ 1.0', '1.1.0'], - ['<1.2', '1.2.0'], - ['< 1.2', '1.2.1'], - ['1', '2.0.0beta', true], - ['~v0.5.4-pre', '0.6.0'], - ['~v0.5.4-pre', '0.6.1-pre'], - ['=0.7.x', '0.8.0'], - ['=0.7.x', '0.8.0-asdf'], - ['<0.7.x', '0.7.0'], - ['~1.2.2', '1.3.0'], - ['1.0.0 - 2.0.0', '2.2.3'], - ['1.0.0', '1.0.1'], - ['<=2.0.0', '3.0.0'], - ['<=2.0.0', '2.9999.9999'], - ['<=2.0.0', '2.2.9'], - ['<2.0.0', '2.9999.9999'], - ['<2.0.0', '2.2.9'], - ['2.x.x', '3.1.3'], - ['1.2.x', '1.3.3'], - ['1.2.x || 2.x', '3.1.3'], - ['2.*.*', '3.1.3'], - ['1.2.*', '1.3.3'], - ['1.2.* || 2.*', '3.1.3'], - ['2', '3.1.2'], - ['2.3', '2.4.1'], - ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0 - ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0 - ['~1', '2.2.3'], // >=1.0.0 <2.0.0 - ['~>1', '2.2.3'], - ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0 - ['<1', '1.0.0'], - ['1', '2.0.0beta', true], - ['<1', '1.0.0beta', true], - ['< 1', '1.0.0beta', true], - ['=0.7.x', '0.8.2'], - ['<0.7.x', '0.7.2'] - ].forEach(function(tuple) { - var range = tuple[0]; - var version = tuple[1]; - var loose = tuple[2] || false; - var msg = 'gtr(' + version + ', ' + range + ', ' + loose + ')'; - t.ok(gtr(version, range, loose), msg); - }); - t.end(); -}); - -test('\nnegative gtr tests', function(t) { - // [range, version, loose] - // Version should NOT be greater than range - [ - ['~0.6.1-1', '0.6.1-1'], - ['1.0.0 - 2.0.0', '1.2.3'], - ['1.0.0 - 2.0.0', '0.9.9'], - ['1.0.0', '1.0.0'], - ['>=*', '0.2.4'], - ['', '1.0.0', true], - ['*', '1.2.3'], - ['*', 'v1.2.3-foo'], - ['>=1.0.0', '1.0.0'], - ['>=1.0.0', '1.0.1'], - ['>=1.0.0', '1.1.0'], - ['>1.0.0', '1.0.1'], - ['>1.0.0', '1.1.0'], - ['<=2.0.0', '2.0.0'], - ['<=2.0.0', '1.9999.9999'], - ['<=2.0.0', '0.2.9'], - ['<2.0.0', '1.9999.9999'], - ['<2.0.0', '0.2.9'], - ['>= 1.0.0', '1.0.0'], - ['>= 1.0.0', '1.0.1'], - ['>= 1.0.0', '1.1.0'], - ['> 1.0.0', '1.0.1'], - ['> 1.0.0', '1.1.0'], - ['<= 2.0.0', '2.0.0'], - ['<= 2.0.0', '1.9999.9999'], - ['<= 2.0.0', '0.2.9'], - ['< 2.0.0', '1.9999.9999'], - ['<\t2.0.0', '0.2.9'], - ['>=0.1.97', 'v0.1.97'], - ['>=0.1.97', '0.1.97'], - ['0.1.20 || 1.2.4', '1.2.4'], - ['0.1.20 || >1.2.4', '1.2.4'], - ['0.1.20 || 1.2.4', '1.2.3'], - ['0.1.20 || 1.2.4', '0.1.20'], - ['>=0.2.3 || <0.0.1', '0.0.0'], - ['>=0.2.3 || <0.0.1', '0.2.3'], - ['>=0.2.3 || <0.0.1', '0.2.4'], - ['||', '1.3.4'], - ['2.x.x', '2.1.3'], - ['1.2.x', '1.2.3'], - ['1.2.x || 2.x', '2.1.3'], - ['1.2.x || 2.x', '1.2.3'], - ['x', '1.2.3'], - ['2.*.*', '2.1.3'], - ['1.2.*', '1.2.3'], - ['1.2.* || 2.*', '2.1.3'], - ['1.2.* || 2.*', '1.2.3'], - ['1.2.* || 2.*', '1.2.3'], - ['*', '1.2.3'], - ['2', '2.1.2'], - ['2.3', '2.3.1'], - ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 - ['~2.4', '2.4.5'], - ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0 - ['~1', '1.2.3'], // >=1.0.0 <2.0.0 - ['~>1', '1.2.3'], - ['~> 1', '1.2.3'], - ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0 - ['~ 1.0', '1.0.2'], - ['>=1', '1.0.0'], - ['>= 1', '1.0.0'], - ['<1.2', '1.1.1'], - ['< 1.2', '1.1.1'], - ['1', '1.0.0beta', true], - ['~v0.5.4-pre', '0.5.5'], - ['~v0.5.4-pre', '0.5.4'], - ['=0.7.x', '0.7.2'], - ['>=0.7.x', '0.7.2'], - ['=0.7.x', '0.7.0-asdf'], - ['>=0.7.x', '0.7.0-asdf'], - ['<=0.7.x', '0.6.2'], - ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'], - ['>=0.2.3 <=0.2.4', '0.2.4'], - ['1.0.0 - 2.0.0', '2.0.0'], - ['^1', '0.0.0-0'], - ['^3.0.0', '2.0.0'], - ['^1.0.0 || ~2.0.1', '2.0.0'], - ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'], - ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true], - ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true], - ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'] - ].forEach(function(tuple) { - var range = tuple[0]; - var version = tuple[1]; - var loose = tuple[2] || false; - var msg = '!gtr(' + version + ', ' + range + ', ' + loose + ')'; - t.notOk(gtr(version, range, loose), msg); - }); - t.end(); -}); diff --git a/node_modules/semver/test/index.js b/node_modules/semver/test/index.js deleted file mode 100644 index 47c3f5f..0000000 --- a/node_modules/semver/test/index.js +++ /dev/null @@ -1,698 +0,0 @@ -'use strict'; - -var tap = require('tap'); -var test = tap.test; -var semver = require('../semver.js'); -var eq = semver.eq; -var gt = semver.gt; -var lt = semver.lt; -var neq = semver.neq; -var cmp = semver.cmp; -var gte = semver.gte; -var lte = semver.lte; -var satisfies = semver.satisfies; -var validRange = semver.validRange; -var inc = semver.inc; -var diff = semver.diff; -var replaceStars = semver.replaceStars; -var toComparators = semver.toComparators; -var SemVer = semver.SemVer; -var Range = semver.Range; - -test('\ncomparison tests', function(t) { - // [version1, version2] - // version1 should be greater than version2 - [['0.0.0', '0.0.0-foo'], - ['0.0.1', '0.0.0'], - ['1.0.0', '0.9.9'], - ['0.10.0', '0.9.0'], - ['0.99.0', '0.10.0'], - ['2.0.0', '1.2.3'], - ['v0.0.0', '0.0.0-foo', true], - ['v0.0.1', '0.0.0', true], - ['v1.0.0', '0.9.9', true], - ['v0.10.0', '0.9.0', true], - ['v0.99.0', '0.10.0', true], - ['v2.0.0', '1.2.3', true], - ['0.0.0', 'v0.0.0-foo', true], - ['0.0.1', 'v0.0.0', true], - ['1.0.0', 'v0.9.9', true], - ['0.10.0', 'v0.9.0', true], - ['0.99.0', 'v0.10.0', true], - ['2.0.0', 'v1.2.3', true], - ['1.2.3', '1.2.3-asdf'], - ['1.2.3', '1.2.3-4'], - ['1.2.3', '1.2.3-4-foo'], - ['1.2.3-5-foo', '1.2.3-5'], - ['1.2.3-5', '1.2.3-4'], - ['1.2.3-5-foo', '1.2.3-5-Foo'], - ['3.0.0', '2.7.2+asdf'], - ['1.2.3-a.10', '1.2.3-a.5'], - ['1.2.3-a.b', '1.2.3-a.5'], - ['1.2.3-a.b', '1.2.3-a'], - ['1.2.3-a.b.c.10.d.5', '1.2.3-a.b.c.5.d.100'], - ['1.2.3-r2', '1.2.3-r100'], - ['1.2.3-r100', '1.2.3-R2'] - ].forEach(function(v) { - var v0 = v[0]; - var v1 = v[1]; - var loose = v[2]; - t.ok(gt(v0, v1, loose), "gt('" + v0 + "', '" + v1 + "')"); - t.ok(lt(v1, v0, loose), "lt('" + v1 + "', '" + v0 + "')"); - t.ok(!gt(v1, v0, loose), "!gt('" + v1 + "', '" + v0 + "')"); - t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')"); - t.ok(eq(v0, v0, loose), "eq('" + v0 + "', '" + v0 + "')"); - t.ok(eq(v1, v1, loose), "eq('" + v1 + "', '" + v1 + "')"); - t.ok(neq(v0, v1, loose), "neq('" + v0 + "', '" + v1 + "')"); - t.ok(cmp(v1, '==', v1, loose), "cmp('" + v1 + "' == '" + v1 + "')"); - t.ok(cmp(v0, '>=', v1, loose), "cmp('" + v0 + "' >= '" + v1 + "')"); - t.ok(cmp(v1, '<=', v0, loose), "cmp('" + v1 + "' <= '" + v0 + "')"); - t.ok(cmp(v0, '!=', v1, loose), "cmp('" + v0 + "' != '" + v1 + "')"); - }); - t.end(); -}); - -test('\nequality tests', function(t) { - // [version1, version2] - // version1 should be equivalent to version2 - [['1.2.3', 'v1.2.3', true], - ['1.2.3', '=1.2.3', true], - ['1.2.3', 'v 1.2.3', true], - ['1.2.3', '= 1.2.3', true], - ['1.2.3', ' v1.2.3', true], - ['1.2.3', ' =1.2.3', true], - ['1.2.3', ' v 1.2.3', true], - ['1.2.3', ' = 1.2.3', true], - ['1.2.3-0', 'v1.2.3-0', true], - ['1.2.3-0', '=1.2.3-0', true], - ['1.2.3-0', 'v 1.2.3-0', true], - ['1.2.3-0', '= 1.2.3-0', true], - ['1.2.3-0', ' v1.2.3-0', true], - ['1.2.3-0', ' =1.2.3-0', true], - ['1.2.3-0', ' v 1.2.3-0', true], - ['1.2.3-0', ' = 1.2.3-0', true], - ['1.2.3-1', 'v1.2.3-1', true], - ['1.2.3-1', '=1.2.3-1', true], - ['1.2.3-1', 'v 1.2.3-1', true], - ['1.2.3-1', '= 1.2.3-1', true], - ['1.2.3-1', ' v1.2.3-1', true], - ['1.2.3-1', ' =1.2.3-1', true], - ['1.2.3-1', ' v 1.2.3-1', true], - ['1.2.3-1', ' = 1.2.3-1', true], - ['1.2.3-beta', 'v1.2.3-beta', true], - ['1.2.3-beta', '=1.2.3-beta', true], - ['1.2.3-beta', 'v 1.2.3-beta', true], - ['1.2.3-beta', '= 1.2.3-beta', true], - ['1.2.3-beta', ' v1.2.3-beta', true], - ['1.2.3-beta', ' =1.2.3-beta', true], - ['1.2.3-beta', ' v 1.2.3-beta', true], - ['1.2.3-beta', ' = 1.2.3-beta', true], - ['1.2.3-beta+build', ' = 1.2.3-beta+otherbuild', true], - ['1.2.3+build', ' = 1.2.3+otherbuild', true], - ['1.2.3-beta+build', '1.2.3-beta+otherbuild'], - ['1.2.3+build', '1.2.3+otherbuild'], - [' v1.2.3+build', '1.2.3+otherbuild'] - ].forEach(function(v) { - var v0 = v[0]; - var v1 = v[1]; - var loose = v[2]; - t.ok(eq(v0, v1, loose), "eq('" + v0 + "', '" + v1 + "')"); - t.ok(!neq(v0, v1, loose), "!neq('" + v0 + "', '" + v1 + "')"); - t.ok(cmp(v0, '==', v1, loose), 'cmp(' + v0 + '==' + v1 + ')'); - t.ok(!cmp(v0, '!=', v1, loose), '!cmp(' + v0 + '!=' + v1 + ')'); - t.ok(!cmp(v0, '===', v1, loose), '!cmp(' + v0 + '===' + v1 + ')'); - t.ok(cmp(v0, '!==', v1, loose), 'cmp(' + v0 + '!==' + v1 + ')'); - t.ok(!gt(v0, v1, loose), "!gt('" + v0 + "', '" + v1 + "')"); - t.ok(gte(v0, v1, loose), "gte('" + v0 + "', '" + v1 + "')"); - t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')"); - t.ok(lte(v0, v1, loose), "lte('" + v0 + "', '" + v1 + "')"); - }); - t.end(); -}); - - -test('\nrange tests', function(t) { - // [range, version] - // version should be included by range - [['1.0.0 - 2.0.0', '1.2.3'], - ['^1.2.3+build', '1.2.3'], - ['^1.2.3+build', '1.3.0'], - ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3'], - ['1.2.3pre+asdf - 2.4.3-pre+asdf', '1.2.3', true], - ['1.2.3-pre+asdf - 2.4.3pre+asdf', '1.2.3', true], - ['1.2.3pre+asdf - 2.4.3pre+asdf', '1.2.3', true], - ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3-pre.2'], - ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '2.4.3-alpha'], - ['1.2.3+asdf - 2.4.3+asdf', '1.2.3'], - ['1.0.0', '1.0.0'], - ['>=*', '0.2.4'], - ['', '1.0.0'], - ['*', '1.2.3'], - ['*', 'v1.2.3', true], - ['>=1.0.0', '1.0.0'], - ['>=1.0.0', '1.0.1'], - ['>=1.0.0', '1.1.0'], - ['>1.0.0', '1.0.1'], - ['>1.0.0', '1.1.0'], - ['<=2.0.0', '2.0.0'], - ['<=2.0.0', '1.9999.9999'], - ['<=2.0.0', '0.2.9'], - ['<2.0.0', '1.9999.9999'], - ['<2.0.0', '0.2.9'], - ['>= 1.0.0', '1.0.0'], - ['>= 1.0.0', '1.0.1'], - ['>= 1.0.0', '1.1.0'], - ['> 1.0.0', '1.0.1'], - ['> 1.0.0', '1.1.0'], - ['<= 2.0.0', '2.0.0'], - ['<= 2.0.0', '1.9999.9999'], - ['<= 2.0.0', '0.2.9'], - ['< 2.0.0', '1.9999.9999'], - ['<\t2.0.0', '0.2.9'], - ['>=0.1.97', 'v0.1.97', true], - ['>=0.1.97', '0.1.97'], - ['0.1.20 || 1.2.4', '1.2.4'], - ['>=0.2.3 || <0.0.1', '0.0.0'], - ['>=0.2.3 || <0.0.1', '0.2.3'], - ['>=0.2.3 || <0.0.1', '0.2.4'], - ['||', '1.3.4'], - ['2.x.x', '2.1.3'], - ['1.2.x', '1.2.3'], - ['1.2.x || 2.x', '2.1.3'], - ['1.2.x || 2.x', '1.2.3'], - ['x', '1.2.3'], - ['2.*.*', '2.1.3'], - ['1.2.*', '1.2.3'], - ['1.2.* || 2.*', '2.1.3'], - ['1.2.* || 2.*', '1.2.3'], - ['*', '1.2.3'], - ['2', '2.1.2'], - ['2.3', '2.3.1'], - ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 - ['~2.4', '2.4.5'], - ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0, - ['~1', '1.2.3'], // >=1.0.0 <2.0.0 - ['~>1', '1.2.3'], - ['~> 1', '1.2.3'], - ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0, - ['~ 1.0', '1.0.2'], - ['~ 1.0.3', '1.0.12'], - ['>=1', '1.0.0'], - ['>= 1', '1.0.0'], - ['<1.2', '1.1.1'], - ['< 1.2', '1.1.1'], - ['~v0.5.4-pre', '0.5.5'], - ['~v0.5.4-pre', '0.5.4'], - ['=0.7.x', '0.7.2'], - ['<=0.7.x', '0.7.2'], - ['>=0.7.x', '0.7.2'], - ['<=0.7.x', '0.6.2'], - ['~1.2.1 >=1.2.3', '1.2.3'], - ['~1.2.1 =1.2.3', '1.2.3'], - ['~1.2.1 1.2.3', '1.2.3'], - ['~1.2.1 >=1.2.3 1.2.3', '1.2.3'], - ['~1.2.1 1.2.3 >=1.2.3', '1.2.3'], - ['~1.2.1 1.2.3', '1.2.3'], - ['>=1.2.1 1.2.3', '1.2.3'], - ['1.2.3 >=1.2.1', '1.2.3'], - ['>=1.2.3 >=1.2.1', '1.2.3'], - ['>=1.2.1 >=1.2.3', '1.2.3'], - ['>=1.2', '1.2.8'], - ['^1.2.3', '1.8.1'], - ['^0.1.2', '0.1.2'], - ['^0.1', '0.1.2'], - ['^1.2', '1.4.2'], - ['^1.2 ^1', '1.4.2'], - ['^1.2.3-alpha', '1.2.3-pre'], - ['^1.2.0-alpha', '1.2.0-pre'], - ['^0.0.1-alpha', '0.0.1-beta'] - ].forEach(function(v) { - var range = v[0]; - var ver = v[1]; - var loose = v[2]; - t.ok(satisfies(ver, range, loose), range + ' satisfied by ' + ver); - }); - t.end(); -}); - -test('\nnegative range tests', function(t) { - // [range, version] - // version should not be included by range - [['1.0.0 - 2.0.0', '2.2.3'], - ['1.2.3+asdf - 2.4.3+asdf', '1.2.3-pre.2'], - ['1.2.3+asdf - 2.4.3+asdf', '2.4.3-alpha'], - ['^1.2.3+build', '2.0.0'], - ['^1.2.3+build', '1.2.0'], - ['^1.2.3', '1.2.3-pre'], - ['^1.2', '1.2.0-pre'], - ['>1.2', '1.3.0-beta'], - ['<=1.2.3', '1.2.3-beta'], - ['^1.2.3', '1.2.3-beta'], - ['=0.7.x', '0.7.0-asdf'], - ['>=0.7.x', '0.7.0-asdf'], - ['1', '1.0.0beta', true], - ['<1', '1.0.0beta', true], - ['< 1', '1.0.0beta', true], - ['1.0.0', '1.0.1'], - ['>=1.0.0', '0.0.0'], - ['>=1.0.0', '0.0.1'], - ['>=1.0.0', '0.1.0'], - ['>1.0.0', '0.0.1'], - ['>1.0.0', '0.1.0'], - ['<=2.0.0', '3.0.0'], - ['<=2.0.0', '2.9999.9999'], - ['<=2.0.0', '2.2.9'], - ['<2.0.0', '2.9999.9999'], - ['<2.0.0', '2.2.9'], - ['>=0.1.97', 'v0.1.93', true], - ['>=0.1.97', '0.1.93'], - ['0.1.20 || 1.2.4', '1.2.3'], - ['>=0.2.3 || <0.0.1', '0.0.3'], - ['>=0.2.3 || <0.0.1', '0.2.2'], - ['2.x.x', '1.1.3'], - ['2.x.x', '3.1.3'], - ['1.2.x', '1.3.3'], - ['1.2.x || 2.x', '3.1.3'], - ['1.2.x || 2.x', '1.1.3'], - ['2.*.*', '1.1.3'], - ['2.*.*', '3.1.3'], - ['1.2.*', '1.3.3'], - ['1.2.* || 2.*', '3.1.3'], - ['1.2.* || 2.*', '1.1.3'], - ['2', '1.1.2'], - ['2.3', '2.4.1'], - ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0 - ['~2.4', '2.3.9'], - ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0 - ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0 - ['~1', '0.2.3'], // >=1.0.0 <2.0.0 - ['~>1', '2.2.3'], - ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0 - ['<1', '1.0.0'], - ['>=1.2', '1.1.1'], - ['1', '2.0.0beta', true], - ['~v0.5.4-beta', '0.5.4-alpha'], - ['=0.7.x', '0.8.2'], - ['>=0.7.x', '0.6.2'], - ['<0.7.x', '0.7.2'], - ['<1.2.3', '1.2.3-beta'], - ['=1.2.3', '1.2.3-beta'], - ['>1.2', '1.2.8'], - ['^1.2.3', '2.0.0-alpha'], - ['^1.2.3', '1.2.2'], - ['^1.2', '1.1.9'], - ['*', 'v1.2.3-foo', true], - // invalid ranges never satisfied! - ['blerg', '1.2.3'], - ['git+https://user:password0123@github.com/foo', '123.0.0', true], - ['^1.2.3', '2.0.0-pre'] - ].forEach(function(v) { - var range = v[0]; - var ver = v[1]; - var loose = v[2]; - var found = satisfies(ver, range, loose); - t.ok(!found, ver + ' not satisfied by ' + range); - }); - t.end(); -}); - -test('\nincrement versions test', function(t) { -// [version, inc, result, identifier] -// inc(version, inc) -> result - [['1.2.3', 'major', '2.0.0'], - ['1.2.3', 'minor', '1.3.0'], - ['1.2.3', 'patch', '1.2.4'], - ['1.2.3tag', 'major', '2.0.0', true], - ['1.2.3-tag', 'major', '2.0.0'], - ['1.2.3', 'fake', null], - ['1.2.0-0', 'patch', '1.2.0'], - ['fake', 'major', null], - ['1.2.3-4', 'major', '2.0.0'], - ['1.2.3-4', 'minor', '1.3.0'], - ['1.2.3-4', 'patch', '1.2.3'], - ['1.2.3-alpha.0.beta', 'major', '2.0.0'], - ['1.2.3-alpha.0.beta', 'minor', '1.3.0'], - ['1.2.3-alpha.0.beta', 'patch', '1.2.3'], - ['1.2.4', 'prerelease', '1.2.5-0'], - ['1.2.3-0', 'prerelease', '1.2.3-1'], - ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'], - ['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'], - ['1.2.3-alpha.2', 'prerelease', '1.2.3-alpha.3'], - ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta'], - ['1.2.3-alpha.1.beta', 'prerelease', '1.2.3-alpha.2.beta'], - ['1.2.3-alpha.2.beta', 'prerelease', '1.2.3-alpha.3.beta'], - ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta'], - ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta'], - ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta'], - ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1'], - ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2'], - ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'], - ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'], - ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'], - ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta'], - ['1.2.0', 'prepatch', '1.2.1-0'], - ['1.2.0-1', 'prepatch', '1.2.1-0'], - ['1.2.0', 'preminor', '1.3.0-0'], - ['1.2.3-1', 'preminor', '1.3.0-0'], - ['1.2.0', 'premajor', '2.0.0-0'], - ['1.2.3-1', 'premajor', '2.0.0-0'], - ['1.2.0-1', 'minor', '1.2.0'], - ['1.0.0-1', 'major', '1.0.0'], - - ['1.2.3', 'major', '2.0.0', false, 'dev'], - ['1.2.3', 'minor', '1.3.0', false, 'dev'], - ['1.2.3', 'patch', '1.2.4', false, 'dev'], - ['1.2.3tag', 'major', '2.0.0', true, 'dev'], - ['1.2.3-tag', 'major', '2.0.0', false, 'dev'], - ['1.2.3', 'fake', null, false, 'dev'], - ['1.2.0-0', 'patch', '1.2.0', false, 'dev'], - ['fake', 'major', null, false, 'dev'], - ['1.2.3-4', 'major', '2.0.0', false, 'dev'], - ['1.2.3-4', 'minor', '1.3.0', false, 'dev'], - ['1.2.3-4', 'patch', '1.2.3', false, 'dev'], - ['1.2.3-alpha.0.beta', 'major', '2.0.0', false, 'dev'], - ['1.2.3-alpha.0.beta', 'minor', '1.3.0', false, 'dev'], - ['1.2.3-alpha.0.beta', 'patch', '1.2.3', false, 'dev'], - ['1.2.4', 'prerelease', '1.2.5-dev.0', false, 'dev'], - ['1.2.3-0', 'prerelease', '1.2.3-dev.0', false, 'dev'], - ['1.2.3-alpha.0', 'prerelease', '1.2.3-dev.0', false, 'dev'], - ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1', false, 'alpha'], - ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], - ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta', false, 'alpha'], - ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], - ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta', false, 'alpha'], - ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta', false, 'alpha'], - ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta', false, 'alpha'], - ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-dev.0', false, 'dev'], - ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1', false, 'alpha'], - ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2', false, 'alpha'], - ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3', false, 'alpha'], - ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], - ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta', false, 'alpha'], - ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta', false, 'alpha'], - ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta', false, 'alpha'], - ['1.2.0', 'prepatch', '1.2.1-dev.0', false, 'dev'], - ['1.2.0-1', 'prepatch', '1.2.1-dev.0', false, 'dev'], - ['1.2.0', 'preminor', '1.3.0-dev.0', false, 'dev'], - ['1.2.3-1', 'preminor', '1.3.0-dev.0', false, 'dev'], - ['1.2.0', 'premajor', '2.0.0-dev.0', false, 'dev'], - ['1.2.3-1', 'premajor', '2.0.0-dev.0', false, 'dev'], - ['1.2.0-1', 'minor', '1.2.0', false, 'dev'], - ['1.0.0-1', 'major', '1.0.0', false, 'dev'], - ['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.0', false, 'dev'] - - ].forEach(function(v) { - var pre = v[0]; - var what = v[1]; - var wanted = v[2]; - var loose = v[3]; - var id = v[4]; - var found = inc(pre, what, loose, id); - var cmd = 'inc(' + pre + ', ' + what + ', ' + id + ')'; - t.equal(found, wanted, cmd + ' === ' + wanted); - - var parsed = semver.parse(pre, loose); - if (wanted) { - parsed.inc(what, id); - t.equal(parsed.version, wanted, cmd + ' object version updated'); - t.equal(parsed.raw, wanted, cmd + ' object raw field updated'); - } else if (parsed) { - t.throws(function () { - parsed.inc(what, id) - }) - } else { - t.equal(parsed, null) - } - }); - - t.end(); -}); - -test('\ndiff versions test', function(t) { -// [version1, version2, result] -// diff(version1, version2) -> result - [['1.2.3', '0.2.3', 'major'], - ['1.4.5', '0.2.3', 'major'], - ['1.2.3', '2.0.0-pre', 'premajor'], - ['1.2.3', '1.3.3', 'minor'], - ['1.0.1', '1.1.0-pre', 'preminor'], - ['1.2.3', '1.2.4', 'patch'], - ['1.2.3', '1.2.4-pre', 'prepatch'], - ['0.0.1', '0.0.1-pre', 'prerelease'], - ['0.0.1', '0.0.1-pre-2', 'prerelease'], - ['1.1.0', '1.1.0-pre', 'prerelease'], - ['1.1.0-pre-1', '1.1.0-pre-2', 'prerelease'], - ['1.0.0', '1.0.0', null] - - ].forEach(function(v) { - var version1 = v[0]; - var version2 = v[1]; - var wanted = v[2]; - var found = diff(version1, version2); - var cmd = 'diff(' + version1 + ', ' + version2 + ')'; - t.equal(found, wanted, cmd + ' === ' + wanted); - }); - - t.end(); -}); - -test('\nvalid range test', function(t) { - // [range, result] - // validRange(range) -> result - // translate ranges into their canonical form - [['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'], - ['1.0.0', '1.0.0'], - ['>=*', '*'], - ['', '*'], - ['*', '*'], - ['*', '*'], - ['>=1.0.0', '>=1.0.0'], - ['>1.0.0', '>1.0.0'], - ['<=2.0.0', '<=2.0.0'], - ['1', '>=1.0.0 <2.0.0'], - ['<=2.0.0', '<=2.0.0'], - ['<=2.0.0', '<=2.0.0'], - ['<2.0.0', '<2.0.0'], - ['<2.0.0', '<2.0.0'], - ['>= 1.0.0', '>=1.0.0'], - ['>= 1.0.0', '>=1.0.0'], - ['>= 1.0.0', '>=1.0.0'], - ['> 1.0.0', '>1.0.0'], - ['> 1.0.0', '>1.0.0'], - ['<= 2.0.0', '<=2.0.0'], - ['<= 2.0.0', '<=2.0.0'], - ['<= 2.0.0', '<=2.0.0'], - ['< 2.0.0', '<2.0.0'], - ['< 2.0.0', '<2.0.0'], - ['>=0.1.97', '>=0.1.97'], - ['>=0.1.97', '>=0.1.97'], - ['0.1.20 || 1.2.4', '0.1.20||1.2.4'], - ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], - ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], - ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], - ['||', '||'], - ['2.x.x', '>=2.0.0 <3.0.0'], - ['1.2.x', '>=1.2.0 <1.3.0'], - ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], - ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], - ['x', '*'], - ['2.*.*', '>=2.0.0 <3.0.0'], - ['1.2.*', '>=1.2.0 <1.3.0'], - ['1.2.* || 2.*', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], - ['*', '*'], - ['2', '>=2.0.0 <3.0.0'], - ['2.3', '>=2.3.0 <2.4.0'], - ['~2.4', '>=2.4.0 <2.5.0'], - ['~2.4', '>=2.4.0 <2.5.0'], - ['~>3.2.1', '>=3.2.1 <3.3.0'], - ['~1', '>=1.0.0 <2.0.0'], - ['~>1', '>=1.0.0 <2.0.0'], - ['~> 1', '>=1.0.0 <2.0.0'], - ['~1.0', '>=1.0.0 <1.1.0'], - ['~ 1.0', '>=1.0.0 <1.1.0'], - ['^0', '>=0.0.0 <1.0.0'], - ['^ 1', '>=1.0.0 <2.0.0'], - ['^0.1', '>=0.1.0 <0.2.0'], - ['^1.0', '>=1.0.0 <2.0.0'], - ['^1.2', '>=1.2.0 <2.0.0'], - ['^0.0.1', '>=0.0.1 <0.0.2'], - ['^0.0.1-beta', '>=0.0.1-beta <0.0.2'], - ['^0.1.2', '>=0.1.2 <0.2.0'], - ['^1.2.3', '>=1.2.3 <2.0.0'], - ['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0'], - ['<1', '<1.0.0'], - ['< 1', '<1.0.0'], - ['>=1', '>=1.0.0'], - ['>= 1', '>=1.0.0'], - ['<1.2', '<1.2.0'], - ['< 1.2', '<1.2.0'], - ['1', '>=1.0.0 <2.0.0'], - ['>01.02.03', '>1.2.3', true], - ['>01.02.03', null], - ['~1.2.3beta', '>=1.2.3-beta <1.3.0', true], - ['~1.2.3beta', null], - ['^ 1.2 ^ 1', '>=1.2.0 <2.0.0 >=1.0.0 <2.0.0'] - ].forEach(function(v) { - var pre = v[0]; - var wanted = v[1]; - var loose = v[2]; - var found = validRange(pre, loose); - - t.equal(found, wanted, 'validRange(' + pre + ') === ' + wanted); - }); - - t.end(); -}); - -test('\ncomparators test', function(t) { - // [range, comparators] - // turn range into a set of individual comparators - [['1.0.0 - 2.0.0', [['>=1.0.0', '<=2.0.0']]], - ['1.0.0', [['1.0.0']]], - ['>=*', [['']]], - ['', [['']]], - ['*', [['']]], - ['*', [['']]], - ['>=1.0.0', [['>=1.0.0']]], - ['>=1.0.0', [['>=1.0.0']]], - ['>=1.0.0', [['>=1.0.0']]], - ['>1.0.0', [['>1.0.0']]], - ['>1.0.0', [['>1.0.0']]], - ['<=2.0.0', [['<=2.0.0']]], - ['1', [['>=1.0.0', '<2.0.0']]], - ['<=2.0.0', [['<=2.0.0']]], - ['<=2.0.0', [['<=2.0.0']]], - ['<2.0.0', [['<2.0.0']]], - ['<2.0.0', [['<2.0.0']]], - ['>= 1.0.0', [['>=1.0.0']]], - ['>= 1.0.0', [['>=1.0.0']]], - ['>= 1.0.0', [['>=1.0.0']]], - ['> 1.0.0', [['>1.0.0']]], - ['> 1.0.0', [['>1.0.0']]], - ['<= 2.0.0', [['<=2.0.0']]], - ['<= 2.0.0', [['<=2.0.0']]], - ['<= 2.0.0', [['<=2.0.0']]], - ['< 2.0.0', [['<2.0.0']]], - ['<\t2.0.0', [['<2.0.0']]], - ['>=0.1.97', [['>=0.1.97']]], - ['>=0.1.97', [['>=0.1.97']]], - ['0.1.20 || 1.2.4', [['0.1.20'], ['1.2.4']]], - ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], - ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], - ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], - ['||', [[''], ['']]], - ['2.x.x', [['>=2.0.0', '<3.0.0']]], - ['1.2.x', [['>=1.2.0', '<1.3.0']]], - ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], - ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], - ['x', [['']]], - ['2.*.*', [['>=2.0.0', '<3.0.0']]], - ['1.2.*', [['>=1.2.0', '<1.3.0']]], - ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], - ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], - ['*', [['']]], - ['2', [['>=2.0.0', '<3.0.0']]], - ['2.3', [['>=2.3.0', '<2.4.0']]], - ['~2.4', [['>=2.4.0', '<2.5.0']]], - ['~2.4', [['>=2.4.0', '<2.5.0']]], - ['~>3.2.1', [['>=3.2.1', '<3.3.0']]], - ['~1', [['>=1.0.0', '<2.0.0']]], - ['~>1', [['>=1.0.0', '<2.0.0']]], - ['~> 1', [['>=1.0.0', '<2.0.0']]], - ['~1.0', [['>=1.0.0', '<1.1.0']]], - ['~ 1.0', [['>=1.0.0', '<1.1.0']]], - ['~ 1.0.3', [['>=1.0.3', '<1.1.0']]], - ['~> 1.0.3', [['>=1.0.3', '<1.1.0']]], - ['<1', [['<1.0.0']]], - ['< 1', [['<1.0.0']]], - ['>=1', [['>=1.0.0']]], - ['>= 1', [['>=1.0.0']]], - ['<1.2', [['<1.2.0']]], - ['< 1.2', [['<1.2.0']]], - ['1', [['>=1.0.0', '<2.0.0']]], - ['1 2', [['>=1.0.0', '<2.0.0', '>=2.0.0', '<3.0.0']]], - ['1.2 - 3.4.5', [['>=1.2.0', '<=3.4.5']]], - ['1.2.3 - 3.4', [['>=1.2.3', '<3.5.0']]], - ['1.2.3 - 3', [['>=1.2.3', '<4.0.0']]], - ['>*', [['<0.0.0']]], - ['<*', [['<0.0.0']]] - ].forEach(function(v) { - var pre = v[0]; - var wanted = v[1]; - var found = toComparators(v[0]); - var jw = JSON.stringify(wanted); - t.equivalent(found, wanted, 'toComparators(' + pre + ') === ' + jw); - }); - - t.end(); -}); - -test('\ninvalid version numbers', function(t) { - ['1.2.3.4', - 'NOT VALID', - 1.2, - null, - 'Infinity.NaN.Infinity' - ].forEach(function(v) { - t.throws(function() { - new SemVer(v); - }, {name:'TypeError', message:'Invalid Version: ' + v}); - }); - - t.end(); -}); - -test('\nstrict vs loose version numbers', function(t) { - [['=1.2.3', '1.2.3'], - ['01.02.03', '1.2.3'], - ['1.2.3-beta.01', '1.2.3-beta.1'], - [' =1.2.3', '1.2.3'], - ['1.2.3foo', '1.2.3-foo'] - ].forEach(function(v) { - var loose = v[0]; - var strict = v[1]; - t.throws(function() { - new SemVer(loose); - }); - var lv = new SemVer(loose, true); - t.equal(lv.version, strict); - t.ok(eq(loose, strict, true)); - t.throws(function() { - eq(loose, strict); - }); - t.throws(function() { - new SemVer(strict).compare(loose); - }); - }); - t.end(); -}); - -test('\nstrict vs loose ranges', function(t) { - [['>=01.02.03', '>=1.2.3'], - ['~1.02.03beta', '>=1.2.3-beta <1.3.0'] - ].forEach(function(v) { - var loose = v[0]; - var comps = v[1]; - t.throws(function() { - new Range(loose); - }); - t.equal(new Range(loose, true).range, comps); - }); - t.end(); -}); - -test('\nmax satisfying', function(t) { - [[['1.2.3', '1.2.4'], '1.2', '1.2.4'], - [['1.2.4', '1.2.3'], '1.2', '1.2.4'], - [['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.6'], - [['1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2', '2.0.0b3', '2.0.0', '2.1.0'], '~2.0.0', '2.0.0', true] - ].forEach(function(v) { - var versions = v[0]; - var range = v[1]; - var expect = v[2]; - var loose = v[3]; - var actual = semver.maxSatisfying(versions, range, loose); - t.equal(actual, expect); - }); - t.end(); -}); diff --git a/node_modules/semver/test/ltr.js b/node_modules/semver/test/ltr.js deleted file mode 100644 index 0f7167d..0000000 --- a/node_modules/semver/test/ltr.js +++ /dev/null @@ -1,181 +0,0 @@ -var tap = require('tap'); -var test = tap.test; -var semver = require('../semver.js'); -var ltr = semver.ltr; - -test('\nltr tests', function(t) { - // [range, version, loose] - // Version should be less than range - [ - ['~1.2.2', '1.2.1'], - ['~0.6.1-1', '0.6.1-0'], - ['1.0.0 - 2.0.0', '0.0.1'], - ['1.0.0-beta.2', '1.0.0-beta.1'], - ['1.0.0', '0.0.0'], - ['>=2.0.0', '1.1.1'], - ['>=2.0.0', '1.2.9'], - ['>2.0.0', '2.0.0'], - ['0.1.20 || 1.2.4', '0.1.5'], - ['2.x.x', '1.0.0'], - ['1.2.x', '1.1.0'], - ['1.2.x || 2.x', '1.0.0'], - ['2.*.*', '1.0.1'], - ['1.2.*', '1.1.3'], - ['1.2.* || 2.*', '1.1.9999'], - ['2', '1.0.0'], - ['2.3', '2.2.2'], - ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0 - ['~2.4', '2.3.5'], - ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0 - ['~1', '0.2.3'], // >=1.0.0 <2.0.0 - ['~>1', '0.2.4'], - ['~> 1', '0.2.3'], - ['~1.0', '0.1.2'], // >=1.0.0 <1.1.0 - ['~ 1.0', '0.1.0'], - ['>1.2', '1.2.0'], - ['> 1.2', '1.2.1'], - ['1', '0.0.0beta', true], - ['~v0.5.4-pre', '0.5.4-alpha'], - ['~v0.5.4-pre', '0.5.4-alpha'], - ['=0.7.x', '0.6.0'], - ['=0.7.x', '0.6.0-asdf'], - ['>=0.7.x', '0.6.0'], - ['~1.2.2', '1.2.1'], - ['1.0.0 - 2.0.0', '0.2.3'], - ['1.0.0', '0.0.1'], - ['>=2.0.0', '1.0.0'], - ['>=2.0.0', '1.9999.9999'], - ['>=2.0.0', '1.2.9'], - ['>2.0.0', '2.0.0'], - ['>2.0.0', '1.2.9'], - ['2.x.x', '1.1.3'], - ['1.2.x', '1.1.3'], - ['1.2.x || 2.x', '1.1.3'], - ['2.*.*', '1.1.3'], - ['1.2.*', '1.1.3'], - ['1.2.* || 2.*', '1.1.3'], - ['2', '1.9999.9999'], - ['2.3', '2.2.1'], - ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0 - ['~>3.2.1', '2.3.2'], // >=3.2.1 <3.3.0 - ['~1', '0.2.3'], // >=1.0.0 <2.0.0 - ['~>1', '0.2.3'], - ['~1.0', '0.0.0'], // >=1.0.0 <1.1.0 - ['>1', '1.0.0'], - ['2', '1.0.0beta', true], - ['>1', '1.0.0beta', true], - ['> 1', '1.0.0beta', true], - ['=0.7.x', '0.6.2'], - ['=0.7.x', '0.7.0-asdf'], - ['^1', '1.0.0-0'], - ['>=0.7.x', '0.7.0-asdf'], - ['1', '1.0.0beta', true], - ['>=0.7.x', '0.6.2'], - ['>1.2.3', '1.3.0-alpha'] - ].forEach(function(tuple) { - var range = tuple[0]; - var version = tuple[1]; - var loose = tuple[2] || false; - var msg = 'ltr(' + version + ', ' + range + ', ' + loose + ')'; - t.ok(ltr(version, range, loose), msg); - }); - t.end(); -}); - -test('\nnegative ltr tests', function(t) { - // [range, version, loose] - // Version should NOT be less than range - [ - ['~ 1.0', '1.1.0'], - ['~0.6.1-1', '0.6.1-1'], - ['1.0.0 - 2.0.0', '1.2.3'], - ['1.0.0 - 2.0.0', '2.9.9'], - ['1.0.0', '1.0.0'], - ['>=*', '0.2.4'], - ['', '1.0.0', true], - ['*', '1.2.3'], - ['>=1.0.0', '1.0.0'], - ['>=1.0.0', '1.0.1'], - ['>=1.0.0', '1.1.0'], - ['>1.0.0', '1.0.1'], - ['>1.0.0', '1.1.0'], - ['<=2.0.0', '2.0.0'], - ['<=2.0.0', '1.9999.9999'], - ['<=2.0.0', '0.2.9'], - ['<2.0.0', '1.9999.9999'], - ['<2.0.0', '0.2.9'], - ['>= 1.0.0', '1.0.0'], - ['>= 1.0.0', '1.0.1'], - ['>= 1.0.0', '1.1.0'], - ['> 1.0.0', '1.0.1'], - ['> 1.0.0', '1.1.0'], - ['<= 2.0.0', '2.0.0'], - ['<= 2.0.0', '1.9999.9999'], - ['<= 2.0.0', '0.2.9'], - ['< 2.0.0', '1.9999.9999'], - ['<\t2.0.0', '0.2.9'], - ['>=0.1.97', 'v0.1.97'], - ['>=0.1.97', '0.1.97'], - ['0.1.20 || 1.2.4', '1.2.4'], - ['0.1.20 || >1.2.4', '1.2.4'], - ['0.1.20 || 1.2.4', '1.2.3'], - ['0.1.20 || 1.2.4', '0.1.20'], - ['>=0.2.3 || <0.0.1', '0.0.0'], - ['>=0.2.3 || <0.0.1', '0.2.3'], - ['>=0.2.3 || <0.0.1', '0.2.4'], - ['||', '1.3.4'], - ['2.x.x', '2.1.3'], - ['1.2.x', '1.2.3'], - ['1.2.x || 2.x', '2.1.3'], - ['1.2.x || 2.x', '1.2.3'], - ['x', '1.2.3'], - ['2.*.*', '2.1.3'], - ['1.2.*', '1.2.3'], - ['1.2.* || 2.*', '2.1.3'], - ['1.2.* || 2.*', '1.2.3'], - ['1.2.* || 2.*', '1.2.3'], - ['*', '1.2.3'], - ['2', '2.1.2'], - ['2.3', '2.3.1'], - ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 - ['~2.4', '2.4.5'], - ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0 - ['~1', '1.2.3'], // >=1.0.0 <2.0.0 - ['~>1', '1.2.3'], - ['~> 1', '1.2.3'], - ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0 - ['~ 1.0', '1.0.2'], - ['>=1', '1.0.0'], - ['>= 1', '1.0.0'], - ['<1.2', '1.1.1'], - ['< 1.2', '1.1.1'], - ['~v0.5.4-pre', '0.5.5'], - ['~v0.5.4-pre', '0.5.4'], - ['=0.7.x', '0.7.2'], - ['>=0.7.x', '0.7.2'], - ['<=0.7.x', '0.6.2'], - ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'], - ['>=0.2.3 <=0.2.4', '0.2.4'], - ['1.0.0 - 2.0.0', '2.0.0'], - ['^3.0.0', '4.0.0'], - ['^1.0.0 || ~2.0.1', '2.0.0'], - ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'], - ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true], - ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true], - ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'], - ['^1.0.0alpha', '1.0.0beta', true], - ['~1.0.0alpha', '1.0.0beta', true], - ['^1.0.0-alpha', '1.0.0beta', true], - ['~1.0.0-alpha', '1.0.0beta', true], - ['^1.0.0-alpha', '1.0.0-beta'], - ['~1.0.0-alpha', '1.0.0-beta'], - ['=0.1.0', '1.0.0'] - ].forEach(function(tuple) { - var range = tuple[0]; - var version = tuple[1]; - var loose = tuple[2] || false; - var msg = '!ltr(' + version + ', ' + range + ', ' + loose + ')'; - t.notOk(ltr(version, range, loose), msg); - }); - t.end(); -}); diff --git a/node_modules/semver/test/major-minor-patch.js b/node_modules/semver/test/major-minor-patch.js deleted file mode 100644 index e9d4039..0000000 --- a/node_modules/semver/test/major-minor-patch.js +++ /dev/null @@ -1,72 +0,0 @@ -var tap = require('tap'); -var test = tap.test; -var semver = require('../semver.js'); - -test('\nmajor tests', function(t) { - // [range, version] - // Version should be detectable despite extra characters - [ - ['1.2.3', 1], - [' 1.2.3 ', 1], - [' 2.2.3-4 ', 2], - [' 3.2.3-pre ', 3], - ['v5.2.3', 5], - [' v8.2.3 ', 8], - ['\t13.2.3', 13], - ['=21.2.3', 21, true], - ['v=34.2.3', 34, true] - ].forEach(function(tuple) { - var range = tuple[0]; - var version = tuple[1]; - var loose = tuple[2] || false; - var msg = 'major(' + range + ') = ' + version; - t.equal(semver.major(range, loose), version, msg); - }); - t.end(); -}); - -test('\nminor tests', function(t) { - // [range, version] - // Version should be detectable despite extra characters - [ - ['1.1.3', 1], - [' 1.1.3 ', 1], - [' 1.2.3-4 ', 2], - [' 1.3.3-pre ', 3], - ['v1.5.3', 5], - [' v1.8.3 ', 8], - ['\t1.13.3', 13], - ['=1.21.3', 21, true], - ['v=1.34.3', 34, true] - ].forEach(function(tuple) { - var range = tuple[0]; - var version = tuple[1]; - var loose = tuple[2] || false; - var msg = 'minor(' + range + ') = ' + version; - t.equal(semver.minor(range, loose), version, msg); - }); - t.end(); -}); - -test('\npatch tests', function(t) { - // [range, version] - // Version should be detectable despite extra characters - [ - ['1.2.1', 1], - [' 1.2.1 ', 1], - [' 1.2.2-4 ', 2], - [' 1.2.3-pre ', 3], - ['v1.2.5', 5], - [' v1.2.8 ', 8], - ['\t1.2.13', 13], - ['=1.2.21', 21, true], - ['v=1.2.34', 34, true] - ].forEach(function(tuple) { - var range = tuple[0]; - var version = tuple[1]; - var loose = tuple[2] || false; - var msg = 'patch(' + range + ') = ' + version; - t.equal(semver.patch(range, loose), version, msg); - }); - t.end(); -}); diff --git a/node_modules/set-blocking/CHANGELOG.md b/node_modules/set-blocking/CHANGELOG.md deleted file mode 100644 index 03bf591..0000000 --- a/node_modules/set-blocking/CHANGELOG.md +++ /dev/null @@ -1,26 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -# [2.0.0](https://github.com/yargs/set-blocking/compare/v1.0.0...v2.0.0) (2016-05-17) - - -### Features - -* add an isTTY check ([#3](https://github.com/yargs/set-blocking/issues/3)) ([66ce277](https://github.com/yargs/set-blocking/commit/66ce277)) - - -### BREAKING CHANGES - -* stdio/stderr will not be set to blocking if isTTY === false - - - - -# 1.0.0 (2016-05-14) - - -### Features - -* implemented shim for stream._handle.setBlocking ([6bde0c0](https://github.com/yargs/set-blocking/commit/6bde0c0)) diff --git a/node_modules/set-blocking/LICENSE.txt b/node_modules/set-blocking/LICENSE.txt deleted file mode 100644 index 836440b..0000000 --- a/node_modules/set-blocking/LICENSE.txt +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/set-blocking/README.md b/node_modules/set-blocking/README.md deleted file mode 100644 index e93b420..0000000 --- a/node_modules/set-blocking/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# set-blocking - -[![Build Status](https://travis-ci.org/yargs/set-blocking.svg)](https://travis-ci.org/yargs/set-blocking) -[![NPM version](https://img.shields.io/npm/v/set-blocking.svg)](https://www.npmjs.com/package/set-blocking) -[![Coverage Status](https://coveralls.io/repos/yargs/set-blocking/badge.svg?branch=)](https://coveralls.io/r/yargs/set-blocking?branch=master) -[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) - -set blocking `stdio` and `stderr` ensuring that terminal output does not truncate. - -```js -const setBlocking = require('set-blocking') -setBlocking(true) -console.log(someLargeStringToOutput) -``` - -## Historical Context/Word of Warning - -This was created as a shim to address the bug discussed in [node #6456](https://github.com/nodejs/node/issues/6456). This bug crops up on -newer versions of Node.js (`0.12+`), truncating terminal output. - -You should be mindful of the side-effects caused by using `set-blocking`: - -* if your module sets blocking to `true`, it will effect other modules - consuming your library. In [yargs](https://github.com/yargs/yargs/blob/master/yargs.js#L653) we only call - `setBlocking(true)` once we already know we are about to call `process.exit(code)`. -* this patch will not apply to subprocesses spawned with `isTTY = true`, this is - the [default `spawn()` behavior](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options). - -## License - -ISC diff --git a/node_modules/set-blocking/index.js b/node_modules/set-blocking/index.js deleted file mode 100644 index 6f78774..0000000 --- a/node_modules/set-blocking/index.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = function (blocking) { - [process.stdout, process.stderr].forEach(function (stream) { - if (stream._handle && stream.isTTY && typeof stream._handle.setBlocking === 'function') { - stream._handle.setBlocking(blocking) - } - }) -} diff --git a/node_modules/set-blocking/package.json b/node_modules/set-blocking/package.json deleted file mode 100644 index 38e2fb6..0000000 --- a/node_modules/set-blocking/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "set-blocking@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "set-blocking@>=2.0.0 <3.0.0", - "_id": "set-blocking@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/set-blocking", - "_nodeVersion": "0.12.7", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/set-blocking-2.0.0.tgz_1463525966987_0.5456729622092098" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": {}, - "_requested": { - "name": "set-blocking", - "raw": "set-blocking@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs" - ], - "_resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "_shasum": "045f9782d011ae9a6803ddd382b24392b3d890f7", - "_shrinkwrap": null, - "_spec": "set-blocking@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "ben@npmjs.com", - "name": "Ben Coe" - }, - "bugs": { - "url": "https://github.com/yargs/set-blocking/issues" - }, - "dependencies": {}, - "description": "set blocking stdio and stderr ensuring that terminal output does not truncate", - "devDependencies": { - "chai": "^3.5.0", - "coveralls": "^2.11.9", - "mocha": "^2.4.5", - "nyc": "^6.4.4", - "standard": "^7.0.1", - "standard-version": "^2.2.1" - }, - "directories": {}, - "dist": { - "shasum": "045f9782d011ae9a6803ddd382b24392b3d890f7", - "tarball": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - }, - "files": [ - "index.js", - "LICENSE.txt" - ], - "gitHead": "7eec10577b5fff264de477ba3b9d07f404946eff", - "homepage": "https://github.com/yargs/set-blocking#readme", - "keywords": [ - "flush", - "terminal", - "blocking", - "shim", - "stdio", - "stderr" - ], - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - } - ], - "name": "set-blocking", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/yargs/set-blocking.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "pretest": "standard", - "test": "nyc mocha ./test/*.js", - "version": "standard-version" - }, - "version": "2.0.0" -} diff --git a/node_modules/sha.js/.npmignore b/node_modules/sha.js/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/sha.js/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/sha.js/.travis.yml b/node_modules/sha.js/.travis.yml deleted file mode 100644 index 1c0bada..0000000 --- a/node_modules/sha.js/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -sudo: false -os: - - linux -language: node_js -node_js: - - "0.10" - - "0.11" - - "0.12" - - "4" - - "5" -env: - matrix: - - TEST_SUITE=unit -matrix: - include: - - node_js: "4" - env: TEST_SUITE=lint -script: npm run $TEST_SUITE diff --git a/node_modules/sha.js/LICENSE b/node_modules/sha.js/LICENSE deleted file mode 100644 index 92ba9d3..0000000 --- a/node_modules/sha.js/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2013-2014 sha.js contributors - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/sha.js/README.md b/node_modules/sha.js/README.md deleted file mode 100644 index fbce231..0000000 --- a/node_modules/sha.js/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# sha.js - -Streamable SHA hashes in pure javascript. - -[![build status](https://secure.travis-ci.org/crypto-browserify/sha.js.png)](http://travis-ci.org/crypto-browserify/sha.js) -[![NPM](http://img.shields.io/npm/v/sha.js.svg)](https://www.npmjs.org/package/sha.js) - - -## Example - -``` js -var createHash = require('sha.js') - -var sha256 = createHash('sha256') -var sha512 = createHash('sha512') - -var h = sha256.update('abc', 'utf8').digest('hex') -console.log(h) //ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad - -//LEGACY, do not use in new systems: -var sha0 = createHash('sha') -var sha1 = createHash('sha1') - - -``` - -## supported hashes - -sha.js currently implements: - - -* sha256 -* sha512 -* sha1 (legacy, no not use in new systems) -* sha (legacy, no not use in new systems) - -## Note - -Note, this doesn't actually implement a stream, but wrapping this in a stream is trivial. -but is does update incrementally, so you can hash things larger than ram, and also, since it reuses -the typedarrays, it uses a constant amount of memory (except when using base64 or utf8 encoding, -see code comments) - - -## Acknowledgements - -This work is derived from Paul Johnston's ["A JavaScript implementation of the Secure Hash Algorithm"] -(http://pajhome.org.uk/crypt/md5/sha1.html) - - - -## License - -MIT diff --git a/node_modules/sha.js/bin.js b/node_modules/sha.js/bin.js deleted file mode 100755 index 0a4e95b..0000000 --- a/node_modules/sha.js/bin.js +++ /dev/null @@ -1,43 +0,0 @@ -#! /usr/bin/env node - -var createHash = require('./browserify') -var argv = process.argv.slice(2) - -function pipe (algorithm, s) { - var start = Date.now() - var hash = createHash(algorithm || 'sha1') - - s.on('data', function (data) { - hash.update(data) - }) - - s.on('end', function () { - if (process.env.DEBUG) { - return console.log(hash.digest('hex'), Date.now() - start) - } - - console.log(hash.digest('hex')) - }) -} - -function usage () { - console.error('sha.js [algorithm=sha1] [filename] # hash filename with algorithm') - console.error('input | sha.js [algorithm=sha1] # hash stdin with algorithm') - console.error('sha.js --help # display this message') -} - -if (!process.stdin.isTTY) { - pipe(argv[0], process.stdin) - -} else if (argv.length) { - if (/--help|-h/.test(argv[0])) { - usage() - - } else { - var filename = argv.pop() - var algorithm = argv.pop() - pipe(algorithm, require('fs').createReadStream(filename)) - } -} else { - usage() -} diff --git a/node_modules/sha.js/hash.js b/node_modules/sha.js/hash.js deleted file mode 100644 index 09579d2..0000000 --- a/node_modules/sha.js/hash.js +++ /dev/null @@ -1,69 +0,0 @@ -// prototype class for hash functions -function Hash (blockSize, finalSize) { - this._block = new Buffer(blockSize) - this._finalSize = finalSize - this._blockSize = blockSize - this._len = 0 - this._s = 0 -} - -Hash.prototype.update = function (data, enc) { - if (typeof data === 'string') { - enc = enc || 'utf8' - data = new Buffer(data, enc) - } - - var l = this._len += data.length - var s = this._s || 0 - var f = 0 - var buffer = this._block - - while (s < l) { - var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize)) - var ch = (t - f) - - for (var i = 0; i < ch; i++) { - buffer[(s % this._blockSize) + i] = data[i + f] - } - - s += ch - f += ch - - if ((s % this._blockSize) === 0) { - this._update(buffer) - } - } - this._s = s - - return this -} - -Hash.prototype.digest = function (enc) { - // Suppose the length of the message M, in bits, is l - var l = this._len * 8 - - // Append the bit 1 to the end of the message - this._block[this._len % this._blockSize] = 0x80 - - // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize - this._block.fill(0, this._len % this._blockSize + 1) - - if (l % (this._blockSize * 8) >= this._finalSize * 8) { - this._update(this._block) - this._block.fill(0) - } - - // to this append the block which is equal to the number l written in binary - // TODO: handle case where l is > Math.pow(2, 29) - this._block.writeInt32BE(l, this._blockSize - 4) - - var hash = this._update(this._block) || this._hash() - - return enc ? hash.toString(enc) : hash -} - -Hash.prototype._update = function () { - throw new Error('_update must be implemented by subclass') -} - -module.exports = Hash diff --git a/node_modules/sha.js/hexpp.js b/node_modules/sha.js/hexpp.js deleted file mode 100644 index 4f1e921..0000000 --- a/node_modules/sha.js/hexpp.js +++ /dev/null @@ -1,26 +0,0 @@ -function toHex (buf, group, wrap, LE) { - buf = buf.buffer || buf - var s = '' - var l = buf.byteLength || buf.length - for (var i = 0; i < l ; i++) { - var byteParam = (i & 0xfffffffc) | (!LE ? i % 4 : 3 - i % 4) - s += ((buf[byteParam] >> 4).toString(16)) + - ((buf[byteParam] & 0xf).toString(16)) + - (group - 1 === i % group ? ' ' : '') + - (wrap - 1 === i % wrap ? '\n' : '') - } - return s -} - -var hexpp = module.exports = function hexpp (buffer, opts) { - opts = opts || {} - opts.groups = opts.groups || 4 - opts.wrap = opts.wrap || 16 - return toHex(buffer, opts.groups, opts.wrap, opts.bigendian, opts.ints) -} - -hexpp.defaults = function (opts) { - return function (b) { - return hexpp(b, opts) - } -} diff --git a/node_modules/sha.js/index.js b/node_modules/sha.js/index.js deleted file mode 100644 index 87cdf49..0000000 --- a/node_modules/sha.js/index.js +++ /dev/null @@ -1,15 +0,0 @@ -var exports = module.exports = function SHA (algorithm) { - algorithm = algorithm.toLowerCase() - - var Algorithm = exports[algorithm] - if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') - - return new Algorithm() -} - -exports.sha = require('./sha') -exports.sha1 = require('./sha1') -exports.sha224 = require('./sha224') -exports.sha256 = require('./sha256') -exports.sha384 = require('./sha384') -exports.sha512 = require('./sha512') diff --git a/node_modules/sha.js/package.json b/node_modules/sha.js/package.json deleted file mode 100644 index 46a07f9..0000000 --- a/node_modules/sha.js/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "sha.js@^2.3.6", - "/Users/jbaylina/git/MVP/node_modules/create-hash" - ] - ], - "_from": "sha.js@>=2.3.6 <3.0.0", - "_id": "sha.js@2.4.5", - "_inCache": true, - "_installable": true, - "_location": "/sha.js", - "_nodeVersion": "5.7.0", - "_npmOperationalInternal": { - "host": "packages-5-east.internal.npmjs.com", - "tmp": "tmp/sha.js-2.4.5.tgz_1456441454357_0.8692891360260546" - }, - "_npmUser": { - "email": "email@dcousens.com", - "name": "dcousens" - }, - "_npmVersion": "3.7.3", - "_phantomChildren": {}, - "_requested": { - "name": "sha.js", - "raw": "sha.js@^2.3.6", - "rawSpec": "^2.3.6", - "scope": null, - "spec": ">=2.3.6 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/create-hash" - ], - "_resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.5.tgz", - "_shasum": "27d171efcc82a118b99639ff581660242b506e7c", - "_shrinkwrap": null, - "_spec": "sha.js@^2.3.6", - "_where": "/Users/jbaylina/git/MVP/node_modules/create-hash", - "author": { - "email": "dominic.tarr@gmail.com", - "name": "Dominic Tarr", - "url": "dominictarr.com" - }, - "bin": { - "sha.js": "./bin.js" - }, - "bugs": { - "url": "https://github.com/crypto-browserify/sha.js/issues" - }, - "dependencies": { - "inherits": "^2.0.1" - }, - "description": "Streamable SHA hashes in pure javascript", - "devDependencies": { - "buffer": "~2.3.2", - "hash-test-vectors": "^1.3.1", - "standard": "^4.0.0", - "tape": "~2.3.2", - "typedarray": "0.0.6" - }, - "directories": {}, - "dist": { - "shasum": "27d171efcc82a118b99639ff581660242b506e7c", - "tarball": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.5.tgz" - }, - "gitHead": "9d45c7871b96621ce3c7b9add507e0bcbdeda382", - "homepage": "https://github.com/crypto-browserify/sha.js", - "license": "MIT", - "maintainers": [ - { - "email": "dominic.tarr@gmail.com", - "name": "dominictarr" - }, - { - "email": "email@dcousens.com", - "name": "dcousens" - } - ], - "name": "sha.js", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/crypto-browserify/sha.js.git" - }, - "scripts": { - "lint": "standard", - "prepublish": "npm ls && npm run unit", - "test": "npm run lint && npm run unit", - "unit": "set -e; for t in test/*.js; do node $t; done;" - }, - "version": "2.4.5" -} diff --git a/node_modules/sha.js/sha.js b/node_modules/sha.js/sha.js deleted file mode 100644 index 7cde1b0..0000000 --- a/node_modules/sha.js/sha.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined - * in FIPS PUB 180-1 - * This source code is derived from sha1.js of the same repository. - * The difference between SHA-0 and SHA-1 is just a bitwise rotate left - * operation was added. - */ - -var inherits = require('inherits') -var Hash = require('./hash') - -var K = [ - 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 -] - -var W = new Array(80) - -function Sha () { - this.init() - this._w = W - - Hash.call(this, 64, 56) -} - -inherits(Sha, Hash) - -Sha.prototype.init = function () { - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 - - return this -} - -function rotl5 (num) { - return (num << 5) | (num >>> 27) -} - -function rotl30 (num) { - return (num << 30) | (num >>> 2) -} - -function ft (s, b, c, d) { - if (s === 0) return (b & c) | ((~b) & d) - if (s === 2) return (b & c) | (b & d) | (c & d) - return b ^ c ^ d -} - -Sha.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] - - for (var j = 0; j < 80; ++j) { - var s = ~~(j / 20) - var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 - - e = d - d = c - c = rotl30(b) - b = a - a = t - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 -} - -Sha.prototype._hash = function () { - var H = new Buffer(20) - - H.writeInt32BE(this._a | 0, 0) - H.writeInt32BE(this._b | 0, 4) - H.writeInt32BE(this._c | 0, 8) - H.writeInt32BE(this._d | 0, 12) - H.writeInt32BE(this._e | 0, 16) - - return H -} - -module.exports = Sha diff --git a/node_modules/sha.js/sha1.js b/node_modules/sha.js/sha1.js deleted file mode 100644 index 97f6b14..0000000 --- a/node_modules/sha.js/sha1.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined - * in FIPS PUB 180-1 - * Version 2.1a Copyright Paul Johnston 2000 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for details. - */ - -var inherits = require('inherits') -var Hash = require('./hash') - -var K = [ - 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 -] - -var W = new Array(80) - -function Sha1 () { - this.init() - this._w = W - - Hash.call(this, 64, 56) -} - -inherits(Sha1, Hash) - -Sha1.prototype.init = function () { - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 - - return this -} - -function rotl1 (num) { - return (num << 1) | (num >>> 31) -} - -function rotl5 (num) { - return (num << 5) | (num >>> 27) -} - -function rotl30 (num) { - return (num << 30) | (num >>> 2) -} - -function ft (s, b, c, d) { - if (s === 0) return (b & c) | ((~b) & d) - if (s === 2) return (b & c) | (b & d) | (c & d) - return b ^ c ^ d -} - -Sha1.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) - - for (var j = 0; j < 80; ++j) { - var s = ~~(j / 20) - var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 - - e = d - d = c - c = rotl30(b) - b = a - a = t - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 -} - -Sha1.prototype._hash = function () { - var H = new Buffer(20) - - H.writeInt32BE(this._a | 0, 0) - H.writeInt32BE(this._b | 0, 4) - H.writeInt32BE(this._c | 0, 8) - H.writeInt32BE(this._d | 0, 12) - H.writeInt32BE(this._e | 0, 16) - - return H -} - -module.exports = Sha1 diff --git a/node_modules/sha.js/sha224.js b/node_modules/sha.js/sha224.js deleted file mode 100644 index 31899ef..0000000 --- a/node_modules/sha.js/sha224.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ - -var inherits = require('inherits') -var Sha256 = require('./sha256') -var Hash = require('./hash') - -var W = new Array(64) - -function Sha224 () { - this.init() - - this._w = W // new Array(64) - - Hash.call(this, 64, 56) -} - -inherits(Sha224, Sha256) - -Sha224.prototype.init = function () { - this._a = 0xc1059ed8 - this._b = 0x367cd507 - this._c = 0x3070dd17 - this._d = 0xf70e5939 - this._e = 0xffc00b31 - this._f = 0x68581511 - this._g = 0x64f98fa7 - this._h = 0xbefa4fa4 - - return this -} - -Sha224.prototype._hash = function () { - var H = new Buffer(28) - - H.writeInt32BE(this._a, 0) - H.writeInt32BE(this._b, 4) - H.writeInt32BE(this._c, 8) - H.writeInt32BE(this._d, 12) - H.writeInt32BE(this._e, 16) - H.writeInt32BE(this._f, 20) - H.writeInt32BE(this._g, 24) - - return H -} - -module.exports = Sha224 diff --git a/node_modules/sha.js/sha256.js b/node_modules/sha.js/sha256.js deleted file mode 100644 index 69b60fe..0000000 --- a/node_modules/sha.js/sha256.js +++ /dev/null @@ -1,134 +0,0 @@ -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ - -var inherits = require('inherits') -var Hash = require('./hash') - -var K = [ - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 -] - -var W = new Array(64) - -function Sha256 () { - this.init() - - this._w = W // new Array(64) - - Hash.call(this, 64, 56) -} - -inherits(Sha256, Hash) - -Sha256.prototype.init = function () { - this._a = 0x6a09e667 - this._b = 0xbb67ae85 - this._c = 0x3c6ef372 - this._d = 0xa54ff53a - this._e = 0x510e527f - this._f = 0x9b05688c - this._g = 0x1f83d9ab - this._h = 0x5be0cd19 - - return this -} - -function ch (x, y, z) { - return z ^ (x & (y ^ z)) -} - -function maj (x, y, z) { - return (x & y) | (z & (x | y)) -} - -function sigma0 (x) { - return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) -} - -function sigma1 (x) { - return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) -} - -function gamma0 (x) { - return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) -} - -function gamma1 (x) { - return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) -} - -Sha256.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - var f = this._f | 0 - var g = this._g | 0 - var h = this._h | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 - - for (var j = 0; j < 64; ++j) { - var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 - var T2 = (sigma0(a) + maj(a, b, c)) | 0 - - h = g - g = f - f = e - e = (d + T1) | 0 - d = c - c = b - b = a - a = (T1 + T2) | 0 - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 - this._f = (f + this._f) | 0 - this._g = (g + this._g) | 0 - this._h = (h + this._h) | 0 -} - -Sha256.prototype._hash = function () { - var H = new Buffer(32) - - H.writeInt32BE(this._a, 0) - H.writeInt32BE(this._b, 4) - H.writeInt32BE(this._c, 8) - H.writeInt32BE(this._d, 12) - H.writeInt32BE(this._e, 16) - H.writeInt32BE(this._f, 20) - H.writeInt32BE(this._g, 24) - H.writeInt32BE(this._h, 28) - - return H -} - -module.exports = Sha256 diff --git a/node_modules/sha.js/sha384.js b/node_modules/sha.js/sha384.js deleted file mode 100644 index dc48312..0000000 --- a/node_modules/sha.js/sha384.js +++ /dev/null @@ -1,56 +0,0 @@ -var inherits = require('inherits') -var SHA512 = require('./sha512') -var Hash = require('./hash') - -var W = new Array(160) - -function Sha384 () { - this.init() - this._w = W - - Hash.call(this, 128, 112) -} - -inherits(Sha384, SHA512) - -Sha384.prototype.init = function () { - this._ah = 0xcbbb9d5d - this._bh = 0x629a292a - this._ch = 0x9159015a - this._dh = 0x152fecd8 - this._eh = 0x67332667 - this._fh = 0x8eb44a87 - this._gh = 0xdb0c2e0d - this._hh = 0x47b5481d - - this._al = 0xc1059ed8 - this._bl = 0x367cd507 - this._cl = 0x3070dd17 - this._dl = 0xf70e5939 - this._el = 0xffc00b31 - this._fl = 0x68581511 - this._gl = 0x64f98fa7 - this._hl = 0xbefa4fa4 - - return this -} - -Sha384.prototype._hash = function () { - var H = new Buffer(48) - - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) - } - - writeInt64BE(this._ah, this._al, 0) - writeInt64BE(this._bh, this._bl, 8) - writeInt64BE(this._ch, this._cl, 16) - writeInt64BE(this._dh, this._dl, 24) - writeInt64BE(this._eh, this._el, 32) - writeInt64BE(this._fh, this._fl, 40) - - return H -} - -module.exports = Sha384 diff --git a/node_modules/sha.js/sha512.js b/node_modules/sha.js/sha512.js deleted file mode 100644 index 204a7b8..0000000 --- a/node_modules/sha.js/sha512.js +++ /dev/null @@ -1,259 +0,0 @@ -var inherits = require('inherits') -var Hash = require('./hash') - -var K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -] - -var W = new Array(160) - -function Sha512 () { - this.init() - this._w = W - - Hash.call(this, 128, 112) -} - -inherits(Sha512, Hash) - -Sha512.prototype.init = function () { - this._ah = 0x6a09e667 - this._bh = 0xbb67ae85 - this._ch = 0x3c6ef372 - this._dh = 0xa54ff53a - this._eh = 0x510e527f - this._fh = 0x9b05688c - this._gh = 0x1f83d9ab - this._hh = 0x5be0cd19 - - this._al = 0xf3bcc908 - this._bl = 0x84caa73b - this._cl = 0xfe94f82b - this._dl = 0x5f1d36f1 - this._el = 0xade682d1 - this._fl = 0x2b3e6c1f - this._gl = 0xfb41bd6b - this._hl = 0x137e2179 - - return this -} - -function Ch (x, y, z) { - return z ^ (x & (y ^ z)) -} - -function maj (x, y, z) { - return (x & y) | (z & (x | y)) -} - -function sigma0 (x, xl) { - return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) -} - -function sigma1 (x, xl) { - return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) -} - -function Gamma0 (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) -} - -function Gamma0l (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) -} - -function Gamma1 (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) -} - -function Gamma1l (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) -} - -function getCarry (a, b) { - return (a >>> 0) < (b >>> 0) ? 1 : 0 -} - -Sha512.prototype._update = function (M) { - var W = this._w - - var ah = this._ah | 0 - var bh = this._bh | 0 - var ch = this._ch | 0 - var dh = this._dh | 0 - var eh = this._eh | 0 - var fh = this._fh | 0 - var gh = this._gh | 0 - var hh = this._hh | 0 - - var al = this._al | 0 - var bl = this._bl | 0 - var cl = this._cl | 0 - var dl = this._dl | 0 - var el = this._el | 0 - var fl = this._fl | 0 - var gl = this._gl | 0 - var hl = this._hl | 0 - - for (var i = 0; i < 32; i += 2) { - W[i] = M.readInt32BE(i * 4) - W[i + 1] = M.readInt32BE(i * 4 + 4) - } - for (; i < 160; i += 2) { - var xh = W[i - 15 * 2] - var xl = W[i - 15 * 2 + 1] - var gamma0 = Gamma0(xh, xl) - var gamma0l = Gamma0l(xl, xh) - - xh = W[i - 2 * 2] - xl = W[i - 2 * 2 + 1] - var gamma1 = Gamma1(xh, xl) - var gamma1l = Gamma1l(xl, xh) - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7h = W[i - 7 * 2] - var Wi7l = W[i - 7 * 2 + 1] - - var Wi16h = W[i - 16 * 2] - var Wi16l = W[i - 16 * 2 + 1] - - var Wil = (gamma0l + Wi7l) | 0 - var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 - Wil = (Wil + gamma1l) | 0 - Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 - Wil = (Wil + Wi16l) | 0 - Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 - - W[i] = Wih - W[i + 1] = Wil - } - - for (var j = 0; j < 160; j += 2) { - Wih = W[j] - Wil = W[j + 1] - - var majh = maj(ah, bh, ch) - var majl = maj(al, bl, cl) - - var sigma0h = sigma0(ah, al) - var sigma0l = sigma0(al, ah) - var sigma1h = sigma1(eh, el) - var sigma1l = sigma1(el, eh) - - // t1 = h + sigma1 + ch + K[j] + W[j] - var Kih = K[j] - var Kil = K[j + 1] - - var chh = Ch(eh, fh, gh) - var chl = Ch(el, fl, gl) - - var t1l = (hl + sigma1l) | 0 - var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 - t1l = (t1l + chl) | 0 - t1h = (t1h + chh + getCarry(t1l, chl)) | 0 - t1l = (t1l + Kil) | 0 - t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 - t1l = (t1l + Wil) | 0 - t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 - - // t2 = sigma0 + maj - var t2l = (sigma0l + majl) | 0 - var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 - - hh = gh - hl = gl - gh = fh - gl = fl - fh = eh - fl = el - el = (dl + t1l) | 0 - eh = (dh + t1h + getCarry(el, dl)) | 0 - dh = ch - dl = cl - ch = bh - cl = bl - bh = ah - bl = al - al = (t1l + t2l) | 0 - ah = (t1h + t2h + getCarry(al, t1l)) | 0 - } - - this._al = (this._al + al) | 0 - this._bl = (this._bl + bl) | 0 - this._cl = (this._cl + cl) | 0 - this._dl = (this._dl + dl) | 0 - this._el = (this._el + el) | 0 - this._fl = (this._fl + fl) | 0 - this._gl = (this._gl + gl) | 0 - this._hl = (this._hl + hl) | 0 - - this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 - this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 - this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 - this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 - this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 - this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 - this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 - this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 -} - -Sha512.prototype._hash = function () { - var H = new Buffer(64) - - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) - } - - writeInt64BE(this._ah, this._al, 0) - writeInt64BE(this._bh, this._bl, 8) - writeInt64BE(this._ch, this._cl, 16) - writeInt64BE(this._dh, this._dl, 24) - writeInt64BE(this._eh, this._el, 32) - writeInt64BE(this._fh, this._fl, 40) - writeInt64BE(this._gh, this._gl, 48) - writeInt64BE(this._hh, this._hl, 56) - - return H -} - -module.exports = Sha512 diff --git a/node_modules/sha.js/test/hash.js b/node_modules/sha.js/test/hash.js deleted file mode 100644 index 2f376b4..0000000 --- a/node_modules/sha.js/test/hash.js +++ /dev/null @@ -1,86 +0,0 @@ -var hexpp = require('../hexpp').defaults({ bigendian: false }) -var tape = require('tape') -var Hash = require('../hash') - -var hex = '0A1B2C3D4E5F6G7H' - -function equal (t, a, b) { - t.equal(a.length, b.length) - - for (var i = 0; i < a.length; i++) { - t.equal(a[i], b[i]) - } -} - -var hexBuf = new Buffer([48, 65, 49, 66, 50, 67, 51, 68, 52, 69, 53, 70, 54, 71, 55, 72]) -var count16 = { - strings: ['0A1B2C3D4E5F6G7H'], - buffers: [ - hexBuf, - new Buffer([ 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128]) - ] -} - -var empty = { - strings: [''], - buffers: [ - new Buffer([ 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]) - ] -} - -var multi = { - strings: ['abcd', 'efhijk', 'lmnopq'], - buffers: [ - new Buffer('abcdefhijklmnopq', 'ascii'), - new Buffer([128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128]) - ] - } - -var long = { - strings: [hex + hex], - buffers: [ - hexBuf, - hexBuf, - new Buffer([128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]) - ] -} - -function makeTest (name, data) { - tape(name, function (t) { - - var h = new Hash(16, 8) - var hash = new Buffer(20) - var n = 2 - var expected = data.buffers.slice() - // t.plan(expected.length + 1) - - h._update = function (block) { - var e = expected.shift() - - console.log('---block---') - console.log(hexpp(block), block.length) - console.log('---e---') - console.log(hexpp(e), block.length) - console.log(block) - equal(t, block, e) - - if (n < 0) { - throw new Error('expecting only 2 calls to _update') - } - - return hash - } - - data.strings.forEach(function (string) { - h.update(string, 'ascii') - }) - - equal(t, h.digest(), hash) - t.end() - }) -} - -makeTest('Hash#update 1 in 1', count16) -makeTest('empty Hash#update', empty) -makeTest('Hash#update 1 in 3', multi) -makeTest('Hash#update 2 in 1', long) diff --git a/node_modules/sha.js/test/test.js b/node_modules/sha.js/test/test.js deleted file mode 100644 index 0a46e44..0000000 --- a/node_modules/sha.js/test/test.js +++ /dev/null @@ -1,85 +0,0 @@ -var crypto = require('crypto') -var tape = require('tape') -var Sha1 = require('../').sha1 - -var inputs = [ - ['', 'ascii'], - ['abc', 'ascii'], - ['123', 'ascii'], - ['123456789abcdef123456789abcdef123456789abcdef123456789abcdef', 'ascii'], - ['123456789abcdef123456789abcdef123456789abcdef123456789abc', 'ascii'], - ['123456789abcdef123456789abcdef123456789abcdef123456789ab', 'ascii'], - ['0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde', 'ascii'], - ['0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', 'ascii'], - ['foobarbaz', 'ascii'] -] - -tape("hash is the same as node's crypto", function (t) { - inputs.forEach(function (v) { - var a = new Sha1().update(v[0], v[1]).digest('hex') - var e = crypto.createHash('sha1').update(v[0], v[1]).digest('hex') - console.log(a, '==', e) - t.equal(a, e) - }) - - t.end() -}) - -tape('call update multiple times', function (t) { - inputs.forEach(function (v) { - var hash = new Sha1() - var _hash = crypto.createHash('sha1') - - for (var i = 0; i < v[0].length; i = (i + 1) * 2) { - var s = v[0].substring(i, (i + 1) * 2) - hash.update(s, v[1]) - _hash.update(s, v[1]) - } - - var a = hash.digest('hex') - var e = _hash.digest('hex') - console.log(a, '==', e) - t.equal(a, e) - }) - t.end() -}) - -tape('call update twice', function (t) { - var _hash = crypto.createHash('sha1') - var hash = new Sha1() - - _hash.update('foo', 'ascii') - hash.update('foo', 'ascii') - - _hash.update('bar', 'ascii') - hash.update('bar', 'ascii') - - _hash.update('baz', 'ascii') - hash.update('baz', 'ascii') - - var a = hash.digest('hex') - var e = _hash.digest('hex') - - t.equal(a, e) - t.end() -}) - -tape('hex encoding', function (t) { - inputs.forEach(function (v) { - var hash = new Sha1() - var _hash = crypto.createHash('sha1') - - for (var i = 0; i < v[0].length; i = (i + 1) * 2) { - var s = v[0].substring(i, (i + 1) * 2) - hash.update(new Buffer(s, 'ascii').toString('hex'), 'hex') - _hash.update(new Buffer(s, 'ascii').toString('hex'), 'hex') - } - var a = hash.digest('hex') - var e = _hash.digest('hex') - - console.log(a, '==', e) - t.equal(a, e) - }) - - t.end() -}) diff --git a/node_modules/sha.js/test/vectors.js b/node_modules/sha.js/test/vectors.js deleted file mode 100644 index 4aef39c..0000000 --- a/node_modules/sha.js/test/vectors.js +++ /dev/null @@ -1,76 +0,0 @@ -var tape = require('tape') -var vectors = require('hash-test-vectors') -// var from = require('bops/typedarray/from') -var Buffer = require('buffer').Buffer -var hexpp = require('../hexpp') - -var createHash = require('../') - -function makeTest (alg, i, verbose) { - var v = vectors[i] - - tape(alg + ': NIST vector ' + i, function (t) { - if (verbose) { - console.log(v) - console.log('VECTOR', i) - console.log('INPUT', v.input) - console.log(hexpp(new Buffer(v.input, 'base64'))) - console.log(new Buffer(v.input, 'base64').toString('hex')) - } - - var buf = new Buffer(v.input, 'base64') - t.equal(createHash(alg).update(buf).digest('hex'), v[alg]) - - i = ~~(buf.length / 2) - var buf1 = buf.slice(0, i) - var buf2 = buf.slice(i, buf.length) - - console.log(buf1.length, buf2.length, buf.length) - console.log(createHash(alg)._block.length) - - t.equal( - createHash(alg) - .update(buf1) - .update(buf2) - .digest('hex'), - v[alg] - ) - - var j, buf3 - - i = ~~(buf.length / 3) - j = ~~(buf.length * 2 / 3) - buf1 = buf.slice(0, i) - buf2 = buf.slice(i, j) - buf3 = buf.slice(j, buf.length) - - t.equal( - createHash(alg) - .update(buf1) - .update(buf2) - .update(buf3) - .digest('hex'), - v[alg] - ) - - setTimeout(function () { - // avoid "too much recursion" errors in tape in firefox - t.end() - }) - }) - -} - -if (process.argv[2]) { - makeTest(process.argv[2], parseInt(process.argv[3], 10), true) - -} else { - vectors.forEach(function (v, i) { - makeTest('sha', i) - makeTest('sha1', i) - makeTest('sha224', i) - makeTest('sha256', i) - makeTest('sha384', i) - makeTest('sha512', i) - }) -} diff --git a/node_modules/sha3/.npmignore b/node_modules/sha3/.npmignore deleted file mode 100644 index fe8ee5d..0000000 --- a/node_modules/sha3/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.DS_Store -build -node_modules -npm-debug.log -test/test_vectors.js diff --git a/node_modules/sha3/.travis.yml b/node_modules/sha3/.travis.yml deleted file mode 100644 index 2e848d5..0000000 --- a/node_modules/sha3/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -language: node_js - -env: - - CXX=g++-4.8 - -node_js: - - '0.12' - - '0.11' - - '0.10' - - 'iojs-1' - - 'iojs-2' - - 'iojs-3' - -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 - -notifications: - email: false - -sudo: false - -before_install: - - $CXX --version diff --git a/node_modules/sha3/LICENSE b/node_modules/sha3/LICENSE deleted file mode 100644 index e802d6a..0000000 --- a/node_modules/sha3/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -Copyright (c) 2012 Phusion - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -This package contains code written by the Keccak authors, which is licensed http://creativecommons.org/publicdomain/zero/1.0/ \ No newline at end of file diff --git a/node_modules/sha3/README.md b/node_modules/sha3/README.md deleted file mode 100644 index 3e7db1f..0000000 --- a/node_modules/sha3/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# A Node.js C++ extension for SHA-3 (Keccak) - -This Node.js extension implements the SHA-3 ([Keccak](http://keccak.noekeon.org/)) cryptographic hashing algorithm. It is based on the reference C implementation, version 3.2. The exposed interface is almost identical to that of the `crypto` standard library. - -[![Build Status](https://travis-ci.org/phusion/node-sha3.svg?branch=master)](https://travis-ci.org/phusion/node-sha3) - -[](http://www.phusion.nl/) - -## Installation - - npm install sha3 - -## Usage - -Keccak supports 5 hash lengths: 224-bit, 256-bit, 384-bit, 512-bit and variable length. Variable length is not supported by this Node.js extension. Unless the user specifies otherwise, this Node.js extension assumes 512-bit. - - var SHA3 = require('sha3'); - - // Generate 512-bit digest. - var d = new SHA3.SHA3Hash(); - d.update('foo'); - d.digest('hex'); // => "1597842a..." - - // Generate 224-bit digest. - var d = new SHA3.SHA3Hash(224); - d.update('foo'); - d.digest('hex'); // => "daa94da7..." - -### new SHA3Hash([hashlen]) - -This is the hash object. `hashlen` is 512 by default. - -### hash.update(data, [input_encoding]) - -Updates the hash content with the given data, the encoding of which is given in `input_encoding` and can be `'utf8'`, `'ascii'` or `'binary'`. Defaults to `'binary'`. This can be called many times with new data as it is streamed. - -### hash.digest([encoding]) - -Calculates the digest of all of the passed data to be hashed. The encoding can be `'hex'` or `'binary'`. Defaults to `'binary'`. - -Note: unlike `crypto.Hash`, a `SHA3Hash` object _can_ still be used after the `digest()` method been called. - -## Running the test suite - -Run the test suite as follows: - - npm test - -The test suite is automatically generated from Keccak's reference test suite. -It requires that you have Python 2.7 installed and available via the -`python` executable. - -## Warning - -Do not use SHA-3 for hashing passwords. Do not even use SHA-3 + salt for hashing passowords. Use a [slow hash](http://codahale.com/how-to-safely-store-a-password/) instead. - -## See also - -[Digest::SHA3 for Ruby](https://github.com/phusion/digest-sha3-ruby) diff --git a/node_modules/sha3/binding.gyp b/node_modules/sha3/binding.gyp deleted file mode 100644 index e6969ee..0000000 --- a/node_modules/sha3/binding.gyp +++ /dev/null @@ -1,17 +0,0 @@ -{ - "targets": [ - { - "target_name": "sha3", - "sources": [ - "src/addon.cpp", - "src/displayIntermediateValues.cpp", - "src/KeccakF-1600-reference.cpp", - "src/KeccakNISTInterface.cpp", - "src/KeccakSponge.cpp" - ], - "include_dirs": [ - "> $(depfile) -# Add extra rules as in (2). -# We remove slashes and replace spaces with new lines; -# remove blank lines; -# delete the first line and append a colon to the remaining lines. -sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ - grep -v '^$$' |\ - sed -e 1d -e 's|$$|:|' \ - >> $(depfile) -rm $(depfile).raw -endef - -# Command definitions: -# - cmd_foo is the actual command to run; -# - quiet_cmd_foo is the brief-output summary of the command. - -quiet_cmd_cc = CC($(TOOLSET)) $@ -cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_cxx = CXX($(TOOLSET)) $@ -cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_objc = CXX($(TOOLSET)) $@ -cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< - -quiet_cmd_objcxx = CXX($(TOOLSET)) $@ -cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# Commands for precompiled header files. -quiet_cmd_pch_c = CXX($(TOOLSET)) $@ -cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ -cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_m = CXX($(TOOLSET)) $@ -cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< -quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ -cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# gyp-mac-tool is written next to the root Makefile by gyp. -# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd -# already. -quiet_cmd_mac_tool = MACTOOL $(4) $< -cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" - -quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ -cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) - -quiet_cmd_infoplist = INFOPLIST $@ -cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" - -quiet_cmd_touch = TOUCH $@ -cmd_touch = touch $@ - -quiet_cmd_copy = COPY $@ -# send stderr to /dev/null to ignore messages when linking directories. -cmd_copy = rm -rf "$@" && cp -af "$<" "$@" - -quiet_cmd_alink = LIBTOOL-STATIC $@ -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) - -quiet_cmd_link = LINK($(TOOLSET)) $@ -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) - -quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) - -quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) - - -# Define an escape_quotes function to escape single quotes. -# This allows us to handle quotes properly as long as we always use -# use single quotes and escape_quotes. -escape_quotes = $(subst ','\'',$(1)) -# This comment is here just to include a ' to unconfuse syntax highlighting. -# Define an escape_vars function to escape '$' variable syntax. -# This allows us to read/write command lines with shell variables (e.g. -# $LD_LIBRARY_PATH), without triggering make substitution. -escape_vars = $(subst $$,$$$$,$(1)) -# Helper that expands to a shell command to echo a string exactly as it is in -# make. This uses printf instead of echo because printf's behaviour with respect -# to escape sequences is more portable than echo's across different shells -# (e.g., dash, bash). -exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' - -# Helper to compare the command we're about to run against the command -# we logged the last time we ran the command. Produces an empty -# string (false) when the commands match. -# Tricky point: Make has no string-equality test function. -# The kernel uses the following, but it seems like it would have false -# positives, where one string reordered its arguments. -# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ -# $(filter-out $(cmd_$@), $(cmd_$(1)))) -# We instead substitute each for the empty string into the other, and -# say they're equal if both substitutions produce the empty string. -# .d files contain ? instead of spaces, take that into account. -command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ - $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) - -# Helper that is non-empty when a prerequisite changes. -# Normally make does this implicitly, but we force rules to always run -# so we can check their command lines. -# $? -- new prerequisites -# $| -- order-only dependencies -prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) - -# Helper that executes all postbuilds until one fails. -define do_postbuilds - @E=0;\ - for p in $(POSTBUILDS); do\ - eval $$p;\ - E=$$?;\ - if [ $$E -ne 0 ]; then\ - break;\ - fi;\ - done;\ - if [ $$E -ne 0 ]; then\ - rm -rf "$@";\ - exit $$E;\ - fi -endef - -# do_cmd: run a command via the above cmd_foo names, if necessary. -# Should always run for a given target to handle command-line changes. -# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. -# Third argument, if non-zero, makes it do POSTBUILDS processing. -# Note: We intentionally do NOT call dirx for depfile, since it contains ? for -# spaces already and dirx strips the ? characters. -define do_cmd -$(if $(or $(command_changed),$(prereq_changed)), - @$(call exact_echo, $($(quiet)cmd_$(1))) - @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" - $(if $(findstring flock,$(word 2,$(cmd_$1))), - @$(cmd_$(1)) - @echo " $(quiet_cmd_$(1)): Finished", - @$(cmd_$(1)) - ) - @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) - @$(if $(2),$(fixup_dep)) - $(if $(and $(3), $(POSTBUILDS)), - $(call do_postbuilds) - ) -) -endef - -# Declare the "all" target first so it is the default, -# even though we don't have the deps yet. -.PHONY: all -all: - -# make looks for ways to re-generate included makefiles, but in our case, we -# don't have a direct way. Explicitly telling make that it has nothing to do -# for them makes it go faster. -%.d: ; - -# Use FORCE_DO_CMD to force a target to run. Should be coupled with -# do_cmd. -.PHONY: FORCE_DO_CMD -FORCE_DO_CMD: - -TOOLSET := target -# Suffix rules, putting all outputs into $(obj). -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - - -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,sha3.target.mk)))),) - include sha3.target.mk -endif - -quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = cd $(srcdir); /Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "--toplevel-dir=." -I/Users/jbaylina/git/MVP/node_modules/sha3/build/config.gypi -I/Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/jbaylina/.node-gyp/5.9.0/include/node/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/jbaylina/.node-gyp/5.9.0" "-Dnode_gyp_dir=/Users/jbaylina/n/lib/node_modules/npm/node_modules/node-gyp" "-Dnode_lib_file=node.lib" "-Dmodule_root_dir=/Users/jbaylina/git/MVP/node_modules/sha3" binding.gyp -Makefile: $(srcdir)/../../../../.node-gyp/5.9.0/include/node/common.gypi $(srcdir)/../../../../n/lib/node_modules/npm/node_modules/node-gyp/addon.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp - $(call do_cmd,regen_makefile) - -# "all" is a concatenation of the "all" targets from all the included -# sub-makefiles. This is just here to clarify. -all: - -# Add in dependency-tracking rules. $(all_deps) is the list of every single -# target in our tree. Only consider the ones with .d (dependency) info: -d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) -ifneq ($(d_files),) - include $(d_files) -endif diff --git a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakF-1600-reference.o.d b/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakF-1600-reference.o.d deleted file mode 100644 index 1adf526..0000000 --- a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakF-1600-reference.o.d +++ /dev/null @@ -1,13 +0,0 @@ -cmd_Release/obj.target/sha3/src/KeccakF-1600-reference.o := c++ '-DNODE_GYP_MODULE_NAME=sha3' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/sha3/src/KeccakF-1600-reference.o.d.raw -c -o Release/obj.target/sha3/src/KeccakF-1600-reference.o ../src/KeccakF-1600-reference.cpp -Release/obj.target/sha3/src/KeccakF-1600-reference.o: \ - ../src/KeccakF-1600-reference.cpp ../src/brg_endian.h \ - ../src/displayIntermediateValues.h ../src/KeccakNISTInterface.h \ - ../src/KeccakSponge.h ../src/KeccakF-1600-interface.h \ - ../src/KeccakF-1600-int-set.h -../src/KeccakF-1600-reference.cpp: -../src/brg_endian.h: -../src/displayIntermediateValues.h: -../src/KeccakNISTInterface.h: -../src/KeccakSponge.h: -../src/KeccakF-1600-interface.h: -../src/KeccakF-1600-int-set.h: diff --git a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakNISTInterface.o.d b/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakNISTInterface.o.d deleted file mode 100644 index 487e4ec..0000000 --- a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakNISTInterface.o.d +++ /dev/null @@ -1,10 +0,0 @@ -cmd_Release/obj.target/sha3/src/KeccakNISTInterface.o := c++ '-DNODE_GYP_MODULE_NAME=sha3' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/sha3/src/KeccakNISTInterface.o.d.raw -c -o Release/obj.target/sha3/src/KeccakNISTInterface.o ../src/KeccakNISTInterface.cpp -Release/obj.target/sha3/src/KeccakNISTInterface.o: \ - ../src/KeccakNISTInterface.cpp ../src/KeccakNISTInterface.h \ - ../src/KeccakSponge.h ../src/KeccakF-1600-interface.h \ - ../src/KeccakF-1600-int-set.h -../src/KeccakNISTInterface.cpp: -../src/KeccakNISTInterface.h: -../src/KeccakSponge.h: -../src/KeccakF-1600-interface.h: -../src/KeccakF-1600-int-set.h: diff --git a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakSponge.o.d b/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakSponge.o.d deleted file mode 100644 index c00c7c3..0000000 --- a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/KeccakSponge.o.d +++ /dev/null @@ -1,8 +0,0 @@ -cmd_Release/obj.target/sha3/src/KeccakSponge.o := c++ '-DNODE_GYP_MODULE_NAME=sha3' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/sha3/src/KeccakSponge.o.d.raw -c -o Release/obj.target/sha3/src/KeccakSponge.o ../src/KeccakSponge.cpp -Release/obj.target/sha3/src/KeccakSponge.o: ../src/KeccakSponge.cpp \ - ../src/KeccakSponge.h ../src/KeccakF-1600-interface.h \ - ../src/KeccakF-1600-int-set.h -../src/KeccakSponge.cpp: -../src/KeccakSponge.h: -../src/KeccakF-1600-interface.h: -../src/KeccakF-1600-int-set.h: diff --git a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/addon.o.d b/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/addon.o.d deleted file mode 100644 index ee2f57c..0000000 --- a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/addon.o.d +++ /dev/null @@ -1,50 +0,0 @@ -cmd_Release/obj.target/sha3/src/addon.o := c++ '-DNODE_GYP_MODULE_NAME=sha3' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/sha3/src/addon.o.d.raw -c -o Release/obj.target/sha3/src/addon.o ../src/addon.cpp -Release/obj.target/sha3/src/addon.o: ../src/addon.cpp \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h \ - ../../nan/nan.h /Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h \ - /Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h \ - ../../nan/nan_persistent_12_inl.h ../../nan/nan_weak.h \ - ../../nan/nan_object_wrap.h ../../nan/nan_typedarray_contents.h \ - ../src/KeccakNISTInterface.h ../src/KeccakSponge.h -../src/addon.cpp: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/v8config.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_buffer.h: -../../nan/nan.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-errno.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-version.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-unix.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-threadpool.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/uv-darwin.h: -/Users/jbaylina/.node-gyp/5.9.0/include/node/node_object_wrap.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_typedarray_contents.h: -../src/KeccakNISTInterface.h: -../src/KeccakSponge.h: diff --git a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/displayIntermediateValues.o.d b/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/displayIntermediateValues.o.d deleted file mode 100644 index 53c591a..0000000 --- a/node_modules/sha3/build/Release/.deps/Release/obj.target/sha3/src/displayIntermediateValues.o.d +++ /dev/null @@ -1,9 +0,0 @@ -cmd_Release/obj.target/sha3/src/displayIntermediateValues.o := c++ '-DNODE_GYP_MODULE_NAME=sha3' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/jbaylina/.node-gyp/5.9.0/include/node -I/Users/jbaylina/.node-gyp/5.9.0/src -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include -I../../nan -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/sha3/src/displayIntermediateValues.o.d.raw -c -o Release/obj.target/sha3/src/displayIntermediateValues.o ../src/displayIntermediateValues.cpp -Release/obj.target/sha3/src/displayIntermediateValues.o: \ - ../src/displayIntermediateValues.cpp \ - ../src/displayIntermediateValues.h ../src/KeccakNISTInterface.h \ - ../src/KeccakSponge.h -../src/displayIntermediateValues.cpp: -../src/displayIntermediateValues.h: -../src/KeccakNISTInterface.h: -../src/KeccakSponge.h: diff --git a/node_modules/sha3/build/Release/.deps/Release/sha3.node.d b/node_modules/sha3/build/Release/.deps/Release/sha3.node.d deleted file mode 100644 index eca6265..0000000 --- a/node_modules/sha3/build/Release/.deps/Release/sha3.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/sha3.node := c++ -bundle -undefined dynamic_lookup -Wl,-search_paths_first -mmacosx-version-min=10.5 -arch x86_64 -L./Release -o Release/sha3.node Release/obj.target/sha3/src/addon.o Release/obj.target/sha3/src/displayIntermediateValues.o Release/obj.target/sha3/src/KeccakF-1600-reference.o Release/obj.target/sha3/src/KeccakNISTInterface.o Release/obj.target/sha3/src/KeccakSponge.o diff --git a/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakF-1600-reference.o b/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakF-1600-reference.o deleted file mode 100644 index 51cc3b1..0000000 Binary files a/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakF-1600-reference.o and /dev/null differ diff --git a/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakNISTInterface.o b/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakNISTInterface.o deleted file mode 100644 index f9c5e54..0000000 Binary files a/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakNISTInterface.o and /dev/null differ diff --git a/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakSponge.o b/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakSponge.o deleted file mode 100644 index d4a2c62..0000000 Binary files a/node_modules/sha3/build/Release/obj.target/sha3/src/KeccakSponge.o and /dev/null differ diff --git a/node_modules/sha3/build/Release/obj.target/sha3/src/addon.o b/node_modules/sha3/build/Release/obj.target/sha3/src/addon.o deleted file mode 100644 index fb660ee..0000000 Binary files a/node_modules/sha3/build/Release/obj.target/sha3/src/addon.o and /dev/null differ diff --git a/node_modules/sha3/build/Release/obj.target/sha3/src/displayIntermediateValues.o b/node_modules/sha3/build/Release/obj.target/sha3/src/displayIntermediateValues.o deleted file mode 100644 index 268957b..0000000 Binary files a/node_modules/sha3/build/Release/obj.target/sha3/src/displayIntermediateValues.o and /dev/null differ diff --git a/node_modules/sha3/build/Release/sha3.node b/node_modules/sha3/build/Release/sha3.node deleted file mode 100755 index 1dce328..0000000 Binary files a/node_modules/sha3/build/Release/sha3.node and /dev/null differ diff --git a/node_modules/sha3/build/binding.Makefile b/node_modules/sha3/build/binding.Makefile deleted file mode 100644 index cf5f11c..0000000 --- a/node_modules/sha3/build/binding.Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# This file is generated by gyp; do not edit. - -export builddir_name ?= ./build/. -.PHONY: all -all: - $(MAKE) sha3 diff --git a/node_modules/sha3/build/config.gypi b/node_modules/sha3/build/config.gypi deleted file mode 100644 index ea3cb54..0000000 --- a/node_modules/sha3/build/config.gypi +++ /dev/null @@ -1,144 +0,0 @@ -# Do not edit. File was generated by node-gyp's "configure" step -{ - "target_defaults": { - "cflags": [], - "default_configuration": "Release", - "defines": [], - "include_dirs": [], - "libraries": [] - }, - "variables": { - "asan": 0, - "host_arch": "x64", - "icu_data_file": "icudt56l.dat", - "icu_data_in": "../../deps/icu/source/data/in/icudt56l.dat", - "icu_endianness": "l", - "icu_gyp_path": "tools/icu/icu-generic.gyp", - "icu_locales": "en,root", - "icu_path": "./deps/icu", - "icu_small": "true", - "icu_ver_major": "56", - "llvm_version": 0, - "node_byteorder": "little", - "node_enable_v8_vtunejit": "false", - "node_install_npm": "true", - "node_prefix": "/", - "node_release_urlbase": "https://nodejs.org/download/release/", - "node_shared_http_parser": "false", - "node_shared_libuv": "false", - "node_shared_openssl": "false", - "node_shared_zlib": "false", - "node_tag": "", - "node_use_dtrace": "true", - "node_use_etw": "false", - "node_use_lttng": "false", - "node_use_openssl": "true", - "node_use_perfctr": "false", - "openssl_fips": "", - "openssl_no_asm": 0, - "target_arch": "x64", - "uv_parent_path": "/deps/uv/", - "uv_use_dtrace": "true", - "v8_enable_gdbjit": 0, - "v8_enable_i18n_support": 1, - "v8_no_strict_aliasing": 1, - "v8_optimized_debug": 0, - "v8_random_seed": 0, - "v8_use_snapshot": "true", - "want_separate_host_toolset": 0, - "xcode_version": "7.0", - "nodedir": "/Users/jbaylina/.node-gyp/5.9.0", - "copy_dev_lib": "true", - "standalone_static_library": 1, - "dry_run": "", - "legacy_bundling": "", - "save_dev": "", - "browser": "", - "only": "", - "viewer": "man", - "also": "", - "rollback": "true", - "usage": "", - "globalignorefile": "/Users/jbaylina/n/etc/npmignore", - "init_author_url": "", - "shell": "/bin/bash", - "parseable": "", - "shrinkwrap": "true", - "init_license": "ISC", - "if_present": "", - "cache_max": "Infinity", - "init_author_email": "", - "sign_git_tag": "", - "cert": "", - "git_tag_version": "true", - "local_address": "", - "long": "", - "fetch_retries": "2", - "npat": "", - "registry": "https://registry.npmjs.org/", - "key": "", - "message": "%s", - "versions": "", - "globalconfig": "/Users/jbaylina/n/etc/npmrc", - "always_auth": "", - "cache_lock_retries": "10", - "global_style": "", - "cafile": "", - "heading": "npm", - "fetch_retry_mintimeout": "10000", - "proprietary_attribs": "true", - "access": "", - "json": "", - "description": "true", - "engine_strict": "", - "https_proxy": "", - "init_module": "/Users/jbaylina/.npm-init.js", - "userconfig": "/Users/jbaylina/.npmrc", - "node_version": "5.9.0", - "user": "501", - "save": "true", - "editor": "vi", - "tag": "latest", - "global": "", - "progress": "true", - "optional": "true", - "bin_links": "true", - "force": "", - "searchopts": "", - "depth": "Infinity", - "rebuild_bundle": "true", - "searchsort": "name", - "unicode": "true", - "fetch_retry_maxtimeout": "60000", - "ca": "", - "save_prefix": "^", - "strict_ssl": "true", - "tag_version_prefix": "v", - "dev": "", - "fetch_retry_factor": "10", - "group": "20", - "save_exact": "", - "cache_lock_stale": "60000", - "version": "", - "cache_min": "10", - "cache": "/Users/jbaylina/.npm", - "searchexclude": "", - "color": "true", - "save_optional": "", - "user_agent": "npm/3.7.3 node/v5.9.0 darwin x64", - "ignore_scripts": "", - "cache_lock_wait": "10000", - "production": "", - "save_bundle": "", - "init_version": "1.0.0", - "umask": "0022", - "git": "git", - "init_author_name": "", - "scope": "", - "onload_script": "", - "tmp": "/var/folders/g_/74y0ll3503d4sm0c64jw432r0000gn/T", - "unsafe_perm": "true", - "link": "", - "prefix": "/Users/jbaylina/n" - } -} diff --git a/node_modules/sha3/build/gyp-mac-tool b/node_modules/sha3/build/gyp-mac-tool deleted file mode 100755 index 8ef02b0..0000000 --- a/node_modules/sha3/build/gyp-mac-tool +++ /dev/null @@ -1,611 +0,0 @@ -#!/usr/bin/env python -# Generated by gyp. Do not edit. -# Copyright (c) 2012 Google Inc. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Utility functions to perform Xcode-style build steps. - -These functions are executed via gyp-mac-tool when using the Makefile generator. -""" - -import fcntl -import fnmatch -import glob -import json -import os -import plistlib -import re -import shutil -import string -import subprocess -import sys -import tempfile - - -def main(args): - executor = MacTool() - exit_code = executor.Dispatch(args) - if exit_code is not None: - sys.exit(exit_code) - - -class MacTool(object): - """This class performs all the Mac tooling steps. The methods can either be - executed directly, or dispatched from an argument list.""" - - def Dispatch(self, args): - """Dispatches a string command to a method.""" - if len(args) < 1: - raise Exception("Not enough arguments") - - method = "Exec%s" % self._CommandifyName(args[0]) - return getattr(self, method)(*args[1:]) - - def _CommandifyName(self, name_string): - """Transforms a tool name like copy-info-plist to CopyInfoPlist""" - return name_string.title().replace('-', '') - - def ExecCopyBundleResource(self, source, dest, convert_to_binary): - """Copies a resource file to the bundle/Resources directory, performing any - necessary compilation on each resource.""" - extension = os.path.splitext(source)[1].lower() - if os.path.isdir(source): - # Copy tree. - # TODO(thakis): This copies file attributes like mtime, while the - # single-file branch below doesn't. This should probably be changed to - # be consistent with the single-file branch. - if os.path.exists(dest): - shutil.rmtree(dest) - shutil.copytree(source, dest) - elif extension == '.xib': - return self._CopyXIBFile(source, dest) - elif extension == '.storyboard': - return self._CopyXIBFile(source, dest) - elif extension == '.strings': - self._CopyStringsFile(source, dest, convert_to_binary) - else: - shutil.copy(source, dest) - - def _CopyXIBFile(self, source, dest): - """Compiles a XIB file with ibtool into a binary plist in the bundle.""" - - # ibtool sometimes crashes with relative paths. See crbug.com/314728. - base = os.path.dirname(os.path.realpath(__file__)) - if os.path.relpath(source): - source = os.path.join(base, source) - if os.path.relpath(dest): - dest = os.path.join(base, dest) - - args = ['xcrun', 'ibtool', '--errors', '--warnings', '--notices', - '--output-format', 'human-readable-text', '--compile', dest, source] - ibtool_section_re = re.compile(r'/\*.*\*/') - ibtool_re = re.compile(r'.*note:.*is clipping its content') - ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE) - current_section_header = None - for line in ibtoolout.stdout: - if ibtool_section_re.match(line): - current_section_header = line - elif not ibtool_re.match(line): - if current_section_header: - sys.stdout.write(current_section_header) - current_section_header = None - sys.stdout.write(line) - return ibtoolout.returncode - - def _ConvertToBinary(self, dest): - subprocess.check_call([ - 'xcrun', 'plutil', '-convert', 'binary1', '-o', dest, dest]) - - def _CopyStringsFile(self, source, dest, convert_to_binary): - """Copies a .strings file using iconv to reconvert the input into UTF-16.""" - input_code = self._DetectInputEncoding(source) or "UTF-8" - - # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call - # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints - # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing - # semicolon in dictionary. - # on invalid files. Do the same kind of validation. - import CoreFoundation - s = open(source, 'rb').read() - d = CoreFoundation.CFDataCreate(None, s, len(s)) - _, error = CoreFoundation.CFPropertyListCreateFromXMLData(None, d, 0, None) - if error: - return - - fp = open(dest, 'wb') - fp.write(s.decode(input_code).encode('UTF-16')) - fp.close() - - if convert_to_binary == 'True': - self._ConvertToBinary(dest) - - def _DetectInputEncoding(self, file_name): - """Reads the first few bytes from file_name and tries to guess the text - encoding. Returns None as a guess if it can't detect it.""" - fp = open(file_name, 'rb') - try: - header = fp.read(3) - except e: - fp.close() - return None - fp.close() - if header.startswith("\xFE\xFF"): - return "UTF-16" - elif header.startswith("\xFF\xFE"): - return "UTF-16" - elif header.startswith("\xEF\xBB\xBF"): - return "UTF-8" - else: - return None - - def ExecCopyInfoPlist(self, source, dest, convert_to_binary, *keys): - """Copies the |source| Info.plist to the destination directory |dest|.""" - # Read the source Info.plist into memory. - fd = open(source, 'r') - lines = fd.read() - fd.close() - - # Insert synthesized key/value pairs (e.g. BuildMachineOSBuild). - plist = plistlib.readPlistFromString(lines) - if keys: - plist = dict(plist.items() + json.loads(keys[0]).items()) - lines = plistlib.writePlistToString(plist) - - # Go through all the environment variables and replace them as variables in - # the file. - IDENT_RE = re.compile(r'[/\s]') - for key in os.environ: - if key.startswith('_'): - continue - evar = '${%s}' % key - evalue = os.environ[key] - lines = string.replace(lines, evar, evalue) - - # Xcode supports various suffices on environment variables, which are - # all undocumented. :rfc1034identifier is used in the standard project - # template these days, and :identifier was used earlier. They are used to - # convert non-url characters into things that look like valid urls -- - # except that the replacement character for :identifier, '_' isn't valid - # in a URL either -- oops, hence :rfc1034identifier was born. - evar = '${%s:identifier}' % key - evalue = IDENT_RE.sub('_', os.environ[key]) - lines = string.replace(lines, evar, evalue) - - evar = '${%s:rfc1034identifier}' % key - evalue = IDENT_RE.sub('-', os.environ[key]) - lines = string.replace(lines, evar, evalue) - - # Remove any keys with values that haven't been replaced. - lines = lines.split('\n') - for i in range(len(lines)): - if lines[i].strip().startswith("${"): - lines[i] = None - lines[i - 1] = None - lines = '\n'.join(filter(lambda x: x is not None, lines)) - - # Write out the file with variables replaced. - fd = open(dest, 'w') - fd.write(lines) - fd.close() - - # Now write out PkgInfo file now that the Info.plist file has been - # "compiled". - self._WritePkgInfo(dest) - - if convert_to_binary == 'True': - self._ConvertToBinary(dest) - - def _WritePkgInfo(self, info_plist): - """This writes the PkgInfo file from the data stored in Info.plist.""" - plist = plistlib.readPlist(info_plist) - if not plist: - return - - # Only create PkgInfo for executable types. - package_type = plist['CFBundlePackageType'] - if package_type != 'APPL': - return - - # The format of PkgInfo is eight characters, representing the bundle type - # and bundle signature, each four characters. If that is missing, four - # '?' characters are used instead. - signature_code = plist.get('CFBundleSignature', '????') - if len(signature_code) != 4: # Wrong length resets everything, too. - signature_code = '?' * 4 - - dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') - fp = open(dest, 'w') - fp.write('%s%s' % (package_type, signature_code)) - fp.close() - - def ExecFlock(self, lockfile, *cmd_list): - """Emulates the most basic behavior of Linux's flock(1).""" - # Rely on exception handling to report errors. - fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) - fcntl.flock(fd, fcntl.LOCK_EX) - return subprocess.call(cmd_list) - - def ExecFilterLibtool(self, *cmd_list): - """Calls libtool and filters out '/path/to/libtool: file: foo.o has no - symbols'.""" - libtool_re = re.compile(r'^.*libtool: file: .* has no symbols$') - libtool_re5 = re.compile( - r'^.*libtool: warning for library: ' + - r'.* the table of contents is empty ' + - r'\(no object file members in the library define global symbols\)$') - env = os.environ.copy() - # Ref: - # http://www.opensource.apple.com/source/cctools/cctools-809/misc/libtool.c - # The problem with this flag is that it resets the file mtime on the file to - # epoch=0, e.g. 1970-1-1 or 1969-12-31 depending on timezone. - env['ZERO_AR_DATE'] = '1' - libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE, env=env) - _, err = libtoolout.communicate() - for line in err.splitlines(): - if not libtool_re.match(line) and not libtool_re5.match(line): - print >>sys.stderr, line - # Unconditionally touch the output .a file on the command line if present - # and the command succeeded. A bit hacky. - if not libtoolout.returncode: - for i in range(len(cmd_list) - 1): - if cmd_list[i] == "-o" and cmd_list[i+1].endswith('.a'): - os.utime(cmd_list[i+1], None) - break - return libtoolout.returncode - - def ExecPackageFramework(self, framework, version): - """Takes a path to Something.framework and the Current version of that and - sets up all the symlinks.""" - # Find the name of the binary based on the part before the ".framework". - binary = os.path.basename(framework).split('.')[0] - - CURRENT = 'Current' - RESOURCES = 'Resources' - VERSIONS = 'Versions' - - if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): - # Binary-less frameworks don't seem to contain symlinks (see e.g. - # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). - return - - # Move into the framework directory to set the symlinks correctly. - pwd = os.getcwd() - os.chdir(framework) - - # Set up the Current version. - self._Relink(version, os.path.join(VERSIONS, CURRENT)) - - # Set up the root symlinks. - self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) - self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) - - # Back to where we were before! - os.chdir(pwd) - - def _Relink(self, dest, link): - """Creates a symlink to |dest| named |link|. If |link| already exists, - it is overwritten.""" - if os.path.lexists(link): - os.remove(link) - os.symlink(dest, link) - - def ExecCompileXcassets(self, keys, *inputs): - """Compiles multiple .xcassets files into a single .car file. - - This invokes 'actool' to compile all the inputs .xcassets files. The - |keys| arguments is a json-encoded dictionary of extra arguments to - pass to 'actool' when the asset catalogs contains an application icon - or a launch image. - - Note that 'actool' does not create the Assets.car file if the asset - catalogs does not contains imageset. - """ - command_line = [ - 'xcrun', 'actool', '--output-format', 'human-readable-text', - '--compress-pngs', '--notices', '--warnings', '--errors', - ] - is_iphone_target = 'IPHONEOS_DEPLOYMENT_TARGET' in os.environ - if is_iphone_target: - platform = os.environ['CONFIGURATION'].split('-')[-1] - if platform not in ('iphoneos', 'iphonesimulator'): - platform = 'iphonesimulator' - command_line.extend([ - '--platform', platform, '--target-device', 'iphone', - '--target-device', 'ipad', '--minimum-deployment-target', - os.environ['IPHONEOS_DEPLOYMENT_TARGET'], '--compile', - os.path.abspath(os.environ['CONTENTS_FOLDER_PATH']), - ]) - else: - command_line.extend([ - '--platform', 'macosx', '--target-device', 'mac', - '--minimum-deployment-target', os.environ['MACOSX_DEPLOYMENT_TARGET'], - '--compile', - os.path.abspath(os.environ['UNLOCALIZED_RESOURCES_FOLDER_PATH']), - ]) - if keys: - keys = json.loads(keys) - for key, value in keys.iteritems(): - arg_name = '--' + key - if isinstance(value, bool): - if value: - command_line.append(arg_name) - elif isinstance(value, list): - for v in value: - command_line.append(arg_name) - command_line.append(str(v)) - else: - command_line.append(arg_name) - command_line.append(str(value)) - # Note: actool crashes if inputs path are relative, so use os.path.abspath - # to get absolute path name for inputs. - command_line.extend(map(os.path.abspath, inputs)) - subprocess.check_call(command_line) - - def ExecMergeInfoPlist(self, output, *inputs): - """Merge multiple .plist files into a single .plist file.""" - merged_plist = {} - for path in inputs: - plist = self._LoadPlistMaybeBinary(path) - self._MergePlist(merged_plist, plist) - plistlib.writePlist(merged_plist, output) - - def ExecCodeSignBundle(self, key, resource_rules, entitlements, provisioning): - """Code sign a bundle. - - This function tries to code sign an iOS bundle, following the same - algorithm as Xcode: - 1. copy ResourceRules.plist from the user or the SDK into the bundle, - 2. pick the provisioning profile that best match the bundle identifier, - and copy it into the bundle as embedded.mobileprovision, - 3. copy Entitlements.plist from user or SDK next to the bundle, - 4. code sign the bundle. - """ - resource_rules_path = self._InstallResourceRules(resource_rules) - substitutions, overrides = self._InstallProvisioningProfile( - provisioning, self._GetCFBundleIdentifier()) - entitlements_path = self._InstallEntitlements( - entitlements, substitutions, overrides) - subprocess.check_call([ - 'codesign', '--force', '--sign', key, '--resource-rules', - resource_rules_path, '--entitlements', entitlements_path, - os.path.join( - os.environ['TARGET_BUILD_DIR'], - os.environ['FULL_PRODUCT_NAME'])]) - - def _InstallResourceRules(self, resource_rules): - """Installs ResourceRules.plist from user or SDK into the bundle. - - Args: - resource_rules: string, optional, path to the ResourceRules.plist file - to use, default to "${SDKROOT}/ResourceRules.plist" - - Returns: - Path to the copy of ResourceRules.plist into the bundle. - """ - source_path = resource_rules - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['CONTENTS_FOLDER_PATH'], - 'ResourceRules.plist') - if not source_path: - source_path = os.path.join( - os.environ['SDKROOT'], 'ResourceRules.plist') - shutil.copy2(source_path, target_path) - return target_path - - def _InstallProvisioningProfile(self, profile, bundle_identifier): - """Installs embedded.mobileprovision into the bundle. - - Args: - profile: string, optional, short name of the .mobileprovision file - to use, if empty or the file is missing, the best file installed - will be used - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - - Returns: - A tuple containing two dictionary: variables substitutions and values - to overrides when generating the entitlements file. - """ - source_path, provisioning_data, team_id = self._FindProvisioningProfile( - profile, bundle_identifier) - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['CONTENTS_FOLDER_PATH'], - 'embedded.mobileprovision') - shutil.copy2(source_path, target_path) - substitutions = self._GetSubstitutions(bundle_identifier, team_id + '.') - return substitutions, provisioning_data['Entitlements'] - - def _FindProvisioningProfile(self, profile, bundle_identifier): - """Finds the .mobileprovision file to use for signing the bundle. - - Checks all the installed provisioning profiles (or if the user specified - the PROVISIONING_PROFILE variable, only consult it) and select the most - specific that correspond to the bundle identifier. - - Args: - profile: string, optional, short name of the .mobileprovision file - to use, if empty or the file is missing, the best file installed - will be used - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - - Returns: - A tuple of the path to the selected provisioning profile, the data of - the embedded plist in the provisioning profile and the team identifier - to use for code signing. - - Raises: - SystemExit: if no .mobileprovision can be used to sign the bundle. - """ - profiles_dir = os.path.join( - os.environ['HOME'], 'Library', 'MobileDevice', 'Provisioning Profiles') - if not os.path.isdir(profiles_dir): - print >>sys.stderr, ( - 'cannot find mobile provisioning for %s' % bundle_identifier) - sys.exit(1) - provisioning_profiles = None - if profile: - profile_path = os.path.join(profiles_dir, profile + '.mobileprovision') - if os.path.exists(profile_path): - provisioning_profiles = [profile_path] - if not provisioning_profiles: - provisioning_profiles = glob.glob( - os.path.join(profiles_dir, '*.mobileprovision')) - valid_provisioning_profiles = {} - for profile_path in provisioning_profiles: - profile_data = self._LoadProvisioningProfile(profile_path) - app_id_pattern = profile_data.get( - 'Entitlements', {}).get('application-identifier', '') - for team_identifier in profile_data.get('TeamIdentifier', []): - app_id = '%s.%s' % (team_identifier, bundle_identifier) - if fnmatch.fnmatch(app_id, app_id_pattern): - valid_provisioning_profiles[app_id_pattern] = ( - profile_path, profile_data, team_identifier) - if not valid_provisioning_profiles: - print >>sys.stderr, ( - 'cannot find mobile provisioning for %s' % bundle_identifier) - sys.exit(1) - # If the user has multiple provisioning profiles installed that can be - # used for ${bundle_identifier}, pick the most specific one (ie. the - # provisioning profile whose pattern is the longest). - selected_key = max(valid_provisioning_profiles, key=lambda v: len(v)) - return valid_provisioning_profiles[selected_key] - - def _LoadProvisioningProfile(self, profile_path): - """Extracts the plist embedded in a provisioning profile. - - Args: - profile_path: string, path to the .mobileprovision file - - Returns: - Content of the plist embedded in the provisioning profile as a dictionary. - """ - with tempfile.NamedTemporaryFile() as temp: - subprocess.check_call([ - 'security', 'cms', '-D', '-i', profile_path, '-o', temp.name]) - return self._LoadPlistMaybeBinary(temp.name) - - def _MergePlist(self, merged_plist, plist): - """Merge |plist| into |merged_plist|.""" - for key, value in plist.iteritems(): - if isinstance(value, dict): - merged_value = merged_plist.get(key, {}) - if isinstance(merged_value, dict): - self._MergePlist(merged_value, value) - merged_plist[key] = merged_value - else: - merged_plist[key] = value - else: - merged_plist[key] = value - - def _LoadPlistMaybeBinary(self, plist_path): - """Loads into a memory a plist possibly encoded in binary format. - - This is a wrapper around plistlib.readPlist that tries to convert the - plist to the XML format if it can't be parsed (assuming that it is in - the binary format). - - Args: - plist_path: string, path to a plist file, in XML or binary format - - Returns: - Content of the plist as a dictionary. - """ - try: - # First, try to read the file using plistlib that only supports XML, - # and if an exception is raised, convert a temporary copy to XML and - # load that copy. - return plistlib.readPlist(plist_path) - except: - pass - with tempfile.NamedTemporaryFile() as temp: - shutil.copy2(plist_path, temp.name) - subprocess.check_call(['plutil', '-convert', 'xml1', temp.name]) - return plistlib.readPlist(temp.name) - - def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix): - """Constructs a dictionary of variable substitutions for Entitlements.plist. - - Args: - bundle_identifier: string, value of CFBundleIdentifier from Info.plist - app_identifier_prefix: string, value for AppIdentifierPrefix - - Returns: - Dictionary of substitutions to apply when generating Entitlements.plist. - """ - return { - 'CFBundleIdentifier': bundle_identifier, - 'AppIdentifierPrefix': app_identifier_prefix, - } - - def _GetCFBundleIdentifier(self): - """Extracts CFBundleIdentifier value from Info.plist in the bundle. - - Returns: - Value of CFBundleIdentifier in the Info.plist located in the bundle. - """ - info_plist_path = os.path.join( - os.environ['TARGET_BUILD_DIR'], - os.environ['INFOPLIST_PATH']) - info_plist_data = self._LoadPlistMaybeBinary(info_plist_path) - return info_plist_data['CFBundleIdentifier'] - - def _InstallEntitlements(self, entitlements, substitutions, overrides): - """Generates and install the ${BundleName}.xcent entitlements file. - - Expands variables "$(variable)" pattern in the source entitlements file, - add extra entitlements defined in the .mobileprovision file and the copy - the generated plist to "${BundlePath}.xcent". - - Args: - entitlements: string, optional, path to the Entitlements.plist template - to use, defaults to "${SDKROOT}/Entitlements.plist" - substitutions: dictionary, variable substitutions - overrides: dictionary, values to add to the entitlements - - Returns: - Path to the generated entitlements file. - """ - source_path = entitlements - target_path = os.path.join( - os.environ['BUILT_PRODUCTS_DIR'], - os.environ['PRODUCT_NAME'] + '.xcent') - if not source_path: - source_path = os.path.join( - os.environ['SDKROOT'], - 'Entitlements.plist') - shutil.copy2(source_path, target_path) - data = self._LoadPlistMaybeBinary(target_path) - data = self._ExpandVariables(data, substitutions) - if overrides: - for key in overrides: - if key not in data: - data[key] = overrides[key] - plistlib.writePlist(data, target_path) - return target_path - - def _ExpandVariables(self, data, substitutions): - """Expands variables "$(variable)" in data. - - Args: - data: object, can be either string, list or dictionary - substitutions: dictionary, variable substitutions to perform - - Returns: - Copy of data where each references to "$(variable)" has been replaced - by the corresponding value found in substitutions, or left intact if - the key was not found. - """ - if isinstance(data, str): - for key, value in substitutions.iteritems(): - data = data.replace('$(%s)' % key, value) - return data - if isinstance(data, list): - return [self._ExpandVariables(v, substitutions) for v in data] - if isinstance(data, dict): - return {k: self._ExpandVariables(data[k], substitutions) for k in data} - return data - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/node_modules/sha3/build/sha3.target.mk b/node_modules/sha3/build/sha3.target.mk deleted file mode 100644 index 36157ff..0000000 --- a/node_modules/sha3/build/sha3.target.mk +++ /dev/null @@ -1,169 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := sha3 -DEFS_Debug := \ - '-DNODE_GYP_MODULE_NAME=sha3' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' \ - '-DDEBUG' \ - '-D_DEBUG' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := - -INCS_Debug := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I$(srcdir)/../nan - -DEFS_Release := \ - '-DNODE_GYP_MODULE_NAME=sha3' \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' - -# Flags passed to all source files. -CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -std=gnu++0x \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := - -INCS_Release := \ - -I/Users/jbaylina/.node-gyp/5.9.0/include/node \ - -I/Users/jbaylina/.node-gyp/5.9.0/src \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/uv/include \ - -I/Users/jbaylina/.node-gyp/5.9.0/deps/v8/include \ - -I$(srcdir)/../nan - -OBJS := \ - $(obj).target/$(TARGET)/src/addon.o \ - $(obj).target/$(TARGET)/src/displayIntermediateValues.o \ - $(obj).target/$(TARGET)/src/KeccakF-1600-reference.o \ - $(obj).target/$(TARGET)/src/KeccakNISTInterface.o \ - $(obj).target/$(TARGET)/src/KeccakSponge.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Debug := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first - -LDFLAGS_Release := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) - -LIBTOOLFLAGS_Release := \ - -undefined dynamic_lookup \ - -Wl,-search_paths_first - -LIBS := - -$(builddir)/sha3.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/sha3.node: LIBS := $(LIBS) -$(builddir)/sha3.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/sha3.node: TOOLSET := $(TOOLSET) -$(builddir)/sha3.node: $(OBJS) FORCE_DO_CMD - $(call do_cmd,solink_module) - -all_deps += $(builddir)/sha3.node -# Add target alias -.PHONY: sha3 -sha3: $(builddir)/sha3.node - -# Short alias for building this executable. -.PHONY: sha3.node -sha3.node: $(builddir)/sha3.node - -# Add executable to "all" target. -.PHONY: all -all: $(builddir)/sha3.node - diff --git a/node_modules/sha3/package.json b/node_modules/sha3/package.json deleted file mode 100644 index 0e13de9..0000000 --- a/node_modules/sha3/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "sha3@^1.1.0", - "/Users/jbaylina/git/MVP/node_modules/keccakjs" - ] - ], - "_from": "sha3@>=1.1.0 <2.0.0", - "_id": "sha3@1.2.0", - "_inCache": true, - "_installable": true, - "_location": "/sha3", - "_nodeVersion": "0.12.4", - "_npmUser": { - "email": "parkrmoore@gmail.com", - "name": "parkr" - }, - "_npmVersion": "2.10.1", - "_phantomChildren": {}, - "_requested": { - "name": "sha3", - "raw": "sha3@^1.1.0", - "rawSpec": "^1.1.0", - "scope": null, - "spec": ">=1.1.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/keccakjs" - ], - "_resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.0.tgz", - "_shasum": "6989f1b70a498705876a373e2c62ace96aa9399a", - "_shrinkwrap": null, - "_spec": "sha3@^1.1.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/keccakjs", - "author": { - "email": "hongli@phusion.nl", - "name": "Hongli Lai", - "url": "Phusion" - }, - "bugs": { - "url": "https://github.com/phusion/node-sha3/issues" - }, - "dependencies": { - "nan": "^2.0.5" - }, - "description": "A Node.js C++ extension for SHA-3 (Keccak)", - "devDependencies": { - "mocha": "^2.1.0" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "6989f1b70a498705876a373e2c62ace96aa9399a", - "tarball": "http://registry.npmjs.org/sha3/-/sha3-1.2.0.tgz" - }, - "engines": { - "iojs": ">= 1.0", - "node": ">= 0.10" - }, - "gitHead": "7469a31a7f8bc7589692e75d7fdc445fa0988c93", - "gypfile": true, - "homepage": "https://github.com/phusion/node-sha3#readme", - "keywords": [ - "sha", - "sha3", - "sha-3", - "hash", - "hashing" - ], - "license": "MIT", - "main": "build/Release/sha3", - "maintainers": [ - { - "email": "hongli@phusion.nl", - "name": "hongli" - }, - { - "email": "parkrmoore@gmail.com", - "name": "parkr" - } - ], - "name": "sha3", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/phusion/node-sha3.git" - }, - "scripts": { - "install": "node-gyp rebuild", - "test": "python test/generate_tests.py > test/test_vectors.js && node test/test_vectors.js && mocha test/unit_tests.js" - }, - "version": "1.2.0" -} diff --git a/node_modules/sha3/src/KeccakF-1600-int-set.h b/node_modules/sha3/src/KeccakF-1600-int-set.h deleted file mode 100644 index 0ed1d80..0000000 --- a/node_modules/sha3/src/KeccakF-1600-int-set.h +++ /dev/null @@ -1,6 +0,0 @@ -#define ProvideFast576 -#define ProvideFast832 -#define ProvideFast1024 -#define ProvideFast1088 -#define ProvideFast1152 -#define ProvideFast1344 diff --git a/node_modules/sha3/src/KeccakF-1600-interface.h b/node_modules/sha3/src/KeccakF-1600-interface.h deleted file mode 100644 index ded0766..0000000 --- a/node_modules/sha3/src/KeccakF-1600-interface.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michaël Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by the designers, -hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#ifndef _KeccakPermutationInterface_h_ -#define _KeccakPermutationInterface_h_ - -#include "KeccakF-1600-int-set.h" - -namespace Node_SHA3 { - -void KeccakInitialize( void ); -void KeccakInitializeState(unsigned char *state); -void KeccakPermutation(unsigned char *state); -#ifdef ProvideFast576 -void KeccakAbsorb576bits(unsigned char *state, const unsigned char *data); -#endif -#ifdef ProvideFast832 -void KeccakAbsorb832bits(unsigned char *state, const unsigned char *data); -#endif -#ifdef ProvideFast1024 -void KeccakAbsorb1024bits(unsigned char *state, const unsigned char *data); -#endif -#ifdef ProvideFast1088 -void KeccakAbsorb1088bits(unsigned char *state, const unsigned char *data); -#endif -#ifdef ProvideFast1152 -void KeccakAbsorb1152bits(unsigned char *state, const unsigned char *data); -#endif -#ifdef ProvideFast1344 -void KeccakAbsorb1344bits(unsigned char *state, const unsigned char *data); -#endif -void KeccakAbsorb(unsigned char *state, const unsigned char *data, unsigned int laneCount); -#ifdef ProvideFast1024 -void KeccakExtract1024bits(const unsigned char *state, unsigned char *data); -#endif -void KeccakExtract(const unsigned char *state, unsigned char *data, unsigned int laneCount); - -} // namespace - -#endif diff --git a/node_modules/sha3/src/KeccakF-1600-reference.cpp b/node_modules/sha3/src/KeccakF-1600-reference.cpp deleted file mode 100644 index cf2a4e6..0000000 --- a/node_modules/sha3/src/KeccakF-1600-reference.cpp +++ /dev/null @@ -1,304 +0,0 @@ -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michaël Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by the designers, -hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#include -#include -#include "brg_endian.h" -#include "displayIntermediateValues.h" -#include "KeccakNISTInterface.h" -#include "KeccakF-1600-interface.h" - -namespace Node_SHA3 { - -typedef unsigned char UINT8; -typedef unsigned long long int UINT64; - -#define nrRounds 24 -UINT64 KeccakRoundConstants[nrRounds]; -#define nrLanes 25 -unsigned int KeccakRhoOffsets[nrLanes]; - -void KeccakPermutationOnWords(UINT64 *state); -void theta(UINT64 *A); -void rho(UINT64 *A); -void pi(UINT64 *A); -void chi(UINT64 *A); -void iota(UINT64 *A, unsigned int indexRound); - -void fromBytesToWords(UINT64 *stateAsWords, const unsigned char *state) -{ - unsigned int i, j; - - for(i=0; i<(KeccakPermutationSize/64); i++) { - stateAsWords[i] = 0; - for(j=0; j<(64/8); j++) - stateAsWords[i] |= (UINT64)(state[i*(64/8)+j]) << (8*j); - } -} - -void fromWordsToBytes(unsigned char *state, const UINT64 *stateAsWords) -{ - unsigned int i, j; - - for(i=0; i<(KeccakPermutationSize/64); i++) - for(j=0; j<(64/8); j++) - state[i*(64/8)+j] = (stateAsWords[i] >> (8*j)) & 0xFF; -} - -void KeccakPermutation(unsigned char *state) -{ -#if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN) - UINT64 stateAsWords[KeccakPermutationSize/64]; -#endif - - displayStateAsBytes(1, "Input of permutation", state); -#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) - KeccakPermutationOnWords((UINT64*)state); -#else - fromBytesToWords(stateAsWords, state); - KeccakPermutationOnWords(stateAsWords); - fromWordsToBytes(state, stateAsWords); -#endif - displayStateAsBytes(1, "State after permutation", state); -} - -void KeccakPermutationAfterXor(unsigned char *state, const unsigned char *data, unsigned int dataLengthInBytes) -{ - unsigned int i; - - for(i=0; i> (64-offset))) : a) - -void theta(UINT64 *A) -{ - unsigned int x, y; - UINT64 C[5], D[5]; - - for(x=0; x<5; x++) { - C[x] = 0; - for(y=0; y<5; y++) - C[x] ^= A[index(x, y)]; - } - for(x=0; x<5; x++) - D[x] = ROL64(C[(x+1)%5], 1) ^ C[(x+4)%5]; - for(x=0; x<5; x++) - for(y=0; y<5; y++) - A[index(x, y)] ^= D[x]; -} - -void rho(UINT64 *A) -{ - unsigned int x, y; - - for(x=0; x<5; x++) for(y=0; y<5; y++) - A[index(x, y)] = ROL64(A[index(x, y)], KeccakRhoOffsets[index(x, y)]); -} - -void pi(UINT64 *A) -{ - unsigned int x, y; - UINT64 tempA[25]; - - for(x=0; x<5; x++) for(y=0; y<5; y++) - tempA[index(x, y)] = A[index(x, y)]; - for(x=0; x<5; x++) for(y=0; y<5; y++) - A[index(0*x+1*y, 2*x+3*y)] = tempA[index(x, y)]; -} - -void chi(UINT64 *A) -{ - unsigned int x, y; - UINT64 C[5]; - - for(y=0; y<5; y++) { - for(x=0; x<5; x++) - C[x] = A[index(x, y)] ^ ((~A[index(x+1, y)]) & A[index(x+2, y)]); - for(x=0; x<5; x++) - A[index(x, y)] = C[x]; - } -} - -void iota(UINT64 *A, unsigned int indexRound) -{ - A[index(0, 0)] ^= KeccakRoundConstants[indexRound]; -} - -int LFSR86540(UINT8 *LFSR) -{ - int result = ((*LFSR) & 0x01) != 0; - if (((*LFSR) & 0x80) != 0) - // Primitive polynomial over GF(2): x^8+x^6+x^5+x^4+1 - (*LFSR) = ((*LFSR) << 1) ^ 0x71; - else - (*LFSR) <<= 1; - return result; -} - -void KeccakInitializeRoundConstants() -{ - UINT8 LFSRstate = 0x01; - unsigned int i, j, bitPosition; - - for(i=0; i> 32)); - fprintf(f, "%08X", (unsigned int)(KeccakRoundConstants[i] & 0xFFFFFFFFULL)); - fprintf(f, "\n"); - } - fprintf(f, "\n"); -} - -void displayRhoOffsets(FILE *f) -{ - unsigned int x, y; - - for(y=0; y<5; y++) for(x=0; x<5; x++) { - fprintf(f, "RhoOffset[%i][%i] = ", x, y); - fprintf(f, "%2i", KeccakRhoOffsets[index(x, y)]); - fprintf(f, "\n"); - } - fprintf(f, "\n"); -} - -void KeccakInitializeState(unsigned char *state) -{ - memset(state, 0, KeccakPermutationSizeInBytes); -} - -#ifdef ProvideFast576 -void KeccakAbsorb576bits(unsigned char *state, const unsigned char *data) -{ - KeccakPermutationAfterXor(state, data, 72); -} -#endif - -#ifdef ProvideFast832 -void KeccakAbsorb832bits(unsigned char *state, const unsigned char *data) -{ - KeccakPermutationAfterXor(state, data, 104); -} -#endif - -#ifdef ProvideFast1024 -void KeccakAbsorb1024bits(unsigned char *state, const unsigned char *data) -{ - KeccakPermutationAfterXor(state, data, 128); -} -#endif - -#ifdef ProvideFast1088 -void KeccakAbsorb1088bits(unsigned char *state, const unsigned char *data) -{ - KeccakPermutationAfterXor(state, data, 136); -} -#endif - -#ifdef ProvideFast1152 -void KeccakAbsorb1152bits(unsigned char *state, const unsigned char *data) -{ - KeccakPermutationAfterXor(state, data, 144); -} -#endif - -#ifdef ProvideFast1344 -void KeccakAbsorb1344bits(unsigned char *state, const unsigned char *data) -{ - KeccakPermutationAfterXor(state, data, 168); -} -#endif - -void KeccakAbsorb(unsigned char *state, const unsigned char *data, unsigned int laneCount) -{ - KeccakPermutationAfterXor(state, data, laneCount*8); -} - -#ifdef ProvideFast1024 -void KeccakExtract1024bits(const unsigned char *state, unsigned char *data) -{ - memcpy(data, state, 128); -} -#endif - -void KeccakExtract(const unsigned char *state, unsigned char *data, unsigned int laneCount) -{ - memcpy(data, state, laneCount*8); -} - -} // namespace diff --git a/node_modules/sha3/src/KeccakNISTInterface.cpp b/node_modules/sha3/src/KeccakNISTInterface.cpp deleted file mode 100644 index a483fed..0000000 --- a/node_modules/sha3/src/KeccakNISTInterface.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michaël Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by the designers, -hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#include -#include "KeccakNISTInterface.h" -#include "KeccakF-1600-interface.h" - -namespace Node_SHA3 { - -HashReturn Init(hashState *state, int hashbitlen) -{ - switch(hashbitlen) { - case 0: // Default parameters, arbitrary length output - InitSponge((spongeState*)state, 1024, 576); - break; - case 224: - InitSponge((spongeState*)state, 1152, 448); - break; - case 256: - InitSponge((spongeState*)state, 1088, 512); - break; - case 384: - InitSponge((spongeState*)state, 832, 768); - break; - case 512: - InitSponge((spongeState*)state, 576, 1024); - break; - default: - return BAD_HASHLEN; - } - state->fixedOutputLength = hashbitlen; - return SUCCESS; -} - -HashReturn Update(hashState *state, const BitSequence *data, DataLength databitlen) -{ - if ((databitlen % 8) == 0) - return (HashReturn) Absorb((spongeState*)state, data, databitlen); - else { - HashReturn ret = (HashReturn) Absorb((spongeState*)state, data, databitlen - (databitlen % 8)); - if (ret == SUCCESS) { - unsigned char lastByte; - // Align the last partial byte to the least significant bits - lastByte = data[databitlen/8] >> (8 - (databitlen % 8)); - return (HashReturn) Absorb((spongeState*)state, &lastByte, databitlen % 8); - } - else - return ret; - } -} - -HashReturn Final(hashState *state, BitSequence *hashval) -{ - return (HashReturn) Squeeze(state, hashval, state->fixedOutputLength); -} - -HashReturn Hash(int hashbitlen, const BitSequence *data, DataLength databitlen, BitSequence *hashval) -{ - hashState state; - HashReturn result; - - if ((hashbitlen != 224) && (hashbitlen != 256) && (hashbitlen != 384) && (hashbitlen != 512)) - return BAD_HASHLEN; // Only the four fixed output lengths available through this API - result = Init(&state, hashbitlen); - if (result != SUCCESS) - return result; - result = Update(&state, data, databitlen); - if (result != SUCCESS) - return result; - result = Final(&state, hashval); - return result; -} - -} // namespace diff --git a/node_modules/sha3/src/KeccakNISTInterface.h b/node_modules/sha3/src/KeccakNISTInterface.h deleted file mode 100644 index de63317..0000000 --- a/node_modules/sha3/src/KeccakNISTInterface.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michaël Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by the designers, -hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#ifndef _KeccakNISTInterface_h_ -#define _KeccakNISTInterface_h_ - -#include "KeccakSponge.h" - -namespace Node_SHA3 { - -typedef unsigned char BitSequence; -typedef unsigned long long DataLength; -typedef enum { SUCCESS = 0, FAIL = 1, BAD_HASHLEN = 2 } HashReturn; - -typedef spongeState hashState; - -/** - * Function to initialize the state of the Keccak[r, c] sponge function. - * The rate r and capacity c values are determined from @a hashbitlen. - * @param state Pointer to the state of the sponge function to be initialized. - * @param hashbitlen The desired number of output bits, - * or 0 for Keccak[] with default parameters - * and arbitrarily-long output. - * @pre The value of hashbitlen must be one of 0, 224, 256, 384 and 512. - * @return SUCCESS if successful, BAD_HASHLEN if the value of hashbitlen is incorrect. - */ -HashReturn Init(hashState *state, int hashbitlen); -/** - * Function to give input data for the sponge function to absorb. - * @param state Pointer to the state of the sponge function initialized by Init(). - * @param data Pointer to the input data. - * When @a databitLen is not a multiple of 8, the last bits of data must be - * in the most significant bits of the last byte. - * @param databitLen The number of input bits provided in the input data. - * @pre In the previous call to Absorb(), databitLen was a multiple of 8. - * @return SUCCESS if successful, FAIL otherwise. - */ -HashReturn Update(hashState *state, const BitSequence *data, DataLength databitlen); -/** - * Function to squeeze output data from the sponge function. - * If @a hashbitlen was not 0 in the call to Init(), the number of output bits is equal to @a hashbitlen. - * If @a hashbitlen was 0 in the call to Init(), the output bits must be extracted using the Squeeze() function. - * @param state Pointer to the state of the sponge function initialized by Init(). - * @param hashval Pointer to the buffer where to store the output data. - * @return SUCCESS if successful, FAIL otherwise. - */ -HashReturn Final(hashState *state, BitSequence *hashval); -/** - * Function to compute a hash using the Keccak[r, c] sponge function. - * The rate r and capacity c values are determined from @a hashbitlen. - * @param hashbitlen The desired number of output bits. - * @param data Pointer to the input data. - * When @a databitLen is not a multiple of 8, the last bits of data must be - * in the most significant bits of the last byte. - * @param databitLen The number of input bits provided in the input data. - * @param hashval Pointer to the buffer where to store the output data. - * @pre The value of hashbitlen must be one of 224, 256, 384 and 512. - * @return SUCCESS if successful, BAD_HASHLEN if the value of hashbitlen is incorrect. - */ -HashReturn Hash(int hashbitlen, const BitSequence *data, DataLength databitlen, BitSequence *hashval); - -} // namespace - -#endif diff --git a/node_modules/sha3/src/KeccakSponge.cpp b/node_modules/sha3/src/KeccakSponge.cpp deleted file mode 100644 index 0df91aa..0000000 --- a/node_modules/sha3/src/KeccakSponge.cpp +++ /dev/null @@ -1,270 +0,0 @@ -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michaël Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by the designers, -hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#include -#include "KeccakSponge.h" -#include "KeccakF-1600-interface.h" -#ifdef KeccakReference -#include "displayIntermediateValues.h" -#endif - -namespace Node_SHA3 { - -int InitSponge(spongeState *state, unsigned int rate, unsigned int capacity) -{ - if (rate+capacity != 1600) - return 1; - if ((rate <= 0) || (rate >= 1600) || ((rate % 64) != 0)) - return 1; - KeccakInitialize(); - state->rate = rate; - state->capacity = capacity; - state->fixedOutputLength = 0; - KeccakInitializeState(state->state); - memset(state->dataQueue, 0, KeccakMaximumRateInBytes); - state->bitsInQueue = 0; - state->squeezing = 0; - state->bitsAvailableForSqueezing = 0; - - return 0; -} - -void AbsorbQueue(spongeState *state) -{ - // state->bitsInQueue is assumed to be equal to state->rate - #ifdef KeccakReference - displayBytes(1, "Block to be absorbed", state->dataQueue, state->rate/8); - #endif -#ifdef ProvideFast576 - if (state->rate == 576) - KeccakAbsorb576bits(state->state, state->dataQueue); - else -#endif -#ifdef ProvideFast832 - if (state->rate == 832) - KeccakAbsorb832bits(state->state, state->dataQueue); - else -#endif -#ifdef ProvideFast1024 - if (state->rate == 1024) - KeccakAbsorb1024bits(state->state, state->dataQueue); - else -#endif -#ifdef ProvideFast1088 - if (state->rate == 1088) - KeccakAbsorb1088bits(state->state, state->dataQueue); - else -#endif -#ifdef ProvideFast1152 - if (state->rate == 1152) - KeccakAbsorb1152bits(state->state, state->dataQueue); - else -#endif -#ifdef ProvideFast1344 - if (state->rate == 1344) - KeccakAbsorb1344bits(state->state, state->dataQueue); - else -#endif - KeccakAbsorb(state->state, state->dataQueue, state->rate/64); - state->bitsInQueue = 0; -} - -int Absorb(spongeState *state, const unsigned char *data, unsigned long long databitlen) -{ - unsigned long long i, j, wholeBlocks; - unsigned int partialBlock, partialByte; - const unsigned char *curData; - - if ((state->bitsInQueue % 8) != 0) - return 1; // Only the last call may contain a partial byte - if (state->squeezing) - return 1; // Too late for additional input - - i = 0; - while(i < databitlen) { - if ((state->bitsInQueue == 0) && (databitlen >= state->rate) && (i <= (databitlen-state->rate))) { - wholeBlocks = (databitlen-i)/state->rate; - curData = data+i/8; -#ifdef ProvideFast576 - if (state->rate == 576) { - for(j=0; jrate/8); - #endif - KeccakAbsorb576bits(state->state, curData); - } - } - else -#endif -#ifdef ProvideFast832 - if (state->rate == 832) { - for(j=0; jrate/8); - #endif - KeccakAbsorb832bits(state->state, curData); - } - } - else -#endif -#ifdef ProvideFast1024 - if (state->rate == 1024) { - for(j=0; jrate/8); - #endif - KeccakAbsorb1024bits(state->state, curData); - } - } - else -#endif -#ifdef ProvideFast1088 - if (state->rate == 1088) { - for(j=0; jrate/8); - #endif - KeccakAbsorb1088bits(state->state, curData); - } - } - else -#endif -#ifdef ProvideFast1152 - if (state->rate == 1152) { - for(j=0; jrate/8); - #endif - KeccakAbsorb1152bits(state->state, curData); - } - } - else -#endif -#ifdef ProvideFast1344 - if (state->rate == 1344) { - for(j=0; jrate/8); - #endif - KeccakAbsorb1344bits(state->state, curData); - } - } - else -#endif - { - for(j=0; jrate/8) { - #ifdef KeccakReference - displayBytes(1, "Block to be absorbed", curData, state->rate/8); - #endif - KeccakAbsorb(state->state, curData, state->rate/64); - } - } - i += wholeBlocks*state->rate; - } - else { - partialBlock = (unsigned int)(databitlen - i); - if (partialBlock+state->bitsInQueue > state->rate) - partialBlock = state->rate-state->bitsInQueue; - partialByte = partialBlock % 8; - partialBlock -= partialByte; - memcpy(state->dataQueue+state->bitsInQueue/8, data+i/8, partialBlock/8); - state->bitsInQueue += partialBlock; - i += partialBlock; - if (state->bitsInQueue == state->rate) - AbsorbQueue(state); - if (partialByte > 0) { - unsigned char mask = (1 << partialByte)-1; - state->dataQueue[state->bitsInQueue/8] = data[i/8] & mask; - state->bitsInQueue += partialByte; - i += partialByte; - } - } - } - return 0; -} - -void PadAndSwitchToSqueezingPhase(spongeState *state) -{ - // Note: the bits are numbered from 0=LSB to 7=MSB - if (state->bitsInQueue + 1 == state->rate) { - state->dataQueue[state->bitsInQueue/8 ] |= 1 << (state->bitsInQueue % 8); - AbsorbQueue(state); - memset(state->dataQueue, 0, state->rate/8); - } - else { - memset(state->dataQueue + (state->bitsInQueue+7)/8, 0, state->rate/8 - (state->bitsInQueue+7)/8); - state->dataQueue[state->bitsInQueue/8 ] |= 1 << (state->bitsInQueue % 8); - } - state->dataQueue[(state->rate-1)/8] |= 1 << ((state->rate-1) % 8); - AbsorbQueue(state); - - #ifdef KeccakReference - displayText(1, "--- Switching to squeezing phase ---"); - #endif -#ifdef ProvideFast1024 - if (state->rate == 1024) { - KeccakExtract1024bits(state->state, state->dataQueue); - state->bitsAvailableForSqueezing = 1024; - } - else -#endif - { - KeccakExtract(state->state, state->dataQueue, state->rate/64); - state->bitsAvailableForSqueezing = state->rate; - } - #ifdef KeccakReference - displayBytes(1, "Block available for squeezing", state->dataQueue, state->bitsAvailableForSqueezing/8); - #endif - state->squeezing = 1; -} - -int Squeeze(spongeState *state, unsigned char *output, unsigned long long outputLength) -{ - unsigned long long i; - unsigned int partialBlock; - - if (!state->squeezing) - PadAndSwitchToSqueezingPhase(state); - if ((outputLength % 8) != 0) - return 1; // Only multiple of 8 bits are allowed, truncation can be done at user level - - i = 0; - while(i < outputLength) { - if (state->bitsAvailableForSqueezing == 0) { - KeccakPermutation(state->state); -#ifdef ProvideFast1024 - if (state->rate == 1024) { - KeccakExtract1024bits(state->state, state->dataQueue); - state->bitsAvailableForSqueezing = 1024; - } - else -#endif - { - KeccakExtract(state->state, state->dataQueue, state->rate/64); - state->bitsAvailableForSqueezing = state->rate; - } - #ifdef KeccakReference - displayBytes(1, "Block available for squeezing", state->dataQueue, state->bitsAvailableForSqueezing/8); - #endif - } - partialBlock = state->bitsAvailableForSqueezing; - if ((unsigned long long)partialBlock > outputLength - i) - partialBlock = (unsigned int)(outputLength - i); - memcpy(output+i/8, state->dataQueue+(state->rate-state->bitsAvailableForSqueezing)/8, partialBlock/8); - state->bitsAvailableForSqueezing -= partialBlock; - i += partialBlock; - } - return 0; -} - -} // namespace diff --git a/node_modules/sha3/src/KeccakSponge.h b/node_modules/sha3/src/KeccakSponge.h deleted file mode 100644 index 0b20b5d..0000000 --- a/node_modules/sha3/src/KeccakSponge.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michaël Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by the designers, -hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#ifndef _KeccakSponge_h_ -#define _KeccakSponge_h_ - -#define KeccakPermutationSize 1600 -#define KeccakPermutationSizeInBytes (KeccakPermutationSize/8) -#define KeccakMaximumRate 1536 -#define KeccakMaximumRateInBytes (KeccakMaximumRate/8) - -#if defined(__GNUC__) -#define ALIGN __attribute__ ((aligned(32))) -#elif defined(_MSC_VER) -#define ALIGN __declspec(align(32)) -#else -#define ALIGN -#endif - -namespace Node_SHA3 { - -ALIGN typedef struct spongeStateStruct { - ALIGN unsigned char state[KeccakPermutationSizeInBytes]; - ALIGN unsigned char dataQueue[KeccakMaximumRateInBytes]; - unsigned int rate; - unsigned int capacity; - unsigned int bitsInQueue; - unsigned int fixedOutputLength; - int squeezing; - unsigned int bitsAvailableForSqueezing; -} spongeState; - -/** - * Function to initialize the state of the Keccak[r, c] sponge function. - * The sponge function is set to the absorbing phase. - * @param state Pointer to the state of the sponge function to be initialized. - * @param rate The value of the rate r. - * @param capacity The value of the capacity c. - * @pre One must have r+c=1600 and the rate a multiple of 64 bits in this implementation. - * @return Zero if successful, 1 otherwise. - */ -int InitSponge(spongeState *state, unsigned int rate, unsigned int capacity); -/** - * Function to give input data for the sponge function to absorb. - * @param state Pointer to the state of the sponge function initialized by InitSponge(). - * @param data Pointer to the input data. - * When @a databitLen is not a multiple of 8, the last bits of data must be - * in the least significant bits of the last byte. - * @param databitLen The number of input bits provided in the input data. - * @pre In the previous call to Absorb(), databitLen was a multiple of 8. - * @pre The sponge function must be in the absorbing phase, - * i.e., Squeeze() must not have been called before. - * @return Zero if successful, 1 otherwise. - */ -int Absorb(spongeState *state, const unsigned char *data, unsigned long long databitlen); -/** - * Function to squeeze output data from the sponge function. - * If the sponge function was in the absorbing phase, this function - * switches it to the squeezing phase. - * @param state Pointer to the state of the sponge function initialized by InitSponge(). - * @param output Pointer to the buffer where to store the output data. - * @param outputLength The number of output bits desired. - * It must be a multiple of 8. - * @return Zero if successful, 1 otherwise. - */ -int Squeeze(spongeState *state, unsigned char *output, unsigned long long outputLength); - -} // namespace - -#endif diff --git a/node_modules/sha3/src/addon.cpp b/node_modules/sha3/src/addon.cpp deleted file mode 100644 index 71012ef..0000000 --- a/node_modules/sha3/src/addon.cpp +++ /dev/null @@ -1,164 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "KeccakNISTInterface.h" - -#define MAX_DIGEST_SIZE 64 -#define ASSERT_IS_STRING_OR_BUFFER(val) \ - if (!val->IsString() && !Buffer::HasInstance(val)) { \ - return Nan::ThrowTypeError("Not a string or buffer"); \ - } - -using namespace node; -using namespace v8; -using namespace Node_SHA3; - -static void toHex(const char *data_buf, size_t size, char *output); - -class SHA3Hash: public ObjectWrap { -private: - SHA3Hash() - {} - - ~SHA3Hash() - {} - - static - NAN_METHOD(New) { - SHA3Hash *obj; - int32_t hashlen; - - hashlen = info[0]->IsUndefined() ? 512 : info[0]->Int32Value(); - switch (hashlen) { - case 224: - case 256: - case 384: - case 512: - break; - default: - return Nan::ThrowTypeError("Unsupported hash length"); - } - - if (info.IsConstructCall()) { - // Invoked as constructor. - obj = new SHA3Hash(); - obj->Wrap(info.This()); - obj->bitlen = hashlen; - ::Init(&obj->state, hashlen); - info.GetReturnValue().Set(info.This()); - } else { - // Invoked as a plain function. - const int argc = 1; - Local argv[argc] = { Nan::New(hashlen) }; - Local cons = Nan::New(constructor); - info.GetReturnValue().Set(cons->NewInstance(argc, argv)); - } - } - -public: - hashState state; - int32_t bitlen; - - static - NAN_MODULE_INIT(Init) { - Local t = Nan::New(New); - t->SetClassName(Nan::New("SHA3Hash").ToLocalChecked()); - t->InstanceTemplate()->SetInternalFieldCount(1); - - Nan::SetPrototypeMethod(t, "update", Update); - Nan::SetPrototypeMethod(t, "digest", Digest); - - constructor.Reset(t->GetFunction()); - target->Set(Nan::New("SHA3Hash").ToLocalChecked(), t->GetFunction()); - } - - static - NAN_METHOD(Update) { - SHA3Hash *obj = ObjectWrap::Unwrap(info.This()); - - ASSERT_IS_STRING_OR_BUFFER(info[0]); -#if NODE_VERSION_AT_LEAST(0,11,0) - enum Nan::Encoding enc = static_cast(ParseEncoding(Isolate::GetCurrent(), info[0], node::BINARY)); -#else - enum Nan::Encoding enc = static_cast(ParseEncoding(info[0], node::BINARY)); -#endif - ssize_t len = Nan::DecodeBytes(info[0], enc); - - if (len < 0) { - return Nan::ThrowError("Bad argument"); - } - - if (Buffer::HasInstance(info[0])) { - Local buffer_obj = info[0]->ToObject(); - const char *buffer_data = Buffer::Data(buffer_obj); - size_t buffer_length = Buffer::Length(buffer_obj); - ::Update(&obj->state, (const BitSequence *) buffer_data, buffer_length * 8); - } else { - char *buf = new char[len]; - ssize_t written = Nan::DecodeWrite(buf, len, info[0], enc); - assert(written == len); - ::Update(&obj->state, (const BitSequence *) buf, len * 8); - delete[] buf; - } - - info.GetReturnValue().Set(info.This()); - } - - static - NAN_METHOD(Digest) { - SHA3Hash *obj = ObjectWrap::Unwrap(info.This()); - hashState state2; - unsigned char digest[MAX_DIGEST_SIZE]; - - memcpy(&state2, &obj->state, sizeof(hashState)); - Final(&state2, digest); - - Local outString; -#if NODE_VERSION_AT_LEAST(0,11,0) - enum Nan::Encoding enc = static_cast(ParseEncoding(Isolate::GetCurrent(), info[0], node::BINARY)); -#else - enum Nan::Encoding enc = static_cast(ParseEncoding(info[0], node::BINARY)); -#endif - if (enc == Nan::HEX) { - // Hex encoding - char hexdigest[MAX_DIGEST_SIZE * 2]; - toHex((const char *) digest, obj->bitlen / 8, hexdigest); - outString = Nan::Encode(hexdigest, obj->bitlen / 4, Nan::BINARY); - } else if (enc == Nan::BINARY /* || enc == BUFFER */) { - outString = Nan::Encode(digest, obj->bitlen / 8, enc); - } else { - return Nan::ThrowError("Unsupported output encoding"); - } - - info.GetReturnValue().Set(outString); - } - -private: - static Nan::Persistent constructor; -}; - -Nan::Persistent SHA3Hash::constructor; - -static const char hex_chars[] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', - 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', - 'u', 'v', 'w', 'x', 'y', 'z' -}; - -static void -toHex(const char *data_buf, size_t size, char *output) { - size_t i; - - for (i = 0; i < size; i++) { - output[i * 2] = hex_chars[(unsigned char) data_buf[i] / 16]; - output[i * 2 + 1] = hex_chars[(unsigned char) data_buf[i] % 16]; - } -} - -NODE_MODULE(sha3, SHA3Hash::Init) diff --git a/node_modules/sha3/src/brg_endian.h b/node_modules/sha3/src/brg_endian.h deleted file mode 100644 index 7226eb3..0000000 --- a/node_modules/sha3/src/brg_endian.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - --------------------------------------------------------------------------- - Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved. - - LICENSE TERMS - - The redistribution and use of this software (with or without changes) - is allowed without the payment of fees or royalties provided that: - - 1. source code distributions include the above copyright notice, this - list of conditions and the following disclaimer; - - 2. binary distributions include the above copyright notice, this list - of conditions and the following disclaimer in their documentation; - - 3. the name of the copyright holder is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explicit or implied warranties - in respect of its properties, including, but not limited to, correctness - and/or fitness for purpose. - --------------------------------------------------------------------------- - Issue Date: 20/12/2007 - Changes for ARM 9/9/2010 -*/ - -#ifndef _BRG_ENDIAN_H -#define _BRG_ENDIAN_H - -#define IS_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */ -#define IS_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */ - -#if 0 -/* Include files where endian defines and byteswap functions may reside */ -#if defined( __sun ) -# include -#elif defined( __FreeBSD__ ) || defined( __OpenBSD__ ) || defined( __NetBSD__ ) -# include -#elif defined( BSD ) && ( BSD >= 199103 ) || defined( __APPLE__ ) || \ - defined( __CYGWIN32__ ) || defined( __DJGPP__ ) || defined( __osf__ ) -# include -#elif defined( __linux__ ) || defined( __GNUC__ ) || defined( __GNU_LIBRARY__ ) -# if !defined( __MINGW32__ ) && !defined( _AIX ) -# include -# if !defined( __BEOS__ ) -# include -# endif -# endif -#endif -#endif - -/* Now attempt to set the define for platform byte order using any */ -/* of the four forms SYMBOL, _SYMBOL, __SYMBOL & __SYMBOL__, which */ -/* seem to encompass most endian symbol definitions */ - -#if defined( BIG_ENDIAN ) && defined( LITTLE_ENDIAN ) -# if defined( BYTE_ORDER ) && BYTE_ORDER == BIG_ENDIAN -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -# elif defined( BYTE_ORDER ) && BYTE_ORDER == LITTLE_ENDIAN -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -# endif -#elif defined( BIG_ENDIAN ) -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -#elif defined( LITTLE_ENDIAN ) -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -#endif - -#if defined( _BIG_ENDIAN ) && defined( _LITTLE_ENDIAN ) -# if defined( _BYTE_ORDER ) && _BYTE_ORDER == _BIG_ENDIAN -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -# elif defined( _BYTE_ORDER ) && _BYTE_ORDER == _LITTLE_ENDIAN -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -# endif -#elif defined( _BIG_ENDIAN ) -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -#elif defined( _LITTLE_ENDIAN ) -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -#endif - -#if defined( __BIG_ENDIAN ) && defined( __LITTLE_ENDIAN ) -# if defined( __BYTE_ORDER ) && __BYTE_ORDER == __BIG_ENDIAN -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -# elif defined( __BYTE_ORDER ) && __BYTE_ORDER == __LITTLE_ENDIAN -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -# endif -#elif defined( __BIG_ENDIAN ) -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -#elif defined( __LITTLE_ENDIAN ) -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -#endif - -#if defined( __BIG_ENDIAN__ ) && defined( __LITTLE_ENDIAN__ ) -# if defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __BIG_ENDIAN__ -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -# elif defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __LITTLE_ENDIAN__ -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -# endif -#elif defined( __BIG_ENDIAN__ ) -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -#elif defined( __LITTLE_ENDIAN__ ) -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -#endif - -/* if the platform byte order could not be determined, then try to */ -/* set this define using common machine defines */ -#if !defined(PLATFORM_BYTE_ORDER) - -#if defined( __alpha__ ) || defined( __alpha ) || defined( i386 ) || \ - defined( __i386__ ) || defined( _M_I86 ) || defined( _M_IX86 ) || \ - defined( __OS2__ ) || defined( sun386 ) || defined( __TURBOC__ ) || \ - defined( vax ) || defined( vms ) || defined( VMS ) || \ - defined( __VMS ) || defined( _M_X64 ) -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN - -#elif defined( AMIGA ) || defined( applec ) || defined( __AS400__ ) || \ - defined( _CRAY ) || defined( __hppa ) || defined( __hp9000 ) || \ - defined( ibm370 ) || defined( mc68000 ) || defined( m68k ) || \ - defined( __MRC__ ) || defined( __MVS__ ) || defined( __MWERKS__ ) || \ - defined( sparc ) || defined( __sparc) || defined( SYMANTEC_C ) || \ - defined( __VOS__ ) || defined( __TIGCC__ ) || defined( __TANDEM ) || \ - defined( THINK_C ) || defined( __VMCMS__ ) || defined( _AIX ) -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN - -#elif defined(__arm__) -# ifdef __BIG_ENDIAN -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -# else -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -# endif -#elif 1 /* **** EDIT HERE IF NECESSARY **** */ -# define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN -#elif 0 /* **** EDIT HERE IF NECESSARY **** */ -# define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN -#else -# error Please edit lines 132 or 134 in brg_endian.h to set the platform byte order -#endif - -#endif - -#endif diff --git a/node_modules/sha3/src/displayIntermediateValues.cpp b/node_modules/sha3/src/displayIntermediateValues.cpp deleted file mode 100644 index ca8d5aa..0000000 --- a/node_modules/sha3/src/displayIntermediateValues.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michaël Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by the designers, -hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#include -#include "displayIntermediateValues.h" -#include "KeccakNISTInterface.h" - -namespace Node_SHA3 { - -FILE *intermediateValueFile = 0; -int displayLevel = 0; - -void displaySetIntermediateValueFile(FILE *f) -{ - intermediateValueFile = f; -} - -void displaySetLevel(int level) -{ - displayLevel = level; -} - -void displayBytes(int level, const char *text, const unsigned char *bytes, unsigned int size) -{ - unsigned int i; - - if ((intermediateValueFile) && (level <= displayLevel)) { - fprintf(intermediateValueFile, "%s:\n", text); - for(i=0; i> iBit) & 0x01) != 0); - } - fprintf(intermediateValueFile, "\n"); - fprintf(intermediateValueFile, "\n"); - } -} - -void displayStateAsBytes(int level, const char *text, const unsigned char *state) -{ - displayBytes(level, text, state, KeccakPermutationSizeInBytes); -} - -void displayStateAs32bitWords(int level, const char *text, const unsigned int *state) -{ - unsigned int i; - - if ((intermediateValueFile) && (level <= displayLevel)) { - fprintf(intermediateValueFile, "%s:\n", text); - for(i=0; i> 32)); - fprintf(intermediateValueFile, "%08X", (unsigned int)(state[i] & 0xFFFFFFFFULL)); - if ((i%5) == 4) - fprintf(intermediateValueFile, "\n"); - else - fprintf(intermediateValueFile, " "); - } - } -} - -void displayRoundNumber(int level, unsigned int i) -{ - if ((intermediateValueFile) && (level <= displayLevel)) { - fprintf(intermediateValueFile, "\n"); - fprintf(intermediateValueFile, "--- Round %d ---\n", i); - fprintf(intermediateValueFile, "\n"); - } -} - -void displayText(int level, const char *text) -{ - if ((intermediateValueFile) && (level <= displayLevel)) { - fprintf(intermediateValueFile, "%s", text); - fprintf(intermediateValueFile, "\n"); - fprintf(intermediateValueFile, "\n"); - } -} - -} // namespace diff --git a/node_modules/sha3/src/displayIntermediateValues.h b/node_modules/sha3/src/displayIntermediateValues.h deleted file mode 100644 index f638911..0000000 --- a/node_modules/sha3/src/displayIntermediateValues.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, -Michaël Peeters and Gilles Van Assche. For more information, feedback or -questions, please refer to our website: http://keccak.noekeon.org/ - -Implementation by the designers, -hereby denoted as "the implementer". - -To the extent possible under law, the implementer has waived all copyright -and related or neighboring rights to the source code in this file. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -#ifndef _displayIntermediateValues_h_ -#define _displayIntermediateValues_h_ - -#include - -namespace Node_SHA3 { - -void displaySetIntermediateValueFile(FILE *f); -void displaySetLevel(int level); -void displayBytes(int level, const char *text, const unsigned char *bytes, unsigned int size); -void displayBits(int level, const char *text, const unsigned char *data, unsigned int size, int MSBfirst); -void displayStateAsBytes(int level, const char *text, const unsigned char *state); -void displayStateAs32bitWords(int level, const char *text, const unsigned int *state); -void displayStateAs64bitWords(int level, const char *text, const unsigned long long int *state); -void displayRoundNumber(int level, unsigned int i); -void displayText(int level, const char *text); - -} // namespace - -#endif diff --git a/node_modules/sha3/test/data/LongMsgKAT_224.txt b/node_modules/sha3/test/data/LongMsgKAT_224.txt deleted file mode 100755 index 6024006..0000000 --- a/node_modules/sha3/test/data/LongMsgKAT_224.txt +++ /dev/null @@ -1,1543 +0,0 @@ -# LongMsgKAT_224.txt -# Algorithm Name: Keccak -# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche) - -Len = 2048 -Msg = 724627916C50338643E6996F07877EAFD96BDF01DA7E991D4155B9BE1295EA7D21C9391F4C4A41C75F77E5D27389253393725F1427F57914B273AB862B9E31DABCE506E558720520D33352D119F699E784F9E548FF91BC35CA147042128709820D69A8287EA3257857615EB0321270E94B84F446942765CE882B191FAEE7E1C87E0F0BD4E0CD8A927703524B559B769CA4ECE1F6DBF313FDCF67C572EC4185C1A88E86EC11B6454B371980020F19633B6B95BD280E4FBCB0161E1A82470320CEC6ECFA25AC73D09F1536F286D3F9DACAFB2CD1D0CE72D64D197F5C7520B3CCB2FD74EB72664BA93853EF41EABF52F015DD591500D018DD162815CC993595B195 -MD = E90F81AE86D72DCC2190AF545A345150A629EE7DC7237C1958CFCDBC -Len = 2111 -Msg = 919FE5E7F35F64A7487649E564771DBBF10AE204ECC2181312D1A79FB579297C94F0DB9EAAE9E009A4F02057AF2C973C5DAFA7B60154371A5D2C8E992FB6429176F8424B1A866BC1D1BED00438E97FAB42040DCACDEF7CA9FC2033059B8898BB40CCFB2634B051797BDF3B915C503EC81839AD01E0F4F2F871EFF2008D40011730BE7A47888E7955A806876BE120CB0F3A139A3620154ECC6482A70F5629F6A9D3341BE6FBBF48E5AA0C53589A04F057DD44268AFFCABF75ADFC549F73F454264D46A98CCA80E3000C7446853DD5B430C9344E87E3230555B09FB3E7E64B5AD3989293AC0FEEC0E75F909696F028A5525D26DDEA5D2B2C813FB3613DFF38CE23209285CC77C60860 -MD = 0A983F18241DC9648BC404F6EFAEAC20AD81FF3825F38F069A64124C -Len = 2174 -Msg = BD687B6D6684949FBD52A8196DF5D5927B403DEE88A47E4E4B52071BDDA6A6284A9EA1EB84950BA17A60277B0FEA83C930E5619D5A6D232901B9D3A696662C7FD5F1349B494BC166C67B717C06D03E9FB05DB9EE292D4792F459E0ACC08369E3D14684CFF388C940F30738FB71D97EFEB51C7DB553CB85B6FC18429815EC71420822151BB8F5135DD698EFE3D3118963EE194F94682DFA62EC9D3BCB5F826DA790779704DF2AC5C8A9FA2B50A42A87ED2FBADF1E1C8E55689531786A9858DE9E88009E56873FD2D431FCFC99B85574342DC7E78406678BDE94B9A06974DFF154EAC3BC7977AC7C123EBCDAC0641A69B792058BA373EDD1BA45E3339C2ABC032993B25F4E3BFA3D5FF620C621D94C40F8 -MD = 2B27021ABB8098A491B36702DB12CDD362A53B948021BC95417E5273 -Len = 2237 -Msg = D13409007A6B3242CBAD4CE01D9AED77EFEF0A7725B96A30097EA092FA1E49A136DE03F3F348464C9BEA033216F380440C7EC81E284738DCC640D485ED32F5D7DD1CF936C1677CBB3CDD8E0E001783FD5A3F388AE6EF7085FF9A22FA722C7FCCF4CDC239B200D5D11884B565D01C84E4D563C6623C241C5AE0812CE8F9201BBADE48198378A3E232EF3E10C03022620A266D0A346A6A22F202333A94D2CEF495DBA102B133B8237449C3350BF80EE51B6EE8A972CCFC3ED5FD7790444DA253922EEF6C611180F91DF1B6E58E843D318D94A958A017590B14D383C0F385F9CF2514E8AE1EA749795E10F991E3FB744C6030EF6B02989E8EFFBF8E8BF31FC39B692C517C7C012ECBD0E0785BDEF4801C4E036C98C6CD0C9328 -MD = 5C138E78068CF321192F33C7B46F11D7D3429B0D978F4BACA65E0634 -Len = 2300 -Msg = 68F891C11459B2E9B71774E2B8A2A5C3C9CC36072E3498498496F1C7901684F3E9DACF13A3F1BAE22140DEE5253732E4D4196B534F675264B53D38659727797F0A18910CCB5B48FE2346C2E998B6537357AF8D15826FCB57BA804FE143E765F4680A0B28A9E3716A59ABC60EF253E357A4784FF1BE4680C82D797813CE50355D8FDB3C75936CC33E1717B99D9A8ADE9D0EA9172662B708EBCBC31C05064FE67B287C56D01C12411E9B890AD16238B36E192B15CD86D26F4EFDE5B523D71656F5CEA6CA73BDC04FEB973D303BBAF4C0264761092E23220CEB8359FC91C1D918FB3F32DBBA92DEAC1C71DA8BC4BE806803F6E7970FA64721C645EED4C2BED7EEFA2B720931FDBD6C67B83756B1CE51C51F839C250AD900B9D49FE5188FC4A2B5D0 -MD = 774EE368890A3499D543DF3CB14CD34A0F34FAE105B4BBD2DBFE20AF -Len = 2363 -Msg = 7D9222C58DC49F14BFD7198A9A1C338D17201C007822A91DCD262860364CA1DA8C0056033EB58E406E36D5A4F6F7E9D98BE57126C9FE7676B58FDF0F9899432FF78DE2AB65C9000071EBA6967123F97BA3DC1F3825D3C8C5148EAD7AEF0334F40CB0F6B982CB7C99CA39E1B4B2E3A3541683D1EC5560466F52175518390D38C7461C116DB2D56EF913784D2E8B20959BBD6F8F3282C597D94A1EDBFA8F25089E9D2E8DC465EAD90FA23E4388BD6BAFE22632749B7AAEA53D5CBCF9678227ADC3F4109F1849AC2539B6F2B25B4D8EDAB41E8BFCFC337728DC48A8EA5119115FC1B133300D68231C96A9D518F6DC3CA51581309C53F49510FE18F608A215069D41F2CFC84E53A9347FD723DFF9D3F5006F7C0B18441A29BDEF7725920260B1613C6532A0A994B488E0 -MD = 3EF9BF523BCFE3BA262833BE8A16FC013EA9D324ED9A5E66DDF8AC6C -Len = 2426 -Msg = FC447A550FC565F964337521DBD6481FF6C4FEC25A2BC946230C0021570E75B0E3D50320AB24C4949CB4EA7ED6D14D10E1EB9CB4116461A743D49F337597F12D09945285647B249A2AE3EBF69F1FC62A36532B2FC89ECED5B48AC27A0E18AF8B0F023BE5C00FF0BF8C16F412B34D4AE9ECD2963583FA268ED439B4640FFCC57384EF066362E23D2F0712F9658CB7B7F56F548C4A3C7DB51D8FF4430D14CE1042221254CAA4BF009B197E6F74B42067E95E42D6C8F2D37AA5522F5594D61745BA28C8F302E007316282985730FBCB8BDAB0C5A3693BEEC32C0D57AD20D3394B7AC72831FF5DDFC8208E09057AB9E9EE2FAC208E9FCB6D0B567C4DDED41ED286678DB3860B230C9A52C577867EC35A17EF902E258CD8314F36875D97543088679415FD0D7C2A9CB6CAEE76A2A1DC294700 -MD = 63DEF0859E9E5325507FE460A93AE6127FADE47A9F5713C151A3F7CB -Len = 2489 -Msg = 3F989C5FAAB635E462C4181FE623B8205FEBCA482B0613B8CB702D0C47CABC705DA23CD238FEAE5A79B3D630C22F12FCB845FC633882BC7A46058F945E6376A5DF954953A82D5C6723156BE49438431529C9ED7A5ABC0E251EC9746F34196BFCB64850CDD962B4D4C0C37DFD7DEB4DADF6FA98F727DBE430A232BE68161A834100BF81412B9BC4B34C7E1FC4CA216A7A04E23B5A1E0AFF6967465E8FEB63A7B450026FB944C62ADA108A15FFF01FFB872925EE97EA314D84245E31745C7A3D3C83A59BD6F38205812B5CBB141833D381CA4DD3B261DAF19323BB790D0DE8F7EF8A28D1F2131B92DFA724B76BF6162872CFBAB0E3D426741F8946CE449787896308A0DA3E5B5F087E96470A6990681F10F37DBDD10A799032CEAA9CDF8DC0DE302E98980718C3F1C7D950A9D37216A3686211A658312B3300 -MD = F7B68E615F8344E5B0A41C3EECE761217B38BE93641AF28AE3245597 -Len = 2552 -Msg = 3139840B8AD4BCD39092916FD9D01798FF5AA1E48F34702C72DFE74B12E98A114E318CDD2D47A9C320FFF908A8DBC2A5B1D87267C8E983829861A567558B37B292D4575E200DE9F1DE45755FAFF9EFAE34964E4336C259F1E66599A7C904EC02539F1A8EAB8706E0B4F48F72FEC2794909EE4A7B092D6061C74481C9E21B9332DC7C6E482D7F9CC3210B38A6F88F7918C2D8C55E64A428CE2B68FD07AB572A8B0A2388664F99489F04EB54DF1376271810E0E7BCE396F52807710E0DEA94EB49F4B367271260C3456B9818FC7A72234E6BF2205FF6A36546205015EBD7D8C2527AA430F58E0E8AC97A7B6B793CD403D517D66295F37A34D0B7D2FA7BC345AC04CA1E266480DEEC39F5C88641C9DC0BD1358158FDECDD96685BBBB5C1FE5EA89D2CB4A9D5D12BB8C893281FF38E87D6B4841F0650092D447E013F20EA934E18 -MD = C1C80B60ECBE67B7A49940DF5E3EE7F31C1304844D9A333A172983FF -Len = 2615 -Msg = EEDF03E5D5ED60D8D3C61604FDC305A752F5E0D08E394D4CAE31E23905E4D3261624F442DE4ABB9FF415B4807A301CC32332DF9BBE2B680B884FF13050FC862302A46D6036DC80D4D2EFB4C0133743A3700E5A089C1F38AA01DE8EB731DA7CAA7ADD9B6E1DCF6CA7DAD697D3741824D000A374A7E68494E4671EF84CA5F02FC5461762043F0B4A81E4EF845C2B8AB92DDD52F493C5DFA37F5D64AB49546AE281914899B1F5E55F982236428225AA3C2E7989FE4B0E64F79D1B7B1803F2B7548BCBF6D996E51533AFFF1AD11938A0ABA320B1B5E0832CF0C9DAA86FC57E2D89C0225A398CD06A75B321EE8DD8EDC3E55CE01845D2B4B24DB7E058E9151105C46942F9FE206ABF0E4F9FB1C432A1D48D0693B3487285BD956E41ACA8E4DACF3483B81443743F23F209932891DCAB19F9969F9A60B4D0F10CE884464EC2FD0F8C45FD26437FCA3C4C -MD = 7114F125F610DD38CD71EA4ED782F6FC0DF27EB3ADC982D401CFC4AD -Len = 2678 -Msg = EFEBFAD8C1E5AD7909FBA16E59E3B1C2F11A33F86E5D74F7D304EB0882DF9B9693413CFB990BC71A8BCAEA4298AD75B9E92F2FE722D200FF3184BEB08C16979DEB19924DC8B94E1989FFA0E617359E2DF6578384B992CE3CF0C9525D2F2B3E40F314F7B094AFA5C81E1AD9C08F19C5B7563518F710A0A78DB40BC98863645889EF1967D6885F8DD61CC678559D9696220AF7BB644AE387679E9FA23D7E313102F85CF81E9F4F9F18D23CCF4B579B25FAE558101B51998B7DBA4CE1AEDA644E3C8EF52C7BFBDA575A66D2D77015D64C99A49E8CFAF179F54E843C754214EA63CE2E005AC0E86A6EFA98762B1CDCBECE2AABC46EF58A16448E21D36FF8FE70D37EF2C0460CE4BBE33C7DD0C5764063D4A5D55DE2CBEF9EF02FE113D51EE3D80AFC9D1862C034A89E99639D1946EB9E564FBBAAF11A8E28A772BA97ABFF7CD16ED8049F31226AA1691E07E76E94C27718 -MD = 5FB3C1826EEF6DE81BE7CADDACD48E61BFD7716F3005A6894FA84B23 -Len = 2741 -Msg = 96E80F323139C4D5656B9F390E59D06DBA5380EC91657CE996473A3AADCD5FC54EAF8EDE51BC6DA0CBB1463C7FD834058477B9C16DB2E861369DC123CD9433D354E61EB543BEC5BB6CC4685B5FE55B5ABDDA34DCF84F26312AC322D9081B372678506DD293DECFD9141E08F9C87E30609A996733BEAC8F426D1D1D0D51E636FE5644C64C0D2CCBB883311FBD9270A0CA399EC844FC5D86BC259565D6BB963FF8686AF002E1A3F6E4ADA27BF9AB22CED61D3AEA767DFA553DCECA77A06B1636A98C84BD60BBF677B1E518F4FB1EE897778E339F11A84E0C5D3B6A6DEF10E90D335ABC036B22200216E52D85BC8416E971D5B834EFECBBCE67AF4E896D20AA821329835473EAEE357B7DC50BA1DD47B9FD8CFB98EB8EBA1236D21368E8D118E7DB080B974BE33152CB71E8702779026630B5F8F435435B96A01514417EB6FD93B418706C62C5EAFB6ECD42481900E693609C014B2721FD88 -MD = 21A7EC637C71C823AF037216F09BCF7D922835BB5307640807EBBFD1 -Len = 2804 -Msg = D740CE55B0E86CF8A22D597CCF4A0CBE14AAE4696F07B8659C20B884BFC8B37984972C9A29DBBFA5DBA4F1691B66963CFABF07919F7728E305CC924E6F49385740414F4E89B5E398532C3CD20B586A50F6873D09E4CE9F7ACA4E61EE718CF2D21744A7163A978FC2169031C2080CDEDAAF4E35A70A4DD352E48DD582810EFDB5E225CAB1BED39769382FECA88A4E20F3AA229EB4F42DD425A8BCAD9526B1451978ADE7493E0FC3D387A09C27550DB88FF0ACB88A2B00E61E0CCCF210AF57CFD545331A66E55404FF353F3117C1D2DDA67709732F66869FF8B1DA3ECFF2898BCEAE360D9BA63B90A2BA2FF6EF64BCB3AC96FFA2B0D3077A8FE3336791F86394F5476869D5BA630386355B856B1BFF69328164B83FFC305C639597662294D2CCF1A04A4EAA1B1CAE0B73253BA8585AA9EF98517E154391D10226D4677BAFF84F5C81253B94EB5283A68789D1BA75C9574AECB7AE77C42AB39171AF7D9B8DC630 -MD = 9ECDF2144DDD28C29888234B838B4042E2E48A21005932D8B302AB85 -Len = 2867 -Msg = 7BC6030249D4F304CA26AD5F6CB11A137E7E3FBE0E7B5964DB2CCDEC90DD0D72007307C0C5C763582CDE75126F578B8C84E2CCB397E18E671D80E7DD4C962667D9CD7E35BD00AA35E78BA48136923550D9A74DFFF21C66519DA4EE4408290FB9DFE6D9AFAB585C8E3BE153F3A0D582013A26F527630A99CCB3D98F1775981B7F5CCC0E06BF6CEF1FB7E824C25EB685BA7B635DCA0C3E7F707EC05566378321F72C807D9E7B6298F9979BAB6263DB4CDB69C8351532B5621529CE758358781F52A1392F1FC0C3869B195BAC66F0DE146C71EB22825485B0412ED2D6E04E2207584F327D90BC7E7A0149904F9BF0C5A12F03AF2445A2E0C81CA302CE7F7DDA7C1241EE4241F8000DDB5C3A7FC7F53E6647C03775E4953453218F426D1E1255E2C160C6015FF17AC8F165DDF4246AE7ABAE4F1A8E5068158F98D9E01858C528A40BE36DC1F7EBB71BD36429A86B2F16C795F62D8A8DA93DB774996FF031812C8C5DE23343393C19A0 -MD = 8D8BEC95839F7C91796A892195B4B63B138275BC06452A0B437F4B6A -Len = 2930 -Msg = 8A84D3C4157E9D3BA7C3F06617398A8F9F14A29658BF07FAD9B1857DA8C48841922D98765852DD6D23E0206E79F516F0A727EFE27EA654950B06116BACF707E6D533C52F2357C05C5E633AC0C65BAE4A3314F5AF5068F7F00CA69D16373B1D13F4F11A327032A7BEC4E65B77182195D17CFFE718CCC801396054419F1A3356CE846DE55E76F8E8DFE2C14CFFFA0DBE6E34495AA5D27382830715D0739446D209D88AD28909BB91ACAA1059203DE1AE8F374B325B83A84C7F57B1CBDEEA408963C6FF404F3B6B00025538BE3A664A470A36FECC108A4CD45158EEC18F4CB27F40ABEA829E6EE1B8073BA9A837EF955654FC15D03B23CE91A6D36B5EF776E5DDD4AB47CC30637B952D49EB6019D8B1363ED64A56C783214DCD1F6F51AE2CF6431DB7B58E77A5D05EC5E559973C1FE5C61729FC1056C1AD1372C1FB292867FE65FE93836ACE2199D0369CC98F840987199B22CFECF21F9AA21B9FCCD50912DBA6319612D2D61B1FA1DEEFE78D54BEC640 -MD = D6C656EB5DB3FC6346D94DFD5FBAA327C1915A052892E1C0FEDD48F4 -Len = 2993 -Msg = 81A2A2A5CAFA219CBE3EDDC4FB35BD2A39AF18F5D2619D69443DEBA137B30497F38416C0484E505C438459AE204520C9C8EBD2D43EF36F35760C5026AA58AFE09A1E36F37F8A5F7366E132DE069DE3164FB0C46B157C447E26713AD2BC14DDD1B92D258AED7B876EF45E16D4A9AE7BF4AFCAF1EDAAB905B520C52A8A6D2DAFC4D624C64EF4D7A8BB34478CFC40FE56B6FB5EBF39E677040738A1BF30378A43BEDAD81A9CB78425EA699A3597496F2D1D71D550D787C1CFE7A23BC1FAFBAA684B20779DE282BF7E9A604A9CD4412E36CE5C8842093C8836557046EC164982663B2EE4AE9CEB29D8598F6FD29811E4AB90C47B85BF3F9CFBC9F885D6F1C7AF235730D48540547847F4AB3F02157F48F69481C34F12DD01E1CA39A62E8AB7CA69D6422C54A2E14A5D238733B3156D7423C731E50C99979D1F8CE742933E7B26387F56989F91246215224FBC16375B9D464D16E35766C23464F18F8A6E705919E3E3C3BBFFF4EF14D7ECE68F5224A45D3EC90A2F1CACC3AE00 -MD = D6DBE393D1FB55E46CFA5C45651397FAB7FE7B14C9A1AB3F8F884B05 -Len = 3056 -Msg = 023D91AC532601C7CA3942D62827566D9268BB4276FCAA1AE927693A6961652676DBA09219A01B3D5ADFA12547A946E78F3C5C62DD880B02D2EEEB4B96636529C6B01120B23EFC49CCFB36B8497CD19767B53710A636683BC5E0E5C9534CFC004691E87D1BEE39B86B953572927BD668620EAB87836D9F3F8F28ACE41150776C0BC6657178EBF297FE1F7214EDD9F215FFB491B681B06AC2032D35E6FDF832A8B06056DA70D77F1E9B4D26AE712D8523C86F79250718405F91B0A87C725F2D3F52088965F887D8CF87206DFDE422386E58EDDA34DDE2783B3049B86917B4628027A05D4D1F429D2B49C4B1C898DDDCB82F343E145596DE11A54182F39F4718ECAE8F506BD9739F5CD5D5686D7FEFC834514CD1B2C91C33B381B45E2E5335D7A8720A8F17AFC8C2CB2BD88B14AA2DCA099B00AA575D0A0CCF099CDEC4870FB710D2680E60C48BFC291FF0CEF2EEBF9B36902E9FBA8C889BF6B4B9F5CE53A19B0D9399CD19D61BD08C0C2EC25E099959848E6A550CA7137B63F43138D7B651 -MD = 230620D710CF3AB835059E1AA170735DB17CAE74B345765FF02E8D89 -Len = 3119 -Msg = 4502421C8F0CD496CA17736732B945C0CA7375933ECF7BE85A12846FE750B5AD6589082A161FB30D4E8B6361D55CC4B4D788D8B69A913914191CE25B7F2DE37D10C39B48709C779CB5A598551D6633C32F7B7E1D86BA59D9CB61CE00507456C30C2888212C40A1035CC2A107B1CCF6D9175AF5DBB3B2FC14ECB7A4B4479225E133E9DDADA4862C4E9CB8C02911567B0A9B62A4EA0781482F2ECC0EBA32A934AA8B748022D243121420C288CD5B678D8D8A1BF70DFDEBD8FA6F2796E4D9DFFD67BEAFCF16804B170B42C0523DEDC791F5C92C24976C0B3BC4916283D979F34E42B3A88687B490D45A60F37677EA2339FE3AC629051F2DDAEDA5D5EF0EA895157010875FD830D95D1CAF0D6FEB32F7C885392FE631262315FC01C95C8E48590B12852CCC735B73EA3DA5F667419206707DA444A610FB02B697EED3B0E10ABAEBD0BF2B76D4266F9AE4A75036DAD91AEF3212785A188133EFB26A72EB7AF84BF2161FF609593C65570AE8D24EC0426387ECB522824AE8D9BCDF90C363DFB2952C7236154E02A068 -MD = 079E8B25340A3651A7327EAC57BCCC24F526BAD057438A52A34C8634 -Len = 3182 -Msg = 533C539FB585F9481E6F244F5234F35AEB4FEFC81B2CD97DCF30982AD942B8CF1DDB83063ECD6EC07510B34CBBCB8BFE44D13C915BD0EA0F35934C421E5E5DE9DB6839E725807F5729C04F4DFC8A2F912B9B62DF60E6E8F694456CC8854CD4C5BEFADD8524D0178BCC140353E672F0D5C815FE15F7D95DA6BBDE73D4275AE20958B3F7AF17933B90779E52C781899A67534BFF64434216787A5E74D56AF653AF2A2DA9EF4A56D5DDF92F8237C941CF18568BEC316B40631E9E85565EA17B184C463D23652AB3E860D212D51A2DA80BE5C7D1BB654CCAEF10D926CC2478CC33E93D45E9CB975B012D8B74A6795BD605F323EA1BA1CE9678B2FC05944DA87E036D10E60591B9CEDDE23CB83B1E9B1D02E61F19FCD54E02FD22809B960A51D238B6A76204CFF6E6F7482CDD4A17B9ED7B038517B0528A163E908843643D7DB9DAE6543C860CCDA905E1EEB5EB2A7E1418AA955DFD6FBEC4E195639A8A1374EF89EB4B7BECA4F796D7F558815AB0D99150EA5CC19A0822F45A436DDB5128EA00814E3C8055676D4D3256C24ACBFEC4B4 -MD = FA06BE2E1C832C0D481F9936F8F8D68FB195D51B69BCBC7A04D426E0 -Len = 3245 -Msg = F470F22F4B441B26956FC237E7D9F36A176ED145243EAB7FE0B8B5B99A65ABE9BF7E43E4627DC3920D5567BB52C35BB2E59580A43270AA06FD4B9C901D3A3C15540ABC4A19385EC19D16F5CA1202B9A5B8B5E38CF7336385E8BE8BDD3CE4AD660A112F407FD257F054BCEBB75F26E601461A529C3A21E2AAE71F3D8234E7B1F0373C8FD1738632904F8B5F6DB5FBA3DA09FD9B49F06EEBFD3366E8980E3E179F08FE742453DFF8848CE37E84D0629A4C1FEB9B37EB125D598CD1EFA2FA47129449521C7259D0D420FA7B11545633E056AEFE805D2102D4508CC9A4125B1281870D12821ED98DF16ED1E43E9B699FB9245EA95E459C27784B4A5102DF7E7CB2D2E5CB1B82F5852E4D468DB5858332A2089DB423A4F15EFE773CCC4853312425F15D726EB0897E137AB1B669CE8A2727140247DCD8B639FB9212AD49F52378B6A8C77C1A938E80ADDBD331DB8A7675235FE02AC891B54AFBBEB8763D902C58D88E4DFE924351A145B0735F2A9A85EC6E8284A78B6E9316BD2760F8C4FDBC4DB88ABD0AA7B69320866D1255C22BF4C7D9ED39063AE25F60 -MD = FB457BBAC2117F4C190685250CA49FF5AD3D8256B1309EA6894CAA93 -Len = 3308 -Msg = 79A1ED96E3D59287D620388403AC2B41F054DCAD59976422C61BB06739294589A02BFE7DF658EDADB6E2AC7F9556AF984E093795AC568AF34EF516C3ADFA4060BA183A64267BC4AA778F1057E96FAF0E9FE451946166744F5C137D29CC665E03849162FCB1AC6A90241CD22A2AFF14F0D936931401F9171C55598C98316B006E29BE2F3F6C6C28607CF0DD05E7DC6F4499F84502F113097692A46B7E88D173A3CEF08A05B40BC9018404EA67C94997AD686F068C5F925DFFAB8C2E548EA98E1BCAFD1A7919B3287623E77FCFB1751BF4516C5F811C13E39B7C293E58110C343E75DC9E17C151528D280217BAA6B69F955D8316C97D10E553A4CEAEE68B4A74F9621A7EFDD222FE3CD061AB3B53FFE28E060ECFB534D44BA95DE4C9D9554008A495D40FFF3454307E8066E4F01D4E16A4D33D728958110A82FF88CB404A2A378D1C1A5F02C71914CA9BC9A597036F8FCFCC86DE5158951F5E28E9F7500C962C5C3D754DE89EFF234CE98C993D7E8D2CD9EA0319ACEA05FA8505A43015A305AA49E881FDC4785A762858EC90C665F03764643ED9DEE1BF5BB90B6DCF8D9BF0 -MD = 983CDC370E2DE5840F44EB1944B59EDD145F6AC2E8C444E090CE8686 -Len = 3371 -Msg = ADA660319F056F7CC74116E2DB8AD193440D7DA8BB4DFA5E9FAC10EF695F7692C629C1104DE125087CBB03D4260F7ABF0177084E947E7B7CFE1245F1BC9999AC4084B6B4C52E5D349516475C565BCD7D507962BB3BD372BE1CD35C1BF3C500053365B87C6ACF98D94FD57D8F9E03B1591737AEC61EFD449A75E42A49CF20771CD259B189B881585D956AA1FDED4ACB77158D20E8F6DD60703566A49AE6FCAF4423EB2FB0F893ADCC7ED0C5C65ECB0D58CE9E6CCCBFEB90EAC4AD3D21C94452699245FE8792FBE884CC0545DAEAC5A30AF3C0DD05C2427D8108DAD035501CDBB46DDBDA25A0EE47EF8B21956D6F2560E3E2E220EED696F66995719B2A6D82255057FABAE99C08576CBB38E1F29038CFF04E46794AE1BB2693AFC6599EB675EEFAB808052A3ACF3CF6FEE0CD97CCBBDD66773F41F9FC3C08365CE379E258A667DB7D8E903F009CFAC7A448B8069E9698B1F0F21A60C1CBF59A709D6CE879817EBDF4F4C12271F40509051DA9D85585E1FFC5EAEEA08E3B65F2494559BB36B2EBD9242E554C45EED28F3B68B7FBEF5B4BB060F51A1CA24BC180B261A9F773872199D1EE71159880 -MD = A0707648C79D5D0C61A2015ADC2273F797DAA1A6784E197753488E2E -Len = 3434 -Msg = BE58A686D280E96DFB0E216A4ABEFDDD56686F3C14E625373CC21A7DD30901C4C75C1D2B90D9FE54DA197DB88AC7AB6F1EBA8602C7947BF94C1A7A1251FCC1EE4659C03E6027BE9D521D9DE96FAB9D67C9A273979E6866CC9BCC8199C4CB0357E4B9F7BE376C2B7DB6D2D8057FC22066C9DC764298E3DE45AE72C85EA6EA44742887136FF964AB092C113011C8DF7A8B6C5D14F68704E31F4681B620FA9B97228D9F2A34F5BA7BF8848418E1B92823F470017AA07CE483BC5735CA2D5D54FA09A75018097CD150E42E3C1B14DE93FE4BDA4332A681B0464CEB59AF7A13DD293AE080628197199E19DC14B5B73B06296DF26F0343D3E45B29453048BDC9B5B5CEAC44748E867FD4B307656DA29BAB874CFAAD603F29825E041BC6C2FED82247A3EAA3A63306E7081653C7AE2E3BAE8B5F034794DB9C0A7B1A7F94BE84FB7375BDC625C9BDC55D9AD010F01C72D05D8797F13EC58331CF56E3652664B7CE20F7312D3736B6B2B5CA5F4BFF2AE95BDB247FFFCC8DBEAF1EBF15D297DF6D817AB48AB090E3AF98618514EB27E61A2C776E343D9FA92A0129351B2F904161DF75052E0AEDB5010CFBDE0D4C1849EDCCC0 -MD = 14201651265739C75058BA9A6289EC29E77C74EA1890B1965C743736 -Len = 3497 -Msg = 8B3AEB16A108788E8BC47818832FC91C46A6F5A51C59DF9EE67E17209D1295772FDAD6E111BB3806948137E392EA3847F6DDB06CA63879A64868113FCE622849864B57C63EB7D56D62915E400B65B9154B7DA537FF164A5C3483D28F5C4D3ED9A86F706FE277E9BF3B9CD63B288D406B321CF865D65C284559F072435EC829A2DD1F0F4CC0CDB9BED219CBF13A1244C4970655924EA7D9DDC3BA4F522EF19812F7BAF22926F52D69C80B6C32EF9585F3834A75DBC3B3F1CC0F709F7A70C82FFEF75F6328928FD07F73920BDA9525436F0C8D01B1D65304908E22B123A87B835C6B5F9821CC579E98BEA11B231B7423E8446D459B316ED6B066C2E2A2082AA35AAED9A0A267F56B9AE162A5C8691D15782996715DF16E2E32C179E4943AB8B07387BDA3C49ACFE7E825944DBD7377A78F8EFD4827A158EE197B3B46FD2FE6E1F8150B99EE03A85EE408B3779B15903D3B39C8B02B04D1D297DB594B2D2B9F99D54C4D978B97EFFFC099B458C875A949C0544E135335B98A2B5974B5FDBE5BF640A1E7BA45D4AE07AEDE1BCE53040F33729AEFB53E98F7A31A727E2ECD3CA7693067D4DF8E151D2FC465E039DF762123DCA150DC6BCF00 -MD = A14BE96ACE72BC314A63238934FF8249E37D0C7FB13A7BE2F5983000 -Len = 3560 -Msg = 20FF454369A5D05B81A78F3DB05819FEA9B08C2384F75CB0AB6AA115DD690DA3131874A1CA8F708AD1519EA952C1E249CB540D196392C79E87755424FEE7C890808C562722359EEA52E8A12FBBB969DD7961D2BA52037493755A5FA04F0D50A1AA26C9B44148C0D3B94D1C4A59A31ACA15AE8BD44ACB7833D8E91C4B86FA3135A423387B8151B4133ED23F6D7187B50EC2204AD901AD74D396E44274E0ECAFAAE17B3B9085E22260B35CA53B15CC52ABBA758AF6798FBD04ECEECED648F3AF4FDB3DED7557A9A5CFB7382612A8A8F3F45947D1A29CE29072928EC193CA25D51071BD5E1984ECF402F306EA762F0F25282F5296D997658BE3F983696FFA6D095C6369B4DAF79E9A5D3136229128F8EB63C12B9E9FA78AFF7A3E9E19A62022493CD136DEFBB5BB7BA1B938F367FD2F63EB5CA76C0B0FF21B9E36C3F07230CF3C3074E5DA587040A76975D7E39F4494ACE5486FCBF380AB7558C4FE89656335B82E4DB8659509EAB46A19613126E594042732DD4C411F41AA8CDEAC71C0FB40A94E6DA558C05E77B6182806F26D9AFDF3DA00C69419222C8186A6EFAD600B410E6CE2F2A797E49DC1F135319801FA6F396B06F975E2A190A023E474B618E7 -MD = 34A58DDFC5C2222281FA73EB34BFB5E152272CC3AC7FE97AC58C08B0 -Len = 3623 -Msg = A91F9FFB50123C28AC06406A16D4551F546E68FD01E14713AC3F87E689BA332F36B4718DCBDED83617E1F4B33B02210F23BE3431FC319BFFCCDF8896C02AADBB3C8562CB7C243ABB77B8869F110EF49ABCD171AD7C5745186520CA67BB3FC329004C25A79A8247C310E0BB3B7A7A7FADF9FDC836D5F42EC111DBA810B433655C428BDC6226AD878AE8A78EBACDDA63BFABCC06A0F900BCD1640F44CC33925E90C0CECE8B6288E16805D6C9033F77CA6B9FDABB7D02626BCCFF8F6761E212361592FA527352A9983B6D9CC9F2516B78C6ED9399DC10115019EDFAC04457E5088C67630CD3F14E8F313F0C38C08C5F46F93E28712DC0D8AFD7B71B31BB3776331DC8BB5551B8D853D07DCFB9C93AE2B3E6C0719876EC38F73C2D43F6D10A726827F0998D38DBCC44D416712BCD749B16A5235CF5AFAD24E3FFF4A4C185D40752553ADDA4F2E5BE02836908F1235F3C59F99D07F92BBCECBE8EE690FBEF1047B08D1CD479627514EAE7B2BDBFBE52B87403E9D38322CC3DCDCDD8457676546E5D13775AF112B853ED3DBBE30215CEBCC06C5D02780C6A6A583E0BC9D482B3595042262C069C980F96AB49D3610EB5B18D9371CAA228FF7A435F6CA05FE3804FD29337A0A3CF3A -MD = 0B4B565305F9308338A919A530BD5A92E18B284B62423C6B9051F15E -Len = 3686 -Msg = DAB63B4D897BD2EDD4F4D5F607A5E37B6ED77D5602914E48BFF6EEA00E24B03DC9E7B5B6E9DF886DFB8B3E73C564B2DD8B3AD3C1D13432B1A51D88863E454A557F9C93BC2B0C0B9D53AC8C07B03CD6E4874B2BE11249E0FD7B952F44F3754CC29F5CCEA0EBBD7A65C9CC904FF797AF7089AC2C74DF84A3AD0EAED0B93CB4848366D67C3602572B2619632224DAAD4F186742481FECD180B7EFCB836BB09339E94CE37D395DF9C73324B6B346AB16730A0DE39A0C5D2142FF02E5074A1518E46C1483B61747E29E9096BBEEDDBA6172743174795B3E57D30C043C611CACD8FCCAC817034118F6969BCC496356F2E89999333ADD4F3155B727D0D5D8C44712A33EC867AA43D80095EE7F9B27E2BF719D989E2678F0CD08DF0A8C68BED11A191351C52AEA1288B99DC98768A1D97E6C183662D292CEC85C239F138A926FEC847A00EC2354463A4960DA4A31A534E215B35DB99CF66DCABF04C0ACC2C0F3AC656AB8F831D699EF6BCD5F9A9FACDC140A32C251A52B3070FE2A348623CBE2CC2F5952A31990E5E299F3FFE140FFE58FBB533B8B628D660DA555D7C0EDE73E412D3C9FC0E037FAB1DD27E67752E654F2F1C11A2490D473FE2F6659BECFE52108D0081EAAEA295B12ADE031D7BBF3447C -MD = 31C829AF05D5D021A96D9AD5114283F634A5EFFEA00A9691274E03F3 -Len = 3749 -Msg = 32C5008C09ACFB78F3E150E26F4C2CE916BD133064E386D5E5D6CCDD9E28EBDFC9BB77F9918B7983395DD9D12D1A5DC50AECAE8CB52A7D76620822C729339F5FBF1C1E0737885865756B814761A21D530A84A90761A7EE026A5AE9CBD8D2AE2401336943706A435761C6AF8DB6C87586B4B86AA1279E48CEC629EA913FB82948FCE13428BE2EC7EA1094BA1BFC7203623941B1B803EE695B7473E049F7DFD196784EB2DD6E59D1A681CDC94B3783E12E6DD73D52958E4D485FBD120752308AB23B5E1DB6B7E4F17BE54AE11AB6EC7A11F85B3AC6EB2E1E122689AAAC751046FCE444DF8EA943E8CF081AF283AB3CBE1EBFAAC9C20C2C138D590B628F820435EA8F208A2462345DF3F6CA0534751F88AE0FE4F5996AB3E5585F30235AB0AC05714E769707A318558C707C3F1E71A26AE690F9F6FD7A0E7E587694B3FFDBF2CAA3636D81149C8CFD04BAC91841183400ED195F64D0A2FE259ABEE593ADC15207BDD84E7CA355B42D1C7C9AD3C1CADF22FAFFA81AD5E0BCAA0EECDC3A8ABAAC94CD2AB61C77EDFD16769181D84C925991BFCB232E2095A1110DB2DFEFD1341AB37CCF5DC68BFC5DCB90BF4124F63675B18E6886E22E29AE89D483C6AA462BFB4F81D013D8AD1E423FDD5FD97F9C7A399143F190AE6CF0 -MD = CD7058CE580205A666BE466DA3571357610C1557172345A620F0A086 -Len = 3812 -Msg = E555EFDF6F55CA69684C5F82213C40CEA5A7695BF48926E7CC162F8D6FF5667A098B241F337C7FEC1C0FF2788B2A4FAA11044F080722C21EF0D7EB33575147A481E352601099D0B69D8082C3F4A206AE01537E6AF92383C62BE5564B47486A265CFC626834870E5D73982E11EEE6C518093C59AFA526A22E811DE395B9E1A20495288BFE4E1B672BD63E0B44089502295C1E6DF36134771838BF676AB5C6C4D7B829ABA2CC701706B8AA46C663A5B855E3631EF0DA9AAD5A512E8AB1F012F939DC8F5F19E95CB6B2E578273CDA5D0AE5C994BAB573A8F1595959B37DBBCE6039DFA5F3042BF27D1D03AE649C64CB0A4E45F75F3F2352D236EF602C722BDA347D18AECF4FBA832CEDE5068AC451F64AFF13A50EF98BD9B97BAA815AF07B01EA7EDE2EB2099C86E31882EAA2E16682270D2CA1BFB75732EAE735DAA0822EECF7996BE501EB0D4CD394A5F134B8B573228F162511B4C52F3CAFC33061DE4CDA191F7AE8A0A3C92AB7265923445650ACBB60F8C03D31EC04739998ABC24D8F37847E26A9D8F3CA86B45EA4E5DF396C4AD19862819EE8CF701466FD98C866A9C5FEE59F4229EEE0EF06583B005FAAF656351F42378BA8C8A705A526DE1C55741EA79289E5F476497A2E92B875F87E50C6C9A8B6B620D548D3C26CB47AC1CFE0 -MD = AF2C81CE5B643187A5715A69C268D284DEA5B8831733A57B5A89A144 -Len = 3875 -Msg = A6F67243B89206299B833F810220E19D4599C310F51DBB8F1F1E81B312D77D52CB6F52500BD54CBFBC5684D39456799FA4134EFEE2BF3852C2C087ACCF67B06670BE83D360BBB9AE89A81041F5BD33A7A6267DBD8E135FC108FCDEEDE3A79C1AED141896278735A6114096D7AC265AB6A921E42058F1A4581982965876AEB4857F669B1D85FDD143D4216610B669DDE75C5F112B68A39C68D99CA45D3A21EB7627DD5E2D7F3A8B98C694215756DB73C06AC33124859856C046DB655C2A33B3E711F307454CB344A54B18A60B9A2315EE29DFF96E2EBC0FAE0E287EE373A84963A577C9D81F944916295013350983ECE1A342DC87EF8341D1006A8232F0D08B16C1B017B2A2F14B7AF0A2A9F039B90169622F7F2E60F1E66A6F59105996390EE628C5103E0319F26E21B238FEAF3CF07B38938339F9E3F437F994580DACA9069907049000C046AC8B4C40DF9E3BF14A2A04A9FAC617C5988F4970A6FB34736916D2044A130D22705404449EC24A43C49B821CED684DE0D9D6B92D78A27D668A9EE83B931D7A88F888538D2DF9588B4E6A2B927A2A80D70B0B9EDF57273BB85E597E34B3999BE1EFFD77C39A3B5617865DF75395466C53099F344259BEEB7446D9CB3850661F3EF4DD84A3978E39F672EAE9BD949E214130CF799868DDA74823171A2F350840 -MD = 092F4EB2CD93C6112B8F5AB961557DE27BA0C7D4C52FA4E14EB514BC -Len = 3938 -Msg = B0C099745EE2B37A0E6441E8A7BDE912B4DAE9273594644D5C71F68F8CDFAE0C27FD4F26104BFCC878B51CF31894F477268B4C2233CDE5C0FEC8EA78B9493C9A6306C610C2F37B3FC8F561BD9B2E9B931B04021ED8FB6343F990E1D0451D3E588C065713A0BA3E62A747A597FF6573AC6A3986B0E13396612A0884A23ED6B53D039FCEAD4E7BD62141B54652803A1A4CDCF7125A8CA1DB53CCDE72B3D26D825C701997DAF6F2FCF9AB01D5D4799BB2FCAA2AD64E22D760BD197FD17A66168CDE8198B40928453BD653DB90E1CDD48497D6F7C5FFFBFA2BDF99DF277709D1E72A4C3A7C7E0DCD4E76E9292D90600D5E45F1B8D681C7F04B993BB7CD2CAB47AB3E9072F9DE3A9F5A630982BEE13A665D211D376BD4B43A4FDDE542A1793C1C8586675766872DF8438FFFBEB00FC504A91873AD04DA5392F0E4428932F3A1A497E1F21CB13D017287DEA816E79E3C6A8CB0F4402FEAE129E8FC80CECBCD17BF60F6C79E11551596E4518C7444D7C137EF978AA70DCC6B33D8EEFCF052623ABE4E4117AB47E3C2DDFB228A7CBCE9306581016038B6346E97637695C30657E34998D3A3905778AC977FC9337E96114243C1F50A16248AA10CA76EFC51AEBAD17831D320F997BA8313EC8FC097571B3658C537B7D400CEF252AD4991AE10A02F02C2FF965C7994C1FEBDED6EEDC03700 -MD = 212D6D20816B8DE7E796EE550283941CE5FE34A001D9BF00FB72BBC4 -Len = 4001 -Msg = 04604733D2E7140D64DFD192E4C92BBEBDFD5F157DCB6768A20D415F9E2C5B349FFFB6C4DBEF1843C866DF42FE37A6BA3C55BA405B08F4F7B4B2BAEE2DCAE54439A8FB377288E31DA41F732841FBD3B2CFB23B36FAB4EEA3D03098DBACA3C418315ADC2B062BE6B3FBBDD7E475FB7A3B6DB1972135AD7A1C1F0B1B86996F087D95E33331634A5793748EAB808F1BCCE8D042E14526F7A36F59BB50DB4E0FE0EC423231E1941393973AF062DD8A00435BD5236B44210EBEDD7044C0C4FD529EAC7CF04199F7C7A4F3573647FDA10E36E948E10CCE386D0132BBB6BC3E00F6EF46A75F808FFD4295440289B81AE992B7B11C77E5DE24C3A711F1B3BFC1AD7F94FA6D35EC6A4EE87DE140B149B1EBBAB90345A9C117F85F17CE8AAB07A727642468AC6750335717061D35E07AEA225CF08094EBAFA1C02C325E0334B1EA55370AC11D3440F8A9D2659B8F2462FBA6419B87A67B6FBEEB9A1B5FFAE709BD5D7C88E5B785951A129B504184CE46700C6BF50B496E8A3675F30E01F9785A946919B722E8BECCCA07D97AC8BFF8AF9168DB7C296C18ECB53E604F69E2DA08E2C963EB42D9A7463C6873F0BD0DE49352ECA2F209313ECC5A7269B801DF9428676C83B9B8AF12C9A827BB01B5F8DA36771AF274BC5499BE3184B624A048EC4CA7B3CAE0857E66132337EC9585115CF04621129AA8C92BDE6080 -MD = F498A08B0B6A6BAC982736D7E19A02CE77AF04C6BF891C922A4DEAE2 -Len = 4064 -Msg = 4FBDC596508D24A2A0010E140980B809FB9C6D55EC75125891DD985D37665BD80F9BEB6A50207588ABF3CEEE8C77CD8A5AD48A9E0AA074ED388738362496D2FB2C87543BB3349EA64997CE3E7B424EA92D122F57DBB0855A803058437FE08AFB0C8B5E7179B9044BBF4D81A7163B3139E30888B536B0F957EFF99A7162F4CA5AA756A4A982DFADBF31EF255083C4B5C6C1B99A107D7D3AFFFDB89147C2CC4C9A2643F478E5E2D393AEA37B4C7CB4B5E97DADCF16B6B50AAE0F3B549ECE47746DB6CE6F67DD4406CD4E75595D5103D13F9DFA79372924D328F8DD1FCBEB5A8E2E8BF4C76DE08E3FC46AA021F989C49329C7ACAC5A688556D7BCBCB2A5D4BE69D3284E9C40EC4838EE8592120CE20A0B635ECADAA84FD5690509F54F77E35A417C584648BC9839B974E07BFAB0038E90295D0B13902530A830D1C2BDD53F1F9C9FAED43CA4EED0A8DD761BC7EDBDDA28A287C60CD42AF5F9C758E5C7250231C09A582563689AFC65E2B79A7A2B68200667752E9101746F03184E2399E4ED8835CB8E9AE90E296AF220AE234259FE0BD0BCC60F7A4A5FF3F70C5ED4DE9C8C519A10E962F673C82C5E9351786A8A3BFD570031857BD4C87F4FCA31ED4D50E14F2107DA02CB5058700B74EA241A8B41D78461658F1B2B90BFD84A4C2C9D6543861AB3C56451757DCFB9BA60333488DBDD02D601B41AAE317CA7474EB6E6DD -MD = 0790649A6F6ECC4DCACAFAFB6AEFBF6C6F7EC883C72671DB211CD163 -Len = 4127 -Msg = C33F4ACD6701A139FF1B19E61AF5D916C056722FE04ED799AF007142814F01D9790B2E1930AAFEE9675FDC721CA114A1BE15409DA17FE6E25334FBE90A1E57B88B06041C991F6DF84D7B72F620E429F20EC7D7B675B2E0587421ABA23909B8B586A702E32D6B3B63EBBB5D3A89189BBF091A2749A41369863603B62EE37E36BFB11980784DB47AED6DF9A8D72B8FA0CCE9A43AFA5516CFE5BB4F771832225D2C6C62F134458588B9CF75BBCDECF9FDF097B818EC3401010A5E36EFB49B83F5E7433628E6EEF82A18BA3AA265A810AF756B08D1A73EEDD1B33211FC8EC5A9CF337AB591DA8551E25C5BC85EBAD959B623E35C3DFE56B25032AA99B7543A52F639EFAA386F9773B22FE96EA3EBCA6177E263EB4905E5240915451514D8C75F6720EA0736E2D067B2D4AD40EBABEC6E5DFD7F5934F6EE612EBD7B7CFE398A48FA3F3C3136D688374439F9B40EB53E4BC908D535C5DB6059D203D79A306D2E07F03F4ECBD6A4E5789E9C9282AC137AC851D7D32CE3ABD3632E63095D6CED7CC50E2D497384BD1721DA7F709967CA1D5E4251E95BFFE32995FF30DCF9A39B291F3A3024BD1027C00BE8798A98B7BC111CF72F58678EAC07B442BFF1484B2F2131E217368AE40187BC7A69F70590731E2B67A081AD1EAB813A9E07E52AC0A29A74FAE5465E163EF3D290304392FF87CFCC55CB2ED931AF94D8AB11513DFA8884D1C917F0AB227E -MD = 30FF286355B9AE29D355FFD08E6D55266AEC1E8411F18B39E9612684 -Len = 4190 -Msg = 981D1C4D7D6831BB9803217FE266F901AB0B149539543456A65A43BA3BB2FC4332D3692D521A47314CF7F060A1A5C99CCFD2FA582028FEE9F76B0BF021CADDD947D13B1740C7B72AFCFF65CFB8AF966995074A80BAAF076C35B082E41007ECDAF89319AC8548794CCBA24DDBA6083CBB54A224F48C8A35F1B1F6418AFEF3C20BB67014003750BA1D78A7FEB785F1549A8BF351758F52CF32207CF44EF4966FF4179BFFFB56A4CF16E53DF25F274FD62968B0E3A6594D4B9CE8092AD0924345B3BF8FD515F79983AA06E3C69AEA794A0BF8F4D8452045BCF11620C712B6620481499BBB73E6BE62FF17E0038D937CED5105C7EDD4AF4FB9585BE02F71AAD8E0D1829DC81C775E540E8557F78C67F6E3D3AA349CF329599C90895755460746125AEAEC933E426A64E4BAB1394C12FAE9EF279A439F224183A00B7E7B3D1A2DC350D5E4A548BD62C860D19AC3A0695DAB9F4994DAABDFAB4CFC5C4B51A6CA76F83BF2B128F76FC86FC6189377E9EFF327EEAA57BB56935CFFC58C92D13C1BB619D91060BD3BFF7B17FE1A402227AAD8B742D105E998AB978267AC599CCDDE71FB5A5F2D4473F68DD4364136ABBCCA7EF43802A8BC76D063400F07EDB4F57453AA00750405E929A4EBAFB23B562EFDDF4C8588C0446A01590F6D7C0B005CC8C69311CE9567CD2A8C0D7D247DBE0E1013120BAB10C9326BEC40D296E21C063522966DF84554065C0E0EFC7DDE02D4 -MD = 439A247755D9BBA532C6B62D4B7CD10D92AD3BE0F2B6F75BC29A004A -Len = 4253 -Msg = 5C29534C606BC5DABB095A52B3FF4D1FB972DCC5AC44FDBF958845E1F7B92A9481A5B21A677B455DE739FAA00C1B7FFA2393BC8DF1DF3EB43864C05E8E493CA401ADEEDFA0C29610221443402846C81402D19058389A76745C14A7F5E8391ABF0726750F4D01AC6FEE319481AB32C81B2D3E08BB393816022F45E5802B7BF91477015E11479B65E23C0C938FE29D8580D58A5EB1F3F9885191B34F2D99FE307DA797709D6C704D297DBA448D3D67BD1246195B76342191B9630BF088729CAFF2651A2155C744F14D8681108B8A048D864D555FD69E757EEB4EC55B98624D3DCFE760EF8D5A7F3075796265B8B5AFB5949FF68D06D461D789F54AD6EA1EA622E072575B64172C30D6CC12CF09F89DE9A0A84508B1C48CB65EC31647AF9F2392D28661B205A66F3095CBA41DA65939D2E8DBDC1496952819472745B3D3EBA02E854AF7EECCC9C8917CEF0D796F8935EC862AF8B65883B1D20DD09B1C8CFBE4A2F929020B5911FF0DF00B5377A2E64B69644C8A4DA03F924BB760CCB956B470D4BD47A285ABE6B5B659F1851A0E6B59A811F9110E7AB924402264602AAC84DDE8A35062E29EB20DA96ED6B5B1273D0B8AB3F98E66DBE9058D7FCB6673AC02ABF76B065F5CAE82BFB6BEEE2383C692D4A191EAA4681531EBC30161D86945D4EB042BB6812EDE11791B92A2FEC0E08492C471F98203BC0075A01F85562D0AB0B88433957E8240AE61CDC4BA853DCEDA82E8985B111370 -MD = F8B7B063238438A728388507E57486DD6FAAF4BBFD73AE43009E5569 -Len = 4316 -Msg = E0DBD070B2AE5CB131C4C06790A62FDF30E39DA6D82448489BFD2E5EB90CEF2F2E930061514BB9BE280EDAB9D290E8D18A0003C57A4D45A9B22446FEF05B68E5A0B8FCBEB0326AE64144BE46855BB67EE4A446CA8F5625C0C12238EB77646D86B927BA63C07C454495F22BA87113D8540AA6476B945EF33907B62A06DF49781E9DC101CFD20CDB5C46CF71255B6DDA0C5E08F315580929F714E622194E076CBC85FA858CF341F49FC9E3A43A2F83C3DBE63D08330177C1F44722556B738AA8E4B3A83BCFA9DEE64C61B81C7E71C282403F14E7D625BB9FCF3A7985E2DD7541C5E4398E341EC100A19AF03E6476C2D4250F385CDACCB985ECCDD95B0EDD0759AB82EAFF5A2A5026F290CE6F6DECF5FD812BDB4EA39FE760102C829CF7F09665CFFEC89A8DB4E3A353996698132E4702D8E29D7D1290916E49B2B6C4ADF75A7BC4768602F30F23916BD4630B223564E216982108505ABC9FED7082E14F2997C973B2DC85E899FD61CA94EA65FC0490244442E6FE3CE5C4922E81814225E45985B3F764684CAF3664ABA3A642B850313691B8BED8D461E66EF47263EBB9CF0DF18944698394832265019720B9D6ABBA59AFB5E39716C000F4D2A19C0F8AC4E622C48E0FA0EC193593C76AB524CA5588C0DFFA6B88507F66A02A2FA2CFB226CAEFDF2B5EDB4944ABAAFBCC0934257C2757F3F1D6FB556BE24D8E3281C706BFC8F30FD4B5E30FC28DE29F87BB030D1126A81C11A7F883034B64437678B600 -MD = D1AFBB7BB950BDF07BD4C5B2EECE33ACAFFA44C61C020229D99854E0 -Len = 4379 -Msg = EDCEF97B09E8FD6ED5F0DAE1567CA6F3655ED62C0CE1C115BAB70471322136D01993387147AB2C6214C89D25902600BED8224423FF7E8BF3C5B6B0BF5641342CF58052C0A85C02FD02A8CB703790511D78F63B9E3ED3C544D3B854B06CCB474522019E45D2A5339E656C6E217B21859BC3E528BEB05BBE7D3B20F44C1E3BD20113157A84D0DD8B00C65D386791F00A63FE486B4DE5AB0F4A00FF740B0268CB0B8D977540A122DCCF531B3B84C2207382AB6FAEC01BA3863B8CE0AA688057182EF862C92A5B76E394CB07B22FE25B7BB02A5AB222868B7B7602CB296C6097E99C49BD014C057FCE1B01AEE7A674C66EBBC0ECAE0CB0514BDEF041F6037F97CE44BE72051BD688016346F7AE3C86EDEB3D5E8D71946EFB45C410AD04E31A06723F08D9D304C6EC7140F4161E1F3F79BE060850C04AB7EDD81B8DB3BB5C19D49231E3A5FD7C99AC23BDE62B45869A2594335FE785C1A944C77C5D4FFBF416F9267B45871623D948E44DD24B3F0532C4D7D8771D1C51F36B89309EC99B554E3DF0E5D6279E882B95E4A801E17DC00A11F3A1FEBF22D4D4BF98D3341E9412640ACA22665FD0592FEBE02A3A51983E4F1F07A3F687F76B68279C5FD6887A4A2D765D3E6680DB4E161E556C572888ED4DDFD113DFB991B1F549D4563C42AAEECD8EB506521276F64A626125DBBC3F4BD8C7532154004F9704379D94BC940B8C18EBCA4594EC00090772B60B5443BF89E1329F04668F4C21A93AE91083338638D29E9BAB3364C840 -MD = 99934B909AAFD5DA457AFAE5FD644F7ABA5E028CD8FC755D87A5B174 -Len = 4442 -Msg = 6BE075E50733CE00C70D8941B36B8745F119FEE9ED7C897EFEB3D7123DF20EA7C38FF7B10E0E813959C97C5B084F443E9929D5585C958FFCC3083A1A6BB5A89B0FFF5ECAA6CD200535272C595CEDE8EDAB694E6B60ABE4D710895B1234BFC2A35E7D59AF092B58D2214433268E8513A5952F6C26E4803F843EE7431D4C36BA442B0C4379E7FFCF099DF22D8C92C5E7B103A5125799210A7C4E06FF8FCA80C948A6FC88E395CE822C9A16398EC26869CC6CDFC23EE9A1B2ECB64356F1C65E030B70F3C754367EC2EB5314FACF2B971F671FE1D14EA7C7C7FB552CA468DFA79F4617ADDA75E95097C895B4A5FD96FFB2FBCB31BC57AF92955CD383807C7CF5D2D1F79454C1FF81C679BE6093DA5793C116204BA58F7D251A4F245F0E92B47437B9DC3F1AA4A5689B7FE11197C0613C60A9FF70CE5C8B1EEAD51F4B8C65F8C89934E656A16108FC6C6DA0F0E2908128023DA57F7AF411DF32452A8E324A01434F92E085DBC30E245DCB841CEC09055BEE1CCB67BB1D6B364FEACFF7EFF1A8B23775C2FF256080B1E483D5CDBACFD984FB0C180346217474FFE128C9098016284DF14CB48EE1547F5E0B190DCDC3D10D787E2F03EE267BF5AAF6232E84D4788ED26BB0DD265422710983472F2D294B6E1A14F11DC3858F3598B25CA1B8A0A3E82A9B45E8262595E6986100AE7FAA50A11FAECD37150EBD88A242E7F5D066B6B33D27A48B8622E511A01DFC72BD1E972086596DF9E8EF0C1F65ABE5C0D7A1F1C3AA12DF73859CF086A08C6CA25CC0 -MD = 4C4452FB2C577C0A6612B841B17412109D3CD925EB6436B9D6214E13 -Len = 4505 -Msg = AA0FE3102072AB40B7A599400A9570AB1B5AF93C4C925914D3EFC96B4BB3A8B8E62333B5A57FD4175AD61C3D728684AA58134F98B4EA9BC5B7CE4DCB0ECE0D2FCB109B794343FC194FF86163975194A2D7B6C60DB5CC0453A3FA7B44C7AB28ABDCDC0B2FDCD7B45CAC13FEC3DD274ADE2C9973D7A29E1419A856D9AE78007992E512FA230E8622E82675AE83954C14F457E19BA640362DE795B2B1E1E806868DA826AA4CF6B3932C7961310509EEEA20678A47E406FDF382FC3BFB5C88EE37126719AE2E22E58BCD02B13EE18F561C16CECF87D0BDBC18FA9BB959CA202640E3F9EECEE33D97A98DF65C4190FEC54ABDDE32503670AB52648DEAD81BF2C2CC938591D0C088C37DAAFCCED365EB3181C736C03CCFBFDCC9B599A184DBE6DE47E47BBE9706E754B42DE8CC7C959178A0BDC64AC6ADF15B3738FE6D33C9FDD3C4A784062C5F3AEB26CED578B94BAC6B72FDB13E7906B8BA141EFEB13B28B42AF2A1590562329CA5C0EA26528B0C265AAA37804E25637E3A92B2D2ED73759A9B5919B634C812299E0E66E648F91C8B0A7BBCF35C3492E462311D9409A256CB1F6134ABBDA916B2B882DA392DF677FD3E2B90321B0AFDB2E5F22F4B1F6A5CE8DCC2B66177A7839E4B30C1AAA2781189E69757C1BEDADD29AABBBF96ABE8244BE63CB5C56242ACEDF1263C6D0D6E43DF59288DE3721F1462BA2E777FEEC4A16A39DE8DF71995F2816B6479F0090EAC748DBBF556A09A981D254FDB2B0E6A6B6F86192EC5E71F25A71DEE0737FA033567CE77713BA7C500 -MD = BC51BA1D927C2B1FFCE67BBE4BEB26E327A3C4130598C651C0079048 -Len = 4568 -Msg = FE06A4706468B369F7624F62D04F9FAC020F05152F13E350016B2A29EFFF9A393940C138553356B0E2848C01B622B95FFA11AB07585F7DCBBF90E9F8EC5FA2FB7B4CEE0D0A4E8D33490ABD058CF3BB85F0CD9B1BD3E9823082D70B1A92ACA6F2C87216B4BA09FEDDCAA4CF254336146CC75604FB1F286918FA2434CA36BE2621049438A400BDEEA6C657F0301503CD7E6E38350838F60EA7F001755DA4142CE4579B39029DA83F1646B7ECB9947EE89ABA377099B82026960B9EE600779BF00D6EB0CD09226DB6915A7ADED27E6749E2CBC2C8B030CE1850EBFBE24C0658F29E9E709CD10DB8A77EFDEFC90FDD7B9AD7A7E0334412A53D248C4C12BF2987B7ACCD2A8A602F184583AA560C016093B56B100154477B834664E6B85A19F8DC909B4D79816AF12266C731E29A304E9BED8EF1C8030365B7DEAF3D436957308117C7C5767E0CDA6E342DDAF824233CBF4E699DC667357CB35C602AC6BDDEE71B352AF55CB93941A1A6301A9904447AF9EE486114D57AE03901F10084ADC0096E465E2EAD2496273112F2FAE626E230D42EC22EA10A8289B3E35EEE42150769D6E663A3CA29174316EC93A24F148D984053B8F98664EACA3E0DEA0B42E8EE30F81A2CD6E42C189A25FECB6E643E693E1F8871B837C3F5FF2AAFD1650A465DC8E5C1993BE65CFFD87F2C680C86B0AD3118834A5F2E490015137BA945C2775DBD77FB3E5C67819A9A7A94A656FC4761659C5B30ED2AC55A6D249B700BC9C93D590490AAAAA75A9FC34A90D5A9106F2860BDE19FE5815436068A7F8EA4636A -MD = CCD8A5F3C0A2F6AAA25BE89791608C429AD8A6DE767A4794B305FB62 -Len = 4631 -Msg = 5528C4991F9B364B674A30BCB361A668D45A9A3A1A54CC502EF1300D3C1D16513CDC016446465E8F13789F7193619210804564FEACD6803F98D1957BA5CC28B0D1764AD265095532F8173F62C8B30756D9BAA235F4F1E2BF5FB63971D633629281A37715D7FA9C21C3925BA48B81EF95596341808002D1AB16540E4B04649129215DDE7584F5B1C9317025BF24D6A70280BA3AA4F3A549BD687D2CBA3612E488164979F0A2F5DF2082F552371F430A7B46F16F77A09678AB00604CD4C728151F9374AE8B7E50F175D4744A5D8E0A037FD67ACD832C254706A87D6EA7BC08C48F240C1D940A16297C52864A749502C56974778E36F3ED3B65C0FF3403EED394B27FF3201D10BB1C97DC12CB60634C598DA6C83D8907726DD883A34B73E68EF3E01B0DCC248387FF332E3AF456E084E01697625B10A2C395A6534E87C1355A9562C8F9D7EEE23E86C8C19E5D8B10150DFA85F9753B15ED48D769E0B79F6340D5D747682668D79B15B4291B06121D56B05EB441A0C45F520AB788A41759A114E07430CE6A5775409E72932BD49798B553762DA2C31F5359EAC0D7D1C7A093AA54F331E29B408F572322726B914D65684447770B51C68213A5BF891AA8AB1A1C2579E909B91A562EE1643AB57EFB37028194577643CA44B5C618A0731C0F099FEE1749EB919BDCFFF3B04D865A526AB15EAED9B4BBFF45CF61CF5F57229D6ECD1FA4070A3AE583B9E2D1E7E4E317EF277E7A3A0D30C83AF70EAAD00A574132A05CA580D0060E1AB608AF5C427EAD9AD6FDFACE3045777387BD778E62B91DDCC38C4626FBB0 -MD = 47E16E8ABDAF4469E5D0257546B166CEFF2B7F79931129067A1E4423 -Len = 4694 -Msg = 75FB9B21F48F51345A6CFC9EEFAEB4D7AF2A7EA92C57F1C63A175B012ABE6DEC8FF694D70555F960B828DDA954F927DB9F11A623D276AA6D3453107F3A8C5325B44C448B880A08EC4CC9E3773CAA2E7239BF842BEC72FFFDC4E88018C0B0108B410FA8C99864CE0F0CE16A5AF13D75716C69DB14D84A10EF1ABB7BE88CD64DA050D87C5556E2B73D101BA38D407AB1CB4AD9BF24C235DA1A18A12F0798B1DDB023CC7C45CC24D3A4BE7073D6E76CC89BFD76C2E82CC7888BD4C2D7E628A70B62FABCD97B08AC15F9763A14B698A197870A45CF7EF1A9AB793908E84A9426AD7197A76ECAB00196581DB67417A507486095F0FAD1804491B69B046AF4CA6E5EEF8BA0CADB8A966BF90AB7B4C0EE7F1AFD59C22B98D1F2DC6B081574BBBFEF01C29C56C012BE9146698C4A0D1D4A2928DC52666B4F5F785E73E9887F85EC158584B558501BDD587C16D982D765E4CD40EBEA53309CD04D4CE7668070A106610E701B2EC60F7F9AB5303AB250072508538F45ED45E5CBE2B50A83E944FA09556610F46A56590A08DB4C3A255737779B7E476E2B9A54533B4432B157ECE7EF4B1FE29CE049BDC98B3AF9651F898F6508E8F9F87B95D338DF76EA40BCA7825DB908EC41A6349A74379E2257A78BB38C9260E623A752645C445AB2BE90AE8555385F2C2C5C11CD7AD0D79F0429643134A22EC7C5470861371181FFB8F4A279844293E7B348F9836FD4B9AFCE0F2C7D96DD716F535F6E16543822781B9E4765B5C9A0F3A916EFEA89FB9E2A556453BADB58FB1B97979F6A03D3E1D936D3DDE74769A8A957207AE8C1AEFD22A39950 -MD = 90D680961782314358688DA8FB8F51A6FFD57A5919AA1435C2B5AE72 -Len = 4757 -Msg = 530A21A1F81639E9183BD9E2550CCEAC4C2EEE446CB3057AEEF7D7D48D5293B178109178C380D30E08006E488EEC440C819460F72126388D219D9DC4BC45469B42010DA47B06464980F163672A9E234B4923C4944680F95BC101042BFAD8E3B76AC76B8C78BC3312D0EB65267BCB8D23AC2ECE87648A6B4045B6D0CBFBEC92798BEFED6B164E4DB5A6FE25A345B4D079BE1669CCDDB3A72809DA3BEA1226BE6BDB11F4C8788A68C81D7D33973E2EDAE93A59D86B68D3C111D2D61072B9FAEB753C955F222EB82484967940694618ACFABC030AB944F47D4200E55D729FF24694C9B6F73DB003FA6CD3B0A4DB4756FBD56F8CED99456D208FBD98EC58CBCDB7339739BF32DBCF6C94A103E523B183FEA9EE41A6D7BACCD7C7C06DB3430FDD41F95943254BF14F49BD34B33AF7BD955A56B9A6420532A52E91263B10CCDA84BF0C37FCD0128AC5C420D56F4FFBC954EBC57601ED63DCE25094B6FC93083273EC5EFD3FEC09375675C61C7E934DD9C4BB1C0D6C892C689CE7EE754717AF9F85A0D9BC9CCD02AE606D6A30F43DD6ADBCC8365340996C9607371D944D6FA33FBC4B80D479C5107F1F2679FCAD31CBA006C5AF3FC73EB9195E3D042114ED5738CADF4F22F64B70CA2D6F82573AE865273DE01CF980CB5382F273BD7100FF3715B42A68946C12D523A297487EF89C3D2234D5FCE4D2B03B7B8D8E3503BA7812296870E2C25A9B8C1AB077096C137B246BF5DE8D27B57DE327D38C228C5BEF436AED530119BA6E59B28143E91F570751AC264D107E12BE3A0072C2EE326D5AA7C64BBFFADFD56C8DDCAF60BACEE96E64E59874656B1D48 -MD = 9843E67D7CF844EBCAFAC3ADB1209EBB88B21BC5E30B3F6E863B8544 -Len = 4820 -Msg = 777310C6424095406AAB8A2D5B9DA774B57058F994565B93620879A798BF6CCDAF1EAA41EEE7B3CFDC041C4F682CDEE918855CCA54C4A5F7340691C598CD57FDDC16C43BB76FEED1B92E43AF109E9DA963D6E594B037DC901891F8B1CEB009822DFC8B2357D400EB9BF60BB2318DB3CCC1918C42695DEA23C46ACB7A55B572BE8216F7CA8B7223A8F4876F1625A2E5CB1D00A9FA13BA2F10B347BDD4EE6DF4F6FC54FBC802D92CBF8D4FED28353AF86B9BE5D66A67B35FD94747EBEDCDA298D5711F88FE8841A2C739EA33B4B40329FF8266725FE4587758D33590B679F2B15D487149D5CA0BF843CC9A1879F7672F6A5E0B262A84B5CD6AF7F4A1E587058DB8F18B879E3ACCDD3D1BAD42194A8E91A5B7B7318969D40A3E39F6BE6A41AF0942E62B617809AB205F5F1927586867191C12B2AB5011B9D627DB952B1736C3BEF5950044DD719864242A9C152F07506851B7133A2670968640FD008015F3188E74C971D954765FCDA74A08B4248D5CB17D2D416D0467E910A038740291CD0DF9ECEC3BF20ED0491CADFBCF45F7951A55D08048F936176062760A66030513784E81FFA5F419C3593009511CD741CDE2A2214A4A72CB8D28F977B01FAABE566DB174D09D4522DEF20FFA64C22D32D80E9593D0942BBF3CFA4BCCF6D086A3EB697C73E382FB2DEA9ABD4374CDF043B6C2104132D647EE662739FE2EEEAB2D0329F60803FD937043CFB7AFB3C51F9EB6A888226D182999B755EC3ADFB6ABC643A2151400625C2AE1AABE8837A93F3D0D77519816DF88D979632068BCAB39D3483D348399AE39A4F527C96D13D010EFFD5866A99532BA1BDB98FC8C30AED0 -MD = 7652D4B2EE7BBA31E69F2C94F73E1125C672E59207690BD646BF0C05 -Len = 4883 -Msg = A7EAC41CFA6C39CCF07C3338A5BCE577FDDD3CFA6B2783176DFEE616DB8213997173A7490A39079C4406D03809FB6085B02F3EE8EA7163739E93F2E5DBDF2BDD8A7BF127FF909BCAD66B4114290CD4F7602AB8169FF24628E381E484422B9B6284B6BE909E7AD6A4A5FCD4143D6E6945ABCC356331FF0F0405762B55BB7D18355A349A51E20FCF32534CDDFB3A290B00E47495801312D8277EC7AB856BCA8E2F67E858164216C1D60826448C48B3EFFD77F590F6C4A2B73A74F89F6B205FF95087A35159627E38365550BA68E3C649297E24C1CDB3231A795B7857112001DFA5552C62B988F7A40EC290F8135C415E154346B2D2C22B623217B4EB08D3767A736BBB0941B0F8C38A2E06FEC5631FC2CB05FA547FCA91E573D5196A82450B2CC58BFE857B7200FD8092ED662BC012B4EB8E1F8CBF27E6B64F2BC5E4FB60C893E0088EAE6732D3ED042319D07ECF60E4FC9BD2B2B8B679C559D7C636ADE3167F45581BA6BD9376AFC77C7622864635369DA2915D2F52AADB87F840D80FF6C81C20A480DC88325B9CB855CEB73D780829E8D25FC85211C347D88F30EBF140F8FF4CC63FF9A332D258F67FB159EA2420284B15CDC638318ED0B3A8D646A86569168C5CE59F65CD00D69BB4351E1FD9EA3370A8AFB3D2070746677DD56962032346B1A79A1919FB853C939B3A54C0479DD0EF93AA01F9F3C8C157ED11C45B77B3B8B4CCA7AC21F016547A1C2676582CD36833749C085EF06586DA337A2136C75F031C030415573C743F1AE9579035BB318DA063AB4D1C540B8DA10AC2E65CF80A1E77AF56FA6D81BB45E3E37A433671144A6069EB6CB86B4C7DD46B91DF213E7452B7D1E100 -MD = 25282FDE4991B34D7B1F51AFD5AC93FC9E67398099C2D59C7F7C8B24 -Len = 4946 -Msg = D73FDE8A7A241A3CB145DFAB20F28ACA1EC8B83298C163AC86BB89FEAEA086A335E1B78BB754D4C403DE9950FB364EE0E0451F4D2D680FCDCD7F6C88D9A2565CECA4CFF1C1077023E44463B7FF8834B210A2385CE136324215501EEC08FE59334C67248E28C1D498276BD1B7A88883C28528BA5B03AEA1D9E16CDEF929D67A828B4CCE4ACCD9A2757A0DAFD91405E78EC65105F2DD7CA7A7C96E453074DA6F7EAF53E130D1429AD0E17022F4163B41AF7227E11096346B5407240299A24D27C1059FA7BBBF48D5BF572EB3AA09501CA3E7B337158097CC85E76B2CB72A7A8F7D128012C60033BEA510645BEBC11E1A48E23417D591129C5A15070C1A2BB13C30490A4461099AB7D2D9E15BAC3C48D39631BCDF9F02613329919296D192C027DDB322C669996C560010E7F1FBFF3BAB038C7A94D254513E31A380B1701F67F5C32F342875BF48EFDCCB4613C06533CA2D140E27413A10D263FF52C0508B68A066B7A3FB7802F0BF5801A0EC0DFDD1E9B1D86F26BE20E594FC08402A62D038A8D7F4F96C3A9839550017AA8023C2AF57CAB06044DD13191BB8942D95EDA689E152B81CC66941D47935F0AF3529EE6F3710E0070CB86EB7ADCBCA884848662528D7D3A868CF4955B7D563C35679B5C6E266A693317C11CD51836488BDB5F3E8CA6DF84189932EB4BD5C5460226AECB4A949B87D57E60CB437E36CDC121830D29E12F1BBF69BB2CD2EC0AE98AF84C345F9626D106210948F2E877B67F04FCAC3A521DDB054FF85521642A2C2B836750ECAAE57A2C356D946B7E8BC8B20F33360C281D241C3A6ED49A62FCEB6639D74595BE7C2E91F0EAEDAFA74CAEA92351C7868BFDD8ED598EFD43548CC3B00 -MD = 252CC37CE8C11281EDBA54FBDD1EE0FA13F0BBD934F533888C54A4DA -Len = 5009 -Msg = 5F706A6F7B3729ACFA563C9D04E985F217899A8E26366961A43D20BB2E9FBC0F5E4F34AA4FB77CE0F47CFC1F1147335A0B0F516725C3B81921FF196A951A2D4C5A6F38586CC7CEF1EB93C914F5EA96DF25CC08856865CB361BEF7EE571B02026261E590C901B2A38A5BE3627982C431AEEBA550DE0DEF84F8E113F4EBF43C7EC32AC8301488D3553CBCB866E7BB33E3B8FD58C565C5FBB596A3185F1ADA14384D6BC50134820E48C0F98D82CDFB4F5AF5C0BF6076ADF731E13F516174841438393DCACA34CBCAC06C949703883537B42359C57C48C6A5AFBAAE3BEE842B7BDDC8264ED432D6717BF64542EF047AFD9BCBBF52B232D16EEF3807B4CD0EF923FF16E549EB91A4E72BDBC3C5F4622A27373751654B103410A6EF4C544004ACE29987592FB580D614D9B56012AD4FDD98CE8CF10CECCA30190F37D96220CBF029ADC87A41917CE204C7A8E68C3867B77AA8A5033E311B9B180C24DC9FB4495E3FDE729573D414FA1B2BDF1466D8E1CD73616E293F73A3A9A4BE7928E9E4754FDD65AF000EDC3C6E9C1838DF08CE946C54DCBBD1DCC63A373E6792189EE7D5079140131D7C235B04AA226A56D7C7F1E3B824B386B0B65638D3DD9C38B61D3A9BA7DEE5C2D1ABC8E7D54FC7839DAC0FDED3D167258E8DDABE466579E9B4D66EEBDB99AE7D53B554FF2BFAFCB388ED98AB6317BBD6CCD1BB25A0EE4C006109316D86828CC4B11BE26A8AECBE99CFD306FEF10B69ED9FF38C67D29D91CFAFC331B6E4D8F08FDF4821759CCC930145ACEB8691BE455E21C6C126736C949DB383FFC961163DFB61115F3151AA72133A5E6ABE4F692365224F7EFC9AE8EFF7C8E269C4EF0CC4072548E9773628302494A2BAF00008B5A7900 -MD = BC578BE54E80A79218E946E6B89027172A867B9EBE2DA4BE5E28117B -Len = 5072 -Msg = D0FF6E045F4B636F75A389799F314066644854821B6E7AE4047ADFDE2D0C0E02C250F0BE582BEC94011189B964A8AF430F5921ED9D9F4446E4C788515B89CA69E5F7CDFCCC9E83E8F9460145B43DDC41C07CC512B7E6FDD0E1E7AABA29A6C016CCB7BD54B145F3951EAB9BC4908F623E5A9B0C5B36056292540B79FD15C53457DC74A65FD773A34D6B313A056F79BC29A3FAC15F6A1446BFAEEAAFBAC8ECF8168DDE5F6AE6B6E579BD3CE74E7ABFADF361D0FD32D56586A8D2D4FF4CFDF8A750FAFDE4C2E9EB32B06847FA30B13CC273532D1A23C8257F80C60B8FA94FA976F534145CD61C41C0A511B62CADD5848CEFF643F83CE43F8E6969C5A559AFAD60E310599A34B2E5E029FBDDF2988FCE59269C7128A1FC79A74B154D8AA2850DCFDBF594684E74099E37882B440367C1DD3003F61CAFB46AC75D30E677AF54559A5DAB70C506CF61A9C35E0E56E1430746916DDEEC8D89B0C10DAA02C5D7E9F42621D2B312EAFFC9FF306297952A32D26C2148570AEC90501CA739CE5E689E7066D9580A4FC25E2023897C74C6856273133E1275A0D275DC5B75DB724CD12C9C01BB95AB5A227B7850020630506096878D289923177183EA9282A4C78EC212D2E898CB99D81A3364DF20927EE34D4475A5CF5CDB24088ED75B60201922E9C972D8556CA75F8274D15F3FB88A6B42C766DEF6B21329DEE7C457446DDE8C26405FE5D0309A04229F449E8490CF9000EE8DF400CB7C7EE831BD7059D24088FB42D61681CDE45050FCA78FF64D9C8D1F58B55F802FA5D2F2E723F3E4EED4338B060D31C8ACC46D26870BD45D0DE0798D48E32AAD1A6D4322E69F5E72309B9D7FA1F24BB1D63FF09ED47391C232497BF222C542A70975C8292D275197A4CA -MD = 68C938D6496BB507D7EDE9AC12FE8E010B3B2CFD44A5D4761031B9E2 -Len = 5135 -Msg = 299833B50912BE5C7D466B512B50B52E6F521D9BAC4FBBE3ACED29C48DD8FFA9142BB0F98FAC9CD88DE416ADCEFA2F8E76366331BE956D7DDDB63E60114DA19B80348BAB45B79F2B62ADC846FF857BE296DDF3CAA6691C7536994377F66175FA827D7B7271BE698E35B923EB282C4F44B48B94E75DEF4D0E6B9FAB443B23FA71CF9E2493F6604FBEB73021C71E28854E1411D6DAC64757E66E54990278BA63DF1381E63C01A0BA600B8B810C1C80F7B92B8A98D90CE0EBC4C372C2AA65CAE277394D09577C09DFB794D95058B1C2F785A8061DAB8C4ED5C102B3E3EFF3AA07BFE0D1A51A3FB853C3DCDFC738948694BB9F75EA2F32AF5F8151D18833126ADDFEEB7D6C9D0720C87D9990C583495DCEC1B648AE77921C50966600D9C6C37EB2108E491039C6800BE84F94F8D497EBF4336FDD9E30B81BD962EF18AA6EBDD863AF8AD4060074FFA69498D1A86AC01618FEC341AD4505F36132E81CFEB1745792DE3602C272488B647C03D6825AF74CC6FE74972ACA355A3381C79D323AAE34007B306879BFFE50D4898C9C46F98CB73A39EB7239C7132414C8B0FF73CAED633870A916401FE43D23724ACE39993100218D571CE740C075D6068935225869F24F0B3C99E62A0DD6176455BC1069EEEEB7CCBD3AF15CA12B025E67478872DF226553DF5043209AD36A92CDBF8BA7B3F53D02EA6EC528C4E87ECF5A9E68852307D30E6C1239B19BFA92CADED3E3379F63CB6BCE912A040B2BE95AF0E0D99B49E8EF3A9A073A1089179D657BB363A94B5F07ABC5CA544A017AE4F7D158A9EB6900DF6D8F70FA776716A8796F3F3656644422973A69CA86D93C12E1342B3E3F91168F4316BC84EDFFF16F6F199B8CD8D285C31E0EABD08045E009E00A614D755E6AA5A43D0A -MD = 9FAD3AC0CF3999C1469D05B0247AFB000D61C2558BAC1F0F37D4F612 -Len = 5198 -Msg = 8B5E4347E19E43822E13AA6361397ED7E20F1C5115E29C56A9035835604884978AAC96CAB180C345480C283DF3232D7A9F2F96C7047199698BFA140FD7911FEABC04B77DE6C7FB42B71C527B3EE8BF01315CEE868EDDCE6D411BEE50E13C98DADB581FB98BFC6CC360B147EC98009507971E5C69B065A333748DDE9942F034078DDD2523ECD570A916BD0BBF96E6472CC793BFC0AC5BB90C618362B8B65F1FFF0F439015E3DC4C8873D102A70F2E85B05E6B726119E8CFA539278E7ADD777433F524788735D73A8C8581C090E8D43716A8885FC4A0B52AE371F879A75F11AEF6811E42296419993C3219FB6D465ED124F35DEB8816FA173379549C088F60BA32E43C3CDF864A3FBED69871D18203088426396205B5B5E7BC4DC3EE112CFDF2AFAF69A4EE7CFB59673D8DD5E2041B9D1D45F8C17E880871954D073302499AF3EC5D3B48885D7AC1D43863E59BC7AD41769A4F284B703A719349580979D88D8D9CBBF87A5C985E7ADD266DA2A87361516497C0FA9DC5B5EAA084A2EB03AAB9044450B7339F3F769B865BD89DB2FF36AEA29D6FEFA55A741E7C9A9765F56431152035848F07FD059A7E03EDAF6F621014C37AAA5467C5884E8A34F1F275E1068811D6C3A4D54CC5513DDF873694CB9C63E98EC65F3BDE10C1F6F7D24642C3642DDA8F8B757B086E5C85419E8026A0381623AF57460DE95FFF52376442E5178A00CDEF7017E412FD8A685C6BA13A8A5DF72E5CD843141C0144D27036F2CD489C6FD20AC9DA23C4B822C1FEE7065083E6C8179346DDF4D5A621925FBB4A75BA3AB9C3981710E2B9C53FBC94524624F8321110EAC01FDE48325BF5D7DA92CF416E4A0F477A549B3A819EDCDCF911F090FCEB51B2976ADFDAD0119CF987538FC1B616F201A2C9EFA771237BB7A4 -MD = 9D2F8C21DB064135281CE6699C844E3D49F2116B307E15598368957D -Len = 5261 -Msg = 1BE8B3D98CD21229AFB427D6FE66C885EC19065E181078DDD9FE6CA4E9B138BDD942DEBBC641581E7C1AFF0B33E9BD8B0B373702FA0D0C74BB96DA1BC6BD0D1CEF35797BBA3B9E8E16667819F87B7649EC5C2A835BADF7F33FB46F79D1957D7103401B99FBDA5E494C5A760D1F23F8C2D51584A1F4FE2C0AE61965B42F4E6E84CC62D207BC499544000B294B17633C5867E629B3ED913809C2EE44D6408DB6D4DA688AD71AC8F0C25C3D9000562BF0AFE2154F660C045507A22462D279EFF8E815185BD421E86E6CD1C848AE9632711C64123303D6BDA9B70249FC55DC3776FB795ABE83C0688743989DF72DBE80A470AB62BCC07F9A092A78CC2AF1C74FB25640A61F7E64A34E310ADE41476F42957650B096D1AF87F86733CA8A77994E3F75E08115338838B06FCC58F0974AA955C58121D82C6F7FDBF459FE8E893744F54D4DF7D1ADF33AD92A97B61D9EBF0E258530EA0CD77819510EF36448C4A4B96396CC16E3C57A8AD57B3A3A23238B2AD2381FE4A9BC12F99D36544ECAE70F65243F7E0A2553F4EFED0EF501A7507B89F3598122D139E46288B1C22A600E3DC6DF5649C4E3EA0DD9D8D2F85CBCACC18B2CEDA4AED99A72DC283F354BD6F78056F8438452B126F91446C0719D10FADCF957C1D101DC9394D83013D5C100CD4BE838BF9876481F50EAA0601200ABDC21CF5C1D5A0F40BF5197AC2E98447ED76715F87BE904FD0AC30D062B89E529A5C628AFAF2DD043AD9C1489EF5A1B262327DA3D13181041441C67CBF827B8B0D9320C87B26034EFA41F122B70CA5E067E15835F502EBEE073C96E48FAE708CACF4E7C60103C627D8F9F4280F43173D46A5FB0E0EEA43AC75EE8CB628210E55507BA56F0F3BE60221BD57302A6B4FD585286F06F9EDC03B97D165958743EDE5AF79C18E66D06E8 -MD = 6B9F8B3249572CBBC7EBAA64805080B5BCE93C417BB6351823AA089F -Len = 5324 -Msg = 0FB99FC3E9AD2E007790D21E15401A9E4C003C0B8F0847B67597ED134422F23D6CA7B6AF09AB6AF77FBFE2D846CCEF40F327795826F01A530A0DD526883FF88AE10427EBDDB4C4BFAD10AA5FA7C618A226C913C52401BBB8DCB1790D86AB9CBC36BEF612D2F6AD589F4AC3748D7E9B450FBA2A2419C6992A34254D4BBE044E807235798CB3761C99F3C059F9EE2DDB4A964B46F5438C65FA704C61D70F4ECBE39F235022396926F3278AA31712672A2E6EA76FC9BCDEAB8F325CF345AB5804B030B3C3871FA9F70F5CC5E2F358F63B91618AB262EAD9BD4311272AADD9B9F4881E51F77BDE02B0D81B21A1C2A743A41085EE70AF70B7C9CC34E4182F9C0EE04A67430A19B3DB7B4E00303D4B8317AEA2EEEB794A4FEFD840FA9C250BF165579FF5FA0C92F5EF1078ED594FB1913E1F486A910120A38FC31A17A60306B6582681ACB8ED12C2C61C8025760B9A5BB1A75AC7EE6F3CAC8DF00D0C7B817DA9AC170373EC38EAAF3D7E0ED02D8349599C3998967C0E41676BBD6F6EB9CF5B8E671402041BA0060AF7441679C80EF68F48BBBB126EF5D19F5027ADF0E4E1ECFCCC5D74C990151D5724DAEF4C2B213930FD743C9D394C5CBA4433B19BEF5298D261C61156C51A48EC33E10BDEAECCC10BB2D2DE13E8BBD0535F50C4B36D5C8AC8E263A4E66E0057F68742BAF003B4B6D7C1767F31DC75E716DA3719FB395AE73CC69056AFA9C0655532688B9B031B868C3D0D2C28B74C059F02899869DB6CC7775D97CCF81D1619CF8B094EB97D250ACC54CD41203F9B966E9A5B1AAC45C14AAB6927570AE21BE493A8DBCB9037B04E348F9B27C72A0995ACDC078DBA1F138DBB43DA12C37157EE7B5F1E1D19C0B1D9C340E646F30CC02424C5F574FAF8572E90948B87C7B280E4097E0024E06B3061ED69655D13A64FEF6FF9AC7B1E80 -MD = 3816A14ADAB9E94B9A291458DB57D3B650D3195B81F6785E3A1D8E4C -Len = 5387 -Msg = EAF78A7320972617700E9AC416A58AACA623B3B704CF3D608ABE0C1051FE1F97874541B3EB206F55140D2FA0DCC0B8C24861E9EC2729F717B4C84764F63759660A7760C5C7C0E22DB9305727EED029DD270511E62ECADEFF71B57F482D78705F9D2C4C66A8F07EB67FAE5D2D16CE8CAD12772AB355BB31DA5350CD5CD4D4412E31A5133AC9B3007AEAA38E9E5F6FB30C9E801F67C0CDD7DC19CAE652EB1CAB99823EF8EDB300F5DFB0DCDFDB38F796AE8EBCE1386E6CEED67F01FC64E6E4DAB271D46EED235D6FD3DB395DFA1DDAAAD1D078081A7B601A10C99D92ED3F2B0CB4E35AD47CA3A722DE12F4B8A9F19644F78CAF4F608D51A96BDD637CF8CB42A33B0110A6BA25ABD4190F630334CAE8471FC02BE41E32EBACC3575EEF878BFC53F66485FF0C02F321BA9E521FB240B3CC93BF748BA4DBBC2BEAC0BF66B81C563233D2E64E5E6957744570B64E027947BFBA3598668C3266E73FD3FC3E1C236AD2BFD18C28B04F153BC3ACCA6A5D2B6E86764FECE77211AF25EF9A4B822FDC3475E9A2366E47994D04A247BCDA82956E8E1855E3153D712A2C1907E1E12D3FCCB4F9391CA797AC41DE645B696794AA262E6557B9FA4BECCDAB65E4D2C0D006797E340348224A48F50B61D666B9F6CC03AFE1DB11B6B43587639E06EBB9C1D3E417A592864CFB5AB9D2A18E87C2484C9B3DDBFE1E4A9BE77D0E42287FDBB14A4EF342FE3023E090DC141211030692AEB5927BBE61453B6B687E35DAE5A6EA7F3B4BFC0CC67770380792FF7514041C927BDE1B6D8C823FFC2D14CD256FFDC12A5FFB72055A81EB200C27B5B414D079D5ED842C4022A44CFCA9453146882D33654ADCAC47280BA7649B6468EE78E87EB9248BF16BA42CDAFDFC4D2100F1AC69891848D79F491306267507F8C19648157F81850C3E372DFE96C212E17DF2590873D75F7101E0 -MD = 466D9D09FCCE4622839CDC3DDDAC3CDCED48399F42D00E7E0D297622 -Len = 5450 -Msg = 8BFBE22F6FB83B7B0AF80441CA027202197231A04567F373C529F8E09B117AC027E234CBCCA05EEAF008EA23B8CFF0458C3F32061B424A706DA1DBEADE8F7D9643435A911D7DD06DD0B6983D404B1FE212A84281C9CBCB7DD9F96E051F540A30E28A276E4B329712BCF478AF9AFDFED054C6348339F012678A783049547B8446E7B8BE1EDB606347C5652C3021881F2532408536BFBBF2D5FBDC46C46DD03C4ACF3B4C35D742620A190E090967D872C7D2FB296A5BC7964E795F787A26510C7B20D944EACFEB3A12902033A7DBD14D0C5EADDABFE53390000B6B91BCDEE177799F0F3DB35B773879EF17A7BCB652C8A6AA9CE8D3F0DE635379B87381DF1177A627B6C154FB7D5319027881512E8C548CB8008FB1F1DFD55CD2DC0FB3B1E67431C4A240FF6C6D7C7C5E79BA22CB5A3A6ED75BBF2A0622BF4E6BA0F25FFD2835D366DAB3CEC648A347FBD7F865E0FCFA64F07CC4D534D23595480EAF8C139522F8B334C2C22AD8F45BAD02AD15B6CE93B1571B7FB7FC6CC1174B354492E38D32DCF30BD452F4BC5BE47B730709232EF7E4D36C3E01C6E0188821144B91DF57A0ACD7E4437FD4B50639BE9C6A9560A5479646258F14C5263C6209A8734A74B912862EBE88EC9175DADCAF61E898DE4294A4311BC92FDCB5C7808D44C4C56B92CB6F956F34933EE13E2B79739CB0DAEFEB213B434E6B25725CC78F350D4A24945BCDEAF62ED5F81F8CBC107D680AA183B600CC4009041B94D715F78E58A6E8052D31E78335738D050A78615ED26CA898B4350BD165CC8B4A504BF59107BA07420F4781962DADF40ED87241A9DC4B94CEAC6E0239146A66D7D0DA93E2F501E0502061E5B6F61CE970E0557282F2337EF417690FC486B028567C49FA2CB02E42F6D2CF8DA6F1E733CAAC5B5C42E7121FDA8AB17EF7EA6A98032EC8DB48794D0B1BE3633F7D5215C06DB8B440C0 -MD = 7E3A6E13D8B82AD6E6A69945D5A2E9E15625AA68B7A5F078456B3BDE -Len = 5513 -Msg = 2EFB4BC32CF427BE438DFF9983CCA1E39A14EC401167F255E175B4E2D341E1F7EFD16DE5A836838AE946B06113A13D2DCF7BE24B0B882867383380D0D4B9E9E460416AA446FDA42CFEFEE464ECB36B7456D6CF0E9AFAB1270B5DC9CB134CEE4F5816EA6D2AB1C661FB052EFA9E6430FC55781072EB69A2DD4766A8A4B967AAD205EB4C4EE3CFC8E8C6B6DA297CE6A5AF3F2315A45B96968985805AF914B630749895F0C742DFD0535831AC5A71AC3505C69A412F22A4AED13521684C3645F6EA23E05EFEEAF258585631B28ED23D69221CDCDE71AB6F5AC7AC2B2BEDA638AE8B3355E427108DF80B8F2C6715039D264CCC75F249CA233F0A58FC71019FBE47E5FAE2EEB9AF3EE41770AB07A36A0CC470336E519A945829BD135ABCD7A5CCD9920B301144C9F5109A41130F75709EEE9AC56560A88D05D50D3655909BB9D9D71D3C6D18556A07732712FA0D80073BA21281F261185A0CB527B82D60837942E756055B3E995C15A68BCDF70D7028B1818B70902BE015C4DB3FBDB0079839178252D0A542AC1B8032CF1AE3841FEEA8E471BB70DADD7B3265E06833764C896AE43D16089DBC53030F8433F6A0D3DD4F3DDB7F5BA9E0F329F9976FC548B549F272A24C9F6CB793AF5640BBDFF90F4CDEFFA0DAE6DD403A3615CE7CA85A70BC35CCEB2F9B4F1593370F7B12D4406D6A733ADB475DE831F2DC48C592D0D168C0332915911EBB50BCAEE0BA30D46C311ACC6605BAB32557E30399D2613B0AAD0A7FCCDF556B380C7FF55D4121B431FA020085F1E448B423E38788751C73F7D02EFB51C5EECD7FF4197F067DD332097058BC40635B924A8F72D8BE9CA2EBE33A9D12C8A8777C5C671679EEBC52575DE706BFAA83B1F483141EA72AFC26511B11FC1A4C5854CBD32E443DFEF445AFF23F0338FF6E3DD167964BE76874C7699C90C95A54335C1F2C85715AA062DA852D0D85D70137DF00 -MD = 7CB27E1C1051AA947910167B252D4C495EC717F8BA7BADDEB9C68743 -Len = 5576 -Msg = C9A0B51F3199339C11A5753C9D9C95104B400127087177F14D3E15BE881EE89BF416F97D4F7AA9636C5EF29EBBF8930804006EB26839415D3984B920882499752C36A5BBD583308E716DB16F28DB98B3A3E718A2EBCDFEFA75D7CCBB6A746E32FEAA38D034843461DBCFCA7F983E19F5B23EC2E3D74D2B4402F3BDCE7D7A9DF1384668C746CCE466B0654CDD5CA56A77D68A100AE06D63CD9AF512AEBAE78993808CE672330E2065C0F71E05C0FE821CD5F85732315F04666F3E4E6C4F3E9F415E31FE0980D874994108E12464609C6D5C19CEDFC85846B0A84EF3CCBD3B655FB0DE8CB892BDF774DF39C955F04F322856D470981BEED0F752D82EAD73B4131C5DBF0424B4AB654F72E26EF0CD292B87BD5B66FBD5E7EBA96C62CFFEFD4B1D870BFEF312B86E38ED5C0F50935E2ECF9FCB8C95D35D19A8FC8F202BD9DBA768CA48FBBB071179413C0DE4FDE86762ED4B13E1EEF2A00ADD5D1C2A3AF7937787DEBAF1F6F12F3F0225FFE587A5540CB550F7BC11DD6AF864D6B6D16DB1488CB226EBB2199DA75FDD59A71158867298F63961B40A31209F8F16629B1CCE7FFB617072748FDE8920D11CC0D0678389D1F719DF3ED19846FE9893B04DB60FA603170D9573B1BFC7DA663E07254552AB6253DDE814117185F84373FECD7F98DED170C884D41D1AC81814C73EA48AD94ECA1B7733D8393E320C8C467EF6189B4AC324C68C8A2ECF679C893B7DBC4310CD05DADD80BB6326B51ECD99A441BFF77BE8D644D752F3C5C794E7D45BA76283ACF8913BBF2A420F9E5D14D7A23E95FDEBC69B455E466423012E9D1DE9353E40D4BDC3107C3144B96C6DAFD41CCEFEB2B7FF848CB9FDBEA8648BE32160FAB7E7DFCCB807FB019EBF159231EDCF2D487D76A3E882F3F50CA48DD08A23B06EE887BD7DF9D7C6CC2BDBE348E3125C4532448F400CD57A8679ABAB13E582B13D49442638E2698FB7A563C7FB264157 -MD = 2EAF74198569E05A0614B067C911D625A9222BCB6F7537C34E750393 -Len = 5639 -Msg = 625CCA81F193855711F153E04D05A354D19EF07C6CBBA1F0F6B5BBA8DCE2309597C8147C379A6377308497A01449F8A6E81F8EF0DA26BAE93634065173469CFC2E68414DC1F433B9768E78F23674652726389A307129D29509F1239FDB959375EA3ACE5935C963CEDEFBCFC4EEC14D76157A07CDF3E0C7B98327507EBBBACB24CA939186589BF571F3D7F4B99EBA6CA148F5C9EA30783729B337F6CE37517D3E27FAAF60DE51BF02C496CF2F102D2E0C6254A47199E510C8856FBD53ED6A5FBF2F0E18C909818208790F137969E2DD34B4EBFE2F4AB40E02CFD9BF44E7A51C446F14C4DBB624EECAD1F2E5CA9905F70389C979F7CAA1CC22CE7DCF53F68002753B4ABA9DF81F60B0A7C12AE5C0FFEE337C70230C5951BBD3C281D2F73B9DAE384837A82EF5030A9CE3439C885FC2AEFDA64C7AB6CB332ED50B94B7C4EF51C5077336C923B9F806512E31B918691494B99208BA511F1D1935A6B1BBC44D334CA159CF52D761CC8582FF87C844B0E3EE4E08B2C567FF8C22919E31BB3FAD4707D88B23F8DF27EDB6DD383E48E93ED5ACB4A0D5719DE814582D56EFBCB660314DB38E8C4C6E6F79701FBCFD7D1A332EB24227FCFE5025EE49DD7C65FFC6FF5F1FF870A118C138396BAE7CEE4E6457F6D48A907E7F5185D366E77940EF29AB1BD881FF4E45966BB87A8527E8CD666C93C6F524E87F3CD83FE304C561FA099228AE138E9E265043C496E24DC50E7127D0561032AA452BC0409B3CEBE7B7819CBDE0BB891633A9343B17BBD1486B64A29DE6D1A2003EED9C4DD34381A3D29CBD9EF2D077E74EF7652A8B320ED76E1750589C49D0E383E9829A530126D68708AEA54923CD6646C273C632CF5372FCDC6286D02A7CA1F221C75DE29C7529100B49EA0050DEE6D44C5EAC8FE2D4E28F116A57F988F08474B27D2915C891D2D51EEC776A863B9C523DED9268399E03C6468C35ABEBEF8F85B822BDE5C1D7EF7466316D7C7F12 -MD = 17B15FB215B5EB5340CF28B2E63303E469A9881D6B1B4928AF58DA07 -Len = 5702 -Msg = B71810A29FEF6865DA2C61DC366B357AF704D65FD229CC98372B010FD2C401E3761CF7DFB8942DC02E960ED0345179B1D48CE077096EC1BE77340A6C10D9E154293DF647B19547918020E422CD36EA8346FA744FF09FBE71FD0CD695AFD5D772DF296A41AF70257902DFFECF450F79ED6C1A42E8C06CB912E5B29AC9D490046F0C6243796984CBC7C5F92247A95D6CF4F77BD8112B0C7E4D1F393646192B42250B53AAEBF09841D6C1C64A50B42781DBACA8378B7B8CAF6B825A5799DA3F3334E2D3C0642ACBAC4E5B74E9B62722CD94E2C7AC11823B36E62B5A956F4F64FE4059FE61367DFF819656F70F7E510919549A1EC528E528E63CE05F94126944181526BF737017ED9A678DE7B18C37456E890C5B1C30498D6B5AF89C891488846EA3DC792615B00730BBD482ED62B138B892DF268D7EA013AEDF4D223B661DB98C56196A04E97D622918B302FABEDBD92D97A55C0A7B3CE0A09A0DEFE13A6F66AD7A180212A769B34AC0AB793A46C29D1D86A94C2E3FDFF125929A48C56F1453CA553C8D4212F2951500BEB08F6B42D28169F1E5C324DE54F60312973F4BAAD3EE001EED90F5A5711F97EE0EAB028DD83994F3F298B4D33CD5AF6DE17D5160F8D9669B2AB3222E7AF537A8B7951A8779514E0754260FE0B0E6825C02EEA14B4B25951A4D4A7AA4B7E4669F57D9B84E1E7C18F813FF5A2B0DE26803CC6AF22702C065076B186DFC2F6D6EAD9758EBCC8B3610194B5DF877F8B21C71EEF0D860B41A7AB56B94DDBF244A51801D05C1497CBA0D11173F7508B5540A84BA4F26D1742C0B45B5642C3DACE4284FCD6A3DB62FE20B27F88F6B51168161A41B115A3EEB9C93E23902DDE2FC7B831E176C981FB3DE96C9E47E51414F9115B91F2F0947B1D1D1DAEC52560F4D8C4D4F0599AD9FB702F87C7391731CA8184D57BE7ED8570B6F2FC0AFCF8B9AC921CE17D7F40404E8D53B1EBE580BA4E20BE5C68B5CA45A33E754C0EA106CB69B62DA8C -MD = 7BF393312458F7E53AD519BD3BF2A286A0BB1E08379AD32782909C26 -Len = 5765 -Msg = A72761F14149B6E552CA9C4DEBD0033892E3DD950CB1A41FCCFB6F142C09AB5E99228759B13C177B3F779A8D480BFCA23BD9C9F32736F7884B1ACC3F5C7C7DF07F175B15AB5FF63912D8826C7F214F80857409436E19BA31C77C99F00989E6379F80ABD82D232BB93AFB25D5010EA2FCB25C38877F71752562671605B90DB6C4C82B0D8ADCA38AAE5A991FD1E1E44FA5754A5243462EFA218A5949D8AD95832C92EBC6D32877373DAF0AF8A5D7E7EBE56C42D5740C35CDC3CB504DCC3DBB0C4F88E50334DDA66CAE42EFA50D17B94388AF52EFDAF8EB07FF78026BF798180B525B876E858F1CC26DA8B3D6081BB6C6D75860BBED17575C0A021DA46CF9352F8764D730320D0B93B23B2872ED710949A9E4CA2B0146CA1BA2B49E613C42748AD11F771CCEDB65A99C7A8F6801E7FFE5BE6BE61F6BFE3E53669B0214CCC5EA58E7B7B65A3DD13E8B46AE3A73F5FF38E2899793F7815D5A8DA6774C0002439CF1CFC33BEDFE2B307C07A9807FD7B7DB419093E70126453220C9E0ABB93B18EC061562BE36526AD96DDB5A303526EA415BC105C1EB1FC515DF2AF9DC8A8AD898BC16A4C61375746E694A7C67F4CC7860C2F02D6924AFCDFCFAFE2543D4B4E04B585479F7E5EF05C7490B2AE4B2088D5822D0C64F8F2661EC796A141B14CD783EFAEA7F59BB1F07361059EDA7ECF83BB209283704EB20964190C4FD8803E5A45AEE1FD99108FDC53B064CC1E27E2A5F9A7F28AD219D205D46AE04EF7BC7090530535D780E43FC743A8E97D4245F3BCBE824490E7D5C89D5B8F7EBDFBC90AB432947FCE03FE02D539D2165798FED42AD6A3CC94E668EEAB0BA0B1FC1407864A57D72848C528C85E42D31283FCE96FC5473E9720E8935791C26F1F26A534018B647811AF7132B979C45F12E956161CAEE6CA60AA6984A11B4E70EDD631245F3F8108DF89E11BC4A16C58761F0BDB2C64146CEBFBCEB4F14D522BF813C1D5C62F777793F9D9D7F2ED9FD4D564A89AD0A6F98BF1528 -MD = B61A76DD4DC1C4DB35FF2EAE9F394F8D31468EBEF861E70D1E3C9E22 -Len = 5828 -Msg = B54909F612BF2E07C26E05B790BE731F26DC3425B40B0E28C99B7D5B3770A5B223D097F5FFD52402556403F526000F9E45B3BBA3157C2CB853D601E8E991D5CD483A5D263ED91999334693239179961F80AECB4498D1739BDD72C75CD1323DEE0912A92A666A991A8F6B0C574602FAE4972313077938B9F734541D36FD2A14ED2EC76B1899E57B1BBCA52B93CB93BB65219319B610E2F2E0AD6161B52FB5E5738DB11A22142A224519BCD860E18EA15D6EF8D6DE3CD53D6642BC84D34765509F38855B5C9ED82DF4E1A2DB3BD10DCA57F053D71B492FE58B59B3D1117F3BF5CB7449307D89C0574FC142607A920BC2C401CED9B3A1B82F3DA856AA4A0B6AD73F0B598C882950CAF1FCD6BD6B54369A7CDF7F9C11816C0BFE2AE19409959DA5226369C26C8241C8E0C6756CCC718EB91BBBBDC90721EAE5FD2CB17EACDB5C52726F3CB9A6B0143AC2ED19AB595148389026FED6DCBC4C352160F4FA9688C932B8FAC55C99DC3776ED704DBFC19872538E5AD0BF3073A51DEFAB51BC4465644A3AC41E97C2A1C02A49629D3CC30C369F1192EF4CB35A6263953FEB091740BA8C5E4696225314B519BC177750886E3408005564952FE80B72A2E124F12BE7C9D59269E83708CCE65DBFF16EB2FF784E4644FE08830D09129D9B07BE33457EA2C6CCEB7E148E24A3B9819B827A2D9F0078926CC1FC10CC68901B394355B071BA34D5B58F518FDC50FEB96379F804E7D0BBB2714C0A27F3BB21E74BBAB5C69D3F915A1FECE707E195FC7186BBA2BA3C6191BE3324F8DB99549249CB2FABA2FA05BD77AC0214F29E61696E9376758D1A0CB47165986EA3B932FEDB10097365BAA95FB83C7AE14BA04CEEC2DD141C8B8299308E72603F9D336040FCD7839A9FF88E8E9748736FC7AE9FC9FC4E194EDB7623ABC9500D2DDFFA700EF51EE5AEE7DE124388B42CD32209336B2D224229113CDD5202DBEE1FA42F01D6182DACDD5BB0FB7047A23E78DEAFCDEE0982745233EAC83FFEEBB7B14B9C711A49C0 -MD = 7ED9D46D6233932A5E656CB2384DBBBE2FE26B49B52C1BE624A82002 -Len = 5891 -Msg = 6914318A640D20E50093EB0EDCDA4EEBC21A37C71AA212D10077D3745BF7D9794B3EFC83EC5ABE5DD0CE3F965CF7CD88BFFDD61EB4412E0BA0414B19CEC7D34822AB8659C20034C460FD5C226FA14A56432D6F2B5A34ED3E161CAA59CD9C090CF615AC9D3359A6259AF6D5F7C97E1BFB14633A78E6D9ED235DB1105BD26D559B421B75499712CA52CEDE2E315F886A45176D209AA7FDCD9C8D5378850E891F4DC14E2A9CD7E242EB6B20A89335176E481E2E6161EFAF7D18C72C43715FCB68DC6B0256E5AB90A5B116A9FE3F5330D3D1BE18DE2B84CE24C3D08AC0A82E3E98544F68B8A903157D7221FC953F2A20609475258A23CC762DF74B8A05C22AB8A3B633C18C96C0F36FA7CE3B0E23F164799DB822048A953E54964FB13011F79F8692F7E332E669DD7DFA18C5C974F5807BFDD4AE1EEB49504ADAD4C121D3927D98EE44A60FE2FED3CE6045801A061322EA85B0444FF3924AAE9C8A37B88C4CA70F53E16039ABCABA7C89EFCA4ABA3F935C897C9A98CDD9F70893A6FC1D7E228B588C688346020C61431C0D32C60F4459FF86B57697B74B13CB3D56ACD49D1D1721B8E6EA62DAC161A862F96449043E051B948BEFAA4F0FD0B41BD168E0CE55991150993FBE5B58DD7A0277E14875A0E5CED081CE8215A578AA82A8D54D1E04AA100C1ED8D386A0F040588DB4C7469D52F4402E933AA3CDDF4E71C7C5C2B332C736694558E98C15757CB5E0188729953AAD36477A65869C512A5B53465D4756DD0F6DA5EC8D3EFC829682DAC14F597FF53E4E7800211D8D19C0D1CFBE92CF105993D326A4D7145E3D73C69DB18DEB6D01FBD073DFDBBFAFD76B857B7CAEEB6D8A5160E77C386C217CAB6413C531A9AAB1130EB8F274195BB6D2C6F086FF7D55BF69E7B994F73E89AF51B294621F0DB6D40A30B3B8461EFA05557ADEE258885D38B7B8726D3C95480E6FB56F87F52812958D8D32A3383739B60D5616D21347D4E1015B5EAB77AA91F56104EFE01A73AAD8398F770F1FC9C08CB379B3B2076F1DF7652DC0 -MD = CB88D2CA6262E76743E3C6629E6621A9278A9EA3F71A29C2217124D5 -Len = 5954 -Msg = 9CB83412023898BCA0B5579BB62AF6FE433A5EB239B253F654879C45AA9B709DAF10BB6A977D35E2D7C3F126569DC4E415C21FC18DD3D496FD806DC931AA85CEA9781CB76310339D0A3DEBBF1103D14B9FB940D71CEB5128BBA5073CAE8CCD9CD6824682466332DFA85742B3C486A942891FD0FBE17CA21A3D33C72A1C252E1CC75F299F9B290CC0DDD391C374862CE8B3840371182F94929246781AA1E0BC81A327F3CACFF8CD0D151D0F3DC7084EF8DC3C05F75937B5958D3956B6F08697665D16D1AF7C11355342671D4B5FF9AD3554F6C23A364F0155F5E61B64B61ADE913A20F3283D13A40ACF32550A31ADB76FD6C586D3192D345F7D69362B5B003087BE23523CF21032662237C78793BE64289431C3290D8B92C9FC2987A5A18C0639776D2DCA3E205B4569ED9E2318D82B2412D219C54F078CADE66E28D4A179DB3355C0EB0ED8290B4F38883DF6097966951D8DFF6B5E08FE4944F3ADCAF9A09A180C00F1607C5CB22493EBBC36B9B6DEB5CC4E22E2A5F1C82C2988C1795835CF8956C0B18E369CC9EF145C4970483655DF6CB95DA7D578DE7F4F57EA05537C206CF83488985124417D3D6D647BE8A33D618A46075F6239DD5A4CBB0B484163AEE84840FA53F63DF42D7D8C6314047BDE026B11963A50892991BA149771FCB9DA624D6A13A6D01F881BC9DDC7471CD6E5FD26F9EDD9309528ECA899071942A2BD70DE754FA8E349870B5ECEBB2583931B788B3D497242D8A16D23439563FA76D348AE0600A7448FA116BB70680CFA7554573ED8EB4253427903D0325B3131BAC52F4B23F5F97228E586E95651B8C5FA325C0AB5D86C217CD1D9C7833B9091447B3283CBEE04F06769013378DEE88991469EF675165F1B18E8B86A36CF9CD698A1500E6B167F26148BF0EA58F4E673F27E39240C54E0ACE7CDB002500D72A1570E11B4465B8A9619AC0FF1A3ECDABC6E6235506721F2C04D30235D2C6528CFEF8C55FCC98E2618AAB4FD513B8C7014BF7393B41966A93C31EFEDE19488A101804551F6FF3EBF6A79EB8900 -MD = 4A57A322DF28770FE063778FA5A90AB629EFBBD8892248E73E4EB73A -Len = 6017 -Msg = B6E69511FFA9AC74535A28F0E2A0A6D11FD2A3D21CD8A514FC6D6BC063AB51D4BB89ACF599E46D6AF1F137E063F1050E6F51F2A5F887E8959533D37EB578422A3E4AFA37ED6037D4C69ABA1414DBCBF7EBECAD42C3A81FFE73E73135DCF90B496C937B4E20DCD73A3F0E235C249609391A508B50ED941436E8DF4F8CA884755EA301B82865688CEBAC2DB8B0F257A481A6382622C7908C319675F81191A5AEAC8A3DE42335581545A7E908DEC6D92636F1B00517BA2F718A97831C6B0172C68605E3D910E523A77C11900CE2E1204F3BC459A1B85310F7D6223009FABA3E51A940EBC63C0FDF02F03FA17BB35A918F501514F2B6A8FED85A2DEEDC39D2684351F49BBE5BA2ABC4655C89842B56DF401FF0A8956E41DB417B2D9CB0BAC162B4EA4E1CBD315371DF86436E2920221C19CC75602BD1E4B60C312110824C1EE49CA91375C7AF0D2D3CDA48CC4DE41204CE9814DD4AB05B6A627485BB49D2B0FB237F57CF543D2EEF06C60A6236DCB54F145F9FB2E9356D71867DB80E2D74F93BC7EE55AC5A0DEEADC397A6B5F8C826A69F9CDC081D1781DF7ABEF448BD4B4B1EF7100F0115D11571C27C6EDBBCF2E5B167AF3D336D8BA43306E6E6EE8E685C0ABA72A16B902BDB7FD777962AC9B83DF9A8A084EEA33EBB287588ECAF426BE987C9D12153C3EFC6F0FE6F7635972B1990B8639EBE073B6665C575ADD66EB79177FC0E7B29FD429E63ED33AE99282E2DC7671417A15F4F1C53E09F36CB959948B972EF6970E32E606EBC1FE27C532746481A840096284E3953D6272552535B03253E34A9609B4E8AA8A091538514DAD89B5111C3B135C0F36282180D90434BC8DA064F10D27D574F8C5F15D1BD5CF9D5F5E02B3FDB8BCC2DE688B8BC79FD5387CC6E0DCACAA8B5DB53528E398BA1C7D7F691EC16EB31B765EB42AA9193AFC1D0A0702903A36BEC2E4F806A5CBD755C7EB38A273E1F77C1E9D4540F6B4E00167899DF77D00F5B35431CA5FCD398167D21F9BC504A0EE354C22122D11EB49F5A71B98E91B968909528F0AA6CA0D58EF7E429283300 -MD = A9B3516CC80D1555936A11BAB23A7978CEDA6E985F32F95D016D401E -Len = 6080 -Msg = DA5B2118CBD59F408CE56362489FDA69EF73172F46DEC16C0D4A66E3F3CCA373927CB6784CE62BBCB08A490D003A8F77391E82CDD87860909383B054DB95816720112E2F96DE9E0FFC8BABC1350ED46B9AEB5D46B66940EFA311F4853F3118063C550733E7679D871729001C12270E98439E375E0CD24769D318E03CBC97D643F1DC5F1B5EF59D12789F22449BD8FA43A13CE78A4186166523F3807B0B621079CC528F4E17C258D4F9BDD095A3E365614B94F2CD778CACABF26244891531EEDC24E1BF4598319EB8B7527736BB1E734429360F47F04B2E95D5AAE997763A467CC5303D1141C2C01F7AB9EDAB860D180697C906CE1558AEFF5ADCE603F8A4A10FC6C1699189E73B489F64CEFB89AC557C5BB8826C0317EAEF2302E855FBD96777898104365D96AE8A8ED8669C568C4DBEB0A70F6CF4C22FD933014473F91871C08D5A7B44A928295FB2AA56D5E2C39CA79D2837FB39B35C6810C378D749AACB543368A19C137B872229E0A6F469022AA93BCB2BE38B761C85AC09415CA7DEEB38FF2A2101507206FE322A89666D32750AF0F4D7B2E59571F02A048B8F94FE2D231072E301C8641D1CDB4F841AB165AF297495A348BCCD937712E68852A4ACA948C1294F8B733D06D67DE89F206498DD401E149FCC1EDCA92DEB92952EDE4EBDC7CD7992104769A04DE8705027A31337B88E8DE93F6624E8F10B9F9924E8CE5A9D841C9260753FA1492CDDFFE6B4400C5719D76FB5B01B234F32FFE64F04D0A00676FBFC58DBE17B4D552FDF0C5B802C0CADF723F73F86E8FFC493992D23E8C0B84F7220A983DDDA21170B1F730C736E75549AF6ECB8DC94FB25C26BCDDEE420C83E8A45AE4C345816B7163CFE016DCCFE47C66979D610A7F9B4A7B1BA5E230344C9F46BA076F2FCEA68AADA8FA09BF0B5CBB3850DDEDD80A30E1F7A639AC69E5595C6A4083AA959831EBBEB84C018068723192F58BAECDDD18C857E212D4C7E7215B6C954728183FBAA07720B97189AF6A7729C30D28DB33A889F225D027D164F254535770C504C506AEE4EC4676771F69F935BA08A1C6C85 -MD = 3A9695FC921064AD79921D76E91D7AC91C777A77BFB5380EA0686C87 -Len = 6143 -Msg = 587D20FCB467C62A25455AFD348286EC914A4767E4AF71796204EB1D5893ED42CDA250F5BE00E2C4E2FBB132EBFF837CD9C5236716BF32086EEF1ACC6F59CE1A46FF7FEEEFBF3DB0DD42432D9858ACD78BCE793093237F49FB3515D5BA657D706E790D58EB33A725A47D99AD55A91A58FDF3727DC3105DF313FC1D7EDCF430257B8E2BEE38B99EF9078C44F2C03B33C79FC9FF21B05ECB8A5725BD15C5F6F8370E7462D0134C200FC52238373BB44263116983E3695B8FD3F9EFA73A250685F498DF069A79F78F5595709AC0CB0E324D93CA71764339AA890E058598C19DBFD07EC09E02E1FDFD65D7B26DCC0CA025AE40F55F859FFD2A0254EA60174B1CD9BAC6C410A731BBD8010AE44DDB3D25D593DD4D74824322BEB9D9A62FC988342590058C34B8674C431FB6F9B68860950DD4A3009110B479A83979A6C412B521ED1958C2D582DB9C5D3F603AC4E20C548F7C79EEB7FEA879D68333D991E2281A664555FD79F765D9F087F5390F4F58772C05E10CC3EB166FEFA01311664E52F62086C763385069B88B0848E7CD81F25D0424BF2D3CA172C920786CF83119F4F2338765ADFFD918B7943ADB8229CC2B43F2EB4C946DAA03F37EE76179F28B3BD7D91E09A5FF93DF7CCF83879665265F92E931BADD61FEEA4CAA0A86EE120F9FFA01971A916EC023B6AE7AAB354F45647FDA515F5EC1021ED76679D78CAC9309413EE09BCDC04F04FEE24C473EFD0F13122B3E186A1DDA35DF5F5D0E951AE44DB38CEF6BCE7303A430E9EAEACD5903383954515C886C93C5D7C85FE7D0B071709E186D11D3204C7B21B2EBF4264C34CA5C373385DD58B8D61443BFAA423D7B8C5AFD10D349C29A6BC0E893D175F83FE5DC41876E6C31586A126C7C4140B9777B7D800932B57397FD0FBC28FA8BB7001F4D6FEC01E6328971E115E8FAA9032665A7F9C067320166076D4561468F10C8AB7E5168314AA6F30B48A2F98FD0774AEFF2C040AF531421701F45AD3DE80E965DDFEB4DE3BE5B4D2C71DE1AE64B77917596FFF5820FE9FA4DA48B2083E258959381F7845518CEB00E0CC37DE3557E5F8314377A -MD = D4490C818464E080656335DDEA463F33AE45769B08B6919288E64A6F -Len = 6206 -Msg = 8863868907EDBDB49F4D5DC4C32957F7A65CFFFEE3DA80D0623036FEEC778E132A5BD98CE36633FC289BB87858123F41F06B85FFC425A36050671CAEC1F33FDE2CBDF6D3DC1004BE8E4ACC3EAF189ACD44D19655D95F2427B6DE25B4D279FB403E041F3B8FBAFC05DC5E5B108756BD41C8AFE6B086616E812323B536A009D78F8EC67B10F00CB6B6CF367572D6939645D212F2E5267AD907E11CC994E7216837A3F5CBE93848F2B5671E2DE23D98FCB62E9741BB92D3BE8F474850E8C120A402B42424E952CA222CD9A92D56009FE995B9E5BE530DD714D421D3CBA4831D74A927610C5C9BD6AD5BE58FA9A7BA17535F95984D181BA944C1D53AE68BF2843E92D5AAC628E3045799F72AE5B5631EB72220B88C4862E34BEAEBF114B5B2718F4C996EA3A0CD903E0D04B291F903B0BAE11224CC401D04D5A7848BC5868D2DF30413D2CFFDF2083248F78EBD9A629D11F8E4AB74303923E5BBEA3ADC7B0EFCB7B209B1F271A0DE025E7D47AD1290AFEB62D476F7CFAB96BFEB0892704F8F4E356BA025DBC955AE8AAD8AC7185F3591F0B871ACAAB2D1EB552AD16704711C73C7D4AB007AE143D808CAE87B07DE1973A49F89DFB6E7F4ED9D5E53A9AB3F4FF8C3E2759FBA9AAA7428099E2083764E4D2B488135E67B5F6D5A30D713AEB0EA49618131930B86DCB215352BE4249D60BA72A67745894813FE5775DE137F8196F6C6ADCBBD7A39A669C34A92584F662CB9B21CF216E518E8532FEE601A504EB0A3E954705541F7406968834496649C99AA34B7C01E7BF07E75686C12666F4BACD43F36EA224AF9E45AE00ABF1B100F060B7E295C1054335A0530AC9CBDBB2F700220E8A4030C638E0B23290D0A4C7732097C695F6EF0D2129379B95FFD312D80C3877E12DA26E95AB88F158A4B2C9231263E157C9D483B5F6D8CD9A81ABCCEF9F8DFBB0EAF6483B8DB13FE51D44AD0E7DBE6540A90505F1FD4047110E105CA0828F943FD05D347BAEF38D8822011B066359F51FBC2657D693066E6C6973DDAD1A114802DA12C4244D94CC57A8E1DDA43ED379896A20BCACD74A1A69A9D387385220EED0F3E23862F57BB74 -MD = BF404FCC000B1741710CA98C53F086608E7180AB22955A699DF9CB01 -Len = 6269 -Msg = D6D2CAC467906CB31297D64853954F2BA4A96437FDA9592A6F76024D512A39AB32C45F6E181B891079E4913133C91B803440B38A07B42F01FC174ACFA3A59A5FF20EE77CD67D46728751FB2815BD2EF651B5AA66ED1EA59C2239AE988F6ADC43A0D0FEA105204826928E9217B602B240CFACCB413848F9A0255D7E05F1A99A92AD2C91D5EFC38083ED16C36C0D6F62F9C4DD7F48AA42FE4DF0719DB47CFB9B7888EECF73762105BA279F046BF2D4B3381C5A750BA23E265E03E99F051C71416312730FA38800B0003811616545D3F2EBC8B578C9E5E3672DF8F8ACB41C3C13E330F1358F01421E83639C2CFAD25C9F3650556DB62E9FF9EE59F8F05E44CB2A30EA190EC1591DF29EF6648AA20D2B099B9F1A35F934C3FEE547797C0D656B86D4F7C05F0AAB0CA58EB32791241017BBED95B33FD83133A07B6232256B2775AF8B0F333C599DBEF8D35EA0D209AC94A175CE4043A6E0C5699B0A9E7E95404AC69B8AACD051F39A40492040C2225047F986501ED20A01BA0FBDCA024851EA116128A594FE9A26F812C57E791D811952E9289A37B5F5C7B434711C245EB7BA083F2B990AFDF7933CCD5D736D7F0F3C1C7E8E5DED33288E5A2180819D82EAE2EC63ABFF696EF272DA338AA24CF65DCF6F7ABED2EE63BC5FE6BC88B4259777BF2BF9C431B86116A448EC1166FC1F5C49C516382EAE9AA6449F14417A8CBFFDA9E70A956BF7DC25276113ADE0528CEB598E3EAD13DFB39C04E15E867E77C460B006A35FF960D6E26107F165005E1CC2900CC504477D39D6467757061B81AC41CB9C8575B4EC5AE0C04388516D56984865B52E1CA9F6B1E9D359AE4B37BD09B1D7128639520428D69F6BAAAD53202C26EA46E0715CAE1EB2ABD938D55983A93490FD59AF574553DC94EDD487099A822A9297DA539E4A3FD7D61E1645537E29147568999A1DC2E35C1268323D3D3B41F3E701DC8CFBBED4A294563B6D5B8B440A55EC325D7B434BD6ED06D3E658C478DC9926AEA819C8FF2CB0C03CE23A246372C27D866601CF7A3485FA9FFE3F3CF0359B85F3E205343BA580FE130589BDA19B1A4B26900D5A34E24C8E58D1D5B28B41AF5A0B58 -MD = BBF55D2F36EA8CF1CC75F959039EB305D22694A28D63935324DFBBE6 -Len = 6332 -Msg = EF21AFEA6E71C04344491C83A708ED9AFBD05A534E72806B75570CB6ABE1A94BE09AB798E50F10B022B353858AE2825D4E3FB6AAFF9E905A5CED6A01D00F8B967EB28AB081DD21E67F7A2680653CCF979352389A7653A7E441AB27CDFCF6550689DEE57BCBBC121A65378411525ACF631A503303F5DFBBA4E48FA9120C8FA8B150380DC53C5C8767D17D95F7C386F504F9EBCC7094B9F203F34889829B93F737A4803838CE9027466176D973738F50F4F47A5F4BBD76A0CA07C8C106D7766AAB9E55F2429BD7F62CE92431A206FBC17A0AF9D70F11388812BE321F9D50434934008BD4F1B9409AA221119523CE87CCAF474FC971C719A75C9817E21D847567BD202657FFAB75973F30D6AF30A94896F7130FF07AE3E2DEEAC1212F1D73BB3B64886ED2B658405368688CB27D4F056C91EE369B4E714FDFDB3484C657D5554732FB329D93889DEE4AF8C80BE883280778159AFFB3051A9984CFBFF7FCD4ECFC4B2D5BA773B374910345E7300423BB9AFF8BED019CE8E7EF60108B9A990CBACE2F892DF3C8C7A5A40908C9F1AA3A4D39780CDBEAC19AD891AE9811E450C0F612EE37A68AA6C109AF1BB9FC6E5E701788BB6182C7C92BF4C7BEBCA7367B3D07F8E081FE457A00A9042C884827DD0554919DDA81C56C4FCC568AC2DEA06AB9A439821037387FAA910E097FAFFBCB4C9A64398FA52F22E70222AF3EB32C5B1B6C8356E380431A36D32D82F98A3AFAC816B8DA9E41D9482764B0808B26B21E0E61B45632ED71ACBED968904A8E1222959BB9BF723C09720B338227AC35C16F1CCF4A2A4113F60F9A2361B279B4D5C670868F57ED720D476F24DB1798246966575379FBC1EC2FC3C3F2A6CE68FC0B7DF8F2E9422D38AFF926E4FE7CF095DBD25A9B3803E47616B30504B527FCE970EA5BCCDF162B8F74E39DF6EC02C1DBEF1D8B20669E64C945C171346044D2C031649E1CA8D13D6CC58699BD51B079A7E1C638938DCDDCE42F1ABB23F0AE24740984DEC7752402183DDAEAF91755301C3D5C979C1863E71CF155ABAC99CBCE52BE6051997D54E3DD09458889FFDA0DA457479CB44D4E451CA5C20FFEA5D20C58B00DC4FF696C2A2BA4A1E6869A70 -MD = CDEF1B2DCFDE7831044F6D37395779147CBFD90A7E46058199FF0B59 -Len = 6395 -Msg = E857AF8DBF7325BA815862B22BAEA57D82B24D9A4820F6E836BEED71AE82FF5EC966FD86EBFA008918A85193BE55CB3953B4C17E9884E6DD1060272C7A67FC3AC7DFF32933B10DC9957C76E5FDF91B89F787D70F684CBDFC79C7FD19BB0BB76EB592DC276EB15472D97F3204AFE7702F78DD2DB214965CAEE5E8243630CF7DD54B5DF7BC6934712075E1A302DF48878629DC5059B3977825BAD0A5B6D749E3E6917BB4A04141CAB24B80B6999AA0A34623AE4D7ED0CD7A8FEFF64FB58A2A8BD3A8F6FBC5F66A12515707544B33E4D3A1612313C3F421B1BF6E764B5288335AF4B1300143F327FA15D46FBCC53A18160DF6D0EB9DEA9FF7C4FDBEECFC89F582E37B667AF3B835B799BA043F2FEFD541402968F358AD03D0E03E78FD691BE532985F75B503C53B91A57D4EE4338F82291779CBCE04A395A5A739F7E4000B294CE705BCF523848B9D9A48DD9A73D90CDEFC3937A278EB2D5B6128A7D3A1863A032241197AA2BB2D0E18A4D6043CA2B0DBFF1C3420D9D56E80C5D3E0BA4B28665AEE1BE710EBDA24E6B8D32892C8276A169FBDFA2905561B79EF24D4ECCBF70E922397AC596CB692A94A703FA1F84045DC9006C2358ABE177D99A58932F5C2FCBBC0A783931802B84355D0C0C06A189E960BA62D00194EB1AB2C7D1FD2F8C315185230C97303D3CE711F8F6DF9E9995F90559C0A6676170214777DC8DF85ABEF4214BC95DEC08851E82D9F11A066811EA7E6E552D43E1553F86AB4EC6502CD2DD7585831BE2AC890030505BA6800A819E64E27E6D284A76E87D27715FFD217E1C5A248F9D32DF8ECC4EE7FF789D5AB64919A0F715A657C230793CC9782D5ABB12F6D279BB61761B2C6B4A6470761345E5851588D701EE6D824D2FDEB210E7557F4B978DB0F665619762A215F79DD86032E8B0FC896777B7BE303ECA8BE5DE3F37816369C589FDCD0DABBBA9667F49E7BE176937DEB692F0706253F5B6A91AA295D17F4CA1BEBB6784541CD3E51FF9DB97A99CC9BAB34F6ECC51DBFFFA2EEE8191F13A907966DB87C955E1CC12828322DC9F7733D575CC9B328972CE877FF8542ADA2A2C50666F4DA362B55A29FDFFC57F4B0DAD7DA11E4EFD014FED633E4F02D54E0 -MD = 8170B21EB857C2BAFF7A5F8144CAD3BC9D87EA9CDB8BEE241BB9DF26 -Len = 6458 -Msg = AA0A0C3DB258A2B6D9DD4D1EB16C56B9811BD41722A2479F610E09630284282723E0E73C0EBE366D44B2F71CCBD711273B60DB1D1F0DDEA008675227048522690CFC10F3C0C2AA997EA64B1D46D54430108B2B97ADD6797749257947D389902BAEBF9EC1057494A0B66DF6AB98102251E3642DF44F3A75E0AB18DD765C98BF864C219E77D43DEB3C7932CB5DF1A0DCC34BE0C1C964AB89C25004E922D19C966D417D1687A947727C3BB7134DD34D60DD7E954E7B18F0897A69099F2ADE049B95382A4AE700753FE5118167D0BBEE90583CB40B883CF75C66B90EE8AF2DB6465AF85C57A1ABEE077AA4339C158D755110BDA069DB9C6B8430D3F6B5172751FDCC352D311BF7D6B47C0813DAA240840C5B5C0BDE7D714E0118D0FE46AF727E22E9CFB1F284F2EDFD4D245661FB3EA36E790E7E5ADE713DE267CF93DFD1EE6C6229F01F291991DEB72BB7B2D02A78F0AF853DCBE8CA640164CE65002C48E1F8FA1C57603F2AE1286CCCA589AB5110EA594D5117FBE0954786C71983414F12C64722F46FA3583438610B82F8FF57B68A0351F2EBBF06C6F2DC08870B2FCC1B99CD5BF17F5BAC3B5EE1E7A7F3D8B8BF4DD9CDEF405E64B2FD81107E985C2C8F7C751F2391F4A18B1B032F0D84A135873BB42978EA1224FBEFE14635A778DABC938EB45A4A6600AE7EB0172E6B609CAFE72ECAD895F1F061D43EEA19BDB1AFA51BE9017B2A26036B5D4C801967C0AB8E618B1279104313EE7546996CC09A3A524DBC2C0A5F4490062CCDBFE1E1649CAB9258CE21DAF09212B6D3C60381ED543A503B2D2498BABF3DCB4F42F205B14FF994D1A83C7EF6EDCC01F89F5D8680150CDE355FFB2B96AFD7B02780F7D2F52D1D520EDC5B8DAD6662E62244E9A01903BFAD50408216775D25B1465B5821F8C53F03E67BC0B646284837117D6706A6E96EB78D2BA26B81CC4A22BF90C0BD90AF04A8F142D28D1AD4620EE06E27BD41CBF2B56335C5F040946580D6FF6ADD8023B3685B3AB5E0B6934CE8DB603698995ED576FC788F6AF28464AC48056E70E0EA904879C2595BCDC75A6668F372B254B01AF4EED2C3EE5CE8604C6B9A037DF4D779E520F77F31D3F21472548394AE91EE1DD9CECE6A9F741431C1B0C0 -MD = FC0E24299D8240F3DA30AED075466ACD04302BD9489A58BECB9DED17 -Len = 6521 -Msg = A36E30BED5872E0EFBBA19CC4C32E3E5B54A80548C2BA57271F6E4C394BC326E2C9B1A28DCDECE6CF547F52A06EAB6DF6325A9347979C396B76BDBD7F45A070D6140835F938638A3DE8FA4A9DEAA53DF7AFD6825C980F1B9D465BDBCCC9C983B49A995E4F2D775684CB44F23150FFC918E629ABE26335871D512448841F15DF92AEDE1BC1B543C9A0305CD9600CDD36602D10554C2DF96967CA994539DBF31224B065C37A40155D3AC7A847D0B807CC603BA71751473B7581981D30222F434D2A9FF20666C492CDF369C2434AABEA4F822D92D5B35748E99EDDBDA5077354FF6794FC5B2E77DF92D6D2CA0E6D638BCD180D3E95EEC8C9F28BB01C9EF4AC17C8EBDF132C4D99BCD71D5D1A641EFAB56E24EFAB3DC7427B33349C21ACF6A8CD114ACCED9FEB46B0A830E70536D266CAFB651A5CE6432A2D7DF730F1ED4CF7100EAA3F5E7AAE140626769A2C17B9D3457FC91C161ECA43E2F2B530E22F83AB2E9E21D4AC8A43777F3C2AD2A44427D4516ADD22C60A995C51AF58D3375B4FF33FE7A1FB5CA54AE86B121AD22315458C5C555BC742A71CA2D098885B47444242996FF7240204DEAF2C7EBD346AD4565581DFF28377F11239FF096BF1D8FB8FE668871B020F525AA7C5C880758AFC7C73CE041A061AC4049F7429DD1C2E9C5E00E00BE1BC02E67BEF24845731B26020EC2DE3A225D714915C71902BF804B66EDAFAF5DBAC0022CECCDDA36F67F91608B73FA5D76B8B97DDE2226B112A9290AD232264ED0D24189E7F86EB0C1BB32A0692FE7909FCE19A5DE04582E16E6B4D519AF352A86859B4571D948C2FD037C72711869BB1FB3EEE6D797AA7CE4B51BC6D8AB787C359AEC94491C7DC88FD138225ED9DB2259D5F300FBE8433E35163ECB1BCBA1A7CCD39EA6EAFD93B07E5BBF6CB7AD6F05412083A4913DF8F9E03A92C6C88D5CFC73AA392D3BC7EF08860CCFA5D68FAC4AECF11346CC24E86BD07A1507504B28B7F4FAEF86373A964083A254B32F65BC0669887ABDAE83AC839AFF6869D8B370C7345376E5F348DBFE2538EDB25E44993D8DA6B57AA4F599E9F11A48DE6A7449B65DB9D0F8114EB1EC842E49B213E5D4F7AD67CB7E879407974F38377BD53C1DFDE63E192703A359C5614316B22FA2E980 -MD = A835046E91969FB0ED3BE231C5E63E93C69D8F430E5684419C6C6A1B -Len = 6584 -Msg = D1890B4704E169C28E44DDF62A1091450404910539FC2DAEB26E8ACF4533B024E5215C2D02820DD8FB2CFC1743955CBACFF0F8F35DFBB5E3F942F36247F68211D518F3F601AAE12A1CDC000BAB43D4C973F287E80741DD1FCF6C34F2E6B4B6C313D01C4FF3CBF9166F26946F18EF2D58271BA9233F09A6B77BFD4F48B36EB3D73D1133C4F842A7DC3907F680B0B773242C11E3DD973A44327EA7CEA9C0F8E07D682B6651E506B587559FE01ED721000BAF570A16FBDD9EA29FA3DEF4BE912058321A8B720C5C102E48A6E7ED6F8838D400DD57D06EEDBCD15323F86D855C94B21E41B14EC9E1BBC8019211FD88138C91F9ABBD9BB3914D26C1DDC21673D2D51263B39D66E741D924CF2B192C5D2C1A140126A3D64A2C77BE6C2C6EBE8599978AE90BD36CBB9AF64D078910C4094AB3BF399C34F2AB8EF843E9FE1BF88BF443BA21E4377E5F49C07FD9653B526E14562237F02D11B904BCA6AC31AE721A43E3C4910A24AF6F4D80C031C109FC0FE49F15274BCA92BDA04C3B4196C192F6CE489C63A806ACFC895AB52CAD657C1783B528E12D0ED856E1F8FC91F2AAFDFA0A92498D68530772EE73B359FCF1418D1096C46B34DCF90E5B468BBB2970BECBD70089CFB039D64CC50FFF5EEF26384D34F24515A6558B06A1FDD88F1050C5BD78CC6ED83D4C2B0E882AEBCF84AFB0430D0BF09F2FB42B8B4589158093A7709AAE75A790910E211EE1333FFB6FD80778DA3BF73858978E9DD647978841B18001DBAAEA43CA0C0A03DBB9BCF30CE76A6F4B2CF2A9B6531B3E4051E7E05090CD421BC66C4731E7122AD129FC42DEDC83BB460E3F889992FBD3CA072686E56B72C720FBC98D723EF7F247286F77CCDDC728738E941B1A74D4F16671C21FDD5643A115DDBCB88EE7EC67EA66FD2BCE718DF6E085D4B5FC71A72696636A8F7B3A68AFA51A896771FAAA7F1F827430AC5E8089DBC0D4175E1B22A057BC5F1724EADC1A41E78FA3ACAA8B97E5F2E19EF9D59AE12B04E7F0E8A621E098A66910E2A5ED2102B824CD3EA044A854F1CD0B33E61E7F737414B2953549F25DD34D19AA1981DE7CD5649FF6C6364A4F25312EF62395A747AB88AAD722C05AEC40DEEA8EEE5E779EF458A68840BC6BD5D29AD40F98B3AE010B6213372ABB7BB8B8 -MD = 97495BFEDAF1CAB18E85190B374729F5543FA3F1CD88438156F01A0C -Len = 6647 -Msg = 66658E48FB1BF202AB801C65A163A1B7CA6D52D5AAA10488DD09177F8D2A1BBDF8ADA68C6CA257006D24FCE6FD9BD0C785D07858333E0317637D9F126AC2C3A8477C13215B896B7EEEBC992ACBE3BFAD0F3B7DD86C16F53A036FDC638D7DD602F45EEB9E6A8FBDF6A4C58ED5984F3DE1F7E47BFD293F7D21C7EF939491FD3C2C59F929AADF93DA73F1E5733ECBCF36E0B0D42302DC1DBD510AB8B5263E5634142B512629BE398DB846FC56496361D2B602502ACA3A0DA21519DCAF81C50D9AC9FCB3D5DACC204A643AA2EF6F3FD3894EA099C3A5F46CCAE374C676A9AA23C6DCE7D8EE6A5CE62E7E6398611900EC1F597B957FBD8280FAF4190BC70B100C79A6D24EB8DB1DCB7FD20965B3F90E962B72974415F082A0A10A32CABF0FC93216AC98415B3C9BCB693A0B2A1740835C8441CDF317E1C624306F74390DE224E2404EC30210166F1F89C0C3778BDA439A76731BCB6FEEB4086503B1AD2AAA08EBFA711C5D56D8F46411847F7222014A3B410FC00AC34ED0A91241FBC80323E4264DC48F82F9D9B94F5F109D23C60C647AC656A19279521877A9B1A0E00408BDF73AEC3620D87277517A99A7C9FBF97D3E40C8A0D4B70C7FD9E3FEF32908AA37E2A9E7A3B40518274CE33E2942401082626047BCF2AF58530CA584640B15D17D8DAA07DE376352B95173ECBA52741720E80B4570ABB1625A6DD29316248D07F4E9C0AD04AE4B24CEEE66E7C3946EF09088EC936CBAA994D1808160BF83293C71CA18291D94B6119A881B2D9066BCA590F67DFD8DD07C33045E7682B0034E660AC08AD340A0FD1ACFA2C1CC58CF84C270532CB06AB4AEF03078675593B331F544E40ABBA2591C4EAC491C17E8F28B0DF42E56F620CCA689A32D2D5597B900A21593EB1207E786758F3CAB20D15C9FBEFE575A74110D2C01279F1D3AB2EA0C8F97CEF75D73EEC36CBDABAEA0D7602E64C67A10F73B50B9B7A1FD3CA1B512C08C596083E54315941833CEF0D8827168B99FFEEC4EA03A1D44E19EE6D7D515106843C05E3A420E6CCB1BBC950392072FE078E003227C1AB7B5B8D15251245FC1F9D23EE68194379D994A8332B227ABF373208DB0B69E7D619880C9815E461E303B57C7F589EAF7597AF6431D115EB7CEFDEACC8E08E20EFCA73556B00454AB0A1A7B1872 -MD = 84E80AE6C59AD82AE18391396AC8A5019038008E6292A8E49F0C1576 -Len = 6710 -Msg = E4CA44F3FE4752E70F308262B44EE929E5E9865543B5F3EC576DE0CAB0D28C94AF6C79575A62D004D75A8AF772EB54CD1E3E4C496D6E18A00818FBBAB6414F68E0E20D2841D9BB6563DEAE138D246E75A69FEC74B79C6E97685E38CBF2E49418E466A2890AD26EAD33DDC7B107914D8AA281113594AB5454E6DA6FD6AA96F2466B7D6986087B00DB4BCEF896B5C6658805A5EECC9B2CC82866F316F3D893EFC344668028358DB89016BB7246811F9B7C3037FAB64ADAAC51640055ACC4354CB8A3A1D206912FEA164ECF33732149C3CFE81D4722DDE2E95CFF9B54B56E7FE533D8B124F4E52909F05FC07C84DDF26B8D7DC80E154EBEFB31A2B0546104FF05E8365214FA5BA4D5D20BFD02CEE5BDEC275AAC34E6B9A15E3238C542B3AE6928194126221E79EF4278433A01F5AE5F6CC1B8DD3BA61AEBE08FC479B6CDC4618E230612630305B435BA781EDB973951FBC5C3E4BB65C0AAEC6EE179808954ADE93110046DBB12993824837C0CB522D095100611674F605730172C3DBA6A66C718B0E769F7EB5531E93BDEBABC6F0C8FDE31B3E8523FBF996100002A96247512F769A5D0525DC5FA7A1B07A3185C0657A4A4644EFE9804FB9F17145CFE123EB051CC387AB119B74E57EADB8522938578B049CE282D65085B2E0424AEFC4F62EE818B4762B39665F40B008BB5D77432BA7C5719F46A17BBBCADA052794D0788FD504C58801222ACB86B463B99FCB111D63513029CD6B9C28C50D9CFC7478578DD4684DBFE6B7376A96206701AEE10A4F72E4E31506C6B71D9B38A64F7A46CC094E2822A5220D14FA1F721847CC06D7D9F99D77B7760F5B99178D3B84CF417C4C98BA6C56AA0713D970E8591337EDFA72B3A45A290CDA01ABF9E47DA239C91F8AF6F4D65C707669F431771804330AACB7D66AB2713C747781EA757492E49F20DC1DEB7C2EDA68F0F5481FAEA21CD3849F1A124BFBB13D4E3A950FA7B49CA9AB00A42C925DC733F35DFD2403EF3DFD52D8BCB02A8CB3489369069FE91AAB5BABE391457DA7ED8683AC8B28791B18506B18F3B74197A673EF9675419E6B26EDAF7BCDE1A960F8D2919F22873C5A772EF945898A1A31F811B5BF1C28B11060C64BEE57F5F859BD4EC6D49B9FA41544FCCE47F58E10CF80D7E5903D78A3E29E38CA56396BA13270E92D91F70 -MD = C513E81064381F1BB5D70A029919923FC138C4D2B889D5E712C121B3 -Len = 6773 -Msg = B55E4E9D70D224761697647C315F2DF520D62DF01B0471E8372F58C80A5D5C128C1038A4972B64C7A33A7769062065D29093CA942F42893463A2100F3064366391CF070BE9ECCB1AAF1796A7393C47C39FFC8F8B30BDCC0FB24EC76854427DDDECE1E0CF82486A06F529F9938E4AD2D9B3042EC402284C7B8DAE4EF5733FC96E0F22B7E3957CC069DA40643A6D385ACE15A5911396DB8DF86C60ED088524508C45CE0677C8FEFB3D5A5AA43CA1E983D8C9F921AE473A7EEE43882801C20D590D36B132073B536593C3136695ADE14E15185F9A9C2BFBA75E175757A2B908BDCA6455327A3A3DB7833C0AF11533FE0D98522940121EFDECCE64A471C3DFC73295F8BB1E09CB6B8B80E6AD068C2151E4C490980B610CCD8B5940F705030CC781EC80038D3735509DF4D0FEE51B55810456C078358610ABC60E625B58C3E593660094ADB8519F428C79D3019B360DEA4941F24A32799E4052393918AAB21555D5948236A1DB9B86EB7F1C9EE9801D86F06D5646939014B5EFE5A3C0436A2ADC1DD6E6B0300A30F39DC3DCA633DAADA8B73B41F6E926CB60B6984D4AC3AAA850578DF8A742B3A44741D5035EA56E9C3E5D1383858D6BA033257F184A5C4A034769A39F09A0973725AAE8ABC753F9D99216294FD38C157BEF282A4A596912691F1C25FBC1D609297084106071747CA57E07AC033F4C45D93B16C719520E47047C2A53D674DC56FD551F7C7B32204058FFE31EF29F8DAA4C570240A84245B94DFB4AA23491F84B979B9BBC45DE0ED963440EAF7EE731308528E8E0615B6BAB86F72EE9409BBF9721C2F258AC236AF1D35516AF16F39268DEF0EA8D164E5D05B5B051CFE81A5A2ADDA3B23FCC9CC2EB780A655C93AA6A41EBE5363E32A858D19DF1E561589C0067FE66FA3ADD9CF087FB24D4979D8C8913DD6BDB236BEFD2EE09F8E056826F33DBBE050B105C6CCE1B7BC23B0E6F63B25E1399BFF98888909A16D51D258EB7ECAE768F8F2A07CB9B2C3E9A5B257482DD301BCC686C983D08E3C0CCD540E22558396DA1F13E1D31AE1F02A840523B400FDD41A7D4FD63B66C30F680F7E5B0EF4D97D02E747234222AF5E0E6B8CF3A028DDDED292D56159F459CDFC732C2FD95B46F936BF5702ADC72E03FE02E48E5B240A358985DD897F78EE78BFFDCFAE4245D7090CD17454E06BFDF768048 -MD = 67DEBE6DB81DB2B4862384C11B86B4B9F34197DEAA491CFFA3B2B094 -Len = 6836 -Msg = F463D85A381ED8417D17BF2E5AE6B65FDF96E9A581448053DDAF8A60718A2036653E2B1C4F2312AD16F278ECD0CF5AFC3620D5A338E859630DEEB396CAA02986F818F91A509FA7EC71DB0261704BEF62FDD4507D86D0CAAF0C4979532DF3A823859C75769A14D1BDDBB453CE3FBCBF37CFA0733753965D85A1312B8EC5C3C3474D34E6FCF015CF0F8F6A875772CC176B34CC7A966F47F7E0EE7AD58E1D028C65B497C1D440CC690F5F545C3EE8544FF8575A11FDA7FD42C0F42AE194A0E1684F082105C693BAFCCF5C2B094C7018E20546D3820AC8FDF6B8B5BB252EE43B1364F36ABFCA055CA95E5FAA9183AC9E85EF59536B408A163AB800519C05E063D46CD77C24175D218F531D96713125A4AF8E737BA2700BB2ED61764961880B40EC22CF29E5E3D3B651E1502BAEB9F2DD19ACD2E98065B19D2A3598F9E34AF2EEBDED3E898A07075F68D21C5CCE3AE338EA84895313B86CA361FC2A009F226FB8AB72425788FB8DA7B1828C797DA700826CCCB90C11C46EE322A2F397A01A166B1C04EC9967B802FBFFE8BADD9DC648EF271379AFC2965C4F174D7399CAF690847720E020315E266C61004A4C5A15AE2BE20559232CA779A396979E2140B3B33FBE41C463B1B39D42288D8C82073797529C44FB2B75088CB0CA42457F1601BEBD013C374DD920BD494028D19366663FFC9C3F65A89336CE7F79E963D2A82F79D048A22BA64594874BACB0CD77BD6BBBA867FCD43F0A2AB22DF3D83969879C7D2EC353B41DE5ADB0325ABE1022D90754B989715664C11E1765DDB9ECFDC5CE7498457272AAE4EB0A30652128D2BA44F3D86EDBD68854C24763061C01BB32285A95FBF9D005F4694ECC743EC29DA74B7612052007E340B1C7E594EA1A97756B89A7F192A19CD55E213C8FF3FA127A4572B64208A37DF254FA04172337B8A90F7CFF8C3FE53444130829CC96B485AB524072A1D3FF1C5F4B9B6BC9DEA1EA238A0BBCF5B340BEDA2C1DFEB3F3D121006EE2DEAC7E4596C57C2872E2649213E41BCD581CAF31EEF68A9193C0411024FA67F27F663D7F1C1D92F146AB85DDAA9196642CB5787C7810C2E04B4DDAF7E6FB2F2CF2BD38C4460A5FEF74D8B509D9087AC383A954C35002C73272B39A36203BC380238B8EF6E9911B75ADAD067BAD5682289CEBBE8C6CE2A794BE63461D6961C54B80ABE3BF388A74810110 -MD = D0F211B234797EB9658CD84963292B677B022E90C04502BCABB28705 -Len = 6899 -Msg = 7A7D6313A2EF8EE4509E6AC62229C33A49B27DBB1F52C2E4D4C5EBDFD18DA4EB112700782E57F3F1C78332C0F9DF8BA99FDA68F95BE3D47F5A78EEF86FF578C8F647B93F96F2B8CFF953668C72551C9CD1520BD601832F69436124F0C2D4A470B6084F636EE58037C474A9902086D5A36353E6E40854891657C04A4077F20856004CE3DA17A73583D858048893C1B83484C8DB0F68C12A00C94C68B57B250BCDC6623A28A1AFB48FDDAE4B353800FCDD7DC50441454E41C31824C434C7CB01C03CC9AC0A92A7348E51E5CEE17871C5153D034CFC4CC6E9D9F2BEB323EA1425482A1433A76DA25CE36B9733CC1FE29A08BBC20D62F3A60123722CFEACF2124FF9EF7A01F156749FF7C2986A66683EF5B9F1853D04039516545B128031352EE59D63CE5050298FB6FE8855B42FEE4B11372AEBB81156A35F93E7539583AB3408AFE2960ED976B63E1D14724E19EE42613BC1212FFB00AAB8958999046968DF0D473C54CCC44152602F41486400EF4A3E79817E5E298C1042AA478C1B6267462AE4BD0750867B7A4DB927508E0D5D3A0E5CEA2EAF67E7C95D0B72774B26212B2ECD5A0B4709E92386B38FC5C2A02B4044BAAFA72DC9F0EF93096388C8403054D7BA5DCC1E5371F9008CA5A93A1CE494291944C3E676D17CCA2D3D70F9A5966C4354AF3AD3968E07F497FF8280E3BD9FB724A9AA369FFAA0B51CE4423F1CE71F90552EAB4E3336FDF8469CBC8C1E4CCB7EF546012D7A6632554D4E179445730AF11935F74D65DCEC9214993A4097C6378C83EE2AEB29587504A7AAB7DB636D019A949BABD8824A37766248B4EFFE9D9BA23532CC006BF26FB49E0899A23A1521E9CA734BEA64AFC19792F2A192E8125F807898F2945F4A8C1144F4C88C66821C41F3EB92FEB5DD6DC03F251363D1F5E95D25E6ED2905B558582B1B02F9684AB25E8E5CFFAFB998B133346634980C6EB4ABC32D86B6B53F1418053DE710C8A0BA6DF319B7DC50A11E4B37939E49FB2960D1FDC03A345C020486511969797B39845007F840F7F71F757C7DCE71B76B618BE37A23E00B16B17EC47A1BF4EE17B01A557807F466B57CE2867F57B51F5D6FD0A8AB3554F9C85BBE6A066E82F5E353EC8ACCCCEB56CA470524F293C81EF4E52BAD2540D118297FD97AC0BE3328BE00D74F2A258D570DDCC12CBBA6AF4261C348DEC57C3C7566B3056EADC6CB636F2C4A00 -MD = DD196A336D16A113E4A90AA3E62CB24B1E5FA256CCE484B3C763A889 -Len = 6962 -Msg = F6D0114B20C0FAB1DA3FDF59EBD3A09C04E41724630B6EDC31884945CDD9146B707E7E6C25470500204549A60DE79AC926FA8164C7E2ED35D2B819A588D95B8F1574BCDE0A6C768EBBF735A97C7CACB27F9B54433777EC94E2C8DB73B119AD7503674CF3D81322350D51BE6B985AB09D5DE56BBAC1CC45CB30D07D5BA66709C0AEBB71C2E508AF23BB042CA97C386739B3FC6648A73715E633A3462A4824BC5D9321BEFF69EBEA995ED99B6FD2D3B65DA892F60E5C8259269C6904BF67B612FBA0673DF84F8EEF48E6E255E8CE93D8E2D7864329A271DFDA0D1E641564196076D3BE3FE1BFEB80990CFFA399D76BAF00447924B7DB60AFA331A7310ADC8C06DFF6FCC1A8D2B62C365189B44A5CD651758B42F28C656E77310896734A2B71093FB8FFFACBE8D12F107CAD309BCE25765F1285A6DA063E16C75DCDD575E0D2F15E3F539A55D9F14E4071442EAF12B7F97A4F2ADBA5EFD98A70CAE2356380A59E3ACEDB41CA2775468486F5E1E5F70669E52F231FD51F8AF4EB22ACDE0EFFD3384960A4A849230A81156C026D0E72DCDCF406158C7D18BBA67085189B77406599B58CE6079F27ECFA92B87F5217557CFB60B6BD1FA4FA91B4241EC5DBC164AD414A08A9FF1995D893B78A7EE6968D50694F4C29569984FB73EA907758EFD38E35F37FC7AC1225CD247E5C59C0992702A2207B64BF66A7A01148F0DC3686CBB2A16F353B5AC2643A3F1FDB4E6999B26246732B890831790F52536598D8E1EE28DFC84814CD2139D00DC3860599CF23DFEC709C2E9E0DC24F697F12687674D1A0F25E28C632DFE917D66F7B1E51C80168238C40F24DD4BDB50DF4D1191B924EAAA841D2EDC45A34822C430CE668B91B5D092680E0EFC40A4DFC138BE123907FB14D01C648D97B3809D1427BD2BA32AF7672655B460CC78641EDC8BA40FE8B3F47DBA9EEE46B608B8CDE553313BA8CD0A1F9E10DFAED56DD6601D30C4BF66E2914A478C7882DDA169446372FE7525166C12E4151626DD04FC9E310D043AFF6B6A952C08C978EC9CB11CE39DA74A902EA2CEF8BBFAFA0D7B8C6B426925015217FA66EE6D9371C0DAA8C325DE6B1B29E2B055567232028449BE79ED3EBB174858A6BA0864E8726F876ACE34C9461174CA04A34B612019EDB27F1CCA17AF84D0162939AC2B0174887DF6B7E2261E4DB04F31E973B5F3DAEA87E6C20759A9F37612B54BFD4FA1A2757519700 -MD = 7695E8C6F61489460776D4B7C3E45E90F16A2C1EC118E2357190C138 -Len = 7025 -Msg = 6209AEA4A5E46514D858CDBAAD6EEC5F657E745430B13123661EA806B69D5C7A4CB8FFF753218FA993D0CD4D2B1E4932DCACEA7CEEBFB9295F89C0D66F9AA94847BA2C560F09399A18E68645B7A560B9B6BB9190C3F2ADF182F8426736C7CA27C45B8EAE8F651D7B6FC98EBED8CF712A3BE248F4034D3B9620E7A62FB461CA30A2D262A0CDEEC7118EE809DDD4EDBA76859DFF70E69B656A1183340BCEF29F270A545765DB03FF61D6A27CBA923A361D4C95D07C55C5045D3A20F55EF38398A836BD76BD5529F780FA2120DAA503B436AC4232A852EA00F2EEC750CA125598104D47A1E470683C2C210B584BE03099540556A343EA3BED38F223947F9CBA29C69FEFE67B27D32A043E608AA3444377F8AA00B23BC206A58FAA1357E04B7C0CA9A6F02DDE3572BA20C6B0382DB3C8AF16712AA3034D1052FE61FAAEEF907C93D1117704426D39EDD8676F2EBB507AFAC886DDDCF299C4CB664A95B751DB20F266D24FDD131CDD12976148CDB6E7BF4500103FAE5CB4D4F298833BA2D368BE7D3A0B8B479B2DFC21787EC7F0C2B8ABA368252BC5850A77AB86EA9DF7D87783D220DF09D0E09B6FD3B986CCD8D251B6EFCB9A439B951BF505A5D1F314F79F27446904874FA5C2774E4485AED552A85A55C4301894B510073EF2BFE591326684F12D89692A44203EE4B21C03A9D0C0D919B741467F146D01FF9B8900AF7CF476A69B7B381DA16DB09A895BA7F690D4B663EE4BB2CE46D52A7C8007A2FFD7B965DC3758DC0C0391E3A133D73E2FEF3E9E71EDDF8430C295C664C6596187595EB870FDA82AF476CFA189857E8B2D3F8E013BD16AAE57F7F9169EDA24ED3FD51D5AE7ABF129D9D3E2CDBA70205857E8B1A936C9B9831E597B5A7B5E2E2ACF03A2DB7335143AC57A1A94E178889670180EFBD4F5431A718D04CC10A4CD79D1E2203C06378D5DBBDA54C9C05818F0290CF21EC005FA151015CDFD46917823203C3608CF680DCE1D25DA96DEAA1BAED760134C7AACFE5B34A91A792683F401A2303077FC886C3AB13BD0ED1C55240DFD1AB230FF8DE9FE23D10B26D87D818C4073195BEAD5DC0870EFA2EC647B4946340D2637FA2BB4D7AA206187CA099A24C3B5D2032CDDFA3EC1361DB8CB7E7A2568A3907EAC22D4F1A0BF9496C46AA31BD5EFF04D01C595C4E3B41D9F10A2A103CA6169488FBF74814E6AFFC2315EFB6D0500851CCEC111780C32EBFB96BB41FB423742BB00 -MD = C522298E860DA636E43144F7A0F2522A0CF085C69AEE00491E4E0844 -Len = 7088 -Msg = D9257004993C7AE50D20F534B42B4EC39BF358393B9FB5C8E37F87AC7361354554BE596F40E67B2ED499887E26DC435C4331CDE3BF1A118F60FD821477FFA3B92F6469568CD2CDA6FC0A2B13906AE459CF5D5417DE2CE104D0B6499D3683BEB40715582CE70DED5C5F8461EDEAA38BFA31979661A2DC96D926307128F77700F2C7D38B8A9D6C6F70A3973005350F938B9B4A64E228CC3B3F9C4FD446FC650AA6377152D7F46903D8EC8E9340710E28475CF21E641737E7D7DA3CDF18D01C8F37131E727C7274B2DB759C5586FB84EC36A5CE2D820E553DE6426B8B96111295C19DBA8D17A2B7047FCDF662A59C2AF27A9ABEE37A7F8AFC06944346E343E779EBD895119D7460E7DA998962FB1100E950A8D7FE214360AD263B8D070F2B7DC91C9D77C6692DA0F472A0A4646A1EDB069CCD9CE4CA6FC24713D650153B9A253DB5136A3710198E60934DD2053315D313E27DD2C6FFD2ECF028625F0E937AFD8C2FFB1F646E51A768204D83A649798A51B8E87FCDDA7BDDF58ED943BB7E29C7D7C5DFF024545F6A689AA0E727FECD80B561011A731ACDD9B3F283123098BA66B6B9FCE6123B35B6F3A20EF1055BE9E257CDE97E5AF41EB796438727A62AA665CC9B771C4A2052EFAC61BC91BCDF573F7263107D44DFEB125E66D1F3DDED3BD63845AF3BF4185A9A24A7F4B777C32496A6107B7AC940AF24BE983F6A758E5064F8717EABBB86E6AADA7DA75F72ABED59A42DE82B1AA2642F5EF1B2E7304F642EB2AAFBF00C1183D9B5FB83893EDD48E9034DC7A7AB66F3F392F9666C00ECC9743AC4F777EDCF47B6818A34B7392B4AB8E38891FAB4018DFB99AF06369115D60C4FA073240D9C2605E020A42DB2E1E0AE4ADE3A04B825927A05D4FE3F50C1C7ADD7A496DA7E95825C064315196C2007524D1E1EF2C51303DD1203AB66D9FE89DE553CB4B95A6C5D629B89B7116463EE10AB3CF2C2615F95741CA226F9E9A20E99303888F725C77476533B4C393763170F18F292C89A22DF68EABDB81AEF11CC2AC329C174BDAE5D3CC0BDCEA6EB225E00C15021432264BA7C5EB49A49231D1F7A13AFC238BD4EFC04DA3C15AE0BB7D693A0150E6A5AD9B1E11A490B3CE90C027442501684C528FE260881162D9E5EF84D6E4F73F222E779E58B71D5176D9A27F65E49D83EFBB2D7810E5B06619D8CEF7E7B51CDFB6E8138E4CF5674242F947EAC13FAD08D68A8A11AAC9754A5316C93738BA7F3C3BD2E827A -MD = B9CBBF5F954CFE7A5617A17DAD9C439FBF2A071EFB4F3C233C0B3DF0 -Len = 7151 -Msg = 8F7E0705219E6A4B9FC32E64467C8C04B804CB3EF04F40C32B00451CB3A9D94A658F47183514F4207905288E78E02D28896718A0776046CA04893517547E7BA9E75FF33FB52ED38B07B4E5C53FFCB64C001075ED46CE91D4A5A9BACF3781FFF686D157E230805A25788B5BDE518E379F1B5C90C7D6CD357AAA1421F45EA33B0B11653903222E48B029F4266DE460E43B733AABF5FC00CA9C12974FC95DD4DC1D13C278D80A46BC3D0EFA151BFE88E21DF5AF7159FB57285AF1C4DB063E8BC6BD062BA2D051FC25112929776E952468921C682BB6749B2EC7395A90386B541A78AFD88F2DAFB2B321F6AC20A53FF9F505D22587B45918B01AE302AB0A51658BACF310FA3CFA8199138AC7CDF811DFC5087E53DE233BEADF51E4DCBD5AF0DF98FC0C4E185758649DC77E42B5177BD4AF033A9FAD6AC424FB6B0B9BDD3069C57DE82438A3767F01405C99EE0FCB0DC1D12607ECF7A936B398A84E42A512004A3EC50106AE1E93198F79066F7875574D1021F599DDE9C1A3F8F5F67B8A2DFDB2AF39819E573FD01C7287DE9B3281B1B9AFC1C66F80D8C719C6471EE95D38650CB6F7E80643D49E107E30133F2A76B3B0C35263501E33910AF3BF69DB0D7CB5BAB31A30B5D9F043CA2233018E6555D0D8704021C35F6545297E5213660200C62F6CE9B87109EC579A2F3607E68BC849D72BC93365E7719F934D87CA153E3EC9B7247027AD00E16A5966627BBC0104F7DC158E58DADDC54A364C8DED0FFA65EDC426F0A028B914C668CAB89A5798E93BA8BC9D41EFB5CB747E0C4F4C6DA1D1D3F2210B9B2CCD102FA114BEF68D8388C2D647B6DEDE168E396D7A369D332E3791C645010CFD357C6BBF1132C9D20148DB43FDFAE1BFF716B4BD7059B4145CE43AF2AAAC7C8BA5C23684C7FB52032F6B60214D102448E1B3420F92BAF01A32C753CAC6DB23CAF6C25398349A09B9C9EFDDE371678E3898B3A1B4BAD9C50D300D0087AD692D5D40801363AB5EB1CD361A898C1CDE2DA8216F55D62855D6AAFFD90539C39CCF1870CA57B0A9439F20EBE323E353F2DE74A607E8AD1B9A7225597190C0B37AE73D483499878CEAD670129D132D56B1F06DE4D01200ED269185C720687AF0CC5FDF1EE1392FB099F63F3EC54A0A168534C65247475BA5CA23C0BAC15925288D3A611C028A0927B70E656A9679C971798FD53B3A926A0898A2E349F6BB6ED3C39D2BDB3D542F79331D0258D61A2B77677F71B60EDABE097B7D54E83346AC -MD = 99D1DBFFB2938C0284C5AAAFF7B3C87F7D96797328E962DC9058C4DD -Len = 7214 -Msg = 8479D5F1A451AB0737F3B98011C744DF55E94704E5A85F7063F65DA84E10309B14E7AD570406602599BCD3EA1302DCFB3D81C70E7204CE67F17206226676724BD22326CA0E6391B7BDB196149CBAFAEBCB1B81F0944D742224D872CE6CACC0E5E2019B15BB7D367526B79A991122B6B99C5A1217B8F5D0BD6958D520E2BCEE07BA043F0FFEBF1AC15F9511037B74E2C3D1A0CB747BB1E3937F904DC1821707B4D1801C70A9195424D345AA45A3C88647BD93D72AA92F55D01AEF2F98EC2E828DA0A8C2F4EA2BD6209B46B337A8AFD2C7457813ABA5F4CDE045F40BAA27628481EAE3BE624FB6E3C2F9D0DE83DED91007AD6A43CF317F40A733EBC2CD29E58317845C077CBD52A4B87C9E50F7DA191CD2918038A4D8D7907FD7C54910E2D305D0E0E494F0508DC25D0CB06BCE4051E6AEBB60322D607AFB5F25A9763FCE04A41038DCC3DD1F4458206E4AAFFA2B2E1B67C02E8D46825809F2CF5FC4EDADA724F3AD45FBB7F45849F12A1D42A91DD606D72CCFF76C0A5FC13192E3C6D8514192D3B891881233EED33F623998294EB4537E9BE6BB0FBB9A2D837B6B2074FDCDCD22BB7A0F1FC1EF2F6479B3E7AFDC0D8AFC39F7AE830BD7446FF3541BD22FDBE5A3F3D6D5DBE1613BF08A366FE87E4A9E23A1DED497ECD1B95566DD88E6EF0BD8EBCC23BC26BEB5CC9D0AAF8C8191AF4F8B99F2CC1D57315EBB2F7D5F81CFA75C4353F96FDBE539EE48E8053A8E496A39CCC4F475DC191AFE51A40987661DB17097673D322D58F1C2BB27B8990B6035CC44668BBBECE0EC43C1236333E1CF84CE996201FC28F3E83A2AE5A48A9CE7CA6C3B1E4E2A77887789995D09D419C658468D1315AB9E6D4316D5D68AD37BAD294C28ED950717C2D6A808E400AD4F5A5218F55B735BA08C24895ED62413707A57788D8986E73694B7A524BC09B5D72005B6D462B65376AAF6636ED05F8D52DE378C0710FB91DEB061773C70FB99EC34DA836A240C9B2517A183BAACE693461CBF29DAF1F2E894041578B45706A4BFD00EA9B073F6F97953796848A6D569020CE6E98E8B57CF300F36473688F16389BAE688A075B3360B6C0EBD50EEC38C6E10D823B4D19A64F4527DF41FEDB20A8B006941869F72464D81E0F2CE847CE6F53D0CDEBB7212C0EAF6A3BC125635DFB0355C500BD2B9D8A9645E0191B7B79F5C19999BB6F63C5545EC6653A7407C59BD834A54415B1A821017E8AAD2D089452736C06D795F84576F65EE65FF70B1457307D25CD8C9F05B2F0D70 -MD = 7FB8591292C134E25ACAF211C8E707C78B270575592440B99B06E06D -Len = 7277 -Msg = 26C418BF7051833722842B4C2D61501F2032D57200C34FF65906441A3B1E0E8707EDE3072B460959863D83317EC35C2F1DC78426B56D39E896F599D99818119DE07FF554DDA0E2D48ECF49FB07F107605C0179F7AE10BCC1B09749076B35124FEFFC229B99369CEFCD7B4FA970712EB8DC00D8CF1505959515EBF47D457089BC625909D501541A284BB38902890EE4C3223965B322D0D13B7D0CF5F0DD2CB00BBBA2F08EBF686E47DD354A413F10DEA4C3A95ADB5C87C957E68AA8361EC474896100DF796861678B735CA13A67DD27EBB29522A52EBEA2AC41763F8059E2D9B2D781F4501AA31D55C25AF6106110CE7FA82CA9A4EB31300879531C6980D256240BE41DD85B62A8B794A1C4E6450488AE3B026B03E2D5D7E31ECEE46261FAD0EBBE17FAB50FC1D9714AF5C850D2D397021A4B10B361D5FA166D518F78AA07C4050C98E9353518F58EB932ECA7F6D32770A20150C3B4B5F903E53E6D0BB6C01896EBBA8814347FDFAFA5206C08D6AAFC47DD08ECFC3A7E818C95A8097E00A625EE57025BE90A193F60FE2491589FD740DE39EA26E88256F037890E52BA8747F09EFC9DB76E082D5B9006DF0643143D5FD86B0DFF02C6632A0E84523D37AA39A5C3BD60F468B88BD3C92610B5E3813E065D932B2C3D59E76031A43FBD7087A2B9FAC28C8CD196A396F6A3736143B68035B34AC5468EE73DD0DAA8EF366EF3B54E9BBFF9560E7ED06DC3F8D862FCFE7F41BE666373355164482D165A35845C6ED54F895B947028BE1D2F3EE44B346E2F17002B6E030B84C08F2AC14B7B0ED3EB8F2C0044450E6E6D29840068C11CB8A00C6705D7B39EE96EF0C1FA3788069E941BCC1E8D4834DC2F1D0D85F698412370D76F35712DD000538E9461C47183A402AF7EEFBF80B1113C939D2420C8BE276AAC8D8DDDDE7FE7108A23E9DCAA14CB112424693491004343F9478789F1EC1F7602C7CCA35261C7525FAA3107C3E1B2501CAC135CA2E64322089D51F7A8F7813083270152110EA51374B56269E241A2BD3920FC6618D2C209D7A0AE77ADD9D74E7D2A2D0CA74CFA6D4669522BA3DE367D0037FD8C54E6A124302A778B6967C3073F84F183BA01A68B12ED2BEECCB77B7463D98AD398B23CBCF95B757F187DC7CE6A959BC0AE321E96CFA755E51F5F34A4E2371AD9FB14724E10A5BABA3ABEA670E335896DE2C1CC4CCDC6FACF6066326AF1E607BFB535172567A2762F7D35C8871B652DF30D5901CF3018E953B45FAADC4A2F731EE6C6904E1AF014B7E40A3D30 -MD = 0C871684F5BF8F2F67669FF1F41EDB52C8AFE38B69C3ADF1610CF554 -Len = 7340 -Msg = 95289EB0F620864E683ECFC94C8522A386341D700372E8FFADC5A1B0563B58E4D288620C85FB4BEC9C844BF5E34B91EBBE21C6F5CDE284BD9CCF71E02A651CE5708C40CD9AA6B1E50A0475B588D1D73FD160D413C337A3CC2D5FF2EA10050DB7E61EBA60B030E3603FB2CFFAF3A4C31E81A6922CDA5815D4F257EEE7D5A2BFF8901FADA50149B525E50A84D06CA8FABC25B9221DF28CDFA7DDEE853B30FE113E64FA2179CD97832FDC3C99CB37F903980F33514D7D3BBA15A320A17FFB59DB9222CF2EF3CB31DF8435A46C93896E0E7E09691633F0D38057499750D24FAFF50E0762DC8F4B7858BE42B039B7B06CDC78FBFB1090EDA4B4E14D2D0D817E04646F0DDC063CD34EAEB113A5AD47F6656063DB87363E4326FA1128F85B018E1AF7C6516C2DED84B4D82700F7BE9E943A8EF72BFCC68E64AEB90ED21CBEEE27229CC3236EF3F08193A9A24E7B2D090F0A6AB90EF3DFF86170A630D71FD650A9EAF77B5E88D8454A59ADA5648E416D945EA402E081A1555A7C27B9D59176A042172797AE1D24F6F43365BA92466914EE87C9364692E9EF06EBD3BD31403DFCB66CCFFED70EBF7DF3EDEC4536D0EAFE6C594115F00B90DA6F94CBE0C2E7EFC7AE8E53A49634496851AC459E1205DA74158092B0631EC2D4F87E68DE1B7FBC43CF7A4592D68901805A10ACC0D6D851A9DA28E28C03B154C612CF05DB4E72F01F6F35F9611309805AB028E395F0531A45F82EAA73E0AE3DDEAE3DD4D0F8706842BD0BCDC6A3DF6E2F7940CDDECD2DE4124DD03C916D7F8CC39D49C9F62666323F27B4C425AE0514688B5D7C62299DFEA6AA7A4E725F639905EE204C7A442C056AE7F407F62AC137D1630A50EFC126AC7499B16FFB52431C0CFF613D2AA7889CE3A5DEC30996162D377172F1DC6B5C6A5CFDF131BE77C340444358B130BABD4BECACFBCF5CCE801B37DC3A094DF0CF5E3A6929195447B6089EED3F07DFBC3B8A9664A4FB000E4B7FCEBC74B87B98D778C06B0B92454AC54F5F3E83DCE8CA496CFCC6793D0C5DAA4A05CA0818B17ED380A9A7CF239F84172251894AD17985AFD5DAD307E763313DF6422DE5EFA44D8CFE5D758B89DC2751BBEA53060AF3BDA5B61744994A3F52CC5009970DB498E7B7F5AD29C84BB217B9ACCC7F261548E7468D28EB5FF0187C77E9D0AFC89658807DEFDDE85A2584C73FFB63F49A82638F825076569ED7097F6F4B774B195F12ACBB30D0080A443E4C1C1967E346872D102297DA418CB5DA71C78378B611543BBDEFC6FDC1203352083497F6AE00 -MD = D048CD36975BA883A57E0B075E87DC1D54FB8050479B57D99E713F98 -Len = 7403 -Msg = 051963E78854346245265A5CD55B90BCBA46B993DB352850208BF184C7D59455EBBE89D5C894E5F965CF1C76DAC864043A46F1661C1249309D1E989AB9CD479C6842E4F27E41ABE19AA19A552C1D8A4FDBFDBC027A133EA680F29C128516144842664D1B86165B10855FE82C526424FE59C854CF5E091B28E2AFC02FF231086BD95B7A982CDA5F642326A5A3300B8BAA252BC5247B25EA2F3D8971E5FCE80F1C2430BE37552AC45A63E5CA382F9C86D3270E41A532466877345D817E848AFD70DBC2C56A3121FE03ABDE599533734049B9AEDA37A6952535FD72FFFBAF0CE69CAB771CD1891AC28BEA903200A2BF2AA1D4468A9CDE2A3C0F012F7D5B6DA412427D12762D5DB936455E63797D362991270221C5CA4E8B726BB5AC80ABB694E84150AF1AC5860C867E2C7409326EAFA12301B7314548B604BA3B4A21C9857C8126D24C2E1BD1F54B5901D0D0FA2C8A6514AA7478F62C8B6AFFF5EDA3BE6D55BC4C8A8325932568564CE5A5A4A8131CA2CB5190EC351B7E0EC7575BBE92B7738E39E9595A3F10B176E7DC9AE87C2E333DA75A7B1C3148738D1E404C680E0AB145510B73931DD4BFE2EB36E83930411A43BB9991045F0AFDDAE5D7EB9C1468616F0B1A075E4169B4C9A78FE7310692BC0677D95F1A4E3CB584E31BCE4FCC1D95FA4A1275FB5C7DC00BAC3B06EFEF1F8440806B56C98D32A3DC99C9CDDA12DF5ED4922E66B572A8A2AA06CD28C9879A8B186393AAE5F15654A1A730997A282E18F899ECD66691E1DFFEDBA78EF1CF1AD1360C8C0185A11BEEC682C0A81D1103BC99FEBC16A533E8EA241058ED280BD550140A7E938F98633042CBEA47F996C34A922659ABBD2F80407571DBF434473F3D0EBA58B23999F7F8E53DD7F47CE113374A16395C1F7D8D284D63B87D7FB6B99636D2756ECB25BE3F42C187EED49E4CF21B325CB4638BC0744060266D09D59F0271123B86C2A6301891E76AD92803F449AF2174B020A7BD25C66F9421ED480FB5B2E6C3FB3400385CC7C40CED2BF8B974028602F9E9D17206C7DADBD1DE350F5B88934463D6542F502F6C0A40FC217427B5DFA285C02FA47E2C092CB979963DB032891A59D7E69799228126EFF0E2976170C11F1AAD9ACF26A59462309A428477AB8C20C3A24A5ED0AEFA94122B8BA4E18B2CE478AE6B370C9F5F4183EE9A488769B5B7B3ADDFC7B2C046A27585797EE291A64AFA06B6FE83BCCB31FE6EEBD46811AD66FCCE24915D763283A04070554949BC957EE410435337B456C2901E54ED4C32C5768797A196CE3FB034A35F0180 -MD = E6063495F69DCE72543F5F4074215D57737740BDCE8E2547E8BF2841 -Len = 7466 -Msg = DFE357A826050AADB681922C333857B1B995C8C1BA285F3CD1F0A6A6BF7358F6503ABAFE3592D1616630F153FA0EB4A3B97449716D87B5E050A29E43FB02C8D4C4279BE087F1D7FD5464D9589C89846A842625EDA94E57AF1BED5424ABC0B5CB634D1E10C8250BA0C9AC87579B449A147FCB891799524567DABE35A56F48C4F5662515149791FCA8B16075218991A19AFA16C3B1C08B45C7EF8351970E7DE8B3C02694D2A60E37B5B26F0A1386F3AB9B36E16AE0267BCF230558683D997C90C6DA553D7766254E78CF5FEB97BB7FD966358BE1C7A454BE1E0D0569110C9D3F2DD53FB4C359B977765D9305C377B93921DA13160338D791D12F8C63F5B50D13F81CEA4DB9C04184DFE67079CAA291C8DC890C33C2A165E41F42844D3731C0C61C911AB5EF5DF0CD74D324050DAF63440EE60A02985B514EC9FDCC3255B4E19DC3EC5D567E31B524C903AD768AC234DE16FA58122F84FB83461BB2E8BBA5E3E1ECF0292EFFEAF4FCB3DD548DA19E6CA9D4D45C2B029632994FADA19FAA4BAB02B8138F3B9C5379C1933B2B8692A0608EC24C4E54A6057AB4CCFCC4842C135557D2FD0C12EC3662699EFB35A90958D60D2DE1E82CF846CCE847F475B41E5D8A4D2961BEED3B0B024129229777C44DACB2B26D02DB8D816D07BDA64ADCCFDD0096D4ED0CEFB69B270E06C01A0CCC6EBF441AC7B0DE897B5230206C3F922E9C451366A285DC7398497BCAB2096E6B38A00F313FBA116BD78DE010C3AD5380624821332F76855418A0ED535AD7787A3B0ADD124EF2997501BA07DB25ED1DCCF519E34D9ED79EC443C1CE77363B69B141A731882C2AB220C1B741EA1D4727204A0743FDFD85BC70B2FB75B2442B5BB0EF7EC5E859E56B9A6312061C28535AF7E74AE0620676B0A30ED835283E91F8F061DEE7E01BE9FF968767D95A18CB94833DBDC6FCBAED5168B503F5C3EAEB8F69C7D3470CDBA44CD29D78608DDD4829FC3389D6E6C10559FF8EB214D63D3AC0BB2E5185879DF20EAEF05A5919DDD9ADA191984070BE0CF63659AAB60EA4FC684AA0CA0B7904A26207647CAF7D9E7F7EC1CA35E5130BD20D471132FEB2FA54D506D6489ECC3A027C55631CFC1624488D33C3D94AE6A03FC7AA9290B11A2EACD15652F0D11C6384B3478D773223EF5E55D7E4F227FBDABE50055890F3EC763385A42A49397B099C4AB2116285A482782BAB5D64D7C02BBD4565D69244E6B7B7F7EC13B99DCF3B6F703603B89FB48C2DAADFD194B6C800A38A629AA2F0C2673C23D02E7133B7DD28293D9565FF343F8E55A6E79B741D70F4E624E9C0 -MD = ED6BFE922415E19A9F73ACD709132870232E69778B79F64D1542DE1A -Len = 7529 -Msg = 53A0503F5BF74B87199ACDF708559E24E3798023808174FB5C2CA2A273890DAD651EB5F4E0B0732F242EBD70505BD7AD761801824843FD4D4714A483B911F0B39BAF58FE8D835CA2CC2080573954303D7F2BE1ABBB1A512B6B0833519491F2EFD5C7B60D0734BA28CFF9BF52A7AF788907D41A29C10BD055B0B00CBD6E85B3B1C44E61ADE2F8A9F82EA435707A24F65EE63D0324F373858386A3CB552497624C6ED76432903E6BAF3BED146112959FC517164A114C10E7CEE6152E1478D8E204990124F6BC990FE8E653D8DBFF506136AACCA86A4355D49918FE5F72EFFF0F912A8F5538CBA0BBB55FC2BEDC0E453C69DB46E5DD697B2DA3B24FEAB5B9AA197CEE699FBFD2D652E46E07941EED8505800D831542D2E4ECCACC3165F126C09996B34B608D2336ED30CE764D1F43D17E5B7B4CC04DFE4702AE2B1ADC2CF218E941DD78A036EE0E3B208D20B783C3CA56B5BF7F3D5F440F2A3734634D36F9932622787C4E2D2FAD6124C23A1E51D806CA26671BCA90EFB4E888BE53A726DFC6C90DD3F7095205A7718DBAB534803A9A62FCEFD4527D6E8AC90203F8B23CAC8B21973CE5F5F66F691D64E875216D8012A0C607B54A9E8901CB5458E046F333096B4344BC62CC5DDD7704E7DFD9635A5375FD6DD081E786C71186D46E0D3BDE93A18A1DEF8ED2B992827BD4F532A419D520C89C7F5613A6A418E99C529DE1761E8DDDAC7285157E744507E1CC40EF75CA14D6B5AFAA7EDF37203BD41334D991FBDF0D490BEF436C0C47C5BB6D66668C3AAFA74D4954A53935CCE0F6E429CADB58A3398FCFC7B54392EE4EBEAA3CC00457B284AD7A75AA3EAD3B01E6C3C666ED358AC18E9BDFBDA98F618CB53C5C5BA831020F875DADD4CB08C0254EEF44755C4ED131B54309C82782DF484B681DAAC341E57C68140ECB5D6A66AD87BF23695F2935914D308B7E3D39E6A5EC2737E987AE4AC358D6EECEFAFB77BFB181DED5C0323CDCAA315173CE8B9D58C0FB9E35AB9EA9AE3ECD6019B2C68220930E43439CF1BB23CFF59B67F1E6D80B0011DD010A776D6DB7B91989F7154695ADCAC5E521793E6CD530A89C68D6E8081AE1B257076A52ADC59A54C1E51BE547C25370F277CCCFC5965BF4D16BC41BC441991A995B37C4D6764F1EBBBB6EB787CD41223F642FF9456EBBB1ADD55E4B9452E49EF602555681B248FC1234A6534CF4D41A737EE7C8FE9454F63E6BDF37A06DB95983F7DA579A986B5A19BA6CAE285F1C26A1040D46D9F35209A7B95E3CAF35C0435EC38C613861558CBF5F7DAEFCBBFABF8DDAA76232FE41C962635243365DA7EC368E00 -MD = 0D567558DEC74CA38244B1DBF66083340C6DA0B342CC9DD94AF5938B -Len = 7592 -Msg = 09CF132AB943654184A3FC8D0368B421FDAC4EF1081A29F3691A527FBDBD74C6372233B38DC432BA610F9C54FA68699F9EC2A6BFB0B2CF7AA6D10AE2207A7554163AA14FB6A9CFA023CE63546B7B02AF03370A899EA73B27BDB5C380613C0EA670C659803D5F6F75C0CE62B311DC157DE843A93905E7A28A2557684AE3DB4FD009412A107098F881DC06622ED9E3DF2C8FE69FE50BFAE158B87CA761FE1E221856610BCA301EE68958C25BF58D3BE203AF928A919ACE53C3D99F55AB00DFC8A1A28AB83E78617F194EFC46DAA77573D02FFCAA1F9D96FD8DA8DEAD3D4E75EE5E65FC360B2A567CD34D52BC9AAB8B71160312E8E21AA506105D6644E6863E7D5E75ED47C1760743D113A4526553B303341FCEE5FDD005D35929F2AFA760BB8314D0C0EAC960FDA3263A1E6688098251618C90332005C757AF958714571B77BF2A69030D99F71D1A5259658BE565FBD098070122C43EDFD400999C90A98ACE95315FAEE4F1C0441C9315D527C7FF1A8171415D2A076E2C513D40B03CFE5513C0E74EA3A03AD4958C00A3E1916D34273E301D517B0A5E770393880D9AFB4D0EB44D3140FF7D827C48F67C6D92B865D8FE7C7E45AA50DFD8525F530DE1188F3AF98B3DC625D335E191FBAD5EE9DF09C97B43F203BFED798F7D171BF00C82EA0ED17D5890C3D6B9EF6FDC04C5FFB645E3050406FE2FB6BDBE2FFE083E751DC19F2F06445397019B61CF1F505875520F09C6B719E642B81B2FBFBDCC072B7981A666D51E7065E21244679DFE056BC9D42B8851F9D2905FD838707B279A8106EB894B60A72E4851C344119CEEB5BBE110B1C5B21C9A5F7545283002D4B1C115308B1CB20F6D9CB869ED0459C569662AA5729A7D7178DE7D69E4885CA77C011E785ECF0E2ECBB8F5245579DBEF7A5EB30307E0B40B817BD1112D28EEFD548374BC867E0C34D2236952B9F859903E87E977190FF94F5D815699154F96E5449DDC1A14E4196C83E4FB02F5F58C30EEED691DE47C81F4883BD84F6ED711FED0C198BFA2B8296182D7225E8989ACF55D3612A93E77D24F7B6EEF813FD514CE2183571602976391F5AC4E86DA59A64233230FB67FF0BB9EC40667F54CCB235D04B3FE1D9A47E163CB19C316046FC1353A6642219E9CECF6E3151C0F4FAE1177B67F19B4964DF96BB6AF37012B8EA9E5EE24C57A010C872B15C8A65D0266589F6DA20E38D9BE2E2C215C69F558084E48EEB61F4EAAE83C57F3F1CD08D05783FB9F5AB1CDA5E4B86291FFFB14FE9B497EC73292BBD295C5657D71CC74D38A2F3DB73BA972986B7169F76BA376376F4747ED65F2F1A5E67889AF38A380 -MD = 657651AA8D8715DB57FF7F18EA1F2A8CCDBC2D5BBEE8A510EB3D3A27 -Len = 7655 -Msg = 1EC28FB30DA6341F2D29607A653972A7C6F7BE5CCD76373DABE8B84B4F3AAC34A22A97D1E6149581F76A780C44B3FE3A741961AF4A16A1BAD3F49D8BEE2CD76EED192435FAF7AEB5DA4E5DBB7E8E1481E72E1630D8EBA8C23A06C386CF8A428B864EC514C5C4F3037D3F4785931E34FE7350DB77AEFEEF5D7A957399B7846115E094C238C744AD10013A86FCE061247F99071451E68A5EB306663C4FD2B669C094ECF2CBA0594956BD5D8B5E2FD7A6773ED23AF3EB64130BD9D6B7E41290D5606C96138167CBE52A88A17BFD1B8FC75281651BE870719AECFC7B0C51BA31C7B35769F219F7BE1EB468F8719BD67408F687E43EDA98DAE683F279E9319164B8AF8D0E2D6014B145119D83B9461E61A7B1D9B7496CA141633B364AB3937561DB25BA71CFF74318BB7854B4FA16807013FB6DBEEFA5DA43A84DF5A261A6FFD3A2A0997D52C4E945A3D591F20054389818AA66F8C0369DD54A3E9316F7277866AF62925BEFE2FC50C110B567548500979FD095E67B8918BD55E0A653D1169EB734E4293E36D9FF10C2CC31C1420144E269CE7D5EBA51DAF7C9E6A4997665EB49BC6E822C4BB90BBC26D54325DE3E8412136AFBC31DC2ED0C52F3048C27984BFB0BBFC8AD435EECB9B3DCFFE5EFD3494760A9AE23DE4EE96EAC49C7953DC47A8D21DDE6297280A86726FE3807FA65F66916A015088BAB56D9B3BB689779E3742B2B11B8372B0007B5EA60128AC9DF7A058DFDA7D4613312F625912FD63D677CCC9B95C266796C4DAE039EABF3343CA82E15B7C86D34FCA7920A528A96A72B0E59CCDD3166A8857507527F2FADE5986F2A28E1FA249971BA664E026EE92A1B371D6F78C4CD7EC587174DB43F6688ECB267ADE54BB0F8E3E3F762D4A9786513D65C2D6A6F3D2FFA6E6212233813AE2C48D27CA470B154112D9C0B47514BB3628CAFA9C89ECE7BB45DD880421D0020B4CB0BBB392F760361A9291672FE3DF06A7BD5026F6BBE1649D512BF3EC3E7B4C5FFE55EF9F0E7ACBD529BE5871446B13F832270634DFE10D94E0D7812369C8621D2A01AAAD244EEA847BF3B3D9D90ED51B089092C86201F859CFD7C13292A5937E2CC8EE9AB6D652FA265E9EF344849204400988C55D37FA413207721B4317EAE603675DFA5221C7DC222F8CB370D51AE1F54E34A57B532AB8DEABE2FDC2BD0C28A4C3988A4C2FBCC578EC5CC28C91F91532FA79FB902D0BE4E39815EDE78EB02992D21915099A8AADBAB7B6D71014AB164B1AD625CF9C2E50FB0E943D795ACA936AEC549A5C8E6CAE55111FA244C4555A019C963F7736DEBFB32B28EBC5AC6B215FBED5A72E1D18398D131AA4841341520 -MD = B9E51CCB04272EF59BD4512CD94466BEA355426610A2ADA6E251B40E -Len = 7718 -Msg = 1C4328EB2927FC6573FAAC172A5E68EFB89664A3F968D34139FF7D0D66BBCE92BCE4F3B175A22E80A8EA3E747D1E11749E5ED07DF1CCF4665DB85DEE514D8BD7267C82EB08786BFEAF1380F6CBCB08519FE69EB7A5C860A6EFBC88E65E60086108EE5CA11DD6FA75D3FE26FCC195E6967B8E4CD6FD4F82D12EF67E8BEB65001A29CF0A306D8ED48F9F6564DCCB2DAF16E36E8F63DA89F612CCB37DA12EA14EA28113551C2CB46D911FE7EC439BC3DD646B6D5A80DAD9C09B1C847EF728DE7510636F7525CEFBC6D2AFE60904803CC9A39D43F7D6013A6AB5580946AB71B3B08E65FE7C23E60902C7CF428F560BD8F271A7E09788CF4B6CDCF0E024AE226947DE21DBA65D0A6629DFAF30E79C2CEA8E930FF86FF396512FE5557D8C0BD2930757356CE766EDDC3DDB9AA564388E9B4D5F36BA50F6194AA0708BFDE011D1C7FE18B345E160875816F551CE0EB2625D4C0BD37B175D99522848C46B9AA701A0FB36CE36CC28814D189E089364CAE208007A1CB31D9132CBDA576C78989A5888B44BC6FC1BC3ACE66BA55F780F5A15241E1CB9DE52A0C44A68E758656B3668AED79F2272ECD2D4F3C16A88075FE4E669BBD5E67FDDE0AF009CE6892B01539D7CE9F14DC51C2BE5085E21EB3AD3516CE39D5D94C0978683FC9535672A2B1ACBDDB3073CB1F6B0786F7C38973F4F2263C91145AD11DC7E350E7B9B9FD3C08E063045349D211EB306577641BF51E7EF3DE336E5433947463F9EF3C8DED5FB7B1669C3309F141E677254E5BBF011681C51678143088EAB5F42A953634EEE5ECD3374CE7CB036B5D8DB06323DB14AA78AC1BCC8C742D7A8171CA03A705D1B8556651866A56A44DA6B2BAE82C6F5F7BBC816298A71D6787939507A43A8D1378D720F49234D594AAD4691D5521AE213611206467E828EDE6420B9A874BAA959FE6EEE0BC1741A7009CF007B178FFC8C06EFF4852E1268D4736DC56C7309C7553C05256CEEA8F5E74A8F3437DBB6D7DE805DDD74C9C340A57452A0CE906B38845A362F2D63DBA4B8A55446E5F6438B1D5978E325B1A1B58438DD8B06AD0040531DA0D9AE914865003F6C25FE1493A77B827412EC199F94AFC2D6250FBF8DBF809E4141BC55B93B31DC1F4F9ACB19A9C62B85486E6699C2C5B84CBA4C758CF7F6D51B3C3290437EDE7F810DCFD0CF812D49FF0978542858CE5B51C54152F5142F686832AE852944BB9A8D02BCCEC2F2D312D068A8D509B0AF4D2A32B084370C60F457FBCD52FE98EBD7F55DBC6D8EAA69D96950C72D2AD4E0BDA28DFDC0E39BE0F3E5161C0C94D9ACD98DBB1D07CB4CEE6299E8D9A0716D11B4C2352FEB1513467EC4AD3D89873117A8ABE0 -MD = EA8A2D2AF6D9A06B6FCA51ADD3A8C2ECBD8B7905A01B1ADB5699FE8B -Len = 7781 -Msg = 0899DB1DFDB442F338B354085A2EE25011A50BED88A580581B55554C302B192B6714E7BA3BA15A58355106534256120432B3D3CA6C1DFB169783025CA220D458A62DB421CA67358609CD1D937F1FA2E0CE51FA0BC1CA0E18F3DD9C9247BABACDB8304D6597DEAD6C5769BA29C300E24FB80484C52C7BDE2CE0B7425C541EC33FDCAD29E01B42CF919F04910A51C64E892D939835948F17E5B922396D6E52303DB78B1DDF63C01C3667B4438246CC6230384AAB3004F6E1015AA914E3CB558F2C3EC86AE0CD99EE023FE21627EF2196154F62E3A019EA325061927A63AB8C750186F2880048CD53F5DEE9268F12C58349E99E03FD8E3D2476FB377B3502681DE7B1469B38DE3218AC639ED1F72652D4B024169BCB0432298EAF6BB054AAED6E422E795DE9C8280034FD7F934A3C4BE01751D05CF20348D0CF8DF29581D840BBDBBAA4C73F4A7DBE4574A8EC822E7472DA79029E88CC49071779161D65D99CBE3B46ABE886F92CC2AE256DD57921F8A76F1933D47B331E0764D7C4BC896AB4E1CC54902C0E9A17CF9A6A7F5B9444597551AAD4DE411BABA6B1D6EB1CDC774BA3B0D0DC9DB5D9CA887F3CC22DB2B6D9D863F2A431882CB186C8C0B49283998B733E8B17995689CEF9A43307A050C7277B67EFA69EF8C76E2635FEBAF2785E0AA290621105D0EEF03F3311ED30CC87C2937487BF230CCB71BB84DF316D245C66B1936A4CBD2999BF64EC2C31441A4A12B631C03B2F953E505F2DB5375ED7FDA5412AB6C8B1D7A066B54C8B5A5B297A5AF93083ED30772DF0785E13438F30AEC139A76CFC571E73B8DB5EF13A407AF5A4DC6F4B5950EEBCE677566F52383EAD7170ABAA4EB8944592475334054964A766AB688180BADA7E193387F38EF5718CE224D565D4519FC3F3761518CA5E84D34385A5CBDB8A29B52178638A4A2D8B1F4DCDE6D2D0E4B9562F6EC2CE396520A8952F50E1FB6C5FE88FCFA32D251823D66C8698025CE1F83C51E4743B260DA2059F2547DAF157D948B2E9C8CA18385C920A8896EF3FC80DD9E1E3D9FAB369D7316E4EB17DD360628D150123254D854E3AEC11D55E9BFD68CCA23F0F02C70AEBF935E62EED257DAFE71FB6107890BE0711AC743E113A280E88FF32B4A7BFCBFA489CC9A040F867648D8B0F772BF37CCC72B033E20975622C33578FFC4C79B801F45637CED2793A864A148CBFC1014DCD3AB2B8C6B142BE336BADF7C4E43A5CEBDD0DB3DB3955461D14413E2DEEE871BAEC0E6E17699EF4FA6CD6FB8DE94AAC4DE0303ED7BC32CF50D648EB6D401B63504176EE07CBD72B805DD2FBE5F5541D13B9D8CE843BDBFE1D2873221EBD1FA743F0BDD73239E6399D3FF0DA009487BD3010 -MD = 667B5EC009A5C7CC23FAA1B53316036AE25111AB43B197C82955E00F -Len = 7844 -Msg = DD3B9FAC4ADB18C8DDE9C6575CD1DA94313DBEA574B407AF4C7F0FDF338DA5DF8947BA879EA70ED05DDA9B23DCB3CB24048C7A593F1861F8606512843D5A487B794EEEF081E5C144FAE1757C21391AF95EBA13895C6FB368B90D41732B1D8EB13EE939A57D4E7DE4B8691245EBD03D165CE5586A5215555B995858810B523DA8082FF10DB63B35F8F69AF152EBCD170B43416A110E37E94EC736383701A6F08BA7DF417D6137BF764C2AEA039675524D3B8BE9C7BBEF42509D55718DB42D62E9F3DF21D87AB08EDD2444FE125D8732B36D52B269A865EDC7B7492F7FBDEDC2F41ECDEB51CBD7CAA6A9AD7765F1014C422DF27540D25FD861B1975B9094B6701B69C2CE46B63D6DAA3E46414020B2BCE30E9ED4A9C33B7A12E1A691780B8E1FC3020690C688CE036D40C4055CE606F3DEF84A42B79C53628FA80D5F800DE35D6AAF174536FF72AEB6FDFFA91CAA615CBCD774E68486C8D12395FA676A0EB0EF8125A1003334E2DCD98E50696B677B76618E1766464C616B0AA141F0AB8B31B1371AA7EF50BA42997921B6C58DF10CAC410220A2A05D34599AB2F9900856674784030A65F335845E387FE4580120F8A235743B8277DF7A391B4BC6FA50191817C419D7FF980308E08B887313676CFD7B86D04BD167ACBB718A1728654CD88EE09E439AFB463D1F97BBEB47C6F4D5EFA128C19934D001C47BD93B34CCF55B6A60F7953075DBAEDF33C2F511682E21BE651107CDCB86122FC89BCAE023376BE4F70E978AEB7AAF3321AAFA3C6FAB60E277220E3AC3C380A02FA7307ECB85DDED51FE72DD1C09DA4AA7FC568F2A1717889F113E524B4E68E47EC119361E712C903E2A454DB679E69C6C2B841A911ACA328B3348CC5547FC9A20BE78556C488EE1717F8B51807C199515F778808F381DF160FE88C9A474117DE91530B26560F3E21CD7FDEA38E16F77FDA0C8C0516B4822066570F0C14187123D30AA99C780E0AB0EBA6A7249B89B71FBBC13F96902E0B57CB4883169DAD32317EEF808AAF09E3F2DEDAA5B82A17868D60F790364F559F24BF04D49F49B2890E41D90F242A60617DAA6121AA9B57737F55D18E589DFDD13B9DD727AAB83542D6D0118CC6D248690D0364C3EF4CA20588EE43193556A54048F6223E082335C804FFCB50DBADEBF6E832E203AABCEEF5D4E6FD94CAAA0DA3AAC11B485DF77010383E710E7CE42DA450EEA8A44C1093441863C6AFF9A9E851B4007DE833CDA363175C101D09E55B42A25D33563A61F549B14FD106F54B546C9923834F35A1FDA67F40B11EE99D26704818ADE039842CBAEDF5AA388FC90DBCD2CCEBE88FC2556CA5F501303285D31E1B05366232F283BEECF09260C0FA56F6E1ABF17FB6EDA50 -MD = 17845DB8F3E4643E24792D33476BAF28594D42BE8423F85DC8D5DEAB -Len = 7907 -Msg = 49499ED011BACC9DFFFDB4BBB41895F02798E79526543AA3BC4A9DDFC58753FB3F5E9A6694A5EE474E213BE310CE075EA87C8A33E53F787517B3EA0F0919724C7F40308D6C1844AAFBD2CF7801950DF7E204E81BEEA2AEDD6CE7C452F417A14A804E2B9F64695C594443C2C915A3F16CABFA0A5534A069E17F0CE9E025BE739EA01C8BEC3630EC032C3D55060A61DAE73D56F28AC0519ABA7303F54585459AA6B7C9AA6A2507508F5EB79DEDF314C5F28B0295017CED5E0553B3B804E9C3F6ED2063F4A5FCAE3AF8BB62CC2F138230B71F3FBCF68FB69305B645EE463513704DDC065CE021EA9CBE16EE1C4C9F29819EBED161038997005F9EE5B30792CCB742BD8020C6109B4A3C09921E95151707984E4A69D022789B2F274009D6E32C4B365E8DD2D2AD0CD2E30129C342BA4F1C7A642CA353DA656FB636A6C7C75BBED854801F90DD0813D18846BBEF00874C7A1BECA7180E6794DA482614ECA68C28F75F0035BCEA65241CE187547FA3F323C603E1CDC9E32C7B56F3DD2ABDCF12DC2E7CFB5224021EF514B9123BCD2AFD993D649AE7A8EB4AB4DF8803F508090C4467F8AC1EA4F913032E87380F462EDF9A2B5E5CD7B6A08034DB67B087E4A6B116EDF622BBE550B10D182C625CB0696E5EFE661EEBB80AE69EFBDFE949F37BF7554E1E3B58635749C283876A1EB13C0C7C7C4941E2C1A163790EB8E5232EF5212714F2DF617DCAC6983B274A436A3988270682A3723072ABDB58156EC827E70F703D0D97214F128BAC9C7B81D0174B4C177A423303AEA39A73D58702F645D3F86A802299E666EEBB5044BF06B66D743BAF52EAB513FCCBACABCA1F8C8F6EC6E12396E39634D8B87F16A66C001911B1F7D50E40FF702E07DD1390DE94C74E80FF254454591E74C04ABDD8CDC1522B5BCDB349FDB293932EDEC78BE11A95D6BA59ED4220939B8A848B321D69F2B18AE9888CBE9C32DB4AECC7341D492D2FD7346F30FAC23FF4E3A8E339D863A17114FED22D930A92EB9762A61B2704D724026FE01116B691EECDCE15386B0EE808E4FA6B14EB724AA951120B8591FC493A679B260DBDD855CBF38902E265B384BEEE658599CF234994ED84230A3A69435CF2C6B0A90662EE9633F5DAC96AFD099A353CA1167844F3232516E7F6C505E45B14E7ABCC60732010213796BF443727921CC381BA41327A38A7660918F0063F377399AE0AD7FA02E24065DDEFADCF542B62B9625192CF5466AFE2DDCA49E15B0C09E733ACCAC206E739DA7A059E495CE0BF811CBD04DF493783DF740A08983133A7BE9DA10539727E10DB2A2E6499C12C81C0C05D522C6D2A9F59226E47C746920DCB48EF600280BEF8CBF61C5E710578D926C91896BFC024FF3D65653679A3F6CEB5A0 -MD = 22F2589BF92939FE57563D6553FD4BBDBAB92B38A8303CD6DDEE4029 -Len = 7970 -Msg = 9B7244B6B83A76B496F782E60E6EB4AB3C58DDB7B8EF7B9CC0F1C9CFB84A61E2ABDD835B447780C83B73E649D3504F6374059F99B416A7519AD1D1FEB41516688E69B0F4E124D1334C33ED918A245F33F267F2B34C1DB580DFFEE4C188B9EC75A6F470EE862C8A265730EE26F4874746FF22F8E2095D744AA9565572A377FAAB6B6F9D5923FFB2E7D25A54C8573B3B1D27D621F64049C2A9D9322D4C5AE9299A7E4164BF7C5355DB13328A96D27ED2268166ED6B912A455FBBD3E1835559C9D807B3A2F7A73BF5E4D991276F501300C83574E7BFC6E0077B452A4851C137288786FFD4DB2EC9CA2DB9FD1B570B78DDD442D92E01B026254D84F7C3C5761C70A09876C9DF6C4FC0A677E6128197843FE4766C66B1A5A357D64EB240E80FD67FFF4B4B9FE6BB530503DBFA8CD08EC78841728F08949B1D8FA920ECCE4DE791ADBB3CB000C888A777DE186C5C4E921485C5E43067FFEB247F6184BC104EB8465F22B50C7D49FD04952D91C2C9AFD7E9D90A0AC8DA91E8A6603E6D6A1C712E67E264B16E9708C5F28586D82EA3191B0E662A07041DB5DDB391812A04A5B336B09120D7DC5A56163D8802DC3527B69289CFF9EC870F23C2F9AC3FBFD68C1BEE31A247C04D218EA6916FF9B83A3B6AC622D80D9606B9B43B2EFE32CEEE4E2CCD0E6D1B628412964B8331CBE5A7CA2A63D0FF4C1A0D32E37655323D73880F739165A47E6470F812F998E9D405BD4BEE1CFC3BD41CF235E930079ED1FB12136D7A05466FCFFF0F32A35A6D81EF7888DA49DA02076DC65E99543F0366C9936F828A7454E942867A2B251CD6D4DD75C725F1EECDB48ED2672CF568F199F1C4C35698E02257EFEE43696A81CB28A4F59FCCE8838BD3E4BEB676FA075F9C4B577B04BEA4EA57D430289E915E20FA96E3E357CD4FFA0F41B9B17F133BD4B3934AC2E9D2A55A828DE327E1C9935D36C9B08776628746F836E94A217E5CCB14CD4CB8A1ED2FBA44CEAEA934C2E86836FE72BD097A98541C82A10D2AFE251FAB877443FF372D154668BD86E3089666DBBEDBCBE970089795BFDB37D77605090B8FA3859A5E166A78BAF888DAA83CC13B6598A0E59BEEC657C3BB03CBA8642087C747F6B47466FA2DC9CDCB32D82114A7A6173997F04EEA05A85315C9DCC1C76E2233057A25EE9BB9A01425BE3C6E5AD57F24AD349C6CCDDCF5943C6E408676DDB309853DAF6ABCFAAF5683E818CDF52231C627B2C5A8DEEB4E5D7736E9501B4DB00FEB5250E7B5433548C0FCD7279D3E01982C2BFD739A0106DAFEED43C81249BB7F6C8D1B458B3273209AECBF62A105688D59E5CF47D4ED8CEECE4A67C0A8716917F593ECFB42D1CD592BA692C9512AED508B6C6A0A437EB05B8D0DB5166ADF191AE568E0106580130D2741C0 -MD = F5977031C8A280EE0DA72FDE9EB39867DF1490B82B938B7D9B77543D -Len = 8033 -Msg = CA7E3E3807E14D73348FAF2202F1D5EF730B4780427CE2FFC4D83FFDDAD3AF74953D52E5E0669F4FE6A6CFB7338C3562263CA32DDADC6CC3CDF59E6B93F1E5A001A3C9C6CE5E286F61E880F451EC7C1BFAFD40D32634E1ABA13854BF95D4F7241D5B86C6432E8A86783F55502C77506618D6135B6568213CA728E0DA8D953687ADC64F7A8864DA957B0A5E0CEC00F5F1E8C151ED120AF087078C24533B11E4B7283C5111320F7E6156CBE1AC8CB2E8FB816C1983BE5D72F2F0DD54727D3221BB2CF950AF4434468E3D822E68F983161E0EC51F63E6C9F5890E368E2F81E18979A0C06246847AD3D04C2ECC51D011DF80CB0BCDB7AB107C28B19E04BE76252E3BC64E009DC3E082ABAE4D04BD6E5B252DDB750DF844CCB5364A6410558D195B76983AE8C9FB950458DD6FBE12D31AB94E28CDEED63637049FDA288F9E0ABA6827B118CCC5B9A2F02BD73EB0C08650E97D189F7BE7618823B0E1D077A099AADC1A80DC8B8CF7B227CA962B4A985E599E8DA29C8303726E11FF6FE5813BE136B638B1BEBD7AE70FE6F3FAACE693930727A5EEBFBF0F634CAD2AA72D3007ED46948D6E495F9D34C2F42987E7F93D30199290EDA898575D50ECAED74A4881F5A7FE76D732E0A99A6E73F97F858B3F2A06FFB6E565B8E8F65B823A65926CD0C97220E438C4425F0D35C26A2415DB94937CE87651DD5DEF8F82AD2EF00FE51AB23D9A6115D3A768C62F2B9038A5AB36783DEEF2222DDBB3D7B33D92CEF0E3B75D523D72E2A6C7A0F817C9849648046DB4B930DAB03074BCAB362A227A4AC28B3040E0FCF1169C99FCEDBE615447DF44C93F5CF52664BAF4329574B11A96A9D0D58FBE56A6B350289920DF53366C118F3DDD9F3015A888E70BDDAC2F951E92DF36D0834640185BBD793647DCCA03FA27FE46579D8C1F7F01EFDF1A0287742935C5061CA7AFAF5B0E683F868D93E9DB01FFA7C0F2EAB53570ABD0FA65B1F93E47D4DEE953CD67B5EE2737F921F8BA0B17FCF7EDD18CB0487917F8C40F43BBD718E3630B7BAE92CF85F431B9FEDCEF0C80DF424D7C0759452CAA657D394D3DD24BE5D2A208C25B0584DE2503461D2D0A3EBFEF7FC7B3F8C2CC1B19632BAEAB8D585013B61C40856798C4D3351DDF690FC9773CFDE7427480FA2E53CA3E01BA47A0B295A17AAF79CBCC4F014A5846FC8ACAF3C01D619BB5AA1680D5BDDC3A018EC5D5AA761C04C746CAFEF44FBCA0DC3D57EAA01D00EDB157E54AB5AF551985DC39025359E18FBAD185E6D7DD9DDAF69589F56259B196C7609BDA940484DA2FF925AB4AD8EFFCDDD79D539AF82DC9AE26DB69172D8B6942253880C9D69406E4C5A75C4A3E8650ABA4A99D49AF318683F4771356C056EFD06B04D0B22060A0788E4E311D8B1F11C6812DC44BB293429C7D3880 -MD = 6CF7CD5544049EADD7D92A8D57321B53826B772A97274D03C6802E6B -Len = 8096 -Msg = 670B79C6030DA4369146A7F14E6BD393DF729B60369D3D55461E5187D4F8E83114B227524EE955F64A2C607DA850235A1B49FEC6EB51EDC21941DCC67BD07412CFE058AF4505C325D94936EE36DE4133773ACF669515DAF4ED87508589CF651784A8C3820A88FBF7CB60E20A035ECD06405B50F6A13A36E174925B4E334E197E1E5FE86836ACBC1AC681CFD42B2F11F74587660DE867EBBA7222C3E89B42957AC4508F09B2DE9C3B57C883138F0D442A050D8AA3023EA920140F70237AB214BE9FA0C452C54B5020077ECC1F5DDF5D959A5AAEAACB381355FD7B493A1A51CE83E6EB52CC61214A02FAFB01593D5730C7058BF9106B8314F1005236E5BECEB3805BAC8FC4308B2007823BBDB3DC25042D6AB7745941B055A7648F99FFDACACA9801094EA86DBC9D2EF2B61A97AD5FB9FF754190A529CE65FE46AFDA3C0EAE0EC98ED5B089148BE358A8ABA6B2F014A5B74547FDC00501DDB1472EF4AD592EFA8031B0A4376DCCEA8714575BF055B1027824F463E8AF110CCB521B2F1363C0F13256B768645A0377541CF2F73DA03AF0C026E59570D6007BAFC297A41DEEEB32E79364F9EFFF6F81B69FDB99DBAE4DDBA46016F86BE1157693C63CBCFE24C7B6DBC2260798A6C397BD91D4ABE0D5C23B43769B0BA28B6B954E66035BDC52DE03B33CA004B670EA6E341B01ADBC40DE2F406BFC469122EE30192138868326BB642834F9E78F51976C3E6EA0EFA570926F47612CD0702EA82279D60E062832D31785933E3BEB86D187554A1675A61FB0B865092E518AD329F38A70E7DBD6025C9925FB0332B5ED97E77134B8684F6F167EA639FE6545FAE58B611922855B44E520601DD0758319E9491A1229DC49F9F6F9EEADD9CE88CE91E3BD3D13F64ED7745280F4828D3A00D66F3966E0EEDF930F563D8E48ED94BE42CE5F48E92E3F2D801FFC464692C10E7300AB0F85D1D44F353C742E20DE3706BBA4B24AC0048EA6E0B40454B06FA95E5DC2951CB4B0A7D1C15A3C12A3889C7191814161C5181880223FE3070404E61D9D382AAE8F236165FFF3121D1B4BBB5B4D9B01282E2663DE39C642839B34E853BADD9E2E2C82FE90FE755C8677DE6A405D1A23492D84AA272AD94C180300D737758E00DA835DA7BA9EFA3EA0C16DF2FD472C1B57E0D5CA40D43A3459A06A3360217ADF41645FEC31F104CA6166416E36597C35DCF0FA43298B7FCA4F5045AFF900298339FF5DBCC1408D703CEE178C6B194E1015DF362B038AFD349610819FAB289AC11CBB3F19FFC9FA0203C231711FBCC48922422059407EA225F8509761D3C53D83437B507814E61206558C8A27E7D55400C64C22AAE33C817324ABDD7114ABFC01CFB1AFC16296FF6B3DBC8218514B83102BC84272D41C05EAEADCF4A0FD9983FBB79627BA8F905E4CD345C874 -MD = 38A093A979528FCEAD9063C265B4FC440DDABB82771573C7C2D06B84 -Len = 8159 -Msg = C4025E8F6140B37942AD258F6DF0F0236859E0455684C7F031BB2F2DD01CD9F747BDEA3EB0FCDF3BD44B472A5D27710B87E0CB0C050C9060D26CBBE62752B3F8BD30488B509934B77448EF0DE6BDD339FCD6CC7EF7ACE96ECB17E555DEA16D51D83AD4EECDA274E9C2B0C0F5A2F7B3FBE16E230FDE384908F8F0E488BD8D4FA27E043688BC7F3E1011D9D786A7475DF84890ECDF01BE7C8246B730195B7874941F4C0AD709865CCDA0ACB3F989589C8749B77AEB3E470BC50BF0D7214FC7518DC5E637A5BFEAAEC5A837AE34B1A6089B5C8D6DA35F43EDD70C407AFC65F80216C59AA2C1ABE40EFD912286ECEC408B843941F0714A73FEBEED44A2184320A4847ABE1FAA31A21FE60E777B20BEB3A30758FFA0E49A50CBC8252B9FE9E105E3961D23FB4C87DE7FBC5FC3870F1D3A026FE6C5283D5C99EF8CE7479BF83E4B8267220EB9402418C038784D0AF940F43C4A10DE540A750A9F6080DB5D5C82AB5C8FE6944E2C5F5F2CB7D9A827EB8B923A46A18EBC96F52CB3C4C9BF5825DF47689AAEC34463A9387ED0C7C2FE1C4A898C0363E8201C888848A45B6DF4A698559AAF1CA387AAEA5AA94B4CFA0D4B305BC23E5CD82C7B4E40A14F65B355B91BD813C279B6B6D258BBD452327EF3FBACCA2B520196A7E9F7748E9D1E3D52F06A3075632CA9452ED28B2774CD99AE935AC0AE96661EB19DF345653BA7E542FAD017948F603D60326C54D8A0ABF5CC6C2B3312312A9A7F99C5A76715A89AFEC98A61B886F82F6D12A08259894AA981C4D619A86A52D51B26962EF74B47D2F901CD1D701F35BDEFE62326ABEF84A59115304D47760EF802B4DAB07976BD354EF4596CC1724B0421061A2E580385D8A10773DE298BD039C530CD44B59602EDE6766DB9520A365904922839762CCE3DA24566663BA659CFC510655F6CC128E4B0125A06F79D99E0EF56362BA28A0BC2C9DB83C34386D8FC49D2C17B94616271867AC656AADC02F9197A2470B8AB255370BF07A3D2C2BDB05D289CFC7A24479AF74B710838208B1B7B2599D50150EBF9D4D03433D60461F057AA41B2658E463F55C42087AF5FD5AFCBEC96FF3CADE855DFD02106FC74F94BF9AB36AF3E5FBE19F2DF115B71AB0D1D7DE32FE627F2256A1618656E63E22D9B4241483082C24A30D158EEDF2520466F1983EC79EC0BE331723734331EF11E1BFDA50FEE8AD8D2F73DF845A03C7843670BC0259E5829FFE0349B7C87B6EF3006E88B7AE5A194694A531590D359C7E8CAB17E28344A904E2DA3B2049409FAFCFEE666F7836EC2872954819E18266CD914D51ACA07E02D304A57FC64B394D22917DED28BFAF92B0B84CA1AC43ADE5DCEE7C418D9A9FC7E1D649BB124EDBC29E34E76F002E5296B25AB4CF4457D80511B24B0DD401A92F6C6E7172B93E3B85A670A5DB3E690D40589D87380 -MD = FD6EC215B3C2AAC66848976DA6F0CA97919303F69AF6DDA3DB16E08E -Len = 8222 -Msg = B77B6830B28A603CB4E951FE76605ACBCF76D9CEFDC792248F1E558BF1BCD16339ED81AE3A71EAB667790B29C9D96DBC42742C9505556369C462936C2EB4A1C18C5FB25C1EDF0BBA4F663275E88652839C273048AB83ECDCCE4F764FCB89F03A75725ED5E25BFFA036A27954848331AE8FAE599697E4A5BCF639AC40DFACF8E283EFB48DFEB76FF7EF7E3227EFE00FCA8E2FFB0222038AA8E978FDD74AA6FD0A12D8462B00DE409AB88429E5D2B42BC52BA758108DC5855EE6E2F709EB1D12F7D4F90789CC05D8A377AD959D5DF35D05153C8250E63FC171205234C32E307AC6E07BC49532D3484070F38405A588FE60996B99F70510098E5DBF5DB731C7C2B8EC1876D8A24CCF98C96C6AE191B00A8CDDF4A65CBEE67BE9A7EA712514FA2DC0E8D480D4B02E0ED95BC75293E39683EA38A261E9C78539F803112C54974A3A6421F7EEAD781D0E47DCE58636E391BFA153DE4C1D4662053C9BCCC80573DBF70730D472E48356C5528EFEDEAEE3AD5FB838F7A489AB20BDF037DCB47E0B037913BFF6BA8862573C10B549CE5ABDA5C199C4E7B78352C70991CCDE7C8C7DF4A4916B25E06569AB7C58785B0F751D8D829257F7011B85A250DDEF40CC6C8B7F3CB1982ED3DECB0C61587A03431B6D3B13CA1CA57F118F969313B34FFEE23CB299237CFB7AAAA094A2EC6FBD4AF425C6081EFBC58471ADFB0A9F0E2FEEB572892DBCD096AAE52031AFD71FC220EF636E55897BD2346063CDBE2689A26A41A95A204238DBBF28EBC6F56A0B9C8B1DB9FCF0C51A03877B05A7C0E0D915189A776025818AFA7DAA13D572EBC3234EB488140EE876C135F0C40850BD7F4F78EDF0C3C291628387F3AD8CAC2E8A334A77C34A51F0F5EC4EA5EF2B1C3215DB5AB0C10423592E1C2B9EEF5AFDCB5E7A7F8C2B0BB79A291791B06605FDCE2CD57C9D6E68A710F9C8C8A8F1B600DCBEE2AC1BEF3A1428A33BF29BE03556FB8735A1CEFE1D02EC3153F7D86D46F2B247D79A384B9F1B5E251850F14E648010AB6848EB8C5121A0F78B13A33F5298A88BE617060D8A289F679E9F1C2DC042AB98C6EEB8AA666DE60B8AE98115F9B4261C1ACE4AE2CBE2AE3E177B1D1FA7DBE6B54CF7AA39B91ABC3DBB34301CD02BE18914D55BC31EFFDCCFE9CB00E79B29D56DB6645704A7A8B8D7B4F2CE6D5AA4489D530A6395E6ED9B0E6273CF188BBF2964441EFDF45E5315584F0B3EBF1D6F629968EF900BAEA5622D468FCEF13ED699EE7D0A6C55FF0045AAF1F6447668847BFD559C2AEB4F06DC832BFBD8BFF4E0B6C10DC3846A577327A198BD8EEF652E3246514CCECD4C031BE2AA5EBBC9A7AA084AB2A778F0E2073B11B14A323F0BD8B3EC37C214DF2F789B009FE7C3C5C848AB7ED4DB46FFA63D5E270AF12151B5FF93AFA7B7840097CBE026EB0727507D2BF9A705609B0790C5EF1A5A3A74 -MD = 97CB10D3DC2807AB44481DEED3B4B597E42DC78BF451ED1AF99EA9EF -Len = 8285 -Msg = 2682B41CCF6FF2A7C6C8BB1DFDC2C69975F453E2CE8E99D95050FA8479F15161E9D4CD31DA835E8C646618408D3FB709C0ED161385DBCACF714E1654AA01ACE01BEF0579A01996DD498243EBE2C87ADB9882489AB41B275B5B0A5D0412591D4AE7F37F9CEBD266487CA04774B34E8E115E182F590849DA46A8B460661ED76954917F3069D20BA78B9F410F0C82F75DB08942DBB78C468C66292401851133ABF7ED60E9CCD1368E76DA84EA3254FC76C9D954859ECCFCC1041A4828D823A26B8A7139D3347092532020EEACBE82B2875357D18257B69CF2D502D1C72952EDFDE7A7D172E1A7FE006478C43B94826FC07189A0C7BEE89976AE9F5FDE0938956F09EB336303756DF01CBD88683A86FE3E00DD2948B79A242115FAFC1A696B4CA29220DE80EA33F62B78B900EC3DDC7AE1AAEE36DAF40932C0D6F7D7D41D1AC0C4D4B118CBD8C6512A28E746A991F889B4D222D6CF468E2A09AAB94DD2208391AF0614F61502924DD9ACC8133B1DD54C838DDDE70AB8F0925B964F7E3565A73C314D9D2B74FBBF89D577A35CF536FD35C2FAB8DD1CD7838D52B8C6A384CDFAA6FD12C0F3E22A94EE23FC91547AEEF8FB174054FF6BEB40C715DA6B85EA2CAD2F12EC797357F26D32C0867DAA8570AFCDD81672980F8D62E6D2724AA81DBFFACEF604941AFC50A716E1107D6FB9B167456F06EC17F916129B00D79F44C38A432122986307AAD0C9C174C882B9D48239054CDD2EA15F83EF5ECD3D5213E117EC683550FD9A2B08BE0EB823573B673C92882BF25C9C2C62C568995EBF89092D2B19EAA6B08884063D367E0252BE503AFB6DBDA7B25D94AA9102EBC7BD006ECD23F157F5C71D60A16CBF3F88BBC7ABD12BF21ABE46D4E5889F4229BDE07B29A934EB8D20175F3CD9EBACA93A1B36A7DAE3D2E7F0ABED764488BDEDB87F8C9DD9B55BDF518708051874253F0B0213FD2F5ADA86C1E472CF842D23FEC63CE7A7F8DE7C3BE1498CF30B5DE884F9668D82B85DA34AB92C6ECD363EA56C5D044ADAE1CEC15EE4B8312669D362B5FF06A3E4C584EE87AB170A993CB32B18C2CD1ADADFDDB8ED420AA0C216B63B969AF7FEFC68B5D0BE8EE5D9C41833D3D11C92D9A9BB84E19FD9D4174E6F757D425E777A26FB08E97D27B803881A7AA2EEE8E4C5F9FE7AF5BB3A90B13B2080DAF2A2FF1D211852E3BFEA13171D95C43FB9DD5E5DFDAB0503A8FC0A8CF56771FD9B68019ACFB6BC70C819C67D0CC0C52BB9F6D341F96FE2BB98E08423B8A3E6740B0C54F4D6E1D0E268009F0414CE580453015159B50D36973DFE2043344790A45FB74B8560DF5A7C4609B1722C17AE6DFE54A593643C5CB1D9EE2467B97A1F58AC3A09DD24D7EF3A9E490D72B2AF4C5EE5596977EB95ED18B6D0213174F099A20711B97BC814A100D0B8C979C30E631216706A0642C2B624CE44ACB7E7DD0A3255C11DA78710 -MD = 37F0BC2480ABC7D19E53EF3B3DA5C3B5DC4ACB87F50FEB8C6CA049AD -Len = 8348 -Msg = 64E62E93E9D3C8AC04855E1A63560AB56467FAB62FFB088C5DA9B31EF961E6BB14039C29B0FA85A1A86DF5183CAAA7EAAD86845264267F9741877E238B636374C669FE8E32C7D2267DFA4CAFDCAA15E11264B1BDDAAF022CB6569B6946C7A47426C01859AB0AE784EA6F8D323131BE1EFBBF12CD0548D31C3063677C4BAD631C4F856C790E9868487C9E369BBC0EB4C07C2492988D9E85306871D4716F04CA1CED4632606C458DDE98AFCBB2AB2075C52D114E974A26FF0D55BAFB015E8A4A0FCCA90D575690705453A751337C600757C1CF1DD00E740EBCD1507C9794AC126C9A328290FD76668A05175C7CCE035687FB7723BE5B650AAA171D2734EF9CA9544D59FDD7E65E44CB9CD7A3848655ACF09B5F9C381ECDF8201FC35CF54F4547D66651762225C1905B2AF9EF27FA36B43715268D185A1ADA2DE249F231A56A44F634F888883A8BCBC447C3701A361934A71D744A5ABBA351112789B62D7DC0C647DA2E1C73021E7BD525BBBB4103C1E8A5E7630374D1107CC2129B4BB3ECAAB303FECFAEC7797F4D41A19663B746899CD1F0D28FDBC3258AA113FBAF1278866CE474D0C6B0E7C662CABC434AE4407FED447880B1C413B9DB3E279ACCB835B8E1AD82EE2DAAC9F8DA1266582D2AABF63D3B44E26C84B8E511F9E6A24A44AF6FA76D17D3F52DD31651C1C70B0AD13D73750494F8E830330A017086E4E9714E9D252609E18432F54515D049BDD21BFCBA467A9EDF4CDD478558404B5EDB2FD1E611123D2C815B3275AF4538C39D6573712F436083659FC1FBD3F2DEA046E77B5F1C68A7D2E4DCCA366950FB492F4722C84EC98F7F1400ABC2136451BC07DB52457DA81D7668D5E1590AFD22E8CCBE45B9C91B91D6050AFA2B21157C01C6EDFD8D52963DD505A0335D67F7C88289DA89437DA90F3973AEAA60BD97C95295C88CC75A0B7C67F4B0EB78AA1FC2391332CEBFB75A645268CABF44A6F821EBBCED36967788A115DB0F6A83B0B203305FED80B6162FD576EDDB5EE9D5EF06199BED1A5F85AFF6C28DE55C168270DBF5833C77BD70B8795E7CE5AC201EE1B764F80E550CE6C4D66D6A2709B6FED1EE0185AFFB07C4A6C2B0A13F45E263095F28B3ABA732FE06037655CD42A5B01586BC8C51C5185E8DE14114991C489F23C8F64AA10E4DE47596EF45ACA3862210CB80E4FDCEEC49144C5D2C891459B9421F75E834C0F1AFAF6E3FCCC27D10B768FACA17DD3037F16CF2912BB22DA3DCF7F533F45F25FF6E5CF04682718FE9BD94904892B2719404D33DBCC4458A1E68E67E8FC849B3E7A49C02249C5A3E8F2D8C32D926DE4428FEFCD07E0D5E296D8CDC506524CAF97487FD0326114BBD3E20CA6CFFCD87213D1C80F7CF33D31A1E5BFC4B2FCF731BF2A8FFCFC0BE4617D94AC79D1DF0F0CBADC7CD2BABAA6E910D67D26523C45CB3BA4D872B51E5134B9045AE7FBAE060CFD7E73CF1EF7250 -MD = 65F50424407B35C207BE21DB5E4384F6D7575554A401BA879B28AFEA -Len = 8411 -Msg = 11BEA123F17D2ADC9ED0B07011030E3D9550D571A3D145E3B404999313611C3E6569C200EE91FBEAED232C145FD1A05B1A50A160809F018707BA78B073FE07539FBAB849005B4CA0410D81DF641D9A11BD9E8BBD7BD8FE0867BB31E06157C8A354ECC25BC65B637BFB72721D93E7F45B08CD79DC111B44B1E6083A21254CCDFD433E304DC7EE4747D5445691F757C56AF461C442C398FB25F8D1CF9ED87761C15811CBCDD94290657E982689E9182F3AE6E0E9D1BE56174F7ED3F20E11F9A00BFC38B03B1E2FFAF9D394B93CE76A9A02AF948F55CDA047158F0C5759DC0DE6042CB6B67D404DE0E70DCB06CF313B99AACCFAA3FBBC749EC30CB9A8DF56DA16109D302532358E9674F70BE3E2B903E4F722EB3021739D1215FBFBF2BC0857C6528BF0840383EF169E38EE66B118FB86954CFA4DB1CCF483CDE26052DBDF3DD5010FEB8E730A6FBBAFEDE368CE170EE438C2243AEB12AB2FB59D0CD58CF387DAE817562C6B8CA961E3D88481C896483A5000620589791F80AB5AAAF04FDE5A855921CE726975CFDB857CAB1D09695D88C8F872268AF909A3E2E2900AEB6E2FE76FBF07BF448A0513213289BD29111D88853F4C53497145901AADA5AFA3B932EA3BA51110A17C123119BC0CE895CF81CA9CADCC10CF478EAC437472C86A69D36806EE7DF0D087F69C45331FFA3374AE5AA452C884D7475F661737D612F9D980C716EE2C2D44DB6D14D08FD0214204A840D62F6D97FEFB510B64655C8D0347D87BE3A4839E02BE10AFB110700E46590074C4E62D28E331F62835C476FE46DC5EF7C8FE74C8A369690A3D4500ABCCE58A3A47B1B94ADDF528990B6B237E130A05051488E1C37AFB0A426FF66DF7843F1978B3DD1CF90C5019776816E2930D42831C9137ADED095355561D9D24EC3648BEF743524BAEF2455D3FA2E1C752F2650BE64854A519503EF948DF5B0EFB543AF2F0182C9B9972829F42219EEEC83F384D53B988331F05B12AC00003571072DB34B2FB88E32B61EA06DBB372AB5AF5661B10B083FEDEC1F93E5D6690D0568086E573D5B0B74DEFF1EA618F25BE367A7D621472910D800C3CCCAFCFE068CBFA9D45C4DBFD43B271488E6418ED5AFB5670AA7BFA6D1CBB8629106805800BA63858B602E21111B81D3501A413DFEB1670A6D6EAEEDA2EC3801B566E546B9B7697317997C408B396CF5D81E6F090F118E96266C9D2FC881F84C87F79EB5D0B1BE3C701D0D00B9AF5A1D8423FACF44357EB319E4E680D23A09FA926FA380A808EBB16F02EDA19188A0218042D206A7A30F2CD5EA9A936283D5F5F4179E8108DE20D60D54863A657DC4144F49B4B0FEF7529BE7EAEE755A4E7E18413F12EF684A7B02022DE8EF1D81863BD2356D93E3C32F2A73D5A39D0BA6A767A1A1411EEB73A661C5C603267C3B677C947E0CF9A77EACD903B667E34A6706D6E85F1735C64910407418760DEA95877CAC04EBB20A44D40 -MD = 2970BF7DFCCEF48011CA0C41328D751E5AAA2391D534325EFA74E44B -Len = 8474 -Msg = F43B4BD176C7A770800C17785434B5374B4810213EBEFA80C8997C30553069A2B455C25FC6DC7EFA7924BDB5E8EA2DE5B1D67053DFBC0EB386C31163BF3D029F630F8902078B4C643734DFCD0C7F25F6D16C8CBB880EF175CE503B19C5449CE24A7A0B3393AB4560198BA449F0DD970B96322657459BD70FD855C6247748C7602FD01C3ECA019D27EA26B3DAB9A1248EBFC840811B9264FFB68582113F5D7D2DF7BDF1E889941E26E83D4EFC711F62362997C40C5F0E2F212DE50FD8957DA712CCB4F29985E6B2267434DF495A85962C5557CE9681DE221909F252714A50EB99C9BE8F4A129D700932D500EAD211912155F8C58EBEB910FBEAC552069573E88CB8E5A038FCA601F2B84490F5B31D602EFF57D987CA2864168C8F02747A8EA73F75A9DEFD3B494B11ABA468E27F2E41D3D621C94D4BAE2BFC0F9BE540815854031FDBCD50577A46C7D5202AC7E215E62DC8EF4D3FD4F61BCBC0BD92959DB0AC2D40D6B285B73F7FC5687F73CE981F9B9EFF9BA04AFE185D803019531ED4867428A9DAA505F478DC557530094AD5D196262F5B661E760F513264EB20C74134FF2DF35B1ACC4F38627A57E3F36BE0BCFE0B57EDDC21DF69F8441280DD710ED07F7EB4227C5351048188533A5FF077C72FD4463BBAC63FC434DF80C9AC39B66F85A2DA33484DF4734B92E7588BDABC8CB4D61B2E0F457C31F1F2B8CC01DB5F9CBBEEF3B201A3BC87EFA7CEC1BFF1D128C49B4EA058A3497E7F86A17BCCA2F092A277A1E1DAD7C6BEE7B545836E56FB9D6A20885A372AAEA4668FA97B4B944111D82CB681E28765BA6E780C764EC53483754869959A4008F4F52DD96375FD4D12D09121AFB58D510E364202A37D68468ABC2FF55D62611C9E80C32C1237228DBBDE90C148F10F7C947E42C9A55DD0709D31E37132BB34B40978156CB8A2F810B3D2E4C4C3C3927E3A936B9C810E502C448172B3225BEA214563D15025386AA26C9E18B19B1371D2B955C0DDB4D0E9D6D39A377EF356E83DAB18C7DAFA4B8CEF9E99917422DE8945ED23A709C2237379952012B85FFCEBA1DF9E6C4FFBECC86EDC3E08244647F3F32D07B1BF2C9CB3B3080C233D72E208EAAF77D42AD0BB99AC4E1A62974C399FB3901CA831C639E846BCB4C3F2E24F67DF96EEE3F7818E2ED6037FAEDEAA1A592622890A7217A66E0ACBA70F2E7499F7C1507BDA9B195E2E17FE09CB9308517E57BE5E08D16D4370410E4FF23E84DA5EBEF1362D1D3367334EAADA5985C22C79F01D7021D2C335F3D860C40BC8B755058FAF8BF2A3284905A5454CDCF1A8B4207129F7133E9F49DDB203B4486D21F3CC68BB1E90DC60283C22382226294CA9AB39CF4A0F307CF4E69A6CFD33F4D83626DE8FE008AFBF8C0D988465053D0724207B3BA3816F3D457DA7266AECEA40AAF9D5F2E22D99554948F04BA617313E8EF86AA54901685FD0F2361959B5194F84F43298C6F8F0EFF6BF9689E20DE3D81E00 -MD = 5316D6804CEC1C57F57B273A0461032893D0A99C63C475E985D0FF7D -Len = 8537 -Msg = B76BC73B2340EACBDAFA802E084E1602A798A77D7E0F714871388FC9CB8390111659E57BE1900182FFFAFFBF3F7AEC9965511AB9AD3707DD0C73F332934CAEB20E2ADFB3BA7A9F373C9817C92C77F49ED514074F9268DBC844321564C76E243504C3E76A0708FF11FBB40A36744E7327E627EEC14EC7CB1D4AC6BC61B80D133D35F57ACC8E44531C1E9BC3C9A0971BE31372A517948187845A93B5FB3EDA4A44C837B2B7868F225E35AF8497BD0BA8600B37889DA526AAD3838EBB8C0AACE3DCEDA1A3DF1B4E64AFCFC22741958078575E66382A22B982229B249745D753F2278396AF5B1FE38E283EAE6EDAE89B3297475B789C9CF78D702A5879BBCCF25E8CD4DC089E9D78EF2892BCC9DC809533AC12F43F4CA3A8A569E21BE898FAC267F894A0FB13D11AF224B4CE037B3E241D3A0A8AD5D5D7735C20FE09981B3FC741DB5FC0B9A309C215F110100AD6DF96534A7427267E2C5635DA8CC90B00B1109208E137AAF20EF864FA94A72EFBF48F6880181F11CFBE39E1E915DF1292FF0709FEA20E2D410FF12A589E2894344805137EF573099492681C4EBF51C9AFA8C7AAF400855B55E27D1E81367DA2AAAA13BFB6F9EC9CACB2BE3273036E8941E467AD3441694E5420DD501E874AD3248BED35777873240574EAC94FADBA192031314DC803B04B58512D7093EE78FD0286A5A021D008C604B762564FD52F1866445745B963FBA09F6581C2BC2AD8A2B4B210B246D60F38ABD8718B16965BB8203B1032400B1E13AD295A1C9B48B457B7611793D478E1B0BB57CBCA14A8B29580DBAD02158FA0282943B188C8DD974D01B898FC06E13FEB6C12159B7B3DC46DD28DF96A8954555AD534018CEE1A421B689E7B21CA490D833A13B27DE6DC95E7223264EB5D453E744F63F54EECFC1B6A23A82081D32B1CBC5F45497D203434C46D7AAE1E9A7A4C1890E85876743555871C435B6D276CC5E440395320784B736AEB7D99FF3E0733FE1A9BD9896CB0F71CF1FA3FA082B23C9234F46DACF74977DB11982026DE843C1450CF780EC8FD90E00BF90F5E05A706325F9C307DC8209071B1A61B1187964B78BC40BE8A206368B4624515B3A79D1348E7F8B8001E42BE86D002A331EA8DDD46C4A8AEF58BE6F81364D618C1F2B7DAFC19372057C597F915B3974D2A3BCC0B82C4DDC31D709CC39D8278B5FD9432A73F3E913F42B0FF8A6D7F4A6FEEC22516ECB818FF231D4CFAAC29B9170F24E0F242262DA53DA4CEA24197EA85E66349F728ADF0F0270EEA169F03EF417A062FC9DBB99CB11A75966D429F63F319D80327C1D28537053AA3DCBA64CDAF8CE1259BEE29C7BDA23C3FC15798FFF145520FBC18CC9A12C420F6524955E646167DE717D00E76B2F0B261193C3692219FDA9D9C38AE90BB8488F45F27A6C57C5A6BD45125C309139D885C9ACCBDE42CDBB8772C615907F86050BF7C4B609215C2C1C294A1D3EDC2F606A3AB377A47BEF5705E2E384AB65A0714BE9AC380 -MD = 65CD32F48F386401E73F68ED25BFC8535B33E898C2A1842B73909E99 -Len = 8600 -Msg = C595336827259B050DC783F22FF7B033ECC98F9C7CE026809CF388FBCAA29A9D3572547CCC0D5F8D26730617933F809B9559AB20339FA90A525C46A299EF14C9045E6275E22C34093E9BCDB1230198433672EDA8FDA5B16EA9313242ED777E86F4AFFFB4BB8A9CC0A902ADE774AE688095D271CE7DF975F1404FA5DC9ACB50D66D2F93D77E262586CAAC610AB990974845F75820319FE8C507C759DA479AFC5557C32618F65EF7EF36E69F5C893435A592C3D3B3B8A8110811362B22F2D7A660A767D88D6AC9656F0D83F1D0395D477AE9DF5016D982BD6CB972D733F2E010CADAAC4DD20F8B4B798C12C5FCCCB7C7A166E3BD451CE0B83F9FEAFD67AF647ADEB7EEF023CF2C0CBA8C379FBC4A5A3F58473A374E09FF096091DEC2E5B35A4283C7DD96C46EFE4F2768ACE5B43A08DBDEAF95BE5C2DB0540DDF80FC895DCE343EA93ED2ED748FC32435E7B28ED8474EDE0AD449B32739F7D74A37C928070D0C1C30053ADECAEBC88F56C013AD5439AD2CF6A3876364A6B68E0D1FC20906670EBE4E85CEF072FF67DA097E3B6A88F78DC10F95520762EE86E8B26363245555DA07649300893FF36854BCB875AA1924B7A99169E965803B74CBEA05F7C486FBEA2355CA033A77C2F4164A06EDE30DC6244FDB3E8DAF9E73F83544B79BAB20851A640DC83C43C8980A2729EC01F409DA9AF6E9B5B7A6286AE8F225AF90B2E5438892115E6DE72DF2848376490403A543765ECFE2CBB46EA7F0999CB3993CE099752E0999D84C2BBF91A9FBD39CB721F4C6266FEE4DF896EB296CAEB2B3483B025E4BE27DEB57A3A706BFF59829BAD9F11EB75A1D010EF1AE926D5F5CADAD5CB3CA7160A66846AB4F12F036933C90E115702E11B2657031EB28BD1E2793D0D0BEF4234C2B6166A038CF67DD60CDCB86FB323788AA673F2CE5ADC8FA8AAE911D7363FF833ABF619847E78F137FD0959B983E764A59FED29CEE31F2F47715FAEA7F91483A6E61DD7ECEC557CF24BB64CFCC0708DB55DA2426D4330438C42A4FA7D9DC4A1C625823DF1D701BC3BC3AAC584843DE330206C45DF0184FFAE4E347FCE6860C7E0C8FD54BED94CE321D62325AE12F932871A4724677BDDE95E542AD66CDF491F5708FBEAE6A6846D7068F8827400C188D6915AF83542A51A1E0BACDD07E25064E2915EA78C8CA8327E2375EEA19C565AF6B837CA5044ACFC4DF68EE324D5BB8EF4D974368EA9B1369B567E6D5A44573DA1249C84A789442CE16604A94788631E8906398EA3C2B8EA304B11E522BA82401FA2338CE925D31AE37BB3A67160DFF3DB6F7ED0C2DF645BFAA5E276F2CBFC4CA288F2C3B246C67315235C0546BCFD3E4DDC2D6A2FA02AB780EB0FB3491239A2FA1B5EC90A0203DED372D5F594847D279396730A9D8CE5CC92AE34F7C75A07BB4873A5C5EE78268DDD0D8A351794FBD6C801551B39FAD39E6CD2CAC30D4538E90EE24784BA1AC0BA9CBC287151C7D8EE7FF94524FAD65B3DC45265EF3B708CA2BCC5D -MD = 6861B5E0CFC223EB2B9B735567019F90B61A76840C89005511B66385 -Len = 8663 -Msg = F651DDF99DEE7691F3D2B1E9A6F905E7675E81ADD5794FDF292A62C2D951A85FC50B8282BA72163000EB8D7E8BFAC18B56B99BDC84188745F121522903A2623011AF7606CDE03D4F09384F6C33B6A80B66E937D5168EFD4BE5FFC2DB831C373D418766487F2128E15F68F90A628A570C3C0FB9995146057BCAF4B20696DC183ED3AD7E2CCD22F6AF6FE6F4C928F07B919CA3A8080D41D43BBE8A9EB141769299EACDDCE3CB5E7199EC7D99E8661C321C0FE21735B2F8F943FEDA8B4F410EAD42C7B30CC255D14575B64442FE10059FE8B5A50A04FAB34119179E9DC47937238496EAF2DA20B51684E490A0315DC30F0785093A0461CDE257876BC29BC6725A73D0916982C67D8369406F8ABEFB07A914D8F595982DC021EFED797D91F76A4807CE3413F7773612B61FB1C80A88B663014F3E26AE229D24DC938E20F644BC9D88D36B8C57F39AA7021C23281682BBA46DA167485476476FEFA91C9DC32FE93413B52CD114B9417A94AF607EEDD3D704170B6DC3CF7D0A7ECA8816AA12A87D59F3E70BDEBE0F95535ED81521A1A05EC9155818ACC8A6B3938E27A8B7FE6AFA7DED9A92C817B22359B951FFD9327B40D4876E136183F787F33A338E30EF02BCE2B892BC98A97788E98E43D64486A071C227531422B8E264DCD860A0AFE175A0574AECEF3A922B567FB752CDE87276CF99D9D3A78252606B3810404F6075D5944158E0F3CDE55E8DCE033E44304923ECDCC9B568ABC96D5CAC6A67D6B47352DB6403DB88D5E01F88864432ADE1C3E96806EB3E7E43F34FD02C3535C942BA607A3C50F2417EDC6AFDEA7B55507B6EF6FC26FC7A14FEE085346D3D85A9D79CE26C1416BF7BD2E25ECA6ADA2465AC9BFD760BB155EA14AC6338DC1681B7D717ECDE330AB9CFDAC7D1C8BA5971DD433763248D9095CFE0090E76535280E84F3F947B3B03BBB2B48A53598EC0B1F0C1C641F8471A9355771F363B9BEBD9DA5301DD60836FE352B707DF4784ED7C3D1182131C0844AD37B9526BB015115F985FF5DEFF0EB72162EF571488A4790E3CDBEFFA14134A871CB5620CE8395296B44E4F12A612454708874DD4314680A65E1F89ED3FE8BC84A9961049BD82765D1E94BC85F8939D0935A770BC74DB11A0C125AC20F87D094C3532D58319EFE229B62BF8DD87010377CE49D7AC09C4ABAEBCB65BF7FEBFCE2BA9568877B6E16A6764CC4B084A5D1128D98C448979E25A51F1FCA4510D93F9A7CDFA9F509060FF94E9EFF39DED0A90118384DA0A8C5D68605EB05AEF013137F6B8A338B9B2924FA212F36A81EC7FD28CC358A095E0FE7407245B3AADCADE0A8814B2E083012DF68F92B44565D88DEFEE630D8A895FBAD3D279495A08B01180ECB9DA03F999FD0AA66E3F1384AE00B4F70B184DD954B7A33B73B8546D2F1951B4633FD43619D9CB3A4746EB2365756E26147DBE01C8EAD20BFB6C57C48794CE5A6778F45844D904EEE09A9D3E5CC06604C08F4CD66BEF1AB38C85B8D1845EB7B84D0DBA744DDF72A2A762 -MD = 0C647953EDED2AF0D379080D5EBEFCC37BC2958EE09339A387F4C3C8 -Len = 8726 -Msg = 123B79A25A815FCEB6BCC8E83CCF94482E44D6EBF8355F034194DEADC2BD2AF39ADF0C796A3F492F0AA17970A06D8C80DF998A59A68F831D80C7DF5308B91A4C203E7F6EBB6A01ACB7D04B90B2C864EBD6FEFA7456BF9FB729EC115585F802E624E675545EC1B297BCF971C308BE96612D592D3498EB2CC339EF2A7D292689769CED26679266F66E17CAB3567AB10979454B04BA49C6A42331B8C64ABD1C6AB0466502B63FEFC563058B84695114D819BA6CF2FA9D729CB0B91414A9B314B7032A42C6C72BE54CC08729C5062FBD40AE096741F17C68589FC07ADA4031D8D19DB1D6734DEB80BCD1A02399909BD3F456EC0AA84A706D76745448612ED39D2670CFFC4C13B51643BB790DA50F1D87317842AE08D6D6D1F0A111A1B02EFE2589C1A87266A90F1517C768AB0F5206B6DEB78ED4D41C89E80031BA9323876CE882468FE111B8A2ED80D273E51BE945C0F9F634FB0A69A737E62F40C6E242E94DFB86711EDCFFD04F6E59D88E131452C1681E7A5BFE5BA50B696C3E5A69E0DED145C189481F4787BDD2B5CCF0615CB8C349516AC0884EE017CE64C1242B64C3CD8127216A3FAD2E00C2C1D8CB83EC86DD8D9D1605A9499DFAF48567FC7E02D07EF65CA878933E037D8CDD046B336AD7A7CD9FF8951F86B95AFBF3262D5173F493ADFF9BA4DA880534E74C777D883C20C9CAE67DDCEA4802D1C20D8629E7319AB24777172BAC37B88C2F4A86BC74386B38630E88A0B9586E874CB7A95652A3080152E1760A112D05FD269C6DF17F0081F32B746B38D559A39A49B87C23823A9A856C820A405F3C90215EE09CBB39068C82FB600EC2121B410F7D4B5B40204181E32931C8ADA04A10A3EDDE17C759C04A6DFFB064E2A2330934EB5DC8D04D6A848E5576A0B61519BA5823D068AACD88C093F63A58F6D57FFEB66CBABBA9CA432571C9F6B8C574B6B7E61CB5CCDBDE5352ECE4E39F61D1140A0CB38B3167EBE568B1E4AAABEB2588D8AA78B2FECB43482FDB50E122C3C2D5706E382A6FBA178D427622B24F371451E4E6032DE38B2983A376B708149F61E0DE1AC15447EACFB9BC827A96047AC5B0FF9B8C60DAB83A474F2860E09334B64611562386C08E5189847FDA4F5740E7614DEC136172D9A563F0E70906DD8E9367830093D34D002AE3170171A0F90848988BA957A36F119A5483A0A008F093476BAB7F96A2A8378622F7A2F0003BE0E93B81A6848D154B672CF1BFD2E0FCF55ED5FC9DC2C542834FF37C44045E43201569A66E6968E44066961045FCD16F97C8022040D2CF95A5182A07FA374C96B618397D19C7FE9E229DDA166D0ED0109D575D73AEC653FBBFD41952989048C5E573995AFF63DD618AF3B246C287375A35F60B71C86F1EB0E2D7012F120D1C970E01328ED7575D5838D6C24A8375EF829DF1902FCBD828992556146FFD9C9220628F474DE6A4C748D4A5A1E14E05EC3D96DFC861291D550422D456BEA97980DE8DC655945AA38EB072041873AD1ABCF502F7C533A06C822BE8AB3BEC600F347BE898 -MD = 358392D7815EDD8269C446558C7BC3284D710B7F68CCCA54EA8BA3C6 -Len = 8789 -Msg = 78DFF12FA69D2515B5D737BE80629BDEFE037E44969360C7F118C48B4C0D93318FDDD646F2AB047785463FE6E7B4A47EDEB4DA58D8DDD4770CD3F97FBDF1E4DD73C2F5DFEFBB9B148B64F565E4F351441AD4DADA9D65FAF02504D291F686AD5AC6567B8DA76368926F0AFE6021F0B84A87145C00B768D8F34407E4434316BC7CC91D5CACDAC925A68B2850433E7B9D1E6DDF3A921AB5B0A97484A555A6E615645F826E7CF27A8B80A2072414D34BA94A13FF608E39677051E24636CC4F4A7B64FC5F29DE305E3CD539D451F223889F2A5DF9636A1C6CD4D1D4EA2E4F20582635F8D682712E1C1D3479AF8C8B295D8C8D61AF0D7F7BF1A7F19E3E0BC6E5FD307EF82BEC1B06E7AA9A945F6700986D7410D4BDF34D6D0B3410B6422C85439477CA70AA8F19EA96894CABB3D92FA47F605C3E70148EF2D09DD39950B2AD6FF55B59C18BE58F2E08661091187DE67977D08E4219B21264CCF28207AC34E5CBAD0D6D35D549AB7FDB60E495305972D81CE45E3C127E502E485294A471552F90877B41A6AB9EBE49D88108054CAD8ABA325A040FFD744B63170140D8D0281C4181665D65222F98F71717CB65CE8C18DAB878C9119B820AE8DDF5798B6311D2ECB65C47FF4727EA178FFA3597D14DBEE9145F640A4EF811B8476744298A94B6076C254D8D28BB1EA697BE43065D86B46966056A40882E0DF487007B84AA5452F5948037BBB559F05A831A54C815EBB5DED16F3D83345670F50993D2057660686F5FBF4D5BF81078AFB049E8326F271B350CB5903639FA729249924FF60F5E7B2382A48FF03A406A57DB2047702C7EDB51D29CB577DD3AF7B4D20E1CAC5A48A130CD98996FC6BEF56E0E74E58D8A644D2B08CF7E87BD58D6A24590E7D070D67BEAAC51EA997CFF060282F7FDB7844C2EF0355C9E12C71D04479DB5E1564EA7D6D503ED35159D27C477AE173718896E698131EC58472A96524C1B8F074C68264923CC83005892C7B4260BA11334C0C4FFB3C56976E1CE1E137B8703FDB48FEC85965559E2209D1D69AE218A14AA8D6413CB7C2EA238E25C3C12DCFF7728C5B22BC78881F67C737E72F5AEED0354EC249345E898DBC674BCDDC183B14DE2127947C7678092E58586ACE72FF696A1B0B96B86E06CF48295B32214C4085DD60EF825D018FE2627497FF1294D8B9AD5841C31383E77966F8B7DA1F220F8BB6300B98BAE219B335BBF2DFB0D44A2000E14365FEC8C23F64277AB3BCAAFB112ECFDD12CF776E0D7EA8AA11E043566652B01DA47B39AE84A389D752F670CCAD570CD502784844F57FDA54DE08A28D5B799168E3F0AAA1AF9D76F044D9CE6611F2D79EFE05BE9872D2FB27E3BD374513A4DC396B228995E209B1206A26FCEC166E08DD720AE6DB2A192CB43446F51EF2C0B9F50D97B28A7DC8726E875F075265F175CB2FBE1C00AE0744245B757EB203C5FB5AC2B035ACD57818E1153043384ACF5C05E120AD4FC8750DECA96DD31F45979989ECD07B665ADE14BC9910D990E61B422D8D3C61F1D27EAA3666B16E148652991C0 -MD = 1D614A6A88B2BA60EFB874F82B7B6456326BBBF8CAFAC70FC7815F71 -Len = 8852 -Msg = E619EBEE96F16F97112B0813A0AB159241632EEE217392C5BD69B8D6195D7E14AE93CA636C679868C55C346C7047AE1EF4F24D55F91452007D0470D99418AD40766D24A8A4CB0446DF279662F75086C5A94C14E08EE501E15978BC314265D33EBFCAC89E0DE1769DAB4E36D06FB2C33E53A1CBA258A7DFBE6974F7F8A01B833FC1110EEC4EC644F1D6CCBF08903CB126EBDCC6D06EE70CBA669F9789DBF11E1DFC7860E859C2AB518AE02B85A20AAA8A2C5C6D49F3522CF65B7E031238F4B9656FA07B184E7DBC2DE4722D1486ED4A65F96AF7F413E24502A8FCD0457730A01013A054843A14DA804D6414D84307A8A2CCBBF6861F575DAD849319F210F357D6208F728E065B8888804E03BC38432A65C996F2CAD4AA51E0185228C1593BEA3F95417E29CE60600FC28AA724E4F57153D198F44AB93AC8FB1C856078D90C7E0BE90DDE4CE4868DC7647A7E712EF07A584CB6427EDF48678760AC646F6A4CD685BED4C0F0EB8A48A82FEFC5E5B5EDD828865958D66FDCF710A5F40DFD1765A9AD8C5C34DC4C86E24845FCFA225AB562AB84AA345CC9E5160911CBA7D987289FFB3586434F79839124E76EAA65650C8A5854BFB551AC306208A4F4DE27AD11093F6DC40C52D4EA4819B82531121E0EF6774DEB13B68CDB255E293DFBA047A2C1149F9794C08BC39AD8036F704DC98C39EC76002DE7D405A99064532CCF6F630845195458B503A050DD873A11D0AFA853976D295118BD69853A948253338A70D05B8ED71C77715CBB1D18CCAB4E0239D70AF64D6B21EBEC05DE6BAF051B2B6B0B85986AEA40DE96C1DAC44459883CFAE308AA13C33FA12E56F5587E67020D687E7EE6A14EA152D7CC50F493C0CC9AE1DAAAAAB662BAF8C7BDBD1BE3865EEEA17F102675BAA66ACFEFA5555CC7F0B725A1FB1C03FB0CA438816A6FCBDEFA4A68B381F71F5B4AF6B62037E92B290A6CF5515CB22AFD9127656C129655A0B8179E2499F0D8A070EB049910EAADCA6CEE07B1764DF09D00C10FDAA95F2EC140DD22F5582C232B2AEC6CFF726A98CA8948D551561237FA483FFAD8E055D07479948922F93DAA878F1F409EF769782087127008DDCEB4157E329AABCB1851D96C4F4BE36F04EA646EDDDEBF57EBF41C558E76A35E986F5C933FBC618C209E469A839056A130710B66944EDA126466A60594633FF06EC7822BB08A07BA47FB7C72283813A9FF0EA22A2ACBC6F5AA85FE36E8EAB3E1CADAB17A32E4EF038CA2BA5E22E1A159F1385E3F8599A7BF094A14537D3F63C328F1FE734AB7686A3529F5DC0973D867EBE7133A05D06E687882E37DACAD05A39CA82D2C8EE3CD976CA4B6FC2295DDDA8D7D215616184A772317E6999D607F94E27DBFA6ACADAA9C41242F7928AC987113F811BBFBAD83F0577699DDB006F5036B4E826F64C503F32693B3F8B05EE84413E9D0D68BD8717FE449B53385CF927E14A891D82C93CE7E14206191BDAD4BA16168D7BFD623A85F2016CEE89049E54448C5AC2078F3B996B98074634E5893E9FF2E1CF5A16F70DF2AC3F90E838385B0C5FBC0 -MD = C730E5085EB3D03989BEBF439098772CD7172F59DB007F25021903E0 -Len = 8915 -Msg = F8173197C2B6D5BFF78A2842AFFA759FF7B73D08C827612A18E51E5B3EA478345D7CE4A6447BB88A965876FB48E969D7B75FC585481B177204EB37B5809A297B734AFEB5F9D274C21BEF6F912FFD375C56446C29EADAF3FEA964168EB916B4F94D73B12CE2322D2DACB1F6DF4E536EC5FE68F9C5901CA315CA17512D6B33FA72FF34B84487A19FB64086636B839AEEB2918153E136FB2322557D7B6EA71ADEB480D698CF336EE606877EAC506690C0FC7E4FA4E9E15C55CCD603C6DE10BDCDB93C3B115D8E360D81B52E0FD9D323D7E7F77919DD9B02E16569CC572EF0E33F0B8488B128585C51DC103FBB73B6FB045AB26EF4FC63C2E7EE36ED6A343A9EAA53D5A5D12EE4B18CAD65DE75A7549BAE2259539485A9EC6B0698E8F33E76F57F338182572233050035AC893F0A4694FEB0A73C8E8C6C0082D2CAB4DBD35FC6347A0C2CB9F3AC55013E9D45633798816A5A0FB5BC4E71C55919EE89565EED3F67212395652FAA5CC7AB6176D196BF5CFE93685FF4247CAF88ACF5B4869332B8F8A36C3BF33B3FCC2EFBB83BDC8DCD3C34D7E70AD34BBB1E6C866AC860985B3C9D2701A2006BB27A9918A04342DA79389BFDFEF983DCC23241398D5E5902C19CD3E3558DAA08AA803B209856382A0403EEA6D6DD289F6C57CE34D8BFE56E233CFBB263FA4C0FA93FBE898694A1B02C5376C289A687E866D3C46DB62DEB7C481ED6211C73F05D9C1401A5EA2365D24ECD755320EABC3376BA4BD2E4A4089B4168621572639A8FCBAFBEA30FC475CC00D962D6C59E848772636FA74799FB558E2A9B6DE3BDF28722D3FF305FA7A290AB5210DAE12AA62E8DDD0D65992A53163214BD6BDD012950B5317673A6B6B06849F374DC5F357B13B0DFEB4A780BDE3496C32BBF10AD3CCB2AE219E1237D4BF4233C658BBBB00CEB70CF3BD459C7CEF72C35FDE97C6660D923263967ECAEC165EBAE1E20ECFDB714ABA8CE3BE3E301E089BB1EC4191E4A3157C2D29FA6C3B2045193FE0AEA759A9EE4134D07803C3BC28106716C03749832B2BF98C7054F3B6EE5A61562CE7EE636DD3338E25EB8270CE5AD980CEC1AA7BC823972DEC81186C1F0C908D92186742B3A02D6DB940D7643B3F211E99A7010EC2527471680E3AC990AD5AA5183074D4686B3F059E09D48D254F26BA5100B272D56036CC0215038CD528CFE59F14DC7E7FC1FEA441B9DFD7C27EF3C63D913356D49C864E85D41705DFEE9F6299D1108563EF9424A4455C64EB83E554303137687B7E54C2A24292397FBBCF981B3881E013623AB31F13CDDB2316DFF34965211A58AFA8BC4A27F20CFEC5EB24A6F11771E15C12398BFF1367FF97DBC6B855414DE935026249769DD2CE9CB5A78535A215F4A3351E7A5E7FC9276F39A581097CD7377C941BCC056AE2565F3AF66BCE40CF76CC7F600A9FD9866D783B2AD69A1E3DC265D461C37D186934314002C6334FCDB5ECBB682AFECFBCDE6B07F46470AFF98C95096F43BCE8A22A30DA7C70693448E5A16F19587141C32373C40E638B924F3988B36D83563CA9E4E324AB2CD43838DA2951601B0F640 -MD = 27E1866463DAA0C0AAEA378934608628E7FC806195BBC61F57606E42 -Len = 8978 -Msg = 7086C6E48A8CD2E75DB8867C58E9FDFEA4CF3BD9B336355F70E74951EAA5767445FB74BB00F92F49F51645C60FC975099F1E1DB4B20EB903ABEDC4A419EEC64E14082CC2CD85FDBE9BB7DB669244965883D29A127EAA841CC2AA8C9E619DF314B7985C1C4D46717155D222AC79E7FBC328917F684E8A4080502147DB9ADA1B4EFF5A321BC3BD380D14490A66F73D326AEFA5F6ED2355D2CFA6E4EAD078C586488A7F7244A0C95C9B2D8F9A14DCB4545A0576C4AB9949309F0C54840A7B4A3675DA85CC5318CC37D957542409FD894FEC575675C5E4033948C576CAEE566F288D002E7A1D74B46C94BC0AF4E408BFB1E6F7985CCEDCA9915DC32C9E24C05D99D96673993EA03F7F430AC80BE437CD647DB8E7E0D432EE2366E49C71C04F57754F605E6637CEBBAF0E45434C1F9E0E9AD7AF6F53137A95ADFEB7EBDBAEFE552BE586518D6AD505157E134C0CA38D9E6EC230A5487FF7A6713BFD8D52F0E7FE5DF84DCB301B52F94962D9D4168468D327077865BCE6399830E2D6C422C63EA6FF749888EBA19DB5FA01FD67AD25075024472409D141DAC9D2E9BF544784FC00DC45CE204D7F47E22654F7F4C1A8293CCBF4B5611DB3D7BB00E511F1215ABFB297A27D62A2782DB733A5F7B06B9F7F5097925B187AA06CB5F2D31CFEFCD4F6D59FAFEA38BC33D6D4A53DF6ED982E1358D0AAA5F4D76B0513B0CA54A1A63B15038BCE46E6BA34273CCA5BB63C9819A1BB72B0C71C676B4BA9CB42233A1ABFE66CC75C2324398730ECF2F3639B625523B763A95A80B42E137E69D87E757EFA6BA6A320316618825EB373F4258F7BDDED8879DDA2946E4AAD115F26A3DD26729364A6737CD4802B8E14965888DA53D6A4F56CE839C43B9E1748093D478C1E01A43C6E6B50CEC65F4F226BB478806B91DF03ECA329707F4AE52FE741182FF903F7B9B6A473E9F49876D57A4784891CB79E785444DE5DB5BE2A7CA997223935D9ED406BE863C203E11E11E25945E1C88D6FBF58BD12B1223049758F7F14E259F1EA1DFF25E9597B23D9AD1375C4F0BA7BBE957D08AB848E56AD4C6F9B914CABEF9DB754C75F7E1501342FF66E95DCDEBDE952642EE9A839BB47385BC3D5876A50A0A33AF1874D0C74CF2624F4113A903C7C39DD0C5E26976CC712101350BB3677BF8C7F2E2669D4AF74B87C879A6B040BB728AF6301CD397A2A905B73D875979B3F43556108C4E9EFB946D10A03FB208F5CE18CA7ACCFEC87A90440D9B8DECD75EB0AC2B41BDB396673E20B770C6CE4E469A2BD66C8A3CFD802CA05B648FBF6E305D04782EDACEEBAEE642CC0BCE0863E7E32084EBCA17D464033903F2BCE109D15CC6DD0F462F83910399CABFB907E792452AD085F7D52ED439C2009881D15A8F28EF408E3350F8DE8747C3C29D5250F329B5674F96071593AE862F0BED79DB105A02E67BAE3DE34B1150AFA40E325E367BC6ECB28545855704BEC4B9E3E7A1819D925FF5992E3A299F7E6F5F5DEFEFDD7212E235E3436851FF08B20535C9D93809E8C2062627791862856E0B56FBE1594AB23F7319A5E30AC1639F229421DEB51909F37DEBA00 -MD = 6C038A01576E7B55268771E4858BB390A2BD56A18511F0DB775D3D32 -Len = 9041 -Msg = 825C8B48590836FB98C800D60B1EA8F3CC72F363212E11A694469AE54BB1EB97B81426E91DF53314497E21E246B9B52CF93FAE8FCF144B9CC4F14529B3705207C8BDE7212131403DA470A2B4A92D75F7A1447374F443C490F1C9F9719CA447E513A7C602625BE4D56F12B3C47245548EFC5DF34D40D6CB9C6BD2871A9FE7ABBA53CE9D823605D643B7D32E834DF307EA21466A25903B5E4354809AB8A42C01A07A00FF1798D97811A8E1BAF1F80196A14AF7EEB35E21D234301C19BDA2374B098A3E8B42497FE1AA7F9C099FF755540830FE29CFE9321DFCD59F612B3EDEAA28FF3F704CD94B61D572836A9820F19DCA81D8D206B42CB1ECC0FA00FC5ECB615608528DFEA046564A592EA4AD9B0283797191235CEF297BD19B7C2CBB10356BD55332D1C48D92DD8CC5E636E0A4ACE4CE0FFB3AB421A8F4A0AEDEB0677C62A891D132FCE1AE9488BD5D40433273BA1021AE59C01E6A5112C6C7253F1E9FA9025D134733D11AD6EC0525A305FB634E177482D1D2B3DC7121B75140FC6F6CA3F5605651148787287F7A399492DB40ECFD2E2D2E600B4427BFBF5AE62EA4EE8BCF1A820F2E1CA25A46EF882D53E589EC403524388CD716635757D61B464AECC89C01DC04AC5DFA0820145092E7CD293C8C7562D4795EB7EDE8709E0823C3A54CE1FD369CD94746F10A5E81EC5576D8F0DB99A4F407F4D1EEBAED99557CE609E38F5E0899285E747B679769F8C0068622BE97F0C5AA429776C8621FB8661B1A40DDFACA63DECDAB8EB026FB0118E97142AED063ECFB94939019007BE61E813AEBA7C59C955E0AA2A4A570769E57A59198450929BD7FE548C106E297824D5C81B354169D2EDA0348F4414C1F4C1129BD18E78559B89D2C90F08A347D6059330B245507B9AE93CA5F4A273EE1181D84A257080BF7D3BB0C81133E920775F65AC5C97628ADE6A23038A9C3831C52BB7CA0BE86E2C6B6F3C942DAD7C5C8CF81EBBDE90D7E888FAF1D3060CEF45180CBE9FE5DBCEBEDC038C51D794BF95851796D071AC6C7E0B46DB92BBBC7F13751E52A035AD3E7A7656D341D0A0CCC59533945036CE9A128222E78743095F83C41642DADA8DD0A2C48525D6A4EC8BF6148CD949954D56F7F95284042EBC1AB403C6604E98A09496F6AC27C05685E3FDA9CD25403A15E8B5555BE39D735A25484A3E9379CC6F79B5459B9E10E6C0FBD6B0D94F91636FBDF0421071A274F0E932FA3AAF14485856AB366FCD96F7BD90D26E03EC3F64A71E26C683B6FE2B21F260CC4A2DDB2ECA0B9C9ED596E792B602A9B4140076B9F1733E0656B2017A2362B39DFFA4E445CB318DFA5DFADFBB735EE47BACA23570951ED1C5D0FA596599676E5E395FF410CF29A8E968AA38F4E2D966DE2A5BFB86DD835000EABC8C1BDD9CE8762B2B79E764E1C4D4EBFFC9F0F5F0F49C3E118DED7A0F461F2C0911EEE9ABB444906CFD914FBBB8E57EE9FB6147EF6498DBF4C43314E9ED9DCF59ADDD1259EB849F3288C65C36AB34D92D0F431529502F22B1FC217F48A19E111B448516A63FF1DA7DB2569C84078B73639B589BFF6D086E8B3EE64C41CFFAD17E68839B769644680 -MD = 3B9AE846E0B15DCB8224E94BAEB32BF7E93328D55C2936F61C3C124D -Len = 9104 -Msg = A867330D0C93083FBB159EFEEF907AA53ACE3995ACFE7587B404AF8C8334E32F9D35976D0466659F264826109B23A0DF2056A5479D0C0C5EA5166CA231525DA90B388C43259BA1696FD392FA10D146258040040B6AC2C3E91D1F224E2A2A0AB323B4CDE6EE570B4DCEDA7958D69A2FB85F0D9DAEFB3715E5825298B7D3D8F09268413A11B30A24358755F7ED9DF6F2FA9AE7A219E65BEA978FA1187806386EBA03AF491A1D5708AF2409B82DB03A19D665EC58119AC537CBDC75FF3ED1E0D0A26D291391DE6584BCC0D55B9931537EBE21F42AFEF05AD755DB1AF60988DAED8CB087733421679F8B2D381C659C1325D47688F2771A03BFD31CF8D3C20FD09F603BE7A13D1BA8D37CF492C93724A728BFDBCB6D3E8F0D770B5C260CFA3515AAF7C25FAEC42B2373970D11EB2A18C863D0D7121BB2DDA1B223B883C468281EFFF0170FFA48552F263C308658D969866781F041DA0AB149EB2020892A114A4A7758ADAE9FEBB4AA76604A65B87A2A5D0A45A8096391B3D1C09FC95746C449BAEB2F807AFC8E4F5EFAB2488EC19805691162AC8A3EACA1D25F0F4EB95ECF48C134584125AA0FAFD5589847E656BECADEBFBBD258EFCC6F749E15BA09DBF04B93877FA04EC2B6C3234FC49872C318B302252471705BE669022765FD01D157C4AA54173399548BDE8D8971A8CF0DB652814313B71BC062DB092FA5A5CAF1809DEFA1215B42B800072B2990E6FA31F69D52076AD293D966CBE4F89C6D4E45AFB76F23A5670E5B36FD60D784A736D0201CD2A119107F278E5474D87A97F53B12A8AB1D0191D19EC4103C472D1E7ABE7351258B26C445397AA5A3BA924238B275E7D53B20253695866EE8AE02F9DD8FA8BF4B76E549D9322BAEE58D70BDFE1AF34EBCBFD80AED8E40273727B7B919A28862171CDAE66EC885EEF41E5D237B9C308772DB7CAD7673646A7CC7CD78800AA12395E6DDD5004F0E4D4834B66D7EE7FEFBE4E0947CC2FE0993C3F506EAD51C9E9B6648228F03230F61AD23A708B11DCD328AB9081D102455DBF11A932F90946046D72D9102702114B8965F328D6F57DC0ECE0B1AEF7620640B4F43615A1123B6C3B58438B5760EF0BEE130C5655B756DAB1894FEC4736420180041698DCDEECB5EE98B043A870C9949B1141D5A0920A1EFA60A30D8CB33DB0CC3364C657EE7E3E582A2A49610E8C08B9ED733D4F584EF6B9FC43F62CFE9F69BD64C02B1D20EFE2EA9EBD6B6DCA5F6D9DE62A443D67C60CCE67C47B4EDAF24805DAD5AC498BF1634646D0C34FC3B7C4661EE8029CD4FA237531CFF681213012993F91106084DE20241CDE059BB37A26CAD85533E4C5E8A4C4E6F952162660C0C55D8E266F0ABDD4224487D06F7DA1F26B84D6D30101B535A1CE76355AE1D34DA2E71E244460848212D9076FF79D8A282359B8961C27A157ED6AA5E9990D56B4ED7113066BD560719A431E3822EF24C0630110AB448EF269F4FFAFDCE95FA57ADF3229E5EA639CF4649E598E70F517F8CA03C9AFAF4C752F7D14F96763F7A0EB4E5BEABE5FD17FA8EC15271A509B1BADE00D840073B52DE95C688F7AAAF25751055C8827D1C6B5BB2C9140EDCA4 -MD = 0C265320C0394C03FAE34D80DFFD04074D00C7214F95CECD9CFC8F7B -Len = 9167 -Msg = 92CEEE020F386F766D7621CA11BDC02915F620DD69CCC38E469689573616EB4D3152153A3030D1E65609209435D711C5AF936F9A7FA91EFFA3E8D540DF11534B651A1EE623E400936EF1A30027D27E83C74D429B6A5637F9400D0E371EFF58096091A11F4261CC9E568BD9E7812709392421E196F9A236901E6D225197F5121096F7045F105612E5CADA6101D437C13555545E0950DCFC8736CB6FAAA3B9568FEC0FE94A07CD24ED5A130F3A38B52218AA8FD45C36F86DE4D28C8C19BD85180E10DE02B070378FCA44217D0B206A601DBD8737707997E4E5285256C5908AAF93E18798D5882AFE78963D419DA9A7211EE4A7E5FD9CCD06190DE18ED4F9F3D301BF60F7386E204C00C49B65CAEF90FF5E2B9091A33FE468C21A6226355219BC7E419430FEAE6514EB1880CCCA53A7555DBAF6128827A6149E1C4A552800EBB545EE5319795DD096D24664E141BF867890FAE310BBE9A9C7396FC5E3D4B664B699F155DC9ADA52311E54009A75849D49ACA3B6F9ECB5185A7D7A32F4CF3B27E3082AD3FA93648E53CEB36F865DC1281B3A26707C55AE2E41DBBE8661CF91C89EEF89144E8DA0BE9916528137C6BC9605DB93E79ABC6B364067C38060492A73D29E00AA237B1BB9436B9AC75C5EA09D8D75DB25A7CF796EBD9F2851CFE0244C112F10E668B329099C0A0FA1C8F22315612B30CBDB02AA1C6D8DE954ED85F5964EA6022E010D5CAB9AECCCCC74BE6061E98C060F09ADAB123A1E6756174530B777BB7E6F8F2546BBD4B5A64ECE6A2AB408E8E1DDF6BD100C035E8A4F21D6479012562362043D6225BEFA2E76DE32C6C0F72A817ABFA3AE077B3E9A59E0D9ABFC0FF9765D35B46AA60939CE5DA2E4BD7057355FE800CC0A27AEBA510376D12D8523A2FAC567FD3159CC298CDCA3F974998DBBCD4673191CA3FDAA69301CC501A604C2E605612D53577799285DB547533771F22950D783E387728243FF29809278DFD139AB4B3C4C4F4F24BC00517CF4BB890FD5759A00E0B7D074FB76B0D4A698DD812C63667E660E9B2EEEDA75E4D97F8B7186F08E2AC8CB031C73A4CCD6B7503E8D6E002BA7EF3CA0C0B9F2A473378461810014D174E6269AABF1DD848B825DA2496DE783719FA3439651576F1633926B357CC6494974FA6DA53E1B77432B7AF21BD65C206BD9BEDC81FE2020AC230DE5F6BD2983219D41BC9827BD3DC82AD4160E4600DC2F7C76680C25D7F90C9304460B5D78752FBA3740C99CBBE6E1B06C15F33059129F71A822AC305560BB039CBD18297852476D76B060D54F87E6F9266AEEF4C560238969120E3976D16357313E1314DC83A761B61B2C46ADBDAA100D53FA87BDD8A493DAE2ABFDE20ACAB763702781C1912A68BC415A956913582963721EE09FF80502E9D0190E92246F9861AF733386F235C168D5A3F9714F5E109B9643704280BE4434A7815296020BE691F2BDAAD7D4EA8824B54E096F5F5FA9992942CB1B4D5D554B750FD5F53E7A1E0F4FD275527D48254B48C08076157DCC809DE35733313091762EB1405F8F22AC42646C1B1B697AB56E4124C167930C3DC794D3BED1B2A81C7B44F8E1941763FB4922D7E59091D78BEA4FE1D416 -MD = DE68F2828BF9225FEBA3640D2408E0E0982BDD6FE68E52FFB7DBC1C0 -Len = 9230 -Msg = 25E0DAD2B3329699B8BB27D851CBD4C2C03682FC66FDE47F7B132231BB11F1063C14EB00BAC7D29A593E7815DC4E4B05D316E7767D50BCFE073B93AD0331BDED37C9325E4D6A0485239C3A67B54F4B4C81D34AAE2CC52573F68059A82F1C49A06E3E3E279BED115897961464C82EF1856F02BD4024095FB551F0291511D80C7A150F49EDCDF59A68CB0F987981B36561E554BA7C1DE2F9DD328867EDA295FE6F93834714075AA24270CA10A0BE4AA6E15029642D3A24D4219FCB94BCE8F298DC787869A90AC5140F6BC7B2A4DE9C54B5B1828109B2043B98CA4C120D7D6B01A25F4EB630B98B500F2E4569E3455AB5A19429B02D03A453EE2BA667E9169ED1040C4D4EC3F1838ABFB30EE75BF9088AEA1F42576912CCC047DE92493A711087DF4E108162CF9150416A35016BF7AD5B3996D7DFF0A886A933C8DCFA5D45A7FEDB0495E83E9DFE98BC20DDDA4646C1A85FD0C8D7D1FAA8FEBB938DC3DDF552BBE0855E6F482FCE86735F9B71C27E5C97A64393B400BBD5D548607B545C259CA85E463C0ABB82FB050377AC446A40690381217D5488EB1ECF01D41980D19749D10AFD8E227C5E51975060997D67EB8AA1065DA8E6E664A9B6084D2C45E09491FAD66ABDB9B765094BB89BAB67E05C08C4B4F19310C03F46418E31C04A35499644AA8A4A42399F0A9E900F939BF2E93DE6B051B9A0D58EC4224A87ED59E8FA5A45CACB1E84633D2A2BAC27EC2ADBCFDE136B1CB3B3125E986094522B9A40905632592D71838C8342AD9D5F5DE780F678052352708A9D22C5ED4A0F12653C5B56672D42658C6B52CD0FAFA92AAAB9C34C5F3D963F0D2CE135F1BAB0A148EBD2147E3FFA4A3A191B02D343574F06C614248DCD31C1E4FBF76F53FE69213F2FB3912E718A6E84635EB6AEDFA9246798DA01F354E3C2121075B0220C6330A07B286FFD9075687093EACE7032E5AEF593DF9AB8A27C869E7A1918E78C19DFE8652111768E26A2E207857578D64132488B0B243415E6A5F77A4FFF228912E9A52705730E6591E9D91316DD3CC1C0C153B74B306D37706DAAF281486FD6FC2CA5743CC61FA479B5E531D4709E81A35A4EE1CB0A3A9259129024950AC74EF00E98EC17F85CA9C266C4945FD65EEBC5449D0988C754E78D33DD30516A1DEE05FFDCB6B8E7DB0F864D15C713EBC500F0878440ABF80B10E6E99DDD62D3E207AD73C9D5D5C09258F4F55F1F41CA0C11059689203639DC14D201EF55CFEE9C3A6DB64181251AED9F532768D536F28D15344AAAC877DA311E8DD17559A3CAFE0C158931203581704A9FD73C74550E8DEF9041F74B99893100844DA34827AA32123D89694C1BF31331A6CA59DFE5236FEBAE42754FA1D638D456B9E002A40908FAF21E17FC408CDE65C9B8941FE8397A7F91C11EC155FB6C0B54D8F257B143C0BA384C01CF8BD57BAF8F87EF84094F9D727C3B02445280BC0C49BED6EB55120BCAD0AD888CA3C83F7B7479B4FED9C9FFD37E978E85F24FDA2D41A28E820879F0F206C0FFCE00348079570228531564EBDCBB1A6ED9E2AA57C718E4448645B331CB78EDDC102443B284CA2B3EEB3D10B0F4873BA2DA65886BC62B4F5F32DBECEF93ED2D17D80B7E12C1A34C -MD = B41F72E58394365B66ACADAA03F535DE804D0DF6CBC69FC012DE3E49 -Len = 9293 -Msg = 0F8A1C69397DA3A52B544AA1EAC293FA0ED9C7149C97F3E524707AF6C8A7C08E4EB2C5269DC2CD8BE550E34051972DDDC3E9073A53E65B9C9626E5765692F29B89F89F0263371E22E6ED67A9CB3FDED7AA531B37D04C832C52852A3A67E7B1B589A967A8A43541AC3488E6DE6448599619548E792ED57CA941F59D53D943D038144CA8F9CB6E4A6FD5D7CD610C6B5B243C69A73A853CD88905914E25BD07CFE16901EBF3FA974CEE28F11635D062419C4546A662490DE20B0AB9625C7C5ADBBCB0D6C965F2AF323C234F2B5DEB2FE2476487F1A11379952D4DF181A1F3B54FCCE61245FCF30F887E554670763D44CC17A2536971A53D2FC039FC42FC6C7125CDE884E5D210A8B141F5B6CAF78387A58B9E1EA78241FA24DFE16C197DEDA3166A5CB7739BA55B55514C189371836BC851C3FBDDCC4E41A6E66D05A1669A1A614F923D53ADDB1FE02316D087150D01689ADAEB67B5055EE2AB45BE64438FBF7DCFC7F3DAE915F925EDEC41819C6C9BB7F693F113995EAFCCEE9FDAF76A3E7E9C9809F844FE0269E089FB1F0624579D0F1998BC6E8900DB09C85A1D9F3966D25B66B144EB2783AF19BA9EBFB752EF82C84FDC3E5226E9C484290A6FE4A6810D1ECF699B4FCEB6B1E89C86B1708186136013710BBDFD3B0B4C2DF5B426CB95FB1D454E266F1FFBF1E546C0D19A3E39D73A03E7CDA1F07D39A34B27142A5A96DCCDD51C3F961526928CC2AC9DDA4B8ECCBEB67680171D8AD1C1AD72FE1723398C3C70F1DF937EE196C1AEE1928980C51EF95450D7CA073CFBD204E754E79C422700D27F70E8A3E134C0173F93BE19724E68E692F3B744D65BAC303DF0ECFB0684D18DB81F97EA5084FF15C385F8F8452C21CD8A9E05925C318EF0A180459AAE36A0B4A88F4D89CF30E73857C2C8D88F4DDED25B7C32AE0DFFB1A4A854819F2013E7F9817D0B445640EA06F4611C06798EAA92667BA4A8797E5EEE91211D0D5C0B49395BB9C672F08C9E2D2B481B59707E82B87FEA005DD36428783A5DB8B4497FBDE95C69E902CEF9548A40BB508FB858A162B66C9F6A38A6BF17CEBE0F0A1F5A3F529C1B3597BE2E3A6652A8396A804D53A087DDD91144F3000EC97B2238E277CB94BA813BB50B2B09CAB6CDC2A0D7134BCA2869630CD80F109BD8CF432096101B46083081CEAAFC1F8D3C2EE7E8739A76FD6D594050D5CDC6E3D558576032EADCCB00DE9668B3530421169EC6835BA1601BAD2634212BF4C5F814B5A30F999144845D5D943F2BBF051E81123D78AD8E9929850CC8DD355D4B5386295C6E6C306ECF687556EBE65DAAF2E14E59339776B62A159F410299BCBB517CA8AECD1E5D2592312DD22C35D24EBD13086002303CA799B3EED635D2540DC049354BD4FCD54D4CEDF1B56625C31108E686CC63A1FBC12A1478E713293FFAC2784C9EEC6F87B394E46E6D22DAE1660AD1E7D11128D04E386BDB7F0E81FA7AD5DC9345022DEDCACDDC4B1FD3177173F11F9E2493468237444A466A1A138C5591E7244F2621D8511170DA09FC9B8057E341EA92618084FB9EEC757B6B603DE21C1FAD0F78A3017744DEF3729851C299F63BCCC495D04BA8CCB501A3BB0AD26DF499A6AD3AB84AC347F7DDD9CBEB1939E1C050 -MD = C7A0A4810D384AA15CFA8F119C94E74E4587B5C3822D6F875FE6B394 -Len = 9356 -Msg = 0AFD9AC3DC31B097AD2CB163068293CFCDD83D7F73F32FF01DD695632E3B2A2DE002D18975C4E3CC52AB7EC72F35C6155873036AB8491877D17804395DF7C40E35E2F86C326E44B6A0009F0AAA84553891FC41B85D902C044B2BB2C83C39AB4BA430E226A142C6EA6B0F49DC01BFF6F3547DB7037C452FCB8E832C54B958A50C443C4060E333B086DD204AE6D82FFB69CEF5610F1B837B4F7CB978496002F803B1BC49EFAEAFCCFACD111505761312F14F1863DC98440F75BA1559101A9B7DA144600463182C3D4C1C532B7DB63242B12EDA6050069D736646B4B0E417317F241CD9568E83F3DC18853310633C418485A762335285F0417E14CA391D23FB1B866AA20D58AFB5853E4308288F3947CFAF2792C1A53A6592751A521921E6B382592A2E807532F1CC773778BACF4D7340304ADB23273B214F7E66864D96ADCBAAB58FA97FC77EC2F1DD85D5151E507FA117FFDEE20FF38E30D62484A9B552D3219F43CA9B2BC70D4722A94BB2703372F4F8CAF538FC19805FC48B8CFC04724F69AC679450E190F9083F78ABB7D04907AD79230DD6B4811CE16235726A055911CD7DB15216E0BF527612ECA5E7014D09698259212F59315EC14287FD0489A7EF3403E32AAF70B7BCB76F7631316F864538C7C5D367FDC4EC981948FFE09DAE718E12EC8577E55B8DC142A2DF57F90FC521BB40A8EC5AB8F81B45E808691B406A1AFE6357DE3B8B715B98029F993C676C89704982BE90D1AD82A4688549A8F46B0118190507BDE1087F55BBFF2505C15B9E9736A1AC03B482C3174D473FB1E8C6D4E268E47FC1122D2A7F8393E0A9ACAAB013603D3837AFE1D425032D538A85C4BDF30FFEC80521915F9F5C03CEF6D7027BDD12BE5D01923F2E3AD4818FAAEE711D0F11F3FEFF1CB211806AF73BA27E04652152D20A8C49E225F71D5655C27050352DAA55D2B2D03AB2D1721DE4B208AC799579AA5DC4A7CD7152B3A0D60138652183B8B69C1EE4C433D32BCD0F7016FCCC5BD55FEBCA66AD35BD636069E9A47135BAD9B7B818AFA43079F5811053E5313177BB9538C61EBBA8170EAE99185B3B4E140F8C7F6C0E769F9DD4C3ABF86A40D6073863E06DF542E4B52525629207D257770648DDC48372195E8C19F3D5128682EF4C17DF98A04B91C4B4849B7E03AD2B5199A5DAA7F9C85CAC5E573386E5DB5B1B189301964C93F3A6F751ADCF46778AABC33F6DE5840FF562DF250C50F5D60F52D837408E1DC2550CAD975C1862C80F1E18C0002889F9FC849633D746BAC01EA7A8995258515B2BDE72AAC3FBFB11DA48FFEDC194FD8D56D583B49217E84FBF2FE258298EFA13A3A0EFD9883E3BBB8F3F6E578BD45C41AA45AAAF2246B52EDEFC9741BB26C7E36B506C4E418553340635930D1A3772137BE49061EE8733AC029B3D15621EB115809ACFABD63FE791A322BED17F630EC8B3D0AB6C814D217D7AA6D2B1AB8C1B259CBB8F9F089219D043D0E7BA106F74E0453194EC8AA005C56DDBA0946A4FB68C62FF24B9199FB9C7A0750FF1093C5AD1F29212BE12C869B02BCBD3F1D927C7CDCD4FDC1C725F8F633029C661004A8B61163DBCF508966EB5E808CE091F23B943A82EF28B425B5DC6F0A87C51FE2262CA141BA046E7501F2CE3B8F040 -MD = 1F9AABC1930160521CAF32AD3D8D06CD733E6B5D3C669829241E7EDC -Len = 9419 -Msg = 53350F530FA1648F6AA19BCE2C2D92D9AAD9AA03C1F00F85C63E3584CBBF13E3EC01CC0D742B8510BF7B138D953A0C8ACC43DE327145A03E8520C50451366CE52D259351FD58CA6091CD5E93A1BD4876AC007F71C6BCEB405BDCD4C7E76AF4DB4024B9D8743ED5D724F99332E8B947AED0BF286E1459565D53DD7C9A91365EDF968AB47281621F05ED6B4044123EDD63BB924E60174FC7362CE75777D38413931AEA51B69CC044C2188A926F5A29902F2ACF9554C8D69A1A859E345D1A10DF525529C2E5A2F5FB2998085FE1E6CDD0516C836481FA05A360F86F0C9D67F93082D9C672AAE2A27E78ACDC9DA09C58490FC4497D67D348A67ADC7223E87051F76B38E5B39A191C1D9B408FD6DEA04ACB22CDC0AC188DC8D62F678EB784634B715EA496C1A48592A740B0DA1C84149B975EFCB70496A802A3E03091F37F1E8F1FF699CBE799A9CDABF3A92FE9EB8ED8E487624391F7D60207A9D6B7C374385A188D36AE790A65B1F8F80EBAFF90B93B98AAB0E68AFD3924B35CA13E0D6E5D4560019B2F03313D5A2BF617A387BB5CB6C7E8082E1E5BFDEC38B8BC0A14D2DF2E06EDC8CFFAEA10107AC82713FFE1CEF0534ADA67382975C17A7D03726A250E799A3CC8AB94A5085E4EA329013B2015392708A76B27AEB5B5568ED0D97859D21BE3D74305D4B967B473CD5374B45F294A0DFDD7FFDCB64A696AF2870FFE02B7DC01D5E8032FC05D8B5EB2BA6D9D17B9F65C7BEA3B05315BED667F2A88A0B11B204BCBDA9AF00CA578CD3283434335046525BE74C741C811A3A08D851B3E1A17E17D075C6013448B2383442CFA5611C6BDE17E04EA585516CE9C1ED65ABD28BA8DDA5423FC01FF2B443DA47CED6DF6715822105851BE7E1FC2C5369296D2225CA5EADEAD2616FA9ABA029660317E23E33855773037C0A19DB838AFA0EADD0ABB4109A03064C8D73293AC2542242FA157C326201A418CB2CA361442D6DE6B247256E165CB0EB77FD68BDCC6F3B16AB0A5BDCF662262B6C0746A4DF8712BDCE302A3EF88FBEFB562B435F1C7230A7870719A8909CA0EF79E47407902D1E6DEDF61CE3D6E797F5B314DA6D4BC53034641ACDE30E465CE71999F9F208AAEF7F4F87E0314AB2826995C3E082CD3D2059EB7C4534C6D395BE531D3C380D3EC832E886210E2C35923BDCF3508B38FD389DBECACF6A12D569CC668282F877A24403A3AACE88F571E6E3335BF732C83CC853006E1E9750D10E6579379D7D322CED953944DE38707561AB883906A757DE62CBC69850BFBEB00660E39C70D1D610D7EA634FBD4CA2214F9D1B055883D36C7B1CD03A56FAD40E21A3564EAC73F40A20664A813332CCBEAF6E4210FABF736BD81BEDD4160A268F1C508AA08F75DF09440048FE888DD194B00593E76F42E27DAADBBA7262E65D4D5342513E6EFFC544B98D6AEF547B297AE6F0A036FFE97725804314800B312C41D3AC382E81861B9E88C6B074D8056BF32F870960BE23D7EE980E870098BF38F66583A5D9B8F3B4256D6DCE7B10DD771BE81D3F52FB498D19150A24C0D08843946FF7F4EAF6F7F6BCEB86736663CCA4A95BCC4D11DBD0CDA7F997FEB961E2F579C65BD4508CB1C88826D4D7E64A4E1558D3AAEAFCE3970FC290F868FADF1D4527898C7C14A4241C34320 -MD = ED8B26EC7240EBB59FED3B8761F8E5D037A66FA59BFA22820C47C605 -Len = 9482 -Msg = 59A4C30DE9D5C0D1153D1D30BDA2AC93FB8542EF67F70515BEC2DB23131ADFEA9F2A1E43187FCE529A157AB57DD6DA5C5DC224F3177F096487CB2AC0778D0EEE2255A9CC6E8ABFF08A1FB138C6A677E46E4CB673A33FD586577E65383D2D9D99ECEF8BF97C53738978134BF6D79C735783DD1D8814A9A346860E2FFE6020AD431AB832A8D5F4627397F661457F74634D9378AB353783B92EF0E0E117C74B5FC746A2CE80B4860439381C52AC2839658BD989B2BDB61E228B57E33CB8684F55E6ECD67A590DD84326A8614539BAF933A418D4AD33A477F4FF8883D6966BC9AAA3C4EC793F003B21E22143D4BEE828B0D3C13D67A8306C41DF3F56AB5D93EDDB7C59A2E6E410D215D471ADB42425623C0340B4C6796195F3C30276273E3711023F6FE07C020935868F2578FB22E5DEB6DE174B2C70099CC5868E257215F87ADF2239597B3B4C061F5A3E1556856A9D758B422B0DC8677D28F622ACE03015D7348305F033CDA807532DDA8E3CF1D88113BF79B47C77C4A8896581F00C2E6AC0FAB5E9844A09B2817E21B21FF6CAD026B220BABA77FC91276308B35A5230E216564A9BA8A242EBAD36E4D607CC482B9A7F08FE7A54B90613ABB444E29B6611570C0F953DB139BC33AA9F6D262CE137250DC158E3E38734E989794116E0F35E0D1AF2ECFC72ACCB821CA3BFB447A1C07EF8490B57FF94E77566715616FECB930E524AE885B9B4FBC90C957ABC1717C0660B5EBF30310F30E76F622618E3B3A32A2DE9E50ED8AA90A80337D9454ED4C785C4F7DEEEC5B0C0652298773CFF3599680124B438B2AEF20224B6F49E82E664649ECDC298139A62B7AB58D7644D61FECAC90FD4D742613C4631EDE98614EB04C90D3D4B21EB559A8A892BAB40312BB90682EAB6CC8AE149450D91B2F59884A8C9CD5D220163D582645C9630E58BDD815987618775BAA9CD5F8928287529D5A775338CE8D74E1251B6B9C9236EB0DE6E9A2566C9D4C0041A4F87A07A9A0941ABACA04EA8FE37057FE4824147E4066DFAF7687B167296C49E4BF08B774289EA3B33DB2E4EEE5BB5FB840956B169595AA6C5B1BF05878E47C07CEABE90B1B7ACF890FA514B299BFF7E0E50AC7C1B84ECDAF489FC8922FA22AB5440C4DEA828C80D86E1ADD553B3B5B76271F55F561C6F20B81E02732945B3CB1A43DF844B2B9639BA5B298817EA69489E147A1E47ABB5022C457A939B91CC862655F7633560D81633D326D957A4BD881D5F0131D931361CC2F198BE1FCF4CB3BE8D8FED9E1D418FA9C621CA1F17EE105CB12B5971FFF39685B3775704718C48D86ED1691A07456E885E18C86734FFE9A8CCC642FE65CADF9AF1D7E95FB938649EA46D0119BE2CB11279BBE11DF0CA1088876E963D263BCB17614CA9D0CA52DEE70E811B80495127F8D6B889AE3A8B317526CC353D7D39C72ABBB6918BD6FBD785C777231DC4492137ACF3C3F183AC4485F4CDD903883D49F5D3198284757ADFA0436000152ACC8489B5FDAD4D5D7581215EBCAD057888148665B4C4FCFC386F99DA446DA87CA55F746CFBDF870FDCB3B7AFB3DE8A4675F04713CECA0F9758D38CF409CCE5F834056512135060B92F9BB78C1A33680AFD6B884C2C56314637A06DB399009F1A321F23CCE76CCD232C1A8F37C775417802C59634B044C0 -MD = 3B4317888C00052E95EB4BC17B48DD82668A73CA86AC37A84299E4E8 -Len = 9545 -Msg = 2403BC3057D4EB6E2D6E7ACE7B1281827CF0593C2BA154DD15BCDA010A869D925DB2B70B871A221D4E2A80ED9096FF100CCA09020C522697D2328B50F2EA519D9584D465ACC02DBF505B7FF2B4A666732B880013A06E81671280732EE8F8C66E133A0FE20DE78BC4378C9E9151B3F05FE1907FACED0CC04A0AADD7F05111294B3CDFB7A3BD7FDEBF27D610322E88E2F5DCA12C2C395DC9C38D464A0D066529638C5FAE7C720BAEC01DBFB6151D1CBB0F4C0BAC08C7FECC6DB08A5C8EA8CCD0ECC40A74C93D7186C3650D7F63CF629583520A33116D2200CF15C25B6D23AA76997BAA48486F5254F43D3EBBBFEDB92C2C2D56B2541E76EAF15A405D4F19A18693560020DC0B39B09159A5BCA52DF9B3D40D16D393A909669F86A7775E1521AD5141466113A8808EE46DEE043F33A900AA70F5DD7CECC0D59B58FE77AAACB6D99DE02ED795A05B46E278E732DEA7C7818FA51CB1B8938C2420CAC241A11124901F31C966AC27E484B4B8F4DDAC2628AA3C6E6B4BDEE5862BB98EA2C3BA75492731CA9A4CCDFE091E8956887F1DF7C854E3A2060123D6ED8188684F1A44B192A3EB7DAB38227A46D82EF5B2023CF312E996F02049BD07EADE5F971C91EEBC3544661048CD1040C6B5D297982D2D48E9E3DD01B9C26165C83769D70BD7F07A7BC88E9A5B0C58FC056DEFF1510DA7A237A8F2252377048361011E284D4B3C685531360D0AED92585F27ECDDB8E5FF0697579E579130E1C9F034FC66D5A18D9CAA811B9BBF675DBB5185DDC666A860217450DFA840D50FB4B81E7E63644E386F3ED7428F78A6D8C6EBA9A75EE4C9AC750C847D3BFEED406E9CD95E4A12445656B278D2983E52385A815DC78E2BB9F27A4427FFA66B60973826F5384D920E6A72BD07ABFDDE74B8ACA89DD2081D1F3C0FDA2B6F56CE35BE01E8976CF9B762CD7EBC3E5E4832D8A76837D1F319D814942C0E49CED06EA0F486E4FF57ECA77451390C245A1950B61D7CFDC9FBCD8780C0862CE7C660542CB1FB39EC4D65678A889ADF9C0A114031966DCC0B1A4D56C7C4E2B22C55A3B6D206294264BABCEA1BEB5B5F3B1B1B22354BB48B1A18D10D39C25F79098125249FAE7F78537B315E7EE6AADB5CC202B950F8BE17BC8B6E71C05E32BB08C889C90BD5F8F4B618FBEEE682E7FA753ECF8075FDEE8501CC2451D60A4A8B5A5056ED64B65008E6A05497485C5087A43B4B1007013D3C93CEC23F689C60EB0384738158A3E3978247F201ED36A3AFA083615B769A01605D0E9D646DF4B48F6A2AE53E24EFE3B2B8A169FBE876202B73BE5BC7DF6651D4912668FC4580996523E8E1472FCABD9F7640599C91A28C9591FA18A4BF05E6A57FEA35ABA1E4D2DD014E21656DEF212B0BD09334D5DD1C9A4A31F13EA26BE463825641B9D337A0F66685C5412F6031EBCDBAEBEBE397C0C3CD4AA56164B221E5EB456268C340EFFC2B815F8A20FC6FB27D50906D31B5E06E5DF24318095DF5A4C1327F1F1124F821EFCBFB3AD2E9491F9FF25E5DC948F7D407FC062031B455A07E0A3A8BCC4F1705B660C5C61885035A1A5C4AFA7543BB145FC29F9FAD2A6C16C5055C1E930E4623176897B9BE3979B16806151000182849AAA70EAA7201D6CE60321CF5A37C59F49179E014656B80352898052FF10325E5B75934D26ACDB8414508D980 -MD = 087F0FD3F0BBD467CDB9FFE48C44875A187F68DBB65EE31312A8BB72 -Len = 9608 -Msg = 2EB31026155B7BC3672F060D8407B1622F6162CFE40E0286CF9BD73B185003827EB75CA080F0FA81D9E5893F462124F679EBAD807DF6AD87C809FF552DDFEF22C11C4AEFE1745A457462D346A3E0419347274F0A39F09AC211D79BBC13C799BC26E954BEF11FC7D9EBF0A0283B59498F6A271AFC5415F656F1C0A0E311EDD0BCB49853F0FB52C849848406A7DF6D7F3F32DEF50D8073AD2B1A197991D7D5337ECD5C1472E58DFE42859FFFAA4B858C34B305B8F921AFB319AB0C0A4D03024BC2AFEE1BD4B0F97848BBEE535460144E301334B90CCCEDA137A7E44C44CB538E9A3D10961ECFF2BBF16BEB1A40240FA63EB02FAF248191DAC569F44AA10B9E391416A41A1AF9B0379D2E52EB6C2C1A11018AB951D030FE5FB6317538F4DDA3D4B3871AFE479C4CCB0422301BCAEC7C0D6A12E1A4DB17DE2539492C3C003C3C89C6587CE25C7C7D697A11DCB41764DCDE7372E6EEDAB38B4004EC0805E1FEDAB9ED2550D976C223B0B0FB39FB006DD4AAFE042B0A771E098BAAFA72AA488A40A16BCE6272F64023E863262BB4D0A137F61F9E711DB096DD93254C5E4382D3F7F1914E9D18F86637E5E4A7B7FCEA80EDCA63B3ACDC7C692770D8ADE9AB0FFA87A2C7DD33317DB038C5709BCE686FE1BE395B3292033858A2FA3C8144D4A74B53CFA8222ECB7E0D788F4EBFD75D880DAABF66D888F3D7CF5D1E3DACAD33F3C6E05EB0FFE7E8CB1DBE1403530F1AA44F7028580C9084DD6DFCD7788B94050B5FE63EF079003A51FA43E726897E82EBE160F4F48C9855D59BB94B8BEB6B5492A66B38CFDF850B6F1CB368598443F2EA9653DD5E6A3ED60881D47956CD24F1B0567EDACFE3F87A67E1D90FF6459666043B4F550D9480F4D17FF0B40B71364366B17D958DB40F3B88189D2367572AB87A14B160344BEC8C69BC0374EBFC62FA8E090296E5CB43BB253D04F24E21CC55849BE4CB7E3EE80AA0DA1F8C71A55E1D98A85049CCA30F4000506E4F36F7096D4F88703A6B772690602019E17BEA5965B68CA1D78CB157E640CCE3AFE00A25B6172ECA4CB9902D3F39BDA25D57E46EE01A794DA2FA309C083CB103224964F8914E0BB39F67BC50B4103E41DC29C95041D5835178FBEEA6BD35ACDF51A6F5444CBFE5400439DC70CDFF870E30EA1239FAA2ECFEBACC73B2C104E99594AB81894F4EBA464F0096F4368D8662FA12B46CFFD7EB766072BC145E170BF6459429BEA5845BC4F088B98D9F1EC7B31B054FBF04BA5B7D44141CF26B24F1D80E39B2FC844E2C3CDF5C752F65057C9D4E982172CE094907721DA4967772533632632D7335342386628438DBA8CACB60139A7A7D7FF20F4E20E405CD3A029C3AF103A91BF2046C372C20E99E3B5971CAFD3E2CA4CC7E0E6ECC272BDC50FBD3F0184E58E6B26D329A9380049B3298CE33CF15CD7560E3D3E0C53CB029337236F9D848762D371D3279A8B1192D83CF1FF8C4F12DBEAFA383B47CD3F172B82D4D942D9976A4CF2E3E0F69E13F1D8EDE152938B978D2B1CBAF27088A10935EDA68B2E31448B09E586E9FCAC11C6CB056FC92512210C3A828B549A1CFD3516C4A5B4A59FFAF22D3BA324DA5E92C607A45C189D7482F9CE1FB005B314D6D8AC0CF523CB21B3D86CB21D451400695D1341345DBC9E6CBF02F565E8B02F7B2151131514EE7D3195CCC262EB615A6C6 -MD = FF5DC9CE960C604323CD9D2D5D8D52100DC184D2895BA876A535DBD3 -Len = 9671 -Msg = 988306B8F89912729003A9D0CC56A31AE1746D35B553D5D303D6EC386689703E112E03FB4CFABDB381DC6B28D3F4B3A4A4195981A044C33F121B7629B69B6B8F2CE779AD416390034C8C62A24EC21EF93B6C04B3BE7A5A0BCE45A16360B1C42F478E7A2AC29C604BAC37242828A02396CAF3E161EB4893F3EE4CCCC53A805D6220CC673C0B7736549F60A1462B5F9E9AD8E0D2EE7DF53A3E222E0F0E0D4D6D4C1861C4E729F34EB899950E2AA71965A8F344AB602892C57658D8958F43B99244C28666A84FF8070077B79B7DBF1ED5782803CF92AC226EA35E623B2AE8A7B08BBB8546B4C67D7EE46B728B4CFAF69B8AAF1DD8459BCD1367C54766E07F7D176E383603410C4192DE270527447BDEC7FF19FC3125EE405AD920FB76BE7415A2F8877B6E9B3E6FFA8CAE4B0D7DE2C572DA007D6C00F1DE42C257295EE6CEFC7820BE157F18D3CC30AFC6C4639465C8B329843578ECF91076302C328528CA06BB89255C9F4031CDD2DA837DC9C682E792A48040C8965AFD9320C31DCA6CBEB61F3065368FEDAD2F1463781C52C406729E8E197229C7EADB70EFD2AC391C5F76659D0C78A8192647E701EF809556A40D8EEA92747F18683823D54957B6CA6AED8CAC4E8C4E183D98833EE17654D2884A8726481F6710DEA7FA02BE486694C934D043C100282B240C92E5A725A855F0419C7C734D66579DF3CA967E685092AA48D7BB2718872E93314AC89655A5C2FC5912915B1B1C3A8714371C88E82C414C97AE25A3A8575F9192A03D0AC612DC64011F86C13CC5AD63F1B495BBA0323310ADA5F8F26EBE09C3BD71B3899792645DDAFE203E1855257C6B3C0111C5D11112E5623FBDF88C7C8A5525707E8582F2185AAE728DA758A57D9C7207521CE977A17CBDBB8353694EC0AB999800014B2504CDAFED5C084FCDD75B679C9F8E4D48C871475D6B72EFAE142662AF3B7F5D9B41A38CCE8BD4B5CF377E2EF4339FAA62EE2AF39AF514C2EC85984A690C8671F8B5CEB5CCE20F51B41151DB3F2D3A6A820E3056546481D62FCCDC3147310D398192BEC8FA8FFFB7FC35A5AD55E315D68D97559B811A483E243E61074F9C4E440F41AB5D11B14BD9CD92B72D2B765486179BE6B09FFBAFD7BEAF22CE5A3D47A61B5EFF62C58F3651CADCA40E4619DEAA687B14B010126467F95373B17E882D1F287B90B53A55D119B99FCE0ACF882DC8271CEEC04D9AFDAA2AB6E0C048B4BBFB297631B1B2AC1790257FA080633E418A6BD1CC32E52AAE116F37CDB6886B74EA7415FD13AC90C3D0F116D706B871D804D697242A96C1B78AB53AB2441C0346F34882C344EA3D424033407839BDF95DC23ED1F3AB851016B8F02CCA77FD602DA5F7EDED8DA178F1FD2BFD5F3294BED86EDDE698B27777A0480B35689A33847FAEA848133279142F9B0BE523B5F2D3665F5F01C9C56D8D4129DF885F6410B96D1F6796809B2C47AB62687D7E6100A75EF4B2A637E1CE56785299F22337EB149E9BBCE3322BB1A7E773F1B1FA03AC9AB21FFE67D35B0792E45F8D1F1B6D5B9E8934E9ED57B26542740B19FA458B1AF4A7112A3A69A01F3D9DEF9FC788C4D436525820D8A3DD1B66840B6A8C0ADE64D06267D57C0770FAFA9E575CA6C6AA86E442D417348CA96FED8E7FB04DDBEF0947FDDA91311D591FCA98D756C6A1CF6763BC517B773AC449A6BC6A4182B1E20B02 -MD = D1CE1945689E8E1B85056F421781F0802C559A5767FDF399DF15363A -Len = 9734 -Msg = D111EA606DC57E7E244594E659E69E02B47999AF19EE20445F2F7545F67A43AF48FC757ECE7941CAAB9B13C482960B6DF466486A46DD30BB8EFDAD04ED013F5BBB1DDD1E508D4EC073790DCA5594BB6F270794AB759C98D09B98D89EF69B7BA56EE60A08326AF650E492593D603D030DCC109989452234C72EACD4C1056DE9B212370E1D2AB3F86FA344693675902D2543E4E5CE8BDC9C0F29EF35A07B49F35DE062DE18007F0C0470763E74FDE80066B4E715DE60018DB1E89C86D71693C4818A5CA28934126FF386D6DF42A463060CEAF77C80E0FB24FFC0908065D5FDE4BC097ECDBCB5ABB00D69F8E8411A39D03F682FC25A73DD525C5EC7684F7EF6E2F1807D481EBA8AAE194E2C67DD0E798638435C20493FB45098D68322FC44D70A81EE259141C5B5BFF3AEE8E969A384BACEB6B150801988ED074CAC4F2EFF5EAFE7BC649FCAF5E72D154E16D722E19DA64A3D97AB1CF2964F8310E8334BB229079987144678BD20296A6D5F73D7434A69AA1E6A9690B9EDC8426821179007230B3088F19DE0B04004776B7D6B03ED4E64AD77B3936E42B20B5BABFBFF74E8EA4CBDB863B76A4D3748FB9917025AB563E3FF04387117D644C10E2D4641F59671FDC8315D33F52F86D8C58AC51C2E1D26AC9F6B2E3B3C5A759A87F3715742AFE8337BB36C86C82BE4B66486C4D956559B400DF87772F62F154E98076559467A8E67F8D5DDB31255CA5CEB20096887A8A8CA1C3B94562609178B8FF39ACC10495BE1143E12B76BBD15E455DE25C3ACF71B1DBE54533D64EB903769D596614CCEEA0C4E06CCC805B518779F4030F04CF4FA3E7198AEB61CA8CCC77A2E73AA760C8D743E602CAD643C9DEC2E8F6C16B46C8A4C38482B2C7434E2776A605C345FDDED6970D5A170A8D41E058D3459F2E825E1A0D824E18E9F1AC86A86984447DD4A8917DCBE598C49F485478CB814E77968314CE704DDDA813DE59135D64EF73082EEE4FADC1F8CD65271EB97E69CB796A3650313FC9FBF5C799559132122FFBFFC40C4A824D336EFE8F693E905BF126E7DED465415CD095803483033791D55009C0307396BA5AAC866D8AC18DCF218FD04BC8285C92C7A380CFDEFF75BC0CD5F94FD7A557D2C09E4D0B45664CA76276545AAC7FD8354EAD6A6FAE456494EB9F3E06C194E540CC29EE0806A4D34E5475881F0D32835C230FC92715A4A952A01764F1C41F7DCAB3E4E9C3632EF83F597E99CE1D96E7587F908821293595381DCED626D4FAED9A90792C23564628C476B8C9EF99DD35621422A524DAFE4E11F44E062BA5FDB886FEB6E416BABDDD847727B67FE0CC6B4D8F698EB9A3C8C7B4A65C0E62D1E8209CB9AA62A5E20BEEE48A6FB1310E49B5C16D13DE0DF0BAC74187018CB79811FDE48E5708D5AC6C4011A9E027794877F72D7532855F93B3C87EC407CD6F15829BB06A204F05228364E3988D53B9B01089989053663CA6D5877DC289B6606E8987062F5C045FB7CE7067187A0DBDCA1F806A92A6812BFDD792C1AD53FC6F31A49F58DDB9C6855FB521E6E9F77E9FA60C699A794DA6035AAA50D10730C7F873B64BD2F01523CC2CF0E8C7642513FB3DBB6AD2E51FC0DFC28EF4BCCD621B9B473D3DB454BA6E48A3272FBC37C0090335A99F88F8741F04B2F69680C5E787D7942DE42CB1679FEACD1B7C8BBFD10AF4155E6098252B733164F3D37245BB7EA934286AC -MD = 0EE6F02DCEE28EEF57740482FF274B41E6A849E8BB6623863812F49C -Len = 9797 -Msg = A76CEBD3864860BFD677948C24FD04B9E41775678F61E3E900D06A4863BF4FE8FF9060CE90421287F7ADC5A30105D6A6ECF20BF6DE7B6E2BFDD538DA21989A600B6148397132E60B21B79141061330A1E6C331A3F67D647DAF7E93C70F9CF4FD912E3600C80CAA586EA5457EEE458598F47FDAD3108FB740EFD9839975A8684EA3749BF402DAFFD5ACE4E2C9EDC87A473E6F234BEEC1D1A9548BF8EA761F907DDFB05A773B0366FBE0A118AF5E1F614C82A1A203CCC946D1724A514A8AD880AD7FEA5F8F2A5F4EE243D4942AEF430487759E80A19043C028EF3879D2DD3A313A56477C2BF5138A91EA7B0A8AB2FB2DAAD9217EC9439FC0E1F7240DCEFA16D7B3B01EFABC05F6B14334B45F33E5EF3B9567C66A0EBEB1F0AB46CD1F00C8C88E8857810095B8FB4795C5208683AC5032D4A8E88430FF4A1959096543411115038D480A79C67EA7E2B5682AE99CC626DA41842E052B06950B57A4CD3CEF64AC52551FA9F1E3CC91FDD6027FF5E3E82C6D604BF20AC98C56E574AC916EB65022AF42D9114A57C0508F2EEB4BC47A4465738378953DD2034AE60848DAED3C4434D206135847638EA3E4F8C5A3936D62A623266600BA6803370F1668284FF80FB4A8DA8475A60993373CC135A3AD6A9B93E775EF15A19597D7CAEC8143BC6C59BB3F1B5D8D59BFF1E0E18D8BC5D6E76A2D8AFFFAE8D8DC565FA53E8D3D1E099B687CDD854D95859B9427E0A1364C87F3674C3355AC4D09BD502B9C7E23DAE41C6AFE50B78BFE9ADEC2B821BB2245DD24B54631BDD04983F5209BC00EF1D990F9BDA1417D12ED939A7C6FFE2CABC1B288EA6ED5FBE7BF51372821F9DC1C0570482F460FD8E7337BB346E0B6EC768C1B5446624021B306630EE9F35EBE0481E7D80BE86A50808CAF15497852ABE68D703A1A54CD75D5036F7A676647CFB3F1354C7FEF481D911010826013C06AF1218D0C871F40D3D3913F6074460E9EE5307EA62CB6175FE8F679C5620DAE71B682CEFEC6F59E7102618D9699FA343025109B5E64799100BAE8A84F926D1FFF0598B08295D81115D1AB52AEF936D2931C0B606D60D9B4DEED589D66DBB67712B09F46777F3A5A58A9C269538990F05F55ECD0AA44DB79527896F3FD8B4DFD78A29D6D77B169E771B9920E412D6ED2F94B027CC35CBFC2CCD22305D10CC0F28042DDC694AD0E07D4E8C8EA8B662705F2A29E140BC4F0EC2BBE358E0E25BCD75BABE54352B4E246788CE30732FCA4E5A12882EF9A4BE48ED0746852541E4B6FEBB59A0E0B968C8386FEBBD9BE9434A7EB4A35D185E5D3E10493AD56758EC8BFE908D4279E41AAAC2DB2A702E4476465BE557355ADA8EA9160082F7E3ECA3BE2D57F7705A5E3EC4F75AA049E4AE57D010BC4213D60F696B4C1AF8BEEB68E564C0382A32028492220FA0F5F225A935C6E768BD7769E44CA894F46265C45D1C188AA9864518C0A630FDDBED260542379AFA0A6AA3D1209A43E160F059DD5224BFA85896F65EDAB653996CF24C148192D25B7F1867A5520A2E262033031A33CA84FAAF7188F769EF3796540E7D8F24517D9B3552C62CBC4055F6F16F98EFA20C384D99C923F283321C75E51AEA20476FC974EBA8CE8B5807D4CA2A14810A2CE7127CEA5C68D2CC288F2D2F1F60BFF6726358CFD0B1F51F3927610B4D485EC492ACF65925F7AC784A0D6AFBF3FDBCA3E6CAEBE27DE1A8E2DE815EE6D337B47CC6B3330 -MD = 41B544D1347B9B95D7B27D8C25E4A036E341AD3D32A8AF5E209E6FE1 -Len = 9860 -Msg = 1C934313EF4C63FF30E17E799828913B40324739FF7C5E796B981FDFEE28CD701C880024AA176AAEB4722043DBC1F7EFEFD28B1A437C44AFC5C1080307C86337477C3D6B9BA0F6533391A02F7AB40D9BDB78F1B728D026159A70BF507A0FA9B7B8EACB29C6E6D491859B22E2259F2A38274199AAB6ED69979E001A868FF8E291C6E010014CCE8AA372F83325D816B964294904AF5E77028F66CD4073A1CF038218025C56614507229597D2BF5DC9E867B2A326BD4F0D5FF0580560EE02CEDFC904FC80D54287475DF950ADC67FD2AACF9AAB6A374974D2A96EDD8B36BF8B84AB469AEA8525856957256819502DE77C1380A97457B019DA3D753F22633DB79A020EEACE8115F23D6CEC7D35F0FCA37531A9DDC5C340E4D648A3DA7864382A68FD2443C5842D3A58BE597BFD33C17A19D815B34679FDC035A5C3DE7019437D2235AB4A475B349C95AD4330B6B90386487046C849BB86461555CF3F3B1886113F75915E8F6AF6EAEFE11222C6E72D747BA2978166AB6B5D30F4F02F0CC59BBABD967A0EF943C1BB608096A91AF9CBF27BEAFCB873FEE4271AA7E1134971BE9FB4993D7E6BDF6E7A73880164EA899CD4B7EC1667362A15749061A3F33B4E9595B4EC9A4682825B1F610907DA742877023B68938D516EEEA8BCB76DDBEFD57248F185B8869A876DBBD465D4AED56EE6EF288EA5EEFA42038E69F93F746F9733B854DFAE8E65EF50EF22E988AE1B4F679561C0EE3B5BCCB28719F3D21BDD1D7F316C5411BA49F9193358269D87F9830A6909077A20AAB67E803C9C74F0D5B846654372B26C237300D34BE78A65936944EE30A9FC6691AB9F7C87E066146A3452112906CB5E63F5368E131CFDA8036070406E5B4C5405879C93E45632B774378C2AEBCB0072EE4FE1DA1EF8F74B1E14AFD29BCD28225AC8A471BA6E5642DDE3F8654077E321C31B027B8CB61DC53FA4A7405FA35965067115184D9C3F6D974256F7C696D71464ECB911A276B4F6768DE33B969E904407DF2651AB94884DD3E811CC7FBC45E3B69B0FB349B9753EAA25B3614B172933D1CB42846C39539780E3730403F25E17B535B58D4E0C11532FE8A4EF9E5C68C2126160AE7FB0B951424CA569050375C86944A103D2A13A503E98A6B751F1A71C0C023CF81D2B5E65AC0F89C77DE5D3AB30ECD633E04903E28F5E1841785B6E1C998EF290FB89A5CE70AE823E1245AFCC046918F9D41C6AF1FDD6DCD81402FB6568916A9148DFFE8A8A9F560A1A9ABD875F91DC1C27CEFA640026AD0E39B936CC39F8ABD977FEAF869FC9CDE287D5A461B4A2E6CFDB4D528366DCF6549131C7F0D58CD87A6C2F3CCFCA431A713726E07F31AFBDD342DE43793427B582F10F31B555DFAF30283B69846576509C0C3CA2261633565D3FB1E353619836114044E3BB44A10137903CD464885646280A11E7713A1EEC7A45412D202906B7FB133E125283C486B00E2CF36D2D30551E0DD192D31F4286B9165EDE8DE16B1B3EA4B3D0B2975115420206BED34FDF89A3E72070EF76301CA791B468D2B1600E2B10B1FB5692A024F73E769CBC4D2D5385702792E0415C31A4822209C7E98A04874CCE031E11B7FBF9D3413EAE94FAEA1CB13B265A88D33EF294F1C7FAB4EC2F048859A83FD749401C47269CD98D53B00C8F1204982FDE1C99BA96733177E184B62028DDB74DBE617341DD39EE44AA8EFE806F71E5D7768755E2F65A1AF3B6E692D25CB0 -MD = B9197C5AE69D5A90C7E5A602F7236B561975F6A28B18F510BD318E0C -Len = 9923 -Msg = B86C30EFA4E2278A194BEB584934C405E42C55AB46C17711CE91324A729291D5BE5F3F9B51F400DB468795DE877FC442950821EFCB5FFD24673EF827DB825F19F9C39C501385D65C2763E22910E09CBE42BCA12E121CA042C98E128553800875FA23CA1052A51835FA529CA4B78DC863C46287F49533DAB7071B7CBE0E9DD99CE3CCC93FC064FE545C5D0A979A5A014B2FCB158342F141C837498C26E10719214C2714C43066D4F570B78D36A556F7726DFF6436369C933A6149C88EFB7F523E2EBBA5733D90DBF9AB73EFEE004E6303328ECF605AF7F868CDAABEE70B0575313276B95E888F4C62FABC79ECB6EABE4C62B4213BFDDE93CC31322538AC9B4C5753FA4E287ABDB5FE624D7EE2026368BB8723FBFB08C04E36D066BF3F2AF550DCCA88AD7EE358E37822E64C71187DAE3698267E097674891F67B4B901ADCFB53A959EA39DA500EC559C614884E8CEBAE1BB18EC967795CFDD2CBFF73F68141A76A50A6CE75F42BD3A234FD4943E4E66C4E303AC6113D94AE3BD60F291F932963B9D5BB3D1179244934E2F49C36F39A912234CC02EE9197CB96727EBE61EA5898DC88CFF99917FA94FB98B568C7FD4FF1E3A884188726F1FE0C9775996EED720F8FEA4AD4963B7217AAAAE255DED1EA322960E18A4FD23ECCE18105AC95574E53E45340BA29522BB03A252D8DE1AB518952A3DB89D02D07A643A7F96E55266EDCFB5A0D1D451BB15CBA8505C0A79632CFECCA43B638D42D1D3FE8924F154FD7F73F14D48F8F4CE5EC2B62E9EA5AB321AD69CBCC869B4DB34158EA98FC32727798F14901CD2090A927501BCAA1006FEBA7196FFF280DE42B86DF5DB2370B9186C5D1969585B9C87E087295B4BDD8D869BB91850C58469A4EBFA25A42947F8143377C8BC2EB97F4863031832D0F10F32A83A124D5881118468B933CDFFD42857A38B12B12B0DC6416C8AB49EC9803EF8B76F25FA49AA66DC4956CD87245D9EF863F6351A35B45B5D17604302EBD14B23EBB0468E6B18C8227EB60E13F49CFAAA51A1E44CBF9ADF70AE891CBBBF9208BA4C2E3B40113CD5A80F883D04E987AC49FABF4B44BB5AF60FAC9EE1B3AB339E27F5386D789D511FC3D567DCE2DDFE4B5F39ECB23D8BEA8A63C84193E6B0F65BA983E31960EDA4A47F016D25F5873544D729CE97068B190697337E1EA93CE7FD92292DD8EE3B372A95D9FF201F0169BE6B220CA71B6E1F7004DFB2EC1C94CB4FDC690A42C6B46972CFDE0BA470C9E3F7219954D71E65DB6AC176E42F0DAC1F061FE66CFC5F6A9AA4DB99E5341C18705CDA5A7AE77BA1187B61C9CCBA52A186D358D96620A5E6B1CF9534692814DAA2F6484E3FC8883AE84BDC55D87B5616DCE6DBD218D37F64991BD9DC18D516EC68F3E59DCE9786E6D025C01864066C85C5C73A2D3E9913847C18A20AAC3322C0D6A5BD6E87A3026B5B7564B3A39EC74F1BB03D69DA7010457CF608B235E37E100A27B76864968074946C28F930736ABDF2E7125E0EB6C0B7AF23D196AD32FE8742089A958DBC78BFFDB0453E30A62FE026FBD1009EA991C5B0D8A0C8E4E24BE98179C420CE3891154C26CEAA36FA243EEC1C0263E982431554E521AE5A3AE1FD5D5C456D104D934CADAFE2321706380399874F872F68A46523BC3A68609539AA1B661962240C8AC72488690C4EB51E113EDCBD9FA067EE3A2453E536CE1AEB2767FDB136A124CB238A36926D19C80F4BBEFF8C5ED6761B990313D6929820 -MD = CAD0E46F13816F8DD6FA655C070A5184060553E2EC827D5689CD16E1 -Len = 9986 -Msg = A8FDA4852DB9AC4360541A921AA9A301DF3E781371646777E87BD5200FC693D8E7B23A2CB88790ABE63789355FBB10FABD432B0A02739DAEC28A4C56E52D5A68F425012C781CB254022F62997C6C35FAB4DE05077470007FD1B1AD1D7F3B34912DA0BA5C5B48E5818A8626A803DE5CF6220CE3C8D49892A3197A2A847F2AC493AEBCA8D7FABEEB2C9FA80F8A1DB6C7D899249E982DA8C8F6D0E52656156C6910020CC08AD75E6109C260D9A9A2DD8B85D062AC892CA6FB8B54A8441E0EF6B3FB45D4690540B647AC5387D0C38098ECA327135326338798D06315B1BBDF2DA6B3284B2D7F041FE03AB62F6E90EDED050E76388EA4F022EF67834539D4626C7DE2BF6AB92FA0EB7B156F7DFE2BEAA892A4D39EC903B2DC0EEE0A08C674481A813A14DCCD0C1D8ABCFAAD29BFFD398EDF86E8E3FC9661A74B0D8911BA7290BE4F4C08BB3CA2FADDC83FD7952467EA9998BB610B93F13BD5C1685E32D3E1716CC79CCB23F9F30E3B22CA664D4FBD13F9ADFAC41D3130678069280AFAF933A3961D9613FBA6603CAB14C8B7AEB30CFE36B67E55208EE7029652986EE21F2BA42334EA85CFE4A4BF60F7E1C79A30E3923E61C29984D22F9B5BC5A713DB9AE60AA4C277180B612264236AACA8B7D84E45EBCDAE772F5EF9B2B87090F20716FD285073FF1FDFB339CC69DB451055C0747272AAA86D0DF016EB26DFE71326A6ADAE0CEA74020B63A5E20E2AEF15063986C333673761108563D41D49AF69718F6A65FFB0783579C882860DB2B7E656013BF487654391A3AEFAF9FBBC55E36F0C9CA04A35FB7C7AFE9805E53AC20B82546D9A7CDA686A2AB137B52F2AE5F86C198580BE7E1A9566612DDDBF0DB40CC4C9C393C6281F38C218992AB378BAE140E731EE76678C3511C7658C626DFC03BD76B23C36375891F55ED4C518B051085F2670DF73D07AA04BCD089626E8673F730BF60F08B14AF322DB598E55773F20BA63710212ECF3968FBF5652BFF4BADC56B3AACC807477C3A942D912F8440F86010BE117A880CA0BF307B9BC47A16DE93A64CBE9733E2156AC498839F105166DB31B3B5E1B3F9295E46ADFE0BAE09BADC186D412F903FC9C5D13182D655359CFDF79A9F0A5D0BAA2901F2655CAC4A7223E84EAF0683282FC77A09E1E7C13B8DFE130CCD725C33221099D147E2A03111688FC23B5C87FFC1589FBDA543424D61489EE14BC653190D281FBDC548982EB96BD488EB37356438773B0EBFC96D26332679629C98BE21B7F970A625106A638999196D21605C1997DEC623EE3C65CDF4F722D6B9C5FEC4B524A1E17F1AC06EAB27A518FCB112C13F2AEA808F20761A84E9D748A654E24AD85746E3CA865240CFA527DBBD0004C805C08FC8D27C13804765724DEA38B60F21469E3EDFEE43EBD39C849C889CD76816D185A1DB1EC3B867FBB5A6C5560E0BA52CE366D45AEF4798F9C29167645A6B18CB41F443C8925971F086422716CDABA80043C0E7C3D8D8B77AE69B6CE262C92BE6B520DF5520CE816AC205F659EC6EEF2842DCD24A5E73B6D3792A67C303BBB104D0D5F31745E339F0B28C6FDBD812DC33903F18E33C7BAE07C4D425E159395798BD868055A2ED78103FCA8291466E5C90850506E82711DF0583D43E14D962C64A3BB0955811840E3D858BFF09CB94BA3AD16A57D16E87FC896441C8FF4BB74519149FBEF5A9CFEF680DD49124469FB9CBE167885B15B8C846ED873DA676D4B0351A0F3E8CA76EBC69EF180A2952C4EC0 -MD = 6E57C43A05CD13B715B1F502D2E08AE146E0441C5813D88D79C556E5 -Len = 10049 -Msg = 0F10DDF333CF40C5413AD0A68A0002DBDFA34E835BCAE93167BF3635A19AFEDDDD384CFF4A51C200B78BEF40AFDC7166B0A63DAAF3AE0713D0D07B275425F4A452C2EFB985366FEC86DDBC36AD5876C5D50242F6DD0B77CDF83E3FA9510FE86F8D000E961C10A288C0063C5D67B91F7CC07BB94B50758BEDE341549814136CE0DE0843FF5382461F71DE5F9C9352274DC047499638E3487FE2950F8E91A078785CF0E4C7154482768BCFF3C49850E421FB216EE1CBC5613729FBB0833B2392DA272F2321FE9587747175E2D173F995DF8A65B24EE39640C54958231576387138EE67D85648CF494681E58204D3FC72F782978700F28AB9509DCB2C4505B98B662224AE9236D30ADF0C3AA08A585DE291DD7AD30A802DBFEFBA278B16EEEBE39DBD8DBBD6C5257C48CFD6B860D1CEE95642D09ADADDAEEC15E7AB1C7EDB59C21A7820C01483C74D005DE9BD279EC2A59D93A5DF4E598922DD01DA9ED6214F9E787BCADAE0E92B3AB0FC8788661AC242181E87CD802E39DE8D22598577704EFDD6DB7558B872623807DFEEE033532548B4737F39AA086DE4ED0E20D9E3A014514A5271B55400E9B26B572B1D4DFEBEF0F0F4D2F58E3579783205F1CCD522CC028AB3CF84374D2E9320B127237A44EB6753F32F6322B16C1F44063835D71B1CF0F157EF9E0B799C6C6F9037A0D1F0A55831186276DDF6D7F7575E93764EB4A3FB2C94A57D1E5BEB09D425B30EC5ABC18C0D3FC5FEFEEE5279DDFDAF32D32FD29C3C749931B146CAADB933F6C3D422728F2253ACD9F6145231FA948663C345C361C5DDF6F5A3D2AF3220FF41EDF5D8AF600F6F8F690B0A0BCF0D72D1F991E0A12F3A845FD883DCC0181EBAA68206A40FE748475F85CCFBB057A48C88D0286469338AF46F496E669B7C2788F1DBAE5C1BA2B48DF4D106B0F305EB7905025A32013CB541B3B603A24947586FC345997349DD6691105E659DA44B8381FB8BED3884F8C396022B2F128A6909C27A50C6E194F8FB22D85940FF56AF955D46FC8F903EA52A38E4A21BA93913F90E513E77FC34D38BEA223DF8EA7D508EDF041D5117076CBD74E21EE3D25BB552139D9929A013B1F87A5A9167464E94EF7AD8402CC249B24EFF6CF1053C4F73B5693CDED4A2F57DB4534AE0A801035C87647246A142CD0630CA6BA066E2C3DB4AAC06C9B51F0721B6FDBA980FB9D112E02D6462286FEA1F159B58A48983680218093B5ECC3605F7AE86D64A72C944F344500E460487B194A839E17C73834624F9E75D58A47FABBE7BF7D5405283AB923E2E2609F13828A00175BA6179D9BA4EC9B91A0BBA789121BA491446C285A908F75575AD189F480B2BB0FBE15B372694049941A0F0A26E876E17C0EA4ABC4CFD5966D38DB2A522E54E4D7C6CA06AAF63006DAA286939AE5F52821C007C3F9A88F61AA3AAAAE7AF24F561FE75F3E9197252DF04D80CD6A2432565B1D9A41099EF91A0A71023A131A790AF6EFD542746FD0F256566E90D4243B7C53F6CFA3F6991DF3A5796CB3DFB4D451067248F1C9B4EC729EE6F7DA7086EF9AD89CB81736EAA4EEEE842ADF59F677E7DE0EC528A64775501CC4E3A86CE1309F211D7FE98ECDBF1F704B6CDBED0730318552063D278A7FAE42548DADC44D95847C47515C95789F488DF8773E98D3FE39EC36B91FFAE9149548CCB3C6FBE4C0228CA13EE7ABE5AA551253D35D3AC42429E60704323C6312C11D7A9B159B45042EAB32B9CA26040F7276DAD1A97ABE52CD3DE4DFE5E3959DD00 -MD = 08A92DB4623A13C6D0F171F82B6E9E254B4E9BBB27334176061EF063 -Len = 10112 -Msg = 218A31573465B8A543E293E5A591113E9CCCD2095F519D2B0D7A195A625950AE2FD52AD7D5E5C984E5BCA89F7FBAEBAAF4686DB96826E8E0CDEF1B787CD08129F7AC7BB0E1635F7F52C5B6D6497A0DB6125BF0B2FDC06C8F72FE16F4D75D5EF9620786C85D0C128AECDD362390039E2548D1DCAA008B0FD870BE34E40E66C0AEFCA28BC631B8FD8031FE7A5F39E81D19C0CCA18F1AECBB8AE0C9A4D10B85393CB58412B565A29999CD039883EB095547E8CBF589B086444F0EC302236E6EFC508C3C08873CFE13D565F5508790FDAC239158AE65A23819F365ECBF4586EAAF39A5B73CE6AFEF6533D56D20758720F22E27E2A4BE08659B5B749AC209910EAF590E5D1276B8CE3BCC49331FE73813417C0B1E6EFBB2418C82724607032433A0D720C381474EBA5749305D8FEE1230EE0BEF48286E602C593B9C5434CD5E4DAA36ED48C47BB9B540F077D21FEFF369179C443665CCB98BA0D5A7B8932A8DD7D5DC020F6261E24FDEA9C6611A096BBFFC44AAD997C7BB3EA32305A6AB41E33C55F027D3A990520017CB8CC95094D225C98FE7FFC21C4480967376EC8A22B2216FE467C49E50ED8CCC42FE9BB3C5210B086A9FF194074842AFFFFDA8F4734E354C971DDAA48F38FBA1B7D5CD74F7433EF5A45D0F6CF1D99080C2A7C0DEA6E8ADF51BD59AAA502E75C96BF6D53974DA31AF027843F3AFCC34CE1ECB81B614E9D2C382D8B0B6007CB4C54EC507FEEBED9992DF8D1251C74E79B570EE4C268D8E03CD8573005F17DCE24C6A52C076995E72AB5F72F290682081932E3357F4CF0659F5AC6A0D324C9F52811BB52C9CD0CC858178B9283AA53C523045004B2B55BC273A49CAC17B95E36F8D39C64877530141C668DA715C3E1B2E2172422728C1F7C1FDD3476D13487F193CB18C1FCEF43CCE594B548F164A24D2E0C15DD4F65614C0F0BED2597B453A9349EC79F154E52E9FB74EB55161466617943CC9189E681A3CA51150CE23B3009AE991649C882629F76FFA9161BAA1D02042BAF0D816BACC3D3A5C90279F3994D4A5EED4DA6495CDF9560E900D7A7E582CCB92E543C3E42ABCBFC2A8D53E9141942E3B58115B6B64AA654F9C8EA1B856588D464B9A6A642D0FCF4430B88637206758AF500DAA35C7B652A844EDBBFD908AA93B7929248280DBF48CF1CBABE15ACA02FE6D72BFE7FBAC98A0032A32346F40B2ECEB6DE2BE6E580F89A86E4EACAF0E952E508537566577DD6DE6BEF2FC93559B96E64A2A9F9334C3C26D0BBD849788F328429D3A8B26647C96B3D553F380619AD4F799BBBD56AFF22CE8B61FE7C18ED88EBB5DBC4796BCE01606D1EB762FB11FDBBD3CC6C55AEB68BD93E9F355CF7B07CFD05C2502F0BA792C7703A030C52CBD545F394108140CB9B5A149B616FB6A45DBA59B5118B66CB0949A3DB9E39EDE0ABC2E2E4F76CBFC32D7D98D36D23E757F3C5B3CD3B37916B2CC32E4FB4CE191C03EDD7AB4F061C5F1075E59328EB696E7D000C9149C93126AAD94E30884C976172E75BF25967785EBB5AFA68409DAE873A612A744A1524C2B96843DE61BB959DBC7DC782B42C39171F60C420497DB5F77BD5F84B52CC3924605F534005F8068D24C47EF82ED7CD4E5216501C3304BDA3659906E8AFB98C74F865DAB33A700A6C8839E405BC6CEE1C361A72FB6BAF4B1183FC800BDEEDBEF141A597253AD54FE11D6DB361865DD58825116B534AE08B07586371A3791FC62710C4356E2BE12700DDFC7F3E309F5ECAC4754A4A2CEE266A37D67A3F8CF97C45D37 -MD = 999871B057E104E80A4885E35B72E0D579B52B29C44CFC36B9D4046C -Len = 10175 -Msg = 2581FE11388203B737D81D38C21C9F4B3C93BFFACEF7F9DCABD77A70C1FC3CAB2A7E4A8CB66251163037C562F0B27770D7FDDE6714E5F8B4EF1F743E1A01C237F403F07E0015914BBDD2AB46CB20FC194D5B5B1D899D5989BB72B449C56DA21027654AFE76E093D876A799C8B0BFF7260B20639B05907582E7B12985DDA93624A34AB24A6CAB852555EB9B60D9BA0CF0207B8A9341DBE16C50BB01125FBE0442325CC21AECD36194631187D8E8935E80968BD3AFE37DEE5804ACC903E8ABC4E3557AA15C12BF6601B24AE125A4423D2EDE4AD82B17447375C4DA8BBD8891240665861A31892BB37B10518FBC4C44A79E6C46DC327CF9C143CE4C454FA01CDA1B3983E1F21CBA318686E62F97EDB7989C459C417215E9B9F3502D5F5723F315523BC139673EEDD8C50F007819AF141B304C564ACB948774056906AC7B1D93384E98425365052AF62EFF1364811FA5CF75FC9AC22927A05493BF83B04CF751293E62A3FAEDE77D746503479DEFD64E40B52ED7AD470D6D717EAC81653FB39B0E7D1066BA7B6AB3D6459714C22855EA72FB73CA20800C856BBDA9F9D8E6018EBA2F17D32EB8503A7E5574AF6368B9F0343DD9B65D3C76729867ACB64D6913FC8966074F7A6E7DB5E0585DCDA4677DD7E5AF9B7ED00D4DCF9FE61CE6535E79F1DF6AE8DCBDCC043C19A4DD4C2C0EA797AB9BE5993955DB8CB61222408C4908899B7DAB0C6CC2C8254B1CC4935CCE22750726ED8985B3BD0D4D4C222001B6257D430193A0C56807D4167BE2CD83C626B4FBDC9B4618FD4DCAA28CBD02858E602C963EFF57042C7CFFD1EEFE74D604C6EA55E0BB047ECA370EF31FE527B6F85F5FCD5E3D57C4DCDF96687E2A48F7ED4176A385108779DA2812CAF58B441D5CA4828D7638693728E005ED44A34BFEF650D9A234D8C3BB57D106FAD67D3DF332FB569097387B1E09F4CBD3DFF3C89A7D88C0A09636CC19D26CF4CD0B7F546AC1AD1AC995CE0D67CD4900FBB35BFBA1757AF0524F7C99BFC053EA59FEF44735CA967C687D41B079EEE3CDCB9F49ADCBB9607433097B52BEEA6445F338B2FD9232922961164019EAC5D3C017FAC250657BDC6F7D260DA439CC90EC377BE1B1827EF1AA72F7D60FE253A59B74DB9302A0D6E5FBA0F038DF9BD4F3DBEABF713DEF1CD35184142A7ED832C2B942583D07FB3F14008004DAF782823E122AB6A1A9FF600062FD98FB5DD7C8811FDDD3EC1948F642D1E09071D4A66BEC4802F500423BB4869E02F4500C60C65A7C81F64E1A31572F67E7AFC3D126D0B16287CD7BF7E684140BF581F7082E8811389407683552AA1894C15CB5D4C77D3AC8F15FF9AAC34C38947DAFEA9383B8B7C42BD38D838951C7C955AC1A0222E26C9FA8C6E3BC9D9841A56A9A262278621E9B5FEEBCCC55835F6ED732E05B050A898863444AB6B22EBC65478A379C53A8B51E0273D7BF6D0985BEC1320EEEC9AEB1EB2BFDEFA5353ABB0CCAD09D3C492C62F9D3C0B98626CBB310CE7EDBBD2AC4CDBE4181FE232CC596F5FF2124A9816F6CFFC82A592FE55FADE42003D6DDBDDF804ACD9FD020C8D536086EE902D1F0FDF0B1D6FB1A3F3EA3FA61EDCAE0192173BF15EDAADD4C335EF7CBF9502ECF234009275C89F8642DC4202D02DED789D4E430305031FCCB9449DE7DE4DAE1F50C75A5B794D0DA99D2AB2AFE88E64CF3C9D44A87A895C671460FBCEF34D050BEFF6B7357AD9570CB79E4D96AF0CC1ADA7CB9A96E84A9549EC50E5931F0908C74F976FD4E1CDF34067AAFA24C9981F34B6A41E3ADE39A -MD = E5E6A94A252B41C7E03EB3F7F978A25A40E60CE9E96D24F35349484B -Len = 10238 -Msg = 18663E19FB2C5C51BE7316E66DB74A504F693100F20A98B31CA694264AEACDDE27663552BA0ED3A5204AEF94F696E08FD2B160E126361B958D923534B20F0A489EBFE4CF3055F25094768AB24D82992447B12EF6232CFECAC3943DAA7BCC677A8C95B6FD5D10D3C926440FFD2CCBA70F11170F5F5529AD67346D6A45E18D2D98A12B9E4B2DC7CF3C4B57B2E8AD4038724295EFC3D56E711E3C45904F17D0B8E48A22AA17BDE174EEF33374F6E1EF808F0981D109E2CBB49BDD28AF66BFFB44E630EDF5CC067BCEA758005E7081E5E51C0466F843283CAAA28333121D4D8BE3E474C5A4AA056B4C88DF7AEA1A08B06A6E13FD8EC48D3ECD150509A3ABE04F9C750C6EEB8917EB8D4F6C54AFD054185F1FD32E3F6B6EED4A8D67C36CF4E14829F94F8F12290E104C2CB0B75181085AD4193B237252D0F46896434E82007E9E03239C0D4FA9649848043719680DA9F1CC76C5D80A58C689EABA23B321580D7CC3BC4533CA7888479DDAD10157B728FB61449B07E1C45C85768E17FB5723C99F3D78F40E8C98EA8B7EAD03E9CC5A18EE2DBE272651DD1A3C47F1D9D33216F0035F3919F7F143AC604FDB9900DE97214D8A1F9865E551C50545988456B95094517C8514C99B69F09E30DA7590FD62E540805C7C4B6C55238C65C7F8A97EACD15D58DEA13C45DD1C5321B5AA74DDA40FFBE8D9FDFACEA871CF748A6DDE121D6D009AB336ED9BB274B0A1DF502F0B3583C36A0A343B7E065973227E6D312041B958CE6AF4604235A8E6B0A3D728AB5F0B2801746C8A5BC40C410D44FAA9F0859CA20F68CE128FFF1D9CD6A2B717D6CCD3297115BCEEDD5437426D590F14A9DDE70371EAE7B4E308C3099144C2D6888FD48A1D49CAACFE4D01F0E7F0755F5F8CD723F4125884011EECD41938DF042AF5045D68DECAB647365DEABE014EB4F9D11AE89517B3345E97FE7F9629758A44092162BA318B5E37BAEACF678FA8272E13743583CFFCF2E5F095F5230226316674E1F8F8980C8C621B5D5D0B910A3529EF4EB23EFB228EAEED044FF439C62FD5BE6B90142390A32B2F10119BBE480BFBE9A1A2AF7CD8EF6D46A07693D6B3E9617C598F9BF9F77930590D39EC7C4C8181DB70B3B2E6A4BFA287E8A56C21E51802427886198A7607AA0C540ADFFAF4A753D89CD10A7C67F126E7296942C2EF9ADA5A624D14A56BB08607C8556513E407EC4DE7B296CC1EB855CA47737205306318A80C71699F116A4D69C62EA3199C2D4240690572106860D41A2B3ECAFDA8436EC60F15942843640C7D15A0B6E9E452E4D860C23F29DAF583D95E666020EE4AAD79D910FE73B7CCFFACCC0E5C13217856D7E5B4E51489F7339C58B8EA3AE51C0DCA546E726A6F2EC4EC88E78B1EDDB95CA122E3A41AD26C78A64A645B8C79F03421971FE737C6B321169EFAB7CF3AAE4E355BEF87D6DBD35D119CE62DF053BEE72E8B05F835790048EB71623516C6AF477489B39856914A210310F19B5E7550D517E6D82412D38F303B45F893EEADD344237A8DC2C9E1FF755DF08768096A6557C2E83523E67A9B6B754D3CABB1F91805DBF78CC10F4A06E3E41231564F6775F9ED8566B5907603595ED1CDF15F0594F0C6070017114073E62B72D6D61E28CE4F20535CC9D370237B03FBBF62FDD03453B432804763DA4659F72A73A6A07A55D2D9F40066230B4E982E41FC4FCA18AA892BD56E4B68E241F89FA4FE4FA1DC9A56DF53D0C90C34F6173DA417C4D52AA33A8D9D5F34AFAD4A2AF476489D82061DF732263363D435EC09E933B89616DAE56024F5A58090 -MD = 9B8A46B4D3C107A7F411F2008E423EFB996CFC78C7FFE345AB53AD7C -Len = 10301 -Msg = EC7EC9EFD1E4AE39358E114A098B8DB8E13D36CC2A267741417F62CE5C0C666E9FFBF5F41B7A0F874EAED2C0B131FBF53C2EB7A75A78392CCD48B552FC25A53F7517D50B45419339EBA3539CE0243FC53B941FD21305D2346A1EF5159E12077ECE9BA36EC32F4E0285AFFEB66F0642FBCBD1EFB84F7BFC56AC3B49043519C51A3085260009A174BC3B92A8673989C965E113FD0C8B87A09047B35308C877769FCC83B84CD9CE78879C5BB7AF2EAAE427CD9E27C50D5C9EE1C6CFCEA9D40F3A15A12E53A3E04A8D51DA44E544DC1BCE64EE96A91059D32CD31F3CFC53C35ABD9985589A4EBEC6E63B0D34DFC9EB657280639A0639A14DC563E10133EEC9FD5B81B37DC3D0F56232A9B3CE8B23B56951A0B3ABDA0FF1BF47CB18CF433484677B26DF3DE52418C42538E5D5DB70C84045EDE769B677DC3A2F1B4764090B55E08D1D2D6D6FE332AA0EFD4A9A0E101F8AC9D3E91225D96B0F60502A6E5A0934B7239831F457F3E6ED6616A6BC826A42F3255D4A73243D9487C05E7BA2E3783FF873A657D28CDB217B81CF565DD6E8DD1A3A666F5902AA7EAFC7932855B586BC46E113662FA2AC14D4589BF273F6316E781A7DD1BFA6698E7BD55A1004A7D58BF673AC42444EDB73420AAC6238D170D3F5185ECCABC5A6E9DF14D97B7E070D9AC0A89F6EBA24845F0E4DC6799CAA9ADB8227425752327290AD9268E1DF6F10F1A77340C6B007BD5D1CA60DB06C53816D559869F43F8327FD37878106018547B70A417924AA1E126957EC68A4D5BCEF4B7B0588CAAD21B7F94890518C148C7BBF9225F918B13C874150BC3059967220675271067FA38CE58A040DEFE8DB753E3E282AB9ECE52764D6AF40AF9EE164C910FC40F640876E08495FDADD25CA10EB39B0B67DCF86724C2EEEF29069B042B74D9E507FC59906D0C3246EAB78AE888D0611F40C70482A6B5BEE574E5BE63AB64B1C2C3523BAFFF3D4579253B2E0C076100BB82BF71F1708E249BF4C5D70EA7A984374FDC746456CC42F08652527CC0723667E12D80CC7DAD1B3C22D997806953036386FA320A4CB5C05CAE17EEB6A48924B02D4DE88DD0CF32FC83FCCAF8AC26CBC0DACD9178C1052732B92B6EE08865209BFB6E847DCBCFB51877921D03FD6288BC63BCA9CFF4441CD6E2CCD6829148355F30CB4DBFF346EF882C1E1AE7350532D3E062D0CA188ABDAC05EDB043BE74211843005D31096615FF190CF6A45A3A7832CEFCD02F0BC3FD469970CD43CE1187800EA7BDCFE0BC6BCD6321B6FC162B9301999E0322477E7D04F81B43012A8BE64F010E33A006048753A2FCE8762238EB6622AF301BF7E118E3D628949F1EF85EF31EBA2F162A3B6EDE0332A268FA728BB52CD27F1A4B62BEF854A529655DD2273727B6C2F8DDC7219B6EC43FD7BE00804D6C9A38345D590CA6C6069C801F0712480011703068B199ED946B9DF91A0973FF512EF1AECF488C187586489E6160032E7FF7299FE07C26AC3E8ACE2BB8D343C83B3690EF1713B8FCF38DFE0C38DBAF83A4E1130533F071CA60D3F953C95917EE3F8352A93F9FABD8853F99573ED6B5DB10941854F20D0E90A22037CDAB07A0EA23C0221E7462DEC44896E3F5B3A92C4CF4931D9FFA379AB77FE6CB6FAAE611AA20D3CE3B5AA7C3046E0238913D5319A41937281D0DCF959603BA6264A3DC64D9FC18238620AB0F2217EF77DCC67FE5B1C2CDFA990C2FEAA741B9C94E98223762CC859323E3778B74A706D4CCCA0CDB81B78A68DC54F350B1AB05FD60F50B7168424BD48D22C443C8D010FF3A9C028A48509FD35AEE94F28BCF8 -MD = D7D167DE9F981ED0FE49589439BE16DEA48764A7A0AC0A81A77E6551 -Len = 10364 -Msg = 8881C0173F60FD39D10896727C5993EC1FD63B7208DFE243F041D1EFE8DE4F298F2D65C618EDE8BC93596C7CAC95BF4F69591AD0F14412D2A38D7474316CA7FEEE56D441ADA951AF44E425A7B8EF1820A78EB34FCBF30CEB996D648FE33408C087BEC3859D92F99960FBEF8F0E4DE25771CD22956817AA400C795B9C3283820E88383585474C81E1868B41E3992CDC6A0B0215B76C836D68B5A1B848C46EE65FB122ED44765A68BF5BDF0B7F3AE5C00776D864B1AD3556202D7F47B07E539366405518207BC550ADB18899863F7ACC4CBC7120E16D5593529DB2A0B4393E3F53EDEDF4FCA96CB33F6926658E6D6A8178EA5D38FA174B292BA52D59BB592F62750094DD1D87CE6F89672D739E2F56E26C961DCF5EA1267EA388188319F538967A5801A6C2A456827951A0C2E84BE1CD99B4E8A1DFC961C22F0BBE807858D0D58A20455F75FAACF950B996A969AFADA5DDFA12051EA7809DF6A14EA80ADA34F4C21F5AB15DD6BA48A527F27BCF380CD851F73E844F2C7E42831F7D2EAD2D40708855B0661A61B61F03FEFD0546F1C5F78B57C5940852789031125603F5715035BF5C433517D6858B8BB6A31319D36C323F50517ECA8C4B082490BA932EBB58D30619749A8AB75FE706756B484980E469C18D24CD43E444024536FF7BA23B115EFB0A8231561CB28577035B83A134BC3FCB4262D937BBA00243D2D5BD6089086C90F7A24BBAD1A37D1A8839DB14A4D66FAE2AB872874BF49B009E1425ACE443CE088395F49287993962694B1E79BFD919CABF8AB218DE1D168D3D8BAA59F1ECAB2CBD78B0D1A960513AB5D6C220F8ECA0F1937B056B70B10CE6F37325FD4D0C9A45CF2A90D24BEC4FBB30E4400E546F74F4A02C0BFA9E58AA296930E0814F62393CEEA01F9E303DFA657E176E91668DAB6A50EF2BA8B3A8CF14B5BBB3CE6BF36F1BE3264394376DC796E3E8B6FC3BBB1418818D8BC5FD5C1EEB93E6E17B400022381E2921EFB544DF5A5B48B91F733CD874460034A0E38DC93AFBC17670E32A1804FBFDA932105A28E199AECD45C51B9060D06D1FFBA3D8B77F5E7B4D92CA0778C2BE126B547849D48E7AD4659E4E6D8C3819475B0290D1F637B98A20FF1217BCE19056343905F4E6B7CB10CFB041E1998EB42D66429AADFF71185CF1E24F47FA080736F2B3D14ED29A390F270F00AF06B6DB8EE97AD432F2516FB66D8721D718C6A4B4D8564F5254507CEFF3B076002947D92E4883942206735C7B90590472772A503C947EC22C805F8E18176A1BA05D2F1237F9CB496711F7AAB7263A98283185A91AB3E6487176ADFF529C197A96AA8AE08B2E55BB515A299C6B919F418CF36D6F4861025F232955FC7EDB0C4794CB66F4F349BDA9516C6A26DF15524B37972716E3F5E7E4E73DFABCCD0C7470C564C119684FF0348B1A1C63FE0323A9214474CCF9B9EE6F425AD43B12D1A28C853594822632A1BC42B7F74A3EE807E5AFB75CA530D58985D685D00CA562FD645B0208679529D0BA7C1F6702922C1C2822B453D80470D6CDFE26B4036799D5276510651C5F6EB2B835B32E0D901B8BEA1F44EB25CF32737F7CF0758114B53479C4D57AF031A434001B3862831238F9EA9A383A3EFC4E44BC6F4AD47FB41C56CB6F4EC216A432BD5330F8C65903C7A213098EDE87C3A5F80E291912D4B6AFD1C6B3C2A7FA60D17A3E971C02D8A869E6E4E861895EB54023CDCB8B220C6E56D85D40236BE0A0F9C180A71854086DA766FFBE57018805BB99A70B094844F188FB92D5BA535E8FDE2FC1D3C12133FC29480684904CA3FBF77B30171F83C5CAE96073C15DA0 -MD = 93FDB3B96217FB2EBCA22CB6F023FC662264302704BF3D44C91F4DF0 -Len = 10427 -Msg = 106A9B0773A1BB36E0E889CE0B690E610BAFD75981F024469EFAE3F5D4FB5B19E1CABB5AE98545DD48F3AB44C9D2F94DD53F8252030D6D6D9BD4B54097FE7E8C6D58EB3BA59285822416E3FBFFDE6799D9253C10D91F7680036858C7544802FE09249C28BF8D820AFC4AFC9FD475D97F488423C0B78144A41C7AC9D162E1C37CE272ECAA7D97DE7DDA1B60F7C50EA7055B7B8C214EB9C2107C6314CFC8B9738650428A6056D78B03627327C54324C4B139E3C778C72BFF78ACC234C3D015F4ADC7021DDBBA2FC39122C8D8918E45A880FE2890B5050DC31D67FA2C93DB757C05B023C267734C55F2253B1A5D03222A4AD829802357D10E33175F14708319828F1F2EC3E816854B119D646384134132B1DE23BD8508FFA0686F5CAF13A8B76EA0087F8082240EF567CC583A13DE68F775F4579DD351B76558AE4566CC46B5EDFF4667E23F700DEAB57903A73F1FAD49960C408BEF0698C772682B574A68153792E669D1DAFB0067919FEDA4C103CF5BCFC3F82DA0D5EE3A4B8203CD7113DD9FBB4DD46AF90AB95304EDB893391D9686051B153E429726EC12C18B3DC8E35E4DD32CB3D1FBE04FA4499CBEA8280EB683906071916F86998CE065850CFDDBB198F0C2F46FD514DA8735D0B54F7ACA18F2C8CE02D8A34301F5AC0EBD2669D51B238719EA1CE4687E1A3535DAD437F2BFDB9238D1B6F2B9C0D5692A12FA3FE367C05C8109B015AF0CFA0253D60EEAB310E4E6E4EFB2CEDA94CF97CC60917BD5CF9247A75190CEAE21999C4C63ED5CE504F6F25BE9941EE2CAE43289EB592CA2733C2150A1790CFCF0350F6C448123ADC8BD70DC6841EC6A5432DB33B542290BC2F021A8A368C5198FFD8DF1B0448E93D6ED797175D8B357F11FFC08679F2146B0B494BFB675DB43F87AFCA3D0C81C8A75835032E8497A22A501F7DAD0D963284FFBCE075A58C9406AABF3BAEAE28248EF23FF43623AAB45957FEB72C4DCD1A41D2BBA0B7138D2328D0B255C755AB30AC5FA172FABE5D566F5827D4C6B37546ED5536FC7EC25E3163E203D2261B82B02415450B1B4ED882267A09FC79B20D6B6545F817B645B0A4A7656036EEE5EDA05057339C3DEF86061D7099A93B7C139C03A1D297892BC131C70B183CDE1FCC7EFD69DE8D8215F7911BA78C7D9424FCA32E027CB1151A4A5A0014A3A90986C851094DA94B6E400C5195AE4188BB16C6853EA283A240DD85126D71AA2F9FA798C6DEEA4BC260A98479EFE10B2B6E6A88680B61DEA61E4E0EBC784032C536E9752D0AE2D3DABCA246D04DBAE8668DE645F1255EF1F914F8455E507953FC950C59A174345E81DA61AE9E18B15FE83A08A6A2AE8D7D18E2289581CDADCF40E0D8FDE57299C1049A580F46824F66F9D60A7A900E014443C2F2F4CF8BFE0F97C26E90E3B6A24D247921B63AE35B7B2E29FDB6002AF8628B5156511B15C37C0ABD0DC89A7C9BBF67E52EBF085A8319E72B54BE42A003D8470F8DC976165A6931F7AEAD3263861B66270E1C5F318FE0676E4556E4DDC1F9BA8ACAF3354A17F4385875000219446026FDE5C7F23B3B366995010F5D443F7FAC31B7FF17A700B5B73E134C295F308A3865AD166A8CD9503A92D9D85E0465AF05EF57816887423A733EB7D2C4A10714C31F34EFE46EB64AB20F2BF24387345D34A3F5090A9B7CB4BE430B34F0B3BA2FF553374D67D75BD8841DE3230843CDF4FEC60E077036D9E291E37ADB6CDC8EB5B0BD29976ED8374BE2B828EC40B84A99BB2D950A0E9E1865876C527AE2ECAB1FEC06866F983498D6820A3A0D4C13C6F29208899CF19105A14A197621A9AC66E9F834C22D316A4ADE0 -MD = D3A686D01264866AD98CD2A2B3895A85F0F6BF7A20C6FCFE347DC221 -Len = 10490 -Msg = AB6E4264D24AE64F989B8A43B09E2C63FEA70EA19ECE94985695DB432BF29F87FB050CFD7B81373C2D659027E37F0CA043DCCF6AA46B7BA87BA3D8766F70709C1120D9B2EB1DC66B37E5A49BC58B814982B10575A457093ECDC838CD52AF1B66E17A1430E32509E4F11CF1662AC67743CED36F11716CD3DCD78A59D2C65977490BB997D224EC812DCE84C7C613E8B72E1AD0C4F4E1917E175A73B8B55D418BEA1C683BEBBA8180ED682946E00A331D5AD97FEDC239BE0D7C655EB1F79A53CA715BDBFB2245F01CC415356B1403BD38BAE7A61E725C24023957F249D20D08011844FB49927F9A4C8F37B183003F3FBBCAF0A5A2D3513357FB9455ED7CB7E1349A4293BEFD21ADE5E1210C49BF1262495E6857D643D923CCF49A23DEE39FE9DB0B6B456BEF28D43F11FA7741E9913481B35929CC726EFCB5B17B2E877DF9E8232000F6582ED8C3BECAA866A72FC040C3EEE53B8C61CCF4401A99CF7E802143E0EABBE70E09E7DEBFA7768ED63EBD015A50D406E45ED5CF19070BF11C50DEE78B82368903C1456C8AE111472CD3FE621B23CB0550FA35442E7A143BBFD6E1BC942B496C33A9C9955B3FA073081CF2BAB77F170BC78EA24D5ABD2484031966B6AB9F852B37DB7F0437A93A482F05E6E6FAB86C7AE853DBA361A5C4466FA5455511B43DAC81BB7E2F7E42F37978E0B0DDDB9DB0F925BC1633398393D7A812D1E4DB7438E0A23B66465DD3A2822CBEB79152CCC4367FD339FE68E9F85F27A8D16470D28B382BA5F10E22EBF9DEEAF7947E094A4FBF74D96CEFC4DA36543E5363A97BEFB531EC0C109CCC003577344DA7076CA16EC9A51D72D340F3D712CFC188F24065AEB9D9CE05A50438FD051E100C67506BACFB567479EAC10EB699C40F896EECF1BC9D0950A07571CC559CE897C6244AE25E7807B16FC053CAF320D3036AB822A3C3136E1D52C98FA0425C680DD780D70A73AE2134D5D8A69EFBB0DD2126F3FA252E777C23A778A28BF0F05F81FB920C50DEF473EBC547F87541B5656C9FA2E83438C56AE2C4F7D72189A119ED038094F7AB0B47B7FE4BCF2178114A18DFC4B45CE2306EC22348B0327FF74DEC9790AE475B448B140DAE05AC0A0844ED62CC367DCB8F5F3E41EB5299B5244C2C2F6ADCD5538D0385A727BE42C0C17824127256B1AE1098C8EC64131686BD9BE885E194BF11B5A66A8D1DDA94DFC09CC574F27EAD84288EFE609C87E86FB499DF611623D664103027D7B722A8185A8D381C259FFA63E99C006CAE7CE7BF3E7F9AF271B9F65FEEF2F932EDE153D45167B7F7EAFFADA5D3C2F31ADF35706F1B700AF9976F2E2190B24A223190AAB273A066D9E68425E1399824F8A94A535AA544A8953515308FF36A5FB6379922929429CE26CAE942212092E571083756AA20372920EE8C41A7003068CB799E2C159B4BA101233D653FEB3633F13AF40851BAD4EBFDD86BB398E0882ECA0EDA9C8D7776718B0D898774D3DDB8D517AB1A818CF690A10971A8E40D1258A62587250B7E02777AC7CF7171B07ED4082042478B94934E9E324317D7113125486EFAB45C547F7A9F8CCC27ABC72F0410F82782A9707C48AC9B2941FBD60B768018D0986051A8FC3393D2575184179557FC5C97D520FB4423AD1B939CA0C123179F20D98B1DFD9835BCE64D239491B74212410DDA72E239F77937D592A551FBA21972CC35C61E20E786C57E99B987F6C0DD985FF031EF73E92E9492A91D631B83EB7643F7E1ABC8A8EBEDC0665EB3CC17748F5AC7DE7D29BF920874B607D4531C21C1D467E31BFF430590C5DCF38C2E0DC26074F79E2DB4231C17D0D510EDA027511515C0DF8AAE9BED7E40 -MD = CD68DE0C4EACF347E3C9ACED2DB4CFA54D98398A415A5246A1B79758 -Len = 10553 -Msg = 4E0BEFD3D13BF2B4DE01989FB28F6176BFA27CC9C1CB2058836429E3D41F5E1A527CCB05F02E40DF853F5C888F5797B5487C5B56429935CD644B70A62C876C8C876E9D3AF02956362564407EBB1FF95674A731D21CC18076FA84A225332A5FC1125E9AD52F9CE96A6AFA33F31BF7CCA46A0C9CB84839A395FB44B7A93DAB2848E6A108877E112DD8DE237E2B5B843B807AD6C81CACE3A4F128C3B56C5CE09C47B3444026D9810B592840A16ED5539D91E1F813D5D8C6A1E52022931C7E4C9043B2040FB46E809D39520E348FF414EE6EBD554080D79819BA782617E576D3D8D42A2AB9F6F4CA4AA1A955AA292C1512D7C0BB5C99663627757D374E773F12F02D164F17C6617E8627168B303CA6A7F5624A4DE7A93B0D73EFE3A51C2342B80690F208687C641E17DB40D46FDCF6EE7D2FAFABF4E56CC398E91823F0C14F6354471EA1CF618FBAB5874D4E3494415BF0FD22A69C211396F158F44FE650314439A0AF1A3EF7CDFFE198BA815B4323EA1B16968F3CB23D9618C1826379285C083C7BC86078F48FDA649AD3EE3023630FE0E86D02E6E8390FDB3C2277CF7E908665930752B0C648E7DF1E8E6B26CFD5D6A9596F89A6D5735E9A34309C6D20814A0916C0EDD9811F96F78B987BA88D2B3CDD8E71F3C881577729BEC43A877BC016F871706CAC700C98F5255A7D9210646EB3BDB9DF2F9FA4CD28DEF13E8352C5FBB46FE5EB7BAF67A16BB8087E882600D9BB1FB0F933BAB86AFB22D950EF6EBBBCE9E52A632ACBEE8CDB0DF911A48A3E375BE6B6C159A9FB05931C8CEC555160AC104B8A8776E5B230C911DFF5AD342387AA46570A42425D7996302F87E621A33B869E7C330A09F291EEE37ABF49C82AC031DBC8B6C8B76896E091CA60CF46338AA379F52E71E499C1DF5D0D48C5D454B7CAB5175837787F8ACB8DF50E95D87FAD6B512DB90C563FD80576645F18C52F680683975EB147F4695DE40896EAB4FDC0D20B284BB1EEC02D11A66F6F2A26794340C8234AC85AC66B75F1C3BB34F3038A86A12315321CD27F4B8633819BA899607E0081B4CD6E4A0410CA8007F0B77D56D863330B96BA78EB1FF1EB7D36936C69470357E56F5EF494434E51DEE3FBF5CA64BB89E0792BE6F35072677C47DE25B22E4FD29EC635B5AA655B8EE0FE1C85864012104A8755BE99ADED2D91BA69299FD4B61667A589386EE08B955C713FBCCD584BC5418723C13B6AE9EB6A6E6FE353B542F5370D07152F0CA92EBCB2FA9DFFBE4B961608C58D9F280EACB5C31EB4C52A2CAD766415F305A5E8A559E743C4D3E227C28F8E6782344FEB61FA4A88B6C974EC609B0A4D54B687281ED40FE83A4C21AD485FD9B45E7877F56229D4343F329B3DD30DC62D044311AD78DE0C11881A582F5810BAA843E75D7EA92BF45B22C35299A1E84C83B8F9C43A26CBB4A6EE9A7F73D1382C336222EB0523C199BB42BD1B6EC261C4E888BEB669795CBCA295BC1B0BA1B5733AD7D134EAAAADA8A4A7F57A636F602E6579B54E8D66F016D902331B03F625D1D215797B9AF550F726A6B9E6F46D3F1E2F31857B67EC01AB36994C442A682880F79900352C44B6D9B133D50E8E8E3A3932789C803A9EAA5BF98866F179020293B188AA27342FBCD46CB939FB6F411CAA99C2B78F744C750C391CA7739AEC5D5CE458D47360579D21C9A9868267C39C67FBDE4379F6B470B1C7AF66176784B544A2757A75936BEB836D545F401F80306E912722C1E230A7E1B936CA0EBEC44879C5138735F726DBF08785841F29DAF29A145FE2C82F2FAE4B37988945AAE3CA1B6AB72F3880B7583E127C3C0C11A6248CDF8306465EF46C67E3AF03AFA5C36F04EC3C2D3600 -MD = 4E37F241D128485716425309D148CD1E6EDB9CB3E6CEE0150D117E4E -Len = 10616 -Msg = 4FA3DF1DEA75AD4B9C379206A95FED930000482E5B683FD2B17DC8E7D5C4BC1B73186CCC13C9FF2DD09FC1D4F68034D120E84CA73A00B71A3B46D1EFC6FF88CF2EDA65810B098CC5E651D9CF064E87076D5A871849F3B405D3D58EF5B1F10520A9FB4FC84A81A87B13DBFBF9D8674943E28C257E46D8AD7BE1785F1DC7C9B1BD574AD1DDA48F0255C853D2490BD3D63DA22A8369CFD02594999A2EF443308FB8298266A11EFA177102C75DC674E89FC9DCC1A0D3C863BC26141102175D2678EB6E13D90BBD9A5EB89AE8C0CB47D7F340D3D32042A2762BC9BF2B40EB40E87FB42610FE7E357051F01494704FBFF73321B47301A0799B7EE3FE5E62200F397A61ED4509A62F7106ED0EFB0ABD6AE9E4A1FE9B02C092DCDC75015CF602F3B9A8988B609E6C0D1C5C3E219FF57875C2EF01615F89447EA602DFC94EEC17A398C014BD346691FE209A002771DC8164422CD166AFB457A8B3071282178A3EBD201D9B07B27E711E7EE7D33AA5210ED4E4E92486775D14A6CED092E34A7AC82670939948FEC149F9C018FCAAD3FC597D315713F44FC5E1725F448ECAED40E8D841BD02F1E81C019B08F99412E360C0BD378391C67D964B47F50C26F0A483ED664023616B0FC9AFE43620DBE9CCFE070EF295C049EAC754C2123130C6B2C0232F6403AA7F0DC35A5999BF95D34AD612234C6289277ADB60E4F72EC2DF570F05395B3BE8A0A3C78B732821AA08927C524E15D65F66A3DB8C1C96FB70BC0686AAC310051F469FC5EF880C0F66947C1C328F97684EA24CBE63BAED8D114F40507C2901034E6AB3893F366D53F1CFCA309309218CABCECA4722FA9CCBC7249B87C12FF8397F40487EB00082E7F551D27E301C3BC7B5389F7042534BF7E692DFEA4DA24F7C34B8D2FF145F54B517FC97134EC5AC2CB925C508D7A6BD01FE7B764648274972BF08560D30802E0EB7EDCC57AF4797BBF92E8688268606B0F1BC901FCC22136281665EC16393FA9601C4FBDB18CD1D1EE382BC07973903E91FFA87399D1141D49F4F0C064ACF3AC9897891DF10BCA0116F2C3FEF180FE6A8E937C478F2EF293AE9186DCB1F76B6E48101DF64E57EA7C64C5C0025E221C8F5CBA5CC92D9CEC628140996B26D17F439B780F59A999301122F82D0495F8AB5AE1EA5790F45E992DFE00D5F82A7FF1354AEFDCEFC0D2D1731D22FA2B75AFD4FDA25AB194055FA9628381055247C8C7587D22E73C60136C4282452D47AE03AA035FEBC26FCCD42A1CB79CF866DB6418A49FD8261E877DDBB839CC39514DDB87A8A40D795532626FEA4A4C35D13E028F9ED1BC09B06BE999B8DDD2258AA0596BCBBF72AF67E10BEDD58D599B8D577A583D676BF5561F80CE5E9528729A92DF578FE75DBC70474B75747A8D55DE70E57BDD62D4344DC2115ED4DD62F1FC98BFA1E7421FC0700025C46D0ED1BEF35C3B778563211B9FA9E8BA4BBCBF01C2FB626AB7EF325CE9F468DF2CACDB178D36557CD85D542C067C289E926C1EA2F20ABD329E984168BB6DEF1DDCCF214DCB6A53AFD462F0E7E7A19E8C88F049244125A6D7DD41E58BC9B2FF7FA2478DF76AF73090CB1AB59E388BA20E2C297C967737A1AF61793B68ECD7439444C48E28E2D09C48FADA5E0D1D15E5B340A52F8B3B854CCA479F0A598445E14F53B3BA36891050C79673DF3E2B5825C955A29E5C9A22F3991D0AA785718CFEA1D2385F8E47E4A75ACBC7988D0558D541D71C4E6C5F1CB15B60CEA0C34A67BBCE105D7A896025E0254DE7D7AF724C9027D44B8642192A08AB8E1EF3046DDA6014DF7F4C9E63C635E48AB2E70B640D480998EC9357E665F99D76FE5529EF23C1BDFE017C3A66CD4EB2DDB42EF85EA0CD65534 -MD = 6297DABDC66A68A28E2F32FC95E5864035001CCB7A0DCF592467D415 -Len = 10679 -Msg = 20DABF5BB002BBCC9AC5472C33ED55EF9FE6461F2609C8028D74BCE355D2D1F73D818CDD337DF515A525B40FCAC249777016CC59E432BED7C8B70CE59A60D175742AF89C79B23DC58617E5AA067DCCF9C1858D4D4648D21129F525A82AADEEB8508F44336BEACEC050738DBACB8E4E02A2469D6D929BBA945C14A6EDCB607AEF1BD25DAA99FB7C5694FCBAC36D06DF992EEE8FC1FB65EA051E8A4661C9A5B76B42F9A472C31AD6182920AC14A771ED872436166F5D26A710FA4FFE0CF27BD83975539DCBE62709AB9F74B6785FA54693C32934C49124506B4BD71B46B5595FC2BF3FCA8FC56D0BD07180D126D809F43ACE409A9ACE95690E6CBB20C0AC341DE3EFBB71EA3C63930F69F02C959D937B0A3E00B807087EF0BB406B32AF1DE732C890A450CBF81CBDB8E7A047FBFA928E0A026FC61C1853EFE357D2FB15637ED155151616CE0DCEA8EF5C59CC79A31641A8866F8FF2D271975846F6F81090D328A6BFBD9B2D52F6A1E8A614702B102BBA9BAE8AEBD9C32D9338F81D181570DC477F77E11C262E85C5E0A436B9E29AFCA106B4AEE0669F18292DE7282204B62E681B5FB52F219FC96CE6609F9D12B17947B16006B21ED127EADF0CA2F4FFFF356A05632F92819493E651EC38433809333A541961C9EE39BB06A633EE6C8B27D98AF541BC1D35BD4A320EC91B9E36FB7D8D98FA09565403442F5A4903100ADA015A022E40471F1ACC45A07CD6E0C449CB840052D5C1A946012E678AE19BB582723A8A541A80337BD432FEF39F2B4C243A419296F1028614C7B7B0F1C429FAB8290C36EA6D3598C7E303C545E6F094A55E282833ABB5D2CC002C3EC20D4F26D822A4B4CADECF9AE34E1EDCCDFB6ED6472FE12CD743CB4A13EEFB6C854ADA88290736CCEF6386CC03C81036313F873447C0C827095F0EAE5AC7F748902E1C82568CDDC41FA1BCD4987E44F6BBCEF57148524AA699146640A5C5D7439EAC85B161DB3C671CE1545FF0E36F2200AEE375BC493B2514395A1185115E4FA9C4CDC13FB60A1EC336328A78AF9C44C59FFD93D94F4AD7E34BD4B33F599DFA1E5A77554F1DA401E03E3D2EB02E5E1124EF55B00DDA8F86966E77109ACCD7E6F3B6A4ECC435696217A1BA422C7078928B501BD8D3A619DA10D654D74317132E009EAAC2C624B54FD0F8B4D5C878720B775A1AFFC2BE8499ED432F89071D4D5065118801E04277D9B175530FC61A20D5AEA12D5D926D741F8CB7424508DD5D91D715EA260FF33F727A8BFA335828CB4AE4634880A6515D4AC61B7F141A61C1AE9911D830441A061AD2C90BBF4F463E022856D2F3B34989FFCB6D3C5620880E3F7606AE5CD6F528D1FD0240F77B29D0F3320CD8347AFFBC7CBBEF63FDA9D8268C8BFBB6B4C6211CC121FF3207270DA2C3B8A8426D4766581FDF301963A0AFD0B0BFF4EA9B350B2F22883CB2E92B0290BC9D002C8C822DD3C1C46434C9A570947C551DA6C5C55ED23CF2D286D75489B6B2664067848F66031BA51F7D148CEEED498DFD1BEF0CECDBFC535B9CA076C6DCBA9B62137CB4F4C44905495FAD904D30B952B94EE92A8AF411DA6DBF2F92D1E77BDFC1B188A900F6E273207231A12B3762A30584A072E45397BF53F86A69BB5F565E806B181793E430AD4FADC186CCEE166E39070D9D32E0BB1DDAEF4B6BF7DD3E2A44DC3C6F8254EF005724E78E1138CEE13095904376E6AD7E4FC61E915AB5B7CA3C2646837F4C009C6B7F9AC0ECFA45D2D75A5B47D44F050C98199E6EEB5EC68E9D24C52387B1EBB688A1CD09CE1CD1F264740A2E1C98F91DC4FA9EBACCAB65521FD36CA173325C4A049C1BE12A4BA82B8F12D5C61E314B09349CF7090471ED838AFBC367117BF15F3CAFC2824FE8 -MD = CED92F580F56BADB104E8B921B19189277EC765F153408D9F054C924 -Len = 10742 -Msg = 06E786FC6E9C1943F72D70E71F47E1BECE41465818A985072E383AD818B4644AF8DA3E3318F460D31F480A8E135D508EF179A5677C6F2344895F9C6A341D6F4C3C102239E530275B6BB1F49F3D542DDF89FC0F6152A6848AEE69276AD120D48CF428E3D160464E966D08A7125A3CA267DFBB972837AB57A37BE4274AC6801B1081B6DD13C88D2240FC1C23DB300B2069C43D1D8BC1A48AC3D151DB782A4B86B704F119CE3D518276F85FA0EE52EE4E4FEE17F68EF80C0E0304BECFD7CCCACB9A88084B33DCA79BEACBBBDD2EC57EC88FC1ECDFE773957AA514C629EDD15439355B6D71ED4A85BB0C2F324FA71A98BD99BF691F26E5EF5415788A36DB86F13D28F701AAC5624F02FA97146FCB4AC6ACF722C484B03BAB9B1DE0149A330E9963131E8C4E5F82D2DF7387DC88BA4572A6E6A20DFF65F0D1A24F304C4CF0328FD0424D69FFADAD6BD546962DF6387289345AAA7573E6B0718466EF62C37C7092E8438153811BA1B9100CEDE99DB7AC4980EF99BC95CF7CBFC1A94D3D3A3C66C77B3619F7330801A15E336701CB7FE68AD5DEC62C34B869FCBD22B5E09DB86C55A6FDE6BF3A8C1D549BF8BD183D4D3D008D05FED3CA0B69ED035171295103CCC08781D1854D8F3A3D42B250C1DC76518CC2EE7351ABB56B482D0503F7372C5BC66135DF53676492E7D8856214C7B686807723A7922E11352BDACE2CA351B944B34CD62C43E8F264093D2D4A2A7E17F8556ABAF7A16540415FCD31FE639072C9D0D09B5BC2BCB0981815A0A861427B5C8F463A77D9B7EE4BF78E777B668E250678FE254248E39E0512C5CC14060920F8477CD4C07F7402AF8DAFE768AD947944E8101402DBAC10E2D3568684278DB9D17E15ED2396E28D5214073744ED47978E25218731C92E462B2C844FC76E6C62A24A0AB87B1C187591376C6124B5DCEDC85511D6989ACC651D1D3E3B2C2419D99B522D50984D905F9293950CCD86EF89CB723930D92EB3A7998717A0EE2E7D5FC4B62462B0FDEAF105B8F29EB0618EC77095FFE420CEB0539372C125612C70CEDAEFFFF488B86FC1FAA98DB017CFCD54C9F729FBDD3B2A507C8F5ACCEC96E569299F2A9402F818A8F46D80CD8EEA74A56406418F5D4B8A5C02344EA0A0A60EF2A7C6BED35157884BE2F3092E5438B96F350AA3E049396E3F393FF8E525CBE7C7C9D1C9353F2BAEEB082C90D7EF3546A948890ABA9D5961C70A825B719D8CAA415FCF3826F4A0688B5A3DE5E39B320458277F6B9C6311BEAC8F6A8215DA4FB0098E39D47DEAE859970C5F36CB133838AAB9B17D9B1685A6824458C2988B1BC902C0DEA006A4CB75CAA22B31086B0590B2AEF6E6C16D2ABD1D6AF3792E2CA1C435D9EFD3325E389A10B7D023FECE2FC9C8DEC4C59CF50C573191F72406C90C46B6D157B5EE28C87F6055EEFA3A2FFE193CA17DA5A1F2C337FD0F5CE5C3905DCB1CF6415701053A30BD0D08C86E7606F4B6805FD576E31321CDEF7FA3D88660BF728682D2C919936E6E9637CA9F6CE67017E663AD25B7648B24CE5B546A0E6D11F7A448B593A290D91A40C40173596EE49CF4EAA1ED46FE3BABB4ACCA87E45DBA6C4630BA44B7B11821A26F832C783A8FF66DBCFABF47D1EB033DA811986E785AF1A8C3E71E7F5BCD8731176DF2CE1F6CDF764075766322D8158ED8BC7345E03C59458082F91E1C12F4E4E0C7F00D3B66F31ACB6085B6FBE1BC86A2B24D1A858644E8D4523E157589A762D26CBC074F171249E0B18575440B5070D00D82F2D672AFB9872A9E6FC6CFD07D6167BA03FF70F284C342615311CFC3E855E320D550C5AE460884E067515E45D749DD24A5466A983BF06303301182C8FF6C9CC29824F2C5AAEEAA537CEA0EBD49A26FF267A4CE01328004 -MD = 0627A2585964B41832682D8C0E959A08726F9E6FC48D67206E918EFA -Len = 10805 -Msg = 39342BACA705A37A60B39DD6768BEE63E792C17D09B0C1C7DA90636644CF84BD8865D8A060288A123A7C8078D221A7EE5B32DA1B402B3B0AC38E1BEF74218C3B09935C7AEFE1395A2D06786F6F94AAE854010DF5E7F12182D4CFF9F61BF325FDDC6ECE567704E5F01C790AA572636038E00CB1F1F03095B9536B00B3A2890C94F4606EC1BEE80B2258ECB095C5E851E575B41046C08E8CF57C19E37AF22A1F4241880EA0B79E65B8D480423ABFA8B5A4B17CCD724120B52E1072DDCF9D53F27ECD8712FE43D292123BDAC9D3674E221AB3775891D68A4C84B0B6EA561A72E02E9908625EC118F450D263DAE45AC9A2B6E98805F935EF148ED3EF7D1B2C9C851915ACD02DE05076B0CE046656EA4E3A88FD7539D08966D6A6A35F7AA628AB81112DA81E7484276AC0D5E36AA751BF708EFC0C1986E7F9E4253439704B7694082D467749E9903EB714634DB945322763B7E84601BF1A1689FEF34686B8A134B732209C646AE6121733CEDDD75B783D6E9C2B910A8E1746EFE763D229FCD09FE80EFBE47D058D1722E282C3A4D5541A92520660E8A7C73C56797BF5078287677C1B9FFA184FE41FA7E8CE4382C7DE5ADFADC846C0A41F6444381BD78C5E51FB3F0EF59B49ECFF1740C2488DA6039D61259F8D9F08FEAD8010C6C00D5026859C5EF13558B147A6115151C58B714C1EEAAC1EF43A1BFC69808F96BCFD33B647FC90117C1E5DE7AA2462E4CC2AA2DDEE3E376481F50B9EA53F439B3A3D4DEE90EC756F0EF84DEAD03FC0469252A146F95C246B736BA9D03698D4AA09AAE45477A9EEC23ED46FC0B6F64B283765B8573162709A62378D1FB47BB8B118FB5261D760FF7E44BFC76736794476E25691E3B82914103A414AF7E3296DA4ACB0BF7C59ED25CD232E44FA7CD8D6BE76A045BC25114A64DD38DFAAAC0E9C8A3D529BF0A92BE86F6B4433EC2A86AC2AFD12ACBE37C132A4E513788ECB03CF5B0718AC1F76B5B51FD101ED56A69910C8D25101ED6C7498968A7163D1C7D7CCD899D386F781428083BFB67716C5A4357F060DB251F570F5E6402D4273C27C2A249D6DDC4BD8CB2AB4FD36AC0A9292FCE74E3C3B637BF065CB894DBAB327861F8C650A83E8CF32109166CF62E6E27F259120FF18EE6D29E5FF6CF44D031D1C820E08EEBB73D9C7EF625929279B16EC24F5720F41BEC57EF94E69DDEEE78DFEBA34AA9980C3A09DEA50C20126713DE791A564F5482381C048BEBFB5429CF14AF5B4771CDFB08ED1255173384FBC667D2ED2482B691D97B85ECEB213ADAD93E04BCF5BF70ADBEDE2996D37AFC171437C30D2B62553B12404F99419CAFCBFB4D28A63B48FFCA1F4E947DE71C442E619CB67A214F10DC6BA03E787D17E1AC8FD2584B0E00B5C922D34A6216EFA11E12C12E76AEE275FFB6E9195E2A0DE4858975E9860C8AC4645CD3108B04511937FCED0783DCA0B33416A6916E4C264EA20C15B0A952E60B65CFC5E145FFEEC9B799CF311A405020CCED52D952A66E9484C3DE861EC14C29B2B5B11E4205D581DCC8088709B11D131695383BB3460921DC2B8A8E86D1A7C5E53E481AE08687FA529DF792E70C84133E1382EB967D4425EA90E98B4011E8C2EEF8B87750BB54F8E1364C7227B040053374F6042A6831EDBD936895BCEEA306E190DAAC0134C393D50A0416E7ED53CA385D084A094E5791DF44E078EAF219CAC86172EFEBCAB26BCC2F6F550953398AE0643292F9F112E16CC46D1041E66734D2FEF067618D831ADE36960808F2C01D1A90D721A6C6981A4D5482A4747579FCF40B7F516F65E911C7C0661B0137D3A27C4EB8C1F4D8F01F806B2F777736024811C56677BD52A31DD359613734CA87FBF3EC509FA287B8345A7198184047D22A3281C205B393A1E457F9A7470 -MD = FC7B61642AA80DE3ADF1218ACC80418B79DF1FFC6421DC468B3064D7 -Len = 10868 -Msg = 836ECE04B2B721CC0647B42BEA0D94A0459C9F4314F9925B99EFB1733A09F9C06E912A49D380732BC51928E72E832353204E7B53F3F3862E5966D9633D46645018DD7B495958512D51727BCF1AF45124349DF8C03B48CAF7696C4C62E122E29288BCA028C038E06401A3D72C79CDD2CA9B52A970D4CAF3B3BE3BCAA1DAF82B5D534C9975537F539F4A034F226FA1391936720FD7F19E067994F6E6008110B29B00B0816339A2AA8314DAFAA8F89EA72B8FDA2205A4C710B80B4D0EBB0534A9A34B0E172DBA714D30B3D568BE52EF94C586F48F78C0DE0C137538FE81CE9A17F0062ECA085DEA720CC705CB74E5AB474D09067617D505B51BBCDD0A8A7C13C0C1ACEA089B87E5F92E8ED18987F574FE4F5FB96FF5B1F665E35179B95248FC125A1C070AFEBB0107E60B94D70E3F8BF0021A7A924C238E55D492947AB78BED82517284FC0FAB46659A2EA18CC3B334B6EFD44926D01E5A188A0D13D678A0F098BD7842C5D4444F505B2CE4D5219427C6020B1E07363AD4C2EE11E43AD38015F113D5F965A35DD65F42F49E6125B774F16B278B28A0F1F543767A45DE13D4D0DD51BD7B272418359CC07FF05B77257966617BA92CBB3135F2E65BA15779DFB618C9059CE65243F177F6DACE4CD5D5BFDCF1BE9888FC6EA3FBEE144BE78514223E5E2EA682C1AE20C824A6A9FE77C8A4AE7C0D766725B13EA029C18C4931F2FC07DEC5BFCC4F957FC55A0CE4F90141A769EB9B5E1664B836A0C7B52DC723C8B9AB56638D1DE2F897F86E879408032E6455429A171E869B94F90C25214A02569A7241709B673A43409E8BB86CCAFACDF5FAB2564B08D55DBCA7F2842941C3005D4DA7157688C7798EA57A404C4399F9E6B4D6CA56E7309E82F3F7E3898C1F561B90B92B6FE054F704FC588F540F9773A51BF4A23C8959773EBA7024B7E4E0F942671AD9583B7F78CD905468F920AB1C1258C05CCEC1B4BFA928513F504CEDA864695A38F329D70657BE74EDFDE299931025D2F9203C4B22FEF37BDBDB62F442D2C419112D49074611DDCEB3B9172926CD7440D933A497306B5BC14D83E4A74E4E04193340C21E299368CA6195FC5CAC04AED3C8186CFFF3FA729DE9646F8D9BB00CFA8CB0825C28E0A9AAA38881514776AC42974C4C8DD9937A1CF9C9F140BB7905FE49C19EC441105F2CA57959B889CC6D312EA56F7FE7EA0402C096FF956D750240C43A74C331E7704F4BC7291BD685D32EC61F68C4D585E7D0EFF8E70D5185C6F2AEA73BB4E602EE1F108B2488A6DA32F731A44DB21E394FF9EF4DFB17C10ED7F757A82637FCEAD72BA701E8E9CD53CA8889932831AC49656507C0EC2F59565B800F0536281586F039E6FEF96FEE462B502313CFBA627B1F1206C75F79CA7633B33577145FF53E2AD90BBC5033BCE26BBD5C6517EF09DE1E654B92EC128A93E5271336088EC9F6DA5781061D89928E500545FBA770F07C1A72D82AA17FD357927893D7C01944BBAD35EFA44DDC2044FA1E9F2479461EBA95D81D6B0A0046116E9AD0AE4CEE17FD9B3B1D450B35D9EE67A935AC76FD69B6E21A38BE86DDAEB56A7A72C86A64E2862ECA1413BED230A6FD7B4DD82A970BD9638B22F21EAE4D64DC9301FE5B67BAA96CF9E01B4C7128A9AB93434AAA5D6E055EDD1FE41ADA54C99D61B1123B2DD47FEC64D053C5091CA35AE417C6D2145F925A528A30FD4A40172DBD36FFDAB566E16D5C308C387C69CB3D4EF9C91F465EA7F7705CCC9370849053755E4F70228B737356D1F45AB16ACC073E519F6042039757BDD07B00609013AFCDDCB1ADEB18D90C9C8330EAE4A8628BA206AAE952F51A28111664459D032A9E721B7A0513B1C652FE6B012DF1C7B3127B27DC69E0FD7D89ABB29CE374D62092E327ADDD1DC9D966A94B970CF284F620 -MD = 772B3ED386E6FBDFFBD15E624D397CA347A17C91B7B7AC14F9B1E23F -Len = 10931 -Msg = DD913E124E9E4E758C2EFF9A27491E6D5415988DF0ED4AFEEF50AB566CB690CDC0DC3B2F73D87947DEDBCEE75BD9D5119CF529BCDE0BF80F698CE8D8F764C2A6AAEEC80E26EEBE67904F36D4CF04D6C4B6C9B5FEA14395B9EF859BE02CA90D9A3D3DD44261DC34FB656C0019A8A7BEEB524D0E8E0D6ED8AA6A0CD9C51154805ACCF9D4518B8A466A7793A463A6F2602EE9D30C07B5F8FFB1F265480D7160D30209AD22BE3E6687601D0B29D5C46AD8917D8196BE1E73932405EEA29007233B99C0C3061885AB3B959732F57F01D5B6B7CCCCB73D4FD8125B235780D71AF4BE473DB08320FA36AE6064DF396E225F931EABE43B336C2BC964F3BE4D5247A43ED62F486481B4EB422F52FE5841437934786B263408FA3546333F470DB228962896DA2599510C53C1597E695F6AEAB0897875A1D1ED693F4A53994462A54FCB92A7418C91608EB83726D0448149A5909F20FF7AF25B34F97DA9E41D3F7BA9E3E9BF8ABFC4CAAF9432BB8500614BADD427F0E97541A81D435FA2388FC658868A527EA8B762F328A470017D4CF3444769565412D1C212AA6F926FB50643FFAED9E93007634846649E6140BD8E6A3187139EFF2D800CDD916550A6A07194EAFE24B7DB9509BDDC34D2BC5A78EA01F33E0EDE62E4D80CAC7428E83B7663EF22662AD10D53C7D5FF5676082341B375A5309B0F7D2789F2A0C99AE5994EC9675196AE06019928C13F3D134682F04E32D1BA06C3A0BFC922D4D19E46B9495AD62DE78B1D09F59DACDE9803805A9D937273585C42E95EDE930094359D6B87C880C62242D9FF9D1DE971BC3C140DF9136F0475869E2EDC9DBAAEBEEEB760BD7E4941D1FCC0001ABEFEB6C02427DE22AC50F980C3982DECF503F5C4CB92B44C8ED8B391D73387293DE700B5044C12F3D61CF08DDE8CEE4A6BA33C0AC595C02A28F86D7DA555338BEA0B1AF1229ECDC3EDEA7EFF3821177882F5B78667A958D9CBB2BF8954A328A9C00898A714A465677025EDAD5D9C1ACBB40102306EF0AA09BA39540BAE3DCF8171D5A5388776E843895868E3CDA9C0779CFB418BF8D1404A89CDA76ABDBEE4C5DEAF71AEC10F78821DAE4741658A427FC30894FB6B738C5E2643F3D48452BCC6F2DAEE8A31592F366664D8E35A7AD7458B91A99FDE5FA2C154EF2BE4FFD4FA079FF9F46C2834F33D39E86BCB803FAA1883FAB66864FFDDA458E3B8D1450461417AC8767C4C30478F4C5546875EC60F6A4A37428F3EC750E3555024918309A0D7C827D940689D9FC5560DD47E333A7C08A9BC8305DDDE5B4EDCA8AE50A447235822A3599167E91B6749E0E1D11A2668C6300ED7A186AAB32086BEDBCACF9D834E6A740E0EE922867E406286385FC51CB2A05777C2099393E86C8855170D67A268AB80F4F4E59065E6F5B35AE73D61D8BBA0D9BD15C1F23B0E3072B91804CB0BD79C6A5B0B44AAD8D5E3FC7D2BD2445D51CC1DB9397FC70099C8E502144085A19C34E7EE5F4F15F284BCAE1A3C5C66FDD21CF8A403D36B9477DA95224E2E84A6C99229955BFC77627E8496BD2C078CDEDE987CDDA78A32FF1CECC40A7CED20064858B68365AF79971463E518E524D3C876956A73006EFE6EC797D2A1210008A2A65C239BE3F8BC4E9546F1F523768B6EE0EB1D5AF28043092C2A443C57988EE5D44C8758C2A95D11F1CFF796FDF149AC584D417ECC01B3ED1046328621AA49E46DF8D570D3A3D05EA0E23AD13A9A1250D048836765C957120E9A56E48060FDF1504C8F825290221A2B42204017E306F5E67752794817CCCA3E22E998A68E34E7C8A800CAC8F91F1306DE82B0EFD51AC2892EC9041E7EEE6D11E2AED47B13F99822AC6C49F497966EBC3BE106A6154AEF760BB3018E2376404E2303D833B0E1ED37EC8494F9C17A2B5B812F98646F1235A602BCF6A35F00 -MD = A68881C0D2CE9A5811CD2E16A2309F1289682C4401DC722389637DEE -Len = 10994 -Msg = 93E7601B1F3006E3B41FA2DF8DE31BF24E2B2F126CE7DA18CFBACE26FCCE90246EFF2A237A446392ABF43212893528D326C428DF7E90D3B3BED6E3736DF6A04BB8900EC7C1821C9E967DBA8A81C11FAFBFE3CD52E0CD2A6C9C9190817A12BB6E50FFD2D298FB38D020E7FB6A34AAB75CCDD0203BA64F0089B8FC6BE15AE6A386F23B8EDB4BBFC67CC73CECDCACF4F61ACD114787D165620478E04EAE50958FF9ABA9A5430648B1F5604CA633F439244307976EE3E22BF44A11ECCE4F178B18A4F90E173D90EDCAD2F93D89FB0CECBD65BAAC6EFDA72AA8F97ED19CFDBDBA89A6C6DDB9C0A11803EC82FD82D8AB48586E49D80AFBA2104C8D4ABB780999FDB29309F6D78C8C22AB184A943D63FD6DB5D274931DCE2FBC13D9062059B9FAE028BF5D0BC81DE202A1730A0514C6C1AC6254A8B94EF2567EAB061BD350D85E5A51E59E4719846DEFF259F923C2A450E49F72D7C1590B0C3EC9144514D2A5CE08298971C53B6C7EEF26D913EA720B4C4CF0D8C002D8B6E1669B5963E671DBF52BF7ADA21B0EE097A13532A7CCEFAC09EB6AF53B6E7812C2A25F3AEE7F6AEBE62D1320789254E1F4354A8CEA06CD24EAAB68AEBAED8A906ED3A462BE08FFDC420055795719AA5F2AB58476C170884EE7F6468123FC9DE53CF89BD398DF9AD1A06D6E54E5E002D87E1CD0DA2981739F8FD358AB05DE060C0B7753CB7E30EF6B0C54BB2E09231D672B2C3816A5E75DE54BB7B1B6EE1BCD1BE2BF13B66C9FB98BEBC50E2869FF16D573DC93FEA8BBEA927DE3993A95900800E0A0BDAB41538E5D1E1524F4CFA3D492C0AD8B427A8C43A58A4CAD74C19DE02BDF587E2DC583B5C1EFAFC8795BB796C5700B5DE2E2A13AE4652154DA2866E9B3104A35BB08C9A0698F61841310DEB8BCB121EB18228534A88B5017C9BF99E976A65A6D3F5A81C82F346F9F31D84A7CBDE326740EA543F73C63BF2680934EBEF167013532EE32E9EF130067CD97DA2622B3681B33B451268049AB8FD8F4096EEB4DF165759BEF40B763164EF03166A7C21FB398FF7BD77E1DB711743B9686142FDD5BA3C880AEA43766EA3F6AF5E1BDFB7A546118BFB8FA5337CEF053E05790627376BF1DBA8E76CC10C321B2D8B3555E0183A0ECE0BFAC57C75F652C3D3B0D1064F193884570CE1CF9F6146B2208154F4AD064CACF0877C5F0A193FA9C5B22A1E0460035D3EB525C581821047931BBE578F261B397CAF895F624AC11DE60ACD5DDFF60DDA77443214165BDAD0EE3C5EBEEB1F1EE32910AD938D379AB26D166B48B8D4563CF2A862F2026EB5244B4BEA14350060A0A420A7236BACDEE40CE46815782BD6A5E001550EFB301FD4E0FC2725C102D4D9ED2BA859A1244363CF01D8C453D0E249BB36C41C82AA26117BA22C1A36BBD2DAFF4B524927B2CECA576C64E25FD765EFE3EEFC26AF8C7D74B36B451ECDED7FF4314777D675032EA98950036A26325C54D2D558D675A2173BF8400D7B8B224AC5B85355BFC7C542FFF39C2C5B8A38E8197DA407B7FD6AA59D80C7DAB295C9C91F31069BE969660FE24022FB7C31CB5ED5BE5FD7184F2B2883C602798A13C4B8C0D9A93D71FF3FFE825A69CF57B3044CE59C88E00D3F76AD01A5B0DDA7AD2911310DB40F46F9B6E6C41A2C3F8AF0C9563236EFC2F216D056B4E82C2E90BC688ABB10635ED2B724C83E75AFFD00C7F62ECF904DDF43B6847604E64BB373889F1594A46EB605A9D06764D2F1857B46BE68A19DE9C19FE939A399540E6195B0DA862EF5D2B8DDB43127B8248449896AC05D380697DB1861E44C79C1EFCEAA1779433663FF9D78CBBA503BC207539F1F0DC32F4B4412DE61FD61FEA11A8EBFB2A0D67A57090F32070E48481B3BCCD2B2BC222468DC576697097BF1FE3F19E03D06E33FD407392B9D7077ACE92BECE875278D6DBDEA7352D6C80 -MD = C1CD9AD0909D1E5ACB5148DBDDC53C7AE24FF272B8121AFE0E7184D6 -Len = 11057 -Msg = 61007C1B7A2968146A712294AF1897E5741AA498126832E19FCA58C1A3CA694E46195956ACA031A0B8C67772D897DD5C6B2B1D824FE51768363384A249A113994297DE2D14D34B4DE3098B823661EFC9882A2BBEB90CAE9ADAC6CEB88B5E9E6041C88840FB557AD8937BE9078CCF96A6A3514DD3208CD0803EF123586BC44328B241742D45643992E3026C7C70768D77CA03DE8A9702E856450E1C9E2B5AAA6E016FB7C47DF9383CEE5A62D0B7119820221248752F541DAE8A807E5D5C2110AF6CF1A55DDBCBD829130F8F31F7EA6DC65E55B2602E54FE4006C90DFDECA9352ACD99517A30FCDE2E863CDDBFAEEF5ADFD39735905A37203912367E0D0A531B22712FCDC5B5214626A07932267E76AEB644AD710724E3972A72DA5871297371EC607D5B3E7788CAD58D1A26B7848CA76117E2D4BBF7409E5DE65414344BC703D9AC3FF538C49F1BA34018C596F79119F8FFBEC0A44FF09917743BAE12711E8B635695505E54F8D0BA601BECCDCC040CEF884B227CE77B1733F96B8CA2D1F4689DF59C1FBBB1DA5AE8A664559F51ECA58336E1614D0B1320EA566AD60534C42D062E1FEC670CC4800308231EBB49AD04F2FA441774484E817B3991B260CA106640E950179423EAB9BF539BE503BEEA925E3A51E9B38483E7F9D7994474884A99A5E960F31754473080B4A7B89AFCE6775BA9A02CFE0E148892AC09F6E6DBAC953B5B6D2F7A7A8A6F49E650B5FC9228FCE2029F5AE7852DEB6E4EAFA01C1C58EA7971B1DD84403F524F94B5143A95B3F1B3B6217E5377DBC019D297D7919CEAE2C5E013DA72045013878AFE72B043657CFAA9094DA7EC7E24FA43F0975072CCA255A6A48FE5C282427E922CD8F15DF0210A7F48E265BC8457C732BD85D47BDE086812EB3BC53AA12300F151EC40F574E58B56113B746DD7C966520E56AB69C9107436FEDF4DB6A452F286B19404B2AB536759524E061E8BBEBD7F271D5E0B1B7579EF343511E5CD5B1CC76E13BF030F9508456F6EF2A137728640B7658D733F3E77AD2C45EDB33E3562A265F8D463CE5785228B22B4BF09E732DF8BA1A72E0B4D909FC1A21365313F52CF0D985F7A827D454B5059F289410E483915752451C52C0837AADCB404F6E0709985F579D3CB999992ED53266C20C1F308D72BCB28B1F699A978FF6BEAD67CA57A0B7447CA82A703AE39FD7277F536F88D004E49A311DF2B135C898E404D05213FDD5533B59216982DD7AA5043E03C05AFD35E1CC70FF1E02B95156CD11BDA397BB6417C467521364A9EBEB657C1C7832680ED792BCAE6BC137AB6788C6A49851BC5658EE2334ADF6A39861CED0EBB58050A2BDD0A46B0BC94B59CC8A78A87165A81AFCBEC78AD6A84A10349B29F2FDAD0FE40F80751886113557413BED7A40E8F3EFB416F7198EB6FC743DCB0F786D7C3C654DAD183DBE344A4CC7DB8BC8F9DE9D4BBA3E6C63ADCEEEEA21128B9B3CB663AC38AC299934EABEC1310433A69E988FB13CCA817158C42933E7704F826CEEB60E15949D77F299BDFF686B7718D1DDC4950AE69C26DFCFAA37CEA1EDB62992E93D92DDB0D47E79CF8DA06A9308DF1A525DB4F55C32835FA5954A71F3296EE5F484BE975D1D52797DC52305DB80EB09BF22ACAC0965BFD20E54DF5EB253444184278C0561529C339422DDF259535AD33C1D3AEF4750FE76B708CF1D554CDA4872B0F186ACA6CC607CBB9FBFB9FFB3AE082586164FF0FB1C69632A6BF107F6EDBBC6A110968B2ED9BF1475816C5D79095032020D7396576CD0D2FBBC8D64FBE195B2E835E0DF898926D867390FAC1C8415AF25AF8C6BC26B07BBF2B6CD88F3909E7A25CA360990AF4C3A0495598E6B6A98EE57FF385E02CD29D1A779CF4CAC510C5811A6C505419573FF304265D5F5BD9B639EB6C7548221DA50E26F96783388CC329DC99F79BCB7F5767AD4DFA80 -MD = 2B90D5EF844BDEB2A7DB642CA0A3FB1202869CC517A6C1AF6B1394BA -Len = 11120 -Msg = BC259972AD109BDE603999728EF0BBF23A911829C1C910F0517AD7584AAB80B27D4A59523DB11EF7B86D73E480F82699E44E2E281172D41CEFE2A15AAE50E13918EFB63DE0785BA415C7DA3746A669C7F6ADAC8C7ED04FB5F8EC70207615C5B6157F3BD9AC31478F5005F0E8DE1139FDF40D2E01DBF54973F7225CA545AD7B8FAC8233CC579D4E06395BAE791A5E49838A806F69B57858612063935284F7AA2E3769104F13F0D3C531A3C766B1F008DB437A2BBB041691BB9377012A9A7359BA410836EF7BA949E5F56F70E83C99DF961CC3F49D4133BEC543DDAA14DABAA54FB6E5F5263B83DF6863E84179722577101CF3F67C08C753C5B079DE795D2922FA21AB23E2437A64C62AF634985266039F7CBF1E1D762DF49F12A4FF7EB9846E8E5DCEE559084F0AD175E0C6FCA984B168B7512541B7560B68C8AFD02FECE115F0E9327D3D6D57BC28C8F914E9A5B31D822B48E0E4865F652E9313F0ADE5665229631923A497D65E701778739C5842A08A09FB25683C38BB17EB95BAB4B358EF5647BB29D3BF86E15868E02DA7E0229E8213071A24B4CD373266563E36464C8B245DE4A62BE1AF9C7022F6C3894DE6AD8B9B17A6DF84AF65466C319BA43A5EBDBF24833CBCF17410E79637AD5B771B21576113B851BB73AF7BA9FA19E5CD7A5369068A51F5D6A928A8306829B810F59CDDFB42C3B58F6B0926877DD35C4173628BB554C7036779C000E80F93D26C8560DE78057EA74EB12230C8310D577473D94C2DF14577B4361B307D8BB6371BA7B3F8641488B1490B24DA9CEF1FFC732CAC6F9FCD69728C1B7B4E72E8FC5C42B6687F32FCF7B3A90A460E302F3A4E33B57B29803C611AD93BE3E6C33A8CEFD2A5297C28249FB64CE4C1A30DC1F8670482CF6E220A3E17CC95ADB289192FFCF0155F071AFE473D5BBD4204FB4308CD5CE0F13088A2587F10362D86465C3AAAA730CB82933F56912BE62F78BD6A413BD9842D71F125EC8A07442E1BB6AE8B9AADA6BC47CC2FF79B680F832685184FFCE05EF128D9D6462CF7728F2E582F8BA77EFF16085C262F945E3FB06B238B4A5345D1F83373DE40F95E0AE3C5F62EF4BEC3663688294F64D15310B6CCF4AAB03A358B0071114BB368FF489A0CAF7B222C013DD5D9AC39C736FBC2F7EAB5B4F5DA461C8E65D959140BDFFD2A871858ACD3F9DDAECE497B44565560FA96CA9B761764C6BA9D0888CF522410B605567D1FEC21264AD40F1CAF60F79452CA4F12616D6AD8AE73BB57112F6F77901FF444152BC287A90FD2C77187D50DB1F64801B8235FA410563C6EB4E5F3D3D285C1BB2203C618D1F4DF274F6C47A0CC6A892217C608CB3E9DA3E15A5E059B6C26CD5357F9AE1CA6710E2DDC79B5475B42E8DF2D9D6807692135B922611DD41A750B44BE0E4FEEDD632659BF0DAD6EEBE9FA9236E84AAAF278F69DA65428283B66E433387B3A4FAD8032175E7E9C565C95DC94A53E8C52B3BD25A66AE5C6975F32C45276D6DC4CBDE155B2B7BDB7E238D93F01B18BFFBC301E0A8A7036A70C4A656C66B9A1A85B51F690F271B7EE68BA6367B4C512209FC24CD286F0CED9F62572E22C5C6EA48BB92137F7B819CF54F62E4CD1F851F11D08CBD09AC24A6BD3FDDF65ABF05CB8DEAF2B94C7A3C8CB9913BD6FA9B68E22AAEF51729011DA21215571B39920FDD470CD2B4A0BD08C405578377C889418A87DBF14A8E4FDE203A2AC855F18DB0F9D910CA41AED5AC5EC7D08AE7F6ABCDA0646997B63343B35008EAD44CF3A8EDF0EB104BAC1EC3BA1DCA808530332D9C249C6271D25CE33B536CBA3D2F8D6C8B6A0DFC830CC426FE13D69ACBC24BACE7CBE27318ACBA7FB54BDA4104D07561B5BF0D8F0670FE60E6389B2D6E96924EC4E4BD827473668D4F28412123C31CF49912E73AB8F40CDBE3032BE127F36AF2DD75AB2D3DE8D2E017470A7AA3CBBCAE318B20D -MD = 5F70A35453B9BBB50A14F2349806CEDD49F06E3EEB9844C42C7963A3 -Len = 11183 -Msg = 04F5757DCCFB3651358B79B59D8C000A385EBADA8B4B537E72F84AC79A5B704785BB7992849B39AF88603A7EDCDD78364743C4D5809C1F486BE7A8A6BFACF5771AAE5912E386B7B678B5181B90A22C3F893445A8B50E84CB8E4075E9E82AC2A20B965EF5A0101F4115E36D89AEDD7207B25664555BA85B82D5B05BBC3DC89261A55221D516E124BF36F075892B8304CE7227C24EE33CCA01C41ABA1E97E8B87922220579C0142C0D79CD60C42237EF22908126E84B831802E515CA940DD7F298BC09811E3FA1F38716C5E5072072FE470A83E110AA09570D28B3500C970908C910CBAEF51C86415C564673211D69857CD13349C349319A6A48A384DC8F823E1A2E78C2C3B0A241C8DEBE58932BA0A26603560AC2D60891B1236E7252C45A5D03F975FEE77AB4037F23CEB8D616A8132FD6887A564DF3394A3AE5B8CEFE9018DE6FB82F89B99B9F129C4FA63C6955400FBB894A76ECF5C7D7629573FACDE6E05A14127B998152A9F7741FE0F973DC91C5BACBED76CEDE4D6156DB390F7FF43A779A0AC7423E36D30F813FC03769813C6382B246799283FB0068BF0CD4F15D68DFBD6A1C5421FF317E1CB56DF40F616C943865E9739AEB2D2B12FAC028EAE8FCF08955D1DBC6A93776350146D46D228F2EF635295B8827F945CA0C8D321E3066C65010CC990CED6EAFFE9F1E2BFF07468160D2D537375F7227DE0642AB94B1C323909F2C63C80CBD7E6D0F2F9A5FC2AF71D001407E9389ED758B0BE35CD99C6DE10A71629AD014E7C5D8417932227824C71ADC50825946A1185F155092035A10545CE092E5F65DF4318C318E740DE3ADFD3D5543C4DB1777C28EE84FC34E99AD62FA5CC32440D50751F52D3E7C6E005E088AD748B85A4A4A06108E4E56D3E523A876F3FF2D8E611B96D4E6493F661354101B1CF772CD3DDBAE381170151B3F54C3058E84046CF7D379772D460DE94188DBFCDE8324B0D7AA34374124A9C52ED40D7992EB8DB7F6E75A64E013FE5F83625B2D2EE6C466489831312FBFF4A633A032A0083F638A0D5EB395A960AD34C32FDE97739652E4ED9BCDA10F70E2575A0589111FB6F157F77012C50AC9895BE3686D982A8D1DD9A87F2C9528373115DB23A7FCF8176D520C95E4E1EB1E502F59AF0E1F9E0A82B0800E4393E2EA9637ECB5FFF075FFE96E56173AD064F7A17D3B11072914180FD19AB48220389AEDA4DC5EF81EA5FAE3C09BC60E459B0CD9FB75BF0644DCC319B905E7FDCAA531D970E677CB668E8FFF17CD9F418BD3E4EEE847571AAA12BBF7AD44135990F7EE9519646E5BC58428C46628478CB7EE9E74B0577C281728CECF7F051539019520A5E6745198F41AF211E7CFC67B1D7E9BBF9C098BA0557741648598D38777A49DE3C5DC139B95066B71987011E11A33DC7EB309A971FB52A25FA00842078787FAFA4DEB4B247B173A236AB243BBC4E23CA923649DE3AD238074D134AC43BFBACBA8EBA04D2A39A102F9B543CDE30E48443FD64FB6F3F0957188DF8269CC6BDC964621F42F76B19369E0DEFD7BF99F122BA88FC4692D93B3CEFF3A3FE2C11E3436970E12DF0493F7665375D81A32C8D8DA84C9A9342831930B6D7BC2C512422B19D04E8E16633E66EE408FA24DD3DEC417E1F296E5827E95A4ED1E4BE9E1B830E0628998B9B038860DFBCFEF299A4A7A943C5D5D78E7665A6CEA055443CE678092D50C6301FEC1F30DBFC31BA519D131A0262A9257F5D6E19F1152A45340629AE478A5627A513E64C02E201F8762A56EA694CED0EC3EEF2F9AE6414F2EB06C1FD999A00F18B8550D8AE5ECEDAF4A5C2C65B07EF27813DF37C139E650E1D9BF5A6ECEC2755C2FCEEA3877037712ECACC9AD6A28E0204FFD8CF991C3FCAB1C7447A61F60F8A2931AF9A2CC58E0620F7B71C5288A7769A4721E4D9733BE01620F82B330F5EAA9F80F7184BADBB56D74E4D1665A42F43FCC0C69D1928928 -MD = 664032B500B301E097B2B28C8F0FF3B1D28DBB5A2AE3F8569E45C4A6 -Len = 11246 -Msg = CCB2EA94787874F7579FE706393A3671ADC2349CE1C349A9D60A0ED0BA6DB428BE9641D46A2A4C7569BA29FD1A805205CAB1B7B7D2AD166B8786BC6629C45B5B64DB1CD8ADAB1A785734FAAAA82753ACA20E04768B5879E2EBD2E8736D7A165C07D7A159B452AECADF4962673B417FDCC38EFFB928D669C835A88E9F33D77D8D67F5CA3DDE1635AA06E7C49790FF8B8F358FBAE7AB802B4C3448EC1E18CDDC44EED5B54C06F97FD2BB3DCD80BA792749D4294D715D094ADD667578EF0BFB73164C8ECE2702160ECA3F60635BDD2DDA144BBA7E76A2C71F48D58578A6D014AFCE4F4227A699D123F4D1EF97CA83715EF0C39E08A6C5BD43E32B449C8750450C05DDC27065F4B30D6C87569E8B3B3C165AC0B8610799D410C65B7A0FDDCF895D519547AF031F2F4CFFEB447D5A12295DDB66861571FA4CB184D0D8CBD37230B69DA838DF88D06F8B7763A892F01181D36AF0591CBCAB0973ACEB4D0763A4F20EF114AA605979B2BDA57D527D799AF99A9866D17178B26583A0E797970A1809D7B9B09B964BE040DB7E51954C2C84DB199728493E0BE4F755C33DB14DF342713EBAD5EBFB44AFF6322D51906DE193F9E8CADCFBC614FA2561EF1F06D2B693FEF6EE458C40AF23541C7189B1384B64B69626120CC0EDF76A3D8BE8C3EC352F8B869BDF15D82B8D4DDB18DD8EBC2002F2FF3E994C3B541AF6A7D364CC8F6811589D223EA2DDC6CB479088850B714A2050A621A8024D31AC3953C99A65EBEBBE6A98BD7DA849001A79FFD51BEC26D7AD7F4DF375C0088B041C95FB20441A6E75FC3BCCE2120F137A3E45E02931AFDB8E96DE6081C947941C88AEC9D5A2DB7BBB1ADE07CCCB55EC15D9AD55A1087B0E76E89358C4602273422C6FA66288183D406AAAFE3773452277DE4448953872261CD23B5C858E7E679B038599549562F86701A3239AC5100C705035E249F2A4DFE06CD57A82FA8F297842FD1F47DCF5576472D34C460FC588EA16457965AA32FC0681ABA1C0EE52741BDA1373763B2139F66D3E9D0CD623394A8FDD2CF4D3102BC163F9B7BA2D786963C88651210EA09224BA0FFD8349CDE74D8932EA73E03F6D15FA82324B3C67CF59DF94DA6FBEE5B7A09F5CD4AE291F353ACEADB87B99D350771E923C093D799D7D96F735525481B0EC498C6EF90FECBB5CAE219B4A32AA2EDD18FD6455C7CB3438DFACD747831B3A8B37F013FD8F75039252C9BFFFB8083D4A9F5FD56EF94B2A0EA7F55AE5C40C58DD31BF08781838CA145199CA3727778850C15F593D58AD149DE5846D11B89ABD21B34DB09D853E2AFDEB7CA0A01E39B26DBF276A96ABEA6DD79EF6FA5095609897B9D1CEC52DEFBD7F425237C145E1EBC6E4F08B9B599FEF9B6A123CE3D79CF32C5B9CD84BD4C1956643E851B8B4ACB7356D9CD70B06BA37E883F847A37584CF82753458D6E14D87BFF35E0380E050BEA77EB421B00A7836A2838FFC153FFD3979DF29E1BE1A22F2B68D6DEE9F2148C416904ED2A2BD810E93ECAC8F221BB3B9BCB880D9152C61580C464EB07840B1B60F451B7F822471F2A00C841C018A187934A70F6A6FB97ADF9F400E623B3EDCE33AD4912550C80436A7939183C64D1E8915D52F822E7AEDED506E157B501DD7993952CEB5620D82D8BB1986FD8B65AEB6884C195D2D2FA118FF31B4A1D9A190490923E2700743611020C7FD5C05D1726D5B52D4BEC38F5D552F576B1853486E8B65B17CDA391A261F19702C5112F539763CAD753D86B532ECBF4BDA622BD5D356AEDDE6CFE281D9EADA8BCAF4A61376DD3473E95C507C704E608D341C83C49310C8BAC5A4FDBE6CE5CAB9C1B3115E07AA28A2E677EEEFA75A505CF289EEE5402B675BC371C0014AC067DC0007657857A6722081DFBD34CA95BF7CA84D4E3A070AA9B57213AFB2DACA35E2567C0BA0792CD569584F8B14107A171E63915C52A57FFB0AFA707FE72EFBE5284B7C75BC7551779C -MD = 3056AF931D518B72E858A688751A6549D0494301F3B664EDE9C813D9 -Len = 11309 -Msg = 9F28D8FF269332940CC39FF28510933F4C51F3D1C869EE2445091CFDCAC2729A3B7899254220327353BC80587B0894BDF6A13798A47E4ED4BB6CD840AA7742EC1706D03898FEA28895EA5E2EF9DFFD306730B90DE4E49BEBCEBC9406ED125CFB14EE8485C81FB8F9E4D8864FF178F8FCE451D10F63287B421D85CD861187BDF7B28CBDDF95DC4E28526FA3A31DA0955DD359D8C8014CBF7700FBA9403840CD7408F3E7B20005361D5662FE791459D17B626216413A688EC4B4EB07E5822AAE67CB1039816AFC5583103519C24C64B1FED1D1DA4A7ACB46C1AD840CBCA6C6776D316D6CF777F0659127B1B27590D83424FF257351ACBBCA40B251B1E19F0DCF8C375D75D63D1B9E78E3EFDB967F24A029F1280C7C8725C15D18E02F6F76AB752C26133E443E914B2CDD7959D918ADC6CE2598D1FE62649A6EE31A863F9CE06D307D018263E06492B65BEA941C73B4380A43DE03FFF4A3AEB08C41AB3292E06B6D9953824EA5217E0E4C93864BA3419EBE7CFA15A11FB33CDF2379ABCD6CA7D5932FB48E19C29FF8A04192A3A902DE005333D6D067955C5F5AF15DC66CEA3C9F465B0C7CCA630B8EB3E6C078ECB7025ED0EE403F95C49B6097CF3643E5F300746CA62391E64782DBCEB37032E233D5AB8B407223EDB3E874D29B8B464032A17C388971F17E6254957688BC925CC5F21CF2F5AAB31E09A9ABE5992D3D147C94D90DA62D1B34A0D1733699112EB4AD283320E2832B0F3DD396146938CB478137704F502DD3EDBEEEF0D2FE5837F1041257FB038577E1B43EAACC6F3674C0B71346B36664623283EDFC65E01C897CAF8E10B5F64C47FBCCDAA6E50CAC3D7CAC60A2B2BB0DC854764B00E0737DE86B6ADCDAE8D06BC1DDC09A8347021B6097ACA98484ED15C2FA78775A97B0BF5E065711755AB1C06AA0DE4E641554909F032D29612B0CEB78BFC44F71CF7DBA9496C3FDFF04A6B1450CF2380889A279B010E76AA6D7D5C5DC7B17E73E8AE57EB923432494066D8C348EE5B678A20BD41B9BD56852FC81AE2074BDB8C1862BA5E5EC42B0B0071544144FBD89957086AE93B652D254B726FE84AEC70B2916C271DA193F8AE7D556211E6F015F4A1E5C736B675499BE85C7DD03BB0A734F672FD8C57EB216A153AEBC80809EDAFF7EB3A82269C2A2F64E95D3DF37E6CDF2E908F8A18151F6FF137F7AF4FBA68B4380FBB44C80E405DF2AF3929ECD5B0F3ED0EBB1EE234737588796FA934700FD9F37DC103FEEFD2F26F53FC78AF733CF19978B81B68F246477C729EFE1ECF9FD91A0A161DC562CE269A465716CBC233E5AA00D5E2E41122BDD62D90E3AD3D151D1C3C27866EEC558017A67B0EEC9082A130F785A0CE98BBBA5935EA67656254DE616BCBC4919E5BD8D3767D8B8CB78D2335EB4F22F532D45A9282CC310E75945B8C4E3819B706D58BEF1291D4AA759598AFE52FCAB3A3D7F0C29EB488D5D394F98873F90FEBA9DD6FA2EDEE5B14CAD45FA01B3C8FD58757464C9775DD0697AE789B8E33AFD350E8EAA3295EB62B9BC0F5B93A5E3E1E997835F2151565050D8288AA6A7C2FB14D4F82FE265A1EF15655839D4148D61918DD9D69553D5E2EF59B35CF140ADDA36382CF4C8F5D024B1ADFF1B5E5C0FDFF994E2B2B409BC2B7B4B6F7DD36EA7835445349E4C8F010BAA9C3CBA52A683A44F59778DBADAE05906543E149924E99EF165B2B45A8B0A07831C785384D32DEF020200B4A1A88A1524D7D67F821DFA5E1680292F46ABDC7B17828DF8CA9F5FD00D66012D0761587E91394C873C7CF1A7B2B9644194231D746F59DECF0C4DBAEA95755BA1294CF731E9B04F0CFB532FEF05A18577BCCDDC2A631E13912768EC2361811E67723FAC14ED67D59E53E622F954D819161D688916C13A2D921892B9C5ECF1E51750E3FBEB66B28BAC0F0213BEF30AE8B94616BB5AF4DD431D4CCE070FD4F30115EB2608C4A56E922072698D064FCF2A1CDBE2E68821BE88 -MD = 9095F498F352C941EE5D1AE99A39F239236EBB8859246DD645991C1B -Len = 11372 -Msg = 582E4AD8EAEDCFD361E2D979A3B35F3494D1D25CB4CC2985BDE2A40B8CE98598C4E22240EA8BD3F9F19DF54BDAB71F5718520B87ECB06E441416FF82F917011CDA41B81F6CA13D1C7B7095D797A6AE75EE792CFA6E920330B37AE3524C85DF1C427DDF7A0E785ED89EF08D9A5039A560B14E06BE78B8938305667E4D26A7D74B9027DDF213C0AFA7390A21FB052689D167F15337340355F99C700ADF2E9362DE3A504EDBD104919990B7AC2F9C2D43D6EAADE93B86653F4C4AC6CF008BCA6BBAA54D42194DE8071613ED8CD22DC3E3F8D97E1904C8B729E9872A90A5E678B025EC618A4238F09B98437C0ED493425AF1FDF1784910E06782B049B2299F93CD776AA1D406FD65EB996434672C83282E82B3C5767E3A740587F9562F2D71AD355D6267EE277EC95CF4B65B5040609F33DA99134519A90011CA3010A02502D2233781DB03832179B27083585D811CBB4B4C1C11FE392BDD47872FFFA39B69B986E8237CE9EE4BA02D58292FE579BCE6666E70E1E9C0A6F9269CBD6ADDADAFC262C1C78DA85E486D04256BB9641AEBB589BD344AD4AECFF72CBF8BF44B08D2D486FA3043E596AC9296A6E261688DD73D91D5AA7ADCBF867C4465C8E9C739B6E6AECDE36E4B32022950879461D3F91E729606EE7B2A4E3B756F0FE7B3D08E4A1253B8A272605E900D72D03E90CCFDD55F610B5A6BB69C61E9C368EA8053895681DFE6C1B7428E898EAD12DC0824A41DB2875F301FFCF2563D74DAC3D91B34A9FCAA0B72CD57DCA6717D49F151EDC53590537504A648CA3359058EAE6BE2F0E37C76A67747C68EA9CA51BE810BBAC576C8B20521EE6EE0532DFD5B02546DFDD933E3AB3B07EB9678B662E6CDAA678806A1E1A21E1F1B127B62B5619DBC7A2A5F3CD4CFAF87A301E4261163EFCB410FDE2A00477CE5EE140CB8198942464B421C77302562161867F071FDDFE6C362F155C29098911E44754F2DED47F23908DBAFF0585951444E038EF093D85CAA6CCB0BCC16A22733398F73235F30F5AB83A5AEB72A66084C635C3303F9C7BBB957B0B36B9CEC120E789A8C890745C3A71694DB8EEA66D23B267935E6CA9B847193AC01581404D7865418F522437EED48C220F1F0CB4B99366B1C851E474792CA58FBA7AC120090EB1A568727F7ED96D3A8A0E29921E26761012B557D60E2AE41AB31D191696987B5F8A4A9D9FF2ED4CEC0EE5971BF228D54CC296EB568C344D98AC38FA18E809E3908D2777460924BD997E3944181F0E9E7EC83C8157AA14AE9531699C1A48AD50E5E96D87EB51C9EC9733F92969D0FCD695505198CE8054B909D136947DDEE76D44358EF3F0CDD77F35AB0367D74D496C3B2EA8CE15B690CE308E8AEE5A2137B9457A27EF33C57F6E3858C684EC5A9148BED6F07AE11B5699E0D3A04043FC03C739E5EC5D00AE8F0F40CF9FE4932BAA2B2D4871994E957A3A54C5C25F30858F26273F9A2446C3BD2FE0A5F65D8B822F9810FE968F1BBBB5D2E23662220BC37C0C2A7F7E80A38B91A7022F537B90BA066FBEE33C8F99EE063B7160D6810AFB4299E459C5A2909CC7F8D961F743A0FBFFAC3683E24BE6D0E1D38A876C3CF201A5F4706CA531CD7F7BE05BA11EF01B3C6DA42717929252CD24CE47D16714A586B1ACF6956DFBFF7FB680DCF2D6696CC722ABF3B2260C4B212E6C643A4FBAC071E47982A416FDD6848977ECFA8553F8017F21324C3D6015432B99984102EA5B7C72898EF163B16A3D1042E95C851A9F0CC68BBCB0B979E93B704E5E5E95CC2A13B3B4422CAFC6E11DEEA1E53C488026CDA37BCFEFE090418C86F9F0C628FB5BE0B96E34900DE7ABD12A416B56436925407055E1C8D3101389F8261DED7AD8E657C1679F90A4223AA4979A8EA8716B6EFF2913BDCC6A24A19B2B2EBA820BFDE55F49AEC9DC2D6F527A5976CAAC92B6629D6484BB703BD480109DD2B305799129B15C1BC9BF1D17A14B8540AB5634CDBE5C252E269A25963B1432EE92A75F4E0 -MD = 18C8A4CA4623480BA634FAA4AB3184830DAE6C714ABAB45364A1FB08 -Len = 11435 -Msg = 50C5BD9E422296473212A2EF4EB7A8FD9A45F5A44633900E1F605D23405261B2C70204447B7C63409D42E278539AAE4039328710B203AEF4F5A4579DC8492659FDE4DB39A57E0CE35699C55C3D3E962F39C8D3EAE5CD7A8FE603CBA12BD89DFBD9FC9AEAE6D9937C9D374224EF81FB4D39DBD84792DD111E93F29BD96C0CCEB9E2EC922E8D74B9285AC721900C5B96E0B5FBD7C3F68DAA6B1AAB80DA70B38C409280355C9F74EEAAD0E41A08CE9B8A0CDE96993FA2DB8689187D45FD53117641A8464218AF8353AD35670693B48CE7B58C76226C6EAE4A361CDA227CE3F6E429736430087FA1D462C340CF1C8D7C8AA9BB1DA262DAFF396D67BD3F2A94C40956111C71255AFC6002FAC077EA2B137F6C5BEC65C636CFA7B8FF45114CCAB2A5E895B8EB85E05989E24CF4F3D8F476CC7D162B3940C21B60B8757A56C612451F5A5835C63611FB1082574FD5ECE59D1B6CC073506ED1F98BB279C04B213822D6DB86F094FB2B23F80EE7F9BD67BD5C38CA176F8786E5E8C598CDF8327466E4740AF7002F03CB953E47C4EF6AF36293BE9D22795530724BD707F3DEC5E6709DEADC79BDD7546B3E902F4C4A74B59AF553AD612C108E0119C07D3B07B58493763B6A8884524BE7B70C7DF0E798FB3B2A8B9FE97AB8BC2766D0B87B889A0EF78423CE251F3863D50521D2AE5D01CE8AC7A809051BB4EDD1314C91A3138CDC37EBD48A8568E5382A47D3C41FC20951C972EC20759CCDC9EF8A2F920EA6E6FE295B297CD8AEA5675B18F92BB2B3005FA8E67286714211715E4612B8B496620183DB7422D9295B9F92FE11995FD81C14E0CECB43B9437038FE48AE3587578E335FABE70F398F47B8FE5E0176C44DC84A20C6A40BC2B8603321916C52FD613636A43FF19F0B5A2E09E0E434827C955CA4CD379C856AC16E4F7561FEADDEF58F603D3ABCB896CEB9C46264485F5A994695E8E85F82B588AA73C820114D80986566C5D60BCBAFAAFB29E5EBA37B65D70927C6E5AF8AB75BED301832801B7F58D4D1E491EB905C92A5F5E31091ADAA2423B09463FBFFDFA0E3D5A9ED1A68AF172A1CAD52E6ADE10C4D60C04E41EE25BA2E781CC4AC2EBB2F950B25D81087717E93BC8DF5007E0EC011FE0E59617B4627CE252074A96BD01B1C51553C126A9994615B4CA8947EF586A1130FAB73E5640519CF59EBB6BAAA07BB8B52208A1F6FE46E2366A7E52A837B7068CDFD8CEFEDC994C717CC79C1C9A2238E18D224DA3B33970306B48C87A44B3737C19D349946271DDE2E1FD32969DFCDAADFC3D7C58E3BF3A65EA94ABE6B78536C864996DC92C3FE2B65A5E97ABB1B95C1FA03E8ACCF332FD71173D83AFC3B6D68C18D4921D0DDEF9709492AB57AA26F9034F78687A959B56F208166490FF2F450C75B2431ECC0CA5E798FDF78760E89CE28D377E1187A4390092C4303531CF2EBC017D6509137C44C1E01C801D984DB320A24489CF1AD091AA5DB455B812B439A9D5E97823DD5DB2D519A576B1A4FE9BEC8956EE1D1557C5717B7F3236F5E209BBC28B6DE5BA2A9E2EE952721694CF959E3FEAC644EB6EB12BB99243F892318131D5819CFFBE192545F2DD665B99548695CB0043585A68FBFE6D4B2ED36244275EF08C150EAAE97CED56FC82E7596039BB638BC135E94D12C8C19917655AC04DB878EFD083AD05B2DC51D56682BAC3AB759775064FC4F353787A5EE89ABC2479B4F5AA44FB77A818621D2D3A423FE35D3BC63C272A8F441899C79AFF9565F3CF59FD818472C093D4C34E0AD13767962A848BB8D8784A17D51E68A4E6C413CB62531CB9D263F81F40B7A3DE52FF1129FD386755D7589499AF73E78629BA636141646D786F0CF6D404EE08E02E7ADB08F09955B9DF02D96CEBA95F92C76F622C3DB5ECABBAAF83A752322BECBF82AB28C3F5FC65EB04A4B78F1B75B6556AFAF2B0AC1611AE753A3EEF181F98CD45163C2EDC98DCA738400E172B4D512A57C1E9FBD472A9BC1C3CB7A914CD0EE216FE377697000 -MD = 9B61E28A7C06D21A972F2EF64AE57B34514A31940915E165A83D49E7 -Len = 11498 -Msg = 7C6D1CB5E35F4EC7E087EEBEF5C320179D32CA1C878DFF1691FC6E0BF1308E7DD5012BC560F457EEB88E91B2EDAA6DC2AACD1073B72352C21246439775D7384FE9E3E3A70D8851CB9E549A93F8E13829A0CE11E847C762D07CF80025C93EC480017FE7680516C05C7E0AE3CDAA2EBA27560ABFA8D210D9DDF6C2EAC0EDEE6E6FEEE271FBE2A07A5A9F84D291891BE1270C5B440DAA77D76978978F8F82FFDBAB8639A9B7776A06072A8952AE4F056CA7F67F1D93C06A3E4540851E9E1889337A812AAB15575BACB053E0853D99323B9E17027315E09F29E59068C6C62EC920DD329D4DE8B96ABDF9486838A37671F7335DD7C61998578303ED0BA11C21B5B287A8D2286F530F969032D2DF1F97863B85964B160BC638D5212C6185FDB6DF9233693C0BBCC2F4C57CD15D19BD19175268C332812ED94241BB655D0DE2F5A379C9601D61A632031BA0A0679BE53C11B4F51265C43DE3CD1715B8D39A22AAA7E1C7E6D6E196F272B1CCE6F936C3472F988DC969B2DAF9E70AF71A0E049D232944DCFE06C4C3976590AC70603DF4C6D07F9E09B8D86D96ED54762C0ADE199F2C5DE56B57CE1B477114E7F62151CFFE85965D214BEA89BDE317DDCA87B2A62BA65DCE5EF49823FA253ADD2E9B46C485F277EE7B02779057EC9CB6FCEACCEE728FBE14E61E9471017858DBEC1A8131C632E6B19262BE3217EF36A74AA0F0A77218E9EF917DDA251AFA7774F1FC45BF4DEC2425849A8517EE780A25FE1BF33E74FAAE85C3EE565B9ED34CBA597C6CFEF0508EF9E31E23A5F269D4837FEF44D602A8DB0AA8A6AB1B0C2AA3A64D836340510CECE90CC9DA23E5E0E7204F0B878D6DDA3B334DA1A287BA97D66EE0469E48AB09DCAAA7AD60B767E60E41C73D4EB15D763F5FE953523E28E029F02201A88C9AE0710A16CC41DB570A7B24756A70BD3852EEDBA1F22DCBEB4CBB05AB2C6DF55F9F6732C9FE82B1F6BA78095505CF2B547AF83C8CD37441675092D589C74016FA208C7E9D95D4942923D485A8572C911A1413D085055A22CFF7FF95D067E49C9EBAA1AC09525BA3E04DD67F8677967485F5F1A454CB32ABCC3ED0CCFB910EF745D54026965C41B5FBAABD4C56C4065EA22EAC94909390534CE9FFC8932A906790F72D88B1EE7B61F1E1D8B5F52464DA5E16D7409731220F85065086EEB9422EE7B3204758BD7E753B3512B71A94372B33375E48E860164BD05D68F5D888E65F173E39E5623C12A6D1CA1CC431720A9F3B57E557C87E7A6FA8DFF8F24BCD310BA6EE76039A795BFF23CDA3DDC296DFF660770C31505D2D386E4C05E43A16F42654048F702DEC81F5847682B2F2DAF2DA0A490AAF214BAC4A09930D5F8DFA3DCF01C9331E928FC2325A70310688D6C3D6EE2541CB9B094DC3A30EF145573302C30AB566C0A88E00864F351D3078C4F9BD16C808F7D5608D20DD511A5F0185AB36B1272AC6917C79CD555487F2AA9C32621D000A74072F71D5C6256A9DAB6F30C75BE3D6E3F01C66BD3154BB3AE07C4F71F0A2F2704BC58334DC2D3869C5CC88FDA2844046338C9B2963927D3821A546F949F8AC8529CC393EF95C5BDB57EF4E6FA2D5C7E0B21719AE949B68D7AB5E6E9B320ADCD0CD64DD4DFA2583A02724CEFDA9E1B252B395C98A02A05885E5D10584B61809C65E510F0CB02514D637F74EE5D92E4D1F410A07C768446038E7013256D54E56562C0226607345AAEE53169F4CD97F59CC0E914EE952B931459BB476D4D2D2EF834774029399ACD54C6EF1433362CC56AB53FCB032739846B9A10D551FCE8AE0479141210675D2E57C9770587F6AFAAB167F74BBF580A27F9C3196B92E113A98B23A18F5D9E547B73D7FD58A9E8B1555953D391A79F615D604CFF9C867079A4F632443521E517CE24A7F465129EA42BFCFD490B1E4D5BED5CFE2547BD53279D220DAB03BD321ECB442D52D1B45A16131569D45C2A89F7A8DB17AA2EEC8CE09BF4042F890B3E0AA38CF2BC816C2D16A3BA36030A57A7682B77B0996A85AE480 -MD = 54910541B283969D986EBC77450D567B67523849C57D664BBE18ADCD -Len = 11561 -Msg = 2DFBA2D661DEE25321096B61F10656EAA34AA2B1CB37AAC37E55954177C113855312BA625D88D05C2B5E5BBB29B967646F379F0AE5696D722C05B7D1C448FFB1BF1F3A5AE1389DDA749747F19535748038C0B90F1144931A0E791466490123C60A474AEBC56581D38564E2CFE305DDC0B3A97E3F0F71011B90C858618690F65B19FA3A54FB09689F1A0C8E6FDA8E2A859AF45557C4A725121142715690C49B578395F27E4A43BC86A99429952460263F4DC531BF35335F0C82A61DD43F0D13772C76702A2824FDBF6F4A0C7DF2E791F24739E2A28CF91F1922004A594794C6D43A8F5CC8ED75745B3DB1353757A4AB0A7C1F762B6391009FCB9245B9EC1DA59BD7ED8A1AB4154AE1A4E2D33934ACF5517591623694684FE31CCB12EE1C926721FDE7FFB0270BA5C7D0031C6F47352601933704F8463AAEAB8E23EFF0169EF6D68C2A470D33760CD44BA7F62CE50807D169B159D19BC6DCD948030B2C9C127BDC3073F17D57879EE03E7DB39D9948E7FC0E999275F866334BA954AFB040CB3C0CC3772139EA9517CA8375F0E18EFF524EFFB0EAB846838C51579E16B8307D530FCD858EDA69FE9DB736A8F227E86114FA47682C2D262F9CBF9F426E0811C22C65ACFAE4149F17495130C43B1CBC98F308544F339CDCF748C8B244656DFAB1B6653C995DC6C95A0DE931E11EBBA249A6F0EC7025FBC51DA34813219E05DCA8366FAEA94D7AABED7B34754E804631D6A6847F75DC5D11EC71C8AB3CED72E47C418FBC44965CA4EC4D88EC7C0A9EA96BB8B04EECFB3FB3DF9E7DE543B9D4F31A3562E0A314E96305C5D330118BC8A3FDD71F5A609E3FF23A7E5513506F28C6868254FC8F0BD4E006D48EFBB45CDAE53C1FB5E8E6004E74FD62546B19DFA08479AA3D7A569446570C5C0ED9CED0D2005452DB7FC2EB443B4B51CDB38BD27FF64D701ACB01ACCB6FE8E795EFE7E3A2B2CC2BAAE4BF96860A85F110E69F6E04AD2CE21EE337DCE9EC8EB38AC24853420336E68C82CC365A3EA0A0B7F2F57ECEF39BB43AFD9EFE40FD8C2685608556842048007CCBE2D0EE4FF799CA01203F300C498D83E77A32495BA97B87840AB1A519B9F2D1927109186DE939CD8526BE490CB805A3E922EFEF3738076B68438D0941D6DB53C6DC807DF9D46808CB1FF42B33F7EF3C20E64755A32FBF1C43F44D05D8A5F8C568BECD4BB6031E5022E581F488889D11D8AC71A2AE6062E0407717513C1B0866D5D671914FC327B2228C049905DC67F227894D402ECBA9B8AF05512166560DAFE957FFD54D0BF73DF4F389947205AB7834A993B9C1E3697F72693E91136256D550D43CFE67F78C58E1827B3FBC72F22F900019CC14E33BC25BA8BA3F0DAE2A835521041C9F718116ABA7A19316D42F721395F7EB4D28FFD1768F24F2996206F2D507D38802AA23D4D9AEB5C248108ABE0BCBE785BEDAA951D4925A9667EADC24EFFA22AD4F11729C3D298FA1B99627286086C10DA6E1AB247386559B50CB51BEEEDCB028379B4EE8D13A6FD9E5B9C1D8DAE9608E1392EA21338DDF8E10B773311A609D068B81E53928238007F8C4635A87D80A9C7181EAF28BC5A2318B6B02EC96082F880047D37085BD3DA594CB2C615A4BEF43B874F82AAF9263F999A4D94C6261676BC31D1DC9CADAE534B63B2BBD7E09E30341019077F967F5AB12B90821B8430FD1C07F14CAD3F3F3F3432106F0ACE8DE1A6BE996CF857A470E4C5BFAD938832EE70FF663F9753B3E014094AC3FDAF79FBE0EFBE3B491A87E4EAFA8A4C1402A039BAEACF5EBC482FBF00DDDCCB283DA874D7C28FA629103BCC405629F106477B87FDAF9E1E2E53309044E74D829E642DAF2039409C0B681AE9509FBA6157294B29FAD9E72B9354C1CFC411BA550756F3E77569F4667F86E2E43EE0E7C4AA5B344D16A522CC1860C39EA3A20911E8F8337CD6CC7103061736A4A9C1BB29DCA19CDFAD9F90147CEDB8EA126EDD7457D3C1597DD264F957829EF1299CCA6DBF898221FAB3D6956F900F6366476BF655152C73E7F80 -MD = AF86D97FCF2B21C6CC886ACF6F40F0B500F21DE09845B22E1AD5CCF4 -Len = 11624 -Msg = 824A155D7798E12962F4464EAD9AF132A226DA4DA6E899629EFB938EA29A86937FB144866D8C7B2DF9988604CED96892DA482D4D0DEB4658844F41835F0D9C20C796929C83CFB49113F5D95A7B66D9116A4697BFE335BC83629678CD5DEEDB7C9F8F11DDA079BDCE8C2719B6CD400C02A6A5654F19B6D568473D37174F62AB6684C9C919C1CFAF35116FF7AE4F5B0F0BD243C74384C2C9392F1189B2AD448B9D7946C2CCAD04D2F20CB8CF1F9590D1504B1E1B1D74A04424BD27D0117676B8C823022858A4C12AADF21FA45C99FAD60120B24FE04BA3036B80AC5F46E983032B6D78830F51E65A62310B9058A4DD3F3F8F90ED5311E1F47987E0D410F78B2A76580FBFDDA0F944BBE466C8A8170B5C77E8132CCD7D5E9946A5FEDC73AB9465E30BEEE9CFAD68B70A2176393AD8A173CD9AFE8F9B33023E852876824B720365E688B3FB4BA925040385559FEF7BDCFA7DD18BBC31B24936557EDD679B502864588CD4BC270099A30DC3B3EF7A392F3E33E21A53FB83756EE371A1986930C4A34AE1301EC44E189E23ADB7EAAA121C6D787007A44E998D112484019F7D7D8E16985B039C8CE01EC8CCEFB647F07F9FAC114BABC3D831AFD6F08597222A4DA8C4F6CB22C673C0437C16FCCE7EEB64E7050AF9BF41E95D3A0112FC049D405DF0E322422072A16DF248E10AA22EE5F198C67C59EB8198421DA855DBF2C78B36352B1373F7F66B5A5BDCFFD44C76B7CDF56D894187DE7BFB05C0535C3D2AA491F37D35C3177E0F312A9FC7F1C6668AE0B6B4B6C195EB4AEA219F147A9799A9C84449D7477FCEEAA0ABB836150487ABEE7A1902540B905E998A532ADD68B2D15A1FBB63DDECC54C8C206EE655353C7D1DB411BD33419F6F905BEA567F8D67B5461F15ACFB8F8505CCDC29CD708BE679238CE30EA3D1AA183BEFC35938D755C50963FF9C89CEB28764A7BA8E72A2D22D168172DC5D91F4AD5980B12474A96DB75E1F7A9EF9CF1A0318D18B01B108CD165A3734D671D436708BA030C1E860EEE860B40E61EE5B72A4A98AEA24AC343BB6D4095F79FD9F1C8D64057B6672821B96F954DF23CF294F516BDC1045170E162BF58E75DB11288B466A4B83125F1B54286F14BA0B55267397D9605A57F16EC357853DF6F3C8943A73F7D20659EE01B3CF70BAFE432089BFD9DCE1E31D441C174F42D3BC04084705D0DA308C21F30875D68F8611B62F49AF1B937319346DCDDEE9632F5C7044107C3C5B49CD59169008D497C4BD9CF2123FF7636A5B20501BA368AC6D18A32BF798419BF93BF7CD7B1E998471D4C85A2BC50E316E89D17ACF327469F1F45A68FDE54714CFFA976D488989F65FB4E8F9F85D43010F982453223BD060BABEFDEB9DC10DBD28CFF842366DD55170C33EAAAFE90428D9E632785621C5F836D118C4BB97BD2DFC2A734C64F614A9FD3179512720C9511A1DF29EA9792226FA5D3B74D0D29D4741EDD5821904F52AA7961D303B51E54A6CCB80BB851AE57DB1F97B656772897190714A5DF7450D7EEFB982188131D81C6D273021A2AAAC777B0083F0CC363E619A1FAED4CC2CC7F28E24F682C9F9EED99E09E19A8200E68AB9DCAE56AA92C99823015F82C8F90A40DF0F729888C8320A7F0B1E2F6155C82AAD1B4ACA0870DEB69F04CD137B556B9919BD920DB20A1C1DCFC45236E6E90FA3054A8E29211BF76B13800F3AC4657449C89FB76D32892024E6FE7664BD23038457FA00B1EB88334F4C8AD05691C8E3100F2889C0E96A327C9B36DBE6D9CBFBF9DE93ADC8C17864CEE6D30EBF0BDF8F6B9D65D2D6471D26334089B40C9B0EDCC3D0DA4710E76B28B392F7C3BAD6F34C776A72AB211B720CCBE60E844CEC4832ECB8014BB236E0AF9A39912CE12A5386D409F5117C01478D75296EDAB33E1C5273718709487AD0AB5B180A2D065C31DBC1E0737D9A800260C71A0244F19528E79072D8B8322225C6C6AE8471068BFEB61C578BEB30F9AB6A173D70373D5F28E7C353FE723316143B2A6EDF78EABD60124138B607D9A09D6ACE70882D4303EEF2C2 -MD = A3D5128D5BC7852EC6B59D3D33ABE70F735239D149593E9D1798D1A9 -Len = 11687 -Msg = F6954D48D63A7DB81F6D15402B2EFAEF020D15AF7504DE2F0B6D800BEDB480E9A07BCB2FBC256E8A0354C652717576E2F35E3670AF8BEAE81F8FAB69A4653AAF433BAF49188F2A7020CDB332A70C13D9C49386DBE48E51ACFC5B98E53B116878C094D8B522FB747BF0AE1811E0118EBC6FBDC59379CECB6513775912F8160C4731567173728B65A2725BA560F6C8D19CCD4187C865A8767B4218E78CE152CDFEF64450AE09380B1D7C19D2413E158DCC7190D23E3BA4A45A7E9D9989C8A7868AE9567B09034D40B576B00B269F803F128B191436D2E5B913CE54D067846324DCE67F6B8B0946EEE05A628DAEF123AF45DF8FDFF958C3A6827CA45D603B5DD1CF255B13B8E90D2F3A3A8AFFFA1FBBFB502D23F054A259A1F5140FD2FC32851371D02E8C878B60E93950764DF5B4574DF14D6D5976EE5AF1B34165CAB165E57025846E5803BA43C159468A4212576DBFC2D4806EFF5004143780320060F841A40887096453E44B8B12CAA3FAA77775BDA37660E4C84DFD29195F09D693A50923433BE1B967324088398EA633ED23C908ABF07DAFA3999F0740CBE0352D387C8317BD91A5B3597432A0D7958B7B0B4EFAE8CDA4377465CC7C1042D857BA09727F7A63188C05FA9A91A01A0068C4637F6EB535AAA3C485BA523BFC0946D18538A7AA69AF8D12D5592795D609F4D6CA283AF9DFBD15FD9CA5ED0AC8B4CCDA9A5B6E842F67BF12D1C6D334D04787D9783FF3F46A37199B926199659BB47998F0BF34AD0DEA6D7664D8291DFD1C5B892649C4BE19B4A2F1C7249483C8A7693250A0E7059EB7EBBE48BC1E6C947056127A672B07E8ABEC954FCE773C42F6C660C2032CFC9149055CC8E97BD05C854D4B9868240EAA44AB12B8EA2CF3A15CD9B3A55B5D15C501A6EE94F770DC700DAFDB0FB1EF3A1CE4A13EDEB2AAE4A35917DDCDBBA7AB5BADFAF93B96783F7CF8440874FF76534E51EA36DCA3F0EA974F3232569EA7E5B71E37EDFD9FF296AA34B226B2CA67CE87501C3E73EA669AF356ED4C89BE81E8776878F09A437D9E189A28EAC36EA47586711F1A3BAEAC43CC44316984604D190FF6FDE54D7CE7E22BFEAB3A175CDEB1A4F62CE82468097B51AED90690C3FB710D5D852B1E382C8D6A72B795B151989B8341F5CEC820D1B2653FE70B30711E4CBC14B602054231A83BED6FDFCD4D6CC08D1D6AFD406B488734981A04608E4B37C735B04575EC751B02DA34DC1BA39A96ADFDCABCA527C45CCB1ACB4256323D0AFA812FB6916ACBBC262A2FA9E6B75D94F31FD2B725CDC70C28B19811A5EECAF306053FA5E598FA149AB91073EBAC0504F2B4714C6A09CBC23A29E45FFB7E75CF201D68FC1B766BD7697674798B87C4365FFBB524BAA652987B5AA6EC09173AF909068571A7DE75426DCFCEF442B789D6DC3DC02081D3CBB210B02C0A94E37237A0BFAADC7F31BA95511AF9475D19C98CDE8F74F613163C717062B59A595FB846E25FB74401618DCE98AA9463534A999C11A3AB9208CDEF85C3C68ACFFC2DE45E07722A8AC14E0684E783F5F2A23D5CDC725152A574E570E116F3550BA16742739ACCCF14C7C524503C407468FD8221D95874899EAD333127E9221FFE5E1D2391F37F6356A5DDEA03654B93C998701D257F400B3A05C5AA53A5EAED70A7A5C4FA91518DAF2AE44364D3366BB9E0CA45629110B306439FF2A8F45632F4ED322A3DE6E5E27F03E7A808F302395F00231E4E570271CADDE7C7A6339D69FD7C64AEA78241BDD740218027DC98E738E7856595E63F73DA6ACBE9BCFC4FA36E9CB17662E60682D292FC29781C677A73AA8FA6FE275A4FDDA7BD875F4C15963F7CC2E74F3CB120BC454135E37C49B839B69F72ACB25F428BE76293D74D91BD84409C293AD7ED6DBFFA1F5D55920DCF77ED7A65714A4937629DE0A6BA2A822F5CD16A89632AB0ADC40886E50FCA9A1A297CF26F240A4058604A05B8A756AD230CFA8B71B3C10EA5830662D5E5FC18200F2D7FA062279A07D79EF7F459AA938284DF61986694A2A027C11566498AE22F594DFF48C64FCBF7D9BA -MD = 8C093DE6AFA2FD9B2FCA31FD4B245DFB7D154CD6F6A29591D003F2F1 -Len = 11750 -Msg = 4C6DCD1D13516D5D4C503312B4682F73DB43EB6AB683CAE6F6CACF053456C9C6A3EF6EF69ED527FEBF1D6E5093C2A885A4A40A1255B1C9E06E66B62E9615E2674488DE6F8412BCACCEEA52BEB87EF7F0EA45B7E0C1861C798B8210F82A29DAEBD42D905176EAC9DE038262C782D7B12AAE87D5ACF76397251C2D4054AA502F5EFC38641803F26DC1CA1DC0A5666AA7F0425022F29A833235803912100789AACA987F3F65BF4C2502CAE0031BEF27E01575E4EF2C3583E30C6552BF994FD03F9A180CF60893D722376D100097A723E0B41186A108A7656EB60580ADD86D499939C5C222CE8DD40BFDEE80FE0A4BF8A13458847600EF84D7F8A8B5C35529400ECBED7DEA6CA10EC453FCE2CFFF7C668C6E2DAEA845BE619E6C9FCF4AA186A640502F057430C82A49FD287EA900CF346AAE7574DAD1EAB85842818158FE93457835968CCA0A3F199DF50D6BCBF4FB95210A45F3BBADC0491E9A5EAFB14C79123064D2F3C497D3C7E721FA559D3455E75F235235BABE8F2C8E6774A82EC8F8952936F9E5CD42108A5C7A18529920E343F29E23B9ACC50BC58C792B8546ACDFE787E1C114B6BB6A2AE9E222687FF970E355722EC92B7046FD0830BF5BF2B0137B95FD9C48154FE3FDD799988D18359CD6DD3D6F602521AD13586AF4A5ABB8C011B36D7C9D20BDE4D974C486BF238D4BD9A55A5717D56D099062B491FD02C87E38C0502FFDBAF6B04FA819DF3E51480C68D34EF953150F190FA7845BF148E894B6FCA350F79D71889E2AB8A28CC17486439AF774A60FA8A8B7CDD22F1D2587EA2333C81FD22643A789551D724C8A409DB732201987ADB42BD974C3CFEAD6844B70C5DD19451594F631E0D019DE4EA36FD1AD8386DF4CAB0BB576E8FF55F703EE01936E847B939D76F2F9E9380398AEF1EAF3A2A2735DD7754F54A992D7AADCB75E6C50CDCEE03E3EC2A452391A48EDAE74406994070558A9F441BD26F1DBEA3B7358F8D6446FF8C9530672250B862F4D949EC313D56D9A789E7A326B181C618455D04DCF600A5B47473A594DF1CD13979F575035942A37171577A6F98ACF185D3FC751C295987D76FC985B98EAE146914BD9A5C7FB2E04ABB4D170421E384204EBC7E9882B29B0933E1B20F11535B9345207C18960BAAD836B9D8F8EF4C749466416BEF63FF55DFAAAE5A42A46DF05993F1457C79D96CCC9D8A450C3DDD0A0831C4636A9B47756F02AAF8929E9154EBF3FA6D27F361530C20B4D929FBA991F738842F44D74F55914FC1E11577B1F35947A08108F526D8CFDD990B17E5418A65CC402CE10D1A67433C4C1E19C0612C66FD75221B53CD445C2B16CAE936400170A4D91C4458C8D740A6503109ABA204603CB6A47EA00ADBE8E3423C095832B7991E077F6377B8F63926F4FFB346B7E5893B3275FFC8493D570F484665A80D1F6B4A9681CFD22E1C600D2194B068A68871FCB35A11ED715B94A7C0D900E9A68655F59B3BBC8977C16A576A821D43F5C3B253F553841F3EC809B0210CEFFAB46FB20D8BAF21CA0B0AC2990B9BC0D65B2D8FD7151AD00E233CC4BFA50EFDB23D9713EA44F7F3630471891CE537C988D42C3D4D0CFC731147C26AA1B7D3A058DAD0B2240A1C18530533DF8AA8C5648D0366A302BE9372EA2B7D89227A146CF6F5267506464D005BB8736DB9AB1B9D39F91785B5FF398CB8EB50E4915D835B75701EA68A0BC7398240D33CD9F586FF8504F196D7140305AD0630BFEB66A4AE0E36434218261D369A706DF5C6B928F7F2D5B3B1AB1025CDE6C0B0ADBEAB8668F9AA331D2A193F8CEB5F48BF07B6354C2F97E8BD24BDEA1A4A69EEE0DE513BCADCD1BB03F1BC2598E0098013B2FD531B183C665775C8B574750E7309A66A4803400B64B9EB7170B4C067B352CFAC918D713A61217728C724B509379A6B5780EA41EC5D72F72E2E0005F6E0C73C0BD54C7C0778D8CDAFDAE6DA25083181719CBEB647BEC1307668D3F8C1918F5BE026FF17A8A0888708627A219D7F5CD92EC3E7CF9BE9BA98A5C8E929EE158404D2E20A1E60E55EAE210CD9C4E1EDD5F2AA9A1D96D787894 -MD = 880683B6F3AC146A0692FC87E72E6E3833EF8E2699ABE064C4F63DCC -Len = 11813 -Msg = 249646F3BA332D1493B5236B645457AE86259CE82DBBB033A2B812706D4D6485D36C480681F83E48BA5853F16B11D19A28A756B18298F2D309E4122E7A9F2C5F48FBF251EE60D4F9D747B2E29BD2D79C0A9F834A3D61B5FB01FBF99779E00B17F1F85B01B46A05721CE5EA37BA5A2CEB46F918A740E653519A552EAE130C8511C72D750FFE9537D72818453932C5F09BEB08916B8453875070ED5B5881D67B06C3A167264B33E79924ADA540F9408CDB649812523E39897D6C6882F68BEC6D4010D79022D0CDDA8DB570553C058FEEC57EAAE54DECF6ACD754EC29D845418920F8E32A32B46339E450913B2E30FA9AC2F3EE7DC7228F45029FEBFA5FEF9860A126241C87868951A9F0AFDBD4B33B2B6E823A05A8A1459BD135511A3C706EA361E8DC1AED8140FF3396E114E88CDF46E5E88F8D69A827501198197C8E2304653B9EE0B83F2BBB3FAEF6F427C195D4D5F2D1BB62DDBECB2A65DF7B1E3F29CC20F69B5A0979CAFF2A41DAEF3B585B6FE42A00424FABBEC292132E2ADB9EAD6EBD0F9853CA641A385AB71F68BF0843CF358631D1CD8B97F99B971F039ADBF218BA327F2C0FBA7773693C3D2C48FE4FE8D67D06564C1B676B7F02E5EDB0DBCC3DD350E95865716F175E98C74D4E0F0035C3C9DD407FB9F9D6F7CE0DCF3E783DF13B50D80E63085C17B50D551940F9C5A816DB821CB29B9A4508235A08141CF614B1C17904E440EEF35C8E77BB154AEB7D3656C9C6F575B4B8335A4551FC5A3BDA9C31A60FCCE93E2037B9792E18D422045F62883A2793832AF757E591288DFF111D93DC4844C649A348F01F893F0AC4A57F1BA97F9ACEF7A6889338C8CAC2E577AB530556FD7EFCE71D0C53968A5A43EC3F52D0BAE66AB1BDE1FF5260040AE49F2FB2D20ECC37EE7D4C85FF2851CFB9AE98532529FFD44B053DC290250C165BE8D26F4CC5960925F2DF8D6DC9C183EEEFC07AF7730E3D763C50E71B6BA06588E95572F0A8F94FE62A609B061BF23EE73523ADA234E0CCA4C139319253F06ACB71D9360F4EF5695C361B47B34120CA072722C50B6E3DECEA9CA0058BD21EC03242226EA58082F7944821336A24E015CB1952E4435B8D066B86BAE925F629F3945676C8E5BA1171580A36415814C6E28A6BCDED8611CDB4DFC8BB6DEB1FD3009A5891BD2E277054B22CFD17E4FB518A536DAD1885AC48DABA2040C090FB671CB5A45D3E192898555EBDEFA57DBA7714BAF966AE1B20F61305B0B46375D67D8F441EA3408914D93A6FF35CD7018F4760B104C049BDD2E797E82CC827F5790C8E9016C4964EBCF46F3AD06678DFF76EC0CCAC5B53A1E843821E20F8023AC65C127B1FF1ABA1AD5AD59A14BF64DF860635F465BA374F56541A598CA0FC392997CDA86DFBF3B92DC279E0F495E5E309691964AF58A7DF9E48014E1492E602D33D39C56093D9D904F244F1D14DDAEC69EE19F3F00663EEF94C4CEB61F411D806084BC18478DCEC84AF1470A77AF9F8AB38EAC489C57C7223C485712A22CBBA070D377158312C6AF6C6B17BFF16C43763945BBA058C49168EBA19E1F0152034A2E7E21A3E95127EF120340A70A5235284517ECFE6BA6F8DD46BE0952997E9A13B49D6DDCBAA55E97FD26FEEA3B128B6819A1CBCB36FB968583021813BE1DA17C8C88B794374D1314E7F60FDDD8A3A84E1212743BA0F4B9D1379D992E631C872FC7B0F0E199AB31DF865E85D503E843B7515B90D3BC5B4740988D37B9203429900B6B4D08145ECAF8ECC20059591D809742DD12A6D657219307E8340CF40228923D0DBFEC946023CD790B2E35199A704123EDABD295CF4B3ABD53D61B84CA98D53ACF06641674EC735AC66BF60AAFCFAFC63977C67BDE7F607B76F0BCCBE2C5CA50635D347B1F69D3C386C4CD13B55FB0A8D452C4BFC9A23C0A8FCAF283E916E92B491A8B2822341F2F5C85FBF0059930351C0683E0E649F46155307F80586E2F48CFC62E0806E99B42E53F4A23AFB2CE0AF631A9E3140B9B93095B45C2A2F0BEEFE0F774DF56033C3307F6FFE5FDEC3B6DE1694F5982C28E515052AA26E074794155BB30AEC70CBEDB5CCB8 -MD = A8A92351174A0E0D8B992E6245A9DFF7118710A1257F19FA6C85B479 -Len = 11876 -Msg = 547AEFC7C23CEE4F0AF81E1FFC32815059ECDE536912528807C728E3ECE773EB020ABC3A773CA0DC23BDB05376662917FA33744128221B923AAA57F21C30262399A9617AE088A5C703ABC1C64F221E886ABEC9FA859D1C3CAE0EB227E76CA5241600BDDF860E1C33572A3EFC9EFE62557ED8E7B6340116BF58D9E7C41E24084EF3AE45F4885A546187A3527787A05B4C90BF3237A3CED2891B8D87D47748107C28858E72BAEB86F67CF135FEEB355A19D31D4313A16BBDA9B00FBEDE0299A0A1CEFE5F406DCA635355D5B7962B66E14A10BA6439C6E80ECDF73BC5ECC7F89199E47282BB13125B89FF6B5DCBB8B379F96327016556383A14990A4B680B76CFB1ABC6BD974707531D9399B4EB4B9DC755C90CC81E963258C863E06CC3ADB41B0F6B162220C719DB1A44B76C50CC199EAFF229EEAA5B3AA37378068E812654DF33E5F8BE680A4B1E930B595C75A9C4E0EDD8FD3BBCEB0389D04966DA05E26C5AC2452FD4BF7A868435A6487A2BF8155DFA78744F7E3CD644DBEF92770CE3025F0DACDCBC7ED180940D9D4C807A0818132C1906A207DBB66CB81EA384367037B0DA74B3B0C75884D83937AA97028757117D6AEF6AE8F14F7EEB3ECCC30DD1DB8765C2A1D3C4E3CC83ACF1A4DF3CDAE7E251FA64FEA0A4593F2575962739D1439AAB299D806F6CBD5ECA8D9C62876F51BEC4FF7CEDD2BDE51571718C79934B87B23426FCE493AC6DEDB9195F3AD120584E2BC468ADC86D08846259289A1172D639456345D42D21F71F2B3F9A0DCBF65AA21D40506C7530FDA449379CCC614C78F79013FE61C7FC310E4E0819717F7C05930946F21ED09F9A89EA77A4934CAFDA1C19A704719F99F1212E36FFF2840051B3743ED6719DBC04C629CB5185F68B184B01FF07E395DD6E7F02B960029E6777834D7DCFE9E8D9EA79F6B8AFF7A53CDCCC59DBEC5E78142EE76291E2620D69EFD27A52D813961D2E925B80E10F016460D774F9254FCEBB7B2E1BDAD1F8825E3FB3183A2F0C37BD2C03AC320A3B82AB010ED234B2544FBA6069E021C3384765A096B974574496677D3AC7238C1C8DA36B740DBAA5FBA7637DDB8378E4B736B96CA7E89393C4A8EDDE0B46DF7BD11AA7B209DC060547A5DB7E4EE1E147ACD0C98A09D4E0EC5880D924CBFAB7B3BD381FED94734856CE41689025CC00B0D8150F98242488A47D933E87F49D2C4BFEC45DA739F9E8C43EFB4039BB28F7D15FB8BBFED20998B2A1F740CAF706636D75F4813BC5A5CC7DA518A558A5F57544C39337CBDD09F363ADE9F5A0C6ED4720E3E6F3A5F1B90289815E66F2B97BBEC15C3C2FACE92BCF0B3553E86CE1433D511B63FC5050FF5480F4FD4197501BFCA03414FA37AF6A46A3EAB6F519B88736D0CBA30F70DB1D39C0D0E192C6B008544DDAC85F137E13DF3BAD2ADD9C264CF5FC7FFE14E47680B5BDFE55C4FDF1D7D3A9265A6148518D87604DE94F4703E15BB881451BCE34DDDB0736CC95BA5E75ACAEA16D0EB50F74C070378E2E0774FA00F9F24941BED6E73C42E0FB64DF7DC9D3D234B539F3798A7924A2B0CE7167852861121854F2A79B65527E971F85695EBA7FD285336930AE54D2FC799BE494336CBAE608E6F42B5C47BF7982186D4381BC8E5024BC4D3CE471CF56DDFC45E29892ABA59E5FA5265B8A57B3EBD01ED5F8274CDC53C207818F80DEA8B20E1DCFE02E6BC5739110B9EFA488FABAE18E2D0B2B6C37886BAE9A9AC9B5F5A08416DA792B6C3F66B71BF742250FC71986A8375318F8D5F500F5AEF1CC29D57FAC6CD552E6D72655791D7F813C85F30A6678EC386865C974943D44017A791C951BBB4AF8DC686CFF855D0DBB487461BA64E8DC10563AE0874D647C7C003A17FBC3B4466B77B21BDBE1781FEF508662A06D26F3ED3F34FE69553989AEDC143292365FB876DA890B4C0772E49A5FD66D5FF70DAE532273241F64030287BA9C707C8448B9DC3914E732C81D6ADAA219D53346E0B25A85C1BA0A9E274D7BDEEB241E1FEC05B5512E2CF5611097D013AA07161E7DE6CF1965C88727A639596D38BAEE85978EBEFC75BACF1E627E857C5C3CB669F5258CAFCB7B2FF0 -MD = D3F5191D1CB36B820605D97A645D90E2ECD8F8B218BF38C45CA82CA8 -Len = 11939 -Msg = 16D5688552A0C066CC302246D0B3D99947404346CA9347D63B6427D19C8E140F85168B8D5763278231DD665AE4ADA921EF648CA052B027DDF924CDFCA42737EFE4194B73E5C74F9D02D455E8C58E17C1BDD500E83D8FB97DD7CA8DF41DF3DD592A302D92DFA7A3988FE1B4271C742F029F3A253AF93FD53B66F24F51293774B3BBE0269EEF64F54154B1F4E4E0EE65C1F970DA015EC8A982D45BA71B5449875D7765AF1DA630F65255A8C7F53C02C2DD23C7A16AA447A6D0F7DCB19BDF43F8FE4D0E0DD040F11F2164E71CE13AC5B597C8883C1385C3E6D6B4F21645B882D9B0219E412E95E5BA590D098D06A0AC441392B54D6007B5C9B5CBF12557899D4637AC77C6A1B6B8B96232E233C36E7E8412CF841D01AF5075C7EDF4A64A0B422445B784AB58F2F06BE1438BE67F4D6D6C9240DCF7CC4092352B9C4843E8E11599CEFF57FF54511A904BBCA71452B38E69F309281E120DFD4EBDC7079330139530CD4073C71F112EE37B18A198EB5CE6DB9A2DC70975ADC120FD8DDDFF6B2BF44E17180FD9407ADD08A6D11FF3B98E5697DD1128F41BC667FBA5E69769DAA87F5A5F1D0B61D474CA0CC0B780D46C488D2573E934D8C2608E0B9155F8E18920C4B0863BE5CC6D4DF7153CFEC7264EC777D8E2B129FA1258D2B73706AC7F3A8CAB6B7E669A3621D2E39CC641356A48053B169A90FD77B01CC6C592B0FE7EC3CA67271B9DDA1A78203A04C5D9C7962B7B7EB365E1EC904B529118FAA223FE3650D99C9B99C138D8F91651B5A2D228BA890625D802A7FC73E9262BE88E737D9290543F9DD4E5574003E45DF8A0AAA66752DD77126392918FFBDCFB86535F60B765CE83FDEAA8CA931114748D380850A989D4357956220DC60D6ED71285052598837A15E1D37487184A7E0BA92D221391192D0F0E430E6481888D532E5244F2A0296FA8DCF92503C854CBCBF2ABB558995AF31ADE7616B5A9399538988E11D06AFF1F81453825FDF1EF6FDFC487C7DFB1F3D6FB9230AD647B27D183465800AC20A314EF6CF5382F4D520699526EBA03A165B430D44EE43A84F8D78D72B6348755E67F32BA2E62CFB4A5011BDBB8EF2FDBC9C2BB54101E8C9BD1BEF7F23EA59CD4472942DACB22C9B823B3E8E131C48E8A5BCD070FAA4A4C9A4313ADCE0BC312593170884FE22402C64C57EEBE3717799AAE6F533EBA8532ED998439996A9F37E35ACE9EF3234AB0B31345E5EBFD6DAD5B177007C930602F34F4EF950B5EAF7B9167072A36D651591521045AC5CBEBC4F7A47259A2868445E7AEDC5A2A18918DA0FBA04490197BE0208740343D2DA7B389AA22BFF78892229356BFF88359C9E7283A7F331DE25818A2AEB3F46B24FBE6B11E7EF69848B78790A43BF3E16CD57C16B74C8F2B799B7C742298FC100B4A113E9D279BCED4F67CC7C14D87A532AF021B3DA53CB664BAE1505E8FAE4E5DA957E6AE2A6D6F25ED47E0E6CD31BA18327DC1E342655D1C1DDD700662EF39A03D60BBFCFEEA4155696B04F6697963382800209A603AA764FEEA3D6E2D71D09F55BA104F3E34F64BDD248C37008DDA9C2E15B63D933A473B2D251AC7DAEF16D1639B2AF11D48F41F94C3EEFFBBCE8318244CBB846282FD0776C986685191F1D447B3EF376BED82051DA461944C5073C20769B0780326D5690862C2C467BC6617288EF0C2CCC2CCA2DDCA6E7568A5300715D3ADE943865C259F170C5D9CE9A84ABD753B7A00815723164C6A16AB07E753177DA6526A0D0443A47CC2CB0983FCC184DA8A330AA8747C3A472DFF2C6B96EAF0FCD136019B79C2C797D3B4BB630C13C09D5D48E8D424E2C5B88825746D1686D520F1337976992B73597A5AF6BC86E770DF7CC25F70ABE67D32310E6EAC3979130D3470E3C364A2F6DD36B7EDDBAE858610996A0CE259516342D2E811B0BB6EB8BD5E0B049E5E8FD1C614C1DB8B11803BB1503B865C2061A0D050C2F054556F081B80DEC173C527287582EA130F24F31F01136F81D49C6D1A90C53D79EB6B5011220B1249CE164CC65F63A99B639D5F2F984B06D95CDC17FF70173721ACB2BA458DC49269A3E61A80D8C13E6F6A159897F59CABB68A14B809E76E60 -MD = 72BCA56998E3DB2986B00E56294B272A2FB9FDA116640381B66132B3 -Len = 12002 -Msg = C2696F3F2B75188E047372C1980F02B5E73F2E25B5AE114A863EEEB7A0FDCAD45696098BDB43A8A6262CCC050E30EF2147FEDD5DBF39568900B44A81DB65821EA2EFC9576B1B08B4536370018AF9AE7945AA90EBCAC3C98B78FB76CC417EFE6821CD7415788EEF41041092B71887B8BE49686BAE331F0FB9E0726E0C3069E2D55B33BA686DEA0C060C15C695EDE401E6A83B3CB682A4CFE7CE64BFA646915FFB55428592B2C1872C1C6BC623362E02493B2D758E34A544C19FD4E4CAFD2CA50F07DFA9A73E19DEEC90CEBD2CE7D2862F00411B4DB3352D4E13CFDC05C57C330A90A193DBA15D2E7CDCF8665DB636D5AA16154BC92DE331A014FAD1C777BF6395ADC021BA5B14D580A5AE3B8A4968FF7131E029EF688D178462FF55C9059F13B8224922B2ECD366958DAED5C7EF46FE122527F67FC6ACE75EABB9DC95040DBF3E5A6ACED1210AC47840277615850760C3B90DFD8B21635892432DCEF731FB782C09A1ED2832CF44EE824E27B70DDDC29D80FC3708B94307376BF520D7F479707A8FC780F80407D7FFC9859B9950F2883A4DD6A2B8662811D91FCAC0ACFA936DD483CEE694677D2C913759D73D52629C1026B5A83C52A1BAE9A0479D4B48AE97E4E770E9C6EDF9EB1906B20533C555EAF9881D94FFAD14D5A48A086A3D2C76964D0098B26E20333A1DB0331032359E0DD2B8E3D9FEDBD8CBBC03F8E912B7C1812FF07FD297F3234BC02C36EFCE5800F59047B43674D86BB58B9F15BAB3F9856E404CBCD9BAEC3A9307BA3E7B32D4F2C66B5CA11B303B907320A45B910E5BE1B30A5E66FD434695D5A23FA523892BC21EDCB1F3D261277F24B48C1082AF53D31B9B3FBACB52D369C0336ADA74C9D1A1289BAF81B2BE87685555053A4A0BF0A9B15A200AC9F73B824C5AB877D6F31EE85EDEFD4B0496FD7C2A2BAC4E318019758198616E8435916934E00DF12289B33D5EE9CE8F6F2123B3A788B1F82FD47C6FC6CBC6919C85D1EFBF96A74E0F9EEF2F783AFAB58A287BB792D2A6B27D26F8CF1DB6EFF9A5A64EDE4E2D8C0F1CA840D93262285152E7226E7D5DB18BD48B1A489906BB6D513FEADD4C1F37566E95C817DC3D3197096CE632170D652B0876B2ADE514A59F4B46F8E3BFA3CFD209F1F9034DA0BB600CA66FAF3618EAAD78343DA805624BDEA04B6A5B148AFF7E1A474BC7DF6BDEF316CCDC00D04C3B591CEFE7A1EF8FE1698D94F0EAA035F886DAAB491CE6C556E9FF9BF6042F57E13A26934687540556EDFB51FB62DA4CE732417F7F548D584D3F80C85239BAE30B3A23E67B090F8C7C7A56F307A6921637C72E9D733EDF1008CEE31BDF4D2FE4ED52FB2F643DC0C5694243EDEE9F899C085FE77102C6D429325EF765A241F373978181A52EF3A4F3B8E192E952250267AD7B7987DD27EE9B5A2128C6AF6149A2B8800712ABAEB5BCC4092F3E358675DA1E5E883A12B2534FE97E558E0D20B8203AC2D4439702E3CBE36992B065388E504CB70AAFE7EC771F56DFEB51EED0C54054F3493C63FFA34A1BA3D23335D0324D62D316C4BACF54D0A42806766B8AACA78FB88A35D56F65D47840DD47162A4F226CC589DE20C11C44DCD7D6D78B74CFE296B9266D08C959E083C8F9F79CF5CA2FB842690ED87CFA0D49B2A64D59EEF0A97D8B06FF03005C13E16BCFA9BD16C6C38D5C00D042E9E3F9CE777E3FFEC8E8840B7D13C8F790A7C45A235EB1D57D192B3EDD7CEC7673382B2B86DCCF5FE97A8BA5482B24E414130F7AF08309C113FD93A36268B782D21460A0645F89F2254074CD6B8B6EFB2590EE626D6D300852B228BBF1FC8CF746D4E5B4D57A3F87ECDD32AFCB6453E38402BE55841B5EAEC97ED6D5F472B9C4E5DC285020C894271A64388227C238190F89FAFDAC996A31729AAEC37CB85D2B54B08DA8859A3512C08996103720B40BBB0F39B07A2A4393286951F61A615B12E8F6A792BA3F1C33BFFF320A5F5C4DC19CDF0BF54B4A9FA3AE30ED57C3DFC2753D97C3A611CCD2C8C10A4CE505633E673479A982A66D7094221F3343E26A539C5363DD366855FF802740718D4B832117EEFC0ECB79B943457BBA2370D6E95611BFAEDA83BD6A40D4EA39E7CF9528FE80 -MD = ADAA6E93AC8D22C6B8F66053AE35702B9BFC1816A11A389590047E1C -Len = 12065 -Msg = 42B5260FBBA879CDFAC558C5ADEB7C936C9564AA20DEF494E1F2F762A2EA9F168372FD628CCB5412482A44B53A2667C5F8927C9D715CC2F2CEC27A2B662F167C68E162F405A6DA898C856A1DA9FD0B164C0BCA4A200469D6D9A55584DDD20489B6720595B09C24495807FA5476299216D719AFB00589E71E4002EFAE4CCC340A49111DC2512345A46014CC92B78640E2EE777ED21075FC2BCCBA61A644E3BA4998EC04A64EAED4BEB5DF76286968AE0A95A77901AEC4116BDCC1CF0BFFC248AEE16867ABABE308202A0F48A8654123BC64029265F501425503B58B0E5DD565C769108D2342F4F238527BCDD3965C56CF50DB3E98812B693B15BFBF2CCEB62D3771996790296551429058558A503D2BD9F4EFEC73AC9CB6217ED98799AE9F3CCA46D01023C37EEC5B2EC03AAFFA8769C9FD757DEB32D7E8AC1E6B7CB2AD63CB3295D2B30F61F0C24F2D8C16C7EDE8A2BCA12295C39B22FEE453DA17FE1955923422D7371FCA1E35CEBE22E9233D857EA9A74B55170E35D6D19B154D4A79106DBBF9F3814E7842192DA4D46DC74665931E025672EC4CF55BEDD30C4A2FBF2E8D472B5476501DD2DEA6DCE7B45075F719D52185324FB7D334FF0AC6E0BF633D57AF413A2A516DBA2A9A6FCD589C7E4829598D2B303DC25B522ED8C2FEA04B74D4FF61DFF824DD7049854040E0D939CBFFEAA47D5E4559A85876A11EA235693BEFA80633F61351B3207990B66D977C6D0CC4955C64562E978817A41AF517B836FAFAA3F6623595DB2C4CBE15FEEE49D0EAAAFE1719877D0F1F05399812F0C54C1D2F99FEA1A644C80E09A6FF5F7BA9B5D110AC9355A79DA7B506CD41C388A0695EC1A088222E51FDAD356FB99E32639F2F4DEBB002B5FF274F2B5E287578135ED094994EBD75FF3949D7D3E75CFC8F2023B5F812A535F886D5BA6743C25C79D64BD501BC7785BE314AF0C6458D60C534623FF9273677D394CEB960AA990B3C461683E714BF5634A27CAB4091BE3EC89536F6C5E08E6BBDFF149977479F5EBD912F28D3F5048BA6DDB68E82D32C22725B5B38DD97835C0AF3C079EC6B32E5F7F40A646241FC6DB4D5E2799BA264963A970E45496D0CA37ED8910D4B87BC8B8C00DE2638F99187605C0AFCCA52957046FE3FB5D1CE2CD43BFF32CECF2DB8252B5FE6E2198EBD02F875DE7ABAE7A2969ABCE9554F3520A375CAB855C7F521E43DBD9E1E5903E55A3508EE47F07022611E14C36A134176864870FB40407B75E81D2F46D1A1AEC9999B4F309D426A1997C692DE5BC4F98B17507CCD9A1F819F9A1FF2D8D5194D6CEBD531D181E599F5E8862FD038B4EBEFCEC88DB221EBABA31417A94D39526CAFD5BE6F2206EDF1EDD46A03B870D987FBC4F0FAAC62CF94D2171E73F600B85BE88C77C66B6821A02D2307A1555447010E62AA29C468621F3C0414B23E81D5B9E4F96013635AE088E44165568CF70613244918B180DACDE1C80452543A9128A114D27AC29865575B3ABA473007B3EDB4A2D0BC1642A9941C8E6AFF3E034833CA62D3836156176A169F5937D6886042F206FFD29C1B2C45490C18F62EF9A850FF44CA2EAF069BA965DEB0E80B46335E12A36E7B323E5A470930A10A0B481C3264A39F16F1B3FB3AB9DE0B0C064BACE65524F557372D1F958439D97592A84C923AB851615235263E9F8D8BDD04A94FAB162E7BDDAF3CA9C0363E8A93531D8905F69022F872F07A9DCECAA87B693F28A6B96FB3D68E24E48E8665B011550270DA303432FD2242793F43DFC123F7A5F186E6B56C9CBF89DE8715E340CCCECEAF2F16DC882CAFDE729F4A6D31B8F599F20C09598DA073D0C4DA69A49DE15040C9DDC5DD0194D7AE4785FA555324A75DD02C4ED75321FCEDEA4EC93E7BB6B3B64909087572FBA78302E4CFD3B7AE1668626A66B5800BC41462E68533679EB6817CC02863946CC4AD7590B880672ED4BA46A1103A631950D24EFC0C2589A6C08419FAB7700E3D7D79F079B5B8341EBDCC7B3840D382E9481CF3AB5C1A818E3A2A78EA92CA3918493C798861AC09F7A075E2AFB1A9B3B9BC252FA8B28FE3D16FB8B1BCFEB68520C88ACC815F814F6FC2311A41D73C0BF52F1F177F1EB827F82FBDAD83016C3E80 -MD = 61BF27AF25EAE5F1F3C06B783BC930E02670B7D8FE76E1ADE283D324 -Len = 12128 -Msg = FD76A3E9E0E303CFC3C2A84C43D19B6069167F7C7094BB379EC929AAA4F19E2E1A77E312C0CB08C544C95EBBABB5988F451B01CF9214B37C341A527CA584840111236757108FF138E364D93BB76629C095117FCE458EC03B87BF19F8C9936B3E1C4C79F9375815A658638E93C5102C66563F3A372E6348C6C1B9DFA6A4E427F418CC65EF67EE5241A85F7896B1A0E941453916007C67B47194352636DF36E2230F4502B2569AA8AFC79C71B8B675805375E1FFD2764AA8B8D58EA9C9B580D489B09EFEB1D707719F3AA99C447C112CC77B3F833989BD2DF98F32F068B9C0F7EEF240719817B11ED583C82CF3BBDA268D60B03FEE05797E3EBF65C153AC84E899E3DA3432880F18B09194A1D170DC23A1D17F53DE6F3109CA8A88E1390F0D49902A48520B9283C06746A55B041F4A7DDC0727A08DD5717FBA5584670CD0AFC7A9597749C718B8FD11222EC41506505ED3DB5B8288FD234E0A9237D6715F8996980D985587A8645357B0F53C480F72C8065F5188A0E132AD315F3E7C12A854E93D1CC2FE9252FBE68B3BEFBBEACE38531E5BF5F2C671FEC8EA58F5E31A4BB05B8A6EA87EA7BCCAB50CA65FB2A2F312F183B5B1504ED04739BA854AB436B8FC2E50C3434FDFD50682FD79B19CBBCE2C76EC1FFE0AC9E54C2F9BF51497AB95135B877328868D6AC2B7F764FEC866CBB6A53F3461221240F1BD6D99C38DF6121E3751CECB1E0AE1A02FE054059B78DD96FA0CB3D1952A80B8AB550EAA82D7524C02778416E035561D31AE99F2EA52CCD10EA09ECD6EF244576D18E3C12110E6D224C3D296A8BE95F47F5A3150B32F67B2C18F5BACE76DBCF9F4A7F58A818757ED06EB3E5C987B58AB40016BE4666CBA843BA4A09C579B2274130A8BDD7DC37557CCA365302AED9CCF465F3F970D9799646CFB9B2B69218045F6DDF5180D4E5D36A0F63FEA6B71E60C200F3418A8FD35C4F2684C81E3D715362061DE34B4AB7A118249D4E74EF7C6898073014120FF2D80EEB2664E47C2349C44905396F0B9CD0EC343D61EC4C6657AF7964CCF384E83AE0DF1736435F90B766528EFC69D9AB204D2D8A6D79D23886DE971852CCA9283EF87125C28442EB082BE6FE68F45F1B3C440C3F93BAC49CA855604134CEB4E968654B4C00D1E7A81959435FA36D0DC43400A8DDBF26EAC8714223B4D55AF42E75D3ED387E52E5222B3646BF018C79486789A672BB826841745F4769A6BE8F467AB2294CDECA2D974E8D3FEE417AB6D02CF16E9EC3FB22005A632CEBD64B5817286807405B9D78050E61B5D975989282D7DBDF2BB81AD2E15C07F9AF22DE7B80977E3442C1F119312A20B461261E8B681CA612E7C7A67A2076781600F057A6EB3F8A0654FB982771B6C661954B66D96086AFD110B0239E0BF9688004018E418CA2E3DF99DF01405508B8D69CD6A75A7FBDB52D378C2BF798045D02A9DB7B1D9D275FBCEC5CDAB923C57420AA26C31C0B632D23EA2DB8C193E55A1DF6CE8FE610BD91C4BA81A41C80CAB69744B8C88554F1FE8CC14A0C29467D7AB4840AC9E861F8A24C953D68CAA583291F1BA8603EED2C843001402AA2134A067EB6EE2830C4972530A5E4E2628E63266A51BB3537EE48EBB6DE869997943B08511ADC9647E8224D08DAA3C009F4D65F0C9A1AF4E8B225A30DABA352FD5D1F6C36683AA4F44602E32BF04484A7CE88709AAFCE1F93EAE095FCB89A1E32DC92C4150592ECFE99AA59938A211FB13733F30ED476BAC2DB34F5F0DA67A609C49CF3BCFBB90E1A7974B33D0252C5DC18E5C67BF5C0133449936E387B3C35823C9EEB2E5BF6337665AD41EBA1346E74362D3E5FD8636BA54C4ADB75448D7650FBB542684FD924F8234896569AA466622A53C042CA843ED6BB603F2D7B7058DFDA13983ED913ED565C2E1078F6731C76EC796CB41297CBCF3BCF442261D2293B813703AE9926B22F55E33AF4049063EA443D230AF25597CE20827952749D020FFF07A58AED951FD9CA9B2ACB15346D513B3490E2C1294605D91EC67CC73F76A38FFBD86D79C55C86515164A8BEACCB386E75EA181C76233C18549D41D5EF5F4DA25809DC71B5C3F83A1DC31D4D117A5751D77380B5419A2A4A8CFD2391DD97F88C7C8F39A22EA0EA3 -MD = DA3B6C908D947A02590239E111BBE4D6436655A30F7F6F17DDF525CF -Len = 12191 -Msg = 11E50DA94CB9705A869AD543B34301A3FC2046163BA46EEFB1A1DE4C3371EE3A8356A39BA0B678673A25E583D9CA1931618D060DEE118D3E64C0F828C1DD9D8B8064D49040A5DA40227BA71D22D229BD7CB3F101D4137292358DFB051C66F5DB22B090BC7B8AE809F790D27F15434DCE977D4D26973982D3FF02C541AC44935E692A8607E0903104615543C4104034EDB745A0A3242A8603CD5AE47B763E882CAD3F5EFF92593956BF55D70A416605269B50B22D4C9BF917A42FC10FED422AF728144F1D3C0B48C1799D828AD4A7BD069DD709A81C7E3ED448C1D03AFA3339603228D91172D0A00661C25555314EFD4FD5CF9559A5EEE3E76C2DD66A8B55ADE5E27EE269DF17FF2E2C3BCE5EEBC2FB6F5E5617243EB3109ECB1CE1827B9A5BE3DB62D4378D0BC988B60F435EC30CB072F71AD176591EAF88AF6A49C85D10396423AB641991FA245921CF127C1686F07DDEE161246B257B50724AA69DA626AD86AC3C1BF33C0782465CB6593CF3C35D2C94B87D76B296B81B59AB692A18F250568F11A41C88412C743F866BCA4F70343064C28DA2E4B6311E69BB559CD46DF2C72BBB1C11BF7076ED76601F63AECF05AD33C779ABB7D3D20CFCBA000D1F2DD9913ECB7B3151BD9DCA48CF44601C96C13B25D8DE7ADE2507A9A5BF99202F5407366AE64D326A0D35E457A92F172CDF6297AEEFB3178C9C9787220B6BB1B53D929D45746C51FCB587A098901654F78C850A6E66268CE96EB3F57A53B176FE94BB7A48F9905762EF7F0230520FA2E676E042A8E2228E859A0112D66874CE950015A8469482FC1A8EC99BC1D1B0B0204E2675AA558C7B43DEF558DA55EBE1B3F77C2E19407A5DD62950C48FA0F334BAFBF8B9C03FAB2B45A2101624E49B47AF90A4E3801277EA6BB5EF06EF6DD2DE364A3941D45B209C832E278E54A80BEF31436E9ADC6683AC78DF03C0F77F6584E0F421437E9644307E4063E503C876FB794DCF6565C0F64159346204567DDBF43EBE955730CDAE11C0BD7085A484EDC7F51B34012A087E082F32B3226F11C3A2C65966181E7A138A8EBB76E833D0C7DFE0EC07588F2867B8A47097FF476249200BA8B8A2B746354888F29F86984AC2747751ACB18BFDE47C7D3C22BCB8FADFB58BF0D7DA7F55EE1C1FC19441759C747C08963917898BF2EAFCDCA770721EBD06BC1B995EEFB9C09D9B4BC8235C6D1BB622E39DBD9ED23D6E4663871C8CFF6BE25E5A68253C7D52A9691542EC7866931B0A03100ED4FC5D4D34DB72F5E13A65489272A21F90AA5587ADDB1F48B0A51562EA47B310E3A8CFB76738D5537572DBC919FDCC8D994B44F84CC6002EF9F96F56BC1A10725BEA1243081F2BB8757343F4DB37BA47243EAE3943885ADAFC4C3A947D361B79369C721A1A50EBB0DD268D6D6D8D3451BEBDCBF5865E0E10755C90DE8B336476D050D8C865FC6352426C7BACA83A15507D70E43F4132DBFC53420B52A53FAF9FF27FAF07FE433C56314996FC077ACEED8E9CF0E8006FEC32AF240328E233CCF84F641A073090D6D0E90BDFFAD80FE57EFAA0D54574C5C3FB07F2143EB9FA0A087C9DBFE763B5ACE3AEDFB5EC47A739DDFC0BB4860399FFD58858C2ACE6164011D596466AA120B6B7863DB3B9F7A68B97C59428604BCD1CBDC744CAC78AFEDC1F7ACF3A96E8287AED499DCB4CE4073141A3D1FDCFA8CB47CCCC68ADBD335C1686C61E6524D3A593D276CA632FA5F949A0136726355D6475CC84775B6DC2435E76F37E020F1C44B6E2715317532D0628375B20834E4E686FF68D37E1F4301409320D517D848DE93BFBCE7860094B6F0EDB9B824C42265A63ED55101799AF29973FE4D86B63DBE1FC2BE90C3AD88027FA647845BFED4E1E5CC1CEFB28AE8F02553107079F25153B397BF2C861536B91B4F4F3DAA81817CA7768A65ACE666BA3C1CB68A5B4F3ED1BB87C150BAF2BA6454FC0C5C55F94F90B81BFBAEB89DEA9B5AE500DB590285494850F8EC765724F07585B2003B15AC8AD024BD2B73AAED141244CB9E9772A936CD4A35E70E872D16E66CF8C7F144FE2E948EE0241D42BB80DAD334C075C8AA6F1BC4A504F073397858CA59240866ABBF9744EA548E285FDE10CDECD13DBC5D44E3DDD85BE1FB11FF4EAC744CE912E -MD = BCE2ED422E879D2D8E65A57FD0E1523EC255CB441771B7851A88E6F3 -Len = 12254 -Msg = 8E46C89AE629E947747C200DB363C78CC3C5B653C9A798DB85BC71A9B1ED0B4228E0F2D7B4A49DA61D9EE3C77022DE417C389514F095C18D6A7E64758C60194245431853B804917EFB744A55187C82E86D360F0171BFCDE78C9128C296CE6B720B9EEEEF3074887961D5D37F3BCA949DEF6739AF7C8CE4EF0E53EA8DB2B81A19C363681D83ED247BC369EE912677A26986CC58D269652F7D3CF4EAA04419335DF9FD3173415183023545FD631F47733C628A00D1C3CFC15FD045A4618A377EF4F226EA2E22EE5311278BA0EECDC92B0B5FD31A7B14655EBD7D6287A27C7640ADA610779C12B3E404B6BA6E25D65273B5417A6B5D222BDF7A6B09E352EFBF614547E8F1E1D509D4C833D1118477E20333E24BD135956CFA5EFBDB9F0842A200193E3A7DCA258CF9388C43A6BA7D7FD1D4E8569B7F8ABE817A2956DC55A08E56585C1F57518E2E5C1F5D194020202C4215A95EEE960752FE9C70B3FC5120179B15749CE41281457B165BBA0E61A2FFD603234CEBBE276425B13E28FD698B46818B784C2AE201DBA6EE0A0E964065052CDF2A650C525E3E3DC8A42A8250C76F0F25EE629FFB08E406667F72FD17971DFED2AD86DD1E3DFEC2C74482C8137914961FDE0C5E80C8F6317120709D3CE4F84A255521D91D4371BDE61F5305E04001C14A7DA9BE43F9C8A26A6D06D78D49EAE04C24D40F3EAC83DA8D12F16293AC75556DEC7745304B446AA6BAA93CB8EC9F20DFF6C369C7E7189EEDF6FE8673C1BA69B9515A0CC3385452FA07508E741CF3F6CDBE6A96BE79F9CFCCED3F0771E0BEE602CC03F1DA9524DFBE7A722357841D46FDB5BC864898280530509140F7D834EFAA02B391201B27C3048D4EED702FC09B5BFFD6EA85EA56CA144A4E463FA0A83ACCA1F87321E5B92862A4FB686FFA90256953960123DFA3B9FE07B4167B2BCF2643B6EAD843CF2D6E6EB9E7021BE892CA5C40DE6D789AAEBA844367F3DE59D9C5D67364BA77399E4D8C6C0D85909254CE99DDC6F741F49D7D25EBC44CCC1D5AC90C8B9CA810306EF71087DD1A8D122AD0553983E998381AAC966FA465BBEFD58076942F57D4E81586A09D35DD661E7D50ED5E4680F394DEB1C0BAD079DC634A144CE1D46A79FC9798C579EEECB75C2F93A068A2589E9A83B0D2AC40495A354ED01C06AE6748545726FB46C50E6943C4655BCA2A70E4A9CB5DF1C7781D1B2816DA41442B053EB1BCF02C1E5F2FCBCC91892C54832AF8FF42BA87A4FAEE11EFC16A566C99EAD70DD31C9BFB3F918E000C9814E3DB7477C57C0598073D8FB02079DAC54B7F8CC85583990F4ADE2C1F829590247E4B17964DE75AB985DA38603081F58500B3B03AE8094B29549727A52BD9C99EB5299334F323A8A1A23845CDFE92A01EA4BC429269D8830769BBD8FFA25DC78B53FA993DB79D4AA45AF6EB765CB03C6B1825BDBC9E85B8FF9CD62E6F67436D6733A73E01714F89F42311BE7584063209B6FA64AE00D1F8534C5762397DDA721C5F849BE043509A1BBB052C669F43A29ECF100B9402A50DFC7057D2937C57B093E0AC754E3CEE1520C353A49E3D64303A3B217C234905FC4ECF607B580444559E2DABBDA5FDE28DB36E6B2132A707336556ABE1969D0D89CE7F24F96A92FA14ACCAB08FC0E076D9D5DB700D07CBD438A23328C5351D97BA599F60D142AE5A757D83D64918AEF938DDDCED74DEDC29F7C87F05701848226116EC882E82CE8D73B6C14CDFBEA0EB2FBC5CE1C72EC843574C140E908C968B834CB3BF550D8AA5164AA01D8D8BC67B48F94457BBC3749927B1E45855D6345066D79BE4612FF894758466D342807ACF64637312E2D1123E338C2F2C009131468D01930EC59AF3612138734254CD31E078AD94C821967BC7BF896C363A6558AB9AB7050DB30281042A91955FD22A22701BC7828591651F8CCBA495BF0198212F8CE31B427012B4A482302C0E328A10F80F47DD7FFFF9542500B35DB572E93540F2E24C520B0566C0688A32F77AC04667906D3FE2D91C8EE24232098A8E33398CFF7C5D0400ACE27309208DC5AC07FF721BA2499A4CED59C7C2F015C78E191C4AB5B45712C5A9C3C5A55A5DCB0D9AE679F29DAC3EAF29EAAF47F891E11743222F280DFE3423B7DF4BB5D92CE4407CF9F7382A53CF2EA4 -MD = 5415B535BA4F0418C2ABDD0D259428F8042115E6F2FF85AF13685A34 -Len = 12317 -Msg = 1277C0702FE377C9B26860EB90B74B6B15F853DBA39FC10585F753830DB73E7728654A1E5C6E7A857B7555A8B4283DC5C2BB7D4526FC23FD704FFBC2F5236E7E63362A6A15365C4A18AEA93C9C6999CCC0D2651270526646D9A4B15F9B5AF7B9E0869806339A4885ECC52CDFB6DDABC203E4E589766B4D41DCA4B58FB013DE37F8F65F3970E947D8A28CE2B9D4D989B733D813B5DEE28AFDD4241A49E06B3CE24108CC70FD7A62C48CB059D64527CD46BB863E48E9621760B60B90E4CE1EB26F1808CCE06222FBAB40BED7BD484142D5762FF5CD2C63430C707A7049B0FE1C4021DE3A3ECF6AEFF9EE67521F458B8635ACF24C3EC9973AE09EC4C02B9CB447C5C98AF1A9816617F61979D669315EA5DD7C757C0AEAA214A83733CF773D49A10A088B8D6BF6D5BAB95C585071F8E8AFDB86E203402A74113545106CCCDF341181700C28C72F8310483D37B1FF8C924EB13ACE87D388FFE8D3891420ABE93E166C495D8C09456E8CA17FE74D326119B0CFF85841405CE501BC9D5E3542D2CD8660DEA8935D8CF55722E431CDB02032D7267C698A19284815F508B2E49F6FC518C04B953249BDBEA6A054E842FE7FDC14E0181019FFFD909AAB8F21599F9C7ADCEBB62EBC99492EBB8E3B6C38A5F493102EFAFDF4586820B38A939E4F83FAF618B8005EA980C5A3D097E4591FECB90D8E40676D8B7628A4339DBB55E2F2BF0546BFD95547F33176A4CE6FE355F6AACB5B8FFDF7D812064D31C4732A7286D8189A3CDD0AB05B70FBB3873DC8A9A0A4445AC299CCAF7E5BC5FCDD84CCE75AF70BC4F4D0D32CDAD27FE09FD1C0DD09AADACDFE70B4682CFF4702218B36164AA6CDA3784ADC2CA3AFCC50E53DEA8D210468CC4EE537DEBDA5C667FC47E4C844A5F473E5D98E689E512E8EC5255F8224F34AF77BEA31A5D7D2DF74A2AF0D0370BD741090617EF1BBFDBF9B6BE546A70BF352071E7DA8867C4818CF6F6242971ECCFA688F8D732042847175667551BBFD82F7F8F139672118EC6F2D7F0EDFC9158678F81EEF7EC007E57783F51ECB85544AD622586CA2C90E3B80CC5B1996B08E987BBAE557C9AA8B01AC6A97290AA24A0C587DFC6C730B65EF3FD041593F62962555213845B9A831075610BCED5AD97778F299432976108C7AD0618E9E49C7FADC1987B01BDCB3511E958B6C3FB540F8D00ECF5D155A3E007EC4BE48DB6CE417E9CA0FFA3DA02460A3FBA14904DE1A2A624B0F5292A81764B251611E06A386297E6D855BF869B95081511975FAF57EFDA25FF69BFD924D370A8CADECA6D88463A1060F77EE4CDEE09DC3C6919E2D841DB14F53B7EA41A612FB83814BFC27031D046693E89AB46DF9BDE39C5A33955B40B2530851BEB497D13566E53F5CE8F834A54EECA9FAB655102CF8A539ED9EDA9237F9CBEA7602358C824E797907030CC7C1B163AFA487A13C6CBC53E801518F0AA28B4FD000D8DD034D46C9178998276E529814359E2D7E2C2C83B6E367B835156F9E3E8297CB3C512B31A0DA434B1B3B91C0B7F2D525E0F0B391B88C04C26B5361032A88C67168A8F7D99E5B301F4D61FC7B7DD3C3D292B4A9BC147751AB39BCB26A0D285EE2CA6F7C95CD9FF678F9639644C084AE5D916B6B321196D49D16630F311A3F401CEF527978A321AA97860B4CC6B1803B29A2083B1DDAAF0B1F6BC87A1E78011284DAE4835879F4DA4B3FEA50C76B0343E2EFDABDFF5F9F059D14C65AD8174254B8B2F95230B60794E88FA62721787EE2E9EC13145B61974B977BAB76BFDEE0C21F51C7CC466F56083EFA5168BED75863A1596F0C1761230EA2A90FBAED5A8E2B5475BEEE9813149E4F69911A4C75AAFCAC386516B77F006F64426FB6AC35188251B905BE208F61D7095E16BA81EA8A372A5648C58A52EEA713A30DA5FC66B6E30CA4C5CC0304DA1ED90AD10408B9C83CD2D32F4D210AE5F91773144A5074AB87F5D631B15A0F7A41AE87BE34DDD35AEBD216C10A2FABBF7ED3AB2179730C4F9C26D42210EE28F995B6D50E0930F29F31C224070F87CF744366E69D398DB6CFCC50CE2D84313AE36119CB74837F45493846D904AD8DD95537650683381B1D3F139F000495397F6E905E608A04557DAEEF64282F8F3062BECD91511C67163B6972DAE6F2B55E36FFB12FA8CEA237B5B43EA58928 -MD = C1376A30C6C4F72451DAE6B5B384E60DFAB4FAEF9EA928324050776C -Len = 12380 -Msg = 2D6188D2075251ECBE17E711257C96920496A51ECFC3851D6B9C94E2A3AA5ACAF0E7B0C50B5F0BD2FC1227593221260E6327A0CD10F2CE083495801E7653EFE642353E9733E7CDB649B3C5A0E9F853805113385A63E4B10EA6C1B8D7CCFE0C80F24AFA14C82F6412B6BC82990FEE4A437721175DD6B6C498C37EB4E1C804B63C33215CE8C604CF425E2B570CBD7BB175B0BE6C071A889080A47862C6E16515AD674B68679C44A05E6B88059F1797FE7CFF1062DB800BAA61C7AA8E77BA494D01952046EE5D9A881644D2702DFF48333D1EE432FAE0C2E9A89143282D373F5CA2653F3F1D96B95A45DEF2BFE0C6C6411E92375D48CC72A35F8C7AA7D89D8AC2045391BC7F4AC96E3E4AA77DF77F641F550818A3926E56A368DD13ED10F1CC68DCB1997D4C9885C0C4E951A36158D655EE4236AAEA9A7CBC5A6B3EC05C2DC6AFDCA788E12ADB8B7E7CCF111D915E6371627777635446FC5464F1FF290A0231DC4A635418F1C1532768AD22FAD0D3D527538DF9A00D82416535B2F0300A916E4F183AF0832209F4B37ED8B80C68AA82D5766460ED7D37EF26F801A344420658FA8A2C516C907D67A745293ABFBAEA5623D208592797FC779F9FE266242FC5483DD1AF0923886B1AD50F84FF9D1E635BF55A9CF9C947AEF7989F7F9C351678A32649C3BBECBCDA4444AE8FD3DB9681D1C88E1624020B4403EFFE5E0A699F65B93EC02A5A4DF453E067D7B50803E15C913CEFDD289158E5B5654916AFC2F4320EAB7F9B0807BC4A0E39F197D70E1FED60205D454588219A03B3FF301282207694377B861F57B7ADB07D13BE0BA2C13157BF9C15E5D544B3EE18FEFD885122E8205724DE6311CA6B7BF4CC929218A9FD85628392C0B6E35983E826298766B583A203CE23E9F1D5B1C2BBF57971813A0C29C18E45D14239389B2AB6E8B1C67764DE0301452DA3ED54F3047C3258673876A4FB34E7474E45FB25E10CF14C3168B707FC288508CCA479E881B6AF9C7FA5C65556BE5B862CE6598BDF7C100C9640A984E4EFDDDF3B3ADAD1BFBDC87E8337C65EC015E9E15BE81D0766635C975A5A572FB59B8A257DC8D1B351B1FA5701B252D1A367EA2007695D531C5881D754C16D64C183C63D96C8A12F9AA478C7EDE57525654987C3277FCED15290B0D8D36E24DB16D40A2B9C60B93C87425C32B0C844F7112B192A38B2B7DCC412814A7FCD7CA41E615DB1D57EB86F3D16F4283A46929976A93EA5EEFAF2E1A7E466292B1DA1D0E8120D9B151994C0F5F7E7023E222CA1A15D92858E364ECE46DB12E8217ED9C2470960EF43AA61F9A6D90B1CD70B9711B38A06FC656C623DB7267B4C9D715F36EFD48112DC944804E4C5F26170B772D5BC0FC87B5DF1F4A6A3E45667090DF3FD74AE6E33A7593D789FB748007039FB20393907D03BFD6C46ED4C924D43AA58C48E408119DC2A785FDD7666BEFF7157C7B5C45E50D5CC3BE23591AD8D2369E791D2B5258948F7DA49377600FFFF5E02CF2535B30C74858EA2C382463B469A57FEB078FE96A988B88F00F0811A69E148F570CCABB31F24BDF410708E5BAA56B7201B5B746FBA6408A37DCA3F0247D5C414606E9143DBF0F379F39D616E3550F07A6CC50D42246028DB5EC3AD984584D035693C526E082C1F191293A8B60EA70E4141E0A45B5BF83F238210D1C4BDE10B73709DD41EB744D017ADD64CABBA8C972FDDAD3088296B8F9C9683A955EA8E4F10E66D3B3207571A3C2538ADD3A10B45D02EEE5F4333E8EC8104152A7A6CE7099766DA4B46D2E10EF479747C88074E83C758D97A05D863FBE30C4849B08F3618200EAFB96B1AA3324F27754EDDC2A44F07E92ECD1EBD7C9AF700CF362C3427AEBEC821BCE94DE3906BB24602B156F7B5365BF6FBFC7EE0E3C87D9FACE84CF2B68D6DC8F90F0956EC471C542BA84D265942C200A48343A8EF065280A450384A31FC8F1B3D8007D240CA36906E693E1FD95FC3EF12ABDE16994D684F92F14D15CD3B53B0989388BF780DBF87AC5BE1ED1A149CA4D0F7D1DE0EE9001883457EEA3A98D41295C6933644818C4C675F00E0DF3584E8CF7D360FD16C494DFC4A9545739CA306995C53B1B5A5D699C8A10A567FE2632A0F30D1A7EF48E1C167E35E561E84FC529917AB1DFE6AC000818C59E73A015AF914467E02BFF7873D1A5139D0 -MD = 1D966E59195ABFC7019E7E0751C778FA5021A21C929A13E62B1CEED2 -Len = 12443 -Msg = F34B0F245B395163D497ABBDDA68DC3974DB177F71A9834E575E7D0F3BCAADCC4987C2827B4C41192F7090DB8D2DCB6B7A6D4A3FAB8BDEB7F801CD05AE74E3D27F68DC2CF3307385BA0D23553A7005F23E6BB91862D64A2C8B5ED825D181C430C6296879CD238C651A7337D11D814456360A378BAA25761CD039D204C6C6FC8C360C3738AC11993A2FD7D5B605569ED89BD4502847F7DAF40285DDEA2F151CE7127CB666D68F74D8AB1724969A0E516FE6B39CDD5C32A5C9A76FCAC000EBE8BA0832F57670435256D4FAC9F490CCCF55CDF0086DC2DD16F41A7D5659D4C5C43AB496C79BF2BE2D1D4450C57CB6BE1434AC98931B9CFC643B1F8B5ADF64DD4E7F0F9B7C6E20D623B8D6741F38B9D734654738D4739E035D4DF81E9F1182D793B4200DA0F59AC06875817B24A853EBB84F6CB60317AE27C55F6B4C0918B7EFCD2CEE80048E5254210A9DF621A16BA5EEBA89BC09D496C6A3ADC8E77781F1AC1DF9238DA6D4A9FB03697AE0659EE70213F83AADC59B720CAD503BF05C147030F56B634A39CAE5240F538FA21B82A98CB6BB3F0C166B22B333E46C7D29060773A149C085FE747F1B337BF3AF36B27DAB330562359EFB0C3E456F67526A016074EA9FED396345581AC9E1A95ACEBDC2BBA93E8A111A17EBC8283F6C5D8F88A1A12641F2DBBAF5B4A0065F16D6EC79B0563330A996F7F02272699B3D3B02706C2BEBBE85B4AEE16F8B94499A8F199C5217EB3EC669D5D1E899A0D535FD71BA9136AC29BEB70AFB40FF13565301508C468F5679CB0F99C70456ECBB8261489E2644F18DE32A2537BB3826D4DEECFA2E408E384E4EE5E0190B5E922DBBD80721DECD371B8E459742FC249E8672AF313DB9A6AE75F6C3B5A16F947EEECA45049DFF4EACD4DF1FC3B8F44F7F3B714AD83BCA45D7A0499BDBCE7405495A128D619CC2946298C2763ACA431E0C1B7556282AD88749115A5E798EACE346747413DC6390D6DADD588CE4D4115D535D14C4F6306E2549EBEBAD46F6A9DC9C9F5B936763ADF9117B04802490C13BE95FD21B67136E92E54392E3B6DF0FBA9303B4B34A9AE8E5CC2FEDBEF34C9A0C8F593CEE25273F452393AC9A3F7E1741169E596F62A3C86EBF2CE0F007F2154EA4B2ADF94CB466EA92A6A2D9B058BB7AC666B0334D65D07B2F36CA09CED7B7E737603C2C4C5BC1F27AFCA0B479A4DAECAD7D7984D0CD443B9CD80FC6A624710F924AAC27C947E87EB512E961A01FC85704F77993B5716C9CB3786CB709D103E5819C7B39DDC042609BF4B5E24B2DB5DA29169A4EE3086D8E72BE3CD27B507251FBDDBC4D8538BF38BBE6CCF5B1EEA360B0F7186B85FEA2D838F0C0D67128A58156AD3F79F7970D91D04A9DAEABB990EF070A0B2E6A366BAA1AE2D90E4FAD8746B8370B9E252EEEDF3F2A57D3ABF987C9BA7DCD94276CAD26ED8E368E94A2251532987C232CA5EAB114F7D0E5541F09409AD09BB3244E97C7C823FE591A3BA0F41217D741AAFBE3945A64F45DB11167F1E932A7167F52C97E848DC4E76FD5CDCA453844D40334251B0839550C9A190D2DEF311ED1D126A05A66C120A476E4E2DEA2C31D3F4DF2C35E547149C563255A15BEEBF82DF18FEB2312291C5B7006F8B03507DDD8C7534144157716CF097FEAEE24F9A984C3FC3B34204E0EE7581E4D976649798EFF67C74CF821144FC00ECF8301A6984D01A781955DBF59AC1F5CCE8F6AAE535CEE2117F2BC992C2DD067B877AE690125D1EA3FD801DB7F10A31B363F3C0DC8E2964799E42F208532078DEF10AB62732E8D8E529205EF1F9708565F0871DC7811FE68305ACF6664A58448E47E8EC7394C855CCA1356C6DEC067B2BF10D795836317D893FB0D3190914FBF66337946124BCA35588168809F12DA42646C8899DA97B4AC58E91E765638454BE9520B3E5F0648F843BD8B719CEFBE81E77C6063BDB055570E4FF9C138E1C625B156E9DA19F61A42340F1A3B3C7B21FD0F3B12E09CE9FBD77D1EF76465B1F08D014118A8C073002C31C5457353FA6E00243D7680763E7461AB53E4A9C09CC68502DC62B465D0EE9549EFF3989E4C8EDA2361E62A7257F5FA3D305075AFE776170A24B6284531F5DB766C8CEE04AD6EE7557FC3865CC56FB559C90D09FA1862FBA5EE270247FC69D44AC34C07BA7F86F89655CDC04D59A51FA6E8040BB31E9240 -MD = 18DC818F0897C02892D507979009473000349ACF1EAC4B74F60A7EC9 -Len = 12506 -Msg = 9BE520A5AB310662DFCA96BD9DEBB88E28562F7BEF3934CD9C9D75EEA1E8E7477B43B1D8B2125C66ACC69AC91AC734BE424781B71E8CB5194D58C50376EE958B4471C2C2C885269F8A96788F13A7C35F8A885ACC25FA117EA9685E7D1158EFCFEF60C230FA4A0C48A28F0DF9A194F1EF627E3A57760C24C85D4A2892D8F3D821898A796977F3769DE44F7AEC6047B07431AC22038C9B709E146B49F2D325FB314E860A1CDF418655B01C6678438A7EAB025B1891A3E3F27D4B93AE3FDB160BAE08AFDD71D2E6A6C0C058E2C075AE3A2EF1FC545101E4DE1AB33F11E7F0B42DE6C16322A95E7556464C78DF3350A5068BC59C46ECC9CF17A7257C5B668693248BA9F0A8A842945857C3ABD03E25E2A07A5979DEC0531BF198F68EE42FDAC13D2E7FE918F71F7132297D2CC8CD8D698FBD47954E92046A36F2C1076B6260ECA3918413953F64B4EFD9D3664DE3E98D89A8F4A13CDAEA756F74CB795F06F29812AAF0B171707983C234ADC8F21779B754E8B9DFADE15E137C26F2F3DC1896A07B9F01D84FB9A47AFED3B799A143628083018097929AE2FE32BD79BF0D74B40D96EF87FA6BE35CF07389406CE160BEC3E3F20C0BA3E8FAACB10CABE97AF360A064D2E90E5F5E288225C3DB5FB1FDAE218232E0D2284F68596795B3AEE732466B123E520966EBDE101728B5F59F73E0D6B2BCC1D32D52F01821C73CDAC0230B7BACE185E175AE16306D45C6A0F7F2F214D77796C2E525667B22D9EBFF88B067358B07935CA56BB6807F190699E65C4FB8D22DD06FC2F954DB738C8DC5BF700AFF1C6AD23241208579EC37F883FA1A9390583BD68F5B21DDDA713AC24785BE785FCCA117EF635C06CD1EBD78415032F19C8E89C5A992C526C63F9E239007B526D120ACBD6DEDF520C4DFDDBA5E121897AD446D4FD4144327995C56CAD825BD751BFEBD0B0A7E5932ED3DCBCF86DCF24777AAFA27823662E653507CF9A516A7E4B79E61818125C9235AA4353C910608CE60CF65F200E3EF846FD074FF70BD9853B6F8E2B390421459C524290D22DEC50390A98508515547C84401AD32FDF9DE0997E94AD7F683EA84D397F4B695E899E1C559980CFADFBCD8DCACEB312F4F05C214319FB61413DFB6FAA39A09352EFD979C3BA2EC73FC90D3B23DBE1052FD9E474DAE7C6F3326CE558719BF17A23D4FEB163C7F5170FB4F3691041F3FB0AE09690CC1B74A3D99723D8216B4319819314A490F31E70EF87A68CB74B9ED6BECC16007D8F13F448012CF60C3AE29582E3562F74C6654F244035D7C7CD2506DF72DABEB58F425AA528E2E7B702E428772B74AC4EDCB01E9A008F6E3C34EFF64F60038D4CBD7B7B335BCB93A64983E6C88DC6745EBB06B52068FD4E906DDA6A3CDDFE6B3DB00839B977679CC2E1A2B8BCFC613A75F7DF0F0AAD121B224E0576834F4241A5C4152E64F47FC14EF4B5969B954B38234948AAC43CC3F662DBD7A52674572B6661AF8FEF9CB0C97386D0649ED9C8C7356C5EE4242FCFBA722A579932E8FD92ED4B370727C7E8CA94A1839AE82F9C81369C948F10AA1E095B2E48591C4463161991A3A20ED459CADF4B80774CF92651F986ED30A9E9EB18BA95C2F69F12E891A0123786615393D1D05B2DBE4CF424935E3D23ED2B9BD42EBF1FA3DC5905843667ECB096906E8C74ABE2B39D783F12146AE1883C13A9BCAF28851160D9B2D536B6AE16A15B0BC949F947F254438FBFA17A2CA93306B3698587E50A41D601C1298E5E08CFC7257DF2F72AB4A75C98AFFDD3A98A0A73E0E4B353D9A0A8180E198CF5059C9E4882DE770FA93F340DF2D5531DE23DF4225E00A96836CF312286075B29A81D4243615A8DE89A017F13D894588807C076A1FA3C14E0CE083E225E3D6FFC9F99E78D628D13394D6FD0DDFD0624CA7F7925BB5607ABA9DCC03AE303F171FC10E6705102A79A1A322AB5FFAF0E59AE45A5B0B373151147E08761B4E0DBC84E49F3AD9DA926388186CDA00FDCBB3AA4E70E75453415F5F326F6A7CD3B2B51801E9531B2A08737EC2682570C62490CC31CAC97A7D1CC3E1528778E6440CDBD363852A1E02DD2A2D0AEC1A8849894ACC3A0F73C7FFDAB3F215C51DFC1F6D0192B52A986A9C81B35BB8C9AC7CEFC8D564BC5B74B14B3A88F40A8964281238674FAA66E8592A5995FE214980C1D0BD092F9850E3F0A4A9FE8F1224A8667A40 -MD = 3FAF5D035A089C857FCEA30C2DAF1C5921C26C4CD5CE3FCE04892602 -Len = 12569 -Msg = 7F785CE0B230DA53DD92E6ACF5FAA4C09F254E527A28F67EC86D522242843BDA155220FC98840025C5670B30B9E306B06086F053C1A6242FFCA8A5B35DDF05BB0D79FE5B51D47CF7A3BD4D35EE21C7F2237F09A818BF472F511060FF9C9C201686E4F17BCF429898709D5EB18D4E396DA3ECEA25DD04B29EF441883E7EE9C813542DDE9BE2188A104960398E5DE920F241D23669C7061FE80CFE3EBE981D091DC3E1A895C3F71B6FF970191A6C067592E79FEA7407117D2509219A7FC74C8E182EBB1C8962F3CFF128760AA31D66A65CCD1895D732621D7EC5F1DF8E025521683EE3FD3A0D676787B486B2731CB6AEF93A458919D60675919520ADA664355C2F4D7E70F92563EFC2F94B213974B225DB28CBA665A7069BE1A464B32A674FD23CF40280413C4714C9DB48ACD78347D4485399554C2CC469508BB92118A5E6F088025F10CAFAD6ADF6120628EB72E4FE022E1DBE2CF48D40E9BC73B7D57966446D72D95500C12970BB6387E1AE3B725C7CBD02D1814998C662BC588D23CBC06F4BC517280108418EC3254C313288C1B51CBD7FD054E28820553DCD8D0B648EDD7FDB4B18FB09D4D636210A3ABFCFC33D763AE0E6AFF352F46E3801A55B25ED0B30F74FC0DA0069F5E0A16E933C91AC8FA77D54FA8B4C92EFECA6426BC563C4AD6674FCDFF19D2909DC5B3B2D118229C08F737591FB2AED98141BF60ECB980F05509B30236B6B753EAA0271AD49AB6EC0A194A56C81877773D422AAA675C213A6DB63EC28F79919031DB88F94710AF476B28832B63B4EE4123AE2168F0F0CC4C0E5F15439D52BDB5FD85762AB3DBD6570C0D3C9993A1BADAA54538DAAE56B4B8695FAEACFE8FB6FA50C28975F364C8823981D9069F7C3795D826BF033C97BFE815CC42DB430872CBF45889BF8DE243ADFB41D99AB13BEBE7ADCB803A298EC22BB7C34C982A8D0BCFCDCC862208147175E3C56E23F7122C64FF518DF33D8653E7D4BEE5F8B1503E8B221474D353DA37531EC41EC6D8FAD7EF946FC689876C27915D2F0ACDE94C82B5DE941255D13D9ED0806E2F453781B604BB30095FC083346FCE3B5EE0C0975ACE37571F25F39130E915AA44E62A29EEAA05D14030556DF4B1F83786DB484E23C8E0773391C6B8F515441F02BDDCFA63961CEBEF203A88B31E04DCD3395F30A8F7E5A119DC500959573231205B78B61AB11F0BBE93AA13BCAE62B7EB275369C5AE043A6FF3DB0780FFAFB9A56890C0A5E31BD8A8A5857D87BC40C785BDB13DFFF602E10299F5116FBD810D91D900DA2BFACC635FA8227509A79CF370569F211AA0376F6C7523F21DACC0955F70916392085C3386D37C2662B2A3EACD4B3AB6F61EBBB6FF4B30DD53A8BF4A57DA0113387FD598B33403021B426C3B2B7C51C90B83BDC4B90BB9CC88C8C6BDA17A54D7CBAF1F1D43DD4DA30849B130A46C34CEF4F4A5CA9DFC6812C889D58D28F2218A7AB003F8B84E50148DF10CD7E84215C17D5621BD2DAA2F2DDA2CBA5E435334E875140BA71E855067116B48B4AC278BEBA6DD3C44727489BA3A292EB4C41E834E3DD9585AC9E9F6B6774FBD16A44C21A7D1A9571BC8F7B01E97FADD031A5592445022FA14773176DEE15E84C4085F5B58D6B7C3B56937335A19C37FB2AB5CCF2B13CB192B4B54FF170979C524EEC89EB4F5C671BD32CC63A37CAD1D0169750F2A7093B39C331168A2A20BB46C15F7700D08FC6670FF5C2919BE38BC0E0DB8BDA8A476EBC16B0EDBEEC842A39AFC619880C65329A046693A9B959F0A7170BA84029CAE14927042CA44A3EB48F79320174A11CCB248BB8A088CC13916C6824CB2B24D669858983DF609AAFD40E35EF70F3F3D338BDAF83D6AC776BD3B7F1A176556F41A52C5F6E6BB62E202352B02CB6B8C6CC059A2B98FD24BBDA04443C251A24755D5CC86DEA8C6AB6B904D824BA9B008065C0CA23E3C9EAE264F21B577DB6E30A64533F705D0E04DC209F134E6CE8D4D0FDECF4B6167CCB5BF352CCE5EAE0970323186A5F269ADD5C3B46C8750C8629B968A5DE16B87E844873F923C73149C334A66D22DC7B82C0BBE6B799EEDE09A0E6B0AF061CAA15C8FBE17C36E9BCFC91E1EF35C1D1DF4F77264BB106D94F8A2C99DB6C85230414BBBB94F4E6D759324631B297925DAB67BC53CC6ED3174196C0F5F0883AE8298FEA68EBC56B56CA69E9E7E63C655D4C5AA8A4E37ACCE4D4BD00 -MD = F72549DA82F15D7AADA5444E1143E30857F124C7A4CCBEA1398DBE62 -Len = 12632 -Msg = AF033772478B6C7A405906811D787ACDA7B775C28EBFFA06AEAB37EE363476239A4FA0AF7AFCEDADEB2DED7CA3997C82A54D6F0D1016C4BC2D182F6116232686F7B5BAEC00759E7B2ACF0A2F9DEC55F3E3C702F21D760A853283C75B1EDD75442E30DA1DE74197913BCAAB1A619E44C65F410E9B8F235D68D1EF0B7853AC836259C76B4A84F402C2E90F5879761351DD281E19219E274AC8D76589153FB5E687CC0DE9B543F763E632A465BE81F2FADE0FEEB96D4102BCFA276D7C9D06945CFEA6C82CAFED680BDD37F6EBE9B8013BC2E7DEC52A87A1C539D8AA5AD525F9405B1DB1EF942D4E98F40A01C3E5E555C92D18F36EF4DD8CBB5AA7207FEFFAF28A5762DDAFAB4C841063C64F0FBC32AAA69CC130C9A2ADD78C795F5E417B57263909526D2A741276E44D05A3C175B51FBA17FDAF7D83EFFCE3487159CD92F40A19C567DA4E667A008C5AE8E6E04F8526642CB4A2F4CF0A07AF44A65D4F1D6701D6E33BAD2B1AE2BC18EF4522F64F285652A1155487B8A49E9B0EB996567FDEFE07B8EF97DA55C493448FB0EED532088ADBD355E4966ED5996EF88CFB942543D5065F8826F85618DAABA9F1CEAE1483083CFD5272BE07FAA6270D51B7DF74258FF62C20A8B692A4FDF0F6955C1FFBB48C5BD5026BB257972A81849DB7B4EECDAC9531C2EF50F915119086D8E3B52191B765D6E38DDA2B125DEB8BA9BB841460B9755D1FE38C1765B72EFF98B93DFA87E0CD4787B74AE335A9A61B934E258ECB764284F0715DE438E5F2F59639021EF2B21FBF49D53B635F683E3711A2AF1D1E2555F5AE93158BB5F6670CCC0C99D23CCD4D228F2A6374BC7AA2C321F03A8ABB4D9DB673A63EA1CE5D5BA5133AF9EBDBCCEF97016B813A9765B9AC1EB51A93D7760B36751C766283AB13E773A128559155455131B8466701F6C16ACC822612C1BE81E14F5D9BDF8B9DCBAA7F3E10C35634004DAA506A26878AE7510DDAC3FC9F8DF0F52E0BE10513D641FDA741FD265F9E0E3DEDEEE45513D188445890C384DDA51BA4CD1AC63137550B595FB2C3ABA5B60A798C4418C9402333232E1A2661C8977DCCE606F4BA89E83A1BCAB88BA6F3DB5934C227D3CA820063A1DC2EEB0C1822DD2CB89BAA12D81BEBDFFBD054DBC4A063355ED3825E8196CA04D6D12D8C8C521D633E2F214E846853DE5D0877D41058CEB77545E773C0B5D5155D4B61B4CB060DBA7DFCE84D3E25F39EA6B95CDF83110E9C1051D746F0183C01B06E311035A28809F4CDDA0784D7903E132DE91E0F426D937C5E98FF8123AD11AC3E1133CFA6298BE0AB58B5DF55D6060D5163D847EE5965FAD60A8503C3BB54935856544D57404215FC843D41E5C73F1A8E500F0BAB3FBA3FE55475F89A967E7E07ED21D6D821A797A9B3E9334168FD6D1F19F312A5BB69422CAD506851770C3897DF838303B2783F86C8A506EE326EE4D8C492CD1150F4771A533440E74D7E9080193F6D4B44BC26658D8BBB53A132AFCE1899224BCEA0375A5E3E563FC16939BD3EC085D2A5364FAF11EDA41EEFF44409C5100F0AC2EF60EA8AB98C35F9FD65FA61D6A60AB0C35437867221DDB6A87702ED44E115BAEF16F25CCE2B11B8062A8C2A06E34C4000EAE881BE3671C566B4C2B52BE284FA7073364B7E9A6DBBA8AE7EBCF6008491C66C7EE49ED426E7A3EE3DE255B0B24F88A2E738177CF7AEE4FFB5F2CE4054CAB2378B0AF8A5A2BE2FBA43E5859436A4F321F8522C7507538B74D0D3E2B1B94E92600D7116BA319D886824908B04803531914AC7A8153937FCF2085968A7B924CFBC49324BF0144BE37FF39A235A151873F9BFEB57366BF9C8A0A9DC9C2E847C7B87D644A0BCF091F68E463CBB51660A0DC7C002765F6D15C446A1D84D625BD10CC97B818066618482803EC0C73B66BEE4FA71EE72ADD45D5BB671FCE5B278F7F19D909EC6E92019CCE4418796ED5B97E3A7D9006D2C3D82287C659A526DF519C11B21DAFA787BFDD03F4A2ED832EFE8C9206B59290CC3D1EF74976E38B05D2B9AA31C18E66CA7FE0CD803EB583F4A6ADC0E90A521492EFC83F9E51966FA69684EDD67F4A111FA894241E9DF30FA8D2227D7DB2E79FACB7A2D9B94D7D5B741CD9224F96155BE988E03205D2C47541A001E2A7EEEA3BE70DEC19BCC6125DC9DC0CAA94FEB638FCB605A46A224FA3BD180F6761D4D9289DB2D2E762699583F0B864D9081611DE2B1C032CA00C7 -MD = A6351B05AFE19121B15981A3D48AFA6FD5CD7B6589A947BC0CCDF5AB -Len = 12695 -Msg = A97EC7CB5754C7F6F1565ED8F779594F7CBE913F31E3A340E6C84A632F8B3A69412E5F3851CF332843CA5C23D13625347D45BCCCC7B50EC0A84B3006DADB94B8DBA5AC3C95739C4AA2DB7D5B5324D12031E26A8B722632C8782F8FE189C00D3F14B9D1828DAE5C276E90369AF64D7C2B6377CB1C1AFA7CF8A15332F3E0D1E97E2FFB2D3697316FC297CE727EDB1A2CF0007B89E8FBED83D3BDED4D191859AF142A4C5EFB52FEF1C4C5920ED46EB57CF3D9BA01AAF7834C6009B8D385CD3F56AB0E104A5422BC9558C207701D24C00BF6DA0DBF139DF54A135F28625DB7235C56C5EAFD16F30431DA0E648C239537FDF89BD1ACB0341D1464DC59BB2A2003296F186683B6EA1F95F8A7FFBCAF1E2942A5DAF2BAF6F12F2EEBBE56C3A16607566E45E62CA0CB878C825EE917448443BF6911AC01D8A710ABA20FDEA4CA13DAA17AFBB7E53E2C94B4C50F3477648C37255B3131D9E6A2F306032EF2946A5F32E20DA530E715E4D7EB1BCFE63ACE9D9A63A215AF05958430F4D5E4367E5D2ED2DBBFCD485E226AB1533E6FCDF7DC2A13F5FD71916B3849A1532DA82472ED59F4181237C5289CFAD620C409BEE932BF3F3F940BD0CBFCF4A49BBD9A0386D9CE2BEA91DC18FD906559D0C0D6166CAC6085CCC910A0C9A4077F920630CE458BB6E6FEE876B3C82172C932EEC4B0161D6817ABED91EB072C839C84B6203DF0B83E2986C6F62D1AC1E22C380DFCC5ACB3CCB9A7C34BAA1560DAD0A87813BF60AFF430159C26312D85A98B42FF2E5D7DE17834A1F2838CD257295AF1EA81187CF9F10637A919E584E45FBA13B8F606063535444AC19C939DAA0910F8EECBF71539E9F295C7A3E7E2867ACEB7D91084795C905F793F647C85E2821E9FB44FB5A58A4E74C5AE9EA91DC926927FA6C44D5F8BCCF3AEBD8A58AAECF427254678B134418DCE4EB81305DB5B79AB805771FEF37B66E20AAFDE4ED1F787001B361D76A75ED166300FE218D6BBE1423320056CAE873D2FFAE8535435B2A97BBE085E43C2B8A50CBDE066AC60526DE7D8C7762412C18ED8E499494CB9B478DFB648CA7979955957C301D4D1C7932C60A14A9E2FF5523F7AD860B8457C35873C29FC291C373AC4C83AF5EC636D8EB8598578C2CC3AA47F5179AE2D05628C81D87F898795420461C0E3C00819492A8480E35ECAC832F71D840096D0D811B81C392AED615840527EF388CD9666D559F6E3127ED1596A8AE4EF0840E0EF2FFD1A86D2B37F62B062A6AD54E27D9A8251865D1AC88774DF81868FF57FAB27CA9A365D02528120F8C419372E2A141DD2AE984284344BE4C355F5AA7623208D02ECC258718A88D36CA6B1D9F6D842D9D1738E0B11802022CD5D0498941B28F24C94A488310B7441AA6345120C3B3DF92CF9DBA6CBD0CAC38DEA02A1B0D597B80069CA976761FC58F5D4E6246727B20306B4AF01BEC2F8DE94C903234B72A490C638810B56A9231ED331CE0A9B74A9450168315E748A83530A6E50B2378C036CFE184269A93551F9B445E2EF0645BDBB2CA6843A1F2E8DAB90CACB320014E49F8925396EEFE22FB628E62545F18F70ADC159B43F3842CAE4FAB0B42B035E3C2C3EFF2FAEF63E25627029D0E727292EFFC4A4EE0712DBD15767C654108E59D1F9E986D4F53F47378A9C4D36B41D7D847C7C07267E36813449EF2F47C9AFC1F044903097359ACA08CCF2EE81FB118A8017941979803610DD0FA9F02EF7E1DE5C139BF204CC688ED37D2C1B07A22678D3B97D4C8E341B44477E3C4F29A7819D5F5483FE241C98F09CE69FAAE171266801809E2FA4204897901B32B2979D0A924BC0C61D2D32BC6029A91B427DA43E48B0B2C14E7DC5598DDDFED7112961CF86E6374BC8D7EFF17AFB18EA58E6AF611927AB66D933B29A806511093A43EE3B3C5DB532BB99579186F504E3E383ED4F6AD7A4883B88295451C24A5BFB402A4CC16A87FB1AC1F81E7946C0CE78F7D75B9B1B3AA50718370D1B8E870C4FAF9C25D10001F221B09A67A80B1DD626ED499489187E1B549E97CD2E4D50A86D2EBC13B430B099E78C35592B93AC39C659447EED47192484927DD77F7E3CDCF4C07E9574AC2ACFBE4F854A9E952D67AD40C07F359070C47879460B039FE49F8FB49A2B0DF951F474920947CEAF6E97FFB74FA0BBDE1AA98ED15C1D644389B65CFEEB72550DA63461C1AE8B2C7243C15F3B304E09B49C87E39C2492E4408BA74020F10A13FF9F1A -MD = AC50FAC1002A94DBC0D6FEF79C66EF156C0DA145FE78137545D0580F -Len = 12758 -Msg = E565A7E2A6190A750C840440056DA10297F3B9E978E0D4FC203C1319C75276E79C3D3F678202090E0BEA8595F0D27464DD4C4889890934FCADA01C05403A95E48FD356FFB7D3CED1A7BD4CBBD318940EEAEB2335B11081AF0BAF709830CCA82C92D42412E3BF55E13E95157EB2B0CBC3DA49CA39FEC019948AE9CFADE6A3E67A390E1CD2FB9A5C4637BC50799E607D69FF9AC14B249E917A403D988411DC9CBE6CBF4A1C3604F0FBBCBF18B17E682E30527D68FEC46A009E46A4D436D64304D81D95C3222CF5458C927BF486A9BFC6E8347705137B604F3E76A9946EF8E7F5F982F1EF32962161233650B282B7A921E879FFBF81F1B72EF95DA2B0AF7C2A145B1DE9F9F17465CBA059FFCFB41E7A0037B01E09A4677D7B473EB24B8CD6DA91EA41A19A6AA870243CA61B444177AF3B098CAFF88EEDEB19880BF15FE9D1417DE0E00041F05B16F54462D31DE0A53088D376741C8FE03010A2B0CB0B748B688B89E06EBB7C0C8C504DBFDB0C37EC76EAAD72FBBE57C49D64641B345DD56785971BF9299F8D4A6657B2D9EB5365654871D86BE4A152A2605649D252203CA3D82D90C45AE9CA22901ED8687EC16591C5CA21F313C71F02A150C2B734158581E1F29DAC2D6764C02A1D57A6157EEFB73068E6E2D0FCEA935E2A2FCA9A3EC770573C7D671EBE73AC326FC8A563D8CC53D099FE74ED85F9A5B8B7C4341D152A8B5442876D773B4DD5AA39564468C8F9846F63083DF572C3F26E4FDAF73A90DC51CF1545E559C3ABA2F714D49593A78EE38C1AD983D63ECC2609755EF5E0FD16E5E8763999D4E0732BF129EA493A859E74937DCF4EDDE73E1B24680ED4C015424A411063DE4C73204DF3737FA0B5E09A9F19783EBE4F00EAC23E6E4A8190F60A2D6217FE4D8C90D2BF4C9C54CFFC392A2AF12AC9685B19249C00B85385A3E1744504A97D95F090924A4EB0CA63F910384C47B1E44115125706026E4B4B9D323EAECAE10CB8BBF5C133B22A09B7D2DC7BCD66B9EA6AAADD116CC8EDD99A700E240497C7B1D15B7C9B0B3DC3283580691395A59CC95D9FBB84CB2EDD1D7AE511B1175D96D93A602CAF809DD6FECDE474807E53AD75429A83BA7FF131D461E097738990A5C57664F9A5280DF4AA59E0CB05B263B5444089E750DA20ED4F4A647A3C15812C53F4EBE2FC8A0D7ECE116676A5566A2B2C1023D5F079D74BE0B222A8694D88D144FEE7C2601A653B00FAD43AD3BC39E46FCC0FC6642BB7FC6A3F673C098D6B4C27D70789317DC2B54BC283BB461C23EF8615B59EB58BE5DC0833D568FE923B1FDA4A005B54EAC9B483E2DFDBB1DBDEE93E85488F9AAA4BF918B783BA9BFE9F8D3C67F89AFBC7D0826E6949BE0282EC1D15C99C67770043E06A7F82C009494A6D03AE872E3AB4FB9BCE70E8D29D0DC7E525853B9719618ECA0FF89B3AE5CEA2139DC4DF589164DA544900466B3F087E440C0064167783604B6662F2425F3AD878F10B207AB35F706F01405284C68B698990C2E9AA4872F716B975D0CEDF764208637F09EF908FD4FF0D31E05841D07D73CCD5AE28141240A4C1C80FF35FD582B808F49AB2868832E563E87AE29AD43F238FEF6C7679B6DBAB2BD9E3C34C23880CE456CB111C3E6B79989DB4ADCF097CA18F1B459510B88502A272BE16FDD07AB15A36753588FF8EC80547D47E2DCBD4FA3DCE3F3B78F0BDEF8DD147CC2CF30E9DB2E5C12FA6E43AF190A89AC2173406BDC354891DF5F02E9C1A33D512D6ED43ED46ECA7F7733059EBF172EE95143F3268F68EAAFF33756D2202DB2E3543874E11F697C97906540184C79CD3C1CCCAE24A080DDE5A85BAB12034C022E26178F646E00E24369A723DB734E91BEFB17D04A973E3E164415EA8B55D72289BA69A4D2604223AE212C0D1A2A38A4B150CD7228DC41D319CA4B90E83295E3E85C3507384F326AE73D80E44EF32F778012313938CB780D5D35D7E7C54B35C0FC7CE66B9F28E8D72D4011862BFE71B43A3E42AD563E4C12211D09274CC365A2D6393FC92A115380BD632143A45B3B4A61A3020354B5CCD24A57A60F093FF0EDC271541E9ACFD1D2FDF3A1FE5D96510AEB1847A25EED4039C98D6C8CBFFFC7E9768A753F505D72B4B2FED886F1EAE012FDB4D4B08B0131172F83738E8BD3011D2D953E0E1D5DB806BFAE4EEE7FF649DFB140003F6AA2A5A2B2271EDF307708FE081BFF1B3AFAE1CC9A81F00D2558C5F28652F7E92CBCE3CC58FF2FE17A686FBDF30 -MD = 1D1116DD5D4F99C40DDC9229348F9BB3415730F3480A4923822365C8 -Len = 12821 -Msg = 449064FB3712FCE3F9275E50439C62A377C88CD270CB3BD3BEB0391B59841130F00769F25360AF6607257F0E1738F90A1E988A2C72F6B051ADDD1211449BC1D4D5FDD4813372A33AA5C323DCAAB55285BD99DABDC34B259B2394C16963AAEA1E959A7C0B385AE0EBBCF939553F2894DB590F2D4B9823C6629D5BCB4495443B4BE0F69B9FF6A841DCB105DCD2A95170BAD929DE8D98F5225D488515CDFE17283F51B804619D974AE01A93AAC70F8DA0C695B491072674AC8600B446E86FB4F96EB4D77A84789623A2727A2763F16C367D6133FE1C49F637238617745AF4986F82A10FE793F5816B15CF34DB7C99DBA2494D3A4086764F7F6902F4B0E7D9D4EF736BB02CF19422E8029A3C2188A38113FDFC09AC5654B06842129860BF5A99BC376CF8A1B860258AE588CBF220B73B9EDE1D2E2C3F659DA583FEDBFF9F3B29B3B0C0F7A1939D7F5B6B9C6D9434428D89ACD93EF3100810F203E009BEE61EBA50370D3877D2B046180707FDB1726B3DD170374AB504303022194DED68DABB6BF65C2C3D4DD6E3A92908AB51E68CB0324335DF2BF3AC2463BD7194B540AF7EC6B7AE79A0DAEDA722A20FB053F6DF3CBFBA8482F75DD2A650CBE3D98F746B48C5D803051EAECE2840DE8C0BDAB61A4A79647B3D713F3A5974F3465B78A7F7592BB107241AC734D424EAF1BEFF7DCC52DCE10817D0E8D8E93AEB38D3867632D78C3D16BB1BD7AEC5F8B50E841BB027FA7CFD7314976E66A0C7B3896C9CA5DD988B344D6C2A784A6882C4558001B9F1999D27C2F1A5613D84C83958C356577CF4A4AC33F2BA6BDE415061F7085605E2D03EBF3B1CD23298746A60A4BA3876BBE6B94B2CCB1AFFB347C8CB8DB8B8DDEE6D1D0BE250DA10A6FDB5D758FD3FD3B341DC1DABC9AD5A8A176326215F277E59E8D07B7DD2A8D967593F041C0532D8421BB356B63239BA511F33217E28F70AE0AD9D58A2B116950B4E150B7B0D0996026E494A668307DB7133B224F9119396C33DA9C9815BED52BC4B7FBB1FDEB44EDF6ACBB035A874C45345482A171C6C6C25F4D42A33940F616A53D18FC4F1A4098425B6DB4C15715A8928FCD24DA8AE2B2643D3B248104E0DAAB97E9D45FD044F4F6C57ECEA3BDD29524F80C89733A49D7625178137D6B6FD32ECA159A34314FFC08307DE1499F0B5F9FA961BE8C3328E0953B3A40888571754EC096C81F6DB5652CA93BD596DA340C0F594D6006F9FC8668404BC1561583B65F5C1334152F2CCF605C65DA7A5FA3CA863123EBA80C74025609494B4A2E2DFC20DB9C59C6A46F7AFFCB049DD108FECD25F38031007ED39B8435B6676BE9D5699866A4FB0F6865CDE3CB18511ED9F088DAFF4712CDF71F8D409896415416EEE88A3C5B4143890CC961C647DA5663842F179987BF2A00BC72924A2C4914F716ABA9E7E15406275DB3C4E81A0FEC46477D867CC3ECCE923C5E94F91B8BF17DFE2C2DF237C692BD6943F342BABD272410580AC5EDA140E53897ED5D76B7162BFB875682E29645CCB709F461AFF224B429E868A90D85C3BBBCCC627B57A13C3C359AD84555EAF39D8278B89C4077DF4C86E668C3C4FD98B1EB662C957C0DFCBBBEAB430A5190582C74DA3D4B885EBF5C7ADB9E1F852BA8CEAC16892B458894DF28AC9F78A6BE9E3C7DB14B683AA85098B645E8ABF02D5FF1223864BA403511FBD0F2300C9F75E5C4C27CD1807BF59ACAE85B7A48ED79FEB2F0D27C4BA1E2CFFC2FAA61D63BC71B5EEC571E6686C9DCA02C254016BA16596CEBB607363C4396AEAB7BECF7E941C7EA6B616AE3D49DA661B76E7976CA4A818BBA85A20C2929D96BFF5821582394F270BF7738B7970FE4C6FF7A6848DE6E22F598987FD75C4D731217222AF3EF079FADA5876F7383D219D0D250B375E72B6E14945904FD20932FD39E92C66D3E586727F3DDEA1658D5F51C171BC16CB5E149EEEE5E1886AA6328F23379BA00072E6D52158CBF0871A3928C3A48EE92F6C6FCCFA3339A6C85040FE67EBB4D90967775AD8D01AD4F39B546F53867982212E8969136C353C02A76241551709DB41C321922ED3C972B02E489EC4D97C4440402859F4D3EF136DEE3038EDC38A679CFAF04034BA6548CEB754635C2F4EEBEF6A42622DD9BFA830FCA0BAA930A8191312053218E0690D90B0F3120900997D536D15108188486D5799CA72D0E1672B175B0E1327FDAB84AA9021DFDF88BB7388170CA3B820CD2538FA81BCE89AB20975DACFEE17080450C4F30877E340 -MD = 6C2D7B4DF2E0DAB03E549A33D0B497FAEBB0B35F75C0F86C6B2AEC0C -Len = 12884 -Msg = AD1D4EB5D69CA251A982AB5BF9C677AA76B7EBCE43B8083A09949637805DF2C6D1B53A5BDB092CFBEB4B4959DC3A0AFF35C5628AE0BE909A5168B019672ADCA88A092609F1B7B3C05971087F36063B4BC015A8978E252B70FD6E68C1E2AF6F745603428C4690B7D2B65C9B88B9E1484930C477848BE9AEBA99FC5D301EB19B7A5074AFFA223A71AC4F9F3144692C2AA0A99A5EDE49ED844DD071139519E2B405EDB0942DF893C22351FE8562C035630871FDB0242AD8CBAEAA99A54A9871A389A6FB81FD67E636B9D851A0A90BE24A49F5870FF994B8C90345F3ADE38AEE6B9F381C9A43E1D268D51BDE8F36826767882E19E7FE02F1F2473167ECC2143C7F27714342EBCD1D425E346ED385DB6D1EFBBF9D050C84D3DC9EDFF3A16637A8CF2D4E826A7CFD55F55B75B964EBE0787C86407F798DB5C077F32CA1A0CA6E0232C9E66E4F018C0FC28E1BC4DD2D75AA756D1848B2D6BDBA223A84044E7CF810E1BE26036413BDD023729CEF1A15D024C1E2EFFD1DDF8D22C8F4B1D14749AE83F8FF26B51626A2EBD7ED7CE7FBE3C1307F4D5F6E277090AE722546712DB099A6CBD1FAF55F4815EC264537EA40BD803D077B6249BCB1E2C9F1B99386D72EECBD9D1FB3DD6B32F066BFAD294DE27C14B3693BE5DD65B9D3A07E9C0AA55BCB2634FAEF5AA5F27B953C9A001B39F5FD9926090386155C96951DD6B2BC96933DCD0136886A516E76170DA72ED0FC923012E030746C7D3028B3592D0BB84D892C676D85BF97D088D792CF1B4F0D78D84D5B03384FD4C536CFBE5F8CC68F1422D6E34F035B5529EBD4E3DF9B0411E2B77B3B66EE14B0E05EA48B510A404D20E292D13443058AC3EABCB395F36EBB7954EE6AB816608BB5469117343471AFDF38963F7B32F5CD9CE3E4D0B19736BF0A2108AB5198F74C49D2189EEB6A354D216DD3B933F40DCAF99C4B5A0AC9913D887C981D1F859BB5AF3C8B6B0B6E746323615BCBD0C125F27AA2E7B6F11A43B6598D44B60E0A7EDE1B93841AC42CEDE21CF6234FC29DA1145A1E015E8F3FBBE1945C2F1B0FBA911A92A7406E9C9BEB054019F68B148B779E52CC726B728BBC28121909385F304C817DB10D779576D0BE62885C581081CE4320A98F5F7A0CA29CE59BB0AB881A2C5CEE05DCB6909D94F0088627F5AF657C8C9D3432A402257A1CF8193FD6473C326E416A19AE9E7CE03DCFB34C6B0933CB7312A052EB60956725858ECED578A803E741ECD41054AD6D644F165ED895D701E8DF0516AFA31930E71C1FEE7866DA9CF3BA0768B394D6F3E010BF7F4AAF9132C0AA6D2530009EAFD5CFC2370AD08BA685B1334696F528898633B427BF09509B8CD87CD8340E00D0761FBBF159AD754ABA756D6962196C34787BB3C0B866B01F9BBCCA5D0BA3CA444893C7C7BD36267BCFBA828193879A7932046659A0621BCD6614B908B6F335C177A3CA36FD6EEE7FC453A0A652C7487B71E4753357637CB300C122A28053E06990238F172794B0207E70B2AF2820B0A4DED97F2DAB0F218787832F282F8237661DC199982AA00D1B9881B9F51EE3D6333D44DBD4367FA78D2FB7DC4F00EFBCDC650EF4D1989B2B65D4305A6AA4173083600592C846833FBFF9065B0B0489871765DC10692D55790B9008E50E10BC11D1AF2D1AE5C1C7E3681FADC81AFDFE8355B9CE2A2843A5381EAD7B466D6C7169F7611C3565AA43217737CB4927313B7164B9DBE0D2FA159D6E4BF9435312AF73137D229B11F84C73E8364A0185311E041A614BB23B7ABE3E3BACC06F355E0EF679FE34B8340F7EF4CDD383DB8997FD28458246FE85CBDA58046756BDAAEBC60C24CA7256208E516F2D7857D2A802931726E446B40F24AFA019A53AA460525370BB87BEB79B6F182A2DC69998B0ABDA2746C782874BA2491FAD9852057BD862F3EDCE01480D902F9006AAC28EBEB998D092C44F572EEF2DD8D527B08E55314A2EEBC59D2050A05D4FB6570160DA95EED12729AA5FD6C45F880D24A421A930C4A03AA77DDD2276726E5A47A989785EB3B9FDF3AFD44A9CEE202F085C47845A18D95998591739750D548FE8B6285D59C7DE1CD45293E7D008456D59F161A91EE022B57C1B16EC5CBBD873F13CF4EEA75AEADF3C3C53EB565BB4AEB5091BA32D89399EC99AD341223D9A5406F564ECC79548B3F5F6500143F21FDD3B339FD07222B46206C6B7926810E1B998143CEDAD10FA44104F6A6839191655C3775B09273536BEC09A9EE16CC68895B3A6804D16D2A49BC67F30 -MD = 463CA19706FD63D9CDBC5412F1B7CFC7C444AE84F5EA10FCCDF1C3CA -Len = 12947 -Msg = 2925C878AD9BDE562BC62F4293639611301498A0974575C0A4CBE49F5CC1C5CE599EAC005DCAA66C9532C0B09B4D9EEF01D58B7CC27132594920E4BFC96E8580082BAEC7E5C0A826563E743B48746E6580D9DB1A1896D5A6FA6F00E582C0156306C6B6C2C69144FDFAB25240F66B6993258762AC8D9847B841D3D7C2C77E267877F09B15569DBED50EC7D8417552A70148302C977238E22565125E0E054A632A6F17A099D5A08C3F1DD2957FFA659CE30A56AD1A6A2B1B555B9CB7C6DC359DAACB3C55295FA4E1E913BA7389B58B87B3CE1250CFE16F770DE88DEAD695E90DD2FFC45CBF01AE2EA05776E4B40C8A0D57BD1FFBEAB4485EAC2C46990CD1AD6ECB24255A3C0D5A60F932D2F996E523735650FF2ACED054E044857F5CAC6BB65957F9AC787191FD9137D8CE3828027DC684EC4FB3709E58B776895BAE4606AE1657A5ACE5EAF2E6E5273E65EC647EDC63AD74A1F65DC40DC4DF7AEBBF6940823BCFC61A86D89952C81C539ADE3D8BCFDD9019968807D35FFBCE33F35332886CE582AAA55C97BB288ECBD67A608A2D510AC3727B8D966AFCB6E4C8601DA3E4B39B2BFB1ECF0C88B530BEA4E9D3885C4A8F0D92BFBFFB8E61F40A18DFBD1230648D8242422540F657572B6F27832917AFB8A56C97EA8FC383084D9FF1231CEDF86159DF82E3F92AEB502B2588E2D5A87EE295C373CBA300662C2BFE2C343720514D33CD0BBCEEF4E9152037B9B1BB333C4ED18542A6A5FE7D8C859EECE8AEE34C99A47F6B874896E61904D0F069CB5FA7E1C31377371B332B97D3B92E5909DE66A58D0454A3DEEE5DAEDBBC7BCB5F0CF29933F36B4029DDBB2BCBF2D10497A3A6D01A8A4AD25DB6DA07E2B573B5D918ECAB4BE244FF82942E70519CB437AEAFCFB68C3603369FD344614E2A7F40428BC8D6A81003F26039CB39B1C8F3579BD7B4E575070DE838A578079878F24EA94BEE39875E02DCE67F939F0103303F7DBAC82D2B474B914BD087ACF3B72129B7BD43A539AB12794A19AF56EB337448A60BE633BB6FC4E554CE37D80949ADDBA4EFF2C5B908C7B0F3424131EF14EA926F19943C62F826CF67AD78B4D433255D22AC17E8CE3B6BD467F3F2EC569FDD8F124E676E89921D1F14D347145DAE56CCA6E90C30E1FF7953CA4A598859527CBD3D1728D5F52685E945387113F7688E30CED138DB1F544BD64EBE0238F75DFF26E945DAB7E14A4F362DC21BFC509BC637E16168266540B36086C861F1AF4021FCD1A61F182E8428FDFDE98DA896DDD1F4F839E1BFF66D56941142B936688954CF97062C4416A581F26C0BD8172087FD07D3FB4079F281FED2C57498022CFADE46FD0E9F254A7A2394AFAA6F79EABE180D3453F4DEE3650BBA055ECF74FF9050A1F4A1682B521D093FD2D9D3542942D5EC7DFE4F1A2A3FC25293C8F84D034AC05E3B0138C8BCEEECF5645DD237ACBBBD8FD5DC5A17B93766CF17A604243887D02C41B1A8AAEC311AEA7F8CE777C6E372F4CF4AEDF11B9055CBE96D4A382CD27196DB80C1B18B281C787D17A504270E7B0636139BC712098292A8CF4FD6768FBB020CB5BE9FA83450200B5C82AC28FE65736B9E4DE6A8E7CA4C11C9E29520813DF8ABF9D5B8EE35A747F14547F2CDBF5CE7A7EEB37CCC7EE34F2A0DAC8B47496DA03F2C8CFF785AE51ACC19428DD5E00AE2296AF7C63950A815C188FC10A00622CD596CE745621D24962C5F406ADE3BF5953A57018DBDC50B40CB3EE08636177E3536B142535924B89AFE9CDE9106784FD13526AC83F7AB9109F24A4ADEB6D9C39C485F8510F393BF5908671F28B2A00A6C391AD7E20C1038A1FA822B41835AE7928A79045839EE332E70B950B82F478DF04FC8E7F5E6C8FF616D708BE6A09940A1178AB73E805FBB9CD2236B065C44A6F07BF40384641BE49BAE92353CC41D57458CECB1B8437ADB64F4D4D47CEDD42BF13A57E5D4CA99832919FD6CA67455CBFDEFBB63F8F11023D2E43ABD5187198FDF3A8143FE04837CA7CEF5639385F476ABC4B3C533E02A8934D5CFDA38967DF368A8D020185FD0C258188D88E1398738A1912DF8BA8F4D37A325374E0279D60D495BFBFC020AD951C7BA2DAB579E47F52C0FB18CED91607065965B09562E8DC1CFD0C660DE40CC88CAE3B2FAAAC1D7CDA84043048C430D47432A21FE0E683D60448E31013140BA0BE639F755F3AFFC418E265DC4B472F6E4B908FC13C90B6EDC0621B3AE9F8950C55494BC4AF38A4D46AC67857267D6D53EAF30424904EC472DC9EB2427E4FD29D200 -MD = 6978AB4F98195ADFFB40A5D4B261C2973CE5392DF04EFD2D633BBA7D -Len = 13010 -Msg = 6C0238D3835C665B380475EA4F6AF3E9714F68C5036962398219D7980A4715FF863899C56B87FF113A303B83BE1BE6B64ED1486BA938C44CBE971C51C145F2F5492724EE20DB6AB1E6247FE492192A3E3195EEF66E70811D2146E38D969722A63568E6550A007E7A9D538DB268E8EB79A6CDAB900DF5122C2BDD59B300AE488F7EE6D7C6E02086833DE1F772AE9DAC887CA4AA155477A8352808BAF9726F6C097D932D4FAE9F46FC74D977716ACFB5D7AC7965622E3792596A83686A9DDC629A970B29C2BF46451FE940AFFC40C6A8C0BDBB69E46FF29E01B7970039E1FC89988677CC02F2B235E0FEFE3FFA39B909F5F8F998DDF3CBC890E1D388BCC4B3E055E7163BD9400556AE1F6BB64477BE19FB722BC320E4BC0C101B949E89B2D1A16728C0CE3157F4D70F1DBA02573785769BAB4AE462C319E3D0342F07C5F8CF200F656A02DBA828121C64C9BD309B73B96A48F9F3E6519B5B29415261D37D326A8E3DE982094E61CEA8BB2090F21549B65AD92424B4547F4508CE7E487B7185DB2927E7F96725E9D2357714BEB5EE6C94FC32733C8AC68830665262909377ABF6CFF65628664D980E4022B87BE68E4FBB5FF6D25BA1891702D542E2A2FBA52D7BEE3E0A90A45535A491E15CEC564450FE2A4FEF30F5A686D4B73719F9F35834D2C3E224DA366F10080A54290041BD56DEE5C2676D95EAC58BB45E0285B1F63580EBEB0CF118400141D075B86C17C149C29FB71B8B8E2E28171EB708B7A55990B695EFA7F3780E3DFAB3613662FE3258577C81BCBC50D609658A8D9FB14E5A86F1747F46B932FD8569845748884B5CB0E66EB41C0F1722C5B20A4EAF72DBCCCF3853E54157EF79AAD1D65E0226F98F7B6CFB7863A661270519794F3B822AC9A16F012BD2D885CFC1D16AD88A09200DEF62B34BA8F97639594CC007847C2558A22696CBB01FBB246C6860E5C31F2F3D097FB1B495E0343ECC37CD8720D595FAA7E50897C5F8ABD16D45A39FD875B20C7050AEDD4273434BE5537ADB1B5E11830A7EBC9FBFDBB7CA49925B72EFC5ADF42252BF8AE13854D0502A9B65C9F488EA2B41A26B137544010F38BAA7722290777DFD01C7EFF13A1EBF0F417CBF7FC43714577501231A9FCEC8B6DE04789D0C311E3DEB3C2FD1672F1FB00FE5F4EF9E74DB1B1F46D9D21BBA645A3ACF3B0F84762FF9229F316407E2B26F1D554C296FBE1CF568C281AA7B5F4D945B9F19D3C0A1511A5E8D829C8227CEFF4F227A79B7F05176F3BB93756117F9BB44C1DED2F2D57AE1565E7B97F0D58E7CD5F35217E296725A23EEA62D101C72FC5B4453B735D99A09AFD249882B98CC78B8D33A87010339B8118C150483518ACB1FE379F67DD52F46FE436F07EFCBC587BE1AC675CB762090E6B88BC2CFEB92AB05265D2567E1C52A9269CBEE49C5D1B73FEFB05BBC093E1A35B46E0DB913ABB86885532BC00692DAF55651A713C871B021B126BE20B6632BAB2DDFEC609776979F44C69A7DD4643A3BADDB9930CED4FA362388FEB65E1CE02C3F51796B04253574891E56AF13BAA268AB9F46C60ED7B67C13353209E15BE3BD43BEE5F20D5BE0ED51AB6F7A209A2E131028A948C708FF0F4A6B65B7F0ABA5B93CE10ED8FD6D64ED6817529C77F65512D20E2E706C0A81E5CA299A8FE64B5545FF6E003F015178A38FA159A11DCBFA08AA371F27E3E4043B1B1A1E140B5B036DD920422083BC53E84AE350B8D9BF7F4C6D1C4AB2452548CCF70E4A55F03CED2F1F53AF86948DBD156F3F2B57C7BCDB2B202A7A8E2B934344232412C8EA6C3AD648D77FC414723AC7E75068855A6AA2CEA4CBA7C10795289796F64F7402EA820FE62E3B3333966B7D15E2CEF4C8A3366FE1A07B7E2E26BAC63878E74E6D4F4B15919F8C72C715318520D6607F65751CA4F0FA820357D645994620F27BAA40E7E91A3FD1499C996F944065578545B8776915DC5ABBCF76DBD217FEF7BA9260A8D570586E24D4C58F8E4C0CEDBAA881E993D17459FBE6A3C84BAA99D7EB1FEF0AA5B330412079E14403EBACE6D68FED3296A58620D4CDB8F0A044971A4770E8E2EC5E98F5CBEB37724742DAB99222D251A10B3760F7BF9643D95184E3C70D93163CB24FF23FE796A848F566B7A9D6CFDFFA101D44684D0E6AA637ECC69FBF83DD32B073E72354D96BC592117FF7D6A3B6570DFBB5CAB74767E11133831E7D5856E2BA189AB0A6FFC5E17D60FC03B472F11A1C8615508F7DAE68E15C7AE71800EDC2CA4168526B892A95A8CA78CDB814771163724A7640BA7F278AC140 -MD = 5B6C028B22889FD19155081F54C3B312826451627A940FA0A2002071 -Len = 13073 -Msg = ED87F576E4C2C0621BF6CF45E5BA0B03DDABD1842B7207A7032699AF8E25323E2EC6A0142A90FDD4D65A4E02E28E0DDB3B225CB0AD24DD3F704B015F5992B4E28DF05B70D7EE1D243D465CDF4BE03CA03B1544105FA449FCB1BC3CE359709E3C102E813B1F2E3B264A0836ACE1C1A762BC9A30FEF2580771F4D8423C4141C63E5583EBF3926FE7DA54F541E6DA79E28891ADC99911E7CBE1DF66497D24197A7610F6981542470BB6007143661F7009B966D6AB79EB1BE8937512100B610C154E786F917C95254A17A28A6ABCCA23B6576C36CFEC70AB7EE42763D0F94498B081ED7BE8B6BAB075B99E50B08076BB19DE43242183FDDDB157F6545D989BBB77884DF51D8A636B514DBC1C6C9688682BFFFBAB76CD88FCB31E5A88273A8E0313C263D3EDBC3F9B7511B0BEEB40833C49D5F9B59FF44D458CC4340D52E162FF389D7D7B843F5BEB8D8FD7E12B6A0807C458E88531E6D868A5CFFE5583DD9561E664E46168749875061112E4512F5F435C3F4865F1C3167A590865AA36644F97924356CE4E8245758C22463DC3D6FE97A3F22CB62BD1105C1B5FD7F9BB09963A285F04E6E430B7D3189F16C643A27DF7933ADAB0A844ADA3C6FC32278DD0A53616129023317EDB45502270FE8AE3FA58CB73EEE9CC39C2B5DE2B769808330AD62B3EB92BB11BA18E58B9A983628189DEC104BEA0FBD25054D087574C2045A86EE10BEA7D316E0018F7AA96BE9F96C8E135CC918A3E33835EC4F9210CA5FE199ECC8A60E1D736827A6B0D7D8D42C7ADEFFC99AF811193775907E1B7D9AEDBCDB4DD8025FDC3B57396278713213E5AB059A2A5A658D3902307E648E9C056D27E93D2956FE044C11FD20731AC031DF8ABCEA79DB10C6CD13B57142C0D2C089E594CD74B44F2B7054B8B962948A12FC248BF1256A62FF3783A2A6FAAFCA84C74206C3A8D39C2313F643C1BC79C7DF327FE9AB076AF29E4268119B84BAD5602F0393FFA2AC0A1C8E7EB26D46C22FE10C58F2A0875ED9D2E8B80CA13F8EE80E83751D9974C089F34FBFE7C46BD5A247BF02831FF2552ADB8623CDF999B7E1745A3C5E709C84F5097E2B97CFC73D23447BC51FE0BD8CA7BB5A95AF32235BD7D92F001F4F1B7F03C91C7473E53930076B463096D0EB2D33433992FEE886CBA50C42D6C774AC1D615C93C9AB2FA1B08F62DF157128C592D63AECF16EA4083D9FF2068B9D07EE0C4666BB92F023430A66B4B74996CCEEB1FB0ED76350BA961F6ED2037E414F8239CC0FC8DB32D61F4AB4E47AEB20573B2F68A397937173F69433973BA58103A27E6B5F52B99FA0094CDE476AD567E3CABF47347F8AC05838E11D603187BF285A2EA5DE14C62940811DDA1869A2B85B82A845A4332B5C4074191C45972C0F254797A247A429BA279F530A863A34027D8386EE00BE4970704018552ECC6CD7C934B76ED52C29D93D97D0AE3EBD65AD12F3A7694F92CBB67A31889E5BB864D226782F5E0063F92B9FFB3E4FC90431DA5DB4EC63197A3EE3B9DEB385293AAAF791786F2EF42AC15754C142DEB19DC72DE47601D643CA21A5D07506B831F95CE0B14BA5074F124026788A509C80BB943CCC657CA3858D88B7F32BE1B23687E8631EFDFB3CC38F075C48DEFDFB8F8A27E48A2753CDC35F389AD155922466B2B46377531B4F6E9E0EAB1466C47D1B7B0773D9A1D94AD810925BA35BF7873E684B377A7265911DAEDB6245E7DD688409AD66424F72E29EA2E3CC065C55ACD0C039DFC6844FA7644889ECC45D6A98FA535EF5A783E7D492B09375C8335DCBACD951C89FE119367FF1062E47390BFC018986546B4AA2811269F1BA92CACAF5AA8AAC5564783AF9E6183D2D5647262C4B8CF63FD7BAE710818812C973E548F739C72EC219CDA1B12A384B72ADFDEC578CE704BC183D0591D145AAB696AEE965E845FB24351BE39603063FAB8690F0F30B1CF45C8203F54F269D675947F63619EE094044EAC82EC232A911B06B73E40819DA77EEE848BCAE1905119AF7856D5C85E65700F78638672A69957153090CB5667F9F53AFF3A58AB94022E9CD6E078DF4B7D8D911C913AF22BD2ADE11DEA649265A53590C094B413054D59A83D94A4B2CC012E0F79719A0A647A242C91842BDECA160D817DEB302EC3EA34AA6D34B49FD2FCE200393B3FBF264B0FC2C55E7329BC4A095059475AA745556972321ED869C65EDEAD21D488C365DF5DF8D4961CFCB0407E4F41E82651FCEEC48758D33AE55AA5931012E20E33CD6173952E1E8D39B063A1E23EC1A9DE3EB14B461A0C18BEDE5B3D658155EC0300 -MD = 53497F4B641C50118B210CA39924806B86C7D0C97CAF38384E9B7C05 -Len = 13136 -Msg = 8F1C1E85393B9C2A2B593363DCEB818B102D0F57D4E1D31BD33C034DFB1F17E2A9DB960D70D2FA0AAEBB7B56C809EA067E93C449F4026A258AC04B6CE809A734D15B7FE13E4FAF8F2614DB9C3A42435FBF158E3E6CB30AA727272A4E323DF21720AD65D72B18A4A6BAFF9DDE47CABB343DB282175D85FF51B34A197752138AF3A017D19939DF728A09C8F28CDEF4CE5FF540A6C9968F4635D8D3281F1A5126FC3A7ED368DFFD41B5AADFAAFCE5FC069056854A78054917D39A34945FB5E608FEBAC88F0A5360A524D9C887241D2953BD36E46DB75A458F4DF4940ED71110334407DD0008A6DCAE7D13FA5CBFCEFD6667BAC657DCBE1DFBAB483DAEC686AB870EB60225689633F71F0D3C4C870BFE6090298B372B73D5ACA2225AD724200CE2400A77D4788EE6D4B560332A020DA035DA3D520AA9CC52229329A81847ACF680B3AFEB2C1BC84B06800AF381CDB9AA0A687C50D03029A0A6B5641A8D3A8E40FD9318D3C5ADD51A4ABE661BC3C5C47D38507A8AA7D6275DF3082633637E5700787714FC977698EDD2218FFD47A81D428B0FD61BE651478DF0010DDDF9363E93D8B37B3D8E1B122B76E15985D9F4ECCF55936D918F0CBE39734A1C41B33B3EFD34D845DE5526C183D918786C8ED3FAF1DEB92E85CD6FC30421D209D6CCA47E9DB5341251E253E932C8F08628D2115E565C2D581F8C8955D71936DD505E8558DEA1409E84EA31BA5355D7E2D011F7DF83ACB9CE0C6DEFA51B16185A66D3D6D1D1D7142168D9B8A0832FD2ECADAD64CABEE8C79328B9513328FD4C7006222685AF6C39AB5F081EDD49154B5A25375EEBA3F663F7799AEDC40FD74748BE956EC66F77EC97457D1C08C4A03BA324365499D8D0AFE4A45E7563BC0E4E33AF704E7CBD8F85CE14FE1F84E1BBB871D361D46E0EB0B044D4AF33B8672B68483E7187F1F89BDE3DA29C405029DD3DA3B2EB8C248E3235CD8D2EC17271BA5563A09F5DAAA5E9D118B1E2AA61D232F4EF928DE1A10C786CE3270B889B6D859F35EE00DA10FBBCDE01A9CD472717E1BB35DAAC57531D44C0B62BF86063BF355E0C08E3BAF6499FA0BA8EA96FC338507B675D1A31008F97987B2CC366E715F43446F9DE4DC8C0AA7D81BB3B2E7BA7236D317B320C934AD80A7B17F0F591FD9DBBDB1800BC377B6B04DFF1D268F3F6191D3A37015624A8B4EFDDC1F6882D6679FB0FD92BFC9526272CD6A2CF768E6DBF3FD1732F6B46CD4CDE5D07B7AAB467FB8716E41CA9B8EA9139D09701736B038D25013666A8DBE63E0B60F93F6E77BD27055984730A6CC5791C6B5585A1A51F787EAA42B3DB7CE6159471DC5454B7313ABA20F2DF104BF98862340FE0A7043A555FFD07DD1112F9C1627D541A896BC66E78A01AF4AC308003CF970A5C11D2880E395BD92D455960446A67CCDCEE71CB6E76F9887CEBDD1D5A60131D2BAE7531E14F3E04A4EAF5BD366D4E1710293189131D2B9D8F28B8919B27F54A01FB804C2D1A66B49366C59465EDE6D6281BA5656E0BC14578ED3AE2189B1DC73DB53A217F534E27543004AF45451E6A8FB964B3FA2C8AF0144A3B22CA3B0D5F382417139DD8B1E62469ACEB1781ACB4986D9725BDCB8BD821A2C4490A6E75FA4E0540533C39A9DCC8697C169D535EC71BF1DB04A6446CCC07CF34EA440B4D45CD8D664A8A35AAE7A16FF8AC4D2360D400EA19E9F000E60B92229C51BEF3090FFE9C5461FE79D395EECF4C11AA546CA00CDA99B5CD5CE4F41E0F00BE6C2AE3C4EEC7DF60D7E760CD3076ECF5FA61DAC163DFE102E3917F692B36CC1BCEE79FF8FDCF8E18AC90D4AB0069CADC2EE6E4A92E52970E63152E77FB4A047D20E33526A4DEF63AB812A17F09065E60AABB7A2B898CFA10A35B7B7CA9FAB1583F357894CCD8AAAB08C6D9F6FDF1B8EEE4D938068D35B3EB0B1AEAC3D676CA5034448C6B07DF0C9E105890912693A84C981C636E7FC8D31B19FC2DEB423F13E422594BF34F74DB5AB0806F9F2E7C0F224F37E6C43CB192593C851A7CC1902741B55B86365BEBBBF1188005105F492D43E0A9A07C7AF5C605A3C0569BB4052697775A9905C7A0233BCB9699E6BB0982EA7DC252404451CE6DFD1A47C298C5ABFFA15041CA28157FCB4F484772767C025D0C4A8E89A1F59517D72693A45D13998816698EC21C640EB8E9F75D401B8118AA3A79F65E2592B50611113CF405002D6162540A0BA003D409C1D58E81D2F4A7175747EAEC68CB60A854580B7E9930524CDA26E9B74C488F98BA2BB08B06114B8D1F24B51F5B7ABF7E456178ADA8C77D9CA1A932F85DF4DB00CA44C483 -MD = D9AD06792161E74B191170AA2365A0443E67EA9DFFEAF1153ABABFE5 -Len = 13199 -Msg = 8EC6146EF1BA63E216A6D410BC79330839DFEFEF1782AB5619510AC2D272A44D7BDA8B03691AED202C92FCE288C0F8D6406316BDE041341C8620CE6B36670554CFB21D83CA97665ED0602D2763AE6277C4F21E5227EFEDE15C33ED0FAA648A1079C0D5E0446455FC88673A7CE513D93F6A2F9799AC4925B58362EAC7EE12D36B6ADCE3DB5580202EAE71534162F671282B7F3F53FF3C065E50CB83DFEA3ABF49F6B151DE613986C76B893359C4A605B66F16DBD3A620A67C447CB2A5929489A71156E21712D35E4EE9DBF16FE810C9D1B0598FF7F9ECFCB5CF1B895C3F97C54B8D7ABA0125F9FB62A10E30D17EBF315312609AE35F4FFA6A001AAFDAD73C1AD49D21CC24D7C83B82264728C74BC998A01B0BD954F155D03D1C5FA730C287EB48627DA8BEE99810E5FB2B7A1B64F0CC9802B0699B542F7A59660710B0EAEB641C8B2375EE57BADE3454DF84ADD90E1C331F787D8234C3122B2FEF99B7F7BE35816B2DAD6D147FDAC4195482F88EEAF1177CCCF81BC09EF8761D33841FD0CCDB41381F84507DCE1D21E4E2C0CBDB2D1584497610BC42C9E4399110A955031420580AF928EDC9733E1D9E46CA69E562E48F5FBA3422F567A388F5F7D4321EA4D3F74F9C674CF4AD7626298A159BCAE384011C5753419362D6F25B6397353C0A2123C2A81F780D25B00DC13AB6C2289A2AF3DC45A20A37DD25BAD38071C9CEBAAF5AE45FA5B590873044FB19DB9E7F4BBE570F748F8BB1246B4442E99455F873562CF88234ACE141022393323ABA116F352490C681B4DCF61C391976DDF2561DF4A66BB4520EB36D1C65452428E54E39F9378B8D19DE0D6840D67813F91829E8FE1E69CD9833ADB1B069DC1CE719A4C144E69D1A899FB081AEC17B8B130E8FBE9350E6C88E992F342D6DCFBB172C13E092507DF8FDB97E85A1A3838D2640A710B554EEAC75527673705579E31B81D60B5AECA5103E785B8570A0CAAEC3CE8F90F8A18461DAAEC27EA00E45282090718B3067537DAF64E4541CF2B1A678D303CB0AD1C1C832DE7609407B1FFF222C1C39FCCE5E3AFFBC822E885341BB85CD042E5F0C4B5659C34251B66EB9AD4C953C559BBA6123827CC04358407A4E49663AE3BEDA2CBB9FBFB2DEB74E8605B65B16AF2B01A27770F1D465537B6AAEEFA28F283578869EDFFB7A17C7BFF6D15729768958DABAAD2D28F8640D0407FA12E3F0B38847EBB68AF34B459CC0AD135A2FAE58A13BE3BC1A2F0EB41C99A6FD36D31805B1A8BC547FC5CFC2D717BB76D1E2C4256AF75916D4FF915967FA0D17C95CB0C4386CE3A4E55E4EEA4F1A24ADD891266FF90F6E2584E70077F52097D80EDC666FEE6412E513B5C6311BB8A414F06B7C9A425447F41DB092C3CDB2EB174AAE640CCF59CD9EF89882E4F65D6AC827742B703CC90A85D9718FC2E815698DCC0430B4F265AEE02B4010AD7F641D3C0B3FCEF5892339E6CFEE0C3CFCF8179DA98404369A8CD622DF1118F7AD78CDD230C582B149392EA5132E0B65BA2FA56401693FD2F8A8AC0B286C0FCDA5EE5891BD1C1BC019B61CF51E138919BFFE6375C4267EA6F4C048C36610118049C91042B4A38DFDA37C8A07B4F843832FBABE1C2666A1D2C96FD11BAF4B1077142F323689073C5F4BEA4AADC85D2519C65C3AA2ECF6B3A7F35A0D52D32F6CAC260AC41913C15CC83F67C6F9F72D2F8C3B1C4505800D05CC5AF28CBC5F8F0ED3FE057DAF3458D996880E169A6AAE013F5C93D887E0AAEAC9CA21A88B4B4BF93BF68811A538C893E05A399A3B06C636A091D4141E0BB81B2FAEA5655E09934259B08E135FD6710061FBBA8638B0A0A826BB08E492DE1EE1A1BC3FDED1147878F153E469847884BDB825D2E6879729CE69EFABDE59C4CC09931634E6E385170B342EC79ABF44FCB67EF1DB019F53413266FA0879926F602F4EA2CA4DAB5A365485497B1D2B02051D81D4D5EB4A890F953C0341B48E12EC40066407DF3A51D73C2DCC02F46374CD0E5D0C91527E7A039B0E8B6994A1C224BF524DCA44CA6773D873C9CF6B1B27284199A77F6D60185685EE6074C051B1899126D4315B435FC1F2DDBD809C767500C1B45E86E16B0D9A146A5C259B072FB7E1DB2B2DD1753FD01458616677A695CBAF9B24046BDC00C4D08197FB5DB51E0927B8E8B84F631AF52BEA8FC5820144AA007A1F9077C7B5DA1C5D9AF6F77CF167931BCF70D41E8D2A1FDF07A9ADD567F08402597EC898E5C86BB6163CF22EDFD6BB674B61E8B37AFFDDA61B136679864A0C5FC402181ABEACAB6AA4A3D39A27A47C3FFFAE04E22287625A5FC8ADBD75A47FEB7CB35E42 -MD = 9BA622F85254696247D6020AEA1ED5687F3FB0518D25F31F77FDB994 -Len = 13262 -Msg = 5143AD50A9394667BEB054569CB901B9D6CCA8046F03B95126B869101F716D04D948C4CC9EF21A3C0DCE474BD1F07222FC1350AC8C62D7816716C8D2379B0C3A798B73A1919DDF764CDB28DCC125F8F65FBA8FC65D3AA3E23E44821D23B86DFE5D2671BF30350C5EEB7507EEB71BAC97FFC2C68F4038C7E05FED41FE67E54A5A4449036C4A7978E875F508AF6583ED2A753BB99FC5F9EEEA360B1176AC5F40CB04E43904F3FE5ADA446D5B913DE3619F2DB8B7C74401C4D98A7A5CD1EE0D883E64265428DE124DB3E4F9B7EC895E07F5D2C83379783416CBC315FC1DE47E5090FFE3A244D3633D1CD24DE3240B8CF138C9E8CB1A27D549920DAE03064C22E40FE02B06F540DA97BA537B518D79E8F3D8F18414F97E34F7924EEA241513B1FD733AA60E3352CCD0F49DBB04DF64148F69711ADAE795B44DF2E682609EF897D3338CE82EF5976DD3EB26267606EA9BC8B69B95D0EB0EE82B975FDD59434F05087CBF6F503DB2BB8154D646FFE3E5F25B71B9B76ACC639DEBE484596A6AF63D3FFE188C23A830D1E1DE48E702AAD42E3FC07D375B63C9E108AA768A116C044C840997FCD5604C76A6E178AF59A7799E3C5895396046C8756755F723FE2D77270C85731D2E31ED09F531DC80704CF48DF84B7733290F720059601AB02040E5D811DF589CE37EA58C48CC7F7CA6FD2156CF233202730496AD0898B94565F5E587A4F611EF1FB3B102C6660365189A11909EA209ED33677B892CC86A55F10B7CD9734AA6C5D63D3A35B48596EA0B911398DB1E2A82B513498FF478B285255C91EE26C920E20D5136789E8A890672D308EDCC69927ACD44913A4B09B12C6B58546877A56B7B895A303093613CF0308D47912630305B7E545CD7648228BC8B85EE32963DD3EC7DB3758CA46BCFD54FED4D76CC023F4A17164F378803B6C464DA61C651439618094091C6E9B03178EBAA508D13069B2FF7B0C215B2A3BFA52CB5C188045AF84FA36C90C960FA301E7DF0AA01A4147F245D3AFA3C776C4FC63C5D42C622D5D63DA34CAB2E2E214814D58422665FE9EA7DBC675656FA7BA2C4D5B82CE95BF73419B16FC1A24D96A72DA0774644AC250B1ECEF487D9B8E584CE574133F143A6442D12F0A81FEB0F9C288CD496EECAD7DA7612227B299E22F60A7B325AA0FFBF8FD976C24AF50639DF9E8563267B818236A6F797A882996D1FB2FF00A29F096592D8D154BDBA5023A503964475231BD23E175AF31C905EFF326555A06B162E5F03DDBB5D40385FE6C4CE41335130FBD5A9F5B83B86EB3902F0C9F3E3DEAA74E686AD071E6C49F4EF02DEE8CFFACAB62278E004918E47921BA81FB60B606A90A6022CDC93F9735DD8AB41A95E65489BC0F6025892CCF78E29881196F1CB02E6DBAC5074D585DE41FDD9854EF8D34106FCD28080E16112D7713AD401AFB3B2DA4E7B95245F5AD0CEE5144C46ACE3DC910333F6E90A2C3C910D81C74997C24E91C3735D8A3C2CCD9914801783B5D06B05731F67E5920A8E2FD73DB8EAFF44A5B3045DC4AD6C70D88EE0D36C5625709A7077927C2068C7D310F85E291A108913E4FEFD940F1A2AD9F9B2DEB1EA96657043093AABE7D65C5C804870E8DC2CDA4035A671C2D3D495EC6F0F14016D43DF75CBB4AB3A2580EE922FADB04BA1AA7D7C333330BF96F6E9C0BF8280E93038A768BB57DD169D040AB3737BE59D18D6CC06B3E941ACD3F1703A78D8B0BFB1F3A60CF49BC3038AFD44DED5AB24D5C9858DB50FAB17BFEF16662A8E7C5EAA6626D224F7A9FA3C2B8ED669843704A292F6D2B3187A4B476D50E999667B13DB5B892A28A0F1F61218F9E19AB136BA8A08620CD810DF3D586C00BEF8FAC8FDADC232BA7104DB38BDFD846B171FBD5D246986997FD091F9FE2316061092E86C80DB30E6015C8B4E53D68A3F6E4D04051F74AD80489F1CE18AA92AD78A73259ADC385A1E9A7FC8A40540C9750A84C8E5D2B4FB374CC3B06A8E111CC2431939A59EECD65F014873AAF22CA34A8E74EB2B50A02BE7542F0CB66AC6751E41CFCBDBFA87097A49F0C015019299CFCCB34CDF225101A0F7D51446BCE3CD85F219FE5B7EF64400F6CA2F60FC9FF482D261456E022CD508FCE44E70E8A62F8BB4976819A300E13FAFC3A836C025421097033D6282C548A18CAE46033B1951E61434BCD9F97DCA2D676FB2B3E1302A3190B614CC723748304E007C50ED9DFAFD3D635C2EDEB21C7D9E03B42CD3EEAF19C0A18190AB2458BB55C08DB88F76822B7C2DB90EFEBB9E81D9236AF8D0FA5E29F74980B55A62409351CC4A721DF54290F52D59912642E191EE7A780850288DBE2874DE686C -MD = 9AD57345AF5B3E0A0A9A784E9C4528D429BD3B2C05E46C517E441D38 -Len = 13325 -Msg = AB679331CAA492F6F64851C17997669F7273BB3450C0EF33761A43B234409183010D85F9034BA41B0FCF75B24A3FFC897C8095BAB1E7161F7C5A6062F2F66E0BCF18716F81D84BBA6E8A7C0D825178D11F4B304E2C5A12DCCC4D704A0401A4E2A2C9DE00EB48B4D313B3B4AD944EAF0FE726884D5BD1F2717FB671DCF9678C3E0CC6601318A2B02FE4F5F8F1E8CD0F3B585635C694C145F0F575D62B1F37031164FE3F997E01B2071D954E445B46436AF53EBE580A910DC31F1F68B3A721AD9BE940B64C8542874F31BAFEEAC8BAFF3D26E111A744CA0937614488D6FA8ECD2F8A5A6B375513CE1D90DA782CD62A4A440792547A7D5141ACC7C1AC98427F214246409BF516847337D22E60448A020317DDC97F94CD8BD5717B468FE51DCA0CE1A953DD07989D70789F020739BD2BF08AFB5DCB6B192FE5880C2C7F10F171AE46EF059F45052E39355E4921285F36AE9E43F97F492419D4B7ABBFAB54DCD57B982E64E766FED66DA1365DE8E219AD2AF2F229D937FB24CA08AA6C275484B95637B91A17BA0458050EE31EE354C6DD8BF37943178EBDE3BCE3652A038DFF6FC4933314614B2417828BF337CA0D40FE133241ACCF85CE7DC35981410884774778F1FC5739A03D507337D46517B47E9F6BA1FE7BA3110C9CF9CD144D1CBA9DA13BBAA5D0D4F26909A01C9D91277E24D51B9AD6BAA715F0337263A14E53B6F9FBB7730BA2E7F5EB2DB4EBC4FF7EC22DB7E5A08B518D4323F900451C9DA191C820402BB8CB07F4C732C2F4A22F5B341A07985AE211052F4FAF732BE32E7C133585836FAF536C2ABC3D5A08A0ADF674A68A0A7FC14FCA10CC0656047103AF15310A21E74F8DA2DA1FF57660FAF96F916A75D125D54EA32B8B35B7E7F1511ACBDFC739DAC0AE9AF80F7CFE3DED9F2E4EBA5D39C0E09BE86AF0B3ED4EFEB0722C63AF142A5E0D9D0666A742799A16A9C401C87D1742873E09E5E98D1EE4E654E2BE3597A110C6063017713874C5504EC9E905204A13B034E48D405FFA03161956F4F8C7AA4567D65949B4A464E4BADD6F8428C4F55030A1DA17E903F1438DFA14ADCFA1719904DFB6E88F35024F82A65BAB0FCB4677E43D4B123873D47D512F891BF59C68C2A3464AD64633DF04D7B7CE602640AB90996F15FA0D857049D337ED7EDB51DBB5E09E7BF910D4D386F49C9FC159AF72F6292E7B329A74651591E515B6C715A3E768BF84643157FBC36BA0095D8384E72774AEE42120896AE8EE59A4274D4DD420ACDF3283BDB25839CA598BB02B43E1EC50920A0C839729523C670498C9AD9751CB0B36CD0375152876E501D663FF177F99E0E464AD68C805F0B0017EE6B9F22078AA33EACFB72631FF72EB8FEFB47428A21889722A0C92A16F6B9C924792ACDEF0E0963F9C24C8D63833F41CB74C04EE817DA4904B3E5D362ACA84D3ED3B7C00C3114D523DE44A43F1DA03BB5E76B1639E84FC1586C3E8B5BDD4F9D445B299D9566B4DABA2AD546F999B820DF8C1A4278B8A2B1B6E4CA9388FC342BCB13980EFF75BA2A1347DF596E9A8DBAF3942ED339CD07B8E0791B232EA14498DE46754D0F51F4FFFF21CB8D6E36783C9267C4CF6AC71E11FA9E384D36FEF36FB51232C70A6FCBF7309DD7BD75994025C9E7D7522091E741BA4C448A049ABAB2C61C73A422F11B3BCDBD14510E614660FA66DE937B02FA61BCF8DE7F0BED7D10B204BBA086D61CA17D3124C47767352903C17593FC633F867EAE21083E4E65E68BDD0E402178AB34CCFE5189739725457B945498DA7005FD9282E9C277F56F8A57B81FD5F320595EF59B9BD4D23368B8F760EB067C841F09108F4F5A3A15C39FD8DA45405FB932C489E306D2C1136197B99ACE5AB2C2D8F9D609464D64B121FE7463023C392ED87D665B8DF07D911164F8CA6C6EA46B0660004C9711C502C0B3DFBCD07DB77A555CCAC48167590C5E2F05D258DD3CD89EBCDB72543F103551F5795493DC301E711014655618D568AA46589EB35ACFFDF980E4559317C71E521E9279070477B60E08DCE6981AF81606CCB1EEBC0CBFB29D1598AFF9BBFCA69D7F79E426FDE43679F7D2B75A54A75206DDC4F85DBC582F00509B889B884DC7102D35B9459B06E267DAEAED5BA8CC7862F7770035CF9171ACF757DB0DC18F5A69C6210784DCE78EA0D1E37744DD677A3ACDB38C192CFDD4747FF36C37260DFC2BB51AB05ECC9BDC894C3D5FD96E5110F31EE6761D9DD1D7C08F7579234F6C327CE5E63F746F57564CF97D137ECBE96D619760718F673F57C9A8CE5135AC20998768FDA2D9988C84A9CCDDCA55B7DFEAC8E22D1FB52FC43DE7F508EA075471A87F719E7AD159030 -MD = 33DB78001118BA8DF90AC91C203990A330A938A4293D0DB63C067DD6 -Len = 13388 -Msg = 09CD2F70C521CC879D746046DC68AE97AF1E746EDF4B9A81677FA6487E3A3D800DC12652D42C78B6EA480AD5BB95153016D2FB2A59C1AD5459CB6C9ECAF66B71AF09E0A1BDB6E701501CD63557623373C458AE03D5F6C6636040224018DCCCD3A1BD22ED57D67D271BEAEDEDF183ECE29CE7927DD70292618331EB9C9C1B859B238423D0050273352524274AA61458C5D3EC37FA3118C74A6678933F89B3F0DEC9438F2148987D96E58AA182F11FD872961CE9AFE826A392A1F258A1895855958AE999B488F921604BCC5C946B53F7972A9D11547204F6B95B7419ACE9994BB76841AF9C4092483C620B2A5BBF15C6267C8FB14943CBA23F8F8CE662E74753A45B6E22740B75AB8ABC12DF022C66289467D7A687BD54DD61A4158656A6E843274A61AD928EC46EABBE6B25A7B110F607D758F2593A0EC4FF929B41B953A92F01914CB7E3B3FEC96D7397EFCBBC30475569CBBFB5C95C30446FF739B88865F9802782EB663AC18D5D2E1753F6EEE08062797337095647C33FD1EE5CF3EE12DCF591BF7EB5B280DB9719C8DBF17EAEED7EB6CEE68462A07F117A62DDF3E2E0EAC1CE0715650E2103A869A7F8E0FD53B56BFC4A645CF29899FA28367F7321085D14B23E6AD727D0D8E72F58D4A95AD1358AFD2FBB36F1FD889BA36CC1D2F8BA75E92612A9C6E8B8FBFAC9AF769BFC30C0800EE7583455E0E88EC9A95FD1D44D51695784AC56547C0F28660BBF0DDCADD8146FB65482D0F7DE102EE07F83D89B8C63860AF4F9BDB954DF071BFDE14359097AD2C6004F0929028978522AEA776436A39A2DEBE40DB5E008FE997F157C9CF3647CD00B63E8789E26A47041DBC4AA70145A8E058C161410DD39389ABDE273012588C1325F21C191F931B191D43CB1E499482DD0A84551957345A5E1A970A0DD88D6CFFD999B50876A6E9775374EDE182F473BED90BFF1B454A7E7EBBBAA07C5699784F2D52240E31BCE953D9FEAA9D203409D86AACDDC6A837A897E6CABE51C353B36E8C17AB212050B729ECD1F02235FF67C981C3AAB7516490BAC83DD58851FBCE44B9ED34C579729EE0917C9A5D5E1CF73D9291FBD04C9C4D1C7C0FED66496B4B87670B2F14F735920B599A1F5B3FDC923BB302F561AD682B6A8E7FB8902A3D2EC6A56BAA9D2BF4DD0A6E0B3D422DF119513E752F5EB745CF22B213FD721DDAC9FCC07EF60DEF49EDBC443E328082C9CF8D928FDA4F273DFCDBEEC60505E88C3B6C46A73A0C8D4C26E08B2616C31B428A3C857698561359CA7D49EA72769CF8DB7128DAD246FC6EC6160137F6F7324548B5CCE73157D7A52CD485D6701D8B92B64E90BB0D3B71702171388BD676D124356BC09880EF4CB11BFDCB0F41AFEA09C7FBEF3E0D4C792C84DE199FF467DCC372029F27F43503168565191C0F7E52BC137CE2D8B477079AB804E7E7ADE1C15F433DFE4EEF6E7F782467B4E64801A6E8EDCE69ADD5A5A9EA2934581BC356B16A3BF180EE5204CF53AD18EB6A98D89E78C909E9198875E5B9A7FE463B8F0A84CE140B16307229BB716C75FAA5452741FA08EB60377AE8804164A24A377898B6BBE80A989D2911ECFFF31B3423F9760CD86D80798B7D659D1FE145CA50AB67C4CE8BB1BD6404687970F4604EACAEBB9D26B9042EE18331A555DF09DE034BB05A78A3466D3CF9557EB8B13424BCBEFDBE097F50C4DABC2BA570905AA36B06B2D313A03BBB1CACA03502AFC2C4AC3BF2FB163323BAEABBDBD8643E31A2DDFD99BBD1C2C40349494F59FC43B389154EB6A70760BE4C539B7C17A509D0882FDEFCC1BC590018D8EE5152C0C2AA0C1CF6A4B6F7BB64984603E0AC5267DD0FA824A00D3F44CE25FAD4C8C6A565940F6B2B52D794154C1ABE8E65425695A46E0A9EEAFAF487792BEB1944BB740690E362C44EDBCD02EA38C40569F75C9D148122F158F4B875DA2F824E757A714CE94514FCEC4DFB0EC363E2B39E82AA65A8EF6EE464EF310636929D134F55BC78D64B871AD244506763B6615B4FB92801C060AB6975604D71C71B1CDABEECE7BFF5BAAB8187B39D8C0AD7F0A6C62664AF95384A9EA64B861C6BE0FC13F042D32F7CF79EAF24BB22B228BA97ABE87B935C7A2BFFB0C663C0B9AFC5DFCEA3D022C1DEC7A3FBC8F8A9EEAA24A014BD5672646C9306D91E4CA52A606B4715D787DF0CFC117433D718F2583809ECC93431E266B4D3FA2F2AB54C96D3FAEAB381A6C6B8CEDA6B1A8B51175B46F58D06FF73C0931F754959D0821B697906808E16CAE2ECDF5928D559572DBF743B2500014D5608019534EB3864055E1EFA2C0867F7555AB90B2D2C93541E510BBAD4DF2BE7EE00461201DDED94CE16EC18D77E6D4CF4730 -MD = B1487AC7A5228E04546B22290864B07262E5F38881C0A84F06169D69 -Len = 13451 -Msg = A75E77502C3AE66BCF52B5934239DC0CDBEDCDB34B7AC8C379644E0EC5D0FAC9D8FD4E588CC025AE8D4A3F201A5C21F42C1098F397CCE79A4C90F60C3D7276B37DC9D2C2F3F9045FF8E7ECD9A2FF68D82EBD40F1C085C6FAE2F73BB23FEA2F395A4D2588B916A06F93BF3E0C412A77B16883E5CD896E55058045E4E9B184D086152F2F36ED1DB8E54F71EBF8CC65A0880968846C693D4533F4B08C506C4FC26DC8D4134A896E0EF8C84DA749423E7401821513AAF45269C98DAF765E0B30717D4E8B3AEBB512B6B737DDB0F225089407178BCDE3FCD714D03FC4980A867BF82C7FBCA57DF1290C9AD8F6EAA46A774DF14DCD19263115E229656F979582587A13CE0FE19D47D445BCB0A01ECC0A54EDAE846D8C97C568F2283503105BBF3E334FC33B6F7CF753A12633B3CBA41BA2BAAD1233F652F1C665C4015DACF430C03B56DA948E05D0392DAFA880234BC5364151CE8FD9625543CFBD2717F129955E01C94919ECF2ACD9E5CD5DA9F406A21659951CAC6CAF80C407B49F92B442350E50594137258427C6049CA445936EC4E6201810A6E84E7119EEA06C546FFDE40AEFEE5E036D66FD6C7C3101E7D10AB2310C3EEB198CD960278A6B1FBAC6590629620C0DC53B4C46AB9CE91453353BF553935392A8AC49A1716450C5DE71F4B889B434292739980ED7CE7B3C845DC994A5D047339B378A433176DA16EF749FA3AE566EC3F00E7F9325E4BC443081243702AE3CFEDE03FA4CB0A4C1EDF3523C0298F3DAC7CDA53D47BE6C02DCE1F5F2663BAC337DA6AC58D63B70D0B6DD564B7833B014787FBAF415CA7ADF4C748F85C66023FF2D8C86599A5B1ED7789FE6B6F9C6FAF31A1FE5C4709C7431DC826E81018890BC14C8A39EE99A9C90AB443065D68010CC806B02D46CA9A8477687277BF537E88D3929B449F1ED3C891F449CD45ACEFCC28E9ECCB5A8CF98A8E83BEE249EA682E5CC656787C54B93D77C0768289D4F575CDB6F177676DAE03F107B8184CC1D17CD00DA99B2DBA4605D27CD52493BEE4161256D8C8838D53AC7C880AA81BA5537CE29995E8E6150FB3E6C324F3058BC8A77D457A06B72E7EEBD7DA8BAD73265DBACD05DE5EB9CAE4F6E74EE15F71676E1A8B0B3FE9343EED33BC458B06B5C7C164C8C7D7767C807AABCCD91656A4DC9DC972B52C154F8FFA5AD12FC42CC8D4BB38E7101BECE4D23A12C8B6EE7C5A4957C344CAD92A197F2865418E73EDD906A8EF7366C307528D0D4CA3DEEACB4DE87C1EFEEE652D5498BD367183ADD28CA855F0A6CA81047A80620E8A6359A8B342F35772070BE12C98EF93083ACC198147CD97E0DBB986E34483ABBC540F4623290FCDBA85D1B235F8CD1BF0F2A8192CAE0C1A021EF11CE05DB28CCDFE0020AB02F95926B26C8EE3AAA62D482D4E761F844863D61B59F628B106435A997D83C52E0B5CBB3FCA579201DA03E05D8EA36E2EA53A2C597D377C53A74C287EB02F1FC531062A74542D0FD6D4AA6A858FE736342F5B76496EC0B7739DA71AF2684FF35B4C0C6894E6C2E6BEDAC6AC4FCF2FB8F2B421237002CD5A71A0C4757A50C8A45FCBFD88AE0B8D10B413966C8BB378427CB7A6894464347DEC0F4031A2A3E94889FF4C88D6AA35B9B7B98D1AF80F6AC6366464AA4A5DCBF1D1EEEFC3F1981FADCBEABCDEDD745BADFB8E96BC97CD17BD832598EE2A922C2E6DDB77D8729986C6CBB6D01BB364DCDEF3F443B2922B314248826074F8007BCB763D735BD4D895841B0270ECE3CCC83A3C17C278BFB55DE45FD54E0481EC56723DC36465D9C2187416FF53FD68BD946088D4F70648D760F26DD3CBF2E3B15591640490569413FDDB4EC48FA30B8B7A89BB974F77FF543E925E8227099E390AFB24D4CFB956B55AB8F7A7D15426B054AD527CF0834495AD0380919B157D9768F7E08F33B95428DFDE67FC452BBD6E4970720C9522CF23A64509CCA2333E387DF5006612EB402E82BECB3EFF001025C22E43EAC262CDC6D888ADB95A955C8C0C5C4407A8F578F5A83C89EF37471881A7E7E971A06844393313A513894CDCCE0373DA9963A0E8196D013AC6EF3A76072ACE2A1350712F3C5BD8F5D19B64B0CA141AF58CBE9AA4061C423AA4835D6AD32A0A83AEBC26B1C04F3EEA8CD29D4B1FBB67D9056361ECE5922067DBB0477E95B93544404D03D856CB60DB485AD14A17ECA7888291BAA2856C2BE6C6337D99C9E87AE80A90B5D4D604FC74CEACE768F50AFA520CFFB87A95564C68F2750D389BCA4F3F880797F9765927F647DB39C55D3B72D2CE567B3F200D6FE02B5EBE18C5B53BC5150ACE2DA9D601F3C3C74EE71297A84EFF50C24950C1CF925A5E94BAEF3C83AFDD4C80610FE73F86B3C46A3E0 -MD = 28DA38D19E69821F061DC45D88C22F5853DF6C0952F0C2B9DB3AE957 -Len = 13514 -Msg = 40AC914F07A8D949ECA50EFAAD2724EC3B1205759773D3AFCB72B0456B05178C7386C26685AABAD06544EBD6C5E7F32C13AA768A791F39A29E4BFBF8AE28916E2A7CE4CFB50025521140D0F89F69BCA3AFC68373C7CEBF168C8AEF0DCF8558E5587365A91C00B7D62F1F0BC97BB6837D7A6F72A6D565DA9DF35DFAE11F3A4CAF17A65B0A42F1E41CE902605098C54E6981F9AA799D1A5DAF0F924AA20E9E204ABF9CF2E8E9C82F84DD4B78D53525B2B7280E7215155D79789307B3E021F2877C553F3F00B0C85D1C53207B5F7859F3056C583754E18AAE5276DB801D88776B53D1027B1171C9EA66575B89396C6A8134F379D0459A6BD92B57F681D81484D4025A1F21A3153D20F640ED2EC031D1AE190C21A11BAB7231468BD131DFE62364891382EEB8A5A93B2C25505FADC56774C0D12D30C67738E115E7FED14C73DEFD35CEB4E5E30E9315DBD60E4A1F46984D65B6EFD94F10F2C50844B82143D8C1B109FDFA402DCB0E1976AFD2835D3374B251F0ABB10A2748A283AF6B0B8A67A14B6C23889FC5A65E5499191C4092A76DC3BEBEE99FC3F782F6243D22C2DBC8EC06AC39C1E6742734E07F1E11582C9589192EC206A4AECB8600C359B08C152BC97669F05F250DAA390564F62B74D36EED76E3B59570BE7B4D5A17775CD9E706A4A3A54E1EACA5423BE999788AADA67A4F85B1C7998539E18D4A39F249F1C434B8E7D23A2E64CD7F097FCA57E85702754EEA4B3B6D210C711E9128CACFE9A7384A81E2D3FE7D07ACF7FA2A568FF987A168ED256E5F7B6003507AA1F08D88BCB5C265A3F77572C133AAECEBD9D163B0C9BED1AC7FE5EF2DB924BB7D178717E1D13C548C1D067C06C8D87F9A02154236DF894445BBF669DA63925FC30DC9FD3BF766FA776A1153811B94CAF2B045589A7743B4578696F31961D898595A80E32184570D0F134F33A4BD76B6E1F8CB32A2A43AFBB0DE945A602E13CC0590A8FCC1145D4216976747A48C8846C0FFACCF862455A7F502B7C72595EFCD79993783A531C0D184E1D75274B89318454912CC2E5BD691E0E7600BDB107112300C3F944558B812DE05C1644DA0113D2994633236792805C30A9B7DFCAF6C1B7CABECC6B8FF40B18822343A5E963D81A7D72D7ADE695A3635CB6D19ED1D78F6B989192D8819B5B1AED7FA778171D7463A67CBE6BCB7DB468F59261212DC10BF13964A94D59D96C14F5592650304FA14AFB6A88F0016930CD56D39027C4BAB7DA9EDDBC079F04AE871C314124233869BA99184996FAEF0FEF140C77DB90D7A8F8E0AECEE5142D101241C680A46DA5D4BF3C257DA5AF40D0B15CF78F9D5B54E280F84CEF6E1190A3EFE241AED97D8404070F01531E816E005A760F8418AA798B9416A2B3FBE019E47B76E99DAB41E195642C8FF948975FF28AB457D33D6BB1D08508D0AD183966DACC73393F1EA918C775B8DF9E4F6ED8670C8243DA776DCA86BF0D643A26C149062D27CE0E0CA2E73E1E43330FD588E00F116A6C9C797E8AD8BC2A7796EFA3E72FC8FA6B7EA697B4F025ACD36A6B798CAD59D1CB1C62A5DADBA1371EAE64803DCA443CC6AC14DD339F3A5FACBD86F09F6A660A7F7F6BE10C7B88347E0080FC51F65A02BC42E2F9875BE2B9F4152359382F50C87CE5442B92F838B99D73477961AD89A998F9B31F72511405C57E4F2051718CAA7691A377E6E80754BA95F9EFB4A79FD262A86687A6EB27AB489F6F6AD9521123F8AA87C41E1C3CEDB18CA79206AE5754F554E8BA2CBEF42655F64D9F3AAAE3084F5A23972C0FCA61FFBC64EA9ADD1A9C9828B45C92B9D385CD8AF630548535A8AF9F8F409C7B2FE815B2B48AD7C5B9EE4D90FA27391EBF9D37A5C4F3A83EC31B58B985DDDF166F550CFB029625163730BB1A2529862512DC381E76FE9A1E65CD83765D8C7F74F599FF062E9AF43DDE0AE67F3C597347CDFF58F70DB0379E071FB8BD8CC792300510E44DBE187C111B47C1A66DDE5C00645D8F1D4FE2E424DA3A050B738FC0784D2A8A6C2B08243784CBF6855F179A446FEA6324FB452793870EAE3F0A9FCAE7222A834376C1313045B2121B82B199BF668B36878DE39FEC6AB7E4C5627AC23380BB5B049A615A3BF712450B93E5C71FB5413D9AA6C8A83B2B4F0A3D8A445E1CD2F71E76F37F82E050BCBF8DA98C99C6173AAAECACEF5581BC7CC9D62D1444665527042E181FBC717E0DD06C857394938F538FA9D6B2FDE551CB5CA846E34AB249FE597F168F53CB2F8CAD256D96AD7FBFD6EDB5167225F914393E530C848D81CF084E7898D0BFEAD9C4637B14202689BB46B2CB62AB2F6F2676D72C1981FAB05E539CE57AD37A985095D9A69B68F433C58AE5FC7E13CEA15277C7D25EA4265577C4E80 -MD = 378B6679EF0CCCE511359435FD563119848D16E0CA09513A3BCE769E -Len = 13577 -Msg = 5CB64F9C20A3C7A04226A76CA6A34D2CB96C1662AFB86F3B9740B356D9AA1678E70303A2959B9FCF345DC027BBB1DDA316519705CFFAC6C8C29B16EAE87E7EC4E432BFE8A8B740B193402393CE49A8571451B4455000763E06273DA08EF3EBBBDFEBBA0ED9900A3847E7C1CF241F6960CB95F1BEBB679719FE1ED731B218CAF0B4AC82436EEB963DC762DF8B6776B81DFEE867155568DD90B6A9978DD20337C26D3D2DD33B9D0A41038F3BD23E19AB7D10CD27B18BAFF51867E10BAF7DC3FD82116F0F781F8F8F3EE4DA36E1907D1F8F17B08F71C6B336D788BC0B874E51A005A0900CE83EB0F6FD90B72CD08C674C146A277B8FA270944D445BFBF747776269C6A8951F98B74FF461D204B06B071E1CE92890A596DE9D4858489289BED11773B279ECE1C2FB9CFA7C7834ED701693368308DD158E3847D4245FC603EE6048CEECD915FBD38130929A59C13496ACE98C1EB8B01CCCF4293599092F8D69540395F149B7DE157557D71C189F9411B9067049F87E0FAF865DEF0F9CF56F00802C236EFF8269435EB93D44BC0DC203AD79C6321F3583DE614BFF8281AA3B3CBE1EB2BBAB66649B104EEF7739267F3AB97CEBF921D595DA443BE80F9911AB5BF96384F9785ECEE4BC7EB3A2FE5A7ED931E7F847DF75953478E76169AFB7F32AD4E6FBEC1A046AC5C72F8E3B1BFC94E6252DEA4DF75C63E65232ADDB14A21D022617723A68676408767F44EAB2A5AE0C3718DE187FAA91513C48D9E65091ADF008357FFE6BE4E1DA18D08F618771AE97636B61A6BE53AD207CBD8D8014999A500863A49B98CA79F1715E13C0BBE2AA923B5906F4B3E31727C337AA220231D6297550A8B406F54B340410037DF366D935AA7095DB5DCBEC708655EF22D0CCC957B1A9E6929956899A9F8A887AFF9E493B9745F36551C237407A5FA4CF7FDB7F6B9015CBEDCC8A460BEF8F1A2D2E0E8FF1E93E998D82C8371B61A2BB1503DB913D5D8A2B3BB6FE9F6551F24AC00649A8F4585D2ED4C2277782E54C52AAEE405612E0CED80C015F864AA31077A48E0CA06204F8DF7115FF6C07E14F99A33A793A40DA0BD5FE341B93A6B260A22AE273E87E0249A889729AB0145CB12D96B795BF90CE566F9248515E3430C4035DC1B409A898CE13E7FDE1781A3816B7487CF52C12915D6800990F365CEC5237DA35F924FDF0D3E2F8ACB75CAFA076D7BD4F8CEC730F3DB07C94FCA79FF8A144BE9B71AF617759E2C4E150F7E4712BD2F97113A4955E06BD384DBBBB4735B4935B2F856BEA5591237E54FF932074E6A33734059A6314D1C7BD2200836FC457B913BA433754A3205C0560DA066E72EB6BC8264C1D817479545FDEB7AA2CCADFA380BF515253BBDECEAB4A038EB7CA775FB3A55C87B671875D58F19088EE4DCE8A4EB53367100B7D3B02D144EAC7B12A8E390626EB4CE8195F70521C439EEC16E3EEB35D80CA4BE72DF793C2D805DA08866BA3000C83D24854B685F690AD69C428FE0E47D6C5422EE1B153B69162D24BDF6DED7E6CCC12A951065E47A96534381C553A1D6A7F8D42B03DC9F171D488E8EDFCD8C34CE840A06EE9F3088944BC526C066520531AD863E6A272C18BBEC04AC0F1CA9B27C841FF1DCC0AD7746724B118C9EA2F0EECB952D7E52BD425F42FE9BA397B63D9C33ACB1973F4428F415E5F3E95EF4CD02F1752026A69E302A7625852A81CFCBAA82B186501DC7E8B88A5D994FCA305BD4E3C72F0BCFDA3D71D58214F7CE73E1CF4D92FF0186F4296D874BF158E10D31CB7DAACF02100C1C7E41F5585A58EDD6F0D508A751A5C8FB316C41FCA22A89E15DB50BD43F8B9FAE942B9252823F2A16603F9B1EF1E302C18C9A112EF9135DF79D1F8D315B298919F6C9BED36F09FC883CDE9693C4646686D7E821966B3E94F3966A9D1A6FB3E8BC49AF026A696ACB09A8DA32CA656279899AFB5C2F4EB01FD3ECD8D6EAE436E7BA9C1857C2E2D511370B76C189C1545585152567BD1F4551B58C24C6CFC25BCD1153E74A7E53D6682F6EA34F22ACAC556DF55E00AC86A8998E03162C486903B735585CE86413B42EE98A0E8DC2FF6690743BB2A7C43C8E7A6D84A7E5265FE198CD47B91DD2AF2C840287232A63247295BF31EF9D045D357E5A045E1DC91F40ECB19DC5C203A9CF3A9A3E5447678A3639592D95912BEFB9EA265F488E2854BE90141FAB0141CB413D4CCBC370A05B95392B3B40053DE6D281D4E6A1B394894BEE9D2549E48EBF1BCC68FDD55BF3203CBF8A9241A498A8C5052CEE910725E3769378849B19D5DE2343BB84DFD5005AB62241688CC70C58E564F9EC4FF1D659DD52F39493FB163AB8FB210B5482C5C8CCAF64CD15B3D12F58A8CD8082516E47BA51D9001CF691DF9AB6CDA93C5F1BD1280 -MD = 2B30CB5DE535C5E7FC4286CEA4DE82BD3D2E64C513EDA2D355D03336 -Len = 13640 -Msg = A8B748DD6959FA8770AD6673B8E70E35748DFD0C3BDEDAAA467CE4E502EB866D732683CB64E78C523208CB67DD9A6F3D3247F5B413B1025A33B28C63B42802CF6D7426DB5C7A265FD820610A14453C2800B1F5D77671B15BC792C0B0DD64AAD3532721FDA0AD87AD7A57D199DCF5B2FF0CC84A7F744EA7369E6F4D8F0F77DAAA7DA0A8255E32C473D981FDD4E9C855282BA0D58897EF2329655DFAF87537CFFC25A22AA0874EE8B54A370390601A5492E7634FEF8E24ABE3203550EE8788926F1BCB8B0DF70A0630357D991BB8F45DF6A03A17C000E97840FECEADF945165CAC4941CF363DB49891C86A54FA81B486A563492AA01F769A01BBFC7E8697B12B28CD1FCF608B0DA5EC7F5B65369364CB752C83D6891B7D870D52B3B65C3696043474F91A0345CCB7AF34CD5B308B1DBF2332099F671A8CF4D809E4605628B10B275FC5BAD4CAF299BB5801124BC86359AC83B33BD84DCF6D6DB41917A9A217CC682AEC1859A427A32BC1B11FFEEF825DF451C7CDC033E9148779F753CB4C05674EDE8EDCEAC80CD23DF372464F039000FA3AA47D5A99E14894CAA2FF5B90057D3F411B1459168A85C284D5C2814811BAA7700E5ED96E4517464FF1757811BF3691CE33D02445980BCC40E24E1F9DC6F9DF45342CA4E14E013C1FA06676D582555ED55D069FD2DB267C92DB577A556E6103E69D1D73335183E26ED88A5EFD87EBDDCAA5927B97F094209DBC7FB337DC0F7C98A975A74169600F3F1A1C7433ECFC74B319BA3DD8EF69FD1CC6CE83D1B4A0124969F6CD24B7E3D3418A80C735B4F7ADD091882673F01FF20E38461A2B389DCA81E5E6CA2213AF194895139CDB02130C1FE043E58783C130C36BB88A9AF656E406DCA114E96F2FC9F00EAAF5CA9911708A4A2E6CFEDA2503C49B644DD2562637134CFA33C50C62199E99A8A2ECCCFCC3C6A1FA62BC1AD9701B7C9CE14824451059414ED52AD36A69B3E0A4FB543F40099C437E89FB12F6AED816C9AF7778D91ADC6218A113AD9C9C0CAA4E602806C4339EB456DA4C092180FC8A91FB9FE305C95CC4AE5CCB06DDC64F4127906BE28F7014A9EE2EF9F9F075982F7273B1469DF14BB92CF29BBDB487B8DDF37F5E10DA60C70293448B7E8C5D92148FB466A28A16F2EA8A3FB12C8E8678BF4D139AA2DB2F171122E59705EA3409FDB324FCAF27909A66ED1CDE7B92B949E9073ADE4408E9D5537D3B1436853A0294B77564B70B1E43AB13327D617E86971D009C7DC1BE0337B185701A0521DAF4940BF5A151C6D2EFD077A3048EB7B37ACEA084E3A3ACEB4F2F44E4B42E9112FE6727F5B65AFDF28252F341DABC9FC8C8D5DD2FA6F263F95C00665854217E915D842CCB2F33310124E5B5792BF0863E2C1084DFA511387AEB1AC404D32ADB5C0306EFEC84688A956C7041C724E8741EF49DE2772FC3E174E02F81B7D970E5012913DCCD2CB0925CE51D725E8900BA589A970F19B558CDC57B30A7DB60FEC91AD0005B0DEFC05DFAAA2613095F53A478459B4E89170FCBB57F60B2801EF87F0665235C004B8F61A166DD5885DA1B04768C08F9EEDEAB78A1D7BB49294FFCD134522076C3E0B0A2A8FBCAE3D001F4E1DF0DE1669E533F4C9D95CC2AE0C42B67A628D0871B83CC599A8AC4828FDA49EC2F9C057CC995E79EE5FC51905BBEDC756A7486E79537B559B49EA57E87406C20EF94FA73025FE16AB588591D8E89C79C3F914F97AB1542DC6F86435F132405FF49463F6B836F8351BE8C1E21DD14B619B5193BCD04470EDC4B863174E4F1B20EDA5C3DE3253241D61CC17F4FE1DD6AB0A7CD102258F6366402B44DA9D7C415ABEA13411A89E77906DED43075135787820692A3785D09948C5E063551F51A0B8FE7BA9A070A6E0648B07C9CB99BEA7593393692EA6A365D0B2576AA030BB4CD288C42500C4297CB073B0F7370DFB7AADBD8569E51ED6A9E74AB58E647879F7A537DD1B3E4816AE90F6332A219439ABA6C9D7722A30C932A2542F257111450FC270971D2E6C1B9EBB34B786D215A01E89D536558D904422D8E5A5B3E2B2C54DA191B947C48EE0ED296355BE52ED192DA910CD47D8B4FE7A29A23BA2FA23B8C6CBF4CA572B9A72EA9688CA0DFB2F74AE6D78C2D96748E587D2D1F5D3C99AB0D98DF949456E067AA02B3B43D2916F051D636F28FCF971950E9D9C1C0C94B894EEE76E9AE942283B516C0E4A10527D0F120E15CAEDD19546ACBF1AB85CABA764C74DEC2AD190570D7D44B5DD637974E8BA26B60F0A408B7C56DB73395C1F1E7606016B661119CA4689B12AF8F608A1810703CB489BEAA12CD72CF37BE43FFCF2F7F8C21A8311A527831BFE5B7CF5E9839BA138187BABD9ADCA84C35B9AAFABA6BCF7ED0D22DA87FB6EB8145591C9B3652A4EAC256 -MD = B1A29C00AB2341A77CFED8398F232B1FB57BF4572EAAB7560D7D4CD6 -Len = 13703 -Msg = 6002D85E9C6C2383550947622F5F350141C09F9AFBFC103C2AA6C788C663022DE6B0A6642893E731675F545E9980BC4439F29427BAC2FFB7A75781B66D6F6C78F2BE70211EE0CA92CF0DB06E103CE4C99665797990EAE013174BD05FCC54158A5635188613E3AA726F2B0F97D1FE14538CE090DF8DCF9B1A5E6956431E57C8608C3A2C045DC78AEB4D6DDB8F04E20602C849833F9C2F7FB0A04CC5BD648379077541DA73BF7D6E245DB921997CEAA70B72A29EC1CA8198002DE1C6C747D48F4E4BA842C1CCA512C073A66E425BE3B7B3C86B1690866B03479B25FB5CF0AB5FED95BA6318D37CCA26615C3B80C06997DCCBFB2667500954625F8B27BA89A20C81F20F715F19BA58D86E057CFA97F2B69F4A34A14BEF9339F688ED415E01CAD4C48827B3FB68680A1263C070BC760F64B278C0A4D519E853CB2C0D9C5A7529BAC55221A4752EF752E9CC1923565AEFA58EA6CE2BD75406C31291E822E49241DD0827EA6BE24333CADA91374B2A8926594C7F8C5A37CF7DD8948BA3EF19641AF99820083868E3FAF1CDD52CAEC63BFBA13E5DB7BA7EB020CB688CFC3068D6827A8594E39124BA4DE25D13FFA82D464089C1FD4E2742BA87514F023D1BCE22BBFEDDA637D17BE467E86BDFE8ACF21B130A1397C4D221847C659EAF360350E2660BEDCABCBC9BED0B3030AB7DC1C8F3B923A88620CB2CB92103882D60CBB4C4D466D5891E9C456B7F10C10A14B78505421691E467EF1EF16F789D3DD1DC22C7AE286422EA1D987D04DCBE518D78B543B9B354C1BA190042AFE2069F91A1A17DCAC918274C6583AC6AE07E02071C7376A0E47AB30001A6C048BE1A84100588D28EC5CB24CD85490AF092371F6808305C0083C5F42094DA1136E02D6A27770371298BC2C19B7DEFE40910C27FAF0CFA449156A6FA0E8E4C578868D1D88A6B3E5BEAC8537152D57FA81308DEF7FF1A7FCDE7D6072C5B6021FD8FF9BCB0C427FDA9C6A22BC718F019AB76005715BFE4516796A67DECE1DA402B138DC199F0D35DD86E9C376A5708B1E6906A68943150DAF6F6BA20AE79EA8816965F683D318885CCB2E60ADBEE28D38716085B0313876E1263223C852BB26F5303497007051A694BA921CE8A85CA481D4D1361DFE4B2E568274F0FB67157AC5CFFF9B6A1507DE88B4B9F85CFF03ECBF341BB4BB435CD92E1DA013056201ED02F26380093F6E49DD04D6A69952A1B37FE1DA69B862C2F699576929B6B7DEB0F828608FF485304C2BEAC718DA943D8629DDE2DECDF08C107F32A9719AC66C5D80E2704F20BF0BD8E69BBBF1AD9FEEDEF896AB781D9EC534F5D00EF921BC842E79560FD018F1E34F31DE01F0EF59C2B63C779A38352748C3F8E5D56BF188F37BD41F881F85D57F1F37B9F4C28A6373C6EBCA916B8535F20BBE446A36A33616847B6DE24ACB59F5A6F52B107D6DCB3CCEC82298153482AD5BFCA606DB5488E4285116917173E3495E659BEC1716C8C26ECBD4A8EF79B67FE4D22BEA9A490A7F8C649B878733F9E10F372B1F918B3FFAD3789D89FCD5ED68537ABA81B09EFD67D412F147BA604DD54D20F49CD2251F33DAFC4A7EEF24EA5514A3ACFFA173DF8FFF63FC990CCCC0455BC2EBB8FB97EBA10F6D61D7085A2FA19D634A278194FC65DF4205B434FF0C54E7BF3F8BB8FC4F4E47B12B85CA765135B8C7AE249B2B5AA846E7EADC81C76CCCECF2823076835EFB768956740CC4D8D28A1BDB7479B5A4C52B9A33D0BC23161ED2589987C5E7B3542B4AE95B455E993DF0C683DAAB0799FA6E612BDD80383F35C385790033FBC65BA4E152AEF52436023043C9A8A950C1C9D608EEED9FC920BCACAB738853F0EC14039F9E19B637BB08E58D9A14E56EAEE00E77AA9CEC497CB4835BECE29C5255D46ADFFFE99EEE59B5440A9B219FA45A21785BB31A41E7426576BB0FC7B21E500A45979189EE6B6F6174F929AD4BB32C6C689BF3E5475F05FB658A85124C8E5053F4304BC448124F23235D09847345A8BE5BCE39EED2B68B17C038B59792D72DC2785CB723DE475710B162CF6D42BA09663448F69CF108A91EE5C85018F921BEFB86BF5E980A5C1E8426DADFF9B5392FB6E6364D9DC56A7F5C8C3CF338796CBD0405F2BD0DAD8C7CCB95ACFF0A9ED33BBBB016081AC92C93A4E116DD03C476BDC0F32676C62C33F10C1D30A5335FA1EC14589D98642C6D1E7A5DF42585E18FA74C75874BCB5FDA95C4435E863954AFDA89653FCE06D387B6E63686BCD20084070FDC2DA5CB10AC0096684DA8D2B82AF6433A27016CFDCBAE6FCCC5D79BA72ED41C001ECA4122069F102207D183FBA8D2360D5EC4AADF18D3CA77564831CE3C53D3845DA762319F1BC98896B844E233421A11334E4B0AF228E735D2BBEEB6AF797A9D27F6FE30F0CE23008EBC4D2BDE0 -MD = 258F9184FBAFAD193FB4E8E179CD8505BBAA476DECE3782A84DB7F23 -Len = 13766 -Msg = DBDFA271A771AE0827AD04BDEEE475E357266F170F6304760160EB3D73ABEE0E3CC0C66781D72957D52A58F81A85B4C3ABA2D68F02B0AD2A8462D9BB03F214255A7D4FDD9B45C83873CCA3D1FEF35995F45FCCE933207F438FA967A2DFC00713EAA4942C3DD67605DF749B8CF30739D2373BAF7DE7CEDC48561A4CE6C7735806D4D3E556511A4B071A86E9F31D99E887A2D3A474FCDE54C8407C8B6584AEE3C3AE2B9E60464D5E3DFAC67BE8A00512DF48222799B1D87505363D486D6E8AB9567C7BAF1D32186CD9E62A466A7F03A2BE66FFC1D49406511D413AB7FE409E688E4A165F99AEE5259C9892D93120EE03BB94651C894E3F99696E317E9B46727674AE1DF624B6D68DF9F624473864FD166942CDF1C166F00E43533EDCB7A433CFAB2B2613F24E1EA61388D8FDA4BCAEB5989221A696D305991B47C9CB7D70F3B369437D2016B686A5A83D8FBBF4D67288C7B632BB61C6F8D2E91BB63A70EFF4DDB61903C22D620AAF9426B8C639C158E756272D218CD0E5EB04F157A910B1F1B1973741F296A9B8658F58400A2852CA501D12D29BBC3DCB43AB4AD1A478E550CD0516D8C6E392B4E77DDCEC0265A1672EE81076DC586A1F0CEA4B5BBEC686B240111FA6F3F33018BB14EDDA47F79BBF370278A66D3F2AFB0D2D228C34CDE494259D5B420771785D37F2755612FD0F99D79381E02635B3ECE07DEDB75339A7AE7F6EDEE9014DE276B1623E21595A5F2CFCD67C71792CDA6659A48B89C1F2A963404BD795E0197E49E66E148C7C4A92C5C0C2844B09358AEA59C974DD7C912A512E4527E828E85094E069F02CAC747E7CEC49BA7A5BC235EE94348BE6005E8BC118FCE5B2B59A94EF1E42F32524C8102B369D993525E59D3FAA4B2D6EB0EFEDB403DEC95571B53922DC286E4759CDE97C18BDA7137891071CB620D04B2871FEE17AD624EAABABBBDD0536A78A9EFFB2EECC9B3D053621536A5C6E7AB3456A29D874C1E429867BE7AC3F381B3E024D1249872A4D7CD5ED18C9EED612B70B07A473D2CADCE20D5B2D4F50C3C6E5EBF1E3B92F76B869EE782C769C8C406E4BF32C2834D33066AB80200FFED5C2493199A52D65BAE5F646CA9A9E7AAFC702F3858BFBDD134CF092234B4CF28F696FAE3222EB437576E0919734778685280897522C7804BC753CABA4E8AD3EC3D6F8D71F9A6C91B05C72E96F718E76AD39B1DCFC9C6EA2D0D49A7AB6AD62ACE65A08665E661BA4F06D9B52BA573A0038E9F674AE5D0612C1870EA424E91EDAB0FD34FCE706BAB0B90C2AE0BC547079E24F0473C450F7FCBED8C4AB8B64FB1009FEFC8195A1329B6C927A89B951E9C5CA7D1E7998AACBD59B2D7C3EECB69F0F8B376C153E3E42B21EF1C71905C810BAFFC6FD169340B65C8D8E1A4DC2E6D25CF543D57C33A166D4A27EC3FC03BDB72CD2BED0CDA850CB9F59D764B7CF95F088729BBAAAD43FF78D1C29C51FCBBC77651A11425C3416B08649C2DE1ABB8B08746F8BDD7EFFEB4A1801F235BF3E33F873BAE60177838466AF670E18C1BBD092B9FD3F1854510FB0D95F77B11DE014C19D0AE84823CECAD1AE7C661EF741FE123FB37DC40027348FBDFE45FBC3E6A9A556594BF575E28623C8BD59D5150738F5639B1C42DF179C8D26294915F5845D89808F7C48399BCDB71FDD47316CB53AF11104F4D4B984911B41D5FD8328EC81AF2AA672F30E87B7B103573EC7080F1EBAE1F80BB1CF8BCC126282649D559FFC2F36BCB4B6795B8F03EC90DE5FC0DFC14658841F09A90D08A8ACFA75C7B92AB48892C49B1359E1746D82A0BB51E7D1A41308AE212231E758662AC180A17257460FE3426E73E3E43E2CAFADF06A9E2F5CFE57F751D230EE3D98182E7C7D3B08B9D63150275B29D233B76FB4A1ED3C6264266569B60975EC494168345202FDD2073DE9DC829BEB5B5290FF2A232C895997FB6BC689D040D97CA23E13B4475FA14F3162F72C2E41C5D4690AA14A91AA5ACD6DA0D424AC74C8C82288F8E66C59E4422D11A6FB3F6C6CC0D2EEAB0231AD29C8FACB15F54FBF9C98AC658706A81AC463D94B9F6BA30404C0F476D515471BD4DC48114ED61D9E167278D82331E4956DE28E9548263494C12E03D2CDF176D2F7B1D64DB6B3F0CC043C86B0B97123EAAA3EE6685594B8E7F25BD26A31F08162D4F214E9E8A08B6A71163A42C2E6E3D342434B5CD08E8956F8EA851407C8179A62A3B0F76A85B42DA441A40901F29D706D385B4709951EC059E3161C34564C2359575957F00C494474DDE41BBDFBC2D12186689883B0A228E9A5855553422998314508A6470E0B2DBAFD5EBB32222C9DEA8AD123A05A63E6950F72725D76D72E6B1459A4947912054B1603AF445EBA3FA11256D3CA861C8C72797853B58754D86281D027F7FA3A90A01BA0AC926EA49946D995696308 -MD = B30E91FD53C6A9A6EE84F668FDA5C81F3FE21C8040D0B34CFC39D93F -Len = 13829 -Msg = 41E003ED79AD9B3925FA2FC6CA2C75EA191FE953D862873AA7BD17AE7E2E7242981015F05935DC21C20FFC2F417A0905B991778D7E3215BE2A37BB9C8729F37555C307D61A74946034E3EAFEC4A8D80D48D60D66D9E3C042D9B7A366E801F4089E54601EBB6E02302FA41253C3385CB34FE1E54D245D7731D3EED6FC1875BAB53DF9CF6DAFD448DE90B6429EBB4B8E16C059F3104CFAF204A803E36A3484C8B8CDB5BFBE45551B3118643959F1A2B6785E432284446CD4796CD3A989E52EB4D42DEA21EE4FCDC4EB07CF889FECFDC0417AB8B13DDC49617B94AE734FB64C9E0BB73FB2B598467384B08B3114976FBC78AA4F0AE25B47FB41E0BCEA4C747D3ED7E11163F23D792B8D4ACA0E88CD7E8CBE604C2BD54678F0C57B239A617BBECDF0C223603893D45E0C604FF9C45C532069FDC10D0763BC72561C54CC14F9C2C75AC669ECED747A57F3BA122E2CC6ABEC5DEBC707CEB730089A93AA7C17D2EFDC9952E1562A43CAB0B97D5B028C8A66CF85126892FCC8D7EAA6EFFA9C29616532789A67320C66993D1DA789960ADB8555DACADB77435DFE1C10A50C04D1257A42882335C22C36488C4E724C3D90E396DF05C5C56E55173C0E1D22647FE6C91D859A4B1146E5486446F4E55D155000516DACEF5695BA2BB2D7C5CAC171D6CA363C8BF757D7ACF2FEFDBA960BF59E40EDDBAFF626C10FF1F738CE798B44A016B73C7C8F0C407C3088AC394D79ED2416A31AAA6A09E5AA2E8087A848845C3BEBDF46B39F7E379D450916B6670A44529A332A88754362A688B881A45E3C96AC66F7ECF5C1A62CCCD937E8E71A5AD1AD1847E1BD3F756BCA89DAC3BCB6B78C7C23EC108FDBEE5C61FBDC40895643F13F198260CB09F17049D5338ECF1882981AD7BADC2A0873567D12E8CA239F9A7A60484A6FE29C4A425C9805383B54657164E793EE9D02169438001E0EFBC3A88E0E133FFA053155B3188B6A28FD99341E908D8704D6BEBC51654D6D701E71230056C352B333FEB6958E280E22F3547EF8A2B8DF06AED027CA9DC42C8D5A441BF407F4F40AC7DDC6A2C5CE0F022F35878D12614BB6468C2832642E2A91B21239AF1F0A08F6E8D0C747E2010E7FC084F963562855F09A3DB84F84131D749C06AD8019F5182281695B03080597C0633B8AFE8CE369C1CCB2A37B7454551BFDCC084EA7943DD92DCE6205508BB0AB806CE0626F0C887090AE7156A4F291F4FB44E124434FCE972A241D898C68721FFD9983340192AB6B991FEEED7C5D0C6E46DEF613125D6F987218B626FC10AAB857A0BC97FB6B173F7383D244222F67445E44180E442617B5B6CDDA3E96B5C7729CC912D5CAC8B4633B06714DA58EAA7D792B4DBD931BF7F5A3F2BB6619EBB4E6FBE8313F6A422F3ECE9EBABA535F6C64154B12194E072EA044BBFDDEB58A4D148F67C0AB8F57D3A3543A0BBE09A074543259BFAB4598E645480E94E6B9CC9E521B3588906DF2AAB6967E65EB9FB0880132EF32500404584896BF112C908A167C6C49E370619E5DC8842A80A48181B18B5B94EB03C17FB239766299F8FD488E020E08641AC321E03B88B0F60D8D1AF328E3186902AD8BC338D9074634F4F5797B65DF6915C3EF8CAE1B16EBC9C7B398E818F795E3275ADABBCD6ABA72B4C35FAB22E70CA6F57631E7427C32106499A88EF984BA0BCB2BB9FA998CDE7CBA04855117DCF6DF188A48F58B54FFF79E00DEB2BF83700D7B689316127681ADA98DAA8A0D5434EA4E287305B295BE7FF3471D9F73DBE9288A6B48EADDE7B530AB870494C5DD982B04BA5B15862757B35388A11A7122743E82077DD3D0DBD9982C1A1311CB758664B1A1ED0131269E8C176ABC23D9AD8C3F60F0F5A462DD0C16FB8EA2612B4F36D6B4CD3B00057B613468EB0FB3B515724A2793CB51D9D9FDFE932E6CCBD4EDF342A0FEC6DC7680629ED70BC72B61B1F3E7F4CDAEB742D508B279F8BE015610BF85D74B633F60E64464D70BBC2C9E839A3D6D64168E15B525E180B7E8A020E7D2A7F99AACE81CF6339296E54E1A922CBB431EB572E9E8558A6638853DDE9677D0D83F22515D18F10989810D6F78D273C871CB4A6A600C7F54D5FEE6BF24B53252B9EC0356E9938602B511DE1F79CAC55EB4E530C76661548E21257EA625C1BCA015172552D3A8073CFBFA18DF1029FC657F3B50B99484EF4C7468C9D9873ABFAC674E2B9041F8EFFA1949CD3F1630097205B7C554D3607F782F46992A7504DDD50B41961121B9D17E45449B053446F3CDD8E7FB56302568E97107763D9CFC8270942B09C4D32D5DF0854B8E44B09DD5EDD70C55B3A368A29593C31B010B5F9B9F46B6624F3A79F4BBBF542305280EB8CF7F7768D96A8EB7BF632C78D4B38070DF45E401FA3528F1E641714AFF7B2FA1A41F65B31AEA318D0B3EC0E3F8B60F86CED9D45AE32FCEB0 -MD = 8141D527BAEEF6C5C831050B7B0CC09C5F71355B508763D2D0AD0F1D -Len = 13892 -Msg = 1F077F1CB4D95DF70DF7CAC550EDAB6E5BB47AD6DFB228066D8943A5049E1D1CFBC2D30CE9AB1A541A9E891E4234272E6CD4292700748707DC7B94DA4F87A02DAFA1C597DED227D8B69F528C0E59DE196E7F893C22FFD75A031C035F0ACBB74A35DD43DC169BA620AEA54E5AC3B338457C406D6E09844C77852A0A90E5220BD4BB9019C7FCDCCC492096BA386995E53EA9CE4A28CEB9E3C96F18A955C2E21540694C30761C977D30C7AA43D9A9C1BA5D4EDE5E15B62F72565E7823242D4F486827D740CD82BCCBF650132A21EEAD1C7E78B89762E1995CAB9CAFF1C2ADDACFD5B2F06BDF61E3C09C8568FF0D434DBC74A023950275445AF13F827F27E2D0690874296816344C14E3B9E781FD01C5F936144B8DE58242730FB642F33EC65DA6DCE8E2E30355F4A75C31FE268ADCC643D3513538D317B818C58503477CC645CCBCD60E04295E821EB5A965E19E9EECA2EFB9AE528483690ECBE1003B62EFA168076A5E7C4FED5B667812B04F2490FAA7440F57CD068347BEDEE6089040B019D9F3E27E742D09871F94CB7D1E89367388FD775A4E5257CA7AAF83AC6A5B37DDA4411CE5370C1A8DBE73C4058984CC97EDDF808470DA15F73565621372171D3EFAC236E23E20DC04DB56510C2E4B791159476C2FA2B394810C4DEA1ECA31ACEF0F9198AA03024DE8F8F3D3AD80B866FDC89F1234DC1022E9EABF55865F4F893D41A9B7E6F06E57B759E79C7A47656219E9E30E3EAB9B50BC120BE688329D689234739A278DA623A04B95E4FE95925018954B4EAC1A460398E5BFA0E8ED134F44A11A341A4600EBC3636FDF9F81EEE70D1CF356932E30A96F14984D39440968C450165871C4BD45F43BA251B78D87FC3A8A297B8FDF66BDE59494AD519D63E37E46C60864ED2E4EC04100CBA22C1E52C05D365333E55D20F4CF0A4B8181FCD35ED26DD0A6A3FD5C888BC7452FE66A2B5814C6BB1F6F7E0876618E3190CF282E6765B17615EA879F15A248C45B1E89BD7045F430ED46F0F452162AB69F1051C0C18A5C1D8B7BCA3094BA713A1E441713EE257C4EB5DA7C4D25067CDD01752642140E2C3BE9C7F8ECBF2903B4FC9A1E1583F003EBC3C515D1E564281AEED62BBE21D1EFA02E0543BA5CF6559290B8FE97AB0D522E4E5CFC42257373BABFAE6D3D71A3B30970D8D22FFD9D25F7FA8337A178CD7BFE646DDFAC764665FA662622ED04A8B4961610669276B9BBBE6B9E5D7176B51A41ADC8B09531995D3B03F98A54EA06F50225EFC27ECCBD47DAEAD7FB367F8DD9947BE492549B535C7D6E115C61C9EECEA47313173C328F063848B487C42CD8943D4D7712B1222334B1219816B5D156D77E82EE37A3649523C62C37590A503EABB87D14D81AFA0B2F947455DD54565D207E9A62B8E3DEE9D78785264D65E008BBE53684A840356A87B9B75F680E7A95A868CA87331A1606D0A5166EBF87D201248A08A22937EC85395B5091F8174ABC5AAFCA97E8BD4BB329009B4B90C25197F4749B393F27E0EAE5A125365D90DB31EE529AFE39F1A18C77F30C2960F65D985EC22DB0A335BEF05CB4B8FA9AD8D81AF21D455D5B85A6CCB2D0B4D862E7D4E24B14950D6BE7A75862AF805CEBCC1421599BD53AAF4D03BB077D9B4A4F9844BCD64BCAE8BE00EE302E51950085B736E6EA7C787AFA2F17C4C79B4B971BBAF668C6A3894914855C7B5D74137CB0516514673B1FA76AAA43D39296DC810B328C733B2D78E0ACD91E73D2F87C0407B3254C6B1FCBE7D9DA71E50A739B83CF2F2B5174B03EBC1152CD71F43C7B4D008C7A3098D67B48556C3008B31CD46A093C763407D10962A64CDEF0AB94F825B9756D3FF0CB67E15280B8BFF9D34AB3782A80DC7909B0DDE71D920394C89EF22E386E3B25E4054AFB4602E635517D31E6560DF5B8C96246F23099A23E41C3DD12A620965CC4A86A21942EB25F8E6D6262873773C7137E77914665F630F96E862BB2DB5FDF6E67E307C1A418191C4D1B9C9864765CC456F7B01A5ED464E32D5E1A489A83FE4C3DA5714B2CC02FA58A722C1B03BB2663619872F3FFD8B1E71F1CBD8C5EBD455D1A3D3D67FD3BBBB96E583633AB8E94FB611C265A2BAF6747E08475C821AF4590EA15AEA0D576741DB107F56FF3D44C485F7FDAA7423B334D61FD412CCD4A2FDF27BB99D1BC074B9305E56CE997063BEA3AABB3E51B8C5CFF6EF93452FD000110BDD86F6DA7BCD1E1702A3E9EE243B1EDE5F8DBB77F1E1DD5DB9E3B878A0D9827027A160AE94FCB896E4CF7DD6018EF9D8A453C63E7687371B75F068752BFDB6FF44E1207629007D0A44E58E7759228D3AFEF776396FD9E8C062A56C1AA7B8A0BCDC96E529B89C9DFF65CAC9803F60C8E0FF06D9AC456583653F50574389A31946B859774AC97D01233AA609C17F306F793C15B0E46409EC08AB2CD887157DF23F521E7D59B9CDE90 -MD = 5B9319EC7D9BC72B43CFFC59176FBEC7294660FF2E57D93CF3DB6F4E -Len = 13955 -Msg = 688E56B8B5B49FC0AC315B93A4F6E3E0635A99F1F442EDB75D422D026C1373DFD330B6AE15D479CCCC7E211291C65C7D2830ADF19DE8549879E20480C22C0D779E35FBB8164DA97E628E4BFC34F8C0FFA4AE07EECF141462D1C2555DB8244311C33DF4C52DEDB17287D9426C15B6D24DE878BA7002BC55BABDE8F33FF76A5FDB863539640584043E50FBB3369AFAAF6C82E8126B433B16721CE7FDA56E586DEF5F8C139402344C12730F7F9C5141382E2A1776797C76DC22E0AEE9EE58F0A020D1E08C66E8E1890234C21CB50B87111479685F87D9960BB55FC3034687A5F947CFB3066EF38298DB9B8F906FCC13C952B31662575914D3710EEE735417388ADF5F6F54B4F7764D323E9AB02FCEB1DB6ED08C0C4C143032E0AB1BACEC2D2E4B0E866598165FB402B9A85DA8A5BA19156E1C7A300CA346511183663C4EFB9A03FC7208B385C6843A1FEA5AE266DF45ECEC8716F8B056F071102BC6244CB1F9EEAF7B6425E0F610225F4ED020F76B995A7FC60E67DB3DDF0BE1FE348E821C3313DE4B49D8AB21E7E2D41B9D694AB6757353E91A1B7DDB400B27955A26CD91B26A1392044DFA21D84E6D72616CB5E23E6C6CFA96881CAC464E350B80DA8FDEE8B51BC8E4938DE3EC82F1763117022B2C14555C0E2B09B43168068060DEA8C9ACEE32BEED5F5AD4BF71E8DE0DD86AAA1027BB3E18F5E73651BBEF774CB531D8F9B29EDB478738A0A26A0575EFA1A0390DFCD0283C2F59D6B26CF36736134B7FB5CF31737996C60B82811076A9D3B27774C65CBB302E8D087DBE57EB9EE8656B60D316B38849DA4216C39605D32F2E61EBAA162AE241A032968EBC51A04D85DD09D5F90E8D1B91FA4D58D9DC5D40FD63D0F91E184454BEBEC9CE6EB7D79BE9FF403FD2CB0005A3683D07D2C6450B1187EF22C715F39D130B711F5A45ABD51B2986821CA63BA4D274B780143AC8B9BD80F58397110C199235E9B17396AC5A8B7AF9CA9924EADE9B59BAB01304028AA1F9927639AE9CB05EE9A7CF3359DABB62FC224CF56099C8BA7509F59847F1A7379C7A620BBBE26C89A63DE5CE0EA25CB0FD0C7AC87FB03F23BE54DA0C1B09B5649974C8F8A41AB2AAD66E0C2896B6E3DB98327378F1F2E772ACF299FEF024C9BE8A523288C91C2E9D1F6F0D96B9043A968324B8903B50A484BA7EEBCE5D90B4CC8259BA9D7CFE2434446EFE3D8B6AE2C2419C9A32FA0D42822189217A031B2DC58C7D36720A8EC9FBC7BA0D4A6A5FDC4E8278EB9B49B415001265375DB6CE2E953CD8153896E7E9428D39A874E80AA555B6B9383B32EA3C0083D2847E3F40E648A973F582FCE8C89C0B1C4779322FAE9D6567233F761321F2B581F76E3073C3D353C995A06FA9312F0B6E6EFF3E7984D99983FABD835A1980CC006724D08F7C0A7703B686C9B8FE53050534CE0AB3587C5B4A2AD225AA2B36D646FEB483C27DFA2ADF5C16DE133CC08FA5170DC122E4CF1185344BF4611EB2D25150F2A06C009DF968FF861965451369F5CCB2CCE6393DC4D6C0AB9006B53B1B88127D7F9FA507929EDB11DC9400D900A19FB81D054000D14A1E29415EAB9049C32DD5B3C555E75CDFE40DDFCD84FE29E3A8EFE688E0308E775E363AC5B01B3C14E4A3862D9763563CA4A5EF5D83C59B516864F31AEC92D2561EC941E902D3E6DDBC96469304C1BC927F6B42CBC9678841F599446F320E32F944DA1A12178FCED25AE0EE4BBE0CEEDD4D58C950F737A22765BBEAC6737258BE96555EFF37AD579C979647E0374DE3A85B288CC15293D75651DDC6853BA028D41515A5C833271A2DA17EF3F1317878E9A50034FA39603951E4EE82DE46B7555BB16D59BA38F3FCABB60E99A206AC5EED3FD8F83A8041065FCD86BF50A4D410BF8B0CFF79B93FD10C1F6BD1C4A61F0214FF99FC4E7AC4A7A218F787F2ACA9EA1A0452AD174B011911CE535EA6AC273EA16E8907791305A38173DBD8767E50AE4047604F6062906AAC57BB9EE4E63558A210CC9F6F19F3B74BB5F96FA454D098BD631CF3196063F506A8BE10BA4915B1A1B2C8CEBC307636CDF529F04E2EEC1E508E81244593BF413F678D281C49106086BBD33247D984634425681717EAF4EC541E174137A0A49BA9DC45BC4DC39BBD44BCC16DF3B47E04F8CBBF46533BA5E1258CEC77120692C8BB7C97035D8A4E2C8EB6B5E88E7847D90FA85F25D5BE839308AD8248DA2BC71FD11ACD271AA7978188C3876B841ECF3AFF2F769BF4D393EEC7A2FD30DEF2954105D0AD6A892F9C6C450C3D77174210E744455BBDBE9E27027D9A1E56B88520DAB29A8CC83A7D8A4EF3A379E1793FDA2C5C6F5DFF49296FD8D45BE0802352819250C37AB412F37B3DDA5E1D7E2B982CCFB5E19E5E35C247AD2E65908AD62F0BF960C556A5F90486E3930128ED6AEF62DCB6473CD4B6AE01FF8E14ACEFD49F9C0A7A761D04A7B73FAAE9FB7BC0 -MD = 86D4AF7245E0F3DED5AE09D39530308494DB468454839EE7611F1A35 -Len = 14018 -Msg = 717E0A1C7678231002554537C126AE3B10458103B2573352D0B993F62C5D62F968BF2D3C8C5FC82F0D47A57DC9131F9505BC9E8483DDE99FF7BB14C0186FFD0BD089AE2C4761DCF3FA2A6ABBB874E345831D0DD6CA8E564580A9F7A7821BD81B0CAB59253221ED05D5820936204133E6121301771DA58C534E56CEA6E4D3DD6FF33894AB9B6339985DCE75104AAAC3822D1D333FF9B0DB598C3822BF7D40E4A0ED2CDAA3B2BFD4D853C1EC416720842039A421EDD3685F5DE9B6ACE8F9C1BAFAAB5046412C5B346EFF43E82CE704713E87E848B7E01BD8CEA848E391C5E7C14FE889BDDFC9BD3D7CDD0DA6B985C9037757B664B1BA42D1056C7B72BD5B4E68C22C54056A52DE95AFB10CA9CD19BB4E010FCA7F44783BFF78D36A4C54F4AE522A02F8A1A975970C53D83E7D2FAE5CA29F66CC3F3E28173AA8B222F3BA994FFB12E686CC9BF6AFB400F43ECD99A82A83F7FE80C70473B336074E4DB0A85E8CA4988B1C23A5DF410777163617BA76E652D29D6977360EED4BC86CF161C9A8F53E8C8D12C6A154EDF0AD8FD79238E5B252269E6E9D859B1F45B74B664D501885BB8FFCF12CFEBC040BC9DB84182522E3A295C9B77E11892F4ACD9F5A58CF1036C8DD658FF70B873564B4C43030AC08E70ECCA263E2504682D2F7C6CA2D33753111840BFBFE7EAA413D39293353C10AA111F84AD0B4553864E09037F5E620E09993C9A4EA4229E26C89864DD0A68ED78ACDA7DBEBDA624467F0C9B4A6BE1628CFFC5730A46FB36DE4E31289A352A30F5EB7D932A65891778366D7909F07DA39FDF9FFB9D66DBB74F9C5A0802C8DDC664AA743E13A07A16C75C4C49EA4981B948F5D89C5EF13E54431EE6B1B04454E487E7FEBA505C23CE7CC0BA6923B60BC3331776ECCF70F693FFD707B50F5D8831E807674FBE93D2C21C14DEB45005A120E4684E00555941C578E35854AF059B510938CFA3B72A546001300BB7002BFDEBE0C2AD03F41E3B750E39E7E23EC3C47F7CB4D4644A0AFB05531AD04403A5ED01258243CA36E5343C60931D9C968B7DA0796B5CC89CEB0E3092097B35FD7A3ED65CAF28FCCA6316ED17E3BB0B704FA62313E4146838B2E3A91268CE3346B0AAEE4B75B741499E0FBC9FC68AEBDEC57D874B1E43DBBD44E1E220060824546716D175BE59E9FEEA7CEDA245F6E2BC95C2261FE5247D9E74320DBFB8DDDC8320867DDE7D9602C342214BADC8EC62BF62D69B8631C34F5F553FBF9B23A58A5073FB57DF737775872F4F8FF1EF42742DEAFA3611DD5A5454D8B049DFCD1BC490B28C19C04911D7E853CCB0A2990D40BDE4538AE284074874C8F5F0F33254113807CF0C29DDAB2AB8AF49A608C12B1962459D4883CED9AEA2281387167165772B84B73FFC0499AEB290AF8474ABA19627A08C829C0EE77A10C79EEC0E53D6FDA2C91AE2273F4CC0ED30A56C6224F97E51E73748088D9876A7EBC1D53E4DB6BD12BD0235BE633E68608367C28A1D33527B8E3386A48F3A792B794EF1F1FD00F40AA1AE5F116E0F1490123F673801D54FD3BEC0AA39197595E186412BDFE9763DD7D28229040B3E1E9C200CDA380871FB0B667057FD757A6EEFB2634B99B0121E03D0C1A6709E962EC75CE989194DDAFD6C922EF135B62D1388778C826C52AB801D320B82EF2F28AB087C16C479D293CB2056CCA6443B003067CA63BB2B50B0283334914DC932961A66902FEE8FC0BA63BAD61377861704F18A092DF81E35CC798BCE290E582C82C567D2DA3823937281207C92F0988AFD8D263AE5AA725843AD899010A542D0C53284A06672C8AEA4A157D31C0324039723F88951976B028043C3C527784AA81899F40434B7ED27DA8159D0D4A5ED51880622491223096AEB105245FB184431F8D2633B32B9B3259CB8AE752970CC143ADA3611439975989F304C092C95E31CD5884E7DDC7F30C9082A1F6088B1AFE8E6FBAC8BD1195D296D0650F41A4BA16912951911331D442970FD2E93F1122B3A4A22378B5BAD32B55909E87A5AC456AA6DF80AC77BE0DCBAE8A8DC7563EA15C107CC0726204E998442684883635EA520F99C037F53702CBD50573B0715026FE3F12A8BA6F0C9483963B3CCF94107C835C80BEE535B45846DF707EDCEC05EEA5B66FC510C055B0DE7D76300A4276093F2E91A42DACA9F519C78006C1D26AB13AFB744176A6681402A4B2F457F1B75BD9B7CBEA48BF761C5253B72F5BB13F0E51841B385F2E670363993BA13FD36B13D6B9FE99AD69A8765F23D5E6EBB3CEFD8F8594474B83B32E5C930D4CDA829531417A95F7239D1B6E4F96308F0379D9E43912B8EDD022787984AF49E4EBAE62665A11E6DDD101BA2DBDC0E13A6B4A84A97BB8AAFEFA81508AE243BD61A17D78C68A7CD68835EDEF801F85DE6A8C8A1D2D7C9F07D8A3AC7FDBA0EB97BFEA85DB592FE67DA1A9C2B6CEEA9798EC08FC911D7455E3B6D8E6BA6D61CAE2C0 -MD = 3B91FDBD8A05FF2A7F2A321345D591D3035A990CDBCBF52CB318E907 -Len = 14081 -Msg = 2518FC6748EE6578576767A0A56E8D2AC555A3B8760AACD39D1BFC3214CC526FE674B7039200E3EAEB612C72E3DC2F8D482ED672AA6D06E192D3A585A879B67A88E5F4B10D149F3CCD1604C1D5D443904EAB9E068001C84AF8E1EFE1408308860719D2E4006B5DCFDAF3D2811066B1306F77DC3BBA418D3CF24C8FAAB3D4D3AC13A9D7AF2363A85B45A5487F5678E2E0CFFDFDC75639B66061C25629F50DF3941F702FD175D217BF792C20FA1DAC3B7C6D307CC40B6F940605B0C599FDF3475991A0D9F218FDB1373CC334A75CE5CFC0216C5250D0D56CB846479A2458952645EA8E01298093639F2142100FC1F14D563704E439D49B87EB888BCCA2C08D2CF7B69FDEF377C4BC506CD42318C112CB32D79A6CAEAD4BFF251BBCB50281DE2D092E57EEF3F68CB2AF8CCA977A156A48246F5F8A39B2CFD885842327A73AA0F29FBDC4FB7EF02C37A39134D7AAD70810185716FED7D83040952A14DF6560B2E53A7B87669DBAA271CD8C93F7C8FD63B745B439CDFB55CCFE64D9604F9401413D9FE66237E49D00F80662A8B0B94AE7DDF53F45E6DA01FE2F949AE9B2850827154682F20894A05F2725874E73E08CAA331AD9F9E2E3276A81A86C275834D64CB00CA7BE82FB86CADC9A0AB1A7CA293D62548202CF48AD90CA09695F23D9F6EE009A4A7ACCC978C5A4B48C3A8955DC3E4C2A0D1595F3C7229B9223CAB8C0163B757A5931EA68492F74126A3D2DAEEC01F36E923505B9B9073A6797655DB611FF3A5644DD1E5D4F674285A348095438A0A9BE7DF28BD03FAB0433B0A58A33D68FC8AFC61A1A61460F6AB028289A927BAA06241E4B1458652EB7D3327D225040B24F47F7BB80E4F12507074C15F47EEF8A6E91EC52E24F9747FF1ECD939A5B030A837C93C80DB6E327BBF6AD728649D185FCA2D981605ABF490BB27C8606B7B6D3BD3181ABDBCFDF6EDEDD95B53F6D66EC31DD8C4DBBAE81209839E8B63105ADD690FE16BE23A093095BE49671D7FA428D7DDE7491FEAAE344702CFD44496439B1721A2B8EBC564EF1DD6962578E5BE16D609215CA0B4A3BA3D668800DD1C4F5EA4214769112436C1F21D8BDDA6E0A3B3DB83B37FC0C530A08D307A2602E5965B97A3112D62F4358A6B16D6F9A47D77379052063410B546D603F1F572D3737FC42D33C5A971EE03B6ADC411E20EF764EF8B0C137B9283D5E7273CF354B0B144E62C5F8442F494D3E8DB0BBC979D8BF366CC106976B47DCB4B942C69F839C5E1B8B88E62D24E6299833CF6A020F7F6600771E3D7C1170A831B8A431ABC685AC3C92643139E0D56153854517C97541680D85B2711B28FA30C63B4ED8FA73D1F356FA72649311088A2F60B880CCC5DF3FC3990C8CCDAE9A950862FB60C3DFC778CE129B77A35C3B95BE275A0374F658933A4F8289D4531DD23728EC97D5F55862EDC0DFDD552E1B84729611431C4538581A95A6B022E9FF1E723DC6EBED21567025657F798B714B47244BED7508689DD67C3FCF8C32D99FD93EA99D68D665B2BFC3D10E36E3A1E44970744970E847997166F40937A53B46989DCC3E5441772397232491725B965E6AB82BCBC7E88A3A4F7D25B805D08A148BC5CBF1C02957F3329760B3A116B1B20CB4C64DC3D04EB41B40E585F84F6E99B28BC810FFFBA5FF12595E1AC47560B9BDF9C95D688510E91E2D29F7CBAF30398169C4DA290B20CBD11EADB49D32686BDDA8C9B31693A09010B1129A5116B6A4E7DB9D19E5AFC7234B7E4551256CF5DFB3CDC7BC50521CBDA00370232BA4963D8F9852DF6A7F3271429034305F87700CA4B9D2691FCFEDA8DD46278E7B8DF88027CEB4A6F1760907D5AAB19A2DB79C30170FC89F8429181E21D7DA9E8C690E841518DD408B59C5ED9968B663B700AF41A1D9F2EE82DCF017D83486E4F914B1379483ED03C309FE558EDC588F3F0E6BCA009DC596E9E10C252790966C481D2617A81A5B6A6ADAA5D0A4765BEE713DA47EF22771D4269E8E6F6E988707A5C2E62E865C14614567ECD199AB55F31B305751ECB994A94F305064C05D5E3D10582CCFA3B8320FCDD1A156DDCFADE480D0753DD478867016D64966A3E2EDCF7D17C3C7D04EAD34A4E58D5D489BABA02572620BBFED7EF399666738301E11DBB5B2879BBD64016C11690897C040A260D4856E07952F2389CCEFB7EF4EA8FDC20C289F1EBD53C27C40CD263FDFDF03B571B730ABD5D9BD91FACBBDB02FA1B44B6111C50E5DE203CE95A1B0E6706075D2BD82FFA36643305C7B64577C7AEB4E4072F21BFE4829D6701A0EE02A95590EB0F1EC04CD1FF9F9BDDD6243A64A5089F9679E836DC1D68D5AEAABF0060E4C386302AC56A67684A8B54A4EB3360BBFBAA924C2B6D50A7E9368530DF29C276551A7C540CB878BD9321E3992CDC768237ED249A1A6DE547D9EA0C70BFB6CEF11523DB418037D1B90FFE18053747941E5B10C901D85D00DB277C2D2420035EF303C703880 -MD = EAB82E62489BB6F1749CA6749821864C25B1E3FA8439BB4F3989D1AB -Len = 14144 -Msg = 5B4D2985E61AA7145B5E760435FF0D8E12B546EAD825400FA6677B5E44435593A38AE2FE152D8B55879A6FB05D72DA1DF4F5CCAD61712B8E76BD69A9D3EF09DA0B2FFE0A00FBCFFC83263D48E3A263A97582D20D9195B23875176FFB45CB8A942C4860E3CE6C26437826DDCE61D4DA4FDA3878187D551C3BAAB37ED66EB10D71A18EA6E48B96FDE7CC1CECB821E7AE5BE07E34C6F5C20604424591A4EAC3728DDC786E23B07006441BAA56E174AB4C5CB417008A3D6656ABD07BB71787CC390F4E9004476D0DD9E9CB33DAC68A1C6C0CE45514DB4461F7992714B9DD28194856813C9F24C1DC4ACFFD0065B9D50C2662B41633472B25C358DAB53F85198D76C93AA20C7483A1DB21C373627538DB87035EED0E78BAF5205A2BE0CAB925A0FBCF141543B04FAC7AAAEFC3A53F64AB3A71004684A3507535D2530D8FEBB4E7909A3737F9A4964716108B19C491089A01249E4571742FF85872E9FC8E8E7569AC15655BA084EF6ABC582F6E91FE2309D5E4E3FADC554DCD87E118262DC408398AF5DDADAEF2CAFA99F6E033B3A422521F43DF2D720693124D6DA2BAF5FE2B37E775AE3ADC4610807C0E9B43ABF8FA71AB977CF9D3EDB07C5644F8556D849B2C40F523EAE927BCCCCF9FD7B76892BA4FCE9DE71F71FA7006E774F7EEFC201A5BBC694008F8076EDE5B85EA3FFF1867C8E215E192EAA9CC8883CAADD68BE57DFAC989B25D92AB8D53709490C6766AE8C21720E6A105888C2316BB301D392E8ECA464C8694300455571FDAB6CE25BFE3EFCDF08C7CEF99860926AA8CFCE6803DF0A7D0EEA883C2A54862E0B40135C3B3FB9D0EB218E5E1957E45FA64E2F7F8F2E294EDF69F26A8D65372A2CDBD792B7514EFFEE4A38FF2A78774FF8470FF3AF1A1B21D054B978A3F8E16D5D76199DDDEA87FDA4C290B6789067362FA6E6C37CE6660ED905EBD3161B9D05FCEC8E132956885518EBABF8525BB3C356301048151BF6DAA28EF6F125F165A79B8EE314A7FE20F25A7E2AC8CA3655096B1E77C1005582D82F28FFA108B38D1C2510C40F06A5F90195B8B2367313523981F2C7AF63F536DD3DC191A5FB0984A7AD0CF994DBFB8A5C8991DCA74BC1848C6CBCAE6EAADE0ABC4A45EF03575E82A2C3E0BF5EFC19FC9F2EB36C07E42693004397459D555F0D6F267504EB35AB798856300D96025A1A017433CBF492F7F3028381CFD1375C3D2C5B71CE285FBD1CB22987F5A2146043D2C1F26E6E937849935B6D6CD89601894AF6A0A7C94FCC100E8F167A7547D7C72A3B425FDC0EAFF68CD3674F9C07B4539BEE7E885749008CF538DFC3657F3708D778A8F39E5D7B13AD8ECF84DD4C0ACB65A4134C71DD590AAD97D6EEFD015FDE1EB5315038B483628CCAEBD095B1B4203B66095731E6292BD806C6DDE417CE9B564E2A7C9F69893F0B01FA8AAF3712258A3BB070CC502063B09C303EEA0A646A204E1EC0B31ABD6ED56F4FE3CD7F2694EBA27CAA4F581F31254C420B9A51B4339FDC813A446D29C61CF817467F40F6F55EB07C0C7A86182A1472B0BDB9BEB874B2572A2A1EA65242AC5EE41025DBF0D4BC338F09146CE59ED656F93C8D87BE9F0D73909291AD1336103E05FDE9E9BCC77ED75220A2B6339FF6CD8A388153F55C9CA03BE9DB5DA242B9E9F299E23217BC937ADC6FBBA90980A29B619988360301F7D8DDCF7B8FAD0651F31231B816620A295D1D6C6C90643E2F2593A0DCFB700C017F0A88E03D3D6871EBE420B7F435A58407C667EA684D5906C91D699D0F3868294432FD7FECBEC527D213FF7D94012A52C9F818CC19B3FF9F3D834DFBAB4B1A6B069375D5C3CA6C1704AC5CB391A3F4DA4EE3588551633B6B01476F9B13F1B36BAAA3BB6B5EFEA0D9D150E3325357151071125847038DB3EA6ECA114AC55F5DB1FCE8089E18D478D7AE82D173599A02DD670B46794E9E2CE91BAF90DBA5AFEFCD1BABBB8EA210640E14EA8E085A404DBD9FE15DC3CD0BC3A59BF997BC6A10DD4EC8970FB396505FBC17FA5D61D90C989B47FB367F7B2EB17702FD039FE16EC8745912003AAAEDA09CB644449DD85EF010488FB0FCDE2D804A0ABB59F2C4F594B3466B626205703507701BD4FB25AF83343AFF8A09A004A559F750CDF6B2ADB2CAB16E2AED2BDC0481ADDE1A8A79513E94E6F959F4E4265CF2ABADBBF173A897C50FDC2A219D260AFD0C3475148C645E65E343D4085B76CF14ECC839E4F7C725130777535ACB154F74B6738FDC82327F0BE5794D630CC81B87D5A19637468B191CC2AE6B67FD5C3990FAEED6A05F482E5DAC91DAEDECBA379FA68BFD85A218275F44A8011A74DE303007E9F5E955DF052D67465D4A1C1791B88C71DBBB6D14F3CFD49F414ADC26CF8FBB797C7F4D65AB1B260C43D0DA063837877883E87859F99A36FF2185289FB3B265CA1D017C731D6FA6437F954E55C4E7B90155156955D2495C3305EF196F9BD62204BF18DC1F3E8B6BE2C38956B169B75 -MD = 0C79F30DA2A4AB9968D5A7D9969D6C969D689108EBFFEE3EA4E18E1D -Len = 14207 -Msg = 85173EC5329B15201E2AC748E912A2FEA2250BEC952BF637DBF1EC5FF3CB4F21B7952F964E7A1ED2359888803D1FBA613BF59D66B37C78B85C5D82450680AB38C16DD7DDFD218638B208FE4E8B8DCC6D962E3E8340BABB901EFD29903322176FF16F0B9495ADA2E5F07A4FC939A38BCE75A6C63BB2C1E84B971532F473FF8405C2014B4692B8BFF977D1E9A136AAD04EFC79AE8104918734E68AADF91102B382114FA4AA1C72A0C294EEDCB2C7A14099A07A298B65D17BF96E99B21AF1F8131ECE4AA19A4A2B9572E5BA8FEC5D4C0E396359AF4A0428D916C1573BC96BF8EA3AB4688555217B2C660C1F158AF383D566D23A60CA3A5E6D4E105EB5EFBDA273A98F53533C857BEA5E2118A408755AE7458ED47B890BCDA3C8405D1B9F96C5DE3583D00DD2E52461EE0254458B84259C94970E8C564BABF15CB402B201974DBC4CE1E41F3F4AD2946B2F0CDC0366E397F0C0458D0D1F396F442A47771BCD1624C4C04488024436F171953C503605D7CCF389E4B63A9C7BDA8290344025958272258A2872DCB54BC8DF56A64D14234982D3CBDC0F68395558CA4F181C00E0BFB08553E3CF1666785B5BA22097B504DB257D9D2B31D7C586287E7CD8D89114B928C102889CAB2EA5FE4ED0D23D30402A9116230FCF9B3E2CEC9AF41F59A67A0838FD853C7A8DD0495FF368E375BFBB7341C25924D890F9EEC85B6C0062D2B537CB6C3A2500771343AAC5F022132B1EBC449BE993147397ACA538294A1A65475997886B39A173E2D1D5F0C52AC39EA39D127E5C729B9F5F4944DD7E0CC39C4116C5027C3B583CF60411F19F036742308CD915E913EDBC930263F9280B0EFF4576A59A59C50B1E9EB1C4BB0EB7964AB38B2A0992A51B3A737D8E4AB920FA3757B2D5CF2A93C8FE092FFBB1A61CD82BD964B0337C7B8308D5D81A56B3B8A7CE36D3E0B5133DD0D78FE7A42A31F9E4DC58165FE86F74BFE3AC1A769C272F982A77F8043E210C0D98BCA7154598C1071A62FE39F661B9CB208FF348AE88748B9B0E8725373A4A4B33599BACE6876AD3AC47F1125A7B3861F9E06A105DE70B7DD286290938B1195496902C0451BBD79F981BC4222C5045B97C76C0825829212064A18CF3F51D7AAB41A5D5BE06E07750422403C1FE99EC86D7F484BA9469DFD89A042873473A78BABC21B552ED6D442B88C3D2212B7281458F94D04C9336017765CE0291232AEC7EEEEBC20FADD79D7B8E6060B703F6F1CFFE33072F92102BEFB423EFEAB1E96C7FFD376B8015D10D6184D1F0894BC35E87EF7CCF65BF2DA19B71FF9BCA853422E8934DF9276C468989192A3C9263B0210DB3F1FB2D470EB5D5ADCD58BE9CF45D8512ED5407B55596F7EF0ED80697CB20C137BE260E55F2843C4A3F3A9EBE829AE4C9798FF5E8A323A69BCAFA7BDD3360DEC52899E5DBE92AA7C1C88D57668646909A547894C8162A02C2D48BBB56E1472FDB2B0AB204F067C59FA360112CC00485539CEF6348D121B55B2E0367182BEDA26026996B1D47D009137A4C2E37F88C8D0F552D527C99D961071D27FDFEBEEFAB8A5A95D157850B117467C569EAE3C3E4F9BC1B87776AE65D199FE4F9B74B8075BE05B09D521932059412A375B4AA87A61947ACC9A17F2BC4D146A78C40C8B3D34B79191044CCDF7F9532094FA826B75F1BDD7BF12EAD07444FFED6AFBBCB4789758D2E51A79FF167D72DBDC4471BA4A743B37EEC7BBA130FB1CF80C4360A031C57D3E7D18B3EE89F448006896E33E44B0D6A221261BD1BC27608B65B846BE1B46CAED05A29AF5A86441E9C780E898A837655EF311F12E3F83239AB17E1620243E74EE402AE2508A230EFF9A54C4EB26432C0146D3EE5A10238A172D82BF700B361703CC69297F1D9D3A8DEEAC75F79AB7A651D90D60A27BB38C8A6B3E99C72B98D6188963382DC7A3ACC6F9539423E890ECE3A9534F8C398F0C27350F9FE7886E0742AA1373117B8A2849145C69DC8BC723C90FEE65AE2B8F7E79753CF890ADE0530C2D85F57204CBE32D09DE787A7138C4602C0AE3053EB3BD8AF5A97E5BD4CD5F38745B548861A4AD5D8A42D2AA2E536F83CE6E8B42C5386B3D7A8715919C32A1408D5167C2D19A74301098D3E983443651D3EF461DAFFB56F82C6FA9AB238BD7F99B6646E27E9555990884AAB992DF330DF9C4EA14007746C269481AC73105434733A70F68E8F4D948AFC32294CCD5221B82CC7DE4931C8F6FA9064D50CC0A106E53098C676C0AC7F16C345B8ACBA175DC0BEC3DBA7B4C22249C34F3757DDE8229AE2FD00284825F7B9689CAFE4495E80E0379840E340AC0339F3DC7BC7C4BECA4822A192E66E04FA55BDE0C92F09DB5AC4A737A1A343943F7E78D559428840DF05CE9D1FE42D62B226C8708C414DE2D852B9A5BF11D5EFBAC649D53B2288C5300A420111E8E92D20398B1FC8EBF6576A8B62895E54E12F8CD8217024912E86F5AAB7A707EFF8D0F07A58EB574E3DECDFB59F83841207D4E012AC0C -MD = 806C1ECC32CAB23177EDF545BC29C8FD46B501C6A5BC74F31E09744B -Len = 14270 -Msg = B0819B3F045753FD47343E6AD319C3D4ACBE97561F4382424364EAEB5F54E3E81F0547F5CADB5B4806ABEBAA2A23E04F42C85A12442ECC23204D9C1FCA177EC09E0FF5C26B4BD5DFF5671F40A3E4F2AA761355E41140BFD0CA555FF9D9AE992FA4F2AF73D247BEDCA26DBA5F8FF784E8AB9AA0CA2F00211C2D7FB6A1533B46F4380926CAE6832373A74257D17C3EF732867FB2FAB5BFCA59824E0ED0C2838DB181696A531DC1B8DDB09E71304412B79A40FAF232B7BE3C814456ECCE7A6F17A2D387AAC726C4701ECBB9AA69E768B0DF0B4E58C3B481B616294550167F7CD0FE67E6B60912E766EDC2DCEB4A827B7F82CE3B32DA7717177E411B13805BE0C268275AB8D2199438B10C8ED77865338AF458A9EADA0F5DCDC1340EE4BE178407468EA9F05DC9C22DAC40DD8AE2DE88B510417333E9FA1E66C49B20FDA925566589643209DEBB078301FFD9EFD3AFB2D9E98DBD73B50634F42F452F01AF1B74E85313356DEEC837FE627575AE938EBFF9738A29DC81CED47F49147740BFBCFE83D0FFE71F3F5AE8888058EAB93CFD0960AE1F2DACB2DAEAD372383940EE3D2FC9BC79E1EF7D45E58E0D7D885A2F5D7295BF178B626950ECE8867BB4A8FD702B1EC68EC7830E8393CC7FA7EF1088DA7451DF63C59B4CE05BF55EDC654EE6631AB53FE83483CA60FD2F18A4290B69DAE66C3265D25168B6AF1D2810E685F985B274AD20CE86028C862821E29038AC49D8F19199950306D2968BF6F5C97F16B1A35062D1874B6487879768FBE032FAFB42E8ABFAF87138D2569E60A663EC6C462A10C8A87238F549307B8C8B4A542AD2C4E4187D4A29BD9F491F91933F95AA6A837BEC141022AADF957DA8D2F610E46CB54513F13F3CAA8D37124A8D96B7D216175AE89BAE549026DD96ACB63BCAE232A9543D6E6E5953AEB756AACEC488489E4A039B2216CD43813F143A21813DB26BD6016DAAA67ABB1961948F5E8B21455CF60A0991305B5E881E1FA489C48505E828A207278377AB9A042A8FCD199C987E54684E53078369C2560A16764075AD219BC0A49F603BA7020181D0F03B50F4802C4FBFDABFFB17C72DCFB3360AB6CD2D04550EE4903033AA7E63E77C869F57D05CF12FB56F5AADEB568576C4200251E6DD2DB130BC360F7FB8444E02B98E90E4E0E78F6CBFA2C5232DC563B6D319B1A0C2E5CCC44BFE10630EE95C11F35A9B293D07C131957910498169D4AB569A625875D993F06A024BDF06B72FE818A1703AC96F909C886D73520B89C0742D395861A01D71E7E550B24EB769FC3393AA12FB4771F2D2060BC652A1F0A9A3347B9CAD2D141A5F29BEDBEE86CD3259A84C7B369717697C6F03E1DE3E153E4D1CF8D859F17DD9CF4DFFA798B5B85A248FBB2B1D7A7B25692B34F8580FF25AAD5C351648C85CFD9F021F3A4AD8584D1E7DB83CE20A7F569F8753CA6CEF974CF35A1B27606E70080D61B4397F60479DE57F0EE1CDD9B94BEC71A4EBC2B6C0A5A159A8F6839313C284252A718A03C546F235B693A869B7585C1BBBA4A62D09129349623E91711790979C162C31ACFEB743217818AAD57E4E2C3CE34D5608896E59B0035D16BA86DB6C104EBF25D83E18E4EFCB7530AED9093725D44A56859C17DD597DE0E4A27A80E7E6C71F40468B50501F1200EBE2F6AFE7004624E5957B0CBC07B23138FCF8D755E312C80D47E39FCAD6FF0469EEB9AD3106BA771AF6D5DD099EBC150C7557EAB58C6469437974CFB4425CED80E52CE2611D902BABCEB6DFED190E90A42667BFDBD879EAD2CED779CBA01D22DA5C1734206FBF4C82A12908D248A7656C64ACE9F174FE53EDAEA00FB25F8C6F5EB30C04468C1B1B3C62069115B49E55A58F880FD534FBC446E0ED3358D967C8D1B18F814CAFBF6DA6B45A2D498196EDF978C50AF4C48BE4FF8F0C0C04EAB1088FB7902BF09AFB4A9612B1BD02C0C7E83C16924D1F1457E3D54575294EE710930066A7871F6BCD94B3BD0E48497FE4C7CE14B828CD280D6CA9AB07384F51E80608DF196BA663065B8FC1C838CF2B335EB3E5EA303FFA67990612ABFE809FB7FA93FAA13407E9F18E63647D2B1076FCDD68B4F8996C0418D7745E1CC4FFE78B6A5681283F68C67574F2DC27CAF1E832F8CC2395C247047E177785BA448957FB645D8CC13A8536E47B34A538C6344D59FE1061B848DFEAC8D13B83B64B5909CD6E39B17812049B6F51A92C60628D2E611275716D0845B92301BADE364767AAC46C0C680A3A61D68A8ECE51CBD7BD6B3E2E51FA993080B1175F0AA6E29E5F1D4C18AD13E19A04AE1CE6B065705F62974B8C51A759E24477C0293C2E6156A1884A5610CCFA36C37AB910B9BA4EC6F6FB1D764ECAAA4F6648196EB51ADDDFFFB230AA8C83533AF2A7550D6CFFFAF186BF8BE9E46111A45FED0011CD4FFE5BD3C32032B3B9AE1DACAD40A8CA9E03F33BF95FD5EF572E41FF395EB9ADBED8336D9657DB6E421964C83CA09CFA480F40936517FD240184D0946E5D157EA72930 -MD = D26AC23B7638B97FDB0DB9835A3E408E01670DE06394D6E05DDF8718 -Len = 14333 -Msg = 5156DBAC21188CD1D1B1B8708D996048208EB2C79D1AB3B13ED6BF2C8510F1C35541E1006E25C48A40B4083EC18E7040A6AF680BD120933904825B776301E4DAA8B38AD71C124B1D951DD8D1D600472F323859725586B29B4D9CDE28DE4BA2728F3DBD88A5396AB42E42F4137BDB28AC1C6F284DD7AE219B6CDD22260104322D39A419DA2EE05829ECAA5C83130D61DE708D218538AC22D4E48CFA26AFC63D1B80C34F73164F107E352DCD3661A5BC38C5B7856A54BC54E036CFB2057D7D66A6DB88C6CBB72726DA60AF8A7AB44E45424514CA1410F6C26189AF4BFA5A9306E93EDA2AD4D1EB484FB50228B85404012C1FFEFC326AC728F4F8F83ABC87884518A77452494DE18FADD15AAAC7FD7A6166C147A8F67E79545818D0DB9A79993DB1779C1C92F80B9D0CDD20AD34885A3E8083764ACE0FC5E69261E969000A6202A3196D78B2C24120830FA8D08C1592748EE669D09DB56B9B965649AC86BFEF89E26BA2FBAC2E4176117293D1537D2F268ABE8B7AF38C29F0D0F54B0322E340880DCD6674687BEBF3C6E33216B15598BC3414C368D3CEE9F3A1A4E243554A842ECF4FDFCECC6B702EA6E602E2C2A89B2C3DC6EE6911E0441B679C6A48D3083333581E15BD6B3140D2E2F0D8F6AE729E3CAB2AF745863701BD1B16DC26FB5434D20314BC5DDF14A76B9910A79BE7D0EA2F70307D01FA8F38659565C26E4FD0567229B4EA53BAC3C022A285EEBEAF11DAE0439489E5F8940A87D622F05DCE030BC6D79A0E139C128FB026E480317A32E881F5570304065DD4472E0C774E098CF2B1725C06F6FE5512E4310B9AFD9E452344375DD2A9D0B707F4CEB59CA01CD5897F1FF4FD61DF39779DB8507CF923AC7FAAD8C2B694937B985FF2999C9F4B562DF9477591BD77098A50E3482F3A9ECB0DF6EDF314B9AD68134ABFEDC7ADA06ADB12031F746FF3E4FD85D899E8812B3F1AE9A1F198E9047E6E41023D3FA9941D0B8739182A607761D24D5B67FF93349433BF849643DB3628A3F11DD796284979F524793E450806C2F7C8015A3A0413160B5C948082856FAE92D039D262C89521C2E919ABBE3BB45DBD75121C505D554E51996AF9B1FF86DBE484A047CB770A8DB3BE30D68B938384483A72CFEC512E6CCB5B22574265D52293E7721295C40049289A75D06664BD46F33568FF4480463C1BDA332DCEEAB874B8C8169BDEA4FB2E770705D0C711D840B0ED07D423C400551550F4EF14DB1FE64CF05017C06F50BE1DE3BA34B3F1EDD08F231FD9C45107121378C1FDDF2D9FF3D0A2738AA0D2E77A215C3FA74DB5FD8EAD2E4FC6B499BBE63DCBF937009BA9CA7496C775FFC18633063AC6D77061489A7F1A7F29EFEF6D479404C2E13891AAB0F6119806B80ACD2CA8DCF8C177DC4B2BDFC9BD2843360AFC2608CB83170D03AE1F711C913B1FEEBE8D203386AD7590C199915472795FC211B23B09954B067BB183196575F9BE010F11BA9507CB6B6250CF1F5784D8D6EEF50606B8E1A3FB4597F00BA2A34C92717ABB2BBA6A1799E5FF7117C40CDC9B1A6C2D9CBCF92E8515918EFE4EDD9D6FDC79F18A6F42B52CADC5E6C332CE67CA6AD0D5798EC8CE305B69B4C080815AA6C4BFD01B7B4118B30D219501EF197D324C6F2696E70CE0B906EA23324707FF05D2503057135DACF6A4E9F01CA25BE3C571B9A4DB406B6EF49FCD7DEA45A6F444C8EDDF7D42D155B9A3E7D55F7953157B8F9348622B5F1CCA55196AD52A41FC1D2F51B07ACFEEB500E444F3D79E14B0D959B6BB3028E7E5144E5459E355BFD09FE6D5DD96FF849AB038F4F0C67A76A359D6271AC2A25B85E0A81974F1AA387584D73E733644EDABFCD41C82062F6D8ADD1767485A646F1571C0E881C0D5DB6AB06B6CA4476E70BCA809F51437FC523CDC5B94D0B0BC9E70C5201F13EC2AE774F8186D6E20AEE2643B09B79BD54A7E1734C091B28130448B165614175410254CC21CF8881229004615D0FDBC2BEFF1523CD87394BB3E9B931735C3B5B7C5C868B02D2E312EDB979CCE1429D964A8BC14A1FEDE0045E1CCCCB59DE533C8A37968634C2F3286B17EE8C9BD15B57AB44DCB7EB30881946A0AB5EDDCAB9E753AC3338355178F8A6F5FE5A5B32D82F26E753EA65254B8D058E219D99D77A7B3D08BA4801D5EF406E7D5BB9AD8225410F5DAA886DD086B04A3BE5D31E3D174228D8FA2BECD3863F523627AD5CD0ADA931AFA9EA30F93E8B93F647876A7CFDDFDDCA884DC23411393FB34F5A14CCEC27CA8265B690F279BB59B141B6C294AA1D2DB673DF73A8DAFBA933B37E5E5207B8FF6CA6D704EC020898016AC8FA8805094D295D1045340DC335256FDABFE5D543619261F4A4042AD5DB9EBAAB03923DC5EBDA99535B4F741C4B6632F98ED78B741C74A9B9A21CFAF29D536D5094746A0DC577F7D3359211DF9E2EF5E8363F3EC8E88B285F8BA79AC3DF7F9FF0532095CFA37C40605FDA4E2FD2B09525392A2A3592D15480F4B0DC282D5A66D2F13375785A7F25DD3D41EB199E0 -MD = F05F71CCC7FEEEFBA862F3C3114260D34777A51882433785EB3BBD5D -Len = 14396 -Msg = 053737316737C0B517D4226599B0B7EE231A23D6A13238F3AB182FD89005D304F363489357FA6269E9AD7FD89FA5B1CD133AEEE1C1BB458BBA3D10F996E6B295367031AA1C021332B151165B4F09B4180CE26C04DBE96FA8604EE2DDAA642316DEA0D5142FAF0676EE13EF4B22869A5AE50481CD2570AC7294D338469562D97036AFBB34A3EA9685226D1DCEFE3EA9698F309ACD22C33564253FA9ABA0AC584817789D6BD8749949FC6538C3B18B452C132EBAD9E9C585621D04F3019F3DB3D926C633F3009614BABC79CF0C76BF632618E0AD81A112E4CC81C8E2A27292499E9519FDA8BCB2A855F5D912E56B212BA641AB92EEA8B4985582F3261D85D5BC56CF4E2BC4958244820B08FF26028BF783BB08BE73D1E5F3D8070979B59DAA2C364F679E46619CAD2900BE6C8F945609A539B30DA5F4A696A1C7054EDE06DC32370BF606406D2519C0CF1B1C4682AF1C27B91959CB2912EC61E7FA03BF2A0DBAACFBD5B046FDB7667BAC0184CF4CAC3EE6E330971A6AECECE9D0BBBFB2F0AB9219427EA31D20EB536F2AFC886F9A6AE21EB664CEEA95315BCA3D831C00ABD831DBC296DAB3F8582533EE2C26353C37C30AA7108D5B8E8FBAE794839A3813CF08139296AE31E1FA5BEFCA2A5DABFBC0C06CA17D3F3A45BF1F4975A891818FF57F061C3F150C52C6AC07A65DAF08573315C3936A92D3322497F707EBA96211297E5B78B776DBCE1FC1D58C1101E6B02D298FD6AFED7F370B5FB711650258B5F5F39CB17DEA81365437E5C2A304F31A65E49F0BDF838F5451EFED6886B9D89C6D1CC254641F0F7D9E24887DADE0549313EA9E346F9E4CFD24DD57B2478DE08F54B2D5E6AFF9841E80639FB323960979C41466F995DADE4A5F11CBF2ABC26D5DC8DA180BFEB1C749B7CCEA4EA5A08651E65CEC2BA26211CEEF63B22E1B125D69EE1CAF8A853EE1B4E1362AE18F1809C8145B37E3F4EE5DB980B0DABB720BC32008189D4E3E9F32C06841E1A5ABA386D6F405836CEB9E2763796B50CA64D6BD93894413F8FCDAF1778755359EC7A1E78C27654C837F958D6C37DCAA878A55D379910A82F466B49E8CFE767CA1542754ADF6512B55A51A00E5AB4EF65966AEC6EA364E7144AFDF2BD917DBF8EFFC3AF7F5B16E4878334DCF413B9E42A725ED4D769CCA64F81222DC696638D26B49AE6277F87D967E18D401FC5E6A58665A01D5D99EB0FFB9613B7037A332545CF906D63D4CB42567A18C3DCFABFF7F34221999B1B8AF98C33826ADE62B20720E25843D05DA3951C07BF40F108C4741F177E14FA10469ADBCC01D211107BBD4EAD82323B925C400DF732E6F8052A71313972E8D4D0E253980D3DEFDCA6A058BCAE548E9F64F302858EC83B1A082516637B63ECB42412407555641D7B40B0C409DD7040916EF6FA3A15955F912797C39B66B69780996FEE54B041997B08F565DD66A94325A0E3FEEC587EDBCA6513EF35A14F240CCF2136982380510A8A2FAF925CF77F53DDE5A5DC648EE456B53CCFB91F0CB1ABE38422A87F15C501CF72A8ECA0CC5447AB4007D2385F65AAA59B4320091AD8E3379454701F267797DA442546160B3AE776B3FDEEB97DADA970B9C4A20D7A07A417FDDBA75D5938B1750A73430B6AEEE5EC50EC2973A7E29A290A4AF45183F06AD11A69A77CFAEE574CF967E15694E7F46D3AAB3FF2B389DD8654BD34DDCDF999E08EB36643EA4F1A39172ABF190ECCFF21DA86E8FB3AA943150AAC5255D0C63037AE8E4560BB297906E1FDBEC090D366496F204468E1E47342AB3138BBA4E42B677EA96E705DD60F287A78C1699C9F4A2A2E7BDF3B06C085D4C0F163F42CA2C0EE2948F08135FE4F0AFB36FA44FD2A120D1CC18DA2302ED1E73B53CFB56E47A7903E5D21D2D2720B55260094628DB81EE9FEF5E54D3E859E0B29BAAE86CBEC865F93E36ECBAD2F211F3125BE6CB9E31DE3B018881FBF79716408221A6898BDC591A97255A0F8C9B41F01513F969C53D122A26E4042DD624DFCFF9E30562264F84951C609C402F0BA39E71348C7C78BC7A4435FFD525BD5777A74E0123621D5DD8DE5A4A736A50D827877AB0FA4E915EF37FF454B98E8D5386573868E6A739CF19746983E48AB3B2B2AF568915254D416BC089E066552B99B0475D6BEF3896F47D911B78A1EF8E62E57630E6467FD54C9F81B95214B8259E23EA15C677B96F6137C2CCECA7112E1FD5F8D4F7F41190C6C5DA59F4248275FDE68EFE6AE5E3E06A86FD76D32E2D07FD3E8F46967BA42EA9CCD7C805A7CD226877D3C9648166F8ED371EC4E229F9E23C08A2A600852AFAC5781722073C50A82AA2B8D71E7A9625E8C6B3D72934242943F0C418CE65C8CE700C8D57C02164DBF3ADBE67B8EA63F51128D178A9B9E1D2337CF57B9470FAB126BF374B5F766587358DA6371B8D26AD35C8977DB1EDDB9951D0EFC8FBF8C1EAA7DF84640E9AAD84810EB1EBA26E1535132C040B94EF158CBCB0856214F4BC5F16DDECA7FD1E5564972EECBAEDD50E5FE88F22F8156749649221AD8280 -MD = 90263CB352EA1FF4DF8B61D73FB9D298DE7D4F0AE6E7F755355F807B -Len = 14459 -Msg = 0A5D16696ABB73CAEA454AB4FB55F10F67055057214272A3D8E576F79D3F43B51D3AB9C3C427A2E64464767B6A6B47D686B77AE97BCB10FA4CCFD671A391C1C5EC9A5F77927F2483FE38A6FC9F7C648F25B0A599D5A2EF2CC5DCFDF3E78E559E005C82AC69479D7AA0D002A3FE5F15B155E09493F2557BA162C78B4F9C018D01DF421CE43CF97E1902C09A4F49B63E3D8D82C5A9F5D30756687AB16EAFC17DBF5B980487C500E0BDABF17E913F0713A96F00104DE8A08EE81F822ABE016C8414E342925BA1722E122D1ACC812FB524EB5B9F27EC18E389A89969EB9A7D37D76019AFFC35994BFC11446643CE7A016AC5CE3CD04C5105C60144BDC7B8D838D848BDE0EB6B383E2FF5FE53272E684307FE1EC69B6A4BBE6C76B52888111EA0CEEFA4BD1A8387A32C0A1D6BF867ACA6882AA216A3524EA8A836D63B6FF8CAD5138DD7560850F6B9DD906235BB87FE0E83006D9A3CE5728AD49A457FDC7315A20CFB07327AD953BB998E05C3207860E85E8DE6186FDCDD4F265129BDB04655A8E5652E9FB212C719A3AD4AC3E967B46D01B09F172EDA70920B43A0D0C12408DFF8F0909BC0E7E9D0F112060EEC81FD48986733CD3AF29C4E265C118ED5CCB17B6F1948C2CB8B09ECC73EBCA9B7CC5B25EDE9E38CDF2F4955E4DA6EB73DA5F89370C02849E009EF2B0DD0C3127E332137A640B16AB70221C721BEA91932FAAA881C1FB3B69B0C717AD69987183313B0D9CB2C161A3C36D54AE0C3B65C7A9BA65C04BA46F3E76D306624A68025346F17F47C162953084634E9C0BDEF626FC8BDE80621FEF0E1437BD2133D93CF92078E4A5BF790B752B6744AC86B83F9983BED9CB14311B9D6159E8870B7E25A280ED17E1E19184CD7CEB9A6B004CD57B155148D1E4B20C5A6CC2E7CF7FD80D67C965E1F7451D69294FB5211A7C6717F10000C25653DF5DC76CAB8E28801AC25DA2B6423D793CC092EA59E15259602A05E01A1A4DE59F810F64F0F51DB1BC95FA3B90299A5E0DC767761365CBFF383BFF775C7C29A55D6CB3DA22EC04B4F2099D9B5F01F341B870CCC736A8FCB842CC5801C447DC3010B0FB55C6475DBAA14C0949AC0C905A2DFFAF2230F0DB3B42FAD63382536AD6C06E9083B800AD24F4AB312CCF6BAF517AB7809C1DE467E31A483FAF4CE2C48A464F59385E4ED1BAE8D93998C149F7F44E19855E15C3A9293CED6542AF88FA7219807736FA32380ACF59CDF18729D47CA7CAFF23B11AC2BDC76A5E1C8CDC2E02C987DE29609ACE6825901BEFB096A75E41D3A213A7B817BD8725D5C707E9799B0C50E37626643E6814E9B8551846AAEC1414D895BD22F5C761183F35828544437F2D11E851D9B09EEF4656ADC74D8D0F6B838013F918FF0634816E93A437F3BE4CA15E990DD9A8F0173C3322950C25C422A0EFA2D0C4370205AEE2E745E2BDD572AC4F8925C913D63D67FD6BD69A987D343DD931ECE451A60EEEE2101FFACBEE98847854AEB0D5A6D982E471C93D21A8AF51698EBC5394937105DD4FE05FEFE6EEE9FDB3F08B79BF7A271C89616415E13CF5464814F506B6E0F21613C1060A3377D3D5CE4600A2B3DE0D995E78C0CB1E8AEFC2ECD77C9F4AFD408B4721AC25E6BC65B885F2AF21FD08B572A79A83BDEF949A60020B60B4DEB4B72FEBAC07D08BED1DDCD443459D4065B2EC5C7A9DA1B9D5F5DF8ED61B4C9BB1EA487B5ED451FF270D7B3F1A63AC4C9B97903C77732D9B931601BBE31ACACF13273438B9319F7C0FE8CEC5C9CE4A4971BD80B964D984C3B04CB30EEBD27296850EFC2A2F90CF33CCBA187C9E92D607807085E134684E4CBA079282FD821F5DDA996F142AAC9E372D2CD5CCE31766D90811B1DE1706BE5FF5EAF57C4D90B0A10FE3CEAB54E6093ABB10D4FEEFD849902A31BE2EE566ED3DBC2A33715DF5C7F6ADD978AECF863A70618E3BF6D6E9A85C387657C9C738A0933091F71108099F161480CD6493E2636FB3604B10790784D449FD4DFE1963AA80B71A9500E663CCB3C84A6D01E4CCA7BA3A8284189C5E473E2C61AFFD4279025EE0BB822FB517A028F586CBE4C44EE1F54FCD28C5B923AEA7A8192D90A91050566BAACF7BC1079AEAEDBD28647E10EE0E007C0A9C83612C56E283F2C6D8A8A24AE9CE9B2D8B0949C395933DC0EC820254AB0A7C39BB6CEF6D96234846087A57A58C7637BEC8E1339041FD26EE18FBC5C4E1F2931848A7CF2D6372BF5BA8EB69E5B2A80A4DFB3DE31F48C5A155D619E5667F7E9778FE4E132B969781FC8920F8467ECC8CD6C97D26FE50476442A3C17C94DFB239042266B5A898F1CBD7B5445BA97DC8FF3F11FC5D3920110CE356C3E308F05493944F15493B969526E5F7050F85DF7713F8304C7EF4D16D53D0E80FCD6B5B4216F754A0F821936394312956A3C9B3BDFF90BBAEC343F903DA24D9361FB8F8CDF5317B38279304CF0774212CA2DD314A945018EA71232946A3A9ED6747E1005EE01AFAF7CAD9A14BC2E8623992CE764DD4E953D8A10F3DD1CCC5461EB8DB3E445CA995BAF7A667E8DCDE2ADA6F780 -MD = D1FC038A8AFED1B3314BFAF1E6EB14C6A52A14341A0D3A4667251BD1 -Len = 14522 -Msg = 4712C1C8F64DD85DF8E259CDB9CDB188CDA7DECB55D920FEDF0D93F0363764D5FC5F7BED0FE30E219E5A46E7BCC1E6BDAD8AC6B5C991192BF6116939C79C5523D0202D631EAA561E6AD3E4ACEDC95AE129E76A2AEEEEFC6CFECB05EE7C57F60883417D5DDAF76815099F1883A50E0C9D6F1DE2B91BF87EBD2AD8D564D04EE19915746C60BBDD709B1BCDC79FE481BF27F30B5CD2B317599D1FFCF8D02AA533FB5F75BE4800F332EF35A6A4807F741F1FB7B24CF33E45761F7B79B86D6EB0CDE2ACB9F88773934B6A5A9B7068E02E1619F58A267180C7106E4E1B127F7EDE323B06E2D3CF6FCF0578BC20E60646B5240E9B99C7882E3658F7A8D5199481C7B10234857C6B60C74A80DB101248BDA3F0A8C2A8758B53D0CEB91EEBD4F1044A2A9BD1B41A7C7BBD82DD881634209470E602E119562A3C4CA148CA9BCFF34EFCB3FD48C40977BE28F5DA58D42F56C593B8E514B9CD1085F02E6AE72BC8C8B91F25F280E9701431A15225115B900AF30B321CC432316459AE8E5919C75F98C0CE9124933725B6C0299F6EFDBD77B801AB71F1DAD9B085EC8A93E3423F195E1A411350AB04BADE889BDC57FDA567091303A3B3F326C4644AA6885C429D21B96AB5DCF5F84D6A0714E86FD304DA13384369DDA23D6EBAAD9B0E276DD181365CBFB050F6CD8A417C87C9072463D3E5C46C98B707FE80C5C9F2087B84EB10C572F29032027DD72AAC3F69DD4A529914D3C66A23ECA78D23F5BCC4FAD4D9A008E875F4FCC04727459972FC4F0B9C91EB21BA9D6D4F43107371EB2C2B4A87DB9015B422D0A7C0A8C5D004DD0B381F019306B6F005A1367B7B59888245154EACCF3B4EF922DEAD65F6AC1B9F4A1FE031D0BF1E9F82FD5AC617EA53119655CFC442E9F8773CFF0E23B4431ACE511F46CE364B3D0A09D04F2920ACEE576341BCAB7ACB39B7D1E3CAF7F4F55F46B67ECB1BEB7D1C885B05B58DBC96A1EC0A328E19D8EB135FDD57CDBE73B9D16C3CC860C5C36A6F5F9735E5EFEEFC848F19D675A873A0EBE8B6330E62EB3B16D250A25707DAD0B9CC1D0CD423D6AA07E7E08503EBD072F6ACF5E5CFDBEFF9B0AE0491BB3664678DA2675AF143B211FE0328A8917FF315DF0BA67226393F325F2D7AE4A535AD914D0A39E68C1F2C0BA1A7183C4E0BDD2290438BC6E811CCC483CBCA07D38D6433B563BB1E1A4AB6C7784A7119DB577783A7F3936F2641E15846706EC2EB0FB95414F8256691366E982714B65423CA077881F327CC4C7EE08A3E19AE761D91D4CFA60F7D454376FE6706BE1BCB7A5139893CA2119EABF8365A8E0DDEE843B8E1B771709FCEDFFFA01D45859DA8E3B6B72936C702E29EFF1F869EA78C6535A0BB4631C6DD7AD3C8114EA67B1B47858FF8296925BEA1141962683B20F0526F83AC78533E361F5EAB0E52FB0F30F4CF1CB4EA1A843041F4A5CD3DB89DAB29F4491D4D39E14A11E1A2870F9C0854900BFDCC409DA6BA291EA470C8CA9D3B3D239761B78FF23820077C8D450A56FC99BFC3153AA4C382510ED4909ADE2B808EB93F30D59D8C8ED500079A815EA035340F5374FCF217A74A621EA2F0ACCE337D6B755D4A563D7BF5DF99D09ABFAB5F3B39BC164517993780EC9E92ACFF3C8D26B3A892E54226DEE4AE0A888EB9FA807DA4CFDA1494C63B1D599ABBC9286D45EF2C758915FA77C90537386FD3739DEECEA263D25B079E0E63AAFDB4D65E939ECC55DD2580232A5F9087825969C48447C6E98AD5C81069F834AF657B0AE61D12FB3291B73F890C6018319E8DE00B6F2ECEF142FFB1DE76FC6401AE9CD509232F8BD7F8484726C438DCBBB119CC00C8898453C7344E66084D8DCD81084CECB6B4596F47D1080FA558F82D26A26EA739DDDABE49167208544F6DE6D87BF9D241D5061712F6AF849532671520F5BF02607957DF1E1B6DFD45B67C1188BE5797E211D8F47CBB639DCAD64A0FC889E8EC72FDC9977CDBBB352538517407C621B9C61BC0C3C465D4557280A97767BA6E9B7B0984B416517BA0C5723E49054EF68F3D879ECA6ABEA9833A119CAD04CFA58566CE91CB494CCB078DE399E2822AC0C4E87EDFA263920A4DA8BEDA0666A4AF5B21AE2E059F2F242A0D2DB4D146B3A507D8D60C6013793E17B5A9890AA564E3BC9EDB48BF8E549540E53BD5271E239730565C65475E0234DF5D457898CF2AF45DEBA9CC2A7D7D3BC0BBD14180A6634CC31D9162616E08FDB8E791E1DEF6EF2C6E84272956E7ACCF2CDB96FB4D0088E93FCD7431A01A79893398DCE4A102E36C81B41627B8CD7A5D83C9ECF9FABE099172C822B3EEA4EC9C572F1EBDD1A8726F26FC8E337B5A53F9EEE0F5D3FB109C90F9CFD228B3A14480CE2932FF3CA6425E2667508B698706C852D89048E5F246D545AAD41E36E02D7C6484BED27DF458A860FF15A8625C4FD620025F6FCB505DF6B1146932D739B14B5AF0C7735E09654EBC28E3ABB3D417A3F7118C2C02B3A8A97C7C2AC30106568644B97739E8894988A00834267A41451D1B9E72C7292074BBBF7E5B0932DD2DC0EBE885C3B8B6E13254130000 -MD = 391F819E225352D021E00BDBB7E24A6087CD9C81546BFF5D21CBB7A6 -Len = 14585 -Msg = 9F0170710CF76777A0C36757A6339017EB6FBDC4875A51EE593F137C9310A449D519C6CAD707CE97A3B5C591D682BC65E24EFBE640474165AA3395EB885FCE4DC9BDEE146060ACB6485BFA40DFCF70999B7359F05485B1213DBDAE61835025021EA38E7350A6480CAA5C009610DF39EDBF8B9A54F5120059BE99F98CD6545853402023E17D9C0105FA4188B10A72A1BC28DB5AD6ED007AA3A06165427565F3801D4778C50E4A07FA8496BEE26EC23CB6BB4F04B9AE224ABE86E6201AA2C361B5ECD85139C541A4576E428E24471A797745EF27ED5A712C282F577E4B41D0B44F6631E61CAAC5F4CE65E5D02AD58FE807FBBA32DFA71E1D5D52140DDD41AFA55AB2B66BFC4E13075218E425BAE0555F93A68B0D42E03C0F3B937DC2E73D2F02E5C035393D120A10EDE4AD681E4D85BE5C920FE5385764ABEA99AB829FC43B52BBDCC7376CD01B1AEA78B32FDEBCCB25EECBBD47F291647CB447E5FDD2E15336BE3F5ED7D76B606D7FD4B2D3125CEBFFB3D22B8F63E1484DBB86A8E1EE2661E275AFFCF5543434369B5EC528CDCE4423DEAB0ABC52AEF20A6F0E3D1F211DC0DD529BC3F06C18051A56F9C0CCF121E340A8A1D6075FD8C489808D0FAB2B6081B5DB2C3A3DD57A640BE10EB0ADC74CEA557B95CF10391BE956260FF1E26CFCEB915311BCE2801360F159EEAFA9122B413A8BD9459559E23C77EFE9FBA188F24E5CEAEF2230F4388531D97451F3E209CE5052770B5090F149C3608FBAD02A7416FB9BADE7C8FE58D7F9FE1CA934AD9A888D5236AD8EFCB8AB1F195932BC981C09D1468FD7A93B3649CB5FA8F4985B3CDE3FDC28D1590599D93EA24D18A217FD758CE7230948FC6D744CD3CE5844E03945EA8DE8CF9A3731606594C497389B70A3B69DCF89B14EDAB23F5BD6C2674555972A214BC21DF9FAA72108A82AEF1EFF7E1F7A457B8AA6A959EAD2F74A92F425FFBD6CF7CBE1BBDE5C60D9056CB40A4E42E9E36DFE3537F96E1A05A6259844C6683A8392C698B41CB49E3249ABF5D45A1C731FF20A1E80A7CBF0A5F712FAC592A1148FB9644223159F133D95CA63B54CDE5CBE25E90630C7579A77D93C08F2B2BA1B298B508464E94C07B53F77817E34042DF1B87835660968AFFA13CC2FC517790075ACAA18C6CCFAC6CE003BA884341237F9C6588538D341DA1386D232E9CDD7F8AA0AA5F034E65AC1E38167936FE70B7790E3F433B0354F5A9835FB21CE72E270C85C24E8B003AFCAF6EC4A520462497880A3A455752A7394D89D582C3FFCBD9B80A24305D36619D5268DBBB55CBAD869E3CA3D75BE791EC39936A8E2447DC5170D4F43B00A94DD94871DE87C7D9EBDF78FB942B017C53970C8BD46394EA48AD9B18C6EF529B1C027570DDCF74ABF62B3C97A4E399ACCD8D50DAD7B2E2158BAC223DF04210B73CE1DEC2DCD4F0CF6708881615E14BCD8D377F83EB78A780B3FB047198A0961F598172625B0A246BF2A16421A7CA1E5829A8A3F3A44D15B563008E5EA25DD448842026E58DF1C1EFD0B88E9020F2FB849AF45E1A41197677B90031CA42306E9ADDCB916A807CBB8CC996F1DC351AA4AABDF75608DD0E1DF498AF5233FD3B67CB4CCF8EEC1245B94A0E203976D1234C34326BDA2DFC078EA02907103F1473519CEA29D06F235463F4895FB2A783EBF6D250CE555AAB9F95FB612B6C3B467139254F7B54F6961065DD214D142528E3BA07C61530BC9E0CFA3269DA4991646A0FDD10188BC6714D731AA8B34269BFDF0698DC524C34FFEB2119507F9CCD44D2A28F228DFD73863D00BA982FD2A2E5641FA23C4E841BE1335AAA34B8AC1D29B9004602C249F43280F1C515255E127D36323D34EA47F83107285D8838B295EE8F46B23EAD653694EB9575983D9289911082DBC5D6ED9A7862D04AC78F7667B3AA7B6CD4F2CB9E1613E39DF88B4D71D1DC1775EBA1E546F7FCEE3EE377569A35A069DB3A59DF734CEF934B033DC520A3592AB9B337EDA45A3A8B6C1206818AB08B0BB74D4A9BF3F0671AAA6EB3BBA25D6AD25017B6748613AC34F3ED5C6B2C31BA86BF261E735AC2909E80FA7AFAB7E96949E2A8760CFACBD4AFD13B03F37CAFC0C153A67B0D78A13F04847CBA7D50F3BB864796C3823D7553FCB3120D5918E3687D37BDADCA17891C9826460DD9AA7AD16CC9B547FEEF68FDC1FC1BDD11B7CE4DAFE25B6D98EB7076E1F8600DC094F2EC59E36B66BD7ABFD622C37DA08A403DBF3395F1A204B4BFCF5524EC2D4F1B2C50A7F4E6D6A5487B133CA95DA1FCF151540739681B6A8440B8FE3DD7837FCB5B1A17D9529C561DF6B369CADF21EC518D254126C892E9A2B0E95995965C205F73A7041199426ED31336C195402846B2309EAD7F3D61FFBD6AFF46CB935C151ABDDAD3A0C6EA30D577DE56FE2F744765BC5BB21114F8A4AFCC4FC759681718A48FDA3F172CBE80FC4725BC8BDB4B5FAD7789FE2EBBDFF14F86855627CF169F147F3227C6DFFDF392750C138E5583C22C972F07E32F296C6643DED7D7E153FE08E669C426DAA9ED0A3209E3B678CEE64A976803E81018210340528E96040E480 -MD = 95907405CF3EFE829AB26B86311FD36F2723C8F3887C42A200F55201 -Len = 14648 -Msg = 523DE8B1F4CBB65E81FF0B6CCD6EB8EF0A0F0A691ACAF4A77F25ACD2D66AD4B3EFD25BE70308853C094412A518A32020E3020A9F6AB32F0CD60EC0D7A194917D6C457B168A54A4B46F7B0D0C71BD61CD202F4C718776A701E0770B0EFA05418770F98E4E79CD066366FB3300E8BE359A98B82B764BC2FBBF59C7E8F94A157B01C6C7577B1428138CD422BC47330F8ED99F4C0AAB0D984287445539839389EE08D6345108AF26ADED0EC1D7BE774CFB8C5205DFE07CF6CAF8C1AFE37C7A2E4FE6013B93EB2463DE4E0971C7178D6A76B16A0E8960C984CE8BBE71B3B466EDF0445B835F09414D01F14C7B6167FF78FF118127BBD5F812C27FACD57B3B120E2BCFE87315C7A92B82EF5D50CA14A7174D1BEA7E056523E055A6AE42EA3765094E5544E5ED003C989C2F98F38A17E3DDA74DBAF9C669A319638A2698B0E4A611480D8AD3CF016792ECD1034925F42B9811A7214D623D047ABCA31997DDEB03275F80DD21F40DDC80616E7AD3D481E8EBC0A1A6A398E16A78369215541ED10B75671ADEB1AAE6E11142A1CF665FC1B7332DFBB0E10C21A2B48F78E57319AC9C58DFA8B1C2548E2979EF1ACCFEB215AFCD6C2C1B46FE97DD491758378330EFFC7283661D2CB84FA05281E9E517408508D24D042E7B9BCD34DB87CE972E4CBCDB98615FB93093369DFEDC782F44BCD03E81CF93051318B2401FF29F753A264BDA65AF199E3FCBB8B5D39C838A67D6C7A3DB046DC56C323DDBB5340CBC229E47CFF8C9D29B7A49AC0EC8C1440AE498C7D150EF91C29BEA7DF3EFCC2871A13A1D72D139CB4603D9FFFE85F6DDD544850EF63C3944FB35DBC00D4308CEAA6394B6E23F650D323F8F7EF50DDB68F1486EABF989BF44451F620EC9485C0B52D1415D3C909A2CFBE9D77DB19D069D33BAEE4D77292E63FCBF65C1EBA24BFFDDEFE95211EF0AAF8ABFDA9F94445E582976F986F5382CB669506AF2B4A5A0C43000A3C72C5CA4AACDC9D3D39FC5C492A393B6C341B86DACBBF6BA8B465100CC683EDB2D9B9F83EDF9C6A32645F51CC79ADC22A52A007BAACA618BE35E356D1FD1CFBDA73F1ED09253039DEF609450FD2D5943B9CD49CBD52A318EE3510D7CF3FD8FB388AC6CB9C6EEFEF3D3CAD8501B91CC04A888D33E16D6A4C9666F5F5F3B257193F2B46DEDDE11842909D8C48ADE57775B0B272E2DC9CEF1A083EB2CE58F4D1F211922FD6ADED1B82FE6F5B11251CD396E5A3666ED9626036E4E356231C146BBA0A91AFD3648EB7BFE0B9C14F15AF2F92309826F468945CAD0AC422DE3D6A773B76178422107CE0270E7F580B5CCEBA82CA0184AAFA8341141E65E39859885768FBC5CE63B965A0604B659E71D9DA2C7A43646088D8071D76926163AAFC69E25355BB0A222B7B2DA9F0A20C021ADC462E905A9C3BF31C16D87FBEC3F014F3957A720F1432E1741553092052FB58A198640479ABCAA51B104CC93E2636E1460643EA812BD44E819C2166EB6B349BA5BDEBAD59078910B5C22A56F004B8D9E4B1224D8D204B48ABE7355548A402736C5CB110F3A1476ED631FF168F4F3EFD89B38DE4751536548647523D334FAD7CC2D142973F2DB3C1FE08FC5CF83F9F2BD2DAA524B37864816AF29EE05951FA09D1C51D9D14EE4F72FD7BBF18B1A724FF5A0958A063947C430142AD2356E4400AAECA442E163372A8F1CD36E2DB988E7781165E5D4E7074ACE40858E8370E883694AF09977704347FB735C8717C42BC4EEEB2AAA50DFE637C640909CE379BFB9E2608F88751377038D1669F248178AD580A908D7A1B8DCC7E53E01801F1E485B5893F103F03E0F53B2B1440BE95644D85AA7F6EB7EDFBB46652196695EA23C08573397B111FF909025E20C5201293B4D223BF7AA01DE7CB28B94714370434B9588097E2401B62C7A0DEF1FBF89809E810749FD3CE9EC3C07CE4BF4C43DC966429B2BEB4D711FC6C448A12097B36F1E6817EAF4937A983F85D9CF3E62CC1B2AC6AE1EC9EAA8CD8EE2C3322239CFE5DB3D4E8786282E630A7D259C2FEFECA03031C960A66A71E436A3ED6F2F3CFAB4BD77C660D14205ABF606FE561A346F7D849B69475AC9F6822D80B9A2E56D5D495E4B309B0EA963C9FC5C7EF94B217EE5337989AFBC7107D233A8B362AC27C4F69DF9E191CD65AE97D6EB9E5484EB6F10349575E4CAE51452380151F902415AC9CF42C824EB23C9541D2DA1C26DB85F53CDAFB06A12B8393CD580A8E494EDB6710C720DCAE30832967E33E6303A92B1DF0841D7724284FFD2E00B95C6D623B168D21AC1BD3C675EDA33182A2C22370998DE1E5EB905372CC6EF32D5B765F5C94870DF4842D011603BE4CDB1C227E41EB2F2E8542CD325884FEDC9C5C7BB07A92D20D64B836215C59F162A3DA8BB67D6FC13FEF97CAB6ECB8A29E431A6519A6261C4521CCB90E6E609869E6FE398404AE047F64EC4263566DEFEE66329DD40AC985EB8A08D26529A544891B6F57CC235C63C09057AB6B6ED720EF41A3C9AE65768B43F6DCF4962A103DD93C213171DC2C9194E43265C689B49331450281A3FEBC618D1AA4D65A135137051FD46B568CE294C89 -MD = 2C700B4059916AF3F47D9017F5725F42B0D51895331F090048C276A0 -Len = 14711 -Msg = 2909B475B76010B0147513112F6C59A2644683C71C454FD6F4A93BAA917BF206608E241499BC69F41377603473CE45F9F6EF8E84AE40F9347805354FFDA581EC106F79E72F533B9AB6CF19F66F24B0ADCF8D7F776839F9E079161040FEC72E1B33E400BD13A47B6DFF45635757999D490A9C929A0D09D3DF2B39DB567671D2ABCDC80299E41EC1240242B74BD2E100E57B93E23CA83EBAD5C5AB36022BB9710659C78CCFB3E66FD44E1A4FA0B70887FF5774E99008E43625B4CE140E5072203F0007046B1909C2B09877D06008430F88A3865F589F04090A738F3B6F88B54BE3DFD641CCF3F46EB5A161709E6BC0F2C49B20228A1C5708BC132713D5403D583FFA14C1156441A56F04DE4E0B2BF988B12795365BA3F4CF47AA529634017C596AB0192A30C22E61AC0AD287176DB6919BC317D9B399FE9F213B131475E5CA4EBCCF20F5BD26A9354D3C828BFBB57C716D2AEB41384D81A923188E327519564239D6AC7452D6DD1C04912305BE98077E9A76E2DDE11A3C3717B8BFDC29FB59A12D52C634BEF2D314ECC8E1E7A805B8B8F419D3AD415EB98263B81CAEF51926151F1075C99439C00FE9899DD2F68152D06CCBD0634B00E6B5201C41F158A5E2CEC6F1C044E27976D2DA01D228F61B72739F3729CC3E323E94BC46A3D7047C711BC7E732A5331ECA17125EBE585C35DCBD5241C4FCFE783E34F57F934CBE58FBC99C517D9C28879D1DED3F8108484988DC3CC44B2D7F820BBB9379045089471493BAB06443E98C44E7A80C5EAFAD83A428D44BAC06098BC2154E869D59CD45B106CF04A1B002E80FE7A07F1F9323E421294D86C37A415A29B20F17CF09E63645F0305F0BF59994F82E841DF05655477B54A84F460BC2DA269A8BA29C6987634D816E90B6F8D9656DBDCCD59215E6D40C5D3A26291DC16B9C6935CDF0582FE9B2664F725927B3D62479DA23F6D88A634FA2122FE77E2CCF088FB62AD16212BFA2D0C23BFAE9CA3F447BA5F6F3D75DA12C2B30704DA21F9E5993B7056C8DE2558EDAAC10D656CD23E4F99E98882C3FB4A9BFA5D0E1023C95AEF6613CAFDCFE5D0A94BAAF2CEE35996F07E227D730C3F970A2A1239401DD094FAA6F4318D52206244C99B10DF9902FCF3C45E7729E370C24697654909941DA2F2269D5D877626BAB82BBBEFEE82FDB8FE9F3F4D2852F49E59D5E00E8917BE781BE005E48EB8200A1C667F619BC595442CEBD39D854401493B42FB78F37939913A8CFE7B999BCBACB3C8C3FE371C9193C6BAB9605D975C2789955FAD1F0F4C058C0C9D669D8F9E6FE8518EB3634392E71B74F76C8A296C16A186E5E3054280BA6818FE0482403A6F975BB525296D7077409432B477DDC516EE4EA3BB92775F1233AF3A30C3595319A61379D41D393FE6D8E9CED7CB4B7C956313241FF842DC0F1BF06AC8CFCD58BFE0CE43BD3DC09668EAAEE29FDE25CC42CE3BF661066EA884F627AC8039D186BC9E7AC916E0EBB92DBD7F1D45B64EE411CB4C691C8727644DB6CD5269AC824898BB0BDB85153754920E24A087EB571719688D5A57F37D28F7A71450E1B9047F4BDEB47A4CC40BEA315738CB9843A457F301419AA3BB4D51766AA72CC40101253ED9FF953712352F09EC8D2F60A111415BF475322A1FE5BFD5D474A01EB00D5411BD1D95871DD57ABF0E96C2C7990EDE9C82BF6E81A5ED3CCFE27AAEDBBC0178453B858380B20866E5B18E15A8E3E6A06BC9CF0EDC6942B2D47FFC54F436D921F4D921E477D61804D461888FACA35D0E1F4F53B10754E54DBD003B24FC01DF5F0084C0C870A981AA30C47F12862F51927AC3F2C187F3BAC1F83092A8AB4ED7C5596B067C7298BF23D9DE0AF9E2CECA2F28C3AAA0571C74F6AC2E43337F2D8F3E50FD744A15DBD957D476000D8242BC98D93DD506D8F08D0DCD43A2D5CA51D27DC19FFAA7D214876533CCA7B174E7D9686D233C0E93DBCCBEEE4360FBA69F8B683108CBF78C602479F377746A9F15546458EB92F09C921B98E128822BF719630BDA559B557B64C3CFA5863A8BC029FD6E4D5FADEFA71718BC25D73AA3D55B572E9C2057CB96D0B809460D17B14F91FF6546B46452F12B308582315FC6ED538B33F350DB9C1F93C6EDA04000CC04F76F2871F3CE51DB0E3A31AAA5F88DDF9AE3591BF0B9E036059DA2A12D5C1DF181B82EEFE2C587F6E31FE70F88C1FF8000A9F12F539997F6177A8412863235C62C61408F98017783B74FF2DF2B3BCA2F022679D62870E49CD16AEC4C8D0278E84787E58039B7B5894BB9BAFC5F0381683BE296F4E6CEB6CAEFBAB2F9BF38AC3BBD49A9FA098E764785BEB4725E5B2533FF855F9B6DBDBF303C3EEA32DCB0621A4AC137AABF44D3BC0BBDD60FC826F2027FA1149D3327916498D2D4C9BC4EEE80498B29D6253664E727C1E1AB41259F8C2CA79B4249AAEC28AD42A8D2C57B88DA14678965DC1AA5BBAABD5AFED4125526101282B702858E11F36D81AD6DC7D89D571A4F3C3ACA5F96E9F3792E171F1C554136358BE72E0462BB2406C828E27770043F40AEA7A23CC88E19CA12EF528F085C5BFF4A030DF5A48D2697083290E4C2C1CA105E1A0 -MD = BA04C9B061BEC3D28A97D7BD620E6C6D53E1C193B943F285354AC96E -Len = 14774 -Msg = 993762CA5B4849544B6F58452292B4F589882FC3C50FD6A8F9381C23C5A67E1CFCD4B23D7CF87777CD5AFA8F3C49311CF88DEA54E587B913CA7FDC024D3E298B4FF47367AD397853E3D77E109205412B132FEBA9FE21D126D038678D4DDC8BE19D6FA95C1D75AD9B4C52B81C08A6C26D89906E17A6CC678F41C0B776D0D7D679A447D075A9B41E735127CC8E996ABB70874CC0EF60ADC5EE754803ADA8B9C89FECF9E16548DB53C7D32FEB5DE1BC90B0869066E3DEA1113456D036A85322F4A9782FB29ED7FFF8D16C2AB2985FA0BDA84EA6C2344CA9AED4833B047532BB13FAE830F386E3A71CAACDF06BA46ABFD7C680E3DFAEBB08D6355791CC0917252A3BDE4437D96F39ED68D8251A7C38135277DA58363FC05A0BD651F2AB52BFE88884F8C0EA8BCB6B668B4AC21D1592167BAAD85E25112BE20A9BBBA90EDB48293CB7A79F50FB21D9E1876D7B07583D0FD0C4AC4EFA256D98DEA288AE8E814746B23C8148CEB41000ECC383B6F85AA36A46D6B9F6A6F1EED4CF84EC0A549EEC5D983B3C6D8C20CE33A45BBC50DE236053ABFA870DBDE8761B6950229C69EBB5EE8E8ACBD557D5D926F57FCF4967E068593D868D3660AAC8C3FEC5FA070289E217035B033D8A1801870A8C3F1EE3757F2F3196C25C7407391BE6B6F3D21C81AF6DC99D543CE42197BD127A8CFCB724249A1BA4EDA2282460069BD7B90A8A54CA9F483F6288F36C912E3150B11F26F68BFCDA085923BC488E0FBBC39917055A77F37AB76EDC19FE50B45CD3D175A016A8A904AD41D56626EFD75E2DF6D617BD3CB4BA19C717D4D1FE781045803F365D6893AFB9E44AF6CD99201CE7FF1021D585850E3F6D6AA06F135E27F493FAE2DF3D59933E0B42AFC28545926999EAA9F05902A8A620CCD7FF0F6122C02F7EAC0A39BB03922EFF6404548091A89330897F20F81EA038C124DC691A9438C6D2A0E21A969D695374A06D07AD6741CFE9BDC43BE48CC5F83317BCFD0B680443CA014F3791C8C7E8829E4191612004F4200C2DAD8D208374302808256BFA770390AD52A7767745EAE3853C8B2EC5FE4F7B182B8ED9BD5FCA1B5634F06B35FCFE13B92E1649A6B67589B6576F5D0630C56ECF6F62B26E35B8D73F44FE323531B274F066A35F270EDC43A681A84B46E7DE079C61548021F7C54965823B474C415544E041E6E95B848B03F0AE1C88A24A1F4772A04A8390050981F2B4500B6A613BBA3E5D37CFF5AC75650AE592ED6FBC781B2621CD381EB0B29FD0D97A77F83D05EE7E744C8827BBFC2EEFDD7A66ED6E0401A40C1317E4531144AFD4D1471B19B8E0F99079C0A2B5BD472735A924F9659AEAA1857969F5414F5F14A24F06968D698BBB4E5681084118347685B4A201CDD1E382215A01DFAACF51F988156A5D94F9802E9AAE7E204A096D37E416BAAA4EFADF84EB32F2FE0E5C5A6164C3ACD356B3A5C9EFF99FF216B17044FC2701689378C7EBA1AAF103C5210B7D3298B59547D9C623D9E21EAFBF706C36A6AF75B7E259241DEFA6FAB03B3A2208C35DF832AA4ED5B2934C56A58F0C0DBA2B4153286C380AD040758004C49A2AB6E7ECAC389AE769C5D1AD13EF41F756CD761C8457315DC027682C97E181CC79B292BDF93DBA2B1960C0394AB501290F9AFE49D4DACAF37CC1EC3E039CA10C8A60F65DC8ECA012584934725AF85881B8FD2508568AF1F6F23B5E7F010BB9EC82D4F4271369D5A283066321A4B58E03C5D3FFBD92A532603E2F7D446A7821DB82761B7BB896ED606D6F481B6C37BC3B60E16A0764A272C6C072D6C49FDD9256BC8E49799D4B8498A0FF5B9DC7BC676684BCC35E60E873307E089A4C9F5C59A0963C925DAE85DA6DFB9365895BE3E659748351F2BBA1D95224D4715DCA20BFCAF439A086C8E5B61D8CDDAA927C349BE5B8D721A30B21684D060D1B981EEBEA31C82674FF3B05B340787769882B704FA7202982B41A83B03931E212159DE09149011C8DC25C7E7DCB4BF85264CA959F4F15288E20FE2560B1B2586084D4CEA16362F2065E5AD102E221713FF30C16B57CF27E229AB5B6E8124A4C9CD110E7DCFFD53642BF447F07453B6ABA6087240F86921641F32D0CD7A41BD9067F41588E461C2779239F01C28414C5873D5B846A99F14D7F36E29796D7F08E14354A7A9B24C9FEEF1E2ACABCE6186195535324DAFD87073557A3B75A264E9332F7DD2732DB12696FF3857714DAF3833F5E7108DAC97D4DB337E6E141F561AB0EA8F41B91D497FED645ADCD2BFA8D4A96C40CEBAE13E70F315A1D5E11438660F33484C036E851D7F441D3C15FDF8BF7F61759BDCAA09FFB46F02586EEDA7F589B0D1D713A4BA55EBBBCBD7C8E7B460D159A02A4C8569FA0E7A4C012E561A44FED890E1F7A707E2D8CD84F918F8DF9FF7C4C815DC91B32AA6F922C823D19142994D6A438BC6E771BA2828954FC8EFC5CBD5CEB20F82B7AED4876B2A5AD91A4E453324366445A1AE530A71A871614E5A13A9584FFB1F3286E03AA7C4275D211878E979D9CE96955C18CF071654FA6EAAD520592A75A70BA7B6A1C8A7AED2D048D51C33A406C4DBBEC2CE0C4685DCFC021C0CDDE23451B9F44A0021F9C -MD = 4FA6949C109D5800822AE1C33AAA202417CAD3BD91B8C64201B74353 -Len = 14837 -Msg = 48C2383C0482F26CB7832FDE55BC4B1ED456F5C2E7DDE9734397229D4938130BE0EA59BD9F91A532C598BD0580133E7152459011035D575FFCC7B600D022E1D1403B8C32799D102168DB045F3CA5B5A3542E81FB3B8020FAB93FA144F68BA56D9CDC09D7B1B7F9F00D3BD2FFF5EF5761B9A21D89F79D31DE3054A19DF7844757E1DD0213A0668A64B14006384834388A9612508553D512252DB3AB779E2F3F82ACEC3CC654465680A06CFE80A3E85B0C9A952F2E56A4E8E3E0683A3EBD5D4A76607C215EC9FE223D9D237CC5F9774ED08CAD9481C718C0214ABB83FC17081DF34ED14A045359B643430BC43E395A3C4185E10E6CA730DCC8B925DD835395363EB768F5D89DC90287451AD67975A03015DE76BE74D00119B268A348D5B67D16460B002136339F385BA56DB9B0F52D9338642AF33A67B74926B2AE8D22AC16DCAEBF8FC8938F156D6E2D1A1DFABDC0D21ED54F21573D3289EAA3EA1327A36BA7C2996783BAC75D84D7CDFC8904C0EC874C9A30132418E0B188C39AFFD09A56F26A61C8BA8CCFC9337FDB7BBAA37DD3FE84451B2B1312A6E6915474E5E2E1A9E4A55A520B516D1C607E3651600B4A960AC13F4017E40FB003165BDED7F304D8B39D2453B2F7039D4B931E041EB922DF9978A04C3CC83EBB8BC308B972F5DC09D372711B639785E0A8BDD581C105314D6300BE91C9A1C246CB4FDF4162D60D88C2663842361B7750046B5E2FE1A1192CD15DCD164C721FBB1761BD1C2563B0C0C3F8570B6D28A3D62EBAAE76096964D0C3EBAAB4FB7DDF927089A59392EA89B830A8497848355F15CEC38093A83C092C55C4027F959D4ED2D628D8C6DBEDB276A5E59B3723C90FB5CF2FA8A95BE52689CE4DCED35058B0F846E7E56EE926B555E411B9BACA4BF4CBFEBF53FAC808740A050E063E54A22F2D44B07FAA9162830D036B7A3298BCA18AEAFC2B0AFD3D3F9CDA4D121B10E06520EA47BA0099D2EDF02D23E36653A07801CE6ECB51B7D4B53905ACAF68DFBC9EADD541E2BF8F953A3D036B788E3D357EAED830FCCA4B86BF4F49624FDC88DFF0AC2DA246AC6CF1B398B8DFF69DCCF479E350D008E94154DCD7A87159F31D18D69AAACD4BAFA2920F19D0E45409B6ABF40C714232818ED94574EBB0DB1DFDFED4B4E6E98838D59B26BCC19DEA6C3D14F67B02F4FA252AAC405CC27CF0C16DA9E14E77A924F0EBE071426FB3346DD6FCD40D25DCAFDF869387F87A8F94A3054AC2823BC6840CC5FEFC1EE761B596FE2FE51907E30B9883DD167637BA27BC9CA2E4018F7FF3510A82A0FFC7B614B253BCDF1ACA8F4DE6E4010439E2090C010A8D07DABB5BD50DB6762D1CDF71F7D80B2CA0502980B3A3D730476DF7EC997449F46322247FDE81AFD0BBAF0E97C992E13493B92AECAC209D8205AB88E03010BCE15DDB3430BFF9409E51BB50F656B25E00E398A68A48F6D25DBB5693570EE3B36E685F090254E4C8A8EB19F69E747DD8797D96F13FA540966214840D25BB4901654FBCE506B5EF3932B79B5DE79AFBC9E55D08E55EF7F53CA311FC08493B130FAE02AA379EB6F41DD8ACA2B45E4ACD47A8B33717F8977580B9046C953217572169BB215ED993D2CF9E61EA7EECE1EBD33C6190C68E6D02F31A0402C704C641F6B00B3815D8F7F68F8D39AE3811F71A21BFB55700A8DFA3D293511FE4F1868D7141C66817BEFBFE0720C1C7FE05AB98499FB2392FE9FACAAEF0B1E454798306C2493F9314636ABAFFFC2AF4FDC29B59AB15763FA25BF69E84BB12E4E31A71FD32B730A2F277C74AEF985B82D05BB7909B6ADCC70768293DAE44386D42CE3E1DF1CF316BD46FAF214DC21AEBA0FDC2495F10EF15C1A68B540E1F9FC4428CACC30004B55EBE523A5290BC3A5D9E75AEA3FF83DC06FF8DAD2B48A42B7DB7CDB0BC3149CA2ABB8FC460F05637B038AA0D4E28FC7661DAC984C6DC7D2FA2E0E8DE453A0DBB41AF1227DDDD66E9EE44EC1BD15E84C3BBEAD737841A9E4A53EEFF57CEE3FC6E8742FBE9C4D0D3D3AE5E9C6CF34A7AB8426DBC9114365D66836EFDAEB6762A0CD51C369977E70D9D15BCADDF72DBCBE9BEE847A3AED3CEA96179CF784712D36E7FD61A75B77D41D3164B0D8FDE2CE8AC8B5AC3E6977DB9AC63A08B29977792CEA907303673B04F12BAE23F1E4FF2326B144E9CB82193BE05934A859F66E72A2F1801CD35CD70F92023BBA4CFECEB7BCFE0797AD3B822CF46104651338B3A85779E506D0410493F5004DDF4D1E5718B9966B8D97515F5BB35FB9379F788AF41AAA95AF5F10191A6C028C81F33273B224B7BC44B12AD9C068F812416260822F613B0F4EF976009E411E1C69E25A1678CC71993B582DAD791BBA03EDA30055DB974B44A8ED500672AD320F7E2489646EF97B51B612374C7E835BA2D5563790F7F63BF35EE2A3989B9495DD9FCD1CC3531E25E93604576D924024E7D67F62F6507CC57A1554D6889F100D2B742F03606918C9F57190F670D51EC4B947762A245A72FE98D36052CAFFDAA3629769FD484582D9AF80D895171C4CDC2D79A11D2F0C30DF6F2A82291FEDF09CE9A99BB68B6D899045FFF62A2A387E101D2BDC4574D872E59D63EE6301AD9F06B78 -MD = EC23243024379875712E815FFDB376B0D1CAF22DE582316A76B3D054 -Len = 14900 -Msg = E0AE69CC49DA828150119E871E939A000008A54CBDFC742C1FD33A546742489EA74E5916804BDFAF84D98AB429848ADD3B9D898ADAAF30EB2A221BA894781EFA00D1A4E1E2E6874C2B2D8F9AB1E9035600E88D3D7044B02565F4F6349381CB4435355E6A314D3AFB4500251CB6EE75342C5E915C37E1A303DDA94387F1641495E03D0BDB986ECF27C6D18CE4F43FAE5939B40A4429F52345940976F38E2F01C280B5388EF6C25319781C3159386F819F9D223D6DBB139510DC3503B6791583E22E5E85C0B9EA8E7508AE4FEB5619098907CA827B840908976F4FE8FD255044F118094A580EBD04C6B16414C2BDD24A03BACBB422B82F76BA08327764EFD85013C8B83E4F8A0B6241DE0282BC4B041CCBD7F206C7B8F70EEA8D731C301EC66C171A3485842ED9B05EFDEC9CBBD36BB5C2B78317BEDF02B0CE9062831C861666EECAC350E204C099F5C1B6AC44C4367DC3554FBAEAD245DE273B177F420E1E590B4689688B6F8A06AB2BE9D76AF6DBD6587268D568F06D66543E1C9691CAA37CCE40063F1173ADE9C4F15400FE8F73E9EC7D86C4CB1185020E3AEEA4B074DCCED86593E75A153160E5015BB7964C506BCA0408710A0D8611DB24E599040902549E888517CEB30F47F10195CA33820C6A9D4B696C10D2D833576075C2D52682CD54E22ECDA30D102C8B97D0450BDD9688AB918D838422001667117B10B00ED809D4E5078600F1A160DD1E49F39D29F8F2D4C68E529EB12C072E1D58AB4E5ECCCB69C6F174A608585883801EE5E63C9DBD888D5049AE85C88FE5EEBC45D0221E35AC2E0BE14F753A6ED0980FDB7D4FC263C77D5961CC449FF1B09AEB608A4A362C1E1C6AA23B8961757A3DF44BDD1195C7758865D1B19F47FDB59E5A1C811F21C47B40E74C496ECCE208B8F8C2672E2FF11E43907EF01B87FAD5D7308426A287A95DC54CC73C74C72BDEF44C71464D27A85E6F33C48B4B3BC5BA2B74B66D034E5FC00B34CB0D0E175D52695CFEF6943548EF0B35732EBA7833FD104D6609867BBC7E25FBF2038C982316C26ABB288CA076EDBD4E868AC128225D71CA34A42F64C0D6A7F19BF3485EF5E64C9D7FAB806F2EB9638DB2F77596E147ECCFA73705254DD92E22CE09C0EE5FA546890003A1C9839717B1A4BF9BA473EFC2003482227CC4121323E2E49FB45020AA5C7E79F8B4E76350961CAB8A5D5F74E260BFF4FF84BA275322F0F1E05312E6047CD3AD20FB3FC05CF079101CBB9640D41FADFAA57D32682C76E78AE048A0EE217EA29F526B8444C2425D88DA872ACDBF2165826515CD744F03D2ABF943D1D7151818481DADD8B7B65449E914B16FBCDB02B19A56578AD5B2F3E8CFECB7B79EA259BD6F0139CB82D1C44A050AAFAF945FCE43FCB596670A01B9D737B88E0E2DC18EC45771AF5BC5DF97037DFD7878B4BDB2E8EA50AF3880DA0BA385C195E9CC054F3A434EB2FDD03B59A203A129BC4252EC34A1C494E63479D7C0CAFF5A0D2C18B428BBEEEBB30006FA95D2E0DD7E0C40881D6F88D75E34B16385B04B1D5448036428CD622E5FEC0EF43EF4EF3A74E5FAD7DFAEBCBBB466662712DCF5BEF5B6CC7C8C3C9F1F5F53B8411B900032675538D64EC73F75737CC5B61BD973DA9F1F0C7CBCDA4312195E39C5DB3560E182D88817081FABBC585E4A8B789AD3D595E20E74547BD648B279228343B8D1A14CFEF58BBE646AE12A7EE35176FCC3818F4475BE72AF52F140118AD9146E659960401EF98875985BE9500C9E73DE92C1E24D105A6FFE996C346A5E02D7B1FBDBA6865BCA22FF47090D1917E609167CA43F7627214FBCA7D9E19F638173EE3A2DCA3C50F02D4186ED202AC3606CE0F60371B337F9BB54F6CEB4B258F72325BE4AB6831580D452A60A4F254E6EC2A696EE77BF6F312030F4766A0BA3A613D29E186D9E6F86C57D50F668C7266506456D9B3A69820000A44363EBB5B3E420ECFA01DA2450272F3862A3D4B48B16988FE58BE06CBCCAE357DFB50A02FB38FA04A0D5669D2F9F6DA8A5BD797108E2AF1DFB25051AED266A022FFC71104F6D0D3693B29C7CB946806E88410293D84B494DBA297136FBAD4E6C9B1F8685942B700737757F47BB8F53CE7A4A30EB4E8CB6F3B645DA26E8F722EB9EC589CC4FC03C097F4A429701BF1A1ABCFFAFE5B22B04653EE70E6372DBEBE88719338CF71F70495D75B53E33D16FADE162092F43D1335DDA726B5209F194E20A14036850E5898EC63AA602D51B3B590D0030D90F65FEB88D3F5F0CBAF2EF0364A507A28D8BCFC8CD3A8DA27596F3FEE2C325135B8B69DCA36CAA4379D32FD532568749F5AFBDCB9F4031DE4045BF416191B6E5AA6F007270F71F4B486BA77A66E3D22D7B56CA009975E2A018D1D86A05603AA7FD40FD783015D57FE1B9A3D2913CED46E2CEA3F1A1C7A27110ABF21C2F75D3EB36EC2E14BD7AE780BE0AE589BD4704C73C941CC13A0E925A1A3C0178DD975C29B95B60E1CE7F7B634D0BC5B866A07CE11ECA5E75F5A4256EC2DE187716D7A58DD7B2BCF986EECB5A5371F18BC30E2248BF8C20738CAF0420D49CCE9FFABAEEED843AC0A0983F812E7D84B05F8A36C83A37824F75CAA8EFB0FA72734A3BB4032D76439F03EBE730 -MD = 71D16C0EF79FCAF6446BCA9241B29CE26A869FEFEC6C93F1A26CB447 -Len = 14963 -Msg = DD9EFE84432A98368DEE110D287426B69413738C2C9D88A900257B0A733FADD83485D319147D6B9AA39CE569EB4D9AF33EE20E7625DB3600F354EE1D73AEB78DEDAD6F988141878CE08754964980A444CB39F1074A9B1FC097E8A516CC61EC4C87BF5793EBF6DE8B59AEC4F8C3915F34BE6A345AC43484A316DCB6AB1CA9634E851C6FF44668EF69CEADA8D1B09A4C901C5B4B1F412C3913086848BD496153EF98856759D73295DDEF4F8C89BC0C9A181225DAFE33E3AB96D6B9FF0F3DFCF721B2555DC2D9ACE4E306335E454187121B8632A1A395ACE12ADE1DCC53B7EF1F5695D2B1E02C6FEA08B5DCAFC480790E321A061F44C9C0F91A24A61379FA5D4486A6B825DF815BC3FE5101A9B5306C7BE574557516E900CA3C76F8638F73D5CAA7662829F644E681104EE69198780D6C847005848051A71128070CD7F97DCF032A776973982024A63591166B98AF86C3184A5C3CF93A6AE177136DE1F95772EC60ECCB78D88115AD359DCD25C74195FC23CBE1048B16396AA35428E9B1818F7C4C91419B94B97BF39472E13CEC07AEA294B8E88E3B7266A7BD7035E78561C41419943D1CB802FB1C6AE987485C41ABBF3DE4AD2CF0722CF3B9A56465FDED012C8FE286EF3B19361C8370A6ED7C42B4A9E145C1975463C552641063AE5449CC44ED6228D5EDB4C2A375B429073F307135E238377F99202580DBFC29CE5AEE151645CEF07941A249E94C8773E948A8BC37D67675EBDAE9A5328624BA53392E3669B46556E323A6A59E26B51E4B5422191E89FB4319181CA4BEA367A18CB2FF69B939A57536BBCBD2E09634E2037A52A077DDEC469D5A72F191BF667BDBD6EF23EB195D7E0BBB0FB6041B79C099CBFB595CDFC8D86325E02611963CFDD735C9F57851780C65F2BDAB8C7D3EC9779BB881FC440E994B00B2DEB2D065D4A08464E33D3017795BAC5EA685CBEBD2B4C5099FB7AFE9D454337CA4811EEFAB72971ADDEC79D12C19C659A2257B0AEC3AA759D3F1D8FFB9DE04FE25F677A5AACD12F30054F496AD01E0B7DCC02759EDBF321C0F80B84172058F9116FD64FDD978417EEE010AD1C5A4850C0426D883F0FDE76AB1B2553F33BAE4DDA57D7587B1416041BDA6D957933C79F75627865FD5FB1E3EAEDE79AAD21C981C05522A0D3B06B6A3535E10D91F28C6F96DA83DE8BF4909BACD18A1AA624BD9CAE5702BE82E99C96E0CD43B490313CC5AAAA0F47C7AEE2F8B8B4E4EA92B6A0A95F1F077DC876C5E0DCC0E1027E95AC26D5AEFB3E2448E9B357E69F4BDA28DCE264D481377AE0DCE9B1ECAB40F65FBD4B921B598320F6556E75AC8A196D9D6C02DA6EF4688BD8C7F305DE8DD2DBC33A7ADB5A394EAF57798901C4180BEDA96B1DA2FEFDA8A68CCA6B2E059807185FFA8217F2F1CE2BD010DD3E0437E6A6F87BA37AE300F47D2FE4D4D677DBB560717EACE13DD0D906477855352DBB31B06EFC8EC034B9F6FF57C389AA6AAF9AD81255A5C84758EF85D39D6057152C8103A7DCA88B008B749A4F1DFCE26B33A91BD0D07F8FD55EB9B5C80133E1287DCDF313CAFDF715A105352605A072201CB18E0A38AFCBE2CF3E6B262DDF97896E7F50C0105C4B6A4F91577D489640445D01140C3FBFD33FB04694D3C17DDF6B1A49A07677D473FDAAB01E4EDDC955AAEBB3D9431F2B9B0594AE6E244FD461E3A24F30FAEA15D18A689318F98CCB3E8421FE1B892E8A83B7B1387C602AB5D87520047902CA52CA9FE687953DC6C67106A4A835E553B3E61121936BF72906BC515644D931BCA8DD7AC5644FC973C6777E4D2E7C49B5B72B9E9862EE3668AEB4A30F206BF7D17E814D7A9C23F4BE408852EC51D75E0A3E7C0771ADE03B99508632AC2F2BD3E07A62051FC2D0B5F8B727AB7388F51879A413DDFC545164949CDDBA4CA96347BE5BC1CBC8DD1F1B29107DBCA7C8290042A41AA5B6B92DBA67B9985F1E6ECB8A673C0EAB5656CD8C73EA6AA62CF2A342278504FD838DD23406CFBEC14A99D0816DA161610C91576463B3DEB9A6F3878483C8B7852A26CD3F8DB058E98EE6AB0E473E9F3F018AB1B3189AC285CB856429E8E1626A275E94EA6A84D26F48B27F1D37FF314AFD9D41513EEC9C2BFFB3A8FF08F0D77E819720A8F7AA279C02548C2114EFEC6D544B35EFACE5789FE0FAEC440E651A0F3A4289616B4D39F17EA17B6E680F01ED1A1AC62E1B77FE32EA377DD94535986DFDC7D16DD099E2B28394FBCDA03F01EA54D482000A2396F53BCA56B431F933C69487503B562C1EABE1E53F8C723ED0C6FB68378CE541E69BDC1459A17639FA6C10DD928F1873B80E4703F76EE6EC5A9B2F47ED40F2F12DC5DBFBF71CF300C79B86F1B237E2C258BDDD7B4BDDADAEBA514AAC414A84D1EBB70EB2C959C0031E2D055E27DC972EB6CCC478C770921B7042AF7F64D52EB16E554A626134CC3ECE3BF16A5134A5A425323A06408E0FEF3771A2A5A2DEC4128D4EC6941A32A95740C76299C3E7EE14539A8B3396D98139CAC4264121BEF7F7FEA7392B9663063E2B6E719169363E7ADDB2C36FF5F3D5630E8BABB5F5A2DEF32BAB17222162655943237C3BF0D57AC96C8E116AB1EE15A254FDE587449C319422C33DFA7D714A0F31FB6AE10BABA636028C0 -MD = 7C972411B7F725407FF331B1754585CC9E8C42408FB3ACC9B9A9F694 -Len = 15026 -Msg = 423AF4A85DD61E97BE2FC0751097BFD4B2BB9314C0BF921E8C464E4428622116AD0190CE3F3718F4AEFBCD5AE9562A281811CD0B6A29FD2983ADB7F01E7AAE3026D94C7EDAAA994E456D94E8B6F07549EB3779B9AE1BF673B95123925772DDED89A4E72BA4083FE773B3A501894F719D0943A833328F020459B84CAF37A9151C06FF96449E572242C6430C4B2514AE86CD9C8F94BAB421CCA7042123094337C0D33E34FDA79720DA75F87D32693F104A8E5263E127CE837F08E59CF6DAF1935412F17C5FA198A85BD8885CFCAA6CA3F7A4FBDF64CC7FB5DF96F1393AF02EC504D9E16C30AFCD19734B0B3C21DAE2BE19348CD0CF629C92FBF8F3FC2B1AE89B60AE2797256F036C1803325A93C8DE14024C477973EE7AC19055B824E9F4606F73CC779A1CE1212B44E3AC998C1A2C782475CDEB42DFAA0815C0A8C6B014C8E3B9542EB0B184611784C9A34963E94EF7106DC667F90AD598ED00972EE93636752C3AACAC001DD1639DDF630A14F1189F3FE4F77D5E601A21F267EFDCC42BED4842A8DE470BFA8B80366BFA60B50D102DFFC0850BD3A5EC484C1004AE1C0D4CBF40A8B7A92725F3EA478F17451BAA06F0EBA61D8ACD62217AB77FF2E86C6754CBE12069EB5CF25D3A18529B3BD665581632B5C16344182812B97E07DD322619356F5DF511143C068720EAFAD7E2A56520248111B299C2F756A037F7F26CB853C7A683531349691FD79533536D5FBC461848301544FFB9E4594544114200BB263380334889C452DE2B463B2643F2001797592558C53B5932366B0191B370359AF6605174291EEEC4173301440DD366B7C844FD91D8CEDB305D8BDB0189775F45B7D93DDDCE804A98289152181D491B0A3620CE254F1DB8E24880C15D2C8F741657CC9856EA51A93615D518BD502846DEA6B3B8930B58CAFB22D6D1D3EC2018655334F6DBFD1A1C46CA877B054A2C275F07AA9B590644AE55E8FBCF991685FDDD4D230EDE605D00B43244AB15C8CEDBA2A082F3FC27F0AB05557DC1C02DA1F696D19703BF5A1A846CFB3E85DC5FAD30D3169EFEB5CDE03490B998896978660DCC6BBA0D52FCB529BFF12F3FF10E983C66BF15BFFF09ECAB816C5815F8F33F04B2881B87E4DDD673685CB0C8291D5E48EBF7FF01FFBD230A3B641B13A44C5A6DF8163CB48B693333F4354D8BB74ED2022A86647A092F6A907ADC928F8615EC82A32733F777999C8E43A28C4480ACAD539E6B8789CC4AD8735B827E249E6DFA9CA9F4710694542DE1B436F6F14FDF208A583CCE70696EF36989A2EEAFA17E41370BB66EB8A037D1CE6F9D8CD9886FDC420CA78A63BF947F53A553F4C27E8CE2B3EAE4E4F2BA37A31B6A77094DE5F3B71A00ACE0339692FA1EE0ED0188E9B18F4C6D8556F27F98AAD225EB61CAF336EC89FAB9D2128C1462E22D36952D7A314477DC67D1012BCC78EED64997F700B652591EDEED1D01EB1A37C9A7FF08E1BB11BB98157162E68CF48EE9EF129DAB830DD6F69827C5B38708EBE3956620AEE73FEFF34780F5178A419F91DB0979CA8BFA832135CA053E4ECA0FCF44DE02E2F4279ED8BEFD7D945050F740E5246432707B1F7B9053011863C7D49663118C1C4FB1457EF8BCDBB21692313297B330CEAE20996BEEE389188366E09F128E25CFCD91ECEE346C27C92516C067B0578951459A38DB826D4BE253A6657C7CE93D86E8A23B6260F17AECC7D59CC69215B63F78ADA9E5D92638165AC6D05B87F4B3793560DFBE8DEBCCAD420DAAC27B031D0E9D0FE061BAD8B0DCDD4B6C1B081EC0FA96C0EDBF91E1B7AD4047FA03099559B424251E4420D8FF499A1295A58C2B94E293A99D5CCAB2660A71BAA25F50E09BFD9DB18C2CE2E90835BBBB3FC83F3DEA6400C6899BA481507D8D06B9F30ADBD9D00B11C491D0D112BCA086640537737FFC3F3D82E1F28A5E47B5C49270A57B44D3DD8009CF9B4DE5E5E8ECBA2CCFFB290BBB2607D85578543F5D83510601BAADF132AA26AA8DE77673C6F128F3F690378C92BDFB2422D553E7EA20435103115382F0F7CDE62C0835F9C36D06D68004C8F202E245E98D469A02E81127120DB23AEFFE1E147E777EC821C22C87527039FD4F630171F2DD767F6585E9E19D63EB3F35AACCA021BAAED2969D3F48A7CEB45CC85DD8B996E762D4DE3D5FEB81C3A4C25DAA074D91956B3157FC78DD8ED65A7C8F641D6C7075FE2286119358D2E655331F4D4322D5AC8C74EBDBB68D4E533B37533C4C42508D3EADD70BB3C912FACFAC647537BF4DA18BDF38CEC7CB5E5AB5C61238B741030C96C7CDACD7F855E88915E5BC3484F9A734E234C94920AD3F9D25B55B724DD0C6A3FF07CE7925DFC2B41D239E791AE8287FE1270F36FF002E4DA033E1429303D2BC59A4009CEBBB56127E3A8AB0626933B048FB4219FB5F8F53C2C9420C8D548FB8E3470D099A9C84F64073C09344FD55779968BB2DFD7F036229DACB1BD5E1BA3B286E0705B094EF8DA93A0309B497E4E2740D17FFC3A8CCBD9EA6F05F459799AFCA3680B0E099228F9A4D67F911114437090998D9C0FE70C4CF129C750FD0AB821B22EA14EF5A53AB4053838612D201F74DD24FDCA76356060F0998155FB0E0794FD6FB66094EFC2F79540FD561726A3BC36C343FE58500 -MD = B559F5F8C64D845ADF8B0F1154A2404D78F6DB42C17BA8A3D27CC4EA -Len = 15089 -Msg = 3DA3B060C2EB3CDD4F1D07D17430A71E4C6CB1609D5AB949773F02AADA81C2F5878AD10D16FDBDF909C8F500AA9C0D92620C21A1ABA3FDC50671BB22097FEBDC184A6E87B3F54263AE1543934EE7F93839A7939427EA6DCC0F3B41632BF3450D650BE66BCEBF9010E6CC74ADE51247DAEC8A0AC50F8763C9F693B118E4FA01F5D6EF12A1283B313497ADE5BBD9FCD9771DCD245477D1451E22C01DACB5E26C834B36435B8321D1E13D0D9AE7A1008C758E654FE46A2C8EAF18DE502EE2066D35BB03EBC08737D0E2D0FE0560DA7F696C6B0A342B33C2E20DDCD6B971F369AB41DF65F3A471DA7A6595B717834008C845058187EE05777A798D93CD01F717E6EB08AD16CEFEE31A71C9A83F04B10D62AC48B82D04D23411EE6BAB3F03AA314EEE22E32A585A4FD1403C6C416376915795F9AF2DADB698377BFC8B5B07321B19D3D75F01D201B5C0CF1445F248E2074A881613FF28D0F7E655964727FDA61BF3638E16049A6939AFAD058323BF5DAEC6C052C5F5C9AA9EA6665259A50C9FD0290844B2E3D3A5A8C8B9A663745A4F195D3C2AA8890E789EE6241DB4376F8AA2FBE41A1C8E7EFAAA2794F1D4F4B08D3BFC414B6E49F71A313D38FA6E6190161D6063AA27285764A362F4C341159B3E834A304208C174C451585BE2460A25707B46DF07044F9FF6F1A6D36B68E0438B174F62CAB755F2106A57ED310D3313F1B951FEF432AF8F30E964E302EF912D58D4E9B849ECB6C920F3E76B41DA98D63666FC0096A5EB9CC181C7407673455E41C5EC14DE08331F1CE705D0A52D46AA89B40CDD4C5D5CE036C478590EA1D39CA79A289B11B43960EFB10E7CDEC4180F5F7D321EE3A4078877A7DE4014BFC3CC7389FBA0903DA6A56B8E598C6DEC543231CDCF9546B36F39BA1BCB3607D0DBC591AC31586CC2B621C0C45C45EA27C6E91B05CEFE2DF26C92BECCCEBE4AB056385D096C5BA935871134634FEC03BCFD6540C63175E73937BD9FAF1F18E69C51FBC1ED51112F63365F138226EFE224D6862C757E785A58EF18111AFBFBEE5F70A7109484680F4992F7D2F0BB1D9DD5117D259D15BF5AD0718C71F2EFAB8EE462B9230D1EFBF2284DDAF454AC584413BA748DD6CBE13A7B50009AFAAD193409C42CAA7CBECDCB07D271D3CD4FB233E741D82306928E814A8B15ACED1303AA20A0E4A985BBAAE4AE1C2CB065B2B5B063EDA4049237F5A27B8277A0E24AB99518E8623149123FBD11A7016117514C95E5738EE9957C193E70364774D4C180F610CA40FA698956B8B912377062EF621C19B0D4D8A60816C2BD1EF434BE3A643D5FF4CE47E50BA864D9CCF5507D7212022D121A12EF8BEE7CC1A3B132D043FCC4C29BCE2132F0EBABB6CFD8D992FBA485945C7A3732C490C01CF56AD2E80CC2323C62321B97FA3B6D731CEFE862ADA890A3702BF0139784666F62D173411FB4BC7B79D66D8935D13B7A57890B052060FD9C2D927034F1F2A96B7EB402BAD7C0D88331A8ED7BD2FFB9BBC73C0564E09B57A929A10AEACF442348F2FBD0D2A38EA4A503C9BA4964C67473EDFD0655E4FE8A987ECC15C5302094D19C6D49A778CA208EBB9DF503FBF94841B9D68D40738EB14EA1D5E7EE54F583F5C17B9F1792DE31EE1990C798EBAD4D523E32D89EE65976FF417D8F98DB6F1491D31BB62FCCFB95EEA21A323B583DD8A17F6541329C72484642274E1BB255AC517608094D79FC149C0C7A70095846E96C15127D02F39949E90420BBC4210E82F6CB87889A8E322587BD4CCD23FA9834E5776119B018F3DEE42FC1D615D720019F7DD5D4E0B2B0AE3554BCCE424441A9524B8C420DE2C3F68783F877A5B803FE2645A4449F85FD73A72F2B38350E590AB8296C29FE820A3BB4F1DF64E2F8A51A47B9E8ED2EE48703F4B8CC07ED683A3EA8F346F353A541C3324C8F2E78421E67C16AACC4A61ADC09694A6A13172F0B1CF79DE2D18275113041B04F7571E5E3B6B962541480639166097530A5B6C5E66177721D6423C71424C0AEAD7F789198729D0695E893034D3C3634875E43ACC30074BDD42A9355699F92A19526E778B766888C6CD80BBD38140309ECF255DA55CDE758F6D096701D5E77B749297ACF1DA212C564DFBD8E6079B863F453610A2B4E4D44D1AB24D8E5E6C5C8AFFF1F29B9FE895398CFB63972E32281ED29347A55418FC58AC65CD7122FA858E426BD5A388FBC3CCEE0199D968F4F0E64BC2C07503083D7C96343F9497B065F948D9F164902B8D923E7F5C3BACB20BF81279230198B4F7723C901F8AE9863953380971B49AD847C4AFA9325AA6E4C1288D0695DA5F84BD27CE8BB1A01883F00789ADDBF57D0D9CA35C66C886C3CB3728023EEAED26892DC955E9B7CD65E12228DB45427EFF7EFFF18B808BE5F165B2A089BA4C0CBAEDA5086669943842BB56D358BFE45E21C91909CE4EF87B2A660CF19F88751E803D0B6147F0199671CBB5BF8C9341398137A45760431675B4058AB783471E0F848792E2F491A5543142512F512E690C510EDE72958A9217BC07882CC47F64372B81B396084342F91F5DB288B0C3F96191B7707225062FFC56FF67101A1617CC60B7F935A954D1757DBC4B0548461BDF31171FC72557EFC2D7088233F48D5CC024AA4A91212779706604299E91A5280 -MD = DCBF7CE05D411938902BF57F2637EA87C2A3F2B5E136EFE9B89A4C05 -Len = 15152 -Msg = 24B1190170418126DD7A5A81FC080A9804311B48C4E4DA680727B874318D17BDD34BE726DAA760A40208BB6F512E5AA889B135D277CFFE6AF802954BC918E4D599EE185D598701C2FA3C28F7EDB355D74A8D2F1A9EFF8B6C2ABED776BE8BACDCFC6C98C5E73C24FA0967B6F2F79051E648ECD953AB5430B8C7D96352E600A6FC04FD42250D24E4A5969BAE7712C6C1BF8B95481A0F8186298ED2A70E16FF8209C0511AD4E2EA17F539789F9A1D47EE291E157806CF680067D37231032B032D5EFB1552925497E57D088ECE2B3869684357C466DB454D4FD9EE9BCFC5DFD7AD3620B3FB244F717A48FACF0157F87CBBA94B91C0C39002F78351E3EA6D411CA587B91A0CBA4CE21A8932EC9F0F6E8FED5DE7DDD03A3B90B6C6D828F7831AAE1F879FCAFF77B76FBA1C0013CDDB19E93D878B3428FA91F1A5179F7240A5B47B146FA34E3997730B601DD56F587622114813B57239A289DBA2348B2BD8207FCDB1CE0032984D9389D731942EDC5A44D872EB86038E281F49C868DBA278D1C94AD1AC376D57085EBE875CBA7AD071D5CB3843DDADC6ECF8AF7D6C546938957668E4E8DC05700900FF2A0A2E8DBA726CCEA443F8681644A377D7FB39FD159F72B8B6EDABAB76E4AF39FA065C9B947F53702A3797552E92D313540A50E73981C4340E88722CE19797DD5305E561156BCCFAD147685FEF2B76F4CF8083515CE8F0C60A52699F08E6AB24C1DF612D93D7CA26CCB2D5156BACE4DA28E8F1E9992BB8480D301046BABF55954FD5F29C074806482FACEC432DA10BB7556287F2F108B114904C122DE43E6A77048AF3B47920515D1B03E280C1E7C05BC71089EC769F7FA04E0C4984D186F8C8EE305B1FB21D03F025C95C8CE9C50AD6FB527EF505BD203ACB5B12D4CFE08F4579971590BD43755A85A03BD296885128AE64333DC30301DD7C9B8E035E22F75F411050DB6A17265DCF3F3DCDF8FE0B728A680B60EEAD7FBE141F6D9298EDBDD07D52DECDE153AAFDA6698F415EAF8622861E54A2B279E3B1C0EAFD5A589E7121DF6E51E4D7698566BCD5021013180D77A1908C17169C9BBA1BCACD5AA4799DF84593013E21C303ACB670DE66B5CF08FAD04769CD05D69E3ADCD5B0002C75618A6A1F440918B04DF7B2DE363639152CB6A26D77DB7F400291E21479D5A7E0FACD36ED09F2A2E74F564B8B676D3E3DE07712E1F69840BFB48DE63141A2455DEBE2E9FB8186A01921BFC8D644DBE315EEA943D370EC648AE74657AA57512B39B6D872212DD13BBC7FDCB481F7201F65348017D0259FA99A69084D0B62E63A7408AAB24DA4D3BA6F7B187D014A372FA8160175F3B37399EEDD7F6FE869A1F0AB8B0A3B835C9D086927DA75AD483CDBF83F7571FE1041376B8B57A15DD1DA7075ECD040AE2F5BD6D371ED3EDDCC13F8D611C22B29FE9F246125B2B868ADAEAEED40BA1C3150BEB50940875B08E650C00A095EC2ABFF723F7F1F5B97985B7D1C1D81BFC031F64E452125CDD13732D86A9CB7EE1D89381434D939B515F3F461567B905CCE4D6A7A5A0B7F964FD6D5FE90FA726EFE18787D26B083BBC8AB5D7EE7F9D79D3556616E0282FC14B80C9CFE02A3BD845B1A3EAD1DEC61393F0049B85EA64A7BBC0585A0E24C53D774E5A085FC217EF6F0370A794A96E6BF572A4C3195E916C9A51814989DC4AE65D090976BAB9709FBB51B004694AB9C0833637FE100183EBECFA6F78D26014A00DBB204471A6A379D9E4294A5DA78F38EF2B0A474E92AE6D811E112FFB224C6EE2F5B2A3A5ED5B529EFD2B9106D878B386AC974CD5DA99113F11700783226315AE8B9CC9C41423E47B51D10B51AD503BA968A7046753D3F5FB0CB601F4A8D594B12E283843911710B8977412C3B64E8611728AD4684D7E242A1D85FFA5D01E7F3DADBC1B1691030C8AA51095CD2BAF36E5B45D1FB7DA28973A98FB3BCE835932A475EDAA12C232BBAE4F793324F82BBB4E19CC9E4482393438F94006246C3A81AB51BE7721311EBF1927488F1BCBBB26792D6180D0CE59B69E397A6D60DB83C321BF971F5D804512D554FC3453AEC14F6B0B5E82B8A87BC8EAFDF7CAD1EB07E164DF61B6D0DEAAED33D4B56B175184730102E77CF81823EE82BFE945E3B7923818157C579A774E8D05FD77FE84AB36A3D266BE1F094048B8E417FF0556C95C20C0CC1F3963965E5C37DF5B4D88653F831BB222F399D867ED77BF8C89BF6160449A34EA78AB7D9928001FD8DDE94F30C8CBDEE4D06FBA150852EC255C69C590D07B5A803707E11A0EF689CEEA9DC0EF8809AF685E48B79B4337C756B0E567D3BEC43B4431E86B79D6522C56DC31802B76893D548F8F851D7696D8FD8DD15F60253163F8335B9897C477E6D4C743BE22B1DEAFF90693337BA8032978E97BF73BD3FA1B53A46A779B13CBBA453346234C3A68F369AFCDDA203C058E3F3A21ADF8B7C872C8ACDECC0C292DCC43638D1326B5D2E1870537777EC8A47E69EB54A30F9B1AE214ED0A14506EC218B05CC44086F653048D7E06949D6017BDCC7713983B6EA9DD7D79365431DFECA3AF4F6CF1EFA18AD23B716814F614ED2A22A5D8B377F442F2C402DE05CC8C2DBAA5076133E0905FF843D64545A7409711E1563071C5D48E2AE765AFDBAA84C2499FAC8F1848DB65B745776A49211D0 -MD = F62ED9FF9D91DAA054C25927A1EA4C853ED9B3CA63FEA78A671213E6 -Len = 15215 -Msg = 518009CF81235C0A1BF0601B99D6EA104DC39BAA380C8671E2AD85338692F4F14A045182F7EA067E3A893848D295C317C970C4B6F21B03055B90565498B47B269A73FCDE8A8938B1FB9213F50B1452122E3AE0FFB04998E7DB6EC1979501DC452AB43627A86159A2BF7C407BF87044E5378519E0E5E10EA40DD590367C63D60D5648546E9923F52A24497D2FFA117952983B130520DE2C557B1AE0FBD6A7839FBCF6183368D091483F3DD0A42068A394B69DC14C407DFED8D23E4DB3E11817CF9A88AB86AB4D3DE126FB2E89CFE2CD6EABD0837B9070DFB61FDA388FF47EDEE9A93A7D2E76691C43507B9EA9EC6025278BC3DC4122048C2C83174C44C5CEB89D3E9E950DC2689219AF98884E16887E0C997F373751F744C7593EDEAC8AC6416875DF0D425DAF015B38C9B71062189E6EE0808129356E13C612B983C8302C66DB6D825E526AB92A1A46DC9661BF50BB76D20442EE5BEB2D22F831568CF256A02A3E23734C2B8FE142C6F9301D5C4182904CFC106315227E56AD8A27197D566454CD75BBFF8CB1D8D81708AF4A6D66457416995F32C04C554EC148A45345EAC88846F4FD280A2A92C3ED6EA7241EEC963CA79E796A18C30DE15CCEF241D26A9D3B9F6D1C9432FA2444041782BFC8EBB31AB995D1C99D89D275C06FBC52FD0E3170499342F89E853AE8808DE6ABA3B1B65438B1F8D7E88DDB49DC8A9A270F3438899A3A98D3CD2B4E337A658D1F2BD6D5F875A74C4442156ACD5EFBA79D8A64C257C3E6FCBC286332A02C5652E95B577C78F51770FADFD288DF64162BA016A8F365106EA756F3CD2E4F504B60A728B82BEBE72F84172D9B7E7DD691B985AD449D01C54E6CD410225187C6BD0C1DF63E6D6D6338FC10AF097D7F7ED9A93DC195E87822B32F9D03BB07CDBD31D52B5A0528412DB800D200A87BAC26FBB0B9BC56E49F3E6EFE5D8071EC1A30D8599AE06226E7453376797FF1FC0B34082F6CE6C45527185DE9ACC18ED0EB1D4A2052B4C79F8688561BCBBE03602378F38EA84F4147163919FBBAF1EFAA29945C72B92A5CD1F2935A8CE96528FEF4393B5C607768623BCC4F8BBFAC21BB362A10A1FF5AA8D1B0D2FE5196C6866F6A7B226107A58C9D884FFF29EF900C87600CEFA0EC49FCED051670726FECDC600A573744EE8C010686DE6525364FD7B534F087B1AD121CB6B3BA8D3FC8DB0D1975EDEEC49CBA22F1099635EB870BD742B09FA39E8D641643436F28B58E3C1E838CDBBBAA2B4E56B4CF06E3E4478B70FAF416AC6B714AD78CB7508FEEFF7AC6B9F0088EA6A61291A864AC2BD356267A15E7D10D172306FEC1A2C5BF9751194421EC9E9D7F5BD44FA2EA4E84F18585A083EB94A37C135E39B572BB06F50F76312CA51A21D268CFA7469FF270B9C0108BB5916773B94BC501B0B0118FFE8CAED34FCAF7F1001EBDD046AB6D2ED388719BD2167BFE3F4C0D897805C95DF505D33B5896660813D747D5CB1E4AD8F96E736D67A6CBDC3F4EB407AC68ABF134BF05C255DDCA6E489EB05CD6553A06857FC7F2BD85DA141D0AEB91C22B6E5B7C8ECA69C43DACB4A9B8AEEC1DE01C643B1D833C05C30C622CF737C967F0BDC983FCB6E00CD1553616CE3D96A172064B925AFF3E3C402D5EAC666E1C750BF656899900E97CBBF207FB23746D44CDE62EFB1A2B61945FAC9BE81CAE7F450DD542C40FE143DFF4266BCB630A66D655788B79F3A5BA3EA17C781ECCC7A4FDC37FEE683B7CB3A44FB793E27671F5BC5E2ECB46FF18A5FB5143FDC5E6A71BAE48BFFFE0558003656F0255C56A0D4A883BE57E05C9412748175CBF96B5ECDF640CFC4E096BA138A721158D2F20A0F1C245C2D82C1AB92E5CA0F779545102CBA3D0755A96582D189A317B54D1046C576068D947F0B19933BB9CC19B07A03D4323C40BBD660D91746F7E6AB8C2DF17376CE39D911E39C3776811B1389D9681CA67277B2D2CDCCFCD4E8AB85462592F3557C50F26329EAA74782695C43D682DC30EF68B8270D60697ACE42EBD6E6FB4B2CAAF1394FD4CB4C2F6A7A5045B920D07BDF81C3D5770FDC656EF2F5722B1F830CE8585F9B5B3B72C4F715672784FCCD2CE7874797E8D1F99E5A6ADBFDAE40287FADBED6619710A0AB254252392F860CD0B1E5D5913912E9D738AD530F30787215A024C4EE58037335678EA2234C169063CA758453563D472E2318184F1487031D1E03975C3F3D5B65195DDEF89A627BF59604505B031CD1D6E7BDA36CC0A115A7BAFD3EE12C89F62843786F68C411E0B06219055149CE429D5AAC45922E79D90959B0F58C8A515A3D2160E95FD1DA2D01E8616EABC513A322E84AFCE79F0C24BACE31190286A08B4C7E7CEEFA9181EA7AD4D908E233664C4EA6C0AFF6CEEE74E94C5F41B2C619DCEDA54288C54868E566DA2ABC0E8A466258A41224AF97AD70934091D0EB24396828B47C5FD4BF6F0D976F837FDCDAC97CB034B4C3769C39EC512C3452AA9E9A9700DFF91EA5A5D588934F065E18481788B8FA3526FD7F93CB2DAB547C35D12898173D1FE8E3E03B6438F60AE9123DD086AB3ED1B1A381A5183CFFE78BD470E25A0D59AD9EDC062DD2F6DF2EE7EEB0835C0D900D4E7CD224CD74B459BB373A8DA0A4200D06F52A688C474C45C206197B7259B52953C4F07A3A8ED7CFA0CA88417F22B5E9A7FEDC76066 -MD = 958B427424920AEF6083E44E078114D3AC04006A223DC9EFD69E4E6B -Len = 15278 -Msg = D72DF9D7F8EC937D3403EEF1C0DD96FC0489E50B75426BD9EE285D47F1EC5AC0D19C767DCAC9C2485FD4108DADE2DFC00E8F7010F8AB926E68F6A38707C636CD5BC9E84FCA51C2937265CFC523CF3A9A428C29E76878E05F6D717496893F5D93AE61DFC9157F24B809C8A60EF4E8D89065309CDE0DA17E6733C47AF7001BC5524DD9DDA242C28F37BDD0216A0C81803C82BC8A5DF9A3BD3D40AF3D045E07B2904B0121D4789AF286011585426EE433F7238925CD660F577F24655351121B5C7F0FE38831D181E8FD5425899FA638FBC5ED16FEEB375EB85FDDF8F82B8E8EDA1427A85A521CB451175251FD5EE7F5EF6EBEB462ED1A1A92F4D75B8B5B492380EBE6BBCB397FBE92FFCC62F82271DAB5311BA3E2058805861974B9453105164C78B6701495FB1714C25943B9656538FEACABC84961F3EEA00BA5332F59CFB993E6B43AB80FFBBCA55AA0C202C2FE0C51215FF254761795DFBFC88917104057D21274528633C162D384E264331D61217AE1FBC72E915253EC590C24F946CB2C9CE464FDF5C61E16E2FC0AD83D63A68B77A42788702E4199AFC40525413497D0658A1CA71C998CBB67F69D0005D16FAFD742D515B4691DDF5860EF5C5FF27D2F71E139EBA6A9DF50C5D6F312F6DD2418B8928193A028C4604F578D3781640EB132E93C2D2720457091AF447AEFBB4AB62DEB17F20E9BC590B469DB6D7DAE347440D78E9F149F32FA82058A04B03EA3AA7C52E40DEFCBC21E6FFCEBE28C99C501227A0CAD798BBC1A29C23ADC80FC85E90895F4677A03CF1E1453730B407230C92D5AD61FBE8450B129076FF0202FE62AFAE5373054F737377E763EFD52E4B746AAE04FE542B3DE57C6AE2A8713480694B4251E1158133499C90BD94D99E1B95AA48020D1F10CA66C6BC8F110BD6D06D82439A9039E87E6D09C7ADB6D01BAD82C61ABBDCC01CAEC409D51387EF093F0F5792C6E8ED79A3F3A60FDEB83B47254461780F31E8393795E237FF9F995A9FDC7988943A8AC1AE4985E82DEECF57510768D50AC2355A2FE64D998DCAF696C0AC5C680A2BB870954ACF7ABCE740881715616F0E62D21CF901D9B34F4A4A64432D9DE80A52EFEFF5556226FB4F3316A4973DA9669D4071C7547DB9E21B66DA2F7C0C02EF1F2D744EBABDD63DE69C529DDAF1A021E324FA92F735715D4A113E09CE43A53255ED2EAF0137DE113F79599F08EA1006E2F025FF6DD159D32895B232EC9E22CD794D8F2E98A75795DE43B5F7E202C2D9465E228A77FEDADEB0FC1508C919816D0FC16628250A2F5331E9702622B927388AB5DFBC1CF8A1AFFD1502DD9381288F63E087AB94296E56F80A0AB7F72748BE9A4A57178FBACEDA25F1DADEFFDDA2818982CEC70614D826D6E8F337B134A3D8FEB9EA3CA1BB198A7413868E5EB111663DC213548DA1D167AC438592EA339724DBDB1AA3B63BC6FB24F39B03184E279F9D25E3C17F050E3821D720C82A6D31CD84D9ED5D2B2D268455FD1F8B6ECB3795068823CA28D3222EAC18D014085833E1793C4D1CE6BEC7A9B7E4226D3999431703718FA5FE15C5DE7F672F57853A6794C3F59109BDFDA22D29016DD8C2779843C42A23769690F703FB35606AFF00E4DCC030C85DFCF3B887B4E703F07F8D9599D63D74F51C651A71B4F46F6E29F931C8C3D62F935488A586121D7BC074ABF7284F70990C73F88BE10DA7D5EA24A6720F724EDD4CBC4314B1F238489FE30A393E3C9EAEF531177FF0DB92273F97CA773278A72804707631BC6018CDFB7581781DA0B16E6DDCF0781BA0972AFB23E6A91F96E67B36BFE5A83F062CDC87B354495301484DD81D51BD87900EC1C00052523872736350641512784B572F29FB2A617DCEE9EA205799E26B1ABAC5BEA16C8E5261E1B1F80AEFF9DB27C003C90EFB440F42E7F3B3FA2D7D63BC4848E2D4AAB69C0991E1CDCCBF7571E2F79F9F24CEEE03218468F725CC1727B099785057054E6D4D1CC6C4C8E73C80AC4631F7D047F1203464DDFFB78E89CF68CAFB5B0636AC03D6B5E0DE612F2F178E8F2345F967CC87E09CDBAB04644F3AC52CD4899155C996DA4C87AF433E944477FF5E95FC1F7EBA5DEC6A9C95402992E0213D06A31421CE7467E3443B638CA30E9D7C658F4685DA5D770FC045F8B849A8D106A77368CFECC336E346E0B349A444DFB27B58FDA9E67868900D5C334446EF454BEC5A8468A19AF0D6B776C587D437460C8DBAAB364D35A8AFE7F2E6504276F6769FD4B8281E48D5C25647FDF8B7DF300FF7D8DAF653E80A4BAD47BED0EBF5D57F1C74567365E9AD6346725314FF5E5BD9E3F4BD7EEF684183A4CA53E51D97BB0A864B9A7606841DC314311C2288AC0A9E0DA92EB4290D90791F1EF8A3FADCEF6D6C202468B25E8EA37D363A614CE29E4B7A8057CE909CECB28888CFA671A83163597F5164A42F84B540EF83DB0F07B28A0AB32C03165474973AFF02340DCDE4F2B68B1A8131C5D04CBA99BFC9ECD24CC6ADE4A9D211D12D7C81B122FFBBE5F793C9EF93A6055E85348240F7BEE488815597A306677324B86607F515B6A66E81AFC13B03068A3BF80F6AAF7861A2CDEE001BE9469981B5AF703089FC955725E964B3B3F69244D29CE9F2B63F75A07ADBCAF11114A37375661FBF4EB07B999DDFF1AD37CFFA2A3CC26739567C0AAE16A836DE15E15F3259AEEAEB1D4 -MD = 09374CFB7B92D81B326402BE96A458BECA0B8CD7F117276620492B5E -Len = 15341 -Msg = 871873678B0F753C67F0FC28F1FB738826D1B1CB864EF68F043DA246B9B41AF3996884680AB04CEC5B7F3B3097329C6F55BF1C10BA1D667E91671D01AE433A5D6DCE3AF33A76942F241911693277277BC4DD69CC3101FF4463BF158662882238E258AA20119E2D808BBF85F26D4106B36C2568415B3220AA135113D805F0DC9B794F01F45B089AEF64E52B609DCB0503B5CE9B31B27B194023EED2712C99298B771744D26DF6803FB4F5A3B80CDFA932096B4259FB12C3F819F25FE9D8C61C766B1D56A16E08312FBF52D96047CC987651FE6CF97CA42AF8DF3FD0165E89F8879C56551CE4ACDDE130C1D3394C8BFD2CF86D084B0086B9E725D78CD6479149DC35D53E618BA85BCB625A81080E210673027B646F0AA67C7BE5E15D4E98A5A0E5D2EDAA9F1F5F0D2119B5A30B16538190322CC299F356F8A7EA5CC3C5420984577C09DBBBFB9107199C5B5DEAE0782B738FB5EB69AB8B5BF9B247214DAF293C994F0DA35C0F1E4890F7E7B770E98B1F0FA01282FA3375A90CB5F20FC070F0E136BE79158229BACD7D88D8CE4D64DC802CB695C096006FC05ACFE1F1F3E5C3202E36008BBF0B9883B3A528326701C1A1A1266D2813D0BFC0010E65AD4FB33C1DF9B5AC4206AB64D0BA97964DDAD544A61A9DC91DBF554F0A632FF20CF67265DA97E123FEDE01F65720516957DB482401746B4D152E4047C4A1026FACA5CAB6B7129D1EE8515961C632BCF93F1E59F8E2CBCBE85FC4D40E75EC7FFD6F87E90B233C1DDAC7CDCABDB3EA9BBFFAC942EB045A6085ECE75048F014108C9B5A8162E47F95E1E6F68E9B9AB5B5C9F7DF98AB6CD8C4F214A0F21C8AB6480D37EC5A78E42A97FB4DD6DBB5784446CFE18D3A86CA3FB400063E8DB54892FAEC90886BA660BAA3DF40D62B260897C7D953F7500CA80B5C714147C7EF1D7D6B994734DBF50EF6C27B9719565BADC7F36412CAB88C025AE5CD1119FE4B704AB97D19F07187EDA2586E9D0B6D6AEE6B8B38F0F29E63A25C8273913D1F588CB01967600565B5328359D18E4499FA4406A08E3CA3CC9BCEBAB71148844A4BA3E65034958B2E768D04F01D086DA8258AD64A9C4028589117A58A69BEA6AD4A5ADEBB36B8055DA9D97592B43BB09660E163919EBB6607905559714D761365FBD6F6674B632C59084E229EA87382312CF1214D9C09C2CEFC7B4FF396575F4B7D98B23333F71EECE429A755977EB628447BB44B2AD3D74625CDC96E1F11119EEF12489096CD8AB5DE72A5A475D42B7F1A7DDAC9596D815181788899932709021DF0924773795E98C28CFB15C0738BB6DCE325150BC238136168550A26E089711730BAB5F1EB127C3684400FDDD19F5E91239B55222119BF5C3E253A30CB7D0E99B7131D2980084994B3D9F4414F9C61410EF2882EBE4799D12DD3E6F57E1CF26C35D1D84205ACDCD66C865A8F1710CDDC864686DF2C201C3FB11675D08B3D3A606F04D117F34AAD084AF71787B09887CAC735541DF9AC0D0821201F4D6727DE02B1AF12E153A51D58A1B9DB87924E8B26183236200B75478472B18274299DB492C9EF02DC2E92D036D42DBB9A8A514D83312FC319198DE47E0B2C6CAC5065729BDA5B39697A698D95C54DA329754AB709954637445057D574970EDCE81400DE74AA406D085051029C3C0A37EA66E4D6FE9D4619FADFE424B788285FD05908A68AEC94AE1348FD4E8425EBEC77F2C931ADEC2980C2D4CB78BFA6361B003B7D4C6970DDDAC24B0FB2D5DF12BEE854B74C9BA26821D721596818F5EC4DB3FF400FE5E6CEEBE8987561BBFF56E713C5A5BB3C3FB57626A3C1E21D3C4270779BD2EE31B720CD469BA5A1431580B280E9BCED93771FE87878C503B3285F026ABD3F6F8729242A71F4F83014B095CD0F8C210627FA59513D3B56FDF46D3353FD854CB46D94E206DA88C58A54D04E3886D4AA68EBB37247FB653BA32D0121C20173982360E5C2681E0B3E4A3F6D5516E20EF0386AB3EB1AB22A631BE7BF05CDA81A861B62D401F358EA562F23812BC33A4C61281C9F9DEC777E9BD6526FBB9D7BB3F9378CF1FBCEA9ABDE8B4CE8DF3BEA822943F54308A2FA3B3CDA5C478F75DB3B029D4176A240A60E191D4A1E5CD4FABA15F06C994DD07E56CD780A4041820BC3C075C339BB56A39A08D272B30D980B1860D094E4284CFAD32DC71CAE923333D7A137D8E3FB3769E3BC05BAEAB433B6F2FCC2A19D85C9554566A11CC2F9238547695F8AFA0DCBB261EF130C37D188CEC5C0BBAFC670E711C9C62918BD31F5C68688A8740BA7027F79CCC5DA31AADD63F636F8BC99E49D6F8D173461CD009C39182DE1882BFFCB0AC2A01BAF90C2F4B2FE25641F92CD40C705F801E9ED3FB50B96C9E7224EBAEBD8CEFB0AA6509BBC15A41899BB3603EE68CFA4319A036832EDB89169E3DBDF02AE74ED4220B615A4FB4CDAEF95C03B8E350F3E55B6DFBE37B51EA810B72474E46D25CF9C812694ECBA131F5B875B47B9C7D76F2B7CEADB857C6253E146D16739816DF631E93CEFF0C0367B3A4A6A191330601C6B4E5963C752CBAC85EBE8F7B0D1E14B5DAFA3C21DD8D876980814B80502F767959399CA6DB4BE9F82BE9C6201759B18C0DA999AF2B4B83411AC865A315EADC343C900178CD9424E572FD17341B7262D369E0134D68D876D9607D7D98EAF96D180C8BB0127E028261A5F5251B4CFB3CA5458 -MD = 20E0D475286F06666108F3E3508084376B6F23A5F018B53A24D6090B -Len = 15404 -Msg = E145C3C3533466C68413701DFED5323285913D656E953AF1FA7AC3DCD32962C576D53BD3A77DE710039B009623A7E93B60F57C7019035149365B65D6731A7F8ABF8A67A57649FD9108A4B819F5015CAECF2319348290BDF248C19ADC41FBEC0B9B20C95C1F6F46CEB0E2A595ABAABFEA7AFFD8B58F3ED5B25BC33EE19F7AD0EBD3F1B1AAF63522970935F2D610838725D77B8F5109434F5188D4B1E3F3029DEC2AE4E9FE819AB6F69CBEF19B7E92907D3E56E1301B27E0C4D939D78DD6BBEB2CF50ED0C38FD2D370B4ABE343721DC6884472FA9499B1D6A66AC0957D7809FE8D397AEF64B7CA44A4039E1A9DAEE2B70521B686D077865A3F5EDC7DA08A3F98E5A2181E6522389495569CBA13BE7C13B36B799E0829BB7E5894F891D85D4071C9DD1515F062EC09DFF34F222F67D3B78BAD95B0D3440CF52806AA6BCBD15C740C37BB7FB5A1FBCFD7C8A4F163BAD95533E5216712CD850C18CA9D22219EC09E8BB4DAD92F6CAB527863A533BA1DCCDDEB2B1F8E70457BA2CE43F51BE5D08F7A7FD37076715033C128363A8066E9F511282B78D6A3DB9E2F2B60D6CBA02439053AF376CD4161C7849B9FBA714D58C1C4300F08158F7F6A8AAEAF86EB19C753983407ADCFF82C88247FF51C73D9EF0E43E311C13925AA8E5425416354A96C590299991834CE8EDA1A04E9C67E22CD2536E9A8C5A8BF6227803D0E736CB3EF10816613C810A70453D0D5E38C2721021AD11E7B07C9891F13E6E7865E060CB43A752C49F2FE95AAF3A2738DDB1C2CBF4FD21D96EB350CA06E672152C12005D3446613A6C2CE7D1817E5511B8989019F1D5BE06C70EB9B57A7F3114008704AC3707155CAA8C55281B5E6CC6361FEA868299E608D61A2DDC1E2AF400B1E31D95471257FB489A8110CA65AF63FDBAB54B57FC3A8BA22A0DDCDECA729F0CB27E344753B0A4884D6FA30FC307A8102EE94C2B3067BF70AF9073968AF74F7EEC563A1732D58B989C4494E99E3DA2E7204B7588B171F025FC3EFDA1EC3AE6E80436E7486762BC4E0AC1B9476CD00DE795EAF015B8FCD49B314A485B5B141F1CC6DBDF5A9E58D9A6BA37774857F92836A334BC9D70F012D41E47958B4B5777C2595348CDB9EF3F98E9234E725B415C92B7B01C85221B4657CF93C5A7F0989FDAB97D08E8AC9FCF9389D60F38D0964A3C65B6D97B31CACFEA50F0741CCB5BDD73E38B41E640E4D7BEDA289B0592124A633F2D26D60364AFE44EFEEF2D6D89353679B16DF5D1C6CA5575F0A0AB6F783593006A0D332C24A3FD3B3A00492E23DCE9247CE7040FA1556F3496DB6F8C5BCB83CC2105104F91EC2CEF5BC9086E6A9CA3CEB2ADE2A49CB5A2C37C582689C47EF9F2059388AC004136B4E00BF027244BDE114F6434059D23C9178837839446DA69CCCDC1142B21164FCFA2F06A0F52929272DB3D13FD8330CFE189EF7285DED5A73A51C1FE32C0E4959D7175C8F02F0DECDBF79A3279DD6B578C6699CD8C75F4403DD170995877FADB50C6A6CB6026B86C29F6375BD4B398A4E8702B550157F89BF1CC28E460B5150FA162BDFB5C6EF1FA6EB1D088DF32F26D1EA64E6D80FA66BADE662F587FBF440C7D70CBFAA4CEF8AB9ACE9B6CEB6B36BE0519A8D5C541719152187B93914F2AA8744432395885401D49AF9ADD995CC2B54C83A1B2F82FBFD8985CD70FE8DD6817EE206ED35A354AB0EE68681D6A7DAD7A8B2744CF0C9E0F4920204344F80069579168E80C3C5F0880AD1AD69B81B87D8810DC76F494918250A675504CFDF0887A8B4477441B421D1C8C1C712E2BA33FEF194FD9A8C297BEF9B97B2BF69020966D7C45ED920D56EAECC3AF9BC3521D75D9F364B648BDD0A351CDBA433FB168CF907270D768D80927861E55D5288676A56F5FD2D54174F3F76EDECDD3411E86ADEAF3C5085249259BEF1AA922A4F5D0B6C41257BAF44E1F180553FAD3E1914FB1C6716CA925AEF091B00ED77EBC201A553A309A7482D4B3E802D301D9E3E954943E4EEEB803E01B33DC2FF9C9BB86A5A82C9E268A4406ACFAA419D8062D2E932F50904A87D1D3E07AC94BA8EF0B9C8D04C07C844CB72702C8A7652AD786A25BFEAFDDFA34121DC520783B0CB12690CCD70A7A10C9313323820095D356BED1D010544C0A574FB63F1F136FA9483D4CD14A9605CB76AE8697FFD358FF580CD9ADB1C055BD821CE10580B3A636710CD2B85BAFAEF726A9966C7F5575C7D8A4ED646F04A0D170CB9F5C3691614B792A5E17E2D4DF95BF1C6CAADE82C7D2463BDDE7032E4431667C1D3F3C77BFEE9243833C40E28A2F30EC6813595A802934267D4CBA3F1BD0C8B84F046A235CF65FA09CD5AEC9A68F1729D95D732977799707E80408041058B3A244A709D95145D0E712611FC55C074D169C15F7EEAC5358CE0B0655B0606653BAF123EB9B949A41E678B823FDB78E466DCAD91A260AEDC86D5F2FB096E3010866AEDAF03158EAA3ED51C6F2AD935A4315506C446E07B8C9E6EEF357FDEE6C0A6DB2B41BCBE44058CA67CA2E6655D9EC51BE130D49F68E80C8316DC868C1F9416A93254CCFC8B60A54362562953FFD1F8BD41C330F6DDF1EE0016D3697D82E633B1E4FA0E4089346292AAADE8914794BB5388E36E20A9181EBDB59613D47251C32FF76D6247AE23D49719BE029DFB1F5B35366BA3E26A90C27C6F0A1E22C328F6874BEAF2155357FC9B3A4CC383B839C170 -MD = E3784A2969DBF29BD706DEDDBA3ED6C3B27E94D13B03B83435BB9375 -Len = 15467 -Msg = 087FB13811E1655E82329D6A66C7D40F0794E52002C830BE67527C61B0E34D5E11427B40775778ECD10BD1F0827E62A8CE39F08C39495A01348C14883A846B07A839F73934FB4C62B74EA1DC363D8843383FF8648A452D84A9C43D3142B08F14AE7EBA99FA06F15D8B3779B40954E44CC78540A27818764219A61CEA2740D982BD5AD369AE754F03612AE6EA97B1ED8EA005EEEF777306071E4FD66EC68295A17888988B0A2F614C043F2F0FC65768A932C63A02355FCE5BE5D69C108466E764569B6B077EB42E6EFBB1FB526892ED6C715428629673C69972470CE08B46DE1CA7C1E90F23FAB55685CF4B58FBBF0515D493672C70DAEAC28B03617C1B495883159F11B3C1D9A23C90F7817C03D5F75957851C2B651535910630C2A35C410861CF0C39F8D4251B73775E5474D52E10A33A84DE64987C4D41663F7E1E2DC9253B6D407C126669EEEACFFC06483495AA39BC47537A94423090735BF48A5E3D8008056D36DAECF8F41558A567A496F0499165E26A6DD42EBC43DCC23D7456D5628F2ADDB2E9F4986CBC4F21E6CA03979D007C549AE4FC40851E19D86DC490D3969FBF90D87088F883FAF8207FD56CD7BA8CD4ED792A19960EA0056AACC03F6A022D0E84C87E5CC63BE804A858890110041094056F7B39E8CF4D531E2466EDCF227C4F78E453B5D5CDCA83AA89A52D94F0B9F69550F920DFFB3CC23B83EA710FE23F5D754592256EA26F222BAC6FD400DD0BDA4E02832D4EA743501B6466751A4E75236D173BA1E843082EDFE687A4F8CB52EE58D264ADF5AE23D072A664BE5190FB2DEB70148FF925DEE9C02965C16B954FE9AFBB8DD6D860213439404FF399314A9B82D2BF5E3AB975A98E5475634BD93C81A1558FFCE876A0A053675F79C1A92453942F0C6EB9ACEDCAD4A5BCF3B3AA94D90AE0AACFB2739B27CA6F6C0418A73C83CABF0B74BE488B9DCE233CC7271B2CDC8ED98559686D864B82319F89C9A222E944AE14051D56EC207806D74B9AC38ED250C354FA5F4915B0CEEE09D978E5D59C552645BC7721EED4C0FC2B96AE080EA7E43B349244709B694BAAA2E65DA63AA0764B1D757E784D9A2F3DCDCD5A599A1D91997B1A1D3362667E2638F820C10AD445A34A933CCACD1ADD280B6320F23A499C39F5A0CC239271670CAEAC13A0895C409BC0E4D5C4F9168D9296292F0069CE16A989AA3AE89125C2356D9BA78330CA82EC80A15FA075C077A586381012475AE8A61FBE77EAFFB068220DB8A8E90E796939E6B83976AE7F6F9883386758C5F8EC80CCFE92C9D58FF1F09702ECF61A3F6A6B8E60889996E0197DAAA16FDC134086BF6B537762E932A6797203C7D8A1764A22C36DD8055D96944AFDB3165BAD60B82E64AB49C1465F2624E03ABB1B5F87383278441849BEF65F3C3F4D570B1794E84A680A9FE3A968081DBA9F43D156B73501578B4479EFBD886E58AF199DC6B12117E76B50B812905B308C48FF13B7F8810177775F2215E235D4393A5A6DFAFBBACDA33A0989979AF91687AC926542AC313B8FEAE41ED2B132E59C3250BF39A06189E86806435EA14B0A8C3EAAE066CCA5D76B4CED720722B7E4A5F4E314C4AE67C34F24F79482B4CC67F145AEC38B4E14C64ADFA55DD5856BB976A218B43369CB17494D80819F922B9E22F72CA2F7B9F22340CBC36A3466AE62FE7282761802FB0CD60997C6BA8F902EBDF46120CF27D2F36C1F3D16820CB9E35505E34411706E41E8FB70CC191760B0EC7282DD7DB3AF9FBED0861160CB27BAA8AFDFBEDDBAE2A0EE1092A28CC7B395BAB2183C396B48D5A10DB1CB79DE93B0340C3087AB63C5D0E769E59B732DC240517CD871051DB0583398145BB4218CF45879D42782B62A71E72903CE308494A305E20F4DE5AD42A8CA2534D9EEDD1B2ADED48C6E530E235CC59EF2820A72B6314CDA43B9A100EED51BE14D94EB53D1292A102B57825779534EAF5D2765E8FDA915D8E3E6F679586C71397175BCA11EFC7D90AB8D6366D475890B85B43C73378414BC3EAAFC144248FBE1D040C59E93A35E62659B36AC03B1B68147735AE3EA08FDBC0BDF941003EC25539C6F09559C09475CAD4E221246A5F59A76AC1DDF2D5EE5B23A42A5B142848C2DC6E41B6BFC8CCD7A87B477B5B349D7C2EE93137D4B2AE8353D36222764D9DDA68DF78C20DC161600AE2F804539F7D6F094AAC5A19C9AB18E156623A922962A6F3CB2B7EF33AE6451F748619F49551D0BB3470BEAEDDD1F555DA10E43D7979B34C27E0F08DD37681977CB78CB655303CB1B7877007A274BCCCE34949898CE9C57E38DF874F70A127098E78B9D229F99BD1666CF78482B2D55DB085A3165C9B95C6C27C010454198CFD807FC2FC7739905AB77ECB5150AC32875C8D9803F2C3DE5AEAFF3D67019658EB9A568E90B5176F47D518E1050DD5244EAD52160BD03078083B486566708B64C7858913CD6A351E76C7288B7CBA43CCF166B5DF812D73E323892F0B6DC7D58531652A3AF84DD0E9CE7E6125E805D7A2228B6246956F3A45AD633858BA3E4359A17FB585197125E89D0AFFCF042CD8A2C4C04A9F3547A26DA4A6F8F36F595EE92B1B8E16DC9764A94023CA7B281BAA4FD4EA5B89680DBCEB745F6EAEA95617B39E7C9C8B5879A4AD81E1089128D88D5F9552C2F7307AF1BDE2A5445DC3E21855B3D281B553DC702D66F0A1FD0E0D5AD5D6C425B0FAC26FC8A0CA12385CBF8DFFE40 -MD = 0B708EDE476F44060E5AB3669E80506D4AB003C0594C3F13C310DBBC -Len = 15530 -Msg = 2F738EB4FCB879A9D2CB508F6E80A69AA0DFD45DFC58152729E2A781AA36A6AC13F7E956ECC02A23F40D604EE8E45C1F54701D6FEFAD440CB7BB7EDE4B4B0F31335B1CF84420061CE9591629317B2AC65C41B0F3F1FA270BDC3AE7887FADDEE57D67C358271A719D2D966C935379B2767F8A1002F5B0247C7741020FDD68F543652FF6AF3F6952F23CABCF47C8EEC9C175A0E0560F483CF712C2F3BA6C7096313EC8B3179AD3A960799A29E4D56CA304AD136666C63AEDBB4AEC98DEB9BF8A9E2571344C525A20F905E579A2975D2776B6D2928887ED033152201051B2A4DA731620A6511A33BA362EC283E0E37244BDA7FA5840F393A54A0621B48EAE74294689C1DAF5C2FB5F28408F527DC8A28639CF4BDA07C0C9BD3D1C1D5C64FE9453DF6D89D2463EB0548663E3E1E42CD6EBFDAC509A538324F2E5C29374346A3BCB9A2FFFCEB846E9F4C345C841394BDE9AE91930FAFE7C788D7080C6B4DA6573B1004C906AB3880F049BF6DE8454C0F3D8E138F6282A2DBD09D6EECA7E12F6E0AC28BF42846921F501AA7E070D5D43AB5F1F8421918CDE8094B86FE1FCFCC2EB42F6193FE24C9A3D0D6DA8D372349E36F8B5466268653AA18A15B14B4DA6D9494CE2DB76423FB354DB4F636B11253CC4EA8FB11FBC45F5E9BFFE6E63A754A384824A8FCE38124496A76C6F2321E3E9478184D0B72C7AF7E7D63D433182229C3CFCE4A2A9071B86C6FCB6BBFAA88334D0D3D21C09BC90229FB92351949AD7B5294BC3AF3E626147CAFCBB5715349BB71A48E3097AD8858F5F387452366BA9ABAA0622AB4E0E99CD7D8ABA4515C63F42369D7CFC88FDA0E0E6BF10B1885D3452CC81A258B50D86B92483B3597D9986082FFA1D97D92CB50C4034B3F89C11D133F257D2FC1160DB961A2C0552B3D96315979DFD009B76865B2AC828F3629C38579BD86BF6A6D242597EE54259C853F1B27D80AA1C57A3CCFDBE3EBEA2B8EA5B8048914A874C616C1CA7E736B6F23B4C86F33CB53F3E1AB9E4791DEE910283CF1828FFDC3805B38B57F7CF354257709580C6AF445369F72EF717C7429AB622850B9FE97627CB5C05860F4195F439DD4433041EC62EB0834A3F28D68B8161A81FA9DE0AAED821A988989DF58070756D3647A8B6B0D482AECC566292F8703C159E20295700F088997851FBB5A364E71D3CAC869899F698099F224D46892E104134F88E51E2C621AC578884732FB0B3A90BD83D6AFACC8CCB003B842AE18C3FB234CD87DEEF8B8A3343792ABA47357536560D51A75B32FEC97D5532E9490D6CCD6FA2AF5A186F2D9F6FF2AE926C90BA2E11A0156888B3EFC2B5FA644BE77AE7BBC24393CDAACB51AE5FECA27EBA52106A061118167B408AE16A06BA815F56339192C33F1F8BE3BFF4F1B2868F1DA3A2399D96AB731CA2243F87D26878CE51F94C670F9CE17F1C9DB12A69941A8D90600D12292BBB5F70982B65FE5AAA6B076DAA8685B40F09A6539F233BF07890E65F3C32E088B9D7771990C9A8CF5CFC51644C22207BA6678FBD97613185F4CEF25D6F997A3590C7CDFCFDD0BC53C3C714C54C1931C1FE2DA42DB6BD5982EA3A4037D253D62FAF813FEBCF2C3B4D936494DBA04AB6419DE59D3FFEC6BAC1209ED4B25B47C49A3FBE5C1DF8B8CC6E7A84E92075CBE47C7C31D2E25B8BC7EE105A9C1F61758677402DE52F286B556997900C6CD4E2B8EC065754208A186D299EBF227AF08121C5AD05A6C543D0BE53A42DD2021CF0B897812529117ED631BB1537D1B937ECD2C1D01CA76DC8880568F3E47F83CF5191278C00172688CEF14124CA3CEBF585109E3EB97AB9D89E46A006A169902B8CB566199FCD6F60AD88DB20859B6C12F39C62123AD380B2CE04563B05573885B7608EF5FAB32F06B297B71922FC3258BF44F5C2CD2E767F9954CB85EE05DD4EA501C981D9C23084FB3324342D55A55D90EB8920E75BEC72A7A023E2298B1B2E72860DDF58FE99E90D1A6A6D63BEC0514CBEFB292C487ADCDA2A72AFAC6B11F073A1C996CF5228493C5F8B34AF6303BFF1FEC2879D214CA6D33DA20DAFB4E063FA16BEAFC74C773C2C324F1BD22A1F522D0CD5C44355A354F8896C333AA3C815E14D6166CC87116965ED6700B218EB6A36B70B5160A5CE06633883C4727A9421128732A9DA6EB02FC4A35E2F16D1657CD216FF0FF98B19C07D3A126DF2B84C72BF6D592491221DE60CFD9D6EE2FD7C3B4A37DAE728ED13ACC4B928492582E0AE7598248228A697DCD7E4A9E5B217A0519CB25BEDB357EE1A6F3C0A01BCF03F4AD2D0E92C4C2C3968D66A218C774E3BE8D74F036647D855BFA668D814A0FC38E1D4AD79D38361A0AA2CC4D58D6751F5A4AFA2FEDF515189A16830AABDCE287ACE8159ADD434E20D229FA635CE85B5D0929C4FA2D01E9C1E333E97894E8EEFBBCFD238047F982B968836ECD772854D2A06246D34B1E27393F696983F487BCECBA83BB9412BB857F95DD3D7A3C4064A2C0D5C25E10CCAD67DAAAE2015951EE400CB00FDEC0418613CB3E7EA21EC7DCEEF063A6B4D127906C06DF9F6C32B47BEE0870A7094AE920777C02BFFAA5B2260A94A06BC028AFF9CC7913EE525D809A0FB25AE60F44E5B9D26E1793FBBDB8A4616ADB30BED00B2B7E67522AE9C6B7377110F32D2428778424E5CF0256D81785D4037FB5BD8C5A14629436EBF47A5C147B041A56454930CCAB739F4523B9CA52A474555A0867E3B89C79761BC00 -MD = 83996AB50A28FC4E6E140069BD0814B9B82FDF45ECD057AC33F32EB2 -Len = 15593 -Msg = 3AE7AF8BDEC619AD50546288714F7903DFC6422AA84D204739247EE982B0B73F1D97AC19D26ADBAA8B98781764FA663DF9D7058AC04FD7641F4A7592AFDE1FEF9E15050587820EB2520D63FFB88EE12258D28732902C94F88FC81C843B355C7287A6623BA347B9873ABF15402993E9F18634055F05DBF799D6D3B8EDE1119ACC68EFE5ACABA39CF46B775D40C4443B0B043B0588C3319B4B95C93BB99A23C7685358E233F5BB8A74257BE16BC379F9759069FEDE951D36D106E27DAAC6701A2D9EDBEABF260CE96F64A418D5E9E1FF38A778EC14BE1A8156D91FA2C3504390BAB47E9130948BDCCC14C5143221E5578A88893ECCFC33F7EF799DE387A5D932B2EE74C17FC6056E96A528FACDACEFF6AE943539DC68BF243BCDE0E9B9B31804B7D8217C99ECF7233C2D51258EA3B4CF0D70A7BFAA4FA4F59E84F506DCD528CAFFDC1108FAC7CEAF55A6C1D805556A5D7525F8ED33B3176E0555DD860B4DA268C445CC3E98AD65A3F41A0609459A68D969C75FC86E71DCED87EA845BFFE7DD00E408E749B0BA9D7E59BB9B39AF9977A127FDC3B783FD8ACFE6100C312CD7CA20737AD5217DE7F76E5295C7AD4C2CF062E5FE319FD780B1835285DB8957790A7C170CE304E9E19D9C363BB95BD62FB15C57EADA965EA040D803B3640FF1E72E1F8750B1056D45C719BB85FE5E561D81CF5AD16A29A7F9BBD2EF992BD1D5691FBE4E6D8B2544FE955B6C29F9FD343EB57FDD53D46E7C438A6657FA205D5FD1DE07541ABDCFA340983DDAFED2CE491791868156DC41E925CCE17867DC186976C0129A6C1C9FBF2CD8E22CA6D5FFA3582717AE7F405242CCDC0ECFAB53364073CA98CEB8FAD3EF4A267737EFDAE12C88A5553F7026A3103A532411EE8B68F159104AA9E6A5430152353FF56212D014063AC677B0B006DF8EA45B20210B4FD48A167740AEF71D1F71AE2EF0DC501A457BF049D45A43D6C701D90857333B43FF97C190500CE4F0A5095DB4806A224B918F1697B39BECECF85EE6B21EA3FD365B99286AE27768DDB7DEA24B9B09605FA1D814B7F5A1ABA7AD08A2FB4C1CDB901388542D595CBCF2313DDE1D8FE206DAB35C7E6B61E25ECA07E77367537E13EFD05DBCDED99405E8651B02C59772C57C123F27944770A2C0674A5DC2823F9E0CFE8D359974EEDB3356602455A27D71DCB6FDD66EE6A0D6499FF8A0971383B3E0A2330E09AE658091045A7D03FA51A2553B91F8EBED194896D925307831EB69A9EF2454242EA3D2F5CFD78C053FF2045A91D3F427EAC02027DAF3092B0B0A0D3C84DAFA0726F9090AB0A4857A81D20C72B62D46B9BB9E9CE761C553F31724FD1921F453F1634534CF8067B0D46327F8170256712C23996A1AA2ADE965F526C1034FC7C2EFDC72DA26466AEECED194DB1F8F3F713246C6E017730E135A27BA04EB5CF512A5FD2AA68AE384CD75514038DEE28ADFA8F90340FBFE6792E85D3EAADBB267CAF351A5DDB1145D3B5E94FFA3D501ED61FC0ACC318BB4C5E61F9168ACEF8138A7190E38514888FC4A4184868841C0AAA1E20DFEA84660D4973F2E1B7DBF848A7872227A850B65BC59DF4A9266786EF8127EB32F035DEC8283D29D9B5D53B3BA54C9BCC5588448268E456B7577432B94520B267F0925E48CEEAD5963598BBE156952C8CB836F06E160F808E88BF0FF209E2C1F6AB757EB7B0B2E1F42B39C6B215F6F63CC8BCF7549930E0C28F0DC85795008550EEFB5426FAFF3630D5FE672CC7772EDCB937C3C9A32A2BD909B26A40DFCA5808EBEA5B50073B73D4FEF0FEC3677F9BC257AF57551BD5E7A57717E828BA0B67C36788F06B974A56193132B1D5095CD4C3093FA3439432BA3D447FB8E14E6868EDCC2F7C0AC3FCBEF79D122A8250B69AC73EE85D0CCA6BCB8DE60817B8D8A21D8255D4CE8E52D649657F2A29424BAB04D3A695AC8C634FF990EEA472F49B1720292C0FCB3CBE659CC4E2ACBFFD1DC4D6EC45E0EFDCCD76D552A36B527305892DE6AB2E0B077DEA3E0378A64C6DBD04A708416D33BC2411A6F10C2BCF6EB36D8C3D181414D9E77BC1D9A29F021F493C82CFA73DD8E312E3BDAD3C96E5EDCBAD6511482F537B419EEEC58E89A17E2EF3D6459B23A746C04773C55D16D1EED7283E333B0C68D1E46D539A5516D8576809757BC1E05ACDBDC59B9B98053B3E92D100D8EC21DC7CA0273FB8DCAA6248056E5DF3949081D96F6C62BB798D3FD7B4BBCA4B9E7FBA0586FF7B8140E26A201C9080F99C541DAF2F0C34047EF7A0E61C40ADD4D098FCD9C9233EDF2F62D6494421708180F81BD948274748A185F638AA3C907772DBA872E04815DADF3CBC639A2126258C21875FBD140C8EDD4582F955044A3C1F2FFA6DE6E6493F76A544972D57D1DFF93CF8785E755DC74229150FDC101EB430581406D1DC08420ADFA555B4BE399619E38EBE5D0AB4E6B2A52F6DB8919C0BCEE8EB7C136C991B8B85DE6318C366E19D84CB586E67422F5A1A9868C4B379BD299FB27B9B93DDA84F55D0116C1C091CB946C93A7412FB0B82DE1D53DDCFBDC9A552912407D737F4D395DFF9E8F6777BACCDA773A70B22AF60D4DB9F26C680A9ACAB39727717E6A36D0E2355993E816272FBBE2CC4D21BB67A47F782F0128A9205656E4409E6CE314E71337D2AA0BB80DA05603F37AA0C75A50EEAD336FEA4FDBCFF13F0463E3513B2CEEA66409695B5E5EB361C50DFB6B23BDF22E034E3A185AB15FAA4DA91A07F9BACB9A8900 -MD = 6C2DE9BD664A3F24BD052D4437CE547113A10D58CF54B9D58541042F -Len = 15656 -Msg = B8B27EF941792BD6819747432CB844D11D3275E235D6A04842D0EA1BE5A7270E3D32924D2F74DEB9AC5A8691617A1CBC1046A5AB8F89A6E5A84E7CF3B319B0EFE21928AA00DF31FED34E2FCE5076100FD384273DC5B3ED56079ADC948E47919E8CE5DCE44726F9368854D5EB7EA9DF4445F4E9A3EA55652404B71E16CFF45E407C8E86A56B4D2328AF7DC9A11C7490D02DDAD8BC81316B0C70C2E0BDF3C4BFDFF2C661399531E134A599F9C2F8B5397285EF5447903C0B43A5ADD96CD5C688929D0C05B57B5C46328A4B0D8501DCCCD6B0D22F1CBB40F90FB3D28338EF4E1CED2DD56CB569EE63A14A5420176B2F1F8FA1B39296AD88B52E7D3D13AE066668E60835A04AE815D481428A5D39DF18E67C4FE0F3277CD74273B5F78F9FCB93D70ECCF9764798827BF4D6CFA8EEB685A769CEF964FDA3E1E13C96660EB0E1851E30F1EC4B9D915C6B620204A7F0988AD3990814A095DCEB3EBA9B7023F2337B09B3268DF41CB5C721DF9A28518583B1011763ABE62377CCAA5B3277475A9CF72E36B07BBE8F2E2B0D2FE26E8B81A5B04AD6BD0CB8C80CC359C4EB38EA250577D2D06D14CCCD761E0E51C83078517A500A810CF0840A9FE52F415F96EA1D1644FE3E81823BC2196051DA581931646193666E00EB8003A1DB1F95E0D4165D084D5891153B6F27B157CED6675ADFC53777843B1F33A4337A2DA2395BFA280BE711F3CBA2A961B6011EDCA35C57DC20D926982E2074243D644FE60C76AE70AB1E2D904C3BA68D8DC7B5813565F1461E52D46253DEB187F609592B1E92E062A8AED576CA3381B7625C2E84B3EF93A338B97D699377E99619A116EEF9EBF05A7F3EAA96F32B6B491A2AA785303AE03552311B113B6E08F2E18F60D7198035D2C8A600D9C572251B542ADB198C3B5B5978E09393274D09797BF2ACC0CBE6C9E501A3C67A3C54B8BCC169A68A3889FF5C02059762771EA9B87B7484B4604B20E1D324F48B0C807DCD885907003187696A0BBDBE5FA0B0B373450FC440F698967BAAB67B621D8346CC43462B171D0E2E710D696EC05DFD51578D6244375AC6ED69568223F17A67BDB18C86AA9A982B7269FD04E278B9EF1F379686CD5B6F5EEAD91BF7D8547EE868D71B6E07E907E8883018B26380A16E779A3A86483CCD678473C31838A04E1AEF78793788330D162D1ADBF9E0CB1551FC14ECB87356C62EE17F95D38A634917DD3A63C07CD59324198D3FE6EB4ABD928D78D8CFD9D05B74F44F691C8CC3533FAC926ECB0FFA989F504A9DC79CF86F39525A8DD3EECC4FD4842FAE92B02CFF25DDE9B08014C371F41DF226235253B9B36E1EA8C7E8F081DC0E958991515EEA0855CE7BDF3F2EFB01831632C55E065A2EC4D16048407396B2DDC233FA0422F833946AC32CE14320820051D5A68A7695854167264A6415BC078DC37C717C83ED7879D776FD8599A71F999DD5AA2A53E9B6A38CC177058F7A147B6E043B2B5AE5010D017D327805C858613081AB4943981CB7457426B7A857D2FEFA063DFB655997036437D18D8203F68D89FF5660D310CB99F5CA378A9FB80FD84852A0591F0E41311100D168AC7867E54D5C6938D72723F22016C962EBAA67368A173CACA26557B276A29ED4697AFB6AE9BE48D7C411A9177985CE34C0C1BC1FF87D476876705D3157A789B4F0A7DB6C272EF4AF614BD421029CF74FD17FF1B82DB190CA13F02E60A6F2B261AA4FDFF74E2DEAB18222C674FFED711EF887F7E4E605E3241B751C581E96E8B918974E90022F086E0F92B63FD7963DC1D0F5CAFA1EB9DF69C32B9D1BDE99E89193B974D41453EFD36783F92BF2CBE1EF6DC56EA20EE9AC1F3A7435DCC21A2066C63B746343E565182A941CD22998AA3413088AD2801120F562F64B7AF55D3C6621BA1301EEED652661BC22184BDB9A9AEAB67CB18D85612E7D8F7AA2F7D2A6B3C4545B40517A4A74CB0FBD4610AF8687BD6929DDEF85C0F74C66DBF64A83BE1077ECAB0C5EC92991C6B8652BDA8E6C088B0EBA61C9006158B48F88D8257AD30F7AA50FA0EDFA025FBB7028BB978396714BCDC2622290F907B84247B70B71AAF608315DDFC78C9AE4297195EB956A7990891D5C83DA71D45C8EC9379EEEE0F8F01A29CBB58B41EC75D905C77AE533C5122B907B6D2C6E4F423F6914C58D010BD4F26BEF3823587C95C7BB8670CA7512E8D7223619CCD9B88C6158B1500B9223AE31BE27D509DDEE72BB1C298E308C46CDDB93E500A0B54B41813BBA528EC1F8FD6E070F73E0289AF534670C8D2DDC98E95FEE6B39F3F3681012B5BE028C3CFE7B2DA5D7EFF3FF352B6450EB4710EE54899D9A09B0F2D10A8BB177BC30EAD38CD29933A715608E625D35D919ABCCBB58F7C23A047FECF9A9226930438E30F262187C7FC7AA872C3651C632479C2687777E152258972FA4FAA67633862BD2423248430D1F444565AC1A6A39D91536E003667D88DF89D9D1CF909451C4FCE3556B25101E887FA8ED5AA8D6FC2DA14CF379A54E3DA7987FF2C811DA0DE48625BC8C4DC345C4D195ECEDE0D18AC3709B4B6A8AEA78A979A6462CC0F19443096E392B3E142690163CA28F01BD606958F6A511AF5B191F0F37373FB451E28EEBE271E631CE1FAF09566D8C6E1D4BB38968785829667E37538712306A69CE67DD502F01CAD3560AB696FC2A5144B553FC44B5F1BAE4640B1347A99CE98E224F8810983D64154A7FF5CCABC138E4C42257DC2B5E5691FCE4BF4A88965AA3460871A6EAA3 -MD = 88F4699892C21E05645A035AE66259D446AFBAA22E352AE18F668C9E -Len = 15719 -Msg = 7A1DC8FB68670CD64DD1E7A3DC1D698A5C20FB1F29204ED201A8A9A74821F1AB846BF00E9B941714342B62BA7426DA95FB8958DF1750954CDB41CDCFA6C1DD6BD99633A0D472DD3B05CD875EDCCEF1AD4EF7330C18D94DF88D0097DC64BF165F43D8F7D1ADFDFD00BE92C4A9D779B53D05D12B76743BA40EB60565A3BC5148FEC83E9FCC0F58D99B1E2120553D037AE2CD813169F7952864A8BBD00627FDDF238BC095D2CA835941A601CA65E446504E7075A978968D44325D10EF149F7EC6F5BDFC1E87589939A747A8F0CCDA6285760F31E68AADA68BBCF0ED8C30516DDFA515BA24F15189826D32B697CADBE1F665A53021F2DF37E65358AB8921BD40A67D430CD0D53892DCBB4BB2F9569E967C742BC0CF87A703CB9196280BF99B8EE1F77C3D90CBEA3BFD5D9A40297DEF5C0D5AD4BA0EBD59058A54CFCC816EB4029857F095D9EE867E8D8F5C938C0689B97526053777E1BB3741BA3EB70D64EB8FAFCC940CBAE8956A5FEFD5EA8D84D0FA1A7C9BEB0A4AD90B67CD888FD1EBEA0BF44B41BDE0FCE81B9D9E753789AD282061FF138DC63E7B00C394311963BD32FF5A6A89E357CD369A20F196C8C6086DC2873708890A379DD5268242279361F3BAD6E9843A4E8C3BBEDA5D7F70F90F5728F3D4E0FE111512A1E0C959939407D615F18D05B40EA58B19075DED31142C5F926454BB44D4C9FC5BECA46A44AE3972E599D69AB7A9C52105DF3212DA554A6FA8638BCB66EECA11309212AF918C93A11F0931EFEB1229707A9BCE4262E035858E8E6396ED540D79D587FF5DC8610CA412D697AC05F38B9D769DF9164AD81EFE57BD404C57C714293FC42726296D2D0B89BCC0B79C12317AD8FE8DB25FE19CD4F0FA6F4895A600D7F5070CF4ED78D82B7771A2279CCA3FF857BB17E703988CD1AA03B9B6FF016F2527C93DD6DF36FFA60E912CE40BF4A3C3DF5180A47C3D24C763571BA7704B01AC1E541EB7ED93390EA10FBAE32A36162331E887EEFFB1369D74AD2D11E306C651D1E185F049A08F8272CFE7933897A757A1EAB55F152D4AE6D9DF7C75C1CEF13C85C4AE1CC4DFA823FDD1C0FCB22389306D382FED0B76F62A5B1E0FC76DAF22DAFA3ABBC9184CF6796455CF11C145996612F1334CC10E5CC5A7B7932E90791117EA21277C16BA710285BDE7E79850E2C2681F3257F176E3E17331ADAAA0CE2418014EEBF651040736B234A4674084866B57CB0B3D1C53A962DCBF1CEBC1909ABDF76F0484DFC50B2F661C2D69A04EC5F635B1E26B648CC003E5F3DF7251D85DBCAC5B925A672F8DD78628BFA0FE8A453EF7D4845A89325F01CAECABDA8ADDD910F8354798E6C47CB7C5464DFC601AAA2FBB193B3C5DCF2BE6F3C14A7E6723B5DA23ED63C1CCC9B0B5D873C89F3A49C915F62337DF3C1FC4A0DF4E460FCF8BD58CEC9D4250D872E58436FE61C59D9E0D127E3F2301254FC9066D56C963DC74A7B24BF802CC711BDBDC3ED1FB9025BE88862538AFEC9EE51B6D1321C9C6410DCD55FAE87BB975FC82AC64D335E8DD22995E24D204A419BFAB00A91C08BA2F74AFD97FDF53283556BA78F1928ADBC1484013E1EA67AD7CFF979B1674058C8F683AE84302AF00D455480995B49A8F94F578BB3C5219C12F4CC9463ABBD72A7CD7D04FE0533DE5607C97DCAD4EDB7332C3E738B2A7CFE8297F0A61AD0580CD7BEE0D2F927B633877A5EBE61928D7735DDD93D9F9DBCD2233B7A42D7FFFEA52CA4E8EF0F37B8ABD7D11EBF864D8E1E5AE2F075723DD24074A8F0AC4C28D52FCE5CB42C01C28D10860FB3C8BE43432E9D6BF25DB17951E48DD3C4E606EB224418E53046C1D3225ECB5E7A46049419AD5FF26762D819CF230120D0FD94D26EE4136B60A1658C82ECF1B3F439F8921F5372F7C9598597C386525A7056ACF2BE1BE18EB73AD0E257374FC2D8C86B11183B990669A4CA8FC89CCB35C3F79C95851C4DB8AC375C482F6A129358213F2BA5E01F83D7F0E28BF99872C2227F2D42876E4202E3D1C507A2D5CE7D5721029965088DB7AFEC3508D5E0316633A6C4940D73E6234EF457A81BA22810F053098EFAF9357CD27704F8BB3511C2A7BE29F8A38BB316FC7BDD907CD6D548F859C01AA42A00DAE0696D610BC77FC893060A774EC5C901E8872CD73E84589D93397DAFD13B396A6E9A3D35A386F2041A9E14A03092BB8E88ACD6D4AB53BD1E13ECE58005039700C8E8E4633D81516D541038A1D4898E7703288F23AE27700D8957DD1BB812E9BACDFDC4BD1F5FB2042603C03D87EAD5C217AA80BC01F5C1DBA1F12E8911A379BF408C5C41CF1F83FD7E927927F93EF0599E4A94BB184040C3F6CC0633DD2649E8A6FDED4875EA6C6E9B38BE4A49861112576A533DE0B0F09719BBA10FE6FFF65818D787F3B8C127F6FBE7B004A09E90A9DEF96A3DD9686F7EE423623E594FC5BC6702565BDC62A313639C5A0A9538B40EFB431A5B707195ACEB0B3DD65C28A77373AA819CE0A3712C073BBA7E95E8D4A31C6EC75D93A219590C066C4A97D5E9028B09C78CF97C19AE7EB7F71D20A01B3BA7DB4DB6F9FD715C13514A6CFF2E04EBA0B59D1F6AF0B322FAE8DF7FCE77BDE47EEF59DB6773C8813FD859D7EB243D3321DB7AF48093533F14E6894159A70CFBEE54B6D4E831EC94091660639E5607198708387D49E551106DC5233A126368B8BFD582F4462144560FEB290AAC0E3D796A2E7DFBD49D7D52C8F0D7B8814496A9B4AD29F1C37303AFD63E1A760F717195992661B6F303EFF6D37DA -MD = 1901060A578B5737E9BB0CA1F8E997E5D7C8C1436B3478C8CC3DCB48 -Len = 15782 -Msg = 6764F4296934C920A8D492C083F44F62FAB07F4619706945FDD45FEBED5D1413AB437F08BD459AF605E66813055C048DC71E5886C8FAB5CF97952FB7770BA05614B85B0426AB091D103C3D2D544371D720BF967CFD8150432503B03D36D507A3421E4C1F1E3EEB604126E93796C2A2063EBE2FB7682A93105FDB2AB84D4EB8264AD592F96C92DED211D55EFFE5615CD686C1331C8AB1BF3597B1AE8FC258F29E0A873065296AE17A1E900C5097738B34CFEE19DCC80FB93752187EBF0DDC3CAAF9F137CB4178F1F960903BCC35C8AC4D7F151CD31F3F2C1D00EF6AC56D5EFBE774FD156EC3202393DCCD4F9455508EB9B0B6FE7DB016D491DAC4F3895E649FB831D56B3599184721C27C1AEB66A5B101401F62579861617097C9947521AFA04167AD1BE01CF1AAA3C8BB0DADB3146D4A50EE581D6F0C90DE611169B68321367753498504738A4BEFADFA4F84BF4257F6D4A7EC0817BDACA1D94E2534D85E1CF70B74DB0278C06248450B3D7955FB3BAB46F013D419255B04F2E6B239DE406B4B230E2F21898480C0C8C1DE850B699714D2CF682F41D8A316F202EC815667E6C4D67B43D58714E26584A17034D894C06C11395DFBC62C1BC1C19DAEB9F1716ADD3486FFED4E2AC828128310E03AA90CEB622BAB8BE53AD2AD46ABDCBEE8C0E36ED954669FDD26C3DB63D23D07A92F71909D418E0B8088CDF583CD0706641A4C671D328D62A3A7F3A9649A7B61003F28DB95661C9517142186787431479436D85655CE056AE69E60700EA405746002FAE394F71B3FCCB543F184670C4E9BA2021C4D2BC071DF8CBD5B5A795AA27257146474F8621D5BF9FB1F78234C4A6130D024B8B029026DC782E1F8234745A5A1B8D467554E7D385544D1252A47E6F4E0528668487B4FB3F835B317B4EE02893695EED48FA927BBCE469E7FB23A2BF92DD639AFC3C7367E9EBFD40B178A1DAAEEE82C11925234E7CF58E050D804155E75BC2AE65851AABF3B5227ED933E3CD0869E38F9E920A505B41612006F782871D676E64C34932C2DD13B4AD823490864CE4CBC73DA443CFAB4B484414B72F116D3270C9D7B09A3F0A8CACB572016651E2E04387E26832ABDA983C78022F282D78E2C180FE4E56D3CF8B9D1EF7A8EB388A5F2D39E88B816769CBAE6766FB423B8F4ED0559BD6B2AA6214B7450BCA9AB5C1EED2FF7DFF7191073A9470FB7244F0DFD66FE2ED65700225C84C8D2C938C1F6DBE82CFC4D5F065B00F0564C46BCD6CAD8ECDC221435A8E8A783A40D1BF7F4AA7E62F195B1C5F48F7511302D464AF1640E031B22B0C1065B823408D1678E99D1322EE919A4C656F03B9C449F43725EAB365F9E8C5D2D1AC1DC6CB4B53C9F313E2E46FBD602270790F5727CB57E7C4C52D7D7B2AA7217D03D34F90D2C6F51C50A66E3954C8B647C717A988935F7070C0224640B70C6C1AAFF995E2F4BC2CCF3089E6F28EA967477C603AD910009C921F60B0FC872F5748903EE718B76857FEA1CB9946309F6F52F1AF72A5553300D0F48CA9ABABBA7F9096BCBC6881774753F480FAEEE8C780605B4D99FECFBCE2CEA9A26A0A49167D48ED7A138B65F29528465B285068BDEA1F4D98A19E705C3183D80C288D71DBE7E09FBEB9365BA55A1F71FE047DF5CE0FAF8F16C441F8A9FE9C6B963537139C11DB3E59F9730150F30A6E187400EA034936BFC20096281EB362A9D268EE8A91FE89510FCF5E003A7DA6251B66E49CB7C3B3AA8AFF4BD39C10882627E83602C62252DE47EC0FB37A26054C2F9FBA70C2505BAE83D0E67E5EBBB37764BAE168CDB7DD4813635F2856A512DB5B3AF71FA6BD8B8FD13992D6D10D9E99EB1E3F74A2C535E5CA16B97EA9BED86252B385B26120291CC49AD50A2E01570BFB339668D654833A0E52E9BBCCF5BAB3CC9F172461EE0F55EECE16C2A94D0F6DC32BABB585AFFA36A987E848A215C8A318D74176BEECF025A693A083D1F404325680ECD614DEB51A4592A6C7F59E8E10F8E20ABDE5DD66E9A5E9B9869DC8AEC9A7FAE076795E5D9D6146AEB22432CCEF14BD10E2D76FC305841AC42711806AEE81F3368972C1B29BC0770385943BD8EA3CE09DD119E412F00C4E777D4CE680729619AF477D8CB5144AA1F105A311ED62AEC0B554D24F9F22BF4B8E967D0A67443100458014CBA793004292FCB2BD9457D82C7DD1480ECD7AEB8E80728888059A6BB50A1623AD172ACC4D8FDA1086976D1C53EC3C09024F1A5043667B4A4ECF27C7A6F21886C2C27A4B1D3F912D39A92CB7D3D5824D6A97626BC6799F3467C63001ACD167B76CDA177F9A65F6FF4C811FC7C77BC149E5A531BA1A2759EE847E133EDE79968671563DC920C60C6F9ED2F34F76D1DD13CEC4CECBF164DBE081C42BF1CD500767AE8DB18FF95F92E214FE56A3A98BC179F782415BCAB02F3FF369B0FB8D0F3D17B1F96996F1C19FE385ABABACFC116BF9112DDA1892430D4F90884A3BC8A2A21718750AB11B5786DA60C882A304484513FE7059F875DDF6315786CE007BA6EB1A9C7BAB86F53C29F3A97636AC16D778959BAF03E18E79CBC73E054E239FA6C14FF3CDA00D35F7C2DE6ADC360AD680F652337928E04E64CFD73C09443D1A670695193874B67E947906C323DF77E01E6C296341CD87776182B3F8C683BACE51521F66AE2540569FECBCC51FA8E83686F92897685E6E3EE4008840C0A3F4CA138D55BEB30BAE1E684ECAD6B030772D7005A4C17771CF107EABC73B146538FE88C5902CDE05D97958869EFF493642EF99A260230E184 -MD = ABF97460AD112D9FE783168C749FE6ED0EC07D17D0A9DA85CD18BFED -Len = 15845 -Msg = 9AED74D7C2D2212490D528701D3256B7D96117009299FBACE7CF067D27235FBD8D6B67F2376E1FB9B69B2DB9F46450F459DC1C6DFD07D1A24756FC78DBD4738BD76D0236DDC5B74649F13D73A94BD95BAF2AC2E0F11A2494BF3E4F696C5FCA28C5D3E42AEF87561405AB549B4E0B32E93EDB45CDFC46B107AD74478A4AA5004076F3225AE3167168466F392AA03E3E03C546EA11D3FEE6D467E376CE116E264D7504E136FC981BACC2DFF29B3C68E1AEA7C16A69DEC8596E98F1050415B8EDEEC6CFE88E966520C0C3C1D7DF24587E4050DCAD3448C90BF3AA553120A432188AB296B3FBDE3CF2F4BFA892432953DD519B109088709B0DCF8E2D189BA96F455EB12F5FE98CA13D4FCD6E67C3676CD84A6DE9220BA26E5E84A21211543E246F4359B9A3724AAD4B1ECF32AF17A9C29577BC0074604FEA3CF2E40D76D097404F2CA2994921D95446B12B5C801400C5E81DF33F9C5A2293D6390073ABF51FA61A4AE9082E56336477E160367D9439A4427719E3B7D224C8FFF67D224E079402C976C819F902930ADDEC6434C3C39FD04BA01186A13740FBC18280B7B626DEBFA83190EAE217DB7DA3531E09818C041045A4766DD670AEF4FBF99EBCE313826A5605686C98133A8833E554BBA35B2F42912C10FFBDDA747714A9A48CBF280F57FBB17C4D58F9DFA5BDC969210DB54CC4F3BCB3947161A0C7096C490FF120BD66E6432AADC468E1DEB676BB8CFDF18026C412B9E33C641D50E05AE5957CB50E79A2225DA1974E6633DF33F5B3E3AECA937333922A1D4433F1C7C751E9B7D1AD2C73D00802B54524C6686534631AE19862FD4F427C7966E6B907B989598C958C9EE452464A4FF20A781DB0A66CB3917640CF22EFD86D316C76E044969E0CDE339D9A1F6D0A4EA36B206BE7FC4D52D9FA8DC9AB1C6B23FBF113B93E7D2F44E48338D5A474364A771150D83E766242EF7AC40452BEE381A58E886134D4AB1A5ED4F73F172FDD9D597570BF036536DF9D97F7A95E7C8F8D37444E2D6A2F86AD5FE97680B983493AD0D53AC4443CDF979D7A68CA7098AD12641422570DD800A15AF1981EEFC75498352D54E1379AB26DB17393880DD747ECCD9F3FD196BB5B05539BD431D27A344C592D53F37972AA94EAD8DB3955A1ECE3AAD5B587F9C5C1DAE4294F33DFB9E28522C56BBBFB291697A7823094444AA750135AFE1FD6CA1AD117F00A3B7BB7504B6DB3AD55D90DE874B5F7D6CAAFB72BB61FACA71C84472546F162F20511A6D0FB24400213BBB06B635DF2C72B5859BE417A9D668D3B1D14FD033C641B48C38144C49062F614EF1B2D883D198C75A0070D32E55F51983560662E0B8A94D265F20E3F81C9F38DEF507938A3593D4B2D399C6B6A8E4F21677C613CE2029499603630165B51BACD5F0A01CB70AB7D633FEE2FED30A24F8E2C24AE8A55FD97342301466F6704DCD79948888D39A12CBCB8ED6302D3C43651F9CC078D41F1B53A02255D424B3F0595B788D7D03A05D72DC0213CD8E1F9A5C5386FD716CCC6EB4D5F76E49438ABC85E2007BCBEB8E7EC63C1F709A03AC75561FD25B51421F3F7B4F0C56E093B154E3FE817FCA3CB85840D0E21AB9F4330F4C407B815BE3116595EFB40D32116209FF9A71DD7BF4F3B240F692D69C7F143A913C889987314509CC8468E60E05333ACA24D593224E43C6F93A72AAA4BFD0E6AA199DB7F6269073E628AB75A20F2F7D3C6ECF26F6EF43C4870021AC7B6FE9C26D4AC48F464F85524529A2E4B7BE5E5A0ED1D00F43362F044BE2101BC89938859EA1A6531521EA8A48642B2DAAF814E2379409D2220D61C5B727B639C7273C3E007FEB1C51629A5442A935173EB74C255A5259CEC8F1E9CB045BB4DAFAB86DBFB06D2022E4F13BD52092352EBB725CA0A7D6044CA2C47596F473D45494AB318916BF48E618FCABAE950290F6C8476E82F9D701EAF1EE2697759E20B6CBFEFAC900F91E845E581609DAD4AAFB5B1939C929B7FA98456B22431CC9E99D479FB6D8E5B0672444227C7C4268F8927F6D15B71D5920CEE2EB8A5618A129DFCF282B67E2DE35C8CF1B662F292F6E956CF079404F48A0897B8CE05C11640942626298404F58A9ECC715E66EB31D6D681D21232DD787F4ADB89F791A34F276D6847CCA1A5A9149D3D510BD40C41A7820B42763218408CB183693DA41790A1B609EB5A162A794902631C8F79625964AF5B7DCF5505F21C2C320EBFC859715A71AE4A07062895D540A69744927449080CFE4B9BE230EB06A27814F16613B3B8401AD5CEC042981A515D33D406F55641ABA449AA349B5CE396E79B74B9AEA1682F10440BB7E78E7050D6AE68F23035F9F5AF8B85C2EB21194D7FC841D90D6722E7A4531F4486EB58667195EE9D2A46AAC6AF255775BA77179F65BE63D677170404EECAE832A9A7E3696154228D76B1B04C6F7CE8045B0D92323BDF9559AF3469EC32F56917DD059AC402EEF0C5AFDBB7DB2D95327A238D11D798A4DBD8D596271DF740BCDF465B3F2E87E539196A86B80029903106B637DECFB68C2AE3BAC2C770FD71AA97CE7F19AF4501749735923A0FA39C3D7F4C2F1D359FD47FEE8126D469849B746FCA2916B5E34B10595091A9728070A1C19A8989CAF6485D959EC8B3C6BDBAB2A9A63351FEDD31F2B475160E95A6761DB40154B9E6B3FC2D04FFF37A027DC5B87DD0D3522C6930FA5A6A0A5D285713706B107BFC8F0759ECCD8664CC5E74B94850F3D1FA39048091CCCE323E4E2039138010CEB8894F52EC9D1031651925A555E7A8496514528F38 -MD = 6D91C5F40A661752D274BC7E926758D65932EF74B56CFC65635C3A07 -Len = 15908 -Msg = B03B8912347244B952868A1FF8216D4A327D66807FD7EB8B5FCEC339408A79E60335C5303DAD286BAF86EFA51E40B3FDF89896320D6D8C5A244EA4E8D2B3D4A1895261B7187EE69961DDC1D03B87973864DE6BBE92AEE3CC7807FE45EF29DB175B7CD532F08BE2E2AB8926878725D16495D1AE64E6E1846F0233D7BF4DFBB281D6869CADF45877220E3BB80B127B596FDB99F7B397B2EA24E2CF6733F389564CAB41CAE8ABC2F2353114AB9F5059223672C4192667BFAB6F40176996020E9382F06E50E104ADCF656A345FD31CE2CC492F0AEC017ADF7FEA790621F8F3104CFBC1A6279F9F08966D756F724670AA0C5ED7DD9932D7DC9426FCD8155467CDEE6F9F8F959D682FC4D6C074ADE7BA6D9DD64A1843084B5CFFA9642BEC062B9DF9F5B9630AA2FA17A72F7F21371A78930606350934B8BD11F466EA34F8F73D3C72AC6058E8A4ABA04A6609AE1789E3665865F4445BA958A0C57DC1BF9B4C15BA00EB412A694062B29D3172398B7D9686A7F3D0644ED93291F9CBC4AE6C243872873D7ADD90024EC6EF06776A576E7B874581754BCF2B564CF71170A0D97CF4C38AD55D4803040CB61700911F1273CA4719ACF2E46C99748AF999BEAF29515A8FD28AB6D44D81A80D48AC2584B799DE66B6987CDF681C9CA725B93363F2CC5459977243CFAB85B0A841054DA5920DD5AD39CBE99705505A4823B265F885744BA40CBFBAB9912DF299A149C7656BD872CED0C517F67B8BAFE42750459695B7329272ACB4434D0F062B0819D2D526BDDF71F55F3DE125E2D4A373B18DB1FD850BF23A932C35B9C6896DA7D1A5A079449CD52D92BBB7D2E96D4F219E7CDCBF47ED6E2E38D87463EF19212077EC6C54E0DD1FD86088A8C4A2613945B42AE1A9ED29D7F1FE6241DD21A330F3E72AFF575D8BA00183CAD7F860FFB8EBFDAF7ADFF2824701B917E21BADB60E80939CA1FD9A0BEB7E6691B34E2F5EE941F48DFE7DA24454AD80C7CA7C88443C571F93EB54AD1B53DC04FC788D4D9D03C032C934588BCE99AC798D445A5DC54DE5303869DED501262AB30C569AACC4C1D30B1BB39725BB4E9B4D4DACC22D19B1133C62F633229B84A6485E14D9F6518F89F556F3D97716D44B48C4D5EAE29EC7F2D5E22BD87F3EC0126C6B6A52A6DD2EB34AAE5875F7C74063A0F2E02B7D6EDF509D12E25678DA0EA20B7D2BCF44C16747A3BDC0211104A0425346208A4F1DE3C673EFB5CE138BA3126FBC06AA96737FCD282DE9B4BBDF881E0B6947FC291A0EF625C917E6190E1FE73F0DB2C3C86098759D8C77248AB9767F8CC574E27C217582BDF807A0F9D24462D6A11AB8AB80D70E23F1BDBE67D277AF235D190410C802221D52AC2AF3C75B7EAA14A445C9E04330780FD817D762E070CC05BC3F93CC1E5D0DD086DBE7BCB78B540654F7402B2830AF8DAEE6D071893275A9A9C242116653065BFC69E10A48115C7E068E59DC0DBFB51E0AEB038402AA41B807C0CDD633EDFE08A034A15453EF6540B5B2CD9EBA3F9E021C2088E445E542B012455555A16FAE0553CF26F73DF1AE2524063A768224099BD2BFDEB7F467B858B867A64716DCBA677EC1CAEB53525D9CD91795C5BB464B5CF68721DA28AA5363D87C699BD5E5C9DF832D91D2C3F15EE8A90DE80651DCF1AD70B3E810F825D62B07C4AA047F841BFD7555A90F9AFFA8C5E98D12B199AE5E23C919EDE3627AF596DBACD53E29FB03EF515357A0A02BF2A70C3C8F108535A80566FFEC779DE1519865AB72D55DB985D1C8BFE2497D7EE44D465F35F2122FB55FC42DB7D5AB4C6DCAAF082C87E905FF2DD91101662D31B3294B2580C79C5C139002B9C1BACDB9161DD3C71F0814E9B2FB46C22CF88456F343BDA00B415AD493579BBCE230CE5C5ED6AC190E34C35257E248D85DFA7B076DF8A451033D88EB64413D8C97ADE3C4D38AE2C817B859A50AD52594399E265B5A2E50BC7613CF2E8E63E5976C48927C7B741339E7D02D3D62EAA8B5D2F7F59F72E10361C2F1EA55F8A3303BE2D6495901EADF6537EAB84897EE4CE6BA439B6E926CFFD644E9D99342D51E8599BED927151F49BC47CB09AE96B136B3679862424A217E752C041D6FA15AF8FDCC702AF0E2135DF1EC930814BD58E238F87C63CC5A52D371A7C960DD1D27A632B86761294073E0B4803FC32FE1892B1AEADB2F4941D24B124520B45861B030DDF7BFEDB18605166C7C9528EBE11B6A124899ABFC170B534CB13E53115436A0FD5CD5CDA5E9DE6D264D8D4E6130E505E98C37DCFDC99D4E3F132A17ACA56598CD2DB304C52F1FA35B807A4993B00568E9CEAD03FF6F11A536EA446146502F6D2D2CAC903D309C29915117AAB42302D40CB0040DCA875955420F2B17F1C8DFF4993B267909B09285BA6531A3FBC19B3D1519B2967989D4C9789A7AF2F6DF2C78C5FC7C6A79863CA0242F8060FE3BABA7C8639A61A2EF82C1706321EF4E77420BFDF1C36D3126E8AC62BD0842B937C4F05E43745D04BCBD6E3A0DE41E1BB401113398444F1339CE146E1ED56B6710F391C15559EDECFB78A8A6310ADA020190B51FC15E595EB7D9E844F563A59398F939AFE485AF6D8E8243A49F5308B769037BBFFCCBEDFB5766D7E7FB364B97813C6C39B95E98943CD1DD90EF1AB3C1AE74FBADBB0798239E931620DD93FADDCA6FD1FF0C2548B00DC3A65E88D10B026EE2366A73B7ED73C457D24D91EC23C7D1CEDA77D3CDE435249ED88CEF21A23992FC69795D72B3C687507CE8F63D8C07AC344E7EE26486773A448446205968309C79CE31C79833244D3C8E523D80 -MD = 49583B2E0A31A2A0E6C5118C0AF6414C8BBBE010A92A215D14E34320 -Len = 15971 -Msg = 2CFBC348690343FCCDE647FC6F725401956C8D21F99DB93FCABCAA9271D0EFBED0F8538741A2BB665D3D71D488216F5FD1CA43D6CCD904ED98D77D10C248D4EB3DF996CB05C187C526CC406BB3576262502DE9D1F51BB41AA3A70FDDBA9C0DFAAA614B9C27421D9D44015DC5BFC98D463400CC020BEF082331BBACBC1EC516B064B3828DF879E9BC8D139D813CB4D142981A7A3AC41CF3681A9D4F36966EFB1255B75280A72C0E2B59ECEFD89A78B5EA5F8035E802AA59CB68B6FB3F79B4E812EE5BA6A31A0D206D44435F776D8DE13FE39FB15FE2C4B181425CBB5903A46942CBD46BE64C94C48229F7A5544F00C0AE2714EAD5A871E3FE44205232BE74B516F863FEAC7858CA605D7344E8151C96F9BF1C5D75846FB5B02E2FFE6DFCF656FCA1123F414F058F2F40A8EF3B28B689B60015F380E3B811C8FC839A7676CC15146D37AB34715AF30A92584561A2FF0CC09C347ACFAFE2586F5E6C751446147CEC878AF5D8DF0FCCA8FC77565CA45B745533D95EAF4CBB23599D0725E37ABC27DFD5CA264EA4D2F74A85DF6191D66ECA4346A83EDE29274F552654675BAB788894F8241D6F26323C914DC50E6EF4CF9A710637E2FA398BAD74DD77B2AB2BD77C0B69523B9D45638E0EA80613FDB0224074882CDA2FA9E963D5F4B7CBD1D66C722BCAD818833142EA902064FAFA9AD1E865C8FF0C97717693EE85337C24F2E810C4C2A2555485386D729F802843C4FAC7EEAD74DB3F64002DF34442E14D5656C1958E3AB4E2E30BEBA39C9B7D50198C03B0963BF9DC6A242BD5F9AFD5B4D8E65DE43092A727003B7AD4A12E575D166B2C412604CE3C82B98C5F531D7BB903145B63D2CC43362ED9FCC8162E1AC35DDA8B694FA916237F2B5BDA3F131C885503F3B46461CBFA034E3EB36F5E55B78A3483941B7F4009330D921CC127C11E3C7115A91420575CDB7B36F353E6B4A4EDFB68F68F8E305EA776046FA9A31DF33B58C655A7A7C0A8C6F5ABEF49A6494AC4842D053989702465E8071AB6261B5EFD95BED54CEC88AEB640565EF504AFACB6AD3259B5D12173D81743F0D0B96A1EE904D53E68C9E02870F5BE79A443089608E9E0762D18DCA8158BE4ACB0ECC397A935E4EC41E6E0CD345F1A9DFAE1C0ED2DE71736DDFD9172BFAB5DD482D845F8A8FA4444E92A5953835412B17A60B443D041AD01EEEF86D5882E7A30BA9CE2B2669C4693B5331F355A01CF03120FBD4E97AA725AEB44B292A80205969AF981A2BE726210EDF650C5AFC7F0F981746555A5CB0A345ED2AB1C75C06AB26C422139050617785B8EE72E4A452C114D12B306FE80F6990764C6489E4439FEA02F0A0AF480A0155C48762AE272FEE357528232183EE48BC07F7C969997DDBCD339889B565618665FFDC528F8DFA5C9E9E5FD1989B0A172A32557E379306DA5D706DDF0DC537B71B736197DE7287F3E95219ECE010322C8953D63719D738C2E0370EA51D52E0A04910295C74C9D15C8E9E936006FB9CB79AB14AE898AFAF88024561DC2EC5DA1899050540844A385A92519C46F16F3A78E7F4C4D152C42431526CE4272AE667B89D2C83D6BF640812A09EF6F95ACB65BBAF75A291F0F50C48AE39CD4C28200BA277CEC4FE4808A5811670B30C107E945231B40C9A7F3CE657B8838C10FF26B61833E530CF6D657BCF4BBA42BC7D9614374E6F00440F816C4BA2A239E0EBE8D0F7CDFB4956473C2FF16344CEDC409BC19C8A718D9E308E1B6323C73BEA74667B646DB9A7237BB28DCAC552ACE1E7FC15720E59FEA956ABC9EAC35089BF53B2FADBE8DD2FFB116C5CA2D6D8FD015D1D128F109011027C3F978B4D415A32E780181EF12A34169698A98D679C2725D48B35F110CDDAD1DAF15692193F3D4A64C56A59C58389C682CE0AC9E3796AE4BFCA9883E69A0D94B801437FD77EDA60827D0314201BCAC9942B470A483A866703F8C82878935479F8B22FA1750F2A28201DD87BCA5A51C4FB870BCD68888843BE9FB1563C76316C34D4AFE893BEB5C0B50ABF85885B7CA6D0E33CACCF2BD8AA15F0117C2DBAF9B0114B9CAFC800126E314D2CE7B0B93923CE3985CA6A046D8CC7FF897AABFD47BA9DA839F74641F1EBD46746DD6627708C8B44F6CDB3C85D666B2FD5BBCF29FB197CB684AE54B2A966F512EFFD8BA479E4BDDBDA9620A2CD913FED61FEE80A24E7F86D684F943C5E49E15A1DA80D0C2C088BF4324A2991DD5744FE7200C0ED1E1FD87B734254E8A8E9F68BC98D8BA4050CA4CEF91D571A5D8921AD639C948C9DB228EF0F16B4901477D6A54D68DE1354897CD903B6DD274BB97462098EE134FF57F33AE8731B799CE009F9CCD6E769AB28CF92C91A8C1AF4D4EA4490BDB5C44466CD61A90DAC3E5B07FB8EEC36A105DA3699DFC745EB6CFF89CDD2E4F1FA8A52904FDF243C5DBEB67318A5CB18B8FC4946048CD3EBB6744FD60D829A100F234A7DA942D1CA4F2FE463629CA974EB322A056D85E4B73453D101187FB3D520F264D0E0BDE510613D535DAAD181136F3F999C2F8885A0EA447952E0DDF2F38053234C820F4C9B2ABBC9854DEAFCDE93E47AD6D3738FFBBB66C842E61B3122835C1329BD77093C2D1EED5D0BC676459B23A4EC6F239CE2B893CA0765D4FFBF907DBFE9FAE6428D89F3E2C05A46E48E1D54518A01DAED4EA056DC4D473DD39C7155C9ADA233997F2700009A38EB91567454C6BF34B7306F4D1015ED8DF985C2C6806C16119AA0D0D23F7385594990D83F0017137997FDD521D38A4661687E671258CB8E0AABB463C175D55635D0A358C797122533C37DB369A538C4B00 -MD = F5EBEFC69C59939D6C617669171D58CF287A3C4CB4A05D635646E29F -Len = 16034 -Msg = A347193FC71F3B6E0A667CD91EA742E912938A705CFAA3FB7F27FF0321C7078A99FD93394B5270CD4D12AFF3C8336DAEF1A92FE59C6F4BD9B3C9BEA41FD1A7896869214FF49CFE82B3EC9A45EEC69DB9ADD2697D47E1D45D8ECF1DC858DF8C95D8F9BCD88EBE57BD53D4B5253F3919F339DC2D41FB4C787AD09E3A34206AFC5A44632F58848377B25B2B75C85E3987F32895F222CD58A6384BDABFD7231A818326289A9A4C0755251E166CEB749B20C70AA033782BD3C1AFD908803A48916082801F4484C4191927E0F415927573E63681425475CCF6EAAF0621243A5FC96EEFEE6FF3ECC76841728206A576FC389F404EF432B5C57C3AE909BDF6B314DEA6A8F5A3DED1125B4817C2A858DEACD029DE5737E3444115556F11E7BF9CE21E107A021D1242A595074860312EA7538A6B0ACD76021B43FEA515D80CE9A0687C54C1F364A6C2CE49E4A34B03E80154463A7174D2067405573A503196DD3842D90B67B75AA03D662DC54CAFB6467281BDAD086B62BFE3BA4895F16A5E056EC0571B45AE9B7630B172AC4F22D925CDD008F64E9E639640580432029AE92C3B6C804DC493BD9A22911F877B730916DBE6DE36771082D36E1C20B6151D4C4AED31B252087B6768117A48C0DCD80869BF759E53A316A6DFAB9EB7F06F2393B3445E80CE8CE76E53AE982C43A1CD1BC22F06AEC878AF01C6987D76E24224B6EBCEC4DB629C4BB2F35C009FB902EA1F3E89A4469883B814C58864CA2F34B12F37B61C6DBF6AEA55C492D8AF83CF0E6D2D89521EFF04B14C57A8310335A004E44A576510C40857A8E68A366DF24879261057676BD22C8D3F5D2EA6599C4F013EF29483EC7D105897647F342E183639FF1AB102871E5B90F9BD831552FAE5AF2EA71EA5811CFA8FC0F0733C9C33C7BD24B9179CEADC5F5CE7044755D7247F39485957BC741258A8B4835F1971149A6355A3682913953CFC34727DDCE30EEB447702CF70FBC7CC6154B6D35030FC6935559E8A7A28F919E4233D21290C01E8D0BA9BD1C87D9BD5605A2A7EF017C27F924AF5F7D794DE9DD72EAC61EA52988861604DF1533F8C7063E721A693E07E7304B4CB7FA6550A5A61E972E2770FB8D32106FBF7DC111F841D6BA7EF4441EC369591F318A7D1BD28B5F3F156331FDB9C696A33F9211832F5E77BBF104C5D2623857574F29AC4A4479A69501B8173D213C6E5065FD60D5D2FF16D91BEFCFC125BE385A705B40A185AD2FED26A719624FC2412AD744B4BA4A834F357038038D65E65E28C8919855DE612093E2BE3984058E954F510EC1C681C1CCC1E5F74B8C72D986FB81CA75C118B07F625E41C0A4A42A446ECC0D323640DEAFDE9AE507A18387979CC273E16CDA9F011FBE798B1427B932313EF3F60100BC0276FB88AB8210F6615B8ACD51CA7970487A87EB114005C86D6A7DDA8AB06A6FA700B355C1D847BCD414CFC82AF25649F91E6EF08B79AB238F868D9384DF0F23ECA5C1617672CC8540EF78C3A9CF674E6B51E63D36A445FAAAFE2622DB9C4AA3CD79C6C10578B649660C32F41A51DBF066A8F1A7A157A71BE6ECDACF630C52180449321AB8E091ED3ABFD8E933F062EFB28952D43638E8291F6F51A6127932739DB83DE79FED125EDBDD4EF23358648EDB070E1B9D138C3BDA010A2EE1E905EE159BF845A1C2F7761E76FFA2126E0627654B4C248A0263C18F772E56B3CD7B5D618D2D5EB0F84B142E6D8503D5EBE164334B0DA26817B73A7F7BD49F9F994C844E052ACBF0775B7E6E8BC418213094D827DF2F70052CB8E559788A1520FD0EDB85232536E6A480637EE51428321740F7A12B00872D72D559F6C0C20EC4C64D27C751CBCE019C42F556299521AD10195462BE1F78504044E44014DFDAA6471564E5E06C7B6F815F38164C52D7B4705BB209A0BE362CD8497BBE163C10B1579C950D7035A36BC06929D0AB5FA299F1A3CD06357BABCB7803622B3F6B3968A171ADBB5BA74BC5BF1268FF8082DF052D8F21949852F629D8689575D0236A77ED5F9FD7DB2245BEB40B253CB041FF4ABDF94102961D911A656F0E9042D13352638B7C4DDDF388B551651B10B1622925962381BD98A620075733B2F92AC282E5714A3C4E9BFE3398AF2293712AB9AD454828600C2D47070A6411BE25D9A98A3D182DDA8D8B0B1C16D3DAD2DFC74A24BBFAF5300F1B598BB8868DC078574E90A66A5B9BC49D9BC94384802B2FB43069D3117880EE5294560789ADE37261A53398AA3AC7AB5BBFC5A6C1D4D8FEE273C393070D22CDF8F538DFF76F0271673B0CFD555943F80BBA18DA30DA697AF1BD43CA17538C4D75DB348A9627D96B874B086E235F2C8592273388378A4373A305BF47A51619605C54F1663C8A80EA6B5FF7A688BEBAA42288E3C03132B70E2CAAD3D5D4150B1E0A4DF14470E0225FD42FCC0B1CD5E222A650DDC903C84D6BB9BA15A54E793041BE2331D2418AD5F654B9CF19C4539417CF4A152C83ACC5A592FE057F320FBB8EE1147C5D04A18F5BAF737E1742318F305D8F5004BFE00C0AB4EEEB40E385B5133F6482586A6A35612591A8830E3C454B139C4A01FF5DEF2B18698DFFA6387BB55149B6A65429E7AD97CFC901BE89762D2A8D6423CE952734C9A9140261CB17024D6C377AC60DA6A6D680BB32F51627E87726D671C3DD170AC430C4994B4163AD71A96ABE5062DCC0E9033F1275EC78DA3415602DB31F06FF07FDD6B1F5D8CD81F7A44C549165DC0352A186AED7BF0910B848A18BA961A60DD84E9C6F7B31E29ED61417EA72C08184F4F6D1E9AE5C33A76C5615D85DCEA44F7BF57195DA77D0F1DFD1C80 -MD = 4DF07E33C8AFE795C2D2B162F056B61B50E97CBE13E718394E0900EB -Len = 16097 -Msg = 7C2E90195ED9795BB15FA97D079B6B3D1C69B0DCBC85CF4A8399BC109911B608E047886CC91D2D89DB119CC7504FE8304F08C09F422CF0373C5B7759DBA5EF9D0D738993FF618DD36D6D9C1A1401899686498694A7F367C25690D4AFE83881CEECADDB9B7469ABDB5644DE09ED41F04206C64FF109028D1E57C1605FED63E22AD9F2F683A278EA4037B2E2409F46E0F52211B2FF34C4D695F7650B9D7A3BA0B50B46A631FA3C09E6E776AE8DADD8F792DD8180E2E5B3AFE1EB0959F7351EEE40808FAA5C8FD22A49A951884C1C42F694DD67B1DCE969811A8A0F99FB4C6BF10118ACBBF0BA8E580941DCDD45FCB519974D7962AB7BE2F038EF830ACB9FBDB2488395F5A48C3F806DD056B9C9976EDFB94363D28337843E914E02CD2F17CAE6C465F6E28EEE36F674B5E0101CBB908050C7EDD52A0894F57F899E07D278BB8FF4BC0D5C3E0F66EB5F50A96D7D3FB63B8A4DA675AE3EBB22435DDB84A45D2215AD638E36ACB60B158A1BF7C53ACBA960F7957D60432AF300901CE1B0C6D3B13B3B6AFB400DF6ED9E056E9B92B12C2337326BB8F72656913FEB8369B062C78339782CA6B0DB6ED7EBD4A30CCDE9191DE8C6249812306D7C3B1BDA91331B5DCE44CC0490BE040A96A39132F7D254A4E5CF89F4ECF5547F32D775B3C01D233C1044E383CE5D850DA521AD087238141D885E72226DA4D170014C97D712560F5C181065E66973672F1D34C24E996442CEA694522578BB51DBAECF902EFC22A7059DE177B5ADF950282C89DDE866A7CEAE37EA77905772AB74EA703620E0CE314DC8D7A0BA54C68E39D3195FFC51F72037483FFED6E8B3C5DBD30878E9709A2B315117F6D0B8A1CBB99C67554F161D5CF8FEB304B35FED659FBFA954B610FD6AC685A3783E2230FB3D7301F956AA5BEE9D0CC8A3655109B4F630995F83A4F1F49010748E49D1B05AC841F670ADC05EAC2A0558DCBE6AE613C4517C94AD7BD0A668F5FA92F9616CA6F1FA21F0AFBACF0BEAC9774F4602B94EC9B9F465A83923F6711896CFAD51C1CE4E6BE72F802E373E7A81A2707E0D18B9BBDAAD6530F88AB8F431D1D68F897836ACA5A69ED26BBE4BF5A6618FD83EE591FCB1F885BEE5899C8AB07E5D101B52FB7725C4B3559A041D093294C9BE7A175C7C9F9A1DB5923F4E532347DDF68DA113AD9D92553B298AF0B1DF5ECC6F1B73717A14CB26A3CFAAEF38B8692D58E8AFEFF99F25A02A9C35E03B1D6BC9E41E9C3EF4BA28B54BE49A08B2F0B012F3A636CCDF1C9144FD3A2BE9C78FE080EE9152F66C41FE0EEE0AEB69EBB0AE596CA175211834544A1E7A36E34A0664E8F61C5DE604D8127CF60915CB87F6D5CC87FADA4ECB16A6EF1D629A83E487655CBE2E2C03303EDE5023E2739D5D75BFE4C5745DF8596F54D8C2708C95FEBF8EFFD057379245FA504B59DE923E381A579E2224A2794A1CD5678976F82B07FD035380CECF8CDD36049605A900448342D2E3D792252EBB5EA8C218376998AAFBDA11AC6781E99AEE08B69C46C4887B7C3DBCDF77D9CF441013662F8BD529D2769038B1A278B67A418AB10C5528EAEC85EECFA2BD3213C40D51EF66250DF5A6DE1237C9C7A289A5516A71392A1A7AFD6610C84064652E46BBD3593F445A8CD3DD8F421824DB45FCC9677D00199164F3BE517B90F2B82C6B56B0339793CFD6E87421FD53F622477F73F397A3522DAFA6923603F425FA5523E2E43F25FE5F53AF6BF305394DA04CDB4399E0181966833ED9E66561A0BE5BAFBB97F16A6348D6DE3D1AA7DFA27962C6B486E12940F09345DD7EE8074B52B1FF7DD062DE2ED563BB2F0D1BB40C3930646C7A67F007AB97EFF20B95F7B3853996D2B781B4FA1489904716FC2605235D552342A0A1785998056C1D43B9FD03EAAA56C6703017958C07C7F0D536FA8EDBBC1D13CCA4D879A9227AD7F8C6783B37DB0A383C42FECDB56FADF1E1D61FD508C025B7A279CB7690362D8E0B4EC0AA1D4B68A6C1C85E9829213BA63802F8A5DBF2FD4F606B57DE2EB281EE84F659A07C6FCE98DBFA31BE81DD59AA7D004B1B09CEB467A5D39AA1AFDD21E6ECF8969E6479E65CEF61FBC57DD7FC648F18D42B287355CC33BB6A078DF4D6BFE00AB0EA1CC78ED13FFBF44A20DC54B87651B7F35B4D55D21CC18441364B8721E5F4E20890911EBF18FCDB7E6CA38987DFFF375DFC6A167F818D55C7DE2F01118029AC9F3D0CD0408FFC13E52ABC9515740EB563DFD5A1FC54A70243800FA1FAE5557F9C1B30483794775B1B1354E766C54D54DC46CBAB13C15D87747B26F1FDC4E53CDAF65683C374483A502877FD46BB7FA30396292A737AA6F19AC9810C5DF075169E62F01B58AA08AC86940F28B03D170F63C9C8A69F37C30E1A068B263497EAA300525344ABC55CAB99F4F7B7FE729EAFBCF3ED5D449211047BC44FF67BB0BC1160094351EBCA30AE2147B5AB2B63C4790799CDFA90C630A85AC693FD7AC98BC2FD3FEFE3F249FA9DE547FDF8DE370AD98B650490AAA0C596EE7B77D6B040848398F1199C8D2C3B53B3773F5D1C723F66030C264B858F64B82810DC56FE7D07C53243683B0A88493DFCA26B7DAF205121465814217C0972270D54A7F9B4BE4EC09ECF0598C7BCA4E872DEEBB8CBB85816112FA3313A1D423C74BD345E46A6D71962F01563CD9541D478E80C50AD07CA9F6DC231135F2B1FEC7E91293B227E58C2BCC5283540E5F4CD3A61ADDCBCC3C963FCC2192CD07B564EEA0E5EB0307B812B28329034D3C99777F5B77238E419E180067C2D5FE460839E62B879049CD936CD36F43D79095AFE2BEAA0491B2C9CC688F4C543CDC055FEA7917E80 -MD = 559EFA04731227D7CF4776F2887668E2ADF6270C35955F8C21BD232C -Len = 16160 -Msg = FBB36A6D35FA8C0174BF87FD3C232D1F6059B8C43CBD7106AEA406CA2EFDCABECF3B05DB8AE53CF98E866DFC5EE714EA3C555802F7515598560BB35E0F0B26D5F51B81FDCE914E3651C21951CC45DB3B480821E41654368B3259E953501621FA549114D80A534FEE583AD61D681C4FE402925D3BC72A7A63D042CF051EA2FBD2B110017D31218FA0BDA84286465740D549F7035492B2C0A282544CC536B8E4EB8695437D6038B13F9125F8C4799CEAF85339530E478AE2ECD4FF909BAB849A18CDD775B6758808141B94F1A243BCA4981C9D4B7A29CE53A2C17C3E62E657BF51B6163402D6C33F17FCEA979E40B0D6ADAF572A79030AAC63E02E99310B133BC007AAC9FC8564200A9BBBA0F5B1228B7D9E869DD824319568CEEED7A9C87E5A5C20A6F65879150D8D279F1376960E80A6E1CC929B30406765BAE97B22D08E0225BC320EB5004DB4F4648E6B8F8F1FF13182D1B20838CAF69B054E72DF07E3E5C53C669281E227A13FF0F6350578F2E257D9A2DBBE673F8D4666F3FE6B46E007A08D4C79FCCD4C8244DEF3DA4B8619B2389FC79D5C15432B672121FF14B58742DCD565EC5EAC780BB8832DA16C3307B8E63D41500E618C8FA9EE077F4A98236809CAA3F3DFFCEA6EEC7DC376226C80C5B1DF3EC161C9993DEF3903D542EBEC844C2E7E69FC215BC59FE86D5E98F98E3B8237D54CB2C28B414700E1E977B145C768301E78B9310119BEADF695A05C509D95863C4236A3B99C1997EC739EF4F3D74DAD5FDC66E494EAC463844874D6A9ADBA891C617A9F98D830FB0E24CC09B70114B32CF242B7C110715F2958219596E0AACCAB5DCA7AEB2C1649358DD95817EB35CEF4DF997242ECF387D6A06149E6B4661203627516812D7472B4D3F05F1AA200D5990201E97DA0F3D3ACC81377752C7B9455B591AB6B46AFE8DBDE732A9664A42175C20989B5A307209F64B0F2AA00BD297F8EB72ECA7255B99F07298B1C59E3D413327EF994EBCCAED1D986500AD2DE5915908DBEAFA00498FA374EED2537E0455EC5060F8CBCA77029CF2F21B0D2EF29950222947D3B926BCDAF61615F73F0195EBF189CBFBD25075E6C70640A81E64C36B54232CD76EF24AECD8E619F652AFFAA27A39FEC7EF7DF3B6C9D03B51C0975ECC0CE4C09CA29F56380F0B2B293321ECA37A6675F43CC7D7A4A196D3D11ACA35A54ECA60DB965EE1DB7095D481F1F276F6AB4C0B37398C76ED4A5CF2BB7B9C401E2686FF8678AC6C1D141C3A40D41C44B3F2933DD4B258EDB45DB5675984E6880C3927DD5087F94E122283FB76C0F622B671477B2C535193D1F4330EC09CDA03A1E4CCD1A06447E078AB7A37E34E54C2E0D911593FF522ED94B5FFC14E62FD21D00D7E5BCBEC5190D5A40615FF64740A1D31D0CDD07E39BBB4F615A4A0345AF40D0647F354F96FF2AF3EFBE25B9E38E1C5550968A18BE6DA252A5BC861CFE2D9CE84F56B0071CBAD937C947C58D0301E51DD1C3146F7810D795204BC0C7FB71F96224BE409FF732E14DB1C2CDABA7CC746C4FEED829A7077F48C7F466D1EC0C89E3E247D15A4A63114EA1E6FD855C98CD7870CEFC75ECC8114F1135A1540DE6A8E1C05C9D6DC554A6B08E86C8158EB3D844C5348A61D54A6559B0B7F4BC592558200A289CCCF39AA308782370B2981CB5EE050710E012D4F58A9D1E2E0B9DD5A3532455FBCC1DBABDF041F0E7B9DBAC805A503832DF59B29D0D1DD6E75E735DF9082B458DD10920C2CB72CA4AE28B63815785656A7BD897F1436393780DAC6004F68A745B235913C536DBD5C23EACC6BAE635C949EFDD2941D9F1A93ED944180427FF57D0AE76A5D584430FA031D8969883E09E853E6A29921D70214BBE2F7477CCC9F16D18EF6911091D2E62A8C00567B831FC79CE5DD65A95304FB7B0C56CD4D7FEF15DE5FBD19E312EF76C58C67645003BF0A55610F7A60C7D7C5418EE04C45FFBDF3D9C3C792A5E92979D6F8D1998C00A020C0F1974BB867335288F006DD0E973A376F353AC0D97646924C1B35C274E6AD1103A1BDECEE53D2CDE4686BD6AAB9407A568C7E029B86557617C261590384259B3093E0098F11C17DE7210113D586B4624C2E052AE6738EF10CCCC728F2AE111458E5FA1A93EA3A594E03AA1C65E5471F24F3B8AA126C385062A2FBC2AE2F2951874BBB64E02F3009A575941D4235B06C1FE451A825CE91BE59BAB85DA91645E0E2B8CE374DFB054A40809F26DB0AEC534AB5CC27E27477F1C1A729F2CC0C11FC51417B71443B657FD79DA807BB01CD01B036C6737258E60DA376DF08089F41056FC454044E0F1D173A7E6F11355851D36626A4C3E89721FE659BF58B72E411B015BF13396B269142C576A5976AB352E1708C1908C43D873964A097721A60485002F4675C5A5F582ED4BC7786EEB2D49232DADD6649BD9CEC32D6901EA5CDA7BA838817DB8C0AFC254B94E4AA39C0671EC45CAC70A73BDC77E821CD8BAA77DF6ED0F3F79386DE1FD7D7D81AE7E05DB6D1D9CCE8F42ED4FFB1A7FBEC62984DEA74C9480945EB916752EC9E0606815F8D5779CEEFD2DF49775A1CA29465AC9783944A0617279303AB86C2AEEB1AB4EF1FFF7465EA6850109D770C990B842A0A5DBB1CC14EA4947A356678FDA4EC44FC9D8FA352A546A2485F842A6BFAC20DEB0458762A72DD4A039D64AD8485D9F1C4D67EBB87B99FA95CD5B38DF8E32CB6EFF1401D0D2CD20A7DBBC3977B0854EB9F945510125464300C91577B21B6A0A61341379D1F1E15937C4EAC435D05BE9282F632F84C2AE1290C6DE6CA6C5ABAE90A6C9F37321966CD33D86C6275C018FD2C15AEC46C095AC0CD51593CFB646E8A5F8 -MD = 8689CE87864B65866E50AE8173BF9FDE1E6C00F50D2799F5AF77ED4F -Len = 16223 -Msg = BC67A04FD01A30DACF5CD032347EDA5969BAC06251D1F70B25A63FA173B3334EBB1F8A23B84377D77A1BF0A2BC0D1FF8C5E714938806C49B5BD2799AC8E8D4DCAEF418141079C96A628A9E713653C3AE4E1E61E77804A3CC53D4DD0F8F41E1A949D9732689EF4D8543D92B7A0F362173F4834BB4DBBC4E9036144F68690E52F4EB21B006564D4C8E856EF15B2CCB9729ABE1CB281EF0C9AA0853D41B2635A223D6D041ED43CF3758FF4831F5B8D18AF4C3BA13ED66F193CFC658841253D5ADE4C9B44A9CD439D9F5B836AF90F640E943C5831744CF9F2AAB1686BDDC8ECA6F5E4B50B6C54C3BF727683ED44441BF6FCDB58B0590A05E14E39B729D7E396CEB07FF532173F7F4E45B5D5190E94EBADEC732D67122784F2F4FB67D0A952882D57AA4CC721CEC1242986A3B91F7EDB203580DBF8B3D7D0ACFC80039358C1F35786C021CAA843C26244FA52A4092ED152832673E0E40601160C8688C9D44D9604362B49BB8047AE483B83A74BE85CC1C1233239418FA8B78F368F1F53DAF66C7479277436756F12B4BC7D66B1F75385682D02F86496778F4CEDC74478BDDC9829CE35B8150BD9C4AC8362D37947C2983D1028F9B05D64C488A38F68432207C12D024401A890F569725C1A33870FB19CECA591A7130C52E98165BB2097ADAD3E553B89DD91B53199CF1E338ED58EF0582685CBAB7AC8F815EF1BD0ADF2C2CA042FBDE090589E2B9541223C96C91AB54B9264A26A5AA361F02DC46F2587940E0D8955FB864B2EB5E63B2882BACB3A07EAF2929DE8EDD5F9BBD0563093B1FA8B247BCEFEEA043515D49CA696E73D2242704174131ED05A9D639851399D5AE261E01153EECECC3D3CB93B45344A49C2C2776A7E3DBC1A7C3208053CA7F73CC61D0F0A01A64D7C2F93316FB61197E29B15682632A36CCFA19B739AE3C636F4EFB70E87B98E2E92952CFB45F0731224D043A400DF614E35BAC413536217509B5E9C293A6CF3135DAF616B9193CE53715C4D615B78271BDC0A0861CAFBC5B14C258650DD9CABA38548E6555EE2941696815F683C7019FF60D7103A3AB5749352116E90D90519252D608C73C0726674D918D20D90E7BD9A6315CA6AE8D0BC4EECD1153819DA8EE99ED7076A11E1C25AB4D693ED4C5B69F18D1676D48631F621D860DE6CAD29F1CA8E1ABD7014A318885AD917261F8E0F3531B922F1277579A0325809A6E4FE84FAA9506869D279D954B8A8FCE21629EEA030658E6C27B03CC279B4C8354D84A47F97E0B860DE122A82DB8B4A6F3E6D916CC95DF5241F4177C40ABBC407E42B0F5BE2DC029C4A36F4B6E5C5F877940C80ACA91F0E86140872C0D0648639203DF06B8630ACBD7A8EE1CF2E593BE0AE0CACEAC020874571CACBA68EB7CB80592DFAA6429F98ABDF48BCDA5E2D48E7354878C1B119D027CF391C4219CBCC5E8D36F87FA23B08B51FF7345C9353C724064F4E658B80BA5B31F2AB9D0BF5EC49EF79FCB7E5EC184C21A3E5C00FDC7733FC9D1323136A1F6C7E4BA8222CAE3D4AAE23C537802859C7F4C96F091728A9609AEDC88CCF86D001D3524511959AB239E77CD3427782346A00AC6A483FA82332B4C51A7D914C1F81A8D55C9833383A1B98AECE735EDC7503955AFC68671C474455710C88AEF71109354B3918CCE286223ADF3C345C254D6BF9A4D13CF70C88BD6D8EA2C5C41BCE807409CB1F153C05307AE2FCD5056A45007243DB4B3E56C9094A65033D08591188FCD77E81F0B4991FC2151B0CD699D7C19763825AF7293CEF0EE95A3B6A52894033C98600421F9FD76650828592A9590444A790EF32FCD5D8DBC3252A4A4E43094179A02ABD0A7CFFDCB6DFE1EC07819E8112C4C814C0C8E0F6144B1B0322FEBC4B41963669DAC939993048506E27EA2A28E856B098B75D9D962B4F085110A23D67B59C1E2233B6FBD3FBD06DCC9ACEA98A940684C9734085CBC4863FA0176C0FF785F948EC62438CA088F49E2AFA750EA56858E33460E7AC1D55658AA3D7AA44E5053BCE67A6287C52058D8D9F0AAF81D76A0D8C4B9FACB885A6E9CF6874931848D4011C47C56BC30F99A6A877E50330ACB34F571FA6DDA15525CAAF345B39F29F8F4B4CE70362C3E5CC7575225B7CB6B956580528368AC606DB89879F3C3A1A2339D0B52236613AD64C99D3AA021D0A1E271E0E5D0893B40FED7F1645B390AA703A0327A78040F1EC5203BD88604304A627913BC464085627055DFA98935317AE5171D5B0CC4C40F54905645FFDCA0D7E3AF07DDD43A5259BBEF38B8EE1770C5F6EC01C53496EC68BA0449C7CE70C36D2A0BF292BF9560BE4D397B78B40EEC6FF46F51A02D972B3F9331AB80C6A7445C83A361B0882BE4BCD71FB41D670242B8B05DCD098568BCD0C9BEA10BCCB881E096C855A7EE72EEFD4F48318035423F54400684E7AC9DA71CE56E3668EAFD253B2669E6CC600034F7F5CC6B64B5762930916D25FE3D6CB9768ECACE80C99D5DD0711E3EFE237D3D555E2EB7E3BA18F0E49723DBB2C545E3176D6F97B812A0E067FB9F54146D6308B1DD62A50F20542EABEB4085FF9F29B33552CAB4C044DDE8B2B67FE74115A927B5727AE1CE5DC207EFF957C9D1D11BD421B19466012067BBE7EE36FDE257E58718565D87BDCCAA1E9BE8B93ADFC81FBA9C4917174FD97B7C226ADA96985BEECD8E5A5C2ABB1EDCDB993E9C63FCB7FB482F79C9B94CF6C9FF374E2476FAF1421B220F8255E13B5DF731352FD85CF05A383BD46168D4CEBDE30FA056A41E8AAE15CE9E50496392DF24B5CAFF44462BCF750ED0443DFD78F81798B4A692CBE870AF057F8009B1E91DC75DA3ECEAC11BB134A91AB99F1A7C9917478BE3C71C2CEE -MD = EB18CA2F3A54F01C6C61329BB7B34AEFEDDBC263426A78D8B201D0A8 -Len = 16286 -Msg = E2962D9F1A90B895C159A949BF9D183C75C1DA19A15EA30E0D8B10E961FB766B68997C633D85BEA78FB0BF8D5158015864CC877888DD851A8FDE756604340DEA3F334F65667F8A46C7EF87CFE3EF99EF7CB5BA1875BE3D15990A1998F51A83EDF992490B9A687B151CEF3E822EBE2E743933DE0E044AF982F22FAC2CA8FA984DAB1E4D4B69D44E3F35899984DF17299195DA34012CF213A93266607F6E5CB29AF3A3E0D8E767114BEEADA7D4F76CD2A70FD64F840CD2F0A47EDE3295D6B13C65F76817CDC40EBCC17E7F66D382B212520D080975718C90D8DA9FC27D8BFF46DAF1A506E8A6A1B44AC013943492960F421B3053A9F2A6B01957D9FE54DF42C606041DE77D6A6C68AA543B106F14D58A903FCBD53B05E8695B47A424E97A6E6977416AE62414908C413C6297CE2F67D035DB9E6AFAABADA699539CD0133B92EBDAAB778E94CF6C53EEA993EC3E47D00270802C0CAEBB0D08B66C4E0DC96B7E8D7A32D1F04A79F543902AAD1A4EF251BD580CDB1219C55EFDF841AF335AC9C1880AECE31110C58F06F61F6C96B77AEDAAC92A5D3D5B28DD0F1243F9A14B08802537F74CA13E586CFE1FB4FB908571FD5E6003BAB8D6E66E74F3C01C21221E227D0BBF62706F6CCF116FE34053EC351EE0CEC05B921B573A793214D4947EA64E553873BB80EDCB6ED228B9883D8C4D58945B6E801218486348F0FF7C6CCED9FA0EDAD4296004DAE351F915096825F64004C954DC84A90BF6CBB920532E9721B02E7D51B80BE1A1508E7B76F3904C5742242FB75F0CA8666A5CEB1CD7376D891913576CF74FF0E79ACC75E532A2571B09BB9ED6A72542C8FDE6462236131DC3CB08007508E595FD01E5E158B7B6F86676C0D5A444844F86797E8B4125C07F85E6E2C2377F74721505EA4DB877AFC231AF3C494F354E5C2D912DB40C33EFC138A4E0753CB09995C12811AEBD5669D7327C066864250406D1E7A95F2E7C79573BA41FAF71412EFEEF8B7DD4434E2828970A46FD44E3DAA0FEEA9D87F31F2481321543E27F8286386E664FD6F926BD677BC71B645A1CAEF8C521CB3EDB5531AB65D6951419686908B1B7AC1BAD07417777E4E7832DF082FB106EEFB12F68F1495C9E4A4EC3343E27919C917D07011B7DE2309BAAA1547E8E5794CACA1A08193077B1DC774C3014CEE04AF8BE4CC4926834D3EDA673D0F00BB0D98EC9496CBCC078AE7C49A80DBA42C788860B4AFB12A3DBA8ECB8168B57750DC63F5D3E40F910296315889AA24E7609C364CC4F65126B484A24765759BE23F86EBCE2A6255865D9D166B2EEACA567595E975C0D929E78193BB4CE98AE3D52AFBF04BE30A1D79F5220EB2A247CCF52720F8886ED58C3F38C0594191117B9218342E64F19CE5DC99DA4F78A07CBC17B7CA4A701742EB2ECC3DA09DD425AED86C97BC2CCACC36413F344303F8F09DB8ED1A51C31CDE4E2677CFFF18E2D9A92718CEA1CA868925B51011AEDA64C98AF92781C07007F354CE1EB49AD8620A581B601BD3A7B523A88E9AA36E40E1104E9308EBE2DB255A57B1616CD13C693BC716BA6E9D976DAF5A4C7102FA2E8515702638F01D2A93279B77E4B237E13849F439360C6042574C5491E9B29604F0F1147B53BCBE473E0CCE18C21D95E9DC12BC472EE00836E9331A024CCCEF839E8C3EEF6E69B40E31AAF7AD2EAF8449AE056B25167A7A7DC4C807A2F5C6969BFA927FC2C87EE36293E04AF102E9F4D21BC683CBA8276D0671072162029FD7AE43E318A307B791E0BC76C6A0FD8C11897C3A69057F220BC576AA233E43A5E900735555208BFD74773AF630B30BFFB0130BB6459C3C60BD3E017EBF5A4D6421833F266C0F9767160576945CB37D308CD8A47F353BA08D43CEDC09857A23B5E45974BCF1A2991B84AC7371BD4E1AF8AC23D2377580C9B54070502B584BD23E0C709BB161E9316523979986FD4B1B25676B9CC5717C9A6F823827545E493EE3A66DCBD7A9C228226601245A6BB23CB213BBE772791F007E31224510EA47AB7F3047AFA0ABC39926D32ACE26207C12D250C17CD1C3FA33963231EAA4728FE401BE7BBD53BD2FA2FDCD9C937468F13FBD1E002D312D720AB3EAD7E3BE80FF6A563D507D18418D23EA119CE008E1BBE486CC007129DF193257EF507D9A718EF39D40682DBF4DFB7D55022F539C0287907CCDA86E05D52E794D06F4242CEEEE0111F44EBD324479FAB89A7DA135971943D6C9D46DE5DF18EAC02BB62AA4A5B47F73FB71E9C5D6DC99F45517540225A4A3386A3BDFBF6B11B91625B5CFE5F362C914EEC4605719AF9A95BE7603BD888B57AEFE1FDB78AB4E9CB4258A63A10B918E0E4AA5733193828AB5BB1B29017363011001D6954A4724E56FE948267C7CFE36221500C10156FB4ECFB4AA7F5E4F28B58D3AEBDA237B2C77703CA5BE4CF9F4696DAC7A03E04BD17B199BF08D49BA97FF8396F48A53BB069F7457BADE0E2742E28249E6D631F80CA270496B2F056B0D40B3DA7C7849FAF7171F627D0B6D3DE86476575780CA36ACDB87DC2051A2E7AFAECB68EE7917DFD2CFAFB0F3C7D9EA143634A359E442FC71FB9F6236DC2B82719B3EC9FEF13D149F6289EC13D160E55F6231C33FC2DD6FCB4AA4E0C2182886B6AD18056D4A980CEBDF00513F362D566A0915E66ACDC1A3DF40E86890936496C5992E8F7E11501C050EE581E645521B88BDA14D1AE4EF13CEC6FF6F7BEB3642D5C4AA4375F13EA3028CBE0CA770E95167DC27EC2D313572779B9D7CB2CDD7DBA6D62AACC14C275258922343B23B17B4B9E706AEE5DF9574931791DD62A00593BFFC527ABA3D01A2B073E54D510A90243154B93AC8B39CABE4ECB42C36587DABB756F47031DC6E079CC -MD = E1B2AA9EC6AF925C819CB4CB93D3281D2111CBCBD233F1466B55CBAE -Len = 16349 -Msg = 74C6FF3B181F78FC40DE943A6A32C1E23B2A20E9C0934C222D54EDD8356B8FE7D9C5637FF74EF8E76A0BB7720B06AA4869238D72AD238011DE83AEE9A2D0446E960742F02243B283BAC4DBA36A21E21E0BBD7A5F99666934D06F4E0B72177EB71F95F90B956026E3EBA2E84BDCEF8C238ADF255EA935BE0F712E8A13DBA61EF2288D933BD941BBBDE47C42D9179ECF3CEBBDCD5E43FB5AC1B3770032AB80A6B72F3503D98FCD33F955CEBAB2DCEB72630F69AB7CE7A143249846D811D34308D3180BA322CF832F7120DEEFCDCD7460E1455C291BB72221054A01D8C702906B0E44334ACBF6DD1FBDB56E5BE93CA4BF95E3FA4F71FF8F45D8EEECF710DB3BEF4A63D934FCDABCCD85A8E5A008416C3F2209CA503BDF64A894A5B4CC20CB2CC636C8F6145EF83C5EE60653C0D0515CF935F7A847809DEE4356F391D83A59B23BED30978386D477592B621F8790B8CF9561852F98D5EFB3F8E71F826CFC8204946F61AA03FE1A9138C2048891A097781A68618C8958CF31B2F9934F1D35F052A8D775DA0668A9748EF3A280BA0B31D2053B4B185B72B1E4CFC437D91EE23A34A17BCF63A7A25CBFDB7B7C7E24695037484B6487605212BD3A8F7605F116287BEDD5B859B7A87233B6E4B4D0C8112B1142D31A3596A99F8FD005642F85B81C497D2E14410A2157E06B73D79D0F564F03AA5DE7E88B2B2C93E93F8DBA52DF7BCF41246FBBD796EA388F99ED2CC0523A925BD907B8A8112762075469446DC4E27E887C8875CA095434613D39DE3C68B39F426CE5FBBE302A08AE5A90191A7839C2386C3956F2BB3EE1B143A2300B66D3B56BF4B6D0565566DFFB1A5C3FC5895937417B08269FEF30E773CDA22E87F4647E8C27965D3F216F1AAAAA515517D80729C49994938D90CBCE24DD3D8ED439FEF6D0AAFBA7B36A73A6CE92340E86C867DAAE9E5699484E0E716ED81D2696264B940A106760BFBCDE29E2FCFFFCBCE94E4CAAAEC096E125497B92A7DC85D46A3822D2493E22A00ED25C1E20411E0DD5BC07FDDF9149B500C7C5E56D4D06655C7157687161B3EF6FB3BD0EEE7AB17B30467AA7D3C53A37B171E0C57468389C3C290C68EEDDAC8F1836E9B6BD78B168EF22072EC97469C69703A20772B0B11C42CB9A1C44322E146610D4A97203E85154DF5493F989AEE44CB592F257CC2B57045402F44C2E79DB0DF935B6DFBF3ED2F749E1A3788C48202C00B5DB5A6EAAF83F07DD86AAC0B405AA9B288DA579A4DE38968B7CDA21D805ED86FBFC28D66BFB621333FBBD6255C733FDACE5BDB4E8FA4F04C91D2CCA81562A90DC8DE94F32B79AED168B04DEB7A6F5A8E3ABCD9FAF7101EEB26476B9C77772FE3DEF9AD95666B3CD5C2C9C1E6D2E8DD720AB0953648F5B6E432777F1E4D542CB9BAE746DF9A6A4A72068CDAE8D7B79B84D7D9AA563E2E7163141045D4DEDC33E7341FAC81415A5BE303CA3867EA24D4ABB99755D48605DAF106E01E61841BCDA31E4BB2DF8B0CC01FD96D93DEA00A0411692E6A82696958D2A1D48C1E6F8E15252DD5DBA66C6820592BF05442164F88E17B250325DAE4FD7268428122062A0BDA49E89CCBBF91D070C8C0D3EA77CCF44A7E4E4411708683168422697BDC6807B2FA55CB64154D2BDB4B2308AF057D0BABFCA660BBF86D7A758B3DBBB3A27319142928972BB4258138C25F9EF1481E3620BC87454395A54D4979DA60FA93FCD3207BFEE6191796F026FC66247B660171B2C763BCCED391796108E6FCEB7ACAD7EF0717321D0C974AC7C139533025B1D09641C84084E76332FF24D4ACBE8EBD46A4531D633CD5FA81CF8D04BF18A8741DE7BD8859A0C1F5756A8BC680A4F24B59474608E36D4A8DB0D6D29F69C3960EF1278288DDC58F89C3F2F429175D927E06695068AAED4E5CFF5C44A1D0B0BFF7BBEAD004C700CF94A61FC1DD27AC5379795309C77D751FBB3C28C63BA1163B87586141458906499E56AE7D3CC6002F64D4A86EB178BDCA4E8AA21CA63DBF1FB539A74086F032341A1A44E4CCD103E0762211A536268A7895F2FE06D1C1FAD6487EE124EA6FC90282D93AA0BABF73DA41DBDD4DC677456032B5E57FC321570B3FFFD4273CC1FC22E44701443BCDA0F8CC97B965A1D566BF6C9647F0764ECFC94EA94ABA32C7205C90BAB1768D4E340EC7577BC12E9E9654FA4A96B22F24F1EA210E69CC2BCABE99A63268E4DD77739BBEEB6E34EBF295723330B3D63A82B833CEBABC0931A5B3022C8B242503B5CA3FE7BBCF95E0023ABBDDD47F0D2C78F79E786B68DEDA916F1B364EDEE34254F6B4785AE9A1C79F1A34D7BEE2FEDAE5DCD668BB52EE599D1DD85EEDEE77B0BE28099F0FE810ADE2038655674F986C166E6B3DBAC080D4306C9E630C2C39089F80B846462609283B06AB28083492BCBF08450969CE8EFAB5F1276B264BB062CBF3158E17155FE64D2AE0CB0B533D77F753DB5B1EC4E0B8472B79E96F1460D517501B43DC156A02D5B1BE76911B32814E3A11D8C236F5379745C7C03B317B8A33607994B5182B28699EEF9E845ABB805A8AA75E92EF86F1A6CC59D31F7559597FF2CC4EE930A8647C9A9C847965E99805BB4E7303D7AA63C0C3D0C947DFB945CC232ADAF11FF37D23070B5A4B8FBDBE2F4E0E7C74BDCFA5767F77A04D73607CADAF800E5D7AC4267EDFC87169420674496E91AC7D31C1B3D6463E65DC5642D4955C9691804D2EA50B9CD337EC52204EE8F73F186F7B7CBFD5E2ACEB86BBF3EDC05F77EDE96767A005B86D0E75950EBE12B85D298896FD4026CFD5CEED0BF19E25143748C8C16037F55F083D6A4658EE43A67B80B0A716F05736E5F36248512E404EFE87C379B182085C5E9867EC0868A970F40C74A39516C3EB35A60 -MD = 66BC4843C3C17FEF7BDA9E76F7EE1ADC687D28581836A419B2F42FF7 -Len = 16412 -Msg = A3850FD433E424C2536014FD12AAFB06138B639F685A44916131EA8BB4D1C82828A256F49319A12FD7BDE3124089E2F3EC6BA4EF924F1E3A53C9790240CB373EB1BC063467E1751AE8F1F43954DC713B342E030C9C0870E0AC80D1B284133FED1708429D63B2F369849CFAD58CAA3FD1A2A0979E4AE305B616A5D1C9CC872B1B0BE1CDE234A4A9CFF2293301FE529AAB48CBB2D82B0FDFEB9A737CAF09A12597210C59B2C4C370D18A1C3D3204CA402ADCA3ECD339BA5CCDE9A701360467A13C69A2306819753CADEFD7C4340AD100F6531D3283781217A8B6C7B0833799C5F25BA8103780D4FF036704F85D28A1F6F274F8CDCAC2BAD4BD65A9F57100355CA995054C8E10DB1A4A61C2B9F8B95CDDE8FF1020364186D5C731A6CC15A5130592BC6BD267E756F60205FBA635C4D870DF0796A4592DB01327D51087E7CE61298D33E29AFDDF41920AB5D90BBB7F9CF5B4D4F532D04F0D3692A8E05E1A3D1CDFAC09F51F5D0F8E41525BBAB3108F1317DB1CBBF2FA0DD4BA4450864526509E7A035C9429BEC9700B33B992A0D78EEA1E2F2BAA248AE3B1E6F3D1EB43BE93DA46096867706FF79A62D351AB97F3015000A77A32171C80F2615B672ECDD3D0482BDECA71ABF2661E74653628E94FE8809D55DBC986C506D2BB147B4D1FDAF3B2114A78C82BE14C81AA2BDF6440A3541C7456B8F235C8F8C314E0FD7BD69D230CE9EBA1A5E3C562653679517088F30B38BF8EF3D28952CB769CAF5D4ADD9F152DBA3B39B338A3A6AAED7305E5D1D9AD6F1001D83021CA94588CCA4BEE7755E53768E533DFBCD2485ECB87D4E0F22CA81C2A345472B1531710472866C8E9A83EE9500A2DD937102BA0F5F8B4E19FD1A4153DD0D458689BABE97EB8B63DDFCF083225D6B591A72F59772942C31F7EC04FF984BD47E4127EC3CB083004E6CA3DA301994AF45B7FB6CAC3F1113D1735E3655356C09A0EF929F7F235F4554080E8AF8063990C56322C19E3E5BA9BCBD960ACC16E637ED62FF95E271671FC522F1A72713EEAC6C00F378E2FD7E51C1C524C498D553A4373847CAE33A3E4F5223E55DB61BE20A2417A30A37B3F49C41BEB779CDBA653BCE2E8966376151DC82F7B5354F2BABE0B149AD6F665E8D491D53535C0B9B823F1A1601DCF47F08B8A6E48D87D107226ED66AAE34D790F5EB78353B9C81E58C767374EA77AD7D255C016753E62B93BB8CCBCC977513DE386333A51DEE72628A801C7197F1C141FF751A42F3CF07FCA844E9B438B2F2A9F69734D9C730DF210B7E3BBA3F1845ECDAEC1473A1D4597E075236FCBB8472365D770B0C15439CEE2BAC68E8B84FD1E9D595295153AE2375F5E437A2A7732D93B4584C2FB5CCAB3970BE497516664B225DC94ABD3836ECB76E22D19090B4C72502D31F7D79CCC870D477B9771F624F40699C8D554D361B2DC01604BA15FD7AF8D008313C532D80CE0F18547CA82D0E03F81EAE53B52DA8ADAC415C19BE59BC51F14DE0BF8D2C6E9964A533786A2FCAB811911EB779D41959E02844494514A047E615CCCAE3C530C9424DD353EBC6C259774D20D5472BC2D03CDE1007F87B23DA0ABA5839D5DEAEB9FDCF2936364CB53BE88DCA57F7EC01C4896DD98F6177B2D2D780D7AD094DFCC79342DE6A6FA46DD1A1FF4490518521A37C21CD11B52EF0ABE802B6D685976527739A5B214475DE36D463B3A26C11F24A961633806DCB7612AD4DCCD884D64011929309503E105659C5D634BF4EB1A3B1111C02A1A055388B67CF13719DD56C191E21858B1DABD59433E077F0F55D932F57B479E9518DC81F7545732749D28F2F805714A7C19ADFDF3D817CA2E21354E62EEADC17F787DA3C7FD1197037C9AE2D43CF8F088A8DEC503EAA8B1F24B204277AF5CE4622781BD835314B8A2F2C43992CC1A4B76C7FC28493DE4FCAE9EB1F5B69B6ADB5234B7F718987B6014941782283ED36B740F072C4DA8F1472209FD28486E3EFEC502F78B03FA1FB31F6C9D512B8425506461049D459B0A12A988BE3D52F2F4046624A5652D0914AD3B83A4098012A535D569C8CA3BF6797474B7AAFF82C78D82E7F56BFB060CE93722C56EC4B03EC1AF6214AF4BB81B1D26480733F9B81347FA8A3F9294834351141C6449C07B4B6F0A386DAB2F972AB6DA5FBC73B2E68CD6B2DFBF8F4B55F60F72AED9A375FE055BAE15DB998E21E72EB6C7FCDE0F1F0C6763735893174998D1CD65BBF985C001667F4131F21CAA5F8955250636946E7222BE143B981BBC7C3696DBE701E2D38FD5834E79FE48207BB16F456F056A09DD64C719DF2E7A04F53BE3D33611F3FEDDCF47A0EFD94DB5870C1A33340FD3CEBDC9AEB0068135D1A348BC72F4062AB3441B306DF4A347DD67D56A706312B05022CB1097CD29F0BF01AB625E879DF75845A9443FE696AB7BF62256D549321081C40B0C76BE133F161C5075BF837BE92188FD934C9631D1B70DB7DC12AB07744A716A2357A34D32C843B428CB8C8ECA16A2B93C9D1A73E2980415E10C97E8422B3F4628F2328992249F95D9F2DCF25BB05706C4065C5DC43434D3B49CE52B5875C028F3A727EA3D191E0118B6B42E4950777497C4F47FE0AE8D12D2D02246942BF48C52D0C59C75785616E461348F7621BED4E45A86D56A75EB1BAE0B33F8930788D97C691C4AC571E4360FD4A442F4688B1B821459B78DAD871C37C7E732B9767D3BE57B1311BD9051D5AE4B65794A7C9BB2A9776A597B333E2CD319EE13FCFE88FF4065A9DA34039D9C7B8EDE26ED4A7A5887AE5CAF472916706A4FD583645A027428242A4ABA2A3440D215FD33E8C52F9A1316F0E9C4302BD0BCC373A0B2586FD41AE842E4F2B78CA7654AAC29E5CDC7A293D51C159C84629542310BCBABBD3A911A0970 -MD = 5AD75801FCBF7DB74CF0229F7AD7B06B50ED290BE58F737D1C95635A -Len = 16475 -Msg = 47BA3D8C972603646568BCF8468F38B5838B68601E473551F160D46E48CA4F48217660AAF2813732C941CB510BA6DF5A2253F28CE5471A2C8A3E2F14E7140E980C3D374053B596F7C967F725AA051BF1565E6424C8262A66F4B8E6822CE74A33CC846C6B23B7959D5C8C6EBACF992653F86BD2118725E36846D027F0C6B3292D6CCB0C7D8CF6ACE7F385887FBC2BF8954CA5BC793D8922F252EC483EFC8C8D598CFA8C38F813191ADB0E470BAE4E5B0D20422011EFF36C93E2D39CFF806263A5082514456E0D596DB26A915A774DA94D91A94D31D48AEE292E53B27036EC802460E9CA4309F6E8832F64ABB0D537B707EE0971C0883634996B0DD5632A13A899E875C58DA14A540E31620662EDC404F3A2EBD2940D80929F10E318DF20588C4EBB731F12FB034AA6327F25AE2E366A549F9DAD760C321D9B4E97287B92CD9FF39C6FCE92D13A1CE3C8E04177E5E2B2923119B4AFBB04893C709736DDBC8183B4FADC2954136E575BFA27B144F190643037F614114A21819224773A55C6A1CA19745D98B710E446194CFFA9B2B2922FC174EE95A087A0063D200749961707D3C35A2E00EBD29D8709AD7DC266EAC97458CEFBC99762900B95F9EBD3E495B7EE4B3CFFF9D0141516D11B28524F1AA2E679AC54193BACA6EADDB4D7639755ED3EED253BD529DA24AAD4B036889ADC1A5A02157B6FD667AF45E37D6F34A24192F4E289E720F59A838C873269CF71885768610D7CF4F50EC46C557DDF0C3F47E528423A10F70911912E7AD4991EDDCDD7E3B2ABDB4ED69911FDDAAFFF4222B59834996AA52937C8EB0F314A1D97EBAE2D400145FA82F0F6E4E3BD1C5672A7778C0EAF17D5CD5B3F80B9B06D5B7FF525400EF5C0C9582C46FCE030DA9FA1BC15770ECE43F7178521CCAB3D386792D2812B60AB2D58CC914B3BFD309496F2978BA00408A7DDEBC4A9C6560871F5A1AB9A984334144EEF52F500E8D6F6A7A6A5637B56F7DF23FC9C9D9F7F7E778E77CA7F892F79219F86BE5D5323027A33F9CED00973917D4FFCC7C7E4D3F9E905089E6FA7CBB95E15C5AE510652C62F20BBE6C457DF17CE51CAB4A05E4F0104B1B12A611040E116BBDFC7243D57587370B9F795BAA19DC7F0A8EFE278DDE4C22B73EE059436FA3BB606AD3F9D3399C25FD08A918D83C7249CED416392B49531E126F1918DA3814CED0318E18BED7DB066A4776FEF922EDBD74CFC6F979F1E605EE27566C1AACE99BAF41B5774BFE0A925E649D09981205EF7DFB6945A6F34C624F8DA0491CBEF264F0FE74C2477CD99E23FF9B1FDCC9EBAF1BE520E31904D72FACFEBA58DE606CD4EEE5457D2A23D44839FDAD08DA62DBB349D9E42EB1C0113AC7CED169677ACFDA71A327517E66773709C70636DBBCCE7234BA9430EE131EDF3CAA5A738B67521F2B5AD070034FE610A129EAEA12137B698E4FF79F05A7D21551550B1EC79044594354C6BF4B753331397C639D9674DB20D4D293F52569F6468B23731D434E8D1A191AEA3880EBBDCD952261717EB1966B7575555582B70FAA4F594885ED04BD824D76C63D2F9FF585C805026265ABF31E5697E30DFCE123A13EF98F06CE6C4083CB0E1D5DEF36700A385972D7D8A63711102725DF5555FA5B4FE324F672A6D190A8E719C9DB0677CE8DDF5D1F7D33E66057A6D542D38B470F2D5FE2CC9B0B6A645A5BC5A2B8D9DB92D25CB5B5A9FE1933E1C5C9F70F56DAEB698AA0C7646DDFF497367928445DCE2D4027DC23399C1EBFDD95F676DFE4C433E8AA79D01996AEA62890FB9FFB079236C194889FDABBF15E4C86F9F7E2EEF32760C1400233FFB638526C9B4B51B7106DE63E523B252D1860B61889B428FE0B5AC8DEE1E509130CFA6130A6BD21163138EE73E59165DA5695A9C283EFC09C370A3D8F59C9402661B3387C96824BD0AA8B19B35B957007B52F5942D8BCFE185FD12E8AB988375AF5DA79D5D69D18E03577709BA0A28C36D0DEE431DAE7B7EF34EB6500A5670628E328A089BE2B59639A4F5DE37AC659ADCBF82EA233DE63ADB9C2629866949103216702758E05A4CC7A3F0757085FD8D449C799B6EFE67CA9C86949EF88E6DE2180D25054281FF4B2F2D1E73F042F9ED39DEE3B7D9FA4D9744F743E1A8F02114132CE3A0A046E65ED23550D766B4CB4D372C0D57883EDC38A84617332607D8A8F3E293CE3238045922A836FFB349A5A877D49AE7A82897539F74F5965DC5EAC73F4A8AD20AE18EEAAFB60F8579F7394F3DE3D7BDFE6053884B43D9D217469FBBF08D77416620B38971768A25A9D3977B166A36640C480B04FF686A0F39823A6E769E688F190EE3C80D35146D8D1A3E32731119A532E3716E8F3587FB5FA446D2A485B21636FC448555A1953D40A73B6F34B5ADD181A0F09C2C4CFF37F29F405BFCE25E3E9369431B358391CD59AA096CCB0FD26889C39B957E2101A0AFC1080D6A1D868D8398CC4ED27C1C8C600416E3625D0B7C9536D017AA6C69D02192A51AE5C1400408B18BA24A2DD4626532846DF5284F461445ADCA1F3F27E911F42EB078307CC62E8598013F5411248179442AA90E65C2FB64576F0736D2975691BBA216692BC187FFC71846A53867C320BAC97988A1CD340E0C56E1460D681A88E3051B9878AF431AF000881FCB45E9E3019BE3EB67D92A62056625867517E195E369A14FD8F12488C8FC37D22B07A874938F4F68BB5F3E9CD5192EA7169D36F6919CA1AFC4E21E6133FF07D9E9BF24063B7C42A8615BF83A53556713A5A23A75772C75087DFDC2D52608ACB44F50F474DD3A4D7B1E1B023EF8EC7AB5F95BFFD2504A974D7E69959D889F641D973ACDE7CDCCADC05EE0AAC615A7CD47AD3126EA8D0AE3EB09BEA449ECED7ECBFD735CE5953EF5DAC1AECEA82EBA2E902C0460 -MD = DFF20F5809F820BDF1F024CFBA85AA5AA8DADD12976000F7F8879A08 -Len = 16538 -Msg = 0C9E717452D8C2BFC4BB33493F849EA89D5B75857EDB4D9256D7EA6685055C9AF4460CA6D7D10BD6B9F95A362D9A9C66CFE0987E94D3DBCEA13658278F1F6D68BBDF287CDD5736B649EFC0C06C16A24585DA5A3A11B1ECD96C52FF4E53DCF5B47CFC531D76766B98F4002D399E1DA87B5F7F34137A00531037AE53C2D2EB55E5984C241882E1F7C96DBFCDE55A03011B72BC1D5FA52C5458ABF7C15522040C7D5269CFEF30FFF8FBF7D9A73CA88471B5DA4B55FBB274D7F01E5A7AE835309726B242DBEFB07658C6871B1EAC0B5663A8F0979F43A77F132072D5038AF0AEFB8BAFC4A7EB8FF0684EDA64CFB33E3FB0C999BA8CC2179220743AED67071106E87413DC6F0C5F3D7D877B051C62338BD7EB01B2A281EFEB81E292A0D5F3FFC6C59008FE62EB48C7D46B0B5F5BDB82A86A4C92BA10A4213E179D50608F90A9637702E6FEAA0C92D98BD593E4764E02D3CD21082F29389854321020F4701219DCCD04664B3D6756848B257A71E44743BD7D0D853CD18D6049D54567198164F6AAE5B87CABDF86E3005527BC63DA52A61755416C57C632EC9100C7B2E5B43959EE8E7922E16662CC4F883900794836C465D40AEA766A6609C148120C6F1AF79EAC564005263E6CB125A75B7685B0270D9383BA53CA72E041BDA26D0CDB199C7A64655E01CFEF17AF5070FE7617D1C63FDFAE03113687C553A1B1C847B729F7D539FA1095AFC750A0AA20BEE4C50ABF03B24CADB042F2C748F2F40FAB58551385186F1007DBF2FA22CA2E7ED02F3DDEBE71F510385629E72A82EF2E918EAF9B2EEBC96B8F1841F72DF43D7A66C2079FC8F72093D2657FA36CD88669A1E0333802D2B116B2886637CBAD2FBDD34696DB55D4DF870616347DE5C8B8B2E16BD39B6F916AC8260D1780E5E8415CA16C21EA3BB430F83AB94F5F402C01AAB30A7A7ABF3D36420F7CC4D9ED39B3B59C9DD112218E08111CE85ECDCBC58A086F18BABA14F3B33A75670D8D6F3FBF93AEB713EA96155844504DCF1A3BE9E4D69433AB8D83C55D55B7AFBF76021C016317F53457E2F32E6E772CE1F7223E33836E0CBE4B92CF9F036A66DECBDF975D9EDE92D9C979CE710F39FF4E38220D41630B7714577C7DA886034D1E4FD0F63CB0796B61040D33E0E48304F975A4026C9A755C4E4208CC2FE59FDBF39E5D3A962025C270F3E9796E5A78EDDA4AD256B2BBD84170D6EA2F6F5CEAA085AF3126980345D476689988171C9C51AB5E97ED65A57B056328BC22A257AC9E84DF189735AC0A72AC6E00A0366DA69BECFD85EA961F997D66B3DEE981E516921A965A0C0F766EC3D69BBAFA3D54DF916536728F54F5289FEE0B892E65D2C38B8C546FE27BFDC52AA55D0F81878D19BEAFAF02286F96D5B46ACCD5C0C188D714D681366F5FA9B3608967C48D040622EE90B0713660B4616783579DEF0C9521027A4B38965CCD0A2708E023FFAF0A537DBF7BA80AC46D4A7D72E3783F0F4B9158B49795E3CF3B865436C907916C7B09FEA96EEBE0996A0B5ABB10D99A6EAF91035B3DD783DD26E5413AEA8CE012A6ECB46D701CCC1E7DC58AF174EA05D69E7E7DB58512F7C8C943E796AB49250DF9898580DC0D385D6D9FB69B96A0B3339626A3EB1037786BACED50C020F777B2218FE8477C759D0CDFCAC83E03F576C727556F327C5CF98BF40C4F2D426A025CE8DFFEF6EE4EAF2344E5E96CE76FFEE380E3962934C42027936D30923C8CC5C6F97F89DC91B7CD727BDEB4C17405C68BB56C0CC2DD0B6DA84D10F16AEDF9FEBACFB7EF8B5E755D6073EF02BE3B8B0FA0625E4A91A1D260ECD49FE70EA0EF0889B8215F88FD3D3EEB64F98D6756EA51C38C4CB716D0D2DF2E1B00C9C0650F63C5CAA9F9B1828ADD6CA984A85C7B48E32A2E39495984E7F4BAFDDEDE3681DB189622691D96D60DAD62EF59CDF62B8D5474F9D28AA79D685757AFA0A1AA09BD4C90612B1A8E3966B940B07B015B080AB112CC84297B5C2980F2699087D14BC97427A712382950955277B3CF0EC4C440772BF8525813F29EAC9A7340E421F9594D514A5FB2AFF9FDB1EC55FA445343FB3213AA040475E426580CE47100B974E873A70DB059D43C3A51264DDE4DCE9B015A8A0B0170430824DA05C96CFAC4E39DC7C83367D37426145669023A4735E5D422FCAACD06142D3CC26BF16A29E3E12F31A660568FB0788C1A677439407C1531DC1C45209B2FC71400CA1D7A0526D8945D68232E487E893C4B86640F4EDD3AD5678C449E5A1DEDCEEF61DEC160AFBCD0D9697E8C617AADDF31CE7C220CA015B1ACD086CAAB7E9EAA9D595C726556B912E8F20D576737D088094D756A23D2AB2FC8CF65A01451D522B3FB9A8F9696493D10EC4F8D141422885D9F2256585F1498DA74667CCD1AC2D537E05FE22768B44375880C87ECEBAA09DDC217D36CDF42DF37E841BE91462C0E4DCCCD142735092199398E32AFC0932A4C7F24B222F540A204F4A6A7BBDE59D14590537A28ECF3084EAD011545191FEA31538FA25429B396FB2058E1807F9E6C35C1722C09FD6BE3EB9C3F648A6E13AB683E7AEB03E828F06FAC39659F816F9147DFA3951623811457403801FAA6EDFB22E24BEE6942721E9A568BA911A43E71C4A3749CEA3FB36CDA9E57A80F46B1F9A5FC058688620429965230003DE7835E0B57C71099EC3DC414FA6FFE380E0FCBEA34E167819D01D46BF00E115C10D9346BF43DE800BF0CB6D57916015F28E8EE94EEF722F8AE9915DA2984E791DD24CA86FBA30E9F954316E1566CDDEAB9B10B1CA1706B94940A0F28B6CAB3E27169047DDEDFCE2C97CF3FFF3AFA7E2EE8E1573646AF1E6BAF8EABD57EAC2F0B09820A14FDF4E853C6E05CF5CD75C40EFE38236EE8A19C7ECB65B1C942EA7F1A44160239BC3B9A4D8E5073FE24D69E06E240 -MD = F2F5D2ED5C74F59924B6D026082C09D353351883B787F72516AFFE13 -Len = 16601 -Msg = 6525812BF3BEA304FEFD9B2BDFE5FBBD16007FD38C94BF0A4214833DFED6EAC49ED213E2C8CB6437EBACFC6C0C10FB2DC0696F068EF34F1B655EC4CDB2BAF030BF7697913E12418A8908A530D2128C377EEF1D63E27662376317B2E5C5EC2FA3B3CDCC09D19B2959C14D9827D691C95C9B57374F8E84C7AF509E224471DA4136567800AD600AD52F3FC32CE2BCE3150C9B544C758309324514AB6934E823F0515EC5D308E5967A4E7D3BE3145C2DED43E236BB0F620511241FCA2E0231129D91CC46A2372EF8FB4557343A18BEA73CA06E73870439BF51B6ACED11C2434A7B62B3A312A4888FA71937D83FED22E06A70EC1426C2402C84B381CD65431D800404AD7167664AF0040B20103DD4C59C3F288144848E585250F12BCAADEB3796984BD709D7B2E290E425CC66253922946C35422855EA0952F7E22C14DFDE77CA364690B270FD6C8B42051A22C5268C91AFEEE1A40AACA93C3FE0689384296A198C9FBAB845D812FE26EBD17392B23BF284160915F4C0C8801A98A7E422D2AEABBCD8857732758ED4A93C28B6D2A6CE4ABD0E9C774876CCA89A13A29759319DF2E113999BC907DC711A20D6288A667B1A5A4453CBA9655EE94BB60A950A52821A4E6EB00B8D6CE527FC8C23677D51E995973DAABA25EE4FE03D3E58FBD55225DCC007804EF6E1BFD2C718A69DE759DD445F2781943215C1AA4886C905D84E16DD3E04654FA3FC42BDCD53281352076F217781B06A7418C5B8D3302A0BD867C8A3E79AAD1CF026C642F09BC4E16759F5B8E6C7F36D318404011D551EA511115222C43631BA649A0880C528F5C5E056889E05451AC5803A2225378395DE7E1E9B17077987D6EDD70E0F16720DC3F77B51C6BFC3372F736665EA5D34FDE9472285DE8E20C3645ACC9856627D003718857F410BDC289C975D5F07C21B967916AB3350EFFF61642A5CE66D735F81AC229B1ED092E48FE441862D718DB51F52D3002C50E5EA79B76CE6E22DD8A1125D68B0E1D12EB1CB75118BC61C55DE278E262D6960067A2E9E68AF7A5CAE0728553C403BBC03950350D6C30CD66C84E7931151362B582D9977CF0F1EC3FE4B7A9C08FA2921270C368A5BFF104A5D0882E9DBCFA9A74BCAE007F9D6112D99C0245E8727081A2A6B5D0BDE2C80C5FDE9FE1792CF62F83A850B4DDE21A647517D0164C454304FB43A60898B5CC1E67BBB25F3A2E525E17E39342B3C79EA25FBD77246D091DC50BE3545B08DCACB50D9B9B6E5D80CF06C0B50F0F2423E22B561A9F097726373FCEBC59DB344C43857DB555A240D25F2529613DC447EB5AE93F4583CA83DF3318292FE8CEEFC781EE75626DB45427BADB45AB7D29B82B7460A4BCB36DA8E8432EA94FBEB89AC56E83AE4A033C8F2EB78D858C93A1E5758B47ED75FC69E902D2BDD9D853D03BF9E33ECA696A0E235E0AEC6818AA5C2B5E941410FE322E05C24D2F24CEE33DD041A6365A45DE1364D37C15EA788F9A78472BF650B74A1D2A11612D8859BB5A227C7FD257047DB884EBC4E990F6FDBECEC00CFB4AF5D4C1B7968B61A37144AD114CC1F7E78F58D8A79E9955DF606DD42C259ED48F745E2DE2EC3ED6478291641E7C1CA382E72148621BB1CAA3744A9E3CDF15EEC3A0A6AD6C15A63F5FB5DD5952355B7131E2CD2A62380A37A4322BA245FD67F3E02FAE971D8FC975E5886035DBFEE805322AF349D3435394C96A9443AF2DEDF21827459011B20775033973FAB1CC926BF5FD94875B960EEB27476E078E04194C1EBE215836F40AD1E4B47C0C04CB88BF9503D818D6929654D9AA2FDE01F2F1E2DADE8A69976073B00DCFB63A4F586B95630DD0659952E555897FFDF352487DFECBED94CBE6489E61040AE8F3F4D1E89684FBDD69F2AD4EBA8D610C01E26FA9454E22CDD83C4837B1828C3668F05797C2DB6100015183F55E6CF162E6E23BA9C2C59904F00D5BB8E270F7944D507722289FCC7331CE456F6AB16A7B37AD32DA469491FEFDBFAE6D8AD36976CBE2C4ABFCDAE944190E55F32246DD041EE954D7326A32552EA7475B47965A3B3449A618D20B49A2F29538012223E145417FDEDBAA38349FAD2C62F47908A9124E4323A7A0EA0A7501BEFB8CB853B41FC6EFCC86028995E584DD3800CAA1EEAB5C9DBD65DF24DF08E3E059A4E147F780665634CD3EB8CF0E65D80453CF2D8FCD3A20ACACEE2B852C2E245C9B1D1DE7B800283530AC1CB408BFCB353FC70AA64EE035A1CAF61714D2D6674BCCF03937889322E76566F3528A3FCCE3DC70CD7D17C77B2E07B095AF3D08902073E61FCBB2012FFE5AFDD5E1E78B79125E07BEEEA9166AF21892D68893CCB0EBF7D38B4722C870868B056552F916401262FEBF6EB1D0AF704BAC5FBF2A185771745A70057F41FBB349F1A897A829AC75553F24914D35D41269CC94A7F685F89DBF6DF4A50A6E3B1417AD62DB7BA0B5C240C27E41CDA0EE90560DB463D0C05A6EEC98ED11EC9A8AAFCF3CF5616301E2F243D5327EB5107C42C68EBB8EFF916CFEB0FEC99C69F2EFA6CD4C0E5977DEA7C78FCD7ED49AB055A57A6083EEA59C57BD7C1D8FEDFCB1B7BA535FBFF92447E9B9805076226DEFF0376465A10DC9FCCEC10BC19ED483936780FC10A9DFEC2FD47C83F7ECC7D8F6207C1347A4C2DF4F5F1B7350316AE9876D044EA72A2DF7D63A4074F9653D777FE9C5FD1BE64295ABA189E2B6ADB93A86854460EFE15C38FBB1ED9272E59C358ACAADCD3D05A3E42D0575748A10FA03CDB2501A27020A1A0179E3134C40475F482BEA262FE64E3D6B06692796936C16B8543A28275B36BF08759109B7350FA466B038F72E595EECB00B7075A0EEDECFBC688573FF9D199D37B28E52E16C7AD8BF9A7F5F260294C916748FB38FE44B55572AFA12F27CA6C4ABEB62A9D9B1C96719B781D04E02E1B611D2D00 -MD = CCC435CB84DB3993B5BFFBA765CD62EE5C66A37DE11E74FE5BA52C74 -Len = 16664 -Msg = 6E1CADFB2A14C5FFB1DD69919C0124ED1B9A414B2BEA1E5E422D53B022BDD13A9C88E162972EBB9852330006B13C5B2F2AFBE754AB7BACF12479D4558D19DDBB1A6289387B3AC084981DF335330D1570850B97203DBA5F20CF7FF21775367A8401B6EBE5B822ED16C39383232003ABC412B0CE0DD7C7DA064E4BB73E8C58F222A1512D5FE6D947316E02F8AA87E7AA7A3AA1C299D92E6414AE3B927DB8FF708AC86A09B24E1884743BC34067BB0412453B4A6A6509504B550F53D518E4BCC3D9C1EFDB33DA2EACCB84C9F1CAEC81057A8508F423B25DB5500E5FC86AB3B5EB10D6D0BF033A716DDE55B09FD53451BBEA644217AE1EF91FAD2B5DCC6515249C96EE7EABFD12F1EF65256BD1CFF2087DABF2F69AD1FFB9CF3BC8CA437C7F18B6095BC08D65DF99CC7F657C418D8EB109FDC91A13DC20A438941726EF24F9738B6552751A320C4EA9C8D7E8E8592A3B69D30A419C55FB6CB0850989C029AAAE66305E2C14530B39EAA86EA3BA2A7DECF4B2848B01FAA8AA91F2440B7CC4334F63061CE78AA1589BEFA38B194711697AE3AADCB15C9FBF06743315E2F97F1A8B52236ACB444069550C2345F4ED12E5B8E881CDD472E803E5DCE63AE485C2713F81BC307F25AC74D39BAF7E3BC5E7617465C2B9C309CB0AC0A570A7E46C6116B2242E1C54F456F6589E20B1C0925BF1CD5F9344E01F63B5BA9D4671ABBF920C7ED32937A074C33836F0E019DFB6B35D865312C6058DFDAFF844C8D58B75071523E79DFBAB2EA37479DF12C474584F4FF40F00F92C6BADA025CE4DF8FAF0AFB2CE75C07773907CA288167D6B011599C3DE0FFF16C1161D31DF1C1DDE217CB574ED5A33751759F8ED2B1E6979C5088B940926B9155C9D250B479948C20ACB5578DC02C97593F646CC5C558A6A0F3D8D273258887CCFF259197CB1A7380622E371FD2EB5376225EC04F9ED1D1F2F08FA2376DB5B790E73086F581064ED1C5F47E989E955D77716B50FB64B853388FBA01DAC2CEAE99642341F2DA64C56BEFC4789C051E5EB79B063F2F084DB4491C3C5AA7B4BCF7DD7A1D7CED1554FA67DCA1F9515746A237547A4A1D22ACF649FA1ED3B9BB52BDE0C6996620F8CFDB293F8BACAD02BCE428363D0BB3D391469461D212769048219220A7ED39D1F9157DFEA3B4394CA8F5F612D9AC162BF0B961BFBC157E5F863CE659EB235CF98E8444BC8C7880BDDCD0B3B389AAA89D5E05F84D0649EEBACAB4F1C75352E89F0E9D91E4ACA264493A50D2F4AED66BD13650D1F18E7199E931C78AEB763E903807499F1CD99AF81276B615BE8EC709B039584B2B57445B014F6162577F3548329FD288B0800F936FC5EA1A412E3142E609FC8E39988CA53DF4D8FB5B5FB5F42C0A01648946AC6864CFB0E92856345B08E5DF0D235261E44CFE776456B40AEF0AC1A0DFA2FE639486666C05EA196B0C1A9D346435E03965E6139B1CE10129F8A53745F80100A94AE04D996C13AC14CF2713E39DFBB19A936CF3861318BD749B1FB82F40D73D714E406CBEB3D920EA037B7DE566455CCA51980F0F53A762D5BF8A4DBB55AAC0EDDB4B1F2AED2AA3D01449D34A57FDE4329E7FF3F6BECE4456207A4225218EE9F174C2DE0FF51CEAF2A07CF84F03D1DF316331E3E725C5421356C40ED25D5ABF9D24C4570FED618CA41000455DBD759E32E2BF0B6C5E61297C20F752C3042394CE840C70943C451DD5598EB0E4953CE26E833E5AF64FC1007C04456D19F87E45636F456B7DC9D31E757622E2739573342DE75497AE181AAE7A5425756C8E2A7EEF918E5C6A968AEFE92E8B261BBFE936B19F9E69A3C90094096DAE896450E1505ED5828EE2A7F0EA3A28E6EC47C0AF711823E7689166EA07ECA00FFC493131D65F93A4E1D03E0354AFC2115CFB8D23DAE8C6F96891031B23226B8BC82F1A73DAA5BB740FC8CC36C0975BEFA0C7895A9BBC261EDB7FD384103968F7A18353D5FE56274E4515768E4353046C785267DE01E816A2873F97AAD3AB4D7234EBFD9832716F43BE8245CF0B4408BA0F0F764CE9D24947AB6ABDD9879F24FCFF10078F5894B0D64F6A8D3EA3DD92A0C38609D3C14FDC0A44064D501926BE84BF8034F1D7A8C5F382E6989BFFA2109D4FBC56D1F091E8B6FABFF04D21BB19656929D19DECB8E8291E6AE5537A169874E0FE9890DFF11FFD159AD23D749FB9E8B676E2C31313C16D1EFA06F4D7BC191280A4EE63049FCEF23042B20303AECDD412A526D7A53F760A089FBDF13F361586F0DCA76BB928EDB41931D11F679619F948A6A9E8DBA919327769006303C6EF841438A7255C806242E2E7FF4621BB0F8AFA0B4A248EAD1A1E946F3E826FBFBBF8013CE5CC814E20FEF21FA5DB19EC7FF0B06C592247B27E500EB4705E6C37D41D09E83CB0A618008CA1AAAE8A215171D817659063C2FA385CFA3C1078D5C2B28CE7312876A276773821BE145785DFF24BBB24D590678158A61EA49F2BE56FDAC8CE7F94B05D62F15ADD351E5930FD4F31B3E7401D5C0FF7FC845B165FB6ABAFD4788A8B0615FEC91092B34B710A68DA518631622BA2AAE5D19010D307E565A161E64A4319A6B261FB2F6A90533997B1AEC32EF89CF1F232696E213DAFE4DBEB1CF1D5BBD12E5FF2EBB2809184E37CD9A0E58A4E0AF099493E6D8CC98B05A2F040A7E39515038F6EE21FC25F8D459A327B83EC1A28A234237ACD52465506942646AC248EC96EBBA6E1B092475F7ADAE4D35E009FD338613C7D4C12E381847310A10E6F02C02392FC32084FBE939689BC6518BE27AF7842DEEA8043828E3DFFE3BBAC4794CA0CC78699722709F2E4B0EAE7287DEB06A27B462423EC3F0DF227ACF589043292685F2C0E73203E8588B62554FF19D6260C7FE48DF301509D33BE0D8B31D3F658C921EF7F55449FF3887D91BFB894116DF57206098E8C5835B -MD = 3A447C96E97CABBA2AEDFB3DFD1A563FE05D0F13326BA54375274EB1 -Len = 16727 -Msg = 5857C3781568788D7703A060540BA1FC0539F571B0B082730496E652943DF66F8475294D0E55E93E0C4A0C15BC9E1731C8A9C9C21EDBB541C1C1DF438A0B0A40DB6D1463EABAF20459673249A13357C38EC3E22C69309767B90C030B6E8C36167870C177A90975D207728BB94D572685619666E2D5783DBDBA177D555B20847DB0984D6D1C0FEFABB59EB8560206D0E2C304962AD57F4E6687E0D1071218FFFA591BA210D9DF74765FA45BD6F16DB01C134747F7BC324F8D3B96EB0BD56C0717481EF311D196ACE37BE4BCADFD88FF9A6F5D0500949C715B173CFE958697EB8F58911ACCC1AD1369FED5952D5A722C44EC6CEA2CDF2F3374100CE672082D21EE9434BA8096B1583D500533232BA98DBA46023C73CD60655BC0201BED3C8A0D5D93AB9C2C1F12EEAA0AFF88AD9BFE739CCBD615DFD23D7BD5F19103C55496C5FF083665013EE63BE6384CAA735C651C2A4D1A70A118737E2F70FFF282C5AA61A77C050A69551A53A1015B0653A8E9F540613279E1C86593F6A95B4A016691203CDE57C91412C864F9B994457874CEEBDAFF967D7856E9F5B58DBD32DE998C3CB592EFC711102C8B04755C3A1B41C9BA1E1BBDC45D6DA59049773CA6AA65D54BBD3D7C69DDE800CB58B15A359D4980BCD128289F0FFC67EF7047A90FE6EE12E43895C8EA2E112A414F47D6A35DCDA90A7FFFFC2980FAB3E8D051EA00D0A05BE03A81AA13F5DB5D70F72C69005DA2D7E459440F1434DCC2E00A4610CECA3D194FA2CCE3217B6CACDD49C0D91D6362A2B01EBA9360F81DFDEF40A74761B66F9264F3B55A772EB24A36CB92224F196B0F792E62A75D491D2E2DCCEF42BB6EAEEACA0DCCCD3A8AE421E575B917FF83B3D7DD4890FE29F2DFCA586A1801629DF55BB5CD7A3FDF727DF013A3CCBC5E69B12EDB334A2C080C9E4649C0A0E8C52B068E8FD23969BD99CCBA61910C3CB79F066F0625EE642008239651E89F1B2156656C5E1F990D4D270B0044E8C970FD17C68AB5F1F6DAB9526AB0721EE62CBA7E22C8791B966BAD042A5E4B86E3D3153E4168E96246896A90035E583B3A3CA556516DA90786DEC86EEBE0D384AA5D09D6068DF90560ECE60D1BE3EF31E75EBAA13E1CCF11C93D46C3BFBC77609E546F8360D4B899C011DE4DAC72CEE58DC03B2703E803EEBFFDE30712187EDB7D06400F8483E9C81C0B5A9CCC233F8935A10FBF82612266B81BB2A0453AB54E333F7FD6A19094E7A3491C1E2A83FE80642BEC3EB8B861218689EAC065EE9038DBC7CC1D954EC5A0C96B0B63BE6314364BBCF8427F5B0FC97DEB44324739A70637DEB2AA2479FC250A9D5C46E091A52FB55E0AC4DE3B984188DE82B0D1A9EEAB804A5D2FCD2543DF4BBFE7DA817B9BE42A185AD9E93AA52F162781DCA75B482BC3C94814052AFEDC1AAF63153088324ECCEBCB4F6E8CCFBC16978BFFF9E1A5C305971EAFFA7D680A7E960691033622BA2CC78099E8E883DC090EA2BA5AAB0EA7654FB646073014FA354C7D9E99824308F0FFCC41CAF711105559F8F38C8403719C3801CAAA9A5ECC63E45B8F2E9463F62620FEE4CBB3E9B95970749A8A4EDD1030BF6C45EBBD706E2378D8765C802FAB109379BD4078A70916B1CB5D5C52462660B99660D3EC5C336EE285D3C0066512BE633D6DB78ABC70A1881994A76F269FDFB23472DF8539B20C8019B88AEF3D53B656A8FA01C8535AFF6200AA47E90FAA3315F091F0E723D44B4FD44F7A222641881F98237AF0F972C3C047C35711BDF0AC775164E33A910BE198890F40AD086A74F23907831322AB61F51EA0DF0DB6ABE432502FDC94992F886824801D99447199C516CA9149B8055491420BB25CD6C7334536BAEFCAAF81D9F7BD291EECB6CBBF5D8BB6F88487F3C152BE382B64B35623664874238A5918FDE0CB1292A8626E73A89224CF5DD17586E42191B32DBF9F044CE1A8D07E934F968AE9FE313D46BC5A349D0F4078BB9CF447D44092A97188F191DDF1786384A4FF6B402665F3EA45752523B432F6F5D608E43732C99281F54E9FA8DA13A682A2CBBFD93E4E5EB89D742978C5B7625F4C726E9D54F24736B43CADA0755D0FFB30998FA5CDFE09E1E6B336F179CA8C50355EBF0C0DD3A6B73AAEB748F9F150307FB8749ADE025F5C917DAC46ED7F430BC5D8E37B2E380955B65920452615F6DFC601DAEAA8558B6853775F450E87CBEDDD5BA4F8B180024BB260AF0A272111B120F47C7DB07ED650DC58823463280AA02F551CD8B966DEB953375C3794CF98F2A99633AE9F51345C5D428D8E9D9570053A77F85E9758DB6184598983EFFFFBA6073032FFEBAFC8781E7100FA76C2BAEAA75C5A1279C9FEA934BF3CF0D63AC6BFEA33F3EF5ED23B220A6128597D297F880B4BDDAB930269FFE57DAE7E5A7C131843F3029E9556B0C7B038160C3B2E98A9D37FC5E7A2AF94BDEF3395932D82B307B3FFD384600561C7D3A690B7E534D12C0D8F40C0D9FBA2BCBCF7AEC883D38045DF8CC3D087265C1AD3352A6504949B52403AF31428ED5FE383E1FBC40D403869289B27A67A99B2BBDAC0E9650D674E7824D63FE17A9EEBF4CD40BCB57E2F4D4AEFCB82190CB0590702983F4C3B582C5D52DDB327AC9D8AACBB6BD2DD584C286094004361CDFC77F71C69F961696F9797B4E7A1B9F22130B0AD46DF53351DE4F04825B4B06DCD514683D033DCB9B64D0F240CAC269BA8349A0942325499467538A8DA11188568BDCBC71B65D0E4A7BCC5625DC24E2F16221F23B74B0377FCA3C40ACE44293E11A5B328DD67401083E3D52864F6613A96DF24886DAE8745AAE110B89A120ED69928AE805AA4A839F2F79C7FE5FF11BBFBC3B1DFEBFA562358A2807AD9C9ADDEF9F9176ACC86938320F39DCC6B68F4BB08BE0722175575869016423B9EA5BF7CFDE501B09AD0CB22424A6AFE3133F44638122DEC91E6A2 -MD = FD1C2539ECD71D83657AF18AE2C99B16A9D14150C0F0CEC17176DD71 -Len = 16790 -Msg = 28B9A29657BBE6BA8029D83EF7F97002EF06773F177EF69863E7186064E04A4E22945F178A36598D8ADC84009235CD1C3034D2D6D9B90B4E224AB0C9F5E755F2DF5EC494A5F94ADC8A5A7293EA690B1D1CA087C869ADC861DE80447B8F310E7CC1A0DA7377066E3A0D9ABDB7862F2165BAED5EF0E4448403A25F3999A8874F65B8547F5AE9FF5957550087F6966ED7DC392CED7FFADDEC233C7B456FCE68C96FED6658E348D3E9C347C423D2C1168C7FC509B2A7BF7C567E5010B110E908713720440D2E709FCFDFD2F117156E7502319E9C0F9C596A05BF9B663138CFBA7C5D8443D1B4CB66D95ADE128153646D2A16EC9569964A1F3C5C0532280473E62775CE7829C174DA308CE66B53C762834CC9FF2AAA371FFFCFEC47F8BBF7C7D88C22DFD18CB50278D0225F6DA4A937D294C1310BC2F78C16A7232288E9A2C96FB8A039658B2C04401026CD0989AF4B37FD365878E10766D8802F8F44CA056F82A2BE99FD6ABD3FA4D68C60923C6F213823004CD4F6E721271EF9CC7B60298B50A6B85DB189EFE75A1E89C13B81BB16E8F8BA779A955D3A88F9B1B2D58D06731F3FD19A4D4CD0B4E57C6BC5200967981D1CFAD27C5DE7A5BB8511272159C552D4E08366A18E028CDD43E273D54950D7514D8BB33ACD1322FF91210FE3BC04E626F53D72A75B2829CEA1957E3968578C30A395EEBCB8C52ECEB436DA887A1CD1269F3CE49276F9E0EC264678581FD6F3DCE781E93F7E2B5BC8DD604FE9936F149C21689003C2C808726FE9581C3F6D1A691F884704D56169E85D68785BE46189E6BBB9382667E750852EFFC70B6E846DD253965F6B6B9767DD776EF80FF5AEE0C280EC390A7A283EF30EF4D39D86034A06F13A1FD84482C6B251569D2F518642CCE5E68BF3D882B9B4C588B0E6C5D3A8DC231864F24D2DF20BB319C5711BDD7F73B20D2DCA606E9558781A06479634C10CA4A7C9ECE58F7CCD58D8E7DC6426B55744745C75F0E1E0AA3E22D3A33254B43FD0F093F64DEC435106B5209E0BDA41C67A69290373438A00F5756592248C65C15ECB372B1A0D2C70AD076DC8827FFABADAC7B280DCB43EEAFE08B91D654D75D56FE4FE0945173E87D3F6B0ED212267F1BCB635E6D6EDCDE4AEEB0DE0FF6B4174C3F05E61A40768A5BDE1D752D14C4C9253B712EA873BA9C6F2693B859BFE60F80737E43EFA08A0D46DF706138D22F319D8895C25D24A0E61F214CE6A5ABAA30EDE5E60CBA837AD3A7833544D2A053FC36C93E08615AC7FD5995E82A0CFB43688C84F9806981B261BD5396BEB77D66A0C50CEA9551A7240BEECC9B90CD59EE7CB6D26DF9E33DB4CFC2E97641C1BFDAEB0ED58758E61F67502C44AFECB76E3EFCC6B4B6080AFD8751A54C57AA959E2931B8A75F51D9165007B9FC1DB36F7B9A1774DEEFB8543CDE325202F41B85A6FB5444E2986B8768980BC1D3AD5716170D89B35E0124458CED7C7DFAA45BC5F949C9C80184E01323D33B9C0A57ABCDC9142369FD1CD62A52FACA703ADC03AE06BACB752A2F2D99D9F645A0C448923A57DB2BBBFB37BAC32E0EC51B29E152482999BDBF3CBC442C2467CE82A2EF37DE3BBBE97D36FE12E830E1F6A2DAAE4DFD21883D5A86B8AC6442C636ED108DFC3CE28B1ACB072A22E7ECC60A9700A99A9A809ACA688A39D0F24F1BAAD8EDB37D4D37A25674F4D57CD0812699EFE1888DF71706B47C07A7D16CB0846D47D8B0988E2A98BB2738AFFD0B4FD1BD464090E296CE69D1CCBB082138D06D14DD29AEDC30391245A7454DEA0BE1203BEA07C52B83DA6FF3DB569F1D31F03329CC1D05379745BAD61347BFC05D31DEC94ACF1029BD2E53D3DC3DD1A8205262E8878E72AD1C1C2D11ACE8BD5F12084B84D130EECC97BA0411A5926D5C448084246CB2C2CDDEF91B4AC07070D95D24FCB99922471F4C1AFF31F34CD50E697EAB90BFE34C7FD509116EDCF4D4776040F350EA035C2F3D210BF5E84421D2C9EEAE5C5971B3059A9F095F8D74765F73356C3CE3C78B302A5AEC126D798CB21F2FC4D4188549F923AA9C631F811BC2B0FB3CECE0571EB668A7FB28F4337C3C1FB1E4E559BBAE70D9A580740606689430B32BF07CD848F627F0E41ABB5261DE5CB34C9E1F388A77269BA9208C5FE07011DA7F67019696CC635C6ABC4BC2D80ED4DDB623E22477356043E33A0C2D93818B038828EDE4C538615B88427ED8F89095223E8D54BC54333D288746CD569ADABC08D63F1038840F6E6D2CA288DA53D27E1F7465579E64FA738BBC5CE338AF6ABC062B2F9082D1E4272D88976491FF7DFBC07F35F78D8D29F52A7F52186B587B6687DDBB27F1E2132734FF14492960DE1F37359B86520946574C958D59753E27EE5AD4D3EDA1E376933E3B87B43AF77BBB2E3D962A21C2B8A00E8AF496DD62743709A0C1F86F03E0F3586862D0305EA6F8701FC68245B17C04CCDC2E271CA8FCDFDFA41580CFD9E65916BE0489EBFBF4EC428C393768D3DB9AE64E4D3D7708A060A535E0EDE1712930F7F82AD1E1EE256D82599DE7BD906D88652061C2B03A39C66CE84307520F683F6288F906F74A75A251FFD9E464CE6E3E489132D501F05AB777713C25701550E8D9624D1CBB781C621F3565C16C24C652E1A0BAB0163BE62B63B858BB43770440BD47E2D27726B26018372EB2E7294081D308235C0B1617F7D3D84FBE64A09BEFC38E3D3B1284DB68EDAA18FFF04CD3C3271FFC8829A081EDB33140BCCD19140E8BA8306A397DE170BBA2688F7318EB640B3DFDCB44453AE2B57F4973D6A8DAEAB00C3541A790B70F621F04DED37B3C7221A265B4DDAABF312C3FCCD00373B4EBB9F51171111B7DCC6238BA0400B10E9B0147075DB421CC4B89A2D2C8C182DBA0B2300ABFD035AA08F24F5EADA3ACB873BF7213CB4A9541611F5E488AB4B5105458C6415C206F6F506C9B9D748F9C412DB8F4D964C82E46330 -MD = E4CF6C2AA0A70BF7FBDD7EC6B6D8DD8CCEF8EA61833D9CEDA20CC041 -Len = 16853 -Msg = F685CFB362034B40A58213E9AE23F9B626F6F066B055C051AC38EF9D6E0D8DBA87F22FB1E83B707F4EBCB6D90950CC4F0A7136750669597D0D04A698C17DE28C20BA9A379FDC10C7B25D69F9BFAEA2E477B7BCBDEF24E5E367311937053CC97BC3AE4930D8B5227960574971EDF3DA6BB54B1BF7F148BE69ED5D54007188D13744F223E3B3C04C773C3CAA72C6BB9722DA0FF8728AB064DEA954F48CFE5990EFD3A609B6385B3E75AB139183778A271245DE1B08FA373ED7F53DF5307825AB5D438F459C06D9232D8986C27B126BBFFAF3FB3E48BF9BBB10510F33CB30AA89C6C47384DA70AFD8A44F28C5C92FB763F868FE343D1CF0DB324A922EBE593E921D8A53A178FF90B5A08DB529FE22A9257C666A7109CAAF86964E1E2197E4B464821C68171A0A46073FE2D526B41F51B31A9D6A37E4ABFA8DE279E739EA7743BE907523B2272DA3D5744CE5FB1D3A160784DF89E0B86B8F8CEBCBCED167D17ABE12C437290C19A1898771E2F5D6BDBC250A6F4567A4E4D1C841D376BDDD218B2F673AC23D343E9DCE38A8300965062BFE707FC674DA9D0665A679E00F6B9623FC606A04A25C147C52D5A6AC200D7D65525B1449F109AD83C428C321AA2EC001ADE6C8F89853A13EF62EBF0E27DC9F08B39FBD17597F5C83161F5F7BC2A6DF91757A61C6A414F8A09B3CC049EBD399E4017B7256D87189183CA8AB4A5C495395FF2F6336108FDFA09445174864231386C9A9B631CEF976D295A3F5BD8CD761EE5C302FC27D85DCD0D133266F8980F4B3C46B566E065EC0E90094AD9A25732B8395672B4ADD625C821F2A5037E0408C5AA526A89F5623162F80220CA22199C2373CB1B16086A522BCFAB6839069641684E5EA7AB7357F6DD8EB4217C57CC381FC583D5F8AF8FD8AF62C5B9268AA86881D5F2881E7DE01957E3BCE64749392B619963B996276AFE910E6D128EB1AE42114D102CB0C13F840D6FC28894B6A29D53CD046B2369EA76804BE382E3C0AEA6A3AA2688BEE848F0466EB86CF3FEF386E6F8817DBFE3AB899F319EC5163770556A209FD4CF01B421D47A75D0559D53E4363477F8A63EA5E8138BEF6DF639D52D4635CCA2CA763B24AA66CF39E3853B8F517902D5820B2F800A13274C686451081B1B5A4D4018D96C487407B116A45EB14CB77EDC41E4B9FB7E11E759D88E042DE7F086E74C019486C99CDE69396214A25D59A126C160139C69D350D14E76E2B217FCF6F63D09358DBEE7AB37601F4393BD48CCF6965EB33D346738EDFACE0D18558C32627C585347B55750E8547926BB4D84C0AF1F59CF3C971A7F891C03C9E08275DBAF9D70A732741D468B680CD2A87BC319FA93CF214218A193FAA263DC3A7DF9B8EA58863632D18A11314B18D648B18895F0B310B4C168F6FDD5403D4AEC33D3017199BFC1CEB9555C7C9E7E1EB2CADC19E33CB9AEF13FDBA859597DE67F6BF8D213FFC2EE43E478A551B2AAB92D66191C387D3DBEB1CE0643C9AFC154FD357EAFADAEF561313857CB799E9D1905968A5A1BF31F1F31C57EDE3FF88E3DB80C864F4B37AC551615E5B27B841EB0CCF34A3B3AA73A48A40CA48029DD8D4AAF6482C088B073EDC5D9CE2021C9D9613120D99CCB38218EFDADF2D84F6DB0C43ECACADFE24E33C0D0F0CD7787420DC5CFBD05DB50E6B84A2D21B8FBC4FBC94860301F63DA79BEF962802942474F3B01FBE5BC6CBCCEED0200C27C3987BBDFC8FB86FB00079C7145E4B23C8B81A963F6EB3E96EA165C1AC7D4EA2B538460B8F2CC2BE2BF57E663B3E15D342E4C75AE9954C593972A0B3FFE13D29F5D8FD616D73C265A918881C43B0D275103FF8EBBC50867AA38757F6D15B5AFEA70A0C23FFE30CD15B9F24FE63032DEC3FCC3C84750008F07FB7F074B4B5DB260C6C6B1DA496B748F7445F32CE126A691BBB1EA7AC2847896B5C9405FDB7FD4EAD0F6B52BF0D1D9090E70A6CF24E8DC8E9E4683BA4858FE9E147EEB2E319A552067C517C8A8BBA327BDFE575FD7AF97EFB706FD18C6C020C03C8FBE9EAD0E53E0683B199202CEA235AD1EC5B1D7120445F36EF2C1DDF898CA42993E8739B58AB9B30F9FE3FAF440CB3B55C553046F7A423932DC2D332CB6BB482F7601F2DA2CC71A3D6FAF18C561088973CC832207F30BEDFEEDCD81FD3CFF9DBCCC437F173E975EFD44DD44FD0D3339E7717FA4DF8732C476F06B9A89FBB8E5E11DF585EA7A048B7D460DC2637EF94A4DEA8901C812DB93448D868732E76D71CC1892D2742D266592A8519C0E38ED969E2AF444A640F66CA2617D6ECA37EB0C017291B36BA4B6945101E7A62C7A6D2D9BD217A2AF96F12DA3EF13F245ADEA224F5542E780BE96C7D47F6DB347C1C6482A42C7753DD10761A3C55AAA1C3A94C7FCA4245996B389FBB14BEEE35167AD350122CDD8E35EC62DC4BDE23FBD76742E41A352CE18F9E3BAEC740F338E26ABBE6D485A05E8AECDD6FA5F3FCA41C375C1440052FDDCC3CC32A4CF33E99F1ADCEE967546C0835DEF18701AA6EAEDBC881BD2769848B25565F8EC63C466C7A65F203FC1DBCC5D19D937856F8C2F23A269B1A7860C3BC6C8A8369FC89E36302EB1D2E6E8E2343703FCFAC062A79CBE223F0B2F3087638B613DD54AC9C9C60CED821F5041E4AAF4C91B077DAF69935471C0B1E27BB5E0FC0DB9FB7DD15EC37E3F99D74A60411BE64DD815742D16803BE5DAFA8371927598AB5848CA24356D62C2BBF58C8D82A540542F26A879C656190C0F8E86240404D7506729694E3112DBBC9C84930677A2394F34C4E4EFC896B76ECD06B45237368669631701AD68F98E2DDB5974A1751FCD4689AAAEC8C13609D9D1822322E138E25CD66B4620BA88F5E8DB795D61A24F4672DE6D2726570EA99FF428CD89D99A99638DC24CDAB53DE827E5841206FCB73831CCB67543AD85FD164085E00D6195F458C42A6D2C3807EDD391DB200F2460DC4E1D55D804C40 -MD = 0C19F40BC50908FA7662C398E202F8E45F7B0D22EA85014AC89B0E3B -Len = 16916 -Msg = F783F13DC0C0E98D8547044AB83F494E4E57D555195D7F1D9B0FEAD0145812B725190A177B674FE4EFC9B7A596E66E7F013753E6EB1CF562A358901C99799C8D6F48A629A4BABC486BA5E81102F55CCF94360FC05328410BBF3596D6C6ED385112ADFA2913D6BF14F4E8C64E679362663B2E85EEEBA96EE7E36B6605B4F471A1A27ADAFB25B20B76668D6FFA3715C8F56B80E768A8DF156904F76DF219B94B674D459144E9CAF8CBB6D0955D8D149E6CCCA65942193D812178E5DFDDB3E1BD0AB4923237FBF9A37915CE68A3E0D9B8FED9788675D169BF4EA5F3855A3BFDBBC89B8B5B10266FCFB1C50A7604E5C352843675B2CAB9D41C4D4889D6F49C78C16DE92C10832C9682A88062E54855B56593B55F8F870ECE292B4808DF1D2C566ACDB1205E0D5E9333967A304EAC6DCE755242F241B22F000AE092EBB9B64026BB7DED31E8ACEBBF7FB4D798390C12E8E9E120925F145FE1542C20FAC2DD6D12D6A8E3B3B767A6304978FA57380C2E0DC7C107419B34FAC0F96A5C95E18E55F5B2DB7494680ADB1744452A80CCC538AA32C6A1A590BFA7C3F9EF803B08E3BFAAAD7B84D435B931B7FDCC0178535A6FC3509C5FBF848A6EB605DA7CA7D6E021D2D6172ABC638F43C83044E62397C27F0609013FB767C830D0BA3019CFF4AF9FA9A9E4B4FC4310C6C2A06DA0ED171D54CEB29E7C009B89F1FB7387572F322FC9B093A55686FCB508C952EBDDBC039A6C2DA967151E841F52E9F26C8AA8F345FB7788D685C69C0414C5EC54E6A1FDBA76B98182802F9F1BB81809CF6CF4F4D8AA3A0F6182A996AB9CA9B47820D226F386A2D08A5C03384A3AE8EF4D070E60599BDE4AC1497BDC61857CC1AFB098F11511F0A2F02FE4EF5FB2E64A8F6368AD13EB29F6CD7DA50917F54B146C05BF5648352AE3C810B03455E17484B101E4CEAC7961CDB368E2CEE4482C4B704DC5408845E901C83B0EEBAB59D7C5D1FC50FCA0EB06E5E82AB91084EB6C22A55A2B66DE73AD6EAE4197BC5084F8F3792B40A9C4F5A2D2A033CB6FA49B37F9DEF7137CCE850B119784D25916300BCCFEDBBB5DF65ED061F0DAC4EE7685249D6175A4179B02A7CD0593C2E35B39038C0D868F52D080A31F7BA891A3FD1620FDF7AB07468D61FDE01AC472B88943A1E379B237681B16351D161CFDF2E8A764383810E61486301915CC45E4B0129FA7D673ABAB42BFEEA818F14BCF25881496E52CAFFB9113AA8FC38126A5790F5C17817464CAA52B438A8BC22A283C9240418ED7C50F2D27EEB2D832A4D0FEBD3A91385B45D0A82EC33C3311D05B17975468F6ADD4BC64007D59FE05C9D9AD5DBDC72E3C49A4B8C82BBDADBCA3DFEA4AC4DB570D90F906F2944C2FAE2436E32A741929273251B1289525443C4BAD616B05E0EEF66BCAFA9E36BE4D4B62A683DDCDBACE5876E05ACD8125774F343192C87C1DF9A6207FF0CA940AF31E7B1195FA3BB5F5773BD6C4EE56276A5FB36C26F437438AA5A7EB7E223D62D41212091C1E1765499F21107E3C4CF650C06B902F94E65596EBB9EB3E4CF28EB9EEA23E495B150B35AEC44F0F48ACE8593F9F51C539C3FCECD9B76683CB18DECBFB010103AD924E67C696113BF10E627F5F6C7EB6D99FD60EA47A11F33064F5D5B7E9FCC76ADC0CE9E73BE9507AE2C95D8EB132E67ADEDC5BB766B8A64B5C790D0BD7EE9AC9EA3DAE80697F1BA16052167B92EF6E7EE915C13EACB2197A3D6685B046FBA25983B0880879F5DEF7B74A14746A228A8754986D664ABFA299DAF4B7CDD23741081DADB8843D051FD0782769E92B245FF0E5137D87D1BE8887787BD6CBB9A7A270D49DD8AB3A417DE4295F4BA46F8A00BB9B65CB709D1B107612B24D642436107AB012BCC2228A7FC3B4B4EDE36961613752E398AE79F716FBA3D84444E8526E4B409671D4D19C337CF4DDF96D2F96386F7CA9216BD38227B0B4DDF1B873CFBC378045DD6F93F6F6EA4B740681968B36F9980EEA267A194B284126A13201ABFA2964C8491823BAAD0346A3E94E9EF1E9024FF51492B28F58A25C01C55BE128D0CAA66262DE11370F3823DE53D85B3CDB554787CE24573CDAF3B255EC589D3EAC9FE963A956CB80B0B0C805295A980CC74004FCF42C9B9BD116A17EAB783C4696EE16569324888DC7D70BF82CAFE891B09A75EF64BB583AD51DA083C439EEF258D3B417DA38A6B63BF1363037F8DA9396A2AEC870E364FAF03DD10524B3BC30C7353A604545EFADB6B296CC08B00C48012457A5C5571750C52E35B3C8E4555B4460E55B36D12AC514EF68DC425E6CA6C963466D4681C5F745BBB803B15EC9D79F9AC0BDED4E63D0C16F8ACBA6229913E2B6F08C4B6D2C7256FB028F5FAD5A772583F221994E4CE96F57AC117C6EC4700F8C8AF77188BE2AA77889EA2AFC2D6B72E6A0097CA1FCF6C339A350250BC7EBE6B70D127C477E4A2F674BB6DDD403FA71C85DB9C6962FC053B8CAB4839B7912CB522D30C8C7F234D314F48C342AA9435B1A54730248FD3A91B803223D0F5D8058E0B6772D747B3EA4D067514E73AABA9B97018A845C6E20808F07031C94FE5ECC18DF6674C47396EDA4583DEB620119DEB31305A26C719B4A22D831AC57D403FB7FA6BAB157A7FD4D56DE7DD1E677BCBC6EEF85DADF095609EBAB2AAAE556C129EF0D5E896A89BDCB428D8E57FE499E4D82DD4BC4AF363F7EB207676BE12FE7F1829B6950FBC8C51FE9E9721FA1916ACFE75A08CBB47656007D2C22D3E8ED8D70ADCC83B85D16DB33E7F0C54D96F32C0AEA26EAB41C7E52030D00C985A5779556F0F0FF3317B0CE16694D86F821476E33678F63E2BC51CA3A313B199DD0E475C660F76533233E585FCB2F1BFE89737D8DFB67DBF440FE08E5C3747A2BBDA8A1765FD2CD2FF7F0775A94FDE836EBB275A0D99A8E92B70C7F5F1962F3EEE007EF539B979AA1F99A2384A81BA8B22FA8BE56F33E4FF8FDD66D90C8F2AC1E82E1F6F0 -MD = 800C6DDB476F153D91C4D141805FCCB66A14A0A4EF8146E83BADBA4F -Len = 16979 -Msg = 44CB5D71D0835070390979671F4F8B477975791D54D06B31AA261F2F3A28349858623552FE9813F6A58924A2E857892C74BA9FE171A49525126839B7CE5E149712D0236394A486173FF8ED71C27446A0806173C7531D8E840C09C9AA4E86138984F6778578236548837507F2C3FDB80AC301CF13A79AA93E96AB000423633E2E271510B405ACD5DA97E0604B7DC0E249C0A626355F1F76DF28D0359115C1769B163537065ADC3B33F7E5DEBCA6C93DF07DEF992DC35C8F36514DB962402E589DB6776898A401103CB57118EC33CF4634B1E2C63EE26B6C3291163C86EDDBF59963EC6ACD10792ABC420623F4EA0E183C8DE6791C8A283E3F8D7D23928D0C96D5B01D7CEA3489ABEF89E8299297AFED08B311871377F95B915CF858BEAD26BD598F3C4B4CDDBB73FE1F7EFE41F9D3C0074130C7639A3A0795B2791C524556AC34545E2A2268EB68645F5CE6BB8536A88907A72FD6C1076AAB2A14C61DA5A20C44930DFEA688586F3D783EAC6DC2FDCB818D4DAB207CD33FC4043C38DF8186DFDB816F84D77CC5C6E5B2C10606EB154FFC081F649F58A0E466DFB38C856A7387E99C896BC8C9EA62FCF6DA404D8E6C226A0F8CF0B4FD79675160E9DCCB6D5D0785B2911BE773AD8AAE6325B59AFB93E17E5770C4BEBE92289C5CC80829D830C018F52CC48CA6BDFFBFD88A333D17CED7BE841BF87451B2D3EA661F6E887CEDA3FDB368D4AD005E69416E604DAE0156EFDDFA93DA9959B5CB5B2FFCFF5D50E0A658FE4FCE09AE8A149D9D819DE52134CA92DAB34311FF885BD5E20DF919E92203603AF898C56F05506FA317207F1B931D511FC85CA1381E516F316E0AEF874214D902AF1D1EFFDF41F0892EA4228E4340F392AE3D8B3613DF9D4BF840EA9CEA8540D01AF851B697E0A0F7AF8109C63B4A606998C0CC97788B8BCF2324DD9E38FA7F9DCE2FFE1810A2AC032CD3C12A8E64D07ED5F82EB58C7660DFB37F7596E7790FD7DEE36AEF62730212E5BA744A0626C6CFB36B39337BAE21CB692FBF7C816BC5074D82D37E5E4B0355C535E48D5D12882E25F3B04EA6445E9E3F7F845E8953EA2E8647495E59ED97FFDD398437A2BB007455A20358EE71BCB772F321BC437D4754B8833524E9D2F9C9B9FD0274070313AE5EB05A4AAB598F4ED21200DC3C0910296284025C441A86E6915DA0E450450F206E5803688D1D164DC1C22204DDA9DD5DC15C3C307B8BAA6BC7D3B5D21998E9CF02062A040CFC81221D77A1C6DEB0D10DE57DBFFD02C593106390959C255908336949F118F7085A71848CF43F6A9A7AA2C73AE60B6B6689D3C3741AC07D3CCCD0C25D6DD4A7FC04E249FAB2BA2CAD247BDC8071C6AD68956F21A1BF3811DA17D339F5600797EBEEB9514EC494EF5FB0AC98862882067562DD3889B1A1ACBDC35A30405D60302ED5C67AAC97DB83C23836FD9FD9BAFA00FE27A653A6132177162DF0ACE95B10FFB17E7A9EC8850AAD4C6E6DC757D8BEDE1EAE639BBFAC991AF2FE2D03DEC836574B853077F14B5C6E98A557E32E70196942F7DA3AC44437EEB5C456FFED5DE3E71C1C5C503404FC5E20182AF28D362E4196F9897ECD9928EC4F077F4676146D0281A8A4B2FAFE1420CADB49867DEE5A370A9228A879B158A599F39828ED18ECF9D752A95C40848020F87995AC3CF9D22C751ABE2BBD8F021E814CDFEB58DA5DA6101363F83D2A2BEE3FC6B0ACBD3132AB41B5BDE82636256EE215C4C6FC8F6D8B40B7F48CC5604A0E659542A58705B647976BF8FD305B5AFF20D9579D6D38EA114DE8A2484BEF274B20E8FB2FD29B1A262EC121B51F279DC20C92E7DF745354D47865047831ADDB6BF39F8BA197435728ECB0C602D92BD4CCFEE4C371B5526E93D28E867F5BB80DE5CE3695C5E2EB6149DEE596469E84A3C6008BF301BF7D41ECBEC6CDAB8F05D8388B5AF1059B9BFA425F658CA3EC22E15A9BBCE2A8FAB35FD95C8092F0773516D3F27FD2B13FD3EBEC79B4804168336319647B2923282938E2F66CE101110D900F0126512497CB571955192DE334AA6883A86ABCC0D58E23AA7F6FA335102D355BB188F225E21BFAB3B30962CAC38EFF3A47B27F2A36FDE92AE11B178EA11B15AF71F4DBE33E2195C4B88206C89F1EEC3974950AC06F78F23614A576E47DA9BB4D1F04B1EB7E19B291F409DB5DA94AF6CBB387142C14A1D83ED430DDA01629DD3E0FB7BEBC2AC1377F88C0FBB78A7B72EF8B247450ABF7B002E75A18A52C8D3F8E2462C72780DEBB979EA8A0890009E9C477CFA522289689321B044CA6B0DCF33DAD54CC288C3EA162E11780DCA9659C846D197CE248B4CC1ADAA8FA99F3748BEEFBB17AA43DEE64098582C542E951DE2DDFC220708B3368BE09B37A9D6BDD925A56A3F670AB880F012C212012366501CD40827CBFB958A0B3A47657B9EE85AB024BC15456B3DF6F5D3E32FFD251DF79B1F65B3A662FFD2937511A4F983CAFCBA109357944CA373ED314F9E5C93724C57A910412BFD5AD8F4E2DFF2017FCD8FAD1D40EC853A34C5C29F929E00D668C86B10C5B7042EC45109AB0D7EA0BCF98E3538F95B55D9CF46176C367F70C4E06ADA7920D35696BC0C46B73AB6E82842DC0D293DB95841869B6ADB339AD0CB9426B93129075054E49552286CD276B538A5E50A77904505AAD7E40ED342D3B9B1BCED8AF4236EF6435FB917F1B228387D3AB70DE68B4F95D8642E2CE0E9A90438FE59E660530E57B4CA7BABB2EEAA6E5A84DAC51347DF3517F2F7BF35B4E80120B467423CFA8728C3000E0DD0EA2A70D5D97117D657CD2F8AD3DD044C7295FB83A4C4FBE41711C88324745B97807EBC4E60BC62E5900D6788CABA58FEB725D4A40BD071B984705D3D0E3AA00348938B25A5D7BA6EBDBFF8B1CDC96625EBA60C18AAD310BE7D7EF5A8DF01F46553C215EEA398707E7A9C0417A9A5F6CB30210E4762D9C2D13529309145A8AD74CDDCDA48F517BB27BA0993C3791BCA6D8E9C0 -MD = 6B1F5F4A6C2829202F61CF41FB3A21DA5EEF4A0E520C0497913B1DBF -Len = 17042 -Msg = 09DD24B17986E03F268B1E4727920BDF7EE339FEB3D5C4F1B6FCA212E16526F298E95E7D9A2BFC093A58FF7743B7639F09DB338C401757A84EA12D168980B7A9D243AEB30693C1A8CF060837E5457FA6375E890BB826805EDE765646DCC66E59B23C7B633806CED3FA3D5122029EC9A4ABF661CEF4254A93D334515AE2E629BFFE5A0CA877DCB809B9936B7E99E5A4CDE75781D83F2CB9DA8395BFFC4CFEF306DB55828CD7741BC41ADEFC62F194FF4FA00AC1573A18EAECF761243A1B14EEAEE441DC4578BC2B8AD4FF92F9A041D76A2FE92F39D1E4C0CB5512D054F146D9278C2884AF5A4E23EA6A5FF9D181C315CDFE0E0F142A1A45487D96D208294E310E90E84236D6FF1D62201C0BDBA829F46D8619E2847B106E28C3E0F01EA2E1A05A563160F34DCBDC02C20E4631E5F7993B96F9AA74D4A380DA8AC6E72CCBF8D2262CFDA32ED0CD5BC856D44463B37A8587AC6E8A00A8A5F5406B28509300A2726FC736176474B70E5D13F205659557A6D9546D0434A293D6FC24865DE3CA6F4FB6991BCF1D2442D77E082D8E273DCBD16C74F903621843BE338B9385AA913F2AA8BD111C21D80CE137BE61AADB6A720F8C2826E84FC35EE1728C7F86640F0C6F5BBCF3ED6498D2272B547762F21AA44CFF8FB18AFB438555564919C2CCE6DDD1B9BFA719D07C49572F0207117DA6F79F2F7D84404C8D89B65A1C4E04E16B77FF31A9F3231B0D3BFCC621E13BF9D3591DE7CDFD2B0528465B17D636B9BB9054BE21C5A34FA6B619C0AE7B24873B974386EDE99929AC60F7C95A5EB5DD6D9ACA715559EA0F56F5011A14B01A21A6C1F1D8111AFD15E080D71F1F909906479C2E9061E87D4EF014A3D2D2E6541405E28E3170746A8900A6726719C5043E44ED3C00D430B1999D50783D971109A4A0E7983E98A0E851F8EF2D07834CAEF01DAD5D60256CB53C7491B49F279CB95961C3F67C6C6816B951471220AC923E021678EDAD8A6941A0A15FC74A34E5F0270F1A9E74F3A53D7D5D17CCDB7DF48E0971DD31DB92020BED788EBCA272DBBC76361BA4B7629B172AB8E83A7EA6919FFE2EB926ACC2062706C16B9264866C39BD6CDDFFEC988A6E74C8EEA055E116F1FF90CA525557656E7AD6D5B28F2DA05156A0AC09AAA16DFAA381184D5346EEFD46E4AFAED9D60B9DB61C90A659D6C50E53A72AB1B3DE8F89DC0F2D1230FB179A8BE8CECE9BD34CC3FA7B3B9BACB947769F42312B7A78ACB326BB370C827880E54573BAA6857D9DAEEE2837A10553FED4F6954137330DEF429E242BF9A4F065646E2EC8CE75F260BD2D11580CDC5611A9C6B27420FF33A900986B4F967185B63A4C8068B1BB28DEB93387C6AF908FE4230B5208F846FF484FD260460C7D9282D624081D6242DDB1C16099E67D1391B9A2DE8D45E8FD3A45DED1AAF0B03AC5C1FD4AA35AFC24C8CFBD7D2A37D4B30A5F7A6648C9A2AC82DA3CD51C39E6FE390E2BDF033365B76C036D50066007A6131FDB368DF5361C6C3DEC1D31A0724E7C3702AAA6B46DD3D20AD805B813AC105142E7EC101516ED3A6C54F04826B5E71D04239E312AC79E9CE4E9FD116D9A781D36B04477ADE1DF99A493202BE8FC53EB18FC1048830C1444D65CDD31B1CD9B031A565B6BAF19DD41DC656DC235E3C33B52618696BBCF539384384CBB8F11FD9DC94FCD7C6553DDCB6011B27D178705322F88ECD69F5274FEF382334E78D7BAB14B77E2A88EE23DC7947DE0E52136FDBF45589F9B895F95A1EAEFA0F886D452A957FC1D613AFA1765A539C7BDEA9A88B7C4F2C98C49F9B376049C69B62D72B31FB39301DB3E7F708E5E1E225F5E4EC840EA91791C590DF7DD954AC4F2D9404B5CDEFAC4EB7AA1A09707CCBADB6C15A72F8C4082C9305638B44649FADE7278E795C469A77E04FEA0ACA3976EF6355F964AF869AD81F6FE12D067FFB3F540226CE63050C62F99645AFF34B59796A3EE103755A12443E6085D2DC4D0BE86F55B026F50FA450917E7687D2102A147FC12543A5BEDDF4463110BAEF477A903215B8BD75D1ADA5FEFA5E44862651B62FAEA07322F5ACA6BA487FC7751B97D8C4B9CE03232A34CC2C30B001374772AACC5C6B7FED57B5871CBC4F7AF6DFB9086A62011963B6E0B593B65AA902D94E44560B6C42983AD8BBAE664E424C4D146E762E4D6E0A2EB184E463C019BA2097EA90E482338CA9F17F94DCB6E52B2093EB93DAF775FF2BDC0C915234B2E8292141154B798941BFA2858C073C99864107DEBFADEF9D043FC672EE35414C4F1CC51D6FCA3C8101F2AC5A76E9460061EE60C6C0CA843F6C713F2BA81556CA20148D0A23692B9587ABB329839388E60237F7737F6488231FFA1F00C7793A8CD83C4043732EBA7720CD91B056F00616F72199A690D4BDB59664BE11E9EE1D715F48F5B0062C4A9F44DA193E75296B05A3A39C60A3CC1F090D1D88CAD4F2D7CA798C713930B0718781F3690003A7D5467AC605EE9713B67A4123309E0AD1C141F8A76268BA958DFC05FD474A37BED2809455F926AB057A305BA301D59C1976B31BCCF32BDCB81D03389E1EB44B70A693B96219EDC0791D5AAA12CCD3347BD22121F6D8E7A2CB128EC1BF6F75C97A9EFB41032C52268A8BE0F529CE94F791961306402D543AFE01C04E7AA7B276F6D4C9EB033D3AC4BE29D2F0DFF8C7FAEE835E42F3A688C80E9B7A6611C72051A94F37C3994EAA4EECD78B2AEB2A54B44C70A09EA78BDB4E80F87ABCBC6BF477ED789DA8F447B9857F7633AA33F3419D288095FA7EF9D6039943840FCFB9297793128068CBD5A382CEF32E2C66ADE588678EC6EB6FCE2AAA418D66F93B09F9988953E352356C28A6E3D00C8D1E1CC1C220C7405EE4AC4844F8A0B6F56A26F69BA788CB7DD776F3D796E0E9DA0745A599B0430A92BF7347957996DFADCB5E7E26FCBC0473FF13D7B647A39C72B38D3CA64FD141B1C37F1FB246DC4EAB5405910B13E2737BA90BF243E043A4C26BC250594C1DB9563F540 -MD = 9EE40B40CD63A2A860991CCFC1AD866947478F0ED022351BCD543145 -Len = 17105 -Msg = A46C4CF723A4BA10C8E9DB31E452D0C7EC5570258148466577BFDDF8546C224EF96218396DB3B002F0B1AA582C52E2426EE2263F6CA2D32AC2CB85D7E85C255D091AA47135D0E2003B5EFEBF8FE30181699B27661EC0408E4648ED79667D69C6146D7145833A11F4F2CEEAFB2FFF966D7BC3C41CFA993EA686E3FB3810AC29A669315A88B4ABD832A24133E1AD016A9AFA58278166476BBD143F2BB6834BDD8D8AF35FE62D5E221506F025289F20F1A6D433DBC5DB5F4A2982AC4D7E08070FB1582EF078545725EF2749315D6F5F88DCE3B8AD72903BB7555CBB4F1C6C80C5B6D0209985327650A3FFF81DFABD0E8D28D1FFAAC3C7EC7E38FB6F993CCEA2D9F4FDF3F6A70F9C39B1454C0E723E1D5F0E6B59F00B7FB5FEDFAA385BA506CA66AF8B383A765504D9CE8AF8CBCA4D3A4C934E4146F9878BD0AB1895507B17A719E18031BC1DE3D4421DFB4E24C31099AEB3DFBF4382153F5AF6043310175AC58392463DFDFD8BB94C60E9ACF591746F0F32E4D53BB9BFBFF7E30F3A59AA4EC814BD7D46E710403F4CE41FA865EB7D5CEEF69E761D421EC74D9B2EC2CB82244C19CCEE75ABE7E68368FC1B70AB5311B54FFE16E8518A72B23216EAC1F36CB8C562D8ACFAE19716516B145F69E30D9910C13D6BA538CA364699CB9B240A4A5B261B9A9C16D10A676D85029A6B5EB1E4E6C0343081F56A078855D03010D90A82A086A61682D4798DB044EB7ED431A2341F8FD41374CE86DB35243C4142FA3B62A7E33ABBA90B53137C7A7663F33A8D59331CD25F80171D413F00FF3CCAE7A8CB49D0C1F90014C973209EC743EDB18644F7C8F9E7CEC3D53574DCC290364AF2B8C8C295800F4539015BC989E5E73B35FE9BC8123113350AF3CEB0FD448973B5272A9374A8640CADEBADFE01BD16F3BC22CF784E00C4AE8C98FAF9B88B471C532C77EFA5F5FF60628E30FA4D80B73D47AC0CE3CBFF9A12BFC1C7678951107F3A70355448A31E68CDB9B77F9696E7E69D9A787B5206FF0FC344377331C6861FA458B3C9630E9B6494B3D9E75DE8AFDE874308036E6824D06F8CF54F84ECB4E663CCC417E8C8F5D7BEB8480D4549ECBD68E8124C5551E6BBFE989154ECB690BA543CF270449CA9B54D82D51A6F497F2FD58655B644A8BDC8EE11BCF18C61962A250294DF5AE8830CF058F68E94C486210E217091F0588A39C5520D9A61B9AC9A3E094490E37942A68A4A19B703362DF340FA51E622DE092879EACFEAF9A4B107BF08FBCBC6169B3361C0F98CD49E4E2A69DD5B989A54487925A7AB3B09AA9325A1050004657F3AF4528B1012F59CF02310CF1F479924B249060B677EA74788F2ACA5E3F97B37A9FFBDF1512299E3706BFCF26782A577B9F01A1A05A779DB6BA583FC0B948714C301ADD1E2D7DB6CA34517009D0141B0162F8CE91D0F00D90E51AB8BF5336A38D81D91290D7FFF384F07136865E44A573E9A104A4DC2FFF6CE49266F003C7BA5D0308F3BADD4285CC8A15F6FE21D602BEDE5A73DA90843BB9D0DBD83699EEFA2CC1112E5F49BA7C94ED1484697E3434547868931767661B1BB17B0249AD15CB3FD31018E83541CBBF5FD32C38EFF2A00ED55A40C5CFF5E47C6AC90E1F4F84B4A288FF6B377347BB5CE7D28A47100880462691DA0AB39E7A4074D114A217D6ADC2AC0FF8A947E6792B50C107A6E7E5D3D81BCE39F457132CBD1AE242054DDEC547977D7CD4A88D5428362F1A19BF26E5EE1AB928426AD641F20AD66BDFA86D4E615A72F2789E7BA6053E820061C7D73E116790D536852F2B70DA6514AE6AB70566FFAA5DF2F3255F6A13280A3F5FE04A9FF765A6123214341B723E1AF4C00A60C4602E852779F54FC917C6D878969CF53CD02684405E7D415742DCDBD5D921172BCF385A4F1AB186D97C4BDC758A8D625B32E013D3ADCC4996825D31708BBCBE7ABBEC66E96BA395C7A18DCD1271F43B20DA046D2E0950A4057F49B371A44D434C099987FEB3DEEA5EC3D5560F8871D9BFEEA9759CBB0351E0C5F96E2455AFD7AF3074140D1383287DA9E8634C23390F2223A69723F1BDA2B5B719BB874ED71838B713C075654F6DDE5A6A06F5D64ECB17DB76C85210B01EE19853088F2AABD0D399588390A6E29A06BC789BA5D360B9B5D229D0ED0170B1E08FCE9CF4A4B5E574DB03D59A8B32F4198A53946069B146A9143D0F1864F2D958B90846F9419F9974B5030E1C485888842319CD79F567D83DADA39D7DBE7C9797E300640C455E19B97720FEF5C762342B72BA9507E619C730EB8BFB26B19F064963B8AF277E794657898BCE5CAC8EA8476417E530694C75F9BBF7533173209D66A5AFA6A39C9E046FE44E4004610290BB23C50A2F847492B1C286C15B605D760A3AB5516D758F0293FA4DB423384CCB00E553A20C01F0969DBC62997F790F110B607AE5B543E10B15532AC349EBBC21474F63B8FECC9C292DB42291D1EE7E93C84F3318528179F9DC07695E849AED82DBFEC4A832B2534D45330332A8AC7C29F742B94A29919E0C03208E08B4CF516271DC77893FE1A0535EB8EA7EC3868294C7754ED0EFF86A6EBC8E9FA1D2F3E89ADC385FCD3C9B7304E660973A674B87ED84A065312D7AB4235F740198B6344EA9F8CC466BBE36BC8DD6CC77054D308A231EBC6A48FAF86F0D08F8DB9501E939133CB01F2C648E0EF69654DEE09EAC8967B41EC6E21025FD616A82A2D679B9BCF31FDBF8168F8C5AA57ED53AE92E0EF07C6AFB80D845D35A6977C297174E521F5E5DEB693C09F6DC2EE063C1373D463C6CFEBF2B9BC61FA8F5B5B2CA130B2B1D1C829A5BE8FCDBA32E5C64737BB19E804AC7180D2F1AF4DCA1170EFBAC43DBCC83A6E9AC88A43B3422ADD9BEEC7E38945DAEC61DAAE81D85B807C9CE28F52A8818D05A950503CD9D175629E72F500290C5966152FF590AF36A53CD6331AD96ADFA12585C5872617EA9A198312457EB67D8B78869BF72CC3250AF8FFDF111262BC65AA0B1B3B300D9E2721EE30ADBF59CFE99900 -MD = 3907DB2EC1C58F8F136F819E8B22A7667B08FF6D93DCD39DF96BF877 -Len = 17168 -Msg = D7751AAC0B43C4AE8C2CE366256F95E3570CD6AD643C076F05652214B6CA4DC134E64077CB1B468CC19500BA1D3FB0D3C5BAFA267DCEE972EB4BA3B70AF32A00E481416BA6917DA4771DB3DF2DF38862D9ADC8150007E6C369F3EAEBE29D50E9A5A687793B3A41487D2096625A2D0AD46EE44021209E0F752615EF13232C3EB9597B0F75BF175250E72640F245DB41B6E18DD067DC628E364A92FC96CCBAABA0E924C8FA4E2E0BD8D5EB1F901E153DF1284F80B6B85916E2BCB3F0AC0F357C58CA356481C3E9020331EA63E87684032489658867F7BC88BD98FDAF081AE746A52714AD1BD830C1D65A9EA5E8F0B65385CAAD9E2BA9495223BEA661E69A5BA035235063F275C5C655FA0D165533FBFE70A48DE545DED7BEB72FD905FEFAEBD683F85344103DF0B8DA663348005492D8BE2AE95C30FC629C4D027D503D686B5A34BFB6856F24E8FD9E56EB589B79C28F727D4249C6A8CC5072BB19229D06F2A5F7B0223364B4A0CC55E53EDB771A2EDCD7F278ED5286721CDFF0696616566642CA04513B58D62371D8C533FADB90E43D78E488900E556C865E5CEE9C652F94440506713E4833CC6E119D5BAFB0FCDECF257DA9C7DBAE0E9825D4459532A2D71B226ADF8849D691D3270B73D95E1D393F6D323F0E39A443BB5DB50550959123E59035413FE4B15F32F3ADCB425801D881A24B241B1D95E8BEB2759411BA7F34DB03C88E55716A64BBA0A2F41F50008A57C31DB3A6EA1BE64691B388E93C3C4CFFC97AE4EF455A1BDD013D44F2BCBF4A45C0C4A6021C220270707C36435835CADD611386B5FF310E449778234603FD77A3DC176BB965A0EAB2142C1F489087D4BAC3D7AA03DA557D23C943F6588D64C3E14769898CD45A6FFEF50BA45391460E243A904B01A8B3D80814ADD1E6AF635E6B7DB457A47BBF707825FC72929DD1F8884904FB5D4F8C1A331B443B01B3EC8978927C1602ADC6A9455B332AD3D5074B7A400D22367A057EEBD3FF91DDE2FC3E367F5780A67F5E22B8450D2B738CEAA99AD29E0032D17D087725DACDDA2905CC79FB94BD835584620AD770F91F9626484BDB6535B08E130406A397CA732175E3A9B1D26A833DA2CEF70596D8DE6D2C544AC001AEFA0C5709220AF34994F32A20CD982C67EC3C3ACDF4DE6EDB4ED461F3B05C2E0CDB38C606376F0AF4687B9CFF71EBFEDC3B3D4E253CA4FBE89F4B19B820E9BA1D4FD4AC40D05BBD815093FA00CD5338508C71D5A5F73F3DE10E58A3AB8D555E5B32854943B924939792BB160FBCF1D82AD6E1DA7E3F86EE46274BC775C42D2F541C4FF0764EE1D9D635D71D849C1DB917377218F49A118454B4DFDC0CDCA20E4397137D6C5744F387FA3EADB245B0757C50BCA803A9F0FB764A761C77599027FF8822B2508597F46A41A03971AD32E59A2668AAD2E9798306800CBEFA0408ED528E58B1D5F312C4EAE7F70E7DACDEF0B2234F5B96BAC97817011DBD8822006B1FE5654B5A3E795977242C25F56CF3AD61231ED88E390B4A0199A5D06F0B3B9D9E918BF66BF376431F62D40721805945924938D8C47374EBE697FEAB839E6C26B6F3984FCD149C173E2FD85D9A45E5350C554DDA978EFE22C81B8978B651EE8775ED85D688ABC798E7D42D256CB36C09788D387699CB44970AC4A056147BE9BF5480A952724EE13368BDABE812EC8B16E4E168013F0DFD1747267DE2B19EE490EEB8DD4793A00C7ED8F779B90F2C004B30A607AC0DCAE6BE6D1DD6DBF2DBBBF0BCB5394904FC7C4351BDE6125115BA1FAAB76ADFD0A4112D962117C6C304B8B552A9DCAD1B9F7EA9595DC1A432BA8534C61DC7869EDABB46F99D5FBF13B257CA2803C73617CC32A3D39C2B8E5523326EE49755B3B49DB11471925D71C66F4E92E9C4B6832B236539DD886835253B9681729F493D304518EAEAF837CFAEA9798A6D4F8736F06FF37586D190783763A660465DF397883616A5CD1134AA8B63385DA8BDE87435F6EF79F069CD676EB7D141B1FE4D510DDE942F503F01BAD2FE5FE3DFA8483E8870E2A0C3F45E6E8B49E0BC7B1F473E5C382085AAA61F663B3A0F815B485FFDF9E76D18BAA643293A736EC6D8487D76F72BA9D210CE2C9091063295671B364CAC70A6B1C7B859F28075A8E4062BBCA72EEC1E3990F011251ADB36B92F5E140F6EB7034AECB10A865C774F2B297F088780C6C56BBD5EE56020ABB2BA1FE7B253FB799DE90261AB0B87306BAE0877053AA5BD6289B076914EAA987D631E5D11DC67E85B81F593D96CB6D99E62E5EFB5492BDBA4555540BD64DD1F343352ABA273395E0155B37EF2172C164ECFD2E4CF886C22D49754A7421FE4A12689AB6F28718611F2A48AD1CBC0117D2A668C9B2F543DEFE73595F9B2770108DD2619CFAEB0C40E65D65784748F5A5BA244836473A42F64E71BFD2F4196CD5447B7CF1C8A4600E8CDAF51005FFF2C0B43458966D79CE039E7AB1A1F485887909ED242BDCDFD4A26C294506478E16E71E7145F109A48E573CE658F62EFB6F667B486427E7C92348647DFB1EB23CA6E47B57D8F69126F89F2EFABD876236759414E775F6BB98AEC332B0DB289DD5B2B7BA3DBBCA2825B0303B44C3B90BA6D029A5B77556610AED32FF21D13BF38667CB31571F5FD2AE90DCE953D8DAD9C16A3EC34F0C3085A44C0213DF11539EFB80A013C31C6D72CF62ABCA1BE594F7D9A47833A863FCF581014A83E73D7E66178C0A007AA21B2314ED0B6E16F4149145C51AD8CBB6897A6E94EC091D9B8A11B4436213E7EA0D34D34953ACF4972A6E08B137F0A1168324BCB9D9BD4F03FE0CAEA5588C8C0A93722FA4A9673EA0B3175C370DCC23C287276DA6D050DE89B45A4BF2F0056B790634A77376EF02ED351CD5D33C54FF150DAEBFCE8D42EF3CCFC9021F83DA1186166FF2D526230D7EFB28958D66E2DE41B5D43C3DC035025B0D1A7C8627B92845F0E388ED29900075E84A6E20D9F7CE04688529F9452BBDFB68C912B0FECC2EC9C9283D65E22BC658FA3DEB3EBF0B5679E -MD = 9E49FE075B54F3C9C94362755645D90679CBCAF7ED7F7501D0C2937B -Len = 17231 -Msg = 3BA273212FDB12F8EF53C136F7147E291D7206D81F0C6FD34C0D41E53D1332CF2C5B709390130BCED134336126297C5FCE73B496B269DBE15BE6A86C1CA58D6EF07D966DEA3F6946F46EC507786B4DDCB274AEB74BAF2CD78826C41F1B3C0E348C9AA93580ACD12E11CD94325F2B3158ED7C68061AEC4D3DC3749AB281269E9B66E13445BE81B363BF4FB7A718F07CD7A259B547F65BBA732B12566CAD978827252A1B2193E17357DEF4E6774F21A149EE31A07686937B8B39F01EFA41CA65FCFFE275344868A66F448B6B8CA37E6819E66E6D030BF303E958376EF8E134D237B85E12ABC6B7E1AC7C383193DB9863C33E13A8E5E0296C83AB030861ABF94532CE7591A492402B75467E9F58E2EE5CFF97F71DBDC9282C4F3C6A02EDE55B748EF7A07E6091735643D52DBAE6AC203EEDEB5CE5804E11F746B6C83DC6DE7A9280D947714A668A2F17ADC4240E0CA3424624BF845239BBC1B7C6BE6441612CEF70ED209F3E492253E359FCB7101822471C33878F4E85B9BDE284A8AA628816F082B1341B80CDC4054660ACEF2EA7ECD60A04AD0487F8C48448023AD80FE72F444554C8179331A54DD3FD8E14613BEB2C0784277A73D747952C110E817A70316D34EE404F5F9DE98CFE9B3F162521DCC6F2A08AB070F1D586D0445BA2C4AFB25AFAAB12FA720FEFDE8A47E9F456C757243A0DC7D58C0A6DCFF6F8230D22131956AEE974EC576F0BDEF1504B5F2023B2AB8B53346ABC8E34E1FF3124F5442DBC9DC338338C5C36CB087032F5489607B9FC903781A500731283B5F4E910CCB833219BEBCCF9190C22533BFB64424EF5FF466B21B6AC1AC5AECDF8F5AC3FA76C57F09E7A13FB2C886640597AA80D53321D1610083D2D06329AAF43D98A6BF7522E695E1A22A38ABD1BB6505E3F4CC89B7D6ABA1B906D56D8464D199992ED1ADC709C10E979468A220F6DFD7A51DFF51C943BCA8C4B733B234DB0DFF554F3A75CB45482A9BD0F135A02FEB3FCF8308DF924B19869422E0CE36A8D02E7871535394D068B1394F48BCBE7265D1A755902510E4EB927EC29C766D98F5E45D3177BAC05526F71CE3C0883B426739AB90C2FB4EBA069D3E5075F8B3DE356F637B68B795D1E78E931DDBB636E3A28C3E886CD9621ECAC493387DD9F3284A9F55F5A4FC6E0E9EC27624113387951F387D8027E4F70801E60CA318354E2705586084D5AF9CD1F407420F5C11369CE181DB25F00B0597A82D5EC12D31B1B152AC517DCF8178CDC59183048D02D01BE78B4A7920E1B39D9F005C61C3EB7C3A12CECE9C979844310DD4610E12E8822F8AA2F01A11026B21A472187B8807ABC9010F5FC9953DEB0C96BF16691666F436B381354554F7D5C6799522DA15979142A2017ACD58BC37C7E3FC2159CE27FE0455AFC58CB42E3EEAEB7F59CE62B6A7A666EFD0E31848CF1B4C7073A8C4EB4A9DF9C9BD46BA2B7D46B4D6A78A1785170CA318CD1CFEA713AFAF54495A75F34B9A1BD7DF0B0B83FA0990F5DF816C4FFCB03742089E078345C2BFDA4811EABA807EE939B08035BB0BB47F8A83DD44AC7FC4A560A18F26766F56D8A3C90F4AEE5F3E6E325DE9156739BFCF8F2A0C41075BE08D6AFF05CB6E8F404C0957808924DA3AF79879DDF7E2DB09A87AA5E521151139580A16CEE5E84D0155024F39512794E1E0CF4F6C0A66FA9CEFC84CC06B58452AA4FCB808BE9019656E68E6F2BFF3EA920C18A2A61E52DF66B6263F6C7BCDB5296DE3897117AD7AC47F0EB42D401EB6D831B71A37FA60CA49E8D48A57AFC0C65ABA07A7096B5ED2EB6510245621592445D3AB2CE91AD254496946C0C14070FCCDC33449678B57C47BCFB8A70C0ACAEB44A7A5D4B5AFDBDE6FAC71C2AAEA474730F68CE4F0CFC5DEB0CA4ABEA069805EA9EDE5ACE9C9037A2A64C9F58BC324277A8868570EB460A1BFBE917CE6A935725D851FD747A9C1E024CFD5A1DE4BF7DDA932B8F16CF9C7B6A133735288CF8AD03CF3711AD1FB7636ADB53CD9CFDCCC5083A800D100775771477AED0519EDE7B7E0C7229A4EDEFF46B68718596AB5A6768A44992ADD84B7B0FEC1FCF77F316D77489673BC5A83208DAE2C1B01C42FF2F1CB1F5D82CA789393B71313AD83551C486722FDB461ED589B589760A3552D9C36018F0A0B63C04106ADF7821A470EEE8DAD1AC5190FAB9C1BB4FC732CF1E4940B23929804AA610187FF45FC1443FC18F3090D8E0CDBA8EF9FE292E0090EDC6D5F0DF9595B278CE9E444FEE53E532F2C7BD994A64A865A45F8D8F11DD219899E3EE286F1258EE4F9BA7DF8A998B49B20D7F7671E87B8A2FE0BD33584B1398C41485AB27B36757E7A571D29B4985DBD46B48D46596BD7F1B518D1BE375075A50BC5A66FB7EE35907BAD6E8B72C8BAEE5D3AF1130E69A214BE9C542E94C1EA98702FAF51694F5121C6AF78F9BF8332E940EB25C4E6BB69E3A6D06B6EEF06F986DC36F08E2464FA8FE7F306308D6EA9A963742E6BC12CE3106E0DAF96C191DCD89270053026554157A14307258A9673A1A744A50865A5A06BF4A7270B497694D2D790D3094D7C438F69199C0344D068873EF21BD62C8821E063330FA0831BABA7E0B9822AA88CBDB7FC59866977D5A1A45EB2F13F48D34CD9CBCC6BFCA2F39DD99C489FA550C676750ABC1A66630D99E6380371A3A5BD754C1161340FA4CBDC5ABE0AA4EE7EC6D07FA5BCD2E924D26B229BAAA545B6CC5F4478F9E8D2E4D7E30FDDB4283852E63BB85056835CF7AD51C178971AA665378077558B25EC05F7ADE1F0EDA517AC39B2B25F3E06559D105418FCC683E783AEAA12AD0103F69D1ACEAE1AF3C8CABAAAB0E3B06A2FF6919CDFAD9C9A3C76A982C03109A8DEA0EED015EE5E2FA1646C772B51D13079209DD6BC9AE08807FC4BF9C140C825FE64DEC458C8761DB216E172CFCE5659C99818884F9954D8EBFE82968A90D47671110E97FB1FF2FBEBC15D1539C0DC7F54B23A0BEF2DFF959BF58931CEC99F9E4E0A075689B83E8CA5AE5AC252C1F1920CE1236341365120D71BBEEC6 -MD = 0890D27C9EDE121AAF4D6FDF19C60C0ABC8DC3D1586217AAEEB95C0F -Len = 17294 -Msg = DAA8F6B2F35F19CDF058EB47D3913DA706BFFA58AD129A16992CF890ADFC3A30A03D44BBD96FF2F6DECE7DFFCA385F6A6F38AB257163A02228052403701529127EA3CDE8FB855ACF641A19CC8E9FF35CA94DA3BCB238BA3545641F7F89163204D3AC00EE157FDEA25742601E8BB747BA3F11A0DBFDF8269DCDB6202414080A7587BA7F6C5E5C0926278ABE486CD0757DD9B52BF0B2F31FA4274B989A9A553826D83C534C6499515E26F2838F024A8B4EBD9F9A3003A5A1F4B2F4E75F0AE85C9DF56DF7CB17785744F0EA8DEAE8C76F87618E29CC309909ACE6FB8559BFFEB8D1F99FD11CE02B2528F0903629DB6453F916B3A557373A8E3378F89300EBA9980E780AF9B50E95AEC175FD81F3F0432DB0FC06574DF8A5E06F596638771212E00F8C5B9B27D4B19A6210913592710CF328DBBDA34EF028F5112C5560671B6A52783CE613E177ED305291BFFDA131CC17D7A037F14FA2F6B2A2AD666CD0B3D33492B6ECB7D7B7BAB89665B30AC6887176406D411322D9BBA697A22983DF3D460A110B98032BB8D1F3B80F77D751B02BB94C525C193D3007ECA957E0EC3E38251DE6F57837B2C286479849BA60B6DA0263F6FEA0CAEEE3F9A7FDD99F1BBD981491A581FA36ED40F0BA0C783EB54B3EC8A88D2C091BAFD1ADF60E40DD06660DB516BD8A05EFB95B29ACD33B58AD649926F7C1B9D6A382060C7A4FC7C4E29BFE660F3215C081A6DA424E6FF17DC52C27A4743056C044F6658F798E14DDE19473DFF218DF5B7431A3BEA7615043D8882A907C09E76838799D2D9EA6A3D7D0CC843B19F937A29D7F3AF4884889FA84AD77A1448C3F8C10CF6D17016D76BB733D6725D35FD5623B53E85505675A96EB405DE9E282605F490B6B3D32D4EC0F012E079374DF1202EB8E025279437BF93C2C8F6EA48E7ED4E1F948937D5D3627BFC86D8CB6AB2388DB6AE8F4E176BE940814452103F62307F7222970CA0B396A7C501AE412133B3BB7163768EE62112BF24DC607E8B6C5E3C96817DDC5FB8769160D830B3D6ECF58ADE47A43D96AC6D84A99D72F3D48261839F677B42F3CE8BFAA4209FCCC9D3201F783A438D2AE725E613CE00490EAE50203DB63ED7F9E1F35204F15929CC61622A543BDFEB36758B2EE4AA0794E491A1E1DC2621B8BDAD917FDAAEC61C71A355CD4C8116A9070BAAC4B494D6FD2C6774D92B7E4280335764502E01ACEF887C6109DA8DBC23DCD469BEA4223EA937DD351756B0ADE5FF5D42457D655CE3602B1FE2783B649E95F64898EF1EB48F89E9A3D4020FA115E26090E8F9BB0823AB1CC849F6ACBA13F3CE1FA8E13540B08EDB3DED4CF1D7457AA3F2D5CD94DAB948E0FC9D5C9F95C450277A5DB89BE4AC80BCFEB86F6DBC2A6A3BDA505F042599C7BB562E4B8532367104936B9EEDBFD4FF76E90C76739E9C330C1D13B48DC83F9CB3310E7C5577913445B30BD66F52010AB2BCBBDEE81875AA21ACC84C437FC90D8CE5F86B9AABC4A59FE100E33031D5443B3E846797DCE015D70AF8933DEF6B867A15B82F2F6B765156CA38E63628A46DED8D58493991445AF87B50F89A99E4F208CBD9C42230F164D5EBD34F9C82C9F6DF020DEA21BB0F4D0C482C4EA74C987732940F6435CCA0349EAF4BD2794A099B2449EF47432A7BF012CF142126B38C9B743C7EAB820576A54FBEE635543C6CAA30392D8A78732CFE83EDC622E042BFE4B82B0A3CAC1304DE1310B6CE1242B30EF18981BA8D38015D122BFD1E6D98AF4091065B044B9DF42FBCCF33C24BF0B8D013256BBEE670608196C54A6347E9210DDC0B1D0FAFCC16C91FF81B215D06470674EFF864AD1AADD99DA249409B4530237B35B44B2F2A5FFE610776246004834035A49C14FCB21DD640B34AE459E49DE722D11394051522D3386265C203DB5F082788229A9E22671BB73AD4EE50F39A6B7DE0A86DC6EEDF342CB645B73A4D02645F4F5894D936EABA267AB72EAE8E6CE3DF0C2FD1C1905658DE01858BD04C17621D87182056A719DE549155D7D0261EF7F6835DC043CDDB04971993BA874F20D91CC5DDC15E1D8601B020F2E24558B6AD880143FA24800FE9B3539D50406EB6A0BC0D3343138D7033C6BFA9B39D1DDC9E791F1AF237E6DFB28E20F92B47CB2A004A561810196B9E98632AEA151D046E2BC8907FB4A6CFEC009B4534D8E5E1AF2CD882E71016187B06F90359D7F52CB6D41771495726ED962E71219AA248A64D0C20933EC991A1E8789A369A296B9692D407989E4D1C42D778322B39DA64ED2BB7639DB6AFDD9E844027869017FF766377F984FEAC534F9BB2D09EF9EA76E612939DECAFB4B39417B46B40292C7F0648E4BDBD14EA07778C707775B32F6BC72AB7135055148D57F242E5378812EDD4AF0C71C831F7717D953F6D08C10F533E928AF109C472E8CC1F8797BDA8752267E638F32C1EBBADC8315EB6B5A1ACE06112CD13667DAB112224186827B3DE9AF333A4CB678329C13578E839BBCF57D1CD3F4BE96528344452980D3CE2C9CDBC3FE262A62AD297F4EB42FDD1D7D9F7481BC7EF8C1C90BEA675931A91E7D6B827B014938D874550BB2349DBD2182CF2086FC10FEE7CA2E30CED039ABC2D3E792EC20ECE6AE0390D7D50CE3738CCB1DD4B0659F42B152D77D2A0B6BF17C697D1F2BA709FD4FC11E964FF4289E5BC160C0BAFC394C80501F6E57578D17DEE34B1BD9339B187E082F957575ED069C29AF7D6868CE46DCD4A53A2D12A6DE0989E692184A81CC033056C671298BED018B02DEC7A26DAEEBF918F8180E682F48532982568141194859AAD742B5869CAA0B93789F764AF96EB13817E822D022B0B270D545BE3DFD13DBC5EDD5D23FE71404051D838E38BBEFAA727DCBAEFF6C67A7C05FB6EB14D9BE47629F5E878BEC1820585B7DFB1A66F1FA5BBD6255A0BD49EEDBD6CD54922B38EFA34235CFBFEF4DEAAE7E1A60D9E2B0366CE34C4D0FEED20FFC3E7FEBDAE193FE94158DB842FCF1C6543CC39C9F321BBE1451BB94D092445793BFC4A20ED7EBA1042494813589F0CAD5E1856C45CAB664 -MD = 421E9CBBFFC64E837A86AD50B73AB54C4A3E2D90CF62D9685C04CCF7 -Len = 17357 -Msg = 4335FC7ABE83B6473F445A0EF2B9A5A4197A37D0AA0D007E3A3FDBD6879BF7B3C82C895893DA2B6D01230128B189FF718E26285F7B4B8D37332632B0BF9D681DB701DF665E729853FA1F08AE06E8BD53E779009AA478036BE2B5759B4B7A96574B00927F594EB893AA243C50C69A6FAFB514B1BEDEFAEEB9068B087BD06E221AB63A777E1AB512FB1C99B6826E426F59B15E26DC2F2BBA08C4212E70A894CA50FD9B870F3CAE21039EA75006648B8319133FE09A6041DFE7FFA53582E2EE4BE80BA7EA991CB02DD7B3E35E48EB3E5EC1F0542BC753A0D7CB667D2B7CA8AE41F10E58B848F6AB85E4890AB3C60427F9F4A4296E58C0A9FF6953A6C239073C24BC844D9C01F0A10BFBB36CA06265315EFE4A5F37082B0FC73FF76B1484DA768B4A6FFB9223FFEB640D0A0C46F08A66677A98485E65B9424902FA88A13D02397C124B538DACDF175432EB8D861BE93172E2E513690C8F2DC0504577AA32611757CC1DF31347273F332537EE36DA76F7B055D4B4CB929275BA03669C29DD5115DB512EBE021D42666DE61CD2AEAB9B235511E8B422B6E08B09CAA23D48680B328548FE4FAC33DAB4C7A9EE2B67D1BF9EF89AD88473849651871AB22DA5F1D38FAF099719B82651D68430452AF827B6CF01AFA95C699212DCC29B611DB215FDE736D80D8A5A96BB483394DA7C4F087D443F64363029FA4A1D371AE783DCEEE9982C6DCCBB5F24BEF9EDB1FB87B0708B3EB2B23CB993D041B5FC245081E1AA42A2F025CEF839D1C65DE2C5225CD894774CBFDE1DEA3DA586902AA62A99C833859121CDFF3B98C0C543D0B06F3D404F48510534D72B0261AFDDF89A4983CFC6B0CEDE10669365A254154AB71E24C06F0F311D579EB1C5B6E66E48D05D4F1DBDE0C273AECCE71882FE117D49889E88119BEAAB178DC8B08955504A591A1AF3E78F63D86ADBA718C118690BB7636D3DED208EF5BB5F420FA570E60EB0A3A931E1DE9813D2FC0C7D03C9F585503531C9AB9B17C725D24655062B639EB170887AEAC98A317EE6BC1902B86D5389CD0C2EFF7B7787E763E349A24AF9AA798C03F606EDAC0B555858153A2F2BE0047DE5B7B723224BCF67DB9D7876CD7B7F61212FAF267840482A7649D285723974C4FD56EE2E683918A252B4C3D2AFFCBEC8BCC0833ADE5BC6998CF7A57A46C8A25E4B269C4473162ECCF5884E845D95AFB4DA7F5AB10E5DFF8EF1C461A42F1AD06F371CC66A4AC1F5555D5826A33DD0F4E68A122C5A34B185341A241A64E5AA5BBAE0FE6C186A82A241D7B90412FB5603766C409BB1958FAA5895FCCD10E12387C086534D01FBB3292B8C192E2CA01B080D11217BE2E2557EDE18ECFD9BD9A457A0E70684865AEE8817C6FEDDB17311A67D61A5D76AE40AE030A5311D0C05C88670BB7D42F6D15A944FAD82AFD68BD12F1416E883A41AD02C10D025E265A9D0EAD703220C6EA953EB93931AC79E52297BECE65D2B68C2F65DE579B888A918A8E4740DE80EB62D658878A23DFCCCC5CE246056A35D4F4C7DB46289DEFD78FFC3ABFFEFB8C680160A6636B60058FD70FAA78AB8537BB91F867AAEC832FFB0D6CFBA5F735F46EC8ACDAFF6DAEA107A6677D7315693BAF7D28B34893B0302EFD5BC626135DC78AC710D110FBCF969C24336C3F92A2C2EEC0D5683619ACB7C40FE5F087081E0A909269520B9AA48A30F618126B9EE6AC275B914C4396E91B0D2B20E8B73D1B7973146755515AB6EAE3360D01D3FA8A271544316D4A237C1C412319707824B8820E70FD1ACAA2911B364A5804D6524E9A1BCD8DF0EAB2A3386628797374291004D021D38475C96141402E5DCDB8CFDA1BEFFEFC25E8B6092C34E81A645271CA41F0811AE68B60095B61B95B87434ABDFD36FCEC70B0EAEB547165F9A2B025E76BFAB1DC89067DBC13CE1E607E2A5E62929AC71D1E364C0AF2919FA549FE211094285FCFC16FAE91476365A72939BBAB99091EC5394948D4C4F94610AE066B5B2FEF67E9DD684B1C32F83C02B4694F70DAD1C6B033081FD78E1D59620316A5FEC20D5AD3F675B99446E5DAC2F05C7173DB3CC657D53607218731E02414C1A92126F937D89246B58E37B32CAFB2017A3C88019BBCBFA06F1A4F1015F3EBB0E59091DE10738CF855ACFF31D5CCF735A13A2B8BA3D797BD5815E4D698F8DCC57D5E3C12DC11F53022113F6554420106515F3919751B0FEC81328EEB30004ADD7196BFAC766C06BECF2F07EF7A32B1373E2BDC457B14981D6CB176D193FDB401C47152E6E518F18415B15EDCDAFAC7439F448BEE69383E83F0CB18191E8F457EB0C6C3480E45CDB624C391233F3708007F753E850228F8E71448B4067D2CAE5DF73343DE81154BC48D7B784B9529184F144A1F368BF02DAE7AA7303B27E9B47CDE836901F243383622B8456D7C1568FEB5675B9FF9543D11901E20C157F61BF37063D520E4DC9CBBEDAE1EA04BEF3498BF88229D984A93FA75C8C48AECE107385533C66C6839162014C8AB011DB6CFE971F34EC05730ABA0FD1A74141879F3786315D15F935402DF469663C74A4D8393249D35B09ED877EF0868CDFC63F7908A40F21E4C929F86C0F5E4C8BE19954502DFFC701903E096A9DE402F6732F79860207CBAE5A3A40C8C50C2534BDC681EE631290A3DFE1E64209FBA15D427C08A00BDBE6432852636762F2079BA067CEDC6A14372E50F687684AD4538E5C63AC4C5ABC98F0A6945630647F32C5C20E697932D74B77C17A0C7EE0C40BCC4947CFF0F9332D96CF1E20E53516E34AB167732D0BA1EB101FB6BF5A02E043D9FDBFF4106F113F707D9007D7C404F5E25D6027B44CAC9CFA15099A6D38F45190B5777CF06C7862B241A319B7015B4551B6F471F41280ED990F94E359A1620C4A8BFBABC47B166E00079823C0E78A855FCDA2C0677B5E365FEEA620D01714906E3432BF38CDD2C60048B4E9EC639F9F17EED771A5B66B86A53BB6FABB60D6C772F5C122E524C3C3BF8EFCF5779FFC30C35B987C5BA7DA48B4237AD4541F033193D455330CCC6A3213D3BE265BC9FD4ACEB119984B3510 -MD = 0E8D438284C476D175436147483CB966CEB5B5DB11166EA80666FB2D -Len = 17420 -Msg = 869E1F6607926072E536903ECD7BD44436096FBE8A7BF6B921B87D78C208D2D151706F5578454A17969A803CF0D6138169AD8D506A68806AA08C568DD9048A8899989ED5F31DA06B614E4D49A246E3412C4779B3D7F21883CC7C6B1B63DEF09B701FABA314D53B6E20DFCDD0CF3679608B74F2012DAEA1FB2EB1A8777B13D555CBB78822DBF0A49A0FB3A4323F159EFBC08B584D5799EACBBFE44F4E99CCA84FFCA7D6A80568E0C5FB000C9A6687BE54590FC8448529DD2A86F252DAE44AF87527A7FB613E4FB346BEF17B540DC668840B45011770634E3F59125542A9C7F3F2FE6C37E4315CD016C2E6F0760AF3343FB9376A780601788F5AA6CE584EFAFBA69292D02F0201CA1AEEC9588E3815A37FB0B9E98F184E4FC39F7AEEA1FFA88038351AF4E5EDF2E26AB6E8DDE80E0EAFACA00E9D0CC69B487869E30ADC81FAD09DC1DA36DC9AD00AA4C8D8CAF27D756FED32B0194BB9BD5D95A36A8F48C1F529FB40DC56091317BE34D4AD40A7D9AF18E7EECA5265262E9F7F610A9775229323F1DE7793D208B9CE904A4FCA7BC07DDD31F6F0624ECD2EC2CAC88A15FF569F2F21A43BDF309272DD8FE0EB2D8FE262028BA96D139C26B72125C6A4040C7AE2A0CAEC377A3E453BF8FF1872162FEFB589B71C505552F08EBCBB26459AEC8F849682CC2F6EB1BFD0F882467D08C74FBF8FF0C375459B12323376B3F408CA2FEE0B2E224AC96D1801A2C51EAFA432A0FC67E4B2F25ACFB0068851965F6A80D616D412AA736AF7A7CD7B9C04E063AEC6C53EB6EC14EF11DC086389F77CB9200FDB0A91A3598393F0992052ADC28057E7107E001459D062CD96F8DAF2451CECBCF3AF1CCB57F60F58D1CD1978EE320B4A93356544408DCA2FAF3986AD64430B8D330668B18073F751F5919C0C997842B7EB132606BC654786DEF685CB1C805710D2946A0D8E1312720E8ACD8E805A81C3A75CCF6484EE28AA1786E3256355F51DD70EFD2A525D1AF2C79BCBE5BD15B166AE5EC3F7DFAF8748BC7E21363F598A07AA68B929C3B4962B3B282F33C97FF00278E7CE097F01C50FFA8B8F7DBE8FEDD74CE7DB78D29ED90AD8C9FA40C8B2EE70537AAB13ECF7517F43C4E82B168A63A70F20A07ACF681CDA910125A15FBA9A281319FAE5E297A181A4715C096EC5979761DDEB7C6E4E2067C69DF9FD96173CF45CA3C29BA662FE3296A41A41A7AEF12BC5430E65F19003BF6E6D5B007590A7314DC33969CD0431A46FBAC224F839615565A0AF5147C7614D9F3ACE3E8B7FB87114FAF377063E72E3B991617CEC27286D0C5C9278BBB0617F580907B58081D4AB9F0321CF52E2E27D3170A7CB259B4E6B09716B97184FDA11D3A582E62A6BB5FADB1BA713F6298E8E38C47188CD71A3098469B846F59CB23EFF9E7730CC09A813CC02F8F0A51317E78F51D186DC71EDB5D2621DC6164BB7A0B48FBA2D7BF28EBDDA6D8F82621B168E8E762A6A2E1495831BEE92B3A69D571A244D2E0ED3498D5690C4528D5B72665DBBCDB75650845CE0323FCCB09BA26CF1D9A5B869AA6A7123E62E556589503B9953B692B8838969AFF513C4B93C87C4705657056F1518D1F29B8C788B277E765F523E44642E44402405E3F27622632A1D8E022F723DD44F3532C3C9EFFAA8AE345179A88B03397507F302A7AD13C0B9470C29B88758B860DB73E4BE25D543A8C104ABEBFA266453A3EAE764D72986F9C14B8B4090CC92115213B13DB6D8CFFCE35039FAFFF3EA71E17B3E3A42DF166791190451CFCC4A3910C20843B8B02075B25757F3F71F1CEEB5AF2B3C51A1D324EA8682C6D77132779CB6F81792EB090FE4253622460B5C437822953EFAA062976D222933856AB5010DD7EB55E95E970924592BE43A00780A218C1A3E05A91C4574734ACA09CB761D9445684D9112879B8FA4F56587E3EAA7DE67078502415CB39B4A3FAE85DFC337F9122EE1BCEB962CE4FE4C826C2791FE5DF0B811836CE1D21F0BCD15F1D685C61A27579305162896EFCEF1C58F84A8E127563F95B91165623A8DFC0DDE4A2130380EE4C6A80AB33861A4A751A4FA9D6C5BDC26BD29E9867CA356B005D32F217D85BC936F17571C723F6AF4EEFE6FEE6B766DEE05240DCF9F10A1D5C4A902AF1902D50EA4A6218534EF930D76BE15C91B6B9152BFCDF44196E666D90B7DE9157088086F20B1BD76322030152B9A71EC687FF168C98C8A9FEE4C5E03D27FF7708D27BB2DF91457ED0636C665D88CB6A36789D97ED0293229610461E85778759D633E51DF6B65D281F26D4B7754BA5EE04977998A85C6684CD2A4283F13EC542046A3677E1B2A81E9FC41D672BFB2F90F1EA30D0FAC0BFFBA1C82C4FFD158BB3EA4ABD345B54C8AD874B4D94DE53A23FA6E20F4C313AB36BD14E144AF2AF030F5AC42DAC317226C9F0213FB0D13770A22FCC5A6EA55DCD23F7F479F1D348284E57470A696F85C5915AFFDBB04FE5E12848E766874C0B169CAA4288536D945E45C78F0E0BDE0B67869EB6F8A025D6DE79F0AD3E7F63E6BF46F476F62EC01F45BB6E44B21EC62DFAC7876ECD057DC1EEF5B90B796DA68438173017F585F3D75451641B0234D1D35062D11253802C7F3F2C1C99492A3B9A3DABE37AD2F15DE31F7EEE9B0E034B7B94DE7390920B0B584BF15F6572846B2564B10F93F516A86D49F2710AA93CC87A8843ADADF341C4094FDE79AD3AB04D4204CC0E837D2455FCAE6B45725B0F9D2EE0E527664FDF252526EA3C89D0CC28C9078C015FAEADE2B526BEAE52859A615C4D864DD1870830223D0754EBADEBCB54D0D814A600E0765A7D11B514519089102CF86F52CE7B9211867D1B83D6C5ACF6FD5E4167F94FDE6F27681A6BE256FCC8D52B032B97A9F253B701D9EE17422439102E4793D6E9FB59659CFF4463960BB478666155ECFC63F9CF8562125299884AC539B45EE8976C00025E4063A567451CCB0274E9CE29E2DEE3BF5300C2457791E79471B4039D9D988ABE9C5429278E98739B9754C5B27CECA536B2AE5C069710A5226210EB71430CF60961E4E2300C38F7DDA2DEC57C674F1C79C535D598D1A5CB0 -MD = F11833741BED0F71D9FBE23566D65EBE980998749184D1594048BA00 -Len = 17483 -Msg = 5997F8C3950F775AF5C6549545AC4F53BFA07F24A65228B523BB44FE5CA98C1271761FE77AE6AB81875D392927C4635F3B3CE6808A28FAB47E8A1EB79C60422B59C9344F459E997954AC24EEF5A92E3563615CF0F31C4C40FC1B84718BC169BFD52091A0FF6CF50409977993A917DAA0F0375DB45F53CED6C811492DC59A241F624DF85EE359A833A0000150637B0ABDC8555C441B447B61BF5F72AB36EB65DA1E5F4A1DD173CBA0AAC6AF04D2A3D4919A95E40B0400E656EB92450F5070F88F1EC5480F7D52D03665CEA357A94C3152502470B3BA69215E9598BB662D46DFBB8A612D476C54D7C816F11C513CE351B4799312D849618A9F2D0709E6A4E5DF16503DE16B1439B6E2B0D03DE809AEC58F6EE50926659E014A71FB8C0F528B963A7536C778B3BBA6B489C47B762667C1AC123390D53B78CACA178DF948235797F9BD5D5FC799CC9B7873174C7F4B4CE808CB906299A1ECD28564FF67515E7FF1E7E0716C735C2391BE4C8E0056E2DB0A6EB9424FD52D8215CA332CCF8DFE152C7B3A71761A9DE42DC19BBAA4675BD332A6CB62C7E2F6FC7798F4CF1BDB09CAB097764F52ED90C40682DC3A18D1B5A9BC8708CB66BAB4C9C25BE70BC8A67E4EE38A9315CCC906B116D5640548DE87D9C6D2DE40EF5A50CA9F3695B1B663DA7C573BFEA2BE2162D3E05B5F68929B71068C4848DD05C11F607418AD83EC6817BC14965DE63A9D170C1096625BC94781F1EF679937790D25754927C90CAD878EE66DCDCBB971415EF581A47B9385668C9D0218FCE52C8036942A46E53CB43218193E421B9CFC61081ECFBBB3F07A1CF85BAEB560B0D14D47F10F7018F5DF28776FAF284B5CAAF65B7D7842F6AE73D6C2BD9D3169AEBA9E8E4FFB7FFC43B5431A8415612A3AB3A8A8E497240FD4797B1BCBC0F2ECAF483D4DDFBDC295A8B480CCFBF8AD1FA4F30A0F3CDE3BB2C4953C95C5D8FDA3C2CC4677E6A0AA4F3BE2A97D990987632BF9EDFF70FA84B927B520585E5F4633C123A53EFD9579779FE0A0CEE81EB06D4D43496EA2FE803D7DBD25A9BC2C9CF0AD22864D9B8D19728BF5819CFF1522F6FFF167838CBABC1962D7C257E35FDBD538057FE4A8E7592274984329E6F22BA67FFE47357E090FB29AB7ED61359F2A18699044449E9170143E2920AB9FD4C0BA620E6D3D17AE6FEB1B465237152D135665D182CA024F276FA9AFA2C6279FF64643AE29481FBA34F5D3CFF8B64B580AC2B6CB8CA2DBAFB69A7F64F2FA87FD21AC3C8FAF1C589B6CC3D24D188A6B5A6D24BDF5DDAEAFBA6485440980381CB835F24B6D6CC087ED04D626442026D0818456A3CE5B8D25BB639B9F9C637FCA504CEC082B2290E58D9C5890BE4597C68D2E18286EF91D7F6BA5EEE29DB4C616F5E9FBE946219B1D3D185EA0D5279A4F4F361C4FBFDEB4DF9227D194D7B0EBE080782E37738C10DD0557A1B2E7B028D7CBB3EE7358299E35E9AECA70EA70CA6C7BD1D52BB42BCADFE68EE268FE6BD7A829FB7AC82A188CAD2B8EB8A04BD1FA17420B0994C284905FBEB43E7702460D87ED4181ED79438C920EFDEA34BF862108963B9C6D9ADA3F4FE770FDCE3D84255ACB0FCDC15F5137A1436810797A5C15670FCC084307F884B7F7682F2ADE6BAAA066A1147C92BCDDCC9BDF23FA04BFA1C04393B169D220A7E7A666F17FF1E81B5024B474E058ED4B645F3D80A6FD7D888A34D3F28001136EB1627B51C136C5F1E2870F19CE8659438467E9FD5A3E3D81D0BC8597D90A58590B7A9D24750A93B06DFF913DAF75F83BDAF07CA58458F17F1EDCB8D8CF1C1FE2B24AB64E8E98B6A4F47C31C912F38458C96FCCB42B1F3A4C65B5422E37522306C4F9DF0BC7095BD1F24F2B410C5ABFBFA9A1003829BF4E44406C9087C60B85A752726CBBD83903FACFC9EAA784A51D82593C7D6D30C7112FED705B9713C187275B17CCE374F7EF48DFD3D1A020E6881538EC76B4EC7BC64F2A35563B13774CCDFBCED344105B093F072AD4D58F45C85149E0FA3F7B487F2A43D070172F09E999D4BC11B4899CE1225E125E4333F76F2CF0D05D821B3F235BD3C510BE3F89F8DDE31CC1F75B186BC57C001D4B6AB6DCDE82ED3C9A7FC0BA3C49092D803CD5237F4D66E289F95F6A336DC37CA519D0612E050F39FDF58A4A3BB51C62B78D92D57D4C56F7592A1699181758C9F96FF8A0C455DA4587BA697BEDC4C4B816E31590252F2B1398E896BCFB882C25D6CD932924521476295B0C73C9A48CB03C8C91D726C510BBD4D67BC54D6E0E9C857B2FFF314B37370C253ED858851605B78D6D93265771D0408323C56C8F1BF5936F4CAC0ED57E925030DD065E85102E7D00DCF2EAEA7D27A390FC559B070A27D7E53F48D75F20C40C24D17411F0F2959C2321B9886B65BA4F6F04752AFFBEF46A76774BB002BB4232608BC82F1D3B4D2682616B2317C6F458B2D8C446769DF8BBB2702ABCBC832A903CC59F43DC6C514D5BE31D67D36DA46050029B7A277829EE9315B643D15477C273C4E4785FF1D2567D9E613935C3DCDEBE7C76E78A561099B221BE3423C54668BA7C8F7FBFC396BD68D17486AAE14D9EA18B47C88F0C62D1C0DBD18C8D4F7E7C4D7E3D6D49D8C2DB765A1EBB2F5D2C08807D43A7C8F39B2A07E744D7A5F8ECAD140BF1598814A2F36700FE240816B0CF9AE44FB717D8423E15AE81A1F61CFFA7C36E0B9E89CAF14E8838660085C53124C20014509E762CD4A261872C1A04B93BD33EE21E62A9A15A8BAA918B417DD8B009E8C0E0C752D67B1747E48EEBC40AD5589032DD70799372DD6A25993E2A1CDD56B2305FF1FBD0F68F3D136E0CB00438311DF08292D3D134DB89002556F2E0EDE674C52BCA2ABC1AC400B7000ABFB99E467D526D54CC36F35CA50444B3FE23462ACD2B8DD0F91E487C2F10C3BE413BD9A27E431A6D3E2025C6053D5AA9969B518CE32418989D7B89483989A1E77138531C40645C346D665EE178BA7796D20EEFC36AA7DACC93E7FE7100F35AFCFEC8E3F8374490D2CF5A6D85631881124C31A6DC91C4573649FE081BED1FE4F104794D9A893DF9B7552595CCFBF3B34A47BA42E0 -MD = 17A0680223C00C0D634243F7CEFEAF6C12C081B5239A205E3FEA6B3E -Len = 17546 -Msg = 1F7EDEC4EEC3E8B771764521A6EF06F362B65996EEFE654E3C4A50CE5808F3FD28B9C1DD66BD991109BB205C7285EA6BAF40BFA4690DB72A41AE59693861E7FFD61FD38878F315CEDD11DA70CE449F014AE55BA849703F4BF4ADA22B031F7B64C94E74454BC3A75F21AB5A477699D98107DCA07AC33103F84581BE71E20AEF1DA5147B71E31E662C3520137874E9CEFD117DF021ADA85D9F2E63FFF35AC51BA9E92AB992C96D93C313DAD0230A2D5CA3D1A08A1872E0369BC332C30445E9F935199D478001EBD518FEF6947AB9715FE4FA1F851B5D2B1D1F2451F9154BCB4CA18FCD71047EA6993F3464CB3802DB7E7B17BC50F048D009CBA2ED4FA6E5BFF931BD7F5B5D4F2ECC482F1210E30FA2143AEEEC6EA3298F2C8ECF583B05457E5CC22613732035FA0AB4CDB551CC272DFB0D59004D22FC3707323E00B70B6125BE99DA09DE11221334C4864FFE8BF880BAD81831F13543DBF4E0398C67429E0955EB5676DAB844F6FBF675CACA5A22F008CE6C025C94F2DBAA763DB407CB3A9BF791739C36333F9A55DCA9EC2606EEAA30945DDF4DC86864B366669194B3CB73F3B9293F00383D34AAAB9FA430E735D5EC139A9AB81C24CE2951BF8187378A246442DAC51CE69F71F665B07A1526E5501A283015531B9B2BE1145DECF4780EAB9A4B4393F13878F251331FDFFA001AE9B728A0A7AED87302BEC92EEFFF8CF3D5EAD1FF9728F5D162F67429960B4369B753C7FDF97BAE02581A3D8736164020FE66AC4D18CA94A967256088C57F536EDCE1A3D4040CEE2CE419080A233FBB53A2D38759E124001311E92A40868828CAD1E45340F6D7756F4A7E3DAF34D314283C5268D995997E8828E5B4E1BE162A12A1E680EA6740CE009BB831B8407C17096A170149E2822B0F172D84D6FB0D821603C05B1B68F32A0230705862ED8B86C3AAA17AD1F5AA2D212003EA228A67FADAC8FF8B80929DB57156FD1D2A7D812FD594B148892C7A433F1A37FB91E8E975AA0EBD358F73804A5F9754AB93C876FC3C0031A579CD56EB9D56DF2C039F268F5642AED601F639DEF863BB731F09087F3547E0914EDE34D58F430E1FD7BC3D20F657EBBFD4524A92249259D02EB74D8BA3C7A15306A7A0729D2C7ED7C735126A530DB218099CE76DAAC0E98FD07100033543B8310E5B0C4ACD17772D25282AFC5A72EAC0050AF447B10E4C134291152BDA51794352FA831F44AABDB19D57A0C2656329C5E8A8C35B3C8E73D38FCFB6DB03E27A1404D393045953E4329111C5C5B4496A967F667BB7D83A0EDC050F2A819FDFA52E871F1D9969177BA6039096199966167CD0D60C322C4E8761C8553F7CAC76FC818315ADF5F4084A1E994F321054AF882612FB72A32E4E89CEE84640EE87A269F6073210C432BD76E42CDB1EF760FBD41EE9F8F8000C561C1E10DD47AA5AF1FAB539BC39D8C7DC168F07EDD20DFB806DA10293F71FA12FA1C09486A24B8BD419794FB2E5E83FF90BC8AA257854EE875084B92DE67BC80A61985CD155661A751B0247B24C38A2D8AD725ADA80D12F49B14B6738F0B35EB90AC02A0C3C1D2C0381CBA402D5BF81CA5361447C796CF8C3A53C43591F863C889F26D1C81D6191E91453CC88C0FD79112DACD3825C78E1B559BE169B0CD5DE4CEE69FA7419A9860AB13494284CB75042B6AC9636D85513978EC6C8EBDF661F9A305ABCD881A8C3AEED3ACBFF423DCCBE5D99C73EA58ED5E71164B6483FD2D9FA997F7F7B8F02F3A1ECACBDCDEE14419843F2BD6D67F2779AC75A851C5A3F716B0998B837DE9C7E9944B56B33CAC0034221723AA44E147D1CCF894280AF4282F1C942227FC626FD5157B3B152E3253FAAB48C2878B5BF6918B938326EF40685DA89AC62AF7BAF01D6586DF8686F74083C23CC291F4D1B75CC3990B7248169E30490381838578CF0096FDCCF385B928C516E72FE17D64E24C05C23116CAF99FE0EBB0C692652509715967A6E264CCD8111C5A72F136F357C597362306076A07E59767D3DA0AD85357BAED6C643B6D4F77000A6293940105E3E5B240112E8477FBACF1ECA31B9D3767F1B64CEECD1A84F169B102196FC6F5A081D3D451DE44327755A9E128DD68710CCC75A8EA291413321FDBB60EA82FCBE918D4ADEADB28F69ABDE44FABF65AA9B8CF21CCE86C0799D842918A6F67FD99CDC0289C961351E50E1B25036D69C376FE29E323EC290F3165AEC5EA093CF208CE571E7EFDC1B68CAE777E5CF1D6C5BA43BB2B4FB9B21EB76260EBCADE37EED36DCE76AB1C52A87F9610785A2B6FAD31CC19405A519EE6A3D0F27F11C81F39EC7A30C068A9E8997A02158CB32F6F8529B62839471252EEA45F91FE0622A0C8126466FFDB62FBD0D73E3805603C1F745740A3CC6E5489D31FF5B4C00AAB931F7A406D7D2B9C2398D4D7767C71E82A7CE7370240F1D954F292BB573AB50E651A14CAE0DEF355506A36719212B4B6FAA289A82EF139E497E9C7486FC098C12C4FA950790CF0D3662B059FD8AA3B0FE9C795EE3EC620D808574432DAF9CA3B492D10EF48F1903B8CFA7C59FDAC1790E6FDA66863E4E8B949EF794346F65BFF37D15A10C9B21DC26E0F41B2C53B968EDD16EC16A01CEFF4ADA481F0A0DF493213519E1ECB97DCC7E04055A73F64CB36837515F18BC67FE3C97F7E4488CB4F656CB41045862CC6E72CA896288EC9209F3A79CA87AC07F3846AB4BD02052B784FDEF75C0BCC6B547B9A3DF7A9AC596B2AC67E5967D5E8690A452F0727FF6F5FBC1D2C75A8CA858CE7FD3CC33330A8F4CB14096B7E286E6F5E935E95E8E8682142695F9146EB4A9727DEB67AE1F918433477430B76706DEC765680D30FEF6D8BB2F9AC2970E9E00D6D76EAF5BAE5E222936ABACB1C5F5FEADE41CD1A5C39E4FC885FE02C9E9A65876EE6080D918C2ABCA3C6E908816488BFD5230DB3089ED23A9570E5F857D45CEA5427C72837CBBCCBDADFB01B4ADFD25261902D3A8BC65CFD482EE02BA21018202506EDDE64231976DC283D97B91C39E6C8405AD250195EEDEC39C1A3393D455553391C9843654FA104E3B19042976AC7C3CEBEFA149937C2845D109F5FC9BD16C40 -MD = ED685ECD00B5036B3EA19871854AE2FD0DC06ED14C8315DD62102E81 -Len = 17609 -Msg = 8BFE35A776E3E67E17689898396794CBEBFC945DA2429787923565F0DA3E26B69B8E03B0FE41B37846FB14EF25B3577AE68939021613970FE405BD432EFCBAF634A50438C08721D0BD314E78D9CB8A42B8BDF870D7D9880F2834FA61788AB4F42B3FD42E9893AB50B5BAA58E6696032ED4054B962BA484E6595416BD058E3B779B2A7569B08EEB7E4287D8B44F4C1E8B30704D5604D85C1BA6D5A7A74774817987D23A311447810866B188F5179A9F92AAF5B7D7FBFF306204A10556C94724EF92D65C8BCFADBE07E9B7774E657FA5C183BBFFF13FCB336D62EC83B6FA175EE1B9D5B57BE0FEB1B8AB14B6D4B2E5F9BB1850F86167159E74BFDE7FBBA1386F1C8282DED2EF558EBC3B1E3A67987E91F65BF10CE8A9F7186F90100CCC60722AF8EEDCD03AFBBA12B8AB5956E4E5782752E2A68C2A18B01A1F7FA84AA19B8EA0C641C76EBBAE63B16A8609F77219B898C266337EAF207BF0A1E4FBA101493D5104301CDAF31EA4FA45BE04338C38BCE8F824E0107BC315A29D695ABFFEBF7C3E489AA61F256998A490C68FD18DDF23A4EFEFF253565800022BEB828A942BC320C7608278AF6CD0174C25AD7EF24EF2FE651723DCF3C3728BB16EE513177BCCE2C72BF8354BAC42B717E1492B2E90E066AE8790BA318CC1FDBCE2F86D5188AF6B9165D62D946E8A7CB631D0EF569F7A148DA70F54507366862FABCBECA9065589EBC44B7F8FFFD48D1857C509523ABA256F61CD3544B1C02E9D6A8B30A0B7AAC5E4AE880401127DA0CDF60D6E3E215FD51CFFD5AABF6866B58B6625B3A4C350D473059847DBDD0A5B739B9E9A2F061387738628C186C7EF818DA97FB92130AC59C75AC315D5759B90AC935D04CA38FB4C27463A76F4B7229A52EF6D4B07FABFACDE99DB6C61E05112500021C3AF3A414794548EEAD1934DDA8C095B94014FDC3E4DFEA0760AD3CE6198F49F659228D3258713A733FACD7263B1F2DCF679970ABF94AC6F7C7A6DABF7DADD7D507F4B1C24DB84AC54CE735A2ED24A8AFC1ED342381C306A637697B9E624C9B930BD250E46FDB7ED80B280E56347C599854ACC15C0D7B02D6958BBFD3F0B8B0AF399C7BAB0E7AEDA5EAF6E669B50C1F25AAD5E987585CACCD2A049F938920EB5D25C4A6D76C5EB0297F30EFB413E8B7A45A1BD428CDD00CB3793779AFD6ED2390C9D416EE61046A29D0F3934E8F10A33B9F8CA0795C38394DD0A945A7ECB3BA00A8F59B0CC5D9B3720F0927B761DE18AAA507D9BB293C52569D895AFB3B0DEAE2A58F3A2F5D9B284E355A729ECBF46D7D1B1FD02C31E7518D2C573BB7B47719FEED03A6EAF4EC5AA4646C41C5CD6886E8127C2EC23EF9EC159A71DB61408A2808778C62200F7E60E816B4B2C44175C92233740495E61505037AEFBA44D273DE0A2093EB9D9EC24E2FDE439E0F021FC7DB6C9CBF9D5016D210DB77E521A62D7A6C0740639A403CF8CB744FC37AC46140E8916A045F62A3F403AA4E5F53CEA915002822F3F71884A2825489CB1F98DD1D75DC83C88DF3FD8FDF47FFB30FA2BE6ACB15E856FE51A2065374AF2C375A979848195F76000E81CCE0C8D2A68F2E733F96B98C14DD1737159799EA2239DCC01360BF00A0EBAA440CCF6EBC0167FD96A9C0B5E239BD6FE16B11BF0EA9043B43C5E5F6C64D402DA1219D679E3EE42B17970739B16BD938201D8881C0CA56E25051AA39F61C31E9E79EAC6FF72CCD639F8565886346EABEEDA44A484475E18CC461031C60742CE5C74837CD17D9008A597E112023F24AF77559A881A50E5DB2127CA9E609A985DB286CEBCE6450471804C6DE7479C2C3B59A7606937F3649DD7477108D5845145BCC19E4A2CED56B16C781803F30ECAB366AFC7914B073671D2DA133ACCA59358705B63218B6F7137EB159080EF815A8487C1CBC7AE2E5ECB984F2F95DDC3A1291BF1FD88A887D2AE55B2855F6DE569CC8E4A59D9913A41DEA70599CD4168240E396D9426DC137883E248EA85A2E05EE6B7959594484AE06D8DE8E0E976420DF47B8CBFFF0D464798DBCDDD6C015F5BE33ED7CAB80EC8218E95200823AC593122617172C4D66B20F2548F5CF748CAE0D7F2CCD584F01109702FCF5C9ED674865A8E9503B22A3BC4653507E14EF051C889491B356C5FEDE34D28BD4560922B25FFB855C6E51086888D61DD69CF38F229DF049441F814230E4E6143461DF179A113A7E601818F63616AEA3CAC3F01A9F61F6A706E7535D0F96B70884E761F2F954725E8747DE4ACA496649BA393015DFA993272699AF701E890139159EE7A766D3472A3BF42EC195BB2D4A3A4EE7F8BEDDC55C7B74454FC31DE4218B35ED73944E8E2FD239FFF3D7B5ECBF27D2673ACBF5C712DB0F8783C76CC65091E84287FAD4BE167CB2251B1ADA9E6D5FDF0C8E170944D3A42D0D1A9B84949C530BD2F543E9675BC7473F1B69379159287E44D0B8C225EBD31A750F8C6BCBDFC4668112974936041A2AAD908F479AF9B17EC746D5D2777869AB73683F98F6331542CF79778DB25BC5AA5B729C72B6CA37CABCD52CAC90933A4BCCA5E1D526CF8B149457BC53EFBD11C060CBF1B0D2F8B94A1936ECC76E9E2E5F3A69BB570E7CFD17FABE8BB4E1F25ED4DCA1658B868C109DAC2CF33173852D15D9388DBBDA0CFD4A5596DA7C26AFACB9B7E08A7A3A14AD9AE1F4295E1F17B3029608162036032E6BBD7F37B6704581A4EDF62A20D1C8D1F4E63EA5D0D35AF43560972DC66615CB4C8A552B25C9DAFF298310489B0C7F14A677529B1B2AD999D4031EB0284E765CA391F2D80D2B11E1A3D394FD60C59AAEEC18B1CE4C45E1EA393D018B47F2DF54613665420D70A8B719C2840E4E083575148E9EB5CB21DEE8D3DD72E0A892F2C8B4554BB66E71ACEE83089C36D94CCD4E85105922515ED93DAFB9CE5BEC17355582E6346E44AF17D43E3D9410DDCDA69BE47636211E8CB002580039FA07843141246F6D5E66E1F8E7279A80E739F80A5BC0A5B82617B4F13239F7CDE2CBBD64B5BB0EA134AD1B6A4AA4604D456CDC2DC7B853FD868523D7370FF0D357F8376B1ED875E99208E46E49A08B7E192EB170F13DF93E2868CB50C4EF2A43160C1B53780 -MD = 3F7909CBBB2C4E505496414C2EB8652E392F20EA76376578D00F43F3 -Len = 17672 -Msg = CFF54596C315403090B3DF1253C9779B89E866F1421E13F7646E3CC16D0978C41B959499C249D229DCED6E267CB4CB6699E0478BE8DE4E13BE4B58D6B63083E9734573093FD33FF2FDEF48754C09E891C41DDB62C2B4208F779C44BD445D852E2BE9DA7FCA6C5D7C015F319E4BAF9F9B8C59710816A978F670EBDBF5EF455748204B3CF1501882530F7F95357B7C0C66B354AB947FADD41974101602C926928D8A2B3AE14597DE327DE07B724F9605BBB70A193F4BF6DB0F1250BBE0732CE9CDA13F2203EE04164438B8893238A1863C19F223266A047792E138B8CE77A96330386C86067C7F1097C1A4437ACCB9DFECC965D576955426F066D1CE72BAB6AA25B944EB7CD9859988C9FC38C77398839E5C3A6A94E9190335FA8A20F240B675A5E1F2544F957659B557F2C9393AA799ABAFD4D0A3169627A7985131C7C2BDAC9CCE99C8C744373C19582A14BEDB713B2068F101FAD706004C63DA2F5675347A095393BDE6E5EBACD2F88B0AEC6999FA0A1673D8F530C5A43E65A7BB24202A7DDB5BE1B2303BDEB0065D3D02B8A3A7B7463ADE755648197F991DB4E73379948D01D66F88E605285A14151C6A0326432C4005A852B6FE7410E7A774BA17D86F8BED48D83A777FCCFA08FF6C0F4AF9B44D20022DD711B1F9FA88A338AE412868DEEFD9AD161A910CD55F3375CA699F8F3F2C3276E30C2EECCE99BD8F254CFCA747FC398D96C3C9B5621ECF8DC777D4075344FDD0E99291556C9CA586CB5F06F1CCA32C1194FF82F20792440ADF15C176D01A4C4FF04A02D2D80A476A5BBBB1EB3B56F1DC76C4B0602C50B62A6DB0E160C43DF6C87882966BCE7C33CCE79BCA7CD265014858ACD6F0606E2D25B9A49409E41B2B17DEB24EF5EBE34CC713D5CECFD5EB560A8ADBB45699B2EA19876EC9F216BEB541446004898EE0FB56033ABEE5DAFE1B2A196F11E741E16445B1E882C2CE6E5F433C6BBF258AC9AFC81453D4F95D9C3756088E4288FBFDB81A72E1F2E5A4ADB99EB606E6B5AA484E578D97EB10BEC972D27AEF2444F340634EAD3AA681C0A43F04735ED744525E18C3EC9DD22213F8F99EA6334127BFC0D703677E15A413B1F28806234AD5106D1C93A0A54467336BC02AD71291605A87BF26C95A382852C48E017F082F7289C57E3E9243658E9C10523637FEDB5B3687305031621A6A62F65072D572E35325F3F47BB3683E437C1F648250046F462FF6143A372AEC2A80A999823ADB2BA65864A7C8055A1F38E8A455313FA4F091087609C84899641B944A2D764F5AFF9359944B33D0AD0005C08BAC003BA14D5086A88D3C12FBFF8CA5D5195068BC84EF6682AC2E279C0082DD0ABF42333E7E52CF8BD1253BC266F412D050C9CD2E2DD3A814C592193203547A6FD0CE704360FD9844FA1FB789181175D089DB4DB8659C5E2BC991F213442285879415618593EA76FBCF34067E7EE0B5BAB78D26B2A4964BFADD9FCF4770EDC62C0747800CE582BE6C3D44DCF6B448988103C4FF81C5224838F72168985B241E88D2CE3B05864B3DAABFE8063330765BD1093783AE2A2A104D3258CF0282E5165857FCE961FAD5627F508C4012A45F61602D076CB2108EFB8D963F266EDCC172F0729F3B4391B192868C90B58EF83CFD713A27CC8494BA5AB9EC88B33BE6F5DD03C15E1C2A84C1BB9A13FF4967FB20884FCFD9F107E13405307A1E524AB8804334108610B12BC3ECB2E7B6C02085A593208027A4E525BE7D4A156B975625DB2D87097D0EA36917920C47D90DACBFD5978DC62E11912017E28D4328B4CEA1C5D4BB8F176AA793BC8248F3F4F80F52156783C47148CE93F60E33FBCC7052A8CD490BF585A67B27930776C7B6A734D7E771B7DE929CF24C03B77A27AF2F86A75AF59D6BE581E3D1BBFE1F6EF070C73FA4BF580E87E786109E57A0CC1D027CEE3030D79EB67F4BF71BFB3A520FD6829EAEE6F5ACBC45C40D2D19BFFFC7310EB082D67E4CEB2B12BB77C334AC9B24A559A679474A86559F5294330B155B9F8C9D845856C37F7560FCD926ED0841C8D077249BBCCB28BC418DDC7D189FC0AEE67074E95F81619B8727500F163107EE17F06FDAAA1E6106FE558CD0707AD85884C51EB5CA108644C908EDE0433DB745930428B56406E063CDDDB1A5C835444A0733BA0497FE2C0CC2739C373E8F74B24BC1B3A09C28654E74C4842C5B1776009784A405B9F81EA961633DF7BE908593B1EF824E43ACB9EB4C3972A662462C42EE1CE406ED55DFE6245E9CE124FE7C038DEAA15E487CBC1FB9B0FEEC1536AA90F2EC9F0C979F369FF50FB99A14D3C0AA9F94E668A9801D514DE6901DFA189196D0FDB1E4313D55A3ED19E8768ED8450B387B8404BB9AD9DB1FA48FB43A2F056168F2369655D8383CDEFFCCDDB921F09421340241682CF1AD233E488DA9584895BBEFEC3602693EBB7ECA32BE773C9142569ACFC188A97D46801F613DEC226E82F29EF07C1E0197F4462B4F1F22EDE13E1242FF5101693112A410AA59D4931D2E98992172AA4DF8180D571FEA9EF94515910D6CE14D81ED8F060E8E6CFCCD1678A827736009DBC38DE3D63D2BF7AB78B0C9CF3524379527A7FE4A034E36DFAFB018B54F08EF3DD41904FBB2782D63EB7B755A6D306BCB004F0A8CEE3182B99ED6A01DF198A0027DE42938064D32E45D37A613FAEE1F1075F699125675B18908C23AB0BE248A5A1AE8A01B1BF76CE71371AFA56CB3462A1C52469A460A357E4C7874224C37C1366DB9FDD3A6F1F08A6718CA45BBD3B1850E74E27E76571DC89E5396EFD5C28AA37A61DD3F82FC4257C080AAD25ACB8B336E5D093955DC6847AF1AA4BBAE31A0E64BA5C021053E851E05E1FD398B5ECA2149219892EC0A644DF2277B77BDA83572A7906B168A9AB17370AB9E24B57667F9DE503FF0B1F9B798DDA99996356CF60555DC63EE40B23C77FCE438790C8F25003003320ABA731A2F233725FF7D62A49E76BCEB7EC76F58558C025672D7144E5943408F4DAF60E4D991990B510F548551F2ABAC996E603F559051C4A82C8181E967EEE72E05AE3508E181DB54C8EEA4C05D2C9440521EB19308B3D5F0B5485902A6B01A5AE04F0A4D5712C2838C815098 -MD = 13B72F2CBA9F9A26922EE7A8E5722AEDD62782D4679649ECA6CB48C6 -Len = 17735 -Msg = 59095D73D90AA6DEECB9228484436DCF2B7D73F0C57FD736A3D32D605F7FAE11A079BA29BF0BFED35860BFA1B29AB579958D60F7AB9E156D2F8ADBE1E7A0971DBC710FE1DD96734D691FACC2E7E5ADBBCE2A3B6A73438766A861F92FFAA2019D501A62E79BFF58C9CDBFD048E8CFE270EF6364ED0C102E7FEE98DC3A9880C1B0279D306FDD2A7D179AF918B53F1FC41D7F6BE65CC1B62865F5FB71F1ABC09A9A09E4D4C05D164F79D3981342A656F6BF90CE55A0F0C9B5A296CEDA56A61B2358BDD1C5573B7C13DA97949270E8C5E4E7C9E75A9CEA704577B60EAA2B3AB5FD8B7FA2CA5BCB6F7E98F28ECA33D3DC3E7214F19159931F0820D808BE63A81C97E9820898203E5D226BE71435A43D246B713B47A0582145D2FBF35FCBC885F90DEB773AA65AC7442149087CE76E35F904B07E595D755834E3BC1DA2E514C9F2E900068F02EBAD7250CDA1D674C683B7E9F2174FF84CD86A09287AD49BF3702E4BC3B9EAD7B05334EA66979911DB70B7A799C19EE208AA8137F85008BED4C8F6A1F4F3359BF8D6E20678C941F79F0FEF3C23B9DE659243F39537BA05CFF1E2962BD570FCE9EE35D12FD26890D4A9E27B0F2E6D98D42DF77E7CE5D74E391EE19F6EC3433EAB8468C1B374AA922F597A2ECF8E7D1C26A56AEE7E36B25B0CDA8A1A563D9605E1DF3B34C3D74062E914133362AE10F9A6916A70BAF4EE7E6FD6BC36BB4C54D502A67BE3EAADBA8D860DEFC33DDDE5F8632865CA9C2F9B9397AEA600F7B292BC48C766A665A6CA25ED58062625D1FE3B13C8A7D9D7D25B29C798DC3AEB2BAD84FB90790B4CE6C1B7D75150E952F377C3D284645C9A7E0518E956F20D4D5F7A14270ECC209CA911866B81BE47C1047761519CF30A4C6C461718897BEE276E2D58229EF709D55A3AF7E358721A2C9B02783D3C1EF88808F444BA13615C64510586A112A4CB46C69E403ECED03660D9C5E53D9A152B34C4E0A375A5C558200BE3CE3E1757C18D69B8DB2116423AF97B97DA8616971E6F725DFD64099374EAEF4750F6B805D5B873612A8304D5D1EF194781F303739134F2897BCD176EF9A5C9AB3F2ECF3360F1C09AC6268B9CB9E24C3CD686AC644E627084672975598BCBB018D88B10ACFFC602F6380B1F651638392CF3AC646ABF0025C842ECC94FF93DA41262723E26978A6220F67636D4F88EBC20CF688612A967273817C03B7CB430459FEC67734922CCC38BB07C76A87218744C3ECB1853B3BF3418849BBE5B655E25A57097E3D59A02BC489ECAE009595F5AFAFEC53B87F809FFD8C9A0D8E9939D8B166744DFED822E74C9DE0BA54F14B391D8D7E8B954B4BB7E910E5D4D5BD007D7D5BF4B869E0BC0B57093B013FAA4CF5CEAD811FAF6D2C96D888FF692CCECE111468DC05DAA062B69D00CDF347C3CF39A633EC3339F8A8880BF22A1FBBDC06803C36E248AFC6D74B4DD074100D329270A25ED38C009EC62A2C04262B0F6F5709FD3D4DC1288F7A1C4C44346C76FFA2208572AD8B775CC2F86622E152792705B6B97494E89047235B051A744D30FC11CE9E42CDBF91668FA31EA3903ED09871F47E015A27568A5612E2EC29B5F82A117810D26879C61740085AD6B76CEDA69EB45B759E126AE5765B240CE093953A117FA75FB85E061118734347E01F0443D299B5BE59C1AE5F2D445632A5D6DEFC7460F7868287F861EF6D1E4C78BADBB8A495593D1E821FBB398FA862B6A326939AFBD4D484E44874EB18CEB1961C76AC4C2CA7825F1F92B798B5147676C74A155B46B179614FD1EE6168B9A45B2E1AB252407618E295B7F282F0E7D705DCB29869F0267DA4CF90298634D54CC787410063E8AB6ACA87672930F0CF064C11E4D83E275F084DE5965544CCE0A412BB332E310151F932A1CCAD01ABD45590707F0DF122400210B57604586A22EAEFB477661A0BB88F204969EC8BF0BDFA8FCEB36590263C60998B53F65948FE2DC8C82641A72B33045119220DDC2B51E963371224A3C9D0269626687F36CFED2477FEFCA670519891549958F4B71C60BE7B836A5D1D24F2970205A22B8EC8A1BC26B45C62EFEB342D9AE9FA5C6E742C65DEE7FF85E37AE580E5DECD0A68FCDA10101A17023DF59426233DF7C1AD07BB5C017AD92470992FCD603ED0C8F10727AB677A1DA57FD1A444187FB7E80F2F5A042AE19F19621E064E98D12D80E621C2DB000814B8645CF0FC54186D5643EF5CEBC88297E5868D3C72DCFF9A78C0B7CB4F520B10EBD3D0468C6D6810BD3C6FC6D26D59B10FE30836492C30E500DC27E770EBD79562FCE10ED01659026A2E0D0066CF98EC7072270D39455D897BBCA5FDCB7DED90C933ECF8B301F3D0999883B8147BAF407EA3C3B17331AD74FEC7FBE0DB68C1179B2477EEA844CBD852A4CE632EEAEED6E7BF8DA5AE08F97844AA39A5D268449CB4B6232C84FD1BA1775ACDB62CC6A5804170241F4BE9A088664277BA01F54F3BBC593317D402F8061DB1795C2A96D541B1C373EE68CE9D8B88367295849F01A0CE4F4ED99C5E8F8228F60E0740E821AD588C98BDF6B05940B7A6BD69978006853136D8958BF892D1ECB6A8BD400AF86875AA7D65FFAAC380E28648C467EBA75F8F835809950867F8B20A7733835F2F4563533901D3E48F6617D808821BDC4227F742C87D0087422AD8AC659057B1EB944B0ADC99480C5A3FF307AACEC67F116DCB1DD7C844150637CEB65ED38234988C878F0F9B7121AD6138CDE0755ECB1EC1AE82740128CF5FBD85DEC9904DEB2ECF6EEB9106E3EC110483D543EE6A562BAE14B4B8610CCA3A9C4F4FE40B39B9A6F79715F5B3A17F1167055E07007D23873EF29912276BF204060C4514F97F7C8FEA0FDDB7F33179F4E074244AB4DA7EA3335E44CA99D4754991E8FB3DCD940033AED5B85A278DD47911568EB98E10033D20131817B3EE6EEC776B5EB19ED8CCFF5D1458089A1D9C08C3D45DAC1E868C699F0CA3405F8017EB0050FB07664A2D02F0195EAEDD00393B3378CEE29CFD4C61127125B6C44EAAEA880083173167947B29C7DA66A2FB4F0755D391D2C5ADCD46F4E1A94C30105D3A987878FFB297D3A9B1C134228A2F2CD58A21C2109228DBB7012512BF2D165CF2233057A564C -MD = 2FFEE4AC82C83FBEBF73188D4678312937862328485DD672E5908425 -Len = 17798 -Msg = 1E8396189B19C3808C5C1FD69B3FA73FF9DCF7681A2660252B3646F474F3D9E2C80D50DC3A6720B3C9481A9952787436B04B626B2030BB58A4BF086690A30575ECD23C29DA87C822AB9B28C086F66371CE368DC6E14D9F58C11FA603EBD35BBBAB787DC09B8C5BF3EF8C49840A664CCFB7467E83ADD229C26B9F819462C6BC9CE058160229EFD947D2E6A76AE26C514D56F23C8FAF04C74D9B3CA6326FA606E5B67235010AAEE609DAB1E23DBC1CBEB80BD8428E4077CAE654370BC28FC939000BE683BCD1789284997F4DB9BA191CF44ECD788F6A2F0161EC973B7164B31B5C7A3AEF22F9AC879666C92C654298C36F4F6208608C19F09E937D03A7D1ECB97E68BBB187649A6E638F66E7A0934F73507F856D84D506E2AE5045D94E5FBCEA1A1897A045D7D0819BD2E5A7E640C40FEF32CD237BEA9A7305535320BEA358E987AC98AA11D8CF6F8E2AE4CC1AF3FCCA6D3A507194EB43BF8DBCB52A13E76BB690BC5271FF6BDC0D464AC6104DB5B3790FC3E6AA465E4294E4970D67830EEDDC8D35A68068C073528A32319D52CEC8B5EB2045FFE5D8482307E87254046733FB91701594D0A6C7BC061DBE6A63796B463FA4B717725C05F13DD1B9240B90255E2B9935FBB44F02C4718B455E8BA13F83C37297CA0597B5EC4D04A4DEAC98A4E7D2A0D9B3B16CD0E5D213E3D5E029A5D2AA29F4A6239BABF71A251D1CA93502A2CAAA36EFCECD30B34901258990F984CFBC9D866490C6F1E396B89AFAD30AA8AB5F29E47B1A9BD15E0F340D225AA7FD25BA1218908904CB05AB6A44FD8348BCD6EFD402AD32F00AC0ADEF5847988DEEC11BD0CE7848F1C13192F8FE7F54EB2550B512E75CE6A4658887796276DB6884B9B6C8D0C67FDEFE44058E57C64765E8006D33C52710BDF0C34F3C66C5464BCC3652410D19A0281EC533DC96D37F630D4B9796D24569098A0D00CECC082FC39E91366ECFE48D9EE3345185AC3F136B44F739AE859F29EB42136F08F56001E6055FB654AF7CC78F1DD73EB66FCD9BEE423FAA837348F446709654CFA854770C325A3EF1E9B71EBF09A3A2E0B6C3A8D482E631837812C1A42424FFF75151F432EB05D8E89EF22C305061851319F7E3E24FDF043823FD0C98CFC9D04763F779355BCF1245B1227387BFC0191A736267F5AA32D0C45B767B0CFC472F1ACE244805CF234FB9D622DA9134DB862A359F35EF1FCFD49E6ED50E8386B4E545D3088A68BBD62395152B4606DE40AE1C97CB1A852AE949287570EDB751C08D17E182AEB72FF89C093D1281B4A8A426702298BFC4DF1F1E545EE6FC1193725A710026505B5FCC807A2BA5D18D1FF054790862A206B66601FFCC956D62F6C8F0B2B9A8981195026CD2F4B9F59291A56E62B671FE9A2466C3EE969A1BBCE1E2AAA9E63E2E4158D4D9118CAA798FA133FB31339E1CCE30E9E14C2731355969398001698A1038BF9ADE000321370FFF053DAD505A27D705D68479072F391E14CA273EF268CE2947EE51E73DBB6F34557D6FCE0C62BC7E1BA4BC5C1368DBECBCB2C67316E41C08AF014849AE6C201425D30B6DE0961E357E0E07C30DDF3EA9CF1EBB2F2EC3D0AE140BD25DBB7DFD535DC8C41EA6E258FBE7234C620DA27B0C7F9BF2FEA426494D19990A1871DD734C776D35FA6CE00017A4EF08A2C19B88102C094F52842325D7CF87CB380CC10C68257305C77BDF3CDA45157EA1FDF60FB6F521119388BD8950D536FE5848E18372C2CFF9D67B9E582F303BA3467ED9DFFE62C6C502006E71A7D5E227042095455425517125DB00744B81BB58AFE2B743581696C5CEEA35A1396767394CDC5674E961194A51B6870A24790E3BA1A4FE906240F88C13B8F4A33F333D1B4400BC0B602C18704F29585F7E724D18C9722B9E346CB4B85C21A9AA554842F19727685C26E50C865E20716FC65FFAFEB0952A1ECD1830555F84A3305B1D737A18DC1AB9E1F1E841CFC13F2301BA38367351A58F67BBD365729200116E480DF64488677F7D5FF31C8641E32AEE721E6D0201C11D518AD39F8A25B384D706E8BA20C1174F2FC3EB89B2AF519959F33B17FCD71D4BEE8489FB76782AB2FD7567BFFDA63494F924C7B6E0B308E0BC10A0AA7257CAF398A7E44420191C4C6930FC4EE77805968027F2A12502BEAFAABDFC679F606CD3B7CDB5C7E6A637BEE270A2143A1E7A4D87D0352C4238F4DFCF03E2A9F361AC47D1C9D9E48D020E3A04D19F08608B1E0E2F72D183AC8A54968ECB0DF2424B55749C2693650436C0A2CA30A73D0E14F193CCC78C3C0D7595D2E8FD6508BCD42ED0078B6EA2A350DFC16547639752A1873DA349C780B68913FA1D43A7688ABF1D6E44173845E576B6E9CA03DB91659728FABC834B3FD14EA283903AEF91869976BAC07A2F419783BB7C15A73F5D6E110BBEFAF39A8216CAC1E6A1F6FAF96AB54EAEB75E29A5CEC6B3E483436D52B137133552B1FCFDBF98B2AF26081AA7931E25D70AC882E390FDC6B800698E196A20AD22F3E113F39AF5F1D63D15CF4183C297A5A139BF10F617305A2A9AC403186112B42EDDD62896F10E8AF9346AE2256D72EFFD88922D04E64DCEE4E1B09C2BA6BCFFB5EFBE8D039C1754D35F8D629E270E8D3D4CE32E0569C5F921CB5CC5126A9BD5A38B5FEB1D36545B80BB6F8A03382EE318D345ADBD6B0A0CC46A74BA9B590B9952808A5A8533B36FF574B5C0FA30547F37206CF77E786786EFD036FCA3124B0DA3DA8D558B248E1D6FBC838C9008915A386D1D71BEA031DB1C69D165DD5A14805080C6EC9FFC35E1E2BF62B6D55B5BAC5F0BE059730E5D8C581579C8DF5DF9F5EE3FDB65A76029412EE2C824989E52340844400D92643F7F6AD163CBB17BC1DA734696198E0391FBF936AC41AA0058F134B97DF1BE960F2E23288D99370BF43C95D956723447A1A5EF766B8993734E6E9763430A4BDA67FF347DD06C2500C8104CB6A44254BDF46C2885DA3FFC4577AD0FA98D77C3E0C58E6017AA826429857C4CA642ECE3703890CB0DBA08B5340B6585D09AD79CA32377F90FC41A9E67071B6E65E0B691E1D850C10B905CBF366E5D3C3BF9605A2F739D2BACCD6A0F7340145AC9F3E320E8F57F95088487DDED6D0E0C8EBF3DBEE81EE46E5D0A7DEC -MD = C8E138FF9ABD0018AAFED4C9B741AD9EAA5178A26614A17DB49A363D -Len = 17861 -Msg = 515CEA08F442A86AC89DEE44852F1AA4727A60007236A91D76E1F2029E08BB4A4FAE09D28F672F7FD7576E62E0BF09EC752104766622110C62545FCFBA0FFEFD320604D676021FB2D36286F667DBAB0932CE2A653AC31800C157696F731DAC3144289F2A148D1770A3428B3DFA0FE66B01F292153CF79ACD8257B06FCA66126EA173A5EDC4BF1E13F7829967D875EDE4996BEE3E27896B9924D785CDDA7448DED5A43D39CA8EF2AE3DBD0559996973EED6FC3EEB6E7347E0B50017F814B709A1D7505286D1089FC428E22AB12FE5C72375D4CB8A9D8C7C43E082DC7676E5E9C565682619C2EFFAA1393E0BED8617841F0C624329479D4535B0B1D052468D2A22E5028BB69B12534B99C93C2353373FF7A2A6866C0B5703F5D7CCEB0CF73D1FE7893298F45A00305001AA6AACE288B4326417820FE903972D3221865D17AC5EA242371EE5854DB0F10164B977E032DD5FD8F4C1808526DE0C58EBB13DFC6B9EBC0267BB7027398A67E326C9AC193DE2C2AAA76B56C04702A3A973E7AD6FAAC33F24C55859C690C3C8BF50DC57A0679733042D9888EECB08FA0B627A654BA52C41854DC13DE7CE98292E5C5AC4459E6266CC7983070A0C5EC1AEDBFCD38392E0FE64F02F4711CFEDA573624CF5819BE3883BDE2F8537730FBB7FD5BE16D1ECF93FD323DCAD72BCA6182851F00E7552EDCF5635603A28054528D94F5F77483A4385D5F26E1704246BA59A8994333B4D8CF52434A9B25ED6338FEBCB0FC329B01436D98527AF55BB13DFF84F21C32CB1244912C5ECF00930AF58F40C75A32D8F8199BCD261B2A61389E2AE0AED9243EF1974DE380906EE4C218ACC2A744F9C0E58338C7BE4DE9419237613475426E19086AE51D891EA86169A0B37131CD03DDAF5F0609C61617EE9D498271925CBD4B49179E9BAFF17637249A1AE590A46838261058B73066D19E647F35E6B10F899E8BD9667127330D0E3BEFBC55496AFD219A2E144F83E9F5CC0DE2F49EECFE916D6737DC18D03E97AE8A7745DE02C7C11D9D2FDA901100CF144D108260418A20D2FACC97737E0F5D84C8C7FE4DE2F30B751E6F940E06DEF7D95219E1BEC6B9FDC620B8A41E50B3F21D9994E7F4BB4EEC2676C3983BB17D6072A0D0A2D7C6573D7C95536B6CBB05F21E6AC3B2ED9768EC14C7DC7974608C2D9BCE1772B0C1939C0136BD1173646885BCC8908B0201D1D3BF798562CAA22F97F9A4E1E33EB91F35162A458C49B5936689C4C0FC48B3ECB317EDBDF004C57E7B854FFC7DD2B3E9C8F52DF273ABAA5A4A238A01FB0C25D7F2489FF2ADDD53896B8331F53545CD1AFABB8E06A7CC95281350435E4CAF79CAF962B61D3315410CDA2100913A932AFF2401C92E6CA6E102345975FF1CAA31B1CF7DE0A7680095775B5673AF9AAB1E5B98B17085A02A0F2760B010E1D65E85F3FCA100BBFD5F07BBC1445EE715A15825079BDF8AE5238846026BEB16FD5FC796B36A69C7F475754AF5271308B705D9D35E91758FF2E4B9FA52E791FF9977B7C115DFFAC951BD0AE17360C444C7B36EF5D3296C5AD7AA61AC5B7C66EEBE3B4FF20399FC54A6B437D8029EC0D222E38D117FFF75D85D9147AE614A5B9715086D09FF617139BAD5259822D0525CEE55B967CA260CC364B824EABF17A89B7A16EC2CB9637498CEA33AC586ED2C283DBAC5048C5F4DAB65EA1C678DFD29078776AA8EFD770F6D4D4BE5734F784BC2F22672CD85B8AE90A2F0B2C8329913EFC4E79AEC5FFA8F0A50195705B90C03E531D08A222975842A0B5A0EF3CFACF5EFF4A289F3654BE24E2C168D4DBAB32C9C94AEBBF9259907FFB8814E56FFED059158BBF7B97059AD0E4F788FF58E0C9BC27ABFB00B557C964305743BDF144F9C2749802A91618202427E3BCBAF4FB9B572638F77D2465CDEFCEE713805756F5805BD2A4E89CD4B041021DEE041ADCEA07423C0556EE8161B9505FB619A180F3B73646659592CEFEB020B9C1D6C4E82001BFECCC1F4A1B823B2FFA9D79C5B0DFB5FE792DB36C8A7024F79AF47D1A2C6736B7D84405B3B748676017FD80FBEA2D43888A4C16E25414245A7801EE3C8C05D11C4E73774033C9C5D5AC825B1DC19F6290BC7E88E5AF7DD256BCAF25EE59D2ECA743BE5E8E366BDA88E6E73E6C7EA4475AAC3E5A252B5E903B9372A0D09B72D624AEBA730565F0ED2A46674493B766FA1BB99BC408CCF64C19ABC74887A009D36A7879BE59E072CC357442D6924E8ED35F347968C632F1128426D76CC4A919974CC9E19F8709600A8541D7FE5698826EE6C72DAB8BD8402C10CC55D55909FE935E58D5AD19ED7F93EC0D20DCB994495B1B3C901D70516171BB1A1A1C16D64E08D66884ADA6F544B8A51A53BCA7B4CED74D81F47B93EF5F2B6C7C173ED472680C16B54C89454F317DE17DDA2C1FE84794D355ADCBE1299C7672E03F3BF25FE024F205140890F427785FD73EB60E3D492CEB9296FD80CE59836BDB7CBDFE0F31FED33758E34F94055611306D86C7DBF93654499BF0FEF7255D2AFB3A6D15C09DE3AA2C086DE17D451AD6EA1B599B8E71C9911D91A7EC46948D3EEBDE39F1605613349D9FCEE1045998A9541926FBD390321EAAFF923AF0A978A3480974591451A18B260B3BC4844DBF6C92F521B91895E6097DDF1E43D23D8F90ACB85395FDB24D052B5A6F595B56371463E11D1B7F0A251ECB32C2E597B1C77AEAAF5186830179037BE1ADF8B009DEEAE4EC9121CB359103F11FB74836F8E6340BB5BDBF68EBF73B91CDC7EB0745F822886247E403C6991F8F31EE5BAB057DF99D10477E9EB4A60457714958D92DFC44BCD00D5AB5A4179ED99784C28490FBFB61C08129BF2463EBF2D121B0FA751357D377267DDB1C628549A9C8FE638DF90D46B94385192E24BC0F1759A9A0A69BCAE04093F47C633665FD5126A31C571CD76F61881315A1189E064AD91228C37547FEC773C8883A8137EBFEF7B12EDED6790424B79AEAD24E3A842BDF29E175325DB2DDA7B18CEA0D1BA57C79803B52748B1052D48A87F7E172383BE6E70850DD4780D502886AB0FDFF3FD9A92FB5EAA4B7C245C023F194618650F4761B487CD1C277473B9B446D2710DDE29658D8B5D59150820481B86AB58522C42B1CBE8F3FB466DE924B3975BF0210 -MD = 899F3C9CAB845AEDBE6A63FF6F336BF20E27A0ED645B607E08D44FE5 -Len = 17924 -Msg = C2E633C0AA0821A60A04B89B669346B14AA539122179BF22541546252C5A5F2467F62AB1C99785C61C67EFC7AAFC61DA35EAA12D5E057083D215106DBC76DF5DA83C18FB26FDFBFC73809148639E786A2DD50ED1C6F345F5214B70D921172B108834F2394736F0287BA6FA01D457B70A012CE901ADA6CC89D1D52505E47FDA2167D66073836B856A46F570225DC07C13B4563AEE118E7F03FD92FFA41F4129C970A9778EA6BAF4C88C677764D3CE155AA9D0089B7B04BE38D3C440137664953D7FB75529EB666F27ED2AA90347030074084793666E64D37993D522D1C73654DD2308FEDB527F8018322FAA458E3BC542940521D73735A10937B0CADCAB78F73D7C829A6B08684FD865210856AE341B889E215446607746C1B6593EFEDCD114AEE3E5F6B1E487D8653E9B9CBF89D367990634F869F13047A41916131E38D6348D9F33FC5F846798FEEDD3212C2F3CBC0293CCD1CD44C45B415ECC5B8172F9DC6E007E0388CC6DBDA8E32322C50B0099D6BB5EF5C47D449186F107B5DF7C4887CB9FAB9367F34CAA1E622D0C445521269FD212695B3DEB901D93F8A66824672372988115FADEA2228E4646141BC941A4C322A78B81692E254D205D5F992B46DAAF827E7AF1AFEFDBC18FED0B29E54C2B4C3712604C721E7B6D6CB5206CEAB83DA51A3DE8B84C3415D3D3075B76B9132A85C65EE7883A4028CC95C5CD404F738B0F8F5C0E0818DC79528344DAE18FBF4E3700428C0A9A8E3A6623E82D62F5C735B0A6053F3772AFEEBACF963E5D9B67D6DC66EB6CD3BBEE00D8DD784CA6026DB689A67A1869EBC4C0C2220154A48E1CE35CF2B723164D018214CE1AD5E06D7D6FF8244F0A13D25D2BA2A9A2231195D0A67FBE012DEEE96B9C5B2F199764E58D1D5C74A94C2E63F147A699125958905E215B98CA9DB6DC789F23FEA7A40DC152978FED2E7D7F57BFC54D2045887DCCE36BB25E8CAAE668BB7952C763D241017E8CA958CB421BA16F315FD73655B963B46D3A5112C37A9DED1D12DFBBD78E03A2999644CEEBC1AAC6A9317A034EC5FC78495FD2C63253A9FE793E0F9AB9795B6F645CAE212A731BBE5206638CA540D89D31BDE07EC9DB72C1EEDDA78030D8C0836A2470831EA6D6CA6CDE3C130DE2BFDA5EB15B2D3D0F94CB2B0FDB0F21A0DC53036E0C68DE57AF058218F167177D817206C91E75A8BF5631B094CA2836382EB64EA70A08A8E504AC68BE1DF3AC479FECD569E597CC0351DC5D412080DEE94B658D3CC4DD6AA4ECABC19EC03A20349105A42D47D731811BAFBAD382080F906FA46F83064A54A889462330C58B7099D9F4A8CE7EA6A4B65ECFE61B42125EEC782EF59DF00AA42760FFDA335197200DC600078D5EDC7273F2962A389611B96204329FDF8EE1D425778D6FC4A37971AE476B2C908E511DB521B298CB74431953ACE414A2EFA0E57898941125FC1E7E5BD55410198DD592AD0B5B6006521EA84EA855216790C5508337470F1EBA2EE3732DE3599A3932CAFB504975259365313B9A3731F8A6A7FF5820FF20E51A8691CAB0082A4930DA3B2B2E59EB0AA6FEB1B400919EA1E010A21F8E16686BC6C4A447B5627B76EA2CCA85E6B8FC00D521B42416950A0E457060D2E2F3C1BBADF5362D6AC65988C7BEBA85EF19C169113358646C34D422478C806D7CE34F57BC828E0B60E023E89FFBFB294125826E9B8AAB75B98CA6FEAEE72905064ED21223F849F93C77AA6C077BE5F005DA7B61771F303ACE5A1280A7D881975F36358A9285FD1785ED3D422F6F5E15DA6C3F2E5F3403AFA61D6E30D636F931CAB73CD826584619B22ACF011CD2BE3B807990695BBA4C9C350F87F9B49AAFCB3902AC3BE95692864526CA69150397BCCC07587E5B3CCC9D1EDA562641B0BBBB8C4EEF1EEF61CB9DC5A40FB6D8C155FA5FF68F6A0C5983BB25A898CECA1DD5BEECF9A9A0B21923E6605E9F3B0E71E8EC718E91C390375DBD794D97F323E60891271FCB086CB663CA49A51269E3438A4B896DC2FF2A158E8936FACA51957BCD3F117BD6F4A20262A6B0830C4504A4F3FF6F396024C32EA1C775669B3746D278BAB639124A02E1945C3C30D3277818BF2FDA813C1922B6F6308441FB72B4093836AF7F4F8BB0FB7CAD54B6172A923575079FF4CE303465FDBF74B5B8F2168B97A8448DE63A4DDE4D9F026B07BD90CA67F597AECB0DFE443A7B95F4307303DD50F26EFCB1FAE451E7C52764FEFCB4C6E555D5127A32767B7B3C48B6C214077DBB54C6AF14A991E72BE75F1A66DF406226A83E624569CF33215EC21AE99CE28BE4C80CADC27827F0B64E84C6B6627B10C0FCC3AD81534AA06651190BC1E8D16A307D284E8EC608328BE9B8AAEB1000E3E11508432A9AD1C3929F26A6F0E011F921BD5ADDF53D3674C04B076A8F6F895F8B48208C69628B72AE9336010401337B93536E6952EE04948BBD3AA45F3408A88632161DDA6FDAAC8F3214F540BA8884B753A4AD621356C42A1E1C655FD46B7B77180CED48AAFB52EDE281FE06EB2A71751C3572601078A7251BFCA2A3201E1D23B197A923595CE2FF32C692EA33127325B7F0FFD25B28D5A9F12D9EFCA0153267EA49AEB7FB724C269AA7C3D4B3BA6CFC19881C922FF7AF8ABFFEB0E9C565CF3B091AD0C4C9704378C43478BDB49EAD247DF9D6F16A27E7668506B4101CE1C595D237FDD97CCC1A784D2EA14E842F422CD5DB1E4F0F47C5494990C2397F44900E1834FA9F616621622806A201511533F2C7A6C15F63C75AEA9D38D559DF48A479309DE6CB8308810F39BD3D136725EE5F2F57A8F34C4FEF0472B4660FFB4CA469A2EA1EB7D1B98D3467CE2A2FCF980FBEF068A9935B4D48E4CD075C4DEFAA80766A4285D0C50F42A06C5890F2F16E1E52BA3C23A9B1693597CF69E3C275FA332A67CAFBC80200C7195D97423911D49AAE8992A939C235299BD19767EF51AEA9832E68B76B3C983DD7CC44A6A3F37F386EF06AA752A04F1B54290B52678D604DEBAEB45E0BA725A579400686CB80BA51906D51C0146649653C1D1ADFD5FF94D154E2A5D2E367DC6666BE3C5A343323C1251EA986BD6AD7A499A9F36518E88E7E59130BAB7E69CA4D49CF0CDB7B15BDD346D41D3C25A5A46F160B86965ACF2ABB41AE61802BD74EEB96927A6B8D0020 -MD = 83737BC6ECD6A365BFF957ACBF2A870E81565F9B275FD20B18BECAC7 -Len = 17987 -Msg = 203A990FD5863BD0EE9519B7194699581B0C029602D1562BF6ACE46A4FDBBD7BE74D7FDEDD16B4887A260116F0786E371B09460F583D2917846BA1233A21F8390F01F0F37617ED2658845D5D65A6956B39A34909EF07377FA15E5D4C7F8F8CC6F623FCA6DAB6558BFFB17F15E62D7639AAFCDA2D9ADA6D2D7CAF26F19A6A204D29F8A3D4521A425767AFE0183D761F5C11B85592D9797E82464C6C0B0D1F58DF417FA5D196576D4C400ECD5926B01513E74059EDAA39808DB397F27E8A7064277915561AA167DEE3AB20F3EDB7C5D21FA684EA1C687CC15D90ADBC08C87B150368D97E4CCB8D82D9BA8EE6E8983052381414DE151BDEB0389D352D5D6806D77F6A75D5A28D7202CCA1F2AD0D6722A60516856DA3AAB4C8278919B6DC45CB120814971B7976724686C883CFB1B072D8EA841FF7B29674AE4686FAF4C75033E73F1F90D96C09DC015E549BECDFFF88EBB8645836B983F7CE8EF56ECEB419695F76B84695EE3F09FF0D5575592289787FBC64F190E0EF5063F8A7167E92D689080F80E709A1EFAFDAC93DBABCC0FD4941E0E91368BDE57292BF32DEBEC0B9FCF7B8FB256D614D08D4A2A5549E34B3E2F527432E96A5257AE187D4B66D64DDE2E0E34523F59FA74A5EC885261D7672D152E989BCB8B116060651AF561ACC619F062ACEC8F0270BB4BD3C96E63479294510C2EF924A6BF1658879F323FE9022DA06EFC086BD8F328BDB5EA1ABDA84458F5606909971E8BECC7BB59474D1654EBF85B2C2DEE80B8B67626A11A636FAEDB2444ACF9E25B544CBC04F48DBA7E39012B63B581012A8457BCBD80A751E22A04D2618B7AC04AAB6A9FF3DDB6189574FC301EB9284A67AE79EC64A4D22D9AAF2CDA673540C4D31B68AD3A32AFAE4D3A568EE974B5588B2E7EF93C053D436BC47A67CF73E9F3CAAF2C837A59F8F217FC2DCB3875396D883E747B0F4114D5908B87D60866C3FD4665C5ACA01FA72D9789EBC9731066962A442364219029316BA367816ACA2363DA6432D1EEA7EEAB875D6BCDA3D919C08083073C3FEB95F2CCEBF6CD74CF5309030FA313F4C76472D649320A4F7964083E7C535841344F7342AA4EABB546ACB0D99F8B6FF580D9218BFD174C91D543A63D079A01E712A6E1D6EDBEE3BF60733115C6DC7BCB36B4270B82A4091F9615314A3299AC39310ECA67413C6C7532FB985182F2103DD75079971EE7BC6CE26781146BA4814FD9EDBA7F90832506C840326841190134D4F24099833B246F3D1185280F5E6488489DA9FC3F283568B3E75992871D3CF85745B490416E57C2A87D0CFD7A1E316274456863864322C8501FEEB4D072F707E75A3E1222B9E1306D697185696367CA2D81E04004407F95CC9A5BD2C38E65C9FA0A492AC1860251FA8808318649758EAD4B6219ACD89ABCADEDE00575654E11A069CBADD20F8EFC50DE92CAE2508F80EDB8A186A0AB10375B9A271A48DDAEA7D397CDA6438F99718257866155B65E26303FE640C2C3DA8FF8B99974BA233A0CD7BC8196349128965DA9EBADB97E819435E23DE10576574FD1816F39B7B79C0839C3C235886C59265B0BC02F0DA1D7CDD1896A304A4501A2DB9EEF356471402E7024937C7BAFBE925A8E8B434A62884FF49AB30518FC337ABE15CEC4860EA11A795244671E62FB1EFD5771B5CE6A169B7D9BBCD7515D352053C76C2F37388BAD54EC9395C61EA51521EE80090125FD26BDFD8E0B66EAAA1D8B9F04B1AAAE2A947C3D9ABF155D728D99DF85376988924E112F8D94687D2D8A1F9ED9FB13F8A901169C4FAABA6567A7DCF800D664616FF5A2C850EC004CF1A59ABBD7447C55CC21471E6313A2B8B2E4D498F1559182385E7096FF881D746047C2AFCD2E23AA4706ED8ABBBC27D080A1D014B1F89EB370249582D971C2CF0BB5C8DD90FFB18266DFF5DDAD2A4D79F1AE55608BB442F90A7E1EE696E058D5B13101E8F856660FA26EB039B1F36216F2545E293A5217348D361B15226669636F9F276CA44CBFF883CA759A0A724B6740F414E0F8ED3D0E44CFE646302FE4DE9F51748187C45E096FC0A6009E7C2F304A85358D6FFD973863DFD60CB55B2361A634AF2984FB21FF009B493E7B4700672372470D4C9C91113B513377C5F134C768BBE02ACFCDBC95B6BB55E7C0FF93628A1977AB833C2D7088A82896A8AE73C9092E17DF944A00C1643B7E74180BF114C21CECD5764AB1AF023F1F17DDC0B8C8C7EA1565EF5DD3AF8F7A44B722269FDA7FF9D585C1E222FDAF7256A0A96EB29EA8FD59DE63AAC02C0343A51566982BC4D62BA8481A1B74D8A329986D5871E5F1B9647CF392183C55964CECDA71B7C0CEF1C880A771F398C1DD721B15C5DCA7F62C7A9C982229195D583F6F7DCD69CC050CFBF1ED89C9B5D13DD17469CED24B94F122E598947012BA36BF4568ABCFBCEA789EE2D62ECA91AA82F22BD395E8250D44265B4BCED2DA49D6FAF223CABB3427E1783FCA9C9E40432357970A23C27F787637FBE33BAA01F0C1144BCDC81F09430E73B0C08069E5C2FC1A89F5DDA245093156D745B428CE920E788CBD68849E1FBADE8F7391201B2830DD057C9006BD8CD006B399A98C35C41F5EC47F7D48F1D9E05F7F8D7F1B31B34E830B175984722195CEA0307881894D916179D0BECB5942CFFED99987178D3BE1F4DB74A9529C36017D2ABF29A51195D05BFB4E641FC9B86439DD1C082E8562B74E15184C1E7D3A4BCE151F6C73A484DCBB76F7A603089E936C318323FE77FF8A24AC252929971771394C35CE41A36C8F8960F0667150E9DB91CA5BB3551C53619E1E15E1B2E3C2739B9688E6AEE09196F67398E8D1282219CDD3C3360EF16A562BD2ED29D879E96EA2E4A388F78372DB889DD6A9FAD6CEB053C2D2B3ADB857193F9ECC09018A5547BE73DBAF671C271264E6676AF096EA00FD7F4980785D3EE2B29B458B95EAD2CA284C8DD5D8E5729C60BCFB20E1A238E74BA57E29D1246085DEDC7B7FB9B1BD37CA6B2DD44737A89862CCB2761D4B224E5EA2298E119D6373961CF7D261709833777037DD3700489D2E59D7E93FBEAD57C9F94E10A4837DCE933BD16FBF60CADBC29A055F4444E30D1DF6189BBB0181674ED196DC3CAC40BC5A0EDB74A2548C4A894C17BCA585205A06D6F8B14EEE370F0B86C2F29F5E7A02DCDC0 -MD = AB791556661F39556E35595B546FB4BEC7BA36151F65A810F1E86A96 -Len = 18050 -Msg = 2307A19FE608AF4496DAA431ABCECE34E39367ACF7F7A0829E380DE48112E34C4B6C89937EFB557B67B55B0A390B1DC766F5BE1A6A1F2F6D7EFDA50B18F72F9C9BC96AEA41EAE69B37345C2003D2359E258A7B681E34DE6842899D7A73149529338EDC4C98D72A1C39FBE39DEAF657BEA9E3553AA83EE91CD6B840E9DDA46C3A9208FA916BA82EF9B27D96EE38DABB0D00AD83E4A59ED301194C5A911269FA3E87A1EC80F3D211EF90559F3178145A86F7D870E5FF490AFAE99D24629CBCE8A4510DF2F1BE840B7D25AF00B9656737D2FDA497333A4D3B88F08A99C1C1F2DB2F2E5FD5E03D11E488E12B44074B5D93662292A03EC9FA263C5C08B63C71DB9FBEE1341BD82996681E5094D269C1724FB43EFC9380E4A94DCFCFCD41941559243E10E23C1FF3814378B04A545D9165CD338BBC95A0AC454FE303877F279015D5E3A33C7F48CE073808FA719D17D85FCE28BE19BAA9A38255EDC397C00248AC502C956913EBABF3551FA28832A9F325A4128A3DA4212BB35148B7872C8CE4E248E1C1ACABE43D6FBD79038313999A72605656FDEE792482116FEC2BB31EFFAD3A551A6FA64C324C1874C0F1923E453B6737EB5EBA8E686174719E33356B192DB9AFE19D4A5E19AD7119DAB3E5960FC29444FB6A44B4674E0764BCE518C4635E3F3E89BCC5100C7999BE894AF51F9EF737F6C535C25CE014E4E15D2EB217BA37CC1FEDBF1BF6C78262198961F6E7D314A88EF05DDCDCC04D2A704BA6997EAD32B945CDDF38E2793CFD03836CB201A69906CC3B1B70EF6881051C4A61686255A8C758FE5540D3FC4E898EA697569CC025C81A956D6B0C8FB8137652E312C6005FCE3714EFF92281F3334A93C39C3E6AA4A64B310AA995A77EF35F3FB4717571E6BBA2C1A512B55D0B56E8CF5194594B853EAEDD7EA2BDE9AE2EDFC2606CD453D3FBD49BE051DA268266039980BEC91C017C7C0DCDC745037549D50B1EE2E7C46302BB24D86B7FEC1BF1CD556813143B99358F017EC126B52AD0270E604E7A974A82B9766947A8F1CA3B1E863D97F522B75239409A8F16FD20D916DC09DAB4DDE8C4C8144BA72443C544B4A4D026E464A3C7F6E65A25AFEC10AFE62D0DBC93AA7DEFBDF71F57F3BEFEEEC5918C1C31EFC2E4D7CCDB0A6C2D791683D99C6544D6DF8DC3630D348CFBB2262EFD89541262EBC3571E65CEE54B97239377995C66E9F01C7B168D87CB161FE5EE99EB759432FC71A5B006D11BE42707E0D3B8227381FA4CDF81297E154482C0EC332096881EC178EB44C36A5B2FDDAE5BC918F07E7E30E095C1359B4CE5637EC4814CF2503C1E11F543704ADFB7F9ADA87CEDA6E678675745F11E05A2B1A1D466CA2AF1C23CA8B8BDEB1FEB73F364763653C379FFBB247FAD8A7AC444842608A8E6E08952DAFFFC66021833918D011C83CC86CC448E6C7F3489FD32912926075984C2D4DD227078C5AC1512729E78D0E16E7A668F5BC77033956FD72AC757B5AC5CEEA0BB7304E59C3447A00685D121D2EA8432E2ACA10B758C12AD9C4FFC9CC00EEC0E5432D8A68FB38EA61567F88515CCB9ADAFDF94D911F37C06C0D8AE5BC08769D28C5DE5DECD5A63DC25487E27A601917ED0BB2F7827973A24FE0F1013B5FAA62F8E8C1F5AE1DB9D37462A416897B595CB8625D45CDC7B1DB809A7CF295E39CD63DA48210D0284E679CB30EC04BAA2540AB7A3BE6979691EFC668C8A546B900E512C4B373E9CBDAA2D41FF01ABF833539DE344476E8D6F05D584894EF463A33E6A120A8CBD3A2707156D4B6487BB21E027D1170F16451E1751A90E839B7B8F8B7F80C2868245DBE288862CF247110019593F9743EBEC82ADEA7F3184E596F2457B223B3722FF2A0AE0D2B076BC4438BA3F73C7EC1FF1C2D103CCE33AE644CAA66CF59B6C60B38C882CC3D2AF2A9343D1C208D7AB35B87F9EDC74F45754B42502378692E81ACB2C357E130663A6DEEBD38374D4665589364B851D21C110153EDCB2BD6A21AE6009195E8AA0364BFB2EAC47BE8B048FA104920318A40ACFFD07A8F445ECF4ADBD778362264D037D493F2BE8D60D998AD1A0F0C8B1A6FC86911691B489BDF543D31F3EE42983406C0979A761FE759840F11BFAC59510E84C2B829D152040C9B8FF3C38D2A111D431EB0C77657134996507F24A7856256731C65CE89697752F9C6BD562D5926B82831C384987AA5592C1B14E92C551D2AF6355A792364B1F091FA9CC349770FAE924FD0286864E4FA7C1756D99E17F2E31350D64A1721EDC1792FBC044480C5A0E097F793E52630A53B110717102A38A78F470B8CA4BDDA18D78AF598928CD131143A342C4F154C35BEC215B48504AC01DCE3E0DF837A6D962BA44FC8EA65175ED50F9C2A089733AF9D349AF7C9139933AF548434C5504115BCB0609D6E145B22FA3A26489155A7DB362D2827F894C76102CC26AA87AAFD61EAF26008B88C4B63667309DE319A128F845C7B06717617BC052F9771DF4F9C8E51DE6F62B4C4A46737ACA22EA181F280F8DCD9A725467003BD19335E4AC43D7D65080ADCC294299919DCBF0117494D827E6370E9E2F96E3763AE1CC4E0402D0857EF6D84AF992C9F718B4B755A45F54E05206F29831CC645A557EAE032EB986117ED3662242CB42ACE424C1D73923B5C6BC801BBE3CB9538578A084C015C7E4380525483E50DC4C5270C2F2B111B1EB68CCA289C769877F8D54FA85EFD1EAA976A07E0F141A0FCDBDB75823BEB371BA26697AF9CFD8C0CCFDB4C039EE92EF9999F7A2B07D12600FDC90ED4DAF8511F0D687962E3CEC57058C3064E8C6B3FF6E8A62CFE675BA6AA0E846D90B8C06F6B710D788FB6434C9B787FB257703E5127BA5DD4C824398BAC06C2D7E216994895DAF185B576073AB402A3613FB8C8D8704691AA62227A22C6290E3E8BF1A56C38AFB038A9FF29B42AA1B1E878FB6723F187469C03129739EA54FAB45F2A924944974EFC8E23DACC888BD913349EDA879F97763387543FE3E0FC163863424D8E4F3073B2317347EE84BB30D30A0D687664F3B202ACC7733A856BF1AFE382AB946F3110FABBF88FFAA8FDDD948179AD7325EBFE7153B22877AE06777459F4FBE3C9E8B813725BA3DE1C3CD9ED234AE2620427D14116EB9B674991171B8B715B99A3F34655FF4C04131B3B5197D37EB75B56518B24800 -MD = 6211C91C3620D1C05E91F28BC05AF0F524888E72065F302595A9F544 -Len = 18113 -Msg = 612B22991818B24672C01FA30B774AB8E460565CE580C0ADF84209865844A266660E320C81B06EFD160B05BE877627AF438208C7D3369F3F0A07D68EE2C55FBF7F9CE584AF4F3932CD7D31B52140FE5E35ADC2EB65BE85FBA8EAC514CC026237962797DC2BEB077A680D16FCD8F93D175061A06CAEFEFCB2873B61CC16C1B97EF85D5E2E940D3998BB5F6D1F9482F94141EDC2134DF49CA1F982B45E9CF3CDBA060144D5B0A88060EF6889D0F4FBCBDD11988AC4D32A5FBB7850F6D314085B5F5F71118312D49171A31A1C15E48F7B4A7F9902D5426E723DEB730A9B21E8768A243733E7058F80E1EEE5200936D1C3DE4E172EB850511A5BB45B66BBB7B86D84D4A34C0AD97F16EE1D4B00E5826546959D2F2F29B53C3D0E24F71A75B4A6827AD9BD83DADC1B7E00C9907EEAB503CFFEAC810A369A36F3446CC5D6D1D2C6D714AD796437ED470D6A88EA0B7E3192559CC38E17397001AAEAE947D6B4D0F86926D6F0AB9B3738E007C134BD1E6A4A6B006B3CD1E76E5A252CB5CFFBB9D6A26C05CCEDFB21A5DFB28B09BC5059EAC8522A84FEE2E9C53F708F94922F2C51688AB9EC13D56B36F3BB668428ED8B56089685BC62E994BC7EE5C166FBD0943CC65BDE432D0A7C511E5D25A1E5353F4BAB3B9A2C8015295C43C94D39E12CBF0F793FBD06EAD3B8E95AD1369C02D50241580723EA7C0186C07C9295547E7AD1CBF92F1ED0EF8DB133A4AEF23C53BEFC6E56EA368A8B4E3F3108BF2027EF6795EFEAA6F1FE91BAB4BCC890A4803431EF26F0BC0B7F192746188516F617256D6C13B164F80215DBD952B846208958931B73A5085832DD6EDF77BCF36B3E11781D6175DCDD0166564B340371EFDC3B51E1D3742C7ADA95D865F6AED5DC74B2C3268D0597DEC3C0BBB1FDF0F0901141543ED86985A5C3D792A1261A49C329D11B42882420521EBE490D717A33F15AD00B784934988C794D62B45F725DEE8723950D86143785E519F0B8DD6FC3B79A2DE040F4B0DEB6919EAF0FD8F2CF1BD220CDDD0AEA65A193C489D3F001F95B63655F35CCFC3BA79798389991904D786E377D683B504BA7DBFF6193F38BCF8CBC12C103E082A3D756D777EDD87E6E5E136F2B570ED0E86573F1C2869A147552CF9E3A3C7F325353E21A68CB519DAF1D3F10D4BE35BC4C24A7AF9548B47B060EEFC95C514C7BA7D7B12B2EFCB654FB167968EEAC435D4EC2A38A509D15D5DE9DF1A1A1575446B89DC9C151E15C67EEE38BD7D6185EE5DD52C72E513F0D3ADAAEDF2DD5918524E14B74A5DF94282BE3CE0A43A3D881F0211C89BA6437088AA4E08D9ACAF683A011325D666573A1AC0ADD81E9B93617B9509D4D1AC499B84859E099098D7565F5F01EB4EF137F64B94E522B41EEB2776FC7967C1F42F62ADE73A14DC34EDFC1A69A23DF589840206FEF398D795502103B96ADB1CBE41B9BF80EC8516A5F6D2CDD7ADBC18E4DD2E21BF9C5BFB89DC7D395F70BB9EB4A7E3F343D890EBCFD8779976F2F5ADBAECED33B1F3A531DB8ABD206DDBEEB88EEBFA9C279EB92C9C07A5D426F76E50A2D006A866912CC83CAE152F9046F1DB5AF81DEC03505F370822E35A032041C1726427C6BBA0CE7EC2B8A95E8F3A15206F900124D8395CBD141D1C0C9E23ADCEBDA9D222032E0726DED15FE2EE3F6FC977E82B5C9E0D7878F9BDF95F1A42BDEB0A248E8945B537BF99F8203C07BA041E20472E3EE68415DC04D41A2A8685E8C9403DB8A22677189140E793366077AA08B7D5B97A7EC8F215E0A48EE008FBBE4BAEE4DC67C7369F3180FB1F758649C1E5177D764C45859BDA8C6F532C4F2A5469A5D00725157CB7F7BBE735056E9A727899B18BBF603EDB087C6AEDF19909E579812E3EAA14E4CE89746FEBC7F60BC7F198D4D06D9ECEFC1649CA54635929BD22AD22D7A933D456B9F426BB6BF3464F2E601950B1308DE49B5BEC2C7B056F87FEB7707744E0B80D04DB08ABD31CFD5ED40FB38647D5E80F5FE73E3101B29839D78E611948EF4CAEAEB37E32715E334723CD2EDEE07DADEAE7AD0B91418611992D757B9644CD524CC65293CC5D0A61D54ED701E74E54FA188E0BD0B07B0B304D64E0033A5CB0073A5242EE31E61D7C85CE66FABAE2CAA06D3E85897C9D6690F860166B0E5111652A4055BC1AA1C5DA5B47C29B202BF0800295EC651F168496F45C59691D8E6AE2474A0D1A9715BE29E1C6412A50094BAC4FCE203ECE8427BAC5EB331B67E505A4302F5BF09ABFE4F66EE68F11DAD9C98847BAA93D86B167AB186531BFE8185C4B563FBE8CF3A87EE89E667E53E63CAA451C4C58A9ED613F57091340FCF65E1F70AA8BD6A9A664C66A01E776B115144626906F0058D423EF110B2E23B0110F3A58D27E8E6DD8AD27D629B3AF4EA8E1294B9CE6A98C002AAF605BD913789582D18AE9A7FD8DFDB4CF3F71A6D551592F791F3A963A6ED33F5BA809262CA9999095490E9A5D98F3B500B7E8C055FEF5FA4FFE8099965A315FED005E228502F3BC6EF2AADD22EF6F90FE934E0632FFF27E97A4FC02FF188DB9FFBA8C31CD695CD8B6BEEA470DAE61A6C496CADB6C8BC41B60D6348CD64B4FFC92D20A77972B444351A1CAD15354BCFA365E6E3A93F69FEB784FB6DC4B1900F8DB053470A10C06D06733BCD84D65073A05CFC71C23DC743D911EAEE14A077EF020E027D20B7A2B1D92C7E1B3DD4F8F72F7E81739BA704A1B948170F1AC5603FFE8B0040DA1A5DD0682340039DC608A03206399D04665A2DECBFE351C4C9D32385D84852C7F479DF8A8623DD6A0AEF6615B81BB7EB0199B1736E229AD5739967AF65F8CA9347B3F8B12566E11BE3D9E8FF9FDB7B3F7BC1677FD92A993CCF4F27FF352D5A6115ADE5C9A0A930DCD616B72107111088473272FA5FF11487936E700B0372DE9F543C93BD78C0DC479129B6D14B822FED4BDC92C31CAD944F9410B3D72DEC65015106E50F0C42433E734259B922D7C3F208FEC3A7AB1A2FA3BD1C0E2B366C2095F035937B713D93C3D4EAA67F7AFC651F476C03404546A136DF80102D226D65DF8173ACEEF929C0D5FC5C847407F357B9767176386D71D4E14CE2424476C91BF1A0410CD3C2B766C3F065359164ACD70F36115C30CDA33942E55481C0A04AEF997DCF3BCC472146EFF839F1991681AD8007EC76422FB9125451936733E7C578E088A0A9429F1900 -MD = 46B9BDC866A8237A22D518610F8FCA5A0FD5AE88665217EABEE1BF54 -Len = 18176 -Msg = 94133B8E14785FC19565A3AF0AEF60462BB7F8045E2EDF4A836718561AEEFBD0382434D319211C670FC699D25F02EC608CFED9786B7DA70E5595AC816688455CBCB4449536E8AD20863D76937796CB0C599918A21A0133B6C625B2000BED8884FC86356FD742AF78BB55D652CE4892E7C296853A40AF29116CC98D38874CA0F8BB5F6EC8C04DD7F3F9681858E0CD54D8F9B50A830C31A9781E70F63E5922B08617802104044EC2ED28566E39534FA8859573F024CA381D87BD6E04607B9440D3B7D4EF0FD172A6B8FDFA2235D46BAAE0778467BFED91D33C8DAC9DB5E7EB6C69FFCC2E9F2D6B5F53ECC800306103D86CCB1E3483EA2AC349EBA3833174D5CF058B8CA82855A938A6D38272851B1977319AD78A96A59B7D6300836B0B219974CAF8776BAB7ABF4665757F9CC941299A96998D3A910DD41FAF26D4AB54408FDB920FDE1D614A08C2F02716A17AC3A98554D9271F644D0D74C0D4A75C663AB8FDCBCBB75B250096C156366EE1A3DFDC6B28299B38C0C14BB685A89ACF6C41ACABF6B3C6745D08F73811009E9E5EA868D469A0C8CC35D83E99B2DA57D202324EDF0558E7632DE782740CEA7D6C4DB9590F675CED9E6C27C8D39884990D7B685C89F70E55E084AC8C1F366A2B8EA89370E7F7D724EB9170729E20BB18C7026BFDA8BE4A9813172B76F72B7FF8FDD31F3AD47282979DFA8704928042C24AE398050A4F4384517901A3A2D4230C56A0CF3BCA928AB211BCD2BCD4EF0B73DAF60240F39AC01A7AB29DC80896F6118A56DB957662C2058F045824DA79DA35EFDBA1F8D71094154643A570DEA95F30CD28F28AAC3F3204132571CF9CB688D27ADC77662AE925B75F3FA3854FB849C4450D4CB6169788E2AA6AF63A30C3654B81D08AA118773B87D0F76B7AC443246658662BEF132ED13218498F0E4646EC7782F63B0169DA7890C682A2D046E13C096FE521E4E42851617DFEAF85CB366C6DA7CE656553264BF673906872CE8EF4452C0993B2F5191F2E83117E2E8D66D3FD8333F0DEBBC9D2B1ADD31ED807BF3DD2DC056A2590F8FB1CAA31D110F389DFB045C26706802ACB2B4E7A2C1E5971D07920A58FDF2E30A48756A2BE92FC4729E5A779D61E82477603CEC73088C12314CC89C99C0AC91E41F72E830956F351D560136FA2412F5A47F627F5724A73FD4C584C9AB62F028342278E96B7F3F1EDD270CA45BC8B5673971007FC557E9C3F1CF7A65C80426502213EE2D5F32AA726C336894E35AE3FA3DC452F1E13F94D6AA2BA5AE7975C14C3C2804FE71998AC481241C66FB81AD62157E4058884931C93DA6C377FAC5DFAD4C6FAA505461BAB4FA85266922B2827BF3B9A431EAF25C5ACCF839F78A0029E0DBABA8A2D52B7E0203263B6C265B03C97600C7539129C3EBA3B55CA8820327920559D86878136E40460C45F5E3ED4D0A84E81BC2AF68473AE7C9EECA62E5591729DEAE74C4ACC974BB998BF6FE01CD2A781F10146CACAC66A492905973B06C3917C72268FF89E84736AE386ECA2913CEFEA3D55C6CCB392D1B1C1627269C060962ABEEEA388791F5BD4EAEB1FE0338BF18FC3401BE0B7AB55C28FBCDADA3AD2B39E7BFF28F4F8F31173390EEFDC9927A066A554E8175B92EFB8808C92527489194C6192D7F1CDA78ACEEAC77E67BA502F794E6DA3DADB8C12E5EC436A1AE0AF571F34A9B5EDCC64A8ED34354E36EB67E8D616317075160F725202B832C7ACD649A86FF7B135960A3F295786976DAC96637D949ECDDA43E7014C451EE50EC752BB20C8DEFB199207C6B2BB0DCD1FB212E6DB26476BB3E90F5ED2B9CBB3F1C243DADCC622CB503D08FF4B266A742C5C61A4FFF23DE25CAD7C3D13C2AB50AD2AE77BFF6E1B18E593283A0BB4AFD6111C9B5D5D062F77EB2CE8071561A796CEDD4C4F819373685B4C3D3D14BE5BC20A72EB9C6C2C1765BA887608157354D0A5BC1F4158D23ECF30AE3B3BEF24BCF8530F13B7FEA54722B57A761169CC827634A84314F697B090425BDF9EBDF88A6B53515E01D3194A8DEC7B8E15BABAFF42E0E0CBD1DF286A25C1FE3934201EE19447EB1E29BF9DDCD14EC9508AC213CE17C6A5BA3BCD207D1E41ACC4FCF9EF40EEA8943DFFA282200F37724413A438BADC59A13A07CAF163350F2663D2B381C14363E2372E30FAF1381A8936B61DF5370562BDBAA1102B6589DB74C635C791942A5EC148F66DAB803F469F6C39DC225FBA4EC87BDE2D5EA31EB517F3A43835D4B88C556E84D63B26894BDADFC4624ECB432720D164BFA5F9D2A685728BDF1195910A94C304369DE61C34BBE32FDED451534276DE8E3697490AF835FBD8153B807C8A45C1E7057333F99E820032F8051FE8FD6075027041DB4BAF7693BA2200A671B37679B7DD088122F48925C64E4C3E999BE84348445898C3A1690A265986FF558D8C6E0F2FD142E1A93F4EB307E4CF2047211E005A42C92A431D111D48EFE4762DAE025B183A2DBC57C45D98484DD85339EEC68E4A6CEB3157161217DA7DF44029C1D042E4FC302079B222043323079BB6851FA732A9A2A91A6D94C1EA5ECAAF91312953EA0D246CCB56C9C234EA53031C36D3550814AA8CB39D77F77AE842CDFFDE17D915AE29B8F118A46EDB08EC5E426E30DC4DCD0B1457371EE18C7853B93936B8EB4B4334CDF6413ACE28D68B1E6EF72050C121289DCC107D5E859730F97AEE4407048E4DB2B71C91C30B63F01C2D02845F3192E861853942E6DF816067F4C2A8FFC475FA7192245A5463C9793F4731DC4A4AC3CA203A270BBFC9BD841A224D347F8D30EF84AFDF9A70969330E0776670EDF1347C716AD931EE7B218BEF3B62C3EC4FCDB6B41B9D42509BF4E844E7C85ED2CB6D40E0BD125963458F8E060C1DD7D398615357D7C2662EB4139D952D67573C2DDC83048A7DA7B9D669CC5002BDBCE183889AAF434A6182E32F051DCFD93692B9C096B57E6BAB5D22E72AFA2AFEB53B4870B52F5F3AEBCE58ADDC005DB10580FBEE6CB9C598260F364962917A7323AF20EAF3F511E2346B1962ED247AEB7DE64E68D6C5C1C14A92F606B19BBDE4A68494BFC06D76DF422EC182FCA8C0D1E300896455DFBD49C29C858C64E80A17C80B51961C0ED312F071B0D62D7625DD3504A2CE214AAEA51AC81CED4479FD9DA06C7CB02021F4F347E1F20D62C78A50A30A82F288407966D69D837F881FCE431EF0 -MD = C7C4D180C1CD83C9284E38078A5E4850748965557271FF0A848489D2 -Len = 18239 -Msg = F0CB1771B1F029F92715CB96B39956457AA72A16BBC02BF1B1E234EC8459C883F3520936E24651D35E0CD29FAF9C3235E6555EB1F36B54B00E6A50AAB5D9709A905F83C10A700565F044A06D02FD82B2CCEB1D7C6E854AEC8A51006017F235E11016EBE78A2B7A9AE2210638A73E24896C97484CF1C968EEE01240F213447C5F0E6CD1BF56F92353BCEA2AA5234FB252A9EA185635006174E0C1A8D4FB8FA6BD54E9416C76485B8D48A41671205C0BB4528209A08ADDBF5D2C9ACF78F60E75218A5D1018DA33359F470774B7936D2EED1263224F2A15F7B23249A8933A082A7A3058D0495B44F5E96ACA7D4092845A9F9B37D6D192744E7BDD5504027C365E41F3BA0B55742DA1D410E4C37A27B8A6DDC17C08F3CA6BA55C5E7A45354069AAE80984B19DBA979BAC0AC004AAF164A6297117D875BB7815049F0C0A7A431C253E0322DDFFB0FC2A9B98341AE2B2C8032750C809790EB17781297E258C47EA725DC18154B815E3EA04E986BF56A9F94854C252C781E46935BDE287FD55971E674F19ACA0ACBB3BC876F788C2FBD39E947073DB0FDABC269220FA7D1027A72DAF408758CD4507E83AE1F4EBC5AFA3BD1CAF3A28A901611873735A44C5B169D2660DB18CF0A23967A571ABEC4BCB4E3C7A25DBA021CCC1379D83EB9EE3BFE0336E5AF00B1D87671E1B120B5A3FF55DA2641B8AD59B463DBD8F9ADF76AB8B71BC34437F4B920BF5BB55786E2B4E743B998ED4FBF7973492544AEDDA22FADBF2B9C8541A8E3E2617F25F610EA55E4BE08800D24F12989D1E3666638960B7F37DA87E0387967C67F310B231E0CC5CAC94BD3646D933F49EE75F1E17F17E6C545FADD557C2C3BB9DE3B6DEE032BE13FEB6474400E2CC6B95E104505349F5669DD65186B4AF42F45614CE829E7919A08B06C5CB05CF2EAE160EAB009BE94F88A6C38B450A1446ECCFB2B70CD5CE23240C0BEF19C8F2AB632ACAC0F94EAE1E3E6ADE716088DC247C901EA68B23422B82D10687B6003F6F5529DDFCC81DFB863084B6EEE3CF03BD962B4BACC85E229B797C1E9A24011F245042DE73EED7C11E447634D7B665F4268525C6B3FE4349724AF793200DB47CFCCD0EB888E52EC192EDC6653BF06E172CE6DD1C1953326C248E884C3578A5F57C60884E598F412BC14BA3184367FFC71E760B5F81E9481B2E901D508AF4FEB6F85A94B73E6A9A7F3DA48067C2BB92F6C7F84D2F5A5163C6A06F889207EEA6F3E23B103DC6AEACD979D69485EE95C5C2D2188C848BA0130567B1CAAFB46C881440A1BFEAEEF741BA56D948089757DA2713B6F394784522D4DFA0D9D2E31D8583409CCCD74CC67084296FAB205D956F9389C1DB91A29B5B9F0C7E25905BEF61654854ADB262917697A023106A178AA2CE1CE4297A449E6C735470ACE78714F5BFB67EF39E7D991F005367AAB4AE2238397B26D0F6B8359DE1548C808D47CF0F3DFA49DE5F8C483456FAB90CC01E3B8AB27E2778497CABD4C88FB115F1D4D947B06FB9EBE97101978D18255411B3B745BF3A5513BFED6C347F8F5499456880F1F3BF74E224EB238A1236DCDBA604B7884A1C1D99F238E25E76C4E63B5ECF643B7786CC4EFBDACCB162D9DA95627A0683F6AE0310B07707651B4795D977B6BEF480EEC7426191F2B9AB42F359FFD1394DD50C0ADF7E6393C08A6CCEADD613D0C57D526569349EB4785F1EEE07FE060B44597674C7E2CE6D69F48EB6F58BF35A6C35A6870BBB9274136EB023ABB7A7FB9F4EA1D473C49F30BB2E6CBBFF971BB29903CEE8ED01B014D73B235065F4D69A5C46DCED810F07D8E458AA93D3766966C7387B567F3847FDCA0DEEF693A5F3AB18EA41699EE60FD74F74EAB3D75DC26891FBBAD4E69B1F7BA4532CC1084604A3B6B9D96E66DB1F3666839594AFDFF0A184130976D73A92E576C68FB6A2982F27B9B14B1E0822B626DFF62E430324063F5E1A748603AC57D4651F8E257712A3CB4DF53844263958002AFB4260F7E183C8F38D1C2FACBBCAB4126DECFF54C28AC4A3C10142FDD9B33D93B9B034C0C216C217E0ADD9E7DBFF212B62AA7D220CC1F0872458B5601379CD409EBDAD33F0F324A8AFAC45458E2688D4D4E1897A8EB3B30B886ACCD87BBC93867B07A72C6CDD2BD1B138FFCE31B51DEB8A9013B250B265EBE1AD9BBB29D611D86F20DBA626F6E9AEADED1B82219E0AD9792DEFBF16626EDA77EC55493A0590787E509AF261AEAE32A8188E4A141A2F368568BEA425B8A096E69883AB2677CE3BD6E993AA84BB04BE34F4E70E3618EE8C23089AA33708C73E6AB502D064A683BEFECC6B37FD30F8B43989FC4E81B42565C1DA607EBF24DB5B41B58C15DDD91D0B046DEE09C73CA7BCBB9D794D379C4C7FB6F8618A0745CE54FD78DF003A2531E0450C1E0B1C90EEC8B1CDC9B177BB3289178B0B126F6BE9BAFBAD7F97B0A8BC44125A93FE404B8779B91744F3C29793C71FB4AEFCCA83FA9F6D374BFA2EE3AE33E1F0EF9C9C7EF07879DF4269F2C18381131D30519D00090891ABCFF6F5B696BBEB0BC295819976364969E0FA04F2C7AD837BF691C635513E9AC696D7E36378DD619A62E26C9796E9F53F12AFD65A6DC886688752E809B6E07E7E943F25ECAC7EFB469F5B11E268EFD1098548698C0B7E47129918897C9F9EC1B20BDB950B6532553DE1AC5880DB3FBD1C1E2BCC33348BCDC6E4EF5C3929C1780C9204855F4EEDCF36A6497B16B965665F3CF9F47C43E98BBFD7EA1ED8457B1465B49B69F3F9C13875E0EF9F9E7B02BBECCC494EC4715F174A576CF6B60BE1E69FE80AC6295E96BC825ECA6C64F8566D14B95DE5F376FE2383D30B5B62F5DDAA7898678D90E8DF57CAEB098816DC30A94221CA670D781905CCDD5925E8FB3832C445B4BD5A3A93A715B313D97D4BC27B60A70E78CB2518511E4D352285CA6A555A37DD878E8FBA2833C03310F610ACB1DBA182192FFA3BA3713B1D053CC065C57F731E410B26B17578ED59BC8606EEC1370D3DA500272A6DD6BA07334637CCF570F58C40015878F7817BBA4336AB2151ECB0F7D2C9E10E5143EEEECBE57A306761FE53FEE9190E554D42CDA71A62E36641BB0E1C0E0467DEDBB34EF02FAD1394F92EF3B64F166E1C840E5107AE07C3E0DB33B6E8F27763A0694EF8667EF4FFFE319EC99C4A96CFCB0F9FD2B9B4594FA94126526F0B342A32504D15D574A552D22758115672B5F2 -MD = E3894D1B3503E9EC5DEAA9ED4AD7169E17D9119FD4F6B87ED308E424 -Len = 18302 -Msg = 26DCE4B443DA01C63B3F9C54C528D58973834A2618CD3C21D5FBF56B36C1B2D5CED8148B306652DABCEB78AEA6367A11DC480B88B7E7976F3FB30D4390C173D53AEA89EF2AC4D459E7600A858F920852480CDA6F8022FAE35DC6413B038607BE957180A5988B87903C05006A3EF99E89BD26428211DD7457EEBD46288E8E624046CEF25CA32AFB557255DF7582A1CBAFDAEABDC266DF955810CAC4A17B4B7AFA5219D88C6D2F280B4DF536A7817E1EC0677232D9E404AB897ED59AC8CE103014482B2A7A2015D65B9CFF4FB168B37053C7481D6B96031D874F4038DD9BBC080A3AB5778D96FC0A98BCA93C5E3FF87CA7BF4DD8B0CA1D3C4D778E0941BF91D3CCF213AF195F6CFD9DBD0ECCCE7499FAE46077E1E414AC5B19EA639746F07E19464FCA82A719DC2891F7343CDF941778BCC5CD80755E27D4308020D875B6F465ADB2D977947EC37ADD5C0333474C6091E81AF5B3C2335DC79A1C3BAC5FD79914104763FD8326CF2B2F862CF322F9A2A4601F885249091017416BC2DC273CAF7988724281222D5D6409A97B63CF0D03557A0DF80B1503DB0705564E2C7C4881133F3668040D28819203EAF84127E350F3BAB6798EEEE4246931E0B69EC575A4B91B48A63F8EB16C65736FB15D8D1E9373DC5FFA65F3F97241244E741BE94E508A5994F3DB57F0F7F271451C48B954A5122EC341102C9675DE43FE3E5C8625F109847BC292D15CC0D6216EA28F9A157CED9B2358DC51290EE1A97C33C4388BE6EC622A543A63B1582C768E1B3A9D025615F36A4B46A66E8A3FEF7C28DFABFB2D7DBE19F9CEF6E20F48176A290C605D1F9928EF4ED3C74B545448FF4DF7E692FA091D0EF8A25773234F811587B2A89BA7C946AD66B1D54EF3CF6139DFFBF796CEA309044A7F240C0702593027C93356C5C51C4599733D9844A3C61DD577F3E59AA8558A23E9FEFE8830935ECC4CD19C8D7997C2A5F74C455A515C65EE886D3EFC23DEEF71A72FCFAF04D51D61BD30897752F4766E168F6BF5BCB25746E9A53A68EF748FFD905930C1EA8A582C71168B5F8CDB97940B918857C2C1F917317BFAE9FBB982F35439304D2F0F317480DBE4029113061303D8892A0B2A2C15670BB0DF7169AE1C0E883634F415362CBB448170BC72EC8514F1DBEDE989FCBABBBBCA044112316DAE577D5B5AD22323A4CC67CED096EF06E12AAC4071D57DE12C92FC959D587CC27295EFED98A98129B1F66A3DC1E02296FA4879C85B1DA51F903C5AFA5602BB18A7B29625E63986409ADDCEA3BD4C9DD9BD936251420019CCF1A088C1EFED470ED6111297A244E070DEA723887B5C30B9440CCA1BA19DA7D91D13A4A3231BD991C0340FAE73339480971B48DDE2FCAE3EF5C3C0C1956DF7207D969D3CA051AE4A38777D41DF49675594155504C3A16B06C6A9C43012F2838A7060C9E164A05D9ADF692ABA28B03F3AF409439F0789243141CE7C3445AB2DD6C5510BEC55CC58DA9DE68DFCF9208D58A42E7DB77A88B3239BB0C9DB8A99A2781436FC3B19A53535E9A168E7BA1FF7DE505924C11557593CDF45E89B0FE21EFE23CCD9D62140A4104EB9CC6FE0A492E77B6B440866737BD6F72B370F68F1C7B85C726C99C323475C14FE2B71983AD61F4AC374C6C998C9C0C4B9B5BA70B26F2D44A6E4C853A41C244EA724EC9A996BBBCEB33F44439EEB4A9A16E57E7C060D9D7B7D040CE3E8800CDA4DD182BA71F83C3C49DA877E20081E988BA98E2F8A78C521A981BE73C77D50C6521499BF63F520B659799B008D00B99C0AA6CECF35E88449851B607C9553FE032D39E30655270F0AD545A1E634FFC75D45DDE13166D8BCDDC45E6C4066E8421030138406344104A56292379A8058319EE7077CAF66408F76605EE729A5F77CA8D29F6DDC9E792FBDB62B7B210220B0F4A5F136562AD0DB6B954B832486C3B980E9D4AA4EE731348CE2AC05AC433722A0A62E9FEAB1E8271584D7AEA12164ECD0FAC985516283B8CDDC121E8FFB80DE04E9C01A3DE54D43B36A9A74C819594A18F497DA2AF148D5CF0B00B9552ACD0916BCD3130EBF4FFEB829908754AA3DBD2E8DA1D9FA1A8854486FBDFAE117F0F466960724ADC83D151A91A9E2AE351BAD801954EA93263BCBAEDE75D31ACC4F80249A857D6BFDF93F94C161530AB4CDCFB2BB7851E4C764CD5F4F58794011D9093C676CC6BDE742A98272033E82EB5C9B86A8D1E99400873694573C47AE7011AA81A6A35D6B8A12882DFEB46305F24AD6056E47A4E4E43DC9E9DB2594A8A0ABE5C125FEEE38C642C1B87527DB691C55D4B7BC7A748D158976AE706C3DD212FA96CE9973BDEA073EDAA26A71DE5F7F11227DA22A4E8DFE0D784A16887F33B2266EADDD54936612A6421DB8AEDD2908152A898D948DE51AEED9C2CD7C118EC86EB1516D8798969B52F7C250375E62568AD1EEDF82CC94B6455935BBB7C3AE5FDD82C77F953780413F38A6A66000815BAF479273A02EC6655B79ECF8F9B1068D67F8A3BA18704871259959407D1B4698E3753B03F4136253F406BBE0CBBC144B24BCAB99A70B80DFDF3425F7C1BB18DAF9AA2A2DCFD2B3EC71180A39AA5090CAD4DF44046FA5346EDCDC79D98DE43888A572B8BE0C9D5E605596D2CD9E41DBCBA7145BD36E5B7A639082333F7318A94EDB451649CE455E880A312882D36F8B598A02C1AAC29A1C6DD4EB5B8091B1773C7B338879F3E8503561278C8A2F9D3979A65C5F81CAD3D7F4C6FCBA97A4DAA5F4196889619FBA943E3079DBB34C8E12A789C941E02BE741D80DD9A3FAFD8D456D10639B952FF5314E76714404F2CE91BB1BB02A5D313E08261EFB94C196BB2F6C59318C2F97EA4490DF17E0BA0DA7177CC4F9F47CCAC8EB2CF910EEA86E9C04ECFF589D0D4FB342DDAD6BEDCBC582A159BACE3A3F38BA61FC8AB4DD93352EC9DF7FC1EF150D712F69009EB940D6322A011F56E18297B085BA55F39AEEDB7B01B929504F8205505E689E21DC2DDDBE09B8727D80847F5E8F85703426602D1B8E628B185F3AAD12811A04695DE39CB7BD9536FBF70A9F965B0DDB0A93B5327AD3CAEA02474983FB033C25BE43A14D7F356CCF9D13F04E83B2D6A0B6AE0EB2CDE740BB2A4A050E742BD7EC09D04BC33F739198593E89DABDB2AB558D454A7F4B93C167A921756735CA6A335B1EB1FDF43EDFFDCD8C1BC0F373FD67AF415DD1C7C1A3DAE727ED19B5B9ABD146830479527AFC -MD = 9973EECCBD53BABC818BB142FA55A162A0AC7576D9DBBEC47B4BAA0D -Len = 18365 -Msg = 8FBD9FA06A52986155550BCE61C525AF330EBBDFF27F5D6D1714AE6E50B7C3909B6F5784DA41FE80A531C11E429A4D362B5F143576C6AA2595EC5DE0F2B5EE64D9A72BF5820E8A558B06EAC600B29B7054337DFCC7E70A001D30E1B99CF2497D0BD2B4AFC8DBDA64856B049AB9A6C7374508197D935233DD1EF2AF6B49AD8E0A3D1AF5E50320D1FE3AA52491AA99271A1B390BA1F9AFBF1E5BC3954D16AF58F53FFF1B598066ADD8D5981DFDC4262D7730DEBD1C0CEF8F1A53D420CE5F1487CA0BF9DD6A039B4BA5A48173024E2A3C5A9527DAC8732C3B0955400952D927D814C2D7E2AA56ACF913D8DE1F90757A287F26DD27B2147514335631B7F487C6C0B10FB86B8F4F6ECE8E8231CE87EBE1F70568DF5002A9C835E2949CCA2CE1F71AE9F26E48330B38952FAB737D373685363FA279366A07BC5913F701F94641EC4C20BD3C84CFD3D9FC517A7297CDD8FE675BFCF4BB355BFD25A6A0EF2AE76B57199ED1644529E77FE5A9154D3BA6E78DF49F7C0060A0B1788A048CDABD2B44217724275EE2EE5B2B0495A8DDC2E92FEDBFCF2984287163F6A99E6EFB693E196362746EFD8E629EAF0F1570CC5B2156D0D0DD1B31D254F15371CFC1355BC49E52C6100F90020BCED4374D988BBF80A121BD33324F2976BA69C6BA071EA9CD76CEE89E07D67D0D7690246A4BEBEDA8692AAD3333EB0E19581ACD91ECF6584EBC8CBA67364DFD02BFD1252D468D96D3F15919FB16207EC302D6E6F9313B188BCA3E2FBBF9EDCAE44BA992714856FB93310C5589EAF0B81E1A1FCD4D1BF5486E79D1FD3B5EC87F33354C98FA608A187753CF8B074470ABBD8C5E8BB02D8027821C8C54B07BD26D320E535CEEFAA13EFE8F45463CFF93ABD5EF16901F5305950FFC14DBD13D7F025BEEA8502CB0930E5B71F71243F6CEB4F89112037E58DB868E53C1814E8FDE56D3C52CAD240A35C7064E1A15C2C75FFBECA4E6EF22BD103884ED4BD8DB52E61F1BEA3B34C009748DC1E6DA6C376CA0AEC0D8B6F3AD34D4E2E0FB9E1B1233FE8641C6631DE99EC63FF2C03B6815020567EC2A87D299A8DBC4FC20F7192F0DE78BF2018072C1104C97C3A54FE9130749B88A9CACED78E4170849AE96A502961F942C1A2F0B6865E9240B282AF4691ACE29619E937D669A82EA129A5142ECDCFDA6A97BEDB65E9B1241B3F4A7E78E4E674176057F4D2C5D73D7AA12DDB02F483606EDB70628A4D89B58BCB1556CA881D0DF41EFD0630F87B4B097CB3AB14FF85D1B3848E08E62AB4FD4231E745BB972D7A9897B5467D6DC3330962666C58A1FC4EE97F5E382568789459A119C8C282A8B7D9A7B8B6E300813FEAC72227E0FD94D89E1F2350F2600DF028368267A5BFDD997EFB620BC39BFBB9E03F7613B5B98D77EF0D132AC6C7226B476D33299A8B9F30E751423135D6F47818FB2F72B29F6D94719D533370703DC27DD2675FE3DC99D51F05DCF9630483307767393EC158986D43E2FE40ED4C6C3934CB5FA6021A9E4DC8A5C6D9B009CF50A41305169D060AA095D437304D43252102AAF979D6D3376785DA4919BA47784E7CB526BF62B1AEA6FF20F9C772CAE00CE959E0BC250B2EFAC504D57DE9B23B7A1030E040D07B201AD5014EC4E0FD1C2A22ACFCE2E973FCDA58CED7E004DA53BCCFC75BC44B9AC3C55A6C61A782BC080AD8D54D53A9B9F83FE36D35F86995EB2AE5F5E4868834B08013B57EF0F982F241B7455DA828FEFB00622872607D3D663DA98ACA7BC6E15048222289B416CEA1E701FAABC4F1F79539B6E906C63ECBF6FDC19E320238C142C1D335FE9C603D9570A0415AECFD3BD59050C9951F322DD34A65483AA440E11E671E9B0B9D13550903CD0A7F98ED95A26B353178E552B84EA10ADB780618C4B2F1D2036CFFCE0AA4638D2D108664AE9CCB97DD6A90473BDD93215B219948D0E11A9AA8B0D3CC9428FE0B41352E3D88052CA7DE549C5AFF69908F7EBCAF9B1A15D960A90E253705E13C6246270B0AF47944C55CF95CD0EF799258E8A821C4619F6274D4717D055DBAC34BC76161491FECFB0CC63583173617618EB72DBDE223B9664C4906C0E73F2873001C7810F345D480D685620FE16D777A0C5D19B0D9FFF7F917467B3F3922CDEDF8597A3214C2CDE0BAEBAF57D7190B989AA201CC2A88185EEB5D9E94F195ECE7F8865DF235F7A15F6D6F1CE97B49EB84AB6DBEDA5D87813F7D6F2705A00B74D8D43A3DB96C5B2A4AD495B933FE5E719D5E807D1F9EC172E84964B108628A14A0518B0720A7AF436B5ACBD6A21B351EAF282F37D4900C124F4FE90AE0D6C4485D3CBBE35C2680F09E3981A00921F83952D56735FFCE78EAA51E364E431300CDB6919FF5AE0A78E5958B83338BD5DD71A3524DCCE7D20FC85FF8D57BD0D8592FC64593807CF33E093A51C603F35DFF6519375E64C3E1EEB4C765C7817450433849BB9B3A3B1B66B66A08C5CA4D384E5670208A23AA2CDBCAEB13EC5ACB6BEC72FEEE49E4FBB53DE0B4A7F51026975140FB9319AB80893AAF618816C92F4B83D4AB422B478DEDD687AA4E0CAB404E354E03A9E46723056B20E0A324A2A3E0C05E400838C8707033ADA5A07A4BBF09233D4DC07B59B0902480CA0D462B7C346B8ED4E9C8873CBCD2A6029FBB1F5AB7588FECE23FB33D34EFB33C7EC6AFB822734D2ACF53190D21E082B563065020F83F4F6A8383EE537FCB56C0B562E3CD045CC978EF78BEC7743FC4E3746AD7380039473E099A6663AEE70E2501999BCB0ED2786589102CE425B560699FFC25C99D46A097F48725D471817AC1BAEB06D4355969EFE843615D4C8A6F0E4858D6287395D62BD759DE7A1C2C2B995A0362BD0D940B26885CAFEB3A05DE7ED1359D06139D93B733E0D7E8E8FAC0C771EBE804B5F426B0694308108E87C1ADAA68F8969D461E5BE12DB9C9EB31197F35990093D771D8A68E7036826CBD856200D072C827F282C88D1C8EACBC2DAD20DF7A8E5AF3A5B5AC99AB52300329132C21546485AD4BA8D78D7DDEAE54F27C542FA53633490A27DCC2A40E44555103186946113AD9BBB65846C99239A3F370F7AFF3BDD69F959F8A19A580CC95EACD62F627FDADDA83EF442B896C5FA9968B18412354739182FD41051165E090E773698E9C94FBD3DC40CEC6354775BCA10C63CF1E8009662E66D2EE90F759AF0C428DD059CE2271013DBEA4A2FAAED9CBCDBBFF6D7DE5BC9D1DBA2A35E7E912A63306D201273EB20 -MD = 2BC8A350A180A7FA07776D01DD91EEF981A94AB645BF747631D13B6D -Len = 18428 -Msg = 9DCC31E82C88B41F75CBDA9E37CC6A2CA92E52F7A86D45ABFB4725DCCC8DEB7548577FAC35D307C1F29FBF46E3F390384B9AF2279901113475CA349C79264242504C661B8941FAA7A8770022A504B4383AC5CDCA4BF11360DABE504C87F264203B8DFFCA93B8A03D8B96C152D24B8962A510D1A5DC1E608C50CBCA09362308AA7A251B618C34EB5DAAA422537BAAE9A1505D6B8AF3365BD56D116ED4C8FFE4CB4D9AE34058A20C8FBCEFC97F722F5E092FCCFC5283737BF2C9B32FB4E6EC2B9D132C26A5C4210FF2C6D97E73C84646620209756A179A924D7C4FFE7096A22A1846F61A1B971D0EE8A19A06FD1A375AED0D3F27FB97B951D0413B6C7291C9A289C46756D94A734AD4F2BDC2694E6A1581E81F9386ED3075BB8BAEA9C2619F7E1219A7DB2B5B1CAE95287560886FF891B8E1FEFA7C3859FC73890BD27E7C2AED00BF63D108A0541964CA7F6BD15BCC75F83DB24E19E14A5BE24504A0D2E5BCC3F2533DACBA074955AEE83EA77C7475D87A4DB97EF714297A6C6B5FF284BB94165992D76FA255F4FD3BEC311845556345FFF77AE1CA70DCC812D9B9CA84A5C054F7D2AA5BBD683ED148D09C85AD2A557D1CEACBD9F6B5F241691B50DD1560FE4B8B885F12467CC7222CFB4D0EEF2CE982163A49AB47CCDB54308457E7CDC363436F4ECC218EE5E7FA34C49984B0FD4EBCA1BE8E783AC470E08B66156031B2E7A660CA0D4EE25379B2272D450A0B9B053470C12864CE7CDB6FF091E04D7C577CFC53BC17822AA58A4E445C76CB40E5F4BB5B617910C3E37745A2A4697134DCE0CE2025CE1C30D110835CC432C63A25AE7A451B8CA8C8DF0E6A32EB083284B461A1F8C56FA56A4AAD9E252210F6E749367BD8C958CB309A61EBA721E85A5B6813E8D012BD898D523EF716A3B9AD99D771FDDDE3CFD19EFD2C798E781D20EDC27B4FE3FCB6EB701BC01D2D149525F3795B3F85669A6317335658A5D39DD1A9470AA44B0F0BA6A9CDDA3DC08EA93F560F9C3A0B1FD2E62E9CEDC54847190B011E5ACFB146278E30364CC17AB41E1D7F5BB8F8878121ADC43AA4AF6C1D1CADCC1BB6796E3466CFC0B7B0317E96255FCBF331F56EFF50AF05ED6F5B9E425C8B0FC69F97AE96736B0226416E5FE923154D4EF1D2A64D84F664D46859516BC0B4AABE3FD7DE4D756379B3A8787DFE95A5D41C4CA780EDABAD56968C8AE6E1007475E3600D050D120D624B92F1B7EF1B39A46788ECB125766DA7924563D80758FE8FD43C9B9B8BE33C6A3C79FAB9AB6973833E4ACFB95A38F563891093A41B8C862E58D7DD2A2F53522C304FA753A1F53AC55D5D4B99CAA5D7878D583907A25F345050869043EC4665A2F1F4CFC5F0D7174F2E78C18DFA324D2A763337E007236354DEFA70BB4A3211DAF49576D5CD708C97CAD1FF585A6F9CD5F8BFDD793AFE3B2C49ADE534794D32BF31B89C31B5E031DFF503C8D35B02D191654D5EE35A5A413090FBD998F6B8DB8C9D03E893AC5917FEBEBF0EC70F00A89C06B7F01147E43D3A12A8B4B4791E9C9529A443D62A84829144100AB32B16F26202B3782CB5FF2C3FE7913AA0E7FBC9650B6AF15BB0CE6C02C99516917C7B07075DC2D9513BBBAFDB44D6786489A3C5AA5112FCD1898F2AC4FE4EB8A1B00FFBB866E363B428C9AA1702B43FF832B63337F19CD3F5551C6828AEB3CF148BA791BC9C22B15F671351CB4518939F3732ACEEFED73E87767698DF0B172B11F90501303264A73BB921452A714C58051AC3C09D048C56C00B37EC5F280120104ED97DA3ACA60A1486CD5B8D8A16F123DB4529CE411266E290CFE40281E7E4104675EFABCB69D9E09AA867CB218637765AA38DD71467DCADAA29F6103EDDB947F99911A086A78331A217F031BC4EF1363D28ABF2F98C5825D0623914A05E66D8201014995F3432B0200312299305E0915B5488953798E8BBF8C15739F00D5BAF74B177BF705C612079654CA400927F1DAA15411B800F13C2EB2B68C0FFAE7614AB3421344149395D015DE218F5FF979E189AF4604A42B39071561CE3CF57FBA6827B0C7859873043F4BAE21A339CD4EF2E00C9B5898EE86E8BDD034A8FFAD4748A678B32DCDC18CB80A5087CFF6C69FF9E9508DA9FE41CE37A8FBA520A0E440CD5E6DA53D492BF6821CA19CF65B11D2B1CEAB931A8419FB2C4195BD2DFFD42EC30F11D350925892C27B92F1BDB9178E3E2B595048242A8FFF8121787C84C4EB5C523179908DF0CC21E2FC5B8819E72784E67519ADEF9638EF47759559BF132DFC97C9F348CC79EA2AAD7D596B089DB4900FE1D3ED63A6F6C054B3C6C1EE07A56E4A554C93ABA2761205AC12D9C6B00503FD198CF975BD07794E9C75ECEC44CB8C5B8F9CC537DA058961EE2269DC1428A4589396C421638A394BF965CE88A31C3B7FD1EF2FA4F944F01071FEEACC8E8CC94BA0AD47848F250FD6E868E4D16369DD1626EDC243A608174694B7F8EFBB24DBECF18CAA16FA1E7CC3AACFD02DDDA59DD7183228AA3DE23601BF8390DA282984CCC8002235F260B7701E25075CAB2A74F4D9BBCD24FF87C1E4F672C306F5E47F14F7317E23401919A35955880421025A64368BE984025040CFBB67180B3089158D9D91C3634C5E35DC6B3076203BEBF138D5AE5B5744FA461A40021796C28E69DEBD847B162471AF4F6A9E0C1B5A8511E7348E392D6F81F0418C6FECFFD6BA58707F75969FDD741861D188B7EDEC7DFACCAD0CCFC5533ED7EF1B09A5FC1A68454E1D2D6A20E9F15CE353952B9FBA7E6320813FEFEF76840A45E6CDC1E2F029A2F70DC8CABAD5B883E0589E699258C92030C6271E50106F6CEDD00634975E0FED1870B0BCF55C35B2F24F61F2A9DD7C1B361171555525F7F3B9F4831E114B7E7308030522C1D9B3963725AC15E8BD32EC54AD56361A5E091F3966A72781C09089D0FEDB2D79DC5EBD3ABB1CF5AF214399166706AA9855D094FD7152C9F79CBD1B77ABEC04CD5CD64173D0135B9D5C0F115213CC0C182EB29E82AE3A4266424CADAFD10C27D6750E40AE888123E0C913A5287C09C1E188601B30F880353FEB8B69D0F30BCC6B4B564C202A9EE0302C1D3452B386F4CE3BC74B8A303D3C8A57CBBD0C89ABFE39EC23DFE724FB6771AE0FE649DB4B9BD5F3EBE750AE4FA3CCDDA6540C39F27105158BADB78AFD868E858740D7E71B6CFD3BC7AEA6A52ABE8BD6BA503122B8C490BB4CE5B4718FC616B0D8420C5C4248FCB16ACF80DD5F6A0260230 -MD = 16F5E0B29050F9E93DAAF7CFE2BC9D1265AEB55A72E5BC9258C5F736 -Len = 18491 -Msg = A4843386F9136AE2B8DFAF5466A07C8F68261B7C2C24341B32C8330057C5E26D4D292FE41BC120352B66D1D3BCB1FA6880FD8ECA072CFE6F3D8FFC367F53E59C8AD63A51F2F9842699BA745712C65120EE037158A801F5CC9C0543FC853E469F42A2E80BCD26288448A222E20312E92388831F83FC464A6D7C01F7D774D9EE7DD8C384F9F2289B42780A9A4C2A7E212C9E61C55FDFA8FC09872A2CAA18A0B63716873889ECDE30678BF8BE1CD52432CBD740DE8441D2A72F7086C0FB2AA3CAD570808B651AAFF0B41F0683BFED68E8C7DFD3A837BF5D555CE5E2EF43B8D12FD5A20B776F73354EBB226A2C99260663AADC19D7891A9C058E812B1F1AFACBF370328E939DC68F4245D59BD8E3962E92FFC356BC1A2FC32D1359959F3EAD8F97163DFFDCDB9F6E018A16DE23A993905E6809B6B9A9D9C77220D04154B759986A45F4B4D5FDF8A55D3B7058DAFE4060FD93019201D18BB6E06DCD57C50BDED395F760031B1D8BABB99ECB236EE7E633A63252A6E456BE28BE661BA9BBD9C0B8194D662196BB725306957A3DCCCD0C79EA10A2A1E54832BF9DF9C6B8E924FF0159D7481F909ACEBB81C66494C39C30853DB9C8773FBF11E727D097DC1392DEFF535296B83C04F302CE9FE3B79D550B01B61B9D69E06E835FD3F47E8147E7B470FE4E558FAD3F78542BC60BDEB89CCC059A6324188CE7A72A245A90F10E7EB8035D70074729504D65B0CFBBED2051C748CB6E25E987FF818677E5194F41AA9283DA919E22A89C36F814EBF3D9B382F18B632EDFFD63B03A06E55559D7E87D32293D115D397948B6A160765B70CBD2CD0FCCCC6945A23A104313A08ADE1D59F2CC1382052479178A1B2DD8B746DB220CFAF9EF23DE0DE299CBBEE4A9281FA463ACCC0D0F85C683D664A0D1DE3655BA4984DB6B926D6B0DE72F3A110BD10D2CF261910AD4311AB585DBE8993D71DE45AD25145D9E2C6406FC4FB7C4A646AB5335CED3192147CEA55DC72223A8094A4E200A3422371AEC19C852912B13BC26FBCF068BDCF0B6EC7ABB196EA953CC721F72E4901DA90F670D149FACD58B7002F0EB5165B6E427774A152E4FA847C75F5090D4E5E6880D6C2904F96E67BFE787BD231F51EE10CD0B7C0F0652414F939FBE6E70E647FB49294F49BC9CCE3443900780EB40ADBDB8F965225665F19F3B08F7FABB17560B6A0598597452CF2FA45B0CFA9A50F16543E5F8B4D8488A3D38F60975A04A3880282271976C9007B77BB4BCB763B9E3EB234106AB92A536AC99D278A11E9700AEAFEC3866DC1B29E602F644E86878F82118C35F070787574A6D72FFA01D8B1CC50ED1ABD23D096FA705A3A5A1A322C558244B4E53DDCD7ADD2DD25028D6FE9B43C75D05F833163946F3485C73363E72C984E909D2E4F9B35A67352547E62BA2BC50D07C6CABF96B1BEDD7167BF28D7447ACE14C2EEC9B214B0A7B724F95DF15A5CCAB1502C55D98FD1CD3A6CA425A4F09CF11363DD5BCD35C8F7B57EEE1F2015A483E57EF1E897E2705E407C9E836405832226C22D8F5BBF97879A8C8FE2D491E11B0B3CD82884CFAAE86E53BC1CB2E64F74075ED562FDD948D35B19E5719E305F5079F17D8993A4C0729165BB460E9F97AAD98B6A6498473E6F7ADA597FE6A6A97374F988A5169F5FA7726DC237BA62CF8025A3A443FBDAC2B15AD08027566372F9494904A2794D50DF6780663220AA4D849682FFDAC669492F96B80D92CCBCAF7F54B118341C0D3B0446A4766CD6FAD9D18A082CCBFCFEF88E6F7AD9CA479560B464977C890F08EE569F8512254697FE8942A0611FC04424BE8750D2D7EC5ED1B080859C105B77F6F59B58B8CBA88D5761AC93BED28978DA081AB129DC6C1A9B2B4FFA7289DFB29BAEF7B7B5D46A9478C63606B36FA65B5E4609CA087A0EB0D8E378AF1BF991C04772D2C01083B76C9A5F152C818BD506D0D638D04F110BC41C5E89F4AC769419C7A85907C06EFF03189E6C676BDD328817C715EB751B3324AB73CBB33772C957FC8894164D148B957D0EF07CDABEE3F521646868FCDECF8EDAFDB82856B9074B70AADD0567AD49B8595B0A730214ACE8AD90D4A5655977BB75CFC76D60B4FD60BF7E3ECC9621622E3D6E125A22F6EEF0C955E80778C87CC5EC0DD58D512E42C79A8323DFA7B0944B7FD8E90C73EED76ABE94D61F2DEA64D748F7E363A4CA24C73AFD17AF88BFC44A64FC9DFEFB6903988E523D0D9CC6C7CDC7C09A33D9332486BEDE48CEE769CEA71FCAD8EEB1E0AAB3EF85B2693FDA7D84D2409416A0565784E97CF3BB5E6A83A3F4A0E34E289D3D3AE2CE19646F65241885432DD621772078251C82F5E27F1743D85B2E04EE55FEAC1DDF468CEB148768368B5AFC09B6060693483F19C67F19EDA060F415D082D675648AA66E7A4B86BC901283F04CBD8FB795396533D453930BC612C522F44044ECE91F60F4B0EE5F5E6283C2EE905A37508397EFF0D046AA7957ED89CAD74ABE5B9901F9C7816AD6C1838EA3FA6055F8D2EB1193E25937568E95D1339B35326E26680EC509B24064BB48427FBCA661D7097A2BA36779C196EAB576AFFE027C81B40793FCC26FE1AFC579F204B44DC0E57D376C3903312FA115C800F436D87257B479DC15FD4FAD8DFEDEDE1A216035C604D90F93C2D561D9E16DB20540B2650C214D78107FB6E6825527CA7A79A050C5D0BA29A137735B47C47C786498F66CDDBF26C35886C2769B416D13A4A959A7C4CD7977AC29F3BDDF3883369C3A80F0DFF3F3486BCDF5C709D743B1B53A65D2ECCF9EE0A17A8164B8DC41F9853878A5BF2C8517B883688CCFFDBA222AC20ECE66118285BC13E154CBC838521BD9076DF83DD51996C35024DC0FA035FED66E42922B472EFF0D7E7162E80AA5A193AE32E15630780209B60A350E1E6DEAA9BD465C312080344E1CE829A20AA3822C2137F9E61EF987BEDD6C548D5041AC3B9231E65F17A2EDBBE41BE5CFFF86CE9E9BD73E9F1DBE70E0D799F2C885CF3AF934E832C345581D67EE73E1844BC3977C6E39BCDE145F947D82404C9B38FFA8046C2D6865855819E014F81D832C96008B32675327163DCB162522E9AC772912A0F57B3D91E6FC7E61211DF31BB29EE6BA02E34CD9DA756B15230B900A0AC3DC34281FFABBE7FDFCA9D567FE0B479A6BC94D35F40893C5140CAD72FAE35464C97137B404EBBE3EE05044A5EC652C95451B2036673399D677400D8546669C9A948AAA1BED88C1A4FBC76BB37DE2E4CA5788619A5C0 -MD = A70FA7604EE6206098660F4A3BED7A4D06A1AF27FF989216ECBF13CD -Len = 18554 -Msg = D17590525F80AFA357E56A6EE25E9F813069901FAC38527A17C26491215D0A9B7446525069D8418A0349FE7163169AD93C8D727F2602C581D3302F220A4E98D83D69AD188BC3425A15FFA930945F16CCD1E7AC2E928BACCC43AAB143A2565A747F81E4B00106FCAA2A24FD7564EB714DB3A69BE228D6FDBB34DD8484C306F98F78833679DF0E706768B7370EB3C961F59E8ABF15F4B4F366A1B9A66F12301D291CBBF676F6569A49A9A6D86219B860ACE366967FF7CAB89495ADB4F19FB54CD9409B5C40AE711B45E915477839FB2BCCF05A04EEA8D437DBAC4236951283CBD41E9A55C5EF5EAEBC4F183CB20AD443D8AAB6DC4817CAB8968929229A0EDD605B76B0E302CD157F55832E4318AE3D4039674DD92B2EB227ECF4AE22D211EA63F6CACCBF0145DE5FB15BFC6CF93880675DA69B96F23D7BFBF763F2753AD06CA188187D07EB9A13C0586EB512BA9BAEEED4D25361DAEA297398DB35DBF802374B61CF380419575B0A234569CA4B59AFC44ECBA24EC66758441F1827C9F2949D7CD5994EE855606C7762BF30C1745F925D84BB4A1CDAF8DCFC5A3D36FC3226FB7BC4594566CE8F40A5B98BF2155D5BB6B35F0B5CC7C0994E32C0B61E5EB1DEFCF0357C48C225B64568C6955590E1FCAC56C8FF476F74ECC111FC1E5B40B2F50682987EE3C4C1E0579C9965B2F95EB494AB4A3D5679836FEDAAEDAE5977CD1882F5053689D86229BB84F6937E6C175AAB8F882B2CCDB1574A4583874F075BB68BBB9F6A4CC07256D69E95FBC6001C4724BB316870E907238E0809F4877C2A1A6E4C2D8EEAE2230581C030B872848219A8B093443B945798796981B29A8EA4211E1455D394893F95CD44834800B541EFE6A3E524612B805185DBBA278F66C8DBBE1778758F3C743DB262D13F4C90F5387AB3806F3228374A2415D088ECE8A24910A8DA41A30BA696942D3122098244782EB8E34F270363B9DFCBFFD62218EBE75FE003D4217968B546A4B3D5F00D8D231CFB5AB322BCFF83C5A804CEDD9925B068848C96F60F054D269BE2A18DF4D12AC24887F2F116957B7DCFCDF8CEC32ACD2753555657B7C2EF830EEBE9CEA91A987D15A1A0B4ECC96E721CBC2205BF82A228919C39373DE7C5D24968BFFA27DC2D9B4B39BD26BA38A1E5B30715AF7D689667DC2FA02172366017541882B1BAD893CF769B858650F4AB4405A6FA20C726122C1D0FFA0EFF39CCC059918DA3710428D993B8EA03B116123879AFC976CAB40A000FE4EE3DD55DA959D46B14BE1D2987547888A706913988BC769D11433D1B1DEECAA0D43A0A64D0298ED5B55481AF49B79ED6C810C19084107DBB28CC4BFFB2776DB2BBE2A32CBE3624BBAC6685A00B259730019FA07B49359B61FAEE737DE77DA7E9964824D557C4851CA90B5B67EDEE1D9FE9AF270F79F61BFD7772FF903E792696FE7224027D7D49A1C817F55DD8AF25206E8928C8193BE66A7A96F0C72E6B438E7895C89864CD7B4F2304A6B99E174425C637683FD34BF68B596804CE254A3E39BCF1B7A5DE56E2C2C7DBF2B7D343F0286A4ACBD2CB20404099FBE202A1C1C50F10764B18EB0E9D07A676DD93D63C4C06B565D2469925532191D4F35C708AD1E592CD2DCA0647241840A867133688B95AFC144EF2B0C41713EAEA8F16F64160F97A31683264BCAB1D9DD74CFFD157982297BBA7F86D6485B9D3DD5B59FB364BBF8F2B34897083924E2067FBC6B527BF748CD432339B3C79601F89CC0D9B1C60C011AEE99CE8B2260D911155881621FF520B07C6790FD8FB3FF387CE9BD1854C6668333B97A202A548EC65A6A5B196EF455004163ADD874971BE1947CEC863A723BB7195EBAAA3209333B0DA815BD11E10455A80C32FAA467DCE5A06D06D56A3391ED68804086A165CC2AC591FE52357910D29739B177F203D30AD28516EB8132B1894DDB052F01438604ADEBD8DD5221409A7CEC5A2EF435FAABE956A9AD93B1388460879D8B19FF13CFFF16D2B7EC4ABB7B030B7E72BD76EA6BEE290420BF9659226289C66ECE4B5A6D467907DF7D51E20370C6F56A9C4A9D09F6569F0730F31095B3D45E71DB114BFAC587B3817EEF364D82608288BD36596526888BD7169A979E7B90D7BA16E0A20BA4B21231F7E3B19C5E279D3CBBDABE86E5A9E7EB3E23DD7676F593725C01FB386FE54DE54D2B53F19F784623DDAE31F901AA66834B73125C4ADB8606853411B8FB90304E40412F44D190C041503342161D219B71C4E59243549935FD66C9FCEB1BD80F214C3549AFB3743DD10BC1C43E8B65DA39821B024BA2B2510D31516D5D45F73EE0AEDA561A4FAB7F9A60B72AF5D81A5C5E5A1CE3508A6556809B5805425D59C400A5CCE396F0F35BFC18BBDF9CC23EAD19216547A952270D9CB3F6D1A19FDA1C272BF1917F3FA983689D2E83C8B2ABE0D25E1785662680BC4DE05D749536E55218A819D0799BA84951BD337412B5F60B9EFF8785007153E549B07480CB1AF710AB71B2F625941E02E3EB0F7B4A0E8F805FDAE8CDDBD57568E0644C908262B40C1684F2294C95F7C4AD9832676BBF41ED1F66336CBF22813D0F41A1CB9F24E013028011BB2EE903C3B927D90F181C178B4E3B89433ED5604FD335A0726B20EB46A3584CDCF549F22954CB1017585C125134D547DA95E1C5A3BA2D79BE4DFEB766CD415E62E8654C0202F40141F86AFB6008A4228A9A5103DEE2A882992B33DA4C3031974C157E2458CA64AF9155F4F81B66C63F6F8830FEB305A1812609CF9608F88BEA639B1C34A996DB55AF7857888878C0F2DFFAE84E3D97AA14579B6C09CF836F7C5059509CFE1B573B582145A089A555DB7B1D4BECD1A4DD255DCDCB81319ECF48C8CC21E498498E0837A6632F682E666B47EC69103777F949FF51412E3D52AC6EDC1B2232948060B3E4E90B9D9EA632AED2AF1A6577F551F0B6048F70D0B3CBD580FE09FE523FC634EB21AF449960A1621ABF5374A74CAAB315A070F995ED0DD137A9F8ECC20A2D33E5B139BA5E8066B16C14D67346CC11916AF7BE026D558B8540F973B18008D776F637959D3E3861A5C3E4BF524AC5B3FC4D9A8CDCC3E34979798ABD1D0392340B12E58310D8EF49F221C52872355B578DDD0D668D0CD943B09432B1B47A43AA4D88832B390FC2A61CC5121909B257D25B3EE6E46C3F32C9A54AD3B711CAC23E7965AA65712C667283785B6A7C46160D89C5E8A3FB92B8F243AB16AD98BE48EE05F1D77F80D460F26F0F7815F80D6AB2F25D0C23151FD808200 -MD = A5933739E737AA3A5A3C653B7E4CE532FE0F0DB3A57B456C94F43094 -Len = 18617 -Msg = 0094D7D13334691D5C0BF14C9C83C9E7F9F6C7CDE1D93FCB53DD7FDEFF5D39CFA1B819F74E1A674506D0DA03ADED70E01B016DC74BFED92979C7F3D95398D0FBA3EA43DE5FE197550BDF48FAFD730502922598592EA8D380F1C0CD3EC96FC7F7D3BF42D46DB7A96B7875C3E53E3BCC8E37F16D4838B1CE4AD539FBFD89008C5390A328ED728C3F6AF97BF84E82A00CCE7176998FC2718127F1FDE59A6C404017EFE23EF9593B59DF83276E5BBA32E0504BE83B05CB883487427E12E9B79E527384452FD7FC946D49FED8C4CCB325DB154C6232A39480CBB2B0272F89525C3763C140AE0C0B64112AEE7E0CF4239F0B51518D150729E2C025CD4FF37F5249C9F3E7C3472B1CA4488AAD81D953CE2E00275B1650BC83AEA35963E77C51769AA53393DED598C9D4498386556CE999D00B241C91AD98DE343183C7BFB0D272D6C455252B9647EDEEB5FF89A1D37438A33F6EB7C6E775061DB2B068D1F9EDF0B8D0D841299F943926393E378876C85DFB71BBDDFFECE17333B5A1D35DB7962A1D1E2BE11FECA8AD647817EDD49759D992D7217EA27B65BC147BB85B13990D30AFBD1A4B9AA26E8B56E677DC078343EF9F7DE75AA5D5D17740446731854EC92D6591410C07E86D3F36DFA0C9AB7716DF0F0693DB3E3E17E8ECAD2D12D6C553DDBACC30C2FB76D5EAA1AF999FCB7E071AFEA6FD0CFFFDF57167119A40FD653A75ECF908AAC4BE0BA9C6508660E2B2B07FEE43AFC45B9256AE1F124AD44A2A0138611E9530573731CA179C6BAA4AE844D6CBCAADF2B24C6130B9A3D242E9A840EC75F800951189D4CF496597DCA18441020442BE1EFA5433A1E7810F412FDAB2266AC8409E5D487722B308274FFDFDE6D69E6D068E2BAF5699066998BDB79C41F129D2017F75C57EAC046757AB9D3C8B0F14C37A85AE55861A244103737B60AD1D4E68EB34253DDCB4848BB12EC5B7A18E889FCE31247C332BF27C11E331879090662DCE5D859CCE0AC12C9B83A35E736E441FF3A5A362953B3D8B65C69F79F342734EFB91218FC552837D2D01F5051A5BE1581C6F89BED89E4F012ECCF71FC5A593EE07B41E3B4C116BE22DD8D56C77143D8283AB9DAF980DCD1452E50CD3638018DDFEE51A4018FFD3B2A256EB79F933003D7AFA66AC86C4F4AE1A00DA4174356CA0752356EC7F0E2025EEF9A58D97EB6B67F1C92A945DEC677DB824D5FDCA3E5C193EF35D4063D793C2A5B3DC369A9BDDD6370463534282A99B3CBED296260C6FB6AFAE066AE8751FC94B318F296213648F55C1603BAF2F2D9F3A868E4099E4A1A6896D1AD68077355A67E23689D4013965005BF2574BFB648749DFB9B156155169E76B20836A3F12DA44EE40795A53539C87990B32862DA817CA34C73211C0B2D151C9ED9AED9F09FE4FA4E7B2C9C76EFB318B3243E6FBB0AAF648D239BD9DA754C48B8EFA2DC7DBDB47CCD4E59A364F10082EB0BB3F63C8EA149A32A8AA19CD7C305070AEE37FDB5A8B2DD1E520D0CDDA72969FE894DF6C33742D3D2F1AF0650DC89DF4421EBF2560F231599810BA6A1D8DF3D05D2D23959611FDC5CECF6714DB09327DFC5E3854F6E30A8486B8BF87279F662673C42CBD9344130B3AD5EB75C43F96D325B59705DFC49F16EF02E2F3BBBEABA036B8B94FC742EA043F42B47F3E2A2534C3C01FE52785D14570DFE9FF3C097F7187ED3F65BD9FB151816731369FE5B7860552E588F49FFD7B312A8E4FD524710E862A2F4BBD7383A1352B779E2E0638B0688BBCC5B6B5D6882804614B4F51BD44F97E14270CB0BF649672316317F45F9EDB6D0FF90DE74DFC104F96DE4B513B6F1127C9CA6977D0FFB56E4A7145A8DC58F79913377AE4F263223079841E2926C214ED5918A362B24D3F1992DD0FF33465F99DC645851D91CE7663571B32A8523DACDEC29B4313AEC35455ED83F91BA37B10DEC75F72C8E0096130B749FEC406DE8B186C40BD78FBF9BB88AC87CF272CEDD885E0215840AF9F1A8820826EDD5A88F79AA9782511FC15EAD0C23CF2BEDFB58F3D57238CF10F6647C53F2EA7BA7F3BEE065D1C1EC800F8EAF0BAC344486FC5EA5FDA98D73F221AA09F097A79F98E3BBBB22F50C7107C6FFEFC4288DF1FB2996AC3C9929DADAD0E728A12B057246039E9D2E8BB2033E3AEAC7AEC06CE8990B541BB4F3B9BD8D486610FE5DB3B0EEF52834829C53709ECC7206AD88E85098ECE670C6A3B353E5340F547DAF13D53B34F8772E6C43ACCEF9A1275D6FBD5FAFD3ED1C9DE999BDA5FB1F9557AB45446347CED632E649ABD0438724707161E2178BDB196C7B1527DD7FD4D5A204CB5C22F4FAE0FA0F726DC270D97F7594C037537E692C76B05770F5B7F198AEA773E691CA701B7B5F5A401CFFED7CC81FC5BDD91C8CE5E47854D4F913D81477272AC9E4ED9D586830F616502ABB003AFF537DBCF41E7FBA764ECEDB05349A8851D26E3F3613FF496E3F170829FBA31D71E5E4779AE531D1B845A7B5B0DD9B519DE1D8EB8958DAD09587066E0A036A07B50D509FD8155B6F55A69A4D0DB7ADD936043832C58D97D11F0D7E3FD37AFC9AEDD05D62CA1E12B12B12643591C062BBD72A8226D7BD917ED851E9E1FDE7490A7035D2853FAA040410F2D844389F6C2C02A45230159A3F3D021D31204B6A304B9458D673996EB0EB5E77EF3DE0C37EF1B0DCD2080E4C3F846292F3BAC194DBED8068F327632B0299507EB31002155A55B6ED58525ACB7A1E7231B2611111D905F8F2068A88E8BFBF9146F7E8B6EC1E7E095949FC82CEADB99709FDD2B1C71714CC02620DF0F4D2AF1E4C8F584CBCE6F49827F58729D8D4D03AAE7CD698168567C487875980E9A263D0CAF37E40875B40EB6CE0CED273F2D50D1F305AD1A91FBA9993D3EFC2AAA934643601D8880C7B1C0C925B0D7DDEF0DEE79D13BE7ED962D440A7916F7048FE3376136F71BF9DFE657E872199B77EBA8D4EA77196E21C494F577D0D206A3FF1C540B8F0469FFE9CBCE0B6650AD9E30CB06F912981D5D24B9B268D108E1BD079B65FAE1FAD00E717C6DFA689E94D075A32C1C7E8A0949078630A587E297A6EB81440011B7DD3202B8BE06D0EBEA39C9C656C0649AB5F58F84871C582738AC72C5CA9DB08DF10460F4710E283F381089A182E671F18E92AA99F0898185FFB8CC06AC1F013774C29136FD2DF65EED35DD31A66EE0BE0A9CF62DF74FF6507B4D9421A8F4EAEA9BCBFAFE053CB643DE3B3656C45B490090142EA548FCF9C17AF56EABC6A51085F6EB96981D0FA99011369A4230F72C00 -MD = 1EBBD95662106295AE36BC2D19493832A411B3BC3800E20E8E3A615C -Len = 18680 -Msg = F5080D4C59E804BF8F34B334CABBCC7D32011BDE3677F4B9069416AC204114CD9DA7A0ED0F4B4D8344416336EEC15553EF526B6DEC267B1242657DD0B508AF81FECF9CFF9C82A6A7A9539814DD7E097615EF15373836B5D2F765CC8D5F82E90449F13AA741D5EE2FE63898E55ACD85116846807606FE1E2E29F98F9940B067D0D1DF01F080211B2EE4B0A30803782A7BC2EAFDC5EBDBA91EB05F7D7DC8E34BF6D44FEC05824F53418F235FB64E899EE147BCB403C8855E94AF378D182D79C3EAF977CB4E9D4A16D990A6C388CEB567B97785E6F2BC6745102B99AE765E960B6B32BAF01E2379CD6ECB74D3E1A56552F5976DFE5C742BC92BE596CA742FFC3D0FA032AC29F9F7C1A5C43BCCA62DF7D9DE35D0C7C179DB2E1AA255CEDCCA55064C2049FEE1AF2CE5EF696ED4BC46B7C55BDD51F2D44C8713FB2475C0B85246AC0103CC3863B7EB026AE076A600313F6FB40A4DF62A2AF81B7E917951EA870ECB31B3401928B5046D9A1E62D14B30FDEBAF262868517318FE17EC3C0D52524F44120ED8ED3BA70C643300CD0BC70DA72C964A88F52C3A91EC20BFEB5CAEFCD4D9C7685D8407476B5F34676C5EBD1E88A6CFF1C625322F8CD59B9ED60CEFB21F9491B95E72791F7AC7EAA3C16159FE9DF7A989ADD6C2282C47585E11397EDA9F47DF2B40166E03BCDD6186B46C6835118268DDBEF19A28BBADE1BDE0228FFD7E8B3C3C598D89E24B8CDEE79C940254DE26CC6814BA2722E42F7571600B7325E1FF300251D52A895B8CCBD049B2953B8D231445F68F7C26EC25A4B8695C8AC116F736BE939EDD762C9B4743E463C9B9B2F88E0BC0CE78781CDDC3BCA825ACD463C7CAC2AA6C430BBE820EA94AF9A40B1B5C006E9641A2FFA6E427379E1AD49C81B98320B3431FF0030DC683D61026438BC6A6D34B2C73704D9F62EAEB13ABB3E4B0562B4E0482CD6B2D7AEBC0367EA29A88F4A76F3D76FA1197E1DCA92C8216C84C1AF9B8C78C9E3A7799A4A79A783033B0F5547E8E75E69CF3615AB04EF989FE1A463B1672C571D50AB56972896E8A50C242F22C7F6E27CA4CA793F627E79608680F5421B28BDD2589F05E65430DF774EE873FCD1234064F7A33CF5A1FA4E368137FF9C1597F1FA0FA36493F20538077669EADFD3B06F788C912C715FB5D334DB6BED133A8FDC40F5496E66AD63881F0BA3727416715865253DC5290327B515BF68DA188DD5B4B0EAC7CA712CAFA8FCAE0C5503FE58A219182F1C30DA6D0C19CFEE897B7D837C97996A35F4CA8CF0537A01D17E7DE0CC9C129E4DA0ADAF1FDA85030DF9127BE628263B0624F372C47C3AC87EB945A57F5C732BEEE81A7403001798992F3DC944114FF3D54C4666AC5AC8C98D0D5596CBDEB420665F5EDAAE747D54CF7EDD37B162E372249D135938CF17D174D12D88279CB4C32BD6F018C766DA6983D4EA51D6BD8FF0A9B34E9A93BBDA70CF1B4B867D60A74811FD98D52FAA559B52C755CB70A76C94BD19654CAE7017CCD70222BF08C5D7AD1F5E4E6344FDB3ABE703452C29A696F39F9826ED8BC510A4A148E5BF8A5DBE6B82D7220164F08011C05AC5159D52CE9D45D758B645BBB248C2D341DBEFA1F8602C5D458A64F38F3B04DB39089807B6A10E1BB52770B92CE72E2D3BB0C2241CDED35054B84558D1CC099EF7B2296951951D5B6A22F93BF962AC5EF8FB55EC6CC2B316428EDF12078ED1B66D525D022819CBD489E1BEDB02FFBD507D55F9B5D4E22F6396EA233453754688D20151A09C70044B8A5A9AC033C3C3B847AD833D5C05B33407666EE82F9581DF9034EE15A9CA67D52F1D9B634B84C1B8BA9E515F1F060A5AC5CBAE2DE75F94E112F7198E239DF08D3103F065627438995026DF511C6E5BFDEEE5667D511D4181850C7C5D179107C1B86D24D5532A88A4149A2810DCAE73731B0E1247281A6FD31613DF6891B4C17B7A6A9AD9B77468254B93F85958AA0F01CEFC10B25169DC46E035D3F24557B4BF0E7D60174219108D916FFDC55E25BFFD9809EFD058E12C14F39C69D8FB73D3EC6458F47F2F8DB901BA76C86550B11B54D0641D4DB3EB000057DD00F2E511FB7A47E959A4402A3AC5462234B40B184020FCF7A0396C4D00A987C8741A4537BC17102A5C42AFEAB9F71EA66ED4CBC7B5EE682FF04F56F4BA1EA0BB326C4089930F9E3F3FFA3E06637CCE32113881A06CC3A13837448145C2BD01307A580FDBC385D8F46FB92FFEDBC8918D269DD1871164D4B3E2023441EC8B99C82A5F09821CDDF6B38C9ACC3BF3A38D5628016159588C33EAA29D9463A537C000A16AD8C177DC4CF716E625F46FC4CA8C19FBD8EF320F1D680639195C8B195B0A02738E0665F4190D6287E589CD6DD45B9E8CC23B08E1681BFC6F66B88DE6B091E825EA4BBFBD697E10BC407570AE4F2A3EBE569554639C2B8E051656CC30C837F5A92260EAD1D552B45801B6D28134166796C87F900225CFDC3CC49D72DFBC18D8D95B1E160ED3CAFD5C3467D48AFF87402CBCB1E1420E3FCB588AA19C8F42753B59DB6FB6A9FDBA127CA806DBA7DD97F2488FC2E438EEF57A4CC85B88DCFDE76AE1FF61225A1CA8BF4A14F729950322EA681B16D6492902506702DC8F348E4D3AE7FB55FAC1231FDE82091B34F1791B6AE37587B10325F6FF5E23B855845B86EAE90785B9D10D90A16644D01BB626F343B908A9591F4069B21822CA4ECF985C1E710475F33DF9AF4764CFB0FFE649063775338F15BEA7CFF29F164678160960A80ED148C9B7FAA58E9139911D3DD9536F69646F718F083DC9029D6294FC4C607688AA75AF350AC2C0B001A157D023D73D86ED8133809FCB9592D12089CBD7A1BB6BBA882FE227C09A53FF088907CB4BC2FB4B7F62D41D3D397C4FE0AD12BB3964370E21712951C679814D506E738C0201E42181D231136A435AE0397B61CCBC5E8BBEBF8EA77C8BC48BD6211F29248F9D498D818E2B544D28A5E60BA727F32EF4BA2707962230C900076FB764D0ED5CE078C9DB14DE894BBB836C6DE9E83202AE89F9A8D8CB0341E1C81B5FA8B16731B8E231E969C0F1EF95336D4E73EAD6DA23DE3AD1EB608ACCE4D4D93996DD76EC1F5F2C576F6B3B76E07BD8A810FF5D88B00FFE48C42700B61CC499336E7FB57AD72FF44FC631C7222C9A3D1ABF6E77B5ED7FE2F7228FED6C849BF7142C4103989A80F7C15642AE61650CDCA7E854EB25E9E72F4C3E3768E6CCC8BFD556B56D3507EDDE9E5C331DDEA75568B07813D20E8F4C9547838ED28448F2E67158ACF0C00B131473847816C5E2DC215 -MD = B4978F5DE02905355D9D40FA09E6F8A297CA546AC8382CF10152B2B3 -Len = 18743 -Msg = 712BC53B80DAE0E57902CCE01A64CC5E7F6AAE80D76052C057B93302CF866E27E13AC0846CB75D9E05BD51CA6821D6FF0CFDA8655BA22EE4CE25B4F98AECABCAF52D470EBAC68FA57D277907124A08350CD9D85E729A704F9FAC2884B9D339FAC9E36990F60269E92FEAD07B0429349E8A82BF3CCAE1D6424BC9901781DB07EE9D8F56B145ACBDBFCD0AB1C3FB83A6ACA4ED108B6FA3A43E1E5E4EC82EE5EB3311F2035C8EBDB5FF0355672BF185939BE6692A7EC0E1EE7F43C4967572476ADE8F304DEAB883A41B7E3E0518D72D85BDE56ED4BDD678E87947497CCADF34EE12DED639E5617DB7EC5F93A8023291ED4E15A5BAB6DC26F6BA262E01F828CFD3091E492906845FB409F9B0CCCCD4D9AF148DB0C06A85B944D528753D57C29C6C08D5D75E2EF9030F85E937301F7605E5BA5F00221661DBE20422EC6D794575C7BEF25CC2E8ACABD86D3A6E0401A2A9B5DAE1E33C4368FAD3FFE4BC33A22CDB3FDDC1327CF2A08D31515D81A13C3D5F14EC62E620D9FFBB8C17249BFBD2F9EE513D9B58C611AEF4B674AD5ABD8D11C2BBC2EE29B3CA8B58082925B834E40AA075CAEFCA42D9C0254443F5CC632250B1BDF1ABFF831969CC3C2DA1A64090F7C51C7015111C48D9B687992A45156F9EA244E949322AB31AC5DC93FCE704DAD736A80097EE325D975E9DF6B510EED9B58062F0B5F46062D0D46930D5B516AD0C834C4BA2773A896E4621216155208F97A94858AF6C3AD29E556791439DE32A5D16D790B918A8A29A4FA37C51898400F92B6DA2E8B7A977C1A50BDAE0883B599CE383C6CCA1542CBA57C839957249533AB5D87C83C891C1537A0AB0292889A1BA1323AC0A479090D0325C4B5B43A0FC477D052F9768E1F44CC27FD531C800D7E080ABE74835D0C16D5863258EB46FBEECBB9928EBDBDDCA80AE4C1743E1282D866213C977F1440EED06D73E5696E818E95EF7F4158B6AC492BDDEC370F49945C671CF585D4576846C2E6541BEC68E14648D320260D2173C6EFBFED251DF23AD63B988D948B55877E17818495ACDF8CEF29306FABB8D2BC3EFE01C379867FD55FA24EC96396FACDBF2C9E6CE9D20540F310C28755C52E537A44B909B7F7C2CF6D7FBD3471555530DC28E685DBF63C6E2BE7695530DBB2687DBA02850902BA80343B193C86F672547FB9FF71ABB1774CEBC4138E53098DB7E092EC465DFA522B8BA70A403F2AF242CADD0A417810E9EB3F46377B0ED32262AB0985994EC2C10A5F22D4A3A14BDD2E88253793FE90872CA45C6699BD8FEC6B958CA76052D746C0D8AE2DDD9A21AF9C2E9C9E609E2C7E06C912E556207A02D6E9C8EFB5228B4FFD59D838548A22603436B71D0C734EA9C3BE8708EB342CBBD4999E784E6D999C594AC2ED243FE094733FF4BB90A7B8798AA4DFBFDE174C95E26DCCFC10D58ACE24432E697A6A22CC9E8A67DF75A8DAF9637AAF8C3DA8C45DA868A30ED6B097CEC6E6A4EC1C35B4452ECBCA24BC767AC6D2826D5E35373A2A7931191E9085DFDDE7BB243966D53A0C253B878F35817AE84473B63728B3AFEBF83388884E3FD0C81E6D9281F4DD6AD46523F7EA6CF7FE71613C422A201108EE83194BF23687B1EB17283BC49F8F9D0AE05165B128393F527E9D4C093D356CC6AA138ACBCF2D3B0D7F01D2F3AF8B041B58D55566FA5A47984497592D067702164AF174F2E7468E62C55B48CCBD132B504286CA9303A70574E12E0494A5B2E8C6799557928AB7AA2F4679D31191BFB01105DDB789521D1121A6E2215A19D4D6C4C127B9A7D2A60A9FBC9A4EB272AAE1D2E24570005223EE4680C25C1C065915AB38D60F715E50681AF80777B1D9423B8E4B81577FEE8AD6452EBA631296AB904A13977BE9C3F1EA8F001FFC609D08FE828B5DB7A018DF31839B8F9EE566107A9166B701B873CD90DCC0FD016608A6094538CF22CDC57F20DB8CC113AE5719202041B1436C8B0FE86CBE52F10AA79B92CBC4AC33D15A7928B11FDFF591424CC1AC977DCFCEEC8B25B53558CA7E298E2F89CB5F6450DE43F8F9B2F54C0D3AE5B6EE16EE0918E051F7154E53231A819169C0A8059BE69570908676F734658640BB1CE8CD31B56740D9BB32195D33C223A15AD4F643CA984A565F889844EF0D80BA500C65F6CBAA2A7A55BB368D79864A2EB11D85BAEE39E05C1B8243F6B8E1321AC1BFD6B657EA2098B538BC5F5B6028B18D5F8BD0ADB201A364FD25C9EE20C2E8E9B6C17F62DDDEA0B66101B9C01734923C6CBA0E36664CE02E115B3F1ADC0D176EFBD5D85DF51C4741B4F9B9D9F2226A4D69F65E62E6219BE6C6140D32AA7D7A86BDD5CF05140C6DE29F37C1ADA34E8CFFE5CCD92EB691AF6CA1EE5ADFD43684C625ED177558098397D22242B3069E3341BE4FC235E60300FDAF9E408F7D14C8831D4CA47060739FDAA1D718D747D0EE873DBFAF590B13CFD2B668D20C5753E7B475688974AB9ADD270D187F7FB3641E219684C7079C47F40653049E3FFE525E2D5DFB94759AB4728032D7E73FE22111CBA614E7F69DA8AB498F4C43F35E861325D559E2EDF10B7B47D85688ED66CB19EE3FA3CB2E5B83239033666261A47DD91CA60561ADB89A0C98EA9B530B702EEB366D30E108839D6E0B5DB3399368AF366057C1F931A48133D89EEC39ED752CB9AD2469254BF6B1C7E3BA6E1E2788F3E2134477270EA189C9FF28F4B0BD05AA09D9C4FFC38FDBB6F187BABEF818D64DEDA4C1EE1065FA1469F6D358E33FF018A622461FC04E65D2547D4F2EEA7BE5AAD746F97EE212D79C1994ADC7D477DC783079A33E3779501D88DC33617D21940D293C695271144D43A4449EF6C1ED0D36945E8B6071831D6009A834AD80B17559D779C2415D2B716B10B6BB221EC603BA8F5E5B46E1794260F63800C3C3D87E7CC44A2AE0E04D8CA2B462D71769CD02947A6A9E7E08EA0C95FB52A686FB1C1E7BEDC129CA57F8E1C81DE146AFD1F7A442018E4C657BDC32ABEF569C54C434ECCDDA1AF6629BC579A43C16A956C463952F9FDA6D387E02D29856575643C783505E955CA84FCBF1FDC0932625A37708DF0777FAD85828E2A4A9753E31E1EF4179240ABB6DFCC5B95A2B363F825530F8EDD57B389CB6127640E534E209CFD3D8A137621E7B5713BBA916CE6F64695978862C5D8DD5CE0789850743708E4D7714AAE47681BDD3D2382D269072D8870ACF826A64B733CBF65B750C10D417506358EBCA90C8C53F1BD55A87EA4B9D524B94EC99B98DB11CDFB28FEB1EADBC41C4FF21A780A7B4D0441AEAEFB8BDFF67949A23BDEBE7A960F07F2 -MD = 84263EC0B5398487AA059E4262907F9C4A92BF4E834FA276390F213D -Len = 18806 -Msg = 35C8DDFF43A03E507FDD8127D66C9ED2D905CD6B69FF62E6AD19EB6AB752910BA4C5DB916735FEE249D441F7507C61FE252B02C0C93762AD92136197A03C7344F8D041DCB80771FCFB552F84395A16D9E6E8726CBEC9FC3F00EBE1CF7099B6922A5DFDABD4DD8E0D1C17B74CB6A12D59865B092B6435D7238B2932D9320917E85B31F61F655C6F8F213BCF0FD3BC3A8E90DF7E54456FB85C2847D939A3E53264E33EFD86F83BCAD0940D471BC358AFE6F6BA952470BE22DF830E596189FA303A4597DEF5DA3D29E4AB69C9B809C7D24B35F39445C496240E296DA75B357AEA65AA8C2EC89C408276E92DB75E48DAE658DB35970938FABC83AF0224CB985C18231393D54A41830991AEF8C2F6C9BFBFADE56E6004B05972A5F15C400E4C9E0CED31076A6BB66469EE2F1E5696986A62F59FFC81ED2F992FDE971DB865537A7C11A26F2EE9C9579FE1D83672594CF537D1CC2612D41F43E5A92421FDC1B92D3B5ED12BB20B99D4AE0FF11281BA2FA61B38401C46D7193607F913FF01F0FB36372F6BF7FB4B5B8D4E7B3A4D6D0EA483B7B283587164EBDA585E244FDE7ACC3C757B98DBDF7046E8ED0BEC5B0AC80EB6CEDD5391EC60D499EAB73CA48202DE717DF5AE80133D15BADD9BD0682341A2E1C540196ECB0CF872B17D8FC34EF4C91BCB6F5F8B1F51DF88629B691CDA2874975C85E560756BCF2C0292E56F0A33A72FED0AEF298B5013672B4FEC7060BD90EBCEC1F78F7FA03D6B7976F33CB6AA1E47D8AA3EF8EF1AB7D9AFFD4B7DCE74FA0AE6E737C9B3E3A635B32173E295C8A5F6B42B043AF37048A2CB3D6886EEA77F116D6446749067797FDC90005F45EA78FF7024257065DAAE8C2ECC3CE55544534B5B9D5D1B0E6025122B08E1DB4D276B53E94E5F6A9839281CCD9E6E6516863C1EB49CC7BB041CCF2BC690EA7AF10B268DBDFDF22A01D34434B0463D140E905931B9699A3CD5823CD1B0D4CDEC0C6D5064CF074E7F0931D703F023C7FF36A0B543FD588C3D9BC2ED4913C28232D4A9F4D40A5CBA302083FB7EFC2FF56B32279D28D7CBD700C8D93115477BCF143F7BB4587BEF9B5B34C229B3D363E4F12D0CEE1441E52E5A398135C09E6A0FF238103068D4997E1F9CF5B3052254B32F2B720AE5D7702E1DE1036B550649103FA9217198A15CB65B10B6825370DF5918EE827BECF266AAB3BAA949DEED1AC33D77B499C14C18FB620561A17F1A970C5071BD01D3B7DA62A8C1B6B866A471C59929023A191D0698762943587B80263BA95FDF4885236D92C755830DED835224FA50945F005BAF8AFE87C69DFDB5FD955B49EAC448A99F48169B4A4025E195459EEDDB50B2C316AF8BDDBAFA3173488E2494CF92911C552A9901B2B58A6B25C1536E254333B1DD2CD231E2BC4379C7689468F6E3B87AA3CC3484012ED9CA7554721D7CB049AAE407CEA49959BFCFF0A210808969A0D466416B887336F35BBC02D5C61F9D2A355363BCE305F9A2D96AE0E5E502B8E6B6973E037BCD8A53EEED9F13056D1B4A75D2E077A29743AB68954200A95965A1B48A27A47586FD45601397EC7D976AE90EC20413BE140A64430DB37C0B208A5033E40601435BEC1674166FC29DC2804EC7308C79BAF06C419B202EEE6A716A0686B9998C83C08C07E72C41093806C835FBB776E30433ABE45CDFA90DFFC70EEF3F346D2F932E25AB41A3FC0965120F9CC477D62C241D5DA8B6A11786BD9981A857B23334EC6AFC0C338C087B9E7866AC2C089A0175ABED4710A905300D4AD3E3A86CC95117C1B7433CCCE276286A8AD6CFF4F89C82EAAE05DEF87A2AD092A63864BDE9F2FF7ED4D743111EDEF83AF0448AE9347C6D8267878352B41E41BEB51395645BB438FF4D645E4D4B1FC0D67ADFAC9974AFF74ED4BF3E9FAE19EEBAC8A9E1DA4B0CAA8F033A93D120B142128C742E818D4D2E34A07A7BEF2243DEB8F2DAA6AFCC29E8B583843DCC3CE8E5CD4023C2BABB4578C8BF67CD458412327BF64856E6B48A3595F038EDE6292BA347E659B0826157B2140664FDAB1700DF145CB38F5DB98DE8969037F7CFC642FFDEF5369BF48750E474EC465D9417A88E75EF7D916D90439AF4A958885F9586CF9D81307CB9604D9A120A466C485DAD98CFC297F5C1BDE56509F0AD4F4590098DF57DDAD2F122C7473BDEC7583880F53DF2369DBF7EA36C915C857D8C8BE550A0DC2AEDDE141B38641863B21D03850E36C970378C0DB55A103D3B0DCCC211BE767A1D65647C7FAD2B15AC69BE772EBEF3D0C036DCDC72733668688E0C206E68D2025FA13C3E450A00A466E9ACDA364BAB38FBF94240C79FB4A759390C54FE2524F24739F7DB33FCC8AB9FFECBB891477C6683B49C913A02288C78CC174B0E68EFDA3DA99962B4DC97BAAA43FF6EF46C735C35C31499C97E8723DDFA1E99CB41462BCBD1EBB196B7D70BC46FD2EA86190F701A5C960C47BC1EC63E98AD6A94D6F32A7222AC1D9F5E0F179A917AB98F082C4B01909F7612E6438B1EC4580F4478669085C092E1E69223BE445A95300A21885E7FDFBBEA1DB540D9CCF7AF11734E8C07609769A555F1565CF81EF5F62433EF6E2C4E5FF1312814E944E74DC4944C965C9F12999E5C97EAD19D414DDF049603A46C6F31B2C49008A6CA9CE8AF944D25306E243DCB6FD03A2244FF1DB7E9D0F54A1D53750F47B225D42B275EEBC7AFAE9427F25D242BD2E5CF8CBE8F802F33156192A97E8662691D2C7B7B2DEA97FAF428086239DEB91723BC28081026D6EBF75D016605CEDBBCFBD766D98EF266A7F9B4E72B51E6BC785B2360363536A562B19F74F221C98420E9BEDD0A93E1BB382F578BE96DA357B197899BD1C2A70F341EEF60EDF1390991F080A4F206EC2DE23369C9460F93D97E31F1DA9EAA88553530798F4AF12DB0253DC21BBCD3029C633162FCF57F778819C743CE5BB981692D24B5E55219C9ECDF88EFB839BD153794BE1E72A864B4E53DCC827E3D92AE7C222F2D0470331E7C9E774127428F8B284FFAACBAEFE839AFBF25D74800B19405F0E731C42EC6BAA974FACB4931189900F20C4C5668F3F562B604D929335181A3CBED7653EE0B50DC456B7DBE68735853160F958C6C31F6801D8BC22EBBC1195FF2E94956132F89D1464ED2739EAA9F5886C7F2C854772887C6FCBC40993E0E51E484E50F46A7ECA15B38C4ECA43EB23F78B55F2358B98FBB8F9E8F788232579FB5E8BB29076CF574273AD46749EB2F1EF4FA5E93A491A471AC8B9951C7867BEED570BC3E8B16294F1362B88A1CF8CBE98F9E0A9EDB4099486195A925F1EE939AF0CF1A66C874 -MD = CDB7F883F943D75E40BAC919028ADEEE0072844EACCBF4BE237FA59A -Len = 18869 -Msg = 96C9D876C73DE8B8548855E8FAE00D8AB5B31E15B48D8FCFE398E3F13DED9F4D6F2D051DCE151C54EEC9FC790AEB1B600FEB7C4B6DC1D25A032A7A22E11F346ADE5475A6FE22CD55FD1288F0FFC9A521BE8AF075C92078E424891AF7A29A0B2161E29808613BAF9246F64A1E1854684F74B6AADB1A6E79D8BE57F193EB7DE8515D67181957619C0E07D6234A9645E98A42DDD8090F7D5AFE3125B7D56637537F745E9394BF819AD922CBCD362F83F03837FA09B5EFDD172A79517C4A43F4C03EB592CCC523F16DE7E2B0126BCBD801F831A885993470CD102A6BC1647D751F84426E27401A3B353DE9306AA8AFE800B41447E8369252A7A2BB61679B14585E1EE1366C614E31B134ED4110F71086877407F60D9EF8367B938C0BEB1B61A3A839B220F970B830701CC68DB9AA2FD7E2D7B9E2E07E585F2AA47B9D7AA98218D9443D64A91F52FFAB896DFA8B75DA3ABA9F3C86D2BFAE310907241209A1157B6C73D814C20F630D4FB2F0016316B5951A491C4B2CD38F97EB4D56E5838F58173AD2755D03C50DFFD5009096364C66D683B1927AFECA453369FA7392018D11E4FA2352BA834D1B41C4D5896D7C986BE773FD52BB62E00F857C230B71D827E097651CE6F9989703694FF7BCE313762434161D2B09ED89224A0CAFBAD90BA94856C6A0325A14BBAA9760C1FE9E3EC7A459E001590682F533248F0114F0CC3CED7787A30FB775973D87B0ED47E83918FE4F15BAC712680AC890862BFEA96AD2EAC889601E8603D826EDD32393E7208C4F026AC40A47389399D9B4D6F6AB40BA107263346A8C89BE6214EE2811F5339138E988E94E22AB2C1ABF722BCC95AE53920178EB12403F66602DC9F57C5C8A77591B3F15AEFAF3F42F41C4543BF8D0E39E16E069560752D0DB950AF12F468958522D0A6D3DBD05B929BB34458310C4DEE80E0AE470D929A159FC1800F9365F20F42108BC9B1784A118936551136A5E03B928C33D094766B1083B38063E38A2D638D6101CB0A7C56BF0899DDCCFD5D55FFE1550C68EA2DEC4DDB14C4A16750287B92C436106C9319BE10E02832A77B78C922A964ED6F291800734822B86761506F98D02184A3B73286828BD48B60D013BECD48A233A4E789B22837958ED0043A2553C7FBBDE32B9F42C433D6BF60B27105E62CEE32EC97798FB18DBE97F2217B589B16024A361A8ADE5C8169ED8A6076D704B2E020F199BED2D0F27635F780B99641D57C627420D7A004205CADBFCA9F9D833ECF63643E5A0558898D230484AD9C7962F7617FBAE2001F8E5EC59A6EDDA20971FA830C42490029CBE6B47F91F23C2D36AEFD3E657AB449C4F33DC16B3AE051A6F17729B7CFA42CE0D415FEA8207F34C1A4D4D4D0A6952168F6F2F67B39E3BE74765331416579C67542EBEFA7D4397D02AB21831EE7715CF88DADCF30F1398D349D2996DCB3F23FACEAB55A39235E166F5A7197CE6F337E44DAB7C50357DAD1BE39C0274D0476A684E3B8F69D9851CC1FFF8F6F908B0BC97175CC1ABC1E4DBDD8852A6D7B2D1D1C345C5D591853429109E2B093513F77D23764263FE9D5448E8D5A6EFE06AD3A795163AC6A36F518166FD0934405BFC7A7BABBCECBE559C93773F06B81FEC72BC356856BB51DD6366240C3889DCCBC457B15BBEE38777C183D5C2059E6DD987B9DEE58A37C04027C766A816BF11230DB773F7B8C495C9F5D3FAD1C23D706FD54D1D09D3595A982E1094EDA22300195B5DBC650E03BD1C624EF08B6EF78EAE4128FF5B1803F717173349616395607E12B82B2AD5FCD25D4DCC286344D9366F7702DCDB9E2243D1A0FB6C0312732EEB715D52185378615242E857209FB51743A8F38F4FC6F13B8F964CD36AD5A2603F5AC41A19D10207851F57B6E8963E49C671664EB1C7C1891A372688760B37BAB74D43A4CD69F2AA85FBB76BDC43C9CFB6AE50E42F03730AD34E993206D81E2AC7AE69463C79B916A394D5BB01F368EC07E5DB919F477F0CF5C98396C36E7DE180E2ECEC0284269D29491484E4AC12FAA427D21173CAE9F137BB704B62B7D3EC7FE6F9FBDC6A0BEC0D6EEA3E1E4D5536AC476B27A32BC5D9684C68D899029D79B068BF90AAFD42B3624939D37B9B9C1D8507AF8839891CC312DED54F4AB78691960537DB79965E3D4EF7A7D8E3E2090FC33332BB2A580995D55674C628D5779E3B847FF5253FE84FAE8AEB01FDCB62B9C56BB9826C8C804FAB8706B86F9E51CC5B3E84F7386BCB706DADE7C2D0560E1CDA631ED0DEDFD718C7A38829501F3B2CA9C9D7D996DC919069FBCA902E2E4A3389845E18E487770089D65195B16F15D3421F75B4AA48C5BECA5A23C98B11B907CCB001F2EC065ED596D75510E713C3C904F93512DA97317919D82D5AD3FA7B888DC90245DFBDAD212DB00447966B52A659B2B2198EA17A27E5F97161DE817DA0E5A3801926E84A9F183634712B89DC785E32626E1CD368BAF03A2303205CCF1B306858D0B8CAD45B765853B1AA80C35EC32C0A309C8290B5681AD50B113AFED42197263C467E5996844F59407081410E8D8D60E64DABFC53802CAA6CB1C1B4B1812085E783B6B0BBEC95C009507B9CC354586A3C1D7A4490CDD4EDD543541A411F64813304F2355729D00B99E95CB653F56A651DA68548C5A86742D31AA66EC08B6BA7BAD5EE9AA74A4CF82E424F7733B12C180346803424419C193F2D89E40C6A6456A2D983DD19EB9C9D7037D9ADC62B655DEF9D13988E1F59011E39A588899868402462862D9A1C8C5C43963A1C6BBD41EE265F58A1BE3B7B984C59F4794AB6525DFCC5D76984375AA624998440FFC11C07DDF320E7485DE6AF722B9D72AE9B09223D12AA2C51F383AE9F423201AC1D20CBA636F8415981A47064335A4F4BD5AEB05263BB8905CDB8DF9FE5367AA781B68B105F88BFA21C88F2AD4F050CEAC48A42BF510F2A0CDF0AC3C30923E99B7580AF21364EF23D3CE7E10FF37B3966997E34E9D45DB15F652EAD0B1B074E1F4A9C83EB194596EAB5663CA0EDECA1B6EE0108693E1E3523D9E9835D40D2098084DF12C23DC8856D9615A020AAC5A77647912A08DDF357CA6757B42D24F302AE46F4B5B532898F1CDFC8BFB54A2887140E6309F6C0D6004C9DB4A0B2212B26CE586D8517CC5D9571DC147A95D62DCE798AB647D021B410E2DFE93DD65B4064386F034DD37E34F57D1C4C155D29305C7374FF60E347E2DFA8A8A83420FADFAD31206BAFF7B08F1A8806F523AE0F96C3028B2FE4C6DEE6B5588F526DC5F1D181BFD756C200351BD625F7DB5D9CB04745F042EB9C548043FED0F9037BDE104F7783BD0B541410 -MD = 25EF41ABA18BF96914A840378BDA90D4960169EB09B6CC67EC9FD9E0 -Len = 18932 -Msg = 2C98424A69378DF0DB0EC1D66FF4A97431B5F851BE7494D249100D2531628B2781B6D2E0D1EB3048422B56F69D3F568A65FF60E76C24DB6B90CFF6B02E52BBEA9A614C9875916B678BC17F5E6A6D80D5D867643842ABC851439802CA909A2BAD35D676F3BC9771FB5E42FA5929786CBA626C1954F664EF47FD167316563889133EDCDC13995594DDDEF1A4F8E33001EBC36529416F260F49F5AB9E144B07C57C8FC31F5A33C8FEF32782D1E0697969D0415C91DACAFF07545CDDF3B2B8879274FC0F9A75380BEC14E808CCF8E91FF1D5FDC2B925177C3C681DBB23EE6165BB93A12721F407D19BA581826891051E4EAF039A055E7F951BA69465FE6616ACA5E3534A051295458A6277A1D1452734BCA9468D9005BAF8ECB7244293E2E8DCD41D0FDE8E8D703EB09E3EA5FC45471970418D129EB1E75449A1FFD594EB79FE1AC9EB78C684A61A89721EE18E8391D2338F517D13720012C981B53A4368B01F167127AD4F3031127C9F1FE318268CD73EC1077BD8EF0AFDEBE597083D7CDF570014BEAA4B47D78CBB310A65DB11B5FECE5205C6E31892AFB0F4CC03F763365DA5157735FA65F47336D43098F3C1D45CC5375D4178FA27C45EDB35E166AA45B64F14036907F5BB59FBACED439F6D6B340C64040ECB48CEFD586037CCE4F5A6EA8FE6D3790FE5F0E3EDC5E9BA24A0F3820D216192CC256E4B4BD6DA47B80F46258D25093CECB4060F66B3D3DF3DAF0D684937D8A5FCFCB060D73D44D049D36D88005C02FE5E403364792B8B3335113D1324361D19AC86DFBF0F8096627A4DAEDAD256B8032A383A070C3F2C9249070ADB0FF0D4B7D990CFC3107D80C75CF2C84CE0AAF00714AFAF342D7747D74B8DF12E8B1314F01A76D99722CB7AEBD301DE9C9B7221ED26D89DD7FCF67B1FD6937B845A7801976858E384D3C9C9BCD30C81FDD6DFD9808EFF7C21A82B31F18E29ADF77ED4485AFEADC9FCBE01A2D40E5BB4A3A509E08F23AE666FB8A831388EEB0DF24E4D459ABD7D9C45A20FDAD396612890B557C3676060C3AC842E0593EA28E2D42A93D5DE7F3AA64808294A36699130DD4C37109DC5C0E4977635B08F6188AA29F16780AF97EC0BA9821B25FBEDE69B2DFB224720478D7E560D8D15DCD15736F63EB342961EC576FA2756673FC0E126E419D5849CF5A392F79497D73BC3982F99430E2CFF2F4CBB5C3AF00EEEF99D1F2294FA9C6D24C9DA704A38A546976E7BEF76FEB54569BFBE62E1E85B45B6D27779554A17330B929114AF0282177CF694E01CEB6340108DC60B6EA5D07D731D8B526B0DDBC095145826D9D694947B287D233F9AF25F908910860153DB9D4B6F2EFC08223B5EB1DD71F095B59EEF1635512F976BE5B176A0817EE9D781EB18A963C5742DDA2CFB86D02C474B86F06EE96A16EC801D4FDC7E461BC91A9A1B40C29C75D86D3C4EB7DEF395907DBBC5A05004D5A9799CF0EC61093F24A7139D62B75830CE569F479CEAC4E4165FFF618949A085D09301160BD5FED87C23BE7F1C6BB7A3BE4303B560F280A5F7EC47C435D741B685A7627AB84ED6CA2FCE40F6737EC2B2DDD886993126F5698A5D42488A9AB1DF7D87C31B90790E35AAC03A6F420F86B335B94A8B4D385F7EC11AF70DE85C2D6523E28C0011AFF34465E6370F5DAFF767EB1CCD14619FCA0C6C92D06D8C0CC5E319217B8B825BD2B8AEAEDE52726BFC4E21115F17A54DB0130B9C61DE87581D68BE0F4C93F9DC1DFC20B693536360CC9A17EEF6C768C08BFBA4364B87A3F9188945BBAF2565F16D2F4440EE44ECBD06F6D4E3F43C5E48E2643B9CE22625A98F74881CB12EE68588E8B427D496E0423503EEC908F2604EFFEFD199616CBC455F693375E65F3ADC65B1A4EB5BE433746ADE49672FC85D04582A2EF057D11D7B14F00FEF116349C15F86217D12141C23823E8C36E6250FD910533FC45D3EFF8F2DAA37BFE7A882F14E57D85819A64199075D4ACDEA4FE07E3F92FD1AB359A13970B58D2EA43EEA5A4267B31A9CD3C1C475A234E1342B47891ABD9046907B9CB8203C2237E652287AB7C3AAF5300DA3DB908182EC3BA0E5C1327AA1F0F2E24A3EFE0D6A47EC34DB293391AD4A6DBCF78173885694EACAD88196F5EAC62932735AB459642E04EFF87A9A61707735E2D8C8E2082FC12DC12777E5B6D58BA5B9065C104A72712A5F62112EB99EB408B1A8AFB1DDBBF71E5C9823864242E6DE00534B427727DE1A50BBA343C40D67DC59707146AEBBC65C8DC6D3C40739A8FB62B278680C86B8D113AD46DFAFA32F4CBF49FA89D8D02971241D7103B118269B743FE5A4ACF22019FFECAC98D487ED923CB9058ACF683A5FC7FD86A56DC1EFD0EDB1366D974CA6E3E369065A13345A3A35A2BD888EE493D7F373656F2EC84A1F9742DCE441D15B13DBE7C94E3D408150E2BC84AF2B2703F287F811B968E50E1B7E68C32B9EEA8019844D311B5E82CBF98184524A01E79D4DAF8CF068F2E96EA0BD64831E38A7D843EB256C1A1C6FE46561B2A8E2245956D5E2F7D01B36766A836E6FC214F7D1DDD330EDE9ABF6E2046C40EC402BE3DAD05FC726E61372E049D20961D7A6E0070EDA8F73182A440B28B0C1F53F2AA80EC7BF64D1D5612812F1C0C0E131214F48AF71DCD7C90E1DB2A79183C813CC849C327CF64158AA31060E6FC4831FB309E0ACEE81922B9B5451FD8C07EE55412FD9EF98AF9A6BFE28E6657EAEF5AE15EC0CB9E10386A6766E944D4C2C584647772EC159B702888D8F720488BD2521D3EA6B1C3F7FFBFE1012A7975E1E213355C6B9A6F55717C8DAAF4BB596402055A489EC4D07857FC8867A4341C754A848BE09CD130816048F62529FBF986769B14E34FCA702EC21E5975417D3FDB59EA4A48A5E322274676FBAE3D8895BACDE5982B42F0C454793C445F2092A5700FDFA6A6DCC536C6FC864212FEBF6FBC65AF5FE5AF7F37C39C0FA36F25917E96D87BE4DF5568F72C309C7A504122526489376767481B5EEF88F7F683EBB1943C402B76C701DBE18EF13A8E5857F442C53E99999886FCE724725000CB7E891C2EDB09A59937E16657DAC20F50E65ED4477BEF3AB647FF8A72871D56AC6D0588758C9F4BB636660D8EFD327B151B60C4580649F291136DFB872D0339EED366938946DACC649D2A0E12CC8F2B68FF2D1AE099D172158DB2EC184A0AC43621C61C8AC4DBFB4596DF6226DC19D38759954ACFBC728A4262F1D61233934AC45735C16F54BDCBA4446EC0DE40094DFC2B1F71200369605C88DC4074AD7F459A5E5D375E5E24099F2687986E3128D3D8DF618AA628EE363F8CD0126F8ABA1455C1232C67AF9EE2935E0 -MD = 8499274258C31032BBD384710D6D62DAC1394E769911587CB64F7B7E -Len = 18995 -Msg = 35326F33687CDD95955AAF21BDC8CB6DCFA1F2F227724FB9D31955AADBD4FEC7258F6CBC66AB3C68FB313A819185DA0B92E207F6E8CD6EA0142474E11421F438532D5F45EC7DB9EB88F3ECE3F2CB6537B41FE105E043D54DA2FE981C8598A8866241090E18278F59147644716DB1B98A3FC68693B5F5F9DBF05383054249319C42D69E4105D5D6A21646DB291EA689EB4A841690804A15432BE840FD1476B6DC9E6783A8855FE69D552A160A47A46C418A1264C5CB47CB1BC1FBB71C5EBED3536E21C67B8D7F8BBD74EC96CDA83B2E5CAAC21ACF74749DBAE64990809F909918E39AF7B3D386EBF7D4B7F60D0D8AE3EE0FA6E2686D55014C34C1E83E3E7E87B7FFC34764E1910E4D32A6378638D30B3FC263A17384CFE0247D3849FFD5DDF144C4F8781E1B07B7AE6D9D1B26062FDC91B0902FF7CBFC884514ACCF5391E9F6F0BE52BD4A8F8A16EEED5C3BAA86C6E740C7593F05C531FDB6F5D22EACFBC5137288206578A39835E69EC50C0B0B5A90C531762DA3AF1D5C8D1286072DDB032D253B50D51D4AC8C358EB9BA5BB5EC4AD011E5F398E19CB96784EE82CD0953971FCF6D15A873AE815C8D85D499401766B4CF264B99D5AE93EA5FAC366ADC42622189B3FBFA015DB2081EA59D4E96EACA3C6C127BF4588D0474160A2AA2F46A1BA6375C56137B92499985F4CDD6A681B34F3FB1A88466408D077274C0570A640E45C4B275E7FA8FF41D7A5CC0EEB25DC9EE57B73FD7E641051C3A62E1C479BBF4B1C2AE4741FB1EBB4D4FF81BC6DE065D85829FF43D047E83E214CD0F96C63167D82A4D7DE7BC16B718AA53C4169FF3EAFD72CB7C4E9A18974DD96784F0551F3B850AC6B6EA0198EC349B1319F640DB9F87A385929C55287013A666ACD08CAEA7A3133A5E53F04CA746F8D4AF6661458AD1A5910355F599971B0325B0FF6249D64619B17DB39C40004258CD9D0B9DAD11440424D1353554D93CC45E4FE9C4B2222B9B596E561F4A52E284CC16475F27C3F3D1EE65510E5BD234CDDCDACB334107510F10F22843BF125B87CE2B98CB3A8361B6BA8147227D3A3BC2ABD1263320E52FEF33470FBF4802E4247FFD68E151303EA9C8F1210D86BA3FCDCB61766C76F96283A7F30EAE29B79763B50C3E4700D1FA3AE7921286353D770E043E7F2934CCFEE74F4293AFEF51F594D343E1EA8DAA3B2B120D0E7A276D71AB21713704A0E602EC9321FFFDD05FC487B195D3D3AE945440B1E89B268B4E8D522DBC3CC8A6E200CF26ECCBE9013A1A1D94A0DD64287B88A15CE2C4EC129B0B5494910E99784C2E8534E7956990912E325B29BBD9A6AC7792C3DCAE1BAD082812D5477ED4540B0B9682350D171AE7C503C247377CC0A3AA61F249AC6C673A6AE0D051C19B503D0B77715A5112DDE1B9D6AB369A9CA6D2B7E1756A38504AA30C64629EA5E1FE87A3F0C3945CC7CB5E3ECBC7D83865AEBFF1377BD00B129984E09033B92ABFD529C782ADF8AFEFF1284880CB75021DA37DAAF70466FD88BD65A3C6D43BD6FB44C9E1BAD7F96782C613FFD0CA2CF884F26DA51A9D621C004E8AD3B38020716A6DE84B66E3A5EDA9801BBF761C58A099BF0E5494AA58BFEB39321DE29EFB5FF54A875CA7389512CF788562EA26EA59129ACCC9069092DB1998A6490F46361424DA0A57F087A6706BD3D76F2485E74716CF57BF99E2C5C3A5F830F85016A8DE13B12CC8B8145779F9A827CD69F1C50140D14ACA247272EB8CBDDCEF67E40BA2FF52B19206851B961911AF0C00C25E570715DD02ED17DAADE8E3F495F403E134AD0DFAEEA94215D41D01986E264A1BDF903D770340DC78B09F20F96BC68DA97693FA4E1EE16719473C58B4264CE8DE4F233C644D1FE223E470D29BF316C33D6547FAF93EFDDA57B765D5CB5EEA65966459DEEE7702EA02283F0BA39E1A337BAA7B43A6BFD4EEA53E62F163C2895D7DF419A0FAD629AC3AE3C562DE63FC8F9FCA1EAA4448C44CF78ED5315639D7EBEA552A90065663C2D01C8BDDD9ED141535CE7D78742C7A508725B1BFD89F63BAE0F015486605D1096A8981727962AACAA07A6416F10262C9E7D57DD577209D5E10AA3480E7A749378B4FBB6BD821916B84620E4F70404A6E93FCB7092135AC4A5A9740BB43DEAF8F1313202766E7989A092AB5A5DE1D50CC5B014E96B0987F44AC2CE0809DEFD7C90B4766039600073BCDF8176A6CA5F5679ADFA459BFE548CA0F35C56C75DFA1CB29CE2082752F480A6357AAA67CCE033772E53ACD3F448C26AA0E85D07FA208AB3FDB8731373D2AFF3251D2E39EEA9D7F1061572010A9A17DEA5E91315C39CA149B0BA600B14EA71D9E4FB89452D113DF094EEB7C480F76D48E9F2D36D4D8B2697BC567806C365419F327E6B852B4066768A511F54E64C57FDF327F9381D2CB2229E89A4C52D8BDCB54D21D87A9B5536219B6B945F06D369BA9C20208325237A2A95FF44A20BAD3D5A881A9041B494545E165B873F479739DF24B5E1FCD55A4C485919567B6C1084D471F5F076B4F2A8EEBD19987CF1C07886F5858C4EA31EF2312D920A76FD2476613966E79D26DE141B649A50797C2A658D14CD4136FAF9B037D5A9ACF0817A0B40B8861AF0399E6B31B8C42053D7594EC967653619FE645D67586EDC93B47CA61FFCF5E0360BAC7B032D571C9C35307C256404DC7423B4C30E44D0EA19D4CE30CE63E1B05892B3630D5745464FD4856DE9700D01729180401F8EA1746270BFD817FA2FCC7973BFEFDE46F55C6449F25E66729C0686E93E72B0EA7756B6F548B9021C73C560DF583BAED60C8DF2D368514EECD5129C9AB1F1081722023F7FB1AA914BC22A4B0CB4C8F1C752DFED7C7F2D7ED9477E440B27A96CB42903D05CB4C3C4DD4573F86AAA1769260C792776A250215DBBCF64A45BBB9644EC45DC5CB4FCCA13433DB2C0BD06294363F5D2D9A405F452364336C3DF01A4531F11FB732C758C80D29AF4DA531512DB8E50C94D3F828FA427BBACFE24F1FACDEA51241915731E3C0965D81D431767B5A2B68758AA4F9552DDDD00159C29A5298C6823F32D474BE53E89331DA54E8605DA6C6B313278B409903BA2F696087A22B928983633617A1C350B40254AFB8E8C8A09E7E0750EACECAE6190286B73C45186F9F7E6B7BDAF4C89E400B56098FD9646CBA2E2C90457F82D84831607103FC3B192BA2158BBDC4D68E0EE07CDDE53116CC8BD70629EA5EC2E2C8F93A4A6F220F7B6721EE0674544897F95C9E5433B2199246B93F59846FB6A5E30757097F59B13A026DF2738AA64E86CA51F7B23775DCEBEF1C662F566E6042A3B5BAF2BBD9202BB6BD159E7D13913A20999F5B431E06171F820 -MD = A86701D7779580E166430B8642E98DAE53614C8124A9CC26DB401298 -Len = 19058 -Msg = DF49386C85D67053C4C3E4581C0B19F0A06B0BFE64FB320CE263D214EEC090560D110C40D8806EE8F1456A577728A590FA3D88EE859357765A6BC8415237FA39D9DDD43DF235F532F7C4F2521CF30B541F773B018062D9E52D411588AFF851024AC20A97432B0813E711DE78CA14E763DFC9ED8C53C025BAA637F55492DFE59D8B62F8D2D529949ECA32EDC79627F33E4F357BD3ADE0FEF5A0F0B2AE28B60727F6E41300041B2F14D43AFB969E34939150AD020D16AF4955D7FEF445DA58D599664F32E3ED51586D18242B82DC7954FC0164F9E795F6C58C1D9508E18DFA01027ADC689C4A91045EEB3973C38838F1D8C547FA3797091FEC52784EAEF0DE1E8729955B6366ADC327F2BA1ADB7B3E77C5CD3890EB84D536B45F7242F55DC82C558EA117B3EF78F0A3867A9E8F20DD97CCA539DF4877E8B624BA2037524C0277B57461999A7FCFC4EC3B44C11BE54698E222ED24A7D4CA949C606AFFA1897AC106807FF3D64FA1B225AF3332CD347387D47FAA35F83CE1FB50A00F39DD8DE83FE6732387D0E3501E89CEE792F4A6CCE3DE16D36D9678B6145C212F1B42FDB53D00192205DB7B707674C0D72019F05110D3745943362EFEDEC016D24D7352E583EE857D541EBAFE9D8FCFDFA3FE76DD49DA29F54CDC6983EA3AEF46484FA75DC8CC60DA4944D7892E50318FFA9EE61DAB48F631A90B7C132ACF530204DF19F09F8170546DD5DCB285974979BC1091370F303946BB9977F6F5FF9C86B0EA71C825DAA93E9C7D8902299320AD61D89537141E67839CAAE5753B08071D00D6AE064ED17BA6CF1FAF3A79082E7C768305503163C48C7665DD54187443112C66F0150A3055FFE31461490F0B8A8F7ABA74B672B6E39925881F3D6D172E2132E8A0536D4E39A23581EFB7930421B98F60E61F338DC5120296E3A03A3215A40EB8ECCD4DF7D872E5C1DAA1B35441CB49162C836AF63B5211D0BB1161352634E925B8BD3A6AB692C258DA4A024C74325764F551EDBA2DB4FBF6BC60C51109B40CBA99F8E99CDDE8BDFAE4F46FD1FBE4B6542479196EC9A471EC60936387F9CD19F1ED8532B7DCD4EA95032B59B405C26D1BA4BA6F4CC61C19E3E165F7A03701F627D079863FC65C73D5234FC5E6F5669F0D9F32B29379BDDE19B3C9234819747F2AF4BECA4DD28721EA6CA341221C22A29DEBF2B6ABBF69C4D6F7A9A82BDE238648E9D8E8EFF1999B6CB62693E38C2920D56BCBEE65E023D707F8CB4E18C6282D508220C7712014BD8E7A2DF692647BB3D55005CA803E189DFD0BA74E7822BB4DBF1426DCF8B8A28362E396BF512D9A2FDA7A5CABBEC343943A1DB42EDBD7FE41659CEF94F4D5287F18692547848FBEE9250F336DBCDEA693F521319AF17AAFDED2894657E0BE238EADAA2E9351E29B7306FA074DAF5C0453624E4F8D93215604FF296B328C86EA008AC9C59B3419EF201BABC28C770DE8F731C8A969026E99FA504B9DD675A6ED9736EE2272D9512C6180F5FD1C6DE8807095A213F50FD1BB3489C95732FC72C5398731348F6C80F66CBDF3097BE850B3FA8858FA94D04CD574820F752980F994CE659DF89B997E71F5053E84DD66A46462A81C27840015C4AB9E0A84994B16BB1C7CA79019C8998B0EC4321F476D66D6E9BE66F93FC281175703973A32AD4D416B466840D378526981717E5A7682532898E80C820ABC0AB013C0B1CCB36D5A381947149CC6EB6D85001462A9B750258A2372A75F8EB4026BB1D6B0B4E07789C154FB0B565B045D3C72749BC12674C92C781AE7DACCE01F515590D4F6F1F5E0C342DD0C8F5F60FD69F004ACC020AC5B8F179143BC2E4A39C16EF39B42BABAE744B791A0112CDE7D9BD220E79CEB494BA882A718043C89B4769B02EC53F6F5E96ACCE19ECF86CA749B7FB0CFDAAAAB001A22B83C5F18E0824741B3CD46C984CEBE48E9DFA44B010C4791EFB6B9DD97CA163CA63A84D5933B2C4C419BE8EB0EC06031634930542745F7860882FCB0F1C93C3005B2F74DA40598999CD128B1AC3355685457B31C120091C0A2008DE228F53D504F6976C777F2E9EC99577E21376641D3BEBBB1B4DA4B1BB5343D06029692CED2A08EB536388D294BE8BE3B3D9AE142F1303EDE9ADB4A3312FECF8382875822242028B330C7120BA4B3653AAF51F96F245CDBCB12740F93403B867B0E707699AC7F86ED088F5C65BE161B416D4E4A6B19888A42354449DE910E7DE094CF73AA62BF76631DCE2FD3EBC408026472BC35E1765BE3BB3D9653E31799558007239605CCDA1FAA4535A77884B800EB02CD631F2FED0E0DDFDF897EC9DCD08C578E8747DD51AE2620871EF4E6808409DC528EE820F7221546D0080705CCBF89729BC9489DFB1F6849FAD98AE097185D8E0F8855D4793F843D32D12F8039C139AE164BB75622CD0CF747C212509601E08A839C6120185343CB893C9A02F5BD384B9D9625129D58ECB7B5ACE3CC3186158EF9CFFB7EE2D62AFDA401796D7F9FF84FBB20320E4CA9867043F12A458CF03C55CDC5FF347DB47EB214832D8B996945306230BEAC1FC2CD59DCEF8A70DCDB69D996914F1E51505A8C23BAAF42C4E9EB1A40423BD255B8141BF9D2EA85543017119B063697C80E392D89030D28DCD3664C972BD413C53DFBBCBDB9F7D71B64E8D9B7E0CA8452F31BB78D27817674681ABF63570A7ADCB24B4223C1C0D5580B3C2264BDB8CE9FF2B50725584A1035E92DDE5A32FCF0049A26B69FF6832D5A3836B83EA02B76FE37FDEFF5125ABBB78EE07280C200B74E72436F8C3B64BDD40CDDC1EDDA4A31F0BCEB54C4BBB1C27EDC6529C13950E721B3F966470C20800A60F15A70BCC5C576C35B34FE8462A8438A637659036E89756FE0D824267D6A575748A7CF24959C4A7C170E934E8E60214004A963A1B61701B6BE1BBD46C86580EFC1DEC8F63E44505959870476967E816681221262FBF514FF69B2361B0352DBE13FD449D068FAC26A6C90A6BAAA82470B111C2B1479BBD6E8353E0D19E716BC53BB8BA0E2B8FEB4306FFD9582812C3D81652611E0D2BA1FB2466308265513DC788E633E839E44B462E55038291B3DD6102567D4829C30AF9D0128835A53024E968B688248A150607B9449F79969B2A421E78C05A72FA11567795CF3DD2ADE844242783E6871EEB33DE14421991D7F0614C8878BBB5D694924A24A8E38172A7DAD44587A150B29C8621107C10E38CCE3835C3DAB029AB080059AA08F3A7B7C456072D2069F50CE0011D9346099DC4ABFE24015CA12343B000B05F7B5BF1D353E383E0ECED12FE051B745845D6C7427CC61A3E2A2A2694C2D3ECDEC7F4B90E1BBD5C47A358F4E0A69F2873DADD8BA9F184840 -MD = B4067F3F7218073C55D1949F9602B9804922DF72FDEB60C5F1A9002B -Len = 19121 -Msg = 2C6EFC1897176873B3E541D5DA8661150F845D1D36717000967CBC7B7B639A21C42891FFDE2E3245323264195A9EE4BFC073868581747913B99829E1A08BDE849E1077057F5CCA262FFF8640AFC3995C11A7E42C046E9E77FEE7BAA5C55FBD467E98062E5BD148DFEB338BC18F3EA209C124A5187D2A4D48E2C2B781F08092B9FBD408C9B2E5A79DC1D8A97EA5C04F0BE1B40F78F4092E37A14A1593DA6FAA560C0A5317C9CA61EF2B1775E32174773730D3C7EEB7E0B051D693395CE12974823A0BD14B67AA18543ED3A927F315F08556D1D91B4CF583F5AB4DB0830E21EB467D064F2A7082DFBC0B1E61F8F379EB8FACC807405C4A2F14EE8413FCC03B41E35B6A75B15B0F34D02C320FACEC08B7C1A409F04CE73825EF86847BDDA927E24197FE4C96B2E96109C815E078FF62D70B4E8C06A13DAE331E7D945D1701A4D072084E82D4CAAA6F80301AC7478A4B3CF0FE9945856CA3743FC0D9E3E1106A0C3D4B3CD9C886CF6CECC87B2E4F14CB30661CE3FC85B2CD30307EA7A66FF1FC0CA0E85B8BAD893028A1123F8CA6B14EDC5A3F77AE4407980529A5E0E95FB09374EE2F8D2E832FBAC70FAB7B0023B847A114102621089305EC069A2E81C2233F72F503D9875C65FC16259C6FCFCE7F95DD964244D25F68F83EC2AEF68A86BF9407CE0C07239D88762818EB2F1D0E509575A2A4262794C7F367CF587FF9D03F42616CC5C70C66A6EAFE829917B29D86795FBABF360FF3337F598C16686DD79D9B888FB25D6B87EC45303BCD3C43621663F7B5CEAE474379C798FCA0C84CF04F0E0452B1B5B854DEFCA57C7295D317B60B0ECE1CF4D92301FA149A05D635558165A7D0533B6D08C8B8B1F46DCB6746CB3A6B12AA7D05FF8B9D21F3E4EDE9733BFDA86D4307C666144027EC0566141714938C22ED6DF91CE143371BCF12782A95F931996D2B825AF528E058F9C0C9E048EC00CE50F413C21749DE2B77CF689F6BD1E23CF39605D771FE45C761A81C83F2127D93AB73DFACFBA73699B61E78657838E8F1299C2BA59DE54B3BCC28CC792D699E1B672D10F0147FEF3CA1B2A8DDB1C06691D04A29A3931215ECDE361B92C71BA121ABAFF63158EE8C7864D01C8A7EB2A9471A8C50894E15594282CD47158A8C723DB5BF4DD131E1539BCCB221170820801E5C52C74E55F91FFFE76008E22A5377515F09564AFA99345B6500EFEFC5AFAB89881C62030B7BE1731BE60763169E88E0E5FED8A79712D625FFC7EA7D8006B69F43B1C89F76EE0BAB83FFDD5704A261551F86AB2D28EA077BC0833D9791E7387D4264623F6E401C468B23161CC06FFA853BDECC40012EF30910303184FC13331E05D5DA8AAE965891F93E809974AB83AFDB863A490A44CABCCF0DEC1B465785048DCB19CC2800FB5B0CE8FE78CE5410B5B5542623AD163139B444801564E19B52A68766CF02BD7F08148768771347C2C67972E43D8B1E2BE43DB4BD49E758FC21DBECFDEDEAB6DD2FD3987DDE810E754C205CE019932FB12769E7C39DDAA0FCE84032AA0E5EA98F4F03883CB2AF11648D6FD6D33A012B5EE936F420D4B69A6E77FC9E6B6A085A824A639F2F967E71B0EB3357CA98A1942570F2DD85020F71A414A4124358F918B764992755BC7F07E78C16237F44C681FE5BDB79B5B5D9B305DE6AB42E6478E561C1A6B69C22862368703A0D1597BAE8B21BF7D152E9BE15D35CA3A7B8CF9C3A3DC8A3ED3CBAFC75C681F6285A1B36F8AE104D7E566AD3E3EE62B1684671C4CD337E547C4A8316E09EB34EF52529CAFEE3C256978201EBAC6BCB2F0B4B57B2D2A5F7B52CF3799059C96E18D7FA11A30692D8AA63BC64EBB161C9F999DC2840D0DF870C2D2EFD40A72122E5D0834B8BD4BAB99E702AF7C9D502FAC608054B003CAFFB1FA055F664A04BBCA31F6E382EC52EE5AE3DE85AB223DC625E138341E80D7E403E24E79D4A50F9EF2D680F202267AEB91B5F0C83D628FF8BE2F0C253E524F367A5BB26E1C66EC5367325AF27EB0C02290DCD1D35FCB5F6F0D72479FA2F2AD076D648A723B2C7DAFF6EDD524BD9BBA8FF5A0C542DACE5FD4E0E0B3C8433B96E2D48BEB4F32211EA2F12771AF660D3F1F64112E4A1674E11709AE0D34691F2BD8462202C7E3DCEBAA24B94862FAE949034E0096C76E0403DF83E019AFFEFBC68DE4CA77576BC27FCE956BAC9FC1F71D322BD25BAF51818F779DEDD8394F70092BD20D6B19D24B26240E3106A1A74376F1F18D7D743E95C6B81BA25A75101F3801671238B40352AC98150F1E12CCCC02556946B8C47849027404CDFB8549795B6F0D7A5AC77B084348F70698405CB360EDB8919094EAF3CEDF56645FEFB250DDE100BEBDC8FFB33542BBF6EA31CD204EE95526AA3598F3D7FD756E764E3339A0177652A70A38BF9EC53C413246BCDB5371D5E36BF27515C0BA7F6B95DA777750F591AA3DD91CEED7DA976EE4D52B7CC43CCC46ECED15FEBAD619AC5ECF581F1E8EA800F58281DA6B9D8D8B29EA99F86D4112117F4599F723B85A1D193F27BC514314C8354960CC6616EB009A5707F2F0EAE04CF8422BBAE0A9F624B5493ABC4F3826B4798111683A35D4ACD98993C3B46CA7D2960C98A53F8F67B6B84B561CD2EFD856F76ACB5A5BC9BD7B954ECB8F771380D3FDFE38FE6B7C0BB2E9557C4F3681D63F72829D99F88091275215866E21558FAF70E84DC0DB057F48A5D003A723A73ED37F4BDAF3586B90F4E65FDA2E4A1A85AFDD90F25966391AE2B65CFE400C7AABA7D648133655129981C39BD81C58407BC8BD629F758873855D527AB84380FE8E1942325BEC7A25F6E43A9349F6376B4FAA7EF5BDB8A99B7B1BA39A6CE97A3B69433551F79034438A89DE5D8F250713B5196092D6CD06C4134741671F1FFF25EC656089A2F3F7A1B6591D5814B9F8BC5358EC088E8BF314F335EC2F4C26BC707587F85D3C0B5AF6E7B6A74EDC6372C5ABB115A82E44F9D17529DCA44345F11A6EDC8125A610FFEC425AD2377FB17BB4D2DF985433D981546ADC6494BF2DF3F0A0F475CDF0408DDC2A902767C800C9B059272904E9A82884FF57F34A4D0C292C396ABBAC7FB283B33D7FDEC76BBC2005E9DA356E9DC6F97976A5F9879E1C3388A25D845E978A540CAE86467B0907A28F64F0930ED165922E95A2665FCCFE52397F2E83FDC6A778DD2FF4EFD6EBA95E27B00A9FEC20883096917C63AFBEE031F218FDE54FE6932AD9AEF56C63CBE6B9C2EDFE8573F6F731CE3BD5F8FCAF73A6D35DB7A2C9498A1A4E988BCB12CA89DCF45CED47780D052665DB0C010C20A571BACB091DF399509100E25AD10AE55808A092115B638C179E2C0A7563C93807EA7621D340E7F67AA3B252575982A66C900 -MD = 31AB688652ECF288BEBB41D6D194139FC8A717171AF802E89668F91F -Len = 19184 -Msg = 34A8B8956BF5ADFA5EF8F10B673F6E53BC3FEF8DD1F9428078C256A8FA1D8DA1E724BA90B65BD4394EACAC5469C520BAC2CED1640BA26EFEF44F50BAA72A9E7CC8BFF69EB8719AA1D88A2450F5C3B4FA54A2977CED1A904C09356F483301ADD61006524FF814CA0B1FD50D3F3A30492BA70C2921E3B9DA58CF8F5BEE32AC15E39371FD9D784256054A3D145563C62E7258FFF3A16524D38767A75FC27FC3D0A9F0F585A0046D6369DC6DD17FC65B53380184B4D9EEAFF245FCE1AEA0D4E8407D2EBFF6EC0FAE8B654747EECCE13BEA89D4879E0C92E1F47EAD8E5CD7F56B04C62C2B7CC13C5CC2D9E6A87D77DE73E54DCB9829001A3A9813DC1958E4FA10BBE4027822F8923AF17D0B04BDE97B9810B31E26FF74F9AE95E50C6EA25A49EE557559C2C9C83D01737B6CD7216C46859D2833F04DEF7A7EFC849F8B13F627E20FCF0CD3E0B1CC7D0B22B4EBD576CBC2A397828EAED2E4AFE51104507C0B3176A74A0261A159525E0883F4514F1856D1BCA3CEB1084441E99FACDCC5B7EDBC5A4C803F6448119745C23E5D795A0AA96F31A48F431960B3C41C9C6B13A22826743839E571F40BF5C965EEEDB293DD5DDD22442071895BD9C34D8A344907E17AF7EF48008801066AA8F434019D95A01CE34C30DC116D6A5D9F6D43BC2CAE327B613E61299E75D580C7323ECEAF494D54825553C98514D841568F5BCE9C97194EC36A16F6B10D9F1808ECC1DA80BE4D37735ADB6D1B83A157EDEC266612E65E57EE419ABFC35E342A6772B5FFE8AB1D8095BC92BF9982A7A32E8505D8F2BDDDD626D09F208930427F14111B91AD66EBF710D9B1EAFB22FC34B2616458283E9FE1218A2886A7B73742342962BFE5DFC2F829A77226FA8BB6165EFC66873D618D8B6ACECE0412515C5A032E44685F7354F2DF2CA1F903ECF1A53894A9A87E07FB36759FF666560605CA55488A7B3BFCFEBF6A0D616417C93835ECE08FB69450E041A7C23981520CE03D5194DCE2AC492F2E4892B8028A7EAFBB913930942FB26643394BFDD67B9381B1581F9F62993708A3C461FFA43F11AF679B68F62F2553500ED3D7D04990A6FC1017D8D7AFF9B6DD58B22F168161E71EAD31183EB338C75C0BFA00A701A19F72B73C5A772090A86BEC03E4F9F2554948D94E150310C5AAEEE46D1AEE5B837695FB49368E59D176E0199CDDEA6085C897AE2829B10C592553D54EC9A0A7B8B78809A51B9DEAD66D0879E8D716B0519801AD71FCA62D848313D40F8224861E58F0D107EF855A6FE9315DF8EE624C04C56473C61C4006E9372CB22B4CC3DDE10E60ED03D6D6FC928EFEFE11BA7CEC15351FC0B0A5597DEABC58B91040B70BBDAF8E1615EA5246CA993BBF653EFEC3FAFF587467A18A4F3868C1109FB355338E54EFF58A1C90E2BBDADB0220F22511C5D8CBA90AC474FCCB0F9DAB7B66109BAFBA8E82382CBB851C2F0869B3BFF09A90751B591BDCB617C6871FD8E22BF554F3AF8097E9443D0D85F9A7AC3432DC8B3E3F0C8A570E2F97DFB0E4445152E4DD0B0EF1E656DD7B7A50B303B6BBC73439F873737B47AF21AF435C9703F704DDC153B26788FE932CFCF00E87E33EB195A38C58128A435C81A0DFB42EDBB0B9EB27F64C0FFE8357FD995E8AC70BF0C7FBB2622AB5477CA8F65EF1CCBFDDE0DDF2D610F7913D7FF69279DD33EAF4A49E3A5326E57AE3E8DFB752E989C99D170389C01C9ADBDA22846868CBAD5F62B974BFC6A5A4A88EB6E04A28752DE094391576FC17275D876A5D3B470845A7A064E00BE791B20DADDBE58812CEB296884FD7246FF67411AAB73D049FC3250DA9111D1B3F192BD8BC650FC4AC9392EB18840B36D8460A80D7967B20755BFCF8251836961F98B5E717D7F078D3A2CBB09BFEDA034274B93E8092D37F060CEE0659269A09A11CAC907C0EC027DA78A723A207B217735B15998ECFB3C43D87AEF6671B54A76666933DD98D5DB4C7A738C43173E77B2573C7618239F4B664031477029666FB8D3BC203F1190DCC27BA0608B276B51F7CFBBC70F5D4B1443DBE37DCEA0354DD288DD4D851F182283FBAD31D4A8E5734A28C49094DE61AF6674960DABB2E6332FD5A9217A92E5CB101223D98A4BD50E56824C7DA09AF1668B1E98BEEFA8CC9DA8F5B6489FF1F795B6F2E3DA96526EC0233604A5C300CA991D5090A358AD21B01E918E5FB9FC0070D3EC1A8647A1F40FD9A662DB16AAF39B8FC351D2FB077BA37800258202449DB1F1A95FA9DEF31E48CBBCC594F6AD63CCA4FC3EB3BB5728CBFE4026C4A7ABA1FED992661E58EDD334B555DC93D34BF346410122CAC14F774B3990E68508DD21EF27A83D6BB6CE21EEFDBAAA2CA63443000EBFAFDFC18C0C96D7FF7EB47448FC946A1A096B0008EAD107520E2536CFF86CEDDC93F5F8F727825575C7FD7D528477E14549C91FD86FBEEA832D1F69D21D05F220D81AF9C241766CAD8AA6154DD6661789EBD44B67915F2F55B38EAB1074E48B1137CFB1C440F1BEF438AC1DB4180B4D50CF735D39AF8201E9236DC6056D2974B951AB4174751969FA0B33705FB605D2E926A764DA3CA2992CC930854075C0DA0E5D1B7BCC8B66CB937FD6B92A2776C88C02B391D353759A04B5ABA5034905AAD61D0C330C9B00969D1FD1DD99284D2313E90A5B8B0803BCC19D702E131B4133BB91CED8AAB62B0106CBE3D0BA597C69CBBABE0CF669FE446AAD7DF1E4E6827E280FE8F2EE91C99B1DB44D10A6576A535B4FBC6C76269D1B0252CF482B921889AACBA14B4C0A2EB5907611290CE04B29AC5436EDB8D5D77A6E8AC5C672D67E107B6A866C4BAE36E82E22FE6FC5B31538484402A30A5221FA2357C3D17A1317EF8E5ACF7329C670B67D38F1CE60A05DD991BA855C598F9C32E518B95B6AEB84587103815019E39753D43A71A8C825895CF2569786358B78A74A5B47B7DFC3292146BADBE0867A353A7285487BADDE28E9D78F7E8B2FE0E7CF78330D4BADA0D606D6D40FE9296EB500CC906545D72596C8C98188673F410576D154E3BCB1F8887E5613C3CF279BE307C0224DADF58A91E93211F1173C461EF42F351C7DBA499D6974245E1D88BA22830B07F6D735C5A74DE475C7F08A940460512EEE2CAA46705580868D639E46B3FDE805AA1343CEC3805CEB7E624539FB2B362382F5BF0D55E6F3B90D2125162AE7BABDF96FEE54B29BFA9EFFD80A508E80B478EF67997AF166B5417620BA5886D631DF501EEB242CC40D05387C9730BBE8CB070B2210A8775DD25A5B76755380BA7E2EA02142E43A3FFFB6F1BED559CAA68B09DFC8DFC1864EDAFF705BB1E30FB58C3A27C5B1C425B22D0C1073726A2CAAE5CFA631CC2EDAC96C10FB25329F0E6D15E4D52694F8670D3D054E9FBB2 -MD = DF765785BB97BA3786EA56DFE85AF5C7344713EB5FEEF374EDE9E660 -Len = 19247 -Msg = C4CD3FE406F4E9D0F94825B06A76A127149BA284DF9588A764C6E82AB0BD4026CB16C50C3763AFB47F6A257E924CB5C326FE1D73AD4BAEC08EA8D3A740FED78AA66F74CC8F674F74DE61C6501C7E71D2CA05699A117710873923A5774508F9D96892302619DE800A025623913A1162734558B0DB2AA78609F689F7AC8E961BEA9D8573D6F3E05E7989465F1B9D49646373878424C4FF06F3696E5CFE92CDF1E9210E45AEF703638DE98F322D81F3AEC82F1BAC5BA4E2932F37831DF53340B014B810967D5B48E200CFC08CCC050FA1B578D0C435DD7E91FC03E416D8474571642058845F32F8070A4C40E2466B6CA210E85E486EE5CD919B2B1F5839854C6FA1741D6F1F53C374EBED9CEC7BA380C58FC287D5C71E02E2D06233BF339939CF57D57147548A2AE70A238BF47528E304B1737E02A1123484F0FFE0D382E707B41D86DA249FE534CD59767F51ACA581AEF7042D948BE56D1393B1ED8A9FD447AC97C4550A0A269645901A07747D0C50BA834CF919FF77374AFC5B81F301E199609D4D2A95C7468AE68555EFC84235D86447C25548817289F80BE9BFF0E8CE2B76BA29429C3FB46FB2F6EBEFE3A0A56209277B8D0F8378662DDFFAFC04DD766AABBF0A22A8E598624BB2D5508E3763485BBDD5EE3E5B60A9877F90F98BBB497E56230075F1AAC2038FA5E0E431A7C1A2D8CD046D32D9664D1F92F768834A9DF0B0B8C5065B908513D5198610FCC57BCD77AD64645DFB46D234441854846F911139CA31139F18F0EA3FE587200050DA6EE664C6F075D7A84061BE10A1ABB31CAD9EAEF85030EEE09E36846737D785AD95EE4A7ABFF8AC3A256BDB923E428AF8EC5B9CA995B086B01AA0AFF2CA3F607BC785EC22D33C1B305CA1689CE88EAF8EE00205121E4E5515AA281E14EED5D120F25061532677B47F4E317B80307621F0ED972FEEF426102FF973E90033500A43BDC441838B4BD27214271BCAB61BFB8BF6AD73355CC7CDADECFA9575DDBC03BF1DF756FA159F0A829ED16C902A2C6DE12FE5DFA9A42875ABE5D082286EC7CA8C512743F2AA352C7CD21D0273C55CBA3BE5FC2D53F5ACD073BAAAA6C7AEA5C03D1FC10367734052335E9B279785226783F0B8BDF11963C3A5984AAE9B90FE45D9FE758726016D899E79C3E98DC8FDB03AC99E761D43B60257E2FD0032D4E4165F89C9ED060389A0ADA38F70BAB2DB6F24CBB4DE4ED6B21A7703372F0E331CB85E31DA1EC6B13D6B84879C733812478D1F735FDA880BD21730D320C908DB9F6B46900C2EBB776D9A61E9879867FA41BDCE6FB979B8B7F75850F2432A5BD4B5882372F5A16C58B1F26DF8E5EF7BED4F56BF7FCDD0CA9D6ABC89595E7321A319DABEA8853C484BE3D62853DFFA9074F9E53BB7687C341A70FED52E2F9709DEFF817B8D5A92F940B6A6E931C4C8F28E343E47F37E187989D57BEFEEFFA6B0D540D522F67F5442854A6137519A06EDCBC0E2CB286B00D7395A8FCC8B28FBB1EAFD8EA4F95CD23CD42E2F684AA29A75912B09130A53927A36CF5B9415660578069D4967670053E2C22A55775D2B5D2A4720E4B0FB4747F4E99B3F9E286272170FB43DFE0A808DA41F680EAB4931DDFD7A791F79157F07ABD2763FDD802061F0276003AD93FB12DE54E0F935583B95DB3CE596F04EA50DC4EB604DFD72C720EB5C22367A6027132B57AB4CAB1FC8AE40DFD03717387A53F966F9788B3918E06CB84A2F9A39CBB6319E79EA6B86A8F5E163EB2C4B4F060893ED5EE4C16F0129F061BE6D5E1060F1A4CD2E10BE42275B7939E2C2E91B22BDE3AF2F56B4F024EC25F9A58CA802D21113AF69E11333728E4795E7E03721D3E5F91C8A463020A80156F4D3CD4ED6269FA592D6EA3AFEE7450C8BD72211D676E4D46648B1BF7C5E0AE6DACBBF7CE2525D92BE85929D19A14D914241B0AB6265719C558DE220EB2E40D6FF701FBB939336A6431730D18E7428FFCEBF85FB1B5599BD0E8D4F46B369CDADD312A01F3B72B6B9378A8B3837E88679D10B8FFC89EF915EAFC9A5712FC4BA0ED5C275CA930F7567F575E50144B011B41B93950BAA69E2999E25F049D40F12D11A922C9D17F29E69057C803A0C8DF676BCCF7DD53FE06E59C90582FE2C8FCECA647249CAB7C986B71DA192CBDB86828CB0146F4F923D64EAE8DA407680666FDA8F262CF32678BE26FCC30DE53F7660E515DB581F99D24DB99A823D602E535E07BF00B997602ABF9155BC2B0A7C7B748C5A87620B1792197F94E270ABE23EC6AC6FB9891DD9AA75E6BBFC695BD4146F180AED388601B0122298D70304B769804FFBD10136BEF6F941A9DCD1732E1A902909E59487C6572450151057D259882F610424666A564D43F76E6CFAD83EC89C57AC62DA7539BCE0B0559CDE1E69B97261F2CDC40F8798C1553D7632D23CC13367367650355A6F59C30A6B6A7C23811758D16A174FCD2E05F30A722EBF978C45C2246D30C352384879AA26D864F00E116C88FCDF54624071E3ACA97C42895155BA9209B8B2DB1EE1BD6AEDE76AE0E8293F8240425F0ACAE947F940BFB7EF75CCC4765EC0D0D2398D1252746B276B460EA48F87E7D2CD744555BF18EFA06AF010C0E19A19EE17296F1EC70FF6F334329727D1AECBE964711507C44391BDBB9462DC73CE3387F7DE785DD4B92D3052F330F7886A4030CA18AE1A4DFE50FA547FD2B5C70898AEBAF72B57D6FB0ADE18892414632608B2BBDC65138EAFDE1DE2B6009E4F9F7D2DCA578700627571A87205A4F55AFC1914939963910E634169A0F4ED354805FC816460E81BAE5D9716913EBCD44F6A6E24DE5D9BD8D46905854D6E13407CEBD7544090C52DB9D543B7A5648F79C248517AE2A76627D344065C3F08BA8EA46E9A9A028D60AA7A9F71F274C798FDCB5F4008E1A12A96E3F2C3D07E077170DDB6ECC98F7E50B50E77B887B3AA71F80CD712AA5A8133AEAB959260970D364D41F581F98022799DE5570FF159199F77B09590BE9F72BB7C959D3EE28826EE5629FD4CCE533D6F383FCD3E93EA990BC85FC4E4C99B333E45C42770DCE40BA707ADA843A92F005DE8E5C90187E09AA2DEFA8A3F7C36362E6914741D96E3BB828590B59E80D7CB05919857EF6344BEEC68D243ECAC81C9ECCD7201AD04D1E1FC5A1AEF584EE21C9EB710F389ED95ACAFE9C04B144FEAA49DF580FB5067EBB20D9AE8973D65E19358C3AAB085762F769CE692207AB08DA80191C8DAA834AF5E761C15FC30A2C985230212BB72D2787A89FA35703AE4CF79E3B76483617B19522C6A0CB19D74ADF9B8C95B39B01F63990C26A34D353B3FBAE7623DBCE3030A164D9B9626AD933798241DD7313AC7CCDD728FF17682B93C6AA2D0FF6DC6246D069A0238E6232F23B4B573CCB19C2996 -MD = 3BE98EBA335C69AED9F11CFE2A0B5AABCE95262BDA17E1A4B293826A -Len = 19310 -Msg = 25233E9A6669A8318B882927CC38EF8BF98477551E3BA89B6CBDE91D8D02BCB096C6BC09ECFCD384AF052187076AB6899EADACFCC3E85E47A1A6AC31E1FC926ED4A8A52626E6DBA4315C7C892EEC3ABCBCEB4187E55DD7805F2E3D94A317849C3DDF7CC12E4A91F78FBDF3F3B34FCB6A99CE6EE58B8774ADBA895DCF59B80C770F01961A8F833000005AE954FFF9E9EFF5A8067E782BAEEB5A08DA2C266CF0E2CC9798B44800AD33149962962307A59EB350B422D7B5A1FDFA11AF34EE9C56D9BF058D28FF60EC62A192D57B635A90613D387B811E2A9B12E25A5855847FA26B6FAD8E388783A9BDC76C5AA4D1E3910167479387009DD2E5676222FCA4B4164C40832F3341EA4F050A2749907700300F7A60A97AFAEABD4BBC6F0AF56C773647BA2B1243D5D816B32FDDF88089A370E0A8E0FB813546DDE73ADDAD2B00FAC7C14DFCD5F068BC8B8FC25ED07EEBDFC1086C7CBAD3FFC3C4CF438BDC3D45B686E6B4F899B0D6552DEA6CD1CACEB74B2C05DD9923F2DD6C99FC3EEC6855B6016180123FACDAF93E850F97A01601652DFB65C60FBEB54D735404404BB2DB5ECC991F1D609DFC1BE09700B01C64A08EE9B0434EDD6B640E0A76EE6D725BD3A73E3C50D86C8B7D948BD64412D04D139D5F445072A19918E22E1886B5C0261CD32E41B72CA5C0701E69ED1112C5C053B620997920DEDA85AE4E0B645A5C20D981D1A506F2A143A24AE2EDBF1CF1AAF183C5095C3D80F604463CB0A1F521BA149343CE42F70D7EB70924FD54F9F7C81F85BC1FAE9C28BDCB21FED4A5739119154D934FA45848A332B2C28A7F89E732B0931A469E71E1B090310BD7F485BE90022621D9188F0CE10205ACF41E4D3C45C46CB47E0536079DA328AF10847BFBF904C3F70E6AA26D6EE0D6490E7D5FEC34F5F95BB4BDD78540717E59657CADE18D8002E7BAE475EA243CD8AC4814F21014379D7AF0C58E4B686CE477FA0B4FE6E9719E1192F15E8C51A23DE522E0A6D8BB65E17386D9AE48C388B8F5BBB04E91D5FA22AD5DF5D889C0E35A8C3D557E4B28E962EC3C533E8C7F8FBEA811268E74F3F4636685E51D0CE1AE0C0D1F439C133B2A79143376BFCFB399129F7289CAD1131C652788984C528017C1E7969DB449CCF11B00A043F1843FA2524CBDF26D0EA870784B4D39A138F0D5356739FBDF4C670A0FE79F87681BCAE623A40B9D8E9B8C0DF27FC7B371ED241D1C12923266413A0E045FC3B53C2A6543C70A805C6DEF12771424D7D5EBC65F94ABDEE2CB03FF0837CE7D0CC8003C3D4CEC4EB5FECBF046CDDFE135EB2CEE28290C2912F66671B5A81B7FEF24F5344686C5FF6540B51690F13734778A05448A33F5B10BFA29C40B7F147DF0AF597538E92F964A9DD65C15A0C6AFC106C9F5ECB7ABCF6D0A486D1FCFE6C1404730F374BB0A6EC17907B2B6BE88E816B2FE0FE975F34DD3F7F1D3BD7C316C0516EB6B9D7976637FD9711F15681EA448ABB9B5D24041270538DEF6AC8F228367EE12D2C23D1005299D05C9E91C989B0A62C41A03BA416294E7CD54F5A75153B9C2222614E65E5ACD4A7BA351EA64EA90A7830B65B8E61AAB4724B49FDABC03437EDAB6AD2374B7A994723DEE57DEB9CC5CFE6CAEE4B03344907792E7EDC09DD42EB0B6B596E01E8C87482AEA905C72BF67FC638CDFEE451F484EC34464C5F6C369FB7290CADDDB12A175F825C06AEDA4D5E9287E2B16DD6BC98FE70CD6E0B16794A0FE879DC23058219A7E525437D4C9382868D8C6A120FFDBD4333B13BF428863F7523A72AC089AF33254F20137A943E92ED383A26371E9370C61612C707DF4ED3C987BD6E15817494DCB09A8D13CFC1A1DB4119123AF9BE4F1242A81668CB526C1B63C1AF09E69012E61AC01B95DF0CFF7787AC29F01C35485E6A296B584B63055A9B6787E4A659B58BB63A16AA0C3EF7015B774B8BD68B4FAA089DDB8A860B13428B2EEBB83B0B502FCA7F25EF6F12CA0C52FBB5EF4DEDE33E1A9DAC0C0AC8D74E20DD88A2E7078A8B4C0627C74E5F98107CB203A3EA7C50969876D20156DC7881CDE5211EC18F70628E35CE6D02D1C8714302CA2618DA4424A02FC72315FB88D0D6881A9E8216A499E14D022DA4E668F128D4B530B3303D50837CA364C034B60417D39E97DBD861ABD1CCA566F115B455E2E7A32590686FC1D4635B0401EE06DF0C098BD75F53E8243C18614A65F91915CA234E5F1BA0EF6E8A2EEDAEB266578169753B84FFBCEA467A7CBE64DC16C809549760ED7C5B0CC67BBBA05F0588850FA4A9610C7FCB2B76224B77194460CCD73FB7D9EAAC7D532B98A41B9335FDEC76551109FEBD55FD724148B68FB91247C7A33DF39879EA51B2392B1C9B766947FBD346FEC66C7D0CF9B0F466ADFAB9054CF05C77A56DA7E7CA324CD40D52FF516D395FFBAA329C8AF0CB6024B8BC4AB3E706FB1616E9A0A4F734E3F433D71927D2A4F7B6631EF802B97503A989C5A14C9D13CCEDCC8C4A6B4D5537CE8C65737FB6AD55FCF13D6E0EAA921F5F651BCADCAB8F046188BFCC97D925D60449A0D4B4422A3EA7DA552F91047458938E21118F1957E4E77515C12ADE48A7E89D0DE1BED571B2E7F14A7A1AD5CC44C46A1ED0DE8BEE8C16D49D309D104C15E86971BE77AFDDAE2B0DAFED1E47E0F19FCE79AE25E0D403FC32934A63F522724F941FDC4DE37BCC8B53D26AA9E90BF67CBA0B0ED22A6D86BAB0427DC8059E6B04581B851C4A8FF7CA7540126E7C4156A059C8D634D0B44998A8B1AE0C86ED3C7B10A24349D94A7E438326D559DE08FD2027392F0C33F9FC2AE30AE0D8F870877B51565910196CD86F088D52AA856AF66088C6E595CDB55080C6C798C0B2301AD953E65E75E635C3D9A041143166F7B5957C699BD86F6F3E7750427D2E3826061036E3BE25336D39EABECBF6C09B331B1739BFCD66ECEDE2AF7B48723501ACBF4CF825C06FDB6587A88FF9634E2623A02E232CE626AA628560F04C953C67C6089B17C9EC0E92196C868EB48657086E893CEC0BDB88D3434DCED0E2583390A40F20881678C7576C4BA4EB97A486549AD4124C67FB93B9ED6146A68E978735258028137D68E93369CBC48F30591B0C6EFC85A5A7666308CEF7801649CA236FBDF5A30522BFDB12D2FE438ECD9B73B42DC93EEE962A3169762865092488588ECAB722D80669336460B613D27D9BCC8BA77A5FCDF54A6E150B8BE74CFAB41CECC22D216155E6DF1836241EC2EABC8FC585F477535F3A08AC0DE5C114A680F8F9FDB7A338CA20BD749275AD33B26BEFC6BB1ECBDEE4496FD469078CD1CAA94574281C5FD5CB5375F8FC839DB044971D9309E5448248301B094E437387E9A5052D3EB2F583D019AB3D3F66B673A77B0902146EF88317C2DD666967132853EB9BEEFFEED4CE0 -MD = 8E7A291166B59D90A97395C7E7260F8AD8A45F3A21FE217A8BE17894 -Len = 19373 -Msg = D0AFA44FFFE95D8EDC2FA236A3D46FCF3E9822B0807E411F818576D244077B036FDBDD5819D63D1C02342D78DFC609B043919DD472BE71084C3E099549EA1B78717A106D8EF319ECE8B043AF3C60A5017328D64A9AAD3B3DAA002A896E7B0CC14B3FF63139C733A617C25464555EDFDB8B53F8D6E763E3CAF1848F70BE43FD97067AA07BDF92DA7E1161504A9F34135F9846E673F4AE64EC75758325FAEC489F9F5D92E33E802D416563681A73E4CFBA85D5A9FF7363DE63C2670456E52C2B2B6B59C90BCA572D4EF095728C01C2C254181B47113A33D29DD2CAAAB4C4D23BF2A72041BD5B66EEC0237DC26E354763EAACA0505948DC84028751B0F129E6554B52CFABF8220088DE61AEB6DB28D6475D6DAE66A16084EFB4D1D0F4C56DFE3339F5BFA0D179EAA0E08B3AF9AFB14A3D9B3C187466BE018230BEF59FAE32CA69FC5DE0E6C2CD65F5DC41A4545E2E81F5E3B0FD90AD0690A15CA6FD1D9D69A412AEE4E20F9F0EB1A1DBB059DAE7B660642D09A60DA3A1477A47CC0C3B1DCBA48D8AB19823D6A4A202F8AE11B49246C1B5AC1699B6D51E1F2506C80F9F5D9F354F8CD42B848B58E9F0E5DDBE19A09D9DD6329CFE804675321CE1318451D25C4856A5E3DE113537A928212A9208D8E03EE520732E7092584D5A1EFE38279DE6BAFF6F56B61D35C36DB4CFF6BF0BCC750F63F09401E35DC7270B71B748193E04C9E7B58AB3A772A3EF29366D2EECEC1A1D97504538C57D3DF7D45A8B2EA6788145ADE1B19301642FB8D5F05E3FD67D1CFFCA35FCDAD4B5D70B0E7EB0D19674582F1E107C94464319452AA1369EF335461829E5CFC342E3124DD2007B7EF67329AA4EA2DB86BC7C4F5FAFCAFB4812603B8394639373E89713473F7AD971A2FE1F265653D0FF580D2D30C64140836B22E5E309B3A06DEE6905D8C5D06FE87E4F5EA7F99EF91261702C0153260BF4BFEF37178FB8FF3A1BD32500FC64A6DED923E1C06CB1D8D52E43B0C6D57586D7B5561EAB0883814BDC068F7521575F682E3095B03128AFEF46B2D2737B10A68C01B7D4FE55FE61219CCEA6877C670C63E3C12871C917C07B20C20ED759D1BA37970EC2E2C320A3BE356C1435D99A3AB046263832AC9E0296CA33CE588E1B26BEFE73CFC65DBF30E915AA447FFD3504C83100C0F2E5DEB487D88A060C07005A2B784FFF298BCDB9096A3368B7C748AC3C394E265BF036B2EDFC158D3E487B0F14E142EE73E075AD71A8371CBA76041CFF4B05DCAFC262854990670F126A10533AEC3259BEEBEBDE740ED44D95059C7B78A0EF949B38E83D27059E8542ED41AE005DE5F21C355E0E2E2CBFAE226F5FA843B5218218CC773B16F1BC9D082AF963325E2A53B7194F0F16FA24CF1D22F028E3B9266EA4AAFADBF994E8CAAE89170AE4BB73E1831EC3C6A436AC015F07E6F96C3A60563606492BCD5C5D73C07104CD4F662E298DE35826E90751757E0CCFF2ABC93ACA3602F36D783122F02A790AA092BE94CFD78308D21100CF2745A24364577AC1327A09AFDFA789569A5E28E30372992B79401659EE578EBA5EF1E2170D64E69EFE51F00721387EBABCF07887BA902C4FDD8F5377DC0E9D751E312EA97804CE420A8A23A60F5EA02E26D8FAAD189733DC9F5985074F9D4857DCE3BA206F96FA4F068AD43C84C991C43283EB94B8B5B961E348F0B887545929E7BEEE3F619BB55C5B76DA0D52CE77D4CF8652F296EF9D1098CC8FC349B495FDA10F28CD7A7F33270D88E58678331F07ECAB6CBB86BA4D5D11A0AD6D1DF1705BE3A7B3DCA06FF7F84ECB8CDF69F4BB143A9085B78463A7D8681874187CFD386FF8CB5230C7B17D21948D29576868DE36507CA2EA4D2D55B7D8A827C6E580FBD976458B187E177FDB8F166E9661AFF789E111160A385C54C1EC793F870FC9E11E946D3A2D74CE15D094C03379A975604B8149E08F0D927D817AF652998DB06E1999115ADDAAD47E06D83460DA2483C61772CA8668AC86654F1CA9B291F173E7EF0CC5667FFBC60BA642594FDBAF49FDBD75C9751FA1A71BA141049EF8197B71FE13A0A5C6B4A20E8106FFA8C8DA75F4C9F4336D3510A8D9A19A225DA6710250C3C453C2BF0D199ADCCA2B2C718CB1FD127A787F12341F6078C9C0C1F696CD2B87A8B7D9C3189C00D48DF83651616F2C86A503DCF4ECB8F5D3C3B08602636974470027B1C53121AAF8820CDCBBC1153A7F8F050BA80B5B8781F6BE8B59F8C69C40229411269D1BAF35A0A003A50846EFEA881525BFB7C6AA9E2F578BBE070DC08347C6F5B4D9E5EE026137A57A1475D6EBDFBA197B3CAD11203EC3C13D429E5CDB56BF1D9E44C27C694276E76E40E6C13791F87DD5550E37473B835B7D7FE8C7C1CA69CF2641F36EDE78100C6EBE0DB172520F46F22E1373E335F0AFB24C313D50D221FCFDCCEAC3BCCCF23AD083EDA3D819CC16AE849B2886BE034BF9DBFCE3D7F939F96D2D337D25F3A5F1E147E0BE040977AECD8F44DB47CA2C62CAC6FAA800F12357A53BEEB293622B6499266CF177905DF259289C68E1F5E00CA843DC9D8A16EC85FB5C6CDC08D534D2278B3C0FED641D626CBAE5FCC6774F50735A9C0231FB800FA3FEA98851906EE5B4394252893976DF13640416403E148A7AD3B6E74D9A56C3EEF6A004197C2CBA5FBF17509F78DBAF3034E289DB1D36D3E399C1B4690CAA9FE5A52FCE0EA9678EAF06808AC4CF88262CEC8024F73696EDF0B48388569D66B7529C4BE792B0C60CB34EF9DB2CEAE135E2A21C4820D47C9F2245D81F900E9B868A827CCAF6370F4BD6ACFF09BE3D0662FF493559054E2A4D1A86A961F5C37E8B5E5D8EC603A9EAB0F252EF4D29D570BF196CAFBF644A566B669FE32FD9F5D22EECACC20F60EA96BB7B5B1A546EDAFFAFC03B7BF5D68A2DB5F3B14A41AE7265FD51D5BC1A93BFCA8DD31F30B5613290DF4EC1454BB82F7B54C0D2E7DDD1D975D77F1A3EB576F8B326FCAD0E7E81E1599C6F96B5AA2B1B7A28F24C71AD21531D94230B8FA4E94BF03148D20D2F456E81A1EC1775EC1D12B6BC1F81B8DEB2B96352AB8AC79555982B855358CB7A06873F0D0CC4C4EC12DD55D944696FA046971C2BF816A697F291AA88A4A796F32E87AA523C46DA38A5AA1C745A256394FD14AF30EB565853BE5F84800306681CA7A5542ACEA7C6FE4E25974C84FBF82D0F447F9FD7708C01DB011CA3DFDEA7C5C3F9D5BAF12A389A48DB5EFCE5C0816F33A151E1C20100BABE3DE7B684F897AF54C1E0526E6BEECFA48F018A297772C75582B1AB1FF08511A365E9B61AA946D37DD3A601FE04951943DC170EA92F612EA88539223A4593A4707F08735434863010DF14675C749E81C5504329C0E2F71C0F927792AF8D84692C89E5ABB9EACFECDA4CD7E9860D6850C3A5D68A002F99B4FBA230 -MD = 638792D2CD95CADA7C89B0BFB09E360F8375F58CF495EF418C8FCCE5 -Len = 19436 -Msg = F55664E1B51BA0107274B0B92E3AD9E713D6C49CCC8801FB50B5350B9871D49A3CF7494C382E6232EA273DCA6EB02A70FF328DB81BCBDFE81F68A75C9FC6CC5B02A6333FE5E9D407592C8E177208C2F005C9360A3318DACEBDB5363360C97583052828F2491CDC46AB8EC861C7F39537C8B9D75E010D9421DE68F6B78FE4BC7807BE1192BC22FBDFB339719A0CDC79CD27631D6ABCD2B2D525D4263EC69B4A48D3FC314332FDBEB38B9367B8B024A6755BCB5C69D6965F0E16BF484D5B14B2A92FE5752AF59B0D2639AECD00240B5DCDA1D654A50F0F06E4E2CF8CC800217D6C8D69AD0FE861158057261AB390620BFE137B50C11E0A7FB2E158CC147DE2D3176A4AF1F9FC3BC3CCE382BC046439464AF3862408165C540C91DF0731DAE9D61A69B498D321E4176447E9E7892694404BCF6260BBFF8CBACB5D2B67003844363FD4F1A9F0B19606255FE88C082B9A1310C3C15540C7AA061673678ACEB159BBDAACBC042CAC063DB67B91FDB0C0FFAC725079622DE28CDC37AF262FC4B56BD4995F50AE92928C73F29AE890F609325A02CB629E6A42F5AB35A1EC54BA67FA68E5C823C7AF15DFD5C2277D64906970218C35316F802E3D476AF5FE8DBF88E9682DBD90AC350D7A9A0798B54737F1DEE2DC57D9F72ADF1C241C34A348C8E3278779807278A1A8F67D9E6CB68EC9FBA9693B21230D453000A0C9F74FA9135D2D3E5A114D294E740222B21DC7C5AECFCFEB6CF08AE26CEE47D0AB1CCBA3D58FBF7DE4009ADC93A877236D4B8A3452FEE4DC365C3EA04D8FEAE7D0B491BBAF0F3F26BB404A8E961E479242B02855F217FCE5A217D1D7C743152212B9B3358A3F289BEF2C463BB0AC57BC7A9A293FFB3E9F3EE7385E029FE93219BA06BC8573ABEC0A778DF4732F22BD55274F2ADAB7FB88C56CDAEA2D34F2DE698FD813952954172C7E5E713B65E0ED3DD0C43EA84BBB25A6CD5594CF9376C61D489BEF30FEA12ECBAB4B9C213838E15709F28243FFF03595F42EC7AA1AAA92340B55056467462C9E20D7F5A7DD62DC63E50867A2305ABDE3F729325C722B8FC6FB6FFFD2AD784FBCE31EB9894144D97DC5EE6BCDE257BFC1768D9C522059560F530CFB03B6915874B6406F7187575E7940D7BA7A57418130EE4A3715A39F7B28FFD074F7E9E75292C88B8347094345CFAA79BD0B987DA09B8AAFAC012EB0F13CB3548852F1517A9D6F0A28972FB2F5E44EB82202768946581DD35BD843AF6FED76D432EA84034846ACBF5D986BFD422C36FE643541FDFECD95CF908C8880D809F35FE69E1093EEA45AAF502DB66ABFA2C5A049FE3DDDEB5D48103CBDD36DC6C78EF774361CCC6E4DD1C52E52FCAD927C40328DEDE4F8B74F250B73AC3D25D36BFC0DB263A4246AB10C2A2B2D30C0F6BB8AE453975FEA4CBA517B76199C84476B47C145C7EE98E64B98BBD5BA02705E80CFCD86ABED867B6DE73E1626971755AFA82C561286F2BE77879B02ACCBD58A42F4C94EF7BB97F7B027BC05ED662352A815E9E8711EB352CDE6668EBA3123EBA1A06A65E6D573FD3226C58266AF804DE04D806729448D66513D788F33AFD5171D73A69385B2D89BDAE112096433F3401B0225A64FA62BBAA1CC44EF8C62BB7EB1FB40751EFBAE45C8BF54C0CDB08A77615D737C9AD69500331046AC5ED26EF2F30E6EEC19364C61A1CF9B189B1302899EA3F2F912821350B862EB660B90D0E4CAF4CB7CE479500F8E6092EFD63F02D2C803CB79DCC641B52C1315BCDC49A0F6C5FCBE1C2ADC06B512E90E259175E654107B3B4C7627CFAA55719B7972DCC3CA9CD7DCCE83D95DFB2AF03DE13612F240785C6644A5E0F9EF95E9AF46A2935869833F453EBDD86886E517C807FB2E075BFE76EFC6C106B1AE31A7D2D98690E075ED86E5312CF3E59839541DAB9A8CE5D6DCC5C948408DE75A68BB96896F043EC69B41FE4B552F41B73FA7E86A48B4EFE36D09D3768D7593B4338CB3CB1ECE4029D5195D5AD679DE3FC400FF555F31129ABF2A7E44FE2447B29BCA98DBA0B96640E18AFF67113530F7E63DDE84A2B8701862EDC27C8210675B47FBA59857F91C77CDD2170E8ECE839FE8B3FE4B1F9AD5BE78E716110FB1B4351395DEB59EC761D79E1CB4CCD851D0B6CAEADC8DF4E51C0A8A3EEE6657FD9E0ACAC15A46D9BAFE6FA286970EBDA28E02795EFEAF6F632D39E59DC18FD63D570E91BD518EDFA70C4C36CCC671E28326EB2786D95D599DE1C62644D16FC8281007205666B30ACF716E49CDF92BC57CA6F6D92A7E6A404E8D9091CC1728C14FD4621C8366352788F7FD349B95263E2A36586F8C2F15A761AD3DE0D851154FB63BDAF9F660FDB707455363232B5A239D550A01BD24925B896BE1E16D9784E7CD46E864D38812847445B0FEEECDA332A43824BEF02732C1BEC54AB3D8A89691145670F944B1684472C01EB94B27415320DBB15EDE6D79C910EA62BAF6CBEC0F5D4E8597596FCB96D368E79B148C7FEE903F5C093D8DF4ACD13E640E471B29FA0B45CF22A93D55E9A65D5B53B041A2C7E63F47DFE010E06314AB2DC0A7004024C061DD1026D8345C6FA86C23D6B0762729FB37FFD93D360B1F79641EECCC2165DC462143C637F04D96E8F628B8113CA5995A371AE5C060F41DD90B6C1C0F2A94F520A1D9CD5B45E54893B2AB05A7692D347D1F5C46F840AC965B8BA8C579CF244E98A4A50D1A3A23F55B6D5AD3FB5D2FB2ACC94A4B41A9B06807A4B6369479AA41A954ADA94897AD7A444E5206B505FBE4127ABF0EDE52023D122E23EC61213D7E54BFC05962E2D0117C4C4E21D492C820F783B76DDA245B3CFAAF3D92AA3983AAD1B021A31CE27E749F78DA15B77271F69A0B2CFCBDCDD2D77C66F919A3A53CE99D26656BA729BD7AF9B4D741317ED5EF14BBC459050AF51C1311418F056E747703A3F73DC0CF5CBF4E584DE4640F81261E7C2CBF4BB00E9BE4EC1151416435F9F56E1DA6A977823A47F8D17F5F9568373FE8F162035E0CD41D946F9707123AFA8A8057FB84B4C061520397F32EE1CF253880135E9D46F5239F83D3AD21BA681C4DC3AA6F7D866048A0638A8758DD73C82FF67C06A6CA4450603435E51288F5501529F43FA7EC675112E44AC67EC23D03D2135EF5846AFDDF0793C2E96E42A10FC786224480695EF306265F12848716A01DC713B291325B6BFE6D60FFFD821A5DF9AF375EC6C58867A286C8F80390AA85D0EAE0F1DBE506154610990934237C5EBE6846C35B5003CF39EE07563A72ABE1814CFBDE66A4E80A8981CA6255BBC7B15601EF193047E4F312C819E510716E37305C1EA3D18F4C6C7281A9BAF1872A28B2DB7E88B6B8C51246BEFFE241B3E867DC28EE888957AFFFA8C1155EC7B73FAAA5C8B2A15A85680017CE0DDB1AC150D424306F7ABEAB79AFFE55FFD5F44D01CB9D40 -MD = 4E972C875F25B184A0FCF135EB2D217E69B486BAC41251110A9E5A9E -Len = 19499 -Msg = CC18E0940751D271C0DE030AC3350BAB237D9F5A1BDB4BFCB4A6220AA167E01E2DCCAE701902BD55117F5CB276C1BA563085E6368C1718EA1855AD32C16AD51A0CB637DC2B81AB19471521E161C930407E26CEFF5B4C7E96958ABA79E8D02CE051E5C77A2CAC63407AE9588BE6FD30564040B66D014E9727808AB86C09AE493EC930D4690120617E475C9CB14E9EAFA4F2910E5C3332472C09D9643B5179CCC4470D2881F68ED601E1130C3D7FCF19CA85E2BACEFCCF7CED85DE9D1539B092B7A082D67104C2EB110BD351C6C942B22C2A3C5199593DC2203BE97B43150DF795E035A25723D6270CFE8387BD48588EB9CE56650AE1D987F19C238C059BBF3F379748EB34CFD989619143D970D0EE640733DEE262070793EFF2A17FD6B4618FBEEBB401B40C8B1A92279F21550C192A3C43D904A6C16DE7108AA408B8C076CC6680AF17772A017D6943B91A67972458B0D3F3F327CD9A32E191FCFA1CA255ED8021C40F333C85D3F60E9D6A02DB10430C68373BE3C52279341D0FB8E7AC9051E9996FC59C825D8BA5E6B8BC175DCBC1AE524ED89FC8EF392E3AE33A88F9E50CEF389314D2BDBE7E6F4812021B0C9972F663510CBAFC9AE3F6F30BDE002DF578C650855592D8530FD77C342E21D738CDB76D6B419B18B407430B24292A8C7C21DD9F7525F7985BD07BED8F963C6862F81ACAE4FCC74A284F189582DF46CE52ECC58ED29F437934D9CA1A75FB63E72E1067987648945A0248DB15297ECCBC7278E7E37F73A22E8D6A296698E6C67ABC74C181299B120E6AEA5A101DD92B44C68FEA1609129659764BC1D4810C7E34FFC27CABC9E74EB366F2E3686B1F6D030682D2D69E094D2E32CDDC620C1C666867AB89389028052314DE8165D6166E00E61350DB010D7BDE1A43EAD6B945C4B7340E5D20FF4FEC55EF8D849252864834237431C2A85D904BC1FC8117E097322EAC7B29BD16C6649C4E3DB20D1122DAAD4A055EA5C665EC3E8F070611B0E033C5CA62DBEDDA1341ED5B305358286202282B96CE6A208C61204C545392BDBDAB4DDD512B3D697F6DE8C13AE2CEEE63EEAC1852AD9FF00F81BB5270A2E2ABD40AA1CB186A0206EB7BF64849D2F01C4E97C3B052D48AAD6C95304221CD7B7074A920FAC0973A01EB41F11F44DE0193A2E298E165528C889A375AFF8397DFDF9C2C7648A766AA7AE434877940AD119F36873068CD685A1665494E3B0EBADF3F14C1578931EFAED82F9AD3EC0D320526E4B14CC193E0B453F7B6D151D6A66AE60B313613E474CCE2133090432F39B53554E0A0C1223AF3943E0D57A57BD2C77383765DEF270566AF3FC0D508F5C065D2311F351871C925401FBAC8D3CABC6D568C6B2659BB589F969A73050F5C3C56EEDC0A38AC4A7339F68AC400B63E575E798A381EA729324F0E453A5A6A2C2FE5A57502425F552AAE30CDF81458829295ABB4CBC976BA5BE323BC1B8BBE2AAB12F59BB3AC1C83C1BA938E61B2DDDF0CD73CDD9D07AA6377868EDF0FAF702E31D9989C6DB982B8FE4ADFC64AC2649C0AF349609A107540F77AEA005817D1B291384B20288B99C6E8912D3B264C6F1336C44C842BF808B1E93FE46B9319370A02B65349F13893047F70522680A301C0549286F681FF1D5C1467AE6E1402148FD2CF1A40DEC24800E5C6B49F24ED65FC731B7C76A8DAFB0723BC51DFECA2DAC26B76853EB4B8FB25D878E19BF054DF50BED5F623AF1F348CBFB30A1198F150C9342F49E2C437CA21216655B67028319BD3B1A09C271E809D27C5DF92A90E950F3403704B7BAB3A1417AB9FB88F3A53B1DF64DEA9177790BD095AECE0D3D8E9069A11AC0D34D1487729EE1FB49A08B39FC2083B5780EDF3311441B8EE976398833E682556BF462CF5595BED0E3DB91519E41CF61B7D654DA1158FC76E4F22D7C709704B0830ED48293745A6EA17304371D036CAF0B685E0E0AAB1982F8D47A4A574635FEF6F73C9190E249A89FAF3C3D77D661CB9632D3CFE9A9B6573228A7814CA766FB39CDF9D74D4DCEAF8821FD4C99019E7C349404E42564297017A5394D5AE776701420877C17319CD1D5F89C74AD12378040802A961867270557C1A9A8A5553D518CB2B75083AC3BF8AF7C93615D341FEF7EBB954F1B1A7295F9600B527F357E93E69F9E36037B53C73DDDAEC65E6908D4C1FBE842148F03406B84AC4AF0CCD31ADB44170E62D295D1B2F45BEB1473285CF8110A96CCD41615FD16649A02FE95DE8FDEB16857A225F0F3103FAB104DE08147540DA655E6DDCC08437079C6E5CFF6DEF78355EF69D81E1A061F92C8016D6075C871BF725779825F50F24E5018188E87A4285F6CFE3D38B8C7A48598C85A1EAC0AE574FAFB7D01BAA5DBC218CE84E2BE6AF330F939A9C42B7CA921F5C9CCD39B8F51BF6B88DEBCE5177EEBB5F20A5031DD0504B7A6389CA30D7CE4A1EB4F6812169304AEDF8495AB633B83977A164A236AB903D73A94CA8FD2FC67E7E5304D14B65D00054336886D346A181AD920B9D75BCBB99E4F80EFDFF67A50473DBEEBDA82D71E10898AD876DB32BE516F6C21653B9BDB389BEEA96EB3B3A72D9C4E1C7EAE6BE3CAC802FE9D2FA326D32598E49680F8725F553CD45C5AFAA2BBDB4B12444CE68857830A4B5A5D6AE32A68E6455C1FEC1C2C3DFCBD0A53EF975856A3BB13C73AF686EB9518AE2A021ECC87AB496392E0BBDAD4DD4E5D80FBE123A66E0BDDF1F32A7357A7663B6C7488808BC07C192BB2254B93A112DF8DD42B2AAE77E130961A484711407B16E48F71471B9DF3A48E61C77AAB47561A41A877F4436312EFE013E212AE73E8DED642C4FBF2388233A534E5E2A3B3A0FDDFAB847303E1EE1566F4CBE76232977937B0C4A0E7380FDD320E65AE42F27EE1389AB2A85FDF441C09DEA7AF01C639A785D469397BA08B6D50996609BE6CA281E94D4368C7EDE58CCAF1CBDECE120E8581FC1C11B0E4255552668CC6F4DAC3A0BB6A81A3C3F0E651C88F43F6D7F746583ECDC183E44849517A9F9AB202EFAE3F72B6B7AC0A90FB96259EE64ABA2AF6DA3DAE574DF8A26BE219CCBD4E6B409D35933797EE42DB74876DFC64FF4E5B2C83308B4F273B49383335B09146EF80418381ED966F67AF76C6D07412A3F9103F34C558D04F88EA50C666A64B7B9A2DFAC2FF531C867B3567E889C237CA77748A425F6B5D8E99DADC2B7F0A5A71FACD652584774CC4FE35751856518FA83B734E2AE1D4D85A5CB443E5E0C3BBAC78623F5D017D16852F22B3D640B0456FE8D788915D6DDA0DC31C40DA8D70ED41F1DC66C8EB2CFC9212B0895BB8488B807D178B4B482C0339FD0A67BCE0E9367690F55F403B5DA62727DDBBCD09EFBC20848D82B90ECE8AFA1B10B85DBB5809C5CD83D70BE83E547C4E16C2C85C0E1E87EE9C8C82328322C36AD4ACFAB863F731D93DC74545840 -MD = 7246E961403B6C3343B749B5DE17457BBE0263D1A2C192B96AD97F01 -Len = 19562 -Msg = AD39EE24007E1413B9D92BEB444FDC7500ECC9E7753A1F563359B9BD6F77AAF011B0B69304D4CE27E4D2516566F5CA6AE3F0CA11CEE72F88D42EF7E3531D036B009B608E8013BE9D6FCD65296E0D115A6A1A4F0B16BB47D13780010DF627905E1CABB23B99B83C30D2C4BDCE362BAAF6B176BA0B4BCA425618E7D319831C34DB818E6210225DA5DABC8E0ECF3E2418687A83DAB34CF7C5DCDFE2834427C0081D065C3E661DE89E18C43883D0EE345542A4B9B58F4297320409302FDA21DF5C91FA5ED74ABF68E32FA16960C22E3CEBA25C38EE11025D3C7189DA711D0F05A7D31CE0C884FC37F8AEC4727D3C9DD8039569E54EBCF9BAC6D1E139D578EBA94C6CD3AC1482B8FFF7FC73009984F573EDA12F9AFF4895567BFDBF769D8FB2FC3A079C935597F11F3803ADC751D3E213A4121499BDB3AC7B37D5D6CD92E3BAD9B4B94B679E52381A844404A251316CB2A60AFE11CE02B6E6D01BF8DB4820FB2284B1ADD2519AE65F83A34F1C0548E9AF808E6767E219AC9E22B0E392A74E41EC21C59D25C52E9524A32E7183982571227CFB7651FAC6C552D111E7EFF9C40D275017C57149FEEA6E7D85B46C29245784B2F484606ACBA7D87BE37D0DEA44B429C81EA84C426DDF16DF124FF2E4F1528BF363E6BFC166BD3D655E686EF2CFBADBEA79AFE0501814290E387B433E6659CA8351A3A2CC75F2BAA13A2BE62FB1E2C0B3AD75E874E11CC71B4F3E631E3B77868FDBB608A251973BED3A688E80BD089F30064A5E677DD9629F2651C70F6AC05C48DAD2616BAA91946D7D46136F2488DE79AF122A1034261ABD69DC33A0E332FA6C922BEED7D2D5101526427167CE9541C84EE5EE73149EC7A95829C623915D6005940CBBB30EA0AD321D1069E5D4BD03A0DF1C9D3EC97DB77D3C1E0873BC19E8A90D01979FAD78D98C5CCB756EDB87B3FB97AACD300DEE5E411AC56D9A29C2CDC7B85B6DA05EFD3E4CAA4A7AE3F265B6ED36EAD160C41F4134FCBD4FFC291137A8F4F0F3B1E5695AB4E1D023CE952FD1B1ABE3CD32F9AA860131109C03197D2D2CF4B71FB2B496FCF283656B7C19CE68E78146F8189C6ADA102E9DD35E295CF33BDC8BC3F2636F699B0A2DA67D556DEFE619EDBC62C597C54AF2325511F6FC4BF6E13BAD3C0F21A0DB8461EF6FAC40F4C558CB7260B62BB579B65B4850D8251BD2EA50DDB9E2ED8E2CEB387E404802065CA0C83E21592EF99765A82DADD30FF0A53873CED2067ECB9F0DA5C7D055A2B409CAAB1FE67441C6D1431EA9194C34242481FE86DAD5B579093F587B1E8A00D2A07B4CFA4E0BFC7EED2BF1BD9F5C8CBE5F9AE5DF41287A3104DD90AFD2435305ED5A916AF860D2F9A78FAF9FD4A3A6D77BF1E5C933E54F3D832A196BE05F222F32DD5F339EEAD7DD404CD47B7528FD84BB2E55DDBF552480078F67329610473288DF8B656AAA6185F312E52A4F64943ED86C36EF68561544F589F30909BA6C9CF0550301888389232FA597D8A62C2DB21C6BECFDA2871B00251071F22DFC293D95F40377427310C72DABE1B72DBD83EB11D3F94BF72162BE7DE50132179DEF4662D49D4BFE97BBC0549179E1BD92365EE7DF135B7484DDDD1CB88C8AF7DA0B94FF5D778C47ED7129098732F8F0DFB6522B66BF61B2E8751CD03F6DE20C47B3DC62792B6D8426340E56D1A563307BD01F45C34F1A5D82E676013ADAE3432944D06FA8195DC153C766E505B90E705EFF4583D9232DCD58FFD1887A7400C2CBFE0A6EF72CF4DB2629EF390B4D6428405342249E828EE21D8637C8C949CBE00C67D5232B29B67AA9BD9728D9A50A306514130E4C5DF5AAE641C3E8D68B95ADEF8D4BD44BEBEFAF91BCBC29F4757B62E0F343E5AD05C11AB08E89AA864D214A5DD2BDEF04234130F3DD732FA7B4DFD48BA13A93D6E1043C524DAB4182EAA6D222B439379B892B4CCF038C8570A9D33B20AF26CEEBD0E8CFB6179A3FAAB45DBF40E25631424E011442407C0AC6025B585A638C32CA3167F9F014F4A50A195A9F9A0050BF1F3A2A5259B832CE979388F991ABC2D47388D47971E3862FA03B31F019EB1D983AF7BAA7A5755DEAE869838F265A57CA76D5CEC2DA7617119817B114EDB622F27704573B67D11A69C46133D12484253E4184DA0CB1D7CB999BC47B7ACD903210066E48C662AD2FBDBDE849C66DD33741543873B4FB4E35E4B61308764A4F62FB169FEFDF7708A489BEA195E0F9B483CC9B1532563F98DC27695E7531489762D01E02517C70968B7158702C1745419EA58A4E50D9FF2EE013E2DCA3B34E483DB9B50114B63313CBD2C529FF6FF1475706841B5A02827C938C39B51035D367D35885BC3022978A59BFCE4BA8455E75DE98E0523546BD0344310A6D027C4F0FA57F7BF5A91A3C8CF9CD999CC20D944FBCFD36DFB141A172F91CFB67CF15C4EA695DB869AB9F93D71C6509B80BA533CFF0230A7BA7CBFDF613D70FD4870159430B389662104597E9AE6E08115A6E78E7BBCC794E59AD3AF20639D60D2FE587B9B8FAB0736BC5A5183647069DAC756E378FFCBE3346B43390AD49777466A649BFAB79BE9C1EBBFDCF7AD3DF085A1B06090F7B641D6540463D7CB5D591EF533D93D633320BEC487771DAC1F19CEAEAE8F3061E6B982897EA877D4CFE268867055303439EA3AC2577D754313D8379D00B74DEB882E9388C0E5421C10E8711442366149B27BBE2D94CB83AB91EEFBA21773DAFE98CE18C39213F53AC601A169F29332FAAF59CB2C013C21E6DF727AFB9A5734CB6785ED24B6D588FFDC4FB14949AB72B39D4FEDDB4DDF581165A97EC63D0FA64515F3417585B9E78F51848E6E715468041BFF022DC845719A42EFFA459D8B3A8163279622A6AEA41C371E7792A75396F6A11D24C1190D46D9DA32550A93245A236DDEC536FBBB92E412446654B547C265F3763F512F40F9908730F5F1DE2D223DDEB88F4F1AE2D924A3366E9654C5F7659378B5D8A308741FF1A264873C7A98509204DCAF7A3519B03F281440AEA0B60C194013E69138DE249865B6118236BD4AE82BE0A397C77F37679D2F9F9E5E9361E54E6DE91BFFF8BFCD48F613AF4EB327EDB3EC0FC99A2A9CA23D0AB0F5B0F993F2AC8C3543235279C0A358C7B10665275AF17FA6EADFA9624D324645898AC3AFE1C9D87F2658A4B189EF49CF43FDC9335FDA643DDB396DEBBAB667F943BA9592F31989E0CAF1DEA0E78CBBA01BE8A3184E888AAC912197DE5963066AD439C09C994E34AE045DBBD2E9331CE74F60629BD59C70A2B97B49FE94B2AB89CADEC4A9DD6CDECB7B18B98BB3AB501A6D9D2E809767A8CE1400DEED79FD69989FC07305B4D530FA0C7B982154AD875AF641A2F44B9F092AD7299D36C9B5275B55B2A251FA30BF5E08FAA807AB1F892167C34D9FEECBBFEF18B90F4D7374C279498E27F7E79C2A53524E5B903F8D852C63FFB00 -MD = 91D50B22194910F325383550F1FF01ACB94D02BD43F402BAE4B25493 -Len = 19625 -Msg = F7EC810FD44E6B2CBAAEBF5A662F5BE1CABA356F220CA034D220786AD8E0FF0A2E75A2E82E52C1A6F570BF439ACAFC8D85CC2055D1A8EF6B491B7B8D87F397EC17E09AFD707B541618DDA62DB524C6017CCF48E2842D1AE730D2074E92F5192036A0EA1EFF78BAEB61363A20F715FDAC6FEBFF065A050EB6CD1AD89621A2B3993B0B0614B92991994FC942F6D09316B2A589A6C4160AC519BAB7787020C693F5A8FE2516D62E8BFBB62DC11A9D608D0419AC89A70645123A7E2DC6DD58E1521539EAC65986992B2C27154687BD445B865BDAEF0B96F21210931C7ACB0CE48D7EFF45AFD6E0E9935013E86159F066E6D0321F188F08FE35F1F6723F68101AE1C47AE394E34189D8CECFA85EA8CC241564532C2A6E8FF240E44F07205ED780070E1A8C8CDA151D93AD795E113FBF456CA811BAAB15D471006010F9362F4CDC2281BD01D14BFA3689FAF1DD651BBC6FB844DFBC28E111411A99025FFCDFD6768ABE311535AD31934020969A3CADC0A3B41ECBC288DBFBD696A9906A0243BCF3C4EBEF83CAEDD7CCF0B64DA64B8847618ECB7C760B57E40CB9D8FAD4A38398E92FD3966CF4C96B847D09B5DDEAA239BB25F0E1351E1A28A797E616B5E2C1DF5B098493016165154915A95C4B61264162F7CFCDED1DE0AC826CC3828F19FD68796B83F9E78E32A2A89CBBA9E2CBB725B1196FDF7BE31F28520204A3764D4DF2CD2730D12D6E3EA234757446427D775FEE8678270B31BD61570FC96DD44F1E1E5BCACD9FB9E9ECC591DE804FECF818D29FDC5D454565CD259E31C5882FE514E95DE4B229AF94633F7F97B0974ED9D696FB320C4E70AE39E59B93FD48DE7C3B571185B70C9E7A076C4071F873A9C581A33B00684991C695D93B1B071D12B742F7D8310E2F8CD7FA32D7487A8C6D11E76F287553BBCF35ADC9A29885AA2D77E748EE142B5BA156CC91AAE08FA1E2DF4298D91D98B864B4DC7DAC40399E1BC07FF98746355C695AE109C7C6248A7C8489F431DA5C952DBA885D66B13B2482A3D4EF269C117CB7CCC958065B231CDB5E1DF28CB466ED69955996A126D21AEE23A54F86F9E096A164CC3E20BB2740F4B866B27D71DCEA62A8889817C01B70B095D99037C400DD95B94A5A2ACD1AF1CC2606E435C40A5D814BFA387791351BD4B12B331F68427CCA192DD7E5C553A56BCD0AD5B6FE3384DC63E91353661244D123D1746810169DB35F9038329D681D6C79D6264D149F2C71B06E444870192E86B8B39AC725DB1BADEF73ACA91D6B31821A4B558D8BA69192CA49D897CB87490C889D14132614683F1AA26DF44A6FBE6CA3EF2BDAA20FFD88C0BF7D5F78782F97E6A8EEAE85B1837B2C1D6E0784035E92962078F951AF15F1B4CD13B88346F2E3607FB83245867F4D1F085B794EBAA83B82FA496B0B85D28489432B5DEECD509B2872C7CA2768BC1EC55C21E6083114E9448BE6BB206E3F84276BD1E6411FD78E0160C3A97425B0D2AC939E42777F11D8BBD551CC84F046E498F60F48D2750A8FBC5826B035A6EFE1445DF3D70C54DF10072DB58C841E9F8FC4C13789CC51B7EC77E456971FE626B6556CE661B9C79B8D46430B703CD75ECD954E4B3ABF60CDCDB040D036AAB93A947B8C2615CD40A8FEBFA244C385C462AD8454DCA21E25DC09681BE23E27790E19A0B6DFD1BE1D344245688BDB7E46CBE218D7BE33E00D0CF50DFC68A9B7F77DC3A0AF7ED3A5FD33C8CE34482A4D8B62B12EAABF9CD9302643EA4EDBBB01089BA228B64AA6C0B52A90B3385D0DC5A56A8B8C5456818BADA242EB5241705A31D785D114F9A3138B34B41B63351C61A8ABC6AEACEAE741D04A8660F8BFEAE30DB63300D9541CFCAE0D51E39C8B9CC725B4F87F762B5B47A8564AF30E5C7268D79A7E940C78506AA9F83C3D1454BECD63504474ECAD5119AFBDF7B49D7130C37731E0FDDAE6A7B3C1C2636DFB3EF83C7BE74E87CB593621306CA15077AD4E18423BAB0D092FA779B3568720A86D04048F134A12206283601B061DA4ED86B65B18A3D8CDCB48DC67F3B1BA4B873CE21AD7BA92C9A546848D440B73337C45F1D0DDCEF8B0CEE2D5193C6833CEC353F81697B7E44BF6AB725ABD95DC8FE4EB9212F28612A50D8B22A84B7308A610EE6E36AC2F75F1D91464770D36AEE31D8B15D459A78D99771F619427750869EFB2C69407C2DD1224E7CBA3480F22D1BDD6CAF694B2DDFE38CBEC702B8620B8394430455CA1F7BCDE1EBE58DAA36F2E35BF778A1A7C3CEE0D695F2FFF092A050F4AA0AF294B3A4CCA88D66863BE2C9376462F6CF96ADEB05A75A747A9942D69795232D8BEA8D5072B3ED33AE4BE8D8C9F4728C06522E13A5B2ECF11FA1AA84AEDBC142095121CAE15E8B76BB9F4CAA268B7F22775345D924365EE5CC194F12874FF64036C4DC43B50650BEC8FDD0359D64D6901ACA662E054ED3099B7D8E62EF423173FF2DB37C671285C8BD2AC8B4FEE94B729624BF40363BB0AFA2DF8FA7B4F92E4DDD8957E60AC03CE69E8CC70F4D0196D48F2EDA10A53DE17EA4B67A4021EA98842A4EA1E91AE8B14EC156CB51AE80903CF0E43F586494F8A1345DB3ABDE2DB0B2D13FCC10CA14314AB507DF5402AB618D3BE26F9CB95DD4FBEF9BC2C0CA8D049C07158F1FECD0D655524B1EEA254917B3B5FB199C558517EFD645898FFE6EAF0717A3B01F9065C3E31F42C73EF67E8A3FA5D5AB36FA6985E59DA16574BF80FACB6C8040E5C7CD08563A3ADC2A5DF048A4A78667D7420750CB2224EDB1D5CD493481812F6759B55B07E9255A04AFEDAEA3B5EEFF3533698182EBC54DF17E6A5D1EF5C912107EFDAE20041ACDC5EE590E9A4346512AD93AE22733591F17F20A7320F1E5F68088EABBA1177BCFAD6876F213B62A338E800F79DC21F7E078F1C58078B733F0A9BB0BA92731A04DFEEF941BD2FA807A76CB37EF7FB9C1D7DBD573FB8EAE5679929074DF25D08EF325A96F211F29F57D71815D7B3C5928780E5929505419318E98885D60BEB52D4BA2D9BF0B8A9C71F60923FE8B81C2819B4523B427EB9070DE301521E8E8014EECF412B7974E47DB18CAA6F04B1B6D5ADC2FE5DFEB280B971E1EC25EFF77815F72FA92CAA12AA6630B3CDBA4EB25E5D0415AA6FD7AF6644953BDBF257E7A9C27B2CA49B5259A198303571693170ACC5FAF887333772F72D07F86DF4872C34437ABEA3E4CFAC954F409FADC48F0283296FCB1172BCEE5D5BA431C33189780BE5B01B2F8F3E66462EBCEFF5851B66446DEBD44F80609575A208E87A12BDCCEEB87D8149800B0BAB83447E37D9B42CA8873F28A4902B15D76C15103937BE37C4834D776E8D05513920B8D6F357D2CB10EDFEE6131833C8D4E269CF40111B92EE052890E7BBF38E986B07099AB06438DCE4B0A17BCB292CFF962D223BEFC95111E308C0649E8395B4A6853EF8ABC804A291EAE395BCD2BB442EE75470FE7800 -MD = ECDD242F23CB060B3345266F788645BBD4F89E22A1668A06E117C9BF -Len = 19688 -Msg = B7202C31C33E5579599D14D12511CD700E5A077679266B94B44586B363677692A4F2838F50D437C909E5A41BA747A6F2C72BE85149D53A834F7E66B6DC74927250B543121B6B4780542AB511ADF2011380F0D7133BF82B38A2E377B5C7755E49BB1ABC16EE0A4A772F5653BBFE06BE7773290AA4A9A059B98647C188BBA609D31AF594D0594B375963F249296FC6974D2520CFE9EBAB8C4154F1B9A7EEE66968B853F19F74D3125B8283E5F167395EE1077263EEF91CF573F1A258384D369C0A1B8F4E12C05F942B330D43A168290D82325EB2B77D49F25E028AA37751A28C405A6AB190B744C5F998D7CABAE18CE184D96BA9BE24281556387D710E66FD7780EB1A0D91A3F6396CCAA54A7B2B223ABC1902A660A44ED1FC2606AA054E1C0FD9124EEBCC0993922B79AB6DC225826CC3FBB0B99046529AB3CFC79EAB58EA68A153F0C14E5735CB4296FBFCB23ACD158ADC1B049BBF854054A7E08BFE0B7D4C8896670A90BC1A3A9D4A2F74D1FB5E143A4D22EDE79C738B41B91B93AB34A91C8E327BF17A1E86884544B70557D4EC184F82EA5B5C5682E33AF7CC38C5F91BF5D024CFFFD145A5AEA6FD7B6B0456AF14BDCF60734CC93C1387A48DFB97B91BB23D7F68EB783EB0CDBD0BBE4104AB212147C9CAA9DD923E883C3E24B53AEBCC3F7FA5AA5C887078628EFD7E82543F8600FDF89A3312AD6902271321B77C1F8DFF1B92250C59E037411C6791C7E930D686E7BF359EC480C6D0BD05D2009F2D339D2089D5202C65B8FE737EBEA6CB6D9271B0BBD3ECD6328AA27EC7722CBB3E700662EE6AFEBDC4FF5E9B00949EC3DA530AA271A78CA7328217BDB5600448D9F825836E04892CEF50A95F8CEAAA5C28F2B9B185536FF2DDF380808EA351BBD7A068BD43BFE8EEA7A3292C65130915E828204C0EC1939F1E3088058CCE4B2921530E3A2C8CBD3FCA2EE39504B72EE72DE1203164AB0AF78B66600B27A067CD62D7DFAC4815B23A712870AA4F2659157037285386BEAF2649741DA70FB7E031B4E1F37768A0C349C7B8C90A3DA6138447DB7CDA00C9FB01647E3239A680FFB6C8D4D536DEA7131480FA95C597BFF67AB5BAE2578954BE01BE5F3892688A98B0AD0A21B0AF40E562175164018D32D6A886DCCB256ED7C4148EEB963042BCA34B689C44BC485F286A65D1EC44E5A0C90F5A1E8D6A29DC30810917B8A3A6DEB0362D5967F75802E8174725B734B61787437AA6FF8A4FEA6C2390C477DDA085A62C6477E994913502B862BAE548798A17716A48FCECF315487844A1D98EAF122521173807CB72308CDFC6CFA2F1B9324A305869E47CE15CD18CB38CE83ED3B41A71205BE49CAB4B93142D8E20A4C4365E4B0E72B48E5440C8E8F5A8ABBE22E5C24D2FFA0E062434FB17119028299AD5AE732F0FA39127E533D591A27C7A0107A9442B7C2211C2F7FDADE86BF032CE72E94E71D6072466E7C50C62E01C35AF9BF5DE708A309C5694C84ED47AB397C409057219B2B81D9BCA7526765C11701E6993378BED05F5E5BA5F9C5FC3E3E6097D39C86B2995A9FE75DBDD0CBD3A9D96C335C8F30FB00419622F8D6119246F1B94EE8524A275738A2B312D036AD0A8AB72AC50F76C8642B00F354B00E0311AC1C11C1332372E4AD1A982027230536E7A3D451BB1E55E509AD026188668BE90B12CDCB64AB4C19E46BD19983F4E1D26F85258504AF4DAAA3C188FC2ACAF6ADE8FEFA7A42ABA19DC7D1F2269FDDFB15ED2C659725829E0736947DACC67D83B0FF4F1DFDB8B998EFD4E50D8E505583814E049A31923FEBE479EA88816A7FD044A52339B761F9E069C7585D9ED7F2397AD4C208AB06C5FE4BC6FF9B367D109DD3FBBBB48F319053C8BCF643E1B8346EA42920E9CDA202EA0A74E44305F8EF7B18CFA5C921C9E5E546276D3EAD2568A9DF7B7883D4C20B0F38BED538D9B41ABA491A4BA3E4C4787FBB6F75B18DC6C356A95DEBD8985A028C1D0C56AB5D06406E547CB4FE88BEA7D0F8B3D244F0D57652A18D122FBD1C6DF0002F3BFA071971399C749A05569F972AC0C79CF6532507740C3B906E1C56641942E215FE60002ACB2F330C99800B84100982123211A1BB9C05845C29ED03E3549861787868CDF9F20C9DC3DD9C638A9D5EC0238AB05BB2C31E475F008DD3E5C9ADCB0968D022B99F1C848339ED38601FD594F2BE5438440F6371AC954573012D626F9CFFFB06AF4DC2F0C522E5258968A6EB28822584835CB64DCB1A1593029588594665BE0F56848E24F6BA914D3AC6DF6EE019A4371D8D7CFC74733F29784EF56E0183639DBD8FE001C63E85FC3206B299F1EC1036DDDC01851D189B5EE270EE5293B77ABF4A4BC6F986814FC0ED65011754F4030DDCA7DC67D6051246136951CFCB6AAFE145F5C14DF5390B105FF1EF9D35D31ECBB05B2D88140A7C662CA6F58E2682CB21F1DA837191220E3B2DBF92546D576E27709C67FB3EA8AB8B53F394C82834DD9FCB317A1B51D1723BBDA7AB5315778B27AFA89D191F1A47F8A0E0C15E33F0BDF577F92EFE3EAED6546A9487233CF9C77550D482DA1B99FB3B721AB7EF7826550FC4BF953426B69CCA80549569E1EC6E523822060B4CB8A88BCAE1B9F480E073A90E4CDBC8E60994B6B953ED153C9DA146F4AC0D2030105BDEE296DC6BFDBEBF75E6353ADD84330E8011F9483F83A39F8D06A50961A07557D4ED83DBFD9E5CC434F0EAA70D69DE7D034E359A412864D8BE292F588D607294A57CC3C5065781E111439A2033DD64B94B7155AA565368045214C588D3EBE04A04B7F7DF5630A460BBFBC39DEDDE14D590B2C79664504EF027F4AC22712F8EE8B4399F01A7418A8AB9CDDC4DA649F5203A9CA15EB758059B911B7431EC07AC541D4D2ACBB3D67838F4BE54A387757F1D19D9CDCD7CA1E5E6EDD25046BA117844D98153008401A83989C6788274852488D9C3A90A3C0936DC09087A4DD6C08EB2813CCDB49F1EA8680F66D580B10EBB30901C832D833CED19B52B419CACC1E01A61D16913396CBCBD31EFAEFCF1FDA31072AF08C1F1213658C4C6DD7640CEA2C2C4111A4E2E39B806CDDDD6C6083CE7876BD196400BA07FBB9F6BEB7656281D9650317D8F2EDEB962E62E31FE73D53759A357DA4B8571337E3C7588B998628F567909CFBEC3D6BD818214FC7F0FE7225E0F8AB64BB4B0D74AA79D9945E56177F0E81793552B5F2D78289309E132D16FC7424155195E1F5DB8CC327B650F2E3F1AF987AF84149052F27A1DA66251B08A562E8BE10E92F976CEA41CDA5317035DD78B327D9FAAA0B3C897CE1106B0746606FC4B6AC5F358D2F2E10F7938E5FEF61E540181BDCED5A74D3AEAD4207E18305A4EE2E999435A75914F21202FE3F39C39E5FACE4E391910B937FB5ABE043D633410E47F99CDE9DB85015ADCBDF48F45190193ACF6E6251E99B65A56868CD248F6935AA9C6720C2979FB5A5D54B45FE84FCE1 -MD = E1CCC5E6571C04C676F702B52FF5C52B2AA4FF1B3076482B9976C955 -Len = 19751 -Msg = D697DEDC68E06D85FE17F2B7FA83AB88CA6C9977F184CE89CC82C8A719BEE3D5925AD046A31E3BADC151AC2570593B081B9E71017B25EC5E730A492B7599761F919F52C1DC463AD93548D0015ED08A5846069054AE6579B77D1FF44FF1AC3CDEE8DBC82F6417DE05CF13652A58902A04BFEA7D4B39617E8D31CF971804FAC2CA79CF436B1B6BB0F7E6DE7DC46EC09DD716A514B992153FC7FEDDB5CCB8745BFA4383CDE935E22B9BDBCCCC042C8290EC0EEC3019A3FA25E4A050FC1187951B168C6247FB4855B130D896F1BEF24AB613CC9C89F81854614A603F77BA53DB241303698B71BD8A1B63E81381B45D7320C3B3EB54859E82445A44A5A6CD1484E088C546721AD5188EB2A111380613D232E51CC5BAA0DCEF81C1D400CE5B05E29FABF0759C08C907F81AF7E5B41D5768A244D5FBF5737F4959D7D053D3A3FB879D8D84B8304B481BB8F8B36A6E5B123338E94BE44CDBDC9583D186A060FC50A723F6D5EB56B7DEEFE082A66A4EAACC2929B5BE86812E70AD5E367562FB7D3A5E0BF27F7CFF887A8F97C917E805061E26762AE5C35B298EEA1D63BC2B456C71C25F78A1FA9FD4B58343232DCB068094BAD698DFCC0F5AE0E955425584F2B9F5E81D0CB91240A8DEE629228467F3D2561AFE36809E3C7776D7651BA9DA462246C64F8476F10426B7E75C6CB00136B45BE7A56B11A45CCCAEF7E28B40765644731A42F78AA214C5E0D82DE0DC2844369A1A57ADCAD62B475FC55EFDDFAF6262D39CA5DF27876D5B5F3C9C33F656BB0CE31821E5ADCD5D134020FFE3C887F2F1ACEDFE95DA60CB28CE375A740A21C4C7691F1AB5FA555EBAB756D2BC92DDF07161C9D59B281331BC91338211FEEB6B13C77FE56E9F6DD5F7827654E4B0E7350F9D0921FF8ADDE9B38C2D36590F4859A521A02177BF01501A6F7E7391E6042665720161BE6DE878C5AD07D1FF2A61BB8C402D3CD4C3F750E5A002BE8B8AB472F308D87066FE9217BBFF83374FBD39562C77831146326A8A3BF0423CC39E7DA73FE43D2AB4B69B9ACAC06B20F3C5606AEF33F898EA304720AD8D05A96B4967333B2D5B1091C8F7CA0C6EBD0A541D09FE7F198B4D3288F220D78C43585D4FAC3541C2AF0CDE4C92AA43722C43D337A9E2ED5DA10EF612D5315F62DB316A1316CA5A8ADCBE887E4BB77E57DC8573651D67B79CEA0A2A205DB4A3AB1BEA2DA5686602AA581AF262768BC0BED4B69161A3B8520E12AC312145D17EFDCC03E0DADFBFAC7BD9B4E634B44CA031AEBF24CCD38042E67FFF23690BFC92A65995724D0BA033F8D112E917D04C61221ADEC49441A8A9D06E1F5434EEF552E469A6D0766F1A7B8192193639A6D4E8E83274C2C81E0D099D0008D9542103BED409D136E4F928A5741ECCC4A3CD1D3C0EB88B7FA07B0F8E5D7AE845FB40165E456396E5A033597E33C9FFF1EAC9A61C67CEB2BAE5D65ED855B473713522A7424713EF1BAD08A50263ED876F56DE0F1072BFE7A5051384E6F8D53167EAA5BFBCDCADF2722C06BACC5E8F48F0D487D4F4A9C68F13712F3149EC5DFD7779249F8242ECFD9BFE24C3CD16C3A26FA7E726367B504DF21701BF560161BCE70F214B7D8AFD8B82D96F0A5BF667EE61DA803AC74D7695EAF7941F6F401F43F18E9117746D2D151DA0C2F280D4C011797558B44AB85FB9143C41DAE344B910ABFC37E71F0CCB481441F980622C7AEB2755F63B4D172104EAD87450F085B386408C9E688A509706F38969B0F74A73F00EE072CAEB19E89DB107BE538ADDFA19A229E5CA01C943C14C2DC332F01F572662A7AC85354590A1DDEC1E883D109DF32FE4F72B1F54726BC6E32E6E929CA3EDCF932825743C3B88AC2FF3068E80225845EC9CB9A90070B0560618205FDDBF6C8AC44F06F95805915828E0E4EA5A33068D00C68737209E3BCE4ADB29E88E1B8E3F9E994EF2076F99C94E652B2E663007EF36B4D5FCF9D20C42A16F01A4F37818AD9B0199AE691999C2322F98F5B6EF0E6CDDFE92BE0496B86B1D3A1B0455D609F1258183BB763CEFA65356C404BA6D4D9BF8EBF1AA4418A994AEEA79761296744F850616BA3A1E717B878EBCC0D16BA598CCFF62DA8DFE9A32586445987A52FE376E91E3410C690FAFBFB0DF17625E4F7FF9A63514D4B1525B3EC263F1956B54733AC68A3F62A41FC4573D45D3AE1632B934DD973EECFB330AFA5DB4ADDB0C3A692F0E0C13107B4CEA1335F1556B1B09316F9C4A28A33D45E9BE829694468D471EDF483687BC7134041218AF9174911F2A1094A103793D7C71463B16E39C88C0E68C1EE34882797EC4BDF15A8CDB3824985423660A0C65FA007E366753E4BF645A5DC2B10B9931E5BBE48C95300A3790A701250A067D1F4DDA253FF2455F9611006E1937631357B17473730B005959F1D6A0B03A76C289D59214B2A7A1B8DD9B9E45889F94888EEE52A5E0A09562CAD68E32ECE1225733E627D01FFDAA78A444D6A3CBC8366157642B327479F1EBDE7EBA499CA16F8A26B924CCD454D447F4DF2AA9085E0F4133FD2F371D3981F9E077124C0D2BD4DB66C6E252E2E58617E3D347248F6B38D08B3BDC9C1047E3F9422E41FF3799CF9C47F2CC60917FF60EECCF53904199C75F3BC26D9B2E30CBDAB6EB63F7A932AE6C68C519B64D9B9D7BBD4BDD0C93CE35BADA0E5F9ECBC162D6F889665F1260C2AC879264D0ED97B8D5726DD326B5972B85D6DE84194A137132D3DF887061A4DE46DA5B150CF4E3D9AF074E439E09DF7961447C2A3F59CFED50C3B2454E9B0092AD7EECB41BC1D8517CADE350D656A13A974A509FF4F160ED7890955613A9242AB4C8D04C3C17A708DA3BA7B37E61FD2E710C1AEB1DD6A2B44AFF3F3CD562173CC898370B4D51017347D96B7167021F934E2C8B9564CDA3B489F49229B20D63FC5F1871C522783D6EA153DA58086C82FD3315B5D18877355DD6B7F3FAF25C2B70A1116DC0BCD080DD7B572C7779868613C4690EB12081987EB03A49B466B7854AAFC2F25DE30EFF7431895996D1D4D2723EACB3386F010838A753D55BC641DE7A55CE82EC7687C2E5DFFAFC70679FF6CFD2583CE9C92ED38D9D055FE959E78C488A845E359714A10F6331AB442E246EAAEB4A8A8959CE0F8B3434FDF9B4B367B4645921ABA3168F9E3EC6002FB75EE136186409C621DC35AEF5B2A633DAADCE5D4D8064146FFCDE2DAD8133FD5493DFD52568B80F65D2A0B2B22D6C80B85BD298D32E6A5CE586213A394B1E23F7C4745982D96D3AF1DD4087B0D79125FD9544B9D4A3F84EDC4D8DCC976DA2F5905EFE137B486CDDF458DA2F45CF748952E5E7C20347A241161BA511759C4AEA2B0792E63A4E1B9335CD6550618804ACD5699A23633038E128592E40E2FEFCE69FE72D4043D45764558A98F66844DD1FACD20AC8E0405497764102A06E2E93491A574F2C98FA0F3D4D0FC35EBBA535EADA932356FB93D63C861F53681F0DC617DE7860BD7E -MD = 834981761765F490649807E798A9D4C9D1300E064F660DA0BAD320F1 -Len = 19814 -Msg = 7AD6D4B2BBDCA6816DC852BCC2BB87941119F52CB6FE43621EB69987F54F811AB193311F43D592606A54472056414F5CB7AE92C9442C57D138F2FAC851079A55C4D62A6D715C46AA4DEFDA319701EC968BEDA914E14C02A61B455678EFC95D32CDFA7760496D6AC7C7183D81FFCE6DE8B8C8ADF326D7458C42F94D51D4EE8C201B0A68ED8BDACD04D07810AA69D1019CF5151F75B6D18612077E54AB615C49998071C523379728138A4E19074E9F4E59C7E07275CFBA125968EBF4155A897229B6BABDD3EA26D3A57403886842B6F697305978EB2582E0F7121141DE320D682FEF239E17F871E4CDC7AB294DA9DF92E9F69CD12F71D27E8FF975420EC6548A653BF3235C6BACAAFEFC29754DCC04CCDF9A4172FC3C4D515C581E8B843E4F2FD30649029F14714454E427386A89537C9F2B72A72F731094ECEA1D86BD4BC2AD7929855F869D52F7E5C0CA94503858D7463B5F6F9DB29F5A961EDCED7B7C895AB998F81D9FF300A7E9098B14E45D70556A0C276548CBE7B9EDB4645986623E2560A18E593F5C34C9729887EC7BC77668829FEF0DFFE59E33AD4CE9257D4EEA29DE8A8DD1F706098476F91BF4873C0ABEF85FE84CF1E94E4C693FE17D6D866A750BB11A0B5B6A4C7B16E782E0782F4E1241FAEA87F5C90CCACE103557AF4A11788246DD5ECE14928BFABAD71E8CBDF3F4306C0544C0E7B27CFB014CB36205264DED1E5937CA7B89502B757A3B7C56EC85E7046DFF4109BB412B2981968E7143DD54189C5809E9A85038626BD43807B0ADB54FB33D296E361BF18B9D289773C9C9622AB4CC24582DAEBFEE35723FE94B84DE3E4BA5207F6CCBAF13AD8F99854923C34EE7BF08C3B945ECEF3E20218699B8BBF3737FB1224BD663B04372BB67CB6AF4E7CF0FD04541EE8AFE8E11C4E8B638895624893F01A78A77A5C6FD9DBACB08A206073E2914AB446B5DCA0B656EC129C3465E468D21B93BE8E1D0121FBC14F3A640CFCA933768DAE0D25FA6926BDD8F689E205E7968DA9BD0F07FBE49DC12292E2E5C7657C3162C7397D3647EA90237800A3C2997B06384E7131D7EA9D9F0CD774E754BE26EED243AD012523A47FDA8DBA2566FBD6E48B8C8A8A567D60D2C1F056D37CE7A27FF9A00EE9A4119ED5652F67F3D08773A006E378D8DE36CE1A42FA145272856F7CEEE44225272EF9AA3C695984C1D129411D7E71456C1511D8CB02D2C03F95BBF565564C1D6F739288A1AE16881737FC6038669E1AFA8AC2BB9E72D1DF33DEF0C175C9CD5466D9B49074BBC287F7035FF20C7BFC1E36FFF201EF089BE365613C7C950C5515424164EA51401664BD50A98550D9C047170710187CC325B3C09389D4A4F07DA9C498483EBAEB41215873A6CD63B8AD2AE16C22354695E85EA0A7FE51504CCD7065667CD67E2C567360C1D7CEDF20DBBED32F750D10C86E4846E05DE04D3ED2AD54B8BC9057D7A5792CE5863613B408EF2C9648CAE8443B3546CDB38273EB6FC3F54347DE6BF9F88BACE14824E90F2F036C99DC76643E3CCE2B7AD45345D8F4CE22FFEE45791EAC07B436E1E0A8803BE40E33DD053FEDE2B8834AFF89AA6181F7BC883AE6D27C5F9A2AC5301A9382F52722A04370161C07831492D2B769A1C3F01D3A4BA0F837F62D12774DC5ACBC4E61D15105D26D105CA8FA3965DA136CA91FBEB26101C117C81A5A7F38F56307101AC0A3B61C1778EDDE6A584081C5D5BB377EF20045BDC911562C230F76990D2C6F91EB4C34A79CF25783A502BC48498BC0C6D4A1BAE6E03B22B82B7E3E4059C42A7EAB187AEF0B214854AE1190DC0AE3345A3BE70A59C455AEF887856509F0820252C70DB409A6F9FE2F2DAEB762C6B27AE930BDE97ABEE448FEE3F95314D042867C28D3285CA9D4394B64B627B32A683A16694780922E920BCA512FD8CE05C149C0D239DD536F9A0E86B580FDCABD04A1B5B452C02FDCC9A657DF03113BF584D9F5680DD76F1A84BA35BD799D561BCFB0729128D4598485F9B70B23DA06212C2EF26B6BB246FAF26B36CECD4091A668298E01B434E15B6679BAF7226FA7186848F3DC12FCFAACEA869FAE43AB0401B5277BFA697544E693147F00F88839D9E7135600FDA315A4B74FB37A25830E0643812BBB01F6D3D078F8752DD092410A53850372BD8D3A772E4F52F7478751B635D09140FB0802E7E3013A97167C731B9EDFD8712BE2D323AC4FFFC5FB6CBA27F14A0F75EFC8C9D316F55B760EC121F1046B8D28EF3900219CBA6CC8F9B159B65135EDE9C1290C137423561B773D8B5A2BE0E2EF01083BF3C4987146BB3BFD4F76AAD5452AF50DE169055C2FBDA18B2FF4D77D996E4DCE9B27C69C78AA8FF018BDCB79687EA21A1733EF65597E6F4654350922B328A145EF07F3A3E08FD88F6BCCDEB16B687B6B89B44EB311862BC741E3DE44C7AA74AF759C500D216C2013C27AA1F82BC49AA79AB748B95564D551E16D25152FDB9E0E8B724D07E846734031FFB273E5A62694947BA669C8C400A88A0AE325B4C4741A9306F43358CABCA7A6E331F2310DF5035D8A8FADF3715AC195B477024A856B9842394E43CDED86935AA5206BD95C4AFE7C87E5B22A9FB6C77585FD739666CB4E3091D09BD2EBDA1833E3FE55479F434DDC7BE1B55BB71A0AF9AD0A64BD28B98908664607DD984D663D3C31C58FFCF1E398CE1347E5FCEB99D435E1865828D0D8E4D0B353B5F0B8CDC7EDD63FAE63B58247697419E3FE09EB0EA7142151CBBB8324A1BC2B65A3FF4548F42E9DEBF8083BEDF5BB001835140C032DE42BF9EF33D47DDB1B838C66FE25AD867A9DD1D1A2166D51523E1A1C9F9ADCA7FA0AFB69470839CC54653CAC9D957D7F159C434C913973164320D740578B32940B28DDC89F81BD44D6E7B7FB8EBAC3221987D6AD1A0F628754E7AF11B150C1D68C72052D701D8A1CCAB481E99725AA485AE9A732077BF6AAD4B33F50469FA951CEAFAE2C5DBAB61FE9D4B3A45F0DBF5CC70475CE4CE74022808F8A29EDEDD17E3EAAA0578A5C88624BCA5B86A040D90864C9FC6D02A400F54757FC41C6A0CCAA5591AC381E13403721CB566E017844CF0B706AA2A1FA6A441816515A20301FE7F85FE48CF1881B1AB248B6357241C3AE1879E7BAB936D7A28F9D44244680F5EB9982F53443391BB21EF438DB884A7F1CF80967E1BD532A3A14A08165714FE19C7E668478D35EC7F74B937C52B0C9E35117E214E57BD22704E9791D8E83728C3E2AEA9BAD43A127ACE5864E74BFE7C783396FAEEF87C950D78238B757414E33E32FF07ABF9243E970DB852121F25799E50DFC5E884258C7DD358E3DBB1D5F74D3F8DAD88C8BC3993C209907FE37D80CE43B46D56BA1FED3E57937CF7559A390155DB68788769224B2B13604A18A1021C45B1D94A7946E0FF2C5CF0FD513F3374DF12286142C05C5F2A0F6160F868E88E23306B1B3C3A72E892080476054DABD63D8C1FE240BBA37096822B296FF9F26421323D6E2C -MD = 568841F0E36F7E5BBD000FB379A327BD0C1B1DEC0AA5C5E2AF20894F -Len = 19877 -Msg = 74E48492C9B0E2540A9F5BDDB38E34C958B564DA9354CC11C338066D59188972746DF5CE425B6A6F9E82CF33797001BC1256963EA4764FB9BDBA9600FBCCF46C559169A14CA8C65B1FA75ABEBF0C6F0B25446F0D824A43B17DCD3BAA4DDEDE6D14A8CD5EAAC23A0B06EEED7141EDB756C847DB07CD9683A6124B09F3BC97DC3898E855788DBDBED91CC20734216C02E361469A919FFD7E381AB8E976F99D8038C61C613C5E209D1506EB314A2DB43F8AAD177C34CB1A86CE7B37C0A67018E1295E31F703E80CE65A992CBBD8F7A9BB224DAE8BBCB5555E5E3177375AD5D298DC9088CF05F0E51BC2EE38660355F8E2D6D3C5B7441C54F8A5A9A2675BFE7E1D91236F80795D100AA84AA596329F7DA5B10DA92DFF11A2FA6D6BEC7EC496311FC59240DF0CC6772C9728BDEDAAC19B64140577DB602FD6AE298B6EF52627BBD81530DCADD167ED555F348F52E3891F59BB1A6D276C57D2135EED302AE7B92EE1AFEDCE4F112198DEDC9A29AF394BDE5452F2CA0D096064B9C7DCA4AF34E4562DE280D15405F17969E7F62B85CCA96B80C1107650B52DB35CC166784ACFE512AAD6E6110AE3FB895B355ABF36E30A172F8CF8C6902C26BFB5D28334198B14366C1F7CBCF448889FAB2EA8DAD865D6B0B5A8F526C84D041DCA236E5898A47FCFBC300CE454A0D735AE6E3FFC9D4ADB2802E453703DB01B04DB44C9AFD12069362935B72BCFE553934F3D0381A742BBCAB2DBE7DA8C1A9E614007F0CD5E5A046BDC84702F321BF5BA2316A263526B6712799A764FEEAE210C36823C0D5D60EC20EA1643EA69702309F45EC213ECF89A1104721E5F4605D0EA7BD098594E1D8A50B3E8C44638B41C4E447462EFE8CAA9089AB3B3270B6F21F79F1AEADE11B90040BD2B52A919FBAFA7FB77237B289CE1BF92D714A820F5D085035C1E207CCC6896708061707ACCCB8DF742C244240AF5DB04F2D85E2180E41316AE61E234EDA24E8D25A64915109BB30F014F59272DBD1C02ADB8C0EE8CD84B9F0E70D75E27FD08C379652FB6EAB3C1CF44814BE7C717C41D2D7266240352C38847B7B57A2C17C48B75C57E673DE2705965BFDA2518D5FD11B9BF319EC220C52B6B4CBA06E1C8EF46E36FFE5F2F795A210F5D75887FB8FCFA7CE9B43127D01DA26F1D379795F3F9D485C357868688B476CA6EA3723F4AC59DF8924F26287466072864B2D662094F9F84205674DB43F94A9E236C84BAEC5F3007D779F965E9ADBDA25B9E76E6CCD4412EBE6B9D12EA6D7609E3B4A12726972FA0C35ED429939D0618AEFC9F8EB7CACFA47DBFB2314F38630DD169E27BFAA8DB2DAE86ABB3D5B54502D099C250CBCB812B1495583D2DA484532A4A797FD82A1E26E72B6EFC3D536956D7796AEDAE539483B66545EF05E9A7685C0C262B277818838B372EAE75F57AF28241FA065CB1C26EE7F5E77E40F1B90A418F7E79E61A4DF86A26EE13E2C1961FEF5B78EA6347AB0EFF06919A72A69FE800F2FD2455A48F1A757674E2EE3C27447AEFDE67C31D17643BF6A0E4308AE7D057818570543597C8433C43A2EEFC4E737879AE23CAEAFA7389D5BE0101F82BEC5AE74228EC39375A1AA237EE075E0CCFFAE281175271751150FF61A4DA8A40DC3919394DEF6F87B33C6D47D269EBE60018CE24FE51E6B0BB3383263064D3B972925B2534950C325A780B87BA6C8536962D3685AD33A4C647448E792F415BD560BC612DDACC858EF531CB77BDAB3FC630670E5A8B0CAAE85A0A546DD6B114898BC63C996EDC6161AF33B490721800A290CF4D68CAD5813EDDA3A2A3C8C9AA87319F5FF657B329A0C0F8283F991B64DFF554EB83791F91ED584829C7B0CD7FD369EA7E79937E3BD21491890B09A53C0490903C7D9FFCB5242D37CC53FC52BD4457D6E7E0E41558BF64D294963C72E9C75797E0C029592EB4431A3604539CE878B038E3D11548ADBB180EB2BCEC70806106F7F5F5D7F8406581AF0E57C6B99BF0FA0C29AE7091F0FF1ECA99BEF5D750AC7EA9B184694ADF8110C72161BD26A6410BB49C53DC07BEC7D8132B0E993BC253CE390D78ECCADB4C2B4A0A751A7E72760A6DBB087B1D1C0C998AB80FA3F72B79E1DDAEB21CFED8350170D2568D5A562174A7ED1CA737E46DBA14A85EF215F6F566BCCEEB1C9CB120B72EE9A9010985BEF189855E1B6752A4FDADA60E1EC895D01A50E2B1B6E2B93CE39CFADD8D966DB64911EEE5C2EC1174AC2C2F21F2407034820DA710C068EA81D0A5905B06FF054DB2076195558EA586B80A6A7242D9235598E4A177F0D6C70A043F2C0CF66C27900AD9791CB2B25B021A71E10590C71441382CF1F929FCFC827438F11CECC4F83FE065A5F5EE209CA02D54D4BB1858C1742E6F9C3C9BB3775DE8E29377C6F22D517C7F8A331A11BE78A5574CF479B8492B7F7E10C40E7CDDD0653A42BA1DAA66D7061555B26569973A914196ED8F098EA036294CC5D349AFEE5D9810F1F6C65F269521FA23DF2AA7D6988125B9FF82291FDAFA028624D8BBE2427F9D563D9A0FFE019E821B79B7C372121113D55CDEBA1DB0A4473A2E3D02BC00640D0E375328143389EEF1FF18F1A5402989FA3EB7908A15DD3202191DFB11DE53EBB1A37E11CD3020BA6836880CE854F81523E43318D095A98264E725D3EF37954CFAC2AA2339E751D582DC080C0EFE9C455B70C6F189FF648B6860BF87850F376F5E4A3FFC6B2AAE6C726051F79DA538BC68E7F5CA26A83B2506DCF82A81B727603E60160413D10FADF00421AA6DE4C151E3BC99331E4E2A605A88F514A0C32B7D3BE0D812E8A7156B59CC70E3F6FF63E6F8A1F5A9C8B08A322C3375FB24ADA208AA958EF72DCF8A4D59F204AF6C948DD25BFAA8C16DFF85460F2A3454E8D65962A4E2432E052EF029AC5AD87A9AEDAF9B4B826922B1ACB990BE36F4AFE2A68437368F343A364736DED04F1A2C05459E15F52E996F746588D6082479121165ACB5511930F201B993F64265AB7BAE0E499BF76CC988558ADA69129817A3868B5B42EA39001A4CD11EF53E71657F326532BCA82285C3C48446DF4A7A25EBF9230302C191D74C1FFCAC04B6EDC2E1895BC8B9D5FF6E0B5897041A7860D91BB99E6B69A4CF9641C3B307A8F15C4D9B3C64F4EE0EF689390AC45E918FDC5903431D1F545AC83B05EBE1228929A1955B51DA271DAE688AAFBB7988C14FFFA23C65D67B0447807FD1F1ED690B50F89EF97BE34702B7522968B734EBD52CDA10E79E30295AA3822208A14378C5192285D2A09AA2C7119997542015627A0BE48AF80017F614E4B8A708667A2C841FB9DFC251C28F0D488079DBAC9E7476A8F4B85E7D5217F0CFE892B77FD33631925D610B19AA523E2BB55E440F4D5441527983427A2C411853CC2119B0385FA22FDD8A7C2E6E955B951379637C5809DEC14FB65BACBD4CB68038537D021BF0A4CCF1CEA7C40E2EDD0A9B118CEB4E946C619359950F7E6CF75BE25E9C42E3810FB74E499DC16348BF772928 -MD = F7F920695E067BF706B65FCBAC82C58D6D999C0A3754D7EEAF3C382A -Len = 19940 -Msg = 982807A5128110056FC9159C43F40275E2EAC7FAC8A6CB8EBBDC8B2E739F7F6D41B0566D138A215C273EDD76BE4E0449C805D02FCE25C1F0CD2AE81D8DBD26892FD9C7EED8282BE08D007B05EAE698BDDF97FE642C4DA947EEA7241A5AA5724653D12F251C38C61CDE283A7961EAE8E48A71BC6079B7625C1857C45B0FE7F110E1DE1B096D6BAB0CE3DA8245FD7AF4CE16E16BD4EC2535ADC1EF8D07D375FE26D3607EE50AC43DBD0DA4E7FA8568372163BB67A25AFECCC8EB95FFCB8B8446851E1803DA631CF28F60C32E5CD5AF8FC510E68731D45D729257970E0671CDADF0E2642CCF79CAB60F3D6E0EE2923A312FC3637BF01250FBF94A044088C7246AC5B5DFAC37F50108A8402FE2DBC883E396144EA3633F95755064197FDF9B70A66126F0AF75CC2DAC4A2E0ABD6E1DAEF7287189C4C8CCA476689592945C3E746EFE5939E184E6B820EC85917D2EFDDFF9DA9CEC7077B8BEA0B2386BC4049192813D1CEF14B4AD8B34B547CACBB38EF86F6DCB95AB08728D0140D4D6831D891D7CBE77A29338BFA3B358EC6980196A00E6B580DCF133139658F2CFBFA4615683641C7C8A6CB5879FD6DDB513E37E25602A43A9633C4C675A62CF99F72D6B30AD10534569E86B644AF0266313C2A02A7548D0C7911DEF8794A66BF027DE27DEA0B1BDA0141FA642EFFFF616B4A9CFEDBBB199A5A3C30B2C0E91EFF16C60A1CB0AF77331549D021335D1AEE8B4379DD1EA6F6456BBD874C5CF5662886229DC9EB8EEC5BF189EC04E571DB392B16DDBA80C8C8D0B5B58F544D1AB607B8838546BDC3C23D8FD457E689B1680872C7AF3CBAD6CA6E71A792D0A01ADD8748A3564A658F59B2A51CC8BCB9DC1A146D48B9AD60BFB91A6609E663FB49E91796AB5EF7D56AB9516EF17818908ADE1793127ED88DB91A99EBF6ADE1FA1F81E0A46673CD8ADAC9FDE19B423C6677DDBF09B5F60BA218DA8EA1CD08AC5821386A89DB39762EAC12F223768AB14A6DB3F007988D0101CD3C9C33DF5FA4FA0E7A93B2CC5C10CEC6EBA603ADEB29503737E08033EB98C3D14BC17283391CB7A1620E081E7259B8118FBB7D23DD33D0816C9007E0926CBF397E8E08E408559175197B0BD3168114475B140BFB9F439FF9669B0753CD4E8683F70D8F6526985D690F154A5A18D69CF1BE5F28C9E62CC309D83D07EC912CB7784EFC22F262359A25FEB4F75A28AB8237F3724AF9603D3BBD57FD2D11BA5B4FA751DAD44348F363EE05B37657ADE637362CF5E7D25BC33CFA4777C511C5D2CAAD927E84909BD34CF857BAFBA77BD22729F218615B1E9810D8227A585B18B8C60107D341FFB90D73981A18D9833897B94DF781B3ACA83B92875F3B1BD8FC5063CA79E8659371EB5715E0D5BD5FAD3A0041BDBC0BB9B49F19E1DCF9179330E7EDE48E05CB41AC46E45E94A68E0230E62431D1D9928571747CD5C31F5BE321735CCCFB18DE5C385EC9293B38280A7377E9540B012F357E387D92637990D2E75D02A4E7EF3693E7EA7C20D1622986B6BD69E938BF5F2255CF6031D2AF69DDE8699670FDBF0A58DC387C2F654891BC9C1FF7A42D0706751F06E2CE90563A9EC6B23F5718BAB9EC3F29A2E764057A4E13327883C72343D24C936BECD16203B1802CEB99F76BCE28B425BF9039D2A867876393EC8C56AD47D9D39A076B945E209D5D9240E520BD016BEE7232E0416F463BC6C1B3625016D866B78064A61549A7FB314B0AF0FD3B12DE6FC99511210EC0A70B14041DDC1313ABB28E9139FDD77B132674570C2EAAC5090D1B78A6123E6432949397CD93EC94ECD00E78E2F2FD13C0E509FC8E769C7337315E76AFD18ADFD590247D207869900C35E7D5C98CE2ADC6B1204D087D0C79A5D5E036F0B27951EA8D1516334119F321D2DF01721A4D481AD79E2DD32796A5275C851D217996DC3D25196D74B7674ECB2896051C7E942699BB30F1BB0487750A6D60E7AC9ED4ACF112A3A17F53368C9FD572B190990971600E9A4900969C030F2ED8C3115871D6F0C536065D11980812D64478718C4D7AAEB6B2F71FAEE4BCDB213E37F4C78D17B1FF0999B0614CA330A241507F14047708C9ACCF7EE2C1549157D26134A5C3500EFC93674571D3FDFEA47E9206589B9303C88E848BB5E67B8EAB010D724488AD97EC76D158957A0D20C1F6B0122278346769CAF4F97D432F6B751EECB462BDB4C9760CE66B794F0D4C82451928F835C7FFB8FE1FBD893090A0324D352494118EA8334B4AB76F042F04C3A0F46FB7041D0DA20E9BD599A19F16D4639AD1FD0A20CC10625C55D13BBC2AC9159ACA3412CF14EDCDF04E5F9FFB659DA3E28971D0ED4389683EF4457BF565BAC19D6B65BF3983499608CFE112A2CF61149A5BFFB6AB48782A09CF231416F3EB7C4B5C64FED3A93C57CBDE32378755EFAB828FB268BB8055B85F3CE17DEDBC6A9F2AEB01AF59CEF70A53208B8B565F2D27DE3A9CF45220A3D4F59B014DE563E10195BEC481075A4DC407978009E8FA5DF785C321100E92A58C95256CAA363EF953843C92822C16FF1B36CFAD338D4C342D860750C24E5C55A01D0C6C570FD62A40A1C9D0DC1DB40CA4D9FAE1F120073E7FC2E4794413E3F34E2A83AAD20F5797C80D794702DA885213AE8E269C6C7EFDD3D1F0E3270CF2932CCD7D328ADAF7D7DB9B092C44B9EC7700D83460529805C4A32C43729927F6309B08DA14A5D02B57665B3DB9CD4ED03C6E3258B554C6E210A5C43F7ACB596F5EE80559BA3252AE1F841D5BA713A980EB213294E1F9744E8CC563911FAE1C9B149C3A41F94FFF6340259B9DB859A7876B0CD7084F3725C95BF571774B6CF8654F6347C5DC57D56B2937918ADE71C5FABE12BC98718CA790218144C0803B86D20F4CD9F6B5462350E83D1E41B50C218390A998A50D88BDAEB5E95256B5A51DD5B431119F59048F341F4B4DCE495A455D6782BC80FA6B6AB863C4A82F04AAE93F811986EEE22EA6CC427B003CFA76BA8D1BA1306087B711153C8978C9E0FE5BB14006929F35C592E453B6E634FE3997AA8B1146DFF775FD3497C8F4B02B63A316E030C138C6AB851193D594B6C3C89F50C99CA8B590B561D80E16681A525B700B3A361D2F625DFA1731D7B0E711F1C7BF0DB5610CCE9C8583EF579EE8651AF2A7BEBCEED055C991B65BCD23E076583D94C66A0044EE23684480859D0CBC592D4DB85E295766D33951DDAB9ACC02DDEA22CA83A063D84F503AAA30EAB70254C395DBF978DD8E7A7C99D2BB12F23FF8385C822EF78ED57CECA1C9E133474300E5F4D5596B564C87E8C67EE1571F57BE667E62D26BDE8F1705CF4B71191D0AC39E88278F3EA92DF6EC3B29EC3C64AC5CEA68B9E81BFD95193AEF3B0D7EC8C0D1116025518FC982E0B0B456068B7749B282D5B140E801A28AD837A007A92DA8BB9514981FC72F84E0605E00FFCA8D719FB1CE9EE97E269095F4AFC2536E96B47AB7F12F17E4A3C429F812EE2B8C83308D5A7A31ADD459F79D3C68DE43580BFFF8C420DA0 -MD = FFEA268B4851D2867DFEE18F75B371070C889E1DDECBA0C60B0DD724 -Len = 20003 -Msg = 8C51B65281D8FC2387A4B0A20C0E0462893788AC91791376AA01978A1863C47AFA4DA21753DBA32428C706206F42623F83707AC08EB4919E82B77917A7BD4D978A5B9EB1867A957D7B559097A82C8FE392345D07805E12965753651A5AAAAC94479190C9341FC7D71C7BD092AFD20E4C70888F853D98C72B1378D86AD942002146551554340495E73258DCAA72DE4DB495E1D8D0B9CFFE874A006D984BC52AFD2328D672FDF73D85007D2CB5F86B49FAD80DC35E3E3676CBF1E55AA138DCC168539B1AEC017E3423151A64D79391FA4392294413F19329CDD9AF2345A90F62208B6D564948FBF98DFB35B0DFB7C8496794518422E7A07078D6E1A8E7AB8D9B896C05DF22AD93FC1B9A727F0399E818CDE8B060D1AC590EDC7B6E4A6B37C78623B6EFBC5416AC1A372359408A5F733E9CDCA060FA5E20FEDF42EC0AE1C305877A4B5F0F0B255C572E88F2BD16AB5A5A8C2AD82F60B552709EF6BADDBE5C57E2C8F1D7990CDCF763FE2A3E8E11E5C42BF410BD332DFE0497F82617E95EC835D8265FDB306B5FD483D06D9364089B7C3416B04316F9B42F3545F5E8A0E403AFB6EF6B6198605A8B13DCB65FAE5D2014DF678CBB6D4A157CA1FF0E21CF7AB592026D9A996EA3C310434078BF25C12FA0C7A594EF487901E76262D7CFFC9F5856924A770B21E12D0763609B6BD91D738F94555AB9EA7D9BC8FDDBB29C425FCE5BC6B52868A158B2E4EB1692BEF3F841030DCE7385314F8AA8B457658FB60B427BB12DB934625FFED690CDBC70C018D097B8F37F9D1D98F463F69FF483B1AC1508B86B69E932332F84B73EA8A902BB51EA59D9C0CAEF65CE47551F0DEE758E9C629242DFB407DFF7F562E07BBE8E7F1817E730246B6C902C4D1B09A03DF81765708D27CC9B64501B85D169C37DA30DE84BC74E27341B0D8FC5D718D8447DDE40A7EB74C2E3D9C51F358EA080D6069E64E797623DFB4E978EA4F333F8BC4483CD18F41F90A7C52D1D841B6FB419C14E994D802255AAE2A731C1991D9DAFB926F02A9A0095DBB36C8C623988B9801A52E461DDBDB0161CB3A5BD2194F2FDB08CA4C225433BF31193BE0D84C8474849C0B64294F30E72304FF6B2FBBF9E05057BDFEAF5E29520CC93A369A7EF4E76A7C39800947081BA28D9DF2899A428BF36F1B2CFC14EFE17161FFD93C30EB6591A4BAEC444ABF389921D23106D8E5D9CC3BE6641B19A221AFD113D22A181105093DFA4AF48D03F77162F98AC0533929F052E0D198723A73FE6E8B3D5DC5E181EBA76F327C067424893F6E92832F2F4575C4C3755B3D453B01C3AF0852EF10A1B35BFBDEE50A5073813A87E272D891DB7D094B6C4A7FDBC8400044560621120D538C785F7DDC42C1E64D456FAF745EFD0AF7DD2F7EA3E801DEA2716380765F67A3F44CCE5D23D0C25E18BFB4DAD4EA32464FA7C567F6706392F18D858E525E2983C16F4CA0819ECFF7E3A2C0A0C0ED4F01294E7978FCA722587FE0797A4EA4BE1B9252723C143E59FB54F5108DDE2BD5A51FEB699F18BFA9F9656B837DFF1567CE036E0F26BDFAC97A90F1AEE5209ED7A1C97B4BB6F7D769E6D8DB9A7E27537E86A86C441049910812BF4963808AE188A7BA162ACC383C2FB196A0B399D37F669B8D64593B62A789F2C6B72FE102F88C9D7EFECE01DD268A09683F424F1D2503E5F8BA0B0B7E7E408FC434D3D6B9FA7AF1758DC88FBF0CEBC9A912207DFB8C3E8FAF065BC4A750C4D6A8D263B1A17D5C0B91614CF05FEEE63A77196659DCFC2307ED2FC971DEE98CCC2447757DFE1B3B06DED1BB599108F8453DA0027FDF630C524B3454FC0D7026C4F5A5FEA55A1AF0B046C0EFADD6327868D80CE7FC68A69EB8E2A56293B93D335E3E021445EAF228C13D4E2F18566E06E37F188B144DB92047B97E0746862FFA6C8720B2F0DC3C9EC463211ED21546417AA06843641202EAB4E74A4DC11BA3B9B92A6438EF86D45EDD436C8EF96752E9BDD219861873141A78994AB48831A50F08DF9EDA734193609B7970FFF990A5C77A541EE77074FE43FD72E1CB1FC37F4FE82D6F2AAA307F26DBCA86BD125B2C9E30709CE2C9BF159B2B0684FB46AC91762589C6D73DA8BF116DF432C546C205228B45AA46CEC1BD03C37584B5A468CFFFF2C612201BC5892157D3A13505FC83FB1AB40EB26F841D4DCC5AEFD90ECBB0CEB2A247A3B96B4A9D44E4EFB97ACE960E8809A52C092212F029168CBFCB1811958DA036A672C29DC0B78CDC1D7CA5464B0EDD7A014AEC1469D369CA77800373E368B5643D4D808A922DE36589370BAA2DBA8FF365ABE5CE729DD3111CA3BD70D9F68A6C9DA347EB1B97B15267E31A28F7D8726BE1F90E3BF7EFE22CE774B7EF98190742A3C307421620D1FB4B3A3BD8EE93EBB904089765C410567CD00FBFF8FFCE82B6F9BA6F8B30E816886799A15CB18752DFF51EA6ADB147220E0E7415617362C677D043682CF1CB2CDC4048CC675D5B758A54CC75A09CB1D4F3168D5DBB118F333497E644F2981A3FE057F2DE8CDBD047091145CA5504DA4B3D5B037EA14EF2CB914ED86074F098491813EDA85B4E81A085C78B4678CDC2E2762AA66DD7DA9DF3EC0555319CE40B411117B33B95137DE9FE17EE3CBE1FEB98C3B647272A9B0EEFC0C6DDA009896CB3450354C4D0DFCBD7FDDB3E2B322E7ECF8BC4476B854863892793C930BE49D380263AABFE36699E4E9C4786A1EE59A29CA4425DB7272A0BAE1E35EDA0F287F2312E5E33A88B86C75689F1DFD7751F3E9B094AC3BE54381DFCE7A21D8C7D2145EF3165451B7C1866DBDBF73139E03265569165993513335603D7CE1D83E8DF15910CA1EC74D47B334771174651B74857A6619DD606DE18B1283325AB5ABA107ABE886D2E86C717FCA5084CF2725F00E975402942818F12ABB051308B64435242A50FA0145E39EF13194F1062D791EDDDA35E3DDAE6DFE02C9490F042606A06A16DABECF770C402FF1D6FF52734041F48CF5B6CC362673B996AD9A4283C635389B10E8544A7450FF9127628B97207809CAD2BFDA22D09C9A6FE3B8506FBA0C8DB0A64A6C0C2F193D0A0F7ACB395F8C19B0A2495C986A060452CAF971C17BB7A5E41571D2F6254263C69B71E8F908407D3F8C21D81600470F696887303056553C6DDE72897D0EEFF58F005DF6725CBAE84C1D08B9FF733CFDD0D83F56AB77C37EAA3BFEF9539BCFB516A75B771635666AC873DD86D19E4C568BFF94E7A68D8A45047309AEC9AFB8F7FFF87A8621488570F86BF1A7FA2E00CCA741128065CD8B777BCB9D363DE4BA63D1ED021E3376E77DBC0B0F5C39E3177C5DDF6847A37D0BA5C83622C5354DD4868D7D79AEECE2DA1ECCE6BA1A89119BDBF80F21A9391F08E1DD4C51C0E05BE9C3AB2CF2CE71D567236A19F557E0F1373EE0D61267DB615E057935E94B564A0B6FA9D01254AE13A5E70E0F22EB94835C6E58D543FAD9FC5AE3E44A02699AFAF79BADF2D1DAB05641449E625F52935CA1C42F0294907157B26BB0F06A7EB7722ED8302E40 -MD = 4F860D62D8E815E565F63755A56AD79A2329FECB4FD443BA10B44ABC -Len = 20066 -Msg = 0D710F920019661B10B44E39A5A6F5F027E9D74F880370CED3C7C4B9F64585AE68FADE4F95F4439B6924C4F16A56A40E2E5437BF36C25755AFC10B8E4B8932A7EE92CFC0FA2F51533F58BF750772B799DEE7D57491416971F833D3FCCC642DF29ECB2A50E908E4BF81D46889C7DEFD9D07FF02E0C80B40805F601F8AFF97144851A526C9ECD25409D7AADCDA7A7940FA1C282643E14429B80E33F085AF205E5341A9804C6335376FDA4FB2ACF378667ED3EBDEBC92E9FB540BFE8BF6F688DAD023DAC424D06868B5AD3AC209E739B7AF7DF4DFA41CF6CF3A5AFBEC5DBC7D92627047E7DA972F69D81CF7C65256EE3D8D199CACA5F5C5B1DB1E764FD2C728071905C1CD7F90E62FCB8ADE66419266DA29545CE5F938C3B2BB9CA382807379A296351A87ED81DB638D331E9B34E94A44A6F0FC13DF99C61C3AF7394078D5C5577D8FFD7F8F5E7CB2153521FC57F7263FBB238C20FAB33ED4B32F31F9444113E49E03F0D46E2B0AD2FFB7F4754E049BEEB18895D7C0C85332A8061DBE99FD10BE12BADCC065E3D214E908F9796D5939BCB45C22B87D6D67A6348F74A5CE49116384B979B8895DC1FD26C7F35286441214792A79AD0F6349D6A3B565F86A963F1A0FAFE76A2DAC4C6658686D01E5C0B0766E0B4D9AA44B5CB9C18721BC18460935F9852B1F85BAE85FF12AD9945876CFC02C0D4A15789F2C746683248ED9B7AEBEE641F8E2F91F6B3EC3361817B416B3B4E8EB334827A79C1ED0ECE4BBCE3B522820F8105682FD870BCBA115E7816827313BD124691D9BC37039A63C2F17B65DFFFA149C17AF2C965BB68AC4EFFCE8B31DCEF137F9C016196A720F4BA8866CC4A54A28842747C14A23E7059ED0260786A199FB570CE9C7C0767BACD9C9E273C2FF65BEF868104FC6056B491DD6F93FE2A8702950A40158D6A10BD7D5A19886DF04DFF902C7121C4E9C9D3E96522F5F0E58282F7B019D7FD546A5D80B207DA14CB84012864E2E74808DB9D5325422F5701C72CBD64E3BB5CA549D23FE530E609D754082CC1AC533A53B892D948CE969ADDBFA2D9F066EE27425B68E08A310EE9CB8A2FEB6E1F2C2EB2BB57A09A9269E17BDDA2990A1BDE41687184A2764231105E1341625BA0215DFD44DBC9127248468E2E1C5B06ECE9FC926568D79C6446F1786045BD73D667FB2AD6B979E03F98F71DC701DF6A0393619DB07B03B9249B06A0ABFBD3DA919A83355BDF6FDAEC33773EC68A9B43B14A2452007A05AD306762272D532760C478A9C6BEB489942CCEB217222A2292C0B13DC2BEE5C259DA3665B6FF4A9A88BCFA3DD5F2612BE2C3309667F981B542D8C2CCA45880FE754A5ED1BD685FE6FB6A457A66FE2D33C3A04E4E1CF974F41F34271B3DFDB3690DECABE6F72997B30EB6246A9817C6A70A16B9432FC08F27BAFB7D9802C2E188EBF9ED815DAF086D675A92D09C481C93EF34E179371B04BFBD5EA56B3ED0D075E3D8D3BF60734E1FEEC637851CD2C1D6FCFD142E5285BD04EAA686116B470EDD5CAD70C9CD9BC512E58EBC28253AFA5126E78604C74809873F780D7BAB1874BE37B80C9CCA1AE7E6C86859A153F07EBAEB28D0CD240D815057913D481E6D1CE7F3F2B89E555DBFE3F79BB8FD84A4414DA4C5CFD9DA2BC978FB1C2603F3C55BB399F33166ABB713DB3F54D38CF9816866CF3F84A54EBB68AAE84C0B56F7595A845B26A25C7ED26C5B3AC93DF5196E843BCAA65B4B97986A2707AB08009051CA5DDBB3E98C0B1835505C6AD72B94BAD7063DF8A63E2E3CB6FDA1446690D4BBD0795229ACC08C3553ED2EC61F66120C4CC70552B42727576A4D71DF7E8014D324294542E8515C50DBF0BA8AC4CA397532480B8EA9CE6DD21172429EC35FB9E4064021615514C0D999F37EB42333675696523A68DBE4E381CD2F26F4A16713F947BEE49B1B70400E7CFD5CB63983D402CCE11E961F0EAAB49F45B35FE63037C6FE3539621828E2AF9E1AFA0255573263EB094D0680D49D2812ADA6B11E9E2E3B72FA769125ACA3C2E14BF8EF377BA8361DF15154CF6D5B040728270F7EE518A5AE10EA154680822362BB729C7B5CA50CAE9FBEB8F87ADC5433566769053ECE4ADA603274FF01E71CBF3D7A480B9A4C56B86BEC801290752095E903E026C0354F73AF27880EE64830AAD4329636D36F14BE8FB77C5F32312AB47AE06D6A88B825652D4938790BA3E7027EA3F9CC457D548058E5AC7770B2BE01CE4C23A39FC18F9B7CA92BFC2929DBD35A9401E6820E38F2FC34C056405AFE3A93A9763F81BB40C11C6681C955641C82748F65ECC113D91FBB329C7996830D3833281D3BC8870A8CAF72E671E6D0C5B347CF57E1D7548F303BF80C4B7EBC3F07A4C8DEF5E46A1FFC8D69D33B3D68A5E43A5E7EBB697FE27E7DD845FE47257284743176F2F6338DB601A817A3FCA0B0CF996DF8F2536A6A4BBBB3AE8CBCF02BFBB7F08D3C60418DD135DA29F3EE4F68816CF3FF729BBD4B1967127AF1D37EBFCE1E14CD1E61647C0E47AD6D9DBCDC3AB82BC77A3D7B777B467D21C51FBADEDF50A0981C3F022C48653708BACBA85B5804242D9CE2CC73D68B37B56BD7633B449E018E203150975A26EE341E1C3C81B9472B9FBEF71D6DCA861421FBD1F5D0733A144B09652132B93B0855863B4318DC6F38F9DF5FA977876E54DA2D6B7899A70FBDAF3D85C8DE9CCBFA2E5EDCD392577BE1473692E0710B7389B546B08F46F136E8E0B8FA953D2BF43AE6A98E369F3A34D9E5DC2239D3F9B6CE4110C89A2CE378650420BA5D8FF2C71E218E4F1FED3F9D499D7239A2469A8C2B3458F44C46C5626317E2F380ACEE1B12148D67C7A9A7AE399DB52FC001F1643DD38E3E948F0BCA3A3D0D96F94C1F7C514623BC4DCF9D85C01B78C10EFD74DC97F1F6885C26F94D1F5F87D3A2E31974A046D000554578C85061FA824548A4BBE15604D3D10DD13B000F6AFCF78B471FD72C4F2B5DB4AEF02AFC00FBEE817C12403522F6E7CCA6DE80476CEDA6EABC9101907A123F5D85E2D178B48238576263890C8F4BD2EE09726321C4D8CB2BBCF2EA4A8D1BC042651092284C2D57607772CF239EF7DEB97FD1D1AAF87A150A53901052134284A6D1C5D3189584D3E12243B0A7C38CA2C955940C8D420ED501EF7DBB1F5886B5056677DD5F3CA68E0A9B478B5BB925F69F0968E3C62F50980F0FEEFDE017BC1E474CDAE82AF7061A1273CB184D143AAFF90F67B78A9C194DEB154AEF554E587476C1014646EFA6B80C9A920DF3BC243632B27FC65C57FF2DABFE48642F5D3312D02D7D1CB6144B11B49C37EE066535F873FEED4538BF5E32FF0633A58F8017ECF57E1D9BDB639EEB1D8B78EE8DB0437985E6A3A9275B3E74ADD74763B66262166CE44B4D13EB3AE218509C5D1771B6039B2D89BD1BE3074A19EA2CA35B57B70D0C698ACEFB8DE49169C67CD0DFA65B0CEFE584FEF07BA707C49A41A3925A4E731BCD161C2EED8B368D8ABD85EDD4485729E5E256A14186C7758D4D6999FC2E1D38728D08F054CC319E2140D75512D80 -MD = DBF0348B1FD610CA2AF8EA8FA4311D43A127B4E94D1AE85021C21512 -Len = 20129 -Msg = F6157840160BDD49FF6723F9721646551F7740EEE4EE1D32028BD5BA229DF1A58EE78F90368A3B28366B1C222B964839AD6E756D587AF555D3BC06102D78FB562F803EC0CF8FA7D30AD223026F4CC7EE48E519438E09331C99C462ACE6A49A270C9D4FD36CDADEBE6A4F197FED586B9795FCABEABB0935D57E5227E1E305BBF2285DD84C63968A1EF954D11C4C2FDD6A52A9A380A14B774A5FC5DB9244E18A7DC79A9914B370D4C7D261A45006E3F47BACB03BDBD750D8E86B407A6691FBA3AA76547BDA657385CA147AA0A72607FE047D17C1E71D715C48C942B47CE48F0EC64FF8ABD7062EA18FB49B15CE4A5A593818AE45D5C2B57AE70FF66B1D57D00096900A928C842C1E9EA10995C8F74EF514045948C31BEF549904A2CEA45ED24C57F33AF4EA526FF16640C76B84FEFBB2BEC87C34418EDE5E16C835189D68DF2DBF7C28DD2E155A18EDED14331E5524A143C4D3FBB8106015949EDD3250D6B0FB10A99C74B41124DEAE207BA3851EFE2AF019786B694F0F78CEE008D48CE2A2435551BBB1D00AD6E280E7EC775BD3DC2BA124D2B91385C07BFD90C8412ADBDFD2946FC3C29175277139F06BF28DAD654D87D52F019F71BC0DD09077989CF48EFA597B3634DFF1F82F95BFDA52D6AA55656C84732506F8BCCF137022A1D75B49FF76BA474917BC3C132E7DE554EAF2901FE13B734B70D760601B5541F95997A0D944BFF8A4320BA3F303626379B4C2D2635AC7E591CA981F0943885FD6FDA13A092EADADBF1356ED5D56E96DEEC9242211BBDCE1EE3404DA831942215FB36D96FCADAFCBBFBEFA538A75EB45DC267021CF7D3DC7AF2FDCDD1ABA31D7EA052CCE21B26B9D9776595FCC8B7F89B070B85EAA190F2AB85EEC4A7BFE5AD36C846406C152F8FD8ABF6EE2AAD999FE0AE9A1083D6F3346C883DABF27A89DB482F2DC4A30A25A7092C86FC8B499BDF6A42E410AEE697F46F3BD424221C3188DE74BEC3F45D2246717384C9F0DDB4BFE41AD1487B94F3B5CA075776DB88000D9336568E9868D08A8C1A3CD3B3C5A9B103BB17B3E29425057478CE6715DDD7BF1A878A3448A2779F74AD997928899AC556EDA14E8673E25885388AE143D6500D2F797A5C69E62704BCEDAACA28AE3748622BCB3169F0CDC6696E13509C821B49D30B0FE5595837BF7AF11FD8693436057D721E11771E63DD2D3BF3B245DD319FB3EC9B5F143BC08A357E0812C9673DA59255929C6453BD657297F408598EBEE54271EBCBB8AFBFE4C29B58D68B1C729392296781D57900BD10E34DFDDB1777D229404E698BE4448917F0BA7FC7EAC3BFE808580829AD1FD4AF47462BA3F8D16F566EBEDE832EA55727FD1E2630953AB2A47070310E5BA247F95C8CE725914A9C1AF2F22783202F7F06EF5132B8BC9B8FBEBB5E6593ACBD6FEED980CABBDCE4A55A4FAE2DC6A9CDC3DB8A00B858E10513A286409DABD458BD67E092B9D5EF9D1C4AB92D26BB7009654ECFEF8E40F5B950C9AC5BAE4F2FE148D58C48930A472221CFB42F1766A141347610B161F8805D960789489F007FF89DD7A4A8BED81C7672CC64002FF8FC11FA01D186DEECAB747931749494D2ADF615C7932DF5D1D4981417BEC1470B2FDA0EC2BBB58E98B7E2FBA00EC03E882F09B9634309A30DAEB7F0FCD1DF59E3D3FC40B334249B4E67E79A37E02F8A9EBA9FDF82F7A4982FD30B4C47A04DC9537B59AFDD7ACB3B8F4297667DF5FB81911DE3C89C602D55C405F4B0B770986A8EA354BAAA775BBE50CD87B81A12DCEF887A2FE4826D34A2B3A25511BB1DF5C830909CC6B5C0CF66B787E1491C8D1919E467E1EB62C9915F720E34FF62D8DD93B47272739EDCA9C9A8F091DDB2BECAAEA2EE0E8AAE0A3D8CB00CFA619B169946F26381F31B3756036B156123C9456E3FCF474E3DC7F01B5F92B1D78DD4F819EE302A091C49C33C744031984BE10AD308608F4CE9F94579A8F3A63BF8AF06086F13469CC07F601152AB0ED1A5C5B7C18268255BD739A37D7F45274B713CF14A73E3073BFB729F7F8560700C2FC1038A5C9C09462B9F5C3DAED2BA36F7C96EFEC61E88AF441C9DBF6988F7EAF6A6FDF16081108FF2FB53968D4DF27F5A49610D6B4DC64DB23CDFDB37E32D46F352A7B8AC9F9F1532A35788E1547D6FF419C522F5A3E2C80715BE6F7E9D9027D0C6A66FAA65B13167A2BE496502EE95820C746BAA4CC7269D77ABEAC3809B8C73649B64BE2E8EF6BF290B387D5A2D9488EAF39AB42407EB249D1CBADC26AC9BF2DCB8FD228952CAC4D2A4D0025B910D2DBC580914B626AC0700B16E9CE924287D6215778C84FDE38FD2E951A17C556701AA9BFE709A116F43006E35E41B54F1AC45FF4AEE83684688132E0E676361BFA954F2B8A4875E7DAC09F1FA264D6F20FF15A10293F0263771B3BA8D8403050087CF3ABE8B896B19DDA0792F87428D637EB0A87D4F483768166A6B675FFB5B7A8B3332144799640384290CA5CAD6765D66BB1D56F15A4DEB2DE12576E0D502F75EE7294E71B15B46FEB78748EFCD501188BEEFEA8F2AB2DA5CC326E5274913964BB8E874690C35330A114DA11DFA350CBF23A129BC829A9061F35EEAA9D335D86A010D36BE60E5C657334A04079ED2435C48E524D17192A9A045FF1D43F49A6D9C3CF80D6C19A610306D9894771C9705B4D7C359D2A42EC9FACAE43C11D7C6B33D2B8B09FCD3C7FB82B5B90D988A668EBDFDA4F278B93C9E73C2CC675D5DDCD590AD141EF5F8573FD414FC646CA8A6D8D7044BA5E5381B6425F4C095F279B7667E80C3471113AD33064074B3FFE61302163226565C34C1234DCF2D017C17803EF41CDB11B9EAFACE44C8930DA0D7EF79B262CACB6CD14EB0237DD02808FADBE4ECB2E8006160C52BF1DE1CF01CDEF80ABF56000905ED99A377D1FC387C8CB1188DE98CFF11635DCA7638A90873588FA73CBE3B0BA2DAC025417221FA32C2BAB7CAE8506DD4C4733E28319DF7B4318FDEA2E67B5FE9E8A028BCA00F597FFE8FC990A3AB10E795DE3AC624512391A717C5454B1C88A96821AAD205641499C3355D2A4C9B7B85F8C05B1464337B6F7981494295E002951EBFD25173AB977045619EA082975EF5410A05F5199E2AE716546EE4ED8759D269ADFEB5D25E8A78CD45A79BA13AAADB720224632AE0B87BCB41CA6BE9797EF2004236136114E753FC8B294702790B047F148E6240B94BEA43610A67CA156A4397F5B23573A41F38DD052229CAF775514A9BAE2C2B45056A07D70134EA07F6C78CADCDC37F5321E2466602F3EB66C2C990EED413156EF6B47BAF244BA8E93D5EE6FB906B3DD209C3A27362264BA6B21A7DFE9CFB489934E2D9C7564026FAE6846B083D1BE1E97FE8FF18F0B08D16D4BC4822476CBF097D7FEB281245CC579118A09CE838157D04C346A2BB0DADF0F0BE05B874BB30935D531BDC3F771E979B2A0E6010A12F8AF9DADB11E4F31CCBDD4414C3AE57BD4E416EF815481C5E97291D83C57E748E8C7081F1B4E06D1C6A54E1825C9F48609831CC0A40E09BF0580FD6307038368507900 -MD = E181E1D50339C9FAAD9DD984B47A4BC04DB05B677C022EE4531C6E82 -Len = 20192 -Msg = CAD9EF077A98E3F2E5706EBEC4960D5A5B78B57CC8017DB1112F2C537076350C807D5CB1421C235AD2F8ABF7CE905C26B18566D8FD6AF44908269785E789CAAFA1002BEA64ED46B1ABE2A8812FFDF400B18A39B731040A8C703D837E463F29D4218CC4AC0E38945F5C79263D2EA86AE52811724424644EE274C55FB6A050782807F3DF60547BA058465372C8A664E833B5176CED42C40177CD3483E636AE6F0B9C7AAB5DDE5309E5F377AF74314680A72DC1088AFB861E6D564DB6DB6E6D3E66DA3F3D539616408D7B0727CDB924BBA38C3BD5EBB823E7F441D2567FB36D31313C5834154ABE1623723449FA8324C85A149ED1EB8687BE0E8A6C07527BC0D9282651CF36D5596E1E07489131AC3C71B75513AC3ACEE7CF9098D1D5C710D31A80B2A6037B37228810B885160B764223D4B016480CC9835A695DEC0013E9E064C0834B580C254C6F04689D0FF80C6999882CE2AE5B4D8F01CDC5C2728890C7C795B10C5B7E01AD2054E750783D4DAFA677CEF7CA6141B0C5FC6E5FC38B0D1AE088B16A02C31FFE242AFA4264C21D4AADEE3FE6B3F43AFD38FC554BF168C4331A388508ADB66A12B85AF205E6F2A6000C7F222B5E3E326AE9E572956330575A07713EE32F427878A62146810B85483F10363722279AF71290E58FD7DA3C79C8FA0378648423E18F2BC4649E8EBAC7E28AB3F8D1AB64750791FA9158B0C9261B2DA1A8174F5002AAFACA122EB2857851DE26278F594B59646B3B2F6B51A4011DED6188EE52D64311DB7E50DD8197EA0187EF00F0411D501E5D1BE946E31603242757B28F3D05CF1744D62CED24366566DD16A3F8F3DD4D52D7FC891A31E83EE8038DD78AFEA84EC8896958397AA7ABA0056DB3B16A04A2023AF67A1948DCBAD4A0A5376475A320371194919C939F4E63971BCADDC344799AAA151434D2A5C402D02D4CCC29ECB1BC40B297D9BF72AA09CA9DD2CC5268F2C3F49E10FBE4733EE83647B9EFC1F59BB9F7D8E2BDDFCE717CB1AFE7DF9FFE8B4A7BC79371B74F1A038C9C4FB8B7B1EEFD38988BD591DD2817E19E9D6C52B522E90DCD89C70D3EED91B1286C3891D546F4E198BFB385554E882ADE07AAAA4559AD517C5CD7CEA7CC659BEAF8214716ED9D750D382389EE8AB7C3C8AAC48968220027EDE85F939098FD679D97865926F120D8A9A360429CF00A7C1DEF836A9933655ABCB384E9F630B4163F204238E9A38ED949AF36F5204B74DCC45266F89AF90E6DB2C948E7D773D72E653D35C848C77936E6E689F75DD78EC2754E02FBE119C572885BF090B04A4390BC7D5983809E5AC7E4A16F6AD023C8B28E6B01591B0FAB80DFF9E1300DE11BE3168BA2F1691E6CB7C416C3201FAE3F171975BACDFFA520571F518FD8477553BE92539A0ECC5FFC161043139CBFA35673F71949FFBDA64693A032CDE6A34432CC7736F1856B4DAF68D39369327744355AFB6A4E89B82E5BBB1D53B5ECD1EBBCA25F6B51F1B0076C34068676B2B879C13F64D91B277FC82EAD7420F2497B86C9FEB5341AA553C7916EBE6620DE18EBA7F453883A6E8A037C314EC159869132E1856943CA6DA2411830D6AF8354346ACB06578CE89E277E2619596330476EE1B8A1ECD28E201C065BC30ECE1FEEE5E7AE182EFA8D0310EB731C30CA7184D6E9F3C9CF08EF2B2E63CCB369A36AD63207DDE3CCB04DE341B5D093A0A140AA0A8DBE811F03114B235F07499E622EBEC39521FAC671183F0798AC50919D260941415832B1C5686D7C27A7A5D0E6222A991E341C9A8B10A76E01E79B1E7A0C18227A39079D50F5EE94B18B62C51AC36650ED3ADFE142BA5A34A839449599355D4AC9542B146156BE4FC4DBFDD10CB8DD15D0C51AB23AB19C16500F770693C94EF61DF26DA43A09B00D4EB7206E9325CD66780AB47A7E95B50DF423C40767229DF1DD41A808FA70DA64771FB91B5F6F76872759A8CB77FDA87E2F2D7F030B9CDB456005DB9A88D0F27D4796803BD570440FD0B7E99C3D08FD8E603C92098AA4150D5A87C2917CD750BF0077E9D71C43F5BD3DAB919C23E16BB90537E7FE694A847EE843DF4C8262D44C39BCE4D9C49069B213F1074453EC66EA054833FBDB72B81161DBA424390413DBCF96CBD56A35FCE6510DDC2BD9296F7CD2F7474F86FE24CD61C9665CEE251420C0A0D1F56F9FB06C83FFDFCF034A5C27B8C68935C4B2ABD2FB92D570F1FB610B3FF4F66A3110A7A0B89C07191BD5928A39D579191633B96F1123E5535953F0D25D28675F5DDEE31FF2B6E13FF21A2DB1990F4EA8D0AB5D4A73AF9A41D5FF8B1467A11CD297EC416F448C5B0D77DF8D02E6880A7DCA283054BEAF1FB986ACBF838B68A32C6A4DFD097C9FC998FA13E382399677CC947AF6E4CA5B37BDBDE394B89582C04BD05DC7C04038C626C5B72788189FC01799A4CA03A1E65C744F6C4893B19D2749709B23AF92592044224ABA18E1052820250D0C35CF8D76E51C73C94386C6E0F147C770EC379976B574EF2EC6D68C39FF2C287FE5149F71497E1ABF07176B024E408479BB7B56B373367D40A5BD08AA38BCFCCC705531D2984CD386F0F47F0864E00D758EEC1BA0ED0971A0A2A84EEC663F198326AA62F931DAABE381DEA692A7C43425D54ACD99E2FF5B7464F5BB794D2009035CA9FF721B1B4494CD8CC5CCA9957660F29B77DDF173D78AC56B36AAC5E28374C38253B22E16BDB93E4CBDF9F0E854EA1D79983F8F9CF6D25DDAA7648055354A8CEA372BA54EEFCA4CD040D3EADD23B89AB64C545B7462D2D6D2D249A919703BCCBEA471251D36A1A27BF0FD653F5F1D8490586D9568AAB141383B186630A270BC7D2A8A299B4C90BB22FDF08C30B2745DBE6D6AE7DEC9BFD112F5611A83F9DEFF408346DD62F75DE00550F6E56B3F9F9B80D7027A0C7BF6306ACA159972F2AE43346985A4601B481722EABF3786696F9623E1366F93DC585758FE8F245E82211EF984BD31DCC9FC7D7CECD099DAC9E45CBE655DACD687A848F53353D7BC1D68103D4C8C740C91B69517B164F47ED718E52687757A51F086A4DDEF8EA4C858580D6EB8064A044534E277A7DD5975AF13EF5C43066EA26902E7A36DF395F2495ED4311C3736E91450650843A1828FEEB42E6BD5A05D0FE4AF8D7A543463038BCC3D31A589108038DCFFC8C7A3CB86C57CED3A1E3E22357CBACA328EBE1DBD16C1B882FB009A697C1EFEB3EFCA007753DDC51F6E7DA8900B3A37312EBBF41C0A7ECF23C39213FC8A23C2C5EE6D783A1B6520B07FF747A143F6A8DC512209C37ADBED276DE13C5CA27FF7A595545C024B11F5EEFEDCBF61D92EC0A107BD1CA00934618927DA450C940F6DAB1C180B29E72C0E8709627E51E91632C364FE45FBDAE43AB876D33000FB1AB437D499B33250D75A1D23192A55F813859CB693773DDDE616E5570E753128572BC119A46951C86F99B3F931416C0347D95D5A6BE502C3C8F696EE026C3E66E4F0A3847AA49815CF40C902BA79EC7C4E3D82EE140C8C09F73EBAAC0B5CA11723B08793FE17DFF3EFCAC0C576D8F5D9699B741861E6E2E9770A -MD = FD01D342D201AF012AD20CD58630DF4112ECCFE4CF2E872628D9FB80 -Len = 20255 -Msg = 8FAEF3989D14E3219EE954D7A689A550435992F3A4EE9F17710FD8FFF4015F1F12C60927125CEE510660F30228DA9856479612EA692DDA3882F1F77EBD0C615E294A8E2032621ED3A78DEA344E4B176CBB0ACA12548BFC89D9BBE642E0A119818E22992A190B9E1E6F66D804D2AF241523A0AC3126DE48E7F4A0C72F7E988704A526FCA90C5F9B028F6BF34B08EF613DE5AD9EE278BAEA274CC970BB81FF288B40CED980D34117F01D1CB29B5316A5B22644BAA1D1AB425AB782EAC94D32738BBA987DA4F1FE7DCEFCA0E8F11057A296818E8F35C76221E418A0983721A8456F8D6BE71477E2BEBC7BCDB9AF11FC9A64DCABCBCD8FE6EDBB04687D2707C67E914A9A02631809A813D426DB8567A8685C759E7BBC5C5180C38476836B8C110C51599095F2CBF0E4B3B22529D2B383FDEBB5AEF9FE972E58228D1000AC9C971A34B97F58767AE07B92C780D53A7F2D9411C1D1E76E8E7F47615B9C6B548E5028C82E4857350D5F6163A6C4F6C96864A41B221A2F6D23C0338B5231EA493834EFDA4576AFCB491548A84457D52131E98DFB72F0BFB7D9F7BB496C0E64DFE4B9B2D49477EA18EBD7060472A5D6F23E9CF7093CC6A17660DB894C97FADCE97135F5AA66EE30AB42694415A22AB9B4D966BF817A258AA08EBB93A38ED9D8D81E0A4474BF6B053E77CA977E0E3FA55D378D8BC547BE811866D6AF5997F0458DA7B98C6B2B76ADC2C88B15BC79AA6A86C04F837CEDDFD5A51D9FB9F91595F7C1F7F8CAEBF8B94CAB2B1E0D3BE5721AA67FC7005431BD9B274B698DC88C43CC5AA994D5FF9EE25B26AECF673767F8F1044B540C1FB96DA277B8849C1C7DA04326BA67957B33BD8BB281657238235895D011F96BEB5938AE7B8C68456971CAD6823FCBE23F8C4995F821C22914556A7A669E36E88389816581E8D21EE669E0A82DF661D50494236335D7B050B309FAEB7EA5E16D457FE68DD803B400F092E3A4EB7523C399BA1FF293C458A9001ED5DC53608570419D48A9814AF05ED7C2820CAFDC378E80820957659A8244F7A86BD00FB18955B362B02AB27EFB5ECEAB7AFC16185911CB94B5EC1EF2E234DE19BD77FF74AFC2FAB1FE7E140E76720C0446EDAB6DFDB9B3A59BA719EF689343E7E7DE4109553F0F19657389E23BA902B6A69FA81C44E2F8C3DCFAB18A4072EECF7EFF1C3A4FD0E6DC80A727EFA5310795AA1965BCAFCF742F94F77E6047A8703E2D87ED07F86DA69CC4B82FACF07C148714E25C6B764996197B9F6B99626DB74D749C1D630CEF047DCC648693DAA762FDB0DF8DFB98D71A2E4E57362FA7DBF25E3138727121C756C7A65C86E963C47E0206653D9EC3709B427606D519588BCF77325F1684B28A997F5C2CEDE22C3EE87947C742FF26B856CA8EFFE2FDF882FC67FB453B7CDBA9F5F73D9799F1F189292CB75A4457A13C0F9545BE4466F45DE3294B25D2B5A6146146E1A5AC36D0FF62B159F72BAA2CB2EE8FF602779D3757EFF16D76A20B984B194F5687757089B26ABE6D8C4D8F3BFD6B0E41940DD5B2578CF63E9587421FA86E650677CDA8214806971E09F9AA52054992B5FB5E6E53E5B3A7FA5613564DD74A5EB0B3DD02CFDA78DE1DBF9293B69E07855B5D5772640E58F122C513B86F8F59FC6937BC556E4B7568B7D75F409561647CD04C2FD418A61F0DBA913CEA99F1D0F24B9796DF29CFF60DC7CBB850C886E666F4D74D66561F07EF3DBA936E995022480FEDECD2E9F70F52870D3C2FE9DC21669FCFD9CF609C3D9DE371C8D19FF28E3AFB72A570605B60C88B96B0452DC8FB77744F5518782551BD8051FAE94A13F6944E7A45C5058F6C8E3DF6B8F581A71EF9C4F88D86059C216BB545BE8CF09831798C8E4D27935FBD290C072640EEB4B918D433A133D61F3A2A9CEC79E005CBC30466D51772CC520789E7E7056DCD44142B723F1C770144FEECAE2C6B9E4106062D19859894CAD77839A2B36DA56A449A9588A055F6545886921EF5CD4D622BDA7AB07DC23E4EFC0F177288D9DF9F0ACAB79E293AB199E0C64E8A994267D3F71190482C8445F3E4259AF6FC3C1FBBC19E99598C4A6958F8BFDE2AB052C0E003A3FA90D74735A9FAB7AAF2C8034B85E494DE0F5EC7A3319A9736B1B782483CF36F941B9DC174F2A8B02E17B2E6B0567B1975E0C4C787D17B3103FEA2ECBF216FFA50ECACEE589AF72C9F1733C3D884074737061ABCE0BD0AA09BC2ACF584D8FC9F5E28C544EB9952D37F8216223A3A3477967746AC015E9B06CC4D739C7C357D94D5ED773AF5CF340F76F4D6ED2F0E420861CB67A4432E9793F324954C56852C61ED32FF5A53B2F856EB2AE05E9CDD10C82F7AA2D3E6C6E67BE73094C4989FAF61FB9866F7C0B7BCB160A0946B53B226A94863CD8139548F2E6748EEA126B1281A1A09FF76AEDBE1D23454E183D72E9A8ECE84B9113CDA191BF4E5F49D27127F731CE2527F63AC3075933452C5D6B3B37E26F84BC75AD1195CD5C72D85B2622FA5340C3A84113BD569A7FBDAFE5FF363417396A4F95C46774A560EAED413A0647EA241EB8EBF6C9B810D87C4E62A70454C617EB943F5586009E5B93EEFFD3B9C448022FFB5C7272A1E20D855D135217F49C759176407EAE33618056434B08EED5EF46429A02AF0F76C937DEA31DA53144F5F94850B2C3ED3E36E97F2D3B14CC3CE625F0E7A190E3C0C126558A03F7B0DDD14A40B41F42D4616E830653AD77C14638C1BE532A1A9FE5C05C8B64FBC486F2EE6574FE1B31BAF0CEB7AB7087A93428579175A8C7F5290041FD04074A86FC0E90FC7962A2F88947AA8498BCF9D74AE0274E7FA4314AE3FD11A9A1F89F047A8889DE528DA1D58CA19192E304449E02ABC1D1F6B6FEF1B43CC0E508139C8A1C0F6EB5610D6FEF1DCA079AAFDC3AE52AF2C0CC710DDDCFD4934B3B9FDC276F9F997FAAC62E691632B3FECDA0B3E93179F84A1C4C55D704F4AC81E636760FDF6713A93F2904A81F560EB32376BC47542035ADB857A3C4143034D84D98F4FD66C8A3148675969BD3EEA16AF34DD80FE4EC4FBE5FE36641B5CC969F275EE9A76134148A8EA984873D0F5758DAB33D19284582ACF8F979D25A8D2A4C7414D724E99CB3E038C4675976205B53CECC2CC24820C465891164BE74A5B403CD9EF3DCB62FDE49376748E0F54454B8F601ABEE460B9A1A92FE45705D279F6EBCA37FE401D82FC31380F4EE1EB180317D5982B2E157B2C45C89668ACABAA0970CADC1A6E660376924A704380AFCC11FC98E4937A29F9F42C509B9C7F8E1D03EB2F1C48A19BED4557B215B70AAFB12EFE37C6CE63D3BA12A5FCDC498D6E689E930C4FADF3FF0E1640E4A2B7D76E72584B5C52CA18F985FAB4CAEB24D7E8BCB57E6CF1ED4159254648B4074A498D544F83237B17EAAEFEE6EE10F771F309175540C8C5D99ABB91D59CDA4810593788304AF840D6B03269603286CFC01B29483E706B6411820DD2728BC351EC9999E2C17FA2048680D9758006BFA23FE9D1DAD2C86487D078B35592B270809BCEBAAFED66EE87B653706AE7EB56AF96FAF63E09A2C7315F3525A59B65640892 -MD = 3859CF1F5E841A5136F714EF4CD7B4B692421C1B20FBDE715AA49ED0 -Len = 20318 -Msg = C8C4D9AFFFF0466B43FD62BF6CA4293AF0648AFEB18CD4A708BA854A9E2E6F7AE801A8E3E4D2D4AD3ABB45C55436D51EF41D6140A46DCED1DA85EBE071A92D9FF9ACEE9824CBC1F3ED9D87DA366089102F393E362B0EBFE91E1AE36559242858BBA15E377B2C6099ACCB582143593761548149DF0E0076CA36F8D5A8744DE21FB94C24D36DA2067D84B8B072A5203650F8A0B3B80DDAE4AB0F6FE2F675AE3517C016841CAB15DF1E18A295D0CA504897945D019573559D84EC7038682A5073EE35573E9B0E8563B18810673C21961BDC245CBFF89434D83A1B0FF5A82888B0D315928048E21241F6045782D6877C13E3C39A09C840AAAA43FCDE3A5149E3E6377B87B64776CF02E0257E697019C3CB6783DFB4D58C2A81F673F8F55716FC6B306B97245199D9749848642A2E7CE24CDEDA5264741C0D4D2B467AE7AE5A2A3DA47A5C0D5E2562A0176F7C108A1F2951495FB4EDB22874EE00B15AAFCA2F3588F599E79BA072C97D581459087BDEE57C2C14FD6666F8399CADE97DC64A3699A8B30C72761D880C8B81351B390404EF7175B9882122A8F3C65BF9E3C64FA83790E1EB352F6E9BA740B112713807717725E23E82803236291358A8F7ABA0028AD5DC506B44E85B6529FBC3A05C47178FE2FAF085E2AEFFC88007EAA474B855A93378A40A8E304B666DAFC70CFB72A4DD3BD8045B2336B96AA7EF9C87B551EA3B8CDF838037A006E6FDB140C33B6CE1B6F7A4E8E001BD65E1C22BA4FA00B2B7C754AE06B95D3FF7A58A5989B6CB8BD761796758373E1699833A3888F85D1D2968291C131EBEE102994C78C5F0B2260CEA5E28975D7495776951E3F6C75065CEF4FF68293D981649D9BE11F8755545BAFD5844408B1AAEA345AD1D37D9CA5B66BE4381A6D62989FC9036CD58B8B953F8D5C02596803D8A08D8EE0C1D1E62647E36347126C958209E0DE7F97D60BCCDA7B715323CFDA3599A2544739B717168C13DF66935EE8E8B041F53598930850F70F37F246178961F9785B6457ADC2D5D322B7F5BAA255DA15A534DB9B6D6DA7C7A0D8489AC5D4DC2BFF191A4A6D2E3653D226786C41E6F60C853DAFB47AF2E5A5F4D960DB860D1E000BDEBF180192A643320F73A8D90BFC5A59245DBE940899496159D9BFE1D3476E1E65D126EC1F0809F1BABA96BDBAD3B697FA9EE9223300141EF3D2130A2AFDC1007ECC4CAA48527C802D1B0402ADF607B9AA688402B7E02ADFFC55DFC6DEA0BD90E442520CEE1F477FDAFD6C8EA74B9574E834758C1CBC526C24A94011E2583D80F0E04920D8E2B817274A169197FB8CAC773DC6A1458B222DB6DE6545506EC33F46D65CC65528869456EF50898776AFDB4E5C4B1A26FB779A3C7C0EF8F37A739D5A5C44DAABCD1A01C6AF598EB89CE213F86CEF5B32F06B78898F146650F6B730AEB0A8500998876F74CC6B5AA6E073E14CBBC7C9744226DFA42DE21A2B655FA31F446E2E8C40A4DDB5E5B7BD9CF1393834FA65DA813B1281F6664A2710B8E01B2078157A1C1511FCB5319400E08D65A57DA9ED69226B56357A18F51A83F2ADEFE018794282E53726A345DEF115EAC7FBBC867BD11A6DF14ACE1BB043AED7277AB4B2CFB71FA78F5A04D8F5AEF4520D1D6C51E148DF4C9BB58AA854C42A889A664FFE35BC31052590160DFB3AFDDCFBAE247AD491B881C16FD7E256C0B7E9F1E4994DBDA7238ABD72F85FC73A14901CE367BB44CE83849278117C2C1E5033409DCA4C40CFB07151E50BB4F71C0925C748477B3ECB1B3259228AA252FC15D379AB4CD14164EAEA3C3272D3020E83CE2FB8FD135278D2A1D8D580E5ECE476DF131630BE887AC14DC8A62ED230E3CAE48EBE75E624F5F3D0C7F3248E27833A4A836E1434B51491D59109080AD48CACD508AB63B4F3FAAA1D6572A492281DCE7663B9C2D00B42E636705618DDABDBDD068C94ABF7F717621391EC98B63D1A878164965FE350D15E69F89A1E313D101E6E6A1355CCAC8AFF9388DBA06EE4CC6E1A4D31C352E4535A914BB5C8E0480481D7993FB58DB90373E0B3E77A0894DDE49F80857232D987315E4B59233D5F209F5285DA8670E8A47BF0BA5038EA6A24C46C358D4E2E6E593C1D8AC9FF6DA3ACE9E998CF7A121A0F9C5C5AD7B393F471332D64BDA8E85F9998F8349D52068C5F72957D3223B1E79B4C870933E2288D29754F5AAA49A8F1B7016D6E182110A6F49B77DD4AC42FBBB4A238D3AC04868A4566C57A82E2C7647C757C0A263FE595C95DEA18E53F3089AC3078E646A2A34A350FE02C9056E2450F4D517AE21415810CC33D345442CB0CD6942AD4B0DA29D16613FC60118D96BEC6363ADEAF0CE8132707C33BFEEC4CF81181A39CA7F0A7D14736692FD1B305034015860A67CE33A4B4BB7FA42EF45AB8FECBF0C5A65A2C421E76CACB92DBAF2E408C2B80880B360E76AB8594CF99C8C5F719270F82E84E7C79A2A1E1D04C878B53221072878346C33E8ACAB3B60EB6C5E1E8B30EF2E7AEE765BC54A4AF964AD7347533D61A7536E0F49CE958560719C61340277A3EEC21D8BF532FE89097F2EA8951C8CD643819C94FB2B04A63CBEB26BD19FDA60A974757C8441039EBB81908D9445ABBDA7DB310CC757D7F00B419142B9FA24D61004120EC80287826775386192D06A9A54424B22DFCD17511F2F56E5548B7AD35AD648B91B1DA365410D20D157DE6A0418983DFE0CCFA883B1097BF63EA5A629B7E5AB932DE6C26B3F83FE46419964DC923980BE60C09F5A8519B15115F69E779939B28F354647100A7D853D8E607D4A54BEB4ABB26541F419ECEB14A1EC3FCF7B02BB02D492D00AC07A77B5646D4FFE4D15D2E76D03D4AB2C547BE9B9E1E7B90E60A13ABBC559555282B3E494B42A2C4FBACE0A9EAA3306EED582C0EF8A90B52FE60676F4B42C8A2889996FBBDA2B6B1033161C645AF201C5FE999CDD1CC7F2A8FB7D6D307EA41451789491E185C232C053D69E697308A490A53D94D894BB55BAAD7B880333D394A8891D6DE4D3DCA479014668523D5D38590B8CEC0679308E3DABE38F4521A4D1BB2A2E61B0FC2DFE28CF9EB5CB2BE917A0599A45E3037D2EA7B68540EABC5680F2F3398ACA48A42783ED28E619D97F9379A0B876B9A3AA14609D2D0526851C3373F081D155311C293EDF3C88675D13BD9F05C8DCBAE5475A70ACBD79E3C5CA092A13351E6C4B57B504D611D5BCAA3E5FF6D0A43A54B92AB26FBB91D8B4E2D9531BF3F2EFB1DA38FCBF8E17407D43BB20F279F1D360D5D407B2650C06E576712B5D46B0F6A7FF5F0047DEC78EB4B1A5C6CE8D6636E64B65A4C12998891B204FC31B3B6A6E1F41BB6A46A533730B536156CB8BCD9F2275DCC56E7A41C6D06E8B48A46B2DE5281F81EB016CF88FF8A70A790E25D89D639CDA410222DEC04DEE14762BA89ACEBF23FFF41F936E0B63B02837222D483E5C95A9B6E3E2C861341DC22DE9DC2B9B5B5BDC3E00F417874E22F205484083DA56C7EED5EEB03DC76FC1C65D31C5657267777E6748DEA9836F28838F6786D2BD3F25E520B1CAB89BDCD805AA9169324D457C4DB0A667ACD8B21A8439236253826DC034 -MD = BF74A7E87E9ED32F8ABD4E633D83365C77A08559BAD2E5B171C8FEA2 -Len = 20381 -Msg = F86C7B6DE1E27AC7672621EC3B0F29EB026F612A63A61B934111C95D8F445668D64B44BAAE403F7FAA4C380B75B4D9DF9727865F746BCC7D57316524DFA1FD59019751FB92C07195F43C29CC8505AC907535088ECF605A1D9F7A0B17E9303C83EC46665EF307731ECBFA6ACD469EE4442F298BC2FC84BD72CE8CDB17F4B3928A601186CE15D53BEAA5DD9CB0193CA87E4582B3EDCDFFC472F2E1238B8106FC93F349EED03AFDD737DACE6F91535D47E7596B072893DEB7DE4476AC17AED2EF39B0E818967F81A815A73D1408FF63B8DDEBC5C7EB782B88300F2369584BBD75EB5819FCC40DCDF974B3DCC415409E304BC16FE203BD34829F04147FCE58D8B50B4FC96A939240E8E9434208A3C7795D3A15751B5E4117A9E6BC04E40A95056008071FBF03BA72542F15FEFE24E64692C5378BF0A4017D7D82EBC49BA667673FC6C987CD21E772D5F0B9D031A1E15C037CB2F56790A6BD13D166E6A55B086E087E14674A956DEF78F3207604718622F9888907F6CB57841957D9BDB5A2A8EE23C37949335F98815C535B5DC90315304E3E257C5C0F086294E011F8E535A62E8031FC2C094568F393DBE5329ED30EA547D7E8381C20B239CA1EBBD098AA820AB529D49820D6EB5CF3E74570886AE41C3B322533246CA889035F9F6F8D8FB23E14C5E125BB3BD2A8B77A7D2135E207C043C3AC1D2B77EED6FD7B31043E412959F8523CF489F6F92D81462D7FCBD9D498DE4848DC5EF8B2BFC4D1082DEEB03B4C13F3B0CDE2E11313320034FDE8467F9265227B4CA92337FBCB6A3BAD4DEE2C8C16A21678E3EB3377C62FD1C4708DCA1CF4775669A3F1F3A8AC49A0A2C2D12922D392CEDCFD8F97764DD1051B23FA6EE6DA25105E6F902256EEE0406560B14C30CFC1FBA2B5EDC65690318B9FB7800C6CC4118B5EC4C9B064A4DCA059BC4BF96B8B4C1FB7DD5BED07C6CE87FBE77EAE55F995700DF0E6D573524171D659C8CD1D03758F68DADE01FF46D92A01C3CE6D2A778DC72B22C32DA2A19E270AB9E95AD895948721B02AC0E897B0512A1D435249A1E48AE44A4DB19D38796993161CFDC27F6E91D0003A7BDC6803658B50315D5E084A8FB3A49F843BBF764D988E19C5B3FE8F49197602FC2AAFDFC68D6DB9A9C9F0B56BB757CEE39CD47D127F6678F5FB8441565D4B3FA9C3BD27789C1E7D7E76E43B983F8EA50FFC8377667DA056AD227C2EB0E324F34D5A0B85B478F134C464F2419DCF450F7ABC0E99DEA55ECEA3BF9C572B7ABF580C2BB7E41117EC274F0E26B0338DF2076FC00EA4A2D1D1EB2659C0B933E097794BAC3890E2AEACABED7AAB3998CA13452D32941E2B12437D924C98D9325FB8ADF3F66857EDEF2628A27C17C191E9803932F8F9CF95D1D6111FB101900DEFC27FEA08100F408095F780CB57320F6935C48CA6000CE2EF364A59E12927EE49B75937877EAEFEA9E389120CD25614B7A26AEF9193CFC9B2FA83B00B082E8EA3225575C1348F3F3DCF38973F1770A24FA60A5CE78D96E70F3E58BF94D2E2CDD93A8F6E984559425A7CD15C07DD19E3866EE3E063D3BA918620C7E78D190C13E5C9B6ACB9DAC4A5AD06FD7F9E34A12C24D8D791AE6952A7EBB50DB09CB8B79D8295564EB28520452EAAD53186B16F3F4892C703158D558C98922C2245DCB70677935A4FD12083BD8F39981D6FD7B40C9F651F33717175E649297AB845B710E35825FC3AA6C2BA8A0033ADB9EAAABEF4646AC2ED436E946253AC4101EC7FEC26FDA5472FA499D2B9F9CFC1E0C8D1AC17C0131D346AC32E6B1711427A0EBC81CC97A99517D7F8C9B089E3DAEE6F05CA02B2FCF47CF1B6CB4204FA85A35A7B84A73734DC665BA5499B0BCAF7001F3DBD82D8C6F49861377C359F9A12FB9697DCFAD55BF6B65C6FAD5199E7D4565482411B11C1082F45235C96167396E61865674B1F14B5B8C53727B500867462DD71D3AD255DC752EBD1E975A42A4D2E6085FBEE7735DC66CE36C3568CC20D586DFD6A68B4D5C6E61D2B9B896E3D2DCDAB7733E42277644A1EB618A2DDD38FC470D7B2B5864A0B0EDD0054BDB1C91C01C14493B4187D802732D0F99B56DD5AB97E1D4416B38F010E083BF565025609768AE413D5CEDC0F56D630F532862229C97C84215D896A5B2334EFC01320F5FB2DD774E4809CF0EDF1D51BB236E15EAD2FD9DD2B4A679B5806B0C5E87C1881D312A59F208DDC06CFBE860D9ACAFA1591DB94A70EA0664881251D71B3C08F216CA35830C49C6C38B63B88983488E141C218C767E3C21380201807B823BD6A88254311F981CFC1C2F3277418BA6C7B9EE7F035BCF0F243A287FB580A6F9517BF0AE72688A850456D477579CB627FCD772D2CCA4BC28E39946AD4945B9D0BF563A8BF0990007F76CF0A6B230D78D8DC5E463A3490E67CDE2CF949902DDB4ADEE8BF119F96CCCAC264A0CC429425281A4E49F0985FAE97F61002DE401D0D6DB3CE14229E58D3E02EC07C477B4B621F46D89DF9062E23867CB9BA8D40938CAADD0E22749B94ABD23A02AFDAEB6614D7CF877DB5693AB2CB19E5E3BE19E88C29A35734885ACDA96B8B6EF75A55277D72BA66850B33F53707132D0532D23C5E40B6381D334CD335042BFF31521ED30B1CD9E02A73286B0D3B61CEDED8918F3936AE0AAD38FE39AA461974BBBD30AE101F11F54E1D31C3BB6BFD67DA92C579618DA93A5B7524C379FA371E242DB4355298E4ABE8912400820B5B9376D11F3EC90478B17F29265F206DB93FEABC8EB000D4D0FD66E5F827F66129841258AC09278BBBD0CA34013F9AFF91B1808EF056A9E91697E14EE32F15FD067577E18571AFA78908C6CD96D117B02C1D86621B64F1214A3F3AABA3E987678344797AA8FA466EFD6BD8124FC5C9EACE90A6A73626E1ACD97CCBA5B0546AA00DF2ABCE52F0646303ED10DC3AB7F5AFE65E1C14D64707BD5B6B820E43271EDD48DDD000212210FA753F6695DA327F563DD5B49DA4B2F21B7BC30F7B2AC654F7284CEFF7AC4CC46FC63DCCE4112EE0C5DE1A40434F3B5A3B21F2D96D8137E73E3CF2F9646EA56A1A1EC0417B6AF733E099D80F0BF57E005FC817F68D09818233BAFF97684B7C3A2020360A2D1F32208B1D1E5A79E69DF58DDFE303749DEFAC1309ABA3C490683A1E007B9790E4DDC63D52D4DF073EB046B69E61578D252BFD6CF4AD40EA98172697565BB137BD6915C23D47B817C67534506D8D37707B1BF852910CED32F62D5EFB0315859937911472A709A912A60FF7CA6EF5E4E02215DF379F2D3FC3FC5E65403F2B9FC6590706E8F2960493791ADD12E5C9CC83A4DBA6B066C851385632791F448C28D251F9A2142B17F75214E91DF9D6737F1B30224CE05918DFFFD0003733A3046290857003564AD0CFCAB056A4D38C0E3A79A35BF3F4C6BD1EDC065D11E779B737149C2A4AFDB078F8110AF22D73EB3E6F282DF6EB76B44C0A181081E26AC106F2E7900088AC56B9A14E4D664CBBE22A68E2BA41532F996B302EC8716D06AAA82485E0CDE5D63EC42E37729FEC2EBFF06D57416B47C63B99A9957490878250764070E874FAB205CEAF8EE7A43190C13BD5F6CD985A3C8EF748 -MD = 8C7677DC24C99363EF1FDBABACE936607855461FA6281A5AD77B9659 -Len = 20444 -Msg = 18BF532EEE98A76BB6DC700E358EC018E149C50F1847B31F5A333E968E6B1ECE104FD7F16C5DA88EE8C9F1D29278BEE456848810A5E05C24B4C621D72AF99845120CFACF1A13863CC7C549D401137103B5081934FBBE41EB131E84D7015FBCDA742BF8E3A715AEF84A7160D06FEC33BA437F04EE0731D5CF4B8CCAA2A9667685769CC8D7CB7B938513E1B12E44099C90117B4F8A0A8D04811F446698EE021FFC8840411CC8586F5E7A597A339736B7720EB52F02D72F49DA0EC8EE0D667DBE409BB8EC02C03B0CDB546FB29DCC9B7D0804B028DF3337630B00456684EED676570A1135CA200B1D47517FC2C5D07CD5D8C1F6C0157655A1B1F4CF7485837720216969655B9D15BDA0C4A579F34294032BF76A5031714D2E4DED266DA13C9334339ED3E5F914105F09BB6224FAC6B562A8B50FBDB5FEF0B17DE6AEA54D3CC337276DAFFC3ED0C7F3D84AD1FBED74B07CAD42FF509494BC62022107AD30B39A93EEDD7D107A0E77A43E67D6164B0AAF63B60C169D15E59C205D7CA6629940E1F747F191EDBF73F2099378B3C430AB0FDFF290C38413C31F60D1A1DEBC281112B5F7490973CE69B56D840488A1161BDF059EEBD9A6711389D4E56CCDEA8F99C5C4286193841C7085B0887B3015AAB71D8CB5F3A74686964CA5640DCD5C8ED98EDC3B100CFE077E46F6940519AB30BE4AB151EA6FA9B49842DE09E0DAA68F5D339D4B1BB2B0D395073A4AD585B60E8DA4086816BA9FD56D162B0582E51D5521EA7581BEEDF92D41595B810A8577B30077C530345A14048FDE54BAC853D88725035D8340F434EED18CAAAE9CD1760CBE174EE2E20B4E71A78797FFD8CA0C87B731000C8ECAB741FA08A4473296515651F0116F54FA0D4E79896D700C09D555717F0684EE4EC924BFD2EE188B59394DDB49E656D9E530DF83DB74E2282B5FB13188BB95A857FC8CA495288D88220C28A49226E6852AAA1200CCF0EB3FD65A4979E448C0EFE5D641D9D26A795F37C37D107550204446EFDE18B247F08655EB90DE02680C096EF3EBC43C49AAD5832F704C4B8E58ED6D20E4E3E08E424E6437F3B2B3D6B79D6737D165C0917F0DBF611C7791147488B1CFF56D14634F6A841F37C1847F5FC63028B99EF280E75CB2351236F82E1D7AF1040273C1C508ED2CF15F9D8D6788AC8D7159B285B6AEBEA249157A44A28CEEC3E7E13FD1D109267445BD8CAE350ACF3DC5A576F13ECDF4CE6E14283F07D3BE6DA5CE95475912004A8CA5B1139D162AEB7AECCCDC30E3A62131E1A696DA6D7A9C660541CF03C145799FA57E2E2A0186FD2DC3493C02B04CD2E461FB782ABC4BF9A808496006135DE0DAF79BB9BC14474C35B9D1706E29D965B66595CC4B8F656BD90BB3D679438355F728DDAC9C7ED6A1F2F3DCE43C86D0126026D2CDC058029169631116B6AA29160CF9B3FBD0849B994079659063689F2F843C7313B2BB85579F284C0A64E1BFD6A2C1D8BFA7A372FBA4BE7F984EA68162AA3DBD40CAAE945B6EF1E92F333F1FA5703B81BD08FD89D90236CD16342FFF8984EC8DF3E8D973AB9A7DDD8B49C7381C6C1CBAD1917C8AC919D6E111E27D5CD127DA68883B09CA74E84CEC1FD76F95BB1519F743C426E71E7BBCA15250A7595F0AAC07ADA4E6117F4AA0E05C544795E757F46229C16376B9D53632D9813C3B7AA9A792DBF0A604531911A1A8BBA3A5AFF79028471F314FE6728AD62F013D42264D406A274ED51F86EC325E869325335C1E9A61EEFE33FA7A8E5387AC771178E1DF4F5340510E276BB7845C8622CB1D8C4A7D1C9BB3D434D324CBD04B5799BE1D5B76843E885D1DFCCFFE554AB83FEF74C87F19F848F74640DAF4F4316E87401A36E67FE7F80B85BB09E6AEA0E2C7B688D85559FA81B91C92C8F2BD876ED1DA709EC961889BA21F3377033A02A5430BCB92ABCEE37E7B57A822ED092466B080BFD2520F5D98ECF2710ED1768B2F0D1D02622DB18EF25F4F60F8F2740535147663686F0C97454D4BF616CFAA1E2ABA2C2668387C4E774325267A9F3A2D81F9E187FD04B01DA3F20DC91142D8DB8890E961C6E306C1892AA6300839DB7B29783869924A34B44662C17AA53B7C7CE87513030A662F86D298579EBEA52139AAB95C336C43793BFDE316ADE6A0BC0FF4FDBB55FDFCDC20475A4ADB6B4AF0AB9E3E4FB1B4A07713D94E64CE2B1F0FA78D38C31757420645FA271C379974111A680BEBC3C10ABF7A70009883B4AE0AF61849935BC68FF913A33F630513C7AAAED141873F6AE7D1477CF30EF8F67B238A2FBEDDC90C7154F3094B6AB9947C6782E615004160221D826B094B4CB085724FCAC78997EED4342DDE98F9548A8CB16F7AF1FCA6DE6B89096266E2C30A0AE86BD59E8158A0A5EADEC4C21B3A46BD5594286AC51FD02723DA3EB54712316BB41E0AA70CA19BF5C4D8B7C07F9F5B0ABA5D12C0FBDF9775F3AF6620A65F7461A07DE8CEFFE817A34CFCC4E8580E4F349FF022DDE27885E8B078DEB90E261FE9832179E6FBFC844E6630D74D838768AFD676A66C785AD8C07183F5A1B33D5CFCE1479E0FDDB7FDDBBCD5008E0C054E1EC86C4073707252C0543C7ADE70E5596AEC144AB3E07D25E0D1F467C43AF25C61545F503A77E7D3AAEC6D1E232CD0D4FA14CB954C54076D359AA041A0000BE9E15A8A2241341F528843566230F77ECA486A224EEE5E2DC2C68FD35D4A3CCB55A1F5416B23B9340701D62664BEB6B23EB9A368D050DF464EC704D407DA6DE4474AC9C01EBC4503A880D9B2B048F5F6C561582348A047F079BB3C0A1BBD3E7C484D5EABC0056F849D6AA1A9C051DBF0D7C264D01659F3E57CE18400A2413BEF874DABE9FBB2AD63047C92566419F08063F946D110E64681AC0BF8BE47DCCABA3708CFACDF0B739BE94BE478EB6E9A0E70BD5F35155259B27B3EC4E7C2CF0BE41F21E61A61FB1FD3E2D2EFCD32409422EC7E83BE008DFCA0A639C52393FFDB83D5033FF20D2036B4D0517DC3CE627516C29C538B2772CF65A198C24F1201ED903902AF15D4A796C05152D12A6DC041E79A150BD9E0952A77F88B13C90B0AE955235A91B5021671BB898232953BD74B2D7645CE4074B3731EF5AEF2D5E4F31EB5D0642F1FE59AD0B5D88BE90B3B76F484B341F76B315D0EB2D991F49E711E2A59709E6FCB042E8F48A4F43FD4BDE7CCCD20A97FF119884D2AEF9F0878916B3FEFF41A1D0EFA901E15E2225AE6E92E1F48C1DBCDDD357444F4B771B1E99AA3F138853A7A73208F9E7288CD0F9B19D6190021F3075BAD06AA43BAD53979F65377ABD1029FC17D9561E29A783C0215A24AE5B3416872D727CF313302671BFCF0F692D31AAC73AE5B8C89133EFA2DE4C29DE674FC737B19872A0CED674A501FBB8EB52916E4557767D6E7B803826E96B626262D8FF1BA6C88E0B138B121E57A48A56BA8FB10433AEFF946E99936DA8555007B74F6834D4B73044947E038146145622195D2C65A4151AD0FD2B935AAC0EF3E3D621707CA7909EE733E443E6BD6781F6F72F28545A1024C1FE769B0CC602BF13B1B0ACA03B5F39DE161D176CD8BE0873B05FCAF1D18AF900DA2D4E46D38A315A54D1BD819EABBFB3B36E0 -MD = 676356D1DA1520721F8FE9B5EDA325E0E74FCA8B7FE562530544103D -Len = 20507 -Msg = 8695C1321D8DB811EB05C6F94B41C78C713727088D20770D8968D8FD5ECA45EB49FE1CE493B51635105D1CA5055B2C3D5A95A3846D544BF239CD9040D7AF47609F8F383458693010D3B04AA093B8529568A33A86089E7F0C4A7A023FE8F0D4D0BD898B1E118B71462F23C29DA5F5FB3BF034EBAEE35C89F38155F7FB864DC156791C69B05A7803A7A9141917546D5707D3BDE79510A7C1EFE0920A196CCF5B90CED69E448EE5DC52181C5CF75BF0B99ACAAAD8D7D1B8677B8047F75E63BF940E56E856D97D9FD2F22084A1AD8F8160AB20DA854D8F88D1A69CC1DD1EB6D9039931C4EF8637B7EAE1D21E5A57C26C23CBCF05CBF998022C5F96E10CDFA375DEB950121A3BD0E871301962C0A0E5D83EBEBD7D8B3DBE10A5A98A1C21A1C40AA2E112F4C471F64AB51102916956FD5148C32BE9845FA05B524DEAE329EBAFA97C2B34491AFF6036B3C7B2ED0ADDCE526A9B0BDE4D2F5A85ED3ECC606DA622F0DD5E39EBAC888FD39C0352F26AA02AB090DBB22B80818981989335A60DC8CE9526A9ADD6C7B03444146F3EBCEE954FD38946E079816055F4DCE64C1D90DA9658024152297367A4D427E008CF8FBBA731A13319D659AFA55208C4184B33595FFE8CC6B65947B6088E45EF09E51B09930CCC6878E16299693C430CB663429C72C72A9D91F599A5744DC84DA798F290018C3649477F14CE7B12ACE91187878CEF4871C7D6DE0BBEC141116F21E55D1C4DA599E68D4643E3369E08DD0047ADDE3E0E27FD980B563EF5922D4EDC73C211765E153D45C09BE89248DE73BA4858107A6DB7DFA07AC2DA8DD0AAC8D0767C18EC5AD3543950501A7F77E67665376DA64D8E0010CE663D548CDBC8FC6DB87D01329171C917D5D96DD7F6D801186D1558D7AC5C46EECE1600913877E1674A1E6DC6A6124872E561573D10583C47C6621B7CD05A83427B951AF3BB25D1A8F542A45E3D950D22F8B37D85E159726CEDC68643CBC035C2454581392E623DC86DA132246387E4F69A7B0F90310C49BADB47565AA6E031BE09F04390CB1701004FF2DB5947416B06CEF41C799391BAE6EA1597E3BDF9DB3D4213CAA39055FF206BE8D5A137A69BB9831D1C5A6AC2A353B120FADC72B67DA41E3D710166B6AE88F32628D1BE37EDC3ABC9471B776C1ABBDCBCB0D5FAC37313759EC1657EA6459E315C9C7F35F692ABF7AAAA6D3A413CA409833C1079E6CA44C8D8769E64D6BD473299544AE24368056B04264F9E11FA23AB6DCBD88DEA9AB42A7A05D3E8E104ADDFAD2F5EE4FDBDCD98E28475EAC1A0FBE31045510E849D7295FD762FC89B4DF447DEA80F15153D635CCE75066C655F1A776AD7CA0148ED0218D1F45EE2CC44A7324CC6CDF65D17D3A9DEA947C0FD205C5165A372D262A14BA33BF6FCD08CDB96285CC2EAF4414896A4CF6F74732750C9AEA33754EF50920F4FEAB50F519E980B9BFCC2DA2B5E119D98C9EAEAB00F4EE892D3A6911EF925280DD6B778C546D2501DF58C3F136527327E8CC13B061D591C41B92F26280EB0373CC66B266564173B4D926D8860B4A9072F75B5979FD9D64B40F558A3C3828B287293E7A45873190F0E1A606DD0EEE70B09B700165270F17A30FDD445B997A344F76D6FBA44025F66B6F1731FD7F6FBFAE3A93F3A6521312EF28DA8439F17A15B7CE250771F5DDBE69DFA53CDBB89B78C52D9DD58856AEDE9F80D80B896D8C6C8033109FB1960BDECC363009C455378C3904A926FEBA3D2DA0A5C4FD9B64CD09FF2923694B9EEAF74C2F9625323A27E2B60E5CFCA77DD0FB9883730B1F9636A3ABEA5FB1B3CC56DA22F48D8F2E184151344FB80E2546CAC6213EEA930D249F2393FE474FC65452D54E5BC9C5F73538BCB3B4A183AC3BA9FCABCFC47457169EB944B442DAAD18D93BE15CA55550202FC60F2C57A919806E4B0B6B34C85C353A6005969BB06F26F44F357435D91B074D0D26EDE081B6C4A4499BD0C7AE193B528CA934017B35DEC78F4DF7D399EFA01366817E70A247FA74A46A61924F04B03143528FDC77B66040CC3A320B48877931B04FD539C347D4846C65E88C6EABA6EA3A665FF9E10E8CEE33F3ADE6E07F8E631E4D47DFD484CF9E78A004BE76BED84F3B3E89F03E2BF37282BCD701A3C426C3433B3073355EFC54368905E69827A4BB52347180BDEB601BB071E8914C81BBEC194EFBFC7D302DBD2E625E322C418CF7BD017F252DC72208C71DB4BF4019BA533E9ED20A99F36671F3CEAAED20C85C896FC199A2112CFF0D72730045701143F1F2BEFDB3E9D73DCE4DE1A586F427E592C94D46C5B34D4A23D8B048791C6E786C633DA48D38F7586763E95AA25E19C160245CF422618074092E9B437DBE2A36D1A40F569A522E32AC861C43D8056835039DDC9DF07C2C394B267FE10F90B9927661089545B01F89D718E80D6D5C1025F6961A03A57D9E2793D1FFAEA4AA0E1C438DA6D65DDBAFC18DBF1C9ABBEB68B2C1E3C6E82F360AE95CD3A7A8B4553466D90D56A643C67394067FBAB4D1B95B0D22FD34E255D17EDCD51FD2A59812936906032824A1473B648D8C59E6FA151A687A94EBACD3381446FE40A963CE61A7A59E22C3D0E2662FAA1D36C4755DA463830BD00A17EBBCD7341109310F82B2159FBB8D6A177BD3B12D158FAC4875E4EF6B73379D607006BBF3399708CD0BE0158DB085EA52A68039E30F6DE66C0B149F87F465A3EE268A0EFC13D4F2B26FA2C818C621A5E525322E55FF29A69DD6CB5E727D35EF69A1E5205DE25131E30E5B6CAF64F23D371ECA7BDAF70422F9D64B7085DB2416A29B0F22511B8E9AC4E623371BD617B7543789D942D0B9225336BD1A2CD0D749D46E8FB604F058B9E1E800D8D3C1AF8FAD8B15921CA9C80C705DC60616976E61746B5BA468BA831319146C5786EF6574C410B463F6791EE662E1D37CFA844C40017C0945B62514E761209BA7294C961B6FCE3BE0D1C5A7D6A8F3A303A284C5A04B420C27BDF0CAD64994479F06381397AC2A4A5BAC52D3CB1DB437A63E05B880357F7BE71563BA21FF15FF756B053AC8AEE56567AB2478E7D959AC08A20C815C8304453FE1566139EAA0B65318E684012BCC63DE3AFE16260F8F0B2AFE05BF6B0920991DF2C9AA592784A68421F0FF2382DB2987E441417588DDE7020BD0D45084F7517A20A357A5FB8DB576B07ED3272DCF4BEFBF01EEF997D5E3E0E4A0601103E485E33D34A4A472FF47BB23DFD53F72F81E9F31803FB23F940BC25A19EE4E5739A896193BBD819CBC0FD4711E67E2AAB5ECEFD8979DFE9DEEF8C4E7EE0C48597E5470B199C7BBBA41F2733F0B319AA86D4E8033D7365F87D2924B90C84C6BFB68F77E1A45E98D740261639E652B98D6128D682402289C4A866C75524CA7F2083980B9B6A32148D585D753F4C9158F4C43D849FBCB3DAB2D0C035CAD6CB2D2B015EF3BC47D9A2E47E8781D2E5DDE1FB94EFC6D6B4571013907CC785FBF1FA79A74FEB10925A46C4BED46A394350132F16751BF58DE353CD7AA0E831CDC067846CB39EA860C6A0592DC33FE6C252647DC6FFA0DC61358F03E648AC0513FC636387FEA47534AF8CB9E63D9B4F3A4B865BA49D71DA81C84DF0E945601E4DC7E5AF3B80 -MD = F72CD7D328FBC442266EC629298A56578EE6501679F18418AC56F49B -Len = 20570 -Msg = A86E0ABA8C2A387296B1ACA6A14CE872BE3E4F3B7CC5E4B9970FF495AD51D8790334B2702E8E84F19A07B4A1311EE77FC6FA485DC311465F5BC3655DA878EFF892372CCA61022C6FCD8FCFBBAB308A38341F7A29019D7CB0D34B94C0B6597302F2E9FE9E087C9BC34713787B2649E8998B16AF9A5A05ED685BA15314CD1F3AA6B837146A348E8F26461B9465E809BEE04EBED5CCFE5000AA5BAD8DF817E0A639B1A6ED10D54932291212DC93A3DABC237B91062647774EE9EA3A8667AD62F6ED140DE1F61A8A32BD06791BC27126DE8F5FC32D97EB9E18DFA9D98258EFFD1C48475F13009C33A0A30F6BF5E947806B76D0D049B72B28F1CBA82C45E9BC95CFF287BA6E4D7DCCBFDAA160ACD4445540EBB0F0CF7A54ECA762C1A60B02702A9C7C1BBD0A7B9912FD9F274A93AEA95EECE16406B13B3447E144D50BB0C9238A0570D277BAB6146C38C37369130BB25C1244308585F0F2BD81B2A5297E56E88A958BFB5DECEFEB14CB0616AD336EC802705F61AE59DEC7DF51FA016365CD9ADC2AEAC2C5A489DB438FF9B98AD830CC63516C81DB76A2CFD4B7B199338F6689843D94DB3A1C2D93F6A39FEEF2F4E5FA034E31CE0971D2FDBE4AFED4C55C78A6912FFBAA2FBFB515D464544FD7695244283CE9A985C2A3304FC72F6DB554CF1D8EF0E48BD4F59DE7084764825007C8ECFED4AED8E28DF15583A4902CE89B2B0A5584D859AF9467814E7A8C4FE1CB76466D7E096C273C4593BEEC8D2902E514B5B8735BDD60C84FCA29596346B27AB67BE6E0BAE2501FAE53D10B037FF2941FA3F52E62F9043958BBD7D67649DC1886992F0B034724E5334D75FC788CE1EE3523CF48BCF5186C8D2603BADBA118144B09D25AEDBCB06B01550219DAA034BCAC230C6D9907A81C2DD41FEB91FCA3DECF6E2667062503B7F89D9CE9733D8E322AED1BD1910F3BE7DABC4BA01DD4B6AA9F9CA29709EC99605ED10300EB9EED8E728F69F12CFF451063FFAA2D5EFBFBF1A30474FCC3FDC1BDFFDC272F64BCBCE17E3AAB508A86FB2B65FEAC600F4A66730676089F1F8BCA5E35FE1001197373A75F8BAEE1E396D29727D1AF9B8BE30DD1A5262D3E74612612C83BD6EE3278AC16DF783D749109047540336D0C46F3E26EC02BA65D9AD47C6C3315111FDBF730EF14E9A7AEC88BD79E7381D1609B31D0ECDB7E92C0336190C67CBE603FB24E8513FCBF6B9F64BFADD74F71627E2B9B8124E5E44C0C40D66B6DA863F1C438753E3232A65CCC18CC3EA7B80ADDC089CC7B622AF6DCAACE16C84A8E910A48AC2F1AFEF9554CE8FC14C7BAE4E7C959015554E9D8C989B76CD00D49287575B8F218A689CAAB05F536627C86F29D0495B651FBBA34290278563D99E58DB3982FF57EBCC2B47EAAA7B1CA94398B168ADFD8B8083F9292DC846CB43EE1A790F4BFBA42B47E3A2F8BED7A810B7D8DEA09B77DA6EC6652B12849FFF7FE01D72C81A917E6418CF07FEAC585AA48E817554790660AFBB2F89D53B2A704D3D3F0350814ABC42EF77C0BC8D97085FC3FB641831CFAB984C3BF5157B3E012208A4B9316DEA767A2E396CB1BA2654B1C364B1BE0E113C104319A031C1627BB1A57B317F967CD668B1EE21AEFEB1FE9EAB7AEC003661B05105ADAB693F520A014B31C7AEEAF573F2B74A9563186CE62206317FB655B4D0D8D0E1455CBE73E4516D5F03D481192A78B510DE471409017F7A077AE4F8E0A356F0D49C12AED8D3BFEDBF48F3BEE9EA5E5257383ACDD52D74AE0317C9A6E37A3C09284BD219AC5565012716042DFE8254B47C14F189419891EFFCC05EAD6C24261F6B9FC0B10F04AC508F0627B208BFAB7EB268D7EBCD7FD6D727BCA7232A5B6FA920068C1539BBF063584897B0325054A6D8D2CFFEC8E22F00925382E89F09263F6AF1038492DB40A6C782D259C8060256AC93D6B5D8CD9F740A5F6C8490F1FC82D68311D464AA77942718CCEDE1395C8E67A9B8DFA1F21912F0399B839CD1D8327BCAF9E7CD5E26E140B8E3E93BF0B30DBF4CE7E9E88F7ACA1145F1DA2F78FECE594EA756643D4202E8BA4F5A4C334DC755934BFF993913B9414B92046A9CB3E5DEF35B20F23DAEB906BFB4CFED5B50A2C3B3A405699EDF83A0157EFF01A28C3BE58B25AF7B13694455518E0A03060A7BD7E1E3E54BCA248E02BB138D11316906B89D57D458E7BCDDB5EA07BA9B2E87C0B9020F93FA86A17D414790EE09F71C2E02830FD653A112AA68BB4EA372285C400D5941969990038183CB519E850080D205830AEB24FE187F451A59FCC3A93099CB5429437B3D05242DD0C2C6CB0FF0FD31B2585CB135055FF33F34633CB4781CACC3921F028ABB0606298BE1DCB62DADA5BCF0DE8E9143D6674D6064A2E20C9D9DE4DCEF010A49BE2638FDFBDB91CEE3B21B635C326B451680291C98684AAEE9178C2FEEB9868F45A522DF982B54767FB4543A0BE3EB78C8D0D7F3E9BBFA80C4A68F66A08E2855B9A6FE867CF213427A11BAA6D4064B3ADC802D46E9F93CBCA1C959CCC99ABE489B91C0CCE61BE95895BB2D9C61BF73D0A853A7B74B8CAA8B9570C76EDDAA05EBDFC6B62785023EFEB2FD548D8C00C4D796FF89C0DBEFDA5CEE7E556C87894453EE0654C8DFD40E8A4710CBB21AA6D54C8C74FFDB44A2D239199E3F9BF2807C8DCE3145DE81FB406F4DA94539A7C929DF0B20DA7A16636D10ACB1C0337CA9DC2F10BAE899991CA0ABE9FCC6B309480D41662570B59C9755E6407CB5D423C87DBE93F89C1451BCDB126C3E78EFB00F781069ECFE3577010813EC58557E1F426E909C4A9EB40BC8F38DDBF1E7F73C6BF9E69093C3BF942085E4A55D916AFE838519C1A50C74FFEF90BA916F028634D278A513FEA524C7F70AC9B864723A30E07262B018A083F2D3D65841A6F4F998CB41E368F89AD69519C75359E0217C6F3D6CA63233961A697C8F019F09057D14D0AC2763631CDB51546B007847210301FC4129AA1E35E81E8B73FEBA046AFDADBB0B9CDD62423C8ACED397BC23CE6CD00EE24168A85DE4CA29C87BDA88EB0F0BBA5693387D3743316458F2391501483AD3D2E75FF8767D47F95408402615358E8A16662800C7DE64BC175ECE878227A0A4791496A6976C1A9892B3FF1223E9840FAFD67734B3FF1E5ADC6B7E52041D77BD59F678119BA83590E8768CB92C6F70F4CC2BEA8A8DF65F9FEA9DB6D5359A484599231039205496E163757215DCB37DFFE472FF99BD7A8E2E79EED58B589165A23D9DBFAC621B9E63D336CA77309D5DE0482C0F3755B0668EC0C814D94DE65836F011CE5B57BADFEA1F17792A589C95106C94C67B08B4333A95D862773DBBA6CD70B8B4258957FBA16D8344BA8334C061F431026C200AD57CCEFB7B39F4D3C0F92C30E353A3E364CC4EF5068DB4F8422D54844EB09E5182E0977C8F6F2799604B7124FBE877E00307418CA277B3E95F91C322D9285FAFCF356AA3E960456349F00BBB5BDC73CACA5799308F37F5E8C5E5E96E3DC49BB9C456B53002F0689194D466DFD9032D869B518DE6DAC21CE3FA64AE271352D40F18415B8D8EF69C9C2AC22F6300223256547FA8BD78152A595B526DDC216170EBF17F1023BAA770EBD944F5A2979A6FAD7AFF89880CF00 -MD = CED35A5CBBF3EFEB460171C2B6A19B82CE31B48D614241DEED9D3070 -Len = 20633 -Msg = 0740A4597BC9E88B3579BA1D01441A9B1A1620F0EF2103DFB59FCD16D4B50B14422779153C10B5A95EAC7EFB6EAC4BDA321E15CBC46ADE88C2D18B53C67778C0037ED2A2EF8DD24AF823BBBB1F28EA701DB7CD9C79A2797B5DC2DBC0168114EB48C5E186D8C13482AD8D86F8D53DADDC36899A277105C1C295055FD9CA96F2CB98C490AA0FEC6434D8CBE85291EF2DE60B43415409C5B5A3FEACD6CD2A004DA84872F3F8F869283EA78E6C84A77FFBFD373157C3C5537BE07519C410CC0B5E988F17BB90D2380A18D72D19080EDC809360B8F47E97BEA0701747B58CA23DE73FDF22E9933226A2231B3EBBF03CE812D7E5F4EF67B662328F355254E7FC4415C3258042891420BB57A95230E028C0065D390DD3274713811664942D95CF54B7B80B6686A7E76AB2D63BE5AE9144C792EBA73B28EB7FB85491FCA74CD58918E9A579AC6E006060C9986E1C5CE6B5602764C04240924AC2451A12B013208EB3D8AD7868E07B17AE613278FCED3FF491787C63D350A2DBD561479B189DFA09A705B6A64FFE601750E52BF0890A6EE05ECC00D8194303F04D5342E80164DAEA03760F752CF8C1D653E249D97D0A2E4C3987A41F0853EBE94F10F03383065BED54B58FAADD92E673D0A4324E03C106E24F87C7B8914E630282AC37980CF03AF2CE790B87C6E80F9A365C25A6F6857AFEC11ACB36A1542678F6B24788B916A9B81C663F0EBBE98E7C89CE98955626F1A76583CBBFD3E7A3E160D0A9431E5D50312381E744823CADAFECB72159F48977825188BCAEC9C3FEB9CF03E5AB49AE0066EFA41F2833B94CA4559975ED6B51870523A7B6B7CDF3F58A988D0CE3BB27B7B79499D368825BA5D5AFEEF012A1977404213B0C5D67C4B75B5BFDE64CF374C50075D132A7D5907A7A07C21A934D1FE386CD79FAB177197384E5628E9F1076F46477D4242DB97095D435E6B572B61C687768EE284578577C13A8C3523E5C77903A6E8E4CAADC80718A2F6B5520EB9FCC65E10DE5120B2CC227D7AFEE58185C3450DC0B553862E98AC5FE371BCCCEE45CA9CAB940BF75382A98B4DFB8B516A0B21DFE8F927F5F85A3292D826F92AD5450EEBF746D878953A164387EABFE5C4C499E06B2A24FC75FFDFB1500A619811663E5404599E2DBC24082802241EA2F9514DCDF27A573376899B5260E5CDD111D1BFEAA4DBF49C62FBE249CD0719F851F8F1CE44D3EAFB7F7D79835A5610D0D865AF0C959F61120392B717B5C0805B6FB38D3BD2FA91CE013B6278A799A9EDD070AF64A330AA762769401229822D147115A36E2B3297A0E69606ECEA3444036EDE163C5A069A2689DEF134D246B1F1AC33141910007A7DB948F70E1C4CCDAB1BCC2EACDD67DA4402203978DEEA97FCA8ECC469EC36959B10393651DC243378B77C73428F51FCA4ACB9627AE4C325A12089C08D1C77569C3188695985AB48E19187DE530B4B15FA8A120F9E0363C78A07EA0F765F3960764CEF35482FB90403E6C9BEAD4600445AFB487844CF5B5D7A1A93013B935B1F085C3D8ED82CACCA6F2E68B6D83FC46470A1DC4F5679ED9A7A3DB7B4E9C6DEACE8D3E26B9CAE92A9A84278E297BE6FA99E323AD994FE91AA0505398C6977E256D0686B4513382016A3BD9118A112D7B36D0D247CF7A0E1D5BA6623F53895512CCB9E651513F25D471080D5BF3B627A0212370E09B35DF90363D1C8C45BE00207C91453B4F9491DEF8653CB1993CB744B88F1B23658803729003756BFA3CF1A3F7A29C7CC011581FF3B6B1D6BA48C479C4A4168AA3F6D3CF5F28493780E668465B7A16D21F91C10B1382E983F292C14C3A89A319FF5FFA4052B36F9ADF00F567F5819BD5A3D5F1ACCB6C888AFB28B2F6B3300D62CD41BBD0A409AEE4BEEB9AEBF6C114A085881150C78AD10B9EFE14FE372FB522A10045EE0CD11309D243E99B77732B8FDEBC1A51BD1DF696B59ADCCAA9184CE575D2F473D2A6A0E0588D2D0F5BE3EED75644FD82D7126E0A28412067E40EEB99864CE1475EE66817E9F8BBC3E6B9DB15DD8A14AFC3B76D449392A6B74A7CB1D67FE0C87802C2BAB5D3AF7AFAF2DC3C6F597BDD054ACE2BFA623A05C0814D765412F62FA98ED9A86AF55503188123BA6B8420C54B29954B7740F327309507C280DC78F35290D235915B4D16C131654EF4B857B9AD7FD622C0DE68410E0945E92E59E5E697BAE8EE99F411A21FC009A58C70D979FC65D81C88DEED9DF3EF050A944B83CF51D2966B188BC567D37837E644B5EAE12CCC01FBFAA2985CE723C55C38819BDBC8E4357590D32517FAEA02902D31B4F1BF0A199CCF36327397E2D7B171138119B60C606E8187DB5045700C2723CEF3F87B816E243D4137C9FE238490A02BC3B56B056974ACF95644C0E77E488768FE80DBD06BE841374BD2CE954532D4B300D8AB297BCCDE4A72D5D7AA9785C1F16C789FF4582232E49D8A8C021323461D8ACD89962E7589D9CE00CF7897BA9A547F0E89977D0A31066FA743105413D4E1F5AEAF2EE88D2D96FDF7BD3A90222D563C24727D93978658EE9C6CE6D3C3995D167220F2E9695041812F39D84948A6A670AC08D8B2660CE655EC1D200904DB5E74568803C7928FC667180EECB839A2A4E1E15362CACFC0273ABA0E7D7DA1F8CF3F0668C5E097B7AD839F7E7EE27F654C5DCC3E2C10C252EAE362DAB6B8B260CE166122F215C2F7EA812A7DAE55387A4AD722A8B42F61DFBEF36882FADD0794932EB02A76416DFD98E916E8496F83A284E0EA3AE5EF08F0BE08AA6A053E80BD1C936D9093340786ECA0584F00ED20A5C180DB531DE2D000C7E68CB94C63A30EC53695D1F6C18F93F391539317929748532E445377EE38CEDFC4EDCB99050E31785DFDB4104A68AD46EA4A7E64163589B2F0AC7D838FF4652F19A90AA57DD4CA1FA42FCCAD5C03837F0AD025DF6E006B7ABC57978588A7BB411268A5E6239D8234BC4A8AFE8EA3512F075E2177B411050FC1BD5A2AD6BCE5E2549D77B7ECE2ACBD8B47E07432CE33F100EBB2139793E8AB38E07E03C1B6AA901733C13D42AB4BF9B267ADA0842B1192AA7AB1EAAE8AE99FE0C5D7ED0D1DF1B35E4E1F0CCA73B13E05049E4F1C9FFD037741DF424863E02BE41D2ACED32286729B6E27494CC64B2BCB3245B4F4D21C54CF394676F967C362D105BC5A56A7178A5EFE7DD2B2A308D36277EE1C48AD7806FAB937B1ECD9F401023B12BF64E78FCAFA4A51E48A7A52AEE2233937794C2D467A3779CB883501D5B39DCFF2E2A06AA5A8D815329F0325216D08359B0A0AFB3DC4BE599EAF0477010B02997313FA1AE83CAF9CAE985CD40C345E8A29C22AD20871BFAB5A4B7D8A041BA8B1CBEC74CDEF0EC46D5A6EC1E563B0C23AF7000640C1E3B43757761A60A572689C4BBEDD897A6F259B4C751EEC1701AA2D03AF104E3255C2A7D885580F3DFCE02421423D49F5A15EABD7205269E72AD74B630AE1258798C82EF50E3CEA89C837F4DC76DA603386FB4C57D2B5FC5E5AB279BB4437177C27AF58DC64F9E312DEA9A930D2618487106BA0180E2892C99B6E25524654547CC51D790588D6FDCAE6164F249DB3A79BFBE3482D61EA2A3F8D3975678C178F97BBE1CC74406B920BB4D2DC217BB48A2D092A1053D45380 -MD = 5CE88F6748474673B835F0AF0C9D9D6AD1F72DEA823F68FA9C6B95E8 -Len = 20696 -Msg = 192632FDDE8F5D5C75B31A51A941B69D80E5B6A5A05FCBEBD9B8BE912EBEDE8935CD45C63AAACB845E8433C6C3A2B4A2A0822001018611CE54E8B1045D0D4AB45FE08714754FC6B8C71004335F3615534EFA0C19EEB06DEA3612DAE67F40D2EE6AFDFB119E1D87F234F380B8D7E2F44F5CF28FAE6998EC8DD6381033AD3709EAEAD1EBC3A51A3BB534DDFC1697BC49D9D9F0C2E06EDAC9B66C492500BD80C25C383C2BCC082EB6E6DA4F1C2C4149CD3BF84957B83612B3351D270754090502044E2E81D8236412A6905F96528CB0C43760C32809527A85729A3C3B151F0EDF53730368B6E844E1E09524CDA222E7284DDCF37E01E4B6AE1FB422907136434406059E69C8DB71A43C507C72567E66D5ED6F17AB757CC1F5BD57F246A308E5A93510AD80A565751274FFAA4679B131343223EEFACAEBDB523BD3ED313AA20899FF15CCA0E708F3622054981BB567000191807ED9DC2FFEB7928DF868DF13A4CDFB8E909FDE7867999DA248E5BDD361B3C1022CFC46FDE1DFEC94E96D609723E3C7F4D23A8C477B319650C997EE7A206088A5CB959D8B2799CA597B1193E43A75672395B8C205E3CA177DF6976E9F87853A189F33F766A452F111E99A3FB26BC1E3E5786990633F9C8695188BC3F8C8545172FC64E4A9896537B44F13D63E5620C3129EC95CD94D4E267CA7FAD4F42334E3A657C742E7EE75699B81856B1DE33D4F2BD8402286DCD8AFD5985DD38DDA6C853EA73B83829B6071AF5A69778D8FA0A5A0000DF4FACD723C6C9C9F50D612146DC229F071DEED3258E4EF0AA37693A7C2DCE6152469974694005E8D82CF0CA0F9F03436967CED5CA8278F065C9B5241D2D81ADC1AEDBDEF5AF4495A797975635C71180B6B3F802BE08F2AB4EC7BE3D159DF01D10B33E5F766CC3C9E2637E6AA39F46FDCECC37DC04B45B81C6E113BAD692A037EC392B075C05A7B6172BE9CF0D154CCE3CA84F5D78E9580BC31BF9E43FB6C10C6D8A7917C2028CB89F08D205E33A9D5A39A0EF1E61990DCBB64C06361FFE9B161A595BE165F333A2E148522D02EAB28AFCE3782403FBFD88C14E53CB09EC3F0A0F5038C0973590647958C64E34690CE0FF13396AA45329795D50901C5E984E289E2FC7E91C40DF0D44422700202AB3BDE481FCECC3DE99DF9609111C3F57A8FC39312C52AB761CA376F3ECFC7A9514192E98F7C89F43FA795931CF0970142D407CFDD8A4A5F27DB8F6E1DE352DA5820AB4A88F8AC4B5C199E6E46FD3777D068FD97C5669031D58A83129BC095BFFCF05F831DA8114B1898BF7649CDF5465923F13B82098D6B033808D2BEA2C3037E9EF25EBAAAF058AB69E6FA69D663A5070BEABC933F5D12A1346B1B7CDF46E1638CE163060F185D5BD88AB73704DA4F3854CDD3156A7F938441B13C616E6AD180D9B770A6A7A4AC6FA3798ACEBD24C8E0D3458F5A82791B50ED17EB0EF05C8EB80ED592F173F039956C67827684227063A402A37C009A5F5A075CF5C309EEFC8DA517054BBA094AE7B0A1126A791BA8E94E44B565C12618510B9E936E1C15EDA1522F0731424330EAAA3A9FFE94727F9CAF8EB404B01B4E1071BE6BF7E2E58513C193ED9CE22C870572FC3976EF10A2255C5980062F8BB9877B5048CD01B4029FF1C7D266B42DAD9D02F8C89C3BD7813C02DE27DE1F3BDCF80F6DC4FF1C80F30D10375BC1684BE8E9C818874C38575B511A2D80F9FB6539BB003DA871DFF26214DE6E806C31AF9681A075BA9AC4A4E07F7004480E4E3D8CC06A5398171998F03BDE219189C0627B8A4A4F8AE174C5DE721E29D7B9874F22349ACC6B35E76016A749273FEAAE94116C4E6C9FFE62B87189E61051EB9CFAAD72F2FE368258C4ED2D36342C81B78351348E0BDECF63A09FD24DF89C93EB181DECBE3F937B537A1BE0221F7C0E257B82D679CDD6B26A099B2E9BC1E5F9D54F979409A7BC4F4B375F5A37991E046E9B33C01E6019FE93F6D80528195D9281E61794D87776914CDF1E4615DC15EB0007E39797D14FA7DAC2E92C12353B2512A3099761F7737AAD3A5AD7F764C40E8878AB9903B8FAD5113A84603326FB237E8F2B1123F678CA09117AC36B505CA6BCAB8C4F75D5A36BF8E856E04BDAE19998A2B98FD3D68AFCD1DC5E33A5C26E4E8506D05EF879B98FD23E74989D4B8DF69C33217FDE5E403D85C02BC9C33A8556F0B02D92ABBE3A5EDBDD6B34581DA37E77BC816F50B6DD743E594E3548DAC57AAC1740FD08F416F113D6BD80E127CDF87E681EF223CB709F1AE4C70C81363C7E83F95F95784E2944AB1C0A5F4F15107F8944BEDC669D38D97E2CFCD6862D97CBE3CBE880C397356DE41F4CB4A64C63039C833B2E18570FE4B0610DB5A9430BCAC89FAD4062783E22ED9716C9B330AEF9B9CCADD78A0B543A5B070FD532D1B005612E68E6222E74A1BF2B1B677B1582196E8A062392269AA3AEA91EA0A6BB96459E652C4EC505344058CAEC530598DA6F423622DDA7813B59C833EB6E666C5B8C2FA4FFE358B3D69F175F883883E677C159AF9444959F0BC345FA81877A1602F9C65172669C33750052DC1AECFF644101AFA255DC7EF3C2F0F790B61A3062D68E475A75FC6ABAB80E6DC958C7CD1D87CBEA87BA27D186F7A2A52BA446E25E163B18189DAC6DC9351D24C7E17B725B38343196A732A9C4C6285DC10F3345D0CE3208A847D510FBA7AA4B88FCD812F67310B11D3E7DDC1B0DD30B1F86F6CE350CE26846DA8D0AD21ADC2F62BC4832988F30A479716C2F90A6BFA0FEFE75FCB08EF5ACA554781CFBEA1C8467AA45854EA026B9FFE1E9CF1DB5F3FC48E189C65FF2A743883B99988E2F067EE3CD9F2CC4F841C10CCBD7B52508252AE30F12B7C7619C557385333D469204056829C3A3E3558604DA89A214B8A66EADBB71D0736A0A03C44330E66BCE1A5FDF4F63FC46F6664FC9C1454290504C4AE2425D8FEB9577CAAD4E326B793AB688AE621C76999564A408BECF26C31B5D150CBD78E50D3AD3403E285E96EA57DADF6FE9962347069F6ECBC2F00EB09499C16C4C4453AE16F9A782556AE567F922028C30FF88A2CCC92428C9F5ABFB12ACFEBBDFFB0F1F2FF970C3BE378D221CFB340D107D92597C778657C8653C76BF9AFD185E9FF480746D8831B0CBC34F7988F2B8316CB0AC02E9DEE4149056067A912866787D5F552967D10D067D50C67959EFFD0998A5ABAB4A1E7F989C3A15A99CBD42E2F03BBEE719FE14C5B8D917C60AD002CF75D5AC13719D1A01FA70BA83DA1AE53AFA8FA937840851CCAE05073A65004541125B58C6F8D0BC7D706D704683DD046D5E7360B6669432F87205170624F231D1EEA8ABF2BCD611E8FD7C2C923D8CEF8E1AE92BA3E66AA85A2417066BB7BA68BA1456DE9D353A94B146A3631507F0688CC6CA406F7BE47EE6CB9488C293C4FB2BEE62763F2CCC7F3D7C81774EFB79238B1C3902370E5E9D94B41E7D0B8182878712319B8FE856CBC56E1C8530C41931D6C2B5A980A64938988ED84E0706188A56ACEC67EC4BA0EAF881D177CC1CFEB8E1034FC35774C6CF9A65F30BB01D822E64401D98FFB936FDDDD8CF0E70A482F224E0F4F3CCDEAA55A22655B4482EE23F7B5D3EE1036889FE5FF88856C0545B09F62FF8A54AAD8E5C1964491D3A -MD = 3DE27484A9AAF9427B6D7CE9F23455DA771DCD021A743B049CE85642 -Len = 20759 -Msg = 831D0FF4F0B0795BBB176E764222617BA9141F2BF646E408A38F4097BA2CDA3739D8D4BC80E3435E5EE318A629FC3C035F00A0B7DBD178071417E948E4FEAC611737E293731EF91A6EEC8834E00930A2DF6E4B10AF2780FE621B057A3427B3E3AD10F93D191BDBD6BAF046228EE74024B63A06EA10EC4DD07F44C1C8CF44307A13F24E3CF8E4B21F4F3BDA308CB9351BB09877EAC0F89332715D912C6ACB5F4C43522A44F3E4C0EDE22E3EE17053D59902C937BC2688995C9EC48E272D3E507476A3FF31EFA543AC559AD0D367A9B11279FFB35B46401E3D8E3D66FDE8EA278846D5C0C6EF5B3FACACE5E84EB10516A2C04B7E6FA823425BF8444370144102773FE7A819AECB7298B31E34905F58DDDF0110F409487171EA0D145E20CA47E55A2C79F51F9ABF20B23CA778F253A7EB87383487B532FFB6BB6568A0A051CC1E1DC46BD0A086F0D38F29A3D598900B9281FDEB4CD99DE31F9AD1A6775EC741FD43534FCB41BD0CC878B480B56B12E950AD737023827EB18947DF6A2EE3BC4ADC0E0C6C22B4E51FDB40A7B797C472264B86FB382DD8B1CBF9AA21E749CDEE24DE6CB889BD70705BC6837440B7F8331477C0410E787CFE3AE1BE21DBF51F313B7A3A060CB9F62E4943337E577FE207E2A3DA401444BBEADD82D8B4A4B65D1181A861B614F32468037A841D12ABE49AA0A8E825D763F9B6495C6A71789ACF3EE493546987C56E036AB1F54AF6A3A7B33A7E7813D1783C43643A499E30A40F3030E7F94C734AE7C3873B30550B49C6D9E85CEEF21578D7F53270008057E6111D441391499E916953473C677EC34B032773CDF432159FD95BDAE610BD9D9E98CC9296D50C15ECFF51C8AE5D7707294413C22AF1FB70774DDA71F1356C01F243C2F6F1A474D767A4B9B1C9D10C14EE52187516EA2B0B2CFBE74528D0C035F17226FD74556FD056E91C91915155DC53AF9F6B4B0FF14AE2C505CD5CBFEA7ADC96018DD31A3F2A8DA1C9B4C8F3C72630E74C6905D7262F632972B9108FD6C64B7AF6DCF0DB0528FB83ECAFA0C8AD217A5A238BA304EF186BA5D1811C328DD8159C2406F39F188E09632EF3AA3A719D53D3A5F7584C4B19B9F7E07ACF324AC03D7AB256A2EFAE694F33567443D21C4B375E596E00935A5BFA2E580A4D79D2686945F141A899B9AA69ACBA551E58D5F332CCFDA08AF9C8733FA779407FD44A471C531A72495FEB9856C83E5764889134642741B37CA3FA899B9CEBA1884EB9680008B4F07EA3691D5F7FBEF5DAB736B374CEDCE097696D69E5E06E0CC43C169A3CD8EDEF4FC86A7B9F6744EE9F955202641D8F68A1F64E3026CB69E78FA77B3FF94BBE3E49CDA459F86810E3F190BBA82F334D9B0124D57F94019F2897209609E558C433EF6E2D1E0171CEE4B24B2E95046A25FC8123A8CE451F2A356D752188AD9615DB4C4E6F3B47DC8E50AE8472A8892F90E6A37E77AB6A08A794F635F1A3072A374A5468C9AA5D853B3AEDC40E08746BA2758C02E8B4E2A8595DE22C83EC4BCDD7666F78F70D958E4A2A7102644503200E7A6844F42BF0EE97613AB4273D1262D7D6DB1874B86ABCF9844DFAD87FD7BBC0DD47C9059CA9D446B128C0D7DA7AA5088D1BC3F5FAA83C32A39AB522BBA372C0C7C9289208C5B970D9B6BA01550695C42113C105429FA962218EC5B4A78CACBF56503FAB893A8218F030600D8ED49F3EFDC38342171F8C373021A962AEDF1FCE0E8BB1FA3341391A1F648C023942A95A0A3AEF5979D8D0668A5E0A4344DB840FA73F21F505AD47E95A84C29AC3846D2BFF7F22871CCF8E45112A1A54835AABF07CE3341BC0EACEDD59B9FE47D99A3A668EBE78BD0B443EF80950092CC762C866F9D250B7A81A843994080CEDE553880116D0BFF0E27290178A380ED9D296428B726892967BB07BEF9CB6CC2A1DF46E9DFAAE490E64FAA43C0333070B446353B92B49841FC568861EE2E367C19A9741FBABB54D5527446C8568BB52DDE24748F7D688876F39A96DC1BDA9612D50F0F71CCC6533075B925A6B50CC310ED5FE51C9A284E01DF5BB9B5D1934C2C3F4B9EF9FA97B948AC4128C55BF8439EFD3B916235374D4BA0D9487FB8439210D4B4150DB7C0D2EDA1D7E6C3A76C336239E4BEC0B5BBFEE47B6A0E5C1FE208745664198C0122A474AAAE7A59905E4D8F0824859A1D476DCFDC69193D9B2A446CE6A30B562E4AF2F40D24DB4E544088E531A788EFDB9B526831DB9FC7C8AA4DBA8357A35BAF1EC9FDFC2F3F44A603FBD517B4111081E7D5F1A61AC2009692F06D2283236714A82EF399E3543E15B2DFEEE3D04B8FEC550202F5E6AC2F4B1DF3B58EB04AC6B423160150036583B0C94FEED913EA00CA8367BEEB5B3DA8AA59A8AF4F3EC8F47E69A58B28042F4A698D916B04CC33DA5BA3CF03D8B0E6DFA0DE4FE0EE1C5268827037ABDFF05F7ACE73B48A7AE56A28AAFD03B7283A3B7B6DFB7A6C0A4CD92E2AF89DA5CDB4FD7D7A3E0C926243BAC52D80295BECEF2BB91AFB9256650A04B2976CF34C9A682737C8AE99FA4177C2D5AA38D2275CA097F9BF6D4672E000ED089038D17B875EB9DE5728D372AE003AF8C7887FC4B99C346AEA5C1460C3D23D41B31CC82BE58FD4290420949EB8F2641B535E0241C7D90A8E7028EFA2B61F39AF61B22E409E4F9537467E5BE8BF74B4EB8C65E451CBB54C1E5A8852B8835BB3DBC9563610AEE341356FF6BFA6CFBD9FBE59E9E1FD5F1BD047DAAA306523375DE176B9833544A8E2BA8BCE76FEE1083B2D5FFD36BD70119E7A88D6292988A3CC537643A77ADECFE2641020B0FF92EA1CB51B9C9C6636B808BB4FF50DF7B3A0532BC15F44BC805F39E615BB0D39B3041796B602F858ADA2952FD52F8FD39D86D1F4DCCB770A00641C857610C4AB0B6FCB3E0DCF3ACE01131E188E046F1B555F65FD6D3DFCE9AA2D5B88288978AAA4A0BF80AE08EA28B0B0D768BD4130EA947B636E3406BF44031BDD5465EA40ED2035B3AEDEF3C23B194DDEB41F11A79A23AADA62FCE5E1DD35A04B04EFA0D6F95368907686FDDEED54C001DFB32C70DC92755CE44B2E47711EF4EAC386355006F46282AA8CC0F4E8AAF004EF20F8DBBDAB93A5629D7DE3E78C84BE6FBDB0014BB55A013413B5C990FF94AD647FA5DA1DEB0D7729A07158BF5A1202E078F0864FB5EABCDAEF33A922C92C64D1DC731166E0ADDB9A593DAA8915FDFBD048A70E5D0B3D7065A245C2F4F934C93A17828B6B303161FB360F9773735C8A5602292CC78F2F2C96C27EDCF88AF98AAE356D9A04E3BCB1E933F53861273475E9202C13C8BB56F655EF479E270C11D11C11EAFB9FDA3E8E13A84AECCA06C7FFDA773F58111287793A658C2D434289B56817FCB98AAB1A83D5E7938C1BC4B812FEB86F2814C3647874ABB2B5380E3DB2D064A304B03BF6F4A078C100E6D896A262DDC96B16747FFF76EB6C753FE2EA9D6C3B6EB3AD1862913C37038F9B6BD6B260CE6F86C0512F4F99F7EB1A5544E23096A1D714E4536291AB93538B4B59F2A54AE438810238AD456CD4D3A28D37E050118FA17039E87D197F67731DA83BC57CC17F8073AB8A5AC7750C4844DB6780EE1C2682ABE160F1C040EB25368D5C09B910F31255E24BDF0DF0E16BBB65B90B36701F4F2CF55DA5C1D5C3256C44DD150 -MD = E92BE2D9FA127CF695A763FC36F7392FB50EA9DAAD02C5329B83A0D1 -Len = 20822 -Msg = 93EBFB6C7A81D4D3B8ECBFEAD56E17CC646FC1B029D8B11B98ADE054852F84B0B1B5D26278648734EAE4EC02F8E2206DDAA690765C2526E9AE0AE3CB2C7A4542E9213CAA10D63791916BA8E83DE5056A8BF27EB6E7E5764A56E9D86554CFF5D3D2AD2130301612C3EA0101FA3B2D161DD6A88FC7825BCB08CF27CF467B218D7079DBF69B1550FDEFADB3EC1E38F5A8AC34EADE864D6F8B927AFF1971D25DB25F12A96849868230CC0D5FB56011D598608D2108910AE4F06744939C9375D28E50F6DFDEA2CD8DE09B2B3B6570D8B3A0163C930F5D235BA5659309765A87018836A2B74CD8134994C47EB53106090D3BF190D2997A247FCAA4A035065D2BD45EF0B382530D431E41301E7F611D03146B52522DAE0A242B0186BA20A03190EB958277943236DDC9F9152DCDF5069BEB8ACDFB27DF977F26D2B718CF308DD53828CFB377B5EC3DCFB4FDEC1527A403400A941E2DDE8C55602B9D9D70A96A2781AC5D7447EBD24574FA69D46CF599A7DD680B5BF67666848469A8CAD6588288BD012EAA947BAD1258B0049B2CF2D0717251A8E4166EB695ED30C37193071D11E51773ED3493CD59B1EB18E82E49067E9EF835DE863D0944384B2AE28E4A2C33881680E717467FF94E563904A24A1E74D587677DB38FB83AA1473168469C9B143B8541A97BC88E3838FDD93FA522CAA0A92B41F9D0356AB7E5A393115A5D608BCA19B7E5444CD8BCC7EFA0622608B2F6C127499716A2A96325028A53F1CE708D74A6BB1B3A6329574E3F7B0195BFB504603994328078A3D272FEBC8993DFD011B51E1F4D8399A74914721CCF15530A2E8F47D062DD5FDCE08DD1BE2CE417B1CB6318575106692C430AB215A764C211716075A4451371353C2FA74BF5E2BBA0691E538A09393985982BA7C052C55EA28506FE16E09EAF525BDDE08BEA7C29BBCFF40EB2AFD3E1D7B423CFBB90411143FB4B100E691EBEB20A3891FB6AF2FB5FADD199CC1EC4EC727B8049197467BACEB2A172DA5E7A70EA60AC53841334B92B1EBECA7EF97B6AC6A274329448113903F7CF075A11CB3B7ADB72C20DD26B23E2CFCD5D23902EB110F32A577B5D0C8ADE4D4FB54392A68B9F7CA248723E2EEEF7700E7CABC0D6476F5DF65F98DF8DE1BDF788F9EB075DD0D523CFFDB16620BBEAA1AA0CA6EBE9D3849E238D967D0A2300E1F5610465A81337AB18CA12EBEA043F7BD9D5B09DC1990B304A86564A086460FEA9D63F4A88D36EF70A70B23DB1CF7DFEB3BE81EF21877BA7E5144C9958CFB165F57C9257C571DCCD65B9FA5C6B75F4E4DCF15D630409808C6F01332554B1E5239D17C72524CC9BC8C0E9BD04ADC54774D2FA2F080F014D109B7504D8777A9AD545C32DB946EEEF5DBD3ED35EE5A6A35852C1F0ADB2D9A7FDB695E315316E6B6579141B632D7C04CC8876EA682961B35F4FF59474796D6F0DAC1BF6E5332B5A87C36ADA748C840268AFBCE15D02A9E47E022785E52374C2302B4895952FE1CD3AD53C918D334A94EE03D400D1F60FD7279357C8AFAF16F9284E39A48CCB684B1CDBF478CE4B8ED75A604DC8291AE09A7F0783C1791CE2693C1E1C42C1A79E39C8CFCE8B9E5CE23AF8BD58DD5979570C033FD3FDC4F47AE3033CA400D0379B961FFA81B0CC7AFB195E2B97E2872FF083BE88EA6E903361D800FEAB700FE02E88FC5298F19376C7F533A332ED9F7ED6902D127885EBCCA1AF56588EC858B61CAFAF3079697085D4976D53DF1F59DAACB8E73A41DD483B311D62A177954BCADEC32EA2AFA833097B11500B4BD25459AD759B7018B0622A995D87089198377779733F2445577275D0756A709FE780C5944F5B0E49142A180AA12BC91037C21BC9241E617840575C3A33C95B6D063E75DE64990DD27FC3746E425FD051A6810ED839413462D99B9D14F3E18F6ADB04F6DBF5A54CA74FA474B178F50126437E73C52525A697A9FBE73832387E66FB290937B20F9C276B56CCFDD603CD53E05D489D4290E395B46ED1ADDCC1F1F8DBE017E8DFDAFD2A1A79325F6E72057D537006F963A0A3F367AB1101BC9E9FD47E6BA468A28145DC6861DDA522C4E573C2E18C182722C1690F074FDB5C9ADFE8E538000FD0BA504D17E5585401D14D725BD80702E4CF42F68AF7FD6ADF7021D430AD5B016D58243092CB25B55089E8EF82E178467C01D57FA7CE9E6597423C8B60C6457D24EF2938BDE93FA947135239FC030AA389966378C597CB2E623985FF7A573458597F72CEC2C74F19A7AEFB4097C3DD46711258D441319D7E37649ECFDE1EF1BE4179DE0BD2C9E7A03C045B47CA221055A3D838DD41923E2433663FBB8AEDFCBA101BCAB95B6E1989543F4F59B1FF9EA64775DDE091461788ECC028D11FCC00085A37801CDF86282ACEC00CF574ED164D9756EB8775E6B86A1B83EC366C53D37EF9074CB78B6E29F7A9A428EF9B27E2FCBE3C588A1918468AE662E2DE4673360295FAD2F4026046501352DB0CE387213D406CA73EFCDD01684AC8A2ABDF18F0BC87F659364B1D3EA5727DF24E4A1E881F3A1962421DBDB3D1031DE92CEFF7A963007043A5DB2575CD9E845661776F4D56182642CE4603611F23D5C419F6809BFDAD456D1C658ABA504C3B2E144A5E35BE00130FC2F3FC31C5D73F9695B4048298E6AC39C7F1343C10997C3644F04B2F12F2E4C3BE8F7DDDEC3F0844B9BC8C3DB2E006AD6601004EA38814414A115CDEE86660F650585964C2C39413C6F350EC754B104338DBBCF16CBD762290716502816C1187CA1A5A6091607D2FD3BFB143FD1D355902A92CD37E3FF01F0A4C37385418BB8856400ABC51766CF8FCD519F69D81EFAA6EF8EEA80B09BD995554F3705220A6F52024611BB747D92EF01824F6725B986A832B13E5F24F0A389D4CE3C49702FDBB2248DBFBB5BA33D3E29B331934C1FB81D457CA76A175A82FE9765F1A2BCEF2F174D5BCE7D6AB650DE7A7CCE5C221578D60EDF899A08A68BA17C9DAA3F4D145DF5F91CB7118EFE43E91C573F2BFF5BD2FC32F1559DD60BA19DEF61313F5AAA2B9E7F58D4FD174FE147B35F2170E34841BF7D25381F920192BE20E0A8F667FF9A31B47585D19BA6DF6F637B9E5EFCD7BAE437BA1AA3C27DBAF1E820DD5B6C98DAB786065AA2FF911F158492AD7475C1AB68BE7C39DBC437350D40ADC9BF7FD9B66CE165F7FBD35B15A45E0436E7B15CD61A1250954BBAC83DC131BA65C276DAA662CC60D2183D12E89FF1BCD66C2036473FA6C4186503B2017F72F6D0133171DC5B2DE4EC6BE4D2738AA7555D8E1E313EEAB5BE68971F80A552B35B9751FB84BA1D1095EE0D19B637007A9171069E6A8506515BF23DC3A2BFA5256A5DCF2845466EAB87229CBDC8DEB92D845E9320E1964FA6F4B9CBDD184D44A63AFD1923B562A4478CD66343122E4F26028541257645228D8FD640D805A29CC67EEF4053130389D40148F488EFADAB8641B6A399F213EEEF50E7BDF85B182FC78A88A999C8060D05C7E2C94FA6D3C41AB630E559353AEE8A57BA8E9AB8C5219D21C073FA098CBC22135A4DD75F83C3CB67E9EAD5EB35FA61936C970C6E5544BE17CEA68640A1D3E294A90284F3BBFA493E0029901524885153FA4D093B8E40AD80A5F3D1E74457D9FDC37497BE0E0C7A46E92A35530B4DF368B94AC610AE0E0A5F41070 -MD = 82FD6A3B5E6D515626215AFF8FFDB61392931463283D284149E7D85A -Len = 20885 -Msg = 1751D252F8753F7FD4A2BD43EED46044C4DC9A199AFE99851B961B1976EB61BDAA3D0A09AD58C243BE0E38C46D1B81B8812D0677F61E9797A7376F4009B5984E5E42EFDB54C8A80E99F63F9F243E4B09EFE6AE2F6F98C33B36E79A6CC249B4554DA3133A6C0429306F8C695C4B3E9069D6CB475C62CF32FE5BE4BB8C0E3EFA4D602AB9445726B74124E6D8829874BA28B1B9F3CFA66848751F4DD11B8CEF538AEBF487D82EE5E407AD6E24704E6D1503A2123DC3C137BD00C5503AAB6C8B5285910DC3BA68CDA4D71E5D07A91339E1F4E118C8BFB9A95E7BC904E2CE2F4E2165DA6E92480A0DAAFA31EDDFC651B546BEF0D891C1AED3407E7C13268228BD8AE6A9335DC49727AA5908418209F8463E75F67330C739030F898EC9667824705F433474BCC34B5BB92850C5F07C35DCDA9CF614A37E22099E67EE3016AF006AD405F09C1C4B696FDEA964CAAB6E7341FC6B9FF948FD866A70DD82A227069B99709314B651542E90D1B6FEC23F2161DEFEF3B445A255BA8DBEFD53DFF9A6D94FEE15610D206891D4CC252E1199280B056394966897B372E5DFABFDFCF38EAF855631260AE7A2E140898F88FCE1F168867E97E6C298869A15451AF44C35470C653188FEC04D9E524F55573F76E252A5F2C1DECF9D049F39C791B95353C6DCF99D996746E2FB4ECB0A4370A57FECCCF06499C7F2A0F5C70484F1380A407C4406F06C52EB093B0857A6A548065AAFBFC2C73B78BF0BF39C39757F2FA26DDA4851DEEE8CA5CAE3001FFBAE9BD709659630CF272DF69F5BEE4F9206E0BCFCCFE0F990C3526463F37B57B11667661592C9203AE7DE1728ED03ED9CD02DC7E8D194C2805D08FD827052132E3E023F0AD145258B39DAD63828FD7D6C881DFC685A61B0D5910C1C7C02D4B02BF414E8660A9B0F2797C9002162CA67A0E6087CD53D7F21F5BDD6874EC7A96D42A9C019A12A57D8C8EBF2F1AFF81708C27BF68F4E35A843C82D57F9DBC6B0380B5F544B943782C06642831CAB979D3E2C3C0E61EBAE504778819D914CD7A8B99445ACA8428528321DB233BC94DCC3F3B91922B7E3FE2FF4C0F482C83646FF9FC6993FFE33F13438AD424828C6C44745B98D3F92C7909E432BDA5F202C423DEEB42C3CAAD7F4EE42367A5CBC9714B46B8A57BF89FDF1785A58A59108DAE99DF538E838762AC7F06A24313686F0DEC97586DDB623AE72622FABA7A52AC823E97CE14A5F3095EF2C0AC2A44DE0AAE1846AC3F40226C8EFBD871F066913A66D06310B3152B377B003D5DDB7F956DFCF0C2B62F8E41305F17EBA5821104556D0A63931F3F127920FA1A888ED4D4F8384B956FB3B1ED76ACE55113CB352B1939814ED13B908172D83F02B9F52D5A818C8D226D62BD6193ABA732E931132477386F6DF6BC55DB2736A71DE9BFC0E62CDD82D415F2EDAAA0B43511D1271626E0E174723AA26FA9D92EE4A7BE61153729BF738E1DDFCF35C5D8884455643BCCD62D1947E5420859D79EF5095F323086083D88122B8184702DB22100BA5375D88479DE8B567443AE3C64BC95A5E048DBF275425898DBF2FD2074B3A4E4B439D023EBCFA4DB7EF6B8C8C60F8B1018C3E5B55CC11BCA8E095FC36709BEC4D923B672870D8B168F8EF168F6ABC71B6D395DF16A9C7455C4B04710097B79B34BD7B58E7F327675EC5CCFD374201ACFE5862E1AC09AE0C196FC7251D03509AF29507C9DD35B940C801FE5232C7B5F434526476F0D10C208AC58849D2FA21D852690CA8B6F4F7A60506C2247A55AADE378D62A863861F4B9B8DF98CFD0FD396315843F296AAC8CCF1A012F9F62846CE458D9FBDBECE2523BC703A79E9C01E6623E34EE3D0706B95272F9184233213D84BEFDCDCCE9DCD9673BB84CD77432F22EB2FB9EC17C12BCFBE9C96582CE8685F1D41868EFCB72E2885914A117FCECAD5E59E6216AB61A0F39180A92E35B870A602CA7F6ADCB2B0C659FD762630B5A97E293307B3596907CD183856556AF7FCA2AB0FD7F6BB1D8ACF29CF753EDC3F5B7E44110F98C0C4338FF439A9BFACBA0605837192C899C76DA608BA8B0B22862F9F6376465691C01D30488B292380F86A61087A7E99075F82EB37CD6072A67DECACB18300EA3071B91A4284369B9E1513219F300BD75847110EF8FFA9C13D915C92CECEF60C9D0367B8D2AE5E84AB47F98F47C426C2DA55253D8F7B6205A1B06D24488CFA9E83D87404DA7F3A66EE8154F78DE2369218CDDB5B22CD3DC26C3D85EFE05841616B46F170BDDAB058049AF21CDE0568C21C7C48B539F50FDBF348BC9AA46DF2F812A9635E642D642356C776398E3ACED7ED26FCD4E8CFEC57F7EE609ECCF9DD30FD9EB4504018BF0D26FAD23DBE994B808C514FD2AA4B08A1F1954D2AE667BCDE4BC9189A7336C1456D8BAAAAD2D7E79F678337DFA57C25C2D7436285FF98AD5E276FAFA28AF00176E8A4B4F38E2BAABAF6D6D76986242248E36C5D11603D93B3F704A8181720555437CDED236A4203C3F5A81B9B2603FD151F0DE86C9E2906750165E3586D14111BDB65CDAB6CB2337689BC05C060791AC2B12DDF1EF0D72FD43627596FD44C0BDD860010C3F92C13969648DDAD4894667E274348FA1E7AEC0C1EDFCDF8E8AD8282079F12323F6B67AFAAFBCD77D83BAC650234FF64898FAC1EB91C5BB9C232B56580DC4C8D19062B79283F75F56A74A99AFAAAFAB2915904A934A338CBA50640603D7FD390C225E89BBE3E4F03EFAA7C8DCBE91377427AEE70A78E1D6D10D3C55706A6DCF630CCC7AE6571481381F1A9423E3009CF0BDF9258640691A920EE88AFB636CE1D233FAB8640800BB1381CE45B8C987B5047622288E4D82CECD1DDFFD7CCB8DF7AD75F468026ACC1E4A93DD076BE57623A748AE0816CD823C4AAEBD5CBA2B7007B0FCC84A3F372E3F98587BAC2A25E04FC2AB518763C2EE2D4A513E3CB875F429B142E92020D79B0DEBA1E9E9897FF322DFBC42FF2D443E249F1C0D45B4D0B0640754BC03FA227522275019E41985036EA132059DCF8CCA443C7467BA2951E9FA973342A330FA8CF47AB1914D10875627C24E0942B1E606DE004DC1F3295DD4EE996B9388FE5F3EA74470673055F388DB41A045E6F8ED99AD7A69896CBF54A33BCBCFAFA803355715388AF5F6761B94FFB058786A29965FF88D1BC2CA322A0CC3C95BCF690F60C9C3DDE635C907F3BE19BBAC2A658B4B4503ED84C8092530623C1AE198FD2036F6AA776C54986A0E3FC2BE7FA60E13F4CA98283A8FF72A2C946818B6F33FFBC631C8DCE0996BE4F218C736085077B93A9CA98C24D88D6F83D1D943B534BB4C241D8AAB0C93F7947FE96F63872B0530AD5DDA8415C91D771583977C23F4750B35C8F790665ECB538A7EFF4B77722BEA0D68CFFC6A418FF91C6D7611E17454B80ED91F241746D68F3B03BC770D9D876B659E6E14C548D85176BBB6E67BFC04267E679AE691B7B39FA91FBB6C1D6F4A8CFFBC3DE8F85E72AB2B28C36F320AABF1B8371F1E71B7ACD69EE896B4842FD0BBD47E7F6823EF6E0FB480E8C0C389B0990BB8D7F9AB3E07F6093DB2F4E6BD97AA820992B5497D119C48E19157E49462F37632F436AFDE8B1ABBBACC86B74AC852208BA4DF1EEA15151E207BACB5F801235CE9595D7CF5D3A2B1F9978D687FE99AD2342AD7999232C75F678A2C7EE3DDA67F0 -MD = 7E79328AE1D8F95B5D55A7B22F651D8325EB913655FD03A929F14DA4 -Len = 20948 -Msg = 88B703C3D9C6243945C16AE6065816E612F6604DA66452BA8887693484362C8563992624C6936C0A4A06766B93F63036B98DB0938730F5C3F3A514CEC6F106AAAC5F00839477907D51E209CA0C1CB6A6B57222DFD780C3D264E681E827198C9072C76C4CB846147984070D99E15DD0D403E5F07DD8FEE665CD1220BD340359869C5993056DF043D049754513C9E8E1C7A189264AA0755CBE458D5696DC4D0DB651CFCDBF3267066CC7ACD1AAA2E028808F2E8FFE419CC970F1EF26CB145AFCADC485AB43CB8676F210615194D4E83A0171EC1D18CDB69EDC964722BDC8015BA609E546108E99CA3CB83CA4ABDBF16C894C6A14C23BDFDB8DE3E95887311FB6852D8F94306CAD256C801BDB4920046C0D58AED4CC58FD2AA4EE02E4D2FF855165CB4E3D047C7FF96D515D9FD98DD938F6D599717A05A24B867E0D702371A371D9D3A6AF573A009ED840BA50B9040095776E3C513A79C211500A16AFA12375C148EDC4B92D8E2CE5C5E54F04F059B52925D9CBC29FC0F0E4777671218AB2B2BFD5DB5A12A2AF7C6C409FA83EF41A73408754F6E3BB3241B2C82E7DAF5A705A27EB5B06BFC136EB2CB88DD7E9F85392687AE17C4923FEC4EDCCC9673D0FEFECD5C2C6CEF15C6AE0FFD1C14B50E4E0F7B36BE0CB65285B903FBC5EB095094227FE288A0C7F461618656998A666B6468F7EAC3A4417ACE76F8FED111D9D1984BFE50F337A84B7ABFEE081EB0E34D19562916A3382672F83E75ABA2E2DAA5021A69B2476C4000753F2B8296396E31A5A0205024C2B7E41425A9B8397DDD483B98E2D7CFF2A7B9665C96DAD7B9FF8A0041F5ED8D77E35B5457BD57B0F95704C1F5260534A545D60645956DBB481CE226758E9BC30F34522686386D8F97213683E07D7AC6F75101A95E0970616A09076B9982932562F217D669167580F73B09DEF114960384C26717CD48F512C79BD300544E38504EE4FEF041B0DE0F3DE1A47669A95128AA22858686AA22161F388505A322E9B38FF71D61D7B02AE1152D7EB774E660DD9610704FE7423F1F3507A2470915B17A7A5464B599B1C68EC182541F3CE78824088F10AE889C2BF188513E2B52ADE50E5CF26E3E925D21BF7B91DDC50F0452AA7F3C9A4278EF900D8E06A042A9A64F8371AAB550B4D8D1A15FAA065CB9485D99E66F730BA403BC797429D1664983C72750FC535285286A39056DCCCF78453678FC3FEAEF6E6C9910C52E0FF43EE14794BFAB4B982E1E4719E40877D25D4A3CF0A8D19DC1ABB75ADA6A783F8DD812E01DBDB1FEA1B54604A35785650B114CF602981E3386BE0D8AE46E422CA8B98C9948DE35BF12CD72A62DAD3AFBBC3A0C319A5C019754F143679B586AC03E724A7EAFC7412BD4BAE2637B9FE6A4361338E8B91CC4CE3DA63CE82C1212E3872EF8AC0E964A257C3D9FACD0242DB964CB879CE298B4AF6A2702D280B3EF0A8F49F723055A6C9E843FFE8AFE6547F17AAE6863CB3B3E01EA135EE8DCC790760BFD20DE8180059FF03E7C371CFCE7CB5622066AEE41B8AAEC7A271F18A7F744C679E6BCA6755CB31BEFA15D0275DBC8604A2027E9759EF5AA60D3C5922AECCB5B17CE3A26733426A9E95A58030F9FD88796C2F3FD5EBCC357650B3F04720E42DC17D8F795053EFC6D07A091D532FD9AF9EF936BD2711369D286BF260AEEBB0A558DE80170E0266519A7FD1EE5680552298E4E41807124E2A4407E02159C1C7723BF977DB6CE66E288B355E3F3B8EBAB9D21334718B4143317222D517678A81B7189148800A49C7C48306E5186CD233C2BB0C333057050FFE170EAE2F96846598160D2EBCF713D88A527DDC48E3130A32827A011C02A05D8BFF512B9726A8BB0CB3E37A94647715B98186A23E9A22011358FC6EE04DA45C223CFD713A022672554C3070BB0A3C26B20DA35AD7CF9D9213B0EEE8E5A6D88BD212AD050F45B747374F36B5942F3E9085AC7C874F5920D2F15F5158409CE45858DBC11CC475013AD29ABA8242CDF4EA0192A008149E174E1C6C8B20186F627650D282B785C5573ADCB4EDBB02BEB8201ECDF8D78D02AEBF1B15CC6823E4C72A4642DBEDB4D60889565EBAB5EFF532B05113A8255B54B1DA87CD9A6CD4BA4B89D9E861E46ECCE2C18A9551346AD576F8DA21172E998D83341647806980F0046346933E6F4EB9A73B94BBAC828ABA84EAF7B976FEDB06139DB2826C803F1E9F15E8922600A1A979E03AFE0BEEAED7887FE1059B55DAB293BB34840735963D14D28824EA2E34D8DB86C5498465625070649724F60AE1AE10ED9AB978A9296E575EAB96FCD5B4A15DE813BA6B0FCE63226CF1B522B277C955F6069D56F05C2CF49960050DAB17C3C5D96EE14F334DA3DBCBAD2695CF7179BE5820487043A112773183C4CB94F09DDC12D2B0B280A742EFFE2774350D134F59C7ECEEFE325A4147893346EA92034866722CD09D8DBDC98BCEE2D28B6DDD2B0CC758B63ADBDB47814DDC5B25F118E1A64220D5A65046EE39715BAA3C7953E01CA9ACF5DC7E2F6663EB9EF6040AC86F7F45F51CB09D4B0E84B11B7024923377D782DB10E401AC96E6C210BD7A571A8F60F6662915CBA0E7E24D50E1E66ED284E989EB5D974430F1A07F1F217C2BB6B1B933F0D180B5561EE42CD9F3BD796AD7E54CF88E2E654F85D0F100B2304E13B97C461B9B2A0035D195D886422B06CF1CDC7DF3655D3E16A8AC30447DAE7425637A8E40F8207FE2819B2873D21B01C52C368CD7B720C34FF551E96A796A32BB6FA23ADCD712ECD47FC8FE5648FDC40DB62289B1FAB95B7E4A7793C397EFE309E341FB75C5138DF6ED13941D630E40B3171B6BA6166E78587090F0C6AE2703CE7D1D77D9571A585662B89D8D32F2EE3F922A5CDA8EC7ED62C0D32FB12D15CAAF659C5732F0843F18E9E7018E693E8ECEFFE669859F45EEC700A555DCD0F0330B8D1884D4F15A58FB0EBB1D2D07B6AFE8CFC5DD77F48FD2E9B3AB88E94607E2C27DC8E1CE06497BF503665E96DFD13751A81DE9E9DEB3515E60A8399ABFDD718F17A0E953C97534D20495A4D37F20BB61FA0369F121FD4FE14DB6F75063A1471CD26C6D4BE8C619AFAE4F28BAB5598919E4BC42E7C40DFD59DFA742DC07E747B0FC8C34816DFF5ABCB38AA97A88743CBA95E0AB9591D75B57801A544D0D091FD8AF8351FDEBC2870F11BD790C46963A1C144719536D705D3BCD38B8C58C18D4E645CE9D0E5217966241B6EC95B777CACFAAF058A27561E60A8574CD371189E182AEDF3DE7655AF4387C6E8C3A44A6E8A5CC78BD7F55DA3E1BDD4E1468105EBEAFB73EA60A98160733B0EAA43E03A396B29657538C900E68B67B2E24F8ED00F841C1B02C67CDF2C4EDB6A55A6D3C7A78E64BA5E26F70AF15AFB06619AB758FB765485D6711207E55E913AC9A9F516B6D16D3AED9CB93DF8E4247B3EA57F7809A60D75DE0CB6ED33C228DC09923382FF22014203D29C0A6280C1E78B36CB28637A27F6D38655B3119804489F25279D8DBFD44537A31D7533A183B5B9C9F2D331B0C652EE40146B1579A0D6AE0F822D80DD2B41475EEA863C3B67264B8FD8B4AF13988A315DE1FA0B8A574BFCFC6C25240D44A5901BDFF31B3C35E73762F862E63236519F2D23939A6179D94228421F5ED0268CA02D17AD6373C93009746A7C04806140BB4F5ECC3A3E04DC637C14D104AE40A2500 -MD = 85028D4FD865BA1E0D9CF034A8307B1897BC77B308526FC544EB116A -Len = 21011 -Msg = 1AC27440AA0BB4FDCE68B70BD3BB2F3F28170744E0084143AF7C295AF14450E7E690799F48FD21D45AA09785557CDD1F52FF1416FB3F654A14ED61E90A692171E0A87AD1512E6E7883887D3D5B65E072141458BFFD2F3837620AD5AE736C5C425113D7D42A4E80FF5154E55EAA13F80A93F1CF73E1B1C4A54453EECE9631AA5B9442100F3F02CEC13946F07B5F408DACF5A0BB91463EA3D0AFC9217EC656D81E22244B3C6D7DA02A989F96CAED43870B7F9364AE783DF59ADDD055FC39AD378A2A7B16B30EBBE2E52C2996E981248D9C1F93AD2962D0CC6B9E4E9F4CD553E83547C1BC9FF8BB9CBB678039C9944E24F6DBB71F328D5F9D866A8E6081EE523850F36BA72C6B603FF558752AEC385BF65CDE56E7FD0B1743F2A024824550B5D82D7E9399594C0B121474D6FB277F4301664EFCECD8172D3C02C5783F7D8B698AD06BDEB3442B700E3C93AEE8012B1E7724DBF096AB21844FB26F05A40E43C0123679A308DA64DBBAEDE829E0C8159E3AA470DAEE3E4FDE2F42063EA28D6042E328607266122FD3966CCE2359450FDF6CAB6C2B24873DB6374A8F9C90368619648788500231FBA94941CD2A559E31DAE1657212872E2308202CF0F0CD48082928E9FE21A04DA1B1F52CDC8FF75477F9E1102D13B88DD1E360860429D20556FDB746E3A1BD5E251BFCED04844BF0137F7400137CB16B8E9C43081B017ADF68128E0440ED394EF7410AA84FAC8054452CD1E022D9304822BC5FAB33D784FE6B597E3CE9B93D5FE5A1563FCEAA0EBC294A5091FF1D082EFA2EDF9E563B36E11F7F92F07CCFF319733623DDACC821C48E4E54686203114489AE70CE17292AF7817863FFC60B8A22164E3A81C42E4E041A6CBC1C223EE059F818925DFB15731BA5C9AB171AD7761D919D428BA851781D96E0FC2FD41270D3BC366B81E4770B4A208B5A3CED0E87BBB8967552D382B04CA31280AC28FD7AB31B95E8222242CC45FE81FEADC8DA719632447DB02E88331FAFA2DFAF2AA03974BC46F2CA89D226B981621A517ED7ED0595F6C78B21448315BA35F966B60BA9712B0E6077CBD59D9012E2647B626ECEA9574AD4709C635891198B22717A911B93F2901067575D9E6B0A78391E731ACF0B4119293641E7CDCC2853936B8F0159F5C46810DB652098A0BF0E9D030D31D21C65BB5FFF12F0C476BB2CA582DEC9E57DE5B72705F1A5D114C8631B608EEFBC43FBEDCA4760815529B663020A7098D2DFBBA9CD28F98F746A40A8FE6334325BB6C38CD85BF28081408C3A3893BB72F0C15F36211A5F67EC583AC9DCC57AE4BE7A35A06A62F4EC91E5D7A0B5701F209590A8A4185792EE12E1B6E5B9BE77E992DBF3726CC9053D6A99E59E3BFC95147F40EE23B5481E84720856CEF1FD3C859EF3A181ED7003ECB7B235EB2C2AA6254C7848F95944E5754D401CED931405C2C5609E32455AA34693A9AD26A30192713CC3759E7DBCED849718ABB78C3CB4374CA7AEAABB1A99D36B6660200087BA343A6467099E9181D28F67A8A077EA4C3B10EEDFCB859ABAB83308BB1A58EC92536CE2B47C4C9916518A88585789B053AE80FF81BC4F8E93AE11D768254E70C69B2741CE55873C393119FEF7BD410B0955BB8201CEAAB1012C7A057D5C7AB9FC56764F11DF41FD543AAA4817CE6ECA068CD7FDBC013DCDA9DB86A9F91A4AD23476550EF7E9926FAE4C4B4E783033CD778428390BDE588B8BC5AEB7539FDBF7B16DE10DCCCE52BE246BD7474B7C197DC5188612D6BB5313837F959294802A24DDC663202B74B20F9CFC2A66480DF469706774123C9F6E12D10C66293678DDC818B06B12D84FF80F3EE0E1C07466770FC362DCBFE8604864A9D8E353024E736E5B931B5307787675A8201B75C7A04AACAD10E8F5FEEDC30A6879944169BCD2C158D0C0E171CD4AA262986A1C07AA6A669D74FE0FFC1F78705C58EF820C1C28B2EF1135EE4044043B4B4B21CF9F0ABD3F1768D5BD93D14217E8CC5BE954966B5BAB1AD4CCCBD0E2E0080A56A7B5B5A2C4C668C029A738362AE2F537B28F1AFB976FDE3007AD1C504ADCCAA2EDB803158270C29594EC54D4B6ADAC4D50896AE73F46AFDF9C03B30C975B36C90946DD69D6FBA27967D6912C9C37BD0D7F45D928D331410E4FA5531C5E4AF1230F5DD59BB5407980772B103C48BB1BB4CD66634974B5983BF0DDBC0BAEA6726E02C56272E264E4EE2E70048FC7E8B5FC84853C3B0CAE1A3C028C77FA609AD49D998ED35CE3F67D7D5BE7B79607F913FF314E7C9A7B91090E4E95B5FC9E907345B16323B5192FDFD42A0334C913157A4D1264A371B5D5BA33D3D0C6EB538D9E52849BD17E0A2040E44876624B71581FF82A19687DF62DBE9E312796DF17BD61A860BC1EB33944BC779C50ABCA7E23785EE9DDC1320B1B89A2557AA911E2274E30117163B8126DED61406A942B17AD2AFCB8CEB91225B8CCB6E5074A0DF501D751EF65A26195F45B17DB5BCF084E0BCEBBAE24AA9955F948B43E0A26D420637A76AF1CE4F1BEC707632FA0B880C62CA13D401A359C248DBF2A3EEA8810572092A4AC7C90D2FC65D641A03D629613FDF5AC78BC197865403E2873CE915A8371EDE6178291B9550014E730D8FD214DF2A666266865DA3D7843DF8D1BB944BA1D6AE2B93DAA1B97E4879F7E2A107BE940F4F7456EB6C44A491AFEBF08246C835DB5B33D8EC3031FD5743EFD99977013FD86F330EFCD153AB2109C73E7A89DE95EC49EF679256C1F545979E9C0E5EBC9DF3995DF42B499C5902916B6601145A0D5F96122A819B958A0CD0466A7DCD73FB7CF5CEDAF99ECBE0966C38F0974512DE1519ABC1B917C25FF83D938280116D73AA6AC5772B084C716F12E5DEB1D4EC4818CE34A822CDFA9645B681446CBD8EECC986155FB0CA277CA59B483A460A7C155D68E9D58830085BC82418D77D52D190FEAF03EB836BAA1F67BFD4D9F564555C142343F69131F9436E9C06763FB241833B125D4F93521CA1D9AD8DF777CBB1238111361837082ECBAD2FA35D5A71D7B1C14172AE53607608E054929A628976BDE3C815AF55C7557668273F98A6564604F22644AF8BA4D1DF07595013DF2D9FF2540E4B5BF8306332E6B435E211D5846AB2CC27E744C3DD0103D80D546F2F4D11DF4B27C7D26AD675B9098BE29DE8F0DB6122D571CAAF3F05769B0A57EC86493D1A2BE381FC5B7E200695B7D0BEC937F3CE9611D3BDC8A19D14FFFDCBAC62C46C04DFBF34CC126A4A75DA2C883342A3AC7AB38EB79A5AFB6CC6B421B1F5124ECF4D1BCFB3AF0D758F6694E1BF363FC1728503B3F7AFF5C7BC274A1D802FF60682F92DE65C2247D65B333F8CBF6EDF5393210A1515EE178930C9A8329DE142C248BD200A97AB7DE69D58FF3AAC97310B339C45B00F9CF06BF1BEB900C7347749F3C255BFE3AABE31FBAC8716BC72C6322B93E7C930637002EAE2B5D5A4CC7C11CA1878DE1F919EDD246FCC4899297802DFCAC8602F5881882F7822613AB592BD875B4F53C582667DC2F3D2EC13707FA6A91475C21CD58B7184B0F8CD1026BA0DE44D85536EB7ED5EF07A700EB1E0CC89478FEA111CEBCBE6075ED105682647655114471E4703C1692D4FE74C405FB1646526ED797DDBE9AC2DD117435612F0B3C92CA6551B4530033EE2872BF9FF092E4629C34289DBE08051B81D6EDFE630EA416AAE81FC4ACE07951F140 -MD = AC3ECC2DE19F0B43FA770AE5514CAACBE5F198F804FA2E3184385808 -Len = 21074 -Msg = FE56367A58916436185FFAB81DA1C4ED772890E5E76736187DA9C7FACF814108E279169E27B064AD26CCF336B91AA05E4ED69E1B1AFC114D9AC42CFABE9668869CE596AC865084F41626FDB18C2CECD1D5DBF537F54B2A6279F9D6F02DE1519B8BBD1018E19DE5C3E5DFA6A888256DB4131D3152659994B2A44CD45E09CA36E6159855A9680A3A1020E64CD5884AE66ADB2848DA3B876C60288ED2F53BB5F33AF540F9F40C8372246F8C5408DFED59B1003EBAE82CF2D8F37C5BA3ED881B5999A4801B08548ABFA9323A329C98A7CC119DB045FF143492D71478B7BCFD1CCB87B3E85E9FB40CF46DDA1E7077B26A28359C3D2592995BA1C0CEEB97FA97486102627BCF23DA1779B8AA99F669EFE9F36B6950D0664510A6FC8580E08DED1A13890A6DF35FC3CCB05313A7DDEABAC802A4C09F3B7B410EADB3C47109DD9AB0FF6648AB8534733F77E0B035FCC0B810622B95DE6B86F6F5B3E48306F05571E7DD325FDECB308DD784E688295A6B93BDECE47A846F8E35898F1C62AC85DC230F437D9FE931EF185A36CE094E53F266B13298BC7B3ADC50609140F308F68589CC19B5D8B97425ED4BA631B23D92611FED549C7FA18F335AC6A7658A0407BEB312DB7B5A2964B8AA80C4133519D72D948C0CAB60DC65E81237A57F8B10686A2C4FD2B8FA45D24926BAC48B5082287259BB57B272EB2D9DDB0196110DCB7A1E666D8EA1DFD72BC72C3D5562A9D1C21A818D65C875F615075CB9FE122809673E331EFF6B351E7EE3FCD8596B15A5B92CDC862F10531F7F04EFA1AA9840DECDDCAC808C427554896E8851BD9378F952342F6711785322466B3BEF87732B5528E16A82ECC98AF483CD42F0A59D35EAE987026629360F2994C19628ADDC7630CA465D4754540A1E640F8DF5842A2125707B9072C8B285D3266D1316D717D7220ACCBDD8EC9EF496E965D91462689B1CF8EB5885EA7406ADCD92EE42402C918EFB3FC89040790F75A3D75A1EE0AEFAB7B8A1DF8D92D7E40339C7A699B48C551ACC0252EBE01B398E2123292C4EACCF85E0BAD014E19572195E0BFA17BFB0852D94C1699BFF9F116B7A42F1BED9CB75F17F6C7E562CC05ECD7A0C8E1EA771A02B15019729FBAD041FA0F637A29D2DB4AEC6B304DC32703AD4B984CF8E86A628E3F38A6E0B2492F8B9FD9689BB6970DEAF4AF4156D07E7BA3B901D4B7AF1B2EAAC6F4D820CF07A7FDFC68A203257C862EB2431D28A526450EBF4650280B5AA526D42378D6A4E593F881D1621E67F80B5A63D98B1B06ADA58FD092DDADDD99842A53F59379D8980843E748271C057AFE25C4EE49BC0CF0A90AF1BD47C781947F1A7FE517EDE5AB153DCE7FC25A1D4EE49C3A5ADB6DF166582A7EA9AD708450EAF6F0D82B12744544AC170E6CEF8FB689AB6DE0316D70B39F537295CA794E93F7E0749735C58D8D7004ECACE902402F34EFE836861EB7028C1170AA411050B6C192E8977074B456AA6E04F4EF65AC96910743A7EFBD05248D7847C1EE3D2871BE8AACBE9ED462F9BB99B8B4D1E01C271B3AD7F50F14DC07C8D1B2FE7AC445840A9E7E0B9065EF6E37A2C15CEABA8DF0ECF535FF26BE0B484242F879644833BDBDA6C5EC68F1E3C9944F70944B492B56D9D69D19808E132AE165F0A2DB7475E1A9CB129582DB845BD723F3BAEAD93E4A4762AD4A47999459F9839AAB71CF13C3036B3458442CE3E41DD7FA133DD56F910191996FB45D38C29569B65A399CC577CC474D01E704A1E364C3A4CD10D75FEEDDB404489386B5756E89A30FB11B7EA831E7CD315C64B2FED1B9AA9FF5F4038A1A7282C7767B654D508A83CBB42E2907F8DF13F29A56AA3A0B64BAFF5F4692CF6A06975A9F9F540FDA38B35EC3E82F7582BB345DC458A367FDC004D45327F419D70C42ED21C59495DDD4487DA7BE807F6F1E1A8E5D9BE242503E4063250EE45A188FEA629FCA0EB5890D4FE8D03CD87DADDE9FA67BF15A6C04161E7EAD5CD84D1BB56DE33044611447181ADE9989CFB768CA003AC657A8A25C018269327B49B676F8F503D1997F652B3FBDA29BCA736BD7B8891F0DC7CADEBA3222436381F95A224BC54935787B2CEBB83A4B313D7869B5416535286946389DDA1379B610D1541895035D404220BAD0D6101B801A748B345CE7F1F1692C6D56DF8AD2F7F0965F603FDAD1BEB879A0D0F2BB04FA3E78F87146C907618010D49E3C4F71A232578F33F1A24791AB42865638469507CC3B585DB21BE94E250E1116C8488405B293D1B3ED7857E49EC5B97B5DDE42D3D6CA4DBC4B8A630EA54B820808923C373E5741DD2CD934079594F325C2D125EF3D5628FD8270EA6FBCFECCBFC91D0E58CD88B3D5CCA1157E8D55873F3B062A5D8CC3876DF5149DEE072FFF346887204035C538283F315A4CAEFC8A2FD86E28537F292B6F43B499F3EA494EE204AEB59B35A8E5405D0CEC440CB0F3ADB1EDC1B0000DB36CAABAEB7C0883C0232883BE1DCCC39B658763C7E4D284641F0DADE87E12F4B9B69719FE0C4BF896F529B9D6A4BEFBF6FD79A24AA0E7DE9236B8F7A7E679B01C1AF441E7C925AFCCA3F3A6EC6FB38552E0DAEE5580DE735EE4938AFF6BCDA7DD1B7359C913C2D3CCDF78AE2BDC5A0430B2F0DFF47E8878247EF142694E4DCC7B2FFDF00EDE74ED5DDCEA1FD4FF0ED1A792A972A4D2B1B473294EA6E0F9F60BC5369BBF9BDF6A6A60F5469D7D52333B08CC06BAB0487462C08FEEF2EBF7A4EE756CF4E46BCC0DDAE3A037B1FF8F92CF69812FDE49B4A353C4C56807823B76124216D39360FE7BA035196473895A84BCE8DED7046E571C55DF5711565DFC9AAD5353B1C541753E2D5228AEC74170F0DCB95FC72F78BB0B1278F49D2719E430335493244E4C7823E51EB47AFE564DB4CE2E3AF5D7B7892BE4346391AA46F5A0FE68872EC38F86345EA2D4697CFB7C6A902F2A908B4E095A9A74915A580A12F058118621888561FDB91F1AC0C20D825C37618ED05C9FA09531164BFD306FA730D6FBBFFB753C6C673693BC834F1B9EA65E25B7C291E4B3ECF4993049AC9C1878835CBF168F4FB4319B15EB7F9644F053BF463527B7AA32F8652BC5145FFFBF699EECF7DDDCFCFDE405531FA8CB5067444C3966D4AE6883BDED80F10D856CC846FCC130E1938FDB38FD7C5BD6CFC6AE749AD8D074180AD9CC40C6964A0DD969E719C8F30C3E2E319036E5B38E992EDE394BFAD45D83259DAD8C90DFB8AE23331A493909AA9BF603DE593174D15599343F8CBE01811890772FCDBC6A5302F06D4034EB5C995C14AAF07389E4838978363CE9858939993E53435B936500C700393E7E77ACED8BECFC9A7C5A17DF65A1F0B7F086C4D81CCFEB79F454EC35E42D180C079CDC1F54C830E5B83D05CACD92C45068FB283556B6809D192B3C189470A0EE0BB29224FF2E0FC6E0F93BF219B4785938A1A338609494F0C093D5660E01C76DCB52BA6F919CA377D8EBFDDB82F20CA8890B6422DE434A339E9A58251380BC4012E04B55CC8726E6C1F2450DB20872999A982F3B898C077A7F2E0D6BCB83263AC1087E16B0FFD73A65F9470087791DF23618A56B20C854E3B42E9B8FB1C73276DC0E8658A64EA35FE2A568C3A33EFEAA75AAABD1CDC552F2EFBAED5240C3AFDA873038B1E2739BB9C8B7812026097A15C074C99BBB12557943828746ADEB0567A0EFF60551902E0B76A4ACB6FD86F42E67D125CC840 -MD = A3EE93BF0E4A78E8CA8886D1D60A2E91F5B1F220EE1F90A39387BD0A -Len = 21137 -Msg = 42F18341663C5D35D8D31BAD495CABA483B270EBDC0A024647B2459EF14132EB20D5B98F118BB64B01A9D3C214473AF3BB3437F657666B3D1D7AC03A72B50C8C72CD6978A43BA0BB8FBF96A9D8E38FB0A93422D5F7AC3C8B8E02A525FEF24CCB31C93F497FD5B5CAE1686D59CC88FBA6E3F00802CF363247314C4083214FDBFDCC4A3F3DC4D020DD68ACD98113086882B1425361489B2FC0312E07ECC5F906B4053F91A9BEF7AF680F9F8F5BDB9E60985DDC06CC4B59A95ACE0585DAD8D901A3339B817E32A59AF07CEE5B188B12F93110F29470AAB6DA94747E6B354CBD078DC2D2750F259E04601F47BDF53CDF6E7B7FA87D41F65D00B136D4882AA843A61A2BCC60C13A0A2BA93F5FA6B23C02A1C0E9286EEC4438FAFE3FEB180D86A744E40A60F830C5F692DA54F45E7ACA86A49DBE1BC731F230D5282E0627726688CB96235644A87BB1E32C6A9FF5E0B8EFD0AF63A96E0F7084C2D9F2F1F80CF7920E1027601704C236590D10D393AE66FD4F3C657FE68ADB9E4985F5DDE4705C9462CEE63B7A268A5C1282D0D031B0B8511F0AF2679A48029732A6891820C416A37CCE482A21A636423A3AD7A0AA340E537CFA2F9A2A71884A57BEDFEF7E75C5DA25CE3E4B81AA679846422893852BB5692F69762ADE030380D4F5B916C46BB09942DABF409A7AD7CA76A50799FA4BC107551E74C70BB4C586EE2FB51860A28976BD94A2C56F08EC23940C6635E2C07DCE5288EDACA9141DAD41D1FF9BBA0C42D57F898ED2E296FB0C77793EFB6FF0D3AB6DF82CBAC50773838FE523CD66F50CCF833906D381A94C4CA1596B6ADED2983FD0CD31487EEBE33DCB474980BEF40DCF1AE65D51DCDE795D85900D897A23B719A2C6224BD4CD3A233C620ECB2538F56EB34B17F709E2E81F045C3479D2F6848106EDA317DCFC67E9218FB0CB78741A619F28F78973167EFBF1D24F81A4152DB2BC62AAFA396071ADA1D54A680AFA5C733FFCF3C7CA5008841D4E01D3EB278E34F2AFDAE151EC536D024CA62DDD0E4667C5EA9C416828FBD4604DC99EBC334C40DAEAFCBC7850CAC38204D0C028B23C6A112302EC3A428B0AF37378AC041C351E1378C811D70ABF975101B3D31B177064B2F0EB2C349CFCFEB185D8D262C041B04E42DCB548A0FE16E32D7425F57B064FD87210C5268350A737FBF87EC84B20D5A3605255B2F2FF62D54DEF231A379CB33CDA2414F78FF5878801A3FDD6564806DADF36F16B317C0E71510EB811856BE581993EFA50E93AC0F45AFC380F602F0832189A7C6F02274408FBC7FFD66E95AF4D447026BAE334722DF83E70AAF54A18DAE534368B6653434E9BFDE3021D6B69F12F2D7B903B4522DEC6FF6860378EFB19397C921F05A656636941DBD9CCE9276F9CC544EED7CF19814EB8748C093A3B95FF8DEF934193351E032E79E2029F41AC3CEE06F3BFED05896712DB28CCBFBF8E62CD216012FFA2EFA5AEEF756995F15F94C1012478A3B8DC8FABA9DF17E87E86902AF9D5859C0778DABD3BBA7F38FD1D7B04C342F0E6A361CE060C9F08B5540A5F143DE76349E3D9C63E4FF955723B3DC14ED2CCA56230DDCE88B241423A38A110E052B0591C22ADF42547AA0E35CEC2F1278D5EBC1984EFAE07B625777D8D5A077B84B522EE09FF3C48E633C7C00D58700E4360F4B017C812C75C041A92420DEE032893F5169DEE57B42109A3ED3DCC021B0C8C5D32F56A0E8D74FFD15676D42C4A1667C2DF6947EAAC6E16FCFA7D405BB743ED4FFF73258DA3C3228A0951BF838F5564C4352E2DDD8099A6A20FBFE554D36411389B27808E4E596D57DD26188B14D9E3EE44804B4D90BCF8811B460BC6743C4781AFD9F4F0F06F46E3FF6092402033762D2E024369FA7B1AA675526F2420212B2ED24AEC202D5200996854BA0B58FC634D9651286F9096804CA1758A04E40568752C23EAC947BE0BF9F6EA145F17716CC1C07FFE5EC71E2FAF4E3AB3BFAA40E60B6EB436CBD64152314CF28ED80F16E72C6A4A8BA1329D989B0399534723271EFC7C25C1A9D67A3962339DFB8C1553AE2B9472947DBAC3B09ED2F3214C3A38399401B089ED98EDBAB25E39B0A84FE18FB080050B4748A4F31097331B93AC72E4FAEA07EE5D1D74F595D2F5A881F9BBDDEF2BFBA91BAD27B9614762AEA6A9C2F9D61CCD6BE0BAE9D9B9DE24375FC9F97E6BD28D6523DF3389A052BDE91C214836A40E6F0C5195C5F4B9FECBDD3FB404DDC67F7D802F51F30A062A08552A2C55CEA749A001EF37426F193268A6BF6E6575341818A9E6193711B12EFCCE1AA201AB21AB07A4AEA79A515490A7A5CB3BFD1FEDE1B94F42CA417AEE69534D08463821B25B67B24C08012480040DB6236B591F9B2283B6FB9052D1468278836A2279AD09308A08BAB0A3F95A1DA4404FF30115DD72FF5886F829D303FC803EF5BC9E763BB4A99F4717A25334178A92A21F867E56184975E37FB2F4B7263A4EC6CD57D72AE509F081525876C2329D0364DC227448D3B8B5E4C918231D41C3373AE7024D6A1E7A2DB74A970082B9535F35A79C638309C689FAE224768533FABC52B37F29F5B5B123ACE962D14BA2C94A2CDD29E56D4D581B00B45031F152067F869834CD003DD104B9D38F110170605FBC9099CDD19018DBCBBBB5ED71E35D26240852312481026253A856D50F7272AA613FAA7FE226CB64C1AAB83EEB2C1372D341235FE8BF7785F5964DB1BA9D26E394007FC19E11AF243BF1F641DCF6CAFE5BBD877E96C2DDF20CC3B45B2D861A81D16246BAF1139EFCE5B93E34C4C18396B99FB09FC315A792166EAA4D9741BD91D86D0A7B758AE0245BD3428905A0446CABBE55A533D7C9A43C10692BA5FE089121FEDE04FD78A86C6E706958ECF0A9DB3B4FDF761EE36913BD359FB654920C9D8CB94CAD0571F208859ED41880B6481AE3FD9308C916BB9A86AF14F4A660F13D3B1A760F603DE37FDBF7987CD38B03E7469F1DFE94AD7C811CBC7AAE4BEF75C803EBFD0CB9AEC7911D0CE31D3ED717F5518E8A949AF212F052991EA232200C447556034D392E74BB44071BF92CD874316F82B9E1DAAA0A7612FCB3B833E125B16A7C61AB6C5BC7FF5334FB54520F6B3880A29E528DAB092094810816711E40DBDAC047F8FABD292B845DFFCC34A0FAFC27AD98F25BF8853C8634F0A117B3EA2A0144CDB63738A3AD3E0EE5A91029C49D280E5C4057535F1A5CBB64D6570596EABD9DBFA0A8E4B46A6B7D511F2CF87E0255200F33FEA41A6C356338847C3C0E2EFCA4305A02D75C4407BC4AB29A80AEA4CAE879226BB7CAF89F6B9136103B637A06CA2192276458CAB996F1335A83CAD1513D9748E96BF4E73957C159C1E32698C5065083DE7F8FEC45DB79178F5670140882A8039E17DE5A3039C056F2E471F3D83AF3B89AC43CDAC4D32871253411873EA544F53BFBB26F4AF63EC64652D5AD27B03050097E2A5A1F8AEE5FF86EC975251017C298D95C0962702DE4EC1632B6D21D9E3AB59E6E87F4B9DAC2A0E8D32A8B4C7F342A76FDA9734ADF27AAACED214ECFF9E8DD8D0B9028D7E8224D538AF88F504C9443A68A62DB6355219D7187F409A433FEE03085E2DCF001A97550E0A0126B391F5EC9E207EA7D5B72A9071B92E67892C7CE0D60B4B745958E224C36BE0A75F1505130EC409C562F69BDA902D0E962CD2725B797BB9DCD623EB22EC1DD08C3C928568B3B0D19AB16DB4D457CB6337D3D00 -MD = 48575E2BBE33E96D3652D8A4373840DA8EA5D131528F79FA528A7300 -Len = 21200 -Msg = 28109F1E97641E7C246CA9DEE6FBAA15D985A84292ECAFFE025F66A9DCAEB1F0F8CD724896A0BC2E6F7B1763D7C15B61ACBBF13FCE74782B8A7151527C9BD375D4BF37C15CA39E20C352B2E0B0D8474F904FCA4E039DCD6E1E54E872A481F8E1E5FFD3D65257FF814FA0E59B5ECECC30FB1EE1B73A87C050B9C0C8DB6BAB93A24ADA3FA480F215E19F63308CEC77D1BD5AC1864AE246071203C7499F03EABCA4093058D9A98E26F29DD91AB0AC556BF1A6ED7649E5559D6E3C93254E6F4CD7943585D6E1502BBC6CFA4A38223B35EED2BF658448259F827830D897942A3AD0A8A5CC7E3018451E4FC884C5B7CC65F54EE75EBFD7C1D4C88C71A36341327B9772CEB9F8B7B4B725165011B848C2DC917FD5514182E2698F9EA181FE6C9711906D296AB9835DB7501E2EBF79ECC4475091E6719C8C06599DD2B88670BDB8C4A28BDDF78C97B81BD2FD673D5910E1247C43FDEFADD30D92E0D9B6E0B456635F96FA477FE5ECFCFA9F94F5C1D766640C596298502B20CFB3BDFE7F3FD237FCBEA947D24D0360776030B0B661A9BDD214764D0E70E60EFC696B9BB63E3BF171C62D1BC2B6E53F941B3915F85FB4B9B2E74F391B5DAD291FE9F9629E02FC3FC5395EC66FA6FCC5338D353CFCD409A1CF4B6BBEA517EF5979D086DDE35C08C885C3B9EE5C8C59284E10A5041C9DEB7860B112E05E051655DC374271012ECE9EAC4C840D2C47469074B77F808189A0EA645EEE5F5EEC17FDCB51D0D1B2D8293B4C8A259375700C3FA8FC48A39CC8B32B22CF7BB714FDC7EACD7190BACE15987C7F8674F30F4663F1BB50470D25437948D4353FC2B96E790C19413E9F28EC04A02B37CB0036481803BB6728B6D8814BCDD89DCFE458084B8C8495C4BE33B5F02EC69F22465D5FAC7D85331E8ED290787336A73238448271A237A34730764C2A4DF64774AC6A2512231C54FA7D68FBA4E888331FA28D1B4143A20CEC2234524C522070A2F3AC336A416C079B58E2EA8B2D71188170B6416B7057B11B999026BD672E0159FA85BC0A1A2657AAA11B6742F121F08DC8CBA4CD1624A2A33798D5F7ED096B769B79B810EDC81C4E05C17B62D8B2DF2140C5DCAC0EA9B50908043425CEE2EC17C3C3E522D1272969F1F8ABEBE82E1E1D2AE7B64BA14E00C17A6635498FD7FECC6421C89BAD4CB78005EEAAE96978BBFA2015B282917ACCEA60B0E0AAA2CF1ED7A6E7ED0C9588D6A6C06E49339823C6180B9A1D0E6114C0DE9D89ECA817298C6E3BE3F53404787638B2F883248EEEF055C18FD476E07A7EB5F179C8613CF4DF01419C1C6D6309BC53E214BDA546F272A372B813EF083BB3905A996274BD0BE73C9B79135D8167FA5A058A7F926F9F315F4F823C44BA6F2800E25ED8E1659444D3CE47F1A58E5011660B40392A942E901DC9AB949094D28AC38D1D7A13357F716511D1B12A294BAA1FE6DA6BF6D81B830DCBACA4F4C09A53331379CB6C42C3ADA8D61322DE1FFECBB1A7AFE3279F6EB63C8F020A51925862330451A0002A6E1755EB264F3C74FB62DC92E9E6AB822C8762CB9F93CDF0659A54A5696AD13EC6CECBAEDEBA6A41323D7540AD59250F1FFFE616DDE671D673E37D4A521305E47A645576D6AF9A6991B17F3C7119DB463A76EC933F05905A1DD621AD15775EB9475EB0CDEB6CD93ACC120B396782445637F4F8DBB38A3AA17537D9170DAAE4E4DDD899B16168A2F9DC4BFDF7A9BEE07BB9F7C312EFB78D37AE437392DAA755B184FC51100C54E82FC1792AA87E58778FBC150EDCB8C9F337227B4F6EA5837DF8A08719789356281C8FC7CE0663EAC9BA76CA0AB589CD3C5A82EA2A1A996D2CFDB245F1908AD74934823B9352FF0939AB228F6F8C59980CCDA984C212A0892928B88DFC52C4FC34997A6F0285F451DB3A1D5DC4C800B33A6863852C44A2E675A98B38EE8526FB794EEE592962A938660E1B7114ABCD42924CA4D70045807C50985565EFE24F3303987C307DE754D8625A5B7339F054A90DB37CE0B9F5BA0595425B26712AF4435AB8082AE5BC1B211FC6EE44262D26D82A88E662A47688E3DE67CF825BC62E1B3E3F625B5481460E0BAC451DB6B67F40E9CB6B87C77F2EE63792305EB697B1F2F7573180B852615841F6B9DC8E5BE40519E9C2C782FD0069B8D3B2ACA33853CD29CDB1FEC735D266AB25EFE2A0FD47476E5CC1173E9717BF402C02843E56BC70D956A3DAEBB0EB5F02A4021E6259DF33B65A363365AB7EAEAB3320716842E70A86D3EFA3550C59BC0E14B05E38AB9C4E38FE9E7DCF9B3002EF850B7899A0E17539359AD4322D1D53AFBF9EC45E1A637E4F0BA10D9D3B244CD90FDBB44F9E7200DCA987B1A5E1255C833F3F9D5AF3504479D6A900D3190664AB93755478CCE9A160AD793D2061FE3BF8C28E601172D2B4685D517083148C1368C4D853B3A4182720D47CC7363D9561EF31F3C108BB9F6642A34FF38846F38464771F494347839AB072E8E9B788CEA50330FF7297F9428F97D095F776B9DE590E6550DFE2F33273A36D6A201103973032147474335A63E83F04D7DBB940F38919BB45FCF7A4D2EF846EB24FDC4DA65DE53E2922AC07E177F0FE1E65E82CDAF8F65948EB1EAA031F0371BC49F547EECE7C4CE905AE97EE7DBBC78AB347577AE3985121FEB81100D2BE2E5771C4118F240EAEBC3CEDC911EC7588359DA18908EE3D8302D5E544381B66DBED785DD684CD0DB274E648ADFCC36AC870DB8689DCCFEA3CA09711B0BFC32C8B7F0676D65D63761422F077C9CCAA2EC80BBDF742629EFA5D9C4CE5B3238ECC05E1804A7C044BAE3BB4DC3AD6AA3C592F71DA7F548148AA11F352D2F0D09B84FB8F5BE629C3AA7C68D980294A6A172669BE5D987588014BDC1E917463B829ED623B87BC5FF20675DF37BE0197A5E2F48891E6CADD2ED860CE154354D4854E6D08F0A28E673C7A152FF2FEB7634F0085FBCAB1FB205CCF3660FA288F5D214212343B5485934A256F043396A039539CDA52DB6C47A3AB7E2374CB2870E14CA6423312D2A9C48F67352E1EA2732707CA11785D8C27351CA769141D2090E79472645AF2729C158479B4D138B1BCEAAC70AB7DD221BD89EEDD8E153215E522C837D7554F45E8877B6544F7071D45E7EC545F7F9BB27DB95E9AB2298C8A513D2A2FF8828F243982FDF23E4829D0FD811E9C19E7B2960D8C976E3EE653788C262692210B5D105C73268F92A5B2ECF6C283D85874B5AE3F37BDC520E2F4175FCFB2175C57F46096F9EEA1E0C76080C765C75193A9563ED5AD6E0AAE0AB0F3F94459AE4B9AB0BAAF302E70C08D58C1E1DA8308FDCA1BAB172AEB07D37E79AFEE3F3067DDAD92BD4F51F51EC8E647B212FF0907C9078CDDBD4059FDF22350241CA508935442463A6C23AC28B2C2A968A7DB22E8E7D4CC9DCB3FB11797439CC0095F45D21E075390CE3483DCD09463A4E977B56CA19FFE4C6FBA28874D96AC2C66B657314303AA68839262733E903F074A1463A2DDC8EA016F6802F917614C3CF44DAE4B4F6E78F50621B017B6D42265997F596EBFD7C1388BDFEF983CC91B9F98C17F85C100CB37DC40C31FFAF2C882A271C7F6DDFA94BF69C7E50CB6D78E489F6DDFD26E34EDBDC9A6FEA4FFCB7678FA609C8D006933F4BECB85283B13C04C6A27A89B0C2CD27125DEC2C49646496288EBB162CEC4D5A30E3B83A90B54AC61812A908014F9D22CA21F98C12357028971900E57ACF8EBF095687E2D -MD = AE5334FB2339D288D373F4367325F6A06A3E78169BF81B3CCA088A82 -Len = 21263 -Msg = B6368A87C471493B370D3D71A70D7FE035088A466214D0B323BFFC1254831E0C0DDEDAA324318A2DB36A4FEE783D17914030F6FB3B454236BFB9BEA88F37EA39E3F8027EC759A456398F13C1FC09846D9DE3ABD2D1D9822C8CC02CE8D4350B8F1476AA754DAAE5232ABB9BCCDF3B4FEA9B311F6E89BD5B82162707B3B388552BBBE75F3955BDB8AB1E22725DE236DA22F24707AF997FAF024A0406845710B1834533C97CB18FEB53273D6503DBDD09D1429D568D1895F47CE60EA4E258485A5F7175D8C13B570C7FC23289A60507D75C21585371B58BE308AD39D5DDE4B23A554A9C87C76C7325074D6E0C9DB22A352F4873DEE9233F5872C61DF3E31A46C3F8FE2A5BA85DFC98436606BC6E7D6F19FF25829B01F3939DD9392475E590301C2997F4A82259C44AE76462F8F99D883E7C850CC9CA29AE11577621649DFBF7A37A5E3E028CB8BBC4F90AD1FEB2AD8FE33E8085B78CFE21096E49C1BD48A76A4193F7E34B77B6AE0427336EACD96A362C85C7821FB4FADA1E3BA0863D3092A7B3F623D2599E06836C7BC710779D949B59A5C2CE6586C914CAEF6DDF1D3BA7A52EE37C189A8FF66A3DDE3DAB2E6670473BC2C99908C5AD362D48DE6E4BD1A825F16D4F18C82FABE624B93A8873A516276024EEF0B0287AAA36EA8DC9700A4D0FCA81D5A16CD51868043A92B5B5F1EFA172679E4178035DAC99E4D598E62BE2381A59D180EDC73918094BB7A8C7344235AFEF9A0D3F5343DC7E56D9B34A6BDA7BC82F4C712126D1E7C9A47C136817FAD723BCA76CEB289492719539963042B93FEC2B99D4E747184E6C1D9B8EBFA8D314D5773D0B29D5558809377BD4AAF87A8AD1B1C70CC8D3EC015458B4C5C5FD54263E363916372C22DC25617004C94914478D258668780BC6D2AA22830984DC661D39B6177D255F9D89A7CDED58F6F2DEEBAC15E4F8F13137F358479DF27DA4601F53298DDEE7B9F18CEC4B4E9ADB7B671B0B19A151A452E826580BF5C0CED8EBBB11EF5AE35145A180D676A5D953D77C530924FEC72D64FC0C23493433F1722E9E73240C8CBFA3994DB55FDB656286CF12180227CAB269DF6B28CE75F42F8F0A2E79EEA0DED4B3B49E935BDA745CEF6EB81E7B91667953A2DA9DB51C81A7044529BC95C95948B8EBCEA5DC16B9C6F5E25CD105D42C7A1CACE34948006B5D52EE1779BE3B84B8D648E830018E8C47A1CF544E219B5EF98BDBFEE523E117CE6F6E0B0F68361D4086C689D2965352B72B2FEAA5B4DF4044F719C81C5F8D25E181D9350B907763527FB51ED14DE37691D2B4CD4E061E5764A2D49A7CAC8D2E9157F2F2E8DB55A0AE466D849F212470838EAE4B36ADF85321E249F763CF7B6F9442BFFAA4A81EE8DB807E4A8E8A98A5047CE47B1B89C4AFD438FD1B62D68BEDEFBD0E5935A59E63C5706C8028C7D3F01CE96D93A87A6F25FB0C2660A70877CD36D0932EC13C430D48621FE5A0C15F4A3AFDFBEF30228D0E98F5B9C7CDC51A8C1C7306A72217DF0461003750F39FDBA004AE737D8D3090971F695B58C59A0554CD91A6C3CD953A4E0AB00298DCB855C284202F03F2C0B648B342CEE3359118CA5C0E42B136FA77A9024DC829627D139B638D29496EFAA83150629C0523CA32962EC414432B689ABFEB0EC098BE7EB15C214C2515F1DF6C050C985E3F4DC07191E106DD439AEEF1F8123433A0AB74F4D039A55C1F5D3C5D2D1058905E91630D36DDD0F386748A373015D6D5B99C3F5306FB8E658B242B8E8110A76580093F2AA1B193252999D26054A204CFF7A2F85BD036253A0C6B9329A8CEE549C8AEC3E10ED52BA5F67DF09F760A9CEB429E2621B3CAC3978E2D67143E83E882D5DCB6D54A9342F65C4EC24462DA66A0B3A7E13A94877F9D1743AD44DBD49972578B88D4C5D63B4455E79F2652210F96AA5714D582CCC6E2C1BEF45CC1CF9A9253D9BAFF2023928BE64DD0F843AC2B47D49F3DCB08AD96C2F6167E1797F4B18FF3C0CDF15732A3E408A18288E0D3D93694F5062C8078B44F555D2B0ACC16560B6D3C1762F39A4A5ACA76438A798E404F71016CFC1CF88F939F4D83B88F72C1D179F9062EEE5DC08E912FF0B3B51A036C4F757A3D756AB926F7C8CAE4F07FF4394838DAE8CBAF5EC559FCB5121373CDE9064D97EB4A8B7C0DA32C4E49A87AC7B5268AA8DD309D31D4A06C3AA95D01CC27DB00FF9EA7C8C41876578BCF828DC0B5C58F563A8BC30EB2404920DF5876A02FB99C135DD5E653E93C1E6142918B7322500F492835F19A2AAD6B6D49C90D3ACE316182A3886D3AEDDE733FAAF9514901C9F577F4A3EC45EE20C6BEAAC741CEB2E0DE93881A54F0ED8B1BF220CABD1511DD3F74C8BA83B833C99F8315D141632855E2710F46E5790FB53EF2B49C3B435FA4369375D2BAB78C750CF29133FD85EC5D962D8F6D13F300C7B56EE9E61B2FD225394F2E0991039635F0B44506942A448DFDF40CB418A2D7C18626EE1DB222949A22530975D6EF4243AB0A1E1D77A7AD7AAFC9A8EC4FAC0E681B40049E4815BCE451BABEAE8B99FB3B20303E4B39DBF1865B69D6B62A7D2C00A5F5F43865C208CEF9C97EA71EDBEF439D18DB1E47804E9DF3988E135712F8184E7EA9FA8F25F29655AC4775498A6F02A2E5FB46887E665C2E24F2CDBCF03FE14541A45178F287C18D9C3D3DC51CC4770D23E701706A48AFDCE587F63D4C31D8C7A04BFE63B42BEFC76DB45DF88F79B828CE95E2E1584DF6DCFBF5C88AA389D50F089246DC0390B782A27F22F465C0EB87833203EA75BB3DE68A02442F145CD7167A33595FE7B4DBB5783CFC473A8B370B0C28E9DFBB8BC5E891F5580752A19484FDE748949E5D1EF4C8FF7B0543FB0357D1FE368EF2AADA65D14B1C3D6F047D989ABA76746847F59B6DD4863DBB52D99B878242FA8DB8BBD4712C7CE720B018C52A1E4B249B397664D96A8BDC35CE28054F4BB4DB2E1BF0B3CB50E685E89111D4E9C42BF54D04C9F8F84D3BF0615CC930B48D2E575382DD2F99E5F3CC8B291282CC0B7E06B6C0A55CE827A2D50C22F7E2FBFD64B9457DD258A6696C03CDED74EFC02CCED0B3CDD4FBBD747D64E0E601CF76A294303EB49701FD8FC66BB3F23B2DE29CCDAB5822DEE4CF1AAD697E91E15FC8067F66AF1DE203F725489056CF56044F7F862BB8EA66DAB5E7FB89ED39CD695D7FDA0E3B0DBAC282FF5676EAD2708A2D549A7D8DA505E5F795C7F60072707DFFABB68DCD4B370CF21D02A08734B4CBD4A9809F54B833AABB8D6A2E8265AADC30C993ECEAB96D663A292265591A8D767DE3F74EC6680B53AEA82252270F4B9A9AE2F58DCDC84A2DA21D7D2505832C2B0362B8EF1ACCF599EA892FAD13FB4586BFED059EA0B9DED25F3DBD0FC117D416A448C7306FFC7C289AD00C41A978C56849644200C6FDF37633C62F3F453248A345FBDD0159D2A5F8C2711568DA9A5893C93CE2E949075C27305DF7CA5B7EC490B2665971235E007154E0D0CEBC9C7399CF411C85F3E1D7A2AE46A52CD95ABCE5CF9187065D04B8E1C508EB24D486FCBC7B359428BE53826B5D7AE4E40AE992C3A43D75C9AA0F13D5C04E8755E3E849040002159F4225E6272BE10D5333E89047567F752C0EFBB406C2AEAF29E52258D06BD2571AF4A3875D529D180C521F2F17567E54EAC3070081EB8E7136E3622FFE85262F362BEC64C0EDAE0E6E3267632DAAA686BED82935822409210823DE7CCCC46FCAA9179D340B5EB79F429E495B42EA9990 -MD = C1271B57FC31C3AA16DD9A76872487AF525ECA74C50214392468B1B6 -Len = 21326 -Msg = 7E555C8E1D0D9E0333AA04274FBE4D5B6FA813F24C461818CCAEB65158B39E352BC5AFAF2983F3C210DCAC07D02DCE7F4F2B81696B986193065B206796205726AAD290A988EEE3530EC1094DE762B88678FA514D47E6C8B364F9453D1CC26A78880E9FF9134DC539C81E9EC7371A239001174DF157AB2D2D186750243C50AD397F5E922CF7B211E8C25DC3532AE0C7E9C50F153A28167A11B21AF04C8EAC21BA51804883FE6D2A88980F58679E988A7A654AA885E7532A5BDB93319D553157506EF35E62CAC899B498B446A60A14B133F124B866B4CAF82EEBF072CF1D9D04ACA83527F7A99BBD3F2FC78E5E7FE7A3755B49C46169335B0953B0DF55DF5487DA3EFF2B8983E4E1170505A29D61D21A167FF2154BCB3573A039ED4838FDFDB5BDF64F0D94454B67A0155E10BD6074161A96D181FF41139B1A4C4E9DFC238598728812B56BD0C108BC66BE39980A8E6F728970E8BE1D6C3E98A3A34C029F9539AA42AB6F9FCBAF0FBD7659EC8B59519E8ADDD3AB124D70A6AF865183CDFE7FC63B00CE9D321B7391C6C8638EA1E6C3B8A8FCFCC511AA98EE66763872A3FEF27780500CE8E58985BD57458E9C2CBB4361C29400946DA63093D56DA332D8930D0CFC64A0DC0C931966C0877C0C090B02FFB0F3A3A7B556DFB02670CC44AE2E216CC73AF767BF3BA449A869CA2102B1EDE9B111D81E0F6894C497E1244908FDAFD423C04C17DF7F19B62E625DA04780730ABADA788C96B4E6EDB99A4D3B19B7E80A9DC6BD90E28A303B5A923859C4E4B441D60C35E8E8063DBB10D465EBF79787B4D7B9046A67C62F0A8504ACBEC37F37DD7042D1081302F0A8E3E4AAF71CF2CED201F79243D13056EA47D0B134C522306E28EDE965498DAFEBC714E6AF9EAB37ECA6795BF92100131668EAB59B9752D3838838AB553E4C05A53F34E1724CD6B7022492648D83068DC18B5134F53C050ACA9782AD7C9BA1BE20533C209228356227DF351B720D6CEEF7CD3C0F73134CFE30CD6A5680F80D976962297C6D8799B1947D522C092FD181288172EDF3D9C1B9DDBEA87E2F063AADCDF638C06AB3091809C656FDCEF6894D62C33B585A55EBFFA6D897B34CA2C01D8E2BC647B8489596490A5615A238EC9E696FD3EA71376C00137BA5F50E2D94832A3EB32736DF79B46165BB10675C68796F894BCE299AFF974999EA619613AE76873E4298739F13C94A1E360F97A97F7FD1D1B1D79100424356540E1E4C75633F6C2B41AC100EDD2806B7059FFD31F8A4F2C4D2C957143A992785F57FFFFEBFF71AE94028522FBBC201B86568CB8EBB0B4B6AD8AA68CF932F455A37B7D4BE9071B99EEE14469FFDB6E2B84FBFEEB476593BC77068015FCB7D0F2CDB957996E868406E39B254310D9ACC1DFA37566B08F88DD47A359BC6902A567A43BD5BF141E530EA2B02D48EDA56A39B3734A2918427E32516551D934C41AF268AFC3709C13B3AC6FE7348A727AE009575397B29D8B6854FDA721D601CD6EA8A1FD9820DC6F6AB5C1E1BF9EBB328D9A9190D0BCE218B6949F5A6902CEDDE92293B823A89B7979A9691541F5548963CBC4206A2D50EF9B63B388AEE6E478E3D046833B2FFAF675E9C764B4FC3B10E7284FAB5D7C982D079CD830B6F17A05FBB0289F257A4A3F4A496B2583A124D085F29FED5A3EA7B09715814D1799A64D07DCB166A0444A4A6BA4AF4890678D5CAC5259E686CD328E0A0B3956FD3BE7B9E93CFDEFCDE9315FED995A4E9318B5016D6000C5D8EBBAF9B8C843B600054BD939EF1EAB95F27DFC824D6986CAE31A15B44FC05858932A6A8320FCE6327943A039C07B3D7A1A8E845E297F1A2BC556F82FB7A2A11836818FE36B0B4EF041C79B5678EBB36094639F30E3DD2140BCCD260E2685640A405818BCEB14CD774BF3A4A61C1817D5F58C99A0EE2683AE0E76D58C4D4CA82FAF9211711771E8ACB3B403AF45F52EA1860874FDD8411762D1DE392373193D9DE01F499F246FD517EAECBD36E3442FC7138384B8005426086A37D92D1130BC1FFD3EC2577C59C755EF526943E4BD56B54ACA889174DF6CF6C66BEA36A33A92B66E4789B3ECE23F0255C18356ACA198663E8F988A89F27B5906EB73173D192FD652AF5750E0916E88315C08996886378B60E6B76BE6B2E0D0284D210C6ADDE2DDA06BD5824959A881B0BE6EEC580A5C1B319B083D53D03B224DD89C206DE344FBF6042F47B757648ACE784DD9B5C4975E69DA0AF65E7895D43052BF15371D0E6DB6D030C7C0F418D07183FB70EE138270A57F0B2EE6E618BC006A0C8440F7A9B5969785B9D6284F6EB38404957D12B78DBCCE2CDC507D94DC7D64522ECD24D9E9903A2E14F8239D4F16A25075DA4222583EB209C60052B80CCB33204ECBB3A9BF56FCF2D3300FD63E87867438576735D12E30BD8C23459F9219D2AEDAB625EB6368EAC11257B483407218AEEED7E949280BA18193B95F940CB57BB8C6E5E1FF339594589F39A6C558AFBFF4731CBC0529FEDB903C3FD2AFFFF0FCE019779E02144E08CDFBEFA12A1FC9453656229EF60FFBDA00B86CB56E70622ADADD2F8896BA76A6181CE52A07E87E5A24267D69643CD1D8D41D514D8246FCEBD267409386B8B501237FA7D8E5D1547204B9D81A3D9D900230688B0163F11218C6655DAC4BB333B5A1DB025E28F8A00BF842ACAF4350CD01373F48EEBDDFFE57C9454D1A1461CE9E3CC79555B4264440AF9A06D601DD307AB4AC0E9AFAC171A0B0096BD8D279FC354AF89ED9198799D3860FD9552429C1F92D663009F4D38EBEF0B49868CB86AECAB4EE1114788726E4B4D6703798FAFDBBF7B63CA448C79A5892CA89FC035B9E1C3AFDDC22F863F82AEF1D09BA6D665D36F585912769770818D9B2AA1C3D4542453AD76293A936A5C0878C894CF6A174757C62A6EDF9C9B860DA542B83C6A2487168D6EF402C9777145C5E045C15943A9C79C7BD6D17DF636F7DE13FF133035E960305704E8C0CAC4FA350EEB956136948AA6D5CE2D689DC7240631D652F7EC7B25A3C3E47D10D7615A7A3EA8069405B54CA093D2CEA38933CB663727E18913726E1B149869E3BF1245F29554436E9AE132BF735DDBB68A7AC7E3B664DE0AA370AA46D9D4D427EC6E80075AF31408B917F2DA2BA39CA582DAD4315F0677A64315DBFAAAD7A7890F1E6653C6CDFCDDC5885AD7541BBF3B9751662B8DCE6A210E6E3CFE9FD5B367E2EB1B2CB2782AF0EF75B6C2BD0252DD98F3F98E717FB7BE6A545D0CB150A866F04CDF9B47604350BF62DC36D772B49C5FF6C3177BEC528D18E23AD9D79E47A54372287D88529D0AA370317C3DD499FF4925F2F90AEA01FD3C132A9E09220C941A16C7C456987EF4C12F5F1D1920BAF62097CE831C47C9CD37D3C3588AA564AFC1743E7E3D10AF6A7CE36C0BBC4195EC1C4FF08696A6035B5F78085036722516F7993458C1DDCF4140893E55DF5797E493C0691DC777942AC90B6601B54E9E4F8243E6E6EDCBED623FFC51A0BCE4F54BB7FE2ABEFC9D4CB3B6FDA07DB69014171B3DAB24A5B8CAEBDC826DA44A4486197839315620558DA80EC7111A75185AF092E21450F816980E5A72916560562387DF52B7ABD333858BFA5A5C35D0EA53B68914215B90F01C8446B53F7CF6B1EAFA97FB94EBB79149A74966B2F7194A1B4A8D5F630C62DE63A281767038275D6F8B5560C42BA09234467506DE85392482DC03CCD9E072E525B22120DD9E0F78E3CA5D92307FC696E5A54F4BE95BBE7A3B5C -MD = C2381E08B21354E8C83150FA551CF692FD357DFFBA9FD19EB8011F68 -Len = 21389 -Msg = 1D4EDCFE70B04DA171A8F0321E8BB7A9DE4E905D3C491C7745AF1CCA8B879178B35B2BF172031AA6AA580E4159522EC5C0D6A72129D12D069BE600061B4F492C920693C84BCA252AC021C404001F3DCFBFE68154ECCACD63FA21C0D554E224336BCBC022F05626A8F31F03AFA52662B5EB954A20A28635390169D79887E49E1343162113D4A2D8A4D71B8F3BD5EB0AA92DB6D65774D2F0AAFEBC45C832A073034B31553CFA482D933430DDEB77BD689163C9FDB13037D563867A8C66B48D2FDBFFE18FB2944261C42564AB057BCE948737E5A97A44B1D8139D2FDB2357A78619AE4BDE2ED37BE56F276C4418EA69B3B5A70D3AF9E5B123CD88BB4C93822AAF343A8F199FDCEBDCFF3F26BDAC29BBB4E40C6D4339DDABD3FC1F639354C62E22D2561B915A03FAA9DFD5CD3FA1823A36E045302B70BCBF417068DB5EB912B707C7694CB478FC280A08E84AF64ABCF05507B9EF01A878BEC61EE69F13461CD007F79E8F1DC8C23B1D1550521BB15BE182D9E915708C2AAF793969B4E3EB4854CEC19224A953D73D898591AE03602AA45612873B8196B6357A3EE45920F8FF2F7D8BA9FDB1278D8C0C43BC203279B940AC2FA6B80DADFEF2EDB1FD053F3E5D6D2C0BF14A4FFC77E66B2C80475B95AF93CE4B61C49C64FA7D6FE405D190450CDB88327F7DAF5671EAEC6D12206D0833074D4D95898D1FFC726861D355728BD47B859707047EFE994C8140496E845A28CE73D60A6DE7183D7F280F14AB2B3EF7F2146D99CA78B4516E5A05DF69FB8975F0493C43C78F1DAB087F59038F8C3939130BAC8686A3EE1ABB60F4E0C8C4045F2E5117E3E4D057980AD50F550DFCE73EC01C1E4A39232E3FC782252C84AC3A71B60AC788BCF2923D2D9BE3AB5F405FC7AB94A9D39A158824B305A45DB85A8C915487A0C9B7FFE4659D80C38BAC4152093E296B99975E17BBB632E47FA078C59110C79B58B4030A7228897C994100ADC9ACF31EAFE4AA9F48F513F90E5F4784FBF6FB811DD87BC522799B6967851E62178386F233D3D191658ADBE09BAA773283CE0A65287909553BE2A8CFACBA50F14F03211C6A75DE39A474F94F8FF5A7DF66A196B8FBB9579D5C6BBF254796E69E29CE8EE6D1CD917C384446A94494263E3DB59CA390A131BD5362C9DCB64E8A54487D1A8C269BAD6FB79F822FB34F90609F9DD238E2BF18EBEF57B206922B2BA6DBBD36E7A2411B32FC9E570F0DE37335ABFACB9A2831C40720D51A0C00994059549BE7246C1104B653C0AAFA9CFFCDC3B9C1F2328F280BFA497B302DEF198696CD4182021AC36AA4F92B77F9281591CCDF076776A90FF64F5EA32021BFB94EA90E4FBE7E1DD805E689310E9DB6A7E3CB65422EA2F3EFA01DAAD9766436C32E368CD07DFE7E95C5C4F82A2AC70F8373F785D18F0EBF13117C0D5FBB4A4160200E36F76592F5D5A3437A471CB6F74B5CB7267623403E36B8C4D09E94EAEBF1C9534F44BC5CCB904CB0AA3BB57D9A361AC735484D9FB786C7D28BF25B5934AFBB3381C3D127D1499D91144B364DD6D5D53B3ED28088A4B455D9AFDD356108E24D962A53CAC4C97A31364C4617DD139B87790917B867D3DDDD4446CA8DDD567546B3E30E37722308703FCD69619C2985EB9690963A63CF23C83BD5A9F95ECDBD45E66E6953C85779585E665DD034F8EF4DE35615BCEC87DA602C803EDAB7539FF5F0DCC84AC5C44072911B0CD65CA2723FA53E68CF87253252819D358D7DB252C2EC63E4B947C1FD7D16B0F1EF4EFCCA2CAAED863B66E5AF851395DA0926679D2B9FFE6D2774932050E0CA3F902EB7BE15CF4A0117ED4A38B743C3CE5EF03ABCA8F0E11A07C4A226D60938C1BF7193CD2E0AD5E23E53674CA9C6D2DCE8B09929669D9A2A569F8D6791EB8ED789F0FB4F505C9CEC4A8DD441DC11E0853FBFAB9ED6551694A0ACFE24FFDF34D7D4DEE400F8DE922C2D3ABE21AED9480AC291C1B811EF8F94E118C9DB76EFF8AF7896916181D4BF78EA73362A6E6ADA88EC776443DA866031345EBEB7059189D2808D7814FE536D244F5936AE2A4F931CBDC48F90403257D073F8712EC0B7204D6310DD7962DEFF74F2BED50480100538E6F6A275764FAE7CAE2FA01C14D617D6ECFD583798D387EC9CF4282A6006BD1F339942C10C4851FC86C398F8BE48F6F34312D6CB06EF4198DBE4B948E4198B06DC3E383501E9CD806B7A266ABCEA64085414AD4E0A0C1F1A47569B3C03A0704E72CE0D13ABFDF85979028F48F49BA15A801CCB1AE6EE95252AAF252527B83F7318DEA8F6F1A3EA80C34A6C2C2D69D009FFB9055F5CAC1E6079BC7E4E827FB8D7595B8C1F2A477CB1DF20DF9715BE2B733290D387807AEA149F0047CF3BCB9ECFD5FF06144BFAA0705CB39C030A4220BA55E0216A2CCE4FC38ED33969B660AA75A7617F4C7650634CCF2943AE15C01F6A907A532A2AC9B2E9B28985BA9292E59A9B419557819C8D9EF86A6B05BAB09761B2E997693BAFFD73B7CDCF4E4BAA19B18362038D8A4596FF5100EF47D98688BD88A0542B0B7FB8B319318F03B1B14BC4BB616842A2DF3E982075FED3869C1F488C9CD80C096D6196E35F79FE14EE3E972A912F4BDACA4DB5499320962014B9EDB0B416EAD8AD2B8F9066AD02794AF56A9C98114BC02A18CAAC36E9BA21D0E5766C4F0A1822D90EF68E0281A033155B3FD045E96C43E7F917F51DE7B5DF11A1D606DDFB0757984E509F1C73FCC1EA2E63EF5DB5EB889150A91B0D013C284A7E6F98DB7D31731AA28548A7AE0C412781FD4BA4A54CC7928A2E165528566114471D97013E4A6A4591667BD748315A466EE1B77B46C050B2F2BD294597B8EB05AC3DC489B0621CF2433945C3BFEE4875FBA03335944844475EE9E6C455E837026B591CB6DCD11380A65B2978C3D914E0388903CF7B58BD26609835ABFBF60B7636172C1BD01BCB9400AC7CE6E568B6062B6B18C8F66E240A8756653BD5389F32BD393106DFA39800B722178BED95004596E5286C5C0BB85640337E8C86776CADAF07A0AEEBA11994C79F47473AEE365E39F6E5655B2F9351E97D1F24197EEBA53761F3C2B48BF629989921779A2FD13C7634329F64EF8DCC632F75BDF0012E56AC9F47050ECF511B7D3B11D3D0F96D8230E736953C169EAB56A6CECA72D0A0F94CFEE76E332175B5C2301722F438CC59B647EF2D206F43A7CEA2E2750CAC6BE3AD83D41837CAA6DDE11C5DBF9818D8876E73703B32245D2DACF6A68D4BA2C537F690A0FA5692C0B8FFDF620C05EBBA1AB1E93B410C5E7B29CBFC90B05C0B7871921852FABEE204C17905AC8E2D79F2542791C6619D7EF912E88807C97A6129B617C823FF78DEA1C243C6C213E4C470B71758A44975ED8D6091F2452580A6FDDDF136E4EB31693FD56BD5104B24609F84A8A9FEFD2AE8E2C40C2DF4B862B44F6DD6449A0950A022EB869206637973E70D15D36F98B3E4970E96E53DCB531C0EB437ED4922767FE684FA87E923E4F227345C21490C4F7E7E250C3829721E153F717181228A5313B202239CDFB61211CBCDCC2ECBF7979AF8014E068FBCAF2F34BA30A0306841680CA4D3E5C30C096546A7D3B142FF8DE0C1E755ED60484BEDF31EB5439EA447C4E05A26DF79D681744E79EF8D6243A95D8DDF76445E3A62A670064E751DB58668F5211A82673C33FB36864D00DFB475B33FF6FD9E07428BAD849877525934BFF149099493123E612EDEAAF3AA2768FB7381F5ADA994D9E92B7A6969B22F0801BD4D18E83EB5A218E0 -MD = 12C93366A78B969F1881A3FC63785FE914DCDCEE690A5442801DCAF5 -Len = 21452 -Msg = 93941E3768572C7471A013E7496A1A9453BB7EAE6BB687479492E89E55EC26790E4DD42A781FF1A568FDAB1372E9E342B126362E80AD43DE3966C60622A3E162DCE75C18B6E9C3ECB0B389557B281A0849465B9C037EE0DF97C5227A529F3F629241880D81C3DAC305DC73688152E986B264273F63C1503D5DA5E203EABD08941C607A95B6147EB33C6AA7A02B16844389AD30FE7C0EEFD1DE36B06371DC338501358E965EEFC2619C6AE7848C15EAD8DA306825CC7602E33A399908EC30D909AE6DE5E1783686F34F3C76F6338A507EE772175E3BDC1EAC66D847A90A0B6A86D4B7B95D7B1AF9A252679F5095E5A43368FDB04B5D7E66A0E5681DE861ED4D3EF62F705FD54F14557F6BE9F6DD6C1364DC8336FF6628146F39DD6F70F8096EC70ACBCE11D81AFB62A5BC0F0ECC4FBC4F23406D22FA0371EEBF3CD5D0FBA7E74B3C5348F1C9FAA6BF587D1DC7FA485759918042E7D5D706068C715247773DC7D6A9807DFCC5814864DDBE9CE354D171378D3FD1ECBD59EB47C1084105DD77A7EDD6883CD581C8A8FB0F0525B7AEB0E458DCB694BE88FD6CB58A50E81BBF4199ED9872843732DFC1402B51F8AB21111BA6C7EB7BF8C0487AEBEFE7D6A1B8EF9C2E04A8A4C81B81E0A4FE7138B3258267C55B17BAE31C9F449A989FD845BB7A5752EF9B2A0ECEE0D69C93F37F021D57AE3608DDABE81FBE1DBBA1F51043C793CEEEA409EAFD609D62E550EE975A8FA0DCF5EB673F3080B7BD827315E4301BB0F2B36E012170F5F8728D16EF1273704C034AE27B48F1651605D6F2140433502B96BF94CAB5D11A515D5F0A3E0B204D0DAD4F41AC611F503969170D29621516773E3F1C57B961AA3F88B901FDD7A394CD4A34F62944E9A1CE75AD794D398D926D55E741235D55C7A32FB8451561922E689E3EB01A34A08922AC637F1837B2C6E0BD08A5F0BA009FF13BB09E2825886B01C7A57A9F4AEA76E1206B0E4299D811783C87A80819CFC0522C574E6669E1ABCA9F9B5B2573B23BB17F10CA0AAE90513D2F1BE979DA69ACB89F036E9B99EA4E68F162F7A83875F9B477E72E1FBBAACBB0FAE67997A768205A986AB75F887E4083926D58B28EABA567F9A2656632BD2F1D040153533DD32EEB65DFF91334ADB69297ACD431804E299B6FD80902AE2CB7B1147F69DFF85CA65FB183FF4D4FD1BDA4769563880BC838F62627382CB67F58B374F9F5BB249B0CA31F739ED897164FCBE2219482500AEFCD3E96CE77E0E1F822FEA82C845CCA0085FC65F960118BCBE6CCBBFB12F290E0A3ACC9533107FD3475A9DBE5DDB374AC3EADC232CC76AB214324071FBBEFB4834CA742A604D837BAFE0F9A39DC36712203295962A24632308954E0D83B31F2E46553E77D3FE083057A20D40DADB5221A49C91B26895EF963472505F6E4F5CC8F7B7F2E65EAEC26288482BCC0E550D8161613DAEE6D87168ECE8F0CF9F3F490A0B8952E6182CB7A3D32D1EC7316A98D97FB815C06F2097196848D467583BD1B6FF90C7C6D004F093547AC669C6C799D159B8C73D3ECAF5D3BDA4464084D784255C0E0C4B49885D3C051C775EC362D3B94E1AD93F611A9FF23E6586E471F77CD7C8BA7441DFA680866F98F5F2177863D89FABE39BC5EFCCBFFD16FCEFDA75FD1E6067A5E91FF2E30D2B00B26300D8764B1B234C65BABC82D0236567744AB4C667C541C70ADCA97C05DD7A416B4F03283A17EAC33A61E2F00213B7F50DFE8A5D264760F2BCAC5F184C758CE1FA33A221E186C3CE2CEC9D8FB3E17D08A912DE9BDF4206AF688BB652828A2043DEFD6A86657CC908229A46B34DAA8846609C209D0251E53DA35AC7E37539426F5D84FCC9465EB42A1470A08C0CD25B211388221396682C8CEBAD83775A7912854E4D3D647DDA215771E7AF11A2CE40869A92C0C99569259CA843B3E4CC39B4815FE07B4826161E2DFB18E48E292C813B917950C33E579AB4E643F95B78A6765AF1E110F22711C6DA2F6C5B718BE08E91E5BE13CFC2B871DAA198092BD1CEEBB3F20B62D1FA899D58F920F5736DDFA51D98B06779A3E922949402BC37C477E9A82AC51AC377FF30627E1FAFA2823B413280773E76B87D0B04BE67A4DEC2B6DB0EC3E09A25E7E2ADF0B63366A8B404EC82B174505FA0238C0ACACC32A32D09BE78EB0077EEFFF1D30CAF7F1A15E0D8E8BBAF70ACABA8D7D5F0C8EB39EC273FCE78166F3DF2A1A8971687A5826B9AF6068405A23275E77A66A1784A00C438BF4A352978823EE081F29DFC1D2758C27B90D1A8F6531A96566076DC7756A364CF3C985F742A29E6CC7560306D6978FEE3179189F08046188DF234559D6A4AFF776023D90446F932A4A4472A8E70E99037BA8E862EFD9FC77129F6F4E808CCDEEEF4A98FACD446E56881509902C00DFEB80E63181BEB0F1FF03C21868A6943C5A5632B93917E532AC5BD622E15E6FEB2DA254B7173473F8264F71AEF49AC0508D2F18FACAAB5B8D193690AF586C72E2C3E7AC9343A11C06BCDE30D1BDE1891A8571B0A260C07854409509637A3BDED574CE7B598F30BDBED4D53AA9F49B5D932B93FB45AC9F4940907B0C9EE077FC083BF5DF183E2D2F8EDCEEC7D91A43D1B2214BCFDF42DA3AAF8649C6A95681700326390E25FD326F340160E449C2E8898C37C150BA08E1FE2CE8BCC04AA5A61AFAFB7BC36FAABCD769EA4B5DBE69792BABB795622A89CDA3B25640C4704F8EEBA0C728601969123CA078F495BDAEFBF09D46540340DAB51D61B1544063700B96D7A934C7D92469109C2DF1E62CCBED253F48F931DD116EB6A9C3EB1E11BE102F698BA6319DF14AF37DF713606813A6FF363BA8707F179401B7D5E4256C9162F67738D0BE840B8FFAF7C660880F340B83F102B36E1123FB059E43946FECA18A9A9EC7882AD8C047F218120C0C0DBF0AF1D7009A97EB44037A18DC0DCAC29540B1CD82D58FD851356CF7E30168FF6C060A59DAF15702254331B53DDC950024574C5D66379CC972EC9B2E776AEE98F9C5BBAE80A47147A069428AC1814154CADB40FB86683FC1F0F40B5661A42B64CC4F55CAA61EC4FAD66C8D24CF8D70FCBB8AC131998DE5DA088D63A2B2D0BD9BAE21E12E457898E501DF5ECDB485ECD136F2BE93C46034F7A4F0526DFEA3C359AA75EA4DED34BC1EBDAA0BB0C253C5F17A197BA28A56BF9A1458227B3EE4DEBD21F5AD85A9FA1CE20D3FBD254D5E3C5339F40926C6D34DD6EABC2B9D391A3D224461934CAE50EB1B60F65A2E7AE695B6B120C5046C2F974096DE8BC41C2AC00191E1B588C7E4C1C6F574CEE8C52A05F654C7F2997F327AF9974B4F613F45E9CBEAE047EF20F9C4CC9813D27D2B5A192BF6DBACC0DF0D449C52ED6F43D932AB639CD8839DB0FD6402F5C0B039852EE02CA8838FE50805991A065BED64FD54D463BC865E9C3D86B901812CFEB3AE93047ED90D64CBAEEC21ADECE7DE7FE93E2769B7DC5385CCC2D0C8B8013CA45EA6278D48ABAC20159C57064584308ADC4567045FEBE395D7F7C5D21BC7A8B83F0906B84319900A16E5DCE54630B1A4AE2A0D40637EB28A7F5BC433F80A3B0BC508CEC11C538CAD423A62B1A8EDD1403AD954488F7ADB95FD6C93C1B77D4EF0FE9B8950A005F8A5788230172D2755145DED6F0B4336808687E1E85ADB9B8F692A76D523AF2E201086D795C8D58E74D35D28C5DDD6A8FAF2B65ADF1DCD6286165DE1B461200AE9CD2018FC65E501BE6DEFF37B77ECB39824F0C3A39CF4E5679F523EDA089CC5C8CCA60A2553F84794DCD29A45FCDD80 -MD = D48C73F0374F24954B7561CCE8E7CEA033716E0F8C931478E5ACC2DE -Len = 21515 -Msg = 431918C929304FF7F2A5B4A701BEF4D76C13BFB042826F122B02D6F5913A73E8A6D295CD879A1C7E923D990785898DC8FCE168EB81563C7F2E3F4EF312E1F8F8A3626FB37C1E20E3A8DE934D353CB65182A6DAB913E9689DE9B6E223BB912962623AB722DE92CD5BA4733EFFC1475254B9E18FE6E04748E3DF18FC69C4DEF04B4D69839162D04B16D362D4582C0D403DF3BE1C7ED8A12435E47644930221672CE4AB341827369F78AABCA1BE200581169778ABF69E2540CC1A89E6D9CD970ADC0F87D812E98DB57C08A98729EB3251BA9C5EBCCA2EA805D5219275ADBB0DFEA8C96941CF5783022F80882986FD8FEAB1628EEE3195E16CE20AD61EB42CC4061C347539333021B51487A5FC64C827235418C96AF8437CFF36FAE4B27A138203F54F4E21F98B5FA4284386BDABD9AE3D6DF1567AC3E0604FF060DB82C4FDCA0A831D6F7B1E8F3B463A4DEC0B903B2FB7A293BBBF27EE9DB4C3482915D2BA0D5A71DBCDCC77E721AA8D90359A8D74A1C30BC73CD80FB4C0EAEAD08C299AEABF32E90225C62AB40AB8264F0BE553E5A942D6913D7E75AA043C27D6FE43AB78FCEDB815300B593D037F78BAE5DAFDDEE483A4179D9DE92A01D116966A783D6B9D8FA785141ACD913167D9A36A13AB32D8782B0F908F6CA1E01CE3FA96F6E3E0827B0D9AD7502237C9C7064BF8CF604AC1133E7C4C17DB91897BE4E5712EE19BE94A009EC5CF34DD90D6311F260DF2356B10C773F474B9304182BEA5F42696B976450080B72B3D612F24BE6778419462F95AB577415DDA84893E51A9053D6B7B5C659D5F571E66262A15B1793E1061381663686E6D22E8946E77F05D3A5E963D5B00C5EF0CB32028B7BEB63A31B3738E683AF1A91BBB6786583DFAD168A62818B2FFA82001ED3CF6577B9FF33E4B2F4F9223B610303B43EFA6728D669C31003F620C0B556A3D4FC16E310116BAEFCCB69EB2988E1572041A7EC68DA5102D5E4531EE3A40367ADDAE94F6924485DD29787AD22274489B6201F2F3375C37BB454CB0B37C1A4106760035D72D224034CFB4F719E22D30750F1841A3791BED8605D17AB6BE53C382D0232BEED22B09AC38C66142BB70CB404AB0474B0AA0C934355988037D82B1DF57BDC52DB386BC1CE25A59E4DEC537F3DC5BBB90C6DED5299C81648FA827B5E81C34801F956E293CB33732587FBCAFB0147A05C3A90F5E3B145D33691AA2B3A9E84DE6E77EC466359CCABB5D34174F4DFA93291E33EB5CCA95387BFB74BB83A58FFA7910A2330763B1A222CDE0C9338FDD06CA494ED95780D4325565D5E42DEECCCA71E4EEDFFF9E1528ACFCD7F7639FC583C0D2C944CA45C85F7BA4E43651424CF4F3B17EC20E732F44A6D89E4F873E8AE5A42FD7012E7BED00F4585ABE306336BC6B55DFC747BD31538CD8B19ED8E218953CEBC2165F3F28DADB34AA7159F69B95E409C2C96EB2CDE0C505606623757A9BCFD5AD09A2316418A2A2F1A4829D7BBF1224422572516D543DDDACC71E989786A7E5ECFE615678C60E460558495BD6D1A9A6084B28F7455DE1441D2DA16963D307332B7DAC1AE3AEC3D7E7C69E1BB4AA04B47A7355840182069EBEC8727A0E7FF8B0DB7D53417F4919FCE55E3B0C407F6F5BF5CDBCCDCB5E2D7A9E1A9587761DF34B8911A1B184B0631403B007BF963AF38A305FBA6B5CE7959354F043E3282325C75343E0F6171245D66EBD01B84684B03D060EDEC217C742DC24019D7F3FC97CAEC11F7FFF0F2C3CB09B99865BE3A20F0BD5D9E0573386C7B02F0410AF95C1FB3A4818302EE5D54BDE2CF7CBAA5A7679B203233911AB26F61C0E8E25F5D5A193C9DDA87923BB555FA06080ACBF47E2FEC45115514933AD4F32B135082FB411A8797BC0B09BDD977A95957065B49CCB21C0AF1AAB6269D41A2FAD9FBA1961C9B81BB64AA2ACD5E19A6BD22E5CAA75550D0A9F3E1708ABC66002D1AC28295611AB8839265AE22AE0042975B1A5853869F785A1C9DA2779969C921199288D19883BD393B5BA18BE50FFC3CF3E4913635DF09DF171C9C108DE9DFCBA94177CAFE45FCFA23DE5400BD1EFC3494D48D63259D68AAA80F0B648AD45CD8E351C6752CAC965F7BBB63C0F7F0FDC2BCDD9C64CB6F0B3035F6B154D3E135FF41DAC101AC87B2699B0A68AD10985DC94175BDC586FED74A9F804F3060FAAAC558BF16465F30D5969EA2964BCC5DAF431E3C5E23BDDDA8CCF04A95F422A1FBA1D8DCA9D71AC3F837CACE88E27ED9CD62274FDBCE29A45DC513B495AA81F207A96D44D41414B08D95691042A4C57434F964DF63AF8291079D5DEF8682A41D38634302AF500AD25423F244D654CC211C46BCA25C91EFABAE7ACE80FDF0BC572E4B1BDF7D241C89FCD5F4D1CD2EE451738D53304DC4B6078B303CF1F0F2B2ABEC61CF4BBE0A8F47731DCBA3B604B5F733260D2DC3C568D136D7AD1EC5524726E80256E895FF3363AA4B9AD553213DBEAFC74A0F1EC326F363CE28F04454BC6776D2D4C2C9EEF4326E15C9873D36AB7FDE32A3F9E90B2B4BC2B9D85105D0D7D0498C8626D55138E325E21B511F1813147DF5374FE406D9BCA8CA487D81BC07A5A81B7662AC2F266C8DF0B676301C7195CC8A0BA7517FC4C9FE5F29331843DD3C8DBBC6E831026DFAA2157B42B53F42DC979907A28BF9290485E06D1A3B59D062084252A559C90D90110749959AB455C94AE9E558C338AA08A70AB958C8386CD5D585A50D209D5F7EC771696BFA90C4F58D7432C4B626D4F35DEAF87F356307EBD2BAE070A44666114D6A94268DF688E5CBB768DF8F582236177F35C4B6D2102ED143E6C45F1EEA537BD3BBC752381711172E41A52A9F9B15F6DD07C7C37607476294254B0445F56ADAC15C43EA43A0EDD6C241BD980A9CD668C8DF447CA5110384E71EACAD2124BF4066C40F25234815D8B5F5B1796FC2DB4D450D7D05E17D7AB35F69CDF1BFCA2960C5AAF3CB369218846BC64C880107B5B7D2B8CE84C0A9595484BD6B51EC30AB2215D3822355158257D3992C2F40C8CBC5612FBB4D1111EDC018B81E07E95AC9805E62CD79CA0E009D235D40E7002834FB51D9F9E2C4618B5127812FC501708298E2906137A93111D17F065E20F821852397661F0CB326ADC4B93B21F87EA68A93A555AD19D4F3E351074650059335A9D0FC16E1124A1FE6864A7FBF3959EA6C391F81D9A1297F2708A1C04B87A67AB78A71397C084D199F02DC1C7AB15F83E8E5B30200F44BB3CF524841AEC296F3F31E8B17E4884206810B2660A7ECE66CC37DEC88537C42CAA199BBE4C497125AF7CA8D0CD3EDA669B9854BA11D88471ED508FD1269D8EFE4C3478ADF3B8E30C767EBBF6FAF46BEF0F9DCBC74B0684101409E9BEC39878443F05A117DA57EB3B39554CDCC9F77FB6ADBFAD43EB451109C6821251DCED0F025F232522FCC23CE0D3329ADF3F0581AF384C97F9407B6532873F8C393E5A48BEA18FD7084127AF5A9B61A7CEB5F8E06448844F35317E5F779AEBD040E3591801FCCE3D1EB35DEC99A90FE4835F6620FF1A37D33B8C0589FC22BD496E186C79D59302EB32819C262E384420A40AE0809FD34D61756E5371CD7B024AD93761319D86EB65643871C17BDEEA3A5317757B1B943449197C837981E0742EFFCFE1CD76A90D06FFB7960C6AEE0D59DAECD843B02E228A342AF11BB9F8E586D0DCDBD240AF226CE8A51C6E6ECDD1267A0BCBAA4D321BAEC958905207C5E628C8E4A4B687A25F3808E76330FBBFCA89C73D24429DF4875BE76063ED8071BC4E0454F209EE0D678FC4E6E0 -MD = 53248EFC2882C6B05787784E1402BB05C254BB0639054C3ED448E378 -Len = 21578 -Msg = 381FCB62F54BB18178A391EEE0F31E59C44F2FBD63B81B689658347E17535C8DD881FEDE187AED39F143D0E1E7B7CEEE13A714F93F586751C22A47D4C22A7A77769FA940054A6E13045665BE9FC47CCDC07A0BD4C938DD112D07F40669526217EA037119F8768DD642F00116EE007A468F5C8307CF196221254FCDEF31564DFBCD3444148E398A843AEFDDC180E6DAB4B828A89EE9A027C5A1C8EE14D0F67B691DFD7DFCE18DE67C39A9426C641FEF3EE0B3701AD0C6270EFC2374E4FE90EF29496D92FB06EE3A039E857204F43BA7FF353E01164EF52D9F6337E9506F8C58A125F8D022812BC08BA100A8D1750A42A092293924762AFAA97CE675E81643EA4E51539C4C389F579BA72D5BD1758DC1364FD802C24B7C302056FFBD91EFCB2AE0575A714367FDEB37D48059A1F838BD1202B4F99E62A674539D60AAED6350800F71263FEBF0A6E3FE2DB1F4C02144D08E5651907C82B55CDF83A36A85E1142C05E28AAFC66F32C4820C6A8DDDFE304C3B0DFF5A48AA42A37E2108062CE3EA46719918133BABE041D30E533A8C1F23366E64E232B2CA2CAB07891E30743DB5DA9981D20DA1185D24304A76AA9DE54F01170DD95076560FAE206A4C222BBCD87401DABDAACF3617B14FA668C6F75329ACFB02BB06BC872D0EBCAF98F0DB02D9E0752DBB224A893E09824962654D5FEF7AD61D3B6460B618DE2A9FFEB6938F2F1716E5FD7B552352820B145685FE9199664A4F0B212CB1B8FBA31BCA62FA7F24D30FD767652F9B159ABCE69300EA5A156BF2AF5CA98073A55F7D4DD15132F8150DD3A00DE3458BA73CC35A5A5D429892FAA00F307931BCF5B9AE9646176E86DFF6D512A9172894452F91EFD56B186CC18012ADF91DF45AE3082084E9CF80219FF4229DDE5280ECA0E826D5517A41E805E723333973064BF9A6560A72F6B59049C0322AAB19FF54C093E3D7DC90AA1357364F0EAE5B33D775AFF5E15C5715921A0086DF5289BB394D165E366BC7F39A6BB7B41373F63B134224E0732412B0CEE762131CFC676424D6688C19A9B6BC7BC8AB96555203CD26CCCFAACA5B190F5802D35891641F1BCEE797A4BDB9683FFA7DD80C0DD9DCAD879F3A52732DEFE691070EBD813CC5C413965F3A20B76F9278942153DAF2F1E1656A129049D03CD99D5492EF6905583AB017ED3131A17978A103B6D3E45855B9D7C7CF6B7316EEC94CA08C4EF4F70F8E9D1C32397D82164BFCACABF760148095425BF2181049B6B9068A3D01991FDFD2905E167A57CCEEB7EA06C292FCF2BFA522279E0A22375B3B816A8BAB4B58DC6968B0C75CD55B257F81A05E7476EFD630673503A39CCE81B8878E625A7FCFF0D488F20E137A8178A9521B3421A122AC075B989091FC3F185BB1D706D2FD2EEA8FAD2EF909EFCDA719A44D96DFFB80C11D28227115576C607A5095B5118A488F2550F64B47B49D7735B14851C25643F23AF0391351B3B562FD2351E64271EC23521BAA5E3C3A5F09BF833FAD3C23332E37F67EE010DD008510AAEC8E9D5A346FD04C4452862EB0F1700C6E33DF9203F889522C25D87DE88512FA8D7CEDEA2625F72F4DF2FC7CF517D2C77829AA86C1401656F44BC90C41D68290DF8851AB47C9F6E8D8CF9C90ABD2640559C90F4F6491C2B783E19522D887704082AC8BAD7492EFA96C1A7983E5E0E3A13388EBEAE94845C6FDD3CE17255465D741078C38AF2BD084A60AAA6029B27E250B0172022B77D7E750CEFE0D14018EA6899552E0923A9CF4D0B1D50DC62EC95E50776F77488408AB554354BE69647FCA3EC3F06601DA3D7AB613FA4FA6E14731EF3702AE7D6CBD1C6DEB90AA48E4B5CCB501849A962A8AE6652641B6DF01378C0A72ECE8624B029E5D8DF1BD32DD4CFEE1C0127C822E094F57C78A44BDCDE9FC400FF422AB00060C2E46A5B1AFCDAEE788BA67B62F938156D731E6D900958D20A7E6EF56BFB4BC76D50F5B624405588A772FA45AB062335CB0CA0ACF3B99D7D2A3DAE02130A7153A95CBD805194B5CFB0706F64FF7EB97D352CC7D4A8089AF88D7178398DA3144200E6C0126EF888E5219199EEFF696F1AB5B9ADB4F12C282A6B1E168CBE52AB8FFFC615FF16568D4AE7557C085D3E440CF8B831CAE232F10093B08B27574B19DE248D116CF2A4E7B43BEDDFE5C987B6C4BACF9CEA8A503E923BB129A522865469B44529799B7CEF8A1CA92DB63F47B73C42F65E9657E2F8CB5824F10BEA413EF9DF22DBF1C3D12A2E8B92E5AD08D612DEB50C8B5BBAAA2647C17C4FE60E862408D12367047F637C1AFF7DC6687361F21BE099C3F9913EBEE16807FD0E69D8FAEE0E0D77EE6A98CE4D7EA84892384D988FBBCFD7697037EA5FB4824121BF027DC13D2A8B44424BEC8D8FABF66DAF304616E8727794B4C3B920134D043291B2177F77FB7792E2C2309B7009042B202F4C6CB6605465EC18BEA251B6D0EA37867D826E9599D70441EA3066F76D5EDA8C66A4CAAC05DD5E1C06037B2D0CB17317B8D6B8A9C83B63D74D33D6BE32AF02C5B9795E3B5DA970412E04E869E6ADDA367360C4591E5AF4F1A108A32CE0B302230EFAFAD919EC768D10F64710D03CBBB01B68CF4016461849C5E4A4AC44B390D487B1722BC8E2EC2E1CF3454466C4252C7DDE2CA2CB244F349556BE40F14E4BBABFCF7CD831A36C3F7C3754B1BC0E7E46E5EC80808A6E420F50CA7622C85233B88C788870DA7505AB4A1808F7E56E59A45E4ED49361E401FFDE49E32657F1288BD0021BB761F058156719B070389CDA7F6E404BDAD1FE93BD478B4B727E4534D55CCE802B658318988116C590849D5ABCA6EDFAFCDABFC605CA61BCFFEE4ADBBF216EADA3C4D6EB0972D50AB0A47D7682F11ED5E28D77F94F575247942FDA0E262AF9A847E5F504389E35F44C41BB75AD98648C3D33CA654F3CFF05DD72E429BB055373B955BD9D936B142E773EFA6E290C48087B87F69868C4987522D1A7884EA4A9494A40D0CA7AE91DDE160D02B7DE915CBCA6CD1BF9B6AA5A76A711B6FC67AE05F7BA860C9CF8FAE9B865E72B968EA35942A637DAB0ED4494E75354700E8827E4C53F153C0CC02A8AF6CBC5B8AF568BDA1360D77A84F141E50F5436AB1A0B5762ED18C44850A0D9DE0D3A1B2466CDD7F3E5B2582FA5DE88BCEC67FBEF3100CA2E4CD42546620116025524D2841D90950CB5AC2E05B4B3DBD3E52E049E1FF9C0CEF41F6A15B884F875E27E1CA2EA69BBADF8426CE47197ACB58E8B2F7EACAC041FFC7A692D7098148CFBA981DCF2DBBD17261292AD44B67910AEA347256F2069B1C95C819A8ACAF7726DED5B9933C56CFF15409B0CB4F41083AA9D76FFA14AE59A21160AEB2C569846F3179F384C6073AA3259FAAC1A85596BF5C6ED24440892BF2B9F5FF1A9DCD33B98CE96C60509773CF2CB356CE58A75EB98589F06003B86AB0506EAEB13DD3C88320A0D618CABAFBFED67B435FCAD38C891A4641A5D3818FEC2BF2B51E6D706770BF2C308A1ACFA9679D6C2717CFD9F7EDB59972206E4F3BF40AC250FD21B1FDBC034ADB64547BFE2945634B31EE26394ECC2D505B7694F25962C71D4CEBC81FD91BE9B37FB24C3A6D52E3C09D22A6AD8F4D74348C7C214652A97B10DAC0CB54B4D48EBF03CE1876238FB09C31630D57B9760D8E3FDD3C8D2F1A8DC27EB1C96A6EE0D7C62AB738134C3990CB2E95DE2DBC3AFBEDCBC96D9C08743884AC2FAF66214009955498025C75EC612CED98387FD1D595A4A6B6C4223B813901F4AFFEB0BFF055776AEE454DD9E6DA8D5CD5D9E425A24D694A0E41F6289AA86DEB00 -MD = 1AC7953AFA2F381E402C5583EFADFEFEF24DFF5DC2CD1D032E4133EC -Len = 21641 -Msg = CE08C1E25CEAFD36ED592A92B564B1E2F9BC3B1A800BD1CD623D71C0E2C49424E922CF957993A0AC2A3490E3BF750B9EB918F98F21B196134F2C9FF54BA83D0D8D6F40E539C0F68014DF46D6BB6581B754E4D473542CA4BC5A35F3B6C694D8CE514BDC959ED7A019265DD91D823160B4BECFFF60734E4621E6EB75B9E03292A89DE3530F4189E5FD8C41A010B2A52296C5A0011F5A60C4BF5E67AD123239BC2064A536A66BD0B0C4F9DF754ADF3187F151890481565DD4F5F9E89C3E1684E7C62AF24A30606A000847678645981B4494EBB8F0E3B179E23543F4226BB7969E84BF04955EBD7796E3CEDF45F1D42A1EE43C06BFBDA42ABFD7A67310A3C30F969560015703EC55EE8F181FE29AEA389263B75EAD458B48C1FF4398FC721C844836574F172242529605A88B4C2CFD6E60E3709B018D8D7F26E1C78845C3E1965C0EE289F82978DDB8EF0CB43591BC42C310114F0A40FB48168A79199F94FA49E064201D86E6080CDBAC79CD5D61929C6C4F771E41F8FAF2883611C3C4E78F9F92E419379EFA0E2F0EB461602BE4870C95B79AA3A9D1F3BB65175378DCB419F2D8188165F912C2425F36BC4F1F6ED6120AEF3D74CB761D07E16949E5CFA2195390C9F3E0A8FA0DE7DAEE795B3BBF1BB55640EA69E7121B5F967831CDBB13AFE291DCAE648BA00F4D0033AB5B254B020647BAA6813A5B361A69439B47824936C9EF976B762CB84B610CA35C6F614E2DD1B876647A09CBA83DFCE7B9079DF1EA33F35B6AAE5F1AE663D0944A997A069C61ACC6EB111AF4FE4917F7C6B9A736EB9CF38CBC55034FB559E45070129EAE76BBA21F6A943CD3D370BB00235998F6799B4012EE2486E07DED131750A22031D09B59346972F78252F0D98B9DC43589F883A1E2B4E5E405A090C677BD5C47769FEC8AA55E5A7A5623B3E1005549EFB079768E9CB7A18DF08A6AFD93ABF7226330433C8AF76F1DAD9F084E81AD8C5D26CC36932F77526CC34BE97700DA4AEEBF877E27A528D6D40D62D2FD1DE80BA77C1AAC932E9A9C1D01392812573D9CD5DD5AA643AB4F67B7829F22227FBA49B33D74CAD2BB77CA9C8D1C43E0CEF80B15DC96B1C7B0ABA786F6B090C02BCD8494888AA3903DF089B1815155228614B3DA4A527D346668D8223778BDE77BAB9630736F2BBF9B908AC0AB6ED6CCFA35A2FCF01FC5E541A3C436EBEAF23897DAA085917B921C3FFE64D0FD9D652471C686BE62F15AEFCAC8E398E960AE9495E5C6986F7380880A5780DA08E106184FF77ECAA82AD290A94FA3E6CF5DB77ABD45B9A0427EDBF9B33D977117B2DF16A5E49EEEA6C00045B3BD36029813CFCED7FD2B837DD5E931C45B161190ABAF5375F20062346AADEC69829B1B0E126CA773578FE800324A5FFE15FBB744910762BF1496B5D48D8FD1FDBA63D81940FC0023B9A213D6F2294E1760908990FBE1FBE04F2DB2017B0B2BDFD02509C4554572789A9A1527692B0C37E598729010224CD54C714AB9A3BF02B0F518EB89EC1420A152281575C76F8A0F746F0DB1CC021A486767F9D9FB9AC40F9A01FD3FBFA2FECCCE0BB361BB2C8206FF68145E2C254B761575EA0CE63936829B50CBC2BBABD9CB6D17553F7B377EA53C1E91B9D36ADB1C4D70B4FCA0735CA10BCE46D41E375E1957BD4893B4764E7F370C39415DA7F871CE618C78E5A47196A1A2A0AA7EB12588E59307E7CEFF646EC2E759E692B20A497CA885A2F9B14FAE528FEE12713644F67D59231D82D18600994B7F5C1F7D749600923151630CD631C11CC4E6D852BD769137B38C08D930951B0842AC845F76B838B087528645426BF19ACB66B01C1A855A1E4E86445A8F9A5423542084EF5C429ABFD3CB9F662B098133E5C2E800C764F285E737F2868B217CEC6919033CF0DA2856FA34B0DF61C4B7C5E2C59DDB16DF00D59F93C604D8BA84E7F9BBD0789A82D602D0E0E046D0C381EDC387C494C9E5D4A54125EBB29104E421161175599FBAC459D3E75A7A05B8093D3EA5890BA1931096BF3EFAACA794B65B2C5481D2EA6C6F67B837FF3BA6B60C3187363307162DF9927E5114A80F530B2E9438B13A01C8B9F34196B4749CE9D3D43FBBD892CD0EBDFCA3C417E20897250FD23BC3F007BE473499ECB61ADD487701C58EC5818B87397D4BA40319CA091C4D200312D8DD629D9892D39742A882034439AF94196784CE9A0A84CC9948514267720824C4C102ED7425923B6AE902425970C55E6F044AF0C505EE232C5D7FFE5589ED6CFEAD80B880F6F3FA7CECD58241BBE060549AB644AE64BBF8005A3FE55625729D95666537FAE16F01646641241CC32600AB70E65AA1D2B291617B37B53AA10F6388FCC5B79EEF7B080A0FD5175B68711E4F56306CEC0428B96E48A8D85AA27D655B3CB85D1C8EA27B4203CADE0904A438F13510364C2279E8AECE2D1C2AB1A505A525BDF59016CC84124CFB00032DC1D3CD259108C873453E54E3C551B361C42C1CDFCBA0006384BABFF1A33D1A97B897FE90C6F10EFD4E312823CE4EC849EA05ACD6528BD1ECF840C86B6D889C845133537FAAD30E785EC1A15F7979D7559ADA7920F3B29C5F36473544578CA899C433943ECF62A99287BFD751C524862DA0E2AA92493D6DE2369DE21148F70145CA9477080CC23A1C12FEB441C56B4033F77E8D73F7BA63FF6D3F8AA4C0DEC95C310DE2DCD18DBB3F1962BCAB015CDE1AF859115C945C5A7EA9B778211738F5BEC3F58FCFBFD7D17F8067F5262116854F4076D8B436316755ECE12EDD06D16E001099B1E1459D9B2DD0515F10C4EBFF1030F632085CF482F81C6AAD61C2438C2EAB45776E628184BF6C3B58A911B3DC72E740A5B61B4EB66DA19F23F281F996B296C82AA37BEA3F6AECED39E71B037340EFBE9978273E717E26887E3B2E13E7C892463B50AF808112FC2FA5E5E55C14B1107B3D4261AB233FC39273DB3633135B049BB94305E4C71240F5AA2D318D6E26E622322ED7E0CA0CB23BFE7AC00C48018819F8434DF0D7AE53360278B01EA55BDF9B85A9DF6D6F199579CE3503081E7BB920978A0C7D623CF2C60467C67F88309F3946BD33E9B072A1349B5D3FFDF00F511085190FF7C85F83CA2A2A51DA0C3FDA4502F5D5891FD796B8B92FE0E561D79EB75A3D501527F07B741973FE5D784818A3941FA048E760B6BC7E9B1148C402F3E47C7B342A892A68618CBCBDA24B64707C22EEEDE493248B86F941CA54B53AB8EF0AA77DDAD6EF206DCD7D6204F21A2281786191BAE7A3AFCEFD334821C785BE6FDCF9FE913CDE0F5E60535B817F6422BCF05AF543215734BB33D081D7BCC81C482F35DA1F6DE84E22630CED0A4459B0386152798209FFD13C0305DBF362B4D7C039C170B97A9BC37B771A6784AF9F3DED27F83E1A076110D4CCF10E41EA1F1B5D743853EFB3B61ECEA8165B75EF3FED01A52A4CB4CC5071083BF18E6FACD21A1756B8767C4A6826FFCCF097FF2DC80FD3640EF408599360D501BFA192F6BB17133A9F441A5221601F8027EC8D261CAA1980615F9C8A78DD83A0DAD54D2A857B591713E15EC8EF5C2F8ABDFBF5A36E92EA2E8E92704959288AF9B9D7FFEF9FA62F0280555FECD7E41A208C56FA1E2AAB0325A4D4A16137B32EEC8374FD05A5EAD2F62C10C47C5428743B33B650E0F306C3298F49D884A8E186F049C63594B03D12DC69151E6CD5D2EF09FFBCC97E49F04926F0276119AED289658473E2E2A8B68F7797119DEAA10CF69ACCA3E6099581A92114CAFFA226038DCDD4FE9924B87A92D993E43CD2363AC0CBB5ED531BF4629A19BFE3BC4C59233D5257242C00 -MD = E596206CDB51A726AF5616A6FD00829BFD90EE2A8DFAC16A691BFE0A -Len = 21704 -Msg = 06729047C0D4A7B3020865F527F0657EA5397EB58090ABD01912C485E73854AA9AA0394CB53D53E3D240D1BD6CBD1E1E353529CB87833B5F476483E684F11748D5AB7A1F18F5B76E5938458486D4D5B1FE1AF7EC2A139CF5C4B755165E182F23B9E69EDEDC39375F0F87B24DAB233049DB0B34627D53DABAD0AC3351FDD94010DB51AD3182F1B1276C498296DDD759ADC3384EE949E4B2B6412CFE3E8EF769DCAF76BE4B2FEDCE054515EE24F7601EB1553516187954BC0689EF278071EA7B95D58E7FF2116B450728E47571140AB10A327C8E6D333EF044DFA10866A82B9728D3F5F343E1B33064E1E860881DF05D78B77B1F363DA7D3EE4209E8E2426B6969B5544AFD81343FAACEE915269C6D3B12C22F2A5FA4E7A518C5539228373192F85D8123105B04C2866DEB8967E7CEC3C0FCCEDA19FDB84C72597E0EDFEEC620F8380E3CD5B5AC2053EAE404CD6052AAE7BC7C666628AAC1FC722244A6E80536246C9894C47BDCDA71C239E2FD276E6E041DF8A930639F7993300D68FDA7E2EACB310F49D48049A8B6B1BE42FED5BB26179D6E4328E60411AFA7BBEA122EA9037450D80E5FDF13C93BB7190BF447E3008A34ECA6EAE08AC71A5446BB568D4DF8CA4512B9BBEF21648ACF2DFEC95CD2D2985C97C461DA651C1C87DFAE35668C008001017A48292B4B0B050C00124446594FB27A418E3549171D151E5794070ACAAAA97B88045AEB3BDFFEA9CB3372950CDD727350EEFDF06E7652BCD1910312B35F5D4EF3B8418BBEEB52657A36CCB7979CCABEC0C4B2D22014F60F0E847DED96698A81A7F2F3E35932CC5D34D3A5EC366507DCF179309C1F4DE6018806284876A96CC9BC54FB5D9E5B3127C74723E0C3AF1FFFB01E4EDE2C59413F1FF56F8346C71E30DE5A66FE94878C0D7A217D754C94A7C3ACAE3AD264A3D2C7DF93AA29B4E0A1AB966E36FC8A81CDDE9C492E4A09A9C61E63C540A457489C7CE6D9EF3046C77812B97237833DA0D8E6DA300302210CC009F39BEAAA0ED1AA107FF0C06D210CA678ACD357709B25242DA3DE144BB397D9A3CF8441039766407A67BC9297C108E7A11E98B09046B4866C9A912817B6568A04CE10F43BAC7BF211DAEB90EC1A281437B55F88C6E883EF9A271D8573EACD965360FD8F84DADD72EAA12377A7E1F47FA49BD7C3961A15EF5C311CE62CCB43032CD86C509A100EF8A250EE84B9F7F9730196A86ADEE92FA93233B2E32C87AF90915B23B44CDA9186DD51EB9A049C478C2A5B363831AC5FD170DC84312440AA8C83B7FC44254BE6F4E81FF2D66F57B12D78905B89600E537754A46CC5B6C5CE2B6B04F8D6F1CB60359539023BAFC78AA0E834BA8709433F8C6F0ADD3D4D743F4B6FB484C10A4267505097082F30BA7DB81BDB2476CAE452B40F67409536141428B264CDB832D1D611CEFB5D4D1326428F9778F929C8C182346042CFA5FAFF0819667EF4ED29E8D92279A2999545C3335285F072DC952E7C7FC1116ED0C5115C6CE7ADC993C23A8B0C96C2884F70817B5C9063C75FF1875A7B080B76B9AA32E6F7E4E8464AFA40F7123AC79C45D88DAAC71D76F795F192C6CEBDE8C99F10CEB9E90F022E5801A78922F389725BB236AFB5DC28CBBF1C9BE9617CEA56C80C531BB7AC227F6B996C68583B74BFF78EF44D185E0D0E5E9D6F34B250DCC4639E3A1A937CDB96E78A217E03AC900834B4ABAA495C9BD9DBC2C4E85463CD1C6D1F4D8746EE4B58BAD78CBEE21CA3E53E6B6D42645FB96C9417A374EB62DF7F7D23983B53E1DA754487F3C0711712499DAEEA9E6AB939CBEBEA79D5B9C7299C06CE53CC8B0C8F8381E04C525CC691443318B70E447E83F485E18EBE4524DF0FE0F47ECBBA87EEFE4F709B7C84274F037E89D3E140DC2BD608F8BCD5F51B3FBF4EF93EDBD45AA7AE5326D18B719A5DC6AE91400E2B6C88E699C9F9A95BABE33E98397F77FB0FCCEA59F3BC02A479E6FE1059DFED546644DFBEC3F20FBDF4AA53D025C66DAB24875021D7934ECBCC0619AABE7F553C9287DD6FB916D2C5B8DA77555D91597D895B9F8E0C601EBCD38364C91F28445CE09D445A9E71493FE35FF723149E73DEA9EED1E19517B5A735F7ABD8D92D45472EEF1D2C4EAAAD6FDBBE9570950BEE94613AE2A934E1A2C7EE899F2861AE17BF8D60FCC1005ABEC7240C7EF98E7DF442E587FE2407CDEDAF6C4AD725FE54AC880A47530E08B6452F5D9D044833CD117EE4E1A242FDC07545AA74B559D394D837E55EBF07FD2D6771811DF95791E293A52A972B682446A29C4CE3E02F71565D537D12EEE21E1FF558C9B74FD4914C6684AB897D9C4FCC4A5F2685B78A8162DC1BB70203F5005ACC0257252E0FF9EFC43B102E09E9221BF908B83B497A88ED83D0DB7C8FACA741A28BC5A910048764C5098AA7B419F24AE5E1E2B013405E3976D938E781FBB10BA679E855D2FDCB772EE96BA264208CF4812607EE0BE58C307568063789AC783EC937C68607C87CD00F34EBFCFD2635E5C6B2F7D88469FDF8723B81312D3402C1AE85C3C12023880940595175D586298D215661A38A363DF4263A51F434362FD5A11BF69B121065BB08CEB2DAF2D9F844646916E4A2AFBABA77999E7664AF9670CBF68E7E4B10834A52CCF02E45A431E06A2760084475A74C4C66F8FF90F34C1D83D70EF8D6A3790A6E3BC9D816F1AB038D5C3140C8F36E66D3976BD831CCFD88C84E7788CF2A3246C8153A27454B0E7A3C59E292927F1DC04EE81E2AA291C06C8BB173B53FBF39ECFD6EC1F57A7478E37199DC39D058283BD046ABE25E91422B0B25329D175A7D0BFA21E297C96A5C3F1979AF84752A2FB67BCB0511B790124BD96ED13749F1E922C4ACE355DB866011A1551DCC9548EB46B961FEFF4F2851055833BC4083BA712E4FB9C30C49928683AD783FC370393A55F904FDEF279C0A4E1DC9E1ED7E9058FA5FE363AB1E17A7242D0921809CCAE1B9E5F28FA553F7CA3E58FCEF7BAEB88D03DA5E2C06FECD357C12CB04C5AB12DAFE4D68AD3C7AA9302C9E2E6E4B86D1C96C55FAC6F7B63196A15E8182C1BF0206119D67DF749E1428B3FB137AE7C6EBAF75A0FC64163C21C44329CB4457F7D4F36959E8A93462AAF1BFFCFDE02EC1A2C7E67891DC64C1EAF2A44DD7D8ECFA5F7D596C2C66C18A4D8B07E1909FA87884816F514EC17AF286DB0FB353BEFFF94F810942B56062A4A84A45324773BD26ED4B5CCF4E10BF715110FDAC5C4C05A3EF4A3134BC9C9A7B5774D50DC817EB6A5AA3BAC029AEB5505204DB40811F69ECF17EBC206746D7FAEC59B26170FF23EF456235A66CDA3B84188495771E53421C725671788633472365D474167A0BF9BA7B212BC6FD91C4210570FA3FEDB1ECF6FC77D049830EB1E991951DF439DC2116F72E9AE1679B452088FF0D8C76A4486EFF15EF9E7D80E529A97B368700A4C6C78847084505C8D9177F08C96FC4BAF5BE3F4043A21B6FCC200E7F59CFC8BCB71A1E2FB9D9AE85414D92D09BC6E2686EDA670EB5E903FC9406CCB0501F8BFA16C0167E2F48899BD14258D59E58AAA8F450387C9D80F66A6F9D15FABEC9CE121866B2B6BA09CC93165B8A567F86FE0423813D7A0B9ACDC505DB6FBF6D5063DC231BE1E2D801E80DCF0A82D3D8C98E80E3ADE2CDF4D8EBFB9966CA1C68FABF0E3136380E6AD17517607E2A36D41017E60EC0D20D6B17E5504493C94FBDA647E3C2195379B98D84C1DA0634577DC5FBC3638D9433FDB32F7DC25E52B621DB7F3A0194F3CCBBE51BE61B55B4E5D27E0BCB2712F6CD3A29AE2C5C8F9A29FE836C02B6E9086AA4D92C57C5AA8996F4561F -MD = ED18DAE77C7757F7AE75FDB085CA7F0D5029360EC0DE889D07090BC5 -Len = 21767 -Msg = D6847E4A965704122C5846F59BE46C2181574E0881E50ADD16D8B5C9D264F7B90401A1BC912B9B7C08E8C2B5F2EE55A2EDC54742292A28FAF1F29E926198E87E7B9F71D87B9D3D931267CEE80FAB8997CF9BCEAB568E2227696775CA21649ABC2359E5EFEB2453A1E44189DF536D3FE9C4E1D628578F1786ED4C71E1805FAAFAE826EAA38233E2BB4EDABF66CEE65CCD285AE544C89E4F1BFB9B7460742379BCA295D05E691384DCEF29376906A39EA1C85B43F986E2D5B0503FE4C37296FA93769993F2045848483C6EA535ED09EE4A408179B1EDBB0A3911DD7C1C3648D8415BB86DB5A09768FD14850CB2DEE0601A63BBB7C9326638029DC407E220BC604F6887684700C736DC754E0ABBDCB5F8D2911FA487DBB9FD709E084A2DA19BC60DE5DB5C97408549E23B0FDFFB46FBF9B2281B974CDF62146150B2D64C309FB3919EB64C7984696766D903BF31B0B4CC1D5EECC582104E5AF2B4B22B20392A3DF0E4DC14D1E71CD187C3526C44C8ED029A4FC18107ECCEDA7E192A946F7996209E0A54DB04F9410E441EBB4606A31921FBEF5C5D906029E616819DDFDAD111649212FEA262BA7E051542F51A340437622968ED7BCD22784E9B35EC90C20300E1E0C99DB2BDC5C9377362FB5416FFEC684E6BD97680D74BB2FE5BC3CD12AC7188D6B3D1677B53B1559BE99AF21C128FE1EE0D615CD13C2B7B32A4E50663C95D1CD12E7F7D9A7FF97E0369BA723770BE5CA5E26814ED106C80C52CF526E419CC9117E0444109BDC7DDDAE8889E1A6D545DED08085884E5C7C6B47E3CDC82F41F18BDABADB3E40F6861D68208C8AD89840CAA349000E2B4A68630DCDD662CFB6704C7E9794F1E0C1A9CD2E5DDD3172D02431BE96D8C543A59FF235A12640714E7E007294C846A811E65219011C5E547520B81EFAF19439F6687F1B43A47A197061F9C2DB53E87D723462AFA3067665FE648E71F54F22A955967EB029835A2806CF09884945A327B1B89E8F1883968D6D607C28A07A9C03659525F2D23FD9CCB99A1A5B88140E08BF88C9F3A563A78D4F36850FB2E14F5020045AD9C23581697A745B29704FA714E2088CE52A509ED0879104AFF7B561658DD6F9A017E99B2D7173ACE8C68A6C111CBB4C51801AC6A3EBD9A76B6F4946CEF3E827DE015F9CC492760FAAEC9C4C4422479048A9277ACA4BC458C9B424363F146A85EFC6ACF76C42E6070AEFD0C2688D71E057D3E190E2590C6D45FC8CAF02C62124BAD9ABD30FEA2E865E26513707EC22401AD2BECEC910CA9BC7DEEE35E00707338AAEBF5970715D2B2E12E537237798743BD3536C6A23EB20BF1BB80138FAC3CADECB5DADF14C673D26F4CC4A1C19318B5C4C2AE9655342A27558681C3135DFDA197C6B80094F4AF014EFDE699FEFDB5BC26AD8EF889AD05B668A76B2CB0884F12DA250031A391F79605EEE6EBDE3CEE6FBDFC8CA0111B29145A1EB99B701021690243AC8559AF2BECFEB9DAB425351BFEEAC3F9AB43E71FDA94446DB0937230C91B4E27E4C17349B958953625CB25AFD69BB7954A5B1FBBDDFE8C582A664F9DBD3445B5326080F667413737A2140DBC0DFFA7FAC7C2339BE5A045D3D284F54CA323A8A6E26D63F75EC85EC37567A3E77B5C1A695E1068707BD66C7A047B682EA9D44B919C2DBF7FBFEC8956F9402C9922E549F766AB050397B44562703DD013CFCEAD2FD1F6965464F2FA311F351CCA70F31EB8587335CFE770518215D419BABC9CB6CA03AE49A485BCC41328D9D2D0299FFD8A68DE5A1FCF881AEAECD1333E53AFEC55E4EA857BF34E732C47BA37BE540E68FA9E527C3258C2E19EFB534E560F71CF73E5685C82E40BC052BB55F68B071A14C0839B00AC643A6805601B6B6BC7ADC2D572AEAAB80361E3A7406154A30985F4B9E6BC46854D8092B15EF679867E282CD0CFCDDA9B43D2AF1D0ECEF2026C4198721749A88CF3AB7B41DB6088373F10BB1F0384D875D13BC85F7E6E31BE99547DF2295F6B6ADCFD05DD5BED2A09828966A2F2DF8C96AD5BBFCD0A81341C9FFE06A439A7EFCBDAE6DBD12E122F5B345754371ACE03A5840B8DF602350D31791D016BF0DE2AE25E84970F1A2629DCBC665E5EEF9D7915436CF4FB0709583596010D9D4198B56BD2891E9478FE12E9E5A89A372A5ECF6A729279D010727E518196623F646D58E9D4EDAEB535B578F0BFFC6B2E405D3DC19BA0D898DE918327E5942D0145D85997DBD55A8AA7CD200815300E3DEB7A18ADD49E1B78DDB9AD712615ED063B17D60372762D8DC492EFB3A4080642F3ADAFDE4E7A5002E5FE04C0729F08C539017EAD4CD98FD77457104609EF4D2FD59E0CE18EE3ADFB3F2136C944A6DB2D1459D7280A691CCEE937D27C42E9E082D6D7775F0E8567FD085974D842E043E0CF49F2179FF3BEAA3F158AE636969EE727E4517194D16F3A44916B5CEAF9173704F12653B33043128E72638E88E49ED036F30A67BD860E4986EBCAA07428D4DC53A39393594960C54BA4418E9C5EE2CFE5A812A1C44623E0F580355CFBE200129FE5EFDEF7FDE62CBC303B0F773AF5D77E981DF5D968EE260D2AAC7E2F71FACA3977300B6B6EB95887AC8EAC0C8C924A442AFB262C1373EA37AB7E16905E32F935D8BF60F2210CDBFB682A6AC8B700AA29D7B718735CCE8AC87CCDC510F83872CBC460884764E93635641CDCF77CC3DCE12FF07757E12A3E682631A6E8B7FC394DFD6C59477E70D1AE4E5D232282AE6596126E7C5530EFE03C381BFAB8E464D276C5E0294A79735BA1BB86B93D4DB3EB7D30DC013BAD7C9B89F1EDC07FEB10BBC67D4227978E2DE928622A25ADF3E35CAEBCE708CAA70926226A99DD883DCDC002E995F25BCA69C26D419C8252FCE92ECB52AB0A416DE86AF3796F9A80DDA878CFD9BA54FA1489B6BCCABA30EC0AF0BD470E791B63ED499DA76035986837BC870E03504F3727F69DCDC6A9E588AE9F533D6E7F7439A4B958F0E36F62D651F1A38BEADA5A49318FCDA884ABEF6964CA41A939459C1ED3F4D5E669DC275392A9AC42987D73A7C881F05A14844EAECAF345C3D419DAB4364CB3058D0D7B5A97447D347E23CEA8384DEBEB54A9B667EB38179852C5E772D55E2D89E07B483C74F3EDE64D5DC33703111EBD1BC533BD23DA91BD6A91F9D8103052F3C6B09756C03B2E7E7826C16228B34EE9B2638DF2B0E2C188E9D2CAB237CFDC35FB18CCE4C112B54556E40164068269229A10B4501234A1B11A6D3D3C4AA066D729C9AF6E3B9C9EBD9B876F7F157ADE37ED08D20FDEAE6BDB42C8E07711676363B5D97949983A1F3F9C1FB5D7521F5EF25BB039DA99EF5479585FE37A0A0E1F08917AC68F94F32F552AAA14A427770E1AE92679B99500403D75C103185A6BEED3F468F165A231599BBC32CAE139F2EFA5D288534677E8E56BCB2E4239FEED72E8AEA3075C37918211A0A808696719CCF0CB25BDFB70833178C5E945244A729A05061ADBEB296A0164A811019EA444D2D2D3FC45859C26FC41161D22D1A1EFDCA8E55A39F5AFE0BB515235220FA07328EC7858E33F96AC4728FE93A02D7D6AC0F04D6C19A65440B58D9D24161510B61A886F56AC19540435B5C8886E7AC244C941B69845C72065A30015A1EE51CA9907F3A4DA07A9B52F98E883FF756ED7ED9E4EA19D90A5A5623D7CA556C300C206060E5702FD73DAD7D08F3DFB519190B0312B3DE577CCD4DCA19BB2C75469D18F5FBF817C9861003B14D6A75E95C2BE1AD4D8ECE17BA942226AC6FA54ACD884A5003CD7ED938BB2700AED05877E6C79C381932DDDB06FB3E92798A962B7261E70C14C4FB9019302F075C214FBEE2C4A -MD = 79A3C7527635DF7761A3D519F97B64E96391B90E592CE92FDAEB1AE0 -Len = 21830 -Msg = 60DEF16B8FBB8039D95069B247FE368763794A9ACA5C0D5F6ACC18782B5A04F740BADB51CBECD6F1CE2F016962307476F2CC10331A743B8650FEA70B99B85B681D57A1BE7665D8CF4377449F2B55E38BE15899AC522153C2E7D974DE02CE441DDCB8D3E2B9949E65756C8E5C25100451380C441A012525B420717781BFB9EB8FE79DA7574D6A372ACC5AFA0B6EC2BB3AAC0DFC1F6158AD74616002EEE729709072DFE9562A5C722B79980CDB7B1567CFB3316BB03E5ED3AFA6694E4878ED57E72B0CEE361D2D3BDB7079B0D9EE43638611C3F9B67143E3860B460E510A10C6BCE412907A6BF81B3D8BA4715FA422B68CDD16A418DCEA81E0F9D10EEEC9D4279FE907D68CC8A2DFD8A34988D1FBC39D3CC59F24BBF8A96A4DAE9DFC4F945BD49415308C43F05CB750B2F185D491A4E20B3FC6B7469F262E96BE1B2241963D7BDD97B81AAF8A56BB8A110C552F539CA98CA7D4AD27CB04D452A97528487843DE833AF592714BB0BD4FB2BF8A2840418DC6E50EF95BF5D2861349B14E029FF2C2DB7BE7189AC392C26903EDB929BBC50DB023207F70611E2AEFF54988315D1B0C3FDEB0AE69F92D248D930DBDC7A1CA8F5E7E2216A2984AC911D79288B80F2C3E6871E58F5B4C828C48A799B96A9208AB284FB736BEFCD3C9E466867CD380077CBF155010C9C0B55927DBA5ABB5C7D4913FFB3F5E98A1AA957760E713360B2C6FB11497448E2C10A56B2844BAB329D7CF27B412A36B6204060446E09B9A71ABDAE0F01FBB15E0A54903F25967C4EE436BD98DEF0F183DF0D22126F29C2A6846381898619E95F13342C11E7F66CD1901EFB335D61980B94DC9D72090C04207624668EF793B18E49548657F8D3427CC51E98CFE62BDB32C1AE6D86767F4ABCC23E1BACB4EF3BDECD76FA8CD4D71D7BE043A31963A4783D035961C85F23086F43BD159600D2EDD62E1DBA641F82D343D43D30E617178526886BF6DBA2F46BA7F1618663FCA4CDACFC60A3FE2114C3B3806302F96D776AE1AE8FA69F733F43EC2544ED4C45F82FB1A079EEE3031AF8ABDC20997F8A4FFD3D6B3E65142A64DF921514967F200D8BAC9E3CD055E18E2AFE905CDAD0B424D74FE70DBC47FCD00C61F65926D0453EB4BD41DD85E6244A1191BC05FA4BA83A7C19327F8980A5A9C8D42E30CE3FC37CB685658EBC19164C498C53F6BF1834BF1D6D5C8BA932F86D209545CBCC1661864AAEF99AF79DB74D4DB113DD85D7A6C150F3994CBBE59DED6BB37F868C641DD65ECC9FFDFA0A7274E2C67EE4B86419897C5B6300436765C2FCFAE52B5CD6EAC281F493D683BDBCEFEB9C9DC720843E62AF3625D84DB5209ED7988DAF655BC45D8414047160236DCC02371F7622E20DB5F7EC9DC7AAD6AFE142921520EE428F91B8D3E489CC444478CAFDFFF3E5E919468844058B6F8167B4F04D03822E3247ED214488C33C7DCEC22DB27D86FADC41CAD876B2D22301C6201E142FAE31DAD6B64ACCCE1D94DAFB9CA0298CB47BE8EF7DCE159EFF9FDB79838E60C16FA323A58B772DFFE3C267347EA034DF0CC0A857D25A41F7866B738E08CC806308467D4E8C59114F6CAD09758D925330B4F64D024AE87EE7D1BD82C7F0777C2ED55FE15A2137FB080741B3DA401651680C23183438E35AB9130277E696C12A2434B7FC626C5C43C4C8685BE44223FDDA21E1D0E2A66FAFE7A98DB922FDAD9368C914DF3AFB69438D0DB4BDC187A9F8A6F89F21C80538B26EBF70E2868457C9F596544B81E7840ED457AF0A7791CE277208409C57B7389BD8825F25400FDC0D16A50C0E862E264CE5D7C8902DCA8B8304D0AC71044D5CFD0A9D4BB120D93803942004562936201E591DE8A674BFB83D51865C4C804220E25D5A38735AD872B24F5A9C3A17C2EF1C2B47D9A97531564FC4926563270ADDE54DFE364762EA5787F80C3D03AAD9B572AE0F09008F5C54521F8F59BEF8E01BCA025DD33653829D79304B6FE3D302B0CE33ED4E60A962FEC74DDDF8D25D82F6413E92154B3C165341649DA0B9F536AD4B8FEE05F2274C904C6209305EBB0E9F1F6801BAA1A08D9FA14F36DEDBA1BBB8F1A311E27CE8AA8080B3DDFAA6B32089A375E917461402A446769EE7C81EA6AAD3BE083F300CD82E15F02E93A4A02159044BA17DBE287F3076FEBA598BA6365106A8CFDC4AF80A3453E175AA894871FEED46C2E17FC7CC4A28B3996FC80EB5F0970A5F2FE8A2E0D324CCA9271A0A40F362DB8F0CB84B7FDB7B6C5A175E0364B242E0498088863A846542CA746F7BF3FDA951CB87887728B983936B27981F570570538241571379A20E63B6628C690F7E62CA0A744D880F32EA3134DA6A77D5FCFDD2CE5464D14DF9333F041123C2388BF952CFB805997BDC02C04B30A2E17CF5C9BDD37642C0D37408DE60CE518102FD1F7B0A492DF069BA48E826D2604BF04FE4B3DC934D63D6AAE5AC23BE678C77FB3209E353071FB60E7FFDBB9B1CEF9AB65FA4B060F49E4DE732845B509D26EA386F6E3AD94408E2BFD637E4C6E595FEA8FBB4E0E51333BEC68BAF670185012DFD9956B080EE20864F7FEAFBEBB33C334B791FB5791E357BF6861220260BA222C4AF6DCDD20139A365E57351D2B9E100F2D32A83BEBABF5BDD686597F189218E115FE76FC9D132FC681FE64CEFECA142BA1DCAE641509740964367B75C8C366EAFBBD99824890F8FD8852F77B81CC05E5A20E2CE716CD354F7C2A424B8771E8BAF4F3C3CC3C340F474507F360E9788215D9914B97ADDD8A8496226774A072A35098D3FE1F4F3E35F2493AE9514FEEC8BF68C3825E7E376E6A0F9C3F9C099353869B2B5B6C8391468B6103F4C625408B1E191F5C515EF82D2999170CA9F88548D0FC74A0FFD0985CB9F6AD7A8804A1E93FCFCE2AC31082AC31EAC5A5352DA76D02FBDE7DEBDA81D7CD9E3BB949E6E7B865D8E1E88D38E83BB26A54C773C4D7D13F9A1B96FB57D4B42280E56875F411699F9BC8CA5983F8F87CBCBA819587323B6E30E97CC20ACA1409FDE955D6B4F0BFD69ADB126B2396D1C47517609D4BA97DF4251A8E2C56E6B4A2A13DAF80ACD88ADD8A4587D7503C8C6DEC46F8C74EAA2AEEE2A3A9A489609B171062802B2D83DCB9A74AB473E73F64A449BCD6284CDD656622F42670573644E8CC7DAEC5B8EAB098DC2BC8EB6D78E0C8B3F0F31E777AE3AB82AA27C1D3917C2728EE1E4A897E1475BACB9CB8784DB7DEA2AE8EBA5EB8BEC19BF24A39B6E2C566F172479BCCD0B7AFB64E23EDF785886CE6709DF6219BAB2196FA64419435231AB66445D9A79C92805B64DF7949B7509911B560831D2A55CE40392DF6EE8921000858149B7564AFC840E152D941FD44F7D6006AC836BC4DA8498705F9E9D34E915CDE4D564601A40CB3879291BA969B4EDECC8056B325207ED07A5DA65E2541280E01DFFCA2766C2B898046A321C17E0FD6EBF9466F61F6C41BEFB1F1D75AA609F72D19B7576C1967DB976D91128E87F6DFB3E58968A23C8C3BE7FD27E23CC46E459B905EE57384F6BA63284AD0D29033A22600C35AA6A348858FFBB26E74007E1463DBC0B07E5A982E6A63BB0BB988B26CB2C454E3BEF5E6A413D8A4BAC16D80F2A6C8138F4650EF29AEA0DB2D04F15DCE1FF5BA77FED4CDF158F951DF90FECFFCF2B0967B4A966174B37A90BEFCB74AD6FC346E8702201D6D558ADDD31B1AC2DCE6CA9D605834360838051435A2E3814C0ED5D62FED7F54FE40D29598649E75ADF51233A6932297E247431F86FD348D89B262DF2CD65F0CB5DAEE7A14D5F5352CA58674AB91B753C93E0A4C40E19C6FFE45C27445903FA53D33D379013A0C59631114BE2B193263E98DB47F3BA8 -MD = ED4753D2662D301A97E0E9146FB0CA89F4ADEDEAC403598765254A54 -Len = 21893 -Msg = C3AF7C1CAFD55451DD253485809BF29D6BD81A991D126A6DC80220EAF4E20433F96E085AF55308B2B29144318266942064981E89571BD4FDD399FFA536F7DA45904C8E9B0B2349DEFE014E19CD2A3E247906A6F3B0BF44114DF6652A668CFC9801EC07271ED2BBAF9BAFD8AFC5828E65763BFC77EFB3F03D38E72A069D9494C7170DE8A0E116C26E1E5A1A9CB5AC96EFAD71EF43E57316BA0A7A5AF0DD3F298F6B4EA2855BE583612C25FE3437D13B852A17014800DB052C50281851FE7E47BF6451BBF341F0410C8DDC3DBBD005F077CDB0519D6C4E2EB2265C032C8204D5FECF4DCBA84DD99550FAABE09B036C0E936B66481169CE53B0EF4F468197E8AF08B2324D65FC5B63B9F163A3F976ADEFB75D61A1FC5AB9169972EF77C42BEA3D2935F62DE0920B82E89D3C5423DC9E85693D7501DD150F679B0D3149896202F07805B3804980996F79599DB0E82C8198295C29B2F6B2606BE231841D6EBA5CF83F2C3AAF24ED05691FB7EA8EAC424471558DB9CB5434649FF9D7409F1064C57289D6A96B4D6FEDFE52A6F95E3E11790B2467207DADFDC06470804B2C83EFC48A617EC74FA09B21695328B80125E1E3B2BD800EC6507EA9D4929D8C8D71751B91E0727847A7FAF02405FF40FCB7C4826C0893A7C1FCD72A4CE862187756901D70EC79782CE6D36AE480CE421068D329E68BFF0F9A9B0045F0E064747EB34A2898D9F0C668477A0462566BF7A51AC31107888B06315DF0B2141082E8550C7F1DAFD2C9DAF9EB4F23220579E6BA3E4CE7F8A9F5A0AE045679BBCFD2D902B073F6E27CC26648CFC2CAE4CBDDD3DCB331FA9460ED0F87B97ADE4A8ED1D7F936478B4DAAB3B2E6D0F5DA9DB2B1CE29ECAF7A093AF3BB0CF2A01AC0C8B82828EFB7F3AA700BF92E7389318E98041A5D980C41B32AD5959B50E8FB32EEC4ECC47829CA255122D38B420FCC0193F714F448BDBC2236E3ECE6B586902960F07FE8DAEA0051C2C1FAEBC4DD6FC902F87E55D0D409B5ECF9430DCEDDF467B94843F37691D51329E8CD524453259364594F92F47357C9FF3AD75A23BC3286C6397D4AFCA6F06BF321702CA72CB5CBBC4D5103B7E2AF4C9189582ACB3200ED6FEBCB1B52875C7A0BEA4F6D3AB03FF8366ACF7A490B676412A71A91949999C736566B50A08D32A80407BC596FBC17F4B8F24D0890F0581450A5C9AE09ACB5FCD666206D8A667DC6B207F92AE357BADECBA1AA2E9396AA215A573384FF9957F2D0D644E5E20F83774247398025A3F48AFC780B9378896E017728611CB87D16D0CA69703CE8FC3944EF920D072F6F77276CBFEEFBE95D8BD0478DCEEDEC69ED569D9C4DE33B24E6D23348416C7468830AE579CDA2FE492930A0744BEC29BF7720B7C6D9E0F27535ECF691643950AEA5B601D88D757B0DD769B6670A0CA0D9B9BF4E251913BD3AB944607DFEA8002CA0E150931D5372163BEE78B610C7D7BEEB1ABBDD9FF73FDBC2F0BBBE6FAA0D20681615E89318BE2D3561CBE5D0BDC4F43FB75F92102E3C3B75F0787B30F20441C8A304A6EF26C47D1142BC20D78445C5D639E25E88279908FD91F81A90C9C589F21B52E7A3D94F92FEC5CDEC21AAFA09B4D5B38E4FAB5521390ECF8043472E619706859F1867D9469850B148F94902B0709F735D1B9E03D1BA5A7AAB107920F1D2EA81E55B5AA07DAB458C2758BEC4172EF0D3AA5BF28673BA9F69E83F0D8E08777133AF18E09EAB7C98D529CA338C2F4629190C13895BA344EAD9EFCF85A4A15EC09AFF5B4F796743484F7AAF655E95CB37D44D3702A7B031AD75F5CD78C7038F8B7B04FFABB47FEFED3E7BE14F759D61819669F767D6FCB75F8893792A9416EB2F8C2B04B1AC58F7AF57FEF96A91B5848E57B543A22924CAD4BED0ECE4E244EF103207DFA4BEA6C96184B636C67EBCAB1911A605F647D4D8A48F5938A6C61D8C30AE893460ADCF87492B16B5D32572F42AB92C08F0C041C8B882BE73240681FF8EBD94B847A8CC43ED463A62016FE0E2577A2CE3E36CC3B87C21C4DB319801E10E4A1BE310BBD6D47F74C8A13BD77DDE6A2D712018B3673E1E748151A0AF2A310ABAFAC93110F5076DB0757245A297599DA9CE060A759D7042A8E2169F673E5982D3290A396C9712DECA26DED4B23FFC40A819A1F5B42C5CB11A0B0191C6A35A89B17A3F538DF74B5C45B6232D1D9843E0B3FBE5212B957941293F161D69A900CD6EBBB3EE178D5DD7DA9CFDCAE1FDB660439CC6EF32AA3F0FFB84797887C5E998A58E91F44F3C5B530DC289777BE63F5D05ABC1CF5DC5045464D2C485D04F6402728A1880C634C450335D2D31FB112227BCC4D7F37A0B9D4EA671878A2A6653D504D64FA7C12CAB7AB2E5B69F1C8ACEEB67B7AE84A49506CDE23B53B8B382996DAE0C4695290BB692EA162C81298E652D8FDAD9685BD808BFD7AC2B4A72DC330F8F405D38CFEA25349345E16C774295D09D71E4B5EC9EE811167992E471CC94B3579293FCE4EADDFE600B1A6584AF4F727DC901E2BFB0D09F074DF1BC0ABE58904AFF85772EFA9A9B5B12F95FEA85315D912BAECA4CA8E97807F075CC9AC92BF947A3D8CE84137102CE436373E03AD0AEAFB2391D10B061CB9221D656D80330AFBCBC4FD4712A8047D073E707C5272FC36A41D7E1E24C3FB0D3883CFDE62D98E67E191AD68549C5616204C1056B45578B14330A5F84B8BDEBC41CA58ACEEE9D416F7111E66947E248B5DD2B385D2AD63563C09B63BCA48EF09DDC17C3928BA4101F02B3EC6A7DC5E57262A38F6F3FF900D2002246482636D85C04E4F2EF478109DB8439273DB1686A02A46E92F1B32D28FB656ED99DECF5C25C6E5C25D09E90F83A76264EB693A5AD2891EF4DD74611D25D49D253060C11086EEB6CEC320B3F8F4AEF9E1CB02489395A832207A234420A143047B5C6324CDFBE03DEE0BBB5FEB0B50398EF574F26EEDC0C86023EF3637C6FAC6FA8853474BC93198A5C14044F80DC039C86E7507488193143C16A49A784CE7D9A5AC834BDBF906A9775BB215670E9B725B8D8F7E6B63BC7D7E8D8ECBFFFA53B3F0D9F3D30EC7EDCA9C472735FCB0994E7189CF7E5D3209EE56E49260F8CA7FFE857CC9BF6C68BEBF620D853697E3DAEFC58BA24270477ABDE9D1DE9BF76460FBC827FF8BD6AD4F5B363B2E5E4EF201CED316B908187D7374F9F2B7CE798E6F707FF92B6CECD1A7FCB47C96F693811BC24CC785EEE3726E2053A64B767031354370EBC91D577F9500FB604D83B3F00BB9FDCF46E245F441B304FA2D11D95153E4CEE8CF00C5518CA6CB1A64BA4575CCB4125D13ADB8A226ED0819859281DCEE8EE6661A6F11A7DA39BB26973C171B8FDD58D34F3B2B0D487F6255721B4C37E56CD972BB4E96519F840E1481104E25E8773BF553BDACF4E7A258E91A7FB2C62584A8835003E5C1AB7E74ECC109A9B4BC87AD295B66F11DE02AFA1950F2E88831B2173B4BB8C0C9B6F68BDEB63178AD0B241492AF8839C3EEED2BD14D4ADD79862F59D06A1214A2897F415A0CAE149257B28550861B34601DA8C1637D60C3DD375E70D7A808365B222E37C5FE4948E66C93F235D6FD60E3A1999494E0C03572CF6E189D11FE53A82F79C5FEF04BFD2325D29CBE97A44046F5E060B6BA8B47E13BECE1A3DB036C495FC9D7751D9AF36F8475C121F4836C6EAB819D2CCBD70D24EA431D48EB8A7141C28E696C044645212C468B7E4F4543DDE28EE0FE0E37522D1414C0BA35BA8B353A6736C02529D4C87F19CA19E8606C18143D9D3903A90479E507FCA8AE7A9E78D4ABE2D747ED5BDE316154CEAAAAD2294E907F4F93CF2EFF140D395801E9DC8A3A44C1C252B9B0B998FC39E5A5280339770 -MD = E464ADB66AEFBC1E2509A5C5114E93D1BE8D8E8C9823C6C4673086A0 -Len = 21956 -Msg = 411F01D3192D000563BEA98AA98243A39C2710EEBC8004BA4CDDDC13F6DEC5161A9A9FF0C7E3AE795732C7A3E394368F427FFC28FA8B04EB87C983B9CF0D02D1099308BE230D319BEB8BB795D1D6BDD5812E84A16A623DD55625B08672D2D334C1AF42BAE6EEE23708DFF7FDDCC6A223D45C7445059BC98C84711CE101425D5631B724BFA112B6042B39B11A5228A9AE2F1DE1B1E291F6D46F1A8DEFA048743C177EA13693907F68C025427CA3DE62595EC7EFDC581E4282CC301F026D436DCE124933A6D3AD45D189D91C1FB6B568547657167483E3825590D9D73505480444C2EF42EA94DA9A1B998A1CA74DC0A6AA556BDC1BC02EDDBD52819BA00CA50ED593B4C944F2151F3DE8F13C3B240808A128BDDCA60994F6977BA7D9212C9A7404C615C7CC35832F4FA103F4B4657CB99D1DE531A7BC07FA8783B6E2AEF859E9BAE2CDAF23A221038EA0D415E69613E304FB047AC6C6CF7D99503D749E1A6F3C595301F635A37DC0F5E265C97ACA63EF7461C6F86ED0C4A6A2E6DB2572E30AE3542DCA114E0B282E1583CD44973224156427C694D861A27C3E331D5E3DA6C35053A6AEC8A76F0DCD230294D224FC50C6A008EEB7973096CEA31094705680EE20D9E1508A5C0D8ABF5D095F70B6A079DAA367BC9820B845409ACCE76EE588CAE5E64DBB7872C55D60AE4E0B3AE90E1A865BD5AA04330DDC362650A33E8A57908A214FD39913126E7BA4BA9B5B887E25E55C866ACF8CFCE01B89675041FBCCF5A40149EE19DEFB92296E5154957D8E7905FC430823607294E114889F50D0A6D0BE943E1C7D7A466EF5DD4D00A43C0C47414F09FE03FD1A0D961AC22A6C7A7E6455FF0D44407049BDE7AA76F2125B656176F7FE5F569B9351C5D3AD35E98460D8B00640C0C3F0D0352767B569CF4E27773BDF492557E92053D615DA98988382EE3C5EF70B0BC73DCFE5C83736AC83B9C2B49C844D8310E3204214A64D99F422968F034C9EEC9FF0EC664CA6438D11FF93BE5B62E49879DAA3518FA98C3488FAF2305DF6770C9F77501AA701CCD27DD63EBA56B29190F6A1DDF0146200011CE21B08F380005962E650FCA1668E6204EB1F1D7DFDB9B3085DFA96E5411B2C0CE92DF1D51D8826981C9EFCF07D53075CB7919BC0E05AAA1AB624F515F8DDE5058CFFD3A2058276E2F92FF7D52B11B8C654E91CD913ACA1CBB4F04C0212FE78C6F522B8AA7801C0F218998A332CB37CC5208A0FDD973B5E2BA8023861B96B00505ECC66653CFCDAAFCEEF29922698FF79C80D030119B0366B25C1351C541AEC5F470E5059C018496FC6C5AE40199750D5C3ABFBCD9E130AA839E0B4CF402DEB82AB9F5FBC0C3A588889314B2BEAEBFA7013A13938EBFF82A74764AE860E8036A6F2544163B26FBD82F8FD6F89C68B00D16B89F7447A9A0B9AAE87047CA133DED3154AF340AF3FDC4306015C43E16C1760BDC9842F4B11A6E7108187B649D43D5E0A71EA8DA43EFB1E552892CF9964C2E4962E94B82625613B91ABBCBE174D77D280AF469E4BF960D02AD133459FD6D7551FDD7F5792C92B2932E9C6E9076AFDE311B0E44CBC9A4386290F204261DD0CC1C79D7F4C5B0751EFA1143E59688546695180ED0E098A6CBC5DCE6A988C83EA383AAEB5706BF7930738640F9EC7A0F8009B9502C447270C1DA66242B5494E160316ABD458E300BFAB2B749A9778B47E0728BF213B1FF1BEF8AC389C668C506142417F94E63F3F4FF19FF8D7E834A037315AC5C59C3D5DE167230DA2012B5FA890AF920B2B5C6D5819EF911D34FB6EA2E854B247756BD2E99159523DEF913C8A98D3AF1FE68293D0D5F5161F44DE8208828A9C9447945F079E40FE71F7C332454DE951F32B4681B477D4D9AD617E213170FC84C82609B0F5B01D24042A1F98FFE19672EBEB1BB989B1A3C510A1C270D61CB1FA0CBB17F1D9B90EA39D20C6B5101DB2471D4FD729C89639FA52ACEB092255850339356DA74BA8EE3AF92FB3C64A18F029FBB51104A5A6AB7A2E087B20CD1FD794E6C5126A3DD3D465293710C2CFCCDDF8EC43C8F1948B1922CCAF27C181533469843980EF29515D10BEAED1138FB1006444329E86FDC8170510830EBD027D4C526CBCA0CA75498E791FC448499E2AF6C8E52B22D2406ABE0058647B7BD0B3410B0DB744148FAF1B17899A31F309C2C8ACCE0E1F4DB39E1DC900B418B3644D359369F61A9F17EA7BCE3D9188A8E5711734F1D7EDE3C69DD86692DC093BD4F0CD3AE0215C90328B635F29DE5BFC39E0BC117493D75F4DAB638B8E917B622741A124776EBC9E0D32FE737B26EE74BF96FAFDF60C0B6B00EAD00A69904502030351708822747191F72BA8F489E9A25139D95E64F01F82D35E07C05FAAA52248F46917DB4B37F55DCD8EDD2030F92354005F5A740504DD14AF4F75A3DB9F2543933091256DB61A1565E1F717BD81D781647AEE3B3017E94803F979F8BCD7ECCBAD245A4DC6BF3BF5E35D3AD7A6A0E1233ECAD2F41874AE4E35ADCBD02B1309084A21F4BBEBFE65339A951CFF59FE7B4348C5E3B112A8C47FE6298662A8E4B47384A777BCEB119F03CDF80077775D991093F3F739F1E115869D5088E4535246DF1FA78379A6DC6459FD6C49BBF2C0643375F5A59E3255EA62F6BCC3B30283B6697EA5BE9FC13C358CD5259A85F1C161C538723EC7A6A24613010B9FFE08DFBB53A94E3D23C5079A0EA1F0429C4D30BAA52CD348A890DEB2B13C176FF954AB42067CD6F1D6F0F04D266CA70251DF66D08E19B736B29B12321E3D0CF15F37B1F18BCFD89713DBCFDC62FCD122F10165E185CFFB2E16FEEF7C651B4514D265F8651B5CA2249C3748F7F11DEF77256C8DACF357567F9E3885C8DA0EF62C31F867384A9439D2DB44D32488F68C110758797BED05C7B70339EEAA50B59921BC80B085245352EDC09AE36B74B0997EFB557676D382E6D02F0B13A000766298FC2691DC7C64447266760388C72F466CD648297116B22CB6C13C34E01F556D915D45C1074D24282660B008364C1547ED5D620234FFEC5D38AB1B09B5D7FE0E4FF674D635D7D6553AAC8553DDF8F28A2BA9C2D2BB673B4BF49F5120006D83ED9EBB2762EDBA0951B4EBB0B9E298348A2EA36E0716C4FFFE67463A3B5761072DE4F2E6FDD3BCC842503EDCB4C8A83AA8B9A1AB26B96C7C1E3BA9186250B005381C0AEF9227AE7E808CA82E87D349D171903AF736870A4EB111457119EFFCD35DE3DB3BE2679527BB88DE10AF18128C1D627B0503CD1A7F89D9EA56F59932B69DD6B5E475383A3B48D8A7763F24900B5BE965FABD6C4914E0E7A8E735894A6E3DB485C68E17644FC298193CBAE354756E6C1684510C84CBC0DF2CC5CFAA123869CFC23909C982B1930836E9155C848420AD56F3CB3416DD981176A08A4BF83722331F999F56B13C11438FC7D8641E2FD974DB09C1806FBF9E735B8CB80873BEE3933DDDA7232727EF3198A05E08B4A672E7C1678CE33DA1F2E9EE5713F4953662C60ECB7E958F6A15E5127B4A6582AB4EC2AD955FF650BB50940DFDCD0415223908229D57806CA961FE4191AB8C50EE9836764267FCCB584F8E9D4527D95FA73C73C06C26C0BE086C6F222BCBB6EDBBFF8739179F857DAC67E7772F3CD87C7FF6C953E30392D5974D7E8E46673531649E1D9D19CF47EF4E44D87CDE346C7AEBA886D8F7F623DE6A10D5907FB7AE5DA8D18AD576EB8DE24F4286120A6B4CABA19366CC7F038F19AC17FF589208CC0191720187DF0425B5D0403E7F94F9A265B28969EECA1E97DCC558243E398E6FE67CB0A5373E8958C7EA8DB0CE4F114CD9CE61890B4896364A9F5EEF9E8B1AE9B3FF6211A4A70D2CC7FB2119B81FC43AB222A5EF21E800 -MD = 2C742803CCFA0F752430B5B4BD6143D652F54955F92E3B82B13035E3 -Len = 22019 -Msg = 199F6F8CB2FBFB0A22459649F30862A892E0A41697A6588EE8BE933DF37A43ED4215EFA72B9478334CE21D8C58DB73CA4708958B3A4BB3353D4353B39F9AE048AC66A73F0793587B077A630F450558E8D0025C3215FB8D29102D3CF5B923FF4FCDACA83CA287CD6D606BFE0E64F76599181FFDFBC8C85335F135C8F0492DB99835F941F6EF7E457F8D01D5CE7FFDBC3837E934BC24D4A48A0BA1BC35F5DEC82CBECDA6B012776C99602CA57CE2BDD80E4B31781EC7F4445449C1A74D434EE8C7954ECBEF75ABE0AC622342EAE4BA13C2122CC61A3D9C7F2AAE05557C7402742B12DF2B16E68EDC822B056AB835CA911FD7D57FE41B63CB94734A0B65D546CB8C01C5D74E4FB4A90E5BD83A768B1826EB3C579CCD2BB3D9FE0DB400952BC86FAB07CC16408BF862D01027D35B93153B3D579BFA8312B4266B3989D8AC34A88A2ECA5D4E0958CC213FFB5529948430F8A020FD6359E09C5F074C7BE20B5311455171774E71EE1A5FB603EFE5FF82F6065F8C0FBC559C729C688E30F0550BC105D25557011CD8CAB97671CFA4DD9D68F90FF34F726756A1CCE6450306A0204F2082C12BB2A4517F8414757360E2F01678958BD2A46DFD7FA97FBB053C307891CF059B19DED42F815F826ABEF11E26AB5C957298E52FB8CBC48F2EF37B23986A9AF2E77F2A39DDBBA45054B75F66AC5D8F1D9C13386B4B08C77062355A6B0D6967710DC904A2442B5B4C2C2C48F2805E837661C356505F09427830206E54C4CCAAFDFCE64284A219469986B4A355637E085F796722F2631A037DC435F616340E9F370B333EA6860E61CEA7DA796A104E444AD5DC95E95DB410A6E0A87A5F85CEF1C0820A60631C48F8AA00EFB9BF46F4C5AC062A1017AECDD76F8E0D9D70711B59B9407C400723244C0DC9600C8B576367064FA6D194FF2E8B19AACCBDBB55FF3C7454EC408320B166A0136EBF1752606049EBDCB3DEC998CD2B96D4EB9DE392B5B3C6B5BAE16A65A578998A05924D87790896682D3C18998D4C298C516205BD7960A5603FFF9DD588A0C18078655DC54F08463C64197A4DB1AE390927B31A5091B671C0EA6198593E95F93A8EB629F222CA66BD56327F3AC811D2F29869F0F1333C70FFAA997C142DA3DF5A85CE77323E61534C41D7133D633BC2410E80F2661466E8F76E2EA9183E83220918F632D923C7DBDBB9728E5012CAA1E3B0EF568ED38FB3E02AC2EF83C464E08F98BC9F578D33064A2F51CA4CBBFCD504E22E7AD95DD536499B8A9BAD7F8178D05B1A1B9933DFCAAE8B68B97F0A7A0106B295BC1716BD3A139612ADBB0980FA5D79C590D1E2C18E82422AB51AEA2E7C32468009A7D41AEA0D5E2906CEEF8B260C2EA8B6EBE6C56810040DD51249D168949CB8B1985D5DC1166CBE181A0546256F6B84DF4F492E8CE902E9F64A21715843B4A1AEDF82E804DF48BDBF4C69C189F24525321299F4801AA2ABA9F267931A3735CAD8BEEBB88D46DE68198B782AE6B66183F170C85C574C831D6041E0BE1B0BF9A4C62D91C2DFB7206B1F592527449DE8FFA780A25765F6267564336F2CFD64DD6DDA9DE263C91B8381C8058B947E7686825BDB072836B879560726CD08515A9744275592925B897C4E4CA95B1BB30143002F54BABAE439936649D22B3FA9B8B07FE456F13C49F3364E2138F6492D488BCFAB28B76F935D638F831B4D9973AEAB2F8F75E672778C138B63FA68872E8C2C2C99F50F09F852AF81D0B0BE866C2B180DF10BC2E0A32600FA0C671DB3C0DF240156C2FFBB584319AE5CB7B0A2D399EC95657C84ADDC150D5EBA1952AEA675AE18456E8553F49D10F5FE4AD4E9A3A2FB1FD0D2983C8C9068EEF22317765DCED993EC2ABC6C5290023D91E0879A9A15FEC077918ED33D7BF765A28594536C944CF896AB226A1F21A046FFB7D509535378CF1E1002CA7AE55DB943F70A7A50E3D99D5CCDCF8FDB0E040A08BF13963366E609120409ACF6DB8B967FE94120757B8970A02C4AFDA44DF4F32D59C470F62AD6BD3D281EB8CC6285AA886D05C031673D29409460BB2A5E5C3EAF7206A9FC6AC4D1012DF1C1F38E2367B6EE6B5F0ADCBE6919D5A4F1C26520926AC9C1AC8003B7967DAFAA1065EF4C8A1052AA8BCEEA96AE515E056BC71AF9172D3CB40A6E43CD01FD0116768F5BC0A55BE405627C8475B83130E425161F5C9B17D2829743D3E566DAAB602C4C213D09074E7975E3B65995B5B469CA8B40C13DB75FDAB82F9A68445C6E437557A1F2C33A616E99E733655E12F6F4898D5E8A78FD7247EBA9F0B75B7B5EF8327059DDC185F354FC3533B5E5D459497144BC874B30CE9B7A3688BE0A38A8E4920198CBBAFC836C9B44EB29F47F27B189ED6F662DFD14787932F220025C5BC561556EDDBB6FE529AD1D95BD9EB305CDAFEBF42BC5EA4B7F9D60310D62FA3B0D25380CAA293802A3AFCC2A65D1BD5E64E5807F5547182A6B3585C30C2E0C2788C07748CE6D4183D2E3B8BA1EA174473A47DFEE5644B904E4ECCB08DFC0B2D939FD279CCE761A53B3CB07A57ADE9ED66DEE483B19B4F1613856A2E557034A39C2E8B72E4E04398D2FC4064C15D9649C6BA687D0608692AD34E4511AD9E24F9A055E88B9FD3B57FA4EDBFCF94F19D32A99204758F008ED6626F6CB35976D978AE7FB92B0860776A9793E1014A3B279F7512CE2601D97349FBF5FDC4A9AA834A98CED1E0FCC4E2390C29E7F034AE12A73B004CF7828151190495BE675D15BB47204B2C1A86AE5944DACE97F84B327C6E4190C8E31A32F1A90438F7BF6E91D3B784FA5B3C7487BA1735417FF097C67695DC66C3EB72D99CBBB63C8BB7389F8B3C99BE7D291BDF710F7403921A99D00D3D70EAB986A6B108E0D2F232E203D5B48F25C35560A596A39047D6BBB30EFBA6BC047F5604B6FADE2C6EA1FDF13D112AF465175C98ABF06968A73D79D6F16FF45654E5D0C94F810B15D487A05F369145CD2A8D225ED72A3EA76C7D9DCAD6FD307BFB7F76D7921222904E4B080A0CF0B9291929BDEDBDA51D88D3A437A0F7A3D420BA7909D11068C946572A3B8CC4CD7603211B070CCAB9B831F7D480E1D9093710FBB332C8D11613CDD980ECA4ED0998AA62D34ACB358BB7E3A2C4F7D8F299E9985B23ABAF87FF745467B313337728656F00C901CD2BB752E8B8FA069D07E87E22F456117FF92A004A0D97803DAA8BC02C2F3F1C5262B425976AA6233F19E28588CAEC8B7C5B65D95AFEF88DA1B6488C1907774D9EDD4ACF8A6473BAC44FDE630E2152A4CCA072E23E8A0C7394AA0DEB0FB84EF881D0206344179D5204CF10BD27453B801387A20101C5CE2D5B45207C6109916E9F7DC829D60F79C4ECF538D094A1C61578BA413294B8455E8EC8E038603BBA7EA2140AB71DAFAD5847D4311B96E880F4395E3A8A781C5039BCF67E6D566038C894B2D5F4AA18B903CFFE970BE9DBF204D22DDD261C13107FD44E21417A9747EA8AA5578436574D77070F86FEA7C5766C8FAA8CDA7700E606D2B027DFA8790D2A45862DB3E68A9951DD4FA1EB0FE935180B4E2847DF6388EFF2FA2C9D7A947D450F7F1CAB7C6C7C079AAE25AA128EB7266692B67FC9AD6E27BEA1B80DCC26F16ADF54848F2B0D4F6B34A20971368F300434D061BCBD64F447C9F62CB5DC4852B42E335B6A4B212A09FFE0D68B999F63A946FE1DE75C806D07B25D1809EE7C1718FA90E35D75869B4575520AC8B7FAB6DBEF8483D71810BCE31DFAAFDDE705F05DAC0386A72BD37E3D72F79AC2076BF9DEC773B680D2884355768272B91B221B2D2CAF475F971B3B4E4A86E1DBA15DF648421474217590274A456A3D3D8DEB4529D91CE27495C11BF00B1DC30CA531647AB40969A8AED3061E5D0530A97578E2760 -MD = 73602C456381B75CF3807FEE861D596038363842D52879A0C91E0E9B -Len = 22082 -Msg = E326F8A0891787FA3F801F001316166470D901CDB5304BFBDECA36DD071B16EFAD6469CE06B37A24F8B7B9BAE7EFA8468E3BC9C0E1E53DDEFF2A358CD9C8F9BA8FCFA1CB5F162BAD66C4B87A1F63079BA71F01A28F46062BD3D0CF91433D1332563161F0F4240E2429709ACFE0CB9740A04FFCB4D43F84BB59353DF283AF6C50F4DF02074A17F5C0563065C0D1025BE64CBBD674948396625B7FC078B1DE09A111F19F8B0B8CAE25E64CC742E6907AA36A3D7A5C07DF47506EBB8045733655EAE21426431CFB77FDD60BA60470736E414C36EFA210F39700942F8570076DA25DB23D7450EC01A622CBC4B0F9812E8142D761024B7CD7322FBB09D05B265AD5F8C00DAB0B5C4E77BF1D8565B9A1E765D1D201227BBD2E847F95A9562B7C0E4D44AA19E332C32F7304365E5413FC6F34B095AA523FE11C94A2E7702769649D738D1DC6632FF182C5741DCC807004F352897278F2D1D435BF147D098E92AE3B29190D54D194AA791B8EAC25FDEF06A3D74CFD2D22B711FA1605115E31444EBA34AA3FA63DC8E18C7F5CC849B022F1F2FF9323AC344E35183C64EB19B60D41F0005863E887ACD739E7105F7FE100AB99A8A0694C4B1873BDC59A7698B9F1323C71A9A606D962A0BD9789C45ED5FBEF7F71796DC171CA192D182EFD5ADA9D82C72B2E4A98C9F315E7E427A4BCFB9FDA682234F6D08CB03583A76DBE9A783E61A8A3856F8D8FE5C98DF1D20ACF57D5DE23D12EBD7FAA2DB16D9CC9F346B309A1175B44F73B3F0ADE86203136A20F21CB16B36286911F226B92302B82EBB12F6EE39DCABBBB8DEA0725602C84EB934E8FF012C1A4779F8D4AC101DA30436DD32E6CFB4F2B6CF1E33A3BAEE386ACEE41A2279DD65E7433C7EB4CE01773436D74D247A59DDAE2F5C7F96CF3C173B27A4BAC2BAB7CC12AF12290277941A74BE28C54FEAC99AA3873293FD77FF5A8B4953FB81A0D1FCC16B40449DD38B7AE1FF81973D8EBBF245605ECA09FBDB64FCAC422E713F7D8673D023EEABA59BE7AF1AA7B42D14BDC5E826DA9C7F6A08327A5F1EEC431BB2FE279701A4A2D2661CC94ABD0EDABBB5AC1E02FEF5F9535D853F8A9EAAD30F8EB1975F560613B7967CBEA053C8B0BE23B5BD37CEC35643F680CE15B69452D046C5FEF31A41C3E6FE6771294F00032DC271A67F4414CB06A41CFBB6BFBBFB5CFDBB8530FB176623F71F2FE2615ED8829956B012F69EB021F8C2E458F1A18BC4236D6E42437C5B353E2350A2277E51ACD2D86EB47AF73977CCF2BE23241A03975D57B33147BA4B81E9B5C2B9227A133C3C0176A405D6CFF9382BCE1D1635D5AA6FDAB7F84E29918E2A8E222B5FB4EBF1CBD4F0736B9CBEE213128349355D1BB7A2C05828DD78C0694CAE8F61249B3C9086975AF78D35230FF7A6C89924C36C760EDB6ADFB3BAD96D00CA384894035DA2F6E735EC834134606D36FDB892490C0DF82555E3E103BF6EC1D8A776BA39C73D909CD2342F6C8280939BEA0ADFC7E8C46F8762D9246DA6917F5100F3E10EA8F9B1F97A5455D39EF783DF3A591C12DF154FB536A683DAF02BA6C0B42588275A6A08D7CA0E55EB9933E971121664C3983AF15E7E209B6004DDE8B58A6FD23B563246E8D4D521304BE61BD1E004A524ACAD8491BCB44313F85A740CE4B0F2004D13BB1FEFAAA12EB98607180A6B353546B427A973E47784BCF4EEB853E3FC1992805CF17431142DCAD50FF59D83EBE989C933C1ADCF5B380249C6BEFCCA7A640B30FE12AC43EF0273B439168CF675DF63DFDDFB967BB30C19DF1A654A14186B8ADE68FF8FD321D06576CFBBCFFBAFB72EA70303E35B113D62AE2C55DB36629FD6A84E7B9347FAE73A98F0E8CB69E2AB1E1702EA91AF8E6F2AF39581968CE8593B34D46ADFF9AD79C67A67BB9C08E17AB94D74E3CA4B2EDF3011814C1AA566A2FF25B08E1C7C2C4BC726B5FE49B64C5BA7B5E10D82E38DBED20793079F6207AF82FE9DB66D7212488565167DFC8107E998FE76528CA48994A0D2A3FCC231A6C85BE69069303611082A9A9B418E3F4E9FB57943337B837CC85E791A26BE8847664A5E83792D9ACA93AC2FB962EB3FD857DB412CF127131BCED7F9E12F0FE61CA510DA165BCBC6A17FDE817D2B8B3E431ACEB836051A1797F8D6AF091645BD9716D75A34BEB3B8EA95E7387ABD6D0143EEB18DA6EC410FB8760FB4FD1DD6BB2AAE84687EEFA78B74B34E946975EEEB9CA24DC1D8D2882E348DCCA6152FAB61EBC36E6ECDE642204978BB0F154068C218E8867E226AE8E48D13A9C87EC1A065391CFA618D5D8F677C209BA089C2A923CFDA1CFC63484FADF8996279F29E792C51C0F3F90F880F8DEA72B8941E303214838C8622C33503BBC3653DF4EE15A98DB418C0BDE036A35059D5825FB2D91FE4CA30206251ED70A40BDB3B5AB5F8D87AD24E8C6D7C4D8A3ED322A3AB3E426E1D77445D76C4E4B97F2B31978E61C0D1BBD23CF9A44C4DF505321564091C6177A254C1C69E93477CA5B985ECAFF0DF235BDBCB347C86702CCAF3D0245307ECDED8919B3260B44BA6108EC9A1A6B9C167E9CF995F25E87D2E3C8D013B59D26178076141E0218EC039186B842EEC0CB03D097B5736DD3F01A460855177A862277E79FD6E27F7F08E4845656650735B82AC092D6FAA43D2B41F7D3951A79B4E62E1A3EFC2F932B96C0C8F8207676DCE736440A1302F5EC4A0290F57E23D6D5340CD41E6337BDB50D4687BC5E8B172A99946203A9D1F394F063956FF5CD858BB44CA8EB0E7D11AB25F3CA70B539043453B25D55AAE4B370DB937636418155BC706D3F0F47CFFEB163E203BFDDA861EED58D4C519BAE41019BE467B47184ED610C590C413843ACAE4758DA82936375A56DC9EAD6F12CDF4A49D54FFBCC241E762912B107CF602E608804D4E9615765C253901DA69352DC2F6A3C8E528121BBEA0F704B9A87E63713689BBB49D5300DEEACD57EAFDEB66A02553F909EBE3E397E8AEE5D17964612FAC749A085F7D85754B27883CECEF440FE2706371C5E39F2280DFA371B59EAE45C653D1DCA1F794E76329C9D6D6EFA3C2A40796B0F1CD5C04D0548C835FE82DF58F05F74D686DA3F5A9D4A66E70E26D2914028C1859534ABE0545743681822A4163BD7B6D35867115445256C32A17793FE438CC2A0D86823AEC4EAD9CC792DB8F0606D24699B058BA5553EF30A6A37133AE07A7E1190EAB094802B533FF64197BA4CC0C52085D98A3DC247C7A582CF4143A65C6F0D7C2955AD0E8F814B71AA355C1E55ECEE5CA55782FBBCC8FBC8288BBA875E196547D4FA5F75BB995592B2A40A13FAAA940181F1BE22AA210732B47BA0C1D3121424DEE2FD791538999763458D218FA4F4CA3E7EF978E1B79BC42FBEC744FDB9C72086344F84EA0C89396EAE1C0BD49AF29BA6A2BDFEB9D008D68D22D269430159E51E7B711DC75E76176EAD182C96DC40C8B90997CA9E36FFD201651B04C88C0318D3A85732AC48952B4D1AE9C1B8055C099F2EC961D52317EA48EBB4784BB28625B32DBCD3C17C07BB75B7B2867EB360AFC27F20B483518986B56B19399FE1C1256DB9679CB7E285E104075DC5F5B273CD4E304C41434BABCCD0FDAAA0088ED8EC2144388DE253686C0147BE19E3EDFD6E76C474C7093606599B9CF65E0DFB7A022CF4E4A8074B2DE4A8E92591F277619BD579A7D670A13112D50DF6ED3621DCC4142B658A4818DC64053CD539EC4E8336A9180E687E9B982F79B02B3125FE714718A4430CEF7E5A3DAC8762A197EE4485340B864B9EC9DD85EB6F12BE99C425A7E55DCB9075AF634800418113FB43767E31CF0A1F1550875F8C5777874FECA752B63938AB5752895B231BF4996730702FF5AF05290EDDB077770B0C1983C2B7E8624D12AE80 -MD = FF7A57020D41C0BF253436FBCBBCB4865A3357DFABA10F7FF84FE20F -Len = 22145 -Msg = C565922FB393EB065ACF44F1B9A88B2416EAC37A6AB650D2C3AAB6BB9CDAE883336EF930B8E8530B03804D06E185F75C72C690D7E31B8A509475CB57921062B085B24DD8D2064C9F22A7E525C649B6829373B89F5B882F7B2A2EF55736A08A38FF29532F7256E61C6DA2C65C7F4655D014B323C30F48A10B0923C8763DA4F920AF191AB6B5C32836A3852085D1E91144A4DA25A1ACD2077EBC4D900C1CD07D62039BA4FAE6BF739654F5A0ECFB3CF2288EC29D0920324CBC8AF95DA04DF332A0102B935E5789C8BA655D6E1C44D22DC5E7BC0C500D567D232B986258AE0870A4AE64B44DEC10F6BF5B8DCC4234AF303F53CD1CCF1A7F75BB6224B8AEDADCD7C7BC9E75D9EEA7A71E11E073ADDA0CA20176C10CBD8183D908B35E7B6E782187B072A07050C1F4A31371407BA2D2A18DCB9B8E9603F48D616EB4FEAF92F11241FDC7E12C4C1B0CD33EB4B691E4F058534F521729F5D63F346207BC080FBF5A160CA4BAB808307FCABF233B5A7C4F31B5474834AB21956B6708864211F6CDD671E3EF397B176650AF43F968D5FB6B70A2CA8440BF27275371D7F9ADA41071904237A604E6B36DB63C3AC262BF57B1E1F8386915BD496946AB14590D340DFD272AB7C0F2DD04335542C8A564FF0BA0194EF8FC86563084325CD95562C04C3F09FBC91EB5F3886AA915CF8424A875AB5E352425F5273B9F9D7DCFC9DFD8F24922EB1D4954E335E781149ACF9F9BCD5F774622EFA76DB3D758B35A8CC049136811092CB10D947C386F6689163D3B489BD202D739A01A6CB0432BC8D85B092274E3C480D867CE6C692FF0C592C1916A6BBB2EAF6D833EDE977197B6FA6821D028B1BAE65ED573CD1D68806D9E89FC131A88C7227B3929106278BD938659AFB57A09877C262099EFF5C6BCE1967092179ED5BFFDD0BC585EA55A46046A5D2EF3627C435091807CBAE76A5C049A801EAF735576DBAE3A02905EA8F0C732126D00DC89035154F4AFB416AA02091C62C0C50ECD4352C0AE7824C5AB008A1C4942B2AF3CC532242CFF95CB3594E561DD25B94F056F99AE03B58A0218B3767C27816772DC0B199251B17E4D9C21F060837877DFB5AF2058879ED5E41B145CBC7D47F0A6B7CC17DB843B6C7A7AC2F6CA7035016A221AFAC4B6D0A0F346090E5A5F1F104BAD59FCCC9F6CB301BE8BDF7037BF1CA509E461EA1CD6E73083C21399FE829E3CC7EA43307054A8B76BE7D25FE191D94E0C6F26BB7C1879E125CC4A156E439E271E7542C6279DB5DE6D8AA8523D122E98B45BE63DBEE542343347598A5D9E833830662EDB7319AC34A4AB529880F09350B2AA21486346F55474C078465EC2D99E26232BEF12A49F34D13B789D273B60FFFE160D82D4B85C5C1F89BCF7A70837E23475517620F5C725736C9AD8B2F2F160423555606AE042A28D0CCDEB33E9641A5D3AE3FCD93617A14037F234A39205C6E82C3A9131E744D2ADE77985C3C356D9F8FDDEC0DB9688AAA6CD337BBD3C91C21374FD692AF0B12D1AA50D4B9999A130AA22B2F9C1B54FB6A21B68F6F17AC4825FC202A2CB9302F74657CA7043E4016D1D18D302F2769DB32CDF4A52EE79226AE337972A8A89F714D9E6DF2C6264A816CB0AC8AA31C8FE1DA357180554798A482D179FC4A3CE69216D40ADA371455E3D52277594C66F50FE918960F4049E6B2AA5F2E94572451BD24F6868A648BB0265BD15742CB4891C481EA02A8D6BAAE06A70A3510793A6B4F29AFE37B039B652711647B7F00079E9AFB423306D306ED881A07C89A576CBF459264977102E34CE732F00B70E61C1A81D54065770D80F2D49180BF3412D0473468C309BB74541D48978EA9EF46E94A83926EDF4D7F4ABEAB2FF82D18C7C7CC36A6FCF9FAA512F09139364800EFE1A3DB352ED6699E7DFFA48E2312E10928F046A556AABD7E92A83677507601FF4BB934070C144E8D4D0FA934EE838E22DAF904DA0E2EFEAEC556319066306694CB201FD7F10364F0B18411F28B1B17EE069D018AA9D8FE910801A59007C9D72162CCB68D58510535B6ED846DCBC72E822BDBDCD6FBC8612625616990C433398AC49AE59CDE083D324F001643EC284E299D271278D742D0A831DF28F42367871585492E4018FF68BED4E1F9D2FAD149C4D6E08DC27C981182401E2F5DDAE0A8A32EEDA91194A70C023C806A537024BD41D22F023F2D74D4A3BCDE726339FA012DD660E2D423A311ADD8D0A2D9233715D8AF34887A51CB662E9F550C188F1377833996C26142BB5D73F2F7305ECC58A71D49207D8A7CD428A83B6B7B98525CBC4D131955AF1DC2A3C348C22EB5CEFC72005A3D73D5F64668F35CD44F2A74956A3574536644607DA39E3980F69B38401692CB37425EA54FECC4122E6D698075204D42063BD794BF3BE43D56BEB8638BCD52C4B4922988BBE706065879FB1AC9C2BBAB86022CE56C15E243B5AA64332536D36E3331D3CDA58B04FBB1A3896FCF7529CCCA95EC046D2625FF329788B379A2BF7D3DC46173B097C8E52149329AEF8EC785E893C580A0A4C8EDD154AC743CDDD040C84BF3B32E790DE27A07A31ADE089B4AB3232CF2B2DADA8B0D5F43188510846C228E8810A27F7D259D610E0B492FABCC69AA06A92CAFAD8FDB165C454E12DCDB5CE73430ACC83AB7953E12998CA51840E32A5CC7FC75E07D444DD236C5D6B7DF764C6936B8793EF56C2C2626D584B7FD1D571925035BCAB2AEE19B7261EBA22B07C8BF161DF4765E669847E97C756A88DE61A88D9B724C3375C2733537B89B95B02F0F01BDD92B8AB43AD8B71F5F76B5BFD9F4AECE1B94495E35D767B1894EE6327A5388C097249F5E9E05C27A1565C21A8E60AABF796BA8957C6439E9E1B605C7C3A9F2A3786130B4F885D136D0D3C73EFA3EF089F69F4B933936BA3F07FF723DCD9DD1D780D5D1048F4E25C8D3396D6040DF7DD7A7740A9AEF57D33F0A6455FAF75834BCC33BF2394B22569BB2CDAF06179F52B6D15AF80C6352187DE51A74471EBB39D2C84E0B7A86E87948783C77B7FCAB4AFD5D971E3D8E474DCAB1DDD3D0E3EA4258BD4064DB66BB54A172CB582D96E3B94D0B9F3554D4D5C9331CFB116F6E2783540B9345D1D5BA2BA4640A6C51A7666D57036A7EEC835C3BB23A8ECC2278B928917A1128B4F319C1ABDB5A2EA524A6DC713DB103AA24C8899F5DA1BC4DD35998C0A30AD9828BC0A6457BA64975C2E0B768734EB5815B7BEAAE8C39A4610EE88BD113457E47A06C5F05D5ECA95E6BAD0F0F0F5217831BBD3153E9313D5371A7CB32B711A9CDB7694DD8A64415CADDAF7456EC4A8B0369DB88AF2A82CDA807D16DE6C5A75B13D7F4766A658CA50B38B0BE32D1A5F08D52010111BE127C39825DF0FFF4550F401D9851CD147BD207F3251A763B1B02DA9810AF741AE1EF1C43D7B330C477A5E3181E115C20E5EAAD8E1C43672E6DF8CD1D0DB86CB1980E0CD5F58DBBF798F94F09E2DF9D4730F8D89D059E186B41B1B3A4B7194C9FA44FF0548E96ADEAE925417C644E6A5397B529AF1955A4E23F84EC6E6543B8FFF51BE6432DD8DBB24DFEF283A1433B73ED0EB25F83BEEB25BAF6AEB2FEB1BC728A70FF31CE5BB2AF449A6B69E9EAE14B1BC298801EC0993FEFFDA755F89D9387AD86F4A99B9EEB4E4094CCC79E0A8A7ED59B268C54038151D1549A20BCDCB71472CDC21750E67C499287E9841AD54631DE1C0EC668F21412361AA4629BFD88D84B54BA788F1A8B4327ED832104EA641AE243C809C7758472B955D048AB4DD83BC0B1EF512BE673321D469FCF16364E46B115FE2322F22BDDB5CB32A9F8E5840365E8AE01A2974DBA153B5910518ED532011540442B45F06C1F43286BBB8CB9E0EFDAB0E9C83E81185C9D078D472CC51A3FEFBDE6581A55787160FEF25842A9900 -MD = B9C70D30439770EFBD6014F70373662AA031464F288614F5E1BB1DDA -Len = 22208 -Msg = FA8203123566C334559F12F1C37181DA32759D0AC6CDEE696610445DA4484A51A867263AB6043AB52C6C097346D5BD6C83A2519B28D37844AE1DBB55CB8B86743D51881D1BC810F0E4A9E1F589D8E4CECDFE5859AB245A79E0D8805347991F23ECC83A307871C3D1A22D6BDB2A70DDA20EEB51496216ADAB2CAC4BC4346053A41A6FAC5CD78B5D2C51AF83A754F8F38C0CA7EB48241E34B738FF4CE7421471F8A792E36F32C16E067B85562BD752EE5E73C7920DF08F1090AD8CD251874D1164E15DC9C131AFE318C4CAF04DD044AD068CA856EB44F12C057A676CF2F5BE9C72C74C4709ECBE90A816AD2AF43EE892ADDEDB7089C89DA5ECDD20E7BD082CE5485D559BC9C771E49F872339252D66C368C9E94F4E23C85734CD567C4DE7ED49F92426A5D38783FBFCDECB7EF62ADC5319CC6334357C2D8389DA870146326B1BC12E9F70B3C2AFAD6C4F51F710DD77663EAF37C101700D64AFD4404773AB572A244B36C32737FEF7E168D41621123078AF025F4C25AAAB8C9C844E7400CD2D8E43B3BC621DB1592D3212E276C9A52EF56B6B4CF39A49673C483805D2450CB2EE045E3B8B5BBCF7FD413E8D34A8716363EEC48F76F54B4F2FD08E81C11997C5647173775D2607EDE1743E2A22420B3C87EEE4D75D14343C8735E2B6A7D276C739FCC75D3D1074C43EFC5A624304C4CDBAC9F123120406150D265D36C5D4DE4441C7FC637FA4B4237A403A5415EA01ACB33E5AC6507DBCB0E357245916CFD6B0D0E35E02CA15580D52660872B6C2869C4F1DA49B600AA3B3993DC569E35E4AF380DE7400AEA928E9D25510B3BF9AFF507CEC720068D4721F42C8ECAE2A48AEE31D0AF6F844458C441B93B3508D74CD43A44033B7618AA4D852BAA420CDD6B7428A8401E1B53EA2CE33B3F09991E691E53344163B2A8835E0F90E83C7278F9A0D8C64200C502D8DC1AE1B96F9947E60690032920E795950EBF6642CD5421CECD282CC470FA462083E221A900140BD511E616AA7471A7526180771B803A2265021BE2876AE04E4E4E86E830452BA79D4306AE45C7FD75716C6131211904F72E1F52D3A1DE2081770598628E33E244D93FB971488823DA9729169B699922876818D0D91848A3EBAA785B7029915F3D9238A4151910A88E2EFE6F41841EB85044443098322B0593826F8CB6B0B76E53120A004E913CE42E448D4BA1F2930849185E7C8E029533B275AA4C1B1DED8D38818EFE9535F4D0724A5EFBCE485CF493BA53F619B56C251465E8A07F3A085627E13D0E24EE6157DD76F4FB2FBAD7B58396BAE6919069EB0D32B8D57F933E6059FA2FF062BDC7FD86CDEBBA4E206A4C3CBB2A868D7E09867D316C8801A39DC7C71F2E7FE43EAE3C1CFC71E0CCF8EE9465E53F936A9AB608F29C9F2E0DEE8E450CD42637785CF84543D39BA6FDAB77F1C93D08C5D5D87419540B3A510D04B029888D0F2FA64CF5A62EDB4DB7F4A8FEF45B8D27A22C68952C405984BA94CD2FC0D79DB81A70BFAF9237DF9B86F3A7E3CD08D4A1CE6B1E25C3BBC5B206E4A018070F0B0ECDE81CA834FE21162CCE9ED32E1B507FB5D93A625602E123ED1EF25B3C291791C56B4500FB7B12646773B1F59E204193DBAA23C9AE79B293132CD5EC9B60965280AD0824F3E4A56FFCF966F6B2309F3CB78EA7E4CC587C4661A10D1E22AB268091E95E8702FD20DB71D73A6B9FA6696A5C0C8A67188FFCCB90696D73D8AEA1D9A0C0016CD449F9C9DD18DA90B25D182F556DF1857EE0B3E48C28882B110E20C9C9126FF73DF840C0A3F72474A14C91679EB5F5D9A2095A5ACF1015598CB5DE4294B4A78C7E5818C8F1323234B04E79C5A4385AA429CC3BB41255BE8796165CA3B2D0ADDCA422FE8CA3C75892ABC86316B2EB93D6E75600668E8AFE99DDE205EFAFA472BEC72CD312DD81570154490931613E8F0FF9FB0507DE56509A3C2E7C97C3BBFCEAD923A3F2FF11DD8B052D154C220D44E7B2E45BD652B6C885770E0E486325F54FDAC28AD7A760EFAF7C505164D520955E13527D186C2488A8017A530E02A57F61B5C5F373907714E6DF708D47C9923B70082FA641CE2D7B9CA4F3087D8FD88D2BA1533CC6751506A64E06EC92B4ABDA8DE2D75B020B2C0113C15B7FD92EE8494B572209C0B4C614EFF2FD89AF1FDCF489BB5BBB7768AAD64EA49A7DFD796FF7501D75DA439028575ED0BF0CEDB1FC71E68E3C6CB3DA3CBFEF8D12AC052CCCC1DE46BBB43835CEBD9A1111E83D6179E6CD10F67733EAA0D9BB166890729A48ABA05EC7745409209942BE44A278486F38CDDB6E9852B0EE4EAD981A8E8BCC46EF25A4C07F874A887F29CD61D47C38C9020A0F1F2D4A1BDD3C0B8E2C53C9B4312B54FFBDF69480B2A3707F0CF89638D7B7679AA91869A53664B15AD07EFA01E718871EC9410A1486A8DC2B41FF00DF7FA069A6E68A33F27A2EA0BA4A3191CDEFDF2349BE5DF727B7354767A299FAF5E87CCBEB98C4AF036898A80B5C485881645739FBC5A76C3934774F6A078AEF28183A0148305F8C0891832402DDEB993E1CA0EABD52D2FD5C5946A94B23B057B85931B698B46F68AD885800FF25AB1B5DBE42661FAA902074A3D45CE02FBDE7C1C38013B1000D9CF9C2F4226B5ED1ADFD18D676D14E7B1422C6321C0FA5171933041ABE963DB07C06953906C051D7AC1D356BCC0B800A7D5F19DC0EDF4D0CBD16A2254208235F972F59E71E410BB6D51A89E12A33979BA6A6F8F5CD5C1CB0329C73FDECBE24D66C6B5D5A1125D162A9B0E982BAD23D44EF9924C6E2903FEE8355223727E4FBE400E86E4BA8282593695018F50D96B7D1F5F83066F023BB7D0A568D0C396661B876A15A859AB08425AC1CC1563C7A094BF8D9A348B2EBE8CD8826C252123968AA90D9404BE82019DF5BA764D5E796CA43F5BCB34A1D4F908E7966D89833E5A0E8B00A9C0B385045CFF25AF35C4F566492769189873BA4380BFEF1AD52FA96EE049BACF892DBA6DDA605C1C00244C7C597543FD2B6AA6F0F044AB4A5219588D5480E759AB44E79C5759F1083F68165D42DA6CF04D16EC0A71400C1C6A50FFFB06A06AC0FCD23F05EE8431519407C470DA99BCA4B11EC233ED32C1B1F6E506E34270C5927F8C34CF30833C94A23C0F90ABE0FEE43D0DB8BC56EFF9A00C403A4C12F881119DB8B7C25905161F2030EFDAF80864880F6F93C50B7FB74644BCE061C20E9F20DBDDCD98E63CDC69E0F48A0497534BF59C06263108171D5E480F0954820634349D5BAFE9A4E8D96AE1C29C46C2895227B04A4412993B8B6BBE5D66D5D026635BCEFB162A53E484A9D9173D3A2AA60E6024429340B34485FDD68B077B13F4134CAF6DD7F38689E4936325B314223C684ED99D50163646A7B725F321C7BB60153F40E3CFECE9DE2A263F3A1030124832336E12BED3B81D99F3B6CE3ACF87BB1D57298BCA23BFF9034076EFA9A362F30B3B9B3E2EE83B455D8A63DEFF545EB6341910C767AB1FCA2960C724915DB60926AE6D40F5E87EF28DB3A133B69FD673F6BF1088D727CA8D6237D1055BD6B1CDA4E1BCC849B6BCFF9602AEB73A3F59BD3AAC6D0E54E9D5336FA3BC0C0FD22782EDBB0B9B35ECFBD99793FD910399D35E0809F16B53597C24E4841FB8E7EC3C4C434B9653E0C1F9D859DC9A365E461DB6827C2AD1E07C6130DA1B84ABF31A76084BD7EFB40F302DE75D62EED0EB4A2985345C85B80AE532266B39A704D84BB16E9A9FAEA7B3E7924306F650C2F338298CB38F07C04B1F41736876799C0D17C487BC5E0047E8534ED356C6F30DAF21610618D19BF1000BB8860C279B7EC27C6270709C00E3CCF78BC95CD550202275013235BC2B3F0E11791D0F87D125B2B1775F4A866DAA90A7CCB1C7D214B19F022825AA0A22DB78041250F63B5A683DC9FFE76AB035 -MD = 62EE8FC4E772F3B2C505154443CCA14DD4FFC8D4F40F91C7C4B8C5E6 -Len = 22271 -Msg = AE1C038A684F2C46D98BCD36807E93678C69AF83EFEE15EACD58591625E5C37A446B3307D055634D78E959B53623704A15183132D6EE8B77EAC03D5AB758AECAAA1BB55B39BFC61FDA4960220D20764EF6636A4339FEB7798A04DDEE6EF5D144815943595C48DBA7C46F9F0E584ADB923DC1A3824C4E88B334BDC559E1744A40EDB9E62C5D73DD6B96357054C3ABA56063F37127E66C3D1ADD1701EB952CFC9A52C2182AE4FC2529000D705BAF352D8954868689013583E48629E5CAE2CE762AA88DB9FAB618F6F20AD4F9C432F1866C16BA8876AE6C4BFD788B4D571DCE5A7E48E11DA361968A089E850914688E5FAC096B7DAD56A78D77B2889902931B1BC9C114B3E9D31AF9CFEEEF8B33B8193B359063BEBE185FCFFE0C7C422D049B75A2BE4ABF8EBCCB58027BF073D665EEFB77D95737B4E0F924C45BA5599A337B5FCEB6C1B9C915F3FD2541F99CE040ED31264A70802E0384D08453781F7CA5E31E43A814408F4A62D892D803CFC4CB8A10F4196D198E800A6800045E7CB0826EAB277FEA508CA907173613B2ED80ADEBF8FF9E32B236F08CA5DD0ACE2A6467C8F296282068D96461DB9D98462D7398E232A5E68E570F7A66E6F4E672CA714A5BBB9DBBB12DE81AE41A476595A430B17EBF7B55B5DD2B193CB62D51558B1BF737CB4564E2EFACD5AE02D7D9DC9FEE2F6DBAF2050ADD86CE55ED4DD7EB20DC2F54F997757B1F2625137BC62BB3748649493EBFABD4CFB3C059BA9A40E43D6F7B3B83EB033E1D0AEFB3DCDEE4C94D144C508568BDA1F8C0D8E963227DFB3865E6DA4ED7C2C8E8105D04DB3627AC0A47FD34E76199F69C512E8A81BE409B269119EF79B71C62FD3FD80DD7E9972DE8240B29D4F0D7771C9C7A57C2BCF7F84B9C30B87F6FD5398A5B9BD1DAA5388249AF1437DEC3F86E4218D9C79CD9F227398E4B5A37ED8C469628A6BC8F354FFA4BE6D5A1FAB1722132E46A0013D6223E320287971D3F7DD83E10A90FA59F7AE47F18644370B86A1634088E23B5425ED0BCC8CC101AC1B385674FB0230952AD7CA09EBF7453B0D10ABA7B3FE15A79560B90AADAF662E05CC2C0E97477DDF9EA640B5CD47A68479DE8EEE29F3EF7143DF7125A652C2795C2F78B206A49B683F62E02295FB8B907CC96A1029CE3751B8A0A43E48CD18BEA6AF0B0B6CFF5312AB13789F9F2CE2E60B77D7A270653D2F9BEAB61269DFF9816819598B5884D648729E71E1B6D1373A51096450400336D89466FA72AF8D0DE4DF002A714598127852115A1C0391BBCDB8481C7192C0077D94AC1F209A6A8A4B22F27D14AF3389966537F33D9DD904A00AF19D9805104B9AB1171C7460CD038AE27A03A41833BF983B4AFA89BA355800E1C6F117FD57AE5C92ED250576F94EF1043940E46A48C483FBE701BBC84E7091EB4728C559D1058CA851E85B6A49BC6BD46D79D2A0323B35568C5C4228B07E3D905BB208A9E772609EDCC87E44CF68BE2D0698B894E0F535E6A1B8A9259D5C3D510B49AF2524C5C69CC9AEE7E9701B28411CCF11149AAEC35990601278BFB59D9DF449D1F5D865E01EB69297F5A340ADE97977E3617EFBFB83935B9F254372676F39EBB68CBDBF1A4CC2B1425FBDE1C64D24827218D3084E61645FE5EC89CF6E495BF1A775A688F2305B97A4672F2E5ABF50B95813608C6677EADBF12C3C9DBFA7C058FD34A9C385BEC23F0C928EF3E4B06D8AEBF6A4999F7DEB8B259EB459EF23C09A2D35C6353033F0468591D2B2C9F7F7FE43D4668E20AA8DC94019344D3268CBABFE4FBAA2EE7EFB3A2E5219C78D64EF4610C1D4E6E54E549DBB3E67480696D8CB85B9D8BDB51CE24ED3557BD4BD3EF9D6CD116C63B95A2AB52EAD95621610F6E9F64E14DC805C488AECE09304BE35C987B793012E6516270ED6DE3113562B5C944DD0CD6BBA3A220DCB9FC0748E07BA8B9C00EFD88FAD81C63C63F5D8971FFBD981081C7DB3F28702404BA10CE538B55822A02B7E10DB0EC82025568B2437AF9C56E4E19C82424A552F33662FD78EF7FE26EB1D864A9B20AAC9345336BDEA4BD3395F450C89839693756CF9FD3B4D00FEE8C920F21D0DA3A5C82F282A8CE2011845EC77E5B1F1FF61D367B5F8DC00EF85779C35E2206EB042632AB31DF9F780B8418D5E9243101D163725AD1A650FDB3EEEBC02FFAF94C8FB3BD86D69FE954F528B94FFBD9514E8BCF599E80CB25B4DC5F3329BA192386DC825E530FE353BDBDAB00F2E9AE2A9CB1461979A32FDB19398B7EA2CBC9E11BA6DDFFE3F6E2A36AAF3673BE6CC3A3E9ABF3C907936B4F5AF87958C33AE652F13F22A240BD904BD8ADF665049905096DCCBCEF153F99BBEDE71B596FAFB0DA62CA1E994BA11E8A4E3E7DD808CCCE140F9904E1ED363B34E6864C2E609056501577B9316F412B3852212A3A65DC9942A18F3C412436F4DE767D53ACF2A1C213094A98E951F4CCA56E8F0AA8907508951023CA5472F37C395B429BE3881499D94791D08AC52D043B97C65078C6342CED3AC5B3EEA3C653527745ED12BBBC63743EAEB77F859A2264447B40992897F53564300298D82664F822D687C9FF1AE12E735205DCDC886577A12B98D864790AC75A4E9C2EF6A14673BADA359BDBDE41679CD5BA366AB97B1AB347B2B560CF850B1842C97A22A16F050F6F8EBBEE5C54F9EC1A68FF3911A13F672FFFD7701DA29260BA3B804A28A31E4A1C28DEF68A0F5340BDABF063D4FA6EDFFADD517DFB61027BD81ADE485AA53BF65959BD14D2D057BBCDA7EDD62A716DD0E8E14D961782004B0273900207554E14AB96A276EDAC33A094BF25DC47C6F0A6F187C5D00EE3649543F9A5868323ECC8B18C2EF22AC46B4F3CE255893D9BCA9800518314D3E20B85CA5D1DA91A87C15720D626C7EB814E9B23531BFD2FCE20726A3268DEE7F8D8A36FA8D37B43411BC4AF5B5CF3B0EBEA50D92CB1A685A168780038E694B4B559CFB5FC04080049FEE3B74ABF8F3A5A27D4AA6ACB8BF6AA26AE0AC63FE3A5740F314D847F2D00DDF301D64DD8AD8AABAEBAD0C2EF43D460E211A53347168A29A533C9A49E12F3D87D79D6ABF1F36194151E028233F4A506AEDE88F6C08E6BBFFC7904F342535CF02110E9C8A7833072E51ED3A9037BC69DF66B9E43E6B80A6B717337A3B9DC463F8E431F2178535465033AC1A6C26C56D6976B51A4F1D5283702C4B1EB77788713511D5B7B86DABAA3136597BC071CA892484A362952B3F4B60FC0704C80A6A7AC5ABA9DF882220325B7036DA923F0832D3CEB5571D072FD358F15A14143BF2A3ADB43A5A759E4C627CE55F355F8BCFD5DB430675C39A75DDB7A3DA4A0826FD729522E00E694264AFCD2846E719C5C555DAC3AE539736D160138F7FBB57158490C4173C82ADDB3E5CC4F1F42F9E5D87E51B4F574D5BE241C413007304AC42006012979B8432A8D47372BF42839D6C28A7FBE10EEDABC77967E477289310409F94CBB2711DEDF33F99BB365BC503A2A8370345800E4F776E2DBAEBD731156EAD367DADC0865172414487765619135CA99956556164D5E214D50D8C42A81C08CB1B23B1EF467BDE34EE8FE793D673D901A45748768523B0860756E0B7647D812E5E82345AFFB1CB0615DDD20EF753CF30A7A2C521EA30F99DD0946C732F4E3095DCF3F1ED22A6867D28031D15A8D7927EA615D6A3E8EB8F79EE7404F298E5DF3A4FD948EBC47C208207553239C9A95B3A4A2D8F1AC7BC2CD5D6916190B4288F202B91FEC2ABE3078863B59005350FEFFE557F78C1BDA1DD632236C2E43BDBB83273317AAE18D37F8FAB4AC3E0A424ADA8CB65E22E7B85470933DA8F59D0C6EBA6656A36DB7C7D7A0D6EB35E8DB044E96EF7D5B0B59BE6D820B878317C0835D36F16B754E4CC6C71D6D18543BA543489B6B357251B719635DFCADC5FDD79ACC89265A94 -MD = A94AB59E26D02F03A90498CAB5AE2F989006E0E0907C5B89049A93FE -Len = 22334 -Msg = 1DB189F52A958D698F868A1C6603F3E2B7BE03E726EBB631D596230358736ED6BBB21974E423CD4E33607E98C8888C87F28E3B8182635EE6C59236CB0AE827E6D443CAC185B3FF77031C48458B809F27539964120A794E6E17AD8CBF38FBB51BC3C9976B4CD23070ACB134E67D91060818CDEA01E9C6E822C034C50FC36702A4D79D9C31E1244D5CAC92E5A74B1D09AE4B836307B58A22766CB52B2FFF8BD59C2842F0F9F63F6C73506B5A00EBAC98D008A0B120B23C953BE59847981EA24DC3330C3C5D6FD8112FAAECA0E4230D6F2D1A691583BD4A2F051307F31E3FEB0EE18638E07ECE98FA7F67BAE2E167B1D2A926B445566A1BAA35D999592EC655B09B6B62368507F162D1289CEA4994149D4310CA42BCF03B909CB04A3B016C517030CC639212C7693F2E0ED5D694480DDD3AE998E50F26B86B3599D4A542EC6A4F98FEED338AD8DF54FBECD08DCEF1F2952DE0C68B1247E8E7ED885CEACC31583C2102F4537739E984519DD3F2224C0A0AE684CE811A46EC4FFD01C1C2EE72419A57B618F0C313C38AC44F9D778130DB59268222765E95F141A9DE2322C96898498C79667D39373589C99F8386A8584F042C97E2CE5AD4A712303D20C1094D9DAA51C60359F788A925E4EE38318CDEC3BDC9F97958F94D64CD23013607BC4C70FFF38F0014E1CDE85DDB35E531E60C9B4AC6CCEC4E74EEDDE5954D35B36F148BA1280B7984D92D771E998C7E16D99034F72951FE663C5BABA7D6D49F32EB8C99F73AEB0BAE8B6D242B7E9EA60B6892111BAE7E1F411DF217776EC92FFF9A22AF4027D25D476183F81526DAB6D72F72E6E2A39BA9F48484D8883253CF4CE8A6DBDBFD87CE415FB2A90124A5395A9F09CF4AD15B40F37000686EF66AF52EF2C5599502D6B46599DB0D174E0CAE027C1B249D01C9BAE7EBB36213DB25FBBD6B5CB44CDF0BAA741F790DBD227E7C5FE28875F3E025F8F5EFD8C06B5B8DB71C9A5BC1A9E5D7934042058A7E2336CC44BAF10A905900EE4420C93639E470D9EC245CBCC8CAF7438DF027EF478FD279A4E1DC93041821D91AF065CD4F076DA9A9A8CBF4279C99E4AAF433547561A874FDF0A16C8B78C2F017DBCB6F9927756C4CF75F22B750171FDD24B7839DF9AD823AC361088265D8F9D089987F77A96D98B5D729BCEE4A011B4FAD2434E6C5099D2E72331E2247D43092BDA5E15803C0B9BDA7C79E5F8FD057FD15B345042B0F0280AD1598C094C66640F74D8164703313D99F5FE3EF6C87AF6E56F6586AC6971505BA3F4F73B021E4DD157F2A6F999C51D51E6F9F3317BD0A508AF28E0C9075E8F6B19F8E836891175B5B6A63ED6FF4675A9DCC57BE4AF26D1E9C487F84FFC991E8107F52F0A2259A0441325E00D21797633F1B27E35F1B95D3CB2A6EF96B2EED5FCCA705170ADE1D9902BA1E3386CFA7DC61BD7AD9D4D9805BD5E94B0B407B76F92D8DFC01DEEFB8CD48B73CC72D1DC80FD4CFEE212620583AD68A75F773DBDD950477949B75E261599D2076B1ABC7C9DC6AF69D5E22BE655134756C56935C4E18D198C795C6A6258F29FDFE9D8C006AD269EA560F962E56C2655206BB0F12FE80D66EB2F832F1970AA8103BFBEEDE63D0A0798E7ABD59348CCEB5707B2C83E9F8E78DE19600C6202ED5F41CC4DAC456E91B3D1DCCF65E4DC5FE947CB8B1E25F013EA6A19B804DEC9B95DA88E56E7AD9725BC8B4C030E67827B10A1BC39E39E7D7D68CC22257CA03904A2744B7A4BEC60D219809D58CA9AD4B634363AE26B0FE8AAB90046DA4AB5FA81C152CD489F7AE0F51E1847983429034899A981B3D791B455FFA7720BF6877F38D6917E13722E2B420591665C08FD2BFB42AE213D70D64DC9974974BABCB5613718380A108B7E252157300E60FF3435156BDD792CE30E5C102163A6345811982EEF41EB59AA337EA756D416EB0394624AC9C5BD160355A4BD1D7ED20566E607B6F02A50B3D424C668D1EBE5765DB766A357FE506A6A25777531D3DF715FA9769FDF77F87AD14691E8E44E084509F2BAAB18CBA27C699391A928C84E7E484C2B0FB362844B7D3575C60EE1441DDDA1A235A5C0E8B6E6FFEA72201C18DEF2764774D8C331534F8B51E3251D78B9A419ABA7CC31587CAE41194B4F15350F41B1B53F94B4C69F7CCD8F92A5D5ED3DA4718837915772AF7A024DE5164B53AAF6048E59C7EC09F39976DF1023F3C8E7F311D64BF6551F98C2CD3AAD983C35C944206AA26F6680E3651FF3EAB35F3283819CFAD966A2709A417C8C643E2D34C67D0E40C8F7F419A6EC4E6119FEDFBFEE06E900CB4CF8E02EEA9B593843D384F79D6AEB775AD1542544EEE5E99CFA2B4CA384CE3072211F0C0FC39874F6010871B7D8A1E2BAAF7368678F9D13474C5575B0CFA3B297C2ECFC4C1F7213B706581C793851B63BC383E120E3CB47F07DA6124C604C1DCB3BBADB1841088F92DE1F56F554A06B3F0B319142E51D0F7AAA00CEC709CD7024015570D596444F53AEAACC804EBD7BCAB02FC1861C2AD77E913D2F3F786DEE8D598A396EB796F44661D1732BE352CDA9E1A6F11F2BD6AC8E6DFD7A40B204498BE13A87C969D93515E0B392FD8A6BF627C3D02DA87394C6D73D96B2DB0BDF478A9307D39B3E0D7A62C970495C03EB84247C822D85317EE70AB950E97AB749A83785778E2464BB24A61502386140ECFBFCD522A2AC25DA89C62AC087F9645A60B5366AF3AF336E3D3C24333AD90DDE7A5A9DF5BEFD911EF9046270ECD2BEC836EF5834839DCFBBF9542B941D29EFB7D9348379CECF45418E2005C9CED8E28AB22FD33369076A27F01B0DC140C3EAA660CE11775E0122F0C876925E96909A4D1AB6978F51958F645CA76BD83AE24CF448F800358DD78B297E8790A3D009DE8371147951DB0E25EAF31FFCCFF06411400350433CB77193470FF6C1009536EBF5776EED6F2CE4A203ACFD99A99AD1D61A0D0A73817EF0E5D038071E084468569490987D2C85ECEA1600856F0F0E5098ED4011A0E3D50D3E14B00CFFB614676EE824F6365689E7517E58D208BCFD036B349CCF7DB84F80316FFB440C5F8AB3BF01C7955D67710CFE54C4CF28ECA2BAFFAA9AF7FA11C734675D3A1F875B0B195B5F173BDB3E77C3D825E1BE9BD3FCB858A1B20D4604430E9763D92DA9B2C57638C15F57C778BC5961ABAA3718EAB377A76588BC32BAA6F5304CB7D22B765EB6C52460D58D42A960AD4836AACE53406EC16851303E7767D74CE5488430ABE965207BCC80DC06EC1348A8E329A225B32A55A118F568747E8F806E44D9D8D9A6E9D8338329DADE4F261275FCAC689285F2DE239DFC69590A7F6FBAADB18F2894DEB61EF77FAC0869471580BE7B7AC997A9C80802A4A8114B77DDFD67D800E3979EF2B6DCDC0F3F90F89FC04CA730B025EEDC6282FBF8E44ADE56765C3C61D94BFD80F0B75F3E007CCCAD8CFDCFF863C5D710B949EE1EBDCFBE28E0CF56CB42C6F527B4BF62F2E0233435C16F3CEF7E7DF74C028492807F31BDD51BBEF8E494644F97296A9607FB64CAD7EC462B0BFC4C7F98A09E441381868651B9A1A4F97CCA75635C91B6235F4D0054AA32FD26232745FA113F404F376CF2113A5D5877A5D4B2FBCCD610BE583CCC33929671293513D83AD1750D7A5B211BE2836AB04F78F1053577EE4AD553C16A1BB91590F6C4976D0C2B20B48A1E78A29303F88E825F1D7BD4E32EC472543E580E5924C68C877BDDF20B584F3AC5DA274D357748DB0F9BF6A099B1932BC61EBFF6FFCFD5714AE2A6AD9012229F7121EDBE3BC634F0A0CCA077EF8E4BDDE3BC525AD44822F0FA8C026FE96C61DF3E8E6828ADDFADC252CA47ACBC750EE1C609171C355B946A36BAC24FB53FF5DCA98C3140673FF3626A6B01AB5AF1E73E4DEABD3D7946F2553440B140F2F56CA28FC4D4FEF66ECC6776F0D24B0011A8CF4036C -MD = 95C7E42E1D5528838078A0160B6DD125DCC8CF9A150AC0B10A9BDFC8 -Len = 22397 -Msg = 6C0D10A714BEE973CE3802B4B1513117B01ABA03F3FC06A1A4CF1294BA061650467B3C49D18AE1E1822FEA9AB89356D778F02A1B484A031079387A58E5FAE33C3C52C53EB47D3929ACCC047420D52D9CB237808F077D0CD610D862E57026018B91DDE15C05EFB6041A1900E8894068E6BBBF0B7F076D1C234B9B743DA7387015E76231AB40D67DA0CD51ACDE2654A30C8F3D8A4F3AB54F6B9433C977715BCD29C807A85E0932A87C2F18C02B2240640C0D95FFF3A7C68B6E7E3DD6D4F92037765FF73CBB24EB687F9DF8C27AEBB50B747CC8FDE2A71CA744EC1D638DBF8E4D286E82447549EF7D14D851B884172385DC5C87147D64F5451D86DE3FF914527B05818C9AFA24A552C3FE88AC73FB0C154DE5F40B8E850B5E398033D1EC382D690AAD78B60791EF83E27A035D1E5BBC107D21A4D89D2C4F12CA4CAFC0CC41BE8AA9CCCD71C549E5CD4916782C9BFAAB012C778069EF11FF65E90FAB62771F6F6776FBE101D45DFE9E17DA94E554B37EA9F800601FFCB786838753A265AB13A306BE6067BF4805D2D7BB9DAF2D2A9E5250E549C116B08E91866ADDF30F2C4FC62C9834B3BD5406E69990C5D00E1F389616EB8C155D3DED5553EF930AAA86FE5E53E602C6DB89EFFD81DE8342105CDCE7A84EAC770ABC85CFDDA71B187D0171ACE3661FE85B871B9765C7566A049900DC339D6A7570553A54454946FA0717DE42B0CCEF0392C2A762921F5BB8CD6C07507CEC882E5768F7DC88718839A1B62A0E8B9F290CBBEB7F24A604480515CC4C6789BE194D04BDB098A6C5EBD08B60B5702E565413E7C35238C3388EB7EFB65C01BBA506BFB8F905B42B69F8434B02406A14C76D09EDB881F81FF94C8D49A244C84F0AE001A4DCDD7A4B79E1D28D6A1CBF48318E56F6CB96E6C40EC128D14DBC9AEEC964440B75C75EA969C282979F0E93FC8FF9BE18A1B1E034A36B673599DA6638DA227C7487AAC779195860FCFA661E0E52340FA56F4115E58295A5DAEB8408AD329C8B4178A685F8BD22D100E0BA0D832ACD5530EA9580D91FD57D0149D3A4BC0D6188CBC5E7848B8C887C11BE0E520F5523225BEB1C741E16798088439D8B7CE0C72BCBDEECD11959925906AAC2570140AF40813CD12370CEE8602B6CE293F4210D62F5E769F996AEF48F9A18AB18648D7A7FCA3C2D7946CB82E479715708EF495C18E70B8FEC3F700409E00758BE06C591573D078647BDBB1C80E6D5F8551041001B6A391D0D1948B8E35DD8DFD710A8B2D53FDF37A25811E597A26E1BA6E83237A55B307F2A4821BC9C038A0595C643031FEE3ED6CAA474964B708B12FEE54F28664BE39C5356BB82DC1259C39D66F559A4E36C975B00B4BD292C0B05F8C500D96BD2B9E19C19D1E046EAF10D6CCCBD06B5C326480C42E1163C7A4EDE807765FF74B671B391FB4B9D2E9C1E36C39935533007F3830F78F656852B21749C78C1DE9B9DE9209620AA3616DAFE17E77AEAB693F25162AB92E6E01366F48C8D5E67AE75C8DD33E627057917550546F65490AEEB32A3A59ABC60204F4BD6521C9AE9AD1B06AF5EFFCCB024F8CC07F69E2279B293FD72D442C48E771AA5154AC0DD75603412EC6DF2DDADF5E0688821A4E942ED3FC937F7A9A36A8A294686B2C5E89298F5AD58F76AE67CA4BB0AC4B9EC2D8736D16BDC563A2F83C53F457A0BA3D77808CE456A8BC9F8C87699ED8B1C51EA326DF5D88BB8626B70E666A49179315441B5B5FD68F7D44B2E0426E97DFA1D71E4C831981F92D78A194684AE774C5BE840F41CDB1992EAA2A47DA5BA9F30D9F1E49EB1624523EE84B231BBA0DDA2B1782859A9B301CEA863AB38F9DBF77792490B0E9839CED660919F4FD748A537A488EAD1B66FD85D0ECD46C667B0A519C44C3330B3E6E30EF4A0AF4B85DB2C0397347DD6DC654A3E4460BF7083B3E788006B81ADB0B41C2C131C0B5CDB6F0E5294451DAAC0069B3722E798ED6DCCE79E75FEEA97D21CAE486029F164CE77B3D09E85E85FE1248248EBC0CDB566FBED6CF3580544A918BAFF2D54E4E0E61B69B0EF3BCA024EF4B4D2024D9DB1E6DDBC8EFD0A5DC0B917C15477AA7EB4C0733DFDA28AF4275BD7E107BFC77615C2A11A48A177AF10A227764BA26DA79AB59C19899B699B42FB60221A12F808DBF6DC57A3DABADFD503B7E050E9EECD3194DE52BF8AEF4261CF125291987F315522278C7DF3947655028B52F06663D63E0AAB238F4EFCCF44017A68AE2ADFF7B32CA96B5534042B645B8226AB70808B409943C38562E89A72F4CACA138D636793CF437DBC29FD7218A165E2F1D69D009ACDB0638138BFC1900160EA09E833C31D57ACAB644A6BD2A638DF8FD22A5BDBA6D5879A743796CD169165DBDA7E644630176535B5FEB05B036B055D832A3F71B24ED2146C8401B38102DD8AF324AE9B97339CE2F1C018647838E4427E3BAB5A7353A065E0B52E4B34D9FC49301A4E4C39C70AE14826B9DC017F8242F64E417FC6973428F2D243F8CA085D67C6AD1581D01877B3AD117083C754C08434F7B8BFAE0046D52EB3C8A9ACF165858F5F82FB5C757D07A4D08E9045B9CB1171A3EA7A9215A3936A85D142FE76A0FD0B0B89F6F7B229F664CF99FC4B2D3C55A18A2D406C276559E27FC08FFEE708D9BF9C7F4A80EF51E436F0EBACF3166EA58C44477DCFA05A091E1BE6F1109C1796221C322E5AF9DF94C889855E799A7F4A96A41520BAAA81ED0BE53230487E0C6C8EFD0EE392079CFF284DC0A4A169F0BBAD183C626FF1C4C5F501856C0E99DD60F4564202BE64BE592ECD04BF7FFAD2713214E65D50EC86CA5B7F313F8104BBF29CC173D4616646A12554B84AD11E79636F03FC38D31C571E545434EDE44186B47693357FE6CE1A87EF4C86F75CDAAA23AE60A150EA838F59AB85FAE209D84F4D0BD95004BADD84799CFE75F9285948EA6410CD058D2276BFB39C499513A356E93A7166BD9F13A5ED6752DB4DA81E813013FD3E7B6163FD591932B8F73F8A4B57F8A1175A27D2181CF4A317A862779A86C12FADED5BC26D291F9E85F9CAE9010ADE471ECA85577DD6DFF698152C3FC234BA222707B56309611F94778CA296F085F443524DFAB1FED3235987486F23E2A340AFE52B69610C87A1DCF2C8DEA63C3EB15DDACE4D942F7A4E28325986DD8BF421A140ECD3DD99D7C00F269FA5BF0C2250C9F3A614926E9AD899E48756E2E12173F00C5314D5DB5E4EB58D4C44CA1D9C44873C252DEBB316042AEDF1923AC5574C119DC6869392FE92FD037365666EA808DAF8CAEEE719297544C71D04B3A991064D2AA97D11D05E30942E3D93920726E70DA23AD2FA9D2AEC66D23F443A428D5BD36C4718670166065D3502915FD387BB4AA4012520BB405CD094BB800A152322CE3A3308F6C0C7312560288123B1026870235D3E8E951F577CFA53192409BEFF14930DC7DA4049A3A1D1310986E45A1DC78BF67A812FA1920DC59744B6C0B82817C2225BF5061066CF90F4A990ACC7C85B8280FD520EC8055D721E33292EAA709257495E84B7EFE8897E2165A7C9C4E5372B835C78CE37158B1129F1BFEC98626D1C77A4A4F5C871A164EC9CFFA0E887E00612A218114FC58FA35059D5B9AE5E349644DAEAB5369FB7FC45398E4565B688A828D58BCE2669897E3EAE8C76EBC926578BE53AB45B7582956D52A26197B7B06B94DB82DEB48686D462C90E37DA3B25BFE944140EA6464AA9DF2AB3DD7F9113261B3C372E54C51CD6FDAC9FF68C0E2FAAE1A177FA4768583DB833275DD60243211373BBEA15D3761F8F334DEEAC4107D3EB8D9D3468B77FA0ACDE0C7EBB6527F04C504B19F6E281D14EA6F8F51D380CC2A458E496572B8DA09AA89CA7F248E4C0DDB53C98A571FDB8F657C94B49328E9A44B2913DF27AF770F144031F6AC3D49A84BD9B7B8E451FBFD1EF7989C2A6CCCE6AC176035081540210 -MD = B9BF3E91097E53C3AD94AB648BCBD1CA4A9EC2A1596D4BBC51E6DBA3 -Len = 22460 -Msg = A7CF9DEA95F7057EDF75A25954BCF289C37EDBF3BA6F432D412DDBE7918E98612A93D7C74A421DD2A2E644194576BDFC9B6A4776DC0F81B0D0A40850E9F8BA57E0E6AB10AB85CAF490EA772B88DA0B90C7A6BED62D1A98A9598DBEEB17A2E0C522A2F6908638B14AC9392B95C5D6E07E9FA92F3B7729DB8F335949E1304380A00703E93263C323203D0ECE31998C01CF846D9A2D714B793276810B612012A42DDE05DBB7598A47A329D446BFA27E47764004C66BE727A50FC2AA7FA9BEA3B5F99845427532A1834B5BA8FFE376888B8F858A06126E4D1F8D4D121A1EFC3382C2EEE4E6B57E3073CA5BF8B1D62A99A600A0B7F39EAB9AD14D6BB554E3911AB5C327B8B7AAC7C2FC0718EB7D4B7967801DC2E29A544F83035AA441CBF0B26EA47298AA7D5B68D5DBE150CD854E72D81D4B4C875820AB2C372683040A8280EC6FDB937CC56759B29E8944C82FAA62D9E55D79F0DAB4ECC5CF6C8DEDF15E57076141D6DF12BC81772D690FC69FE569A06E1B8C91CA2854377A99D3631B08D77FE883D8C0AF99074637032F2CBD07B60F458C56990F4DCA547D4330F0B91BF433D51DD68013C58C2FAFF2870A3074521C1A327E3106D6A20ADF590F00BEEAE5619C4D585FBB1ABBA61EFB538C019E3F7E83BB96DA7F88108B12C8BD62A0BC8A4F5ADFAF8F98AEA5E8572E0630296D9FE998DB2B21CFABBFC1FCBBAB12D00ADA14B1020B061398ABC8A85BF435D39ECEE3264AF6935050473C2697B8DA8F84E460E8809F43A26B4598DFA31D91F2F939EB7BE3DF0DE76EF0829C3166D3D905F839C48B49673259B693AE2E06ECE32532CB0E23FD7E0F5059F7D6C25755D536BF4C5570193B56B69B997419E505D6930366E7DDEC6ABB9F1254B061FCDB8F39A8D07CF34DB635EB8503BA680FCEB74A75FF633C1356CE80B47EE056A359BD5BB25318E1A30AD229A86C0F25B16D7663B7AB530C28867C0217FF8B8D580FDD525ED1FBD5846B946F0505D2928F8DDBD3513479785D46E151C404665F751F1A903522ACA4A9FF6CBEB043E4409C64FDA2BC9838DE8D3EF1F3D0127E320DCEA1BCA494D8668B158EB08538D49C727B7A13CD23E39413AC7F8C538CBB338F6E900A49BE0463C4A079F4E536991325641B8D40746A6792AB78837DC63D4D3BD0633C94B2289356CF6BB522D931C1E64E6BF4B37D6F0BE00582E96ED80D324B8A19DA180C991FD34B2537C40397F180FB89E3B84C1AF03BDA12838585F1BA0BC0383BEE2E2D99A1478CBE190CB1FD6891AF0C0804E5EEA8AD62673EF694BD09F79E3A6103F727507CD2EFC3AC40F9D58C76BF10E4D588C183C5A31D052F9B59926FF0C719854877A3D63DE47FDCECE00DAEB5CC9261CB4BB85946A1F20F07A4C78A9EC51EB68BCE9FF302EC84E06C3506B37C8C4EDF893FCFC96057EB1C4D3BBEA44764B1C815CA87B371A5DCAB10A61A7484FFE8240272CDD9B87564C79E2F91AE1828FA9014C92D839137EBF902CDB37F32B4E0ABD670378723591F825E7B0EC80F0EB2A9057918077B9A7B084AA5FF8F009F9DA629205D0CE974363FD73E3042B223D06CE56ED199631EA42EDC254E8019DCDA2A982460291BD75A3531BA9B2BA134D111226EF255E22A26D09F3EDA016BC765A7391385878FF11BDA55CF22FF489D57418591DEA1BBB043C59C45F5F4BAA05C63C92ECE6CE05F700FE2EA4E2A34BCC25006B98DE9C4FC1E446B2B5261794E928F52E3DFC6DFD7379F856F5F271F8B1CC15EB3B55AEA7DC9DE0E75E0D3EC36F70520FF9DE4028E8F9CA2087C4131BE40ACEDD6DB8CCCE120C64EE7195A75E9024D6F0BDDB9FB976D4A43EBC604D54AE0870801B9E82CF773D1C2DD5A3DB4884DCF7C95B5DC7B848F575C5F64E34396CC03B23B518113E990D1288DDFA45A482E7E9EADB22EEDFA89E5B06E1E4D4F90AF850D637F9A7B654B0190CCAC4AFC0D9780CD5EA6BC3E28FD28420E7A5646976D8C899041A9F35C996E91C783275CAF74A4925883DAA7548FE18D4DDDC91C7BCC7ECF8918030A59DE6A0D8348A95E606DE7D7661D38C5BFCD23593EBB9E57859379118B9DC2A75D60F44A8D2F5E3FDF607EF411402F3C02141D09C94457BADECAD108AFF7DA0BBF71AA7CDF6DE96C2BC81A9964147200D3BE00D9C9145EABE0FAADF56AAEC9C823CF1CC19CBBE39881C1E243FFB0397C3243ED2295E1F5170AC0680586F5D6C4E064ACB96E12A30EE7DDDAC75F0D98E9753C1A851FCC3529F37F14B69B1589D55AB7A974B5B23E0405CBFE22CF142B1EF4F75C63FD4FC3C1FB8E8628875E45854743C1C14446A26BAB2FB3C1243301ECA8E9D9B93A9D0135BDCF8B96DFC49489F833060035D22F5149B4BE47E126B3A3BF553A2BBC593273447093E5A8659D961CBB304AFE328022E17D50E53FFEC97781458C06DB1B79359851DAC1C83E712D5B742ECB66131A7CE9E41FC66506026047C43C07A1D4ABDCE1DDBFE3D2D6E728AA42E1033B22F633D230310619510581CEB2FA51887F84471002F37CF710D2E47785062E293B848717128C1909D53725337CD327D4BF54FAA28708DDD651E85507A9910E8F5E1069ED726A3463AF95B66DA5353D0530BD942897BAB1A06366B007BBBFA74954D4EC2D0FFD9504EC2419DFDE8D9D30669999C0E2AE90340EAA5D13B7D4F6B0FDEF49A57DDB45A50F934A02F4F574441D3C5F223523612BD0736C604D3DD7B9BD3E8E594A870889D0CEAC8DD3C5BB8A17FE6EB7AED8DF4CB62E6453B072E647E606FA0BCE6419AA3DB720AC4CA4B9703170E437E5CEE340B7FBA7E01FFE757B44F7D54FF474B10893B1342BA8FFE6E985914E1C3A342B5BB57C9E4B8ECCE9F7660506FF232EAC19BD0A15F7B69EC5BF367AC97EDA6F091FB0D1226791DC428D0996C3FE9F3EED7B99727FB67D221B56D7809BEB1078017A5630AE457EEB24337E09BB1CEE93100A287E175F1EDEC0087E05B675290A173A1A143A7E5D1AD67B53EFAF29C7E28D4D6A8B28060D1B3E4F1D819A408D63AA3316DD8540AC27C3445703DD4157D13751CB39F6D90A009A4666C7DA703DD15B92EEDBC94888AFD8FAA704984DC8092F2A6A84895FC98CCCC741F5DAD992A1BF777BCE5762A51486D85A8116EFFEEEA77B694EAB51A52AE6DE3D7CFE52F4507589C2A95AC39ADB776C760C613C670564698AF8D2815B5B5F86AF1380A2513DB4E1EFFFA05E3DCC1BD8E6998DCBCF02E14051EDB9440E99907133336057569F42AE91F00FEF5FEDF53CABCD2B68B6B7212198758C282513ECBF6A64AFAF213A3ABD8D75EDE71A4C5AEB42F4649D96FF3901A1539C88664952E5E7D6A4B39AA4DA5A3B40131CB8E3E1D85C0A617F63A0F10870D3AB85F322083428FA59193E8BF6CAC63334144F5B32221FAF9BD0A82F5AB95C3B1A5D153991F4FA0FBF700D181944A7D02653EFFBFA5CD957EFEDE4CE60514FA5591AC77C7B7B4CB1301CFF7BDF123F29B59F938176CE2C38C3C9FB1534A8670175A9F836E6433054C12A3FA1DA0705011A3B5832B1CA594F554B1081E39BE820E1D5053EA367B327AFC88D2CD7131E1A5D1E0E1B3BC2BC0D3EA5D874BD8408D176E8C8B779E9F595ACFA87F87ABA329F11CEFFA5DC7B5ABA47048E490EC0ABE96DFC1E62267F527E80E3B26FED7A7F5EFF24326B106101C568F1FB5CD880260D666F1197271DC2485E35814251EBC7A7A9D206D7ABE2EB6C04A92F883BA90EECEFDF74FFEF741389DA4E7AFD0FFB253FFDA90ABDFADE3C3501E2C03E5A441D38A2CBD42BE933D1D9A9A171DCB633FF2A10C933997FCE3171B556B102F969768A891D91B1877ED6DE488620E48D7814A60DA30AFAAF9DE64EA019A46CD28335338FF600FBADAC83F9EF5185E5A9DA5E0A4225E6C06DF448141B4C4089BA68376D0DB4059DB42D1492AC36EF44E7AFBD0CD73C2A5711A61301F2179804FDC8B2B7EDC3D29EE0 -MD = B51291A6BD6D4C12A375F80AC54A7B200B6C77526C8844DE55013FC6 -Len = 22523 -Msg = 2816DE20F0006239E3636D8CE8C9C63F1CAD0D6C38084A671D07D447C7B70E60A02A5463118363B4DD68168CAF602DB83DAFBD990D9D1964A6F3566CC33F11F928BE460ADAE4A6CB07C310764C0510BDE36EDAD182D8B74DDC1FFA42B7DFAFD8EC5A1BD4F458404347E8B86AF9519F96496B4E1B99E6B3F4535E274C7834AB7391454694C8418C51739714649305355A46A46C604E7986147EF207BEDB708B9F5CFD296BA99DBF1A96910A279B97AB405A9256A6A42C236F044DA50A44B4EF0E405541363163AF9211498587B7DFC389EB63CC9B39E4EB105D9847865AB632F5BD7DD6A58135FBE407E3E0735C25019A13F3105AD1432DBDD6B02730A90C3B17E0AFE7C539F8B33D30378048BFDF5264670358FD6B24E4820192C5CA2511D4D3C793D938993CF01594733A4F1AE97545C937F6D5100915483F47B6636BF7BE8DEF6FE6D1987A9556E18F7C0CBACEEAE84D1EB6FD523C518B528A6A2DF18CE6393944EA9B9050C584E2C48B8C037E5976CEF344F07EFEFB9F29565A9B4BB682C4C6B2C2CD24C86C064A291E07008617F8FE09C04B7BFB02211666F9A311CA7DA4611CFA83BE014E1B4529E71F4B9FE5D1B85B0CB5A43273C13EEC0FC28FE997BA4A958B39F5DB51A1C2DDF4FE7B38F324C9C7F5029FE81DBA6DF1D484CB653A2CB6C50AF9AC5392FD5B2A0698AF2F785744397C4E981EFB9E02CED1957B287888615470A7405DA291CB7BC6027748342C5AF7172C6A3282F0A3A013E394369C319E57D08A8E44551BF2ECBC98896F7530FB588A7E26E9AAA6F7DA60956608606BABBE3D3A8B1881E54BB0B744A65D8BF168D4C8CACA87451B6F5D7B545DA2B8E2376D554D52F275DD091F280DE8D3D05041DCF847BD8810193C50158401805554194AEED740114E6AFB9402E61818364D7B9AFAF682530B75A9719A93F826D90875E0DB3BB07FDF47E3380E8275CF9722A756E6B046FED58B9DCF18BF3EC47BFEEE6C90338330F3B00DC6BF8CBF270C2B03E9CFCBE1F330B7ACE10899FBE46A284715F83BB3A13E9B397BF1D24A1F10CB2FAB75C5CDA7AD9FA00CEC07E8A2AC26D3F212809CFFFCB74F40A8A8922C08D61AC159229EB949A1A246A32EE595FA559327A74A25046802DA8E09118269926746DC7BA016584BC5D180AE55FB4FD3DC9507375AE1EC2F8E315DA13CB2FC9C625DD38C627794B2FA787BF977987C503E944385C3F5685D33611511EF109B4E071FB3F1525AB642AE4F06D886229EE3589B6BC7FA966603C1967A706FD7853B5650D94DFF18FE26EACC82B1DA1789A7035450FF7710AEF88FCB41A191E6052B1FEC64303AEBFF959EB6EFB4FBDAFDAC163232DD51D11BC37AFB5C1EB94BA52D2E799E8640D7C7A058BC238F6F3B670E079FD89D0D338F0341C5F429E8EE775688C9567D64DEE7FD20FC6F67F646515CD3BDBAE5EE58D95B91B9CF4301E57F42BDFBA9ED29C90D9775BE2356B9AB34910737F4BCAC098FF162CCEFF7F2F690C0F875C73E44FAB7EAF4D2A70F82D4F6B96240BD8086CA9A90E33442FC4D876E9DED05C1DA23579619AE728747639F7ECDA4A73A9CB7241BFE6AC4B09E82D13AC7A722F0420B4CB9ABC6DA416603A9B67D4D5B20B65D3E17431A3B46EB184FDA55CB88EA9BA64A04FA29527FF63BD41C02DE392D013F02F39CABA8FD24F221E6918899A572C3BDF571C9494A2AB32848D8D4CF898FDB1F3402FFB280019CC51079984A2B46CD1A6ED6FD2D3DAF460DEEE3E007A5FB192D79F9FE76F1FD10B1AF9268705ADD6AD76544ED5AD9545CE5AA16DC2D28875B308B10AA5FC422A13A92F1E1388BADAFA11123554078874FEE61B585DE590D3FE13419DBF4896D86E0F83DEF33FAB4710E6BFF70C0B9A5D0E3A57175BF9306DD95EB319D75AD636046432E1C4C0A8DFF99579669CDD0088B370AD07A8F1E08116057A872437B2225B7AD25E3B8150CC1AF0709328661E00AB06317C10E70AB00DBEF8175B83AD1E3F4B2DBC555948FA6A5C95CF43D0A522D1F82A10CADE1EC45846E30AC8FBD550E9EECF3084FA249A62043E8954D7EBD5C1AC2D807EE6A82FABF2EEEC1E86143BF44518FD7ADFC904CFF138804F639302633566DEB3960568112A8C6FD9A9E6ACF9067B236BE4AC321425277B3D76204DA6750DE0C4FF807838BDB41BAEA3CDC1E01752358806D29073C69F9A1D031D76A82DA54288430A3F993D85235DA9BF930A6AAAD1498E61432936FB46C69B069D2318DF0CF24935CA0870F12DAD595DE0362EA87ADC64756A6CF18002B9578BF42CA751155B39FDAAC6479C1B2DB8052604C94B9D146795998BF2CFA6F6EBA74BD1D7FE1BECDA86251647CF72DC3BF4153CB7B233EBD19F4C18822D30FCF2864CA6CD8232345F506472502DB535E398CE2152685B080A2AFE315F4BDE4ACFDED335C3F48012E70988480807C8634159FCBC9F93E4F9857D2674A784197B2E40BF3087A7A6050A7CCD163F4E0C2AC09DFD273AD73E06BA8E7EE92C0649599D3C6DB2F5DAD15874BDF01FAA6299FC535DA92967E76CDDD9D7FBE14EB08C07E3B46E6AA8126D89FD6F5ED872E2D961D03C1D5FC31E2F9AF90FE8F0CC80C07495313D7402BA2632467516723495C4B0B6ECA8542BAF8D51106D8C042D6C5EBE2500AB15A2923247B59A5A9DD5705002CBDD06672DAA1D8AA312331AE5F6B9677EDB6B6385283A3582EAAD0F0E47C9AB8CCC8CD06BB5C72084F9CFD53863C7C8B2BFC6CC947AA536AC762F13972EF168CAC5D08CA69F4E320656FC5F6C3F754B826524A883FF9B452522C3E02AFBFC06BA311CBCA586223B8632D2C8677F07B051F0196272DB002A4618B4109B311CB0A5B61100E3C47580CE4FD9F9D39CBBFF25278ED70B1CE916838199D04C66419EC95684A8C67C6794F8BA8E742698F1B67E7A371630CA233E8D499E30F810008B97C7783FD52F5E0406550382985E553F819D30129902322504A5B15EBA1A523649FFF0E5B9214263C170DA6DDF4B23DF8DC36F7F05EF0357E0C0DC101A04564A7EB73286A16548CF47C97AAB03AAE86FAF1B1B7B84EA4A9337031D5B468C0BC4DD96EACAC5683E8A0A19D212E16C02D0AF4FC2D5DB4D0C1328D4ECEBC3A89D54C086C445D20D06A60E238D8A9848861B5BB327CCDFF6CD4BC57A24CD07B0FD64BE00F58535DC69C471E8F5D322123296A64E41A1BE5FB2A39D22CE997674DF3132209CA3542B4093EDCAC41AD4ED58BC6227101EF377FEC1572B7DCC16238A6004AD9D6AFB717D1EC2E5D080C3345BE76067BDB4B45575991D8B80F7090F501F263540A4AFE09F63C8564B1142BF5A6E5011D51663E93F2FD93A2B022C17D829ECB291D54D749A9C688F8A1BCA060B104DAAAAD220A80A238953921D44FC76FB1CC1BAAC7966F8939061C3FD7990DF482A7DBBFC1AC5D478FFDA55BBFC8CC0BF70EC405B2AFEB3ACFD1B725F7733FEF3AC773647C09F66F5E6789805C50CBD3DB2CAD13F114BB15C3BA6625F1A92DA45B3F38962B115ED0402947ABD7155771F59812BFAC3C3B40E5E77C1E9D98CDC76284B0AAEFC6EDD5D4D3A3D26AB95522EB6502924E1E164173F8FBC9BAA41D67EE75F0D9D2015062E8E53B6CE8F4E42569F5885F70B4ADCC0F7A955022016CDD707D3EF4F59DF66E95C7A616E7A8D2B1EC27DA719382C97AB047A10313EF09B66C6BF7BD0BE25333861759EB31A2C22DAC6DE264784450B47A32B762554E3DF40E1F7518DE67A2305AE3890967A087BB5D0D3D10A3E80C5662DE3B7B8ECA56F37333EDA21879A82B1753FB363880219B3E45240E3FCECA63528563967AD20CE1FE79560803844C5BFD33D4999D5BD76A7119CB6BF3BD8368DC31891DD82E4EF573AF7AE0E8BF206EBE0A56E1F30FF6FFF15B3761D7802ED65390585682CF4D0F82051533C4F58E0B99E0986311F32CC1BC462C192AEC8C6A9E7A3C4D60230475EF3E87E2FC634600 -MD = 3EC80E8FCA5A83DDFF5DB0E72EE7F711B7572D90C917D77C9C40FE75 -Len = 22586 -Msg = 00E8A7C9C62A6A3C6EC36A62A99E2FAFD18822626B1C0FA1A42E5137E00EBC4549DAE5ED21AF8A81E14A042B7823591A5E18D0D1ADBB122B12573C1FB8A4807F2A67B8F73DAA997AA7B53CB64DF0B40F57C8412DAA43E1C7E3CBC8220958866567FBE8F48923065B57C21C57E8DD15673D2D549A4FC3B131B538FC21923CB20716E56FBE4C3B4D2085601622A2157DC66CFB0ACA32615E3874842C271836DBE29F5058334DD96D3B0CA60C61B64B28F90614F1FF64683B0B0A31B29CAE7F7310141278808479D3598FEC767666B7B0F1C5F89C37C5C8D44C57E24F6C74B4B00CEFAC3F262CC5ABD62FFC33831171876C0F1B3C01EC635AA886DB3B644AB85A1B04F5038367A4E9EAEF6F35853C75CCA3F531709FFBBD94DF4668E283A3D614A0FF49BACBED542366563D6AA76F2AA2A79481995E759D17F58A87ABCEF6C46AD6BABE29593194BE91139B42E1C6C227591FD7164FF803B83E53F9A8B83DA67014CC54CDAAD474F1B0B0FE56F3748ABACE45D547B3648DCFB97AE39A0AB42BDE96A51BEBEF6872F714B158F62D0E8AEFF0FECC03BF77359F254FF2B46FC0D22EFAD197DBFC18008506A1663AB1B59F79FE69701A22BC7546FEE8AD4E4AA224ECDA4E599A95381E775A0A325F6B09F1443A13D182CC9D6025EB83BFF23650868C7BDD774854C2A0512D5FB57BC6CD2AA05A94349E500BEA8D89A195D9E5E24CBE3602FE5F279B0EB3B3B51A2EAD3FFA691F0FC7A59241D4C8B86E907D878DD310E8C488A635273B4FF8DF321621BF0B91E1ADCD9784554BE763E374E2397E995C2560E17138B8092AD6699E8875C6160476BEFF28F161E5B6339AE6B0308B7575C4634A26D797D96366706456DD82EDBDF441975146052944AEEF7111BDC50196DFF3235D256C862AB2E6E620402CE72D37D23EC19A0258B4E4E33EFC4DAD3F461F8A7EB67A19406BECD761FC192168872E6ADFC129657E5E72373D989FC37B88305C99D97D1A26BF1E06D767492F7987A1716FF812E42FE551F8E66C53854AA8C5F811D78BF7FAFDC5157F5BF61D37EF629C73975282EF3260221C4F0737319A399BA07E12D3471B39C314F27CECB8A8C53F27830848F9BDF949D4E77113D379ACC04A28261ECE576CA650521EFD139103CAF7BE9428C1890C2C4AE7354685E89F25C9B52B8D66373CF2EBBFDE5BF68D23765BF049CC9F3A1C6DC53822B5F1D6CA8E6EB027683F65747B8A010B4CD6C5EB4B033F08746B871F5421EAA160F2712188167B1A47C2DC97E955175FF6D0F7E63F8EFEA5B857FF93F98215AC532605C364808B153D8FF0085AF6AE7B73949372404FF131ABC44B98A7830914094BCBA428A120CEE4492331452627816F25E889F04BCA72F3DA3267413D9B87FBE5AE433CD22EBF0A01D10ABA21655B82BDF83B2A71FE3547EABD1DEF17D788AA6EBAE2AF91AB94853E9834CF2AA815151A508DAF819550C1C32DCCE35E4E78373E5625EA8C4AC41659BD38EEB198E1EAD9AE3596F92934425DB89073FE3DB5D73FE5BB9E2C50E81610F345F4E2A27BD1255EB2170616151F258115B9BA4B125AB8C507BA5BEDC4B4E03389EA673230251E2D3E0B3AB646861A2B69E7AA7930E5A4F9D0CAD537762E1E027C436421FAB486C831DE2FB437F8ADCD9D68C552165168D0CB9CF7DE21B713872176DB5635A7552271F6DF5CEAEA4A050FF6E2EE0CB1A0DF861CE29E771754277F4BE8A5406DF2845FD685FDB7B02AFA96D3D3E757BCA74F1DD39DA992C64813AA0FB321B23B42430ADDAAB1EB31EF431351ABFA339CB6D5D83187784061954E669AA8A7FCC4C14E40C63D717866D3C8FBA554108C094704ADBD229DF4A6BF8ED170E53A383B5FAB44589424753429B645F43BE2275A9BB4CBDA295EB1871422E058E1336DF19AE44D0180446302AE79BC7A80E35A96D937BB0890D217B092993BAFB65EDBF2FDEC47144746A49EB182B1E739317BD7D53752FDA80ECCE9455A59FE335EA4C563530285C036D2498E72FB84A6FF757FF69ED01689DE581903386E56C83073244120B807670625A3F7475BE2F8FE19856446CFA8C8A4C49A5D412FBA1CB96AA0CEE6EABB691D3CAC43C65CA022FBEA1C7F76C96C61E5C313053AECA1174B92EA1FA56147FFBA61EEAB75395DF4B91B680C1CAFF53777E74857C760B2BA98308C83A8D49A6679AEB83476436C399C173CEB632DCB63310A494FE77E4AE85F5EF9681A8F66DFC7121DDD8D1FDE648E1CF3B8584DA1A3B12BE4DCC10542994A6A9D4316CA3FAB38F98028A929B3837587E4C7E78BD567849583BE1E59BE0BFF05F10FA69789EDEE55354E9FFADDA151F77F197D539EACDBE14F5B15FC7CB5765774758367386CE1AFFADAFA54E1F94D4B153AD6DF914C91B002DB9660DF1A2B8C1360EA88809F46FCE1B5F515FE6755E0D2F38C033E7994EF8D98239C6093B1A695BEC60CEE3437BBDA32C478928B6E6CA9FCED6B702E582CF8E6121E2FA383D19F128D5A2FF1316A38E4479547EB18683B451CABD354B21716268495B8D5D5DDA15EE8DB2D50A7A396FC8CD44B4BC86D6EAE6103809B32C29892C2B504BB8B46623CD9249F2F963186486F1F8AFC71D24C8DBDFF075C9FE1FB1E30E63CDAB53EA93DA35AE731E851FB3BE5B7053EBC994148F43AB75F966EC6ECF133F701F0EAE3FD84761FD56FCB2D42DE0979F613B8DFADD6B12C98227FA31DBAF181E8B6DB865A504D5BDD0B5E36EAE960BD10EB906CA59E70C5A62FD2DAB051A66658E1A70167EEAD8F57ECF9BC4A5CE2BE85CB38370C842EE71AA34ADD79AD8EC09F39CAD2C31CF1B3785202D65901E10509AB6735561A2F88AA1E2E785329DF4D30EB72F091B9805171D75C7E2D4A6C5B093EA46E8A4B8C153EC5A6784E9415059547B8EE7F61168E44CBD86E265938EC05C8C28EF80D5071E2D74376ABD052904A82C433C84E574C88FC050D49C7A4B41882F7F323D1A97470B72FA488A29B5CCA150735295129C3B8C8B259DA619C1B35D5DA6F79ED00E7F1100B87D084167D05027C86020B3E73F985828C942A7BB02D77AA95A2719FBED3E8D158CF5E176D32E561B8A61DC4554F366418A5999A09F2B8274A990A44BD1DD298C91E58606E65C73259D4BE0AA38F34935C203B0CFB1E0F265F8D8778CACE1B4A222625004F083E7197F051AAC7707D81DAAEB852A19FE1C2E4C773D9D32BA384C22158837720525F25D3E5CFF23A45CECA2DFF3245558BEE06C73A63A9B9655728322991E02EB3C8125F26BB9FD1C37ED423BA758B3E3CAEEB9E6480E759DEA9B9B509D0DBDB11210B9FBE8E7D108878974B1D0559A657C2A8FFF0858C751DC3921338E27AF0D6B64523DCCDBB3D3DC4873C9674B310CC7948E8D834BF6B7295A2915916827F0C1A2935143F01BE56E61D4568288DFE79082FA7B7738A3F13FC2277E2AFE951EDF1559A7BAB8C4A0A282E4754E2A0E3F6D649D8B37433B0691925B49C3A3DD68753293DB640B006B67E7EE398998CA7BF10BE75DC4CFB240BA5FD76DC8171CB9E4A6E938A7ED2EDD7CF5F8A0B1769E3396C2F81F7DF7D2C0161EB506D9AC6F4CD930CD1849AA90BF128E855BD17F5066B694E18C8607CFC8004FE3AA819A1D4FFFBF667599FE3C714836E5949F35EA0B1E01C121D95AE6CBFBD5475ADC6C3FFB6F47950A7D629999A59F2F534E58A6762E99BC58EF53BD00177509B1C12D25794FBE22AEB08E48ED7641E7C7157115AFAC8783CA9CE40F485C2D86130D4ED8D9A841A94B43CEC09D5E0E1019D88C30A36DF9CE9D9FCA7A66F35CE4AF55E6A40B35700E863C19BFD8B3A65D37F48D872E16C66D39259CF93494288355CC79E1456A7C8FAA6B3B54EA7E85E30EDDFC134F439165FA1AAEB291740708ABBC806EC76AC813267A60B3427DF0978BC8785E358AE701BEC895D8909F66F70A3963BBDA43569C2F02F39B46D07A2192B5D8A1CE3265B56E2BEB206612FAFB4F9C0 -MD = 98FD42D82588B70566CD06A9D439073B9A21E613A37C6F95B7A6884D -Len = 22649 -Msg = 09770F7E66D717DA5CBCD6F8BF933D7CE3A8A9A519BFC1CD0DDC1800E5108E661035AE6717F1BF3ACD8251F0BA142589AFCA371CED8D1B2CB6126543F7C161786EC0F21922968B6282250CF6631DDE06E6A4709439C516C8F3D55C4C77121C99429B424A631F9371802F58666B8FF9C41572A8604510805A64234B870DC6A7C6BB2F53DDEC042AB11EB70DE5AE2A61CCF6786844CD63B7EACBE5CE026CDC09BBD3E2D6685355E2960B361077AC1D2B6FCAF468B99CB3C95BDCAFC2D25C607B44E6C7DBCF672A1A35D3BD1AF84A866820FA26747FA0479288037E7E899609446FF1A6390A3A3ACDB24E68FD7CE45E6DEC7C781F46807F9AE8285DFE641B8E62C1D5D8223C23089838277E2814617863315C07486B8C394102C4851EF2961320327950BDD559F0B90B4F3B7EF113E8B9E757F958D6D54EC4919AB47C16482791879BE4276F3417007996B11D6388A6F489CE57A098AD10E660AD739FF07DA398B7F5D28A7012C08424EADCD5ABBF28B6B78F78C43D4EBF9953537D5C0D3828DA3A0F8B44E4A6B6115A8E65C9E290A4F5C89F3AFB3F697BD7F1D5517C219BE2380F0EDD4DE8AF064231E0EDAEE949089E960F756B693A844B8675E0D1700F05BCD41121F8AD3FE550BF25D83490A31D05710A38ABE28FA71E0D3E3A1D4E3CD026984F9D4ED6944FDB3EF0A24F7152512E3ED600B990557C6B18B33E47894ACB504E22BE9B162D4D17BD0BB53B84A9EBEAC81FB44479F4AE44A16BD98885324699E889098B8745494DF2BB7D7FFF9EDC2ACB3E2365E53EE8BF436EDD8796EA5A36DEE4940D5A9114079FF9C0E2AF08025925CC689415E8FA7B393191773A26C1CE3DA79D062B244D4E7ECA94F7BF62514C343C1DEAC959DA6384F1F5BB89DF6D3CC898A8E2643DDD4AFC4A2A855630220E4D5A98017527EF621963754D81FFFC6A415E121E04B60EDA04A0A3E342DD4F5980DDD2A6B9B8622B2C67DAD32E41F216E64359A0344186154B506F3750C094E78B77D30382EAA50C9960C319BC3F62A09036EB18FD9A4923D3BE17E5DDD26ADFF70CE185B385448E41A4C538A8CB0EBDD4434F09CFBCEC0D02B068D72F38413CF693474B851B0CE6769929A3BE03B22CC7215B45C27A36150B4212B65CEAFDC5F09B2D767084F7F26656F7E41DD2FAD567AD7F03246773126BE200D3FBD6114B3D1793676E4344EF3FCACE90F19E21344C0C7F8E1AB7337F9A5693F2CAA9C0D882C42A7D5ED3C1A3F66A2C4238D9160229DC345C8DA3C72483491F4A46E156DF0188F68E709B59B505C853450EB902F184EC0A06E3E262E8B1D0E4D22B7FDB20D5A725A8F22DEE1E879AC57D329BA31ACAB51E3913F31E64ADE46E8288823F5823FBDDF36C222FCE06A3B02503791480B4D3379B3BD30FDE401DC8A52DE7C2EA20A6E9E441440851E4F6E6BD259A55E9F23B0C18DDBCCC4A72B53756CBB715BD4168A6C95330783258E71A0C23923BF3FFE1B8FADF105ABF407107EEFF7127AF6AFCAD66B640EFAF85E0685DA467C6931FB3CBF6CF81139564CD80987C0465DB69255EDDBE42F3D138746632C15E1B1E6444DE8E3F9A6CE814AEC5DDB6494B6B76773731BE883EC04574D67B91406F290C5CDAE1D733C41C022013EC47D168977D332875F44C05F4B63539570A462CBAB3240FF086E9D4A64753132180670AD7C312AF8129783FB8E17E81699098AB65D3D621F3BE99B37E220A96E6FE14BFC026B1254EE2F194AE284B55EEF1509D6FCF4A0494AC778B49027D210500AE4E48AEFD82C483E212FA4ADBB0078DC64A3D51AB1BB14001B86DD08061D416AA95C5C6E3C4D4BE35D9CE53515A2B406F133079EE32B668285812097CC5365933096B18DE26CB9E0D19D1E8FD1DB7319E9CBA89900B4E41760186100A2FF178E8ED9A8150FA102EDD60C57B6E2E59D82BD378EBEB376726FADA7A021E5E38C58040EC65ADE3C4BD829946D1693D45A0C9253BF15BF26E11A958AEF445116F2808CD1C173288485572ABC585F5A8AD0029FFE5079D187BE0DBC0BA4DEBF429019FAF34438393FBCD17F59FBA3B49B4F411CCDF372FA08A3B4D59A19D5D6EA1BBAB15972461A0250796D98FFE9FA96B231DE612BAA279C206EFE8F41603325A404298516DC6292635B1AD3688E5BB9AC0AF2C6190C4C74C7273B5557A9706C7A90F87BDB030A406E93BFCB5AFABC36E5693372031EA2CA0FCFCAD692ED8D3B59E49E6A2FEC4587D32CA52E9C48443039A3F103A0691EF3B91F0CDCB08DDC1AE2ABFCAFA62D712DE2473F626291EC5BD3A4321BD91A610543A64E4E2A5A27F004EB8058D814A1AE8916F947A69C899FEFAE716F8979E2DECCBF4C494D6E5606C257A86BD2E9624559A0D99270930E2F3849F0FA928EAD1856E3422DE61EE923FBB5BD62387583A0C412D5CAB2B4098C396413300439A19C89D27C2B52865FC34923665F0268A4A3377E39512FB2FDEE0176F67C443B1875B08239D5FC9F5506201BC4FC25671394BFE43F9039EB0963664BFA8FA33AA48B67FF2ACBE0C931767BCD802D9DCD00A9B74C463D2D5DA849745D4A3772483AEC82B1323F5FFFBEFC55E7FC03FD804E9FF601418ED83854784313FA1B879C3ED7B7DDE0CF7233A25334CEDD2C87CF50CF3B97A364AC1C4C6B6DAF3532A7B86E1D335CECBBCF4B6875F02C3AB3555BB86746DA3E905821EDAA25A7355F2147B04366BB76CCE3FA3FA5F85ED56369597F5D98029F2FEA7FAD5A69988685A10BD56444B706C854A8479DFF65F69D1C7D037C1E09D8075CDA7AC5A36938C4A0AAE3E0542680A156516BD11952D3FF8BC675B1383391BA1111863C26D1DF0A986420D17210114E8BD92FFB79CE618CFA94C51BB86EB825B677BA566049651884844BA04CCA6C95AD66FEBC2B995A01085BE9AD2871F534B879E6C75AE4329CA51C9C8C86EC210B40DB2669D312E5F2A458BB55D9C8CAE416D4EB5A8532DE56299899AFD4B646BC0BFD68647C5EE9DDE669224F8C8A11565C5BAA890C9A11828362D327C259DA15E3E9653D8BC38B73F2A58F5F965F8594B2852B09956DE13318D725C13D69906CEB900425439ADE9B823EF5309294E1D6AA6A3FE5690A0FA2F1D0CFAF5F87B799DC7EE4137FEA79075233837EB925BDE7F533B9173F8C09127DC2EEDCA768BCA965997A057309A526707ED9C4C29F10FB3E07717FF7CBF261AE30EF82A7C3351633FEE14F40547E6D533B18FB85F5D981FCC0C2147EDB493624AD1892020EB33D19A1ACB394CA6E02963433C862DFCF0534E692502CE213E420E78C0D0773734308FFCEE01FB3CE9637D9E7F453F673CDF1C1D47D4B10C8E2FBE2F4EDF9EF171C68A89D51FB44069F161775480925353B825988AAB1343F7E17FB816E761222F9FDEB316C300D55E06EC1ECE7604D73A8A089CED2B17A8537ACFFA731ECC0FD4D2C9ABBB24CBBF3D550AA99ECF2BC4E8B900982541D76F54252208C66285FE08EC3A0804B618945D559BD1EA537A621C73AE0B7A10F9E7A97C5D00372EFCAA93AB2DF1E8C70D49227D9CAC401C4B4D46B2DB1D63ABE882E527D3A69E9A7C7FD44A1CDB63968267C58DACEA7D325A900A80AA16E1A67D7CAA21412ACEAC07A183FB1EC74EF5F687402702E8CD9F5CC07B3C98F076CC2D4F39282882C8D11C983079DEEEECD7EA77B03318C67CB6C23C7DF912E957A948161EC7180175DAA5098F8D894B826D94B261F35B9B9E05008532D60A93BD5B4E4A66A3BC9942846B2E03BD23735C3D885C245C97554DE86F786141E2B885DC2D563B175DB826B0882B65015A46558CE7A7FFE46A0B022BE55B18F125FB4954D33BDC618A20B82058EE005A9FE64FA034C23C3E2B5B564A47506863E0808A8E603CDD9094E4266B53AD4A0017420D37A49C4A976944D21066FAC66326CF0D16305DB1E5B0755040FA46F7A775DA031B21228D65D8393586ED41CEB6B9FA420EB8A47D9263C5F92464D937FD300821A4C5C0E64D80 -MD = 18E728926BF3AFDDF0005D2C9BA7CD63AC8D32763BF0259650D53710 -Len = 22712 -Msg = 08944CB473B828B118A31986DB67FC757F238182E790553404B792AA4F0095A6A83291E287CDD16521A3AE8C48F56FBC909DFCCFAA7BCC570C2159F26592DCD6B15BC4DD55CC05595AC634B2C3DE15360B0F07A03B5957BC9333CC5097919399DD9973ACE15E55940178C4C96BB5E0A0A10BAE175769548EBCE11E0D7D9DB29647F197D4B87F7039F5D4E59E016531DBEBF55A797AC9A6835032CDF34240A7EE7423E89C09124829CAFC5F89431C8AFC54FD979E50D48A82B47A53523C84B6004DAA323EFB708203E5388A6A5110C6CE2E341048A65FDEADEB3837A03420F9FADDC3F02A544F1E46D96B07C90C7971A7040A179E8198E90AA019268E00367120D5F3D98A5CCE82C885E77144B1AAD66EE682847776B04F01F501DCBEFE3903080A8058B3B8F1D823D917ECF31FC2D5B0795BF95A55C7093ECA7C801DD0BD0DBDBEDE7D56513128B29FC0B4D25A6240B24C99E017BDFF7ACAFC8F8DE9FAF5A2944384AECE82BEA04DCCC6D51FC6E6F27AA38F131B7959B13681A09B311D242E6222A1CE5687DE5C080508B1DB16B6F8290D33A3CC0D0138AC61FD9093825E9D3752889E9F20DB9F80F92750EAC88B38AC81C0016D40371EAB4A87E845E91446B0A07081B84F559CDB95340CB020AF22AEA1BFF2FDA12F7A42973FF163A1C6F33DB8B8214AE27ABDF1C54F5B03E29310FA210125E1296E8AF93A2996DBAEFBADD4C51C2C3B8A3E2BC9FE060C42BA32768F6992A99599206CD2291CCC5BBD50856F7F8D2D0AE1EFB5892C15A799B77482DE4553736B162ABB06631F1688F6746E7D7A37EE7EF24E6CC901175F04960C01990178F81E957E941DEAAC8846B3704E24204F43DDB0765C433F3F7D4D201459CD65682B7DDF3D47E95CDB31B96A4CB22907F08BA6E92A4A07703B2DCF150F922C4B7CF181380303FB72547847305999C3C8F9AC877D05D9DC4159DEB8A13D36AD1D533A56950E20F906D29D51DDC45BD15C1773991707480E37B827044BDC6473181B760A9036E0D3FA491C2F08C55130D8CDD5AC8E97D0813164AF3D28A585F0C2EC7004D498F95C6B62231A632A56C2D0C48FC3A6992D4051957B9ED6D9A86DBCCD962A8883CF82CAF01DA2F51A203D56B6089BC8FD0B1BD414C8063031ED469555E22EF872689C130B1C101034D572FD8CD0EDDABEC9EF1503D7F728B0941EFE2B9512438C7DDB176BE2EC2D9FFCD56495A4511428DF02819CDDA18D1ED5D3B16C6F42AA0AC681A9FAB51E8A1A856C15C51A3EC1031427142EA12543014DD4ACAC640B8A7729E63AB7DF1051112CDEFD4B988A2258334FA9A7F5B3A87A02074B9F69DD81B83FC74089A91D76AA4041259E80FA255F2084902AEB9E996AC2288AB464BDEC47AAB26A28A2A8194989755D48FC9A5C9279285F2F1DBB8B8018F3E4E13115D78A879792E45A8F4F24ED4A317440BA63E6929056EFC1D2529B75A709D6C0097DC2D97F646F334EBE6195EC5630132FDE58E25DBC17DAD822D9FA0938A2A2C926B105D108403DC29CF371C3504FF73BCE9C7ACF9A74C4954CE6A32DA96B21CF3211B3E49953DAB78C49C3E532A349003C59C62F7D40261CBA63A9EA21C89A38AA63CE431C43AE261C4D9999B1CAF491FAB8E7BE6E8C3454F1BE8793B2D27141FC107DA599A4694C41353D7785C05B5E31440458D17C6DB66FEB8A9C5C073FB946A67AC0312BB669D9B12FABAA5272CA6631379EF4ED420A4424A5CD08526384C047C33A84D5D7DC0C2153663B54C73DD799A3568C01B818992CDF8143F1DADD6B50CAE6EAE13AC66F31FFA2B362CC4D2880592B7FEE4B9E4CD6AA5E5DE27AAB9B5DAD9F7D39407AE927530CAB2B61CD7394A21EF47BFB813B5EA6091458D239664923280ED0D5CCA8285BB2281A2F9FB3FFECC8E9147E1E8FAC957D90C9E5F513738745A47C2AD0C31FD8986EF3B6388C6E821F166513811D547AB4336B5E04643497FC9F8D6E380EF6478B82B6E2F5F65DD98A63C68C32B94610E1D3B9538F13A7688FBB1EC3448BE9BD77BB93A34546172AE8D614F85228988E7FEB18C9A0C9827699E8B3CBC69750BDFECDA8268F694F4C509BEFC1A1166F85C829725299D173F867A300987A2D36D1BBBE37BE3208FB8EFE9152A41A5F0E931B6382FF7F9B18937958FB180E61F2A8C28F36C3C80C3722935AACB81C24AA17FB3E7A1026F7031A7449818ED62BA7705CA27C2D3268F90B6322921683DFF800A306CFC186CF2A61B37F35837B217E3B2CECB0843D84EAC67431E3D689F01522D4A4C73618B7C2965C9DABB15C0BE637D10CEEF72271CF39A7B803B41767BC34433C3E6FF449A439AE13DA1EAFA038CB9F2E1C84F1CE39C05DF56FE3D7B82386C4E628B6E27CBC5D575C66ADA3510C246BD04DB48F4AFC2D7352966DA2266C2BC9831532F53655D8BE42B421AC0D70D8AD1D3587257886DBF93668E907E861BA64F45999BADB0F766EADCE5238B5ED397F265935194812C03C5769137BAC97140525303CF48D65F39004A3F59B1FAB09895CEE05335D15B9B12265892F4ABB92AB1DD2002ED00CF3562CB67DFE1055968E4AB3306BB34BB87D0F64B26848812A2F7B50424A21FF94081A7F70F7B684AB0F092B2B085DCF84CA38414CF7290F607BF79C37EA84253ABCA8D4184D2DBE2E900200B81479E1CE8B71DCF2BD6E3C557A8E431D627BA669C2EA03068E0F7EA62C29777B22142D7A1D451BD541EF8EBDDBBA4E3BD8FFCD340E935BE7C66EFC14A13EA48134F655B0DE3180101F09D204C379743A357E6DF1268B55A9F7524398ECF3A59849A27B142239059998083E8FA91785E91C4D220B2FB17E3389EBAA384A49D89B5D78136DD2454F06CDE9837F096B744D53221127869904AC227CDF30BFEA78CC5545583F999B9C42A1184E2FB9FF3EC095B9DA0D138205C4EAC4C8C480C43153608849F63E161135C79D8B6C9CFE9B8DFD8AFAB559D8B595DDD43835033B4BBD391E028BB2A60832D9B697EE61408F149744DCE71AA11BB2B0436C1E2626AC3A27CDA293366B90B9CDE2D927855130758D3946B867192DCF3FCE9A3B9A5276E8C37B8CB136FC90A6DC22650F95E796A9886EFD3F424BE63A66DBB1041CB3D4A06F4E7EEE89F0B6D15C36F9EA010C66B332011C8888E8E4AB2B3AB5223191E1388613A0FD0F07C1B26D7CC7CDF1AC62A226454D6291B431CC3EF2DB2B2442B37DEFB942117FA247096BEAE598611B8104F37BEBEDD8BB8B949A89B5BF8E228ECA1D8F16BFEC75A02FFBB4EEE3A6D4A6087C43634D675311E72A9F3253BB5DD364E07EB4B9C84F586BA267BAFFAEFEC79E03B83B18595FE06D7E063EE604FF287004D141C1A43AF0CA7C5651D98F633FA875B4743353FB07BDE59B6567AE25F7095F1D9EDF30570E2F7D7EC194216898D910F9E295A41DFEE072CB56F914BB78CC9854129250F9874B63BB3EBE9A1CDC6EBCB0916E1C440354DED6AA818F2811DA913912A21D3961AC94A39F0827D3A419616905DC45842C8E69A43004B8AE922C8DE1E8CD0668674A7760153213835BC63FAE4F8D65614AFD74A34D42ABAD5025B884B34639340B45D49CCED423771916E18AA077291923017CA50795F3B7A3F349A3D29923833CE57801C631576E23B838A7767CA1BDA92B82AC502DB3688FFC83C09A4E40CAC31D20D9D32FA6724A80BE7091CDE9C7A6560CFB326B467CADDB9E9B7A491EDA283EFB0B61B4A1116DD859D5C0897EAA2A3FB2CD82FFB33770BF9E08091363B6B81D23E61C2A647D2BE440C5C79EA89690656D9F10B1F07942834E1CB6E2D2DF106EB6D6A21FA23819E65028515E88BD279F9317BEAFFD394EA51F8639371C3A89F11305A4CA35FB0711F5E2C7C3DD1659C790245812113204B4ED8AAE9FF09D43C6DDB13F5070D98831B2C7639FB6B9B01C288812DDFA8861DB32DC8268C07D30CF969953042B3DAD530D9D744C06AABE7A886C0FE57B09B7F42D193FB3E9C06329818251A2F7E6474462C95DED -MD = C1756C010C173E999B6CF11E3B6BF4400C8C866A18C2673A4705DF79 -Len = 22775 -Msg = 818753396AA8E5EC050C9B208F9985FF9BB90FD6610F9D30D7528581A87C6139F86EF3962B88D3171061C2A01590410183ADBC034DBE432A9497875F42DC820CAB75AC59B665B0E0181197EBD9E95E80711AB3C62B2616176B7458BC426F44A7B14559DDA0849D7047D7E02F0258CAAAEE3FAA8D6E2149BBE75DDEB29E5545ADB107BBF2621F002815A3C9161EB99D43043EDFAAD1AFBEE7D2587B4414ED37AD0BC60BB3B028A11ACC17B85BD799FCCBB84BEC3AC1CBC8E741F3DAF36C5F2AE780CD0D403AE2B5C7BE9A0DE0A33163808D3EBD13B1607230C6569B7DE230FA9BAF179DC32F56EAEA4780FB89793575453A3CD7B5C0108A53A5BF6951D7D9D8F7F51C892AFBAFB7CCA4B2BDB5419CA5CEA4E38A941EDEEA385D2CF02785261372B7B92C29F078B0518A4CD5635E94079AB3BC1A908480488DF1BAD8729410D03C000C782B22F40AD3CB4CC3631842023177EF2BD06EECAC9097ED64ECE1CE49B26DDB181401F94B766F041939E3E9EC524CBB708CA2FC560C524AC77984BB0F56148F693A37BBEDC7369B2A8147C9444D04DEBCA7F89F1F5B662806D11314C00071AE16938B8DB811A66F9F935E4CAC789D8F82E6877AF5F1054A0C3E481CAE54AD4A1B31942DFFAEB83DF4252EE62B33AD801B3239123B25367CB70F5D2920F4F91A14EC81F0F77CA21EBE4492579AD489BD4FDA262ED05775A366BCFBEDC3315B498B2577BCA9C0EC15716204DEC5B73041A8BB2D5A2F79F1A3296998AEE6374C3A4641E79DA20BC269BB69D5D87D22EE0343E0397387A2887C327503A2698D75A832A11444AFD54973721ABB90601434748573ADF1CEAA60E7C5E48EBF03027D483D4127860434C64CFBF3C19F5F189E396FC65210089D3B1371CABCE8DFD829665B84EE14CDD88DAE6F3C2FEC64561361101D7B760A0444A726D6CC8F2D8B0ACB3715F372D8021699773FF3A77FCF9D87C4937295521CC6A51B95D07F98648AB88E6F85618EA29A4AE524F0900C08FB92A9E30C5687F002918E49C99AB19EFE868B8FABDD920B19E2E3A0784CF2845964BBAFF23A39F1811A1C4865BE1F9363AAA219620FA8A3D4F5060A75706B68137B4D9FFD4E155367D5ECAB2313BDC395E39209E0C0A5401F3422BD581DF8904AD2A7134C52DC82D8B51D544A0A8CBADC59F0EA59577C176943FB844EC5CAE17DFF0BB38AAEC51375B77B8C62287E1097D3B0F2B4C9CAE6E59AD70E41E95E5D44C5FE7058B38D27803A2DD24FC51AB4123F97D27955CB6A8EE1B15D78E8544DBCAF08443BD6960E590AB75ACAAA62C56CD9CA4328BE5048B9533EFD3D6C6046045F70716B50DD23F194A6282FCA89E69BE48A40EEAE7BA8A019B9E37F876E5720F7BDA67FA1C9B5ABFE4B45F95B8DEE49405FCE39F5961F0548F8A0CE9052D79509134674580E928C4A120D065C3B06C14ED7E3D74900112457B23EDED7B4B9354437FF862243C2DF45006B6E3C758D177C1FFC4C5E8D416952691B14EA81846B788C65A783F2AEEAA966506F5CE8EE6C6833063997754082D10BA60CC9A466404951DFB164AC1D367BA9EF233BCA4747A1B51229408DB69C28A7106DE078C77373EF91C3124AB2C236DBF85C67D5CC2E486165D8098BAEDE3FBEFE0D1F8698F9451A30DB943B293AF60FB0095CC94E73607B54771EC603C7FE357CDA55F1A6028B03398F68E253CA95CCCB87593885FAC037536960CFEE602523AB4865658B16474E3A9F2B07C0CDB152F5FE646C85AC4A5C6A2E6B77B792CC788A0E3695A96709EFC07D1C9064EF1FF5E82E1E60370ACEF7B96ACA1CCB96FAE5EF9A33993E340B5FC8D64765B706AF22FFBB4B2E869EF61DC77CD69DA06089391EAA86576ACBFBDFCEC1C5DD8BB89A8BD576FF1C8DE48FCB1CEE337CB5C4EB2F6386262B39506EA3DDBB95F4C97BCF9BDA09E4242BB1B77E86E2F03BE13B8D6396FF60BCB4D198065599D3456F67DFCE0064212D836F757671CAC105D143515BD6CE62AFDC21F60E17AEE420EF88F70B3E519055C36EDD276688A7A24F05E6DCFF167E7AC679B0BC0291E206C5CC3BC18464E97F9CE5DA8D3BC9A5EC392F5563398B619B55FBD3AA5790FEE12BBEF882B79ED71AEC0BE5BC4628F5ADDAD9F95D1EB91EC5F9AB5143B11F1801E8019CED3ACFA1A1726ACD9C9FEDE29274950A83CCD5A0A870783AE0CE6573580A016A21305F1ABFAA4A99EA3D85BE2D6F102DAF7829D18285BC0EC24511A07080E8DD3481823B34C019BC52EB6C040C223839022BD67619C998FAAF2BE729C5747C013BC9665FCAD54F367293630935CF51750516FDBA5AD78A1F9EED0CEC9F63374AE0C14EAF4E397EC39D1CEEC5457A125217BA19A1C37836D3479094F21CB14065D0C4E018EBE8E61567D4E651C56CB79663CCDD02101F54C0373292AB97BFB93BFB61E4E7A3CAECA8FADF097C16C58ECB381C5AE543752ACABC7C958ABF9D55217C3A130C9742586072C2393CFD535868D018A7148A9ACFA31A0F87242814ACE60C811D4257D709DBCA4026BB89395DCBE8D64B02E6D625171899116D5BEF078278F44A528FB07EA314E7CF18AAEC19958BCC6163EB203F7713410268C7C4FD3041C8E9B6C7806E23501D888397EF2AEA5B4AB32551C08C9014E3A3AC885C7E468B98450AD8AACF1BBA9EFCAD7B87D3010136943DA7FD44A29C4FC35BA54EED4C975B5C66025A25F6601400EF04328922CC69CDE7B9262B4010BA94288B23096C568F9BC3B71D81A323CAB2DFFFDB146A6E73AE69D616B27BAD412C30C818E4BDD743C673E809BAC9437D17D716AB49DF3D872614DAB66AD4131F646CFCF52B960B7B11F18C5F72457E87BD7F71FC15D93CE24C6F1D2D9BFFBD68D781CFC40C4778B907583F9EF2A4CC7F7A739F57300F55458D23E54471F16A07591E687304EDF8C99DDC051097306E7D08B0FF838FFB769EF17A6C49DBCA9B42745B4CF831C8512338544350B783C126FB2E9CA42A9315CF7880B415BC4A36549E2002099188BB58344389E2A80DEC3D437A68FD4CF32C4C7308E5F14AEC885107690BE4DEDE6E97858A909100F91615DA726532EB8FA4400B54891D548A38CC96B620EDAE3DB0F5850E5B992A2B74E111E5844DFCC17B3DB3ADBB6561FECBD7BCD44F6F2FA8361EC053490878323AB7964E4CD035800325094115F29C1A9719A9D60BBDE3AFB56673DEAA565767E500E1E38B1D5B02B716721A716C121FAD1ABCD7B0259CEC4ED564A9108998F2550E9096C1BB50307D3F7FA952559C540859E4508F636FD7BD0C383DEC6B5D76CD7BBDA408807642E141203327DAE9FC4C0F4F8B0EF05CB52EC2939CD85A83A1B93840FB6119D4079EE7F482E7356C3C12443C15E49C5893937BEBB4D9DBCDE0070B54E3CBA52ADE605BBB51C3D8E0E0D2BD3CABB980EE4A9CE5F9207BD105B16F2DDDC251F1D61E568A5F8D9699A8AFEA627B163F113C54332FE039510744DACAF7B5A8D2472DA3A9FBE106072653C8ED61981B447B7F10319BF28881835CF681EE18DC746E85D1A3FB6C7883F6CA50F800DA273B5A1439CEC86D77A960FE06516676C4BA41FABA6D21FD0CA0D184A0ACA7246EDFBE85D5A8D85ABCA6EE360AB4B72CC4C7BA3E712D4A37210F06BFB0E6021F9DA0A1ADB6D3F15346A2759AB125E53B39C7F786154836725D7A23AEB421F5C5DEA116B0384821BB03442A63A7A694E1D873309EC54BA20474B599199C69578974FE8FD1F7372C1F1806742CDA02D3A964C2F93298E9E0AE7CE6A514F6BE24755FE62AC8B2FEC58A7625B8E599E97C1433D92BAB09F432396048DA1E00156E2F7F84FD953ED659E35A3B82BA50854A56972876DDBFC8A2257A4BB8254661CD5A224F1A04F37FE28F3437B49727B2192883C7A96F343B9D9F5AFFDB04C8A91D3E446A303777FE9EFD461A1D05DAE0890FECFE5863CE0B9EB6A9553030F77F83E2A13CC43DA5B70570340CC6F2CEE7C9C77D0187D79FFAE80676BC54F15680E4CE64BF2E1A395DF8A6DB00 -MD = 4B5D081C865555B525F05F59CF42C0CDF494C09B375504790A1E055F -Len = 22838 -Msg = FF4FF4CFB00ED79AC1B82C200FA33EA6A1137B476C3A01DF6E8ACF133DF4B55BF080B05D78E923EF3C4BC5E29EC043C5FE9B684592B21E71EDA768C6CB4297A870648446E76E2C5C2D2A2F174AF8E9C3719040A67DD20F13D81C4DFC015B2093136733439D33C53F95EB446E6F84AACB2BD91124681C5073CD6EEACB96ECC5DB52F02BF9E5F6B7EE9DF2D39A4A41D969C2C19281214703BDD12D21FBCF4835125F579C22994B061E2361FE50A895E80BA79F37B9835BE7E5050758C8E9D53186D8B49585386A880BDF260F169DC8A3BE7CAEF5EA4063064682815B266AFDF9837185F89CDE6EF913B0A2E27DF67562A2F50D1C0CF91D0D7336DF271199737CE0B4116FA3779344F5D2FAFA75AA5A3DBEDF688752AB66138EEFDA6703213D693706309C144793AD58FFBFC606F71F4546A9CE22310DDF26970664980CB73B4CF587AE12CCCFD79D43725477EC6894241EEA5DF9B40EBA098790EDD1E78F5EA8D80587C1828F5F420A9996E38FDD0E9E0AFC1759BB01C5ACAC3B213B6E612F2AB9992BC26D57D38A10A744338C0E37FA87D95751412B286FB68E3D77E374C67EFDEB38EDB499ECEB0A4F771CAE0BDF0B71BB10C8814DA3A077FC8E39AD27579DF89433004E13CC38084BE0EC514EB61C944E52E9A99E4BFE7DC295F927C1E84A72646846E0FF047F5FB564CD6F173C80DB9D7B49648C6E7555A8A3EB300A626714AF3E37A1D7ADF6B0359EB1771938FC30B31993D62E3D5FD85D28991543A85F23FF93E714E2D604E426EE6200AC826ABB65B6782C7C25531F46E15D194873C2FD6AB6E3352662A075A1A9B723179763E541A00BA3BDC46D924DADDE748F488EF90A16E57FAE9B3D379138507CCAF3BEA8C651F7DAEC17F8FC1970A56DE74B506B712A82994EAFB5ABA248247E0E6B5D83CCEC96E443838DEB27D8AFE72A7D584CE554408A16E66ED07E90995B0392572592C55D4E5E6C0714EE82DCA25DCE38D65A8D8BF842452B697DAEDFC7245C78CC1B53C72B15252675107C64DC4D65C06C8F62B651CA5133BD0E966D315D5E4CEC6E88B76AD7A478F4C3FFCE27225F8F62EBBF4D01436B97F3F5AC32EE9C5E8575424EBAA06E4DF497E5966A4DC1CEBDDF1272529E78C30FDDD5A97BB385E8ADC3987A485A3C06ADDE993E85B8F0E99D64D08D96BF5AB0472C4DEF73CE1DFE8F801DABB8046799A3574FB41958AD393E2C8714560619721581026552454059896FEB08173BA30473E3C01AF72E71AC5F2BBDF4D5A70309271DAD37C421A0FF8A14410244B56E7C29CAB756957DB2DDE0C30D14BA11E61BEC725735CF42FA7E0CD74AE779A8EB272957A606899E120ABD4CE1A53A6580A0D28C72FE3EB649D4DEC300416E09596323CEE82053ADE5C30BE97B3973458F6D7AB948D5FE9E06E64A4923F98DA52ABF74AF43C5698A1F476677E5A9B1A519BAC173110DC5B6CFD2E6842AB86F35D3C0C14E6AF08D72DABC4ECB1F54D252EBD9A669EFA73F22D77C74A94C1B8EA981FF766A5C1F0A12B6DB6406B642C764F55150ADDEB25513A6E60066A1BF47D2F7485F965CD9FD9E0B56919C8D1F4AAB53816D7DDDBF31E526ACF2895803850C20C830A93867975726CADEB9EA063B0521CA5F14D774C7276F7D9C86BD4DBFE186241DD02233CB855D5A0DC4E1CC69FC37E35E5CC481BEB05D3C3C6773870AD98D791087A61942EC4549BF06495CA834DF537F30C57A94BBE481379B6B3915B0ECB6729D02D368E9BD5AEEFB8D78EC85A315D31F338EDE6CE9F215E0F7E0601C970EC980CD5EED22080E86D9FC8437ACA25F03E4F674CD836A9C7DB9AC01A223BC198471F28ADDC5E6FD3116333632EA454EFD5A5EA523DB10C790B3F0029BC26D1A92DA6F17FA233A91C20BD8EF7C6658B050AF9DAE325CC9647B83578887CCFC25A28117AEE9A1A4459DF59323ED14D407F753D643735591613D936FF599FF91D53CE0DEBB6F6EC2705A5C04D06BBE985D2A177CCC2550F8B5C3827E3C8BB648939DAEDBA100E9EC8291D02D11BBDB7BFFE9BE38281C544D7052D469AB51C76A6DE8E08AEE0D253E9F648C24F75E8BC4394EFF9D7958796C9DEF0C97E6EC8BC31EFD69D2E30C68366D10E70559525988F5DDBDA431AFBD2E11ACAD10BCC0C6D7F9FE06718DAAF1F50F54B54E44480219D6F419696F0B68D8962BADC2F277F2780AD585BD4610A5C3602A6E1B50B6CB19DFCCC49A8CADC03353CFD9A9B1661C9AF69446DD4290B01D42E927D32FAF8911481E2C3B18EAF7A448083E8D64AD0D88606F2E9D0E20F42B1EB4C1F9A48EC532ACA24FC00FAEC7C84B5CE3982B364B9ACEC3BE3A4728DF19C1156DC873ACD0DA126D3BFFEEDCAC495B69718A5B325563C807D0F53BB9A357EBB94B80B34C6952345A0AF4AE405DFCB1AD9527183464BD5043472CE3B23320CDEC823E6D0A650A7453F2F10823E1EFC9CA2E615A45B62173BBC89EBF511456766DDDA1AC562067965CAF7CD8E25882338F95A92B4F4EDDDB58EA43E0EB7A7226FC8196E2446DFE71BFDF7B107424CFED5FB82990868508BE2172EF3FEF4D63E3C29783F6F1256C6E26C81363A067688605D548FFE0E21EF2E3C07376428786BBCE146027CB939F134861DD72D0C71387F21A6144A8B3CC57DB2BF3886E03B1E5F39970E9B97E8C55DBB06B0FD08F2BF5014F18ECD91DD454B2C655FB00C92950BF14E3215BE6B901CC378EAC5F3689D687421AF9F0B38C5CB93E1D25323F9B756FB28D11763749BD5B885862779481D35E8C0B025A6195E126350B842FDD05F7711FD69B36B3BAE47DA579425766C45026B5759E390AD1A1C9ED04E53ED8784EE6D7F9B29DF086372F3BDEE56077E88F595525A3295DDAB6A47EAAAD45F30ED1A717732C135006AC1E4BD03E64B9132A06E53AFCEA3A968457430967418998D681223AB44051164A7EAAC7551BFA4E8089C9566B7ED5BE3F7E1FC0C802859B3BB1BF0F7150358BD2CA0926F1716F887F37BC693621691A5F27A5ADB630CC09C5A0B31AC85BD52494E6CD957547CDDDD7D6DA14791E2373B96FE5603EB74AC887E0AEDFAE45814C506FC4DA65A9D23B879D71148E2CE6BD8A06FAD8D705B8A7A0352C4B0BE969D9497D3FEDC3DA790B5DD86C0F0AD2C9B15C6109C541541F7E7479C9AFAC23A969ACFC939FF0E44FAF346E430319D32316163D5EE79641C4223F7CDE00AC14E84FAE6FF2D7A261AAC1524CE68BCB8D6BF8B662DE3F1F55DD7DE43E16DD8272E0529B151E3CB3FFE686519817BCE919F0640B6B48AC3158E7829AB2D616C839946044ADF3AA7172E878B92C8D8B86D809BD3139910E1235E7716AB1969BB4CC28865C26A2430425496C1E4F6D624C62610969F4F7E715BD6660A51378A97742C249AB4351187963BE6CF282B9189F9DD92D88CB0E481E1FD4CE364E119662513E87624BCE3A5B15BFE205A8DD3099353B5923FA95F568325F4D0EC6A00EDE6CC14ECE948E1EA74E841E26D44AE014A7E57FCA7843B8995679CFD1F3CA3809CCCBE03F3BE619BE36A7C385E2DF8F3E9FB9D6736788430DC67BC43337C701DD3B884E5AD3B65C902D5843066C65236C1CA923509DB7057E0244C4E104F66DA3A1CD333186705807B53A45566C09661F2A475CC7D3EC51753F3957DB46A71CA1067CE94AA46F37B55B9B064FB90E6A54198A96E1B8EB518E62C1EA6ED6C661F6A07A7148D53D20C8596C7377A2CCD7A4CC63FA70ED7448990FB313A6F8C478639FFCCF88497FB7E939D48F057043127A4BC232255C88DD50E49849CCE349FC668DD57AE9FCAA38936402AE500F47B95A2B341AA97C052679EFCCF7D5E5F87D3BBFB7D5A7395D24385B83F79AD37CCF0020FD3A8AB66DF8EA0A9DB5F8AF7E2BDF812B2F2E8B80DF4C9FF12A7BB54F5AF796BB55C64423BC100AE7D8AB2B431314DC16F18924C602D0EDC9AE608277A1BFD09E1E57418F067B883B718AF56A486A6F5FCC8FFF9A7B9D370D06BA98A4B5ED2178E4E0E4BCD5AFB3B1EFB4D19EFE09FF74025C78 -MD = 29C4D488007655B13E0BAFDFB034AA782868D4B618A4A2976CCEA204 -Len = 22901 -Msg = D676264A439DA8E28289BE916B7858C6C5537EBCFFADC8825172292D4041AFDD011C4C84D5DD787E2492843FB7D39039B85B960DC129AD3FE566C76E5A79E0BE7C707D0A91F325C393679237489F1DFA8E8CF36618A3EC9F8301405815B14DD6E28FFF7FCF83EA31A0FD1EF5E4BD8F40F64652A3C63A69E3AA4B90F57AB834187E8DA59FBBC78EEF929CC0100E2E109C38201293F700E47E4B5A7C2BA9C82BFD209D5F8EC312DB27690475055E9D97D56F97F644406C0491DEB301A97A465D567C55CE823FFCCD847A64184FADA46C80D74256C6120E62E170A5B5AE93C8536212D72A3117A2BA5C82A85A909DD2D1C010002FE1E2DA60D2129E370EAE3D67150A5629B571447DE4AFE734E9F6F7E2915F94B83415180271D59E6F17A208B066F24F21C1FEA14A830BBA66D13741B7D99E6D92D6994D9D2B63B4FA5F504E0271299DA9CAC43B92C1B8B0B641652D1C413BCB451D5C16130731BA614E812EC49A2B7E5AD1440DCDC189A766D629E6E651C1CA5861C5BD9DFCE97B67D9771020447967509D5C219D98BDD223A0EC16D3F97479BD35301AB49A7B24644D23EAAD6C1CE92DDB3097595E3FD9C67B087E4A70E54CEE69BA9E769B593A10955FF25482941E425FF6773858922D0A8C4A9042A4D42C761AD94A8EFCAA44A407303BC69090A3A2B273AE3411E5735BEFDD7447C454A53AD01545E713267A471876BC243E6546BB21EDF9325E4BC6A9FE00C1279B850F99950186B9C369869D71810C9D03BCC71DC035E7C9E4AF2489AC997897C705C67C0596A05F05CD959D1189DDFEA17BC82077EAEB1666A97012DD416D328BB76AA8B36B795CCAA8236EFD16902034E421671906A750D2FA291362ED63C1C3B0858E3AB4AF7F38D1F125B1AA7E6097C133E12ADAA10878EA2934614BC7663D5AFB4B70F20510E86B8943E4B81A67EA793FF20435AFDCF484B6112B1DE36ED256CC0FD26A43256B3A9F83E82F5A7EC0E6FFF0A63C0AA6C6D2C8077FBE1B8D0E980FE9589D84BFE3892AC58A23EBC9CEC31178577E0E797210D25D3E256C22089FB8AF8CC7CE9F221A3D558547FD8F5C30D6A3291F442F1F52DE2734D47B3AA3A5FA61E0D13A7CA71EB7B00EE88D3CB2DF3E4509AAFDE0CD8FA8D948A3E3EFCC13AF92D3B77C4F6B304440C165B839DF9BFEC13576A6F2C22EE6FC4860890BBD3989FC603156D9CD76571486C7F931A78D3FCA9D636D2F6DA19A0235DA0ABC3B9A8A0B4DB34E5AD991D81348E776737DF7A14F062B4677773B58BAE7D14C8D994E3DAE0CE17B97CD9A5561919D25C3072679D9163399623EE6FAA8E8121B7C235F499D2743C05F9019F2084C917B37213A5DB77E582A0816EB7804C32A0C138C180C6545696602D0CECEB06C5D725326F8826ADA8E4D03A54DEF2300B00650DA8340C0F900521612E08AB9E3436D64C7CE1AD79C33AB511CF50B990569124C6DDA47106557040C55CCA5B3301ADB23A39E6066B794050C6F27FA250D81DDDE4543978C21B849D350B18782845CFAFF3AF8F87B377A65279E84A762DA22FA86E36FB77DB870A27082B077EF58E8EC6B579B769EB453433DAEE1E1D44BE5EDEDB8638752026F97127A8BB62705B29ECF853750192343677BB4D07A41C2C87E61AD03960273768395D581815C9219CC97E6F2FE5B0E417A7F8A830B9AC2A7773E00D48A3E318F43E224285A2189A0882CDF612AFF2115B40B233415C0FFE53BE1D4D958947290F31D39657B036B41A205108A926650768D3C552378DB32EB489C79F5F00D17EB4168FF72E34CC605F771D644DA887D86B4013836D6A76EE5D17047FF7C526B2CC9CF6BDDB4E36F6F47B4CF72BC5B99689A86B17FA7237887ECEE754CAC9C042E33C00BF70D71912D4F6C34E530E0579F33D86C76004CA9579FC97F64FBD634277F1C1FADBDC2FFBE7E7B5D031F083BDD22372809A40C47BE936288567D93FEB3B4ED3C7ECDFB28B81AC274D62734DE47D06659485EBF912ADDC020E0CBB20BA029BEC79787F06B8E30BB7FD4DC9F0A8A957DC93CF57181BF75F89D61C14EE0DB7D9DB9EABF6D320257F16770D45133A27E1F471EBEA83EC875595B6346E7EEEFF7DF2A9283F85321BCC98C36A0BE50ABF5C75C85F4CD799ADC8E31B6EADCC08751CC0FCEA4F8405E635696779CA14184B4E8B3BD05AB7DB104A991CE9E9C30CF75ABA844DC67F343163458FF37D9C92C048E640A17FE1BD3770787A9630366F6C2BA65F68F7A4E2DCC672BDFA688AFAC4B75F44DA2FAFC43EE91246270CB77146E51C96669D78EA4DFB653CD3E4A2A3EC73E5F1932530A55193EECDD93AF259A16D1B39FBFA58616EBDA6CA4E61FE9E6F164DBF78ED2189FC7217857C409632B7BBD52D9E139C979542AF9F2636B210BA3F92EC6E858A0012203552828BB32C96DDFDFA979C7D0F690A4275F6491CE6168235D5A40340AC96DD4E27A072B8D225EAA5C5F8A51A214C0C3C11CA6A93FCF79CE8D972F35467FE940ABAD82C570609BC689CA697E39E0378D86E7973BAAEA07F53B9591586D447721AD1266556487201B8859B9C676C64FA6E4ECFE0B52E5235DBA1E10789B662E7158266955232EBA6EFA0F838E583DBB3DA18CC0E3F64CCE9EAE4B88BCA77A73CA6B1BBAAFC15E8166C077CEFB88B8A1A83DF46DF8864AE97B010E6F7E7F5336ECADE5999F5BF93E0E6F0FE05A988E56248FCA369C0E3554C1720857689A1E2E7C2267496E66854E39F46C1E68B37F173C1F78A6971AC0F274D31223CFC26C872DE934921E2464B1B53CB7854669022DA8081330C1CC511851FB4B215DB3E7DA66C7370EA7B19AE47C51AA7C94861F7DD7AF31FCB89C0AB1F9D352C51DB2881175150042CCD1EB20CE8BC4AF22E77FD5409BF250338536093C767676AF22D6452CE477A156729EB86114FB5387A8093203019C1E29E0CB83DBBC0B4865A1E29DD3DF66BB384688761739A9DC6E9AAEAD07CBC4B6C7E9EC2FEA0CA18A42E81B9E7A2C7A9350C4AFD347DDD2D526187EE2DE92811899208848EEFD76670652AEB7072BA98B0DC79984D52643C135C2BE6621CC0C3C6CF84381429D18CAB1DC448A05276490FB8C91C66FEDB95B45444295FADE98D0192425A4F819B08A421A1E19A992F0BD6E0A0C39DAF65700E0AE2261686C0E6DBF93854B7E5FA7BDD9C766AC14BCB7A94F3BB0919A652003632E17F9E749D3DBAD10C143CC3279D34BE3384A6D16261696558BC76EA06BD6F3D3FC20B776F0D1D46EC94C1E0E82D0D2F0046ACF64D5B609FACCB0B77F4CCCD08474906839FF3C14754131328A9B385F0B834070F19F62E65EED1C187F03CE022B77E6C0FF4D5BF2A8972D910E72E0DC598925B08D321FC47F913D585EC1AEE320B61854754FDAD67CF1474ECD3881145F5B2711A8DDEC83305FFCC30D1175AE76AF213D6025304B147C0725BFDCC7C2127B6D48E89270CA926590ABDD1615861BFAF55FFEB388F873471C62668F1AB2F2D2DF3F3AB1FB894C502B39287F2B8CA5648D8F289E5A548B4C0A5A4AA9D4AC3FEABCADD1747CB30B9A6564ACCFAAB440FFC39AECB058F2132DF9BE3C5DD2711805ACB170FC963E7EC194FA23429C6A565DA0524C7B616730D68075C58959EB4B5B1DEEFBEAB4325663AA004AF0714262CBCBDE18072011DB0124512BD826BD173FD5AA14C49C2EDEDC111D8028DA5497AE2AE11E946D6B8BF432593232D686C203E4B060BA4124E48CC4DFFED7720B39D69F29D0EF0E8EC68109BE61FA8C543AA4862C9924C2003B704EA19309FC0EA77F256D90EF190E9786D284DE52766EC52F6E38DE0709B2991D798FA5E40E6F3CCCD33EA4FC3B40AFADBA4D2D3016DDF1A4FE7356D948A57E00CA8F89A22328A5360165DF09E0705A1FFCD38BA7B88728C457C6C4665A0DBA469428AB2D481CB1276A001D8436D13CA4EE7D2297B48641CF6A9DEBD4FCBE9CD69FCDB4934A02BF75B487522E825C17C1C81A5A3DFC27350283C762B923C87C1C1D1582878B9B2FE1DCD3AD17E145F83F95A451B9591199EA1440 -MD = C2D63079E4231BA67F03A224299432945D16C0C67C940902D3F30D6B -Len = 22964 -Msg = E821F9C33DCC3744EE5D98CEB3752D4FCB17B9887F660B9D26C112619B97BF33A2D40DA11A6D8B929248996BBCCB803F88A57277E7698F3190B4F79D98A50C1FA733C8BC14CF5FF9F90D48B5E4D5575FE1210633BADA98451FC1FE8CBF57C24F3ECE1B6D1A521D2CF81D7682AC99A2F2E71C851D434BF9820EBC93457865C85E281D8A8F0D953FAB1FA9A1363B7036B998AA65D3B07BE17F2B8935F18C1FD1CA2C85173C22A7B672E0C7FCFAF2E511C742C2250FB6C9D40292BCCF1C8E0D4BCDDA879BECD092E5487E77A0A3C0D33F61FC783995F97806ECDDF5A6FEE2BE67F3610846D104CE7F718AD2E224E7AFF6D16DFE5A3984775F23C56341C812CA88D63C2D8616C86AE4266662F117EEECD225CB102579F5CB0903DDAD080334F14F222F4CB4E61E046F8D17F3BC8872D3ADDA2CC2A57C257E36638C73344544A6AAF847627D9455E515020E1B8FE369D1E2A7B7A452318DB22394C6AE8FB2E294DD3191134354831B9911D81B0C7303713F4B0D3EF0FC8A4C970DADB2EAFCFC4B9B3222740BD14AFBA5452439A0A4DD39E2238F3EC621812572AD02ABFBEA533F78B54AB34A41903BB2A5762C4B1FCC38F9578E472BA31B1A698BCCD5EA45A7A6E0C284D2A4622FE39515FFF311B30AC11C30455F62892686278BC734194E62890E911767C211241E9600978CB51306F50CD62F4D501CA7A4E4F1FBBA22A0D679AC9203181814E7A482AB1D19DD8F51D9410CD25A30E1730739F93C3EFCAD314CE588ED50AD47E3754518EC394473E1B359271CF86BFDCECB4B21C7E4D0A56476848D7E3A197F4B516DDEC88FD49AB2F95CAE3BBBBAE3518D780F12881CEB49532B554A9EB7C1D75CE26664E315E2051E1600752157C25BDF2EEECD1AAFE944DEBD0D8BD95F1C8780A814A37C6082EC2D0A39DEAB6F6072F7DCE9698E2F4F7D80F97AF38C14B829F2A270A5E6BF28C31AB0E21F56AA2A78567EE6763BB6A77D507F971244C6BD4F5A4A277798CA78C700110E6D95E7AF917DC59F888F51CDA6319D90BBA0BCA0664CE2202B657336ED976D6E4EBCA976C23F5FF740DD0D405D892A1CA74B5998C2F27CBBEFE6AA0989A986E869AF4E01BA9F70E414B3884C11C11F42DE80FF5549997B895379CC6EBBA6DDD16C57F6B4DC574CC42297DD6C698FE4DAA69634577997CD4C7F38C580F2315BB1333A51F9E0518311B9BF8B9EEE0ABFF666FB256118F819CDC2EABA8A9D4355625E6B6E0BD6782E0E0B512CBC8B72C173A8FBF6558514FE3D7618DACF47E6347B6DE0E6A210B4A07628495BDBCDAAFB08C0D96ED7A2BEFF9871DC02E612F332C121F969904B391EF75532FFC7F842C58090760067CCF348398A8268F108DCB382A0274531A8CA68DE39B30B3D6D2046B89CC8F9B856B1544DDF23C3C37832BA50BFB347E07B33635C4305AA7C73C9CB34F92B308D79059D1C92EBEC515D245D7B86771A785BCE0F579F3490370A9A263B00C7227C528EAE2DCED386898AFC101621A1D71C42FEE7293446DA71B4D29F5272CC645B8C2A6688A64AD9DD4B22111B1988C3B6DDFBC1714F01DE17EB17D622E23C1B77C9201A0F3497686BF0FCA75184D76CE25C49B5D40EE16FF2BDAAFFE8E24566157161AADE99CD3576AD0CC3FFF849C61C4AEEDC83786C50F9F633EE1B4B4B8F562C015D4D19814A310A037AB59781821440207F59A82FF6A38E2FD014DE6A6F9A4363AEDABBDE9F72EDFEF1F08EF5B0EED928E14ECC5244D1BA6A2A7A73E70785AD983BD2CCC0867681ABF01F2276C71C1506BE95E9E7E35BC4405E844C34BCFFD64C828321C96BAF8C037E5D410ABA29EC30C87EE6A889DE85341574D7C85B1861E8CFD6BFDB8798CE39DBCA2AE2F40AB3BE7986786CD1C15C21B562B2ACB5126DD88BC8FDAA28BF00F463432311A7F8432DA75616A7D818D34ADFE77C35AAD231E5D609EC27B08C3B64CFD9B224CC54E4E581C851B1434893D12DD7438D2ED2B073BE479234FDEF8A523D4F36969471C613C039673A9432F73266DA6D4C0FEF2E515FA01DD487100849D51BD2E34BEFE8C20B35C3DFA440C8F814C0A27CC3574B5A3A0F769B8C3233E07306BCDC0264D594EDB5750E154905CB1AF7B1B29F7989F9ED7DBD35D1BDF000CB9A621643D58444AEB3D18FAB90E516E2A040321C1A9748A15D6C4C7D1B96750375E6C704E8A6CCC85B117E4F731A5FBCC76FD707F0B08F659856722B11B96AE6D6B40913D6CCA352942C24795CA8F196B26A445D29C86DC121A5CE4949164532E3F2D98710E674C630956683FFC0B28184523DEC223066B15F68CEE049F0690BAE6C9082C0F106804002DC0892E4718E471498A6A15B8F2EFF7A89B93CB01EC7D38BFC9A296C8BE877EAF5C776D6C2FE843CDA235C2DFB5AACF6587BA5D968B52EE238E18601533EC05AEEEC5C53468C0693431A57073E0C2DE9A6C3353C2A8235A825048FCE35D22F159B59FD9367C122BA3C3FAEFC407B5B9C40DF14530CF5B0D750C78CE70DDE8C68A455329E95FF5326ABE18967B9919376A32FFAE827EE9F1B7B2BFA6242590096734F0625F3CF9C1FC6D7123CFF5AD2A5CBE23D924080C537D403848CC913B3BC8E69C05AF82080A43FB4D7ACB6B101EE2384FABF4046ED742E404EFDF3A5A940751C951D0809B1524C23A5067A3D38DFCDC84BEA37EEDEE593DE1E0748CE7E4BFB5DA9F668681751BE226E4C36BD43F754495727DACBD5EC340D8C9DCED5DFCAB2FFFDFA48E8FA6E86F1BEE36ED0156539ADE84D43C2354264731CE1F14D1E726D2209F228B59F66B881FAFC7829229751743FFFE739B0B7A4E72DA9C1BA4B412F2319A6287A85EC3F58CF2318F409F9355AD3AB3F7076672D573559939307DD1EE57FAEB16B2625BC0DC3738F482033CC2248824A0C73C06284F857E005F3C8A9A67ECC954B4ED554E4D219B20D4155E9C38814D6C01DAC871977AF1B76A9B41F5D1278D5F35DEF606E8E5E07D348056CBAD7C1B905B0797513143A85CC8A7E71EA461A931E94003C6D1C391275176A83B4F07A6C6DC7790A0B7D4196E7FD1FCD33DE290E2FAE0E38B3D35567CCE0E74629A73E27890881CDC6ED42C6A4DC0BC584CF39329591253F3354A4A55523CAD3E481866422343D6726AC1A7F2495B0635FB396D718E0A5DD6F438C71EC9C03B4C7D0D64E78D0C92C7FDA0E250571403CB03A167FC56F31E611659145200DD775C70A389A165903AA95AC58A749CF9991427D0F26720BFC094FA47AC2B2F104458773028B6129D49176DD8EB6E783A0BE7AB2D2B63C0C70FACFFC6A6E4A651E081DB760A0E542AC2585BC8AC03FDA0159F21DE192F0DD8A566CCF6FD59B5E18D4884498B2E3E4DA614304D4F3572E17FB8F6F95C46E1E3F3C902BAF861C5D0C6D9DB22A3460A6F4412D85DD6EC50F7862322F7FBB3C53A98D0ADA5814FC064FAB2934C417330E59D1414DB5F5CD98A4784B12E213A26AB7705E9CB19D437AF0AA7F3E6B92259D96D54361BE2E7660A289D81C88E3B8D8BAD400BC5ECECA4E84567F53787DD9697DCFCCAA4B20A3738A46C7344F55CB40D26C2D9FB605F23233ACEE867BB933629301ECA9B7AB9657BDE3FA45939485CBE4CE6539E7F5D682A114712976D89D3B5AB704181D853E5E4E18AC0DD428C524028166D739D75AF9BD79797B75966D1B29AF340FF11C9359AEB95D8B4F0E2A23298ABDAD76F1C910718ADD831CAD57C091291D96C3EEF881AC3E5FF3BFCB4313DFDACF7A1ED05D098DC413D966FD40DE3BFF5886900EDAB7290D18613597FC88EDEAAB81D8ECC5C5E91757F23F2D43FD9D76DF8F0352140E93833FF1F3675E4ADCF38C3DC1CBCC936E077A229029DF29E89D933F558EFFEF67CB3BF43C8BEB73441069141BA86B9987615DF0CB3882D6CBEE9088F7EECD58EA719C218DC7A148875953C1F758F6817087F58F2786E56EFCCB6F3DA68DBBB74F67A492B536B3940BE1EEE02729212AD6DA1536B4F3D579FD40521AFCB68FE3C23F930BC36034F41BEB032C20A379E052008DE3A775D56779F18F5E2F45B0 -MD = 14ADDCDD2332A0BC5CB20E46FF798328439E3187FBE5236711B1EC53 -Len = 23027 -Msg = 21D892205EE5B97D45AE1CBAE336937E13293367DAC89787FDA6F8AFE1EA2BAD6B9AA128E8632CB6E9C525F4A61914DCBA4E2859BB9A309D7845F511E20037A4C89FF0F3B6C280A381C860C5DB06749F433738EDB635CC8B05C5430B811E72584BE68AD154F844683056113F612D70934782E25BA646D2252038D07A1C5110599E105C1701E94572A9DD25CC5D412D31E004B46DE13D76CB08D37291AE6C387150F15C6248ED7E45FC8F1CDE89EF1B30ED6071CDAF6DA1917F62378509B64CE29F82505699ED81A3661452F4EB426636BC960EFAA338A27A17FBFFAF8C94A73F4D39F1CB7D1432F615A0A858F8F2B58E44BFB9C1ECCD0044C6AAC4C9EC40C8912703E07589536498B89BD56EBD4CE94B301EE9724D1F5FF1C15D1C7A441C6DB8B2B78E9F6009B301F5C644342092790636FBA8BE40BACEB3C4C045CF0B0195E6C8C56E4421FD2A5A8D49B26D6C06E727945A280B4ADD2E153DBC6355A80B50E2BDF54FDB9E89DCDD6E39E16BB33CC00A2AE57E2108A59D9128EFC3859220C0101D3C1835419147DA14D74C7ED59890B0C2B39454C4408B8E17ACFBEB3F94857C162B0785EC6F0B8FFFC03D3C5D93006EF933A90192A4C24ABFB63E682C7418BE0C2071B55A54602F0685CA8F44359E6D3EF84FAFA4784D2B1654ED5C8902C3B7ABAF8423BBF13D688C36DAD9BE51C1294516E10DF53A0CEF2502C4EF7E4F52525E8C04E76447F3BA7EB19F86E6655CC2E831C54ECAE5AE6EC4C7F1C001D5565F26C3E508CDA5EBAED73E75F4FF641EFBCFA2BD13F251656DE131A5A171CD95867CDC5CB5A61C84332ED6665C7D39943061BB46A414F40EAA725FFE4398A63E2C6033660E6A300F8955EF67B2708114924DBA37E59473C4C81D6E9571757F6A61DF02A5EC29BDC1DE277A402B4A9755477C5BF6866740F28FDC1491F227F130AD5F37F0111EAC3A314233C3470701B246017AD0E542FC37CE7860ADACFF25A8574BD90371B4E8A06D5A0ECC0C64CAA867831762CBCACED74BEB7E5A5D96062B27C025DE77ED3AC2320D361A38E77E417BEA08889C95EA0525DA70EE051B9277E3B25396545EC30321B0353976610937D929240A8412D16DE80926DA0F84E7D7822F97617378ED5DC2A78E09C5509B4C6DEF5D9A5B116B3D0A65FFDE43F9EF78DEDB52786453760DE6E16B6DDD4B65B65A9D5D5D4CE1BD228685494CF0A08B5D9926CD2FB6A0EA124AA55AC6823D8A470495ADED9F8FEAFB3DEC1584241B4E209F5A0CA13E8915CF25C2199F34EF373A7C5DB794FFE3389AE3E650A84392D1105686787B4419CB443D6A88C41E67B412161969A6A0CCC869FAD61DCEF994835EE3F31F01CA026638A4A6145E89788451A759CB16882BA57FE8B9BB1710DCDBE55E6403AF03131EDA2FDE324173C6F729E52C69D0A6E662F5C7D2984FF4A6AC5EDF82E7BF75D05D036E75536861BB1EC7DAB0B4DA608F41F91CA2E6579FAD8C56314BD1AE11B5B5942C253DA7443CF1900856F30C0EDB2C1E69C37E704B09AB817DB41D81EA370E52A61B0F6CD48792A8752513987D5E743706312A6D8E2835C4ACEC1D45514CB11BBED80C0850040D4CF35130A18892A3415BBE6EA7D7700117692906548DA35B271F47D258B13CA3F57D2A3D6A690792B86038284B2F78484A02ADBEEEF155B570579AD4A619D87292569ECADB4F5AA5305F9F644D263F58A1B2398C722B02EA99ACDD372C30935616DDF488D290004DD08808AC46DBC8A31BDA9E3EA1FA7C66CC49C19EAE39C7DDE6565DF94E7DCC15E9EC71833662F2F580F2D8412F115E87EBAE2F409D2F7FFCED6F4299B915DC03636C424332D043415AE902BB164E04BE535BF1DE80131828A3601B90E5C95A2B741DA8695AFF941A5264E20A909704E982FB6E232A737AABE27BA2A5753A032ADB93AAA8EC7AB3E44F07D5D7CE41F6B02165046C7BB3D535D539B07F73458F54E86B774ED1835D03E5D46D4805B156BEACFEBAF107BE5A2B0977BB8FA8C6ED71056B616FAA333F754F03B2484F2349AB2E17A1D43A8E32579F70213542B63378C33D3FE6EAD5F599C977983D565C818F7E951DFA55D944AD10801BAAE77E60CE230E59D1B7E550386994D35EA99A7E2FEE67C56E5067EEBA246B947680BB9C767226D563594CD54006D8BDACB2F9CEF97C5C5C82CD53F7C4812D4BFD33CDE19AF3339CE57EE6A7FEDDE56D6BA1C84766DF33BF5EF8547F5DC0EF101446CE9E96BE2BCDF971C1FE9A6B0AEE588E5FB5C98BC0F3F51E7B74DA307FD1A7E5E06456C42EEC8A2C006E49B85D9111D4B95BF223E4CCF48DC12F0E3CD7E0B5A96383DA3E2FB4D10893E57B700BC6E0785A81F8B9EB0AF95D81C2D70CD50D8AE64BDEBD0D7B613C729D12A68BC090C3BC7F1ECFE582404E95530AB52AA4D2DB7DEDC9943745E7F74051E37B95FD82C27FED81A7F34599FD75C525B5C4F97C4C4A7E9B033C5025A8DAFB6BB5B14E7081C825D01A7CDB9C2EEDD9AC4B4ED578D081887A16289FD890DF90E565F37767100226A84ED080471366A92F211B61D3BAC4F579226BC907055ACBE49FA62228FC2B8E7ADEB4BAC9C11EC22B2D127F6C576D18E619C8DEC36BC26F349BD3C091EB2908F150172B86E3523995F430D3923011491B1037ED5FECAACAE13D11A5F90BF3B4F7F988CC9995E533BBEB1C04F02B59826345A722AD8472E188DFF01AD2B876E91732C126451A37D83983A21B4CFCFD86CF2054AEDE68C1DF63B7C4D51234E323F420F82469BA5567860BB55F5F41F309B01FC0E68F041E43B6D0928410DA44590587A8AD705065676F37F95C97982AD3ACD274693945B4410E9881AD9437A6FECC558F1E5A627D5D13CE037D7F8BF35F8C80B87EDDD07A941082258F0755C35E93D937B43C2465EFD42F1FBB540EEB2ED2ACFE2905C9557D820A131428E0DB3C46A0FBEA99DF81E0E9F0380F894DE2B20C427181630F0A1727830E5B28018E4242A5ACF53BAA957FB0303E8FCDCCA83D7D2B3C2F3E606AD8AF87245C943C45572BB6A6D72350A3E50747DF697D6D68C529541658C556EB1CF177A7A9D6B24F0CA5976A23F1D4ECF95975D70F7C71C61DD20844CE3AC968C26079C6FB34F2A67B1F04E7A75FC6375BAC49A8C809C428B993DDB57081C25F8C3E64F5FB3ED9C88DB11709E7F2CC44F028D0C7811F661A2A104DA8F06B451FE1463EB483857D46D2707E43577E2F8550052C2E859E965D173A1BAC2A3C806C3A8D134D7D815A5634343459274E84AF1CC418EEA134A2AE8479CF9EC50F1A1F67C0299BF2143B98B4A88CDEB512BFC9DD65B7272215E46CFD3F27FF36993A8D3473AAA4A132E532B7FBD99FF84E05DEA2C2B3F4DD91634CB10F1E3D53E71A9FDA70803129966EC7D75B7F6EC303E3A1B3BAC9F71720D5F22B6DAF17ABA82D7E77EBE2AAE79B91228364B793C943F595DA0382CD390ADE49B2DD4750D3BF093B0C2D8F5311057FC90268EA8D8F921AA583B7CE47A7FF89446964730F7982F3639F4D51D271CDF3C878AA333833BD8F3FD8528D0113425C09F1DFD2C6886AE08B700DD528E95CFE14ACBC75B2ACC2021FF0F1BEB32130B155A309B24C18C2E4A40AD6C3131D98D5A084C537AA30381D096FC5A0B08B03883B876F21DF9E8D3D764F96E152EC61770F4B6855D341FCA59222988C43B07CD4714D45B8F2F23CF4887D2AE207D7D8A18BE78B1995605CE2FF1896001A746D1BB800321CD1873E0B47E0ED96713077615CC55EED1FBFE0DBA74C538FD27F209EAE6CD95A18C6A3A164995D1FA7398B736C4B23A0E10EECE9860CA17B220B3AD062D48B793FD663DE899489D4C89B139469B787FEA4938580B50038D3B9D1116C2A55AF9F15BFA8A699588E258157032A017E5DC62FB7C768353668811EBBADF75C766F7E325886AB6F92A1D7A1E50D07113BF7D04EB5A9748508414EF07DD84BAB2737E7806012A223A7391880F5273429D895C30AAFBB75F6D0859E58942BE3D52E2D418F08EA945F58FD3DBB4EA311C695D5AA2A3DBCC70F0804315CF3EF9C0DF3D9CD9527D18A670E9DA700 -MD = 98C4CB467E44537FC7E14152CDC8F4ECFCDD0838521D3A14EF1BEBB3 -Len = 23090 -Msg = 509FCDF5A729EF491AC8922AB9EA9E60962DE19CE38EFA92E5C6C031E6F708D4F5B9C349DD5C2993F3C1E7327F92FD6D820C7E6AEC99E59E1DD06AFD765B824E64EF73F6ABE68ED4F664DDD1A55F8E11E31312AD129ED4C02E70A4629836DD0CD04A6D1019CD7C2A90EC56235960E5EDBA25F7D74DBE098D387325FF9C58D757D4DA3D65D508C5530BC06F5FB36E89E0DF4DF218931437DD3268A8A412259F445C99957C433AF543D6998F2AFE41C94C3663AFB1A061449A03BF8403FDC95067303EE527781C41B23AA6C22A92769FEED400B9935B9DF333B756D59912B985BE10F94B4C056BE0CF593D357047C5E4C88C863FCD975904EDF7383D44BA1A153784A75ABC00E91B0E44BC0C0A3819DEEB9F770D2AE173B8278AD956D0D2E1DF64A5484308DDD16F1089E202DCF10E4E58EE6D9C92060E8E1585A67BBFBA2C0D6F0618F0CDA2B5AA260FF629061B8D2EE1B627163ADD9092F9651B4A49867B714406245DB9623FC2787097B0A3BDA4795BE6D48CF56E429251DD5652854463CA1D6D73768F549C65B99ADCB77C5A5FA3983CFCD45B57728E6487250842E990B5FD9CF62028510E50CE588A377F505A2F5D0B7AC5CBB7F043BB66E10CC7ECE909ABEC68371F9910D2D3B373444E743DF387F8F100BA32E43D0B8105E6FB5C38811F882795B870ED411EB03683853FF0473572E30E37F8596C7004A5C6180D1B35E1838518369B930047ABC441355260B3D8ECBCE86D4C7AE7A071D36E499C2846C7B146870754080FEAD1F468FC8FA64F37352535C0F5D25DDE72A0473A31FC566D7EA9D8D2D8B3ABC254D59434B77CA12005E5BAEE290B2A85042D9363D87E4A43FBC890E4F0B18E61FD48FE5749360F093AD393408A5A05968E70B31C30F9325F7FF315A35D4BB173BFDBA177A9655776B9CFBA7606A868F983BC1EE1DB2498EB198A2ED60664A8A167CD4E33F56705356CDB4EF66D993E41A966F5676928E57232BD6AC17DFE5585CFAAF205F08198206E3F7BDDE32AE43FA41877363F78F6AC57F8350AAF605BA15DAF05618AB05278BF074C4C22FF4C86BF33819575D614481BA3AEF5001BA7AEF66BD4BB2686BA225F5F9C569BE011ED603C14D512D235DC6E279818D6ED215F05D80939F9099E44D149CC95F28F1749027ABDE2A86D147B137A3447AAAEA1795E5F3F91C70483B5C116F41EB7015A1BBAC2DCE061EC3CBA5D0418434DD56EA1297249D352392F7C7D283370108A2D7F5EF04DE74CEF7FDD06C94D517C93BBBC431A800A4FC0478B263EC11A70E41BD36F478C0C30A35C330EC23B86D5996CA2DABD0AE33B41AD725E4885EC21CB509F10EFF977229A2EF1B836F8E57158547DAB5B8C4CF86F509E3EE5F95E0A0449C813DA3CCDE7E9E600E026EAC5B97164B75AC8FFD9A445164CF02EB37D14BE4C67A4DD6D0F0802B49DC79D094F39862686B240EAA9F235EA493127ACC90E6D7EB02A856B3D627B60BFC63B506A4F54AEC402BB07556C33C2E93C735B54FB5F2CAE6EC75D0BD3B09954D626B56C05B4225C4AA610E356383498E7EFE1B99FB7370DCF9836C396A853477ECD44B19805476034E97CB72894CDC923CE1B4E07C2DB366DA3C100AC80B089F391BB0EF634BEB4D76337953DFC3234C5B1200C408D61A6493DF95280CC71901705C08BF592FC4F8384B523FA7F7FABF76B248A87C58AA322933E7C2D5559F7698BE43CC7C9297FD6706C355B8579FF6556B53B2FA2C4BB867F2BF83845B8066434FCA9B35B6C755965108BD879F5A228CD000CEFB24FCC6B0B6367EDED9B92CEFDDC8D584CF6BDA9239F4251F2B68D3171A2E1F88E149D7BA1D68BC0E1CA4ECCCFE71B5280C9283CC6C0D1ED2270A892A73AF8A04D6BF1239D7EA1D63898D8BCA0B36E071527C251E53B13C34086097D94BEAF47EA3B7E6DC34D1F5FCE4E4B9AAB46479E6BC256487E34D0CD47E71438D272A443B8B4F7085C8DB467857A7B4047565B13B5A66EAADFE73C6FF7849CF9AE7EBB7680EB7B9DE3654DE6805098C516EE27F5952BACECA5B3ADF3E234A1CC1FB714820E6C3DD37BA7C230C10C24895F6C7C968885EB4BE6959374834B8413936E65DF0A0C6F2BC070F28EB52731B32A455EF47BEA8D9ABEE2AD71C71EB0A918FA93B9888ADF99677FA6C26E7C4FFAA38FB81260F396FDDE00B68885372E31380770651F3BF77719289CDA3BC3E30928C8E21F7C7428673371388E031C8808B4C9E5D29E244C4BE1A5B1CCBD630B44404686EA9B95BB71F80669904201D25D0E8FD872775E69B703728CFBBCA8D4F108D78088EC7D0B6642F662C3EFF16352C67FC9A771D7CEBB64DE0F395D0FEF6DBC23822CDD63D53DF618FAAD229CBD9744B6DBE9B9E781C8B262BDCE49D064DD73F2BD08D0E7F21ECE5E33B3C5F5AEB1A3A97DFDA4948BE32CD1639EAA02E77573CDEF64767AB75DB8478C2E456DCCAD4CB2A52B5F08C5DB81669E36CE53F8B1A6DC9165672786E0D4442BFFC4C48C97F49806A42BC94962AFEC35621EF14BE4593E35675340CF693B9767FD9DF829DD66B96889EA09EEF321CF0593B8AEA0AD001D6C2EB56965CF78EAD25A9D03A2C1D79869562947AA36E7C816C608BD951C7894A8F9DEA22C3FAC77F9A921C9F7FCC4DD8CD59A07E64ECD60BC82D05B901BE7ACD2E020D5C119E26BBE82AE1CA7E3AEDD52009F9DD16A10E2FBCB0E932B43893C3F86A1E2F533B36CCE63177D764DF48D1900A79973D1DE1E22113A9C50A86CB9C3BB70CB2CA6C602082B5A6A11035678F197D3036386FF9A8C6709523E2FBAB02AABB5B1310057C4C04688CADDC19B843641B84A1877F71E1678CA210D3FB3590DA01AA8EDA12F7E377BBB510766EA6D1EE16B6B75C4DF6671722108263192449C59750973AB98FF2916655A4F9A6E5A7F2F451733874126D7A7DD1A6DDEE2DFAC842BC02F7BBB179F348336E69838A0967E1E985090E574CF8DC2F7C9451AB7F772A58BB0FCE2CCFC7D1DCAF1C15F4948E86AD0A48655569E4EB3EFFBAE1A9EA7BAD2CD23E74E49CC1E7C9E4CA32B360B4E05AE46D60C6DE2A78498C6E1F691E45BBCD14AEADD31BF1DB0BF3B74A7CE974B96712A3EE20A849A06A53AC8CE209F4F266F5E02F274D7D3D3D689C218C92E5A562688802D1EFEF415C153AB19D70F44B02BF5E970101156402F3F46A8EAF6F7BDB0689414016523F87950689AD8A7CDDE253DC0553A87806F2DE5F6D24F55DB812D17EDABE3023075E52B6F9F5615A986D4F42D41914391E62C19CEA4EFB68D834D5ECB29CD20EB1ED0A6D99B1109F8881902DE853227B8EE78AD15C8DC3834E506B17778F925105A04140BB3AD1FEC052100FDC958E289FB4275B78D8CF1E79E14CA67A4E406225B7E035E8F9F78128936048A6ACECB7B0D021B7D03E5CB10EB16EAAD2045EAB64B70A0122A8DF4A696583544A0A8D2ACB7CAC88A56488EA6635259F835A8DED722A692E8FE63200BBA5A6004C1680C7010229B9773469B14FB9BD30AF776A0285B733190C3B9896AB20642BF8CB989334B3AE9408A0D6560170954FB75692A65A6FA5ABB4F61BBDA550606EEE4EA72B0EA5904E5CC01686BFEF1ED3E3B5D31AC3227651587FFAC6FCB9C5B397EE2CFCCA363B402FC538257E45342BEED4D808A578E8A4EFED9C92A39142EBCD5B6F5F71702C4BF3FBF3464CFCAF3A5DFC6BFF643961DEB48BB6CF4A8B09811B41467572DDEBC1074475B0D7CBFDBCABCEEE19A02BF905AE11BB128F416FCFAD74087A03EB94AAEDD80C4D3EDA969840EEAF05A50A5144327B03440CCB931763770B87509E37179E63E7E6F5FD64832A9614C7258E891B5C47C1EFA96D1B1D153C16CABD148192495F530A51E3FD0BB0D0377D06CEDB005FF4FFA473AE0F4D0D73CB77839EE1DEDACDD0554C6F7F42C520E014A436EE4DAE2B7EF34662FE69222F34771AE1AF9461F039142488A339CEE25A6FAF35973A15DFC5F01DAB0C4A45F837F9E56D602C84B01F31013EC99234987F806CFDE5EB71A8A7C2882D01350FE1C5580FAF0A66BCED30DB6D5D2AE50BF3F280C7A1DE4D93D8A949133C0 -MD = DA5FF4B36FDB8B0BE1A15C1FCB592BC450F4A3F52963A67FAAC5D00A -Len = 23153 -Msg = BEBBC8B65C41145281259FEE8A9B2265CC0EFAE2FD352B8F9B620DD195F20DFE337A646E5BC4B48644CA6BA92ACD41E7CF1EA690610F6C224EB06892957D4FBFEED52F08EEF14EDBE81D10209D7572FA3FA06F0D524DF114274DD41674CB00B2717762B37EE9AF82FBA4E949F13851C6FED843CB033B901CDB727C46AA91583EADA5B8F10D15B2231B82F1F0E4DB176573ACE429C8C15BC964F2EA944BC085C96DEAB5696FC64F9C0B977C7CC09CA3FB777C1868DED123199A554A9C30F43751D7BEC9C451308BE26D307ACA035A611B178A35CF5C8C9476E92116C390B8B0F3A95A24E931EFA2B8E31C487BECB72355C5373517524F50E07E3D51C6A20F3BEEB965C583598A9AC0E1089669EC97D20BC3C0EB8B328056E32C8B464C978352573A97BAA376C35F4DF45543537FBF7077CD854AF7E4E3FD235801388B8E4AFAA0165D86B2093E47714FFBA8F140A4EFD50663666E6D76109D7C240ABF1A63C1FBD343C5A209448841ABD28A3224C2D85C6568C8273B8EEF73566B702A7DA86DD79142C5356FB91822A5B1A9E3B942C241C646961F16D42842B477D1B6CEC4F83B7A836D972F16986C5C97BA2DB71423F4B5C63A9DBCA51A07342BE0C571F3464EEBB732712AD418054C73D4DE828A33BB92D219967C263C5DB92C90F68F59B4F69078D32C80311D5E55E58CDB183E4553379745B6498218A79A9DBC1C6687B1CB65E3278CE74E26F5CD5AEB2ABD898DF1D44A678A7AC45C1574D92F12FC32353E75B2188A0C079156B2A6562E529160EB6CA94F91DC5EDBE62EB7F89F44653AB9F1F135CC279C8731AF99FDC05E0FF40A236E52250B8F8BAA83656CB13C829F1E35997B6D939F767DA660F7A0BDA410FF27A50E6CF8411E7C9B20A1AB1A6302C8A973F051C71F2ED9271C8079F0C94B4CC4D2BABD6CBDCAD405621C600223F949957A242D762EF3FCCC038BCB95AED618BB18309F72642D7BF14D4443E6F70D4BC1AAC3F9B7770467DECB6C89C6A98373A92D949E4B5057470020E785BCC27B197E91310160517CB6B3B8DEC5C5DB263245E12E2B727763478D2D5BF8C8C864C97518C3FEA0BE054EBAE2D70F7C2B2FF66B1B4FB227F5BF1E3E742079176E88AF61EE3910C92B825AF94A20B1816D089113053F7077154A04EB30B3EB70D776B47F9D83C08626CFCBE0F94D488B35879EB44C4838AA6639F6995C44D5CFA86F36ED913F46DFCC454F0C925EBD18534FC6FE7B94F4B8C079F79A5D4B2207C9A366A246BA4C2F57CDF855A5143F98BA0326CB500AEB2A3565C30B5267B8C6E382DC0422B1C40F669B71C33E86F49816C31362869FDD13A457E01086DC0861C5D2868104A068412C3F8A2A5DDB10D408140B55505B525598FEC5E944B9608D0D196B07857D9F42DB441EB88154F917908141531C98ED3371DABC0FC41EC5413EE99C5BE1AD1715B04FF7DDA557A0DCDC80697C551F14D1E945468343D8BF79BB52FC5CF602861591684DB55D5E7F8F21FDE633664E3DC6C20CC5D2BDCDA6700C76DD084C296930597C49E3D8A8F387C4FFC9A17CC011542E11DE8D6DDD350FB3CE5C5EB880EDF72CDFE68291EF2DCF34583F72FD0BF34F45F4D8F537E09A5707CF63A88B28C75305163A1E4C2C1CD56AB3BA962B290CD7A8CF7549D8B0EBFD03A7D8E20985CC752FC29F1B41C605B336E5B90D60861CEA58B12F2FC7639427FEF72FBE1BBF53A6C27980D3AC54F964F76DBB36CAAF1933D72B7DC386E77A922B33B095CA1DAEF75CF14A8194DB813D86F72BA6D273E4A716948DD3E06B22B1BAF07CF07C4400EA7E81CB27E29F4B1268D0B56C69069DC255A3C117097B6F5985B5AFD1F060F56E838F3339CCD6206B31D04C81A83E18C281D07B4B12DA42461BB77093451E8ED612FCD35C2D43A7042B2EF2F66168D70A072855CDCD820D292E23E05F881BF09F666DA2D1995EB5ED024A5C7393C7A302BF9204CBC7AB5FE8FB02C3A85A9AC8029EA4DA80597DAA8BE5DC7ADA8ED377258EF3830BA62FE815B4A9980A9CB7CB27F1FCA6F07738445E77E9BBDB7C21362AA8B8ACFFD38BC4BE9A9895C6A63C6714FEE0A946C2BE8C20E82F02B6E2A70309E256285073E8224EA0185385D0BFD826AD6896184D6C9DEAC9556D18CBCE183E971E44DEC28CA05207CE621541FF59A82F8CFB1248DCA8B1C37BA7D0B065A6294D51CF1731DD5903E2BE2A13675F891C0EB9D1219436D1819FD8378D81A821FE9C100EA1464724387322B63D4F234360D0C52C435A355B2138CBC4763EB59CD94D1A194D63E94710736ECFCCF238E78787ABEA3BAD7EB5556D41F920BBDC288059C88C3D4D4530EC232408496F7083FF5D2883BA4F3A4500F1EAE09926391D669ACAE568E0C143998E7A12F89CCE4B16E12B1C75421FE605BC2D2234EBD0C982DCD9200326704B1E7DD8A944992C59BDDCAE1220537812E5CD519008506D9ED6D1734D1A4FA186AA079B13124B79B59BDCB665B9DB170C1DA10D9E8AA7EF606979C1DDC07B62D4593852632C3D00ABA489060D0D89770FE3881BA392547897DEE0031BC08D4AC2A868B823E7126DFE6D8897D906829603C3DC6D85111E0B92FDF217373865719010909AE7E80C446ECB05BE2AC6B120C9336A49FA31222FF7309DADF5B7428ABE1B7FB88B69FB253E47677B7161299456223C4708EC9135CAEEA4B068EDB07CBD03E51AAC9C377DFD913B28A828037B38AE5852FECBA5B85A200AB97F18D763EDB5EEF3068122F1CFC2F6A92BDCB20C3D85906CC4C5A3F1E1FD2BD59174F25BD1E5177A24B7948850C5A0946376FEF357E7D7B2151213C8164937DA67B30C6BA812D7E677A67FD60B0323F82FC2F5DB022B60CA0E7884FFFF69918ADE221D78C60FE368ABDDA56A7409B484738C5F644D73B0F581C6CB32F6B3BC74FB969F55115A41A1D71A3AE10E88635A87594F1F982259723081CEEC3AA0254C8A6451E53EEF1C770918BE9AEB2EA5CBD55D4D93569318292F8F4EE5EE773CE71423AE65D470434008913BA1317BCAB02B1FEC24B7A3636620875C83E8671A49464FFB68C5BEA93193470732993348C775A230311735CE368E17C84F62B5CE01346DCE339BA0B99F78D868696639BC365126EC11B477795AFD60204B91A0317DA99DEE320E08C140D14B9D26235DB57092C6214B1A07540295FDA09A3076361BAF33ECFEB858A70983D07CCA19D46C7598BF8CA8BDFDA7C571AEA9965FF2E074FD2AE740C7DB53296B6E28D5FC79071D4F8BE6BD4384437F620F1C70C5A4D45F19CE4E79578B550A77063C32712BFEBAB0D22A3D3B1BA2459853AD8B3CFF9F134B52C654E92199970461F02F65EB75BFEBC24903F29D09A4C355362CF5A78C8FA530E07DD2846FCC0E1D3760D94AB3C410F777B4B21527A4B164C03FE6F63353D0529EA2F2C95DFE1D6AA538EECCF175F1F37E6DF256BD27070A9DB9088C24E5EDFE481B2E872ACB7695ADC8218A9A566359090167EAB0569B772F1E73CF05F5DFF02026009404E28ED27F66A76BCBCEB148F8978C5CEBEBB9670742A5D7B76FB2AC02B80ECEB8449254461E9CB8D9A557DE80F168F028E47036A070DF6B223A5E3AFA8A887ADD197755B2C7E9E49D6460AFB8463227C443BCBA785027D487E50B6673449B6209CED7C82EFC8AC255ED468D8CCE679E739FC03E137AC8660F792F8D3E5160AFC25310227FC5EA4FF6960038EE523CBC94275DAB9ADEE865873BA696FF0747B9E5E448715B87F5C4AF3A274E69F92432D8212E0895685C7FAA59B717D4AF5702BB5CCFF37E3EA67A74563B5D00F5510B6444A65D9DFD170FC4DAD17F168DA829D05E94F6170FD9534F25CE4DF5C7F0F213A2025D46ECDB8EDB7AA5789590303514BF4B070AD33D9385B6D9C5772F010F17D385CFB725F5897F9F3162AFDED60BEF5C1783A128B584695A26D4A55443A093D41F522482D386BABAB37F86527F54C82795970EE16595BDC7BFD39E6896D9352E019E55FFC7375CC806ED613C74BA68262F3B0F93D2643120C8522CCC9452112FA0DA026510CA1C1E2785CA7369937BA1223ED3A9EB45BA30D1DD6C4832C9DF80 -MD = 2AB9094BFDE62CAECA83289F13D6CAB7AA21E3D432F292E76F474A4A -Len = 23216 -Msg = 3D85E0037343FA076AE1A5AC3B9B3A299654A9F52E73312113E0EBD78F4B599848023AA97550DC77C91DBFC922BB965508D5CECB139153D6D6FAA4F8BABFA2250D29AE12BB010D6D3EE71F910773A15283AC916F8CA76D359AC6B654BE15CFC8EDF2460D0E993D1DF5ED9C73E95D357D3CFF052B3F4CE358F96A631F0F7BE4C1B9D88C7E6C04682CE65CDBCA2C4E9CD05D2F51027E5E992ADD31026D37FD91DA8C41A33EE726FADD3D516923C6CF5849E5842291039BC2EA94D93B2A8AC7FE7275FE868928F3FAC2BEAA44F06375D8B92CDE7C403AB9F35B4F0F34EB66A5A31DDA32DF9DCD77DCB040A6CC127FD109CFD54410D7B3E4E8498B04089400D61F0082CA48A9D1D9565487D708756A9B16947E9C05F94078E91C565A56C9F7205ADE6D8E9413D6DD0FC8885FE01AC7FAEE3605E22725C9A52FC1DAE92B110C38EEB87729A9BB2263B6D43FFAA57ABE9C8438B31D15CDC8D80DC81372B4D98154937E7EAA0EEC0BF9C71FB77E2F7C360B64112AC8D8FAB5B574C21FD31600D341A9173A3ED05B0F417C18C58E526A010EC9FFCA19461AA9EA5F85416D029689AFE7F69836F89D1712004B8C79020D6CFF0245C7D4B1C196750D44527DED407595A7B28EE8C95A85C6CED826BB7F61D8EAD9E0BE20E67D30D5AD6D2D4DCB38F20E41CEAD521511754901F10831F8BA88679AA42E9C47308BC5A7F3AE07C14A8AB992CF07A26715F564B11538E4C441A9AE54A5A8271B66966C2C9065A4EAED9884360CE60415E953BC31072B4B2E3F7579D6FDB70FC737C70CF55EA5F72743DAFF866BA482199F8594D6D72E1BD07BB82476EA95B7DF9243B0013542EC95AF486AB184BBD93E6ECCEAFECD1A64ECA30468129683F150657AD050014901D0D4EF1005C5B86F98F2D7553FB529D7524C3F1B27696FD98359355CDC39DE67CF18D8EF58653F3C0499E085A8F9BF555DB9A1604A9D640C09C45D2B4A8D81BE369349389AA833356338584704F864F04227536B5F95819919C8360111FA2F1C9F4B275A18F724647BDF2A7830BC0B6AF386E9B5FDFF023116FB4E220E9EACE1B6E6B4C68C1C7DC91902366A6CEF4C4163616B85DB15C3D35733727214B17A47A6D9C5E059CD0174B1E5FA764AC11D1E859B8F092A4DFDE12543E5AC4C27E396183A63FC0A76A52469145CE8B01BA733C1BF4AE0D3DA35F5B107F3083CF07BFBF0E0E76B3FC7FBF5E515C6B79403523DB6D668EFFCEC49DAD419669DADD343870C82BF5B7624C06B9F8DBE66E49A35495B0B17C25AC814A0A58E5467DAD961349CCC2E64C217B8C32DD28DB4B7A4D8FC841BC1ADBF9F1E3C1F871AC9E3D03B0E7FE25AA79391DE961B87209C6E41D73669C3A8883856403736236317247F332BC4FA1B14F19878E2DF7925192AD5C4F7BF431A01A1572DA98F2B01D1846760DBFE3E387357D115135F1DF6E4B1385DA5E591E0EE2295858705A2F16730B0CD7468C08612179E3C449F9977C0EF6688417190D7361BB94C4782D67B038C225EA703B8BC7309761561BBF1A3AE4925CB0E8E33331615EE3F0662641CEF3942F9A003140376393C58EAA46F6E994A375369277331795D9AE7055D4DFE87AD41A843202E598E492011833525D2D568B699841E6A82CCE59B51D400ED6F896C271194F2C8230E271BD21AD4345CB8CD89BADEA7FB6188B0167490E1493264B68BD995D56C93E6951CA8C554B1E0AF35850377BB87C13BAFDC81E3C433FF3B5F13FCB5338B31EE619C59EB160E4E6E5185ED41ECB18791E6AEC2DBB898C4F951F7179B3A523A3EE8D75BD375F03A1833E5046727A501178E8EAAB4E25A05799837F1C91FFD4EF364ED731F39AC656371CCE01DA73A85595AB9AE3CE41E799FF94C676A4509D774B720F38C1D924D17B09EAA04835513C96530654DCAF00521B8A74E40774F146B00AF65BCCBF477B58DE528AA2BB793F47D55F4F2893A114EED09F21CD79168C52134FEFEC9A79659D4AE45F28A56A6E65376188024652C0CBCDEB6DC8AED36604E03DD61D4ACE9A8B7C54EBD35A19CEC99C788FA02E45E5AA29160C661051B262080841DA9F3BE61AD421B4CEBE7EEC77D0A2C2F14658109CDE4741A8F0967D3E69D95E6909098A61085AE1237BA8BFCDBFC339DEB4A11AD80C118023D82D904A0282EE58D0ACC180F9E9A629C083CC70B6BCBAA47ADAD76BFA0BF0393E9FC86C6D4374B1FFF93E9AD8F7643BCC769D2E1B91A571FD04F4602AD08A7CAA92319137291883FF0CEE2023BD4120577611D687E71FD39BEE25D23D00619083171DE81A0475BF769C972A0696031719719187FB5C172EA05C7CF5740296683889F0CE5B28665C0EFCFBC95A4BF7B9C6CEE9E3ABEF317AAD2C829E59533DCE70186657C6DB44DA42820BD1F9191ABCD3495AA6D1661FE0735F4AE7D567EF0CCAB731036B24390C56096D3B56A1FFDC9CF36F175B587612DD7ECB41386F82BA6F81AF6E684BFD6055EE237E5A22A25DB0AC2985B8F4E7C553B10283C76ABFF2CFD415D6D39723BFDF88F2A8C587C5C921D4FD4A8E7298DE0E7B2E897FAA2513D5AE1C315A593421DB07DAE696344EF882414E323BD03BF8B97EEDD732E44C737CA232E4E6A1D260F367DBBAC2500C4619ED7D7170D2482A1A98F99F9D4D6F1832D07E83F58E682D89EEA023FB4A3A9438C906AA36411E37356D95689E4ED4D49548DA8E8FB59C9C880E776E2ED8707DCF4B57AE1657A5CDF77A4A757886AA59B496182A68B62CB41360956B511526E8955A8165898706258B3F6F9D504EFF7C2F573E7DB1064F9A16391B11D1D537CF709572EAEA023952FAB7C70BB4BE3872E794930CBE2CCEA92CDBBC8586830AFF81264CC0A4F3A3FF11A4D1A7D521A8EE737C4FFA47063D8E88D69D381A085D71EFEA51A3DC173F6F76F2F4E1209A536951FE946E548914BCD7BC4DD506B41B1DC5BAAB34874362CE0FF03BDA19CB5938B813C57E44E0D61DB6644501CBA3D59B6CFEBE20E35E4F670E1E878E3DAF70245D9C42A190D575B98F9BAF88EF59E5564630D1C0BE4E566708C4CA9131813332DFD7F267E37CAF7681EC9BF5AC84586FA9A97C6C8882FC24358BF8851688860E838703D3EBE1498EEC27D8CEEACC0AFB158F5CCF1846525477D3BF069F63FE26EDE5FF556387B7D92F9540857D799D77D1D3319C86695B0622F82C57A05952F6DCF114B1D36F5629962DF10727B2B3F9A9E583DABC8B561DFF53B3E17D72CBCAB8CA974018D65C4E3054BA51211C31F81344CFF4354F8122B6B2B28192E80999537D783DD5B34A47752575B3BAEFB04247703271F9EBD89649D0DF30BF030C9DFE39E616470F3DD75E0F0595E572E70A93D1CC2ED8CACB4DC2431546B123972649B82D5876E09D6C4D9E1D20CF46C75C4E2EF76C162E5267B0B9C11B6DF4F32925042E191B6ED5DA0245B68DE0B09087E64E177E41A5A6BDEDDB4842DD08664E03FA594572982D415A64B70749ED536EA12851177079DA7935B85A81F00AF0118FAA62B879BF5C0410672C5948E545218CAF9CEA64B60C9C054A128E7867572E022896534D14B97AB668BDC9B50CE34C2690788F47CC311B866D4DE1FACEBC1BCC306EFDD6956E58D391304769742A65CBA3F81D6C45A79CFC2E94BA44F9C73986BDCD68E9162D9FD52AFBAF0154E20E426836A68E6FC5D2273CD11F09DA0B3019B7A5288BBF21EB3ED02A66D787402494D51F1FCC372813BDDB5017B0BD468A88A50D65AE08076D7C754E64898074F3048C8E3CE1B0954DE60DD97E94FADDF31B383F7B1365CB83AB0B4D30A7F8953A73435F9160D45C370F39F3DB13EE46A37B5ACE3057B83993F035E8C1F8CEE6EF7C3591277CEF69301D54ECA4670255837504B709BA3B2DD091D95EF6E6C5591DE439F5A882E86E19D1A2D6DF56F0DD26E8E954DE5F3D1438987AD2FF1A22F4320E96FEB55DFACB83A53D1C84B6B25FADEEA4970C85E82866AAE5E7A7CBE85DDA0AB5E7BB0A074302C49609118C8E34AAFA5EC7BD1BEF5D81B25B5F8F4CC8F264086D3B046A5EEB89A307D044C076C3E4698E60789DADCF265172B75FB5E80B59CFF939C06F937856408F709 -MD = B6CDEA9DEC937E457FB945433E140610A5D5D93DC25F3007992477CA -Len = 23279 -Msg = 93F18017CECCCB2CB69F537A02AAA31C5E78916BB0C60C05FAE5AF00DD2AD1505D61E85C2CB4D335198BC5E4271986634A587DE9929067784BDF83DB66FEC23EDCF7659E36D65134342903B6911BF6BA001F3B85648B4873A5F94D8EA3A170B24AD6DBB00F3715AA7500C04D49958A8A4372DD64EF4DEDA6F62250904AD81F3C929B9D21CB33B780AED1B3D81AE9CFF17B939D305CD1824B0F7C9B1D414F809DCDDBBAF13188EA7C2912451CA96C9DCE47C9B7E6A17BD262A448E3005FB81760C5F58AA6A3688BAC6CB47E95FE33B0FFCA366498C17A1624AACE6E6EAEB3163165BFE5A2C7DEAF7E150BC22116D054359042D50439E91DADDA978ED7AC145D7F92CFBE8663A9140BEBF3F9305DA3E24EBA37E18E513BAD19550761AD9035F1F1C7F4B6529EF9CDD9F1473FACBC5C470F8AFB32C495324350B5DC339F1CB45D659821DC630B6B15BAF4363D6DC4FD26A02627A09F723FEA5C63DE73179EFFD18A25CDC3682A38FCCAECACDF7BBFB23461115A4DACB9C46F966956D9039BEBF661AAF4D56FD26689C9D5E8F02E425FCE70FE5C2B1134D5B0654A60467484426643D71B0039628AA58AC90E29D487CCCC9EE87F04CB7E3DB08F46D50B3E8077A6213709E8DA5FD10DAD55358AD48A025590336DB9725BDBD345B3A82F5151D8C782B6F97143EED363D8506DAEBB9F6E880AB69B031472EB64802B59E5F303F57E70500F95A2236349AFFE67109BB73474A99D7298E14A4C730FD5D7D18A245B5416341555D6159B0AC24BF2DEE989303E7E1BD14D06EA14EA7BD485E98968073C254FA8D0F86E580101D639450052232FC8DA35A4054574C0BB4244CDC955ED84F0597DE715D13B25B821C989BFEF4DAC3C3949367917114810E960C74900C33DF1D8654BF29FAE08E0F09F09B83B6047EBAD931690186D383897FDC9A74515C663548B1E83739990C12AB450533E97D1FED8D58FA040A98BDCC8EA9137951655B8E8A0513ACBCA6B3646D8F8126759674449FA8A0271D5F7DA86CF9CC92A035C4FB18B2725C90FB298B09F2A136AFB63B4153EF41309C7CB2B749E2A38205FEE8C9776CBA2C2A379262ABC78FB4F9DF389DA0AEBF382AE01103CEDC6CCDF09AF0D193760B0C816F19F5AA81B69096045D4DCE870150B9D33600FD6BD95AC29B973D33ADA64F487E91471C05E2313879D3C17A6AE00B5CFF7209097F5944BFFF47E30D1E2AE100DB1A5E0BB729EB25302489DE3BA50B089777A98BCBA7E5124C3CFA3FBF26C2313E412044C5F4A24CE17131A8B1D9D514F162B97D513D1786C44D717F8A54477990F27E040A3FE2C5570F998FB98177F2BA3198D3CF33D7E94C02102B98372003EE501D7218A2F7234980701A4D86386112BB7A33682FC225B04AA6849CFC803937B9FFB078F5429F430F5823F30D4F33A1CE50FE2F4E1E88FE467A46A08FCE317EAD632F5678C14CC48701C3E6A686299ED3F249D433C643C25383DCB2C9F05B517E08ADCFB5F7BB8F1AE25CA060E8C87580EEC6864A687CAE0D8DEFB3C397C1A9B6B5A853F732B213ECE34618C32231674127E37C931B92341620E5432A83D56E1256E3FFCC067E8182F319C5842CFBCDB5938B3B2A85B482BE96F5A537254470D9826784918C2DB385A6A63BF7F5981EB6F08682808BCEE8299D2DD59DE4CE3F06CABC1C4D7FDD07B59B75FD34B83DD8224EB6AE7247D136317F2619A2CF2DBCCD3F0EAC1E10FC2FDCFF6228E75FEFC40BF042D638E9AD9B105F3570E0C90300ECDDF0912267048F83BDCE65C726AC98969A059A75DDA7220CB00B1838411EE7AFAB67BCC1621154641891A5D05E4B1FC130D775B5B6219952673C8234052A3F0489A13A0F9E5D4E41661EC282A08735EA1F47D8DB8F00F60ACF280EEC22F58F46FFEABAF01A9161666C2573E9B580C6CF0996E6062AA05B546E2D4641EF5F4253AF8631EF85C4FB3C1B7EFAA6EACF88820D01994D99FD6065AF26AF12DE937BEECC7B214A10F554D4557AB69A3C0668A3366916C6EAC9DC26B91A9AAFFA7A2FFE4F49EFEDC5FF17C310CA7EB4303DEDB2F8BC09B1C29D5CED1865BA19B4CEBAD0D747641160CB06ACCE3FC9E9DF5878F672020B88F4E836C66EE047E237DA1A7FF3AD31ED877EC58505B8DAC7C97DDAABA4FE31F20E3C8C42133E341840E62AA42FFB2A003B793D64ED1361BC7359E5132593853B9D3C31CC8D6E60A156395A53D73BDE79FBE5D4773EE9E67DAFB9BA41F84D97E75EDC0A99B3F1C96F5E2FA8D67CB1A0F7D46BD0A33F1EBF95F1971739C327BD81B35871ACB9FF7F5C3172AA84343277BCE07A45084F055A6546B9ADEB22AC56A362E481DD6D834ADAF84B6579FF0D5F7453838FFDD03D8F4BEF25E9743A7AB63881A6FCF91502249C25888E878DBCD12FE9664ED993E46E5532C260244391D08D2155E36797AFC068A2E1E5FE16348DC9B386D18C340EEB7C109FFCD42080291ECC68801F9CCA1C8A2DEDA67339948E12AAA419D84831142BAA248B573965CE12DCDCBFB62D78E89C95415DD599714F5BF1A41461C7272A6E97768F9657AEB8150FADCFA69C67747E6FA9E7280EB6A86EF512408A317009F4D30C70D7686F13B42849F01196231B47AC05BE5A8F13D24DE0BD9E4B713CCED96A0EDEFDC5737DAD891A9F51B73A86BE7CD6041F8DAA1E3BCD0A244F1B37A885B39C60AEE06E695214E202496382E4F1341FE69D4D6E61393C2A4B8FAC779EF5DDAF06C4063A5D4E9562379D8CFBD38ED1A521F35E59996EF548A1C4047D95BC84E6B9A480994FC941537E4DDAC516D9C639988CD4C950DA9301ECE0027CB75995DE51603EDE20922002F2DB867426ACA336A243EE033CA32ABF0D47CA921E9685AEDD0D73203CAC89DF8CF75AC4129E31B20D1F0A0D1F8BC26026D11C92554898FED5F3C57A74F28ABEB232D66E996AFD0BC76BD9251EF2EA7A696E73063C0F8CB38AC644FD769DCAC8DF94CAC55DD46A9B4ACE36FA855DC5250D4039A302A9C69D76217F91179B202E7C21E5FC86917783D8ECBA946EC5E73BC8E2179E9EDB407E65D7285C2B4C40A119FCFF944176BFFC6DA793616F449FFEF1B8D21835FF881067BD87C798330639FF1E52E20AA1A38AFD7FD8BE36D6661674A09FCD5A7E405EA5850564A445EB0DF488947E0EC0BA0EE311BCC187B0E38D911D918F5305C3EF476098D8DF27885DEFB100A9945E686D02F4BD8524D0C4FC08757420B1D250C5DDADB40D4CB7B66D7B073E61F329A113EE5D2CE2CBD641430ECC473F6D071A7E809256E0AB1B6D14F2A4EA640ABF744B8EFF4E2417BA74C1C282CCBB2DB6F734E5765A973BFA8990C9926BDE3BE76A84A7D462BFCA71E9EC0D00944F1625E99C173C6D47680B92477C92B03CA196ECCA33E346671A462F5996833CD853EC0CB01B1A3F0D1BADBE3408D9B96E88839CEE9D820066AAE1478099F760B07A5C8AAAD7863821ACE6DF9184E82CB3AE8AD9FD5057760B4ECB09039E3B9E21B48776E6B4338BD6F4183CFAC39B19F59F91C142CA75E77076A1BB7D057C09B0FAC83D2A6AD59DF4D910262F3720EF711E5FF5672133FC653D1E10C222E53733EC7BE64F165EB7C1C4502967964C925452FBD149F16A7B48BBEE5475A183695DE29D7CEA33810724CAB093622FFEE5C8512FCFD57B34F3629E69870411AEACD734D509E76580ADA7851387B0CBFD24B05A48B042B1DF3FB5F06398AABD2C0A9BA931AB704E11321EE5229C360B246BFE9FA65F16F78AA52964A09C5DBB0FF358A9ACF2FBAF34D07745FF2AE9F1D91D59719F4151A76511D499BE731C21EAAA4851FE7520517965FAF8DBBBE17E230E16C2F5102B1C26B448FA8EC4008B6861B08F5B35D2287A61EE916B6ADB341014DCF684446258C15F8DE3784C9CD777E2677328623B599BECA68ED364E390A1ABEC2A276192EC1621D79A27BD6CF83BDC34390E277E650413953DF6070EC99FE2A7ABF1805292853FE14AFDCC6CD9785C0046D706BCC92F1D6D03BF1111CB57F0A6F029988CEB541390C58B7369E7FF9178C7AFA24EF54667B18E150623FFCA2566027EE1437EF7E4E1282C372C9C0C0063F1D298149E8D14CB0D783F238 -MD = 53079269B734201D5DD97C696111C64BD94D10A3EA33B0DA1359FA30 -Len = 23342 -Msg = D9B159EBD13ED602ECEE1EA12BE69FB397A89B07667CD5AAE2A39FD0CFBB52067E334A5580C0A512AC1382AFE6CDD6D5418064F3FB15B1EA2147C9F0F8EB3E0A01F9885A5B8FAF1142DAAD56084DCAE7BCF51E2DE020427B12B41871A5ADC16EAB785DD2E9C3182B8C7FF49A557677983C98C6B12EBE07C2087894D7E7B49E8BF58A0081E67F6332A7F16E7FFB10E044E5541FEF1611F4CEB7C93E61A2892791F5AE0D838845495C6BDE27686DA1650CB7DCE9D2F4793D1BAE8FA7A5841118FB9A38669D11F556B5441637BABE2FDD0089C9116BAEF2E956F6DE462B6BF0E24CFC11FA05E0A0A8109CE8774BADF7C8755B85CD8BF8506CF57DAAB7735A5ABEF0DF18F4001BC34665C476EC5ABCAD4FC34BBECCC964478C308EF98466903DD8494AB28E8613BFBFB848F4E1DA4FBA63273E8BB0A2E86096DA12F4BDCBA384C4AB2C74389A0F47001507E30111B5A04979735818B637785F4D6A7225BB7E97F6EE95E44639716EECDC0A06C4949361A5B935C56EC3EDE86DF5E360D9E43E630472A3A3957576363B505151570E9F721EE50E955CFFB13EAC1E9CEDFDA1FEAF1D1CCD511A4A651C550E28D1A55C0D317667F742199B62987B3CDE83458C4C66BB9E50C868C81F43BCEBB44CB93203051738094034205CED5D63C8E3FA74BB841E2DE7721BB4AFAA3FA7D811467DAF5978B571F574876E31B424C34DE18CEF73F1BE5D5C7E6A2169C8426E725C0CE7B37F2F1DF7F5A8107C73C07CEBCED16DED407934889B4BDA0197B7D6381CCEAE12E49E98B39BC9D0EB6EBA65D5BBF817BAC3A975F87391A2D8E8E311F7E1BCEFAD5DCBCE81D83B268D9AFA6CD037E75130FF252CE100128F472621CF22B95AA8C52634D64381D9389E7E934A69FAB61A14E7CF76ACBB3FCB3FD9D5E87AC302FA5A7D48021FC2ADA9405E923E7F106F13D238F265DFE49AB707FED34A0EB49D00A23E4D023F7C99A20007006FE04D4CE6FAA144833F9C346F9279702E9A77383FFDBEF9AC96C85A11A59E81C62A3583BA0EAD4574D568F35F1ED7D613D83F3ED4B971A3CF99644B4CFBEBF7BCF64004B4F58F70C10A4E8507439265ADA72D5F52F9EDE6BC5F48C26B08CBEFDE78A6504CECD3026665BC304C78BA2E6CF5F38F0DC0F2067841C659846BBE45DA78E1775AA9022A667B937BB388281F512C2114733AF1DFCF538C6420F3BFE0BC3A81FFED163009AAB8783FBF0EB0A8C718949867B9E41CC2B77AED1BC6E75A589F0797FFA4A93CD8AE41581D32883E5DFCB58E109DF4CA52022E8DBF4D20B734271835226E0E48205231975C0EDF82D7A15DD99F62FCEC465C4C548860DB78EB78E9FA8D908D7BC59AF9DC0E69CC7ADA26BC807CF6BB4588E443A1CD804363A029DE6948A9062888336E3E3F3CD49413012A1412E52878A43B014BE280ED57EC69822B43F7268FD0BEE6D0D3110447E4FFE7EE4A3237BCB42FA5B390059BF7621B74C27F37022B93C06DD9879C815CF2CB9872B460BAB42D8A9F46DAC59644859A9F39294DE44039A9A25755512E1E3870D7D31F2EA716BEEB26F7E6621BE3ACD0811F2F6F60CA71001E6AC569C9D71C561441C06D49C7C4AF16771CF7716A81912534E1E68A78D7A9189F4C9921E115E2C45DB2A13FECF39E81AC2FA7CA135345FD54BB985417D4235BB0E311B4A763A0EB7CA3A21D8174E92B76CA9381E03B9EB76FED53CD53EAEC3ABCA44F3C47395A838297F5F699B728B63A2F61F5519A9715882600C45DD29B10321271B81D61116675EBED919119053FE8C3227B6DE558A3C5EE6A54905AAC7F59FCCE65EEFF82EBC12BDC626446410FD011403F4E9E82770A0CDF437DA15C2EF5D7F2E7FC223BBC4F77AFAF4B87766D5F9471D189EAA4831DD469D7A3C74D11FAB629C9AD1DB1A861F4E92F25DE9D7E135A9D8EECCDB9DE332BB06E1F2A06D3B928A9F3F1E244AA5AE92D49CB955E754C5BBBE89440B2BC0D615E22116CDB783292E3663E4711164F6CB6B0C2C6E5931DAF97E22E33BF330B052ED38D72C470646A04F3EB9F1814289A4024FEDAE265A9F92475D1A3D9BB4AC0E744CCEAFC443BBBBC057249E26F8C0BFC54A32341A81F0416B2F2D701F22931B029113964BB1ED5D5B625EAA679864499C6D4BE066D173408064E0D436180234C88C4FC7FA32F0EC467E7D5D1A151021BC3549CB0A931AA0DB526BFDEAE1F347523ADCA65959E5201FAE84DF6D5696713A3DFE421BDACC13216820ABC73634816CB0F176833005E409837320BC8DEABC83891F20E64AE179FEFD01A04CB0CF9C42FB95D672A15BFD76F99E42D09F035BCD295BA0A1BD38A9708E923D6D5764A55B673923A1D7EE900DC683BEF995DB3CAC69F4EFA8151CF4CBC1E1E7F71E6E71B06DEF36DD62F26DA98471B614ECAF01427465A304C65B9D5144A4449D8C897A10B100310341F19273F892FE019D2C93446DCFB88C360CC2EB43F9DAE3E755F161D5829C049E47DC4121D3C0D0B3D736941ABD456693C2DA0E2F5F4AC6A3FD2037B39016B4C8AD53511EE3ADA2AA75F6D9BB9AE577CB982475A97C6032485DDB0C7BC0F9F9CC55852C6CA3BF5574CAF5859DB028BA38E74D9B1A0417905476CE9ED395C6BD0E0402DA0B568466E057A82000FB186E1B65CF1920150E271664E68FE99668E16971171DBDEAAEA98518273DA4187C02D5CDD35A0F1920BFEF60470F1D0E49EBDC4C49BD1326925DF6C726E40AE6485629F19E74A5B048E7E2E8952FE6CFB1061E85F92766E748BD09B2C49F0CCE1DD3B3FF4147F843CAEA219B7961E0CAC5BD40DAFC061334421B4B8528EC5A81A648062FF87F19123FA35C279FB2F9D35115D4678DF35F3DAE69C6242E7D3D80257123E250D80DA8CA769AC9C80696867C8B4F11238E22ED510B9CD11AC08D5A25CB7251758D88E56F11758B0F2348843598B75967DEC573E769C95D879957B8940FF781D90582A988D572FAF4712A8E29A31405A7A1ADAB3AED5178D24176C231B62C367788A2233C5B8C53EDFB8682A43EE785697A204FBC2C37B92C0E7F345834217AB5C797667391092BE06B3DD8D40515673CDA5C8F9AEE11F243C42B3CB49599211F1CEE7859E3C196F175D0CD165F68A035D96B978E49A8382462BB1EAC5FC720A45A33FECB5DE4DF43B53159F7624274CE0C66100BA93D6827DD60C166BD5ED717A971D862869A981AB01980EBA3B342B2FA5EA9AC0F09529214D0354709EC5D488B219F8F4192249F27F4BD3D4AE5BA0D3AB013BA3DAD421CA86432569EB84A5578EED33CB7135C468D07E8CAD6A0C4612B15C234C1F0CFCEDC308AE16C49C485AEA32AD120809DCFA2AF3DA8A6F98121F0734E2EC065A50942B4F6ECFDB108CC4075E26DA0C45138DEDC144833A6116DA537C1078518BD04A05962F72E69936800DFDBE7FA64C6D5E3588F161D05716E37F13CBA760AE56E4BB1BA4DDE602DEA0BE46373339CA8540726165E99C7756CF064650F3834AB649A2CC656BEE7626703242A8FDE3061F8A4FD0F85EF7DBE700ECBB5B7ABDC9308033450A47456F134B172319A44A2B06D756EC014A7E6AFAA591E1DE31D86CF16DAAF4AB5CB055BBF7172B741B4F96DD1BCA657F5B2BC6738174D03B5E905C75FEE4426558813F97EE4E11C3CCAB0788A66129C34685BB41E0C322CF753836EB958EDE3BF26605D629474515A33C5ECF4CFCAFFA08B7644F3C892AF0B416DEA490E38A593D91EC6339B28A89519AE531471A83E3E39A242A797BCE76D59F022C7C131FD4B11404BD3FC6B7225C732C2B04A8F10AF9258F2BBA946DEEC0F82D5AC69B7B5D8A385219AF849BF7B6A9A7003529C86F4B4B9A2165B68A07BCD6C75800B807D5F4778F50861E931AB1C671DF080502D32B93DFCACA2CC0DFC7752AEF7BC91E36CE6115628FE3FC3AE03CE7E00F5088C0FBF40878B23FC1266722DBC3E2C31523B685ECC93FEF5D54576B9333160CD5453E45094730D5E174F91A0A9A0CCDD60C7F6E2C2B104F1161B1E6117247188031B66E77E32B196718D206AAB775C041004190CBF4916D1903F88B41E80F292AEB1F1F922F57C2C0477B37E407C1DA5CF418E221129BF65786D3DF29CE02334C9CB6CD2AC0E4 -MD = FF49F19BC338308066815D802518FFD699E40515D6402FE3A3418670 -Len = 23405 -Msg = EF3AFC1ADB240AB351BE985E2D447494D1D36EBA72708F24EC3E5A647F4A8748BA42AB42F3FBFD02141722009659EFC0D03D443187137E15204D7EBCBCE07B0EB488DD038426B5119B78ADC254A224DA5CF865320C9ED4D33F10C137CDA6B2EFF7492EADDBD6F2929A31BD5EF882D1263C1ECDFE86AEA7A145D4F68BC38CD9D5B5138D8A0BE023A0301FF36EE455F0EEC650AFF4842C682724E6931FFA86F9247ABA3B2A38B29A7F3A7A1523B15A15F82A78283FF94BC5938AE3CA31AA7B0C82E420A9D7D679F6F3BC497DA7660EC0E3112ED6C2F3A49A1F7295B4C642EF4D10E0609B144ABA8E98C1DF65044B2713C2AD6A7AA53CB4A13EE7859F6EAE9FB173C71DD5DD9541F982BD9E3CCD29820608D9B5AC659D53927CDFC5BFFD723021D3B34336BFCA2C13CBFB820517F51A49478B4CB6FFDDC80CE06720E4B05A07F836A38CB5C23130563482BE2B48AC092732B0EC72155F0C96B061A70B29029C9F1F3654309151305DB724EF4AE9C5063BF15DF60D9E690D927E68E29F8C20B79768B49BF89FC59C8277123A491912FBB1C95151C2C4F9B80CE24C09DDF54AA413B409C1F5E770D4DCCA9AC8E126C113F684042C17F09A1181782A4AD89A573B43AEE5E8881E295FB11BFD8F4D3C2FF970D1F8A10D47885305D9A09424C4166746D00DCBBB243B4D1983CBECD09D56B2653BC3BE7C3F124FC22F9DBA25437D4BC2BD9E28A68826A280C2C1C6552C35A2D91A789F9F7D0B95A7899F778139470992E276149DE9A65666ADA44B45971E1E7F3CBD2AF0DD81A38D009E4D38C549F90A18616F396E3439AD280DDF88DFCCB5F7F2ACDD81814E9E3ABC6942B9114E6CFEBAF1BAD3F2AFF5AAEE68D97E55BE1296380B7CBEB892902D48A493B4CFEAF0D77D000D8286B04152E0AD14757D11227BE8C87FE8DDAB91BB6BCAC75A1D524EFE564799E31D1BDFECFD25E5755B89DD689F0A79729A96B76F0345E8E69BB699D666C0B22813228D004A47DA309304946D25285744972EFBD7CE1C952E016AD56F68ECB12FA26D15F6AB9FA1050A5BCB833588DE17B4E03C9AC04DBAC9658C1ABA44376AD10FF0891D20AE09FC62D94351BBB3B488F0FA51BE421AC07F67FBFFE436D039528101B70A5799FE7A34E8B1D3005809A3B9E2085B210E8B6C2C5919D2BBC9008F0BABD1A577453C2D4E01E063AE4E99E6B5E964888D205480CA07D212AC58183E12B0842116ECBAD753D59B91C570CA199BBC442C9885DE9055B8698AD335823E1FE0539958896C5140582B5FBBD24F23BD0ED4560ECACC49B33C5B70EB5F468AE0DFD0CB57781B5895758201A563FE6E3DC6BAAF67E3F623080AF77136712EE167B5D667509247FF222A2B4A11C1110BF24DB905F991A48CBF887903AACABC3795BADCC86B9A3BC07674038A69AAC4ADCDCD6970963AAE69015012DAC4C7E374DCFB0E66423D108ADA6BE58D35192E195E7A785B2EA9922D3177C647108CFB5161B27F087DA18C18722C82BF400E1896A8E6E75F816EBBD3D609D348DF182EDE1624419D4D3C3BADDD53939E791B980A17A97416F575FF5F010078FEA82B00EC5010370B6F4FF4F8C0354F214937D53589FB400A040F745B39EBBAF4C9691EBB6E766AA5CCF1994DAA62A13C581E25A8C952521E2B032BE939248284BD03BF8BC84C5DD772A6654D1D6C88BDB9325F077AD23ADD887D21DD57762006C8DBD79EDD79702F153012DC21676842BE6734CF17BDC507F1E79696E8A5F755EAB1C6C7FEF0E0955D255D667377290D357B5B08BD62F2B5618BAAE5C5F92D3932204579138D9F6FC716CFB27E8A4C2F0BEEB0556D5246D6C73A768A20A7DA57AE8BA7E562900BB83C9ED54F502A1E81DA16E482F139C392E586E07F6512C04B74B971AEA3F5FC0DC93291E9C9399FC65332198BAE63B33F3F107E918E21DD5561456C4CC59FAA24C17B49D7823E4012FD4602054B3EE4432F8668EB0F7B0354F9E0EC43A202F08BFEC14F4E2DDD28B39C37FBCF3C021CBD65A468A77E218B579720F26BD843B627F0DF7800761FE80C3B8B5D5809FBBD189D85199A49F9235E589401ED354C081A6744291997F90A51E06ED33828B863615B0A2E668B2477AA470D1E76AFCE25C582BEF54A6735F7192F04F407DEA22F84EA405336E895BE6A3E4C79A76358481623BBCFCDCE4D530662BB9BE4B2FE087E2D95A5B5F6C277B27CA0258F2C70D5FD3959ADD639A640F493F9EA3A8763ABC0BAB22CFB1CDBE61E9F65471D4EE44595F812A17D9107B566D8223B4D80EF326C4D206CE4D09A9D2EB038E901A115D921AE99600400965256DEDB4159B421AE26A419F70F07198B9280ED3ADE3230C412835E1930801538A3965EDA5B20036D888B588C3D1DB06BDE127F75F04804EE139C47CB4299D284A40205B2E0E395815A217AB0DD1D6E5C1D8576A5F8FF832C731718EDAF3D62612224EA7DE9EAEB6939A333AF21402F9B00E0A0034169BA7B523929F89C73C5D93942CA0F60464B595321E24928C150DFB2F6E0D64DED038D37EFB9758EE309CA0781D86034BAD2B3698B8DFA4F4CADC12D49DF664D9525A1C9472263F9FB8B9B2C5FD6C1EFBE0821AB9CEF7A08BF9283466FE0B04CABBD68476AF35F231B3D31BF3EA005C074D5E5DB3EDE5362B6BD32CBC89D1DDD4CE06884EDE54C873B8EFD56EDB674488CF48FAD3AAEE80660ACE78C7B6E331E84CCE017BC9CE42684CACB89B784B85FAD52531D481D4DDBAF1D6A47AB18FD002668721A687CC10B0A67FA73435CC2C52B0CF3445B8FF7B0755AD805907F048DA5A8084BCE38DD56928F72EA23DDF226C6C7833C798DAA731F61EA86FD1F95518ED1BF4DB8E43462E9B261CA9C5C2841D5146C50FA1E1B37D15D948B07B5687C571C5F1D94D3525C53AD4FEA434E4805326CDFA4C1B1E2D46DD0612EFDBAF9E7CEB29827B97C6E27A0632E36A2FE3C3482EEC70BF69E4FEC303F92787FEDC26033C13A6F45988A0277964AD4C690D3DC2B5FB6F4A09FE6E075769A06C7B1DCF32BD80C06816996A4285CCB145C75A1B5115806D30F99BA06C06D6808F006ACAF2EEBC4AC9F7C3F3865B63D65E61B61C166C1B2FA9F314C723C3A1A13A0059AA8433A41E5D803FBF2AF60C4DAA2C30D2959DE9A7F7739B1A09A67FB2DA0463D7C8E60DD314956AC43CB0E4013CE8CDC282AB759F80B7DBE3440B45B4878CAF513B5F850B4B876323FAC7E48F95417AC45FBC6770334AD5D24F101369A74C2F1476413F4482CD9D6521AA2393FB6F95AD61A6514E948E5552289B2F0D08ED910FCDC41ACC954730E17572F18F952B66A016C73882634A47C84A712788A77F6DFC4EF3251E8DE7EE7FCF0F113BEA005C1D3C6F39E5D122B24D5DD5F43AAF61F60E5AE5690B0CC2C4ECD235652C39E174E764611F8D4CC32DC89AF42D27C64FC0BAE51DCEE8DEE3B7CE9F7DEBB960762DED30CF44A1DD1308D2012B654866A3231187A8B3434963BC8EE299CC809630E8CD8D19CF716972136C34BFE2DFB7D42FE4228918E55A0F2E3A7C3FD46E951BBB95BAB586A5450FDAD661A29E83FB9271A8FF9E78C591E644EB739C6BCA0E220F74F506FC8AA37CFB1D8D4B057D46D11A0A4DE5B2F8FFFCE57CC0641E39733983FE88F0EF7E9BFA4E662155ADA393A64EF4AEBA6AE60D324FB7922669CCDD508513FB547BB805E572F1246E22318C2EF2C714E9A57B1384BF8AABA011B31BE46BB9ECD8F6932D666133276EAEAFD0CC314E19E84BFE6132F14CC00EB12471B86D6C1C4CD6029548BD990B87A29BEA0A05E51B9A29646D4DD91C287FB8F5806AE4CCEE57A95A2DFD34ADA2169B71250D558600E20D7D42FFA9B528E6C8AF3ADEFF264CE4FFCE568D7E3C6CEB16F733C2C3FF63B29E2E0D4749859D6864C199E80EFEA1EF5EB966D7F139D0CD513F88E5A49AB5145C62B10FD617DF2450817D13A8E8D7DE4015376C9C2ED72B4D5CDDEF7374E85C978B1C6D64F069BB67A71C04EA52F595B0EEFA35775A55C9CC8D334C945CC0913FCC6FFC1D563D82F3A611C7B8503A7567A6A503BDA62D5FBE96877F912E2075A15C8697DE1178AAC0A6317B765AA0755F14B01C7DE347D9DF5811D9DD25C439E456EB3AF4F12809CC0 -MD = 1188C9C313D410B38A3C427BF57623677473EFBB4440ECF7978A96E5 -Len = 23468 -Msg = 4458AC7914AAEF2FE7388D5E19FBC00C42D052505E8068F110AD10D1A02710883BD9D5462E8B2F4D940B672A04AB46B9AC08C0A65957CD127E0849FB56A7E913BE128F445AB959368D91B79B2C9E89A5FD823FCF8B2DE8BD001A40C055219FBC770BFFEC2D06FF6308A9CEB8B74F349736C21FF599337528EEA87F2D5BD732B8722897BAD9B45B23F267DE17E3C78DF789797B3D3CB68618948618A6837564E7DA6B076C2CD110D0A2212355DDE999A41339A4868C28768357E883D4940EA4BF1362583717D534276DB96CDF1E006CDF663864C827C7B5A7E137B30C08C181556966915D7935528A81897D360BA3182C58680DB7F2BF4A616241735CC6401A2FB983270FD8752C02988C9272A3A9C1A89D94C44C3E533C1D994217C6483200DC76B04D11742D7B991539E96B90C124864E8B617319727406D4EFCC1EF8B7643DF8C7A2A6C55D059D11C28AEDD62A2CCBF112CF8343AECA83D49B3383A55BC37B7205BFA32EACC41E7175FAF1E9B3312FCE5925F3445DC34AC22CF5D0BAB0EA4E0C9C84D0232A71B5F12F851F82CAD24198C597CFE6C9B8A4530979BA6652668B3777635ABA9544A802ACD081A59631E1F38DBE73F10A621A3260ED4971C99F466915C4AEE6698D4D5F8AC694B5393EA9C08413B25F704F1BB16BD6C1BDADAA8C59A30B91D7DD6C9909225255D870CC4B05D295CFA25CE064A609327F0D6F960926214C74BA652692518A1AD6EBD26ACC59A63AD85D5BF91C2193F112209A1CC1A520340B5DC9D298EB84D9742B9B801CEEB1BD7AC2AE9C3A73D3D6DFC77A0E5F83F90CBB2A4A77DAD4A88EED86EC25035C5C58AB7EDC8991F92535B26D0AE044EB199329AF5BD82068F1B04433C30784E3E9DCC75E4F024A41D09C5D5C5F9768CAE0E4C45D7A4103B94BF8B6A133FBB9E1A0098D13581460F5D76135D7586160173FFAD4D96BAFCECA685B0EC93B617776BA02D50C633F4B60B2F9B1647161F75408F204DFF73F71BD62CEE9C8D81B9A17AC69F48AAB392592D59B586B5227504A713EE95451BC416B88E30D0B4799D98A37DEB1196356DDBB111366B333B68E7554E5DDB5A830ADE5C16EE3352CBF0B765136A784E69F3DC36AB519DCA9C2105759403DDD9951CDE9A773DDBDD219CFBC75D92ABF49D0D8DACDDA5DC6AC1A4166309AEFA7BBC15CE1B754A72F00601E64D280CF5BC5C8F9321A1EB9851F5B8487BB6147E811EADD0AF88EA8601C56692DEE712FFD9502E4073F3F0DA1491801E59390C9545B5A506C312A35D6A73702B2767981C98B06F03175C04ABF6C8A7FB9DF936B107644553740C8558C84707CA8BB780AF0A438AF2628348F9477B7467925722FF999BFA150A3DC32EEF6213463FDCA7F4CE6D6FBFADD5C1CFEDF196B6E0D5268B9E1015348AD48D47F5FB70827F63A1792A7CCBBFB1B0BBB06406BE273327FD524B92293638111056BF322673923185679CD76810956079FBC13B39D5BB90BBB8A9796A2D3170CFB376C4A73E98A3723D1A92FFF36DAF601B1D0BAA0E8FA646B09B629297A8BB43E97B7AEDA46049AFFB1C24F65224A593F5387B6DF8EE48594C21E31D59C304C729E68B1D32F2BEAF30A0F49F3FF20AB93691D60EA9D21F97DFB8E75569136784E8FE7D61D63631FCC5794BA793CB46D6918AEF0DC7FED26CA407515F222E8E72816CD9E4C1D9BF885B172F3BEFEE1E12A9F997724D75F1776B842098C9A7F114733593B6DD1CB6925562F734873D8E42F66439EC4B78ACE442B6DA4321203B0A1ECDC5AB6DFBAA9C0ED8E0F4EFEE8D732D21D9FF01CD3CC5F178C01D3C4D91ECC266E96D2DF195916076CADFBC073FA64592C7027FFD3BC91D85C9C0F39C6485927D52ABE846E9C0BE570A05A4F7A2D2D28980D053F34FE09EC8DDA969D2BF5D03A3B0AA608EAA28D50AC6EAC4EBD11F32E642284BD1913EF108F240301D558E957C12D16E3160AB864B6F9D32CE3B31DECD5640CD82A0547E659E011403B59BA06186647BBCA9C78A9E3CBF58D3E7C75690F2C28AF7AA84F028ACD12485C590F68C0A9E8F62BF85D232602B926CE9E74DA9937D139C607C30466797902E31FC35273A850C853F82B75697279B334AC8197592A5B8713B2680C5D087503D69E27B508A497744846FEA8960BFEDB7D68FA75865855A813B50D8BBF195DC82C7FFFEF1D061573EBA5440E04FB446FE14C37D3F9B0D95DECE7E48EBFDBED848BFBE2042EC8B68C285FA6555EB7660444F41F17F722583DC5301F982A433B274016768293E79FF1FAA6A808411DD2AD710437EB97EA3BBD257297A97B77E0A61636BCD5D092BA68F89F60D9666091B7AE90E9914E05E55D4E20E7EDFAFE7BEE5C7239B89D6946682588C7B13D34F3EDE8674FE59E7B2119D2B9FE8659BC69897F9BE4386964DD9C321B5AA9746539B0F956988373D6A806CFF4B553E1D6C29D8D2B2C077001D91774BF7E382BFF0F5C808EA8E7CDE15B3A12BD625ADB01853F17A3ADE6AF10A3FCFEF4A828D8A25C19C1512F97F1527DEBBA463A9BE05F886F6A2DBADD51B797B71DE8471765968EE23360E7B3BBCB6B086E2564066373203F32F9418DC31E976548ED7271FC04E1F6ACD36DEC1465243630909C79CE0B52E4751A6655FBEA19B4039B1210469A9425CECCBD598DBF8C208A29B544CCD7EFCC673302EAD9730823AE16C7F2C330001FC847655E1BEB3D88FD275EB6DA7080AB1AD780416D29102E4FCA01E8A67276A9E1C2EEF24DA22452722277A1374812E5576808BAFB22B911870136FBBD58E426E5C434DEA14D7E1F9CED8F238D921EDFB68CBD3BA1F04E8AD35158EF60D34AEAF87C70BEDC0CB80419DECAB9208EF131915A431D5DFC91EF1B382771F524C87A5D1F6897E4726474C92AE6FC6D735121BDB8FCA39F9C67BD418D5AC6017F17DE52AD977A51A3A385E982C2D91C472740DD10E3E96DCE5BFD7926EEC6F35677D0E6A53F55007B8D88D11ED2A01FF32B44ADCB12CD56F4969B77E315B379D4EE1635D4DBF71C68ACD30E7A182470049BDBBEE4459831F98885BC0EBD552FC74C170BCB7FBB8CF37CEEF6B37648EBC3457DA7806919D43B75F4845C3D65C97FD1276B08D184FC3ACF48779DCB582891E4819E91E419BBF3552D105784E811F45FB1EC0D2BCE425722E0364E577B0C5AB2D71B6B30050899BC38386720987E97796C04FAE3C4A118F4E10369C8A85400840F394CDE27D44A1A5A251C4FB8000B65AFEB1BB0C16D7FEBAE9584FDC82720F67910BF4893F62CFA6F486A66115206257397020D8D1F799D2416137CF95C21BB1E0EBB27BD92101CEEF7B6C9B5672ED2DA94C4BF4E887577F1EAEF6F4BB32B0950603CDA0C29732B0F0AB4FD15971A7C06808AB94E8076ABA28A3BBA503D125DAF67E78CE00E322715232E58FD01284A1A3F4A43C6778F6489AE9AFC31655332F72D52328BCB1C775F9BDC5CF5B6DA31644B3D32843E8897D60FFFD6A4E69E0D475C9AEAFDB0AEDBFFA74048E15106946C3D47101C16F90262913EB8B32AFF8A9136A0C40C3E6BAE5D978C593780D48FFBF298B8421193208B3C6F5C01AE53CF0DFFD07861F269FDCB27CAC464773F7CBD96ADB34BFCEEBD6866205074730CC0782EA2D70B0B76CA5F6BF9583B0143B67A76FF9484BCCF110047DB714B45100E97F82BA8E5E198A55798A766DA58E4FFB4B255AACD313D20309E2D11E30AC9F40D1C6D020EBBC3EE0428A6EF0475D3E8876773A6B0BD7F1E199DEA00C337AECE54EC88970644A627ED3CE66606F6F78F2A159FB95497CFFC6E0E759AFF78314A24124B747F80E9B2A34237923BE918A9CF7ECA0C0F72790FB9BB7A797A7914BAFB46B6FD0485A03671DD9842E3FA9D0DB8B9CC1B08DF92835371D0D66D02C748E5430D90EF4CBF85668072D9540C0D5552F84E1364E03AFE3A87442B55FB180EE9C650C18C865C43508340D46A0311A76CE64B7D4AA5AEA9F424D174715A9E44B4620BF64A6889671F42A3DEE9B6846A588790A61BCB64CF00C5E5D95F71AF2BA93B2883B6444E811E07D6A1C0DA0368C228A64CD3178E78DEE95D5405943ABFB7F993E8CCEC4142CDE6662AF7DEA5F6C8198141E486C23169DDAE03AF850D3F9EA37AC118529BC1B5C5C6395980 -MD = 13652F637A92F73964FABFAACEAF3C18FBF42D0E81A6AFC68DD8ECCA -Len = 23531 -Msg = 23FBC7BD59AB164E2BAA9FB43F6163D665AAF6D5B0C77788EF58824CA4B57F753DD20D76E677AC40290542E52F42C35234A61A7489CA24EAE76D7FA23CBDE2FA22197A0E0A3CFC396B5DF18AFBEF7D587C94EBD3E5E6C39520D87905A8AF76ED26341FB3F41CFD421C633191F47CE0062285A8535EF2F5F215AEE581CBC99F2BE04FEB3803E5BB802B65C1931B69090174633716006B352EF706A6C2C66E9E87A5C9A2F33E4BA77AEA24B9BF97BFFFA389317E0F43A6B7022E8BFF2ACDBA53A0B631D93DAA8243FC0318F0A2B83C4CD2E64BC780A145E5B6A2EB25449332AC1310D0B208592DA1BC8D7A59E07E57C8E4E1C6A9650ADB733A2C3B4ECAEAA64ED96EDEC439B6D123A19B02222FE655B30013203940FCA7A5742DB9170B7044B0EAB7993581191C3A5CB220D23BB56F63244170A78A1A7F88755F6AECF9468EAF49A082244147659E440ADA083C77E4E968D1B0AC0B54EFDC48586BD6DB043B0A5F1F745D521CF89B8000C80EC354487AE26321AF07A61960AEC8E3E0F549045299976E920A58E3FE059F60611BE71D0C1B1A30562E9E4E2319BE85CB494E732D50CD59F0002384BD1E31B01C37B53BE9ACDCA457CF1F6E41934600411B719FE49C161DB626F491D3AF1935765EBB98E7A40AB41E32856C8B070444D3BD3C791AC812631C9562C2426DC148B6CA6C432C2976B7D778E31F3FA7093F5EA82052DEF65807B0C909BC71098051556A38CC7F2DF0F5C8E2809FBA0E99E9A9BCDA42EBDB11F011E1ADC8104BF90E72F2FE661137A995D336E8961D5B4C0F98DB3B1968365133B126D0D1ECD350C75ECA93C5991386907B9D99C86104FEEBBEAD7646FE01949FADCB02946A798ECFBB8CDEB90FEDCDE40B7FC65A0DD941921CD13196B689441E7DCFC638A778F13C0767FBAC162DEE7532EB1D614AF459EBA309CA9B2812D3C1CB023E07EFD5671EC8C1C9AEC35A2F74BE83D0AD1F76561A15A1856A0BCBC1C15BCA12DF39CABE9D7B9450EF3B0EF04990C31566E61A14F72609FD7EF48BB91498FA43F7D267FF17AD0C5F90FAB3137404C26DA81340B4CACE05C19521B810C4282EA96ADD5B32702440A0C043F9DB99DAF80C4C58C661508C0270FD5E5889D39171A09118C6A2B27B0007418D77D829B35633305220CF5568836E364B383F9DABE9CA2A80CCF991C5DE5342570EAB8BE5F531CE7198116C800765F8711459423194F03ABEFB3EC067475C617E7C5A18EBF20C1DEB6B367BB3FA3294062EB897D16E55ED4F921D9201EC727E8809E68EA44C98863DBB7D198B0C722494EAA3271E7D2A50653139660AC5534A1D7481E633180472A7F41761BF0D45AB3E70366764EAE900C0E2AC952BF977732591442C10963D67FDFE18161CCA92066F8BE5B71A271057E4E5198D48B22A09DF3DD8CBB2776928EDFAD7A5AB4CA7FB24F67B2F21B14CD861B28A0F64B17A858EE690CFBAD831E681BACB73CBFC4D277A0F3B4325E2030055A0A588122C6BF993E9936ADE49C7EF789FBF48A051FA24B53BEE1EDD59919AFCD751E4EA8B93EECECE0AB02A3C2304BE843DEE43F4956C39C68CBDF173F2F3D295FA646B4168EAA3E5C60467E6A0FCD983477A3D9F6E89BB2DEF88C82CE179DC8853E8DECCF48C316332AF4812F45EEB022CE23BEC7D4C76F99A9EEEADC02E927CDF6AF02F099A993AA2EF2ED1F470DB01B9BD1EFEAA506A75DACFED486685B40855A58D3690986658E825EA31902E54C5DF325A5A11525ED12CFC9D5A82E443208DEEFD9C561317C0D1B44D3B1DA59DEBF982172D91A038722A03D250CFA699D7F7F76DE2C0B71426C3513CE268B10AA733512D6C10D65C1A15C2FE421AE67264A1E9224CCFDE99DECD5237D6ADF02742E0A65E87F007CF0586D774AAF2F3D4F8AFA50053EF77D106950C0DE55C88881A543135C42227517F7A6B8A28A4B9DF6C818A0607483AE388D811F43B9C600C1BD8E84AD7704D85840EBF97FF24F6E9EBD8641610C11BDF596CBD53F53BBC0F300EE3209C91EF706EE7368990CDFEA61CCE4B30A10B7A5A490DC994ED7AABEF0608650EF90319B1E8A69385B3CDE36BBC3CD10F4E1E6ED5C7BECBC09975E4BA0AF33FE2145C4F4535939912BE0E97B034F835263E852C9C8DE0C1959F491D4F826D03CA252DB92D88B11D3A9D56ECC21747A353C782428AA10064FF37B4CC92DD226A54B6684C4C0B01ECD01F1EE1EC8DB5387E6936A3ACFD43C8DCB51F282469068BB418E528E6097B8C7A60F25B45446ECB31F462DC7B2C2B3B70E072F8E49C9AB21846646BB63907497AC92A3BCF602DF973137C08972F2EBDE5B86F455ABD4BE489E8DC18D5EC44B3793D8B73A1EC3B505E7F1F5F4FFFDA9D70ACA345CF2ADD67AFD6C1D77224C8852CB1C4927BAD579C5225C68B88C6F2DDB9FD5FB480D58FE2B74E795E96035EEFA9BA16F25EAEDEEE09F2053004E74759DDDAC06338F2EF30A2CA998C0695C849B213113B8D43951B422DB1F1597069F43390B0FAC119E429EC8E1A23047C060C5837AAB68E721F5B1CC73ADF4A6AC1628010B40947B9290D8A5A744736B1C5DBA780BB8DE3F9440AF743413C6B2BB83A96A5A067938C0B19B5F8F674B5E92947E12E3F69E7EE4D02F8D86E380842656237700399C264FDE967F13CDA3A448567787C47E5035CA8320E54AA4CF7165A2E718A37C7EA76279E572BF0A978958A499815C7B00038E52C2D2F09E689BFAFE1501F20F98A767C124567C8649A02F724EF2F6EE394B19094EF2BEE045EB4ACFB4FD5D6716D6314B8EA18A5BAA93985EBE382B382603740332BD7DF85F9B002DC55BA998D6200D45FCBA5D1C5F82782A14D99B3E906D8CB1589614001393C8AAE3D4256BDCD7DA6AD833DD107FE06A1FC6862F4D14634367468F28EAE855C3A1AFB909F3FC223338E62674F9C7A53D1A3B75F8CD2BE08218DA021E3631E884C0C687F7CF4D80AA64415E9295DE8A81F2F9A4E0F0A1A2C10DAB9C666E4B4AC669AC28438AC3EC256783F0970E37718A41E142093B527F1D896555900716E46B000B8A89681AF080ED67DD1875FBFA8A4B7BC20B1DF28CEFAE9C4F5B5CBAF02D01CE855713D7842FA8D4F089F1B133A8324D75080329AB0B87BDD1DB92595A3A0768F04112103444FDE524F6ADDD1E108F8F0BD690D61E86D24571535B016675DCB0A221E376C20005DCCB93AD403762B46EC56DBAA3BA52A2824B199220CC2A7BDFC35293F8402C81145ADE07EFED1CA19FE8980773398E130FCA5DDCA35D4F5F9E4439748A64E287F8F45055D6F095E98A786E19BFB1303417EA89A4BA3AB18A1CE9CB5528E9FE0E160B3E693D536301A5331CF744C0E3AACEB70F83B5C08922E9AA77863D769EF22DEA73CBF1F04608D4646E55C8CDC98DAC1550C927C0AF89ABEF32CBC0316146E2C4AC9DE276D4294CB44DCD63B697F716177BB04341C0E1FB759B8A6806971E9A60FE6EB93662A26B0EE0A0EFFF39A5B46218E61E51AA337C063104ADDA97323E40C2921DD1EFC124ED70AC2C5B8DF0B7ED729767E72A8DA250ACDAB74C73C5CCDF371A2B027DA73527F77665361D9BD2BA2F66716D9EB948DBFFBE1A0D403C7DB2AACF7E404B1831CCB5D3B0FB2C1124BE85D88FE291BCCD3C3017433C1C96994165B5E46EE827266ECC2686109E93E409C02DEB47C345F3FA79E142AA90B3EE0BBA137CF09E2CACADA8C1F4AA23A5647DF1EA611E4AED40245DF4B0668C23771F4C3C29100851E862F998B526A09DF264ECB1911713CF9CCED354425A6B19A08680119449D6D696CA406AD0C5D72D491F05DC953F5D953392B6A319CFA8E5E931AC15B21710943708B1EFC7BCD7BDFBB258EC96BC14C139D02BB1F3965F01DE94B65DA272C597E72BAD291E658EC130ABB68D2A2CDBBEF5784537542FCC84ED093789D8FB2F1B3C5CACE50717BF2115B2F1214BB9694DC728B42751DA64F8E833FE1B193169DD6BB7E83DC3C56DC66B280C745FF147E2498C2AFEBEC78890FF362E03E1E697A6A90C1BD1550ACEB4F66F7A62E99CC6228B60F43B59741D2C0409F7B31C644F751AF37F3A3ECD35CA60B3DB2B0E880F333F8B879470633F96DC7237DAFEA0032865527AD4CF0F6EB5E4E3F2916D347D3E448FC874206E132BD17575D00 -MD = C979A4A05F6304F25942586FC9AEBFB2EF1F681C6E787ADF39929385 -Len = 23594 -Msg = EB88E158600FD058E023D32A80F7ADBCC0F514223E6B1DC4DE693E23078D3AD2667A92201C2034DEB6F20B5758387BF86CFBB68B5269AF3C07EB64A8A0069A09F832147BF342CA16A8719C1245D6C8BD2DA2404FABEC706816F2414E2156E12C0B493A0ACCBCBAA1D6BF4140CB181424E9FD887348E89498D07839EEB805B34DD10D14C59FAC8C480199C0AE7B9538AC71E1EF771127C02479C65B1FE3D8BB005CA50E18169FDAB40B707B1BADFBE54D3F1760A5ECE0B2053770A7A4AAF6AE88FE21FA1C3FBD0B50313EAE46138542D9A941447DA6DAAB33745DF35354D5B1B001FCE2B76AFC9448A3E59162AFC1F6FF1C9E8B44036437083F437D60C7DA28A549200F08DDD5092536D80F197C76DB7AB3E20B3CA1754ADB3E07D42FE7AF32DDC3843FF6F3185EABD1EF2E61B07E72804F700C3570E715D24F8EBDA4D65F9F8AE45FCF476E17D7754A56B2F5455A0177210B48E599D76A7FCE731C116B65F00F71F1537C643C71A0EE3020C40348244AB3810F778E7D7A9675B3DA0448F133F275EC52E0A318DE47802577F53505A8CDB0224A3CC547BFA00D2A786250A3CAFEFA66E77EB87F04BC429802E62809844F660AADE6E9FB5D1DD4707E8EC948BE9F12C1D85BF13F136173C699B3B6EBF9FEE5BD222EB8AB899CF9A1FD41310799239F885EB1B8BDC288E69BFFBAD1BE6D20000ED078C6805B57218207FEAE0B116687B72335069197205EC98FB2023B2931ED52F4A86248F9A6E5BB30B3D7B6E5E8EF5A08093DE917BE61B4076AE072F264EFE600209B906B79C21235B4DECEA310F30A60B06AA325BC27DAC915C9E110AB166BD1959A4E391FA41B698E025FAB3314F7433D83DE0787A79959D1271C2EDD7C182242E939D4E414BB54E9DC695EE8BA9E704F05A0092955D0D231014B2ADA595030C7D2DFCBB414553E69DF52196F22010031540989D3E46BDEAAF2AF44F9DAC701F9661072E94B7DBA244F6D354297EACA7C8BB0E41CC804C4CFB30C1C45850CC598D2EEDF8851324CCF75496CC9B6EB4A390083FE36D28FE419C2F610FC749BB1DDBA5715744F336317618698D0D19321D8DE6BBD78845BF1AA0BA335BA049B1BED196A04D31F151430B25AB30CFE1864AD2BD93C50E4147B76CBE71429013E0D0D39663FC49E27407FABCB0EA71E8013851526ABF533ECDC1AF574537E99DF6DD79965FECEC5F01A24724624D8A8C48D9E5A3BCF98A33DF03D6722BE8A44DA18C4F1F8CF0C175DA4F2200D6C355A6421DC86A04E5955A17DFF1057811F6D6984FC09820FD884EFE4B32967C083ADCEA0EACC64D4AA41F4173F9D086AB2DB1574F10FEA7934AEA0288120A2C7B52F8186985ECCB94A1CC8A0B0708D41A7438F1029E84BCDFD49D90E9349A6977342398B690CF29A91EE31716DE8CB42CFE7D1C1B46383E3C00D0FC5E1EE6A78C1AAFB1D75AD6BBD73D47562A70E03EDEDA45A427F3753A8ED07E2F1FDFE444B5F98CB38A7CA413367C018FFEE4124336D3D8578791B7E28B278A9288988EF7B55A12C21581CCB138D55D9307463747D25C08382EE40B79ED9E861DB7B47CE6239A7796470749BE849A34174CA7C5CEFB36F2B4038B5880203F39E94CA0A2E1F6D2F71B2464A6F8443778984336CDE6EF5023F3F6A09C521D745CC1D8E3D57C8F8086705C892F166203CAC6CBA8D6C9BFACCD3E9C5E3FBC760DA930838206EBFF18D2DAE33DD854DE0E6FFC1FAD06F13A37717BCD5C2C029C33B8BB997DFD9C0E051AD7C779F076708ECEA2DD9FFFEAA77490273422CDE8831E219EA2D304EE7F8E78303509B5F6A7C787F245CEC6CE182EDDC8259566492E5EABEC055F4DDB51EFAADFA781C89045C175F86DFB06893F7A4DC8B8C5182F5332CB3E4A9B3618D635DD44E4536552A4B39C453ED5EFF6DAFF417958C626660BE693EC54FFAD2B846F0C12FB2EF1D9BC55EF5908CDD1A4F6A969CEE71EDD081D5106F59A2CFFBE8C478686482CA84A9E23D4CC7B5E8E14C103E2B871B85A01D598009CD3074C1BB13D0DD88C7DF77303C8AE81B0C5837A2C2095EC00A2EF06BE5EA8FB1D1023BFA393592E4A9B2054BFFFC36649807E0DF09337F28E36B0871F8FB16528654B826BEF956DD5B35CBB59FA00F353594D55C567CCC34BF02358652C2AB4CA26E811A799D3DDDAFAFBDF108DF2A7A402E2521EA4AEFE15E52FCF21D842A43763493EEE00CD54DA715C90355CCFE55613EA4AB943EB4BDF9C571778EC5A4AAF887E69B5CC01F3083F0144A4A9AEDE6F6CD3BADF9003A9E1EF55FBE0756384BCAA1BF2C5BE0119D1B8E85E572EE26E64D0975DFE7B739E37F75D25956D34B0811F8E51358C210A16B81832AF60962EEA13362048F71D3E64C1798018AA606E617A57A3CCD01704B04C1198BB819EAB4DE767AC9085F61AD9A830D6D1A86406484B049B677BE21D84C0426C0DE02C068DAD2CADBAC1F84C45CFCD9AA9ADA8744D235A7B27648146F784430AFCBD7617A795DDD8420008DD587608D230BAC4149866B86E6E612106F4FEBCFECBEB46890E4DC3319D078729FDFB96B30C50267CF27C12181AFDF03A1E723234AF4A6E024AF0406B552C30ADB8C222191F11338AD354639A1A3F03BD9F0667895C46DC2D8331C4E58AEA4B744B5833A17F1C3C4690C9C148A9C0533E4F1E61E88EC2E8C11ABFB7E7AC826D821288CD99583AB6862CA8E23AF8BF3A3224011B49C4F7E700E111B0BA298DF4ACA0F20BD3CAF10C35EEB3313CF8239230A642F7A064483A0985BA599C873573996B3859D228E61A13DDFA0788F561D99AB8CB9B7FB7B2408883D4DBC1EFE8E5BBE675033FC9E3B4740096DC01525C21A7BEB3341DE18EC29DCC929478281636FF2A4FA86EC44106600B8ACDC7D597E1FDBB348791770EF6644BE867F671EBF5D6D82782C69E87DCA5AE2E1E25C462CC407316D1C3CDCC29FB295E6EFAF1A59704894E116F7AB74B71A170F9B76BEE4438D18859F6B91A63E56E1F98E0C79990C13F6706BE4012299673BBF721715D6204A0B9871CBA6B7E3EAFA495792398A4C2C39EFDB70A0ED0B49544376B6A0E4EC45190026F1D8522D171859AE04C3EA162864301B48476A93084CB3EB99F8A9DB4122127092719A060FB05378F36166F7AFA0FE04AC17A492B7244AD84950844FEB8F448E967C4E524ABE00CA43B0404D5BE2CFE430E649C343747971C581793DF1576B2A2E2B11780911CA3F2C5BC67862CEE7EB21D8907310DA8242E1F416AA371E3820F1BF9B6E83B4FBCFDD2930326CCF77F4B2B81484DD07B47B459B27BDED292615AAD1E46A505C325B8F5131C020E8338C84CA738B1CCCD4E8D8E4F293371463AB25BDD5450B3089728455504C186DCB712C5A277ACA5F55390EBDACC31B12E802AA5082E00FF93DFFF6D148CD11F3DB4D5684CB5F0679A04B2B0EE498FD3753B08519356E4CBF0C4DCD5C1BE885CFF9C1489233CC1F75F6F18B846220E51874E931F0911EC9DA53CDF9DD7325DF9C690059AC24C77A048E525811EC761A8A7D7E5AB4B0D174DBF69FA3462E09AE1D12AA4530FB5E317BE8476DCA8725D4B2B0E06C58635FA852730BB2E88BB342AAC75450F2AD2A4EE345AD3E134E86E2CECDE640A9C797386FB397F8D4C6D710CCFEEE5B5759C98C3E72EB422B914E517BEDE7983345622CA5DDB9DD7102B792C77FAAF98FA8A52F2874FB024473498CDE8BE20549B5F2C9366F0FC53F20C87CDB06AD91AEA5AA24BFD814F671A29A711637CFC5E0243B9115326E683278587C37BA19D345D389235AB85CDDEE6990E554B575631ED3924ABCF0D3F39548C47D5AB72045754B4D72D115A31996D0A6E138143E4EFB43A8F3A8BB6DB0834E87AD8550D442DDDF14EE305304F36AD61E69A4EC258C3AC07548D7DA94B27D50EB3CFF1E77F6F6039820F833B0DC8C7344062A6FC200C27D780389608C787704D9B443136665E5B86DEAC25556A3EEAEC65CBAEACECD16E5B59AD3622CADA930020702EF449DBF263E81035EF7D5902FC9515042AC26969B8AF40BD3E0AA10770042AA7829CCEC9858662F5EC24530110610517E7E4940B56FD8E74A52CEA64325EA9A7EEB5F8D96A3907B909CF6CCC2FC61E3C80509DD97B45E150B7AC8CF7C2316AFB89678C99BC436C94FF2631DD8D9BE358100 -MD = E017BCB4B454FB3E0B2265524C4AEA43FC5008F44A81185F22E36988 -Len = 23657 -Msg = 4F054C2A4173D8E7A23DA34C1DFA8D9E001553A0FCA67CD2B291E005560D36EE2D21B57DC2AEFB7D07DBB7A9245A80BDED3E781C9CCB9AD007E85FB76F63064224C3055E6D8946C585168943FC09EEA1EA0DE6848D2D5AFEE658431EF51C7C657ECE68A0FA9DBDCA8265C622E97FF22456706F3F0EFE5F64C88BFFF6C4AC4FE9B1F9682861C01D0FD0D8C01A0EC24E8B298B5F9A60066AD73B756C28E095697B96BC67DA9E7233968BEB74F22D16CAF1C8C30281B92CF0BA0BD736CC024FA67DACCDC3EC2C188C57C5CD7F2E2FC563FCBCC65E4F4C85FEEB30DF00F3BDDA7620396B8E4DCDA6081BF4E72F1FD2CD02D559CD88EB5E1EC683D82E4B66AEDDE142C3FB3377D600FF53B21A6ED7DAB3233885651CB7127EA1B0937BE2E050940534B93DBB23702B4EA5B438C28506BBD0422CFF26F2225783BE56EEF29E5170D608E402D8AFE7F5549B21BCF6F0AA4055952EAB927804CD29D649D9B33DCC3B142CC6B9044E5076B27EB6D0CB2721C98F55FB4F731CE5C57C696BC825C14D3F2E32C4B2FBD8C346FBDD142A9C1EBEC9124AACCC6321FCCF22E605B38C23664E1460C95F1CFCF6A0E83C464D31DD5163AB891902114611C8FEBFEBC4B0EB34EFBA57C4E68882B23B5359A1E44CFA6EE043A071AB95D994945BB09352C0D3CFE4BF13347AA2D7AD11CA87BE7A81352B58EC9D2DAFA3E1F716E4C62DBE0A1D733182E86BC70E95F9715BCEDB3E5B2D12C328BDD88D13C315EB3F72CD20B819989657A0AA8202A8742E691043BB1E43C7875F230144005BE0F66351F78255973A63760E5DA1E342C234076015C98BC65CA641194C0C207489E6ACE11E64C76970272D727075832D531D409E9C7882F29239B3774BDCD1CDA74174A4744C48D8C6F0EDDE1F4A64CA4476715C07E6598361CAACE06B689A8D423DB98AA06F01DDE77009BBF403430842716E191A394F1D3372927B84E31C4C1502641A6202C29EA37414C64F27D7B88268C89C48299248A8C747060F0A5AF91E7158CB101E55DBCFD119A0D9271E9DCE706DC6CB95E79FD0BCA199BF82611B687B982E791F0D007F001E34DE482CCD63BC3B1769A28488D8FB43C54E3C0B48FD27F8433E4E0C4EEF20ED95D8985C15AB4B514FCD95A32620FE1C7D74632394C09EE9739CDC4D74A0AB3397F7C678C8A6614FB6432BA57FF6C2C716D204D11814A2D0E8FF5EF961B0DF4341EFE02DE8D5E01763D40DF07CD4B0A132AFFF190CFFFAD6B40AE43D35508618F51B2BEB32E29DE8428514DB1ED56CF01C4BC790FEA0C3C5097917527650C53A8F45C4A7966A470A638F458AB6F620078EFA849714634DCB1A7AED0ADB90433B4567810933B72DFACCB4DD8AE11A62BED72504BF2196B9966B640B735DDBBEAE5D5CA64BB553F0F01AE0C5B968E2D9FFD4267E2048C5ADBBF1B62A29F9927D3A732483C7ECD4CD7BE46F63C49B46FA318B5F49C0901672F6B2C27DEC09FB7252D4125048FD1E27139D543C9ABF3390408ABE1E6033014592148325B1F2929E2E945E6D85E7388DCFF012ABE91985C30F736F97F48BAC3EDE0D386AD4E86A452A535921E603EEADCA5D8D848A196B0C6EE5913EDFDA5411192BD72A408C683F2B32F53DFE33D6E8880C15FAAA365238114B0322CBD4E04E85A88308C904F52566925D873F5E8943B17369C0E1E56454B3E83F73C05B61DE5BA81BB6F4C8C2E8AAB697E55435E553E4FF21C322B09D31A9A47E206301AA53B1E531511F33449B35E7362DF6855EC152ED13FF3818E2B6EDFE563C1271EDD57782255AA87A947931013E52B98EBCC03E7781BDC3DA6581C9CB0B2DD6F55C6795AA0EE863AAAFA985D54C42DD58880950854ED280AA55E218E7356142659FCECD33391B50AAC765CF9AF6A94602E2403DA351DE4E87DEC14C65A159FF20C0C6509CB2BDF5A4053ED2953D9F574DE8327E48C8B85B6AA5C4B5F50D95E3E1482BD7C3B43952E8086DF7B83DBB59698AF86ACE260445444B17A7DB0C44304783DF4505921846F0ABDA4EA7DAD498CFC59DF0A3C6AB106CB743BF04EBC3DF6B09C7623B9CA4BE681837D9C1A43A00124180D703304D0B42C91F72F379176BE4B1E752F25886400B13A63FDBDE43C09FB01E6463EE22E849AE23B4C82B5BE1244CBD42ED9AF0A22EED235FC12C71F5C269148734F783E8771BE00D64F14555101D1C8FDE05D6BB20CED2D88BFEB9E2D9D76C5D2FF7D641E29AD3444BD83DE6CCB5C4275D0D826F6AE29850C8F3D4B8E0308C2A0841BA9B2A3654A4F35BA917545A75D0EFBB1C5C102ED20F4CA9D28B09EEA256BCB422F0AED26158BB50A46BF0E61EC37F6A7C587C3AECA7FBEBF79A716D1ECE7785EF0DAC78F4462A20BCF30F6AAF3A3449CD77BA0D1DEFBD4D24B938EF2791AAC436398ACCA277A466B7DDBA2291C2B08F30D1BD568171C9D53496824AA58211BEA59AE91C30BC8E1331F71428AD2E4A0038562EABB07DEB8EF41412290E44A5465C44F2338647B83B3765C0886022156B9D39F69E5D3D149D323288EE0C7C99A82ED96ACCA1C176ACB309AB9D5BDF449B47CE8BA2D8A516C58343D1A383A1AFD4B4729687CB19BF182C6F4D322353F0707A88C6BB70319ED4D2CB3D1004A790E9179E9A77F1E522F6CCA36C54DC24DE00537287CD6484BED5B0F515478B7278D9E9103D9D2E7364453B35C2A5D0D8613DC6113AF883321FDA4F850BABD7FD4768A638861283FD93F7EAE5294E298B603835EEF728312DEB569F10FE6CA9EBAA778B64052FBD417DABE6DDAD1ACB414C761F6BF11CA0DA595C5741EB6E23401701DAAAD5E47DF7220233720A164B1E80F5C85EC751EB2FF6FC3984D77228EF5F637FF3897CA4DDD02A24FC5D9EC1D38227218BF4DD944A842DF694350C720EF524F8B78560CD431BA5DCBDDDDCBEE9FB91C99A07DF036E0E46F1F002B9E57F0774211CD32A7B6C4799E92731F85A58D4898F3C79376119F7C90C66389CEBE5FE1DFD7640BCE5E92601CFACDD5601AD1C4EEB6E6F78A24CDFE05D386FA7EE393910DE1649AD95EEA61830E1DF7F5CDE1947E3BDD7E0A364694C597D1E2D6FF5B002E26DB519E8406A4464305481E03B777319B0AD2ACEF49A69392644A0C7C0BB8D932447EDE141C6B89C98318F7686FD439B29867596305DE436DEA4BD7404D2693C38196FBE4D92194CB3BCB6AAEE4F5149AF5E8339A74819C1DAD14DB32D236F61D6D6437F5DEA072308EDC3C52F4DF385B8ABCD04B3209D9AE80C0A30EA4F6FF9DE4B643CC769D278109D702B6422A00DBA96F481769188C5CEBBBB2B5942CE10770E5182B3B2DADD7ED8274415F114F581E6037681A3BA0B3866F74E6EDF6FFB03877AD54591016286408DC1DB9BD26605C957B5A05790941C47C52BD89D254A4A9F3D0BD58E7E5BCBA990121346CECB75F2AFF45347E2BD6023610E8EE2FF4F8F275DC4311C9BC5D8BF2C8C1842F2B225AA3E7A00DBFFD8D8AB7C235F0C508884D46DEFC4362BC8B929596CD5753B97D7FB30A1B7B0AB0E188797A6CF4D91F1F88AD9869B2EC2C759DBFEA076B2675F3503DBDC5585FAE2980138612F029B93FBC8954B998376CA1AEC369019633D96A9FEA7CD1A2D674F724A74AB69050371D7876B7D9AF68E858A4850EFE52FE8CB7A8BC175528C72C553AAD3E6F2694761E41242E1E6CE50999D24381DB4A1C3C7E15E16A14248A585D22DE77E94987C95C70871D84689DFB6FEF27EB17FCC8DB6C48726D7EE50F917D57A964FC91C2E968F4A3639D7EB630D63C126B607560D97A0A6A76B7BF9B52AE29611D71D5831BCE72302B3BF0D2D08E4F0743E39390DCAD9F330B82EEE234B46668BD16C54C68A13EE2A22A984BFD4CC4094BA64AFC33BEC78C46EFBDE8EC1295072E2EF354F50CCF63D0023278F9620CCCB562B205989C6D112814E93ADC59B66C68B62F0AECDEEBFCA0C92BE496E7B5F2AD3ED1FD5B8BBF0BF3A725C7EF481DA009113F188D7901E02080F5978E08B6F45B847E42A7CC67421B14A056D951467D6AE41F76CB801895EC5AE5EAB0FBEAADECE575094175C7C91B6B7C80F8582699F8887D3C53F72CF0720C2D31D8187A41D048FB9165BBE3BC7815880BF3651057EDF531D876FD6747F42CB7C1C29AD2ABB98724325E076D3BD114E328CA5C6D253D7C104611CBB7BED80 -MD = 5F4ECF20330EC5880C2D973988870193ACDD4FD7BB373670E8F41C4E -Len = 23720 -Msg = 16F85F578206F4D625A5831CB3B029F09D6F9E13F8E4271FD41A429CEB638A1300E51B403ED6124420B363191F55B32E14D286584B51D3572536A0B7022B63F844F85C457719F88D4B91B1034D2B58E77C3FAA34A33DB8089284AD13C993C234CA883E0263D4FBE209AFA31A445021A2FB4F457633A54D158D94F2342BEDB2CB65DD67088F8E017B58BB787ED0400AE30466085EB72F190118BCD6B00A7E1BE12D3E86553948859FDB930522AC99399685FA8D2927D4C97637EA57730C1216E00C2BD8E8BA684E1E8202289F8708D5E43F68EFBD1DCE5DB6408889E5E6D32BC6B20C1E40301471EE658A2B89873589A95F1B1923972377E6599DC7A0276D52B54B18245A38CF56B9E4603BB9BFB7F9A68CB63184221345895DFAEFB6DB77C8FC11A2B0637EE6478DB74F2DC771AE293C9D1B496A410AD012133F65EAF4D3737E01B4142B50C739B0766E846E3A372936E8F05D00CC91FC4B01DF2E39151DEC6C11C3E059AEEB884AD4B146F0CCC66CE48D8959D7AB9920F895FA911D6F127C97F1E8583D5AC8B0BBB959CA80E6F025B4DF440747648DAB69662EDB9F4EE44A6EB7B3A086870B167418C4CADFDF6408E86FC07459D37870F95D1AA11D3CAADB3FD65038CFADC758C69E8E77B9F0D08844F942A73B2A16B99FE58F35444C3E5CBFF03CC7CB4B95DA6CA7D9A70FFD846227CDA9BB71A7212CB7F66BD635B2B25116F1A68CCC239FB5C510E876BC602DBC518F068F55024715C2236BEA45F42964ACC022ECC3653C12399FD65095E0E30614D02D8274C63BC4B88F3D11DFEAD0E406B1CFBEC34065059DDCE76327973EF82D5B0A6DB9B3014607207E545BB9650518E4BE41BF9454AC5FBFC984586F6FC5714293ADC8438C897522FE2CC6B1B800BF64381D91ABFB2EF2B7703E337AD631D24498FA36FC948F7B7BD668187CE9D94C396FC322E53F341971F8B79D504289DA46199D7DF841B985D0EBE2F82D9B742A92CD1879CEF6A9FE968F3DD0875F4C172AFC3A289A86DA0F4D03E8E5E27DF20EB1C819B2566A6362A3A202ED318851F218D39364C4C47E5B47E16894B645FCC7A84FF4AE8A075A65237559E69F6F634736129A6783B7C13BFBBBC9E3FBF5F8FE52DCACF563EF41C1E876751206E5FB7CF869F3F6BF382C1E73334F1C05E5F6FE81344B7D5CDF58061775CB3457D7476C3085F9FE620CCA92679B1A5490D1620F613B7E8CE137C2F39BA5CCBCB7C61BCCBD6A024EAA79E58939B7CAEF19348F745A4640D15226C0532F1AC35740AE23CDF1C5F7113725022A7948615A33468A3F2E8450154E4D9DE452D3B9D5368980075858AC06AB9B30FDD432E44EDD9DD3C57281BFB5F4E6822D8BACC2E3512834AF79E0F8E13F8604C6CC838E2BD356BC3224D351187C89CF0A35069C7891BBF9F2E7D6B5D186EC92CA96A17A75B5315CA5ECA94C03767C500B2728E36B7C7C10A39155AF28A8C262152065CB68AE92965F0A0289FBC470FDF712CCE4A03CD0AFA7D9D3DA1E0799177D78C5E87EA5AE6AA1FCF4A514812D0ED0587417F706891CAB158429A326BFDA07F6C3112F7212756E6AED0E548CFD788AEDC7CB0D03D1345B2A28C6D3864EC67360CE237F008A225DE38B3C3D95047D2EA919E47DED2B2B8139CD37D300A5296550A162CAFA5BC0E8014830495487A3C2C4C49282B8E04BB988D744C0C7248AE2003F41CCD44666E06796C60A0E585BB1E10B5CB8D346E58F9843425FA3271B5227D0498AED2906F36D9076B1083BC26FA3F505D908F0B294148C796EE28AAB1191B9F46F5A4950485DBE913B9E22365F0064720E9F096884C0B36D18405F35EC928101ADCC82E3D56DD578B6E81DD0EF2A98DC9416682883522A5F357C36F292EDB5337E0E6B33DB1771EDD2E98CF440A6116EEE24C7EBA0BCFDB2FF1E1C852A6927CD122ED05A2D414C51A56944B3012F5F9EB545B838781C964BED1C55F0B4E36F258F4D0FFD1A01D5CAD9A2ED53DF6A192EE74DF63DF7F6587EB31ED365F58F1666343C33E42D75322FE5857543CAE191B799E312D1EBB8F70DB19F831F136EC11F3FDB80B693CD2D2C2A56A3D5A1F48C63DD691E036387D660EE988885F08E4DB47A72E57C8B16C583A7BA9C13D6F686E6C7164E9119709BEDD892DB2ED244E7325C311E3FFF4827CDE0AC7507DD2D2388BB978C6280AC6E096A12CC8B44C77A5E4B4C79E2CCEB84E24CE7E3046867F2B96AA3DC663A2D66D481F47D81AB487B1A7FB04B6B1443E1EDD6A2C8FA09015BC17CDA3D7A82B9DFA4194094B40353E0B23B1F878C3F3FBA505D7017ED16EF0A0372F1443E81D69DBE1FFF79943AC8B6FA31AABD090733109917730333B86C093D7227DD54FCB590614D8F195922B120904393974560CCC44E225D1740F5590AD873E3093BBB1EAAC54AC77047AFF1B8B1439944B5EC784CE8A4B1A116F7D008C3B23F2F7C9EA10B802B3BD0C57D00BA7D5FCAC12FC3B033C35ECAB30C2563A0143C7B54EBF3B5EE18D800FFEA1A04E92A41754B1B0F7190E9AA0F12F3498625F222DE621EC311186E2299F7F86B4D95E3024B46A58989723ED88AD57B9B9917647F948420FB0CFB24A865610F0650BA773C258DF09D739F73FDA76B12E7B56C1774E62ECBA24A0E00DA25CB890642E49AB6636CE5B2DDB572D6CAA0A9231D163A72D5666FBD466724DE80F7BC67A47F9ED51367164B9F8762B7B4A0CB4E91FEC551427CC9DB52855C6457CAD53599AE416D2E9434AA4AD72D191E162502D9AFD354E8A3BEF8B85A7CA1D52735F5C1AEE0A7F98E3D1D793148F0163E4F8639C07980C9780B025A8F2F78790186BC382B766D8018A1C3F6FC088E14FBAACCD9E97D67CA25938799798F11EDEEFAEC5F96D1782F1073A14B971FB09FCD37BE34D39A6B5E1308F53FF291CD19BBAE6ABB7997836178C074F7181D26931611E1C86E90BA8EF3781C81CA4C93086DD2F4DAABC2F7EF30CED53AAFB90F972B75774CF7D3112CD1CA5BFF8C1B463FDF46AECCEE30A2247E9A2023EC1E3EC21B2250B8E9FE2B4BCCA82C84F0BE24600589F7B9D6BE5BEA4D2AE543D738D0F2B7B086C88E92F7E18B323BEBC44EAEEA26BE12FE32753E3D2064E3DEB7EC9EA4925E69DE6B41E31820D49D6FA8E303DE0FAF1B1FE6C7C23A4E1DCC23BC626C108D5184141D6914C4DBBB15D0A2F55BC2DD4ECBED4C419B9B00A6444D639522600C8F9204B0DE1FCE3B6BE57E5A9B0E3CDE2A45595978FEFAA4008CF74B13CE86DB5C9AF0FF4CE122F60F07069423F5E8C513B5B955D2A5C22B11D4103F9F37AFABD606D50F7976C88FE0F01CACD075F4825615D3B9890F9DFEBE49AB86E60F390ED2D756594E94827A4946172232979665FA8264B7C0CE1D8BFCA203EDBD7D394A9DD06B90D428DA3F7D58F961D3680608AE82A0469BF3B3EADEDD344898240663088B62B6FD38235BC0D391151238963C8061470F07E21D3B7FE3BC6CFC4EFC550E2940872B67322353BDE6025CD6D65C169B9D66748D73B9DE6BF9EDC57DA1D7AA072BB2C35961DF26FC7BC5A4928A4C6A95371B87E03FC52C2A06342959F7A1BBE8961D69FF1704FAB283B4A5BD417A80E45D92727E0547A43AB04A59272EE8B3F6C4495414D00B88AA8A10E22A1A6829DC2B3EA2F9D2A544ADA933FB44251DC6FB814C82B0E2AB1DAD9F8609FE86EBEFA6277A6774C81D4963578D56A49CA1A5B80423A6B1D1735BA3E6C0A0CD4AEC877D9AAEA84245CABA678666CB5C2B48AE671BEFED3ED327188FF20C1A5E44A7E14E4EAA6BE3A01C8A658E37F337F3CC8074D65EB3725595441FE7D66E1321385B2181060EFCD92FDD5A556B8339890884A54EDF0AFE4133123F018E9A27051A9BCD04731E9EAD9233EF0564E162D546319B13FC430B8D434E2DDB069D983CC12BF178983868D34F39F252A8F1F1E827F83A53BD7C04FD83049DAE31E2DF2B5EFB6AB8538D090189A0A95570E3AEDE41E938F4AF84D195458402829BD27759D3A429153A0A8666011A023EC50CFDF765C55ECF05426B872B95FCF281DB662DD8F1689D08EE83BB32241B29765A1BE2D8C9E5342789DA439E7D94A4E6730741182DF1E61E18E5B820D190E46FA461EE4FAF5E797290D3458FE4BA805750AD85679A167718FDC1B35B07645D9E82194659FA4D524327600CBF69E19A76944EE7 -MD = 05692E46A953AE4A495773C87C6CCCA2D76FFABF559EF20D24079A54 -Len = 23783 -Msg = 404515999468CD20AEC818BCC70BB19B1CAA1E539B62040951CD329C273BF25F6634B0F39A72C26367EB98B9F7C357909762497996DB4B581EBDF19158FDA1DFF68D06C0C16B9092879754F007A27279A08B99F306008EC05695FD7552ECB131123E24ED96CD591947D617ACD17C7E11CE781437173444009FEDE11488B9B0C0F7F3A74E49E98EA6A2B02EBCE809299817E9419E719EA75EFB38E4429776F49857CE30287C49E3914229A13A4E102BBF6AB58C97BA71A9E003BECFCF82422498858D8D1C1186503703EE269123998AA8EBCA7C141849D92B0894E955858029390FB899E023A26C7041A80375CB3BE569610BABEB99E8254216CAF6E818CBE6B017102FEDBF7D7E98549D70AD0D2FB3B7C902C12B2E619A4BE80E84320E3CA8F0A82EFB4EB43A7C515837C75A12902E734F2BB6A6C1F5610F604A0137CDF2F5FA4AFEE58025B1DF442A11EC37152129F88D81B2ED3E5A31B9ED9921CCC8CBB33C20A465737B0897E212F7E8415D1595D6B0037C86B7DA39C68BD8164C538DA1B513365552248326D49907F21745AA25A4A851C83199FFA1C162997BB2CC221BCBFA238743A924F3B6539F9CC0525DECB667F3F1E39A823E85AEBF8A367C1EA2E458C8DE45A72B6CAE6C944C2C166CDF362EFD66636050E77F88C3B1E75964F426FE50EE87AEE27DC79604CA4140AC85FAC39B76C0A009BBFAA971282099D60C02C3BFB066EDCE475D4678888765CAD7C108E15EE428D0C2FBAB241C7F9600D692E700186C537418EBE4F42D86BC8BCBB55A7007770EA559A80FBE6ABCAEF753D9EEFD76B824BAE769006C338CDD14393FB9C0ACC41B2E06D317F9A803CA4A8D6CAB04445EAF0391453D3D507B2FA668D5BD30DE91198FAF71621A42D24F7002767C54D663EEC8662F4593EB1088331191225429230F22FD729900189B6104C2FDC4B029F5B72E087E4E33FD303EA2D71784FC8BC35EFF68BF38E48361F37DF529F16D22B1C003858EFEFE007D6F31B4E1B52AC9E0D75727630C2CB9CFC0A69275945E1948CC2AEF4A6ADFF16E7A3AE28C16628A3637EB36C7F5D7F2BC5E262F3812540DFA74D9F567CD694A71939834B6E38B4A3B5CE1500B5DBD740A557A4F26148A684D176A3F0FB8FE8CC4DB72A62B02AE53DFABC88DA03C203A10363CA5655CEC3DC2B6360F424AF05FB07D2CCF0939B2982EB186D85AFF02CB58B17C5D62A8D1DF516412938218204B35D98DFF9CCA936F8C68B9B951F838D6A01C84C42B52DCF5868C626DAE49B27B02B2CAAE9E9CA607503E03861BD72DC1E46C86893AEA7055B811B86A3767B13ACD32214B74A6CBF4BC33800BCBAD743901822866B9EF4010D8419824538E47AB85B19A0092D98E7DB8A6600F1051C6E40165DB0A13285541BBF78FDC6A4548C34CBDD5389200CDA03300CDAF289DBEF9511315B67794169F3709E28F0B3707414B130882F7303D0B9646B0E19A8E946C7E6D2B165BFE6AD6FFB1E478989747A4059DC6D6017A2B511DB4CFFCF4887B7A99625854FEBD78E1D3B4780B8898E7B351B0AF2C04FAD5CE35852B1CD174A9992548F6BE1495274AE97AE64CAB986B879D7525FF8F5E31BA5A853600F64775438A41B5D9C3C858F1899C91CA7F2E2168D0B73808E3FE440BF3E6A98CB56EB1B120EBAF6E50DD8F48EC1CF0F754F1F30CEE4DE301D6135A4C34E0F2B4564E74729B244604FB09BD5E4336DF3FE3E28E24790C853A6EA0B83F6DD17BF0C8A901A511267D8F5C609ECC0A4A9B39624B1C7415D6D9A62C7A9D84E700CB6FAEEB49BDC364C7565F57B21CD8C14CAB16CB36A76B20F75191B0F8BD7B586938A98FFF344CA2F36EBB5A337AC2D5072B0B49C2B8CEA8788444F2540E7244EF9208DFE621FDD230B1A14907B5FF29B1170632DDEBFF87894F8E549207FF55CCFD181BA8D9B14B9BBC82B5E59F8B366F72B651DA22614C502312ED439A19BB51FCE0783DD8790293AA87E59F61C6B9A86E71AE66C6DF7D87EB868CC8F3455AFFBDBE3CA3C437EFDBD410BB437C9845418764F6D087D9D940E566386B1777FB035C2A6D9DF7365B26CC3F8A32D891D9B9EBAD05E45772AE1C4190A14532AEC8271456ADFA1DAEE962B372FCF804DDF672E751DF96DFE65C53C181388795D48D75114DBAFD356EBF0BE529794167ED6AD52831BB61F9BD2FD741A4B5507EABB90FB6A45E47CBBEF68CFE47A5675D084AD2C0C7B63053DB41A8E8BEDE6114C0C416F48946C045386FAC3F84BEE35F32459F1DE0127ED2D687C4BE162184775FA9D5212F4E7CFDF616AF6668CED5B237749CC1D817CCB75DEB0595DB56346EDAC76DE1916BBC324DA4708E74813BAF0D346C3966F28263760B63941F94A419A7D8E7EDF5D3A51D47FB03A33F4978C8985FBD9EA969F6299CB217487BDB0D728335A521405DFC417F7AA999AB2266495E988E3E00E610DEAD9DCD7FEA8A8CE71B13D957EB6D0A6BA8288DA9B32A396D4C1BF3BCBA7F2FA0F0EABD7DE8EC6FB50D804233EDA16A36546202C579840DAADB861B8A9405532C8DAE5CB696794ABD1F990B6C4F889C1A9FFA4EEB3542D8A73341799B0A2C3B9E284F29213FEC33AD6FB7E0277441181C9FA0BCB5E7BC0CEC4A03FF2E51107A33ACB9C0D8E51A9DCE36E584B119E3C79C23BD3D9BB7556A7840553130AAB9C178CCDC215F06EDE4D3751FD7388B01C17B303DEBE512E4DE22618A0B66E80873E6B086BC0DF20B56F96D13478C34091364C6F9D9597A9CCEF1C72B95A65D01669006E2F8FB97D4561A1881303E68C5F367D72ADC49D03F0DB9FFD435745B7E0D0EA98438230569C6601016A2686D6789A992EBF7186D913CBBD29189529FA0F4EB549528AA9589BC0F394A50FA3CBBC3049F96AB91C0F993496EEEA54DE3B06AD17A813D50CF3E1D28B25065A2ED61E8B2FEB2454B90B7C144007DEBFEAD3739633301092BB7C662080EF992BB95F74A5C3C47F574DD279DD96AB24DC144E472E0A30FB34812C111B96C07F7707473514F82BBEEFB3ACC310E5086CEE663E9ED1607082CC01C04F2CAC327AEFD5111C90F5EA2C075AFE28C1B5B6A4BDED83AFFD651B73737434A9B53BE13234A843AA865F1F4161E9438D0026A8C44E1D4E41BA94528E92A3E6CBBAC7598438274891C99E8E4D87F97EE0F532E58B6EC4C6E48DD47ADF40DB0A038A2C29DD4977E0ADC1CCBA8AB1B60BF4FCA2ADB706165C5389C8F05F9B09F7FFC3F587B0C4DF3174027E36467467A592AD2A53149EB96593460EB284585F315298DBED05F73CF7CD5E64F581AF67F94A5EEE36628ABAFC91CD50828B6C43334BCB70BD20ADF91B5A2BB7814DD61BFC1C548948D6DCC43645B9BDBE5F0778065297016C66F15320B9D9572BBA1AD5636BA2B0272A749D4268A211244BCD38E6C7FD1964D34380D3D801F3029C9A30A12294EB2962032FA516EBFA3E92BFB059968DF865CBC6ACE929D1D598E6A4F57D1A29F42EC0C58C3AE824DE49FED14C124FB85C30155EF0B6D841B2767C28B7822FBF82232CEBCB7BD7ACDEECD46E5F1FC28652B3142E04204E8A76710C002AE4B2386208F490446A582281D6444CA253A175E1134132E2B233B268A1819FF241C7C582D8DFD79AD3A333C9D947CB9769C12F7C0C94D0242DF0297719CABA77D0C1F007639309B9C5E23295ABD0233CC6C0F4005679F36062B5F3C4F840BD7E78E4BF4456F46E79CFE44856F4E01DF337C7D3BD36A73F4E85CE000CB2466B8ADBB923B416D26F240931C409A97F63ED5C698622B57480AA7DC689AFDADA5D6C914A3FA3989FD2B38F82F085D69D2C68969EA43DE33AB5F3E41D3E6F2F6DC8D3BCFB8F5D7B20F63CC7D118410CE5E2725FF855322611F9FC40ADAEB4A96C965356F6AEC535379591FB0C9744DF5DEAE7C2533EA2E4E35C834ADF7565F6A476854470416481D553F67563C09CB2E8282069626B61FFEBFBE30AD6DB90391A145616E058C1F400F4B9D9DD686E0255E6137BA1FA1AD9236CB8FF8E5D45AADFC30C4273859BC289099D9B5FD0E52772F9DCFB3D324F4ED2F8FFC8AE8A42B50D869CE14733047CDDF8424E54BB382DD7ACA1BFEBB9CD9B3618037C27C6565FE13CDE4E08E1E62B5C82BA8CC8CC8D010BBC1C0EAC69F1635EB8F9F6B484CD25C9D9B3E57F1DC1E4E88C57262BBC47BAD1E8E04FCD635739AE11C24CFF2C4A41A -MD = 9D72D0A5EE2587AD1B7EF58472427EC4ECA2C6BFEB29CE1E31F7E322 -Len = 23846 -Msg = F43DCA456B0C99CEE5F521C491485674A1FC566DBCF67791C4A54C1710B3170B0A5A5686ED61A16F58E2A0B8CD8748755DF9308BBA9CE455CBDBD8949D36A35AE08B958B0AD50F9AD482CE8FF899D0343511ABB3BC187AA8E6CC78B9C61EBA9F2A928E2C7069C000B452B6D461EED5D9A3FD5A5C5C982357830580D316F1F9C38839BAEE9D593A10E7E5381617193C959C3344C361022A95B58FC45087DCDDC4C548B664C5F7EB77EA3AE18103D5CC860B165C8677F958B3495F050A4BBEA84B859DF99569184ADBDE162379500FB5A5E82D7DE287C71AD54EF7E762C22ECB09042F8952586C27FA5BB35A41E1C9ACBBFA220BC3ADF74EA8368043227807936ED52C46FE969710FC79DFE89E20F13442B92043E349F2DBC2FF66A3F934C1F4640F9BA8B23C53DA47F2471053F1F41A9B4C5B2EA3804939074AB5A7E37CE61DF42872E9DBEF35FA20CCB40054431EBA382DC46D700628984EFD30AE9C681DD794E70749E2E1F186E634271A97E97007712614121F998CCF238166CF71362898C712B0C49D3679A28E473050D4B2A5DBE9A7B2F5FC6E6543121BBA99C55A210EBB9DFEB72C1D3139A0C14BFF874B175FA21E14DEDD0837E07A698663A1446C7D0F7FA26FC05620939DFA2EF318C9297F7C96E65D9F27A8992C79F42039031EEAB4E33CC5AD1536AA9A0B16C6AA56B857A16DE7A9DE8D8B3F4EFD24A51D1D2524A9EF92E8A84C927A31E7E8EAAA3D980B58209DB70F15E1DF460E05996CDDB460C30F9631D5154E63FF2D010302BC91A3F762E8D019C2775E7220507FAF4DEB11285F439607D3B874FC2063AF42391A67B51738CB5827556D8D5233571325A2BE03E3FCDD7EA70974AFAAA0B9E1E9BDD393742E0D7AC657005DE102F83E562A8E82BA6B6B6802C6E45F48E6C9278DAE0B05E4182A190885CA91FE986D125F5A373E4F360504AB270C0C110FBD3AA03AE7547679351C38C227FAADDAD59CC56E0361BE71369752B9DB6A851738C0E7BD6EA96A3777EC4137DC079FBED012074823ACB780DCEF22399E18187FDDAFC49508B9C7664A292892F0033E7C6FAA801CF9642AFC5CAA080D838AE7AE9BFCDE106CF1C6EB967D64E19846C57AF20AC4B5FAA2B3A50A405688BC0AFB7D0F5ABF10E3290A58CB27FB0060099DF8DDA27F494895AC0F88ECBBEA5AE2BE250F064232AFC08B0669EA621DD27F5A555ABF27C728D0A7BDDEEADDB5D33B4E0774E9B117EE23473298033E3A6ECD8B5E2C8BEFC7BCE02D4AC8C87C3146E3D6B2C03599CC9C32DCF0E5925630D43422EB4094FB6AB5014633A83BB0E75B4C2C71B873D40C0A672C65807E6CDB00C0A4BAFDA1EB7147C8E1539D1379EFC0D5C54C2F4223AB9990082E4866FB1B71C7E4771BFF864DC2C31D3298EE06B91135374E5953C1FB803FCFE9DD319D7338C716887305B26F49CB353D36B8DF73C55DB1F25D552B507AEDB9A8995FF3FFE1EE239B3A831C9051DD7FD912FAAD8B54E3CF371CA8C1A5638CB67EB5FA11AD05B2128AA19D57C8A3F84D527293172C08BDBDCDA246FE3E523B2AB50F799FEF5CE5F822F3D0AEAC41C61CA0598E9EC2ACC66E256FF9BBD878600AA96BD40CDE8D5C582A4F62AA72D0F4AC55AC5C326810FCD4BAD6849385A1B8EAA8192BC79CBF956AE92701CC9F83ACA1EFD334EB65329F0E26A885725608DAB02A42C90180E20112D43E0989839E98AAA9135D0BB9882B67AB44F34FC4DC8B05AC3B261453A940721DC8D5022B70774F5756C39A3D2DD7DF9A84DD4A487DBDB560FE8755A0655EF48FEAB9436360DC7E19C6FEFB2F246E71F752997B00CC65315BDC29A2CDA9B08CE8D69C9BFD3105102C5A538073973A9DCAC6FEF1F735E1B2E985CD3DE6DA00195F266AA957DD76DED42983C6F25F0270682D13BE11B198CE1EDB70357454A7B9D4DC6E5BF20223F95FCE2026D609ACF17D2B4D3E8127F7FB598465BD53A39F485D06040887B7B8976EF7FC0D91D255B62193D4BB57860859FC2842FEDC8D8A6F915FB77CD69518BBA1F993818988F92076B022656E14F89BCAA101DFA472E5F8D8887AFCC5F2A750719970E85E0CCA73D9835B4144F2A1954FD5FAC0EADDC9DC8021D290D7D68A97E871390657AE27DAE5FDB72EBE02BB745B80CB6D1370A2C4015F0AB9907C29748AAFFA0EE397759A1126DEB6FBED9F5FDC6C92DB35C928AB537C629018DD48D1E6D2A753A46013E8873267776DACF23A69D7D6265FA7546DED210937333DF1607740905BEA93FD8AA7047C22087E2B5CB7C6F9A6C7AD30C7E6DA5D7F7351B625058D728B611641149CD6730853946BD334221EAFEE56EEF1EF3E7A8E579AE2C49A63F899E7B64126FC4C571ED0C25BD1C3A9802AD2F88989D396788AB3BE75CEE09030098A9E913E667C41396927482FCCC0FCCC886962694552D6EB3CE87BE60FBF847F102166DC00B0C27188695CCB46CCFBAB3F7E5D26C0A8CCBE1BC32A396CB0DD463AB058B78815EB0D2DB4B4B9CC8C376DA6FBE3143CFA74F4B81D20845C316045CE1FBDBE23C3BC5C6DFE2EFB4E2512933C340E7CCBD1A41DA152A6B5D4CE627269ACF791A6B017C4ECE26DC8C6C50AC183FB7D4F84DDAD63685ADDFEB55B3062FA1A67777DAEA3F021E74AAAA468E80F54182FB839A0D56B11BDD743947C2D9B2F97660072CDF1F73DEF8C35C61C3E3F60E2B6944C03F931A241BF8191C74CE5459DEF1503BCFEFD552A6606B976404CEB7DC6C076BDC4B44FB361151EA5E3FA72E71763CA45D907007EAB1BE3A33C9615019AF53E7CDE0CFCBD186CB5033EFE35712AE409534E5D449171F1DB0C3AFE187A78F75E4150C971F2B09B732AAB0861B7B27239C13223F31696B0F10849F2189BCB755CC5BF4ED8E9E4BC3F9A3DBBFCCC1560BD57C2570F2B6A6E1A1D75BF088ADF7683BCB219D13DF6852698F9D86628EBBFAD6F1864FDAC3425013772EEFED4884DEF1FF0D36096CD0623D4F904A82BE8EACE1B3E6D22675C0BCB2CFB8E1EB79088C4533EC5506BA2C63EDBEFE6C62D98E7EEFBE93186F6B22706ED8279A92731482F54F2A090B7FD06F4A1A2E92C0A5B944E6AA23BC50FD03BF06EAF6EF918DD01B7E1AE88774A8D3331F58C6DDFEDB820A4D89F3D28090A26FFA2C1DD7F055521E2B108D5DA7C1CB5B0D0D4F8B468F2912E7181555A3DC1F795BEA8AC8FA895883BD53E648151C03C7D060C8FF4239E1D83A6DA50855B23C2157D2F7B71C34613AF0741B11466B1F6CD0531EFF6C40136563188DDD43A190EBF6B87AE5F87CF1BDEA707A6DBFDE219636998AD9FD88B48AE392B85664F0AA78B98C628E41DB180535C2571116A2FAB76953EC8C8F8FB0C389E4CFEE2686FA5E145042C4B237067D0733943CF2CA8B406F080F83D2B08CA29E292B677ECABF3FDD9D96EDDFE5A5EC86210C5522F1F5944A456B6B44020378119F2E42C7D395465DC29F5E148B9B6F4619C05913DEA44082CF3B3A2A38CA5B82B3A88FE3688D28C7874304D5BC325082346D88AF2EE521F1710094D93687A6D9E11AF06E91FCDFA8B60AC7C849BE3848BC1390CE4E668F288A7F9481B002AEBCFD72A3E977DBBD79D871C27D01392387BAE37CEC1CF2CA733EE1D5F88E5D309C11542FE1BC22595753F35F02A6BCAC1DB64E62EE0D43B44C0D25385EAABEEBDA939915DE4A481EB4A331357D968DBA6F954287057BCA62C00C5AD7D457D610D8B6EDDA3BE513E6CCFFEB4F1B28DC7A0A45D30B14A28EE65571119D0B1E5AF5B27B81E78FB4C65A4DEDC26B429FAAA1CC9B81FC7F7EAE67F1A55B9BCD7BD3B30FCB46F4DCF0D86E5273151F798167AF3C33C78039632EDBFB4B33D942D83E5F3E82C8BF0385C90A3D1B21EF2596EE5A4E066C15AEEEFB5FA15699F31EE7D5C3341072394548335A026A26639CF3ED8179BA866333C7F8349CDC8215E1AE28F746A1CBC4FF46B28746CD4C080E0E2DBAC75AC43AD1C2E9AC9F53780CCE905392EE6C77DA62D08959CB69A55E658C9529B3B25B79E1D290E6B5350CE41AFFAE0946285FB68DFA245E167B3BC9AD43D0E5E515EBE8F353BAC65333573413897C0F043FB52B209894046EE89BDEBE44938AF8D08A626B875D1A0B875E844495C1EC2626CF58F3547D14108C59254FF7F88D6CC4393D932FA63104D93E3FA7A8C19D5A23C2AD242560394FC8409CA118593785A7A6BF772EB1AB4803AFC -MD = D15496C95C26CBCDC07183A9F68F1379D8EAB925D08D0796D08C81F3 -Len = 23909 -Msg = B2676469924B44F5029755FB49C9C67C99DBAB3DD24E9FD864264F6363CFC07857AAA9437DD770546C761149D5B782CB4322EE81AC82C87DE0EB388681ADC6739C8636DF062DCF76E052CCBB9DA4E731059480F0885045815B418E694372186004189CD0E51FC2CD55B4A73DF6879F5C8CE4AFA791AABAE4C468AA3254F5D59D5BB1991EEBD951C8F2A8055BB395E65AC6AEED8CF9CEDD3798EEB57012096DC384A37BF9F794986637FDA622AB66F7BAD326041E73A2E5221E2FED6E9D31A1E02BDD62C406F1518B02B663586B66957D16CC8E1F2BF6BB865B555112FEF56E36A59B5F38A40EE2C37162855AFA9F4A1A63B013D5D2762503CC3D32BDEEAE4B8EF2F3CBF8F02621DC95483040A31A69EA44C30DD2FEA472B2CE200CCBD2A24CC823D326DEBE1D31F0233844CCFCAE19F0E011AE99B41BCB97450FEC52B09DAD16CB63FFCBFB20AF16393B3EE791475EA7D60EB1AC0C449D8FDC017C31CAC2748F4CA2FFF91E6C5207958AE51DCB061A1C072B3920CB506C4F1058305026175795DD4160FF9A1E6CA2A27709F8D1805DF62438076FB59E30039E89FA329809F69AE3F8ED4451B47B2700F33078059F294AA3D2A300C8A14D2EB322A64FD7110FAD0EA3DD3B3049253D8C63046FCB4C012EA2DD47E7ED26E1071852AAA878089204EB48B912FB85BA8FEFB6C27E9699B3F80FF30192B749B2D550731892DBB397B233ED0AF2F35482FF5B7C0451979C9DE44CC4E237706DACE7C9D94A00C5D7C09F6A81E43D9E26D77CFE89DC30F3AF01819C9E75E57D055284E6F23CF2656726E7CC338C1707618E487CF2D0131CB1F1C84F01CF2BBE54453ADC8B659A90B6913671D3D91EF23ACA698FC54037F3D0AAD8127A224656D543AB34320F2AF51AF40AA7A58CD043F54EFDB4C26302D36E58656959E9D1425173427522F79A1257C0FDAD859E8F422121788481B8146DF0146917F4934908C96627E36F6FFC2DC633ABFDA14212171715EAABD3618B2E284CCF48DBDFFFF908086A1466088686EDBB641E459C1C7E79FED07CC1F1F63D6BBA2F035AD6B8AAB99FE29E4C6234E4D6AFDEF538DF8E5E31049642519478EA0A68FCEDF52E6BF82B7D2CEB62C6B0BD0D40E4D86D582373D755B2B75503ADE1BFFD9DB6B23778379A6F1E50DB4E60968F852BFA62846623AE1F6721EF4E20CCE36238D571CC34E6E98FFDC7222632DD3B0E99C61CFD793C00289FC264AA5F304DCE30B2143576E5FCF6BE33AE771037C5867CA236F726F3B232D76E90A621EB52D370029F373BA6583CA08E09F30461310A2A39FB16389F2F04031168EE58D917BF7C79CDF2307873ED3BE73ECC58280E5DC8FE4C57E6962C39688C08BD5FA45E6D0B805FE011BE48EA432F3709AC33BADD43CE40E8C10A1250CD2271C9224573B21B7D361F21555668E97FD086F23DB93AD86202238E85872CCA10C1502698C68F5CDB144E38331BB48818FE02B65AF4B936B8AD9FB3661EE56C0C502B328653AEE9B9E4AC6CB86232B469CF9A4DC5792920594245E95B8BF4B3144CF4BB923FD88639A1049293418D1EF32652373530FDC6AA42785554BA3CA9319BAFBC04B13EA7F162BEAA2759C4BEB525B345EBFD84847676D276C65452FF3F3B23F77A2639B4784BD6C8D9B5987746F2B3A4D3606A8FAA2A752A0D4FAF6B245D2351EB0CDE1089B111D6809A0BDBE717BBB3D848693104FD1C02A74428FE48C69EF896CD7208906DCF1CF835787A392D83DCCBE4576FD33BA8FA8B0E3EFCEBA529F2BD93EA8A9B9130FBE46F03CBA008BC8F0BACAF5102E0BAF3A51E43582118461C5879A1341FEF6E1DA44A092710FC8BAE4A3A5D16499A35D69E2BC6A93462F8ACC9F7AD6A994A5BBC35D0166279EB2023D6B1634BD8419F3234E37CEC2F087E63C9B1BA7C8FDF59CEC639EC1D4F5EFA4E55DDC33EE87F8A2758F1337189740F98543A6C8FA49AD23677946F7B58A6504538D23CFDD219A62CCFF9B96153415B18C8AD4743896FE8FA9A697EE8D9A63FD5CF626B6B6F740D7F8AEA0F1EAF4C7CCF6CA5FAFE136F49CF55ADEDC0F0F6D7C5E08349D6BBD6D0FA97C1AED72C6F735F6BF65E5F9B16FCA377157DFB7037C8C760F52026B8652FDC6105C3D763E11A13BF3D0BE23A69EE494F0E0C694E288D9FECE26518B7E17A52494E705B885FE9798848F2E2131E3C70493A964039EAEDF4BAC36242CAC696F882BBF32541FBC7EAC9FDCA1B84D2D4AD6130F9835E1DBCB15C412D191E58628271BF2FD250146271D7642C7943EB535D84A45DADE6EFA9D4C65A99E9FC6FEAF95490EFDCF4823F12822211D59378C4720AC6ECEA5CA3C723D506CB813053D42DD5B1B0794DE0CAAC1926168F17EA35D453D71DBEF0D55B684A6637717C363CC90FF3817FFAAF2DDFCE7C6A647F8B59E926343FFB806B18C6DD41EDB4872DD0333CD831F77AF5497DA9572E0870C1A045CFD11F723D7F138F43C45D57D1A1E1DD792BFD78B52E87F27B82262FA87F208976EB7CC2C4B7D06936CD217E49D8A0DC8E8D148421E49EB89FAE4E137A588BF6EB177BA1CEDD809FB97A4FC13B1004B8ABCF0DA09CBD0790FD847F4A0C45A3E86B0502C2403CC7AD6F8CAAE955821A11993DA3A37DF439C36A5372E963DED724788605750BAE0EF2E8823250AE678492AA7142800F8842F172B902D53D3354A7AC76ABE5D8FC0F952C1069AD55605C5056435DC2B1E8AD8275F2DAA54B413DDF14975B4F40268595D64C4D18261EA942E0A6405BC5F0C7211A01245147650ED6E7AB05BA91C3D972829D02896A49E206F306370A20639E3C0F7E002F2C55ABF8E0C603E0999C78871FCC6806F1F1C730344FDF4903DBE5197078EE1D74D828DBF20095937C43462046F37728940136DEE5A1527D7F5E482E1F714798E1A859EF1CEE8E504E69499CF74A44B66FA45C5F91E5B9CDF5C943D0417E68589BB95951252CC0448DE9E73EDCFD450B9BC904D07E4D4AFB6B4D30AE4A029B7B21B19CA1E1463E71B14727CFC4BB777487BE6CD6F39447A46EA77154B5757D475C6E17B84BE329BA88C0EBBD234E61E1191BEDA7E17694BE8AA5C9DEE966E3F8B39C7F10AB18D47EC1FC76D28642729730F57DC040015EC7AE7ABF28BC2D2EB9BEBC10B2CD75276CC6CA10A78361D3F305B32C9A982B543DD1EDDA944D1ACEDEEBF80739A864F041BC43E0C06B785D7B292F62D5A6BE897616EEAF3E3681EEA0C22214C92CA3814C1379CCA095D46443CEC84349697DC28C6E873F61770A53323C9AB247E0CA600250FBF02A234D016DBC06A48369E14B6E2D56C30BF6CD4A80EC798DA2A91752FFAD0A7A153DC15C5B63C47C54201FFB1E90772DDF0A2335FF5BA9DC61382F35241D0DC2A31D57625CD6655E89FC0385D835213DCB701DF8DBBAE2D35E6AED25C8B5ACDCA0CD0237A2B9805C828193009573B2A3D25E86087C66CA96149AF2B3B53977653D1B1DF614287B3C0DDF8E4059F60007497D005340BB05F798B2E6E3D807C9465830F10FB986CADEF0E295434B9FFC03722B5757E68DD9CFFED9BD70E7682AC0D53D2770140FEDC003C6D29C27EE2D6D9EDEEC0C5A36E2EF81D13C7A28467844F696537A26F2BA959B5FD08D17392C3A2402980E5902E6FD7BAA62FA1446BAD6BFCA7924A92B53DCCB037DF90309190513D5A819A18DD0998533944468A1AB140797C7F9E6FFF0F81854FBFE08724004CCA987B93F5B5563B48CE469052421DFA467C5B1D84AEAF752D9CAC57A25DED5AB8DAEA4EEE6659EEF2105AB241EAD3446A4929072181DFF1967B9909848E8EAD18CD715A4FD9D64E4D289EDE77FAFB65180BC0EB09B5FCEE1EFD4063E2E73DA2F2B61A0D3427A73EC4CB1B68FB11A63D58E817B4D21FC3A158DE96075547B25C7D6B29D04487EFE162A538D0D823E5D4F3FC4B40B9D51825220203F9D4887E1593A0CB192DE9E00B539163413CFFEBD21D945787F36623CAE594646EAEBEA1A6A11C68B9049CC8933A28DFE85C2F3E9B476ECCCFFA467BDE937188901EB1113ED1B31653A4388F08783F7E8D9DD766F578359CC1DD7A17EDFDB701B492C87EDA0092261F968BA40D8001B7B5AC387730A24737C51E037A59125AAD3509C7E6A60970E273D2B02CE278D9141C67419AD201F5E2AA165D71FDC647B2105E072BCCE5D4727215C0DE94408ECC70B01D30B7833AF33D059D72D105EF6E2BD3938E557C0 -MD = 4C5330CFE46210EE5D5B9BF0481D64F1D7B6A5ECC2DD9DAC730A893E -Len = 23972 -Msg = A65AF7EDF8580B8C9F1B11B47A6FDDBCBFFC89F2DEE601CA333B7649405266FAFA5CB128D96035C617D658D6CF8975FD13AA05EFDF309D1B1FDD2FB6F0C6C0B55817754263E2D906BBC37D17E3CC7FA9031C80D6EDCD35BA93E37B7977190F24C7B37A9A680DA7193D7B09AEC405628ED357BC572B7163FA1D630D45AB02E881B8F0DEAFB809DD0E1E2F64D346381C3346ED0B9A2C6C8B944EE2E71A5C75E2F9587E62E05B7AFDC945DD6567D0E175A6CA133AB3B083346B396EF0BEE6FA3289C1D463D73AF2D04151BD588C2B4CAF8BA2B5F1E2B0BF4F384BC28D55BA43352F2ABD24C74CB97BA212F051795A3B10D1599939B3E9D865AA767BEFF0DF7E33386B1EF1199236C637581FEBB2B84E2B4195D8632C04400DCD263AAC16AD8B9A302D75E611BC2AC02F2B47AAD4DED86876509794862103B006AA2D35707D5A801FD4AA54876E7392E5AB1B8119E1C08B699849BB38A2E2452097DB488E70AAD50BB06D5F730AFE2015FE47E14FA942A27961538019AD3CA2637FC088357634F92D791931BFE2A7C509D7FA26CFEFD4A6F9941943F7B93571F6689A345D3A586BA270AD83C25D198DDA873479347071EC54C00DF82B438B4858FA89FC209B336A1C31D589097F6635B083B8A36861BAFFD2150E01E353B5888C5E74F40A4B207DD761D4FF4381DACFB4E2C7DA3A36BFA960B5761D3CDCB283CD9FE4ED6905AF95B9E1397706E4B02A1468C0E1085BBB91D61F915F2F02081CF327664EB56E480705BFBCCAABFBD6821FFB5CA161891657A129CDCE0FFA2180E15E02CE1C79966D6A21FFC68A75D1C00BDE4C95E1C27BAB8B4E63CFFD24ED814C45FB024CD3A91EE16F697D22D4CDCBE710CF9C8F13EE5E512C3C34E3EB983D6B4AA188E8173CFFAFB01FC75C54EC2A01E6ED0FD76241C34AC540FABFC338BDA706E9325CB6E10F07059D167AFC2464A39125CC069D3CA153E5FA6E49D6EF39DE2A38C1B143F12390BC8854256E9E7DA10E89CD7EB264728A98008EA96E3C9057839A24A95B6E5A9471054503B87D3D79089FA613B4A4BC6BF2D6DDA2606BD788A0DBA683F44AA5A34F87CE2172D0823EF8FECA679E00961A2C907F02A73DFFCEC4A451E4BA90A82E01312FFA1A64B2CA05A15FA7394069ACF4F1991854A19D7D94054567473481DFD9C3466A4D4E8C9569967195F01B0F180F97DB0AF34E4762BE730B15747EC5D688983F3A89A91E4A3CA1B605A5BFF687DCBB5DF9E8D5B031B8C438EFDD98FACBBA63FE534660495626D0EA113BEC3BD278644AF43A435CB8E890A3F9EBF7A69B713CAC11EEF203C0115F35F8EE7BDAF9EF1DC2482777085AC2DB3F287515E69334372F9E0948204A6FB330B9C82582962F58D43392D87189BD9D38C2171812E0574A89E8E927D9D6D3F1814AB1E7CEBE85B89288DD30D7BA55731301843C52C7DF86FF0DC3E198EA3B7A174F7FFD645C164CC607F8396FCF849B1E8B1D154CD601D2FB78E558B8C35529E897A352C4FC713C1DC19029218EDEE961A4B9DD04FA04B61E1DFE8E6128E71651708CC99EE2F5EB6760E5B11D0744DF34AEE23A9C221BF5E3D34C0C27BBB53765D3D24B3B6E50189D6A660616F6585B0189029F396FF96AF33B86BE136FACB0010600D2727277CAA0F9BEFF954E278ABE4BC577435B7253D753B71E219F1DF5465999B9344609CDFD86ACE2B7355D0F25B68700F056BD4379D3E51DCB9612A79BEB1E09BC7B051687E6673DBF12A72F05C351F2CEBF8E3367EFDF5F35E2D02A0F315AB2477DB06AAEBA38641FF3A797DF03E3ABB37A48D58D7A0493F15EA0BBA7C1F2F9BF416F6DF8EF9867370C80D029C4DB4E68C6EFA3512FE1E86DB9AA2B1E7C59998E515CD25031BD6334C60D7778EBAD90A29412AEA08769E4DC3FE804C8E7A1C02350F0567F81E1BCB4C6A64D343FEBE6FB026CDFADB94D7F1D21954059DD5F41554BEACA944FBF95443BF1E0C9B1A52AAD927156CEACA82271F6FDAEBB139157A51564C52E559BEA88C0C7C55463BCCC5E6C215BA389C1A79B4A434CF3338822D03B42D0E3DB0E96844362FE3144EE77FEAEE5713A72B3F77F7AD0F0FC4EE3D27460267A86279B2D4A14FDD37C8F7B339250B3DE4FB408A27FDE4CFA444E406AB83CD872740C16293BFEC6026D9F49E29DCE05817327FE25476DF9EBC3C9D566FE876414972704D98465139B38ADA3712F304EBEA2B84E1DD3C686230E35856E6B57B3FFFF09BA02B1664AF7E944C0CAD66CC28A09B4D9A9426C8A95A3FCEA9957AD37EAF3E7760E089695CA321A28D8C6CDE3A677E3BDA5046D8B417DD3E4CD21DAE415885233981460A5036518C156E6DB48AC7229B94C0CAAD305D66AAB73C8E6F7AF7D4B9F39D24BB5FCC51F2AE584D89879495752768A2845AD2E829A8E28D99D42B5D9C55C15AEF04FC969DC5B680B7563D17FA8F7D26D06CA683DB8CFC9CDAB8A6072B138DD9CB4B7799EC2CB157A63A5D36B90ED3254680588C4713A882FA11EFA3DC01073283F3033D56F3185E5D6226B69D2D86B7070C54627493A17CF1D74BB352B35FCC5759820A47119CCBDCF06D8A013DCC3A2E6BC48A01AFCE7EA00C745F33904B336758CF2E20793A900AA4A7F29BDE2D9EE08F0DAABD133CC45EC49F494A3C1F011109A2FF5FE88A6EE250E16DBE4E4FD045C34A2E6EE40C36510FB525A358B856EFBF1732B0E0FDC4663106FB814CC3C9CF60D1D411752F6CACE2BE171FC257635FCF5AE8E604C7F248CD3E793D78B385C701589958B42354BCE7C27999AF445E166E74C1BF4209C6FCAE28E9E9251CE0E304E38A5CFA85D10B7C0E1D481F020DF4324993DBFE6ACA549BAF80A2B4ADF3FB6B9A239913D0EBFEB3C3F05886F5F97D08A6166C0DCC9C960B38F7D1747264498B41B33865F273B9D7B5C125E805E6F6AB9914E32010ECF8891F81EB013D77FC4303A06A1EDC4FE5A63E94F143590E97D34794D68AD08218F859FFC7BF05EA2AFCD2A08C436C9095C3CB6EAE4A321AD886FED642137904D7031F4F85583161CB5C143FFB8D0BFE340A027BF82792EA3CBB45952BCAFDA50B00F4EBD2C3E0F63CE367F0C23159646098F17DD40315999039F9DBBB44CA5781177521374C5B1834CDCF336D600925A77616F5E9B4B7E9AB4EA0B1FB180507BA9FB35D34066984BC7A88CF2FA05ED55ACCE412BB35D24009A0F75C379B53C64C9422D8419792D57BF36210430A9B655E1C795C706BF9A597981E967D8B940712978C238E551DD5A737A52C7F980C8AC2CD209981F20685DC9341C28CA84B7AD434AF94CCA12C5028322F43BED9F19C38D15CD98DD8015CD6933ACB4458DA73AD0ED52161B426D47417727DF8DE5B3ABA5D82B881FACA0FA39ED6DF8702B730A273A96D86CABAB1CF82739447D413288474E4311C29D8A20E23607836A4D56AADD2013842E15D5EFCE0F3EA5032DD960F9B6BFAC37DE78D7B15AD3B285FD8321E693DF09C4198A02F37939B269F80DE40A38E4E2042190066FD29870E67AB5FA2F9233C42A9E8C7ACB113861072107A8D31BE9DD31D6F59BC01C7F6190EB054D6F033202BED5DBAA348A340E8289F19EA1C45D455300A15173B55D423838289F764F748890988084A30174CC16B2EC1BA5E2B6858BF080136AAF7DDF6E7CB65336C66EEE547D042332247F01272525A4605A4FE853FA6FF66117E28569B23AA8043B64087E322AC2771FB9A26475F6E8BB54C126166344FCD49B43448B25DB83ED20BA1262273B94DA5D44C2C4F5B5EDFC6D40AC7900F758EA2C2B7A9307DBEA926EF71673710451C2447CB38149D7934AADE5545FDB186D36865810B949787EAC9EE37D7B6D800DEFEB302072D4798950E751B79F43B3B260C6F7706F08A4DA5E17E9453D772D768FA1A05F837F30B1BFD38BA0C0E58386B258E8DDF8CFCED3B2691B8DBE05514CDAAB64B87D6746938A0EF77D4525AB3CFCADF2EFDF66B98B1E23501C43191E8F6D0C67DD9295C7B821582AA3FDF175F3CD70C6EB8273506C4D8E1AB71D7752D44EA2AE4956CC826BE23A2AE7781DFD5CAB737A1AB0A61261DF46836FA1221BD5BD6FC150F51E58B92C349377C7AFC321DD3F188D0CED03E46BB32D842E15C70B6722BBEB384254A1A293F64A96FFE1651EF2C8A91CF0C1C7A9DCDAF110DB3DB82556293ECBC4D35A30FD83A2EB9C70229A241864B3685327D8F13A09627C8F6364F8E06DC6416ACF812CA5C320 -MD = 5A4D57EB0E254162572F19673BED8010C5DAFEFFE249CC184F652FD5 -Len = 24035 -Msg = A7457B77425D5141CA942C135F6CFA816E961D459EC64280E7C9037BAF8D900FB823DF0588FABD13C0482ABB23FC5709B5D1BC46750FAEED4093A77D92B4CE22AD1F373D0CD6D57557C787680D93D44A4D7DDF5B7B5EFC8A1728BA5B239FB6016136B0DB7F070971A8B8A67CC178D6C37FEE944155490A17B7FED3BAA061107CBC15CA5433DB3D9D0FCE453DA7A493C8F75BEEB9A1D39ECA80CE16E815234C5DE4C2F388E390A54AA083D77CB5281CF5992BD91A01E4E72D7F6D2A5A5AEAC67D248E91F9807224EDD0A6883E7B29A5BF574C5739DFCF59AB8383E360DE7DB4CCFB4768F2392E3E8E669C98142FB9EDD57DA243BC981B923AAB4C3AAD0B50EC44C48CA89A4E3EEC749E0BF06861CDD8C07169CB19D86F60A1D11279CFE149996F8EB894C03E8A7852F4F219BA708AACEB2BA77D6E7C59F17A41F14F3F6CB4D8AA63C4AE745863CC7458F4F3611B9250D9E4CA9F25E508F9073356A6D67533C5D0B0C3439EE5FE467BDF1271E38B4BE8AAEC8745C1777B1A0093AA8435F400466E7DDBC7D87A53424F8E5BE4BA91E083B62405DAE1493948EF2B932D6C6880B021740D8332E423013F43D3217D8715964B7C8514A8E6388A556F6E56C74C42F90F18D69B99903EF4423EA683E81FD2E3F252A8801AD13C1C639F4CBDF00E550123AF03D5731904AFBD28E4AAE43297073A732A4255FC0318CC9163BB455BD5B8A636D3B5A12992775BBF8A23AE2A1C525CF9931F1D7FF4BF26000D00ABB0F088282B721614CB6FE4DBB4E3731F64AA48C54802615FC84B7F3693F2CB8B37A0E427EB8745B9FD94F29B4CCD2808D696A14D66FAD744941A853755BB256C7DF5994D5D1C454BC97A61BE9F8434074E3EE281200085081BF36647A932C0EEDFF8D9C69425F261D0FBA8D11644CBD28B86F4889B3D0A3B162D7F3070E01D5A41442FC88DFC827F36F66828E94240C80A93D47700D12FFFAED948281E1A592439BD02FB8E0CB210E8CB2BA1554AC48B78648BFF0005BFBF3D815B83DB62FF2C5D4B6F122235A1EFDFB4FECD210FDA473B4FA003E01A33A59B940EDBF3498B3C2309AE96749210150ABF150E1DCF32E50F086C5A90AA42349EDF31A0A1F12BB4F5C49CD6DB45C0F1C114598B7403596AFBD10E3D9FFDF3BC1C9982010E41A4125C5B44A63BACF9B0F2118724DC4B6C2F5604729BC479659BF224581CEEA8C69C06816DB2FE587A79C06782EA03907CAA9F09F4D2EED50C6AC2250C2C9EDFAF764F5B5A051A774D61E07A8CA24BEB5F7B58CD3C909120BFE19566287F448EF0F312D78826F7A99368FF19A0B5AC6CEB0382CB5B95BA2389044E2E08B783D134CC6030C0727B370FF493DE7EFA5CE352EEE86A8595057BCCD8607D2F1132F614287D00F7EF0527BF0405DF2EDC579D51F300FD6D4CF32FABFF002D897B3DA826248F0957F4D5A766D6310AC8E6835FA9D6AB0A4731685BFBE8292386E9EF2DA54E0022775C0DD07A96C5CE6D49C5E0A3925753822FE53D28EC950B1A6512E3F0F5C5C883C6E571B4B73F39CD1D0A071C1CC0A3A5B29735FB158850F32587CCFE374B1AD625F521FACC0A26E309B340DE9CA8AE2AB14A7C6EE48C5AEC208C50CC1B62CDDF6D1970D1A5863FA45A5E10516C35F76266D12DC23CDCE797A7279D43D8F46FED04F9C961CE40A3349EC902E26BEDD2B2AEC628B1B72504D23F1A3C58228FAB410899D56EE7C8BE925509E993C50B1AFFAB35ECDC112ECF72A3704C6B295FCADB1454A8990A3CFA99311627379563FEE3E31B0EAD7532422B7FACC48BF31818ADC5F56AEE0FA405E890C0B49D044A3861E6CF74EFF510E91B071859882B4CD98F4CA415CA0079426951EEB83DDFFF8C89C8AB968C3522C7F44A82712F97B0690495C8CF7654AEF00BEE438912CDCA85E3A7F2AB15E320E083E2F64A3FACFC7E676F88B75B249B0BD54D9682B8B552C708D832A862152EAE1A4EC081A8FBC01860E552D2505969A7BCB152586B2B53028137DB7F750EC0252506B957A50EA79A7D635309B1CDB61E921C35B43836822F44F09DC4D0D724314AE443FCA667D721C68209DE510FB4D404766981CBB3B01DA7488097323D4A1388648DAFD312A2FE43539947C3BB4C616BB592F6DFD429131581856507DE0585289998C93C58564D57E192CC1D111EB98F94EDB49958D13F622F8A8569E95A6AA15B705E73D46908141241ACDEA2B0C44A289A1CBBFBCACBDFBC0CA3A21462639923B81ECDC298728B7179CA8DAF256C822B42AB68D65ADB2F2A53F3D3C94CA6805DC4E325ED26D6A71CD62249F5175A2F144D83E07FB9B466451CDEE4094BFDB1BBFAACE1CC8089902392314A1497FCD1CD6563B3BCA6ACBBE6795542A3320D9649CAF993349EFAD7FA6A74D14CF4FECF93C1906408455C83A2920E098F281E75350766C27192CCE854115D049A1E4D25395AAA15A73C97ECC68991C4A72E5771A025DFB546A5D6F2FEFDBA7065E35FD2C2927E78AFACDB09BD8EE4EA0CAC2F05EA8A4E369B645222AD6279B93E2E7A31D3A0C47BF52A765BB9DAE71B947C018845EC0C84A170707C3712FBB56799FF757062B6D7A0F583402B02AF7F45415FBBF000C657FAF75DD72213A7B09F7A69B6520F7BD57ABD4791FEDFBAA1FBA5047C3531BECCBD78552850AA79BC02AC01802EE2BE32B3CEF21B92A834E78CF779114DD2370C18AB7E12D7F7B4D9E0499DDAE42825C292B38F5F27CA6AFD67C2AA731537AF01AA303FEE9D253AF56842913095DCC3CED8212114B04F3AEAC86F4CF3F74BC4CD85E4B031AC7A135E561C839444E2E10F0D06BFABD4F9811BE6A11AC52307987217F7CC429E734496A1DB7AAA456514D2967AC06DACB54C64221AB0429D7267BAB7BF98A08BAA9B8BDA56A4E8F5ED18743BCD644247D2B5ECB3D235769BCAC562BED1F4A9507594676D5C324A97E55535DE4AF00D78C5C42F038EA33EF8C12F0DD519F3F06A4BE78981939D934A919FCC07FC4445E121958F2D67E75F4F645B7B06941684DBEBD627FA22AB9B3EC8CF78A8C0EA96F8D2E2A6E69BF60BEE89E4E1DC896936E31CB207B009F9C06F8672DAAEAA3BD6E04556A2F31C48C41399A56C32A2D6830C06AAF7789A8843DB3DCC32CEFDC686DF6C300A4A629620FE5014DBAD702164BC2B139C5B6613B4EFC62C4808E46B1BB622901777DB3DB750F3264A4F01F6FBE4D43123F12E9A49F91A6BD380A29C477438210669198818245082CF478ED450633A19218ECD22EB849C269794024F2393568113A98F9625487D7095CFC6495E75EEAED5675E249A3BDB57D22A61646DB45F30DE24B60C055E6AE63D937BAAFBCABCADD37B998DAC6B51B7C4335EBB70181DCEC66E961EFCAFF80DB55810444401BD6B0E1BF714C16ACA02DEE11FEAE626B23E33F69D93C8CF30C90DCBEFBE2C9CB4524C0B5CB6AEA7DC451CC1F78BA749A924A51DFFD35280A740518ACABB588DEDDDE90658712E0CB7F7D7EEDC2B7D2A3FE35DF81F652340B16EF76DA666D7E1C6B99B92F83D0379BC847C7A9027D63BAF9B091126AB010B6AB436F9583721713B0B3C5FC3BF2B8730549EA21B1E1A9D0ADF18FC1719F21C775A20E723A78CABDA7B2AA046585A9AEADA411CA610C4714289F528F06341ED0EBBB3D5D9957492DFC1109CA37284DF55C9DB419AFA95CB4A5FE84E587A8C0B77415527780B67982F44C8DDE51515C047489A602C96F937D11DDB4382200403865A90D15400645AE3408227FA00087887B90A1C91EF09E9456DCF293C3C79216125B699E4238B45DB849866A870FBBA0A48D2A4A916F1FDC5511B07151C489E75D1EFA6095C1FC3ADBC975AF1B86B6CF947405EE721B98F41EA529DE82508CB5BDD3E06DA41F14DB598C31731A6DDD332364EBD9DE8217415A66B7D783941459FB6F87D041915D8190AE15FC6F21D6A2001B421B9102FA04D10FB05253B4EC46AF99A287533F03A795A2E8CD418C69727E890675177605D21A050815DC989D6C19ED0D7C34BA7A263D41111C7E5A67347971F172074663252264831C0E666E154E0EA0434959C3DBA549013C605AD08E3F0303BCE908689F57EBA3DD06FC3525EC0CBAC2FF8C3C03A0992CFC0EC4BEA66BC9EF48A83B3607516853396FACFD709EC296AEF0B0AF03B9AB377129CBE169C7160CA558E552262A6BFE95AA8276AD2DF54EC789EC5BDA858E95EA8EFBBEDF07FB59BF9DDA0EF0BD70F15DFB28322265A564160 -MD = 23167B1215674DED8DD6DB8A4ADF0B07F39A0BB5F28BD4F98F402541 -Len = 24098 -Msg = 62908A06156005A3244454C8922D6F2425B73E398D1D4199D0C3EDF24A6BA549F3DAFC76122DDA55782BB9D0CE0745CA445130A556016BE3F69CAC8D5076E9881A20D64C7716EAE2632B9DBA75BCDAF8F08CD57502DDF8A825957B3343C116812A4A95DAC9878007E65F6E567072580BD83401AEBE6979D2D130BDA6CCB86669D59625CED1AABC1803D8F5D4E9E6B6727792108CB8FADD37A61D72095370524491D5ED6DCF4563D4BBD8B582381B517387394E381D6E3BD43B466EEF003CC1CC4626A292605ED377D74B4C46D1755F25DB12FB10A4DB21BAD263A79C1F1E4AE130EA6B346D1182FB39FEC6EF202B2B3A7776A1C33327B0E622FF6B03F7F25F155BB83C3C2708CA31BE764749B17B7006166C7E4F8BBB863CCCF9D74469B4EFA0276C61C5600BD72B2B608D90559D9D8BF8736E7CD774A2655D0BDF01122671CA05568E31DE9313EEC937EFB9F44961E229980134A30800237E472C9A9E2DF07018E3425B0BCCA0CD3F50DCA6519CACED7C0C6056C304D2B34F48013CB8C1C4803020F8A2F9F73E4228A97746481BF9C88FEC4F79E4599BFF37C9165047751EB8F23661DDC9C80D8A5642161C923524E2B11D86ADD7C74BDE35D913B2FD6714203D36D56A96F31CA63B07C525B5D931234FF4111800BDAF6F5B908CB4DAF117BD0E7C560B355EF053F231AA6DD5710BC91B19A359C8E155E1DFAD50443B7DF67C794068E2671ADFDDA8B7828661A3DCD50A4C1E21C62BC5718C021A01153E7F48ADA48DE87344B61762EBEB0A18BAA3C57BCE83F28753A73DD6F8E5AA012C2A705B61BFC46D790EE553B0F8B10369E3DDFC582E1768C1F0CCFAB74B30A9DB13BF3996AE84738540739A893F0EE9F3334DB67C94B210ED6892EC2543F1B72ED1184C7309D9A51E094C667BE6D9E5520162105C0615C28BD5B280727402A267AD6CC64E128814EEAB14A5669DADC7C6FEA9E2916D55DC6E966713E8292728227FB87520DC00EACB7C7A681FF243DA23E4E773C7DA874C9F7C6EC7133D64A7A26D2C47B74115EF9D4D4F13CB962FC01760738572D3A1682AA0D7133B82633FDDE3372444018464456070F4B7203CE59443009AD68A87A646EDC6AEC58D3AB89D8108147773372F842DAAACF98726EDAA732D1FDBBFC2CF7A547F29F2A4A7CEEBABCE8DB9EFB686261AC490F1C91F17AEE3B5105CD84479778FCC0E18FC42430AB6655BAE8B4CBE1D00DA77B4921B555E929089CDB48C96F038AA0A65945B732C2D6B857BED850258672814583B4C5B4F7F256341D29DBB04FCC09E27D599E84D4E41A83627585F9390D54A055D8378F97BADFE5C80F53EF701D886639E1E5BDFCDFBBF0FCE3800CE3EEF876AB0FC6B831C437C7E4C478A7BA21B76571D9C8EC19263378ACBCE61602BB0FD9369C6B68F8ECEBC4F0E67B72E138F28C800FCAB4ABDF7F7287F23C852218C51843CFAFA5CB14E7F727334421F8954469EA9E54D53F07E5EC80D2CEC8F5E1060A3E9C3336034D79EA283EB8A3D6206F786B27DCAC94104DDAD6F1E2D3D229454E03BED99B8364C0BB8FA3E0043DB4D677185D660D6B03622C7B0A5244F3DAF56385783CEC51E18736021701301A63D41E69F2A22D20DAFE853033B05C1B7298C59EECCE413727B9CBF3B62995B723E0F83CC606BF9D5E5A624D531A578E3BB41A63089D2A7D29DF32392AEB8031566E3DA7CC48024C339AE6F09ACC8797B5526A72D40AAA7E4958C05F785BD0F93DDD8CD07491372FC635587AA44063501E117ECE9542C13FC2C5E1A996666F03CA161DDFABED001D5659C9794C1E239C274BD5E6BB3BB8EFCBF36424D7AD9ED5EDF0E006DD7B2E476578676122558711442EECC4CAD73916B0ECDCC0D08BD2551756D3A09285FF5C6CFE87366D350011E696A2865757D6C67124B2307C180830D8425FBBA71814E1F2634AC8A08F0C025DA4596799163E847026A62D00ACA42B4D14ADDB23F63A32ED46C30F9A4A1A66990A51AF90F26B6A8DF451A258E1703D4E0E5398E263A5A131EE02554DFB66CB15DAD977D435B271DE0C4704D4D83CAA3A66937C00CE08103E11C303B33621AC320EBC2C982BB12B390214F8B961E3FC5D6430079909D7C8AFBA425B77555F61393C98D19E3CF8BDD95D507AA7B70EF59B20E3D3FA61C55C901BC6C4A7E06B1F708D9016468474CAED21CC236DD30E27A48065270E402A93C7051B3871F0D55A0873DC5A1BA3119DFC2A5AFE2B741F5B759C35E1534595F691F03EE5718A634273569CE7533837C013BA0BEAA502C3CDB7BF9B8896F8E59704EA9529103490027D40366D63597EE751EC4565ED52DD5CE75C7DB06223B253A01B9BB63CC382CAD5754DE58DDF7078E834A2FFD6DEA93A32F0250AB6237C396F449676905E7B614B964CA2C17B8BC1ACFF825EE4D426856CBAADF9AA7AE018CEB5DE4B27B34DA26D404B503D48BA6609E6B309676B5E247C8A4434BF34DE811205E2B89EFA81FC2E0859BDDCC4D73D30850E5BFA212575860A61E18D19A6BF04DC901A2F52C3E4F4380B76354AD959798A4C97E0AC65BE8F04B55F5195B7B7FDDF0B58846D3A3716EB7C52DDBD0033C612147B6424B80672FAE0D2B6EB1661D8A51C295C3BE6581883D3147CCB2DC57D779450CB753F04F07703BF780B3D22A61D053EA72E84CFC151754585030E670A0DBC45AD531DA7A50D8BE3807AC5E0106EA02DCB1ABE6BFEA7C427D43DF84CD3FBBDFF686478FBEC3DA9C64E8C5D9AC89BDC1A32D04B97B5821959913AA884A893EDD1CB3CB37FD9B495DED5C1A32A3FF5D6A4DDACB1083C9A4A14CA6E1B8607D4A7A3F20D8E1225FDC65E58932563EAE101FF2D4DB744EB586EB92E3024939BD7422BC57D2A8ED8016357A21615AD4CDCD7A239195E5FC19A2C6449F4932BC5DE445ABD6B26F483810BBDA4B7713CE822B19FE656D521011CD63CB22A94EEDEBD63985B20982ECCF71ED8F4B715100CF10BBA2A9FE5F8ECD04909948B9A73ECCAD4BF9DA96C42E33335A0DA1493B7B00095171268728D9707DB1E76DC0E5E59E40CFF5BDF9FE353EAE76E9622B711EC1F1C351949AFE2BDD09CD9625F6C96B96D53541AAE632F25D3AC274AEAA63469C189373C8D540B280D9D1396FD230EDD83D8AA640D575B84213175A9EB76761985D27FCEB36924D5F4ABAA244D0073EA726D6ABDAFD25C10ACBF62AC1B916E631F05E41CB68A05360A41EB136782E5B9FE674AE0BF7649936258200923E94C11110FC6ADC6846E94503211276028B3D6A055631FB024219760FFAC12D3240FDAFAC20DFF67EA14200C7666F44148A8545467423FBDEAAA3FA0C42E5143920D42004B4FFE01541AC22EC1972C23AFF8A0E863E704D09262FA0E21D542178521DAE9346233E384BA4B21B2C407F953B21AA2D44DABC9E7C0A1C674CEF4CE2DC2C83CEFEED90F8414BB69E72329C771ED2E369B9E543538A0964AAD39E7ECDBC4DC71D35EC7222A82A1E42EC7545420120405329577DB034C3194E7A49520678F4B47C5499E790CC1531BBDCDDB3166E9B87BA8DD8734B789ED4E2761B919A69BBE8B2A3C1F2101449AA292BC29E52603D56B0C560581D3DD0CBB378EB3509AC2227CBF5CB3BF244DB7D0E38BCE12FB40D2FE9A0AF89DB5CAFA0D1A68CB823740C2092B86A6AB8DF6A3A662BD7E73B8D3328D6AC7B589350BC83A629733C823674196D87C8EEBDBEB7D9406349CA3C344ADA81F7393128E6AF489EB1C5E08E23C37970A913568B433AEFC4EDCFEEA939D3D7139752FA41FF15E3D69D72864DA1C365C30F1B3CA221FBA9C9BF2EC276A802F76D932D29D528357597195C2022018CADF61B69B4743D7607F10CEC863F8E8F88D2DD47796296472CCF67806EE95DF439F4DAA91EF36C9F9574FB66C02F9F1BCA1EB016775BFE72F912A427712C6FCB07021BA024E39D155CC8AFC5F4ABB67CF72CC6F2410F6AA797A1EEA0A8AF4F304314A499492E1BF8E71B50E4DED0D22B1EABC52A078872415A143E9513528381A9EB77E41FB400EC5837A3A48025226DEFFA51CC2680AD0222C6E968F5275C1AE3A396A1C92C66853D51BE945A95C0A8D19646A86BDCAF7CA0F74D0C44A33BF04BC457C55A1AEAAC5935F1C580A539DF71B18685A5886ED8BF48B3B085A907832CC0E850D7F34C8B3084B5C34CDBEC2B020507798B53A6FB6DB02B2F03E86D4CDE00F7816BF95D6C9319D6D1B4889F4D6A98E85AA51DF1A3F6733A4DE29AC947E5002D4D0B00 -MD = CB632F18E0CB51DD9C2E6733496758C3DD88C369C111DAA0D4F0C9E3 -Len = 24161 -Msg = 8AB57059EC228567180A51AD441BBC7A8E40BB7DDC90F3F8FB37CE6CBE7E3720898FEDD109B72306292807FD6D83D15EC3F55B7674CDC47A8A876A2CACD0E893BAD171101D82FEAFEC84324FD39B00D9103A77936CBC04F5D2FF6D0E9A9E4E6B86E02AB701FDA3C6965C97BA5DEFEE75F9AA3908BF87897423602A2E1E37F3E03F5846FCFC70AD2B96F4EE8853D726A9510725F6A4ED9285906717DAAE352D9CF870CBCDE17BE207B82CF6DCC87D25A6784BE49B029560D1BE73A17D64010C2EF2BD7F452EC1564953712DB0853DC64EED1E7FAC7E3993371209E25F4830666F7CB6043985FB9AAC5FFB5F4DCC5262FDE682335EDFBD57DE582602F493BB810EE05FE9B335E5D279074564A94911E115C50411C7B72145F84EB0B6F7C18C6ED63BA2EA5EFB50455E979F0D698A41F46BF2A6B6DF760F04FA110790E6A53F08151311740350ABD0D75B7851D8A1AF9FE16EB2DDA27A71F70A592DD7F5B007C910BC0575F13990F72F4E343AFD8D272D44E09A4E00E14AC62D630FE87403CCFF96CCE9BD6294F246E1BE003702C6A3DA6185D3425E8C24A4159D58D2D9A922E6BC5E37B10C539CB29C8872A3E5E1A917B3B644220E69F4CC4528CF09FF1995B11E03CC74FFAFF9E8458373AF6B04D26439A69E97EDBA01B17EB69EA88C7FBC361EA888AA3279636C82C4C7945F3A986A9B3B7940D87011EB20BD97230F5E8BDC448C12351F0AF0E1C2F18966B5D31670997894BF45F962C805D68C6A85F2E101ED553ABAE4A90C8C26ECE3BF42B5A54EE5E08AE2757D09928D78E0F3BC651E0944C54F6836F8D21F3FA020DE75A00E65A5FB42C876BCBF37A850658B871CA03B6B8BD6CA7FC0683FA18822A281BB67EFE00CBB547CBA604B5C5ADF826B9DA5973D498F95807528033F4EA53CDED1EDB03EEE8768FDD2BD23B51121DFE2D875C64543025EA1D7986A5E46204A07D31B2E2BBBC3C535D1C982B71DCF15C1ABC671A45F9B23F8D6972BF4FBDC29F80269762054DB20E5FA97B95B5B015A1293BE07C444EF88234541A321472129AD4126CD9C93DC6FC26782CD9C7FA36CB2375BF515BA7BB79B0BC1EE4264DCC20183F979D83C73352581BB022022C6C5F14517CD662A4925E038812D708A1C8373F7400A0A276EDB94CA2364CECDCD6B8AB8BA954554ADC58E5063D97CBA08088ED9D02111E931805E98CB95AD18B34937D45579116789CEE256B16A7BA811364150B00DAAB9AAADD7018FED862B2C05EBED6CAEBB2811D28850A83AF2A1E43866CB602A4654ED5D732AD8B5C9A4CA616637856AB343BA256D101E9AF5A9A0AB0A9895BDBFA671115582D4B532F2DA785A7AA96AB7BD44144BD9ECDF3A681310273D42F4D7FADC4521AB8423B58CAE8447E655287A649BA1E783F342FB8B56C474F9A032C4A21288FDDF0E524AF0A99B49BE5E5D0A6009C14D3F469E6C714397B5A7ADC312CB19BE78F32884DFBDC672FBE10FE994007D1D69319E88954F1032A9B65FE4B20C6D2A9C3FFFEF60EBF3355A17BD536AFAA2B1FEA25F884DEBF5B23D5565672F2C07EB2E61BEB94F956DE4C61B5A996EB8EAB1A0A300D619A73F12E59637B4959960DB87ED03F9A05E96E77754B0242DD2A714D7537C4982882CD53E44BBE44D375B46842F5B3F30C757C7AC1152D2FE14C222C0041746D28CCE834EAF2CF52C7D332802584A09A1F81ABB931E729E60EF14A9E71303E04E4DF0AB067467CDF4BBC3CB1BA52FEFA81100FE6AFD087F6D6FC71003AE1F1AA669A06600C3272E31C3DBB54EA1068C6CBD29B514D0ABF888273A995AF613C494B194566FD434F6ACEF530BC094DF1F9BB89DFE363F113133EB2FA1A94D932BFD3F004115C094AF87DA0F441064D1832C0436E1CEB8D746D9E58DE9D3F1C6ED24799EEF8B59E96381DEBA6C5EB81B9A1E708CD90B859824541878A9CCBFB171B1E31AF53D868D8EA573E218A95EC1E3B2025A69F6675E4A2E78D2FF5650EAE6AB4447AD9899DDB411E2C74D3897AF3D113AA7CA05D79245271A0ECE8EED947DE0040B42314D672E2470214B7E58D0699FFA51CEE3B971DC4DF9BA160801656B37C7793F500239994BC29578CD367827BE95A82A493855F1F5133C84053605C910C73A307D3CFF9887281DA5ADB85CD592D53AA9552AAF5482400FCB9F19E4039436E5B08ABD41179A17C525D94F49F7D461FC330A2C7F504FE96572BBF6D7F67F728B339113C6536812DFA0BAA7574A7CD74D024051FBA5F484C34C3F987637799BB258183D3E1D23AC36E57BDBF15800B75DB3E008026E431D335CA9537546B03EEA17C49DE2030B25A4967CB1C973403D26C72A8290A65CA6F9BF06B8EE55A75C6D55AE166EF35FDF90FEE039FF6CF6CFB32C4839359F54174843A147F2999AC1FCD7190FDBA6B823EDFA36AC6A53B5D39A4713738A6916D66F1C2E4305E2344BCA20D1205BDB5C0B71384B2D868CC4C87A41586B5F5E998A3D2294E66D823FBF5057DC947E09583325615C27BAAE5FF5AB611BC64A598527C454171905DAC28FB4EA51C0BBABEFB897C82EE570732D61EC0A22C90BC585928F864E11D81599CF5BBE09C82F7268C36270CC6D2BA2AC8FEAB254A37F50207DA39A047D248BFEDC070AA92E6D0D2F5146CF1B87B7156F22D3BE1129D7C78AD6835F37A6893A123B12B838840AEB0E0A02458E180F847AF2EB61DE2B1456A7E2232F8E834A02F893552DDB2F97606733CB6F7866FFE314EBB274C8EE924BD5172FD79B979C178A2C722FFB4E318E1CA0D53C6AEC19F6F3D9CC7CF29140743C0B42EE77018F61E71709A23C5EC448113854E4DABFA8C6AA27645775075966F152EE71E4275F24DFF15B98DD58770CBC6075178C2BC989615532BC5D9F7E26EF6136CA8626BFECCF031E382DAFB7DD272542FB1EB6F52B26BB0C1F0D81E4735BFCCC92A36CE4A8793AA96E5016F0F6B4BC9D24740BBF5F732FA76555281055F489EB3E62375538744190ABB9F43C5A27C8B1C52E11A0A3C1CE48762F6227BB8942A6538FD74E7DA5EDF038634CD93A138BA967B6DB2174F183D9EEB561DC49E984656A9BC8AD18C22D665A63DEEFF313F64C8D19F847133BBCBA2A80EFE943D7E29711B2C29217CC982F629844E623877ABADC84D79ECD9B2EDC65BC70F3B39088D35EBD590A9BFA0E123AFF72F20166AD212E0FCFAF474B1953D1A054D0F14FEBEFBFA7B0D152D352B4FA06BC0144952466D460F2B8B87816F3BA7677B4A8A18ABC30A37A0F18F2BED82C266B06227C8E33F0C35BAF2C01527EADCA60D93C3A9A5D1A17082DD5B96D47F24B7E3366D45DCC76BCB42ECCF8E643419AE710C69302B60DC714390CD0760F2F65A940FA7051F7EA1A089D3818C6C210924C3CDD652580B13AE306E0548E0402400B3D4AF8BC3F0CDB81E2304A62A128B40382E485C8915DE3ADD27DE526BECFF500406B496D769B424D1D4BFBA14BA5E0FA7F60C53CD57055A3E105ECA233852B24A2D1F89924134E5124038F3FC09DF67496B9DDF080C22655E6CA89348F8F8606CBD620D97EE2E91CA2F340083D4A4BE4471A899B43104F8D5FA0F70335E2162FAA50F681CA70F48A8DCD23D7BE8A1CF5639970C3765FFEE60A84231793CE901802BE8BADD17FE33525B84E03B1B7927D7721529574352237BDB56ED5D97EB5392BB18C0FFDC6AE8CCCA699A9DA7D54EF6C984F6FC25406F0460514DC790EE3D79AC8CCCEF99CA40D78FA1625CC85825B26382DE32725C246676BE24B75D89A6BD4800C44C45C2D8D330F0D7B8BD798B660D8DD7826314EAFACA2BFE6B1451FEB46D78D50BD6A4A2A04F1BDE5465F102162F33CB13FD997A9BF69038A73F376A95B417E93EE9A89590A21A847656D37CD840FCC403A6951C30412E5E7CBA9E14E24543CAEBA9FB58D48C9B03D3DDCEBBBF4DBCF50D5ED53064CD9C8162BB9D30656F0C82888F92D5BE5B167C49C808274A5DB4D98C4AF5652D68D899CF937B5501D87A38705526A251D957B834F7AAD80BBD5A12790CC4B6C7DAD4C1BCD580C676CC47160F0A8F4A8BCB9FCA7CB630217B3D0300747E462822821F19AB740030849D86DF31392FE6A59BC28FCA5B4DAF4EA541E6B693FAE52B50BBB4BE80B3BDDBDF8B951D50CA791D8F0BFCDAB2239D2B7A3ABBEFFFE04C03F149099481C6A9149A22480C3BBC67DE3FF2256B8C8F1A67318931B2C2D39CB62214D5F1F17BF0EE2CB8860B4300C36F4162B9AF231EAA791D6493146CBA8FA932531735291E900 -MD = D7768878AD106F2E10000BD5C591D0563E9B1C3A617ECEC612D8E4A5 -Len = 24224 -Msg = 8598B32E7EE9469B6D33247AEB8AFB12D6BDC3EE4AE5A49683E84C73FB353A7BA6FDD95C497F429E82F07B2B652D7E415E9B93B59E541ABF46C88FA54EE068F90764564A11A59F1D04D8B88DE186C4217285B72796D5C0575DAECC30920F6BFDBEA772A7B18339A1E2CCFC79FC8A9839B20A981D5291025F341E5D7ACC1A3BB4129091A5062B9E54BE7ED8AF8196CA7A9ECAF18CCCE4A1D718149809D08A8AC86C9A12E76379F634AC1615AF03ABB9287C4B4A79847B52ED4FA17E1527495362B625155E9F1AA3A3E5D0821240D8360894E19A5620BDBE00A7AF6C40B1E513490671BDBE402379F495C528E218028D315F6EF820C383C83630F7564453F0E2D387273854FA05F4DA7BC24CAB0B71D4092A432CB0854916F71C3B8640CA602547922C9867B002DF7382AF29E4E1B993D1FA74D950063E527DB6CA0B736B8906962412EA1DAE218A0C86AACF51362BB8BCEB3826BC3249F1C5155F0CB50133D0527B98BA21F757F72A9C52D342DE013BB38EA52774A7C012DCC0A58051CDA565FDB45A1F065041BA5FE62D0C46CBB1B9EF7D669BE319D98834786F5532225D26D184ABB38E345C4CDA3FE3B85225D6F6C70AEEC801BB571C5E44D9298F02F632453C14D1C710CDEC5843B7A055817587D790FC589017348DACC18B686BA0EE29D074CFFA70017D972449F4D702C051125FECA48AD3C5F88431789714C90F48EDFC382C28F5D9439B88531B003BE7935A845DCF5EE545A6617A3B05EEEAD89ED5B950EDD0919BEE243EBF5CEF536A0A7C28158BED2F838F494A2E828C580B48D88E216F50492E754275697882C94D1ADD46FE443B766DABE2F9ADA142A5BB1A096D3DBB71FD6B55810EE5B2989745695D4BFA143013F7EA34424833FE09D8966A0B97B62953C4CBCAC86CFC83E14AB36A4D9F8E8CD9010713702E1DB6C27BD0166777E2BDB5268CA388394986683DB83AE0603FA611ACAD587FDFF471718F20F42360FB5C3DE8A3B3FEC068E9DC496F664FDC0C305AE936C7AE560A0568CC509F99AE62C6284F8BF2A2801C39C79295609B622247B9F1F6E0E77AD89FD5449CD9BBB84A523795F579432C19E92B270B6846D72986EF052DEC372B3DB6D8449F3602FBCD662E2DCD4EDCC59E2A6D15E8A41CA7932343981770121A78D34B7400778072C89DE969D0468AC052AE54D6076660C67E47AB93313E9A979D80E05442B4E328E89E798158B747AB237CA577ACBAA07CB85F8AE7B1C9325FE8B269765399EAD37522CDE1F071DC26BBC4D1E7AA8F5F4DD66A861A8F4FA38183B3962B9739341404253C93D7DEC6B454DDBAC9F942F2F78D6F75897E673B9ECACB1579E298B8B9446B11AA43C6BA7511ED9CA831152D3C3EF0EF390A2CE65F4F5F6E177B50C9AF912BA4B4548208571A43D6854A8ED4479D9538456539203D490103DD23BACE095D0BF66C17F2411D514084E047970696400E1BC9CE4898CA62FB358B096DAF8A3857AC398A07882E2201F8CA0E4D1CF0CA4E47BB268A91DBAFA837375384A1BD68F87894AF81BBF1E220C2D3C3B2B93A877CF6A7C253CF660B498D3EFA4F38B9B401816C0AA51FFD3BE9F36AA1D2335F4C079487BE16E532BB0FDF8E00D5D8379C0F617F7148009EC57DAE98CD41AC01D3D0B568E0085775694C74FC339FB5F5A57C274DA07CB4DAE54833BB74B0793E93E8F1B5A7F5A092E90459F2C6B7E7A6F488E3C7AE10AC90C358C5BFD603080A544822B4663AEC1A42D3F16E335047A1C9EF6939C36CC34DAFC9EEDB13E1A9559279866A6D71A97FFD317FBBCD8CF80476D59271136EDEA5A186E7EAB7FC28881C08FAF7C5416EA4801A1EB9E0C883DBDFD5CF0F0C9A619D91481E413A74F01D86BC762F4B05497E20893CD55C0C570CAA3FA00BD537D6373B60D32CA14A36BD2FDB3EAC1344E4052EFE7D1ABCC77480EE433008DEBAF71C9FB7070005D8365AC112F151B374DA141E1FC62B3E40A74F3546BF4F02EA8050B823CF2CD5FD134F10ABC2DB0B9B27F5C0A44E320EFF81A0F7EFD4271BC9D574D6A82FA807B05F3892564D8BF54DB7B81AC87B633C53F8187436C1DF435BA2D16D72353EF7B39CC550CFEC1EC2502902AA6BF4D50563301F0B39A9D201FC02B0C9ACBA147843A5AB0AD15E1FBD9D3880D99779D0FBCD217746AEBACC231A1285927F0BC808B2A52771798A9104792DD0E9C938F66929D30390D16F57591DFED8424792C1A0CFEA7CD2DA90C6C2A80234F3B3500DCEC078BDAE333816CEAABE9B686AD0BB24F65BFCA86222BFC628843BB4D328DA1EA28281D9A3D29E0D7EEB9FE24B33284D73486D8D5F37DF7450409722E828B879B8F7D17AAB002ED2C2FD7F03FA4647F49D4F1B204C0DE0B413C613963A0C3AD0026ADEC9279779A0C7986526F8C9742BAA00C088B6826C2449378F47EB6DB75CFA013BC19106E18D062B0698BA02054D8719F756284191461FDC5D33CF0D15419ABEA010C8BAD6E10B79CC39334FA8789383CA03732E3DE9E454D2944913ED2C74021B7B393B3641448A6233A9EEDE72B8DD5A463E5A2DD7B44128B09C1D256F6942CD7DB74E4893402B6AEC1C01170523BBF33015575FAC4534700E91153370006D829E4B76216B940F1945FED31378800BAE385A54C4D32DD7A960E8B2ED1E34FE8DB1CBC7D1E7A86847A69FF5FABD40B0E9191E426843FB79A1DEE7DD0BAE4C55E58F322A4F6586220B0A5D483E70F998B10656D1F56FE911CFB0D1CF9CE1A24C4B0D4F19A04129DDA063FE17CB8F00CF9D516D44BA0D1AF9AC23BEE55CA307FE69F6D1753ACE1B1893DCB455934F73485CA3D8C141B56CC8039BA3CF7F29DC680531FACF117BD0F6D10BE295426E18167A33D22A83B416DD1B848B558A944B168A2BB11BDE0C55F9F9B965745B0E8E367FCDC57030140B87B88613D5EC8136675FB3CD0DBD2035F1A72844EAC0C2394F2C4546674BDA13163370B1E3D623FF301780F06D1348E99C1386411DD152FF4255E869DB6E3187E736F7015AB4B8D72B45A22B0F4F3F05FFA703C3B576B376FEC2AA142E68BD1B5285C138AFEE111987A100BF56DAC66217C6CC3AA1F15B49942C9C3C00749E2CD78A0438444165E72DAE65B1BCE985325E341E2736F11EA5AF9C8D00C4DD1C1523A09603374AC32AAEF82BA4062A0CD93790C99595B9A82205FB5F968098E219002FB84CD587DD68F9BE290BC4752A5D9DFC864EA1BB67878C97147CF547DA959EE3CA1C433B72868527744D29BFCD2E323530A6547389978BC2315D5B34BE3632B641429CDF9355C48BE23AD6591581C706A0CD25793015D9D88887806C2FE8504B0ED19EE74B75627074A7124DC01F0D337F52044BDA1B0E057470ED886126A8A8B4BEBE21EDC21D6E3B9BDF88872777787EC42E9813F753CC776BFDE50CDEA090E5F6945F242EFE0A776DC42DE1B442E510AB87B08D97A56399D171BDE5F7461517F04B9B50C3C42824C301955EB9287756C30BAB6BE7531989BFC552272FAA237B1099C78F8EF3F78121B61BB2690C1728DD0300D1299439CB99D906C357672112A1EA35F83E9144F51F92DCACFB9285C75C73E2381433CDF39327A8B2D130CA2A73F5A769B00A85855AE967089AC941A5F1B535EA5B3C68D01AF72F692B700F6604FBEE54511973269984FD1744169A33029FBE76A43647F9A3119063065DCF3456CC75F74C5B9E17DBEB8CDACF9CDB5503687509E4B514BC1F9F90B4E17F167CC426F956602FB42C640133D7DAF0227A48DCF22885F58EA87FEB44CC4E67209116DC9E6008F2BC7A04045B9A0EF3EBDDC3AEAEB776CF63ADC4DE7F091FEA139EFC268FE243F1902434EED5A8D47F391BDEB52E4A4918AC40CB56C8A73CC0F89A643E6135361D098D9E4682D2526FF2848B8FA0DAA79573BF06FAD2D61381CE071BD8A71147B9164E6F8361A94BFA34F1E58CA8D44A806629F811148051F0CE620B3C4FF8F094C9EF5ECD24C0C61090BF4C8C6C99247557361AE4228E8ADD6831BC67D6FF9C0247BD896E150281598F1097594919070B971C23F4EDBF87871EA88A15420302968B01663366DAD4BE0DCEA375111BEBACC333723F17C2F36CAC75B9A890F34D4BF0BE5B943BB3DCA5C897BE3773818D6E784D733021AA07106F369BCA543EBC7E9BBECE36AE8335967DDCC28EE49B5869C1A212EC3D4EC5214A90D656BB87E62F7B25EABE97D0066C69963C73628AEAA32A3FCF443B29EF1EE389736CBBDF99FC7E1B77D40F651AE35881D2FF43E7D4A13A56E8DD -MD = 0AF7E1351C6A6B7359B59E22BF9C9BA24110A2CEFB647A790FAB41F1 -Len = 24287 -Msg = D526F95D6E36AF73E419B4046FA572BB7A9B64CB2E3AF46628490A9CC10246DC3C1701A51374A3255C26E14F54A33937E4F20F69BD4B493C8048AD9D54C62E8B868A71AA9C67F582A71AC6C33BEE5A9239F0E40157F77E80935C08A72A9E07D067B13A347D7917AB5C5326598D441901BB7D37387C0B5418C5F81D345473C5BC1C9354FF4663805AD1F774EA8A376F1DCDACDB8B6C58FD9FFB22705C4C398906E60A4B14EF10F0787001F6FC9619272741A42EC03F251C7CFC1C871C3E07EFA1DDA59CD1E49AA757F80967D33362575065F03C84AF4FCFAFF6A77BB71FE23BE9390FAD9F0DD722E652B4228E0DA09FCD41433E2657F13C0E0AF6CB38B62BF4B84405408FA787477896B6F135C618BA32FC6EEFA6DDFAD71CDE24971A2B4CD9A4844B187393F73FEAB0386CF37148B1CA92F82340665DE2D65F3935746772F327CB191A0E708CA2C4A34BD8E08D295B6C26081552265AF9CE418DDF908552BDEFEA8907E34C43AF9549010961046F3CA0345359DB159C43AB4A0E2275259F030809ABF6B0C47515467ACCC2A1A1C867DAA1BAEFACC5944287E918C703CDC3AAB6739ED5F8B3B3751C20A2C246B8D09B0E5D64F172D0B1AC47581E024A73291F9CB166697421039E4ABC4DEA7E1519F5E500C72A2F5D0C85E54794FC17204361F339B05B213B9204A3DC670F8F69C8FDB85AE0F772CD98791E2144B54D8E7D096880DB6DBA75C4763E44C5C2623D4298F22A3321456C54CDC42A7B752D5F3DAB3E9A91877BA98A3E753BCF9E1AF720DA007CA4B3B257ACFDA752ADCF1CFBB5649E536DC40C233B54F44D3CEE28C4AD98E77E83C3536D3E328E09F8B3781E8E8B1CA581AE3451CC5477D80D684F8F7162F1B2FC127F3F3C8B39FE0B795873BC860287360343204D89DAA0827D9C4926F698361FE26D50A6EE116E53DEEF7E0DE1474D51B885E8BB4C0AF3503E122DD71869FC622C71C34826EC5DBE8DD31EA6DB677D247A6989828F001A3E5E8F1FA79371491F64F0880EC25FE35C20208898BC6A6EA6ACEB1AAE1292F0185237C2E44A90109B9A7AB8E58AB1D200D1049D3A82736007B3EC0590DB7464F78880070B6D448A97CD63D604EA4C9CEAC8AA61440C38D236111889D03D482212E70FDC4BD34C3AE168C33E9F42D8C432946614B8E7382A44CDA296A704383C622432402BDF8F3E55587346949876306F8BA1DEAE379660C45680F2667400F227EAB1F4F316D38F125717E57BDAC2F6D0D9E62408FA4CEAB96E0F67F500181195E3BC10BDAF85C79B61781FE6FE113F7EFE03435B25B3F6E0E362B27174351C4110A0838701B937EFEEEAA1B9F1D571F7376329ADB500B473B1CC4D1FE77E3F77F5773545FFD3FA0DD94C667968F312ED2F362BC02E88D7E4010C2A60CCB4E4E3191B56AD9B13709573BFF5E36B2CF19B8FBA65919B00B749046B03A0E9DC91D108EC18439394993F709344D5CBB6E3625BCA14C0114E21C8C46373021D92A1584E7876852D588ACC1CA1001634C04EE044DACE7C61504547944E76F051386E711C04F7E5513399EF5C863D6393EEE19FFACF038231624CA7842DC02D63A9FE1A9F02C702BB2882C8F10DAD58F9A9C1CF2D1B069F50849EAEAB6270CBFEF3CFBFEB8C3AA7B7C5CE3C9D8A72648030D1A62C95808153D6FFABDA627F29ECF56083E6E6A781B064CE1A035A0F0C99C1644B7ECBDBADF67B840DDF50BF9883DEDDF4D4C121C5AE17AB6B8ADB255D3E7CAA97E2DE3C6FA1908179A7DB4232380DF79872837A3F02D9EC436DC2067141E04228AEB0C59A5BBEAF097167876B06A0679AEA34FC810A243F3473426665331054D7F32262E083536DD2D8C77C85C4A8A92BEE6411502A48594DCDF2A03591AEBD543A45A51D2B95297A372EFEDD161A64F024DECBCABF45EDF65608E07F61A2F64572C0ECF3ED391B65A5FB22A70314DC2874D0F906AFD4157F7E20E8E7F7F331FC3EC464A5BEE987875BEEFA3A2A0E37647D14C88E3EFE42B5578AC2BAB4BB4ADB2F9BC6486C282E826933B4D00440D50C8C12C37D79CEB6A8F4F2CB40E02584FA34341FE5F8962CA7928C4FD751E27420A7B062E803717FCCA2020CF5C8CC2F8D10A5BEADBBDBC912398402073276CE4151A5658359FEFBABBDA5E7DA4531281C06D33CFA330C0F69ACAA548890C0FD553BAC2C9FFD32759A858CBA7471627995887769138FD268CEE9118B9278B3295ADB16B757F475E48293BA7A264E17603E044B384C76C2FCF07534F003BBE146FDC49047636AC84CF0A6BB9362BF9013B567EB55AF07AC6718A70B515AEDCB9DBE6AF8298DB69E42738CC11919983FE0A96D4978F070DA7DA0B9564B7148BB6FB20719847C550F5E9C855E22978064A27EE11087473E92763BFCE8EC70EE587DC6E4F730FAD7FE7A46BF98DDA6B42ADCB73CAE33EB65B12A2E7EA4D29014365BAC219E578D548E9B6117645E05A4C85E1608C229EAE7799A2E36F092F62286ADBAD8665DF8EEF080A548AD72480065C6CC4E649F07ADC226A69BD69123114037F3092B3B0B811934E10ED9B0D80003F6FB105CEF7F7DCF817053EE2067CD18AFC77BF9D5EEEBAAD9F76D0A900DF19310A941B52E6DB8DB3FAF1167309DAEF0E5FDCFE777D0918687D9ED54D720E78B78ED2D0BC67308F470F83EFC3BCF03FC640884CB69C4FA9E91920C96D15285CC347682237ACFF6314EE8331C40D70A0AB27FC2209E7B9DEFADD333079497C0C79BE9CB8362D4C1697A9E9335E286D42C0C3842C49642B771BD8966B993D12FCEF3FC93DF04FBA2AE2E6FADD63C2652BFBF77999528EB26BC49E75A64FE64CF88CAB4F24BB0BDE50942A333D414E6D1F29C4612C141F5C5A6DC80EE0867AEE9B7215618FFE27FDE0354E23411D3C481D50069DDB05106798E6924886231099978D7F7CEA7A50E70648DD79E789E936C42C208D4B1034DC04153E923F9FAA71D17C651CAB5226B6AB44F33D2D486500E2F7609CB4E9446245AF5903DE5CABEEE13E6C2BFBD3D4A7F9E03D93AAA22D674CA6BAC46F6138419875000940AA2EC842E4DB4B5210FDFBE2CE6B2F2275F56AB0415A866229ABB2DDAA95C3BE31633EC46806FC07110746FBDE5E90F2AE4ABFB4B47ECC8953470968482988E9FB9A91F3AAED74E6D66E4E35242107D4BB144B2E432701079996D10ED48F1CFC0EA9B7063BDB70D5A77F3C74CD2C68A1A91F4E44AA9B7F1B4832A4F4FF4A182880E6C708960713D35CEE92A5D4E2853CA1564FFA3C26CA1E5755262FF3A942CEAE94CB07271F7721CDA51B9DBD9C87166360B3A400B52E0024A0F9C94501241C84AD01AE28C7A37B2FCF36BE1581612C7B8956FAD13797E4C802CEE4D673AD5A9A329DC99301625846CB59E7BB1C07043061D8CCEA737CA0F2D22C178A8DF2A2B145ED3E89B87E668105D2B8A34E23AA238202CACD78BB4800539BAC651891642DF196568197953E5DF9CEA33D62D7E2B939FB02F3A2B5BAAF6A5B9355E8A30166AE72F4971BE56EA711AF24A50F875432FF19835967A7A283BF3A268CF87CDEC8967478AF4B5D7A2487412F2ADEDB4591D4538A52BA335025EE26F1F384C8E12AB846289296BFBA872A8A031EC368ADD5668B9C31D26369534E9A2EC6D73BE3C6B827DEBDDD9DBA80369B17F8DB54ECC49E050E90EBE47BC5E1C926C4474F0BD2FBF69CA74D189712C6D635BD6B9788B7CFEBE2E26BBA7DF9ECA1573BBCF1120DAE31236B459AC24BF5621F990C3C17690CEE048FF7A21A21F61755128DDF17D64AD424E5A47D9058579E198F506E32BFD9CE31B775395C4EE86E57A15B825711E107F60AEB90471F39360988983E59B80DE9FB5A845BE476EDAD00FA44A19EF826D2E328A66661908F69C0E0C2EC30F7FEDDE3848606A69050E7E4DBD304698C9731D2376FC19F2FD64CBDEF1972DD729DA62383752CD908B9DC3064D6EB768C107205FFF8EF6D66A42B2D5D00229CCAF251E4C7323CDDF979AE0F610F3F615FDB8BF952E2361995ADD5F2A58BAD7A91B6BB40F0D0CDED4EE5848EFDD704A96509E9509760DEF1F52E5696E445B08EEAE5CB1FBCB62BDCB8C419D70A50D5F73753B295DD80201325C4C0986F4C55C0B88E1C23E27096F7D0FDE1D6A3E8CD74F7804794ABD0A60646AA5F51F1C1E9B04377FB08F82F3782C0E56FB0083463A725DFA1C72234C808EDDDD253A6AE5EBB36619FCAE16C184EAC414CE401B625A29429441478EAD6B826191BB1FF863C0D3140F074D03A8F9107F31BA53E33BE0D4BE39C305E8CDFA7E -MD = D59D278B1C1BD6A0B86B5F23F570E58240A8F04AF0A44B8A81C54270 -Len = 24350 -Msg = D27AAAA650CD9D61042BCB18D7B0E0414D9C97E39937FEA753D180E6A848651FDAD010F49C5EF578C7D822961C7FB6495729935F0312B9B3D5CA8FE6E0FEB62231E2C8394970ADDF9D71A412AD62D5F4ECC32F80328C1A0C98561378A6999D3FA21F26F6589708EEA7ACD275BC56C6811C63F53B3C91CE76C317CB746343B3D0E7907F6186B8B19EF6771D87AC28DE7AF4A31824AF0EF5111DD4E27328E4CE40E97C3C84758A40F7BAB7B0E23041014196B11EFB6CACA8B65B320C11A6953399EE7FDAB1C71528898297DB90B8852CA91747812E5F490C25D769EE635E47B84A3D18187BAB7EAA7579010397AD22F2707343246E0681C7EEA73EB494F119E0176B8DD8F2AC4D4FDC1CDB080C4B2595F308F43CFE145F714D8656394382FC9F591D10E77E052AF2A1CECD5BF69DE5516D992C7082E0A7CB6E6A5DB7FF908DB3DA4E2444A3D6DF4FFEC953C8FAEF5783AB18199EB253F39F1CB76D9F4B637E3BB19CDE2001976F202DB1A21D7FF8A39C1030E0D809366B3A133C0F4DD05216D33BAC39D1EDCB73A197802AD76A8A3E0D6155F2C30F185A32638E37B0B2A45DD35A0B2CD46671EEEACE7AF92D824A2818132213AC46E2E2A4ECEBEBBC5DBA5F841738328D76D922FE8A4A9403DDB09BCAA9C6272F04FEC60293EF568E6947C2CCAACD53E98D7054F36F759AC06CE1CC344785D0DD7977CABB0F1F3E8533DA9F0753E995167053EB85837EA205CD522F5F1F6F90D99CE7DCCC8B8DB0E99B918E84B89AB8DF41775B794DD6CE15E395188B2457BC9544DCAE4CC1D1DBCDCD2013EC883F47B0F0D2077B7B42C86E2E3425FEC7A9E8FBDC039239630F2B3C5F5EC45DAF3666C9C9C965CE8B9FAE6077C66134FE4F34FA3688E2BD9D1A29EADD532AE5AAE73846FB5D6FE1BB47A3AFFA0CF6AA2DC900DFE20B4EF87B3096FC286388CB034F411BE523428A363C26545D34D45272A811972C0A7BD834240818F8650A0DB918814B12BCB09E4E61F12D86FD817E76CD0C371612E06740C9CCACBCF5A34C4E98E8249F84DC5EB719A0BCD8796C4FCB591E4E6EB30DBE132708AB3D207AA69112CB00CBD6B5A1361F6721A68B009D49EAA6BCEE367FDB826169D9BC6CBB776A0744701F1DA898A864E13A5FEF8018C07039E732E2D828F92F9917D72546E6A49DB6D16FE871919ECCB55159710D2E4DF3BFACA3BF130C2347F4C063DE87D25926215ACEE94B6D4D5C0622091CDAA9EA46A70834FF56A038DDC2DBE894214E159C5466684BEDCBD1422C5830D67B7724F05A3E22A7C7D5C4C2EECCB9F299B2E69BDA02D976D7381500A361BD8ABDFD569ACE0B7777B2100ED920739AF293838FCABBC13C31522A255390F41F36FA13D17628CFA74816F119B493A9CB939A043B5DA2010F488971A3271BAB62E2F5BAC18B78EA4837A9C8946C8D6E917FEF900305B20E7C2BD4279DB2B92B8EE46B16509E65414C2CC3C848A27031F67A059142D3DD58A95B8D3A993AD0DF9859E33A5B8EB1E80133EAE49102CCF826A1DFF7251C25F5FC61CF9026A0BEAF4A0299144327B915047D0203305CD94360995215BEF8F7C470E16494541B937176CF2F3BDD0060AB37EABA4AF44495F6801C3E34D3C642A61B0FE26C22D5447154F9F605FA8F83033E2960596651A59D90E945CF7D956847179A1E3B1B1EDC6B6B537B65D7B905DF5F1D746F08F7CD48F0AD08070B7941E966E90AED98822EEF0D6344FD00A4CC54251A15E5419F18BF8A2646397893FB21D3CB2B311F616709CF3F6F697CD93753AE8B0668CC3DFBAF681EE6E2F068C09F6F0B5418E41990DD3881FA3D88172D47D11F6DC5BEDAFDB8C17AD2E28BA99E5D4CC081BCBC3CC3087520684CFDFF78B352F2D6373DDCC3B7744138DA1F98A169FF53F236CEB380AF261D17A03A0705DBA3B8F8A92E27288547D2806267564BC19ED668DE6A955EA674454C55A63B6BD9547C2442E1E25298763E832360BF7B4DF75524DEE30E7EBB7FA3FE6EE0DCF9246AE34D179E64D049DFA0D5A6E19D6ADBF45FC805660CC9C1B0C43A77FC18CD787951CF18727C969DB9A16CB704A895F1F608D10148DCE241F9193733DA8717DEA3D67533734A6A00AE19C7AB093E128869748DC1C065B87963B9C72C709227D4BAE94E2E6464D8205493516FE8ACE0087EA5AC882A34924253764728946777E6D77A99ECEB810CB8728975393AFFC023F80133EA4754554AEEFF29C81B276BD5C1C5ABE60FDDCA31BD8CAC9FBA551AACBAA0F5B4590A861DCE1804494BCDF8AD2C2692F599CDA36356FCAEE16D87D016C79BC7E7E6153D63984B7246BC9B610D499BA3FCC275B6A0F791305E43063737765F1A286A93B47265E7E78ED167C5B14947A7F46D1DA97F6BB74419E2F0E87BE5E1F590ABE062CC369CEC0308214F20D2053AFD95B8EB5747C23615D0BCEA8A83FFBD844B037AF77472C86245F0D344592D7BEA3A4C66C6538CEC816048B42E8C73D3324585A2C7397F1C2021E677C58646D01DA39E7F67750C82D1E23B47E034AA7D69CA27A3BDCE6E51CC8C55CFBFE954EBFCB9E0977315858D1DFB61D1D13871508E8E575BD2CF86BE8646BC93E9EB0C46D405CC559E0E37CF6FC664AA4C048EE1EED67E3DD76EADC86B3FA96F0A1ECA275A498FEFC443F1D21D14A710F186944106DA5ED0BA132AC4CD6076194D4365181D075C6AC1FB11A6925089BBE5DD0F4B9881E51BB730E317C31F105844318E59DAC45AA27704CEFBAF487EEF23A950E6FEA3DA947667679B44AAE5AC5ACBA43D0D2CA3A78E1719985729296733E5BE504F79AAE7B732D0AD3EC4F443A054EF142A715CB0680D0512191C2A037F8B104D7CB9638DD53928984C025F00DED41C10FFB552CF8FD31E7B8FF0B763D2CB0620F68F66C3D4D4F5D2C6630E600DB019C026E7522C4D747AAB47D2B1E0D1C6C2B15DC240FB5DEF967293B68EACEF675E66CBD80D7AABEDFEEB8C6E2817C69984F28D549A73AF91FEFEA526CD1F1E5CCC80F9949D642A1BEB91699F6B26478B970F1882F4FBABC9B9BD098E45D4D9534B4AEEB45FB2B9FE61C57F72E1FB755BB72CD5F51E78A6340269E1DC49FE5364F05C66BEE99D98BD9B66270486C271F545FF15EBA309DFAE29033EE61EB78EE8C273E9C7D73D1FE9914F72942BEC8368665D70DDFBE2E80C2256AEF76A01E6A62D5F588913BD19416199F3282F82B8ABA0E83907AA45C9475330EE187DD731559981841E3D02010D230F3EC86B6BCE39B5AC12F1971C2850C0852DCD3FCAF2CA5B17E5EEBDC1F71466829BA9F6369E1F8651B23C1D7C997268DF9320394A1DBE4732597A2887367C5D04DA5CD4C73DA7D17A7661AAAED59FEE91A041946D5496ADA7DFBB5047BFA2A0F2EE3728B1A0B00C815C68A080551048DC3AE0CD18E5FD1482F7DD4D583C8B6C5F816EEF2DF0B45FE991961AC1382083EA83CC685AB2AD7D1217FA371C9140984E3B1DE3AFA5F738006723D09585FE69ACB3E44A52A1596B8B9302FE88923A50112F0ACF6D33CE2A339A0B3C184107D2113AB867C88BC52FABEFC5B809252F0FCFA41D47FB76383751DADDB780FFF1DAF2E9674EE42CE6281171A5E065166938018C5C330655C63065CEE8FD79031C410C693BE5F7C6A923C3675616726CF8817733CEF4AD76D79FDE9A4F84DA985E7951562B5C62E4B46E86B1DA2B9B365FC66DF018426F88DA1D62BDCE8B0EE576834D3A70418A6B3DD80E0A218A1316739A2684EA0601423155225D85DC9D598F43444B9080ADC7854B28E948BBAB837EE7272207E92E25BA8B299253267D59AD6E0FA2E8225EAB6080CAAA2AC0FF748B35E54C66F0B010627D04F63F87F756BF79244903F065BAF9C571FF626DA3A7482062E0A8DE603FD9499F9387CE6EF2216ABEA91AB73AC6F705CD47C2F1D2F3B6FDF4E3A3788C633FFD6C5E017D29FB49ACBD10823B5FC3BCA282E113C1A2D2A5C229AD75D33D3062AE63FC098DD91CF18AC22BB638CB4E34A0FBAD9D011EA615EF9A98E42EF38BE0B3F8EB1466E75C26C9B8E941D3B64945739D6A8536634DBAC71A9D03C4FC3C62B3DC6DC22B58F8643D1B8320443053A17191EEB029921A5CF6B6A46933F4894BC56A6F05E3854CC50E8996F662380DA36ED13AC2DED1BA7FC6EE807DB4B26A57A4F2A16C1EEECA9246D8B083C7EA8A98C6BDCD8A1E64A22228517027EEF17EA4E19FBB136356CE22393816FC6FC18DBF06008575055470C8C48C95FEDDDFD1FA9E8929637B276CFCD99C40DCFF7E7C6E8D47596B558CCAA5451A677ABC528F00 -MD = 6235F5F893B984ED0B6729F2373670ABE2AC282707F84B763AA7FADD -Len = 24413 -Msg = F91C2267B4D115DE67623F9804F091A1DE9635146BCBB9320ACE870CE9D2578675AF6A0EE710126441A945C7E505CCE2E88226CC6F38FAC96C0DDA749B75200D19C94FEBCA3BE3DDD3B81BCCBB9E63724AF82F38142547B51BDC62081E68C2E16A05FBF6466498D96F2647AFF0639E7A3B8D36C713A2BFDF2617325B7AD09037D366519DEF50A735FCFF87BC3DC9D200E1ECF8B85885C10941C45DD72B63B87483E71C90E3E123E0BAF9C2E4FE7AE57C68EA4070D083E62848F5F97283B55452EDD951D64E3A4ADF7010376341B8F2134D196242C144E9FB0F47DC02E2C07BFEE76FC645F8112F987718CEBFA4B8A605ED97FC5B89750BEB93690FFACD997E96E27D46D891608F589613ACD654006D36B610F2D54A495F4EAD54310804DFB951A46F1CADB81DF1AD5399C29F364BD16051BAD70B7F50D7DB9A27A3C3CA6FA6CD010646512E31A577FD1C31F653718BB2A0AF1F7FD5E7979E1DEB40E51EC3CF8C63DD0F4F34F9F04EC7DD4480971BD315E938ADFE633F4DE7B1F63CD35C5FB32E0EB59BF7174E010A0E1C2B119E3142E5C2B8A54D5164915F6D5CBBA04C0005D0F9E7DE7ED5D522E5AA0573EA35103DBA9320DF46269885816318F4A8B7CE00F811F9B8AABCDA2CE3928FAAC1C54E5D044AA0C730BE111E8B3E9B1304782A2FC243D1BA82D107F465CEDDD1D6A2406F2A2A81FC04EE6E3394D1E01B75A76DD15D83F74C6BF719122B17CF23FE5C6EF18DF8884CA691FA61F047983D8014D4D3E3D0531DBF972F892C1918D5516F82C41428508F117E7A67E4976D5F320007003293AE8DFA0800EEC661195C1DB4C50A461E90B6102548C6E43C13488B29B9380756E113DEE46212D4E7C3F0C7C9515443D6C4E48A91A8AB6570473348E272A37ED1DAFF2B74C829BAC6355D87155BAFF60C27D5A5509E0ADE2D91CAA330097E9C6AB1D0CF4BFAD0B64111A0B9A505753B7707759375F8310A8E7E2B516060F4AB3321A42318935FAE49A8BCDEC10BDBFA73B27B6C29F49D7096361454545A059D395F575217869FBCA8D655C4210A8C1C079609ABA20E2932DC47DDA86F7EC1ED7B9BB7B2C869890CEA49093F89B80F64F029EA50CAAB75D17596A6D6FD4AD1F65761A5C1DBED85AD23A76380EC36C91252197118122B9729E5D5F378ADAC10B6FF427F39D88BFCEF374408C6D1A77D5FEAD65740B0050D52B205E6E211507A7EE5BDA54BC9CDE634BF991D69031935A1F4636455BA54A3C00C93FA00ABFFC4EC0A372DC25A33B0ABBB8E463BCA01F02A4C222286F038F83B062B4F9995E60BD851E025D46A9F5D3855DEF5B02D6B31199A7BD08DFBB97F8CD4BCD455ADCF39D06A540C7EEB9EF78AE31FE8AFC2C88F5824979068E8F15786AF0322B038240684BE8B6B7F5A60E0875B9F33EB0C6F63B6643421DAFDA1169F62040B8E13C86721859557A17890C586CA18945B92457D31D3C68CB5F8F7F2C76B9549243B81F48CF40E6F0DC75DBEB9B93E5C60B38FE95480CB9FB7196085A5187D297DA66325FBE38D96E502564257DEEBDCEBF1400A0BFB013C09AA2AA3CA2F4A066321787F56EDFBC79EB58C0EB9997BC2DBC2EFDFB1270EC8D24DBD854D8E99345969609FB195F146926CBB310B6DF8EA55CFBAA51D2B961FC2C90928A6C135901EDEA364F02F3838206F478ECFB755961705FA3F17E0FC7BB68E70C71C5CA1D7DDAF00674BAA9DC89C9A93103E6347F1C3783EA8D6E05091137C36A6C4E1C2B71D6812D6F92BB3E3313105F9BDFCE1E342B1B2FCB858CEFC53C860D719AC6A0ADE700D3BCD78BC941BEC48BC0EB7F4C82C5541DC55481A184DC5E7B07DF261F0A7116152D7FD2A231A312D0B2E6E37D02D2A07E828B2CB9652DEF4F21F6F78590970782DFB99D67102827983782C85ACCB58803B70EE713156687FC8D1F41215598D351776ACD76632230FC5029AA759F60D164D668F9148C82B6BC583304B0B0F8717E0EB6CE55CDCABD4737F97629BD6FE0D98F0CA4CD12B943AE6877C1F5B4A5B6EBB46BA2E799EAB22CFC7438C6B189966C09EE3459A13704FE71FCFC83B15033E143CEB0AAABCB3106667E413938C903B7F95B7DBF75F618B8C49C3CA3979EF968461540FAA49851CA60CB4C5FA4F4BEF36155744AE2AF82E312FC601E944D63BD2225EF267783F8F0A0ACA5B7254527AA9676E8E99E19BA843051729ADDA9EA2CF89330100F00F0701A832FE9C809F7F1744A2525211C0EE3C79C17729CCEADEF5968A3D605EA166485878E9AA2A912D62DE6454C76C74889DF1E6D15F126CA7197D091044D479F9C5383A9C4DF26291ED78A782495E0D7532917DF5103B48E16AC27931DC05BFEB3E90B423BE66B7531D335C33BCDA021342BB31661646E8BF27979889E68C565F4C82FB29045EC20F1DBA31F0CED84317E35332D33928DC9B5CEF5013A1677640EFED8494C0CD823A4D292CEF0B96BA604F1AB13F7BE395A43000086BF6A1FBE716BCDEBC2B678C8B0D3525A82BBFF35F9799AB3D0539A75616621192EBF9A76ACB4BAEE4B471E07397AB4E6BFD1DBEC5BF0D5EB4E7F73EFA745CEE363DC4777D188725EBDD3B16B41339324396117BE5DD9CC337F089C160F1B6598E11258DEA9C500A1A0049B5D0D7BF73FA09895E0690773AAB3CD06EC75401FB069440BCDEF4A59CEB8E1CB92817F6A21BB2D11E4396AE5642A121FD38949ABB5144694D6FEE40891E9D7CF19183FB2E3D3A21D776FB35B9AE502D39F079420A2D7C2304F9B0E197D6C529695F6C333C4231B92B040B54E813FD2B9D8226C96B7AD0EB6A6422651B61E8E461EC24F3C0D154AE66B16235A46CE144780A2E92D59FECE521D8DCCFAC7A0881E1599B7A4E23CF0152CF0DC71EB6E7882EADA2D8E176653AFB9B7EA80179F5F24A8EDF8DC68C77799D5D2E24CB7DAE44746888F76EAB232E41BE3293919100C2551DA50238A3A466529D24C4B083A2382C2E76569ACC1CBB8E62620B3F14DBF817BEAC6E747B0B8261744A26537F9A85C4AF420DE35FFCCD90ADB1BED44810EA3403A6E20193A4EE80F7CD08748D7C1F5584E63422FCD6DCC876393E3D8D64997EDDCA23EA932A58C421FB5BF8619D6C2911084CAB3BE621A00062FF494502564B24ED4B7D32F930469D381073203E6AAB02062D59E78E97D6C0703947C1349A7FA6431F0A52C009EA5F76C87AB52D7FF0C0B2C2EC7B8A7726C028199C8C6EB13AC1DD87397F7BCFCB82EBAB95603F9BAF272D82DF7F03F02361B060879D716F5DFB5054119F0C2DDFF48E62D8FF6E10F202B5A3284FF06A8D91F04EB6B07E8A614C9320ED3FC52C0BE5C18076E96D3B7C114420745C178FC49F2BD786FE17BB2660CEA09E9DC3867997F8ADFF47086DDFD01CB5B0EF25CADDAF44284CF35877FD37CBF939A4D089DB113B685C0EF5C79D20E377F0C45ACB7781C557EA15C2DDA4C26B2A8541841BEF69AA664F3A90384AD7656C6A2B71FF13B8909665AC08315F1E7181A2E1E2EA8D6DB34893B33EF9CB4436587B78217987442D0544BD8C6C691F2F36CC3C2CA1DDA7054DB27B6BADFD09A8AE8BFB06165EA4ACC5CBC77E6EAFD1945E6C2E40B372B1BEB5A8E1C47996E0E23ACBF75FA37002FD7A0615AE5CEACD76E85A94FE40712D8BF8856E3CF4150ADC539CE7A5B5127837DD4818AB5C3D1E100AFFCAE65B122B3723C411E4D8B0973C46F1F7FF5E2DF9E7CB0E6A509CD1728317D594993D4B19E19C8EA3C2D7906B19A6C38310BA144893E7719DC213CD2412D19D78B7AD01514039A2088018C4687609606337EB1E72C7F6254A1EF5FBDD6307192BF1227CA8350EA2D9C6766249209ECC3BFE24AE953F627878E58708C0DE533CF27FC746957080898472890DEC199AFEC25E2E912870337F10BB745FBA51C74827323CE3F9B1E342E71835DFC17B823691C3E187B12A58FE44557CE4312FEE90A0E5AAB147E68D1BDA1A9FB31AEDE6C8929568EFA3376D92A40ADD876D698D05ECE38312736EFA5F670299FEA62629E435573E325A500C9746AB6C635A5123588AF09F9D3B89246533D437690593838BA406308041C95377FFDA93353411377F8012E01B8CE7620B284BA4FFA2D169166D30C19151DA3DFFA8DD24335D1CA897AA0326399767BCDC94CAA7325544AFB70AA7EF1974604C2DAD2A773F917303E5A463E1A3EEF059EB9D0B00AD9CF30FA834544E39D46601F7B26FF63E6ADC0AA8A50CD70DF12A6A89AF09D207E98B127DB862CDE344AB1A0802F9CC00B9B1A1F89C0B5A6802572223F78607AA10A8AE0B9C535DEE7686C8A1E405D8 -MD = 0BEFDE90DBD5FEF285A463B71F6D971FB24AB5AD6AE517F46D6C2A91 -Len = 24476 -Msg = 4E6C5ED847BE2C847E9CE37870353FD934EB688655FA2B1EBA41A65940BDDD80A28D3705C28EB2A8F5A2054ECF0D43A7A699419B1BAE094F4A1C6E53BEC428A14CF147172797838631DF629F3F765F095E984E7CFD43DB71D03D2E7890D63EBC5E9804BB71A0D10DE1291AD16067DD76C5A69D05BDBB1CE17628B9ACBD55870EE5D4E011D420CA8CA31DED36338EBF6F62F8A19ACC463F878B1CB9D485C8CA1E76CCC62471E646D795E055D69F147FDD6426EB451BDD4FC9DAFD2ABBA8C1BA9C025AA7E434AD904FA97DE5C49768CF75028687716CB4B1A1BBE2C8844DD20B8C588B75F517F687BAFAE870AFC90284C862B31AD48B731FB801EDE896C95B7E9FB942A78703788F6CA8F6527945FE79EDD7E252D956C456017831D4A896D8442B7626106DF788FC71D9AB5514F7A513D853C838685220BF14337FC0688C664A8C77E15F458DAA2D58136AAA1A8E43622AD02F399724525273AAB2BFB270B8BF8CF01743FBF7908F33D5EB622FCD743A2FDC3A6A8FAD2CCB76616ECC466AA2CA0828762FD85E961D9CE892FF11CC4BDC1B7A3B74F303EE96DF09871F7188CA1C1E7B0057C7DA43629F7AA6CEEEB94EDD2BEC6CCA6F5480E09A233DAC43AFAA5B32584C8D06538D2C7840B82DFAD3397C206B37776FE91840AA7D1476150D001A1737650D18F9D0BFA2E3C7B592ED0132B724CA749FAC460BB4B8AA74BD52CB3DA97F05C72EB00CD84AF678FC7CC47B1685D7F29904CBA14CD91985A0995B9B1287A19235703D58767B10AC64259320B0EFCDC65115878D0EA9E43827389910DD2031AA99A88513146A1A603B0FB23A3EA3E9603766AED680B682F21EDA36802D60954E33A86B8652AFEB9A90509B5F84A5015AF258477C17A72CD8F0BCC292AF51B88C3B2CC0B12F46B4ACE21EF1B2995987541247A013B7F2185054D988F025ED7D957339A05EF7BF3630A3C9075DCCCA370B1BC751E0E29F6BF66934C7503DBB6B59D2F1604D30F74E6A031CCD746AE2CD74933C24F2C7334F061BED45E2796A8230D1B62162CF4BE08FB7061636CA6C1BB940ABB25920B322A24DB82B30E4DD27928E767F47A8100F9A76D814D55DD72AF7D948652157B5E2586E8AD9149F660D3DF0260D5AFF7752E2976329544C3F323F185366A563639D65B85F2ADE6FC6C9373E5EE43B2C0FC7D1A95877E9E1C16404B381C18AC9AB1DB7E1B467F670E4FD4C74621B923C35FA855C469FA9D6D4304594F1C68549FFF198A351689467C83F6AB8B17BC526CEE99176412270CE26ADCA2BCE859577C94079BEBBD74B13DC0A8299DAEFD9C042D87E4EB2F52B1341B8CDE23332397CFC068C0E2641C5F1D50C5C61A2E5CFBDFB805A1F8A5F360F5AA54CDA81D6D787075E83619E3A50FE707D63628C815F849007F6D6FF7B1B8227A597EE9847C064E7CA06BF12FDFCDAED1AEFA57FE0C01971D2366D09D503C4C490305F498F541AE09836A2711A73FFDA9482F2CAAD6337B86138BC64FA658FDC2A4FB39FF76E6AC77B74A3DC89BFED8A56E87FC982A3B09791F735BB63AA7B8160E62E2C5DB719CA37ADC0913ACB7A963A28C2F797E28AD4BD9FDA6B5F4EDD9555E2B0D42F998451CA281EFCB8C964FB641E669E374C3FD30A69B1735EC14E158B0D70E04560E684D87DB17C7D4C01F4543B2E813C0AC9E51D705E9009AE4A43946C9A4FFCD32B018FDBCF3538870F960593B7B3C8F64E96C26AC3B517B220777AF012CB5ED05485386A770539DF04AF932D53E6E6E8066667439BEE1A585615F3DB225D924B61F3603B3DCFD9FDA77CEC2766E0512EBDD8864E4EDB52F68E7B6E90A7B5051CC0B794C7D931575F5655E52CCED398A1F1A531FC60EE8D624D0E7799462946542B9F5A7B9FD232A4A26A18C99DE18D1995EC7EAA8B20BB331BA5903D548DC9E2F345FADB2583F17D0761B4B8702C8239DECAE44EA82E5BCDD0F80C8FC151826F817412D0555006896A4719FAD3631C0707DD69E61C224DAF5A8F92727F40F6FFFA64C4BEB8176BC983F4C632EBA70F18281DAC5216DA341D808F2FF5ED8CE26CCCEFDEFABA75F329FE206D0B95A1A03E8E792759D197CB37D9909F218DAE93DE7DF8FF8D0ADD2292E2CFC5208A088957253852F6EF3BC2C5DA1220B785BC0E81D73287FCE109D7AC8AC0C1BBC12D159688AFC3E443B5F025067FDF01BEE8BE805C8B38BFBDC6B3D9A2F7B7348D6F6A04DCDA74D21D91AC2694884D9E8EF621F21B9365CAB7EDB7076C3FAE7C78DE0760A38C5432B9C8ED48010EEF9C93CF0D43EFA01FE58B7F9F1D6ACCBED88EC2CB83F21FF7E90E576F6EA98D57E83AAA8794C4A5254BE6CD726B34CC88701EC554C481107579A2E01A607BE64B90FC4DB3C717B6D139F79E8E642E8C21A7C609C7D907B6A8183057F9FD66A1EF5D8584EE02E6A9BEDE8EF255043F16E62BBB37965881537787EE15568C6FBCA32C87C7D872110EE9A27E42AE8D11025E012B3CD1F440BB6C696533DBA34620FA07400A0097AC19B36F0D14E7F86EDF2AF40409A10452C8BDFBCD2F5918DF7F203BCDF8E7BC5C3185FDF7C5D40A52348789C93D27C56821847EB71DEB04A62C035CC790F4415F848C6164A0A6CDAF099DD02353EA5E408CC39C2D3C0F0E96C70F1637C5E86A6253781F735C5A7741A59981777F418EDF1036182729A5D20D424BB7BB25BFC786F72D3D18369A9B2B3334797F8224C7992527A14E5E8E20CF40D43EFBA385760BA90EEA72F9A29A1E482EED01C18E573B55CF2E555B4C39668CCC938B6D1CE522EF6CB56F4AFF007A4454DAD84C4CB72536EFE3D17D9C480702D4936CEA6076ED81534062919AF0FE6177D67F4DF50DD56CBF95EDD204B090E9161C8C5C3F9AA0D5227E2D878DC49013CC027EFF63029D51C2BF10FA1553A6C21BB56BFB7532B77E7F197F6701A86AFD7D3E531295A47F16CF74ACAB70D42FA0C68C3A08EC48C22AB4165F46A6C3A5D52C36C7E8D434F4BE3369BA129146120316C2295F1EBCF27E315FC3C94E931AA3A58EF545FC01E6B40158DAD009F1389223D84B705F7B377CC3C5572F561260F536117EB7CB80E76D724C39CF63ED9913778AC745A57D056FF410F6A07DF71923C15F9C2F829A654B485655421668B883622C875270099FCF00BD0F54C723360A169ACC646CA7EAB6786A23C43FF4334DAE849151D18072F228985E748F6F745F3AF969CFCC2BEF99E2CA09A4410F1BC94AF23DAB81B2650458A4346058DF3805EB593741A718B8A37ACE1E32A2BB303883E9E765B9A04E5B240C96277608840D82333D2DE59863745481D645A0C0E173CEB2B019CD062C00557F92257F3C1095060D466906FB6DD3476D51951ED827A32C748BD2C0A5AB2909F5FEC60B530F99D308BFB0C9D27539B7A13A198E032515C424F4D3D3A24EA33BD33248E271DE64921008913855AA29C92261D8669F72122BE28F69421FF027C817713BD6ABEF643FB4F4EC823402355298E14789542290AC0B13B97889E9E144C6ABFD454645DDDF18319772EAF2CC06266CD7016866CCC7DC139D4F693A16B9D2F970C5F1945648DCC92182609CE39593A538420FF2AEFA7698456AA04D95EB0A650E8E186551501BB45EB4EB67E259641605C6AA4FDAAE268AABF3FA7649D35A2B41FBE372C034C2634B063EF8D87E558C7D669DF5C17248AA85EFACB9908F77B74AD7BD22E5B7A047160A94D4759C73F2FD3E0347E0441C10EEDB38C42DD9D2CE2F668AD61AADD2F1EF946ADD9BDAA0422CE252D56EF49F0FBA6ADDB650C1305E83F661DB059111ABF3C73B4992817CF4B51A78886DC33B4A0548441173795A5BE38AF781975EFDBA308E70AF26563541E09006F0A7086AAC8344508804B1699114BB7F31212E63F02CAE6EB7EFA097EC0289A2299EA1858279FB85585B9872DB9821D377859339EC2D849A283255365A9FAB4A97E5FFB4FF401249450BED576E75A895FD9E1D704AE388F1799957A8E4156AC5B3140C5A948052581C9D5FA1CA2BB72AD87024725775B0F47C635460CAE8CB43268E56DDD195E0E6C8631BF2107F9F44BED604EB51BD2A21320E82BC03EA75B33FAA077E1C09E8A709E35AE8610682ED56CD6A3647BF3B158FA12401FA640E72A18A004ED6F0705F4BCA22B10397ADAC2A77AF43E4DC830DED0931846872BA2FD185D07A85D183D0170CEE9FC416671276F2202F8389CF2CA0A8F08E502022388FED6492CB7470231D2323010B37A3DE6DFA30E78568ABB0188CD8238AF00D82C0967B8314C1CA7E36963870321B0F37D07B312CAAD5B4484FD1B9DE2BB057B1C1DBC7636DE0 -MD = 63560DAE96E66FC8E569202C38CA32DE7639A514F19B04A1DDC2E2EF -Len = 24539 -Msg = 37C0CDC35285BC8471B83F3E4EBC88FD0FD655850AC137626E6A2C744D33459C6BFE32F5086379EEC21077566A29CA4A21DCC773156B5875A3B7C9A3C35FAB672126864E11C3B74DBA73BD60817D94A7FA78F6499F014AE06AC6714CD66EE2F8DD35BB67A941C072D2C50AFC01CE681247453BF5046D696AD95C183DB6E64C177906BC0F62450D6D40366BCD187851001636AEE424824963EB25B669AA54F1AF0CE70399C26174E518B05FDAF0CB2DF31B1201261CA465799302173EF1605845C2C545F2F3526DFE1BEEB1AB789AB471EF70017B9AB557370A89BDF80D5104075A9FE31330496BD05A2322864DC1297342D44A927899B765E5ADC436DE0D837EA2B252C4DBEF7089928034EC97FF826AB5CE0B336763019A14823239F175AD0B0870799E75A33BB97EADA67921B73EA788AA987235F2F7E6C9A8A9571FAB464112418441AFA571AF477F1CC7F712D8501238C7BCAFBCCF76AD34025E4A22548E65D077A65E2ACE21EE96149203F9DCA10B721815A7DDB74B6EA72084B143345BF3C3B95B23D156B93C1E302C156542D5EC215FDF32F7FB8BDF551353D2B76109556E5E74FB257197A0624DBA09581D9CD358BACA247FE6E23508D0D2023AEBE33AAD5A8DD2FDA6FD52E2134227501783036AE577CF9E7F2D7667AADF85C74DC8FDAE8A7FF9F79AA0E894AD9C1D18E2797DE57CDA5F29C5EDCB7549BC431398780837D15A8BA59489EC7D63FF92567A030DD7923F7DC4A5A2ED2F658709E29567296A05DEF957D65C2D24FEBCDA4CE77147810EE5A15B8A8A090AE1642D6B91D126DBF6BCDC8D12736B3012E0BA87CDA7F07BF78C88B35CC19BF70B8DB021869D0473A3F571BFCB6E72FB8AD6659C991DC6317B9F7406D6C32719F8427E1DFA9133553EF1ED14B66FBF61A9682B7D99CCC594AE5441EEC821851C353143334F9AFDE0CB9E62EAA9B402557503B543A077153B45C347B76833262BC88B63673BE0F08A023752A5A2E3EE2D72A3D3C6212E38485896A857D07C13919DEF5162360FA3E097601C5118070FB0ED4EC3598E924AEE9E94DB7C8A3C0AEBA6C3561700FABED7BB6C8AFECBD393655BE49AFEFD88DCF22A669DB48B46F0B0504AF65BE8B54B3E882EF6A571A69876412B798029A09FD7ECFE2A621CBE8567FF274D397AF5D750BA88B6B045914012374E945A5D07012EC20CC59CCFF63D7DB78CC0BE3CC0C94A60AC42F0334437896CA339FF092F5EA5571A3248C2EAEA871587BD203328915032AAE7725E35027FA579642EBEEFF8384414A4D51D2FEEEACFAA2AFEDF5D748E82C245EC9A9789440651DC8339B7040EA919B45EF016DEDDE70593DA459DDE3FE44BE44C48926D1526B01521F04C58AFD22EB343F1642B7AD44BECA879265697BB9D9DD45FCE871BDD545A2C848DCDD7C0E86F7D089CB19CDD5B48E4799E0B063A5BEDE1A7C14E0D1DC978F0DD1FA3C134E258A8142989C5CAA3BAA30A72BCA31628082E9209048ED2803E93730F8B5125A05C0E22C74F6CFBC69AF23CC3F40B71E9D1C9D06903E8308882FFB6B3604972FF0B2F53731ADB0FF5295B04322D78AB1A6ABFF45B6538339D123E80E96308911500EA78236ADDA03731E9EEAEB061862DF664F8B3D329E5A962A126F9D110C0C8A90C6C4E4263FFBFA1B35965379A66864491C6037EC4DF3ED0B5DAEEA555C57A240E3EE36017DCC3519DBC1CD68F2737A5FE3E9BBCB55E7E3F24FE91C239F3CA525A7456D9A2CB51FC03C8AE9ABF01537B5FD5F82C862A46826824A767E063EF61B3E82E17922D58A7E3DEB385EDC9B503A23CD5867A48EDE2A7E560629FD1EF02703FED8FC526E5B788F30ECFD8A2A29687C8CB6824AC45C74D3CE4FF289D7284B190C5E9E9FFCACB793B65742EF610B6D3C2E5BFE1ADAA1853569FDCBAB04B73F1C6B5BED4EA82C81AEFD97E2B9D3C7CFD1B4898F01031568EF64B317D95B98A57439006CA53ACCF8152C49FFAE02C4B8E51D1A765C21F7B6C74666D08A5EB79FCDF473FBD4321692F5306236FF8754CD83AEF7954E6AF630FE1D1390B5E72D4CCD51FFE5C5B9DDFB99B6C1EA14CDFA15637E016DB36FCC456D4BA82226621812CED63CC90DE834DCE80CDA77AF3D46C96A09ADEC6525C0E2B9188D96703D1F95AEC15C930411546EAA211F3F2F509AA5B66CBC728E317286370F1EC559763A8EBE820912D65FFB56EB22F326D1A7093EAD1D49122B16569E0E1929FC4BCFBFF57E59CC6FCC06AA676981E06F93EC60033D99E3BBEC5A3BA913A1BD8D516E9E808C1828E56558E79283B9E63C03D4C276C4F9B60FFB2D4D2D19E9C45B0A586B61E6C690EB15D253BD03EDE76F06A66C991A4D7F5A4AD5DBA0C03D318D8434097AADCF12B1FEB9E813F63A2482AA412F7B7235D51CDFF3001E12AC1A4AFCB3E063DB5C1272416AEF4C7862321064FE7325E543444FB83CB196B30FA04AE4591148A7AF208B876E1A75A0C787726BC7637BC03A43E2DEBE1808F516E99ECF7EC590E565710F0EC6AD1D94D14185A2D10AEF61FCAD5294375EC79CB1FD0AC2EA74A628DDBC3987391F6186017CB3A1D941E7E96C455165AD0C56297AD539B101BD0DE395461EB787A3D432006DDB2FA0734DA17506481B6C65A2F5D697C94F1EDA3502FEB70AF8A6F2F44F286C036CF120F697C3C2BD44F64BF0DF1D939F52AFE8FF12BA6C2DA0CCCC7DDC9DFDFB5D4CB61B0D9153F270309304A7C47A7239866EAAF4BF5993F0CAA7CA317D37592A360A1436C0CED1C93150E4C1D718C1DD689CC55A99DF2885C30D0FDD55854C94935AD6B46CA338B7F9F7714F51630A83193A67C96B7715EE8084901270B4108B086E334EBBF6530CA3B26F70B9434CAD596465D8C5C48D088102B1EE4060E6013DE11D195E635805C5E608A7622DD2BA765A64B69707FA795A575BB67CD76DCFC36C6B74B23D68584F2AE0805EFE8DB84B661D31427EF6E09517375ADBED936BF3431C65FE3674533C49D316A94890CBE8F56288E8CF66019B02B97C82973A01C74FA5204AF8EBA838F2E816C60F5084BAB23F448FB05BE5393A49FF97E5278CCAF04DEE4069E0CB30A54A3B0093849DB3E3DCD8D91744CCB05457D863A7C0DB8EF2D528D0D0521247518AB70742DD8AA4B78A4751FB42194997F91BE5C41ACB57ABD1930E3E6F23A128DE4C3BC8365690425DDDC39BE3E6FF4D4747BF4596ACB927E1FB06E30ABDA1400CD4B068A90C2BE9AB66E6C7782B6FBB5DDC5B483FAA678E59F72D06291B413A112DAD347B86C6224442B7CEEB8A74C700C36ED044EAC76A7013B46D977918DDA98C5017D243505D1A52AE24C4CB29C084B1582E3ED8E1BD3D1D41E62C3B9A65ABD2D91E81D162A823060F2AAE2EBD7EF5D8F20C58835EBD25BFD62C72F1D124E6D7516A73C3AE578177BF593F2DD4E7ABF453F2C7AE4EF716AACE18DDC7BB291D84BF74F490FDBAE2DF38C7419B2BF25ECF9D30B3F9A1E4B36DE2C5B2F2C67C680CA4171CB250289AB6EFEFF380B9F7E8FD6CA017D16BE42FA51AEC2A3D580D31FC4EE4D9380548497BB68422179379F9A21012449BD06C3C6B860A604916C968AFDACD7A029A505229C7A51FD48BD5F01B8DF0757FCF2A84F7BA8E39FD7F5AC3EF52661EC4E047F84E67DB498DE01BD388A634F7B9C7B297445E87527925FF8E8282AF03987F7080A600A729DEDB913B83C0FC2942A9B7AF3917E95FC97AAB9BD812A7FA5360460BA6F0C2A311DE5EA14F451CF61AA3D17E9F205EC75DDBA0DB9AB00A7F401D45B15A2B1E2A608361B867ACA18D381B548B628E43858A9BE5E66C5AE074B151284749038072EDF012ACBC192585AE4AA65E3260A00D985E9B9648A37FC3253C56F9889050075F3046522F20B51569C48B17693EFCE9F97C0E9AE15F7FE674AEF492FB37E2367CD92F18ED23600419BBDA3FB59DC8C359CCF038F8FC432AADE65B098C761BA4684FE38D5EC3A62D3BCE8A03ADB0C208A2E3C7D2813633D4D42D3EDAE78911226621BCF2F2A911AF6CC869D90CE90D7EB559AD4EB8ED81321F9965D720D0B551A4CC6BC3F601A61DBDF45CF3BEF347AB1255E6EAEA29B0768200A8AF3404471B5CA8647E94CF30799159E958A162E87A8F3A9459EAECB5B9E1EA45B60BA61BF416DC575202712CE044344C62BB3743045B69C0D1EED87E200E91762F2025B9CA724E078B93072F7DE8DC415522A904B28BAA5439405BADD65AF2DE8349C80BF24374C37E481EE996AAEFDE6B5C5FAED42FF88C49F1EAC94A19C393C928BF174A81E599811D3C404E9250F1ADB6F0D1F67DA784E357CC4FE56DFB6458E2F344F2CE1E0 -MD = 402A0951BF2581F0F88E7EC9D24D480A7B4E6CA4E790C724E619B695 -Len = 24602 -Msg = 9DE00BA8DD8DC771FF19F600CA7E955887F6EB44FD979D1D6FB76802036A7F6BCBC2BED1F6211EC00ED6C239733CE0649F1DCA444FEE94846F8B9EA0DAED02F2717947DB8FF091C7A9593E2F28146B37E42FA26E461CC58E8F7B487687E0A39658567A6B95D6B143F51D3F73AEDDE544E1E11240077C49FF6CE44C6D56088C32789D4888DD31F1BE373CA290B403566EA86C3988F566CAC78AB022147E1FB02A5F6E849EF2184538B9D1FF0F3E4589E2608B91F25419274FB62B3DC4F6F5883D6DD0467B8F2D085B3985D55AE9F7A64BD729CF7DD6F94A46F2DB1067EB59E629A85FCBC7AD33ABBAF807F3FB3440D282D8B18C58C73A1D3C6A1165406CD251E6885BE41B252326E5F5823DE67999013C9E3E621F8B6840C15D9822859F4F6C725ADD8F0BE28A53230E68B91A6C1A3C7493C0B79A85D384C843F4CA3A26224B83B9BAB72FA348F8A754CD5D8E3DA7334CA99612D7EA1905B4741943291FD3AFDB9B249DC8E866E0219E3FAFE070D6EB25869044660AF8AE3B7375B0FE4CC453DBFDE05CCE9936ED127D996C69CC652984BF564A0DB8DE8439F687BADC8BE7185DDAB655FB0626EB550143850E1135639F64EED3322C15FF6EA977ECAC0766DE5C7BB4DEF5F57BF51EEA338C7D915146629C47F897954F700018B8F51A75D0184AC23C818DC89EC96BD7B71E72C5001420B8211F914373D75D8C5D2CABAFAF914FC4EE3B770223784EA51331F42AB9B23D55C105A0143A2F65D4FD6EF410BACC7C24273C3285822EF5F802E631D593B00752B4D6258D992C0B8812CFD18095836545457B48A9969FF4EA18C127D8A3A22D351F49C358D856AB84DE039C7ABD4C56AA80C840CC56B03C9400B0DB73DEAF4F377C8CEDE51C6C97207E8F348C7CB2D6184882C5021848AE4691D9D167C22F68DAFBDA0224A60D43041052029C3EEA40CB4973632E5D6F4EC8EB613180213EEB624D0EFE9E4CA9A7E826B9B51A066EB04A0F2E584925E1CBA6B0CBF684E26AD2C6E369172CD9FEA60EA99C0A171C7EBB08F8FA25C0D2F35F71C5FF684442E2ED8F9D8AE8F4C633577C83C8CA0C4FFEBABAB8B92A4AD2571CCB62E09ADF27CE0E6489DBD920C34FCD3CF1AE370B0F63342401B83BC68194D8166462CD568AF4D0DD8B63B90E37C0ADD9919D52E17788FD095FC1FB7E664BA68F2D2D5729B1D4F751E423622E5644BAE58C11ADCFE42C36D6C9387E3C3D16427AB7B3FE470DF845F3F38393180ADC26EA935511DFFEEB4041250D932700C411D2F4E427A96716F31780C7CAF9AB860A70E0D4E045C0975FEA06242A158924817073C2A29F40206D7C622DCCFCBF0D6BDAC3CCCF1A8723D6FE234DBFBE3EB0970DA79A20DA22D07524BB25AF6A8927A469E4CDD081777E8203C71D9B60048DAE6273C22A3C05006FFE7DF64AE3A1B720848962A071CB160DEDBA24D589E24E79FC8DED0A8DB227EA14D59E6EE6A194D4B7EA3B4F371FAA503CB42F84638ACF590E5B605D71CF1B6DDD628BF4A1855F70B82682909DFB7DCE31771FD5771F6D5704E12B0A0F58D23DC4E0D3DECBD75E41621953F6D69600688F066929E14BB9117007FD8E6BBC9AB90BEF0BF6976D1A6C0FDD6D5FC934415C47CA1D75785D57808C152549EE5B51A5E763F32C0CE6F79872B07F19973FB443D7B34AA0AD3360B6F8341AB59100FBD543E6DE6B9085E7D2464260A2DA5D99B1ED92E36C0CD576D5360F2182EBB0A0159C08434E0D6093C8CB33C0B0D68964B7ACEDDBEF8AB2F4B6F0AA84E46F5D77526463EB57741C53D2159FAC7C760468FE841A3CF087F65A6772372D93E7BC0D0AA78C979A79DEED9A58ADA90D57F7D0C01299B6DB0F739223394EC630866DEA742E40CB192D7ED059B9B30596E01059CE15A1396CC7FDF35AC1FEE8DC82285AE1970E0713CBDECAACB1205BF33B134CBA27D39BF8E2327F4A65E44789986CF95A82251EE6DC7555E934F817D0441397D0A0863172CBC37AB8D933A8DB8CD2D39ADA7C97C6AB9101B85F6C99DB3A325691A94F38CCBD7DBBAC7C81A46B7C9B0AD2E4FB17B9A438941CE7737CBA9906DAF1E8C61F55D1B898BC47151CBF7E7D2F279AFF47AF870DCD7E1BF5FC69BB1D07707D1FF902603F8F1D6522DF07FD65AA512C2D32FACE6BD80A67603167887633B4BBAC785FBA1687917CAE002AA9D7EDB99529F46E79CDB6A13F26E2A590E16440965A77D7DC63EBD0E93674035F7EC250AD7DDCF995F04495B07C50C117A0FFEDC4E4DD862640E799C3FF310BF9AF6A21F1B2F2B6F1F2F47E5735595F5F9344D0B2F879F6057B3EAEA8C68C4C2AC97152BF7854D9546905685A8DF8BC498A9194888F4FAA902CA1561755311DE04F1008BDD9A35387F135A3DB1EB87C16527D0243049D89332DCA1C49AD162E375EF82CF54606560E00D02865B1F5A92309C1007F1F12DD925709424A815C2BF3C4D85B07F0E5BC1D5CC618BB05F794594014FA6D2B9AF52BC60DBE90202F30E231472B6E6B5938E20EF10F55BB2ED753070BE06885E2315CAF4673AF3A0D77B2B03D49DE84DD828F28A38C7F9D77A869121AF019D206D3E68C4EF1088A0BC2C31BFF6B82615D87AB5F158D4BDF53A1A11C9A941499EE9CFC21C17E0390C80BFC2DD2D013B506D94BD6905683FDF1B348890953AE0E1B24AE846C9DAE2C11140E7350C6A2CA4EC3BFD51FDB5E6F205B4F60B999ED30E16CEE08C9AA8D3A8FD25374F4A3716F6A0B23E02079D0D8675168EAC7F9520477DCF90924F33143110CBB4C6EE0140A0D5985FC88FF7070A4F8B5D0B5947B9AFCC7B256435240DA96AD9BC36B3BD545AF0649470BCB8A2BF6DA4011116FE21BD989FCE1CCAC359033203DECAD210724799E8BA360592F3A2C8917DEF2559A6DEDCB6FC6DC8EA501A1C0D5625CE2A307911FDFCE218959083971FCAB495048298A1CA250EFAF2A44FEC62791A46C9D7D951656C5FD64BE21C9F7F3D158787649190E7ED3FFE1713FDDBB61189AAB9CBDFD6DF09A3043216B7D07072A2ED9E47811969ACB72E6655A513EC9E0A20A58E362C8F2DE57F56E06301D6AE122F7E865A3CFE8F8D98BF879D361BF4C959C9B3614F85BF4A7EF203220BADD5BBF85D0FF470CCED027A150511546E6D3D38AD1BE6ECF1203182911A16F6CA57FC2B21986E15AE5A05AFA73E158D5BA168EB6548B549A23157E216A8C2E13A500D9A7EFF571A994E25EF411F05A0F867DB74AE2D8AEE0EA50431677C78043C6D4B180D192622E02110171AD13BD9757AD40BC5037760DD4ED28DAA0831CAFEADE0B9198552688516EE198E82B5F012B2AEAEB17FDCA8CB693E8E190FFD80A959662745E90ECBF64C25782771DA3B4C4539AA460906FE25790D139B5B3B9B7F3049687F1D40AFD9D4329E19F4B65EE167801EE24F0FF92704B207978FA82CAE9BDB4F8104318F2FB0902197CF24E3B7507F4ED67FD1C247DCDB127BF999F9C48331AAF209E8A9AB081B21F123BC9CB9647080AD7C1D147AB05F649D63978254A1B8532D8600E94703A669B0011D734970051A0AC413BADB6FE9410D67E72E2CD4E5A5C67BBD2344B781123F90AF23AE71A58053E9A68C34B50EEEF9A9837DADF5FB4A6418783212CFC6221EF1C54A769EF988C1A6B5DFE3FFFAD229BB8A662DDB780DCD4CC02BD1A05FC26C7883BF2B1F5623F2E590BCC228FDEB1573CEA85FF89B0939C219EC1AC6811D36A403A38559E16C295976076808883CAA5B2A850BA657813CC11E8760E73DD86DEB210C471FDC26F419F2AC33B25BFC558659FDE3D635FF05E5C616FEC3E5B3B45ACB8C7EDF50AD6F74BC432DF72386E554163D41935791CE8A453AB674D77608AA3961FC14DE2375D754714328A55BAA34C559413CE2C6B283A89F3361BA9C6709F539B7967C495F584E596738AFD49DCA5A2A4E6369B81E5991B3794DB9BB1703626741D51F72346B350C0DB03BB93BA8C5F338A731817A412C4460518BD192AD1ACF637F349EF34F647613B0A58FB34BB09F24D9C56EAB375CF6CF7BF1A7913FCBD49895FC3733303E7DEF82ECA69B6591569A69A9FA0FA0A73F7184C934A365A35A5A2BC6C3F491AC77335F547EB688953282F255F09459138B1B1167F366965DFDD6993FEC726E544A0032CB2279C4FE3D61922BA5497D7775535DBE1DCD45E688FB86D8B60707D98DDFF4FCBDAA967BDBA6833D3F8070E9077A2AC068A717AD53E1556501083C9FEA07890DC835B2CB5D47650026902DA999152542E978DBC09A248940D88DD1CFF76F584A61A729B33E0AC78D810DFD6997F3B7FE05E783F11ABF3FB6FBE2BCFAF7BE9D5DE3454D1A046EB8B626835F3BD00 -MD = 55674773E1A9D2C8D616D7FB6DDC9AA63ECBA929946ABF2E31E50C4A -Len = 24665 -Msg = 1861780EC71D81F63378D931E7FC38C14EB99D55FA162FA5FFABFCF6EFD88E9B46316B58E8274D1D3738BB38CB5C1315065833632B18207FC7188FFEAF1975A3E0B6562A6465E7F46CB2B6B2E0F81D7BA2D10487858ED95CE9D84950AAC49F4D4E747D10B676169779B5D761D7889ED4AE4F65B8277A8054999157EA1043C72A1AB94EEFA89865C49AA0576AFCEE6F458349379157F4C2789A8E45CD73A5CBE7516A80821CF306571E223A8CCFEB47A050879A44745ECFC45EC475F3F6DC5B7671CACFE93730D415A1B8E76F3244BF71B88D7B9282F00214A75F52AF0025E23F19C6F4EC1E28F7509D4AB804A1B411FC1C1603E99A7ABACCB7754B51F385D34903EBA203A049AD587A6CFE74A6E918C367F42CA33250AC5F66B909A0562DF7238FEA42A0A8A06375167BC3F5AC965F02D1C3001458F3B641FB7A149A28B9F7492902E628C8B964C602B37C9FABFCF7E5EFC2F50CB6B4D5FD02BE88620E17F31E42D8D583450BB94F3014712C82CB6A113574414FEA55960626C3A4D6912FCA9D9C662A01EB2DEDF0F9FE487B84CAD560A8A80AEE86FCB51810171562E6A38538C7FDD313DEAA3BB610BEB876349DA7447A3D5F26C249F0C6351FF48970CA74C5291EAC536226589B5CE4C158E97A0CD39C6330CFD872230A20BAD06848825A91AA2FB9D9F90D4A8CA32E94EC6BD7084424865A0F64BDE006A904796EBFC118AFB9DB5A6E5382186C2497AF5BC202E7C8674C85E69FF68346E1CE981A95847F748EDA6E65162B9EAECB69828491DE1A864C4301C4E83E83C9F06576D5ACD1341C82F19FF3521236A1C52F4AB83B7365A08ED631FF1AD9F949F818C26271945E5DA1ADFA11453C4FCDDCDA7C16464029DD605CFD883B7CFE9252C82CB58F9A9274151FC96AA9D606676FE1946B00A6AA82B319D7D145A6D0F368EBFC9501342F2FB891608FC778E206D802ED33DA9FD165122C231C69CE3B7215031FD382286C7A0BD3DB448C4C2A18FBFE3AC49BE33F0DA86D57A32FBC3BC87E716EE9601A7BF19E9145B5FCD30882B4E0B6CD40E0CC6E8E9B43B8AECED1CF7775AAACE02FCC1414556A78A1B425719D237360A90472C79C59A8AD2720C7C8B8C12A2C4FA665051A9C5C26533ED02DE165AF57D1AEF9D4E8CF99D2B12CCA19AEA6A0F33013ABE1438D96C8F2ECEF350E4AA011207B8585037925974BDAD9E5BD82633B9E77B2858EDE67C4DCC8223FD0C63216B3D5E1EDD6E85F2270EE50DC90AEE51EA4BF862636C5B27FC1698D49D2BA3B8CF33E4267E5C8371696C780037C9F59C6D30ADFCFED01CB6D6B423C219D50322E4F0A89D2ABA495BF146D6AF53306C33FA99700100264F0F5A59F23A1E2F5D74559669416A8A1259131F9220EF7A2FB7EAED4AC20C458221541DF568C61C626D85BEB274940984C74A64F9C9D9724E92152783FBA7993E69D2069E76F6222F09B6629D4F1DB985CF60204016DC2108A3F57D9B6B0A9205F1C94D9E8BB4D4EEB33A6C7A9B767694A99035408F3B46003334A4D90372AFAA464BF468606C352A33A8CD1155BE1CE4666B62B9723F45028DAD82A874503B79AF60F26A0286B6BD4D3C350140D2BA9335B48A79DD6620625914C96895266E9428F11366FA433ECA81AB44F9E994532E72D5429D7772E06BD4A38DA6CF03A674956098A8E6862492AA5BA54E082734CAAF38BE6043D67F3F65B5BBACF11B1A210259256E0003805D53E19779B22799B1388988DF0F8C78853F1DA448DFFE2A3F856126D304A8C118071C4CDB6B81E34C61C5E30760A365E1FE54F62322FDCED69F9428479ECF4F6E824404179B456B3863E04325453B966FCE283B51DD2C19081B1B95C6CDE2D4F970B649F5D9AB9C3187BBA86F60976922E6B1E4F7B47B24FE4C434DE7CA76CE02EC247F10F1B09ABCE5214501272B61AC284A6C106626EC1E9A126FE48D1F95A350F4FD3317937FEBD93955C300CB1B5B89ECDCADA47014E934E64DB32CEB920A4671E2ACFD0E4FE752B7DAFC0A5127096866E9797D3E26F4F97C13AE8E84C41878DF097B24B79BDE534FFE658127385D2700FF6E32592C31319AA45653A484A38CA549349B488EEF3292C3224FEF4FAB1770BC07C78421736C3088857AE7B11A013D167964C0C0E8606D6C7D9FAD8CB489007662F5BE81FFA4A96FABFB33072130957078845B38630C6905624CEC7B0EACD8352D74863724F47DB79E96EEB754990FA0739E855B22056BBA7825BFFA51D9C85D2B3E58CE06A7E12B894DD0A53ECA0B2C7012B89D1BA09E322373449D618B9DBB9AB2607A0765CFCAD1AB99C66E057BFD8F7740A917B86311C3C03893972632AE22511E71F804EB1B9CF3EC6C7E902C09CF3A33D6118A04DF4E9A68A87A3F96674AD37C3F333183D78DCF2E11A1520346B5AC7B312C8EC9DD3B55D21674A7CBD8033C3104C270EB6296B8D75583660A1F007B640AE8DC18DF136D5910383F81A5F590818F3586067BAA930A189ED3BA950FF09E1ED2D1D18DE1069AC627C2AB22FEA88A7CE94F005122AEFF0CDCC5E8447C947F127FD6A2D1E0C53042BF3254ACE8C1653E0214FE01EAF974056A8F7A72C3CEB8A9A8C9C2692DFF477D21C60FD38FD9BDB0FDABF7F38EED717AED30A32DB42824E78F3C7E79EDE141C5659DD056515105FC7A2879E29D96243698F0DB3DE3752ECA356C57BC7D08AFCF45B698B3F8EA95666449A9FC7E323CB88FD03E3358626F54C1140BACFA1B7110AD2FAF99D15568CA3F017C5D6FB60A7CC7394898CA7AA74551FB5C3A59FA221B1737523605D46026ADC633F5528F01597D4D4A20CE164DF030C1B38E6105175D401E971B26CB30E7EE07772EA13F597A8F0B6213BEAB5532BCF72960902B780CB18342704CB4E4982D5851938FB1C491510C9575DC341AB958BF0624B01EBF2F1DB2E4F1E8C87589855CC20098A9BFA7B576020ED7F0D9C798F4822923A7D72CDB630A8E59AD7E6FC9320B7A140091E87300F1CE4B9B43358D6A707098822707BB8343A29059DC4A6FC57D36EE966060FDA62415E615A1BCD71AFF14A06FDD0032240E2F49048F4EAF021393308BE0D05B7BB25D858D4C8B46933DF7D00A0E9E501725625904AAFFB031A23AA7ECF6AEF46D9CFCE321259AD05F48AFF319FC19E0E134BA3E9721EEB803804B1E8C18AEB2326247DC84E9F2D0ABD2CE3ABABF83213244CBCAFF97614990AEFCA9B8E9C6D74537FE2A28C0634DD8FE74886CF2FD874B8C60E7E04042A4224EEA01DC0E1BFE67C134996F7DC7E57C6D7F9B141AF23D5915231B5EB2DA78915291BB0326123BEA33CA49E98B90E61C02F80670C4C5E5C6C5153E21C79A448DD896E2104717EB067A139E7F2223D634EA54794025A5BB241C185B9BC72568D2CE300D5997BCB857DDB1B77F45621C77E3F8612587CCCCEECD6C0509FEAE033035E55A35C3FE61B6D909B1027FC809B3033CDB7342635F940CEE18F7D2FD7DCDA149A679D0271DC270947746D042C6CDBF873E8123F004440CDCC3954FD849EC71E5E6F29E3BDE184CE2ACEB545ADA09981141EEC7956B5A150DF477F8C92EF81D81BF345A951B7780E7F93D2692EF0BFD13D39AA4641B911FAD751951462C6D19B3C5E3BE49D5EC905728119020C38F80C5429540ED1F010292E83183B22D7E3C5F1FA2B699990AF84F3609CD0ECD71B3A8C25E464C29265FB9A8157863463FE06F6403233880073ADB3270C7412D9783E53BB236EC63505E224CC22D752283C3EC90CE135F3C1CD7AE9BCBE6796A3AE506A327536AE01957BEE47127306C86F9310F7082AF21DCBF782D8E99AE80F0EEE142D71A2965AE550FF918A553C957995F2500D14732D0BB4F8BF5AB3D061FAB1B512C814FD47C3706C126289DF531F84DFC9314CBCCED5223795C7EBCD552879C8839A76B73AF42DE0D68B3AF851B5840B5731085E61C902C413FE188C08AF057678265075E3D8DE8D40AC2642363C5092BF36271211FEEB968B1E792A3D98C55850B9E2268EA165A97771E07D27064B57A0014D13E72DB459698843F8E05A074C39CE21AF187B682F4ADD34DA8C50EA601E32B8D8B161CBE29543212DAEFD1F055C5CE4CE456891B52B2666D58FA66DDCB13A50E67F387B244F88E1818AD76FA72FA8E7CBD151E5517FCE15494E717B11E04992338C6AF9AC230D0743289A13B248C7D80A11EE2A0C2810E58D7A74CECB9DFA8735B99A31B0BF22B3C067BD52FF903E8CFBDEC41948AA7AB6CFED33972A21BF223933185CD6C2DF9652AA6B3EDD8F0A2B547B469A894890704A95836074AABCDE6235EC08C225C9CDC524C0656A100F615A9BCD895E32FCA8AE1F0E4B650FABB7521000 -MD = 5E08FDA331DBD52935CA599DCB9C15C5250E789D850AE3B3A97705DF -Len = 24728 -Msg = D339611E4D57F858A0B749088D129CF1258C2035EE049D5F47816C0B82D640458C8FFA131AFDA45BEF3105DD60469A70EACD18EE594CCBAC487D94085E957F8A82086ECBDFCABB8ACEDA5120A7E15A12577985DEF9CED321A1C8D350255CCE7D336825484C86F9DD1823565D2624982516A6027A21FBA2702571CDC05C514F6B9A7138AB8A441D805FD37BDAFEEEE30159130EE5F90C90DE030F9A904E6D2A03CDBBE241F0430FA813A251D44643C04C4BEF5D07273C9237F70530C30CB269D7E7B6E7F10831069EEE541D5EF986CCF0E1E870564FE558BC1C219DD870AF2870321AB62DEC23118B77D16418465B54EF71A68DD17E2A0AD16E31B618191577BCAA5C29C2F36C2B56DC932EF2F8EF641118FA3A78B65B5604E0913A48539C4B26F0B5E73F77DE1D6D86EBE0038C7883C2F69C0FF462907DC3B85CCBD87B85B0678139297AA478F03A588C6CD9BACF2D5CB5540C066A5D52889BC370A08ACE06953C2398E92E2A6AA11616B40927C42203326B3888CECB70F7425C1038E57D6D3BB19BB643704F83AE6A55FE8B3234DC25175D243FFD7E16BC5CB84E8579E619CF699B54BF98890C0563C424477B5B18E59314999FBC4C13D2866DBEDD9836C11A62C4E1E5199BDA93D2C90483A4FC3590BF66472BB8B1F499DBF94A56D8A2D27F9607B019228ACC75F8DA8F3F9A24EA0FBEF55CBE6C3B55506AE4FED8499543B0F04BBA76F7F164F31DFC7681051EF05B32846933CE4C1261659D6C414BDFF597AF14D01D73D4F3270DB309B8E8B62001EA17B35BB7B7CC7CBBFCDC846A3D19929B7FED5693089A3F81A467A539BE1CEBCCEBFB5B384CD025EB2DEDF5C4390F607F7C9EE3EF273D7270E5150A241ABEB97B678CA3808F318DA5E38F6842A2A3C09CDF25C8D093CAEE7C5ADBAB436B8DA15AE3FE3F0B84AB2B43CF1CF9AE3C0D44770282B6F1CC1CD7E82D195BE2A5E5AF40735449F6948C7037F6E1733189984B4D1DA1F0BBCBAB8373C3A9A3C0DAE236768883634EB42E574525264403E90A503A7D890530834B4701ADC1A9C6B953981B9581721AE37AB01CFC2B9571F2D65D4E35F3381F7F05F2CDA160ED6143E25C6D9D2AD6DC9B3F69ED693A325110F49192E169AB5EED6BE88A3E0BE03D1FA29FC002335979971C16F096BDDC4D88EB2300BA514B167D4A9DCB353D7AB0C3DB7AD991415DA362275D3264360D0568BC5B60B5EBCDAA5BD62EDB040C6583A9B997D9838479A508F79E9ACAAFA63F90660FB0C0D0EECAA72BDE7FC7AB4B77D29C210FE6AEBC6ABEEC7F201C8C64CB306AEED1110768B3360B8B2F30F8D1D2C1EE7B5DFCFD5D56515F3F617DEC24F56C4FBE6604597EDACB6A42F9447BAC63C53B54010B5AD6F3A5A8C37F89CD345DEF631450C2B491E7AD6436F6F923A0CEC85A76FB04C0B559A6972284145954EC82CF84B0637E4BA11B3F8BD68DC125EB5693A3ED2CB3A62959CBF41C9409D84F2AC9264E99FF695443FFE689464B349B299AB240D542B29CEDEA37F2221B5444B92616386A2BC74414395B97EBD3DF78C583234883AF5C7907CD68BA81E19AE616B4950326E526CDEC80443497B1BC42CBC4111573D39ED236323A8EAB36AB7DD45D65DBBB9F5F7D657CCF944F00CED4F12817DE3D031960BC334ED3F864643737B2641C6F392A4A60527252272E1334BCED47637DCE95292A8E4273CBA03E17E16670225C2E2733D7858E2C7D9DA6E14333F2917C6DF92F233ACB60553BEDC68DA7A99F18C2D3854FEC8C0706980C5DDAC1174BEFAD6A7DA03DC1DF372CAED2B7B5625EEFE93D6419494C3DD1890113E190719ABC2B695F7F2AACCD372EF78181C428F19918BC2E2CC16FD97F1AEF7E4FC3297578E0BE19B8B2CE6DDFA200E593692EFA8B11FB5A55919393B98A2FE31BF7B80701B67430F1B33911AF41504B2C3CD000E3EAE148014C451D166C47B6FE8266F44E62ED7515C6F30511743143485982C3245332FE19890FC8E7DB99791A36E77ABFAFBD0B65CDD861EEFF1F29E142DF903E723B2EC3B4A4FFF8C5B4F3F4377E3837CF134D742D46EF148C986DD161A939482FDF40D4BB4A4231B7D5648E2DBD8A9D8516C6BDA0A370FA53620D5255341830B84C751E31B8E17F3FCE027906AFCC2AE7E5E104A1109E86FB20897E3109D07E700C13E6FFA7016EAD35969245A16BE032CADA0F2327844DFB3B45D9B3E9E309A98DD927C5E75AED3270714041E35A703C3EA7C10348FE521CFCDFB7C02EA9E123B267C22F091A4B98473330E93A362C358F92519F9F42B0E6D2AAFA0538EC32AF4A52358EFE45B59A9AC05CF4D6D82AF2B88BBF327D3EE61A4F341178BAD4B228CA86D9CEFFB459C64EF12E5C5339471054FE09DE0933595C2B1A5CD98581675DFA0B9C04DB65DDCF452C49D720C0876BE88E9D7232737865C598A5D20862D749D3807A7F052F4FC0E0961FF314DF69829B3A3085148A818B0F53840B92EBBA0266A42719D49902775B72D15162B1643F80993393A9280A99E72ACA1FC8B2F8454E566BC79CD9075FE091F5EDB4EB0DA5E0DC5C4ED85A8FC3997389D235CB5436E9A8AED1D4604575834C1EB2FCF1378E465F77CF037503639482A285A9D0B476CB9DDFFC0B82E64BBD175538C2647382D2D7587225C845D8C14F3874C1456205071C0C0B3965FE30E9CE3B616E4DE78B3953A9EC525E43CEEACC0C303C6400CB4D52FDFD142376075D26AC1123EC4CFBF82E77CB04EFC09CC95601B14681C90A7B0840EFC819613AA06FAFE2DAB4B036951F82579A02EFEFD08DF0EEEFD2146080734961725B6E917739FB80DEB9B8BB6DCE39E20372CCC079ADD9030799061EF1F011699445570EF0CB963483099EB17F22226698DEB110495C159EB63DA750D231E78C4A7C734941E443AF7F2B5A3A06CC5334EF76743FCBE8EDD3939ABD48CE32A03DD59D2553BA408B444D9599C2358443294C406D03D86A23F872992A1C455027AA4D7EA35AFCE35AF0A40A8B58CE2C149C00ED49DDFBF01F1EFBAD3DB59D2214B795C7F78229889DA77C4A4FAAB944EBB033A045156AAEB5B457BA7FE0A970FAC195EF5D206E28FF9151310CC91937FC33E61A50755AB1C109E4DD87DC511964F970784BC3019AFCF015C6EBADD5C4C32256311E8996FAB7DC3945CD87D55FC9C851E863DAD371D6E9D69157C5040BD702F828C088C5A8E4E35ED19E8731EB9ADDC7D31EDEB95E2FA57EC514D97FE5914264DD0016BB430FDD7DCD5A161732802963BEC1549E5CD5151CE9C8BD46B26F441CB68BBC9DCC08C139DD9ADAC1A158B5F9E54D2C20F01AE66BE788C10067C60E088FDCF828F7BE908D863604E19F318389E5AC148237E11BE711FF432869C5A9082E5FD9FD24C39E57863D63BD85D5B78C6329C6649F562324398C21CECA17CC78750AE9ADAB612CA3BD0AB6FFAA9F230637927DA9DEC3077AB6F425D21EE971A0744732F39ED82F6B06F1E84CD777F1910A9290A66C77264E484693108D973A25908A9701C414920CB0E3B82A74D1EA8304E8594C777290CD32864738C657BDBBD57EDF42EC9A2F522CE911C1378275AD43889CC26E9A3818987FF0671A7A94573C013EEEBDFCFAB5D9BB405D05B66EB641C976A4233169A46338895467F36F9FE7FC1CB3EAB830F46F261252AAC0492C0699443303949530687533CD09CBFF09DCC8F12A49E892A47AB0A2BFFE1B7A493BFD66D9E4822598781BB8A94A4D7D63D77C8F1B4112F89CA215DECB610F1339184F8CF66BB59169553013276472BBF7753A7EAB046F55E720C0B235407748B8CFA07E748808875A896661A54DDE939E0D64CB3031A4D48D565E24A56AE117ECFEB27928E42C06614B4327B9261BE4AB24169B26F9A7A463A42F0ADA305359314E7D48993EBFE46FED1EF6F65F733483B883B72DEEFD5AE803A0CBCE91E5161090DA188C475B38379FA2CB191D0C172E966376FC8C7A5EF4263949D75A955EE94E0391E70CE04C61D3F4F49CC5F1774515F01BA6CF83BEA9BDFB7F158F6CED3BC33BEFFACB80BA3767E476F3180C392F17DE1F72719466B4E814D7570C9B08EB3F053D728E5EFA2C28AEB4FA557A2C809E357F9CCAB21F4E9FC3291CEE7CCDE2EDF7B086F844B531C6D6D5744AB2C3FA2795A7C2B26A3FDE44AC46738972D374E534D1972322D4DC8B349FDD5D3AEE827BC4DE6DED715B87F1A26FE09FA12A495919997E07E75E268899D599BE0FC699433619D73C63B34A377F6CD511D095DA8ED29A9FA86944B3795BB69FB8F51FBC34D07809DEC6FC646BA63BA48322717A1EE01EC9B1CADCE556B07E943F619A073FAEC003ECFA657D7C0086631F41909BFDDAAE09054948934225A3 -MD = D6204196408AF4C73901E8F2CB0D0AD281FD6071301C6B7046D8247E -Len = 24791 -Msg = 2CC4D8905CE248FB45B908F75276112E1ACF0FB25145E562B195D810E30B1D3734FA88C495BE8469130D9F23B403035F56526E342ECCB7B1AF25AAF93B4F9CAD9DAB920E6CBEAD1DA244D87CD6DF2C64C5D0D3C5FB56304D7CE12E49D560F43800A9B8C7553013D40F8A79C6347EC9841AEB254D00D760043F98B907296D8C45D33CFA80F777E5C07722AF600895082E8155022BA7FB7E436223182CD1F355C7B78EE6BDDF1476472FCC1AA5F4E0C17CD80D755F62FD70CB77A79ADD19C47A33E200FE32B82383A6C80E87BDEA4A420A360229A83A029258E1637B8044F52DBC7CB35EA5EB43B03D769C899257A63147B1D9C8B8A77F8597C307A9B50BAC3914366B878DFED2F6258DEACFDA8246F12EC9EBD9F6DF51BA26A8CFB568648459A689026FCC15E6A833B9DCD62A29B9835FD1423F943789E7D9E589E4810A2A85C88AF01149DA1D07F7194C9DFB9C8A1933F944BF77EB4FC7C866CE09EC158DAF11D43A1574AABE90A122FC668FBCE2923632637B5E9DB037542FAB0823407CBE353CFEA8F206D6CD238A88C13CB4C2DB7B16D7D7289DABCB556DA816DFF1C0128C545C9891E46C452AF99AB9DEB4380287DF0114DCD8FF632EB10406A437DE14D98ADC0BE716858505955571DD16EA8B8A36F7146C12B6C9E4F2E0BFB98D41FDB1742C2FC6ECB58EB66A630E3D84BCF481203093C82485AA46083FD1E4651D3CD99F1619A1A3E94F72B5A8F79340B52D2B5F3CD6330DC4A571BA27583DEC13776C6367CDFBB6C8CF964D0DA131BA18E7261625944BC793AAC21FF613C6AAB3D4E4C37A52F99562B05EA150B5D7EF685B4EC346C9B8F0833F84AA7602086AEBA3A7CF693A9C5FE86A0E3BB7D6EFC722382746745EA07D4DB76A0C44F16042388861277F6E16EF3D54A021B1728B620F54E13EE537653842E10C2D3F2D0840932C0CD7445FA711A56CE93331E3C6FEC8C5F25C3B34B9DC4167635EDE7E368791B4F0DFD4B91090F71E6E59AC42D3B5066FB7FA145A7994895684B5D67874335BA02ED5CFD1245D382ECDF98C32544DD6C6963131EC5F4C49C5F392B85AB1F6F8E7F58061515D54BCF1314C574039CC74DD3B3E6A09274F6D055C42DE881D9D01168E217833AB24BC4CA7CAA6E20F4BD4A3EDE78C91F0473BCA57241A6F37F3CFD51F0BF403D1EC90AFB022437285D260712D26FDB796420640318A9951D63A845AF4E6258AFA8336176D75452FBB2609D26845F54F21E136B576F3A50E410478E7CB035E78AA0AE1FD80B5D05A7DEA1236A5A1B3D5C7BC4FD00EA2EEB8EE02827F576F413704F3E40F29A3410E14AC71516CBF2E9A005151741B0623057AC7BF70B542579FBE65A8A22221E71C11D6AEA63D30B0E6AFD7A47DCC148B2109D2569B447D924F22DE81A096AD3C6FC0CB4B596CE789345A7A0D3A144739AEFBB74496C7E617D5BC30492C027EEA04E5E6E9255B2CE54EE527320F82B10914AAE6D8707330B30E3A69D88D5C3785C84C5EAB0407DA2D24AB851F36CD386F38BC4C76D67F30427FAB5DE63B942387FB37116CF2778790145708B8A453566422E26634595E46ABF26C881AD166DB45088854074A96482DEDB249A33F068DF9F51827BC87F14205654D0A4FA37EF5B3ADA371FAD6341215179C9FE7E26427CCE84FDE3EABDDA514951C231154D060C50B7B22F21B1E9349B21BB171C255A7715AA505015356C6D87D2C43DF428C8C2213FCDD6BBBE9C306A4ED02E610B8B015667606536003B2FBE29CF182FF4925A867493CCAC90C98BD5B9C7214B59B61594F33B1DF4FE835DDF7E7C552EC1965C7FC270672AF9A2939F94C68654E1E0A5EA5468355BEF800F9581C6D330C9A140DF99A740AF4E63229F6F859155A6C5CCE81BFC9C9D23A4D1BF936D80D093BBAA5E6323F7EF1A1C4E443053FECBF951DA4E5FFE01557B46B6E5FC1DD9969960FDF85B281F66FB498F09E23DF37B879C60E9C39486C71A6198E8E1B04259DE353FC0F3499C20E0F5F0DC2F5420ED22F04D69D404655751EA064EFE10C0BC1B063703CFA3E37E22809DF7A29E8BF4377D00BAB49AB24B6B48E6E35A1A58574B38FF3D64D663079F5B0CF904A3D1BD90C1427B342E85B7877E176408A01906B443D91F4900FCC617DF3FEA24DEBB0DDD40727ABF8AF336B808E27FB569E13EB334BAA7D515CC682A66A5C8E3316AC70897006EDC7D02699164191EFCDC617FBE88AC1E2B7459CE1CA275250ED4A869D83F694B268247EA4D5B165504670DE83D50C01A70C233BDFF5ED0398FBD42E8D21ADAC3331D79A5C66E8217AFC7AD1E9682C722F49083B8ACC2A40C524E2684E7860E1A729C272D9C97F2E35B6B769D8379C761F6C3686183A163A4BAF0CFFAD488339C3E97B9F9060D2D8F81FCDADD35C02826844A68614E27B5B8C7116E44E82C1CBF15BD4BA4CCF1203403D095EB2CCC8D6FE3053AA7DA750E001AC0DD5D37BF42F75FB52D9954547D31ABF6CB272211181BFE08CAA3B3EBB8EA47877E067F5165CD714695A621F0D64F8C0DB7B819BE576F7C87F333A0C1C5220AF93ECF24138F48DF3B98D71BCB772C2C33BDF39E5B6A230ECCA7A83E590C2B9ADF6D5A19652E2F7BA00BC9FD8F8D4DD160506C9B5080990A3DC41B4043499E4CD218808CB331AFCEDDBDB97756A6D1A0A7AD130A54DA43D51AF565189DA87953A564724E52CF835E651B42FDA3983DCB8CEC67125E3CE4895337946062B4E584CAD04A31F2B687EF254F8F33E2CF7DE592D8862CCC439DF2FD3C59DD7E7E1E672AE0774986C3902B2430A276E07CA02392EDA2FD57221318158B2F72F4027BF174E2B0237039F79A3F54BD8E38CF6A3720448F04FF1A93BAE4198E87FB31ACBDC90EA2EC2CA632F877719F668D12E79C53A0ACD1B1D4591E5D72CAB5877A59267D4B47DB3762489718302DCC7B8EFC5878C8358228AF8D2744796F19FB1E6F8083E9D36AA3E4A89D087E6349B7BB3238DBB25E14C7E8324F98FE1962B7F3B0BC6D965884AEB54D7D7024485F463562CB3874AF376560D88D76594495BFDEABEF429FFCA533A43F8781CCB4D64F141A7613E5064976C64F0A0D89293638F32B8F735C825C3FD948A206D2B019C5261AD0B9FEBDEDEAE2D52F5AE34D1F7AD159DAFEC9A3B67F760ECB10D076D417CA9D8DAAA0FFBC254A1EBC7C7E90A15DC09CA16142C9CEDE77A94B92FEAA3BD2FD2E0EBC54038F7F2E9319A2761F621EE814E5A53466CCA01C9CAA0AC9BE558C0EF8146522EF6426860E693E654EB048B3DE7741551E4B00BCE39C60F9561B67978CD3AB2D3BFDC9D28EB631F1696DADA5B003402D802B2A48F9163B83D9B089E69A50AE106E0EFBB4B22025FC793FD3E713494EC7717395196A48058026E04E9064D719B3CDFB194E7E218A353B681B3CC81FC316C43C27B394C8A4B90FED61523E0282B0CB4BF6E250DDA9D3B942328612DE1F06E2CACB8C4EA0079829FB5AD27C77114E5C88EC47023B25CB25574187F2B9E4E51750E42CCCB3CD98386FF8817DFF3EDD578339BAE2D2E4E70465E9C4DBC7885C04B3894DFDD805412DE070FF2A89591B06E776A0F6AB6131D4058F34B76BE92B69608535F1A02123C7FFFEB28219A1447E0209424D29124B76BD22A790207B0C999E45A1DA37AA1F979B890FFED7AC9B37333A9B44D3C194CF71D1CE979812E9B0D6F2E0C28A20FA635DAD7C6DC38866ECBC0ED1A1F41422B54412C52898D6CF5E3F074624B8E8ED25005C3D978BCB48FD476FF9BF25ED588FCE2A779B849CD5709D850ED45201958206A03EF3576521F980CC955063C828041B9D4FF14DBFF5AF91C4E42C714E3B18F454E93A3080EB011FF8D072193CB7401E0C3F5ADDD8E6442F7C46ED21820B0623C96949F5AB8322DBF08C06DB3E27F8B80A2AC2F9F5876B486B879DA284E784F4CF797C0356B108CC599B306B6DCF1D521DE9A663D996F297C27ACAAC5C037FE9B839D3171A666FB3A193F93D98AC801D3A13BCD5AD280DE6A353E8C85DA43A098F5DCF8135C4982F8D80947223711AFDD4D34CB9BE1288ED91131CE96619DC564F356FC1B59F77A65554BBB6627B81D426A828346E47C4E3383F4803E8D952EAAF993FE19FC496F6E3A4347EEDBECBA7F4304DFE5E0F1F180AB815C220A2890A2EF7CC56F0E217A9DFFB1C620374829F68D666D76BF739E6CE81753E8FD64CF71D8AA1FFCFCDE01F9389BC746EECA8D024BEB8B8A1B2F48920C413210E9611273FC7CBAF547480BF6D5A3BC9BE7AE94D07B8C8D05869CF681039D6EDF942C1C6FA39C0ACE5E4F6E46A4D1E94FF1034A534E3E9DE8650D08005DDB23B07F74B66063E056A506E5C0D84E0E7161E9FFCBEE964855A07B3FF7BCF262BC -MD = 33805EB338F912B905A0B545CB18647B05508C2891D092A22EBE7B1B -Len = 24854 -Msg = B87A454D1C75EB239DEBB2A23E68D8282401EF3D06EE0A39D660487572BCE9EE8EEFB4968095CAEBC8D9B723408044078B83E6C7DCECF41133053FED2A7549C3ACC4BB16E069C14F44E45B8AA68B663A15F37B7410035D0F3FD011872DB5C595D027BC1D46389AD4C0E3A19D1E970864ED6BCCBD814F01A51FF1838C8FF781FC833DE030CF6B84731140E6B22DE2064241BA64C5D2D8AFD43A620D5C96617527A34584C47EA0959CB4E5B39A0B68152F21186C9231DDBD5A74AD1F73EE9A98458DE8CCD31DAAD4F18E39C4BC357CC2F3D5A7D87233061CA39FDD6DC37F98A1F678C1035B1018DEE35295C05A015E5B645CB3E01A0E1E7D194363A224E77E7B93F44E18FC0FA5F11E7C13D631B3591329BBE1B4F82B410E882BA7F63D65488C5BA8A035CBEC17A97670989462C57272E39F99FFBB0D19439BF1F2B0EA5CC63417C6F675D7FAE75CB10C708A7278B31D58ECF19600EA9546A97989AEF4CDC4B9FB3176A5B33F5285370573EED83E14D73E1C83CFB33222E6163B478E17F249181FDD8A3338EA94A76C0A760D15EA0A361607B7D6B7E43BA5CD1DAFF636D8A34A1E4E24EDE73EC3426146FD0B550157B6983A3D25300F56CEC9D99B775E9ADEF7BA68328D98471DF86EE693CACEB9B8A46D06A6B80B45470F1C648E664C025AF9F4B27661D3873E9F8D8A0E622AB3EE78CC9130F996180F4A7781D7A89CBB6774ED9EB112396A588520A5AF53165DE613910BCAEEA4E7F40817A88A28C538177321865938D02BC5E3C115CB0F2FFDFF1EC589BBA90A04C13774800A484A81A31A7F91FDF391CA6CF056CC54DE91094CB683A4D59C9A4D5AF589B1189930EA93AEE5025FD572469A159ADFD2426FB264FCB5E17BB32590187B2A5C455BC8BFD03BD9FB5661159FB965AE36A690F4B4E7B5BE3C5AB4835D57EB62607F5E6B639808332EE881BFC0A2C3AEC2D9264AED1172F55364CB12BC89EF4FA7649595DA89B901DB4E526207B022AD81528F6EF42D5CEC3BF73CFFC1FF02CA834F7969E5E5F481053BC11488AA4B7294CFE06E6904DB8E28AE9FB65794318C5F742626ADA04676689AD6CB1DA40F8CCDC325C151CE2363DEB364FF4F533530C6272D287FE96D463F2617B86A691D970549362E277B7BBAB093670EEAE00551100FF31A6D97DBE7379F4C776493D5F8320540C0291A003D00CB191B30BDF7135434F65EFBFF138C5969075121A58E6DBFDDAE64B0AEE681278EB52551014DF47219D710AC37B145D29B4C667CF0591D30D4BE3974B2A2C70424693A89FFF5083310ED561C956E5EED43095AB2203501863A3919D021C01FEDD26C6D8766C359FEE4521B8CE526BADA1185E0C78449FDBA199AD2201A3CA2243228D23E763DA1CE1D2FFD726A78BE5550E8DF5D0C267868E427390A923CC58F4D9D888EB93F16A40BBCCF30A899E3C27B9F614A45F163BBEA8B37AD90127E05EB37F7EAFAF50EF6223B475B114C23EBFD31F6E72B96EFA58657ABA78FD0D4B5CF59D2A258B5D952458B3580D148DE205C48ECB89BF2E998B57EBA50286EA0192A385DA891B23C1F2CE317E76236EFA7F4639E2F82B4E15969E5E62244F11AFF2A24F32D9CB034E10247C8284BEC073281583C863A0FCA3112B1FEF912FD8764CFA0439C240786C39BEA76CB8EEA85C04AFC4391A361343791E7F640916ED27FAD760D8CC0BAB1FD99ECFD6F90C7579198C53621A043BF444876AC875ED133DE11102C06F5B66EB4B10F5B7AABE2DC0B51255242131955A7CC9A4B8683B7C68C9D442F07C97DD1CD1508823A8FE56904F351C9481B01FEA4D65E49B301C24ED1AF75B8CCF4CE1415FC550C07C3BE3A735D162F8B21CFD07A4349A1D5DADE8169751BFDD017B9B85642F4359C41BFA74651AEFE5954231C5CBDD0ABFCE28BE99378D228D71D1CD8AC564294BAB385EB0709AB561A70242D866409849EC57638AD4023AF638B0A3198027433CC7650781ACDAF054C2791F9D5E7BA56733F5D62645B416BD73722B3BD8E4018A57E776D4A491B2C2CEF7108E86C184F96E9B8627B6456A8E78AD9606BB31F9DCC8EFD075D24CF924757FE4BC8B8C7EEAC40ADD4BFA4A3696D08154574AEE2F7DBEA6BC5DF854FD8A6D4884EF7E6C6E18ED0933740B63FC41F4DCEE2AA87973F01F361761C57BD9401FFB98826ECEF711A7B81E49E7CFB3C5A063A6FB19053267D0727294D0D63040B6E23B33FA2BAC3754B4601D7695D406265F3112E2CF2E12473B5D369D6BEC7816155181F994E884B4EC78F9F583EDB508B5195F13E95FFDA2C80036998714951FFB7821D1E469DA7A4BFD7B9BDFABC1CF411F9D4C9FFDCCD10175F19337557C089CE7D8818CA978448BEF79EFC73054A5FCC08C56B3F127AB59C7F22AD3FCDA90CFF482DCB54966D84EFB9D3EFDAA4372FAF84A27A6AAF0E66F549842C31DB8215EFEB4ABD36266E64F182F8E3CD2B974EA47880B65E225DDD5ABC28D7C3BDDA51B6A5296072BA787D770F8079A656AB11378198777FE6E2FD560E5998FF9BB9EBC40C8E95B9C5BF6436D9EB1DABE8FA2910227AD52E1CE46C914F82BEC5EBF18922DC6726F6A3580626AA18239EEE1E3943AE32816B547A97FA247A9AA82197C62A369CEE4EF7384667CD0D5830187FDD1FFD68F55D26DFF715E313D4E357A50EA775D751149B868485A01B0701CCFF8D98A0C5582DB30325F5D8D9081AEDCB1E178C8BC25EF98295CEE5F0BC35AE0406EFF0B769463498E3A4F8AB9D61E5020EE74CA0A9462300F379C3C8486FAE525534341E2B38B900F2D61B7C6429C6268315E49C8B4E69283FDD5094E66ABCBD73CF2AA64812DFB209895A7077648BE73E596DD4CD04148A23A3EE0C8643631A153099E91B6BDD350A6F673E78BA1EBCEF29ACD13FB75C26686992CA9D75728A688883317B988055135EA613F9CCD1A504660868D0593F9FD7D5F7B182560B26A6F604FA97D844544F380B794D459120D77577C43FBF023C43460D283F96E579933472238FF26287A41CAF8777F976041A884C5CE1DC2922A741F39F6ABB2F02BB628C1E2F30EE5B4A494B04C23BD8238A7B4589FC963AF2904EF099BFDCEC4EFA3100A53469DE0B82597C77229475E8479D38B1D9160EEE28B72B56097A8658B40CCF834CA63F790C108A37880AEA4CCB4E0F9BF15878C6F79F78D7CB947EAD6B4099A7BE533AE28847CE1D835F9FCE984A5394357A4725983E5200A7C0E45D53DA8FA291F628C2638B22A98CED9F2EA863859118FA0AB18D7A2BADD64E410B06BB49C8832C139C55D6EDDC93E513717FC40888DCEF97808AC16674EC128F4AAD6133521F748B3179D04F4D704E0E1EC645F02180774DD1B1D1F327627A55C5CE49BDA5C39CDF1E1D1956085CDB4B7A1A4C17CDB2717CC1E369AAB359C380F5FBB3C0BC1E48FC3B759DE130C81674BC6BCB7801CF5866FBAEFA0C9361783804116C9ECCD322B5B9AC7C312FFEB1465F0473B376AD94DB79349C8DC37A3AF671793E55AFF361B466C37CC355749BE1D2E811D6302276C745F29706825BAA3FFF568D224CC32D90BA70583AD89E81EF70545AEB5B45DCCA0EFE8509E582DC46E31522459BFF959D71853B9B1D1FB8A811A1534966E3DA3B55A20B4F9ACF6982B606FF02563A0071DEEE65BCB608BC1A6066787BD12891D87AB781F6AC9F39471D968C6B9937207B9DA27E997A9E51BAE4F1848158CDDE4EEC567B00B95204BB6BD338F0B31CA12F3A591EE9FEECDE7FC1CE3A37F9A73A6A36BE103F31C6B05FCB441701E9CB8267CBAB3690B06DA519E56D7A2A90C30166BA727079F6FDAAD6A738A2EBBD42D42F188566CAEE9D712F200BE95A0B48E5C50DA295987F7D1972FC69D5345EF6FEE0D5E15462DE68F2FD58C41D87BBFF299A15843CE44EB29FF1639A4B3D74D3D688505373A694FEA6C92787A41A9287FBE99E37D659AE1B5168FD6E7824D76AC45D9C467BDC59DEB665C64261BFC635C04477F7CCAB2B33E7F2D9598EEFA586407DB8FB4B176E26BD482AEA3AAFE3AF5821092B56FF95ECB337304473C4B2379824ADF562E0C51FF1ACEB07B50E7B5B90E5B5DD8685176FC680D1B3E8C4D108F66295D32146CDCFAF780A2909D7599FFACA8BC1F9D1C0A4A1A8D1172B6AE23A630BCE8F6FF80FBBEA4651D5D798FE36A32F79255CDE1E55CB1B0013F6B8AA312AF94F91CC8CDEB56D8E9846FC3FC03369EC5BD2FA5FCA785E21A6803D887652AFAEE92E3E32770AC95C586D3144D299F82DDD531120ADF773EA8D75284891AE864282B483D2FD97BBF02F5F4452567BBFB7485FF76EE3D615613AAB51E5291A8ECB6F1DCBB03A3A2E273F3A04060F2B549A050FC8BE20B2A925E80F52E5024D95434BE13A840B3BB0 -MD = 2A4B8BB6EEAADE53C120C7B2065F04350FE78DA8EFF597A2991D2756 -Len = 24917 -Msg = 32594889CF5B95DDB344FE9B62F93E181805E385E67538707F23D33D7BB52721ED84F8EE2CDB541D8C18BA48B2DB2797F4DF8C4C66176267C3D97A80FF2B1FD0DC3903F3B8CE6A4CA53CAD7EF48DCD51EE7720B7895CE3B225FFE902BF346C1EED78ED63F8CD3A7BAC9D772623F7B845648323B06811D576294F9F0B851CA47D91E5D91DCBA1045504D6E292F98C9331074C00844BD179B046C9F1659A0CA7647A01BDCDF1BB97B8AE170F4DFECCC319D49A4F05B66851C4A6946B1DB4D61DAB257662666139F1BBE10F60DEB1593D5293B6BE4DA394CCB3EE34734FD40327CF0E624B23AE5DC1A41526952704089A189F41DBFDEF560F2035BD155BD7E4B5D66B39F939FB26C160A2A999EF1EA258E1F2072BAB964CE193DD6EB80CF0010791A59C3728CE91F9EBFB49FAA7D9BA50F418A7ADF71F5769559932618DBC028E765D0023CAE9085EF8B63364CA40314554107110EC4CC2A1E6C837BE76A477ED3F30DA1CA1077CB1E330194A5660031962593995E0AC9E7D537BC4280CCE9B6EC6F582B9A3F2C3E69AF15FAE8F958BCBCA1D296B4A62759A5CC9AFC2E7510C1C39E3ACF238D29113716A93B5C64882F2341D5EBBB4C76E75CDB4423E8090EB78E8A5DC530339BD05A1EFE48B5910E21660769B1706A82776349533437C4118DC0BDAA24CB3005A13C8B05D791760790884E690624549D7988C75C03B25C40DB0655E0008717AA85767EC015067CBE3ADA3CE162CEFAA2B7AF4797415CA1A8944AFBC89BC69C1253CE2C698E0A20E9B82E723462CE7F7092532BF19489CCB9F44A7E197BAC507DB6721BCA1532C8EFBEA118CF8BD0202A0E9A08C72B496ED521B64446974C191A912FD0CFEC695050616E442C3FAE6B81D8A1B9C0C9951A75D1BCAD1F5DFCCA543F048B2FCC1FE8D4F4844EE0C0B0701C451429E21CD04E7B314025B744572193AAA83AF33A65E512181383B793FEF7E636157B5B0E0FB042F3AF254A5565C6422AD38874C5DC5F23583427B3A4A25528E490FE3EE9C6F67D9D557B6EF966C968F93993B49BC8C547DDCEA33CA2ABF63F3ABEAB13A6893C185E287F6EF3FA29755815A5656819FC9B8DE2F353736021F8E78A0EA53F90313B6AB3BA487E8BC5F2AB867B6225D952392E195D12898F930547BDE799E1AE4DABB23EAA43301AD679C4DA47691355A93E5E327731DB659EAF034B2B7B86ABFFC53383BF1A7C47CA660F43C5E670E8F52A5C692FAF9E81E16E3D4F6E0802146681F68A94F4D92F52D6E1C538B4CB9F1954CA4D7A9CE58E197A95AFFFDDF8C6143565C9D78009F89B8AD196CF66FE5979F91C16F6524F6A02DB12049AE42DCCBF9164B3AE5FF4FE6460E384F51A82F64D0EC9C05C4D125978D0C155BDF939E14E969C6BBC0E93E68516090C660D46BA04E88CBBEB655CBE7B74110558FA94DF8370824B58F3F037C4F976EA0392134AF925B18C4322E6329074C7969176284978E69EE2AA9F9BB44E1CFE71A5444B339B3AC27DEF2FA5407E8F14B309B53408B30E9519A0D1EC9230739200BCC408FD39149564AF847DBC4A99C81F8192485D717AE609E5E3200F86268D786B1CD36ED84B2867865A8B67F11A6BC01B81CB555B01E8D59834C9E4B00AF205E1FE88FD5C0C283B983F72DB66AA642D650261683D21E4B1CB4F984F4D2BE4332ECD336CD64CEAA70E50304D4D746F422592312BB89B2AC041107F2AD4DB55298075E4C0469585FC6BABE2335EBE98076BF9EBA4918852E0A48BD1A711617B0EDFDF385B9C9C2C956D394A7C2C477EF1841BC4D6B5AE40C3F3A3E08EB825075C2840C1B37DD23D5556759F8F7630CF539D3D557D124181E2E5854E405BC6582701E786E4DE7D5CC145723868EBE3B2D39BB281BE3B53AC275E49CB8FC70888457077A2DF37E027F24B922228C6A2628943EB1A82434EA53FFCE48749C44AD530E8344BA36EA19231BB550027A35CE2ACB08FEAB5D51C657755D67E160AAB5D3E37A0AB910BE7FA46371F83D9A1342385EE7B597862D5FF1DDFB41A0D0E8F032C59D90652A8DFCB86C3DBDDCE016C028EFC77C15E01FEC5A9C56EAC5B2DC275813830FFAC03F6F4DB80FFF8975DD432368C420B1FC9B8581EA70806EDAF78030BFD55C13C58809A45D3878F611BE809411248CE5AB6E31F6976CA21B11CA2B423867552AEDF7F9E3973FB52E42FFC063BF2C1E6C2E87F1F6410AC0BED28B7D2025FA869C5B73DDF1546E18189758F54D9AEF8555EA4492DEEA31B4DC90EFD611E1D962305A534F1BAD365309C43102263C2598D2B8CB3C3481EEFE726BF33C4B2BD77F65DFC298D3A0AD53FD81BFB3850BBBC77CA8D37B2ED81641A1847D5819395742B44C54484D94C66C1AA52E1C57E703C281708C27E0DEC3C2EAEE86BC29B1BF06D944EB0375B23E810447C2DE07B9630E4A24880B23BAD92741ACF8F9AC9059B20239B13CFCC647E55ABFD5DEEF5C14DFA4AE193DB1183B5D5E00395BC09572EA438D32AA3765867E2F8A046908119F44A61E0AFF97313B32C0AAFD4E1814C1D8205E03231BA1882B868325DA859BDCDCF5C3D102F017B72CAA92DB7F52D02E6313D3F3651F3CA8EE6DAD509431D83F6622CBCCE87C82E979568BDE7D9332C40C799A8507E7FC19A709ABBD2F301E8EEC48DEEBF549DA3E7786A0C14D9C67EB12D56E0CE7F17055120CF472590E430D25D893855675D94C6F814B5586261EB6416C6C24B05FFA64B35B35A74D6B33774B0545B67246F2FBA34AE63217041CA36175AF3226FDDA7D00932F1608072DEDCB0A22E1EACD60146B2C637DF6809ED86838F1F32E5424FB50AF7DD1C858B0214217ED6A6B3092EDE7FA7B409059CE32C47807B074B73E970832AD73A117BCF0E16BEF5A2241499FFEC9FFFE1A56E1DD6B70D02901F58855972FCCBC19EDB350C90B2B7344991E633F8882366F2AA69D489F789EF65FF3C061F19B8A8815DA5F233B574A1E1796B8916FDC848D35458BC629028EA41D4391C9C413ADD527B92BFC59190CBBE16E7A6F82E0DCCF848347A7242732C63DDAC35A8A842B29000C9BC94EC04C821589240D665C1A279C184D7CE0BE1102734FD988FDCC0DD44C33BBE7EA7CD27926191290C24AB6F253EA20EFA61E4574815058BCAC820CFE07129727F6A29832CD4BE7A4CB749B40FB5391DC2D83FC296D389D777569C035D81DFF259AD6D89C7F1006E7A2E758840FE4DB4A616CEB2D480205E87713785991D93AF6E5300115E8C448CBA137355BEF63EA2B639507B59C3E24FC42D889B53A183DEE8ABB144A960D60717DED46CC40250A5BB3AFB4EE2D0013F146AA7CF02E7129BC3B3A291BBB3B18D52BAC14FC0E91DF9020A1B93F12285299708F93DCEE9C06CED5100D332FF20185097E1675C667920C1230A0BB2C3D8C64E93F397C41884B6F90280A250D1E4EF09967707C2266193C95273BED7EFC7E37732B62967F5E41A654E3F5CF4A80424DF2F24A700AD8D61F4CFBC372C77C00894CBE9A01F5806F0239C913BB1823C0FD5983E58F40D23855C98DA0F1EF3564C78F39251B4F63C79BF5B9FECB03E5C6434BF0C8AFFEA66626F240D4F2E4A9C4C5DF74FBCE5A60136C7DF47B273AF92E105A0392FE97FAD46AE578DBBDFC09823B0EBC05AEBF8B6FC61A269463576EE65044B0A88BEDE53765C27AE7482CFE9C85CCB947961CF73D702796DA4E20DEC19D8290F4C520F73ED5C922677A98250AF154C00F5A17EB95B0CCE6B2B5DB90393EAE31F10C2EC49A808DA5E21B6FEB5D3F3CA8BE9B9BA2C2A15245EAFA585C5149ECBC5F064E9B0D7F2C96950CA5C47D124BA89CF7F1EDB65187431B5DD1A3289F57F3F1F918625B0F9AD71A86E6A69647E7FAD88C1EEFB74D1C43AF5F72018B6F9191DA1878A371F3F4C05C6CF5EB09061DB0B4C780BBBC3353DABCDFF8A7F6B62F1BF20B2530DD5592539EE950EB0B97ECAD81B0D72A465B9F9F5777E61BE914EFE39AE837573533AC389068BE6B9973E4DEA7D83D4C26E63FDD717948A264912A6363F7993E63D0360B27B27F5AB10B0458C0132AC3F8CD15A46D3C261BBB8AC191593E2795F90287AB80B4DB0EB80E2CCFCE1225768542C8E3903F9EB964DE6E80E2F9A85B82E0073E0D9E895639BC267FF85DCF27D2BD74C19350691D772217759CE062634F03C3CF14456A7439084D377D98BADCB3B5D6FF3DBCDEC1729AE639F093087AB23987D4F5169A04C2131ED4F5903E811223DF42E3722C7D10CD140DA16AB2382182E87D7AB2EB9D61C193A86064EEF16871572DF0D4655D062ACD95C3BC665733B1BFAC6871479D31243C43014EECE0ECAEFE5C098E0034C920B81B57EA081EEF4DC649D4B117308F6161FB2B37D9E8BE75F44533915D4047E2B6569BB3A82AD14610 -MD = 62059EFD832973AE4144B4F7C060B84025C29686235AE393D7C9D431 -Len = 24980 -Msg = 84BCEF6BBEEB42308A540C341959FB5EF1A41F922EBC795B564B3A349B0107D95FA944909A0DF7AC1220D023295BE40F2295BDC566FF2184CC256125495B38E9371E152B2826ACC7DD51EB020ED530481D4C1959C9B1C7F74297866E4FBF7504DE3CC92D5C4F3955223CE25BD9C4368CA336E66896ED6910D175F42A104BB964DF76D5220ECF3334F303DE012F7785E103D0D7B381784FA4CB947B0D5EA8D6846EED611F07E90B908143FB425AD7F37F58B5D2BD547812B9BDBF8C7CB136DF01B8729C8BCA38AD18FCAAF70EAEFE39CF2587700FAF03A3D19D3EB7C6F1E73FA6F56F3E2BC6A98C352DCE1640311454B78204FECFE30B547BE2471899F5996F9825020EBA6453FAF82A6CB99AFC981A5E3484FD1BC924FEA7C98D2D7FC64C0B16CA78F6DD799E8F872D6DE5BC0B6E4309D5FED4085E1E35DAA7E88569C79304374B4047E8D252BD4AC17C530F9771115F373C8952BB1A1173CD7F0B4B6A3449D9B8C6737DCE756C7939DD5A6FA7BBB70A6C9432380C51CF05E2CAF75C83EE8A915204CE93C7EA6CAAB7E7042E60CD096F08FC26E8B597B0FCBA7EC57BC5DF9A11E80E3A7ECFC580C7A4A66BD98358F816466EE41E2C209DAB789353E4AE67ECDEFB358545EEBD82C99D23337DC0D357ADBA2B4DC6C90332FF43AA3BE7B56E7F2BC9FF1811E9013CDD9904E2812A5F0FEFAB498724C3E65496E6A26353E91B875D085ED2EC705BAE82E7934F3610F58AEF7833DEAE6BDF0D04A75C0D192CE7FD58ACCD82237F31B0215E2EE7E3655C144198546028A92B8A42CEC472509D8DE7D130574D031A3B38F5ADBB11909994CB8B779276A8049BC8195004E8F464B549D1DC6DB3EC4FEC7E1DDF2731E2E95C1DED26DEB5D17C515A894697E0340B9444E759D046984BAEB77E71311DE036A560FE91E462273F4FA53AA019C2EC3C43CF52A14C8A2040C68DFCBC1D2A55D4CF5F0552D0A2F88828BCA675A95E46B55BB8953D2394449976C3138E95623F1FA6D20283B531034BB98A734B06D4D9C4FB1C835390C3A5C724E32BF6515F23EF844740CE1FFF5EA2C53936DD877BBEF1AF6CB993DBB11EE3E8739C9D151490B6DC331C659D3DBCC88D19869C5E36FCDE9898DF8E033BC079EDBF1480029A565B5944799482AD299D30A489CA6E66D130B4F5607F8EE9D511741496D1B65E4CA100DF67A99C940B77227790C5ECF4489C34F7AA2F91439727CF4EA42C6B808781A88FAEAD15161AEE8F4614175DA0E70EA3780DD8F9FF5FD27595B348CE3F4C4E0E2E093FDEDFC51C86D4C7DDE0F29EB788C9030107E9F8B17D60B5154D4ADEC1FFD6D74DD48536D6F392CFB07D1BC491ADEC5A80660FFBE317DB5D0F4A7D1E114366837E78FD58274492D403D2244E3D7E607CE9F99CE8A173693B6D65235054DD494A2821307583977E513FB3B075BDA9621A749E3D8400C0D94C3CA2EA8596AA15A7EBB1EA022D84E219C57411603FD18E4A8D0814F2B6EDC55D417E275AEABC6331CE689054B01E0DE4A2A499981E6D4DDF1BDEEB634B962F54D23A520AE6C66B9CBC86C450B04D3C8A7B843093791CED53A1FE60044769F0B0172EE9721D1AE971D61A2096F6224153D9074462267E141244067AB81F39139CA83D122B808623903C95503A9BD3D91D4819B6F902E3FC369312A26516E1CA7E3E1ADBB5366B5023DAD1A946472851434C85A91D2E0730C5D0F37DE170CE81DC27E72664DB9CA43BE22E3914D02EB39BE02AB32DCE58CD3C58DF5F46765A16FF305B40F1B6CEF64A394B6F3D5E5AEB17DC52A9EF091267128BE3C82D3C4CCC3144F8241CF95E3977900D348BFA1AEB23B6BA15AB102AF912618A568A2FF4074ECF255C578A2663A649EF91CECADF7DAAAC9E08796B997EAA56D9AD36C901EEC7607A181E7C4CCE824B3649C503E6EF552B9BF1898D7D33C04E545270C2D8807FE12CC37534D2098686ABA3899874AFC95E39D9CE72EA2A5978912A46D8D56A7F6F868C9B2D4D20164764A9A69A124E01AD0DC09BD4F286E27D545835FB941C89764772A9D485CD8FA571C82687F749D4B7EDBC30A3CCC5BB35B7A1AC17BE96386205F202867B38B58E67E9DB758601475953647740E86C644B16CD75512FCA73A6C647DCC50529307E35E98898EFF490CE0A2D7D3D2E818BAE9331D65F8E9F67A19FAD60D697D2D9CFBFDFD1A6C43B25B1114FF88067D417F1835193085C5F98BC0E07C3DE200144C43559DDAFD4E38AE85870F488A1D52397876DE9F6D0D07A4EF688B9DE50D128D4C01C6300DF0B4BAC4B54BD09170AFEACB1C1CC6A134749BA42E4897132CEF09CDFCE152BFBD0B04BF2F6D64FCB9B9E0D875B7897F8011CC8D549342DD644AE86F58F2825296D3444AB017AE7290272C97B21C5AE0A97A71CF42730B6E298F864A78AB98A01CB92C09ED74CCED0E4BB728FA7D56E8E6D8B727C5179EB4EC4EEF44C1EFF24A65261001F3FF408EB392DBC89BA1906D37FB5D0DEF8EB42565C9C83B80EAE8EE46E51CB412BD2066C517C1AFADD617E61CB960D704891A6F2587885AE6771A299DFC157F2F53562A7A13C10B4092465B5A80820CC6499A538A454B65D1D20A5D6D911E01A80A2401DDE0915D9F16C803DC72FF641CBE10299380FC16DA44F2C4EC775044F4FB41A0B19D555BB6BD2167DA29AD230648AD1F99DA6BD5388E98129479BD8BD4888C3BD2D254EACC5DCE9B8A5C6FAB32629056E59A93FDE24B21721E30A42786F01C9D1167282F116F00DFE99A4947533291938A5393C444422EE20733499C9E56499DBD7D2731118FC051893BBD8BA31B6CCCB8D9BA3525BF1C6BE68C63D33E3D4972D0A490B9D159C714DF98B158E1BC1727AF791DFBF65EDDC3982F3D7869FF0F0EA5A0AB755FF6E9BE0702700C0E0401EC4D06ADF0B2969B7EF6F9B6907B2BE7EA92A5B5176FDE69E9C33A20CBB975810E0E709CEFE723CD53F35DD332C9D3CCADDCB5687E7A7034102BBB8E9ECE48DAB17F48D034F0CA53D909D19188E28F33BFB4E617B27780136A8DF083E384004AE9D1550E9A1C7014BF07E7DCC4AF1496FD8ECA2F2948FEB1A989F027DBE8326C7E0079B2BB82FFEC605E5678A681A7AE564E4D7D969C9D39516AF105A53665B71129D6D2D829BEA39DF7F7D5B2556BB0CA79B24A55D975A206EEF32B107592853CD2DC2957927D9978B24061995EB2829AC16DC6EE9EBB966BF74CE39F822E83E9A4D867E16AF24D7D3AF4F6B484D51DD36B168DF0A73D6A15E14513B0A80DCC8A531A0F90ABF9734A4293CAFEFA2F14B44F743FF2B20CBBFA8249F38CAB1E4C72C4B2CB4D2E696E73E898A0CF84141F68539E1EFA92D323C5B761C950F24A3C4CF9158BB81BBE715176B266D54C55B76D98A751146ED91C747E3A96BA91E9AF4414A843B12ADE308961430D206F7F6276C28DA7B3CFB7F3FD2F737DCFD3181E11691B0DD46947F26201F9D851E82BCA38E87C402AE6AE2FC6005D946A535E7D7FB9F8A38574976378992559B18D4C9BF9D50278137C805FC17839904A291266192FD21F14621B9853D303977298CC5C2FC5185D5ECF02E3A83EAE02C975B942B981C55D8D3E54C11D77D32E5E16BA2060790DFB8EE3D34DDBA5FF584A7A08259216616AA4650520E7B3847C734ACAD9EF8AAD2C6FA83655565582978AEF8E30529AF73CC60EA76367DC62DA64E31A59ED2909F42F549953ECD48DD1633863680F9B8CB511A7C04D431F6A8213CBA4695BAD0B0A489198761DBA35C95C1FAA3585A0EDC82C38B805E9F3937B28FAFE404DCC27ECDB1FBAF079B10AAFC5BDA079DD90B2B18D98D084AADC8F8CB8B3D2092DB9D7FF08EFDD26990619312656F550E6FFFBC811D77F58C8B488B14FAB2A43F2C6F1093D9A830AAE7EA6E6F3216ACBAC52E21814973BBBE88EDD14574F6EA878BD991DEE9D488B8DE4787A02DBF19E842C7402A61988CF0527B68196ECAEAAA0740ECFE18C8D857319A821B8CE3826054EEAACDFB55094B03994C413557FD1A23BDB5159803E874EDE3D7882F7DAF37AA51CA61C049BE03E80BC5DCD03BC703EB858A5D1A22302AA1E1989BA984145C37F1FDFA5C7BA8A60D71B0D9FB1C53F325CF3FB0323C8277A0955F5119041B940A79CAA70A1DD2D8FEE9DCC5B2279D2445D90D9F7E31F622A0A6B4D54FB1ADFF723C48A0511850E052F602492FE1F3A7651806B1858D862C8203443DAB2E60B0C3E302A41F93263B8A3FFF5C607BEC49F92ED70B046C1152833204202B2B3184F28D65E138D916289F90F266748A5B8CA715F8C4307508763BCBE86EDBD02B92BD0533642E4B6C888AC2DEB67202267ED12C97A28CAAEA564BB49C445044A8E5084C63957EFF7D77C548E8525D83E0E5326711A4DBDFA2F7DCD6AECCFF0ABC2EE0946CCF4CA0 -MD = C9A6861BF00A12B4AF1F086BBF47E7C791E71843F45C76549738EAEA -Len = 25043 -Msg = 217683FB33E5FCCD45B0062C1128455C7153B00AE3949BE0913700F49398117BAA7006E52F8D759C633C674F48AF7EF09C36F51BDF2F2C966791033652490BAC283FE79CEC78ADD8601EA7DC4A4038004A26E10849531E85270FA6D67426B00C42DC45715D6334DC61DCC02E74BD32C3054ADADB0E3D062493B6B1CB60B6C8B6839513E025C2C416D4F63D1F5AC8260DB3BD926A4B831A83FDE9EB04642FF1A2D0A916B9F3680904D469CD4B92A798CA6EFFC3F528FD31A69A0421D8A05B6B58585443F5A4828F668910453C96D69839716C76721EC858AF8B22FB4AB4C4BC3478C6598E5E995DCB6C81DB11EA34C5E7AE499F50390C19AC326CB2AB2C3E6A56AEF4979B34377D6F413364589882924AA2F475986FF1A097D8B4A3EF8970E80CA618B9E4E9AD37A6419A36BF79AB61DEB88CF51787C9D74F558CCDEAA88AD345F1489FA323DDC84A57772ED5F62158AF15E6F76E0C09278831FCD9748783B3244F8F6C7F19E6D76ACA23BA7C82838CA38046686582576FD9CC9D73678C1371D6AE393B3D58950D50B4C4EAC81E384DE52CC599871D9A8C2440D10558B560B3B91DFEE3CC370FE725408A3CA257FAED9CEE46435D261078D8FA59A13CE0288E9FFB111829B7779ACE300AB4A8B892FEAAF4D7817A00493FE16847B4B0911F56C48735A6E53004D2218722F7D408E36EC96C3B7F8778A53C72103809B3AF6C28DBD1BDDB881D9629F2B2D5C699DCBF8CD3EFE31FB6921F114F15FF1F39D65C1D419420DD5EEF4DCB5E7C9398230830167E6F5FF8969E1AF2DD1DDE03039FF56962F9D2A03005C7B208CB566742B8592DD4D03DAD85C452E147A77338E347088161404782CF8DB2C1412850EDAAF06FD920130AD02FAC46FA976BD7E9D880D8CA9283D1354133E1F2989100E74D42953AF010DF19E5ADD20769A94CA0A1F77DC91322C805783CB0F7401A26ABA9DBCF8974D27CB6EE5D4C0B59E8E2D2B316E4FACC4937FEC36AF19FF21438E41865336F21A2023E2BFDD141576239BE23AA2394B5509C99C8E580001CDE647116E04886DEC12BB071F3B65E54A786EB92D1C53C7E5D20B826700E26C7BDBDEAEDCAF0646FA293816C95F25FDF3E53F4642B79AE3345710499F9471CE33570EEA19F801CC1240F3C5CE84C36074A5B55314D29BD735BB45166F2816BD1546DADA1441597E06F7D41AADA1FBB73EFE5402D21BE9216E163314E1299B8DFFA4C7755F92E7B63B2BF2DC67A04A001FBC5542B983E85852F0AFC1DFE197F24375790A7DB313EBD13457A3D1D0EE8C31FD8E200B5646EC09DFE8C59D2C379FCD32F22A98E45A3090D917EC6BEC8A017FD799309AC244C14FA8314C204C8321AE97AC1ACB0E1E8C02B4B036EBE97A66C6BF759488FD53EAD8F71C730521162E323CBE4C11ADDA63887B2BC445C4A5072A7C3C2043D5EA5A27893D259A0D053A75CAC0A2A603C71DCFE8949E5FB9FD60F56C007F780DA894CFDF3AE70E556F7BEB00AB7ECED6FDD164EFB576E2B586FDD878DF6D6227F93A6358B97B32C8F68420CF539F132E0699040ECA1BF00D8EEF1D75EA31155218011CB5CE0DE391817520A45B9B717067E9EBC8783C58990E0A762A6CC011AAF55B23F7C5798B3E38962966C10FDE72D21E1CD2A5694480E3C2BF75B0444FE7A8A56C64C879BEEEDE866ECF9F671B9A5E69045CB64B694F77F7F6212243092BE10F1E3A2EAC2FA4666A6FECA23C9903FE87EB005D0A5F68831A025FB56CE299EC0F14DCD9D41A7718D69CF32BCDD8D7F6E86F1F23D887CA206EB2BD53066BE76909A044A8DC7A708E50B01A804A24CC39EFD29DE4C1C20E2990F6C0FA91D27E258E87C8303A3DF67AB79EE42FA31B896F36B532A3513D77A3805FCF1081302DDD39B1E03D474F6954DB58C120F0D49E3D53427DF85CB5CD501E9FB407781B0EFDBDA46E1EEEF7F931D611AFF2B31E24CF858C4E441B05C51B4EFD1AEEFFC63EE89DC244ACAC0B86535C74CF31A2A2E195FA355EC759605F18E1B5894D453724A356E191335F509D0F7ED4A16AD0B1B68B8CBFAB4C2D55607930E63360E3F55AB587C65F019839A8AFECC66B8E8B751025EF46363CB89565BB2F522DBF61E873F0CDCB898A03DFF09B2D5B5A661C4DAB5BA7DB45E5365FDEEA8F17D36551AD9A63F41DB3D8F624B77B4BB575B0A9C40624BEAC5B5AAF32C3CB248C1EB81DF989FC9B407829C5DBFF79F3ECCA5B3DCCFAB509733DB06757F5322106DEC63EA35D43655EE14454062ACB23CCC7313DC26EC33884FB45FA8D062190C68FFC1AE661F6AB119A1ED04843C166401161C7FE711800ABFB50C55B2F023AC91434C878AC554E9F7CB3C777A70AA26204BC70F4D68C49246CFFDD5569A66798F8C095E3B88CDC7C7E340D567A99B3610B1F13385B6D5F0539C76DAEA527E9C1463DCC96C9BF9A192FA40F3192E03EE28BD2C229A41E004DE6898A78554079E8EF2BB378848E52EDE0217C9C9C6812014077946BF85E636292467ECBE38C4AB87153C0ED29EDA8DB5872C270671FA7F40FF9F04EACF9FF7073D6B7CD491F5605ACECDAAE6C994372EB908ACCD2634EC61F74A117256395D128586CFD2462A5464C7C4F300761EBF6A8F05A6EEAB62A606C0C43E27A376AB8869FC672942BAC8375973B2BD5E8FC6B054026FC011329802EBEC8F7F4BC66D334977DCB5F9B03DAB3F05A1111AD3937B14DAD73E564B916D2AB1DD5E8C194F73836FB534838B1D4D45C6DDAD6A8D6921C77AC3CDEEFADBB711F6B04A7F12B1A875CF946C9D2D106C7DB5F142E5424226614E7A36E0D6095E295E6B2FCD1770B56BF88D63008CC2528975BB915730890EA480A3AD9450EA9193E00BB098BC28DD7A2807EA3E6185DFE4EF8DD6B5A498DF6024DEE8C520508E81A72959E61A2623F6B8A2710AB70AF2559EE18CC4A8C932327A259FB971571BE7582B1C954E4826820A50F0F088DB521040470908C7A6BB2356F17D04BDB73ED4E5C9F7F3539DFA9EE9878E238F2B9B2074FF1A5474BC07D966467474F5B13879CDF671833C8B29829631951AC95DD2BA2DB5D87CA2E9046A36883E3095AD62EA46CE1017F72A185D0775BE0F184063CF27E58A4D588134A075A95F1B48BC2D76446291A615119D7C4B7F73D86DA8E267ABE96EE3BD72D65C69C47516A1439137467F641BAD0F05C00277005057FBF755D8E5902389794EB4E71FEF30DD2058800D17D1B4EC73A68DD4CC4998DC42CB3C04F11AD239EBCABF37740888EDB6DC4226148F785063378BFA0033BD3EFB730309F8F6E343755D6974587D0A1034B25AE17E7CC4FAB3D6853A22A0BB0FD0C6BFC2B617A045F5920435F3D4A78EEA29C70A45A6B7E454E52EE47ED39CA29AC31801902A468C93FE70B807328D1633C8F3B15731618ACAF4074CC40CE86F70FBFB264BA2C210BF4C4B370508856961A3EECD7528A963646E447E91B1761A536E2928D067134B6EB470D1D3D8A795B5A682003F800403F7DAD3880E89CF46F99A042EB5B208D8EB4B8CB4B95BB1C7DAFB469505D1837F9AB2A82AACA0054F878652FCBE9664A5216EB915970CA6AA9F06C1AB8C24A18935AB54FA3A036D1D10DCFF913730BD8C1ABC6E7151620D2A251D8A81B103FA27622E502DC0653132445FE0C78725ADF52E4BC5B22E02D2C63CAAE95C61932DFC151525F620526FE1C8CD0ED64C82B6859B846103ED512FFAFFFBA6A041E8B94854CA8A4A819F6149715E02460A84F8B02E96E32C827A0DD962A70CE7BD12131E31D96A9F14133846EEB9A830D264BB0619EAE8933A4EAD012B4D62A12F816FEF0C612A0BDE3E5444290577ACEE047F30926515E63801A6738A8CD6870D43C30B4DC491F7BAC9895DF7A5C315064DD5CF8C1AA488B3AAF69535CD91B278D252DF9146C279A1AE526F012F4A73184F0E66231448A1E136D75AB699B6DD42D15C48F91CB2A5D68C3CB1456F7E05740B42DC71B14CE823BEFA39AB99BFC93097825B632A53D83C238C8FF93B2EF5619D4E545C19DF80BE0C363858960CE6BF28EEB8ADEEA393CDCB2D2D2C677CCCE1CEDC46D206DF7E0EDCECA031247D34C32D8658B370EEE25130738B39FDF7EAADDE7042F8A36DD239FDF4C043995FE17BA5D052130D93BAA6664954BE4573DF799D95A03FFF5920085FB65262BE0E193A209836529C1E56E8D819FD233726B81798BE15C50275C1711491BE359472E5FD9C0E74F825552DB4FF7AC9C439D9F72415DCAEBC05C3444D386D25B4C2A89C537B13371E0B68DCEC9F7BE3EDE92A78DE7AD3CB75ADE37E8A1D86D6D227B15B1C2652E717A21F017293C40B54EF25DA1A190C0F34B778A28B2455319BAD09F622AFAD682D42FC09947C1711AD4B6735BE253713E5AEDBF8D5AB926CFC4EDEDE96EEBBC86A007FCEBA04B70F208906A0 -MD = 2B7E15B35CFC463C710798A1CB8A18C115BA2DF25DA141EC8F579252 -Len = 25106 -Msg = AEC15522A5727322ED4CA45527A98EEE9A868807CD769AE52BE165F98C55A7489D5BD7CF030EC8FD89E2CE768B37DF7A51632C7CE5856EBCC8EDCA98155CFF97D5D05258979BA4B64F9003B46E308FBBD1FE2C1D81BA22500E9153E9E89AC1CDEF30770934276FAE7D0A84D5472B86CBA6968C8B05A56796C5960B49A72787E0E649D246CF2B963243709B6A1A4C21821A449C8A2302C2072F6414A2EBE94E9BF8DC3EA1D7F9322B627C0C694A3D61C2DF67E87C5144CA8FD6481B236455489BE4AF4DF5402367EE4683B01DBFF424A09B68793E22B13FBF9BA268D64F181A57BAFDC6C44565D6526D42A88A274C748468D707B34CC2B718DF1490AC405C97165A2A3F591DA85ABF62CFBA24BA87FBD6703A30EC0E82AE126FC3C39EE0F072C2A025616F90C53A61BE33FA10F9760BB06EA711831B7B1F65173367E738D5BFBB98FC44A60A0259076557BCD6FB27E25C5876E68700A783FF4B223378D676ECF288591C93A7587B9411545013F2523FC1C6FE46CE2A3E9575C3A30EF59EFE01E05CA860C8C5D390FC7CF9E3DD2FDCC119EEA771423F1EC66357FAF240E5B7EBB2355506CEA709A61A2D08071306CCFB1172C78F25C3CB973F8C0B9D4206D6CF68F40121F992B6489CA761DF94D5950AFB27BB7F8FC785BE4FEBE4D612710C2C092FC46C64138BEFC65126A63E4071CC79EFACF7E60FFA558449CC042CC6622A64623FCEAAC9F5A462FF59826C1E330CB16BA8C0E5BA7FFE414AE068DCDCABD43A349BDEEACC6F7CF747B208D80B3BA1DC382684A9302CD683223D5CB29052DC78B181EAB7C9C97686AF43326DE45422EB8AB32BCE5E068ECAEC9F05950A0D4DF150EE39E29B745CAC44D7F26499AC4F792D00FD186660090A4BE729E7580E9663026156A23DF3AB511FDFA03B089EBFAA6C25360992A17ECC1FB9A373900C0B10673A6B2FE57E4D39ECD18210E8EF7974D3918BD20D78A8FD5E7A0DFC7AE9C04D25604859CD32C2EA841453BE37859B46B5731FA21E25D27DA9FC3C1DF93BEC5E75951264C7ED5DCF17FC9F03A6E243D0248690524A70E531F53E5F34BEA2E71B3E9FBEF33F2B9FF91BE6A72EC4091B2D9C73949757860294AD94BBF3666621799DF33B76DEDCD36B613455E7E168D55C5A2C0FD04A932F5763EB588985585523768C170DB6FB0CA9FB994EBF04FC7358CAE50A458A6317DA180F7A9A4928BC2509E2E068A0388FE3BF9763906B7B503FCD42352328979831A0C23C09A2E9334E54E54ABD2AAED6E32A77739F978E870C715A141DF5EB35BC058CE80D9E0CC929CB148ADD11EFEEE6C89D424FD3A7AABE5102AEFB1A568EDFFA563AA1333BC75D16C2055C71BB1654D131C977BFE9F7F1F469B912A168311B5D7F9F01B9D7CFD4FC37B03BC72B68572108D2F516AA2A607845AD73FACD30731BC249AFC9FDC0EC632417BF78294A07E8A26A924EC85F7492B1444216B1FCC16CDB61E5DFE8C0324DBE3E22DBD361145A100BF2FC76F6AE9F3C20ED562C40F5DBF06383CC67DE8BBC35C5287F4BC742954C6B5879D60E89D491849B7FEFAC3485C16B0A040D2BF52644B4D7C193638F1CE00C34E6190A3B3FD1686F520D7C9E106C67109B719D4D43B07D7CCE76A4CEEDCF30506DA03D88571E67BE4079E60A0F4C6BC762311015FD435B4DFC3DFF6129A043D8BB65B563F4D523A98CC8E3DCBAFEC00C6C2191A36CD9D5EC44668ED50E60D31F148016E76D6C7AD6766FFB25BF87F9C039AC405B00993100F5571F051D335E6DCF6F116F5FEBC770D371CCE4717CC4A81C54B5EA3D2EFF3CAB34B39383C0C98F59EC00EEC0EA5E2C801B6A241EB01322D66FEEE7213775371AAB733778A422F96675B6243E13A0C02EF22A529FEFC02B540C21C18A7C178970EF34E2544A57D3C0C955F0FCB89A0364C1B11D9668FC0D0B258A789983BE369D4D24104E561209DECE260784C19019737D5D97004D47DFCD4CD4AA28E8D92C0462B83B66F07274401B92A90125AC56333FDABB9DE9BFF4F9A119C2A3D027335ADB4658E47BD1F238C5D71ED1ED2B10D7BEC45AA5BB673E677A7D75FFC2A036E9035565A0284C414700B9A421739F24E33ACCA737B3F67E3E34569EB1E9A295DE11DA44980C89373E8353A1B2F87988870A20AF6AB0C7EF1B05464B3A23D58BE7BCA83CDE8E32126C0405D151CAAA30BD01C98CAA96C3F7368DCADDC1408FC1C5E354551D7198B08DDB01085404E375BCE0B84E3E835B0F274EE9540BAF82695752F5C78D92ADCC16EC32EFE04546BEDF84DD79CC010F9171103DEEC2FA9A4ED8686A105BCFA6DE072F13153580CDF9FA7812A95B9972A764AD3A29510C0531C7D9B31ACD594F178154881D822F868E88088F4AE183F84AB93F5EE8802EF35F2867BE7BCBDAC14EE97880D20E5DE9124726E1375F06AA2BCA5FF3BB5516970BB57FCF373E7318F14DE036E6C9C6226D9E2F3E7BB5B8AE34D61E874C6BDDE39B32ED2B38EBE7DF1D68222117FC06EA6CBA7DF51793E29E5F78C5E28408B7A72EBB5314167E71DBC27A5FD186CFC46AE74A76D08E59F19D1446D8AC445B66EBE3A3A12D208616ED3ACF47A14680D2D1A43E77373C64DFFCEC5AE37D03AD3F9F7F577BD5B341380EA0F7A23446A8F41904A7FF6F7FEF274786D34E38C45E8FBEA29F5C40B07E035A51CC2E7E1AE3265153F7480BE28489093E1AC9A892E8C238A8112DB9E32F41757C0CD9FD42F71EAFA448A845E92A010DBA39BC06E199D99356C95B0FE2947931285D02E5F6F11AEA97D4C82CB118C79880739DB132545159DEB2141EB006A94FAF8AF41A28F10078DE8BBAFA447CC4C86405AB16FF5D06400044DB98E4C356C2E89782DABB8FD5273519D30361AE709FD03DC3FFD933A34DC350BFC9877EB26C895869553DFBB69A42EF199CCD8AB309DF442F94CDEC83B8013FF0F0B09740E82A868A2DFFD4C53D7DD9FB8B5BA0F884AFB3A00C809C1666FD3AF376B713723300DE5911D6C3E0534905A173E27B08C497CE241657643FFB1A102230EA628A5518BFA2112B29318445B56DEFE6F37808A4BBB1DEB68A0E89377C11B74449006A4A30B76B09A6A9B28F8C1F625BC1C59C8C069D95B51F3BEC9D07C4F0C2B4DAD042478F777223B7CCA131B6A38243CDAA5840E46AD4E423AA0AB0BC934199B9F3012DEBE313ADCBD513AB5985B2FB8CB199288CA0B9F0582460DDD8CC07807AE7514FB4824131F295D6B68A58D56DBA4F2255E1AFBEE20DD28049B48AB0497DE6B2D7D45B756990BE65E017C75913CFB2C145E901F5714601756538CED893C9C26359A86764C329C4F999B4509F6ACB39B1AD9D20B9D9A163BE1FD08E229DA6028C7D22C8856B409ACA0BBEAA7219F25338F548D0BBDB498F63B4AEBB17345FD71FD054A895F706AE1046006D9F326229F4BE2FA8600F5D9332F3B8E436172A42AD64510406217A8DA2BEAD0689EAF88157878A0A842213728F3790557FDBE2B840400E04810C2FCBE2D1846F133D80A8949DA42DEA7A66DE76340F9E45724DC4FC098DD94D4F0B266F18D6E2A17DFB69FDB13A15EA6A6DCCFA618B6F447FFCE7A6CBBCE5900FA0ED299CF50E3DA4F2A0D107E75AC68D8AE2D947B1509878408EF3630DACA17CC827FC59544D728BF2B629D2BAD157D67288186CD6FE5B8F78C23CABCC20E7AE07A1D6A28C4F42CC385ABA4EC3E5F2C8B5103666BCB3355568F1B688637B792C58BBE832A578E54FFE63973C094530CA3AC6375B527AD95F723C8FA83FD5C69BC58A944A797DDCB074FBF5DB344E5270AE736CDEAD794DB6B0D53B6EA982174E6943AF3EBA6EC6E8CDB5E54E80A9877A56DCF67C4C1FA0D9140DFDB29B3956F6B2C1A00F20DF90491B57D60141F90C8DE68B08AAD9E64441331E6C922F14E26724A34F88D60DEEF0EFE6E97819C75CD640254C3245FC7EA74F6A96C0D069EE73B584057A512706D026BFB33AA5375A502F595E271DDAAD76CEF1A46133A2058710F19D321269B91CC34E755925FC4FDF69BC3493B0AB3A49F472AAF6B3E72E0CBB211584E75CE30136B06BCE66D252DBEA1C5115AD73997EDAFBE58072F4BEE8D998A8594A5BC46D53171D71FFD5A052FA1938B28A7DAF6B6F52AB011969134DD67CBB04681A3456C825746013C70E80FD6DFB76D6648AE8B728B84E3B59F1CA16ED6D566E2F5D79F64C58947706EF6CBA79977FE32BE058EF4F28920F74F9B2EA8A380F0010E38C3F6CF02B66B38FF494B2D811D53FA923563C6086C69F90A3187C73C4EBC08B438B483284D53E16B44CD6B40D09B08F94D183194975B189F6852DF45ED021C433231EF5589E205BBCFFB94040794C7320AFC07E6BBB649FD8A8EF9934C47F24904EAA6FA4512350BB20D3385DB7D4E49153C675AFE5102FC8D3057545A0A385B9D9C52407F80269B923C0 -MD = 52C45764288E9A5D2E32E5A4382DD4A0C5623BBFB73E7101973C6B35 -Len = 25169 -Msg = 64D5A8FE1E2B6FF3CD7BB4A90A85EF8CAD8CF40BA895334AB658A52717905B381DCEAB0589F438F552AFD0E230E1D1AF859C2CD85CDD37E97C4BC44281378EDD79AD494F1DE41C4BD2514F894A453017118E4776BC84C2988B36C22D1A4859FF17EB47C1422A455F602AB82BFD3F5B10E4292A3720EC644CFE398CBBF646FBC8E704A125AC960AB28A680946FC8B1946052358F45F9A2236EE5A1D9C8E1418A9F92050ECB49D687E879CD9C440B7D303CA32161705D881FBFE924CA27E2DC79CB29BC44CADACC53AA3EA51DF52B632DF42F9DE3752D31108F4F49BB5E11990E5B3DAB79AD6569E9310CC65175EAF2BFDD9C82CA8FAAC9009901BB41E27B47351818A7D03CC7710B84EA98317B7421E18966AFC0BF31371F305024F51C03D0642C245271047917207241A9FEF7EE7444E39092BFBCF5DD76D975749E2FBC73E2F1B10143439F50DB1DF073DDCD9FB3BC0BD7871FAFE4830786B3A30696714DF6799D032B8FB7ACE87A9346EF7EC43B884294F558B017B29AAB6D302C12373323ADE6D0073479B5AB7694C3659BCFC2D818F68C951744FD95E5099464B1ED1FC59AB786821FF3677CB6D937DCF38AFF8AA9767226538359DD4CE17A1CDAB38FC7A5A13E80F0C00574321F493C0D8B95DB6B57E1B3F3AE039812F34742CFA595E4D0FE20BCE31DEDB5B5FD4A36778D68BB3CC2B86F81027BD019EA7211A48F3F40857173FECAC655B1467E7620CF322E8D479741936969FE7F07EDC1CA77174A358A50B881486AB4BEB62EA2D8AADAEEC12CA824BE191F119AB45258A4A4E4A68DE3D45FD07CE6BEEF38F6FCED396A11D54382C7616331564299133B4C224328F57AFE177A41C7CBEE28D4797582E927FEB4BFCA2CDD8A1BE0850102F2B2E9906753A12D28D1C78BD9503493A88710BA46DE38256DB03D3ED824B722682F378DF4994912B23A35CD393D97EB3365CC64BF6D5DAECA549F92650101899E477FA7C4CA3E68CE2F04CE2F0F295D9A01EF9D7A168AD21A0D0A7EB2C87924A36B34A113BAED27673DF24A453D8EBE28A9FB234816B495094DC46E030A52B832EBF47CE20900F4DC1F945FA7B8588DF2960ACFDCD6CFA84B20445208ED170E56B96BCC2EFA6F6AA77BE8E98055A2C33267CD9CD164837A51851D003DD97AEDE6856C8CF24A823D838C382B2DF3E2C775C2C59A073FFF5E32E2C3D4420DC920A06F27C0965802464658E1FD7BCD378796FF653A7AB56A0B1DF109C9D26FFE7CEF98DBD7B93AFAED76BFB1217F18869BA37BD6E1854B81E8AA956DE024D8A9B55DF0E35235866E4F560DCDA9D110DCDD98CC196DA0D030C50FF7F2BFB15C4959BB2E42C206338C5246C2C1A3D37C2CF1BDD9206664DA93BFB618025504CF7CF73F6E47AC615C202EF04DB2E19021C871277EF79CDABB0850488BC316DFECDA707CB022EFD9DF0B31E87A29B02CAE91D3B5E567A585E90822F5382215E09680F74389EF2EE6EB94B54BCF5AE057A9EDAE131D361B43B9561872B39252CE4B64C169ECD2D7AA317667EF62E60607D402B22A4854F994EF6AF68ACACDE5C8181771222876EC011414B0A580B06E89834DA4011D0EF429F4F6BE829DF48FDCB19341881F0353A3E9BA752778C10A29FFAE4EF3DCC90CB57B487502F7EAD9D8E9BDF62D9C1F8F52DA24B07A0422C534F926B0FE3EF745B6F1C93F893975AEE5C6BF74DD00815D9BA896143F9B1447A65A56A3F8C7CCCF6BF5F9E798A6E5869FAA1B7C52FAB3A1B63C8D24AA5581638980BC461C73E4359AF01ABE285E4A275B089DF889CE13D573DB9ADEBF0E24BC2C7FE812F961980FB3E5F07B4D76FDC513677F047363D5D45863BA1924C65AA8901315F677476758A874B47907E33964E29B02CF68F8F8144A839617B8B3286D69B98AC63CDA3D875A301F1BCF4ADEB2B6FEDD5C74E084D98DE51E5DF934E25E969E62BB734A8D122ED8A6D417EEF0BEC9577EC57C62A8F646F806C8BAFC36B9A41B6492FFF17AF9A8B28890A68FA8A6694E825121A47FB113520F139EDDF2BEF20C3BF3383CE932491C80F0A98E39219D10EA72B90E71124006FA0BB4AB6A2E36E37731FB9B23E96093EA7496BE4222A75B95955D17E7AF6FB7ADC3C50E48CA6CECCEAC49085F9C1EFF757E86B13DE044B2ABFE3099B83F3CE15FED2E5C563227F5ACC67226428253F1F9FDA60DD778B956F3029356093F21A345B926BF3B433500F582AC10040FBB3C56AD8DF378B916EA8DF1CDEFA3CFA148D3866D0F2F56AA4F89783D54D0C6DCE864233E7A48E87662CBF783070AE677576C82ABBB1F6AD907A1F349B0A2EE8EC33866385F9F3435887113E49DED91173B23D73D564848A6166B8B8E6349D1E3E0831FA7C0F19D48725D44BC19527B60761BA7E83AA19BB3A585949757F372A12C288DB08EB5B1676682FCB57056469263580046682D79D8B1131F285746BCA704976EB2F8A71D240889BD82A66698EFB138F0083E1257AFD2560A1EEE9911E8B77861E7A67168A7A235BB1995344F3FD55935A834896B7E29C13E47DBAA6A437210C8C9410238304E7BDE923DD47388F2639BB9EF2559CE5EC746A9875CD83093D8879B897F03ADFF133085D1E19EC34FC41860676C93926E5823A55ECA5D71E13CBECF8A55F514CF255137954B74AF6783F7E5F52F0D7EE977E28D5BE6A859EA221F4A63E4D4AE28C15F7AB0A192471ECF44E3D667E410DBA211718A41949B46E4FC8FBAD74F7878493160E3CD5AC6298ACE8E2890F4987899C09B499AF8C08DCBE8B4B224315AAEA83F28B6285E3900662C6ED2C2619478BB5800B1FE4304F1CBB00AF0A896B96E49B5FAE89948EDC825F39DF5183FD1853933B2BCB29C8C77BB76862274FA99CB9727EE10949DE146D8094A3ADA13615682612BD012A8056E5A3E1F2DA0DCE1E1C890543B66F36BCC7AF882A93B0304919A35A2BA857D908B31224C3BA746D1AE92D54FFB1A67A8384D7FEAA51F59C20A8D688A04FD9BFFAE432FD359D7BBE45E522C6B923E06AD700047EA30A54BBB8EEA513A45615964F8EC6199FF6257C41B643FDFBAC963AEB8B602079DD83834267F48855462324E77D72A6792EAA541E2BA3BEBE3D2C2693B84D2EE377645C59248F04F8C4E9E762FF6A2DBC34C1D63E7E62E64F88CEB55B3CEE2146C4CE46FDBE5561349F21D9995867175A283E1EEF24A84AADAC31CE53B747B8A5F6EAF0FE129ED7BFFBB8AA3FD911DAD71F8C4D1125D56A5858FA43C9BB87C36BDAA5EA0566AC115AF7B04B0453CD175F7D2978F3F492A8A5114ECE2ABCF58C928FC21D21C92F5DF559C5558FDB8D1509C02882DAC1649126F8E8E1F5FDA27CD7CC766318E3D2995DE6470461BFB9291501B7975E3CB021BF4C92EB51919575B8263945DA52376A82F48EA2219582CCB812FC3D6905B924AC019B3660963516C63D7A150DFB97D97570E1E62729873AD6501EDB734EC7320FF96B9BBF25D0E774708BF05347B1F13CA9EE6E458B9E78A77ECD748B962E385D61D4722EFAC23BA6C41BD8643EDDB49A0FA455EC26741D6BFB060F42DEF0A307625CA0C6DA650FA5F567DB1C8A4527648A624D8F43F016C9B22469D7CA826B48645AEE5182620E0BE34BB6CAFBBF9A835C75A72577488D4691CDCF789D0E11D01B3C280A75411183BDABC0CA6A56A894DAFCAABE9C6D244A1EF272D914C63C2BA7A92433D7A45D1ADFBE1F90A54C392DF86EACAC909D86A3EE644E21A116FCF47FCC71BEC6DBC34F0C0680F8F6F3B2D5E1BFE64D79B3422A60474E786783A248E4FB154804881E95FC1D069271040BC3433A5E347D357A97C3074101D6561FD2D270AEC5B9D9738A21CA7481D7911C468E2D9AD2EA2372B51D7FEDC71C95D9A10C13CE78AA0A44F031B3297666704C8B3EACEEED250CC6CA8E942E5C1565A34AE8ABD48E33FB371E3DBE0206D9C5FF54CBF69AB633944E66769AD0C79D6644769B8726893B75976B337995609FEF538DC37C79A065823B0E28EBE3D243DD9E7930E35C3DB98F2D69E1721C066A3E6479C5FA14E3F3355374E7D95AB0D45DC27AF4201D6BB09112B2088FBAE8D2BE7895E84274B6E805BBBE93EBD691B11B3488747F7FBD72B4BD47B0A28C2D3D8572CC389161EFC17320447A82A0CC492D071D1639C656FDB71F9E4B80B78296069B3301CDE577FFFB611C8D3EBE86E5CDA61D64E3AF02377A6B6E013DD5A97B676A22B04C874A8374A125A07C7400E893370E3A7498A6968832963DFE52134AA3DB6811ECBF100E7E3283BDB227DB49F6474E8E2D8EA3F624BBF84A9FE5FEBD35A21B6D31DEB1821B7B16AD78E03E9FB0C17C41A7232019DD7EE2FB704F322CE8C53BF966960BEAF8AD49ED637E1A75677257DF97563D21F34F5098CC5426F399288EA488DB993D88C999B38A2DED401CB4708D35CFC5B8F52504662A25ED3BA980 -MD = 20568C2332F67739833F2DC9FE13C7466E42E5A8D9732D382C3B5DD4 -Len = 25232 -Msg = 93B7161E99FDEE38713376A69FC4BCCC66C092CF4AC5B71C350089253CD17E7DB28A41490A354221017995ABBAECB67A2A989D81984F34D021FFF364E8D18FA58EF3DF090726DE7820F598DE625F90F10007F62C09F3E79EB21E847D28A8869EB217300CB4014AA83D7D7AC6DBB9ACB1E19A2BC76291527C571EF593B509AAB454F20BDCA4ABCD337B5087BA30BF4A87A936F400A13D4C455E60146596577C309FF25C22489D3D51A4BF1CEAC5B8E20A70C541922B78EED7F2C3C2DE6809D474237FF6B9221B6A20CC7046BD7A292A4A7E1ADB16B21DA6812422F0A2932494DA0DA8EAFC50260EDCE61D506F0F9DECE624E9B5C6EC555963D5F65BF5F978E441955B0276F156202C67ABAB3EA79013428DDFD880D861DF4E7A1BFFCEE619D04C0863B2D675DE97642B44FE7114C845B51E57306B2D0072DADA8673C0C056ECAF4B486653A6DCC00F337F1ACAB6B9B2D665B1A5BFEE45A754711D45C9AC63366C15143F89A5D32DE03C244CCF831C95A97D44C2BAEF5C90D8752E2CACCC11316E1B78E0F1C4B5B0A43871C784CF5D977058EF4CCA06172D6081996963F3DA127076493322D9BF39580F096A44169C9A93DD7C84A6AAF105270DB387990CA1BE0094BB28AD741DCB4295B16AF18C97E15A61AEC12E108D61D5F27215DC24DFA8B09CE5E35F61B230961727EDDBB907F69EA3988EA95F73299E4F3CBAB4A6506F0B4E083EDA4A24A7C309D4785AA1F2B1D63B0B021E3D7227AFBB6662C3E61586CBE8ACA227C61BD34EF7B7346F1E99DA9588DEB49BBA8A839A7D4CFBA9CF43A7B2EE85A97E3754EB9D1C7309BA8FCADD45641ACA4AE0612A9AC6872CCE7B6EC5493CCB45593017E6F918493B6882BA66FE8F96DA93D71CE4C435E405C44F4B67DEC0F896DA961F7BED7849580F3C88DD156EB8E31E7E325CABC1BC4F58E83BCF8E6204DAD75853788F121D9161427A435B06F08507258931FD7C36D39B4868DC575A70062168203D8BDD6067B458EB25AA5EC8AABBF9B1198DF0AECFCDA206DEE2DC4EE5721680CA364464A9E7EDD29608A3C6A2677A6492A549446E534E9A66C99B469F5DCC14D9148E280B39FEF77AFC6D97A48F194544A285DBF1B1D4DABE9E120E77774AD505DA0834E55D3E76FEB4F61779B86B883D6B3900B9DA38F3BC92E03643E7E0C7162B79FC6247C3F887E9C4F763B1F544504FE1C2D4A95BE2158A31FBB515431BE2B954275C706F3A3ED2B6A6A9705960C868271D0F3FE52D711BF377746F28F7BC1FEED6BF7DF64ABB5C61E3DEE6DDAB1FFA938EE21EA45CEAEC5F064F8436942BB48952E370C35A4DCFA8D73D9C75ADF8F3AF1D6FB98627258D96A63A398D90FDAA7F5C779DC8FD9733E432AC542BDD3995E5AC335EE30317A40D02FDC34720B84F253471654A709752D9ED2EA3DB089A05A579A9299DF1F4FE63780CBCEECE5E21B236368EAC7016890B533BF94B0E0EAB0D74D9BC9CB209840503B237821D03B71BC922FB4B74441CB8EEA845D6703525065395B6A72D47F901D052662465C48C1100C88A0A06799B4076B07704D65675FC3B52F1D0FD99E470B3209C6A90949ADE31AEB6272E94FB53398F0F289158FBBDAECB5CFEDE549D1BABD7E34A3BA9939331FF19A5CCDD53BB38D89A5B9255C0051B7392ED07B0D755E04B517934DC3FB6BFB9331198ED285B40A4B4388BA2E7C002C47A37C0B68BFDD72B61770DAEC39A9A01391D839B84AF6B71071CEFE6660C585372B3C6F9F735536ED0DFDA55F5F352768F716C4F6D412139A47B4304E5FDDA714C5E14F16187B9D8ACE53F6D3DD222985F8BC14EEABC1BA8EF7E0B68535DC50BC2E0322942FDF1233EF9CF4DBEBE205FC5E4604889BCA0F95381C11BADC6A3FFC71D7B28F0603EC720E7F8FB60ED463E72DE159AF0D49618E3DF16AFE272DD628106E3FE4DD198C685B6487060ECBB0E69DF995EA97E37A79789F147FC032B399889045623821473FD4D6CDB454C7B468D26EFBEA0DA4BBA85D993666560E1FAF8C09C2EC33EDB379245D8A5D261BAA60A6F367A517C2EA1CDF877AE2641ED22BB3C8A05A7FE287632C85230A41C44D9663D3008DF8E897E13970E3F013AB2F59A7AAE3BC50D28152E84EF607B1F1908812FDD0DA3285D982DD7C21C7673F93A3240CD01ACC88F6D70B958F89FC468550B6DDEBE8F3BC2E5C16FA9E3274668C3C54884412A55DD1EB3E81AB818696A7624705BF515E6B1EFB1D5CD504B6A733BC746661C5AB80CA5D9F5694B4E1DD664C41952BC1835E23087A61C050B328DE9CCBFC88BFF0CA64FBFF092EA7E61EF4A61232AD30378053CC59CE77C6BD262AD080342A4578E4EC21D338C717C567106482D1101EBC30669912D6B1FD3D1A2D1302D94BB8F442296C0A6377A90BD6CF627B7923BE4916F7442559B2964A70CE3B7F18A032DC0DD8F4C2503D6007FF7FBFB45F2F4CB61EFA79C74B301BD7C674D8CD5AFA38002744D5669D8F52F67A8783363B015092587DB9EC4F25329382D426AB9CA2731C8C2BED242E0D736F18D68BA906D5EFCF8845BCA9E006212C789355ABD40033D32BEF40E43123DA1B560D19BE7B2BEDEB3165A27FAF5AD3C8F8A6CBF1B2CD385F624E52F7E0635D6F203B04FAAC9604A44219C963C902B205D3449E9445223E9494FD4F6BC2CB3EADBD769C30FC39F62DF0B4541FCED20F96DDE4420188C808DA36D7F252D8D15D2CBFDD9D146A2C3C9EBDF4E7F16A3CE9D7EBBECF6E34F36AD52FBD7A4A90A708380D8C9AF17C14202470E61962AE1305789E4DACE05218836CCE567153C8509796DE7F6C59C61843F31ADCA02B0AC1483224B675DD3123CE720FBFCDF6F10E3C20D5343F63BD2D95C4FEAE809B2A2D7E30501E8361A1A3BDD4ACA01E9D10969C07355133680DF2FCE122E4395A3692A972FDB4AA1EDA5987539B19359C459C27ABEE0C0BDFAA7A3776B41147C61BC38916B74CBC6DCCA587DA2CDD6732C7BF1355CF182CD2FA3317F8DC49123442529E9D0042633AE5DD667248EFB1D85D6351A625975433B6D51F7B70CADAB215BCBEAA4CC5ABD3371568109DD1F7A8339EEBC1D11E3A77280BC445B3FFF984A53AA3DC3C96BE75AB26BB4C13DA4960F7CEB17EF36443149E00FE7041A83BE6DBAB71A627E1368FEBB0F98F710D560986D5A896FB9125BCC19D397661A10D27A65BCAED95CFC3A31F917CA9395CDC25C17AA3E1AC0D7043B41D49957FC93237EF22E0AE7791BDD30369AF5CAF672C4323EEAF53360341D046B69743BF7D8C34DE2791321372590B724B00279575CB44F41A5FD661868A7F7F7A4E035E9C3A2889A58063C65CC41FACC1E576D32BC02704610A9C15ED0F45DD4F365FB8157FF08E7CBE7585E314581750B5694CFB382FA16340EE7350F240E277EEB71E4CCE7CC9DF58DEDC7696120AA77FD8E6BFAE758CADBFD97ED29F8F0E62F4B142F1CBD43C8F9F4EBAB25B0359F9BA02E371A25F9573F1C773F86E53D7548D49F190FB7BF31FC726AA59E89D31039322EE53E203B476F5F32D68C2BEB6EC38DD9901434B877408DBBE8B3A88C2ED7F9445CF2AE091C85E4273F0FB7745BC693648FBAE3A4C76726E95F20A7FE1EDD8E43BF8CBC12379A7CC640D485BDD4747399BA5C206E1D224CEDC95617BCC204CBF8C2DB0E2C4F269644E3CCFC3D43A896B473A1E1BEA155CDB202036E5749C11C981FD80FE00E8EA85AE04A94500891AE660F09655AB9610CB51C7E80F2A7E638B269672A98266F9A358D51F937E5FC7E9BF5D89AFE8F5AEBC93750F6C1C5F5FAB800A17101FE7AD6E85B4BB79E0741AFF6418ED4B6C9C2772704FAADF6951F17CD76F518BC9E7A77FFEEE4748D8043D39699A46358580B639F9362EA1ACC6279590F9B691CE17DB4AC835D9874710BC3BCF0C18DB6B48B62549531C136AB0B8D756B08F9BC36AA13125569370DFFCC6C80E6F6388D1F465E0395E144FFD7A7F7CE081AD99C59D89440171A9E8CD606BFCD17567FF3FE63BE15794EC3B551E42A2286FFFEAF49D9096E63B75B1F75003FFE04475520B640E77E8D8738E155C457AC62DECEE08ABD4AF348402395BB6D579D7B840EEB95E186CE206C1A85270A9E541876BB10D560C3AE4A0E5E9BABB8B8841EA363EF8EE403B302490E5CF513796AE5092C7C9881A65064FC13B73A4756B886B8F016CF1D997686199AC24A21719AB293BA227E61EE8BD60A37384B5568455402665AF11D3D5D3FF941C1FE17CF490691BBDD74A205EF6E4E10AFD357F5546DEB185422882535CEF88A1C8A74BDC7DD722A9BD9DB55B80C2F6CF11AC6E381164B6FBA41ECBB33AF31278A19D6F20104D04011C2A2287D7597DBDA5FAFDF63584EDC3739674F2BDBC9012E0B7741F4C884CA742F7D5CEBB594AD7F55826EE85E3C06CC77686CBCDA0800FB4B08569D1D8F396BFCA7CF61FFBD3911B444E1C603 -MD = 1A320EA5D2C3B7209FE9AA05340CA28E514E1890806406C57681E420 -Len = 25295 -Msg = 26030AE3580BD7A2ACCDE299CD103D40E484125A595732C2F534843B11EAB35AEFD3EA26E9ADBC86CEB75E1660A431B1BF2D5A6E297C0A1FC3ADF0CBCE8A079EF42D02A60ACF2F1F8B282E6FF4AB9F6B9B894EF710943C1BB714BC7F8168BCFAC2AF210ADED1E6EFF2FC3C986FBD1A47F5103831A97BFD53320FA941B6FD0F3778FC4D7351DE54538196E997F0337B1254255C91D81E819E9CBD36D70E918931BE309E1CA4477084F8FE86D2D4EFF136D7554E1F42753DF71AAED69FCED1B86C25D6B023FF21ED89E5785E31E06101211D38CF90FEC3530D6FCE43E2E8C7EBC8523AF1691EAD5D0AA38CAC5DAF5EFAC84F07A15EB8C8D36ACFDDE04E52556090CBF5C0D048E1701A19F6C5ADB49A43144682B4F7DBA3A93EEBF61E16CCB74459B7C4542919C5F663F72BE0E3C85F4DDBBF05A01F6FEBF1D76C0F4CEAA3372D4E5CE4807921894A41677486B393933168CCDA23F7952033B161A08AD95A713BCFEB98BB85BF909F8A746D6224AF410F82D459866C2DD82F4508A3670529492B712DFB09ED5F916D7D08898ACFD1F18FB75E12487D0250B0AEC2C411B540E8E6EE67768C13D764A194919796CE57E486AEB4E994BA087AD5298FEA8CFD1BEC5D427B7C08300AF6A0DA691C6D6983DAE2BDB087616EA7C935F4A4CA52090D05DBAFF82AB6A0444ECEE583A345C49F43EE1BF401C3989B1BDB7479B69C4E25B8AFFEBDFFF5B3E257FD6746D7F2A3D00B5F6E8464D87A41EBF3A40D84E776A057904731DF49170BCFFE7A02078B18FF651A2D5622AD543DDC2A100678EEB613220F8F5478BAB071A177214E71F6236FC67C59EBA73E545C157F242345024B69144D1DE284EAF2CBEDCC867BD028A91E7B648A4773B6BAAFA422D62318B84B2651FC70D8ABFF106503614B6C8167A8E27E87C5519DED9575C3D74269374C34679164C674ACE1F5F8633D0134F15624E91C182A4BF918F0CEB61FAEAA1CCC08A2B240C1EFDB077498159D34054BAE02C0E449C8513AB0D59982AAFD9A3DF3E976CF4DE029B7FB6D7DEF3A7A7EE3D5CF8BE21E764070D26CB230BF7F932E7D9730377AF8A0098513612E0C2891D2997A7A835D4651C1ECA5FC94CE92EAD035F016F158D292CA6FC71525916B1BBF4DC7ED509766DF493C6F735ECFB9B1DD91EF838C9C17CCAB3C0012DEDFAB4A99C6A7D9E10717B5CA087D92C515183526C5215940851C0C20B6DD3E2FF25BEDE89C675A047AF83F12A5C3C6A62468EBB0B5E99278D102310BDD6A810D1116439E5103CD60C0C89BD8B31CB9B2DA2A2DE84C29D2F6631A28CC604CC9888E44B8BC1DA45320EED85D4857953A8D143B96783198925785B9338CCE8EFAC76D7A02115425BDCA274D359A235DE181E8E5EBB44960668F163F2D3394FD76E2DD33D0E07A10813FCD7D8B7086A411D8F7DE7B5CA101330E92CE2DC3D7AC2030D5219D48140B3DA0B5A7B032E7888BDCD3E5332595382FE3D0FE651C0C744340DA654865933D3EE8EB3C0350FF14A8350071AE1789D31E933B6E1ABABE8C067111C3FF7530B193349F559FBFDF19B0E8A8D13DDE91E51674522D958120E3215BA1F27BE4E6562EAD4C8EE90ACE24639A372B3B7BF60D103F282DD573C44B4398E2F4AA047BA2074B8E78EB8C55636FDA67CA3631F3491AD6E335BD9C96D6C2BF2F80419698A052866ABF7AF8ADCBCEF3F5BC8ACA2D8DD0FC6C670A3AE55C432E13DDFDFC848703B2A0C1229C16A3BDCBB8F19F226F55E91FC461AF73A483AF32DCADB45DE903B5A246FECF1A683D10B000F204A2641542DAA80EAF4D0BC4F0E80375E815B8E9AE8BA9C93CB7AA1E6D7EBC7D661963E85726127F66081EE498657FA8DA8095D48E24FD9CF07011648AEFEBAF1FC2EA2E91DFF79B5AB554403E5D4380D72AC1209AB9582C2916EE33B113CF789428A2802AD238602DE2C3472A52F3AAC7154C547CD63D50DD62FDACBDA3A5A3CD8D0A6986C84CF05DF26B3F346F843F62BBFC9F3AF775F64D7DA03628FD4230C35551500AEEE894CEAF75F363AF0B3B02428C2ECE0B80CCEC1D40C02A893910EC6F7893DCA9B19438140F869BFC0747B11978DB4980257B435492B4A24AA83613CAA23DE17AC1EDE2EC0060D843791C9A589343077EE98430FF70BF6B47D36E8A42937AA27CF2B36F6835604DD93BB64EF5804B1EAD3CE074C62946164FB10B694A9A6710527DB8908DBEEDB63CE2903D8F474A2877BCDCCD4808881F00B5317E22C052AFFC59D7D6B52F868438F7CB6674CF1EB9E79853A744B4A15F8D3DE20D869DCDB49650244890B8A0DF3D4A4A4C32B6540B72D346FD13D14F5CA5C1A3761C8AE77DDB2E47EF2D683262D66919748E8F4220ED14B268069D841D43B123B21695F8A92AC5372EC337DF3C4639549D582DF663F3F958C5162DE48A0920C828DDCBFA6F7CC44F5E5E43938FE5D0DC40065883A00BC80DFFC863F7805151E8B56D5AA7DF860938C350FB5077431600DC3A1355038E52D89C0BCE16D89B3B8735ACC8D06982724FE07D4CD4718ECA6EF667BDDF47C7755E384EAF8052573E177A188BD28956A6F928BEDE27470D2945412A215CBEB11DD36216873482A5AF0323044065236878ACAAB456FFC2938BFD71D7BF222FF639ED3E90AAEE02DAB4E47DDB82495129D8DE996D3DC6BBF19E5B9A41BA8A026140474885912E103799C04C01D82BDF01BA70C6E056AA487D3D3FB1B403060285298BDF2A70403E49C210AD5EA2820DC1F4B21C5190369AB1AC9D5651AC78B4617C05906146D6464FFE47D858FCE5F5AF1D40A3D39A7FEA465955589DA9FE37DBD3B0BBB9188247DFBBF4FF22EE8FFBFF4894B7685C0761A52C7CB82005D4A0CD1D199F255590BEAD0936019C443CFEE515FCE13F6D188387818C196718D2370838D904A39E57E3144F00BD2D3CF0CF9567408BA8479BD83178467C779D786BCEDEF71AB61670D680919F5CD938CA58FB92CA6F90890A293F4E996DA98279AD5D84A3A76C56A3101F1D7BB94483397C466B233CB5D0BF428E2D066A193D48AA7788996C5B51B170571FCDC484D24FA66A1781476675AE5B05A63483F8EB0D297E3101D2118F07887C70551CE8448F2FE9CCA1EFB4D045F425A654602A74CB67A34F7AC2752F0F21CF8984B93FF9BA28DECD816D7950BF495CFF6D94A966F46015E8D04B590A57C5DE0BC597A002AB5B98C67478466D6EBD28B0D7FFEB0B2B6052F5CF25B0B8B78A83324734DE69B4F8EF7096BA8801456395BF572EA1A5630A113CDD18E83DEBD2DD020E4BC15EC2528B6C9B5D3CA021F826FD92319EA6EB7AE048D8E61B12EC333C27A2374E8247C8A39A1F276F365AA507E6F615F0E8C2AD2F766C8E70B4BB9A9E7C1729E2312F480DE9087EA35BD98FE68B22D0E37531218766AD24EB6D389CB1EC154A16F9D436795B0837300C017CD055F6499B00E55D5BA261327350D2ECB779D4E660F75647A07734D414F17FD9804A841200546AC56F69145A5C1740D6431E71629AD9E1C6C7F8243CC1C1F40E8DF78495AE298634A732675B35FE49DAF39415573C114C69EAFD734C34F73908587035BE049492221882423496E854E573C2A33F796736CFC8B94B7158854800337F5084284F8B78D8E41CFE9FEF4CD28D121833AE73F319AB57570FC5DCD8CD4EAEDC5885140FFC679A61FC983884D0762EA353E0777854B861C75A4C6EC10E54AA0EAB779A427FE9E20B0CF3504B79768BC1FCAE081AC1A093E8A683D2A6B24AC126B56B3F0627D4ED599CD1797BF0E1479498869DDAC76576796B93788FD7B29AC7394FA872CE0F906A2A4AEB38BCE1EF030F33FA3E3933D8A42E81496B52156E43EBBC825FB4E268DD3D5544CCF8F018937A3B6727019FDD7B54909DE27F02F0D3F37CB777ACD38A059B92E7D7BC1F8DAF469608F55765B27289DFE6A7C98DB38E843A9180FDE63551B280489375C033F26A5543E7A0889942E3D4121A4AB84AF8FA1C6CBE8C3EC929141258666C1AFA64DC1C7B6FC705BA898E9429F269F07FA6E3F5D7392F6276390F37229C1C60B71E29D53D97C44F3D98B07A7885A22A983CF69F35AC00A616AB4C533A8DE6AC8BE483C27B7B756B78A8F6903EFE5502CBA86AE00B1F081C2FE9046DD9B6164D40A90673D368AD7CAB4D6B43689A082F26243658A3F5F21132FC00ECC4460C4C13231E1C3D34AEBFA493386E082EE66048254CD2C1203DBF50DC01911C865DA20FFCD25989208856A50885C2B8A30CEA8F6CDD777A139AF0E190BE80596BB647529FB2918762B7D3C13FF7740CFAD1AE00A123DE4049CF44AD5E02D0F1A432EC91F77D293EB236DF3077AE0196B39AFF97EB971B3B6160A20201AF9FD5F059D882AFC6385F1EABE8D5481922D7A17F27D9740C19AD80CAAF1F486E4C9B9F7F827DB000E583A1BC88E98DBB2E4B8DD4375152C1E01F916D7C1C2AF6C734B5CE4D8CB0C8EA -MD = 7E8D33BF8D97FE1E59562D3C5108A5507C8B6517242DFBFE7D13B338 -Len = 25358 -Msg = D746A657E2BD266D855EBF11ABE4EDF5902A56181FAEDD33E09A0B9983216EE573E41A2DF860311F7E822488932498103A5C51D547FF4513881B00DF07B49338A5F90BA1090B24B4D950F97678774BE0ACB8F846AEB19F54092F839A19AB2CFDBF509DD34B37B8A3FC4DBBF84677760A32A0F8E3D74E7E92E140FD663CD2424219709C61D1E92093563709BC895FEE699B7F97AF33928F4C92CBA880AB07028E7F59A81ABDFC8C863D96E0E910508FAD1C91969ED625604BC0B573139B3715E4108D422E0E8070D30F9BC12E517D5ECA7B73F6370760186DAEE60A2C678680B5E53FA95E685974B836DCA974C0944FA43366AB310E8FDB8A7FEFAD79BEDC4A639E9FFB00648561D3AA686A3D929FF7B359615A821EB95D0124F60D7F11AC4360BA6A6833C17690DACF665B22B1A45ECA097991E0BAF9D25169B6A914331E3D889C0418D0A8BA4827CE98B1EE64EDC932749F14E9F845A867AF1840C6E94D97A17328EF015D328073AC90A15607FD97C329A7A8902494F8E74EBC429F0CC5DA028B11AB29F5E956940235B09E5F171F88792FC4448C686D6D52206FC07CE4D1077F6120B51CF1ED5A0DE62851B022C9FB3EB9667ACC9A24D030BD23CED36F2446B49983FB32560B4CA5E2C9407D7E4638002A007C7D8D208027A9D60797A1B3F17E4C1C1A23E5592B86EB46EA5959B2D891A6BEC1103B62DACC84573FC1D7D955201E140CEACF4966B011E1CE34D496A7D8180C95DC6B2D3F3962D28FEE4DE647092545B42575643DFAEC1C09FD9A19BF9C8EEAE8F078F8DCFEC3EA625E5ABF62191C87E75AECA34D91200F630C3E7CEC3AF56C495CB41D3D2BCF00A23F89B19A3D4C1C6498E8F2F6D97C62D8771B86CF1BC70B02662FFA8E1B9B3050B2B3E9BDE6A1BBA414D19C8E3821DB98920469F648CCFF6EAAE7F32173A7F9738A89452E7DECBF3251383DE36ACF556F68A6D605D0D79A99B45682E58AD7C408305D0026B86E8B3951CD6D75C9F51EBA565B53E3B5ED04439F9EB53AAAC14257CD4D1A37BD5686374518C1D10F98B42B1D443B3A4F6E52EB3290C5F7941BBBCA82FCC0684DA31B3A3C446BBD48F0BC89AAA67E06DCC985A5426C9AC5C7A2E337D93E3DC77A88D6CA1105B28CD651C2392D715FE3069B0E7EFD590B406DA3CF4DC6A2895D01E03BA7149C7F9A13ADEE622910F21315F9A0A5A13793066D079665EF387084BAB5E9B5243839F3DF92FFB383F047EEFE101CAF8577007FF80C3149B96376CD280DC752D35F9069BFB0299256D9F3F6F49F35E75C7C929C3032AD232C854A89F72F54C851B6C32DAFF87B6F7788033592E759066239A8753C272622920D95F5C1E8D4D0481DFA638428379B33EFA6E00521ED47A206E348617ABC9DC5FABA3E961AC24074C300AAA41B6DAE4D71A20529DF623B975373E345B5BDC5B2B20EA6DBDEE15BEBECD33A8B8BD0218599A0008143D9FAD590CDED41D5751C5B6A28F229CB37CC6B6D486BECCE8BAEE8484452F9C41B8ECB28EE683F0676D4AD19D1959E4DA95A22644EE0BA6290117FEE90995C352787BFA880A9BF467745B0D98502FA8F74389638B456DEAA7074B5564EB7D24382B4B19CF16AECB0C805A81516E527D184583800E1EC9CF3418A4F57E008EDA40FD338A39335655EA07C1A5298F3927A766F67D06CE502BA05D002F3F4E005AD3DD823E2393AFB52448321F0B91EF4CFBFA1507C8C24422BA87718C6242A88A0D3A0F230B057A470BF034E5EF49CB5EBF09C28D6D6396B5A0DB7DE4509D09A0A3F5799A6C29E6FDF7166131219004DCDA0018EDFC8144D2EFC9B3E74317743CE6BB124AC2DBB4087CCBCBA889B75035C5089518956484265F743A379DA9AC6BDCA83FCDB871D10C3605FFFBB0DB6A6EF853C448DBCD4B03E2B5E95C78D52340531D25995243B65D7D676096381FF00BAF5A8DB595173990F3542C3C95B0D399F14C8CB93E68A484B2E9235A9094378C018F8E884B194EE277F0AFB314F323281043D7CE56EFB931988B4B7DBF16AE126A82B012D61E2C9EAB3A5B6B64B9354918B75661B44AAAD9BA94377E4882A929F1FEB63731DE9B8222CA0A8E93A0F0AFC5FDCDA67F2D8E482F476DC79AA5012FBB69AEC102C0B5A6BF70B40023707C986DB7F18FB57E5AD5EFEF046CFD5F25F5101C974499F6AE05B2AC1B22E7A907A267E5B18A440545199C5933006E0FBB21ACC47ABFC0FBE98A4F49DACDFDA3AF8FEBB46F27D4766170302070C3A657FCB70897E817BD9EA88B4718147003480C21A2157ED8DF6055F51CF783F103E442DD15BAA564C0987C858BD8068E8013B89860A56779B077BD6DAD95FDD2DAD879D7D19B052C4B3BF5AFBE379EB71A030F8D8634EA36121A1B0AEB2227205E203E83334A35BE7BDAEDBD25C9E2D9437CDACCA0F1DB64B84752388BFC162339623A41FC8329B2BD0F08472DE1677A718A0BB7F6F88F7ABB8EC4A1E830348AE394EA1733F36F4D47FCC4785F42F753E5FFCACF15FEEE41ABDE237BD7244F5AC66BD7F02D617345E2AF76B2EAC9F6748CFE3A5BA436602731A2C2A2A61515F47441749E0558B10E75D3643997547C6F63BD7E379714C35615319386C03FFC9A9C8E7FC546904D8690C58EE0D9EFDEA896BDD82E09F3C4F9CF5C88FB76214115F4F772F9D2629FBBFADDB2AF5EE8DAB77EC92F9FCD3FB287FF17B208C6766B9C4EFFF343A6FCF7F0140459B5DFBAA94DDC6A0D0BDE49C5B593B6D7E207D51823C2BAC051D9F8F29EB6790A4B61B9ED8542732393BD3EFF981D89A3C1CC845CF6517EFBF5615263A34F3EC01254BBD55BE646968358E57A4B3F53A5EC74E17A29E7C4A2695D3480C688F7CBBFD9F006408D8B39B2E998B23D1738C59D29310C300C6EAD4230E85DC580702B3377796C2E555C4FC851D4D9C9E03B190FA56A8959CAF0BFFB17B83F56215EE01C2E787C5BF2D3DB2A8CDE7E717646A7E20D054E4389A583CB4733C714E76A91E0AC17672AFC9F5647CB3FA57A2DD62E0F2DB3981A39A8149F0327CE45903354FE6566B922D610FBE56DECFBA1EEB509BA92C4952012D69B30093A26613E3967143836A19A1F1C2AB3F8E79B5B3172C53A487BDF65FE8DAFFB39203EA654D020847CEBC5DB55A5FDFA3FA48AED2F6D42699D2E7B01FABCB458B0D1C61A0848B721B77FD2E3E9AD6FF77E4602BADE3CEF6666E96BA60D12ED6E6B70EB3ABD6D979BFBC7546A17A9AE67BA14E16B2ECFD79B79F7DA684ABC21105EE194CB4BC599D67BAF6BF6B9518D632405B13C4FBA5A6598B351190826D679F7E51F51177A4DC8BC59C7E79E43642744A5C79D15D7D2DE74F86ACC5FD53F2EB25827B3F770270DBE279280272B80DB589E972CB731FDD5CAF843A383216F23FD62D65547E4842B1E604C65B85018B397520DAD1573D1DA095E547760350DB542EFE4E32D32FA20D5E8FF28CB2926111156A385F87F237F64FA318FA1C3C1DD9125CDCF1B6F2914304D1805B275863DF417CD705C22E3E1479E48BE9DBC95C5E693399D30EA9A56F98EEDA283BAE840FB314472653D3912F51F9180D254FD542AD81635D99E133AEA9E5185D98254F1D3435E8CF3D63CF217C7C1C3315A7263C28B6F0D1FA61C6F2084C98CF77366135699154CAFBA6D9A7AC0AD364CDB0C034375289217CDE0D87BEB8335FD64D7F2AAA590E7931B9B96F695119A190964176C600E8DF560738A74802CED0FEFEFF4E3E5F57CE6AB45940A617D2AE668C9F69CFE0B579EFD587674959750DAE0095B37B627A9ED3EE4FB17BCEF2334DC460FA9F93A8337C71E599147F9173F7E2E59B41B027725928D5238FEA6AB4A05DA6D539D3FF73E6BAFB4E3C03A8C7F2E732E83593FADF260738F44DC082C6CADFA8D46E3463D747B0C17A166D3C901CA4E2E2919EA82B959AA65D64EC8B2DA9C0BAA84EB6B773306C43F04FB5608DD02ECAB10609F10DFA85C44C7FEBC4EA87890927C6C26DD6B5F032BDE7FCE30394A6F7AD37CF2132CF625A84093EC84853B22B618332E6A5B14E6F894914EC716CB555DDA4E757D2EB159C583CFBF5242744D088B7836822A7FB545FD9A89C288F6EE202353A0461754689DA736675174ED939E89D3F28898E0C355955CBB04295CE35EA5E650373ABBCF0C96706879FC170DA9CA09D74DA7529FA059EACB9393BC32E13B7C092C201CDD59CE99F79556ECB555FF36F2ED4113004211C305B403657AECC5C049ED8F5DBD15257E9AE5580DCB40DE98A2B0A15517BEBF678EBB8B2BA36D0DA6198E5AB14ED02288B85E7E4ADE60F1AC05A55DDE55114AB052CCE1F13269E5FFD1D9AF831113E8E0FE1CF9AA1B9271C22E60373709A654AFAD2B2BCBBCBABF54023255AC158FE10B5A56B2B62D9CC57FC6199CE5FC9CFE6FF1D0FD8F38A84AABAE0E8EFD691F8EFA2842C6EE4753D97A649873466A0F397E538117A08F65846B7A5F23B469D9253AD2D51E2BECD38 -MD = 49FAB027745A1B90B8C87AD6CC902B06554FCA6177598F3252A80158 -Len = 25421 -Msg = 1E695DFA66BE588ABEFAEE74D48E02C306C8A527DDACD0B24B3A40276319F7EC7BF96E8BCEB304755953E3C5E243276333D007241D59F54005D05697540D4E24C063830AF1FA47E8779C802EFB7BE61AEB4D87FF32B54603C933C1D88D749A65B187EF629E88A3497F68AEB67AEA9736D04DBDE9E302E3A60A9674A1F41EEABB3B7F7E1028D1CF5BC63EC12BDE1FF917A3CF5E6C321B930A48D4EC9C93A0FB8144D2A0FE1BAD73F3791503072804C6168E4AD28A2958B378BC1E61D7EAA951E03B3FD7302144D189840DD5A5DE0535DAA281329B71CC981FF94E487B1369856D8FD1960F4B5BA0CF8457625610218371166396C52301A395A58C1A267757E5069196B54E3FF087FAFE8B92E5B2B954F0B6CF71AC1056F1344009CCE6F6A079D5FF704CF1CBA900B2A41F3768063AEB6C714100948A090E6B57BB4A57523BA1E8C2C4ACB7451924540E2634AA9D414E0152017434FD1AB7CE367A39930D9B247E138199220A45C1EB9764FD5BE82A3B259EDA3A28ED297C5B7AF52E0692216C8DA26D8819B2A27424B9D5A9CBA77DD35A6AB4094E27CA1201550F143E1ECA97F0F29BB32859838CAA0D1398F386D6A8B689FBDB3FC4165E1509111BA41AFB7C471A3E4A28A7A722BB638BDFABE1F89DFFFA9CB322D4D334BDD97FB32F2D2B470E6A5222DA277CAB96C9AAFB25AFBEEF148CE130F18F43B1DA4862D68AC6B170C5A53B1E06938D91F3DB13A68E44FA34B8DB67C8326DC07627842EC8BBEEBBA8A45CA5544357D0B4F0B8ACF0BA032404A81858BF92EE0EAF2FC6078C0E98DDF71B7BDAAA0ED5794FE911F708FC55082B4AEA991757E3165CDD1A26CD019D226A673EC5A9771BDC1BE3D522B4BACEA3F68E50D4C69BEE67259266EFA00C188D429FFBC54A436A0D789601F6043B719D92DAA786E95F4E55047F2109FAA5D345D47DA6D155BCAEFF4848937E7DFA8DE0172037F24E3CFDAFEDE634368DFA0F01B44E3481604AB20C95DBC7F15533D484F1AABD196399A617A4D72C96805FF4AA2B04CA8247A70C96E4F5B6AEA7B1A720B6734F84A8F54DF79BF9412858484AFE1AFD81106E5197020952D43557F7A0358C5BDD13A95DD5E99BB00AC72FE75D9C5AF4345A8437453A19C4C1FB0ADAC9D6DB4B28D94B2786AAC3F3A895AF329D2115A56272AB47AB565CA58C9A6F21C7D3EE67777FC7AB8164A9051463CFCA067A278B661AEB9356719426EC296C970B26C7BD3A0627A4177DB33903FA449B9BDAA9BBE65BB1EB3429267A0DF5E434C319E76558FA24AECC7D76E7C1392F93809F70FB8801DDC2660F84F6A4B32492A5D91F6CFFF5AFE38AB561689717A605BC1D8D8459CF8B1423E6B76723C0982238105503C75C0F3D11C254FC5016D8F7BCCCF2C8042371ECD79BB03B6F67B261739A644B41A089597A197463A88DADAA62ED6C8E2814B978F331D25846A198DF7D39697B41789D080B44061D0E38D071AAEBD810AF22D9A39336ADFB1A99765CFFC3E492B4649A16C6297EE5FE9E62E87D85D3339DA051981B794079E8DC0369E16FF03448A32070EA93585082E9FF4B50A1A894AC3AD9CD01701FF43015FF19E22BDFC675C93A83F6881B9092F1697D0BC397CD81530B4BAAB88D47343FFC28F99FA5577F2C46F8653CA051778DBF8EEE3057CB349773D0DD5907D370A5B66CF83A33BE5CD07EF709C5254A1523D6F5D75D3A3359AAFC2CA00B543C0C775A66F4E2A9BD3CF2BFE4A671157B8D6904C42C3D0DF600CAC35CDD6F4724C2AF81990AEC2B5D9858E6E18B0909CEE5E9388C5F0AC4040750913576F62A809E7AF49C6C41C346325AE7CC9D65BA0945E8EA61017EE23D099F99A6DACA3C7C5E1719CA64BD82F346CDF5B7AD5716F180D642C187A10FDCE11DBB8E7E15996A23B553716C2922CD53B4AD7649F9AC9C4C035F9EE06BAF920D9477B06668CE0510B8D8DF23762D1F00B75954AA144D79C358F9CF5EEDE775D296932B45C97E6F99E46AAC93884A76C2F60ECA16D18C1DEC6AA02430E2270033D4AD8944219E20E0236B35D6B98615131DD751690D1A4BEDFE071A24E366CE8532D2763F94BD013356AFCEEA2AFD450777264C0CCF9FC42F0B358F3FF36ED5696D27A2C5F8B6E7075EFD2B6A980C8A562890862FD4CDFE5D1FF60966502AC5F1E6FFD75B5403052367D899D89EC0A31CFBA9CD1CC5722C650980E34D1E2118D6B14660F5639D83F9C3E8E9FCC51C861869BDB504690AF18280786E29050E29F188B7F322DD0940BFEC7CF44A6BC987278F87157E951C5F0C74537E14D0AFE914FBCB5F857DE143B939DC855A8F2EB75A5D040EDE036A878AE21BBA804BE43B89718D0E951C613386F1C197B30FDB311B90BE90246AAB85F7D8E5ADF80E0A3A7B21973C8133A3F17344DCFF501F1ED046D77DF036947316F389AA523A35014165CFCC926588A21951BF99F0A8CA63A4EBBF4BDCCA095FB6E18BA6223D636C27773DADEF536ED9EBF0B725CC6D69084E32A033832802324A1DDCB334149139C2AC6CECE46157B3B2ABEE0998C956BF2CC8E4C9DF7DA7F23B38D44A37971BAB1BF55E352DCE18D86D1E9B87C16B5090AD5110565BA1343C11DE170D25116D841D29C896216905DB64DD07ACA19FC47FBB1F57D5EE7248A5DF647E54D4CCFB8BF6FCC67A62BD2658DC064B8E7AFD654CA34A2B49BFD2F26EF46FEB2377499145A961F8D3B83FA0FF666C337250BE5285A2B6DD51ED18E96FAC5D5640D210BE9706A5163395D871FE2D20D4279EBB9AEE3F2C3DD07508F02CDD9C670D5A5BB533790851B3B404015D1FA23762D51E5D1CED427C5D4C633CBE4C290592C24F426E16447B5EEE5D1E79896A2485B7D4C7A73981FEAABD91A02DB4D5B4921AE71B0735C099048BC661E581EFE5912C69839C2C14B8B2B2DA612A37D8C70F4E82ED1B229CF93066D08BB98BFA6CCA69A53995955E16A13A24C2F00F999708AE4BD2604828DECA94767910882C2900DACBB3F17489D0E116985FC78412B0F3A2E45F022630729A66C9F6156DC6639C7225E230F90FB92F443E327EBDDBE324175402A5A828173396AF8D64F142B966E4966FFE76FF40796E5882E7675223509DF029D474B761464C659844D0936A50769018DFB87B4EB85313312B1FE55B46D083D4FD2143C2DCBCFB1C2D5F75449E24AB9EE218CE5AB20EB19FC256737EB576A4B6E1911DB7C7EEC613321DEAEE71925B5C94D140DAFF431683667DB7E9D19E77E83127C7C2096A6704DF95ECF906D30465CE1C3C9A844E7806EEB5A947CC4A71E5A08E9D204D93ACA0C4F607BAF345DF3824613CB5090025E8B8723A90BDF04AE391744C3CDC5C696311317E77041C819087044F31E22905BC22BD478D7046960E8E966735F261CF8FC9A4F87E06F78AFD3F32BA58E7BD25F08AD91550DC61C2A3DF036F5CD44CE5812C29620D525559BE42F7BA9F676236589473B63C22F13E4BC258F6AEB6CF6A0F63252F64C7F19D0B3D1BF0E261E4961629E0085D3F06CE5BBF6D2D7569CA426014270517DD6F9B87B4FDB29CEF9785FD5A56B8FEBF36C250C589E9AEAD32B2AA878BFFF58C0197643868155C93717315F91B3E0F14EB4FF214AD3649306FAE7395F2A5368F16D32C77ECE3A6B49BD48357F05462428F08CECC937DF7C8257A9A92194F44E4E7808EE4EA37ED1F8AD96CE79386CF9D2EAA37F6CAC87CBFCC099FBD543D9B459952C1B2DADDB5BB463EE36FC6BCE7229ACF2C36AF821D568523AAE61BE1589BDD1B2EBB1C028E4BD0F4D8DD8F5ED148644D77BF0A8EF52F9C729A545C92E29E214065D28FB153CCCDDFC82A7CBCD41E333316D7A1A04777727C997C6576C9B1364F1151C071687597F86581DD9E57A2F84C319EC693958224B3540D53034088D9D30C791D9529EBFD09DDFE8D7B6C19510878A776EBD0776CA84365E3F86C729BEC586F81CC90268A0DDCEF5703E6DF229F176E097F1064A7593207662E054199DE2D649DBBABDA65E6DAC7D2BB49887C62EA8097C1108CA29070A7E111F65EC413AA09E4EA520EFD522CF2C897F1201322B6C7ADA0331E991B8F63E874B13F6594213DC65D44B8D96325A20AD057B44F997D236A3ED5957EC5C6CC73F97B41547EC46BE0E77B78D91C0EF03F4737BFEBB0731CE9F7AD838B57DD851CDD3569E62EBAF2D2AF2496427CC2932633A372A2E46130B8BED1753903A2E145996C2EB7EE6E85727E938FAEC27C56B3EBEF3F48A10A5A10D32D8C5AD80B9A951DFC0157AD65AF27374E0D7CC284EF7FD8A2A880B8545317CD82A2C8392D96DB5E51F2A73309934F18960F69EBE43D9DD4583F30E6000FFDF35E5717FB8B4626D1E28A9604FB484F677B828EBE2C0C8C38DA66CF27BDC8DAE10169033BC01E1EF1ABE97A0145075155A3D94AE2E8D8488B3D018F9420B3EB3DE93B3511C3961D9ACB62257F903A364FC6A79A2567EB5289F50E2494C4AB5F3CCD063EB3C36FC1C0F8 -MD = 7D986930717A9EB8B6D5B548185903BF7E5D6461E1F5A17C1C687219 -Len = 25484 -Msg = 6DD1DC4FBCEAF50EC30E5AB7AEC93437CE244D3B52DB49347E88F70FA69AA63C6504BD2473B2411AFED5E87E9C1EA8DF1B9990C49A58AF44F8AF616B6338C1AE432F93F9031EB07E87240D0649E49F1F92523A84B4F017753D7C3FD11A2E12ADCC50CC86F6AA5B6922DA39034A13D73499EB11F0B4A600325BFC9B221D625A3B741ABBD51D12DBF3F8EC39649C7135DD063DCBEFE65A1A07F60E8498462B70A351DF4E50774CF779425E6833D3667BC73E510A8B7602AC6BBB0B32D041513AA1750BA4DFF7DFD883D4D102399BA634575ACF6487F54932328BFCB2721DE35248FC37DA883439BAD9E953DFA9B38C60AECC94F233533208080B80ECFEE15F83F96357F8F76F36F956B16EC0D4192DB6994822B1C4A35007DEA68C4CF8777481D3A88EAE7FEA967249591C60F59BFA66869DB01A6A1565911E18FD2F9B1DCEE640801A6471E68435394687D3A773D60AC0930312531B57B01AE682972E6CA5CCDD4B67F7C27382DF42C36528E3A4BE5F692EFE2526A85162CE1EFB45ACF4588AA1526EBD7D2D914A246794D4B00DB87B652262976FA34106A6DA0D5A0CE0FFF47DF94BD03AD6E9882243E93FBA0E7EBAE78E9A394F0BBD1BDB977F6FF7D4AFD626120F97DDAE282E58FF6314F124A7BE2FEF304A598F822CFB4DE879782B782F53B543230102DB46EFA550928071630419FA43D6A807DB14322FEDAA277A0C139ECAE21969BD0F2A3B062ABBA6700A02B3538761A1DB9ADCC96CAC10083C1B263266E349F9384D9D347DAEC37CAB23C1D48B2250B4CEA4FC2D1EFC2177A770A53C61BDFD5EBED6464C4B70B03D57491F2E050ECBEAC8B0E54A67B8A87B83C4294C5D5FE4F3EE565AB859E21DBBD25053EEE0316A59403CE9E57CB02591FF60F0D1A6ADC8FC02AD3A1846FC3E61425B293C9E229DAB5731A9C4273B05DD84C1A226485E6BE675706082848E3EE84876E14434C64A83F418A48C7F5F5B672A8A6CB1622C7C996AA8BF50DB9AD32FC11E8A73AB14BC72E2C9545F591DB4370876B1A30351F456798CD27933B83F6266ABE74A089F38D1C184FE7D11147465CD0C01C47825F6F5062879878AB4B588FF981A7A6AF5EE507B6513BFD6C7AE50C7FB576DE698F2EA28FE7681B91D482F271B5F91A40182C1B9AC2A36C436D02CA6966E3964D9A0A872DA2788D8CDE74433BA25163534ACBEC6CCBE2F71D09B4F998834391B683B153656C71253296757F7EE2B44B14E508F4B20C76D1E1B7DC0F06AA490E93F600CEE71AFC02FB4E469ABED68DA4270FDDC8DD147F03E488FA429F65350F1B3CB351DB80E8B9D3D14BBAB48077304B53C1F57CC9144B65F9A0A7ADDE678ADC81D4A5F2F44082A4665976B5241FE242ADDE6DB2AB022DF7BD839BF0B058B5BC9636F3E359A3D8A6CFFF21B2ED643A0D9F617FB57BD7E4771413E865AFB90C77077F5E0CE241E0B3E5E526E45810761A5874B86899C5C39DE71218DFA11C888EFCE1D1AE80E1BD09793C698B6B0705B98FCE39331876316C49FA39545A05A52B8DBD0ABC8F3B82F1A571546846FED670531530A232701CB337DD970EAA02FA2ABFED2180D9ECDD82F8505BD2AF003D0B139CB170983FCEF4ECE5E64CA411BE0FE07976746A88F2A82FAE7BE94A158C0394EC1139403C280B3F6577E1E3567F812414F6255DD7625E76D238D0E935ADB804B0DCA60AF7ED1CF0D7C0BDD66308A25CE6C94F516AE816802240E986A6B6144B1721CF7A02EAFD80941AC151C1C8AC28D0A7F255D9AE092CB66AE67A8988D21557CC86497D8C3465323DE44F1C85791EEF92644B51307292F896584046F2AF9DC2797279A63F9BB3FD920DC632E321E177ED2F96E824B060702E43CC167A7F63B80A5CC31975CB4DF56EDA691DEF0F7A1B41632C5740EA3B00A217CA8AB80970B240567E64DA7F141163981EA479E37FD5567DFDBB078FCF9A342AADAC6D665D6581D58950E882F1EEFDD6C297C9D282738F08B075E26D37C203C310BA86DFA1AFE83FF1F83798B36B48CE724FF2FD146D68DBBAE57CC08480171D4692B3CA772ABF0EFBE4097EF18196522E6EE9A64A1EB33FF200C34C185FDA218B187486FE63F00EE2142FE2D5D5E445AE7DCC597DCED84198C8F0E0B22C3B4168AEDE29F61EE7B1AE5F1780400C8BE834197D0C43663E4547D2BFFD52DCF8A6AB67B9C1B9462003907EE91F7DEDBB839ECDD677EDE6625E9BA73CCC2D44570259B4573631CB2BE7C38594C5A8BCF2E8A5EB956E31FA3B716C7503131A78BB29D06D416D9E81BF5DBF5C83856BE6C7E97C2E4CD7EBF8E189BEF059D221F88BE5EFD6034BA2D8338F52482E85D02C81B1F9A9E18D6EA89E293EC42CCAD0864E3D61919C7D0837825665E0BE77BF94ED710E2B2BC4F49383505AA27839F2D067A1BC85850488EF269EA67DCC21B5C1421FC27DCA8764D9B40214B4E066F8138A3871D6DEFFDE0C1579AAF6B4851F6A348D959ABED63B5FCC5BFC139D5C0598F0B965552DD58720EC6C3E3C7B1EB8C29596DFCB388E08BF5B83988E78A88BC9CB9EB7B6F46A6B1CC8BC3536958C635543E5C562D8F4E0620C4DC0AFDA711C5F50907771993E6D1A1F946B90DBB541BB2709C0CA2B981D546149E4915199EB0460B8AB50186996A7B83B54EFF9B03C7E71DF29CD90E0AFF93AC3885BA08E51665D781E6497103982F3CFC401A6DD51A6A2A2965708F6A97CFC6D5813C7AB7FA996056BE5E78E46AF182212A843DD2E30B4D3D42B57E4D61E03AB5FF3CBE8FDAB99806985D639B6D49C769DF480E856FD8592D89365E26AEBF3612C1FF5382BB4F2F98190DE66E4967DB784707E1C016EB57EC7A6DB2B995E57348536D152C49542373CB309F7B508EADBBDC9DCA400A217C9BBC613B639402287DB87E883E4CBD14462036E830FB4E27CCF60CDA2FDEB35F4FDB592A3B88F47EE980632FED1C09E2D24CE497195314E6F94A966DFDA7A531769A92020AB5CCD63729E188F0A8E771AAE0A5190D30E1E9A169C8684ECE97FEC2063F3E35B541D54345B6E805D2957EECB89D6BDD88412B7D58B192670E895431DC997EE75D6FB0C3C74B14514912F81ECC67739C10EA60888D4A582AB92BBB62654B49443EDB6C47D2441576414760792FBD1C512CDCFA680DDD11CC834F2CF6A9C0E2B6E77B7587A4DA168D141327B0A6EC9CAC946D614ABC1CF22362908B90465E4DB03BB573D21EA5F3035237D35BA951E992B69C8DCC5092DFB8C248C1A99C69E4E88DD8D1154914AA63545518EA5F54516790234633E0A0B757C9D7F22F7EA32DBCEF26868F43F375FFA6D95F578FBBF993CAE8BF2F2AB9FB89B7AE4A3C3CF9846C85F4A4A2BE608B5941D158E8D867ADA6F1047D7EFC01DDEDB27B9249277B709E597501A24E49FE294B0DC7402D0665A80B35F04866CFBEF45ADDC416728965787ADCBA5AEC1181AB924FF3086D5089E2CF647F88A47E415C34AB734CA367BEB57639E8BA199DFD53F8D8AEB4D1CBBA767A3ED296DDD89E173C980AC73D51D347CC34697677370F96C3DF6E21F49A919DCD536FB19747FDE67EE89B77CC41FB78AE8188E7E353C6D37D80C1CB2EACF1C618DDBA20F1AF0FD71CD95B203D56C80D410E0872256F64A19BF61F701FB5C03A952076781336E242EE4ACC7DF02F4915C47EF8CAF863FF999C0710C891CEE92DF62C251305FA410D9B224EE8B8300068CCAFCCFFC7AF0BC8E955B4824D1B200EA52224BA2C4D1DC2DD668BFA592DD3A00BDC28B1076BD70741F88F9262E147DB56BBF3900D37AF47CD1D30B3B3FAC4570AF8C7BF02865CE61BCC95EC31B700C112A2B92E4B0F7030A08DE94EBEB38B398D31D86848A4F4917FA9BBA0C06845EDAC5E28898227D31B4C44119208721AF6D6D7421170633EFC85CAA93C72B93A0D6FF681DCDC6375CC981B45B20522A4D516B105202E296591ED24D57ECE52A4A039D322F7089B7F7D4F13E4EB00945E3D592C6365E651A9679D1D9D6B548DB1E3C9F6CF1B713904F41884621F3B57EC4D1886DE29261A33721D30A758F5339DC287B0F7640EFAFD06A74A23D98520DC33820268469180AFE764D01BA5A48C0AE1E9AC685B382614DB05BD191915BE17EC01E1AEA8BC737E11B2479428BBA56BC79A956D89FF70D397A9B429D27E01D55060BD915BB09051902C8D030F6237677A9884DB62F9927F05ED5AD10934FAA9DBE9334CE8DF778D257BD1997044A6A97E83CF714AD63F29F5996F8B36E4B212D351BB8F96435097321CACBA0D1CAE4F6E0B46990F210AB402BCC08BE0FABB42AA76B5DA9E48E58B389AB9B2A64542FB794290CB93581FEA4FFD04A13D654ED7899C946268E450C98BCC9BE517B2D118156E3F66DF7B6B50375B723293C90A3FD9C751FF3EFB535C60EB121037973974A95FFB622E47C83F94D4C611A856DD94E4592E4D3C34EB224B9CA6A6F89F02A8D8FDF7F8B8BA1183BC553FEA6078E3621F25D22984727B4FFCE0D54EDE5A3D39F0 -MD = D8E5DFAB2391421A266D95E963A6A0A925CBC3A67602272425A398DF -Len = 25547 -Msg = DC722C44A89AACD669217E6D423B26AF59D0B0090A1CC35B8D50939FEB3864BA77BAE3CFB30D7B05354E80894812E9563550BFD962940D535078DBBE63ED14128C41CB47AEA5FD1A0D0F15BBAA0BE6834BFA60A6A8C2CADCFAA62AEEF2D4CE4A81FE1EA7153F07CC8D3FE429C40B58A981A0CA48C5F966E09CB65E52A2F2164042B6E8AF71C52653C0F9B0D4B6C276809A8423FD5D5796EF5ED3783842ABBF5EBF83A479A1C25BB3D4FB66623EC2B72C4D1BB6F55123437228F1B81056C414C34D9D57EFCAFDB9CFCEC7765F57681A3544BC763A6403C016AF8C343021CC2D36898986D25564DC964A2C06996AD915D3035AB1A6B1441EFFE74385B380A8E159A3712BDEFC30DA45892484BDFB14A32C0A67F201A6BD0481512A843DBC0B204C5B37FCBCF9A7293CDD0B1C0A3E991608B62B1C02B1CBD1950384F42F5DA15ABC00EE0CF01CE075E64BCEA4E1E82EDF4DEA4F5AA8CBA1FB618B7AF166E0EB181C7B43352E33D64FEEEA7894C31468296A9FB4C950FDF7C9729E4C0AB1CD1C9A486AD0AE220635DB51584221ED0E526F8252D533DBD0AEED406C6227540E2B9DB7CE66BA8ECC3AF5DE2891799AE5CB93D81BE1BEE42E96AF038EE86F2625683BBEF784E04B3A0EC74B7AA9430EA4B4F0B27B6FA445E34554C0F4803E62553E250AB164BC11DD24613D6FC9DC529D74E30D04E60C98802241119A9163C1EFD7E4F686622CF3AAC97F67968A261CC4D1E6D91D3E327E1086CFF8EB464B4017E35CD3D208C59804156C0C37AFECFE4EC71D2B61B303030AF103CABB1A2134B3492352E44E4449EB42EBF2375EB549131FDF2DD5CFD2C3A1376646355105AFBB21E8F808C0FDD7A34B612F98FF623EB765097F12B557F4810E86B198138F510D75D66F3A061A35A9E775E3BC04E06671E5B282E1B38B5BF4A735B65986A7D176D35978A46911755144256E1DD45C946B692586BF21CE9A1AA08131C9EF441A7FCC5F2E0E338E27B027FDC5B9894E403DFB5CC9AF9B719D4D1252FC188A1406B89A86D6E11E8B049113CAE88CDEFC8A8E55AD21D8A77ABA18C9598418BCE3DE093540C4D555E3046C7A025FE14F85F6895EE9325AE581AE4EC4C14AE0CB2E7EB7F07553F9DA5E85A82FF1FE03026B581BED4346686C0657C165B039E8B5ABF5EEE80A94E44FE32C5A28A2D74E1D89C4E3A67E00A90638705D8E93ED597385D506280A92E9903A140C31424DB7B9E7079CC2F6828502DA136829BEE9E49C5C697C29B4B3FEF510872B5D6BB6D956125BB92333AEDF4201F366DF2987E2008E79F209CF166534E62BD33EE38941D5C02150859213F6D3B8952C66B11DBCA9310A5741622F3B89287506C28352AC791AA6CBDED66FD0AB620F1F4FA8E0A6AF38D4C6700EE14D539C952C5E6E3F5A50F71AD823DB7FA3D6F00F444E6C97FCCD8E1F842645F1BA64AE5F7FA2EFC13E7153EB587DA40D9F0552C46FDB4024857E59934836727BA64FC5BD05619A2FFBC13EFF6BE9B5FEDC88179F3AA650E2D022DD6B5F022F736F9ADD50ACC276FEF807352BABCCE21C2E23CA45038CEEF0F7A4A2DDD48447E77412869729C3BC08C8DAE7740DABEEF7A1FDBE3222A2DD0FA6D266E1455B7B2E68EBAF285436F4C17CEAEB8B040C40FB8C3FCB62325FD5E75F81E4526E19A5CF77C575B579316F3EAA4C2E06EBF9348342451B163BFBF6FD55838BEA751290F118CC05DD3166D5BAAC1D1C8B90B6EB2FE8F1EA4E9DA6150A291BC2B0B717252CD6EF42B3B37F8A5E91BEBC4F1601315E19C0756DCBA6DD1B582388433029F936B43397D9ADFC5352E5995FA7DA02C686EC4CA515F4F8F92D705BA5092D1AF0204AC1038425A8D630F88856FDD158494565FA981CDE5B8EDA9113BB1A8B4682A96C11CC95F8E880A777CCC531B259BAEEA9358324CACE17AD8474E0B2347D8C6C1DB67ED1D8162F0ED03CDCA89E6458E7742258C5B80549AC83C02341DD8D6220B062F234307288C8644F68189D182A52150E0970DEC733151B16814BE8C8AFFF287342A58B55138DCD03932DD549BAE1D01C397E769CAC292F325DD02264156655A60C9EB88984B826C479DEEBFBEF085F56AD08B33526D77F4550AAD9C054CD91836F5930B81462CD658C4F8102F926B06DAF848FD0E58C8505F79A358C3995981BA568A7F2A74DA3F342D16E412E91C8918770BF255D317949DDC880D07BE59624F4AB21CDA0E098102531B4DF9C2DEF0B3A72F4F9891F94EEECB1BF25565603CFB62BF560C7D5B1E4108F8405FA50190FFE99F339407FE20768B3982F9AAEEE591DF611965DC2A564CFDEBF9D13D1EFF3C8B40AD3EFEB876A64371CAE3FEB3AB4CB9EAC3113B67ADC8BE89A14F1D5FECB9BE9C8C40F224324AFD9F1D55FD8B3E066F68A60E6C7F2B48D957C66F9D73F7E929AD47EB4C98539893C61A2C09284977B8886E826C93FE2CBCAB43D119ED7C19AFCA878514D9EAB79FA983386ACF968D0514565F68D0A7367665827F03E655F8EDC9D99D218D4AF956A79EC288E45B61EA8479A436EB2EBD79702BDBDEE984D08964177E91DF5CE8354818F4D216EA77DF2E951159B36C32AEEFD684986C628AF7514324060D5E79764034C3C985796DD010D0E25C464B5903CBCDB2700E06997597E5B2525109D5C8ECE1D72544DE9E44B127407CE4EB48605F2D2526C22777FEFCE832EEA265FB13EFE7D6CFCD41C351BC7F1761049407812CCBC229B9685534A4EF7ABDB02C8E8D8F4AF7D68E422E62B50ABDDBF1A0CA36F0637CF03C901A8FF12F93C3BEBFADF1E4AA535A44204DFDF24EBE5A0A20DB0782BFF45719C4DD9E25A839A9C4CDFC75E4787F184724E1EEC1358BBD28E44EF2F3429B55E8589B3AE87B75DAF3F9E15620F07F5E02192BD405366A8695E806E7E0A8DA405368893F8B15BC7189F104B86D0A4235042ED27F744E194ADC2A244C32E4D3A12CA65E13C2C231936A8D9C1AA229159CAF6089EC97A9CC531D846D16B2975077DB14584561C24F37EAD5AACB9B73BB188C7F7C8DED0773D547498FECE6DE6FE65DD4E05755DFD973B95783F1B6D7093FD6E69954F6AD215F018F5BC45B47B068B0C03367864BF3E472B0335A5311E79A9DFB5AE67BE50845E95D58A1911D80E86FD24B0A4B4FB7B50C694FC16C5D09F1137824B54B0F5794229ECF1637A88F140273C7407A4A5DA654AA10A318A46784299A1963DD490A7DC180374D560FFAD5B72540ED9C9915BC34678E22BCD9DD71B512E0CCF2DE35C01B9AF26F3D2886DCAA9EC0ABF40AC4081C760A0D46962BCA25DFAB141398182DF905F4EB0EA4B1BB3A3B7C8A562A3AAA099624A216B30016F1C4A4C71F9D39743367E3D522CC1B702F558C5516D9B348D5C8178B7C182C16B05C1A60D0F28E283CFBE614E4D414E06CD1B539466B738FF87959CD525710B23CCF2484D9D83595B2D2F68D181FAE3B351D9E434748200808D8EAF6B580FE0D3199795B181394EB0AF42F12486A7DC7A68CB8C25942A348052688AD73DE5FEB2888AD9E85B4A91866009396AE33F35FD615E06FA1C5EEC635E01CF9D91698EDA7957C494897154A69313AB5F801F93CFC097687F88696331C3EFDDE446FAEFAD79BAE0B11C5560E798CBEA9946B72F6DA5A847A08AD16A191F38472C59BB751DD56145769E3BC2CC94E42BDAF00447C885D41D406E2A533469EDBB57C5DF4F606D8123CDB1A4FD574BA847F5BBA04DD567D4ED63A25B33204C3728FFE1BF0EB147682453A5FD07FC3F9A651257AF020EA956AF776A3F3BF81E6F34214F65B4844CA937EE95B36182A92AC56797FB0A48741BA48CBB85E180DE0680A9CF6B4608581646CE2855277AD3AECEC2E8E4905F4592CF42A5D021BAB478C4BD1E6F0FC19CE738F10B34D2B33C373B79D14EE68104C87B6A47014D9117B4A460750BC60FA53BFC33E1F89E86DAFC2144FBA305E6FA6F3A79EB5F62655C5C8AA8A3CAD9E04990681334AA6ADBE72BE224D72A8D04954516217CDA5C7480AE05A967DA6DD0B7D092F43DF5C2D88DC8FFB45500030C2185094CD67D9BC1CDACF2F67024CCF2460C660BB53D7BAF5DE17724C90F2860A9632A54FC7ED78EFAB4AF5F2BFEB53A06393D8B41876AC468A307E5B8878C452AA53EB4C3E2265A7FA0B2DCA50EC620A8A645E8E99DB6E298E32C018710F784CE11605423953C87BF7BA9421A213D5353A95EC58D351A8D3ACBBDFAD36709C8A0A84A17F027488C63A43D7450DBC499666B7047639A69FF1C1308B6BE25663CCB90CFD6A32AB84FDBE5BDD92CE87FF336051223A7C47C136CD061554210368D72378E798AFFED313BE3A7D599EDAFE18BA63D6DF53BE61C951BA61251DABFD98187DCAD7194BECF713FA713C3C987B04C328267C53CF6463A399110192C1BFFFC2FBE6AE701B8A141979D74D8D5F6BC2F3DEF2A1847C3593BF7D73D758A00E3A463B2E830D82E1E428276523271FA24B1CF72073A19CF469D98A1958315B47B265B92A16138E360BEE0 -MD = 19C7995E29962427761D697D5C647AA75EE6AD5FA719501BD639FA6B -Len = 25610 -Msg = 87785978F2DDDB4D2D834E68AA3DD3073D8DCB7DBAB0B506FEA0322B81B47DA2416B0E275671F9F3F00C935421677312C259286EB5C40CB12F1A563A2E85648344B283DF9B4B623C8F8DED9F87D9EEF0EF275757313BFBB546AC42F4BF757D92F626F97D1191CDF7FE612BD0E73F118062EE8296973C10067DBB8596C570F555995F5BEAC805B748D9CF1EA77F2402B0C2FA47D2ABD1FB29FC9589A2B17DFBE9B0AE235924FAEF561FEFCE8F9A82C868FCB40BC23909789BB0D0AB290786F2A224E0C748CCCF1C48008CCBA9F583A9178CB98B5D8521793DC3A965CAE9B05A92C38708FA200637FC88545C7802CDAC33DE1AD93FCC4EB536908607FDC15406374FC173D1CF3E14CB85BF1E5C935C72C4AA648172DD5075264B81D9863E57FD2A34C1E766537744F95EE69F9F5FCA32E97E12782EEB6DFFBA689DBA59C9CD2E65285C079B72DF1789D265F90554A36B7802C4C76D8A96CC9D95200E1795830BF953CFE3083B4DABF117706091D638B7C6CB767CCAC4ACC07571398552FB9B54B1A3B6B346E4616F8EBEED299CFECA5A43FC0560E320683A08C69DE4B07F061B625EC8482310783415E6C3484B78467420306B7D48A96D196635CE00F06246E1A1E1FA091967FF8F73E32CF92E04A69610649B8E005A2D660BE97A39D0521601D4428C9E68027BEF07F639D035B2FE56AFFF8A193FA2DDB41CA5DC20D08DBD42187A50D45C780FA826A44167FC38D7BFAB9C833E9EBBB6009EC8F17A400C7519CD4EA7CA7B96978513FC4F642AF77F93C0409CFB45A229B7107EDF9CA667595B60DC041356FDED15999608CF0002C692E94AE95E2799FCB894B0E18DA7CA21BEB0F156D6F73AB5EE18E515C458000216B2DB87EA984623460038C4F9DA87F10B5C60F13F1DB7E483026C18AFF2B1018D3894C87F5FEE300E75F0E67DECE3E18D6334C2F04EA64E6328F924E0B36ABD3467F71DC86007C7D1696CA6EC206D061FD5AF3EDD9F0C7FFCACC1B38249879A878672C8489A491C61FBD215598A5F27BFEEE6991A83E7080D7E6EC5E6F2A41F645A406459D2AD6D5AAA1BF6F4902F34038847409B28D15B1F8BFBA41A5D14B7B536C82881B2010A2DBFB3DE287CA18335E3570731E6521515A3227542BA4F1FDDC369A6C3B065B69033EEFD25E0FCA508BA02715F49685830BE8E8AE381FADE415124AA699619F02FE9035D98FAE0B9BF057828D3B747E4718583D31607793762800CB9644802C522EB6BF4ABD779527734075581E5898B78E4B282AB9456719D0FE9FCF923F5D8218A7439B980583A22894C81FFA82B99CCD778847C42F2795DC2DF7033778D3ED56CA97D06870238995CD9FC21EE1CB77474DBB33BD9A866D461F5B451BF5F32CEDD104F702E7DF52E3B64676E1B46CF6D8951785324F7B4E06D0B16F9C3D2274A6A3D24F224667CACB4E5B4F3154C6E4EC34B70E161E733BF6267293CCEDE4A021FE78419FF3001E94EA43972608F7B23026B5DA3F64102799989C77C153CE303550E084B81210F44E89455FFAD7871B2B2C19D2290A546CB2EE5701CB739515134CEA5D383CFBCC60CF14510B21A0C145B86272FE7555102ABB3BB4DDBCB854BC268A18C37652C3A61C0348B420FCB31F1787838AA5BD2757F3D5B35CABF876DB56FB14B57477B0B620AE9A67B336CFEEBCFB4962BF661A94C784673508EEBE08C0B0B2FB97E296F3F767FD9E535793B7BE45B0B2C8375E8E9BBFC94444D72C341B54FBEFF49F93C37D4C8F94E155066A5456942630CC682BB52E0AA57171425B8DAEDD13A8F5D450AAF4E8256F5CCA7D07CB2B2F8E8F4BFC9DEC05A46857B55DE68E017D3F1BB03BF98592D049797EC317FA086DEFA13634013C41F6EDBAEDD7E5007456B3516426F19453DEE8415891D31519EF551996CD598A111E2C375B0A5E70674E3A05088183050B7929940BDCE1A848894A2260F6B0B30715D2D179108A7DD364BB30567676A1B2919340200ACB97450134201C52A1EF6DA6B666AF9540A49C683E4C94C4089918F2472005E4809042F4A71FCEED55483BF4037174FB531AB465E4E37140CEC039B7866ACDA83543FE026CFF4D36C38A505DAD5587F27954334B907F5915E769F5E1DE403EDE953E20EA585208454CCD86B7DC1E10A3C582F7714D1C78E886A30A24820B0C549CD285BD9F89DBC12316E184161E8466D3579125690F4EF2047862BD4D882C267270A1A41EF2004B28A1F25719D8B57F38081F88E3548C33B7A13B1481114C72C82ADAFBD355739BACA75FB70862A848996633EABF9C7E19C0C927323884ACD893B12BBB7C63399F0FCBF842CE6546E1E6F687C5F58D20028EFCFEDE3DD5E9578E06306B77F0DFAC04B9951D6ED99F278D358BCD3B3EE7FBB82700658F8934B858720E57D25C73BB6B465E96DD66B3B23A4403722DDA14719140E035E7E251EB869F7A8542D4D6CD27257F13B478C59C43EAD1980F1DA0AE45D9C534D6EFE9BC90D09CAE7909D92A2B192A7CB2980951DACED548EC01C99B0432E6CD6D5A5692C25AFF81FBAD9B03C6D9D2E72B53246ED115BB0C44CBAC957868C08622B7C674E473F873C930D593982C033D329C1275BAF45E456F377F0450210F2A029B016BA1299A2A75952C2B4252D578502AF7C9AB73E942C82725EEF2429DC1A3B4E50A1292BB4A73CD106332F5D2791BF44B11CC510163BF1AF05BBC5BBF5B4A2C0C1E57B0DDB97E5DEEE616F8CC34121F0A937BEF8FBCE5CA6467D685B6DBCAC83D2AD0199F5746AB575EF120188FF14A79D1C6BFAEBFBF8B31A42E9CD817D80CCB0C7516FA3A3EC4214F990F73AB2AE036508B1E77049F4EB4E42A5768B364765ED2E9CABA97CDF70FA452208F5E946080EC04E6955EE0957EAA08FCD4C2E0FE6C7D18994366EA44C27F25998CA2D5BE1C69C73627A7C684CFC9BBD69C9EEA6ACB2395A0BC9DBF5EF3C0DBF794A3A769200B732C4CCCD68C4E06A81756DD5721CDA79CED3960AD1898E46B97A2FEE2C6E8AB74F2E448EE80363B65FE0DABBE2D6BA8F08E37E5A2033397CA74AC74212732C7372B45746BA388349A620B3CA64A7806A48DF66C1C861A864D47C4810A9296E42FF5E8114D40B5AAB0A52F181954B95F7142690FE706FFD4588DEFCE811C05911CFD3FACBAB6997263551D74E9F2820911FA8DD1E299D07CDDEACEBF2A079CE3304DEC9EF4785324A78C4BCE6E9FD4E63C3106D6F629ECE9962F318C20665805FFB1FCB46C402099A40B8B8E41F6B803050477ADC0F532ED9D5C861D04932A338A25049A172C80C0F6775244215569CD5D29FDBF8BA595C2D3976443973CC951DF587391E8B135E7C265726300203C874A1D62E6CFEF44E8B9F6960A7E28C4B760EBA5E9FF329CDE76C147E6EBF47237CC589A037E4AFD6E0100804D1F2474084CE0A9C0B980324BA957034E851AA9CE1F899015A03B475AB20DEA4A258EDC890BB36C006FD8A9A9E28B6F1C6A37E74914788C0B8A3D83EEF7B8E4142775BCF82C7F12AB3DDFE723710B93BE1D2C917D83CFC727AAB1A7A5205A9683D281A40D4C27EC9982B84392E429F388BE4FDD79E84F0A479E9AB27FDA1D2CBC150577DEFEC980AEBD5600EAA26FEA21FBAA8194B67C4DC5CE6062A6B13B26E83C13380FA7FF768DBB47860876AD5DFCA614959B74F1F7A7D3261A7FEF61103A119245FC02E5807973E4C11C23846C0498DE379607F301B5F06EAED2A0FAEBC8D007ADB7998926AB99C03636EB943DBCB15DA9AC70B58DEF25BFA62F2CA3E933DA62532F44753B553B458ED0EA6C4C09799174911BC1E955C6BEA75AF3E806A302E0234087754BDC5912353F450265C23B5A2D81A349C34D48454C31429FB23BAE60FAA3CB6EF608CA38D8DC80CF85D00AA3419B8C66516B171C9169D5E13D3E28A10EAB518F73844EED91CCC83557754FB3572964152ABEF4938D69116ABC526C91235337F1BEAA0C5E56486872A938631900C589644CB765DC77D2FF46F2125EF1E7CFD56BCD912C15DF4F2EC43F03BDBAA98E9BA818B47C9C887BDD6D429C2BB444CDF1BB5ECAA3E4B6B6DF559D6CAAFE33B4823374654431C3E48A2F1776EEA37DBEC40449F8E377D2292539CF43FC0A5C21161611C955CE0974FA2D118D591E68CC9117B6EE26BDC232F987BBFF83008ACE1BDDDBE30C07C1B673B11B38B9A152F59A9CFDFC871FDA48B148D12AF50484B7BC3FCE50EA84EA4017D3CEE679AE9995D18875290F7213AC2222EFF7EF798B19061F8FDEB8125761B38246ECF35F5BF83A6C06890048179C776490FA601675C2BFF74EB37D30FB9F181B1D3BC8C8CD19B9478CFC7DC3E566B462BFB02966897C4DF501B6F95C7268CC750D663CE6AACF0978B6DEC2573F468C4ACE462F04ACDF79F83A567A8E8697D6B17168E050E3842C319267E9796712222235757C84A80C961709455EE73F4BAA09F350784447A95653FDFA2ACFD86A5A14C67FCDE964A889A82113A94065023392584135278D8C4A9AFADB70666626D0F40 -MD = 0EB4485C7E8B34CF78FE36E3F339294067461E071911199174279988 -Len = 25673 -Msg = B3E39AB1B0D7AB4E60CA0076C188E5429ED2E6FB1A611577D0ADE179364F35D654E7E5AC0C1DC0C72E9FB4800E234B569B7BB32CD743CCE24EF9413CC4B12C49F34CF2A768BEA36F200DB7AA314EE5FE009595C5FF5C5AEFC20CE496FE48E3E5498737F14386D7FBB197B734C523FB1FC6B0819ACE64A7DC765DDFC843AB16F4A60632D634CBC0641DBF570F2DB72CD3935876AE0BFCA701540C8062C34697F42652D6FCE2CE11AEBBD8A9ABDFE947AE117EF4914047EB42C6BEBA174F81DF0B82F913CB737C36FE0ADB3B8D2B453C4FBFF8748F938C743F59A106DAC0D8DA1FFBE036C3A9863185B3BBE213659123C81A2513705A8D0877492A3F9D70048C4AD385164E15F5011ECDE63ABF970CB0C109C09AD3DBE65EF1C839DB34D74FBED84354FD8D1FA57952488468B932240367CB0830725A82EB7D6878BA6C96719C97E16B017DCF0C59D07EA5DBF68A5049F47E1D8C9273FDA9EE929760BFFBA9AD744DC3C9F741055D6DA772F09D1E6DAFD25A484C78D3084C8728F25C9A51D8306427D957BD747C00259C78CB4618098DD608EC9CBAA4E3E0D102861467F700AF0A388494203F52CCFA2BAB7C42792BB8556B303B484C6F80C487E61C130FA64DA97136235194B803E14053A71B13B3BAF258C2DE1E0F2F3316CE41771CE9E3E2819EDD87B3606A63AD6EB964153B979345E1BE2DE6D8C966F1D5087CB5CD88D58B5504FA5421C8C2BF3E220CF6FCB668694345C33EE11B024D079357BDA20882B3FB0C0422DEDFF145837F12C4D6A3D38270793204107BB3D2A8AEAA151AC6BD66315BCF6AE2F16464EB46835BBCEF9D8BA8F7AD706CA3FC42016E33FD251D5AD7D9F4F817AA8274714AA6D2D0E3D7AF098CFBC9CDE024195AD8B0725B4438E5A6D8009A0B71064FD73ABB1133AD70E151757A943E179AA27A494E28307E948492C86B78DBA9E27DEA466DA33F504A2CF154AE12FE598730A8AC55F1EA36EC682E5B7D3446EBFD70E08C318F9780F52FCC3C2B1111CB77BDE3BA20357C5C4BB9C4A74AF972C2DAA8B3A734A5AAB84463903E7DCAE97CA10E6B4B4F08B9DC92DC68643E70D33641A6BEB97791D45337F350D50053BF60863EE423ED5A1155D7690F01B6C200299E7E20D811B2DD050CC3012283ADAC47287883E23FF7008E810DF8E0C59B336D3950EEB82E11D84FFDA91C276377C591E504F83AF259BC8743345603078649F8626E4DA8A65F89772B73A2342F9CB0FD770FA4FBAC498C26B19EE14FE3EF3F59F848A841E63C79AF544CA25A4A3158102F9C1BDEE1E6968489F5CDF16306F973D62B1031755E83F2502EBD576872397951A032F0C04D0DB4CAF7764601E933F81F258529BEA9539A2D11BF5368E7817A523247F67BC2AC8AB780259E40716DB86FC8BD59DD39E9CDB8F8EC91282CC1D20C06BC57C708EA02FF46E42DED3A7591071D333D0A244F8A4278EA50FCF15326855A989CF44A5979A524698C8840B11E579A457AFEC392CBDE9C26BEB7D4BBE4505D6DE4C7B33F9F22E5778B0B1CF95B66E0801E20578125256BEDA0D70DAABE48E4C35124D75044843FEF0501798CD0A17F1771FAB22E3A1D73C5BC42E362AB11DD3CA5079DC9AED03ACA267A589FE4DAB264BFAA803C5F424A4027BD7CE628F4BA42C221323DF534A68C89B5ED4B58A11F98DB1C825DF32A8980767FEE8CEFA9BF7452A7EF4609336C27350FCA20003B37B0502717C13E5A28556BC7C56094142A522C6311AC99F9051B0640B221C7644B7DF7484C819B7DCEE2EE42FDAA75200AC329D3C39FB283374DFBB2A4F2948CD941A15F282DDC8F8906655C461678EC72D15612C751C3E17CDCFD1EBD2C6138903A3FD82870F735CE51D17DE0D4AE30E3B52CD51B72049FDF972CF40783D6BAC1219653C23FEFD5C0850FA50F4D302F2E56FC2EADFBBEE4D78438FAF0D9CE136A230BC59D6D9BC889A43F169E542CFB84E2705DFBD8EDD4DCD37412AC462E863E9162F93DBA1C3FB141DB66226B8A241520BBD8147B6AC0056AF44BE33E979052AC1D5C156F02AE2928EC41E5CBBA346EAF77A72C700C5A49958DCE813B37F0B619B4146F923D6213298103E9F6B16DC8257A6A29E17CDCAC121556C6BE8363A477521BDD3E6DACCE228430F7526CFC5C9BFF2D33CFF0CF8FED535A4E0F157FA6D942335020101D0604E924E0E80A11FAD4F16AD81CF5270E57B6C45154C85237AAA24F048F65D77BC58CCB14BEB940BE22C4A53936D9CF143FD15BDD970CCDB838CA7FBF00927526FA091A1D0FC13E199D3F6FCEF8C6EB63FE623516103650B39B11907D19B8BB6DCD694084D5102217C32B4C6108563229E755BE1377BA8B4D464FD4CCF85968D52056506F13F26A6BB409FD36410DD28328605F0D44AF8C2E379FC40CDDE0DAE920FB4C7982ED77DB050CBD14BFF76A5F72DDB8517099575D4A5D8800ED66681E1EDE124457ACB0028158223B22A9A82A645FF33CA0594204E425EE6909A07314B8C23712D0818BD97D7AD5325306688903A260A63DBFB68C11F9620DE7243F95C3E429BFF2C264746A05A4C5B5F045D869DC6980D635003DC17B4E637C1ED44793A78576C1BFD615A00C84244B13BF7B3722CD8139DAC492670DC6FEDD231ACA11F6F4F8AA13A6AFB3C4D01B13212D85618A0790555E3C893DF861AE9F7AAFC996B042F1AE14B2AA1DD9C6F0F88B062E683D9435D001267942A9B3BF1637898962E6A5F4148D63E217CD135D052E2D90D2AF27CE9127C0775EFD2B77872BE5FEB892C69968F66660E972770A789214BE40188F6A0E6F28EE2C67E463893DDEB8CBD2A7C854972B97DC546DA34EDAAAE495220504762DE9783B7EE992D3F77E29B174DEEDC2A2F4C88C1EE5A22598E12B2E63C52ECB0CDFB91E55CAF18FC5F06584362FF890FD6620BA23230D05ACE2D75EBD3428316472D628F649DA39DDA85A3F954B3B7E1DA096F74C1C495B425EC94E26C7991E25E67EFA4AF3DA97728838405E3EC28ADF75815F5DD1C1761EE260579F959551C5B5D48F173E11F1F909245202B4B6DD2AF6454F5064766D7C2397A2841AD63F52E902A27A8AB3C878BA573654E62F44061D69089EDA40737121032AC8794E6E783DDE808FA8C9A2B643322E518D098256F779F5DCB3EC16B2EF046AE1391D7CB01D74ADF104983750B93878DB4D12E6E7243BF78DF7DA2A08F84B1C2F018C30EB1F9D48BC4D482D5EF96804871D5D81C3027E2313DD0B47D9BFCB0FC8A9952F5C261E5BAA2A1EF554930EF0C8D737D61EFC97476709B4AA2D07A2568593C10F8F8D9228553D0460B23BB172C49F2771A5C5BAFC1C5D9BCEE283352534F9773556E5698ED273C701FA3B7375DEC84098839B9787C09158A0552BBA92ADFBCA7BB017C635487F6FCCE312963D26CFE4E24E933BF86C4790EE283672A324205D67BD3381AF83401EA96FD89B6FD50A356627DA7139829D90B67BA653A895D18642E417434EB7E5698BD60ADD381F6B6D795953FC00B9EC13D6607F8596904DD308B784C25B1EE2D2DBDFE6972470B65182340D5996326720CDDCA206D2C9163EC33900E66B08717BDFDD795F3B74904E7F7ED6B3B901370B3AC2757A19E226BA8A81FA4405315569B6283D550DCC57C7A06A327B465340DB337F0503DB1585FAE831403AE4AEDA8B3C1CA4001611F5C636DA220AB3AF6EE23EA062FCEA0425D4B06AAD5B6DFC6E13E0E9661541F450CBD70DB3CCC5237D0CCBA7925DB710A09594A53CC5DA1FAA1D4655CE81C608DCF8CDA110C689DC7622BB6E22BE4663249FA3F9D6C5B565B1447D578D4C57E702DB0806EF8936C217C07A91F7324AC903F9EC1F8D1586CE58500218803263BC821A667D211FE3B2C312D3E2AB983AE7DE91498D96CB76005C9DC7E10D78C329EDA79166EA45B2F0D4F589EBD838074D5F0FDDDE4B4A24A140D21B7721191E68206DA190ED0D57A8380A8B4DAFA92E9C3ADF6F0092E4B8A77C9638E63E900CFBE36ADDC00BB92A55A81713CAE18715D27BEB6A6F5E75E8797E5E6BDA09FD648B77865CECACE7B4DAEEF99FF54D3179C344A22D8EADB057CADEF9DA30E09553C1E29E0BFC9F530912016A6F00970503B873684CCE5E8D20704FC67BDC6FADB4EB88E17290A0A017857A40E13EDAAE90A9C076337F73A9347B3B4A48F14ED20EF9EB116F6F54361250C0580407FAF560C009DDB2F2FAF2C9E047336697367DC47C8D0733863F66BF0C4F5EBBB3337A50F2AB1D4028CBB8E9E3246D69D254151552E4FD57C2894E54F49443C0F7974E74881D37644A864DBF11DE4588903922F870C641B63DCD6FDF69D555FFB2D865B7B18F6A83A824781EB463C31489EE38CEBBB29749928EFC9E58132F23CDBC58397C654170662D410C5BE0E76F00525CA9FC3938B38849E38B9E6A97074EED462C0CF4C9F2B0F93DD47ACBA327C2B058385476731BBE5A29462167D52913170A8AB448BB05CFA0F10D26A69E15340F254B476EA42CC04596D5635E49A63685E92AC2A629586A9C31480700 -MD = 87BE5A8E5FC82C6656415C49813753AFCA78AE2D808249BE848030A7 -Len = 25736 -Msg = 858EF34C28B8939BFB4644D1E458A67A034B9AF9F82DB786892D81C343D27B96EE49CFFBF2C3419EB11EFAEB9F8D0410B0EB688156654A8E32EE2A570C5A88007656A18380DF33F7756A6004766A6B96BB27A741057A7A0E22D732D797C488EB613F179DC3F1094B2B5C8E5A34BD57F26DE85E234FD894A2D276E8F31D0F7F23E570A0A4E13BDB635CC8897282A1AE00CB0C8F04124EDC6EDE1404272F1BFDF55AB2A0B3D5B3534A4C01CB0E1D5750EE71328FE3DACCE5420344108996B6DE1A443834B6BADFE616534EAAEA32681D57A2E41C77173D6DC0751DA26A17731B01833AD0B9C4D3B48BA23773AA6D2BB7029377F453484A44E6734A3ACB3725FFBA0547F1045F18BACB1E9C9C801759B9A16209F0158A4E8F21CCA9112FDE82388CF1FE58ADFA1F684C3158935EDF9388B42AC0E5B3B68E6E6A4D4476C4EAC78F166EC5FA464B565D481F57A9D263BAB7A1FED05D737974C4F7BDAF2CE5BA40B2A993E867E5844C7750014E66BCC5BBF5E500402529DDABF1EA2E395DB084C4BB85766FDA993B547788FCEF35381FB16AF0965A08EE5CBB4D68C934785594B37F78E76A6558AEE73E570E40CCC889B0D5269756BC40897EC0C2D6C33A33B1897AEF297F377CB58A7A1A389EA60F4B5F25D1305D046E48D5BFB1083A82C5AEED09208FF83076367156B9071BEAB5AA12D9DCA9F8AA093872C4C95B84CDBB0B84ABBB03F33B63A7C603D723DD9970524548E61F3804B7A914852AE55D377E25A8431B1E7CE78F1294664925D62B7D8CA3C880C4AC80E92F8E86554BCAFCD39CA44CAC017F4C4550BE119EBDEC7AEECCD527EFB478348425FC3668141607D14DFAC90451B2996DD46B23683210916B90E63EA2A4A006BF72C4DBB6ABF3D0505379C5B360966A25471E658EE24CABCEBB5C6ED5F8DCCC84614D64BCA54F35189F579C170F2A2B773AADFCF3C1C435885D0ADE7121A4D2FCC96AFA88DF6EA2C519A98AB279E9F75400AB053D457ED3FF957C20F282BD121EF67F53053FB4963D08F70EB287E011DFD015CFE492ADCB927BB80093545014736A12E236569ECC3453350A5E57D50B1BBCA5C8A01A946248370CDE6177D7B8C84F11EABAB0C3A5CE654FF85783EE8EEFEAB58451CE73E164A9DF47DCDC9ED24B0F7A87E0ECD1A3DD15E6D656B8945F096492EC72C0B51D13613B3134C3E31CD1A3093B8023649C1B3A3EE8A09E5A8D612A91B4B14646E22D575CC09348A5A58E0F9B641037D7B63D32B40EA5FC16C55A0875F3E64F25CA97F2A70DA0F4567C9626030B5B8463D8A55C34665481F2FC308D2B87111D23B1B6CA96013FF033B23216C27C9D2E1222DEE25B295E180CB6EB9BBF72F59AEC070AC809A79B3306E0BDB701521D4DE1D755F75EEAD5D79A72DCA55B6E25FD10C4EC68BC5C585AA1C392DA26BE5DCB75CF2FF4B31C3C578F9708191F59D04C2E00ABEABC6B217D89BA9BCD0CBE76E72E316A4C7F18AF642D9FAF3E76A6E4F4F5E80E1252E52F996DDEA279BAE6D88EF866AE6F3D77E0E105111D04D4145F09691925CEFC2A8DF96F0D340AC86C0B48EF5D18EC1DF59748BF5F261580ACDC4F58CDD2C2649E4B357872DD982D9FCB59916037A8247C6E374F0CEA924A25ED9A0B5DC15DA9AEECA8A9A9DE9811E1DCC4F05357867871B959AC9E1D3C4AA2633C9445AA2239D02E9E5C7D22FEBA47E7A0332F025E83DA06EAA82F30ADBFC8E1167391C6F3FA82B87857DEEC2F39D08D4AA3BA59E1598B54D665BA68438FC7493B351AB54B907A80945FEDA0ED5ABAC57584182E40CD4C8B48F61987A07AE6FF6196E5435324B3546F7712BF453A1F31CAC5778F94647B656DCB4FDD8B58AD3645FA1D54FA7D8EA1B627F65D68D40B9256778B46950CC2D1E4C3313D542105A3476A7AE2E51877254BD756E7FB55A55526A32B78C95ABD169DA1929CB3A1A098D246F029AF5DCD0BED4546B2559A6A4739396C2E222C77CC4D3AB47262CBE363465CCB3223452A35B91C15D4F2822FD75A91A191ED0B19EF0D4689A2F793D31607DDFAB5FE0292EB3126C6729B37BDF4EEF808A1A715982BEB2F9D6AD6571D2346AC4CC75374B4641A2BE62140DCEF6A105EB3AA593207DE595C439C8E94E8596F8D995690813B897F150670374DFD9BA0588C7AB7603958565BC31C274ED42DA1BA94372EBE0B4F08611DFE26127E7D05AFF7B9DE63B360B8C3E79B0057F92B40348C4A6CF8C238BDD33C204926C342170D9C15DC3D69C7E61F2A94807A4B84D04DF599411C11DEEBEAC243681FDEC8BE382EEEADEDF61F728646FDF9A421EA231FBBDE6613DE7A4F7BDA125AF5DF1149ACCAAABE2C2A01841D24E165AE76808CA9AF94EFFB1CF3B1E31C765559AEFEFDCCE122BDFE567E67C970E6B40B468DA0AD6B82BACCCDCB293722450AEAAE801A342ADC7F1F443D9935F5D438A16361A087228C2E26C12CB59BC98774CBDD9B49B2A065C8A767334CF16DD2717CF45A0C8EDE97B4F4FAF99ACB013B5E0079F2B3A6A2CB82B611DC7818221A679C007377EDBB9FD0A2000B32C6A17E1B0BE9B91208EDD3E417E631C2E6D23DFA763FD792972F9A9B1C8FA42F0AF5297EB49B0776BAB810B6856E0175EB1B87EC83CD2CD12E2C5C1610E1EEBE9E665A6C3467B870A1574E6F2CFC865687515D8A35F5E90D85138C3D2C9823696E25317B1BA5B0BE623FDC6CAA1041374D398578167F4352F315AE9DB4255A32EE4910F2742633D79D5B5F105ADB63B0A3D776350B8574477E572EFDCA09574445ECE8DD6382FC21D7B9D68B3A4BFCA158DF4A7AA4CC1C0DA1016C364C9FDC62ABC991A3504EABB590809B2D41E4D51CCBB0E92E8752A4C0F72E74CA7E45EB1968191D564D813131DB2B321279FE7A104ABC6E33FFACC553D0A62D69ED3CB67798BF8E927D4DB02A35334E9466052858E6828E0C28540880742ED54923BAAB85922E05E0B66EEB401453C82D5B4D7FF25297C1F9F1358BCFEB5D5294773DE203D7F2FF9FAD19FEDCE6C12896C1AE44ABE0905EA80D24BCAAD927AAFC6AFD48DDE526F3DDF4E6CF94EABB9E99CA6852360DF3DD2BFC7907E42A35744BA720FB0F366EEDAA8E86E44059F64B384E296F00ACFB469472AD01232E4A4833D11A2CF097C75492E2AA1FD7E425082195BF43F4CEF3B3477D16B606866F1AA62644F1A31119B9BC787ECF70686468A96AFCCE82625C860CEBE802C270605EA003B2B40124E8CA4EBC78A9CE226CBB3AE74A7FC829F53A51D925038CE9A3D3681CD50DC463AC3488C981DBB0ED6E4BE127CD3AEC473765C2AA762611A641848022E33AE6B5A1BD57D17221D172A1775AC54DAE58A1B0E21C54853BA59BA46CCE0C62399A547DE37557FF4B6694B86FEFE062AF6EFCC103C4A1A2BD06700E8769E4C70641011E5424C2A2F0A6A2C8EF989774FD59C0800EB0CB19EDB51B69E88BF4FAEA43F5C2C2818F9B95E27BC68F60BFBBBCDC778C6F6B116333DBC17DD352E2E97BFB5E33EBE9B3E518F93E86067E75F064A714DB634E37CE71D4BAD65FE2BBF326EA2793C87CB44572C965AD6598312BD9838DFA8E1B599CCB8701DCB397E8466A8524B568E77BE95CB96C79A64DC180A736A6D996EEB896DCD9D9AAA8B6A4A9AEEE6F213DF1A071F6F309C1ABAD52FD477F6F707F876F40EBFF3530195EC39887E3D764488EC4C7618FFBE79265EEE08CB809CDBD0F7D38A8A2D292822661C2273D8270D1E0B2BDA7DBF1362349A9206BA25C0DC1C668B39DB7724E29050618E43BBA05F50F202D9A026894EB20FEE7D6FCBB22D7DE3EB89EEFF428AAA1B3F18A9847FD5FCFE6AFB9EAD2C864E0DB5C0C7533E574CFCBD82F14DB20F851979722277AEB0EF579802336C90D3BE78B47DED5C829E83956FC9587ACD1B0157918C4A1DB3676E4001F068128CD4C4511385F4AC39EBC687AEEE6EC7D7535391062191F86B4A2F1818E6D1DDBB24E1E7CF743E399106AA1C39E52AD7EC2BE7BDFB32B54E923D50EF8AD4EBC6A80C65614EEA4AA5D07F48FC597A29EE20026DEF2F300C7D3CA727E8857A098A0FB22F2C6757268E390F839BE20D459830A9E3DAC71EF418215D9B89BA559A80341E1590DC964B8A6ABA07FAAE4A9AD8E5969E9471D53E4DA76889AF5F9923B18BB584D71E30231E0EBFD9FA4891AF34007C1235A9CFB2B0DB0EFC1A5417CBD53F694C6F3882E8553A0E01F7AE34C24439A97DEEACE8BDD2F59515DE0760589FF6230D602BE3893D27E34DCECCE7B8E310D87790FFF49AE5B530FDFDFF71E61BE2E1B90D4204194EFD263D1CCFF4584938C06666B0AB675A6CC5CA0C6578851730E281C107B58A27099647541CB2B9C46626662451137BE1B34438ED825C45628D7DD49303770BC3330E5E98E9ADA7A1CCB694EE5E00B27F7A5AA000D1D9D1F7614532BA4B8AB8A92367B6946247B5F69F870DE10775325C65ADE56A7D063757371739E053E971179D2BB6517C7D9F8EF37A78DD3B9D15C9D2F021D4B81FFE9437353A965D79B82177B6798A70EF8511D27FFF215B741B9 -MD = AF828B69423D5B667AA92CF1658C9A70D23BE64F61BCD80782DE5886 -Len = 25799 -Msg = 84F1B7C9B9EEEAE1AFDBFD59E954612780AF84CE56C83F00B6F9812589CDE12A8CF3C8F48409EBB0880A2E9729441887808E766D9672A0E97E45ED6E705B3A3B06A27066D6CA151EA85CB7FCFE6F3973D365E2097DF31AA33F1B28C40740779AD096F2F6FA6945FF3B472D3E0EC7143C95D4C5500C65F3B952E5AF612FD9EF557CD14113A3A052F2DF4ED446A30FDA2A9AF4CB41423E0B3820D065E4D310E765BD3E854874A180F18F60BE119AC907FF8E28100375D34E8039FA1BD1BF946935242AABC9CFAE7A258A42E9F9F4023556A81BFACAF6F936DCD47AC6D9BB9D4AF84228551549427BD10EAD3DCAE2154244642F8186BAD1DD3B191A9E6EFD60EE87C86FC8F5E2F6FDD95FF6C744E1CBAB37D4F43FF39756369E19A3D7F39E0921063522927C166C309D7FFB593687964A03E98F8B650A9A8F5CB38E59BDF3A04D51228F362C7A71EBBC39030A2FF9BBECF605F9AEA477E70C6E8DE6BD2976D97501BCE8834BD0E4D1619DDFDCD92F3E33E3EAF57A1F310C455B4E4E0EC2758F11E9ECCA461CB621C732FD4B612361B62272D3BB77644CB7032C0E40FD7A2894E6638AC9C918E285DF9C5A3163CD180C2FF602AB4E25379EE0687838AA276DA3658CE44CF7EECF7873F2FC3A380C1A5F215E2458F146FA55E8E6CF7476D471563D2DE82AB14C3C60D909D73020F283AA37CD3CE68660E5F9774D971053906C792792694E59E493A99B4BF1BB263020D7ADC28F65EFA8877149A0EE3A3596821706CA36D6254A53BFF8584AA97895A3A98866EA99BA43B23D5A8B4C1E685AB866AD29C2F9D9DE1CB6A548F3B2C2D843AC0D08D7BEBC20953711245ABEEE8CCA15B3DB2B870D1F250B308912C4A50E9127F7A7685F760907C0720A9884241F3296AF7EECCE97CFF9E10D8D12D839D3693303267C46880462763264191FE5D18FE823EA9FB41C91414FB5707BBBD2781F4924576E7230A8150661573FB7E6C32740A15A0E4192EFB08F3475BBD01DB882171F0DC99DB0C6E5FC5202CA11D29810685EF86AF028190A152EA8966E0B13112479B5F1E7A8D0C2609B0A27D44A5AF962B6279B41AE02F8F6F0980F6E5F9F55A644570928C64F58079F4F595DBE26738E32A1086374DF8E652AA63B80F70254736BA7E760D8EDFB99B6958DC6F21C6888C6AADAE9D1C84E8D46B6484AC3F3A7C7DC55800133E1DBAFA158BF3722C94BE7804C7A03094696BDAD552730A5A4BB9A84B7648541539CB657B3DAD3B05631ABC6870F9ACE67A10EE11C3B51CE7B754EB30E1C476993F45C7D82D83D0DEABCF3213519BB7605BFC2971D71F24F2A733A7DA29FC8DD79751FD1622506904FD4D73639D76D528CF8BFE3A9C5CB6891DE39937C8D7304B3099CE79492099FA0186DB28C9B62C133EC2E6F141CF91542F48F590A82F7C383B5B7116A6311A504395079A36F8B6D3A0C82CAAEB4E06D86D6DD54E879B65EE75D6FE83E214F289F3A40AF1B2D06DC0A7DBC621B38653CA5651F6F408166000D4F77C0927EBCFE056B59F25C2E504CE6CABBEE76FC3D46C0C4EBC9A20A53A9EE2E203E46B23ED2F7680217206F5655AC6B3AB4A3FA66E5AAF5C00E77F7F7686E58255078590C635557A5CE864ABFE5339DEF29C7394CE120E00EC778407CD7E5DCA058667316CF0AD66015BFB2977F29EE3DF6F30F5008EB23344CB6F327CF07AA48BA098E360A3062A047660D2988DF6B69AED420FB680F5C8A5CA5870B12E3F69CE831F3C8772C475CDAFABA5DDFF8667267093054AC43B0CE47E1C71596ED9D7CF8D0BCC8D2D09E1973ABE2C44E96B540F6FFAE6EA4D37F73664DCED75C3ABD6B0A26EDF24F8897B31BCF78C086C8E89FE18B6042833BD0FC27FA5ED96CDF244D8F1BEC402B880B02F5319E4D011ED85AFD4D290C641B20F58EC5944579C74270397D9C67182DB74DF5F540F6A5C047601FBEDFC17DC378C1D6240F68892DDDECB45B7584F8CB8FA4D06DB8F8459223B83B39C453899CACEFBA1B8FAC676116B0F2A0F4AED044A74538AE17290CDE2BA921C27DDE3602F00BDEDE31F73ADFCFCB6D5BBEC99C567318DEF288B25120B4F2C6D96F9A19C8E87E6E73D57F93BD0552B60074B3DA20E0608D94A62089D3CF7CCA69F653FB2BD5D5FAB260770843C022E3BA82DB9FFFB0563AE9A1472D99D7D5F97A5D485B3075E01C87412DE25532930F5CC560DF344FFE6643830C897985F770C66CC6CFD1FA7DA1942A18B489F43D1A68FC8D99417CBB30E090CBB8E4E2FACF1BE34E6275C0556034F2A61F5BEDED36AD657BEB792D184737D47602619A4F68F3A0585CD4DBEA7E92DDC34FFA4C5603BC7930FB638AEA4FAFB17BD48C42F1C67B8E2D9EB2BC9DE1EEBD50B259647686494469FBA31D0EFCD06045F565E29E4903FDEF21B95E31FE5243F8A333B89AFAA7FA16A7D48AACBB4582CFAC80AFA449C99D0C09B7749C14BD4D9C0F013D2F943743ECEF2B1EF98D6F6DB821183A9FFF74826A7530C4E1215BEABF22545293C4EC4551C5BCB20834A0E9647B814F6BAE2B2B394F69B2FBE2718BEC681BD5E4C12C5209A8DADC06A029955082F55093C4BCE7A033254037EFDEF85D6F7589953F26A0ACD7CF3B36526FB71D5F315E94075E056159DC0A1BB7A56EA44B421732FA64FC7CFA9886841E13FF581FFF26EE0E773AC70D89C4ED3640C18A624EC04464F378B9383B61A979658FBBE5D0BF2FD36CD62657EB2FC5F0CBD15D9DAEE341361FFE94E7E8A565CCD5605CCD09D4BA01D6C0174BFBD86E9A7ED72AE22D40463DA783301DD7D3C2D2A05D2AE76129B6D131FB998BE986AE6F1D1EF1DF1DEE9A933AD88A5F3FF5CAF63D4572811EE6569A16BB6B5AF43ECBBDC088F9F01E8EB7A65725CCB062BB5866B8CF708A3A16D9A5B20EAD4F3F6B2AA7AC1BB69703395840FCD314C6E1867033A53DD2B94C452EF3DFF8E6D668B1003B94A6302FF0CCBACC6F7A7A62DFA306DF560603AB3ADDD58AD6C4DBD47FD81D3EE13A013BDD917F7418F3542E6D07FEF6D72319358E063D61F7478BA008B41E3EAF70A8E49DADD6B3511185B8E030DB7C4D47B0F5D426605A0CF8EA79E1DFC8A43E645045FD85708FE0F6EFAF6D691E6FE6C9381A0353FD0904339BF4E837AC5DDEAC5F166F142CFBC7F8AB9FCD8EC7B758251CAE37EB6A748A10D3CDC08A1A749D4B9415B38C1D2F33215C07E77778256C5FD7774253FA016BABD7F4FD105DB7E7DB2784DE28E88DCFD08628B6974C8652684BB60CC49DDFE1F520A85BD8653FEFBA4055AEBCF6C0C3F601C1F4931AFE5BFB6F8B60B13DFD3B358430FE839ABC016C3A2F9C4E9991ECD86D91849D4A9A40032B4DF3847B653739B9D7FAA2ADC72A5EFEF719C7EAA4B7788D58637CF207C2B13393561DB418641F429A1C35B782642E61F420469EF3168966D380B7674A61B276D8258C5AD59CC5D8ABDEA666A2C4F9ADCEDD38606C51780B127E384B0D775528A0CC604195C14AD224458E7585E06B68ED382E118D7DE90B70992C1045142B3756DCF517C133973928E50F2585D605FFBEEAF67C82445A6102306580ACAFFB2CF266030B896AE593EEEC393DC9C2B1A2DB4B2870BD9941CFEFB9F6EE6564BAD16273EC01E01A8FF185377F8AA59E76B48CB67077BA9E538F89589FA86A74E44AB8CAEA2E65BFED74242EB07EE06255318338490CB452FDEF5A5B85902698E52E186CD7B49C1FC45BF253AB008D273C0F888BF90269F1FB563DA3E08CAE1FE52932E8E932C3605947813E9D82768B5BE9ACF0D5E1F82830D33DAFFAD8C8F618D38D7D28C586C0400F7A8250F04FD36D97748ECB0EA7DADE34B0035B588C7B6F66B3B467F6D2080CCB32C266B68DDCDCEB05AD1131441304B606F76A43E783231D26634EF2B80B3C5CAEEA9AFF0DC4A846E5C3D764C391DB21A0CCEC214F2B3B4B3E2BF53D574D33645297B6018347484B3CA6CD67E9108F210D5870E7CEAC36A630E17E5F3738401858783C6CED50033732B985D669CBC2CE1C39988406B68A82674A4AF653A41D8615A91D15A05A4B430B3130E5ED635DE231DC8259485A85E62996CB223EA0E7E6FE621FF09B89F35C9B455020BFB5E56476B5FC0444A3EC50715A77FB93E99E6EC9C06D13554465BE7F54858156123947CF91FB66AA9C56F9BD24C1A78B5AC4EB885F91D0CC7D9EDE5D6DDA867B293913153190D96073F8B762F46D0EE9623A2AE7B268FAE05B7D09AB51502AA5D965DB08AC7171716E88F0E82D42D48BF342EDBD1EC685C3918EE87E46DCA3F898E249B12AAAE4A7D4DAB89A81939FA6B7459C0C0B16D73FCFE3E489EF41A1B03DA2902D24F600864669B7CB45DA4040F3EEFA282EA6C291F23670A8985ECBCC4C139477EA40302D44AA152ACB440F1F7514D8461A1556CAFCF99FB1514B6FD28CDACCC944441455418FF0F05CF30561F24E74CEE8DE8BF44677B0ACA44C44A655D9842EFC48C945D68BE09657C19D25ADC360FA5377E237045FB5D42EE4B06695BEA7FF1BF74C0F69F0EF2358C150AA7362CAAB0E9269F5525C60A4B7CE92E04DBE -MD = A879A8D1361471A9F70A98394F048CEDE4A229B7517745FC3ED87343 -Len = 25862 -Msg = E47296B15DF64EBF5DBE8A0A7A1A00B39A9A5D74CB1951D30D57C697C01A8283FA180896C1691E6549FD6A3AE516B7EF7996425B273645330D5152449E654C19341B749D006310071D71C3F3E0BF2DED5D37CF29E0EAFE591919222A2123023486C91E61CE09614A3C4BA469F60FA8789EB7E74B77656505FA6AE3D7292534A3DA91FE797F038890DA80B89D51E457DDCDD3B64115147E4450B7FF4525CB0EE5A95AB1CEDD3A6C5467DFC1F9841A3308FCB8C5E3EA9AF1E7F0DCAAB7590EDA7C44F5DEC52C22E3213616FE0DE3643320EA26C922D8C7780AAAC849C352E2E0FE0EE51836F70BFB7C20FF91C1FCAD3487602BB3E16786712A17705869CC5AA6B825C588316894990837955E76DAE560FE80F1C2867BF302A9EB9005BB14AE7A0A565E7B6063BA265008CD71F977BF8951C748112AF361B362C7E27C0C35877A394E4A493EE9792F5B9B40DEF96469DC19E35C7AE3423DE50B098B7858F6E44F9309A4009025492D317767AD065C7FCE16D7A7B810984CF6BF8ACBC42518F723112D00DD3898FDB4C5A2A5BF826374E4F5E9567C662F71F25DC421C040E7C9589D9A0A5FD499FF2BC968619EC2338AD56736B5D3B03061283914922CA2EE283A19CD958451A27524A8E3E833C404BF56E5EB7552CC423AC7D4BB1B09D4B2389C53AC0EC5D150705D186B8AE9C32D0499786EB14F281D2036DF74035530A6D45AEA52E8AF39C8B82A056F9488F81F3C70DE50E2E0A1600ECDBBE0E5BA67EFDBEEF947D529286386D523825CAB4D39C00C48B81BFE5C4B86EBA5728E4168B4B9D999D7F8F7367B4B6127C6C8B950F608DC3534C66514DDD3B03398819C819B39A3CB12F432979EEB0126A609718F28284DBAE876B8FE74CC414952C8307E3DDEDC4ECEE23A443C118BCFE3A3BB6F1509A33153D0DD786C7AE1B2AF26BEB944654C35092D7191BF3B74364E83F25C4B02B46AC755DBA662897CA286600B7D3518A0B96219075331391B343971B264DF4ED0A27537BD7F9E5042B4A8A1A685FD7D8083AEC7C757D96CFBCB6439BB17159372C1FE1CD63328376A0AA3B635F1B65E29141120E05AA6C040B499DF9E932017B446321AA9E8EFDAD98856D6FCE4DBFAC4228F90B0C1D14233741B38AF79F73D7157974D2BCFE6D66F0C6FEBBF664ECAB737CFD8D863681626BA8A408B65ECBDB68AB1A14693935358DBF9AED0BE052B6157EAA2DFAC45FD7A4AAC0271DEF3A923D4EFBA7C916D7BADE76A6B6B801E4CBC2174C2E0867E49DC40B1BFDBE2E727C2C94D1111064023902B1BD13A695510BCC266D9D95204EABB2ECEA29BD107E8855D81A2736D6DF583D582BC2EFF2F0018C2947AFF6E9B3B3FF56A5768D92F18D859B4C76134F8B457B4B5D091912F26F312C8B956BEB0178A1CD62A2836CC47B1996F0074AB78CB06CBCEE3659C4FCD9F11640FFA9215BAC94695756DED10B6D6E337DACC7068FED0D54CF52B726FEE89AE158E71A8A89311B29E39C346A0E7D00D478C3ED12ADA9A2ACF6F46F8AB67B124D1652868C5B95AABF884FDFC034FC6ADEE9DE486802868055B7341F963B9871D8287765310BB8857C217D703C1EE19A5F959C4ECE13D96F568F7760D8BDD1E4389F7BDC83F780DEE7F33BD708886F5AC346633428A8FABCCFFFACBDFDDAAFC1D5C42C4FE2B158402F528054C6F04A01869FD21B78AB6E3DE0FFAB5FE6E9EC7551DA27442738A65E97799B77530F03A9C24B5363FD08960DACAF4714463DB626DB2EA420E20244E166356E6366ACFC4017226D9B401DE2F557C5EF3FD0FC9A8A42FB1B7BAAD6808EF5E4F86D0D4C9CFAB2159155210ED1E57FEAC2E0BD0380E904DEA59C2253744B1D3566B75F4E9CDD336876EE6934135F77BDD26D4EEFF409808ECCA5D5361D3EBF8A882D9E5E69819D9FC5C13467AE0E029D30552327B80FEA60B94A1D37DBA809A6390216B7257BCE7ED6424E3B1AAA13B418AB6E0AA1AF685F7D073EBB33D87F26F69601F86470AEF16BEA8D9FAAC5BF6DB3A0D0626EFFD2BB5E9024CED54C69952C6D988657DB826173442E27ACBBFFD4D4A39F137EC1EEDAD80C89FDE8B38B91AFCF2377DFF9A4D4ADAD41997FB2D3687E9AA9812A4D1930F80D88502BB63CC97C6B787D061A4B8CF57FB8C8950B10FA18EBE2422C4411A1F45DFCA06877A6C143F716F1DC34D51A4DC02DCC2E16EDCB4468FFF799114B618B7ADC75D17EA134B3A0CCC7ACCEBAE0DDD1FBEFE001D9772D8EE11503EBB21F76EC48D5D621AF77ADFC744E500655643C5D4B8AF6C964A988ADCCC932A8E77DEC54BFF848CC3AE24D9491A3BA9B432591CE021E9E0BC024BC3727BD6028598ADAACE925968DA4D5F22412953F32C045E52B03126561CC9CE08BEA807EE49E3A144E50E61835AE6590F1E0043EBFD05767358B150C1DABCEEBC1DCD116A1C0AAD9055702FD888A44ECCDE3F54F135A909EF23D8D6C7A6C8FC6D04A34F70DA48FE0231A2758CD6B27CCCDE4DFBD926EC74850B6AC4EDFD5E9EE1199CE1430753A6314CD38BB6385B204980FC899F0BB5D7B99A4F55E5333C433F9789FD9C66B6A0005150A088A5AE257388C30E39A77E36007B960AD41FD8B7E8A270C7CB7764FD9119043FEFCC166D16E2B6255E9170BA16B8E0732E368C5AB505BA94853375B650E299C927D54DE7807C2401BE5BE4E384791424DC1852E446920D0FEACE35144B1161847393C5B112D585B89CBA3C97BF6C40257994553DD8E9624B61957544029B08FCEDB9B23D5A5BE3E696F1809142F1A4CC2554A1A31EF7E95DA9B474A0E701D846609F320507B2D039A2C11468B475C6BD45E8119E33D9F31EF9447591109F1198FEFDAA0F3FC98A8538EEA611491482065D93E5BBBB0438D940D99D93427AD1FBB24EF2FD836FFEF92CBE0606B4DFAABC770C2DB9A0270F3FA9182710FA5BB4E0519FB732252C904B37E6D907B47FD39157D6EE934CA0B60C371C4DED3C1CAFAC2D537A9CCAFB1EC5248BB276DFAA044A4D7A6C5F759F64D9E90FCDF2C68EB884AE6BB6A8FCC4F8315FC10BEF2A2E390492FF00A381802CF43B935FA4A08C14A134B6CF6552DA66B6888B9066312CF535528B114AA155759BA222EB15E8CFAB20C48D71777E4621078ACE352812F20DA540B943731979BF8ACC769B6C7CD7CB23143A9693009E8EA2B38094858F8AE37A6BB86AF44291920EF98D9C0FCF64010DC5E27BA29791D316A721C8C0232D24901CEC66F7405CAE8EA418FCF6AA21761F30BC85723229776C4475CD431448A823A2A5BBE72821DCA93FA0CBA98F3567BA324DAF9A92915FD419102A81D1D1E2503135F24E1A8D1CB8F7516887A2B324104538275EE84FE86C0EAA457D41BB220A8B0A58F45542EC90752AD571875C23F48364F507A6502A3C74E0D77BF4C0AACC7C647477DCF5EECBC313956501AD032160F066415F2AE5A0EAD26EEAC4AF4FC6E3B7E9590BD3906141A9B71B192A82E0B6377C51D83E03ECE7056574131C2C75242C69AC8B78B6C7B201EC0EA960432A0EF9BB774B68BE46D00D310BFA5564EB12C67EBEE40600A322A54C21B0E34428290771A1C0D8F8504F408C216B97902A102B51C2D421932934E989F23C106092CA1201974D95D62D251558633F2C4763336319D13100B67C53AEA2EA67928CED6758FB3AAC8DBEEA71D97324725A503A887FD5DAC8967D7C6E1ADC85C21301DE9628D931A9142AF65F59912589475AD4032AC1C6E6E31AF00B36D551C9F7F05E5B72B7B168E065E5978460416008951D672858ABBE24F9FFA3ACD7CEBE1A189690041B9AEE1A2F575CE6905E76B56AE5B329580C7B41AF29807FF6689D789A04B2F7693C74F13BCD065EA4D897418ACA853752B2D0E2A652544CEA23CF616BC5199C64D7A459D74139C33D56BC3692D96C0AFD2823B3ED0F603C72DF2A8011917E16DCBF43D1EF5908EC5A2E999F552A3E14B820DCDBA8442A15DDC3E9B2F023134F3012C5A261A4A794E27A367CB75A8E2ECD62A686532D1ECAF297E37402C37FD1830E699B9064DA2099E1083CEDC91910571DF832F2FFEE3BE7B981B47852EA2FCC80633EB28729CEE877C5E49FA3D57B0418C1426CE50407B9D109B1D54F30E59984750139F1F294A07BC88765050365B1742F7825F568A22A75DB47CF334CEC6CA8D42E055459EE4C0817D12A166AD3FB9350EEE7D650AC47C6928A9BCC2DBAAB8B8A081193B1C926C40D7DA00013E183FFC8C8B010A8B3C62FC944EF871E5460CBFDDD4416F97C3085E5C1B966E5C4028CD5DA12B3192459BA71E567192945A2444E17CACA973E8E54DDAF9B9D7E46808ACED412E0D148D506627FCF5DC634853630D7D046BE0434B2DECE27664F2941F93A2AD685A203AA8D3E14AF5967584D7EDA75CD9EA1D991211AE34FD4BE6C39456DBB35FFB22F4BC11BA25A2BFADC1FCA48974315F7B13AA5F29D5289DAEBAE9166DFAEF9FB6408F672222F7232E465B557772619F71F6C984B36AB107C62FB9A876F80B4BEDD6F664496E3381BB6FDA49F6F8889BD65FFF1DFC05126FB8D6126B109DDE94CB084 -MD = 550EDA9E277486C7E1982B01FEA9E47EE9D226E361BE4ADCB106A890 -Len = 25925 -Msg = 73C6235A2C615AB89E1256D77AA31204C5061F1BACB51AA6186D9F7AFB45ECFF7B598BED1E387881EB19F1003E9189E493CCD8E86A3C7ECC4AB264950EBAE013D7804CCD7B904850FE7F07C31A314FB67608DB581E924DAF230F6629AF1B60211C6381FD17BE8EB0ED7B32DCA0E0075A352B149E694371AD81D7FAD50B0A1E3918FFD3C21A7995626735891F67982C1995FF490A8521A45F625C2B643177287C367262D493161D65A612460F56C6D46AF6F6575775D18AB0FB087D96FD5DBA3F1853ED84C4D0BF8B883054FF5F4D13F572793B2D3577944DF786C16AC72E51899FFC88E5135D50FFC9909143532494039D4ECA6DAF1C9D59A8217C8493C0963E8F7FE637AB377480E2DE4E32BE09D0537AA398362E6C9CA9CA5824FE2E9CFE7C45448CD90082D354BF33092E6F7A50E53ABA62589A472AD5D3184620567747BA6173ABB786EC95617F57A9D57045BF81205DD9109804E6E552359D0993EBD366D4412A1E956DC31C0A702CB82030C56E6B8669233AEE06A5EAC4386C35802FB38620FA54A8BB658BD117457C783D8B0C86F3EF7DEC5A8AD8488427D6B1B8DD06199B6E393C9A11F718E9700A591C71161BCEAE0A9A16F1B1984E11D4A3991A22F32B601E21C538119D6F3F058E98707ED48AB01411F6BF858C854F8073171C33495D05FEAFC854B1A2B41B0BDA1A9F4F579A68D2B90E7FCBA1E8BDC6DBC0C508B73E1AF6AA397D6C627C08BACC8BE7A8CBFCE5597DEC47FB4C50562F90FADB5DE1C952720410ED6B91B96D48CFF709CEE49AB5E9D9B027F8792E88D37F4679DFE030DCF943DB78DD803FAE990759DCEE756F9C4D1532788F66ABF4FD78D04D015B9105985E1288BC7F3945D613F18BF57DD9B0C95D68F5185E8A6E440ED98497710ADB8EEE9010D131AA9BBCC2699147DA1830F34CB2312E5B25B8BF57BF36363DD7AB5FE85FC51626507350EBC2A629302546F3A26492A44D9C15212B340475FE4BCB60C70A84C24E276F361E280BA6A7DFEDF5EF7C6244AB61A716DBDA627CB6EFEFA1EB35B88E944807BD1C86A84411663E20393F82E31269E33A712062CF03E6091416B146B5519816D66FAF52C6614F9CAAC1FB58F9BBCB1A09DB14367254C80D796E43A5CD142FAC97A230A2D1F0307BF9A46B9B10F8081B79FA200D15D560B7FC72488105F21C462B391A32116ACC908041A7053CECCB66CE1093DBE9987F0B6B6451DA1C09D83A409A0EBC3B48410C20E9C286294CD6899DB0F3CD490050C2A50C78D7988C08E4BE813175105C3986E1D06A6655D1C8ED9635082C5E97D1648EA57B3E88598882004EC9C57E02D04738E3BFE882B7854ACEBDC0F388AF09AC6B8FBACA28A785334101BD6D35339E4B36F727517D9A884E57549AD9F489D3B010FF155497AC14E0DE0619C56DF249E6D5DEF5CAEC4B8FFFA169B41C2C060747EFF471E1CAF9327D2C8954E5209431B1063061013537EB0D97DE4943B415AB396988C3BB7B0C08AEA57D7DE711D36325441EB3766E3E2A9816FED652FBDC95653C82AEEFC035438E92E4A082DD944E1CA35F8C09D0C1B2AEEB4FE2D2A8901CC6F43E1B9A11E6251872C599357EC37CBE34869772952EB3FAFC7865D0F11228B964782134CD3117A98798924FD2AEB6B416153952E0E4BCC0760CAE462153A07DAAB5C04BCA2FF556E37852FDFFFEBE20FE837D066EF075E72DA82E96C8E5C3BBB9B04DF4AD8C509AD1B93C09C42BF81022B63C2313B15C4427F584851C5A6FA9465B9DACAAABBD497C9ED09732181AC942BB63A634189FC3F4E21AEAFB63B7D88D3FD898D1A3346DBCA0E65F3D2EDDE57D9C8F07CBAE7464C9A493087F44F3EBC1EAD176FCD1FC4CB41184D26D30BDA4C1A0F381BB6BBD4FD35CEE5BF746C362415033626D9C80B0D74AD964408BC7C084A8B04069F8481453772D5A26A637FEE058077EAF629E780E99ED667047C1F72D9ACD9D0AEE9E3A8E6538C62A2229312C97381E4322174C311B7AF39440E4475C38C3958A239D1AE4433EFABF5A32030A2A1149428ADC8D41F7FA3A5C16A274BBAE5A8997106E3EB9C7BF96523B6CE64AEFC00098BE43140607DFB6176A9138C7142ED0E54F08D859CA9B46E42451FB2A4D0BD9F535EC73EEF103EC21F139838CB299CE081E74D7ACE0E0EBCCCC5C2C1290625FEB662548365C88967383177C7F2DA359B2AA73C84691B9ADC72284AD230469CD5E4C99268F93943E78C50C4310C7F60440B99F8E07269F6A92BE7D4F9A1036D53398DBF77D539D054E5A70E1D7BDEA433EEB0761E40B7058E8C820B71EEB76983192523638594D1C188A5D60FEEEB8F5C3A8CB900161235F9D2599FD1D9131E235F5072C6C08A6D756DD4E11B4CA1FF8E2D55BD0C7B86F91F01C86DB72FCE2A9E98858C4423790642ABF6C42F4140AFD08CC4EEF767E97008F6703DCC4C400C2E716F92F8333A0F8829E004FDEE5B95EBB92F7EFE096E66C9A5E7829D6A79B09CC7956AB8AF1DCDC7C130887FE195EB14572DFF5CB90DD7D97D269DF4704A4AB26115ACF11F59AC32FC76E7CED9A3DB9CCA14DF79BB44944F093CD1FCBFD33D9976E52577BDE2EBF9A7D2DA43DC8B6D36480D864675E81CB01A466E70D96371333FC3625E8D27C7C52D1CA2994FEFC89E8EC00316A1AC5DA3E194BF9348C3FB2FC1AC66484503A09F490DCBB0AF194F768611750518DD040A3FB6FEC4F9E098465CC55FE516DCAC9FC66007A998EC2E62F3211E48D39FB67715796A309BC76488EC86E8A015FDBCD1DDF08C11CFB73195FFB8224421A285D3A4E24A9D7EFB3CE9CA8BCAB55E48132D6EFF687755F6763F4F74DD2495709CCCCE9FB58852322C584FB92565ACAFAAB22A52AEA7361471C3BC8FECB611E78877B7253D54B9A4481CE31A22EF5E6B2042DAF9923C86DB6CFB35EC0ACBB4A2EC459AB88DAB4834788EDDC9EE14D9A892DB1F22B9F6C2B102719F6DBBC82BA1FEE7EF6D015CE38DCDD9E9EE63D60D56902FFD22421A459A2A87524A7B95140AD722B30A1B8384850A22EFBE050FAF022DAC55A6BB98BE66C9EC000BB65880B6F53E80D9915572ACF4ECCB185A0D93B7DF1EC4D5F170EA546F93CAC81A2ECE1ADBBC65DCFFD4B6825EC280652BC4E82B0B0310BE4F674E4B159300176F2A93EAD3487FF9B612010D95DA424F6BEA6C79FCDA67B7F43220972B3FB9D73440DE2722BA4900813E94D556C16727469741A84B5801BCC251022E056D44B578AE3FD481F9849DE9F11359F40D0902B0400A4A8882BDBB3251BC148BCE4CA22C40A4EFDDC246CCDA420B6B514D9E804A6C59CE529ED9594092CE24DE9B464C8203394363D0C5B20180783FA01405FC8F33122F0F51FEFF5061DE252EBA0E5D5D0B2999717F56D096C062353DAF73448835010F27AD73F0CB2976D82706C230026EC75CA9B8836E8487C5433289DFEE227768FC195658DD71FED7E3B71F5A44AA730075764B3C715775EAB63F7C24A31A1EFB60CBCE87104E165BFC56290CFAA212DDF1BFA2312F5F6A597930975A0EDCA6EC05371C29668A55B5BD6221592E3847CD5DBECD39A1FE034B46D9537B817120792E8283B6364471460FA0E7C28DB1AD9049B102D5C3E3ABAABAEB8520E7B5F66775F14E3F8A5CA25D2635A189B350D91E88934DBEFEDE218F91BF1CD3647A06B588B010F95FAE9DD296EE3BC207DC5AD600720F4B86C84D61162B600C5234449F9D073F329A56277993EF3570F2E0DF9FFC1B4163657357B84976EF9D1382D517C8C9FF788F8BCA52DF25E94F7EFFBE1960CC6ABF5B948B6CE7755961D9E39419A5FD36A5FAF4C32E7D31427496E353B6E40A86D4491F7645B4E3E5D2470A18F9972B9A2828F1550883B1DF46FEC7D51D0690107325E0C95FFBBF505120444EDAD8510D238391B16FECD78B11174F8C939A091F20F790C64B4D8D1C24A7DEABA8D1933E035556D8BFC93DAECFA195E5D5D407456DEFE9E17A14AE9D002741A675FB707B8BD672AEE49530E0F618AD826284342763EC57E7447986B89EA0380F40ED1759D61636A3DE05EF290E20F2FE8EA63724EF135F3CD50B9184588A5FA0CB9C47D545A8F9DB37FEFE7B9DD4BC45888B06EA32C0D0A584038BEED84D5500AC781931812AE83399355DC3691FBADA91AE4B63727AF32445CC774A9BD6D5E6FFAFBD449B25C991A77C8817903758AD11DD8D8CFA2EC6DD8A735FBB6C49D0E2F5B6EC86862024D1F9375545FA360C692B11F2DEA3CBF3F8A5F2232F40604E6ED86859D08EDD314801E032B1EA7A832946C8C1C124221ED26E4BD53D8024F84B31362F61DEA1A280FF44E41A1C88653E897F508429958C62F889A88BAFC40748B2D307CFE0881B03AFB728713D6C3F3A0BD23499939DFC605971C623BC4F227C7F08674D2B98B61C537FA4AD61AF5830B78E8D708AAC3E61FA18392E5833AEE2EB912DFFB2F9C3A0848138DF10F63104636AF5F3F5415D3CECC3DE07917CBCF7D737F9442195E93E597A9AFB7D1C9C80A72F8AC40B7253F7E33FE66EFFB43CA89B0A51A9C383B737187C0B6B9227527E98FC0C3EF81E3E260BE0F255E18 -MD = 300CC2C579DCB51D036F56C86449BDE0B61C550E6978D25F92636A36 -Len = 25988 -Msg = 94635722F1305977048671311AFBCA4CAB4339C371280239207DCEEF6EC7FA91ED4D40731443C4A77BF9F057F8D49DB113697583D1F583FB7A8410B05212C9315F1F4A3C4CA33C47087861771134335D4BCB96628C057471CFCFCB07A7265C078E0B9664E03FB2521704C720B6489EB254AC6AB1524732F48BD7389F2FB618A9EBDA8B0BF0EF33E11BFF5B4F10BFC6605A0E82BE6AA259848C19A671590C5BE0615F4264D63FCACAF83F4F672A7F561749D2F006464E416A03B82A436094D7FBDF988E27EFB01278F1D97C9A8F2976C92ED4CD6DA07A247F8ACEFC26D88E8B3529BABB4D97EAD0D2A1707F83E0B37FDAEDF7B46B649D6AEC1EF8C67387C848B8F9BFFBE7F51B22E2A585BC510591E576B1F903185A412078678170E0636730A4E0BDE9A2D99BB5FDE489B781FBD0E5E48538EA89F330E55D74EC79989557803EC236478AA45741C2F5AB4F3B27A16101BE03437BF93B3647DDC964B528C6CD1BD9B8C411B6CC7D437377FCD33229CA1660A7229AA146B5F4398E52AEAE6A2874359B9DF46FB29CFEC99FECE4CE6457702E741FE00A8B433AE6A10A3A2B14E95EF1C6ED1C7B616C0731C337CC10874C12C1C23557EBA4CB05D01025DE700EC1A5CF35C498BFBB64960375AC632A283E7218C5F1020EDD4F3AD036894062845FDC82CEAE303B67ACC70371C8DD7C3BA21DE4513CDCBBFE7C60D4DD5902E11C379AFBB91360D72434969CF37E977580446219E37144F0E6265FB3FD522FEA419FE0D77A4A9F965CEE8330767C37E758C7793D9EE9F29B2B6329A73943E19ADC8955325ECD3FABE65EFBB61D0858B5DD481E4F26FFC035031CB129F1A8167C020BAD7A80B225BE296E027DD4756700A311686FC3D1F31EF4E05942C457EEFBD831C6DA11BF8FF8F07004844542C17C0016163953FBD25FDA0EFFA292CAF870762B14DA29A4D8A605A39559DEF8402E846082B989617C1E07B6EC0209B2AFB81EFBBCF67E8E994B465CAA03039DCFFAB730BA6246CFE028DFF842030C3AB6C7CA9C5209562A1EED115FA805EC352BD24F7A40258D6CA455357A1F935799304955FD6BBC88C4D2143C54259DFF9191E2FE0E99749C5294EDFCC29DB194D20A00F26B7AB1C9D1152D1879B6342E0A2C8304EB2CBEE14F65938131DB71185BC6710141A7E20C3BF0F43EE76577A7C5A67D66959E556559255066AA6AAFEDA1271A7E42EA8FE75065EB3EB4B8CFBE42E1B34C2DAEC266FDB4C566F764C1AFFB806401D266DA00F41486ED1D2FC1542DE8B1DA3E6B30360DD8D5AE2476A4ECE0D6F1E6DF70AE91409E54559C0AC21488EA47BCB53B1D3A506A8FFD729EAB634C1E7FAAF465A276994CFB84060E5260A54631BA398674D9FE4FD5F446225381E368F290225104784E695C1A16D736E91D9005E29F6A819683942A27F29200233AA4577DFA87733EB44BA0C610FAABFC3C8BF0D7615EB55C3E4591656B968CFBC6C5CA536D7B955AB7782AD5BAF3052AF4410713254A0372D0E332A54DA9505B4DD90C896D794524111AAF63FA67BC57485755F745EFDF892C5154CED216BDD4ACF3C5032B4503FB004D2F8AF66F99DC9A458C1926D5340E1A88DC97799301B3A84DE893836282D408BEBC3BA46AB41058067C0B0717553387213730960A78E009E2DACC659CC51BA89352D5F548F7D421F5317B9B6C4D139EDC302CCB646EFADB883E1561F952D119CA63B06E2FD9E6F78A25BC0352029F900C701359F5FAE050A815D8858D23C18006D8DFA415596FF87EF3672F63919FB803A95352EA9C4D2F3967B39F99E20D96771F256DA05D53ECDABA59563D53EEA59C697FE8F4C4104178888E26C0C57A35BDE7A0BCBF0374B6262B15274137D46278A7E6DC485298A3E190AEDA6CCCF9A9907D294126DDE05C6CAEA2C959319C3947DC7F247AC0522F707C9EBEE2D45FA734BB93AFF5809808461774A5D8B2B47539AD59ADC312CD7D1CB5F59759DF05A06F43186C6ED2CE32574D1220C9EAD7B8AA7B5243DE6070938E19D25A1EE601DAF84988AFC122BD03B6420F47DB70B385B06CA9D87B869D668A6D523FD5D5039DF10652365D0BDBE4E955D4809DAD1FFEE35D4AB84C52CD9950884112D2E1572F6DF785609742A4D1F1062F81DEAAF37275A7820846A5845AAC8BEAEE37892AC483CFAAB3A8EA5F655BDF1BE884E12B1794CDB1FE6077E6A16C0D5491E3613009AF5A7A67D5889624A9F3161AB2D299D6CB393B7EE56FF45AF844FA874F0029928385F30582ABD781E687E448695A9CC7DF08C9D007F1F018744399D0B06FAE1766332DDCE848EA1650DDE0739A77903BD70A1A8CA0D6768A7146ADB89A64C519514D0289BAEA7A51F0563BA51D256CF2ED21EF41047CCEF0BEE2D8238EBA8B68890CF0E4E7860A705F905D1E2028DF454AF86F665401217D18A0466197D766F907ACD8A45D94005EB16E7F7C6803D77E2562D3696C4DFC5AE55325C8CEAAFEE604D041EE4888B2BCCEC5AF0CD5AB93DCA6B6C38A567B85D467D59337C66B083E29E20B8C8F754ABBCF1089C57FDDA6E31DA39473887A5100A34EBD0207D14410387406BFFC84DC41BCEEFC90A315ABD1FC8D878192429EA5E876C511735017D099E9BD8B0577B3A93AE891FF1C232E2E7D3AFF4C0BD74DB925F78A32F90D15274360190077CAF5B09CA13F1C2D6263D3D96E288B547FB2E472C8ED527FB849D4CDFF1EDD0FB89F34C1C519DD4E4543DD292F48A1C7FF6B18FB1AA10123275DF668F0E4D6DA8AFC50628CA9C8EC222EA0D2065F0D4F744076FC215B81D863850D607BDC51874958D8BD2B35C5E5DFA3A1679C52B0FA90218A776324C4699B9F87EA0124988C9F6A0B8E1039A24EEBF832DC8A99DD7C738A52660A1D6589BF9E3B9BE6D8B1B5B3EE5AD0CF52C31BE40F6555F57595036F8000A5495232C925F5A1CAB3E8098260EE1F49948C872C32B47E8495F1BD88ACC06CA9F56178998E153F95C0234251B617E5782A48F3D1F2FFF4FC3AB3C176AF65EB8B262552517143D535D0E5DBF550839658AD6B2D6D0F76229CB9BBF1884CCC21DEB1CAED242855EF5E8F5D8ED199B8E3B38297F4EA793B4CAA66CB84756A28D4A46F955928F116CD12757C5D2DAA56A5ADF6A44C0973B3F36ED9402577EB60D96E8C982F06E7CE57AA38DC3D037F5A8EBAC3F4FA78AE53BEF30F22073AD61CFE0CC445D78A209C2822DB277DD13CDBE9694FF8EF6D8BA215192A392D4059E0D3E75777DFC93581652CE1DC4D252D9BBE8B5DBFE022CC959A9CF81A81A31663682C554762C38124D11E145C8C66946300157CCAF6A34C857B071E6D038E251C553715840C61C6B049AD24AABAB8A3683B6AF1264A9545981C0F33C8187199029E74B87DF27A9723D27C03B0ECB6231A5F4D0E4CB0CDCCF22B803DD402578807906679227F3FFBA7C34A543D7C3E4F33B972A1B8596C923553213DBD275C7DD0C46E238934D4E90ACA663C98C01687DFFB60A4AC227A9EC9E9C5F7D6729D52E37A278AC913A586A2377B0AA817A8A7ABC48441A5D5E0534CE8E0D3CF88DD6F831D741BF3C089139D53C93625AC926FCE3BF2604CD3C0A3778909579ADA6C5EB48A78F68EDDED6EF4DCFCF07E1990B12DAF7A09A905E8E75791682482F432F69CE8E2A1837135EDB2EAEE044442B704E5E2B65C05020FC7E1F143478149D079197D53A39DBDBA73C4F20F317B6C9F2C47A570140F61F0C1808B0D7A0B4F86B80FEA7D0412AF5BF628A859496096B20EEEC12026D981743203A8F91E6497A7D69D06CB587E90E7CD4A6ED81486BCFEC0170E8133D519256ED5BB5F79407F74B03CECD797266E879B2B4D881CA4C3D196186F07CE1DC3BB7841C5DFCC902220300A4B4FBBCF44B8483653B502754B45587A40FF2A6788FFB64909DF3BD42C26B6B44463D606754633BD80D473677FD85D5A1B7095F8734CC87DB9CC325787D5BB3A94EC59B6BFD751584908890D4A0A8924C34541265BE07B24E2461407DE28FC0F0F9DD2E311C1A6D4782BB6A6BAC7C70B78DF796C02D1797F90B778E365E9A3B8F2FAE7DC23C020C777D77FEA2702E95210D6B0C92E8E9AE2E6F8E6CFD39A47068F247C931CA332A984AFBF6CE829423BAEC9725102082A89D349D5BFAFC7020B21903A8916A0EE5A5C9248DE7E37D2BCB0A95CD828F250FA54630E663AE3401EAEE3402D3282747A40B4EB7D75A38723FFB4193BDBE8ADFC5F05521BF9A347D5D63DFE1B7997C4A9E1252A8C113C1A21B5BF814E6FA2C45A75765281E3609E500C2B2CC63B6CBC2786E90741D6E6AE277AC15AC4757470ADE4534815EECE6BF9D301CBFE36CB7498FC8D2BB6EC225597A5A17F55375D0425753D6E6CA73A67B9364B61F4F45507BC218FD01EE2D86CFA0685E0B35584BEC2CEEE8EC5247EDAFE1083F20F6635169D7B3F050287E6FF87C6D17C76BA616A25B1E2AA42B1BE4C0B8358603687A023576C1E1DAE8AFCD2FEAB9E1652FEF80B2142482966FD8E0E0DF3CC113C291721524A13A196E469A32EE0D30817552DF7FB60D4B4F1A157E97F47F132A22D2E8DBB0F7214B1F833823288B53BC65B9B40 -MD = E8633B930AFAEE9B83DC9E20D996D37795C66E39FC062A172DF5132E -Len = 26051 -Msg = C6A05FA94FB43E3250F9CC395E564D01FEB559D1CEF9DEDD9D2E314D3A57E4700E4FFA25E973E1040BA92098ACD0806D101F6DB96996F055392F358F8BA5E862801E45C448680FE52B42C5E315D9EC244EE31A4C995EF95A8705C3B1447DDE9252D74896D622618DF0D240BD2E3DD177BB4A089014CC97676CCFE5EB17C69F6FB7D599AED0BD8D5D16DD7C4D026C53B4FB01C416777F128C642A921F6A5ABE727DA5FFFAA9E51D254060A40544FBFC2836FA4E236AE00F4355D062F60167BECF5D2D3F5D63EB033A64A37093884FC2433F1B66371BB4219758D2423CA10C7057DA41C7512F8B34F2763D5F8878B4595458C0D8CC8A1F9F2E5524A69869FE9D17C6FBB37E95759AEDC203EF31E008AE68E5877C6733A839FFCE144E0C124CA3411973D94A5A2E86816FEB7A9505BCD203449AB4AED3823222B281734140C3C6679B53377865BB3726A3E8308CA40EB1BBA944C02C0D1BAD3FCCC33C9018ED70AC032443D2BAA7D8A4064870B70F12173CBB3351B6E1C0BEA25AD16923ED7E5704731B13B4FB6037DB52BDEF35BB0C90BBF01BD58A9EE35B1EB092E4B340D2C44F7C21ECD4C2143DAF339C8E16C91944B012FDAD544342DE995D06E191A041B38EC73F90B5143BBCCB98EB2BADDBA21694287E43C4BF2C5D7D18E32843BFFE8E3238AA3D68D723634C692AD040662CBC08BD6E3D10A148F9B5ABC9421959863BF1AB40662840F9957DFA4A586C8C6F19CD66A94C709035D2FB943B58334C12BE408548C0EDA46E6BB5507497B732665E9B63D792D17E615B947E2E7275228841E03E49F824F97A53E0DEC4D22BAABC50A9544D50D9F5519BAF7A26F156D951D5CC5D8DAD89D1785732CC6E1F5B1B8AF4497F7078BE88D5702975CDD1B75866CD9A7377B56BAB6224E06AC8B4C1073DC3AC08F8C1CD058E67109594BD6BEB1EDA39BC9D4BEDBB17B1A3554F34138FB15CD2579A6D86D29D3F676CA3EC57A44E21B1DC0A06E44D4114CF97A9AD2C089076B58C4826E36AE375E22A0676B13CF3DEE955CB6B64695A6434195CF53957D1D8692DA590E4A3E3826E81E758FEEC54234B3033DCB98FD75B6603C540084010CE30C947BFE7AF3AF4B7FBA6E3B38B058EE6FC453E7A10B6F08EAE332E6B7F01C46FE7EAD868C62DB79332E513854A24018AC51CDD3625E8425E4BACD277155AA1E54A5C2AE10A2735E7C17F264A394EBCC4B05B78E123D72E339A4AECA4A9FD2C257C9EFE06571DE1F254C8B616EB933122F90F19B81261F2A1B54C258CBFDA1C03037D41D740AE49AC4D00E9ED8AE6104237948D8EFB89B2C8154BFC9419AA8F8D537999778DA25A982EC5328A7550104C7D06CC42B97A2DB1E6D8BFBD068A4C53A42391CA0789A9C73B29F755F873823C8A86C04B1800D73C95E4C93F7A48C62F81E285515872E9F0486C871E6A863FAA3A9B16C4BB8DDFE897C2BD9907811D410FD905EAFABF2EDE7A2337BE95A366C33D5991928CD8F624DD29ED439B89F424E984D7B58564BC158D67FDC701C3AE63C52120F0EEBA15946FFD7118E5E11BB4A9FA29BA54B063D344E4E393A8A50E174F213DAD116769A7E591EAF10E0C2BAAE24897DD0FB358D10897D23C09D6A7104C5F7BD5C300B6FA2F1C907178DCBA1390CFDCF4A69AA3C0451C69C92D34B34749CFA10140D8CF32D4B0A63C95BA07046A3D527EA6F5DB41EEC179CA79BBE9E23955A2A15498A1B2800441B8D2A6BA2C35DC5F8DF09C0799A1CDA2380D9DFB394A7ECD241308238A2BE72579C3D5733B65BB99B0D718A8E43890EBCE67F76295A67270CA0B9804868096685DEE138A241F7689A204C8260D42E67B7F6EAC65123ED4FCD662B5F274C33C045FA8BB7994F044FF59F938B684CDA6E1B75790CE59D278E767D4FF1F903A7E12B477B439B5A2370958CF305308858CFE00189088B64862240FA7F0F525B374F725510C74A6F21C85890EDEE572B58D85C3EF5D7877741DA6AC94D1B2F780A75317F9E1E41E515681CE683F13D5D4D81C6245CA7CE16C4CDB553D02C4D29BB6FCF7B0545F1278E0D1A353C82440BB7CCBB0F3C32F3DEF1AA024196FCEF44E5B88ED3A7695295D8DC5B763FF555BB78D771D2895FA6B305995FC586E8E71C6ED1F180AA58D52A2C6A48B2FAC8D1866CBBDAA2D0582046BA8FD51AA10137B3CCC423C37A4C913F4026A4BDACEF73761C5F16B77B0432640AAB73BD2D9350A94AA630F1DE192347E6A2B7E99C23E53DC8E3CC852F45E74B87C061A031B344042461B54A3885903DF17D4F3FC3A373C78E085A286F6079944B05735E4AD6E18C5D56F9065862D05DCA9C8C48E861D266D816C0D9608DE5444797AB319C24B093F3DEFCEAC3BAD40A9374DD1919E7AD83862B93BC7750CC771F26FDA0FCB75D4FD93D83E39792E1B97725025F09212308CA1A0A597C3D178DB07E20AD8037D920055CEDFAA01DAA91B7BA45E0FF74F86DEBEF040869B4A7A4C6FB7ED0CAAD01B722729A25EEB967AE09CCD5DA8A024060BB34925B6693159F72E6D7BFDB31D00DA819655CC9D314BB6F3599F1C06947EBCC3AA95DE01784FDDB7A0F1FC4A028F64F9E578A144E9A21737CCA8E8B11FABF1EB9D4B8A8BE9B509E930ABE567E885657E0F5471F85E1127674298A595A991C211A562F38225BCC88D7AEF490D4E3BC7D55ADCB2B10C9318567FCB4778896774B4B0423D0E7C8EF740D4DE3E4CEA8AF7CC888D071AB02A0F518EFB372765C2D622F6C2B4EAE3B80ED83A48945A5DE64CFE5CC20330B02D8C5ECB5C58375B0DED3330621BCFBD84D8AF7D3933C9E70CEA03572AAFDFD5661B3807AE834A0BA2DCAC70989BCC9B3B22FA3FB33DA4CA575989E82F945888453E89038EF7C75FC31E1AA0ABE1F8501492209F5507AC657541CDBF5904C81999E36E6404BED9EF274FE9BDE48AEAC207E13AD2D34EBB849992FB35C86F9304D88C4EE649661A03F177D676F77D4878C2B4D4979D4F3C741D7FE9821633F46A32A602A21D87B7F43DD6349B28A47566693DBF2827A4DE0AA3BD95AE55E8A2F5133EC99F0CE6E9321D4567610F61720E269543AB2044B8CA1643E7A55136C5CA974BA7092C6EBD33E3F347F042537C680BE06890CAFE01E9C12A32253206478566ED2431F7BECFABB5B428785FB477ADB1B3AD70EAD4481D19F29CE74AE613B120F26BA4B93EFC00FA64E573E87DB58AEF138FE30A933F81AFFE5E2E2E097E45A104EF54C77A4D720111006E5B75E3AB670DF1DBE5AF797863A1AD0E7559DD84805299001313580606EC972CB93A07A25E64AED0EAD3A58A5CB8EC4C631ED929CF5BA3ADAA230A56AE07CABF22F2975D20973DB52FB0156C8A05397498DC577F67066A8D993C9B47C2F8EB8571631A1C52E443D3B95E6C896A50A9B2DDD65246206F5A71D53DD7FE0BA3D518A52B8A43F5DC198812194420CF11B6678B681F916D4E47AEE1C4AF1701739BCAB7062C8D70ECD5238BED6256ACF74C604A0C881566103A5686D1E78E9F4D1D93504DC1907E24B873E3B7EEF1B619557A6561C1DFC84EAAB37CED724B1583C46F0EEB5C68165A2ED47DE8C543931024928089B4B3ADE8980F1046A240DC0C8E4FFA9B211D16DEE9A42D33144B6F412BD36A289B061E2A67EC21C9774173B3337431D3492D9F290B3E9EE7C91BA7A2D08FFF2B0672F33B9679130F59B9E87B3E72B5CAECC39E998D0183E55141977ED2E4C52AD783D61B5D93D4867C27DAA5BA07446D3C3ED37F0F06C75BCE9D62938512AD5E1C8D6EA4DBF110050B13B13DA9C30A8FFD520C7264E14BF3AAC98823B42A2F8053AE1FE791B96E391CEF9DAF6E31687B6CA35F9E66A1E3345108900539442BB3A23E0BC72243C649F2758F13412B8A6C80B7BD318C1421D40ECE63498BA1E18AE7D176754912062DA4A2FCA901D0E049A30187F87E9B9B558A4E6EB5095E63653869A1179607C20A6A83C2F401CD9865522910A91C92F9EC7C98343D9FFF08EEBAA83AEB8FE1A4D8030994B2269D46A405E0468E112EA4810630637FE9ACCF7B80614706EEB8F79EC0CA9B6B84760C119570C2E3CDD7736EDE18DFABBA2A7ED2C421B4CB5CA23BF3D30F433792F9D13E22FE9177EDCF4D7605E2F4DDB4A0E92B8F76DA7DC2D17259C5719B7AA571F365B292283F6AE49A9715F3633969B8F2FF5584312B0E0B413C6E898751C1B8944E04DDE9FE587B48B9EBB149527F4D9E276FF52511EBF6084079F16D94CD4167C22291632CB3EFE9BFC7ED4216F3A3C5DCC1726049B7272068660345A07FE391733B2C7EA73926D0414ACA9C1157A5D454D723A41A405AFBF02407629F39B934576D506CA50A3234AF8AB617525A37125EC57421F0FE81B76492E4F4A78DFB2E596BA1E5D2890DF2B3A8A2C479C21F337BBBA180C4979AED18B9C7CA96E50B442C8EF7BB137295CC76B1337D200A3EFFE4434989AB709FD1BADF39B35ABC915AC039A18E262D3506ECCFA2FDB6318D788B0AE70806B00D0F2D3B18DC39E46DC4F2EDC35ACBA952DBB436D97411174D19C95D49FBC465D2C745E81A201134E7F654C972E2B0D44E9551E86FC82834F3CFC52FBCF119603AA04908D09B40 -MD = FED1B423A7FE6F6ED1E634D736B9FE447550D78A7F45C6389BD74672 -Len = 26114 -Msg = D6D4D31F566988356BF095204B5CDF02E1C51B728CEA1F316DE19C2E016366FEC1F519D83703BF4438B19E74F9506388085446A8D5B45D36F276C529A936DFE4E8AD8EF6C324B0404AC82163044A81706DB3F1A88C4306871CDFE86DEE7DE3B602045D87E01CEB82618436A91AA3253C014C66170D5878C8A31EE18F693B9A51913EFB5D8AC3B8B379E336386DE199F291780E92DDEDE008397E974F17A5687CE388DE105D6D26B7496F336A9411D6DF4D81B323E2C57F1049BC38E49C705D88557D265A9D85AF913DBF6D9B7EDA870748FEFCE21BDAC9CC7CE7E85B3374D4DA40DD77A439914A75089FE5D2B82E5DAF741B4C1B8BD5F5A7F57BFEDD6B31D3E490037EB7EAC07C88FE3D7C834FDDF6354CD1709DFE4E71C5F88A9BC8FFB1D9B974A688D26174D24A1D651C687274D94F64704EF6FCB1475598C3461658F69C257F87CFF4F9117A42F36962EC9BB4FDC07762FFF459D45165EE1CF8AFA3D6E9AB667089976E8DC06C26827C211BA906C2CBDEE40A6D70C23DC9ABB69BCD7AF06AB35D83F9500A84D9C710A1F2F42EC086DB08490A6056DB4E52AD38B6CF1C2DBDCFAF920756077C4C807EAF79EB05632DBAF299D7BD0B99D34721A6CCDE5E31B84748E0831987BD4DA6A63DE53855937030F2A814FE733CDB4B0659702D6D42CB4C656D383A2926FB7EE5AA6051924D252338380A861F80314B476B2C647EBF1929837BD9F65B4167C4277B3C10E5AFC974FB19945945EF89B1A940A7CD8905ABE955523F43CECC09B9F49CD943854003982B5BB831B32CD43587779E32945E3F03F1694DDFD864243570416948695C950B0A2A3CD7C673B5E0F795252E1EFAE299D69A65237F5E705A14BF9D187DE4A0F38D403EA996034D8A6161E61D27CB56BD8B1C080783B50656A55D093D873329797E3F93D37CB64E1DFC4D14D958F6BDE4C8184053244964F48B2D82989B4E2E41EC2108D0EEEE181A6AB6BB402972F4BA1F5BB2DFE3D5FAF1A91325F478DA27B2452A0BBF354C43053F021DE2318DE6A727C734753358D944ACC4C1623403C7BA4E06DDDC395E7EBFB21A8305D0509CE7750B15C3238F2241876F49E89C74B5080BB38882BC8A651D8652FFD5FFB2EAABB1E8102B942F868B0098FDC76A36E66FBFF74721E01BA61EA9A7D18B4BB0794AEAF1E828A727A3F3EEE0F34EE8A334D762636C84043A22F2E164849826AB3192BDF1532292DA7C7953F40A000CD4B38A93BBD1B3A4A1ADB0BCF6D3EBC30C2AADC0358A1D84A8969DE522FA788D621190851165181A98AE53621C23DFD0E151B7919F2269EC39FB26897D83AFCB706BDBF3A55AAE8019A1D5FBA34F997B05451BB27E42564EFDB3F2F2E1B815FD651DC285750B0FD78FA55D906EC3EBA0D785BAF7787ACB9285D7B3D6D57A66AFE59140E6288B324E5B8CDFBB93B8CAB2DB3E50B3B557503C6DE2D0212DC4ADFD177517E76A9F68641DE5E4C07CD434330BCB20B213889E716000F676D74CC2A60643A635ABFCC1AA539798E26CF5AD4ECEFE04A951214635F7148CDD25DE254F8858DD4059D69BF8CAB8D1FD6A444A3A7CC4516F6FA148BF2311CC75B3C08FCAF67BBD77D6A10646B378B6D8F3674E3CDA6377BD35800C3D9FAAF54B0203FA33547FAC91EF94E3FF0A0FFDB818AF8B9E2B24FAE4383B4ECD0204E4B0D24BBBDF6684DB374C961FF114E572778DE32DE39624259176D9E33F87BFF4BF5B6B2D517E5C090FAF5F6DA81C07294D28CB113532DD589E8730A2D7BE9839A64CA0DB99EF745FE645917FD8CAFE0CF9C165462F0DD97596588F2EC4494B32635DD37A827760E6009829DB1D7ACB96A3F5CD05FA0CD7C933B7A46A23A23DE06D7BCAF4A1BED1B2921433C2B29279B7F8EF49CA90A25CA48E06F2415F0559B8343F119EED410ED6EFCA1D148D732E359E666440B7A58C2B462889ADEDD25E29AC1522621DD83BB564CC6B4C00B9F6A1C880E044EF42D1BFBA8B3EF660BEBD1A7A30361F1C97366E655DC5E75411E64BD71551D8E6F410A318AE30355DC60C15795D9AFF71050C46469EA25A291ECFD72D034A27BD6716352667C88688ADB772C5E97DDBFCCDDD64C0203D883C5F875F5A72F826801B1E3EA716D878712531544F7ACA19C26A4E9F9441A5EBA263B34ED7549C23DF329BB8B9670B026096ECEA19809CC2A6A8619B76979768E109AB0F94BD32704789BE4174D1C2B89FECC524884AD0BC3CCE5AE33996CA77B1AD4B3A5759438F55CC2B7F1CCA0B17C758990B20B6FB6A5B0963D25471B8B3AE08BF62D99FBD5F05D8617FC324F4EF6A11A8456B07683B0ED5CA86083E8CC7D824FC0F79771FE06179962DA192B507A2D2601370F9B757F500E5225A644D35D00C996C2EBB17B7D2ECD4CF9DFA745FFE3F9285B5115C1AD8FEA241D91867B5B67C99624C80FE323DF9F698CAC8AF9D9A1DD2D3AA1553A3EF2DA1E9458F2CDC71F78FF6872BF41C697CCC043D6F7BC1E9AD846638C9443A21D7362591AB81808D9ABB434AD57158B0B859F0419B565BA62FE111957BF7C4FFEC217D613BFA94E26AE7624CBF3EB52F831092F59E71742EEC1350FBB24CFF4FB8462C8DB69FBA9FE4C21CC9FFC39B5D5008689A174F346385D43F47AA3872914F185CA345A2D5E1EAC37AAB242FEB364995C123D0AAFDAC6DE5D7754A0F4C2B60D04FBDAB4EF28AD1401312EAE6429A2B81A5F438D1581BFA2CA440BCD6348559A6EFA5CB2BEE4EBC4C9E075AA802FEDA3FEA0FF69939D1E9F3EBAFCF498D816310C14EFF60823B998A8913E995DF4049893BF1FE0D79C1723D0199A5EF907EE480ACC60B61F0CCBFCEDA4F40F40409267CD5ACFC95C13747CB4E1B1C6B9DF1194E9DD3DD66C2413B7A1F14972A7611A0143365FFB98B01A7E1F6F0444B4E4A816F8B168434EA14D15704257F5B89751E1DE9B64A77FFDA8086915DCFCA025ED814B79116BF9E0D1B790DC00778401C957E82C5BE20BB4A24B7AB0E4EBBC951675966C292E26A59A14034FD18C1BD0B1465B7C17B913C451BD5D20DBF63DA0D627534160CC0D1B2812AAB4C14D4943F6467047157528015C2BD401042AE67B18647FAEDE8BB899D4EDDA3303073314CA655B5890669D4D7F1891331523EEB8B40A78F0D04BC1FEB2312793BC4A9B8F2F2BE08AC24670D25DE7E7AFC3B51EDDF1BC0C007D60DE7A49B4CE20D0EA5DA85AD5233ADA8D676158E1D57E89A2DEA38C0AAA9CE9ADF7805D08398065A67726A9165016E84F3795E508FBB5BA1AB78E80BB998A3950E9C852884135D7744EE70B68394B848BECD837B9AE08004585340AB5BE8B99CC07477CDAECC94B7559AF1F14B4452ED278278E52D714729AF8A393458C525854E863F64ED3DD8FA52925A8BF34DF4A42EB4F2DF4B9CF7F811F6F3D16CC65CFBB93D384BDB42B4E04B69C2E433A987D1FB4623F564E4B0ED1D70861133ECC3D800F1C63A80DED700746BEFEDB909D3A36A45B89F8BF2FF899DAD9901D51178B6CF61422E1E7CDE52D618478295A497E46AE4F3C37E1E68C119C6C2E2BED027DBE187B4D749FDF5FB8514F4762E45863A0E6DC9093D21A23A85E09B1785CB89E16BA43965590578BC2AA92DD9B0329BD5526EA0AED89A614498A45129D9B25D2C320A069239D36926EE620E608AD7DADB1FC59BE9331B78596D03B876B1ABD711A1947BC7FF0D8AFFA59F732C7CAFC074E41D85533F28EF2844B29EFA4A78B1DA06098D25DC507EC65F8F2539434DF4425AC75AA77E661BF95F775C6AD7664CD9D6F9C204D624653DEAFE3165502CD6A4372E723D0CAF70666B6EBA05A45A45832CE4FB449DF9FB15FF69D3EB4B699C9C4D5E9EFBF0532A2AF04D4382D2D9CB6F2B87DD89EE6826DC1E576081BAE7063EBCA80F6F32C6D6EE0698834A27423E8A272820F1663780463C3AFBA7D5B1F8EDF4234CEEE46A60E89965EA8D9DFE543A046EEACAA7032C8473D66A479B3CC2FF2C62E57DB62451367DEABF86EE9118FD836E179182837FDCCDE60FBA90C744C8F22E04DC945FEF39CB58790059612626A0AF945D02A3205415B2B9DC2755FDBA36E1C285AF4667898F9668F6E0D8FF2CF09D95BC508F5354176D1C75650109B46691E8519B7A65D3CBB189D7D59163669FC4F8385D5A9BFAE5AEEFFD299D846481963ED296227A7EEC4E635D2FF5CF4AAE0C41C522090AB13C9ADEB662DDAEC0BC928762452C08D47EE1B92728EC5BCE8FB25654B91CF082E885DE91CA80624ED47513C293BA381013D58D882A67BDFACE25714B3945A5844A0DC22DC65B5C59B118BACF12B075611F623FB95986EDBA237F0803449B385A3333B51D0FEF6BDA7C5C49165E68B8F989BF56822D1D6E1DB2F2F21753672195DC27836CDF3CA9EB97BD99D6400A28C6FA0ED7CC43EED95EE45DDC48424E54B2BC435C81B6E7FDB021FFD54B92024D6846C68CE9E2E382D58DBE85B918BE41309C92B22A84F334323FBB618237D1A06008D9D3B60BE275906AAA94654A2A6682823B951486BB748F19C7731D63FA1AE15D377F4CC0EA52940945DEB14DCEAD960313194D36FE9D0CDD6574B96FAB77FE346046BC8B39DB28B665CB2048A912B80C84E652BE00 -MD = A11849E6B22B5D85428ED5F8469F92BE536775583F109994240068F8 -Len = 26177 -Msg = 1522AA09D17C4BE8B44064456CCA29A65BE8990DA9B56481CE0A1AA5EF1624FAF14A3BD2A3894B063DE01354B6C1F0E18E07763094727F09BB69D9FB8C1DF64C3E2F667673FB532F1AA39E91FBF9EF7EDE39CC9497B993138257D48D34AC88CCB0334ED2A4F0DFD7B9AC7A7B986AD20AF8CFAE8B0073EECA8FFD4DF7CA825F587ADB1405DF8C0B81A1AEB087FE4413ABE2093C91504F396347EB07E5C8C0D5CEB80555953EA5FAA515DB9BDFD0827DBDE77F71E115804774AC0C2343FEE7A0ED09E36C012505EDE35BF3C343932A0D5678AB9ABD5230EF8789CAEA75D0A05BE838BE2D971C018A25C55F894B55FB3CACDE2C1D1AE964C256B2B0F8F5B9B8C667C62B74C8FD848F1F927AB353A95F94601237AD1C8F45BEDD56F5E7DB838BCADFFC955C48C51E366A311ECD6ACCC910AEAD0BF5024CD21A5305E2D9AF6089554A39B3DAD43B57D172705A1E1CC3A0CF3851FAA6ADF85354777A92798AC7DF7B4DFD978FAC44400D267E0A6CB2638B6CA72CC7F4289DB9F45D3900E3752FAD8A60EE8C3A3F1FAE4990044C9A46093B45D9C525F1C40AE143BDACACDC13F6C8BDCD985450D56778A178FFEB846EF74CB09734FD2D6A3B25A9D40C746DAF9AE8006995312D3993AB6FF21CC15DB9AD44B793DBB87EAB3F6C3A544F865DD0149E014AFC33934B524B05B6015CE201F86E847D9FB5E9DA1314A08396FCBFA8FF35D4E6046DF85F5E9E22B48B8CBB31D1E37818AE07E0C6CC30DE74C3BBE4EED69B128C5D1AF3E91994D6B2E9BE89E023F6833B429ABD8242AA29625728E8454AEC36EA13789FA612224FDC8F212B1C0E7092B5CD41CE93E0201B0B56E1DCA0D0F4C9803F383005AC92BEC1C04814EB8D3B8A24D4C27B895D0466E74F879CE545E0A35E94905ABA4F1F7D59BDF6AB707C79CF37CB4F540E5D3C49033CFB70374FFCC5F5E5FE151CA0CD11FCB0CCE5DD52D79CBC7BD1D2A5E2DD45A012B8CC4111C25B2A7885C75AE2829FC93D4BFAAA51FABED297563D4014C3F97CDA89A75F1D01D72F44C7052A6B5266EACD90B1FD1977426D9D54E3790E77B08E110533529DFB8A491B96C0CCED04F1D680AC5BBDEB3DB63F162C6739762CF582F8820C09C09BABA0478F70FBEC3AC7DB9F85080FAE13FBDE8CED66907D9EA594B5D8FC110929162845068E753DBFA06EC02E9A787DA9751EB68A89357BA22FA6ECFE147529742116F6499914B6F6A61557A078261C09E224282EEC518ABE207D582468A84FF19D81B299278F31C7338BAB5D84D2BE1FE34AB36F6A609A346A39EFEAF5EA1DC5B4D42E93A3BEBF222CF2445CEB3914D7F8C2B3BFF54ECFABED3455C22FD90D8B90B5EF318A2C2536AF6B303E94AD1B6F13E4035967D5C070FA1B1A93CAFE79BDA2039A1BAB8F9D4746E8421A5C12F3699A7DCDA313F0744A7945742AB8AC4F0EAD938F945C767EA59F5F2D20A99A9271AE95949F8D7E901AE6F63B4C42995BE41D434849080CBDAC5E485908C5FEDACBE5912C64B861662FBD00E85719AB0454DE27EE90D9197846646C5F65D2272C80A69114F307B1AA14AF5EBC9F6C99A4D1DDF8C265C514AF10F4B10AFC97AA89544957166D6099289C4258A0B60A5E980A9F38AC939D1711EA7AAA6B12ABB09B2F25B3DC3F54D5F5B0D7E8AC929B3A6C67D41E4EB7EBCE3F5F616C2BFBF88C1E58C7C3D6BF8FAD1B0AC8FECB1AB8AFA1F1C1995F8E44E9B938DA354A680C3BC449647EE9A9725665A391607A605EEF1BB776E2F25E631FB5BC0010C541C283BFFFA947201912026EF402430AA5D0AA1C890E50640D70DAB1E1685919CA3C48FBE44317254BECE6623321851CA8CD452FA258185E8F8A3678027812BB7E769C37F97178A35FCF47F44C3B750E2D0FACB74CB16E0E00CAE2D19B47FE3E62B44D5FF8E7A1783FD196E860DFE9019D303D6A787BC5817181C2F6FFAF1F1A2704272043E334B935C055D325FBB462AAB1590A5F8DFC898DBA3E16D5390FDF63D7088B6D195C13E8BCB399C931C33115A55AB28B0566B7E5B78F72C73BF9BF24A2DCEB17307EAD96FE750806F8A8216C0D3FB82C6D49956635BB27AC025874B9D059EA3334F16876FF20FBC304AB5F1F5CDD3B4F38DD0FC31D10797DB750C17D7949F3D9EC3555F746D4D49D6ED01DA1AD907C68C053C472731E51720C4EA3859C79088BDF320883EF467414D7FE2698A7CC4106E818684C0AFD0F32A56B46792F53D8BD3D77C382181B74DA96CCF8159B32A726C3725D4F08A02732B65F30ABB55DB181227BEDF6AD5FC000606E754C9A26AC764FBB97D2960B65EF471AC900406511E46DEC59906C71FEBFF2B2A02A41B099DBC5F48ECBF01CBEB969AD62AE4514AFB327AE946A78A1DC6AC7DBC916E59E55444A1B64442DA0C0BEB72B6E33E4C40863A2B2CDC20167D7A219DDDFFD1E74EC26D01C9C947B0E6AC852617AC1C6FC86D17D53F35C8CE8F642B04D577269D2DEEB1E25763ED21D3955451389811F87CEBB329831E34D4AFCA7C424FAA88FA1117248C5CE3CEEA8DB9D322912302D64CC210EB99913DE48EB7159EB8D1FAD44F9CB9BCD35469759365955F97A3769FFF58405C9C73215240A055F47199DD7F86DA3809BE6926288D3A45419AC9235F96474FAD7DF4BC90AB60D493E8BA2A125EA7CB41E3CC6A5A06D131319B96E35A02BC1E1A84674306158BCCCF1034A717A69B4F04979DD51B785B177A23CB05AFB3E0A9D9AF830E3AB00B006FD60F5EC504A1954BEAAE445ECDA2072493870F3B6E53307F40DB8A296659F4CA703E3A3287CB9C625B769181EADF088006EF0816D253A870527AC1255D88028B19B502233CCBFA8579175EB5BFA9DE1FBA255E3DA57BAAC92D8198CB6A211B2F6E24FB47388425C0B60BA982C986ECFF3925DF396C1B7799ED3082236C4F93D0177B2B4792B5ED451C8AB7E94CC58F4F5BCB3F9441A8004B5E200096EED96AD7BAF43BED473651260F5320EDC7C9098D6A85717CE3C0B2E3D479A5D365F28C0BED364DBBD60BF898E2158A20A605ABFEA08E3575152AB424E2E8EBE28959498D386DFE53C41D7BC63794D8B5D3993173F504477E985518DB1D30A054E9444E9B2A3C47B15638A8729743BF6C7BEA79B6FAC179CD6B8215EC17EA137F15BE719A0ECEFF5928118BC0C38B7B6075DB1F61E053216D07F55EDBE23FB63FD6A8C5D7713977BFAC9AEDF447918B5EC3B8E4C27C79331C25A3AAD75A91A65FFE2989E1A193D91EC164E4A0E7683CCBE61FF82D1F00E71C0FC04F5EAB800355F700D995F9670F03190321A10C43F32A4FEC3F18A6938CF71BFCD7B80B604CBBACCC4373F2DF3709F5EB95E08C6228A22FE2B25832AA591D4E3F300E7559606AE974CD58E7F6219E0B24743FB84467C423A7CFC90F572E3A4C8C2EFAED4C5869AD2B0FD8E8FE16E7E456B8EA5CEA99D894E487949984B8CAAD8E34CA3861D76BDDCE2E13A5E3D09C43BBC7FF11D867B2EF645D017C96333C38AF7C7405AAC6DCCCD2C800880A3B10746E75C38E83C6C048BE1E9131E5B8245BFCE650067D096A66E2891A8F72F7FA0686049B698C622D07CD8F3528C53190FC0AA912E3BF8FE25E3E7246A0D408380CD584530FD1FE88BA38EA8642ACC325E19636F2059900D071BA8651DCA8E841C8941954D1AEFC479DEB43E7620CF4525897F770692079B95DDDE5F4490C68D902509FE22F90D494DF9398CF0B25E0FC206A93FEDAFE271454D1DD2532D10C8097AB60EA1E03F790380A3D0956F67D19B4732987C5FDA00AA658E5C61CED735966F16AD728A27DE165A6493EB18E62F4557036BCBFBE72201DB04636AAE87756A900ABC8CD57574A95825DD96F94F1E00336AF25DBA79C93EBC7B70BB4E1A0637F891ABF608E72222ACF81841954B233F5515D160B691B9340A75A2CEA3F2237EB991B87B87DF0CE4E0CAF302CCB94BB0E26A9DB81F6949394117429DA2F0D8180F7D7BC49E98BCF726BFB21858CBE9C09EAED90BABF17C888AF26892B46E919674D01812EAD5F5E4202357EB70F20A0199E62C487E6931168D789C55D82953873171FE855A591F051BF227F52B515FEE55FBBD9AB9CDA26C37AC7A7A1752FFE98877568DF75F4E36F44986E14CC4BC703769DF6B5D288F9FBC30BCAC65D2C2DA1600EA2EC107B0CE47630C97BE8D0BFC9D8CE8828105C078670704208C3FFE47795A2F62FC36F8DDE25F2B27FA58DD6A8A23D8DEA45AFA4ECE90BEBA971B0F152043B6AFFE7B6FEFD41067FBE182F73CB63C531801351D2B833D8BE4075D6DC1BDA13D4BBB2D62CC577FE65D25137AD7421B1DA82F878B74F1DFDF43316B9D06235C0929A46888B84C535CBC30A9739220131781DBC31C6039DFA290A5EEEF0D4802668A9E1C95ADC8072AAB05407150F59AD984FA593E50846A4BA8EA3DF1D1BE5FF0A401628458915BE3AEF5476DD02987B9CAF24DAD776A87BD536A5D9662FCFC7B72D4254A4B48907DC57FA2016A1FA163E0B1B7387501AEB1C7760BF9C5BB64F99B313642711C0152E7D79752361A9BC61C3FE39CCCBC229AA13DC16F242F00C0D79A2E135A8A0C759AF8CDECA25B880C7A3B0F35B213DC406AAFBF8A6D85E3AEF045A5EEDC603ADB8E80 -MD = 8C82F583EBD58169EEF96D4818045EBA4DBE6876CC966724A6CBAFC4 -Len = 26240 -Msg = AE82EF09B711951F6082B1BDC5B175C81010E398B8F3B18F5AB99F78CB53A5F953BE09C98BD9723740C7A4E6D26A64AA62C6973F60DA560E14EED63D001F6E281701773C34A41260A2AE675DE543F2BF2FEEA4B17EBD928AAD65A17F7FBC4B7570FEFCA804956D4D9353937C3FAA15516C8FC140EE8F91F2711E3AC0879A1D3CF7AF7963CF82E08EEE05D3D913D2B7E568CAB7655A8BC5436193641D76F7443BEF83D5F468D84C80B8D37250F06B37781EFC0D885BC7358A2B90FDD5CBA3DFDD0C57B8F66750167546494E31BB751A9E08E209952DC1EFAA2B1210E69D974454EF55952E35CA7F40CDE944C665D9585580C70B8FCFF5BBB5635F5D8D549356F48D4B5F173C541CFC00C3F42695541CB778440F64EDEA6D0AC8DFD38023C7A013FDC28AB3C57FAD938937CBCFBCD941D315E751465428B82200B75B3AEC1776C18015AA39E25E162ADB0AE24C19609F365F45BBB8190FABDEBFA042076FCB0F2CBA3BF258F6FEEEBE3823BEBD9DBA95CDE03697D6722A3A64B926311EC03E6B56EA047D2F5C28730CE7B560FDE8EBFB1BA74AA1CD2E57A12847BF510C9B16AEF0C25AE397DD6022CEB1902C8ED2E24054875B5C0C9E6BE87E9F40C99B85F90A4779C109130F0236D1C129DC2962BB57479E65BC99D5DFB6BBC7D96A290ADCF3AE9ECCA75587DCCB2CC318DA3A669DA92CE2AF333897448A669F1A4C128DA3F964A01AD64E132CD940165F5708B1583623D20CC5A3AD9FB860F342A4D47E2CBE1C43577C9B98341E15B285A253C32B3B00C39F3F8F9983FBFD2D4F217C857960A7EE6C962C2CDE2547249FA56F97B6857348D8A449CE8DC83CC99F0BFC29E214E0A3DB6A636BFCDFB15A537979565161ECDFE6A4C29D88F4E465660E4B4A493B3395AC9696E5BF5F4D2FC6587E673F8B65BECE1CA4417382A3FE11215C5EAC591DDA0BE4A9F2FE0B1B18325280241BF7DFC621901A0E9F4CD471401064FAB73373BE0D800FE1CA296B27200DE5158C17E64216F01EB16E58B9C9DD51837101447558DCD07C7B782B6016313CBDFA95C07B9C2DD25DFB3645D8F22C3DEE68B1A43CBA114ED27A6F3E55CDDC7FA856FBD07DDB72F540D46F780EF5EDFA68F9C28FECFCD3E967A030570ABA49C8CB2A178D2557E6B9A3FB387ED2F6EDC7856C2B05168180BD6BD7A88A8BCC8A81C5A0331E095363508CD329EC504EA321A6766C58D658E0FAB942E1DC2A308BA7E122258719877BB8AFE692D1CDF2BCDBB410CBA4E5E5E4B8FC8E1449793FDA1C14AA337A1F88840C3A067582632B652E2AF72EC8874919F4D8AA94DE30EB3F1E44AEFEBC66F58E5EBDC766B7A3A8CD161CEB65B9047E52B931AC59A03B13EA6E3F41E38B40519AF385B57C72DEC99BB7BF37D71F4A409100A3BFE2045B292F92775AEAF7C2394A15135F971784441637D51467BFFE9B4BC853EA4CFF5DC8E251263A76062CAAB0B75824D21C763D33405A95668A53DA22951E9626A091A57F8A5A27DBE0B61C0F1C652DD0F04C12A3E3CF014D95BFD35E56447047ABE79B8FE04CEC137516C3EBA6D02E68290F91A47868AF424E1DBF5584647EDA7FADA8F051BEBADD654B14912404F5AB54CB7927C413EE02714D74E82B1445F92EAF64C28661478B508996EDB82014E014A968242135D40AF966F0CF6987E7616EAE588C298110AE42333B918B2DCCFE4C6A60E97E65B63E419D5F6B640250244268765B5AD9B73A5D016D508331C42F694C970C2BCB745BF037A4D22EB2B4971D96F3689EBF513BCB2A2BE78893E9888B623528676D94EFBC768174145F212C941938096472551178FCCF31250308041FCC72AFDC3B845A45FAD65487A7404C8970BF8A3BA2C8AB5E768BB0CD85B3A6F0F1C9EB66C103062161D6AEDBE76C43F8E39F6BBCA59956A5281B5F154CE2E6649701D03ACAEEC797267AA0623B70C1323D22FE6A01391143901E4F8CB9E8C76F40FBC443427FDF93EE909FBDC26891D445202891389410EB08F52FCC190E04219F2A75FBB50194A5DE57CFC0D00F1A7D03A0048B03C5B12F6F5BEEC8CEFCAA7BD41192865810252FAD91650CBADC85BC79F33A940D45A39E09A2D5EF506EEA567F695560C5189E9A686E3B363B999CBEFCC26070158EFA1A267A9B532D6C86C07CA47454B346CBAA4B4D78EF9F484CD11B2FBC26E352FC18C69203F8E9BCD8D4F1BCD1C3D4F7B12ABDBCC58EB6E61468EB8D0E733D9021B679EB1B5146AA68294DC508EE15BD6715170145A6704D3E3FA306E1F47A6064175DFCFB46856F524FFEC08851D558564BF943D9216D6199E75409516B8555A1429254D3677CEB193F163D01B444F418EC633FF9ED427FE28676B6B650C0B467EF2E7930EC43D3AF92D6C7B602ACD21CE6F22E1E463FCDB22BE9F2234A9331E39B3A5505B11531AC729E6F1A8452C9C225FA040132C62165A26C59E4879D93FBA9C75D3762FD1BB8D3EFF59D628A193C9BEC89810507F45EDB215602FB65385F99343593881AEA6D16B565F41D6CFAA0163F2A2871D21FA3DC94FCFD576F7DF9D37089BB3B4B1A0DB09EF42D91CEF3E35347D7B76F5B057C9CF09C5A418AFE3AF06D27A4D95BB276238CE06980B1FC9215838FB0730C354C4EEBA8491A5B793AD085DC5FC2697A19489132CA6193D96C4E1BB29DA6D719F86D3E8D17973E76B57410B298BB72B709ADDBDEBBA6618ABB26D557C9C883C8F159C91EF620D2FFF202A1805DE6C3EC478729A761E306A6ECC362C1C1F2CA18C7B5B3F9FEC42E41D61AB5963A7A2783AAC5E5159CF559F347C805FB7B45EB82986AAD4AB6FE71A112EA039CBCE663EA37CE6FC8A26277C8908CA6ECD9C40A702214FF22CF2A558E3B9BFDA2DDF6BAB5C7F182B8393AAF6E0AA1110A567FEE52496BD861A92EB175EAD0E728D28B2823BAE9E40636B6797A6CA4571D76858C44774FE14E2B99A315621A830CAFC9B8494D7D973B4FA8CDB8FCCB6E5A0A1F47152032747AFACDA130021B55C6D9161149936F19668D8CF562B8F42ACF4165377477E2447565861DCBFBE5301DA8663C11D86C9116D38D59C4EAC0F63479C90FC8E4F105D718023A1DC064CD1338825EA1241221698150AFA47BD6306595CA5DD37B1B2B0819C9E2A2A8802007886DE7C407C312F4DBD3E2EC5EC78F623F04ED7E4B27290831CA1CC9CB80AEA157EB7362D3079CDFB102342512BFB1AE0B979E4F162410D31E0959E8BEC4DDE2BD9FC27F0B48787CC541C184C5089D39C9166F83079808A99004049FF1C3CC452B12A88475E900AE0566930151A850BF572A8E6F168126252280853B16E3B815A8FE5C8A1359FF78BB0861B24BF8C5592C49B07C73330E342BD201C03629DDE238CC7B85D13CD2131B1E1FCB3957FC51E6CCFC9E4A26AF0C2364CE35D7A47375AE86277546CAF77635947EF7348759512BA6DED26785B1F905B39C9D1DB5BB347F1F9C46C0ADF8F02D3C030D6BBC2C89247E8705C7B1A901EDB762F1ABB4E62E874AD7538A07986803C49171F56DFE055F6323B3EA04166B0961BCB7F47DDDFEC344628B44B92E14CBF242911CCDD5719BCC8E7909782D890265CBB3745051BA36792DA22A556C762ADB228809F85FCBD1E521387906D4BE384F32379AD5674B523D0657EA7EBE7E1577A554864C8725DD8709C9B4A16DCBA3FC7A3B34B2E7C1017E401DE15DF06C0820233760B1DAC69353C25E981D11671B2A2834FA539423C7717173EAA9D83D88885219C7F7F4049B22CB9C3ED5D167CEE141A0D870BBC01766278D413027B4B11D016D53936B77700B243D3CF43182BC22EA0D86AA2F0D682193915A933BF693C44DA024C656940DDDCD469DA474940E509C584309D6795C857ADF9AE69FFAD2FA2A97D367520FB4A62FFA547F4615E343B6626FB263C43A87779ED79FE9C42DFBA6F35952FE3945503C7E99F3C4B1D11A8BD92BA34B61738FE2CAF33345587F60EC2ED6C6B914253E894CCB7F06260261465F12A66BA93645FF0EA96899FFE0DDFADC9603BC66A89E055FDB75809FC6D0B974B0D7BD7E470090CDADBC91069FE2E17DC7FF9158861B81BFAC6AE544A3F0BCED711A3B553DFDAC7A0FD48934B70C31F8644F8595B63AEA8536C346B505583F847796ABF0E89371CFCE938C4D2148B99DDDDE677EA04AE4AA33C58D0B2DBA36A8B7B6D3362C7B2C7A3BE454833E2E19C1C8F828F05D034D7D216641205F916C1A72E512090F924C4574DDB24BA89F760D6F52F40CD511CA2172FC0FEC366390B7A26C1F96B526ACE6494C9D252D68A9DA2A93FC4E4216D70A86E09FA5707562100FC69EFC6631823B0576D5AE8C668EA6AFBD7843A7A1104355CEC3B2032F4693995AE5F018C8A163D593F83C86B3873DF812D877AD92970503CDAB0F4F77F10B1DF1AF102F9201F6D92C512EFF44D1DB32678FF7A583AB6F1ACDF6C77D168E88E635F05297BF0E31E4826A27D8AD97702B9A1FEF9958D34BA04984DE027B22996DA1439DED3F859A3914EA27E4FF3ED4549C4AAB5D805D593C9ACF76648837C4566EEDE6D307CA8B7AAB4DDCC7F93F22715677A23055566A83C12D8330916B49179BE2B2979DBA70643A3307E4E0C6FC596649300557E3B7B587BFC80DCB36C7E8FBA9 -MD = D25B2D474F62F6CA7D0BB208ACFB8BD77A710B2644E03AFF275B1391 -Len = 26303 -Msg = 7B07446DEF536B02FB39FA34FE55CAE1913C83FBEE18E7C01D1BA66150A4377C6B83E6BBCF4560CB06C30A6B7C89D2BC1368D962E8C106F95AFD41C68DED39723E9AA1C8B0AD380C340DC4B04FFF8BC0F39F70EC64CB5525701DF63031C1AD9AEC9A2CBDE278E199F5A9D6A468425AD7AEE8314FE5C938643F10189D87D630195AE3ECB386DD32A21264FCF7F8869776E1AEFC079899AFF9F5BC15EB8384E1193C541D3DC4A5A03CE6C009863FC7F9802424F6A8FD6F2B4A7594F79A352946E49AC1897F21B753B598B92A731FCA3312D751E3495D04939F3EB5869A787D6CD27B64FCE6083F9E8062A50AFE72E2AAD25C5E784F55748439501F0234AF358D45AB21729DDDBBE04F651B56D9D96E69F442B64D5FE8F162947C3D7A1BE783D1632979864C9E7D3D6993D920450457D9FD5CD2C6DA64550BBF4D64CD43BBE4BAE629E4E7B1D4A2A329644D23E5BC8B43C5C4FE1EE29368F721F458FFA1A7F0A48548D8010563991E973B81C1808D64EA2AF64EFD0DF3ED6D317DB5B2EA07695CDB2867F52991B9E440FA8D6721C1949963EF6736F941058D4702A8692FA6E2EA1197D92F5E32031E74071A0A952D280AA477E5830C311E4BCFA31C5422FB0935CE3C17B80115B9B190D842DD2423721C950CF2149C296D466C6E55757B80E5A9A62F878AB0D7A1154C972F2A86935EF62EF5B9CB7C69721775F49BF47769AE9C287369BED101B5A5B4C225293EC614EECB2C00E45A1E3D2E492C420108CC502105A63D25A0B61742365E974864DD1D6E54F9A3E1E263AE0D46266DE26ECFAA54AF0EBE440623963AC538C86F5F23E939C248474FB1DA825D531A6A948F83B0266817D5D119668331C422F77BA291D314A8F77333B192BF508733C0A13793F989A1A9E2356D86FFFB5FC6EDC1975A5C6D0097A87A873A2CA4D365AA6DC4C232AE3E0D3946C542939E328CF193450B48DCDB7B124AA6E294214895EFA0B4709F19CB93CB37436AEC1EDE668337A55FFEEEF2E9BB9AD9E9030B7C37F4FAF0E52849595FB87A16D3509235E8C28AFD567B71B84680E02FFA6D0C6B9D1CF67CCF44CA26974382C3DC619FDF3E836FA3A428F16FBA43719E4397867A95E1634E1FCBEFDEC13812FA230731E1D3FF9CFC7099AD216369B2F45F97DE72C3ED8ADFD3C84C0C80686D9C0020C71005F2B9F0878AC2BC0BFA0B01939D62B3C63E04F4559F62F71D0FFC1F0F9782F096D27DD81E6C33037D6B9A7BBF5421FEDBD7969A50C2B25E643E2C37BAE2651F30FF092CE4182B843EB57BFA75FF55E3E57087C5A902D82373517E3EC5534A85020F2B0EEC3D254E3DE5440EC07722AF3A6283C9C0570DD1AC30E64A5B287A2D9E525BE5B6EADCB8636E374C3953825A11B920179709938F714E423DF7B0FAD9B02AE540D047A65817DB5B57DDF60ACB0B479FEFE5733A570A97956E1054E486A14DA0E01175C82F3B3F0D413B61C649299C50ECE5BC08864EACD1029FE723A79F4FC4C16D808CB77DCDEDEA520155BF404200B495756DCD1FA0AE636C07E91B366EE2B8E01CF97CD0BA3BA934A80966647087C1F16BFB83BB7EFB1AA0071A122A0C7BCA540C3A23496EBA0EE69963DD2D5C3F9D504F257D146EBDD050ACF5453DA9DE6B78448003837251DB8562075B7CF0FEBF082492296FF42168D7F58296EAA826374281FF9195F604FDA1FB6FAB8E39AA4E306731241D6E83C5F40B5B330E8C4DAF6DA618B9BE73F9799C5AB4A25755DF8864CDF743804C85E570EB57FB0CF04DF326D0B6350C1C07F49BC8566A3FD5C6A4DEB5BAE83896FDB1ECD3E620AD06D1140D042B93211E530E528093F8FBFD01E9802EE804C6C97C9E0039B5E707B222B52B660AE46E3927C105FF9FD27658B39477CF6D7B8698FB039F40DA3D4A4F796BE5A68518BEA564BB6F24BB0D59740ECE891613940DBE17E987548212C8E038213CBED484E2F6BF64B24712028A4FF4A06C87CEDF1CE3426F54C2719549A1786FFE195713729B0AE6E44D657061D5CBB8C03E45E6F6C9CB099A0F80878E88D45BD64835C5C28484F83C99208E634124A02409605E7EBB07C8C95462BFA8E90125CE28F08D3C4D7537992218CA8ECEEAA245F9921242DB5EFDB953E2E414A890DD247D9B9326FBD1C71C4698BEB9EA148F4EDDA71B8DADBF2A6653B93C0975A14C95D6703338700F564711BE8493DD6C92C3EB492EC1E6AF821B1CD31A6FFF7442D04E1ED761B7BFA85C5AECC8307E694471E5FC32FEEA59FB4CF01560722A88E66764FAE1A303E24420CD721B64C04D3240B3AD08A34EC0A13A0F1972F50427B3FB59B401A54449077007A356E91EAD172F7ABB16E15266B1A92F881D573DC3A88DDEE16D9DF1E6DF4378592AD448F394032B9CC128D91933BF84CA9CF6E1B544A39BC37A4B45BB425A096CF2DE60AC6B65E0F94C7EA93A43A13C64D329666D958E31A20CFD8353632EAD01181CD87827BFDD45A366935F58C56554C3FA694B22544365294B9BF5202CF7A40574E612B8D11A614DAE0C287CD33D7354A1E9D861034C0A8BFCA4C6431137B9FE7336E648EDDC7FA31CDD3A3EDE133FF7E8088416CE23C1B8CB9FFE555B10A2E2B61AFC3195F5B6C61A3B118593DB4D2B69518FD5A0EED5D30ABE58D9DCC033AE622A16089E7FA957C904E6CC074E9568F080E3F92D22D035A4D05D00CE991925A2B01A8C2D819F7241DD3A8D88A9C776BC33453F45C0AAB7B9856A924AB882CDD8A3C6262AB1001781B26B284142EBE751527BD32F32BB87C0849EABB5AE52ECBE720CE321B5CFB7FC327ECC1421F5368F434ECE0616ABE6B00F8C8DA8BB2D3CAD4A47F89370DC16BBCC4DD1EC2B0BC036DAF7CEB40C57240D20894566EE70B7047C2DE9CAE179DB8DA1D73D85B8F288E1620805D2832E0AB57770504A5D2D76E682B9E7BE4B702664C5713EABADB3D06B7E1C93A2C2698A5681FB994FE15167E4E85B909061FC4D48C75C0EB669C85C3017A5026588C9CB521C63C381FE2084951C9C193C6F5BD9A16407BC49AA7DA70ED3DE9561BDB8B19ADF4536B678D20F7BF8077BA897E9912CCEA8DB5214F9AD87281C35DDAA65EB641D266BDADF86B78EA014B2074248ACAEACAD7728F6E7D318D0D73ED63118CE9ADC52F332401423FA75554ACC06F6C7FB8CADA0532F68F1C25798CAED2F3925CCF235F5FF6294573C62A79B6C14399E167D3D81B3874155AA882D6B991F7ABDBEA352FDF4C2D4F9F72C7127C93BE9BB87BA3FDA36869F2AE313A999739B0B668A8B8ED85719ACA0928BA9F8B75230544415BB949C8910ADCA7B1E06B05CAB0402BC6C1804F4E74EF6B4B437AD5A1D7802F4FBA246E61A83DBC08731E781E7F6F372A184522D31FDEAA66A0AC8470E8921DFDFC892169644DB445755021D6DB7A430353971A9715A3971518660ED853D7531232ACBEBB5EC563B20D6739E0F9EF19A88C599E093651A569A72E106EFB822045661C9BB481C29FB5691F39F8492E74BA34B86BB80B5F59B033C77C102AA43C0C78DE713C4B6D2A3E8D75C65F07729284CD1E1897E3ED1A984DBF673A072EA595432F3767F7029DD408C77EA0FBC7FF1D22FCF6F492A398F5748E3B43CCE3753F130754B213AD415C8964E629245E8691C8A0EB0F45F32315EF5EE4C9465FE4CB5BD55C06B91FA4584192F203EC2363DA2D7B207473E286416980B8BD71ABD9661BEFBB335B51F88CD1CB732841524272EB56AEC7772E39F940ED934F5DABFDE3EEAF5140F62F4BD19D356B91FB72053D7786F3C0F48444E7FD0E140A1F998801F698AA8C92C2399D06A78C60037832153F19678102DC35468CAB83BE234CBFE929B0B9A1EBFD7684592577F000474248F5804E203F5179B90DEA188986092B3C2F5F6D9AC433CA285C154ED83E4E3FD78664C4961F1699756AB9F6E24BEFBB951D8E73126DB63443576B7EBFDACF1DAA3416A016F9E8AA6504CC8C1ACE55E451EB958705FDBB2668099F76CFD6A43DD650714AF80CCF5A4DF9F7622B9105E5F8A7507EE878DCDB3571DC6DBD79C2316A18AF4CE2B4D76A9B06A2994152090AFCB83FB5C33652D1DFFA03D2679A60F67CC23DDCD3B13A940006509C3438DB79A0C46D85A4023BF09A9076F9A08F859332B1EA900715492EF1EAEAD7B03FD56A8BF86286853DA26E57BDC5D382CD62378BB098B2399FE187F2745B23A07997A58BD1C8252D0434543AE013FAE3FC45BB49D336538DCEC2B88A3306F095BC44B8CE111E1330177EEF921B7BB3473F59929E2148FED38276AA27BEE5ECB3D9402973F9ECC565D17AD325B49BE3D5AEF9243EC1353561D04ED603C599C97B98615ECD88114C36A95559B2D859B1947E654E63CE303918B058BD0571237BAC421316EA53A509280D822F1DE395B72F8C4772B70EEEFF1D6E31B9439611B05D349934DD514472202764CF9B95EE86838EEF3926A9F8154361F1BCC5F2B9086233734E8772479E850F93E2A7924F3674156E0EA64F0C791188EC3EC2800662864BEFF9685AD9C3185E99FC6F74486BBF68C6683AF667647FF6615D4474618850321CF60C6496BB42A73B6A95AA58ED1D30C75AEC06C7ADFAEEBF3ECC5F2B0E0335B5243735CB148380FBB06FA7E44E5AAD1CC158088EC7EA9AA -MD = 578245F6D98DB643BD6E7C73ECA2936B3639A71BC9C24A55AEB3BAA0 -Len = 26366 -Msg = 6FB893F986D3D3559E1977007B3881D095A23F04D133C73604EBCA61506DAF2C3F1EFE91A1F1793C9AED32AED0E5A71557779B95D41D7060CB8A5A04C6F7A9858568CE9D979D20C92DD85E38C4C930BA9A78717D7CB84716F66ADA726B0D426BAD91D197517E55F70D1AD0A4518673FAFD11FDEC3DC2A1C602CA4B7182B765E098F6AE4BDC9D84A4FD9124A80DA8AAEAFEBC2059CC198A519353A39234BF3F3049C85966B64CF0DA8FC3F570EAC92B2EC082E97C7479992B5480D488B06EA03173C30F01245653E90DC2188E84FB2EBA575BB09D1478501ECA064098F40B88C1E270C4B42AD4CD73B774A4DB69376C2B3D3D3B506C0AABC5FAFE47B68F321CA87C96E0A07475B7514AA201109241D8639CBD062781B69D86B740A3A790AD69137B43143D2F6F323A97CAF0F7F2F0579EB3BB96B254B96847D19AAB64CDC9AFB535804F3494D30DDE6087ACE8FACDDA77875B1AA609DB1BE0C2B500BC8EA0DCFB55E7054DF4A54CD9140262D7666FE0B5FA5ACD62C5C2C0005D42DE0FC117AC02AC8B85D04CA440AA60AC70F43D381EB5AF70C7598BE40D313578EE952174AC0543D599F3ED51BEBF25BD4CD3B3EF1110634CD604B9283C5EA9DA448B386A0FE54EB2581804BCBA2AA63FF7EFA25B535BE968E7DB129A896B44F0AB7DF5D422FC33356BD09040938693E28EC7953224A76D8B5194979B769C74BB0F98C8A79D8D2F35851E379BE5A7429DC0101411BCB95697B088D25D84DEB096E5C0210B47759162FE3EB35C0D3C042D679DA8DDEC77B4D69823DE23546524DAE9C38AE873D901B2658FC9F66CE4C8584322B21DD9CB5415DA52768BDABB01B33654843C36FB3CB8C48E5B23700272E30FCBEC7D477928A31FDD40AA3A62F26E491B43844F5292F8D8BCE62320B94412F67E257C93196CB2A005674440C20E0AABCF8C2367D5EDB7428F99CF69486F88C83168B238C5C859C3DAC68E0768BB9EBF5D483B57FCBEDC69719E8BECDCECEEDCDCFC4CA29937D2F7501FB69E1E9C15F953B94473EE5E75171B012C58C2E9F82C4B4D522A61DEC79FEE92695E75738618FBE07A7FB9ED130FAB7B08479ADC63A9609C07543D3A6BE52E3C33D589E5E9BB588A2B5E40C16623F365A78619E62EFE29A1FA97378CA8DC7195FCA82C8DFDC9CF21B8CEB3DDCEAFD96B54C9D342995DD2D92D99F70BA5CA4300232EDEE6541A809F610A44B761778957723328DD3ECD27B7DE57D034F9C4DF45CAF6C32B833CDDC759A697A1653843F2EC2D73F90220E54A67F5F51A43AF1BECB31CC277C6A8386CBFCA99A2537F2A6414F9C30E52C165CAC46FF9E5703C191BD84DB6A105458E9EC7CC41DD9CA55105968CC6C86F35C13D7B792A43894A23ED8E65AFFF9DF08EB93A46D9EED2248B9210A47C3AEBE07C4EF0A1685CAA070D8A93DCA044FA3C920594CB511CDB98D56D80826FB910FC5FBEA94BF9F7DCAD4212CE09264138619997770FF7D2FFB3F7474AFEF52611509CE2EC33758876A6006EE2120698F023662EA65EC5868E5431515D86C9848BD86A287033D2BBA74833AD9A63B6E276DB2051E91655BACBDB33DAF8820F59A0947A0CAB74A1E335F6025B274DCF32A7B64930929235889B4175E88B51233526DD715ED90514F614DCEC3B9A3F9ECA0A9F5E374FA4A33D202A71FAEA8582CD060B365F073EC2E2B46784C92B93D4E10F47E97B8F27F1305BA993AD17552B49DEB31DDED048EFEF2678F143D0D8CE8CA850558EF4F8C780770C4972C82F649ABBC201FAA3E9649E1688B3DB7C2388D94306B41F561F96B40D78A6FF5ACB93C84DAFC9E9EA310885ECB667D1A47829F1ADDA28A3194C4B315EE51CF95F11323AD08EE875249952343B0A1090B15A1C7317A881777EA550328E2CF1AF12C9D45DF31780043C3E7DB16A3B7FC23B40AD1D25D915F6347BA2C369B359B955C52FCFF73CF4AC348BEF9379F37051ABD344EDFF4B52DEEE2A77342270F9AB64D40201576F141F867338034AF3F2A6B23D0C22F8C7FBC9155DE48703B83ACFC69E32374AD6C379C192787825528C532F17092CD77D57586931E4406BAD422CCC05C566C7FEBBDD4EE7BA09FD7A3400586081D6D1FBDD216EC9C4783077A7B21621CBE70A53101ABA7D5FBCDDC9D62D79F87445F3B6029B3E735DE4E2598BAAE5AFCB3EA5AD63FFD0770227014CEB601D4B76D589180F25E5D99DBD7F4916910D3B103824A1CB54DA1BE04E2E3E70317EFDF7ECFC2AAD54FD531B65C3196A581E758E32DAA5E53E522E7AD89A22D509867C3B023B5FFCA7ADF8CFFE1B5BB130BA402EB3D2D4B6183710A25FD5918E83723BF7EDA96E9F61111A1653B3C40ADB8B527E1255579A4A4B9982FB123F4F12E7AACC14F6CF3F35AFD5EDA19D5F6E9AB2B724EE27041F8B649073099F6BB596E95FF14BB46AD0FEFE5793087AAC79037C35F01F8F24A072E7AC0D30B02EC4B3804E2E1821F374B11BEC4F55F0ACF0B3AABBA634C64F6F8702683D990BB9AFEF7966C3F5663989A05C70988C726D55DB3F343734709A4F1A6CFA2FC6FCE74B976E475F0DF1EB3CECC6A876B09B63F199E648AC88F0B9954AC5BDB083203380AAE415E9C8FFC409AB62A40394CC767A2000A5D87CEB7FC8BAA8F756BDC70B0205D0064E28327E68D58B97555035F7CA62CFACFF0B6171E6739BEED63F14816AB7332E5A7A49BD016961086687297C5A0D20BA57F032C8E1FE8D047D08E6D1C289952857D98D8A8616C5739C4CC9BCBD1E73C4CF7438AFE68F0E7DA7F74DAA37C2ABC76F36781D4EC3FC716DEDD7EC75E540135DED5258B50B71AD2C873ADC2742B8C0FF61017428E453A6ACFD659F33E0C73BB4080C26C777314AC8AFC04D82451803F10D011ADB05B4F1469E225E32AFE8AD3891ACE7AC818CA41F94EEDFCD5838D39C38E5326B9F3DFF720F06791DF29CEE47B1013C3FB6833B672FC91B69CA0B893B5025E36D375BFC828CDEAFFBEAF093C5BCE166E1B333F630BF496720B594E7F6F9D32EC45B42CE9D69785C2794823DF84FB168625DA2FDBAFA6162E7230DF5C0BC1EC1C6D774D809D310A5820C74DE837FD220A21E2F8A1CFB2585A50D7E664F4DB99E914B6469C41F854916088AA6C204612C5944AAF719995862A4C138FA0C417D30A749569A3E1A10C687EEBA386BC01F253ACC83C4CE23B57075AFF774A0778E4C468D6869BD352AF66DEF3D0910519C52FE30229A56C135B9767137886F74E57FD68C3E8DF5A993B6679E56A3A053566A3ADCE68F37C8B6B0571B383514B5CBBD6B9CCBEC3758E6528995A969C68490DFDC1EBFE0FB3A54F47A42C8BE2B7598526EC7F2BFC15CC0D78D4ECEAD61DA57EE24D8AEBD364C8CD3E671891FC8CCDF6A037A1959045E8A7DEBCA1BC0D1F0CAC6C8FCCC8CD83727B77031DD4889316078315A9C6654DE50C6D332A633465AB974823D32E3E9AA2EFBB430F0C9EC5220970EBE9D9717AC48ECD5FF2DCEA0987F690E996CE0539201E5F7EE64374262D405C1ED5809086FE95A6EBDAAE80DFBA93DC0788BEE8B4707CF90555BD9D4FC634E27124C8EFB8E0A423522651B9D66E1A13B5AF6B3A3857B987290FE424CA080786B678565E3FF3A7C4C126C4A3711BE286B041FA21BB105D56AC8CF517E63D74BBE06E5C634EA6DA1521DC2380BC26FD823D88C1CB1D97C4603967C137486C57AE8A649EC922729EBDED7FCEB6DA9A0CEB28787936AFE3AACB977054DC9586D36CA7739773B9A0180948386D5CFCF53FDD8758C1DC1982457EFDAF582B8E09C6F2C1A3E894715DD721724B98BE6098669F022DA743C0381D9EC2B15BF316EC5CE28D5EBE5272DCDEA34A2B205543356EED116C5584E38CA536D300D517867CCDD936A969089848F6FFFE94225D005DF7CFE7589585E36AF5E47AF5EDDE74EED51F7506264D028860EE0455275828581F4814F4B6E9E18A150CFFA6C73AD0D1C87F8DBC0E49536C222FCBABC902C07368FF54A0CA3A6ACD9CC91F87D6D717B60C9B5BDC18D655A74CFE1E876D2A4F33BD72E58F1B3E1793A3B26CDA02C59E1AE2EF0199DB90566E2E9291721599E53B7BDBC1BB72A80C6980584D43EA5B78FD999C82AF69F016B40E2E63CDA91FBF53B389F7300B2B4E35033DAE191FACFE3BBC4EF4685C4A561957E3BA8EFC0D588CF3202D475969D35FE7C343AEEA82905B7DF002514CF33D91F4493918375977A461C0CAF92DBEBD707D8AF02B830944E0C24E8A10A3CE577B8031229D4AB261F24DFC696567B97954696B64D9888A62CC3BA7D9C72FF5F98D518508EE6EB89F28E3E302DC4DE31EF24E0A1F55BC414CDD46C94BCC6C11BDED42CA1E40C8D2702DA4861E4753592E4286D83245F8DB6BFDBDB2531D51120348849AC344FB20FCF2BD3C4CF5B80EC614AD87B17808110B538A9E90784193282FEBB3A74FF9C350EEA18149F39FF4A2F99A79C7C660C3B531FC74D4A3D38C653526565EDDDEFC383221F5498CECAFF84EDC3B2570994974BC4BC63943A6A8CC10F2525ECE46FFEA65A5D7E74B7B028BA54A3C1A4CF05477A3E2B3ECB02737F35AB0BC75EAB8AE33E01FF8816DBF8548E2EF48647939386E253259FB5D3212E97C341537CF70E236A74851F47F82EC4EFEECFCD708D6B5D32743861AE993774 -MD = 04ED9946BF1941A7997F9C32EA48B268C1F7A4FF901AC8877613A58B -Len = 26429 -Msg = D1C757C3CD667E7503E21BA66039AEAF5D3CB3FF0ECBA7D5BD5F6E0F42358DE95247B1D186798825831F7FAEF65EE144230F4C86814AA52907DA4C7A48EA2C6D5E09BB92256EA3646ABC87999CACF8360808C71C53BE9A8E7A34A314C56F0115F500518FC5DB06687FC75B2C1951584CA39302D1F2F077D7ED8E188B15BEE4BAF425EA58C01B8CE774E071114B224ACEA29BB99B41C615C2B013BB86F6E257E20304E9F5CE265F447BED8198ACF2047053864F074BE7647E134BBD504898786885B53CC9DE0930D97007FF1C985429106175919BBEAC2C3E755A9A6B3DBF11DD24E42036EFB53959DE73942CDF641CB7A4ADAB4DD1A846FCA147043B27B1F7A698965B137AD9BB0F0E34DC4A93FE15A7D5A14C3FD10EEE07476C711467A12AB6FEDAC4291076E0CDCE0255658866A0EF5C903C5D27BCE013C363C49B3FA6F17639700D7D1AD20322D44E44C3521B98B06A2876EFFD6D999014848C735DA4BD6337771FB5811964FF16A66CA12902EED8A0367EE050008FFBBA8E5AFBFA60743C3F638DC8891BC574D535C8D701A9103394FE27898F38E8DED2C2F4F010DAE4889BEBCA2F6E7753ACAF72EACBF7E9BBB3D8DBEBC1E7FEDFECE2E8183B1CBF1AA3177F065B3342531D328C9CF4AC6B4B1726698443FA723B3B1EE9933AA5792D59A901297CBA43724FC4A37A53250ECD9052983804F113AFC9EBFF324812405C85D38DEB86458E97FE5B6DFC0982EBECD47F1BA9421DD1B756529044F69AF5B3B67D8A67763D42FC86E41AC3527706E87809B532FDDE2C6AAB775AFD682206610475AA9E4750E9D16BE8781A6ACC9C13F8FA39EF983257BC7043C33A00AA13B1426A1705CEBE891F73C13AEFE1BE8844CF1B129D97655FFEA76F62C0A547912ECE02315263431ADC8F5FB929AC74F8F40203330D79EC71BFA77014E90E64C8D4F64967E015AE52B2B943170E5908BA25BDAFCB55CF4450B5B0230D1829BF2ED94CC3625ADD90511BA5327CA8FA8924AA5BE9707C94BE48FB926F47B73B1A82050A40168BA34810A488D4F673C62874BA6D46AAAA86C92BAEEE332F10F3968283AD1A6EC56060D20D38B3E2D812B89B1A4DD7FF58EBF6F3454533952CAF0F845034D8992030B9B8C885C5A785A0CBC8BDBDD40B27805D8EB17C47DD0BAF4B854310966EB1039D755464CC9752A9F0DC0684883372CB65CB6EF9C08A53379F8134E48459FA6281D1FFE3027D4D41F84870143580FDFA6E55C2B1706BFC855BA68180DDEE72DE39367D5DDA8FB4E1B285D61FAA354458769A474DFB9C25127603EE29120FBDA5E72CFBD46B15CF532D4EC222F4E06BBC17A819498A6AA5D9D7C4243D94538CEAE254B0F10B3D0EFA70C427DF3A37647894E37317B0AA825CB55FD83F1F8A0B2AF14097973F5B26F13230D42F2D3E2BA9AD92F082FDF6E1515BDB691097DC7503D8E68DC7AFAAB47C1D002AF92B696FC254F80CDF179121AD245E1744A4046B58BE0D9BE6910A1C6378C001E98228CB73E774FC9947D1D8D7A460E1FA45AB04ABD70CA95E628D6F58C537E30A38E4BC5E0F5198458967F16F658112F5E84836AC061C69FE5F09089644DE9AF8D22A49F6164AB6F1A299727C31D27AA85671D5CEF6A1469A308EF4A5C1C5D4CFC0A193AF554D2DB1EE8BA495CB0457E9D07FA9994233D99C1645626A7C7D19900D751CD09A3CB075DE3B7673CE335C59E16CD998968C7C7C45AFF1F74019D1D4C53F4E13B5315D0D99D5AE2A0FE3EE6255C9D6889189FC0A15C7A508C9F7E8AA8152605C32828E6E54876AD3970E4A0FB1E8BB637881205CA656C15891BDDC7C8480DE39B47B75400DEA161575E472D895346607C2C0B7338A69C249DB227789B8DA4193F7463E28B5072110BAA90171757144E317F81933EC1AC26302A807C2CE3B09252B2567B120446540E09F79FCCA0675D804CB57E15DC18C120C642320EC7419618C08639F4E18816C555015EBBC10F57874309921858FDD83E9B629BD0EF0DF0400C4917A70C6BA63ADA193FE28B10FBDA936EAFC0CCB38C43347543688156076366AF2DA2938E9276A44257E052FDA6A7CCA2614967916EB09F4FE2C3105C9911B65A81BA41F6E3BDE708F65F9687B04880F4E008C0C13E3BA449202E2FF9F81A6AA85DD2D184F037141AAA13F2C86649A1463637CEDD598A008F5485543FCF68B2583E27ADD0D10AEF197C1D76D32486809106F43021407E74F3042AC1D13F945EFBB92F5A0BA00E6A657DB2ED038A81862D885AD37195B880D6CFA9CC19BFE87121C8505F29C6495B9842B05B1391D818778B76EF88BC797171FDDBF364F027E9791A11B207777A94BFDB503AFB92783A521EEA4F59F49AEB9D2574B75669EA31FF6A28FD217B5521D936FDBD94F907098355DCA54748310AE747C7D45D8F42E9A44B1C26B145ED78E2CBD3F167BD7B55FA87CE78BB8F850DAB00EB76F6C4C98CA0969ADB83DDF5F1CDB8A0243A0BB15428F0D862C08A95AAE49A327F15C62481224573BFC4727BA6E92452149AB7699FC2029F0730436370FBDBFC9912BA05881BC6211F9216ED0317AF1EF6AD5A764659259515F990933AF83077903C3CF39C6D6A168C46B20CA9158FA67074640E1ACF79A1356CBB51BAA74C79706F54BC9BC1FEFFDFDCA3FFEB5E4F9B316C55650341BD83903D35A152C9D9DBE8A1A3570A4F346325F98B22C69B7A88CB549A3DAECC4546486B1D8FDFDF091C6C47E1791C2E38B4FB619B329DF9FB56193067A1B352CC4F730E10C960BBC45B606D0C45E571C29EA1C8B89F59F3E9C215C38FACB5509406D89533FA412F87DD258D92A4CA413BEE7065A4F2687393E9130CE7D367924E59E9FB7EA55F1954EE6AD959E021D86A78C0BECE2109E3097FE940B4E757427BD21D6ECAC0B468A31D8AE109C71DBBF8881A8DC9914912AE7BCB6165CAF1093BC3706A6825FDDBD353B195122C28F7D8C73E25B16EA853EE25D0E01089447935F0EA735EF1AF420B4DEF0EEB7798A7A7589B192CD7467B6CAF47794D8B5C261694B742BCC3609C121B3309B11F2C2D3AF70F204C25A1094C3717437600C450207EDB96284260AA7EA8F0385073AF4CA3D4773666E7D779CAC22F5101816F2D825250603E967BCDECEADDEC04C1D7DAEFD11D2A32A5B1D21D31DEA1FEA01328C3B51174B839BA92E3F632B933E8F4CB335A7E1485AC14109C92A2CF44AD211ACF30A9F703CD0459C66BC9A78A101D35C1CF6F1F8CDE0E82F821ABDA9C1B05D8F607F9F5C00D1906C868028148ACD20D04A7CBB2EB48642A84AEDC06DC764F0B64CC14ABC96BCEFC04C1777F18A71538E23ED9F36A5276A28451525EAB9D155C3DF2E09ED64B97F640C89D97D220C85728AE4097F5E20A69D746CFC7F695213646CAF4B0B52FEE2757F796D53DEF0F7ABCD4058623327C4B182F96CEC243816B08295269BC14CF798B7E4D975981921986D5218A1BCD3B2AED5C67A734DDFFF112DA76DFD30A2B606DFCE0D4957BC86C5FDFE5873C5DF3E37A4243448B1C368F8FD9F7C8D6837ABB1EF92369E2A8FFDAD3B007EB98D7D314299DF6E02DA5582BDA7897710DD9030D67C429E27A8816ACEA335C985D7F1FD242BA5D60D2AB28D050EC0E60D97BF8ACE749F1BF70AF85E0C9DD1C140736F1E0F997521B8576E25DD5C061B1603524EAF11E6F9D9472ABACACBCC9E57C25FF9F4612D62A7BDB3CADE450CD87F7C6BD2989BDF6B35F941AA98D387D2736B4C5C64ACACEA0E594753A8DC23DF1AF5CA7DE77C23781C59D6E3601A1802DE74C4BC7C29E0E2E1CAC46CB4B35E50B22A44DB2CFD689DF83B51F9873B1778C758547429AD8FD983582D3F03990D7B7C00733C513526E3CFBF22467C103E560E40A622777168FB4E253EC9744BD8882DD9ABB4191869227750DD0CD8606C3FEFDF12D48CB54002B67716598DA2ECEA5B7955D5CFB3A5863551159A6F458DE7035F3812FFBEB419E2260C66CB4F7C3CDC8FEEC4B53700B418C3D1B8715700C24E9D2FB5FB01E5F14EF79ABCFB928D4E015B22C23D309C643FACD85E2D8793BD8FC6913C4765302C46A0AAAA8D37CCB3652FCADDFA03863FF78C4FEAA5C0118EEA7CB4349A13B9886EBB5ACB972FFE8AA544B0D29E4055869AC49901717211E84850C42C44695BF8865FA341E0CD64FCD23020E4A4352B23A68479EEDA6849CDED419802D78940C8278ADDDBD27EE7817CDDFC8048CFA85C1014CD6768DC7A64A8AE870E457D93C27BF1C7CCA1659A26938CD160A6476B05350A24E38DDF779E5E674CA03C01FDDF78EDB6927C01943E92A9FEF777D65BF9620B36E55285651692A62D5156D154111724E0F6B1FAEA165BFFC0AEE24D65EE5738664D5A2564B64A7F1FC07C01DD6E3048B56D4605A4EB26D9C81B6AC74A1E77B95B842827179BC44EC47DA747934C0E4325D646D8B5669FB7AF407BDA4F9AD6DE21F8007EC4496E2145CD58229435B2E3DEC8274701B5AF629E51BF8C409BF78B76C1874509570893958EE3A0DE57D0BA0982CECB3428326BF775BF8066EFEAEF9A962AF1CAF8FDBF3BA59B27A698C5DED2E3A4553B5DC0F907EBF807DB753749A8C5D4CE24898C3F8994DFE2430A6B5ACBB5DAA939C452A4C1865054EAAFC53A4A276B8B23E480D3CFD9EAE7FA388AE469BDD490 -MD = 93A14F7739A9495DBB6AC1FFC5E20226BAC68E8D0CDBE36C519A55CE -Len = 26492 -Msg = 62E41381E2DF69F004A204020C522B88B40AAFB9CFFD05638ACC8C37CFC90A62D19C4698455FFF852DC3A4E9B40CF32E302A687BF9F130B37E600A70E48032FF7204F0DE0497105C2456835667D4DA4E06A517A39C4EDD3F4837E3FD05F423600940A4D5266EC9AAECA9336C38C9F0BAA2A2ED5141D01763CC5FA58255B84DECAF10F6729B6640B356C3A2CDF6A1B4E8422A8F9F76EC1A8B3A722CE5959483D947699EAF4D6D850CB6C27C165082563B5847F697E1C9E6466F3D4366B19E4BBD1A59FCF53767D487435A2001F5633C4B7A36B38931C3D3C6EBCC00C32B240A86CC343D8E2A88C19E2FA58F5AC46B802300FB57469D1A6CF60B2344229CE8E87CFFF4507CE557FF96C325A186080990DF593EF4546A9CD79F51553A8C61E49ACD9A1797D6A45FAA4E8D268B198440DC0EB794989A442CE932384BA780E60068AECD024BEC9D8FC17552F917DC82E87F2700F7D59C254DAE700F064CC592C1C6E92C79F9BE4A4A5C4030820CEB6AA2390C7CA3166BC866413807DCCEB4BF7AA0F8F93F310A08ACDFA8AC202208929BC63C4C0DDD490A45685DDACCF9B2946FA8DC3B6383606326495A1C58D1B865A3F14C3A341D6B2F123F85EF7D87B728707A2B69BF6F0CBFE53BF091FAEFDA86B858ACA7EA1B4CC2470022E3260CFFACD6E3884D6291491B39AAD52AF12821113AAEFF4A2022793924D3347B1C4E55B598F3979768DA8FC4E72F775514196B539C52BAE1C80B068C676F1131FDEDBA6FF9D0CEE2E21B2C8D5425CD3396EFB2E8B07C77FF199D906A70281C5B09CB624714D08A589167F38180554794D40F17A47A3CA75B5E0D9697D0593AA2D580F63CD1DE79E0C93C89B65B3EC115633A76D500F6E383612E6735ACDBEFED0535060B1D1A7F2FA58AF8617F0380FDC0180964A3F6C4A5691C548169DD2D34F55631D05E8F41093788DC59A2F3A1010BDA8456B0A67C58B92BECF6FEAB54B9BA0DED004F16BBBD8B2738028C60B5D182C354358B70149EBE634ECFA53D1D683DCEF663201A20CD693AC6B5179FF4B88CAE36356631DD360917820031D9EAB4340BFA3EDF8657A6088941058328F1576171FA1C2BC9CEC5E8680E3C004689B0FA1A3341A5B718BA29DD8EFD1F839274FAACAECD2EA47827BE4F1103E34B60D5E13F93E0E3315F47F3431C64BE265100F18D69A5FAB9D4BE0A7D1A80D45239547893FA434CE5A2F2C73393D85843BBF02E7150019178CFBE403069A7AE2B1F988E0A7F860F136648CA9DB4970D26C342C9B09FA0C10D8782F6943FB104B1E36F70C4D1094CE374DDFF0AFF8A864F9F41057F54C20C6716F764D0B25631896E955E3878B8F57D410C62E6D53F2034B51208CC752BD9372945C26E7DDD4DE1304DD610C36CA29427BCD63C0D2434416E625306F0E648E3E69E39747B868E6B539EC195A72E1A0A7BCF91604F6BC515EB82F71B8F653363C736AC8E295CF9E00AABA11ACB6151267AC1D9F89139C94976292EC52A55255011F295C5B2F8F7792E9FAA6A475BEA9AF230B2FBD951D09FF3FFDAABE92C5AB5D187F08D64DEEAB9891DCAF66D7A9C85000F66A8624FB0D9ACE06282D439BF30175371C8E2E2E573054D6EE015F4CEA98E614C84156EAB0BFCB39DED22665D4067AE4B12ED4EBDEE3F2BADDEF36822F0F108BE0E35E98C83EBA34A38549B743332A640034BF238322135D441DC85EA9DE73AAEC7AA45B138BC76879432C211CD92D9B25460CDA6D3A88055464CE09267A6BF48F0C1750E31C253B11345D7B4113A680BC6672FCC9C70DCC9E3137371871361A5F6491A312B2F7E34211F3A98F222F810C1153BBF089C92418072E2EDC2534A0D5E8CD20A3927390FCE4FA35F25260683BFD23857F7202D50C9089E725C11F824E1A791274A336EA5634F4A8E24E6D8BB1AD8B32FA8A87F083C6DED431419D711F4D42A622EA5B436CE089812621A177DF0DD9B95631AF2DF588555CF61C6D09561BC12B7CFBD31ABAF85BE03562E9789E6469A91D45698E3A7599BF3E680A235086997CC8CCC736FF15FCE2ACCC6B921D14FC1DCAF6A2AC53B397E9E40C2161790D33B983E66C87EB59605A320FCC4605EB5B7B70F685941A2B608FDF4306C6DF7F53DCCBE5FFC257BA7FDAAE8593EB49075305E386634B95F708434F67354359F8AF73B46A71822EAFA4DA620DC41480CCC31DF24CBF8BD7A4A84D1BC0C4568621E34179892D1D9E33E9599A23EB94FC0E71E478EED3C5A34F7A5C4E5CE7383CA98A6D767E8C69C7A08CE4259B2D1B8EE25B7F8EE5BD63FDD58B596FEC3B398D0ADC26B9370CB8E2707AE6C259DFD73461AC9B8F0DBDB51576E5E2D180E24E1B75D64F79CD7E04222D295FE80941206340B8E3536621C69315668699AE2608E5913E4998CFE3E5C3CC38DDCB18BF4B47A6C9D8198DE371223E3AE852EE1FD3F4BBC7CD0302EE3E82E38DA81414D12B23245796F7A93FA81B4A3324B61FA0C4F871700F83F2247871C1548D5D12BB99835A7BBB02CE9C0613AC49801F4F44C3AADC1EF8816F19CDABDF64EC91F157C85EBEA9B0A580427707BD202CE9058C329F3D7F78D046CDA51380C1F9995F8F6F701882A88219A373E785C02673491966EE7DDCFF40275D66D3D962778DC6D728AB6F5F9C941B1CF9D8CCB7D943B0148F5B94B981990B1C9C7817A75BF36B50111A15E8243AF3632A33896041EBE36DD7F8B3576976409CF735158D065D556C5F42ED6E6C0583B52D7DBF47ED44068EC2D62B3323EF0FBF0D3D49B1A72D8F22625CE4344876520C4B8A5533EC81DA2BA3106607E72AA709C2B0303CDC78118BF54CE27DF70BE1C68EF84CD069D3F50FD467AB97368990FCA9CD6EFAAD493F5C7CF4AF8002682D8FA9A78CE2EF247C06594E7B376E81D5443E772BEA56EB3157873E6F58A8F930230C64BACCB138D8051876EA843767E43DCB95A12618E575DC8AF53A4F6DEA61566D990512A06B5A305DB6D53C58BB96B4B9FDBF00F9867FC82FFFE82FC016F17CB37F85222BBAE9D9387275DB7A91DB7B6FB4B1980FFB488053B1CA38070D3CD5E40964121E1620ACF7C18FDB041FFEAC7A269710979C884D3F2113F087BD10442365AF01EF27829339B097CAD7D7008B2F6A82366CE8714799B215BC26DB7523E0941C96CE5309E2A35027132DFD627BB258BD05FFD9EF582A134F25DCFFD6661504691BE4A2E6D54A65130203BEC990B2AA97975C569A9ACC7EA7FEBB933B7D9607AFA4C8B4772CEB3C26B6333005B49EFD1C2F01D5424E336F9478D383837243B29D3D42F3ACCEB11142F890F7EADE268F50F79B96252DC621613E6160D46B724C8BC01C6B261383829CFD87E52FF1F708E3B288B23F00B663F78DAFD11B492F76F6FA620400CE512690C6987AE11D74C6100E3A0429835BA695D98C09BB5262184AB1D86D32BC6D982D2FE3AFB5881CDAEF76300201E5AF7555C15768DACB837540480468DE51FE21EFA2EE85E767D7B80966D8F1824B6C22D3EFBBE725C43247BA155F3C32BD66F9D442C9630D64F38D4AF69940186A03CD4243B1B9DB89E741957A69F1CA3D6D0D482779C7D5EC8C9340827A9938154E975FC895292F31410451581E99366371F568B84640658791D95320FDF9EA093DDF15266FB3EF78709F9828AD24EBA2B38A9107375B0A86DD7C268DE245E2E573D600E17F1348188CC1E81861452280129489A73C346D3FB8BF7E296E892FE81006F4F8CAB7A297B824139EA413363559CE84B0162E00DFED42912A59FB60B053119BF84B0D755FE777C903CC0AB8B1012DE9F5F0FEF553A3C13EC8336F9300D216B7766CAEC28D6E5623BC0F02E8723FBB181B70F25726E98B6BB5AE61F52E3871D220BE39BCFBEFC3D517BC0933BFB583F8F2D5F53A5A3B6E953DC3D0AC6B63DF319EC428AC987F8BD7667AC059765904BE00E7C9D19BCF9AB8F1D1568DC1442CCE7C5CFBA7D464F4B493E6523D33CBAF70E72B4A061EF03E406AFA38F941E8DA23831626552D5E111E90C82A983BC815FC4292D07C37FE5B7C48A6CFF78FB8E4365C6AAC6401C4744C804A45B947864635E43BEA53E61B4910B902BD919C98F333AA98C6475D46CDCF3F0085DD1696DF86B5C3BAAFBF6A5FA81C99221E64B18E7F343D888C93188C8F4FE8691C0064D3E0D6B0CF2D23928690AE234CE1B8B0E28804206A985ED7FC5462ED55D4CEFC4A580F83064230D50D35CC5AEC47F3B33DF91A62369332788F4AF150E8952A4A44A806B31B2D43ACB39BC457CBB3B05A306BD59E220B27BB6C3098BBCF13F42D49466A825060DB4073700417FF5D6215368F66092505649FEFFF0EDB0818BC8B04FE92C014ABE68E209FB57215403F3BA24E523BA29C8B351E20B43010C4253787AAB039E7621EE391A8AB3D257CE5E1EA6542A1BE8320D05A4F2599B14514FA551F6E5E7B8E6FB3C4ACF55456032AB1B038B2DDCFF08D8871EC82050E3AB100B9DF15EE694DC4AF799F2710D70ED4162A819EB3ABBD09635C01AE51A3D04FAE4AA1A82927FAC8574AAC45D149918349A34C06F7748140035E90239A75A8F1891B55126529AD58C14DD96EA42DA8268C3B4AFD815E1CE2F5058E5E3EDDAC33533C531C2CC1C153BE36131371C42C7043A98F8BF034E0B790E627B40B52A7D6E3E268D0494E32A797272E88857F540 -MD = 1A0C79E82AA02BE7D96E4C30CCB3C06A8798AEFCB368BEE33ABB6FA5 -Len = 26555 -Msg = D7DAA42DCCF29C57851D5F9281DAED90BB99DD2849E909AEAAEC471D421FF91229493BCA2F324A7853E5CFFE2177AE52515980349B549A33E6ACB0AC1AD2CE8C3CA677D2699BB8F9175F02E19A13CD047FEEA29F86D28D0DAA8BA00805D4E1F26971658E0166CA368844CAA3516405DA5C1B227F4C88662BB1F1D70ABF0733D00DD5C80336089BB25F6A1676BA19D36C18DF60005BE1D3403B13645F51F5DCBDCA81BD69F98A69F74662158A1CFC580F1D396F4B6469BCD5FDA215050FE7AB3940E1A67CDD407DF77324BDEB169739E7328F2D3C255BA6CE3CB68BA204615E993CD59DDEF8789BD4589845529A00642B871C742CA929CAC8049FF5104C8E38AEC9CE9DEDAB9B38859FC0371874C4EB679C7D03953878F4A937FB4427F9509085BE0718AD40CED894D438E3C857EC5587F07D2BCCC9A07EF3497742923E4F9AFCD6E9DAB1A2D6FADDECEA1825D3FD31038200C2C4291D11B4F9A386EC1F91B8B4A675FBFEBC09C0FD59E7CD88D0067F07FBE320B8B435154A50A36BC45AE21A13AC8E692ED2B371954606361302DC0361645CD10755444D3D1C3BA1460980FDE689CC40D4B8425CBE8B5A659A10F0C383B4D241FC33D14A5CA7073786705E57046E930BB640500A57E1023FA910F2F058DDBE3C722383C36E87ED5EDDA76F3018A3E302AD7BF1150233DD6670642183684130538F196562E32D0261B9E1E311EFA7AC6B5644BE13F2F00679A03E3CEF88F06D341446F1F0CC6A82439FA9A6F3CC1B2AB640B28D2610015AE5AB66A107278516EF993CA2CB91ECF606C976CA25E218FBC0C5F2461CBD48026D8EBD4B36F365D2D35596001CAD8B6836802583BC76D00871409D562C5C63FFA211A049CD1FE7DF04966671775C4C6283CE117DEB92EFDEB8F3B19C6F7E0C5FC9812D93655D87003D8F89C5F6AE8B233D50CEE876A397333345EA5993A6D083B417C4BA953A32A1DB3F4978FF56D8A52DBAF1745D5AD25CC02696DB6DE445E3EC363B3068396C1258C762BC91D4A102905DD38DC43E96AA237E3DD9FFD5FA41DF3E09F85C8C2EFA0E2E698A39BDB4151D7A6B582C7ECB8F1C301ED3A6829A5AF1DCFFA54074905736AB94E4FA2737319371FA6E1D1B6C7F6462642078E084B4E9A9D4380543364D27A6A90F065BA5D165FB2AA1277031EE8A7C162BCA2D9541FAC727169C8A077673296A3FB3D0D53CD12299D829AE48F5CD964BCB744157CCFAAA31ABB89C546D3686FD724960453A752BA4C8D6F3332438E2637DAE07E10DFB934FA788155E143F0A794EDF146B89DA7CDA6F0C552FDAA1AF0B0868A74126A23BEE271A960CB9C367837882AD51C38A1499C95252EBC7301137C23BAFB2050E7D0E143C3E9C10FA24A1581EFED047895C1D95B086BC972A1292F92D81C4195A249CA97AD7A26F6B0A32DF74096D2A26303953C2EC13E878D46D555F0CEB0C97205DA0ED067C84C0D3543AE3CBA06D86FF624259C43F1D21F55D1B25FB6C71BA85F77065DD740E7A4D691BA1B07DF185396408BEB6488BE25AD522466DB14FEC6FC5752BFA9FC44722BFCDBBD60AD861C428AB72D3249B385347CC7A5F8EECE723E6AE7536E643171978EC5B264B44696D64F54AE20CD83B5977D9DF9361E576D5F1D104FF57DB2634CCAFCE367E1FFF6650DFD53472985F20CA7FBDC1B8229D990C3F87775017A40C3B7F263F27AF3DB16D0769EF3E8B1EDFE39688B2E0DDB7D1D64A4D51FCA9AA5685AE2D74601F2A6751CEDC4540B1FFA13E302A0C404B5B7A652074B5DF415495E285453ABAF6F5EBED11AC88EC6198785581614BD7E784E7797C07CB5DE2D2DB2CD1FFA084831EA90455F148253C49300A188DB688EBA767F56F602B47B1A0B20A850BE2D3AD8F07AB176920A2F962582E62930619E2E7FD10FCA84261ED3069E3337CA0FDEBE5246C3B808B99E595FABD77B97EC7ABCA01F2F41C5C036BE9EBBAE3DCAEA86010667FAE13258C279279A26A39FC0F26C240877927FCA35B0777068A6A9760886B359F7AA3044A2D7328486150D5B1EB41B38D3BA6B5E423986EE351F1333EADE833DDE20247575134012B5BCDE77D714BE1C7B61383F18D01A33BB63F3060775515ED54B9A3D572ACACB454E7B07A0669F068DB441FD86A602DA5B156C627B483D6EA5754BB108F18565158C9CCF361C909B1708168E734FC68275128EBB2A19E2E915ED09B62BE9155925CAFF094F3071BBD39133B1D383F348B3603F43F2BE7F3A1899693B51E36B03EDDCF9B5DE15367B336B2233E5144D51579D6E1EF118FB1EE31BFB710F79858A66EB505C919F40941603EF7FEE7C328980242FA03E5AE9B26343FA0D743C16EC3D22491FDB510ABEC47981C225B9524DB522FB9007B062B85D457B77A4008CA96B51CD6F625FA0E4B8306AE1230CB7517BCFCE6EEA10B8DED2EACC668CCCF33D23083B10525D974174E690CCC1FC09F48360650AAB626FEF585DFF606ED77E2992E2FB8EA4F554F2BDB12B996CBECE34E8C238B57F4A923A414ECB120D492248E0AEC876EAFFA849E56CF1B2C4C09580941FE87BDF4DA04CB175D3FF821D8F1E44128310CE74588B94E09F44F0EE4D9C7E53A8DBB80D4069789759C88808DE6AC725335F0F44F5AC1954381DA8D76612FCBDFB95738BD3C57138C0443BFAE3722F6ECFEC2344D2AEC4EB6EACAF879F6A51191FF8F87A20F69CC4DA4EEA5B67095B23FF16C7CDF60DDC1E807BA2AF59A60D82D77939C6A044D22897BF783A5760D8CCF33D4A8835A00F872B4F45705D47075FBAEE00F6663D345238D88B0A1C79048A35B8A2B891E82555246D9B527BE5B32EDD6025B80CB14A7017630E99CF9AC628B9CEFB069F617B1B80DB1B59581C0DAAEFAB8668D2FC404B4DACE1DCD2C3F35109640D6D1BC893477BC9DA725054F29EF4466895C58DFB0B9E7D4E6DD2B0680F5FD0D94390212B10F7D55244DDDA68D0308A93FB644EECF78D21A7172AC2D511CD86B3E30A77470456DCC4CBC5FE4D4B1F53FE807CBDC32137AE6076097820645417945B12AC207518F32A70BE968768E33B6E99350EE68F52CC1A9C7E7E5267A7054ACC6B05282268F6F5EFC474FCC28965CBC6A58FA02D9BD923A6AF94A0783F6EEFF5AD0E3443003AE4948C1A6CAA176781560F6836D0997EEA7689D45B5E25EAF2D0EEA26E2D737EE803E3D83BF48116723C98FC88CC92E9EDDDCD4B72A750C9C5D127BEFB8D04FA86661CDF2F481866BDA37A50BF437B564E88A90025A242698EE52F4F8A55743974C2702E525799AD6BA2E1AF7B2D3F79C68AE545F97351879662875742DF278DFDFF79C8401FC3352151432A86BDE72D2F4B0CDBF1A0AB5A86478FC2AF89F2C8965DF2BB4BB2B1DAFA4E19454914938E582344F2F3338A0FEC47E7ABA315BCDFCB0276CB136CB34F19B11BF11152E42674D22628857EA42CC51176EB5E1405D353F9196DD8F6CE5E0232D44D66A8355B7FF8FB29BDB43B9214F286BE026048E8C545E1D9A9A65D9EB2FAC78B94A14550DC9206D3DFD296E457656211AB5FB9C2C915416208501455BF9B16A6A0AA586A009DEC5DA170036AB13D89C560834AF3086B28E0E66223B8DF71EDC7ADFABEA8760C1DCF7C872BBA99449394468BAD17CA20B3BA7B8844B1ED41F3849FF4DD8EBC563647D04C1685012EFF7AE62C6AF549172031417532231FCFD19088F0AFA727FE12507F37F4D1EF322D24B1116BE857AEA2158CF403B6302621061191F600E90B2136324EB5D3B38EA94BD99F90A92D230B2D1A07E2551E252D0D8E19455E8156313DED3D77B6C0B234027F7E93018155562FD48F8C7235EB22821FC0B2027C72A6394D9C50158B5CE7EE8F373049AA2EC1319E92A195E68CDAA5C1900185A827338B08867994633D616ED80B591EFB907032DCADC7F2984DD7491BDD33F36435D5CA5142F417DB6F6B7421D96AFF55CFFDE1D100044AC16255B8B28BC47F6BDFF37DA3500793E06F9BAAABFB3FBA2316406659536432E34E5D84EA21C621906E0FDCCE7479BE49EDF8A045FCF23128598523FC27C40D51AC4F43E54A348872A0CB0EA4D10CF858CC256E51823B63A0D49D843466E367D3396E97C9C5FF85144137BA9E39E68DE0017AF190BC09F34F113221EE7BD74F1F396B77250A794D5EA13B612BA86CC4B63CB7170C3B19BE954C8DBE1B5A441D1EBBE7B130C1F59648519619B60F242979A14AC99B0EB86B00B81A1B37BC3C4290F5EAB8C841083D3224CA7DD1BE771176A92BF6F0E279C1FC0DE6A8ECDC2BBCCE5FF6503C8378048008598F1308E97FE8A07935C4E6724DDCD8C1F51159BDF169BDEEE8DEF253D3900427F1BAC60E5E653D8337578FCEF99C70E5C4618A659591EF277D7B45F3BD8D15C7B4C0ECC22817C2F30DF09A1D16D81C3A15293A404540CDAB575765455A61F949457CCC63E0A51F0FE92E851D1683C3CBE0573F31FA1CD0585BDC83E50FFFFB6E3064B8DCC101616306D357EDBCD6CC974ECABFC6E7A27A7550676C4323DC3DC8C29BE91A71CCABAD39367966546B980EB19DD60D29826215435AA49EBCE841679E8416FDE72D4569D75C9827DA2D11D33F130CD312BA5E80570E806083ED91CE81EF7D1B3CA961CEC9E3C4BFE8774CACC8BEBFC702886B73386E4E643E7BECD7C4DCF7E18358D26D7738C24A4E603C27F0D2EEBC0 -MD = 78C9C7EF253FA49C3B288162C4FC9351F64BA2FA9542DCD6220922B7 -Len = 26618 -Msg = B07D8CC619E7CE845AD3C91191D94444320AD50BB538CB98705D16411FA4B2CB879BDAEE8C5FC6178302C8E746F5D3333AEAED3881484993034448E27DA9709937911D662B1E086394E7C7C4CFD0F571A0EB9A06B1548426D4B28E887AA70109F9A7E16BA20F20BA0555AD5654DE3237E5C8205901FD7FF6D55FBBF558661CE49F528527973910950A8D05DE1B0A98DCF91136007D40FF3988358204FD1E6DB7CFC72951033D979E6CAE5C0200F95131E0523CDBA45EF8D348BFFF3B254E6CFCF79B661972FC1F4373B0C0CAB05A7311F62F70137EA356A764D46084C11B0316B3F34996EA3093C447327CB8EBA7C9136858FE4426BDA7CC23042E4E65BBC423B9DAB971E6C28BEA27A5715DE45667219E41CEFADA8ADD8ABDB22F513F3BD47001ACA90C9AD395575A6D70075471798D6660742D5B03A939C1F9D84D97784814048E90D11741F83B7B97E154214945834C1341920A736B2CA30BFD15AF4CFF6F56D60E4AEBEC7EA2D8153D5B632CD0C8C6F78291152CEC571F895D618EB9948352778CDB79E2D0BB91EDECB93A7E12B4520E2777340DC02751B93ED49C5255168911F045379572E14D7F19FCA599AE65BDD1B4FB0D4D0AA31FCA2A3FE1C6D802C26E993D10834C0679F4EACAB7D54F5B463E39CA2C93BAFCC99CA7B18C4B9D6E66D32794C145EF26D3578F6299A027B7479A08CD15EBFF61EACD76BDC4A0E6AEDD0847C54863C053093EE9E87BCFF3DDA03550EBC43947AA8DC1B204FDEC9182F69F59CB6AEC8C095B13E272C6DD4CA844EB5C9035605DCE55F4FF4B2DED4ED9D607D24AF72A4763AAA4B0822B4B597C69647E9611584B0A77506540EA0B18A8C74494E2A61AFD29E1A1C75578E96E030A15AD614F5C5A2DAA19AF845E541357185C08EDC4C10704A50C626FC0B8013EF50D407694682E3FF10B0F37177D38BFB691943624021356113BFB4C37368879DE27D48AB997BFF432F9A3A8AEBABF02FFC14D3391BF55DE3FC9CD79D56FF0C70EFA8859FEB510A55D21C1C04042BE9BBBEF9CDFCD816E3E6AFD135399A90828F7F27310967F0896EE380A2446D316BBB910D5F12DCED6D5A599BB04939FC5BA8D19D81167ECD603638286E40B44A32592FEB06FC5B2D438CF986C074BFDD70E87A58C61439DBB5D6A97A745D0E9D624B89FB6A6502AC6ACE7137AB42F2658A27FFDBC90D3B7E1B580FA53AE8CDBA4291F39051B34008DCAD186250B3A0B931212529222B02F9D303EFD9CFD21EDD9E1B9D185887F0AE50291FC2F2802F67E7149D6735D6933BDBFBE186D787F38C9F4922A94B589DE261DDD4A1F0778C540C37A802F706BF4D6A9CF78A5FDCBA9B3A81B2F7BB72ADF9BB855B6C433A5B97509ED4FBE4BA63421BB4B409A97B9C0D986492C296475D9DBAAA76D340FC6168D1442C047F9B918E39DBAD2C0CB15BD4B22D9D939DEB37D3ABE382CEAC31411ECB2A691CACD51DF99D75AE5F698CC5AA770EF59230BFA3CC1613483F14ED28DB469EACE00D491562406AACFE49B01059FAD9F09A9F36E6E6053DB031ECC01B21F3D68156640E6C1216309E95098C78FABB00CED01557A318EB6F129336168FE49C388B5EF9A27338DBC6D12E56EC0689B853225B51E8D6CFD9FEF764D62593D1EAE946A05666641E8943FA5DEB069CD1143DFD8527F74808AFB9D6E79F7C19F6E5FF1CEFCE891E6B6164C2B3F01EFC691CDE1149BD83543B9AAD1EE17944DBD623A9AD42EA9DF91BA946CF3B8E2FA70D875EB93EAD19F370706D8C82D64A5BBA1C0B9B221556E1927667F32D8B97EF47FA7A2C8ED31BAEA1ACEE3B7D2424A2E9F28B847C32C2C347431720FDF70750FB7FF3C1F4154404D05CF639300FC7EE7DD141F4AB0A59B94CFFA98CC39974B15948CA918198ABBE3689AA7ECF029DC23A09FC47C321A08931071FE2C87F021EA8F0D14D4B3444A28CFAF20A2DB1D9CC989286E28E8AAEE0C7FD4F2731F98427EB1142BC21C6CD52D6C512390BB923CF213D8F8589174F20D47399C2EDEADA8E4AEBFA27F2C760CB56A0AF15704A328041A0E087A9CFDE538043ADEF2DA1A3A59B20BBC5E3A703A5E07B9FA22CAD2EA18B53070BE539B30652117654F082F40A3A8D870894115BBA656B305E844FDF884E558A9CE0484C2EC08519939EB285E69ECD2848ECDC2DE46FF7626AB9A634ED104D01EA3C8A844E177D0EAD042D51B23D9C5D5F0B85AC6B5A4F01E74734AF70FA50B845C45D23DD641F3EFAD323EE9DCFE20EA2A32D9045A41E5971A839BBCE9009370548FA8313AF26FF006FD90702AC9F95C90337C524A352A8A09A8A9E5A03631062591368E40D0209A2630A72A6E4BECA9742E6BCAA58BC364296FEDCEBFFCD9EFB31612D8047CD88CC5C6A7C9E59998EF4D81284E9EDCFD46B4C895E28335C8A040FD27E8E54B35F2A091EF7860F9B5F0DA5AC158F5EDD310A9971163E60A522B1AEECCBB1DD3987798139ED9E0A9DF1B97F1809B1F370834DB07FD18165FD7B51E1BA201817578401B7F45DBC3158D3D4CA358625B982A802C27901935DFB12F3FBF2C7D39D4F0FC81F12E6677E4755E93621FC9BEF1A27B37D8F71EACCE7E979937CA14B7C3FA3EFFDCEC0221CF2AD87202C1D689995F4A3CEFEADA3C6FBC1B08BDE1568F63495260FE305C64A6FEC86966C09AC71CC87626E73EB09DCD054CCEC02F1ACB66EA9CE3B9AEBDE0DD8111CD547A0DEE2DD09E735152FAD934145A299ED80807699A8787D723D62285C4274B48D77380E7CB806081F2623B9CBFB79273A091BA1659D208E27FEB5A267333BB1868E642F116D9FE68E03D102A1E099131FC6771670EC6B4A5E44B17AA5A28C7CCEA08723B72E1E71A60401EC03E7914AADFC17CFCC9C64EC7C3F5775020A8FEBA1A3BC5CAB3352913982C15740B3CA655BE4926AB19766877105AFA24BA9F0A6C2AA1B43723A3351918968D7B164BAC3D2F0EE38E1B010C6FABFEFBE69F9129AEA123CB7D0DB9D886C60C8F3DCA0037B13DCD0A89CC2FF27A556501AA5D8F2A96B8D5E5A1102D4F24856BEC8B22ED60B3F9F3F8F58CA9611241BD5331CE1EA5881E8FB913F53307FC64FF0972AC66AC602146CEE9D800E5F705316AD51F0A872E5C3DEEC00D769F920136B6B58AC5CE7715CD3750E7B646614088A95A9DA2EDEEA9148D85856BE2A286A5A79C86D2ABE7505DE657EC8BDF0ED732A1A858633AA6A2C4B4555B23C18CDFEEF1CA600C9202A810CFD9E5CBD870E18CAA11C2E6477F8D78BFEF085C4EED3B9AF8950DABAA08071DB0B846CD9CD83A1CCE50639ABF259414739D9908C46D97F0AF078B0A2D0BDCE59867CAC84FF74012F9E0477300BD486A44E72A49964DA7F02252D2609B93F4FB5A3CF20B57B238A7E267C7B23BBDC3E76D317244225C3108D4F4736388ECC421D7DA852B7ABD612C5ED273792D6AAA60891B5B32A4A5A0A28A8A4EDE7C0FEC8B0CB09871F7D8CEB95B7FFE20E805E9D44C807126AA6576EAFD0984979B9CB81D95C05F0D080162CB0589A3DD937217A54BEDBDB7E3E12BB1F1A2B0A55CA72F5B57DB1F140B5A6429DAE8CAE4BFE8F97BFFC1EFE14AAF07F56B7F0EADFE1DBB0C89ECBFC39C375602CDBE303BD73DA5D46E46F75B2AABCED1A7BAF314053AFB703E881E09AF158A055DEF703434AC779BE89ADCC97DE91EC39C6F8FC84DA8CB1FFCA6E9C0D41FB9E1D65DBA8B86C4D6D0A9F3CD0D92CCA500BFE3E74E3E2850C3C1771285F868A74AB565FCCF8230E6F38F22F2E33D3839F413E5106A1EE8FC0E695A9BA6613ED8DB32E4CDE6AF100E741D5B3951A3AB3AB9EAAA097B6EAAD34B3B941CD0EE16FE7990A54DE74AA52583CDE80680FCBD643DF3F776FE073EEAF77BC646C50A887149F6222A58AB5260EBB1498F22F0F1B512226115993A4F358FF4B45E1BFCFE936D51A59F1FB5215C0C6429928F1CCB9710E62F27873F5D37F4D2252928228DBE03D3BD0BD8353E24B2B5D75ED7C60E3DF6E5C110400010B9D3EC298BF031902436A9D7BC77D8133E3234466F6CCFE13709EE4EF8C251BF02DC0277EE58EC1F6C143AA2121784CAF29BA9EF4450BA5ED21D12A716FA7A86EA0337DF6A5D19904A2B946AEE870159DF233F062EC99365932EA84311A9EAB87D76236ECF0635831E9BD7073F85928CA34A96AD3DCE8B34FB3933950222FD3070E8840F135D3A27B8E99DF92C38F71868D9DC46A72EA32E751394A74192FA6DBEDDA3B34A7D02F3D00662EDAFCC4CA0413F160FFF33555C2D8696FB17C3012EBFEED7E02135EF6E3B54EDA3133402540691985A786793FFC9681CBC4421DE32328C59B8F0BD4C338F6820A55A3791E1908B0717438CD1E9EFE8C047EA279449632AE67EDD5B0E595A876506E840D81395A905DD96B819BA42C4E06048613A0425E2E4F38263BADDA1EA95A3591F76A8A7AFA4301602D012FAC848AB3D66FD2D8B065D58A0132FA7D8B613ECF245FA43D8B848974AC5B09137717ABD793604A901D90FA2B833CACEE545AFB8F2006298F699F4096EC4089B27CEF86A4A659293D0E695E62E2228C42552732009BBB974DD0B31AA00950B6EA64E31E802F93AEE0B9DFA3760BD7D1BAE449DE52DE01232DFED1B94995920FB8010E937C468AA2AFFB4BF7783FF86224BE5C1DAC300BFB15BDAC1B29EDCDF6C3F54CFF7E0E0699A2585463CDD63FD7ACB6684F980 -MD = C70C5735BE7AAC713F7E03F14ECB8AC9359FDFF54DA2066B9920DC39 -Len = 26681 -Msg = 8F0E12825AAD8EC460B97318B56A2B5A87C3C1DE072F368F4FF78DA1CDA4E1335FE5F959FCC6E70C3ED55BA5BB47AA5FD99205B624136FBD8A41B6740C2D4920864CFD8B52B1B6D76F48B097E1A9B8BE02EB4E3303AA2BD231500A56166262488F3CA0334B3C0174CB575732A96E6EF586A9D32FEDB884DCF316F701D184CE75CC5620029B8ED782EA0D7E2F7943833EFA97CA8C239ACC1BBAC5C8D7612C73D79004AA0C434AEE786E7A03864C7C022EAA405624518BB2AA841B5B969C4780D4CBDDB12B856EEC0DDCE00AF0CDFA403AC64CF1FB4BA927A347848D172B3FAF55EA1BAE1E084059AEAC8179A3A19731F118FAF647B9559E3A3A15486FC6F67F5675E31387F71F867B3DEA121FE2561DEC1EC6CC128389704DF4999FF939F2E230A46EBD300A760D962F8C5DB675377A7310F55302400EE992FAFF87C7982B7142BEB799C3BF6787675FA754B65A3CA52EF942239C3C362A1FE0D8080D8EA9CC509C8A73AE848677E4C2D9190FD995DF2CAC1FE5C976B6F458EFF2FE3347DD21279C7CF59FCCE42BE404062418CA970233995061D155FEA4865AB4FF97F45715D794C0ABC5B5A7C944AA3ABA0DA170595C89F1EA0F3546913823AED37D52AE4499CEFBF942FE891E1B98FEBCA4E35BAC04E897628916149406B522F7DE5725902E3D32BBB660A0900DBC0270EB41DA58C7485B4C80EB7725C51F34C722E3CE0C955273D0F8419F1D8B5AAAE99BDD941DC67E4552C0B45AD0E2CA772811259F520FA1019BB9A342B143A7588412CD6FEB63A0988B474DF5E0A45DF2195BC638B745233102AB605394CF217D876C0D72173E03A34B2A8D18412E98E7E047E1C4678048DA988175B04F13A4A39027B4B6B7101155AE00057B16AC5FACFE55BDEFEADC8C290ED934B39C3E462E8E77AC9EBF7B9E0F237F4B5B98B890E1FB6950AEDC8D01567FE85A6F5F25664EF32D7CBFF814713D881BAD89FACD4FB87B199B850764755F08C41F8B0A6902C967F9176288B3E8980BD85504C98C2F4E0BBE213E0E509BC2C5E0AC2F5B87D7A20FE23D0F1E5112FBE8BD87B23A6491BEBED42A6E9917B02DDB107A0EFEA945E736AA46230A021DA8944283A9DDA0E57CE4EFB42059D19E3AA881863778F818E990F0E7021E1BE98A8D0E035C90693468BBF40F4796AB91FD9C369BFC91D289E75EAE196F964098998DD7C0849B24E460CDAEEA9CF6BC330C53394BBCCC5ECD8B0852A10190D80C406FA1045AC139FAF9965AC91FAFE0AF2BA7BE1353D10EDE3AE519F66CBE980EFD78881539D051DA8BE0F62E11636C2A58DECADE29CA48126BADBD1DA6524A4364CFE2BCD6CF47B9909F41E79C95C6A07B712746B3CCBD052A9DDF6F2301A84C16C2A8A0DCB0C0F95F4F13F35A6722A8A1F725681976A39B3A1D669007BFD4E5B3B65FD4D3FA78FA8CE1791EA05FCC2F1E8B0D0F9F87027948E038FE895A613F8A1904068899AF36DF9982597F4BAEEDF6D6A5DFD791BC0DE2F15F4208FA8242D8C8163BD4B8FC58F30E3E32D4BB0E8D51588C600D8823F495BCFBED610D4CCACEC42B9759190AB0C8FA925557785CD136B4899B92F6BF1EA657B35095F44E485008C863BB1503B34CE720E488B7C0ACCEE2D3E7AE408DAAB105E5B0251C4DC578E54E1CECCFDAA68426E3548A455E215A4E6F437DFB30CEA3295024BD9E488B466BD1E9D4E0436FE7C49BFF04A781B72D0E906289EE10146C1EAC4289A48943A867535EB10D49603A0B7A22F9195A16CDD940DE269188C7BC52FF6AC9D83DD4DD32B44255EAF5734903788A84DF4854AD2704E42859728A4BAC73F8045580CCB779C4B1701596C42235657445D2EB998EF1085E481B270C740191B314CE918383FA9CB177250CFCBBEE0170F2DC8137D3AABF18F248C0117BE5337BB0C863A87D5E90F8521B148B35238495A2240382F6C8BB762836A90D227A990895CBB7143B8A518621829BB554E9DA3B4E0DF49665C9E7CE1B31D67A334F34B7E8F7EBF811607F89062DA3D0D12516D264E76FDB78DE8F806ACF9BDA7F7BBF6F4DB3AE6C3F77D6FD878B7094F12BFAD0B288AA219A517653B4680D8E7A0C4495FFEE9094A49E4AE707D5FC849AFA48D1D8D6D5BE625E890DA2C12A5504CCB1A2A84F098B623B9A6119D9C9F1E134441E476D996BE92B29A35704FA7BE901C68BBA8EBEB15DBF0E6D3649726044A3283A55D0D9E904B4CFA9E4EB158BC7BF6AAF85E5FF3F50A134A536B92691E009BB318D2F66ED4F000F2BD3B0785CA32595D1477FB4C608B1C35E24D1653B7574F357BBFF7CCE6E3C1A1AB725F143B4220E61DDD8CEC1E3498C72B19C11ECEFAA6D6B8AAA075C7AB5D318E044E0796B05862DD401AB9FD391583230F6AE3FA0B96791982E4260DAB6214A7653C3FB61CA3338EC754F91ED3D12816F06C5505E5745570C61A8B6145189507FC0D0B49A01DF0F724B9D60B5F7B23DF75F19BD1637D7F1E79C93E9FAF8CA9B29580CDBAA5BD999BFDFA55F75BEB183CA08A533A80243F470BD34020A3357539CACC200371A31D804B13B628EF252DFF262B41EBE3EB140397278D2919D26BAB795DDE66ABB7DC9DA22AA8F99E630EBAC404EC1891C25E372C6B83A53C3E4E57EA23F1300C4B0713BB923C8CFC709EA567AD4379D9C2173E96F18780A13474AA5D2D71172B3F1F783939802A094141E1E0F1B0C7571DEEF05F5FDD20F80EDE5EE144A05B8482E38EB98D854B4FCB4F4CDCCD8EDE560159BD7251D1B45AA169A2ABD0E0141B8CD63520E4FDEFD5CE899D4845EF20F32A6D235C375F534BA2C4BB2E3B148C4357E2C4AEBB5FB438E89799A12EB9DFF516963A68C919D52E3DAE73A0BCE96FCC64049EEC58AB295F6650EDB326664B7B6FEBC8D816F0B5B330A91B3682467045124D931ECA922B60A6EFD895FDCD6B6E09ADA543D066967505D8A7F31A628199630D2520AD0A9C4CC624EA748FF8E5E716B588224626C9D79FA0B603E14FD6B0D21AA00A12435B7716AFD9B5968C2F46705ACD318102E26678689DEB9B6441721AB6DB9A608700C25C50A943C8D63BE09D138246CB6381BEAE6C18DFE0EF75C98F38175BE68F952E315017B0194C8CE2F87D6534BA07A1BA96243354112842EA274D393F28AF148F56CFC6D4AFEEE2219C80DDBBD93140F645C6A45357E5287557781786B8D511D34ACD2F0C6C261D6802DE10BFE7E2CB92432E3544A50999F849BC06FC75AB4C19E7921EBB2F1C506F9C90A4D91C7A9EBCA777A3A035874B7687C6050A8149F3A919F107577473DFAFD1475D9255A5DDF0CF6ED9FD4101B2E6DCA8521DF215D89D6415947A72EEA7E004A27BDBF8D5CC121B781EE9FBA3598A9BFFB90D2C5190FCAEBCA44A208CD6BDF19E1F070EF020C7E6AB34FE91A6CC6DB6CD5B26A0A6BD01A5DA1973838444BAF396D3B123F1B05B867BC87111F7A21D4715E473DF8A41B52E41C385F8E23355974100F9AE8A5735114D8A813B38782091FC907F76E41158729C2ED0286EBADE0D239581CFA1C5C7B92500AE56FDA5550602D2F289FE9773B0EBB765478F6E85A6DF93D24FD427B7C2EA6BEB4AAC150B0D58D4FB35BA74539F8A9EABA145FD99C30C04AE6FACF8A944CA61A227D74A367DCE5FAF7BF7C1F10F90FA79277D28F6F63CFD856C74A21D853AE762016B1D599732753AE82C0E2C877331CBCCC36F510485091143B9060371837781C492F271FDEDE841E898AAE40ADD8DC65AF10FE40FD1BF96AE206CD43C8421BCD2D3D1EA03F075AE690311F558FBC55A4CFC9FAD5754B5A81AF591F1831B38323E76E73824612BCDAA1F7501515D7B775AF7CF9371F3BCD38C2DEB73E71A45EEF9E862908DADBF93591F347367F434FF6AF4321B9705BFF5E684FFCC2A78E0A94F21AE82A8DBF8408C710CEBB50C6E6FFA570467C5EF6FDABB32D1E2B2A1570A9618E811A433C0558823D1F2003975577CDC7965CE2E0DB5A8B5C60C3047872DA26FF3B8C5D9DD080A569D603CA8445E7A0D24D2B5669976D456277581C300499063F233CB08D7DCABA6E12645A6B930C49E1EFA09E707A791A0744284E43386FCDA22FDE6A8C19461591C3302432ED6AEC72E81CC0BC786E47D59BD01139DF91FFF8FF290AC25B383B368477538C1D2F34F1FE8684341687560C8E1DD304E5C874678376CBAEE05B6C21873AEF6E3137D29B9C518057F265FA74EC37085E1B2EE97C4DE5949B21529B5E2AC8FC3656DE6F4DE937E91AE2EE3EDD850A3B771C6BFCF709B42C0F9719F89AF67C4481F3A8523D84996C5D9D7029CD02836A04EF80230271E8D8ECC4BF2993FF321AB2CE5F2ACAF2468044432935577C5CB053022D82909A88A66E841EDCD2A763837208179791ED472E391940A563866A2A1BF4A6A3E330C1F7CE85D32B7DF0BC9125553FF6CCB982D8C8EA53870AAE5F5ED45E6BA38CFE1384FF73F5135A920422F7A49830B539CE1F37F32C5B1D43730DA0711131D6FBEA7815C2CF0AE387E6DCD492BCB8812108A91156C7390549613E168C8DED42DC80EF56F509DE37949BFB05C0B31CED6C5E8269A13E91FB9C823B18EA687B5FF31B65191ECC9D4F9D31180D4F01972F0E0CA634FEA8577B94E72FF2F468202D9BB4048E82132608338A9693EFFCEFF1569A96CA5CB7B24E5102A4330D9929D3DA76C22A2A97239E41DDC901C768A94D22580E9D71E3B78BE3E74A8EB55680 -MD = AB1081A296E02A2EFD4EE6275341D0222EB484582AF2B28744B73414 -Len = 26744 -Msg = 1A3DEAFCE70AF6F3F55D66AD9CE78D5F4D5C5F2638A810AFCD07D67E9F9A1380D6B34BE482EF030C22F1E978F544609CCE35A74C5109EE7038495B6210CDBCA8DC82C6E9E7B0D593FAD9665382B3C401AB8941DF71307DD77EBAF140AA66A1F76316478850E58886A9610631E9C722F459FA00C0B53124FB4F12778BBBA3760826D3DBA67CD030A96B654AF93F8E395F5F439549489F8161683F124BC980E6939C83A6085E4B6CAAF8BCD89A0E01ED70DB487166CC29735D9235A9CDC57B80C9C2E591DF6322F5BEDD32937073F781A30389552AE83FBE147D1B3D3461A3DF96C15CD96900C56718EAAE838417057579115936862679F5F2A45DADF65D14108AF1641DF987B57986384FA1433789F5DFBE87E90BD4E9D8D4D0741FCDA7348322B967B566B18612DBB8FE64F151947C3F7E361EE868676BCCD0CB3A1AFE046BE70057A05ADD3E65AF31E3FF414A627C0183E8FF583B41B75B203650420216E6DFCAB289665F054CFE3EA0943647528518573BBB1D0F27E1449E98739EAF0D009432DF0C1EDC1625264B94A71DB762659FF5A3A7A867F182D1F1FD34B341A4A181221870DC4A494013091A7E3B2B07E0160C438F1EE1E8A2B989C4FFEC36B5083EA427606767C29672F44779A8505B422B25A56907F565B27690D011426A62DF0036D57D967CD1D14E915BBC2691E7AF818C769D9E1F9EDD40894BE88FA1D7A5952AFD898E837716ACD73953BF2D1D448123FD1A0276D2C2EBDC760A4B787416CFAE5E963FCBDC8B551CB70F91DA0ED4A8090FEF178E879F2C34F3A269DFFFF09772D44A13D7A17468B5834C460957D5243C325F63F05F89D4ED98D361E7F0AB8A83948A64D0CFF8514841AA21C7F337920A9983E59BE4A0F1339E1E462F92DC1FC070126206012458A499A8111FAE078E00B0CA3BC1D6C7087CD318D5603C1C7E0425E6F729CEECA5F35B82F8A42E0E9B950EFB0904C5FB5C06D91D239913665ED1F1EE4B82185A01BA86CA2D3EA94E5A8842231A94C05280183B7ACA289984103F122203EC2FBA4A382E6F5236D6F68DA05E3BB0C558421F0EFAB91DCEEF6D1ECDC60F9B88F8BEFE31CDC3C2F024A1AF2C7336AA5D151E8CDA814A5FE898BADEB9DD680E337E682EBC22BFAE445417E37D2D89A338659A280AB1206DB74DD42C6F25639C1803BFDF2156DF613B0F5924D209F7F9003CE8794F989F4F27B82121210F4F65EC5A1F7723305CEE438C41F793EE04496BBE337BBD2FD3023830B1C8889C6F4D0C1192E364EDBE1CD987BA5D66224EE9C9405E1DFCEC0EEFFC5C73D3123F6731C6295D1E6B854B884FD22B6A3BBBE5395312585CD138BCA67532C6AB71BEBC6657C50DA87D2AC6068FA3970202C5E15EB7B4B3D2676C0134BCF1EAC2B26BA46930B5E660B16060894884C88BFACD6779276B86F685AB6F17C6D53F621275FAD66D021D26D1D480AFAB4B5EC75E0E763FFC45F599EA02504DA5D91EB5EFC3E4AE196F219E45E7CB05594958C876FF474A020EF73C1F09B1F7F7457E816D3AF51D86663D4D461754CD5E907456691E02446D6CACFD33516206A31870543D574592087773653D4086C2BDCBAB3C9B65CA11AD0D4E58DDDA8B440309989857103929549B7300CED42651D4086661694092C42875CB62858E6D1BE5F7274B4BCD83AA4DA05CACA186A30902830790F9FFA24418E1F9DB00FA40477E83B05C2D11AD7D81DDDB1E31F94A9DD5E9E13391C22479B570976E3AFC1BE41086D3BE6689D87CA4326A7CDE8E5B396A678D3CDB2C80FECFBA2BC799AE8B1528E96D880CD098DDE910D097EAAE660AD4D7EA51C18F18AA1B39614299A172512521DFD231B9840909839EB69C892EE23F1BCEEC1FADBA75786C7DED93BC9983F74CEAB397EB8BA84F7E4130B34258D628594A6F9E2348FD91BA2594E07B8057E8A2AE3ADFEA0EF919555385977041C5B6DC4F3880569171F7217AAA9A85F2F5BBDFE3FFDF79248F2A35FD4DEC34980C67290339B1C0A5A6AB8838157AE2F5140B4A24924A6688AE5CE72A48103EE9029CE8A0F15B1FBB19A12FAAB80A7CD9C0E389FC2775833E3190F1CF735ECDFE7F6B6C326506AA82613CBEDA8DD3691B81F4C1E3B0FC32D7E6719CBFC12F4A26E0FC29D6417953ABC9568DB4ED9A294B9FD5F2A666DDA546ABA301B1C60985033953EFD6F4538333B5C7DD3148814A3FD7927C366F40B3D7ABBDEB2332DDB586AF80959097663CFAB2FEECAD6D368AE10EFF9663D5F8BAB95935D25F45776F7F04B46817D05165A9DD4770509ABB92F8B9E7373CA780703569981754A51D6D376D65C57F55CD70E2DF5FDF5A6B829AE30CE3BF942815C8B4BE858DB58151D02A68AAB9FD373E047EFA51BD1A0CD1B61744D9E97CEBA3334B3BAAFEA3BC9E43AE097CF2C3D713EECC247FF43EC74D54907D8BF45E45B2E0E11D82B126A8179D3F66C055E11F69EA67AACC5FEE8AF01FAA379E51998F5070F9EE0FD30A2EB22A925586FB1B39024EB5EB1E127C76A149E7F02AF1B73C16E9E5A5DBE378E08A9FADF1194C625132AB3FDEFE8FE9A89BB8E0035A1A3AC5278F5D3D0ADE0E41C81C6853A41C4AC45BE3F68180FE23F27F18BE2E339DE1D559D75DE63ADF7A32BAE42B037AEAA3E123A5314891BCD35CA48D57DF4C17540E97202A8EA1328DA25B1FD6BE2B56AEC1E5DEB209F3B7A13ADB1CBE53EB645956E577A7621D74E42376D70BC5C4AACD239A852FBB7B3F62CF59FE10438C1DC8E1E46566325DA0CA43AAA63FB7E0B450A2DB3E3A2204704D894DB24B72B3078106E096CD543DCF027650CB4965E38AC36A8AD588C5962B4E26548AB88F0BC20E10ACC1C3FC00EF415B3C32499264552B14E2C0E789A3B8A8BFF9620FD939D0B34E806177EC696A4B3B1CA4B32BA979B2690CFB3A6B17BCEE6877FFCE757E4116DA01099FFE82ADD5A0C593E73449A96DB9CC2B9E846D166B095174F2CAF8B35DD878C836D9BB6EEEAF8E1BC5D0E149C739828CC480D731DC16B35B80D4AD82ED7D29BD05018239EFECF8DEAE180C6A459DBCBFE4AAB9A5E2C1E1BC31418CF2EEEB31FDF8BA02C9A91525E9163F672BAE2EDEC38C1BDB84EA237B4EF86BF5C0F0FFE178E3761E82D94F66E5EA40BA8170BF768409E1B4177AAFD9937BCE3FBFF590320D7C445372463FBBFB34F57447F42C16E026F179CBF82F617C86D1E8D42F6C908F9C6B77E38D25D51303DBD781FFAB569B4CF31FD0B947C45E1768A2E9DFE8369F520DC38D77937B69B821DB4FFEA8F50EBC404F0587B5598189F54B5A5B98966FD16801C87DE2C3C7813DD70DC600824D426D88C55E89D47214D59206A7A65A65DA7CA2E42FA62ED17E7AA5B3ED446BCC71F17FEC8593BE96D2037BD07F9476D4D732B32BC5DF8C921316B45699004716FC89F8D45BAE402C26DBCDF1A340847B932FF882DBEAFBEDD252E126C89A1E1FDD8908A1F67D15D8E432DAD8E08E950A3BC46B96CB89CC5BDAC703B3FA3E986EF1C6E7E6606E6845BA1EB2FBDCFEE744B5E45206F4A419E1CB103C8490EB293EE9AEC1F0A0D294F9D3847737413D30873F3C94740E8FD072817815EBBCE3F09EDEC9D1211A9E99547D620B2EC56C89E9CB8144AE9E46636324BD13C6CCA3AB9CD9FD8F7F937ABABC598232384427A2D4CE0CBF9765F7225E208C3CE128602B0AD08A1BAAB77EDB3111F0C6CA7BA0EAC9D89D5B4378EB82C17F6EA08308A79A53D150D3F85EFAB77294F02EE0E2885EE2AB2793392B87DB11FA77992F5B4FD75EF2F1A822E87407A4878894215AB89B6CC4A120F5A78B3C31AB80FFCC9ACEF53FC6F7F85685EB9D56D30D87C21ABBF1652EEF8F32C7C567BD1F08623B09C29F33561D42727A5649A3850071AA6C11735AE63C4FD31559CE560B27A362786A83353FE460B37074664A9421D3B2F6A864D5ACA087187B27E2B82F31CB3DF5E985CEA271C609B94B4E58356D40C7D5C7FF2E5990FB39588154843EA5FCA92F120075D4C4D006661A0FA1B0585454BEA725473EEF7D58117D5840C8348999003736C5EEB7858FFD273A1C3EB2812F5697C59110275B08F6BEFBE84C92497D5F73B7B6F794A849713B23AC5F29D5C7112FB2E7A6E89EB54DDFA3122E6C79624C1BF25EBFB9FE5CE6DAA779F3ECB2984DA42F8C6ADC77B21DD291E684FCA50E46070962A2D4F00813D8DE1B8ED33FED9715180C7EA8E2BB74FA65D9C7F6E142F3C81CDC59172E1020F62F65CA5A12CF2BED9DEA04A4D8CABC2948F7BE823A3E792625275B3925A6C8D8E2B428C75A5DB0F7120278CD7D6CAB768755C7FE2FBF89FDED1FB38AC7F76A2F8798CA36ED42CB7C07F006271205F546A4812C20077F050D4CDC79459FA686E97F0704B7A9FF7DE16318E862C53D361BC635A55A264BE15016545DBFCE3C6D6849576ADEFB6884EDD768214E0B438B0231B4F2692C2C0B5C177674F8A0DE236EACD9E0CEC7C8647E4E9A5861B957EC834A2F8572F01304C3FD6A06019E5F1499B62BAA8670B652467FA9A4F10F053263BFE9743CC7D933F86136AAE3A6FB56754D7D238397A0030CEBEA87CB255AF36138C373DBBAC41DD4A697032E4796C552AD9C9B3FA713C3A4E09E0EC5581E94BE7F31065157662F9E9C678B1EF1B8B8A847C51789C22B1841BCFC855820AF3258AF9E08231090B45D10046A00178E89BD515616B8A44E77BF57795DABAF40687B2CDA7A5014168F -MD = 98E40C176C8C8EC46AB940688D47978B8D1CACEFF37C700FDD06CBB5 -Len = 26807 -Msg = F009D3FEE265922604B0B67D1BACBF8A78C4267BC5794A6C2C77CB3336D1A9D33DB39C41B5024CE9CAF9B1863FC59DE8BC30B50DC3596F2F731F1037DE546D160FB2E6C9D19BFB6888232AC299666F460A6B512AB60C0D7D5B9927046243CE62A1ED0AA45B7855A214DCF9310DDB5C81E590DBC8180036F5CB3F5CCBAA8F73CF479553392EDB9AE6FCC05B8A95519637E0631389E0543770AF793A466B26F5EBF05D33DAEDEF62BFDA06A5DC0F6B150592E0000BAF14A7EF518FD5FAEE01BD04895388471B6BDE8CB1F5825BAA1722C54535D900D0EC2923947261A6AD33D648A296DE8D570946A7180CE2B1CB60D0C1E1DEFFCBD997E1970C74F552764FED4E87020606B9C282889CB3E1D62237C7B928EEFF3E4F7C341018C82EB5FF4EDFD8478CC6179F3814326968A71E08C6A9423E1510A5B075D960F2E7BEB380EF7358C111A7A4D3F63737C8819E988223F93DBA00B2CA290BFAF25B0D25D8DD1718230F809FFDB998F2D61695C121DB9AD34698098B55B7CE7EC69B8152374C3D6888491940F3709155411B0404DF8F0B1D8B332A8377A3C9A7DB8FCD4D44056FE6005A7BE47242D73599AE94F37457CA2F682A6A56EBA12D72D63AFC991DB1A10068A8261041FDFE416880C3B19E49B062A216A293C390B59B1E18D2015A3B936C5CA0E3002DAFDCAD08BF3C0DE76DB26C64E6D0CD98ABD3482D14CC5EF160BA3056E9FE3EF0868FEE00F3BBAA7CB551AE3036599EC3C700075EF225532A9EB9F70CE46163C059403436D9FED86D183FEB623B5F5CEBE4F32A341EB1DFC4B921260C86A8C438C3439E9183B8286F638BE533E3ED651E7E22C65CEBBCD971F3849297F20905793BFD12D5E94BACA571467DAA4221298E82B08E26039A103202D3EF61393539A4D7827DB6790ECAEA7D28DC0B565AAF54FB558FE2A0E740CD8D960EB87C8EF46C9E8A50003DD43F337656A2BAB0ED148FE806FC5977DDE0975921266E7A2864117CE9C32EC2FEEA4F0D992171E62802E0F1E7AB223A9475BC5AF8E39503E83663FE82D14394B6839189133DF53D02E9787D97E9BEB6243F723ACA5E6EAD9E7AC70F985D4C42752C3212A46510A7780C31D91B9687740162E52360197AAA3ED0531DF417EF46F828F49C6FD11CD6895DC0C829BACF593F1CD8F0006BF2737FDACF7E9EECDFA53149A6CFD34D0EB3AB949BF827AC19C93909F76D5B979E3F4427DF11F4A900A0984A565AB7C5C852CE8ABE2A4DEA80633F8BE5C60AAD79B6AA8468EF87F0BF94B3F74708C0748E02F51F7A7B90FC686CF629001DF49ED6FAA6604145F20E396504386B2BEB566ABA620EFC66FFC2931466D5932326FF10DB66A3745EF1F5DCC2193FBEA159AD5DD7606889F03D7C63897083302A11E83E656A036ECDAA6E89CC28B40B214B195A06F75DC33CE029668A0355D6CA941F5F50F6E6185C4D5157F75AE306D4C530599C6AF973056D61BA27850F62D7C483ECE8EB6E2D40E1382745054B73A2E8C61CA989B555738C5872306D08DA30FEF4E2AA0434EEBBC27E6C950909EB0BB1D8C318ACA8248BF3D78358F8C4C1282289A6024A6E3BC6C8DC3E6961B5B6017762E60D341F2EB75CB4732C85CAAF85925384DA4EA5A0FCE881A08927D1486E558A7EFE2C281050342B39907B2A0AE232131A776ACFA61FB32A6DC75C0E113897C5C79E3E14BA8FB7A10E542E0446E539D05EFB6FCABA381250E4BDDFCEC401F7717D64BD51C88748529CE1B4DA4248C0AA32C06700986CA46E542137AF0B21875911B17B997C8CBB1FEFDCF296471242EBF4A294E6FA7D954615A555E9132891321954182F21EDD52C855322D21C5CC1251FCA03865BCB78A6CC252A4B74E9116C88D16E065CED4BE7B1A7BDAF22E4322848882618C1B67F473429BDFC585F88BD6DFAD5BC759BB28996CD54A651D94C06CA4CC3A5FFBE089F21E0ADF940A45BF70F76F1CE2D63F5057797F7CB5BA07286F66B60ADB53771429DEE0058F2984469FA5E82381BB03EEFE92EFFCBE62976F2A91C60C9166F0BB69AF567737237B2BF6AF82099318AE3229EEA491F3764CF18EF74BD215FB3383CE10122290D400D6F6779A9F8A6964275F9235353114F3CCBA0230D9FA45D487D7DBBAB9AD97E88B5969D4DE76CDC6204C9F5F4C06F93C3F673BF4ACB408A0AF4C67087BFB91C5084D64731929C22D38D5B0CA6D630DC475ECBCAE1030AD8C037F48EA5A276EF78D27DF540DB2D6C5872E0EFE0F13B4AC1E3852C1A6AE36BDA1647821409112A27C4E6387A21EDA2426B140D80DBF88695CA63454469F07D0AD2F75B601F12051028A1ED025342AC7C43B8050BDECC2D16DEE4DFA73918EB0CBBC74689CFBF2A51FDB6B0C876FC80A2107A8B98A95455D4569443AC823BE715507CD8F5801FE077EA92E43DFB13CB08B828B0B0BF86AF5EE136DC9008F32FF4A6D4DBB01A927748B6DD8BED55FD6C50A28FBF5BCE7CC793B098AB9755317443D2C17C68F4C3E6678205530B599DD282370E8150F92763D5E83BE0B13476FC46465A9CB8018E0FAB3D61A8AE06773D1030BE762EB863AAE9DAFAC39BEB1604D5B4D926D77BB82A1C3E5BA7456860E1BD234C3444D44EEDFE7076E312E556FB33454B81CA6EDB5D557722AE29828395F45D2D7F8ED6C899A08CDBB71D88725422EA3247BCA2C9EECBBADF711408853208ED58BC5A7AB218CB504EB6B2BFF136711516CFE8CB892A5AD4F9035C35C8FF957838F26D4AF1139DEFF69BE28C34BE442C2477489CF99939EEEE065B803D2805821D01E7B0B0FB9599715607EE357769BF1C99557460033F4D0C58D81DC02264820E6E788685E2A8D760957047A33980F3E2B7DC2F123DF39A9DABE77CAEE63A909DB5ADB2D2981C6160A26BDA8A082EA0E81C8CF5824616A151B21B30436E1C9A879747F171231FFF3049A77CF1FAC589CBEC04F27F7C1AB80C5F566E6E56BCC501274A13B0256C6A96768D018E376957325A9B0A127AEE28EA8577BDFB18B32F56343FECEDF235FB722BE21CB253B0B025CBD8901405F83BDB82D18661299D41B3CC91FA897B2DF4551EE5E8DB0661D245FA38CB11B3511D847B0E898503B6E0DA21F50931544DCE4CB00ACCA682F01BA789EC9642CF066401BBC34819BE956DDD4762EE785136DE5C7D58397C185608EA19743E34119FD74D5F8680990BC32CA58B0D22FAAE288D8EAF050838C7BC46089A1F93F29E62715B0F96E2350B8602D1226D19AED9D3C4D6E873C3018DC5DE3C6F5DEEA2A49410EFC97F90803032761D9370054A9D96C3BE3058CB1308E97CD206C6FDD8720E95FBBAE7869482E65F30AFD186831E6CE39665E05AF6C996EC5A6EBACA6D961F134F7C9A41776A0A01CE880A1239A45B2693DF550724DDB7AB4C838E56AA9DC43A1101815CF3E16954C1501C71925DBF5AD338030505F70BA3FBA8897B63EA81C7EE639DD5BFDF4E8DAFB30F628A6C40F2308A08666673264EB220E00DDE4F2B7EB9F19562AC202B14A8FDF61466005627CF952F9FE19586826E477613758371C4FBA1D4B7C3D7D886D124BD12E2F27D0C36A81DA8517C8B7555DC72053BD05947821A2E206EF08A4ED50620AFF2DBE516B30FCDC1E561F58FC9D243E7BACF4E49C8D95096542EE29EF646FAB4A3A52F5643E1B84D564C1055036764F88600E47FDDAF5C077A74EC9210778148221FEECA3D330F52CD48C525EE9EF8430039C94CEAF6D6045EC2F1CBE808A97C4125950B318ED92E2738B6351104AAFC875506398A68C59D910E7CFFEDA991E35C53F1678D93D8337C24DFDB608AC5924E5CB4C735A74A76F1EF65CD2508B49C5EE4E417462059AEC7C3E0BB26E3AC07CCF25E94F8BE9D6032C9640EDF66FF5C6028415E255AE4C268FD560EE4F5ACE8F8195DD14C394B6438004E4CEC9D98E558E7BCAB2CF7CECBD13676B52F33FFC2D6B57D121A4365C7C4F0C9F714402214DA81D374D2C6C971DA110C2F2F67D763A600D2C877D90FD12261E5C8F844E39A2B5844DD3645A1CB6B634BD8348A6EC6FC7EBFA76D6BC34B7A08C67850A3E7DFFB8037E521E67255E9F0D454350C6F5DAB7F7934E2925E9AD5C5F46C82758E064C27055AF121D80A28FA95CEC8E7AD2C954CE7628763DD5843F4109401EA798DE22D351B6AE726FBF8367CC48D7FC8CB69B77AC39017F2B70FBB528A73FF167572E3183C821311CC5A873062468B0B618532F27105226DAF93908C53B2BA4FB234DAF5AD41CAA701FE178C89CEE28CDA27A5D16E86212741E64B8CA8CF2E38F86E61E43E256E10C489085D8F61DA36C4F4122BA69D3D441600B483281F5589B9C42AF7F867440D7D5D64A13BB18516887D4E0E67449D99D4A7D0E9A35D8B10101C19ACD50C5E033882E22128E67C5A64325606A180D71E0303B2ED7731FE7FE4E9400A4C53B266E8C54C62A98A81086EA539B87C1CA49120A230CC262A1DD09B4F7A366310D416A5F7B47FA56E581E65B311C74EF849A9706E126A64514FF9414C311C680D8B1826A57F8923A1C86D7DF9E799C95C9C0CA93C5B81C0B9CC941A0702B64333FC236A26A238BB00B8E5A2D836EDCB451ED10F6A4B953E556F0B5BF26B541A91412660B4DBCD5C045B21D656C7ECC8059BD61187BBE475364002D5245944B7F6B018AADB14032A702147466732F14F1D118BA73F8DCD87B79337BB79807B505DF07BC818ADB17EAA297369F5B420AF733274EC8F7A5D6C -MD = F483645CD2F72F61CFC3D4179672AAA1370457250631C896100DD748 -Len = 26870 -Msg = 64360FCBEA08DC8DEB3739D50000CAE1F0BCBAA62270E8CDCB7DBFEA04FABE01D54368B638E0930128753E9761D906E0B71902CC430EE46D373810D31D16A514A001C76E40D2C10BE853FFA549BB8FF9E96C31A2C8790007E8CF8266D2060D04D0E7F2754585CE6CB4F014A3A66C50BDE6B51EE81486B3485844EEB8F43C01D1983427B1890BF195D6A8AA7034CA1C8B01C5B5DB3E32DA0F8609ED862BD205BF0371E2BF78A777511F7EB31327270DF90164E9F647F4DA1C6AA6A23A3C52D60396E1987A65FB677DEF183104541D62493A15B91C352DE18417FADC023BCDC2B54413681F4888130B243CE54DAC669FF08D0A7E5423DF39905EC55D683128B7B48E3C658B483AB1015B7F4A9FC758717E0759272D5E82F87D3C3DA3B100FC320631B5AA86460DA88445BC2032CB3F866EC42BD660EA3BC077B96D03C967A2A13BEDF9FA9DA6E65241F6CCED2E78B93989BEA6ED80BE9D2BC1491AB6E89E8D6C4BB9EA80C00AF99F9AC204EF01CED46EA25E3EF877E63BF5178A4FA99DDACAA1C0BEB0C1EE6DC65019D54B10E0445B1C18B3175186522BA322D85DD549C8DFBD9F1F9B986A85E715F896A9E45BF0CAFBE9BABA32B260E1604C3B4BFA3C5B5E49D2569011604A4BEBB6658A809DF98FAE85D4F3DD048BED9128BDA41DF1CF06043ED881D1891CFE01DEDC908DA7557B38FD73E543499428FA0371E9CE5AFCAC92CAD596765E0039F7D79DE2B5FCDB0054B79EC07F7E064400C36894C653A7522B2CCF6B6416570138AAAFBEA3832491061E8D1790FD0BE813DF232DBC0C49C52A2C6A39E37CE4A9288033B66E23BA230BB9FE7126A58CB748FF008E933A8D787A052F00983284402BFD14A1FFBFA76AC493D12222E2C302FB19D7037455366FA8217BE364313B10FF2ABCA7E790DC94D9045CD5D2B3019A17BCE4432D5C53AA91BC38E242A79813B09E8AA6CA1764C1E70D018DADC8A87973E62F6947D41AED8D7AABA172741E1C797E778B5B7B08D9A6A34DE62245B074BA9C5B68EF9B91513328F9F4C937448CE70409337F5D0D27339A554BF629172D5AFABC1AAE13C4B6A66EB1C192598E6E2291D40B1E1BDBBC5510142681C55844EF48B55F1F3B90BE1E4536E6084F3721D67F6BD607E7C8355557E31CBD44B51EA33113590BDBE47CB0BE506002DEF056CF107710E53F70188D151C35548BB895C18EF8ABFC04E3B69EC9E96A58658A6A0EAC07E8D52499599DEC2DAE67E34A102B566F82318DA78BB52B2C63B13E95A31FFE836545C29E8B77AF6135DF0AD5A3E4B1A455E7A7844AD68898A4F224B8EE4D8C35F632222A87E94A43CFFA3C61FC22B21F90A0A01ED9BB5608178DC18C49B30620AE1AF0DDD3F56EF01920DF2FB3651FAE286282E83D437F8BAF3B73E0EC37F11F723F42327C87EF24CE3D84AC09CDFC8CA4CD844A6FEA95ECE79A3E7315C4B6A35CD7CA527F3E8C2EF4139073C6C67C12841F77AF251FA0B64AABF95A21E3B78C01DB0E31674DC5A5F24C94E75A6F61EA505F6A14E3CCFDEC559DDE65BDC1F5D3245288666E7E3E4BA7AA535D8C28CF956ADBA75D329ABEBA3E5438DF184D9BC779A7B6A934BE0DB34D6E8D9E3C6E6EE94B384B158FB7B6B2E166C191D10EAFC8931B67962A14B5DED3FC9A7944110ADC2D4E4C8EE2A11E01C5C2053B47C3B7460F85192A9AEF274AD196B629DB427036220B0818DEC5103CBABE9835406B677ED9E6712B148977F17786608C811803A750FF7C20E2A2DC7B704A642ED2957AB9923ABA72A7B4B1C5254CB525B64AD5D668B6375688A9F2A695518AFFF8DF486DBD8657D656B728B03BC62F6AF95D43BA06DBC55ECB0B9E6CCFC7AB5D03013F07F5648DF524A3E2854B7A920798B7C9440C902D5E78821C6AAC6A84692029B8D1B02809990460AEA5F56C9C6F8484E89B9D63AAE9E8DF2A886ED0D0BF38987DFA431BCBFAD5CD39AD74694ACAE5A771FAD966A13DBDC0B135F5CA99677FD55B04CF1C76DB980683D6028FC806BFFFD62ECE8361C289F31E37E0679602880B98AAE7E3FF2EE9A078A6BC62E1221FDF277C8C1A618D9D41857A290A2E33BA4682D3D84849FEBB0C734D4F1CBF40EA31A7BC759E9EB2F38DEF07E676F523091BB1CC59FFBA9670A2B20EEB19FA64F0C066B40AE400E8B1C62C027AD52F545FC69564D0AFF3A2EEEBC144D693C8A4EBB1408E94CF93A2FC555E65FB9107A8C544720E09C4BAB47BC6BD66318C2DEB4635C6020199CCB52B3EB1C4A03B02EF9E05799F7D27D24714D8112DD628E1EEDFC2CE93A29A314FE63D31BB83759C90A8605D472B0C88E9F6BF85892CA8B1957D7E88E757DAFBB4D2AA02E3B5B70EBAE90EA61D521F6CE3D6612A7B620761D3C12129135DA2CC08D9CAB8D668E65BED7B3D18B0AD20F0AF35018473E72BCF58CD351FBD1A8C46CE26BEE1B81DB9B923413FF147437CF00DF9204F9F264273FE1458F6BD62839618B3B5C9BF385F72D46378EE3BE5CBC5CB27A4E795BFE9C263DDB00878A8C20B14C1C3D67AF3BE27D021144074F0FE2FF96B0FD6054EEA94A2A2939A39911EA6BFD36069B22445ECEBB522DB39AE616ED89DA4F7BE6B9EDB2DF48E79D32D23F36977EA2818A3062E328EC84CB81E6C67FDD866E561805BE9D92FEFBB747C649569AFFE8A1AD35E9A1ACFDD7A7DFCD460E7C514C699550771BB0B62F26A5E50F24A494C879FF90A0AC8395198E81A2EE38E253F1284556E9FB938925F7F160B3B99B9F5D5C04D58F3B40AD27527F45E1AB876C232768EB01E188D623F509118F09E38888F2CFCF6F523E2354C9C757A6A78E0F050BD585FD3EDD4634530699F2F53155A24C446463CE3CBDEFBEAA2FA4B4A86E7C96B4F9914109BDD8BD7967E122DDE94EF67C6ABC75B3A18B1702AC717E5C8D11991404F444E17AC78C5154702469019C65CA2867FCD302DB9F4FD6C61825E96A76318B613F46312F78281D68BA466B87DC20BDAB2D2BA113003850429EA757C09DF21DCCA64D8A65E91BC9D92B9D4D3536BE154EDFAD8BFA3760165DCEEED4FF4A7ECD7760980348C2AC9CE033507CE28F2E7DE6CD89E0B93836B7EA2A5C40F2CF6F8C53C5461C052A989C0E792A382DF0C959275CFE4977737B7E117F6BF75AEE6EF496A1AAA81AA123228FC30E31E0955197F5BBCAC22C47A1C58AA613A1D85029297CE612748C8693A40014E25EA244F035047B3B50F19E2C81F794889CF11592098B07CF8CED3CC6CD8B03B5413E99520AF28A1AF90DE1300B834B77A9991964CE1A0C1D4A58FABCCF11665F25AF03033D8826DDB63B2E2235EB673E464FB370BA8A3E300859E2FA0C2B0E7DA5D2B2922E3199A0811494C6456B6E2C8B1E4078AC3E3E09ED7CE98B8CDDC092B0AE6218D1511F120DC0A3DB23494E0A4B6F214E740A06E92EF76E6922F6B2435A5B1B1E28A8104CF9FAAE94B763C16DEBA750FFFAF606003E6419442FA15DAE776F5D7B270F31E3E6831245551A2C0C2890DFB73C8E40918390D30A363874FD8615F88AD6942CD4EF712E38857C9196C2D14F3D8705A8AFC382F2FE604DE3B5D7E8DB1D6D3A9D96FF9CC3DC0B9397EA1B794100B325553CF94EB760771637B5D1BF91F3487DA7461620EB1577FE80A4D78A0D339AADB875C29D19E2B0FCE51F900A24D320C1F78BF136048F65BA0A0A6C92B21DF6D9AD3A59E50F5769539BDE33C0D14CD5BD0344657D199430AA357EE9272B77ABC7FE4FFA8E2215A582F5CB64CDE9C94C8F8330067F6D0ACD171C4152506BBE82B4D04CF6C878510DD38CBEBEE441080AC254ECF529B4ABE90786CE0D26054051C26083A836F9FA2F84A2DDA93C1A12F6E47525F78D522254FA80E3A55A9C81D3F3A1C0903B5463FB40B7FCB560E2E4107CD48C3DB9343BF62B8694976937686E054B6A8498B74FE04C6CF2FB087055F09C58431E415BC4D83DBF02190D3D80D419CC57B0D74C6274F3682CC9BD16018E921CD72638FA57186E8065F3A783A854B8D2AACBB0B5E49DC8EAFFCA0BB5B189196CF2E0F649581B740036C31D1FD285A4430C0D982EDFC56389B5E2FFD29EABCB76527206D8B19925E36F32C5CBC87724619ADD5053068349A77995D1B5BDEE8780F9803C10EE276CB9BE81C3F9D76B3D395D74A3D5A1D81E989F1A5F044EF146B8D39D9743641431E5D6079E8AB6C6E2327794841221F191AA5DBA91DD3A839732547BB848C86A6F69AB2D62244C2F700729B14F2C34820F38F6949FD99A2AC53271FECED5B5911979F252D99F11CDEDFC2B0DD0E1E6C087698C6C06082F1BADE7360A19896AC36D4F4462CB89AF0CEA5931742412C5902E0D79DC41A99F10BCCED51C33A19F799FDE246FA30003903E7A7D5382C8C0AD7AD6535CD4DC0ABF288C689FE1E11AE44CC1510FE8894D4926D2C482320420D64122A14544B85A1FC83F177AFC8F8C3BAE0D191DCD1285D7E906A75B93D83EB7A4EE3A58CB2BC2BC60C9D12573E3C0E2423FAA938CDDC50FB7C4992333BB455692A448752D50AFDCCD108C647F165A27F14A5B7E2544DC2ACE4F32A0CD95BA21E169D30BAB525452D27C325F28DCAB5C15BD370D1E54FCEEE1947B2C319D0DDF7A5BDEF59C50DD1AC4054B597EC12F9D14F73B0361C841829BDED971DB11ED125307C3CFDD39D17A6BF47AB57FDAD75E35F44F2B44DADA6027FCC21AD1C62EC9A181D207CEC330586C1BE1813F07EA5D02B47E2AD150591BA87A876D793CEC6C37500D4B0 -MD = DC69E3DDDB1F22D84A44A0146E31EB7C7A8311B44AB5B16B66014911 -Len = 26933 -Msg = 86D5E4E40E5012400034F808A1B42A5C99D22DCAF27169BDA17D5E02DEE12A9B4B5797CC8B7EF0CC6A04311D3EA4B0BFD99F113BF120122113D434348DA7DDE4FAC75D7D6EEC7B6AC94B9AF47E0820B7FCBAC83D0CE2450F9C0B0EC62C9CBC8C5D8FB2CFBB626B2D516FE4E665C6F16A1F3A1B8B87BBBCD6E0D67238D368437B18F9DDE5D4BCE9775641CF426E6D8258FD239A0F50EBCC3D40321CC8E1A45E64A3CC8DC8065F1EFE27B541C81D433B46A651A44DF2549D0E687ADE107100D3EFD1EE255F225D146D39A30986D13FCC4585DE7B54C4275AABF2D4E70F7FEDE20383274F64B7D702953C63CA82B1D30F3778A56F87C16B359783F6A79E622F156A1B3D17F8CE1B475DA4D97F22D2F2056D4A270EC083CC2CB7350101AD58E87C9ECB70B96C200FC24B79DEFE26B8AE0F571937A7914AD71775BD8D6FE704029A9D68113CB534F1F38522C2BEA5576631204C76B7D5194F1E041C2FF1E1526A89DB1DBDB24306E3DA39DDD3C0D52C798B42C4BD80B96E4E0612FDD2A612596DA9E4B05C483966B6CF3D79900435DCE29DBC9C75E725369CAF79C6BE119F8E83411B639D52847C5A07CF9B8123E1C30CB3B82A2CBCDD4AB221125407F15EC0860C1FC43091A33E3C3CF63CB06EBAFBD429A4885D2FCC5740A3AD3BC1B45BA13EACE38AD0E9708E71044B253A3E6A1C753520A58AFC56637FDFA1853C8245CCA90FD04B81FD0216AFDA57445665739603259CB9B250897D2F6575F74D30001ACF6750B72DE705A68262E3DEBD561E6AAFD2576CC2E3D096C7205C5DAA6F5C8A027FE56D590E1406EA6E97CC742B7D4D6C38124FF1D8AC309CA82257991000D465BF5D9D1E6CD57E757BAC4B19974B98E02BAA5A58F6B3B7F9075D512BE2045980392E0EFD20DB678CA428BBFD6B579A0BBE87357C78D3E0581FF50408CA3A724A5DAB1407D1800C16D84094FE2253E6DADD24BC328D401FA5AF42824C98108C154EBF0EA55FA2870E1BF0816F9BA5734293921A9583F0A9B24DDE9755E0262D1E0D8EBC3D22FE996A72E4ACC8F3BAC4D7157BF9BC0E4B944CD4F8B7BD9DC6C4C1E0EC55A8513203C21A5DB6BEA22E327DD8CD58B39771ABD4A8406FFAEDB6C926D59289605136CB11C39D60FBE1543238C4E4B7E838E40E310F1E297A3125B866275B72E96CE889276B5CB1928344FA45668EDB93FE6AA93194C7FA5FA86532F52B7BC65A969D9AC3FBAAF774B2882E681CC1D93EA05C29B70AB1467F785BE0B939CF45868F432D8F9EA926258482464F62B4738F738ACC068BD32E01EE78B5EF490DCDF745AEB96D320C50675DA74AA8E7852D45187707F8368B210D03E97165D4D0D82CA72E696D079AB23F23FCBC979D74A37BDC11A29C3DAC2B63A15CFAA9A1AD47DE2B89B9F0140990C6B4871E4A30AA4E21562DF1CDB40F6A6F9A586BF75C002DBBD2570BF148D638E5DA21ADDA5C4E20028F21C642F5C8FE11BAD39AA3452E9B0A06E36C9AEFEDD0A440A70B013B5EEDD986BA44DF8CEB87725C0A1F6C499D79DA432FE0FF64C41FB50D434F6EB38D33F3D00C5E1F624D25941B6F723F020807E7DB41CC2B6AD7D8DD8BF8F00F078E6DBCD6BD39150D1156B6DC19393B8261587539FC9D191A8BC943792B0CC57243D9322E4762FF5C846C67F4891DBA07BDBBB04DC65BC3D46A15CFFC29BB207167F924EB573877123C88C30704AE82CA4A45E2D7D22E9728799E51314B2E47BA119B269520A93CDD674BC9B6F2BCD69F424311B4FEEBB947CC74169777FB759232673CEC1FA4A7004EE5AD34E9094AF08C4E3CC7E9FEC6F7F4ECD97779B1CE578A6E162330800068AFC80B611F877DE7051C9A7D8E6490FDEA307F1A9D69E1187FCD3142F29BFF16F4005C1706ADCB6DA53D8853C1CF0E8ABCDF819A9279CF1E839344356755D09B45C92736BEE870AA8AC3AE30DDA625DAD4F2EC1EB30277A5C65017481E7851ED0596910FF0127480C526F5CCE94B7A4702A39C5F233F88AC96B789B2B8DC90DE0DB1319AF56F63FBB1CAC719BB88FAF89D66C0E4C26B05F134EBF3D087838327FDF216FFB253FD56EC68174B17D960CAF5BD5D1B7D301F24660EAAF9F4D7A77BBBB00464CBE7FB4A30CAFF8680B0CD3E200F974707565094555317BEFFF8DC7DFA8F2C06372D3948451BE271AC26FE439FCE480A71410CBF5DC96BA17C5CA156985D3647406E5AAA86322D358A5368CD9960557EBF3B4A920E417E8C3B32FEFBBD4D5E8E0F6C8D079F3910A65EC8B0D3F330746C591ED33252B6FA252C3F5ED62AF7AF230602CD83D1335C8F22C8884D80FBB71992555E684258D55193E83E1FF0959EFEB6D5CDB0B026407AE3C6C6CBA216C42DF4C2AF012941CC110E8D1D6F48CC6CC3482B1997EDE04DC3903ACE25C24EC8F01A6098CC3D8D25D8850B98053E8610C46D892276099CD41F6600C1CCBC6FE0D8883ED47AEFE15C773BF6A4BCB87CAF07F4D78BEAD1F5F8BDB3C5B930BF1BC86CD0E9173FECCC56713CE7B234EE495377C396E0F1688C3F1B3E83BD010FB3B8C6E295B755DC4A90B4C15590B2AE6CAEBA312AFDAFED675313A25C105710D9E2C4F94BED32E04D5ACFFB6C0DBEC2D7E49CDED210A6D629F5AB5FD32FDA311CC65AE1479B6AEAF5CFB9DACA69FC9A8489145B092218445398A52297F82B7A4B4A45D8DB619E1869E2D506E98A95617F88A6CA0014AA8E2AF32484EF330E924F4B9FED0E218631AC4B8BAE0C78C5FF1843108DC0C316A4115AA810719A7302502E31EAE87E70DF7D443C2EDDCDBCF13D1D5B312D6A11E582E8A83CE7F3B4E4C9703888DAB59D7111C8AA9A3B5DD0AE6CAD608E0B9A487CF5E871B288553546A77EDE76EAF7CDD94D932A4E2D0AF96475739B725713895CF856B338A64EAA094B8785258940EACF9F76C3BB43DB651150A42E131E75C369A0DC0D5DCB04831FB191E003F3AFF9ECBD4BB535E8B0B247AA5679DC6F209DDC6BFD2495F453C83523EEB15349FE89B0C9947F4886C5575393A8D0819C04AB3501BAC3BCFD2F2BAA7244EDAD967D3D74FDB3E131CA907D92A6A029FFEF473DF2D7A9DBC84F2DE7B047F442C28A384E95A220272FC8399EDE1F65AC48E4E520AE24F6372F1A660299ED1315DBE13061C104C50E7731B511FD2A1588A78ADDACDAF785F2E2711B71B8396CEB63930B9B8165F403B53E24C5FBD09557871FC457F8A4F4D9036766CB2419C785BA26AD4ECBE10B35353B21EE25F7E4F0B618F77E9F307DD4B838A5BE7D30558B38711DEC49F8D83086E84FDFF5802AAE14FEFCA04F269039D86AFD066A3BD1B858192D7E1BE0C3F216F4D836E23CB00BF6E46C23541B0DFEC530AB788EA899FDAA70F6039493F74A28B64D1664141A4ACBC7CA9828D6788E125C72BCBFCCE933F90A8FD19F80BB4B58E347112BAA988B3F3BC1ED95305721298195561C8FEA7E38D572836BBDC603DC38AB2103842B42E5D4FAA3EA8BDC63D167D503BC581122805934776441D6C22D5E400C094B03E3AEA56229EDE80014A538EE8C78DF695A095697EAF292475737F3D1C20C53C51518E83B5DA54573B7F53CD81E2B4B5AC9F7BF7316849C2E115584A32B028866FF95BDA30942335B917A04CA2703E04BBBF8D8B1381696A393540DD64FDF891B137871F22697A062459626C35B0783E2D47D7A4A6702A1FA1EBF9C94751DE5FCB58CF83855FFFBEC3A8A8E00C51C1C0EBD3F00091614B2C838BD18CE57CD3A93F54ECE90F409FA5876E09A6CBDBE4F3276D5301187F2E0F5205FA370A5CA4D607CB7EDD83195FC3DA268F0F19BEFA556C3DBE00F066B24530869E35299BAFF0016BF4EFBA25FB76E56F17EB6DD0730E5EE332508DFD78DE57B38BA02CF7B9E23F04621E66470B361D1FEAD8488B4A8A50B4090C8001F87B267957BE52827C9104931F89AE1BD8EC05B906A0D95FAAF710625D4606E6CE71954500A1C040EE7A2CA1228660B373934AEDBC4D63A0F36B2B6CFBAD5553646A41A8039E887F8D806B92C06F7AD7426A8BE618E7690480771AE3B650A6AB15BE76120A8F7E5BB4A898F00CCD1E8F7598E4429D0B28C7046D84C0F2F77906FC9403242C4022EDD654E1BA7F5B0D5EEAA865C41273EA1D547F33E521E3FD23078EFB43C51F5EFB06FD0FBF9C95515E33FC17EF452BFFF160D96742354BFE2C852254587A5DBEB461C9A46250F322FA7A65BFDF0E0D77500E33760CA484D5B7D65DE85FFB78FF074D56B3132686C4466B67855AB3CE0CE4E2AD81017FD5350EA1EB47BE8B28CD70168EB32895D3BB90EBEC25BB22354B45C26C45F79DA6B7298F80B2F2B6F9A41787F73065296E0F2D43B0DB9A10436648215C54C5869210E21FB92901E340DD4D302D48FE21D78A9656E68C2A1092AE68D77038B28AD08F869873C741166FCCCE1BB71A68947B0423E495A47385791A46D4BC0E9DE6B547F16EAF80F0D168CE78162EB56C475A1CCFEA254C9035424A12B0227A9CEA0E3CE9AE61F2130FFA8EF189D976CAF4DDBBD1709DB307C5C68A8A92887E495F432C61A5528DC195C0E084845B124EC7CB04CC7DD7AEB8ABDA091EB988E7E46B73A89FCC6AD0C26687041E43973079A4BEB5C01CCA1A59CFFD9CF6B0DA684A794E28D0BC47C01B2D7CA9C2BD2BFAD538ED90AF887AB962ECA4A69D6DB810CC7E775A01928BACEDABF83C1C777525BBC2B04809FC59E244415C20333D619848F11D18EE147AF3B7C07216A8E9FB356776091456B99D196B18C9A98 -MD = 2C937EC8C9E5DC2E7124D7C91CC84BE3FEE19548FB371F16AF4008F4 -Len = 26996 -Msg = F15536E09D6492D744CA18A46472953828B2D29C40AE14D478D784EC46E8C81B4152FA76E8587777614D4FC9C5D173D75AD6CCA2C165F259E71E11A6D657BF9F3304EF73D8808A194BAEB5A6E23661B7F051FC037A82FBCB4968FBB8FAC08BFE1DCD2F8CBC6297CEA018410F7808F42239431EB2222F96985E707E9C861351528438B00318F3F33B2895A9EFA6B4A0809EAA2D6C06D792E4C826CEDB253BACA0B9B3A2ACC5898D7C237F921EBEEF1F4A367F31C62B3B6DEA9934F31DABC5F44A0F8AB1498CBF6156323F09FE30A9E9BEA4C32062596F7EC633B8ADD3BBFB84AF7739AFC4D96C82652E7F7750F049880E45FFFEEBB5D0A3778F53445756F5DCF9438D1BE00B247FB7C269510392F3D4E501D2EE6AD6B6BB6077E46E3FA1AF3558D758CFE35298BFF6EBE3D560D612951607A30FD6371AD7A8A0EDEF929FD01A63EF4E307CB2C5A6BB06A8E3A0D60064AD1AFC984133D851C921E48F27EBB6931F4BB4FF26E9DB58E10B945134D0FFA700B3867BE0F9FD53CF309C2DA22405F69CCAE76B27D7DBB3B9173A63DA2FA02D9C397EF5ED8184A6CF71FEBF4468446D3A791ACC1984A5B067DBD07C8937EB3B5A7EDD5E4DD69F8931A83992A71A58A88D24D94AFCB27016961B26C70725D2B9336A4E61AA9696FD09DF471833265EDC3B95931FB47A09C5C9C4DF84E1951B78BF1A47E4F5523BA778B73D87351A8E0F5D1F6FB46F48C40224E5F058E4329DFCF23F83B504F9D646DE29934CB827A05AF0502B721855DD4176BAF83835DDF0094D358A41F24583FBECC63826CE1487DEBCD241098B72AD074019AC7C36A36743090C6DB88C03BEA0179A1D2ED6FCED2129C456B472D12D395E5224E80FBC67D9224A424D3EFCF806D8C720A5E5E05D741811CD148E0B92EC18FD2CD66B24E4AF066C5A30EE113FC40BC2458CB7CA399AE98D6F9266B446C420377FB990417157A368869CC67538DD6D76BF96BA79D843A031E46AEE12AE2814E7FFB53CD92D5A01E9166DFCF6C53474FEE3A0C8B27AE9C18CCF54515686ABBB6DA2F26DE0EC600A08115AC6BEB0D62223E72188EA6C7E8BC8188AF22B198973FC37168C6DE7FEC56CA1C6CC0B111D2F1013021F2749A5A6B3AEA4AE8CB8238A3A0F263D27B0607BF5B1D3A70255D1C1479F7C9E5BE303E4710BFEA89721001B0ABCA0948841C8056796C961776E0D867D0C07A7A3C2AD83CEA66E7CE168EF134706E179E788E6B8B61238932C760C86D1739E8B886C1FB6A998F981D1D525EFB690469DAA90B7D7F9F417EF1B87DAEF4949D621D4CBCA595C062784D8AD82BE899EF5BDB0556C47F5FC6ACB5EC3A611A09C90AB3F4083FD5CA7EF6DB63CDF24F2D6246DAA85FAB46F42FC8090A247B649677681D2D6B5B0DAAFB09534864A83D40BD14F94B3E926543432E8446A45FE47E95CB4ED632CA60FA4119EBA236A1FAE87F79B36E0A2628974D61AF3E4A1D39E205EBBA65B33DF4BFC26BA808B4938DE33E41BE17EEE6914DA50E015B985A95B360FC84BD59EB7897AA9B30D00F50A30D26559ABA3F6D6458F2EC46D5D87E4654A8C1598AAB491DCB7EA9144519FB1F4B5F87762E78F413BE102DED51D51C498FEE5E03F0B4A5773A17F09068FBE2B1EBE8D27A24D59FECACA91E2F2F5ACBE67DA112953634B51B593AD53EEEDD8BA0E7860AF8EA74A8B1E5045886D4422F70CC9AEF43368B39E0A173109E850632228DCA68FE6F2059A21670DD47F505F9E2BBFF7F27DAC9E63D83C451717AB0B474E257066C8C882060E9A08A6A45F8AA57C3C1E63EC86EFDD7F1A2BA4D6DBDEF28CD92B578221BCDA661F4DA0E7B43F89D060382A287EF65C336E7B97887B640A14D08F4E0D1E5D6C15B828C7BE8DA78B3719AAF8AFFB886193597DA3D7ADAF9CF1FEEA5CE5E09217941F878731575C272B1DC3AC311F8ED20D95AD10CE4B7CDBF2EB7A3E4BC2FAF4DF919AB602EF9FA0C1046E57CFF78099E4B06B977F805850CD3E164D40558BE57FF8FD96ADF5034722CCFF0C2B09A6FA7CD33B118E9FF1AF5B426C824E7EB325994CC42167AC9A0B7B996436F5021724E226AC65D2D4BA1634B628A159CE286513C7325C048CC6861C7C822B766845D56572BA2F28FBF7153FBF7E36090EB172845887A67BDAD57E2D371034E3295EA0BD41DCA8E3BE28F73306AB00E10C3B786BD95FCE6DB6FD225E2061A5ED11CE97E58C57DEA03BDECF651D84A5B1C9C87886F0AAD8641339D26421689FA5B3CD7EC6F2F77AD2052B63ED3B1C03C630D376D420ECB92F39B95F9276ABF28810EA624BE39E11AA6D0021DD1D64FCEAA279F188AE50BFAF2F81E65DFFF04C5FFBC9BB321AA0FC6902FDBA8F24599F4952D4DD08145BB94403FC16F86B85A7642BF73BE629FC645ABBE48C65C7D164286F2BBAD3E8506BC35E11B8A13C0A7EEE3162F331639BFB311141699976D30C2620F3B1D411F7C19F7EA7B6F8821232D182AFA1973EC116E2F5F4AD5F8763DEA502AC8677B890FAAA13AACD74D178AC4A09040A1C8A1582AEBBB9C584D6C5256B31682C967A9281330F36BF0B69CBCB80326FDE6255AE53F5D163E00ED38D3199C4142050992B2BAE2055FB108153FD3712F9AC7A1EDF08C8713C883F38AD9521E20DB84B69F66B532EA9D876C47ACACB0F5E8F728EFD425D61E38FEA9C37CB5275851D394C2F4CC12163DE83BA029A3FE70AEF0340334875D6FC7E4C6F2EC2EE843811EBB07E643EE6B46446F1F01C8C69C832BFEF46C17EFAF813C506736C925410ADEC1001494B0AF3C7A54FEF10D13744AA60C48426D4E523B814BCBB55698EEDA93EFB24DF5E88525614BC5A01CC314BA14DD61FCFE07EE0313EE6BB875FED2807CA3EA91656112576E67B1712443A2658108849D4447C338B49537936CA4D255529CC30C3D70772E205DEFEC8E1C9D514B25B40825FCFDE8ED2EE577C537F5CA9FC0742F71ABFB1AE21C58DE39AE1567BBA94D15639EF4B77F0B33925FD2703EC5AF649DB442D82B7AFAD12B614585BB4D8B4C128EEF170167E45DA0A24529133A385F1D11CC5D82047AE1BE0E655598098FCA9AFBC404078F5FCF81407907055729C15D62F5714317A3CDBFF00C16349E0CF4C0F6617A2467F13CDED5FE374074C46B05BA4D388B0A3C9ED9DEC6C51042DE4C2AF9516B0DB31973B3213C2BD979CA9F9173ABD2747F2A47B02FB8618014C834925A2DF9D4B954D399E9169574ADFA3B9AB5CC842A739878AD4FBA6380776F63A5BE5345CC7CF15C9837701BA853F2D9EE2A48779C12FE16697E1A2ADDF50F24871BE8CE3CFC4B7643E3A3581BF38FCE4A399B94D674F291873AD758CC46B8D4DCCB1C08A19BD6674B7A1D41B9434627A6CD39C6A997FFB10FB3C10AF88A70F8414A0AD6A3D76F97E4DB86EFD56F8D7BC48CA849420548B73FDD53EFA3FFA8A020921C2846D8C38CD513B17572EF1BB056DB607E4DBB7EF552BD76F86CDCD69C34126823DF499AE497F0B83B13433427916EFB6DEF3E8E565FDF6E10CB9FC94FDCC890C4A5B702587A24E08EA4A5E84222C222ED940C9EC1BE39E8D1863877FE1D378BA38A43A84E1BD3E4A2ADA04EBE12359CB213117EF3C11CA650E1B60A640917DFA8070DAE879004AA83790173A976CD6662168B921C2EF0E58D225023582F45B591748AA5A43D6FF8EF470820061241D02987959688A85A82718721AFE84223C9068B784FD74EC43A0064F3BC09092E936C1C782A49978D81FB6F05B1FB9603E600597A7954A1625D12393A2638EA983F74B7ED36ACCC4E3747DB87B5D6173B3AA670D7A47C8B8BD983B84441B5DE0A9B65138FEE064DA0CA5A47EF216290FFC1964CF83CCEEB23AC426086AF8ED94F97A61273762533F92905BA300082476AE8D8298070EEE9FE785F94865D5EE35DCE5ACD0A9A54A8FB18347615C0A0F6ABD8ED3093DD6E4704E9ACEF2CFFCF2F55D0031E799F265638CAC792B406C51B0D0A840682D8148A14B73180805AAC41FF172AF42EC62630B1D1D741A2ADE8ECFA0DAE2C1166899CB66D2392875866B976E4A792F70D2183F235B2B3B3759F977F342D51F84CA1C5A8B5881E7D29A14641DE5C56EABABEDE174AD9EDAF1E5A4665E5C114EFA005A0126226D7F49E0F2881723DA9430714F26949795C0C503DFEE8FA3C88986607FEB35B9ABF0D19F2944541BABBD5A2756AB1BB5D6EE1C166467B02E56197792A8E5C9C6B14083B1BFF27461A74F2680E29A1DCDF35C4D7C3C18106952E5890A70DF88218C4AB3A8448507F997F1CA1ADFED7290D1B2C86FE5A8497AFA744C252C9017AC6DAD17CF6AB88E216B97E2B055EEE647F274D06601739162399A89D7FE20E4A0FDE4819C91EB22AFE5FE2A6DD91E8C165AE50F20010008FF4CE9E66EF81B82A5AF9E73722586C91541EE16DAF0D4E783378044BCF1CA0501163E50D4BC63FFDA6684992463F126282AA3450651CE9FD3CA8254DD2F309E9AF3167A4527FD68B335D3367B3E22F10BDB68FD7272C8D72229473B34FB79B9162ACA39BBC6CBC4A478D68B888C3C01082E8E6015335D151D7475E27F08D2A4B7AD6C82CCF71923720C57298B40BB5B3CA03CA5D5072BFD0F5739A83D20B378613E7B07AAFFD2909A81A24F557D9635DCB9D9E2476C3AFC1FEA320FEEC27F17E8449267DB6A183F9110892F9F8A64266C9CA9B42B356AA9DFB8D4A9BA146B855765BE8C1F92887C9BC575A605DA001C224457ED82A3ED49B7F4AF1AC2EE2E88BEF1902C247750C0DC20 -MD = CBA3314FD48239EC7648267754EF1E237772885451A977CEED32AACA -Len = 27059 -Msg = 869FCD75DB9BB834580BF5F7B1F7E5898FA222488CDCFA2C696B1CBF4365529010CFE41C40C742F64D64D33AFCB6629AB5E003573EB030241DD8D53E495D16D4CE396F62B04C14FC6DDFCA7B52CCD7E35D9D903D0037F361241ABD5AB0FFDBC3B9E1B89F032D2CBAD1DAC9125D70B176FB80B58B4072BDFE68A3D1769D9C7250D2084FE72E88902C8D3ACCDB1FF68A1F030F1F19D6F7B0A828CC6B443875D1C76673A2D1E14D41BB27E1E64D1AFBDC714D57DBCF1CCD894CBCA4F0CA1A9A26EDA980794ABDFBAD5CFD867EB5D0B02EF76F259D02DC534AEF247D5514D20099D4F0E5BE763AFC6AAA9002F2F658045538ABBC221743981AE8DA5CFE50F754E3E8304D0C1F4F05FB32D2453F1628E3066CA6EF275E31B975856A4F51A86B122BAD4F7F28620E1AA29844D7BD6A761779E8595730D6FD344504F4B7B3C825DD75A61268B5CB1BBD1B43AE76198E0CED59E8FE56DF11145D98CBD7C5F33A1A242774B9366994A4AAF476440B913BBBAD8AEB40BCFF1AAD19202C5F8C63872A7D7A1DD2FF237F3296E614EF0268D69A78AEE20E51D7043A6C4CF05141621BD6758741534CC4CEAEAB02CAA2529B3FA0ACD76A533DC23B706B2DDBDECE415E54DE9973C572AC261B2D946EADD02A965229FE82171F1ADE621EADE329DA9DDCB14FCFC21E758620D7105675FB98E5AA4A0B07E48F0D006F9FA2167658F19CA50D05BFA0FDED3FF8E91F4A406DEE4D3DDA8D49960E48A8C9A769B3C5808F0A51992E90C7C0270F06E48265E018E7E2942FCC6C8962178E7617976F533CA150F1A3A7B2A7344FA525A2B1045835F9290CFED71D696D35E5C5EF691D56945DC31028DD2C19BAC8AFBC57CE2739C3704B254F049BC435B34EB2D5C932BABC4C0ED4C02EADF1005822D0AC25064B94F01F5ADFF6D4D20ADB8FBC62EDED518C5F4485728033F9530C3400A2077B2B0AD8A01AD98D9071DB0CB8B0A9D7B71B36AB194F5786A5CE0916AE200BA2A0D8956BBA237A8C512A3088EE739B1141E16897291C5C740192F87E46F13F61ED09D208AF1367F3D74116ACF0EAE8A96F6CDB89D0FE9208851A59E6F1162DDCB17D36C441A7EC9C95EDE0E0CCF4C5CEE5FC22E726A252D2573E6662B414E1EE95695EEAE408B560671D08C7D5F5C29207E95EF1E60E9023457A3BB22EBBA5591307FF2CAF18DFB8DB0E6895CE22A143EE292AEDF6DEEB6CE44B75498CA190C98B1F58D792CCCEC8BB774A83147DB20B448DB13DA14528CD50C2F001CF294686FABF6E36885A9E6D12EC89E6DFBF111E0BBE332A2D0144C77997A70960AA56AFC6E96475729F74F94EC444091BCE6C11E103C8A75463521A25678DE61153F17C1B237FDCA697D1AF44EA441B1E725CCFF3EE451CE6B471526CD65C8994D50EBAC3A2AE7DE842EADF4B756B166458872D92B59CA56855D28CBB154689E3E364D0D75B3BDF93D0843F15CFC481A78EEB311B4B5BCD8F9768E1CDD70EC1CB4AE16D6FBCB5D26E5EA11F2A32147146237F9DE0347EB809CB4874337AD87968B4C1649766075FF916C635D877FA60A2F77F2E5168AC59DCC9279167972A15AB2665D7C442EF2C350AE813E5B35394682BDE01B48A9C765717A3BF6D4E8DB2879CBA0B5A9E34CF6AEB5D3A765DD98FC459D530BF8CADBE26451360B45D36F1817D97CE0C1739CD82613CFE8A8BCF577DF749C59B321BBB13201451F0E2935A80978479D86E5D740AA84CB0AFA68798D0198DA77BCECFAE8D9FDD931447A73B14556E218F109ADCBE42718CB54DC5C441B95EF2AA96A96BE0A710C6B7711C93AFC6F0EA821FD5B8530C2C63F5D6B85B91C0713E2107077E3C8102D5080FC0C5D092B1420FB8E8D6019EEFEC95C097841B1F0C53DB4E61DE5D5CC8B9AF4ED48B19A7B6C384BC9D3F53AF8567CAD13530298F0DE492BFC71F979CC9DED67FEB9058112195BE8A803EEB7B6661D5A5D9584BE5E5CDD1680C07F10E185F6A1DC53AABA185A577E801DCC5D326604B3DD1ADEDC250587A80061A35B6FB3A51A2020EEE0CF8520018654072835D1B9D97F28D3BB4E63578983C7C099CC2DD68638854E9FCE65F4023C869D232FD29A21137BB1934FACC5CB975F72B01E77B681DF7C830F7F2973919EFA392BC11D30A9FDBC7C3F4F235AA4B537AB078A181A80D36A0754ABA89D76EE526431414126553C68B917DF9F4D8FF17895DFCC0F1961ECB6AB2F3B0DAEDBDB454F6B206150FC16E3441AEEE95B2F0E3F9B43E7D4185E220714D76E72FC3BF2C5BE95B25C290885F3005F10798BC3DAC9F54DBC8BD5CA87BB9A6A553B272F144985B5C757A7DCFDFCD1788D1F0D04F8FDBA422432447F65FFEE152ED4677DBFC0DF4DE725B39F87C33F18D8763D8BD40077D9D4393C3662FDD0B4DAD868240BB8CBF213507279D1E31128E003EF4F9816D7EB8A6D36F2C8CE499B620137677B4C1017A0D548B341AE504EA336E5F49A12A01EA3D92C2AA17CCA5B35FD91888AF88C2B83683F2309BDA5C8E405E050E0B84EEC1D2CAD254E9DE4B2CB3AFA4E3E6D3CE17DBC1A3290BD35DBD42E864D4AF2B2BABBB3D5B3E6C5D9A08A951A68CE8C5F7DB0D7A98643277B63608DB5EB7D14F31A2E756D2D0F7CBEC94D5D269D7F462D28486D78397455C77202380FF61A6586F13400B451EE9C8FD725910139DE41139A484AD20949FC85B53146BD9D7B396548F9E014AA2336761577F0A079701ABD1CEE7A403E38A7C1017D350759D7968E8CC21457E8CE295BEB9CCE9D6CBCDCB10CC7B86C22BBD1F684D2C3B02808B1384FBC2E2D550644EB283923E3D2DBD492B73FC967F952986D20933A68C5B1C57F88B26E88F8DAB0C4EFA5F61C12D3145F49A7936F1D0EED8A1991484C7C5515BFCFF45309092CFED7804E03AA7C42F4BF103BC507ED0B134A6DB16B306718A9CAC8A5F8D0770BF9AC6392F87FE252B8235AADF675F74563416A44517B56CFC954269C34CA87F3506BECDFB680C07B981FDF73F509F598D37AEBC6E8C5B47C1B66BA1B2A970D642C2FD38AA1F7E1AEA74DC9C34856EB2606F5EF460EA34A551424977DD81998C9E2CF556C6A39D0D91D34046131CD43B7A8EEF0DC515B79720FB5E8DB696DD2218E6102A43530C0975501F5E7681ADD7579E5D3D14CD90B2EC326E1AAFFB7734D91BB5FA6EF00888DDFFD83CC055E6177A5D8FFB13F96D1A07E4DDC307C813F19AED4DCBB691FF32156F674044CC901578411114F27CEA5549883CB7AD08011FBFB113776233461F3FC9DFC7E7D19725DF9A0A6D587099ED2C86389C8F0E12DAC51DBB58797C8425E35BB9E06208C5D6390E9E77AB88EA97EEE386DAD5C35D702CDB35E9748592F79E155CEFE993F07F94FCC6086A4E189C50EAF7F566C77BD300A02370768D8EC794F2AB11E6F2DC7D3C2FAB07B407A9D191DE85FB074C54EA4371602140BF0883CBA44CAF4D069E46DE88582443300B2650674508187173D557D14A8ED2EC623BCB9824894E49986303FF7E0F0F06378EBB609CF26A19DB48AD4D4C409848932AD9C006A9DF0BD7DB5802B4788C9B5580394631A7DA3356FC0CFE92E5E7C8E792035FC632D6B1A696179A89D2FEEC8EE3EA0796A81B87B347DAB520E5C5C1A81C0778FC7B589CE966112DBF0343ECF6F8346222A81EA6BB2C11513CF19C09B15C6FFF31D41EE5B16899D8DE64B1FB8E63B26F8AC0185C29B8537466AE12D272D2BD65FA90F672C17D03639D8B54889CA65F944433CA4F8A8E908F0D1A7AD6ACBA2B616AB34876DE89095E19B87E901079AE93E2A72BDD29156DC134CA08C822BBD04900C6DD24163BADAF2ECFFCE0C576CAA191ADBEB8A08B9C7EA993CED5CE1A3AA021B7669933FB6A41C79FAD4891E214B647ECB1252D018CF64E9DD3D51C399A3977A4567F5F55C6ED4B66AE6317A6C3C00BD48D71F003A9076359D7EBE81504D50B4F4E7234A62581305E6A1728A202502834E9937EFB2F06B3F751235278B6A39A1C452FD56D98333B0BC6A0E32551E45EE94BC9AE8050956161AD91E20E9E7ECAD7AA07F325A8F23612011C5D5ACDA881F0C40034FECC21A531CA535B34D639264032E84BDB4A62FBE76756F5170B60A14C4F483C515FDA44314B3913C268487BF414884D80D27C7BC4D4911AA1EBD8A05A18097907035DE52AE915A8E511A20CB85C0DCC9BBA93F00ED3BDC62D74A5619F90B481F0C4BB6D79E5D06DB419695F465AC531AADD6BE9BA0C1AEAD3743F87780F725E7E72F3E73E08CC8ED71F330ADB9610D361958E82D5DE3BB95A7B974A67164FA080A2853E631D500C3A1819A30FE49A61E815F8B784BBD379FA9251B5E9C8B3C43121D7D8B69003159737F945475C2BDE5FFB2147935C5C94F7E6EC3EB141CC97FB2EFE0586B1921BB6455A797B34B60DEF5DD62FE1DFAE8EB0775A2E334781D4A4BE01FF1E389261BB8DFF87F646FA6B11E481200FB13CDF13DF605D24E8AF8A11DEFDE139D762865343922907704E419B2AAC731F9665C86D0A88268CFA8D6327423BF33E72F290AB231D6A08866E99B4296212CA169250CDFA9D2556796E97B053F3331B63897A3565FD7512528B1F25BEB951546A91B1BD74D129D09D9E514D6ECAEF291CB994B0F45E7143E7C551259BC8C0021DF4FEE8302EDDC740346A4486EF367D8834821C9923AD63D11A27193C84938A5B7CBF107E80C1C693CEAB45618D8EB3FD7937C2810534266DA99DE90EC75D83257D4E168F7421BB21BBAC266E381A4CB13FF67D9BBC928F5CB774C516A85BA4721380 -MD = 20236AC48DCB1B72F21DB45983673F19AA2B51C3A14699060B83A526 -Len = 27122 -Msg = 7B2888E9876E46F4C9027AF731122005D643335BAB9F0E5814E33393FB89940A8E4A23ED59164CC23625139032378837CB3D3092EFAD7CC6C2BD8F1A9EEF1D314B7BA4EEED2CAB64C5955FB4362667F37A894CDD61757179826BBE862D39297E5162E5F60CED9F3E7F773E3DA4326B5599381E92C7E298EA0AAA02F3333AB228A2C018682031F8260E3201AC8434BCFD18C16A90861147129493E4DD208F04049C67BF7D034E125F0C1D74A344C0A7AC4A0EEFD56DC41C88B91499776030AB8E185B447CD868005C8E3E8255D3F5D3FB2FBD04A2B3E05C330DC85817B4EEECA79325E7F39D93EE2D44038B25B7F7CD03B36028F1D2BBFE7CF721A903E89FB73CC133741ADD3DB8143B4348C9C28D448523F5EE43FC7F5AD69712B464AFE5C4AF40830F6E3C54D4C5D67CB2330013C53127968C6CD18DD46D7382447E001C3B441977B7AA70D20AD05FC15A433ED6AFFAF98D6E4347D313E779047980ABE1C957BE8F11692D883AEA314FB7822757342A66B28CA2F6D8EC2134F1C8B8CE3ECB167B24C478EE3D485A604EFBBE4A7AB03A53F4A9855A7E554043747567A85E17EF99B5F4C9A52E13979663FC7EB53C8CA1E3939867D4ADE89DBDEF84EFCF67089E30CCDABCD28D61A8C5532A38B63CB8CA06E5F58C388867992316C926C0336CA9EA9A672DAFD5F27B5149FE7ED284301792D469E25C2BBA790C35D6499A8D1AC9011D1C55EE1088E802B33A44CEDA4F1D4A8C110190A1E218B9749051CAA2C977455CA890782C086A6716BF9621C5FFB25683283AED551FEDEF86B89E3ADBCCF4E28D6CFCFB8EE736959D7592EC491080B34FF8F161E269AB48E5226644EFF080D312A14679BFFF6D311224086EC7FF1EE72DD4A8AAA44717F17BE2296A5AB9EA4E0132AA0E366439125DE5B7BC5E40E10F643B53C16235707689EC695E549CD1E0CC3890566F88954DE95169F43F45B4B8665C213B6397ECBC1EBBB2359B4B08033E4C8062F0C53B258C56FE0A1BA14F6A180A437267069E06D45AD1CB83AA58D51838A4F54461DC6D724024344B920D815430495FCD9C5C8293864329B07AEBD9CF465A481A562DAECF091B6841EC91998819D958C71E5C9373A0B33EE83EB886EC009EB9FC04F5D48A11A1DAB3C7F1C30BF982B665C484DDB0C88CB11E3881F6B4AF78F29BE8FD9A206197AD0C712CF77D36E6A230168CB593F00572949B9FE50B48C108C66B9FF8D00995DEC31A7A19043FA63A55BFE0AE86A9F14E030A1FD961BEC0C069731760E29A030C445BE8D992961F4E58A6295E875734FBA6A6851871BAFC3F5B56EDE68A2C761B9640E931DF499006C97F196E0C71BD60FE7EAFB0B5E914BD542AD2795D0F3D39CBC578C0B0F629811D054422BA9F1433CF828F61B7A5E453B3B947EC5FCCC7727A998A1FB8571567E8E9B06ECED4F2E381B6D6162445A85FA62FD65FBDB51A2E4650B0237CB3C9B6BE52742F8B1D3595273BFDF61F2920E12DEB796BFB0713631E492AB4A10C6BDF190835C62CA8AF035F05206C9977625BE574A8597D18D8D2D20395D5D074B08A4C070DFE3C95547E09FAB30D53471B7ECE9C4476AC783D25B0905DFC9E89FA1C6B1A621627B245A8C63C0EACD5859A45F1288358C348336C1319F6AF8F3D2969406EDCA14E50D2F4808C9B405EC0321C981A7B7E394CC249CEC9113CFCCA49B8F37A213416155E9D806147E8922E5F3198FC2804D88223DC23948FF0F0244044E8881424A499F63DF50934CF6DB7A00A504A3556A522EE0649DC1C7C4C4DEA43C8E6C1FE23DFEC341F315EBE8C4C76ACE29B44B3A4D7547E688A327EB024462B68CAF654CBCC84CF37B406C25310B8FCEF1499F793A27579579EA749D075478587B3C2027C44D395B362602F104EA6EF29DE7AEA1759050AEEC8D2FB1AB6535B77D71013090E1889B2689333A5BC9201606BA46FED063D6338AF61C58AAA01E6B5CDC759B0266326199F073C1449598D80AA00F39845753F8171825D3F64A04F17D770E7F3C678A357C638E4D2D16F6771B05600589C071D9AF11526DC5A0C0F8383874481B828C5EFF230E36D24456B83DE86D549F414CF0FD7688C48424D0F4843E29FA3C379DC1F97F76A13A9C3A7AE325CDB131D37BF3E0580042C78D763FA73DF2CCB3106F5C11A29001BC568552260E891DEEEA1CAD17AB14FB56D8507B599DEC8617BA39BC6B7597411E6B64D699536531E82E8C3BE540CC8C1578928CBCB436C06837627E65BF065D1B9B3E1CD4DAE80F17CA031A58F22BA33DF1D0CBC3391C2C9AAE70701E6A1EBC7DC22B118869C4813948BE6A09D0BDDDE6FB3F04AE3031B05A755EFBB36BAF3244A98486B859D2C0C0CFB7518CF8929763619FAC1FE32BB5F9C8D8DD8BA393CD36FCFED5413668F17D54D4F38B31D563BA7F18167F2783BCF43CE0C7D6A52CA4FC73BEFFE3BC70CA18CA17C1CDA0506C811A67A79D620782743E93F5F1A0A3F1198D7DFC9855730EB777A84485E18F2EC227034318B00DBEB98B0B9B739F234167983130CD6DDD0C677B1282B2E9AB5628948446A1343A19B89EFBA0CB132AD3C4D21AA3786E27384289501C5685989EA1C5BFA4718175A650A6D747AD5A64B6E6D509E15B6E3D05BFC004D1C0BB23C956A7E2E9A649AD95611A4824B563A00D178F89538395497F2AFD381BAF3DB338F75D276161F35F22F9FDF6229B84886A82600335273BF8BA605D8904B144D6DBFCA90AFCF6BCB132522F414F1E65439469A3F165E15D5B801F88D59CACA2D5B282C6659EC2B35DE0951F68400205B8A398CB09BEF15F52F0E376E2989179AA8ECECF6DB670273501A019354A649638E27B27F3C85DFED50DCA755729F2287DD4A742B21232C0D99C42BB78A9D1148066C54B110FE0D681C8CA738ED8CCA64AF1C9EDBB53D2FCF15E14063CF4D3598F923FAF0EBAB4FB4DF8DBF887EF00E55FF846B049CFADD3FDB63BA9987825B09F7C21C27A61AF6BC0F3ED0F599BBC980B30F0A811F22DDD527437D892A7A2E80414E9E1AAF9606CE66DD2B2864B7F1B530785B872E053C8F1F1888E4BE93A7CDC7403EFA0648D09193D91B587B258372195DBD77743956E820069F613907EF60C9BCF8D81AB0652A87CD52452396B47FB2A992400ABB25367C730CF28099B215A59E7024709782BA77FE1F54FA970AAFD8B7873D965C6D0E1F70F721C1B357E4E74CEB11D8EAD7CBB228EA04B37F569FE51E321CCF5EF96C48BEDEC31CE1D0E70FF3A9F3B21CB1FAE249CAEC869313A89B61324FA4F920FD9CBD3D0F6034C3C58E827D819AB303EFF3C8CA121C7131D686C4A228AE98337DE8B8E6312921384999494EF62B6C2B14D5CF0FCA2C82841EA93F3BB37E2EA30DBD8B888FA28C3DF8AAB88C7FE700769234EFCEA6687A4535A91CDF3E23C61599935FE0A58E5B70CA4CBD51DE46FF1333FA9C0A32E87D96CA0BBC6D2C832759EF51509577FB77A30B5E7CC770879C9D0F605889FE4A8C7D81FD0F6722A2FFF5FD529F9126B95F9BE445EE0B1ADC31F5CF0A2AEE785BE8EE89CF43DF778447D95FAA2637BFF0BEB17EA4CDB264B2847EC2BDE4C94EF6C318E6CC7EACDFA715DA60539D862895A66EC547F36633B12AFADE245E1DE9D2244A7F26008470019E4FDEB48CDA4CDE643CD74C325C9F6692188B605D8D7D920F01D80F46F41CD05D33E3F348BFE4D21824A942513D81A3939AACF13AE1DD871523E990A9775775E0F0FE5E2B4475DD426D5792557C8A5445B79740A46E77234B75DC051749A4B04A795A8191CBD0F2A912B70372C420121A468D6D1EF0B38EACD09D61E68283C7F5A55B2865D3727DCC6CBAE3DAA5BBE5F0F9D7BC99D72C69BCCE974A9835144F59F0EBA70B7D1E28246AAF872176339CFFC1AACC0ABDBA0C63629BF71B51EF926D82182B4AC7A96645DFD28D82663F421AFB24D64092F0F270A78736D011DC2A5034B8CA90DA1FD373ADF12954883F1DFEFD87268BF408C591B81FDE8D60FF54C0C69EAD88E4D389104FD8C3607A1E3676CC2960B4A54D2AB2970B987B8B69ECA1F517AD10F2760CA6384607602EA85B3A692DFACFBD939E8C321E5056DC7890966BEF43A03FECBC8A0431FDE5B5AED7B61D9FA1B54B67F7EF785C75A88C6592D3E8EDCBBD4C8C6FAAFE6C97116AC7172B4B581485D2A7198B91B21A5CC2124E008BBF542A4461DB5C62E26E040E511E4CA7C83E35E3E8AC0A854934634E531EB54938B3EBC6FCEEB4EA845FA3E4579C2BC029342801F1889E8FD9E6177A6B42038019E48453524AD0D022277E3F8C7B09A06BA61EC6B508DEB1E1ED12619126F83F571D995B6AD2326865DBB692DA7D794CEB160E63D75608FA18CC4D1E4379BCE7BC15F6FD06F203FD2EF2C9980C3EE48E5EEDD05B836E07D1C2607913C0F65D7BDBC3E286718064F6489C03EBAE1110767E2FCF42868AA674BE87EE6374AFC17CC5222551399478B2DDB741714148741882A36690D7F2BA22AF3CECB4C708652342CB3B72C2DF07A7AD337477195DE3C29103483D7473C352C8D6ECAA52A19BA83C8992BD495C480ADD986FED94B6CB40DEB180EB81ABC5BA82272AA77C284DC652F36C63A5AA5B9AD32B2F2DBF11616C827F3BF4391F6953ADDEFEC35EE820A61B84F81FF0D1348C44F68ADFBFA254AB8A3DA51C33C98432A5ADBC558549FBC3692B6E13C5B4BEBD97ED2257C4688C5E944DF94E08A059D26E3B182B05F30FBA86C056AE10D03F2529CEDCCAADA21ACD415A075D5066295162FE1782A63B8EC46BB1E205F9EEDA00 -MD = 3452F1EB763370DDA627696EC9A948DA241A3219717DE2F69953A6D2 -Len = 27185 -Msg = D7D0833B31D28278147CD69549BC15D643889D5A83FE6DA969BCF9F666483CFFCC22B1A74BC209B9C8FDEDF8651B5F2B29EB7825F73B9647EB83D6D26BDA0E99371A8A18D6E1C4F715E0BD590C41B8F3721781132288F162E9B1FD3FB0538855AC26DF3A97CD2444FBB200ED6B7E80632FAADE8849C2F1672FA8B09AC7EF9ABFFF39893D6E801D8B15A94915890ED9E7A2BE0E7456DA6949ED03FDD1C00F876B4FD791E02C2790C261AA8FE2F63A82C2CCADA8338223858BE822521CABD1D132676BD3A15FF08F53BC2275A8B0F5AE8A37E843081DFFE653D8FFEB00D0FEB4B3F2590FAC50A8BDD32A51E68A861E02B6215F81F5EC0F8D80314F5B7BD3DB2A68A978B4FE37CF4C459467A2C16C710092DB18A8ADFA7C7D85134FD7D6E455B134898389B5E192FB3DAC78066C5FF11B656C47D4ABFDB792F8137AC00F720EC0A3C565C14A8E68DF230058371E5B713223610AFF2435AAE3AB9634BBCE3473AF049538E400855BF21F2AA08B5DF5BA86A9C40FEA31A3852DFC94BF65C1C4839BD375BA8FA5F19CFE46B30C93CFDFDCEE7DED7F0FC2C29400FB62F96A27DA68EE876196AB9FD31EBC3133A2F12322F57ABE09D57D5074ADAD6381FBC998F8B02738AF92474209D78E381FF6F4D3DA58B2C7E06945A7036179D6E6E8174A6A1AA322E2BC398A45F77051EF1DAD9B765DB64C41B5EBD990BE143762A2BCF2DFC4AD1F6744E6B5FEBAC380D7A912F5F630F54057B3CE86902B64E50F3C3280175BDAC21F73508F0D2EF77B9BC0640445E129A76C1CE37248BAAF584CA74D0794107D7F3438706CDF784AFA2C8ED650456F79DDFA604723F1416220EECD1323C60FBE16DCC5165BED5F38CED9675C23D839B0A66025A55FD202723AB103193BC112C554F7B8141C0A08EE4CC2DA834A013115B826E12686EBA0C9D013465ACBE90A53974CA031447732B8538AA64C480B97CEE3B58D0F3943383723D43A888F8DDECEFC3D25CEF0E22D52FA07A3395FF1C7E9165AD95103193527042152DB248611FF80CCDCB9B74717393F9614C138FE3A70F514FC1809A4C0EEDB55ABEF777AF6BD476D0E34B191A87FA526D03F7B2F26698DB06FC8AC06A28EF5F5921C5C311B8F90FD960BD0B3BD2C19D6260478F6B29542C311584287EFF9040A4113029EF9CFC7888A7E1B52CB0A75AE5FF267CD4ED91BE02D790E0AE7BC91D9234B0AC12395CD39B3E7023A0EF75418727CCAF6D34CF858B62681D51804134E7E6C0FEECF7322A77766B7EF1D6D996CB8F24E51521086AEC736E2329F62BF6204F90ED344DDE396B95D5027C3285E358F5E33334F76C2ADB94EFE66523714F598FB60BC34D9D4982B0E0A463358569D639B28CBAE9D2A0656D9B81830A5AF05BF153EE1FD78C91DD39AEC345D5CA90913BDDC5ABBDCBCFDC0623F86E043C591AD165939735ABFCAF4BBDA5081614E65DCB5017AE52E566A1D258D29620960A4DF1B3C5E0988B7C037FB31A0C29877B451024E29BA722086CEB47DCC4848FE07DDED2649529A736DD09A9F6FF268FB4429CD39F58C41BFE391EA1C33DDDF2D1CBBD10D2AADF718AA18522648644A5E92D239F406076A01F3EE569F5939B72F8625B90B6C5799AA669CE87BB81E55FD9047A1D8E5D5CC8C31F542CFD81D93A132CE0C4956713AA17F2303E262E2500D3C54C0F5DCA56BC81C7DE2290B84C9F89C75800CAA67872EE637E0C4C29F08CD3337E0A858FBA3FF33C2425C905A774624AEFB1F311D2378FBEC43F633B4B64BE515BD0F40F49F5A746AD83638EB3363969AF04C8925E85E140CD79DEF9B27B2938669EF5243AD0E6CB9AE576233ECE5F840E1AF26F5393F509BF65BA9B27DAFB3BA1FDB884FDE9B0480FF6C97721C419DE04A8F1AB537354EAB05E6F299EC48113B2D31B697574A673BE3AD19C9A4208A007749D83B64C92152AEA1F1FEC1583BF16E2F446594562A2A313F05616B5292311C0D252B61BE96BA5C25B676220B0F94633174BB0F568A27047ED4B81DAC9322C69D92C6514BF6A9F9C3D990C32766A637B5609DFF8F86992DA51B05D234804CE4A922CF4E276A261BDB3E59BC98B8C3755C61E6CD6B60867710CDA0E2D492D1EC3742D918257736E48A07CF188D8EC4DAECE8F259EB7E325ADB56A428F13638E078984CA9FB41FFDCBF802B00EAE859533A22E055058332DCE8F1BBEDB914C2F82C629D8F2A562B9EF2103852B5218B38AD6AC270591FBE3AA0C44FB932DC38EC5364A05F918ED78EC77C3823A19045F386B85D39A0CAAF8159A7839359A7FED11E5CFFC288FA4D70587B8C13C1C9FC287B8625B0FA651390AEE2CC5DE92DD84703B85B0A2C687CBD8E51449BD22E9FCDA0B53B670A23D1C3E78B54AAD616E24CEF4D7D249174FEFB9DFCB914CE4B0D10C314061D7E571DC8EBE8FAD846DECBE302D8B482D29A1DD90C225D9F752DAAC97FB972D47A54FB7C205E2BCB2C29B7D23B03034E70C692DDB8275384C17A1A4EDDAC0A793E51B9199DC3E7D48F9F591FBADCE26E87BDBD297A01E3F5477D2D8365C832803FBA5A88A0E4D1DF6F349F39A2C948E912F483E8E7A072B37E3374A87CF4CFF0567866EBA3129EFEC9C841A16E52CDE3F19C6CE1B011ABDC61D15B09AFE75AEAD804B952305F4700323AC066B6543F5A21920DFD82502CAFA482CFA1AD520C874D666617AA313D511E1013F413E4CBDA007600C34BA44897602238BB0FFB3C9D1D0EEC8D8BFD485FAB908F1E6F7A6BB10A37A307192DF86FB4C9693E578F417CB2D4A847154DB4A62FFCF2C3454D5C7F7A36C91FAEE69B5D05AF4FF5EC606901EDFCE7136C5BD0E29083302016465066472944E54C5AA78B7FDB018DBEC907DA12871F9A9EB018FDC3A47B50F20E10F12625D5D26A5EC102DD8F2D73A25BF7D6B4C9F37B56B60E52332AA4A390704677654645852A6D48E8C6A43E2BB3C33311D17A3102085A5BE4F7A64F35C17F339300D2BCACCD09AA99D5B7F284664928A569E6ADD9635B0C0F338746D02D100ABB2B0DD8B6CEFA07C813DD0B43B87F72871B6AE56544E87B3489F3DC216DBD4EF7C1C921C1525A13B5D73FC03B32FF212CF827A64C56C3ED2962E4BAC2FE2D76593AA856FD4D6D6646EC42F0603570B3D909752A6344EF913D3F0AC07C1CDF8C0FC6CDB7A7FC46DB28B3ED03DEC22D66D8291336777AAEFCB5C210DE197F3756DC1369925CDE8BBE0391FDA77A0009C08EDBA35F8FC306E1519E370FCACA4E2EDAC159C6ED43BA2753A82555E018EA43BBEDC55D17E7334258283DED9B2B85D8101241F1378380E645FA0AF8295B0CFE99E6D2F6CC3974B60DAADFBD632C9EF7E1F8B731A75A16E1C434DFC86625561179ED722C4B864327B9A5D7628384A81B823D7BE9B46F0CAAE7D431FDF3A5344115E33FF0178AA58C7A4D16E4E59963B8ADF0126E93313D311BCF9F1CFF3DB4A14D9006CBBC5F04D86B0704F6B9F39087D56B13851E782720494EA9C7E30F6E2A27B8CB0D0BC1B21DD30B9F5F99C9B7B49D32027D9263275718A5CCA1AF18E549F62E565111C2D47E7CEABFE6899B487906B9F269D2F1871BEE99B1708BE239E866C5BCC416A8C5F6EB68E02EE2BFDBDF99D0CE49238A2C1ED031484E058E3188E85BD1EF66664289C2CE000D40BEF7A20785703E884E72E7E7F33D325AA85261600116FC212DD2D2024192A99596C8C5044C822EB05B4A596C8496835C21F0518D0CE416EF7D2C39786F1C55CAF0A505A05C2072AA5393F653D8D63BCA663A4A692207B5747BBD3C3133C1B3A6BC166ABEB27FE20890C187F7EA651353D7DBA7B49389B27083BC20D49AB124D405350089DCA910D0477E5AC6DCC7C8922922FAE03D44C9CFDB85C0A300711ED96718F8C05D61DB4E4E7056367FA8E8A178BE522EFF89680298548413B95654133CD29C499A9BAC54A54B9EE92D5BC3319881F23E6004B798AB7295EFA306E8D3F37DC6EFCF7D74729E1BC9C45AE5FABE81EB6360782FD160B09EAB631D5F4345E87C4025195D0E60D95BF0F7726A098B73451DA44D3D4D73ADF68FD8B41548AD76772EDDAA211E18A989818EB5CA9C93D3AE0E6880C7715A08E5DD09EA3C9E5C6A5EF2015B244B9F8C64D6997F957F0D48720B0C5A5E56A7EE56568EF6A6004CFE4F12F054E40EB92867074C938986132CF62A60034E701C3963D44485E1C4826F5A0BDB9BAE0A4EE4236C9FF792F35D932D1439BFDF4D0FC3D7B69EB58A469809FB5C2C3ABEE1B28F279F84C5D9515D8045A4D66AD35128D063BEFD46A5B4CCC622046EDEAE874C3B6EC49E5FB6C228F5F9C145DC29A348312DA8A83CA9940F7E9773302983874204F9FB725C337690C615D1DAE3206A6D8B35D5E3EB96C59CFF261A9339FC0D6531D6DE705A8D49E52742B23C4F0A144195FF8F4D019CBD808A27639F1A558DE66057B3DF8B228DBF242BE0EB8E9C20FFB3FC93D5FF71E708D219CB6BF2EDE1E84075EBBBEE81974FE1FF8F18E00375ECEF6CD33E6FC89649E115EEB7D4B418AD89D0B378DAC3AD8E856B97E4BB6E61CE611DDC50644F424F6ECCCCFB7F94A3F4AAF3745D7D41EFF51578A9733CA1C0903F388A699BCF3682947E686AC6BA65777C864E3381F9D436E13F9B0EAD92C816BF6F859C8DEA66B6AE3F61657A9A8A077256685D972398ED654D6699C93755EB78914F6D66FD759F1396AA665B271759E821986C6D6ED99ED1C5318CAEB7CD63E7D11539A23C84548364A59C22517BCB222711C60D3FE286BDBDD46BB7D21EE55E90CDD0864A0E8AFEE8A817F748ABD4764AD900 -MD = 1F75BD7900F1C0FC22F5A1BE28CD203E4905BE79A81B95F0808C0789 -Len = 27248 -Msg = 93B01F62E3CB9658B4809361DA42E9074E311B9D632776D32A2A3E1BF168C7A6173E449F5EE483FF20B6030362A471FB3F02663D9D862A05767CBC32211D47EFA54607C052BEE3ECBC211C7DE60EA83BFF1638F80F203AC6675A07756CE149A56903F78DB2018DBAFEF1B93FCADAFB639A184155EE7A2AA9E49DC667012298B1D489143FF203F939E8A826290B95CC4C45A6FB25A4687E582328CE2D9690950A32FDC5B5F05F39582C8C689040CD4FEDD7919C5BB9DDCCEFB127750F2776B901EDAF7173E90C0354FB375C6249C935890632B86DFB37E475FC480E4ACEB702F9353D250EF73AC075B0BB6C6B2F0316842B19ACCAE8E084F0739533E3E3D62C5FC107033937EDBF1EC95E92512DBDDAEAAC8BDDC2CB8EC3488EEFEB62A1FE844901BC12D9A0ABDD8DA4A06F7B9A9F095761DD80E891D2245E5D359B39C2E461BA80E33E1BF7C532A8C7CB35002DEB5DDD49CB113C4EA214C04B95C4A5A68F68F513D9B470459CD87489E7E103D19BFE1EC3AA8269A611F0A516408232E396463DAD842D0C1E92B25E9A3CA1696A5F2A684C23DDE0A6B3F2FF2EA1D956D5E6AF67F7D72E3D0692930E446AAAE18373861A9521D67CF741C61EEAB4E8D7A3F496EEFAC6780BFB826B532BC868B75609B1BE86F9EC249732A831A6A8A490E2BB60BA628D144BE19502EB99910E3130E5658FB5E3348CE9DD030E68A519407197F563B365F237816D9F683C5B736C40B236FA4AC9CEC9A0CF8D5B54D5AB3609131A5A0E6BB4C4CACA24AAE1989F1859D1CD554CEF05FD31220F7F46CC2E2D94C7B94840735A0F3A70A556D7E5F4845123CF16DDFB563346B9035CCB3422197B2F8805ED2D3F6A15BCC02209B40FA7609AA86FB6B91F765AA189E283148517931EDE0F19552C945A341B1D693CEF0167EBB382933FDCA1E9D5B5E2F0D881AE1265E67E39793ABF652B2DF9813951D4335D988670FFBC2B9C98EBAEC716D13D221D8C448474ED813C1DFA3EE8F8BCDE51792E87F797A4EFD8003ECC9B274D0F8693AE5657629DA8E12468524EE8FF1E6790DF08E9AF05B1C6C061E6A24CF952BAF4CE54400F3A1E223C0C181CE974EB413664DB47BDCD62A0C368F8D4C2EB457BC5E7554B00E9DA621805D97F677202390079BDD8171796DC51B1ADC27723CE76F4FC1977B1B0F882599C8C4A1276B990912003B2D2BC9E8EF995BFC3D2993783688E1D7FF53EAA16700A4FD150340F84630D1CF90F9DA0C969A4ACDA92C7C7ADC9BB3F0B22B74E956FCFF9005B059451ADD0E9097843F43E980F5CAD9942018C6A801F779F04721D6896976BDD2748B3F2B2E2DA690214AFD6AFD2172AE29BFD6B071CE2D693814A79AE083E9B1DAD6474ECEB547CB18D55D24F98E8D5A343690A0FFB96F7F3213EB1A11A7BDD6C377A2D9E85BFB7D09C53A13640F0417BD0366B31F482C2D8B558DDFB3AB4E6FA99DFFA644BD693DE9204A1B61E0AD790F83ECBA5D445B3ED1C7D4A686D2AB014EBA7807A40A84FD39E5A7526A9EB5BE1CA254B02B529526ECE401AAC1899F6FB8C9EB0CDC5092B2208368BAF9AAE501283F8E7023CBA4F17BED1B6BC52C8CDE3F84FAEC6FC1F11FCD1F7DD3C6099486CC8F6CC7589FF18A4FB7EF203F6FCCEC16160D9197AC419E044D3BBAA2A42E03360585EF383C4B8C8C1025B8CE9CC99FCD3AF5F0EDC45409D5E3545CD66CDAA1DBCFBF727BDE4141D2E659A7888FFAF73AAEDFF9A79BD5E89A28F4FD692DA3FF432D2250774906B737ADFDB06FB70BF3F6D90CC3B0B2735F66A005297EAB3E3BCEF4299BD8127BC8648BF35F4F8A14766F1921985C939799E2DCF04243B142E21516B429111EC9472EBCC9D082CE72AD41DFD2C887BCB86C31435564DF1B397897DC7BF5565A1D59A4C7E3A1D5E28844A3C3E98EE11CFAC4E91DAEC761B796617B092CA922725B09492B6BDF7CBB02F327875D2312CAE9F312E18472E3EFE7497A3EBD4EC105BF6CC0819BEAEB6BEFD4D23CEF5E7070D3E6EFD79A64B4DB4FFF8726CCA73E180C822497D0A23A1B9802A90447156809EFEF25CBD7414BB945C8DC78D5E3E531E4AA93CBB12B1BE227AA6C9B90538634B01A50FDA8E786619A4C4EB1717726F8365CE568F83831FEF3D70D1A1BFCE193B48593AB270C0AE156B2E4BAABAF9F0FAE96D0075A59620E9AD574570C1F22D3FAC28A6641BD29E51D4D1D6BCFDC684C1470DE7332728A82F910D524CD3B89EB568EEA65899067D8E2D41A2B6BCA64871BF53616CCBB06D50AEFCEBBA942EF0D793C3E5827750D5C18017EBA0B8829820BEB3E8A938D5B2AFEDB984469C93DFF63DB17569BFC9D34BCF1F68D08EE24C4310CE9730BD5C8B0EE84A0FA6BB5E9FCC0A1DBC05DE24C19FF31713EED55A672F476605D310190DBFA313C9C7B39C41BFC5727DC5063DC0F86CB5685E721FAA85E42BD786206B2F8BE20848813ACE13AFEAC10A6F0A5CDB11B67FDC6DB81165393BD4EFC21A634450BCCDAEE378B71AE9E3A83A21A6B7C5D8A2B797D9178225C1E3E0A01905105CEB8F8A36FAF0F7A7B93B695AAC546BB7354AE0596E9BC49C1504CC2167BA959F58B0A2BE263072067D5D89311F005FBC146823E9F10017575223C9342757F6EAE3C00289FDAD155F5D5DF87651ED2E1D1EC43AD3ABF521E782200E8A2438DC6AD400D549F622AC6DD0F99D16CF5035FB61457BE66D1C7977420EAC767EDB3EE3500D072B04CBB3481BE845EC09883886A8A0660DFF30F25567ABC2DE05778D22797B4C1B2588CE383F28BA0C6CEE621FB464C5CEECBEDDEF1D9A26F45046D5332B33DEABDAB7DC2E07C7732BEE25F6B9E72E085D8965CE2A555A8B7DBF728BB85581120E16D4B4B53D5E8BF8A07D6F97010824E11B24A8566AD4D1075988AAA494142D3FBC9E5B29866B6C0090006C5E7A21AD534D5FD4FBC2ABF5646B3CD3FD3F3C321D188B608CF6B6657839AE7A7E124984E7AEF67A99C939EB3BF3B568583CF9FF13FDDEFBAC6B63D4E1D9968F0FDC223D16046B5ADB631C890C89ED795DD351CC51144872E57C750E7C01626A81B36BEA868D80D319A4D0EBA3DE56C41E706CE8D0B7071B130BD946BF5A7FD1F0777B6C7AB9F03DAF3EEFA62C63F40CD65F4DC4F957ACF9C4859819991CD0377370C58A71B2E78EE082E20EC09FDA691290241F722C0A54126906B971C18D7669B7956D0B20CFE454F93D8849230340A99EA23B7F07DC7586C293DD0A96F9C2C9731946542C0B39A8BD98F77FA3F3CD1F7DC6AF9786297300E7B0FB2C9A46DF02732D761443BA36DAABB8DFF1B8364738B65E4AD6564B9802100C9100CB6B4C3259AE7DB00031DA4D7B36032344A166DEE3867AE1AE499B89EE270DD5E87F421873012E2498B7AE63D40F68A123BDB238192653273EB360D852250024E24717037770454E23046C7DD84F980D76C4A0FE11EF4F02B9435FDF3378E2017F62274933AA23608F9AC426D9AAECE609745C71465EC8786D4E7D06A91B24492F9F98CA43703F0C4FA97C076E0F5FF46036506B4EBA5BA7A267346DAB8E1A9462C956E8F4C3782C1353FD5584BBEBE9EF40F92C9E8FBB28601B1138FF8A380213B672F4265018CED7630B5121807BA5A9DD2FF1086F7B70431A9F229F8695D6C66EB8B9FB83720F7C1F6C3EA50AED00AB3247DF979288BA6185D424D5548507D6A73FB8169B1E17DCE927E0CCE71323CE25BC45B2D7AC05E92723AD357F8C90ABB6A4B96EDFF1A76941F2C24BFC577D5B7D15D6250F87DBFE063306F19306D0ED329FDB6E5CDD6D6F6F21E019E58C3FFEC8BEDC57036AB69D9A0E19DA5C1DB8D0C6AC801687ED617DA94F85161D10868A277D9354CE1E7AEFECBFFCBBCD441CA9FEFD36646B28AC5CE2D9AA0624A5501BD8C5C2B2ED8D1C89ECBE58BD0B373B08E42FB222E7C4EF4BC8061E3555734267C07474B675DCCF9156CD94731604D06F7CBF5FA22C316920FD6448C935B5E5663C95550D0634C200656A040CA293FBDAC3E03239E0C6AE4B1926A16029D3FB00BD595E8E835B02885275310EC28B52B98C5C079629B8754A14DD4D88B3FEA948DFAFB235DA712A06784391D3BBB9018D0054427C1E92266E980D876B25D8D8D3E163A9E5812E4FAB120A2E297D2FACC6512542B254682C8DC7BE6BD1ACAA5D917321718F2A2C424B3BCE4E157EE4426EDA54E21CA2D35F6B38766A7F684D39F8F3B950C368FFB33A08A7533769CD77199552D773294CEC13050F4E7F65B5175A54A8591B079E9BDB496D597C0654700E1FCF3AB5C9942141C7BE487B1D57383D334BE037F45020885CFE71E4360AAB5CF47B124F0D3562770F0106F2A66F0CD7B5CBA869EE27EC6AF4D613EA8A86FA99EA78BD51F55E8951AFDD380D2A3F7EA077E62B215D7871FAFF18D2F807F6CECB50C1960C2A801D7F0436790877D1F19B708A183B3A949E35034640D38093A89FCB7FD3BADB077EC1502187F4A110F26C69A118F4DDE2296F20A7C2D444200E3B00B312D8863E478FBFF8FC4F9A1F792C2EDEB4F73F9A7C7C9E9AB4DCB7D7F5A39403D3B0D1945C2AF7C80F54FF3EAAB8D7EE5FF2B669FFFAAE319E6F4CFCC54F6CFFA715691959E3504F3349E90D6F04EF7BD0222F57F11C912F44744C2AD3108DA304995CA7D9BDB383B32A8110823D59A62BC32D610E083BF49560D76DBAEC82292818377EA5EA68ED76DAA15B2BFAE09D1729B44ADEEB45BD4709CC306E31953C74FB6FF05757CDA9B0B422746B1CCA7FA67C290A8C50A83C242F0BDF8ADDAE3DACC687F4F8A89FD9077590634F984A1871AAFBD9F2C35B -MD = 35707DD2A44DE66641DCFB35A06FDC001C74EE0C96ECC16B34696FE1 -Len = 27311 -Msg = 25B563023B40AE2F2B7F5B019B853C1342481FA7D99D4F3A4FA41CB0450212699FD2ABE9535277AA4321F618EF33C530E515D90B9747D1BFEF53FDB81C9D1BD975A1E6559E20D88DBC41966D352211F6EEFF026573189CEBEA393B93B53D1C9B321169C3A405203A5D4B727C05113AE9D1C9F7B91194FB013E49EC59B50DB7016637001FDF357E4F907BB490FA7CA02C21DFCBCD004C37476388311BAA012EA2644CED6C87750232AD490E14863771AE883A9AFCC347AACE2E9CD5E0B046BFD37AF0172826DE8BA782548AD57D21A2CC5E1355B931BAE69000FBEB4B2F60B1DFA0473D5243B8E91D9186FA728BF2EEDB93343C92269BD701BAD53B9E70B6B0E8E4232A8CDC907A30658849B230816590A820ACF32B8B83C213D486364DB0D3248BE775F320B3FF8B004C56A3C0719712614CEE9C401B0844F50F1730FCC3E3A53E300EECFD49BA4DE05005442F38F1105EA88451AE718E2F6EB52190F1867DDACC4A556269DCFE98ABDAB6F4BF5599FA570ACED91D5CE4B9E57D39CEF206E45FDE8B37A71555AB2C16F5FFFD71440E2A13220DCC2E818193012DAEBDE9A19DED5A3C300F52F0134DCF5856BC0DB21B2C55DEE25009ABD58B8C995F45F396EA1A1AA4AE0150C5D6CBFDFE20E2B9953A461567042814E317E585E770930AF8D056E82AD205C56DF1A8DDEC9505A8C16A30B972E7FCFB8DBD94E917BE288FB1F86ED68D1D7FBA5FF1D5594C89A2515DB09DC5412AE94055BBCBA4A6BF91574234BF760F35C16B453CA0F3E4A068B33CD1CF0B49DE72C1D4009BF633C8ED3406A2CA4FD5C57B65E6C579BBAB27F67F88710901D74670F2AE9EB1B2A879522F3B19ED9CC768B6C4B3D1E1B54D2A8FA7598677479A91ED0E8CC66DF4E2E6FA638F00EDD9C4497723A39035D167A0177D2A2815667B51B9BB6C358539D0A98347AC4A32C714CF1526EF260B4C83A52DC6FC26A90F24732CFD289CB63018A6A979418EF976164A2336C8BAED093D084616708498592CC8FBFD8E958470A75CE57321B1841F0C98612D03A1CD4D3BA28C59A225C169AD2B3E618F0914BB71A035CF34A610AAE84F0178145669CE06D29B97A09BC8EE675A2D1FD7C685AD4CD22167CC6178EF9E85F67D62AF09507DD7440013ED9F5A657AFCC84682E3884E13E1F78EAEF7A1F51C07A5FFF18FC5AFF6A61DBB59B1F7DE29F8A9AA0E19052675A27C0B49AD1B95B1D25F31CF89A0798BE3A34685C8D03E6F88A486017C76F012C49164E75E5C08FC85DE38910373DC65C7D869153F4C9C2C505CFF00D662A6E7F52F82D40760E71B8465172B8A3305835E2F7D901D6543EA3BF6511C49313EB5DA2A3E77DF2BF5DF52CF62CE1F3F17E94ACE9956583D8D3DF040A7954C1EEBA631C1DC2AC0C6653D0CF5F550C4A04FCD4F970662CCC3DE6D6EF1C370C71A5649E74D55FA7A404BC2A6CCD783EC9CA00F9A75038C2B561CF9F031CBBD58C3878C49ECFF41E876C236B85D93FAD01F54E0000363EDBCEF169BDA1F4F8604079E24FA1C680E49A23E971A41463EC0DD177908137F80ECD5B33E3EDB363845ABBBD896BFF79F14FE4A27F44F2611CD0AE42A009E14C2B9334475EB990EBA3DEE8EFF4A0BFCA77F40E7D9269828904E4DE182360F84564ADDD1EA34F85F21CE492AE61E8193C52E9D58F32E70DC80668B6C3DFC766435343CB4ED024112EAECC5A087017A39AA7CF8971B436621C31CB3F2E03BD17F35B8049E59A6442D067ED72B70B7E55C285792FB8A687749ADC4876DC97DC05AE94865E29F37F64EB524A957382DE00A2C4E2A81469B7A5830ADFC0D523B5B9CFCC0EC951AD32E025A27848DAB8F465AB810C6F3A8DFB91FA3584C854563A9673D0C2CCEE87D9C087BF08714D37EF1BC25CC8A3336FDCD05AD379D3CB36E9389FBF52FA5E821CCFF097C5E457A31A9A967B8B37F112D49DBE07B46A063F5710C3C0C530F1C7BE92353A7281B3DBD5931840EE8563E9ABA155C9EEA2685643F5B473ED508DA16C42342B383AF3D9AD1A51DBCA8DE96D2E1E42951E951A7AE821BCFE8B2F3EBA774A97FD63FAFC3E97EF82C77414CC093DACD298DB73EAC18D679C308B4CBCB6BA5DF37B92A3C6221ED0262850277899105CD25ABA4661F29DA8753234B62D293957757ABFD60FEA44CA9C930A0476C874716B9073369FDD552FA914841BFA6595E5D3855642B142D2F097651ECC23DF2A6730ED0F498322C3F2968A6479F757DA44508FCA30C1D0BDBFC699DFFC0BF62BE47F8FA6BA4E5C1C87AAEE163BD2F9CA529F4D1D040087851E8F0C8097CBE2B7A811065569807839BA0802BD021F0D6A8475CFFFADD899934FAD447510E350F48CDD1141E1403166BA8B042303E7EA6F793DFD3552345FA3D8FC80CCEE12B630F2EB8A5ED2AF662DF3DCEFC46C17FD01F31F84D2DE22C14B98F691E6BCDD367395717C7FC03BF19187AC838419479845A4EDD3849CEB172ADB7CF0587F5696F94A6CC05895E6D111E691E5A221B8CB5D459F3AA2F16150E8089BE8DF7B2B97C838FAF9EAA3258D128CBEACE3127BBD6170687215FCD8815CB7BEAFDDAC06954B7AB52662EBB5AEF8CF798794CEA13E26B0FA98684121C5F0D5B1834D5EB345A515F38AA3F6E909EC71BE6A7E85E4035A4EBB91EDA012B3AFE5627D7678CEEE19552D90156E37B695B94D4238CF5292CBA2586277B296A5C26875C3C7EAC52E7712DA998BA9DEC538408019CE31987A163E2655983C262EB1DE2825604B006B50A7AD4E510327C49A1BC75C6E7F9130CB6F5B9DB7B6B7D6E051EF4A78D276490826BF2349114892C6F65321C449BCCEA6F152E0DC595FEB88B9B05869717DC37356556EB0D3E3EDD0AFB05A1FF2337596F6FF8322133F399B6A323987BB5B2376FEE12C81C4E609049CB6E3A783295CDCA81C9E2804BCDEB4D7198C1BEC9408C9C99147F017B6C4E25B658BFFDD991B147EDA3516F64063623E4469F5E5154F58378D69F4654BDFC3894F2011B5EBFF808B61C399715CDE39DDE08D19D0B99223AA6FC817D18ACA0F39399A6070A5656D96B4D8C90BD86A599AA3C7F3BA9CAA77713D612F4E3D3B32B9F5468C692304DE539C42F066F14FC6633481A5E7E963E621681B63CCE87ED040D09631AF44E334BBBDF65B539B8B0DA818F2A38BBD1FC32411B8D68790FA73C609B027994084A26E4A77B90F3E6E49FC7CA74FB88CC2C3193E729562B614F6DE5C412F44F34FE267B7B441C76705109B7E8E81DF67AE69F68C14C17F0122A043167531C7616B5A0206B12FBCFF8B06987479100BF6C7E4C91DF200F1222D95A522BA308DF327BE00FE64B804CA4F76B709020D36E3095127C7C84EA4CA07CB974C38EB473C5DCE633C8C0064F7B1C9A62972E7D250D61D5A6E69E6ED3300F618EBD6CDAE6BE60346D4B34E607F473DAAEBBA9411C09EE6D2719608F93CB4DCDF7F08BCEF063466E8B11E4694007D6BA036DCAF43FBAE3A67D97F5D2E2561B2A9814922E8D516BBCE93790E5863F24F6840E93C4BABE2B37A6B9E4B9EC9363ACCE489131800639A08B074A31C75057C9D5643245943AAACB3DF8BB4D3C11E83EE44B27596BAA192D417B70712011F3109564801D04A8EF955EDBD15B912A902DFD2DD13AE8122151DF5E0C6C34365C539C50EE41ECAA85D6164A7FAEC3EF62438D94F063F1330BC8F73C1609181E2A0D917C15A581A2F79E0DC275B98DBF33EF311CD798B3EC0C3539F2C48234D58DAB302118815843E85F8BDD8C7F8FE51DC5E4985BDA88CB8A51BE96F77660A34762357B7E70FC57CB7056DFEF4503A9A6485D796033E0FC48E34C1CB3AB27F75EA21350A7E2ABE28152E108D0A37BAF4751BB86583832F9D0D0DCC48A4D38D42114CCB9DF4F966FC191441364F93DF2C479EADA51B12544454B6CDF4A7C3A1D9731BBEC4132D612C5AAFD10A1DE0ED59C2A88230AE1A65D08C2F4FE9E9342FB46DB5A53A4DFC6427DFD3562787AE033106D34E7D83E80FE4AD3496A5B31CB6A4519C6F3178BC7826F960BBBA2241938935E2CF1514D78AB678F400E7280CC8760E52D01C6C30138A4887C5EFEC0FEF62E5CCE8B75CAD8FC4A5CF278DC6F78E2A58553CE2EBB2F78AE9C40A35FA30B2C10990CCB0C318D1E225B263784B75C470F8FEC149DB99B20636AA229E7D486806E75C45DA4D211A6738D483FA868D23A3E98EEBE49668BFC55CE23DE3C998CA823CC08FFE07C86AFAE0DA92142C35CAE292C5E49A3F977BAD31D4AE45BC7453DD6F095B7DA650A81AFBC9D013648A0CDDC2553416DD61AEBCF376185747B4849F076479289A2E723D44DB3328C7D91FB42D0F9966BB04E7EB0907581A73893FE44341FC9367F1E8BB945BEEE8CD30838F08AD8FCF6F5059164235523E44CF609CEACC24E5E3008AD85F9C7C3BF0E1A5FF708F5230AC8257DA2788C7AC0E3DB9D5BAA040831A44C463E0D31322A72FA8F0CB8F612352A34FA07947C9B670869487E8EACE8DC61D8BC704ADF301A4D3B5AC7D6154E4768BEA761D2875BB0CAFEFCAEA394F328D250FE9AFFF82D092C84207C922391D79C6DF3C49B57D44B96C1430C3D76FC233F7A9C1F38026D4EBA4C4A9E8DB7A8CE28F3F815709F0CB5FFBBD1A980C621E2194F5B62F8FB98334628DB9F65162AE414944F0C364B54D8DBA70B971B55220FA267A55A21C60B5317E25BAFC0B244918D04D9ECEDE15BBBC1B7A861DBA9F50521FD8674AB5513B077B0671F04DDED2CB750AC71FDC6F1EBA56288BABFC79F932B73CF46449C96EBE2D1650B6CCB73AFDAD7251D438A005340CD420453133A4C6EEE8EC87DF4 -MD = E7B5AE545EDFE05C1077A1095ADFCCB157CBC92A8702120A54DE80FE -Len = 27374 -Msg = 7B41CB33BC381550D32CA90A5600747AB69A106D8DECFC1247DF575C24FBF2FA430F7C15C0EFFC10C17F2B3AF581CEEE1F43E4769AA8D1D1D4191F5C9BC05B5AFC8AE5EA00E8A89D598BDF1C750266C4263909178E7233FBB91E1E06CD628E1653C7082D6798852BFEF6FF36D33AA5A15E0E7BAF693D71FE1533C2401C1DCDE39F5894FD34FF2C692A1C844121F05B4C567BE7018F7F7635D1A879E7831FA4387BB6379E0111BA80984149BEEFD36F0FBF528CDEB82AEC013366E0BC29AE45DA38816BE7BFCF86F72BBB0A1AE750A9128B543FB5D6674C39A13145918D9EAFBCE509F6560F573991408F9F57E85A708173D1BF83BE274514855A6E755EACC6C94C832C6CB5BC0A268C092340684AA9781E0C0E45C9EE69D4E62AA23E3F4F116A68ED299048D1550DDE9E85C1FB6A7334C25896FB785EA39945B8F2FA60D71D40BF337CBD244BC1666BACA3126F48A58E5C55CB196EF57C502F72C760F6A49732547DCD58B02FF12E78B0BE3002489F424D52EC1451C81613704854FD5E2411BD184E5A3E90A284891E8B61374A8829FE4F36F960DD6E2F377F697F97F97FEE739D3C4A6A78311E56BEC881F0A4A745FCE4FE23C030178689AC15CB6873022F63F93C1C77B5A554291041541EF2DB9EF8BE09D5C122B203247236019868B872D6952076D059FFFC9799E39358A0A9C166B68A53D79CC3CF11E8CBBB8F589CB2AB5C2F406AA1D4CF40EC020A54ADE9F8C508E90A080AA883D964C7BC0377FC06B7BBCC9D462898DF08C1E8A2586ED25AD0A756360661F801EE19A942DE73B2341FCBB5D2079BB2B7B0DF910FC36C34F48FDA79ADD3DE9A48B6C42FC940A16891498B3177F16C129EFEEF184F4D39CB892E2842C1A5F61305E50E7D20631E41C20B876285562670FF2009AC5B7ABBFE91A4D2C354F620DD901119CBEC390E4D88E76DCC3CED95B3CF27C0590312D80998D5AE5CE0F94AAE197B0AFC1D379BE21D3E4E7E3214C74361E23946421376CD9BF81B932D12059274A9B3384DDF65E98265F02A5EAADDF1A1DC2DF35CA9BDD0D730B743769C6B042E27BBE552E39B3FD3866DFF7CD4D098FDA3687F2E256FC1E1D2A9B829B5BC8FD2BF0BA00AAE90FB5F428B775A1E6B0D76A7766A35F1B265235958F46FF77C14FDC2AB8E9BF736C2209EC5FE53DAA523D572EEB0EAF0735BEDDF4AF237E20AD590808C41BE1DB19114724C0A7D28AB44FC1B039AADB0F88E00BDE301D2F8001D163246A9490627F377807A0BA1F2D449A434260ADC629E73B45BE37F90DAD62ED6AD005C57687720725D1F61521C7FE8858419723F6680295F24ACA7A84F988AB45CA6F8D143C6AAB5FBC5033C729894B6B82B1D55522F649730C86A28EBBF527AA3E827B771CB7BB10D030EB4846240A959EF26A62DA378B1D1B03BC4358E933089E308F1AED57F735632E9E15A387755604B5F3FA8E8A7EC57427210370F7A3BB8DAA9498FFB956D89D8FB1FD99FCD423E16DD0977E6D2FCA919550E9E4D22CF3D84802999786449F8628BA9313ECCB1459EDA4E2818D221D9AA0181AEDF7383B67D25F7E06C840E717844962C8125FC74632D90312E683132A497BC614319D280BCD45DB260FD69B852EB46B5710B66C8A8F5BDF1075882814761ECB015B8BBDD37DC14316F1A52C84A8D402347E8D20E1C6BEC6988BC2EB993E8CFFC7BF50F883ED128A80C03294B34AA98013F8A3AE0ABA2A17A89E4F69B9D3755905E6C3A183149CDC2998D839BD43445A7988C5421E3AA7C2E4F0057A3A23C4718C3A5ED767ADC100BF96E70A2F479718BA02536284148C73376ECA6C33AA537B35A14B17EC84FDEFCA5D867094FEDACCE6854A25AC41221FFFF497B6D189070050A7B7563C0742F6B0C2F5880F16041E7A25F6322613461D37240E1CB646467F88704329F6ABB30A1FF61C4976BF4C2B5B8936E6699CAE99BE17DE1C501DD437F51BB12245130F1E52783952580252E23C35A75AB1E3186F5A116A838523C6737FD9BC749C8B5DD0785F8B791DC86053C380E40C344E76AD0D6566BB2EA1265236F39C83D7FC2497699506B2865FF0C7735B4BC1E6A95765F066C10286569448F9BB554D57036CB001DB6CA32343B0D0DF51CD6172715DC1158409A02B133F8FA1758F004AB97431A13A3A5CDE6189CFE75F9F7FBC78720AE2FEF3AD91B506388119DCF4FD7B7D8F40941E6735CFEAC9B85507334AAFAD2A31D236D047D56B3B006FFC6B7888FBC5E2A06CBBC8B6A6E023554BA5F107A48F69DD03DD8EC04E57CF4B98D6E853769437BC0B413CA7E1250AF7B9156CA1D7A76FDF07F3A3FD89F0792786B4D00633E5B4A4C2FB239D40D3D42BCC088D0C00701089E0EAAD5E1D82A06E650FE2AC8EA2A7645F2D99EDC7A9256DA8E64FFA2A352363183ED2ADC4FAAF7A6C317213B78E8240D98D55C4FC58EB62CAA8F517A038F5163C95A9BF0C2D2632F86F50CDBB686AC581C15CA00CDBDF7A55F6723DD57F5840E799FAF303D575272A328303A0D7741FECB6F411A535A01912B73B00AB2234534882E3E36431531C1F0DB992A04C5E25758EC5CD9C9B5C8C2EFD7B156CE8645735932212E3246BC63626168B455DECBFFFE0A61A1F9A8DBB55D889871B72477169E3FEF2C39EA6389C14A41D847755621F1909D7DA26043F00E8B49F944E0232831FD2A81FEFACE3B180569CA9DF296F2DCB384E09AD2C44F9682DB24E5FCF7BA00AEBA710B51234B1B82095FE5412D01FEAA4272CB8EDB6413C7AE8E7D16E43A9C8E4DA7475CA66C4697A7CA1342FD382A366EB42C08890745E5518E8BFF791E30B717731F2BE776ED2997D4F48A2E84CF4B8500999A7B9D93D11CB5095616A991AB0070648DC5616BE33219D92C200F2FDD8A67F6C792B202957CE31D0F55282F06901BE370BF024FFD389BEE642C60FB3044848DBCE445EEBD5FD23645459EA134830C906903BA19A94652E24DECBEDEF809154661F8374F818CF0B455E4D77DF4019FDC7A8BF712386B61EB6AE069174B8246F7F0B42123FEE5A222D5C33DE938FFB86029148DCA853BC6776F2DE8162369409F3F12946C58FB73F19960C257FF26B267AC9FEBF0064CDB3B4A98EDC0A3E3054D7DD16A00AD0BE94E10AD00BADC70670EA203DB37B8162AD4C57BE571E5D1B7F945B3AC096DFF5E65D2449E49EDF5D7FDF4735901854C4A9347E4B522976C61EDD1ED517A3BA271D1748854CCF998D97F2CCF58DE7DE4E79FB6E7B9F25735231C79E03FA565BD932F07996F42220328C73E20EAC5C8295D055263D1022666E90A91FA1246BCC92CD1BF4BFF51073C640C189EDB4B270ED1F137687BCDCC35AA6FB4FDD074D07EBBD55AA6A81555129E14D3752123BFDD024E4577C27029A21C63B47FA36E5F2759A5BAC4AC7AE24C75D498C898452433FF41F821A0B74E1FBEF96C257B5B1F318AA119776CE5515BAEDC615977B0B3D57A044C261586977BF18CA2C2A517CBE5F6B8BFD7AC7A9DB7E22A683A3069EEE887669620CB3440C6EBC9B88AC7823580EB05357AF30EFD9CE1AADEAC122FAD2ECDD486595CA9FFE3F2323070A441368BBD84A4636D9AA5EA5D8431D672FBA68EEAB1750C3265995387F8FB8AAAAF0AC17C22C5B679C5605C65CC37FF2B30584B58911A11322F681785C660D084A03916AAB35DC66E7D5A19ADD6CBDE63BCF8C40D70F818229F186AE036C2EA511D25BBB44B5DB5F248B79BE2AC2DED97D28C0843122CA100FB9F5846F481BAE346B35BF4F84BC0CAE2A875499BB6F82AEB892AD5E81604E27D2042ED8D5DF1E5AD615D5798052FB58628A5682331DF979CEB0F84DB10406537BDE3FDE06C2C8C4F07C0DBCAE19FAB4895BF10E0446698A117B780747373F5F810D7AC878451D069C1318E50DFC65F1CC0CF19CF88C939397013993C9BAC7A93FA5674B3AE5C7F61AE641BCDF4FB6BA535FECED0AD9FD132E050C5D87C16451E0118020BD908FE910A1F360FD0F0FCB6A2BF399F3E16D6E5374488D3FE1A2BF88AB42EE6ECC9B8408CC519EC6962A1548161BD46397A0A206FDFDC329B469B824888CA93B2BD9C26E6708A14C4119617F0D0A221362A25AF40C7BB36DE0CD994F6B71BCFF7E9A8B7776E0C28B2A456C7DC1434952BF00BCE70A0156408966D271275D1557A2A19E652AE4F5B132C129C4FF0C37294526DB4AFD3E4865F844F06BBD4BB19E7BEAE3C62AF6084414B549F45AADFBA065D87CCCE05D0C1567C313E41E29B929E054A745A8DB4A544AE33349B0BCFF0D57C7685B0DA5289880AC95EE9274C6F4BE985C6EE65483200D28DE3A8D7F976F8AEF0AA5396661DDED9344F21F0064ACA2AECE3BD8362F3D0A015C64115F95C7140D39E3A58B5A34488945B7EE25ED830EF40BF1F1450DC4831560E7C43402B69810C7678DA1A7F55910DB82458D3A246D9586A59AE5DF6A7824312B9DB2C2672D38EEAB50E523DDC0AD374FF9EFFB87FE8BA2BC178C187A5EB2F0FACD82787E6962F6149CCCADDFFA3B274D8FC637D693277BFBDD7182BB495B141A84C8157841CD8B92A61BD13E82635A1FD682577D505E5007274205DE1539B0D515DB0DF03C2C2F99BD2233C471FDF9B0719A2849577F7B7E84C29015F9CED910435B701A6BBF84237302BA52A43F1801664BC418D8C9717DB63A204E10B06FF417B8D602B38423925C0216DE9CDF9FFB6BA44EAD7AF5DF711FA92A69D142A5EBF1A63E04CA56C0CF4A0620919CC75843D2665BD8442B431CC1BAF2829B8873F4CB81C2B25CDC5235CA920870B31D0102A21B2879665C43C836A745A923CAE426A44611F7B8AA06127902513EDAF20 -MD = F25C56B93B2D31621B45095FFD0B1204C1E292AC094B200CCF2B8E02 -Len = 27437 -Msg = 739F228E328A8A52F9D53F0A38B8BBA5BA4457F25D27785937D01A88D606B578A699163A9C9FC5625D7DAD4F410F54D04F9386009463B6AE21B2569D6CCDB4E19C7F2CE1631EA135D061A162FE7C53FCBC8F6D7292DC3BECC8D9711A84204FB05B51F2DBE49A6677733788BBC009FCB1E1D0EFF197BD1E3711A978BE50864B5C7649ECEAA9700374D1CBB53C2B4A12353AC0B715815BB8312303EB20644E53A353722E31F3E44C0DE5D0358FBCEEF9B84C8163FDA2991E1D67CC971EC802887AE6861C0AA3F6B1EB9D34A09B418DF3C864BCDCD854E683DA82E3C5FB6799B6166A8A2CF798F0CF15480768BFB2EBF26201987F015A957447757267A946FCB50E1645C9E26085F8B35296A878C6821CE98B2B10CB1D648746BB0B715094DEDEF695D9BC546AC8D61AEF37B7DDE16CFE8841958CCE6B0D485C325C6E6CD407C5F498FE136DB6E23AC6D645F0FA942CF4842EED30D9E027E03097B7FE10968EB022D1F4E05FA4203A76AC316FA896B09200C4D0CBF95E8A870ED6050FD8DBA4EDA960A760C193EB6D87069D7F8C218841042AF867ED03619DCFAA1C4D3B4F921A894BD7C766CD7767D7307B22B0080E483FA9C344FB209B1BCE17F12987B6809EFB6888CCB49AFEAD814BA5794E67E44CCB5DC894404F1399202099AA8935490B33E8A488286DA873CA4608CDF2AFA0A09438DB3FA0FF6EB6BB1952C0CD43B981FE9CA0E0B72649FF3A7DB9E7E0FAD90062D40FE5A33EC66CA9379A0850C54C53201F12F57B780FEBC4E58AB912A7B55458E28665C19D120F5EB94DFE4E97C4E44FE1AEA6B3BE6A669B8B02A904329A51C560C054248F8A6A8040DA4A24F9494F960DE0C045EE1309960A8D3BFD50F4EF7444CB9664303A54826C746CEEB6599D72A8B4477D343835301AB09FE2DC1B0E0F8213D2545B3AA233FF6F06E8B13D84C71A63FEB4A484E8CAF3C6348C7991EDC3527738DE34774064DA5BD174D02B66ED19756759A0EBB490A3DB013A6EAC016FB6C61C3D3774679627A4127FE34283E9D686A7AB1F4BC686C566EAE27ED1F783F96272F72BBE925A4C810F2C6DC092514E713BAE77B08D433256357D19C6C1588CD2E0CDCA1695CCBD85701B58955F541211DF4128942A2F38F967CBB572D7E3FA907F4F56F72021DEF813231AA54594A7DEB551B8E70609486F9376E8EE3646D1251A52A6101DBE6B9CCE1F3815847EFDF8DAF07B7257ED4C239451E19F03143E3AD3AD03FF457BB11F58B13C021DF262B18CA0C44AC57A10DF79A468CC307FF5A7FE54B06C815877ED360F8B136F86CE416CD2F5B0DC686B08AF49967086C234224A3517F5BD2C222D3504DFE78C95004A8896A30F61A4696DF0D67DE9EA4B61505A448DF65FD055D15EE7E2A220471D7A03E0A68272013299D6F4E59FA3EF01997B2399513A02975C4280D2EE9323F874268711540BC19271391DE368240F810A0D43371DDF533460297AD526B82B33C08D62A84069125C6E40B0A4F7F033C0B36458EFBF6FE9D731666ED053B95253FCA42AF44D4E05B514E1BD94F6813BDCF4E2D688260E807E6AE1255A770026A3015ABE7B490B642D939E9B49196E74ACFEC68B1351A4058D91C079A86966B09C3EAF5EE007A0073CBA0E47E24FD59E80A26ACD0C6AE551923F75166560DD5CE7795ED8479F0B11D6B8D544F0CABA01EB5FAD99EA0D4895ED0A63F67BFFE0BDCFADD080A4CD985648791E6E89F64F7A073560B65DE12D838F3E47430CE5342EA33119426CC4EC8E9EF64C774018FDA054D8302BAB0DBDB01E29BE4F7ED4D9AD21A87D23432CE329F1D4B8C0F4FAB0B78B5FF803612CEEB16CC01BC867360BD1BE347C2A0447B2DA1F54742C7DF3E8B6CD3645942D3E91A8760331B911E49BA441B56133885E5EA5EE5BDD75CC9CB2275F3F91B5EC1C0C9F30B5D101BA4F0A2B51CAFCF50AC5EDA2DBEB3D808C59617731523D9EFDE5B20F9AC0D9180EEED58F23485B602478AFE1110B0AA68C7C7BA871447435F258BDE9419DC481FAA724188CD99D1D259868FBDAC87B352574BD6CA1CF4C54AF53A1B76060139A373FFE5AFFF2A37C942AC1E2928A1A95E5FD8A4276BB25338832840C487A0457FB0959643DF870FC21A940D3400EBA35E1A9FB9B972516A37975D2BAC570DCF9754BFFE70AACB3B9F5F20FF28A72591E7AF24F29F12D62EF5446BCCF50E00314C4B8A4C864CE6837554DCD9DC3BB9633A6FA50C38367F1C24CC53DF7EC59AAC562125F574586CB9E0EC2FDB3DBCF6EADF4E14D6348434F73CC26F74DE7EE0AE79B5643FB802039467694D5CE653F70960F48F91134018449F32B3132DF8697C1721D55255D45D877549333B494ACC301E985CDEE9395FA22067B7A9DA1C4D99D729BFE731E10593D8041BD1F911D4BB1FA77F6B95B2A92A3AA88EDBF41B94002D6D5CF983CAA690EBF3872FE2D5BEA475428451469C3001BBC7B91925957C8819446DCA2576953EE839A54BA17103421AF78B9AD48CBEFCE53A730244CCED39B8AB6A5B59451AD29C38F50FE520FFE49386DB4389F313B52BC66D28FA29FC460C051C1304D67106BD9034BFC01193988A2F291B4302814C939B355D82153914B1D323ECBBDC2273DEE5707F36A2B7F39FB851D2FF4C947C78DD752DEECBA9C6EBD61F5BCFBB2B2E3E998B8A4FC4CEB56C7DBBA6CD0B64B2C32BDCDA7193841BBBB04A4BF76EC55011AD9DB4AAC343DA560942FC3BDD78A0EB396F5CE44C321536ECF3ED16CAC042F4BAE122620EA89019A5C08E62CAEB488574B9A6C51F4B18E170989E7B3961372C1D83D79F8365C1749949E76A58A2B60D1E997F993FA417457A7369DED40745D2C5889D37B69570FD277875211F406E84635A43C6AD13B21D0511297022856BBF622356985E762B71EF17501631CA9728CB4CE6753F0EE28FB921B408904E4F0D2C1A3E5FDC10674414BCE2CC469DC5BFB675F3493D466E844DFCC892CD129A691D17F94C3E5E5C10566BD4E8D5822DDDB13FD0D5F1A010527BA92042AF411793540A25D721C79960184EBEC0E1C9D73B5BCE5664A39E5567AC1BD4A4BF52537363979440DB20501EF4EACD4A10282796DA04184CBC09EBEE6B63773596348CC778F5083C6EC4CD32CD334A500D6D0309D351C0A2D5CE3A74499454181D5D0F82AF7C0695D46D5D93D43016C6F0F96599355C5262B9FC789123133C67450BAE8CEA651668733F41F3EEEF5F35C0E18085CD9BD583A2CE64D633FBD6F759D13B4B725823647CB0130B4EF89234B27CD8B46B4CF6B1117F19F1047B73B367078F685F84CC0820EC8E398A4EF2C40E75ED5CDCD49527B399938666E52B8F1AA5AB4E63BCF42B9D3D667A837D1CABA8FB588117A586761B2CF4D51D68EF6C465C212DCA766B8C5080DCF722333E61D29C13689708DA0F10632F5DAB0B30A26D49BF6AF019558283EB5E96A0C6ED6C217A24E3581A9021ACC0A7D21B6F4F5B7491C727677BB9D4796B38DD24230DF96E1BD1CACFE0EC23C97E6F721D217FFF917E8A9B99B48FB34642E085F657216C69AA8A7D54F0D9036E056DD104208EF81BBC05FF5CE0413CE53EECB17EF82ADB25053D1A13589D895C97360DE13CE02759310D3F2E48F3D2F7C12A5EA066284C80D7D5A0FF6061A35B7F082E27D2CD69927237FBADDFE66E276A845B6D6A0DD916786060CD28FA0FC5E222E51D82DC9428AE1147A5336AECDFCB046BE835F128687B9939633B9284D69F1078965A352E8AC72502417FD0F7F71B24FE41A12CA0C1A8B9C2D6289EA9D1E6F53063A59E91D74EF5BBB685D764202F1855DAAB75A694C3D27F80CD4F9AD80AC96C9792B0F52722C62586DA543F06BA9639FEC6D6DE7188F35CC520D74AB2E4A812B5310898A7771F8E392F4D429349B18555BFCCEEC468B470EEAAB140F40EAAB187EEF010AF76BB6C47A2F6F0A0167121B52EB5C40CEB25254EE722FA3E0221E894F99EF99EBCEFB23DC25A16C4EE9B55112758B3AD7C2FBD280A0ACD12818CEE26D2562CB8BC3D3191E2F700F8662B52C035997968959A12675EC5B5B52D9CF387022A97BB3BE6A10BC9F7136E5759CB282673350BEE651823BA8CF47EBB8516BDF58A420C22A9F0006AE6DC0B88330F2EF1F4F8FEF982E6FECB951067309B9CD9A2F9D23D51F2C972788FB550BC8F32320383773EED7857AA124A6348829F07842DDD29EFBFB7F23905FC1D64D72098F08D61A436D4645F574BFA9EC7C9F395BCDA04E8B8451E47B4F8C006DD16690DC501A6CF0A407DE412A6A2F25A5E2D01ED0F596D104812F7719C283C19B949F8AB4B52896EC6B622A0CB08F7E4166EE042845911034E07ED57F967E5F55EAB355C338FFD3A7810EEB3A692E8C249E6F6F38F4B2412FFE32EFA47E9217CFD9392B3632827CEBB7AD9783E25AADF820C2DB6B0CD1E15B675F95FCB07481E80D6BE93F4720D1D2BFFD8C72EFB02E48E29617D2BB4EF52F28C493B1C2CA5F15C204B9AF70FDBF8EA40189CEFCBD603EF651F0BC83004F15DA3B0B56AF6B4A24EAC0BE81E8AE25F1D82954051C4C58482F3B185F4281D32F5706A48A77F3FE23D2447C8C6F576C06599FD9D55F118EA417BAF090FEBCB0124FACBBA5694291E073F53E3BC2D9CF1E4D7FF818B6F6FF98675099CBFF75B60FE6860F30EE6F5F1560A1A32E230C6067170E1E27C32B7B2E037B19579647DE56A6BDC59422203C55049CFEB16E275C149C3FDD73818B2116A184E1C48DCABCA91D7879AB5A4C0531FD1474EA3CC10601F2353A541B1B2BBEDEDC688DC2992A43FF6E5E14F0432A304140BD71FAD6262EAF2A19E51BF8DF6776C5877B9CCC4733822D1118 -MD = A88454F4569225874F3858CE0B1633836F033B343CB4CBFB1EB5532F -Len = 27500 -Msg = 669AF0066A6140E7788D8A499A97D4CCB383664CD75449B3D820FCCED78F29C78CF89C97339DCCB21021C83CBD8A40854EF23E5BAB4731422EE4A33C98A9BD585BF1B47C6A2904BB10619DB4C32E008CF7ED11FF60A6A88D7C79BD3E5F73C9CCBFF9CBF7374C141F10CC1A15C23B8FB9A65E57423EDE2A53B5EBBC82B71F519471561955D926E1A51955806B1F347E4663B022FAD8A041947A685B1B8EDDE8D8E1D2421D29A0ED3F3F5697F3BFC74E09BD68ED48D00D4B616364B50FC7ABD5A2EABAC527C4280926454D5CD030D90C1877668CB195C5346CAB722C2176847427D6897B08B88F4FD81EA3784686B8D58DD1DDAD3D16E8D2F6392F102B0DEBA5E944F61605A76DB658697E870B6EA4B4F08C05BBE63BFC5EC158D0B465E86AAA73737621CA3272F0905FB88CFC327DE27A76FE1038E8F2027D7B7936B0F08EACD5C00F55B6584BB2C5A015D88704786E0D7C22AA6965C6F70C7766C4A81DC485F834192DF4BF712DDFAC5DBE30540697C55C4145B7B754CCEB77F59568C557F1055260AFBBC3EA4A23E4D1786D769DA5131F4324A70D856737FD5165E69BE3ED3AA8A1C76E87FD75D2BB980EF5DC7A28753850FD20D89816D3932F753114A06C34111EFF49A80310567CCC5DFAA003071F104CB99E1EBAEAAE43276FF1C849DDBFE7F58FDE9C508BA34AF63C8F8FE2E10FBF260F9DE501EB48FB2E55586B99499EF6371B45A1EF8B9D33CC2E56CCD1CB0BA60DC3DDD9F3978367DE44A0CD43CCA0821F6297E1C717ABF99579714C121FA018CDB28FCE920CB0FC49774557179FAECBBEC22D2318C106860FE94F2A1E879A9A3C4316B438315733CDC8E720902FD3E53343E709592A2295839EE396E73BE567EC4ABB1B8A51901C2489B577C40423AD21D6D70FA1F162A88129A61825D8592A6F39855011DA03A83FF22EA1E65A5C47DA05D1F53368E18EA4FCA036AB40F9645E5A41915C9331BA9E16057753E28B6A538A7FD9F8ABCAEA6BF7253247670782ECA8E11B00D5E2444AAC9B9E5B7AE0CD4B97BA96B08294ED50C5C8468E285438CB80D5277815B90D5265380095A72E424FD10D3704D46117E76D0102B70FDED35AB6A95997E1D15BDFA842D17FA675EBF766BE534757DC0776725DFBC0D4B2634D4AA669E785C46B9ECAB0102F0B52F4EC6D6FBFCC300334058B21D8C424FEBA3131DCF6AC48C741C236261D72F6E8D1098563991DDB3DEC6A07CF485FA071AB7D6EECD513F1A2F20EEDD14341737B508C9D7A206836BF6794319B0BFCA329CC1AB82B26F0907AA893740772469C20EABA2FB28779DF92EF9C99938C35F70ED96E918CE6D2414205A60C0A4F9CB0EA01868F9644910511352059EC2235453185BE98FBC8C616BEFDE96A63449767000CCDE64E84145A948BBF685C92A522E8EA261373248DA1D8926753FD2E2C59FE084FABFCE2FC9B04526F916145A96E246F11278038A8C99ACB86F3DD2ED9F8E47978E4A5C157FD54BE4936F75DEDCEBDB90DBB5291AD215B2FA270087DD1B634045632E66D8E903822F37FE46892D4F05C2AA4DF0D47E0B55CDB0E0E29BB0393BF85A2618870B4DA9A5CF494ED55457C033412A809283FE5C092412AC91E18795DEB5E9E206A55D7948FF83D4173D6FEA6D7AB5E3FDCF5A5D1E76B135E5E0C0157EDC5BB9B2181B1EC115C6018787A1FBF592128D5320C355EEB88B66AC57222A788829CE61F6FDF8163CDDC04FAAF77758BC3E8E1EE1B2EC62DABC5CD381E1E25587EB3E25668B540E06441690217FBB4056647A6B508CA8158C4099FFF7C9044C17013E37BE1CC5D577BEBE39EB210327224F68E278684E22857F8AC9AD0BDD03847B706BA0861F954B5244E8379E2705E2A60C2C492D0766893492E4A966F50F6847EB633515AAF06AD016BC46BA62CD48C4366BFD2D39222A6DD270E1C8D794E8FD458D9305EADB141A206ED41D670F3121DAE9CEDBDEA1A88C5BBC35658C3F3D9CA5684E6765CFF210C07ECD9BB4D83E08BFFD654905E6D0ABAB0E58960FB7631527AC5F6935F9410CD64781AB0F3849D04594D8D616EA8B98DA3A6D0B1D7167C4374750B09EE2EBC557E808BF089994BADADF3B11278BF09663E4466C495BA481FCEC872ADD61464DF4840ADFB5C3FAA296538A35F21E1DA7AC85DF0BFE218235627D7C15BBD4B2BD97212ABEB6A3F16CC9F6551DC4278830458D8F8F222D36AE0344EF903CCB2E0BE875421677DF4860A70406EEA753C1AAAC5DE73971DC84534122ABDBD94609403344AAF15D27D2C7B40F0552CCF401CF7380E6EA6CA086C179C1978590EF082EE3325DCCF45895ADC01FB2DB679ED946BDD48555A80975D348231B7D185B2FBDF2C277CFC50A0EEB18D5B22A5D52A7B9577B076D63941D54FA313208EF89F3360BA19F8C9985C20F570E2D5490DDA9CA11B60B6CEECCFE79806E0C8E7FC5AC8FD5CB4BA4256EE12C2C0B2015F5897ABCD5A056D4A47247CBD8B64B46088B1B35B39D1B1A750E71F0685B4FE934E9CBB1EC8CB002ABB2135DF75A2C95C315EC9DE95E9C821A7CC9F0B4142ED41F471DE3AA0A32629B05859CC7FE0B7D342D2034827B5975CA871809272826638FBBE4CEB80484ADED73C6EBCCF8B6C116907A278AEC7360CDA53DC68755EF0A77EC5A4248FBF14BCD3EC7EECC088281CD964DF8EF68E10FC5EA3B0209E8D23B5CFF3FC138542230AA4724F96A8898A648048DCE43F2E2632CA4B23AD57314E1077A2DBFE11D3096FAAF566E1A7BF3AAB213A5CC3FBE18DA845DA994D15FF458D6255C9D758330898C7B3298FB5809D7A5B6C196918DE035C0CD72AEE1AF7C55B54FA92BD2F8EAAEB1C4C346964323DD81602CEE7C0E1B7AD04CAFDC3B95F56C052F452125FAB36ABBA5259A52BF1A1524F964901557CCA6CB4B164173F76F6A9A4CF88AA472E0002F340F0AB2DD8DE7E424256F5EDE23646FB383C6475E1DA7AE7AFC1E82A6AB974A9AEE3FFB7552D7D57398837D2E4F6EDD81BB4F8119ABF771726347680FAA347A336852233F9472E4CA9C1E52358D9AAA290F621E7F19048EC1E84B41257A6438DAA104879B806E6AAA5EB43B86159314C27A71C17945B0F47983A8D37AA29AD207A605DDD15112FD78B54C8CFDD263B214269A219669880430FA2EF2B4815C8AB62279EEED7B36A15630322DFEF3C88FAE5586C8963015A7E8F21091036842CD62FC501DA6B28BD743ECA5DC78DBBB17C0E040CE89796F95EAFB52C24E68D5E049940F79E317E9649712174396C7F9270F9D37EB2E8ADB6251118D49D7FA213C97AC834C5ABF7A456F5BEA50E05978B0530FC98C6C70EC233CAB1F16F4CA2E474542D226C50CC808241C9A67470F429BD02CBF878017FA77C3318FF08202506FB27829088B84F8AB61F9DB28092FDFCD09AA5CC830FBD108758512EE496FD2B875CB11B0F23D01F2A07C862455891301E6C93868A0A02DD914BEEC810B1C2AF27090C1DAF1125EAD38D39887DECB8BC8C5131243AB2D81D16405714101E4787616F2AA5F3268B0811151CF260A3EA288DEEBD134768D3614C57588E9C4824182411F9B99457842309E8EA068E4EE98FB44ABFC511910C3B72358D0E4A47FBF60077998FE5B0B6DC7B9C5102AE49D4608A8F83C1C35B28891FE19CD73092A3ED7BE0451D11B774C36F417AD73742792A01453A6506D6052EB672570B1CB03B7192C6A1F15930BDF8D9DD896C7DDA48DC389837A8BD93B417840CCEBD4DBEAD6470E6996EE0493066257157690946BAA39C409879677336C8698787E1940FABC883FEA516930EFD43C1567714727DCCE6857FDAE1E3883987E50CA2EA37E7BF96D36D19C525B71DFC58B07877D0A90AE68C18D963C78B86597A7590F0CA9A18FA1AC291AD7B684AAAC67C098360F8D0AEC5701584BA07B626CAF111B985826D56F9BD613EA4CBAAFAEE7B31C29CFE3ECBA7FB4C9AC27B8A7305A675A32EBBE82F5300B1754C3073A4CF3CAA4AFE63F63811DE19CC78C2EACAE8ED69F6A4172527091FBF10511A893CEC134228886C37F640C53DB424FE17009C3012AEDE51F47F21F45E3C7D1E4B262167D170AC99EB36252735F7D6BAD8A3720A937447787889326100CE9B260DB717D1733363876DC740D7D1A5E277C9EBC51DD258400FAE1D10E06A3DAB536191D0BAC374E923F258ACFDF53D154B30C9838B6E9C0576FFF864B722C2C3D1E69A163CA3EDFD8392AD6205BB16A45BD63CCF134AE53715D5132272E2C52656874B9ED57FB4604EAFD7033EF5F4320C8A07DB0B04913A4889C608501913381F4E6EF60F59EA015AC2E1049DAFAD2F7785E85710ECD95A2A62A16B870CFB8D501D2EC6A886C72FBB19B03CBD098113E43F554539FA44FBB99039E9EDA0E9317C2F6A53B25849003FB50189EAEC67CC8C575A8822A63FE26966F4C0574F2926F3510F91885DF0E9680694A1B096FBF3AA7D12B48F5BC63620FF607C0D97C2ACEF30097B718DD8C6666CE81415D9CD0E2A1593AD7CA5086CE97755D6BFB8CF42791B5E84927015975AAA16FEE31D07E3BBEEC8AF84639ECFB6148142D0DFC0DA0D78D4241D6D2D1E6EEF3E01B189455A6179E92889A7FC4E928CD89299F1214D57739B670F8633E0C2AFBA2977F13116AED9522DCE7B10BFFCCAB67545F39DC3D3B3AEC64E57C96471FC884BBACF37C3937BB18364EC7F38CF5F07384203A13528DAF5F58017D0D8B4411E563A7FE4929EA2C115D589E9765E348BBD42145D8FC8B4E7D7C050208566ED467E622E5F3C603944EA49E564F1B0EF7CEF1E4839B93A76BB10DDAA4B554B10D959C383D9CFD16B30A62A86E8F1E92030BFC86EC40B5F155EBC31CD7A6060 -MD = EF5D13D8FAC5D383B6A0FDC912005BA79325B404330FAE5832CE9F72 -Len = 27563 -Msg = FC0E1073C8A3C2A41CE976D50D3FDB65E17AC7457BA8F51724F5211E9214846DA56F419CEA8815066EE69D634C993809E7E569C67845220F8DFB99855D81166CC4B15907C8A4465B2D002AB3F8045B5255B580F593EF4F5949A543D606EED7B51EB8AF50831B5B569545F143B8DA75E0FC2C5DE269588559CA05C588F94B5B01376B1D691E13F83768622C0641785A2B51642D6E2B43E0589853F1396800941A894701045E15B7B0E737067DD5066F22C76B307AB241AF0F31A70DEED6A5CE845612190ACB83B2A8EDE51103521B4F2FAE2086C635FCC69C80695A8362C76F586DF7A915BA9605AF0B2A3E30CA4F190EEFCBCCFCB46053983EF53AF98A686422DFB91DB49C623497600F5BA56B51F9115D46C9C536B737F37FF1ABCA3218E865393A3CDA5DE6D37313B33E6115D10F8AC870F0AC5A96B3D696F51B3774260E3EA0E05FCC0FD76DD4A0420C321351FD579CCE046E83C067117B9FD9F6EC2DFC3096C7EC02735D631F1BE631179EA626351F6F79E33A6EBF3B120AF57C8EFAFD63A5AB1ACEE78B273356C7110B5C8FBA37A062D649E3C83FA98B59EFABAC30735E129F8F9EFF60FCD101162BED5956399333E667EE17145ABA7767CF30AAE26F7A35E4EC7D63DD0D84951D90CD118C1FEE14E1D4BDBCCD7120E54F64C6EC9A541C31E0E2A633979B95BDB7057242B9C66BFCB535B66AD5F19A928716782115581D3B60CA46009CC4EFFBCE593772C0F73D12CAA1E21C33982820571582FD7C4CDE17CA6ACA9F2D3D44A8755547CD3AAEC11D4BD2A388E02611C24C8FDBC0672C3826910E16814214650E49BA939F55FD7911C6C840ABDEF31A1C6AA387481AEB5EF39ACCFA41125FCEEFF65700B1158B0E9CF0D66471230F3C86957FFE9079BD14BF8C2D26CC8298ED2B4738A4F46FA8D5E653CCBAEFB797FB92B88A25A44BBFDBDBBE4D423AA2AEC1B0BD19C15F1DE5AB7A71325C4DE51791BDC03AED0AD989F503233252547D3C27AA412C3441CE65E03E7072A3F34B1FC224F6793E0268BE28EF437D30E9D95D78100B134C4BCE702500786691891230BBD283C40D25C61D2D9F91D4D84A0AE529481FCC4B5C7CF1DEF5980E51CDC75AFDB4BE1C98124C1F1B268DCB6AC17C40F012EE4EA80C9CBBA6FD0251E96267C4AAB43BA62E8C712D397B638E3C318C0815FC1C07D2C4F4811D4A27706ECA5225174094CEE05F6AAF4BF1D6F0C1E5EE993FCA7C742EB261652DBB9F14C128C925E8235210ABF113735833E1D15D52DCAF056C4402FF7CBA07C41AA9013F5DBE6F7AF83C7EEF0E54E495C7EB0407E9F332BEEAA00623422C1D1A6B78E6FDEFDB16FC609137BB8CFEBF83616296DE09623D7A8826E96E86F56042A36E24A43FD48C39298257B4CB9274498FEC5EB8BD0801BB30C3689B3B2347CD0E32233D9B3C90C663D143A0C28BE1D10706EEFBDD7B82390DE4CADB0B6FD78D180A832BAE8B33694D2B939ACFEB2BC31AA811C207AA2AADFFEBD609D2C2CF5A3F58ACF1D25DDA0359F4D00B3F5044BCB10A39DEEA50BBEF4982C15DA83A19F77783C8CF39892E0D345DA389B17AF5F12ACA786B77D9CC3DFA43B950487F6EEF5C2C0DFECEA210B0D897877F1EDFA99B0B223CFA9813CC5F0240BA6522E3DD900EE0AD9FBB8E5921FD7F3A3EC436030F6B946E65CC8BC83C274E55DC9C009B36D62DD0596339AAFB6A8332F5C16DEFE51AF4C556B740C2A774CCF9165C82AA29D510E7F904E8A6132E24F708002C901D1222366E5E5D941C3F0F9656772BF389E1371E19E036FDFD3ED3D5C6AE029047B7DB3D7539B8E3789A271380922C95974CF2ACFE7AA99750B0A4675B6A7F717448857DFA23AF53FB4B816FE96F57ECC2796AB2D285E28EAFF2A84665E11B3F1A4C613EC4286FF00BA8851D55A22FC64ADEF835705F6FC3E6E439879223A1DD195E71B90A8DE38F72E1DC874CE062783888DFF314AD1FA2A3EE30AB3DCE67CF217269886C7189A9648AB67993EBE57969A6912E300A525E345F833FC2CC9D6BFA17BD000B2A94DA836BF3DF7842378347426FF081323CFA051BA5E1BEE0D4FA99941A20FA1905110A093C400C1A4860A1120A6A497FA9CBB94909FEDF2B9B2F9ED08037EB65E5CB462E2143C38AFF4FE542EDF8F5CAFBF1B405D35D639DB0EE55B8253F9BE68B90FED49E24372D597374E1658845364600858B4F0119B862719C198C0219751F5626C3B0CD61D80EE8D2E1EA5B1EEDF5B062C04922EBE19AFA23826D1D83B14B890E9EE2996F4AEB17EE203CE8C79AC0CBA4AF76BE157274E576358D70F03940DA39AA7A491D18447F3A9310F359B7F812D5B94F29AA9A62D1B5CAF7F78B8411D4679FCA4155785788BC8D051A75C5252AC459B5A2776F1A0E0321FC37FB900F8BD86E48BB44C98DBC3053AAADD8223D14F8834573AD35832AA1F2F3FA360EAF1764F64454A4E2FBFC9C6B06F63D93F692BCEC1AECB133A06ABB7CED23DEA0ECFD57BEA3E2FB3FDAEC9F0698115E035F653AF6610A0E2FDAE4AF195BA6D85EC375F10B4C38C01D3979B3E1D45F8B6F6D06899DF08CF45BEDD02D414EDB9F00176B2B41831155D0DD42D028BE81F0C1C0C171397AD918CD6829431CEC46D830120882DF6E91B9ABD63399A1D6D55C5E96230A63F164CEF9ED9B570081A831FBDA3154BA893ACA4959F34A3FFD9B8126DBC418F1B06E55EF265176CF8E7627809A73924F6E919468B7A52AD0AA8E6421D5882D6460D88FF250A9387373A13AACC899817296A83E62A85C80317B7AABA023F17B961FE06AFD3972A6E2F6F2AB28D82C0C4C5452F1B5D5625EBB264ADE234FEA30A09B995B918BB864C538ACDB497015E527AF0085531A63E21B40E3B4BE95C79644EA7710878BCE914C19FB4175D74D74C65636B83D152AD6378D2AE0741D208C8E1D0207249828D826ABBF1349DC1835E38CC80A7EA3F4E0BD5F1701CDCF2B159946BBA78BEBC167FEF79B229ABAEC6BCA43C844372D654FBDF5477225CDB35B29A8E74A61611F25F055B089843468B526A788E9035CBD133E2FB8258718759BB87A1A99F17BD462BD035530056F641ACF6BFA14A008970DAEB63C99D6378BD370557659479015919E05CACE1C644CAF00CE4B624EA7BC2F4C182BDBAB9E467B86CD776BB53D0B8072C17900CB19BF914D0FE010FD83204659983F70B3FE847EE0C1D542885962A096B82D896DF9A82F7159BA21943D01D6058F4736AE5BD125D5822DA4B7269CFC0D5351373578D62489D48B23E898D45829BBF9679A702DBDDE7D6DF8BEA8306718D810C0D0E41CF0A55B70BB4E8AE806529258E3CE8B0BE32036F91B526644269622D0A0D0C23E3168D3BE8CF5D01C0E0FED80697A1A9E691667E209980D6CC3072544B763FD62AEEB64A5B0B275AE04603C0709DF26FC1575CE787379DB9AA62E402FF28845487890B889033CC17EDEA1EDA46B7768101E39C14C54D03279D225CA9113F78AC9C6F79B2263FD73833A3340C6036F450B454A8CA42A6CA31D5DB208173AA72DBC303970333CBD5F42D3499B6B1DCBC4369B9B06D86E5E8E3330287EAB0097CDF5588915DF39FDCBF86DAB0EEB137AB63B0F6D0935E5C271BBB266181E3D70E73C2DD3BBF7CC189B99F7F255485E19FE0C9E4C4005F0DD5AD30A732BD0C999D081365112C96CF25B3A821EE2AA743B3D81F05A1579963FA51D0D6EEF45076EFCE5D8767F57A573D6F3CD8931C39F3B72A00FDE1708075060DD8CF1E0C09CAD04CC7284A92F6557E61B4453A01C8A727D554FDF83CFBFDE6B861B751E11B2C30E3EBEE07B5113303B7231C69EBF28E53FE8BED558315F51DD050A2F14079C9631472C35E9F63FDC1703841D25293385133FDA721EFD5A836C94465199E9C4A7FB9055D1E26CFDFD669BD7630528109976A5592FDED612B44E9E83174353A897E32EDBA38E4FCF0E6CD6BC26F0A36429FF1ED4ADC0D227956F639CDDA977E7CB93F9F6B7366C5D2D17FEBE7F6F8A7529C55B621AA70573FCEF3A32F50EA2B8C45B94834B64E04A7DBC2AB2E4066D62DBFB5293F85D5D8D657EDE6A2B0A438ED0DB61553813D0B5619DCDE8959B006B9BE384BBCD6558B9C4B419F75AC2879CBE905C4A3A7282231177B74FB07CC4E4C1964B7719D477042ED167D3BB25E8E8B91FEFC1A6E5A6E6F56E633084B28CF3787F22F5042A90D13ADCF10600A7FE1E20C10CE97741584B264A6D1AA3CEB9B32CDC2B95904CC45F365875AAB9BBDA9CF8C5BCC52029FDD4BEC409468E4CDF58E8878761AE7E92EA33B2D81B87747B878050863CE9EE7C49FE5E374CF4293A20428BCADEC5E9A3C34C8CE39E64CF2370F50B8EA3B334F56936F4F101D54B1E4ABA068D58E93344851C874D3E8583BF0990A6B0A76673E38AFB23D0ED898A02694E2194C5E02F6ABD7B5D8127717BB9C7855173489A313B63D8BE5D8AAC47EE29BB22C708764B16E0981D98F8F1EBCF0E841AD2A114F3BE1BE7C33DF0A4133A3B03B653C085548AC15F99708F74BB7AF422C0A090A2AF57A975C91C1329913E995BC9B06BE3BE696BACFD64217862EFDC2288B1E2F331E07FEA0EB4A9A3A156AC3B1484755CF90B53BF099E708FFF86CB58902CE4976DE176822FA1A013534926C2AF23E9C10CB83F1102B38F251311901AA0285DA68E5AE879575727566110C9D0B7E5378176B10EC463A7694C029CDFFE23EB0463F4495004E74551C0011F924D9FD7CCEFC36973AD60EE8B74E728B98EF41C20045A85F547B5CAD4D1BB6D518C112A8A680D8A59F2901F911D0A12BDDD1FD61A86F45A9EB3067041D98C5CC51575573B04112FC9586B38C5C8BE440E60091D59544500EE53F8E4F7D9625137EEA0 -MD = A50E8DC5A1CE41E02212559A11B4C36A5D062F603D074E9F501A6891 -Len = 27626 -Msg = 6D3C52ABF3CD75988641DC97CD017A43AA16D16453306B7958902E80A86B5D50928012C9FAE97EC08BCD2F8BA729F0CBF685C411F7A8AA6E83B1D58DE165490BAA3F4381A4FE9A8E4067EF79F4BDA2F19179CA3DEDFE9731D0EACE967D587D7A8BE494C3DADC150B68D94C6C3D0E8B2C9A57EA7AFEF3B4C38E30145093DF4C39203585881ACAA6A94260D25DE49B0831D2D4FD91A5E070546E4DAAFC00069F56FC02DAB65918253F197A93B59F5C3798E7997AF866451B00387DB07FEB63DD49EC59B6DD598102F49E81C9E234F4222C9F5702384CADEF7D4E70859298FE74CD7AC5ACCC44CC2F0C934B2F81A3B2A9E38C628EBE9EEBC0FD570E6FEB94417C1635FD5C9EA8486E77DF1809C0A1265D1A68443DE327508C9E511627E8A2DDA82E456194C5C8E7890790292C83C05308066E8D77BAA5EC717E538A25D0D83DBBBF1F59E30815D602EB7CAF4F35C3F9BFBF97C64EF3BD7E32597990A230C8307600F15BCEB85A98396A26E964630F1C05DBF074C78FEF287A740ECDA79F4B32AAFD0C02A118911597C0AC310DFF400C72C4221A117A1CFF9C1982C1E160B946577DB49AA452AB3953553949B1CE0AB5DD851144BE935ABBEA106C22513A6CE1D75A4F09672DA46558360DC2A060C89BEF088001F5A157BC173FC50C4B077353B10BFEB26C4D3A5D23B0E4E87F31DD6C97843F436D831DC1837876770883BE30EE37378CED73689E6839043F335B20FA6306E5E51AD561D6EB45085BD89619EDE33153DCA7ED3796236E9E95E0D614921548EF02B2D1E8B529F11206F7EFF0E9281F83284702C389414A02B45205AA8ABBF20B35A9CFA2FB5D5E1094C15513FF4E6DF0FA9D22D13F5B1CB84E5B844636AB437390FF1DC1AD1277E94477A2BD3B734A4566125AC82F46FE57D80C72D89B665AB17809D99B00ED43F09864DBD125637C842B7C741551A2738A36296B922DEF120059C38ADB64FABD3566F5E61929356E230ED7E309F2D1173274C1ED5C1291D58E41122883EC69B20579878DE3EA09D7DF932BD1F95ABF0FEF9ADB4C467FB2CDC486A1EB1C11E276ACF2A1CB5D91F19AECCCB3E3708FDABD705D2CA437F561B12B94564F94A6E315EFBA5331251CA1CBD67B0411627A16ED6650805F3C979DE34C003A8E9F7E74BF737BFC56E164062E5E7615FA061600A1DD9F961371FA2942F19BE9E8056CD75AC0052FE22DCF0D28523ADB7645398FBA08093A69FA3CC61082D7EA05A2961A766BDD29FACD39B00239D5D2A8A26D3DB4227DD98668814C2B971762687726C13BBDB6FF04A1B34F6F61E82D496618A828B261D118E194A553690441ECE22EA40BA05BADFE667B972CF624B3B14BFD323C2076D4C9A35B8853FB23C62B0CF274B9105BF4D7F7EE58D9DA72DDBAE1008F23B70FB80FECEEA3C226E2E07D1D80716264E0B37A83427A5C9F99B71083B7C68BA8FC9E2C9FB526B2EADAC775F6C0F812A827B0096DB1A9F1368DB678AD9E5A0F4F24D0575059BB8701A0D2D855793FAAA9FA1319FA7863278482675B97AC5F026B90DD886B2F01A1C33B4A9E3354B991B03224DE1D20D336256829E5AD1BFDEDAA00C9AAFAD330812170B0C03B35EC192B385EC37F5655B71FD764910705E829537D7B082B65901986EDC81C86617E61296176212858536B461A3B1115E26A738D00C667470A76BC0477F8D3B6FF2D71D3C5675853D32194E869FDE9EA42A7164269EC121690FC199B1B4B43A32558B83237F4C44C702283D765690D5C5AD400C4A82613CE238DDCCD2D4BDBC1D64C6F0EF6C08DDB2F06ADAA2DE7CC70EFE3B6E105A518574A216B714AA8237F7D26B6290F8F9BC353042A938B409E109308054900731670758DB4F1FC8C371C78F4E1A51ADEBC21D5666BEFD7A08344A2BAD5EF9E982C241C971F612CF9A774D0D5698910C7C2DDE0E5BE427D1F6C9FF977ED2150DF0A4692BD48D2170C968A587C75AB3FC95AD2536CEC89A886DA2F44CEDC4E479F18839CF5E177D15EC9991A80A7CDE65F1DE62BF051DA60FFC75A643CC443907C4DB64969D4EE2DFF011CFEE4D5CD8674F036EFCFA9E7F753A4C11802414E14CB8523E1AF11524B4B938883C18E1C3E7062008FB1B1653FD43A67F858451BE071103C79C9A355EA547548862EA1D5B56BF9A333E299B2B445DA8EB16B28FC7B66000019FE224536CE0A4C8F0855394C32AF7662F8F00A4730BB0DEFB0EFBFCCE3DF828DF4A3000EC4147866FA0DAEF081486B88DD9F9AA0A24132CC745A67F067DA290007FDB80782F60675B9FE50D959B8450418A75ED1352F9B0569CEA70FB854290B2657FB5BC24D76F589F2A67316F4D72DF5C18F9E4EF3F1D5F45D3853BA1009B294D030AD0D9EDA840F60153DD1B204F43629AFD6D519315298B568C866F33D39FE73140285F933E364C368BD4720D9442C3ECA53862FFF392ED193C7855D99817B48EFD128EAEFDA9904380D91AABF79E22AD4297FA6CDF41EDDC1703CF27BB341A668F8B62B783C5F6086E461704AC000CDF6D9EEAEC2142A839A555E78A04BEE6A41466F932674816AF12657A90906030D6150B384397FD5266E9481307E0A0FE8E91A29C9001A532078E0FB4B84ED7134352993D4C2C1F50C1459979CA3180B92CB3C326CBC6164B40ABCAB2B11D8B78FB7ADE253B8402EC2557EA2D36A1750B7EF55FC6E36B364959357090856896A1D9AC12E012E98116536520FF03E827285B35B8B6C5CBFEE46E7FE66254282245BB88AF22F613E8042EE3B23CB6761346C3BE8A3908F2D32FBFA7B690EF3FF68275E8F34654A31E1384C2078AD804B7BA7758E1CAF3F5509D7C5D1868802DCEBC55364B6DF2B0E301F006D701CD442605A4C85C460EB2348B4FD951820A9DC2FE95E5B00FACA0ED44ED67E3203111506EF08037DFDDB6B65BB0C05D4D6EA8D19E546BBE3110CE44BF78FDE6AB0D4C86276ECF932A97CCB566DAD2D66DC23E993AF42DCFD4257FF87AC61EBDE8D70B9E54AC87F4FF0CD471D983660FDA07D45B9FD2B3F66F6B3E6A4DBBDD9086D763DD874BF2C8BA1E63D30BFB675582FD4D4BF79B2C175B1042F8A5E9D8E16449D4280F246B28461FBEC5B49A733B41704E30ADB4583DC51634E30464939E1786D315F88918A6DAAC63D2CF31F6D10D283208E02BE43B0C1D7A48F57A4E908B7D8F9102B071A0A2ADAAFB552BC45C35F106B0829A6D9A5B62A077E5D18D6B2B964041627DD243957EBFDDB80882968ACBDC16A10F7D0AFBDBFC8E8FFD47ACF05E7BAB48F9518F979BE9945646988A679EB9FF6F08F02895BEFE0CFB37C42B6BFE3854FEBFA81C73BD76EB68F101F84999D207862F56C48600DC40C08689F4EA18EDC9D3943C61258E856F3F9ADF382B263CF35F1FE29A38CB5B0F4239BD42F559561E787016E57A0E5BEEE16318427AD532D5F168344E682501E81ABD49FB1AD380C5AB3D6EEBC29D4F1711685204C05FE0FFF9C8EA1428E5EC9450B09E6F0532A598AE4964E4D11D4BD9CFDEB82B990E5256C00F7D7EA7189C075C0B4DF50AF365EC407A74B1D495F487F52692BE0262EEDD4B36B382E8BCC49A60052ACC7BB757D4F7B5FCAA2BCCAC18E20A42BF44B104D8A50DF12DCE026B4A9F26D8BF343E8C533F96FB1B71EB11FAD8F85A016A5793A70AB283B3EE976C577BFA7E4074F71EF285F3BC0DF48F08F3516061C8D52F30BA81DB1EE23B34334AC8DD696EF3BCA10335BA155BD188736A534DF565FAC3B572BA9295F80138B751AB0F401BA3D3374A5A504183365AA4F4C7B55A9E290343086FC24CBAEA0B9FC87F3B9815631BC3F12C73B720639E978CF2D46E8F4CB4304C4BD7204C69DE8641B4974D1F23705AEC2E01AFBB076F3FA52DA778BB1B41A3C15FB430ABA2382B0036173BAFB87E34898CE8C086D16D59023E3EF11392588E60E2ED9174B53EAAE3CA791DE96EDEE8949A1C59F2D1B523279408C1878EDD5B980CF4FA9A84241036F827A8F826FBBB6F629DFBDD601EAF0B967DD3EFBE8938761F20F8707A28C5C6D99EEC3FECA67E06F74339F2F5E082E33C1483DA33D8B77F3646F2A10B243F78909601DAD0FE3680FC59EFAA85066B6C80C252A4D2533B6EB0B743C7506332BD0010224DF05949CED899FE443259DCCA356639033ACD1B0F727469B59899F586229FD63871DCBA860EA5B13E11EBE9B2FC48BCA1D5B39C17AC22696C15F7A3A8299014EB6934ADD5A2858C53D35BDCA6F73171B3BCA4C21559FA20E605AC2C693775AC3D8120EE3E0B9B276C478DB3F838E45B2578EC10FD06827185B310DDCFA266F9CC87B6DE04E61FC79DE8EC4991978E5E8BA0A0688D7E5235995D15C458E69358D3FDE89566FD1423E29575CC81220AEE3F855D4A4E36772200DE5C7AB67D8531F5A4CC6FB934C116E02AF504193795B5817830D69E00B9D9DF3F60A28C3ECC96C1C7C40FBD93622FCA2D533106F33102DCAF298AE13DE230186D433FB1ECA62324C041DE7BADDB13AD5B406AF5D70CF761605B9E30E0F4E82FA30E60ADF2E945826CB2B78A37C1FBCC74B7C45540C208E0003EB988BDB18DF1DDE0022247E8CCB0B8DC2E68EA67502CB4E1CFA17298C9714F5F0405B350AE8B0C1A4D4D608DFBAB00CA936CDF0A51A512E7A1D4080F7FB6ED66CAF4D5906FFEA3360E7998B3A9B49C9CEF74FA5901F6B492EDF7C82160BF5AB1C664D124349BA1962ED9DC131210395C24FCC1F49D87B210C402F5B58D628293E44524F6AB26A4B71CAA1FAC2F077264BF39B5E7A3D38A32A25F95C94C1A2E1E59BD71232CB3681ADA211241EA9D5DF525C36AEF2465B7BB8D0506B8C58060E63F54FCF3F06FE4209C101AE8141BB09E6E2500005E5DA17B98DAE642500174C64C0 -MD = 303F5F67E7A863EFE7E4BE2497DDB90CE61AE54786D2F799D07F4C1C -Len = 27689 -Msg = 4A0451E0C252B65E0136B036744B26C63A389F64318B775731A46BB7D49C99D3743BB90948D0C4A0340D6F39205BDEE04F3C216808558F7DCA2BBD54A73745F8E48DB192B05FDC234F9D2A1A4E18E59D412DCBDD1903D2227C4960EAD45AF6645A7F46DAF51251A0C87E313C813BF23A9E9D9FA08AAB87643D788E40FB01FA595D3216B7B16479E5693B8CDE0268637F968EA4B237AF9CD84601308E6B215DD522708E91219685CFD24961D36D460C6E2B9C39F6FA6E42F6D8D87D194E0474447D0ACD25CB5824F07A93925DCEDB3F6B94740AFAACA6638F413D660B94CFB112F9A9BCBF751B5ED04092FBDF2D2F99D6F071DA04A5BFD5AC0543D5CA516DB50221C3D39E1C0E5E61249B441A58385A9EDB0655FD2A8159C99CA4AF8C02DBF1FA84C797EB4F215EB9DD9B6060AED562C6AE324406928386A89D168A13E81B4C0BBEA300ADB116575EC9FFCB8F0E136DEA9F17C5E1DC7BFF6A3418D020072FB225536CB4F539DE993B463BABE7D1C27E3AC6B897B0BFE50B5D91D6EEACD9C53F45EAE2BAC254DF83B6299FB827CBF0981B988862447E1B85486EDC315D085548EA32D213921221184A31830EBCFA6072B19BD04DB211968848066A136FE0EBC9DF642CD359452CEBD45C52C1DCB1516CC864823B5AF12C9A87BF88450C8E879C14D65DCB0472084AE8BF1DB46243A5B23B25C5D6CD4664328ABFB3421BCF9256BD7254FEBD14F9DA2543C5D66691338BEAB07B81396B898C7AACC95ABDD42EC2792814C19A11DC8476B0AF71264F8A88048A7617216A14E2D616167C3B9D7EDEC36DAB1596011EED239CDB665FC702927F7040C266F8D81B35D6A4771A443BCD03CE4B49403DB2CEF9E33D61D6AFB8C3565EDAED592635ED567BC1AED2284A3CC933B0975870EC98F2B5FA506A8038648C46E27CC876EE0E08827488CE3CEB70BD4FB5A91FC943763A23E459E853221CFFD3139F4CC3FFE4F2C73E832363F27C0A95819741149533A946B16F73B54DDE891903110FAA53A8D28CC918FE478FE58151799D6924FE2D301F50267EC7FFFFF91EFEDE4EE6B07E3D5B8EDF2B215F1CA6DA10B47799ED05010BBBDA3EBE44D51602E13925E038F8C50BCDB87FA3DD9D91A543BAD8A1C9152F0BEAAE5C2E84BB137638FA4ECDDE79C493CB9981A9FCABFE5600F504FF47982D450E6A28FD7B08F37985A398016D63A6D7864AA823768AA1A2CABEA0C3F35AA34F83FAC1C955C3F6DE059C9BC1472D523990B9EC9741F4446889F351815291F75689245E96CAF920A0C0E118FFE34682466D1AAB4D91BD6A4771CED11EF4FA9F2729BC567DB6D952C5001628D5FAC0622FC6F0C23F645DC408E46B0D031A24F80172F149E3E65DF13B74515CB69648494A42E903587DFEBE23A6B4F75F53D42B35D576368ED5C7716DF70127F9382F69BFDDFEDD0D5B14505EDB107A2406F2C72D86C6A58E160275EFD6776FF16298F3FEB3AD7286B4E8188FBE8BBA5C7A608B4B6B747764E0C4B855E7EB27EE95ABDADDC1EA3A3D9A2C999CEFECF83064BC4F630E1DAC1274C19E1CA1D3A4DCBACA19065818DC2320C62181B0724DC955CEF9D433B2E4742428ACED658A849FF2CF7B0F9745DF80C7405A8951BFDDFF32BF989E92667069674EE56531249521AF6FF6B7135045857B8C9F5F15870080012C113C41BDDE31493E3D1CC0E6651BA5E562A7E7228A60FD10DA736CBC7A07078189E2AEC4566BDD022459CA646061CC467A08B0A55684DEF8AB9BF5E02FDEE11A9B5F8CF033FD61B810AE472B7D6233E257FB6911CAF70B606FCAF4F6EC3D36115A5F93E8933F78B330C128DB182CB690D8F3F88333AA00955DF4EC11C76D204C772BD82803A75E47A560E25280EDDD2EBCA14BC3E4E0402B030526CB5C7CED4D03CEAD06258C6757DFA3DCA84845C611733A0F8817A36E70A50CA6A9E1A14ECA30DAA9356FB9308E4C70F1A1AAA27428C4E713BFD0FF3D7CE7683406CDD6E53F09D15D9133F822952988AF636A299A9C228577EA07826F6D7B15C2B4BA4205E16AED2537F488BD36D578410F0DA545C82019D3863CA7B87697166800C1DFB3DF6BDEFC0A51F05F213A13281650C2B1800EB6245CA5172F030D4DAF22E6C47D2964F7C4834B702056E31C096A025CED07474367A3EC319097CC1473169458499FA6A62293347451FCD9AF23092B1222D0556B6377172FC7CCCD6C12FFF88D49065A5FF4DED44B1403A045092AA24F547802618A2ACB8E7980DF6A4C3B1D99FBBC84A37B1427266825DC5514D96949F88EBCF0662FB4AA7191BC01F99387F2381CBE4EE2125A2653BF9C84B0041B280FE66ADAB445CB87FD1335B11FD0F52551F128F551F0370B7D6CD53F470468FCFCAE28B9F0C64F556C83996E5ED89EAD8077388D8E45E6F3B68FB31D32C0CF99A43AE2E3BDC200412BDA0F861965A9D5BB72C28B53CF5D3E14868B74D91D34F146FB20BF29A54B19849180AC544656B32AE52A7188FC770ED10086DEF2EFB109D193125B937786912C960171BCFB201E22B14ABA3C9068F8294202B6CFDE076E1D6F6ADFBD95D56FFEEF16C7E02594F2FD1D31BBF163EF7D019F20F94EBF34D67181BBE2373080DAEA0885EC1BE7053EF340E2458269332408D72D796B05BFAE37FAB196C11C91C8349A7C336CBF5DF97D061AA38CE27EEB9907CEB00DBE40DA5CFBE153F5F22E19BD9E94ECD3ED2F4C3C22DBF4C4BF7A9737D9FDEC6A91BEE280033A53F4C7D62CA79C91D992F73EC90211FA9B59D9F0827A7C3D7684353518585BC31E0756B5103046C4F757F3D85B856FE6973C9E10710B070C19F25C883E732A7E7C821BCC48A55B28842544A613BE51015C7DDD88EB03D9607EFE09B52573776BD1EC776B2813261BC9CC5AAB8291E9EE905EC0BA6608123CCE125A8A09C6EF974DA177C9DE368EC87107B9833A6E329CFDE692CCFF5397B9B6EE2C20568CB3EBDC482F1A9888F7E29E64EBBBDF4EAEBFD8EA2721CD2216672F5981BE1A0CEB3DADA73B406040A1C3EEAC211FBC00915789AC8E02DFF1E2EB9EE2D45041E65970E8169FB3552E9D7216D1213F7D2DF6E4934B4ECF1C35225789E26532BB63B80D6208A6537229E99BE38DEB1AC21BD7C4E36E26E857F4563AA307CE28D2F6C94458D338B12D3AEEB3885737F9015992EE4F81DBEA67459D5DA2F6B41749B02AA0DC3D115378B613F8964312A1108D507303BFB4E4879ACBE1223BEA31D72A9E52DF0E32D539D9D920C756EEC50CB250981F2B225971A67577B66BF7DE76B056507592AAD78BD18A098B645999DD2AB1963510D285AEBB994D9A06475E49B697B6BB6E34060584B6D79AE745DE6F2DAA9E1E14BD7F4FF93172EB6200E228431F683AE150E926A6981F87FA3AFC6FA926E3827EAB80576C0D11A242792E9C2989DBAFD02FF92D40D3261D0AC09F564906D3803D6D1F8292A68FDD49E3E8EFE90FCA8DAEEEE670B808873F53BE0AFB46AF1E8B683D5EFE5C1F16C94E25985C9459AE5D4D866ED484D8972BC5B4CB1BED1CB78B2520A2DE7738DFF79C369DF6CA453D359036464F8AF0A5EA846BBCAB67BE64D6C39455D5DA52A8044C40AB8DE365EC24C9BD27658A7E61A8427466B41890E4723B7A01FE735CEF73835A4277612B1D26221BE7A06B8F64373CBE3E20ED0CBF5587373A9180FF4A948EB5F01E93BC9A313AA0B2C8256D3DD325C457536ED161C1CA9600666CF0652EA6A66D87EC8200BD534E0EEA288965BFCDFA7C7C1531807DD43768EB90A0C1157800B83D228B90C55F61B00134E849764CE1F93F1919E96AB3AA20CC6834E08BADA06113CEDE451263B472EE90489555D7D396D326BF486B10A82E6E76551B95F1BF00D10F79BAFCCB9FD3A954F820E46B8314A5A9A77738A4382A0E405B807507FB339E06433B08EA7A11745C55CFA59F3C86DAB23246685813E9D99B76567D0456E97CDF75349316C8558C5EF0107B8CBCEB07573F110774E32053D3C82DA085B64A7D6EA73503BE0FC378227AAF78C2E0D4E1DDB055823C6936EA73567B13E41BA96C6D3F68E40F40A2C769C5007F259C1288DBC7F244F6C7C9905654837CD424F1E07EE1092AEEFE4500CAD0CB4B05857A09A5E4CE34E123979E000D72CB8AFB93995875EFAC5053F1BCE1A46FF12F7BF943DFC79B81770EBCFC39F6F4E9D5BDCE20ACCAD9278AA27BFA60BA62B559A11F3BA5708FE3DFB4AEF0010F2E832B7B5C8A0CC6DD0718DD09C75B3FC7FEC4237EE7ED2EDE9A9F68747F31A3A808CB0353A3AF2E2149D0D31979DF1D0575074009D7F60193FC05B07BCFE6911E4F815E86292E632F2337DB9D1935D1AEA8DE948EA41ACFC52185E04009ACE216E8A289DF1D4E6B8B41BD01FE03E96373AF237A2E90A3435A6F98DC4808B6F07927F8C7D77B6885AEFF294D6FE446B7D21DF6D304FE86C7129F08AF572EB02507A41700CF7B83D840A5F598E7E041519E902367C2C1F8554DBC3971A9F83A9ADF73AD30BEAF5E65B86DE7FF060BDD60A4ED52C0CC591FD707764A855A5AC06408CDB9C9E219050544ED17F2A7F8F79CE2F965407B626EA4380944814AA16856D38624B64DE8479A015776A905E127DA419CF0B07CF105899E9E84FBFF84835A6117B5F7EBD25546F79A959556F2EF03E291E3FB5060B1C126611C4EAFC2A8437EE61D54E4A4DFB6C4A4563506157BAF1E2D21810CD0186CFA49A4097148A74097C48E971F85CD210DFDC85EBA5254B0A483C842E5FB13E9962CF44A90F9D16D39B11D1D901F9A5BE6D2DBDC274472F27185BE92AED5E8111A7B8B243F565705590DCF4FAD4C7018201A7E1E181009581BA94C32A337253310C74BAFC878F8FB4C3B6CDBD3573F388E38FFDF69F79D84F9FEF7CF91ED00 -MD = 8A0FB55DE1F33C558469B16F0FF0690BF83DDD1D9BC2A1A9DF8A5D0E -Len = 27752 -Msg = D80E6FE59B7228D25E78586F94F268EA62EBE04238AB44E97316B22E96C91D186FAC862EBA9212CE845BEDC23CEC43FC3DA42AA7025637E0EF65823EBA6FED261AFE9A48074258B235559A916E644BFBC9C3B6F44D760E3047BF7C885F9C70C44246A81D29F9C10594B9359EAA8C8C572C71426A930F02F2692D504E0F19E12F6BD115C085988BBDF2748A2EDCDCCAA3D29329B4E8A1A17CC20243191D2ABC7A4CFE384291FA8D7EC57821E12175A156F893587E2DBD5FD32C2C1A7804756AEC8FF12BCAD4308DD33EEF5CFF2983650FEFC04DDFC4301107193DFA9EB7E8A6EA2748072879B063C7B0955654AE2A68BF0F00C37F0323C6458310B4707DD2464DA5A52B8A8E7CE6589970116BA93EAB2024040C45F22E9B478B34EDFF4BC876896D143152565732FFF04EFE656E06EAC38F19F4EEBFF224E32159AB375511B42B6F74001DDB15AC0CB4F6BAEC84901059882F58EBF940CC973422F6F6940A94C5101EB24ED21BC0C417D959B4F08693173E88C6DBE28B487B3D0CA00AF26239B5B8992C60EC3BCD3855D2DB197AC95C4862B9B90C5B4AE366759A38868A2B838E36D7E42552B3566D7A28FE6E208AE9C6AEE50524881C482B8F48E9133AE2A9D9377A6F966F30603E25A0FF06106B2925012313CB3E79FA3F0DADA7CC3D015B4C0BAEA4A79EC8E37D792FA13C19AA173E134774DF393E1DE9133369E858E47200648B44740F18BC0550266F7EE7805B85D8A19368C68110CD11F14032A099CC797DB39390C2930F68059CA31592FBE73619043E1C095777D297158AE6C28C863FACE2299EA435CC1E7A09FB29071C21780924D2ECC41C9C9749DA3EF0819A41EC086CD2B7370870694B0392D18B6B721B81282DADFE3C3C3FE21288E992C7E3A8FA685F32307529E6D50ACB4252D3E170334C42C70FAB02DF832569C7E5E05042F71A4FA939B58572CC8B0CEE4331220742D2EA9B1117362A1831C8247E1F6E1F42A88FF5EB9AA665F9A637DB1BE7E4FF5A75DC21137A50D07087185DE1310BC5EB098450914B9C6AD8DDF67AC0DCC99AC61C3CB09B101DF6273E0C3ABB3768F24FD2C4BD2EF6DBECB1A1ECDE1418AE5FCA22D41DBA0CB6C16B06F2CD26FE1657C1EA7ABEBC5BBC8DCB58738F855BF38CD96F29BF7732E91B261B70A776EEE64145C1421FA300BDF80BDF6457E318F9BEBA2243CE8CF57DFA8BA0D5F124AFC6859DDB0F3ED457FCA64623B54A49BE589953078DFDA65745FA39CF0C4D9866C38F76231FCB44D3131F8DF389AB755742F16DB218B3978528799746A99DC7E3A958632563748039FDD9FFCBFF6F93BD83DACF06BA93E39251621AF02F8175CF541F0C800C5D2F5AF06894B2FA14B9A6FAA3A3C95570423613299F141CE25EE77C0259A40279A2FF60B51ACAFCF82CAE4297E57861645DC7442EB052309001E89FF2FF5BA41F2F7D48FC9A49BD3062B80C75BE51FBCC8764AD6D2E647574EDC03660C9F4B7AE58888678DEA4D6A5C2512F12A6AECD3047AD08CFECB6A4C95993164C583C91FC8558CAD146C73C7F4C24704EBBD00D9DC2C72F4AF1B24F1DD5C0BF97C283B7F69937A6AF0C5AB195AC8D179169BAB6B141A5A61F7FABD2B0A23EA29CC295AB04DE123290485048E06AF0EC211D93CDF8FEADA722B82B994134911B5EBCBF21D0130F910DDE8CF7CD3E46C2BE4AE26796F25B653F926569371EA09C7A5E2F38565D08C9D377BAF51B6DC854866C50563B9DA26FA30E0A87F5B2FC6472291550FCC7A0C423CE82D0AEF24F54C05087627FDE9C9EE2EBF228D12291B2B25CC8FACAE9C6209DC43547BA0208D359677C94FD17A76D0D84D9B18084C8AFE1548EF4B7FC94D70450087EDF0374CC414561E6575AD401C99908ECF28C6AEE82F3412379A86F78EA9841CEA2D597664340E90714C4F75453CBC4C24C963264DC8F13487A0BFD4FD04ACA1315A1B70EB4888265143D82CD63046F0DAF27D8F1A6EF988F48D13C56EABBBF27B5785E51D68DB08B4AE2B9411596AE87C760D28A4E2C38A76BD6B715293C59131D3D6308C722282495BEA69009CA71AA78A28B681CB782FE4274D499A856AAB6F19FE9F87931EA93774AB13CA5B3E29C1EC6B300E67E525B9438C2F3C3AF3C38276039FE82BB15CAC81013B195EA9C430B8381F73B5F95CDFCE403C0277BE77FB7D8CC38F5C075347CDF1DA4689845D803C9360911F0156F6C92B5F775D502674CCD635F642B266A2B03748ED6247250BA23878853ECC69CAB7EEF2A29A08E29072BDF32DB742DE368125CDDB36953D15712302A9E4AD58C8C63C7721D4647BDE4A16E582181144AD9EE4D51133A5534936FA3A7884D0981785F8EC556505738E5293020A2FC31BC3D95080E1F747B2E25281ED256540D279C07FE3218A35D4574D22D4155E3F12F7450F37F8FEC6C467566746720538BD1A297DD9B987DBABF2D6110FEF51B6991012CF338F2371E394F2D4967A7A462C054E43BCA22794A20675854D742D441F0AA289B0DBF55E48F0D495864E3EF5B145351B93A2459B6CA848F40DF1D8B588FF679771C0DCB69A7196D19C141EA0846D5D2934AA5C662ACF1A7859DB2C02C791250BDC1F5ACBA5638815DCFFFC858B0BF1E086EAD0BE46E9C4018159729E645C486A4973E6E1380F9850128F08F315E9F9D6EFE64EA210FB8070A498F98A1ECE8FF4279B4028EFC7D3634FA3CA8CFC10C58E349B988D3F6A13A18B6487B526AC779C82473D121456EB2C18167CDD74018C0079A5347C1F9873CEC00715F0FA530550C814CEC5B96121A9914A8291713D6C7B9F65A9E45B85EA43E93A79DCFB9DC6A6BDCEF820242DFE7CFA4C2A532E6371681C8F39FD659A1F54536ECEB20FB528C8B8BFA96069FAFC4A8B23DEAF0AB27D8E190FA846669F403BEC4F302C7CD5AB9972529827D5819E6D1FDF2B6CF2AFA57899F8F9CBE1FCCBEBE8D738E84779134545614243A1556CEB4601ED1A6DA90599BD3B2E2AEF9B060E27D879D1E08120651739456062A18CAB94AAE2807CE12FE0761AA96598AC40D1DB86887708041A90D59C66B37BA63AB409C9FB025C5992B985A35C1BC3FEA87B7791B6D0832A461A58B221933D2B9AD6CCD80E08CB8F85F52D3B9A0DD6ED57AB7A62F1AC77834BB86FC542131C779DAFEE3DF16E26CEB0953661AFF00843DEF77210011965016942B3FFAD479749817BA8A85EF288091F92EDBA11D7FC01681A80513B3281800632A33B3A73B4FF9187C12A5701520724E77AFC84E6A3FFCEEC439D530B38ABD9805EE0A8016831CBFB54B167B65D466F9EEC8058E13D25F977BCDCCF82C7274AD9A71DDAC8A0928E57B4CB732DED8D314E8312F99EFFAEA028CD48BE614256C6D39CA0B2F77A13829F172AF85FA857BB734383E757A0E526B019D188DF17BDD90815CC90D289E6FD1048C0963D65B5BDA595D34ED760AA1066F1E3D9E48AE2A2DC492701E9CE465BB5A39FF722CF55E9E2F8611790920A3EEAAB9AB0BF86ED270FE658C3A5F633FFF633ECE639A93332F3BFF0746B5C4A5EFE9AE4844F996FB842748C2E25EF24B6D0F8D5A476BDEB8328444E46393C0544EC9F1D28CB83A8C965E0D9B066DB0366B431306459B6C837DC9E672FDBA234A12ABEC8C8C813D2FF6FC625DE96D35461CF72EF1529E5425EA1988ECDA7381C0F84D86EBA98F4F4D0F45F1C16F5CB3F8456DA4BEA3030F97B56DD494EE97C630656E58ABB7AC6F2D8676C04A34C2EE4AB1BD10D1630DD59B6999ACDA447E646A84AA66D53C6AC0E3BEDD0FC01AEA8AA9FC7648D44BF585F6F133A25A590D63B4A83E6519F528B310BC03B9C97FDA5FE700978A66F1EF4227AFB3CBEC112CC4552DE5F605D9CD0772122B09AE196E8725827538C4473F82A3AA0F695C5C5D71F91F16CC8674445B799077E5516AB55853D86C1FE9E4BEE06CBF8F9601E14684B00579F277964AA162BEB92AB476E322E7ABA464C0657BCB65059B47668A82190FC093BA433A16F36B22936AB30F6790601907048C6ECF7C4A41A406ECF866D70A3A3AA2A1BC6472DDAC9F97D37AC790C117A609DD3741FAC7A011960AA6E278100FA04D345796645E5958A0AE0A68B3B6D3F11DF7403932E6AABC332A77417F2FED3651667BB0859133C0732C56EC52ACDF8614534E4A2E007343833389073DB6C212E567B7588B0BC81F0D622E1646ACDA0F5DFC807073EFA779D687357CCD1D102B2B6189680C502435BC6522CAF5CC16BEC795174503A884FBF209D0A235762C7162EBC66828BB8F23DFDBB6468A5E62294D4597FF4F91D99CB1417B685CF1849D9ABB58E63FC77F380EDE5AC5E658C103414F68DE7EAFEB3E69E6641C04B0CA57C7E938D9EBB290D61A2D42E1B5C0F956009A6A80403E0C77773F281EF604C1959EDFD1DF210DF127C302311E4A71A75622DEF0F91ECA4717FAE455DD9FEA557DEBA0EBE1AAB6186AAC0094EF34447C24125706102C0B27E17FDF4F1D22EBC6506F28685E0D1D886DD41729F9BAB64486E7E96155A26CFED69DF3BDEB62775189E9EDE39D7A0D03C511AB4D605343356BAD7AE86F43E1E9EAE2303028D187BC81FD3365D7B80E094BA629AD56CA352F3DE8ED6DFDBBE7D2064C757AF36B7DB4EFC0E9E8F2F25E6282780F7E059EC9ABA8C04F5913E9632981241F75514C50D6502D7B01F4008422318C0BACE5D135327E09E4F97FDBFD7CECDABBF16BA2887F76D9720E34C26CB8D199FB46B486D47E24FF943C1C23F3E99E472D96FB4B6477EAC3F364E02FF192F3FEFE13C69560FD4F4A2830A3A74BA8C8EAEB82E84D8ECEB983A6F1CB024A9DFFCE69AE0DC766FE283619C11C5885B2FDF38E230B187D822CC6A54A2B643029A5D9AF17C5C705F41403AE62956D977BBBC7CE900CEEC2B7 -MD = 9656F273CF78F3613D931D50278E273643CD6662C48D243A115CAD65 -Len = 27815 -Msg = DFF3E902188A20F0E51455427B80E2E4F48685FA362997D4542438B44BCED0DB71EAE8A5D2F3D056C051329EB11E96284C0F0E372802437F06B57EC5E8D6ABA1E1E879BECC51FB718EED8F5CFEB80A2A4C26E0DE5030703304C4125871472C5E0FF4A265818DE6F3F33BECE74E2EF33A3BEFB52717E0D65AB40DF1223D5D92A03CB4F9E6AE0862983A8869426A00774520D4E6A9CDC38C1AE305DA3FD23DD225A478FEA96815249AA73C4CC974E58F37B258634233388DCD03EEFCA3B25169692D8E8664716761FA7422B73BB0DF44285789687000C710FED6F43565C65E993D1214D244D628D9EEE9DC7BC75B0B95F2085F2EEB953CB55C39455D0FAE82AF10D14F66E504704B502F64CDF2C09F97174E98A3F58C0E474B652D0318A12F140A82D22B7B8349A84928C6E42DD3A03B4460846FA3AC727916BB46EC5D5A62A8C548A93005BC6ED41CA80F345DF6617D824C0BCE3B08E581315FB568CB6CBDC2C15FDA152B0617A9E4B0C6CA103C6CCE3FD75379307AF7E91383D9FC7C6B3F343728817BF472DCF8F05D68BEE294A4CBF269C983ED1F6C8FBEA1E1F7CECF22B962FD063C5AAFF594D5D7920E817911415F71CF0B779E7EC85F85B9E614A1880FD8E6DDA4CFAA5F402DD56E73FFBEC560D7AE12F4B09BE5EB834347F32B689DD328643D757E36A640BCC519A063A4ED5EB58114C008A5FE1692E475F92BF031A09270871AF0FFAA7340AA6B1DA97E80F6F4107D2C62D6E8DAE349C7F809256A3A734DB01990725EDDF9592D75483823504C6D100AA7DEC56914D8B9CAB085F4D71E2C807C7C2EF7276906F12546F1F11BEE25C9F946B381EE248CADF0632FE45B1AFE0D11B10BBA41BE4985A51BBD9B0B3A0AF115E178C7D6BCA322BFE1C01F445C347339B781FE8715B36EBA20FD1FAA1C605FB93E473F091D53E17CB229DE07DBE220ABB245EF29F9998B2680C7E9477B0D16878FE19D01AECFC69C496C425E39DF0498959C40C56D04FCE1301588E13EFEF9D923B8FB9D143D4DDA64532E3F70CF80948A6E0909D135D3E9CAF044E18BD46E20B531E5CDD8CF286DD27F9718C177D7BA09B7E70F3CA6A64DD4C26D6D6AFC7B01B778370884E6F0F2970B2E45A0FBB3B6C087126B3E70AA4EB68807794DFA9C738134DB20D82806149E4859178A0CED306761826D7446C44EBF106616B2425556892316F951DCC4965910C6E7A5514F0013D6302298EF0A51E929029895337172467D11561180704CD8C52C7171BE933B6880AC1A8AEBDD83B8F4ED0F418A116422D8CE5F764B3F8086C233DC111B379C229A5323F7C432EAA4C0F99B11D7B891EE5D182511EE88571761D06F5904B1A640D78AEAE022CF441F5767263E0B7808D627DE41721A790C79B23F8F5652C690FF308EA19708E614C1C846E7EB3A8CFA528733EB34AC5EAA00BF2520DEF45F87D74CD50138212A9F5001203E95C4E49C54EACAC6888826E618E67939161A0E7E1E836B64701EACBEAC75C26362463332A346023FB340EDF9028C3A19D86E7BC7AB73139E01626B599F732D432E5D7CDE2697C70692EB8376BDD2F45410CC022DC6DBF87EAF5A1354DA794636AB84BCC80652F262CFCD618FDCE7D4EC711C19A4BB1296E6DDAD23BEC661D57159C9EC9A3A346DE8C0C029F3523E453E81290DC5329D637612AAF1CFCEFA11EFEA02202F9E0C62ECC6C4ECD18994913D72B6BD7AF2AA1E354AB681D43EA43F638198C57A8F1B46B75D23F592331C44326FBAAB9E9E35B104073302B9A168589D565F9732E1FA5DA92DF902CC5DA74F175F3517CF18DFCED082A215761A58B1C1A437C9B9DE13CDF62F712188B055698CCA933AFFE93B12FECED117EB41934061683BA89F545C428EE6865104C68A877C71DD6EDEAAB9B7CEBAEB52F78718A49772DC66D289CF4624DAF4B3A494A136D7B6D6C0B6302FD864498C303AD07C58E22376694587D00ED1BE0CBAB78DC7E73CE56B333026E1A4BA8A18BB3F6DD1CD750E6B972A2F79BACC29EBA73C07D5C37E9659FF7CC5258315985067D08ED3AE7A53A6BC02EC4921FA0DA91831BD18A62CA88EBD116E31ACDA455E4EAF4AEC2ED810E311DDBB8CBBAD3F0A5CF7160056223184E8618B19E7B2488AE91013A1D9C55683C42EE2706A9FC643D0FE29473BFFD2BD8FEDCC795AE535F223D17AB5345223BB26501C6DDDF1DA82C7E8F6E69098EC17842CEB08AC544143B544D194462C60ACFAE97236C7FF0F374DB0D6AD9036B6D020FC78E374A9C0E97F584E5519C7402F4E21BE46DDBEDD22D1BA075FDD6C4B2CFB4AB522B7FAAA0A649D749E53CB2A9E9BEEFDDA48ABA1CDD7E0AAEB0E349A0847293E665C8712181170B1D386154D04EBDC8BE263295C52A09858020EE3CF18E368E62F9822B3A5C13DE369AC3962787A89BCE8D27BF8DDD88EFB870089283B9EC68290CA1C45D684840101849E9AE8B3C467CFF9C560166FB4C24F17E06CB690CCCA94AA54490FCE2CB3AE1322C2B4641E51CB107D30BBA35CC9BB549EA340CFE44B9DE098827965D9959AFBA461BFDBFA02AC9A8C79EC286630BE6166E878EC3233B2B3FAB5517D46E5B3141B9A3CD036B0D03513D66B8F85D1A457AEDBE594B4FD27752568419E3F43C1BF692EA260400C6014B0C42A28E2AD322800B4F0827E1D07EF63DDC1E6E1A283BE24D47BDED8D9340693203AEDBA644D882FDCA843A9F38360A79593FF940D6AD5AD395C76DE5676F269B33B2B069FA72E2A1C7E02E21BC3C74A86ED4A0E4BDCE7E53888E478B94D9DB0609DA01F135DC8B463503E18504E21287AFA8A977049AC401AE4BC08F3CC1CEE01DDFDE803AF13F0C8F2D50B04EA7A4A16CF001B681CC88C76CD391247F2CC872DD9C65740E03029E3DCB50D0E91C81CF8F2552932EDE703BAE06BB59732CC0CE7AC30D5313A1C89A23EA3BE0F001C946FBDB7ACBA3A79CDAEEF28F09CC741E99ACE2C41E0BF5D79D8BD3ACC71C866ADE3E5985811CE0000A540CF5F25A0421C7D0B7C3E1F682C33395EE05398B02C42F3295E4E6B60EC2D1017BE8CC7F1153AEEC2C26F6107FD2C10CAFC02DC2534DF8B4F1D69FCD7EF7AA5704215041FB3F29E186FB79205AC59A3531B7BB102FC4D4AA834911994112A5229878617968780B33AAB00F7D3161C98B5DC4ED13B07B82BE996A58FDA64E925333619BDBAD0F3231B83299B9D618FF7C678B27872BB3286E5FDE36B4B599AA7953BE5002B2AF520D389CDFB56EBC2CBFBAF033F3DE45614B9E53524F21734815B48B9CCC85004A053B89831284929FEA38A425E107772B0E280A959487D75EE3F2DB1A2263A1642A674C0BC1016AAE675CF48771C86D501F17501F9D5B85E0CBF32CD1CFB638CD34B15AA69B2ABDAEAF5A976BB3CFA2B6E3C92D89B6E4519B3C7599D85A5D99E6C4453F6C6438E5726D856EE5652C087DF5EB220122C774FFD9C083297106320FBCBD0482BC89C82176DA9D8CBCAACB07BD4BD120722C752DFD226484B80C6C4C75BCFCD9365E225F8D48C2D9FE42FA6B6A52679A20386C0B0188E338F43DE1E07D2068587FB1D1772F58E33DB03D54C154CAEB05C42F636FF5E9404BFF8C996B9BBB6DEE2ED4689B5161756D8BE089A83A9C0AAABBA91DEB83CEDB69798235DE7EA68AA092837EEBD3102BCD37E54EC796E36DEC3B0445EF4861F4927C1514DC9A1071B5A432F3C077D2A3AEEB0E434174B7B3325B9A7BB10CAEF8A25074F8741DEFC1C07C1AD8DD8FB64E823B984471487D082EB747DF2E290C8A9EBF49BD9598D8985DD7A76189BBF2D2C7CCAAC8A7B19564D84BF270B45337B9F8A864B9D6E6BC4086DE5AECC39881C84AB517249C0233C890FDC90901A82DF78F96775FA4C4FCE656F3DB0D24C7384540D765CCA7546708B631686FA8EADBEF4CB02960B4A10A355C2AA9FD7461006EECAF236941D8A8C3EFAC80355B43CA90F53342D4D45FDFEE8A59A6F82CD97A5EF8222523B28089010E751B5C953FCF46FF8E0D0474BAFBE2682D92ACC492B413EBD3005C627072B8FBD6FA8D8399AA2133DA759F6B66FC74B725FEBC52315B95601BAD6438BEBD61D91D69D78ED9A65253B852A0FAC07EBB42D7A3C2B785E6E9018171DA864381C47193A80BC8341C3C5376981DA651945C78671A8DCD6FE6E9755B87EE42F68911B5E4AF2C2535C0D13F1044DDAE576339D1F4A2B2C2368FF857AFCA0C9B14BDD9640FA77052F17F7F12E2134076F71FEC3C385C609DEFEACC286D47384D77013EE1FD52B4C6A7ABB6A73D7424087E66D22C4D694833C56D8B1744BF56BC62F056251BE3E0EDF72F436C1DBB169D87023CAFA4B51DE81856005E5C5B89DD647C7C01C0385F64E770C0EAE65252FDA0716B90C815CDBDAF67DEF8F66ACE7BB055C36EC0663B86EA37AB79C3045D8BC73B5E8B2C5859A9908F4834A7D55AADB5712EBCCCC97DA6D5116D94FF70ECC4BE9B8125159EE800FAC36F5229732953A361D9E1B163EEA4A23AF785DC2E9FCF396325F02ABCB3831A7CFA5908CB06F4F5A088F4CD763C52F2AD7476AFE1C786A7D68A7C833A7F7D23F3CD5940DF8362268E8CAF60B97FBE55C22B962172FC5367CF1EEE60DB74D7CE775AC8D8E3BD9451854943300E09F13892EE4007CDA14C436C830D8F968E67387129746DECB44922B76D980AEA3CC87BD20A33006BC72C5FE81339D3A0816427894C39F5E11C224B2A17C0D5C2556D4C39A7EEA3FA4896F025ABA172234D613AAFC4E0608129D234EFB2B4A304F603179EE86266E3BF6FCEC54A8702DD159BFFEC0F5DC3494B130A00B759AC5B5096E72050C7C591B1C8CEB323452BCE3FE419F71C6125A4A1DF4F1D6F94392EB0CB3E29ED269FF4D47BBBF75A083CDDE0F004E17CA0F07BFE202649F663FA9738D5B8C1C867A60 -MD = 1039CBBC479210CCC6410F96254DAC9EEE18115CB331082CDB5EC0E6 -Len = 27878 -Msg = 2FE8EBBAE8768CEEE2C8B6AB1B085A653C2C4DC96509A9394BF587326827EEB8E613F9053F6791749C921DFCA705FB36F2C7B7814FE44D873BEF882A612D055549F376C45B9B73008EFE8343A739C5C2340B9A8F6C515716E6CFCD1E648DA411CC72E6E90232A26CBEF8AF5CE91ABE5D5E3C2697DCC63EF4AC6ACFCA8E0FF9E7543DB56EFC887C70C6C3A2AE07C33C9F4AB05AA4D91F0F9C6A88E64FE5B2B662E12EA4D8B9D5FA7927DD37605554E7F8F1055441883F261593F106E45AF128AB63C880616CE4825A5DCF00EAA51B30AF991932265657CD2D5C14D3F86579387740B8C28D3B13BDBDA5540FFDE667E47B3DD46B355451C13A71439C397CAAC384CC29CB021CFF40324FB980820A410044796A4D03C79C984CBB05B381AE0B85781945C69E7541E4E9204FFF5C8A50FCA2CA4AAC8EEE4FA708A0215FB3C33D81C8CCFD1CC102A896A21AD610F26C4DD84B19D76D929A1727148EB45BCB7ED3CFEE086F2C75753B4382E391EF12B0934A17B01EB240152A870067F556C399533C2855D27CF607342361130EC71A75DDBF90BF06807D39737FFC91C3C8A4870F7C9AF2015FFBADEB425D05C53DDD7E559534935B26029847D0DE9E31AD93C8BD7D24B727FF5866CF92488B2BB76D145178837A7ADCA14B820620585E6279337EC2D1B160C7002C8DA7AE3FEEF32153B1F269329A0A6E15066A4EEC14938E6B537FA022FE4B0CD6FA640D8806E0092880951493C22EF0010378AFCB567C925CEDEA87C71F396A4634AAE5CBF2D6E764B85D52F97077FD405E14A1530938C9A473CC1371B573D471F3D25192CF92B24EA1C9BCEA3717EA8CBE858A7E27EE63205BA9DC137D253A7493A239E928090BD74F503453CBD1214CC134F68BBB42818C3574562D912B559FD8C576CB80AB4F055EABEF0E0D4DD626F3C91C97B83759FE55A3C6AD4DE3AB8F1D91F159300232F3BDE2070EAA531A79453491929A628E43F74D31940EF44259DB2B40C9DA1267644DA7880211A0216253F67B572A898C3EB5017D6D63032C5E693940D0D107689329384E44858790FC6BB4B23F3AC6C23392FCA37246469A43F3D7E97513072BA6880E7FD70869D7E4C45FCBF19E075218393405F12CC1B24240A284C8AFC4F7045D4AD4C6649EA41495AA9297994F68AEB32D634535428376645EBD526E860456889025AA6909AB6AEA6BFB74F1489F66A5E088FB21743A03C55426EEE81C598E4CCD2727F70A4930742E58B019F3CEC210A89059607E6683A07F0908C63E349D060852C868918EA907E0CB1F102005AB8B177FBBBAC594A4BC35A43FC46D5190451986A4227F8771B1650999789689F08E316E915E05E1DCFE2594819B05A51870DB6E3CF877C3CC62E29B6CDB97826EC41CB5B467ED0B632CF0082F64085241B931946490170FC8790F755A143BF04637689E340B2A832BA95015D30E2F33E485FFC3CF22814789577B061D684913C24ED8B9FE673358DECD4DFD87B930C69FC8BE5CCDB3B43AEB38EE4E430CDD01D3EBC49A84F455BDF7CBB1FFD4F7118ECF8E974CE8D3AAF71A0507304224B9726FB4DF3D2DBF2A04F760C1C8644C98B48DE5B54A0F7D7540C99BBD8525AFA58D2FF42D6D0DBBCB8483BF65D8120638F81E7080DF08DB983AF229541E124BBBE93AB01579658963460BD587DEBDD1A2C58C3934CB7B45520EEB81056C7BFCF5618A67829AD092906E68DA638FD5BFBE87203BAEEEA2020CA70EC234DD863934F3C58C718DB36FD7D001446AB4DDB91E43A323845C383869AA6C6F58F329ECD525E6B527CB51D5E8141D7AD3E6BBC2A66456E3C61D7465EA0C2353716F6D91F52EA5B8A4AE7D7855934377037B2A4A419F12D71F85CF02B422AA25C0BFD9AC33BD1FE2549B3C109A15EBEC2414788ABF4769FA8148CEE441D24AD6CE2C68FAD4AB9A8C6096C056DF9AAC819193E67F6F2E1278F84CE8DBCD0A0D49FFC419A81C6FEE8E2E204FAA35AEF155B87F924D1548F17FA25BBCAC2B0E02C359ACDCF8355023DD4A962EDFE46B4E7827D77088BD7E9BA4CA53E4F4A766B6D81BC5FE61DC373C6F359D074400222844080E98C84F359C4F818961EF824B39583014A8F4713469D042E439D4C3CC41C5316F27B5DFFD7A34AA7A73F064B23FDF812CD03774C9CF6ECAD289C1E4D112183604C8231C59056224E99C53CAAFE93F9EB94DE1DD6DC180C450FCA8D82B01C32FF9FEEC045837DFC214B9C28BB204E73AF68FC15E18C560697A604765C51A7E4854DE4EED75956A6D4369F38EBD2325F742D7BD71522C370E2E5ADC4DE274F33432B553FCC6D4CED04665606FD257E0838F5C75D2822B1B0A4D82B9C6F8D344B31D2FB18A2EF37335053814C562846DF442D5DC77A704AE733DB78C816A4FC8BC238FA2D098A91D59230EF53ECDA02DC81A811A94781666F02063CD093049F99B4872156C8D41535B5DA689FBB98E9753508E8504170D2E7ADF3852B9642ABD08BE11005CBADD3C4273B733069317F16413624B0D70C5DD225E40BA93F0F9F11A562693B44A66022B3DDC6AC02A1AEE56F7A35B78530E581F937ED53CFE549EED361B7E8A71FC3CDD49E7ECDE706E2F7AC89B7DD7398BAD6C93EE0BAA295DBDF49E31F0EA7D96D7720621D516D900DDA12DE039B69DB8243DA8E2BBD58AB79B1EA3F5C9E643B79E5ED10723CA3C7473297CF9DDC50FB753FB170D24AC12F695EC1FD0D1F242C16E5462EA30036A380469A02AD96D6CFA18F245E6252AE0F96E84C0A251C0B4652A4468B905DCC5AABAF16760B99C9A21E01C9412FA6DD47B44B8A8D8B125941E70D344C54DFBF9766B48B4ED7C8F80F0EAB0AB5747B2A1653EBBAC1BCA0C54E84853C7FB2FAB732172208AC48E40BDC737EB2CD942074F4214FE8743929B3554664BCE7EA57E6D59170D4B8325A9DFC6701521F336EC50D56360A0F0AF1A7201956568431355571B8FCEC0236A92E40C3EA259013755C29B560B1396EAA4E2C91BA60F8666917F30E8B42F92299EEBB381D5B4C4AE4F1D9145F868E72EF0EA3059E9B030BE82D1B77A0821AF029F54E41A5825DC2A4A80809EB2F18FEB586C43C8E811B8769D182AD91A1589D172C24C70B97D1DC98D367340A8FC42E31870F205A75ADC4468107E67BFA1AB5CA25203396B29579AAC54AFD65E08D37BF06FBA3C1D5E2D71AEC881E5C35B8FDEC0377A8FBA40FE5F0A0FC5DFE182625AF4141793C57038103731456D5EB1BF5BCCC62FFFD25C4462900AFD0A2CB09231A52DED6FA7665C6D2E4C031BE1DBBC3C2DEB0BA66005F0D25F311C7408F59FB1716D551068F0625DCEEA2FF1FDD4D199FB08A2CDD6C83BC5020CBF101F83C4E519F243800203CD12B21D6CC37B931EB15BF56309C5234A1C2CCAE7805A98B4F24D0192266A8830E0B1185BBBE7E16700FA5738930D6D35E32D116C5E1BAF80B519C9FBE446FF1AA9F0E296545BFDB133AF6C478B93F4E4F9E88C6DE9F5A639863764F5939A1D941E582010970C74E932FA73E17A2225871F47FF106F0C0D466B6569C9FD92D974CA43107A91D228A696983D0EC8C490C2941AB9DFF9132C59757D71D4211E83AE360B81A961BB05D5FD8C6C5797D2D8A12C5172CBF10179E43A7DEFED230A8B9C0AE1B9A7F2DB4DE418F7B6C3EEB43C0ECDAEC75610BA0BB3B495B1ED2DBE2DE7D535DA61C1667746DF033A866D09FE551E0541A46337B6594189D668E7670DF719248412FD7096A7C5F58C78D26BC38A031D7AB0A0D141312A9B37645A4242A850C257C678F4907E9F83D87C7EC1A7A0ADCBDD8215F88758A9F9BD6F415C8A56FB0BFCD403CA43AA2853DB87F17BC0E2E41393583621D40816297A727E6990077594A94B42C12A76E072CBAA73A20FE87B7F526BFA4B3F555486B6594EF843FE25BD54EE7D59AE07F4A99C4FEC86CBF9C32F77F94080C6F62FBEF6C23DD5B29DABBBE60C24C06CFCC469595DAEAB23EB818682648D43048ED5367919CAB698FDA6FF68E453D07BF63586ECDD42CAB15A55E5CB17682F12CE054EBA469A62FA21087D543F5102D7C1886755F3D6A48A7CCA5966944B02BBD01ED2ABA0FADBC5F8C0FC0A3C4D702D7D00B57C362C7341BCFC9431CF2D903C4334A80E946D4159D752F4BCD410D3750AB98AB3B298B62B2EAB6D55CF4CED933F6741D4A38B1FE41BA6C3477D7E2301C2A90370904DADAAC8EF573FC3D37AA55E4FD171E1EBAA97A8AF65C55220C1091E0414FEFA8721EE3A38AFD5F56D09CC95751431A448CE76CBABB57E92181E5CDCB290CF8E090EC00F8F3393FB6B42386503D1573A9475A0922B088F8F52615A7FD58BB2CE74C664A6EE6CDE2A31CFF5C81D7CB585BDC2D8A62E174DC6621254FCE3E889C14221F14BF90A109012E96E346E5695FD711FEBF592E6CAC1BC0F196B52396612D761971A62AEB41C2B285BBB5376AB89AD963E0A63DC1E439056851F3816C428F100D7A9F46ADA0B2A3DB606BC0EC47025E1EF3FB44FEBB9D66B25247FA18795569152F2605FF29B2ACCE3E5844FCCFB35E4B61B5CB660763AAE299B8ED207F6D430054AEC9B1D5CAA9EA835EDD04DD79435B53461B46F1E0A119D817DAA84030BB6A9D9C75701FFD4AC9136DD19F487FEA20067074E85797120782537D0CB77FFDFD7929A89100C79C5FE79CFE401375422621041C0305E266D30A2C9E816B310158FBCFEB4DD9241AB52421FEFDE3656C305A27B74F6FC4845F4A3B54DC6DD76FAA8E47C280F86DAB9516F82B7D9BDD069A527A99B5380DAF498104787ED2E2FDF7E55E48259143C3F3C6FE700332CD6C6775E784E78EE9EB011C7D55F7DBF919132D30AB68B9ECD19BB8F4947D1B4752DF855F01ECF916BA6AB23FE40A159772C2EBA1FBEF76C2C844F11DA87FE9A100FEAB7E10D10562EB16DA89C803CF4 -MD = 2AFEEC25672F1011CA5EAFD6CC86FF7DF79E8A686189B757506F4E46 -Len = 27941 -Msg = FDC1CC27DDEA933FA9FC717575A27AC7AED73A748F7C54FAEBB53E9F04E52BA88660E85B37469B48B054EF7FCB6D54887D4BD24D5DD8CFA12B7E617798D3BD275EC4979217F02E00E5D0DBAEB178A7CF5F06790EEF413D22433F45E13DC05A70DADBE84449F951B7755146D0F73EFB1F12BE633059F21CD67273007F8207F2EFEE299BA6BCF89EFC472616DCA4ADF049804CC15E7C49CE0DA6070C6F2D0D2FAB0398DED8344776DC8CD4511E210EF47BFF201B4764FB4D950549D08CCC1BA1539C7A82E365622D0BB92FDA4DB792D89F3585465179CC53A153BD09633B0358206D38A954E423B45D25DFB5B1BC69851AAFF46C8585A2137C8A6FD5D8B9C1A173F860FDD2789C05CEDED334C72AFF8DBFC2252EF568A8FCA8D5BB5D633F3FE75C96CDD4AEB31133BA6E77D0C8F304800911B7801284B3D9771757025FE47EBA7761A561E2C1E9EE1DE34E4867564A00E0BDB9A587FE5F7E7DF6DE6D1D1541B41B8EBEB067A8DB1370C429E32FC8B7CF2AFA7D2FB1CE0AE968FD3C35A2A776BE207CC3D3EE843507C78528253D47DF812350EDD5935DC67D73964EF637BA71E5B5D4334152CEBAA084BFE59612DAF2D9D2CEB0AB0CFDBB1B5296ABC0258CD0FDFF358804AF13173EA69315EBD10EB23A9BD99453B17923B1102BF1B2279E65E416A67660739AC0EAB289BC9DB28CB3184D08FA9318F63931EDE150F54886D3685ECFED7C9EF5E79DD16CD7598FDE15F33F5ACE0D97DD6D67CAFAC92FAFCD4A74BFE8EC29EEB448F72B861726ED7E00A86A51C76E261E0129DF58E526970A2AE3F1C31296E2F741CB090B09B4805B8BD6157D6143949B7D78104DDD6DC7A4AEEEB32FD29D449173D282321DC51DE7FDF3ED7CA769E092D8C27713A1AAF5D2598FBF567D00E43FCB384D07B8ECBF83C17DBFEA9B478AAABC0104BA5F184E09A4DAD27705805B2CE231C70D04EAF03FEFC7848255755D2621FC4B7F9F7E56308511767C9C07CCB1B2999E0C76D2EE8AC7C12B711CE1183FEE69513008CA2749E41738140A778DF7CCD5F09AEEC5FB8DDFE2FE83BB1788AA2D98EEFE9A20824DDE72BAED639CFF98C11B46F43C74A2E18AC3E5C706810820E3B4D6A52DF22B0A7FC30AFC82F1C3758A62981A84AF30A6F2C51D6B7F24B89F46CF383EEAD532A2BBA040F8552780CFAF23C25D9507F08A6F89BEE90CBA3DF264C252C2BC5E6E395C7F009AC7B6C68B744C7FEE7062E74DB625E509123B73A098A80798DFCAC104EC682BBC709D83C8AE0B07CAB031D4F3F31328B0ED9EB2B69BF96F52DC6E3C1561B86CC7A855C120012327709B533527B521E91F83659DBAAD9BD1AA7191310059CCDD1F299BC914B3E9E947E86372ACD1DC54A4B3A30C8E2C544B7246A4FF5CCD9D9850FEFA3C6FA40BA262FB3588B0C6E1AC9EB901D685DB85332C564A0B0FE91FD09ABD9D81DE412B05778A9611CDCE3CB6695499F0CD089150826C0E47AE90595C76D2668C738E6798550315659224D981875B43495BDFF3C751BA6992061EA5B3963CB7EA66DDEC66040735B4F88E78B76AED795CA4EF9D739DBA9AD7C6F185CEDD6CB62E5636CF2A5E78CD2B47947BDFB2DF2E6BB738269094834CB72E29CAFCC3713CACBE43062FEC1E16998933373ABD97E58E3553C46106A95D3F50AD3833A0D9B614FC6B68A52C45BBD079366376FE47ACCF19E357CEC8EF00CD6774879C5E9BA9F166971DDA7105C0CFB0D3C1B271C0D8E7440713474700AFB763EC8D85C3DACECDE228D99CC8CBA0A7D328DEBB10D645C37AFBB2FCA5DC174CEB773EC93965CA0600F50CD307466A484997BC54C26F2F870538FDB9430FF29B558C53028A5AEE72B80754FDA969B6D67F5D8ABD676EFD03A6C56E4C9399C918D22394DC73A56BFEF8744BE8937506F08F840041E99BEFAA0AD1B33186FBEEFFFFFC24F9C157AC5BE104F2FF9E86DBB19232C7A0FEF17665323B7B3C63620207F521E6F9BEB2C2B2DE09ADB320146AA8A5189FB69914F0A508DFFF0B86B4620E91545D114F8695B68536A9B49E9B4668552DAEDE671F42BDB16EFFAFB526B07EFA9B5730FB1D111F725A29888E2B00F9985F1D1D5E6190AED50B39AFAC89368C64D251208BCBF9D46793D3C8B0C6AF03CEB2F3B8762C07F84F3AF00E33C0220673CD774E571FB756E440CEFBC2F98FB9368613A75CD75EBA5024B6399A0BE4CE870BA443381379634C5895011147A18922DE55BC3AE1C79B956E7E4701AEC1715F44FDACBC9AE9852D83A6DAA9903F7CE2B6AF33CBA1CDBC789EC14A7AF4A962B35F04E935D9492E2E169CFC93FF4CD23EEC2F0BE023C2B5F1D954625F71A1242640B59D9E11E2BCA94437C02A12691FF5E0A5843066A47A323FDDF369E1250568B614CC9F3C22C5B4C97CBBDEE129699081EA78630836B3E04F80FE5345AFA2A420B9ECB988798B8E1B0B32DFF48A05414FB852EB7A40E93756ADBC10C02772AF331D922A11A03F91D7B4511830FC88FA65BB478B21A8D5B6C751348414071D2A63C05A2E1DCF30DDF22ECB89A4572ACFEBD9018747BC51F6B697B454DDF647F683422D8F6248BA4B99FCCC9369F5391D9819F237FB55BD97212FACAE8B58B06E5C3EA6E344E71B0EAF811A57923593C96DDB139D1062398728BFF6337A6853C71D69419CEB5CA767E3C6A4A248FAB5A4C04E27B089DE70119C60C2B99A618925109A77C569E123A2A2B41CA3997A413E774A8B1A341CB7D0FABA4E9D96B3BE693336B9E8F78D48C8800C6B7ED7707E6B2F1E95999E5FACBF622564DCD661CC5EE7A5B77FF09F0655ACC5C418943031A0C8DCA76CC3ABC3FBC7DD66AFB0BA3A5F4227ABEE754F9630A531686D68F65861895A99E6F4AF1DDF17FF250859399C5772868911ABE1A55E2002ECB7B53B0CB545AA3ED98810E78FB4D3AFFE76F30C5C25544BBF4C3C0D3F5A10178EFD50D2634D1FD0F281FD73FA0CE822654C65585B583C77D9B249E6703AFA2714AB03AAF86BD531099D4F9047174285C615F55DDF5BDC5D301BC8D67BCDDCBE3A85D92E6BC8E668706648E78BCA76CB7429D5BFE5599810B2463AF8313B0DB83D48ECDB7EE53AC1B5007563BCB8A7AD94521C1FBA872FC2E6CF8E4F15BF8C680585C4AFAAF176367A535646A0D8629B02D4B55CF97F01C6AB38381287E50804B34B982AAC0954C28B219F87328608E8CA4288B86E50809F29689AA4A05E1F6C700020E91219B78BD4187955BBD9DAE8F6694944C97EBB74E584788E67A36F8F0F994220D9EEBA071072BC9D765AE0D4B64FFB0E288570352168424E7850B1A829DB13C563C2832C8D6CE1B801299F0AB43495C3634C2B15679850C3374CFA675450C9D168A8766EA67FD1A6E6D5ACE79F58B535482B9B037DF6B782C704850B61931B49406100A1772B04A96CC3D4C2B3D4292A968D9AB6A0790BDB420E9D142C126265B041891186193FAC4D556ADE5427EBF4271DCB9189CFFBB071209AA960B94497BBEC713842DA42C723BC9BF36468309F6B86B55F8F75D2C16DCBF49F493668D4440958D5D1B6ED9CCE6B403697B0CB485977F320613E5F7B81C81EA9A7D9D5D4577A4C65AF00F3C87156BBBB988FF0CCE11BAD84C53FDF50DB9CFE13A41CE4FABB2DDF73C8604975291867DD403C4F69ACE3E8F12F0DFFABD180127C36C658EA63A28DB1B062C0572CF7E05C2218B5235A50E947D4E925639A804B683124DF2C9C742DEEF23336849C1E552F3EE3E3ADE8DF2ED4EE19DC5B59E2A5FEEE08FE19E08C1F1D986FDF08F3B55F0EEBB972666F7FDF79360581EDE1526059107393660B8B1BA69422F143FF008EC889EFB5E2D1AA299F41D4F732E370A120B6A7DEEDB6BF5674940E2D59A5419E1B062B4EDDC8AF34C2D6263861394637079EDAD46796FC0C4EC5D112A107415FEF78DAAE49A7933D158525901619635A4C32C2FDEFB49C7D66C16BD946CD176F0AB528606F6B1122949E27A5F0113E4C31F0894B9CE8D33172E87E2CC57DCF9785B035D49DE7A5A16E8EF29A68D14C390A1BFFF9191A37E0426C0D8377957AF9FCF8938DBEE6789C51F6F0FB8E154550F68CA2BE6E252D6DA6DC7F9370FFB9A81CE7405BE3E109F8A0FC0D5B4349B5DE1FB14C8564417079DCE3C0C3966523085931FF4885C2F111CF779D0008C41C7A0014418BD3B585AF75EFE2D5A783D9809089DD7D709D8BC44B4A8CB85D22C4EECCC62985E42CEA2A0AB0736A28686BB43DDF25949970863FC8877C5E33E9BB2057BA1E6B4C5AB19E1D5A14D012D8F9BE5E97735152140AC6E319CFF645BFC64C9A5B70A185E7638D5097E81AE3976AA863BDF2F272B18ED1C1EB2D41ED3E69D8D33B5CF0A511FBB7B5BF957536A53921F99481C2D2F5A327BAB1F50FBE10DFC4C15A78AEC13C948AA2A894FE16232239A7CA2EB4238D148DD22B327FE141A87B0316EDE772E579EDD9D03F2127D59DFD22DFC8CCC51EB495EED30E91539A5EEE4681A8268C6592227299460992965A4EA0719426A2C7096A3836FAE0E316044F8EED49BD8DC976332E984E1EE1ED20D9BBDAD69E03A3D8C9A13BA4DD278F46F1D082552ED9DA0BC8EF30310568AA537CB6B5A29E15CE40EAB8EADF353EBA5B4CA034F8BD717E1F6D88228CEB3F442648F1D8054AF924ECE23917D8E65BD288F8E7B1F4BA234D33FC0677503F22AD75A97ACFAB91B0DD0457FF8E10C41F1CADDE438384D7ED93EA4C7A3A6989D35944C9308AD24E915226AE041CB91CF96F0EA1B9970A6ECA67C08B4E2A7C0D1C28176BC682883A2ED5EFF7588974FC27F46D55A0424FCA06ABEFB44645429D9A6AD274CD2BCA0394FB6AE04136B8971E4A4546B8767DB648521D93B57200B67D65B4493172F99688B63090009B11970ADC31DB4C766BC75D5FA5B414603EFBAE2A5FB22AFC140B2C92EB7E1109489DC618 -MD = 463329CB7FD0DBEFD0F4B99B68816FBF609F3EC0B27819A2D83AE03F -Len = 28004 -Msg = 910D3FA34F9515546A3F57B8A1C09394E3BFFFEC2ECE7D000FA2D8CA2C169E9292F42A29933D0D4316D03C7B2F799195BE1DE20DE6A7B9B36CD51C0F2EACF6A9F0A9DFC8A6CC91E7D453DBF615841D2FC13FCF9B9CF23DC3EA8430170CC4AAF3D6C1880ACCC29D68E181D276B3E7BD6EEE31BD5E3D7AB48EF19AAC4D86FCDE792819A11937324E912F851ED99E0763E60E1C78A136DEEC1C08466441E128AF795FF4A851ECCA77DC84B8E87086DEEAE275018F7C8A3DD16943CA5020126F8541B7C7BC09FFCD9DFD760CC2BB4C5C7E5206B392FFDE52E30EE0C5649AE0002FA639962709FB10AD81116B47437932AF9033E4FE2A4B2EA694F16FB0453B24B3620A4B3D94C9D1D93A1CD82DA8FF26DB4770E89401F61CE2FE1E10A2FEAA27C5BCF96E232C8454A22256F2876AD6C4A587E8BFE82F07A89322A60E7B073FFF16E77FB1730DF7300DAC209ADBA4D2AF9608F8D0223C8AE1B58F355568BC8DCC39521BDC78E4575903A5E72EA62D2EBB2E8D1EA9B7A3DE8004455CD0205673ED1E4A0437EF12DE740B4FA1ED929C15CDD3FA246AD19E75EBFC1BCC2B98CED18B511E51B6D6427054A92B949C9827A9E799EE8CE65253666321BABC07E38C865F7F9BC78502E0E00145ECF55D3E83773BB67B6DBE7B0B740D06E736589999F12FF1E7BC0FF40AD0196AE3DA4ECFF55C7BE881A261B6CC04989BDEE2F9438B77AB2A13E212218242CF5288BA3D4FB99A7153D8B8B59F23476B325207F16FB5C6F0E2594C5E1C9A53DA6AF3668D94FA5B418331FEE1C6B086C0786D22FA3A2F67A7CBE55879DAA56B81CBF2AC97F507CE954913A62E6F114BFA405E272B1F7D0F00C4AF34F52358CE862411AF129A024B4546EF7F42C2553EFAA34C2C0E255DE0E36900F1060435CEA9288407E5B91D1527C31415E9BA04863127C6CE604DB866A059C411DA3128ACBC1F4F22089A822BD4CE52F7BCFCBFE2C627EB5FF7A7A24F46B2C79F1E78E310C911E1F2129F9E825F458A992303522B16D5FC904E66CA6CD543A8CE196F58E12491DB3EFC86E20DDB3C1050017227CD37787A8F278E3DAAAB39912ECEF1F545A7E2C672F978F4A786B19FA976ADC21614C137C5F0747163F189790317D6975C8C96DE70A766ACBBF50519588403D35EC2E535D80FA6EBFC20F8BBCCB3EEE1C863002F348672F390DE0E20696DE114C1745EB5819B9F6913203D63B59E191B777B5DC68BDD0CF96778EF8DD8B59E8FEA6E7BE08A4487AC881B21CA25F145EC6501F19C3960F4025901B145350B5105258A4847FC30BC0915485153659E6807C685C0E01F9DED84CCAA40BD1EF2B4A66743CD079CD03ED06B14C92505DFD3BFCE2ABEBBDD80908B0F0B9743AFD69A5DF22AF8B94A6B93EB6856AB2ED48ACF5F31D2691CF0677A928A6311485EAB8EA58E4CC41720B3014DACA4A2C625D3E4D4EA2512E3DC086F68A4EED90C5E4877332173631395C81AD4B53887C0D30F1CE7BCB47B1A5313556985F867497F4DB41D08D5B7F851D8BF4473755E8BB5A471BE950BD399D3813BEECC9982AD1EEB57DEAC34B4CA5FD7CF6C2FA16AD162DEB3728DB1AE1639052B6A16159C93719223CC5729BB862D24484E76540B6709D132F78F936D359F85A6EFC1D49705EE08C6B4B4779E536487D0A71C8D641BA8550606D8DCA1F06A9B3DA47ABF000F24BCBD01F5B665232A6369A7AF2BE73119B49227147C7A5B6AC8DF24A13AAAB38D89761D2CE80BDA1451985F57FA58C18BE65ED18802CC2F7A6793301C613F2EE1BACE0F4DC0208A50B82C2B641EB27E7F4C7695042BA43B0E017E799CE0F8BA6086D65B858B58608401D47BF9C9BA06C94A15324E758FCD3C906BD0B134CAED6C350DE89B2FCCD42D1E4BFDCE0E90BF3995FC0E1F008CB9A475E2B0EEF04984B66ED2A0EDD3C3A35B1007EEF25D32E3029B3C7C7D18FDE8F3C06332DCB99B586216831035F27DF6270B5B4CDB8879F74D3C262D0B6CC5B754CA6579F80AF9DA59342C4C9D19A3A4DBBBD638833524B088FD4508F373E4665AFB6A649101B1A00A38B320F8D14404E593579A76A816EE03C444DD0ED0F416566E0D4129E73C9088F9B0540A255593599258ACAA966D0674B49117E199F3464709E56E4174C8F8E0BD55FD641239649A6527228C4876BFBB41A10A7E3D584063908FF62897AA7045B9A6A4DABE816597D553D351B38771C3F9E3800646920DC12FC43A64C1A5D8CA7E446E2D8CC05A816B88D70A4C7FF8E5C3B9DEEE527BE41A89D3A41B25B4A127A062CBA0FE87777222AB5621C2081D917F05F2250DD019F55CA56C7ACB1B636176856DE59B199B3A6D85EE8803A85005624A4CA16F212E1A5552D512E5010B09A71D02BA06A6349868F98428FE0EF9EB5DC61A13E32CE749CA1F580A438950F6462EEB7B9DBA8C3AEB73FADB3166F05DD3E5E392FC41C3301E22472BA6B9585FCF5368B1BC807A87E07F22D53FB2655DF346325283EEBE82B97B041A37045DB5129E4DF7FCF116C085AB5C876B3B91CE1020BB6C9AFB2E99EBBD0C01894061D08629C018846425C474CFB851A15830ACDAC0E6CBCB0B513BD02330A241BF5BEBB50E771B54BE978CA7CB151C817B773ADECF3B1ECC986605E19BA6746AA181E3E53915A36C3175B58BA63339D1EAEEF3C402337AA7F3DA61B4B2422AB95CBA1258EAD972AA584665E72B15B7127D12E4B7ED52118F498DB30CE1C75C1D6F31B9D367A56CE670083D12AF2B1732949A3620D14B61BBFB652BE1B37B4C54D321FE550023A84E09897EB46C9D6E46D03C247CD4F99B80EC7A2811B41AC16A87BF6C67376BFFE22FE5F5E14A2B1F3E63CE0387B87A801E9A4D83BBF7C2E0AC0C38E4887C20FE0CA786508947F6688E985C5F7DB6F48EFD7E978CE588AA907697B371F71CB8B85C46F8456C1AB34CCD40EE6E97FB85ED281BEB1F82211D029DE7587A88159E7D64A8891E429CDA63C3EE6B8BFB4D4F4CD4FE2F466FE2F9D86376ACD29D114ACDE3E8C3175E217F615CFF8EB911A02BC5DF7F46E833786B0D7D151770ACEC4D322BC65DB1B8695D3A4222EB0F4EC0071EA8F9E36C73BE009781ABF9F54A018E01DC0F1B289DCE0AB6D139E56181A8CE38B711DF4545B3435D5D8BD9E503983B67F5A689E168E60B5AEDFE1A22D17B27A3A419DECC43F47FB2AB4E421D5F7F10A0C68B0BA6BC694A9BDC08A9C11D1481E077E36AB3B9D8C5B72C7B5DD62183E68C8010702C5C7CCFFA6303E618D2D0839510493C0C96B519E1DA43261499009135FC90207660E4E6792840224375ABE3FEB4B10A5DA9B462CB9E3C3123B8A2F880BA475004DEDAA154A1CBF30E4B22B732F4E74B303168B68024D10CD84ED10640FA6A2DB848D0DFF339EEB0AD779E63EB229D3B73FEF08677DF6A39542631A03026298D86D3E692A4CCE3633CD10B137D25FDF79761E9B3251638A7831E73250233418C85359552C8B23D79E019E1F7F58D98969A7E6461DC5757235929545305190EAAA4AC0B33AB529B7922FD0F0E33AC19C2A0025C5F31AC0E91BA3961A7510B23A1C42D117448E3A63FFCA311EFA69A66B0FEB3ACE855B6A10B784D6CB0D002DCAC1EECDF5548AC1DC06F0E4B4DE96E716A0E532507B35E22068742D3B4B65757B6530935670A20DB1A821B39FF4C8FFC4A57A2FCF91B938247F5B58979FB1E34F21EE62802E74528C148124688B8FAEB738332907C0D563CF5EBBB8890B1448D4B35F510354E691A10455D64BDF266F873DB2DE3CA30AAD81909797B331B9FE45A68C5062ABD3DB6CDB7A8682608477AB2DEDF4BE2BCB80E36B468B7A253115151D79720861BFAB416C5AC54C7BE8AC6EA1B2BD59C40D40D6CFC0743BA96B97C6D42C53D8FD0711E54066CFF82A4798E22EFBB713727CB0F2337BE5365E52B2DFD132A1B357D05D37916D4D66A8C62F207D0C924F805C8641704E1CF293B48F5ABC4C5E487056CDD1B13FF6FA465E20E84ACDEC98A04F53B21F077507BAC1B86ED2B2A55304427390A6BC711D044B6A1FB511B4ACB91D13A7E115FA0D09C342C78673A26DBCB6BA543F90CA8323BA8D62664D5B34352DA1C4CDBD5177461D3E02D64153D076E0B47CD32D540EBB60F43E0D73057AF2238D81C328F034F83B5042C3B18F8DB0A358BF9594F32CCDF8338913EECB766BD86BFCA61B1501F6F63A767744EFB11966F6D57365F70D4740924FE53CC48C2EE6F9479FB850EA331B265F6C70FD9C3B075C165CB3BCF2EB4B74BE9069EE8655D7C6D2830CE7EF0BD566C723D718D50CB7917AD1ED9D893703B50064C87994690BF07D6FE197D5DC0C37D9F7B1C277743ED2471983821AD5CF777CDBE1BD3C80229D8B8730BC4C2CB63B6E3812BFAAE582E1B356116EEF8D9EAB43833438C58DC93B4543C23AD10D087CD292C0A9A1998E213A6F7B859E7C3F0FB236C00D07776627775CAA7A7BD7DC3758F47FD694477DECA8642C0DEFF7B056B66FFA6B60FE5CD75F9D4F810CFD65FF98AEBA3B7D4FB9BF89E030FC7483D9A14B80057ACB6D717B1D3CCC271FBECF21FDA415738A3B84BB679EF3D6BF920D6FAD347EFAF41CE54641F2B41ECB1AED63CEC687E3D8E16CAD3762236BACBD934D64908DB2C669C17D07C34CC02B99BE97A8B2403A8FC44A6936BBEC4C85B8CF19EA047400C79D9880DDC45E36A318FACD6F8BB0E3BD0DD05916D658281DB36EF1775F9AA027BA41F5DA7FD800CC4474DEA8599C243DE41B21397341D438701B75648C807DAB485507568FD0C893E15D88D6FC8D5AA8CCDD722F15F2B5854D79E72B2D9DD6CD281FE0A8A0A5A320E6DB09220E2EBCD0E8F2569CEF8D82D619B9BADE88330CAFBB61CA19AC9180906B3D641241EC55DAFE2423F07FB6774748F1725A29B8F60E516776F26099E0607682DBD9A6853AD84FF9674EE55AB6C1A9DE8C0A7ADADC93950 -MD = 00244A07BB6B5B046B98CAD707857C09D222EF2844B4B9C3B933E1CF -Len = 28067 -Msg = 51E04A87C809AD9F899CF659412BF75FCA8EE386629FB3BD1A532C291A7C29E22DD1E1BBB4AEBB7D8435F036A2E3A227E44D5E5E84E74F2ED6D3FAE9242912188BDAEEDE814A869A920EB39A0E9F6E928E227A930EC777733EB6862272CB7D0E3927C05CD2D3F4C3A1383E313D94C34F98C9AD7ACF9C618B370BB97CFE0BE7987C4C233A146716495D50EA1396EE4B43A1F4F0369E5250A0823B2E5F5514D480E20592B95A30D71BD2937F0CF5D2A77958301231F5C839963703063037FB28EA8A23D84F55CBD4EC371BE6482D9328E4B2083BD3DC0E31CA71D324AFACDF0CAB164350F9C6DC9C510BD15CC7A483245B452658A7636EC4BFC13B3C9DE37297731F8E4AD85D5C522705EC10B3529E6BF0AF9699FA17D39B782F3696062A54C6FF73DDB53A2D225165868C060C8BFF3F22BEDFE1B5D6A4317078EA9BCAD3F11674668DB9417C712E3D133A83077BC7E8C572E245143129D0EF23C76D84B351DEF70DB484573CBEE24902C988FC02D2CE24DE235E436A3E51793C44E8D0699FBC043024CD7E3CF83DDD9331AF87B6D2DFFD58CED3622417FA3BC3BBB1FD4276D5D4D6D95C2BA6C2734EDF019EB1438EF737B423F2D7CE8FBEF48795B3435C3E97154350A12E8D3C39CBB37699B7CCDE7F4AAA001097C8BF39936FE1877135631EEE3E89AFDE771E3A41C72B630442C6410D4776997B5992A42C598B744CEB2BA908426C1A6A3628CB916180C3AF1A3543F9E87F352D20E14D79902B0E52F325985C90386E03C5D92F23B9BF59889F9394DA1935E1CB2C1894C9626C3E730AA6D2025B4A35B466A8DB35C8B7DB4585776261CA0A569AAA0A5E0366FA51AF961090E375B9D8A27E91A419B96C6BD0F1E0FCAE93B1888CD563067583D59BB7244D9E229F981ED26897000C675AFB6EBD37D08E3AA8E4152524D43FFA8F421799DAA5351F946E7E255736CA4D731033C7DF4D43902CD75435824EF6F40C45E4C0CCF54B171E44AC66A602C1FD8D81BED76BD4012586FB78AC2B3E6F4ECAEF00BE41D62275861E3E62B73624F76A3A69FE6EF72AA167A1CA713322AD8D5AE913DBA1DABB6727F81D0AD8CEDD1895D7952570FCBACB6777275770190AAB46518C1E92FAC2C85C79C2C7A0ECDFE100CB2CE19FD520D8189D9A445DE6B533228A2BDC7792DFD101EBA65CF491442F8392432694AF462F0932EF186D079882155B939AF5246185E33FC2537CFBC5BA47143DF1CB1D53101F62A7D120D1048E1DA02CD8389911521988EFFD2C79349E97483164AAE8A91FF6D07A7C1B4C5B78A6F26849D8E3BA3DB47F0E2EA239ECDC74EFAF5BA041713F2F40D738B094FE72D8C0116E93226E0ADE44808D8F13F7431780BF418522C6E48A46A385EC84C222DDC3938F3C0DB9DF3B9574776C2927B944ABF8BBBD2F4EAD7B56CFB831518258EB55FD8E5190AE7F00F14011610001735843A4AC6FFBBF54E813CF61A8AEF509D2D46C27ABFABA4BDE68A85263D59C60BAF1563CAFC3035C05B674511F0FF75C735DD69998109FEF3B1A6A6F942741E531621FF3603C9D5E2CBFFE2A00AD595BEBF1C1935F60F8219704ED9D559E41D81F86B82AC921C91906FD84F37BBF47EE34E8EBCFF6869B80E3B28EE84715039F2E69A616C3351D3BA4BD5F2C8A5BD398052426CA70B8FEB7DE5543D703B425ABE3D108B1FACF9C12C84093E985EA90B354CD37C80AF51D3E523014F4500DD4EF0F4249BDA4DAD1D7A6937F990E79FF67EDFBFDE496D95A2D24CA103B5B983B10E5CEC44191BD34637C298F12DD987B804B08FFF38A1871D9E15BAD0CEA5232ED5A4289AF18D9BA427E5DD94E6CA8AB50A56AEDDFCC0D1155309BFDCA52D4CD4C1F737A60F1BF2E3DFEFF78A69431FBF2F13B216333612A45A5316CBD1C3F219BD617241B26513DC5312F104DED2494439F586F31AC0C0034FA037362E8F19A98C2FCA7EBBCCB7389B4454E98EFB9B63E116439CD3B9001028E3B96131445E877B16650B862E412CB7BA90C18E1CFDCF1E962E0E619E8981C1A59AAF6F6ABBE62B902FD1FC73FD05922194E857D3EF0FCC79935CD99A58A51B9291E0A7452BF3632778CC6531015D8A593973614B9AB6940F9C61EDED4461CF32D1DB9E208D0C3613E2EFEC05415173761166F935FA4F75940CF905556B18BAEEAF9EB04FFDB18E67D9B9FAC9D5F8EE8F3D2270C3724FA68941C0B44D5F17F12AEB921AA3A77CA559C821B10D7AFE874A854046257AF6CD6E9A5C5334B916B8EAB9751D8DE36573E5DF1442429D9D1B095965C9EF896BB93085CA1D63DA6171E5C8872E73D54638D8643A7A8501B66718E8D368F4ED4963AEFB60114C111582F3A7BDB5CE4E9AF455DF98188631DEF3386F495240B90CA8F5D2F9F731B3EADBD83B58926C05F7B9CAA26CDEC32E63723958D6086D4862A9058D56A22D2B0691A4172E1D371851902BC8F3DDEC316BB235F48F5C91A6249953CFEAD666E6891D1F3CD9AC9C5CF179CFF6920611093FEA8491E33002C98BC79B5C9E3F8D8A986A253D721AA8BC8140A0D0FF33BDAC93C40298B7263069D9C1B46593C335CB49C029C2C749210D3CC3E7DFFC252C9736C8F4C50E0D3D47080776EAA24EA3F53890D4FAD8B4CD9C026A23EBBFEA72D60C8C1E6AABDA0D945DEE2B06699C4C88836FB659D79B8DD58C8AF8B5BA839E9731FE0F2EE3DFA3A9EB73C63DBA16205D71FBA6DE3E5979D10BB5DA6CA1D7CE10D7A1E6447153EA69A17A6A172F6679083F70974DC4AE8594A20281838AAAE7378876C1403AFAB578CC6163358E714A2A3CC1D7F11536159F292B47380830462A6C534DFA0AE3A206374535EBA37B094932AE6AC9178F788371552A857468A7CD6F2DD6AD7758CB2845E7EFCD076B031982647814CEF3676ABB1AE4B9CDBF496C12CA95C8DC29389E11B561CA8B02523082C40C61F175CB5E575610C14229F440247E34D86D9757518011B2D49B17AD4EF0FFCB2963DECDCBC92BFD7F5EC7459E5D076DF19D8C3AC968E2F5B3AA899B3F95D77A41911E6BF62727C7A8A8B6438707D06AE1B589EECB275B538E7A37BB8B4C611F623BCD85A8ABD7EF362BFC63BA2F094164349200E449239BECA593AFD83992F6D0FB61F1607793F8663A17CF99877AB6F95A1748B6A87038A9AADCC473A3A3079BE77D2A9EB4C4A56A9394E610951FF595909A3D343F7AB44F64577F96B452DFE02DF2A13302EB018458B95EEA54044D99BC1BC01718261F7FB7DEFCFAAF40C1812A81630C9E8276B035A936528E001327AC6EEA7F859524C61F4621B45B0BD8C34ADAC509AAD5DABCAA12064DA6D46FCE690CEA5A08AE3D7274E754A9D0474C47EF21EE419B673A16F6A6D3017B4354F18D2E0BB1375A4E183E097E79CF1D6E77B8F4754DB7B31BF9418CBA02CFC587DF5B470A2C121B4365C954A83F82AE591776F475916D14259968CCFDA461B49D6BBE718BFC147D778173B0DB3D6F41E85B77A236FC30208A5D280CB7CE9951CD3A4169F0F02A892A41C308AB1E8103E69784C322440FA00EF8252EFF3BB2E94F42E4FF158A197E6B8EF6AF2D7B8C5E8B71370F8AF901FF2B6E893333053894B234A47C33B4B791AF544989023343C39AE3D8C11FA812752D831FAFA0614AA27068AA9F83C9DD404008854C6687DB9916F8CB8AA4255270ABD54FC944A13B69F599AEFAE135A19D66DA059D70359DA54FD1EC0B3DD8282D66121584F141DDB2D4AA5B16023F3BAF6A7CECBBEEB66F6C40F173319BC56C2245455BE19F2A7BBA67ED52D57985DB1FC9DBE9F37ED006141E16FC2BDFFBBC485443590FB7EC4376D6CE09B1481D6F88E130E225B410453339DF78E75BAAF7E6ABF3E64839BEB3835830FFDD6E3A254785B944795E53C0240C249547AA437FDE03DE8AE43B9785453499CF9BA14C4668F8A16A52334181E6637713B97002F38103FDB5D66210BE72D6A84CBE54829CCF23F55288D22E6D67A85225A298A6B01E12088C0DA7B550FA9CD8B0A9144ECA4E31CBB0BA28894D6F52976D12750CC99077AD6BFBA8E70848764E12CC9439C90B62EBBEC2C8104B81B14CFAB9CC4103F27A8955755619504D59EE4823F7AACEE023272D9EF312F928089430CF47D207CBD73F97F3638FA240FA50BF55902D0591A20ACE03F98821F3F37F7E126C2CBC0189E06A999C26A7E66BD22D141ACA6AD8B24369F814BBB6F5ADC6E3B93539CB97C263418FCC155D8104D66AFB7AC53E79D62E1AE85A94E5B8A9F7963A5872A24DE7BD40DF871AB1918F22229D8EAF5661612DF8C7ECD53E44A2EDC1FB08193029B2D2D06A0DB041F9940D37EF797A14FA5C2696ADE982B1B87BED6966D0D4F31143270CC6057D988C958C297F0D2641190E1F09AE4F8F235338D9F90DC06E53EFBE7E01CC5DB80A349E214D344DB3F61D94CB38222414F024FF4198A9D5C6EB43671FCBB7A75EE22289E3255CC36CBA5BACE96AE6510D316F77CFA413AF37671A2F0DF515768463398B346784759FF48EBBB9DF2315931EA09AF254496E6F252D69C94EB2F70816403BEEC444723CFA5CE8FB6649924CCB730C60A8CCCAA27CF6917B99CF4C172FC5E6172D064FE2C7BC9206FECAF93E2824AE629723A113FC01043ECE6914EC5F49B6F866F26380DF4A6BA00E248C02B78123120A3A8E78C6A899D8ABF32657C3BC964C39431C11DF417AAAFD1C207A754BE482DE53BBB22A89D4A3B735DC24268D557BF7F27D0F68765878408C9CE59D343619E224167B616DF177761D87DE7352BF9CA1FE00798BC15CF0D0CEE55F9FF04E96CE2DEDCBA9E35AA8CA307F8C3F90F1777AA8BCE1FBF6A7C8762BBA7F08AF0CE0FB22CC5793582D8BA2897127F1880A91983F1CE6A917251BAA689EC9712718500BD592632C6743BFF8E322AF634FCB8ACFA00FBBDC3780D192F621E410027C8A10D056528A5AB43293F095B2A81DB65C640 -MD = E80C346317971D543B9807FBA1D5A5A57A8B3B1BC50059245615873C -Len = 28130 -Msg = E51B106CEA0B85CE9C93E62861BAAB152493E7E5A30F7F81413FF2C390134A9856C68325F363D415DF36AD480D25D40590265BD7E349F63F1A3374212538AB4CC9B4CCA0B11BEC9BAC9C6B9DCD40441850175FBEB09255A615033A5AE024597B03C8DE3C42D040643FCFC0EC5DF715F79A04927B84D2AEE1D93DCD4E2E04ABD223426B658AD9226D9E0B2C2534B1362343FD3D7EDA99558BBE23A52FDCE9F629EBCC1252EE83ADD3FE4A15A63CC56A6E3944A8EC4359387164DFFE0F4B4166FEE360E0D25F019198C7893499CFC9D4A00AC557CFF97A744ADD256F7E696FD91AD65E86263BDC0A0CA4DC51431AE855A0848950057301F39A4F4C7BF1E78F123E57FE13FFC95FF0ED333EDC3ACB2CBEAEFD68C29561144744DC577BF00DCA87B84C59C63BF5C6E780AE6AB86E586A671F28E22EE951E1BFD79675ACDC6BB8E67871BFF3BB421F58DE306E471C661A2B5D0B61664EFCC562636E321BDEE4D759BF8F11E5D72C1C0AE87E2FD15EDC0B4AEE3D58044887FFA54BB1A0244F410DEEE80D41D54E93D26458651E8FD26F1947630022580C009143BB1516F8777C2109DDA0C0D5030EC6595402BDD9E696F96B1E23C2633CD45567CF69EC956A843E700160F52A303301AD5C20C441D56247394A930EEEF846789C79DD6A1021C184641D091411CB7250E5A822A58605008354878B7FD4F08071CC19AD459E0C76B49CB89E79D9DAFE5F411D4B6F462E65E5FF6C98AE9235E93ED795B006CE5E7B06AC505C84D74954A8A01D0E31A7972A5B2DAD60CC569AC469AF108AAA927F9F4E62D16DCF5666F80588CD58D07E324A7CCFCE51DD25D0CDE58C229A1B44DB6CA0A7D90B597BAEE9A056B842FF13B0A931CD2AC316EC2CF7073994C384495A80A2293CDADD0D3078910B8297592D0A327432B336F0B24BEF493B55AD984669AB5B08A2834EEF59350857FA25C63CA3820F9C325839FA21B4905799EB304AD058EE85F495DB110A269FF93E8A58999C43817FAF2FD5EE5AD8A57A4EE2C9D66EB2882A7C2BCA8DF92D2687A6DA5ED76527740DF35B0EBFA7A41C4D15AE70BDF445F772FB0A282937AEA35A2B6619586FA3B7A75B48D0F4FADF7D7D90ED8712C18D5AF8BEF089E4D27F858FBA1E3F4DE014BCA1099348AF1D5340689FACA3B306658F01C77F2F5CD9E5E22088FEEB3453C592071C3AEE57C10ABD7ED0AF5A53F64913DAB7189BBC4398DBC778DD1D1A0B5E8C92DD92866A8EA1C926596D82A728FDA4B6C5840C0A72FCBF7604AE2A95EE95C9F0D031EF7517F17F71E733FF65661591A7F875888DF4A8B119F92AB4746C233EB0D1CB8187722F9D61440B57F3A9B9FC9705BDB4A7EB309B97383E3A1E6935FA81020795C1F667457C3D04F944967ACB7D874A4F308FC29521119E5C1A2112516EA44A5424E234610C83F269F8BDE968088F735E5490F47112446809ADD3092B56A4ECC45BDF16D5ABA129C0D89C5E64C9056D853D531D02B5BF0B14F5CB6BE0BDCA5430BBBB25A3A743F68C0F93662B2A7B2AD1F3FAA563DF8DA0C1E5CE020329D465B9A0726D7A8D9D9E889BA45751C480BBF50C2DFA5D90D42D943E378294C0335666C25FE0C6D6AF59707A91CF9ED2A5D8C352E1E94EA0800BE26F2794E1E44FAA102898C5FE7F268F7E8F21ED486AAA266299F1F85ABDE22CAFFC0E30E369EA9A6A3CE989341D29EF2E483891904A463D1D5DD8838B7C09D4C83F163372C124925993B1BA0D3B6DC4AE81D5DA6EB16F63E0F707F912091A1B22D4F6488BF873234BD2C734B9F2CB9E63382C5789B0130F4365A9D90DEAF665050281D74E9012F4168174148696E052221FF0F7DA79DD5275BAC5D79A424710ABDDE4AE193B972619F6E6F13D46225D1F4EAAFF39E8061246ECDBDCBB2AB3678D2702208884B8BF782111B44567D6C2FCE9FA7E261ED9484B6DBC79EB9CC1367094B8C62BC8B953D1C3CFB90A8F2F7E89D8248254FF96FCFF7AA7A9B96C66F8C6FBBB0B51E5C5DBC2071989D0FA3B00FB3BF8C08178FC0A1CCD637B6975FEB0EFD04B8B2801851340930C5417D0D2B31E89FC3E222D4F8EACC9F76B2C19B14C61B868A5BE00CC1673FF439F2D707FA8B52DF71A8078BB5512D0CB88E11DC489576A0DE1EA3F36676DF8C34C0132AEEFB2DB15A84B2A9506D5601E1465429E09026511B3443326A3BEB9A73FC2EA2465DF8937F4798C428DFF07D1DE3D7E94C91486CDE1C3EE16B5FB38FC9AC0F10953D612CB1CC65E6554FFDEB1E33FC1FBE02E18C2EBEF8FCE4AE36B1CF5076AE1AA9D1C745E9273675EBA23BCE9F335E9C77A108C203ED9BBD3BC788C804CDDBB329040658AA119CD38107EB64E63AE934B33F538F373C10DCF0FFDC71217B8AF3995036BE005CEE9466298FF998EE23BFCF5A07F636BE5D82DC21EA1435DF459C36BFFB8D7C1786AF22C7E4CDA5FDC17024BA1CB241E3722112276BC5EF115FFC244BEEECFE02B4F9BA1F4C651463555FF841859B026094C93C74CDE43E21FB1BF8F0954F374A3A3923EF72DBC08D62631F367E23FA8BFAB2FE43EF7686E9697954A846C2EF44400C972D085D3426FFA8FE0D9342306D7C1ED66EF0697775B08E796FA24E9B75C3DCF7C7DC0CC577F6D622B92DB6B3D3478479624091A5FA320C3B96BDC933E3B8203FBB29F4C1317E3ABB41A50BED66A26BDD2BEE6EA2979139808B4CC452F38EA8038D02770959A060F0B22465CF7EE90C0F506F281D2DC5CF8E831F1951962219C0C0E450DC0A72A5C3957440D1FD12C17499975D2E84B32E7004A5F5F38419D76473FE50A536407DDC9D7CDD8E54FD7C76DCA4155624F3F3A47B6FF155A18296B11736E8B279416F59F2D793D2AB3745D1932B110A38B54BCF1CF2948C17C6B28B9EB9788A37EE8FB7CED040A17AB965C57F19E47AE2812D6EF5787A9F01912B56906F0CDDB81C586D562B9EC18C2F4684947A9F931507C72BD6CB11B90CB1599496B218EEAA84E2E035ABBC3FDAB1546ADA237F571D7C8F87D27121173C450B23538F073720EB211151C81888CFE4CB6394C543379A55ED2572A812F37CACD768189D66F88928A9A06A465356CABBE47E772FC85579B6F16E9C5F07416BAC93121E9A80D74D215D6572016CED2635A51C08B7F0384EE7C4B1B8E12DE303AE1EDF61FA3AC60ECE7196005DE7B29EDE052A305A7B6CA079649B9F8DDCF6CB7363C2D50017C4D32C8955F149F608113B21174813C56CB1ACC17E894B2EB01C02B180E05A525E414404134B96CF91B530F97988613F5466F394E82353FA7F8F5DF1CCB831CA9A5DEB1A05323B619FC7B021152BDE04044C158D1E7EF60969A58879224019DC9A02CAA80B1ED5C56FF5091392B0402D21570777718357E5CA117D9297E54ECB9E7CD665C265AB96051B309DA27188492B99A43437363303102B03CCB68707D83BA863CB6CCE8B0E5F7A9F78BE1E957E5E06996F84C16EA63BE121A64BEE6245850BDE878743CCD06661EBFBEA6D1A7E165701C7604BD3444E0D05C8C7AA364D8EB78C28FC29F29CE59BD14A3681FE8656F186BF253401C5E663A0FC678AC32DFA583DB0055D6B92B33706C7B22AD53C90979DDE16225DDBA7358D35EC4BEE979DD0F9F7ACD2550A52F7DC0E9B66C630B56D024D331025FC43D5DC24A090B8DD1907DE86EDB75826A65AD19F66628E210CA3A8E25D928CDE41DD2C99D8C5C7A0FB19A52478789E5A6FD88B7853D7DA1FBDE79B9A967B83DE776EAACDFB096E919C7DA250F2F0D6044DF5F0832AFDB279D0CD90CA84580D26B27892A9C427B0F49404D7BD8A590087141200E447C0BCF36D47DB7DBFEA5F5A13BF4A871462B0FBDAE9C6E28E2F6E73D224FA6ECA16DE767A00CF32FF380BC3479A4051AF917232389E4D084B4E1FC893E864BE20726B68675A3C70FD0B2DA8F39CD8BCDE1B27CBA975E7CC88AB02478DD5CB399346FCC78EF607B953F0ECDC378286A65A1E0199ACCEBC333AFD9A1EA5B721B989C565C62521C7A4DA73E98BBEE3A13342A4C970DD3289EBA063281C68A98D7AAC3E53AF7BB74E396BCA417F56CF50301A045041799B1D1BD02CD997AE1D4A5F5619CDDB4ACA2589668970F1056C8DD413366CD642AD07E0FC0F06F84055627055136F2789EACEC84E35404BDA5395345D1CF56E29653869AAE3F33A96A2D47CB937AEE1E9710549C8CF5049E3DB236647B1B5EBD094CCCCB8B947BC14CFB0433FB7CB55A6D80D61EA17E179B4559214ED643778D83FFB4E34C35DD3B0BB94BA521E24EBB4A554B446E59304683E812E4943829B43979CA91A0B14113F16D3136557F6377593EAECE8AFA143060E252B056160125D9202E1CFE6DDF8D813952AE864265279CB92D2B8BDFB260070EB2BACF4B5E3FF0BC877D083838DC2013A591C0F576FAF63F1C770FF70658CDA2D4EBB07313F5739924396905B6237C5A5956B0E538029DFD52DFA46D6ADFF928115F44C155350E585911776712012A57C803AD810BCAE45E61F0424F15DDD6154B3753B178FE680B7318E268B1AFD865E897E476C5071327EC420A50A4AD7D889D586DFD2D1B1516DBF47DD5DFACEB66DBEFF6114B683BF53572A882504828C10A488B8FF2E132DA2FE593CDB4CF0CC685AC3BC2C2B29D2437FF69D88E7238C455A005C907F04D8B778D41F4EE21E92E8849532E5C3BC85262AC87541700CF2B61F1BA13DF5094EADE825CBD11EE7565685A22BBB302AFD573A5DB4544839A307A247A8CFD05A7C7217541FA304A2DC2FE4B885BC8D56D6DC7AD89CB3B0DA5C4C43D2FCCEF9F449FE7267308C5B0EC3771B5B1141A8B6EA9F924B1A5A4ACAE314FC15ECE779DA7A0D33CC60458F97339479A42C988C2351F32532CC339DFE3B8FFA05FD6B1218C1326673648FB668C8A2EC57ECFE3020205C025A876450756171D799BE38C169219151C92DCC7A9408F6028E493854290A6CE256DD44180 -MD = 611079202FE09ABF05738DEE7104EA0F36481F1952910672BFD2999F -Len = 28193 -Msg = 516D0B32E99D9BF50FB737272BB6422BA8BDAFED8B187DBBE7749AD5D35D4AF2DC876C2AB3B263838637DCD68938F371940EFE6D89A80F0A4904AE2F15D2B1EF3E6865EA4A7AD3F40CA703040FECC76790CBD0008D78A4862C900A97D99DB135819291241E63066DEFEB90894FE2112D7D86B0CA163ADEF34E43EF1E7AD3121DDAF0B18A9FA345CAA46926B12B478BA0C64540253BD1C9DF16B71439D812991124CE1E3B25682DABF8000AC4F3ED3A3DB2106CB338AD99F79A5D01E64AAE10E3FEB294DA8317785124D2879C49EA07F53C6533D70A00158396BF1DFAF5380BE3911565474464D24A69325FC2632A6C07BCEA26A16626D450003209D520C838BC0395B0CB910177504E31AA5644C62DBB5AA270319B013BBA4EFCD02E9C245FD4803A537FB5449D05342329462E7D43926773868668138AC396B06FD5D37AB2295BD7986A76D86E1B8EFF37D80E1F397CE65ABC56B7E6809E940C9236C0BC9C4D12DE76563EB8E4D9961DEB067DEB5C99541AA94370EE38232EE5A1B029F34B8642D5DD5B822A4DD96E9774AF803F0D23A0A0CFCD0C7778ABD7EC9467430D015234ECA783C5917B47E22026CF86D24403861FF37C3993F55C5CF24EE903977A1D890271E47A85728ACFD0D95B76141F76EB9D36B69C811B476F82BEC54AB13A6497589C1AAC26EA431D2211E990A8D3D03FB7E4D56A5651AC0BA886580EB55F9F9A7ADE03C847412DCA9D9F6C4B8A0732067E09C637B0F4B80F10DD7F29B7984A3E12FCB6EF5CE61156331AA07ED32B369A6BCF468DF383984613AEF700F4DED230533FBA313E902BC76E6EC1364B4642556A95CC47016F3BBF0A49B0EE374802452B4DA3DC5E7BA55F99284DCEEBD5615F9028C1FF2B9C36822EC604C26B0D024238F0BEB4506C3B22DB2A5F109DC8F73EFBE33EBD903E716343BC71E65E1B1DEF712D5B1A84A20FBBFF0E21C1954FA57FB2CFAFEAE46DED7BDDD7E18F509D38BC9C2BE1861FC4305D4A2490AF55893282D6D9D7E75752CD021F82E6B9399EE2144927A788AA4428051FEA7A454867426DC0E787047E61F5A6FC825BC4373B7159F1C36BFEC81F86A2EF1CCD691873B34715C272BD2F4BEB820E9CCCD80560A69EA0BEF1AB9F3F13CBF26A6EAD15C1E35E28320B563CF400FB38874D8008A637EEFDEE6B81C2697AFBEB089B5E39C56605A227C96835FAE606918B5AEDA0AEAA2F5E7F2A03ED5B370DBEF043D3239C7BDA39FE7392EE6153F7B846BCC2E4D6CC1371E18366757E708851A4ABB400304E25C3C822DBA9C22206FBF4A5921605D5F07CC929095C5758420AEB8C5D76E504ED9BEEDCA598AD40E2E2A849839B731AC1E8F9D1292AD12455F3C766501264D5E6D6BD8A219040DFF17BC68B6BDA405C38B268F58BE8B0E8B0DF182AD23417CED90F33B6477B713567BC5C924E99B4A0322967B7A3CDA486DCBDD364D4121C17BF03E25E5E9AAC5A2F8412BACB27C46FF7B31272F35B0A604051E6F45287991A55960F33CE4E98447485C19456A882F3CDDBEFBB224A62F9B345A3BEE0570D1EF75813A0E3E71721EFB7F1F5FE1E2D317A7FB5979F418980960F9A08BF5B526D6A17821078CE72BBC2F047A88F2D0BFF36FF71A1A23991C31E7DD9C2A937F7AFD3D0B1436DAE132AFE2847B26D48A10C60CA4E915AD65623B76F26E4E4545D029FB12953ADF9D0A8631432FC09AE79440E523E48B9A212611F781BF24AC7B1384C2A3FEA9C31EB0AB6A3A90B2C5436FBBE46D877AAC824D7A97C0CE6D19886EB3933F13DD092E6BE467064A40065C3D5D65DAF50469A3DD6EC87411135DF8F6F99D9730D48C46384A9D3CBE9A0233B043EA2F0006E9BBFE8D6CEFA462ED41CDD11AB32E1192ADD2D4BD65A5DD907081C7EF2B7B222D98C0ED0F1DBA364D25B8348B344C9B4E44FADCB23A37465B04C857C0EA30B99194230064908C0F7BD456DC94EBFB95D922DB7A5066540A1C3B85DBEE25435162E819D3E4CD80A86EA7DEAD4DD18C36B3B96645489F7A233D770212C604886C29335A663A6BA2599C86AD466F22DD217D5E6F5D6DAE7DE8C7F217165170A307C691091996BF1797C8520EC70ECCA502E55A0DA74515A5307ADC67629871E682C6C2D57D161F1B2D59CCB8132A5536AA3558C9A439C6ED69FC8FF2E6E1FA6CEA4C55F6807D606CC88DB977CF760F0AABDBE94CA3C801C3E1B4178711FEEF33988BD608EC0CC05220431DEFA30DC5D9B3D09517B83880A1A85C18EB8A8FC188EDE849E63FC4B41F25044823CC30D39CC095A9CCF29601250A6284C9129119B2809ED517B11D416458D08CF8D2F6FE1A3B7EE197E26AA40B1B74BF3763F369DD583888F99A83107F6500BAB9FE90154E9CC5F0C03069F2F2FD8F411B843967203ACF769F585656EA86ED4CA5162081B3DBF614E5DAFB94291B21FC863CF0380BA3EFD9A73275606298FBF6115DF7FC1F839F006F2FE51139F8C8068A9E0B2649395FD56FB80AAA43FEFB53F51B78046273A9FA0B0CF857E0465AC5372D1361CF2A6EC57857F334EBB91578235FA795496F530BFA5D5321D63E8CBCFFB90207B20683E3A4DBB96E2E858D14737BFDA4207E02460E24F8D401105EA34D5A49879700E7413AD83CB209C2E5C291B3D31DFF3D06B0A354103A4F0FD3F921E44137DA4B44C267301DD444BC03AF241C31F78615774380E5D7C310AFEF5DF9A8110133012F530D172A3129C2149ECAC53BF2156331444BDCEE807F87E19F8E255EAE1008CE0188A5CBB9D5EA12807DF3ECEB6069DAB85DCA2CBC156FE7AB14A5B2E7C20D42BF4FF0A8FD65B13323359F5DF9DE9908F8C0A776FC917B99975A5EF60BBDCDFDAF7AE5DA7598B2C7B18F4A2713AEA4A6614119C09BA05B85675918919EC3C8807AE9F889F75A62147FE28BF2266297ACE92A172FEBA0CAE0D6B4089398374F6AE00756E1B0A27C895879A3ED62EEB68BB83A837203BFA6342865C749C5880B14407B10EA2CE68182AC0FA9317C7FDA720A92F478401CD56C4DEE002F48240010EAEE01F52B033F4595766522EE4CDE04A812A2FCDD6880CB684B25B57BC3D81BEF3A89A32705F1640D73418E3AFB8CDF35B064EDAA7DDA5F76A63A10177C69F92D312E75B8149D7004BD09B2665A66BC32E240E54E385B78D4FD7ACB142893D38FBF957786EA25D3AD7378DB448D9DA84905E38A480897CDCDA19ADCD480BC037443FC0C88C4DBFA7567ED00116B7BD9B9C7F23E0CA46D4FDE35C49CE8B01C4358C039C14CBCE104B859EDE9535C9EE79E846820DB668500A320363E5D3BADC99F9483E31A0E07F324A0538330D4029A0E78805867ECF47CD6EAEDC9CEE788A0A1D9FD9865EB28A711B1CE213B1867311D32D5C4EADC0C5B8D1D592A4E4262D69D1DD921A7A4063EB1BC2F65758B63F69C96FA75D9C84537CB99152D92B80337CCCB10FD7483B726A8B8A84EB696446F03FFC3C77B72955C131354467B08114DA942C42510D31A60A6F59975E6B5BEE16DF7DCEC6176B16A53F614086F4E8B0D6F0F59F98968DC2DB05A189FFFC310D907D017EE4C4E1F612D6589EAF24E5649AAE9B926955639DA090629F0C913DB5165B1FF132E9E6A35F19941FD30BBC498D681C7A578748E6331BD3D6B6268C69C49ED9DC539CACF75A51C5BD79B72F2846B0EF942D28F2E2CB93989CB4D75218E40B344BF3FD3DC2360FB23DCC981A7A39CFD4628DF0D5A41B6B40414CBB91E18E5C02F5ECAA9D9A25FAA721B00B5C4226A3597056C441A2B27FFFAEE38016ABD967F104FB1DECF324AEC6A7C5A06D8FF7D839913996D103A483EB7D44BD697D31AB17EB08F2F35C2EB6983E96F2A5FE2FDA9F84D221D7AA088AA3D11C8013FEBE9AE5D20A6CA56C19D0E975EC02AC0CF198C98255CD8A5EED806EEB4BB0234588ACB80004416F49D187166E55D59AFB9015776C580C6B5D75EB04F542A5BF6B5BFB042E36F6BB5E0D1D50BB139EBFBF6A8CF59D99EA2412C22E112A639DB24633EE772F26F0E92D16C4F9EFB74F855EF16CC1E0FF63156D4B99077BDEAC36AEDD2C78DF308C8619479BD6D081E604EA5354ED304E30CFA71D962BF0B78441CD09F984362B11608A729B6C68F59B4806600790E53047B1D0AE8D80E2C67EA20631DD1B68C05CB8C629FD3F1D828087932E2F2ABB9FB3DF50C20BA68AAECAF31A83E494EBD29DEFC79942007E861932F4E5398898A83F74A37B866A1D80207ACE5F9907ED7C721C12122E5DB02138F9D262F54D10EFD3CDDD5A04284391173DD5707E7CF400F8F8EF19DB226CF3A8E13E03B240A1D8502C36C35BD44B6C98F30BDA2082211BCB1EDED9320DE978622C18AAE1F3B3AD484FA627DBF5F7E7F45ABB3F1EE792A800CEE02A05E33A3451AFEB71B73EA0532DE96DABF48E26CDCF8D3D73013FEDD2C2DB9227DC770DF62CBA9CB1B6E3A170B00A3DA80B29FDD1645950587DC8CDE8DE84A0066289D3F2384807614997FF540120EE1B67376E85B37D6A33B52041462B0C4A81382E2DEE66303A67A93A7FD6A6E374293431EC52BA681D336D728E7F73DE91B7263071500B6FBD3426F6E3C61CA5930CEF0371ACE8AA870642857DC86DCA8980467492E29A6830EB45DDD3BE2D06B7A181B53F87F57518534182FE84E1BD6A8A1A5FF3CD7A8044376B3D14C3B92253B453B796A6396AC56B4FAF73CF44BE93E0F14E1030FAAEF1DED387513BFDE929DC2A35B57DB1389CBC2EE59A874F73BBDBE08687D8785B80DB830785CBA3DE98A2DE5839895CA954B5BF46C6838CDBF84ECEA0E458FC42E7938AD26510F75E76BA2CE2A9D67792015BC4B264FE67EF0A421F194DF7D87B09A46F6348A4B6B196C062024A894904243761872789D7D8EBFF7C0E38C0AC6B7AF22B9B6A32D15A8F338ABA067ECC251D63B556BFD423493EE4009E808A191F787D90182AFFAEEABA843CB7145849CDCF8C04861242D022BC8FB9E827A71C9480 -MD = 53A0113BD34EBF923930B38A550079664E4330E91A9F03A62E0D11F4 -Len = 28256 -Msg = 3581D4AEF0860C1729EB3E6B504F00919C656A1C56C10111D21A2F9A77EC0EF7118BFF2A881973CBA46686D4F104CC94C30B93F62769AA2C0F4C7F3FB931B696DDB632B0FE71D57CADFE27573913CEA488A68D0E45B90CCEDA68D966B725152CCF054757211D4E9EB42A97308C6AF1E0B7A0DF67C61F9357A1542CEABF000CFDAA1FBE71D305300D43A448A4845EC94DF696C7C0129B088AAAC29A43BCE19726F94DFBADE2D0F7CD7C4EF0FCE12681FBE496BEE9D7725F549281F4AE666110BF40F5235526606127EE041C09874C103CAEC8EE320D5E9F2D62BDBCE321FDF7681FC988F453EF999B9FFFD9DC285BEDD0EBD36FC22B613765A34BC097DCD1F19B14C60140C8E23D7894132343FFC2B8ED144D9055D2795CBB20B8FEE92363F6672BEA4D40F9ACD55A2BE27CF813B0599CAB2E08225C4F909E7B647A39F888B9370EC69B2A6E6591604A38A5BC2E0ABF8B722E9AA2F05AD9AEDEF55A37810F935A46EEE33389C375613941102D670CA6709506861BEDD3DCD0F1467F4A0AB681084BD482730F7C753FA3F5AB47B7845C5CB17D17392581219AF440CD67013986CAC4FFA4B6FA004E7B5EEE95742E7C40044B9C5A4691C2B584DDE6A8A45A36481E715D6D9FB2734E5339DD5A1856392E8FECC416778805117989E30D422AB8D358B690787E9FED3767A408DD99234463B25B91C30ABB93F3CEEC89823C37023E7393F29F5065ACD499D22E13B5909857180F7785749734027AEB843245F5569C715A881A1E7554179D5D993FADFF2AAE71CB0016E1459AE6C2EC7954C0B6CC8BB1116BBB8CBD81CB62DDE57442F602147CBC64C2A4C456C1523B8075D0DEFA053578C31492B3234CC7370AEA593AEC0359ABE3D1C7431CB62973E93B0CF3C37018B468267B664DB3F45FCEE737CFF976BCE35E061AEF48E8CB20F0461D729FD1691E0D2F8F2E0D44F77B640131B9E62B80C751D0186F183760B63296B6BDCE97A9C0AB4CC37A27A85E1897F6DE52DF9F0B08F37C850F2405831CBE9826F3584E99F7811F08FD05B335F6D07409A80229A567763AD8F20539E1641236E87A7CD3C847C9E8EC063A5A8D21F77F941CA7A56E23F90130B74798B71E7A9CF8416739A4C750C0D5752A781B11F994A0B0E1CB6D8377488EC2DE642903F9B44657E85D8A213F1FC80E674DFFB747C63AAC85E62E295428AA315F60585BB5D5203598DB4F6BA78FBF3F053D579534A0C270B542DA82848B8189DE8A77A339D0052B74B21D806217E902D9DEEE2FBE97DB9E414CA9439ECE353FE0EA8A72ED2116F002365C88AF05D0E803AB494C3D1720297ACE858CAD90D30E8185D02DE9BB4CC3409772C08734CDBCE22B498661D73A18FE2738297F25F5466BECF4DF3BE1F3D9160DEF5566318620A22C0BCC27E91CBB3F1C586FC8E09C60DCD424E8C68418ECCE193FE29E4529E1419B1B0EA3597A98F19E999C780E543068CAC84D7EA226FFD535F75DE15134556D8D637064CF85F62799CBC15FA46A62C03B0012AF4615F7CC4A6FD09396A1A6D13D55D27CC76E9DD09597D6BECC0467B098F5DEC034EBCAE7A660394521CFF7D82BD418FF8CEF7C1E5C0FBE1C1F262B4DFA186C785B00CE614C4558D93716E17766D4D5EAC4B0B81C0B866E41E68BA0BE222D32F8D83507925417BAFEC4B7EE39C374412F71767DF78376605A002990845B9E791011724151CD3EF26191E6C2DB99AE0ECA5579F3A24D021F15A09319235508135B396E97819DCFF83617E641D6778829D6E3A26F7186EFB14DDEAF2113B9EA538FFB2C2207B737F7B708EF54C16252F2A63297FE571034FB4BCAA1EA6C4B65017FB4EC7050BDFA24BACB1AFE2E2D526EE2784E1AC92512E4EFDDB72E4B12810997CDC39EA1A827FA08DD2D7D88E781862E7C5BD964A143F61223423689B81675231CF97C64A3A71618F7CF6A44CE458037730A2592711582EA9D9EFF63400FCA70B7B5251DA70DA3D339B768762111D27B1A2E9CA559F544ADF00F8C2372CFBF03C215B75CEFBDD6B3634A8FD1054A5C016FF1FEAF0526ED8B968CB44D279C04159E77A0289717D3E2515DB6A7B5B4860681CF8C7A1589A3D85C5724A28976193312ADA24C2397D2C10BAF2FA933D71F2BB2794190730242E117C90FAA6391FDAC1EC61CE780A7864F6F1D6D8CC19C024F4791B4928F1A2B5EC91CDCC1FBC1E89E7CF5FEB974A0231DD71D435741D8FDC3730012795FCDB4B15267CD200E576B7D1EB9C5210F24B916A01DDD1BFB1378AA865ED86D0056CA5C92E5F7BD57D447572560ED23107EE6C08F0510E2594F47E19AD6725BB303EED63BE2F94C0501C609C565E40AD74211FE97DE80CDC82B20977A1D24A7E35C3EDCAC3A590EBF65EE6F5D044F43EEFEE6CA71326AA713FDD878CCB6F53D09913420113220AF1E37CEC5FD5B1F1743EC129267A6D5503943BB5D4D21BDBE149E1FF74626B191BF75B19B5A2E4225FA8EC887914787A75EBD7C0CAFBFE0F5CAEE05F2CF468A1604BBB1C5FFC78944017A814077B07EDF48524EB9A9BADCED4E562674210A5EA26507DFE26211B57AD3F613CF951306AE51D4DA53A976E139B3EFF7830D661CEDB059C92F93BDE0209C184BED15E38373A58E8E107B1FB0DF85DFFFCAFE9B005C0EF9C8C7BD3166F777FA5D061EE827CD45BAE34BCF7EBCA1A47F76F459D6DC5F85EFB0D9B5FA5C4BF19494EF7BB5F76FCCEC4EDE71B4BB4A4B37113289873F3D57D06B3D42CE543C113C789CFB88DB8207D26007C809BE2098C20034ECA5539AC8122640A714B0EE35F6B466DD0D0A1D07D6547E6EF4B243CE9835B9BF6CE2D1711744BE3A405F6E46E1824A625BEBC42FF340220E68B785AF5CD5C05C215A6D3E31DF1CA97D054298C0399FFB08B4CE8B2D6D08A3CAFB33EE536BB01FEFA5FCC7AA905C83AF895047CC7BB6051482DCD5AADA28E906EAD9B90CEE2B32F9B917123651258D474CC699934FE732A9DB3D830CE1C33FF39E946F6BBE363AEB3A3F0895CA09F78ED37B66C919A15D85E9EA68F9AEF383A7AB61101BC6D4BEB7E36BB9BCC04421A0BF7A263651C30A40B652286A5678EA0DA516D4BAF89D747D0559B119199A7A615528CCDB2D5B10E99B2BEC59B742B40F8A3046481858F70D18B5441974D4A5F4A732041B999773A93C3FB4325B6E5F5EB7849923407E15A55BA46F3804DE3E8CA9561BF87622EC8E91698C0FD97B6413D3212F1410D9AD0754B457F041A6805FC30D7A7A98700C5D6ADCEF4A1F23E51950F2FA40F74FDD6AEED47CBAE6CBCCB93E8A06950D980CA261705A8EFB5B7BC866F5451F709E8F01791600AA7E93AD41088DAB6AC9EA25285214D4FA5A1C4C31ED4E0157A3A6BB94F8E0ACB66B0E5FB323284C54FA9E07542030679384AAEA817576329FAD20BF28D80CF824D751206BE17A0CE16A9C2EBD0D80C7E643867CC32FF9CA92E9ADAB3E1096CDDE69B6C2990466611489BEDAECCB9BC135EB2EF54502ACFAFE497ED668AF4C984959CFF284B2AE81638F2E11CDC463318845A363EB08385B4002E3638FFFA347039B40EF7315C88EFBF01F9EAB73A6F0596A1A16943B03139F4E1A3EA5182B401F8DBE08527D81ED45682D6459BCC9362DE5D351A5B8437D79D24899BF5316E81A182ACF4F740EAFFFEF365AE54832822AB4F58D89596014FEDD5B99CAABC0E877604BF4DA5A4A8F8A93DAC8B5FF7F68BF4167560579317A7799D9ED14B7C4719E34AA3312F2B9F07321BD38FE232B66FCEBCFA5A15EA6971C92C0EB377C44A8B2C92BE3634705F7FD01F8E2B10F61A7ADAAB93009B0B612CFCAC9315EBFAF321C27B9FB2DA0120A08F512A9A9149B4797E400DA17E749BFD1683DF628DE0D062A86B931DD19A639AA7EE332C53A8C771E787F7B7C6D817F53B6E57153C32B25F87A1DF9407D2390F02CF6DA3A508D1721F55E155E6E20BFEC0D2550598D815F71E065426E4AFD677A1FCF41A24CBD82DB6135F45D74D0E8AED94BDA26A0F42D19F52028122DF55106E45F8B364F65E314EF77EF0B7BCDD82425D8E3212E3C7DDB4EA1D378E2300F10AE707466752B15EB4489CEA807E9AA03B886F3D623514A7D16672B6DC025502BBB69A8AC5E374B94A0F153DD86B3B55308AC05AE5869C0AE5E18208BB0AECEC3D5E399936D58FF9FB933BA349AD567F9CCF743C264606B41D8AA1A4C164FFDFC9853FBE6ACF11F213490A471E80C15DEF7D985AA9C340C126473D1D14BCC826C12C200D72E1A00B392767BDE0884005D270A1C62413AEF754804A2F04BA3C9B4A4FC9076951860F9A0DEA80BD6CF5FD6E51983AF344B887AC3F907A40A694DED8840998C3A273FB1267C4C7CBC2FD0A51315F313E32818B45D6C7FBEDB5AA673E7A8069C931AB838DE2045E79852FD832C0546228AEE6BC77D72D8E984575E27EC610E411DE7E02725085AAB0BA967A9300583F27A1893C1432F3E651BE3E49D60690652D6177B39BCD6B8E0A6A6A812048FB2CCFC6CC636A0FEA989CEACA7BFDB5286E9F9B34EE5BBE0CE93D4A4614A354EA91DEA8BA0FE6AF3A4350288B0CAAB1FCC135275AE5A659E4C3A08C9E2481FEBD150596E684009137DE6A0F1752E25240283DFA58451C94F9AB96BC4F3DF5507230E152BB0C7F0F4C0F00D9480509595EB25BDD3F3B299CD0D165EA4C2F2BA5B022BF57A30E8E39CBBDDE047F1C91F87B658215076EF534FDEC75580E210A948BB1C3ED8BE98181DFB6E15FFDE2BB7F3EC5DA5907A71FAB770D29ADA2762D5887B306F7A8586223D8CB89A8E8421609CD80F2175F2DAA61AE3BD7BD135BE39EDDD2B2687381420E2C92A107E28E3E00B507E325F4ACE54137B37A0A750E3629D64596E1C1B5091F1761F3EB7C34AB6C54E108A89DD1EDB833D21EC688EF3C37AB1F762E5AAD7C6B3764B5EC04B3C3F319732C1A3D20582D9EF30C4B3536B7C47197C97C76792145CB847BD2FB84A7CB460842F0956020C320D48 -MD = 15E10508A97946CF7D0842C51E63D34BD993563D9B3C6B81B756F6CD -Len = 28319 -Msg = A6A93028EDEBD2C0F4D7F85B2D4E8A14CC5D8DA470A752B974B34D1EE3439AB0D0C7F1D460F816BBB4D0C77A15AD0E4249F88D1A53C0295ED40E12FF8E836E2A25FF5E86F77B7AFEEF7B0DD57BFA7DBA5E9D3FAD28AC4A453C9DE47A8FA6AD20C9012C8F87B620D182AE83721B9EFFA7877CDEA080DA7E0899E680B39399F6DC06736CDBE7D15B234431C5B94D5F769D2E6EC53FAC6691FF685D20560B54137DC6C2877115E2EB9619C089E7E79093141DFD6CAB09422FA683A2B253317F059FC63DC2427A2439C3A5225C346B638FF637A24EAA11276C16F74E0F67D8DC0AD32DD03B8E84BA8D3F05580A59C523F1B76EEBEF23C9C3FF8967CB124211D9952ED1776B9EB8A6C5534B445CCA9D4460FF24305A376AC1EB180E07BF17057AB8502FCE0A326EEFA8259048444885018DFCCB7494510A13841A4DFEFA1B67EE5F960B0AF86CC16A28F12EC22299807F22DB222D24FC06A0C58FCA3BD58D8795855982DC80A8A5DB808BCA6A8C12BFE33E7BAE5C493C1A8240E9F957A3600E3FA35E33DE11921A848AB52BA76F84B674EA74C71C629EA1CC3A1F2B64414BB96AB50176647A99C433D1BCCCA3F9C88AB2AA819256475A69808A52853DCD1B282D26249C52757C673234104A094C86B752AC23CAEDDBEEFFB155EF46D674637A244828F38480FB4A4374AA4F1B503918B8E00D0406848250A108341563DA9CFB35602511E315642C4F6C779C4F666005C2BB80F56FA0A281131D6A6B3B0356CEBE9D5A4DC4A0218B2F6CD5A083B5F6EEFAA59D65E17AA000256B4F739FFFD04D109579D225F6A2A5FB1567FEB6703B64AE0108A30BD1D0F48C49A8C1C7595B58614E49711B541B0A8FF172395A33B68E5CF4F68D92BF76A218B04287F2F3E0706DCCD99CE2E650D423C65438B05B9A3A0AD1226473BE295EE40452E3511789F79E5C75246B33301DC87A94EC59A21E6C59F585C9F2DEAB8A1B2A0D74770235B03318260B0884932A0D98DCD2440B1BD8A02AAABA1FB368B17397E5A487FEAAD428B48B87B39EB4CF6C9D0DD9F795448F6846D4D4DABB6FDD8D9F30D1259ED79BC551D3B75A883524B474EE3C5438E71A086B2BBCD4AB529774D01773A6D6BD6BE45F839002A8E7A0C2571CD0276695DB873194C817BC31FC9F1CF9EE2D068A86D035D7DDEA5066BB585FAC8D5F5432E4BE862231426E63F5C93CFEDD267366276568C01E21C606E47A8C5FE652203487C376CF4FED37727462D21F6593F7DF4DA0B73A0111211DFCB55611F112E403E4371706B689C8FD72B1E448BF315ABD4E3F1A46DC68C729FDEFFB9BFBF47EE5DC3558D0710D3E49BE4BFAB4A0F19413EA7224DD99C15EED1E829A45DB520AEBDA44DBBEDC808104E6D3FCF4A15F4DAFAB1AF5C5F31A9456F0086F5923D8A90F91F4007964DC3DCB75FD47A39048AB7AA28485CED7186E0F3B6C731A055740F754FF4D3AD4949E0C521C8D7D3B1F0FA2561CD01495CB62C02AF393D2CA6834361714EA119C05BF91171F74EB4CC883F3712AA98A2A5F07DE775778F728EE225143423AC0A29713D2274D6D88B8D71EAD209D14B798EC44365B959AA16163978AB8F948286371FC3C30F5D3C0B263B6CBE883DF1D1491C3E17F67A1B1FD42DABDCD660DA3DDD818F314A5014F3403F83CE0BFA2454E8663285757635D965754057946863E68FF5836E02412222F0AA525C25A1FF911D497FE3FED2AB51F66BAF18BB77F9EF64778A07FFEF22B25DA1274E5F84A81B9AC001A7F416D9853897D40256679D45D516C20BC5805EA98D5695B4073F628D59D2E75D8EB3D62B7A4720A07D563B3963DE71C383AFFB17A77D6E638E32D5D0A07DE4D6ACC9A18264B7B5A966BC28ABCC9712D2E9FBD6ED3B352E764D80E87C572EF2A4AC02B2677ABAE17888DBFD249D612FEA6504AB94F922E6680198EF71D651AABDDA3788FD6165D1AB74481F9B73392B9DA16B481D460A62E82413DE83FD9E9962025E5E3046B486D2F473ACAAA1876DDF4BDFA7D89F6911C4A20ED07B3D1874A0AAD01BFAC9D10CCC11E82CDB55B53A06636676CD576E190A11D442CBFA3BE1A3D520799919FE0F15102E87E46E82081FB8278A04BF2357D0D548FD83E05B27059DB93F266F52163F90A19FD8640DEFFF2FBF7B75FC11ACD0473314298D876CF4BC30494D8564280C2ABBFDB4C6EEF7958707C4BDB69E423881EFA44D6460972A7B33CCCCE0751A1C2284BA93AE50DBA513A1153AE37464A5A5A507C4C102CD8A97D175C510734712AF6B8F502C5FA0E25F9E2E2904A6404B680E4D6622C0F1FC4C787F8C08740A44571B572407DCEF7486ED139EE1B12C43B7B4DE605E5CE367F97F357DC8C983CFBBB2616289B92F5C0EE48D74F0C335638F507AD5914A6DC0B6FF868EE820B5A45F32E99E42CF7EA8F76C72EAF6FCBFBF5D119654AB66A1DE32DB1621B1747580BC544C0BDBCDC18DC268B9E45AC858E2B6D5CEAABAFB24E03316D48C98A000478E5E95B3895E305757983269502DD7A720E7F9DCADF24283529F11C586C1111594BCF1441C80A4CFC1921401C311AFAB07926FB0E79A3FF14E5A1F102C2517BBFF8F2966710937DF392D220217AB54BC57CC70BC9400AE69DE37A4A7E9C6503521ED1E0BD4C3DEECC612271EA43B213A13808B92E2494FBEE3EE6DD40E2F14CB426FEC1A8E1855373DDA843BA8694AEAA9A897BC2A3AC6B13C9F7E5179A3F6E37607FF0AC543E701E34E28112B36CE7421F58F92999A2861E129D7CDD57064D111C588896AB6A275825D0BEFD2A9BCF173ADC8047B6EFB504A1D3BA446CF80E6EB46184F11E421695B7FEFF0E04A3F1910289A63C044C8ED1D418BBD1AFB7BB6ED49C58D59D97B1AA83E14C7FD9CB7FABFEC888834361D20694197FB75103E0D12094B2C71567C0E2A7CFE71D5F8E84A1311BF0FC069B6C2063D391DB3A2E181A6C415ED369886D405C8681AA983D1BAEEF6755C6CC0971BE4234812E6860A38EB7C1544CC06163F3DFED2460D91741A6CB63C3DF53C03CB0E20A00A79E3757D81A8274C000DE89C4959F889C7C69FF197DC9FCFD23FA9B816CC962A77A5F786328C0F85BA7F4396498BC2706B5C6D66B0BAE264BE09FC6A6EA4A8271A13D6AD47C281AA21F1653C49F192E7F28F58760FDF205BE7C4F4F892D96223AE3D1F4E5039B91E2CCBC76FC9E436098DF11AF446D6A456BF59254042F6E65CF403320FF5AA5E9BB75FA5561A44BF7D5F0403AEFBC51C101E5A1D3FAA98FF4E2042FD82EAFD2481458E79952A10A612F524C7DC35E904F0CBFE908F77B12A62CE6D595440D717EB72F1CC536AA1BDAD0F486C4F86AD926C7739DF59E11733571512A54D986DBF34F6EDD89B9005E311988E097DE1611D8B7674CB1926FA890EF3F06840E94E65D2E2E6AE8F1511C2F3D043C4995AFE2D20DC4349A72DDFB02F4401A4221F0701268868932F85ED652C72BA7858E93B3ED2A96B46B09CE6B24060CEA0095AA0699E318E191F83DC5415D7488232B4C746024B1704F8AED72C321BA51CADA44ABA35EB8147C9BD34D8F69F91BB81EA8CEF2CF33D51457CEAF996157A1FBE5580C20B751413EA6E4471313D65C04905D4223A4B2CE63256EF1FEE42EE318B4F3DC9424B875A6E89C98F75E0098AF9B637D39CA0E8FD33BFF5EDE613143C3621EBBFA1A3F4C87614E7084AB03A6331539B60D7E2BCACF8933045997DDE59B46DD61A1ABA27A0EEE51125275BC0D6D0A6BB1711550B52CB42B63E514076D47FC578D8CA2BBCFC29117E0DB8DD466AD9B75EDAED6D575D0C281E8ADFFD931F2DE78BFFDB98EC6D7A7325BE5129C21E95C5A92687442AD21C9220BE44C1F6C6FB29D468BBF1A7E46F670F3C42A2947381E31A0A018700A326A3F5BD19791743F1FF40CEDA24F596E7E17F4145FF15AB3C9E7DC22DA76FE59D5926CDEEA26AC26DE82CD398969680AD8946E91ED8B3703891DDFE5B21918458D3E09B0BBE011E2659A26D5EFF80AF41012B6D82C1417CB7788B50D1433FAA38FD07E08B2DEBCCF60686E83D8ABD1F231869F512D5AC8183B89DDCA10D4022BAA6B4849651C9DE787AF376FDBC455FFA53938E50E2E3A2AF36F5F3C99FE0B0AF92B1C249A28A284217B9ED0488D4DCE10548B554841C235F88AE5970DFECFD996C24BD1ABA7A17B7ACFEFC61142F92314E003E587C0C1E41BDB965D228C641F457C8CF425F37D3BEB59C39495BDB0B6220E6B1121C5CB4A88D02F7AC46EE69B5F7DAEF7F0BEF9A8DFF598AFB7C396DE7A69E34449A543DFF973EB146FA687207D7C366725C4C6FD87EC9C246004B20BB19301BA0DA565637DFBD41D5EF8583962820D9D1CA41980E9138F590FE45AAF0058BA4CA9A14A1C7B6BB632CB3DA5EC445B4EC9A800F466F62B9742012364C5839BC81B58F16314D15D3A4B2ACE70C2FAF69EBEA522084C39F9F00AA562E8B489A85DD168C4CB9F7E89F37FA06067A7115A21B4F4F377B56719705A7E1F1F7ACE6068A96D182EBA74FCDB1455B3E9E4996AB1F891BD715080DF4B88FAA25C867F7349921DCAB89ECDC1E7C3ECEF425F8C0B386DDE1013E8497000BEBDBA11532986786A960F52E6CEBC13236953280B866AA37837DBD34B031E09B1448F27B4D2A583FE9991C122B613D0BA70ABD123075C7FF5B131770165AA299061CDB972F8E752A4DBEF8A2DB49A81C0D6506207B0D0283B8FFAE9D6DA1FAF6E6C348FC375D9854E41966035964A129964F7C8E2D86867EF146D29401F82EB7B5C3AA1723DD80ACEB19FBCAA8F91EDB4EC80D94D1049EC656E1418E2E45C235B033B83FB28E639A0EC067EC278FE183C8E82B6C90D3265B7A4592143DC41CD8C999EC5C0C17B6945844218A0A40A519101BBADE9336EA22665C149BEF7BE07A8FE37D2C40DD6ED1F6D4D547142B75C2A1395A769CC983C3FAAF153B77AB22CA03B07D6410D652C2DF71EDA14D1C387983F960273F53F13AEE112DCED5CA0DC37BDDBFC1A -MD = 71966AAEC1CA4BBF99FAF3458CC5729979A6C0D22E7C3318402A0ADD -Len = 28382 -Msg = 0531F235974BCAC5846617EB119D7EEAE918222452D18337D52F1A53319F16CBAAF64A4D5AA5F2029A421A61AF340E58388DA5812C8320D615A5D6F049B172B5A7587F9FFD1832FC0692180CFCB2E9404FD82B3FF66EC999BBBBF4E8F034BFB05D0739515A9D1AB3F6D4FD251A7A2C0597FDE5030614A7E00E5D80C7546F2507DB5AAF1C0A59371B9124AADB4ED801EE87BD3BDC0B5E22191FE7F6094B5C27B3D5A75DA049CEBF46CCDF283A293F0263517529696A16E71F8905DE77007FECC70F5B6F21E7A777A7DE7A2E5EC61939B6ED2CE70C90303BD2B99F78EE70B2E87F0B52B090F8120DBEBB8EE9A9A5449F22003B6704494A895DD74B05719F8E96BF90F42227E3F5EAD1AEDFB98FA6DDD6EC3C11DB2AEF7FBFF7FABFE0044FB4DF511BE52C626A28C380BCC15505C83C94996BDFEFB11149B550B0626E7CB14428C2337D93FF7A0DE4313968E2544E0646BAD44A2E2F66D902EAFF0A41B39DE32B8FAB082ACFD3F412825AE1193C8CA9582CD16D62C6DE735D29D05426B9281363BB08BFAC4C3FF8ED55FAA76C9A0CCB9EBED47048F447C70D7C6A61437272245C01C4A9F83F520E8B572F6071E9DCC567A094E5347B1578F5C35CB8E32E10AFEEF160FF94E820511D514EF2AF99D72465FBAD7D9956F5AF6E3393B553335CD702A14D06F80F27535821C02DAE1B4C0015E464F6B81BD40D70921A4E75680EF611B3B39671E75C5DEFE40627FE802C740984F4F564B886D5838285838FC3AB47ACF1CAB08F09DAFC7CC53F6121224D76A3DD372F2087EF9D5D50CF39BC640AD2FA18EEE67FD3F4863547AD1D03A2D775386EB484F6DDFAFFD6FC5B01BDF0D4AFE9E1AE99CA609216CBAE3DB40E7CDE3C44666080E2856760BB6B369787E789768698F27DD0030D4186ED6A66807C006399979625E33910FC27A14055A7C71F574C358E9735B524921B9D9AE320193A9F0AFBC33C3A34E9574F82913DD7916ADE44B4E6DA1C04480D604A3BFA6763A00FEA0A2906332BC8DD1F8F1D704327073CF4AEC4450ABEF143FDEABDE67CFF52266CD7098B48618A71631335B6E54C38B28C7E7704FAFCBEA21ED2276176A7E691FB2E1BC78CFE4BDE7EA291D91C2A542329ADFF3AD24A46167778491C914A00FC0441FD65D286D2E1B95FF9FFA661115516C12441116326701E225BE196A5E1497CBC26349726515B1306BE1056452EAF812634DC4975B34C7280F9B37FD1D17068B3E7CEA4764E87278AFBEA408084854A53CDB549836E2879A69AE0984188A3FAFB2234E271389258905629AF3B1DD271C89A581041EF87E7562200C2B76B2CD8EF49BE83FBC85E61C5BDBEB119E1B19BE32FE9F598538106E3024F74D4016DC70D8B94574E67283B653CD60F1C2454D08CD7313C6BF6061506C0E013E39BD8C7AF4044506BB1B39044920E3A0896F5A5DB873E32F5EA5F932DF7D1AE060F22F03ED9C59BF99371F0B01ED0BFEB2D64B8C613428BFE26A2877504ABA13A9BC1493FFAD2502FF917977BB29AD9D917AD5C26A8B1DD9135BDA67B70673D0B0B501F8CA8336ECD5550A0F295291158C470AD0AAA070F56025A80616C2A1981C4BCF505B9EFD853BB1ED9A873DCEBF91B2A818FFC15EC77F3B74AA4C36BDDE5252C84FDF015F9039008AD4622541312A2BD2260E95038A91301453BB030D3BEABBAE03ACB20E630254CBEB17C716FE83EF2B6924C6DC57812DF9566FB85F13A5CEF17920E10EFE5BDFFAEE868DF59D7320FFE8FE26A63EB3B70F7229E904000C855A5CC513293F0CEAEA1CCE86F3DED311D88BC812BFD59AAE8CDA3F20AEC6CC0314F6B36297F6B14427AD8E64AE731E1CA5653A52CDC41ED2895C3C58E5B07CDDCA91C085F60A54643F74642D42D67E5BDB9C84816DA2FF4490218B630B2482058BD9CF31138EE6F78B223F39909C5A6079245F703C307DD0474F295D15A91EC1DE82C03716E4A24C657F3D8467D266352ED83B106FF06B3D1B0279BF5EE3170FAB45E0EE24944AD2F0F3A72EDBCE98DFAA259F889422F91B4A42C91936E35C55BE6813F310FA6132A79A54E4EBFFF2813AE5027C32B91364BFD5EA6B1A74962A6160DD7570C85DAFCAA80802CE5C370B4BA32898BBF471809F8439F125A1D6AC6484405377096373FBAEAF033EDFD05733CD9A7D1795F90C8A1E53D322DCD218074E129EC27824EE67564FC65C8AD58B8188E4254FAEDF1E6F1D0A7FC10BAC7D2CEBE1091C753381ED68C0B29F23161DB3969E7D459C87F47DAA8723648328CB9A714EF48B21398E98F3053FEB060C4BFFF9C446252720EA876028043BD5FE7EA4BA005D68D5B74DCEE4D1C62A9820C38CE2A55B2284A6C6AE7DD04A59348FEC8DE0F794E012C87972EA6BA7AFEC009BBD8EC24E836067E9A20AEECBE056CEE31D1AC232C55BCAA1388AFC89D4D2689E63A1722464C6B62E1537A2D8A034F8C037DB5153FDC7734B5723954CFD1A68401BF4F678A7F5A497A1D6D16615772A52142951A8EFDFA9C009511F84787F73FFEBC11FB7CF3EA0EDB98EA94EA785DEC3A9049362E7C89C5CC86F685AAA075473982C4B08C4D1FC8706C3B0ACCC4042A7DC044BB8A2FDF4534B05040FF85367C0E5F0F101BD80D99728720F7DE44D81C11950C6352A25F90C07DDD025D590F8151F6B97C571307068B776FD8569247DA62E85A0C27D38820C479A31CEBFEEF9B30B000676E7ABCD200F3F22254BE0BACEC6124A3669510710C6373226639DF15EBD046349D93E08B413CB2B9B5B5FAE67E2D94CDC9EE7FB9129FF7610D65947149A5995488D39ABB9BCD12D07F85B1EC6ADF70C8991E012A2C0CE62D55EB990E2A1FBDE800F8F7C24B68015B170772E6AB6F34228F344F9E87CFDB2F494FB6B2FFC8DA7F42E6708700BF228E901D77A8D5889E91F8A375A7C94DB15F3A6455226FC2B2F1458EBF7A37BD16E62A09C142D3CD99817292B85C8984F3A31EC6B5B5586C1F588D423EE9BB72CD15295DE0A9ED3457F8AEE28CD30AE0154CC2BC0473FE545D5908F55E20193A6AB0E118AF99826C6B6B5F95FB8A5BDAB197DF8BF0A866696E4ED0A4D62F1DF82B9A653246316DD00D765A2F3EA2E272E69BCDA029A074261AAAE17ED675D458CB5ADC271B0A91E753063FA44E78DE71E4119C14778B65170FBD7649A4C62FCB74E9F20712BEE271E6896AED5C01B2923B919E859B7E92D29519DCB21E6E4620EADB43AD557380C5BBDE38552EC80D0682FA1CE28590BA388E7CCD20252662FAEB652EF58B0E76B39D006C50769A4C28AF86B5F796D0FA537DDF07FBDFC64144D8DFF006DE7CEBA04193B71307610E2A1272671A296A843B4FBBFE798C4885D91383DA98BA18C23F5EA09957F2232B2C2713513F2C6931BDB0BEC4DDDB2D79EB23292FA1F3A5DE2EA9920F054CAF3F2C2026010808F1415BD9911DDACDCEC7ACFBA98B4BF4A8BA6D0D90D51C070F949DAD41541CACDD69DA9B78AAB5A4F4327962527EE2FE05D00AD166F47393065D3E8DB8426E6119495F69907743F0778810110B59BC538532B2E6328D19DA29CC8AA15978768915589F3E3DAC59A6902AAA08A65991474B8B858BAB940D173215A59EAA6E6D1B33C4068FC0FE13DB04CF3050918CECF71F284E082F453D851EF1409241289A8C8B1B821924F3549383CE014B2EB1ECFA6624456D271367E6E599B5B51E0AA8F661EBFE299C3D657CA66E519D456A67C641102B4AB725CD1A87B60508C08CEC225B014B0CAE089315A4F8E0322AEB4F62132F1E75EC35CF702C31CDCC4899BB5C6D83AAFD7F44C88E0C17546E0AE504CC7EDBE38559BB5B7F426ECFFF4102B8B6B945A1ACFB66F779DA0FE46FD403711E9C47586C58921C5BB32FB3373AC129D759969E6D9CF94F335A8F9D013AF9E26967B74D127EFFC628B221358E716A2379F7C1974A7D5C0B68981B00696C17AC5F6EE1147E673B9DD583849EB8D00D9E193D57E5AAA04A83C6C3826982C5D7899E1F5BFFB608F39DF00E85A2D6DB702196766A84E63D0D8E6627BA13223767F4DECEFECB2108FFD53F75E395772F1754DE520A6E09875368B0C4AB651094BD70A7A699B298D8AC249429D65FE524075F0385C83F12B78940458E00741D7F4521861C27AE69194157C20204DDF3DF013EED710DE3BE92C1383ED233A8C47913D0E6DCDB4697D8D8763E08E8CE0A37FCB82A39619A432DDF24C5932E9705354C0BC85842DABFA029CD982123B98D8C75E5830B10F6867051F9D3E51115C2B283BCF36E30C9FCB458B78A5232A2F9AEFE5CC4C77B4D78E73B6A6DEE1AA17B5830F45850F6F347514C0814C93AECD0322668DE3C4BEA3A2C5C2A95AAC0589A9E840FFBE5F039FA4B10800FD8292A9D8B64A42B98CFF3D8BC8EE24781C88CC6935C81DF96637866CD637D8272D7868CB57EF5AB0FAAF41488E0A555D8E72C3487F527C4389018167455F2482B22739A09AB327358DCCB6A72DAA8A5169E4A0D10DAECF01E5F62D68A40A1B2D61FD1EB975319581122075E3BF7C5D5D1DB88FDA7A887F171A7EE25EB292C751BF31D1244D58F72311E8F451C5BCFBFFEAE472FC9BDD6DDB5AE88F09D23827D5AED793271D2BD0E275CD42478F85AA830650CC09DD8B6B9B471A70DA2FD42F8B694ABFCD5D2C4957A073F86F547EDD39ADDC7592D9CA7E499D7ED058812609E9E8AB72A3675A243EDA80792949CCD0FC0CC3483508827C55D561A6B0900054C8CEFBA5EE00248361951020ED1AC3BB9D7516B5AA8A6E27E7A5E07EA4402C21DE9F28CEC8A7A427D4BE8489195A70A49B143E8868C8733E1FBC9895A18C99138A8D7CCB516FCF296D00BC5D9FDA4B714D7511069556A66106443322FF7567623063E1F4AD96CC886B393B28339F521758EB3A20AD2059A95DAFE5663AC37016065E0CA55EC903C845F23005DBE57B7ADA6944618D1270AAE6C9A0D8010ABA06D41FEC3BD053EFB3E446F18CFC77B06D7DE11CB30014DA86928235E422A945C71408C6FD8E781DFE8 -MD = 27C3FEDDB241603957A2255C5E55960A4267DDC38B3D3C3338D28171 -Len = 28445 -Msg = 040433B48A27EA0CAE6333552FAAC0253B8CEEB5442198DCE0C97AF1A44A17BF203E50BAFB8E5963846CEDEA167970B24AD2830940597C0CC99DBB21469A93DF95B2DD00F22EBC154CE80847E402E81EF175176B652CB8DBD02ED260F0476F3EC707890EFCF372A17F614B58D981C957550252C6D14FBDD6EBEF96557D36B39EBCF01B3113CF1C97C7AB8BC766ED60581C1B826042E85A8B8391B03D9A08883CB6765C499A4620C0AB94E49C25680B5DBDEEFA978CC9BCE11C28D9DE88860370AA3E8F7C8BA64D37248EA52512B060994F768102B33DDD1AEEBB80747675259F52B75B388164F8A9E967F7DE0CC0DB639056FD38BACF013035DD952350DD5F359CEE865773790F72D8642CC4900FD138D936C0A9D41911A53AAC6E06F99FCB1BEEF44C8FD63B912F38B590FE09F7193CA8BBB7C785182DCA62604DDC101148F50A65FEAF0770223FBD2E8DF35E40DD1DD966C2FA37AEA2F86464212F69E2D61F1DCAE053511A0BE5FA26EB37F439E1AE10D7C3CE77C71EB59509F1DFFEFCC081AA97D116DCBF6223C0824F3EF14C1B7677CE391FB9C4C102859092BBBDE42368533FE2716C8584F19D2805BB1CE2A5644379F57634D36ADAF3ABC42E453615C389FAF185F9AC90DBA081CEAFFAF084BC4054FE67CA006E8D2E2DD51F146E8DEBCB4232830B9872C77E6F9570A50D494686A7A4A0925965A8E5DE8D5B852F29F8113BD05E9C99DBC886869E45580FF1B9D5D16C8A6AFF19B4AC1CF7F1784D48D105F90025F16DDB0EB08730E3FBE54AEDD08A4C9EF0F00B13B96A7FDDE2839EB5C98F0877A5E3CE560FF1EAE1CC8A0C361811B4B83998B58416428B3133FE798CC2A679A661B3C8E9EEA14FD756DB23D7CD3A22BF46D5F1FE20B1D743D13FF161661EA171F6E7B9177B904B69FB58DC60FF64B939832DBC2C13659EED2B24DF3FAD144AC426A30B67C21C16CC00EC5A15F223950F8D3CC894DBDB7A2526F79C2DEEEDEFA9BFA3E185D4EDAE322090D1B394DE648867ECE9FBC8551D34018AC4B0FD0A06217D844A231D2134757F67591F358BAF98F4ED43DED7851AAD0F915FE63CE29CA341BFE9755A2363CB6489041D4A52EF3FABBF59567673543536E17A53513BEB7BF507DAF3D7A8AFB8BD285C1210346DA98986BF1039479525D71D9A40A4E9DF91B5F07582108DEB2B4A7F3EE3E4F252588E91CC0D4A7CEA6CAC6926F13EBE9AA088CD6E348BCB8A3D9D8F78595944A4A892FE95586E2C5377F2BA77E4FCB249330DE86D3F32EFBEF1870D39CC5A419D93866CF4DF0F0BACD10F1FC22421BA2E8657A0C14C2FE97BF5D631F622946192E6046F1DD9C1D65FC7AC178691CCFCC6E3BF1490E1AC4B8A69A20065423A50A36C2F390E39D971696AB78709527A69842850F7325EF0A4554FA7A4096CDECA6EF2BB457F831A763FF1A94BC2A2F054F7DD1BC4A42B61EB053C6E7373E2B9A248B64238DB7DEA6B2DE50F8D341A7A3FDCE6154295C35D9DE4CA63D329B72EC012FC3091144C10A0BBA27567F8448078EC7B0619A7BFB20D36B4470272EDC790E5B8CE6E672FCA4C90E3FA78B08E409EC9A56A76C152690736DBE5CF1995C9FA0455406D3FC298E57FDEE54ADEE267417C2DC191B2C106E89A4326B4B689461D817E406BD4B2E89F42963B81F6A94A8E1387462ED49ECC8F40309E0CE852884515ED48EA19826B0719BE89DF4E3D7CB42325533DAEAF1774BB83C48AC70FB5433D3F9DB7045625B37CF5923210FF0F816F6A0F78844B1B2F8E01EF52E25E62F0F0CACF1B41902DE41674AA735F9C768DBA237DA1F55D37483A08593149DB46702745FFF20A43747414597FC9AF01F69C23544DE964FCD8DE428997BBE50466DEE2E2E8F416189B5FC4506F31095DDBB944D68D94E61DC83CCC94BF19082295A27FA641CD5BB77102CBDCE2F684424D6EB70D2396372CBB578398B59D3788E74C20FF0C6051B4F6CE78DD8782B2A272D23A98DB27CB5CDE9EC68A83AC3E2BBCCCE515C450DD1F81F0463775B2F97811815831EB28738B65E59A9C8E79B609BEB26EC1B91AF9673DE62CE22338B661790CD623DE7AC174956D3AFFD6B97524FC826236A47CAF3A88433CEF155A0297B92A71BB6CF60F677BE20183064B69E13049CDC34389F1F923A75E60C7CBE47FAB5C9A4B7D2D40012FF2396EB195C85EB14A714E3049D9C2CE4FD54DBDB2FBF207FF687ACF2904C19AC7F0B8E4215CA078DDF8EC4B1D32AAB1F2D5DFABC6B511416311CAE2D8AA4EF985E2CCCF8C8D9CF1B97191088B09244FBF468F033AEB17EACB97BD253B0A3107C57F26ACD5899382135604B6856D779AF2661B879E94691676171F20DF2EAF743DD604F9A5D5887D8A43F76950D7109570DDAB9AB179E375EDE92A68700E9707DDE1AF80725205A42AC6EC0C66DB6E897B2B0B8A166E5E414A67F06915ABACC2801B446D2C72712B945E1E52B1E5DC42D5226D38174B8098B49DEB0B957B33774B8FAD1A2EA9F6CCBEEC5E96FCB81E956283E4F50A1CE9D93493B1E524BAA4AE3DF437CBD93DE8FA48518638E0BC1B36BA6B5A5A389D4435A9FB0468AB3EE6022B64B10E8DF6200AC220E6487F45DB45D2AD52E61DE982B9A0DB6550C38CF2B7EAE6D713336B956E8834E5DCE64FECCE44B78F9C1C9B8B2605BB16CF9BC6C0BEF5E34323811F1F204660D6AFA4CDE6D3D5788DA8BF7D169D25C0B27B4443C6D40167D355BF3AE4A06A540D53A3A57EA957892E42BDDA7EF5C9BB4BEBC471FE5CE80411BE044D2F96EB24547DCBE314E5335E4E47E06F3F7E43216FC89208A5EFD065F5FA155944CC58FFCFCE17A55BA169167BC33A741C46530940B1FE53E033B5F01169168ADA35913916D93F355960B445815AF4000E4EF2A51C2111BE9CA734AA51075CD9C3E76004422F7C16458FD92FEDE7B0BD6F511E0E64124BEF2AC30ED093EAEBA646C95C137A6B6DFC7199E2966CB7592C040817FF8AB8C5AE68725792FE7307D0BB06471BC1F9418BCC6E29003B99EA8D9568A646C52298D7A5DC42320B2EC3144A29A51D431334EC4D8CB1D1A719A68ADC75C67A0BC0205DB6F52958B8D081895CBE4D829F954C15E2F42ECE067FA24ECF52B976E9A781504CA7B1ADB0ABED2A027D6A3801AC42C1EC03CBFE21AEEC66BFA3D4DC26135B51A54232C195A36E90A9C6B86DEE53777F859C9A63EC7612326775FED12CD459D3E7BE3D5836FF16C68EAD0CF043DC5F09557963D107C49DD65A27E3DC5F130330E95515D0FA97E9F22D6A1516E4614830E219219723F0B474E9E3E4D17ED6571EC44F9595B7759F95C3605B69D9617C38DD6E36E9F3AC4C09A301FCAF72B9558AB5C74740153F58C3D7C76BBBD03BAC587A351B55AC1B9911A08EF10BD8A41A6AEFD4191281F0F078AA952F3D63B7395B7773B9B179991D45D9F78107C01C4FC801A12CC3E1F74112E16AE84593281FB4AD2B5962DE471336FF63CA8777F1453E1FD83451A10C58B81B9E4BAABB2B852A8383BBC0167E2B27494249951924D33F6B06CD2F013BC99A21AA769507E5A9FE2D8E86D7E7C24B0EC312ECCE1E3CBD4D335F258EE42F6DE6BF8AEB5178EDF9F80B886CEAC6376A54D58B84DFFF8607B798A7921A78C76FFA8F14334FCF9378736B53D22994B8A83E77C4A6FA43A2D0DBAE1C8F3A637BB8B30A10E37F63FD37363E66CD3F08904464580FC5BDB759A5CBCE2405A88A241E0EA50F2D4BA147A9F760F01BBA7B91E5815FD62FADA8BCA88227CB31834E524A7E2927348370ADBCAD9AECFC2A254FF7D4BAD1C8000FB9B7D9108D6CE1A4BECA2E3B4B7F435D2F2F32246F749B75B82986F2D26504A1F3C2456428E23B450FD54AC528EE5C0A8DD887652BDDDCC2FC0C384046B170529F91A5CAE106E688FA4DA58137B63C1E19DCFF0C5FC783F8866AC61663A715FB4D5B6A5B92A93FAAF7CEA4AA0C642694927645568CA99545E6B422C89AB4FE041CC022E6402E8312FF160207DF117994E3A01202FE165FB0A35256284EE1934271CF6D91F0DFE6B66C4E5A8375793D039D5AAA3FC74DC8163FD7508024B64ACBF82352CFA0D54D7DAE2D63338B91B1E7D249E65D1B76A452F3D80A2AC0171A4914E37801768C8C236AC9099917894B53DEC1852972311F8A4D318EB9AD243E11D03070B9853371B879E225C611C3FC375D68FEC64C7766A8079640BD2A40C919C6E3AE1B2505210AEC2624F36093DE37643B855AEB76540E6EFAFCCC9764BFDEE73B71BC6EAC7094E5C87B59D0DAF32D7685E1872632D162C11F2C7C5DF6373E204BB80D9BB20C83D24BB715C2F900826A0B02FC567D334A80FB95EB379713A326D287E4BF1A4FC6C00D776BDBDA0494BA4E0318298F5CED450410420D5D5A27ACB07DFA0617BFFC9711CD8733F90A5F42C19C14A6582FDE7587E0DA27F20B8654C27FC3424FA960FD3357400C2B824165AAB1506960BE5FCD2401C25AB12B895754FFD8E4A12626921818D8FCFD2238B7C2AB5111E53105039EA5A487FBD3E571F79ABA9CFE8C127681D444E77AD261661183F06B61B285641900BC09A6EFEFDD6D359B1905330C546887459897EE38CCD7A7132AC819BA1914AAF684F7F033D388AC1E96E317E610B7B2D951877D39C710B7D4C7FC47CB108120AF3CE349179C05CFA48DE7BDAD22382684B645F1436A206BE44CA3F159AF623701467FB05DC31A299CAAF83022DF5D1DBF19DCBE8910A0985A2787460755F78971FAF81CCDF48C4EF019C7187D246F68016A26DFAD6EB8601AA2504A06CD56944B103B74B8D770925D77604C9414A114E2F020583D4E775C8F2FF5E8C1A6A5E6F42B30372D75F67A3684ACA38D9E9537E4635266DE3AD95FC966CCDB7CAFF43390BD0F8587CB271A16B435A4FA3DBE0E4E396C75595CC6023178F3276AB535EBA4FF87FFB46FC182AF06C5706B2A8242B7D3EA8C6A8B536E42F66AD759637BFEA9F226122F6F872EE8B16CF058939B1423AD6868FCD353AB96AA90B617CF97261CEB287920 -MD = E9F4A2BB609468085FA0039DA998E725576979B36F17759E6BD53453 -Len = 28508 -Msg = B21D5C612FD3372664264371E115DBE5E5953F677A71255593832F55B82ED290A8298B3F98E72B1D6DA6FF38DE0DAE11187C043BFA6AAF32195ABCC9840E96E1409D4F1568EC98B5512DA2EA09DAC827CCD42D081D0E3A8AD37990F97296B184614B0E42CE3948FD69F946D91D1796549EBEDE2B704BBF507290F7538CBFF31ACF45226D31FF570A31C7DD7965B26626606EC51BD6BF6AB8A5C5F1C6AA0998C6682FF17E67DD6D16C3687B7E989879344455036CE30E00A7965B734848BDA543F6A1F5B42312287309FF16078B8F6866C77786D65BA97707CF4D0BBAC5E8951282D9EFEBFC2D6C1A43CA68929CD9EA1E1FC663CB5B0E7B026CA06D6DC16A5914C96430F2B8D1E9A40D9A870CED47C6212C4E7C501E1EBD148230B5B862321303D9CAC948C404F8A9AF4E287D3E966A0F67E9DB05D5906EBBEADA4FB252F34B7C8307F02E5237B1CB2A841F103ACB1B0FD5E28BB72B4D11A88299AB5B905CD5150BACBB02E55E06AE35F20996DA73BD34E36CA37596675EFEFE42C71046A04907F7170438E8F485FC2B2489932556F157E18E3EF6828454E20CC4910BBBC4D38211916ECA9848DE8B47A547BE832083B0502A83435DF25BBFBC8485AA878006B7FD3E77F9E380FE22AF78FF9A74C47E74FBA24B9EB1607B795AB40BA53326664BA53495C663E8159AE194C921EC48F3EDE50CBE879E2C2FDC1A7E7C28E83B8C90DEB6EBE717B6EE524D6DD1A177B974C7EC4C237B9AEDBC3E7AF748BFCA1633600A84A26E590CE0D97FC93B41E953438164566A7054255DE77FA49CBBCE1B39DF639EB6604F646A19D0513E6008BCEA910EFD4C93B3C6157148237995EC43D5BBAB49AFD02D14521A34C0EC2AD971405AC16C032D3F230EC44B3E296A44C07A7B3A40734261F7233DF3307E966444A5BD64B64DBB5E4E530A7D15CA0260AA138C76E324D99A8E700D94883A2D2E2A0904B9485E9AEB48FCD259DBFCD1AADD3F30FC3CB19AE43A1429E4842BA214660BB8DDAEEC324334B4EA032735812414A949F5A380F23A9CF05195527123AA3668E327A0A3D8EFC539BFA414AD5968A1BE18C24DAFAB9C09EA9A57BF74F7AF48CA779E7D594C58DE81235324559CDC0EF79FBB692EC799AE349E014EB499116AA6DA263D1055C91A62231F8840A38087D529AD27F421DF301D8061BC7741F6DCC120F10C3D14E0992E2672E0F53469B8E5F082F823514A60B9DE94009857DDC40F75BF77EC5A18A2C33E20B39023E9CDF21A7D1989513FB36F2D85A22DE9BFE1E70BB55B94368AA518B158015ED835193B3647CAF41CF081A2251E9F3378A63698B95B0062E929607AD050063AE3A8F858ED18797D65E0A9A9784892CC589413E4ACE00281DBBEFD0A707AABA586790D250151CF85A729946D5C409FFA90D60AEE132EBD614FD0C807A512A786B92DD3FC83D65C2641BB63B18E793D05D1ADBBF662457D36AA22CF77007D212732FBED6B9682E525A47BD6315ADD5B37FD43C647334784A73BCEF11352B28626735618C594AC671C3F82BA51C290EC6222BF80B702E6054C37107B78557407E58A2A73EF9E783CAE6844E018B896B8E6FBA0DCC452D7F557F729B2928339793DB60E909E142DC3D8B935F443079B759CA6503F32DE62E8FE1741C3BA229E0AFF7543C0CFF23886A0BFC2F8D4ABFD5DE9CFBB22A5A1AAEB362C05DE71B9F68E87884CFF69195C22C2DDC6F0B5276DEE216C8B6F0FBFF3F2D488AE69B6588E914E216E232797CA70CCCAAF136173D388D2119389012427B65720AE5318674524A980D4F33C5797181DDB8887183026E9370C593D49DBBA5F9DC6B22E2BABD937B63F19F5422BC636C56D0F0FB75E5E9D8DFB4C72E8163A4E40658F044C5B354F3D8FEF8B94C067F60CDDE34997385A2B6649AFE7130960FB01A2A4B249670B6BB0D7910602C7AE143499C114D6EB5A74C4BAE0F33C54C94D49B35A4E5106E479EC26A088CCCEFA440137D7101102C0E1677E38DE7D2AB64276D9C25B5C3783BDFC844E95EF13B28E71CA0155659390A40D3A29A5601DD1797EB231925A269076E4C084EB27AA72B8E024B96CB47E76DDC0081BBC01E42D3CA1CD98EEE10380CA2A49FA225C21E5CA1BDC9EAD86A561FC7DA80CAA628FED45BC7E4AF8B1D00AD147A2A16ABF0BA76F366B4CBD1E3F5EC5AB4F66A40EE330F0D2A25938B60F7772733FDD57CBA45039EA90E96AAE1137CE7857BA28EBC6576874090A10D9D70FEE8454FDFA3D86448F2EEE1A904E6D94AC4AA2D7AD1DEA039B85559A08D8D40FF020BC719EB24F83FBBDC6B388BCF6F3D8808DDB9AF97A34EC0F6AB00EC7AA4258C14C19513AE8FD22F5D9382AF8C6469EB300DF56171F03C6D8E032008DD7A585B04622E7AFC1562B8D6F46AF793655AFF4E3C18175C745761DC021A03772241DA8E6D012F41927064AE0434CCCACF4639288625C2999E79F5A9D32AE2489E19C8EAFB1F5EC13AAA902ECA5E37C4B5D63DF41E97B1CF16CEA55877219241B04C8ED926B95FF0446323B0FC5101EA49ACAAFA14EAE8DEB47E3BD3904B1E327ADA5A26FD4515B5A6954F52357BCB1DC4B08EEF20512C0FA84FF0EFE6DCBE690A259602B9786762A0F48183C590F983BB603240AF071587EB4B91CCAE6BF1216A0FD0667C2E4D0C05E1474EF3E95A0BD3E8A610D65DA08710C8749A4E66E643FEF177701A2350A369E867630B59CDF2DBFE5B56C72F02F529F955E0102A5D6D3BA359D28D5753784A1AEA8B5A1F513AC17B2A982E3E7448B24DBE0FAA74E6DEB6B04FF3ED24C7F710B8C940941D7E6C9464B2E02EA982FC0FE52097B127F6D7AB0CBE8858352F4A25F86204DB0E53DACF3667E80629C60B51A9EEC672723A46026A34862AB38BFC5D7C1259FE5E40276838FEDF039D31CE731FDB9617BF4556C9D8E7879E9CEF8B3E6406BF0A1D42A747207B0AC494AE00D233C30D13758D0327E68112F3AA7DED92406667EEF46FF77752E3DEAA96E115E41AC2AA0F492188E34E9E5FE816D4378F029EBF0D294BEC097C18736437953AE7801EE3438C4BCF575C1644493D635E87DDA14746AE43EE894AC7BC5F503C41603A1D9186D4FC5209B7EE00E093DC51B66A1ED03E2648B9C7538533C9E1E9AE275E4824537D7A0F47A53B0E242D654C6115A322A1B4CDA5697DC4AAA5714CD5EEA311F2D6E7F76742564137346AC4D0CBDEC1521F81F5442D166F7D64847F2501445718F2F21EF5F261C26DAFC2E8035C5AAEE0EDE68F3AEA97290FC07CAF5C5F5082A9A2F7704C8E73ECD7251973995FAA7681CBB6C35D6EF74EB7C102C3B86572BB48CE501E92BD50B3241302AD1CF373092E50586C4966FA83852FFC494AB0D231C8CB12FC43E03A18E95BCB682A03DF5030274FE0B9EB8263B0395C8AB687E79C9B0E4795D5B82DC59857663393968F4772B30D74F9889A83D2A1CC56F61CD35135340CB5A08ED1A4D6E4F5695994F0CBDBDFE6E6B79B1F2848216E661487FAC8A7E8F7F4B0C045BB064D1D10D83E64F620A47933757B147D3F085D5ECE6466DDDB0657514706F9C03462B348D3832D697FA1FBE378FBAFAF8F448F45AA051DC58CE2A8313434334D1D0F5245E0CF6572A9762F19A1819C2E43B7D477F39495E22F83BF7535A7E06A798A498844CB5957C2BBCEBD0C03BDC366D4288B27DCBB40254E61133A3D23B29A79BC42346408398C5C11003FDADB7038E0BD9C8797EF92321CA8763E9CF0CD35802CA904D4045B9C2A82595C72963AC4F252FC64AF7337FAE44EA52A980CD3CD832F2820A7C67967DBED2112853277750E2A1C5C414D3D62E6C14FC970DE5B87C074D984BCF55FD928B3CAEC6F5EEE23C2C25A23BF71A9FAA6B0AB13E5372E388615409E953986479302A0866600A762A1348AE1DE997ECB7B837875F719C8E1436FBCA49973E4ABBEA55A93FD3CE425BB82AA87E7FBCE5F9BBB161AE1BC4B9A086EBEF1F2274E71334223008B826BA26F733E177839BA67344587C2B0C6956B6B725C3F7AB2A3765191363574A6FD192A15815F6138C27619C40E30BFB7266CB82DA4E72E9A5890D941A36AD533C4683C27D0F63865FBF71913A41EEEECAC3536B090FDAD3C1FF259C3994E6081436712D8AC030BA491E3544F7CD1EFD1B808C450FC643EB29E9D240CD857B1EA7CE58F5E5900DA02B99053CA499FC0B26616C22B6982D6ACFA141CC40204410CEA2DDA5408F8038096E4AD9F188F15C13255CFD4589F756CF6DF198CD7D1F725401464AA69C668770ECD559DA4F9EBE77717568595C3F1C4C6C3A767DD05AB8C23B52E50298EBEF0A8E541A93ADCE255D4CA6D80A4CEA40D7D839D38AECB2D9A624FBEB20BBD4F361B74A97996EC9FC7E6B7F655D16311928C14D922BA4DF4883A67D08F35E81F1FCC5F0660E41872D5FA6ACF69431237CB1F128C3964BE937B9397EC4D4A200387F9E3BD5B38B4C86664E7E3456D815F3C17E9C04D2022BA0685CD2BEF8C041E139576C4F68B4285A1046ADA3628C64EF5A8CA26B454D7D40F0BE012B5C948BC08A835703730C6B63FE6697A95A3457FA38EEE409DA895C229BCB05E3A999A2443F82132FA10F769E8CC465F6C82DFEE6D38BFCD4430A8F353D17E852CCA5AB8954803A35672E17DA64A7943710B6F18D8184283A69DA1EBCCFD0BDCE5794DAB5CE2DBD1F725117B1A8A368B92A71A1E561AD0525FEAD8476A7F96A0F3089D02FAE4EE6128B4491C9FA272A50597B4061D4A7ED6FFB50841F5F14BF23F2EC70E9F5F4345515C0954F8FC35834328EB2E27233B999EF5720B937BCC332260AC7B1CC180AC5B61A8BBFD898612B0D90A2E766C640390FE4F304E8DB41DB31F889B9E97962B1B9522451D7D361636B902F3D3FD07BCE878E3B449C828BBF110A7D5FEA0167D2B490AB8972DAFFE3C2DFFFE6BD4EB03CE5D183B03B66D497F8C361B55DAF6825A21859C82D567D53499478A5525B3847A61FBC97127C4D3DD93F9695078AC85A7B31571A2E710A9AA2EC34CE19906320D4EC730D39EC40 -MD = D2CD4766167C0D26F729F34B6B93FBC59106BFB2E46D53B06411371E -Len = 28571 -Msg = 3FBB94B5132FE44DC0CF27C9F6FF3E398B197D66FECF9B3DDE69F76EC5BC99ECE62F9B8D8CC9EB12FF4750407E2B560859088FC318FA7629757A4680B4F824134327C3D82B11FD10BD9693EA7819F4562895B94F2D897795AF1340FF1101A1C4C64A3EFAFE8DA131265D0D4791B1A1819301C4D5E28149ED5E1532EB53453890A706126E92C06C2224E57164EBFF395624F3112AC1466C00CFB01D6B81BA2FC07B27913F2F91240318256E423ACF963FBC8B7599FB9AC32EF2DC1B78BA367AD03FD05CC24C8C5ADFFB801DBB980BA4598FDF9E2FF51001FA40515CC814C3E3C309F27945C976A66077FF6F5D812D4CA2374F71D35472E4DE5FDDB7A936824EC856F7A537288E24091225939C6CA05E20055507D4169FF42304CD9DC68EFCE614A940DADA1656420B948C492013940E1C12AFB9988D21DFE52D20FADB9461F59C4229A5CB4A92FB2EE927D423635E2E0B34A0B7E6EB6BC63D81150AEADF9765FBDBC59FAB90704AE63903B7A3855F53897C1EA79C88E0884449EEF725798F05C1F5947DEA0305D7FF4DDAF6B8313B58C2FE9F1DE247A0860CBE781199767BADFC164DE45290104414DAFA81B3486A85EC552DB4D34491AE6FCD951B0F4536F64256A1CBBCD4B5004DFA54258003974B372DED3A93E3D9467A8FA043D161641CE55BFD95384E62A60141D46B9230084038AFC4B36F6C931EA3A1382A01B36BBA8D061E447F38EFDB12481A5371EFAA1CE94081BA209B76FD74AD8165FCA678F6D1F84AF020198312AA36518C5B7BD62F365940909B596D678313B748B29B057694E1D124061089D5C6F9D4FBE9F50C26699F7D6E05AC2847107063136691B217A94C7507D0657AE1D110700AAA7F696D40C33BB252374C5270D0CB5F8F0FCFFC6242744C47147B53A38341AC5235612F03F20923644F3994E868CDDDBFF7D239F6427E5E4D517B5B35AAD0E05CE1CC247557429BECD30FD5D3526EA2BFB191A21FE88746C69A2D0881474B491E2E823CC52706475E933DA0F5CCCC2C2C8DF25041585FE903D0EDF79EFB68E6CE83C034608EBF2A08F12A669206A462EC3E008C97B6CA22621836398D4E5285D01DDE741F7D662C8AE7C0102EF0E332F6C01ACA2A2BD3B7C970C184C101E475A4CB87B7917D59A9DB5AEE7661D00A5FD51DAB8B7AEC5CFB302B241001B96496C6B0E24C3D32EEB6D82CBA48FD0EF12E7403DFF3B4B915463D7119D5B6149F8FB1262E073AB94346791BDF719E701A4CEC546C389B096945D9C190CCF9ECF86E0F56D48044C911E5563A752C9C47E6D7DC345E28B4C5A05C596FBB6FC7ED149B51149A138176EC92ADD655908B988A61551CB4141D39D7D301CCBE85CE78AA9A17D5B334A1350E6A67DCA0063BA0151C87E61DA50D8297D76C6BD1FA9C1A4E9D1617680D707AF0BE91A620F303200CBDD273926B6293A684F64860E130D223785D388C13BF96CFBDD6299B25232B4788CC3AEDBF36DD8F2AFE33C04036A187BC6DAB06CCCBC33A2876484F562FC2CBF1B92C8D05A7789C9B0A69C1E4F1456026AD7D7B44C2C2C0B9DFD875F9843FDC7E9963F39CF118AFD6210C1ABDC8DA26C9EFEA8CF99BD0DBA6D7F7753A9DA6D105FA872AF8ED3BA2ABA08B826281C8923D4D8C1E79F149A0D449F7B738CCB54991528F662955AB82C648F91DC485D6C108AA25C09C5F92BCFD780F28CDB20C4E8E39550A66969EF6F0F507135089D7081CAB340F45C9F1C27BB4083BDCEAB116956BE81F3BF7915471DABEB652A5A4BB7D282ECD191985294FABBFF19E3F7AFEB8E9D4DC70D8D7D588CB8BB3BCFF64F453C423825EE6CEE57B8FAAF40634C847F980B3B7873A088CE3065D74FBDFE6F77B471DA31BFAA21E59D0C8851F4747DE167B798301A4628CD944BE589B49C2B3D0D8810433853F1A43BA7E7233F261D7B72A869B2F5E3565DE6C0A516759B02EAE7E6220A67370C20D5C810259713BA81FE06AD9271D25DA7FE119088D5E7B08C7427DEB4F594FBD3E5661CD4025221D5E009F5EAB470DA804BA9CC8367D21C941432FDF045CAFECCB1F1EBFA413268011288D9BEFDA07235087066382D812DBDF9DF1C25687BA8F7A09E78B03014798566A6D89B22F8D2E05733CEFAF1AFBA5DFE4014F4932861463B4612AAEE435041DA433CA587C43026EC24CB444BC6E4FCC6A813269A5DF8521AFF25015D46DC93E1401830EAAFAD0B491979DBABE1E442FB76E4C50B64EB5A0B48B6C0EEEE7B9235481B87D079ED521F802AACED17EBB3A07BA7614935E0CDDD3CBE5376C0E7174C703AE34C355E1B63998D7B762E2AE1AB861DAAD5B6AB0B6635EF8586C1D59B9F2441AD29973C74078FA435BCC35D7119BE138E2B3FF24DF3579F1F9CBFED2F2F42B7230E7871F847B6F6B5D0AD02273C63BC109E4DC9194C03E3A30C55D209547D563CBA5D4A083BC8514D2017E7EB803C063B845826D36ECEA2453F85A6925984168A4DAC7A4A8E899AFAB8BD401C18B2DA0B23D6995FB10A3EE53101F9E25CD60203A9110735DA56A5A3E1BB768AF392CDA6E91278C44B9055DE0BC948C83BA625DC51DFAEA4A4E5B7E7545E7478A7DBF4B51E959AD348E46F8105966D1A5B63F29F7712EE473713CC8D562253B580D959314969668C33C2F416C4CE4224C626519A3A73889ED6396290C20D9DB2AAC76C5289C211B7601AF616E281110C213166B4C75949B8930480B3E4E302A87280C7DD9A3FE2BBCBC5065324E9FB1C8FDDD9B7202467DCBBA04F019582A0C9AF8DC798B187C1BAE2DD1816DD0CC7D430F8F0343FEE218E50B275CD4A1953133CF49A8A33017B0BD61303A24A1084A02B33187E198C71DFE11770A6F6F01CBFC20FA928B0C2B6F521902419E3233BDD5DAF09A531A983343675BF61F24DCAA6D85DE4D2D9D27845262BF71AFDE985DF8B2DF8F401D6E4B58D471C60B89B6677F9C1E43B5EB91B75F35A64FD528134716B6FF1D9851F60FA4D665275C7BA58A87928CFA38E9A0F8BF350072F7AA4A8154C76BE987FD2A3CFE5090786DEB539831D9784F20E6107418F1AF04456587276D92EFD71FE15E2020BD445C5BBDDDE38759CF715CBD6DF8C57BB9651E09F23F0AA6A173B4CD026353546D3010DA7DB60DBA93B40FE8FEE1F9B5BED0FA688881300F0C7B3F5A47E574501CA68297868B2A91F5505D3AA8D12AD515ABD60377A827416ECCB919780E218DB5559984EFF7612CD62901B246E41D464DD6D4695B11B4B9C3CAB3CC2459FC503E8AF110A1D3F83A83D0FC90E787287730E14B123D0990837A5F2C08B2C6845B15B9FDC6FF2EA6593BF00DFDFF2BD204A0E8072ECE136F546635496FEDF199D6FFF216D9B4CB974E0831EA67AEC1690FFBD252F9FAB0F9C4EFAE3A9840790F5B73458A5F3B578C00F9BEDFBAA80D82F2F9C01A2A17BB49F5E241BAAE4EABB940CEEF26F8B4DE82D831F856AC8D874CF3BE7AB88AE654B76F9C9187E07B441EB3E745551575EDB347110FCBC368B781DCFD2C469DDA40741065026240B51241D2AA29A3F07F58B22E9A34CA8C93508BE3B7E7166645401B491C56FF6185DACBC85E75A6250034485E13B1E862C6383F30F91F9380B61582B7C936053E916CF5AE4A9BFE480A25AEE304705F9F16176E207A187379913912A3EDDBE048504102F2D48A49AB1254CCE40130AD5C0627D388FF0E493DD22A92D0D27E90153606F4DA1F23DCC2D92C9D95EB8E8736386060EE4F98C27332E4D0F2911C81395B64BEB7058C98F0A7690F37EB9EA72F07A2648B2173F09B7CFDE9FF879A44CE38559C1A2245592FB91B91676974BA09CCC3482CE869CBFD6DA555C1922FB13AE72BF6A14BBB12DAF4BEA6EC5B1F94E045C8CEE2EBC11C3EC9059FCA26619BEB7EBC58F95221FFDDE86F91909C024058DBEDB265377A5F738CFEDBB7B7642877B385613A1902EA76B4E29D80EAC27FA4DE9E80E4E0A3596D16AFC0959F0D6FF4C1B9896694443617FB82A15CC67FE83198B407E3DBC27696FD9C73AC43FA8F6ABFDCC055401876E90963CB473A5FECCBADDC982E9725C364CADAA4229B39B28F5065187CB2A3A8F9DFB0EB0087BB454AC21C39DBD271073CCFB3C9629DFBB41E2CEE91E7C187DCB9156277AD46D14D51677042A92E0BBF5277FC874FDE27A364C54EE2BD6109317DBE235AF721709EE13048B1FB76AEEB848CD355E01A8554BA699F6D68585C29EF5DD8B6B93728BE2D4ACDD7BA9302B8DB93E8613A083D3970D5F527B325CE04AA34A42D1336E16A29E99AFEBD7DEA81C02F319A2D09E92BDD209CB348D5B442949B507DBEF94869CC5F33D7AB6BFC34F3603BFC309D64D09AAB83C8974559D58A866E9A354136343A6EEB4ED60F3DB9F12D35AD2D11961B5ED5BE13B8C97958F7D07EFABE300A222073E3144CBB59BED0259A9F57A194C1459526A76D94979EF1BC5C0F69DE46367043367C027A7D7492ED2B874715B2B9FC48C8A59D441642F1341EB0144A83D3E3C360CC6333005A7A4D5226347FF13A357F53B6DD4D712E6890A80437AC9648A4B05D1E44C6D4AB1751CC44BA1383AAD0C195174C98BF3D30F78B843D0A9FB5944DB7815E1F3553C7881847A0C3330D2A50C09E141FA3F4CF72EB421B23E315B6561C64362D97AC73355918224C6CAF6AE333E6184C80C95D6A73CDD36EDB2C91D746D1135640E53068C0DA9BAFFEACB5AD8D02DE28798D46DF667A4779F16D7A9DB097027D39F575F40CE8EBDE22E005B29B396C23A15525CC66882CD392C5522CAF8F3FA15D31FA8A6456D9F6BC76EAB71492C8FEC7D65C482A1835A0AC70E7A6BC98AF0972ABFB9BD5821CC5AC3A61DD57CADDF842F5D54E83827B4B4A3259972E9AA64ECCE3525D8EB86309821588C0827A537A3B742AC0677E6E1A0E9DA546EA619625BB25C23B52A06B70850215734046EB08AC20B7CA8954EC802B2A2940A338D5ECFEDA1E0D74940093541BEBB640E984E676C83B5BB1620B3D009FA29AE1ECB67F9771096DE9D760D225F09C0D2F872856DA4BEFF8F720BD95A08FAEE0896140 -MD = BC2ABE45A94DAFF17CC53B907F6FF3A6F66F52C48F70E4F85F8D59D9 -Len = 28634 -Msg = EB4DFDD1B63965E97CE473D42C15757F3FB50947A351228878688E755C0C23A9A7C76D30A8026768F3D5FB094116C2643F4514B5633D9B18CB5B4A46DF5CFD92674B0E7554C192152AA585C99FBDF7BD8337844784D3172C8105A2B6BEC6D1F21E6C0CB043C707557F93E5A9980168366DA734D003391723F904F65F392B22C2F151546408EADE9C3BBFE37C5F62806ABF8C140556C9FD9CE653C5FE93A8254F6D7FFAFFAA3F1EE57483DEABC9EF976C6B7449268BD44E779A8F09F36ADEE757C533E5E6EC4C3C6CA86E852586174F2C0DB1025B0845EDD8942F41CBCFF1C1B5C5371070716E6319796E7066E024AE235E8F6FFC056E082591579A74C90D0D1F35B8AC4EA7BF4949F1007890D1B0FE94F3583FAA105CBF7BD7F215CA13A934574F6A7BA8E1A7626C0967AA0540113338D18939FBF16C183CD8CFE14FDC799F17FEC8E54EB21AA6BFEA8FCADBA10A94A76FCD95FA5915D0AC81EA82020BB4CAD0E5737273A4EC6802100D77793508EADC74597F205CC0642C62F2101069FE54CEC76CABE4DD8B462EEB0901B990E72E587C17449262040FD57D8A895ACFD824BFDF119AB91B7BC704854C38372A760F019FD6AC2339658F362162737425AB0011D434FB16CC26AFC8DDF7BA060E7E1989BCAD4A95EBE868105131E49868E49BD3406A5DC60A35C77F491396613364E291057F53A417A374446DC3D89DC5CB3FA310E4EBA975ADCA3AF756FA5A40E957B09CBFF8E3AAE4496FF23C5535FC1750BCCFCA6956DBF9AC165C358640F5031334EF8D25E5778D53EAD0F8252E498C88C10975C7015B1D4B7CF70AD93CC9526E174F54A1B0899A44D41A00B93999E34E0A16BBF1CDA5DE4F810FE0BF9EAC087BECB7D6695DBB214984288198E68B5EF179AB0D79328107ADEFE6DE5167475828C7C3A4FE18198C6EF1F729A27524A58A4165E76B21AA83E64950D04B901814BCB70DB481A7F31963C55FFB1953BCF2E5D484BC2D60BAD48C382586BD6D825360E2F551962BCACF0323466B1173B22C066A28C0F29632BAA01BB46B76DE42E345312BBB3810115CF09C305DAC7F2C497A164ACC089E2424EAC39B3123C3D7E46A3E1A34BE56D95F4D266FEB7078B956DBBC7E3B036BE3534B83D8CB8C0ECA2E51FAEE3ECBC2EDC228429833A105BECD6A85C123F13750816FBAD0CFB71CDACACC715FA6896E70AE6413B6CF268454312A89D6454960E7C7A94871F9849FF3A503B99D0010876FBD0252E4ED330FB44A31CABB0A47EDFAE0F8EF10480704436F3250707ADCEA758F7F00724B79EB9E232DD00D44104E4656E3980EDEB2E43BBF59A4F330B026D45B63B78AACC028293E51C4205F2DC3023D2E1EFDB530E7897857F8523511DED9DAB6E35151212B796F5C75B3D099428141FB252018E3BD9B9F23205A668D8D3FCED3902196469873396C7C096CAA92A1B29F345EB1B3AE8FDE98EAD011FF76A0B6A542A36D46F8B3390E73D165F4C058C8C713EC5C210C2B3AE71E567F3187D67FD35DD6A84B49698E16C7187B1787539AB33ED9CB86BDDBB6040D2CCC1D0465B938A8613872792ED3008859A1420D5BB5FD830E052B9D86959D29ECEE465C6FC31B95CA5AB97E41566B3497781F9B5B3F33939A9686FEAE99DFDDDAF849538605F894A6666238B702CEE0878F157370FAABE45469EA2EE7FA87CF1F62B46C1AA3EB5122857E5CCAC73FF1C3217AEBD83DF17A6C4AAB6C1ADE30F9AEE2DE7EF6B4E93F0B58732E42F499B13F2871F3CCE0BEC95E1887615F1E5EC6E1B19D283C55CEC1D7EB2F3A287606377BA9F1DD9E9AEC68039CA1D4FE458F31FBC7C0F4ED724B68FE51C37E9B43666EC229194BF1E83EAEA083B9A140B5570AF6D67914E66C06817684F3E284BF5BFD7C4C31C2B63E9E9276D9B263B9F4832571E2D4F1FE78F7A15D26E98A2942CE1BE948DAC5728834AB3A73A4A00BC62B88010194BF466B02787B5D76BFFA190903BB83DF46A5CB5F0F441167CD1D734D75F53551720E67D7C6E66BDA1D444C029530EE3F5B9428483C5C08688267E0EF3475AB61E3DA3EE3973C699C388F0DC34152B453CB0932FE49614F10BC5389FA612A7B67D29C9AA61DDCDDE0EA4B3B5DB3A1355AFA5D96D1D2DCB717D9810DAFC8BCC89A5EB343179D613B9EE29D39EE77F2A303C705BC58290AD1BC5E550CD101F7638494CB4A00E57F3245D8FE03BBC684B588215DE9AA70DF359C162A9DBFE2D02CA6771D673B924E1154584F6635D3DC438FD5FE39E9CB07DFA59308CD5501791325C9E6FD970A14DBCEE7DE8534C21FF0862AD7A533A8EC3BABED77E5E7AAC94A52436480CC4BD1ABDFF62F6DA5D08CF6C8770D9E148918AFD8C6119D4E013B6511E8CA83094629788734ACA4996EEF2C6AA4A1FB0B2CE853F8AC4A09CBBF200664781F2B181C6C91CC0613985EDD40DFE1680577FE9B8E9703BD26EC19C79FB4FA0425E128F16EBF61027D97178B33FCBE73B1710CAAC57C3E4B914F849584442E17AC916937604F1AD06BA6FA9D889CD558C4A130C209DEB7D954891B84201FA52F051DFE9973F7C4A9F707FD5A98814F9A8C635DDBDD6B0EB10B64104C7350F1D9A0A98C04AF63A6C9425569DF6512A39718ECE2388CFEECA6672214AFED38030E103DCB533706DF9257021AE99FB97A9B86FD7BD9184EADAC6ABD5AC67DEC3EC2311490F1AD07F88FD74A20DCDFB9161861C66ACF490B4AEBF51FA1A7B1F9C41CA98CECD47D0BA0ED5C932312C0DD313294314F6102062E72EB7161654EA0014C68FD80B92175A33C2F0F40F52475EAC78376A2AE58ACA1C1E4BFAC08434949DA98CD6AD03A4C48A80BDBD120AF3E4E59A13B2FD8E02C86C54C5D8C9817E0792AEF44E10E5A28BFFABE17F29FEBECF221462184576A7D25B702A4934CDE4354EC103C460AD10F4EE2C07B060B525B088D61A47EC3C2043E844BB4B700FDA2D14ECABC909544D34ACBEF746F9A169629F947EB7FCEE240406EC40CA8D87DEACB450C79E3DE7E99AE9CCDF5885FF2C8D1734BA5B357C8DADD31365189AF5A7AFE2D0BAE303DC67026BF5FE68D97A8AB2F4299274661B9E6958B3B680FBED5AF7B8112008D3C959B191B3A85342E3AA4599F108C6E7958972B4A96F77C14AB16BFBAC704ED26B1E3815F17826EF0C29E3B0A97D7F55A15176D40448789BAEEE1ABC7A0F4B931D4E08BFDE43FFF3FE16D82F8EBE25A24A519528C503D5F8594E03BA9E438F542DDA253EF542DF49F605F097A690EDA1716C334B18CD51FFCAB12F86136F89EB0F706FFB906DC79E5F887920015BEFC57BF7FD4240AB291943C6C5A131533070966EF2F9303708CFEFA60FFB50A82389E48043E69B741F7A615ACAFC337F36C00C0DEC32E39FC74DDEF38AC5532838D5CD512097B14BF05AE55B122C9C96EA40A2F08E8EF5CA40F84F6CCF87ACF4B7CA46251C632629551E2E1360D9578692645FABBCD29AB534B927BBC92841FB15F1BA505880B71DEBCFE5A8E1311AA90EEC69577490DFC3D61733278BA2EA07F6BBBFDA506227B7832B03507090EFF690B50777F1D668146AC5BC77B251D33B1AFE2697D09F8F8F120D255FB85260A0D36E7D0BCBDC12667970B819B7D8576D3A605E470EDCEFE3338FFA86D77B3665763765F88448774E0E1E932B0A64113AADA9ADDABBDCE602D8FFBC4E7245E31F6709EE379AEC3A27CCCF35947FEA77678F63A91F8B1D7F991292FFF06E26E9F21364EBFD869CD2F9809A868AEA43CB735C43E76FDB9ED0146CD7D62ADA1989906F79074F96257F142A34D5E076E4E06363F85A87D14E1DA1A4D7433EC43DA7CFE43EE92652753778E64DA3E982DECC0A9DA193FF102CEA2F4909495E651990F3A2A5B19D87413360B76F6BA53A9A28753981305920132574E388F74B4EFF694B238CD073483F8C49775C0271AEB7D27E3BCA3F66A8837AD54ECF7ED36BAE2F28EB6448734CEC0DDC491CFA0EBA2B198EFC61CB8238E30C3431C67312257BF883E97BEE72131CF09F9CC4CCF86BC9789D2423BE8723A3D63F280C7EDE190BA0C94CC6C058ED0943C0BF206A91AFF9865F106CAC3EADCC068305966EA96C3C0F2DF7D4DECE0B4D697D160E686C148B9F307E6BEEE3617120E5B59FC1BF587AD2D2107B99B55F40A5F29C2AA2CF0EE68F48395DEE9352EAB242BC1D20D785150CF6AFE212089375D752DB3423932D1EA418882E773E93249A0806EDA1107C62137B2F719869947CDAE990E55B1946FB3379D01C53D2FC755C1FE1E30D6479AD07B1421D7E18A194ADE4385C7DE07B7A4BB98A643405F197AA3948BAB546AD8F5028775F40C08DBF34A5FCF857E8E9DB38F7291A5987ECC07E0CA321117D182C5E722A7572B1ABE5F9169913C3850C8CBE636D7AC36EE9799A486D273822447658EB8A3D0AE000BA6B516FFCE460B2077CC8FB97D43795B92807455BC9D923A19567B0C50D492B6047A52AB24C4D04A0FAB315036DEF9640128E48D42387E46641EC61007DEECD688F6E855CE1855670A093D491E3C7A0CB72DCDE928B394A9ABA354AE68829CEF4B6F4EE5C909A502AB0DB32584B02A6DBFC0002474FFC5EA3436B6A152E664592D63DBD4F080A64BD96A10ADE83CD2FE52B0EF0F4A38777C723DCACB99F6B36B570CFCD955DBE2BB746771B5ECEDBC459A04E94C5596BF27EF1187747B4F2B9C9366092797C38074AD186EF512093E5E476B5A0A603EC8E1A511AA99D0DD3E9AD66408D95DBC420819041574EC17D9060C5D588D028F8B0382A3170F1EFC823BF63F20E2BB6C2AFDD258D140B40BD4DAA11F04A42569FE581D7BB6741F2A49D1631DAA219FA916189D10023D7F8FD6F4F57EB5E430A9D9AA6911C6289D98CD3016B906C4312AE8AE9C189C560525757D4410B6673659D58097EC29112B2F6D2F8FBEDE59D77D40033C5017CF2B7C0DD11DB8D1964347431EB58C127131586293957203D6733E3BAA506EC9E6C084604DE0EA9F8B73B017A072FF5D7C74E03DEE91E31E28A61B06237186A2E4679145FFDA8AD6A321B337B63869E65E9B56FC1940 -MD = 221F4BB5701C2D485322C17D875DEF64DBDD753B460F7ACE98BA0496 -Len = 28697 -Msg = E52D292A034B12D52E4735A3DB69EA81C3C1296D83453A632E480B728D2B04A72198D80A37D0BA48D68A64C1EBBE13CBB7F55EE8E6F9895CD0509FE15171427DFA8E0B5810BCE130D65A9B593040346177218A0293CFB75F428B5406AA068B3CFE93CD29647B1259FBE8321B894B2E9A9BEFC5B05CDA368FD750D7470C539ED4BD44DC035F6489800D855A75E4CF53BC60A3EE95C3672FF8291E1A2FA86377DD0F8EEB3A242EBC41C986E7F77915AA9A464339F56925A73BF577FD1483DCB873F7A2BC4C47AF84DE71573170168E0AE81C8AD4618AAC41D62F3CC7E89E0647B231E80155A800736CFB0C35E5DF77CE223786FDB571A22D53356C91DF77736575CCA12AE898D11CB9D0A1FBB668F4EDE1F746039D9CFA6F02118B4925FCFC00181646EFF125F9BCF7DD2C21C8A2FBFDA6CF81BFA50E804CE8557489FF94FB1A194F25A057CBBBA9696E999593F00AADB231DFE26AFE0AF42E5F961F9A42450CE7AA11BBC6862A246B1BB9D3DABCF65FE086BE9D6B2A3751516315B6E18DB56EB107247E5220DCC4D619AC8C922FA2D3D5DEC26486742022045F44060A7DE8EE313BBFBB262A24A5FA41B67016792C4146CA3BAF87DA4CE7B3B65F2759403A9011FFCC5BDD2C57388D889737E4BB105C509186A8F8C63709D6BFD7E8923F6AA924C266B323F900520BBBFC3958227F954DF470F791AE3098C998AA01742050699C7D27F9133FBEB6CDACB7AF04AE5E1B3E786C5C8F11E45FD06688818B66AF8DD5DF308F449D569A7FDFA72579C14AD0A825A5212B9AEDD91A8327CB1021A332C3524326BE0F8E8E164D8309D4765354BB8FA10C564CA337229C27121D4F0D63941F1787DFCDB1CFA95E632B45405288DAC1B6127BD8A442AB74CC04DE62371B444BF201EF73E9456B7DAAFF6ED545402FFAF5BA9EE85B3C2E64F6AE200D795F31D2F844D87C9DBBD6F252336F7D8B2A8E1EB6AA0F59B5A01C34BFA156E14B6508DF718BFAC99EFC41A2108024D7ABD7D4AB463D6487ED065F88A0E8972A544177838F3ADBA14F30B5FF2489A913A64942C7F2A6EF6FB2B7894FE4265F1B9568B497DADDB9F5F13F2A64C45E12EDBF70F4D5867D1C53941695517AF58054822F0E3CE0F9E0D00142F35F312CA9F8D75E34EFAF2470370FF59DC042ACA4B50C1452F67025751E12EA19C23094C0413699AE25FB664DD1E740E96C6A31403774E5D5884397E94A59304DA2FF6BE0448DECD003DB81DDFC5B666613C0D503C43F5014F05FE1BF0E8AD1B46549BE1773941BCF8C996D1B50776E13BD98FF0B691A663154012FD34AED45D3643E06929DEC89CF129636D0FB12FD0F2DF05D6E27B85D54E29283076CAA5D827DB6DDC665F94E2B2C9F95872CBF8CB7FE6912E89459DA870813D540B8F27D79ECA5560EBA6076B2820A74F6C9807F29F3E5460A8583B1CE5C8DFF91FB011391D17DC5286E3DF6100131237056969376AB284589D3F15C6B1D45678D459988D832F74BB2B7BC7E8D84E66921EBA6793E4694D6043D0E90071EE2F9FBDA5E23D6A6B803383C655AB149AA280A6A7B73ABD673D5C5199DA61525F1E79CB62BAEFA35569C884378C2468B75E38C6629D34BE1CE3AE277FC0D59B6ECBFCF64176461A9C7E70C9C2E2E5E93AC43BAA6F268E94991F9E6076B883B279E29D8B9179DB15AFC63E00D59C99E8E7A947A658BB77EAA73D0DB40ADEC147477AF4AEEBB3506F3CB77A3B07527C8779DACA7665ADA10D39BA0227923E240B5B11C2866BAEA48260B2C864AE358E7123793427E550816C3BAEBF378200FF0DB2E6D1A5A1DFD385F045B10ECCE524E0A212341894263AB245AB1368C7329276004A96AB2C464FEA4EBE8A659ED4E944F2028929690D61C4CFF3EE31D0304DFBBEA510E5B845998628F5F31AF03A2E59F35839D2BB7E29293D5C44569055087A5991678B8E004EA0CBC65F5CB4AD1B3DE33B2F1CCF5B9AB97AA2DE90CE37D775DAD1EA302893BDBB951B2AAF8C2D691AB933D4A1B85D16EB45E7C315128DA03ED2A63C561E8E0F57BC5BEA5E538A40DD5E61469F4492C1247F4B092B1F990CC826674921C7B8BD933F7BCD51ACCD83F8DE98B32C8FEE389B915B88E4C98BDD748B639D38A090E623E9023B9932280E74AECBC73CC60A5AFB09575F5299C47AAB0551CAAACA0CD331E8F00CD02406FC8E0FDC989833C27B0C2DAE9F2C710B43DAEE89807120A1FBCB5E6619A2B6801D21E8485DCA94C0645BAB92C5DC2BEB3DF2EAEBAD4FD6AE69AF19C5132E7196EF7592D198EA96AB05F107910A1E9DD67F8251E5EFE0A2F58E8520F523F4F3E40A8EC3C8CCC043C049C94CAE7BF8C37408FE440F213A7A06E8D29320A7A4ACB3522939117ACBEF1251A5C1FFAF39DE4A56544B9BA59E0E9BB46DF7A8CB02F514CFE129826155176E2A9F8080616B62158FE1B4095E852E64A6D17CDDF02F63A0F14F5698FCF43FDC4658E478DD867A7E24C6C63D1D44E8EAFED4FA6A0F7744A6C46DDAC6532DECCBB1C7A8E9340F3FCA6DC5AB012228C92E1166D28F0294A6B185D19F52FF123E2960DBF4C2D625018173EE3C90366CD5DB500DE94DCEA1AB2CD30EE40260E5F967FA42E44E26BA3D958BADCF4D7CAB03447F0F9D3C0601BB79F1EF70A6DCE8F393748E4FB7D06F14D5DAE986DC42F8842CAC48AEAC742FED011D0AE71CD85F9F02DEF3ACCB406B0DF7DEB296187DA8D324F1BD15A7DD2914F376159A8ECAF67D9806C32E71C9313AFDEC24741B1B254A71E56AF4CD4416CF86573B9992D85669E057669F366E5D9C375962ECAC6BD7629FE126A797D07DE8F371F17A90340A27433FF32F6C7EE92E15DC79AF3619964CA43577C986533617687113F223C764D39B52E3ABA289E964E0D8B297196A1D6FAC52A3EC63A637FEA0ACA41B1A4521505BCEC9D7EE75B48971C8FD587F4FA733EB668F646B4742ACD52700227452EA1D93D4399DEE0CBBB855AA21DDD5DBB77D6E0BBC2FC473455116099419C03E2D6BC8DE7ECE64FDF43E8AE6402F2E30BB6DEA2C3D1E8A2331643BEE9D7AA12150CEC2FFE8FB0F90D3F326736644E0D60450EC13810266AFFABC25E9657697587BE85BE45F7718216379C89EB9BD1079E23FA53CF839F8F9E93B12D339E94B28AE6F42C0DBD13FE35D26358DD1989520E854D49A584F27082EBD6F7D4966F773E94EEFE28E67EB9F73392907BCE5574B9CCB5C713856B420ACB7736F9E432A4A7068ACCDCFF917CA03EE0C9435F3BF38C3A37F7DBD2F44B92474E07CB1A112DC0C0091AD81C051FB19AB65CDCF642F629465E3D18327DA3B7164E5438B1081FADB761737D7566C0639F3649C056FCF999773ABE24C7D621E05F76F42294FDB475B60D9C2BB5F70D288E958A4B24DF0002541E95B28A7C4BAF25C8A7D18FDE71E52AD155C17D37A974D8705BE56EFA12321313ABC7FA09ED6451F1D5C8AF054370643BA4A794564DE7AFDC70570725115D4249E01B90E95B4BF6D66750A44DA569359254AC11E9A1B73C3DDE19FCFCF4E88D8A7ACDA0E216D05284479D5680961BAF0394B7A68752AD2C9CE265F9464CEBE9A804A79D0E23D1ABFB490EA8D405750F055162881960261025D5975D328FA991BAF2B4AF09113E23F4F595AF12E58D501E9F96B67DB25D732CEEB709311E07853A6EDC10969BE243C8724AB4FA2EB3C21E5156CF89723AC35E4061D55894210167817711876F67504588FD3CAD8BCCAE97E55D017B15984D1DA2E2A0FD49AACC99C38614975E993E7438E1C3938925133A845D2C0472087A769D015C0743591BD7C98E943193946E229263D6FAA96B8B165B8CA72F214C0C4304D14C010DADD73E8FFEEB229F32FCC643545E3D056F71EACC53FAC1941281365246F6D797B7C40DF51C767C1DE5608E0D65C2B3442AB9D864B63A0990A222A77DEABD4B9D43DEDE6493CA726AD167B50EB54EB8344499CC910F5D719D83094290327CBD3B23AC674DB85CD4C3025D8C3448EBCCBF3720E07FDF08C2E0470F64BAD82036D8FD6FCBA44BE89F0B16E99115454786EB5485F51E12073C01CC7C37051A70B970CC57C58EC299BBD047BF84AD11D3B2F54F5AF05480E6E677D8B3AEBACCDD83EB1FA58AF0B4340900056CD20975805C6111D31BA060CE75D34F914958D001FCD5586AD192B7F3BA61299E9780F8BF562902792E29A1284B5475D7B9FF829E18323F670A18FA450F7050C6F2730AF151E8B8C6D0173CBB6382883FD40918CA719A644233FDA48D81057AD85DDC65E39E720535494C9A4CD6D46207D19E93EB17A0D084666C620FE3AB664A18D3925BFEEE702C0D1B3777D3FF3C508669FCD21EAE88869870EE9574AC5D64EEE99B05EA061472EBDCAB825AE8A36A79392433CE854CCAD80073CBE6047019B17889E67270093ADFEA543A3C299EC8269DCD9C9A8EB2A6B39033BCEFC9EEE5E70DE397AB6DCABE6461BFE62E1FF59EC3A1083F7C410141782FEF52C116B0FAC307A1133D3B1DBC1114A8E62D0DCB0BCD27D82BFAA739DF5BC45BD4CCE1789B108C03C4F39ACF27824BA63A3DDE13E9F35665D38AE7DCF0F85BFCC706792ECF0FA07788E7874BA3B5F42248F3F41E8406D37169AB04B0F25FD0871E907D088DEBBF28762A5784336573269659203E3BADBB2146FE563213A7B788DB52BE64FDB4D091FB819F48648359166BD2C9CEC2D26DD7A29D49680B924179F32980A135C90109698642DF25E8D8A6838167A6A20BFA32AAD1D3988A92E6881B57E432924E0B5B7F43B33A78A1BF96AA2666323703D12E6319B59E823EB346E3490AF0F49613A8FB9A0EE860ED46882A46D50F922F5BB6A4C3DADBA92B3BBB85A8620D037744760558800277CE37D584109A60ACEA5B16E5DBE879316D43D99E7071EA329F518DCBC90868EF9FBAE5CCC6CC0B2C16596A7DBB189A69789D54AEB80581DE4B038A589A8C9EAFCE95ABAABFC5D4ED994765F5A434E4AE0AF865D0E55C545940992983F43D9859C8C8353AC7919CBCE46C3AC86962741A7E102C55DCBF3A05AF9AE7410FDBBFF6C5D2AC8ED4CB9BAB8D0C585F0E2600 -MD = 040094E0C386A624A5B11C0C9BCD6766649C05506AFFA8CF328F6A89 -Len = 28760 -Msg = 9740CBE9EB65AD1CE913F40BE236B1AD7141F8EA72104B122FE9AC99B6552B1B3A34FD6C1B962F1ECADD53B530866BFDAD8D81F8405C1D54E20D99F30FB041975F70DD971C17424C601F46516C13534967318D3C5D60ECBEC607C42D0825FFB84D7C5C69858512A3C59EAEED3F61124DF79F13D63C382CFF70EBD250FF94E1684EB5AD806714B4132E855CB20C09951E3D1F185DA09B0DFC4C026FEF5D3487E5F607578D34C5A4E9C301C07DFBB72233542C04FEC18ECE500C4CA479A4762E5DA2BFE630F6E4558192D6561B69BE3695688362DC88DEFCF859858396F974E59744BD0224F578F3B1C6F46C7EAA523F672B52906DDA5AD7A410AC6ED5D3AB823EB7235B1CAB4BFAC92DD73F4FB796A299C5F39DE590CF90307C6BD8A7717C3251CD613917358DB837DBAAC615ACBE2885558FC7A0BEA8E15176756CF5C9204C3E3B02764ED608DDFC52A3BCCC2CF4AED6F8AF14953363B08A0885C131CBB5715EEF0A04D18C4E6EFD59E999F74EE69C79E96A9CE7A5D9FE27A6A651FEF54B09768C1AA49FB03B09B6AEB19B38B00065EC6DA01FB471D1792F7E3D5D8C14381CF68C42708A43EF343135929FCCFF2F6642C13ED2008FEBFE9972BC164E375383F50798CB84FF34E1FD07940A218DD174DC869025E5FC459BB0BBA969A2240EBFE0EFC1CD34154EC1AEA73FF7858749735F1B2722C6DDD4A6991D2069FC3D61A8B23977FAAE5C32D95F3F1897B0E86BC8705CFB6984D49C1EE26A90B3C8679EFFAB5ADB871A3E219801C7B15D6DFC62E9DCCC887CD7F25BB73EA2C3FEF764962246390A4AD96610F5E0E7EB59B32E7EC20145308D81F6F638299057B2276ED045AEA7103B44BC85D33CDD0FCD738035E670B285762C65C3EF52452ACE980C41161D8593F46DD2816D435DF7FE90871A9B4CA1C5CBE6362E225E8950889FEBC47545F607A7AE4BA8B86350B554F61D424FB51C8E9886000E4E07DEC324BB5119A5B5099BBB126B0C0CA0CD8FBC304780A9BB44A4ABF58D30DB4245B65CE20B0975C7869B39B966A59FE69290D5AB3FABB12DF5024DAA065A48A07A8C084DD61016178E69FBAF1FD87CDF78E1AABA8A3A03B9FB893AB7B674544E6B1E46F943B149CDFB8598F98AC08EFD8722836BA320AA13B406890449F985FF8A568C6643B24DB35C25DF8F0BAA2A17EF66C2EE0E6F6E2B42E184475921508FA64632A4629B72F7F39513A08C6B55A8F0483F3FE1AE7528E128FA30745F0583C23C27B9D1EBE56AE86ABC1E2448B15C4649E5E26E189090EA986223688F310F707575F7378C7AEB070E0DDFACFF069DEBEC773B8B50DC86A012DB58612EC90D64AEEEA037C3CF40E42F1948EF837937D67C7059732BB32FC618A203AD06D5F8B472D0D692D93707B6B1B85F83161D13BD0930FCDBCFF94495277D9E390AB671371D4540E66AC18F03D625C8D38E75F628B06F478E6CC4A498BDE811B9DD8B636F7C761277A56122E59D0AD8052AE00C8D08436408EA5433D6027F798F48DDF15BA7600363C7EF67236FA6EF377425CD9F634788E9CE34D08A956E24E3137149B08A0EAA2D831B0F3285BFD230859AD02D50FEB10B63EEA8044DBE97693C29C105C2164EF436B88D5D870F88AD5919FDE8149B39AA65E931BF5D461A109A423E81C376F11495C0671F3CF371F89F81D52235D3413992713141C3F28F14A926407A239D6AD9CFE565CC29F8A836E5643F5EAD4CBD6BC936EFFDC687B758384D070273C8C2D2DBB81123B524147979A8E0C0D99B09812EFAC739465D1A858EF233CDD13769BB8996856CCF509D50CB33E4480A6AD951E451CC637933BF8DBD5168C06A76DD08D42E6FB0BA1044FC33475A2342A53765BD4099546C9EF96DE5B78C59CA6123223E6F72680A0B9DD9A12B24CAFEE32F0B6E145515222CBF2ABBD7330B9A91303B688DCC35DB233C71046716821EE409083C790BCAA893D04C09A8F6A9C35C072E5033108406009564B4135C00FE4037D2D51AB1D721AE6B74E867074199B73B93A6D89DDB8EE74681213BB677014D1CD75821EADDDD7C1C78B6B75ACF574CBB288D2B778D84F8599A421C5B8B9A3B120F8B8F98B5CFB81F4F8BBC416E3E1E9462EEA5840B96EA874A6C8267F5D16451B93B72DD5951DE2C4D6D3F94BA87A62A19DA58E30CCF7FB782745C233CDCE1B0AE1B1F1476983D123440A765D5DB0C3E38C47BBFEC5CE37B94969377394A25A90471AA9DDC98D559DC982A7630B6009A7748E9E5F6FE9397FE4AFBA1EBE530B8C46F4F18CCA271856EFBFE5791FB9297114D952F0E37949E3DD5A38FD3805EFF33DBEC3BAEB22A8EE93B42F85C845CF3C2C00C706E11EC7975F6366C6A38C2417EDFDEFAF03AED01A987E464830D7891B0AB7F67F08096E81F937DF9AB605C3ABFD1F2673FA302882806718C0B8750C59D0B5F27BD16579E5E5AA1B5A98257627F97AE38BBD79A0C21E48EF7BAE4360C003E8F86B89B042B65F436CEDF39CA030DFCE9FF772CD99274BDD0E6252D8EAE877330A21BBF6F266F27D119700EA597A39ACC8C212B43DA9A775A6E165C60F6EFB75701B7AECA101F70AE541A44EBA7500DF14EFC38F2E8E12238CB7479FD4148322F1055680BBCA8E535CB5ECA77A55612E563F6CE2A57B1FB9B663AD0B55EF27B2EE32E6F779C6F9E74323256D3D0A2E247943DDD75836F4B07B1480A00CF4F62092E5FF60DBE75418B6BDBDBA59DA397F23B5470BB337487C863ADA5CD8483E6C54D201883A3367DA2B2F49C66B7FC675AC47DDF7D26CB3B40DD864CEA1A178BB1277B28F198937C12BDD8C14573C429FB139BCE19EC9B446552808D25F8610DBF949D33A06550383DF5F3CBF799B0FA41DC5935DAB118A7178381ED3EF9BDBD632472CBC48F21DEB7B5B26C6D6A4C6D8BBCA609EE39C501787F6EF2A9B45FFF5C6C57355DDB17B7A271C7B56F1B7B4CCAE8DF84C01514CF9F8138150C77AC95EA22B5C7DA74DF60EFB0605F310D42EE071438C514A418B62247DC2C55A23D0E731EF9E514D1DDA73F57B2B6FC4B4FCE62F1F0D0B545AB8FC08AD4449B966219E1D533F26A4C4F628C2948530C0518B96FA8B97925629DAD65FA6551BFE9102CF1B9B7C43C41F8BF4DE993FD53C4E582548ACC64F67B2E9FFA34B8B9E2F64C87436CA6D1D0F22A2CA236FBA10D9192400B11D77307B51487D986DDF418076833CCA1639A2C9B80C309A3A4EC9ED9108A69EC136B73982441674239A6A380850A7E18584E9556B7A6295578E4ADB010D5EC2A3C5BFDD3062A9BC5A2A8AC6EAA45F63BE5002A5B53A037CD2E996D3E0B256AFF17783528AB93EB48B2806ED0D4CA4A037022C585EE7789F8F253803D897EA6F0C40F07F04574AABCEC469CD98B7CF1B352857AE32DCDB2EDF8CC2E3594679B0969095CC4507DC3E9059CDE8AA2BF16FF730696FE75CB63555693C9E003B47E2902A05132745D5D48C0A36F101778C66EB9CA3287397E278BA4A3D1E80E5D7E1FA041344E2FF0D4795476B5D2098E39DDC7738F5B9A871E4D963483EB7286681A3DFAC38D5866BB95F2D6BC430FF11E395279DB711657023E2F4E542D9F39421910CA02ED7BC767B47A33D09696982FC6A0848F12F0A84BFBA1A0B42A0B55C3E3D98B05978B53BAA813130D18ADD76DB7EE8483A2D6B3410B08C7623C6B463E04D4D53BAB51F0A5A3F26B9E0BECF98C1067A21677C07822F5F730FCF5239D69D6D34B1D83EAE3409C4A9CB26B754F248271DFC775CF455372C61C6099F2D8172274EA4FA40D87759C2EF2F5F4B9086CA4A7DC6A5A2001A3B85076A6436AEDC3088E26AF74C98F185057E0781BBF8D52C0E4EB3C4A0D3E22CCA0A8E2D15FE75D87AAEA723A991D813A67D93E26B31289B46E21416A00EE86B785E0F470C2A3D0BEB18305915AE21D0E7D3C27C2D37A05C8FB808921D4E759A4D3139624BF2AC8D5CA8AEC0BA07D5A03E13BA45AC71AFCEAE9F2B55D0FE70AF8334245E716FBD6411800D6043F30D6699A81E1A902F8FB1DD23FC0D9443F05ABFFA7FD25B6F0D83701578C54E051055A5D2785941BEE2CED39E8FCAB9923B7C305FD23CDACD5C6F71E645517D0BF34DA56F7CC06175ED920CD1A6EB713200A212538690F481CBC4433B37BF7337C61EDF6D27FFAE8556941AAA5F43A5EB6110AE73E28E190AE0EC6E6A436312FA72D0AFFDD9EBAE433F60507F624BB7A5FC48C3AE853A8C146A332785666367A8B7F9FB5863AE75B09FC3194D890A3F724D6161B0C8D24E0F0F26BDAE711AE13BA8BCCA55F9AC3BBD9EE43CB3A451A13F9D53FBC4D503F91EC773022158FC66662A7B75A617FD1B9D030727F2D2505231C59D9223464AD713152FDD353AD500D605C38317FB5C6A9E052B95261BA6405389AEEA70855C0CB2870E97089D7F6A6231EAADC116AADFE3581D91B30B7EE22E1D8D91D812E641B7786C04C0BB4AB5A58F93DBC48493A51755B5CCDDDA373CDE4D71E2007F5BCC903215983BA847909739C8D80955C350208C61049F40272496D550E01397E8D817B91FEC0D15D61A28DBA51618FF3E8619AD9DE3CC3A9E35FC1777BB6189A1A50EF42CFF1EEB716C827F793D80AE55065671A29AF4BC1360C36F73D3281C690F7CF2E0F94245F9CE8A96CE53A99CB2302940D09BE86CF07CC7A37073382D2F560D733739FA9D99ED4D16FA5A81066F5AF01E17E757CFFBF9EF6CA9ECACC8128B0361B3ABDCE840C504C31497BA5E15933F18A1BBA1214CF2F019752CB5AE61F9000C85CAABA2252754936BA350A60C02B33EB418DA3572AF143CBB2E99D6BFD8856A88DBFD5329B11813E410A56B0D570EE39E262F902A82F890136E1AFEEDAC591904764CD5EF0676B7EF2A4317A484B994506E9A7FFD93550762975BAC0173C90992A9E938E6DEAC563D7F360AB7DA003248A1CBF3FD430672E21F87FAF0A1A91B305BA1F6AB46BF37BCBF70210B40AA22BEAEF8C878315C24E503B5AFAD8B9D2384F822AE8C3A7941F58F36C484B8298C39C409C32CDF2551CF8A90DF08DF6C4313799B0B781A4AA05D7631B73969C5404D00CB053B786B5EA67DBFA9C -MD = 4C052D375B07B3BE2BCBF54B29C0BD26C3BFD516AC264F4DE5E67BB9 -Len = 28823 -Msg = A1365022FE5CD31BBD0060B10A435AD0C1E2B2922D4E78E8D608D672EC50B8AB38989B5408C827ABBCD993548F6E20E577C92CDC85C3302600B93F14A021E3EAFEE8BA2E8F4F4D1EF9F92D8ED31D44B3DAB187FD169C3C549B127DC83EB2E1AB0FF618CD0A6C15D68CA5960FF5325D93538B8BC1E86D6E9203AEC5FC4E548F9221A8E782A0E822674C5F4F6766937A7C30AF426AD474C8E0B72E703B760E2BD1F48C88AFC356EA6E5B9E99D2B3AA7F8E921488762DD5E6838FF2ED0ACA9CF89E13AD90056576418913C2C091780F26D112BC115E7BF0134A346DFE527110F5045D75C230A3CAF129D442C0A5D8C134BCC72B89459C6AA0678C5784B2414921D4A0077B5982472E8803A11882628F548DBBA4B2D19F64FBC80684D47DD15F30A91AF5AF73A5BA109E3DA86A5B236E095E166DBC282062CAB36A27C03151E726B45361165E6A964808D33FEEFBF608A7C146969048E1879A612105CF68398B29E3A39F904B9D8A9C4417C97387053DE0910F34994F720E63BA04DAC44AE65C767DD930E04D0237AC0BF57EA4F1B6AF278C34AB5AD15EDFB9CFA9AB64C1B0E8A41247399A34A539F5967C37759F39C6FF647377F5303709A88E24289D41B8676F400B327D20C2131BC0F0A136F93FCAE5F535E698C7737B009F100F38DF8F1FEF1D457B352B781201B76BD67E54951D656C927DDB01274213B93F189D4FE7F1A3B05966874422B4D6A35FEEEF6CFB9EE4D7A9948C2EFBD9A7A0D87B06DAF17E7F2E4151C2FC221020902456362A9179AD0D999E41D30ED970F020E70ECB1C542462C0189F898656F451BC25C931BDC6A097AB6372AE64FACE0B2E626E27854080CDD0DC9E92B5B4A461467CE72BFD95FD7F785CFABD1C98D314BF0B3236669060A1B606792CB2EA7D5472AC18D3D4F6EC99E8578B587E43AE7A66DEF77991C6E5E0CD69B835488782726B1ACB3A321F4AC702ED58322E6D4CE3D8470CBEDB0D639FFB67A4B6A83963733BA0EBE2EF2090CA69DF885C55D5062B7D8FEF4FD2C53A4A30B513CAE5834E8EF0B50845EB52B12059767CE6F92869184951D3BEEDAAA6C8DFCCDA2C0D3641822E9DC042D8DAED22DE5E58782C0C97D8AC8665B20F59B1EB0E5D6E2A615D71BA13245B1C3CD8411B537060DE405BB0B3F8D523F55018B8B91240898C1500DB32D0D5507EF85A3B759C98924EF919B204FB25E9906333B554B5906868AAD80E88C7CF45735B8704CA3DEC085A5864E5DC22B61224920B86D62D779EA0C810EC4DC735BB1AC7CCC9726348D103893017FA82AC569D49B597D348564CD670B4C65499248882301D16883E1C6FDBA7065A74BA93D166B112F6615DB6C207EAC5C95969319E37AF4E4DD59CD4D17BD0AC2D448E1804D7930EE7EE8D6CB5B1884F3A093C8EE0ABDA728DD478783D5DA4C0B57F4D780371DB5E23CDE3916F3D2ED821F7A293A7682811D6E84BB72DB21842AE689756B52A2E43631CE68FFAA25C46A8CF3B654D2A196998C9B206C87CF5C0CD6B3CED738CD96AEED23F735000D2709B92CB512DC6204A0B3F67E74E9841B7F6FA2788C3255E723026FA2CEF30794A9CFD943073EC2DDAA44AFBDE1F2300539327EAC9DD141C7C097685A4055EB6BB47C37A8FC84846438D6DC4795B4CB002F34BF76C98B40C2DD20634F141E652379673651F85DCBE0D20658FD48363B2A54AC90E2F6DC6CE4F1DC06FADEC59A87B07B82676FDB54BC8B742AE90D1C4262A974DA2EBCCEDEA17229C7E28843A85979F0EE581D5BC549DBF041D7170F66FA496658F7D0E305F7D37F871E8852E2949A1380119F7EF83EA98266E882FE70BEFD0DB612EC35F12AB7AB63A8071CF27F2B04ED324922166DA597F4819A385A67D9DFEF3B3339CAF748257F3B990211113606A3C41A2C70068D0BBAE0C3A7349D06DBB1564AB52DDCDABDEA1AF0030EAD02522BE564B4FBFF8A7F465A626B64273D792B51A57D40CFF712555C7DD4A0044CF840E940CAD3CDA3561AD9B53D592C8814CF0B78E7ED21EA3F4DAFDAA61C0441054D8104784039A8EDC49A887830E244412F2F52736462D1566852E8C8BDCE3D582277FA8E2D336A6B6C43774283CAA872DFC311F3A082DFC376B8EA33367418D10F4C63A5911AD1BCFCB1A5EECF304071D9AE1CD61B2D4E26E98B7EEEF16BA689ED38E0A172137BAC121958420C05319222326F858A79F7E428FF472017AF04655E1B4B48F22BDCE217909FA8744D108E3C6970AFED32F61069367D6CE9CB51120C0C76DC1D4E00CDF74B6A2544528B8E951F9840CECAF5E37B2FB168EF73C34080DFE1C27F1EF5DF895B8F7FE671AEED65203770F9543B3FA948CDF755F2D10319D8E997FFF3606D25E41C30AA4209AC2070F5EA02D57367B115CF9D1F2F2A3E0769EB2814F20373952D11357CABF2A1D2B3F80E7C1676DC2CAF80FDBB9D7A770BCEDD60B216091B1079DDEA2B0B78C68BFD86F5A29789EDDFE0E27AD2DB7B610E883D5263DDF8AA4A0EF83D630DFCC98DE45D908A1879464D2C566777446C977F69D7D556F1BEFA2FD5657FFF919C950DE7E1000A0E92B979ABC128566C3CFABBE45AF2451877364A58EE4E0AAEF48BAF43DFEB9B549F62E3CCB7B5F72289895C156E62AD258ED75FF56F74E750BD37FE273BA25E48C63A6B0A8BD0FB137F37FF59CAC0B3C51424BEF02CFA59DA5961C90E0E25698B51B810902AE963A88EA3467E2561E1B5B4F984AA53734D2FAAB38E9476D8BA24A0A80EE01B04AC5128B44B9DEF2E46CAF7CD37BDF0ECB89BC67902BD2F9083ACA2D05562EF34275FF397E31ED92E99D429E0F981B0EE7822E1603663D9DACD017B5EAE77B539BBE04D92E416A3C4D62842C32E92F1567181729251342CEB57585113FD6F052CF5D609CD7BE3A732F7D993854539971F5D82BC6E11359AA2CCE5438C1892FD3C03B1EF7D2A1BEE6E2F08E35532D153BFF7781B4A811FAE5D139AE688BC3FED8FA90B8B4F5A29AF274F440A4331F6F10DD80D2E36328F0C9770C34EFC0C98E344DF7A344691358833DF9F69CFDC86C3CC690340431C9406AFD9EA6BEB674918B91BB870276037DC892BE256A2FEA211E0382E8242B2DB3A8ADC33CF078DD022539A9F1B87EBD12FA9D2BCD0DF8220B40AE125762A79EB7D6A18F2C611DF933F3ED2DD8D03A4C0212E475E42B932A7AB0FD192A325F0F01A7809F76EA804ADE75EE91E28643A067DA95971A29EBE2440CBECE501559B02365297319C6B8D7AE77ECF46F91987B1D50341F05AA9A9A29A776F89B53144F68ADAF31C9FDEC036F0FCAC3F6C57B4D07BD9E39CE82E112690604F8CACD87C7AFBCF67ABA39A1CC9E63E90A70031DFDC7F16F4609CB18E3EDB8A7F0DC238F8C851C5EAE1F826877A5FEA00BB69C98F358167609EC374F249A0C46C322992015762B0AEE3ABE44A3A1E2F9693624C7DEBFE394CB674C3912D7FEFB0532018F8ECA9C2AA382248755B85C3302A58394DA3CEE2C68DB7004297F67DCFAD8CEF3BC1B065D7EB2D43CB36680BDCDDCBC3BB288359BDE0D0E237E620225390EA8538D8E154A316BFA8A63B36DAE368459B633EBA8D1FCE8DE24A3D8238E9246124B664D5FF13439EDE085C29EA789E857D74B67AEDE9F23DF8070E086833D940C0B3289DEBA55D4627DA184D20BC5DA45728EB1969FDAD7BED5EE6005D8A0AC6AC5C3709796244B24ACC796D0034B187B51AFA4A56D247D275E8217AE583684B9D5AE9514A139B960E02AACF946F1598D833F4A64C86DB7181F7A5CA3814F60001EA1239EABC9530CD481ED0FE0A6D1807FB2A9DE6657F96F0CB15E69BB884E92EF2052E25C1499FC49A5955CA8BEF3CE97943056BB0AD9CF507C2F5E93F52C7FE7CB4EA5AB460D1226069E09BEEF72CEB758B5D463279C228EDA9C375F3FE4943DC2FA44F03B128DB7E388003D0F2F031E1681671E39A034DAB558BC9890945ECEB2DE84F069B7ED7F7B2079024C0F9B4BDF7958F068C31FB13302FAD6D6CF7B05C7E4E0059448C8FFDE1646CB86BB0C1B8E6562D7B8773A9C361C16D309A566FCB978B0E5A4C1BE184D0A1CA91DF274D5386CD47A4557ECD7EA9ED0E3432DB1106F5CD0057BC00AF018CB8637F33D6CC4683D33B94452D96E5F8C9FA4986B08FC28DE70BD832DE43DFEC836EC903300BDDEFB0E7C6CAD572F7BAAC5342B0EFA7C5A0A29369792558B80C0D8805C72998E865204032E2ACEFF809B1AAD67FB15AF01553E51675E2F44272614FB3C0C5C78382B8B113EAEDE722534850E00F1A1171AFF1B592597DF6E3E1084EC6F1E3EA174A6F2DA470876CE89F54D1CE24AD053C8A005598845D1DA35F09446E760ABB893256B25E75C4D6F9D78A9CDE8531C379A8452D69E9E6B674E55BF2BD698D24B9C1E5C88A74157FFF02E38C0948C7217A8BFC41D643C242E81AD8C96A1263BA77C688023BFAC88E06E471CF05232980B21D4CA88EB7DEDB4E5F9A7FAC8C6247DBEC4AEB0E439BB42EBDB7AC9EB4906789F8F03542E00B5E9B700EF7CFC822E8E25CBB98CFDE6AD99CECFD96835D4FABA373ED709DD6129DBE9EAF3712EC50AFF8FF4F7ADADF2C31E27FA0676453C3736CE869D29051CD1DA78FA5EB7C49A2DE4421396BE80C11AFABC93BDADB04E7536D6FD2291715E76D9E194C2B90BC6D4B16FBA2BB80C1CD3B4BC6708AD08E79C5C4F6DBFAA53ABC0220D566EDDFEA9E775DD5C0B5C1AC3FB4AA16CEDB5325E255EFF4DF69C68FD51A00B89C09770EC5ACC5B90A21E82679D00938DA8F55D089F2B92E2CCA4CF6F1DC59940BBD349D6CA00A1607A3857B51F505B0C3BC43727712E491EECCFBCCDDE549D05A38E6005EC8D332925FEC05E8AA96673B2DF8CD9C397019FC05C1798F0A6A32FDEE3DD175957AE54FE1064463E1004C93A610EC385ACBBCAFF4372986D002EC905419BFB5D3E2FF7BC81329A6EA0A0574CCBD276637B74852E49843E69C0F428C9FEA496AEF5B280BE26EFC47666ECFCF0A323654219D09CC210A1FF6AF096DA5728F281921FC3D579E2882309B26AD33C8AD351D90E3CE8ACEB4DD8FB6C20A6B93F3F283B4CFE332A6ACB2C6F45E177CA -MD = CD490672B4CA119DB252F71C4FAD3C53337373EA8DF441A35AEEDA41 -Len = 28886 -Msg = A59C39A0C2828599BE5183CAA1B0AF10EDDBB5C2CA95AC2245114A6B1EA4AC0BDD9D088AA3C0DF73589E6A314FEB45EA7FA9C0845D1F7A0C47E1B79E1286B2476E839EAF8F787B2C9A2D156AA52299EE0B4631BBDDC25DDE8C9D7438D6EF37F1639602DE6A20C11345DB3A14E66EAEDE9FE309DD62B3B6E39E5FD712FDCDBB460934A3DEA50368888B5CE9D4CD6629E59AF42FE141479C8F6D10A74817347CDB3DF8943B4BA65C4DD63FA859A120500E7512F0B6934A87B3A23CA80BD8B9C21967E9ECAB9580252995D432509B5E07586A0067FBA14791DA0B76D9F2E4DB23A7174D4E4F501F179BC9287866372BB3191A6D90A6902EAC01E6261C0A9C8D00C8FE5C6EAA4CD5B4026202CDD51963E6DA11E1993098D7ABAA854AA7978B2A8AEF93EA9A2ABC246797C1A70CF7B28255622A3899B6867D1F1514BFDB43C82F2763F3EE17EA0E4D69154C685ED6BADE53AE9D2914984D2C3045FADE52E9D0D6B21DC7BD8AEC3A28D7A015FC1F431251CB89BDF1C12919071FABE93891CEB2D370F5945B9A65948ACF76E17815C0557EB7F1F2498DA24730C17D30F965F4E0ECABC2EC1E379450C0E7E91ED1C213FDE317CF330C2DA085A840706EE60D0D8B5986AAEA7E649C3B5FD3D0DC343B4C7D79823CE02854855C0ECB638A850F77612129D87431EC9FF2BB01C34E0D82768BBEDC5DEE2FFEE2AE6B27D6BA35F025468FCE0C6F6869AE2262DA0CBEE3467EDBC1A687A98C076CF26D361039C673BFBD6C580E4814B9F5A791D1170735A00AECCCB41505BF75D22BA99C8C4333FE9D2EB9AE813AA6A3F31684399A5064EDA476530F3087B7FB6D04F440F9DF77D0E8E6818512BE154030F2B1487FD1BB9877A811D142B79D4CD6E81D919A6EFF4FD18ABF54411B4CDC3E6D9C3058C7081C259AE8F286248C3C5AF289964DF1CB501BA48B9114937A8BE185AECDACB2A1ECF2B484A7C28D606B4C588C24BA22D7BCF04D2E5E637E2585410759AB04FE2301667B44F836A7E0C1B2C8483C90B9566216CFEA370C49F106645419F513F101549DC248B13F5D24E8FD441BD9AD6BA4601C7BA29B16B01C9A8572CD8E38E60BDEA57D4882D7ACFA78BE3CE91364D025D9C7DD020ABAC5DCF2E20CFA53D292B39CCDF61CA91A367D49D6E4BF5B184E01D86E6550291EE0AB87895461E4990221E048935C39CEED8862A2F5400E491AC72248EA8F9DB3AA673DB3221ABDB10B08A610FEB6FBD6B59F92C4E0FECB78356E0939EF3CA1A5931843D9686348AF160416DB6336C7A765ABDFDD363B4172E25558FAB90ED0859ED2846DF54FC4FAD24F94B1B2A64BB5EA6D19442AC7B70A1F6403361132C861619864BC13A56B97CF13E58FCBCDF2F209611CCD259FA1CDFD9B252FFF6CB9196137062D53E69C60FD2756E5A3C791EABCAB36637E37318A14F383E8147FA537A58E49CA3BBA874776AEBA8B3DD83B9C9A033FC1BF4F5C90AC0EC9F4FFE091EDF0470A081A774D096952F1E95DF0F989550A69D050FF2CDCADB1D9D5964DE9B0916977B9D6EF23132E553B4D1A310E4099B2E435176699049262CDDECB1B3FF7DB3A4B18DFEDB214EF7B32A900292C72B5DB7D4030DF2C43C8758957E642BED29AEC5754C387F7F3DB7B2E5C057D48CC1299738DA423E0D6ECCFAE89DE5DEACF5559016D46FD6287626C8835FC256649D63B1297049827C9ED0C63209925DD02478E69A25E36414A290BB5F18B2950EF55D79D8678EBE70E03EADD6AA601DD5FAD7824A0D490CB4ADB97E31B7267A4CDA241714473A7F51FAEF62F79DBF326B06DB47571A909F56218AC602BD4F166BB24820B28336EF334ACDBE4717CD266DC2FF936DDD0527E8B41470EEBF676736DBD9BE65C46F22D4CF5462EF6A5A0D86AD35476F0F0C9D1E02BA1A4CB7C81AF4B44FBCCD7CA5B78A8CAF744950D0190187B25910995E2C41D7255B3D82F91B5D005BC22A4E69D2023AD5483C95509961E96B02E9C7321FB558AAED79216F70792D8C8B48D8D3203F8E77B71FECC3ADBE02BF1540B49A94C01431E86E5675AF6F52C5DBF677B27FC3C6135F091696783166BE4F4F4740A039E5CD56EF66FA079A482D57DF977A6B23C71D993D6CCCC65F123B48023CB313526A4389F62106ABBEDD129E8D86B42CABC216652AA57B54981A949209ED94FC29195936CEA138B85053F72946ACAA866AF840056E9C7984F8901BF842E49411628D7DC6888118EF52EC361ECFE6083DAAC2B4128E1F71584638A03E38687514285EB1EA349B93C90EB4E8561E3FF9F66B73798994B5732C9731D4FDC92AF204C2871FBDB594E08E6921DAB151601379C634E7D17AED22BB7AD2868CC82747A46746FD535C801989D27C528246BBCCC43647EDE8EE75B32F396600D2EB221F156B75E5FD048D1F8C7108CF367C91A402437BA366C720E47D9CC58FF8D91960C4B45EBAE0A20C15412967B9B7C939691EAB6AF04B0FD5F3CB1E49853E53ECD1B88EA58197727E4D77B6C958BA5E45AED0032B7CEC6E1FCFABA246CE7EA051B1A7C5BC7AC32B08C3CC2CA9FE467D663FAE976C80FCE0324A677B09B361166632152B3CEFACF926E9D7A2F8099BA0E4643AEC9DF730B1CB6E99237B927AB3AEF1762CDEC1439C78965088631DE715348E27E7FC8E4BCE80A0B35855DE3CDA6CEBF18634A484A5C0F0EE76ADD116AE645B3B8A909B87F9B38767ABB0DFBE316BF3F3FDDD5F8EE88153311C2CA5C96A6821E0BEB6BC9215533B45E667AEFA85711DEAC872243EFD99855007237BA072E85E3D2B5AFBE793FA4FFD4086DBCFE97CFC3B33ADAFE1812EB38BCE6184C5DAC507A477F8A87D60DF001C8DD295269A9507301A0F7875A3CC13344196960090D2671BEEBCB94FE2E971381968A2290938BDD4F9A7EB476AE187C51A44EC21BC2BC63856B434F35F096B5C22611C89714D347377ABC46F9F432F43500A04FD2BE355C5F9431717D77BA5079641AFF322EAC3A837788FCD85E4D1ECF5E37D4054E365DE25A4816E337B1046313388580C2E07C81E3043018FE4AED833AFB294DEEF63AB7CC676429ADC4CFDBB03CEBDC8F113B9DAD05BDBF7C3D10EFEE9AACD745D7C277E5D7B621A19AF518F2BA407AD7B1FB54C726EEA8FC2E76E0EC29909C4BE3614E4D6CBF53D26E799061B9F693EE02C0676FF29EBDE55AAAC3D34783C9B5B7095396415056E7081BF1D8F56B912B2A2F290421DEFEEC121A24B2CE0DDDD9E4A4D106B7D17E08DCDD75DCAB2D5560B828112814B7F3EA7CD8C4856B8720A3A48D28BB8F7EAEAA1FDD12F7737E55336DBA875C1B61985AC7323BC4351A6372CF29979F91B36558253478377D6A0BE009E0811E8ECA39D4FFD3CC104F489BA414013E42648F27BBEE6A3E205DF5E3F09E0AFF0937E4ABFB5C84F983F588D92C6C461AB46312F5AC911FCDB399A0DE9A4EE5969A260115925702F499910DAF22CAB34433C38A67A90FB4AE1AB892D069C9F4E193E104027D2029496A44A5116E107CB99D0312AD5E91BD2C5E956163222D2CCC6EA734B46BCABD81C9D0BF6C0CC737A07B23CF2F681A8CB68B6A257564875C4F49DCEE68F6168DB13F717FE37453309152CEA1B55C6886AD9960A83C8058E42C7A85E981041EA5D3294558D5D6268AF3CB33AFC9A7BA94D66214F2CA4A85BE600AC5665BBD91561BA3EDE799A5B4B422C884ACB582D7700687D52282B9B8D3CD1B968C818662D1544498BB48354E3C4CF429DF2BCE0FF4E8018F1E3DE7A2F47E5FE474FB5D2854B314D149470EA0849A22F0E35F057C73E23BFDF8CC772B18684F33720CB22BBE7C6B944C9A647E7BD128B28EAA1DCAB818BE03F83D82BDD31F19D257B4D1C8C09A131119BFDFEF878EEF00C28D576B82223F888ABBE1112A894528E4DE1B3035A4AFD85F4734FF5F839BD209E51AF54FAD5B9A0F2C0F3335204B1BBD3F8E4EF3A4B6270F0AD476FF67984329FB5B302A8CD427D015BBA2C0BF984BBF6DACCC244F23FCBBFB5FC72171B5988BC03FFBDC2F6AA6112857D7BAEC6D33BF9625FB826A50FFD0A00AD392AC0E98E804C20F20D74F0AFCFDD589FDA05837BD23F2A5EF013EFEDA757C47EEA45B77CECABD63C9B43A68B3FA990FF791421AD4D8FB9483166199D41268C1B9A1DDB88DE1761BD0748B17F59E4B281CDA8F207E7B7DF395BB8E1C6BAA8BF832E17C4B58207823037DBAC064E722712F3E91159DFD271D950C669B5E75CA684C71BE5F562186529EEE36C9F844AF67B7BFF6AAAF10E665C07C3D7338A32BA8A5BB45449D3E5293714ECB4EE544C223924922C73269879AC8BCD587B724DA30BA3A972E3321DC61A94F0F2F287FEFA6F5EFE73FE3468C4BF7D550A9E69FD490AA3FA79EF7A87A62934BC3E69EA59EE46170C4B042DF706FBB3F82A0F1A1E148162552158F834268A409603AFBB414E7B4D94577D084F8C87286B73E9366D477D692D7B6C93D7E099A00CFE281A660615FDA0F92F773A7C81C38BF05B34B5E36B4184669887845AFDAB2B101C08B603CEBCC70F844DE0C9334B17028A85A879B740EE3612DC37C498F00E4F4239B05556F844F5CC61C29B40EF4392DDCBDDD639D4969B3F06AD809245E9591AE241C0FD6896F429D6A0173FB52B4876E13ABBFB5A286BCD6235561AFFC3760C38F244CC658E5C0D1C21B9AC1A61267C8A76C77B30F53D0D3ADFC5D3FA3207146FA61C45F41D7C3F76A61AE244E1C6AE2FB5585A168D2DABEBE4F1285C00892BD1FFE9FEECFB55339F11A6ADD839FD350AF94FB5E456601EE21DD92DE720B1C5FE5FF94089BC4F21E57F22BB4C657E5B692F1E3BD9462A935D25867FF521D2B41E79EA538BA3168EB4BDE2D10FFEBA4684B44683E3323ECCEC162CBB946988ADDBB455C70000B2703B15195534ADE54F9C23FA3AB51076C472E23249B0D627A2E110F0BD84DADFF72BA347BABDB25C24B5029D8DA1B205CAAB428AAC7169FA25B237DE89CBAA2FC9DCED93D57AA47962B9A08CF8AACEF31F8640AE4B6E0271F32CE0AC83E9D183127CA04D84E43BC71888DAA781E018385AA4849A7A708E7131E82A5733816B662DCE57D357A1773CDAB3C929E2531D1E3BA54 -MD = 7430E9DDD7DD92C08F89506170BA3FEC5FFE7F86A47E2DC18F102655 -Len = 28949 -Msg = 3868794229A26A5A3B77934801B3066D3AE862C124404AE58A692519496DCF3BE6EE4AB1F2398D8E3633EB496F3CB4E652628CDBE0CF561723D2044101689A681F08384E5D648F6B7F475AC7AB5831C73C9E768B9D4528567BE1169AD9B0BD3038E072189EF449495308BF42B40AD5226FF7A26373336CC088030516B498C644D26AF7B3F7AF1863DD10135AF0296B37510CE5FCEA2C4CFEC2F948FCF778EE3DB4663B72F2994C22EB06C4EF2816714D709852256A7F74C7905BD74812714E1F02BE94B68383D60AD1D6C6999D0A10892165A29799D30C8D759407B2C9816EFAEF36E57843E2FDBF18357434FA5044A0DB299A6A8FBCB95E2FC2DB4FAC45A6B304A910D1E94C2D2042D05A808D400EC24CAF795049E96D7455100BD463A6C9777E250A8E6FF377EE7DBCDA5FFC0DFE9D8B958AA64A23913496A6A16C846DE43D1ED509297BDE71FEB35148468A6F8EC99E6927D11A44A0060C84A20B8883A7DEB40335447FAFAA620554DF8C3E9720835C078E6CF45820321C04FFE1EE721EDD0A762D5E6BA1E174F25D3CF6A11A4FBFD027EFCD3FD0B7E8911D8C20828CD7B589A332529B42F61BF6111A82C043E1D44CA9388903BE64F114057A59E8F5B4EBFAE7C60549AFEDA3FED9D77F77199C527755EA758215BA255B9DF9E3CD4359FAF563F034A51B149C6ADCFFDFCFB5E656BEAAEDA993528E1DEA19430E279D9C03BE55F353319B6DDD4E81DF2C3BA7C5F550F01DBC4F7EC9D5C2AA0259469D866D4AEF485B201DAE87C553F52C569B27D9DED391620BDA7DD0739BC6B01C0BE6C1BFA70F5BEA194692910E975E064F403EB1C3FF0D739470752375ED632CAF28CF383B793C8B20265FE7E0AF992106E70495CF6789A72A3FCCB646F8D51D7A63E75F818CE7FEED11B7B4B4688788A4EA63654836D30C914B27B0E926F4FC564E88761F73B960C4B4BB6995B4F963B444AAAB32521BA75EA050DA8FC20AE0F8402AAE9D7A02C8AB8C24921112006A8C377A8A3172169282FCDB6121FAF250832AA3486ED14BFACA4CC14B8245B7771E998B89CE47B60A2E7E36D2388196118165E15508D24DEAA7E5396BDDF732D0078BDC46BA7F1D6CA655F1248CE2C2A93272FF7BE27EB087E9BA7F9E802709B4E30573AC4B0E2A3A58EBE62A3B9986CA1C449E2ED00E2BA4D7B56135DADD9B739137FE6B8840DCAC0129300C218C06F01EF67B17BBFA6E69C72A07703379CE4FA6FE88C25C48C0C4F7614A3E6080027224E16C586FDC31B61339A109D40517E2412B8EAE1F3D1885DBA4246E2DD005F8F31BB441C6D587250CFE820F91F0578B0967D1A956FF1B9647F5AED541CE404B6235CBE75586DAB13AA1B1622B6B880CF38F139AAA9F8259136088F8654464A4BA8EFD324F90B1FACE544FA912F971F4D00D1D9FC3D19A7607B784DACA44EDFBB6D70F3E9EF1F9E651CC1CC77AF33B17AE1D134F3EFB1D71BC83DB5B79EF5294C774022F6CB1DB6FA0FD2D686C8A322C427F08236FCAFEDD4ACCC565CBD528E17305C06C10A7081AEA5C6F002DACD59737125DCB91B2CF5301BB1DFAC20509DF3BE93F26A71F69B68B565619D13F29E3EFBDB9A6529E3BDEFEAC2E92AF987BB273BA2AEC4626CBFB908A86CBE6F335A0B2D59B301327A2E400C9A09A4949F2CB4FD3A687A1441382AED16E89C0597FBCAD4937F02237CD4622CE9372E5DDB7808E4A208771D4FB118325823EDD7AF57000417C25721120F3ED5B01BC2534D28960F848A5CD0FDCCC561149D29E604B5C469B24F9CE3CE1EAE35B7987842FDF8B0026196A5C6BC579BE1282CCC840861EB04ADE80B6FE5CEC18470A8D38455183875652B908004C7FC423F6D9FB335D99FC5D9F926A4A54B8531F725C2C57796C1921852004A00BD4E9793AC644A34A5C59ABD24C5F7644FEE45BE09D09447EBBDC95BD356060C957003D4372168121DDCA80C6194AD69E5EAFF3D1F8AF308FD053124A630CFE2504A9A0FB393DDA2B193C64A80C93F695D9E58E089757E73CD824DA92A5CEBCE67F1E10839934143927830A423230AD97066F9FF3C729B91141BC21459AF1EC1C46388A36F62779C1F0C5F4FAD9902BC50C51BBAB808EF48E9B878DE7BE8E276B8FE0163BB90963BE378C79EF30565B58023B14E99DCE20C733E6514E5C215946304217CBF3580B87B32A1A6935FCA71AAECD3682C4951BF76D5DB5C461663E1A806C78C0A721ABF2C37ECC8C77C48E8C37844B194DE6DC0C8BDDF2DDF3608F787BD2F005BD128BB4D0CB81CF70338D31C5043403C0DF08EA37A2F35068C42023F958839C2E4F3A5E6D5DC467220E330BC018FB601B95990890FD4F568EE21C46988B2F71E89F69C98B185641687ACA09F017194BC82FBFBB35176C562F435414C0A20E509E9D80D330052451414D14568CCC9C4B8D5E2AC1665AB298F2E5CE8E0F19756CFCC7BADC49F6822C466EA561BC52BACEA98683C9B0447163522FA3AF6F65B79B416533EAA9FA78ED529C9F0B737526ACBEF2F1B9387F7CA9EE0937E87EB812854B2599C5D062AC758C3A03289169AEF0707745028F039FE21986FFA0974CC440359AFD2CF448C64F3D9E922595A419C88D17533F95113C10AC238F6FB2FFAA4B3BD4CDF390179F5D11F236E6E04294A5AA472130DF652E0449F8A6845C3B72E44D33001232B6A0A87D52E5AFB216DAB3B288B3D07D860092D8ED75CF5D70EDE670679FD2E323E973E0E2E4E4C146895043831CAD51000DD15D70487A590EFF511571B1FB5EB5B3173A370A7440B02AD25FBE09B5CB4C062B997AD937C8661E68203AE0B04CC78535217068F5F824BDDF05CE65477DA1B909AC56F0257C3972AC38D2CD8459E67404CB0ECD88EFAFA1B2CBAF37A653CDBB3A083AC64E29235095CC6DE5C3607EFBAF4A6C8566E7BF7C6D6741B8DA260AD46040B0D7AC10132B408BCEE88F86C04E0FA93CADB08F54C6604A5ED9020EFB32D326903778075A4B43A4E5D818B6ADD6B09482BD4B124C7DE8F29CE734DECA2FDAA34F454F32FBA7B321B0879FF7BD7C6D44D125A43828065AE854FA080716D13F296BC366B8A3A236B7234AC970A105F107FBAFEEABF870C44EF8B14186F3BE03A3296D7036D8FF83D79C48611B616DB7D944DE63A99C9CE75BB349559569FD862F4469368FBAB60111E03FDEC001DC0A9752A0CE98B5C02B5B38AAEC7BA6C503581C139C93E5705B404F058884FB0025B1E9BC45454C156219EC8F869E6E484FDB59B04A46E20453B2D16F6055EB9BDE9438E44FB2FBE6D7152033372D5B0EB63D62C699E9553FBF6BDF0A31EAA60BC68B43C061768C53B2F8919A85A1111641A2B0B3902F0363A4BC52EBC11357330F9C21C78C0B5BB10AB06B9DC7B2B2FDB19CF91EC6CF1F5ADE74ED5C6ACE7BC601FA2CFA5233DFD395FAB8AAE9FA24496500D04F71E3DDDD54F2520AE176EFB968A164F221AFF7D5BA73ECD7FBC271F7E5395CB5F66F6C2C9E9BB6C3452742692C14157D51F2B647D1B0B149F0D2FB61BFEA145AEFD21AB5C792642BCE6BC7B2046DEF150C5E9507FC2D9EFE9C852524B7C2B010018134C4CADBA5B907A17AC3D32E0853CF32BF43A61F409AE8546BF124A8F42145E61DCA80676BA03A2A77A0DA6379A3A8E2B5E99FC944CBD9BC8456AD0834AA077F83F832EDAB3F57D635F5E385831EC51EA811102F583C8CC702A0D1559E621F01D965513C8B6B84696EE4C2CD60B27522BE56FCFD79F2B19ABAB61B002AD69630279404FFBD563D3D69703FCA6CF8B261AA1A909411C51F37591AB72448E68AC3F86600E473DBC037E6236A0CF4375C4F7CF09E9B23FA613BBE341155AE352E3841D5BCFCDD2B4EC88BAF8B4B660F9D3477F7584E119B05780CB01B9E75666715B8425245D1E106844ABB3C1862473A7EC0799355D10374B2A972F2C8A022176C523115500E1ADA6F17A6A8AC3D525BF2F124FE5D6B82A67AB317CC6B3D5ACC57E42ABDBEBB9FE14CE84437ADA2B40BF5E50676717A62D1ADF15020E3824302167891B816EE6CAADE0542C4CFFB01070B2FEFFF5CC1038DBDB420B855A021A2BE82F6F0DD78F177CA586FE9CD7F87A0FFCB57B9852126FEBE0AA38F0FEC4AE1CDE1B2ED91AF4A599F3E21E38CCC8AB514339DD9E401BAC642CF7EB0E8461A03D38326B9F3AE29949F12266A7694E3E7F5E81D7938825DA71BFDEE7E932A1FDADA6F7D83ED4B99A3F2D62AC48660D3E47E8AF4FF491DDDF023A6CA915AC37DDF5780B9FDD3B33D1B6CA30257C9EDD23D621AFB0B01F02693EC02E7FFED38520E84B1DB9A818306A836E4A6DAECCDF072727570FDDA5A9924DCBCE8CD770A5579280E6D53F3C1BA1BA05650991B97F3D6E598CB910BAEC63D03BE17FD88A6D1C9857E6FBC168A9DB040B8B17C649073334820303FFBBAE7E45FEA963FF75C4A7425D5CF91072DBA0935390A3E3081CF2DA87E3EBF2944566C34B296F0080465564EEAE7F3B4E196707BEAAF413B408A13BCD32DECCBD9FBC7FBDFEBD650710610E8055F13DDE0B5033819D022691B5A2FBBE0A01EF2998E411ACDAA0353E7C46E1296B9DA36EC9500D040815D737E8E5203A8A1385A2D94E7F5B413B1D2FCB34E48011612AF861306D7C72482E20A59EEFF8DB7C98389B7C23A2020747D72F05C8056BC0CB674D323BB7BEEB50DDAB68F9555EFA256EA7E16C4DF92FAFF1F1463D457005ABCC0FC7A6E03CCF287F95DAF88D046BE84E4784808E2AE5588406D46BA4C4B209AD35B19AA14A239B06D5B164DA858198993226439D34997FC490E531840A9FA37B8E425C25B0B2878882407D1E8546B023B0F9D432B256A7FC6727C2FAB3B5B0DBCDA465ED10EBBB6E9DE837C19B21A0AE952FE1795F21BEFAF2B550F24DCC1E1AD8DB1427D61EFE7176E99D7350297BA9F446C9E1C2630543BB03AC2401DDDF740912BC55D95CAF671F55F60CDD5519CAC5AFB7D7D55001B97105E0C2D433C1644CE9DCD56CE75F604EB042E030880DF9E436218274351180924E18B5D7B430E334AB444422B87742D56DFB992158135DDF6286B977AE2F005FD45E82189E8FE980DF4E4B0CB6D1264824825533654B3FC4202C73DE27E3DFC08 -MD = 0678D2E575D33193FC1FC3261CA5BB26A728803CCC6BBCB1E2368A75 -Len = 29012 -Msg = DC89EBD10CC96F92620BB9F47F41D52C9ED263F4688CCDC70A5D070342FE6242798FAE32615205B449AE854AA30995F970EE29C40F1D82D1B59A309E4CD85686C20776A12A1B8BCC1F7F6AB4191662D4402FA9DC23AAF1399F548A2B43A28B80351062F9C1CC75F3E9036A095DBE89F0763736240C6A966F24506A9991254265E3CB4B793419E74AF320FBA7B1038B647DE1820DF575121D1BD78B9D94E290D5110449C408C8D1D9BF677CDD6372BF0D13649179A706B6868F168BA8B941B74203183D758F6B8F198756EDE5D58222DA435B80B95164E11518A8A95B76EEB5E2A96F5BA36DF6766207CC454929C19B8C624730A1705DBD7A486FAAD66CB25419D21926C429BB34D4DD565A6555BB373BAF33550D2E1222EAD1798406A80EF5542FE8DBF8646875AEEF71F6688D1F98CC716D75E8127022E0E2DB2570A6C34D8833816E56D0E44E439775EE663E7D68A0EDB624DC430CCFC4018E154CA046C0F073B75C1758D376250A46235A23348BA7BC0F5D7019070811707B81ED59DCB9293958AEF73AC58D07484FDEF3FD5EB2452D3D16F57D122A2F1AEC68DFC4964F7A7F872D6B1E9B7BEEDE5A4DCDD609C6380C8C20045278B93F73B34CB3F95F0DC435B49B66D6D0F09B2B77462F6B80CCF1B74F642CA4CD9EF77A00B54CB2D5D06BDC01053E60B06EFC9423901E7B62304E4FC1B18DA7D0ED61848D8725D0B5A88278F209EBB98CFCAD323FCABB8B77061CFE5998D5699C0C5F9630CF0678C639112CE3743D2F9C119E7872AF10764C33A953363B56088B2627C3EB18C56A7628FD8184AF4C5E77DAF85AEC57D75359C15E056D6C4422B9A40B1E9C98A13B27DB43ED00D69F6D9C9D3E2D7955F7B6A89AEB70BCE1711EC3000FC539535506BF38A219D1C9690E0D523CAA1F9F4746322761500BBC1E333E4D4D90725B382C3D1292D358D6EE5863603422B551F87838962090AD245281034D8177CF57D2352D6DC561B58ED203C7B071901BF31F68BFACA45F4C53ED9A5A4DE254204A364D910E4F53ED9A02D7BBB9675C3BE79F0B8C812C58E243B6D1B20C913A5E044900BE477522FB615D3CCDD5F6720F22FA5E5CAA9BBEA14CCD182A37366A44698725A44A47B083BC4A92D21EF30DCEFE2917B8A82EE7AEF23E86EB6813B274C162C51A4713B09EBEDA3EB0B2F46F42BCF359AFB6DE6FCD73879E9694505DA81C597B2E1846E4DC9B47C4B31DF7952038A14378AE423784F094E1E07257E2997B2CF5AE29C940FAA894D6942A424176A20B264E5B523B4295B69820047B362914B84301DB1C85D6B0B4A0D84D277C18CAB2BEBB51678B259BE272CEB86C1ED9E635730229714ECA6D64C5F29BFA07E6FC21A5452E4156564A42BA7CFF37ECA23F06FC6DAEC601246661BA3F5633D66C1D6E366A8419DB26254F6E926EBB9C72CBFC64FF65111C4FDEA458B90C9E7E7B32E0BC3A3778E3D71FABB191F0D025A4F33022F233D81AB807C89A68462619D845FD2D7A3DB1B87ADD7AC6AC29FE2ABB586F75960C01FCF429F778B2681B583F449381CBCE9E9A1BCE351D549EBE650AD1B9E177426121747B463DD7025F785E3A6825867FF527F94B1F53AB4DE98C7620719D008CA11B148D492F7C911BA059DAC410EA0F44595A5584E02D3FE4241F45458290D5E858E59FFE352CB89312252BB0DB8C5D161796EB05B919E1EE8C1BE5610AE2D1C53D9D2187DA7523B8626AD632BD70C830B987DE0E790B9E05DD4964FE09D7DDD0D57D3FDB0C3A8920233392DA4E2E3F44C4DF72D8F33B260ED0982D8322AD2B02A62084F35B0FE2C4B10B7A62F758C313E5CEF1EFF52B00728D991A640941FCDE9731F044BD99647BFFEB2520696D050070E327BE68E58E356A9C4C088A69F91201F1EA9EB1A934AFBCA949BC952711DB2105EE2FAD0822F70C244D651B9BF7D57D55E6AE629D4CD931A94954B38A82EF76691DEBADA5FDBFE73D198271E6EEE7724B1B4938A9A73540BAC781A0B70E22A536814BF3D556946EA083D90D03FF04D49CEF108941639C250621993AB44A56F709B6A9CEC36C8B59B1CFEB90673AF2FBA101291CDD5C4D0EA573B32021FC324846214BD95F2BED9DADB70518DFCA89F23BE1FE62EB9B72BF3FDF52A477F163AEECCF1248D83411CA43A4790C90822C54B5D9592C2734776C4FB00E6EAE42658F2DA118D43DB303B3B3E1C10D7C747F5E7AE807DEFFD8D69625DF3F15F8DD9BA429D201B237A41FF2D6DA6E45C09542948580AF96B80E9C5E23DED3B3C2216E74E9B797CD35798E8739DC8E380BFA9466FCC07E6D57443FD41EBC8807D713716A7A247877FBC519737A573E11BDEDD9E04175CF0618171CE0C0F5030FA2FDC2C39BCE526043FBDEE53E80852FB855220C1EB04578FC8A28313D9E57023B832CF8FC96EBB0B8B33604ACB71496F95F3F764F435085E8FA2CECD2B5EADF0F7680577F24C8460210757968951DDCCADCBC005BA49B831E9778A0EC4F38C87C72F20F8EE54B063FA94FD2DA40365CB2521F6D4A954EEFBA7AA2B1915D3967D25EE97C71E74B536CA1D1C479FE60B2BECA874DB576F9897E4833666B26EBC0F1EFCF74B126640E7DCAF5E322288934EE0EA2C35B1489F339F759008650462D8E2EF436FF06FCB55FE08A77D38CC9289D104B0D5D7E4BB0D338D9CD28934E6C7766618FF7126ED163AB5F37029A1A4D6379959F9AD16642CAAA510F6EDC5875295BD8C3AB665D5DFE275D2243592C3650646B45A4FD81B59E8DE5DAA78FFB3534DD9CBF8FF776DDCFF95F067D2F09F5B39015C5C7C8FEEB6B5D29E21341903BB24F7299A96D4052B186CED7896BCC3887B8F9BF48D25D9836AF73AC8C999D44D84CDA5D318DE125DE4DD1252C4FDD276FE4049117AE8542131B2511E4C1B23786A6DC5656760B1D1D19A15F079AF994B0D58AE80380CBEA7356132F51442BE6A7A679CA81EDAFDDE96DADE225690B3E23AC37676350926414AEBDA6A25F3C9BA8CF10E224A2DE57BFF5271E6E7A7BF9CF612931BA18C409083568FE7EABA5A37E2095D2BFAFFDA9E48593BFF23A0DEFADD66CEE7B9FEBCEA3D82228739E4C45C7EDD307F290FA45E5527D4EF2BEBEDC4D818C5BA9C1B394DD0B7D8393C9599551CD04F7145FC243003C4139D28D911E69EE93F93A615FCA16F96CE13413B11300E9EAD4AB89EB9088E20D9D7DDC980D1E725A5A58A4874CBD4A9391A90B0068B64CB4AF18C968CF6DF4AB3B301DB3571BD844935EB48132C68EAAC88DD47094D45F69C3DA20C19824D01B32F6856747212AE0FCFC7AF1BC5229DBF1377EBB6B036DCF6BDA4C63F3134F32907A1745128F16E03D701E03BFE570A512AFEF588F0EBD36929F78120C1ACAB043B587E49D8842765A69019257AF9DED65CAF780AE7E55D7AE91F076AD4CB23454471DE904CDF5DF22DF25F536A6AE83F855CD3B3244D448DAF5D2F3281152654B498A78F64CA06CD6E4807F880D76179123FFA29BE5E781256114613721887BA97397E8BA51D7C3D3E17492D93A0EA7DC530058428FC558F6467BC66BF623709A0FBB608745935877FCBFFDAEBF357AAC9B1FF1E9122608CD3E3FC7B94667BFB941D2BC27A9AA501B08C145ADC371C77E64E889C109D6F5C7490081FF704056F074373D6467D09559E0CD9B2983EB9D998A2C0CCC804AD479AE5FE42BF139BBA727488F5DB101216EF624219347063A1A23641E657CEAE0CF4379BE2B57ECD71D28480F3412C52C72933C5C2C5C55B83DBCB0100F13870084084D995745D66C41112D728DAE2015507C042BB835AA844C9BEAD473D98D755BAA2C492F3A230C2964D7A1A8C5032F9686E7492439E5E38E78345FBC5634D82284A49342A7EC0337493FB93408DEB31080A0C06CF933EA24F46B65FD16FBF4BA54266D3BE7FD97C40B1E6FF2885602CE34F8349C3DE565F2BAD13FA1661AF3DEA402A7A04D4E91670455DADC51CEFB410290351C72300F2DCDAD6D13B107E7FC33A0340627E72990ADBE3F7FEB09A0D0639FFFEF0AC1EBDEEA80EF2405D20F43EDDA9211C981A4CCD82CEC884B3E299584B0FF6A1CDAD02ECD422F3BC7AD8F1FB28A40F263AF2604CF1C92A364E0894B9963D1856C4666F411408FA5AEC33549B28119B70278A2DB4E6099C285E7998DF8C95435D454E9FDBE25A254479C8491902CF1D86786734A688B432C893F2337D2DDF9F38C0F31F09665FB3400B157C145AC5930DF5FD59BEA84547C0D31863FDA9D44C356978131492DCF0E91A961AAFB2C1346CA65EABDE4D8FBD0953375CA4350819261B9B998D588970A53BB351C9F50E2EE8EDF2576136BE95F28BDD6A7A0626C3F3F537FA0E15F0E73FE182269EABDD43541319534DF1B1D30A7C27809727886B2542683F59B1BF3A20B3D9A7611D707C0CA09FBD593401AA5157010EB212BADCF36A49832713AE2C390CE50AE9C5B993157A7076F6E803AFDA7893783A69D9FFEA2A89C2D7541486E262E354A1F98CBE73C77A0045AB1C1D74FADECC796CDF311653AAFD8FE75A4BD6FC62BCFAEF9DCB92BE8D2B0F722ACBD1308E70736BC082DAE0831D439F08B65B6F98C5485D58BD908D02D3F7C0D289CAD4A5252266C9F57CACFF74F213AC44C68E60FF4D24D90CBCAA4F2197395F8CD9E7AAD762DB224456D2F37497BA82E062B0457522CE0CB91374E50CC221C34A64EEA6B428B910E81408FDD666AD81DEC65E8C4BBB7C41A0EAB202A000E9AF2A34CBE1D7ACAB9C60CB123F0521D50EBFB804E9DEB74AB7E957DA8A26831FFC510455F88A399E1CFD3C41A51FDE4218238800F66556C587D6B8958851D09D5BC0FD9C3221B7AD044CF22015D78F1BD9ACAD25A73A52A044919910325C29B1BE625B9406E9D0F15BA05E1BEE1D32BF7157E645CB61B645363AB90215340A4F6913CCCC6DB25845892F8B99681986487A7B57845873EBFA6AE25AA453CF7C8B806B53439B74E4CC99385E3038004966D4331B8D3F6A8AFE855C35E59BF99B0EF5D37FD49D950D1C93EA7CEBFA1FC0C8611A441C69F368B508D384CEDBD22201AD00C1107F5F67B60854837062627A8BD945055318FD9E4C5D588622136CDA59732B1B0FAFE49275F401492AA4EF3DEE0 -MD = 4AF42E86EC0E7FF6B43FE08579C27E7029F3158F35D7E688CA330279 -Len = 29075 -Msg = 1DF42C75815FBBF936AE9204971456A2AF297BE4497F9C248E3AE31887ADB9C5B6BA44863A02F140A69DF2B3193C8EC6DF0AF54B25F9916FC3C30E92614B6009AF89FD263D533050F97F33D709CD8B0A6BCE38E6D935D4773A64C8FC7C3EE11F901689A7270FA1EDDCD633A468444FC2323CC7BD07A09A279560A9044AB3A49C664D04C88B4A7E9D8EE0E365BE5280A8E17F1925E9E8E3176EADADF05D37E5A955C445ABE4E011F2D65E0867645DDC9D8AE3620CCF6B87C8EDD2FD66D0DB9FC4253E2C38939E0FE18A5C84369347A805331AFB81D50866703867D05047043A8C43ECA32A2B815E8988C1656BAE11291B70EB9BB1817AE9FC6640B0FC4D3270C0476A235351D5FEEE91810432528444966656FC7ADAD822050A9A3C2D4100E6861ED2B9CEC22B75857CB46C5294B74B6831FE8F1EF0A9B432A8FC902FD8D853D4363637E88E71D46DCE6A7E8F56EC9347CD318C7ECC8775CB4EBEADC1FA17D2AA89442949D71DE4FDD6E41B180B66DEC73BD04A76EDC6F6D99A730A64C80183F7A545DBFE551E42BFA0A387EC5C345B063419283AC0B804444EFDD0D09A55399FCC2DDFFA27A1DA82EDE8E2ABD67E931968DDDDFDAF8489D3159505F48A85415DAF247846B9E35DABFFA48D8157FF1E2071EA02F1AF4202D4550A4A61FCA73BDF819B9B664A3EF03C35AFB5B58D71EFD347D785E24813DA5F804C5C2B58BDE149F066D52F63113A45C6E0650872FDCB43FB4473D4CD54F59B0527D685379A91B45FCDF03EF47ACE7095756C43EEA267555596CA10AAF65ED9B29D645AB38694B04ECF698C5F484D5122FD374F3043F1878B5902CEAFFF1631440752DE411AD48A4B12C9389D3170CEA199099A0CE17AF7C4B10C716F724464C2F7F621F59450EFE10FC35F95F81AB77BC0DDC7FC821D03385F4B499CB9F4E9D9E4A8577AF8CF288128AFD25FF034CA5482C4A9C89DCF3F9E6E5066A92A05F9992A61054A6771093643366345F774D79BC5209BDC088341B1E7522358FA1DBB1BBA1165BC3AB9E607AA46D09B934514F12FEA2EF48C12724DE549AB65DE33E7F03D78EEF42FB952AAA568FE3C43ACB475804871F6892B526D031260AFA63E58E0FD3D86ACC6470B5AAB9A24D60316C354A00E40E160CABDAF35989F1877239F7E93419C1BB3F9312340D730D179EE9694A819393073260772A60830F80F710B9A3B23909BB5A2907A327B8A89408427839391930A470C48597A68854587DAB88BAA487F85D521DC6D676CF7FA097A1A3D00395949666B6E0DB1902E197675806AFFE199386D369CE6BFFD0FEFB6CB5E76C3CD061E857269E521B254E99924E61C1BB074BEC5CA5B7A303B89C80C59136A12C33B58AAA730059C3142A35858D9BACF8C54CC0B1DE43F7CF3426C41B880EA86933764ED50971429A5F976AADEDE6521C6AB78C479D8F74322AFEBA7B03485238DA7EED284DF37763A76D40C420E669D19F3B8DEDA7CCB11BC2F8E98E9F453091F6160E29403DEF792C6A5A4FF2A848D42849BDC031573FC6A2671644CFD9E44560516FE187B43CEA217276C2112DA0A9A88D80A40607C09B8E57911D294725717BA14748949E459A1A5348B74136B06692C0F8039E9B67FAEF66F29094D9576276C163E7D72D80CA1644E5339AAF5463C87B7A619F25D8246885D6869A8AB96E90C0E0A2CA307D69C035245F0E6EC4615F90568BD4E148A0891BFCF52FCDC782E59FC80351C0A0E6015109FF83B0A46CE6FC4D2240DA75AF1CBA377116B59E06C4463DDFB1B522A19AF9C942F23FB424AA2039D9933557B8518439A2A7F9A24358327C875B9A123479065CF4D5737EAD94D161B4FBD63058C36D4ED2A67FD782C6A83C52F4B12DE92C806FF479CA00BADB46AC14A2648F5F554C2A8ADC2B5F17B52933A3CED17B2BB27FADB8E9B8062A9DFC179996A894B57EDF43076235FC85D95FEF8157951489157D88ECC936A0A72C49BC285B5F9D61CE1D4E53DF7B0997ABBE9F2D71E5FC930C573C5EB181C58CA1BB8722F7CC21CEE90778DB69250F1D2DC86A783D504A607FE78177EF8888330A610D64F582D9E6C7C240911D610F9E645C1137733FE721EF043814682842266979BABF626A1A6804964F0C312FC0C2748A36E70BB14EF2B27F06A2A9AE7A98EB6FB657A95F6E9AF2C7132E62A422B3A251548B00D6A9C7A2FB26ACF6A920760FE53FFB9BB8EF109E02F91C81888F8F2A6D524CAAFE8AC7936F174750DCAA53E779DB91A2D97E644B330AFBAA743DC74B104F178A59FD82D0A0B1222DF724CAAFEE648A27F44BF9766C29C956FCE840704C130CDBAAE60DC4A72CBA361A07A5AB228BCD7CCFB27862F8E471EBB5C8718F3684DBA234C571564EC495F309D178DEC6555A51E85C2B1425A037319D2ADB1102A5C0021A6D683AF9E2EEEA23A4EB71653D1C4256090AB4CB0E6DB2CD7602CC58D3347A3D5C33B4208845F7A455E3F22B733CD6B8E7E36D8D2903A149DF96F60135A6F5AB008749EA5E9B2736C340391352AD240A192A62F8710BF958F9BB6C99D69FACC40AF3A3E0C19B1C7591753BF25B9B1EF647968163A8260353E0D3C0323AB8008D388E8D79E8BAE63E7985ABC0B33409FCA398441AE99FB2FD8D097D6334A201EDF2477DD273E91E6C893D37D27EDCE73D3FE2ECE1EE5E69646E5DFE56BB877A85107A5760CD668FD76D06087D8E64EC4A9B56AB15AD8460A84A2D24205700DC67B6D97691A098115D92AD999CE6866D21B548F397D08AD0EF0B276BEC96E4E6D8BB07C05D15B2C9775895A593EC491319D846DB0EF5304D9F8E02700B0CB1024D9BC843FB07721898E9B7872FBBF98337C7DD8BA13635C5E481194F815464AAD2399DAB86F9C428B9F08F07694DD8170BD474F88096E9ECA47D5260C39B538D91AB33B1A3E8A43123A36DC3CA7C6CBD51AD697647EA85ED6F0F36F6DCE24A1398C8E6A675FE2BD703B1B0DC837C2EE3452FE66F05B037BCB6B9690C04108578EFACAA304C3FFC1762044265997BE9B13A53D110D08DEBAB76CA1BA189E8F8232A340F268167AD124E3FDBBB6D288B7574D09619EF023F45D56003561A85B445D7AA8B9B994176194923F079821F2E44FE7DBA87C9B8E1E26EFD164B5A625E4EAC46CED9481F9FADB23DC899C3A26E3A327ECC74586E92D2C8A04F1648E4640F4081FC0279B9A822559E1229E847666572724A238794054876CA3D1C8F1121E890C63F0F0F7CA6D952430E05BEEC17B2372DFDEEB5B53F48A162CCC768284888029DAC733AF2635DCAFEB2F78C8C0B2F7423C8F35EAD8085A1DA93EF08C00C206265571BD1FEF39A06D928D591135B7C5099D444A1E2003528DF1E6765DDF31F6DF6D0EE86B2DAFFB10B9E8B82B776A8662E1A87B9335ED2FF0D449C597D02B648E85732BCFC69D363AED12FE61D25793AC90E5E5128AE3E6596863D416B0CD7475A4EDFF9A58082E2359CDE3B8C9292008026A9F26C2B4544430B8BA913A12E550028A9719E9B294F57A7EE9AA65E493AE1608C394FA7218C436738F31FEC1C1002C6A8F91319ACA4148BF888E5164CD5634380B1177962090D468A8BFA9F0056D212855B3380845DA5485C07674B828067DF1BDFFEF118073E525D997D49BA8F65F7732815E09F8B12B973C8A8FDB3A28AF0D3B1CF246F04FEC963110BFDEE8ECC16AE221BC5FB0F45BDCBE91D4F3DA5C652BA867AF26242DD6D0526D5EADAF5880FAE3148B2713E87009A02B366902CDDB99109A8C098C6D30D64EA0BE4B3503304A96AD885594730D972BBB8B90979B2D612935741D8627953CC54860FFF9060B36076B7115EA5842D6A6AA59ECEDE5EDAC8B18F30A159C9BDA3C3D763DB2AE1D63C96B4ACADDB06E9999F8AB9CF832CDB7CD0A3CAD6D5BBBFBF6285C281355A7A15E4CE36DF9960CC48DAAF1146126DE9596DF209BAD15BC647A0D0BBDBE08F92B975613B2C038A18C684C1981AF66F27977F03388C758E301D41530F7A76E574F15BABBCD451B7D4FF6054D4381F944C8BE10988CC872B71F705CDA1AA4446C7449DAC29497C21EE5625F0C3AA780A865464B5BB60E8A5390343C086CB1D5DB227F02A9BA15FEAAD9C02BF47F886203732465640344DD07681394373397EF9719AA802CD0523C96A9743F685ECA647E58A8FB468551007ED57936BAB7D67F295649CE20CA7C710A08A1AC8B631CEBE07685B12B092DCB0392DFD97ADC85306044D8B286D1BB8DE7F81053FD21811767F7077C76A5AC7082B9D227A29E579C936749C6D45C5757EFBC0C3E1DDD25AD484A0EB172FE2223A5B60278C7BC45603DF635DCA3857DFF2973CF90BB3F73B46EDBBEBD5FE7B5F1865A49ECA9F6F00A2B20215C4C7C0B2255FBC7B4AD8DCBD5636D805A0256E38D6B828EFF6E8FC78470CC485D7B75657E0A00CDCCBDB371CDA5AEADFE41F3D7BEB240BC16EB08F42ADB3735E0B8C218C036BFB9DCD4BB4EF21E4FCD53D772E76B7801890E5A5BBD7C01AF52B62FC3192840EDEA2AA2D6F9BED17F63346EC50F1997CA7E9FF48FDABBEB5477AAA3342CA06CB9C0724120FAF695592E081B05DC79BB0486F4DA270E745B1710E37C413987537346D4A468A1D9C30DF80C749DE53781DA9A075397EE1B7E581CA6C4229C87235D8FF90E6698C877D58AF41C6D811EEAD9D7D8B0968BC5E50326CEFF8FA69842212B6CF7D5B44FDD9332FD0A5958399A655CF56A860FAAEC6479FC15E69E3B1E408C7664DA587F2CFAD218FE577A43A263C6E67C77F1B8E3029839578E44410F7A1835DE6FD79F56AF799649C408B7646E83A3E4123075A8429232E818E1B8003BABB9EF31A5CA5B1D9D4E33ED59FA8BAB27093A49A14DC3285F55796B66C1704B4782513AE71D38B112F762F5F1CC4EB90430AB2AFBE3F48AC6A7F23FF0152244AC3CA258D2D9A43104E43ACED4FA9ED6BD54D0A081DC05079671EF9E9156D0E2C90A84FAF661A7CE93730E7F620645B47E2088E6D8D35E9729C15550E4099A046FB7B1F42EC465B73A2669D55FF5C46F602A996E4CEAF5F78830A8D649F2895CDA17B65724A33793C6E9E9CEFAB51DEFA1C2FA82840834EADD48383741FB74BDBE4DE1C73AE10A676F4D232AECC35F6C16BE34C8681EB880 -MD = 227EA62F00E7EE948F211AC554F7EBAA462E1C63C27DDB3B37D6F5E8 -Len = 29138 -Msg = A86AE9B0767D86C9EC5C96F9DF4FD6C3AE88513A3403AF4B4DA0C740AE602076AF4D036A207CD8ED43B6B652F3EC8A03AFD9F21861748ABAB90D2E4509D10FD2381B99E75422E2B956DCCE5E3B3737DC329DA132E93DC965CDC87AB8285B56ED6C99EA65A100735871528272BED6C76CBC42D0A460DC493A76EE6ECA9A93CDA23DEC42C6A153077642F239E91C39B0E2C90FE5BE9DDF125892EE785E6C3254B860BA468801DB1027227498D71C0BCD34CB7C560C680E0E902184E9D20926EE35FF9D28CBD860FE526C94383284A18039B64140290833A86B48DF6A1A6F3085FD7228AB15D42B6938AA0C411338087ADC9BFC2BCADEB16B2F32C7B78426D404442CBDA0CA89E9FA71828786DFCCC97536DFE1F39D6490EE486420B68753FD3FFA84EA0EA267A5041C3468A28BFB14DE0042A1593E22F7191ACAB94877A9FE4FCA83DC3B8F5EC9AB87BE338B4D14293D90A3B7F26EF1F4CB3B23EF4BC71B8E43CC72C143B98DBFEC8967364DE7FA764EDFDE2A2D2BC7F000D1B8E134353E09C8642A737CB22FB3C3DAA5EFB9A5E2E3353095C3C69AD1883C8A2F0DCB2619D879574725CA526BF8CA5EE8A86B4B604B861B4AF1F6759AD3C808F2488C539EE729E425C28EA059139EDE5342CF5FA99E2713C29B5ECB6B3FA49946161366A359957A1F68F034F79C697D273DB455FA3DEEEB7F621911B2BB20AA8B5A4ECC1973F6D64CFEC51276334C7917D2BCFF9CE12EDC9109753C10591F5DD1C3B6B616053DD9DADC6D741DA311E0E0BCB1CBE026B77CAF248C46E58C02292FB0DF29A45135494CA270B969249B21147937C1D64F64F97A14224950DD0F6D84375DD8B3C02A6411102F6D4F8DB76DC6240AED43F29F5B0F60B7E1A5535EB1043036146DBB09D918E23EDD94C725A7EC2A37FD9D8AC5C2819C2885A763C76C4FDE89103C6C2ECF2915D0DE8E7DDC8E1E9C00374452DE7D6D90DA1659E9921277D1B655C9FEBBDA1767B18AB5FF08DA3D28F1F794ACF4F453557D347F71514BBFA788F8E2CBBFC9E3E8C83A100FFF16FDC477F29396816F0AFFCB011DD6114CEF5D896CBEB9D86685D580386C170C0A16DA4C298E4447385BA0B97A7A23535A52EB68AC35F6DA3C211DD65B9B7D4295B568EF321D23DE9E48A3D09BC8D02F0F993AE7864B80734020DD3880ED4E69BC85B7CFE003319572FAEE450D2EBB225AD103330872025019F844E5D5DD6280C4DDE429172AA818DC91E4A0B7E1AA6706938523AEE3233E4D0137901D82925F0EF592EC8F10509623E179A25C0643DD9D121BF2045CF067F563749A6EA531A9D22EE4A562AA4700DB3E51A69A8AED63C6B7EA0581812A60DF61CC65DF7EC332EBFA42D9A5F09CEB4BC434AD3E0C9683792AFE5BA5C403A258D0B8276813F065C1B1C8D9A331F93D8C0C15417EA34EF000B0BBEEAEBDE2251881F6BEDB7761FE4E3A631E12F5EABB6A193A09078B748E5DE0B6B1EC1D0A10950796821FBC2E5A7CBB5DB2DFE8F3BCFD50A45CDB4E5FE3B2531C631CB2888BE3A479E99AEAF0E6727758BA70B86DC7D4B19F49099DB3C1D2682503AC76C54AE98D8B06925AE78A9AFB42AF5615A81AF4C80F7BCC69905D77C3EDBFCC389C47580870998C276C7D81E1BAFB64D7A813DD03575044B40718E52DCF96139BBC6452FC0F9AC3F215E7C4727455B2DE6E495983D7E45B48AEA1F591A76A2E174033E227949F24E0936BCF5E69CE665275364D5F6E72D2F3DB4516144E84A1BDFB54616571D57AE35492889287462A114F81CAB225C603EE341396D50E0999CB7A991AD49654911430501D694302D39EF91895C735F49EB7486B8B4BDB1C077ACCE571C35017141CD4CEFB1DD20E88FEF23A1038328531415DD5AB38B3FEC754465F99CB939C3FBC085C84728574A70E238D417127EFB36263A2170CD4ACB043E7BD54875C42D1552D03030F7D2D08D0B2FBF6D4CFEB1D318F05E340726ADF72B7550851D830A5F2C5F7C56DE54A75FD9DBAC7D5A24A6812B5B179BDB66F02FDF569ECB8DEE2AF26C929AE4C105823E9DC64AE022B9A72AFBED3AAE87C62F01AA56512A8361E7BB169326667E84FDDD1D669F573A679776D734CC51B50D7C1C2DC9D1E7BC2D1DD1ED3BFF596594FC1C9B805572EEB44397CB5560BC0DD1A6A2153183FB646639B20104EDE3D2704662F8EFB6BCE3A775F7332AB2988FB03A8A9F6EDEC3D64739BFE6D8EEA81E09E28E69771BAB8D7C67D5ECC41524E3FC8F1EE1DA2F6973D762FDD20DF5F6D84F3DBBD44CFAEC4539355105C212D0E59E74E871913401DE0F60DD930A39D70C6C2C0374061D9DD40CA7467E823DE7CDF99B78F503A453144E3030BC2D30D42B6FEAC393FBC22916331A4D1C2E330C954CBB9990D939395692659A761300B94FE3991E5CC1610401C19FF447A3697DB957B9C10F94F64FB3CC17A95734171BB47C036FBFA5C17CA34BF0E2E2BEF3C0153074D43698A1EBC96359F6321F735DCDB8E420B365FACA051F981234D56EDDE2E66C25F3372C2832D63C32D3E591645141B8915FC2253265EFBEC276CA9C1019D6AA9B4679C5FA1ACA887812DDA2CB6BF4A45F613093E84EE7D99788B86F95F1C26DE810A86282954FC79EA2A6E70628AE13E83C761999A471D0372D10A70F2965E4AE3E5A94368E61E5A4556C6D118AF20FD09860F908C44CA58C8E831D0F6C1E7D9BDACA93DB05A72F7CCA69546824946723F9565165EB0D5F947257B1B1464BF4920797DD045D2A07E6BE809B9BECDFDA82891BA85188555F3008AD7E256D58E7FCBCC150861855F7F1F4387320097FC15CE3C4F7D97D7E99304AA8E00F86E1ADFAA0FC733EA9321BE4AF1F429ABBCD1C1F7406D201A20361C6F1DCF5903F09154F32EB9009DFD9263C236D51914A9F358FF28865012A76EA8D22F8488A5E1F8B5DCD67F6E52F7729C2B5773D3DA1F02A12CB062B30E0E6F4ED153DE9C24D7B0B654D19C078006C3B312D71DC279AEFBA3F74F594421937F18BB43CF595F04EFDCFCB29E30A8578F399A0DC07EC1205536CA283F93ED6117183032F81550D63CE4BD97A14C20E663767AED1EB07CFC5BD4B4F5FEEF993504F8BB18E71F86FFBDEEE57AD339FF9380EC76B93CF7A8A30F95B4CBB1BD028D0C1290C269D765FBCD2E242689CA4CCADC14A9176FEF87D448DB8ABB6095F5A02B4F29E935B592A87B78BB739AF0560C9B7E5D34369B0193FB27354DB4CC0F28CF34BC5DBAEF7CA1CCF17360CA4D9652C12339C949961A43EDAA1FF732662425B3CF64CFAB233EDEB84C3CD0023374D685CAFE9E67B7E54381DCD2E0DA8F87BDADC4594EC65F7FC4EE8365694A8BA7C2C36FF7E5B22ACF438AB0D7AF1F5896F0527CC61434FB2EB51657F0F31886F5170EAD289E50D60698E45F89C283BDA5E082AB743366BA2194F83A501E3E0EB9FC71D637580E380E62AA3ADBCF0B4022436168848CE548550B438046D2AD430D6E6B24D50C45C5653FAE65BB23974E5677EA4BB6D0D270E1D705AD626C857FF2FD8F060EF22E4F4B0C5130109762598B8F562DEDBCE1211E86F273D4DB352987CC4376FC592860233A6883AC8616EFF33CCFB58CB8F1B534D101550C9FDA3B811DB3E7B989527B8740A2F62579613BCD2164BE515CA1133FE373DD7B38FAC6C4E7178BDB67A21455D01938F9C00FBAA21C17ADF14DFAF78B12BDA042E8CB74A022D31FB683E2A07D3925B21D4D4D971556584EC64E1159B2BFCD9D178E8FF7423D4F85ECDC1AF8A7533B380BE13ACBECB2BC8CFE8A2947B6093D57E45196652AA72150653295CE143931A1F5ED27AFEB337C86EA90F9EBF49EB6FF103012FAD536FAF68FF1732D0E08D3527167725A933298969087BE0D237DBC0CD964DB3952626F9DA8091336A7F6BB17E4A109F14ED6E957D10FB1DD945BF4EAD032B8C7465AEE5B00E7C231DE0C9D1BEA59A4BD5DD2E83B703294B2BB297FE443951523DEF080542E47DCD2410C4E909A4C6ADF22E7196F9397DA9B98D0E2C73B0F2A60D520944F796FF4ECF0C8855342411D5F9AB3C68E52111248414CD10D6586CA3057D686AF896BB8222D21C0BC5B7F62545EE6EE07867398490AF39B1D9293842F501D508C0EF0D85FD2A3B25308D3D2D83E0E6084ECE536594CFA7899A70DD8BE14861482CC18B5F2E905F5ACF0FE9F69FC7562F3D71EFE90E296BEC9647971AFEFC856EFA44CFAA97C98BBDE1A9360E2C899A7FDE01AD1867DF72A9F11014D4A07994DE7D32DAAB3D8CFE4CF1EA24DFAF08524EC80608F63680CE55CCEC83D287B79534FB328632CCDF85CDE5B2A6429FD4154D12B857765F8B2C084FA641FC1E09AADDEBDB79826BD9FC69241950167DCFC58E7C7DD8B5EB67DBCE8DC47013584E4597ADF9ACCA6D07890729E6047801913A71BA35E5A1E9C94FA4213F8B3F5AA848E8B800407213D0FA57E5DD086F725518B55C9DCBB8433B253372F1C8C4B9EA5ECE59ACEE56E72C2A48A73066EE888C68F1B0972E2469E622717FD3A388C8F3FC963D73A33187958F18941E8A227D607FA0894AE912276F47A5B0B51F20115E4AC219D3F28B5C3444B23612DB8492C46FCADCC0885EF452CA43D154FB69AD110AD70DB8C26E60D34A1733A8454E2AC2987DB3F4188A7394101C159262AE990AA2CC962ACEDF768A73A6D9FD24A598FFB27F5CE87E57D121D90ED19C57E933E9AC566A512056591EB2AC2B12C43E1435425ADBE107E7023FCD6A6D0178F79249F21D8404D83BF3B860B1A9FF59ED448BE77C489D60406E864EA38B82F18AAC73B4D3589ADFE21A8F2C8C9DF619B84825D4EE90F25E3815EFD58E514F5A2E1FA61B1B65FA7B30211271BBBEB730BDFF325CC0032EC3AB6D54F428F4A5605924DC8E8E7AFDCCC1C1E20830FA305504EAC79DB1CE6881F82E7B2AEF65798841599F41E6438421BCFC7AFD81DE19F6F92E6BE474006239C216137C00A66F5D74A289EF443ED92037C12121D1FD3C45809AC2EAC9EE1136BE3E0E2E6AE91816A353D36DF5527836698D9F0BD4F1C5367A43D4BF62D42D3CD8ED00C61D3CD31FD9F6B7C91B46127925E57E03FE100165C17A9C43088BA7C4E71A05B65D87A421099B54BF112BFD1D6075C65C783C0F55E7D12721858CA2EBE8B0A7F00 -MD = E141EE95808236D02C1885AF20A135EF3C2479C879E58C4F190B7CD1 -Len = 29201 -Msg = 99FDA602178EB450C621C730C2C9B568DE53E6879D4F7BF1B6A9BD32159F2550FAD14960A31A4DE9FC8E03481ADF3A7C2478DD9E21784DE26B57F5E87157B987CCAF1FE5CD21E308F81D15C8E88A46F1AD9A97A1E9F48D5B12189F7EA1BD4FD4E09ABAA9C9BEBFAF48CD9D061F2F73EDCA5A8844A9234ABAE6414E4C39A5BD76D79628317C641059C561FE808AC8B4F47EE1A7D746E834D303747156B2AAC2A96834A0ACBF098D422BC451C5A05F6B18542E3EF995F2D782CC63673C189C4287B0E4F86EB13ED86C7A90482B270F48F1AC868021ACA94C0195D42A28602276E680ECD54CF2E60FFF82BE791E7ED2B1C1910C00132D1161C63C14FE881725FCAA346D8ACBE0211946C2D4F75C1B73ABEF2B984A5ED3A9A59CBE811E412D8C62E7B5885508B9F94079B09AF36150D20995214868E9C61E0AD71960A38708D716CE9095E12E1C701CB222206A649A500483D2202991D920ACCDCBDF0E3A723C0E2E93F1FB03E895F8482EF506BA17E642846F8FCE6D96D08F3960479C08C8CAD72A3D2AD9A4A75FDCDB18438657F74041A8A589D400B1976051E7B0AFDCA0D5CEA30FE15BBEFC01EDA7081FD2F4BF7D94866D8DE63D8438B00C0B78079A798380BFA0157B912F290326D5E8B9282CFE22046C762702FC524388493906984A0BCDEE025F34B0E9C11E40D3D5A21857B4205F81DACD3E21D70B2C9F2A836E7435ACE715EF80D7658C0F4B7994A5E76D70E21E8C569DBA9F8406EAD424EF2C023BCE071FBC7425FD3CF5339CAE44518595A544ABA1732E2AE88CFC27E603DFF5D10F95E9B8EFEAEA9B27EF738012AC0639C1BCBBAF4B69057BC3A43C2C36E861DDA190D31A1277385125804DA7291F3D488253E78C2C028D283D504D6EA519B95DE8250525C9A7E5596EC8677841FD162EB1CEB9A559B34BCE37D543715DC6D4071A734792DDA44A1F43FAEAC9602AD85E51E872EA1289E8D95353A0C28743F11F49FCC29F4972CFC93BD74888A929B35DFFD326BD01A442FF60C9AA4434C40C74C5C200303B62B70F3618542F7F68740B4B21AB69EE33DA16BB869C8BB4D16D7F004BFED924517EA560FD5CC2AFF0089B52B84B218C50CFCB0C2E5FB843037C7B72B1428757A0F33E6C0A250AACE5A698367386A7D6DD2626CE6BD429C64442922C070C39C6152625D1D4925E4DFFC77CDCC27E46D29B41E57540D9D23AEA80531BD810C1E784A07D317ACB810B57B3A456B0052A33B320364979B7E8178C1577B9D6D0D142050EE9B7FCB0361EF5B8D9337481722646F927FFAAE28994BF6B29DC6C2F64D86B1D0B6F99BA43E6977436D9BF1BD8A44ACF2503460F6E4A637BA2DE2660B7E2BE879FFBF602C87988B51B1AC1AD849ABFE9C95C2952B37C6511AD2E2EEED9BA7A00E67866A10462D26CED08C3F4C151F4830F543B0596C75BEFF09F48D07AFC935F0439F7001E7F896E78CEED01AB87DD5B8E1CCF935329E6C4EA1A108AEB9FA8BFEE6C953487282F60A64F15ECD04C1AC7FDDF1EE7FA82AAD9B77651C6A663BA7448850DF3AE4313E134729A8136CE7BF86604AD211F09109FE5DCE78772E0B7F1B2C59F375D59E95EEB17FCD5093FF688107E20215C6BCEDC4B9C4D5ED22F64ED795D7882FEE87DC1D9D4286E20A7452AA03FEE84D13AC3A101682707342B9BFEEC0CF5156E0548763C57A40FB61D587C614DEBAB7EDF0228DD2A4E1AEB4F3BA17D02A740364DCD23995FE6B6C36591106C490391CD3D4CE50FAD8FA7C02637E1C2A1A4F275122B8712211E4BFD13D516A68ACE7AC009FB7A36186A79066A526AC2FE7EE7930441629F4A53D5CB47B1443A0F5196A88320E4BA2A68F6B1D784464CA4D8ED692FC2B7CBB00B34C360C31DDE5A1516FE07719AE55B7535C00D1F10D918AC408E092AE850CD5744A760DE5EE43F5527B6CA9B5023987D51C335EBC822198D7646267E65375883D47BEA020EAF6590CD9F80E54F02D26BF97B638BBC4567EDD5BBEBAF7BC76F071C04F837D070679239A7321E36186642E46E5AB6A25D9C95C5D8D72E0E0D3C90FF0D422B6F0930930458EF29E8070E953B28A602EAD40038CCF5AF2CEC50F6AFDDD1E357442DCF6DBD0F7BF740CCAD108C44B8BCCB1F0E5D58533EF51A586D030BCB98ED08535E49A2B1833D241F8EF1A42D5C3F711A170FB3080CB5CAB9342E83D0065CEFDED5CC8ED42A22E075C2348741014CB46F19EBBBD31C86BF658E28CE622730520A0CD36C257053697F1D98401FFCEB2AD9F0FBD79ACC94AD9B66E20A9C09060B5064581EFC97293BDE9DA2499BCD052CE832486DC6982DBCDE50681E29426767ADE8CC916490FE625BD71BA019489C3B811301E244A68BABC42895FA822DEAA91DD15299F7FD1C3224E6FFEA8D72E9CB4BACBAA03162B4CB3A9733A9ECCD6159282A09FD6AF92A4C36FFC6E96EAD612C33071B8F81240D33840D97C2C21C1F9DFF2ED38062F1E45690404763413E8C3AA05C3078009EFFAC55E49D4D280FBE919052C41FDE0A689FFB11C1D936EE204D5FEEF4246CD472500EED6721C9910644F4F2A08894EA13B1A80E11A8A75E15741CBF19DA042641FB76F840F89B499D1EF49DDB4895BFFA095965B7965DF52BBBBB751C05F0235B46E0C180FD80CFA4AE6794F9C06DF1F102092C0D9E46A48F6F515CB39F9FE4D9273E79D197FC26782588817ED82084EEA6DB6461FBA8CC3F19E691E84328C6EA2AAE4F297BA3D0B8B70BB5DF260FA5C6B1B7E2A5F9842B2C74D84307822D18FDEC9F38C3F589B8BA9F077B41C09CDC9D9323D189AAD0436DE49CA6D9935FF3C3423BB3E5BBBFBD9F57602E2CB5C989CAE2CBB8A6988E10EB8FD9801B14583ECFDB002A7847769AE33D257BA9DE520E3B05B9FCFA2CED73BDD328FF98AB38DE6AF7C9BA3114C1DBF3F513122ED6011F4B3BEFF3C2394249A7F26F3B22CA96DC2DA2BB9FADAE2DB9D5FA25E4B6584593CDE43775F76E48548F98E61C211BE9CC741874D132F8A1736D6A6B7E8641DF2EB5B6A8A3642A344087E4F8877A18C45AD27917EFAAEFD58C3DD5FAB7787890939034501C6823F320582C8996F930DE3BB95E9CD7A3EFC38E514BBAC4E1893E874E0EFFEE6309EBA876FDE19A3B174B9E6D698D593613561EDEF35AA17DB4835D6035EB078161E622AFD354789B498C773F659200C0FD6C50E4CC40F4DED744FB213B24B760E14BB196E0E42BEA40ED53E3710A5982EDCB6868A8F36AC99DBF01F26FF0DAC7585A60BD9753899C048B87C887088D0F39312C88E8D82A8197BC6C9531E81B979C8300B0140ECBBC0571DD03436E443779A29A8C523F1FF334019A0C9BCDA16F30929915F6FF352884D5746A7AFF0FAB5323E874ECD1024069D68C8FAD18451554C9893F0198B1C926691809242B1D1E29794262C52188AFDB7F53AD0B4D2FB5FC1FDAB5F0AA91C8D54BFA0C2F4D6F17CB3F1C34B77E43EE086D7307ED28FD4AC4AD5F7F25757ADDB6DF1D7D45C0D12354194EDB7232C9F02CA450CC45AA18AD66138BDE016FC347ED864269702169F27E6D1573CA173357E6A10DABC5BC6BF3321F05C209C035CF51F0C4FA8ED0AC437EC9D86BD0C44306AB04660EE87E0EF19782A9F6EFF94B20EC90539DB903FADD17F911EE54559984F0C603AC73E69F143091D4ECDE87BF3063CD5F3A9168366FA8A05D074FD03ABAA49F0E644E8FA16E8F93C9F72C7BC9604590BDC0B223E91B5E6A6FCD63335DE3AB868ECE2F77D5EDE20CE7837BAEE59D8ED6F5D894C045CCE3205523A82570F01A2FAE56F1F13E3E978C40467353C614E579B0D4CEF852903FAE119773306E1AAFA8F1EE178530DC1BB2CBBB53F6683E352CA1E36C7A874BC54FFEAE311A911D35E6094CDF7A08A2D2375B85C309525BEC720F84B5BAA711E2C861A19B334BE8194261B76AA06A08786C079B8FA06373BC82A0FFA47461B0E8016CE994F136FB3224E08D213FAE73DA429701E99270B6447EDD0BAE5C9CAAB9B854F05052BC5F755B08648C5DBE7E51435C9FD13214843972CB4ACD53BD7EADF2E76DFA784D3D8DD14A53CDE313774259394041445C01F20A14381B75746F4F1AEB97352721F20B314A6850C5039AE9BD1DB764160E40336AB860A85D9548FAB8F6E27E6EBF0B752104D526D253C653CA83D887F31C703CF34F77009CAC4357C6F00C43945DF05FBADA52575B8D649F471D408318722ED36FDB5C1FB62B79B956F44ECC0C8A98FFFC2EE74E813D96BD0251C29FC89E24B986449F985DBC0D9DF9B341C8D38F52D311CC515148263DEC54E1049670A6C05356C9C112CE4514F0E98B6D03F50AB535A98DF3A3AD62D840A473B1713F353DA82F30A56B87CCEF9BDFB3F75A8F288A2836A685E21568A27CE84CC19F114797ACAC1C6DA34422B48DDA37CC644C6C27DFA75084BF7A09B74D112758410C95EFD88B6914164CC830627E80300199BC0B4205ADDD9F051105A2B81536F099E6B109B9B4302622DA4EA708A914E4C8228E70A09CF67D9C12391478D4A62219B1B1B09F421FA80EFC5AC7B569370B449AFA5B29D7B39C8ADBEF856F5D398947DE51C944F1F3C71A093CD5594908C1E5B19632CC3EB8C18D20F5EC50FD2EEC42961777C50AD8DA96459BC952B7BE81104FE338F2AA30D2E6C4A37F544EAC1B7E584CD79580AFD299CD2F2B4FBA4D6F17F0F0E5E2497EC3746BB85B8110C881C460E1CDD7F894DCB65CB029131947F6F025F4BC9DE15DCF7D8DBE55C4E9038073CA4F4EFCF3E3C581B4A4435BBFAF3B8DC80734A6A72E7072D0C5C1E30F3A7FFA5C74DF363A901DB6950392E67AB0129741B65D500696CCA0EACB43ADE5E2A2F4BE601E763FBF5C192C7C05897FD21F9D2D4DB1F8924872F047891E987B9695B5A8E328FD79F4907DF6876B1F2F4E8EE77E8C4D244C46693A7CCDD411B4A698000E1B22EDCD5CE267F178716716A45D20C787CD8E706A33C1BCEB1C741D47D701EC87FF29923310863A2D0009119DE6D7380C3FB37DF94F8971F788796D03D23760AC3CB54C156CE2F94DEBAB8E27C7526254EF05B7E88F0C7CC2CD5C9A749A6F85EA90180C6846990D45B07D7FAD7F85B27C5C611096D50A95D42C3057560578FE15A47F27762AE5F3B9AAF22E7F01D27E8EC7E01173B0993EF453E780 -MD = 2F465C9C1437FBAB1FAADBF76597DA4FE21C1D7B4495B7CFCCB96D99 -Len = 29264 -Msg = E691E8FEB744957B275E5FD879A3ABE54D6D6C8C7F589F0B1A17C08C299C559E5F07C9EAA12B3DBF0E06342E6344229E9931217E77F34B53014577AB76FBEE38EC3F491E7E0A129500BEECAE77745F98370CF6D4D0E39C4273AEF366B9BB28640CCD6B11B4A7EA7F4BE9C5C9EE529D0A1BFD1450B5FB9190C1D8BBCF1B80336C212992D428C200B5CD34CA3CDD75E175997AC6181E3D4972886FC9D41038B077CD1E786AB3AC82C3C8AD6DD5D01EFFA39629540A3D6002C9AB63A183A8A85B3BDFCF4D817F6505C7747ABEB763DC78246B6F56A3E12E1001520F5D35C8E3F251702A66DE663C9CB9C53E0584207BEF86ECD046979044DEE55E2639F40A4D0520968BE443C46D71F9B6C75A82D8F7CF05A0D4A1A897E6B57C93922A5F82E4E7578612B3C68B7994D8EF2F85B35BD0DDDD149CCDD8C9084F6F8FF61900FE8CBEAE6525DFB8209026F6380AE677263B1D7CED5F8B2B0B313466966995A7AF768A3383215AD8327707C8CB2656DC1E91902806B613BACB93D04B1CAAEE759B97D7D13CD0770A20A3F229068B28FF36C7048208A4693D4896A9F12162F3DCF18E97DDB84946FABD8FD5039F6EF6DD09540DF8D5A6B7926CACBA509F985FDF23A1F4EEE5145D13D7D0E3E4BFDD1809A3918CAC7734609F6C3F38BEBEEA3FFC3E4B4A8ACAA1387440C92D1CED43511654E95B33B56F988DD43EDE143AFFFE3B6E04F4B38B593251E0FDDAD3D26BFC1B40C5FE0573F010671AC3E3E6210E8799F256B153E1D95093BD452D70968CE651C7717BC935BF2FB77C21029B6550F535C3BDF804E7C2B1A5728AE231C005E31913BE6AEA15BD90491F70CDD222A548C3F38C7B2CB454B3B550699F6EEA351A5BD69B97C2C823ACB21F48A52533587B3B2B51EFF4F453EA66A1EC559F11C387E7B5A111C7D885BFBB557959959AEAFDAC8693B22DEA0CD30454B2C4B1A07AA64E3DF3E4A36FA4666B70E0744F245DC0161AE2CFC5CD0F7A35E67651549E86407CF8D2EF259BF65EE75F2032E3A0D3CC6EA8EAF5FB16563671AE9F1185FDA552639083558DDE883ADF86CB31BBB8764BCC096DF60207E37CF5AA87E0D3565D5510FF0AC9359AF6540C513BD3AC35F1829C5B342E66EC78BE0356735E0ECD97D20F854094D124CD918A3BFD045545B1A7E17FE3E10EED4D11F8AA1B0E33285C7837DB7033AC0D712730C0BCE1C38514FD02985F99B88A20057C9781FF0444C290A7E0645E17D0BEB2CD3A458184F6B4B5E100CB0D69279A9A185736E7EEC42D8740E63D5B261CAE061B54183E4C21994CFE6CD5C5441D6C3D2300509A40CC2EFE67E63D0E1966C781BDF546E9E917FD283CFF735B0017550B5CFB8B5AB22ADAFCEE1E3EC19E0616DEC2E5E7B45C2E547E48425BE27123AAF91B4468B4B1389A095B3BCDC2CFA403B94231411ED835694190E54539F9126688F6232EA13002253E937E508C00165A3EF523621F06FEA1440B81E8499C20BD2D817422B48F8E83131E0AF707126CCAD03A23237A4AD20353EBCA6AF49F7E8599B32B708F9C3BAFEA0A7BE24C227FB0866703677ED85774F1069665CD8EF88C96CAB5EC3F5CEB4CEA915361DEC906A67539ABE4127954FD53B2D734D58F84E4C2E6E90CC1958C20B7080E6E067032186F2B38B80EDD45FDF1C7F10E2CDC0F0CCB734E7CB286A97594B6D90228911379FF4C6174B9AA1C8B291CE061A97C82ADD414F551A1EEB9FC89DBE645CF82DEC048D6BDE94835D6D476F6E5E08E47616ED5766CB369A94D51F2A5F03E5FEE943058C09DAD21E08B822D7F51BE5296DFC398B141817F5671DF7B032B5C4BEE779B7B5ECFD228FAD0A6F102ED8D7A620FB0C6E8E84A020948EECB10FA27EEDF71FF5E11D0E1A2DA41BE4029472CF6F26DD3F6ED6E4A5A7FD441200DC690307673FF9BBE81D71649680E3F62D62433CE3496269507AA4AF5B1E002CB01CAD3AE5080B152D5EA0C910376BD06E4C63F72AF731721E8AE38E91756D816A46830A11CCF5ADE1218A0301711D4889A90CF0527B8C29911CDABC832528D93B9EA9D80ADE81B5A1B8B261995CCC4823B09E3B4236CA9BFCF0F430390554E4C3B3A0EF0FBAF130778EE84420CB24490C5863CE5F3D84A46FA4DAD06A99EC00A17656B4C8497C5DDD4518AD30F929A1FC4F21DF78F87F99FC1F9D7528E63152A1668000776DA4658D3181D259903443FB9AA32D5E07D3F2464BBF241CB2FB60CD4C6A93DE4A6A93C6CC48DF885A8A8175E1A3805ADC539C1C98E1091A6B5DFA38EACAAC4EBD5FBA707DA54125A3DA9BC1FD1BE01E9BE53426E7415796EC7C5673BDA853B9A9A42FB762A63943D57F6554764A33301220AF0FF6648F8709CEF5244ADD70544586B033754F90CE00DD9B3884E27C25FD032261D57320CD8DC3435A22710569B22F95EAE3B98EF5BA723C04C49D53A8740603FDA4551A52716AA8BCAED8E505DF7ABF6D85383B9AC93F212B7110CC9AA680221AA148757B30185E2117BE1E31D6A91CB0D4CBAA397706BD1A9541A21D38A42B9C86EF146880D00ECFCB293AB9E04D3B4BC12BE7D35DA30D8EF2BAAF8684C07144A3322D355B993F1967BB6BFFAAE163631C4B7A865AC7C1BE3BE4B995B6C34F96A5E04BC54BB05B6CADCB6B82849EE9FC0B4A71972BBC36A00832B52B46ECD27117C60ABB0075E438BD58611EF61B4E5FB16D58E2C3481AD2CD10002A7929D6764A11699CD1EAFDA718A1524C6BF18D9FB141FC9CBE224351C6B693316AA81FEE436A30798B817C7B01787FB85103E730E62341AC2E803EA54506EE36E13C8DE2802A84E9F5562E8B14EF55496811E2C1732CAAEB39B030D752176F40B95CD5D5504B055E1A96E8CD190D956814344823F3BD57B5286067CB29A10ED94288EE8BC1658201571C15D79171A3FEEA48DF6D1753F9957DF79D7671E1697F17BE08CC02133C96F725A2F67D6EAE26DC67FF83324C4ADB4E11B732513C7C46F8142ECE31568C26176326FA4DF0376B015620C5ADF3C5EAD45E547EDE93E63F72187DE806681D6F69CFE7E03CFA4CC9B39F6F1B6A3A3AF90F5050A8A836B597DA1A0544C2FE8F1EA7FFB27784D8BB8D8030072947BEB283AF708FEBCC00E1B3708B64A2019D01673A2B57D125CB244E0378FA8FD9C36E58E5380BF1B8E2986B203F090780C8D2EFABE0C8204A6A86BC228179B165A6B5243C1A024A9A4FC2B60CE150BA1120BE333B8C753A6193D3DD24FB4100B29F9F5E0CD41D7A15D5FD4C6FCB11EB903C57A10D264E0FAE632526D0CEBB43236CFA2605F8028A4D504A0650358F5F5BC09FDD7BD31919C2AD1CADE90CDFC5D911691EB16D95C6FA0441F0294592A7565203C651C3057D9857CD1709662081D8C0B9D60625F66D51CCF94603EAA32D1183D1286B2483D251D4B4B16DE1647E4BAFB560E60F7C7F1B2897B450162D3FD2B491B38E1F42EAD2BA92AC5A0BB517CBA1080ECFCE7261045152570C98F43494960772DD8F2601C19D22CCB586A6C7268AF934597A55C79B30FCD44F9859CCCF4F04A8D9341A20F9C240BFA3236A115DED021936BFA3EC90194DD617FB2D73EE30CC39E7D8DB94EDAC85DD2479B3B1DFAAAD2AC1C77DB585586DA142D52B0BB48540F4648281ED4C2FDD2D00DDF7A38096BC6C6842038C5A6BFB94EDD676A690ABE8A82D36C530ADE04DD73F91218888D678C80BCBC530C886F09D61ADD7474BE8153BD95A25F18F8B0C7084DDEB3B32A295DDCA56068FA5A488C1A6949F2480334A54561D81BAD1E63B92485A05786CDAECD5F5731FA72A69B69E4706180D01299AD26A7A07359F9B5ADDCAFCC56C73F0B3E3A53EA8EF35757B39B46AAC121372F50AAB7EE71DA1DB329E00D5977C244255D43BA5232701D792534F441E2FC6C522ACFF45EE18577CF948D780488F5AC4C593D14D9438AB10F04D34B6CD118624C931E85623B4A7F08F844086882EDF0AD22FB1594511AB21C79F476E48BDD43212851921E55CF6C83FF3E8FB38D17182EEA9203A8D01FDBE8DC76FA8B88F290A25E0C46EAC28ECEA44CF436B34AF668298A4B2911FAB6FF585F175E8266F9E8709177305A81101CFC52B3517CBEF6EC44B1A27D32361463864E4D15739D85BADEBAF7C2F58FAFA8EA6A6D37379A30CA64E44139C68512D2713AA700C6FF2535B8EDB795F6E3C46829EDD1CD342FDB0DDDF2302A1CA593B4AA3956573D10BF2A920B05777ABE2E72A313C26A4EA385237E0F0B3FC6039C4AE5DBB055A4945CE74CC90627A5832C82D7667CBCFF0D3CB6425D2E1BA479D928576BD46056E8AF0C3B0AECA0A944858C97C0E64822FD3E91C2B763F888EF4A659BBBAE149FC4BDAC76AB6A507FF2D5C604719B08CFF84C871356F344294FDADFBD560BBA0D1EEFB6442FC88FF1CA10112031D3046D6E83D02CF9E8F31C5918ED87987DD1BA2AB8731126EE506B03F85D6F9FFAE34479C6A7D2D0FACAB8DCDBAFA9B2F02E21C666D78FA034893F2D1026608984D68F9333395E0BF195BCAF7F15CB122419E1F2BF3B3E1E831A61E27336E25EB6480403C90980BC597E87B52CF5D0FF7770355ED502810D265F3265241B75FE2CF37FE0D5ACC2FD3758A0414C4798BBA778E2452DBE86BF9E2C7A3A5563019F60DDD5344F29CCEBDB9DEFBB60C6C0F503432D76EEB47FE36D637A673596DBCA4E55A880FB28F4CB8193C7A40844309B55E4C010FAED3FAE05D85648A339B47D5AE3CD142759F6D009029719F9AF5F81C88ECA88EDD4372C7A827ECE87060F2576EA82389A5F3F3EE51F503709B46A6D3B7F2A97FEDC9BAE4F156A0ABDD77444DD5981A9882E5534CA71E315FEAECA7D5D06A9F74B6F089C3607A17EAC3A200557666817DB7EFD524BF37C58FFBFB0FEAE9D00F78D6EB7240C87DF54D1774F87BE2DCB26C9F0AC70B85C482C672051EA0020C24265CD97F265EA3E2DB3C93FE14DB832D20F5BCA7F0E57A3B7E438AFBDF349215A8D83B6DD80BF2997403DE350BCFA832E2F393B434EE515B46E4125039E0AB05B7914DDAEDB87C2C0A5BC32B2DE4568FDFF238C9C39408C604EAD6F4C5A24A7C36D96CBD897CC38BF600D51CE093B71C63A1C8C36F45730D18EBD951A6AB74B014D915EB2A951458CBEECB4512240342A83C58379B5C98664202F783453B8C8CAB89302883195 -MD = 8581AAD309E238D2DCD283B965497B8674CC8F1B99096F82D78001F0 -Len = 29327 -Msg = 52C46225471E4F60F3B8261175B4D24B806E5159F2B731A82EA9423914E7076287D3AC52552F165C1F9129C80AFF97C1631AD4CE2599A755ADE9F25B8824ED941C1A2C37784A15B8B70D032B6220AA765E4A6CC16E1C0607A329A2069619571ED3BD2C80813D81F1672A3E0326A34A950902E485A5AD9BEF04353E8DB141D837C645A09F2F450BA42995C0029514D5E2835DF95612AB67A99C06D7D69F2E914208CE88B81CBFBD5330434E6342D8000C2F164C212D6270B34F79D221B68C24EF02F66EFD4F74D769BCE6E81FD235A8F5EB79E3512D6FF3B53134AF201821AC3790E9DD47AED5E5330363EB90C0E77902BCEBDB7F09C9639D3524C0C2DE09A19A5A04486F907F3F88C52B269A936CA478723D3F26EEA3846D3D4E6126AD165CCC290F318C825CDAFB2E60EEABF0CC927F9F56AC5914D058E1B61D53EEA38346FF011871B38FC4FCF130B8E76D3B95500CAB38F3AE1A55C764C0AD7D9B919C013AF5641C869B464A896B43859BF256AA19C09496633155EC21F369AE551CBB708131926F492F300B0EB2CD489FAF6A3D6FC05C08FF3E7166B78819259288E96B49436FD014D0AD4E03FD4F86752C701AD2A3A7EB917023147440CC81F8805905B84D82DC1739370A4E9A9EEC643475D8375437D2435FD1EFA849CEAD575388B157DCEA5C264627A861BD6412FA36547F5969E78635E5A82FF88D5A37489E7826697C1E483BF90A11D54B044D8D08E76508B06098F17BBBD16F32CE03EAC581B659B5498CAC349745FD2C68380A726F76702B5C516864CCD596552CB399D4EF188055DB423C1DA79C154E0F89C7F6E0CD2BCF58DB1985AA9D4611B8AA7D38DBE61C5B01D7B183AF4E85581ABB7A8C552B5A263C62A2C4E073F7334CEC3FA3FA999F8B59835CC4E865D6F8DC89773E35B8A58A84DAC86F9200B64CF55E9D276938D8383450D54606A4DBDF149E9640276052DD65EF866800FB379E8178901C9D31030B8F9C354B2BC8B52F830F9DAD0D964A6541F825CDF787662A4754E1639C600B4F8F107CF86B8947395C4609492FD98FEF2C4744916F08044C544FA886292FAD8A7E70BBE4EAB5A705282EB798AF635122B53057BB5F113EC0721BAE41D1D3BB87891A7AAA68CF0C2A3FDBD623D9A435D35202706ED8DBBC355AB81132D3D5FE80E47D59D53A9B448E8ABBFE69C33FD92C49746F2764989C9269571D006F358301F320E873CE33B4C551986DB0599D89AA353C77D1851DC806A4A73670478E532ED87A56A0EE4705936A17B3BE40BF4DEEE3793518CAE2B21A6AA9AB3C40E3B6B212353EB2128C92BDA055546BBD5F510FEF49143B984A25B508FF13BC6C1AF1BB890DC98D85992AD0CA93137C2B710955C0487C1138EC8E7B88AE89E3105962A7977EB55CD5FCD42DB8E450CAF6DC258441BA0DB7B476DFA233EDFE7A6C931E0C546C811AF5CFB666CD633D02D35BFB6EA1C50746D7E5DA286375E7680C024D3D4EC9547BABF5E6724CB5CC835C0C3B56EA14D5934F6AC58800520DBB68C55C3938AC0D9319A6BCD19D7847D6EA656362ED97C103D53A748E6135297E0D187C4895DB3BD02DEBCA9837E550C99B6A64A23F8DFEEA28D854418073E04E7D54129422C8FEAFCCDC17ADF7C092E7CE246A47BA8B30C937B20CC637B499DB2FBF63A596EB410F0832757167B23980C96C6734A0B25AE6D3C3E3157D329594432DEE0265F3659F02A7FEAA122B178D5812BC66F723AE38EB80A279A4578A0633B6FF15B9104022225143AAC74EE672E70CDAF5B7569C27D1DF970EDEE4B4501BA468A56424B282FA3BBF01553691461CEAA5B03817D393258D646E66F07D8E33DABB122DE6B2361F43BE6080F4F76670D192101E53EAAF898BF066B811BE539850B94CBA6A1D61B3E0D83E41FC3925917BC1D19396CA80E3386128395B1D9B9AB6471ED8BC69562E6DB5CB365A50299C591C3DD139C924127B16024ED59B833CFF5211B6E71E025EB420B3E1378FDF1019B1165067E53BA96EDDA0940CA06DACEFE19C63E64E53D1A83744A8F90CA055877684C5D8BA481C1113042ECAC1DC02BC166D2532FC3E0012007F9C01ECECD77D50B63DB44153EBCC1EBC91DD25444A8EAE581E3B2E235503708A6FD881DF838A3406DEF69671D1B89F59A756F8C603AC89138EA8B44E1A947A11379EDFF8CED0C47BAD169A7FE777E485C31222C3F4E1332544A29B531C02742B86EA43BE619105551BA00ED4FF530052BAB276A316301FFC625EB2E01ADEF02A091034337D3BE1BEE157D756C6015EB92413FE8FFD2D3FE469C1251A945A2850116315667639153FA4F9CD56B38BA55700AA1A257E4DD48221DBBCF96CB35C765CB7F49EDE4AEF8B9B089247C5CF982F0C3C3B1CD641A578A6D26539C28C0AD9FFE4729BF09CCCE74469B284C0FA4D9A00860A4E76D57FA86ED7AC6096A218DF3BDEF5021699EC3E53E0D5FC8E06D05A436BE23E5B48F1BDF157D1E02E753023FD700D8DE3DCAFCF9E5DAF33A89BBD5D5F71F247805B41BA4877F540BBD93A5B969D76E203A9544003932471978B0400A521577555217AF9013A0563130AB004ADDEF8E3162A3F32ED651E092A6F188738E650695764C6C86DCE0A5AAA2CBBA5960E2179550C3316227C54725CA46708A141CB770EEB4B6EE693921CF83E3A32B67D6922F748D2D8834F79A0C804EF4F84ED8879C441A41E27C457545992B1CA2F5A850B6AF777758A8FC52EB7E47973AA56CE979CB1A662343D209B38A46A2595EAAC974D366AC10A3982AFA2253AFB24D5081796ED5B5A960819157B8BE8C64AF98E4774B98F314534A0AB23024734768A38A95C4DA728F5CCFA7D00C1903101CF94D6E32ADB5B9827C3CEBEA3AF94E3BBEBE63FC5F62DB7A88B1CA082E8F540E0BD9939C3B3B1B4D7DC47F8C21FAB108BF11858371DE019E25AB1D7229ACA08F004440203889C1338DEE70AC4C31F51D82FF93CF5CAD1D96AABB7124FA5268FB00D8C5EBF5969123AB6E4539289019EF152575CD6F660F55474B394E0713F1ED33B9E6B99EFDC3D92F2A4060BBE305796F154B3451DB343A9E03C722883F7C344013BC89BE594860CEE4CB7030572E52D31D38309CAE886DA6B0FB6841A916FD97D9D0AABEAF1FD91DC08312D12DE2817CEFAB3260FD5DC89EA9A86B7FB593EE23658AE0DF088C98A02E51F0BCC223D02680204B4DAC504A205A176F7753F5EF9CB45BBBF3DF84995469AB44A3E0EE8B000545F3EFE39CEF2F23F7599485761B632792906E31A4EC3C93E6BE981C14FC5A3CEF459747CAC63DFC1EA636DB0BA48A43867EFFFEE4DA1E276EFF3D4C4AD017C6108B34E7FA3EDD376CF94187FAC4390295837B3E7AB726116D895F1F885B6D3ACAE0E2695F2C51E805BBE34B57EC3F2F6DFBC7150903C4F62776739ECA60E96EBD4A6F6628A1C51952323E3022899C6B5DBA47E31DCBDC074B8C82CC9CD3980EBBEAFA15A3F7F536B1F823AE89A6BF235A0C089A49C329E0B316E36AD63A35C7E70EE01E4707AEBFE33F4720CF6D6B77CA4FD5E1C3DFD6A105804630E2D42B74E54B7B4237129A3EB35919BC35023AF1DAFA9B0CBB4BE8D29C36D15682A4414C15B4F7BD4BBAF7887447EC6704157FBEE35F8F309C921152D82715503A8096E724AD302406C55099D1C30403957F4D7F4ED283297922D09E4ED67E38ED94F81BFF3277B565BFD15EB7BA96B9F16B793CD1195BBFC01A46CBD9937797EFD8D3503A1C01E46A3D59BD046B89F4ECA06DBF02823F54AB16CF4B06BC772218F766917529F01FBA453AF0E77E9C47EDE4E10E881472A03D097927C06F5023A2769817650C5D86B3645E9351F22B9BBAEDFE14F849798502613250EBF8F2E96496887C9ABE5EA01699013FA98F313D6F5281B5F656ECA6BF7AD4A222F2DBD0A6939F3ECBDCB6AEC34C392F88DC82D1571F9CB730B9D2905502AF52387FF69428711073E54E3F410EFC6D0167E314B8FED87B06D215AD61A42C77ED854C47703977EE75DECCCFDA0722D95E08272F6D310EF658E7EC6D54D05D31DEFC7ACADA0C745486EC478CAE191752B04F95D4CD9F185BBDD09A614821A63DD1F3F8EB449E45004FF0DBD954450350E0D2DFDACD189FEC729E0EFA8AF8246C3E85019D956FCA5264430588D62883AF59DC7BC6D2608148384DA5C11A32BF5E3CFAD2C3EFEC2FF27A1C2E1F7C65D851AA3B82B5BEBA85610FE7378EBA42F7A69841F076E8B5CEE299738DC83BEB916FDB6561961419D4454DC1E4EFF2128E422B844CFF0952F15352E2F48902445CC17FC83F3DB034D8C0DB9AAC387054718809CF3A71C3E4B7DAC6AF2C000A456EB4913DEF4FB1B0CB7DEF81E681DF6718972D77A07BCEC9B3CB0E3A4796A0FCA98EA24599A8CEFBC766A4625CB9C6F4E709C7EEC04D9E60A669C1DAE5D1524945CDEFA54E30535607CF0BEE473348C366578D97D19CA7DBBA5397D9B00043D606B2BCD08F138E999FFE6294D769C6EC6882AEF9832F3F91DC6CE6179C1EFB0F3BA4B3C85A70A68484E2CAD37B8E233DD296D011FB309237E2BD7083A505A20CD4CC99CB2B21463068FD3A3CCC3C64A334D16A99DBFD69EAEA2721EB85C400C5B7EC3608195FB5ED8E890D122A07B1916FB5934DE7B3F884D5745C12B762BEE1D7A602AD0BA1F191A8F7D5C08EBA8912D736AFBBCA20C2428705A0AFD2080EF34622DEC525568841FAC9FBDF357A2FE27887BCFE35AC4EC14557928517A760A6DD1366AB1A1C9DF3254991B65A6A44F73E1C693A4CA158CE0670B15B2D5455925D3B24A6BF02D0D1FEF0FB09FF4230A8D211E4E22618948B387C75FD851DB79EA75E3A9D722782F081B8A423B3C2DA2B22FAE536DAD73547AB17142B9511598E93CD7ED6F9E020141E41E3D8FA0224772EE5712D17828729AC182978F70CA3F671E91468D47CC590274F23753E1C7D54A248804939402CB609321718C2DC6D7CF40194FE2EE03817828D53D50996B19440827C654CD3ED392A383A162E94CF582BAFDF2EFD094BC5A5DFAF0C2FBF4A408E5078DE365580AFFCFDFD362DC6BF73B5AB15DF5B5153CCB93850672133A854F1137102FD34CB8E5AFC4C0BCE3C27E0B0910EF623C37F07CFF161122CB106F88D3B3195E266D0CB61A794EA929CBA0F0A738CEED6BE0734B9579505F2FF8DDEC -MD = B8E5F555B6B70EC24E599932CD47D534831E7B5D5A965AAAA9B59BEC -Len = 29390 -Msg = 9AE009EA06F883065B6E9837B64A4C128A30FC5EE1832520FA3E71E40561DB55E65D03A08FFB855BB6042BC9A9A5E6E78F9721477979591F2DC00814DD89C7CA642F4B1FC3C8570956CF2487B4B18ED8B59CF0A66F43684E7FB3521BD0FE684E6334740FFF55603319EB75999390BAA3B74C6EF837B3C8B0746DF0D4475820690256FA6C0B5059A577943BF7C6A4C95FB75CF79657E5F80DF0780D3F1613994802533BC32263A4E5C6A32E977147DDFBA8CF94C51B2738A2BFC155BAE9BC2DEC54F8CEC3B1AC88C0777C2887EC10739536A702C37089877D6F1C021A13EF5889AAA7F13A49FD7243CF801F1A1113B589FF7523138C080E32DC917395157DA29F6D0EAA0C8949C913B18860FE1BFE6E95A86A73ACF504D7144E9EDA67F53AA47BF8AD393E2D56B6D6A2D510776BAF1CF8D6F1455177A7B4980941871767067BAE3FB6F5092E880AFF72C3AE05C5B9D8451E397DD81CC72F80ED32383C765B4007CB2C3DFD6F65FC2F056DE3DC55384B4E1DC05C7B970C6DFDD57723864ED5C2D6464564D4B146BC424D40F4A8753DD4742DC948F9AFC8F87FE8A37B1BCD1D218FAED0A7C65CCC9E616257BF9C2BED1EC7F83D345E6894517B2F628B1126E80AD8ED4AB28AF8ED3024529B6CB7B8C21D57BB5E6CB78A4910854EFCE0F2B5EE337B26C8B12070740242AB7C77EC79A42CFFB54B994A8B8E477DE7F2FEE59D4B4922FB7E6E6EB9827026EB003437F4D0BE724451404F64E0810965FDE5A9CA3A62258FE96CCB10B4DF5025FE578808E7DCA0BD392DF60CB54C17103D8070C6BE5A56070319D43C96A2ABCE947D3841183FE7EE9B6624E78E4F550F20B843CFFB1C71E7FB3254BEBE4AED4ACD399C3F5ACBED1565013FC9B2AE9AAF6C7E434B581C494A902C08A23EC3E76F241F104B2E9D7EF340DB33A57AB7991F6CE17C996406BD28C51FEEB3DE4307F060FB08B7D94793CE8E74A73768D1BEB4B4F47401CEB620CCCF3FEF1FDD21B790AEE291D4347E633BC970A4058DF18029EA245726C0477D42FD7AA9F4875C97E16FE05901EAB84587BF51133D422C93AEDAC4BB4C9C4A6ED40E9C9B5712EBE06D03D3D01454707E968E3A459F89DD757F1FC81B687101A5E23083B169E72CF20C27F0F5F1200F5014FF4F67296D507003C789FCACFF69D53DC9A66A402A7F93B6937DB0CCDAEC99B642D41C5D6D31F38A9ACC63527E61DBAA6EC8B409CFF35140212523B414A523ADC193A01447BB60525394A7362E7FA5566219F91D14A85581A5063D52F81422C9144763ED835FA996D566390498BB5CB2F32B512DCCB959AF41827BDCA34C40186A30ACFE582664AFC95FD6167CF4F551D18F6D29F72809A2355807D571BA3EDD6B41BE98B4A86EB289FBB6E5719067CE77861E4A35442C67D7E541F921049F47AFF3401E57D0DBE5F78A529C37D52AFA652D2FD9114C1A16A448AE9E212AF5FC7E2629DC33C214E05691423715732015670213E245092D9B66D09445512206DD3FE1B8D15A22E973B7B2CD56123E40D54DB4921BFF80A50017AEF88EF7AE401C06FEEC228BE895608242AB8D1EA1B2EC75D577D852BF2405E8FD05DABE7FD74497B23D8E03B89B1E42BC7AB78FBB17BF265D4877DAF0E9F9B4866BCD5308B7FC27FD1B68334DF232EDB046EBF449015D27B107F6A749883E1E3F45C02DC025BD82E7306A43D277B152929ADC5740B38A21BF1BBE7D4E77F429E5064B920F7734FC2FCF6586DE00820B4E7EB16339409C7CDE9FDFACEFAD6A562A8903D550451A6A93E989E504548BCDDE065A5E66542F352953917A9C98FFC87954D81DA80E33EB6169752038EDADF9B5B5F83E210435B6CE118B5E2C7DE5BBBD1E055495123E640EE78BD739B498BB9CB6C2BA26A2A2834106FB5DB8871D61D246EDC6FA1C38F866B817918692C4477DADBD9715757FA7989B1E20D7E82267831CC84FF5A401FA646D63AF4C1F83AEB18F807842040A051A467A18837229C4A315A24605076C0B78A48153D16998D0A7ADD47252EF958D04909772C9F081DADF3359B3D9CF12FA9E49F2301B3946AE26E1176930FF533F6895F08514FC0000248E71BAE19E2AD6B7BA48694A358B3D47196F5BBEA36E708CABB758BEB895BF63C97CDA2C8052F344EC959709A226C02443B3DEA4B116A69AE0162D64FCBDD0042D3C98C73E92BD0B6E4B5D1613FAE11032317A9A7873986EDAAD8E0565EF10A460DD043B8992C8A4BDE74BBA6310F9FC98919FFC9378CAAF85B274F88231B3D47D540679D2B38D35D9426D07CB636B7314F228FC635B918F00F32C6C2493B68665CA1F9A66BFEFF6F664A093591C3BCA42969580FDED331BA00C68578D57E1E23770B24DC79EEC15532D8F3E16D1C1F1994AB8AA1EA461DB77349815B0BC62A9D8119A135B7E550D7D168740BAE43760E2D99A2C0492FA2EE21C04A7265D5E0532311DCE3A18441AC799E0F86832B73B61B95B008939370C45490D507189FDBC9EF073822A11A50318D2AFB27BB66016DABE9722584D59110F1ACCF556B8C006C28EB531F9F1462BCF57BCFF1BF6ABE1DA95C0930398C0E6CCCADEA235A00C09FC8EA741D01B9FDF3D765ADE3641F34232A85FFFC560D5C57E52AD67388E84F857FBFE1E23135E773EB41E447653F9290ED735BAA53238D78CD52E376280049581B33F30D27585A801A1FA72E32655421B3F13C623330E80D1D005734719104460D3A3703B2D4D01EAEBEF205EEADB5F92AF359E09BDE35252DB4CE16F86A8B5B0CB6983A6B9A379D76FC43DAEDCB09F824B2A09B99C86109D0D4572E421351DB05B801F665C42EBD379DDBE645F0748488B4B2242206259A8C8C3B769B8624B9D2DC7BC33CF1D7276D1BBC931907E8881AC8B17C60B45FB26BA3930079327472FCB9A56BA4AFC382014D45FD60900413C243106E7A010992BD25651955F5A81818638C0EC95998EABDBB9B804E8EF638BAB83ED66004DBD5DE2FA0F4501EAE3B510DA94C252D6204C6A5CD08894D59305675269F08174B6D3F4591127FEFC19260EBB573CF8D219AA8A67A96F1E5ACAD0D2B9A68BF10540B1D6A1E6DFE00FE132B62BCA7C456229D177076EC111A03C181A2A3AC05954FB6E8AB2484422E839D735A22EDD91ABC9717DC61DDD4485F9D4C3252EEC7524E84984CD859445DE0C4C064FFFF4E4FF0C750BA07B9FABC905A8CE18E03601045F5BF0CAC78FA00EA511AD637468194FB8EF25CE1B25803526ECAC6C4BA4EBF35C64B4E7C9342FFC1D02CDF5C17E88B6EB4F8B71AEE4F75CB61FD233D88BD3527CA02A80DDEB7802D20AC485DBA59D5866ED8EE5C44FF333E9EE699265774004F94C63E638A562ACC9B0EA6A08CD31EF493830914295C0F2C4C1A08EB74B1427A46020B1F4F58FC7809E04DAED04FD89EC2FF5BA5810C5F728FB3BBB46DDDE7BB2B3783CADA26F3F7E1CDC198BEC6521F97E94727B0ABEC353B908E05B6A9CA42B0718DE2C090E4032B93854B584051A9177C41535498F31D8533CDD266B1386934120E5498E3A4B57E952A0E205ED44F5D044B9E55EC087150088E2D976F861A5822740DE5E41E6E2EA8ADFBE1779B1D5D24037FB05C97A9070C624D209B263D9D5FB843484CBA682961B7A9FF2CB47209B09CA8B99C13943D942707C67AD29433E5C06BD2525EDB0DE7D8678CF6CFB33E0185D3E8118A7B53FE3E42D8E1D573DE45DBD442B2F0910AF9063648A925A29A6701B5AE6E8494FD9919A7235A22B02D7B8459BB4FCB4323F11A917452CB488331F09A20B99246C342327A12AFAB35905343E8D871C7A183C138E791D4B5358127C33C05C075ADDE24EEACC5098D03D8EE5952C25D9E173711B9A7AA4DA763C88482641C8A70F93B308AE91501B07568B27B7E970CEAC9052E23E25BB8301AD1B27AD2126C3A8C447102659F602D917F464BC6194F5533C6960F54BE0A3E39F5D676895E80F867C6997E1D0F0FF7B240BBACC74624210DD6E24D9EBCA811B026B7FDA34C2FE8587C93A5274F562CB29DC4197A11F5AED298D04938BB351D7B9FA8DF10347F08E4599B0084985FABA0037755C0D77BCA15377BF0096803864FD439F7AE3BBCDC8F815DACC059F2547B54B459BDB87A0974CA12328AAD0DFAC60C0309CC71431ABA0428DAE229305F1E998A1B8A846863D3639CA1B6625641431AB1E2E6807E569E7EA42BF3064E2723B82D25BC35DEF3EDAED52E4C91FF5493243D2C1DCF847843D14968B4686F45FD63D10202A963E35C2F8CE497BD44EDFF4B97BB48CA1B02C3D48D3F421CAA2BE3739F549B1C00EB3EBC2AA768010D22B7F4C1D92A540EDD1E7DEB1EDDEFCE06B739B155AA7DBF7701530E3ECB330FF46119F4540F858449EE9DE4854CEB05517EEF383D4F39ECD2CDD9DD159C9BB15441C6B7C3BC34242D3041DAF5E9D17D978280F1A4BFA6651CDCD7619747382AEC1004EE2164B34DBE93678EB5F933571B8D66B56FF4C6CF72F401AAB53E044040A7B0466037714272D7567ED8B1C0A8469886B27D142A415141FCF4C2495A57ACA75D1B24EBDB550CD9A161C1DC9C285A51E8F6379A98269F07354D2E93150103A866A923613988895C380C6067EFD0770CCBC7AC5722DBCB005FE6A507E1CDE07528E24F3D24FF6EFF2B7D8D5DAE9D7A3CA0F61457CB7D48526ABC6D7A3280D652FEA86E547E2B6211BF3EA5FC369507093178AB8069D40C1CE5471A4A120AD4D45E8FF8C9E748D0F5EA7E64FE7B0BA115C61D112B03936A867B218DCB16DC7941AD2DEEBFAE2C33C6762C6240F7571966DABA90E71CED3561DFF8CCDF25B95511CA9C16018B1730E9B348F3C59FB1BECCB8F8D18A32ABF1DE696E4ED069EC32137E509665A89293263178A0D25861B54584E3A2C4ACCA99A9B9CE56A6D5BB6A689632F1F4A1A044F53A1DAA4E3B7858F6FCDF386B745D402FF596B65A45346FE0CE7B7C366DD5C90C6DFE65FA048D339145F1B13FB55DEF282C68CD86FDE69CB743B019093FE8B26DF9718B5D4D8A2AB7E120760ECAC498172451C4652761C2FA2E678D4BF168A90B69A1C37275D2B9371F80FAFC04234F83E2FFB408E960E368E10606EE196928BE2DA00A18B4591416164ED88114988A808FAAE4DA9494919E6FD5CD28113DF6EBA86CFB3E348CD6846F0938E6A4FB4655B19505A0C771C8E5582F621C98D8110 -MD = D227E65FDB038BAF39B9AE1048ECA8F843E1BFC1FD8F9D6EEB1C49E4 -Len = 29453 -Msg = 5117EF1061F811C5381A5D8F814A2D0F5E7BFD3396E325C1831F2035CB832A2923D2A426D85B0983D3D704744218B6489180595BFD856B1C6DACBDDC2DECF0FD00EBB7BEB2E625C3DC7681DFBB11E5EE44A5486361CCD457330B539C18C6B8797C4A455B772286DF3C64162D6F5A1A088D54464D3A400E4AF77E66528D2B2C24F23083C209B73AD0566A0EC5DAA484C4391325D5191AE00F4B03EAFEF49677A23136FD90668832EFB58DFB846E3B5152BFC4BE595BDDC7218BFD4D92A5433A5839DF3EB7258165B003D399ECC5F45B69548215C1C756BC1B6C0AC3DE53DE4236E8D377E82A56320C9315AF4E51EE93A4B1260CE23A45029ADF4502830439C14770D2C042EC0283C7D2C19834BD37332457EEC424A0ABF03AB2C8471D754EA270B097C74C2114ADE02EC6E2FB04A2F1122165BC9E05A2EA5C825C54D2E9DC05E0677AFE0DD6D182D6AA64C6B8445BB1FDC7DD67F77E91D71E90F01956E0D7E6D13A9FE5E0D743A5F2E1609B3134AF2EFC8799BA4AB5C7CB6E2B08FB6504CA27327AE20EC553E841640619A24DD7FE0F28D7C4ABCDA17BA819597AE90644ABBB764152F77E705188C0FA2466F9168323C47D75241E5012295BAEC940487151DAB1D324337C05C68C9B3B7AF31E66163B96510E691A0F3358BE77E7FFEED88B554E054127FFF99E20130A168E6D37929F28F02594389BFA639281CE467064E21DA6025D859B67F6D0D4B9BA7B276E016C71926C0ED14A5AE8D92C1A6A01BDAC408ED4AA2793024868E1427CC5D2CA1FB77DB25FFC313DF8E6326880DDAECC46565582998681EE9C47083469C407001BC15D695E7EFE7D9E1556941DD63F2B1CD8BCD5EADE3AABA4889A083B5972DCDD3E6170C55E608C2745DC97EB9A4A70E238E87AB217A3425FEE6209CC3CB73080B0B2057C1DA6F699CDD555931E58F6423C808C69ADBBA8B88346B0A6E0E7A8D6C81D0EAAA6E951C9774CE41D1A3853EE05997118D1F6030CF5E71E01B657F754CB3CB2EBB5338E04AB179EAB8DBA4B45A492B45EC78CC7234E037F649F64FA7662A1F49B8713F1BCF855159CD3E110803E2F81FDD1F7402F1198A189B27D06CA210A53BC59CD69FD75EE0E6588C2FBE40CFFAC3772DB0EB93E5DA12C2570ECF5E2FA23E4F444597F445F47BEF64EE414C18A0F87DB453596772557604A139C0D4330DDD7E4103009E4D60724E5F84777642329773A40FA9FDE9F1F8ADC453F27CDA3F622139B2141CF03E04146364A1F38623B8C5F611B1DEFC4B3A1DC1A282D0E3D4BEE4C9EBEA209DB14E3F8C7759DC988454D6519EADE8E7F35874192095942A3C73E01BB9E17D9305A68AADEBDCF12D40A9A668F8FB1A80FC70FDCBCED97EFE72AFDF471E396990FDEAE3FA50AB2166BAF5E5CCC3D13B6DBF6B8A3A62C6B402909F163E1BCDD659FAA3D48E14DB875DF327376962A21FD0713FD4A1DB67EEE34A0C67AF80A4F0F4A58411CE6FE8BB794B87CD67950EEC7F31FEAB57F7A72301F5D22B1E71476F98AEF0D89EE317E6B7E4995495713B32A7889ACF798B7BE64C1DA0F3AB1DAEAF4D5E35AC71A242F3F305B0094DC5BC9B5C05083967475380773830DF7A538683718110EDE0C94EFBE3B3A270AE243D7FBDBCA1F5F4E16343B0B6176B31E787FF937EB5ADEE53640B427097CF0D51A299D1F21E5E7A725737FB95C35B4A88BE303011E82A0CC0EA4526EA12D8C0E46B280274FEC1454A991894CDF42423C6E88DE55535B46DBEA25BABFC81D7F07CD931C2695EF12717D9F3821110FD2D218AE35B963218CEBBECF46A0ED26230726A5E8D895A564B9086DD73C0C0570DB4C139F5BB4432F6E131B3B34266E52F05AFEB88229C5F45F665CDF0A2821CAACE2E267438815D6F968A80BC9823EAB1853CC635731D06EFDAD45FB1FA78D9F0B6D813E82E41BFF5BC73B17C7630A75077A1E84177535C01B291CD8DAD436C1BF67B588C9A2202FE1DE6FE4BB6F5D76BA4EFEB6C6A3DF4A43C9D105D4E6E3F546F6542CEC98B4ADCC12D33C1E009A0A89D2836AF7F193A01C54C60A1306D9625B267023D769B9E71CD7CD57681AEFAD940F4C6FE7AC4206E7122B7B4B10B26BBDC7BCA7CC46FB952C539AE2C28D7BE23231CE3C441451D2BB337F3E9813565198FA6576096E9F14FF3CE681DB0FFC78DB9600460643A26B3FD75B4B5D6B77849A78CFF5968AD99D0B23706FD18FC5A8DAE06299954CD51041017A5B47E02B4E207A027D0557B969AA356E0DCD44653FF2AB2937C7177CD0D53D90ACB2CBC3666B92C506E54B95BB0CF149733AAC9BF6CBECAF9D9E43DD68F9A78D0584C9280A9E344D06A5CF78B8298A96F585B2271A2F790DEDAD5ABECB4DA0189761955620FA6694DB1634D7CAFC775243AE8A93AAF6A451AED83A47EB2D92089947E06CBE9DD775555D990533C71D312F1BC1B0B2264353B28665A0FEB99415DAEC99463A5FB01D521BE4B43294DAE0B44D74A5BE62DB8BC0E685E143B7E82CEA0C870F34C78B0D9BFEF231D3FBB6676BB12B411316F5290A0EB84771B5CAD8CC2F0F888CB767DBD257A136F6A67ED18AD2BCAE644F6C4ECACC902B0BE740A780C6E285132D279D69D805DA45290EF58EAFB00E4C02FACCEBA6B0B08E77B8A618208484A14D778B54D6DAB9C87CE5F43ABA40E187221F9B15383415C1C59436693126CCA64F4D37D3D9BFC3366C1D12AC6AA95E966E8F09D23929823E237EC1ED1D73427A5447524F333CEF67D28A9A736B426D07E09B1276BE85A6F9E3BADB42B6857591645C031318FB5AB548D4A6BB3B34611D7C538D14D9B17432B6A23B6A6ECCC62D17D6F64C75B3EB6611FE82AAA406E67E9E4CC3412273604EDEA0CB631F83B58B4718835A511109A8EC79A2AE4A40662C620890854345A6998E5B73991891790C7FC63D756AE7F0EB9CFBA3892558FD07A1420208A89F5757133DA41A53CB5BBD3BF6C4EA41E900FC27857F09BCDD02B052E6BDA1FDCFE6ED9E933E7AC27C35CD946F0799BFAD76A457D44D7712655C61CADCC1F4381607353ABE95FF7D5F7D8DD879679B677D3A35C7A34BCB4EAC829A47E03CE3D00C04BB7310ACD347381EC0C9892C94337EF98046E2698EF940F1E79FDB4804ABDE0F34CF456D59EBD1834783409CA592F689CAE0A47A594FDA1664F709483C9AB328AD965508C391BE5831FF6D4013E07695FC49D981D23D1B56D5D37386EB7C0BEA985181A438C1EB038FFAF388E94B015A122FFCB4464E16003A214054707B58E096C26FA32A859AC5BCC171DBA9DB08F400E081CBD12FC34CA4D5B2EE8CFC2611707D80F10856ED56734F1133690562E8C4AAF7D499887ECFD8B0B992A5E69CEE5AA1EC29AEA032A42C8C16BC1A5BAC79C1A78D33788C56C7454E79AA33B8D9FCB8A7CE966EEAE58FC01CB267371132701B977D0F117ADD90E8559B949CBF72E54EA990A48161F4DA052FD2A7C8FC51627C87A9D4DC722A306C442FF9A9698989A7C33324E70B30B061330DDBD26B061A3A5ACC04E7B9A32833D1278BF0C2CAE6410DDA57E90E9C107EDC20857E05011A5E7540A1F6A7983D512F22B919DC0AE4AD411E9927EDCBD86CFC20515C078F268E8E3AA96A4B892499165747B30949D1922AA190A64302D6A6B9E5AF03C7BE7253910E465B77A4CB61630484AD141746C33C8969AC2E9B30A63527AF591086AD194A93FC2C85C99720F4882EC45AA26FB08EE6886FCCDB26095C561074334DCD0FAD769C83139F3A102A30CD73955BB82B9571D082E8E9B3B9903CE2F965974E9790F1808EEE3CB7C7AF1FD253CE91DCAA6BDCE9E9C3405C67F7B41984577B6C9E0E7887E0A0857F5F3A9144F4BCA634A2941E999DA3B8ED323FA1CED81002637E8653A900FBEE1DC670A0F3D4C03118FB82035A2FEC6724B990270D4513EC15367CF75C98D3916096E82F7F00C0CFEC13775CF6FC91371FFD9B99364120FF12B821D760DAB1EE2A1C974AC3D1AEFC9F2A9E73BF0CF3ABE2C67D29429FD1D1E91A71AA527CF9929763B1B32C456B8F713D287DA7C03600C5C83C3094B53A5089C0B8DFAC3FC26D75D01C915C5C232A5642339F90814E14667780C1EF7C59C9FCA0B725EBDD2FF638362E5EDFB99194731A2AABA64AEE55A323B79DF8FC9A19DF30968BD35FC19669C5EE63760D85DB82114301550081C53BFF2CDAE703DE4D3900759DB4AC32033594DAE02C79CCA6C11242107B9A689F33608FA1A2CF538D289CED8A9EDD3A31AB22A6F9E2F690A66B2A98F352C620CCAA915CF153A07F8577BCC493A1BC1D10166951210216CE569ABBA30A2FAF80FE7CF013C7AEB35E0DE5DDD03D42B13EE1DC418492E29C55F78D04B0AC8F8E822D4E9BC7C6B7C43787F906234E349C65632CD1F6643C5091BE9EEC08CB2EAC2F395DAFE580BC4DFD3316C5E1E62C659A18A727A85A68545A54C1E5CEFADF463FA22450FD872DE3671FA80896A53D5EDA442FB77C555CB510DD96E741AADC26E304FFDB02B88E071AEF57B7F25E7C65ACE2C98FC7541D7619644A81EB5D2561A28655FAE5BFF94F0E5084A4A1C4EACA0734B3DE19A3B71F15C9BA0BCE6F4DC785BB57D468BACF817450F77E5C347223B64270336F956CD1AE9FCBC8608AA7658E88EE7C159A5BC01A19FB06B174433F06A2896F4FF39D4E736D1F1C2708A9EB70DF5789F2486CF9E042C125E6B3917AD6B1CE29477E4972D17B541E46A8089583F0F36AB49E0CF63AEACBDFF053E805DB5CF26F1363BB7D99667357B7B38BD4F0C75B6704F9B8BF09EA331032E487DDBC4AA4C801CA4ACEBF6C4C4B5569E65DEBAF4A13471EBC8528C3791EB717BC6369F226C7BC06B315ED7C85FE1998B0C5A5BF13D25FAD83164E3E7C8ED318A77235F3CD3D152E0044C5B4AD96927A4448AAEE05041E288E3CFE48EFA9FDCFFB73DAFAD17E5CBBF6B455FA007BA6AD38B94614CDC4B09FD487DD0AA0EB71335EDCCF903D99532923323E0A62C64D6183662362D343A414F88E69E7740E6DA158E211CB92CDE5008CCF80882DE073FF47E7BCD7B3206D9A0C6A6570A5BB4C6CA71B63A117FFBFE7425CE98FCCED49A3531E7B4EEC81C746219247158D97BC0F1E3DBC9A4FF5F4B2E52C025DB3BF5BF6EB8E1E5C8E5688A204B55544C91F73DE3A677449756CF7F05F9987EFFCFEE6A73FBC75F7B9DE11D716638BB1F0C6D3EB9E4589E4F8 -MD = FE985AD7176F1912972FC36E2873EA6B912C4E73030D4DC7F174400E -Len = 29516 -Msg = AE659868E8526B1D0B15998D59EBCB79876E65E3A87AC3F0AB471BA2A34E222B95E5A309F7B0AAF837836B9E26D4B67C3E5B03BD639556F774D9DF9155FD616E3BEAFE1E6FE0A1D02F6BB0FCCECCD1D4784CC2B40CA1FB9653A7CACEE78EE46C19A23C3F2D3DCD12A9B32A6DC666C6805D6DFD1C8313E6FFCA1E7C9D61E3DA2DA78A800948CEF926FEBF2CF1FA7F7DDB8C53FD24D6C29C8D58DB0DA01701BD27D69953C56DA8395EF2613D33B92D24EADADBCF59FCFCE0908EADB4012750196D970BE8AB7CFB7E78655FD629FF8617B5FB6EEA7129E45D3CF35DDC8565445F2305D15748FBBF543BBEBB357CA13EA5418FB0C7E752F27FF13C5BF8B6EE1A6192B933EFA21E8578A75554CB3C39EFBBB3EF98A531F94AF356C9EB1156F4DE508D06B069E2F73EF6AD110929657B8A0C85CFE8AFAC24D8CBDBDA0A2EC8F20534BD1D67F8CD26804B31988DEE9D2F205EAF3F0A7742C6A1836FAF155A71BE8771CE0F7D9960D224301CADAB12466A92395430BC3AA9BA0B4D9AAD6F3F4E841C7132FE93B36B7965BE2D37CD4E0568F02E45FC77A9857C0BA10C5057C5C4B7EA0BEB00EF7D534F5ABC816B41D836B930DB314947DE1B8E8220845F621FCBF4A7126FD440813F5FF2FBD6AB5B27AEBD50D0BED60BC5FE9EC514A9DD3165D417B9A4B0E61AFAB4994B66F30C4ABCEBB136EF59EB075D7902EEADAF68E176007D7A6244A61E40F8F5DB004BAEECBD8CA95B26872D7D414747FE0FDB29A9CD79C0A0229FCDC0BAEAC1600CAEB447FB41C9BE593853045ACC5BDA34DF309ED1300FFBEC610D007EAA475042C7B60EC29D93C1E104A43FD306D367012E990C3DED05969A027426D3D1B3FEC5C64A268AD88178562E3466CC0F6E0BB2FAF357F121AD510C1DA4E97F223E05965D2B9E60ABDF533A8C5CA033AEB41835A59C5C77394A4BF9121D751699E20BFF315C70798BBEAC463BA2573F5E1E42F5CA4EF1B2A305072A5F8454C21DEC22B7B5F49CE4F55D06E02EE4F72A8A97B50512AB8F116555004823F9B1607BADD975C87142032D6807CDA73B98584FB21DE8BB7D71B284BB50F731D4E54C2080FE5D3292D0C9FE477600934C8DC13069D43FD5F6449D99965A3129B86BEABA543E95D5832EAA9D5006FBA0F90E07269BD8A1F41C04F2D6432F5E7D9B07B34C44FB9B07B5FF2CE418C3D0095F62B810047C1BA078042B3DE27CCAC79DA9568A940B620EE2E39D61ED5CAEF5F7C40A4387815BCF862086382E601DE9E8AF76C89228868CD53AD65FF526936FA956CE980E469F6A96513EBB7BF79BAE88285DC962D517F76E6CDFE0136E339FB3F0BBA3431BE09CFEA7B9F6F06929ECA356C5A16DE2C96A1FA39A09B6A3DD3FA0ED842E467B93DC55AF323CA5634F04285A004E0A6062F5D94DE0E8B1CF89606A9DD8F3C5DA9A0B67CD3BA4696ED63E26247175484AF546743A47C103C96A4AF75B581E4C7D3DC09EC0030CB716D3E219E15CA2A16695D8C9D22BDBAD1B36065AC47987A6FA6D3E5ED086316CCFC225B76482314947F5191F9641FD436DA50223BB1F4A2E9DBC0F811ABB54B96F40AAA65E60280432AE605722EB28D71B549176C49E78083A556EF90D4E2059E306AEF97808F0D286F95578D5710B622CCE5EB66CE3660DEF4DB817EA210D1C276A4E19CBB219D66CF59F8989852AD2946C41E125C90D063FEDF9CBD9789F6E332B9D5C8AC59FC41E8B1AB1C7F3ED23B84D544C3C040A987B202DB3FB9AF849CBA05753504A66DC591B0CF80B42B2B10AC96DC2AF24BBF00FF01DA86CAFAAC8B0A3C37A04FC283F56866C1F4B3F7F20A28A160A7BD8103858A92F5B24C3C94B2ACF0317DAD36E6A67B6F9255BB34E17B705BCE323F5CC7D96154AA68088B24D641A73EAE6B504308868E3674213738347A6D6A48F3FE23DB6CC687BC931505BFA0A03A7A95AAF3FBB5A4C23E791903932AC6771FD1628E52BE508286472524441E46469A0737C1FDBC82F9AD457ED5F24ECA98C4D4A483694381934C28ECBFDC5764B2BB4B43439EB82C163E1B86B383B6A42545196B4BA39C606AACF262F863051BAA9586267A8FD0C3A0154C5BD3C8BB82EB91071BFAD35637D956E3FFB5E405B4C91B5496BFD9457D298A26245E272E6D8E2D87436796874CFD2154DF2DC99C4563F7F5F123FDAF2A81CB17FBAB2047F1AE5BB03891C297E7CBB4022BA17F88CCB956F47428388204C9C9D60EE44E1C26508D4C11A1276EACE82FAF30A1C911B3F205B37DB8B4443109A27E7233B669F24B48FF947AFD76B0C5ADC1C0D935B2289086CBFB6DEB0C5BA05CF997726FF405738D8E107E0A24D8D4BD0B1B09CA64511077737D53FD83D626FD507B08A21E60D8F753285F300E49A90438F0A4578439D0FC47D2531D061D2E08F93DC2BE9A58EC003AE89ECCF845C5B5CCBDAAEE2798D410715EFF49741766EBA1EC4015C9FE06C525458AD0CF3F331BCF6FEF2699595DE4F04E5E8259C4F7843DBEABD83A6ABDD64BB1550C45B75721F8126C272DCA9FAA5124DA5AEB68114965C72378E6382B66BECECC7476B8CEC569A487150246F43D89AC65DE8ACF5C244846B7DA8876F2C4A6D96BB17B10220B7E5F2565ED5C0F950D03443651916AB1360A97961361417F225912809D1FA55F0391A410BD2F9A18EB2B08CE5B64B81126E472AAFDBA66802D5162232DE9F215977BBE6F2C208834E309CAD8B346BB4091D7D5AC8F4FF8729FC10930E4CD25EB39C7EE545823D507138D0B69D815165733EC24C633C2B209EB434B1F3EE12F6C81608A90080A9C9EB9853A61D9BFA2817B085BEE7E4654F25233CACCF256AC2F51965C1A8D52FE8C069E18AF3EA622C7E898AF14C014E09E00E3DF6A77F29EF39F450D31520DA5E19184A60CF10ABDD6B8D79A9B94CE9C710122DCD6C1A536900F14351D48E941A255DA197A0EC79A1C87BD136EB0760FE3B0128A76D7825D5AA5999057C1C98499A55A888272F6B23D8798DFF3B3B104FB45761D0C0674BCA41F35C9D49155392A83819E3B7ABDF72C14FDA9D58B6C37F4B6B2C9880639C1B6A3F5B7D4D61A133B46FABAB8D9D6E0FC50932F113E8B1C37464954185D9DE44EF7FFC36B519DF73353EB1AADF665B78BCECCD6531B01CD134074F31C6B4BE27DEDE36D7BA04269588D994764FA5F0F2C0752E13D1EC7EFC0CCB9F821F0C934F24651E124DA8B1DC6FE75236EBDFBCB7F09966EE9F643432FED61C2C01F9088D389BDDEAD106DCF0E84D513B849C541236917AECD352F5CBB2E061FE23E92CD4F98D27BD94E156A99EB83656B82D49496A31868DEB4EC58FFD3567EE46D133C0464EC1AD298A82A01961F06159EC807A777D64C16D17FFF8DB71B56D3EBBF69E1397DF320ACBAB5CAFBDA593E29AA3DE4606914D22BEEF3AB70EE5BB65CC4C1CE3C01599F3CE7D367FBEC3E5216E3A815F8984BFC22F7329175655B7301E29BB8D2F88141F17D0742925B735EA13946773EC28C373632AAAC9540057F78A6FB2B8B0372DDD7064901A3DFDF9E7BBD2C4A2F3B3A6FC28BB27A002FD0C56DF034233B8037D4D724B419386D11AEED78A898982CF66DC7E315D125903025892ACD61A81A5036271607E0D922094876A98FBB930A242EB3415444329F319FBC3A0F885C411ED21699CBEADB017B43FA18DF5022B362536FA05E81F5974C8134F5AA4987A99B0209964EC28B9B43F39EBF6AFD8626BA759A3CF05F6362FE04D6396A04CE8E856D992D779F5CA161FAA0FE1AA5ED66BCE72CF511E334FF2183898EEBA5D7594B1105AEE3C2B693A38097B222B1A9DC529D0228141C8D32346F7EDD4754FA1EB707B59627380A18A6844A5D4A94565CCA8B2566CC559031B8F365506EF82DF1EA35D9E6F0E3663FC75C3871AC12E615FF9C4F9C431BE219AFD08118CDB9B9208370E9946FE93F9D207355855D7A9185F9B9C24F2B36C6E5AFA201F64B764DEF7FE866503F98E7504B96B70F67544658DE959C739DF2632C6CF3A2B782DF5F1E46712E42A2A829C3D343886FA5E5F900D204AF8CD3778B70D24CE8DE0AE2D635F9B23B5727181A632347855E07941E3BCCA08364DB15FF4CD2DBB82CD96DD71E51B58321694C9A6EBF583BD1F01EAD7DDB7A98AFCDC1CC6A68C3580F61F4EDF2EB697872FBC47260C077873AE318C086D678C3366DCB8922A7817FDF4A598290E737336C9BCFB0C41131695695ACCFD56FB91C10BE8119B7E9F6DC65138CA10B2933B68F6D120D580789F7F3131572D4D1B336F9884FFE5F5CCF1F59240C5FCC431C0FD24910C8411436627BA6102E775E3D564D0B694CE6B8EAEC4B7B637E01351620B04DC18D2A7E1440D72557D914D44695C7A6DD4444DF4C3C5F094865A1109E709A820D3E2FFE92086D4971D31F89AC6C56365F2D7729B7628B8D006117D6B49446EC90BDBBBA505A0CEECD1260A94736FB31658B32E4D6F0822BEF0E705191CF5C986532C8FD870F71537152FD6D15F9C41EB02FFD3A539777B12FFCD22B1CDF1D44827F2461F77DC309313639463B476D30758B835042CDCB738A812634AAD11A06EDCE45BA34821FCEBC738C5424012682BC5830BA45A8D1BB41F7E2A9BEC3B787868BE7AD38B0EEBA3ABBC29D36740183E123694DF0472240AC1150ECAA729D761EE0A7A8B7F84BC5CDF7EA3108912C1E1F0A4E2CDE1F1F3933EDB6CA17B6C6CCE5BB5289CB834DDD97C6D93436578C52651542B4419067CD031783E4267192152C12368328168837BC21557155F1BAEA0C756B6D9003C62ADC47343CF7A8FF439B6D47028ED03B0F92DDB3944A458BED21AC0086D6C0B49E0846A6DBF1103B31F74A238F3B01500CF1016401AE792D20478CE4EEE34F42782B6189C9F635CAB88885B1DB9778F1921C5CF93B77B622AF417C0BE9FE2E3818C32644CD8D1EDC15A451262077AE7EBB0E227B70ABC7B3B045E4F5A91A92EF1406E6237EC9EC680D9CBABDDB89172739EA0E409893D29F515A104BF026692E51B37608AA5E878580947A55422D13AE5FAC3BC09F99F758F87A99C059F5B452A7CF417A0D1BCBB2055E5C3714CD097BE1C90842298441147B9EA3EDD7FD60A143B5FD8E4DB1A4FE1A7D51F07F411E3D57301ABDC46A5CCDC2C7DEA8EE6610ABDEFCD3CFAEDD7E56B2C332B959837829E867B29BA5798583048E018B5E31CA3A2314855964C43EF1143E7DFD88A9FA9B2A310 -MD = 2EB073833358B1DBF1EE792EF96F3935C2D3A9C544AE227BB20E8E8A -Len = 29579 -Msg = CE2D2F9792253C787F3F082C5FCF2618817B5B046DDF066C8A824FF8A61AD474BB562AC7C53C09F50D4B7A29DB42C01D24CE6525C0547A1F19FE7E4367667F4BB7F1B7F8BF9119D222EE084E9596E01BC9685AE5BFCAE607DC9BD00FBB50C32DC984D155319F0D0505156F23C6A343C7FF1F60F167B3F423EC02FEF08F2D17DFD8B922681B6EAA80C6C57406E78C62232670D1EA08FD06C3465485A446E9F15D52CE8163C2A6B4B1EFA121FC4AA149F64E5471454060795572A7B345F0B19C1436129E31F6E41B8C9AE448C36614DCBC10AF0BF57E27D47CD60073F014EA5786D81153E02DD15A6328E9985304FE435AFF799A79078C93B5B6B203BEB34333655F7325BB776F950DF233EEFB978DBE0473F752A289A4B1312B6FD7B4ED7EF17750633DF57AC550312D8ACAA5F5759C2E03635FF5CD0470DBD98225A0334B1815C55C8E4E4B5F7FA29D0A9A2E5922D88D517D891FDB055C18209AFCF144281B8B4C539B2F0DB5A838BAF06B2F967AE8E30366CFB7AE24D49DFFE86C9C8EC41904278FA55ED5D83C4B5CB57928180904D2FEBDC0F37C8F8DCF60BB56EDA9C01370CFE82DC699C8E17D383A913DF2277CE29DD454396C6A6C9F3FF0925893299061AACDC2891E49BD9100BDD5388ADCEA0B716B7D3A425014C4D23382A8C581B0F9C1438DDE67362C7DFB15B18C1F78A3BB45DFCA847356C5D814536877EADCFDDD09B7215E03661D3D5E05D89ACABFA8A4F9F9A149EE834C625A676ED4D55FD93EE006BD3433F549E7EEBBBFEC446333695671C39A02100CE485102DE1B77701BAEDCDBBE3BD79C02C6878AF49E693D424501A1F65D695FAF0E08E3AB55D9CE688C845091378B966C222B48039A31C3607AFF261B6C921B9C6C4499C29ACE65A0C8EA7B494F92C7AE7049CFFC7A7CD5FBE2FBDDBF4E1D4D5CC33CD06055717495D4DB3948C6F03C976CED5FF0E731351990E13EC0ED0247A8C9E3A3F1741AE938142A7775F50DAC0811A96FDF975D876B7D7D2BDA517626710C4E2FD13F9ECF7AC829BA6ABA494AFD3B13461B26336F5A9E69A77C89C0886530C95AA1D51ADA61AB9A3CA998F909A178A8F135AB4E5B8F38587EC98A89C29E445C69EB6B0C30293EEDE621146BF1C43499835ABB1634AC800E3FDA062D85FE408CDFD3177F2941F8DC73FCE7447F3AF1F4C5E09CEB1AAF1661B945D55445AC3B8C074200EBC09B73D39A588E9581882DE52FC51A3EA707AB6A027670C47DB7BB7E3BC0BD417354A3387E02937D3EAD25FA3C71E5547566D2128CB7B31CC451AE6093450592FE3529F29A70E81AD92C6074D55CEA4C9E53A555B45A05EF1BE6A9FDC6F5B33710212D26D002C5DFF6E6BF62A39E53D89B43C8163E8062FC8F6DF7512B544B686148974AEB25BF3F9C45EB7DCB386C53D92EE5FDA02C7BA0EFFDC4DA84B7B8267914176A5DD1462DD08214870C321AA8D5B0CDD624B44732BF0ABFF6EE1C2C9929A24A8BF31AD1266DECCECDC7F8C29D468EF2A335AE7DE001987A8067CC97A44771D354A24CFE7DB3F3918A9DE82F460B37BF7A4791EEB11165EB4D8E7CF84E1082D1156B1A1FCA3FC8502A22C4E95A821F3C08F944A087B2ED08092AD4531062637305961E4ACA21A43B34F39BBDE6BC67D6B221D9ABB0EE3CCA76F6775D9C5F4E431B0552FD575457E358ABFF429254007F84DDF5FAF337130CABA92F6EFE79FDA5D435BD5AA704AA06F52D88A9F5E2B99D043194031C121F705310E36AE2154EA25C9B00B68FB52A94B2DE912C6F836FBC0793640D088F2C31FCC2B370DAFB49D257A7EAF534AE40698B313456BFBBB5B33C549DE473C6942E8413C43E241BC967A6F3291EF705C073655C4D41E54FE742C7FE670DCE4C943E003597A017E5E3CF7B08B6976C8EBF5F8A023B1A997A66841EA22BEC2B3C954D8B63A435531DBE36DB591393E7D8681C1226E13954B97AB91CBCC203FB1CE205573D2007A978EC9EF2324BAE1EBBA950B76BD1C023DB04B824CBD359039099ED5B633F45C74B5C9DD6DA3B403E5A3DCAC3FED2B818EE59A0EFDA6061A26381C8A5C55F6115F767B6248D7D6BC2A8B88B39FA917FD7837A1A2B06FBD220B6DF94BAEBA07A6DEDF217A50776C588B27DB4D4B95759DE993B1ADC6E2CF439A9901CF7406B490433ECA132A7C321ED9C7C2240FF12BE39FC85BDE1B1494732FA2330571D379789730F1762C23ED524C0D4CD6F7348CB78BCFD5077F66B6A2809A81425C4168C193EFACFD42AB5A85757D8F714AF289ADE7BF8CF29FB00F2E27C03EE7F016C2F2FD1E9E396180EEBA18647D0811EB3C5AC600094FE58EAC57E9CD2FC9A173C875B7E45D18AE42FD90C74552232C4BEAABD00E4358CFFEE086E1BB48BCE33B56E87CBF2E1AD9F44CF6C3C1EDC01DCC18C4F37FCD09A2CD8FF0DCE771F9F17C40EB16EDF9A797EB4315B725976E1E2C2B27754FA899E824DE8BDEED482CA2F82302ADDFF6CCA6D305B60139C6F408423634B7B0CA3A3C95AB99922584C90A759A42DCCA896BE355393FC21B3A11633BE89BC913A1E34301DEFC68118104BFDEC41F336EC1FBE34A42938839F777BA156652BE3DE7C6CBBDC1347E62CA1E08BF59CD64B51DEE4F43BDB4E02C13F422A50EB19E12D5678ADCE6764CA05F516EA2BFEC766354F1ED0A521A9D0B6D4C9C9A62F19E5B80E1CB3ADF78863B7B7365D2CDFEBA25447C7C203E026B08253CF5CA1D301569642CE62D98AA011CDA874F47D28E32388F443E7CB9AB54F70AFE4AC62DA8B1C749169752FF856733CAD4FFA38E50D3D9A89DA222A36DE7717E515897A93219A9710CF3716D7E51842457707E6FC10F5FFAE908E7B209FA7F1CC62AD3B7F1580A3AD349DF272D32A6C0935B2C0DA4A9CF14779E728FE34530643D9B091853DE2769F3B023FA3D461B4034ED76FC679CEFF8D14677E299173127D62FDC6B2055DB8A82BF1089F151536930332C1590FBF1C9124428F666228ACE11D87A8AB56713BD22524236EAE64528FB0CADB733CD9BF7B608410A65A54BBB2623EA8E6EF6ABBA5D8DC273F5D87A6BAC5F12985CDCB32B17F3FA3DBDBFFBF4667E00B1D6F67B5F55E60828AF98D0B0DDCBCC826BE32F72785347C607C69EA8D5753F37D2D291AD88E0D16B2A6F0F92E42F717CACEE94E55F3C54387A6B3ACDC83B5B48E035674AA0A03C1E78BAE18225B28686C20A9D826ADEAB6C1DD37281951AFE2CB45E7E56CB8B1240014BEE90C1E2FA4346D6CC550017BFB8CAC559EA48ADE0A327C6CFAD01B96D5E3A333C128DD3FEDA2005194AF67AD36B7B390752EF92C1C1C1BD856E29A011C75DD0636B10ECF2C766DEA6902CA34CD17B054E0A0E4A542EE69975A0A0DA2019D5A461CADB8DD285E0CF81E73C400847C3101515552507206076EAAC58D1357BF7A10954E50E1DD9F9222BEDDCBDD1BFCF908BDE5EC49A657DA39CAFD5E7315D16F8669EAE58ADC8DA8BF72194A099E8930031DBFD22E8093B42F9195194C9D83AC65DE242459FA6AD398DB3CF306549B387B8DC2E652046E3C68A8F13B48E6B90AEE35852D1855D44DBE46B6F884CB2341F1E61BEDB6FA5004C4E4C5363A88C2CC2ED4C607932B4C5B79DF7A6F394C313642ED0576B8A3B965E2EAA115AD1B3353342F14247B7E1A34F6920B1D9A0FD63A308B590568B3E30D2A28A829607C2714E169971879331546DB7639B0612513F19986844E9B723A8973BB022BA244A9ED83B59676B74579D4DABA1F4BA387F2433C66E7EF9835220828852D983AFCFA78DD7EB597B4F616B6F0165D7E0D5934A115521970E5C6F01571D229C8A3858C6937163B96DDFAF444397A3F9A34BB55C6B49D73E13F8D82E18ACCC781EF4770AC5094C7C9A2CEC3EC295A685EE3F9D1DDAE5F826323C324BF6E93840C326EB77941F77F35067DA857802322C41D283B1C23AADC448242D6010A231046E204FCB37C9BF1B8EB97E3D96B07561FDB7C7C1359AB8F13FA3BB5C4F9A8C088E0C74D48618FA0F085E9D94B90F5FE4A5EB6399C7F790D79F28EECE4ABF06718CBEC28E5BC8ABBB491E4C36019F6DB1FB659C4F1731D212462EC290270CB2456D4C6CC5244C051E787049627FF706A75D3479A1F510A457E58F45521D70F0DB3825E90BC7A904D5E5EB540E4D4DCAA3D1277AE64A3E20035F90E10C97B4E91194B98740B49CAF02A3538BBC4BC4AEDAFD1B50697DBEB2BA9DAF7C573D4608D1C968F0E8301993E430CF77721FD8EF6F53582D7A29568DA54E01CBA428EB8231111B13FF227D17A4C4AE78F36DC1FC405B4774C3DF4209190D5EFD9319DC81CB7523AE4D4253D0393FB9F45CE3595D59127B2D5DE6362E12F01E14C3072090782D2B877506EBE369AD05D1F75AA72FD759F628CE7C77D8DD037063D607B5E5705657B7B50B1C21682F03BF95D827F2D93D130E32FCE0B4B1199CB2C048EBDB972084FF997B0425574B5CF3A2A3C110D87D0D3417BE0F0687097C6C06C4113C36E559503949B03BBF8D6FDA3BBA7E87566B75ECC5EA3E73F21D71ADF48BC1FCFD92C63CECD9F2922675ACAF5FF826A8AA2CE30D2EFEC8879575B61E42124BC0B941B3C1591205B011D1873E4C9019F4CBA2E534B7D410C3323671DEAD7A89FC46A035B74C7A529249159C96109FBA8F7A79205EEFA5A6100355270B960FA657A47031A907C96D2F08BE985DCEA96A64555023DF9B20221BAD1DA7C2C84F6C529ACF148A0B79B52C56F8119969D0910B174423F79BF297095691FF2D4B0242DAE5D564F41B6F95359A44752A3E423EE2E7E27D588A6615B3AC403A160FB10BA74A4EBE7F305040259BFA2C5527C2CCC1DDB94473905CA6F2E64E20E43D5A5569C80717E4C786C9EE7593D2B5ECBBF6180B5E5F15D7A41E9EDECF5527751E6F99F00DABAAE6834BCAD2C8C31B25DC463D8E4A28166AFC51C285D464AB28F2B50A8B408B61E69C2E6FAC88B983CB64226A0B731F892E0C98469C19E6C1A723804A3F31768A4FFD6488635BC7D2E6A6319770CD9C4C63ABED06EB82537CE30D2720506B339D449DC9E6321442CC589CE7A55A1D04BC08525451D6B7B9251BDEC5FAAC9C9354E9D472812D8D6FE8D98A44A32342445DB198BC194F18CD27E2FF5D48F04D3B67AB62A8E340A1D37552A621384654173C0AC47B96A24C2B712395200E4BEE9EB686F48161F51F70A73364A6F0BF830D11B13F145B69D6265799AA7F2D3640 -MD = F16161F83163583526450D6236DDF6B011D926E4DDCA52204798E4CB -Len = 29642 -Msg = BBF039A53CEB154BB478B83027A033CE16FABCA11E30D7AA561A041851616D2D82F689A9C7B2C192989570B222E70D5B6764FDE43B87AF075C5B386AFB8160B635A5FB287E5E579E30FAFE5ACE15785CDB7F118197645A568FBE61E3E9C3536D0713894DF42C5F939CCF1548E917ED89A3A1CCE316A8DFB79A6945D18D40CCFA93102EF50C137F44B6D677DED85A3B4225F5AF24BC283EFEFD3FDE4B461DB016387AA2F5A76CCC335722A4511077CDC4776E27321A0C7BE029F0EA4EE61330A621E1C7E3F3DC1AC69AE687BE37662EADBF52C79769CEF1DC58BBA1561399979D045C5672D49923B881C07397CBA75A0004E14731A79A89922262564C1BD351B5159E5B883AD68BCC3634014196A0E1EEB14C554DC54A478F80D2DA4D612868BB63E9EE8FCB9B380A9CAADDD837D3B2AAD63199E3C58B8310F945177D046C20849D208E99D784E17CA45B7F62DA6DA4DC8DF0A507897E2C7CD69EDCD77D857C378BEDBB62240C2968304876A39CCD41E9EC742734DB8E3C3834C3B8766568CCBEECDCA87D2320D86FC56F9A10DD57EE238138969A939ED8807F865DF50B9E4A707531A4B5B4DC3CE4879A52C083A80C57A7FBC873CF957C926DF42F12D1BEBB415AE09A19059810DE5D213CD2001D2A265D8D809D58D2418DB5BD3AE4FD4BFC6D2A058F72F2FC387EA94ABA00FC3DC94688427C5312AFC5EEC776D348A285F8F6C344AB2C7D8A0F31687038B7751B93BD29BC514B9680964CC8860B9E61FF8B53F40F77D8C5B43A6DD6AC878FAC3107030E59F1EB2D40E21EECFCC767F813262A89F443A704CE9A397C53FAD7EBAE488298BB0032AF6E36F179B2F04AF5B2BDB90F0B6D6F3EC2C87A97E4D2A90E23C11E6E99A22DFB9DF78BB5F8E754FEAE6C6DF7696D8A78196D7898C917C51957AF5E6C439BD38FD212DA788DF14C4DE2FA358751D6D3EA8084291465BB58BA4AFD4887761B31C4D7D6BDBB4CACD209A1A2F30BE37CBA6AD0364F1AA405360981774659840C5D85A6800F360F61546776806BE76B6A3753B2A76097EAEAA7BA76673461140C8C99CA223C2D821B4A113E01E9EE4CC9CF03AFE54FD655FE774B32BC5C672972FC8B5604A1A0410245CF98040497B3B1A5B2D71DDB317180E82E52E9BBED2D01A3BD22370BBFF0BCA13DE8971EE30FF634C20C7E31152EDBA89539F0B41B02EB3B21A5AD3A19831176ACD8606B96C2133422D539EABD239E5E228D6F95C5EB3B7916B744F31D8CD7E574462DF4B2F30C4101E800D0A46201C39CAE2C82EB255F2C9D573B0DD7AE0322565E9D2EC861BA04467DA0C591BCFA62196F80302B34B2C60FD4BB32965D50ECD51CA08527982BF4C7A8B45EB435EEEC997674FEEC32BD7418E30350195B3796D3377F694A1739C22264C0762C08DE1FA8214E8E69B550B4EA777A6D555546A338428B242783944CC57B6BC966DF6BFDF0B305003C9721D8492ADAE405533CABC6537437EBD3CB2BAE7301B686D4E20271E39E9DD1FFC8F0E74B18F7910C94B0A45E5ADC5E136132B87A4B84070B6E81D02D985D1FA7E287E0CA9A96B99A3D2C79E3D45299403867B9C061406B95C352B871CBF7350BD3EFFD89925E6266B011467FC6EF74012B4FCA28B5D1581B49B650BB081C3E71FD48F4A2E162EF40FA3A7BEDB4B971E99E3B253D5664F0F91C97C3A8C2E519C6E069B8B59956D4F51684FC7991D985DA30D37412CA98FFAF85E3F817BE923EE3AC4CDD09079367707EC69BF94D31CCDCD48D30BEA18DD313B0D357C484578FCD907054B2AA2059B21413CB475EC09391BA49026CA87B470DAAA81523EB1290EDF881F4E65F51ED9AAF0AA71F3417CFCBF466546ED4474F4A10190FB161A055B09E4712719BB8E4F4E6EFCC8B53152CBB2E665670B4D66214528AFBC7795180E96F29A1AEC924913788223F4245A72BEEC3913B89573473850F9F512D37AB0B4B5D908128CEE38BD4ED535E6145620792F0FDCBB321E50B2BF04F7045BDB90A85C8D0BFB30ACC2770FC1BAC3E7E40990ABD4F631EE11CE1DB0AF637E6BB2FCC8EAAC8AE89A0FA1D20D5E2A3D1E1835438A213A8617F776B510172BDD8CBAABD2F101259F35C6BF3EF38585F1CB300EC8907B801CCE9D4A26386FF6AFE8824AB982F06478E07ECF3CDB327892872D836FEE7C34FDD5880A0A66AA4ECF7B7BEAB73C33A0DBAC1973E056D850DEBE5304C8736A9BDAD3E2C334E41A869B1D08A8475E9650893EECFAA18F8C781701F1713D7F3C27E6A383AF2C0F8BDF153C6CEC38108A1934E91D9B82309C2CB1FFB725E48A82ED4CCBB5A84202F143985E0CEDCE2B9AFCFE584C81C345E155DC6C3968DF72A7265329C3C5F3A15FBDE2D48D41F2F555593675B69614C52256E428CABE094F4C220D380A850289D8367E5C54E81F4C44B561EA00ED7DBDD95552D38DE6EABE24AF1B08D962386DCA08A7F26EB372993FC599D78754C63AB40B1D757276F2CA896DB940B6FF57BD0DCB9E5BA95E6D59CBF6D36D0F717896EF6F0B731D74F133E048D6EA92C3C95D98D2FAD2F31B676F49F47B4B7C61852303E6C5A1832F513B0F726176A882C8C0CECB95D3146C91602C0D0F5221A41C1F6A632AA484CE1FC059B656A97E9F68CF70E5E7C929950B73647959606ABADB8348C4BB5BBE267584BCE3ACCBC784D7E3C300342F6E12DB72680EB7D5A1C282712B32146D8F0F77848B90E4A737C85C100530B843FC070936E0DCEC0B2D74C3685DDFB9D49F137545A8B68566D07AA7FA276776440A6905C012DC092DB63B26E50AD834DCE9B23DE5CF1E7EE4D88D738DC5A2E13368C58608AE47F98183F59FBA4A7B692B3B1F862B4D3884823F8699E5C7F3FFD3658BF6D775EA09F134D329ED74C4CE2652674D2B317F933734CE091406872FF3BC7EE75618A73386E2FB66F6618B3560E267D8EE43546CB079A34B5A79739B5242D323175B6D105F32B69F2AA0C00BEEB3DD7C4E8114DB780ADA9E1CE14CE22324465380A4088C090530C80DA2A835A2DDF201E441721D28C69D16FA566D2E55D9FA5641604D886A09447F23006AE1966BAB9144E5C62CDBF27FB3763490B6E3E627B2EEFB0DF04A69D1F3A38541C2F4DF58A4C801F94C2746C86439DDDE0FEC462FFD9BED16C33AA45BD4D87ED628408470961CBFAEE6B9C42687D64A150A6F950082546C6D41718A5B069D011056F6F0BE9182871750D093E9BF0FE8E7128D4E1F8081AE7D69EB2A86D01C121EC6F2215341EDC4F4DD564D5211B9C7DF345506BDABD01BF02A8583A5C46B858A6D5611D46926581E921A189F03B453A8483DE668BD214D796FA6857325F35E858FCA67815F26BF3D42E4E047D2E0E9A181768421C1AE10EC7DEBC322480D68A2819202337AE347D4CEDF0CFECBA26735FCADBCAF2446C384C2DBCDA2604E20CD394666DE9404408EFE68D793E32797ACAC8D0BBA35E84EDC6C2605E54D5DF084F16A8FE70502563A1A925E7C1CF427BF2F737BDBF3122138B023390B364A5F57D23DEA3120FF50127C65B31F70C6365A3B7E76B2C233656B474ED83BA02CDA3B924A17A29061A2DCB3EFB00804EFD4F2F79BDB0FD0851B08FB74D2A13A53E7DBCD77C1D38E4042D7BAB15F9050CF8381918562F035F1FE04CF75D6949C903D9A506D3F30A6F8FB3FFC92273BF956E42F476BC778E824C267DAEFC8FC48877109B002AF8AA519CA1E4A0B4E10E7D821989AA502D2746C8707A9C674C0FA6A08193420D0EE9B67AA21B6BAA36B88A4F42A4D8E6AC3B783AD9BB933D4AA5EE362B17624C4BF3A13EE8A12C56C66F1DA3D89AD41AD9E5BA7329885CD5DBDE5E1501B77B966FD61B4AB5BEE2D2E44FE4F2E37C18F62D67537022741F6C1B15C287AB7FA2D5687203C4C534C24DE1C053450B70D446513CDA5D09BF23827C47485FC0DBE2447F95822576AA610D83F35E404EC492D13A8E89824BB90A37B55B54D7EC48DAA6F99E642D735029CF94EB202985D3083E5EFA80F28E4D70FABAD5C812E7DD071437A8EF82F59FE7D8655D959AB4AED7B532DF50ADE6A3724A7B556261A87D3A2C1D8B5208F484AFFD8944566D0384740D28E529DE11F4D5DFD41B72B12FD9848E0A25ABF47FED8446FFDD5C20C42AFE7745573FD94C9A3F8F7AC485BDB6BFDF1DF514B1C8B32628FA1E7F4CCFC65E3882E728EC6110CA223622052552D2037F06D1EEEFEC3B363293E5545135F4670492A98F35612A0D7653B879BAD6B4B57D504DD839F53559F18F6D838E7B1834A8A327FCC1ACB3FA3B9D928B992E0E618451BC6E866AC2F619961F2938734A5E7F34D34E59B241B681CE46CB33B0863D8AF696F06EE4A68FF185BCEC551AB83B703EBF4E13115F1C85F27C7C14260AFD6589E3FACCD909E345EB685E9A0D52347AC0812111B3C35ABA0FB167D9D402DE0BF9EB20D0F27B93F334EE7433D7F5C46CDDB1F1B7EBAFBD8DC4482A5DC638BD582CCF846660E6867F0A385BF78B4086C57499EF51A924AD3169456A2B8AB3AEF48853120071B046BE53F6D9B31E81BE2BFB9BFB98DF75F4021499FECF89A444FE11FE9724F14F1DDAA88845BF4ED5F02DFC241FD4E85BE60A8B3A4271AAD3C5D46006AFCAF694D42B69A95B7D1BB1A192A26A317444987077F052105A795FC297C2F9F71BB539EAF1F752472E0506545D47187C07A936EC1609A50D61187ABEB9963A414A2B3D4319314D623D683D0F210F7064D42728AE30A9EA3D245B378BE188157E878EFCB2934A3F1093C05360D5A00D89C8428467D046665B77E78ACA71B5EC3F73E9DDFDB2CC45E94F3DD48946873E6FB424207B735542E9A87FCDD175533AE97DEDD913DF8E67EF60EE76792500DA2E38FE5CB3AF1F5BC526D2540C8CE463312285EB7B7A34FC73E970B3F1CD84DB8BB7DCAD373EA2CFE429441E45A087F990A1113E145135EEBA20A6E1CD7E2B22C868E5DDF062D7997B77BD00A1E2D32483D99BA7DF64FE31796AB96E9AD846389B810EEED8D782510F749883271AA3B99A9E76041F44AF74487AF85895E9874E11181C9B5EECD10B047AFAAA528DE254F2C3A5A00B9D7F543978655D88DDC37512044EDB5F55B44C8261C40B7D86505820021FB2628B6F0A8B04F69873BA3B37374819D2B4EB5715286F1CC16003D0387B1E352A02E9A9FF29A2831F396658A46F9B4E0664817F2E9D98BCBDBA9B6908FC19D8E20BA222F6D33D1EEB57AC17041AB4A58B5F842363CDC0 -MD = 0408D547587B13804283CE39DF88795E2AFDFFC3A56DFA0133F6F0A8 -Len = 29705 -Msg = 2D826378F1FC9CDB8012623E893C1D942BE6E078FEAA0D77B3B274F815563630E9BC656FAC396695C9006C71A74EB141513BD9F065A8F345D0063AD132A1A109130658ED7A7E6B70F527E66818CD29E5F4EE9B47E35372C363CD6CCC5372D947293EA3DA8452684773A4A5B7E17FC419A529C222655CB3D98AE94621382A8C190484ECA160FBB72BE237618E3DE5133591F0B04DC915EF3C9BE04485BCCEF13CE0B922989AD46B7D835725E7A1438D1B1DAEC7D14566968D0741371BDA16D5353424705332C2A4B0B10E746DF61BD0B65FEF11C6B23957A43EA62AD2E49672EF5EE058D3F368942EF73EE08846583A6BCA32E5E0A424690096D6A67976CAE15F2DEA50AD96EA3EF93E595C73AEF3322F43FC7427B94F0E7E3C93CEAE9FFDA3FD28C5EE45E2D835EAE1B17DCEDBBDEE96F36577DE1178AB8A2D9280C66E83EE0AC1F992F3ED0E9B6E1F7DAFFBA3EC25552643FA1615C52F36EE6F36221D15C719C22043B28F0A6E0BBF71B52D459ECDFA834F6ED1064A72540497C2DA7618BA94840F6360CFDB21B794B50319EF3897F14A915ED9767B2B315EC1431F380ED0772E9B55A3F4F42D9234128C194E7617FB4547268F8C3CCA61E395648968258AFBDEA8D84F78733F88B1A65DC9F8706C4DCF76C1EE254A90AB2D6B8683D90122C50F198FA69C0A31FA8A450507CD7524549992BAA65ACCCB5AA545F1585443CA078583E24CEDA388C0281733DF424E122776E8E251D9DBAE6EDEBF2EDCCDA4CE06F7FB4A1E175A2FDCC0687853EC8E8528B107FA00EF561CB7DDF12232EC28B87891DE2A433673D1832344169F89186058DCBCE50304DCFB2889E5EE7487A1D65CE283F19A005F601BF80ECCB2FDA96A332317B814190DA383D0C7268517715054C2736281B9E33784A9E3F8B69F4EFBEC30FC6B82E3F980FA9B3DFBEB01715E13247D35288814E0EF19B532C8F38C80C1A1B85C4938B8FAAE5A18E73DD8A088B5D3CD901DC062DB8B126BCBA3D83C067F284954993C378998C343263FB60367B515209717DD629BFBED195D02E4FAF4BD26D2BCDAF1CC4C332BD832F97E1080E23F5B705BB9403CE28F6CF87F1D91AF91470566343CA97BC9B8CF2C156BD2CB66FDDDB4A7E1049B29D5D8FE556B849D44520EA87E6A95A1A9DEBDA544797EB2E60A50E77F18EB9AFB7D8D40B53F3CFF59AB677E998998B8E7F5FFF58ADF76A7CE089AD9B4081846E2C869A9B6FB3377F52172FB9528A3574638FC8111210922FF612A7DC9BE44A40E91C80799A540413145A051DD1FA2CB1DAFFDE18FE00BB0EF324F7834160250306448B1A430AD6ABA8C4D2E0AD21FEF08A1BE9FEEC9E3CA3AEBEA885E49DC4FCEA02269B6409D7CC464956D0B32DB948EF64D8F41F4757875F3AB72D3660A176CBB6B5A6416E2A99D5FAE61DDA3A6D45AA0CBDE6F286AC0047D00FA1E3BA7974A7D8F95E0C30CE57D871AE3CBC592B0C930618EFF5CA074D20B2869331D6AD8A79E2B07549178AC9ADE0027338C90067D4E4070A4F568486393EDD0B5422C12B21ABC48789437CB2BE9A3709BE08B72B1610C8D9B5442791279B3867EE21FEB278A0A15D5D07873D998CC9B08159E4D9C7FA9F3EB92976985A089899EE1C67731DC2717DEEFF30BD26AF85663F69D556F10F4000F563525CF316B3CFD3D662896549E47468F2DAEC2218C3270B87073F60DD052572F141F666665C75F478065DDE7D259DA04C52FF29E81EA148194451524BA6259E571268D501BB502157A7EAF152DA3C71105D48DC57081DE5036A9B25604D63FEBCC446B96A1A7CDE4AE049F2DD0F26E8F6CD4C3D65AB9F09891E2A0035A20AD5E17D36FEAB156B1A51EB2F78C4B9D7B7B97947BBF7377C1E6F60C994B563E45FD80EF0B80D1699EFDA975B1970A7AF95CC0410BFC5B15E58778A34C226A2AF5FCDEC1330CAF455FBB2EE0AF3F5495D3B61DFD2FD7667CC4534E52DC1A0F4117436C6A1686131B0AADA3D3B462DCFAC064BE92CB4FCE321E0F80651869F7E278B41D5ED21B00FF7D3B04796AACB171380C32CA1F21FFB993339383B847BCB6674C697242F2621D23A9380E7B67EE42ED66AC8FCCE2C7FC5F9FF8DFC67F0E93D8B51F97153EEE3E42109937907439604056AC19918232F518BE706E9475967377C50E650025DF0076DBE0E10EAC5B4F1810A3477137D62F956919C2CFCFA2D03C5898D96DDE8B98B6BAD0E57F8B3AB40EA117AA6CA54D1ED2F550E7B41234D4E34CCF13CBB422A132E5A6E7B9935969A02200BBDDE4F24E3B3F1A1D8474A8320833BC4788D89FCF95558EB6F323462E0A0D0D206D6364D31F509C15BF4F2389A86D809EEC2F3F43263AE7CC0688D12EB92CFB49A0E910F70077E6A0F33E0917740C52C9BD11FB1EED9C9CC5C8D757705537869F1B300B3C7AFD32BEF71D7EC67F438D0601644DBF1F10667F0EA3774E7E3F8C285DB496D22B7D1999236D41B1BA295D14258CB1CA7FDE6AF96A8BB3E85B11BEDBDA6C71F8E56B781776380B3364723E5F0E661A54285F9C97606CB8700EF774BD91845F88022AD2D529AAA613B43216B2875E4A4F8DC215E2CC477A98FE347DE6746D820E5F68160F4F54163CAE5D7122C4F553F97CCD67F3D3DB5B1AA46A4BD084CC9DE757D136A3AE8C3F02EAA8314C0DF8DA816B7CFC91DA1DABC2CAAF6DF8EC882C84CADEF9839412E85B65BCEFE77B656B15E8A72D808A631DE8F964AFDBF37F9F8940BA0C67777088A2757E88C9B8746E830FF7A320551E937D8E6F27B7DFA06DAD161FE9AC9B48DB6A786E23219E22C29A3397397B90FBFA59C94E9A2DA63A1CBE9C91951404182600C8782CCA2EE0BD7CC566AF908A19B7E7ECA9021BDDEA7D5682EDD4096777902632573CBE167C7662D6308907898A8A0A6CA866259497930662333ACD2DBC39DEC8A8A6566199FC69C4A5A64FC9B87902D22FA1FE8F68B5009303F1E7570C0250406900B912AE3739BCCB516A43F7E54836FBB0D7979072A2F308ECF9FA0BF4F9EEDCF081157434330A22F3E635D6E7F609BB649C1F15C273AF1E36F7CF3DA93CA02EEF693BCF843635CAF4565A112F77139E0CB8DC15082C8F07271098AE3CFCD7DB683DBAE23680A9CA638C4432CB5E02B13B787B1D03B89958F1CE79EE9DD149AAD47C07DF3D55CCCD8023980B6E8CCE32E59944F1E37086B8791F99CFCCFED3E861635F981D5D83E127A0462A187ABEA87ED3982845FEF663EA4251ADF72B2CB52CF9971AFEFCA96360D5FE731A40F52D4DCCB41A00891A9CCE0166C3F44DD4EAD6055BA48A4120FA3F281ADC3E4F3457E7FE7036EBB9A6C3E2D13AF882201933097AA4A13CAD6FD3E049033963923A8FC1E018D706B53A59FB574FA9FF70A67FFAD6FD635BEFE8D3AB04D1BDEE83E5C8FD4417F0E86C21C82BBC0539D46E95E2BC9ECBAAF6D12CBA1314286A1343829FBB58166BA7FB7336EBED5263D320702F1E603A93D246FA47CA6544EE6F4259DFF280F678C4DA1A69556C6D0897D1C4AD2025A958955904BCD49D9B3661E3C371BBBCED59F002740DB25AF962758155B3E576BAF5D1B5609411CAF6929CDCBEAA774652299DAD5BE563746FA44D47FE8D91B6A054E6D71E53BE4D1B3D0F904AA7AFB58811301CAA451F4DAABCB01B4A85101AE1091BC369F50CDC41874C1FC6E8D981C1F626CECF468E3981CD64363F230C739CA3DA63243DE7A944CD9331284494113FE1AF76C11C3241FFB2C657448C82E3954A46010D05AF639325570F26FF1FB3806515DCD153DD4F70D6A9F8736270CF245B7195122126801DB6540B4B694AAE2FC1A01D2272A9E3DD062D5A51A9DAE4104FAE3B45110B00351B8CC394AE8BABE26AEE001F9612C416C6889F2B9B0E9BB5B271152CF9DBC5C69E61682EF439DBB637CB10D31C8C9ABC6B311E286AF8B30B79A8BA5F5D840244DAE45C96DACE54508B89C1D35792170485FFC297A7274274098AD8656BE87459DF6BE7FCD4883EFB52A108D3DC14ABE8FFAEC0796708C102A8C43CB029DD6EA35626BC8FE6665DC2D77062374BB1FB085651A71F149C935D9BB34152B5EF08B7B40870DA66ECBA04D92F98E064E81B722798DB31D83AD95949B8172983041F3353461971C0E1CA815747120B3794E52B73321781896D38CD82D113157667A60CEEB65EB4C93496BA412E80634A2E41EAEF7AA948CA07CC575049A592ED77F3FB1CE119E1EC9A2CFA55BDB3C455747592C43C465D74D74021F02E51042753FE933AFC1EC8E4A37E32EE6C6228207DAA7DD54055410AFB2B98C805E77C812067FCC67EC14A1F9F75379CAF4F198B4A165F21838D2499E82B55766C0B45CAEABEA8D28B731B7599CF0198672A769C862D64AD707128A1E2807CF0AC959130663BD83AF57F11584FE224E83FB7F58C6853C37A0B0BFEDC1CA1413FD9BEE226894E8568E589114997202BA497BAACD12C0683C3C9E1BC683BD9DB50EEA00A0692249AC22345CF916209789028693352C3F2522BCCBAD27D5BCF97204D5DC3BA3DDCD739B40E83957AC2FAB725165D267CB6A9DABE077064E100191B44B53037E554D57C76D7667D9582518ABAB2783D31E60AFB48E678EED5466BFF3809CFE2182EFF0C188A9225F8C5635D3A01B8FDD8B34591F533B8E7E84277E613CE25DF3564E9B049B883D794C1662F8E40DC508E26E664FC4E54B507D566F169877B8A8B1838C851FB4511B774A122D50946A698F40E8F5B0878C2D7C95F373EE31A808FB6516933DEB9B5049E8B24D4448FAD04419105562E755699A676A94FF438C20E9664E3E3D572C58AED8DEAF0637D74242529A89AA167C424CBC20EE6C8E243EE59FB2F0130DF354065B40F469332AECD739F5729BB1430674A3231755176776BEFC02C5A953DA4F5B433027776F46FC8F7F237B90FF3776AD22CCB5B9D6D2E07DB06A7C92C11677B1D3D49CEF68131A3100D869F2F7A98484D4E5299271CBB3BEBF6F728ECA2396F20CA684A9909BE88B9D2D4F1C1A1EF7CB5D1456452C2D2DFB2B5236D88FF1868277D1F110E6DF4A760D337B615AC981FB1C4A4A77E0642453AF3DD6683957B4EF0A07E9B5AFEA9C60E37A23DE7F4AE1D3C2486BA62E27D64C1D5FB92CF58F77B062DD684F10581608B5D68AB8FB6075EAE9D7737557D32D3F3E89321FF6C53BCCC5E1316774A69207497FB13427DCE9968C671628C321E7B97CCFD7F78054C2E0C89F8BA5E81428633FB490DB51678E92619A680 -MD = 8DC300E72EFAD317AE5296DABECB13ACEBF7C02AACC400F84B29D97F -Len = 29768 -Msg = 63D016D64A04183EA6ABFD3D353790E22B04CA89D7CDE3F2C60E8D36C7143AFAE96DE671C2CD915A7D8F41C9F80BF3C47AA37487CB9C938CD5AF8AEEB4A3C6294D2E12CAF1F2C7AB70DD144074FE083CF82D37CB38042862DA9FDE75C0121FB7C04F7A9F7114F89A7EE34869C1BB3F78BB58FC646C8B16CA2288A25A050E34B8F6315AF684ACF3629AB24EE6DED73571C1837FE909EFD3DE34985158579F049250B1874021354FB1715047D9158A31E906738FB32D3BA01F559B19EEF248781E23DC47FE2A3B12F1FC70D0AE922F6078F8BD1A9CE13E3C18DF4C5121C132F0DDEDC5961429ADF7B32D62058B4E7B7AABE5C5D050A8EA33D3B5B6E90D22044E58BAABCEB223539A339DE9917D7F5B3D72B910C1C8036C240CB1A58B7BCA0D77AD820ED1FB2F0ECF85A5D0C0F07976EA27871EC7D1FE9EA51AB1F20052307B3F09950C6D1E3822440E7ABCC34DBA278379115CA0690112EFE4B95699E6E135CA8DEBB173CF7A3AD551DC41E52E237C084C318DE290BE7AEFEBF12ADEB0243AE576392C767F087180A125BB30D8D56BFAF703A85C9359182894F50DAA694255D01ACB1D436B270A7B0D88772659E74910277C2E2E9AB0E9D3C72203E59770904789C12A38D0465090AC6285CA8B577505A25CC87CABA99B43166B521BC2BB6857B0FE26D99FBDBAA34849B2075B672D1FB6229254BD7108B199971E8593E1C8E83C2A631798DB5E84098A67F2164F16780481110CE6A9EB4C1BBC12E681E5D248B1E8E2FAAA081B3762F64DAD22C9E1C2AB45EA3ABAF547CE405AD56794F89E2086807279828782D4BA5E820D5D77D020B06536A2584D78D392B4ECE456606A6B7AA9C80B8D5AB0758A36E77F97DAA24C080FA4249F127B16CDF5BBF0F69B4DD425D2C422C0117E9085356235F49D7BD2773FED4E17712935BC4468A9ADAA30E9CCB9B160223064A2EE4E17E885EB3EAB5B72CF7B3715E518AA1BCFDF6CC3EB734FC75E6AD793A439B1221F895F67E6A924DC5863973B5304A07EA1118E7C72D46029048AA73A8BAEA1D8C9073F2ED3C0867F5AFF73AEB4BF477E58A8B6A5A57BEEB382117D3D406F3F1CF99C3C4D28D69A0BC05FC37735FC26AB83F11B6B31966831072EB960096E2C8B790679E816A5868828110047C474BA31F095B3EDA571B6CD8CC9FD3B6B96B8312482A69E3CAEE423AEB6027645AF2AAEF27414327E45AFB1C926E3094B36A5B3EBBA3ACF29E3687B6688321E4E244E50EA725AA0303ACD522505866AD9A6E4E7D5CDBDDAF2F7E327436AC51FC243BDEDBBFB7C27ADAB5DFB41446AC204833270ACB716929AB07CA60DA847A14A2B248B56AC082B3BD8C643878DE662F6BF764E45DC25FDED62495029211A5788D0495F86C4CD468110323334CCEA98558D5F9E2370D46D36286B5494042F978BCDA3BC8B89BC7BB7CC2E5C9050BD1315C74CE3E53A4C5ADC25121D15C7E55D4E290018209B3A077C73B1908DADBF21A42D2541FCE96792EEBEF091F6067294BC541671918374E5345017BC39FD64A4CC56303389CD5BCA803E897414F783252D937A61AE422956F8E6B0EF733DE26CE29D7D54A86CF51AA009E4ED1C5C859A3E23C7CD9F0DBBF0409D465548AA5316DA3FA5C161F4FA13020F92736D9337D2C172F19EA9C4532BA6CCE8E00F133B213B0816D85D83E3A390D0FD0F7CDB993C355614540B27039F45E5184DCE4C01F1CE6ADFFCFD35F3CFF682B5148BFDD3902624046218E5E84399E1F9F8F3DB5ACBB2E5F61CE51223FFAA867D80BF09A7FAB7E221A5B690E74D01C468269EE71DF69FA2F05625129C9CEBA4125208A9DD08FD68D618C687A43EA5AC1E6FB20507DCE29699511C2FD7B565307EDC53D77CD6EDEA24A01420659CA9712D8A76A8B10A0CD74CD144B063B1C314A0E965839E290C7F177E51B41CB92BFBCABFC6265901CD422BA182A218AE329D3A50EFA15626D66DF2F05AD2A9C0C6B9F1E445E9B0B52D37D6F3F518650E1792071B6E7FD9E1EC4B9049332B6253603683B4326120D9A978E8EBA2AC3B84C56C2B322D61BC693E3E1D151ED48B9BD2B255C3C9C600BBDDAF728E7E740B40BD564798F7BE87D74EC0647BA3FA094B6255DB4496C0C6FF7BC080F469E6B4884D998A4000090B93AA18B87222E41AE8E1B96349B2EF2A4CA1D34C5973B3830C894E0DA076819ECE774EA24635C2812736148D69420BD3112CD38F45100302AD4CE41E932C447AB25B79A1F5BDF86B11BB52098102359798E891D3939630223F973B904D7402C61E341F642F9C8123E472B7143875564F87209E94AF8200810092BE1FE1680B49889995C7E53C60AF9D4AAE258CAD2AAAAD1B2C0885D5BDC6A05C23AEC33A58C0855428C3F72CF19D53DF5BCAB8702B1169D0D3F920F11A1D5284CF6F9B215668D8AAD8BBEACA19CD28A2EED4788D753405EAAC40AC97790ED76F24651D0A30CE100B83943AD138D88C9E96648C3061384CB0FF87A331C326DC9027E13ECB70319947B345979C001CC44823A5927198265DD2018C18BD8D164B936229D69DEC5DFD656C74648532E505CA8CEBF8780D8C4E107945403DA3D3F2722E1BEC6A6C4732717486999B57169BFD627C255CBB1D67AC5B5CF0316EDCE1C1318EA35A53B28C6FB61728F0C47E06793694572A0AA1B5B1561810BC99E9654E2FE1725EF20F8D1F9C0CB74B025EC7627A18FCB2C4241793727F122183E5613F20EB3C7AE3710FF7B8DA1BFD52720CC204A1D796BD40996A74E77BB234D3ECC3D6627C6981A45EB18F03AB5B70E9E33059FAAA61841E8A3B2494328C965BC46D5B3AFF06C269F0C7E066E3E70A5D4279216511A78F2F68FE7B7D95C8B8188A4CA1DD0EB1642FF4DC25A5CA0B407D4E87284925473153B4E4AB1E97BD14C74BB52D07DB409CC11E1FC07DC7972126CBD819ADC8360222B4893E2DD6DC6305D4CB0002928F45C7F776631675C6747672FFB35A8616C24CBB0C079C1D201FBD02F934138E1ADFA82D506C883060B4630AB838AE8BB1360811AE8CA3AF047E247C026300025BE214A392EB05382CD5EE866553B7B3A819D9DA3B03B41258AF3008CB7DF06A325546677B954DD8031F2B2391F7B8E9B0DA937A7A47E43AF34BDA0BE6D4528BAE57BFF89B1B743912AAFD7A169A1629C285BB00633101EFB6E2C717305F57FA9967D174275CC603EB122941E0047B75E7A92C381D18549E222C4E3087DE670898D789215ABEF33CE70B2C2EB72ED51654D1FE3FFF93F813DDD86682A64AB795D19459AED7E0BAF9B9C01CE522E718755A23264D6748B5E7475E1D0FDE8D9828ACD57476FAE119195FABA768A1AC66BD3B0AF3AF80E14BA86BE075C7850324553114CEA9890089DC9703210C824ABFE3F656595ECDF0A9E9E59C2EF58BE826A5F135F3942C63A6D3EB40B39C8E234E8E2371AE94BF17E378D4E9DE4FBEA579052D8E0DC1BDB0DCE319D4DAB6C7F53A1FB75903FD2C281F033D985806E476794F40DB738BF774454DF114466E47BF57D93432DCFC3BFC09A59CEEE9877117287BB48BBCD5069EE3A2153A9C8CCEF2D2783884C399E59071F698E1E85DBEAAC203271852A056D287EF3084368AE32733D7ADC8CA4C1E732FE4A0EE41B53D2ED50CCC0D79E127A5CE58BC480E432D8C855648BD44EB87FF98D58E3EFC5EAAD36BF84572350672F7FCF07C47C23AC9465931BAA94431DE7EF44AA957EBCA2690063F3EC9A966B04C69B341C90524826D27869CC230327B883FE529EEA24BC11334F08CF836705C3CC22A460D142FF21A292B97634805B873A90D32BDC354D574A0AFDBB6B0BC472D27FD9116D6D911746BB104DD9C65A6A277E4E60A6A5D77B191C904A4BABCED9CD77F7A7B5C4B7B8C473A051B5EFF46D71C4A0CE81B87D449F583E6BBFEAE999D6EFBDFD6B4A7FF709DE3ECE939CB5B127DCB4DEC94ECB1CEBFFDD3D22237BE5800C371AFB56456882AB3DDE814EAFCD13A398C1739177312F8F7DDEF2386E08426355C0AD2AC2111EAFC57A16EA2385D38DDB85E32827BEF105366617BF8585A25EDDD66037B8F1B67C3911CE1052B2255B44F157E3E73F845B3F179EF540CECC30E41731B02A9BB3CE6F390D273EF3011C9227D274337670D2CE90629639E62A5171CF26D30DAED75EF9A02663627C142F9B84C9FB5CECBE070B4854E6E406BFC937C8A6B44E7EF5F56CBBE6D57FD5D5C1504D77A2A14D844AA14EA52AD888600FD7DDA4F819716963369E839B847E95CA7D89FBFBF11778903A884EDE8FCD1E00D80F9BB241E8E6CDDDF07A2DFCBB5CA7028A339999704D12903518FD33898AD0384D67D22CC63522AE64D57FE19CD0B778B56FB531C00B9F915C586A0DCA070EAAC22E84FF4DC718915AEB37A305BE02D0AF2F4108413FFD5DF74EA1BB50A6F7B172EAE0531384F6B11693D9AD6588C4FFA1C131AF8BCC39FB49D03C850EB45C360F9941D27C4CEEBF4D54DC75F40E3920613C372978DB8F9F5005A634E22CE15CD95F3EB73CB35854FB5FA9EAF0D8674934D2E44ACE74F473B1BF1DAEA7CBB91FF0B7524B51FCB51D76A21382D1E68DC6CCAA32432266A60EC5A15F154F390F17F2A32F22EC37F9546B066E5314428F1065EE24FA74E7C104B880991124D5F9C2C431C20497CB404F04662F583D9E545C08E10717D4A0331EDFA018933C72200667BEEF4A3042E34CB81777C20171F1334EC1863F5A77EBC55AA06E4EDD837C2FE057F8DA87DFFBF6107386573346A17BDC3FBD873AE7CBD3E78579CE308BB6CBE6DEEC7A24C5C7DE64C2C857787A22BB7A9E698E9A6BCE854D3BE63EACBE4E10F1B1705CBDADBA7DA8C2037A0438A6FA54E032547474EE8A28386B4F0F638396EF7125E77CDB760465A0E196F1E44CF776ECFFFFF94DA9D45A6C2A7747034FF6110F8C818A0B4DD7468D5237B6DC5C59B2403FB0BF2CDE553E0E7203AD2E08AC447BD36CC4259D404058D499F7D51BBF7D8A18FC598A9F322154DB7A406FC67C65B60AD2F9E4AEF5A20CA1A988292235D9E37F2CC6CAA46063124E4EDEF6F6DB0294637E0F5C24443FD9E8F14D04D44E6A0F89D390334102990991DADE07607F40FECCF010AFBD732DA1D70305E61A5C36AB8613BB27524CB64B8766F47E1C5D42F1778FA02ED13C275B12906FA1D6FFCC114310CDE819D3B428481AF4739E962E3A2D90D864D4319DC67F4BDDAC76448B67FB439793B68B79C1DEAA6DEF04A44AD66F2596CBB3A9B5460DDF05235D5 -MD = E01A40EFA78DE5BB500513CC1AD77326C950D991C0706AC66758EFA1 -Len = 29831 -Msg = 3A4E729860AB2123170E3CBE05D5172E208A65D1E218E63265A91E558FB9CCA080881CD52CD2020C52EFDA594AFC406B6C1DDF74405CBBF1F2325E411DB3FCD5733FB9391F40F7601839F1090C21D1FA7BDFDD1A5D6C4F5A9A730A5024173EB4C5FF7BDB221B31ADBBF4D8718C763165E89CBE5B0D185B8B1BEC4A0EBE5243CF4CD8D5AE4CBBFA29867976DC314131104B39D4CE3C01B08735F3FE311739BBD181CF6A110B709760C66D464C32929DAA6647A4E2440B8B1379680487ADAC10E9641499EB4F75CEC0F039494386B79D9A4B8197EC7553973E24AEE9CBF6722F9FD510B496271785776E1AD06A3618CE2E9A286CFEFD460195A0D5FF976EF99DDF13A6EFEBED799B1499A9EBA52804C9422587AC9828CC56A7CE1FAA3F10EE384E954ADA5D15738F051644B532D092F314531752D75FA21B3DEE264B461263C95EA6AC2834E9FF643141BE21CFAF2DA1719CEE43F96A609FFEB0B7430A7DEBF5F208D9F7B7F3F84143E47281B200F029DDE94F994CDA7F8E1B71CDB6B4CDE23854EB6B7DBB2DD20F7A46E72BB686E127FEB91BA1BFCC67FC5B48DCE5D9A7E9A45D8B35B72E571A00559081AF971609628F67E9E2CAC7176E32067773DFDBFC527ABD131FA9EAEF1BCE9855FD807F36703742365E84731C17764BACFC695C96F82ED9823EFACE5B25D8A6B54863D7C732ED4DFD5C095F7255E478131BA3816C7A268F63FCA3767E5DDECD8121530281FF86CB8238E05F3F803B6D1BDA2167544B4EDD2F5A4C3F4F97B109FAA9C8F9F15CE652179879D6B2384F11CD6A164A944E28DED014232EC280D7FDFF1842A8063B732D79D505826046BC89D67DEBB4F5F52000D01570D6276115F17B286D0B7BE449E4F7B216768BDFD7237CDFAC43E848AC9E4A875D52A95E2E416A71A67C2FB9D39BAC014B3B146A7249D2FC614BDFFCB374CFF2E1D7F6C00F04E2577F2190F8571291419F0D19F88357ED0086AF78532BD2FAFC14445C08D9CCB941F4EA71A692FEB7595D4B131C157FC2B34C1B11F5FB5AA56A5AEC9671A51AB40E8731545A013C4908D2B777607EA0B2B20F1BAE8E148101B5AC933A428C17389566F745AC5BCF7961A0B7D8D50E1D4B3C1943E87A371D7F6C3410C2BEE6466427A94D5612B89ABFDB161D55BEE726B9A8A8347935F15861F4CC22EE8B364D9F9226EEAEFD20ADB98543E4404685111149797BDFEDFCF866CCACD6F9248A09B2A15A966EA65ED974E5B5102969EA1EF353DE16D1162759104C172327AAD8DDE8E34457C2F4C900DEC18D8407875B89D8F69E5540A7BC2EA71E60BA97133E8872C252A1454A492F23C12088BC2114D7F0553E6984834B058B7A672000019BFE293314692DC82CAD10E82F48E947BB720824E213D416BB772859ECC024E5547BC602542C273C2EAACE446513E21924AC28DFBDFBBC3CDE1E2C62EAD461A1A80248D019EF55C254C80E9832AAC71CC8DAE83ABCA57654EE70D010DFE694AF011B99E321CB228887B7DF466DB28AA582F54E7B9685929F0A91389E8E70BD1B2A8D005FF3BCA8647658F5188E8FE4C4F91C807AC00406F2C73F5B0E6B353AAA72295CC3DB72975CDB71C7C01B5963E2DFEA2BCAAC056728680B7C614569A073E5F8B630874A639CF7A5E0FA600FF3138E1EBE855F2DCAFE387A2A80BDAA1B4DBC6E6E30EB4C2D23F17BBB00D86BA06C229BECEE77E2FD1628481E960781815BD97F957C6FA3B8D1CC96D64720DA787E4F81EE7EE41FA478508AA34C34F5BA53E38CC7D58296D0E77636DDDD5410A3DC0ABD414F86223B13C4A902D75E5813B4472B16D606721217123E8E68125A04FFC88469A39483FE097059FDAE427405E96E785FB45F1C63E22644CE2B65B9A43CEB5F561313E86F689743ED79E0A2FA3ACA6B09516CCEE763F0C88803E2EA2E85EF0E1C8069B26A3BD301E4D1E7C3A613E1DEBFBD83C83A5D318597CD95CD32EDCFD528596D8CAB13744BDAA12AB38052FF4BD3A58575BEE0CD33BC7DF7F48BEA8AAE2AA5C0B8A0C4380073066EE97D0E21F6333B8D61CA90E1DD965FA97FDA69E2A1858A89CB192A85C4950C95EA3658E27D3823EAB071A9B58A7996EDCAC800C893C4969509830B859DA45EDAB036D21DF578923CA4C4E5903B23BAA34F728C87EB12906F0CA59B238A6FF441887BFBE608628A2FD16E13E5BCD1762AD86E1D2520537BC4C6ADDA5A7A5D439ADD7BA15A502E2C86FC8EA4FB9D0AB4784CE1E85592A44BABCF328C4523DBA83BD11195CA1DAE27BA72AEC5F6789790CF529AF5E6ACDCEB6B13BF355DC79E6A5A396BAB3399FD1F675800673CC1A306C750B9D2EBB8953B286688544D68C3B59A436157904249169B193FB204E63D8A1B5172BBCAD05800FB4C4DC0167D4B175F6AC860EB072871FBF4EA9BD96DBE3955F87B76ED4DEB4150177683B58A0FF42CE8DF74A4607C4E017F8509483C4248B981023C45B3849067A37A92FB0FE843B693607DEF7547FA17312CFEA88765DAD54B754BF402700736DD6AE386FE829171BBE41CA7E426D2438C4C60D9F333A9F12A29685E4B54E77DC96E8ED41C91CE7081ABFE1331B447D081223ADED7452EDC12D00B885704CA2095954AD69FEE7017F062A7BA8563FFED611C6D775113E0ABE695054ACB95E14E8B41C20A4C84CC150FB338F20AD6FC931D329E94037B6FF85BDFA4C7DD46584BBCA17E9DB65A2BF819C9768F178F409036828C3EF8EEEB55A9D186BCA5C0BE758037C342146086711A58F26CDBA76B6985F1FF8EA440B715E18B1AE4B892CACF95AACD38DF4BAE411991C42D382F35BC907F7EC8491EB0B48C977B394AD10E676AF421669AAEECCBF05E823F073D1FBFA89EAECBAD54C2E754293A5212D184AAECDF3AD5EE8DCBD1DA95E11F566CC2BBC6254BAFC23F79A90B7786614E3F31B2E134967C48D9F14A64F9708E530C84E04B0C7531F7AD2E0C0556437AA482A57C859AF7AB289F4FB4DFD2860E654146D3B16E66F2196ED3D531DF1CB9C5CA6C1DEAD98AC7A208398AED932407F0C87FDBDE151268F1598568A63D48351FBCF0EA9A486F54841F06A7DD6266CC4AC4CAA501745F5C5C0DE65F652D9DFBBD521FE209AC4E3EB23A6C0002B6C492AFDCDB54C734E5E33177D7CE7FAA8978BB164424F0EAA4FA4E2355A76840AB3DE4F88108741CA79CF6382222B6ADB0723578A63A0B7FFA4AA4ADF87ED04CC0B7648AE85768080C81687BA60D1F8938FA256F2E55C2BE07E6818C02A49DDECDFCFEF4A80232901EAC9609FD187A3C4903809C500D61C7175E9D7B8B84E0DB6EA8429F87832AD7E3FD64E501C4A7113835A778A3D97393E6DB989F9A72E6566B9B76E9B6BF59598DD1E90C9A4E71F900EEA311A79AD7B505396E2E37EB4FB4A9B1EDC6D1A78B4350C3D9FB7BEF91110928AE44B22F11EF7725B15432DBA88EFC502281B65782EBC28674C95888DC49E6CE5B41C484E4CFDFE5ADCE8D44127D122F3EF79222ED41B33B7A7B31199514571993B3A54939995772D9B119B98FBFC0FF0718752D7E0C68433BA6F27B24BB87A8E214CC7321E3DA4526D2AB4A6A83986F135C4DDC94EF78BCEAAB1ECF337DE987DFB5588088376A3ED65B2CC04E2AC06D8D1F11C37A0B3B30AE7AB58CB5495E1367DD032C0800EE020F731DD12E299B2FA2A6433FA2269CBB40A3C71EC52925C723D5B741D5B5068E24EA0E0E7450CA93AC27E728B23290246568132183C27590B1233393998243A03CCA7628889215378D14FF70F118E315438D4CF5C25FA08D3FF02D47BD09132D85D81065C636FA180605983747C5B4637CFC240E172ADA1C7C665B554E2939F5EB9EB4DBC2D762CD5B0AA98D8375B88A6BF6D146F3BD0E0EAD2ACA5A5F1631DA99EB16021B510981B619D19B7180A3CEB0954132351652B14E49EBBC44E77E2E655909DA44BC380E4A15BA098C40F906FCCB6B1AED96471106A55ED79A9C57855A0235D36891BDF79D8C6C90DE1FB1F1B695D8DAF143D26BBCA88F67D08EEF3B616C762732FDC62037504DD8222802C63459EA161E96337B0B16E2D77D20E551AD8202D4FCEBC59CE4A2459C9B3DF27077578061A1AB4CD388D234E0F572B4B861DD3C203C49548923E54F5327B0483339A2FAB01ADC69C914557A0E468EB88A35A411E47035DE3F31C3E0F4B31DB050E6DC6C9D137A5A795CD1D486F3DB02D06FD4E083AA436ED79FA8964A2C52C0B7175FAA37450D6FB9F9FED862F7F7EB23AB5AE8D1076833BF8C9F2C469D533B6E90046E67275A73DB362C84352C3ED72A2E5CA7AFAD1B76349AA0534FA2BF5197D73E2A4909759ED4CE94EAB68B902CE697367A012D4241A57C665CC6EDD9B07CD5F32A03EAD930FB00966AAFD6F8D5AFEF03AC049BE51F6374B962442D4A8BCD93159EEAFFDDF5AAA50B2FCBE69DC036F838327217E522606E634F3E684811479B0611CB67C11F37C716447B214ABACCEBE53DE781089080B2237EB7E06FD6085C69157220AD22E369F049B187EE4D5B29327B16B35C5045CE9E45D72A099C65DE6F3188ABAE727F38B9B1BEE2E7AF51D06D384FD468FF23CBE57850B583AC6723463F2DF140A5F3D1A0AAAFAD82DDAA3744B2FDF817FBAB532A6B4E994AA76EB4DB79F3B3146C88C3332A47CFD72ECBBD0C553C490F454A5EAF9EA45BCC30E560203E334902E8753C361C8E25D75A27B607E3FE01AB4B883BDF14850323B45989051DAA374693A41DFAC2B0BFAF68DDD3A247DD5304A0F79C0B0F1BDEDA47CE65230BBCE640DE97497E3FF046A5A60780A82A9721F883F8692445C779C596A346198373B67FA6ABF13A7670F0EF6486CAC60FE5722F94CF1EEB39952594147ACC330CACD81FBA7A290785E7514A8357300654860E456EEA4150A416677A6C5A3F72B0731018F3BC8FECBAD53F729F02AA43E8DB85A45524D92ADF671180013CE269CFFF6BD5042579E98FC9D944B44B97A8F5F23419BA8DDCAAC379292BB4A4E32A385695BF7B2EBA19AF21CF65687BF14B089C942A4B7A59775C0F44EF3A715F28885A70E8E59E3F787F955E4447424884E69F58B1DDA15DBE6ADF4B547D9B018A15B7E55C4ADC64E070E681CA60235DFE8B963302A4E02893B7FC9A67FAC9E4FCB4795ED6518EE1AB01DD89245C88EC9C270FAF128BFCBD9364E391D801ABF464BF302F6BFB075DC58177FDA46FEAC2CF3C5DBE56972525342D6D8DAEF41567C8778622A7CDF4E224DE6EB7B312FCE2F52BC409FA5D4D3CDD2DC5457D923D3A -MD = B2C7F66EFB52F41D078D1BB4DE2CBA094196F9C26619FB9C9FF22B0D -Len = 29894 -Msg = 2840336A7A1EC10CCE2B91B81FD9CDDCA7949B4B290F1538E6408E4108DE014E5CA133B8CD435B435B75983AC223E957962D943D409BBEE6D1157FE260589EC6F3D229F9362D2E915A4C6858388BFAF80B5C5C58C2ACCB1D15B66BDE4EF8814EBF1687295CC3D27E12487C20D9E84C5F0207CE59ACF5F236560123A7A40D1C2166F884B51790ACC7B322DB7D53BF91CB84FE286B7D98E58530C90ABCAA537CD40674C75D20D60839C101D938C45DEF855BD509DA23FF8EC2D8EE070E6662BCB02642CD574B2649A8FF6504C21AEF69AB059338C9B1879C38C6D8769361EA47A10EBCAEA46C64657A0E634F04741FC2B9DFC005D37817018570BC781AAD83E03E139F36FDF4E345887EA120C8949CE25DFC826753BB8DE96E71B7F9BBA21B812C49D6CFD986A78B81BBE4C9901925DF897ED6F195F93D8CB4CF78644EA45738D40B74366BF01ABD74525D0AFF153AA3729B4F4A7783B84FC19D2F795922AEA174C1F7F4C0CED657FF5489A7ABB2E7743933D1F940DD1284C5A7111A097C619BF507BE9582ED11D44F1F5C70021835BE2B46EA8374F7CDF53A10CE0234A14EF4586CC87B3FF6CA0378AFF1A68A3E2766A7D2FEC58E2E8B3605EE789E9A41D211C473A8CE43013670CBC22A7BD3DDA91D1E5C22E6BACD0E8036B30718AE4AB09C451C0A9DEDC07840175F2070DE82E68075D7C2640470749E721E9402ED86633731D5833B17A887074E781A71F5769387A49C3EEEB5608B3D41AFCAEF8EF112B7ECD84C640239ED97B75295AFA13F77D81F77E95A90284C3C23BA0E660620A39C4C8C8FADE8DCDD826051699660939C72DF9DF69DDA13C9105674569E1B88377FFFF07B01DBA52FB0542409F1432DFE0C14E69F339D50701F75009ED075EC2790601756BAE7EF4CD87CD3FAC00C10157CA30A57F237F7245B1F813BB1871EA556EEDF5297B5FD87AE0002FD9265CE4F48012ED45BD7FD76550E1D39A01B79C50799AFD68891BD868341B78A1CE5FA1F16D803FDA7FBA77F982DA340EDD329152991FCAE607662A5EA744B0470ABE57911F1B5E6FFFAC848F5F5CDBDA22D6121F661F7F4D3A06F7245F7E679528E5DF347CA67E7234F53F684946605AB044533120685C2011AAFC758F8E7CF2C05B632233C40A429D12236098A0570E05B21A3972604ADF8296A2E7ABEB323C7F71858FDC6EABF6783BB0CEDA249C948A7BB13FB88693A50360DA9294389E481912F8B47EB840C6335BC6D9397F20BBFDC0BA23337D1DA5763291E117D61D0B09C7C3483B166CCCBBAFA889BEC8656282DEBF5FD0F9A619321A7D008C26DD5B61CE1C318120AAA46BE12C8D13EB90FAEC612DA6F169B322BCEA4D6002D5D452B386E569B2B9A8EDA58B89C77C2F637A329CC9874A8FE4F22FA04D6484DC41179C1F65E0D5649D0958B6C41189F35D27EA45D5C343C48B4214385A8211EFACA4C504FC5489C323EDF9AF768047FA7F5A63ED7A88FDA532444CFD6C8038B6DEA55D87EC0F9B77FD5C42DCB6B541D3C93E012216CC25B7841687189CAD2BC18D285D60C650BAF5751455E4ED267F91E045E2CF8E2DA2C912C33F460CE51E04CE16B281005FA0D61FB31FFB28094C1476CE500AA212153F3CEC6BB2BA88B3252BC2029B899FE678F2FCA1084560C1E9D3240A4AAADF12953DF43B0A0AE140DD3C5C93533EF6DC06F33D36B6339E8BC32F7E3AF29186A621D4343CC56F153FCF288C164E8D154F733322C8FA395F5F40A6869628488B8EE708863919A0728D1BE7A208CD5B4CC618BF8E962B68BF9D2D97ADCA451D3EDBBC0BA522612BF419C0EEA8C6FFBF0C43EBFD86A696D458CB28E26BC18B6E61372ADB4A26E4B1C5B6F20039CF2881405ECD882B00117185FC2A69C7718F836891DF2CC84DB61927D8EAD0C91A9D22F8DD22E88FAB75795963973422564F80E0F75BE5DE9784E13350E59AFE95B039376E9F8E7AC0209A8AA2E635560A09C234F11D6862B0055C3959028C352797B83C2C7855C67BBED2C76D37BDBF17C120DDEBA5819958F8DEBC4A03763E90F3648F915AC915F5A1BEAB21AB84985A520AE7DE45E73CE27963EBD1E747545C8BD63A08523DA04F2509400C2B988825893C33D5411AD71B2A98CAA2F18E0B9145964197F2C30D48FD34232F0FD4305EE9BCCE53EBABF61C443D4A959DA280E118E0D24C9CD82FC7E7D5150CD7444FA4D570C9E3CE143354410B93B9D0B443087037FC090B02CFEDE0F1213C1C6F9038CB26AD681BDE43C40FFD15B3690EB8091CE967874E0C455C5F93F4BC785AC88AD2A2EB0F10526392126242B9A7F04333E8DD40B60E130FD6368E2276EAD1D813B07E2276FA334B495CE6770ECB80F2600F83DCCA60BF5EABF752BA4FD2F0DDEB1D994E169922ADD4F48C9DFD534EBB8FFB3A759EDF18E01AE12C282535CFA269AA46D03D812DD2F57447F837D747830D52DB04EA1D6B690D4913F9324654CCE386FE2DAE19883446C7BEBD5E1B61FFE9D6ABB48EB7F5BAE0439D437B2C3C2D04CF72F6CF023B96895759C5E9211E61C0EC0C2A65FD3A5042849341866EBEA63F8D6DA7A7A3A338FDC7475697209ABBE40417C431B8520DB29F6424AA1705370C5AAA5FAD83795DA0A767EFD6F604EB153F3C9C9EA34287AC53DC8F09F4879297B0AE58368DA409A33CBE11FE803E752512622F1A7797F2B2CB180D73BE9F5AE160302410032568D247232D85AD3AD4170BE29A9C383B89068FEABE5FEF9A2B4A31976118EAE49195778AFA76378E27DBD2B8BC55642FBA6A1A573A551F4B6B2380EB5C39A6852D8F19D2194E716AF0A9D020E57EAC39C31EB5C628F7DDF1F9DD269798A78B302FF58EA7D2FB23AEA1586C4010FA3302B140161E551DFC12A5D2214681FBCE82F4541F19A08E4D2027CFACA3C69E88F0365FB05FBDDCA4F6E55EC9D1CC90D4D327C692BACEB8BBA8398787CA85AFFE51DE10F58E6DE567F48E17898D51160FE62E08F9ACD784ECD0D562D23EE8AC76751EB4425BB6F8830746FEDD488A413459B25D8EC5D75700BC7B40BBCF5D9C12A075BD91C9B40CABF1F22334DED2235B09E1CE4565E8FA97E310099C69383D772E1C47B3F2B4A36CA7308E5657AAA420B78BC2805F8F99F95F6346C5F6C6E6D80B9937E5058A6FCAFB15471E43322DCA402BE4B581BEF4B63420DD743147D14ECEFE6C44F23C2C8D31038642BA9A19C15214985D59E459D617E49E2A566483270DA034FE8F21084CD162833C5607A83E38A9A289E00131629085A1E45ACFB8F6E2DE1DB47C2B7CA92C06C8E0A1A831D59D7976073ECF7756A229131994036F089B9E50A8EF44834C95FCC32ABE8021F5921EA9D035AC16ACA0FF2A58DD1E4543AD846961ACA7A854757C3B2D6FC97821E8F60E75BAA8111708F9B79F1D15B41FFB62356B938F91BDF58AE323B03A004EB931773861C6F74BB49976D808FEAA42F9E55338ECF7772A6DDF5EEB4EC289383F5F441CCA73868686C0A314FA82EDF9B576EEEDB413FB7F3B080B138732B1AEF7E0013D7E8ED2D8AE4E391515B9582C6496AEDD27CC0EFBFBE623BE7882FB09D7229BFA44F633519708F6C2DEFE27837E4EE156EBA0043A15573E630341E18EFC42F2ACBCBE19B7C497B5C1F55F2FA2C219483CAC3CA6A623F3C0E0981D3E171C670C4237B1361D65EAB4126D59F4EACD405947776FE3666CFD96EA41444306C51E0D51EC0536F7D2CF0449E7CE2B4F401597C109DF2AC2DDF0C7683DEA8E874208FD4860548415D2D3B948F01A7213DB6B687779D29A7E21F954878D39177A64E8A6621C7826E842BBB6D581F584240D2D3A092DC0CF10E7725E1ECCCDDEF3D609368556795BB8BCBC21930E2BB5B46FAFB509D7850285F8885D21046531D5642FC01380D67E6EC2ECC6F53102AAAFCC027B1BF2831379C65CB62EA12A4579B4800F5B72948209C851723F44C96E90DC83C9DC8C4F421F4E7B05E6412CA207095316253D7B3EE66FF9EAB679949C424EDD55FB85526284782E2C26433976438D42138B8684E18A0560B80106AE008E2C88F58E164C73FFD6B117322347BD668DA09A40722D9A4253589454793AB0AA9CB46DC703A5ED7B886451BCAD6462B5179C50C44A483B36AF3F13DEC336D420F3F58F314939F98E817568CFADE6BB890EC0A7443310B3E0BD974AECEBE2EDFCD40B88B71F8C37DCC56286251246C0922123E962505A481F1BDFC611C4F59E4BCB20BC761554462E628C03EAEFC1ED1E3A41BF4E089281963305AC6E09568B74B201C7FC1D32200A7A406883052D5BDA18D3E081CA215249AD37284DF3EF1F03FB9EFDB09F6A5304F7F876C5726FFB197289E263745A250AB7FBAC1E21E7A1CC300FBCEC9C84F91F4BB2CA991EBCD20EEA636B11B409817AD0D34F2FDA88F37E120B8D265BFAE38A3DE629FCF48448BDF0F0C24F65D2CD32B8BE168A1965A4C70772A3EE469F2F530F1A6EC0245D7A11414111DB64D6F3673912485E7D8942AB666AC1AF3D29C52FD27361E36548CC8FC23D6CA9ACADB5F34C644B58C5AF7E44A1FD270BE460066F1BBB9A3CC54C101BED5A81504EF1F5436190992632771422DA86EAB73F67F1B6D51BF742D029BE8B78D615F671CF42D72F15178C5AFB1EB09A5FCF3D2E40C6038308D63DE3326A4B9C2BD72ACD84AF5A92A9EA75B34C1502F9016E08112FDD8D1B0C30ECB2D66C0D01B19E3247219B7E31912F12BCAB60462BC350AF02AD82ABA81289E85E4CA97B25321A9E72FAC8BB4AA8134A6FD7AF66103FC52EB682530F05BDB8D22BC00FC16A61710FB2BF29D9ADE60BB88F023EE79E6F8067323005CFB0163F426E171B1566FF2FBC7356FFBCECF95C207108837216EC80E36A02B0EFD6E43EC42911DA268D210AC95B805DAA924DCCD899D86E89FBC46DE56D76835DE2F76C44046AA353B12469914281A7CBAAA5AE43D5C3B02CFC30252101D7A43A6322AF6AFECF9BE7496C94E8304D4377656D5EDB2F169BA0E269A9EDF71BD7362C9B85ABD4C313DE9E3D7B65B70ECD5E8DD92A1A33292BB77C6F6FCE6E933637F824068FC03DE31D383581D2D8CD1C4B9A690D0AA0C1ADF2A8FFEBF40A7C4C4F487CC91727433F15E2DA228FFF1A014EE0753ACA220D9BF50FF9C8AE80C6DC0D8FA4B20EE4AB66C5E245CC4A5A4CFA62DE96DA49F4E10A6F6DB2A77614C5CE493334B7E84BCE94E04E88E91FB699330F7FCF1D21EA6D64ABC18D2D8519AB97B5E3E4F9DC64917340241FF79BC570AFBE391D090039D37558016A7109207A9E2F4 -MD = 44CB69E912BD50895A0E6D586C09B54D0DA3F6428F12A94AF7529072 -Len = 29957 -Msg = 029E86B315C6CD86448B00BFA2ACFA9DE0A1C8CF0B1EF9E94659FB5971BF036BE023466081E858C0004137D4B42393BAB03B9B34119CD44E16C4042DBC632FCF943F5AE135348A55BCB4B3B7DBE6BDFA42A4B8B16E023DAA57CA7F64C1E23C3570C31D0363E9A7E92793534CF68CB8591291447F16FADB12E41DC0AFE44560A8E0C3952AD0EEFCDF24CDA109E346844D644E3AE00FE5397AA65EEC0466F5D0FBD86AA68EA35C1992E57877A8FDA0B88E948A453EB59603C179D7E299594932BB802D02A23316DFD6F04775CB63DA96AF38CAB1488A7FC8228D59CFBAE98D3A56D54158C0ADAFACEF315333D84D4D68C13086D6F99EF9D5E373ECB21D2417218E23055661EF615A5B97259FC371169AC6CF854C35143A18260668B56BD031DFD3529B104D7B4D8461B77263BD4B79AAAAFDEFF9920E785D783443DD811150689EB42B58EEA5192AC44EA0085E158E7CE0C77E5123AE669E77E59643784D5F713D3A69C770DF05787F370A99D8B85D40C8DF45008C246CDBD7D8E83EC5FD7D7971D1D84BCDF001B0CE93990225055EE019F0DE8872E3FDE8DFEED1208B08E78219BCA6342DC16D66788DEF14D990EA12E25D059D87C2EA262C571D4AFCD9A059D2D05F27AAC2545ADFD7673814B937B1AE970DB03B1FA8BE8CDEDE38E2D2770EAFB34114749C74ADFE52A7A1BB686F8F06015C7C62CF1066B4B71068E1154AB5054D8CACB1B915364D2217EA4561AF2909D586DC3BD54776583748D4BD74FA0A2C2052A90C7D3805BE5FB48F92B179FD62A1C32571E390F2121B507B817968A24E658650DF85724AC20EC572A3EC67B6C4E9FA9EE07688DF862F1750E96D8F0E65C22FEECF9AF71BE6B258C727F9C705768AACEFF2F1627B53A3DEEBD4A98D7B9ECB15939A24D68925814226787350A03EF690EDA5E76BC558FD65921F67A67833B7D91D17D3A13D7ECA1D11A07B2EF5674A314024DB96B6C65144A6331F63E6D962F44AFA25FAB4DFA14521F20AA64AC8891B308B68C8E4883AA530D5D73FE081809611ECB75AAA5A8DEDAA5407EBAE83F3757F735CDEFD2BA25E72ED06A6C0F6DDE04E00AA74BCF7027834DA262B7ADD9E8D79A1C6906EF36936F602DACD8BF89B9DFA2A1964DF999A5CCAD93334565F4234DEAEB1CC39FD3703B413486062EA53AA5222E5224FF7164FC888AB23251AAFA5094FBE14D759865F9BF78884E35D9BD3A730D533D3C928E11543397FE1282D5B212345880FABB0029B8C3258C26B076010B259DF8B72EB4A4D1084D70DCE877D39159A634F134251B7B32325AC521A4909DAF2AD8AE7F82D98E63561B31610A76B9DC443DD403F7E9E2CBB2E69E075021840149C03533CD7BBC6A856E1E467457624458FD8412AF46C1DC3BAB4F6299471B3830F9B2704E150D180C2140F1DF18AD7C16AC2093C3CE244774A2ADCF50B2AB0093E903EF66A142ED6E3E998E2154A523E7CC2D6BC2B631DB74FC4074D39B352A91C303968E9E474DEA39CED21B74FCA6CDC1DF8A22ECE75268E714207CC6E969CD8E100D39099D7A6E2F82E221C238A9951EAA389DE01BD05259135C9259256A38DF333AADE4ED8ADC67FAF8DC2AA7E1DEE616FB308975E964CBCB449CC51DBB0E2FDE2FA63AB1F30DB6577FBF31101E5DACA269B5AEB1021EBE20D3817F72C8014EB460B7EB733A0D29A1EE2C840FDA8DABC86018D2DED10365F634AD6E116E9677E77D506969C6C0B138502B129E8C275CE903C796E9B3C84393CA5E649F83DC76BC7B99984A84A12E049A2D15627218850DF1AAE3D75B4A9BDC51E03B050BA0A1C80D8A23F238790DC86F66D11D1B4A4B577411378205B6C61DB27E67B5807DC0DF5DAA83458C2A86F1DA00AF4A604E91A1E911896880355121BB22C2B5E9E04C9CE53CBC104ED2D46FA3A941C04218B97C7C32D82A2B0500C9132E4EDC41A1426B756C7A36FBF47A4F1A531A5E9C6F2A95E1311A843667393E97FC677B71DE2FAF42810861C737CAB73320E55BA5C56CB8A6BB37A6B74528150880ADA68B7B6A550ABC0E3EB360EDF4280886E04CB0F7B743EE5148EC17A1BACD9723CBD4861CF1D93C2A4F04F7B6CC53DA1D5F2BF4D2F086F894B91DCFB3FAB57F995A4B990D724A98ADDB0F7B8929A72A803473DF46CF955EC6917BDACD1682C0ADB7E5ED060A817A5BFDC0D9284DEDFEE0D34D413E09FD94B7D8B32AE3610A6BFAE78BCE59776EDB28A71B829311558698A8A99D8C44372A867685BDA13B2A4820607AF1300DEE6E935E3C7B3E23C97BE7A503B6D472630682039BC9FF7467EBD10DD47AB29937951F55A9BC17493BB21B8D89916B72BEE6F9F169AA4E89058D1D9CF4C4E57EB42430E58C3904B9A8CC444A3C65D74B48DBD7DEAF9276CF4D3E6D6317312725D91F6CE7A3C1B84EE2C4D20B8EE91F1CE3579F3344DA98D7557685D655383911A89B46556ABA84CA189D8C4F09458C17AB61A8D7117857189DA27BCACD8D4E34E027194D9E26F1F5AF6060ACF7097520D47484E67A94C83915CCB25DF3E2A8E9124E217D942FB015248B125D1A95B31EFA3DFF00B10CCA3DD1E0FA9CD544D185C5D935B9D874D82441C2B3A5B7B70171300A32846AF05C825B068480E99B5C0CF4A33C9B1D55B33A4602468C7B7F1B55C88EC8BBAA4734EF43189964D1810A6594B2E1609E54B0E5F904A4D255198DA65618D5E38EF5F08E389F2FFCEBBA8A8EDC67C2506BC518175D45454613C203A1A4F66CC031B055DC32E0D0086C3A9DD55DBBC8EBEAD579E86523130E5507CB4F3C9679628B42D95069796621B9F29E570AF171404ECADF67458AA5A71D358343EE1939197B9956041104A71EB5208E9E1B1E62B0B816527CA7A08D495018DEE4AD1FA4C4621217FB2A92704D016CB16182EBBD3C743C5357A965D870D675B3F2E392A2F1EBAFC4D776F9BE2AE32B1C9A4805AF87E2E4FDB29BDBBD0207FF9AB321529B2C70CB554A8CE4FE698AED349C82B6039C411A6EAE249F525C04C18EFE57BFD01512B76C3FE9B8586FC791EF095F713226FBE16E75006D713E4A96E9938DA8DFF14F6EA708F18203D0CAC1B9590C62B39E316A8747A61C4EAB228FB7ADAD9BA4015E10B6CA853A650638F95471D4818A1C15BE152A315152206CC2D14EDF5F59AECE9DE9CF29FB7C73190640C738BFB86E7DDBC99AAF141C42B677FB31CC9119DE6C63266F9A916EFB43A9862C28AEA2AB2CC084414B03B9E490CD36EB013E6A994951D7D4ACBB6DF4110B91DEEFC6601CAB0EE07A67F763E64C3E296BCCE92CBB31AEE01C1BDF0D2A89BAA8C649AAADC9BC45EB22C6533CC86C2E6F9CD81B992E9C4F8C1ACBB75945AF0D9D89E5AA0314A0E0E5B98070E66F1E4983B65F6A2DA6735B9D1628AC3ECE2FC9AAB478B3942A3776AD43F07B11B49EEBFD0EB4241209CDA409D97F2B8AC02EC889E93377DC83029498CF5D2D57C9700C6A199FE2DFBA085B144934C0186D78FFB9376D96A96128517E8DBA3DB2D22C512BD8C203851E93C75BD4B5BD7B9F79246FB9B9BFBA94DB0D2454720CF2E8A1C7BD54A0F473AAE56ACB8129DDBDA2F41B6AE17F19EEFEF945C8109951C85B1914A5A63EF18BC6FE5D18DFA8DA6614586227DE9920DBB18995C897FF80628034274B6DA2155D010300BA72C5CDD64AC1CDEDFDB422BDFA59923207B2A35163379ADB173295221690E029910A32CE2B5F8ADD1DDD44AF1CB7484703434449308111D5602E4FA0335497DA547F4552E1FC99E9F08B964DC4D60258F49E0FF019EE43E883681D35D36647D3E446384232DB57802AE74C2A523AA9268D8AA2619E73F35FC0AE8DE5F6370F1FD6DFF0CCAD1276E4774700F45DFC4139E50923D4D13FDD95E6BC6A41A21D728530006C46DE55833BD79FE1476439DAAF2C346F425EB1BE511C504E4543975B0F2A305B72505E5D97D40CA3DD1E4EE0D753E01173A54C1A60074AABA40EDD9332C42FF575D05904295446DC5F1BF44B21BF66E979F3411A3D218045023F1D4FADDBF625AC9475B4ADD282B0D31DCA7FE34F3E1D2049D0068D55CBAECBF120584A57B6CB83CA6F862436D1716B19A477F701311750771EB295F07B702A3BAEE41078FE91F766146B703613BED0A7BA94EA34CD0686034987859DB9F54BFC7F1D243D3F4989D95580246ED06B9E85C24534DFD0467D14105C82DE98384D4D899B3B2183C48E46B808A7BB4535BCA3076A11B6BDC06CEE69A05570C5938E91712E1323CB3B3C2CCCF0CA73B365B85899D2E12DD165C74D7269B5ACCEFAD43FEFF04978BA8A7CB5F8B1E13C950170564DB80048200E507DC1F7C6F6CD4BD89377C6B91CA22BCC81A96F048CAC19F51355DF2FF4AF450CC0F6267BE9B0344F151267CE7EB96D4BDACA968474E8A8960CCD979BF54C1124B6158817FC887D1B968620D974324FBD0D6DAD646AFF5578674E81117F255777D151359439F08A8E897621D30DF814E474A99D4092CAAE394569685960F7789B403B9A12F0EA1D2AE8DA35158B491E9FFE373C49D00C1C383FEA080A6AA54B0DA071CD4029AFF03837AE9EDD8DE561C44F36D8358D4702E2682023AF2C2B2C9BC66457E1E296B8E8BB6837589F1AFFDF28C4E8A776BB9A4BC5B4F1C3FA161D428618001D59A450384547A45EA50AC3680924A26197236ECF60E817229D5BEFA9848074D82B5523334FA7159609434B283C10B5EF8B6B64790660A2C1079019714451A261C4AA45729E4BC724CFB3D2A57CC01B5DFFF303ED350B7B9AD9687970D026A14E9CA977C60595F1BB6599257E5529F784CD9CD6681F515AC48240F944F37D83841343C33895EA6C9985DEC64EFC2F3BCFB6118D00C04A0AB43D2CDD2A24AB74ADCE6036E3B3C5363BD9877E76ED663EB61DBFA7B7792993BA9263803951CD3708B27E311C37E891AFA1F5A3874F3A0525B084B2323E5B46786D613A83B97F64DCB638AAC54CD9EC7CD5D6A83BD2171C69D43C7AD7965FE6BE4146491FC7F459B8DB1CECEC21243091CD211A795A9562FD4B51B2243B78E95C85A76FF2C0903D3FCD330D0C63BFC792965FA781F8EC98FEA53D9941C6A41D2D2FAEE167D8034FB1815B167822282ED24FA28E2344E066A166589513AFA0FB75A3F47C4965587C8A15865F8B3F8FF5568330FD1C965DA1E5700952A71C825ECAFE4E388F00CC4E2F94226C6190F3488BFEAC4AEF6EC5DDF2DFC3B6D5684808EC07C7459B044C704F12156E239C301215C6F5FFE737EFB4A6EBF2115DDF8D69B1A797EB8810E3C7A75D642502130DC6A83FC98 -MD = 65D0ABC30DEED76A0D0C5CEE11FD27993BD1405B2E7E549D70882202 -Len = 30020 -Msg = B298C429BE21CBDC96908288BAC905A5A8D5E47319DD9DCBBC57B9D626180770E961238994835C3FC9F75E5233FDA67A48A639AB36ADC760151E2046D17D680F457926A8214F4E921141871AD6DB381F5D11E714CF3E8568E498CB5BF8314B0B41AAB282F9C51DAEA374BFDFE2A74942D6906FAB978DE45B634E3B3ABC8CDDB2DDD47D1B84F0339A57D923C0A684B07F43BFD552D6880CEADECD06E45DEFFFABD7CB9674BD95A66E830A72CD2356AC926D80E5FEDF224DDBBB0898C17A8497637D48D58D238E6B56A5B2C041CFEF36EC812D4D65EBB0B2E762D28F22815AE05758CDE8E0DA1024085118F041B8708117F1BA1661310196F8ED55C18316289A2E39766444A7C48190EE8C4AA16B6E311BFB1BBADEED4AB40F0C5A99DEE908D25A662A3FE4A8231B1EA0432051B671DD5B8B9BBDC926AB37694992958D5C6A7A570CE2ACCA5DD984314576757886BC89707A00025A375ED365F771BD8C17033850B271C16A3C25E4E3F20895A09085A6EB92D57DA2FD7C754748F61C1FAED5279E89D59051064F559679395183FFC67140F201EC8131C1D4866851FAA4099DCD319B67C6494A1528FC006CABCC6DBC3E98B3C265F95D36AB334FB7840760160EF53EBC631F0DB92DB1FE9051E4CA5D0A817DD9D803361C381BB4919ECD3F8256B81B45BE12CA381B43F239A2DC16DC978680B832C6FB5FF523BB3DBB2139AC45266CBD975FEB834063EFB03CC507E33C7AA5E99C36FAF69319BC7A875E0F60BD1955031FDA2E0C5942CE8B114CD05A97F3845639DED5E9D15ADFC579B505D42F8E219BECD01B5865AA007AAB2F5B8D982667A2628A93F085A7D5060AC00A49F0EA80696E82F6340990CDC5956B461ED71C0A6952DBE1146EB43A3AAAFEC34FA7E49979C590509E3F67E1D3AA115EBE74CEFD2421154BB2BEAC64142282736E97CFAAB53E3BD98975C9F1E50E55145EE613C1391DFED71663AFC34647DA63AFD8A92FCD913138400D17472FFACF2ABA988296A27920D39551FFA0B356FFF9548232E0034E695747DCD4CE6A44A055E65204DD61A2DBD44C6B019C88C215EE4EC1BF11518C7B417B09B0D0ED77F5893EC139136CE85DBAA72B7F5B5516139083F12F1D004198940858C717CCD560398B56D24F46628FE0AEE4ECBCBD592A6818CFB316F236A95E55727C50DB514BFAD307FB645DE59BC05DF1424C9ADF15864F43F8A3E13355371275F854974DDF313C12D222586A703BE6955CBB0C06303EF301F63D1E338AD9C4FEC30AD27B4B3B0958D3CABFB90E3CED1867647B3B2D7305F8F08E8EB22B70DB9CE2DBF5738484776D10503259457305827CDFFA84F74ADC894A0C31A3971C4F452409A0EEE1A6604D26646A69C8390BE5D34155AA90514D2FE20F0E34899FA72941B48C05DE848D6FB2AF0F385E40B4FBD79D80D9EC6133C4ED724CE7B3C6A7EC83C56430FCCB65B0482A175EA9ECBE042FA89B05B2DA895D816633B6C270471B32E23876DD11D7514CCB33D9499E4013490E731B811DD24B60FB5F7441062007CD68C6C60389305843BBB38BCEFE72ED4B93BB91ED22B29827D7CE4050E7B5C45424D65ED87CF9C9AFDCC52C3898E57299B8A4257C02E376E203E7C785D5BD843C357860FA92A71D6464F4855E1AD9EEA6F901632A9C8C82A3A8A9A7C11CEB2C23D7F5F440F5B078B685F5F634A65295BDFC3DFF9F763F03C4AD060B1FD158FAFB6A7D49C436E6413B4397C46BC68EE771C04CD694E2B444FA3ECB49885B107D6DCBF57DF5C203520A617538C629B649050DD07343429962F650365776A303EFF001A8829C0C824E55C6A391C86FE5F60484F624D691B54A0CFBC5319DE495EEC053D023569C9D2D9C2169C456D47FA46A240AC366BE64F631F7E481DC70FE5F95F50F6EAA575F59326509632047D168560E540F01556CFF6DBF73BFDE0B5A85FD5168CEC7A7668BC921FC7D0975B7CEA9F4B6BD7B73C2F256BA0ED9D348B9DFF71C4C8C900CD9EA9FA195292BB580C01454389F7936A701D5D33C541C30B0E13256E89380EB2D277B49726FDF1A4788440D0AAE8D5D224C47F0C757F534A2FF586FE4C1D5E1A19079AE30B6AC31005B2258F63F88E449103E2739FBF89448C0FA1CF52B19447AA63A68082C83E056F376B3FF6D44F85686B8DC7632C7B54F0321CE0D786A1D7592B45E040AC4639D3981587294C6A823CFBD3967D32DBC598E072D17F464DBB3651E9B8EFF7E77220246DEAA5F0A4DBCC55BEF2149B81A87521B4A46462E8AC29EC66E04A88C48D357A08249D2EF9F88627C2BEB1CD985C47D993CDD51DFBEE12F77E1B8EE130E0C06DCBC116D70675F831E7529C6651380D8EA0154768D6A9743A30DF5345584F8683C3322D1E01D4933C6524CE139EB4CDA10E62E4E5A00A2D53643FD5AB751DC40AB148579BA86049B573AEF90641BACC9CCA5221E65BF88F1B9142BE8A74E82CBD7F5FCA17BE88DD979971884FFCB5B92A54EF87C2A9F115B4D76F19318E2829705EA09F96CAE995E7867BB81653C8D5912BA283FF8EB3640C88C1D1D248891E8211CEEFEC4D0B1AEAEEA5BC059749DC9A836638D99B4B171D5671630AF7632749966724FC07FFC41729E8C34CF699DDA97EF033C823637CDCEC8DDFC1C68FAFBBC8CF7EC87CE625E9A760A5AB2B2E7EEE99F3F65A9DB03A51C39372C40109A011FEA379923B803D4973E08D27807ABBAB8856D6DD44D86405D0B92BBDBDBF465B096AD943FF24B5D67087F7F864D5742E122944760904A9F019BEC129C0CC6E3467C59B38AD55E0AE6C3CD2E68C1D97987394D638A0CC6F43407718D84A1E763893C91F9125CC411AE160E665FBC133CBD545AD2C794AC06DF7306253933284C25C4CA070599D2E62E37352A387716BB6DDF2D5246B5C51FA8C44B6DEE672D232402073401A232111F226A343F1DC0CD7C57ACC37C9D42D934E8848C923E7828AD6EC85E7D68A8A1B6EA44D6AF58E5AA4F895742F8F4E56BFB1A4C112AE7AFDB9CEA4CC270C32D95B01D6C252676466EB99120D5B151CD06A393C87AE1A859E660D0EF47EADA6C64EAD6C97AB498F390DB62CEAFBB7483CD76EACE3A006C662D2C2A2B05D895704F403CB54855E2814436C739923381C1146B5BD69E968E10298AF2FA45717475387B4634401DBB024090C7C8CAD3BF91B5B500A2A9DE8615AAC572C9B9613EE8258BCA10760332786B9E0DDAB5766015A5AF845819FCCACD515134D85739B3B34A1E94447EB2E71B6145344828DCEBB13AA7C06926B2082475BCA84FFADFB5188503313DCB020D02805E70CD75DBD73631995A2BF9A4C91656C1624F112BBCBA6869CC56B1D3A965E46C441AB8DE834B3395753DDF50AE449F387BBE5F7278AC733AEA394B2E1B9B0774F00D7CE7DEE279FC75C47AA8F039E60642F895472ECBE22A9ADBAD2EE7DFBD63015E085D09D5984A6EAA97B8360B4A549C08CCDEB77234723ED2587A0CF097C53B6F62C3438487725495F9C83C17C1F98AB0E90630F6C0D3494274DD5DEAD848DD15CC97EB3A565CCD63468DA43B04A54D39DB67707BF23547DE81DCC47DDECB3EE2BE85C27C196D7ACA573E6B3D68FE71D3B5366A144FD9FEB75EB84E3742BFE346B817876E33C1DC7A34333092B7C3669965AD5F2A6A80514885023D7DD6686DE1387DC54D1A47204B428C2E5E030B5FAB022AB1552200877BA6642CD7F84BBBBA0502BA3C1D990C29EFDF3FABF25A653DA7D54681CA0F464407D4C3CC2BBDE8EDE266C39D0F28A9212CAE2FC6F659891E4E68B60B6913B35734ABDA9DEC15CE90664898C9A3A17B19D2F9EE8B573A5B13D7DBE741CA7C43485D5522CECDF04533813C94C49402410D36AD90CEACC895C1E835F4263E36608CEBEA2CC20CF4D82895238E3222D71DA3BCFDA53DDFF460C1C1BD863DCB1FAD83FB324D18C791837851A5AF4CD7251A6FFEA8D3516F0065732F43786BB703EAD97B8209D67B0DCF1F5E1E896D697C400B7F23C1B940975599BF94960440472902BE91EC36FB8EF89FD890EBB06141FF4BCCED820D1A114299D7B90214ECEF1A1E69CE4F69858E24484DA6E2EA4BB17732ABF83010FF5DE9F320FD6C6AB682E79F8CE9D0878C0DF9DDFA4EAC25271EF08280242F8073D483714EEB0B979A283BED42A5270862628AECDEACEB89C79E65DA544F85E501C92492F51EF3A101D3011DCA07FD01E539C427E28D7F3AD1E2D23411D461BF828373042968E2773EB858BF19198AE34E64E98CFD9F685F729A320200EC3D92197E7C1C460C17B1419D816D4769A1A48EF66B44D5703AC0E499166EF759B5EE36A86700F88CBE5CBF2AEDBD51B1679B318B3B8386D50B72F64F6619B95AC547679EE4EFF8CA822F5707FE64FDCBBA81A3AAB569307262A5FE70AB714E4319D49916BAB9E4A0B91703CA739C92248BCDDD58170B9E3FA1B37728BA3487754439706836E0F317641E44396034F0FAA0F2354F8E91C054ED18774BD7B9038566F97E66E6F97C5F2E19DD420AF8FB2110B5FDE61E3859A04D141C1FD9B1BC95F07B81E8A144DD8980852AD316795D94704B2EB0642DC7193AC68BF5A3346B5D0CE524B3548F6727E6C504F1131FF6067DB1D15498626A832B9039929E863D40DEEB2A5C697A0C5E335B7A91B615775865F58726DDBA242B346A0CD269D202D7FDF2C0ABFDC9C737F0D8F3954467E6AA01633DEDD69381D8D2F59DC507CADABBB34617C050C69840AA92BDCE899030019FE052ED43C8309B8CA9B3DFB1630D0995C494F6C105862D45D9C28BAF680DA3EF0A9D6DA33466C0A59A53BA2663B1BA597892EDF939157F8CCE31D0BEAA75CD3792FEC12AB3911F2A37D9F7411FE00066980C9961A724415F2B15D2BB2F81363A1FF0F8240B9E00ACEEF5520786B3C0A3BC636387B1B90DB79BBFEBBF6D53B88857B131406FFC549E0A78864589F1A48C88A58A675DAF4DD2CE9598B81A75965DC97CB809ABD57B45D435BFCAF6FF4E80504302909EBA67D732D4F52EEBD8FD12B27B8818362B3415B4CFF03C2B1707788CA83292E5B3C59912A419B33B3606571D18AFCDB14526731165E019549162CD2EED02C58AF0829E0E42BDF5E701F37F04912356743B4A7763F6D330713122AED6CA82FCB384E6B69880715AE6FDF2CDF32609C7E7944961799CD95FD86B8AEBDE1F26FFEF7DAC64C65673D17802FC1661F914EC3F0031EE8E72CA48AA6D1603D691FE808C469AC7E3B2D3BCE1C1C2BEA94818ACC3510F68ECC8F21D617F02E584FDA7752391ECED7F9D2C7694C32CA7F1F56340 -MD = 7271F52D274C75B8B3B11EA0F01F02C96FBB2826C984FB9D8FDC0634 -Len = 30083 -Msg = 90E91FB498A6C7F7B8A0C76B5734383C0E6C26EF7BE1723E091D483495CE256BB61C837B8C1F5CCAD7042F34075FFF90E4C3B213C41BCBADD6C1D35463BCDD9B7ADCBCF6F2578E60CC690F4C7F14784131A7FB1DD5C59227C97ED98115CEEACE336E89ADB4C5D4EACD35F39D1A1C7F6B5733D8A2043CAA6C30069AEE9C150813E12D6E709B266308F66775488E2E7214F6F9D207860EF91AA3E1E08CEFB40998E32D6CBD40A8ED44794824A9AC8D0E19477C61E14BAF8507EDEB10EF0A5F46B18FAD2DD88B26DCB344982A641AC8F4668A14ADAB52CF793D7CB2B41A2F563B68C66D82E05DC1816525801FAE9BB5BABC6D757A7AFC231715362F4D9359599A75B1BC84315AA1E110B0299A152A93BCF75A85829A77C1C6B34B86F7B8781A0BE1A4D8C4283834D4F76DB0ECD67C131AA356A559BBED9CA7F09B96B4A67BD8DE9E6151A09CF9A7E1B1383787A7FA71C02AFD82543C8C4A3DDD1FC93E0C83F751900D66D0E327690D7FB761906C808D0F8C3092EA103B220303CF1830B30E5BEEAA7242B58F4900BD8196C9F39FCD661DE1E6E4FE135101F1B17BFA7BC04BD09D9D644F6596C763EC5D804D5BE38BE6448AA29D66C7F889EAA43072E89503B07EB1A33F72898D55E57D958E4243DC0C619CA54B7DEA9B914C9D3B954B3550F531A79426669D5A08363F8FAC688B87FEF7F31AA9CB4566D99F1A3ABB575FBD433B2ADF546BC61A796667D27A4F253D6E0289F58600C9DE297C8D086FFD33B21D9954F40D4A5CA7AB9915872C12CDFA555610C50321A1D8359CE4435A740288BD2C5BF52F254CCB6F3C4DB335DF9309D42C7B59F2791442490F558C32F74BAA93DAE9CAEF96F43B9EFC43BF6601C8522AA8EA91588E4857D9835E86A8610D6084CB0A5FE1C4CBE232ACDE41BDB03653F72FAE1F2B2ECD07850146539E68605188F51622D0472F8662F9BB0DE7E3BAB9195C6A660830E87AC17998FEB4D7A84B058CCA7F7F44C2EB4255B34912C81D89E845F8407A74C0E99A6C417D5D85AD3842FD33942363F95AB31064D3F7F8AC75153B84521DEFF84379008F58F013A762CE6824848354D6BC1A61EFB431875B7E81EEA6E24076B9CEA141C65E7527F15704E8C9E3EF20D3CD04B562AE6C7AEB4E86AC0DFB57E3BBA67B584F8D277D2E155F67ABEF4C92414A04BB4A38391C391ADA68DE5FBDE0CE584168710364103BEFB7C6818420125EFC0DAE291EC935FB7CB34994899644519C23FE85DE76F9C00334008E50E1441390A43D0252868B74DBBC78F07E735C83FDFFB863A6F2573B65BEADB6C62030B8918A387CF38B1832F886DE5B66125E18E38FC79225CAFD0ECD087A979238C3E095D83CDDC536C1F1268ED75A057EFABF8358016DB37BD3A461AA9FFA59352975DEC067175105D427198962E64201638E0AC62E47D8096D23F278745FB0D4123580D3369B0AACF5EF52A8898A728A54DBA6672359E808185CA9A20DD69177B3DB7A2B09C85F5EA3F90FCE4DC2B800433F7E534E3CC7BDC88EE12ADF776F731A5691C70074A1B4E791B43B1AC2322477DE1432E2ABCC83CC85567C95A77FF4F77ABFB745B04D0D638BEACE90D566728BEC953BCD4B949D7896536F5BDFAA7A202AA55922C1EEC2388EDCAA074B66812AB29831072655812A8B2BFE3838C58A71DCB6E96D696293FF690361EE04055ED28344FB0068A27FEDD98DFCAFACED1D16DD5B708DB0CB4CEC5D05138710631A42C867A35C3C019D5378C939D0591BEFA5636EF7D10E0F2C7F472716EED6023C84FE7E02606CF9AE9598780AB8E92DAD15ECE2EB86779F26F12FCA245450E3650817D786B2C903ECC7135A0402772FCA23DFAE90B346446F4C6F6D958B41AF727603F71CC7819D5A1A6568E41F393A52FB38B5E9495B2E51517A9F0D7E85500C311C56BE78B67F46AFE9A18D6EB2F3B11733527F4E3F55FE5053A1402099041F89589DA633C4AE785F1C909AA3DCC0D835414F8F8FE0C8B5D9CADE5D28539FD072D878A5EB3235EED4EA6F0D58BF94BCDA8457F5405339DA4D4202358E271B9494EA78EC1523A56D5F7A0BCAB1DD58F30AAB7167DA27287803FBDE3CA3A27AA29BE97E63D19B82734F26E316BAFA3F84E4B3BD18A7DE1EE242C52827C036A259519913EB3C9923062B83AA1DD0E942CF2E964B4A2FEF8DACEF6EEE8CA234EF9382761E4E1F485C105D869ECAD0B87B0AAF329EC14EEC2CC511D429CBF51D69C1DFD5493E90932CFA7B42DFA50A44C928B542FFD4B42FE30EDCC5FF16D0DC208CD67817FDD553C600C721DC1847E5D968460814F18333EFB1ED56B1A0D132AE7FAF7C315393EA8E8C546C010087E894B61930370F6DDDB8AFA7B7DFCF653477AE84187C576B00B5DFD0A260EEA911B9F92CEBF4444406C7B98FFEA8AFC57F41DE243A6FADA82D6BF8A7AFA575807A30CED8BCB5CCCEF00498C3F09DFE5A279858AE7BC0AF8ACC39C565582E767FEF631696C467FCEA5B960B694B78EDF6DBBC11BD62F063B1F05CDEA5769A673BAD6568DAD9104313C7FF92DB63D9B3A6EA29F0539075B0DF6FF28ACD01762FCACDDB1BED02BA5E287BAFFDF353F2CD90A42FE07953378FB0075542CC56A79B9532131F09243292146F0665D6443CF1538B59B3BCD8D8384C38F74CAF1E3F0DA1BD781D20B0447E0E93C6B4F79EEAF4EB6CE7CC8714B91F3F242CA7D2D32001FD319D0033ED3FCC5D3AA56652B1EBD6BA25D3A10C8E934D1DF9BBC5017017BA1F91A900D56F50DD401C4D28380BD44918D44CC5D6888337F20763CF2FDD36AA044C78B453EF72D800D953E174F95EDCD76243E4C1863DFCEBD2FE6ED2966F28686B21E1F554D244B194CD56C2BD999F78E45853E61408D927297553517DBC5877E7F8C5FE0BC5A3A2F2D17CEFD054161F879F895A312AA62EDDFFF4EA2C3F9C6928788CADAF13A29D10C2709EA73C20626CB968DF8D9E28372FC32C8859F5D894DA80162204D0B36AC103A5603EFFFBE20F341B0ABD2EC729C51004EA7AEF215A854573586D07F0684F2327EEE1D8B741E21D5041CD7DC0B461A0A7DE6DE10D3DCB10BC3FB0B6013B0F80C0FC7BBFEACEB6E305403DF2B3A6FE69F29F4420AF8C61CF0D174D5C2DF68842956F9887871BA28E32393E5733C46AF5750B1F814780E1132B973D748089C4F1B6F47E304CA292A1230311D365AB1C752CA6EB119D409D4A583632B17BC7595258C8757D392E4FC3751B76E47129A8E53094E6CAEC4F84E31CC958E15080E870A23F9BC32FA2B32BFE36773420C8D3E97A13F3835EAC1AE9D3A2BE2F27C256A29373BBB97E0716577D8BA70BC13C8140DD364D5709EAF7A27D68622DE3F7BC63CEEDF49FB6F489EF4035D01084C96849F577D1F088D2A9C7E9034B9C936AE7342821422D18D0FB650E55904C8C6089778F5B9BC464E3622ECC8F6AC1ACFA0FE71BE38A596242B611CCB30A10B4E6CCAA6ABB075D7FCE92824C99304F7C6F0EC2509B45A183EF737FAFF0BCAFBD8C3123A80159D05D615149AB07702888152E4C16294EF7D5D1714C8C9BD8129FCC5A377FA8DC7775A17495968672ED00E99445EB986C29B7641435BCF01CB4F08D4E7E056A97D65371544A1AF2D1D80761DCDB419842F7E5B5B56CCDD6D4A637FF02CB18017E6074465B894DAD9173FADDE6A780A96C9B8C71DCE63C668CD42F9959E07C22CBD6BDCE623DD0B7F97BA502BE41704F4911E88B8AEC1D85E73FC24BA01735E88245C0E88E89439D92017E5DB6E8F29DE30C967DB5846741F89C4F531A0B8B3BBFE4E83F8E9E308466158E0B1FDE8109D1B63B88FF80DFAE78789FF9043C8621B52E2105EF1DA058E7FAFC1D5494A9622C81731E924F35FB66DF592CEED3C9A3AF03E14E9375120A4BDDB45529FDFAF20AE837019494BA855D9E60201358DAB1930EB9CACACA1B5B670FC5F17536A3D665AF0A7D92486A01BF0E0690CCD32D54E2D0A55F331C6E983CB74E444E3AC885B541944B2E96386633217A6AD0076899E9BCA605AA02059BDE61A088BDD49317F02865078A5AF7604C3ADB2A2E64741B1A4252961421AEF6156B71E8C55D39C7FA9CBA7B3D31A90FE2CFBD1BD39EDDCAB92E41FA9EB0D1AC6ACB699EB8754CB4169452066436C654482A1301E1DE87E2E4BD88356E98EB40B58131E2789F67F19A2AE91AC80A7C879F5F19E49830B8E918C4B677CF298CEDB9ED88C26B9806DE99E2DA03E5C80EEBCD2830B4F78BB9757AD24A101400A35D65E4EF1FBDFC22A8724CAF15182E72B39A8E96635E391186F3E8EC53ED36EECE9980950BD2D24A2CC5CFED50B901DF1DB6713A252AB312E6C08320A3ECE2A3D3FAB8958294E53AC699707C92AA3C0396F6CB61E44C3AD57124F2DB5BE6AA0F50869E0A951E7C7C1E7FD4609C1FDF5C71EE2ADE5E4C6FDD1E1F8905EF8E67280EAD4DA82568F2B80618F05D9A403EE6F4DF1A31B455A56FEC13AF352C2ABA7C560D7EEAA80C36BCDD8BC11AD474AD71C4DA42823E0A888B230612E01F3F8D5CD3BCB54B111258A3418D624ECC0D6AA7E9D4AF1D7B9FE8652E133456C796A98585383FBEB3F57AC9796FC294FB0BCC6D6A3CD9AACC24683C1E3581893363D05E5A5FB3D64508BA7B93CE7DC5CE1C8BC653A0B055B2BE2295C11BD9CD427F3E5D61F9EEA94518D45CD0551C3D67494E372D3F68637DD312AAE7788E9B299ACCA0C592D585A7F505044F77967D97C01FBDC736694463A1FB3A4BB40AC5ED596FD0A188C5542F3B6C5DA2DA06A0A68CB31C8AEB7AE38C3C5587DD21294CC69A1E5087F953AE4C04011AF269647CFFCB95961562B1BE9B4BF41691E80EE832D4FF6FF390E2BE3E5FE534A0683C55E347695655E17341AE660DF45962BCE8905FC5B039C30EC914012105C504EF2141CD5C4801F89635A8510B2E4EAC1115E698A205E41B36FA14F88FCF071CD47441B86EFB0D3CC081A0FBF0D81E57796EFC2C0940CE154D592DE272651A706FC24E63F526E28C9FFA8989EEBB8218A09EC8162121ED62E0D21E872B3D8125506DD2A5EB7E13112E10F299F0692CEFA39F871DD9312867F59A68D1CF1CD142D8E0D583C7666A666407AD17E793AF38D812CBB1DCAA06BB75FF8BE45C45737D565DB8627B70D3314B2A074E8CFC71720409D3451996E25CE9EDF53123961111D667E24856A2E0B823617BD0AF79FB3E9AF5E53C31838567FFA892BBA19646D05E44E26AF4C663722BAAB6B69BB04A35456745902759B6E8339E1E0EDADEE949E0AA2DDC87179A241E6580F91B82851B96D287B53D2A897AC29DC641A9CA633F59CA4E4A20 -MD = 963A39635D4B70811717BAB4BE851A7D71668547E038EFF3F0C307BC -Len = 30146 -Msg = 8A384F734EACC2AD8E91BB4114D875F51A88B0EBD0880549B74045D00177B94E5068EB9AF8F7BBF130016729438579D51D0BE7423587B75F9DFB88651012A10278C36C921774BBE81F18504B5E098DB560D0FADEC975EE90EB79C8B4C62B846EEA234CBD559C3CA40AE46AD767C801C7420EF35210BA8B954A1448F43977C05AD4EE09AF8F5AB7E515FCAE84976B2F5E0BD300DD6320181DD8D8E76F1F0094DCB76826A982C7CDE7B3EDACEED0F6ADAE060BFCE5A98B336096FFD5698EC52B9EC1FA8BCE0370E4E8250A6C2C5F12A00F0DD6140FDAE6FB7CD2B95A777F49DFC77F8E13409FF60FFCA736EB6CC1BB5E41B8D845B9B2101C5CF70E5B55B1598E979649418F392FA91CDC171CE0413A8536436C426857FA0C0F781E3DD99AA1E16D619F298F793139D05E0392AD4FFBA7A059A32B78FA80D7058B16D0B76EFE0EA74C86B6B40799BE0028991F99E9BD0C54B1496F7EA08BA01DAF229D067582B5E2097123C0AEB8DAD930D94F69A7A15074C8AB59182B678C1D997D76CFC4DF83E75CA8C571E8BFB6155F8B9A28C0AA8C0E4EF48EE729894836642E8D2DECE9F8121A96DC597E192F9FFE31F17557C1EA5ED0496F77AB0A3B389260002EDE5C09114DD3CA61F8874FBE998CA5B20203FCE7F7CBF9F22C00FD0B551AE80369C16A41DAF2BB447F8A236B319AA6A8443B94595D637AF898009BA8FA0374AB1DA5C13A9CA2DE9095D3AE78D517ED30BDCEC8457CECECFA8BA99EFDE214D2A47C52864778FCBB7B2A6010F49B2B60482CC3674BAB98AB0BBB3E9039AADF13B315EC671BFA958BD9E50928613F5188A2B8F1066EECC73214BABE95FFE608FA74CCE594425B70ADE810D7DC5B9C5057685B76C7F7C1D0C97CF6D45C16D139B897BD321EDC62CC1997D99237B26FA8D14B49D732065044E8EB6B98F67008FF042CAC6AC8A28431E9D8AE8BC1D5A07055038C1F7AD3E60D48EB26EB68E470B1A2B7972CC26EFA95D6293C87C054FC27E7C1690DC4AA4D0D54E75A851C486A28A56275103AA416322EC480A74C56ACF0984EC340DEF3A83E2A279C7AA4F0329623C48173522257B7F1FBE6C1351C062F84E333418332F0D0B1BCD2EF85DDEA22C9F105D6912AE3A490E7FAA090FB122040DB4C821F34DFF9A221E870F50D7EFEE183DBE50CC55CFD1E6B17CDE7D4538A0F13C1C022DFB065B83CB258B5C388184A2FB864272BBAE6292159F6A6CD03F4023B7FDFA8110AB3D3D02848AC08DF64D94FB2C7969E2E45DA576994931F2CB0E8079E394B2E127724DF2D792B71F895CFC6F5E4E79A3E268060CC32409689C9076649DD56380E272413AFF62100E29DC9B50590D319C5E9DD5CA60D09C42241090B983B6A3ED534141916B433103D80575A169A0E4812B9225698012E2EDB532207E64D849D9C5336E3FE0264161DD6BAA72E2B7CB1471CDD15518CB1FD815C47D913E10B261CB381353478A7E9A2CA9E1AD017DC1A0412F695B07C2D7E649E943250B4A6E90E5535BC9F5270419B223AD680D820ED8C9B81860824294A0466F15B6697A0C80E37DCDA69BE21BC50D37AA0B8F4028C8A6C90096A28B7773D755D52DC431F37314A91A55CFD7620C3B79680993EB16723F9E70F9D9A83FB34106E1B4B032B270C2904F0D8BFD39C2D142E7AAB9E616AC95C3BEA32F8A86844D3E23FF96B9E0CAC23E9013AD275D98B4229C03A0C88A983DDC9D952E19A496C88A2DB002FF82C92C030D559767F423482D7C58901A5B29E48A7A68476992F34B37D8EAA9D96464FD2C4B6D9B5C5C6D8EFD9E274251E729A7A8E74625291194434E4AC6C84091709DC2EE8D0D895062317F50F592DDE1F5929D857DBF22D5DEF1569BEEAAEF0E9273323943F6587C8D879A133C0FE605A85153165F1DB5E3569E15B92B0CC46CADB44E6E3A3CD9FB0F30F0A64AFF8D9719CB2CB8C50E8C5DDD6BC9A5DAEBDA35C63912496CBDB6B32EA2E0FFD6824B8A0F185086BDE6AAE42798A8E0EF66D720D8CD7B8B4A5B26D438E3320C8F7D52983BC8C45F60AB52A1DCDD4FD8D359A1EEA4890A4D33E0DD1BD01397FAFF48C13CDBFA62BAE92ED00728DC8D9A16E4CE540E9B1DF31E1C517DD681F014899334656A5943947E97EBBF913CB9FB26E14D4E89D9532DCB416826517110E25E4F3CD4F4E08BBE87AF2CF1A2575B51E3C2C2156BAAE0D038921E2AD94663FC57DA26E99C54D04266B223DF4540D394C78541A6ADDAFAF65553A32321E1A7F02A0B062FBB704150D7CE99D1084677B2114011E3F1D125BB59E56A8ECDE57E5FBD3670C20477628B08ED2AA918FA7386AFB898499CA679078F444A3486579DEEDDCC78CC281F6D6D647085B30540F5F3ADF9C0B075865F1335154976231382F0C88880FF69C97C6A6303D10E1020FDDBFC877877D3F34E923BF188474CE1472C9588399E2C8E85DDF937DE19CCAA2D33B86DD47B79C59B65E293B30D00CC1DC1BEDD4ECEB076AD45D84FB9A8A8424E7C59CBBFB02B7EB32FA8EFCCC42ED913A3A5BCD591F28131E1F21D56797FF69A40EE2D979AB07A049BBAA8570B16C1C15AB114B5135413FBD6C09F44D0A464D0630560297B0A4A27E9FFA4B056CDC9C58819644D362B341D89878BF26542E7D11D38E24F6220948AC1EAD93BD91B51CC816AFEF63B521F93C079F9EF56CED405859B123C2AB6B30BDA7A11B6A5E5259022D1DD40E97FD47CBAD8AF06403AA58C86D1CB3F63AA08179549419B0E2108883ECED37EF764C7D59716E09F660D507D1DB8EF9D95B08C965801E801A2D0127A6A2D8487428A348E0EA995E4B42283D4C49B07B3AB8B430168410927F2D7C43D05D0EB3CFA827F837A373D78579E0352F04EB02F7DA03933AD5A42344C173E27EF1899652BC071600A03E5B97DBF9BE656E972D9EC6A395494948AE2D46F2CAC61FC5796D54BAA73AB570DDE8D47BF009C06A96E90C6E9A7E655E83B08945C08AA9F100EE0CAEAE025C73ACEE9E5AF16C65D4EB63B3EC69E4BA39ACF6A88ABB9582047093F9FF647A5DE833C24760ECF981D457D5FDE2476D340FEC8C41D24BA72E8C213CAF7634BC557DACF88E14B8436EB09135779E574C7C2DAB18C2865520EB91E8FFF48A2B4621A702D0B4E78BB739C5C2BD73FF4CCF5528308848320218909612DAA7A8CC2242FEA0BE7A7E789C917FCF48510F864C4D23D0D28D8AB4CA8B573887A61C7846A8B6C8134A3991EEF81D889774FEC5A0AD2D7690F4EE3ED0BFC9701778DB80EA191D10CF951483CA8BAD016CED0D51B38BF6A0FFD6E4B053FD1984AA86F37C12E753C7EA18136C7E289DDB7031E263DC588A3434684C2D08B96F0419CECD5659359A81746C00B915535A596A5177D6779FAA1356746B4FEDE3E1152C55801CD93BA43246F0BE71548630312462FE4B345DB4C85D79547D0C9C2404536CDAB8A7A69FD2B73B9CC592E950A9E17F592133094E54399413A3CC80D5B502B9CFF90275026E264AB51C73FB50191F6C052FFED74A1605807E1961420FB3A7D241F5F3F939B9DB2B0425671D592464CC226A20A287BB9FC3E900B4463925583C687D576BD708AC0819318CEA837AF5C392CC60A942710256DB8D759D3A3327012B2692EE458D8D3D7E4A9BE5CD943F2898F4803E8E5A18BB70796426012154CD918D5726D6F28F195050B1DE17D822CAF61AC9BFCF53F8B42FE1DFA64427D0582CB889690983734E375181F6BED74F18B0D4E42710C6430813DD72A4933FD064116F11A2632D8E60F4AE8B3037F66B62CCAAFC13F594FADA115F56725A47B310469B80B5C154BED9B0C773D454152ADD1045C3EA8C6A27901BC4019150713F7AAFF9265EC918F0D00475A22A4653ED89223109CCF04A7D7981521FD84B20988926658372C89379C8820D12B83647EAFB544F26CCDF0F491BBD397B445621FC277C18248C44930DC55B8CD4BE33E9AE0BC4AAB8D16234B4A1D126388DABD5A400BB04B418CE27292EC0B9241296E2D1CB174B0122CDECF3670A3C0377AEE20443341F6E7238F6C6F6B1D310B10BDAFA6DFCAF838EA45950DC983AAC463ED15C62B5017743943B0BD8DC213E329C0BE1D0A483EF6E5DFC023CFA1DC748EA260B022632E1CC30C2A8CAE916CDBC50035DC2C37AC24EC5D8EC2942CB14F81D3F259C5DC2F99E878E211F2A2FA8268E01A320EE73565A03BF41E4D50B5D44AD6AEF8770C2DF63F398D5E426CAB2CE3AF9B10A1DBA7F06CD486E76449F464E0EE54B10911E71F44963E6EECBD327F5BD6C252D225AB802B81B6D57AC2EBDD98B6F8E34DAA3CC2C39A9E5582B3DF7F968AEAEF15067646BFAF86F572A30BC99A1F7686FB7EFB82939D310CE454785E9F830AD0D4B2E993B8C22F4354349B097EC579FA2065E9FF2624F4A651A755C4B7FB98169579503EAA53EC5E7E147831FA5E1A7811551B88C10C52A1A01F6F006C6343090689DD0999F6ADCE011E152C5DD0F48D562F7D78D6A6CACE054E40473A263418401DC34633F160AF1F4F3A05881B6D3EB21C58DB85AF2D18CD8FA746BCDA43F7A1B36289CAFE267B65AFD7093D45E431DC8E1546DDB9E9DBBE1517F0D773F517E6409E0EFA0FA81805B55AD90B9AD3B301AA27E23986A437BC0E4714BE255B24D91E49F248CCA8A36E7C38EBE0A0184EFF424ED4952F812A049649C10094E976414B4E750C46E83BA95887D98A9146DF33AAC13B87A70CA58999AF128E8F2CA66F7AD4E80C7DE74C771C168A6AEC4AD9AB0945BD493458E0DA733BE5466053AE043E0B91B03831B367701A38A1278BB6B3051F4D1DACBA1F1E5CAB0DCE2056BD532B91E5B8320A770EF0747C1A6058AB6FAFFE3C1D7E20D1D7DC4E9CD6CD0A90B4D7B631E052289742D69D6291D1BF5015A6C98AB7516D010B2033EEC80381783B23A51F2C45B696F91170732F0C0474D30723751CB8C4BC04C31DC021BEEC4F46D6B7C7B3F0CCA2817607E2D99334D1A55E4C119E7695F1BADCAD09604F7892865036EDA21315F20A5D4B4987DE2428E1E9212AA1AC0A2A06F30171417261FEC2354B7BB5CB8136F5A2FAC254471BDFC4C429964FD4769E608212CBE2436389D817D7D7F297550E1D95C67BDD0685873A894959F6CC95FB49C35CE2E78E83BF8ECDBC267562FA67C1421389204A000DC7A8BF74395ECC52ECC7E7F6A95DCB54605ED18675364D484521FB9A3D848A71AE06A8AFF6F12FBB8CA4E400A82E94305C1C48BE62BBE3B2EDC4D16B314B464ED4D8240981ED6E7B382A80ADF8D642A879E62AA3D2787BBC214500A8B2023BFDB48EC76D2A10E421371A5FCA60E9B3F78D298C040B6EF7F1B80 -MD = 879803F424826333F05DC258A7114ACF1392743457CEAF419DE71E3D -Len = 30209 -Msg = 09A54FACA21ECDD63B98E6A3E22A85C55397AEDDD110061A3093843192246AAFC95FF6CCAC5A3E123DAE36DA1613390ABC39B9B188EA88058CB77EF68F96D8B8BF1CD85A12915750E073A219855205A1AD0EC8AEC5C6B19455B53AFEDC36A00D807DEA3BE6310F0AE2C2198971173749DBC848F4950D0C607270ABD2582910B52C6584FA565CE0C5FDD990DDB48C2E7068250AD4A7496D36A167435D3576C63A1D1F801CC5DBA618FDA01EBA2B6FA785A5252D6DB7F3E63C92E5F8F5D22E4B6C73511BDB0CDF8528FE72E2E4ECFA61C51582660F901F098D04F3959F51AD3EF2548FF79DBA42A42E2C7C5EC2D71B80CC6E5EC0448FBDD1A3E480FED77E73522CC7583F335EC85083700A37FA6C3B226B534825C1F142CD3CCF4F8F8DC37235354F5F8C136E8D808E098C28EC342D755FB53F83C4E24232EA4375791710A0B3C001B14E22CFE20CB553A5A2571EEB2C5D43193D4F516289941901AD497E06F35A2F83502D10F8EFCFC25100CEEE4791272F60B8FEB8A03902987B05E6F43D46CE341740FCE5D80901E7887498DC082D22007334EE4C9091AA5BAA24E4DEC748033A10EBCD07CD09D6038C8E795CD62EF65A444681BC3B4DC2C0DE8FADDAFBA9969A36CA1F3E04CC030402622F4877A78DAF1A0D555139E8A18384F005E6C15207E90D85926D6116362313139A833882A4759818CE498E05D809FD7B0D5EF59B46D9C2C1C3E588D5B11E02E831141ADA87A403975A460528C2A1D4BEC63CA45772A026D5FDD78000BAA918E59E1FA8F9F83385C8A2C8EA8A59124184BBA0E78329DD4CAE8783D9F79706F0746E795DE876CF697898109D9EB2262DA6E2CEF745B966541610C2B71C06EEC77A6E52970DE05E1758537970BA43742847E6C858952ADCA694295924801FC93EDB828374E10552FD594872133860D6AEFFD31BB2C1ED86B5AB71F1D2B5CEF02AF5436D5CF26F289B618042F9F1543812D587A658A48C45C2054CBD1B6E2A14F83EA1001B655224019B1857872BFD0E1EEEACB970A9E9D19CD1EF6606B337017753F9BACB7C074481B56575A42CA2D9941B4C4D0E3047F709A3C7C73DEA236413F413021DAC29BD5259692520B9031C43BDB3E0647A6977926DAD36FEC2C75FB25AE338B9EE8D95CB41809CE0FCD330B1A5C854961B307A0C9AB580032E666EA739E2749B8F972A5880BD611CB19093A668CFD6C43D1AE2CB3F2167073580CA845F2E55D9322F95E6A2E2DE097382AB261CFF6D6C520B117367FCD05F39AF43F4530773D73FBBD0868BFD87F372A9F8522B2C44335DDA5841C92E239887F9DFDE2855772622981E3B3407A0648D39850920107D58E365A9629CC5668713B9820D2F19C282925E0AD35293076311E659C93AFF36E50B9BC92B46320B54E252E198D216DB1566B56333DC24381DDBE6190587019B9794192803DCC967F7338E6B087411294EA8877D4D2E5759C5189E79B23ED5ED792D7DF44BA27540AD0819684A636B09064B10001EC986E9AD11A988D6AC78FE1DDF5F4D4CDFAE4DA97CD49212EE41E69D1616DA11366CFDAC6DBD921E0D69A9A66A7F7E3B2C43570A58A11C23773939E2B61FA657A0A1F340E693D254C05CE6BFB767C2A9975EF4A55E0EA1CDA7D4E02B0ECBC572E534740EF2E99833903CBB2AB1AC5BB5DD6369FFC72B0DB2948EC05C5F323343F5BAFD3804097C1551BB1A05F6441C6A1C7B130087E28EF9A690B9FA666F3AC479C160D8C0496A0C0398B9D0C793149EF5F8B3BF780B46C31950986E74298F2F23F32359EE192CB19A82E3A0D80C726894F1ED715EF2CAC699B5BB7FCE5074CC75FDA4061B6FA8B6723437020C90CFF49F24FDFAAC051CBAE561CD65A3276C04DA316A2E043D46CEBE7FA5B948DBD91B8901D97C900A1F230DA9F6D26B9FEDDE5A2CF200913E09752425D4BB7755EFB329AF486397538C478DACAE8B055C871A0D64278FC0318A7FE7F96E400492EADE2A6D6A1E3483BB9BE46444FE837D0B392C3CCD285BF8191064F63FA398ADE6C08EF9F0667D43737CBD578AE9EF91D54595478E8F37020973B0DA71FF6B8892B8F6566167B75A11147D19A1236327058670ECB0826A90CD50CCA2E09EFACEE8938E49B4B490E1178993B07DBB8525EE590978C2ABEA2BB41688455FD0F0991213A865156AD8EE860209908DB34301599BBC18444BD79098C07E89C3A30771C452873B2E5E5BDB61CD94D40A8B7A3C270E819CEC10CE050DF9E23B2CC5BCE4A321400AFED065E320CBF1616DC8F0D12E97CE4814E6D33CD1FA39631A9BFC4AB58929F88880884FF06C2B064D079230A5FBD10D279DBD6568767B80189BE45131A0858B518BEDA923EB590167433B8A2E2D96962E18D6FFE1497D6A44E14EFC71B37C0016DF56340104E028479A66FB704CDD81B42FEA9ACE9B9F59BD40457BB2560469C17AAE452E7FDB4BBE2182FC1AD850A401E20EA846D7940F1413041F683EB6A5DA323F0A022B433107E3D787FBF3370BB96CB646BD1352AC386E7B13AA4B9D2ACEAF6F21FF57164A8EED9B9DC7FF868E42AEE5E134DD1338D969EA92AD499F0C4129B2F7B58D63AADE0793736A4A09278EC2C1F5CFA114C671434C6CA46F4145E6F57255E1FF56928C2996D1980387F3A52E7F9C43EDEF724D5CFEA332129C3EA40D66360464ECD185CA25180C57C74ED14C4DB96B5E49601399F965ACD19FF6C8E6FBB99A6E01862AED2C5D4E1C29C6F886663ABF778C4C0A6394317BAD42657AC49C95C766D3671C004EB3E89B1621266D47FBF96C205F38568832E26D65BB83BE97DFE5DB6B4CE02C739F749AB4BA148D988291399196C06832B0B0632B4C98C69EBC389499DAA91E87866A82BB8D8E62255122E4D30739522A34E2E08E9C28BAE25CFF500D82D27CB40A52C8EB8F73A04D6FADAB5BF77D1298CFB2CEC56EFEDCE874362551A9CEE05C3F7C6D55CA60224205603BC94AAC6E09C1C05B9B53A2D4BFD43B2915610217E23DE82790383EB654D3A1F159EBF573F18C50EFCBF04DEEBB244112681752F746C4BEA95AA73FC474F856A002F4DC54CE64A10FDE40B1BCCA09EFE7E7796B1C7445C5773B16DB8EAE74A53D1D89C2A0DB499E24A180C710577730119D732471E64D2BD5F67BAF52277B7C57B6D974C224F9219522D3E37ACFDA577C68E69C42F9663B2CA46C6CD8E64FA1309AF4F1B2051A3CFB9E86BB53D9F4189880CD13A615121D941EA1E330C5A7EB7B4B7D09978488531A0DADB988D5DC149BC2624999A1EA9E325248CC59A95E869D617A90AB85C758E7B1F10BA94A34151F46447F898332EAD05342B7BD1EC0E4865388E47F3007CD4EFAF7864781D95DED19AA1CDB54EC329AF9408B252309C6B88990AA9DC7EF4C87D804FF8CEAB3CD264D79BEE6F81A2422090DC146EF9FF4F7214072D0568D26AA818358B7E40BF8C30DF04752B8645D21DAD8C377468DAEF537B534E716B3525210540E105BFAB24ECB61299FB5A51AE26D6471F1FDE9A9B1ABF0DE9DC0C3A7941BFF4C9E6BB1E4EC6197159937D747A75CF84511D05C651AF7EF504AE04A8608DF51ADB66B97F87660EF9486B256D3015E53B99BBEAF6398D8C7A3783E9BFA973DAF2A9C9F39693EA61FD321681945D777C0AAC747B05EFDFD0A260F2F4D8DEB802E895F34582E55B038676A730264DE3BAC086A8AA37DF727B0B12484305F8984189CB64BE57526BBF00CDF44B12CD55AE6BC0602FF59A713FF13F9787078A0467C6A8C0CA4B6BE6330C766D5844CDBDFEFF942E3D5BA461596FCAF7572B15166F7002A47697DD7AAF6B97C4BCEE4184035E0B2A52C5E02BCE790BDA1D94CBA54AC4056323173524C22DF7D26C71A0084FE9FAB6A4D7272845507BA57BF953DFDDFB9375DAF5D5A8F083E4EF82B495DD15600B9DE9FD4F5EF9F40461BB2832FB9DA4100C83CA1E988A304C007A9FA040235C2BBACEBAB6D4B21385A899CFF5ACF4C5572E15CE6360048FC4AE4046E792CB46EC21F5BC9F3A2D8AFEE4A6453C73165A108C9F5DCC26BEBAA752DA0A673CF23CD8F79D49ABC8357E3D06501BB6642CB4B7F9DC90AE8CB52EB9C6943526636EF85497912128F1D03566C56EDFCBA528AA9D1CF0DF88FDC3611D32AFE8A4E03D79A21B9259BD1C8E57F6737D7B0448906DC0DE53CDF7730E77B9D0A36F619050D741CD8987833F90561A2289C677CA5D9C53E5F1B748A81F937F06DE882B8FBB4BAFA2CD990EEB41BED906C599DC8999BC6C839860615C6ACEF66F6E04588244E6E98D73B618F3FEAF25607FD9AF62A6446BC98F7296E02A90AAD7DCAAF7370765A49B9E16183DBBE5DC6A26F867AF4D5215E61CC2B60B690DD4C68EB9CEEB1E2C5612B27628FF587CA3E2396E6B2C56E4B83AF1175E1547D3570767B070271D1E206F647793933A626F46E52DFD78B343C4BAAA402E4855E7F387ED071E4128BD86ACF05C3A6278E8422A06C72295C9B961B59B637ECD26E4AD6E5D7436AB22BB616F57A5F5306FF47CB09437F1DA297B55E6622A9DE3DBB3413BF469375614662F4172A16A75D0D980E0AE8F6AB772698D1EE162023089C72D27E6F095F1A8EFC81A80F0963353FFED478085DF52748EB1E649D561DE80B907F899872B5B69198C90B15057BE33F990D377F822E41539E86B71493158B22CBDBBB6EFB3C7EE0ADD1BE39E607D6ECBA2237EFDF835E0F3C33684EA794E505F8AC14BDCCE1F53E59241863A163ADE1CD8A306E13A4FA9D7574074D5BE802A77D1B2EA04A4CE79F22E34D52248CFC22CAE1164C7950E9D7068E5826CC306985554325A45D310B4A54D85F230CC83B0C1CDF85AE97993526BA30A01F2B34ADAC516A4FDC47863F824E8724EC8D977B96AD5C3564A6C5D118CEE4642BD5C33BC9E7E4CD9C6B2F104BD82354B54BB2502EC399A2E119479DA99340DB4835F4EF65003264A6B31CE0BB820D12D757BB92DF6283A73863E791A77926E63239AAC95EBF7BE84A4156E0A5C310F27F4D3B5A33AB8AFEE857615305B20BF65A86A25EDEE31567F6C29AD2EDEE8EDFE42DDB64B42D7300802F55FD27288D55ADCCA3B657A54880749D0403E5386C3E26F9BEEAC25EBFEFFBD1188A233E3C08D66C0165CA53E5CD621078327840080F0BB5BD64991D8EA50934B597FF5623665098051F1CAD4D55B15F3CDEE14E06B644383503483ADB95C6928DF10F9C5B42B96069CEE4B67CE6113700D2B0D51ED30E31AD70B196B7626971BC11171FDFCC14ACFB10A85F2E1E462A950B28405FA54D12D29AE784C4BC8CD5685FE5EA3EDF6971B40B61B63340A7A3EA1357D53D05D5E4DDF25AF99DD88C00 -MD = 591BCA249C8D6C59CB4B3E090E3A0126599D155BF139557024AFE690 -Len = 30272 -Msg = 86A9E1CE8C1F20458683CAD72CBA1A63789E61F8CBD6A54343064D72495A8C686A073A819DAB8582A29ED75B327F02E001F64BF54D4C7A42DF210B5FD2E225607289DDB67D002492EC0B2773E86097E631709AD777E9A12B14E6FB0B27D7A6B072A0CF1071365D04E7648470B6BE00D588D9378C8E1AF2F31768C56DAAC4282BB3911969B381371CA46B62F3EB1F50DF99535C00FF523D781B2519E1BCFE4309AE568B1AB92293FBCEDCAE52B1BD6C605BD35EF6330A61ADFD5CEBE62B78DF1C95168E41260B520B76C40CB767CE844837CC486E66A6D6892632B87AFD270A965352EEE8A8D234C566BF78B5390D940948F3DCE2E973D68656977939A787916922CCD949BD41A0640BD44A33CD772040407BAA11D95A6F2EF18E9F2974F1039C63C14FFF476D976CE57CAE6F2ACA0218AED385B6D91262977D23E5A0AC9FFFBDA87C54C895902465BAC9C5C6BB3E10A276C3AA7EF902B2FFEBFFB014A77F65383A277B10D1EA736B6D8B845408251046A1C5548F718E948E290BC94C86A05E030D7C0183CD2BD3F3166C8DF648FCC3764AB9C27E77F06BA72DE87C79CF7F8D6E83A8D5CE6287D2B17B9E7D90B25B9E757BECA72368F9909D8935179524C136B0EA3240D4108265558944D8E77701CA4F187BCB48708F4C015CBDB81DDB09CC6AFA46F4734F7853B1409413ADA5D5584494034F5B4517FA7DE3DFC07531CB6FD213A6874C212805DF0C8DAE74969E54CD9AC4AE778ABA8CA52619E379EA17FD109572F2DD38C031CDF58DE8F00E1E5FA2F1CF2EA39442116FD90DFF3DBC92CB52AFAE95EB17535D48415998F1235FD966499FADDC4135B269F6DB55E392C0D0B50E2A94D53B13F220567729698F4A6465EFCE138A5DB3AECA6EA2DA5A4311706BB8E3AC2FEF19CEE75877151898BECCF75B0555347E52C571B8C0001ACC08C3BFE64FD455628DC7B8BFE30873760306C548ACEA0B7E8C6124065A16B04AC50998BFA57FA1F595DF8272A0CF7D4CB401977F048D9530E5A1E5CADBCDB0A3D524B6CEB7D16B5D62725AA083B55BA595B46D68310EDF2DA3D6E0D50D87414E6421C6C31F51FA56BF9B46ED5216549E2A2E0900EB2194FD413A40E5BDE52A85063AA11E51739F7325E109E16882B9B8E0E2DF04727FB3EA6C66E415F2FAEB65CB02DB101D97B47932FCDE8F121051363FFC17DEBAAF557DE6314E8BAEEDA9D79CF7CB612BA87C7A2910A72BA20EDF2F6927CDD6D6792B1C7973A604B7EE9673EACFA9C014FBD088F3706CD762727169BBAED092D80C75B47CFFF0C6AFFD8B7883D8A8E1FE97FF1FF6E6F39CB47D876BBACE345E205900ECA0F6A193C1150748C2C5EE97EA8820B846AC7AF90634AA62CB6E9BA39C5D94434E9DA3A566CA2A089927AA9AC9A5E13F2CAB624F2A7277CA415FB3CF19CADCAFE6FC586E0439BFB120589C29012C873D5ED751E37727F867D0FD4E2DFE3B3CD53995A0F4269A3DB407F5ACE9FCE499983135FE2EBC48CD7E708680444AFBBE55838C92D23BEF0713A9FA381789E760FC64ABA84548461F62DCF93300BF8E1F0DE9B1E2FB54F3722E0748802704532A156367984604B64EB400559E907C1A2FF27D3D91C523AFB0ABCCC7575DE30C1AABCC4D0AE4259F0ACAC4B2EDA798970E4EE99C39C09E85AC281EFE136B835ECA8FD709D93C138E2C32E3D74444AF0CF0146FA8E90C25869EDB12ED7FB87CF170B65F203431F6C74C982FCFDD6A079E1487F1A8F2F1B2902564031A1ECEFA435B6E6A6F61BB1A8B6AC55D6E7C8709291F1DBF627EA1565F1B834C3765CE94A3A0E012DBE7D70146ADA1C74B08F21C38F05C05149EB0E7A6CFE7C16A1909CC3B5796768036813142CEA62CC49634E07CA2FB27476019D3F5D32670AD88919579B91F79126415896BFE30E16B82289D8BC775B5D1CABF9EC28C4CEC19E6EBC91E40976ED3C79B02DBB257458B84CD256CFC559E5BE5B9EE9AE24270E10448D497923A71FE428F13FD1D9FBB49F58EC62C5BDDFBD34276872BB3E7D55FDD1668F8856CD04B4F616B7B21E2B4ECA9F727903D935A8075FFA7F388DF6A89F5EEDA1DE46E26275EF5E5CBB60A0A745A38586FCB5BBD48312E6A665558CDF315969C2778F270CA2A2320AB4B99080A008C56E05D7BAA9E82FA53B0463D74CE409BECAADFBE45A3665945BAC2188D9607DEF5546BB895E5EA89EA1E0F77EC533929A7DB48410EABBDB346A309BE64DFD207DD20702341F1819FAAF938923E44B041F1127679549E3BBCCC5F8F6EC7131952522166B5352420CB210C09C20357CCAAB709628A92F57C92A21C1C9A7A7F4F83CE87C6033305814ACC8101013760AC25DD61148AD63F8B96F1D629EE5F42A09EC413593FA03B60E3BA22423413320C674A8ECB1AFEE2D6A7B0355EB8915709C1D4A0B42741E2958988ECDC18ABE89AC555543BB9AEBC35243397F9A3F7A53BAFFEE6BADC82D8A5D58F20856219F28D5695EE59BCF14DDFD5B703D93F371CB608FE010DC96688060B59C185B043DD8440558BF6975FA7B7933350FD69D70F9C9C1B89675F4B08CCB7CCF67CA457AB338F744AD9D5958E8EF51F3203F8D70E05C208A310AD2ED9898B1601EC3BF5693B020ABD7FE2B5019901B11D7407F13182311CB4E7E2368542106E03B5B3B864A42649485915B2584C62FEAE05C047B1EAD2303245C3450D7E872BF3D3A65D9E6AC6DD623D53F879000A3556D46760D0548A552B83ADC917EC8617E953F4D84064E3A48A795291240ECE56DBEDAD22D05C78752ACDD3B5854FE59C217EFA6F538D15EE1A78B5C4791B06057E593B3BB754AAADC08D71F7913A2202D53C8BD1D83B2142DE9B70ABFC0436312C1C59193F63E2D209F1D5F1F81FB4E8FB134F656887A71F68C07323FC534CF6ACCE144C4F7C7C41818B18E76E15C1C0258E5BC63887DCEA5F99738BE85CB1F4C9FDF1FAEBC534AE8A285C80F13B2E208C5FE4AFBAF5F6C38ECCCBC8B1E9AFDADA591247BA07F16BA9E4E36F940E569834F1F80CBCA9CE8E3EDD4CAF4D32D37EF45264864B36A29E1729B2AB9AED0C450B45F9D600E773DA9D6C5F780055306EAA6D19E7AAAFA8F41428247360FE13BDD873BBC749DCB509B02A76E79E2F2E528E4F381B7BB3AE24B26FA32A21D7723ECB9853C1B606A54F14B881BAB00C2231C770448656151F7ED9E4795600122C2FC459C872CF53E80E4241220882054708CA33B2F3B4F21FA384884C810512AB5EEA4B6612D3E4DEF6040D9E5F3603E6EAC73C73CB79CD540435ADA4A5D9B82DF4545B69EE0F4840D2954E023B48DA0444564FA3FF4259B7D8A20FCB66241C6F06412669CEFB3C8B9E9E0A83E9CA0AC744EC7A26D896CD43E994588278A56DD5827E2539B55F8DD9F121725527B07623D4876ADEDECBFE0B4BD41510BD30E3AAB253098844C60A0B598E69DB2E1CDDD77A964DB8433756B5F954453A2AE8620FABE6737B615DC4006D03327DF04E65C8E80946D9FE5AE5FF38A58232EEEBE85797A0D332B55B21770B10015379A9A5294404F4D356EEEEA47C129E40B6014C19F84CC1B96E3445935AED67AB3A1AA53DBA570AA0F29BA19B2AE1A6C48E345F39A1E1A28B2BF637723EB708D989EB25DECDEA9ECAE0B2B2D93FDDCC68377EA3FCD2A9386B0CEC6893BC3A57867B2E48201A6C019ADEFD0F05553B0554B938D744872D061FAC649A68D834CA52A4752AB4B36471C5D4C65754868C031FC35D8050E50E803960F8175FF0BACC08644B51D316DCFD9982D076A6A2CBADF7006167FABC7753084B7F75C138B059F145A668C59957637BB8F7ABEFB8922D509FEFBCDD357F15EDF1F62BB16B94B6A1E7B4E353256DBE17B2A466E6C4AD72D25A177AC333BE505DB8BAFD9244B5068BA7D4DD283EE08459BD47B2276F3C25DAC5D7001EBD0E8892BEF4F0F17272DBC70D15B626E3643E1664CB7BCB5CB6521C0CC8E2E08357FFC3A329C72DFF9B4F0009A3011931A1630020AD83DF6A803DC11DEDA448260206475FD7B2D0C4AE8057EE9358AC8EFEFEADD2835DE0EE6D8F5A2593B7EA0BD5F8A7FB0D003E5C175E4080EF77FCEFE8C34FD09AC0C5621E034BA475DE9DDE49D2D80DDE836E6A75E9B257E46373AC2CD1C81F8898CFE8B2DAB05D35C404477C13303438EADCD2502ECAB5689C3B0B01CC6128D27784BB283ED8888B204160361DAE14AEC97CBCD81A9C1CDFB372A543FBE7C0314613FA7A1149221A169F58F26C0F0086141292B10B9124D91123D95074E53EA029801E6B187E5D28D83EC90AD51C80D9B350813CC019C7E5A2BE39BFCEA02BF08B865E6B31C302F4090166AE3A624F19A219DD7E6ECBB29578BC96A919E04B650D794FD17C81EE27AE97455939727FFECF7BF36789BA34B04E8892FD2236D6402C80884EEFC9388DE1621C746D663582305B6A7B3E1D8854AFD6339785769D4ABE411B9F990A42A5EF9B43C8F5C459D50559F61690D7816D43CA9B15BFC4C5DD5A2F520527729BB187C14CB494885142BCCE3D9D1737EE57518A1CBB8E9194DD9D27276E875EDEAEC931B1227BDA3BEC2F7C3F0F5690C5DE5E9DB8ACED68B0963D35535E6F8962FF45264B0112B88C9BFC9212027DE6468E86F1AC632D4C8B264AD1EEFCF2F5971ACFEAE6B8925617034814CB3C9610E3B34284AD38FADD07DEF491DDFD660F4A54880C6B71D9DAFF18B5AE53A7274AA6F62C9ABCE4538E5CC76E9FD8B271778FB8587F154BFB0ED98E20A4A5E58D21C7201E70D268A744FB9DAA1A3DBEE501C6552EE5EB7E98FB426DECB5DB8771F0D1E8692AB8FCA7B62A5B14093DB30AC68518CF728FA8757677B67B95A732D8317D47A615EB6772817E89AA523940B9B08AA503E74A5D755E8C267480B57F398BAC10FC8717688D23A737822F7A031A3E02993896C57324B0C049E0D0A3B6EC32BF78DC16D5436B10A3988112AC87AEA164C0612DACD8FAC6ADE09EAA14B443524DADC696570F8BB9219FDA4AF04DDABCC83BEC86A4E30788242337C17D721DB5FA208883D2F00AF1D1599CD58D80DFEACE67F180EA8953F92C16BDA7E620312CF4599B4807A705C50354D8DCDC2D4B518CD66225BC9C90BD3383163B24EFF6DE768EABD77E6EBFA2C2EDAEBCE46E58ED8B858B55ED87FB14E3489BA11861ED0434D1C3C4D2090D28BF72ECD252DF9DC34BDC41DD409049811FAB93254B2395271244772DBDB594E2DA076906D0E0F85A025B2FF3C6EC1088C5C37F85B92F6EE7DB41F7C867E35B1AAE99A4E6B60F734E01E5980B608022EF2439D582685E5E1232B25C71BCED4A91E3ACEED3E6A1488D8B582D10B7971E9871E5AC2E6936EF2D55353D -MD = 9BDBEB56BBF060FD04E854C7480A646ACA77C8EE8A60AE07A2CE6D7C -Len = 30335 -Msg = DABA4120578CDB56D898142B47C77A3198F72A3E9971374445F5443B5249A6BF3ECDDA32D16944A3D4635F73F55DC6DEFE9A21ED2C0A9081B23E9C884D17FC2B17BA66DFD6E01E740700FFA96FA8D376525F42A0467E4A3FEAF5A299070AA8CAE22126B15AA72DFBA2B31E2BE0E866963A2B54EF6A38C625F5EF02D91D9333E4BB6FAE5CBC125BC3A832492DA209B713FBE2FBC223029BF9979F568E777B7BFE337E777E023B612FD5199D2C88A632EBFCC221D69270870561541527FBA0875578735D9E2B78760AC6B644833FC49E6CE25E80DDD9FA873890FC7D66B851DF7EB0BC9A4B52C6DBC88106B92A32C15986DAFC09A8F56459E4A771713FA36475768DF97C2A1C5A442DCE21FF5605148A262DF35BC72063648E880E4785B09C1CC2B31FB9C94D2CC3A52B958005A9311D8C233206DAB5708A635E5BDA205EB5BB96EC9A379F18BF227311E25E509625FA03E6399BC6FBE973E6C4B5A7F2FC956F68123A84CC6F5FA07E9EF4706343AFCEB7E93C81D607B48BCD37F450449AB17F785B489DCCA6C20C55DD1DA92CFD180F04DA9AEC62E77AD92BA586E31F4A652D301E7BC47BD2823C1CBFB2B5FC67B6106882EED57D912C55EFFAACFB5E96F4A2FAC17B32E020C5238183C347993EA753211C97CADAB590CF0E02D12F391AFC91377ACC6902CCC9B91066C010AD1C127B2FEF03B0968DAF80AD1DF455EA0265CBBD5D1CF7F3B230B08D50E4014C547F683523339F4EE40DCB146112E35ACF13C6D47DD6C9DC1D3E9AB428A30E1336FE8D98E203D9C5C35EA25E497D8139F87BF58551A92A21F0FF9BBB465C7383D654FFD52152DB61040E40CF02DEAC8A78E46B00C3DE5F18BE7670564EEEA84DB71549508B488D3482330459D7B388A973AD0240E0D87242AA74869E157CAD698BD534AB93AB52EEFE981D25F79561F415C0D6BF3D7E4B6FCE329BC2E164D72A8BEAA324AFA96DDF47D6475B690FD9E1AB9F649100A090AC8383E3B6E20F567D882EAFC3F99DE0C5B47E7BE703D09048C7B0EDCFA841AB033DEBF7752FE7CC69ED28E67DC17823AEE76AA80E2370DA604EB0C68FCAC53EF143F8892A9C7FF90C898F837DCB78C1D4A2024DD7E25BCB0B3635B7AA6B41B84AFDAF2A441003344C04C006137CDAD8EBC0BD0AAE2069E93683B2700014B104EFDA30431F508BE5A1B21EDECFDAD843FE32E4EDA429FEFE378CF5C1198EB7B6D4395872F427BE5B59322C3F0123500AF9D2F8AFF4377A2501828B625D72AE8C13B6AA49E5FA5CD4737FE6B4E0DCF56643E0D602EAC8D59C730DCFF4AAF38F56A89C58AE0DEAC8453242C0A5962DAF91141F7FF6E3F667D8E0705E629A58E6FB07172B5E76C86615C2878DFD732CBDDC0B092D09574E78663D682E04A27BB6347DE0544F201DBE6A56950458BCEAEC2DEE9CAFCE756F1845741E92F6208FCDEDF2F5C50E6C7391203E577160B2FEF997CB0EDAB1EBC38B598BB5CF3A5294A6A14F9A7944D9581BB4E3113EB95235B3C685C25A08D60B0CB97B74FB1116CD87D59C46C5923799DCC64306B60852858EA2EB973EF889F97A56EBF738BA45D523CFA8A21B0EE587820E5611A90160CFE1B2AD0D9181EE6423A00194112384F92F4EC44DA6F254BB53F4803718C58F2F168DA947C52236A90E1CB30CBBE3FD3F421B7D0193727A2EB17CB673BBC403DA029EAD7C44122BDDDA05663BD680B8567E765A25DE6EFF76322B7C6DBDDD8C901358A20CC1B2AB370AA30BDCAE39F0B05E7424CE53C14FA5BED848B5B67D2FEA2D196E0972F118F8A06FD5B81DC57B7329C6706EE1762BDE1F1799D27909022AD72B35B3D255F6A97DD8EC769D3B05782B28627B7AC1E41ACE8198B4A566F2BDE17A54A7BCCB85D4CB0DADAE8044D0B8D1573422D1F8DFF485B0C2CA2832A30AEB30BE365A520DA8DD3B07467B4E687BB3B5D71BFA0177F5222C95CC4219A68DC23E2CB65A72CB927D9DA3527E6058F357A80B393B3074D11346659E76009577C7A8C1670DDBD4601744A02EA850074DE5F6989577887621DB714495012A0788F0FCD7ED9D2693AEC755EF3C42C2C0C0A4CAFBF9FA5B79A2C7ECFBA3EF53BB059CA5D228CB48F6A75E2FF84EC33E2E79A53F43406B6EE4570853641B0609782F98747F82AB39557C1A8973EEA9B3318CDEC0C22FB23019E5E6CA325B7443CEBEB387A79C67771EA06901EBAA8E7CB0F661ECE4F90B6DA6D74E019ADF626993DD77AE1A09AF9A5D7DB5AAE01DFFF4B090EA81FCB97A065F7BD6AB33836872E70E0409F7D55BF24296CF620ED518B600D91290F16A82A9202A2F55AB00AD33710775FEF2087A73DBB21042B54F42CDD0701E8254B62ED2445C050D644356C8217F7C97676ABBD9F41A4D23196007527F37A169ACCE7B16B8CA1EFA4CCAF7CCD729B83C427B8046CCED15B941E85AED541AE93866CE8E39201AF567F849AAA4C1232000490419AC97B01344D46274607C1B26194E60147247599799A8465CD4363B6BD78AACE961FCE99FD5CD6900CA9943FBD92192DF7790E7A5764CBFE154694624CE0A55CC44D15812C2E10AFA1AAFDF0476492617C6B7833E70D95685AFC099E37B96CFB1C5B7CB1810EF5F3C9A06F7851998C41514760241F625A8F0E95348A67AA3272764C04668DB973B9B5620FCC50236407F43EE319C8A959C2F46C5BB7CE91178F5E2AEFCA16E69A7209158638B13B345FFE7A7E499AFB367B9919350FD1DBB7AFDA56E9D0416C67A08B01608F5B79514261D6EC556FAE92D24111311902393AD7105DF48C04951B80266F28F9E8A86F65EC6D98962EDABE2E4AD453B80D9A69B7D7F1BD68BD32BB46626B4617FC74871011D81E8A0EE36036568F87613710788421C9D7B98309B106BEA7B364075314FB28947428D3D6279AA28325D14031A8E864DC815F66B35E42CEF4499BC5E5C34DCDE08722A46BFE45DFDA69F7F7C26DFDD7B7869ACE54FA813DE4C1A6F734E7EAAFFB0654B1E01EBF84062C91129C31C3D1A6F542656363207E18892C374D50C98C073FA08EB1A0858FFFEE66976007C319F247884C866DC586A96A4868EF8BBF56C10C7AD3AF2F0012F0A855209BB379B67BFB5335CF3F67EB910F844331CADE7076F02E372068A13262ACE8A6B0DF2C3B64D50FB9FF9F154C99F1CD9CCF1C51CCD881466F0FEF43AD441672B95EF1637C88444F95AFC4265D1EB71EB7A5E75221EF75B6D0B9CD528A50127FCF9E6797A253977AF0271FBC75E13421A38567CD52379DACDF145E8B1C3BBCA5E270E8A97BAADD458FE4B704C57C21828EAC3B276B2DBE82ECF417D7C038FF38EDA68E9641034FF5FA9EAE0B5B093B29AE401EFD372128E3DCDF6E017AEE8B6145314F41200E62D1F3E0ADE3D000581733D066EC9B348072234E16756CFA748847089D192E7E159F613FE88A98564C8D7DE5085472862A89E9647173B220DDC239BBF4557DB50ED143AC44BDD0B154066E8AB9307E93A04369FC71A5E304CE6D73F95B33D3D203524A252E1B44240DF7AF1471530B6B7A1C047781DC287DAFE0997652E9576A5EE7A79D9B6923AF2AD3DD61AFCC60F80534F6654299F4EAF4BFE347E57EE78E756DC934305F9E0CF366BAF8A5A89F9D8ADEF0D908322918E455E1E9BFBBEC538306C2C43A5A30470F906D3E2BB562417AF4F85942AA10FB44620F8CCBE5E461449DCC839A2187462609A30FB643178D78F2BBA131EB32A32E9A3CCFA7AD096C8C8DF2C1BC4C5923F0C480781E74C872375DBDD678C08062D4BCED948179EDAD49AFACF26003DBBE573C036A16C2CEACD84093E7EC14A721A038A0C5E3617E3B211A4EF8CB01FB578897C98230BE927F9FB11D52B3DE01A03C6A58050C8B4842590F142F39B7BC4172E5BEA3DEF0F38ADB6C00A2B80C786F9D59A4194B09608278F5EA195CA17E1B54456E0B97E9BBB4FB9A0141D9A5AD998402FAFC7E7F2364DFC62868A5BDAE000175E58E03CD4A66CFC5860AA307F7CA4BA4B69FF79F61375D28ABF05147C582552EDF5562125800EAC470C8941547B7983D2E52627CE5B5C061C5AD58FA4251F9B00A817EA7C79283D83E0D9551EFDC2F2000B8B81329234B6C312712C4130ACC53EAD077441A00DD456A382DB353347BFD6B56BBAEFB798CB343726E242ADA9889263DEF3256AB77D5B3EE75FE1C06AF1DB2843A1968F1A5DD3E904ACB0B73101A4A42EECD2CB45AED77E65F8FDE1118428E2C01D5269CB1A0C6C6DC6C958A10905C258F6C7481D3B968F40D8472B6653BCC50EC4E3299520E98BACCD799C06F875C74B59BE25D1F2FF2FAA957474F013F6D40F3CB182CE4F19AC3960636E91C06F5525A10F905F626ADDD9E1D938324B4271B414CC8B45B23AAF54B03D6872E98BF493CBCB5D0F33543220FBE425E7A18E15245CBF25CA6CEE042771FEAFBF007796823402C47B81F66BB29FB1D1981CE5B6FD8ABBD3D8B551B197B6D5FABA4A3FFF0308AC2CAE442E0695051A043BA2A2D1F31D73F8E3A2B843F79AE46F6FA0E45ADD1A6BF6B51B33320A40FA6C3AA05D3795DA3FD098A8FC01002F40D7EBC52C815E0AF2EA9E4B8ABC16081A1C5F1A8C138542171B8616A706A54921D057DFD91BC3C0820B62FB57523E793F560B80113982887E852DBBCA117EE48E1CFC3A2BF0275736788C488B68395B367AD2EF4A5FC133738BEBBB1846FE57B420C369D35D7367893C811FF1486E25B86D515B988B56B803C620E3F774B518C3DD34FBBAA0F03CBE7807D13960C78BB30CCEC5342345E7B6010C615AC29AB344D79C7D3DEC241A015C568E243AA6BDF2A7E01C8FA0BED2D97A5DE9D3FB8D2A405F0E52CC6E76BF6EDDE890572D6D88C65CC5EA619DEE2BF9A2CD7506843292AD34A05937712DD2BAB65D39822658124FC0675684939F6099498D2019AB2BF0E2F3A44239692BA0D69A9D966A34CC6795484DCC95EBA87B4A0BDFB510BA5BAE266686F98F2A8FE281ABD3FA4F1E213F9EEA4A2D71CF4F3E5ACC8EEDF0C9CBA77BF1E3A252A58D1DE32CC46413E41E92DA68305D2442F6BB39EADD1610ABBD15F71D8F736316D83642AEA543B52558DBD42FFCCDE0B512AE05FB0258D668E681632FFB229794B358D301DBFD5E7CDD66931127FE284E5E2485639E00D8B02350291712A0D66340862E54D31F005151A87421CE921B793D5D996554E10B9B38D0CFF6410785748D464FAA470AE81D4C611CB882E10B904E6BEEB28081C32215F6F08F618B2A151682BFF0C84461A6079526411B1F3988E6B525B9A83C289E10FA7D5F4D91557E90B8BC88C30B969F4C2B94ED1DCA7803B2676968588A55E19A75F446FE67A1161E856676C422CE89FE48F537BE -MD = 17716456795DFFEB4FF3B2B08820FECFA800A36BEEABCFA44A4D1C45 -Len = 30398 -Msg = F5D09EB22C1E51547D0A356C20821F6B1AB46A9C5E7EE221DD1675166204DDE73B02278E3937DBE2D8C734EB820A57A0CF0EEB5E068BB6E7B1FD0E37B453A4A262A62CFE22483EB37D780A07495619F9C947A67CB277195559B94A86BBA4A1A40BCC465E0BF1769B3CD632BDDDA4AD5D1A76AF8331182C7D59A6009FFBF18A0740F62A18373BBD6E6380CCE92032594131369EA027689257996A3D4DEE79148B6E2CEC94287C850948B95F8192A81A80DC23FE686E4CF55C79A34E90764EDB702512394552AC2801D870715EE597D500B7B46DDAE011D34C372B2E3DE6F7362D43D48890E3B0BAAEF1857BB7909F48E957652AE3A866D0A8698F202C62E6FF9E99F14291E01F7AB0E7522AE820F417FDD3E8EEDC9D4CC13BA4DDBEB66B8978D2C6EACF944FBB37AD8B3B23C2293070BC9A2EA851DBDF466B789CB685D89E764AAC52EB3BA0D6F20B3C15D163732080A1D85A0062FD9DEC3FAFECEAFBF088B20E90AE14F3E96D1355E73291D9BB8E134476585BB1A066162A0ABAA68E7A6093855652BC3F8055FE0C9E21FF156BEE783AAD88BF85BD9BFB0325C8C483D1BC5C41A9D572DC35A256B63211DDC0D746AEBACB537893E9D6E1A9DE5BFB0096C08DC38948CEAC024B46947222C91CF24B88C5558E06D50E82A1B419942E697F385C42BD3B7BC5FB2FF73D6129D5066F34D31B6B77C248A7E0A3DFD843E0DC22E284B3FF03A3000D28D7CBE4EFE635D9A649BB38A967E3B721F75D3F829D11F60DEC1BF3AC992FB9D8D030B944B6BBD08FC745BB805D0F613BA823D54E5487C1E9FEF9C242BBD8895D6D6FC32BBDFC7C9EBC72F8994124B7A446D3307A9A6EBBF91CB16506F121751ECB3C51D8B71286D39C343D3858BBAD071CBDF598015A65E20B6BAF04F4ED1EC2D19EE2526FA7B74835AF2314DD1B462E4F6861868766985819DF3FAA2292408FACC9B94EEBDA2A9D2300C21A8483E887D3D253679A6E8233BD56AA7A6BAF2594E4DD09E977831EA06759C5E7A4BBA2786828EAC3589C2C032CD0FEDB439F4274FCEF349717C82101742F278E168CCAB0A99530E236DC4930945063930747D281E37F296C31F62E67E87F35F241280C62D364DF541DC6B1BDC5455E347DF4325EBCD20F4C1900A7876D2B9713BB079F4C7813A6CB40E35060D43E9DFDF7B43794EB241BE04919A1461FB05A608B5DBB567B8ADB51F739E6F2991D6E2B2A1BA6F4B212A6D54A5EECDE54FD5C7AF6B39DB222F8ECC36026B0F44E3EB76442D0172EF9A70DFCA9F4545DEFF7C442D593CB5FC015DDB757CB406EFC606782C2EF6761E7DCA23AF85A499F73076AB74CF401667C76BEC4C259BF60D7469B17B0B0B44F5F15206188018FAC97FDD9FB86C9AE2D23650B6519DAC7FB270D70EC1DAD601F781D33813F5556FEAA4ADAA60605AEE01CE3DB75823BFC74478D2E5377D9AC0DDA9B5E144693147EB17ABE4F5409B122F6C62457DB3473026ABA87D1A2957AAFF173524B413757430015940002107113AD03D25C2E03D1601D012256C233A112D36C315A80E24E8931A375DB4E9D9402A52235175A7B26F95531F22A602CDF851355E910E058CF777E124FF2E5C1F40A8F208421AB1374E3F60F5335FA8B655CB8173183D55F75E01F7DC4ED41326FF34D1149817481923A9ED4A93438380FFDEB7032FB2185073969C99D80C9935FFC83627EF88532ADBAC8FF46FC407F8D235E9146BB5EAB95AF4759ABDE75CED764319A2638547568CBE4FDBA2E5BED3FEE57F92A220F692856BD54C0EE133597E8895A7C104A781FD96F5C8F858640ED2F5386B18BEAB8E3360C8494EBA499E4D4B216BDB1F8BFB03F37ACAA3AECF21519B9083CCEA44DC0A5322A14DA1811C658029E9FDCAF62FE991ED0E84A501DB2A23909A83C63FD18762AE258774EF5F02B4EC43F54E850095B7E55A4CAE13126787F3C871B94A2A86926DAD3897050D13E22A0C60F3CEF86C98CF4512651F27863B5C79B0D4E7F9D46B00E5F9186C4199DF5676AF7DEF5611CBAB04EF3DDEAD0FE151BDA1F1674537F71CB751B5706DB768972E000D5F9B8980012F3AADF95947FBDF8F2EF26779ACDA83D159EADEA638B3125073E5679458A13E0BAEC7ABBBE7935D8F67D5C185E0AB8BE20470829F0363DA736125188A6438E90BA1097BAF464F3BDAEE9A25A872C402CD895F3B4AD708945F65CC2458861576C78EE1B37929210F8B7F19B42FF664E5A9B21F7A05A891BAA90E38161C89BB5EEE2FEA7DB2ACA8CE8F622C0372FF29EFFFC96EC9688216645075FA6DF3B7C3EA26679EE74A7F2A07D35E3DFBB24B5E81BEDB348F8AEDC7245CEC7D0301B1A42970796755D7E06361313F36A0A854210540A8A584EACACB329766275B344F56DD9868B71FE3D9B5B31C42C0D4C2260B4932A4D880676D43D125B295E32924C4DFD165749987CAB7A3E2AC0DF261ABB60C9126E371CDEA9124CBAECF4E3B7CB75B81B660EE8A2FAA0074AB3DD39E8177768A0F87283E3F2678D86E915207C4FD821203169E559EB4BC703230EA2220AB46DF9FA303B1A1F87FC956E308C2810924B371DE1CDC08BC06E686DA8A1BB80313B58ECCCF9AAC9C725C5D7E770ED0D57BB0D5250F4D2512BD6C02CDA80C7A8A01A90A9E1B9ED8AD25650A9CF68F9810614B904E1CFA23642764A30CACB2C6605409D6E91AB63E45A0E461FC3E9122A9EF10A5CB08DF4BD971510FF73FE20082F3E40E1D778603B53DA1E193515479B3886EC4E920DF4382F4AA35B38D2239070F78FC8BD3720EBAAE226A07AB01259CF718B26A6CB2EB38FD056271FF49421B4FA05D6577C7622795717DAF5118E1EC5BE8172842EC46A6BCF60CD534967247978EF79EE913E6CB28D8BEE4D0336EEA6839E48A7BD5C619A113F6D3FE26354951E42F278071B59551645303BCC169D50D8F6CD6C9C30D02E45DE5E53B639CE58DFFD37A0825C4878B4EDCA33B20199580C263F533606C568CE264DED44A8457647020D76AC2090409CEFDFF0B119C39B7815A84BD8DF629267559474EF0EF31DEE52A181139D1A31A53D1217C4FC5AC0D0309751AC03FD6E5E4B5B37CDFDBC421D527BB99D1B5175E95554C2E925899B0B54AC4F441DD520C08F3C45DD9D72FDCA0C7532009AA92C72FE34F4F2E2625230A5174CEE99271E2E6F582AE4C679B6BEC46A3B3B9BBF41A5D4CA520C5A8C2DB086F4FD25CA925E1D083563DE023C2E6D26D6D7BE59F136DEF654F7D3234FAEF4EC93505AC04DA289715250F2968433F7BFED48042E40B67E93CB286C1FCCFDFD41C49802B41EA92C80F14EE9E1BCA4A501D3DA7D7F55DC896B8018D0D9A989AF3064488FADC9D07CDA6EAE5A69A95EA4FCF164B24168867B1114741348C63F2FF306A3B8C95BEE7F1AB62A60BA640C9862459FA60CF93DF58A21DB6DBC559CF9A16F0D908450241CA438F1D5A68A9C0A39FF710D31F87DE0D3663D66062E1A27BB6BB6E13257775F5C79BCF53C94EAF08C773C5098C9269A6F2E3F65673A8F5C0E849DDB4832CC490AFF48CD0F23A093AF815DBEB57929DC54A01D599A5F041272D43DCAB919E2DDE749344785B7A23038E540805DA2F17E9391B6AEF8772093E0BA9701C830BBDD4E2D20D3E303E5B9CE1DD6329891348E52569EEF705BF3CD5041C7477463DD7AECD84BFB866B0BD3614D946EC6E6DE295A7E35EA500BD48D6401E44D5FD357988253ED9CD241D3E0CE0D3ED6B4D645B2096E36DF8664A59E08937EF46AE3CE7677C353B672C748BBD8A6B50625562F2292D095EB66E5534B34A1A4578519AA84A989769B37BF31348ED39BF0B890662F0F6F572EAD4F17ED590F0263E4B083B0D96052CF26E0708EEE15DE519E98F593B34094DC42B2328BC892A26EDA62A00DDB980F4F3C67C2B2BF3C22AF3C9E2A1B8D19DD38E097D0BCE2F270AC40358A3B7788B1221884403945638712AEBA077AA8A70BB044156452F4AE148BDDF2F3214F23FD381899A1488AF92FFB3A170284AA3324A48FA497756760695C877036FE67532FB9AC8EE3DF0DC35C9A0195BA5440B9BB29A881FE3AF368D3AD85B046136F8C166CBD8AE664C2DC70E8A0B98E651654FC2788F6015CE4E3A0946644A4226ED7A24EF723059CE8CF031DCA8898889F7CE4346E917CB4EFBA2CE2E71255EFD6CE3055BA6D757CBC339ABB33E8AF5782632EB519DA35BE01A3CFE612662A4FCDD34270CCBEE31112BB6FD3DB90048039F7DC2ED4805E26A88FAA459599BEF60D071C7247190E8AFD03FE4FD946BE562D33168B8BCB2CD884B5B1A97E5AB197C9E29734E33987C627B7F6034E9750AFA0461B11F7C43598BA65BC808932C409AD8813AE5EE4B46456E630004FFEE4FE384B5D5FF2B2AF319F04FA8370FDB25EE7694766163C530D84DD180BB992CC3ACBDA7EA255B295119FA714B592FC08DB57A9F0FAFD613DFFEE6CBFF2C095FE996F183E7BAC4B39DE655203A70A23F6F90315B8AB846503540BBE288D5D84E9760F17951A88227D19E506DE8A36F5795B143AEFD4A27096D3F60C62E956208DE0CF7D01D0E7538C6BEF2416180F83628D4C96871520537795C8937769EF0CD62E5CF96CA59E8523F343BADB5897584419A9917BEABDD7E723111EFE5129F22CAD6CA616A85711B1A7AD8CDD26D92D64BB42CB66E99F3B5F7D9A797B2D74D27F7D08E4D87E5E73B54F190AC5BD9472E73EDE3E873BAE0D8D88DE2229A3CA2CC00114E09A7F0C74A352404B464FD2E238095F705BD1AB710CDF2387CBB1566ADF941C2C20A1B1991C6EE9C7F5FBA6E96AF532286EB8A0BCEC44CC48CC434B94244D349AFE86A2EF6A877314233DB39E7C670C87D0719739D2FD0A6AEC1A8AE7FEA785178E9939709B476FE6EBC0458F0758AD23925CCFA5FBC0C63215B7D8842911D071E78B22BB6FE86D41EB82EC170CB382F91B519FC68A8F28C78E5CFBD4360CA2B258FBC684F3E7C5C31BA7783E8CCA7297B68C1A0E348DB706BF1719F9FC843340264860A334206E45B94D1643CD8FFBB04409BB6DB3E6DD2230586A3628CD30A57FFC2856F9175456C9588FF7705EF1E72DAA8EF96CA1E951A58F8E572D35BAE611EE07EB50E4F25A36DAFF28B5A5D6BCE5AEFA83CC2A4B302ED0A725E332E498A3C35415582824F5090B2666E7DF887102ACC78FCA7D40ED53280831BF6FE2E77C3C50988DCE44401E778DBC99DD06F1F7584B533D9B8CA20F20A8300DE7AF313635FD607CB5D9CC399883C14C1122AA6C56893213937EA97133D5FAA038D95A5B6B382ACCD6A4B04FE17269245C33A4377835002EC2549DFAAD87504B4B6A596D34DF14F5F56B31051F5FE6D703F3A5A86CE2BB203C01CAB4F0CF88CC9C -MD = B91BFF21522E1FAEF77F7F53BED95FCD21AEF0A91D043E8EDC791233 -Len = 30461 -Msg = E819D4C74E2246C339BA9DD8056DF7DF0AE53F0E2ACDF89C3CD3E190F6EE79054B6FD77598C258EA8CD69421388E72AF357B30E3BC50EF17AAEFDCB478118B29628B22424095D2F7F2DC53F4BE36FC7B7F722D77DC6B53AB31033D6C70517133C78A4463FE1B92A9875B1156F81737730EDB6FEAE6959CBEDB9405B2CACADE94D80EC7853E13563855119A58EA2BD5D30DEBBEB8356AEFC06744D5C08D777F88777AFB838B4927195180BC90C5BF060B0B0DDBAC179FC7A103761C04B04938EAD3D6D895570528D79341A6907687C323F43247066CE050F4C4EFB367D16FCC89005DA4F107D92BEB67928F766BA73C18ACD73742E636DD693141087D41FB276DD69C337E56C9A177960A259836641671A71426CC370336ECBEACDE61F84D6712D360889BE52C568EAE521D6F9E5CFB57462EA6B34831BB65B124AEF69633D7D68CA4A0282058FA526BAC8D39C05DB30BBC2D695ADE134406C6AE3F244B40ADB9C748EA7E51CC40888C65F89D58446167BFC8AB11002394F30E13709FB4F70A497AFC3897C177EBF44B7F43FA16D9228CE460CC09E6196684D2CD0B406AC5BBB473EE27F5EBD23207C3E50AF6EA8AADFA4D48494E0B9847A257B68094804632E3BB48ED5CDA8B9987836728739F28FB0AF776A38101420E2A6164EC70DD083DB536684932AF3708711BB69FA8606F2A32920A51EB5C6061BAF33F5EBBCD30A74E979EFEC40CB9E2F5759183BAC35ABBF581D509155C879E422C3DCF1E91C89123AE6CA86858F260B9C73020AF1D4C0D75F4F65B929DEE0B7F20C2ECF8927859E498CAB5FE6729F7B6A2BF6EEEA1523EB0B26D90E24FD132DEE5B44EDDEC3DE16379FA6C9EB48CFFE0EBFD64F62E593FC6A3303AD7866EFC91D218EAA1B0FD2AB786A70727948921624DEC653DBC2EDD999B218E146A893E0ECF6C9EEB5425AF5E125EC52176042AADC41BF6763962EDBFD621388E121FE3BAD936A8C9FC9C0F2CD8F99FFFE1E41D7DC320598738D4D8725B8189DC0C92D0D4FED946D8DA8F94BC4343ABC736A1713A03892E9FD534A04596DF8F5EB8099CC2B22873036507638973D4D8BC6CFDB5EBA053CB9C85193B2184ECEA365D44362832306438CF3994B07CC268D10B788017B88647CC147BC4AEF44733B68A846C04C55A22209B9D328326FD8357FBDFFCBA22EA8EE06C07A472DCB2A88847D7E4D23BE8557AC01B87FFDC90F3A9718B542078744C7DE68AF0BCD2B631C83C4B21A35B14E699C6BA2C15A9179C47E6AF71380F44A31661D90A7627304332F211CBA78FF567F2C50156C8E13617E12C08EFF5F7EFEAA3BAAFE6BBD085FF089F9BEDAC20261BC8E84F2762C875AC0B1A5782C7334517681EA1672F42D93B51FD48BBC0BDB9A68E1B381E4EE2318582C948E434E7F38A25E607FBF1C3785C2A068AFB260B38CED02FDF2C113345EF412BF64DEA8EAEBA68C0619FC0357B6E7EDEB26264E75127B4044AD5B7C792C8093FBA2A34B279CE68AC7C170343D5BCC47DEF1A20E6E47F4EBAFE6B823C8617EB8EA6E27C4A8A4313C511D6F1122BB00DDE924F78BB9E8F89303CD0FD249630CABC81817BB6E99A95B2DC243BEAB272B05896FF1ABDD93654F8F82104C30300E1A4E3DB7CB45E05ABF3F2F86711AD9B258A4EBABBC6125930191228476B13CBE765EBFB6457377A1B6A6B896BDB84AB9241B82B58321528EA7ACD2FBEE31E793581FCD2860C0B9F27704BFCF587777EFF1A0F15EA55DF470B2785D38A00FD5BFA882735C396EF5C04DDC29AE1CAF9325886771578F64B00338F1B2D19FB8E007F1946D932E7647CDFF8AC99ADA0C3481A6ABDD30342597D362F647FA2A791696B261F9CEE6082EE4A60BA8126EE3088DCEF394D5D1BCC7C7E00F368C14342BDCFF5F99526A1A4EC5C4809AC97FB11E5AFB76E54D289F23A5439D8147AB84AB1E54091ED2A3B3258A933931561419B070E475354B67E30A9DED872E3983FFE218E806B0D80B449AE814E0AC24CBA5C869029478F8F98B7014646F5AFCE8F81A4902FF974224B2FD4BB4D4C55E22CA38FCC916DC025190DB7ADA42545AC59D89995BB4640EB8CA05DB80EEDE791E9B6B237B0B9FD682447C9DA992C9429F9EF2E8A5C8B93F73F64A17A7D6D0715438A1EBF418759158F882ADA4E7489A769629293643130E9D20014184F7705E85DEAE5C555B809AF5B26ED47352675C3F5BEB2B78DCBCDA83E20EE8748D2A3F7A09D78119725F2B8BF4E9B8B08EF984849FDA907CD0744B5B5A69A5912F6861AC592883587DEE2667E0032F5D391C1563C64B35DDB69B118F116F4FEC1D5AAB18D19F22F4919E1400572899BE77021C310D6832647A9327303777CC6F9C6FE22183848B5FBEDE19D5C04A236B231994FCC9C6C40F04C0CEF4E959DD0AA4D74543E8090C7669324D4DBF2A69CBBD35EA1FD4A9C199057679D2E122BD1666F87B007E386E5FC9A838519C2C2D9D930ECFE0B5B0905F27CB360ED81B3D8A7D706FC63D542201471D4D83FFD3E9502F28A16D9CE0467EE00B26F18CFB2425FD5347E4D3380EE5EB67291151DEACB0FE48C5B34BD056C2825C99D3185576504EBE0831F8557DEB162BD9C31ED31F5F0F2BF26DCCECBF625511BBFE96982CB31C19F124AC3A474C8EF1949D2A29EC29853751D4DC38A4E0ADD7D3A6BE21E028094E70D428B8F231EFD0D0DFD6F77E84FB616E8900C3325543F3E6A329E33D25123D922ED55911AB8AF1FB8F6E1E3F5FC99E2E1F2CB50AC87D775DCDD2701B11B7D5782CC75DD94CF8047FAD55B5E9AEF462AD66080C370E3D53305911A5BCC445663E0CE8E50C3ACDC9E7762BA7B8EF7FCDCFAD6976DAAA8CC3A562F386B7F81DDE8857BADF3318790CE836E0DE533DB85B04C66176732FEA05F7CB2F5A2185B6C87DDA02E5C60A7E50413B894370A7FD69A7DC2B096E409EA336A01B2F17443E3B51C08B91F89F7368E103C823127CA82FB9011D533C9819C8B990D9187D2FAD0E22E86975517EFEB288AE9864B7C6D1F98C23468603EA1CD5047E1A553FBBE5332DCF78434CF8480D703C53778AEAD6D38F7597628A3F8EF60952F795B745D3CC3C8177754A0CCCADF65C25B3ADE9CC309537421B35977874C0C2BDBDAA249667908123AE616F4921CE8D0FF547249E151984659A1AC1667EFB346E8C0A58273E3A9613858A6A98AD53E8B7754B9DC293157F0B9F0048BDDC5C56A297548C6E94CB887D1E149F6F8BFF1D06939835B05A07FAC870FEB205A51EDCB42D96DA0FE80604745D01374F066A28F858F4086081FBE9E90424D56B09A4CC47676F6ABE2DEB700EC8A44FF9797E31D455BC1434AD0757C01C923ADF45242FC63C9D1BD36A1A36780EFED40DF408C770C3781DD43F5AF0C593C9D5548B30D75982C8413D47C84483CF05DBB245DE72310B3136D9C07919B16388D8031F1284E2D4233FA97DCD21219DDB7F615D5066E3DC79F7FD613367EB09C40B353705AF79D53C5264806D862511F065F5029D57981CD6BB2C58E70F2F13BCC54E85053E38794B628DA57AFE619A6449339C8092972DAB0DD999F0505248E686C671550B0D31E1EE963F590BDA83FCADC36E546D2C4B82B656015E00F5C75461B9152ABB341038E06E0E864D70C1FE8E80D9E6DF7EFB9F6C1608B246B9A7381109CEB239D67A83606508341723FEB9EF8639EC9AB091F439A065315125D4C70DEE7B814AF022F6C9021C0EDD34FF585CCED89B33671BDA9C0773839EE0D02F8B86165CB57BAF1F59BAE5FF9473BB3CDCE7D779D554EC1EECACD6D2E6AB7E0BB2067EF34F31D1C9C0B35EC6166BA4BD3508435BA082D3D16FB18F070B0D13C944CB9CC2790195C5465EE49A61310A1F8BCD5FADBC3180E1EB94F72CD549B9CA8DF5B56F8898843D5546B48C5EBD84DE455F2D03D18115745364F0D60D890501A11E8533A4EB39A6A4FE42107711810E7CCF483508EC0045FD99A42F9A82727F6B932D0306D076CEC7398197654321E2C6E55511506DAE162209A535571D5FC93B6E647C8CCC5E8C6BE85DFB9A837504D85A79AAF568573ECBDB69BEEAE02F3E7BCEEC2BE30F6825E77EDAE5C9844D87FF731464F888EB9427A0348BF3E05A9E1BDC0C4D5BECF83BE18F5CE6CB9EEE59A267DBDD3DAE4A859345B9FCDA28A96610AAEECA3E855E45850AACAC393F9B29864B2FDAD46B6AF2638F1847CB69B57B70E2D9D7FC87D3816E3D06AAF3918BCE65FEAA1EDDE404EE676942E3626C0A32E882E73954FA297860B3698C2ECB76C5C609F93624190F4FD33470A015B1FA44F74EEA3F19C5B265A6D6A31C8D037229CCF754FA215076F70F407A6E5BDA54F2174B4115937C9CB0844379CEB0D1215BAB89FDF3D24A43AF3482AC24155CFE8E0E916B2BB3224DEAB791ACBACD5D612045A571916D4DFB5E4AB73A608259DADD3C9BD70828433D3DC315D4F84AB5B66976D0D388A87B1F20508339B215BB558F3E5570B1441D1D29020F3834C5AA429EF407EBAA56621E9C2F58ECEC95E1251456C1B9C4E3C2CCDF5B3F000B5F908DE4328C4E2327BC097FC7A0185817B9AFAB41475F2010A91940B02645F9076F4347F4DC39E1F04B4C4A54F79010A9BA6AA8177A2E385E719CA5D1754D368A68DC5C5CDA65E4D5B06F5AE3EB2A070BA55D01F0F7AA9E2009775C0A6D5695686743CFE3A3ECD8878318C0491145EA54944AFC12CB3D9687B4B26538E8E52137ACFC79CBA38A2DBF0E081B470DC5DAE3517207F30CCC354C95BD99EB97D9B22E7FF5314C80B6166B6E05839E1F4F8B4CDFF65ACB279913E2AC91B3DEFC8E8EC19B99EC026699BAA0E5C316A00F677354888D7494EB64CB0F1C068705775F5127872415236941A3016CE9D93A90BEF4DD056B2ACD2B3BDF5DE40049B4055EFCA1529F5DAEF5158800F94B6875145D27270A4D6838316719216996790BD7F1B30D8EB7D2B46EE31F3A946104E7BD22508FAD187E2648D6F135137427B94EC29C751A1E85B9C409A7E2BA608BBBB3CF3E342EBD9E6E688D114D2D6E9A58F1446D56706920C5F1CD7D9BFA716291B717EE5DAEF25BE86A64CB44CC15516F85A319D17B883596C37B2AB05E47F657F14249EA01C31430ED994E9BE75327D93A05298ACBD1731259D41EC6E04A6D53EAA805CBA00EFA7E6FC8CE24E761B12772DF6C4E20BCA5E7E32E0A18D896F4A0BAEF9646393F84A12AE04931EC5FFEB60BBC940E19444A2C9D77AAE3EFD2B7593AE78564A6AB11732E1DF9DC9CE13FADD7A181ECBD67AFD977C53B0A689F45241D2F17BCC6A10A6A865C15B86D4BBAE42F77A9D6776E17F794830CE15CDA630F92F2B89EFE59DBF20D5D1DFBF1FA3A03A11128940F217936007570B62DE7E45A83E3738 -MD = B314B2311C03766420A31D501E9B4F25B9042CB597407D19ECB02DD8 -Len = 30524 -Msg = 22794943BBCDB9597C7C248DB5B5D16089B3545261B7894A461518DE3FEC15C7B4212CF28F5D93651F400264DE0A85EE7B9C2E3FDC6B54431509F199FE2CDDACC00F919B3F27CD6AD1CCA12885DC8793B5A01770130048427BB45B2012BB09BAE895E77B28AF11A6C8676A9454A1938614579FCD1A484A4CDE20A8E6957C39DC001804A9218583EA62EBD25ED2BEC12FA72C2E6E3FA655B5CECDEFBC282A07C51B4E2C68FF363EE48966DC5D3333266C513248B4E0348CE6017979643294D8A6024439BF17C3523F01A1B9DCE55DB63C06DFDFAF0EAD2CAA32E3795C22680D28E49F03173F6A7AEFE3AEF578C44898D9726BAB1E5C2ED3704B2D2DAD15A7716932C81735268C9FF6477F251D947D47398B246622E3A6FF752CA2B68EE54722A2F219B43EBCA84722F340412956C1D23375417BCE07660E9D9F8E8AEB6BC3D50199AEF35C586D57C43EC627EAFB3B5E194B16273CFCB6CC38AA8726FE6731AEE969E3A0BD9DD518F8DB66FAA1F3CA0094894EB65421BFBDA71875B8022F6A3F72259FCC2F72F2FAF716D325380A1A94C3E969CE6ADA853CFD6144F39F302474C5947446E80D69A699B9D08CDA329C70B94A08195A098F6C1E7D7F51A5361107006CD629218FBBA0A4AE5C79936C4C80632CE52BDF473177B92567B827D07A5FFA701ECD329E5A731573E794721FB9139D8A4A3110FB53C14A7CDD4FC419AA307BE68AA79CA50103F520EED5A3429477AE86B6F0B424DD34064112208226E1DF9C765A8E9B5F732F7DF40723BD2FF98EE97FCED0E814E2F70F191FDAD5F8B292ED9BC08918013FBA01098CCDF884CCDE33E87E39B2FCE741DD3A38795EB5A05A15A889B07EC24503C8F9B2C1CBF9993DE571C6B95C7B884336A1227CFDF437CC2A967EB6ADC07DE56AE1CEA7286CBF07827FC0ED272BE1CD7D90DA6377B6E040F616C6F8E24E620F694525D865E798D9BF56E23DF0985E357D5F7216AE0E4BB827465AC46630A61DA672E63F8ACEB1566333DDDF6A8E00A3378A78960605123FAC0E5359319C385294EE4950F8A614454EE3F948AEEEB4E9917A7046304355A645E06B848EC0B2DA5C70381E9D74EF2200BB68EB9A0AD7BC26FCFA477B61DF9886D8A685B9B551A0F031FB32D6B8DE0F60E65C107A142557CDAF348A1F74DD1EDA8C30A500C7DFE29A4AAB583DF53B559B6D455D8504AF14945ADF6C3C0415A522B473E03DCF7AF7B7175DEBAC2D1AD401D661E1F25D76CAA9F5359809FE6750651520B32EFC82A766DD98578D475921C3CA1C6F11EAEC0D78E5DF0C4C7810D72FC93B856B6FB272E0F628EC2E824F53090208F88A8164BDC3DCE5CAFA6DDFC991927CCE7E9917EB3FF924AB7D3CC2168F4E86266CB0220B2BDBEB89538F37AAEEEA850AB6483D0ACDAAC9116C2FD95FF602F23C8B5EB139852876ACE2661BF77AAEF72E88B4A1A40E51480A10948ED3EF1373AFB491ADE805DB3B6D9D2D7D3D7318B3158026F17262470CC3A554E1F31CF0A58ED58D683C5FF0256411D70F08BFF43F715BC793120974200E4249D3AC22531DF5AEDF041B7A58AE2F2FEA2D1CD168AFF388CEA1B7AFB665FBD8F9679325A8C557AD1F749E414A4BA5E524858F5B174FE751D802EED3398CADF8E6E3EAC380BE2ECD6DF14928B2D3BA65D137EBB346FBBC06EF517CDDBBC17CAC7D6E7B2F5A86295FBC1928819B9FE724A2A864F7AB5BA61C811E349FCCFA8018EFC88701F829DE7C8A4A96DB6BAB57F4EF198C2B1C612D5D89D600100EA0F9B9C943F4AF725A48460F23E5AEB0F60267E111112FAA18D61C3AD77B8F2270ACFC840D9DA895828C8EF35FBC2AB533F11EA06B356E19C57BEB0D206D81C15CB7BDC3E332B6CF7D91A2F27B1F221BF65964DE5CD20FE7C041C1CA6121E5FFE29B6069650220F6EF58432CEB320C9CA04FD0D8C2FBB6E831522EF7E497EF41C177AA15954FE47E5F1E2AD60EF725077F737C14A97A881639EB6FABF7891C51CCB4BD980E11C66FC7D9FE0A52664239CF8011CDF7F1DCB5F227A37B6EA04D4CA047BCC82A69E2C11CC52A73289E97B38DBFC3ECAC926FA205BA4982C75F9A70F29091D76CC9DC38F108421A2FA440F9CB5D1DAADFA1FF22176F623B6A114CAE1F01CABA6CB201B7B06D755D01AF3D1EC8102DDAD27946C28B3E25B97E6DD8C9979FCE57D84C32746111E303FCDEA48734512021B01752EC29D56538A73C6957FA728B2E6BD8D38372941A6E08CEEC9668670E967024E484637F6DD48D84C1FD804ECE3E6DCEEF3116987F8365C6966F413E80784F73A8F9D9FF057184BEA603F5BDF702648FF0E1E89B963F6A479EB57F8944BABB2644B02C3F7B31BE478A70AAAC89149AEED63C65D60937E804C8D073D18FCB330FD6E55745474B7CDF9E0CD76F55108C553D2498F6C6A2705BDCF8C99E223E2A7689080FD7BA3DC33CF85F72F828E308C6480E8AC4A22AE0265A230CC935459093D3E01FC7151A6A3DF116BF2FD479EAEAC5D22DF27866E4FD1BE595F74DADB47BCE26104B36137439CDFDA72595203ECF46418C66EF0F54649C91E7E174BEE0D88E1E1C39D1568B96150C6A1ED582BB182E4DF3285FD8152C4E8742CD88A8D70B6CC5467CB3799D2055881B4545FD49221975966FA97CEDD5A5B5CC632F537085919EC501192C93249E64D87EFF42539C857CE60F63166DA85265072B886015688BC22975F69C3CF118434EC8227646365E47CE0630EF9F1DAC478C105E093B8BB97E4D8CEF592491D3943A91B15664F659D9364D21A3E736AE26CFDE5F17DA3ABEE373463759CC0073F404DEF10D586D9A47593518669AF9DAF3A80894C65A2208F411B1055EA55F19947158507EDE13876EB89454D2EFA3195EFEFB5B9B4CCD4F2786C20882C0A6F897A0835CEA9B8BD9D3EDD0D54447E078F0F53568159F4E0E44FF7BB1EA1728DE46036C006E8BE23DBE29CC7385CD97BF6B9043E2CC08371972631AAD352F279C030BE259011F3387F7AA44E83B6BFAA91D38CA4CA15CDB34E3D491C38B84EE29260E1AAB0D0E6E435BD36FEE9EE6ECEF9B9F69F330273B35D447382149CED86E7133C772D8BB3FD3D4B827A92A58579A97B9E4C535B8F4324BBFC8A701237DD9E590F6849FB84E1F1F843F99F1EC2CEF8888309758704B880077188542415785B9BEC4D5CAFA87DCF68E376FAF027D05164B8B91C1CE2DC7BC6F7D7832294B205A1A149415B12969EE9E0FD57AB956A91DC65F1BEB93BCED4A7487235667BED3D526DE6444DB45BAEBA69532790472A623A63FA3B5EAABF2D9D20B2EA74C4DF11E4569DC8D574DFDC69D154840AF74503036D728402C82E9D739969D91F88B8D556523D3B6AA3920EC4A6EF2AF8FAB24F6974741D057435132849AC810A78B33304305B3F8F22B3BC1A5C6C5FDA47505F05054DA5339FEBB5C993777EA0F714EEC25C0230309E99CB55D2DA25EF8504ADA08F5956CE0B12023FF0CBBC90C38CA46889E71C88D85BAB221FC59AD8D7418FBAFF321C461C5FED1CB1B5ADFC887FA7084F63CFF209A0CFAFFD2C444BD346189455C74B53FA56667B443762750862464E6CEB01C841D8F41196D476098C12D823255565A8E8248C09B759FD0BA84443FDFE69C9766B31B283C3E150201202C65D2F69DD9285FC4E0B243A65CD2012D27AFCAF716BBA00AB56F747CA463E9DB969726221EEAC659631F11B6666D735BEFBB573AD42858F1E90F26473DA8865C159F804549A60C17F84A8A3EE302DD35369040072DDE7F1DAF0E47D7393A852516D7AAB2ECFF79B09689B5DBAE65906B4B13E62E5D25A9928039CBA48FE02C6F38C3BFD75F4EEC02C727695EA3CADEEA2F4C560A9FEDE6A5843B802F7565EFD9F3D613D1D29217D35032CB3C1371BE6C3EAFBC22D20F5D5B044DB4D7A6076BB6E95E5DEEB7B45E82516F8BCAA5EBEADD105D4232B7AB4945BA0C162E705CD8E9A9D984B6EAC34D8B516F290491325EC0CF48088FCA445DFA0861BA9620B059673DAB5711AEC632160190EBE98672CBAB29E39F341434FA49DAF0B88BC2389FC7011F68C12140A90A231604370EA51E7C6B14D6EB19FB2D32477D25F95D81B4F3A6E88AD01A6159FEB65898DAD0BF7B34F95884BA54725C75A8CC3C36E215BC6B5C81C267DFBA8F0B5D0A86B727CCC397C05002B64CDC1FD49CA5A041ADA3299D5DDF2457099EFD2AEB61E18EC9973CF4AABCBCA4190A9E9311B98AC6A4165F587F0D0DB88AC6D6E775B4CBD1C0ECFE5283864CBC427A36551B301C66DC952B8AC73D79778D179D2B30454A00396F62ECFB6FBD20592F0C3B4FED708D196E13D73B83E0B7B62D4770CCCF671CD20C93BD6A54D81884C888AD46157899A13F70FF67DEDF42432149AE7DBB843B2D090114FE26452EAD034161777749CEB19AF20D0CAB2A7A5EC165294A1025DEE6B1145891082BD30218D2F78ADA94F129A85276BA0745795BBBB08AE36BA4DBB50F25059DA253FA884A3CA3978724907F1E1DF7280AAB171BB81E43746447F72C4E0858ED806BCFFC3974BCB2D8FF9C8B9491DF6C684B642296E2BB27901B39C98A14717F0B326C00423FD33CF23B5FB1BCE16640AA4AAD409D1E86C16F65653ED834E551FE6B9854175E5B62ECE3D12324F0C60605E956FB4A8ADA99DBB74060B8BF67E742B10FD76ED7CC3AD4DF96C7020689DFECCF0BD238F2174A80B145EBBD92C297DD5AB00463CCB69DC9CC869DE86A5D84E3B1C0830E0F12FB1523F19A62843E3C340BD475B03AF94F710FDB884F54329FC39C68C65879C839FC968D27B429008CC8E6D79665ECC643207ABAF5266D347E4D742633EC7FFDD0163BCC7AE93160BA486580B7A574D1A40F87F9637C479386096AB1E88745E68A423000121D2B745F112AE294DE7A533271EEFAADB2946ED116D932042DB1C7B656CC91A1ED0A8D838D53C0092337DD53235EA8F2702777D65CA7A55EFEFAE007174269EC427411605DFDB96195ED80C7074770EC08A1EF54E554C2E5C6FCA3C3BB7BFE2348B8FAC31C274FA3CF215650D590A7B806AEF2CDE9EE1B3A28867D953C82E7F9C06FD42DE4AA5AC54269FE4BF04BA0CED93ECFD69E972E4970544660D2EFE90EB1596DA4F49E26A36C45427D6131FFF2F46AC48821D7E0A14E4266B9EB0AE424DBBF2E7957100986012A077B323CFCA85085F25A8675E1A8C85A8B14C1B62B5F02BF1E0FC62021C7E57AC677E6116EC23C7A3D53C469782056EB5619EE5975FAC3D62C9C51D98C4E14135AEE33B0107DDABA3CB1DFDBF1CCD82F4D52FBB086C88088EAE2C90A46B80F10E0B22A733776B1752D3DA44AAE1FC738F0116337DA565E63DA35657C30C0886B14E97B9B3BED05B7FDAD95ADFFB8B47439A868CBEAEE64A000 -MD = C543BEAFB9270D6A8D3D74064F7D008648F3B864C9B886906EFEB4A8 -Len = 30587 -Msg = F0BAC9A6A4524E9BB9177A93DFF68B6C7F646F533ED48815B6281269616E46FFC9944AD0775628FFEA1D0AE40D4A3AF67ED50701A805C9646AD573B63B9CBBDA4AFD8099F745DDBA187630AD688F2DC08CCD2B58A66D51A08323928A43BBE26012AC001CFC0199EBE6473793CC75ED65FD0F8987791745D6BC150D4A898F29A5E4E404AF4AD8D8CE7BAE208EF23B731EF4652FB6B659A723B7E09869DA33A221EB253094D6A6ED2E5C43179B8D054AF4518C39BF5991CB62A5BC1B2D482BC823871DED0A6CC6E3064FE2703BB875E607D268D264D5665F3E9E1EA5E6615A2869147D466A59563B3FE2ADA0F003929DF6C812DF6B6A75786314A0869947548EF97C77D7643FDD578D880FFA62E1ABB30786FD5295C81AFBFA8EC466779411398D37FA25EE93CE087BE6DAF68805297F06734E28B6B4D3DE44615B05036A14FDC1070766CE2A982CC9D2358140BE2452D2D1C530259AC676821DA9DE333565D6F349CF135240FDC99276F19A8F770C2360D7C4D8A8ADB682FAD95F9B7F4A203320EF5C1B7C50DFDC0D2A3069381686C14F5E2127C5E55629FF9D7EEE8C7658C26110895E791C001353107DE9025EE8EC9AEC41E8920B216F786A91FA845E3B8A2D2A6A9E666B5389DC9990595B7FC6EAA0D2E0556F24FD7640A2B55756422A54709F42CA1B7A02A40D6761445371C06763820478A1D34CA5C95E42BAA4E4951391D2AD1CA0DE8FAFB1BA02D227C07F21506E78C5CE475E12C2605543CE9C005292D872DEC5DF55A7D039511452E96CF4188517C286A44D8A85A0EB7432057EC32F0F4A07C3F4FD0AD6859593A4BCF57898239DD063BF9D7FEC7E202CAE83E477266473AB22460900E377A2AA901F853D68580D17A6A102C84C12046EC81CD66539BBA56EDA08496BC9028A6692967577CC40DB8EA14EFAC60DCDF23B91970AE5B4AEEFFC1E4CAA07117F775700E8BE600BE6BE7E9C46BDFD7EED2E541CDC5FFC9360E1BFDD895ED7B642AA44E9B624D54642E139E2CAFCB5F255F3D504513501060007CC8D225741AB3BEC797023CB0B8155A5EF30CC3E4AF196BD331AB4197E9F419D85EA008D0045A4B3616A4B41C6FA1C574A37E15EE31DB0461E9F50B7A2171964CF76E787C5B7095B1DE63897713118C049A1F0C1D68686F2963EAEE7C0A975CE59BAC4207CD6115B142B4B13FA7AA5934B88C175E232781350FA37B9CAC5D20BE840BE7D57F6A58C113223A10618E620836B315ED2D8CFCA100EE5E78EBE40F7A5E08E7AD9E05B2046607A1134E4B38F9E054FF31902C9B46FB7E5D880762E58AC12D145A70C900249988F3113B24458D3EE1F6C8CB87F58DCC9B694A99A0ED0CB6D74455EFEB8C9FC32F01855C197D50B0ACC8375BCDAF99A8842D25050126054D50C900C72349F57767E37563D725DD34F483DA7E0B94E0F0F6BCE9940DD94EFBD8370926F07B12FD382CC32CC751E8DE6A0F69974D0621DD7DB2D1BFF0548E99084C0D1C2420F75641C4EAF3BD49B7FE9CDBB685F93988295FFDC7BCC3F7B9C21F6E389D4F7B5F921CCF803BFECA5FC1CA23AE9CD85889236A4F0D3D9C520A16ECD9F9CCB7865704CB81DE0711580E1E789544C857C4BB943E4AF4772606EF9576E3B4DAEC14A2212A29BDCAA44A9424DD1058DEF59EB9DDBA22C38AFAD0B1E0105DF6517ECBFBA2BA1C0387A8D4C295237C40270B333B2D5E930B44AB85B606E6D63404598560B80F93CF1745E0B48B045DA4FD18240A2DEEF20043076FB7E34736D504CA710A4C762FD08D79C0BF2D2298AA04DBA58A14A77A413A5A10F3487A78526E49FD669DCFCAFE0D23F6B25989F177B2542BACE29ADE0CE2E9CB699968C9D571B277A26D680CB035C40B26376BCFA782E9C6963FD0ADD1AA0946A9DA1F4DE13F186406F015F5368E51A6C6ACF58D650E828B683D82AEB091316AC55D47974ADF95DFA8CD01997CA88B81EB5787A037578227B247019253865D0D1DFAF6A3A5F86A9C65D66CB35EE210BC460D580B7CDC6160011D20F5C0D81AA2E7C09FBDD94E0FC663F0612A03738CC62645A8237C3D72AAC26D89079CB6DF82AE306AE36F5053021BCFC494A053E3D235997FC962C1F666E293F485BFD7669905D06ECD6D4F061E7D699F3816B89AC6D4F7475A9A1182A18A4FADE885EAC4525D245D4ED58422E59188A70D529F696C91FA69C43148410179972AB9BFF94A2697008B12FF928DE703AA067BE64170BCD5C0A0B07655AC58C10D2FA17EAF59DFAD01D5935F8570E591FA31565D7E1769B335A4543C2EFBBB530DAD5433CD3ABB59DC9B9B5D36FA356E3AF6DCEBA45A70D16120787159B452084CC0CD0D878D40BCD8E3AB0B6727424D40A5123518402CF7C5930BB599F97BF19174DC9679F205A814DDF32ADE3E0194398274F240FA7E4A9FAD1380D98CDD975191411FE608A6416FD9229F15BF1FAE8F493E62CEF52CFA891A2842CE7DF6EBE36124F6ED9C73957193FCB4E39886D57082A8A13C36C47483C19658D5BCF48C906B49126AADA06686705AFDA2EE1DB05AADC43C1D2196FCAF58113830FFA9B995D0E4AE5B658F7662EF07F8A77C76D1CED10D9A3CE3F8186A407B1FA1253304D4AFA7869FD1023A9C6613D5DDF247E7E52BC34D24874F6ED63166E95516E3B534E90727CEE5CA35C543F779FA0774F909CA99603D48F68E047B122E4B15CF1B886ACF17947D62E5D47CAA213A153D588AB66437AD40C81BEF1050F4DCC20BF120ADD14E2D5FCEDF35FD08283B23786D59B93BB81F57F6F98904C2BC6ACF61908661032460C41A70725B8D3DD58AA50D5CB7464988AB38411F42027D659F47E14FDD0B11C4ED842B08A606F49E8BEC120799B443308D7FC4E4E7395FE11CE311E1FA28430B0B358194F393C28E5D8EBF0B49CC71E282B4EE827DB0ECB98EC8B36246F7B983FA6B4A6B6EAFBB292C1DDB4CA4FF88D197F2DC8E9F407D3032C06D351BC4274755F2D78EF8A53D8989B87C46E767F810CEACF03D088AAF4D918C0C2FE34F606EE5A4EA9216DA3BCE156B74B920872462C0EED0C1DD26C4493FD906BAA143BB6A6DFABF58B259170DC38EE19EDF5D4B06D215873BB05C40E02547D9D064E4889D8AEFF48668E4C139F2EEA4E5B3D538294D062AFE98840C2C04297C7DDD8D356000CB66ADC4D0942B1D695BCDBC23147C9B335B5E3DA735C03B81F843CA318283B70999B0B9B038F469986EDFF1249459123BB6E3A80F2B50F0F2041CF7D7375D11B856385595DF0089F512786A0D63521830F123D233B51D754C9D142A066C7CBD696548D3F6D4866A98C12DA29543E94280F7C60247E22AB5FCF7F9795913460103572BDAD12E5E4D1CD7B216A7D3EC5A31668F5008FCA58ECB75E10151F392AF0E0D64EC296EEACD0C0B48A458665E0EA964A455320B579F0B62E8C2C207A7932FD24EED202E93EFB15539A7271864EF4E1E690EB70995CB1F940998479385BEDEA48C01DAAD932316D9A43B146BDF12FD7BBF57BFC4A735E7DA83ECB2E8F7B023733AED7EF86C7507D5DDBF36573CD643072E0F3D832DCC5235E4F1A522C455B181D35BEAC60D5B6FED4B974B20A4CA6ED24A11BC02303A036675E43EB3D621F8805E1845B294C8558756F2A247F0ACD14D519402DE678C5E472C4A1F7DCBEEC21AD1F4CB0999BB5113B889447C74977E1E8F363E8E50A6B7517351D5523FE8179BA6675839827A3B0A3A19A6348D92BC46CA86D6CC0E84CF81719AED20EADA9D6BE39391F66D7BD532BCC5CCC30E9B9C70C11E3A094D741611F891C8108E7B56BDF1E323CF5C283287A5B3B4155800FBB83B137EA7247FF72EC521F621C69E8C3A7BB64AE3012EBD078E9941FBFA7CD4E6BF513E61BBAF8456C2630D530E01C5CB843D7C36095C15D3E9330CC407D4E60E3F3E8A18ECEBE92D99B18B27846D215361868939309A8BDC2E03067BC4BB73F47C1CBBCB45C124B1231A30F695B768D03C9DEBB24F32B023E7A6461AFB37BF660DF470AF1F509A8A103FB2207813099B8B23913C1C443F963DB260D38DA9C83B32A377EC08F2372FB47C01EA258431516AA69F79705E385501EB557749000E470A899D436B8897F7A7F2AEBA0AE455CA49FED5877A43C90F117FC3EB7836BC92E7A3FE76FEAD1182E364AB04E37988199F3A50889C9A8CEA78A64984F2915FFB06FCC2CBA5F34DF4963791B41B4A8BC6E51D783F41A83D046041FFDC00E21669F3BE5AA849319A08AAD94419A711F51C98EFD7F10507894F30F1B82C1E6A320653E7B16CBAC55DE4E952FCC501799D02BB30EAAADA550CB6263AFCC6796E39531861AA52BB6CCB238A529F93F9EF485A503DD9EE826532237C93F31A3F9D210B245CFF25E0A078538FE32A8B1EF22B6FD664EDFE6C5A75BCD224D76848B6506D935597FDB79AD95C259092F15F1119A162E1565FC914A01347F9B017A20770098B5C0986714CEE356A96C3E258D0F1B24FC3E76985EB57D9DC7699E1D275063EEF6065140EBE30DA38F1693103DB64FE91EE08B7AB617763928C14B8A0ECA3E77975365A3405851D8A29116A8D0159EAC615733FB565EF7809F3689A43475A68E8331C4255021706E6CB2545A785FB48DB5FA36F3BF0534B3291A4AE32A7ED35C361800ED7377FC625B11DF3A89F2B1DB8C5786F1BE8F23A14258CE29880A2E104AE3AA655ABDA5437582199FC111D2177E51D26E8A54421C56E4A83023703D35A32587408C7D05DF3010DA0C88F23C142BCE90F8FC4A17191EAC5899424C9E1E5B65DCB9AD95386B6E0EB2286923BC44BED151A2637D2A121540DCA12C345D3F5E852197BFF352105FE26CF3BC2E86715436E21467BA1FF7805F4A61A2E07F971CBF1870B9B6E09B6555DDCD133A5FDE7EB960D099F7018CFC2AE9F86F4829A5ACF4D0F00F7328D98ED77695C971CCF1F8E7EBF992149058F88F2247F115B4174FD06DA8DE1E7D3E3B328DC9FC392A5F408D05CF26934DA40F090A8C893C7465FCA9F0BE137EC79C00FCF4C2857AD3F2F7A6C376BC46A864A75873ADACBCCECDD8DF4C464C95F9AFC5FA82421D399790823FED2395386B3FA5795600EBE7D987B325EDD901178BC3378788096650195886AA3B3F902106ED58E7A6F178D972EDD2184B30A5B2FAD040A4B6D8C4E9B0146851F8AD592F682447DFE2E2AEDA78154E98975DE4DA3A7450E9FF767B89E40148841B5902AE2B99BD50DCB6E8EB82EDF2F3550D00FB43AE24A61D921D7BEE5316DBC9D6BFA8021184211A1FEBF272645255940DD250BD390446A6ED074A830A8FFF3BA0136715F850A814781BE174A9401D9B1DA7F2AB9E26DF8BA8789C1BB0A7E94DE789410F7ECADF57834B250489DDB006924018D08D96DCDDDFF1D7E3E72F6647698DE976C294E0D2CB60 -MD = 2241181D1DAA4A09C5D0587CA8A0AE0CB5DD765CFF553B203CCBA2A8 -Len = 30650 -Msg = DEDFCBC2B4F4A60548E58642F85D367C43B5D115DA9C2678B3083DC71D9618029081E25940F6CCDEB5550E501BBC1D0B9421D7BEB20EC55A7D7EC34E5E922BBB04B6280FE35EC2415DB15C969337645112E9921F7E815FCEE02D16ED8FF58F4330036A516459F14DC22678C7291EA0285E097B01F3E1CB43500F1C05CEA449E452049BF7420F40C993C40926833E8D7DB4FDAC995D1CAD2CC7C54F30C218B43256F6CF83A65DD9A259A552B677F7DE0F45DD1096F915706E0B42220CC995AE3C42EB1F0804D6168EEBC2E95E989330B160B3E3464EE42F8D89EA4AEF087D02285952DED764C940FCC59353A5020F85A43F4DB7C288066A5FB2EB3E7F973776AE46F8BCCC03356F5F3583A2CFAD533AE8E409D35FB2008C84E6F5F12DECBFCEF377B4EA22DD929674062C8F6507B7F8859EE5CB240DEC0B49C3602BD2D79A3FCF4969576702385826763EB2648BA21B35169A61422B2DEA00CC1D43C45795E66C97D473DA95CA9BC05321E14E20AC1DF5C5D0500CAC8650AB8F70F646059E08867418C9A20AC4A6AB2B3B83256C2F655DAC397A59474E503C5DF672001B7764EAC3828B358757558B56A0A1AA20BADDA482A4FE99BF9EE853BD565BB844DAD4398C01378F75256900F8FAB5F8332A2D837E9132123F51B082AD972FE320FAD6EDE080A5AC3C60F4DB8DD7CCA09536C3370FBBACFB515AEADED61DAB2550BC5422CBC772B091E9C97D7103A9A82740B53283FF01BFDB0272ABF54C864ECE10630378F22A2F38806CD135D36BDE14EB1EB5F275C68EA23993AB1AE3D2AF87568EA801FE99D00BF682FA5ACB62FD28355649A1DAA7AE040CD781FFF1BC65327DD1892F041ABADFFFF956C374101692F10FA7B1B376C92231A8AF2F02E14D65E284AB700A7AAA5C2627E977A46E753F1A4AABFC35DCD53B62CAA578DC6CC1146270450F4B9C734092C893CB3BF387E29731F22AFF9C8DC4BCA8D58AEDDD34B57A5776E03B7BAFFC30FD9E1310F05A7AFE9C1EDB0AA2B7BE8A799BF05B43D8992654FF6306A019A30C377905B70CAB25235D3F7BB9CE9DE42EAEBF69EACE8F2ED8EBAC7257FC3BD95B310B82B41493CAB2934608C8F0B660D20975893D24C21BED5A853701BEE000ED9EE2BA41D7DBF81CB42825DF66A0E542A734A3E3665762C74C93FCD52AC0CDD4AEB3EB8DA82F0AA57FC28609F4DDCF46689A255ADFA74635ADB625499A379686990255B35E386979EC705BEB268AE5DEDA3D318E9DBC7AD2C36E27D75361F4DE63EC296FC571042068F6192CBED735A232D92BF212B0912EB7780C13EB0CC0BD1844CC4C7040C5306B06768575CDF5F9AF5AB1C18C1EA73F58E961B4D0C760B5BDBD1F603F824D4294CD1B9B2F77F60926638925B0F5E6541B99D3A2543789F3DCA4518474D0A8858B51D9820D0C5C7542A8CCB261717D3471B06478B3AE65E089D9F2AA660CD9F3934B4F9ABB1183D93F338AC53E9DB7658F73E231F019D1BCA9EAD4D1ED99A84BBE8D264AB08B51D26E6B33CF7472D673B0B7EC64ED176A9AD59E9A7D12F9CC7748CBF579414C660CDA3B30C46CF6C579532B57717FF784F7FBE0BA6CB090E6A2768A2F4A9BFFA37CE790E5317F2C2AB3A2CED3F4359F68D04589D5915E4B7143E0BAC8773464AF49E6F3CC3B072BFD3AF535B4C05DD61915142988B091FDB7F977F4BF22B6DE557800C0DF4E0833B1DF42D4716F10E998CA5206C549C575505B21E44251BCE082FB100B2D5EB17318C1737A48FF126875DE7A1DDA5394F3D9D3DC8A8AB8AEB0E216A53EF0A0D67D61C5807BCE7795C85F1D4F447F357CDE0C8983A243D6BDB38C2F833D6ED07BCAF16A7026B3AEDD693AADAD32322AEF74D56D7369E0106219368345B512FA7277A213E0612B5851A01F6933916241AC66C67AAACD0B48E1523C4BDC31E577A737AB26DFD050DC10C4061666B677F3E53AE8A54868F888DA7F62AF405942E351ECF0FD351473E9DB4475A3B2075B818E0F06467A0EC93F1ADEF5D956642EE94D4447CB6265007B02E4EAB5B41AEC9B9E96DDEBEC3455AE8E6D1428CC765903ECADB73DF99A651A6E7DD26357A9F7D51CD7D1FAC7508CBCD4157313D4920228597A49D3B3AE51AB0416A29F954E095E62D63C2F932384E4D97B968D0B90EA65A35122F3BF5AA2F552A7BDDF9C530958EF08FD88450E12F10D0F31A6C4515D88727AEF41C7F28C8E806294A095D8594DEF39267BB840D53498E79D2A155CBD6E8CDE45A6ADB0319435BBACBA280BF0DD3289C354AC08DBC66BFBEEDCBF751A56B367F12AF3DA173522EA40C1AA70E5176ED95B53CB02F4BAC44E97D78D616F3FFF4F599BE5507EBB1B5B768CEA3E9ADE8E700CB6DCAF92B064B1E65654EBD03E125A421C2F6903904065EDC5284CF671CADB9F0B90F8F49A68C062B1957D4115A286AF9BE934BCA7E8C83148CCDA3C9BB7398084A0F16B77557358D7132FA2C1852D1CBEEF2B44DC1CAB1B32A04CACE845749C644BE3F0407907FAED0D753C47B46AAFA04418E5FFFC8815445F0C93784A63819BB73213B23DF90B9826CED57F0D8BC2914AB0C43B19FA49A843C6455B93E3D9D31A7366251CACAAE478F77228788F4DE15177FFCD519192A711F823550FB556599020BD1C54521EF62CF404D35CB7C23AAF23B67F57AC7DC66629A6723D70EAE483F3251B1EF8327343716287280159347EA5DD01A3C3310EA9850C90C0CC67F924C9D266912CBE7E4253A5D7F10831D3391C3A6BE710B3FA37EDA6F3A23EC61D5A70E0F11322253CFE8917CC48CA6EF09A24C319BAFCBC1240F0F38B9D7E917E2BA9290DD527B7A127685893FFF993384D6ED1055FB204FB32FE55D11AB3813D2B7B08280FC03EDE5DFB5A42C46FB0A7291C365758B846B70190DC8C513ACE82091CDA827492E8FE4D18C2381411E961FDFF70B7DB596386FE161BED19054C38104411E01E1A868F9387033EA4673BFC58C78A7C708F63667B5F1D71944E05497227E49F5B0705F22DE8F08F8A567E5047942FE3D6EFEAE8A949C5C94B62D349D607A344B209DC84F122FF9E5330DA3B6E3B7C03B6BE197B0F51C1623D41D3D8EC682AAC2FE14D342D687A7FB0806E5BB94C40409B0B23BED75545B39DC14BC851A6D7CF8EE62E26643410AADF0411F48971633326CB0CCB03856ED3A993E9192A7A50C7C695C5ACC67663705FEB15EFF8AB46657742F11DFBA94D6C0008F1AAC179844DAB158860EBC9C9CC95C2ED947A1691DDE8E0AE3EAF45040267C09AFD0A9FDF193C28CCE7DD6FEBB5BAFE21BD0B4E58E0110A4D825113C37C2B71B933D8C2E9FBEF9A9917B96CB7D0980C07179D53B3D66602B167C4E0226149B7A6A0017C2DCDBA179BE5488A0A57F5F486EBC8ED669945E1C96E17E43B84171EA72DD8B0E61E83828118ED06F6C87C73224060435E52B519EF041A94EC02526C845E11714B94430C843462D77623B1BBA47B49503997E1DC56809642F459D15D490C47FEFD1F617094C6C58AE0967754A6C69833A998E03E0DB0190EE1F14EDCD7E003643C21096458DBEDE78EF4A588D1DCDEB1489106FB75D5DC97A39ADDA388D464C0D9C410B4216DF066009AC4E32F7A85394B757B9D30839CE846A3A5894502607654BA2F47B223CC0E4DBD1ADB5C962F74EB2D0BD29D0B114E92A7FF31E49C6754D6528A50AE7F0D19A5EA4061F23A8A84E2AA14A62B3B41EDDC782E2697AE1B6A93248E4458AAB7BE5636AF346327E361E20C67DE32CE0E8274BEB722728AEDD0F4E07A6CED147C21C743B1155DD8908912882642AF5825E9D62A5B8F1E59B3900EDD5C2787B4A8EDD9E700343DB6C6AB2A722EC90CF8CFC18270FEF43F5B7AC3670A60FB4599871AFDE3EBBAB126C8DDE40C59A3A73F36D0505EEBC356E11F3819514E809B3C557C94FD98C64A22E6DA07DC0F76F27B55C81A016D27B5AA8841B8B0309B4FBC7ECC7589AC9D16A80D431CF8A466C61C92D0F67FA989821CB104AA87E5D1F6F654BE28BD1F4ED11D1A72EEABE5FB994619DDE489220BEF7F3CB473E9C562A2D52BC12608B76A2AB90C457FE783EF370FC674DB60B9C6E78DEE6F16D94579891726EEF62C006B5477D5ABD9B50C9D488ECD0CC1EEAF70B7E7F85FFB201308E331A412D1D13B7AD575E65EE435DF9587B9FEE02B1F5EB01AD6FAFC60D84E5C52E0986D5E400695B2139F9CF7BBB24A84AA7D1500470B47282EA88418A471549FCF635CD6AE21A82B9DFD6A4EA4D3817B83276FA8488DD5D0BE2C1D0BA9BC717159FB6041841761991F5E8C3E95F66F1B89CFA183A1E8DEEB139B7B093E74F37D315D3646B272219C93200A4DFC7F71163549ED89AB0B1442BFC6E1E5F6734562D3B7B77529B06E12C2BC200F95F74D0392675F982F0734B3B6325A010DCDCE0983675043C5A7E8F40B19D8316BA5E8C77034AF996006945310BC9113DFB6E16851CA51B36ED400A8EDA565ABEBE29447E09D210F1D91DB648C6B31E781C8FB25DCFDE348F6F7F78872123715860B3417AA1996FC0407A0894EA1FC59496C318C43B73760DE4055218D217941DC798F98567F6656937D13C05A8D726FE8F8B99BB2F3D333A807A154B9FE9C1D33AD7958A88F9CA7957621C6F3D60D7046510DBEB3924B6A2055F2310F408E51497591D09ED796B99C764AC6615546002A27F9B6EAC1F12B51EF3E56B6173991BA33F601E6DC70450C8D3E0A53282797D4F79B077C0F25D5E38E373C183E2631F54CE30B58644A39149D8BCFC830FDE0206B6F7BE707C574C32754B2F32222D5B68815D9DAD867793B9A4B357DF61A5A22CBFD2A38989FB69B1225B2037670A81B2EF1862C978DA1E497BAA72D3595DB6EBA9C2E728D29D572A0C091928669B6DB68F5DA3ACF4895FA55F095B9B2F4043DD802F06531600234371B3BEBEF7C7223BD56D6263A60323D4215F5DD77E5FC5907E83F73DEAD3208A2FAB1D4769FE38BA4C19889395DC29F4DA400E45B66FF4D78C6BA932250E6D60F0C6BB88E1BD0B99C2E9E9DBADAFD3FF851679F6A686AED5EB2CBD939B1FEF26B11856923FAE7041659B1352FEAF8EE245BAE72CF11B871101F4A45E57F284E024CCB7EE70B97AD54FADB8481BE0001DAD91A31A0F191CEB7603976A82CEC6379E4F2AE79DC373138BFAE34303E6967CBF29FB6BB111388009F261E06FF6BF92791619A28C0AAB1B46033FC1272BAC6AD7962756795D38691B207ED262F47880FDB5AFF50A1807E998FF4544625F0294D4C94D4F58B1D36012C0D2DFB522E6A9B61B86E8406BEAE8BA21F1EB5F3D39CAEC13E3090E8B649382F3F664B6BBA8D166609A9BE197CFD14B4A7DCED6A4205A4A8866C8801A7D6F6831A854674A3BDA9BA23C0BC52DF6385C12A854E09B6743B846A8C4562EDB73C199D80E800 -MD = 6CE5AC23C2137EC7E4681650AC201F38CA1EBF4DD8FD37283CC2736B -Len = 30713 -Msg = D0CA35A148834881D3AB6F4F9CD96CCEB88197568DED334FC791E349194E135E338770F229D157EBCD5DE969AC48D6AA439A06827D4A30B5A8B352F032DCB7B9E7A4A911F728681853D81490B3AECC3E0CF281AAC2735ACEAD6560CB2F2283280A07AA0F18EDE77DE9646380F31CC6CD4B7C00AE3C69A31147A6CD599FBB5758B03188743A66B245A0EF45E0655402F38674C6E58BD68A4F1D2D28D61C88BEE169FB0292118F3A01EFF6FFF69555F7167C8D8C9D7BC04A79F61848313339C35B9650521ECAAEBFE91880D4C1570894CAB096D6150B233D5E790367A2A0F48E3908069E2A39053A142BFDA7AB89F0B9696B913989294B12C1E42CBEC992AA246FE5C6073259CD56292270F91D0A8D6C7AEBC2E7C847190C9775DDE7BCDAFAE73B43DA0E31808C8D31B7E32A72EB9699D376DFEDE9596D69411B1CA2798B74869169901AEBE5583B558B5190C40466AC608796A403F0D374F2971FB1856C476E11EAE1609101DB99FCB9B23211365260197A481BC1D46093CBCBF551468FF3085F93674B8A5056231510BCBBEA536DEE8694233CDDDD8865CDA5BE3A8AF06051981ABE3F66448328468DF0D80E25ECEB7AACFBD3FFFC5838E2D8DE92DB896CC3EE8C7CFFB46B0028ACD212905BCCA34F6FDF70464FABF8B19A22645E746AF4914FEEA78302F939D73ABBED47FD0018488E30A572C01E92D573834939F41EF6BAA1A0502555B123BB88FA30F31AB3BAA232EA77B3D67D040EB6AB3F011E98721C3240DC701355D9D10EB25EAC2F165A288BB6D15BF982F6B5AED9AE9CB0855E5B8D3D40C14ECA20EE256E4B2D7951B04CE778B226791553B7422ADC74D620AC13B97D9CC220461D672E98E0DB4F58356051A8791F6E2B1A266610EF7E8B08D101D540E045A55C1CB5169B44504A1265CD6AD7830C561F6443EF33114B856C3EDD5AE16E2952E949A972FF97A8C2853E1D74535D877DDAE73F0270F378EF42D6182AF3A73A110B2588B946D240F1D28982B0CBA9F1BC388C6DA3D446CB5D428972436553578F6CEB1649D9B7BDB75F2E6C07EA5CA44DFB2C7FFCFE04C67CB5223394B022C72CC9E9D0EE4460E0D59132ACB75641F8686CD00AC2878570DD62A42E782F4BE4E6D400020FEE5C96E32A8C9940F4F10F226540248E13DBD88152AD4602C398F5536FD3C96EF6F828FFD48EBC5C489A8B9BF96E6841C445EF0A5D0FFA1FB98F700105298FC7581840BE2EEDD9B494D67C79D3FC4692E149EA8B58AC488207D8B54EE624887BA91B21C11F98E8C86DEF71CF067ACD87494E18A3F2E51717EE03FA585A8902B62ABBEA9C22DE021E9A38D6E4375E93BEBC9B6325AE396E52D869B9D044ECCB755D612D59DB584E96F48C8EB5A66F9C2BDECF50811B4F8A4171F31D6D5FD5FEB627630DD964E77F7550B9DF382FC49C90CE6118AEF08FEB893C592434D56AAA11A4D778F21C007AE82B694F525EACA2774604280742B393D807F7C02A1D9D3C3DE4DCAC4C7CBA8B751EF03AE047B4E866FDDD1EEED3181C1E71723449F71FC58B58A4C9D0A3AC8976D82DE7C985C786F547A4107AAE2DE29C83244EE3CD86D7F424FAE42624E724E01EA5631D04B0CED613C954E0B3A72459BC4571BF9A17A3E4E32EFAC29E99751931812863EFEEA7AF8F0483C394667AF74FE60552C4D2F497341D096D62B409819B154F5DB666EA98B8AB773313BB0DB71699ED21F04E499EBD3BFF72FED4F3A3630E8AD73F6AE1C170DF2CF324D7EDA42828D71959AE07A3F3F80CF2BD4B09709F6014C9C1B4330F346D36286A85F28593DBED6BB90FD4E42ACACB0526A0E5CFEF759224C89D85843B15937B0F52FF9E1B9EA84B580C801B3D6DFE25A80A6071875DE71A799D11761A198FA144390E907E0CF46433907C039A1F56E157F9B4793719D0F93A04CD80B3972627230FFDEF9B65D9BD9197D80CB2D684CBC427BC2C0322CAA57E1FA731F430BB4E709BB76E68D2EC015428564461BAF28828E3F0BCC8DD0DA32D1D1B8597E797EB116CE61F89500F7CADED99334E9C0CFBE1C2B7FD22F81BD7AF541A942EB69BFE58BACE6B3FAB9610049E8667712C280F360BA35DC27FCFFAAC0DD31E0907637802475D9E4C85423DBD6F0CC7B6983F91FABA3119C8C5149BC23E5DEA3221944B085900022E4FE1C7969B99210E3980C0E5C9555419DAE762D4D03353ECBF9BAE8FA76C3914954A90A9D6FC67DD12BB24BD9EB06FD9424E6F9A79328975178EE885FFD5542D4197AC4109CAF10094E46ECC4A4F18DA2C08A4881E42A80566E0CB04F4FE4363E53FEEFC142ECAE45DD2FEC0B047A1EA82A2382F3F4F4DDAA66D9D82FE2386EB69F1385A4AA11D471B44269A72538C1999478C55F39CE5BB47E729C13AD100F4D469BD9F0A2A95AAF48C0E37D242831AAB9EA6321EE50CBE6C48F44DDE07FCC540ACE176890CB2E0EC4830CB729FCF144E338700614B005A6CB27EFA5FFB5A802C2C40FFC4E2AFCF868C8BBF1242D213DCD747999A172A73FB0F8516EBF7031340C21A1A2857085B7AF38ECD4B57182715EE138039C54DB405533E297BC759A5D356C9EDE8154D1BDD16BBB27A4CA300C0F20DECA34F28402B06C1E5F04AAE150C363FAB1940F1129D9804C9A3F2260CAFC1D27CF00598F11B1DA5FF5DC30BD03D663012D301B7D33CC843324CFC994475D862F8E9AAB03743D37CD91A0905F4CE0CF7A9E621CF54622BAFD3444386C1BBB654F87A6E7366C4DC0A3A1A56972069D21506EFE0BE27BF35C8E0C5BA345158DFF1986CA7C4F59E5EDB94812DE0CD19A4628762532745AC027D90CB6E006BA856EEEA5204DFC48E83DEB4DFEEC5417D0AF42253BF2DD4B1C075C6E6D2FA657F7F2D7E2BCCC306A1ADC7BFF166D15A6423C14F068AA8064DB2C7B7D17BE5FD40EEF7F440C6741F17A0E47B9E90F32EC1C9E1226CC5CE7447270939F8EBAA802F96D58818D6AA8BD4886F8E1A5E94AB9CA8C9B7CFC9C12F00FCD2834ABC5462E24124EB8E590951DB31D59907D7751EE25E9E3CC6F03063CE45E45A86385D26E974CAF5BA33E89F931394C76BC1C0F0D676B3FB0663BFF9C7AFD843610B9CC1A2DC308DFFC1BBD6B3A601AE560EB0EBE482716E04FE4F61DF8193F47A49434396D917A707B9E384D4C8FA1A5470C55F74F52BC9E96ECB35E12375460D5B0F75DB4F01FA479C84B314FED7BEE590F4FEC761D4EEA2B1CCF16A9FAA0A51B34A353CA0A0B04B2F23E5856383EB216DA1C8C574E251E085FDCE166E430D66FA56D8CD9DA722329272EEF2C4E51F62A9708A764E46C78F4964245B49E8D850A96012FA684BAE5CEB20C5C7A8D396FFC9D3DCD9B0A2D77E334709F86EA484E2CCFD29A23C9E51B0624A9002D55FB84C33A3332391D48C639E035DC390B9E3AD7F067912A8A8BB4198CE67674CB94089448F844FEAE7E7643766537456631AA8300AF006CBC51A52D5F5CFD7348F17574B6B966E022527EE60E5BA60044356BB638E43D3B786B7E89CE8F53430A9BD6DA4E07C5082D0A3263C45A5D553374BE924616BFF7E6C6DD1DA33360BD03000DBA6BB482FF6F993911545070D55CDED8007B79A716D0CC8D13FE4A6A2DDA46D945ACE6F364A44E2CC21C86643EA46C9DE128C11B9BC6A4DD41FFC38817EA6B4008757A94752D22BCDA6973B9373AC461BE185AA9F7E3ABD9723017A25EFC1D1474B9B4A99BEF98EE7881E6184078D6F2BB1839F251100BED82B37A813DDDDE29C86AA203152C5ABCA3A21D2CFA065D457D113ABB3F294BC18D1BF4DB7EFECD00E88991F8131FA870F7B46DF07D3F11E92AE4435541596E81CC83A2AD2730173DE08DA91B55493CA02FE9AA8F7FEC5B8FAA80AC1AAFB32AD546E67065172E30658B7A37EED7F834884E05C1E41FDD312B5088F3059555BDD1C8BCA829FCAB8A34A73012D9B5C02F731E766F4B2C273E81E85CC2FF86CA9D21E1B9CB6FD7DF170CDFB2674DDF91A4A606817D956F66C76946F2F6286650C95CDC048B5AFAEFE93F5C62528E59199A194F93ABAC7BBF6AD689E7D2C4B81EB56963BCB2973E10E36D9EC7C7650AB09D7CFF3C3D0D2471A02185C6C045B65DCF8EF7C89318B77B20072D44E5B36AB277C298EC4809B06651C26BA03FF2D8F5D19F398AB602DA1F820A588C43816015FAE1D5294B3CF7FAF1F8BC5D11679698D15E8A8056B92A6DB89D60C735DBA5B033DD57A65B4DD7C0DFC3A66A284BA252DD9EB39078353F94F6F22EE407E42ECA319EE74A3283458CF84E98F0357179F0E5B108384D02C47F901AAAB54E5F79943E0825175D61E3FF255E732DF94C589C3CEE2E115A7EFBD9BB01FE5DDBFACC520F9429AFCF45ACD4E920C9F2FEE2DBEA11793EF94D21482995FF93438F717E6CBC1935CAC828451D4C759E1440EE64ED4D6B1C85D7E049A02157790FA34D1E76D7455BE858EA01143592BE8CDC0E4EB07F0F393952BEE2AF6ED3CEA1B3A745A458EC3C396C6C9FA9F14397B657C29795D1A5BF7C6B4C7E824C68DB59F1D6CEFAF3778BE01A43471FE6FCA3BF5C0CF862E0EDA04E865037077C6EB9960685CC31E91BF1ACD944A9411F96B3C403971D8994AD3D3542A16684DF2DE565926A13FED6D31B63715E20E604A6661FDFACE5FAEB046F0F54CF99AD74A904D075AAD4CBA393B0F49D9B438A3F2C6B3707DF6019E930AF10E3A555F66BA11672C3B255E561C5F82EF61DA98FC739F6005683E8DD62D503F1AF99A89237A7633D965C159082047CAD40EF79FA53B3F3314F1EEF665C33C2C963F3844F32999AFD73AD7B38BD3B74B0163F0ABC79151EED270CA751A0CBAB7F9AE1D4F9ED90B8E30309EA0D5C197649E9B5E8E927396E07A8B87831E8575E436678712737950D0246B52606A1FDB00056DA3432F265ECEB2241A18CFA4E29A8FF422A76E1442CDFCFD76BC27D9CD48CA9DAFD68ACE031C4E3B012D14203EFFE8C45A53D8EF4E2C5C67B3B0E9F1C0C3A2C28BF8517CE0354DA8427100C21FD00EE90394C9D4E483ED41AB16C944EFE888000FE33CC781D8F59FDE56B76022269C8B787AE6F36E1FE2CDE588D63F78497DB981C807DEE35DC4C61A1A32AC7817E3ACF091440A34F72C5323550F1784207E02F39FCE879BAAD7D9D2207432B6E406560ED4C096612657726434A8FECE908C74BAC6FF512D7DBEB076F8212C1145B9A8B511C248D342418B397D91A8CE96E63BE3A20239443423438C443F295E2DB3CC28A64C3BCAC3CFF82BC150DF5B7FB83B94FF082845ECF6A3CEA1E936029923108A0C91AC260A1FE9E22AF350D8781B01E503EAC4065E0AEC9959CFAB2CA309851606522CD616F805AE23482766CA7D64FB4F0341CB376457CE45A1912AA6985F0627218E855CC9B3C6741D69BA9E391D5CFAC05F5DFF8152C7EC82322DD95898562DA953570080 -MD = CC007F4EB56986A47867C1D0AD3A0DEBE12AF8D4238F629567D9A3DE -Len = 30776 -Msg = 1633256AB03B20CE079196B708A1C02D1B6072219070712C8589EE21341D50752ACB6CFDA17E982D828BBD6CDF54BC7232FD418A323D64939928597B9B52F07CF488250C5E42BFD3AB48012D709F8D747225839296386FCE5FC5AECC4BA7A1076D089DEA8ECEFAA0CF66FCA8602395719C12A04F929321784D7AB8239FCE2FF3BDAE046A266132B5C2AD9F7261F3014E87B389A6695978693D9371D0B1FF9C405F338C2FDE4687359603950A54CF4B9CDD9B24480B239ACC5405C14C886BBB0378391CEF0662A38882BDD09E3866AB9A66CFBD28EB5EE4F8009BDEFC4AEB16700EBA7DC557B489190A71FDA75E85F7EF841697F70FFD4FEA185E7A67C81C5B8F273BFB97B2CEF695C1C74446C4B425BE6B2E66DC0AAACB247E4467B7C7D84EC33B6B5AB8FA1979F503008BDCFF948CDBF1226B1B066CBCF34797298F3BA8C60FA01E0AC8B803223C656112FB91435D75453BAE4707B63330467DD13E0A4B992E6F7E46995899A2D95D23F4AC3D0802B2A6E7D024DEA19CA408C4BBE053F14C9CE264F129724A18BCB18F385B1CA091A11434EA96D98C8D0602E98EDC8DFA14141AF93ED0BA66E885E9FA108591AE59E109AE34D6B9F5586E4B4D75E7DF7C32958A65E88A9BAF41082A0A3F11539DC4EA2CBD9E1C6C3C439B622F1DE574FA75470C8C939B51D2D1C2A7204B859881D43086BFD8FB90346218D099C5AB36846F3B98A7C847318BDFA01E09717943FCD864C5A8A17B6CEB89D98E872D388F20ADC2BE5E2006846904F41682FB1283214F3D20DBC9FC9E0FF571844A1282E88590D7C085B2C568EC5ACC4462B389FEAA5757F7033187E2DE31955FCE55FEDC909255048B327CCAB2E582BBC9D8054BF5CB45145C7D3A3AF9CD5CF6ECBA490C634ECF00E646BF95E8642C43A4978EF08A574EF1F78F6CE57C3B34B5A123D123617FC8EC9B2AC0F9B70A7F6062D38DD7B8E9FB4ECCEF13DED5C0477483ADDAE4F1CC0CFCA274B1307ED0DE72FBCB819154CDA897D7575213042615F1741A8CB646A39F8D134FDF9E60E000EB8220F65CC30F5FA52C431B9E3B6101B96E25B8D0440B96E572A18A01747C02AFCD7513542F7AACE194632099D16274F31EBABB60DDD94FE43DACCE900EC0902EB5E686D48ED8D09AE63DA0E15C736809903A0297A92DE84E0260F11F446E1FC448E0EBF59FAEA3C726F97925C57CBDF85B1F77078D36257C85D56CBBEDCE180FE12B687ADA2DC9912FAC60334166BD2CEF06B089ED5C9563844D71D8FEAD2F3A93F3C07C52537336A8A70BF5B596B9007B9FDF2D082000F20E6B70D2A7E6C7ED27C4146895A6D85A246F623C1B9258A2F891F823ADE4CEFFD59D4FFAD077351E2F506E9A5BDD3900F0204B9E8969AFE72F5DCCB9CDF986D197AE4C4DB53014041AE6221B750E5290E307AD292C8DE6B899235212EF8CE954785537DC9435AF11E0F3427A9C7B22EFA752EA0B7EADE5F6EB4093BACB78676E506698139E4F774423B8942166F9A7D22480D814FC0AE19CF4960FBF6E01FFA65C8DA5BED4F1AE2B9ECEC5BE7B3C38DD4045B0C93EE6CC77A7E61E85D331B23C0D164B104518B3405497054445A353E9B48F2AC5E8E96298D6655614336CFFE6D8C9C915E387391519AD2632366AA3BC935030FD12927EFCA17505ED74C94650C778539004854DF6C24269AAB9C273A493D3E5B0B1D687C33C2FACE46B4BB3742D6DF743D09164D2E0EE7F6BA128BD5FBA2E3B33C199AE80FA9DEE3AD811D02BAA3D42A6362B2AD47BBA8A2C5CD00B46CF22CFE367281488A4852EB8B7FACE79F0CA6F8E78D32578DFEE01711C4DCF3C26D0BA13F3075478E708C5C5315AFDC2E4C0062D16458213BEC506A9E991A61825FF78DA9BA1BAABBEFA56B4A8C9E2E7B60EC4B7B541C8E0F79C86BB5F03F736761A37169B2AAB8884EC6EA217B02C59035F5BB327243D126B78D4AAB430212439B5A75B80618DAFEB66AA3AFF866C4DAEE47D374B512E74ADA933EF24A841BA271C6F02C870E8AB950FE06E93C91DF0E99165DC01BCB190E411ECCD85358FD4A88127A22E4CF4266A90845124BF97B25D7B1C46D3A0D68A684F84E2A638C692A52CB6E8C651A3AC492B0460004073D5349E35552359CA37660F77B2770D6B2B3F7B1922424AC4A8598B4C61A6DB507608A72A6A7D573CC055206276E14005A28A0EC41F28D7E260611D40F089FFE5E529375691412F4E9E12E62C3BE2C563C26D2444EA9C69E6C935FEB4DC4E802E5FE3906F8ACEF4798D940C3CD574BB5E74506C3E0B70CB62454A25F589EADB6B0709FE3B50417CD1D98F08E08B7CF68A04CCCF8D6588F9FC2F31E533CDA6159BAA4297FA446450D71C16EA2324EC09773E7C8817ECF680ED12F64A04863EFE3D9D8760F34DE5B0860B3991FF0EE5EDBA22C4D69120DE19D5429E4AAE91C9E7CF05CC807159A58F13B480872AC1609D87E7009DEDB71C09CEAAB640A2B6135855CEAE4AC2954933A0255B425D9FDCD9C246F82AEB7C3BB78C6E73E03DB7AEC4245A28693FBD36EF4938D59CCE19EAFC00671A0851612406A075713C5D1154D8E13B59B7C5B0902239D4BACFA386AC817AC5EE02A181A9A47C622B3ECF287E14843D452AF347110498A620B34AB4E116308D976062C9EE9CD35DB6CB79805B93AC9A15AFBCB52F1ED4309879D1924A4BA190B0B86E60A516E77D34B4E0A49D4EF2CEF3CC2F410FD8EC901363FC9EBD75EB460D4D8910BDF27CE26A8B4AEB94F9F76242401DC35D0644842B99FB6C439B82D82ECFE1AF0D01F9BECB15BEC83F13B260F7F714AA381032923FDE8F8018F3518547451435C9A5207294D08A907C73696F6CB000745E072E25B73B3EE11595433D27A1F11468686F08094F1D31F5ADA81F11F0677A29D72EBB2E1C4792CCC607CB938647E1F153F9EEF03D982595C631E49B6B7C1FA003A6EB8D59CB8892CD0888B05240F12701753F89007C859515A2FEF944BC60B36003A26702AC6FE04D2E942978FC31A97EB29871D6752399D3521720729007B6A7215A4282B2A4EFC2C56BD129E74C9B00847692B96FCC71CF7A7F19F3FD6B45C519FD73B4860880A2DD74E5727B31A93F0A87F0078155344AE9F7BDBF00D83393B634B5DCA88A398E42C320EB95C4A826ACEA90B65E4767B2EBA748F97C247568393E2FD3A66075CC12935B6D7EB5C2FF5282185CB62C73972A37B3CA508004B4F796BDF82B83B5BDF90D6BFD32B5089B0CA2683DC7FB2337DE42E650ED911DBEE1EF98257F9BA5AF54B1A54B04C0087A5A64BA779D86461BA15337C2E7D4955FDD777A025DE226306A17C384F1C52CDB5946FB0B46DD5C13BD7A55FE2E27E4C6D40D61D6FFC024468F8EDFC7C7992DF5DC5D05063FE723199224F53678E48F25250EA28BDF1089718EB8B730D1C06735C2F871164E2EB5E885A8DFD2A083BE97EDC94159CE9BF75D2433F1D782762F771903CBF9A1C9D13F710BA0E151B079DC0A8262BCEB1DBCBBC0F35DF6EECF7BAA7105B9808745853C96B4372E95E482035916B726DAC7BE95A72B19DAD48DB1B19E6EB2EDAB5AC1B3013839E7806625ABC129F41813E6D71EE4AB2040D81E42E6ED73ABBA64FF2EB433B910EA7D4F5ED3D8D27D39BB454EC019DF6114F544D7B155549D0C56D14551FAF353994A80F30F3C97E863A4F2AF316468A568038EB4D799350A6FACAFF90ECD44E0F44EFB6DC42EE4B0DC2C59EA9C1827326DF08C0A6E55CF4F9C3EA0E78CFF3635F5D08E44F1400D20F638D56BA84B4832090454DE57EF04B6C8805A36F63E5CCC6E830C87FFC164647CED20E4C486D09DE7A5F9E4B68D5456CDB22B0DDED2B95B3BCAE529215C2D25D6823C7D66A4FAE0A1E9F022BA5663204F2314DFA51A1F10E11D6D62A8BA6C28B6AE7DA1DEB5B57F2B65D7456059AD9F03DC5A524054DA39DD100D74EB657DE219795E3C45A0E4C762BA22F9DA9D8159E425A1EE783B4B22C250D8894CBEC706CE16D5CA393404FF478F141BE7CC69E45B077BA1955F1F49EFBE4847C795347F703300F672334F490ABF8B644A34B56DA00EC45A350314B9ADF27CAF7C51CB7DBA0C5477E7D37662F4F23247BCB8F7DD5F3E9CB8BDA40FA97568832AF0ADC68F71422E412254A6BFC8943BB465B01FCC8DE0B957677C78BC1F7566953E9D2446239F602C682A521C14F741FEA98C7E27AABEC339B6F5B94C78287A894AFDAE971F8DA7C7E4A4C92C8DA47BE82DC2532EC2DA9BACEDD2BE6DB2B2FB34DCCDCB34116507376578CBCA105E5E443BEC0F2EF23BE34CDF862EDAB34F0FF21335E3ACD92F59688B419F824EA61EEA82BC80E3463452192377131BA51FB0795E089FC077D0ECA8012E58B0637AD7022206887FE9EC00EE5DF7AD2E26FE819EE35C7A179C579098AA3DF645D9064CD557DA90BDD21F871CEB048CA56DF9653A10ED60F5E9F0ED7F8D89BCF5C22D1143CF44718FF2DFD8E10CEF8AABB67D2305F18177C1426BD4CD03F2625E459CE905067826A214E08E56D8F9455593E6B324E72DEDCC429D3BEFE2AE0599E360DF95E80D453A3A849E48389FA745635BEDE30E7932DE6A3816E31A2217F98D5E40238963D0A36C159FD4EC32D8A5CF59D433DEF3378634AF6887FDB3F3EDB96FC8840FE1B538C329674AE810E8C8B2B46DB208716D38E9D1AEAB097068AD83ADD7DD2647839B3A7388B0615BDE26F8692E9C07D8ADECC2A875203C3D3A9C6CB1D7D06307E9E1D9C3BC536DD8EB271E9A2159C904E61E8C9357FE759F36366AEF5A3D14CEE82913CD2708AA6069369CED763C8E830D70924E82E9015C2998E86EFC1DCE6AC2EBCB49455542A6D7DAB265AD6D7381FFEEE1AA40F8FAC0659B6FB56BB03CD8CAFAACD48D13672F7D524EB9684CFED4DBB7476E99149C28EC08F33BA6AFF839AA178F86B8EEAF1739C829177BA78547AD394136AA3FAD451A11E9642506568B39668B2436610E06EA45FA11D04D3759B033B5382645F15B3C39270B81B80487643913A24F2F1C1A1ED57C85CCDDC8CD6D59B62FA67CC80572968C8FD01894F0153634C88792A7C4A407A4A4CE46CEC5FE5D2569F95A27DE242444EA0C715B357518CAEA23E767E8545983F0D3A4DF66111B4AA1D399CCAFD796D7A80E592D5A51D2B3F60B5B04F8D9C009CA56CBD4DD84127A29B72ADB7645FB7279C9818B2B43963BD605F45B6575A5E2E369E0B401F5EC10EC703F1179B0AB9D4A89D6F096573952E513827364A84D38922734137E969D8167D6959B70F42F2BDA37E4C989ABAA8024C1A84ED6BEB74780927F78B32EA736B9B2B4A795C355C0319811729D9CC399D23519730338D62E16E5035FC52A817090703FE776D65EF9FEF5BA5F4FFEC3CC8E9EB2E312C50A479BDD4E6AB0A56C18C2DF69ED408417BEE28BB41DD13F8366FF6EDA4B34090FC9BC045271 -MD = 82698AD78DFC9E39665C9DFD54C7BC44DB0EBBA2E741E80D5292669B -Len = 30839 -Msg = 8233E8AA6BC9D358C592048E45BE3DC0A196F3C37507A1F9B9091997BD9F29E8E44458DDE26C1976B481D1B12C2B825A56B83219506DDD663B679B9055AEECD5C18F2339D6F14EAC05F4FBA5EB093A3161E6F4658F46B2166B2E1ADAA59CA43636398CE9F7F748E136AECF07A413945E1C4FBC5489EA3F0B63201626F80B01FE8716125FC9E31B5382DE8080E6B729980BA0EBAF6ABEECC4E7A174B504AE1CD8CCFE83DCA8CC600791513619E2D5E192CA9CF94B981F3C95B58F4331ABC77BC36FEC2BB6825DEA3CC4F070EE252F944ED1452F5FF37F1F48B92CB34136E034105598E199927DAA4B0A10225F45DC9CE20C486CA7F61406002C4E8D0C44647D5BD7D03B8923019D30BFA442344019BAD19A4EE71819D6AC68758CC93A1BB28B9863F4EBE6512F39202DC600138F4E0193CAFC76C811B04285938585462260B567BDAEFDE67D133974D8C4379B4F365F95645958FDA4DFB71E9D792B0F38790107EEB5ACD0D199B3C2A0D81678C2F016E683DDBFFDACC031CB3267F2B7F2AFEBDA8D6A5E4B5D2D87238F744812B4050E2947970204F83F27DC7481BEDCBC2085F90818749EB231DAB36CE4A703A20E2AB31AC01057350108280EB26181656A4874376C89F40BB95A15AD16A95E567999297C22374DEB6BAE6A8DFFF5F437AF8078836014D6C83E36760D2F66F2B1945929DAF71539F6B155A2E7348227CE1097E7A4FEE1913C428C10FF74213D151F6B8E2ABE7D7FDC2A59120438EC827A2D4526F2BAB1632CAA938CCF0043A4AFDE9F1E45A32A5FCE33112618D55A7444E62ED992D0775FA0C41AEB458079268A1DDB22C0DBDA4CDEEF447F08CED8AB4408EB5D8F33F147222DAEF2F5013E7E4B6542737D1DC0379808D1BF835643B23D08D4A8DB6F9137755999AB14621F0AF385BF6B25AD6D1501E7E0CC9F0319370F31E5CB2D4607470E01441EB5A4A4BF02DF8EAE3E56684B29EFC39E236E91974958C218A506FD8C9DCB1F7F9E491983247E58712140B5A91F8B2735FB9B351B31AD97E283F084FE1FD2C752F0CAC98A4B17516741FFC0694F52F6C80FA0C87F616E53990585140D3FD1CA003C0ADD92F331C1DDF7FEE7C4F73A81DFB6A1489848DDDAD151C20AC92A6E53F22F805994F24DFEA9626B0598EFF17BFA79A659AE3725555350F88E1151C3F15499B238A7B235F55427724D77CCFF32F06DB691EE6E03AD878C473B8FF657B4B13D0182CFA3D29B113F263625045F3EEF10FD8D0FC8CBBB5677790862AB503E0D02014754842D1713A37A866034B37A4053A9161CC8EDDC46E86EE8B096E6F876BF3A4B7128E3C5324697708A6090B5AC096FEA1EB5DBA862CE92F2DE0F3C5741592C18AC0CFC3CBDE145E0892E7555931D59C5E4BB1C49070FA5556F28D76191A7EF648249ECAC2D496D98292E5D2966C43B1F042E6330BEB09E0FAD75E3B87F04607E81087576A7C8E033EE1D65180BAA65A22D19863B26B86FA939CDDE45430E24BCFBE6CF8097E40A207845FD48F6EA46759746174250A7E00B06470F22FDCD68CE8132E99DD351CC9EFFB0EFF94A43354C49FA1D7489954DB40206B7D77A3A8F5E4DD0845CB090BCFDC4B3C272291ACEEC9A35379139D28AE6A6092AE6FB1B1ABA65584906F71576B44DD28BF519B79D9C25D47DB9167F51B0249D3192A7B2278152BCE2682183CE106BE6ECA9D451E9164D96E8467045A80D290DF65EFB2C1866EFD0CF508B95D29C2B31CCF2F9323B9C5DD001F12380A4F4FCFD574808451566A2D4A7E4F641D7240999DF37B8A061686C829D7D4D3FBCD17CC8D7F4F8641DBE998415C4921B70BB7F3E717B86869FE7319AB945B49AAFD35DE541FD7EA6076C92D000E8F596A56EE06DFDF420917D421FB51A763F07B19444E73F6F574728C5FD73A41FF185F46C81638860061C9E4F56D20075620B11F5A77C55C46D47D6EB648DB779095C6815CF2D34B63EF234121CEB635618D64851BDC030E7801EE499AE42C7081A0C66A8A79352FAD740F87855A4268592F183E7DCD76CFE0D19FEC662FF5FF0B71F17659BABC9E519B658CEEA2142E5498A47FA9847158FF5296A488929BE831A2C05D3D2B6787798F2588B49BA1F5C65EE7265F57ADE8FD3123C22CE56BD92E97574AB9068D026B8B0AF33537A669C4D12C3A3D2F58D990B6D2F9787F220307B08DF1049B916D5A168148D0750236E43B9FDA910237E0A1260B15BAF46ACFA369028BC3FCDEA889C217CAE803C96CEF3125A8240B3283E4FD89BF4E694471F4DAC7612EBEFA6720170B4D97B428AE0FBF00E591949DD65E4F3B1AEC784F21A87A2BCED49B2A36495EF6D118CCC699EC0BED45B1896CDC47B01E79FFBF3E0B97E806C20CB94AA9841F336E12F8D632210EB3B0196769EF1D6315FD63B4DA430CA7F14C1482213EB0B75931C8B4F48025E052C3511C1CB7EBD6BE16F2F6BA7B315C74F6EB92B0DD3980DED5F37DBF534BEFC7F6395C20C6828FC0A16BDBD3C24BD6DF3FE673BCE9DAC64CA0EDA5097578B38E7070DD35769E58A9913B8DE572F2C107BF022A01564E554B925A6BA5E24448D01FBA0D22BAF5262B40F1FA55298C289095D3DDB95742E6FF4D869606FB90E90B6F800DA217BD6BC79A94EF9D837B310BDCF58A6E05B1538252A0DA0EF476E92EB914ADCFA4D89B2169C2183AA55E290128D624515065289E71CDA40546EDA865EC2283AD744BD40839ADE26AFCD53C3AB06BF57346490985419422F8097575905AE9C425245EA4DAD44927A2D78142D391F3D194D7FE73DA6A40CC3F1DB8E25A6B9432B19329843A75F0CDC5BC1B4FBC8B02D714939BFE8EE64950615B9FBED4B8DD7F1877260D06A515574C2C7B4C2993CA0F636F2F67BAF96C85B5169812CDD7BA17088D52F2F8F0BA27CFD53672EDE2A0D955BF1D85F006DA72638926C7FA2D21FED54FF72528D8C77B02EA0DF9D12F9CB702BF154A856F84EA7273500AB12C1EBBB14FF6FF080A80BFCBD0E8E709FD6488314B5ECA165F7E9DE631056676C40433867A23BFB854B1F8FAFB6F451C6E72022393770330220DD7860AA87BD29E56F2417743D42DAE6F364712B47627AC9E2B7BAB16FF21104FEB2FEE9F9D1F331727A90D9D82490D4D48E8227B06CE36B14836ACB2365C33B0558F2EF90F9A100DF9F5B5D0E75B172A0DFAE3AF385DF143597DBCB99A1CCFDD77D862E7D81F10BD9B8836F73E1F0F21C87A20BB8BA0F9BC0EF46FD82594C69F0F7EB9CE62A0C7FA03DBA03226E88FCB409EA7AB03B0E261BA9179DDA31D8DFE4E5CEE32266297E99CE6857F96CD53254EA730D236CD4E8C2031FC5B0CE2E324D18F8B89D673F1BED679281887E78E798DCC73C55686B9752524A268CE7F2920C26F96CF870C10573017C33118943381947CB0A053D3651D099F5664AA02DABA4BD39E96BCD64C7D9DC2E8EAF1C21B84DC904CF66C3051ED5CA1162E837C9CAD5AF0702D553C6A5D2AC614352217FE2C0A22902632E040277BECD66E2934BD48C54DDE62C37335269B777E6113B5D6A608BDBDA97A66762AAD965DE3A3A98179580D7034F9FDC6B10710911FBEE8C87ACF253963DAE1D577C4B1FFC17F922BB7F419FD6AC7024CD0B4AEE309A436D42B304AA5D5F4441AC9386B3615EC17DF8DAC8FDD11EC3F8940F6F6E726DC5A99A027402C17B32F74EB4B7054009F035C91EC09C47065F0DC9077501E15C9FCECF85E9B69EB1E7E8636CEC1D26131BF4CCCF052D1DA781E9BFE1055D8684DB8720C39A887AA458E336BD205D24165CC1CFA2DBDC80BB029BE1AA56089883C01063C7E9B8DC24A12A10691D42B7F723C93449DBC8D0C83D0C09B00BECF01E756A1F0C85F0CD3689DEECF09B5C8CFD6B8C56497893938F42E41522FD9DFBA5CDF18D5E8B07F9AB55DEBB14A0E94F55AF9587C2D1D5B529A44BB0D05C299312E25BDA63A031EDED9057B37855D2090BB3F3CAAD9EE51322EC36C98B4D13F2B77E307DCE466E57F9073F4C767FB97FFB4B711C765DEDBEAF3EDFBAD9FB51E563844FB642760EEC188760E10DDC5ADF6E91E6B1B0C80069D6404CA2C58F5E827FAE524F08D0994D4C7AB052DABA393AC196D8AD7AC3839A7B15D2A4E39EDD13AFB242AEC7B9D402D13A684663BD4A390B6D631717516BDB146D5F5C8F81319CC28DF4D017ED00C14BCD6E9841F78361789AFF435A133FAC83A9BDFC9516CFFA41E1E13ED86D28D49BF43C9DCAA3D75DC637CF64DB0A817667DE57F14303B001C294E5F3157FE828257F2D1A4F1856C0A43C25902205F43359A1CB3547DBD8EE690973A91FE5927879291DC8191412BBF65BC5D68BED1BCDA05DC144D5239A896D32B74D3CC8ADF35EAFAC17EBA2C8C3545551348C3682D5631585F24B2E0BE57184357519935E08803B1B2E796586FCBBD60B6B86468418DA331B76BE2CA7BB385DF9C8D268B4EBBEE7DA46657B2DBD6E34AF537759E8A3861B60ECFAD5F1D8A2D936A427C30D845C061EC18C7374728F3AF3E41A5EB5D1A325FE55139DFB9F34D731ED4B9D344B6581C85E5C5F3993DBEE3237ABDBDD33DC40CC909B4001FAA98C2E60B8ADABF863661D6F2E4B9366F1B53EB69BFA897B654A0911BBC8A1ECE7512F846C5144DC6821B0FD81F464463C64856082C366A7E085BD684977011A9D109261E95719013945013CBED9BF008BFF6112FD5CEDF244EBC736C07E0D4074D9101709F67F5FFD5194522C5C244F17AAAAEFB9DD0148C5C90EBF31F748637608AE5A993DFD0DFC5789E11FA39CF1BDC144515444710C497BC0A55BD1301AB6DD511034F75FD9AB9F27D72F5F6E849901366C1450F4ED5A784F412B8E698815B198E688109A852BE3F34D9A98BCA809C90F5E66EC74DDF0A48C81504A5236D69BBED1F5A4282C46EE172025FEE503ADA837B47A45BCB64741347A567F6918132658B2A8C7197F59B7C249E0485C78F42E0DCB43B046D2F9785A0145975BB5805FD6EF81001BD801FA45B47D95ADEC2367F8B3F1FD9A99CFCCA4D3BC7868939D6EF228A9F776BE4A9EBE933BB4D757D93705730C2A103E1E90B3A1518B54C6E1213DEA733FCF9581C5BDAB6CEF4DB0768E46EACB63278D933D411F459F70590C15851FBA8A7821EF82A2C32037C6FAB315BC9A32951274AA279B4CA0B162E1B3214C7EEDB9D50BDD9F95E799CF9A0C40C225ABD857869F100FC33C3C6D2D4BDE41F2CF0AB17A5383487FD4811AC32A3E078E23C7F10084247D4AC422C888DBB39C3A6191D8428E023BEC897FC49F1F395A2B745AF50819EB86BBA720C08D68E9E39DE7E3EA0AABA252201544FB5A87BF7F0F24537EFC5D56DD2F81A7C37CD1D84B36A33506E8D5FDFDFECDA3D99C8B4AA8CD3CA99CB4D60CDECA2CDBB0612D3284F562B554F7916B047AE455EE45A08EC63376AE6F632BB0E04E80B2D6F3DEB61C60E74920C054 -MD = BFCB723B65B1716478322A20E8A384DE2260E9A19FFB9962A91C4F6E -Len = 30902 -Msg = CEDB948BF5ED8A7EB08266DACA30E950C1527407C9AABE155D9DC30DDE2CC9CFE9EF364E71B253F65A17C21C077D897438301EFC71B02F79C4DEC86ABA7E5BE4B662E2695333798974DDB8C6BB76E28463D6C8DD57D106D2C28580B0D3D8FE5519FE5782BD898A2B2C58D31FD64DA7BA51397ED8284836316D7D2E25B34199E25D31599E382255B42FF40B958FEA103286F5160B8130D6A3539092347278DA2235930FA10FC98CAB6163D4960F802DE6D212FCC43B81C0594F17A175FCC6653DBB0EF48D68936D3EE5B5A622E6B5B7715624E564814DAB41466CA992D37E3644C9585E1A0ED6C3E790E9973BBF75333EA7BD947341E0FEA1EDAC1F782E78B2DD4A6CFC91A78574D6FF860C3B48FE7F4D0CAD34533A75DA6E784BDC1004065169FBD827A9B351DA87A0BB08F3128D70558B85D9CE513D1ED5C39353788409983D749DE54D89231C4CA3B34E868A5875ED065788D0A8569D7BDD23562FD3ED054A3277B644EC414B3A8B1A1C27A7ACF598596CCA2A4764D1E2FDCBDF45E0143A9C5D0FB66D6D4F22721AF6A34DCAE57F7F2AE182933DE5C11DEF444A065603C08D5B907D502BD3F22FA7D7352C775238E64D77C4864010994BDE5AEC006E0F24F4F2C5D264C61F3D079260AA7151F8699AA1B462A1E059C7E6218BBC3E733C12556AA97C51C28F26D9CE4A62D8B91D590D6A6E0F0546EAF098991B8BE19FFA4DEF5D8B2621897D87E7BC0FE32ACFE59EE9FAFCB19B3ECA2DE603EA35031B0707DE39899BBE094DBC793F2924D2A6EAC26C806939E5094C26780D92A2B85461D31F776840A5F4C35F373B966D887CEA1AF86427F7ADB7E611CC11F607EF1A9EAB247E42468B53FFC97380370D8959BDEBB9C2128E0BAE8E3FC5F3DCD7B0BCB13C9DB70DF7248219B1FBEB8DBC338EF5F21E4FB4F2E721C482BFF6BCFC2EFF7B4323154931D2B87728F2854A8642F5CE71A9AA17AC50ECA53E6E5C7AFCD2956E005A7C59913F2ED88ACCFEAE1FFBB08DEC9A8422CD06DF279DA532C06792F4557530A9E029227DE7461EA42252618060C58261107ABE111CDAFFAE03A6AB9316FDD2C3176CDE7A5290D449F457DC32EE14A3630CA86078087E0066F846B632DABC849C39A85AC536967155AD6B25C7481B3A2E8289A2AB1C6EA8A79986B9A528FC3954B5A01F6CB13FCD3128A54B1BEB6E0A8FE02320EF986615BE1460993330C84C54057264ECE2AC9F3976B62DE038156F29C90E188D9144C61003329A1BD7895761D0A56E206FD73B632B2A425CF1A923C2ED9283662378DB8C265948A9C952800EC6E89B16FD1417C5F4815A8D3EEE88F7EE545DF1F1FDB588E1FCE7EEF5D167651C3701F887331C42655D48521586D06E5142A6D4D982BE6B8DC3D002DBB86A17C2923238A0F26E9B29597097F4E4DDC9496B48C7216917C5B4EB301599B75D6F148B3050F48DA70278065F849D50145E9105E9BD3FA41A8ECB3BC3B105AD997CAA5356E109CDDD1E0AD763F364353E0B4649FDD84EDE144F9B6790958D4B38F4DD7D54475AEB4129B3FFD266047BC95AABD81D503940E8F79BB30DCDFC477092C567E2426D41F7B0117443D4983BC13150701C8317BDB71A67177E19876BFDAF46E4C8E57D7F3B71B857ABE74414B60EF7EA929F0CCDAF92DACE4A20C0DF97881F174FCFE044E01AD0FB56B151B6D0C7832450F30E420D88A59E727124988A78586D4B8C56425CCED86D7E7FF25415A6CC5606B7B38636DF801D11885AE8994C5D31AE504C88389D3A1BE69A5C63C2DE7E3892AA27D8F9FF218F8E44EC2C653E74455D9CF2C70409EA56743959571A6923BD02234332FDAD767ED80764478EBFB0D9A598108B09089D205A1D13615DB607A9C99ADB24BC9A56B425B58DE2F980624E71520443D65AECEBC22EAC2380004A7260E69DDBC73F00C5AD8A91A8434A76FB60D5BDDD1C785627386B8003EB0438C62F14DAACCF9CD1CE5AD2BA4B8E7E4DE838EB2134A4ACF2D1C7BAE6B63E2997E1DC231CC42842E2E78A785353BD816B50515964194934D12ACAB954EF30BFB3BE8AECBFC6009693053D943182B13BED0ACBCB3528DFE5B1B229FB479CADB2CD0C2282CC6DD57A0797B81EF64A1B6F660DDB08948BDDEE613085C2B290DDA6FA736FBA3F3233BEF8D1577841FAB6D2170885B86A308C045A313FAA7BC6FDFAC777420FCFB931DCA99EC43E3DC81BB665253F9507B6671568D1197A38D56487644CB6BDF2F360A4DF96C5DB25491CCC300D7E31259C46E459D1BCE7181AB6BB534E0DFF67395C5A0975D77E0E1E3999ECDFC21F2E270CBD70400BC9FA49ED5D1CBE92DEC1FDA1B59A9E4E8283713DD77AE1AE4CCE8AAAC639494BB1C9CC61C83C959D8D1E4939BE88651BC8A111A2D27C69961A5253F8821BF946050A67E7DED13A2ACF53AF59F4451CAC38D5E6B1913C752D5F1666E85DEBE4F6B3386DF2BDC4039A7E80E41209F7AAFBE24AFF0ABB7D6A41E71B92B257F3764680FC27F9196FF37F676F9BAECBAFA180A0CA0CF1F893EEB5278438A16674DDDD9F68EEDEB6105014BD12E6905DF5F39B56E5838CF5B9FDCF0588027D33028DCA3211F97FB19CA0D01039AA429CBB975E90995329EB7F7D91F78BFD37347DD56396FFC3D50BE2309169693F187E884ECF985D82B681F9262B65DE1129D35B0FC0E01F76522AFC61ECAB415911637995FA39414E750EE1C54D2381D3C21111E1904E2A2AF57A7CB12453715A8BEE8527C3C78D74EFEE1280E97DC01C34D0CB8E54E6124DCD5B16F7A3F6D4586B7F7F06292C3E20697B857E64D6AD43A037F80BC79FAFF8E53F015FC1F275B448B3BA820FDF93C58179453BDF122C30A6D08FD43215F2F4287E1404B325D2F7FAF3466A2523BCEE25554284F3481C3D75727CAA974A6CCBB47C64BB2C4E24101588C0290EE34EA65B67AF5A507D8C89C25F42F22EB7BDD2C930DE5C7E2CCCDD8C360F2916D5BBCFEA079437701FCE9B1A2855D9C8EC94B3FA11AB4C4F43E5803B7039F83B9579DDC0F77C80B0C34AADBB9B0C97B3320062EE52CE6E5CE5B073788C59788FF3F82DD68648A5FE87B6E6C85116726F8677A84DCF5DD402E4DA314C4C14E3597ED54DE98510F9524E6937B170D4A6F78B2CC8D74C8D807C1A3A7687904D4B01AAB2AB590E7CBBBE08B04651631AE80B9EE00CBFCF969AC0B3F9DB10D48600E7AE1330344EF22454957DE615D2A93C64490E96151BFC7CC9AA0D9546F17C58DA8B33B848D4CBE4303AF521AC40741B750D55C3E4C34C55A0EF173F4E111A205F91BFC55EBAE6FC582DBB00B87DEEA3DFD389E122F848255311A3E94FAF0247B77F325582E73CBFAD85EC790B59360ED96CC489AB35BD1CDF8132AE17552161110DE36319C604CA97E21B192C9221726D10D17CCC4EEC986BFDAEDB059CC7B6BA60702FA255065FF2381DBAF53B447C8CB5133A7F85021F316437AADB5048AC566C69FB69D66B1FEE334F02709B8B300CD98D325ECFDAC79C49FA9CA5CE667145C2F37E1F9A70D0F63AFF602463E5AEC61051906E6C9499AF74AF0A470834548B60FD712EE06BDD1EB4C9E8830D6FDC0DF29E68A781BA08C983E75FB7D97E17222091462282BE0CA8573D59857DC1621B3407A4F5AF6267B70CAD0E140BC943C1B5E0F8880A61BC213B6EF17EB8E0FCC13845C93C12F7D8B26E07EB5967C5FEBB8E84765C11A11FDD70E79301D77FC4B159E3B64EC554B6EE9793AE36CA0FC8A60C2B0DE5405B60B1C680F629C931E11FF31DA3AA04396154B2C27E42B0818E6F066F5350522A55422E890897EB3D5E1C9A7D821F6E0F9FEEF0F4EC03F83FDACC66F26CA1C4B08433F9504DE04F24C2AF6769791C6CB840EA2F23A80835E41B87274B587F556735446D4AB55EEEEE2DFBA549383E8FAC640C3B1DDBEC52B437C2C3C1703C5664ACD1DBAEAAE881F8032560376721DA8F690B4C4950A5822D77F95145A8598E0EB0F1A0DE80E1B02388F2057B9F9570B07EB22D4ACABF5CFE2C546E9C42B28751A688DDD932F92366588BE741029396B7C422081C67E7423814DDEE376035ED3A352E9E852F4CB0108B5A3831A46560291F4206A9555EA0E19F89D5A9E35320DCC294E234E8747C22C8E5D4EC4AE24AA7E73416160109C7E7397A92100651C5C71682FD0863EE35AEB8C54B7A8C94FFC785335FE9B5BB142D85DA74C4033969EE064C72358FFB11E9BAC9D948FB0B5C5DD1ED03CC20C51DEF9902DA403F69BDFCE0208F5072E7AAF924B8314B372AF760D0F25A578E6AA4EEF05C75A15A428A9C3C8800A9B2B87F934DB83B6AEA47D278E3C0AA8DBB9CFFC6228D434F460F47E78B0E52900B72A979119D96F71C734CA62E10A37702DAA5E7B24F3439704B50EEF6EFD94C00B812C7A2E17B130F5BA3A9CB47D7794F91C1A6ACD5E56B3DF80DF9F7883CCDE985F7FE5C00FA162A9A4A4D8F62C8F7B0E7FC6927BB990125401EFC3DBAD721B532EF74B6BF3A3725E175233C055A59FC785D91210A79DF31421EAC25D73D05460D7A24F965D7679EC5C89FF735228FE1D410335F2B494BF74EB7BAFAD15C47CBE029D99D6B8EECC0686B6B84FEC732FE0BB02565C8C1FC7DB7BFE32D2FC7F26A8ACC59C3848CAD027AC7ECFD6480BD640E69142B9DAA7D4AF579BD449599743EA647A7D0EC5470C91A3ED28820E765528BB407D6E51F7C58E27D1F919CDFEA7C99E1963278141778D4C0C4CEE47FAFAABAD98801D9871BCA3EC92ED635F425CA0DABC72322D6036C7561FCFD3843894940E20A45E58A5C6B4A5001A60322ADBE97DAEDCAF8248FE4D820E383F087882421082FF01442E2C074BBAC00E677AD07CD485C1DA67E804A1D188BDA7C38C7DF0E073F3A0AD968CBDA66A32C646A52EC5D282BA31EB64322D35A0E371D37DA6C5997980DCE9962A3FA59CDB3861D711EFCF924482600D7B4D278D7FE8A03B4801C89C568C572A93463A9FC776A22B66516879CB9BECC433F50F7A77A3398299CA4ACDC88D8F2139D978B2BB6F81BFA341FF686BA171E5435F6BC27F297E197A88CFCC242083B1C31824040B911FFC7336E38CCA3E4500254839C6F81D2E115025AC9B1C9B1A5672B8FB1A604AE9CF4A2C22F6FE9DC2F376550642668472B2E9B15223A8AFF5A8967AA686D0C2D169F7D4EC6E6AE3BBBE94C895FE147E8F354097608B5D05E2509CB2C74063471091BE27D7A9663A72BC94CE12CFAA47A1A154E0FA7F321F7D50F3B2D2C7330396369D9B3A516968FDEB06E71E20D75EFF499B945B9348D19DE9D9129EB9B3C44A76AD40FF0665399049F449F0F916F57AAC19C75F405ABA7590F28CC83AA1FB0C2C63259DF196C41D1115EFD2CA2EDC07C2C08566CB552B78891A529327E5556476450DE19E0D8AE43B0210EEC6C55325B5CA60464C9BA5D0462CA561480FF2199D141ECA3ECF4214E94315D8A0AD2863F81AC -MD = 1D84F6FFABE296EF5BC4D07A07F776913DA5F9FEB1104BCF9D9354C2 -Len = 30965 -Msg = 469C3F3BBCB67A3D535FB2DD1186E80685AF2CF88F3274BD14DFD737C2C7226093DAFF4DF7FCCBA10CC7A175A0D7D36D0337A7D1D7E964F456F9DEA1CCB763AA93A50AA0851BCD1FEEA1202931DDC10F5127F086A0BCD5DB2E5A87D28B87F7DA3817F62CB77B609CF8DDB2CB8CBFFAF3B83BADE9C168F9AD2A0FC2138CDD41A7F2298ECD74156255483F5B7D14B998286E0B93D62289F256C22C2C4233F14E542B111662F9DE4AB4BBBB75F9E8E3342EF897DA7ADEE0F825B97D9021858EFC32C86604692F522A4686DC94421F7F763298C293DE58199C49241026D476356D31586E3AB5C9BB96F585C82F62B1BF5C090DC5CBCCA5E75ACB4EDDDC1908E86399D49A32E277CC684DE2B095126A062C32689B0894FD5D62766B727100434D7B4B899009B4CEBC84E578F5839CECC003221A097D7FC0172AD5D0F165E09457A8BC0D6BDE3C82503DED50812F2E8E24B71F29F97493579522D38CCC40CA48A10E8613534934A615106C7BD7A2C3D059D65888B4F0278C329068AFF767AAD3940D2C6E154F161A850847F513E5484D3DE2CA8D1B2100E2F898836E275BB2D63EE54A7BC9418F6406F024E405491086B2DDD08DF78CE84FFBAED4E10A9F27CE20ECE63903309E7FDFF2F581054CFE21430A9FDB2AB7A5F18EC734DAB50511ACBCC06B851770C9ACC97B9547480DA54FA6BC82CEDFA09014B5D0C430185F5CF65CB1510D67A44E4388AFE053D9FC974AE4F93E7E230ABF4642F57EFB9E9AC3C80A4098CB08DED2BE8874FA37A3C7478C8C7E1F11DCCE3DCB7853E71FB87334DA480B4136FFE179E5D374CAEA153F89B08014C440979C8EE2C1B43C676A14AF58B3AFF93D878F632714F4E231680CDEC128E931C618ACE1F26A3DAE66CF45CEFAC68E7C1DDF19FAF7B617CE9D1D06B83D8BFEEF776A76455C6E7A58769BC042EC28D3D57E8C11F1076DD9791B34C67FA9579CFF0C36A18595FE003CB48DD90341EB207B42CB8C4D4E5323591A0349026716337919BD4F4E49FD6CB53D65809FAB73CBC6C92AEC853F0A97DCFDDC71C7633BB1030B7C003781075617C1DB2BFA5AD15BA5D767ED617AC08A8593851FC6EEC63A51CD1555A6ED087DE7DCA9B1B28AE638CEED9225C9883B1CD55481C9606A31DE1D4729C96FCA2CBE0C03B534AB312883BEFF7DE18A82E4B2AA4EE65949849FEE65CF9B73A0D9CACAEB56F190DAAF795255DC3A4A31CE480A3076202056CF02572CFB7B6617A09D8AAE649194C7195AA65957F979149E774B194D05FD8033C0001273CC1451C45DACF228FF6E3C9D02C43135F18AF497E49C87DEA0223DE4CBDA30AEDB145098BC6481ED1C152A273BEB77D4ED277D69D72936D668300022E5657E8D3F7DAFA24A4DC23AD5878A3D2CC66A7A7C2F182D06A0E4F7A4AD9F246CCF679BB080D3FAE9B352FB2CAE02396DC235976C8F93B46C00325D384274E9232BA2A881A547A4DCD1729BCF68BB5D0F0A47BA53D4DCF2691FBE930E6BFB57C9E8C425A67065744B112B6F2676145342D2A73F0E4F7C2305D19BE9DA9466061123EEFA18A6E54EEB5C58BAF49856F0849CE1CB1D3925C6ACC78463F51CDA78E005EB570C07C087BB6ADECEB560FBB498EA640C52ECADC30D22316BF77AB0623E1353CCAD4BF0E712AFCFE144823DA7E8606B6F8B7CB7577601950DA55DBF258669835BA02F1A3949841917223B1A1DBC5CB80EAFD6D7EC00C9FC1F89A05550E1EF778587DC5E977B10DA1B441E8BC865CC2DDB4FA489A8B1199146229DEE9D7816E2B0F33480451C08F16E57C0A26F437C4AE02030B40459F173690859B4F0246F09BFCB658FBE3BA199D763389869F4FAE1482725BC2E9E4907D14FCA341C78184B70C380ED2163EDA7C02BB6D095361760E062E5BFC6DBF472A8A88D512E46789ECB2B495D605943BCC25AF53BFE0CDA03E44F4A58C1DFB10E0B7D44C87625C5F1442C3D74A148A5BD319A79A69DA6EA2F896CECE5F0493552792AF52C7355E39DF0945744832253A5C6FE37338E7935471948003A7734494A70BCEBB0C21CA8B8E147B02996FEF8ACEBC304B6839EDB244A9C262212694C14EACCBAB80B66D82D2C2C485B5938EBCE11529A5BA5C55030B3C6379AACF6F643F5EEB3F11F7E500B061B3CDD9801B68962B28C79A59A9913DB84CC8415C1C7A842612E9F48FCA61B7F0372DCE7E6B47F7740A1F8B7FE9F98011088F058880C280D409AB847ACE99264F5C338D527445B045895480237CDEBBCD80544B5F4347090A107D9F08C5F16E2F360C044A04C63A40769EC8BB875111F15BAFABE3F628C1CAA273961B68816F30461434737F45B6AA23516C885362B47A4656E3172DEF82C2A306F90C103191C2907822D4C8764CB28A80AA4BBF00B5E2BDE0A64028DBDFCEE5FC50C5E38FD7CB9CC8F5DD548D009A828D3D9E53DECCD63337B0FD69D96B39B4C25468D9BAEA542A9E035ED8AED6DA7305029D55FFA3708506EAA1BF361985CDEC7370FF073B91316C93B95171CD5873EDDC5EA1E568117C9D9A81C1A9258B5CDD9BECAD18CCB385BE9BB7A053B1C924363186C0AD7005A5D5F3C4676318BA73F4A9ABE8DA8B27566F3ACA9832032CB38F648ECCFF44713B3A0142792CFD0CFB58663AA961907A645B27E4D078E888642DB3EC21D212309E3CD142326F5146AD624B6C728AB9300805983176351C8CB62BAD67B17379CC9C13FE0346EC49888057BD34BC106FECDF23E9133F4692EAA695AD448A38CA33B6C0D366B77CE7FE568009EAD9DA6BD4B6406EC67B24A63D7FBDE8D3E4D9240FAB1764442DF71490E244F411E5B5349056C19C7CF7B23E55137323467FDAEE380F48314089FE17AE002FFB1920D4B000D899F42FCB806E6C3E034819CDCE8F3E8BB5D6225E50000658E18006899AB6492C55061DF545EBC647E37E18ED3802F40F676E1524D61AB9FFC171646FA1B29169A90462F17DC3B66ED749D40A78F93EED4FC321F1A9F49BA6B857716CDB210CB475CB4AB7C53931B66C6934C88470BD206B1623EBE66A961D3DFECF6362493CF2C41463B12C673B7239C247574168743B58F400C386D377804C8FD6CBC06D6547F3E9631DF8A3697A36C22886322030BC6F6EBE03CE36426CFA8BBA2D4753CEA25DA7EE0506F02B46868C2DA6AD8AF2D2530AA427A5B7C4B4B9FF3261C058C8AB4FBB27127761B5B93010524D78D89FF1C46340D7ED3C8D8AC33D0CF840803F18E4E1DF2C17A60C514FDD0EF8F93AA6C1055FE5DA4E3AB47E667AA173E6EF19C3791598CB236BCE0A8DF3403993FE3DE2868E6C1059E95B61801CB584D9464D2748B2D1F0F93CCBC186FC774704856914B40F8D5934E56812A8E84A406155F281C3FBB156F64593DAE2903C5EB2436EF7CBD8D44663ED99D8EFF13B215B4ECC1F5813DE8B7522CFFA0E91935E6EF73C3D2E4B668C50AB8E3CB51326430914895E3861EBEFE44F95C0920C2CA7D82B907619BD53C5A37B0B63E72805018695FCEFE10AF43EAA2C7E905EFD1737B84D9C9075161583A140EBF6FE446103D8C22671DC197D4409096343274B41D39837FE92C0CE0CE61E59A405CBEA568CFA57143F8702FA6318AEB01B9F925634F5C047B9DBCC08DFD2A95D4E5875BA752DCBF59D49DFD08B9BE3DD83E614DAD415238FD66D1A581BF693AA51F08AC53DA2EC4EDF0CB1EF55A3E223B11FD326EC456F8FE9D015BBF803AEC3C51FC7BADFDDF63BC64D0E994EFF3254654375132417C68EB4013C3FC52CEBEB130071F3F4C9540C37B2F4166B3A520C9E38D29FA865D1F23EC23D9A061A40708156B2080A5BDC65917B8F40D30AE290080AD5BDC62B5F1C5D6EDCEECCBC5AEB1EBBE59D876F78F7AFE3C4263FC0DC0D3D09BC58D918A3EE698F648E5543E7E2ED0071A978BB873080CF4884EA8239F0C3E753C5B6E5C3D666AAE5F82999826AE8CFE76DF63A6A44A867D3A4F57F5CBCCAEF565750F9021D42DE0531755A1D2D0758E8D4FC9267D82AD1C657F87330437F7EC2E4820ADBD33FC7B7C96A2E2D8F8CD43656E8B427C04424E851E46B39FA57CF383AFB93B5C5C15D5183EC508EEE25895FB65895BD39E944AFD2751D1D53FFEB8D6B137AEBC98FDA94C14DC669CB368033CAEE590832AB2183452D652D2F8AFDD3AE911E009A657D73A7F7906DB50ECAA2A3AACB302D8A1C7E00C58B477A8DB02661C409C8DD60ABB37304CAED5368EB23169834A14720C4C6A674FFB8898774819F1F11C15641742FBAD0986F4C48D69084506A0C51FC2C6694C6C7E76841BA4F736DBC71A851904B395AFD6721CCFEE0EB4F0E9A44B6C8C8D5A6282353EB34421C258B6109FDCA46B8FACDA4C3A93CBF02575E626DEA3D445390862ACA297A4BE66B64A31B73CC614E988C5E1FD5CBC0C2646F92DBF2E3A49BA3AE0C84F181CAD5B79EDF0CEC57CD929ABD05332220D8CBEA7179A957BE32D561A52B42F3105AF09136D4EBD5EB7528BF8ACE8BBEDE6D6BF99CE8FB90DBFE7B5783E440350C5E0D9A0E4EBDCCD90C590C6AFCAEC8F4A70C44D069CB0686822CCEA2FC66A5E06E883EA278E2D41613D261EB0FCA8F8F5A136F1B9EAE8C622A3020607A75FCFBBFDF24EF809F4CE7E31AD79080E7CBF137C7D674CD552E8DF432F1AEE6BD455EAA6109692456C422308A17DBF4350F3735A6847B85CB27B88CED4C80742C30213E53BF4B2EFFC3EB51CB4E55D2DD0487CADCEA4F5DECFC8D3C35E39BC51332257E7E8B2A5D133CC49DD2BCCB80C9E03C6D58F77ADCFAAAFCBC88F57A28A75B69D6F36DD8AC35461D7D619FD4E829D7ED8405C98269BE675EC9E4BE809627F20BCF34FE345C2CDBEE4D226D8B1AF71B3EAF00106BABA94F46A2DB451277A821E432626919CCB41A172C592823CDE30B0CE66264C12FB02490EF674DFDFEFCF1893D458F09B94D700F83152810692BE4129E39A01F5DB3ED0A2609B542977C7EB2F3F1D5A82971F6E15577FC4A0B22D7E067D7EF361DE1E15BF298FAABE4C91D3EDF2CA1EA23236148DF79C5268999880BC9D4E5D2E1921F9297D04879F9910668E8D52C9C268072719DEDE3C2FFDBC88A823FE553176A1707A2618A448B9A20CA19B205BCCCF5212C59F3DF6688E6007AB8AE014C718F819A25C54245C4D80AF4574A94DDA19C1749A2E8DF9167AAC36FDDEBBDB92906EF634AA245D2B6CB4777A081A0ED722B2F89A77026CEE21E05D2042E409BBACE05D20714D428D1518328BA96B6F419F944612FA75C35AC362523901743BB643C5844373FEC1030E7B3142D9638CCB458F9E3E898232770FAB342592D9F9EF1B08E557D2E6F8DA4C946ABD3C51BF1488A8910FC52ABF0C817530D070D60BE237E5AA7E65F0319B4A6E8BEE70E5293FCF832003B951A5692F7A5A2CB50B374837D82E69E0B9A4F715266756BBF454322DE8633D91F91818C91D8E208213099B3D87EEA78ABE54484AE6E026D824F8 -MD = 1E662C29C88266873841F779865150010744455DCE993CB6B0DFA1D0 -Len = 31028 -Msg = 26FD1DAF04A2DCD157807D48F354F417EBFE69C1C024B7640686A566D662F01DF2C6BE97857A98EEBEF97F8A38F8C1414FD3B62D683DBEE103C8AFA8A46740FE19A0E2B146816A4ACBC686FE52F5586CBC513BD8EC6A0FACFC91F1D33798D91316DA09C004222743E8FEE68382A69C827C73FEF1987D85B044BB30CCF009BCEF7C0AAC06FDFD340C674C482EE9A304388E3FE01C706AECDDE18428C121C4D720ECB9A76410609526127643C4CD203C8D45866130CCA0D1F2C679ED82C2F060D63F512675E74BB5139316A7B331416CF63215EF736DB77A29B55718B750B727D82E09BC460FBE2ED7BB63C90EE70E5832CF8588A9601437777A04004864C16A00C708164BB6A0E13EC05E921A3470F188AA1CD0B4F46CF12F80CF06E77E5C38670831A114F8930F4CFB61EAF6AAC5332712603511CB15CFFEF78EFD8E88DBE8731A4265FE5BC39F48B79D5817192A03B89448EE82ADA2B28A1479595C06815E5F853D1C59042F99707062E69BCD3C674DF6314122F85AD425238C0210C5A764DF1ED9105B39FE3D86EBCD489AEABE9D61218C57527F1296C67863BF3861019936128C60A9B8BBB231FC76D7B571EA7A84C530CAC3D42A56D27B7C69472A560292253E7FA7D01722215993610954D1582EEE70377E841E3BF619F8BC5857C38983D3B4510FCFD45D6CD6222EAD99BABF65FB66D0A10DFACAF0635B398EFD5EBE13C3488BC0E6404A1B50FB37CFF8B4668FA5866719E16D13083CA0B9D41A908C1363F5A1F38760264835F363CC25617304653399C18A9EE51E74044C646616393F0795D5913860987F8C3F47C805039E2881452DBB233003A8A620F27D114ECF4C0960FC23206DA33D3B188EE29CC4915E5AC189FA5C4907F9EAF8555F9C13FF63B3ABC1B49C4D6A641614A28F4C4111029B76049A8C67AE5DC9B3E5BB67512F2BCB1568A4BC5BD95446DD619497DE0D27F0238AB7621D903658B59AE35F69CDEF4845FAA8002A6E5329ECF9412303D47CDD1F8B49109AAC49F4DAB5977A2D04897A0AEAF7D16D03479C10BBACF90F23733AB86A2A1A60B27F08279DF975C19F9B786F4DA8F47097057DAE9AA43163BFC49ECC0708C54D91A2E08517A4CDB72AF66097A75DD3DD60155D4EB25C5D612231033238AA0D009E50FB1494BF98223A78328CA9E7EC064D2FD5E79EA33C19E12BBB8E7936F49EBAACCAC84D4BF207C1A6E3B9F9AD9D51E98908DFFE544FDD859AB2E3D3167FE0A5833A28CB0E2D4C6A2D23883C850AF77E6961C7DF6DC6CAD6B38B70C49B0309D3C24057FD55C736B217CA95BF38076E79273CB741FCF59C4772CD6E885183DA65C97AE4938143206B4FDC878389A3BAC5EFD4F44AEADF9D67E35A3013EFADC05FB417817849665B6062250E513EB89B716C63CC64E195338825752D04FD05BD182C17B5E3C33BB1529459D9042B55A3587A33716AFF21621DBC88283ABD91F2A60B79ED70A83719DA6E223871BFD51C868E9478CC829E75FCDE7E5F34941DF9AAF21600B9A73E6C1240C95E1378535BE3EC05622787DA490E367C0614922188FB6912B0A1D47E71B772400400DCFB528D8EDD9870F1905013891EC5E8851C7352ADBA25C391D37F754F4934CF4918DB0303541BDADD26DF22EB2A1BDBD084D5531ECC709B9FE5067D8542E170EC2E4CC117AB3F3091B9122BA391FE2A1CA71BF05FF08944E684AF8CDCD51F0BD4E25D44ADA17CA2D7EEAC89D4B540BB10D40E75CFFCCEC5DC541367A4F36FC96470A7D70E308D2F2E3B8E87A5F1838729735526588D6640C61ACE5BB8B9F5488BE0B178F9E757B672F814DF5218544F7DB8060A3B5FE590EC53DFC692F8BE41CD4921038FAC1937D4E155722AAC69639F6CD048E9D637B004893D9F1F0CCE727E860BE2DF2A186B4C455841EB4B3791A838D1C38BF5B1A0A6F28E9D3F3654930A68F037FC2935DAC5A20AC764FFDCB9C8F130D0C5E1595AC6FE8906B4ECD8BB2F310F62B784BE72DC95E816B6DB88BD164F53061120167226DEADB19556DE3D35366180FB2653FAFFBF2D6E3C5F694113C1DCC5CE11B76ABCDE341E0CCC155262593A90B8645003FD3FB6DB59ECF3E11F5F0DF1E8E345F8CBDD12EF00EC6EE44DB6DD42F996E6C89D7FF276F938617E3FB2AA5D9D83F5FD9D04F0EED399A8D60478C837F3B4994819461437F0B340683897E3BAA5FFAA2C5F28AAF7D31B9CA37615DBD7994BBF0D42207437E4127E3A63A373A0E3F9220188356540588CB5BC8E2E2D1E08D9AF66D187A4E79738B70CDD4C06E5B99A0B8A5DA9B0D0D9D4DAE67A7EAF52ABA007603BD78197A04E101163725036C4123F4C0536FCDAB4FC2859E4A03DEAD82FB5A1D67817CE3CBD73334BEAD3CAD66ECA6F7CE054A83689575BBDCC2E1E191B0A109193D1E3D57A6A8C5E65E1422EBE4C7C9E418968D463491D4FDE0B73B35871F0A1C666C3B5EA3FA2CBE4EA67205FFE98DFA3107C2D8C52ED4E5B45FA48F0B9D0E71AD71DF21EBACEDE210C535659C2C0449ABC6E2B2BEC1716CE6B01D596F5503B8B3FF82DC57704DF71640DEA88F1570B15944557EF9FF96DED3173802FA8007E6C8DDC0E2B227EC935115E86171BCECBBD2840FF8BF3A7C05157F2F2CB1E4034CDA70E047B77496F2E30461E167EAA69CC2128872D7A306E50BE348A47B531B845F4CD8A8D7D2EF5128D6D75100EFD3863F93F8B4C72177284024DF5D46D4410CDDB5F083996772694A7E0DE9657E628181BC4E21D613A08FBCB92BC8188D41F470EE7BA2C2E278F25086CA7721F3A330D5C6998198F7DCCBA5C812E96FD9288521A25F3BA35DE2DDAB342CAD025EAA11DB37EF37FB39C9EB8FE2025AE1C4CB280807B859CDA9485F9BBD7FDD78D8CAA6E00E67B0FC7C64B937A6B0186EDF704C5FDE3766CA19AE52540591907B5EC94659B807A72BAAD68F153580FDACD81CB0771D95D2963428A10D9773C995854C8A5D31E53790E6AFEBD541D8E41FFE7B2FE366A492E33C6B2E918602F7CA862C42DA873282510E9CAD9115719093022BC69ED61347CE865682589D16D5AD3FC52774487F312F65CD5DE22CC3DDCA786C4D45BE803FDFEFB377F0E7FA276FA78654DCD871F34676B4CB778419B68E72BD5599AC6E617C6B6A2974BF68F80423B9C53413F2F42258FA41528F8BDA8805FDAFF844CE724EC417AE6F7B6AE49015D404255C72E75A3E701A3BB76DE48199182AFE1F3173443766EEF9A06714891B56A7B226E1C69FA84867C87C4023089BE11C1062FA230E32A70FCDAAF82C9DC54DDC1CB8F6C44FB4C3AD6BBB6B389911ADA8BBEC90ABA8DFDFB318CF5F7473BC4B756F2155B39C655760F26A67F4646AC04D2980C8BE524C99522E6F1E7EBF3ECC1C96792BA05163527AACFA0AB67259132C23567BC02B8C8C1F94262C22EDAE3B2ADE736EC01C7E5E091E73DA8183578B6A3557B655AC3A245CA828E5039A318F438CC16A924D7810854794C7E721EDAABE93516D37090541D4116F82E04598602D5485208EB2CA0FD22537B6D45FEFECFC75DB732AC92261C59D181359511B5C89880162F9FCA845184088AB2C2902810AEDEB495ABD98CE5A0E50663825F17E15EFE85BD70E259F616878DF8C641C82056A8FAA492A767854E8AD0B673A0EA2A51C12D06A142C20C5E7EEB1A48553E66E3816BB18D003A9C22550F81D699D354AE408E34BD5D1B7FCF63239F87E6BDC73115C6DE12DBF2DC5F514CCC0605CD893E8EAB4299299B0CED7CE6EAD2637B4F101D7EF3C328A2483B93C2B5A35C97056FD3273BC20744C8F1DDAB46D8FA81421FCD544DE9F324C1F365B2E24A26EF77B0E068E9C609AB8A0578A2DFC225380DC7AB67AB4E45C4E6FDFB285CCD3F965B32B34AF4063DE241C19D0E8C469D6A118AF067DE654B4C43E57D60E6A4F5C81012122B45528C6294656B4F9E5D383D1C495E42FAB3D2A0C4127DDBE27780DCAFCE4DA70BF0AED23D6C0BE1DB61099C2EF728EE6DB3A66F0CB070756AC34BA2F618235495DFEE0581F9F4894AA4ECA614EFB03FA1DDC4636A06A5F92EA80EB2CFBBD31C9E2B0C4D718D5387E23808AD510CDE9A69A3B10EFB911D0ED92E683DECD19DAE1ED56757D640501F7DB3BC23956B47747EA125868438E41CC4C067693B33904CD2EE6755D54FB45C79743B2F87822410797B39C1F3AA4ACE9B245B782AC11566CC6EA8563234BBB156D5F3F1313F5392338E9796F2F00DAFB5294BC056979483AE2C505951E9329FC16F9A230A16DB655ECE8E390AED06D3748C64FB2598A992CDD9AB17649D9C9EE283E9F0E8669DC1D03C2FF561C3F4669B8609C9EF8AAD4D8C7E4590A9B66D501EFF7045FC249E0956755716A16217057CEBAEF8F4CB005B64F844E2845B7637EDD4893CF84B4F5265C7C9EE699014ED4CC8309A0B9B982D66E1EC607084C6A860B89AA6D5D0F4892D4789B5B90650F783624EF14AC8B100E5B5EAFE3C36541DCA43D435B9E84AE2300AB24D2733FE5A029BC93F7EEBCF608B4E13CB98CE041699EBC137A6FCD575C239EACA93DB96E07F732A8B0A1125B382FA860B25D311E6D87FE693DA9FE747E6FAAA619E471217F1908D9CCC800368C99E6B34DFD5BE955B3CAEBB8485FB78090BE6CF252CD8F307E58573DC13FEC06A2A441F94E845BEB435B708AADA27E37DCDF64FD4D3B12B73F98A9E89B6C19401AF402A79BE203BCC202C1299D72881EC17A58DD13E230942DD1EB3DBCE8C362C7FEAA13D5C6937DB2AC62D5BFEDA2706DED2C9E3D698798092E897F460E56FF9B034AAA62CD4D92ECE3BE6A05F497625BFC00F63A3B1BD49DEBCEE341754FC1180AE7F1795C740295A444BDA2BA2B606722AF71A191144B76F711D338972B00E6C29085214359C81256986247CF10CC3B52BCF06B63D6FC43067A8B82FADD18146F06F4251333C4334E623CCB8D75F18AD18AE6A87517D4BB287160BDCBED9214A1032DD7C2F67D1014A1D49171E9B2D15828D74FC18E9EEC1E612F883324CDF291A7174D76738ACD5A4DA301146174C041A6B9AF45DDF8F3578DBA86989F9BAC0E037C72664FBF5923ECA51BC856B6A88450B4E0E058D3DE8B4A9063DB6280BB7ED2B7A8D1F123C94A2D91CDFAC87E1FBB6D263234BB5E142BCC940CC20B7DDEA3B96ED311E71BFF018DDE0C6DE476BC3F7E09066D4139B1302BFED062E61DDFD3C58C7B3A26DF2ECD005C1F43FA50767846140ABBC4E63A89D7878F9AAAD83FA9213D1FD3E1DEBD23016D3FAFEAABB7D3D3125B986B0DCD203172C013E056182297D32FE19DFEDB5784DB83519D629734CB323B39DB51DFAF802586AD92796457A12BFF237BD355B1940F8C0B734035EB3D689E57F12DBA237F1131A723080B25F538755E05A53D4E601AC78B618ACD479E47C4973C8354AC325C194A061B955C219051E23F5F275849D0C0800646A4987DC56CF37EB00B938E019BA703B2948A54CE062EE30 -MD = 5BEF1E8137AE0D6B635978FA2A8B84C05D0DFEE50D40BF1240284EC5 -Len = 31091 -Msg = 14EBDCFA4E9AE81A638F2E168E48BCF1AEBF18025EB525A4C310B348ED2C66DC46AF9D0DCC77BA43154D67123DA77AAF6522F128E546A90AC6A301ED6680E0CA30FDB5D5F3A9B93F6942132AB5A0376A67F800E97ADA1A8498F82B9F22BA04AA490C6DAD3340645D7248B9E74274950D2F433563546F978285332324BEF521071EF68D78B4653E853AA7382481F60EB89761AA134A38628CC93F11089CF00F1B237E529B3F9BE09BA46E421071ED24AEA85AE459FF61CA97C96EDDE81FB074020F3209F2419FF71B97CDB7D85FDDC7567861218DF1CB428429068A6D965E2EF17623B73DE6ECB8AE97A27F77FABD4DAD8A50E0E1AFBD42D48BB6F54EFD32D4E56DD5B064A7F4FEEE92B0666230FBD36E730C800388FC17BA5EF871489C2FED8D0C2FF53F8657EC1B2E6C9F14D3DACE378DDB409AB340C2C7ECB5C99423A525FB4BEBF358801731941694798EED3D96E25266775F33046C4DAE3307E3C69D747E994DD5F422BE78BA195B5CDFAECAF91A80D3DCA9C229E8A611C409B4FAB04E1C298E45C5EDCF852662FD211595F437CD0377CE8A458A22384A8EC23D51B97838CD175012EA34F70949EBADA9705FE0751CD815BB13E56BE711073E5ECBC0B5294186986956D925C3B154B3CE74125AC5D9A58230AD83123215AAF189B0FE0203F89774DFB11B23A510EC76C2238C9EA6B8F3895C4189B4359AC7E90F95C124F164AC5F97C24A5C0854EFB9A868B583B5D4989CB0F875E506ADBE42D9871F0F442B130C0F61F1A09A2E542017B4F947B22DD4210DB2B80E3E4AF105D060F4190ACD03FBD98FB9ACBEEE3BB6189D2A8AA28371C895E7DF2E3458C58C7399CBE2BFEB2CACE9B32B88DC4F3655F604CEBB7AB462FF34D3D9F0A98B7960719A1978EC3DFA1F2D6189F820F988614A7536B0DEE4FA03317E41DF62F9A3659C81206C84CF7C7C5B4C23E5F24C3BFA342BAD29BCBA9A0883329953FAFB42A5A85E2297E6BBB2BA3D9D46CFC0C00D8F6D5DCFFD3207369B051D98B180718454EED2055C6B5F544F8F01288A099A4D535BB2748BD388BB833A49CD4FA1247ED43AC1EF6B05EF0DADA686D389FB8F2DBA37860D3EDC11414662965F97AE8D3D82C71CA1B7DF688693820A22BBBF7B063857359EF329A4E8B40633AAD86A42008452BD0791168861149BD3D3B06FACCBA87AB7F932A269F91F60481933E60AECC53C8C33A23FBCA71F4562F854B692652EA1287DB3570F92520394D6356EB33E14384241F559865C71B2E985C04EC77E58885CE701142F74731558BBDF9F8A1036164F750404A58ECD0A8E90E54AF7190BEAAB01C2CCCD02F1268A44C9F71E779F0CA1873E2BF1C07883C284CFAF77AA8FFFA6DD1CAEEFB4718CC88182EE061A1C1075C2C7CC53E70D2723529BD9DF244C7AE3453D81F58E0475D1549A4B8C8F35BC84DC7FB1EAE5DBACB0DD8135F681E616474A1C8112D99B3B3F37A7D700E88A9640CA5840813EA88BC579D3385487AC2CE0733470A3E70010704D719D430643A3DDA4A2109C3E5A2920420B9A3737C44A7B9B8A6FD89BD8AEE59DBFD768B543C8599E6DFE4C1DEE7CFBD288DC20B3BC344B73FC557177C054EE1BA3439F6686FB6CA96C77CE5B047100FB79EEB1B254DFD01728B70F9195474EC1B8D67166A48CB1AFC0FE0B13639DCF592AC43620C034D46CC7407E69B403C3CD2E7C0438EA56A102B6F040E2EC25FF9542D2200AD7FEBE7CBF41D0AA42B894ABFDBF93149EDFCBC42BF34EFF1A7EC52000F9FE209AF0DFACB2FC3AA14105CD5A4959E88CEBAE5B4B3E513276BB5205FDF5D022D1FB22CA71816B051730D516DA3341734792B09F7089DC31EA5F6FE5A9F2FDCAE4A18E34CDA41007D5F107EBF095647C8A433B0EAEF9037CCA0F58ABAB833BB1287913E5A09703966780F3FD432B0CD862536CB35763F60DEA4F842DB91247EA49B4895413D2F339C45E80E5F321FE5C1CE86370CCEEA18254949D949775FE542921150E30D08A3CBAB6B28E8905A7A1D0A37AF0ED96494FE4763318B27FB6125FAC4C7C9C5F4A07E7567472638FBC6E17FC27D81E83BFBD7AA0378815689A18FFB56F79ADCF741479A55E983E8C7DE2709DDAEB2ABAECE4B84E2A87FBA249B5B5FA838B7C9673AC04F87EBD07EC26F50744FA4F26A814E4AC389AD03BD63D2956A9985BCB5508A059E89C2AACAFC239B8561137C42A3B3ED4583D4582BD8D2D8A62F6E25FDC744BA637F9A04A8F668E990B1C6E6C032791AB653F22D3BBC4A285C5FD0C3CDAB262F9028EA9F49ED48BCB9ADB35EE1FD043B41AFD5490DBE0941560794EC888B18DA5E0CD19F7DD15B6C3D62CAA5BE58B103C098EA3717E48792595C432E0ECF149F2650C43AF5E19F7A71672EFA7142973677D8FD1A2622C0AC655601EB40F3AD936065B1A516B427BE3FD00EE2F86F46CA26FBC58F28F96556754E0D035ABE6B93C2B3F0A59E2416FCFFEA28E8C2B2FD6AE6AFA4D0E9AC69BDE9D269E274A66D9FC1C974C940B68A3A2983FC4BE8462824F8DBC8C1BED6FE42E11143EF7A76978AA4A51B2449CFD9E1E30733F7AC4A9F8B873AE1D350990A0C0BBD5E055D7B11925236F8DF5E06AB5E58FC98103DB121A22C5076B1E070BD36F89412564F654ADA6193C8790BF687756801A163B540B69EE75F1219FD8ED2236AEA9D4537C34C6FE6305D2DF01FA5E6780969A62007DFAE017D337512B26864E49186B3F9053844607FB7F312FFF2972B6057662DE314F8F5CF28D376AEFF1BA3DF8322A116F6593AEC254EB44061227374E69EAD4ECBF7FAD78D0E2147431B06F537827A87BFCF5364977FDABEEF83382FC9057910141ADFED1F612B8A20A335F9DF4F5439F6E76AA8DD3B394BC0C95B58A934B1CC37E24281FCB74A9EF0825690957BB03FDE0386998C912C679BEB0B1438F45BA57AA4C74DB1DE0FDE98D63F4FEFCE12DE6780778F7EF5404E60CA595E7AEF898BEEB5B0276622D381843825FAF66A502708F59D8AEE6CDF0A8C6C98F3EC93E9F3FA0D2941D163779A3FCB061BEDC547F26EBB47D334BD6A21B0754C970A72E289312EEAB8492BC388139B7EAC3F878881173856CCDB3970ABE7EAA2FEF26C78DF5F16A1FFD9D8E476C86D3ED04416BA2A716B27A1A1DA9D45BB084C6FDBCED13F84BBC5F6692D209D96298EB3A3AC45F09A45C70041179E94DB9F142F7BC95778D9C2C70BFD6CF63BFA30F12557C0DC75A6C9789F74DDF1CDDF61BBABB058B271F27DC2B01D2764C937926970E8D3A25D290C2E5E2992FAE3C00B35FF44C3BBEA0EFBDE2EB7B2CDB516C7ADAB01AFC6CB4859BEC04D1E1239E702CFEF16712F0889272948815254FE0AFBEC158A21AFFF31E9280CCC6C6A76CD494B7B4A73697EFA6E45271D8D3DAE3CBD34ED2607575B665EB0EFA7355806F913B3C7420378768AADD70EBB34CE87596C64103B4623AC0128DB3F6A2C161EF9105D1EA26E7F35AB62996FC2FD1F973F9E799864E7AF4FD253FB765689CCF7EA63F817658E9E0A60B19A8D54EA0E16842F35C97DF958D7434498B8B15BE62CB7690EC9ACD5D178C7AA2DE253A11D07F1974B2C584516454CCE171D71E05024ED8FCAAFAF8429F3C03D2E56E5A9EFBD01B17FE80B3EFA79F98265B02C7D171BA1F75FA94EABAFF2F251E9A8C1ED651403A417125627B126526EC4FF822B43190B087309F29A7F477C1D545CF203049645DF99A53CA8C7AAC68CA6B13D71565A22047FF4ED7C99D9E062BE1402B661E7DDBF407011C6FA1BC27938CFF50402DDA32F9FABA25C35E12A0D40978C1B9AFF5834C7EE35DA4CB1C260DA82B7E0B903C1492C83220F007D5CBCAB38C9092E3E80ACE3F361F805686491FFB65BEB4F801901085DC9399CC0E8640731CF46747C8CFDE3BA426C57679F8022F32D61EC7D089A64DD54D6E0D31A64E11386C7136AE57CF5DF3350725C8C2371203E65EF32FF1BE0524BE5CCB805770C6782061CDBDBEB097D496E898ADC84B7414B3B782B463ED64F89FC68B6B0F691963DBC5466ABE40C152B2164B296A804FB4C845D7C99FCA0FB4F1DA21A080D05B52B32A1B7A455A5C4AEB0E26B671FC26205710653C6FA44DE0E29345E32D2E525017D80B865C4A4A519419408815D6813C510AC6D2D7275C9FEAA5668729FA46E9797D2CD22B22088D393EAABD2B6DE482D6B16F4F66ABBEC2B6FFDE99A4A794B8ACDBEFCFDA09EF0239AEAADF4CDF6A9B5D3C850327BA556C0EE3559A0C2A15DC557D03363B556D1D1B2555803E1078252E53DEFDE42AE5EAB0EC37CC84807DB11307BB4E2CA07B5FE4787314A97719417C7A5150067E7B9B524B4BC2F1BC94F75414DB9A1EBC653BE1525B8B714D7169E9EC97173CF12523B91C5EE7D20C7B6D8A616A5F08FEAAD0C721418AAD5817F318114C0857E0762EA2E7004B5A8EF386C6D29718E129312C1D6E8244E7EFA9E88C6CA38B2DD9C95970877209938DB22037D1F15260808124AE35B78A9D499DBA5F2A91D6E393E60616DCBE21B4E269DC9E11469480B453C020CD1D05A0C94F6ADC3A9B4643FCA9CA66BB4955224136FF046595423DD4D05F2E5507FC246916617C856D3742148D363C65ADE40927FAFA03AF5DAB6631532CA729443114CBBCC15ECA09BE32C0900B9DA4D26E268B9B5E4AE44895EB724E92476F0F81C61D84B2FD250835D5C190A879F260385A9A00516C6D46618DBD7239DE42ACE357B3155BCDCA9C703091604EAD1457E6A9D1CDA93C455232E1499F5B22A258715736D69AB9E013CC04C369DB625A2FB52D318B9F5B12F904F510B6889B675444C642FF88E6EC8A1D253247BE5704752261EB1D9567900738F5854694390403D0570B0596BCEB8509DB25B5BD91C1713D8293DBF3B3120F9306F5D8E6BD1EAB6F61539F02CB30939BD37A0F33D193FBB4E050F68B66477AD9CFE0A0462EFC47D35E01B27D5570E19E9D85B3A4730CF68695941E6A49D3EA07074116315196E0E7275429B52EB37706DDF7326332172CA4CBDC71C8C6D1557AD03F607AF3F28BADF335DC34FA24CDC37FD1C57D48B40303B92620D7CBB665C805B71380B4731ADE7284C4DED84B905E9B6BFB4FC02FB83EDF1B4A9E348C35ECB44772CF4BD7CF97C4D197527E1D9098C4E44556EE870D9D3C2779D1D78837C5A421EEED92E839B6B207F82EE6F9F618B3B26F49C7023C7919B3FF622B2A3D6F8E1DDF751848C334B0D33BE9E235C3B1D6F34EF9778D5D6C9D93B6F025DCD3AC3A35B95CC1CF4C3456659ED03EDEA200FC6A542FDC97CBBDAF0E48916CACAAE3345C9B47576DF7D61A942B6B770A942E74F9BB6D2C7D145051CF9695E40AC7BA508AF149A217152B18BD326DF2DE89AB23722BBD335B8AB684D81F9526C2B4EC91FB61A04FD6160C89BD92137E7D92399CCFC913C22A25548B22DA7B236F224F23EE850F2C81D121ADC18E2C4EA8711E8E857651BBBECE7BAF23BBEA0320A16A6BDFA3C74108A0 -MD = 01FA3CA3858C1F469999C5C77A4D7089D9816CCA81154D35A0DFAB44 -Len = 31154 -Msg = 3A5A0275F7EC4FF8B535C173B14A19DACD98314BBA50F04FD3C49B06317C9B8E21AFF420A692A66E5D4239C957DA40E0B21FDC57DB2F482C99A50F9B8D365AE051E629402EA48C463CC9DFC864EED0FF06B34E04C8EA71F3D402011A22755F9A8098AE8E156ECF605F57BC104B1448E6866E533B5E85BD41224DEF8B026F09E5692E458464E75097C283AA077BDBFE1F0A1B4801842414C7ED4C128AD955D9C566F3C3F6361BD8D7324A201A60D796C11F759C5245F1BB4E490976C8451B9A3DDC878B2EA42B9DE625BF8CC2371680C427630F74A6437BB2A46CEE7768A32B99E6935C481A00A14884599131609F8CDDC8A07B1F8CC140409CAB5D05A0A9AB401C36E4412FCD47831051D05219AFC5413D4472323E3648AB1E25996F80795E05523925CF5EDEBAA9D36CD342537004ED2487A99ACE1949D1F059CC9403FF88D67D809D6262034F96194F34E4205BF98ACA45FE954C937B7B9F50AA1FDFF3CFF7E1807C3BDD9A3E9F12A7187B93590C738F3868672D30DEC648310404BFFDC767B03AC74CF7E175132636EC425D084E422CC032957D0BB39B5F028D8FC55575650F1A508B2A6D28E7072CC16640AFE656A951917783754FB34AF0483B85DBEB579CDACAAF4E200BA1F7ACCA8D086CFF350C9757D0B77268BA1C702ABB6A04EDC298E97E4D20C828C8B9F97E119FFCA90F62C0F16326CDC5B01EB5ABC8A8A09615A8B199368F027409B7905499D2298C7C345CE3A82969B371C22F798B7339DD68895C0A772C03F9E0FF72C44E6F6A048FEF0C5609C4DEFFC440B6EC9B21F78FED1EDFE6F9174D63B0D034BC3A9DE28C757FA98B5AABACC0D3CD3935F20EB72584B306F754C372A9DCCA5A9C5F2B04D03629D056DCC351EAA78452A2F405CCCE86326FA834A8A2527418A6F7C934F615E3D19AE10B75CF31D55A411E1E94038C16AE9327EC9DA0D311C054171F1CD442EA9253C1C41F5A9FD4DA181E5ED487A446DACCC0EDA7A9E658160551F6BF1B31F3CF071AB744662632EA676F0CEDC62D54D5DB0165F5024F442110339E6014CE5B927990ECBE61965FBACB9A2DAF146589BCFE085D1176F42592FA5AFBF791D9C697999863FDF0A87249EA626E2CE139EC84556BEB439C4B2F59D197E265C82423DED4562F69F4667BB8787355A65975B70014781D0CAD8FD11AD4B9A75B7D452D77D9C7553195BC852A85DA2ADFBC45712451B2B2B5E67E8E01CB16E0AA93F0AFD5F04333FC80FEDE1C462900D63F82AB6BFE4D219791FD59316C69FA19BF0BDB2DE30BD6F066E295B77C52FE4EBEA73C241AD23888341CBFAE4628AA45F20D90E234C716C3E419DD57C8E6222E7E8A8CD155E232986D3FFD1FDC4C366C47BDEAE9A1B2CE64712DAA74C8E58998D124592C7D1F062C37AE6686B7FE2E697EB57F858B543D06F0210AB86D38D72E20BC0EA2E826044115275832AB12C97BA985E6FB1CF83593736388ED94C3567641C9DCA70EE303632465F472660C0AE9F8B54729E602419B93272612B7A1357B5817D580DA5ADB7B989E360D700189B835E2BD121AD47057FEF6B94710050BB4E6D5F8E344E1846369BC0133DA2BCF1B49B340D7596D3E4AE3FF730C93725FC4E068E2432FFF105F4A58DAD4C132109F39F942AD3CF6A680F991B9900C71770A8715BFAAFB4B96186789EC5B172C5CD03027C7227216161D1E7F29BB03F6B236A0BBA5593B15EEF400CE05B395F3FEB304E8AE4FA2078A247DBD1F4D20CD6CFF795F192F6E6696EF2EA85CA718FB98323E0B01FF942AD7CCAFE149DB1CF11FFE1D68DEAF9A56D296A829D22E24B550B4F881866C177D3BD7EE80585C23CE6FD4467C7CC9E2F9A1BCE067B3936BBDB05F5609E3C7C0ACA959E6CB632C7FE8AB5D8F83C6434044B06D7AD0D206F5856216A01422BC3C26995813D54E37C675FF14DB1A486B08932588321EAFB3A012411F6E2623B568152ABF5F7C82EC2AF634EFA3E88C19FD903BDDFA79B12B6C8BE99912BA26C7F9423B6E2F4C3F1588C0ED91E60E572564BC871FB15BC89596A4136E7BBD718F3E4E186BD77069569A716C0D9873BE8063403F8E1A4B005F2022124C9E78A29604C68ECB103FC99D5602676D18EA48C6F8265C4DC0A0075443C5A0DBB1FAE3D0FF508658EA0553D324FF9BE6157F99F501ECDFA4B35DCA7610782CB9516D0C4CED8064849DE7FE2BD27F286523EF33206867B3C6AC73BC21A0A56DB174814B001CE7986409580C149597AD070E7EBFDC1509125F765750F356CF4519F86769D118D46F68C3D81DA761BF3917F0A33CE8AC83694524EE9ADF204F259AE85A14B3D1172E2C3C3E97BFAF9FCED70202DEC096F0B7F3BBDE7635F20A55658BAFCF9A8F406C0601DF1F78F8EC5F0EAA4AEA518E82B10095569033D8F5AB0036F2A9F9FA4F0BA7C6A7ADBD0C0EA71EFADE211561D3987C7BEB6AFE875EFC9DA7A9FA1BF50E3689FC872EDF3FD65A8E406930112862872AD5C0E6ED55CE18F972968E68545BE2F4865143DEC923C8E53314BF19BFC91EF1CD231BE17E16AE6A17F6839AAFD77ADEB41A64CB4E3EAE78ED56BCC4765708CD6A95BE86B78FA7328CA81333FFC610617E590F4107F28E156ABEB3171D13D690C65E3D25DD9894B6200FB02CCFB52A3020E3F97BDDA9D2D3F68527EA781534CCC7E0A22BBB8D824F1EC4586BE2E84EC3C9F7051F9B379E0B2D109EFDADE555F6FB3510EC2DCC6E2D6A186B8F95DE8041B11C03B42B22775B940CE78A7B4EC75EB86BF78EAACD636011D63F29F9C2B7D9AF39EE2020039D3722EBE60CFAD8BB38FBEBC29C2D9AEFB5F69E71FF2B0D8D1AB2BA04FFF563CE853C42178DCD35084EBC19A99D41363FA6AF89C480D3BD17776919BC058F2C710D78945EC1242AD4F8F1F49852A9F434AD5365CC1077C7D09AFCBB80FEE55F8098E0A48A8B0CBB194849D8B56BE21ECE267A3C80A1D811373ADA11CBB039E7BAA2E0BBFE1C6E548642C5A845FA598BEE017FE262EA9699490E7A3186559C4F9FA2B8BEC58882858334CE37CCD6FC0756098374118DA53B7672ACB59368ED97CC7464C749F0E91CDE82795648E1A241B0321A4F2A007176CCB6A4F9FB4742B9A55FED625B82E0FA294931A2580C348B6D58DF99751CA6E50BAC692BB291B9DA61BFE06E90E56F79515C4B24C041B2BBBA44DE5635177EBEA2944B9679FC9B310A84655D384935361476723696492364DDBA20D42DE02E71436264A52C5D0FD8B4F295480432D600EFC3F36A45BED5D74384AF58B3BCE85BE337F429535D7659D10FA83D958D582E67793B0B224C68D2F10F938A1119669A1AB5C92091C35DC21D388B1115551E30FC832A3813896C06023EBA822868E35A85223ABE96C2D3B3370D8B4ECD161F96EEDA2B41D00C2BB82CD4361BC2C7A03F34C942FD6D9D54FB0A5C4837BB2DAE16B613B13BD10F69C1949E8EC5374B71771BEB67D047F557B1F57DDC949D7A1369A041141AC15A19858E2303E32D822D6DBD0A111A6E28A5C774A94D65E903BAE0BD3ADCF4619106FF6D12FEC524F9A0C8CB03430EFF9C1F0B621A2610431A54C20BFB4282B42EC3B285E58E11C28EBD14934D028BEE17E5F64CE1C57C56F174D495FF8DF453C5EBF5437EA31855AF8D8A2F4ABFEB52EBAF9ACC7B6EF8812FB173A8BF1596F247D261FC5D8601C6753AE986E9A7B0E5E05842EEFFA276804321D0AA6A0FBF31690A3BB1EDEAD38FA10F033CA1E7C8A657D46490C249EA83D40A027DB797C94490AC6FDE567E25C46BA8A9C417165DC1EFC44F8464C9361B4D2E2E51233FAD7C50AA7186136704EFCD65E014975FA8E6F5632E74F8AF1D5220A4388B54005B29ECE752ABAB5E9A90CBE40D054C2B404729E071267BA56AE3738466A7BAC31E42C37C4CB90E1C7EF0BD79AF263EDC48C3FBB0B4C50A8CB5B71DFD1A64D9B7E4B76A91CF3B558B74ADD2F492FAA96F9BC3A3C65168DC9AF6EC656207A8B51384CF857C2582708122B330A4FAEF96603B5AA45E8F9443269FB331A6B056CBBD137D7785A0B83371414E53BD4E0B6F198011995375CEFB7E8458B1338D2EB5C981C11E0762BA6E3CE5EF3611B76E7DDB2ACB2B529B6C77E11E0F2AEBBECE825551DBC82A889352F54F37FABC4477A215D741F73DC23809EBB080E64B0266AFC7129A41CC3717920CDBCC3187C8F995E58A62A196A186CCBE28CFA41EACAC085316AB2D137513D95605CDF9BBCB1146B5803B65C88F54D257C3048BAA92E90CE5888FD09538CE6A083929870FBE3D2A347E272EA34740AC62B21EB732E1C4FC72A8CC902E8CA306425CC3B13F54D763BCFCCF1FDAEC40A4093BE795617B905EF0636E7695B0CA20D35CD2CFA869FE3DE17E1DB5F02321ABC2564A60DCF6B00EEC80BCCF02DF9A5723973083919C5D280E96E764DCF15F919797DF67423BDEF12B84EFB6E2E0527A9D3B75292A6D08DDA3D55490034737BE77AC64685F9E820D1C56DD6FB8DA246AF826FEF1CCA8D667FD2B23B035881A2C54F0C859326977683B395306A9B70C18C5184D249E4E9D7BA650B058AF58C085551D0B88071B65FEFB86F87235C437DAC21D233930C96DA7376F402F5BAA8CCB6C370DD23FBD428130E889B3BDE27900B3605DC809A06544C2E32C5784740031738D205A19E4634353161D782E6FA33A65A1037CACFA2A25B6C048C0E2A5A085ED8117F6C923656C725777776B10765CC0DFFF10137DE42262A65CF6A9A9CE4EE9591A97E0928AA54A08726329FD7B49C91D93D068A20C98DCCFBB07CC97C22A6142C73E0B472DD8FEED44452F8395A685D1B2B5050A7AC815B53DF507522848D4D905E3C638C76ACB4E97A9B4F578645648AFAE3FA4778E940F43F6FDD6628DDD7C06FAA53C507FFB5BCDA8B2EDB99003EAD92B3B7C3EAA8A5C83373C431663818D143A0448F7CD0019EE6E743123E9CFA2958019703870BF2FC5AEE5EC923B4BC1FF739F06AEC52CF75144A66FCDBEA78DDC59DBE3A910410E1D22F8C90E37C85B248B1D4B35BC88EC2CF9248F1467FEC72A95873C8DBDACF8AE778F13FC0D8F5D94C551853C263094C7188BD37C3BD9975017B4412B61E6C2A4F20C113C27FC2E30E39B929BCECB6BDB4539791F93FCA4BCCE7F07A861023E6D294D3320B24F1BF9FEC41EF911F02F6C998F5BEA5659E75576D9F5CC7A7D1870D1E3A280E3E10D4E0912BF31DF4A60CDEF2D147999A49C951A249484B69ABAF75390E00DCD45B3F3F3B3E7183542B42C818FAEAD68C105C263395CB3CC5B2BAEDFD0450C0CD21278C9AF3048A707290101898B5A807EA597A3FDBF3D1F8460C421B2AE06219778543E2D5280A9EE6E37819179E556D741D55860006116F9EBADFAB13B2AAAE518748A2F216BE815CDDF476B3AB0A29961226601AE734E7C6EE5C9A082EB869970149D11BF3F05C827D77AE6511D9920C168538D10E002BC0C2DE264270A5A94AF680BA84302F1170F971ABF6F9716E03B9104607840654080 -MD = 95340989B09D3925111CDC766629E4CA7A57E3B3C1881740795BFF82 -Len = 31217 -Msg = 7E04452359449E3FBC35E541CE11158E357C61F7047564C6E16963CCF5563D0022317763C606470DAD0B7E185CA63C259440C701DBE9D9B30BCC96D9FC5B61D0265B2C6FDCF0F5D4817D14DD0B86E0C05AA0DBABD27BE568AD851DB2A38C57878AA395D7CDCF3339A281907B498BF0E526A42F3615024769BF68D67A9DABBB7FF12A74998A9ED5D25633F85C2C8DC143AEFED3D61B998698C08F5E1D2A10ACEB837326E93F26B012EDCAEAA744F1A1398ABEFF4E387C0C6D4D05420F06E6D8E0B62ED4FDC98C21AA7B74ACB11206B637A4B51888DD1D8DD03C1A2E8720C78A1F06A444E5F4E084577EA4C713652CA93FC452C60A00DF0B57F16D42084BA730AF119A99726ADD97CFB37E4AF83E9594A9685B17F8B91DBAF8FD93C851441E12887E2095E0A316EA2C9E507D43B19030B710774A85ED3253D9AC412FEACDDB024ADFA011543C5E1D5558F0B0887C98F83D8E9A127B8C966014E93E8FE56620F98E0C9526F42CC6DB9BF57E21D7ABDF806283FFF628FC67F17EF3A88714BB7ED3256832AD219E58B3FAA0DACF42AD8F831BDD92FE426B147966110A3F03A2C14F9363D6C8B3AF1C8C29AF2A8A172758371420F9A0151160349DA260093530383EEE0864BCDB2FF7BD24C48706D1A08276A3701A439DDBE45E7425CE1B5ADA50D1794D1EC990CF1658A6011D5962DCD277EC4193A01D9A308273C3B756C84701ADDFD5F1D05B7D876AD2CBC57241D2E4F7252ECFA6CEF160A5FE9511BEAA062ECC5FA76307959ED88AB4D054FF73DD8E2C3D5A01AF60924B27F5E0095CB1D22ED8766EAA9143095E49DC3B29B6DD26D6FA3E599261855C25832D18BE3823EEF5770B9AC15403B9A155835590B8748AE4C0D85DC279CD0876343A04B56269D55284619190F927AF3E99A0D4D7320909B16FFFB1D0145498928E4B7CA4C2E018F3B9426568D4B1A8587C24FE57A30012370A75319F15DEABED1625947595EE37A99F7B5291D3AAB058A4B9B250D0099F5D3D1631EFEFEEA2441AF6D5757C0F783A383BA4426CBE81199047FD5EEA164088A97720D297993F0C491DAFD6E00BE0BB8479F104768157BA630C5C8E44CCB4256A63DB88943A0A583D1C380E60F78DD814862E7ED47048A75C5F90689D931CA22A8CAA0EEE809511DD87A79959F7CD2E6D4BA66153C0604E08CD4E643E775B01CFF987509EA8767D3338301992C53C0BD5BF28CB15B6E69AFE88DB02FF96CE3153D2BD5BA74C31D1B59DB66F9A5C955A981D9D8FD3980A7D9532D8FCAF0346C382ED9ED6FAE636E5541FDED904396E6360A87ADD0702CD9C62802D164EE43131E4706DCA1A4931680B095E24F5B4033B4D95C819BEB4F8F96C2DF019FE49572839963D9D14D43916BC78952E6070C5D4F7276AE2D8C7D1F8D10CFD83E687B0096E807CCF53AD973C356264FD3B440A33910CAB5D4E70B7F8363B5800032E177A5241AE3A25774D936010F4E1E82DC15825ADA7B0BEC742F4CD4BFF198C5E0A9CABCC64C3A3FC690E9F1A325606EBE23A4BD5F380CBCE2121D46D79AA86C38580CE5508A800AEF7131AE7F48894866FB0FC417F72545895FC8D974A9CEF4B6FF8E13667F475C4C5E265140EF31FDDDD2D515D5C52A0268CA3912CCE9BC78EA612AF5AA081223D2C2E39AE0698B5F3F7494CA836D79F2B4254D9431863F870FCA11E207B45C09C77B428FEA53A968AD0CCDB83769F1C60D84C8592885BE0D58B04844867DED2B2BFCFD19AFDC7F67E540D068AA46B42BD3FCF6A27D156F3FBC7BFFD069C7106BD6AE37F121A56B33BE198EF4F79FD631528BFF9E160AE95485062AFFE573F4882E0A897B7432B960355CBFD8CC8B2FA98F3394CA9E625464C013290C386C40DC4DF5444AD2AD257F29D48A371A4B1191F32C41B46CC7A022B61C026ABDEC584B20E9FB99388A39D6B9DBB91A164E761E10AA88A8050C9B7B01C589EC569A12BB22816BC724FC0F0D4595D7A63E94029B1C9C6F27D3BB043A3DE28138A8C8C4C1FCAAE2466CECD6FBB40D94777BDFF7B73285A6B9CB171F9D9D55D660583F0F7723D04B1DDDF54A4E34C094441A271496B91F3924134E212D8A2C61720A4015659BC38730375B3EB0677F3522E21BB0BA64EDFBA0200BFBE97E385D642ACECFCA3C5D0AD9C3200A27A631BEDF5511F2C40412184BB87C51828B0213FCA66186AA2C8A6627537AF58D43C14AB140F7022856A83E375D719369A1D955B6E585B2D12B54457EB0A59F82B67801BAA575578BAFFE50E4277F93F676C0FD38CB6068F893A1555DE348CBDACBCDA76BC21147EB5439239AF21D80FB0D2350974D0CFFE3AA92AB233B42B33A849D3902F20AD590CF96C6BDEC1A67E39EBB9347A661BA9CFECC0A88472B9D6E59C45F1883F89B82208DA6E2D2F100A980378A7B7BCACF94CC6158C460E57566460C24F1CB2FCBD8BEE551041986736E304CBB54CDF1B18DF5B3DA488567C942A62BA1D53A673AE40D3355CE26F051241FF25CB311B4898AEA2523D1B576C2BF69FF610DE44A45F0EF1EF8E597241561DBAD5B57646216B36F3C38A67BDB020A67D7CD1669768744F8C97D4CCA14659917700E01DF15B7AA81436DD3A3587A6320863D2FA157F421FE23A6FA6DA22B9D293D4EF30517950D79608F11EAFF9BD6F0C0D271A934081ABFCBBF2F3216D8086D084C16FBBF1A523E46F89DEB79D10D7D7B99B2741ED76FAE41C3F4D7F63421A549411A8EDEEB1337E386FDCC93B593D8BDCBDFA6CD2F994A97C218A8E2EC39B696A6EBDBB89DC0A878703965BD70EBC7BF4A42BC9CA818B019763744DD6929CD736A2798B41FC193DA035D7CA5504E934A1F47A3B40BC36AE79CEE8B4B8A9D8B70BBE886F66E9831DEC1D79E8B3FC674B7D2A4AF0048C65926575341CE3E4ADFE33C37AB1444D4D26EB93819D1BA658FE2F155BFB60362AB6C3584293EC332D14A9BD6CEDA9A4730EF1329D4174FEE51FEB3D0A7EEF1C22433AC85F80D60E487CE05ABB65CDEC552A8A68FF804CF3CFF79BE954D5F0A5228B3FFE73598DB38A560B1A9CA817824730AD7D0451C075B0DF591A9FCC206B7509782164EF29C63E742A6E5A6403868C2FB98D6847EDDC3CD1DE87C42F290C70262845D5BA5D3E37A1D47AF5F396723E15E8B14842EB0B23D159CC7974AE08D51D37B9879A536AA4BC7BE5893EC9D48D9CEF8F074CF62A8C26B13E219EA1344EE3D43FDA5DC8C96FC109AB19C0BDA0D3ADC5863F252FFF6898D908B059EEA21B83225A0135AE61F3AB15FCB22E54692365E89060F31D2010AA2E2464BC5E20F84D7DD1AFC732F23A868E5FEAB5CAEDDB0338585798D95472E4D96EFCDE85CDA53B1391015D80566B1B2C6FA451D5C70FA587F253CC31418B56B13EAFF3D141EBEDAA64D5B5DF887EAA645951D1CFC6E02AFC156DF294E3A717CA2825039BE115B8E74F1D4D9FF14A87E948466A8FC06648247E8FAFDFAB6C5A1689FFAF479A5CFA0EDA869FB4898E9D470D71666228E10904D715EFA7C3B0E55CCF5C57F369C0E577551E1533E7AEB30236F99A98E4BD4DD2753A659941BE26B652358CFE4CBE8E8C6959525772CEF71E111D66721320D844FA17B06498BAC01E737425B90A1DD3F6230CFFDCED9615F305E196FF1A9ABC2964CBABD81CBEE4600B26EFF179DD2325B633B8543F6E3EA7AA416546F2569239C27183AB6177D5E85D36EA8309ADD58F04AD1D1C412F52BE5CF7230DF7AD83C08099B0453A8549BDBF9494A5AD46EE78E4436EDF45C4F5C63C3B7EED3B60C71F1F5C01CF5BD0052FA444F3A0BA56720DA28BB70718F51D1E98FE0B6F54B9A46142EEF2FAE3949358EC4FBF6A6A9B430AFEEBD63AD335AC09476C7E7BB154D349B080B279ECC1A187F3176E43B481EC3D4AAAC81B7228ABB07A9DE1FC0146F29D76EE8454F73AB92E846AB4797B1DA27F4A293CD2F24FF1286E5772F97CAF75E25AD6C374FC0C7D7CC4EF06EFA136B050FCB02BA72CD991C5ABDB9E73E36D9A72EF33E76653F5557BC9E8E2ACA155D7EF3F7F8D1DD9F3B0314197E49D541CC081F61257C3958B835DCA26FE2F70E363FFE7289E1B368D2C6626CE887E9DC62C7E2D6D95887547FD8BD72E2A9D87070C7BE211EC5047D4F04E3E1910F5CA807A62356B412BDA81221A61FC93D7F18678275DB60324EC94E7C0128CEBA9633ACB29E12F20D374E6309D966784A868280318287072E01176EF6D8889C23BC3F997800815F4020601B3A803618A435124DBE2354EA03AAD3C6C32A5BCBF073A010B37ED702EA8671BB5E318F3853BD00209A57BF8E27D1928ECBB4CA567F1A17A384D16BEC5BD884A477F3EA78E0DB93FCE1B368AB869200FF0CD6FAD3F16D15C970BC27B025754EA195E3E0F71EE4AC74F915AE55CB1695032D24E15064C359545505122262B80FCBCF06A42C450E73E659148C40A50110EC27A858DA056B4DA7F9654B1AF8D321E0065537361C4853A6390B80459C7A01D9A99100207922B02FAA8F6ADB841838DF3F835FEE72948AFDFF4C1A97FEE097EF869B10BC4E6DE587BE931B5C99376571AC3118739516F6C1939B8730FF6F4E583459A46FB97B58F5098F57A2456229218055FA8ABF6EA0588CC514BDF9CBF5FBB1D3EEAE9E57067D0A2F8803437921658706FE56158BA2C92166EDEA6B2EC49328AEBF65E9787217291636F36DAFA2FDF489EF4B7AD6EEDDC81B84D7B49F5C893DFF6AEAE3266DA0DB205BFB2CE14C545851A08C927227A1BE830FAC84E747DDC5C5B6B0AD8035A75F366A2926119D58A7AA4266925F3784BFEC93006E273A60B58F46D0498E25F9A52B88113E205A33BFD139E5D30447AA4209C8CD74A3F85270AF923E6DF52986E7217B638E319D376FA7D6C37EF2DCD6095807DB9C152B5CD25F4C15FD49B0D773D0D1AF59D15B9AAEAE2887453A7DE2FA2894B41F6C215D9F52AA7403E44ABDEC68D6E2C3EC2F8177FD5781136CC5D705030988D93A8BBA589BA7BB0F1BC61B6934FAA2AABFB26A336DF6F1AED3DA9D1C4B5FA50D75BB5081FDE8286EDF015AF18C4761EF250A6A1800604B51C7BE1C06910D6F5D94536995197DA4B3804836AF304F8AE63B20460583D7AD05BAE568BE685AEFAAD9B5579964B128452F6D777B215B39F339A8BBD75736F25226BAC2F1D6AA11BF659D48FCDABAC504A694E60D93AB491A8208347F7C4FA93B215F8F749477BFCA84CB19D697ADC6FC5241194094D88C9469106BED5B0D7E91B746A946D14C0E3F2A0AC427D413B29461CDFCD2B5707DD06438D0B79258651AA134905FDB9AF8D9A1FC91F5626E2019E8A20607FF063C27DC2E700B205A570FF374A40D944BB237F9F806DC5825C31D5F2A81351568F2475E50107331573CB5D9318D8391567DDF827ABF44FD6D1B9593A0CD3DF490E9046E49B5085B82FAA65D88147FE6AD62E4A7ACB65137FAD530D3CE5F9455311660279944AB805FD1B1B70F96EDB61414273E72F898EEED40F08D9743E74C37CDC1DA48B62CD80 -MD = 614C97F72AD53090052D9A496144B7EB216B00DFDA11C7AA0C1FDA22 -Len = 31280 -Msg = D1FA123C468D0052C58C93BF306C7C1DC90968ECCAC6B0C2F4E3ECC3F908F2BE6A54AB69AEC5C496D291D0263243BF1827773DBFFC02A9D5FBF7AFF63DA5355D5869F492B0CAE82B229A36331DFA642557C6F6627FFB0995E593DF8E0FBD3ABE66126B7E5DA1F1891BD28873FD9C96C0076215B60548075D16CDA92A2B99EAE5776F6D1E7AE2D8CA30546BD33271D50A6FD34B23809534AE6E4A875D6981492F23752A68D1E870D174A021FF8C550E01993E3DC3358274E4DA2B45C000C43FAC307D82EE2B5D42A6D9849C11A8A5676605B7B3C45220BFA5BFC7118E2487DA143DF0797870303C185C9233AF63F447CE53D8199B986ABA367735FD745F84F8D94BA0C1A08DB280D860BF656EE871AD1094FCB41C7BFBF0FBE0959A31B3ED573498AD35026694ABFB90684B35BE284B18D4B663CB2EA5DE1A88E2947BE8012858C57AD8601CFD1744573F79906849B4A5552AA87D5E64C21A054A7FD31B7EFE2A5E401553463FDDB881355FD94C9EF7F6F9E3DA4CD845EE16DB2D1A7D4E31C9E8B42C0EE5D30296A606B00AAD9EA09509208188D4A15B328EF7564C2E36FE79C06E466AF598EB64280F0019A3AC81B18FA254B0B79D7B80ECDC9ADA3DD3D13F1899CD3EEB6CEBDACC7F69E6ED02B2550EB3C76E1774E189661BF791AB8842A92D86AF9489771D1D6FE8302BE395D6750EBBFB1ED7237C2C97AB655C7A6C7157A5EA5C51036ACD9F1C031277A90450BDBAB5D4A9B36DA52A6EF7865BD0B5571F228D5D61D15A01C36C3A7D2F133F04D0A17255271A1FA0BC7CD60A85BFF17EFE1D49A24D7E87807F67A01358B7CED01A112D8B71A6DD70518BF6AA8B65A5D510E6F5084F5ECAEF108F6E6564032AD9259E8406076B9348CE337005FA4B205F47736A79693C7E963635EA634CA67B9749A098B299879973CA9CB355B1080DE5A9054C7F39C158AAE4E25BF72C0547FDA9F66A234AC3E2DF8DD22752AE66D26FDB32515B9E9239D1B583A314AE231DBDCE9013DA4F98213CD6AB9F42582F62D639E20CD183560F341007C600B2E01233098FC61A50C27D949822C6F99FDA51AD788BAE101CC379B48AC8CFAC3B5DF81C9F7B4E1E0353F7F10AB340157FC7A8F92FFC43D31F24B498B381C7B20BF0A31B74C45627B9E9858D8479AF5977782A5FA88D258EBCE97E6D0FA0971DBFCAB6AFBB3011F9CC24D8C4E3DB57698E299F6793741810E2A94295D0D91F3F769F184DA2FFFCA771A148728A2F95237B77864DEA20D80E09E7A0A36637062800065ACF15572355BEA8DFE27509F4A757079BEA6D6DF3429353AAEB7777A143E3ED1A20DE487162F6666BA5D27EB9D350D6A5C724BF19A1D058ACDEF126F6008EBCD192516FB0D4797DD5FD3216A9CDCD2EE24A2C40BB2CBFF75CC59DB2E3CDD8DF4E0B36A670952B07871A0299EEDA9377E8296AD3788C78728DE71D31241F20C2B2046928CA2751BEBD10BC0C455F49F30D7AD979B0D86B66A55429853AAB62575F9219483603924B4D39935489E8B2AD6E105B8D11E74785FEA9D1A9377D189BA290CD414F57ED67137523A355F90C9FF5FF2CB760D4A31FAA2F1C478F9547FE4C4B0B1CBBD71B690FB3EEAEF87A53EAA1EB6526B7488963FB64D17B37BB387105E39969DBABCD79EC28DFFB5A61A1101B34C14202BD0EC1CF800E21D695ABABA494431DDAA20D88ED7501AD360F9B6ED41B4CCDD0FB5778CF53D7C18C36C4BA783E68B9B0D26C7BBCB3B2A015BB1E2FB51FA9C323C08A7251E48F140A4E519B1C389E0FE4A87B9D65B8D91A2081405F05D01F71024A56BA89550A418BFAC2863928BC870413CEDE1411F0D7C3E77C760B76E0D94F7D9ADEDABE9E4A632B6A1FB5CCBF8EB2CFE772FC31DC0D1BA63ADEF21CAEBF846418C6ADF2E474EDB4A0207271C326F14D20C0B95E1AF7D86331F0D4F792D7545874F550892B3E081FCFAC6074E172F8826E04F289201420F064FF3C53AC7B9A15A291E878B590B3F47F53E6CCBBA897653D6FF4C6CBFAC90CB8666C86DFCA4D554D8B87AD1ED5BD39411EA35A417A51F9119B630904BE6575AA257BE54716A788922972CFDC5A5BCB4B6054532AAB913E7D8B0F5A450180A3E7DEEF61BB0815120D7869086291C3F3DFB71014BC66E3D5C8854B52E800C8F64765C4089E482012550E2377104F93AE57F047A35C0DB243BDC7E1846BA0D0EB42AAF97742984D2637C2F2BEFA40213900C3AF5A758F85FD4342F9FC0B3821FF97B5302332DB2DDEB688C8572691AAC5AFD777C5AC88200993D3EF100A5F95B51AA92881ACAA5FAF68E6134221391C04A88C7C07CB39D07D5A245AEE0D63395018C0C8E1D45BB640220C2F993831DCE2597133C87014D12F5CED521AA45273F7434DA8ACCA2FE35A26FEEDCF701AF1328E4C2358BF74513CDFBB6A0864EA9670C281C5E7C51E26F3DE15649985DE90ABBCFC2D85C26886F0A0C33C8FD74E33122C42012F1C5ECDD01FF96FD75C6B067C60F2501088E2C8C2530A0191C17A113B38240345414569B3B80F8DB755DC3362C52DD1D36C06D02442C3AFD24058343F9CFC6931CCA0442D3CA2CCC84C6267C42CC85F4D6BB78F34DF54D4E20205D7C379D924C649AC7EA8FC127B7EE288064B2B69FA95C93F0E0DF1E863C590E2069A0998A3C2B99C95B690B5F7014F401BEFAA835CFB414CCA8A5B7CD027E52AE3ACD21B618B6C9D1E240E5DA3A5F9D2EF4F9AAE6B3224070FC41C130251D93E8E4A9452A3A2ACE2E919B6CBE248A3EAB6479FFE4ACC55EAF54DADA9A84130CD6BBB0BE41637558A170982EAE9A88853FCBFA6CB076841A8E36E8824D21AD2E3AD1D7F829A5B13296B15D0053BDD521D7D15E76B356D62F02EE20EB78D04838AF7E4B084B0D2575EDE7DE2130C5472D8EB1839C19FDE06D7E77BACFAE1058A0A19EEC6485485D401A70A8920290AEE1D0F36C67324A6D87D3B9628FF69479AEA4740AB9F2563895D418F9A5F04C67CB4529115146629CADF3C1949B3AFF50E8976003688A376C5E889AA0B764027335FD8174F648C3E072CF4618FF2C2189521056C03BC2E530FB89B391CC5627964A6555E8CCF102D628CF1B3EF1C32499013CC37D81A0E8E3E033FACF41C1295F3F8ABE317D1CF1D2B1C5FB891E197CCA3422522A4B68C6481D4C74556E05E06D0E45BE294E910632B747F3FB34FE5D3AC012690D9E3B7A4338FD58818E622AE7F71DD90A34081496215D8F224252C50CB1BBFAA08810FB6B4D0DA50D007AD6D5309E5C0E27FD91B8B343746B6CBED1083F91523A7B51B9046737F7114F507BD7668835CE2EAE7398617E3F298F5B8B38966A9BDB3BEB342EEFBE61368DD8302747C682B83C3AD4E184A5F8DA2CCC4F7EE99A33156274D97134126B0B89627D811BF07F7683E840C51F15B711D1DB0C3C41BE989E0F156A5B948DBFFC19B4047A7D93C9D9A22DCDF0C14897B5CF29D03CD426C62E6014EE396C11483EEE85A2D3212387B5C48DF8252B21DB40AEC9F8A2A1AD8A55BAF263812094E9C81D5C18FE1FB56593E51888C8A0272EA2F8189782F462783BC996541B86EEE4F7BE53D535B4E85DD786BD982C5D494EA017CBF354617D219A495E6448B00992DF83C94FABB3567E75220705BC449C2367C118C76EF7482C9AB77A1E0AFCD3DAE4DBF0B211AD79EF141217DB599F4F74557B9333629A11AB482EC3D7050D95AE052F3E1F814F630E9809B87046D1CC408076B5CDDDB90A389F8EB3FDF64FC7DD71E6C0D5D6C2C2C507622A387C5A3AE60A6D723DFCCCD1B6A08B40CAE54D6FA519B5897497E0B972BFA1966CE2A3DB3FEFC41AB3393171BA46BAC2FA93AE3613CE88273AB92921F4CF8A5840CCE3F3B3C41622EDA57E33B436FF8108268E358CFE0AA72FD0D2AD5576712195F6336293BB3067ED389D69B8618DFEAA8CB1D12B43B370B17D29EC2035EE9348D69F0E64DFFD8096168F6CF020661E72BF64FA0D03E0602750A7DA0DAF4A4ED909BCF170E76EAB0889FF15D84E9F8233B3C57B34084BFBE7732500A4034BFF241AE4B89F9BCB2BE60715C14D3B2F5F8E3C9B9C7F7EB11E6B0EBE70C9B63571ABDD5A10A86C8F9C2EB64F7075EA1F0BC02573BF83C3AF68CA831E16F5F40E558AE0557DE3B046D5418A10B9E230CCD22D4CADD50CC912DF9A42AF82EC97C91AACF027240F95B19FAE3DDD36EAEB11FA79C6C17BC6A43796151700F587B64CF3A2ED521B22E36C8259DAD86DE55F46EB665AC0CE9C59D91D5310369F88754CCB1484F4999B9DBE31A9085C5D8AC64B624904A63DF3D1DAB994E0A845365CC6DAAF47633F32A929AC74B9E8A76F4091DA80E49F3AAEBBA70544D1705B60E408055F07E3CC71F0D2CEA3B4B16D5995A6A9F476466765BEDB2BD44F97D45858D1403C6348884AC7163AEB21364534D8C19B0796CCB507D9441F6266725FDB340AC1159D7C63ED0C5AB42DAA9918C0A3DAB2FA70F84D499ACDBAC62F74201302D6E2B854E37B1C790196E878ADC03C001F006D2196C285FE5001FE395795D843B2AEE6F7D6C22ACC3A42307F5F3FFA861E996F169318248C3C41BF9D1A51BDBCF5A33A79815063E07CDF5A0C4676EC96AB576D27E117B3DFF7A2F1DD219A1F1B1637A64F38B122D60B9501BBE3639CB76D8E746165EBBEBB90692461B61086EAE6F6F5AA5E0053D84B6FCA8147D976DE801B11B306C1A506110C6A8B0FF62236889718B18B5507CC2ED073F1AC48AD1DB1AA771295634272F338323AE5DC1FB19B937D891EFE2E960B17D343E38F2F208D4B8CE21F25FE87B5F12038EC57E29C7407914473E96C3654162E5DFAB9939A011BAACCE48010898F1157740780946B67E5A44D49240B1A694F679CD689E720B0381ADC691C8B24DE8EA99A4C739FD5A82C06CE12C9DF334E91C63B48CB833CD0E57D2435FBE1A6083278AAF574E2C0B706A27625FB4934E139163006FF91319773E996E08E91E0BBF55779971D458241CC27B4ADB43F3C52533F4A61365956F496332AF91A4B50C21365C5DA82FEAFC6ED819545C23E3153020B86471563AF40143A9213658EAB2321F5667A85DE88D6AD77D3ACC205D130DB4D88901E92F6CC8386A60CDBE8C604D2C577939B44F6B6E8DB738033084F84990932A21F8FF91A09A28BA1173B2DDB32422C999EB42AFEA02172A1451BD9070E281885024BBBE7008E340881BB2CD61EB36B6DD4AA3883A79B8399ACB8656D0DFD7520063FF1FF95A62376C1C99ADF2DCDF0E62E06FDD1C23E8B4B25DAAC31791EC772DC96EC1E8CCC4FB5455357DD6C32682B27FC929E5F28CAF9FD9EBFED73A13B0D74D9D47480DBC7D9550078B25492C9E2D3E3F5A86F58F0AD35744EDF214E3F810075E77BE797DE0862D4B3E771406F6007F7C29426C16FB3CC5483498646FDDE644C5542B28371019EFEFE50F29B2479CC68E7C40D681D8E496356D71BE30798897AE496416D7A3AB9751CFEBB143E00C036C542F79F69F051887E42984954EA5844DADF56B9BBD19E8D20CB9A4EA -MD = 1A74280B217A3DA32ACE42D8AE85DCF94C331998C2B116FF56868D90 -Len = 31343 -Msg = D1C3C01649E83A8D492CA0E1E08BA7E732FB24DFA24FD83E65F4D7B3B62C391EC1CCB5245CE0006F86F6CF7A765BC803B88177F3AB6637CDF431713E4A430D2A4730DB533E47DE7F8B15E38FC31E5F2AB3CB09395C4116C812B7EE99DECEAB42BA0610C874E4F58D91666CBEBF90A055EEA3B066F868EBE2D91C6F917109C238F815B7B5DED962F9FF08FD4C2BD4241FCDE6C6BCB8867A7811799A79866DB7A054B1AD622895F0CB5D39FF7105DCB767B9FAB4296A663B8A398CC37037DB9C52B734A7AED5821ADCB0D469F07AAB46FF13C7EEC1E53B0C7BEF8E3E4C72ADF2108BD4F941E582E3AB3B92F23F3351DFF2AB203A5A3577456CAE3DC82C611DFFC318C58ABAE911D52275774F17252B179588407C0BC85FB0A16A2964D69072C13CC0EB1AAEE3F95AC586BB8BDBFD1F9A8CA1AF9025416329687CD413B7FFBB486243CE1C306CB5F5D3878A00EAAFEC604F93E8E75643B4237B36518870B086F530533537BBA8920C9DAA0A1ED64CC389260776F6BB7AC149BEC825715431BB9BBBBF65771075822CB1F969B292BE651DE749DF259A3AD36A570AF4BC7C3A11CF214E0C02E5BDA3EB662A2B0E29AD3D289F998C36A8232F8AD8C7EAC6C280D63EA55ED0719279744B5C83DFCF34A5D03151C86803FDFCFD037213E831DA64FED7D53243EFA4D25B28C6D043AF40180C80937D656B20BB3423C36ADE25781CFA57F8010B3EDD2657C59FE1A0F12BD1B2D908B77AA43F156BEF59E1D26B868A2A20F893601F63F271E4824592CC146F5049733CC75CBAB1007B3715CBC2723AD1CCE90D0337F5B25698D288A9692BFE3FDAC0AA9365F268F2C34B72451D31BCC392F1B4DF378AF56862D267A4E120B603C948066EAE79D573B246B8407AA6385C20161B2A6FED94CB04E7E15B13697F2C240435DDBCF0A1691613DFA79D9EC08C7051977000EE493597BECC1657D3EBD91E5CFCACBF2134729FBB85C23B59091C9423D9476335FE2ACFADDAC6CDC4D789809C2C550B72FAE157E31AA46D815A45B90A38BA4B36B010B1B7B8AE645A752A224BD8718EA06A4C7899F7F70D822D322284982C9BE7BCDB2A190DA1ED5AA7F02CBE710B98D11305FC8A9953DC9373EA4EEC1295595E58E8308569D17E5E6020DDF772CFE538D797276BF30F9B3AE61834D44BFB13870CD21DC0F8F725EAF476F366F39E09EF7105877CC1CAFB4991415F6E32623E175DE9CFAD3E3FB427316A42801E1B962D2BE6AAB58DD7B0501959D00495787068D66D2D3D25419BE37E365475E0DB1D2D50359C4E3F52E94B6499B94D400AD3DACD0AF096729A0BCFC11640117AC778010A991DA53236C5E33B6EC15600AD0F1481EE4A0C4A7B135046A5040DFF78C0CB79979B31E2D23AABE205C19D17010F34F003E747DB94F2E00B0986B20D11D7784A1C336DD7E80DFB1A3A7E76A6336A01F761F698913C0DD35B49B704084C58AF1CC174F127985BF5428E58587105D54C2913C0BBFE735F155F7B8B87EC96D409C86F65BF5FBA4E4667BA862178FFAE711A33E46F006DD1F1917C17C43FFF25FB177054DA0D90010CA8FDF8BC1A2E47E07BFF0A42987809CAF5DCE711FCE9E357E9D7F146380178B37E854B01EF53E132B3EABFB3A8758E7912CA7C0612968138BD38544BAAB81D40BFD3BC0DE290D0F047A3D52E51D59BA011B4417FE164F8EDC55CECA744BD6946A490B0BF3BCC133EC3DFAE343B4B10FB121FE1EB3EBF00FF07378300BBF713B47C7B48B5EDD949DE7C378CD6BED111EBB08425C23F7489C0668F8F395711B4CDBF2A20AABD8D56D96290C5F446C4C7495976DB80DDB2D35D260162DCDC3BD1B6AA33E73D9AADCA85B488F696C73FCD18E0EA3C42F5869027E9F1D6EE0851C073BA2532476DA1603229986B2C42D77A22C136728274B07B76BCEDDD5A7194DF6650D4C88DDD5232DF95FC0FD5411C053D2A8B8FCE95C2BA2520BB0DA1FAE76658945B0A981988141C96BEA9FCA608DA498B196BE4B7FA5B90DA41409E05562896B1CE3E6D20A5D5599148045619268626B53F8A1293318266146F9E2FE4CD0E1475FE608D6F2F707A431CC271F935C250F1BF21C4773E14B28E2277BC4F6E3AE6B4018410081FBB44F42BDEE2E8263EA41F4541F09E0A860E3D640B8F579E54225C2457D2D90A5B34EB133339ACFE458DF0EAF52E15A81C89AA72F3BE0E5904D5880779ACBA4CB53C255144E1F6EA32115247622B9687BEF7E6E6D88A227D00A63E52C69F5FEECBED0106AD22ECC05D56A00D23D75C78131CEC438BA9C007F415270C346745FB150FB9BCF86556D2D88FDD3F10249331D96226223464DB3B26262E93EC53B4D11FC59F4BBBAD073BDE6840E568996277F0874D80A80B2DBE816B1FA6EA1A0DF3ACE6E7BC82CA4B1082B332AF4D789E30D36C498673254D79A48609C9013A5001F434C344B1BE42A66A4BFA8384AA321BB813842ACD76E61AFBCA9B8BF447B269BED42493423BA7DD16CEB2ADFE3C7099FCBD158A4545D08C1D64A17F66055792AA64B6B6F0B28082AEE366FF5453E630271C28CAA3D820EB2D08804B7E49DBCCAEB028588DFC4B5A4B11FAA23D12913C121439634EC18D7D1639F661596174E0DA09C44BB28E7760B65298D18B946CE2AC9BCD2BFE0A03BA23AD006B080C8502E75796CF77504AF962B33AD49FEF2F1F258E1C99C1448DCD7575959A8201AD0856E3A85FBC0790021F5D908EFCF414D8FA379A55D69CD46A5C57137AB561BB883C95B80800BBC21F516CFD7806BF80A5E9FD60CF019D2BD617AA25FE155930D0F892F135E24BD37C6343971E48A50D71AD2A50BBD3A8FA3D95D946C9E449A704BD7EE2F158F02FC1E54CB192E3D84EA9F976D72BB600785F2CDB92CD1E88A494701A6AAFCC4FEA6533DA9A59A4DA9A981986494C5CDDC403F445317408C0A468378585CE95DAEE772B10F6B294B4C7D84A4F75CC1076364A5B9F8790DAB358542DCCD72D6431EFA6597D37A7C035240E84328DF826C808C07BA9F80EC2A223146867B66ED235A6E2AF2366746DB7FED196BBBB95A55C2BDEE60027C7F3F057AE518453DA2FE63A5B3BAE8605C43EADFB2E1FB1C392C77ED1754C5BA1BE0C65E5C0B35129FDD1716D15C664C6FB7079964083983B8909C7FDED488702E5BE3E33CB1B5A0AD919FEFB222EFBD5399BBD89843B9DD5C8257E8DE2D8F182F6D45C11E157DF7354560B289CD6D1DF07702ED6CD279084A346796E3E42AC47958458FE42E159386058CF383EC6C3DD21B4292E6535DDB23E6B96B2E9CB81E77C71A0CA6BB5AB77E4E085BA06897EFDE3404B0F5B467C2EC615DEC298FC4CE01A86B02172134ABF30D4CFB716F32ECD7AC49FB7805E480E66C2946E03357231D74B0008B704839271A532D8B7418843CA691120F04E28C3E7C37742676CF973CD0D25877FDF4456DA1872BA36AFFEECDC5D43054943259A1738718B85E39EB23B9808BB24DEEB2DA1CCE9782968518A30ADFC7A5E178093D8C393D0E7432981EB3D52A8049EF64FD0DC2E6C141C4C3E4B023D736B62FDEE412DFA121D61A20C1E2C634D9B6399D1080AB0A12CD3B3F472D40BCA418DB8A3A63CB205538F1B04CC8877BA0AA8FD6FFDB1DE412A1EFE20F87324B290B4F9F80A67EF21D5439547B159BFAC732B74A423E1CE9186A4715CAE79511CC26B1991F7E8E93678A6980E4E207F58BA6C035FEF833AAAC52FF1BF06BCF967114F95D71838EAA78A98360AB477B32D4022C85AD2DE6C8C505259EAB039080B78B87D83E0C6CDC09F97E225DC78CC2EBE6774D4546245A30DBDD41A5150C271282625CFEC96F85511E95E44C94F18EA0EA39E05707E2F1FA0C566679ACFB28E67F647B01C83FF75D6647CE22975D6424DEE3020CB57883A718C3323732E700A83A55B21AE9FAC589A9DBE60005D92EC873932C3CB2188CF545863C8BCF175D40D8C70C9CBEBE486BC316CEE6645BFF914602621728BA3BB80997170090C15F580097D90F76462DD64358052BA6621921C345DC20EE77556F538D2CD14517108C4B0F7BEB287771840019BD0A1A267E2BCF82DFAEF4BB5150DA3D34925D3B3E6A89DAF174667268C9DA5723EC4D707CF6B36163A71DDC1B9C75EE9D44EFD3152FDF834A450B0930B2D3B763AFD7E1E4DF424A36FF4D1BF100F815E7B855FAA524FA5355F768E16B5C70557A3F15A3EBC7D97CDEC5D8A1A5883C816CC462DC93560E4FF91AB76A93468B17ED31B17B2D291095FCC14A283F473FF50D14E67FD130A830494CCEADB3C3AC38C30A5B7341E3464167BDCD0B2CFA6A38EC6A7178E8C2DF5B50772BBDDE44ABAAB6CAE354885B560F9C14122CEDC970274BE7712847F3C5049B2B5954BC77C04359E784B6F86746D751F10AEED1A08B30F9132AB14EAF97276DAD0291B6758A6EFE47FA7381D3ACABCFFA5ACC49F4557711BD1498076D3ECD15A39172BE4C235AF5BDF3360CECFE8B42247CD5E2E64B1EFE4AECF28B69BCD60B5207478086A8E6EF0248101514D020FCAA868D75A89A9E4905E4EABF969438F3ADAB5F09CAD62E8C83F4145C8B0C0A876B993D8E7D15BA0616A9FE066A30D0DA847CCE728300F92CFAAE01186474919B80DC2EC12E61B7E24449934484657C61AD016E073ABE0D32E4E288F8490A18F28FB6266E8725155ED30FCAA89E488110D9D79477342018986AC02CC2B7C9093BC194B2CDC3096BAEA124E3C0C153B4857FD6CDAF5B4CCC8361066DA2703A2933C0CCEF8D3E6D83D5B27DA1378FCB06237A0E78B6F6A5A6841BF83A6C88C7399440E17EC2F5C5037E63CBE0D26FF9D79857E463255D49750DDCFF28A5187602C90BD51A25233D12BD2B0887EC23DDC8DBD214FE1E5078D351044DED3C2286FD198AF9777B2E8910889C8E21FAC03064BDB1738426CB92CD1722C3203D9BC1FFB75848AA4F2BCF37DEAB7923DCDB37B7E6EA1E50A8E54B1E078780C1BE8AAFF4207F1BC3C6B19783140FD03BEE93DADFDC7A7ABF02BFACEF826DB7C79EF8FC409AB55B6E53824E677E19611AF13E7B64C4D04D0EE6EFAB0E94DC14CE20567B9D88A01ADD8159A27A188231DD90B309F12E944BF1EAE079D8E13241BCA14CB456B69CCFB8B8F1833A3E43760BFEDEBBD3B8813E4F350AD2B16B8893A53399257AD401E4E9FE38CC60E03F9C9EE6D246916EA1548AAFE894745EE0713EC075B2E35FF7CC7BFFCD80AE3A7E298A9D4464384A9A89DCF63FAFF8E89B4BE3BAE096B9F882C1F15A648EF9331291C7F19829F4F5369E1B407DB167AEB03E4CF49A1CEA0C7F41E6A6544E4ADEB686381B05A200770506CA4B2BC0C14D0C71BED68344F8B0532015DF99A0214E837B39F4A7AC047FE802B61343C2E4E4010899CFE361A035AFFC4D497DE21DDE00F14A110864EB8345B71B792F0692A5FD8C3F98E0B6FDDEF74ED0BDC08C91525ECFF0466AE461F9D5FEE5E1C0BA3EC4F50DDAD0A9F14914A98FB3B87F9B2514AB991FD8E32149C6634B0C859823E7385523BCE8B784A93C2E538F04796B0221E -MD = 227C3911AEA313EFFC2B4D0274F3523923A17B91D5749066F953F701 -Len = 31406 -Msg = 4EC73C2B4F89012BC167EE9B358C1C2D8742677BD559CB7488628FAA55F6F0354DBED422E7C4D1EF3F6EB20E8700DBBACC8B3E4499A9DDB5A29B6A7C86384A59EA37CAD314B06D3112C95F4670A7047865B11E33E3BFC760E208D1CFA6601C4902E33AC89C4AEE14942AF47D527B35FF23B977457B6641CE9221C660991F6C1AA1EFD6785A8C0C8F19540E093E0F501AC88FDD889C30757E72435E70BD32B08BF689AFC08BCD4593F0AB351B12E52E1EF801F1B1B79D1E12DA73CAD968FDA9DDBC79EFA44A9B157B5C3003CC150A2CFF96CE628BAD0E609BBFFEF280810F8BC65BE3B45E1D37803F27D308DB0AEB8D587EFA37D889146C6F3914F3C48A270CB224B81B067B63E0E754C7515D31177125F5811D4A57CEEF2E9687B557E7173BCEB9C484E91A45401750169B46351377A11C1C82B8D4FE985E097F0A7B46702AF579F5092B5BA4201918F3F3C0A0188D2E41A7A76E5119C96837A78A155B6870338E062707287F83BC673661F4714AD69AF9C3030513CFF5061AC22676C76185157E4B687699DFCD2B18268289F1E733850B7C87301CBFB6220C3A17B7DD0EEB715B2635707A06CA32CF341FB81E222CD8F8DCA98D2A9DCAEDBADFD01F21330EBDFC470001E896E5C4536208A76087ED5682E1BB73B5D5BB55FB95243D760DDA3D770EED3766E5D3C9382B3ECCFCACF2E9F93C4F8C8B7E934C52F61C1202C4EE0EA5EA6DB2CC771C584B1EA615A43835B75C03BD025C08C8BFDD57F1A953861BD96774EDA76D2FD973BC14FDDEBDC79199A21FFADA81708E052E5DD7AB55BC5F56B3C013AA523A656A7A37380467D1C0C046064915042F1B6DF904E31AE9F00F5E2E3D0B0A5447D5F6ADC409639C52D43DB6B8EE3938691927F5DD6A50190F0B881195E80FE546D147C1979D786AC6C11D7AE52A1DBE1CDE982BC0DE967E3E539E870E8ABAB04510C641AD71BE0E3E22CD65C3209B56809AFB2A7A704E94CB30F6A4BD1F6BFA4D973389D8A5E45956E01514181F6D9E8699847F05F309185439BFD0E7F1BE3453033742AAD3D9543C75BE83E1E92D31B66E7E376C2F8DF0851AA65769502F2FE9D7754C4C92C12BCB9961A389366AA32C6B681CDAE947EFBBB56433EFEEC9745D338AADDBB215BCD9E6115B4228A4B944ECB524811D39D38BC8681CB0C7977B92039E38709EE714B9B82A6433476DEE4B9AA5AC38FA69A7C2BA732948ACD7DEF0FC9FABB3C4144F4EE0111209B2B17F3F8B3C5B2D16C94946F3912C5025B32EA73D0EF2C9CE6D7668BCD08BA160CC440A4329EF3D1B2A0AE34ED05F109E7E38CD467CF3666E1E16DC782A23CFCCCF4414352ADE6EA049CC1130281D43C2CE338AA4257AA01D74EADAE105A54D80064B94CF9A88F91057C8892730E6D12CD4DFE3A5ACC2C2686D563AC78FC5FD8B2FAD3EB46062B0D24E620FE0DDC01B02E4C7BF1CDE7E583B956B34702AB0338FFFEF8427C48BA8B3B9E5ABBC5DFD501A47CC793D1023F52E12A2510422118BBDE5D8E66088BC764A665769472AA52E3119F66A2878F25AC2E1A1DB5C30399EFE00330E9D298E611989ECD1E1887F0E7328209794D58A1FA1FEE6E3DF3D872CD45E0E2AF98E9303DFA8E37418194BF650B822088892E4DAD8D3EECAF3992AC10152005A0B743FE9D2DB6A046ECEA0B61AA7527CB63D774614CB9083332F2B537FC9B1A52B7D34F1F28A4A0B0C1EACA33F6CFE585F61C0E594CCD83E6FCE217ED699AC66CE2A834A26622E9F4FA7EBC3488DB1D62A57687F08A7982043282DD44CABA40C2355975B65C23AA3DA619050CBC22C529336E5AAA81224F82479D04A7BAFE99298F767BBC70F07DE8B4AB58271C4C25B5680F3E950BE240E287000020357830355EF33F39E3B792097EDB6C245F917E9856FDF529ED0F3A05028AA81FE6317C7F236B7C26B2569446284D618289DCF56758AAFC9182729EB6935A938ACD639936F2B1A32E399521EB9F7F24A271619C07C9AD8262965E6E641F8C0ACB4FBAD328B93FB422D82C7A4ECF679A873282D34CC5F9CA6A88EEF7DCCF2E8CDF4422EFBCB0D9B4F261EFFD4D716C841DDE9EBAEF6252F89B39903DF55583D74ABA26E206830750842BC0B2BA2CCF364755B6B22EEF9DB33704F6EEC5AED9895B0664124554589F9B267D5E5DA68B7352F6F02BB3009F43B603E77E4FC909FBB16C3810A680AE2A3E1183820089C77523EE41E6E4497AE258D7A68CB0CD55A946F3B9A6EE9D7B1F08E284E077011292526EBA9DC9189C07B0CD71BD6B7FD1EA842E7D4DA5FAD5A4FEBE523A0CC01AC7C73A7734147C8DADECD74FE0BBA80F315080A5F7F71FD260F40A9BB1A8965002A9C883453BC1D6EE335603ECB331D44844B0300D6D4E0EA8815C1FD6449B4C5A86E66BCB85DF4BAFDAE75FEAE73E0C0B732FF692283314F6808C3A112698667D3CC8B2F42E8F425A52E1725BCF197E362C5B6C47030A5D3B4CBE2B45C40957CE57BD3B4E41D2341364F79D26097E8A241A8CE6117593E51604734C4CC47AA8C37A7ACC81DE83B20C54BCAFB4046C470DB55BDB755779C5740B0D9D71A9C3BDA80094AE3051EFA38A847514DC40B256F20D41E2401228F296608480AB565255F290F565285B16FA541644E78369069D6B4196DCE4B75B8B3493115A0C3D0DECBF7A5CDB133D7B6B35123FA40F6954333D45D2D735C88221505215D03F125E61AA155A6A8357B7728D005127FA2F97B4022B9365067E9CD6ADBBE87F9E5F5FD2EC0C61EDDD96E6540A673F5F05482A509CAD594361CD026B44FE583E11E33A075274BF6A17F02583DBCB834C14AC931901B95D0AE31FADD850AA68EAFFF18A943B04CB0D95AB292E7DA6D8FD84008A701AC322909700D22878196CB9CEB35611C5D8F26F38AFEC9F61489C696EBCE86D8FF9A7B53D5AAD8E7A7D7D79631558F575451593981E387478E43610392E2F0E32ACABAA273D3460E5B967AE1CF628E42B5DF527B9B55635354357E4F61127BBD9144CBC1E9C19E1976D024C0127EDC028632217C5D4D75110711D0283BBF89C7BB81C4AF22D5D0338D333DD27F7D2E34E62A29EC719950B01A81DA7442468BEA4C951C66F4A88D80F5A6C03E7822EB523593111EF59BF17D8D48706F9C6BD4BA78680D6C883F44EDA18742EC7169BE7510BF76BFE86998ADD432A5F43BDADD0252332CA3CDE5FCB812CA87DA3ED0C250B17CA9419ACD8470AD489F03F8A00BF6B312A59313E648C0A27C518BECDD830EF87FB1F316F8ABF3983D02AD9A21625995497F8465464735AB793BC056D2A76CE5907B370155CED0D0525C4B36E70FBE247271F9E2F8A1B7C9DFC83094B65479129C86DB064FF793B5CB8AF5C88A40962410AE765C55C93B1F776867C4A4EFC66C95438DDB8753F1ABABF7AC1527C14DC4FCB93B944758B27B7F0C20C9043C99DC775E65C6403685DFA4C20BDBF762D8842C4FA3BA7BF97699A80044C55AAD6AA880784DFB83AACCEEFE075D848BC43C32D3BA23CC014F279C88E325ED8274180509668069550FD48F996B968886572A12B45A395E4C0DC8E94E4A0288FDAC2017CB82CEAEA6D203EF64FFA1AD3A03D6BD69E15F3ACF863C9940C58125025F4D1BE784F8A176C23B4626150EA17252C55A269C841F11877F1C1693C3F9E263A9BCFAA19A6151D3B8CDBCA258A1117B50D98D308BDBBC51F4BAF76417AC39E2FF67E0FC97C4C4C32D4DD06A4D7EEDD0FF7C25433526797790010B26213A8A33EF88D46D12854EA67A317C7D176E8FAC2BDCC52F8D431908EA173B20E7931EE3E67598EE9BE1637CE4CFE1365C68DC4C3200A500356A723426F542672FCA0039383BCA96F8B72CAE545A2898C27C9EBAE2642428EAD642F7F29BBA9D4EC918CD8092B35C2B86811599C966485B5236860240B11FF2E3AA6B2DC042379F6FA95426724C5CDE5C18587AC24544C933B4062C2D5EB64DA605F120FAA1D6616237AF40EAB33278B71E65CC2A1925FFD658146BD17E819E559282113B4D7AE12B7006A05463A405E8DF6F062A8FFE6C95BBF0F0013E3023B73094B506F66F152C3EFAC1D58A53D4DA4426CBF67E80E8492BF3A2AF02ECE15C88A9D4757958A9F7232DE55F4C0248FCBD9A243B3A92F60F415D7FC5029AE4A695CC013F07E44D264C03BDA338953387F70846B761A0AEB591BD59EF64DF216F2A6FE8C23BFDECBFD097D23B0DFEF05EC5B4B7E30FB298A2BBC326E74098C9917E9EF04164294CDD2C98D01556857FD61B8EEBBE8BC6E8DD72AAD83E295556A08110B8216EE88A1C0AF11E5FFD7CFBB8650910CF5B297E5D91B44FB16B04F33F0F1E26C78422FCE015B703F84C0A58A1B37042E21FA05223CD8F5BA86FA57A7377FB14A810D77CA88485A331AC34D3BED82D5EE6602691DC241E7A5811CB6AC0EC7FCCF384561E16090ECBE548F07035588E9FC9DFDEBEEDF6884E972E5F287BE1208EF50026C8F6F6A964C09A9F97AE55D42E694E5E2DBB4BD90A7867A2D1C699DDE5A47A2658AC13E1BECAB779704C21711DB078B1680E437AD7AD839E4603887B50FE6C9E8730AF23E97B7691D8230D987C526A6D6E14F9A64022708E2A63A9BF90BAAD1015D12FCEAF2A55898EECEDA75F9FED148DCAE1DA3660A2711F8A611EE51A8CFB4A75259E37BF31DD17AC0036CA95003D0DAC846E6B2E83E8715AB2B9366F7B6D58F24162042500391D5179E90D5D18CFCA281D7CA0F5428B0CC6679522ACAB3856A29BF5A01D66D21AD9D75EE1E4049F5A89D6E30BFB30284BE9CBF2F48133E594741086D6E478271BFF87925C99FE53BA4411F0F5089929E05139997EA7B7CC1573A6B289EE9DF9BA5CEF4AB3DEBFF8D565EE0A2AE1C3562B49469231686EB2AEBF21FEFCF4AA937001A443C6DE66B13E3DD6813C2FBD5B614796B219CE337C563CB647ADAAFEF85E3A86E709191516F9F3C9B96368FC660A89DBE8BA6BCC9B9071409AAA0BFF32F5547F3FEB3A21A71B50C4AB578301050F3B2433D794EFAFA3FA87C5714F2161773C044CCB4FD1580A07B1AA8E9FA0CE19026735916ABFE1ADB8CC5CC3BE5323FDB9DFFF8E0FD1609021F657D8B325174D821D9A885EF5ECF9816C73422664C1A79A20D2FEEEE06226D539843C7C6FEA043AC2CF6418DD8D01C8EABC03B2E912756B34634D671FAC1510EDBB69E88B1B709E01FFA9A914F7C061BBF4B1241256F6FFCE56F7A43DEF1A70BBE09D65BC79F050CF0DC20BAD4A0574AD0FE7318DAB66701DB0397A08FE4F2372D221C3BB19EEB9B340DD573E35CAF46C8800C3FCD0E4B454668D76A7BA76BC43AC25E2EEB766D8D16F6A8EFFCEAFE172DAD5FE6AC20445BF2BDA8DB6C7FBC221AC202281B23B591A253C0C20E955E1131D99DE5CA265400EBF155616E340DC6C976C57F20A593F19F34D4041E22FFFEE38549B084DFD93889573942EE3284F8998FF60B9D356212ABFAB8E6725F0BF92FA6419E23BCF45D5340E79488CD9348477D7B11BCDB1F66C701EA94756C835EE187A6EE236BEEE4540E3743ED0A5FAE76895DAF1D59260 -MD = 82E4F4AF254BE31146C09EBF6FF05E3F4B141459EF558790A4B79FB6 -Len = 31469 -Msg = BCA6CF501FC183929B8197709E833578C84846C99D2BB2FEC57E1F426684D825A4FD5F7B07651BF01FB1DCFCD0F91BFCC57F8FD1B098183D0BA4B0278C0BCEC989716CF672051918FDE971AC3F8BA08F7D51BC3D12BC6F1E323BC22D538E64A1EFD16D74D11F98AE12913FA2FEB20F2A547BB33E9F77CE1C8BA311EDAFEAF74BF15E2404EE1B655B929B979B6179FBA7FA8907F0C5CA70F93D0719E43B100987B2D1B9814A39545BC33636B8DE8DF5EE81B102AD990739D0BA7C832A551022F5AF0BD85528B53C9E1715A56B2DDAA717D16BB6760E52124E2FE7090937D4A64355167BFA26869A29300DF6EE09E49BBA59760624C0E7C198DC48D4837CE0D9C440A3C002DAC7F1C45189A0286010A29302D78DCEBD58A4DE44F809F3BCCF8FF9115290C8B70CA7271BFF4B145F59AE1DB8503EC028D6D8FB17B359D942A7569222E3629F349329C21EBE32427596AD8E3011F628265E289C23157E17E24B5C4EA1DA637AC94EF4F457CA12754950D1B83FE7B11E398517F409FF9FDA99C8B35F04BECF43B200DE52F6E0A93E2BA181357498025F8F0FE013C9EB95328561319AAE94D11C6418CD127ABFC44C905407DEFEA77F1EB58D8675400BEBEDC0E972D873549FAD616DB7EE7D8566532F1AE5DC1293084BFB46AB700DB6C343EBF11BF3F5F6A204D29D94BA89F2192FD19FDD15EEB23B496624D9E19B2906D028A9748AAE9B1ED5D557653964BE95CE75BD06DAE8FA0D47BD65C573B6D0FBBFE272E843CDBC0122147ACA3C5C3D731266F244A0E9ACA263D1831B96CBA50A200C12DCCDC269A1486528D6C4530B2EBC724F0982950793AE9364AD6C1E79BDD1FCF01FB9C6C5C6B862860D725025172E6D00D5F6B1823065146789DAB1655ACD3F1B50D1D063B612886664AA121166915F193732DF7F02ABB9E84FA3A9AA034ECC7148E8DAB6CC8725E024B2023BC24D5A7B77229BAF098C57683DC9575D914BEF2701BF85CD5CE1CD3DCF3E9ECC2C8FBD214BDBC47F7231F7B6CF0BD4F3FFE35DFF61A093207FBA00CFF681D10906DD0A1CE49FC0F9DF451377747B0440D001D7B556E951EDD8F4AA2A88A391FF5B1D1BF8A067045BCEC47BA8D2336101798154BB0FF0AEB107A11FDDD7D5DD4779DBC29F2DD217E7F2A411D7F7E5845093AA306C1468D0C83D337F64C9F5D70509D243D85F6AB8CB3B7527338C3BF7323D6A0E8659B2B321AB7B1BF8D04C89C59187ADB93FD75AD6641432201785AD6B695C08746FED008D7EA9AB642542DDA1A4DC5FE54254404BF3F66C5326AB9CF34053A49E5B8F5B514305E8F99A5EA7DC96834352FFDDB452253FD014083F7FF2137F825DA5C1352909EE4C8326070132B398992D9621C34B36B148066BAB8444205AB0A03662A514D493647DC6796A776070B7A62FD7BA551C0F6FE18AC6E098B53F9D21AA490859A74438DC8A1A4E6C39B6E1DF70DD30C7D3F9F53DF0223AC3EF883EAE1E6F649C8226F5A1B2E6B576C52A6CB2D9AFA7CE8FA66F5940092315FA9130B50CB318B2F9DF9E6DAA9354BCB077781EE1614969DA905F8698FA27C256BE5B4095BFF29EEA60FC38EE9C877F3D6DC15A1D6E1BBB122631E2CF37135E38FE62893BC09D30F06352EA45D205FB738ABC222CEF9F39CB8B8EB18C8E0AFA2A2E56EF75DD0252BCA0C0F86DD6C08151D41168BF2C1E419793DA64AEE57C8B95810180192E93313A5A2B19E12B31251479909AE992274FE9663D05CEA5D58437CA7D428D55085D2F389C66C428C8CEEA270F58BFA614061024F1CF0CDBEF1FD57BC1D745101541478BE094F6CA3DAC20793C7BB5E71AEBF567DB299F09954B888FD52A5690930064DA806580695285CF40588E963E0EFFB6B54A157A7795C9106DFDB7F48247AA37680690FAB7821863B327BFA3AD3F2DFF14C41B2AD54BF847759A7994A893B472256747134749B1F85CE26F3053318414ADCB783303F9AE50119868F5793B3A2C10D71DECCFDD2F897524318A8FD779CEACD9883CE2E8115CA4A2B7CBA4FE8D2F1A96DBA9D767298701D83E02A77D8C05B73529BE5493A26141538E7721F8EE825DD39B976776717CF5BEC8D8679BE47E869C0277ADA0A0EB5C7D949758E4FD5ADED8C6037C6A17785B10FB52F182562F54B88C775247CAE4C2C8A44F5CBB2188C60FD25E02F45EC8815D9F91A95BDD88B6F879BFED0DE1A3C1494ABEE723C7F0259D82F343E430B82ABF2532E375008000E84607DF3979799FF10600039D8E08F45020EA800DF0A19756D0AC9B5C78F974A8EAE54DD47764AC13CB7539FC2CECFF0C4ABB37D405E0C2A53480E13773C077137D461A0B8F8228A50A78D9E1FDA2CD96643E7040B5B1C3BDF68D563062FB1F585955D30DCC339C109FEC1FBA315DF5D2397B677BFCCA56E945D02002AFCD092C1E1CC13E093659D1A0EB17CC17F989F1CFC55447E58761BCC357CBF7600DB8F411FAFBB14892DF591210A2999460C367A1E05167AC359A162526AC24F9DE0E0F7925E81D426B6BAC5BE39A4279C2A0C6878FBD3B8A4642BC756DF9022DD859A476A9865F2B65DB116743C456553C778FD8BA619C477DE239FF2C73B0EAC10E1EB5BD5B5CE1128643A484036734649194527707F49785923ED14209EA93E91D6F80B3ADFD6F31789D03E6FD5BDFF3E4D4E9123D9B16614BC0A7B553C0F3C8436F39004F00EBF66CDAEFDE1A81E2662E1FDFF56B2D850E95B95854980320F1E62CEB0E98E82B07655E7DF28FF24EA60B7CABF4B736C2E99461AE47B650D77AE485D4C052E2638F4FC52E882E5638C50A2B5E3DC33116F8CE37EA836CA0868E5DCA07A37B83EBC9970F815D6EA802B1C03DD7A85C50DBF853EAC2AD00540193A53B33F8D4C655FCA857B130395222B3CD1E256EE0D6EA73732F70B0A91E836550CF451FBDDCA36A61B8C11AEA4A00389B9F2C052B727FBFB63D571B15638ECFDE8181ADEC55051CD21B1736F78EA7DCD1828B1E6AA5CEC2F9AE62A47D07F14E1A8FB4F3019838C60906E4DA8AF402D7436B8B895352BA7D5019ECC360D8F6EA528E2DF8B91722DFA22387E77EBE222B8A6A51558D53158549C65849DA9A67AC2C378A9C5B1A1A0B003E47668CE6D5594997EACEC5B95B17CDF9AD9DF2F27251CE207F303CCBC9359BF4B5C852025B70711D282E1012CC8F5E6746AD53D62308868E454E171F093FD0C8FA5DE967850989618F9F7EEAAD12513C039E30AB87BA02032F62F7D43FEDD219775FD4D4D333A44F3BD699AA0DFBAD9F80718F26E80B8AD5332F4614F863A2F3E99F2A7400DD4AE21F3393DD0D82F1C209AA367953BFD42F1D3D6F3C865DA6C7625178DDAFA9DCB4016CDB2157A8F52F5A73243B28A7943FB5DD0977B7431DC572B00EEAE4862B74C71CDC693DCB7547CEACD0590973C80DF46841D5E7B461CD34670535931FA433133CC337FB3777E674C466EBD1B359342A070DFA31A88F9C20E67434071167DA5C78AAE1E345736A0C73A00996F66FBD83822E6DD1D4A171F075166FC85AC78B2ED0A338239919B772EF4F1A7B1F0F4A073A8B984D7381C47801439193E420AACF558ADA9CCD6FC4F8AF01155B73EEB23938301F1273F0BDCD6BFCCB532DDCAEC573389ABE03F1CA167C953E825386C4858D44A54903756D8C6B2B6E89E033C8806C03C41DDB8AD0A3E9DF2EC23F7729F3A464F1F6E733A8CC9402E19412DBCDA655884AE2D8EA5DE790934C79BA5373930572AE9A3042ED3D1162ABA0A301AAAC09B4F2EDD533161134394444D71591EE60A64CA088ED03A08BF3FDF5111D865ED0A18931335B5A33227DDB8F55FC6C983F08DCB7D8E397E5C8D6A0CA9B8BB8BEFDBA4AC8EA4B8B3508651A390E7F11C75EB2DA32724FB3D24DC4E38128D46C5C6B340E9F86BA85CB313A4296A3C7568BB42F88DF73513813B47FF0AC98365386E95E6062B3BA1D19019DA4B70D48FBDB8C100D2DEA2D8C56FA550DCAFDF4238668C6734B8898166974EA9578A73333BCAAD1678AB9255ED1EFE7FD4AF625D205D04F27EE1EC6B13F2F6E9814599E1F4C6604D3B5249943CD1E066D2D16DBD4D65278DA57C7281532C5C9FBC6FC823277C4242BE5807B01C9929A4BED156E53B5EBD41EBD5FFD97C554E18E2122CD94E7B78EEAA6A413F9DF1F8BB70736214935A1E27744A4124FEF0911BAF5DE2DF20CE4E3D2D975F8344AA4FF3764D2F0AECDFAAEE9683A4E4BADE4F3533CF0E951265F1727893FB697AC90946BB4DDB618221A087F43AA28A1BB37FE6AB878B6FE061DA3D94257EA4A3A237A6614C06F02B8969639BEBFA76238A70376D19E5C3A8DD69C1B6EF06EBB578F57A22782059E1519F3038900C8CC9C019FFF0BA2FFE600B771C47A1BE3B10AF5B9010F710DA133561E2D33CA5FAE670BA56EB17E5857423FE31B348E0F255ECAD4178ABA0DEB78E20384265A1C26FDD8CC91489F54F70E761207B3245DA72C86472D4307CDCFF5C146287AB8A7E5A6A3E84B4B846D97C298284F5D5AA4685A0460C8AE42E61E6E386DAA08AFE1FFC816C0C1297F6DCCAF01EC2C820615705CE0717467D68082EB652E7B6B6EE4D5C4D03D7A9789D3726CB9D04D88D96220F92D354560ACAE325DCB6ACD39C59DD3897A943D54444EC1C99B53C904DD6BDE2307D9576805713F0C7E68B96C7AF9C146DF253D8F7A6CBC10D5435C9D71CF71C812DBDE6A8DF03CD543A6A7382F96C1849387372F0BDE7183C8E17B87CB46AC3016832BC210FC3BE828CBC572B2A9FBE2020584178D0550D3001010ECB8723F26AA55F37778C3A77C4C3F36451435706A0EC664FB281D8598C13D5524CEA85E19A33C01412AE19A2DA4E16EE7CA064E6B44916159C71CFCBE3AEC8546E84057E01827AB797D1DF7DD60AB712C6D46FE4D210C63AE8B578232D2726EC2972296089CE72A4A178B2023D11855A7D6260BA429D8F3CBBFFF5A2896EAC8FDEC7AB0A67BBD40687A63BD994AE29441FD2262710A374826451D1BDDB4AE7AE69124C05564BAC3F5A49AC1C34CD4532367F7DD8EFAA51C0CEF45889226E99A2F981A879F49E58B84E6DD2F819AD45D7530BB3364CC72BF6CFA34835FFFB2343C7D4EB5849AE248B3411A3AE150C6E4F297B4CC8709C6D2923A31A65AFEBE8D0E80E157D19F5BD4C43268B7801DC818E6A5D4A9BE60C62852C271ABFE64B4F3B8B0982B425F96A31E11542EBE89A52BACF453FEA772DA88E7CD0EDAAEE5A2023E879C422A8AA67031615FC80F023953A2958844CDB45AB9C618F05FB4325F4C6CEE1546528EF80B85A1A8F65D7DF90EAABBC729FDB748DA818A4395B3E66F8272D0FA68805D4E7A49E7EFE56198CA1A9DC7EF89D477C3EB7F8A088903D05010C5AD7F0C9EF08EF01D65D3BC50D652F84C3BD6E57ED5F334E02F3E98B1B2F3DFA73EE62D2456310D9F0F85181E54CD380090079078765997912140B992E48AAACDEC5BD27C73EE1F9B4CC487E362E7A6768234E9A2107FC93F43E293100C27A86CEB9078254913BE5CCA32D3CD3F1D83553F9AB54E9F24E547DA62B0A84BAE694DCF9A2AB8 -MD = 4EBC3DA0561085EF0AEB2C8811B0AD62B49AEF529EB48A6EB4A39EBA -Len = 31532 -Msg = 09A51CAEFA352238B629C64B5DB8A42A9724AC1F3BC293D9373650480B2CFF4E26612D803FF5A5F7B98DE3D014F46A9439F3F035E9B0045321FEC24549C9C99596B580DAB781095A724B303758A311B65FBF22587BD05AF776B79BB480150AE7559216BAFEC5553238FBED7DF444D0EB41A6D837E910A1E786F7D97F57190002BFEFC984B5967DEF2D2E2D5A86A59135A346351BB1B2A0739CC68F8C8192B66C6539C3B7716F9612C25F97B9B6A9659A6F3B7B6E2A5E342C1B14014C49E7899AA1079DABE5D3B982D134D39952042CABC3FF35E281A132588E08F9306EB25673C7BECFED30B2BEC80A67E212275D99AC5BD9808017199ADE2826F2A2D0BC0D287E6E7ECF51DF3D8B704385E91A05BCF887AB612BB4317EE6B5EA67B585E80103410C8200BD4079C6248166BDC29374301195FCBC9661235541BDF1C74F1D93794B7A9DC9E89F50C4342F279A49A813B4E0BD4CF84CEC8C10A697DAFA962AD0C8ACD17802284C980FDEF8A008378506398DB54CEF929C4646722FD57494D78384A7F7D173CD57B4EF86479BEDB8D95321BAA5E175E71DF928CCE5AA4180105E7496E6D18250FE692BB0D001CAA678A5D5EE3E11CDE8D9485CCA104E0612A62B21F63C3B4CE0A8073C0C37259A717D65FB6600D2DF58DD3BD9CBD9C03DB274B96363F1B1AD1C47C0DA8D1852C82EA34B84E22218B9D6014BB1DB3E9037D320BA768862B219E82BDF181BC42C7EC567DAEC996F1371AB29A8D77864305DFC90FC67630AADE0B04CAD5CAC46A26C9BE7EE979F096002DC4F844D3BDDDB1959A9BE4AF239EA27AF31517794D6826597448BA63E57E6EA70E49D02E926AB35612CB9F4BC701762F258DC7BB103A4AA73064A8CF7886C10753C2DD65E25A43546959B7AE2E1FB7EB12EF132A02A39FD68B7DCFDA7DF325DAAFC039C6265182327A073C4DB7C9154CD038C4CD32709C7819A77DA057BD74A8E4E03AB33198DFF43AB0EAA7463C3766A9A90E1CD3514E9974E721381EDA67A5CE3E2501C7B2C6F5B999E651A6770905221A0C5BAFD47F48FE674175A69673582B1F6F135823D94DFB3D3AEB65CD04B1FFC354BF4E5C69336F42E4746700655F0D37F6B4A8E1CA98A7E98FAA4C862A9EED41C0FBA7C38EF36398CAB85B276B6D6E331194818A7D85660AE827F85266B7BDE302F45E61350FD5581DF6054EBCD73C5D2FA0AFD6BCDE353BD1E3B52B3405C3E22A4C0B33CA7EAB32BE3D1C3B12AECC7284000194CEE55D8C49F1F225C9A60397C240F654E8C9414E4330BAE137BC0226DFC9789563807B4922C60D71D56C77CFE03746720D177ADFB5AB27D92D7E14DD99A3CB33BB68B8A42B50CAECB5856E541BA8BB48190395A8DFA5C25C3D35394928957BE410974C95B9DB1DA6EF1EB3820BB4012182CFB0B68BA5F830D566EDC2E0768D821BEA9726D0C56B8F08126AC76B3A39061CA5217219D9A90C6401694A4D631029BEAC47676C71D03FA0F5AECD6DB63F3CE25B9F82B85AB771FE09D27F1EE540C1A988A56769F9F75952DCC0475A1ED00BD228FD88D1191AC6AAB8C29FCEEE4A473D54F15F5875332E6FF97F3C322B2B9B787C85DE296B5A5B84B236F8BB16B3AE603DB9EBFFD75B6CD7B26439D6B972182FD62CCCD53FF9D025FE0C09374E990AD46C63C828ADD9B11BD7BC5B31E4E624C66FDE300FB7B0B0733F75A4FE83E9C22E179163A3EB7D479DF1AC1E13953DA5E9D53DDB2D55307CE474D7425533399B8F2929B9617EC81BE79EC8C948F177B364B63B7704FD37B42907FCA186835D3525D0EDFC10E006DCDF6C6D74D21E736ED4AFC990733C1E3DFBC0E81F193774D05F291B857D1ED160366F33191341FEFE5B53F8EA62340E2E935E655A913569827A1DC47A79AD82EF92AFADCFAF3D9D871A74CE2A6DB930FFB001CC827CF7AEF6CCACCD932CCF5AF31DD32CED346AEF50C0A2217258F3184D3E34DEFD731D57155DD2149012E67DC67E07717F758DD91574EBE83442F891BE45F5A0642F2E1405F6E5DDE135E82D4CFCEB52B6E351B4311E2EA2CF8E81C9F6781572CC82A39E733698022F2FBD288ADB77BE9CB139E911D534A0CCA72071CF295116DD89E9D4570CFE3A8F19CC96F7C272D07141A6A2950AAC6CC103A54BB2652BFF9C29519D9F5B54DEB9172A8F8842821D40348E661D714A17AC7AFA6DCF42B38F25CD563F5449596176F8F1C93DC05E41EEB359B4F36DCB29D327F16E87627977580D38A01F7946D3B75674BC4CE4FB4EA139174C520FFF106ED0B5E6184E3C9051226205B60188638DF9A9D6DC977854D146C7F021D9F71553677237A3841B370AC5B3ED7B5F987650AD9F152B79A42B6F4465B1817A598D404F39D274C9911202F18AC563787447DBF220936C6BF8042780379968D84395E9F8028A2BB117EFE8B49FAE01ED1AA3B24A398DAF97E8A4C3C20B31E3C6B7FCE71DADAF4C1D25CF1E664728F22CD7675F64F7BD5432395B3CC58CEDFC8A531182462C09AE40BADF763D161E1F5EB6CFBC3F79EBF940BA1A31712B1BCEF1CDDA3F9374CEEFCE254D2C460C67AD217526860192A1D40B72DEBFA8BFDC287A3E1D0FE93631D814D278C504399CD7FACAAA3FEC2756377EF838244E126310CB7E7D728B796230A4CF4D3BAD974B74C7B49791EEFFED7F77EB917A389DBE5372601B273967296F1094FB5F818A6588DE0D2181D86D25172F4B532D2808A589286E74623083EA1AEC88362A82DF4AFEC1B1667482BA532B066D6872F40E6EE4684B90A3B1491488CE2C79FDF87EACABB432ED127816AF48D1945497848E3A9718BCAB713B8E87916704D436DD27DC54949136E9930C78A6A862D93DAFBE9D0263D87232555338F7CFDE4536D4608B694C0983E28EB1ED18CA80A414A5331AC4B1FA23153CE23169CD5C050C89713FB8C8DB762E97EE984C5B87FABEB5237D4534E07DF7934ED1C4E16FC4A650D42460C7074024B9E008C4ACB9204CFAEAC745B1C0D1C38B604252A00239D4A43B9EACFFC2211016FB0AE531C5CF94188C056B518216E830D971AD788B98F6665FD46BF21013833376A79A14ADD8089A37EC40FCD7E3B013061A79000758EA1D85E33DF64E0F9D1C94DEAFF14D4979F1D0F523A9FCB469DF6FE591DC53D7E5E3BA7C989A519BB09668EBDC371C3897F6C291D44B27BE71F4C36D58FDBAD6FC764904119D160B7A959B89602C12869AEF0485895D628CE4435F933F337C0997E7080328D51B850DB8B09F9666B8F4D19FDB4DAA102C5A745E853E5A8F618D8C79BBE04831FF65866EA44E7769DA747A2B25CA6499C26B89A19B730B1CF826BC391E29696127943C3AA56B4E3DBCE9D671ABE6EE9D38D737C76DEC6158EFA8BFD91862F0420F77F9193A3562D45F9B8B75FD23A4DD8BBB540FEAEBE523442B91F7441C9561F249D7CF6428F3043794893EC06BB843CC44FC3C9F33AE3D552A259638D567F7A616C0D9B42FCEA8476DA6963AEB2FD3764B9085C69D1D041D80F181687903411860D4DCD86E94211B67946875D5DC3FBE9D731EBDB9CC8D31710AEAD0891A40FCFAA7D059AFFB11853F7C5FCE6269A58764F311BD376A4F105EC3EA39680487BC1F948F47C92C7D86D89DF45D42FA700D425D45B42DCB43437F993D656958A5EC97241B391B367EE75AE9C516840076A7DCAC86FD4DA759287C44108F1B74F088D34E46BB3438C77970D5A838226F8389B9CE3D7803FCF8E0E6334DCB02E05346B16DDB31100F3784F9F93A9E68A0074949EB40D2115A72D42E52890500F683470F27B8E4F6EDB4D420C12D48C834A4647EDE47D10FDE2C5A76D65247D52AEEABF47233DE42D23E53FD7E3C6053E8ADA68F964D75994B9C9DDCF3FEED9A307D8371450C1C9F63DB63EE09B9D57173295AA77DC06DFE25F88B02B911913861CBB9150E78E1B6CF23229BD615CE97D5764343EEB67F4386F0240E45FD84DED190DACC900C859AAF891BCBCDE93124E8FF026668EBCE26C9020240D33547FB9DD1A7720E996922FB7A48D972554A874B2AD5FB2616B034740562CF25923C6DC41B275421844FFE59C752234F68BC52B4D326EEF0DB07C50E434ADEF19112DC58B45E1BE17B8E935E2348F60E02A561B5A60E66FC741AA22CFDFB3B27741745FE9445EC7DDA83EE7F68DB4880F0DE57E8585573BB1EFAC5941DBF2FA74A578D30865E818437F820AE3FE7553359AF6531609A9F8826D4667712D7A69CCC707CCB92C59205F7D42206EB4AD597D00DACF2AEA148FB1D05819E6CAA8B1A1A85247448DFF9C0CD1EF24781436B969DC4FBF26349B9A17FA5D4882DF749BAA1F3250DB1BA784CD41796A0F79E247E160D10CFE68E65461AE0C8AAC2EE713F1D79AAC3BE43E90FDF555B8FCB41D4E68AB5E822FAEE5E3EC7BF8CD82E56A14532E728480B3C16F42938894C64623ACEEEBCF91EFB5A178F9FFC027B2375389389F1532E6A5C686168CF2A76A6EEC149F905A79A0F72BDEE9E5F02C2F3F0959874CFB5429ACCA32A5A971C37BDA4823EB5103FA6237FFC49E44B1A8AF309938D07DEE187EC9168737A9DDF458E655CAA07206B420E84319107AE005F534516C283D6DC753C61D4D5329FF18C5A6C58CA77DED3608275A36B40C21564D73D0AEB4CF512E4AE34A404FED62165798C05B1BDA6985EC44BF489780FAE23CCF7D508E138E967D08EC80D87619893A82F8FF1B398DC302BCE9CC339525AA475A4191ED5B5DCEFAB78CCB68270A867371573AFBB70F92BC859B0A6CD0F9FE75C3912965132D580EBF840FE306E85D786F6A6BA3B9BE25947EEBBC0099EC38A0CE4F31E3E41287343CF8E818AA8306F7880306BF060AB635F710962908FFE5CEC67C1369EFE6DF667A484993ED16594EF9EC2AF09B06A5F8B0F39ACE61D3501EDCF06A010C3611AF322F9FA9EE1CEB556DE7ADFEB1F724E2A4E17CE9B2237AD1A574A2B148AAC28936E1F895E5DB2D848992EA882AD661B4F0DC8732BE8F695427D426FE427D81DD99E0B0613A425781708F18A21AC9DE02D34FD23A25670A997252AF3CAF2BAB4B39E26B748BC20E3C8308CB04EE1C72A0B48AE2DDF09FAB0DE362ADF18F1AF6F3786D88B29ED7C2542E1A9C0E6B239C0E6507B1AC3104DF601AEB6ABAB6F048A635B092AE0FFC2A7F31C7351D309BE106AD431551DFDA7F2DF75B450462D8C08A2B7061CEEE34EB6D489E3DFCBA1B1C52D0C58F8659FA6E545EF526E2F855D11BDE1831420D9C4E53F27BE9D99B650EB8DAD1BFDBF4A99A3FABCA9566428CE9AF40CF605DF5F60E53EB4224A5E716BC6DE4137CB0B458C566943C90F0E4976B9DD1F4DF5BA886F22D6D1D070EFBE8050D8BD3330F06345F85E0C4ACF269734540DEB7B6112C1DAC075E00DFB0D7D256390B66CA107C4341F083BFD66D11168EFEE58E20B4D20790DF2ABA9DB194BBDC115EE6BD6B21358AB5AAFD8BC599D7180C5DF94C3371BAB00B2AB2B68C9B7630CECE35E78F01F34036B4EA37D3D572734AE0E534C4E0BC06F296DF4D278CB1A28D0D72155C8CDBE9C7CB0D5B475BF6E316C139785089462010431300 -MD = 96E16EA903F04D74B2AEE4200D76873222F623DA0C3C29814C6ABFF2 -Len = 31595 -Msg = 5E77D03C9A5AD5061E06CD19FC55A591D4FEEC2B42BE4EFE20B61ECC2F7F7770D6D76FBC4ACDBACAB939EA1646EE5E0176608A75CC2BED1C239EB6118355C9223B7EAB0BC395FD479965483C173C48BDD026BA3260427F318E33B36E980DAB4C1DD97C079058B4DD066424EA0E45006B32BE784DC7461D087A2DC00FA824A07D342A45840A3E9AD563709E537672CAB2B254AAA75BFE8EB241B570BDE8160373444D56492EE445FAF3E079777FDD8FB8916E4DB8B1A7B6BC05DE8A0DF6C04EC97608F7C1F3559C13DC0F5007A291739E7FBFF7549966DC0A11AFB755C2ED7D60C769518E5D4438536C16F43608D5941A4E696E6859975EAC3192250C4C6E654CA10EDAFB85B3D393A74FD2716022D215E8609C500E433EDFC0003D966AC7175FA573BF127359967775D4179E0F48DE2E3795AE15B8FEBAFC735D05284696C631F76C35F5E5A7A4DA2F7E2294F098B20BA31AD7073046B9DD3D8D9DB3EB839786D324179940C22BBCEDAD777FE6D909D1FAFA4611C3E9F163317E053BF0059525B2A7BAD394D1E1D5A719928E7C08E8E1D6669738B02245B3C70172B4B6DE5D8B75EA651EC1DD632ED43E6F1DFB97848F026157B17EAFE1E59F832D85084E2542A5ED1F78E4330CC4E35DCD12CFB9FC5C764C0027FFEDDF3389C099D7A43E9DA8FF4111BF6A1139EC099170D242E7093454B2D5B13038C7527186D895C1FDF8038EA42DE15A86ECEFDAA63A2440D7FA1081B9276719D211DED03F77980C56DEEC7151AB131B910D78217F8D5FAD2C572D1D1FB074C1A154F07EA2C0F194A10B3D5F60F1209A15A5DF651248F9A704AFF4558AADF1C2A8C7C6372F366B4C7033D7E1B2DD823FD4C64B7EFDFD79F609418993B49ED5399B5C2A8FFBAA6B163DA16590705B1632FAAA10F0C7B2B3EBA4EDBE22B6C827896C3B220860972767D45846017AB68452AB14E5BE55E09BD3C9661E6C3EFBEC58DDFE6D0BA62C6804EA7C1A5B411543ACF56D71C20F56BA750DBF6D304DC05E89346E1C6D7B08E5A20DD471EF327B6181C45048C49E2878D45FBEE487E565990400B0DF7B6615F41F21F6C6E97822F35B45A48B88FA43AEDBE3FE6383035C3A924514CC597A6E231E67A3B91BEB1D0E5575C4697A8CFFB1FF8AC7D57BEB8C3FADAC9EE3109FF0DB79574B27FAF8ADD8790EE5BB948B8981EFA977EB73BD6A5AAB71244E544B63B125CBDBF37342FBAAB08219605F71D39E380A5EAFC35E0E7696736D9052D9FDB63EA89CF17530E378B301247048F228D248DAB76A3698B9B79ED3D25CA4B1448EBBDF5DF5E10FF6E51D42327826FECD49A2E386E8B105685E2411CFF84E8F0B8982D6A878A912F2E526A07F191F8AF4DD18A0DF4CD7DD059323D7704DD82FFA946BF16D9258A61D045268F94FF22D1F63A70EB8BCE7F8EB9613F7120B130CC7B0A7BAC65DE5AF9057C889B77F75F88E6B55BB17154AA999DB90B5A4B1323AB093EA81FF95049A63EE5B13FF18199CDB5C33ED394158A2A20CE61913816FD19C94332EE7072C8B18DD727E8B2F288A6833BF48CDEFF027448668C234AEA578FD02F6AC158D1023DD138CCA8ED846F92CCC4A07AB92E10AAD6BC46030F8B1023B50509D7D5CDDBCF519F9F12407661E8699505F35440028AC4A638E6E0DC1E03DCBA2A023D08A92B8C4B6A98BCFDAC07E20E03DDEFA6FA216F2C7E7220311BAD35E4BEEFF8B422E39CBE799D0435FB1B216D07EF6FCB061DC2E25A86D3D4A9BB522F8461512556D55CE0B74FCB7CECCBD481F54505CF35D8147B50C6E9ABFD33C9C232825C6129FB37A670B9A55BEBF2FED167DDD3A498B2B817BBE9CA51389959DFC5F4008F7A973182941DF30E81472C925F821B6D70349C3904676451906887261ED1DDE80839B220D7016F0F9CEDF1D0B4F5E1D1227BB435B5D061D4F1D207F4FE8461BD345A542124DAE752B036E5CAC1247B2AB5C156DE558A98572C314B6D4211DCCA8BCAE710D52CF20579FF7A75A9E2C297432F469FBCAEC9C41B2028A59334046E397DE2378226B10DF64395CF76D3A01C0AA23ADC4894979B8D60BDCDA7AA9CED800D0CC4395ADC55CD8F054D2E05BF727F23D5F263C6A905813F924B946AA843EDF6178380C354F338E68732A9FF92666AEDE44541117D958ED72E98C1E357751137890ED4932D8A5005A47108DFB4B58BE8D5F80440A7ECF261C39E1DA24C16E28F3987B361110CE707E5B43C074875216996B6F99B2F98E4EF397A263A123D64877CC85A3ACC4A97A13FE1E40E9D850BC5682846EBF79D9629004A544C1B5ABCFCCDF385ED15B9860A5170DFEA0E10F61BB373FC691EBE4937F1990802C3C9D5AA2F1165D789A6EDD2B685189EE7684D640640088E8B9BDB6431AB0471BF424A302E8F69A19337FB740B8EFAFD3BE8F66431D7F65C0AE39EF2A851CAA9DD5EDDCFD378CC7D17FA848881149C330BDA82359E391011F857458662541CCE3CC6DF13D86835EDBC9B8CD71E3F9AE0D4778EC1F3C728675A4CA616E8CC67FD91B6C3969AF112AE3D948F2B4EF4FE268CE431E753C4EC371AAE7C430662C913E648592CB051AF3A7E7586090D882B09530E24C0938C4190DA93CA2D24AEF5EAA9702650AA60DDA5EC062D6DD94BA5188C4D1025C53F0D105B23FC4A4EFE8B900B31E6C32D90C1D9428995826FD1C43302E2C3068DDD1A412D0586D305B079181A34396173DD112E6CC3E42F1707A5FE92A28452C107527ABC340E019F143E2006C3A91A53E47E2A4FE6F27DA2E428D7479231D22A1F4EF84585C4C500CA7B7194A622C05681ABDEF8B623CA8457FC64BABAC1EC8DD9E9061CE8A09BF14EA6C0584520F87E6F744C3C911FE5BB7046D83D4E2D762C32F0B3A2A1D39EF8CBA999497FAD0CB82DC85F8FB18C331BC9DD27E8621E9580ADE1EAB0760643EEDD9422C395240C858B2A0C62E51741051F299CF536C3698866EEB8A8D8DE0012D27160B9774CD805A9227F96D6D5E900905C06B2F25894A62C52EC4629B1155CB8BF74B553D65F4CF39CF05D3D8E4708806F13BDF58A4063B943D9EAFCA19C129DFC07BCE060B9CDBBD8C5DDC9D37387638FB783F2C7E17B9C794836890126A7A923F8492E1B294A784A0EC27E9907B1B07B8DF6E10F8D50E43AE1B8E87283D22886AB3C11E2D1ED4F62C568883EE9890B21CACB74ACD6389E0006D8F16039506C2DE813A92F3E955654E808C643BBAF37FB86848958F431C85F5C0DF8392D5325C9983F1B3DB0E95CFF71A4473B90E4339349AF59159F0FABF9ED6463E7ADF0B8044A1DDA67F3DF48DE543CB9B683A52194D0916505E8F6DE07F90E447CF24E6786373CEE1FA2675585BF154E260F98837C586C5645525C06B434B5A0445B1881AE5C1D5BC169D0BADAE939D6EDA975B25EF922FF4DA2FC5FE26CFE56405AB5BA03CDC52CB974351613ABE02F5F32E6C8E307AFF346014EB76DD9064043057949A0B3BB095DB70E9A151C9705D243B8EDAB7CBA2A1BE18EF83E7C166154CA25D56EDBE71B56DF91A16C901CD8CCA524E34F46EB049E751C701386E07490C3AA9C01BF3D9F227CF0B758481EF8AE8D3B3AA1E7AEAF712E8D17F6C572BB4BF6F7A151BBA204D446795287FD37B5B0AF5B09DB345C2746DCADE74BE00201A6D36BC923346BAA8BD5A4BEFD544BC4A5048B2F3815EB3F37F44E7772B0B45A65E9E8BCAD839E50CC0F2204BC60F84CF39E8332EF86D4387C64E65FF754A541709EDF066D5FBE3507D7AB7039EEA1063BACDC5D43ABB9200033F80BD45B7CCAF1D6618ACFE9A0F9B1706AEE7FA8C5658BEF1E08B89F923255A83E5B93F8B45A08D747DD26B769AAABF8DBE69CD5F34CCF3FCD65EBC0B56275D572969BF1B7613C15E9884D9DB213B06D570875E61ADAE28F7B25D6686C3A8E24CC689A3D087C7D4E5EB7F4E3DD2B9856A846551954B1ED8DCA16A5ADD4F1E108D92CFB083DB48E96E12D5F50582A8D1605D6BE02FDC4AD4D9A997DB9556BB19F9AC314B47B683103D6D33C00BEDF4476B90905414E4B809665BBA1FEED1A2BBEAA22B25790C592ADD9C2DA13612A5D7C7F8731FA84DEC846B449A2E8ECECF8233567148016E8DA25C93D9CDDFDF08EC5B4CB409091CA34BDA0AC710EC6A5FA414BCF801FF658FACBD25FF5E9B30227CA882F90A56DA433070F0E664EDF1F9D7F86DD7FF5CA35D716499C2B6B2BE086B699D8C352BD1A64E7547DBB429FFEFE746DB2098FDF3308C2DDFC9AC6361D3ABAB6DD9697949CAFE467D8B3BD70987427868CBB5E707A1B44AEFA173193A3B0FF684CCF672B00AFE499372D10473219FDE3975D0B514DE75FD8559D17B8A7005098B1EB4BE6ED09D04B8F0BB747FEE99B8F1DC8A644CB60F7839223964B418186216A7D4A00B08596AD054C761810A9287868C859FF4DFE272DE17CD4E9EBCD8B1CC8BFF01C41979AFB8CF45DA431C7D83FE9AB30E8D26A46165F6C7430D3849C3F4ED00F635D99BC5B0E6EDE205BC1FF6D0F95D3F36F9775196DD9B954AB9028E359C9BC494B4A43A1E83331DC638D5A00D856F9BB58A37A8BBF972BB87CF7A0A3E7F7385E1DD813B9CAF06F46EB20F699C482E6EBA7374B16445C607A32F159F875D69CC7A35CFE4D7D410290EAB6EBA6255D0D4FC7B82791DA1770C28D6A3B5D85986D15DCFC4691FD69137B926167D32B1AF964DB70C80E6C15CECBA1978C4E5CF9AC117E15BD1EE8096D4598273587AF77DDAA2DB6F3AA0988E7A7357910F3E7F9313F89C93877B708007D436DB60F642458A3F6CA09054D6FBDC9CF85EF3511A18203348903F08A81029D420D3FA17735E02B73421294F9AD0723ED3A60867E516387F5269A177C1718AD1E35096B526E895A40D509F92F9925E401F2BCB20EDAE0E175F3241DF6121DD036B02EDB9253C782D941C588BDCDE7C12C017643187CF3877AE9C5253015773E28E4D14D2E187D96AAC99AFBD19C8BEE53CA318286BCE1AFF4FFDA1A599E2E05C4E27823DD5783AA09CFD4E30C9AF6A308A34C97306055C98C6B37F48FCFFD12BEC22882D9A56D3DA7A6728A4336A5783C840481B73EE206005777D6684930D38144AE57DD1A38B4ED528212B7CA382D7643B7ACFFBF92E8AFD5A3CFC19FB9703A1F66252FCEC058AABE897CB23EA7B5D253164C5D98BF2B88670737C0786F85A54F771466F92A7BF0C86843ED4AB47CC61C1FBF971AB89766B210CA48EEB834E0BD7A07F309CCBCD67CB3F32D86E0B8CAB8EA793063F7AEF307F64C97DABAE08CF9370DAAF04E87D847D8C17843466BE763824DCAFD4D9ACA3F4083ED544602C2F9916748FA26FDFDB568EFEFE3CFB6C710417B81E9B11A489E890D5CA998FFCA6F3AF86EF5D5B20856380067DAE77B881F4F6BBB782183C6ED182FD0ABA38AD42419C1F39CB7FA87FAB06E7A0DC3F1027C9B0E2E16E9D5F8AF673B6056BE2D681CF446609505111145FB52158686DB8EB3A0C860A1A397F22A9F27DBE80C66B4541663EC9AC3FFC284262C48619A3D811E9D2565BDEBB527C54EACE31049EC927DA39D877C76974F4FDF513D6E92E75C2EB18C20618EBFB11AEAF048460 -MD = 2288FC107BD76C512FD9D3E2C7BE96C2E1A9DFF6C5F15762BBBF8BCD -Len = 31658 -Msg = 82A4FA10C1589B68660A3FE168206F5A5479B33F91E3D562B1F937A00E8300E595366612F6D981EAE175D797FC9F37C7B2F2D9152E7EAE8CE9C92E495596C96029EA6A00236FFA1981B94B8B1EF5CCBE974F4CEAE2BC77C6CD4FB322AA341DC3B329F89A8509F0E894C77654AEA97F7E4BC1F3E90B960FD516E1D53C93691BEC1EF5E2C51030129D417E80E920F155D32E359E40EF8CF99BA544B2C065E114597395FB7EE71F2CF9D08192EEB30F1F9AD60F5FE9DA6E1C93439EF6F51E9BACEE5CEF6BFAC012A5FBD758AC954435B6FA9AE7FEB756441DDBC614562DABB3BAA3B9B816BDE124A02C795EB93DC8686D7386A8D6342AB9711C61100E150302CF3E5A1AA8E8F93C7448DC6CF711D7A2F58B10E58F64667C5465026F78CDF48D52125920A02A6220331AA8C805CEA5FA35007710430EDB6BA817B2C00748A26402587FE176217FBBD61BBAC55731A7C1FA433D30014B9D765A4D8384ED5E8FA1E8E3972DEFB821E209F6592BB771A3DFE4A8C2B24193AA7D231712CAE494707CDBA9B3885E7E25521283A235F5E0CB58B6955333897D1C8771140704F48EBAA9F6D8327785B4A67F1AB1008AE94E95624CE780D86C6D14EB778D1170F809E7C2044C6D7DDD00A0C43F2091685E8B7BCF9A402F95DF23F91468F2BD3D33E3615CB8E26AC513A396836083523D0AAFE7512EBA65B0EEA1820FF2BDBF84AAABEB71A49EA7F0C32D9029E310E8B205605FE78E4BD1286256BB4FB65C8050AD2B613F927964978B7E35AEB8B85C5C30EC6FC446C9CBC14DB84AB117364D5BB46C0FD54E3DB8C96D314C596F3EEECBC0708D34F64175A720934A1B0FABAA87AD5CD8203C117CC10C693262242323703E19AEA9A70900BF8B23994879E25517A208E4F16A7B12A512BD4DBA7611166E810ADCC9C846AFACB488B9F67D940D524D4BE3F6B76B9E0DDC54BA5F4D1DEB492B736A14F0B228C3E9CF90B64F8624DB4D0B73553DEBD7884DBF083D46BAF37DB93EF3091DA9B84560073A2E890C7C579513D6F19E731DAB2524ACC31E40283AF0BCD0C8CBE27E40CF9635C4167F6186430E4B44B54A2072E5820C931CB43C210F75FD1A32A01FB196F0E099690669DA37B531919CDC3D66F51FB1BA1D099FB9A9C53B81ED54A26B3579F70ADF53C3D2CAF6B9C4A514384A60176AF1319CAD5B33F8D8591569883E15088EE2A584B2A09F6001E85972AFDFB80C1F2337A7AFDFB663D4BB3BA83336746E5C0E73A3D028A853328BBC686EF27C65F3A8486D239BF12AA5DE9F5A59EC3558EAF3A0FD6FDA473DED146099F7B3CC0C04CF6F7019B1E06D7849ED8F0078D96FC88F1C88497EF06A9CCD96FC5FCE4B1050660019288DD3B8C970220F95755A06B189869EA89E4535D587401118FBD4F179CCE945F29B116E1F8C291396666D8278D002DF09ED030B683C948D114CF3EED03AB2A6322D5FC326131CAA0D5F51C6D25060C9645B3BCB396D483B47E75D84FDF9748AF3135177209989405EAECD324C713BA2DF0959365C41F17976A01B28839792BCA795FA4E0D1AFA14E1AAAA9BBBA34E2792E8B3F9D062C7FCEA36F029885EB1E826FB5B4ED3D42509DC9AD58A89E4FF188AB07045501424B40B89C2071A553F781B1D6D2A7F3CB169A0F4F9246661A411679F52AFD7C69AE00DAB60FBB7B93B7EF615A992408CCF4ADCB99E2AF9267223696B71BBDED5748A79EEE6A97BDA5E5FBE4B753A63AA85D4D6084F9C8067AAE3B9B6490312A2B8FE193E121D551779AE8D733684E791BE0357DE1894DA1F2ABF3D98CBB0F07FCBCE834F6A2D09D0D60D4C55D7622FC4B04FB1D1B6F8EFE680DB1260D61899701B068A7B68870DB8D09A382BBE7E595136EB118115DDBF54687FF3EB0D5773BDC81A62BCD430736CC900A28C5363E6EBD0281F4967D989E12123B5C4DE319CAA524D85ACDE16756B714EEEBD9E20C344CE79C3558D84A5CB0AF7E0D56ACD3FBE76DF3B75EF78D83D79999C52E7CD11539BCD3ABE5892C8E458DCFF267F3634A0E506BE2B876F39786C4DE0F95A197E661825D31FDC7C7924ADF9F302EE019F9887987136DFF5EEFDD16F877CBEA9DB8C27E2E5EB53F9E4484796FA47DF4F98AB12DF7E3283D48A12DD2B010110E2E646A1CE17DBAB9BE0898D0DA1E27D57D456E3E877CEF4D6455EDBCB4BEBEA4A746D70E1D1D85596FCBE15DAB278799C0E0285D7C5C3C4CC8E5055E69EAADB6556ECC37FCE29A3B1AD7FDFC8B08FDD21E1A0D55A185DB32678B42172086789EA94F59CDC6B819F9624737F30F4D0F8458712E95EA61DBC180BB250606C6AA9EF37564C28CD1DF8A132D01762C95954CCE7A2012F30A05C9F6EC6688C5FB675BEAC59C3D90F582F8B47BE4ED44D6BB00C8B915B93F8199DFFB1BC376AA2EF7BD6E3825130DEC84244D1A6CEC1244B5FB0004414F0CF656374072A62ED68FC374A572E4BF6DFB2718659EFB33210718E25E225606B349CA15628727EF06C34E2FA31EF9F8719DFB2CEC1CF1DF32B81FEE81F99649CB34CE9EA8E1D866738565C4A3FBA84203EF7D0D0E4ECEB2FDB857852A7990C272D7E33834DD0588148485B88EA43CD30B842E13A307EFDBDB03661013CADE0532400BDC3CF7E4FE843E8D38806169EEA7DEE7616A74E3B0D7242C6F7664D21609D969939688D92C9B7DA2D16515638EF122DF32F881B6E97614242B24FBCEB9478685911609DE5BF23905BE2FA1B95AB19FFBCA426BB556256440271C4A20198DB8C2A12AE28E9A60F304CF794FD167ECB61FE224823EBB09E0492B38210791C0016B76FBAEC7134E93373E9891EEF915F3C2DA475DB079F8F11D5A23C3A4A6501ED02FE0DECB6AF4B008795CFC76293B638A1A7F9C33F944D1C009D711E8F8E58156C06A035D48C46D5939044B07D98E8C9C496F7EB23AC2A8A51A324D121764CE3EB2F04263699C01AE9F5F7F67EBA73E4EC3D8420D43128BDD877DA1C1242ACF4CF9F58CFE5E0C5578542395BE77A39D528D9098C03438E627721C909955F487245C89F8EEB95B6AF8718652C58F6C526FC7E2B2FC65568C30C84A572395D84397AA4CAFFE87FDE55FADD270CA2A4403007E787A5F16C8A986034AD7483E0099806C27F5F5CBA7869B9F1FAEBD33EBA89EA847624F16CEDC45B2F8A4276F6D48E48E5FE70D962886D8739D64114CF748C9F3CDB432DCE8729860CECEF8BDF53CB97BC7CB93BC1B25C77E92071EF6BA8DBD5CBAF425C843966AD5B74E30A13D8846DE72F06B6218401EE8446423C057D33D79F60F3E4AC6B720371C2D1C7DE3589BD715E29713739C286B73124C8E0B91C077FB57DC140B7F2AC1282F9228AF169C423F8196DC1F140C8779C7C9B3B0E05338774326FAFE461824F40A1C61E755EB4692B795DEA45443A0E2498D7E1ACC5B81DF94B257096AE1D8F486D88B77532051635A0CB6F33894155C008A145E0724584AD6B0738F9F5B28CB5682D01C9FE7CDB6A19369E8B75D04E9B8C56723BCEA39AB695EF10A6AD65573C175C0F2A432BDCF2E8A11715FC8ADE4DC64CDED54287CE6200CF0E5A7AEB056E0047E8DCB6381329F6DDC9C3DA6BFC859DE40119ED49F046AADAF67CE43F8C4F77A43EE1A0B24B45D706FE9B24ED1FF8A89E6044E2851AD0F25F0BFDFEF72C6DA38B79F48F55E898A2CE7928932D99F52FEE86395D869E6D9E8BD571B7C48C256C000ED47B84AA3959CA3A167EC243391E64E31B3F701FC68D658226C935BD5702DB539AE7E7A3C8A0E9416925C56F45719BBB84017EB2EFDBB8EEEE3C8D29E371CF7AEF52C6EA10A43DC5E82D3569E899CB7C71D92DD3E11BCA3262871505CC189ADB927F74EC1420AA46AC29D4185D61DF6DD0E8C15D80EF033679201E5E721938E23C79A002429FA852BB2C7DE2B8BDD643D829C4DF6738F0BE0F1F3AA4B863C37165A5B6CCF933AE80827757BD2D218E226428D29433CA066D95DB1CDA2A91ECDD2860DF4681B53F5276B45B8732A537667F245815E4EFBAB53F2C52DCE6D383F54E38DF660C96A402548B0F0168220119AC74EB7C7B43CE1973DDEE8805A32C6C8F03239F5938B766ED9A0FF8CB52309653FCBD502B8B41161F83C8016869F209D8D685762BCA4A2CE0B2E9BC8E351B4A2DA8A64EBC4C3E6D5078867B8F6412BF8991FAB0365234B4B3536C0DCD58D9CBB68BC51B88245C8A8BE02647284E50D01701AF06F2AF8FBB6CBBC1CC6B71420FEB86EF988737C3EF59FC8EF23EA253753D762E66C0AA90267523F0F7A920F34D2BF9C30AAA724D5492C617AC17893D13FF092C7AD13A70BEC0E0603E0BC947BC29822F88B09E0D8A8585CE83CE3E3C2F00EFBAC3428E0DF5453E78B148946462C70A365AC971814137BDA4EE9555F4774A4FB63BBE312985F74370714AE376E5CA5E5A98DC1D99537B49B7515D2CF32A7AB766C94DD03641F19C38DE3DEB3958E1B1722EE3F746CC32A957A2860E2B68A419841376CB767EB85BF0FFE407A849B81FFE1354DCD14A110FB2B4FEAC2088C83FCCC9EBB1BDDFF665E4E49D3CAEB5647151F78DE35DAABF0550E77F1DDC7CD4A1F61DC7F401F4A16339A0A2653A3929BCA586437889AA09AB70ED527ADF658CBCB6BBAE6578E21A1CFFD22DCFDE92BE894A35F5410664C666D4F791D849A005D07A52D65A334D8971F999526543AC8743A1D975C7C1C1F7398F77A03DFA668B068DED0E1EAEA9BA835411B6714B8159E21B1D384E88D3F2E0AFB7013157E06ED23337D68A3DF22D1CB1C52E2FF275EA159A0D4DE4FEDD2D3CB15533BC755AF156951884858F9D2F5ACCA32A996FB075E100281DD0C4D607EBADD10B8C01B840D3CAAE02103F7A4A680003B61F872358B0498B8E6A699662C7EF839538EE52FA7E138F4D501D7677C20E1B9CE62899829A7E2252F4559B9458F8ECFEFD7013F29866065D91393C524C9A3124357695E1C5048A347D01611C541477329A0DD9F9E10248DE298B7A5BD8A05A25F89762ABEDE86953AAD14D146B8826003434EA87ED09C6E27732503F69F0EA1B9FFE2B5F8A9653915F92B44A3C33D0B1F5E93BEA50C55F1B2E7A39F3B71E77A47F3A77823C9E67F02626DA663FB05110305D19CE342EA6EA29BCF976C9233EBD749DE9DF7AED7D974BEE412C5F73B4DDD05EE1D95BA9585E87FC29AF40CFAD485D722220B969F4EE7FC9B0430E77AA253B3C833BFEE04C5F5E58AADEF5C80D68542D514BAEA5344FB14FA6CFE2F19FFC1F2197420D373AF4CDB074D7A56A710753B0DD9B7C85E2B9DC189CDEC52C088232E5F31554D89721F48FE390433DBFF3AD9F274A74EA423C9D2EB9CA0E21BF735E4695B6998EA8916567BFF9518F6957C6111C42C910485372B5587E3593875EF411E18160081FD3B74D38C35C0DC2474F283DC4864589F9C86F1D671FB8D2959A7C0314784B2827A9C36FF27E5E5C797C1F9985BD20ECD8061AA0946A77FBE29FA5C73E0FF18A4A1F7FAB7182DB50C0653F1B76882A674EC2FB38CDEDC099B9CAC92AE2149EBC5F64F6C10B5D88889AC911DDC8D4099451F96E93CC162D0BBFE73AC3E2F4BEC35E12A5948CD081DE2A6922BF2AD0A727D9C0 -MD = 09ED5F9094F728D5CEEDD3D3685AFC4A342358228F0712C46952AFC3 -Len = 31721 -Msg = F4E400B5F8DA10D008B306920C673FBA6E823C669F01BE281B59CFB8CC38B9B25AC387AAC79D5B0B6268B5D94F45EF4BFB574C65C1A64CF3330A36F4E17FFA01E2B46FF59728D27CFF5254056D5C58C49992BFD48944AFAF74F8FBDA270F592B864124D7E9CCD094904500BA9E3FC882056C9CD7CCDA12961902CBC1266FCC2B23197229544FDA749B1591BA5872A2D74448684210B360F3A9F51D2C3B990D52068A259BB2E4EFD3C479D932CCD75E60B3EA7D3D282C1EEA66280C24EB4C5CF697E449F7109CBBF2C15227C5BAA88E2B5D19F0BDF16EA9CB2F573CDCBFC4C744E1B5A3EF52AEF0D737EB2A9DC05B94BFB1C19C0D27A0C3BE5806D58504A6432C5370489B752DB0E07939CEB3E4C4FFE1CF0E470E7C1A30364F7AE73B3164B7799C87190C3F7DFF35E3432EED8763A82E9281565B8741F8E0DE5DA758AF6A7FA02C30AA73BDAC4FBFEE98B10BAEA118D9F54ADF536BB44531A1C0AFD152ECB7229709C1C21856C916D2BB5A7537D845DEA7AC07456E9D96BECB10C77CE6292C10F6B4F71304DABA247613EA737E80B924C55E8FED3B35AF0D2CB50CA8C2423D76E50BE69AA1A0DF61130D0C8BF7326E18B0D122A7678051BAD9366233D5362237BCE6CC563DC117D64103D56A6C16C2C5C4EAEE280CDFD14CE751EEB8B10FBD464339FEB3AE4E3DF8F2BB2B4EFD0226BF6F73E9E994C2C54879944371D9AB6229BC13FAD68051D27BF19EF6C5E9964E1E734D88F75D4B9C596AA9212B7EFEF498463DA8DEC885CB155D0CB71945E9D70F192906D46715F82964BE3A753EEFB3EE4C189E9C562B2587E89C35CA94633B45EBAF5059DB346B310D6B86D1D73EE79F830A5E731D272F58DFA32C1DB5101BBC41AA582824B3CB8B8E578C6120005E33A7841AA6D12834C1463B4268F6861085036F3CD55D0F830472EC2381DBE7C34823C15B3E722CD169D695976AD3A610D61E57B9C1BD75103787F819FF9FEE353209868C1554AD364CE1B953F1189573A4395CB315C7464AD7964A3E489707128DA575542BEECD502F1C96A3D34B6615E2F8EB2667771A46CDEB7C35C608A2D60BBB2E3DC79976E5A0DA616F226F04E28E77B0983ED444359FF3F0A9B7A1B32077A22029590DD89D002E3900968B5F6C81D9EFA4D24948C69B77B661C6EE2574CCAAD08244B45AD9D94A25CFAB528B8AA39DA43A3D5A1504FC10D5F0FE9C0578914D4494F36E8566D77338F601FA102666DDFC522AC1D2AB5542D1120AB3FCCFE155F8CCC641BACBF3FE79CF82DE28D56501C41D6F897CC0C4C9304179D8DF9FA3891840175961BC28415CC19E9B3964CDCC82418D003D92D672EEC1585BAF1F85AA7EF04FAD8B0838E05190736895EEB0E96081D94E110E06A3390BB11E57DCB459173731AAE4231D81314DBAD0F719CFA008DB1E236BC19DE2A234050BA20F4F7A115C37DC72CE140F80A3F29D13527ADBB93A02044D1D717A6E34D564A02BE9EA8086DA84B04B1ACB43B4234BCD19B50778B08AF8350883312C7F854BA0B605B27EB7622008FE9A3B178F3F4C3E9F24897C0E9C555B9AAED960153001DAC206C8A2CF36DEF318AD8EDD223816FCF5D14BAE8C6AB7E444C8A9A97D99DD512B152FE19E67F4ED4161F2B2B5DCE3ADC30DAFF7F5CF9B69D8CD0C65DF37121863A6D5AE9607550ED624F59E28C647647B82FC16C6EAF9F793B48B115E40F1CB7FC9A4E3E19DA16374E8AD50D49CBBBE92786BBD08D8AA9B65623E87A10C96AF0CCF278D8126E07E17ABDA09B35013B23080EC9CB794FF31230260FA1E766A6219A808794EA5A84740CA21285E2EC223238CD757AACB74FAD514A1343B0F81C1C4144A94E157E86E535192DED18BFD0786B5E38863DE3AE79BA67AEA4F3595DEE4EAA3AAA86ACA519090D29057118C87AB0C5E82FA2E5584A1D05F680299244C3867515FA06FB0D165407F805556F1D8E9936957A1CEF6AC654D730E1DF7FD40532D707381156E5684864AC687546223F071E31A6C873668AF8ED5FA4F60B1457CBD3A2FF8932FF4476147345C18125472F542B1EF55A3439D2BDFAA9FE79B0F9AF31AFF7831836F0ECF25890F79544D5A7B8C5A42B1B31ED565BE28A11147DD384C4188D25A10120858B153559070607EAB6E1115C90A4CD66888C0DC42CDA3BCD5EB1FA889BDFC39E741E0689E57B7605C6C1AC249686EBB1B34776FC77850F42AEE46729E51F318BF199EDEA02846FAE4488C5D802E3087165DFCDA6BAFF7C92068598D223E57F2FB39B83CB7D79ADEAE66E262B3398A0D2E81E9F15EA02B7ED8DED596F6E02C0CDEC669B10BAEDE96D6359A15565E8676FED381DC9BF0CB775E976AFAB4A99ADC6A2E2F9012D5954D1BEEBD71EAC29578C34EAB828419F1A85E13C65B1FE9983E581CCA898DB51286A154F389EC915A110FD55B7301093915F7EB8A04EC1F88E35BBD2DB2F4510E17F52965032CC246AA8E3252B574727BD86CC681CD381A31951D3436F5E401D0B61FA904B745B5255DEEDECD7F87E148035EEEB6D6E354365508D4259E48B3A11F5BA45F65E1076B24DBD289A17D244F55CF35B6E88D437B2A6B135D5F39B05D1EDCE241D399CC06ABCAF9F557DDD715BEF9FBBF0A29ADD369822D0B3E5C2274DB9849038E12424135A87B69B1C3A8B5C371F20CE8D16214BF7521BC0AE3C1248C2C608A5C853F7FC3C972DB0B75D036C63C1A4287711641DCA4DBDFBEBFA9B0B44196DFC5AD8DDBFD958F659933F8119AF8C213AAE5800F8B45F1BB7B7F418C92517DA24473FF51F012CE1F62BE2E4037E65FAFBF3803E148E1322DBE3D7794E5037BC74258FAB511A281972CBCCDBD57D0263D72EA7F528AFCFEFF63F3239351244B9B5875DB5E6AA0518E282C938FECDB8A957EFA02838CFABE23069ABF48453B2DB72EE3D414AC428C9F344B54BDE6FBFD0E7F6478E564F4A7733B4EFA869AF7EFFADCA52AED878CDC360109820DDE4B7B3065F8DF92A3BA1E9399D4D1D983745A97C9A722FE79F77FFEFA16E31962969909E85E37415035DB312F8BF957F0C471B537CB6D0AC77F13CFE10CAF9DD9B8BCCFA80CA3A53E9541352F48BC70ABD1768CA2418A3650CA3EA277B398D1CB449A3D1B6187E3A0D8D72306578922F635EABB75E2AED423CD307DCC02D38119E71DF66A48D6AB9971E91EFEC0EF56C75BA778CFBC00BEDC13075F059AA4D88ECCC134FE45F55A5C2C19BD958649EE213637429790437CF8B61CD1801E244C65A1850FB2C451EED371920EA5B6CD58FD1630623E04361BC4448512999A6EE10975E1E7B130EE8ECCD5FCD53AA702AB7286DF64EED6E376BA7DF24C465A554D47C6ACD61B0FD8A4E5BA5F01F1B8E1789EA284D61A2FEB0778AAB9647E932E7976F0DEF24B6159BAFA238BE6075991C593A5C3643F43ACD8D95B0F3B021FDCC5F50E702E4526AFAD8E4B809278C174B013DF147EDCE878C8171B0A188896322242700A50EC495E6AEE1C058E18E19341C87DFBA1FFBA4017F63D0AB60A90D0048E5AEDCB98248CB2A8D56673D47F57E9047FC418E5D9C01F53BE292F8EA0C740C065C6BCBAB40D0570546DB332398E725E44F22BB4EA693B389A68F450B5AD77C615E676731CA33550E58798B510402DF9CF1BC5CB32CB15BF68785A7CB45D84931FD1880FB9AF9210EBBA1F06FFFCDC72752AE4D6367A4883EA0816E6645CE1A8199ABD6289211D4AB8232BD036C71EB7B0FB1345760BBB9648CF24B1754D5AE4F1D58FCF45F964B5CC784B3D5EC3437D640254CB6BDADA4F9591A861926660F6DF814279E5ECDFA207DE61BE72D010152A6FAB97210FE6B3AD4C9710E8FD2E412AC17822C0F31AE30B3377D231C0E991E4D4FC9250709A6F2374FB538C7276566960924A4B3E9DFFB91543BC90AD299BA9A68C3FFF7BD374DAEF9DE876CAC6812869478E6D9837F932C918F8D9EDE00A55DED061B7F970E7AD6F013967BF7E46542C82C68B92101D77336B7FE854D746C9F50E89681CCF9B20BBF9FD05EAB55377C5928142A5BDFC80359F1F3207523BBDFFE1E3B82235981DDF718562B0428B01384B20347AB72190212F7B90E0987B398EC8F2CF1F7100B69AFD23A2D3A32DCD7BE3947C22113F1B407B012C3126BF86645A80D82FD5EE224C8A122215A3F55147B14073CF24F8F60F6BC80C46FDFFBA2622ED22FA86BF5D62FCB0F891DD6266A85E155BDDF78D166D90B66A4FC057D21CC6C8A85431858316FCE53BA6D4F9511F63A644E278122148E6F3CEA3E4B4DFC5D2FFF02EDEC167A2784BAD0F59C32C0CFAA7A233D06A335B3F662D5A87A169EC55CCDFDFA365EE90F439E8F60BCAFB5CE74BF4A423B10768A5781A526B8014CEE069BC246D1346137176071B4753EE4B05F0CA44420BC5D2F618A2F4BC806C99EED38175539BA27CE2F749227619F839B5E48D26F61E37D3C3F4F8B0671D2C4FF26F8E0A590D02AF8E844A6CA1103C21475C3E545AA67EB7ACF79031B8C07F885E79A63C98DCF0595F47DFA28AC64924A43F79BD6BC0EBCF1BBA3D6C5BB93026ED7B431AA2E4F989C98AA67E1697EFCB6589C1394C9962B2C1062417406604EC8B39F0B24B722C027B867F02D23BE2309CDAD226DCA1A20A3A6A4C486DE61D52F7DC3DF7F1CB85D38A9FCF950CA5F0B24A6172A859F9F44DC94E058800531FC10E0B67A042475D6BAE6CAA547598B22E518E687364B99729B4750B37DF67E6C3E3BDB6499E293793D1CB2ACCA9B40E607E53FD386970D415D7CD032D633F4B12F8EFB6B4E7F56D9A13A3AC5A712A4687319C843B642F53D7F68F7C3B25CBA761FCD987427541EA7424E702B6F6E8D4F7149EE39BC7AF524F918F029C522F0D53C4045E8E18D019906ACA19943C9778E68C33BC557BF295BF6F97E18721E677BFC6C2785D7D240AC8026095885F2D77FCD67EBBD4861347A0750B5F1871F8864A571F183DAD29C061C47AE826D40CEA2276099B057DE764052E5A853321E2AD238F28D9A0CBBA28063915F868A73EC646A127F22DA78AFAF98AE073BCCB50EC7DC19DC4CF44FFAFEE78DB9CAF8D504867924BE0E733C88E363A1FD0D6B062BAF1776E89CE2F3D2805B6517680FEE482CA55D601EEFC9A7350033AF017EEC3D46DBEC4619218EA8DC3A7CAD8AF9BA2D126C11BB6A44671B668880EA9211119ED641CD6D75E61EB40312FFE0CE5CFECA6F7AE20D2901FAFE9767983079A3547D6D2044762C47DF1D0617630190462DC4B27B5BC859E761496A26F4D3F961A2D7CAE695BC90960BFCE07C78FE554E675D7FB839A5E8E7AB1EA8F8F1B093C25CDB6D316907F067B6C4AC71EA7093FD2093C8DFBAB0DC1E8356D47DEC93E661B1902A21C6D8E6B61083840186E50276ECF5CBDF987733CD442BFE2826D7A3C135623CAE451ECC228B9FF71643D779BB1CCF575B214FE7A34B457B855CB68F13BF6243824CC3E369C2B6CFC61DE8CF22B0CC02BE02104E7A61D8FBFB78E9628BD19BA539FEFB33C36B07931873CAEF447873118D8DCB3AC587A8896E3008C49F89EE759061D71228DEAEFA970A812A7784DF23D7ACCBBD9253C1823A81D8206E317DE1F694DB1D1F253C46171BFF1D200 -MD = 1C2D5CE292D828E18B3FC8EB70A91A86CE19E112A282047911D66770 -Len = 31784 -Msg = 03978FA9DBF1EF4BEACB8F58D4C82E29177093520CDD8F3AF019FD34EE23B58966BD793D8783AE53B4D00238B833EB41D72A616903A1C4D9720B066745CE4CB320967F9BEED566903E1DB3C3124B64072CE048D2FC4C1238F909E152F46178AD0D597299323F58436BA3E15627BDF962343F862C766379260994B71B4A5A8F54B90B0C5A6B6B6B5C3C54BB7E4112EB7C86C4A66B73C3A010A57232FDC79AF02BEAFDCB9799EFD434A9883CDB7342BC29BFB176D2C667F6556AB415F54821CAC1D756A1C3300D8E663B2418A6443ED47965B05E2F2DDF339DAEF0378315AA0C55AFD9C416BADFE090E516A1326119A97BB8421A67AAD2051CAACE47122A86DC092383EB35BAE836676A238DF813E6013AF9420371E7CA95C9DA9E77202A74B0240BD97412B7B7BD1314F2EAE0F1BE897D7DDAE8CB96CD77887589F66A9068734F9C0FF7778AB45C1A59EC7DE35E6AB5FD6FA0FE055474CDF0CD1F27CCA435A66291DF8C1DB231E1AD3B38ECD9271259C770C69ED3622A869089CB917692F5FE05BEDA10D6765B15FDF9AB0A1F5D209CB5766842A06F6D8A298AD01B735FA4FD6300E46B0F54C9BF47089274DCB5DCD0D14CAD04ECE24A97196AE51176D4E1024487C075C8853C9FAF36291B9AB7B8853E366C9079544C528E103AD509C2A486050153F606273B7252691E83BE3EF689D37E7048396C175C7E83A5A2D45BB48FD867B01695636E3813914A7715ADA04CAD838DD98D9448935C004C8A905CAB06B4D6B3162354531E8AA74BC58F657070ED5F10E8559A5B52C3EE34441A0003D849AFE0E6D6399D79A6B6B06358119BB8F658685EEAE9A392A6E8D558F342EAF86B1C833218E0DE3D4E69AD825C1DBB966E9E13812B6416D9CCF03650F1FA85982EB37CB926E472634234F94BE6B227E03AB27A60B89C760F8A9B8C9AE8DAB4317627644AA2B1CA9966C446DD597DA367A63A30B1E3D44D1079598F235574202CA6F64EAD0DB6E0D1402097866B147430BEB0C6EC3EBDD02B42610410CECC3CEDA09C9CCCFAD4BA95C32F266B8486843FF7C854BB8D0E44E177CA294DEA15F6A865266343CA1144A7D30BBF48B0B4B4FB48EE2BFA531E2379F97E5D785F7FDC24270E981F8DE2DD045B36D6B2CE12AB7909C6CF2856550D600CA99422905C36179C61876E5C763324522527A2BAE8B6ACF35422583C881BE74D943DFACC1C25DF0B16DE5EF8FD434FC3396FDF0DCF272ABA5516A8221C29F01D7DC0CE3858F1C556DBAA8E5016FCF8A4E2BE7B7DEB5D388D617397D67BB798C75D7FD699A7CCF1E40192D636C1AB19CFD6297466B7067D2C434DC1FCA9215113A2C8CAACEF0E294282347C650E41E376CCFC3D883EBE1A6096FCD274FE72D408AAEF73CDDFE8573586A676A942A80DDFD2ABD860B1D6E6E77E65646676940750C091C0AA3710E3E3EC5104CCE4BF7C65CB32CB168E0AF7F63852BF6E40D67619C0A5769ACC963BEDA482A060B9D6E1F51B7F244B4E0032E1A6093A89B4BA1AB9FC076F25D1E55F6493F3DACB5B9A6E61BFD62967ED304518393D3D3DC5075469952368257851FC78C85A2039AB204FFCFEC5F140B4AC999021E53C49C0B5B7B9F95907CB6BBEEF40088AC80F4A2CAAAB8105CA5A04123AB4D83A1FA1E7738AD2590E0838556322020BFD5D603529435FBDBB951B76AAE8A9D63E68BA0779F197D9E50FA31D112A5CE4AFDE8F1FEC94412DF44D78C9885FF678140FD636AD28D9028A6E193B5DB85669D85D13FA7FF5B9294A0423B3DBCE88454BA6C6386149B471E5E20E5C39F5FE85869D0B23521DFF667E5744C2E0C273A9DB06405E95346A94C3A94059C9C7A23BEA476FC1AFBF91C00718B844BA4F3AF815896ECDCB58124D1D0218F292B65D152407975423332A8FA7676ADD341D4BB8F81086C417AA489C4125727F42CF52DF3164EA72886CB8CABB7872E3898CC557EFA6BE5F7431E99CCDCC2E087494DA483751F961ED7B60F5E7F93E10287D686DDEC675071F5DC0BADD6F4FFF07CB27D251FA41582A4F708ED9BD77662096E0F2BE33C4375BB51A051709C4F41026EC22D9759A829D654F166DA6BC158D076E753F6C004F3F2EA5562CB65ABC5D532BD3D782F9CE9C6006A0EBB8F09EEAF4FAE40A777081BCA82110CA6D3FE25B56589BBECB52DA668B22F5FA38E1684F1868CAF018E49DBA28C45DB86FD70921AAFA4E56B589A01AFEBDDAB78436C050A4DBF26AA82B7618AE1B2EAC7FD10D2D3C974531760AC0ED2AB4F1D42D92B0E445F32A6FA697ECBA299FD061A29A848EC636E0B7F00E6310208F9D21D229CCA2505528AD91DD22E4EEF4E723314CAC648C26CC85A9F68008763838025BE8AA598F1E43331C3496095BC0C5E0399EE1CC56AAF88AEF50716B37EB156FCBBE1B10C21BA301158E422D63116D7DB8C6935701FA7B3C2ACE9968A81F9063EACCE5794A255DD50A412D68A4D1DD12189DA612C293AA9A4756ADB25B585452E6F38479D63BFFABE4E87EC43956684693025FF59087423C09E8DF4BC204F89AA9C0769B32A7004DBE9F4521B993CA92945731CAC800EAE738FB17432BEE22A931952D7A9342E049E5C42207EBA15927BF1630E03A02AEF6DFE2F40D5A45F771000213F64CC07DCA61C5B2A68DFB38E42BC08BF3B64C146ED3C291E5B94F09EDE90D6C9C6FFE752AAD17F9777AA86BF1A6B5C4876CEA631E13443C00700F93B4F7972AA7FA21173E7170DE5F3E3B7F6F755BAEEEC9D880155A640BE61267CEB05CEA102C944AA45C6D4023EA258737DD752A44B27E2B5C16906156A774DD40D47D13E221C27EFFB4CCE100B3EB5429FF115B27006E338F5FDF663BDC90694D3253C11A24BCE40503BB04917EA4FE22BA5E8D87837C344C2FB17EAC5487AA7372EC202A6BC81D80DEC352CD090C040F1AD33859C02B7E21381BEA28FF0E971D52D9006424EEDD72A92951DA1FE3C48B45D51BE8430A99C9CA159093DDA75CE2FA8ACD7E06A31A1CD3A60FE33A241B9A649FF553333B9C9CD70380B494A731478698D833B89DEB3AD79C5FA80ED8BB03AD1D42F2C8D2FE4C457A019BE95F267080B32038E55A57E48D58044ACC691DAB6D7E17BC629E78EF7879BE8D398C77C115F4547F32B1CFA181AFF8F3DFC66C6E9A754B64BA932E700127476C590401454496F62742B85C17687140E13222512C369FA0825C07D26E5F01A774FF7A755D4CF17FD7F21DED83A9FEE43ECB42D4498AB1C3A937AAE69219FCC7C20780CC5AE86F969FAA067BCA9C6C3C7C866DA50CD1CEB255D104A314D9506957782FCDF1DBE03945C36D38A43202D7B34441B82E61E72AD401355FAE7557EFEE0BB6A90760EE54CC50E39A844E8F037FC9CAC0B055F71DCEA1AAFBA7F0E770E61EC8370159F8340C6FCB1F37270E4A71CF1110B7DA399FEF7E4604FE7BC41C71F366A451B4CB53CF4569C8C9A8A19897A40BE96A92EE6BC888E8585832DC4FEAB31A40743237BFB0A346EA90ACD848CC648B9F844C606C018816CA0DCC189036A2CFFF0C41891BD4C32606D87D67A6EA61754A150BBA6FFF9A0E57414A0B91CFD087955AAE7BC4FDA95A4499FEDE1B4D844AE057045ADB7C86B72DE4B25FAC0995EFFB5CFAB372AD895796F9873F5B0B954583ED815B4523B3B5A140A2DDB7A5AA2B61AD8D06BB70EFAD3EA237F6606A5DBCB88F46DD75AC8432039090AE2458672DB7800A7514A226516F41CCFD08A1F0720A77E5FC016B1B927B828784E421C0C9E04C45A79C2E8DB16E7A4E092D73C5124D2BD1463813C79581AB468E2D37DF3925189833F8B372838A9F89AEC3587E2B19044C095107ACD435B9340FA49ADF11F105D2C87B9F5AB62E382EB569D79CD8678A5B1A1F7D00F38031694EE6AAED223BA123E8822BE1181A7BBCE5DC90F8DF9E3FBAF96E4D82B388889F2BCACDD81ABD5B777D78CAB2EACA14CA97281603E5FD0C6708CC9E223D045EE2D1994B5DEE248390FA01CB4047473312F14293BD9F574535015A5FD0D16FACE6B0F88FFC949AB458A2C40FC9806401BC5E917EAFC56A8DB323C1FBE6A57CEEF5E638288C0917F0BE1B8D718BC0E7B2B96E461EDEC2D0C53B481845BD906A972336DB93DB6499D27B9B2A5CADCBC94DC093B8B11C9D8BF06330D15A223236D6E167CEA457C46B02BEF94A936E0BB98E14C8944C053DFCD7A243E748709A1C625A38EB156D943F12917AA077DBFA57B24E26C284509D534C1451F425D5D25456787F97401213374EF77D6C86BE8E0D311543B15CE7E42A152FFD10303B50046BE07464C9B99B51018A42062054DD7654193E81A05909CA7BB28C617F064F9936C0D3590882F0C26BA89FE6D2B2F50B3C67DA8CFCDCDEA6E600CDB6B09FB3C170979BC9B1ABFF44EB22E66E74FCE4FFB6E5B373F2F10B0CA5EE4C621F21F7A6F863FA739172C135566B55916F0BCC6EE4CF0D35B160AC8A1556E4327199DBF53682471BAEF09FAB7ABEDF518427BAFF19F29429C2DFD9587843D5CED12272A80B17A5FBDB1EF77A510CFFE70B7AB6F592763418AF4CB555C080D9196BD8951A2047046D8E1ED60A67DC63E01294E734CD77F430AE771E72A29A9A15F0DC10A40B18729173A54B62CCF0CBB5B68604431661B613DEEBC200D0F19F142B8550ECF256DCB2233069BCA839365EB8BA87204F83A8FCA237B11F1ADA6C44EAF2AAEBB1B8B5FAEEBD2EFAFC0764175AAF9A9A9620F533C26CC237B208AD6789CA6F60B39FD5A0E07AD582F70111C25616D0A3466769B3E945FA23DCFC7255C03AAD09977EBCB046707B6AAE59EA803CB56D223816F006B3EF06FB67787BB09F41A6B41D6FAD04ADE014434E3CDE87F5CFE8F14D9822D990745B26A6C0BD49A70D340C6288C133EE43A1B22BB1FFC3948F1FB03047CF6EA604067D33D00F3A1C88CA529B7B515F3FECAA3BF1CF5686E50E55A2C3E4176E7B0280132A8F21698137745A3CF2B5D6D32EC91E340CDB6328ABECC4364F3285D1FB9DD502C1D3A84F47EE09440899094AE539710CEF433F066D3055A466FC9BF5803BF92BC65CB5E0B1ABB4985EF85B00A3AFAB4F8F59352ECD7E8550BF46B4D9AAABE858766751EF9A99889083A2AD6FC178D6B142E1D9E002E07430F27CADF6481683264B1F6629F9E186A16C48286257D3B35427D765A12E918CED157CB1E5745713B0ECCBE529C7B304CE7E67CEB5431B832019995F89DFFDC96CF6550FE056AAD875C8D37099EDF82D1DF1026D605CD939985C372F4E95B6AEE386779527F79AFC24E18750A4EF0A93E1E315C09F785C3100FB43E44D6248BB7BCBCD29A7B46BA9BECA5947ECA2F5D7FD12F588AA30E2424FDF0F202000C678C9AE598345D6AACE4E29F85731B775CB49E7517E38104B7B287DC3A490C2E30D3E35AEB1E6D35D2ABC8D450D07463E3E46B908126DC831F624EA010E0E2FF87D7F4793C8F075215C29D45396F4A65D490DC1C2902BABEF3AB1D2FF8C9A24D9C5956C9A925C7B88703C7BB8E2C6F3A1BD6FC5EA0ACB4EC669C0FC03E974389187D97F49D2A6643DDBE1B1AA9CD2335A90741EA0BD044DA6FD28E78D35992B5B1A851F2CF5D9353A052CBF1E57B9782AB3620053C89D -MD = 77AB7668832A567E4F7F2EF3213C599AE93A4851EDA56BFDB814809A -Len = 31847 -Msg = 8DD7B7BEBB5E4700314578D5DB2A77AF0666E043BDB7073EB137A5886EA3BC329AC5958370DE195E5BB1C10B9E405681727B4B881B36039C966E1B9F9DD4E530CA4F255311B9163E438604FD27CEE0FA55B8EA1C1B1F8D82FF28ED64DC583E338C3C41C4FE1844BA892E2164182A13D75001F73BB46E4C5E17D1DCFD956F9A291DB7B4F25F9E60920C978AECBCE6AAC5C8ADBC7A9B6AB891C638B3FD93CACE34A8E67F803C859D06D3D63AAB811EF8B4259A0DB3989649C20419D7AECEBE5AEF5F454329A8B79896CE08B7E7BAFDFE14132E4233A182713920B2A68D30B8A4E88B9ACF7D6A7607E538C755F2674541DB68F10700CCE015206540986C4C4FD05D1FAB15DEA0FB68BBA8B20CB1271A85FAEDF78B1FF1862378ADAF5D3D51430C031F118133C87C8C58EFC0E15829278915C42BCA270D6F64806CD67715E3B3D4DF2474C42A64BC48E36069FB1AC8ED9FDE2BDD9015CF6D8048ECF5436077ED3EA6A91E5AF96540C4258DD2D281D69ACD371D6139B4B8A4B3A1BE00D15ECBFF02C1F87E9960AE3881ACE4A12BFC7BC6E1D8201764DEDB14C2241F9718825C661D00A465F5F805198896C57E2B41CCA5AA3BD0DDB3DBCA2289B85B459C885F14334369E1FFD41E706BA2969C27C279790A3C8119D2D407A274BD04FA05BE3BF79E5F4D7BFF7A0476BCE3F817D0A9A58CCD321C56BDD972810E36ADDDB91444A98EB65CC46FD6E95361144D5A3893D896FEFEC649A19C975CE3E0D0D34A8A9BBFDE0245B37E82864E455150B804E07EBB347E193D4E3B614906C55B8E47959396074EC77A74BB48307E3549484831AF81442E374A214BF5959CDED25FF81B2FEC040AC33B904AB907BB6FCCEE3E399F03A1C621087C2ED1A638BF839E316F68AED0771894DBC32E41CED12CEF3877ACC593FAC4CAE92D8C3CAA2620BD946FCA1FC51062A93CF23F627A9E2E8CC09AAE1229A78C790575EC7C5E3D4914A966ACFCE6C8F8F2FCC9954E482ED74A6517C93BEF4EAF34D7F6376FEC657A1116262C8FC45E8E5FD737AB60E9D08A6CAE15CBD0AA1B4CA21487D4B90D7075A60232AAFBB820060DEBC9A1CAA9B4E63167C54E3020F5DD464D3CB1AEFA6D0550A703535427C05E284ECBD98D53738F92D2B5622DEB4968ED64B204AE43A5F6E4287C7D5B2E1D60ED82C4B8A70CD2F54327607B32218F73DE74BF5FEB821E16833FAC345C5E2008BCB7AFF3FBBAC49A880696C2EFDB9EF1C13FE73603EDEB8DC446347DF9524CC0424D0778DBDB307F21EAF42A55BD30011ED8F0B55C158C6F7F86BF9939F91D32C1AB50E743857F4C34480B70E9F6239684F33724289D7ADDBDE1B2A797C590EEB44A8627C0251900A2E9373E477ED13D86F53D0F8E357512A7D127B07CAB80789E5AB1C52AFE90FC4A229FE6E031A45DB050A227EC5C084C44D20D25BF9F44D4F05313DD17AC8B376A5BAA101C2D78A79A58F4C7DCB6DD91159742F1B4359FAE8C17804ED4C0AF3F5F9075A41D1F09024DDAD8358FFCB524A3CF6796994FEC2AB45D83FB301265BD569DD2B21D638D93581512A476E26D4258054D16E315029B8A1528E7D9CB4F69E5A54BB2A3504709BA715E12F1C25F7C33EC6A36002B7D16D4A021C08484DDF1E97F6215C3932E14D6F2D461F414187895DF685092DAD7B6A0CEBE87E2FCCDEE9154B8F2F338F2E542F0FAF512BC6D2054325A39947EB56F321942D3D9DDE57FC074AE4685D54EB511C5BCF6EE126257D5F3C7B56A0C6D478F761E0636FFC5DC59E9F34535DA93F56E858FFCD25780330C353860944869434F14E462BDD6B318C38691F4EB64DAE783644548AE496535CB674D4A48DCC56AB09E3AF5BAA9BD87766F7CE9F2740369759902E6BABB72B3CB10F8BEA23FE24C3B3B3E47731F65C018A756F2C41C2D1E9F4A8C65384CB7FC5191BDE2EBF427D5D10BE6DF97BF5D051806F57E4090619A9E329FE312EF38993E7BDFCDC58E36CA6FD2920B0192DE07F85408903356BE44A6F75CD07E233FFD3B142185DEFC6ED501F5C64C7EA8397B08B0BABF886105817B9177E171EF3F7CBCE928419F6C9EA366BF884BB94115E373493135322D2DCB02C80896A505E380401B698B27A5B9AF3E2E79D4D8DA9338EA1B6056C3DA2AFED4A0EEE1C228190069DFFF9D428A9319D21AEC4D7E3153B3262006A4225CA3AEBEBD6D5A1F210BF9D0F774C5B4C7B04C5F010CF6A2FA6E4872644DD58A4C99C3B7DBC03FC5947E7BDA00E16A2770A60D31CF277A370B6AA4CEED14F7D555F17606080862ABBCEDDCA064C8CCE79F79202AF05AC9EDF92B422F06F598EA12726BBD1FDA2B915E008B6F39F88AB76063530DC5D3A52619F08EAE85E40EC2FA8DEFD83D687FABA476A6F5059C0ED7386BB77042054244A149BC748C1107A7032768510DC1EEDC90B04ECBD021AEBF9D630AAD635CAB5EDFA6A310643423881A4ECC76825C74886C97671057EAB7A28B4FE20C8818FF5D4DC1E8FBD1F2C35CCF6894CBCE642504001163519F080104B9C8F83265EE335E19915FBA3F003ACB0B3EA753492986922B6CB5CAC8E7674D6FE1099EEB572CA089ACFE9A4DE8B6C59ADA9AE2123642C832693D5E0BA142041490B4BE0DFA4286024D50BE5A7E13FD9A931792D4BA98FF6EB3428C262AD9B173918814E03CDE769D9D532F5E606BD9F90825A7B4F14020328B9D3C7A42E9D67432F2AB65F98BDCB35711AE14C77AEA01072AC6FA42836C343D0F96809DFDA70C1AAA5849FB319C45DF5455B0ED913495FC4FFA947CBF987E5EF8D9AE738992B34148891540658D39D225E60DF569132A8FFD7DD2C8AB5155A8C60A7BB2B9785F42FB6C9D355EEC0F840ACF7DCA43A6454F605B19B07CBA2244FEBEC7DB0ED616459156EF1A3A437B29A3C51ED8A3EBAD472BCB8FD2D60FE6E9B8A52FADE87C4347D2558207231D36B28D03659B2423D6B10CD5B0A6E544397E8AE96C35BD21A91EB594DA8FAF208531A99CE04D8C2D9B6D6E6D241A23951D146F8871FCAFF6984A6CD3D75FF97EC19F9AF66232F5A8EE765C586FCD55D015D23D2EC43A06432C0DB3AB81CA2EAEE6122805C505A4922F9959410C748D2D6AE2E8304B52BC7F5FDAD0EAB69458700A719886409F51373580F9071E9620735E7E21025E3AD9FBA822402384F3334D6F4D3141DC290E17C6BCD48AF5ADD8A1ABB220D5E7FC71A66CFC2D50182CF3DE6CFB7651FEC8678E0CF9F9B414F879BAA9D6203E272B7B54FA43FB08B95990C470620F62D38839A7A2BDF84F5043B819334412A115DB3ED3BC831B3B05CA259EE3CAB9508A742C683EEE13D426C2F31AD7E1305AF49757E69BCF3B91A282A3DB8739EF8DCB7894CBC6CAABD3FADF16ACD35ED0331E9C6717B5E9027B86EA1965CEFEE1D5D6F3C71EE25C022BC87456537DD4BB73F003C25DCB69280F9DFB5CB9100312F5D629E287C4C882C02F749DC8DFC37EF4C481D751F2D2ED19B8D1D8099C842D0E59135E191D9FDE54A0CB25DAE23122D99F53CA285C647659BC962B96DDCD0B9047E5BB5F38FEFB3965A6865D6168C1FCFE22B7BE8CA82E7EBA1EABD3D121D6350F335E6D988CF274916C14A86E36358BC6E9CF3136642714002753565620504E9A96AFF052E2BCBAC3A8A235B49B5D8D47499928FD8818A05F813EEF82AC9002E86010A4DE5279578A2FF1D0CFC6A614DC5F00486EB910547FE1B26236655B57741531263013E984AE79B01732C9F84C65A535524E4FE3E8A582BBBBE299B72C06131F3C6E0C816B7C373F35DD5F3C2F40557B02155C00A8B4D08724917AF6D5A9AFB46F09CF063B9BE7BDB1816493F8DAFFB157813EAACA9FCB5C99506243C5519AA901A7D7A8C9108996EA3834EFC5D56838CCCA384F90F820C296CA2DFCCF9014F6DC7F3A0C41DBB0BF576CA57AFAD378BBA35EC0906914EF028111E3B7925E9D137397EFB25B41F6328011B4E8B72FD50236189EAF0308EFDE273383C59660AC31E1EF7DAA66C2A7F89E4BC804B325CAD3175E84D6D5AED6A17B1FC3A45F3A6A2A0FCC06E44399C7C9D9B814BDD5584C587B386EC22886266E8CD246408CDE1B6755674CF86B9D28A19EC938C590F09522098AEB6EE722B5CBBBF0563D859EA53D7B84622B0D1540105C4448575F0324EA9A0B5AE5D214AA792342DD49E6E7ED8F950B11EB88C8124343F69A71E52F07A81BF64E0D7857D87B5B339DF2836350BB55E8541BE8CE70329229AFD14A159A4F3F49D0F010A8E901F19AB4573F08C5407C347631BC29D2035F28A2D098DF0B308C014928EAEA3D32B96714647E090B54DD612565C0EC6C2DFA21EB623986FE4EA82E274258CC1BABAD357F39151D62340A88E1993F6EFC24B928013CEEFD56F31F246C2ACCC19D2F6627CD6166F68FB6F2D01EF6CE0CE38C5EEF92690A50E9C54AFD85626E22B23EE4D9A6EF0EDD51532A1CE571A2410D27FA57040CEDE812DCB394158AB484D213C4AA84B41C8AFAF2063725C38A660416EA8C072D8BDC55BDCF1723EE41B02E20D1D15B4CFA571156DB1224033D6C9073E5DBAA9878E36AA06BF21316FEC1E5FABF40451ED2AFA3925F91BBFC89D08BE4314101F5A7CB550783D7B9F27F17B706A18DEB13CE6A145E61692672AB7B600F781A60912481E9AB9023119E0DE2FBDDC7BD207D04BE1904D6DDF2FDB53325371CDA2838E902C432E711DAE7A9EC05B5F32C5CD02B5C8B5C8D1B64539B37AB887F0DC9D6AEA7A3B0E4802AED951574541B2CC55F52B6CA65589F48A6F867C9E258145B149451CE96577C7D64B4C6F7A8401BEF6EE0B9A9B2A89D4E57CD8CE0F014E06408CDA6F49A535EE29CF0DE6D5B8D77671E12F22B68B89BF53E43E9140BAFBF690BA965A6601A42DA512BD2DAC081CB0C517E29926CCB342FB7A8022B661E86F41F2D9EDB88C1BD9F6B7C44C9F9AB7E9089B96F9968646941806002123399909B37B7A9690081D2599178C405132A77EA1CDC9A420A8EBDBBBC54AD6BB14086CFDD0CA28639C141CD08FEA1C70966DF8F2B02497858EC88C146C1961EC7732F3451FEB05C769F729170C8CC8537A31B853FD627EB674EEE092B8D7927583DDA0ED1265800C36167F039D05F89C8114FC07FFD11141D28F06DCC87874E9594ED6EFD3F897949AB9A9F0C7E421D430831D078652AB19FD51A58908FFB8A1F3CFE27290C2C49756FF0FD2347A50A5C851383D5AF2C80B3FC5A40F78D9CCE044833B2BB4602E38FC046D838EB946CE355C79909B0C17E106840DA23400DB8580BC8D3AB3668B8ACCB5CB304C51847B85A9E6F90D25B4BB1EBF5BAE34C1ED001A79AD821E4658CF5FCC6503D5F07CEABF4257C804519358ABCE910B258EDCDE55F616165B32537881F4E59648ED068B37FF4FA6C773BDCA78FBBD7BC2771F39EBFC5638BA762D3B38ADEECD760134E19F0FD94ADE5DE4D80F13F230407BF8874DE6FD6EC4117F5A916922F87AC063596BA3C93A31DC876F0BE8285746FB56CF8305679F868C844AC502DE227CC618EAAFBA0BFB9B0414C8C3598DA4F72AF84B1E8029AD92ED7A528F61475CE57BE497550E4C22166406859171009D6D627259134B78177E40D9D7AA518049F2ADF2F328950BCDD0D44A77C -MD = 1D2353556B10434539DF2A0AE8A434B053E7C46D5D8BB9D63F4456DF -Len = 31910 -Msg = 386C2A3CCBA65864A897A7D9BBF486063FDEF64A8241F33D1283F31A32B917EEB1BDAF1010D8A23E4EFFE7D6CBC56669540CDB214AEA04F695C34038375061E8C6F4522ED269C6A058861012F409A5FAA22349BD5918ADFA91E8C04693800E2D46F8897BD506022B2BF7303AEB14CE45B9994779D77E0B5FE5E86E9AF65B8CC788104FF4668642E63DE2570161EAD6AA07BBAA4EED21C410EEA65E6C091982572E326B2107C2B61F5EA756BB1E6F78224CF78F9EEA11583D4462340BCD71B7B26A48426F7A103D0A9C761608B5B5BCCDE284C1C518BE5A80A12A32226EE85A413C26AEC514F3A357E525FD6009F0FA3F9EEEF57F2C80BCCF4FCA02D43764FEAA61E5F5DA016B11C70B66E575556C480BFDAA58B26AC413890FEDFE21FC59B5B157ADBE434497AAAE6F3450ABAE6891DCEEA0E64A4BEDA42274D04BFC29BA1C75CEB2DBAC43D1DD7774FBD1CE06159872F31D5AE091CAB1B548F6E7B05B83975344D9A6ED84096092B160FE96601FF91823E7318DA273EC0951E88C302E55C297C29044E65F1FA78CFC797FE90D82B9F027BD235BF56105DA4A66E96CEA314D2E4671A1013DBD3E9C41AC0ED28CDACC98E6C4B011DFF1DA9D13989712DE167D8A93605992C91B34F2050355EB9E8387F9127194057C6A88A2F8419ABF2B11688080B41AFAC17262791956FEE0F5DB5357036D409731E0D1046E412B7051D18A6E931697814EB956D3731B3A13A7D6BF7CE935F7EE7AE5B15E42987F7C5CDC2C0716A60304229B691AF8814EB4957F79DC78DC95D562234547E32FBE394A76D4826ECA7D1C4F5EC33BD862917CD41A0F99773D188F80C4326471E6FE267B5801697505969687B14B050BC8097BBBFF83B963E2DF9357958AB71FA3BE500E3AFDA0A1A63B1D276E63097B0AAA0D887491351C2B2753CED8563EE1BC1CF0AAA506733870B5BF2460AC748B1FE45824C088CDB426F495D9D0A2507B7748A8AF933F240C6C36A26226CC5621463664B8A30C638A665D16E618819542292102B4FEF207D216B253FA47D75BE7E8AD5D78330D27111DB200149378347166080667B4997B8995B74D07CB015A39DDFA6FD4E6072333E6B5452E5F0CEAC60702EBA4A2E8C632B1D2379BC3A7B7DD3D6D61217233E02B30FD427089803CD3F021844021BB0DE91A141C86667767E51AA1938B82FFAD38088C14B1CCBF08356DE2BD55542DBF19DF1EE5AB67CC48160A05D1329A8E37DCF8F3DA4688537327B330C0BDCB8E8D8C879C54597B946FAC23CBCAB7D81B935EA90150BC1F9E40CEDFBCB970E1978F7300EFCE1E3D051B0AFDE4DBAD9ED55147DA8DE6E66A6C6758D5FE42CC38B494D49BA14F991B491326D7A9D4FB39C352779606A9AFB48511188881EA031C1C8E65EB401D349DA00636B84C6E891AFFAC79BE1A67A4DD27A93F1C2BEB0D274CF9DDBF8F2F455C5ECF7BF506FE16ED8DCDAE036EE3CA53105224D2BE8A2053FA4926817DE8739FFB7C66C5109F59F4093BECA507BAD61681205FDEA46D5675F4A504886525BE827B4A34311909DAF3884BE370F50AADFC8E512E64CA6FF5729BF47EDB1ADE6654003DA2F101E030B7EF38E2186771274C6604E9E3132DC88A64AE09B78D494F01C00E0D6B3ECE07125039907B84DAB09CA9A2107C23AE0D89E6A5929DD3F851E38FA571EF9183472EE4672C3F7F9D5F043FEFD92B3184C9B452E62C825A94EF922945C442419C42257AEE70889250D66C33BB20CC9F7BC2D8F914EC621D3EDEBBBF1330AF8CB7D95586E884638179BCA2EC77E48530B639F2318C7534D22FD694586E0254BEE56FB3FD1ED1CDF3D6053CEB99A040F51ADD3B8A82ADE46DF788E278AE50EB5CFF33F3065D283854FA2B9AECBA3077F43DEF4B1E5D2B665A6FD8958F8D4C53F2F8BA9623BC3B74B06F961A322D94F85FC7A8A78C2D48A0FDC76B415CF02EA6CD12A3E35E50DCBC216AD32EB7DACF921808CA5B290E80B33B2728E81B620B13A0319D7C87EA9BD0F737C1B281E0B5C8131F6B3661119C0358A9D5CEC4384C37309DB496E2C02DAB9B60DBFAA423C660C4D888F791D41F3CC9B30B7ED51935C13C1559827D82AAC461A422050B02501E98E2AFAE55D726A6708CAE1A0DFF4DA746F0F79EA8342651B0D09B2BA3BF9A4A74C3D8056887731269DAE3F95B0525F825B3DF613E2AEABB650C9063091C22E5D31141BBEEBB22C5FC37321C87008BD0C825A6FCCF09AEB70FEFF116A0E066AEE09B9E89AC6230C0312877C6ED9D259B2EB771462B1C7B6F77B27583973A7F025D3A6708A2944AB4DC8E278FDB4F35457EE123D10CB1D91D483613839A50240406794E5AFF163C5B710CB769699546B3A558BFD7CFBD1F5BCD819808C9F0B38ADFD46BB853065AFF9DE2C7E73DCFE037150DCAD4CD2523DF5CE9E9B2CA04B012AFA55FE015416006261CFAB00A3AA473A5310E28CB8A09E707BA64E99251E6867A3DF6435C21797085AEAB22FA929C75175E3694C6ACA7B67B9BF053727B4A2554340B7390AC3B186056F58F218AB3BB7AF37A6377328BB47AB51AE4F9008341F70A3F141D10F2447D5CC79A4BA7637F20EDF0447415ADDAC8791D9A2FE0D61EB100F2E581F06C5ECC738E44C8327B652C160AFA322F1C774746057FBAE74B8D16385FA5FF103C2E4032394F13F145358499EA0DA5C81AB0FCEDEA117C9FBBCAC115F44C2AF19BA9C8CF9CFC54EB367F3FF22EA10C006E86482F1A27B1DFF7C28C364A203ABE91D56F27F3C0B5040DE4ACF14E37E71C4B143859FABFE7C0841D3FBED3F47457E6BC4F423BC11BB1AA71147EA05A0D1D8B21705A82684E2501119952473B6D1FA9857687C057E2C0EE7D557B0D41FE628586B2C6DE796DCF0F9ADE49E504CCCBC64B016D8829A612B667B134D8E21AE7BA2890BA3C601D957E5E30134395F2CA540413B7AF5CE4E070699EDB837FF5C483B65AD4B67CA6E891013E6990AA1B22AD74A5AF93E5ACB52B3AD3B70FDD4036344DEC2F81DB8158CFE3E2C1A80B0E0C20EF16FDA6E805290FA82AADC64E543F5F22BBAB4B7157DF4E36116CC47D353B80530D742A3C4EA04C7915032088F416397704DE573A840EBAF5FDFBE06F055C813B8D3FD0C5A5B2B4D134AAF166230F437CA9A1A014EE918BB3DE20992DCD8BC2A67151219EA1103C8E5337634B36A825F378678BB049D64DA3B7885731B1A859D2CB8473C0326F3A12CB3DCD446FE0B913509D4371FEF50D5EB560EB2F86211FF6BF608C6DDB345C59F3A9E653F6E0E5122C74731C03721C601CB04478E16B57C494783447EA32BF42C9995A11A9FC3E1DF332F86DCC98B5E32D4A5769909E6B0FD1A885DC5E8058A887694CDD08A2087B67DED9730CC01C6A8BDC9959140EEF38DDC8BA305303C244BC2F7B2FAD0AD0DD5266CD9814095A415FF501AB459062D3618AA8E830605E2D4AF3A342862EED0BABFA407408FEED0454353D86D9D1B0C697D07BA89DD065923B98CF83FDA200C935E445089770C3EB0CD8D99E1C8E784C58252107D7B1531C7FBFD85152E91005C19B2021434F806BFDC55EA56DD6B5089E65A644A1F4F458DEACD84DC1ECF97894B7FBA11947669F2FF0D023E0A894D7975639092224812CFD496323A31DC86901A026DDE36D76036307ED762EEC5AA085E8DE15CDB3A97FEF907DF5F420F6C1A2B85D3E8049D5D822C30269065A4D4EF83E8268EA7B193A62C17E43A9CF40D34C3C17F98D1FFE3C389CB43A6B3E96235A1B60CBF97E0D224486B0C1AB346E0157F424E47DED94DFB690E77937FB7EF0AA4825FD361AB71993B51E188413C6C7B7F10C030E08A8EC017656493DB7C5DE4DDCA28454FDF219A3AFCD999DA4AA02C25E2C6A0FC9FB0A845E24C000E963D7F94AA022667BC5FAB633AA56E0566083275F6E67C93D29D70D3CF614A7967A9680DAB12A5EDD1A7E6551FE3AAA8524F4962E60B8165E2DBA8060D32A245AABEA38D922BB56E227191FF14C7A07C5E01599A010BC19E52457A1B57A7195B7B118C7C8E8AB701A6A29BC91FCDFC9A82C1A31A1B9DF0D3EF6FE267FDD03157AA7AECE3AEE8BF7E2B50906A6650EA3CFF8305272073D2EA4D725BC308CDF4B0FBE5FA3E0DE3CAE3066B909B72E18F9059BA404F46258624E099B7746EE3AEE523D0362FEFA6AE8A756CEF2C2F5379476C42C55329503B38DF60EEF39376BDA93B97434AF5E1F4FEACFD4034238EA2E8F7910590904A23FAD0AEEC34463F623E64CDB90CC431AD123B556BD497FB6FECF8819435E4A54C4156F5AE4AB7E186654F2AB174ED35E9C78A5FD9A8299B92DBA3C9C6F822DA9DA77FFA84D7D8413B1FBE56312117FAED33097473C62AF35E6443FD06322092BE458DC813AA4DD70CB030D6404F8C3FF4CB70844D761D8F44DA24CB2E6318AEDE2611F072A54C988782CF7172D6CCABDFAE96F514AE6F766765A3349E5ABE772609960BCA7E83A2E05C9F6817A712912EAE428CDB02C6B536705EB611EA63F9AFEBDEDC199AC0B084F9EC8FD1A0B2317B376E32053EEE6FD0D2DDC6D38BEF8A2B9F10C54163131A75F7C65F00A0A77DF145E632F06CBB33CF1E5280E701E35909308FB1D3163336D7C265456F199E292DAC68ECBBA60DD0CE4E3AA6E78A85039F4C0B415D85C6F49408C5FE3CD432D945FCCC2E4E175F7B2A9BACE2318FA7379FA774799CDC71753AAFD801981959336C9D85078FFDE6C7788A8143E3800E9440901301085E0E157CE46E56368FC0E6EBB2EF05E451E780F3758A680B1C3437E2198252C2B68354171D61427EE47F0AA3CFF21618A9706CCCD5532FBCB84A08E80EA39AFFE82DD6A34752428834032C3FB709110EDD093DB8658E3A596349A86BAE4F897538FDB4361204D94FD87C6BA64C6D6D4491B83A122C430FC3DB5957E815D68F8ECC43CDCF4FEF1DA46D68A9A5C3DE1448A1BF355BC12CAE54E3059075E70F931F24D6E5F213302BA3D805F0D2118E5018C7A97E32D487F0BF362A50CE0E2A01744746B01B4F8C27B04EA4CBE6F9A8F47C116B98594E7A94AE9AFF1DDAAAAC0F31176657F86A369B9EAC1A4E9724B8FCFFAF503571FBD306C7B58AFCB9DF5308A3C4264E5D9C84B5935818773662373B7457B1B2D55CDCAE96089EF4C3FE4183AE30779093738CB89830AAD9EF831D7CD79E4F9507EB3C8DF4B768972EDEFF455602803515C3E07FD9748396596168EC76727C1F52458190D2D50C0709228D3B4E0593CBA667A9FBBF04C09624DAC14A96BEF94632F5A988F6FAED4A7CB202C81B68B44B9A26A2FBD3A70993328082C12C0D2ECFEE584F653A7A2621B9D80BFADC5570586F3E9FD3EA5D9DF9DB027983AC2C9402E3FD57ACF7878346F108D2F52C77D462C40795BF436DEBE4ABF321E5B70CF37B90098B049802AF0A12EE73C35572DDE5004992363317A18A0FD4CF36209ECF07401D16ABC0F27AE838E99AC69F894C85B87DF2C3DCFCCDB254E2AE5ECB714C8DB7B42081E5D8F94C380618AC9B06C75E3EBC71965C41853E8C73B1247AF4DCF1D254D2758659DA6EEB8610C2792D96B07F7D66D45D7C3A3BD0245575372B9561FCE923487A767FAB888CE8570275E8727B0A403D0A41CE3C78EC23A163ED6713C5D108536619F9C -MD = B28ADAEE6463200B3E7D4CE66081064DB60CAD1FD5D399A82DAF1962 -Len = 31973 -Msg = 55E308C1EED080DCC2BDF65D03373F8982BF6978B7D906623C14C0F44A03A084CFBD53C7F3DB5FA68B75983F7309785A93CDDC0A9FDD9754B22BDAC9788BC1F9A8E791A69B7B5B97BBE471415C86758094203D15866460B1339E81F074759944E3F21B7BD917C4AC0CA31387B7FCF8059407A3B28651DD1FB0AF839C809C5BCA9070465517DBD5F499C2C2CC54BA0D3E6FC4F7435246BD106C39D6C5CE138CFC1D5315254BC977CFFD32A34EA275E951FF4F1B048E29D254D8ABF50FA68483D51252C6E2F08CE4C938D8724D1F37143015300881C0C92665F3C7286735F767EA0EEFB7680EB83DDF8FAABA6EAAE9A06F7EDE33D7449055D996471D54BBD1363A7D6B0D8FE56E547AEC8C525196E326F0E54FFFAC5A5B38E0A85C534ACD105CE008F260A2491FA4A5CDF11C87741B1DD4A06DFCFFB1BB4CDAB0677A55C07B697C14DBCDAC8D37FAA30015390ABEF31C812D0BEAEC1B613CAE672BACD86EA4E6549586E2B3112E2A1139FF91EECEFD51C1384609B6A97F712785625724FB84B12154BA3F74A4C9090DA3DABD865C82A269E52C23BED05C4601D8878362857C2E80A6FBB2E8ADD4513C2FDD81EB7764222556FAE773F29FEE54729DA218069662223C3EDA2839C0EDCC75A4B1B78F6D6ECC9156E0F18F84AAF1681275293AB5F2AD3A3E62A5181209A08AA072BE6CAFDDD7A051979EB30B3264754BB9B8C6D89D425FA5D439FFDEA76AE256235EC26E7F4907683CD52DC07BC3D973F26D108055779A1931818233BD583E372815D8CB833B36301A28CA39DD1EBE7606CE86361A2B4CDA7326CAB4303159299767DEFDA45C0FBA863D79F1DEE901661DC0F046B9B01CF6F3E242E4CD166A4AD044CCD57A0B7764F353444D16E26DA5722CFF2D0AE5706947D2FFFB6B143392765F80E426E2DEFC62BAD7866711F939D9065BCAA87FB6696D20B3DF70184BFE115102392114E353A358CBCEF6DD8C41BCEA54C7EEB27E1D07D88CF3C005D5E8C1696B1C7D05E5B980B5527CAB9D4E23EB9D8C6476DD4EA0A438DA17F6D2F9E3FBCCDFEF0DAFEAFB0358DD43587D3DEC698B82B00515150548E720B4B2DAD714586126A102869EDFFA85CF35E4CC08AC0E4B5B9E152188BD35AE3AF4C658ABBD3050E2F40D97929631ECF4B34B099E01A2B3A3670B75771F655A9700267FA6C980583E772E78235E5DC536B6CF0FEC1A2D446C7FF94BAAE74AF0DD8D80D6138036185CB555AD35F9B88018F0ED01643066F29E1515F6D585F92305FCC9A70A370D223CCE575474C331D98CE85E446F4FEC0013D7A3560523F7EE763E87EDDEA444C36CB5F7A22300A8B4A451ED7AB0EA73A1A81DF7430C9998196C2342CDF0E4B0AC04A0B7AF6A6FDBEDC0C48EA9F3A8EDB6F1379A4E0F20481BA45E760C0F803E24D415EDF3CEDF5239FD6A1E93E0782CA1FC9D3805109ABE940CA215AC0BB91E033AFEE64C67D4E13A9386E7620DFDDE057482D8A812CEAD5C6BB9982710402B2643C245DDD48976DF8580857A7DD2A7EEA609369F58808DDB3B096C72CEDA92EEEFA67DCA76684A96B86CFAF15F0EF87298636D4AC8CA5DD96CC69DB72DB9955BD7897C5F85BA7D34BD2BC57F5A3B18F04A4C2324D07039435ABB2618A069DC6F2F4326174156B29F20E2000C3A306587680A0A9F9E8B3C9BB064F034E45374AC5F3364BA31907140586C8A672299D717CE48C1019D6B7956E6381B3F0F923437D26BDCA2865301A194D7DC079101DFD942973FA8C628A9983350E8CF33A4858AAB6B0AE0D8EAC5B004995D575AC9A75C4358EA51B409A2CB5B9DCB30D6013C5BD5A097F61EE0C08F0A3D1B89A1C1868435D90350D84D3ED3B391FE04305CC2A3DC0CC6F664313AF6A5436075A8D42E48617C06F81F339B85679A9796F41323B4B063EF0BE11B1A807F44BEE521CC9845F93A0DC1FA0F875240C38A127BA4302FD58CC29A680333265268A5B7075017479842EDED40BE34587F20C489D83273CFB0869DC892B404232FAC911990690B9934B82196FA4520218D3F0C81E4D955CE5307C46EF9F296C1EA1956AFF0A2865A577666BB1B6DDC9CDDF9192813FDA648C54BE75B2385FE754366D0C64E8CD4C4138E7A74CC3362F041657A33DFEFF5DDF7E5EF62355B73F9E487DEB5BA7EF1A4E931F7374CE9B87A35ECC5FE9572CFE43C25858724B675F1B81671F294DBCB323A5660331ED8D824D7DD90ED777EE09DD7560CD5F865E3337A6D6FC43F005AED6D25274BFE7540B0953FF6E4C818912F6E9E9C2B356607A62848D9E8388E13E8F5139E9664130FC1A66ED6D057CC52B2AD264E5BFB94BC7A9966C30072E01DE689B2CD0F2059CCE1D8901AE969420A7056E24A8B1585785F45A039B9504261EFD16BC3877A192B6EC3D1F8B9D226DAFA14835BF00D09DB74E5E689C89E9B29B78CECB07CF22CA145D5FA875DD42214CA7B2624D36E16D92EB7DDC63B7D79E507B49566B5D3D1A814914386C84878CD175A1874EE9C659FCD18F2AACFB6F51F86EFF57D74D850F9D3897D2C1B510489A5A6A94A29E5243E99D00EA6CC9FD84F05CB97DE9C29892A011535EF86EBC332D3235EE0B8D68B26548C16536A7FFC2E5CDC2F05134C8946A6D803FC9A0C8923F09DA001843E00AD25C78040BC4FFA561D1A324C61F07956462D259B75104B0D5925A4E2F69E3B22C58E226A7C70B7E037120AD5447ACE8DC852D1E88D4278FD744BB0DCC3ABAD30CBFAE04C87FA250F1F523BFE1F17B393280A67CE82AD26CDCC9456556560409C83DF3409FEF46D35B65BC24F23439429E0D7D0FBE7D90D1BEDC0B78BEB2C07FAEF7337D78726AF85E866F02B7E8F6BD84FE1FBB03CAD261777E7525D20BDD6B3AAB059B78EFB15772C475A779C7D5A6F23662B8D0BE81E4EBE720192A7E43414AC48F55058EA2CEFD6F0B54D466532F3672F2A103BBFFCB265C7B106488A6B73E79AA37A28BE9EDC744142BC3038CF05AD6230B17E200AA77734D82DC2A9A8EC1890D5D04A758BA9F04ECEBCBC9DF9F345976264C7A9DBB4A80B2364E8666874321A06F4DE3429CBCB6000F68F383C13C9EEFDB202BD281CED8C7633EBF151B8EFCE4D6C49F5822660443B6229ADFCFEB863814C45FCF794648448A91B84A8508E92640C80C2E7B92C2C0DA181EED4B47ED2918F3D63E839FFB1A32409ADC1118F1C9846E2B6C3F37DB3EBA13293B986FDB201D828503CE7D728BB91BD529533E822720E7FDA6D8277B6D8562E1F07B058066F4E16DE9083A21D46D863B288F75298F5F10E77ABF1AABA635970CFD3DB8E494EC7D31E104E8FC9BB391184C08A232E2D680258496144CFBBA498417E427BCC010397CC73C399BA95BB8C8858E992A249B638D640BD63D432B813E503B1F8EBFE43800973D176661B76658347FD6CED9DA1B447513ED7C3743B1E377A7AD84081D194C325618A8EBBD1915B271FF94FB42AE206E8EF0834087158E216A2ED10A70712FDE04F9385BB5B48D755872087922E8C07E4B3AA2532ED60B7B65C19511B20945E6AEAA5DC91919C5F9DAAE0A534065B3C525A613B8820C538FDD65D34635D2F911EB8942DE773EC4B76D7D66F03A60F5F82A5EE3A5D6E227D1A189056B627DA8D7717705A2B520CE09B1CFC8CC273F6A71CEA481BB0FA468969D0A9A4E604C57BA675341C83555B3DDC16662B51D2B264E6D9A88B716112EFD0F275EDC514104CCBE50D39FC4A7E767B1FD65A3088D6C7F708D8B7396C8FCFAA643A0232A63B2DBF51F6C757A5D663239748D39635DD1FF88A0E72DA5CABD574B8E15E1F87089C299273641624B3937F92CB76F6FB759C537EDEAA4B65B97B151E5A4E0DCDE836B1D8D2E6AD409E6B141C64E4D882BB3BC3863B55B0D164B628DCFB0A6D3C81575F6808BAE1F22741C85CDE8D0699022511DB6A7C900D76932C4FBE1769A75D477AF94DBB529D19889FB78AA2B32488718F286198B66C27C28D046DEB6296C14FD6D7E82BA569945472D449AF4BB56BC8C95B5FBAF4F5842C485CB4D052C352EDD47162E152A59A298F6F85C4815398A4020E77CB60A106CDC1415CCD8270F4D133712BBC7C2F3A1AE2BEB231A11F34A3DB6591DAF4E490CFD7E235382B4C14C7DF6B04432479A7798D9672FF71B42DA34A988E1551EE5F440755A7E4A6AE3F2E9DE52D5B9AAFFBAE80A1926B6D8CE414B867CB3617E95D5C56AC079816566AD61F2DEF8870E7175E87DEBA20021C7A13E07126543B6E938E73B668377324AF84F89296849611E6A0602AFFAE843A50A23CFE68B1268EFBF9CA8546B59CD4C96AC25F3056614B1BC36E24D38E2F22EB1137BC6D1696D702046CED2E7F0E4941641B5C321C27CB08DDDB0E1A0FEDE31BE2E0F050CE385F08B9CD42964EC3BDDF0EB1F89B450F2FCD77CB886C916E68A9B81F8BB2680034F9A0B7185EED6A0E37593E3F1165319ED1BA6CA7399F3A994468EBE2E1405226349E13AEDE6262EA5DB9F507B11B63F1A29A79D071E7A0810884D16EE93134C9D7D49DFC7CE97CF792AEB36ACF5B6C69FBD77A814E2BDE9110FD29C57047461C5B96CB06BC39D6C6137D045DDA3108936C5A01D6686A8C8D482FFCBBAF25E0B151C15A925A3896F684B9AC8898B119CF2FFE095C9A40E4B66A74BC22570824C26B88165E3877050D94C45046DBA2C280E6819F4C8EB637B276626870AB0B71D9D4650A11AC37139A3F9B6E0A2AB3C0175B94D6EFFB7409492C140DA3AB1A0E4503DE5F22B848BCD6D40C35D32C7C74EBA46FAB0107C7AC04EEECA9A731DFEF170F4384124ABABED41A7E4B15C6BC29211466AD0119E752AF7501256B7FC7982241E9A98556EE59BD7304F7F460D36D02148AC3E7BC17AB6EF4BF00F6386EBF90CECFC1905B937BC6FDB035B694D89B89B66F663214465E496648EF0258F762DD6D9441A0BE122FCE3180DD577566D456B61A805888DCC4A6B2EC5716F0D879196371A631E88638987BD8C551DA0600C0167BAF37BE6E5293FC3415DDAE19BF22D09A13978C3F20F2E799E5295AC888D55A33DBED3FD0F28416967AF3C375C3FF1AE3F74E4454E7AC727D044B8136DA46D40EAAD269EA426E2B36F3FE26BCD81D8FA404CA05A48ED201A98A4E6D04B8B0F0F0EC9DD6EBB784D45389BD5D1D7D2916307565AC9B723E0476552AA630D712C18C3B03F94ED6EDC6A5CC22FBEF4D008B86AD21391C76438D785A88544E4147F8E847D2739F598CA7BC3ACEBE1F5B2E0C6B7D4081C048DDBB83D84091542DEE7D7D12086185E753C742848398134161EC7D5FD3F06232CF382B9A2B96F11600610FEF0CFB01AB78E58B9C1507F289098FBB34448807AFABFE20E454A638C2EF7754993DCAAD1A1FB08E9FADDEED8E750F5515473F8740BB56A7B3D8FC411FDCA3CFE856DB5A1EAF876E33D1243F5EB85A33A18FFFEDD0AB1E5086E47714D0EFC82738B16F96C11DC1FA06F8907EE22FFD2BBD5AD0492CFDE4DC5FE3CB559750215D2D751E0FD44FE9189507822F4828B50859656E9BD7523C56CA6101824EB91F42D9672E2A7A2DAD7E8FA9D664F56B5696F9F75158B9A7259E22CCF0A454A234F2BFF30CE51EB192B60FF210D3FE0DC3B98E79BF0A7D314D3813499A2D2FD8CFDD3CFD30A9CF989A3433820520 -MD = 9DAC3834CB32D918CC96D17DA915EDB591C435992184D4860AAEEF2D -Len = 32036 -Msg = CB405D4593C891573466877820FFB3C76919D4488AB8F2433B92511AE3C7E83F833A13C8852F5EDB363E92CFF75E9D85B7834F3ED4E40A9D38E06686DCEAA671D269796F7F88A7969FF10B10E0434916726D0CEA7CB7DBCB8D126E5271A8746437F69687F36211EF1A5B113CDDBE0EB613167F31A812E59EA75CECC6CA8BA0B1EF6DF67B366775C00771DB94BA2D24E90A394FBD3F5E7EA6E1F60E7076655265DB6067DDDF78DBF41FFF2018BA3D6DB23058C1A7693E7F94E7BC5C89CBC6111B7FA41A0F3702418F1AD0C32E27DE889537C851F3CB2A8F0E5B4579DC293BF2D2F7AE6B7492891BB126987E940696A44D8A819D4838F71D6DFE14DBDE746A35A13DF95804AD27FEAEDC08EE6590A651117D83C18E5D87A86935C1666EBBB71F9FAC0F0A43EDB3AFB9F4487F3A04B63A2F3783039444EF8C2BFE05C96C2FEDA0C8F0258347A90500B5296723917D9D66AFDB0ECA502A6C088AF7E97FBC10FF9B4FBC68C42C07664EFA48A3371C9F5D249130494BFE7127BAC45E4BA8930C90BBECC22EBCC149BD734D8DB8B045DC1AA1BC2188D7A2E3AC05F95445B0F2E1260FEC77F7EF3C423ABBBA256967FFE000DB3B2B6E55352B123B7C9B67450DEBD01C5015186486FFB73FF433611789145EA85F0E89DA2B6C996FCCD297479B75B55FE366F7B02116D7CD87FCEAB52D5E78DDEB3816010C03317EC0C086E34164462595BE41367B423502B25214A602C1FA5A8002383F619EF4FF478AE51DCE6978590A9B0F21122A6A9746B5B58EF4CC9178BEC3A15422C6E4743E5A03A735A6C273B79336F5CA85F3F2107C68EB5B69FBDE50E1406719447955536744CF76FEC8899353BF8736D15B6EEBFE6BECFA0B48623F23A4D0A809F6B540E59B2CFF86752FF6EB2028E5BF67864A021DBC4A326E32C74D4E3A66CA59F72D0425D6E3981900C986F8EB1AB66EF7E9D3EE7E2656D0D04ABF4802929C947F5D4E6F9CFF0BE1EF480BBCF8A85CA0AF25CE81286CE7C1AB6D99B6C2EA0CF7AEC5A0F4AB2B462EA9F1F6D53E9597D79EDCEF3F31CD22FC6A025CDBCA3A880750829BA9D34AEEB0BD48CBF22DAF42F6593ABD565A539348B95A32AE00D1E24B03D51CEA617B07105E2B549D0F635196C3F7AA97E2843C43B795B67EF870E7FA08E370B8F7C74FD137DDABF45FC9831B80AD2E9846383936BA19DDD093A7C87BE59BFFA894B0B2C0ACA53A9002FE3594C8367BA73C15AC3B4DBD6C39640B7B450FF8B03E33B7A0197A10E2CAF7F594A344EFF707E0BFD78AD37D678C1CCD0EF7EFA66D9460E078D4CDFFE25F127850FEBED147AC821382B0609169E18BFF0ADF08895DEECECCE8C0CC5227CD9D42EAE6BD38B0E6E7A093E5CAD3989100572F12EF3B9DFCA5BDCF6E46454B8309BAC3DEBED51162E236FD3A0E555BD8798AA26C24E53CC16FF17FE282A747EFAF26D52A09B573497A92DCDF9BEC54274769EE51842DAEE843CC6C1B20511DBD5ACED490B3260C3679EE94D486C53C4FECC4032875A36A1AB9438B2DD0FD4910E62B02A25020E3289AD9BE2077494DCBE2331D7EF2333720A96D57D621F95C729346239AD6BB8DE45F63B3BE4AE19CF716FBE3894140D7B4E4A1444DF2F35AD76C1FA90E1AD23FF0EFF7CCAB4E4FF4E106A6D7D7AAA5E15336F0361A46619D3DEA24DDD7871E4C9C5214CAC7066DD3A5D8D3F0AAA6767BADDCF5DA3B6F81DBC4A8562138278D7D1AFF72A4E69C012FE9B2D0D2482FDDB1D8823C4E1F93EDD6BA370627861C21B28D6A52217FB5BBC8949C9B2E9911338F6112C30402503739A8A3E06B61D212B7EE029102015BFC6A0CA13C29EE112CD28C19183B552AD6DF6FA51B5C192A4AA8BF591251B0B8FD92A75631443E5C429126F8DF976D56A0795C0E5F98F7981FD0902EAB627C81D252F39EE43C139A37158D0CFA9F7D819928024F2C1EF6039B7CF7A85C53C4BD526E5A9EC0F162D5E6C3ECC1A8C9393EBD36D5C2A2723A773596FD71C4A9913048E0138C9ACE294CF53A09E36A9B6369AD71161D7B22BBE48FC296E88F3B63132A24C6350E46B055ED685B161B0D911F7A373BABEE4FAB49DB487D05A2F7831B1201773A0D9D2C8C44A03FC0ACF8FFA65FAEF6D9BEB56B101B4D72D6ECFE5C58D82D0F99DBA4F3429FA9E3406BDA16A8E1084A0494D9ACC360CC89830E0645C60E706B2546FE7B81AEBE89F93688D6EA0F25E60A624B9AC2143E1B396FBF1BFB1E8E6B45CAA36D4EF979C1E1DCD492F207E45D70748B7FCF4856006825718CADE4414FA91243295B9082BFF9876F5B59CCE24B93299CF29C35E6C5E34AA17988895E33A9F6BA5648AF1F16BB636A6BC4B4B511C5918F587B3407114DAACBA8EB3C8BD7BCAB2972CC1FCB945E7D7BF6BFD0FFC87D872FDEDADC58DA7937FACE6F9E554C6D08B075E7C66DF9E8AA76F7FFBEF1A5C3CD481F880D38F16817D2BAE176BE0BC5569BFD6D505296FD355AF0B052E047D50CCF361484B96A8EB8F8DE867CE901719E974246A062A395C2E8D41C64E3F6DB9658FC81CFD1B341295F896D5BE146399861BCD4ED13C46C91F5EB6BB5597E3E02B61734828688A951B7339DFD3F23E23D261DA70F2CD888F945776B892AF07798E26440AD88666B6120317985C1EB71DAA931E6E091539F87CFCF054531D81996C5E46BA97B80B932003AA40BAFEF95F7DD0EF243E4253BA15C8503F554B72E2AB0CB31A17C0766D54F70091D42B0BFD126F9B50B76F16347A077451121ADDF2DE9DF6CD6827A2D1EBBF66ACC527C6B103CD66C0420F5BC1599D7980C454A0C81CF096100008D89D5736B14522C0BA7F6D0359279571A13DBF89748CCC670C9293F8EF5461CAF0D25597049915109B478EDB9731D1D8214EE1825726C6DAD324A4C2A1881349EC45FBA9CC4195F079A1CB1BDC5B6354B68D009132D91243C480221869B38042515534CDDE7F6CB99327BBE431ADFF6DF3685A3F737ECA71ABAE5FD92E6CE3090CC8A89AD2B71B38DDB008B37CB094EA39C21DEC4AB5566AB846CC0A562C2AEDD5FC02B9C4872501AE80206D5C237727ECF1AC6CF2E655C08A78CC1164F25128558CE20F91105BA99E1FB83EC722D83DCF71A8F859D470A0292A5B6C3AE12CC74392D5A3F103F7929DF7FA39D7442AB411744BAF8717B928E4E90AAB1E9A0C7123CB11660455EF5CE386CE8FE7A6CC96C6E91D44C951ED7C5B7846A235ED47CF26D14EF2A340B378C738ED473D2A7A8FD322DFEFAAFFB538B5D7416DB0CEC2C48552AA2663387E6D75878DD5818848778BF3B64F8EE737A995D1ADEC1AF9EE87FBF2A9E689EC4F36D52C109106613DA5D5607BD2C36AE0EF4A1BF5BE3905C40D823B18343707328F70F377EC1C2ADEA2738A532BD5B7A816D5B0542602BD4AF293A8B72AFABCBFD4FBB8DD134990E0D48746C03B9D7E3F112D4F41EBDF10F44D8FBA2CB6FFF1AE7FA3CCCB34C998C2A9AB302B90173143EAB804C98E1D7602A85EA483399C5479F41834A4ABE16E204553086E444C2D31DDC5672879B175228B0C62A9C3C904B01FB391ECAA932F039ECA02BF68524542EA404A486070422E14740645E1350A1303197C0EE8E8964E60C9036CAF890FB5A07473B08E29E2CE48A90FF2896FFF2CA40A5E53FE5A900C7AA3CC1E6A8D3D4D1CE5548F46CB6E8E3FB18AC3267A0A18EBCB0561B03E7B17963F2F173C3DDE7A1DF6C2E958872C61167BCEEE96C2EB010F66810A6210E359663AB3B76941BD6335FC804BEAE9F629AC95D83A032AB66D301888955C70341C82780A81F467B77E12402121598A573B3C21F2D0C139315D653D0882A1A677BBF7E87CCD8793C4A55DA330C71CFBEC4E8C32EFCF2E2401BF2231B40015AB448CFB5D96210F8406A9EC71F91F9A20FADC698E92D05219C5E3DE44A390F1652738BBC8CFA12996CA5E27ED6FC78D27746F99028A73167D763F886188B0C5E2D245F9EB25300B4E125549D79EB194D511915D2B7AEFED61498DF886462E0B0ED30D4AB74CAB6B8CB375502C8A8A85075669E7888028AFD3FF1711FE088F43BCD849D05771CABF1E2319B1E2B9517CB957B962898665CE94F887F7E35076471C1F77DE1348ECA32A3AB6D1400A61BE9F3EDC8CC22621E48432AD00C85630F8E5DDA51F1AA585647822593094E032C1D9C88B6B760B8B835C33A7B6372A4C23266E4C7E514A660095FA71CA33ACFFA004067ECD6C6E5854694D541B05361327EAE97E936580F5D6CA6120B46CA745031ED0D001DA0615A60346744812BD69B340B952293E56BC45EA3CB1A73E4FBCA16D9359DAA23B37CC41993DC4E05BD365C75CDA846D3F9051F8B1CB8152B0E58E8020AC74354952024693F697E1B5FFD2B6C2CC947BDDBC7258D0014A101CB90802B49B82704CABD885EB61A20AE05889D39F90FF7E49732748AA0949BDB62704D06F8F91F0AD6DC70114EB13FFFBC9C22C2CCD24F1562104B90B702B2DF965E9D8C3DC15AF57B822AA36D1F6ACB3ABA9A1840278193DD0D7F8D63CCA7C6A45277FA31D50712B74990F18D7F70F69C5A22343C2FD0F728A944CECBDDE1C90CA392AD7CC66B1609FE81BDC02E432597C1BE9B7698C86955E65A16A88FBB4F3E830498FFB33065104A9066947F35866DFFA8E4619C88419F3E033D717370571290BBC0ADABD55D871DD665BFF1096E9FDFA6223BF43A5D7E8BF8740404B80D123D92020161E9CE97E589FE38D15E4431B9BB7F79AFCED1CDD831AB7468F30841BAE720563FDD966025CC71C46DFE2BBF0F983B8B9C8E73C22194D897CF5AA8B5025B5C2D1F42341CD30B36E74A34D37B9FFAB536BD6C90C1FED6B40B2183CB1B80619813662F12B4894098B60882CB99A6018B47E526AB1AF454536A1DD006B3F931FBD6DBE0EC683F5811591FA6F1EF6CE5E8219A25DAF5EDE409E4151C4141EB3221CC54CE650CEE0A5F7781A50A789C3D5A503FF236026C92716ACFA7F3468CE2A8634D0D9A1360A007FBFECB2805A31DB9563983C5AC89AAE38D885A76EF975971D1BE6577DD5D9FF9C87669B5B0CA4CF6BFA0D30DA75E473E71980CDE91DF40E8B1EB2AB790E443A2B350B194E18487FC91EA2328B449A4DC2EFBCC08A4645908EDFA67E068A890CB932DB954B8CFB4DD97486416686AD8AAAD70720458258A1F8C3B07D9F9AB4AC0D7729E5CBAB79700D6C9A57900FB63FC961FA21571FE664699B0BB7F444305848DCFC9AFD37CCA37A9216506EA0A82A8644F9165102F70C6865773A6144C6ECAF5C4FA001567458ADE381D9D66BF6FEFBAD2CB1E221B77D9CCC7324AF55008EDEB7B824897438280D9C6C905EB6CCBBE811FD4520EBE541DE74CE33FD19F696E985D3D3B17D7D26AF95CEC1381BFA82C6E079616C3997CCCCF3542DBEC96B1E5663F234B3D20352B27F0773F5F54908CE383008D35732061E288C19C112968A50B7E85C4E96A904D9A46B44E228C4D14F6A89136F44856B07B67A824C1F93F3A1DD4DAF91C1657BB9FF5C6358C6E09ABF18D731268065098E6251EB9285163C664C12DD153744261F9B7FAB19631CE02A2D204075BFA55D5124B98E028AFC011AD74A3916EC2899EF0CB5BE850D6B7D597E42628BEB68A5502D6AA600F2167BBF92B44B842AB4E1DFF1BDFAD8124F5ABF25AB09E0B00 -MD = EEC05E978FC27B9FD561458373EB2F77BDD81D3B35201FD14BAD08F6 -Len = 32099 -Msg = B156445DCC9AB453BCF1A95D9070CFD3B53E3BA1FC5A62C618E974F7F40F2AB8DD7769D3F9A8F129B2E603B8AF86895E6B0931EDFEED7A2A1267749C1DFF24F6744885B2543D5AE09CFDFE5BCC91532E0FAFFBE07E5A3C79239087E5775BB2635391092215CC66B00D677DEDFFD71DF8EC228D8CCA4193DE502E04B0E52CDFEE208A6C131D88C600B0B27FA6AAB4F4E0A5F6A6C18E8F822F1386D73E9E2A448CD1EA83A47EAD9D5E32A7907189238AF5841E5216C719CCFE8916F6C0206834691D1B9C133428E4EAE17100045368DA5324967AC29DD77EB686C493C260360FB609D7017E11A736BA93B8DAFE1FB5B6F95D0B106944F0E61032C469CE72A39803565F0DCF7428C7BB6FB9D089585CE832C4B5476ACDB6AE7D930406372146D142A575D4CF1107150BC9849759EF2558AA00F15733A3ADA22C2C9B81D8424AA79531560D0BC836C72104E14982308FC65AD4BBA0EC93CF1C92661741C95FA6C37CC98FC28FA1338B29BD32DCB41ADB0CE5EFA8C39056D27A5103B19328B2CF7E2295E6AFE666699F208445202B486863F96D3E695B465011EFEF64D91FAD5116B3EC49F6086F692E457D66ABCD139B5D7E52ACA8DED412C2E339FF3D06C238C4131331ECF19E767816DD12BC4730B0323ED8171DBC8ADA79AAA15073A292B2E1B6DA2FCEFAC30E6A53B29B4B9B158F53A08ED18AD5A975050E3F279B2E0DA1B802512FB094A5F4B9F2C9ED1A94ADD4E6E1A466FD85C188B383C5825698BC9637D2E7912F3418F24CC3A9FEB1F6B63D8EB23F3E7114ED436A346645B9818A8E0AEB5B071963564E9229FE428AE8274D8A4413E030A75EBB51D3C82EE2BC2EEE9B20283FF3C8E5DD1C4CF3EA480C0ED9E293B10A39E519EBBFD7B40A8B28C9B694B1BDF1658E01C5BA444B62FF7B12832607D4FD7B81CF213419BDB4BDEA8699C82908ABB1A63CF2ED34AA0334C19042D6C75FDF56C9490B573C11E3B6B6A75909D0FB60401377B123987437C96DCE6D4D5B2A15C17F945BCEEE176E2E80CBCB6CDB95A7ADC8A4ED42A026DFC5149BE52A0C59FA2B7B95F825577E3DF4B792769223979C11A78C0D7FA9867308A4D4471C69EA5E0EBD722AF2F043402F40395CBF13BBD223E561157588177150CCEECB6384684ABC3F5DC5B6A649F570A3F4C8E976B85BFDFD7A85FBC32861F08A69E29A809CB8AB37D11CB701CF1E9948122959343C14B17DBF94C15D9C73D82D17DF38532C9897F1F55B9E14E10F26AD15C5DD6BECDF29709C7C2DD7CE7A040902C48057DF187B9FD5EBDAC20908145CC985BF32AA790F13F264DC5DD320F1E4D4AC4D7284296BFB03671C1C06E2F9E463DCCDA4B23E2A2144AA8086265D1321E88EAAD158448D36E3EE1E3B98036384190285AC1EE4F498095BFA0C5E706ECF541E570E1F913261E5EB9EBA3883DCA4FDFCF85EDC2E145041B07D9E26695530437FDCE10DB016F34F5ABBD83E75FA8402B585ECB66E26E48D50CA5FEE25430CDC3960062BC6511A36DB62A29B08309EA692EC4956E67C3481A21A582701A3ADB9BDB1D37C5A4A52859293F91E68917C34D5CEF9590A25D676DD508C9C38194E1305F875C4C2546FE4F4F2B6B75220160AAA550F1CCB8336303B4013F63778B4A99FEB78326A01D3531F646AE103092F936C16DCEE2720A9E5F9C5BD40A9D647E8350330C88289E118695506F1524A37CAC35072FC4B2DB5A69F9D6E5DFEF4518B3B53E521DF05A92C0AB3E330AF1E841DF0CCECE2BEF1A57E2C694A7642E588AF9A5B52A169625F3482F95796510A5514212BD0EB1EEDB2404CF89EB1B32EB96F9E25C781A81D2F3800DB2C3E4193A4420C8AC6BF2EDB84120D58C1C71AA3A917C32DC888F99E7E186341136221066E2FEB5D74E81B00E4A1C3373AC08D99AC14934624E27334A94069CA8310611F912A5C5428046C39A514DA2AE91C795321052202E853417698D2681F1DA7B2D8F6B1F90446EDCF7F533ABB1CAC3A393A37248775F6520B8F5E4D0D0259F1E0F200B785F33F5BDBFCB53915F7CD3932C3D8364D3D3B56905056031552433E26E059A1CA6DF99C5258A4599CF8083391B5BC0A5BB5C54D69C59A894EAFE5B018C70FC10A4EAB7DF7506F948EC0C776C5C660A7F4F959A54BBDCE49AC782E0429B32186F826C6534E8EDDFB16B7262D1CA5D6D96DD58FFB7735E1388F9B3EDB5BA042B2DE6CD9AE1BF1389BBBE395F8BC930222B0EF04DACE90B94F220E60C707ECB4F2E7D00EDE7CFDF37C3DACEB2D3D9E8A1F0F98EE9F6570E05997CFA6658AF1104E280C66AFDDB3F478CCE4D7F48913DE2A35DDDD2646AF08D9FEA8A8225F7CAA5D90C5DE1DC6159EC09910F708005B2AB365EFB2A567AB04924E08617E37744133788C4EA363B9B615E342F3AF0E714FB6DADC337C5A763CA2E2608E6F40D32D11BB8404D74E05492CB6624AAD8014278BBEC282B89836DCAD05E2BD31521F033CEE36F375E9980B3E7BB5838478ABF52AFC8B0652C1901A2C1793B1779C8D690FF679E392916C48778841FB82A5583A2020313FF1584C24D9549B12FBB3190BA480F1EF72F499184F0241EA3231EE73E6ACC965ACF9935EFBD45088B0D3E88CA6B27C49428C1313536A335E85993F45EE92FD5EDF717D873AC86463AEDB6D2495773D758566D400619654A2CC239621126C2EF73E3333322C0E5E12CE549BE8C4A558CE0AB94D29703578AAEA2975739D3154C074FE128E6E50583B5BB3B97B5CA766E898E95D209F65CBC52F49E8734DB7A58249FE20E6BD5364241710BC3795F84F0D3DC49B8B14625E8455308A9CDC9F73D6AFDA96ABE747C500B3766D356E7B77F572C31EA487F1C146F2E457668D0BA8C7662D1D9083880A41F0BDDD9CB9AC56112D7E31A18005647BD5B28D5ADC92615C616810299D166FAA0C4F09B65CA6B84D25FD3F7BDF442144B731629BB4DC08BEF767F10FB53F3B76BC6ADDD6354F170B88C41DBB09F9584AAB6355F3B2ED2A6F3EB74AC4843D73A4C534BC311C043181A64D065E5A0D8B97D0E54B2D54CDBA1B6979B63EE3A35D23316F27744B784F829D702437EF79AF329A068090838EF6D5DA818EB6650A9FD61C784335B9C254B28863D50BB42B86768212D4B2F9F34DE2AFF5D9233CD9CCDB1D93FB847F3C06B7F1075F17970096F232C9538F06BFFF00FD291049420E32E860D8430AE3C76BEFE48ED2FDCAAE1C90A642A8D67ACFEAE4081853171B61E4BF7CFDE7A0F49809445E071EC46C7B56561DC623A5439382DE2033C7EF29288D933B2F454D5F96092920E85E3FDF230BAF4015CF716426C10FDCBE91CCCFF8C7A39657F2C9D97AF757F0BE5FAC9949B20A348E63E62638241F0B49355EB1687D89322A3E64D1BED9C6BC8A014D29C80B3A4FD393F3246A0B66003D7F54D514EE08A6FA816E19570F5741DBC836A15A6318884C941C724B8BDEE1B66A98554B800E99239724A579E7FCA27261191F8C1E21B79F025BAB32543A9C234202D29C9CC34DB66F1CFBF10811487B04F6FDA1ECE54BD795DCF73EEF5EC1D5DBB13154229AA14D09344FB42A60C266C767C688CC9BB65CF4B8ED4813B6DC8412EA3BB4D7EE56612FBD0E28B27BAA94158C05336D62CCCA0747ED806DD21770D952B61A52E50A2F2EA0074159443431E4BF6899F9A4D12400B0223ACF22A486B3549880B398363881C42D2CDC540D6AF9A201F66585FCD90236828E2AF0ED2B8CC604854E6FB633F5577CCAFCC75BC944CC850A8F8EE76CEEB1172A9B53900F15D7502E48929BA500E64393C3C6C9E83BC931D15D180BFAC76056BBC953194C07AE73D4ACE103B55476C6E4D65A15414E6F1934B062D5A90E44C8D31AA5F81E38B9E6E86EB3574BDDEB71C95AC177B39E2876C1F20AE646E14B060912EE9181A53B3BCD33B891375BC0095ADA26AAE3AF8B18372ED838D37E7662974BAF3D57C8AA4E5D09180885DD66465E1436075770C39BA185386F0F7F2024B990E99A0041C1B56BDD09009EE60A9AA8DA5C759BA72F03D1926542D6A288953D0A1ACEB3F079039E74528320F32302CF68B99365757814C74C627B12137A007B242F6B9522F5439063D170C064ED229F7C07B3488B951CE760700B5E0AC9EAF0F5AD1C06638E85F3B6EE1E998458AB3F7F5DC9B3213864917F61CE093BD4888D9A820F7B4054D2DE6D60E3B4CECAB778046CF55356EB9DB0DF59ED99F28A05AD090E3120C0BD7220E6E0EA0449CE434063E70E114764F7BC998279600E59D316A9AFF557B2847A16A3908D36522E150BD124708179A25339347CFDCA1402C8CAB358BE4CE05A666D5AC680AA77860B40C4C25B1AD298289D44C07D40EDEA75D3DBA62D7EEBA3740C9F0934D820C21DE108C3F5CB32B8345726F42A0052477F5F428DE2334195E29284197250A38DE4C078153D8F141AAF77B5F28527B4BC0EE035BFBA38151EB09107FCFDC821B3EDAFA40A7D055512B67D44B5616369C2880F29E0B031A57D4970CBFCBF7CAE34F142F2975984BDA6AEAB8D24F6F90B909FD3E9ACE0B038DC92337F9BCB66A3FDCED6A15B1CD8341AC8749FBC61F1AABAADBBD3FCA5CB5C27A5B8F67399DEF946316BDFED2DCD7ECB33D5936AC2B093ABC5F7A4ABA020BD54336E76896FBFBA737D1AB053E959D198690DC21DF017452CC19DF78DF0A03921BF7FD4A15E53DF11410FEC1B7BF86D86B72B1913824C88DF9ED6CA777974545DEC5A1B084E72EBD0E89A3656DD749BD896A1DE4945BB0DDEC7FB06EB8AAE4197CA8AEE7818E5831175550C353D3A238CE7E901B6A75AAA2FE83BD2E72F79CAAF632923C5BC97A28BD562AC45F86B3CA8C7001D741F0D86FC74E44C9DA410CDCBF0CD5B52449FC247DF665E7FAD17670506DB8E83D0F365B0B150BB07B952C9F3E081B5B7A9344BF465E9ED98374BA46AF0481B2CECE86F79575915124B6176D350F2CE235086E4E5B8E71E06D27ABFFD23FB5EFD669521C87A0E2499B889D2A77F2265D022FFD105BCFEE895AFBB5D29A8AA5047E8F5C8D51E46E93D2AA0E0E13F2B95610F9C1FD1AC3E764172C6E91FD92DA7A8B0B3ACB7F9999C04191F2B5DCE826BA53F106D4FC0E22541D33410E9D0CDF982F3E122802DAD5243BF7BAA466CBF173F434AACA6F9BD1822AA1638C6FE9248F30A33BCA77568150EAE2687E180CD1CF83431AC6190C48E0176EF044BEB06651D91CB8D9E58979AB792A04B9C81138B4ADAC16F12D8A4D5893A5BF81A5EE799C5FD35BA74E2975BE8152EE531C7D5FAB34F3AFB8860CE7A249B161DD9ECFDEE5D4BD63634AC9BFFC361A5D5149A914BA7CD5D5ECC1A20CD4AE8F58CD04D5E9A0AD714916B27DB9324F0A5B4C8340B93FB55982210641B32493B04812501B7F0F2886EFDC482675523136FBE5AE33610C8CBAB0A3302A31C039D7EE02BF431657F2C5B42494C054448F3D5D5FC663320D60841F09BDD202FE5BA507D5284946A6D2B81A12B94457D6717A1884BFE6DF5584CBE57AD6C9FDD616C4542AD92025D053FE0342853173456F4E3811FDCD0C0218049C05ADAE183C3BE0A64363114659694FA2DDF4292243B6F6D1DD68049B36398A24670267A85BCBC012C4D38F97B06C6DDB26B91605D77134C244E0B01C5ADF1A6999B2B402397DA2AB5CAD98FBCCAB661579C20 -MD = A543BEB5672F4B2420FE7D9DD249A2A766E1F391DC621222D5B3FD81 -Len = 32162 -Msg = 4E729E4873CF21E22C3652CA5387F6AE34B62FE03B973A56C532E84A1A5BEBCB4A405D57D9C1C8D8F5770EDA34E196606D6F8140C2A92ED8C428DA3205D238FDDF62F68477E0D35F1D755344A94023971EFCF2204F9D71D08532175FEC406C8BD388D6B4CC198CF4F99235931DC2C355CF511EEEAE124326CD9B51A5F81E49D04D918F99969892317CDAEA3289960A0BED8EAD33134CAE941C49C42F871859778497A14703CE523C4704A9F3AF6F9A55206552917A1B547DA1D8E55879ECE2783C2C46152DDCCC50BB0C6CF1BAC683415F6C9820E21A20951C9FFE06D49728530F3C84F124776D9EAA48904B7B6E4C3507016809B0A27EFCEC3073FE9FD9B56022B8A6EF037AA52C423E1856D7C2614151875948571D970ABB37E361465823C1E40A993BB3627F37230739DA74A4DAA2DE753582A25425D61E277FFCDA4D656F298017C5EA5E7E01704BE17F66894C5E7783A8D963DD56823C00D9B9AFDFEA3BCF8AB2E7E45E05C7D1C71BEFCC938C8E740801A4D3974A4A46BCF16CFFB4A32880C180E9DDB400EA240A37FF249B9796B52E49EA7EA2104FD27DCC64708B91241CAE947F22EE987ED3EC196AEDAAAFCD708F737A0C15094D01B19C2760E7FB511D2782D5DBDD1AA0D1E899E1441416E559713C3320803183FA2CA6CFB90F42786CC9D8339F22A6B1D3B5921B8ADE524D55DC9153B452D2BB7F9A04958B68815DE0005716D0C3529B629F5C3EFF345EDCCD28600F719D4669029CE1DBFFD41F44FE030B7D2E0175DB86D65A818FBE193BC2BF135F2EF378D6111899641D38A5B4992A6CCBC2994602B31D3EEBC8FF13AE76AE5DF2C4DAD56D766A7142796E5DC54E863921B2CEF82C0789F93BD852CC630A4668F2E9DF77D5505FF5ED189758DA546F941B9DF1D2730CF490B4C839FAB1E9688A19BC0BDC50AD93805A1EA65F6A5EB50742AA2242702D6DF9398BB737040BADB9B81135B280D2DDDFAF00519A65AE25FE0B1AED03235E4CB892344124BB59B1B70886EA7CDA6D7AD0F07D6DC0E8D5617BD611D5DEC74B4F221EED2259D8CB88EDB07BDB8C1DB849DB2D961755492C7708778C08EEC4DB8E9A086EB85314B791E16684628ED85B421A941D1F53314C359073E5F039430E2FAEAA4FBA4320211AAE92C662E13E76054717881DE2C3732D25375B21006B8842960FD1CE516E081BB1AED6CF10EBDAA9F676C1AEFCFB96AA89D89EB3354DA969AF4D0BD3CA9682D3CCA94D89990F8657387DF9A7293A3EC71ED2C65D51355CBED1DF4FF442848B2DF293219C13B3732D9ECE924E21E1B4A1524C68E322FDD20E59AF97A45F507D2078F65972F3C3336F51923F1714963BA7A8DB05D949A4DC89CA9A723AECF219410255B624E05B0D5814D2A082AE868F14111B8DABC3B0BC28C7ECCFC7B769DBF305977AFBADB96463438CF6717FF784C69D6056284EF3D04F2D30C0FB86C6AB389211B3CF02D0AEFA0285E4397E496A9C5BB2A0510329194F813BC511B2B2B8D0132F04FFC43EA9DEDFA8023ABDF3C56DFC9F7C3859ED9ADB8D7499E8954D153B85440CD90590A70DFE2119A26A00FD2E680EAD0A184B3926F81AB9D22FFC6EC3C71B0BA8C96B17F675B549E9F723E930DF0BF81BE6154B782552E3EFFCC40188FD2C7AD9A319D86AC6E931A200EDE025D6B82DB82DD55139923348655784934DDB5387F89BFB58EEB314689CD23CDE025BA28CBA8DB9E622F929728380EF18C670A4506C70E7D5020B781420E4AAD23661F0E84C904D0D6CB6EA3DF43BA23B899EF3777D4481E00467F841BA26FE7A3D26BDF09EBB5673AF65D7D09B5B82E60C89EB4600092C0C8327D323C62B39F84E4F7623F441E83387452E916B036555AA58F95B83E16B45A44C0B6119D92CE492329D3A31F3D3C0813663BBB554717568F30630E1F0DF7BEFFBA2C46451C66F58BEE9321AE968EC63EA3AC5182E127D22531771A884844535E5038FB3C9165AF06169741C470BD4D54CD8E6895B0EEDFFFCEE82818AFCA3F3188D4CBB821003C039D3ED657295EEC74FA4C950E1377D87B42F63B67D4CA50F849209A5FDDA72F4BB3D4F778296CC07CA6280E32269277B3F54A9DB3607B7D3E024E2684093F9F4246EF7885509280B6D54158B41C50A0E1463CD7957E0D984469758C160FEB415B375DD6B57D7F89D97DEB428B2792DD5E8397375B20F25BB93B54EC2516A59B1996792D9AFF6C114FC23F8FA830BC1454A53A48F4B20E6BEEF45C412868826680BE25A17F01594E70D004D0E8B0EA290A58CCCFEC945063E7ACCEDCB635EC2387DD1327C8528D2E03CBBBA1FFFE839C38CECADD4CD69B784C77B8E99DBEC61F8005202A2D212BA6466744B7C98074C357719253A1A42BFABAC6345DB7CA189ED43CC3294CC763EA203658846E88CF68ADCC59590FE6D23459506EDEF3FEE24C2373CE01A99580D5A9165EDA1BD1DEE91976C3B840C4EA33BE41148163DD843E42E62AFE90F45C840A22BC1F73372BC9C8A5BD7A08D89CBB11422D7BB3B0B9E13CAC87CA76162E075964C3A93B35420353A248BA50C0CF20C76BDD4359640DF45B57E3BCD5D57BAF1E52D432334AF707FCFB6B1F76BADEEFBA0158289D1CE40CC43C542896AE995E72B07C78C13B21E189EF1D251B401DE52728A4E1F4A58B1AEC3CF8735AF976CE02A3D44450A78F1731A15D35E3B85B68ED71E1AD69A4C1D01CF2F7388C39D92EE13BE6D28C36113790423BDB77BB1A2BA89E44606F1D7839D6DC462B7C5813A99081FEAAFB603965B9B91BF3BA46E28D5F750BFCFD635AAAFF7D261D7D56887FAFDE9C4E22BFF3B2B98FCACED908AD5E748DA312BDE13E080F02D899AFA597C89A8645077357E5FB1212EEABCE8314B9AE02A62E9BF0DDBD5EC0C2CF8B3A528335C49527CCBEE18433EFD7A859A33D6A099DD555CA70501F5A67DF80A0EBB8A103A262C1BBF1122ABB90A8A3AD174EDD5AA8F804CBF3890519DC830D163828BBFE5D4454920F505CAAEF933C2AF6D5C614746903249A0670DEAC0E4DD682BE5E6ED2B560EEE14908AF9A6F26F64CEFD5D655C037A2DECB19612FCDDC0A80C0F7EB5E81E5FBA06256B63D8B3A004FF8654FDCFF20F7ECE8750972EB5FBE030C1E8ADD950DCC8DC2F152BBA3C5C7EC04D1062B13DB8C735E2A15B8B072543BB8B46AF2741A0B3FD6458569007D17DD29B357A0244E2C5320885B78DAAA77B1AD911D64A4F01454E29DA287C9B1EA6FF12B7AC350D27EF1BC3E154EE556F2798B79D9FF3AB0950698E4F2F4BE24EBE9CCD7F1D1F8C53DEBDF29864D19C6AD779148A24992BE6F248558EDB76F2D29AC99BCB6EADDB81D0A71D62F77C1D360D45D43E1E8B4303FB8E8C574E113321E5353296D8DC764C87655069C4788E698517B4F260478C5DEA494268122B3D9F80E4BDACF28F29CFA2F7CB6C453376ADD90CA798D5BAAD59CAE65169659379D96E642AD691E700F2C64136AAC19BC3AF0FA757E37BB18578F8773548DB5D8F104BD1CE44FEA53DE27D6510029A8687447722E165780CFF7FD53CF4A338BD528D26021EC39AA74892BB04AF6C83766BB2D8C28320493F3BFF9AC342046A77EAD8271A01FF60A7146CA89884033A74528115DAB01AB53D51146727AA56BBBA30086A7CF7EF712F9F8FB571F16F2BD02727F29C4B1E769E6259CDBD5FA2522EF18606487FF5181EFD5CF78F401728B84126C5E1647C03475971E2289DB3E5563EB9635DAD81F5AB9E4B0880AD0CA04B9E8EF0E8436BD23D9FDBCA89A79C373BC50184F17014781D49FA2E9006C659FD185BC804C9B77CBA1910A306595D505EA716FA83AACD98FA74BAD2FFDDF461134A8195B26D45C9B5CC837A38666DF2F841689FC37017C675D5B6635DBBED304020022403AE10428CA700E81F6526A1D92CF05E34ECF395A9CA41103F2BE700DBF416B82075077CCFF46206F8D114E0F89C31D1BA04604182C6B2FFD0576CBB012479A8A9BE68CF12BC2A9D437BD8E2CBF88E79AAF81B84E14B38D10F20B6A898568E58697F78FA59B0001F9975840FCABFFCF01E153F8F9DAC3992387F87537C476D7C35D9C5C7658C7FEF2BAD680CABF7CE61C38F5EB8EAA1F41C83D3F92ECD5D28407C0509AAFA60E16B8D9907728A98CF8E35918D8943B11045B2622803088F9798915AB2FA6CD23ADCE28356BB43EB1913B4CFB3D46D86AEDDC530BA64126FBD8861AD93289EBDF0C623C8BE4534A90ED5322405EDA35FA9A2D7555E25EFC53C50CD4683F9FD3BAC5684544F6F3B83AF8F23A06C0182A3311D8806E38F2B2C9BB6ABFAE22D41F54F9CCBE167F7E8D7569D17DE53DCF9AA2F1A325DF7394663CA6B1DF5306D1903C9FD620467832B37B683EE66995E73173F9E11562DFB821CE38938D9F2844A32A1C168C28D98D0226A7A4B3D7DFFD5F6B4B9AF6E93AF0305D780915D1E599FBBFD7E2A59CC1669007968E0D44F42C082305697413BB5097ABF26374A1FD1686905EA401808A5A72C6031148F2D626BAD34FAAB0E47FC72A8AD6402759A22D686725894C51041F501D4877B384810F6CBDC38703CEB4A903970BB93EC17DE686F49D53004CACA40BB1A8D4184B6AB0911BE2B30876B2448E75141956DF9ED855087A1E27E9C18283266E79819C55871CD039A9A8106A002412196D04F2A3AD57632313D17BBAFF078B23F47362511612D14315496EF66A4D58742AB8AB5529311E1969A7EC4FBE687D3A6A5042CA372224ECB584EC22EC747BBEDB8B5F7907C82D6E1B16889E88F62C78ADB734CC83918ED5D44BC8252811775F176B27BA5C67666E3354BC3483BAF16216127EDE78F226F7CA40C9D4BEFF5CABADE3CF6D39BDB6FA19E5BF7C7B8C2826B0FCCC906B607B63C29B1BB9A8E8CC826F7C17C59A641B7D6785BF49315693D394694350045A779095CDEAD6A70D1B36ED89299B707AF5326D53A1CFBDD11D824EAE517DF261492599B7C92BEA5E273F163D3559ABBEA08349F507F75CD22DED3C0B140CA1C79BAD636CAA2F78A0357FCDC3262E33356D9367C11B0629EE34BD392C190AC06494D53238AEB19A54D2BC867EDA56BEE265174152BA6825F388C03A4B0D9BBD4E3857B489D93E12C4A25FBA9D8E0DA45C45C1785EA8DC72C6F772EA9607F9535F144062AB3943D18F387B88F2F5C383AB23525289D7E5B0AC1CFAF5FB924715762B505A47DC38E847DC780A5DA3ADF40383D5587205B2B98F6D994EF0409492B3E85F9A55FDD3E5C61B75A241B66C752819CA703D89C6712DD987728A43A225AEC6D0FD4B658B21540A472EEF645697E872F80F935F703164E0785CBEF04E5E0282F6E73B8725C6A9E204137FE139C50482F12EE3996AAEF4FB9228AC6DBE9368D230696DE0436D3ECB54900228978655B74A06DF8354496E67BBA3B59F8EEFF8B24DC67A2A0473925DDDA9172D573F559CB39FFE2BD038D1C11E452062924DA9E971F194BAE4DC2505FE4312AB80DE8EB2E09E2C90FA81BFA8D83B465B274AF28EB5FA25D727C3A46433FDC6232266B57D32FEF5395DA6FF0075242ADB50B01F0E820A730BD9F229A64B28AC555D39275339DD0CB07F2A9E7F9BF4D87C17319C91ABC4D8C62BF5E5DD09D6F50A22AA69228EB341DCC0EB745E293EBB89AAFC056CC65FA0F3B58FE98F8E7C9E9CA475255F13743D9B6270EC0 -MD = A341464710A89C615384844C94024EEC48545F1849CA1AADE5149F1D -Len = 32225 -Msg = 7FD916E8636CB09F29D3CBBEC9DC33FC5075C0BCF643269D4A847A4E2E3256752549E4AD9A1F6455E6CF4B572B4EE3FA7C3867E0D9768E8C4966AFAC56E22B34A97EEA8BF6328B743A698ECF35F3B766CD1F97A5B16914147018F64CCD8D9EEDD38C6A388496BEB3AF85D7ABD1EEB23ABF352691D484B7E7C69B31EFAB811C89B3B823BE417EE5F5F46F95CC6A198B49133329BBE0A123E37B676583AABDB819DD0C26E4B8C2B7D96DD6C776D13AF58680C9F6D8BC3FAA204C3EDB42C60C1C1767D849D6D8AEB8EAC18B57257A08A2DF4C20F2AA077FE48785AE02EC6B5D28707E4888D99E315157563DB75E73D49CC3EBBE96D5545BC94EFFDAB9081AFCE7005E145ADB39ACF9E8524CBBCC8116772B0215A44DFFEAA6FE76187A18B0CF9F28B6D5FED6A46F1CB1B4B739F692AD2939D1135E528AB86FF5D6A7FF63916907A93DA04D3682F6F10095FE67F7A5B8D1D29E27767EBF41BD5C5C05F37D4447B7B25C3E5C16CA26B5022F6AC746CE9EC9800B6D3F433415358E63A5DDFF1DEADA947808391D18441B784092FD802F0FEED46A9E5DE2514B52FEA084E948D90B2E56ADD79DB901A531E263C18FBD5A2EF3B559FF3AC2BE89088A992C5275B05D5A2E9F929EE0EC6020105ADD0B0DCC358C30E87AD02CA06AD44D119874F9D747D9584F91E183F133EB6E093A2EE695AD90D1BCD2EA8226CA38B9F14A2492AF4E813E902DDC7A66BEAFC79C9923B2C56564242082216FDEE73C90B1334E238BF2A234C58E09E57ACA12F006F6AAA3CD51FA115CA75499AB2EC8003CEF92E25305745F668CD89189B06518C3F2F7DAC486837A2A75F24108A09E88B615AE032F3B63CEAFBAA4E14DD92E30D816BFAF879B7A3F3ED0D9C5CE729E32A5D09B208E2582F0E830B5ABEBA19B30C0EE826FA88D587CF768ED48FC4383772D701717CE424D69AD2767A93FC178DAB9FBA5FF2BEAACEB4AA17B63A15E3F13190D04BC1EF6DA809E11FBFE9DC7C4044313FFF71BDAB4653C4DEBFC3A3F4A2C86B3B21A25444A636D68994C4C8AF817043F63DAAC627201E5C143C09778F8702E8A68BD11FB4563505ACFAFBDEBD87903601906C4BCD3B540249E625250A336806D2522F6B75625E63A2F9DC33BE59E9A40F9BEDFA608A1898F358183FB783BDBFB2B70F08B277A713312B41B7569E09361FE2DC9D4979E4649F0092098943E63FA095795722348CDE8E21691D0C3D47B2D2BEEDC7C8987C85B5A29A16E221A185E86FDD8155E1F6C4198E817A9E1E2209CFA4CA1315EC761A55FF42BA5AFAE4DDF850032E7403E859D0FBCD30D380D08AA0EF1D5404573D8063054625E69DA4E18127BD66CF3FF75E8CD15DA3236FDC723011A7EC51579B82C5B95CA697F8C54BCEC04ED81DB81B95F35A318551F94FF9B8AD90261C117D255ED380CE83462DA813C24A3BEA6B1CF37E5AF9A6213C8B49BF0546D5301D8DBDECF6544FA5970D3AE5F1A58CEA43D8D246616B8A3E2979338B398D0AEB7B3254BF557D223D99ADF629699B70C14E209198AA1AC21FEFFAC487805AB1FC448844C85B67B5F90B3BBC4804B2FD4425252D443C09EA92730D45CA3BF7A7AEE25AD46EAE6F3780D959D89022067213EFD72596E166C0946ECB1F832AF37624BA18E5B0631D5630E5325478902313357E272E9EB508C72777D8207C9C0D79BEC9E737DA72DBD95C45C3CDCA9872F605FFEBC14BF9AE02E39A20F5677B6A4B1BCC9BB618CF2FAF8D8913EE743FE2BC311601CD8C30E6226867DE205C29EAF3C197AC0424E9A9C5E379DE781E1CEB02E1C1FBF1D42CCA1A1E3C9B8307AC1E79CAFEE45CF105FF52F092D886E9B1F2E65702259CAC8F6D515B82C35C3A8990DD66D53AFB8BF4C42B88A0BCE9375F4F2C4B0F1B49C6E08BC915D81F0B1496E68CFA9932D4D653933556EBC6F9CB0A363424E087E8A9E2528C831B66359F4D2A9B4ADFD993031AA4EABE438C06F250ACD43913465DF472DD8B39698868169FE1E12B661A6B6E1EADBAC3945745C617D551CCBA23E1296539AFE9C3A561D73C18297E21BB6133B11DAE2FC0210F93ECC296A66B57A7B9E3D06056C5CDF7E53EEA28D2FCCA752ED6A11AF2180C58E111181426A48ECBB05D6C430AF70CF49145E243AE43B57F5E7882FA388AEBBD9A621DB9A06D011357C39CBE981FD07D703D497058D7874F25DC98ACD710C35E417D38B09FF10C1F879BABBE2D078233B824CCBB534D30E63C718CF8FB148CD60B50223A7DE233CD7D2A2A9DFAD53F80E26C341FA0E2004056F259849DD9A2054C61C67B4184F3BAE60D159B8AA49794006F53F39692BF84CC1384F582F3159980B208CD70B3C7F31C02E5FBEFB63F1A7D49766B1E40037526F3862E158FE038703C18D148B3F3E1698CAC6A780C07C01E757FCEEEFE9FD888F10B56E9D450E0DF738B2F9DE9650D0F283D15C5F136BDA31300FA5B6A1486C12A5C307456102C293F68D30C2DDD71859DD4A35B322D69DDF51A8263EB7A7A29F1BAEE5B520F368DF5D988C123242C27AC1CA2EB8EB9CE3AA215B85FD79D2CA178B773A08A44C779CB33B88CB7E3B2A8690DC767D4A66E846A12C955476B2B34C310C7FBCC5B03A19B54F301E5362C80C442D6FFCED7DCEF5C23F762D1BECB26A4C2341F47F76AA6D3BA8509561640638B1EB381C7639AF33F6209E9CE4D20080597AFE392B2A0C499AD4033F47585009C03BD6DD05E31460757CAA16AE737B7854F61B0A31679E0DA51F151FBC0AB46373FB95EDB917C34E79B6BCAC059C7045A94DA2A37DF7704373D2BA648F04F15C086543C4F4DB29662FC6E25604CFDB0CED616B0860D91A86093BCF8E144AD0DBA8C90C0659284309BEF32E30CFBE53A2991644B63C81F824F8E26EDA2A9744503E435724071410CDBA90513DEA54649189312F07B508801E25F5B7127501D66AF065E4C160798E23CD67FDD3A59167409AB2C62F9261D08D50D6AD0397A2ADBD4DE93B0EFFD12B91A9BD56A67FC6B06D30FA3E1A69DA23E62C03E64C8298BD32C0D6145A03C7C556BC90494236D62FAB4004C4B1DA5C9290114FD745D1AB4C07FC7374CFF87A16F8438FDBD200A0FCFBC2CE84E1AD5E43ED1A196392A87D14CD7116CA675D0CA743CA6B35CAB107C91B6AEC58F5ABE0B68EF253CDE6B37922AE37B96FC73AAD7D8766D25B8AF3F8EC933E2249F13BD6A305CCA67510A69CDF5634355EFBD3D43B19795D30007EF67C202AFC4875B4A8B4E35A52687E00E5B3F4ED12D07F427E2341F4EB8286923283533C9D3176332F7C4EEA9192BFE4EB396A045D3E3E137822A82A1A510A9D21D9240D8B8D340FC5DE12BA3DACF9088B60E73B1B69525E43BBB877BFF5BE32BFC95DA21C7522B278BEA1062EA73BA33F4CB6D7C8B561FAEE66998190242FCA5E9F1500A1BCB9082DC4F55B86129680A266B53C3F16E4C334B2466F561622603EEB78A242E860AF92D5790201A5143B78C6F6C29BEDAFB274F3B0C752EB9937B42BBF12DE363613A078F898869048171C36B86829E42310A5B7DB5782D420C52F12762B6BD503A7370AA46352D5D4AA9F59D915D116930FE7DE6B4D9D6BCCD9986F21B18AE002861A5BE02A89E12AE30564A43457FAED8C80DB07998E4544DAE28D200A38C8C95045C734CC1B008756D4E54FDEAE0AC939F069212D4CAD0BAC0995D0AA8AD06B20166BD6BFD8E344500AF1605B1035F29F43927BEBDD860E9469366D13710AA89436883E5615188F1902EDF864F0C8371159E5FFB308593C6FE3CA06786FED80854217D6EFEE4118B02E0DFCAF3BB7151D3E6687442F983C90E2A9BB577F5D3AFA71F72D0C924A3A08E4846EE7B2D8BCE44669763A6F5AEFB334CAD45DCB038747FADF5A592FBC459E9FF341DC7E267B02B9D467AA836E5B6B141A0B115A9FF186F07D831292BBD49DE23F1D42B8C7EBEEE244E75502A77228B095DFEDA2C5B06A851A196103AB4305D95FF2E1D88916F0E0B30341B681D179CCEF4FB2B0ED271DA45CACB400F65A2DD1BAC9D8FF684AAE269DBE885FDD596DF7BA8325D2C946D65E3B4795CF4BB64F901AB1FF44B034B509B255B0CD2E2C67EE8EB90AC2824BFC4390041D36FF18AB316C3600875D4B9F7F7C4864AF615EE6B6660207E96F0E33E11B09176DAFC82AEF37469033E5DE1490F4E75CF4432A963521620DF76F5D6617EB644869BEBD0B6BC0C08CC8D7118852874472C971FD0FC84D326DCEB48D9D9B7D52D3EFD355B79DE16B15E1E3AE8E82F5635FF35868261D0959BBC372884EB9A47E05F43FB4A65CF08F4BEFB50880D5933409DC41D15BFDADF835C981FAD9B55744163400B96DBF73816BC6895A9D86C9E06CAC79050333EEABFE0F9E2EC0B2D0C6C84DD343CCFA7D5A6AB98959E9039F07B3531B1F77546698FB4A483C89F0E68E353CC7D0F388E45B452700048DCCDABA9F2F988305853DC3661D678DEFB743A1F1FBF5156C1881D47D85CB3E54A1E1D0473B637BAF1D93821889FE6A30A74100C56C36D1603C53BD18942F4BD159AC67111B197AB9AADE3A997B1C4BA04AB31B8B475ABB1A66C8A400D975A7B4BD5CCD80C2FCCA8ED9798E5C675FC2F703C816EB08AF635650E4A73B102EC4484245E73D65D290FD118543C27FD0FDD9059BCB8C7D6828EF584500D497131F591BB3820F56FFF3268B2271046C15485DF5F59F1A185580476E6AD1B363309B978CB8C871D9E5E17F5A6F9106C37068775894576BB831CB21E4598C9A936360E7B60852BD09FCEFAB8CE9B7B177B78A5FA62717D7B67AC28697BAD93B602972C77212FC222C5E25F720AB00F706A094C4A5C162ED3E3E24829A33F058FF5513FE4F0C34F8D59B0D032F7626997EE51DC5BBBBCA929B59C7F41A04AAB2982C4F8F79E172B8A7D914EC951699D905A6D43878670CF279601426468CC57C00CF9060BA2C54166483A4316835B634DFF64F0A70970B611EA2D31EE71AAD00454CCD570038511EA864B09EA3ADDFE1AFEE43486866FD62CFBCB3DC671C07F08862AB60F07BA96F66619C9FA45A822C8FBAE2A8EFB07462B55CB54AD0BF36D0662232DAF3A9F9B40FE8D37B631E908036C26C976FEEDBBF889FD408B01D7696BC0C10C1EA75325AB7329F05365771D0A44676436168A3DEB7719C5DDA9EC8A9CFE607796CC8BA332311CEE48E86F5D9FA6A259926BF751E0EF43FFF3F15D155129D5944F676D247CECDF170A4CF42E7EA90FD43CCCA14FCF23E121553824F5C88B46C24B65972B5648E091F9538B8BD69DF3A900ECD9B41BD9CA073BEEB9001C23E504242285DEFCA7411946E5545BF9C276C9A67D3B723EFA8EB942C70A56A6A932C0CD015C4A4293AE41F6810664B448157559D72F82DA42A62076C7D750571E781EEC87C71A8B434AC6ABF6E29797B5AF01352A6099D10B6EAD6736415470707E414051ED99880298AD1A808BB280DE94604BD75C996D4D20D6563AD2367AA3967A166998257A2CCD258A827756826B4635ECF295590AAB1A9C923030FE275C11029FD997C4974B1DBAC2970EE27511217C239046C17B0E47B45884655ABA6F79848BBDF3773188C7F17388142B94885D6285B7CD81FB72DA1B5845A8703FDD2EC751C027D275587491152E49367479D691746F572BD6EBEF8EDC4A6AB17F824B49DC6B00B46055E6056552C8810784F8CA6F579249400 -MD = BF939BA8987260186D2AFB1FE4F867CF1F1A0FBD341097A8073B7688 -Len = 32288 -Msg = 09A96A0112B823C2212ABA52EEA13C48CAE3F5E08883453E2085A803EA852A9D6AE075392BBD8FCEC567A1524AA65C70C3EE1722AA079AFD41696CC5391F529299C71E99B0E08E411D3E1E05C43E979CE10AC9C2EA80CBF4B58371273C3D3A8DF48E2DE7F50560FFED25F6E65E9D96CBB379573BDBDD2859D13F866EBF3AF488C6D2E36505A70D81AFD07E321157795CDF40C1885DBAEBF3D4E425EB4CE0CFD6CA5019C8DFD54BC2A30095B312AF4548B9ACEBB6A207AD3BCA29F4DA443AFC7FA789AADBD65C9D45AF71594B790FDF84D9235933EE96FFD83D1A1DAC8C1F3C2BAFE668B8EA5C9649D1D8DAF2806F0519448A97AF1104DBA3FB05CC46D33FA0112DD0922CF1AC84D4A343F1AE597930042AFF6DAA75011BE4B18ACB257D889A80F0C3D4094EF7295ED4E8C2F1E2B8F56EDBC9B831333677A4E6CF6110218B23523EEEE1E024B6398D1CC572DF7AA103CF7F50FA488E19936D20393A55843C042B275B78CAA9EEFC77C44437C375D4D1100BC486FCB0D250526086EBD4D2D38FBC8E3E55F9262B4BE5E6CE6AA3164DC04D7FB12BE70AF6861AE0C21A04468339D335BE15F6A77A8BB84CA4BBE94B0782241500B595FD671B30DC6C26317DB3AF8DB1214B144FC42FE936771469D3838E41C16EACA8B44A5915D1CB4550A451BE5F0673FFE846F6A22BBD194C8870193E1B68459B0593930E178B765D5C19B0F9D65B1E25D60B727E50EE4C39D1B898CEA9C8E95E40110E40DDF882A7C89303BF1B6AF90506E4709A7916F207BEECB850C9E227C9557536138594513043FEBE778C471DFF08ED2ED7F8A54952F6F52422AEE3240EEF81D34CBBE47C0CC59A239D7AD75852CF62473FDFA9C723FEC82C384D06F2320C8C3E5A1483D9B573AEE03FE0F85087087B896A569D9A07B02A387EE09ED6B7C8D6C0ECA76EA61301791C9F835E5CADD14862393A698DB23577A68EFFDB68076FD8A0E7BBE9D93098E73F5A174CE406441DF48B969B4D2502EBBBD9937856777D6F13852D9AD3A39702BD556009082DC207C442D327EB33A24F18DC56428B181C7B4405D0B2720B8C4C62417AB9F9DA5566BD85FB7FC567F542D05111842DE09114D27A382F009BF737EA2D8D8E4F0900A0DEBA080CE6B0FD7F0ECB3F81791717EB121176412E7CA618735BB065A659B689A18069B2C43B00EBDE9DE272106E180EEA446242F7889E50920EE5DA2B7026965B6DFCF4239ED8EC7F7363903F10EF6CD80D76CB42298E913C829B66CE1A5B18047EF06FAD79DE360908065E3A0F61AAE3347A1D7601188DCFD62C56D67573EE4550D6269FF7181CADCF84059749C8A4AC1A46746FFCAB7CBFA1840E5990483795452EF93075C92A4D115ECA32EBE5EF0211764AC8F6D61EA5A75530508A8724CD118462CA6CE37E85E337E312C60E43342497A9C50C05B38A6D5C253E1C001538B43D1312A369D8301544CC24B3BF3089C5D119AFE9979430223191ADDE6B68135B5D8AD5CE4A808580BB1C34F650EB63EEF3D592BBC45BB7F2DE9ACF2D4BC2820EC1AA765F35FCB3F71D862AAA1156D0838EF06241914AA4B8632733B823ACA5801BD281D127238676380DD88E9BE0D6DDD0AC7E87CDC175A24343B752A46AFEECAC7561766BC33DE4363DDF07F43E9BC4A1EC5F0FE36F40C3001F1647058131629E2CCAF056B381FC3B576D8DD072B8B2AB0D251B9060A9F76B3D99F2D0EBF65781B9511DE31027D8286299DE9FBC9C1C28BE2E4DF9CE8240852FE042D572236AC54B42B690D25ADF27C26A96D0FD048F1D11299636B55631D378826370AF97D76E402CF49CA5687C17E2F8BBEA0ED83535535566D65F0C6F7B2D887DCD391DF0E9CEB27BC0A8A33039CDCA515C886D890D69A389AF7BCB9C9E58DE0636441397A53AF09A447BFFD49BEF7287AAD01A1827FCB8641F9BCB7642952D7E19448C4E88DC5ABB28E24BFEAC16BBCB9F8E9962F532B428CCF86EF635697E179EA3283879E9375FFDD4DD9986CF862170D3D8574340420B43512D5A368CF338B732EF447A669C511466DF0DDD9E5E26A19A2ADFB17CFC593570F6C6775D70319E4DCDC4BEAF70AC768E7837FEF94C785EB54B1A6C164E09FE88791B3DB6D1BCFA4EC170A3695FBC21C9AD1942D3A483CBD433D3FCC899F12BB9CF788666C0658CFDEA7F29D5CAFBF3B16B3ED95E52AE21E599E6354D65305D073DE34B677CFD9F0FF0CCEF956BF561043E0DB96762C3B9365247C151CD0607551BF8D781E0CE84D23EF7B6A3B67B698CF3EDC2DB9D968174C0A26010FA7FCCC5F87E8B25D12463392BBC404B22E046B53D183A6861F6677108484FE59E41077BCF6C3759663112BA951014F40952D29A159BA3F838A8CED3707E45E0837DC62D0576A6DD12F3C75CF902636DF5FBBDCD9B19037E69091B26082B7DE2EDC1EC5BC218EA760C4B534AAF352252043DC5B4ADA60A9DEE3218F18DE60BC654A90D82430567F0C591C7219042180FC8440B5E422A4BCAAF92553BA86B149C7D5E761390C52EE0139000595E1712938030F387BC886C7E66BB11F74A6CCB5CA93099DE06A0665A1A99E146E480FD80D7ED360E95FB3B2B08BC2354DFD56BFD4031538F438AC102B73472DFF3DDC93BBEC4F9987DCA8DF79115892A004E86F4FE8E76BEC145A19C013630DE218B3AE3C325DD622DBF17897D68833B43E8708349680AD1836044F09D0A36A00ABBFB9EB9B9FBC39EB71DEFED6B2B86F4B85091A2A1C6141A2D74A8B2F11E7CF4B5BD0A7605F43B752F1FE2B5529BC0B913B5981149F8E3E23808193741F152D77A1018498B0459820A8E6EB661B63325D41EA2E80D071417816551272EDB519DF379E5CB0730ED933597E0D62858275390331BB048D21F753FA50262FE9ED6FF00F54FC0752DB016A3F5F8DC4114DFB760E8E9E17A3B876CB7FBC3F443843A9DF4626740BD0C511BFFFE4F7849C77EA64857C489C204DA3FBF6C08ACDD705D7524245BD23E3767C6587B0A70743AABDA3434F0969D007BBFDD27968C4E7FBBAB2621EC26FC28FA984A0E7513C548F5BE67BAE139098873932BD651FA85F8978F8A52CA1111C354AAF07728A1A4D8E8BC45CDFB174FD8CFFDB8B23CEE7CB7C7CF2CA590B93C4EEB403123B2E10293021A737B2146B21327C0F2FFB59176D1B26DD3A1B7DFE3467613207426B3253FB61B0E42969E5F6F01A102699083010D5F53F10C36F0C69EF73B350B144FD295063B19770552CB2B06F215CD5F308658DD34C12E66EBF3A48DF9C81EA40A728A035E4D20AE4172A6556D3CD5DA109E0D2C5C40F58F104BE11509282B67826831A9560584466A93860731C3F88A293685F658C15D4E3A12B38EF63A4A175F74541F0AAC499E3916A5C7FA3A2B3085CFEDA45939C319B39F887705B9F089C90FA38D6269F04756152D6B58FC22AE8A16D1F093548019E9EAFD24323AEDC65FB80FB9A9950F96B9AA56886A9695BBAFA19A9DF70A97EB73729915AF4433D38A2ECEA40ECE0DA71C0EAEBB61D5C906815135882932B2442901DD719BFB3386DCB45746FC7603E1B57C3032D54AF98A528F3D2F8D801026CAF94FFC0A95258F28AF7BFA05A6CDC6DBC84DAD9F7FA520A708EE18E6ACB316235479C49CE5B8F0D896EEE70293F822FE85E9D15B5F4511CB2E5C4926D9EFC11FF931B465609532D3F78ACCB08B3C2597AAD082852238F24DE905D433484D041C9C90E1F9BDD14524EF593ADAC25B0EAA59F5D0223DE157DD2AEF4364227FCEFC25DC1E98785C40B8F491DBE834713C9C9E8CCB72133351C8AAC3625A3337D637C264D9AB02DE30D78A7AA54891EA52C96E7F061AFA558F5F661D8752F54DBEE025A68B72E205ECB2D14EE84C7DFFCAAD8F2829F21B778D85BA3C590394AD4DE39587D40EAB0915A3C7E7BC89BFCC7566D1F44D250FC3DCA327E7DFD2DC7E04C01C5773B7DEEE558106A3A4D7BDA8347C8F5C11500551345E963A34FADE1AADA6F88B7F73C3206173C5B5A831CB308AA338DEC57F0BB4D0D43B09880E2E150D438DBA83AB9F49B4C3B812386DD2E11FE992B32DDEB5F0B3F2F100D989A6482BF705E190E8201B614AFB5BA6736D0EC81DBB35778E65653F38F49694B85B0E78202C3F805FEDBF6EC5795F93966DB9656066944BC2E52C10A5DCFF5BA68F008C40E6C801D16EDD033512B2F2F5E51F3B49C415EEADAE4F878FA44B3AA6965BA6B7A118297FE5993C9A3EFC22DD57369CE8FF709D835C977874ADFEF7D8D252D1E8F6F5AD548D8D14D89C72F2294F954C6CE353D0C3F43A76BC5E3BA7C0707BF21E4A4D6EBC4B99D34506B4AB78E622BC32AAA7307DED2F55E575EAA6A601E627F09DFE02E1CF3D59D027E7AE1DBF4C1365231B724B03451E79A3512393C843EBE474D29E3EE1828B1010A746FBA2E6483A5F29336A6CF0C95E9D3B929D1FAC334D2F391BEEDE2F0DADF399805B4C039E66FC2076734DF2062A09AADC69DF10AFDEF8ED1A15B5D81041C3B0A04E1A12958627B58056FE33397BCF5EBFFF54D34FCBAD32906A5685EE8A4DD34DBEDF4DBA832F24640F090CCC21701A4B35ED37DAC3E6961EC89EA0815751D55871A13125D734EF178124AE1F593D89609D121878B3151BA96C8347B166558FBD27D4D201D76CDF4774244CEA527896874EBDAF9AF7293AFB14A4E3719D50D9C9902B92741BCFE0572D37EA11DA57298DC9F710F3D2294E48F68C47D972CD0261508482EFF8B290F52737E641B61E9926EEC020FDD74A1A0722BA534954D4CEDB3ED44EB255069708BCE9A22564F5B4990562278E2E89245C54B8278EC17C8B564157E87DD52CDC1A67D60DFDB6CC9ACE96A5BCC77CD33A10C506660548A167193A6A13FA6FBF310D803BD732A51BF85C72AAF8688979591C5D829EF4A7EEEC82017CAD0880209C4A64A0EA4BA22F40D26CD559ECEB9C879AE413D60240E26F88A7DF0557DB1E0BF938327DC4CC0664E0B40E9D0C67A431C1580635BDE040FF2079FBD5240D2DE2DB112AE4F3411D0F5908DBDAED1515163B621A66CF0F3D80AFA0E0B563F3AB81FD06117A7F21E7AE2FAA461EFCE961FEFDABCDCAE27C20F0114308BAAE0228D8490A0A840E39BC9A501C0C591CA28FBA025E145E4FFF4B432A161BD821FD862855A955035C1ADEADE98CDEDD8EC0BF0881CE6F3FB3B69501B164FAE089FF007A923F42546019844C06387B847071716B30491A50A836DF913DC2BA22D0DB14D18F848126AC124E5E9A004B5473C606AE5402357A93FBC7146324E269B6248B43CFC2291031F7202153CBC4563FBB0E6D008D6B0DAD9A02D03F33FBF8BC9207199BBC19ECA800EFAEBB5B7E1F8929846AA2CFCA4B13EE3652477FE3EEED93B63CF2508A1E540BD35250FA40F93A41AD70A4E5B547006968106531419E8DC60E423129FD627BCDF14BF0D294984BE3037D4F5CE6EB8AAC28744AA31325BB32CF85D95F04573040FAF554D87BA7E1BFD9CB37D43E2DF6A8EE09B8423F8FAA8F0744B0F383FE9AB403D5B77F8B2DA1E26E3BF20E5C195EF3415FF2DA74003B9F82D74F5A4AF4EC1F9E87E2ECF50B362990FFF432FC7A986578B0D0166175F087DC8D724FE43EA6D7A541AA7E5445B0273B41BA7818A96C28265DB7FC729FF72C8DD635269F0C35D43D8CD2A0D4ACEDF13C75130F17D65C57A9ED2D26D5A6ABE06E40CC7B78D2A554C0A2 -MD = AE38D7763D84CEA88E468ED4338DA58F4E10801E1519E65AACC3C6DA -Len = 32351 -Msg = D4755C9D1E9091D063DF71D0C570C5A602CC001BEBDE66EDF063D2FB9B8E000E68A4A1141A96F2B44CE137839FAEAEBE95E7BCA974334225E84DCBEA58CFB534644334F1A3AEC2466AA06C0C6245EBCE4F7F18A7E8D4E351EF383698B548F0BC727DB7EA811F83DC0AB7F42C4A9D334D04C5C697D59BFD66355C7D5A0DB26C445497CF2CD7464803374D9C82423FFFFEFA937004AD974FB609F63FAFCFF6258D72A483814341C7453025142060107F3318F29CE59084440CFF9083150E8044276590C5C4616FBB07FA882CB24F0B47CC0273110D3F806BD221ACCE00FE4323C9D55AE8F354ADFD3DDEDC8718DEBEF546A01B708DBCFF6934613C3BA326792A85A879EAD4A2908052BF928B20EF12460F0B64703D2405897A1EE1675B72781319862BECD7AB1192E6BE632E790FE1042254FA078A509BF8A5040CB690FB8AA0B1DFCF2DBE0E8C48EEF406C6B81936AFEBC43FB05AB05F8A36EEE149C1BDA013D96D270FA65C84E49E91AC0EB4B0D09C15956D24137BAA1B19C2E31564A147C3BC01D359818FEFE9511F0BD71162660484B0F0A1DBC6AE0ED178C34D5B9B8256949B7C845C79BFA9B2303120B2BBAFA9CBBAF74C51A74029B24FFB567D0088A05B4F1AC3817980CE1C027301E53EBD07F7346C3E09C34DF98DAC7ED9E4C4DD09523D8DBC7F50E169BDA586E66783C8CE06245BF382E6BAB7E0C100AFAE16684C3C7721FC4E7E6CC65C0DC5EC7348EB49ACB1BDA18D393DE0DB3029E809EF3C610B6D075759FDC7064C4F9C8B781DB3C6C885EB5FD4ECF4535A58E86901366B8BB3B263B21516C17D2F38A7DB31B2C72BEDF54046E2D85EC3F4AC892497519D94BC8726262A68107AAA6840B3E3AA546A75AC4DF67826969B59CDF1E4F235D15C45E63C69AF8D270D002A3E6986F1562A72EDAF71063A3D65F27ABEF9EFE7BCAF1232C800284A3508171DCCEC2538922D4742C22A96EF25117603A2DDEE91E25056C9FEE641ADFEDFDA79A525C4FE4922B44B6667D11788234445FCC815FEC34BED88D2C896D7666C1542CC007CC39C43E0953D5E2051EEB9ADE774F8C9E3C2A5629C5B50661495D83447164281A4D59BD5331C2B9217DC25B05A969AE954B0193563B9D053A4C5C354FBFF825C7921549558ED7E4E797C95F93DE1C31A893AB0C2F4EE694D5CA921AC8B9DFD3FE73F9AD38F03E2F0D4D9B5FE825586E32629DE4A93F6ED46F3FE9BE893340DD96FD562A275976DC275CF6E9201767651507058C999A3023C1B192292583B1F74A115D6A326D482C72E3BFB46BB54108ECB77B254FF684812F0F8306FE1619F1393AD385721719149E9A07898D8FBF49F65143CF8CCC33DC53AA0A6E3B777C527B1DD75117E0B93F9A3593500054E9B3076937383ECC46351B37469E603A147A3FDE8A06A86A81A9DB4DA9011D4B2E10CFB7F8517319311A397B5C9D4B9CF9DA082177B324944D19086A2FFF7E3C5003AD3B97EE9641CA7953D35BA7DE821168D7183C79C100E6A89CE3CA9629A38099103FEE8250A5E48F9251D5542EC904F84C3331A31DAC305EDE0D3BE168152E6623F0AE3F3F89D22F3974ECE1AA50B2FD8D5BB1CDE883B72DBAB0E8B6338DFBCE28FB06014F61FC9DA212D42028CA58F060CC7F568BA0E1894102D90B284F7080E102768154045BA80333D8862E187494795C9466B72E9A4FE0CF4538CDA43BB514993549E841B039599B2127A6A92876507E3188FC61B53C9CF4A063712B51D4AEB80A52B863713D0A5C3D410C0BA6E2F5830CEA91AD5F05A73CA14B7675CCE17A9A8CBAE917533F7B5D82080CCBC866F576E84E86EAC04DA694334D3E527C16CC4E0D8CA972897486824ADD588715B4EF8B29305308CA77F4A622CD9028426C13B9E958B5BBEA51AEFF5635500DA5DBBBDC47E494BAA51428FAC077E1903C71FEDDF415B513E94B7E6DF2F8612E81C4D7E539B070EC53478A11C2F54824DC49FFE3DC3FB440FD830DA7C1174B022E23ED180F1F75DD77E7AB0247CD1412EF9D834F0F2D08A2EE069F0316CF8D63D11C42F18CE6E233717425BCB5E8A4E565C1041CF0EFD86A3389F3B9AB6FDE3EA4354704776F14337D1A0131D7157A23E144FC02212E272740102540DB5B156B052D0D4AA4CB3DE23D547B4508BD8EDA3A9CA67C88E77108B788F2A16FA2B1579D12A7DDB013889D8E3C4423E3AB38AF71B5726AD6086DAA2EF4C7A99CE44A099604990391AAD49DA407B4AD39340EE1C5814844A3A0554FA81104BBC5EBBDC02DCE6CD1D4B7C4F7649685D6B32285C82913D0E7489D8123398A18140E0670CDD30714C532EE52611D5EB883F2A2309BA370F4B314B6FF1F1813DD63DFEDAD45236E056E7296D2E8D40D3E0606DA6F457470B6C6F757F416226F5592842E0E162E6445DFBF6FE07C981EEC58824685ED6B785ADE0C09076ECEA270442FFE7A83B10D64E20A78CF94200E08E3A3EC501A2EBCB1524B5F11D4B7625A78147D8DE1A27BE4E95B64BF0D5793B0A0D13C1CF487C158C91BA1CE7642380FA51FA1035690750F73440676CB7B369AEEF521ABB6A23DBD16FB3DA0BB762DBE80D43BD4AF9CA513683B688019D01D50147912968A4AC8E7701CB35B88B7A2587D640334B915DDAA22A316175E9E9D24F29EA109C34328258AD82F80CE576F26BEF8C7840BEC709773B97B4F94282F80B884ACEB9473D078CA37EC05FB088C3AEA4BBDF99D2B0C0EBEC8FE0DB182F8AF68B62A8744A00AFFADEB3BB6018A1DA36C0E5D87864FB659DE6374E75C7EDA2200548AD9F2764476E8B67E8FCE3B862A14B3E8A64E1F13288606AC9E884CA65384226A254A51BFD5CA7FFB57B66644E92C1F007FFF0F874965E60A75CEE3341F3C9BF83865E56AB879B61056727ED52A1C420C032DDBC59DC72152C1E5B31F3CD1D8616413279D5EB1C7F14C07CB3940BED03A495101F575E7428D6322A862F14CF0801E3F4FAC92C7CA7E7C354075FAF3682E41BE92DD8A7920A1D61D97C02B009EC07A08D07B176E5FB49C62C0ADF5E09A5BDA2494B3C3CD7FB1B522E0A9174B898000EF710974B556B555E5727988561CF1053BD4785626C4ACD3F950DAF0FC39A6830541EB83B16DD95FBACC7714C3E781BE19929AC4ACADAC6DAF897C4FE3FFAE7DDBFA0C0C2EDA36EBD3A96362C3C50B99CD830629B407CEC83D9B23C557DD2D7EB4FAA1FC1709F4D36EA837F4570D3A0A94D029FB6EEDAA8F5300BE978C0DC618A54113A037AA10C1DD333C230048A74BC890320A13BDC00BF1F9B08F76015D63CC8760F4A6D4CBE0E12B76C92CEEBDCFD9A2CF28A162FADF1F8611E6E6DB811ABCF633BDCB7367718F861EFB389FAD49F07AF6750CF3D4D608DA26A96612E0A7DE10B60788F051A0A0017DC6A3C01C4AA0B149BD4327AD75DAA6F2830E7D458CCA7902822C872567E3E9B4FA196DE27DB54F90D1E2211FD1E53681C83C1C89D9B607405D43F8D7AAAD503F53EFF078FF00F2B8A64F0C94C4A00E8A9468657BDCF2D7DBC09B812C14E8FA48920295CFAC5E5D1407FFC41395390B01E5F0E4AF646EBF88917DE33C47986606A4FCC6384687B1ABFC10918445F48B9FE6317FEAFAF9F517CACE8781FA41A90D3589D51D699EC940E065D12232712F8C8168FDBE6348E844087D0044AEFCFEDBBC966D8368040AE7B01D4D724FE2D102E3AFFFEFC2C1DA3EC6EF0317AD84B48BC5A91264079B46497ED2B87EC203D3E2652054B17BEB15802141AC465D5EBEFA9D4C169B710D8060DE69FCBF9943DB01C09A67F9094CCD233BA71B4EAAFB8CEB385623FADD73C06C2356B6C45545253F31473EBDB17C69C82F033DADBF7EC2BE09F30613B7A3C84F18C5B007527CE56E56B89DB88FAEBE861033F7E2FF37A2B195AB649D759E4E895C94FD7F1F783EE67D0092B9CB8306423FB4A2D16BA47BAE4EB5B4ACBB79F9113BC2F8C8610FD122FCE7E6B45D38933A27D8662180A7BB1ED09E062DEFAAEAEE2BC1EE020F226C65C6CA9E571F93923414843BC659D5F30A9B268202ECBE5D6EC955E9C78D4BCD6E7A5A38F0CBB8B5CA6595C3CE0328575AD4A55083095759A9318DA97D9C699E6455B10BCDFE417A12576799AB34447A3F2A92C3E310F31BDC6ADAC6FD159AC9182681ECDDFA5D93B570F82B7C3DCFD9B1EE174227CDBFE682947FD3056407114ED6591F9C596DC01C778FD5E77C07428E83383DEDAC3153CFA3D5966FAEFC5F7336972A14E61CDC3BB54DF4E763F86FB45BECA19EE356F21CB3155B9ACD98AD2590847B4FDA3FC87965FEAB448E0C051EDD636EFB415A49579200F5815C5D73A91707D6F4A521EA50D9D8C837AF46DEB46458C1014FF4E8681476EA9FE5B04FF1CC41235CE2A7E433C4188F12379D6934644A1BCC5199F94026DC2F9E3B2D65BEE5985E1F9ADF06F44AFD2F5EDE496A99FF362FA61C11BDD67572C356A9E84563667DD49CB79EF83F82E02AF909D6CEB88EC8F7FFA10CAF050AE5BC5A62027C5C8468F4EFA4A0AEEFF70AA933023864E72AA7F36ACDAC0E2DAE9322DD2F3107CDC4B77A31992059B78D47DD0E616127C097E40D365CA31C958ADEE72B8CFA23C2FFF7C86560EA16F6831B92368D7C2123C8F24E949493A1976ABFC9AAF69758E37AD048EB8107594D1C8EEB2C2EF452E0201740BA4B8812B1979EEEA6ED176DA5BDD6F3AB2F0BA06405320C8E09565A67228DCA571F12D63E72A5A331B129230ACDE6B69E3FDDC26916CAD6A323660ADE5E117F31F9974A3303D67DFFE5395AA1476F5C54E25EA74360514A4BF979D83C4285F5F57B0CB2826FEA4F748A2D575AD174058FD6991C609991706678CB8E89E6C09A1996254D90A832AB7A45E90EBEAACBBD06303B35E21C941AC08BA6CB45F7B0F29637BB2CAA926DB6D75C43B20002CC0F583C88C4A92417825264504B1A3DBE4902A0A99975EE72CD74E3CDAA0C45CF46CFEDDF467D3CED955D8E8BA68287870C3BB743ED7576D2A35068473E3CE38A817781835A4D255D6E31065E754DDB3A6E047BA0C509B94A5E8455CEA624AF67A636405CDC638D883EC5A883413A416390C17F7F7E55B032093E9F8A31F669307AD44AFEF485E51DC33AE4DA8A5DDD2600BCAD2A06CBF41EF98518E5D08BB562CC7BE331503644D1CA8419FBBB79E703131EB1ABC2A52F8469AA35FE7F7CA56603E69CC0B2AF01066C5E148DB7BC290A3EFD8898509922CFFBC20F93CC7C9FAE63F1D9FB9247C2B8EEF47BC7007E27B6DDDE7D6C8AFC2364D4D908D8BCAFBFDB7EA410F95D1593749FE84C6920003A834F29CD10E13193FE0F1F71EAA0737610793AE623D947D30047FB64194B1AA4B86012D0A4A1D7D15D13D47D9DD33E839722D1596085F894E7D70392C647E530D4E5E84FDF3B4069B532BFCABFA179470654A247B8CDC761D731622FF24981784EB01CB3B230088D4D6EE973608A8083BB38345D4F48DBFDE5EA188D99526D0B1E3CB4FA3985504B9C7213BA63D50E70594B664A6DE9BB19CEF41510D3740E7B5DA4EAF97C8E34CB892689B3E66E6536A8672CD9ED6AFC80680AB1A9542C0D519B5B0E7595E6F8768C6D172FDCF8A8BACA74C85C10BEAEA1FC1EC71366D47E15242B55CF702EB95C503C8CB4EF727D0B208A2BF626AC3AE885BEB9A3494D9A5281A78509521CAE027C46BCD7F34D6E8CB6CBE5819E2F220BFD970B4F13D1382DCAADB809C028664 -MD = C98334CCCFCCDA31146B0E9047A65B01EE206A9F307304B24B86A3CC -Len = 32414 -Msg = B55F2C0EF1055AF49AC6F2BFB6AFD9F389DB7EEE0235385B3BB35CC8CCF56DB11E1926686DC91CF7ED8AEE6B08EB51F15D233664AEE22388BA1CD387E487C59BD3EA2CB186555B1A0B85C8CFF0118B306BD29931FF88D9AFE81EF647A773604D43586672F086051F874500C5E273772F5E7AF73A97316187BBBA540A2234423EA795EEC518EE595C43CFF366020BE6776C2748757D06332626AB99F83E4765A6166729093C423B7C783E18A1E277FF033279DD3EBE513C60B68ACCD7872647A1568F72A5B7F67CBDC18E08C6BB54D37A77B44B1368A11CD61639228B4C5550A1FA82A531C56C6128580AC5E4000D7A2128660282D1608E12843D22BB60122221CAA0C7576D10D819D68C35FC3EA0217F2785C4B216993CE0EB2BD24C92A1CC1C1221C0E14A5BC9E4144FAFFC02B82541115177CE6ABAA664E29DDA742670DAA9599DCBC701A420E341191BE06CA755EFB676369A64251DD3CD13F13FC38AEDA434705D66E1F2059EA4A5CFC9AB823045632804691462181642C25AE920AEF76989F2B5A1B296818A9A514B027D1FF427B70E6D5D1B8D28C26766A5359B6D7B9817779D1807E2B3379BF2532378CF90BCD2BDDDDC8693479EF3BA41FA7DEF24BDBD6ACE91CD7BDAF2ADB1F5E7F5E89C5A5B6DFBA6C6A163D14F911E9FB4250CF00FA5616BB804FE9D02E5997AEF58A236343E69B5F3A0B2958328DE50847BB9E3C881245890BFF21C383ABE694170A1B48426D7E5BFA29936B8CEC844E9A2C48CE0D414BED60F823058AC4E33B182F6157D05924E6A848CB632A27E9DDDF685C8621D876BB132837EE3555A9979B7ADDFF94D8740B1D16C32C96630F56BFB960474CBE2AA57B6DBD68926F14A9BE4B36AB74DCBF8262D5935D9BF0316F9F8E4B586FF16B78B525BCBD61A68AADCB682DBB2D56AB1D915AB58843F6693A938146E80769D289C6C9E269AF2E2CDB0EE1C5751D1E8FAF1469BD6CC283F350DBAB641CE4904CCAB27EB7D30B72044ADD868DAFCE2C8FAB43B7DCB426FE5E3FE6063B2424FCF872E4EDACD56B15C432821338B4D70974FF872B7C7441956275B0189EC97F0EDB31AD8DC1BB11216646ECC19B74D7A64F5FCE23B57A47ED3D273B4179F75DBE7107852C3565C78D0539B693507B3F2A093C7075BB5DF362DBEBC6F58542E06904093093F423F4A8F8F92A007C6EB16465E8B1CF4DF13B62431D2CBC143685F93440807AC6CCCE641233426B11680B1FC9A6AC3A4D74CBE4848EDDE39364903BFE328400007EA3B8739020B400A19A125423B9ED9244E179778996CA2841784C71E0F506E56F279BEF23A1BD314C3EFA8468A6F8DF9FBEA8B147CE2B75955DE105B9DBB9F22088267A6FC0B261CA59DCE47F5EC1EB845DEC3AC4F7A78267B84034770241657DD3AF59AAF8E35D007EBEE7C41FCA367E8B1FB4577E0D4077B9EB15AA41D17F3041F05C69FE500ED3AC4724F662C7B7035A14FC9AFE87B263DCE03D874DAC82243D6E7BB31B7EE6EFD9ED694925E29011267CDAE30F2487F12D49FAC802F3A889D7566FBD97F9DF7256D9CB46590654E38373F27E25C4A6CDA883E7F8DCC95E46640DA2B116A07590B932B3E46D521A0A380C42CB039B9203DEB6FE629C7A42B1F000AE921AD7B989B3C0C64C390740CB0750B5727F335DE677E9404C2BBE883FEE57C554DD012B509E6A681F014CC17F1BC85629D79E56A06061550ABACA572EFA97520D3E00AD9F52000BCD1116458F85F9F15F451138AEB2630A934F302165DEC5E4D6AC612DECB0F07EAB15DF087E7C4E83EB653689167BAC0ED3653ED484F909DDB5C91F008668E56AF806BA8B644F217D7DBCE86E6B7A58AAE86FB361B2F180B829DA090C25FBCD3F8A68C7F29BF160759AD4D6435A86C984DCDF1D2325610392F141FCBC0F34F9BF047B553AAEC4E63A986A18DF7C9A2CA383E5A19FF652ACB1FDFD52F6BAE3D7A1B538FAD88205589F3DA49AE65116A371320AFE8AE52EB9243DDC148526B0C7735A90BB839B0E8077F18D8862F69F05FC1F453286DDAE25B08005ECD07E31D9C0F357DC3AA62834888C3038CE64044CD9902F4617EBCE3F738B5075EE7C2CDA9C719971B63133450C5A372ACEC1EEB1AB852CA067E620609E07D4D96FE49F944969C1FF1EBCC89D8725FA1AE47F1257791D5A5DCD630B74A9EFD4DA7DF7EF9BF331073D6E2F860093AC958A3533A777F98A1EE54DF6E987BC769FD05EB8ADB21CB4DB2494D3AA449C9CC754289DDD4E92885BA3CB5C7ABA8BE95F6444442C7999574B79974BB02317EF4F4FA7D8F97CE5A5024EC1D89A731E8F5706B687C24CA87F1BA42F95BC85F5E6B474E54E38767D6F456305411F8E77EDBE2A7D3D5D240EA41FBCDCA06043D6BDCBB5ADE52C0D04E0352671A0FA9D43BE91753F89B2D8B99B3D7F11066F2DC9A2F10C68CE769EF9249DFFB7D30F4F64CD180BE7E22B948F6F0720F829A596EFF42735936D14B28BE0FF008295FE31AAC81ECCC5D65EDAA17B6F348C9243B8B0B1C55FAD6C9B36257CABFDACAE639898E1677610CB15BCE792C51549B6D43A322350AF3317350C27E4C3D104F94C35830D4F7022CB42C3024356627758940F2694A044A50D4E2CFD2D5BE23AEFEA5AC6715141E3673D6509DC3275E3D8D9BB6B7769CEF6287821FB14A9079BD1CE36EC2E961D30ED377F16D23D402B687F9B97230B40C48A094924F76A2A1B5B493579D93A1890BE9E88BAE2A78E1841C9CDE2B5247A83126EEEBA193A1C7C52CBEA6DE760FABF02DAE7144733BB9E5099B0F1596A106F717C79445A2F659FEE885E5E20FFC41DE4774A8C8EC83984C821E9FF68C353D9AA9F12D1F41223CD3D66AEE6AE3B5218149FA9A1FF60FF71545200B7712234E12032A79C2461503EE5B089ACEAEB5C516DC5FE73A04AEAF004AF4378D47D7A3270578B3CA193D566768C15E1D4054A3C88A76BCAD3A1B3481C13C9B71644D9DD78B20597C8B97F0DC467F3E9720A27D7B364F038CA19EA0DD486DAA5F89CBEDFFFA95AF04A632EF200FD5099E6D80EA799CF526B0FDFF854A2B8464719582646FED30C352A9FAEA83C442EE199BA7E4A2CB711AE7634F756E84180546062118A87819B9D8FFA564E8146FFEB1CBC66538DACAE4252792875B332A7346B58A2393F99C43FF6ABBE619277F349DB72FD75D71730C5C44B9C1D2D8D183A33B0B6B34086DB8B6E1C17DFC15439F98AF7D3821C441C6DF9C4D8F600640A02DB42F8E19F2A379D79BF975C4A6BC008A52C181805FF4B31F88DEE19896E366DE5691BE38307CDA858576C80BCDA220E333BC899BE8EADA9EADFB2C95DDD2D24DC1EA9B0A398DAF35F5124167DD022A70C5E4BB4035B67E6D5F5672C62DE823FF095714CBA3B8BFFB6F50F985DFBAF6954DC2A1D67DF447105ECF397E03020E8B1877B1275FBF1CD544175ABDEEE352FDB1AB98B7257797444DEA411EFB1403ECEB072E566043AB64889152B6F86AFACD39180B72BE8F9B934F5D4D27E5005823838A5715E2D9C3FDF2AA71C20A5F3EBFA3D4D8CD6C8D730BA4875F90776B95B31C0AAEEFEF7A5F540BF029A42DAC5C30575CABA61EF4CCE7195EB45487EC242EFA59642FBAFF2A45CFD3B6B8FF3408A3E16B03F6E9A3F7BCAFD7AD4BD0BCBD433A8B3E48ACB9832B4F44FACBB7BBA832DC3BF7768FF79E922DAC71EA1D3B6A9B9D47A8D2115504E70A36AF69DAC3BE982E54DE86AE1A75C22A4E5D2CFCCB79860285B689B3FE15AABE664CC369FFADA3A8AEB29B206AFFB8E21CD908340949EDE5C7BEDC616984C3044D100FCB98D1C3694A6906026B9D35F97059366FD593FA90FA38E6BBFEFC794D7CEAD76C869272360A9C5A380DEB1BC37AC8D2A68D5AC0191376671BE9272A558F973364961F91F4CB830C842D1F9C0643E3709B1AF9353E6FA0B8E8F7A9E037DAAE9CB30E63AACF1A400BC722954C8FB40A14319468C7390BC02D2F163C66081CB06BFADA4C50F6BD9AC21C1CF411D25E1541D2E62A83F7F5679CDDD6F41DE64DD5D8B81913EC19E6BE93E62ACD6271BF956B63EB94D8E802528CFD48E1EF12B7BFDEFA0F6E36F2523C3C8CEBCBD626A7E6A196C4D733C800A98EB82FB88C4C91E2644DDC7C65211EF211814E1F4CA9604912D6A7B8426962530A4E7DF999A4A5C2E9357786AE011A925E8335986B7306CC5330C72D27C575ACE087E1B715BB279C2A751A8EA766EB2C3E86BEEC7CDBB81DF800FB73DE31192066AD8480807E4B1F2616B22F0743287CB728B15AB03C9E877E183FDA73B14782F1186AD091A5ED141B1F378DE5A8E7C16313F5550936CFE32B71C642DCAC7839F7A7BF8BE53D0039CB15C5E8250E2EAC0858925D477D248099EFA9AA27429FC2A6B455503139C9066AD6B899AFF6F857AA7088CFE2E6AD735C481226FB70DD58C35F0F78545489159042AD397DE9F6E239E2E77FE59C0088CEC0E95F6C046961E269FFC37376D6F3D6EED83B0DE71382E2FA88C0704B2A25C7A37BF56A3EAC4A6E0CBC5B72861153F8F7D1EC64BF3F9160B75C470BC4B04EB7BDE956DF2223F663EA9D207C61C2B44E3E4D9F08D4B7E12EA199E58C660AD4FFFE497ED177CD7374E07CBD3DBEBD66C9916C25342B432269E3B4EACAD906FDB76BEE45F1C8E1F953B68A48852EAAA2936E1986F770382E9E0BB736F697F83D0EF5D35224A01C34006C4281535F7129C1EC20B81FB8DA5FA28AEEED6AF0A83B7639D3DC72C73DBB45D6DCC0E24F340FB8F80C89BBB9B5E142CD36AB09E44FA81E39AEB8B150191FB666922BAA3BE4E2D76E3CB6CB9F1D234973C35B667C14793171B77997A87440D774768BC465FE27F555DE714235461024C7A121FC4748A32870BBD399DE5B4D5277B0099630B1381717E10D87BC9CD227C4AD2A21408E265708AF6716DA455C5234A0C03C88D63526FA01A950128296FB5A3252DC2B9518FBC74CF43BE4DCCC8980C8D333DBA77FD6B2BD5ADEDA185C13267CE752BC8578A4F2C530B966D659CEFF4714A02D76A1501C6DD9F6403B7EA9E27FF7FD248A91F3EE70C2FCEA1B2C4D903160BA2F049067828B17984276CD083A0EB4EC00E654DDE5469722A28CA031F2DE4C89C5A2C4BA759F2BC46C4BD9B446DADEF9F8C0CDFFD99B27FA44794B31800092AE8118ACE36E5AC7815DD161BFB8294C682CEC4B9BACB9AB38F2C027040260D0B4756C03D5CC8FFF9B70E5C8E8308243C0E01BDC3D7D0554AF20D9CCF09E0426519EDA93AE55806BDDF6FEAE5455A49267FCC87570B983ACC9BF8016EB553B31C83336F216059E0D8D2DDBEFEDF2901CC5DA3B39D08258F5516E1ED04F44484A3902A9473B8A68B4D9AFAB1DAE337A2EDA8E0FECFEEBADF679498C33953C3546F3A788D94F8BB7691DB2CBB2B2F799A17AC3E866AF5679C53C40277E8A4E9EE6B416657141AEF91758E4627C22647EFA392BFD99CBEE3FFD949B597E4C1AA67CE32D3687491344C1BD107D4C42D5A8B08B356B00856E4D4750B5D12BC3C435151F1669B2BE13980047FAE137D80C51934DCF6AF1B9D6D58ECAC387C6F35CE710301B73690947CEE7FBB266E21CC69BFC858078DAB8C4F946A6711A987ED32CB8A78781910F142DBC85E0FD584DE165423921413C51C27F61CBBBE4E00863149D270C4F0DF5C82B57024819DFE47792D62B113A317C22FBB5BE998F75E6B4B50DAC9ABF77D0F8D2054C3649CD7DCD16BA70 -MD = DC2C5A521B8F27A218735BBC1B8C70B6662C265C6E69FB21A84B75B2 -Len = 32477 -Msg = 44ADA524C191E37BEE5551831BA281796944EB0B8CA6B5E8F1073584EBCF702526EE1A4F93F9174E3AA790E69FB1B2DF36CB17CA29751AFB26D6092B7B9C83488C9FE4257C557BC14BDF774CE2AC4A2A5C03D7E15DDA57AADA6F014624E71E805AFDE5B27AB1546C35BF28D1AFC48A9C1A1C690D0A1EF0A15CF6F88E6F3DB0741946DDBB15084A2F935A5399CEC60768F25A8F4A6AEF9007D9E15A7686D8DFF8C931BEEDDEE4F4176C36FCCA05EBA7068449CAECA2818595E044F36CDFF74458606AB97578A7672D16A51C4E4CC1ED3826070CD8769908DD5190AD0A089AFCACDD0DE0E92B15D383D3C44F72962CB51CF3107011E263F6FCAC4D803B8B7EE857690736D6F4ED4171601DF1A07B78F70BC7C2760143C99D1BC2B0C394AE8F761E31D4FCD15F960C94F90B8814FB00AFB75BC8AAF000467E58FCDB2F6749EB0D99211478169A10F012D6F9D83855DEC15612BFA478E8FDE4AAD9BD3D3E9E2CA6A9D7754F5CCC746C6C7007D3529D77045F1ED1D056669FC0BFB20325E56A6ECC5656FFEA1A75C0422C5122CF8030A5D8D8118DF2779492037C290FAE33F43D3D143266DAB1EEEEC4401CB208D652FE78495631C763B6ED95C0C15276ACF3D3608D2C0755383D9AEFAE2BC6C095B55F4A38B53FD9F57ABE79DDF3BCB4C8C472576201216A7A3B9FB442AD1B86E79B047ED4620E62824B637EF610BC090E36440768B03B3ADD719CF70B3D8F3A010AEF2A51FF0DEF899C5F823D7AD5A26F1C40C1817CAD12D395BE6CD4C39ADDBCB0495BDFAD302A537B9DEA0AD10BF11AB144E4C0674838491F0661F8DD026A3A79D48D6845527439C362C6E7D7B9551A82EC4569CCD9864753A52128D56A8E9856F17EA4F6FE08274B567668EB15D7C4593B108E3158509A29967894D5FBBD9E4BBF6DCD8154B56DBD271A2978405DE60012A1F1D7F35EB3CD319E183694DAD739F5B7476F246B4081398D8FA3E2BAE7D2BE2C49C4C4996156A2BFCF6883061D5E46178A449E5D230E570A66F74F6F77AA054A57B93C9751CBA8431C051BF83EEFABAC3D57C4FF21496AE9E5BB2824DE8E8E37EDAB269BF2705725D6B4F72E6CE7E4E830B94859F4601B9717965ECF7ED0E697AD02C3C260E0F0CE2E44768548208E0D976B844A38D7E7133474E6ACFB1F83A6E787718D69126585077805B4997EC1E3624BEB02CAE23EC241F3A2E6DC175616A80AAD03E5F5A2C8A591DD6F82C10C1180E3323B24AC017D0A347F2C315A682ABC626DD0B7AD75E74EC9758FA6C3E0137F810E221EAECE6CE1BE611DA5098302F6DBE37D7E9BE6EB4795EC3277EE38423FE027E84EBAC869E5C18921D0087D72F6B5201BA5B4AB22D8A74DDAE445322A429A241851DE208E80B5493DCFDD3024E32F34F8FAB12EC0FDD332DE68B333D432CCC3EFC4D1E405C24332F3F6A6CD2E5B98D1AC2F6CB7269D94F25A0564C352419D8259D85C29A50F19732C8A3A27357DDC8542157DEB13DCEAB8F9672E19D54616B5E390B13826A474C5E8281E3701C99626A2DA3037449FB20DFEA2C6D8C6F786F072C6B28B0C78DF205796378718598DB28635CBC014FBD8D27C176EDADD308834DCF8835AA6C41156613DD79DD15F5ED2CE7922ED30D6986BCAF5EFE86A5494919E1DD04CABA5323BFCCED1F11F894294C9F4C1F8A9C813266C03F2D8F7AF82059EF2FCE6135CB27FE496E2FE288DAE15E3297C92CFBAE23F896686C587C58898D9C2D6FEBF8B3BE2C873CCC2E5827EE0FB99DDF9047740A2FCB298E6E14025EF89F3509A1A453D33A29F02111B5B36261E4758EBC5864840F869048F6B6475A52000AA1F3CB034A4B677AABBF50850D88D811BD9ED0B50109F86284B0925D63FFA3192CEB96786AEC9611C182F5FF8FE0463E07A4B7531B597F2C933A168972830FDE0FAF5BBBDDD20DEE15B0388D97A378D231F4DD2E7FB6D32A75DE20E545DD588F18BC4275789097FF205F2C9FE32154499E6B8E410903976E81C16080916E9320210BF096559439913F11C3EEF6F330C533CAE1A08613C6008997BFED80E69C5AD6EB894A41A7C3AEBE17297827C9224552239B84EA139696A2EDC2FAD0A006C314B753E14BDC3DD03BEBE0F92C09E6C353B3DC709389386332B4DB493811F296B06B60E8478395833B8A66E0D7B21122E5B8027CE101403DED808AA80D9FC89D77ACAB9DF9DFEF4777E38F9CF60F5044E73677F7E5D2E3176C9FDC4E16D4689A2AB770D198FCCCAF01866B1DECF0188D6757EE292FEC021A16FED7E21BD34C141AB1688A5B24EB11DCE3F9F7E75040E51DD7603BA1166424A77D48D14783FDB077EF6A93C328142C270594CC314352A18B99DCD7C1CBFB8BEEDDB122DA9FCBF84EF730F9CF30F9DDD71FCD813A228E0DE10D2F87CD9F72121C0CCE80C12C1D8BF57850AC3F1C43E0F4DD635C2F05A23D7C7C8281301FCBC936CE1CD5B85D21A9173FF628C47FEB72A49FBE5B2759E4ACEB205283EBE14A1E14691EB3F9B977FAAB9D0DC82033ADF168F6234CCCE930BB619DA5699D71B5815A9CE247E63D3A7C18C497F7CA8822A0BC9B7F33884C27043E4EB402E844F45ACCD0128B471CF2880E3EF566C91A44AFF19625F518F60087DE6C37F29D7BCEADEBDB76DE6CD1AD7B0A73715FB91F05B1249CC021070E286E9E36EB8C4B6A5C09314DB826E16B9977C3C1E2C0967F50E0168643F9A448446F9E4B4729292E79E5F74674BD351FAA0A64599231E3AC35FF1B183CB096DCC33AC579574254716AA5F82E02FC0AA72FBF30755708CBFBBACAFAA8D45AB2971D9603F087591D0240CFABA604DA77DD246F6F7171B7BB32285CEAAC1DED692AAAB2F24C081751B6AFFDF8D1FFA4E82BB587E11A2E70D52E4915A5F8702615FF090D57339955081897167A5F622C5339D8BE10EFAD6DF7D38943EE4965FB3582EEC7133CF0AEB0EBC2295802A17EEA807789B7173A507D3C1637E9186C548FF2546E186B60317A0435E72E8923D2D33307609261D63AFBBE28EA191EDB893AA4BB10484A45696487CD58AB774D94DB72243BEC14D8D4F88182EBCFBD4328D8630BC5841F1FD7A75F44637E3FB1A33D357A47C1F302867B66308C1DBC56C6777054B992DA4CDA8D5C0641D026432456344EE5DB3C7DED09708C38AD85B76070AB27DB6388914E608A7F14B0D0F3323847DB01B303442E8D6671E2E3E7EFB5E5418457130DD15C4D3725143DFBCD79D02F72932968CCA9213C19CF25E04473947B3621A9B4C46F6FC7DA0A6894D344899C9308CAB0332208E6282C9E6B1D2EB9D7FDAE977A3A1371EBB917C704C77F993194F1735117DCACD77B344AC1BDDBB00531F2D1AE78C971D4904A77BDDA6D306AE804AAA9D19687D8500A21FB29F558711D7B20ABB0AD0A34A05D706AE30D04CF0EB994638A54D4DADFA82CDA4E91C28DBB9A0860EDBCE913CF1FA7E11FC6034365FFCC113D802FA287E990F80327F3DC3857429980F2D429C8687DDAFAEDA549A6B884B0BFE0E6782398AD899B9E3A30A7449010B38C3C8792DBE085BED7F4804748F0904EF0F4DBA278B9DF3F162FE5188D531638B19C674437CA15157E994CFEB7A52B705362C7A72E005CADD34F8A4D71723BFBE47CAE7D95798A6256C79CB8C15D24F22D66FC3A731B28654804E87CC2E982425E8642DD5F9786AC13519E2E2D0B02644894ED788D1BD1E920DAD196BA22BBEB985CF3A6CA4A8E7BA347D70BA7ECB0CE1FE88CE2BAD6DB95E8615C03663C8E7A5C675368CBEDB718F9AF64572AABE0459B55E1FFC5F98309598B1BADE9DE58F09E135F40E8C335F9F750D17C0DECE028BDCC73450A74A7CA01009C0ABC1955CB84ED825D2EDA35CE4F02D53CEAC41BBFB58594F0EBE39AC9199788429C6C5E1EEDA8036163B388BBC4124AB5DE62CBA75099D537DD7528C03B2865B42691B969AE3D82AADD1E4643861B300B0E8C1BCBB398370417A8312B9B85C04EA22546E9B3003E59D3ED25F252AF24E100C3E5D03790D02A56284DB083BD4742395FE02A561B93B2BDA52BED3706C7F6A62610FC09E743FE2884CBA0E7AAAE442CEEC64C488E961767E1218DE6846C2487BBA0992CA5F5901ED5F76011737F7F38FD560B6D2D09CFB4E88BFAD13273D7137F7250D086AB96CA228D8D48E2D860A713B46A128C3C46EB791C1B4753B9E9F9C6202AE1673C5EFE78B206BB596B015F5C70360416E5DAD7BC3808D206A72E69A84DD0A71DAAF88915EE8206A6D29376C766DA3A4C0E0FDAF42C47DD486AD268998599872D8B818F294F607092C044FCC1BB5486DC1891FB8A3DEA79F9F2C1974675087C18DF2E4C2E039F6D4112B3D0D9E99D9E4A8E1B2FF0B2841962B5F850BBD1007608DBFB90B342D4B4D27EA7259D8BC55347DF22A6788447DCEF1307352DE0FB2A2C0D7CC9DCAC295DDBE1C837C72EFCBFA185ED8C650A11C8F10D9E8B1B3DBC321672301483ED11C043D4A4B77A3045A5E98CE41FFD265B6C8C853EDF7AE2401E43CA47CB357D7BAEB78EB2EBBFB32D74F24D115DB71AE22B9C36ECFC513BFCB24AF3869C282640ADEF8E6D4AE4E3096734449A0460E02F3DAA75AB258960C5C617BA1797F55DDD529398EB3904F0ACC61E2E0E8145A56CCEC3C3CB3663F18884EF3AF738716B92F33C14E1F4F5AAAED915A4A87B013A833F39ED860C987542CAE758D44DA6501DFBAA56F6AA3C778F58DEA13F3C5D97952B81A11C6F68719F8849529DEE384EBBFCE29690AA0F64D837BB3AA18D1633065E3CFEED86AB6F589F9479F9497C3ADD6E4FFDA76931452646ABD83669BEF590B95A696959ED1D380092FCDA4E00B52F5310845A0ED52593F3D6FF43A9EABFB32CE2F44DF8E81094A01874DA4E33E3F0DE5EF7623D87AEAFA016D545AC46D65C6BF25678A1D0602200E08D7CA39A9F8D73F137B074062028F8919E7F920E9C8A1266F6DA3EE32BC4D2C1CFF5EB459BD19D995D34F3D66F1A129F53FCBCD5E51B618F9BC88B9C23AA751593056ACB26FD31A390A4998C7D35C0804AAB615E573ED1AF72FADCD4FE578CF4E570DCF90DA66A7E1A9A918B83F0A01E7FF5EB96567BED70424F8C735669627572717662EB61BAFB65F136D57F05C6238745B9A13211955A6037D6A80513678530280C6617510C644FAF81010CCEC14EA48652C8E052B1943DE698DE6FD050AC97AF5C564CB358E0FD63DE34E847471BBF51513C0B113E1CFCB6CDDA28FC22F5AD447820EDA4A7838294846094D590D6D8B38D7E3345841084E86176930CAD47FAACAE1A94DDF9F6613193C4AA786EE82C55EC3FEB9681F52D4CB283ACCFF8991D541CFCB4B02FC75BA6407CEEA68CB224096C7B3E4D3B7DA1D06E2E0A59B51090D1CB29AFA0CC15A06A2879D817C39E4529430BF835130D9FD067EECAA1CF7A104E07D7C5A2C90DD5161CBB1959EE6FD43A6EBDD6712A12D808E9B0F8771B48C1B37BB1A6C50804F8E55BD10876566F2527DFB580FF7C3BB8C5A82D542957E492C95FD1688A9A6638AFED54825956C800AF677A77D9B89576975CC850AA59630EE3400328A065F91685C1A851A911793B382B500512A21E16290DF3B06831A736D293BDB4B2A15C21BD20850F83EE6465CCA7CBC10CD5D9649EDC2CF92E435BF6E8AF33867BD837925BBCEE1CCC6D2FD808376DBBBE1EB81A11385AFC4009356732A77664D8682E1225231244E78EA27B871C1F4703B3E0A8E0E341901DB3AE88EE0 -MD = 0B6679712C8886FF35D2B92BE66CCADC9E540696186F8E97CCDDE4BD -Len = 32540 -Msg = 8D87B3C3E74CB203D50D0BF278516BA51B3F1317D9D751799A50F6C7D72FF6BB1FE56690C4B6DA1655189A4686F6FA18990C5D7E484D75FBD75E529307937A1E2B3172D4A11D29C87EB5C14592A5ECA6FABBA023021C652DBFB43F56428F656B66D03DAE9AFDF9E3F03AF13664A6523517D290A71056FF4EF5598B088C05269D65E4CB5A52E397452E87B69B9235E1196043300BCAB1F65CD5D43A0097A22CCF41E936596E27D457F1D2F44362F3E750BB71E57B1099D0A8B919954039D71C2A41FC5BA19682A52FB953EE3F3EDF5D6502BFAC631CD4D01029CA0B017A4892DF7F621E4E640D1D0D9E473515ADAE90A2C3D1EB059253462EBED7F1EC1354228C83CD7EAE472313E977B9D5B6D817AAA431BE8A90642754B9C5DC7E5C4AADF6B0B3B033E31B7B09723EBE99979C524DC7E3D910EE3CD2A2AE4F2403E298272B08D25A37F86E8795D7A5AE0012E0FC01CB3D4026AAF7ED2906ADD7680FC4131FAE9BFA50E3D4626F9510F6C0BA5835F31476DDB84170D232C8F03D96116328222CB1EBDC1FDA5DF89A816FDA3B9EBA39C8461D5DB9D652494EA4DA491CB588650F1044AC2FB2A6B973AE7B8DDC4878255430ADB53AE43FA3AD970920B131D1567080B4CE7B39236C72100A2F20127F4066FD87035E9F536EBE4596EEA226D56ACE1C74BAE9DE117EEA2006BEA883EF64EC5BB4038215ACE1804C58EBED384294CD4A34C6CBC3855E6CD7962704DE1E43591CF0FDCEDE236526D33D8C7517A373B148407C305D6B49C88A0B8BB9B7AF5F5E0B102C1DF73863AD4E5C431297D6E560E450D187C0DEFDA8114EEF5718B3D757AA486B8E9DFD4C4E894E7D22B689DE24B600C03C7B9BFC0455F995E1E407D2B14A07B230EB48F6D09702A39CD4EB384CACD6490D2692C006995AD368840402FE0E04EBEF95F3592734E15CA4F7E16BEDB6EE603802592719EFE61676C4C2BEB7D50872AB52EC570B96467D562262A3886A5129DFF0A7B93AB4E8BE876EBE2BCEEA61AB0BE79A185E21B6EE7766BA8637804830B6694F43DA0D6E2A38D3B1040DC4F8337DE62E124069A87C61BF072CE11C95BB4157839AA45921D8954FB90CA3022B89CDEFCE1C3D3C827F52D13BA935C13DA7AE6259535685F594FC27C5605E313BB6DF48A246D2D4C10BB51C0CBF1A6C00FC39730318A2E5253C4D079DC2C312FB7903C64701085C1E15A54E907A6C9C7CCDA2712D2831E401E762CABB61D31DDE1C2C39919974D31788BBB3386B0C24BD48AF10374D60B4C60BA3A187CD07151332D7AE7032FCBE5BEFC5BAC054FEF751DA917475AC3C221F9F8C61329C06F93854068794C5065311D4B0A9EEAE010524C9A92212998C6923F91371B5E4D12EF0ED9671898245B4E5001F230E0FE51CB04149DC4900E260296B59D00D852791911D8A1BEEB785257B50646640B0236CE19C277CC5D074A5E168C544C7D4E7BAF41FD35D40BFAE7E05DC0C619B06077EB2235588C9E1270013EE1EA3961CD064001F02EF3702EBFA69FD6CA3EE837C78B0E78DE2CA227A56668A479E19D1F9F2569300410E8AA56B8949AFC73246B514E1CF999CC84543FE7D2660BBD46F0242018FB3DF292AB4787D94A12845FBD511D0578DEF12AEAD071487D5F58364C1038F37404C4F49326892340BB694B6289DDAB2A6CA7042A066973CF7B1ACE73FB9DFCA05C35576DC2302FB545FE8814BA6EC527697D525883E03415029FD2331999991F24A113936D3CD780D8B6475CF4E1BE6487726E992E83C6A4E49519D7969B3A3651A552F92B5E728F34803CDAC73DA63FAAB09199C9C44F551EDCD02FCC19DDF08C24B8E00783ACEBCD00FF1FB67CD92EE352C6823A8FD1240F62DD9913FF12143902BC713794DBB76507EFBE40F665D124F36D45BD4180AFC5963E27F2A7B88F114F2045E3D9843D25FB329446F1CA3F6C60032E1C9264879E10763A1012610FC4FDA4A676B2EB9C01BD4118963451DE23719BAE1A9BD5DAB6D97D04F89624AAEA75274D472BC0A50696EBC26AAF7DE76FD41B8F2A678A5B2A1D2A13D572EC34158271D19CEA7EF527708C75B4487821CE3A36262CD51468DB1F78D018806348E9897B70B4C7AACC28733D6289297A9DAFF158ECD13E407ABA8A224CD40DFB736E898992530D150702DC1F31A970A8C4BC7C8B7476699435CE65F2F8FE8794F914B0E1191486E0E12AF725C6CF0D0DC8605331FE41A2586CE4ACF5E7E7B6E7159E67F11A909880A1D431FF7A4139E148422DC1DC983575E39C1A9D3E8418FDD61AA54C52B3F6D4F1C44182DC52812591CAF6E300D09ABC05C7156D45797C6A8DD8B1B183C7397C6D923A0D89D5652BCB97097108634EF91D6F7B59681A0406C37883D140447FD39BE9736A6646A32A117A66ECD4DAACFDF3E9604EF20AFA8DAEC9590373FCDCB32CF5EED13AB0AAD5D37A7D2850611AB2D1A360AC60F32AA82785F00872E8C3D745E1F9432993D7B1B251BBC4692477C33BD57AF6B4D8849FDC1F0BEAE6DCBD6728A62A28A25FD691EFAE183D55AD7CFD9406E70A1624937C00EE79EDD82ED1C8E4BC7CDC951041CFE5C7950DF78A24DDA0F197D98023F12342EBCDD5F3D4E5AC02FF47A9323929F05CA4AC6092DCEB7FEC3B1852C934FD4A3F73DFC4D59009E8E50D7363F4D58DFAAF65D2B6F499B452503E28577895469A4B944667FBF81596276D457776DB9DAA3F996CBD95BF12EF87C7CC5976DA0401F703216823EF0E7FC96495243D2CEDEE76CA5941E76291FA0252B08BE63C76D6812C95A2F3EC034440FE21F3748224B48BDA4EC80795AFB3517C281063C43474A6ED562DFC2362CAD676FC44EDEFA4DA32E24BDB1158A846BF38F565BB1F031F91DFA1E63FA28F2A358862DE6A9F9132520FD342401E4A15C17C228DA0A7FB718AB268C9446D796D26A67BE9F1C141C20924BF2AF66CAC872E4EF82C1EA2EBDEF899FE6548CFF1376453266AF2AF92BC349482CB46AB07ECBFE6E3F54B6E976D60847F198CB68EDD545495CC9069DA0E1C29CC96EE903AAABA7B20B337624EE6D207C56514A677A2A854C68E5F267EA35C0609A93751A3651540CAD0EC3552500C8EC6007357A4AD6AA7C5C2E5E2F576FACCE181E17EAECB9F966AAC37928366C1208006FAB7A944E74F58089B0DC1B3E62B29DB946E18A7AE71F23371C8290E988EA841401E2ED3063100A3A9A94902A27D65C8F3205F21667E37A38BEE34AF17BBADE8BFF30DC91F066D205F8CC29E449E2C7884D0D6A3D5E115D470FF499286BB7D96BD133A180AAE733B1DD9B46E99096AB5938E0CE59DCB0D6F4930DEB5B789904198FB0EF749CADD4927D4401215A97D103B754B5F60AC40AB2769CE0B370F7D95F49201D05D5105D662EDE3DBC370F598EDDB475AEFC8EDFB809E05AA5826561107FA1B88A7E431FBE89A5F84722394C308807B72ED8CC5EFAD483C7DCDB5B96653C1C84BFB85CDF2AE08431B2427AF96F6ABB7617973D5D8133C6C0C6290D9D0F9B9A35F15FA3609A82201AA24C05006A715D70A36F9D2C54E39569996B715647C9EF0D81F2933FE6909CA4585C3A002AA3911EBE24480760A88E160B11FEC33A07F23F03FB5CCBEB42C3690FE3B9308074878D82900578C44DE2C62FE7349DA2E7E9969D5A64BED88DDDCAB6417A58DFDEF8DB084FF2F19D63C48348D1E3609F9576A38C8319602A4816730FAD0ECFEDCD35D5C3754B391C707CDA86967B6E52D8092A7E83951E61D76EB2BE185394BDE2E3497097107945D0352E67B257170C170334BEC1A7601F94EAF13D1DED55B0C67E4DE1DF83C2C052A4A2C7DB14742083DABAC2BCADE89E12A1C17A116F9CF61DF7B82F3B857104CF3409ED539D27D8127F31535A11B46CB2BC2579E8618C4F787C2AE9E370EB227FCA80610051D28D67F6ADAAEE0A7396D979C6FFB0B68148E5EFDCF26911DA2C21E8408BDF6304CE83A702D36D7AB9DDBE6B0BEA34104D02584A6470C783511BB784F268DDEA641FDD44A535663C75E547184BBD723A0E747D416AFE8BCA6DFCDCC4E637006812051DC2A676573B1DC823AC1E057EB8DDA130DA457A4AD53F9D300F976A7C6E2419C23D32C76EC8BC715367E9E73CED72B93B510ACD62FDFEB981037CEFA78D8C201C731419ED02666B6ECF3E4B5CEE16A9E17CA3E6ACB1A7488E13B598F650CD88788010A7176FFBB1D766B82324638A0A39963FF7B7F49C7D2DE900CF504480F6C159CFC85B27C75CD80BC52892C6B2CFCBE1EDD0BF289559AF9303F66271EC62B8DDEA310B2D12785092B2F622B5A610DB7493206D62FAE93BC3B07AADF9B5008047601593AFF599F9F8963A5D5FE37FC5A195F0928C5E1B52D92756F5E6C180A901506E6594441E565030B6EC4938EF7ADAA3E70CD3B67E89F7946EE8FAD9F7541F68B692AA962FF817DCF6EB5DAD3740CDE325A803E9B657C04DC09375A4F985DFD947667609F26D9B761E3201C94480A7E7356864E0560780F8D23860E67CF961A1A0393409BFF18DE67FD06C5189856CD9588B69AD91AAFF76FBECBF03062C96913ADE560D9AD3CD0A1BE6DA42A49AC876B45FB1703B4297E5FA50E2F2C501226EC78B8A407A8A0311D5F3A856841FB80FFA2B149402BB4D9AA68FF78FA2A74312237EEC085C5FB21DFD57E6C7D90D11D561B520E8B37D926DB57B9687EF3DC43BE74E1443F8A5C6D6146122B978402D77E215CFBA6FE369C6AF5A111FB7C50FFEF73139730E1C56F5570A3E4D48A0B6282601CE2A263FE1054CBA2991016AC38EC943B8AA39AC04598BD6FE8A587045E79D930143D501397D91A9C3DE77160D6BAD546F62DE092569B01CA957CC0BD7F6A1EE6A9462327FE543A1BBD1A1B0387461B540A131D23BE6E400B6B63F82B164FDFFE5D15963255C14B8E2043B48918DA2798517F5EAA7C4BC60CD1FE3004D099A526F7E7B1DE39234CD359CDC911E98AA6C000948514695A17F081990B6F7F6F85DCA8EEABF84E46DEDA6446D78BD9F61DED986EC02B8DB7CEBD027E8C355664FBDF8A018F3AA4DF9D40AEC76635D15D09F15AFED80539946CFE1D1326932F431E0553EDBEC20743F971EFC111B1C3415708F6952654D74C45E8649D908D64E53268EA4C4366FB879AE79262074C6FFC128DD6682AA100279DD6BA29B48737336F5F233220B1F779D6FF145C31868344386818050F24DB5F54C496AE286CE2B1901692B7CEE13771BDAA3BE8615A3B3647CBC73111B3C78A62662A4D32EA1FEBC48E883BA5EC70816D2BBA7609E5459AB75D3D78D064F8A94F574F5F16D0DEAE55F58B3827E9BF8659AE718802A27174106E6BC2EF29C50CE82D37795DA2F7433127E749C05DD0FF8DAC0C8811DC49FACCF5524B06CC5965F93FDA0A58BD8D45D8CFE8C0A1F3A6D68A0B273A947AE592F0E1A93B41551AE05978CF0C0EF21C74831C91B7E7BDEE4E5E6524872525992F60FD17BB06B00EDF8E0F1E340CCC903736831E1D5622B97F36DC68449590385F063B3C4C9990817337CEFDE648C9E0EE5F37B75BE165357F01A329B4239C250849336ED3A96820B8450F15DD2F25563F1BC1CE7EA85C42E99F9C7C2FCB8C6A677551FBD90110CC9FD13EDF67E07D0F321BCCA824DD41917303E4471606537A3703848849CAF9C3D75292333E698E9A5C79FC2F8949B3FB0B9B354567EE05BE7907DC14D71E74B90EA9E1114AF015385EF97B90EE24097693E8433C7A5197B0404432BE8E7C202CA8500 -MD = 7503A27F704BF745B4E818F04F138107E4FFCA3886BCE85B50CB7A6C -Len = 32603 -Msg = F7A15FE4A5009C40CAA023559DA94D18FE7598BAB1FF8BDCE77BDCF6640061EDC5E33E728588D2A161C9EDF0F8E7779976DA72A343D5EADA8E89485791BBA8F81448E0FD9DBCF4A34598CCFE894F41BCA4193FF8ADBC462B782203437A7B4F5BEE1AF482BCCF9F3F6F9F8C0FCC1AAA8502EA5E86F912F01F25D465D5C0B56F1BBB226DF60C5460B4490498B6F43980C44C54891F35325EAF5DBC8C71ABCCEB4C257DFBC1512F5DD7B3799EF419471089909EE49AE959CB46B67B3765370B5BFAB90509E0BDF65AD9F2A18A5FB0952468328C166A5FC687A8D4BEBFCD33B07B08CE6A9381CE8CCBA687D492B7ADCCC49B15E976E986BC821DA1C766641028A0017161BAABFB20B01E5615DFB87D9A760C8914E2C56678774D1B2D64B2C911ED8A8A752BF52F27F026F65F28C6010ED4BB8BACC9EADE3C53CA4B84C849D76BA0D6741441403282BDC249FA613C03C430C7AA814CEE93E4BD197D4B71B11CF81D4C87F62E9368E85069BC3680A8AB7A8011A5A9897DDDA38C92661D3E9A5626D4E9DE83F11912536015427C235CC3F17ED0C0F9E44CFD991A2A316EE431D9FE6702B72BA1DFB0645DCAF075B295784BBE912E0374B19CBA3AE24D7E73288089D947DF26D26E5F98CE999721C5CE08E7391BE4656ADDDFB8FD147FFDDB40194446442D39672C7F74923F5A56E20F7EE9531F1370657AC6FE5BC95FFC6DDEE1D6F0668CB7CBEBDFDF92BF08FA2B8DCFD2E0FB337B163B257103F929D92DF82893FE70104DFBA86BDE61BB8D07ABD9DBBD006159676CB9E7BCBFA6ED12708B8E2550668EA1E2139BB284A9396AE2A1C0A0A88286D4ABEE2BCFE131A9F948F9F3835EEA5CD02468DA9828995F54258B329354E2DC6817F92ED14AB77BC682F51C61456B2B48D6B930EC6F25A5BD0BB4B66A338E3F88B5F11F30E887502D48F62D9AFD78D8B80ED478EE9126AA063CA07DCFBC3C36E8727E709FB1645495083AA9F6C1CB3EF5AB382FE285D468638F70D55E1A611270DF8347D86123C324B9FBCF2C2080C3E7532C2164E8A7BC347A21FCADC100CE3DD723CCE5A5558F19132F23B02F7120ACF9115FE92E04C8B720F603163154F8A0E02B8B867AB1BA1AE0C83155CA71BBEE31A9C276170671408CFE01CF96021258FD33FB8B6E53BB7871F1CAFF396E03FBECAC9EEB816DED1A22758E3417EB7A094C771DD0D566B5DB73D491342F06A96BE8083FFA3AF15EA9EBCF78A3D851467B6B080EF0ECCBE4816A89A6B7838ADA595DF8707AC952D06D2B6B6E7B7C6900FBF4915E60E4048267A8BB5FD89AEA6893E85470CBD892840665B329F3EB37B5F632C4BE10462D9A565910DE67ED7C9021C87578373510F5EA5824E2F6ED551CCF01CB0ADDEBCB4FBC0F72437034988D1BEA07BAB548BF6D44960C32E3E170441D6F565038A69B69613697C75479505D4E50B7095F3E30498D434600E046B4652D3224A3568AC944C789093A8D72BB771FD14DE1D84CD37B5512424AFCF658B139A61D7DB63A5456B6E2944C12EDD84CF90DCD1FD9573C19CCEAF0A93BE0E150C467336A613AC94F732B83C69F069CE256CF5040F53391FC6C8BA9FFECA939478FA6F90B68E4B5B2423DEBB1064DD61C1A759A0826EED99C1201CE9D904EA0375FC0D1A03DC8AFD69A924C45A346EB1D10D74B78A77021C05F8DDEA8C306630559319CDDA86C97F13689DEF0BBD62372F91D56D990F7C617782A440736FF46513A91F8F7171D6574728E336E4683D499BDF2130C1828407DE3B53695DEA7C2AAFCFBE554450530C5CE391B11CBAD1FF5993C68AC0207D01B33A72C194D382738AF6F2A3519AB41EF37F0D53204DABEDDDD9209C80DA23F32BE44A856F0D1BAAD194BB96AD74FE1D50A2A6FB8EC2EB6D4E60B89EE7900C6CA38F68A04AA7B180006BF544C94D9A697524B3D397F438C127EEDB1604DFF87C86078B0C8547C499A707E3968226374786C906CD8EF9DF51263DC6723E668A5C484D271F3D58811D811FBC9CDEFD722C7F727DBA8B2A5F26E321426B110348DC01462FDE4F3117EBE8BD7902667B087C724816C42602AFF4D25460FAFD24C7FD4FE3C93635EC16D039BE4393D02F67F37F8D1FABBB6A6CF9C7A5D2418DA80FCF56E9A3B0EA9AA563BF6C6B4EB7ECFA3B30DF98014EA4643E52C898D3196B5CFB5A0D27E4D29721A1B6A1439B9F489C77EC25990B92B2E60B47B7ADE44D766AA5FAE8B2FCF387E9D8D9260C237F8E39C535D10C3F2393275B062944C35D19B3FA2A90C774ED433D706E5BB53791171EFE8EFBD646D71984DEA4CEA34CA30A58D5DAA7D56F83884E5885FF23E690E8F41B087AE3765CD529D86BC586DC96A288F21E19270A4F0433316D636C01A58ABB7BF7BDCC173D0512C9360837C121A08B76C033D4F9283579FFF4D515796FBEFC5E15C7E70BF42A70B6F019DE175831FD2AA041A3BCA82F40D3729BA23535186ACA98B8AAB8862788E7DC9159AED54854DB661675441EA6266F2D1B5956B48AF5C5A679E42FE131B9A1F4E0707259F1B1AD3651AD33BFD98FF082982338C6EC8EB8C2E3DDD03E27664E7DE1AB1CCAC1C3B634CF70FC87A179234B50CDC994FCD513B3B43DD60830E5400F6B03233FEFA01A24E7D5843F69A68F2AAF349CA08773D7EF6FD6BCAB5C738B3512976F21000F3A094F5D14F890FF5C665213318BD9520CC39D49B3D58C7DD966E9012BEB449EFE614F80F4EDA49ED8574E9184A0BA63F04A4A619F89F257A5EE4E434A3A9F01AEE915322D2D7953C3ECE9186D472D08B29583094F5F888F02E40C15914457FABEBC265EFD1CD9020D13BD2CCECBCAE9875FD812B7C5E95DCC92C386B627CCA78B40CCD7B2FCD9EA820BD72D3D403BA33711935DDB32B9045F850FFDC8DC152B05985FB885C7DF738533F147EFFDE1004855F6C19FA4DAF2DE7EB0ABF11ED031CBC773E82EA73CF7E31474FD806A45AAFCA1DF87B3A3893320A8B04FB325000BCEE877486C7E9C36CAFFC9616910E2DF56AC2C9242AF4FE340BABA1381D337A6DCB57F87A685B6C44812BD1AA523271B9B6D2B6FE685B134850DB1E2896986EF8196A1A6AC1DDEF063A674B6F3DCBD85B34DB8FC0B466212B3D93681DAD8AB9798F6F7423E2A23BBE045345F83075ED16FC8027D41935D5BB598C86EF9EC1B515301EE3087756AFDA2242DE9187DE56CABB7AAA31348AA98EB82EC344BBB6B89CA1C15137675959EC105CD42290219AC281F41871D528FFE65BBB9948BC301D74DCE98BF9C6EB2519886BE44E5794A5FCC3736E608BFB69AE657AAE899BDFF0A0BD650EEE7AED1ED398094B00013EE6F4B8D5DB77AF02EAF6C1DEB2AE1F1EFCDD6E87FB355F2E046729C37D3D434796B041709641903AC581C7E6E4EB7293B3767EB7115D3E36D074193DB2BBA7A4E4F2CA5CA13C92170E7BB0CEBEA5989049B3D9C45E5DEE5CE59018BAE7F1B950E3FB07542577F0F2C330F9F02E437DF39321726680ACA46F6CD3C1E2DD4B482A68CD1FCD4699EB3E746F5F50995A112FDB9E8A1558C83DF5B9A46A77078B84E78F75779F24D309A7013E1574ED3957CFFD512D9A25C14F360EFFAA2293C246C4E9621F809D070C30DF7F30222876BDCEBD3214D44E0D25FAA6B182F0DEC29D62016A7115A3FD0031EFBEA49CA5BDB98C7376C33ED441EC3AE149A39998DE664B508ACBE826000DEEC4A7C7CA854FC377200AB9C3B9B738FF80415CBFFE995910CF5355BDAF54B11584D7ADACD9D211A6311E6A2634C9F334B7A22C44D1679F55996B679C14BA095F46A6B168C870D5737F3E4D2F3C0DA661C604EFA10DB197EF6567C04FF8158474F86E1F4A1F1C768203E9247B619C553A03D045409B16792F93BEFE1561BAFEE421BD3CDF63BC805DD0ADBF5F5557D1368E75E53C59572A34CBAEAE26CBD933D75011CF1E0F9A745216D7D1683FF91D6E605DC09DC349DE3D2EC65C1C47284857F60B4EB4ABB72B969194E80A386764CCDFFC6E381A4CD7E508BC09E6DBC0DA2E89F9FEE2048E019226E453CCE0EC40FE0476EFB7090D62B696D5A95864BD22D422271C8922127B7DCAC3DBAC60DD7586DBF4CD5AB9E27CD5402B73AF6F431843C61D538944F21B871E6A1077B1769BD6333819050421087177D0980EAF74C6B2C9D143F70D4CE7F3C8B19047C35593D81D47A6257F4762041F3BC4E3B82F05BBACF05DE797E29CAD0807BCC9EF5DDB35D6B9C361B2DDC3440A62D72870D65AF8D9484E496CB4014DB4C8855BE768344AD072BC195BE7027656023FB2D40ECCE4C5753ED7E5C671CA8EF0201025760244E3EC4AAFBC2C1907F61AD441754777379D06E15FF770AD80AA30E137D95EA0729B0F02B0117C266EF5F72150119913B501D75297C3CBC0ACEF380B3641F11BF45B154ACBD83CF4467334C2236C3F4D35464965E16121BE041F1F68FD143C4992AF45E8884A38211327FF0A6EAF5E4E6BBAEC59FA128A88765C70711EED494FDCC3289ADBC63D51EA1EB6354B8231F863507ADD4715144DE2DE71E2BF1ED8A9E789F61A01D21F1F23452C1EB5820DC1D0A0C7CF88BF891E8C5288C068EAA4EDB27F875348ED53D1A838134A78A95DF3EA60317C7D4BF907D81BC0D94B8F7A855F9AB486E90C8349BC034BB22AB6AC7D5CF8C2DE343EED691A2743BE1A5D0807A15AFC09AD7C9DB5201BE2574E75664B7A16E8F4757137B0275F1B2DDB2652FF097F424AF65C8174ABE0764EA6C7B821A6AD46844C12005B92CF4D7A22010D0BD9325A46DD9C3E01BDE77DECD86086B2B377FB6469680A4D671FC312A100DCE2CC96A1A7CC150C840371328F84E2B52E31256FF1E8DCE560D265D87C2917B71C5EA568ACAFD908892DCDA5BFD36FF7147E25F429B85FC9D061879A2B9958967DBD07714BF3A5C1FFBD0F428A167AAAC230367DA725C4F31F1E966DCDFECE22748BD9552EFA5617D8C67F00BFEAEB47C6B757F261D88B9741FED0F749180E6B2E159B2E60965C3DE5979B8AD74EBE75CA7118801E009D28778E302B450010D8EF6FEF96DAFC337D05BC2AFF7BF35C22391A9265E88C143B6D9E1E9D8501C825848E056D4B7F548A9E22D650FDDDB126D03A6FAA267D5CCDF0880E0F24A5C6F5802C765B348F446BD809685579F863A0FC5FD6D8A6197FAFAC026FF82A43E8853D0F47C9C602B420DA940185338D0586D99924552C120CD030CBB2EA911FD1A519BD013CA3330F3375B71886DCE25F4C8AA579649671244E528678A0AEE574E66E69164A5A380828646AFE042BBD8CB68C77DC2C4BDAFFF38DAE96A4FF4481BA402A8EBC87F9612776B8DE7A9EEFA4EA3634080BD615411D9050D0F87FAC0B4E49AE277A446EE81CB19BCBEBF9218642943E448E65A905F5425C22236CF30BFA95134ACBB5A7BBFE46E4CAD4E365F97D0964D137152F1B42E1F1EF72F3C976CF66844CD04740BC401A1879E5F1D7B37A06B2050D4FA12CEFA23700988948FC2AA074B8A6F133A56E9663E09168F65AFD8FA0A79B2EC8392329C31567BB7D18ECA2CDDADC40B40B93926818CF7271ACA8E0D216715D6D2C77FD2574F353E812684CB7571440AA9C67BAD44C591249D75D710E2363B4847A20A67C03DD750BBAB14703730DD6432A855D6E3535E0AF8ECEC92B577A9917F2269523A318439404A0B4DCD35FECDA8C4A9AE43CDED37853D12E9DE08210E9F27FC689FFA01ECAF6179731A8ADD4A2E0CD7934AA904BDB65944A9843808AEE72A2C38E7E23CA657420 -MD = 799AB3906B6E2C7199E8BAE0EB7B25D9FA370884B97434DE4F2D3316 -Len = 32666 -Msg = 3FB03475C56A3054C0E24C242B09490D63A16F344CF4DCA72FEE12B5FE997F4D2E5D6CCEB62134B3D1C69D63E7517FC970E4C71EFEBC8E6670D70CD7A99BE4C7B8CD5DEC8A2308D2AC6EA9CC32A9D9B6ABB56893C2202BECE71F3C52031654DCEBC51F314246DDDBA9EA4508C435C6DD647409686D9D71C077878CDC0F66AEB2C58A399F97C3B5F0E5D0EBC311CF1247890772D68BB8F965B64A8ACCA8600550BFEFA75A8CD9EEC93D1B421F3A8C8FA3812E135E479B3C07C6B24A36B634D53B316B67337C85E6945FA3AB5FA19776964A6DE2FDFC5EA5991C04851192EE8BF541B32AB1A9EBE120F14BA4D5206CFC19254F8743DC00CB82F4DAC8CF5F9F17638D64C370A0B01E1441079C553465D0BF655B190F11D370E75DA0C5A0A87E293CFB376EC859BCEF084FB645078D2181C9A707E262EDA67DF8BD7957A09E1EE4EC93473AE05A1B2F09EE2EC120BA4770EB3B62CEF52B2635FC611FFB7A40EDBC5959C1B3D85F26EC740F6917112B2AF7639EBD2E80BCA36B1832CCC08814F607A9FCA29C388DD69A3C650F8A2CCA5F9779F2B4F92108505AEDFD6DD4C643ED3FEA12CD212B99219041B549C64CE2588049C38D31A1B592E2F97C05B7C19C473C4DE432FACAEAFEA6AF376F6BE285A5A48C4C1F6A4578B6B68E867E7EDC23C9EC2CDC0A69A3A525C25FDF7D6994BD79B48C9D620DAF3DFF5B9CDDCAB9DCBCB4DB1B4C8E178E2CD12D6CDCB68C6B0DD25653BEA4F980A4950B153B3C12DB7E90B325A617D1278E352639520C42D06888058212848EAB9130EADAC61A84FE150F7B18E37ECF26493EBB6F8A8A6D92E3DCAAA2652E5DBA02B05EF6B6D31DE818C26F229679C6AA01FBC233DA7E53C2C74A8D7D70E6A8BD00BCC0A8470B948097484DB77863763E5FB304F001C115AEC71AF257D593FA150AF6D441682EE78DF023B82593DAC58440FA4137EBB6A588B44D8883CDFE90DDA2AAF083716829D7D1D9F2FFB3CA2F9B20C9B7EE3EAF65377BB6EAB39994A6B3CA1A797657217C3996EF5E6931472E2BC9C2254DAFED069A14AE3DDA142827DAEB33DDD931EA08503436D4C8BD7A147D74BDB68F28627F251E563B60E8C408FD210B9D4EE3142ADCB80A8011088593EEB541AEC17C337037EDD48D2DDA2473BB42DA7DB45FD8CBBF6ED10C3C8BDC5FD2F79A857272BF6A7D74560C6CF37AE9D63E40F3FA242B4B845BFAF52C8541034E999A0AFB7FFC58C8440BEE3AB4DF8A947B466641338B2AB34A100EE05F5562048334FA80A8D60B569757E82FBC5778B9FEA3D7CAD3DB8CE6611FC9B79C62651000440BB02F8B07AB0822CE0D6C401957B41AF50114B0CA3249B48AB3ADDC23B547AA5BBD438E079B3E9C0526C70996A2C72A557C19BED31149327C3CB92E3FF5B4D8EC7AAAECB46B8C230962CBD07D1E96EF4381699F921292E4E493FC45427DFE3E4EF49B4DDB01E7824796132A086A741064329B1B06173645784B6ED4D873DE2DE98E908D2D42F77381715C3E58D1C4C4D0CB55FDFB70411B3C8316904967F6485D6A8E36AF3A1F82F2D48E31A06F58C819236A25F29109FBA0E84A25C33C87E8C5B9FB24923EC6BC97BA4D80B497B576B2366086113D4B27197E0979EC5161ED3165E190406515D9200938D0ED33DA89C91C90E6D40009642F71BCBBDC9F96E0E782FD510C86CDE6CE0080A924BA66BD3DA5340B7C1F9F5B791FAFA7140C3C8876AEF81B3FBFD1DC0401AD416317E3ACF984C91E93481A2BF34E70F295B1FCD7AE6FDFAEDF0EAF2DFB68AFAE1727A6F6E95770107D4DE3AD337817143443CE61336F99865C3B3EDDB8CD35060557070198232E6AEC84372F2163D73FE757AF2ACCC22761646EDB78D7159A436A55FD234EA104A892968A4FE3F0C3CA7237F532DCE6E6C81FE33904BBF695CE37817E81A62952304E3D88A77482B76CDD62E4396BA0B51B51ED5E3F1773CFC03DD22C79D7F0E5A3C88CF2D1DE2050A4C7FB2B7BA665909342D5BFEA8F8E5DA4C944716CDAC2CA8DE30F7FB84CA342CFB46996F3E32E604F90F4CB746EBB71F7C1D972D005873E583DC9715ABF48941AE14369BB87ED5FAAE58F8FD2D26FEB1258995F7DC120305F5A696E244292824ED1A4A18C92B3B521D1A85F1CF25B8E4CFE7B201A7BE6C9640B73E4E0C42DBEF0A16510F2578C9885337DA86262FF12B399FFC09F0404094AF2ED808102AB5150391EFC10C575AEFA535D0C4E5DF868972FF5140D0CAA44854A7FE6607735AA1F529CB45921C052858B0BD1838F348A82796364FA503DD43855FD3940E23E6B9B63CF5A85E41BB96D29AD8E1959FB3C6CD239ACB1B1F8A8F875A973828F5E1EC7E69478D46ADE676DE52BA7DEDD19EBE2DE930B24F15558F134D3507607C15AFC4C16E118C3D62059E113EF6DEC1F0527B44780326D422BB1203B7756A986AAC54362E86C5F93DBFD5C2EB7D0934BE47BDEF5BF2503BCAB0C303BB2BAD5480287699DDD6B56B5AB32264E237D2D5DBBEBB74C2F767640A6871FC4B2A2CC4B311ED52EEEAE91880C0AB74628237CBF8E0241213D953E7F0A0115BF3A626F88996547E73F58AC3C5A671914B7EDF793AEEAAE7929AF5E3FAB9DBBCC9DAA10916F3C079AD4AEED991FCF58D9F76FA6A10B6D6D20FAB2DE1403ED7608CE1D0A16BAE67CCB81E06949652A64F1EB9A8512F7D6ADA9D51966141091B9E0A8483EAE17F4DF311EA79F09C0F5F06359F028EBB7B8F6BB73D19494AAECAB6923A8BD8E222DC39F76BE0F288828F9AC0F2A37241B880C73698637ACE3FAC130ED3B075E135105EC7B20C41E1815074EB83B9C0DE274863CF7FC5484876B283274EA50D771598E4EA6DCC8C672FDAE215BED8A9582ACE36315C43030DC96C6F273486396B9E2269BB52A175D6F0E05C218EAD5D7B3032A76E29B40A6F329621E6EE44C2DA18C4363FA20298F912C2F1ECD241A83D9540FC9BE7353DD8B972C632C8C33079E4CD2962810598F94E0C64A9EA84B1B8E83DBED37FC32D6D9943FC6301E7C99DDD676B9DF9C110026B9350AD658C676873EBC88B5B18D5F17AFF79C5EC8C672897E63A1331942658BCA49E4C6BF86FFC95A7D1DDC8575A0C5B9835DBB715D8747262A741269D08897BDC3482D84A7787F78CCCDD86D2D618A1C62AC8ACC05E867E67BFBE6B50DA2EEA02C573095E7F2FA3E4D34D3EF529B351607A6684CA8760D02E9B1DE6A5871A2BE89D6389C5A66A5EA3385AF2F9C8DAC1004CC21C3AF091B2DA56618ACB6D8F06C7D8E1CCE76F6A04E58C24C9D233FABBF8A7C8F6242AB74FC36B0BF4A66BABB92332FC79EEB0C9710F035B142E5B98CD63D6F6298F80DC1B1ADF87567A2A60D7E01F5BF3162E98514F2020590C17246180A69BDAA76A29A95F33EEE90F06A538958F1AFF5B8A170459DCC285E04A4184517CC1F36CC76E27D8D76D6A11D1E9E7A97E4AC29A2F6926150B155345D7E433A45B74265E4D5CCB112EC42720CCC88AB2953421E946C7574C1D892AEE85971E7927985895E87D1FEC8046211FE1BE621E2AEC467B3A22CAA826B4F2CFB20B279C8D6C2BAAAAA4397279F4278E096A33C5A39DCE56D9458B37D14E4CCD2D10C2A2EF04FAD3BE6515BBE7A2B169F8BE0A68E6F6001B57E0C79378542243515BF55E9CE8485663FDC435063C070B35CE53D14B9A784D4A1116387B3551EB51798FB10DE7C9E1E8C4BFA5F7B9E39BB42046CC89A7276222182F4790AE088A9BDB7C9A006D0E4FA534128B9B617EE8CC4188CE018D3EF7D4B94D558824D813B65FE7C2A3B4A17EDA8F4A353ABCC825FD688DE322606918418B231CEDDE3541DDAE8F233F6E950665670661C5818A2008F3EC05C3291EBA38C8493F35ED3FCAF53FA06F15076730BCE0B275BB1B5E5C26BC6625EB464BF35ADBC5A7045AA7DD375DB0ABBB9E372ECA4E3B998FC23CB348AD1D8CEEFC1A765267E0C97EC491C6AE0C8C75DFB44C08BAB58DD78EE3A8BCB98E12DD9ECE6558E8A33B32929FEEC969D49C583876DFA3BD110EF01B00C7873CC58C73D9D278F2CA4819D2AA8E30DD5E561545CC540E0151B80DA49AB83A1ABC9A207A25F49AF9D9B7844958D1780B2BCB93F73A542A7FA9DE5CE02FF5E989ED4A5C0A3F6461E6B04B2BBF85FB07E119E7769F3F3D743CF1A77FE2EE18D4F6B1C5A1C62427F59EEA8C181E4B8C45A3FAC68C85FD4BE1B0C098E7ED08292F65E239A104F1B2ABEA3767E66F7F7A8BF121BA100FEA3727D5917BE2599FDDA8F950C5BA3F08887E59DBA3932C9F4336FD454A71119D6E73100DF4D73259AE2D337641B3618D07235FE4D1F1F9C0CCC84A96171F5F7157C110ED7CE25BBA453EAD07215705B061E8F9A3553C879643E34A4BCA4DDE253904CC58F672AD3BD04314A3C2906107BC6C91839AF8AE54333D671396B58019E6A5DEFA5328A4109CAE9B60C3D6CC9CF90010F0BBDF1BF518A0C6382A2E42DD29B7009999E74F0E2EE319888C20274FA7094C39E529B41B5031B8B49956D24A1AF4A9F62C166F98A612ADAF4EDAEBA81D8B476C6C22B127B9DC77EB1EEEA68780E7BE78B67EBA8041494AA98D1EBC175EF724C133B84037824AC8B8AD080F9FDBE3D97646BA1A686C0F97A4F6DE8C70785A28B943D86934541FFFD04A81CDD6B3A610E16DA93FDFB40FF27BF58845E63252AED2C5E1DBEA862B424C8236C2D31DEBB4E5B3A3758C33318473F190EC78A786149F8B6B4B23FECE61225A3050CA05BD2D4D63A689AA1F3477BAA8B89C5DE9A5A8C904BCB822AAE9B558865724F10718646A17073E8AF7A23C2FBB36750E682DC789EEBCF99C3754FB6FB3AEDBA097EBAC54620AA989E7B72D2DA5B34524882BD616F7EA42DD9AD3BF26FE252F42451B45FACED2326B4F836A984EBDB6BC00BF94A80C084F4C978E2D3384A114B5A4F3B08DAC7DFB3B16CCBF4F03BBF6C0316F00CB4E13CD50092CF549AE35677187D6990C76E931ABA2FBEED2B57313C7F011A8A51788BD6B82E4AA85B3F48AC202687AE1D62DFD09FD3B759133DCD6F0F6A4832AEBAEC37418F8664C9FFB05A8C61D521DECCFB6D3384E3C89793B6035C2201C0DCD0D7716644220500A8BE22D6A1A0ABAC5AF297B7007D0EF6D92F650D483A1A406018AA27BA012E2432377AC959F877087B7C222D5D99570CB8CB9B882C5D895EAF12FB5EDC27FC56C1559E35B665F181936399911C38B3DFD876CE17A0515EA0A2EFFD6DB3893FDEF62C5616DC352E171EC9D90E89278FF5B516787AEE46B9EC77CB6ED327C440ACB1238FE94043535853AF3ED8FDB452538F2BAAB9273458CDCA86BF5E36B5B87FB052CBAB3B59274A799DB1D0F06C361225F959C12A92F1D1675E1E6D136D686F04ABB86C7A37A620AA57FE6F367B5B5DF25215CA31D490CCD8B22ADFCF1760432AF8C11474A1D5414850AEE75844C31BC6D2FC313131D5C5884090955D6C12839E06D1205628BC199E958A83D29DD7315486AC3C5896DF5910EA89F25DEB370A524197FF48C46D2E8A6519EDDB96DD2AED9B06F820B80147E8C2B355499A68AD02BF33A2164B22B27DE610FAB93CE4DBD53016F66991DFAA5F0C377D156454E5CE5D188E65622E2E9FD55524177BC50C6839BCFB9843EA8C760EC2FB4C24EC9E6085425A2645CF161B513E7BD9ADA62C4529711118C005388C45C9D0817A0C7834E11E04878F99E8B525BFBB46C620CBFA1051FD7A10511B358AF74A7C8C427347A159209BD68E961157AFCCCACE5B1972F43CA917F460ABF0317DC0 -MD = 05354659E5259E36A0A1827838A6BF0712F2811FFE330480C7614EC2 -Len = 32729 -Msg = E6310B1D21294EA74143324FFEBF3349933B7291D804A426CF7E8CB8F6CC65B8D289626ED9371DBA2FFFDEED36CAB446C20A10991AFD2D280B8877B134B1D0287C2E3782AEBD60530BB53F64ABC3DA6502E8A7208FD74BB8F243EDA7E99ECFF91B18B3F27B169259357708C80BEB398834E1FC14D57D95A4E6C90BD4BADF7ECD65E9A528C309DEC651773404F222A8871CA3E36BA8AE4C201418D11C47BF3F1455E035ED9141ADBC5628DBE95B9A2B983E9D52629DB9538086EF091D102E3321558249E1ED0958AEC58505689D82AF2C3659ED6D832D98718B10C4D2B9190A2EB3074999909EB7C874967E302DFA19F3C0944858DFCCA5C6046D5939EC1D94F521B542D2DE52BC282F495D98B58E0E92DB576AE803253F4ED2E9761C8603B0C678C510483C077F2D2F7E033BCA2E5593344942336EAF2FE50D4271E2B77C0938CB31D0C2222C4E5AF82C6D5BBDD38423185259A80B9D76AF4AC8EF7DB54733032801809B7F5A7BC913ED4DC30851BD2242F158953A7DC8F71F12EBF0DE9657E22676DF89FA0B9D1FD4903839FD25BBF6F2B6286AFCE592975AECC8AE39E71CD1767C8D42BE9E4C17CEB56D16082CA8BE1AF35D4882EEECBE5508A05263FD942293AE88A563D44C67AB7EBF33BD2DA2A8333DC3EEEEDC8B3069B0A9D3168CA28DA7CCEFC1EB8EDAFC1D5F8F4B502CA34E497AAD49DDA7893236836119F6DCE8B8F235B88B58D81C65B0A2A00B4168B8F9441E76AD1A521BB5F9747BAF1359C4E94A54E1C6083D61AAAEA96AB67BD63532654DFF35E01C4DADC44309303E7989E083A5A06CAF882DB0CE49783D35CC45F57D3D8BAE282F55CC635853F8345BFE687C5C9281122726DC0315C90BB43748C66B9A54D998EE88B4D5EC23568EA05B07DF673A7AEF0D6748BB2A82CEFDDD2996F978C7D09CB61E4FA306C168278B624264A18F39F7D0E5AFEFD8A9315735C47856859D845BC99ADF22B940DCF6A9F227C49A0B9DBDCC6F2C68E1BC58C385D2E61C5920868F338BFBA5BB65FD00A458F309E0F8308CE5E052279BD979B97D367109F68EF181EBCEE3189E1209C69C72402D11F8BC6BF0374E570475BF6E3A1E3C4AA781FEA0EC3A5A21A6B35A5D8C145617C323E710947A2A3A9269EA737FC032BA4CF6040496A27AA1EB68726FF80B55090DF416CE95CA65E615EBC417409EDD23B96234E95B557D74469D3CCDA5DA25A436D656BF994DDA857445DBCC495A8BB22977EEE8E803A7A2FD25A1ED8097942CDAD288F9CAF75D9C22CBDB45D660F8E1E47DEB60B14AEB8AEEAC244524A2677D1E986767D076B0987CB91EFFD2B5D065C53F013D865C4CE95E2CDC63D77AAE43BDAFCD53D3F2CBE9DD5E057B64EE6EAE2D3FBD73BD2C7AE82FDDEF4B96B0F81B1B292500DEA952DEBC1C4CA08C174136962463CB08EA9434170DB8CC6C0AB4DB298A9D2C693EB686B9BE9626F4F7C3C5830B8EFC4006CC1ED6E4E90F7AB08EEE3BABA83343C67F69B45DC2F91877D03399C0FC3AE61AC8C167E22A030CCD605AE4F740D37F73E439AA301F0F9F64644D7C9E89B44CF8B7F170010FE15F7802C40C34107D1DD613D1F81282007FEEE9255F6A5C8BF3012B6377FF7634A5099954D11FD603CE2BCC658B5BE36D8B593635AE119055B0502846236D389FE443D57BE41EC34E47E1B66EE1B45534220D2E0F5D372777F48DFA05B45CBCF266BC9FDA5AF1E3A1D0BE177DD717CE031F22C759AE037E809EC8A75227DB26DA0900E17B025953EEC8D8713CABE6AE027ED12EC6D80C8231CEFC1B9FB1BFD8326C24C2E266E00546A7F94D6C7155D18F61517950ED9E517364FE151CDA180E8061D6746EF481B40075F02B3EEC2C9B3CC4D1FBDA49E6D7FC409221A03899626AF29BCA9A8CE95EE5C385596D115715184740A40E675122345979ABEDE0695CC47D81CDDDECC82256311999B52292735C3218C2DF1711F62FDF873752300F4445D8BFB301D0332DE48A4EC1A7FDEF964DD83442C6C59F50F03B77A37EE6DD57CBE1F3DC3C1E8D97EA15E612BF4CCF2B3290A5230CDA54CF1C4A7CB3BCF241722502E10835AA68041D4A64C48870667CFE73ACD982A161AF1738AE008E9FD989ED9D031CF7AFD149D9ECF47E96578B7FBF66EB646A37796831C1B0FEA1DBC1CF69050FBAC4B17CA425CE096EBA9F29749967CEB6C9F3DA994A1633FD888415EEDA8CE4C6B8C7A820A088B88F8DB50BF28A9ABE836ADDBF3DE64C3888364F431E7D27E65BB08E2EAB86122CAE794BF947E40E314382FB94E39CA139F913662BE99C9A47A6BE5CD32F0947CF53008497E84FCBE5B6B84D6EF3C37C936E2A470D98D09A5C8750BC7C5CCA21C6F1551B4337202390FDBAB541A1EE26A4A2AD5F2CF9A23068B6828BAE96BADAAECF7C68EA1805D434011798B67622892116CE33B7C751E12F2CC5EBE8A70B3344999F96BC09DC9A88C5C8792AB8E7D2D27A2F7765C71BCF7E211209F2B47E2BE01475589C37566A8BABF57AF0D9F5920A5D35192CF27D3AB63B8EAB3E2564FCC2ABB817CC7CE70B9EE6763F94B40EAE41507DFC522D4BA69C16BC8DF9E4F51EE4F02C679F458D2FF1C65F2558DB6458E5E104DE5D3D46E7132AD3EDE75355C2EAC84BE723E8EFDC0C0BC50DFB20F2B845BF57E2FBD8BDD764900C53D7880C41E25FA995EAD6477C973A39AB0C778841562015406D6457A57DA6FDC771C20AA4DF9E78E6A320D545F0820CC76CED23FD6855C1E1AD36306374832BB55D97C2421D07EEBF7C31CF13E6BA316289205925C2EA0F60C3FFBA52E0A2DD30ECBF71FD91A41C25B723F2CD5EEE70BC0F8E98DDF263E4FE0A5602F62AC4C5C794245158E7B1B9AEEC636C8C5C033C67FBF497DE3EF636DE56DF58B3A1D8599DCC5925277C50A97811BBF280B4DF7474A1774F6BEB1016C4E54110ECA375467EC275EFDE894CE0DE23DC69FEAA44266ED928C55033C89BC821CF85ED9F2C4AF52A67CC8EE67C6842D8BF319B26462E24E628C8914FCE45711D7C53C079ACCB25A9A0750C23630E43E127F531AE20F3972B5E876F1C4D0ACF63C001E5327581AAAC283F0E12A036B6BE47B20F001619B2EADFD778428C44FDEF5CE1838DB207CF2CD446DC773337E36A81A0564ECF700224305910521AB4A282AA70784C1254DF02E76F71DBB88BDD6063B8BEA4DC6B4960102131232654F315E5754CDE56EB9BEBFF00E5D861B455B9F980201116600726C61CC479C785B7A691CC2F3E87A33FCED21F51874FAD4581583F8E2082F5AC11A51BC6D91757A85461B16E4AA5321E70B65AA04F15D079B46434FA7A88930354B7ECFD6C40DDA653088B199BD32530C48D87092F2D24BAA9FEB9D78BB0399B77988D0646492478999035C716203CEC952F2E7F7DFBDEEDBFF6D36C5B149710C43B4D2DED9F125D10F2EC5FD7038247B12098C245FB718CA4D245C30F3B959124E3CC4B30C8FE4B522D1BC96BEC0EF1A0869C768A0ED1C3F087CC434AC621129616D8607C150D4F2C86994D39F3483D408588D35AFBFF0767462E02DB217FAB0DEC68064EB412087345A06ED919E875EED05CC2485959235C54A9596784F06CC7D12E2A20A01C95913198D008D50B3A5DC936ED62842BBA1AE49AF9C33AE832C9C385CC898BB25EBA31A873C24D6627B40A32C30BD79C542D1CB0251B8E3A60F2B364C932E336EAA5C2D9D5200E58504D8CE9067CB7B70258BD1C093230B1676A7ED268CF2E4BA572D14DBB2AE654F804F15EB98941313911CD8BA78E4B2921410894E581563530DF0B003EC8AA0E0D76C8C93CA6FA8068903A2CEC09BF4E2F1A9AD5A4DAB130232CAE0570C725A2A17990709D2519FC669EF2F81A08F34EE8762EFDCDFCA3859A49DEC37510660ADD27DC7888AF0657C05B2479CA108AC8B0C64F69C38277352A512FA9E232B1EC801F6C0C58D857DAC167CFD49C6A11DBB1926230D9D15AAE3A9D73996917EC7D1A7C72F04DD7D590BF040FAC2B7C94CED9AF8A293CE6E0A651074564D64EEB777B8E047CB7FB51B14C6C3FFF7B16A7A319876DBCDD5250CE4317D76977EE62C4A44D23302FF317DEBF3305D4D364E17072465438441674198F44162EA7500E4B21791CBC9DB52BF00E918F8D5A8FCF0DD80ADDA125250955313C152BBE6ED9E4035AA27C113DBBEC81C731E8EB446CFA19BE8EBEF309E4BDACCF721BDF75A982844014D6D75A17BD94FE7FCD640BACAD41C124855F257BB50D2167E0841EB1B9C4CD5CE025E0A6DF87D14F9B613B28C81E2F2BA2DB013CAFE37913D4789D48277E3CB0CBCE8AB9B38CB1EED83CA85FD6F3753B9ACA4771F615A59021A6F080AC3D537E3F5C958EEE1608C2EC9D48B9AE3B969BD6189EAF5ADC2300757C076F51CED379AAEF4B534151691CDF3359524A7C50A3F1356C3DA09E83AA6B0805C0EABA45E045AFE3EBF2E39708B15917CBF8EF8CA81924B4EF2E9944441E54E5202C4D1E2FB2DB3B9B48D07F44EC5FC35BC20E393681790360522B1A2E4651A56B0D8EF37F696D9F5D45E2CEBA972E48203867CF31839D193D8F416787110C8A058A8110547296307B67D81D485ACFD489B4EA89B252C86820B7921C03F46A9F61F0BC5C1404BB8CB7289362E9F7AF55892CC2528117C2DCDE2E8F73949D362BCDFDB61D65124497E70BACBDF8C62AEB1FCDDC8B14C8F7C78AE354F1DC639DE255C298890FE1ED5828B901C3E37A453E8EEDEB31553E841C1E53AEEDC5C6B9DF7DA13A38D0307CABFC36E72615C03ABD3E5702FBCF8051ADB42A2F2251DFF9B1DEACFAB48D4CDA2C28F622E014A4AE25670B39AB99799015B829C1D15A489AFB768FA62435807EA2B3CFE015C997A2D617A4666F052AE57F4B9F99B423BC1507B8CF2B3CB028080CA062AAF8B2871A33715877F4627310F15BC51EE0683338DA4498B9DD4B6AAF60591689BE44E7CEC878369DF33D75B22DCD3A4A0DAE34C94DBAC2EC9432F2E6DBD9F18B186EB168E0E0A57B157694CCFC3F56E5EC31506199B385F046A58D7633D7A36B054FA093F46D943F86F296DA9590AF11EABA8A4EF1105C6811C41BCAC21670CAEF9F37389D72CA74130AFFE7946AF059F57755CBCD096657B692227404569431C0638A3F109CC6DD1B7BFC626A328BBDD8A6C569095121F458DE1DD50ABE073E574EA78D075C7EC9D807E8CBB3D2645235B968B848F1E6FFE98DAA5040A199199BC84EA12B0E6CA616D8E6F0964E538C918F75D12E79A6199625380F10117A535462CDBBB8277AF12BB07C33C1C5B4863F09E7516AA7C67230ACFAA3188C5D5269523CD000393B63D17CCC1639D7F193738BDB4DDE68BB232D4E63685A269B2E788C6C61EAB98FBBA4D6367A2BC5D59D364805DCBDFE3E99670321F4FC1C6A39D60F1557E86265FBCFC1EB9B5EA25AA08E25C48D59D688259DE1CEF35A3A0501D9FEA0332C19EF88E910AA7579163B3EB0CB85ED71C483B8BA375937CC7F7EE17ECD1052866FEDA970911F9DA6FF3E5E95BCB1D1BAAEF206632D31AC5CDFB859EC3AE192355B46159A7BCCF80E55D6F8ED6D79153DEC6CED684F1A8BE0F4141F4106B248E3B540F077AC79DDB4FBEC5313B8EEB786A3672BBD2915921DC6082AD3B6F185B940036007CDDF4AC1DB2DCAC4EA820C886ADC764478BB62A9D9BB9680B9CCC8263645C7D017ACE97E0007C715611EB0203809F4810D94CC657568F8385AF21B7D89B76DBE32F86EDCA813985D879959C54BD31AFB93398BD68E95B84DCB73AA2C281522C43234B206A6A1265100 -MD = 013F8221579FA175AD0B77E35F080507939A10DE739177D00127A219 -Len = 32792 -Msg = 0E31C80A1C41DF5F706DB8DA40DCC06E61B4D6969715EA02113E2A63663DA6AA3DF8BA755109A580446E7E94E9E33DC98EE6B119D3ABE78B3B9F990349A63DD609008FF72E2CB6710B99522021AED51B7485B7B3B89C4C5F81E0CE61B5310789556D93646D531744E6B393AA38E1ACA0D6565728560403423C5C5BF3B80B4E99BBA5FA53765A8F0B67E99BBD0F1E31929731175B49E237EEC448D08D282CA634D720CE74C55925B68F0BCF08B6493B180465CE03AB4DB3C74BEA45D245D21698E9F1CC8ED46EC4BF4AD4FFDAAAB9CA2BD75AF81780AE59610B652715A30F45812AD1075FB9051340167F69CCD01B05FDF1F4CFA36C053269B06E40D99C5CBC685DC18E266F60B23C19565776A5F76C5EA917AAB08DB863DC88C2342C7F7F0E00246B66EAFE2D3DE1384A108DF5DD5AAC8FCE8BEDBF495F065DBF4307C98B879A6B386F8A4261DAEAA00A331FD2D827E895D2FDEB840126564ED561624ABBEF25B0427FAFEFD705F56E2F362AB7410CB777591BB0126CF70E390EFBB4E7A13B0745D7EDD864E6F90E8E38B61C706E144BD50FBC6B5A5ABB810B5B82E2C0D13BC40EFC83E9E790F990D34A07A5F312E253900B57B04EB634DDFEAA537AAF8D118F1F0DB57D6E6206C0EAF94CE2D540F6EE2E2E204941848A537D868F9D95D681F0C5935881288E0D91C12DE10C3629E43E9DC43620189F44985B59427AC131B35AB4574A3CE288806B9F4CD23EE2463F3AE947FE6EEE2FD3CA9B7780E0939B615E8DCF94FF684FB41B76D25C6143C282CED5D9799EE19FCE194B047E8072B8154E9C3CEF1A34E7DFCA73D4EA1636CD8120A8483285B21AFFD02EE06EC882F74BB8ED08D011A9A17043D12C4BFE83EFC8208549E53874497741AFF8E5B8FC594191E1B92E581B1B7361EE57BD39C5B2DFD49F15C758B57DE8FD5F2D65F725804148A641A2E30A732B5932FE8CE43A212C6BE5563FEE8510E3B8A9FE21A0FFB64979180EC1D0842F612F1D58EA555F5B5C7DC82EBF2E4AE783F608A37DEA30186F558EE743C3C2D2C90D5F51269200A28455D15FD4065166AE51D5A8268793011B7777BB8DFB523C278C9A7D1F690AAF05BDF90E076B3DB87606E6575A8EC0A5C5BDA9635FDE179D40DEB4466DCD2CF2F0CE93554CA6C453B302498FDC5DFC4FE1CC717529C332C7771540B29CB3A3BABB522DCC7C0C108296893B4D90629492DECD4AF23EE8C84830FEA1482C9B9CBF0AF143AF68354EC57CDD8B3E1A503968A9691233D76B3630B18E1C79263EB05F8105D1E1070701D35CC032DBFD5B2E877212E7A11940DF6CDCA84D5CF7F7436E655716A0090D2124CB0DC6F07BD051EE9356287A9196F43B17F73D3F056DCD38CF0983F5DAE8DB939803D6866AD4F2800CF1B316CA31041EABBD59D0DF8380FCE7F3B62461A4DD6E14F9E48DC130791C04FF7C6E3E8462F38594B62B11D6B865622170B954FF9909AF29990AB4134D48D494BED3BF8F939FFBA76E3A3A8A263F75F8A1F3B219422525D8AC91948872F221F8C07987A4EE8529F71A9F2B8AE7C7A054C73F130F97A2EA8EBEAEEAC308AE9E984447573BCB295654261E09804C65D3ACCC932C32D265E8261250BC045FDB5896AB266CF3BA5B9254DD8E54112F2BFCC9F119EF4E2059A9EC0FF62B42C3DFFBA2868E4AA1C7021AC35C9AEC2CB5D133E2DB8E11CE6B2CCE87754F4DA3A40789F95EF560BC90578F50F8087F4E53444AF8C453774D998E13BCBF0CE54CBCF56958254959685979E56F0CFBEE657FAE0BDB0480907627AC2231EEDC0F78BAC28B5ABE1D20A0E428973D15E6F1296E3B0AB8761D77DC928A43AECE9CA5C502EF7466874B681085DDB5E7377E16D11EA20FD931F9BC213AE0F544AAEDEA9E4FB7F5465B94C14979F3BB231676831EE73FB7A379B789365701D6E2E2A247C1C21AE5EBF6F3EDD9C46898974B734306E70C9B5573B4D052E63F9C44396BC89C9566800A7E2A9A4C32902F799B4FF22CC9BC21F39B8A8AF4E34007CAE37ADE40CB859DECEA4D274BD11DBB2F5BA304313C66A77F7A43B5AA7DFE18BE40A9F499B95E4B825EA00BB83A0D4F11F2F62F5EA70FB817DC6C666B09BB6C919972B2A0C7BFB10C5B467492B8291A2B9820E2D8BC6E7250355E23F50662DAFEECE00CC8C0B74FE20278DDDF870DDDAF083480B1504E11B518D3F9E9933C3FF2F0CA3C423B8691683E3EA1902004AA51CD823709BB05141A8B8CFBCB4EF9F73ACA2F09716558D879418DC7B0882FAA381AACEFAAB611ECC336F36D6FD789EB734652A08BBFC61D19925067C6E5DCAC4F05BFDAB6FCF083599F2845D0429C05A616D1977004803BFFF90874514A79C0F45E4CC5B3182BE7C45A9E2F9A0DD976FE3C220542CF11CB527861CD7461E03F5335290E24C483B15DD2617B31371A6FF98CD62FD8E713F166C3954F0867DC8C3641C9CDB1A24F3A9EF270D56337537C98D3FE904CFC320D8D19A241E1540CF5CBFC5A5579C76026CDF961AE88D3224818E8EACD70AE4307B335BB759F8EB71D4A32D12F61184D91CB081737EB9EF5C36B8BD5A762B3781253403A9D621B9070EB22B77D41DB6A8B23B6B6DFFBA92B4D54D4C625FF55BA5BB0D1BF499FEE64813E762CBE9BE8A66566A5F733B0EB407CB025A0D90E6E2E8A415D9CED3217A541C28DEAFF17AB8655DB001F523FF303921337ED2EE0AEAC6070F8ADF9FFD61332ECBFD2DF68AB366751C83885367EFF7F589ECC4B7DA65103F814EBC2B399930316241323A1F5A2BFC71FCA019BF888F6D5632AC916D73A3E915D26DD11A2816A27E238568ED0BB4D2DBB13FE6B6DB57B0ED9ED500559791B01755179EA68F57FC40BC357925D114401F328BF6AFB7A3548F957EA12F76976671A8B5CC2A5B0D085ECA87CDB911D1344AA7FE02C92F10E5C86B6BD4C1FC2C6F02CCCEC98AAEB752057CB4E64434D1E0986B93E3F981D1B5835D75691CF580654B5AB3468859B214B0F3BF6A75605901A6A1EC1EF0EE0A6CE0132D28CD79E6365EC6A992F8AD730A4040C8BC2A0FEB8315A90639516B0D30DB4A66F7E7248B04FFEC3985B2A1995DF3ED58C3531675C4BA885D5A488A773DDB3E94D2982FA22A7D424414305A336171992DE01E31E7245CBD3B54D46209014921D5FBDD3077F3BFD86A3A99CF998D141C3A433E7D68AAD547C0EC99CA30F2D15FF5F26CD00F0D45F2F0461EF700A30038877004A22D54CE3F198B44AD470F20ADEAD37BD7F7482E727C1202145335488A739E688F7823254DD669DF59BFD94EC7B08C526286AABDED0EC28714E7C5C56379F5F0297E53512DD1E71DE493E463D3F4D180097B8771B5E055FC7E436C57B53365423D359EEA41496EFFC10F90B46A2204EF4CF3DAEBB60A3047866D736DA1A3553BD32A78A370AD149319EA4CDFEB9921FF920B4D6A2752E9F6396DA5F32AB8D79E717F04FF90D198D249976C081CD298159BACE7D7200E34C82D0C76A61DC0898287CA0A77E9F4D649557E0CD4C5E138DA53D30D47C5BB4CAD52677321CA0DEC309CB658F73D93D6C05726BBA1204D78CBE97BB3FB76C7B9F640D6F96170A8739F77430111711E13D9E4E734863CB39A3E366C406DE7BD0A716384E5A0EEFEE581CD16705D1745F13D56BB5053DD1866BF9CDE1AD9C462A76D882422F5C9A6025131F8B5878ADF97D32A0FD89321D62EA5F5B8BA3C3809057C4D553A391DEE75B93C8529AC498A49B52F2E3AB6BF659CDE1B210AEBC3A85EC8709E9AB6C6134081EA0B020E0B0867C72A654583B954CBCF8EF2A73CE983C2F8F0B5DB5776C16F56079239A6D7464696A182AC51855246F8DDF087FB403840FBFAF215B1C49D2E7B8CDC567431F1D00C37954DC7B40BEE9A868F2EADA29E6F0A73186C119278197AF054C7E3F88E5F696B0D4C94C1196F058FFD72722F6495F16DC41E675833DF9E4394AFBCC7A32B11CC2388E4929786865BE4178F540CA525D067F0A786BE596F10670A25FC6F2F525CAC40E7E341ADDCFCB91F069A5C2AECD7B86ED1FBEBE8E3BDBC3FE27F9042CC53BEC16198AD42230256C8386B46C4AD987EAFCB6F07E347CC7C4AB4B04EF9D20CB581245C9C102CCBA044A1884140666F38BE3E64FAC46350C4B3E983D9678845E9CFCC655A24BF89A8FD4600536D605082668612038B6255285BE6E6266C90756A3CB116931F7D7412D1725143760FEB86F4F8C4CDF1F4B06BEED0F69E3F64C5DC7975FACE5F209B4B67CEDB734C23073F9AE1D824EF849BE836F02D48AA40348221FD09E111C076E617374CC430F3120383FCEB38C42DD6F4B53E66EF6C80368E0FB96512FCB25ECBC4C2C3B99A07789E6920311DACA599DD8C9F0CA413A4BF9B9B986D9202137C9DDDD36F9B16B048268F8334AF0CFB13DCC2589007E4DDC4B34A216F7358F316EFFFF9DC33A8D5FD91A95BD433BAD8BB31D4A14D6D45F6CB5E8A8EC31180A76AA03E83AB3B2CB9A7DE0740EC7BBB55DDB5632D4BE1182E2ABE3F625923BF5B94488A00072414DEB2FBFC79444465EF10AA7EAABCC52E13F68601250F313B40D3DDE694FD935E92D04A940A8BB7D5670ED454B47725D933E64EA6485E4589F1D9E53DE5EB1C9450049F35D14BCF8C38D20BE815D5A61703F3636F6E293EA384B742A9088AE006D3ACB0A296EAD4680F3152DEB56801530D6044AA040505EA4FB656ECAE9E389A3E5040FB66490C79F26E980AF8856BCD381A53E0736A9A4BC004CEA03F127C42D3AA75A0B9D9084326F57CAF346229F818A94FDF92CF32FC3DF08080C57E2BD9342FA0E60004E9091D514C500D4C3100C73610ED989CCF5C2D40996F52E4FA469BBCEF2CE1A7B2EFB9D70DDB30B28728F7B599F503D921C59370FCAE3E07BAB4885E197261F9D0959AD49B418B2F445C02728DB039042824245CCC77542E0C0B15C73C8E01767BE6A2B0AB3709F35630225D9749E23110BC96F591B8D822491B90D7F893DC1127812181565954EE6B8122865BDB496AD533EB7481806D4BB061E18170A1DA37CB435CF356DBFA570AD4EEB26342612BC73F6E0D39CA45E0EB44CEB07E49D29E1B726712F510B68EF2975CFCFEB6561640B0F0C2EF923FC6810FA5CC5E5F7E5C2992FC7E023CCABC78B8D9F3EEABFFFF3A3C3C38D321657E595BB4E6CF104F8B59DD4491A88C96B11AA5179C3E2306305F49F813A0598037CDFA95A2449290659C8C1F1671CA688A19CA498EDA4F5771A972B234F02FA70CF198EA4222701D1F30131310F1BA4401EABC06190AC9DBC8EB1C7526D045FEE0A9CBDCB24E04464E0033123D6F8F2F24F123C5E6DFD75D943639C47A6114F8DDB7AF965B8DDA8460FDBC4B258489490E66326697404592A4AD4124E3D879DB864186279D307015D2C3ADF96E2F57160F0E4A2037D6C760C5C4C852D4000ADE51EBC6613A7B48C0AA400D0FCED3C5E47074C3B917703D2FB1B04B058ECF33FF54EFEA37495E45C9BBA1C1B26F160DE0BEEF21D26F19131041163BABFE16E4D38D83519BBC16622EF690E3FD0A61A968F06320A4454AA43883DA580A396BC65E8AF8727495CDE042A0587085399FDBDF68F77AE2BEC132D667904D1FFBFF7A2B361E67DBA5018D0D75C025D2FD77E4827448BEBA2E91C3C4F456565AABF8F9E1CAAB020A797D6B8C2C9A730FDD80F5D227EF9DAF88BB0026A9E93C3D80A1636830CE832B09B942CC6D6278CEC5E29429AA6D672F2BA0712D5A84580C154C0DF08B6032E5902353CEB6793AD9C8EC953531B4F0602EDBF3D069A070F4166F12A3AE3D3 -MD = 484785C8DB75CD2B16CF8165A0B61FCAD86F8038E0EE83939443F014 -Len = 32855 -Msg = 6B8D273E6CB4AFABAAB762B07186EBF817BD1031C7F9015BE85D6E27A22F654E0DC6C1C40ED20B0F3AB357CFC63AB486ACB5FCBC2BD72FA6EBEE03177444E4D50615ECADABCDBB62A8286BE80D4380FD5B0B6644E361CC231A298323932C41ECBD2B5F9F8C976D5ED668A00CF0F874773DECFE79E0FFC18744E63AFBA369409AB8D93830E48A8DE3C75DED5275383B1B58C27FF67451ADB6295977DD5194161E41B35AE254A3E22CF991FBD5E24A9D8BDD2F4349145E30B66D9FF723D6A977F55EE635AFE4DE4DADD073A72B6294AA33A4272D0C776B9543DD2ECC59E70555E7B8CB405E8E25893F8E689602E5646B63BF499889B600DBD9E2DF6B4B9B0AF843A78C4145D00C24A03254DB3C59579CDA841926BA1EACDB98F6E5644AF98F8A7AD3B2EBB3520C84DA8F066A51EE3A8162262DF8485052B8EFD1FC17AA75CD51F3EE124D9C4B2AF74905538458BF9B6F1C69A303A673A9FFCF75B3E77CA90B86A70DD18DE5C66EB091174B73404398C1D6C769DBC759C8C9EE045B2C774E8D9493C557F54C12256497BFB9FE881C12BD43FF4EBA9EE41CF64FD77FF92EB641455B3245D30956A7DB35DDC3A214ABE3858929ABDA95097C72D40629D7A0AC6F90FF377D92D715A7F346C954ED34776D65B24EFC01E88491161475281F6FD96B0791805E097B37E4368017C100014473918AE37BB286419202DF5B7C62F7245E71F96F8A3951C9EE29E9D917F161C7D0419DBD255E48F42757163100F971E5787D7B56403E5A32A7E0EAE6D0B8C4BB6BAE6B991E71D14383E555024786993A56C61CA99A23C0AF50EF3E646A20A5B0309C437053E9399E1F1AE3A9816511717BE24C4D1DAD92EB408A1F8C2D23730C2890F5EDEEDF0597EE345EF83233E798F05A93895D48D7BBF94E935B6271B1213291E659953FD5991B891E240082303C8A767553EDBE0E7036B5FE645A5C3FFAF47989142721AE26222B797A095C97D40B9240A0A044B301090F90097A3F7B2EE5F0F629D65395AB36C36035DEB595FA5277FDD5ADDB9CBF93A793D3484CECAD452638BA814601931BCC4A9DDA3868CE54CC5A0F9AF3B1F53F48C77B1EED04F00A112E7BA0794E2FC4E63BC34F98D5F29CBDE7A31A5DBC1F65D6B0E862CCD31D767AD7E3AC2309B790DED1D9658B3CA3D86FCE45F2F925A0F88F7CE19DCB1568348E3F5BD5BD9C098EB12E6E823ED67AC723381F4838DB1C55288AB63E10D1144ADF2499A29860103BB5552A79478A647394A7C91A87A6BEB52BFFCAE38453D2FB963A5CE2C646EB7A7CACFB1CE4434C31AB8D77535B33E946D57B2FF852D31BD433B2BC602C6B6A8D42324920B9ABDFC32B0437CD2D4CDFE316A6F6BB347157F36EA8D3CB6528A057C4A3AFE913BB2C23EBA5FE01159C927A86A7E0B67BA95DFC1EA92986E58A3CC4A1441ED3F7448AC8CDE16A221737A6C98B762DD09E2A8E33CB3FBC8241A60822FEA03B069A211DAB70527E6FD04E6807CF28230EF85BC61349AE3EC8ECB02003D5B74E34B63190B59A393DAC62F40AB3852F8AF4BBC632CC800B4A6EB296B9D4CD3C7162F90E9168BB3FC751499A9EFDD6909375F38848E210F04769087BB604E941EC50BAF88F8C1B7E8EAD0F1AAE21706AD27701522CB4FEDCF75AFA681C7460A283C513EA60FDD827E350D2A3FA3FD0B6E7F8E282DAB34D7063C9D9ED95BFC99CFF53F4D6DB4B43D27682F063BC65C868A5D39C356C9A889A2496F4CAAB1C8B0889D8C0BE0C390F484DC9D78C3F8EE06AE3BFCB62DB489E5A69B11EC53E3603292F65AE23F8E388DD0D61D3DF6E0A5BCBD0FA4A48EC14831A398A6E5788537BD5FE2A3FB61FD48D7BAA36B8ED119522CDBF33249C3C286C5F0594BC6DED558A708EF5F9474FDA94D1F23E21737D02DE5FD344DCF181293EC48B8C6F648E8987611C4E884DF48574FF36C07C8013DC4AB9C1836FDB38BD3FC2ECAF2F18DB8CDB29129FDA41D16DE7356ED38865726D3C9C9D4F85DC48390824B2881D7A614B7EE1907132FE3EA420678E5B0F9B17B9C37F7D79888B972198F3D6064DFCF75570325BCC6F37E9B80E58AA375A86EC5FB1BE2600178B6BCF96A8556A94D13FEC3C50D1E4B9E64DD096209DAC8A7353197A61CB30198FA3F5A95921401DED1C0E54D3011E62F7BB24379CD6E7405BD6CC458AB9FEE0D3A8361561E8FF966ED58B89919F78DA5A59514608655E95B43A43391789C3A5AB7647E2C09C6DA654BB58DD3E2DA76CD6F2556D52E54775791FDD0C21E7DD13C8A32A897E6272F790762D691C845FC0ADED0FBCDFD3AA36E9B2E2CF7F472FD8727784DE6BC17B72E25010F8BDE1506B1C9E1445AA34D5CDF8C1CF1B8FA79EE93ADB6ED491388D9E5921A50FC86FF4E357EC994B496CB458C3DC633E49E3CD264C93457C5B7C7B075E0B51E96016150F653386ABF9A037C69B525588A26054C62CFC64AA51781C19C4C255ADF92C3C4CBC937A3BFB41CC8D250D7C329393851BA52A175786AD1CBA06FD9CDB9CC5F069981678EED96394D1D653388C8861FA42E2BF100A1AE5071D5AD10FB482B87BA270F69FEC700B240ED3BC5F19844D7FD6687D7B83EC0D0C40503E22D3C4B7269A244EFA14AAACC3D4131F28C959A39CF2DE3F0D4248187E2F7B40F330B664448E7CA0DA0357F5FDBA46805BE457BD50F805EA2A8826602416FD9FF1CA605BE547AE062884D5D78E897ECD0C9E47391BCE37ABA7DC5FFACD8188B71CF98827C3321C33DA0CC6694C221D135748B4295984D7F6309074481839A4A4B363ABB317EB7C1239F33D3E7D572F29D39167DE3A264A31E2E0A949D6C37B286F025BB02F558F9C98F37A63E1797DC8FAAAB57E30F40FDD1F5144AA3E622C5A6528C10A8D2C6FC8F3FC2C989D10441B0F1923313E0E6468899C6B78E77D07AE376CB7EA36C5A19E531E1628AC5BC80626BDFA5B82F1EA7143272161FF3DB2255D0532D4BA43131B094918E7ACC2F0D2D2D7A92F7B58DB5C747BE3C9E282DEBA06348813C1B90CDA789BB5FD0AFF6B3F05B7CC78ED5CB6626C1B7A0E0B26BC8974C2B510A0ED846BC378D42C8BB1250ED63081C555239E2ECA9C6256133F702CC424E4D4A03977AFCE18E11CD172909C4B7359D9E12CA43DC4991257D8472D7F87FC100196758EB019FBCC5598BF593019197C88803AA39979E79B58E725A9C3B115E026FF2CD3644FD8E6D24055E1F7C6A31B410AA52076FF7CFFB421781E6DC1B498354335B50522F8A22A4A37649A45103625362D8F614B4A58DD2F529110EF2B36FBE9BE551601D58A5A7506C1C9B8755FA357845393C42C72F9668C3335BA1DF01C1FE0AA2DDCADBDAC638C90C82A99F99A4F7E0C309FCCA921EBD36A7870023B406967A5980AC81ED3531754CBABB24348D3D82F66D4A0310FFBFBFFD6BDA68574225531CAE9629508BF27FE43A16205C7D7F4435EBBF6B24421083BCC5D56C5A95352195B8994445115F118D1FABAA3D187D6D3397B1BA0FBB08AEE657727359543912317BA25236264C1640CB8382A35561727C8DD05F2E7895544048D2F62540AF598BA52C371BA2E17C5F34ED01412FDA3E3D35226859A4D183E18D7F7C41CB4914AE01C36DEA7202945677BC3C547918D553719083F6B4DB7A54775FD4DF3D5C48A0A15831AD430E0CF4CAAB585876825C09630CB090FDC71365CDE78B9BA5879D4CAEEFEB063792AE47550B15F918306958EF7BE5CD19E808A253EF4599CEC8FDC2ED12C47AED0A5FFE5398C5A0242A8565B96C8FB73686E48A5B3E748391AF0188B1356378E92FD51F022C35E4681C35C035FBBC65DACBA9866BA31B4D51B1F3697FED30D5E222C1656810EBF27A42945E73B3C37EE6B4CC5E387E958C41D90AF833DF9677314B448137A01F31920F743E5FDCCB42BC7CEDC38212A6A2745F515377405C5C31129F28A66CEB0B0659D8005FA8B5AC5A81E2FF3905AD890BAA2D9A0E25DB9ED709311787E0B9A227DD9C5AB689DF1B380624080D753523590D5DF68C4E9DDE7ADB6C45F9E4EE8816B0D991539FEA437C3CD19CB88E1D262262A981D140CE84544176E33E184BB7C21496ED24DAE242874C3E7CFC489384CFD98433371BC01BBC401BDAC1E0902C54115F8C8B5826CEB03B95776FDE5EFAFE46C99DFA18C2DDB61634D7B3115CB70CC3FDFD11A2D44DBEE33ACA43222986033EE1AC86ED22445C39E410B94C53D1805A2671FBC0991F06278C6EFE449765E18709C80CCB7B737F64140F68FC122C16E3258B2889CC412C461BB0F4F5AF844D8027D1B4314790440A7AC1A156874DE29B0A7A984023BEF842ACC4B74CDF6777590F845F3D558680101F8BA1442FC665137C878462B7434730830FE63E988356AC20292EC810DC835F8449F8357DB68E18C23BE2703FD7A761D23C82AE88DF730FB36C9E2F79F5F8A1EA2CC921AEA1FFBC613F09AA2D07AE6A5777143CBCD781F497F4CE2ED069DD960E7DDA4A2D5E32B2B50D0A625CDDF4FF2DF98E3238A1F35725AF87E27CA3C93339FBB6F6D076F47B9ABF5486B1A4405F4C5972E12602F72FCED75223E857DE48C0D8B2074F862510B18394ECB61B07E15123D083D359B12ED70F36EDF0B348FCA2B7510692D951E511ED2714D12DBF480897AEE44D56F5EB39CFCD120DB0025533129DD2B2C8B9228835E6F5C7EB439148E55E99EDF9F3815F0F4819AB9C0E94639AEAF91C62B2BFEAFBBF1C096D966F2D2D8B27838DCA9A34FA3619FEA998E0952DE420594DA54778DBD422F78E1E87DF1F3B3ACDC707A0914301CE66CA5655F39C414B7C3D989CF76A341B5B060275216916E02B8AD6E24BFA1B21CF9FBBD2DCF77505A4127DDBFFD40DAFBB979F91A59E860F1F442C181252C63F60A0B6C485B69F3417252FD335CC9AD644898616D885ED9B7AD3649FF6E3B96E5EB91640537DC33309557C446EE63268CAD472CDCC5D79D7E9155F10B5A8C08D916342BB71FC3CA54A9A60C554519A8AA39E6948F2A6661B47AE1F93D23391D844312364AEB455C81579F78C567110F8E0DF01D2D91AC4845B511AC147A2EF7B17FE667C6B53CED6A294DE12341358571300A5D019083680CF15EBDED5E7F8559F128CE5A2F5E4F4C03212EFEF8C134B1CC8A9B457A90757F2E43A2729771184013B7282C9D718AE6C128CAF522DEF91318926473CFA3B83F24913F88540A5747F6204EACEF8A8F1426FDBD86D1894B2AE25A16B79A3AE3F8B25CE0D31240F13D1D5E2CC7B25B24965042D7AF80A61DC60921E031DD2668522C900D6C0439305C5710F5D85BC82492874DFC3E400066391BBBFD0953ACFFAA0AF78CA89783CBBE1A4D6CC7E98162B9DCB2ABF8BAD854280F1625EFD0033B931384D8EC61551CDF24AF3D6272398B939ECF29381F80AE443F91511207E3586CBE6A95BF489B4E69AADD6A5B8D748C947DEFB9E351CF608C18F5C6DCCA7DFD0DFA05304A633E2EFA10371F9FE4D56FA79C31DF29A254003C510B001CD3AB0DA979350731423E3F08D216362181BEB9A767D6E2E1A73FAC8F30F7C566294C731186F0188844BAC1E6C808EC64F6A65CBA365EF32F97E47F4C03FEFA1A1D94055D2AC228EBEC13A8A10BB91651FE228E30AAB2CE96AAF63B16A5D9210836993DFC08301BC2FC24F0D36D754211CD6A5B111A3679174EC60D29AFFD4BF3966EBE0A2678BB3D8DC71CF00043AACBA45A4009074C2DB62A4075DE0E334C990EA867D626D98BA7610C0F47C5B460235556317E8C2EB9773A5859577F8B36EB3AB7BB9146B89312C143B74C581664E5406B3FF419306ACA -MD = AAF3046C1E465B10FB33914DFF6B7F921F095E340604B7B4CC747D52 -Len = 32918 -Msg = 36827D43C11E5BAB7B2B9C292F89FDA07298AC73158EA80C0C1007D1BF80CD3E63FB2BD45F63171CDA0B14DAC45C1F668FA2F2B1646FAC85663CF50BD47B4979FBD2F1E7CB31702F9D6A3B0EB83217AF9C5B92A131CFAB8D55A9B2DD43F65D4FAD05B2E3CB64384CDE41A7CE63856FEA79A6548AF17A1738FCFC0779A287F806C3993CC9CF48ED02D16B2A78591B8B3174F66A055F06AAEF1C053207DCB20622326A4208C295411A4950B7532E5735AED23B9917C465B97A99F66906C1DE6D4A5C8A289ACA5DFA5E7300413E5BB6185AD934C1AE6E2885790230C9E3958041ED3A66EA4BDCF7038B64644F343C6E48F674387316E7E2599D02113B983A34660615A30A7CB4496AE0E1C9A889C808EC33F5327F0B2F4921A5B8ED8506AC7318AC7022A892E7B6F28622E2775309900F933334FC78A797B569E23977866448413DF0D979BFAE91E0B4F7E01A901D8FC08F249AD8D8080B141CA0B9A8F72DBE0EFEB740E9296DACF14784A438FF06D2398999658CD46B513CE20261348D1C7E9E717EE9146AC88517608C420194AD8328E218631C8321C4A534497643D0F3FC101D659A281895865A3A08A016F4E4BABFE06560BDB7C871CA4618C232946334B005549CB79DE26D72372BBF545B9829A04D9B38FD4313329BC3987409F5C15BEA6479FB9DBA463A1B9025F2A92676C03C502BA34793AEC4AE8D64697898A9B90BDBA8A7E049DFDCB766746A95B76F1A1DD3E77DC25398BA796926EB15ADB49B887EBFE271D5CF10CACF75FD8A4EB5F7EA14CA2E05FFDD72B9FB7F69617068462B10E8B8257EC2D8304991A1AD5215A0788C04D6C3523EC9F600576DCB6370389035B537F0AAA0380B7AC30D8AE4D7B50847B399E7B2FD922F5F28A57814A687944C0C2933B4E060A56B8A1977EDE041C1A114ADCEB86E2A17002FCC9ABB3A7E96B337056C0616990BFDC9204C8CCF6560BFF3491D84C97BFF1DCACF30229B62E1B19682459B65EF5B574248A5CF3391155084665AECB72BC662D6F35C2C30C0E61DC1282BBB321838503DA0D52128860171A75EB6C8FA28F335D30C1CF6C3E5F047779603B7F730ED1AD6DA0DB9C77AB9C50B98687E22779A9E4077D82D7D770C72343BA6E46459FCEA3B9F4075E212CBD065D1E3F59D756F4CBAE5010195E58F70BA524B1C637407CAC8E33880B4FE7C56FB89D7734FD2B738B8171B511A8F293EDE235EDF8145C144F592B67BE9D9F7047EA00D15F74F325E3FBAF7B24C6F0F2FAE7CD84CB5B2F606268140E0456164394D611E64004AC32EF68793D87EE279EF8675C180FCF345FF987CE3E9F6005F4E7B2F09E35B6488F7CB394549568B966987F8724531A21686B5EE6D2DE138276917A0F4A95FD7AFC9D484E6B71967E6FAF312E82EE7E7600114F9FC3EFF1728C8EA7A4228E5CA0299E540E9E96194DACC0ECBF458974D3D013B22AB8AA12CC156FDAA402940D6211F889490A2D34D3AA8436DCC2DA6737CC368C4E5F3B0193B240DCB9366FCD6555859264A8DE01042BED5EB648A2E75BA1B8B1585B4DC41E188EF533533209D9D84B543B70A2EFFD159F2C4B61E0D69DECF26A9A7987D232D9B3242EF2199906F4B37FA5F69C1241699C1E007D24EAECCDB71874D6BFB346C5B347CCF0969B63F0C1C2C18A0EC114906E69AF6B41B54C2949404BF7B75F56B3EB03B50E5E0C44F99C619ED3F89BE86C81C34E1F823EC9C7D4960BAF98C2BF3C095BD8194926D8D5A2CF9B963482CE06C5E1B691AEB333F4A2BD142C54D284B3FE77770D7BC6F88FB7159D5E9987E7CA089C34B4D478EC2BFEDB2C873F585F03408F168112C8CC19897A3D36D108DDA1DD75A315BF79374E17DE118ADC917534404AE920C7491227FBBC83754D8D477DCD77684E60D39E8FC98C4DBF11CE255279326885A77EAA06EA4BCAC8A07A7FD06ABAA1EE878E05291F703343C1C64883D6B79D65CE865C35D30156C3B1C9DEB8A7818BC024444630B234253007240B10A8FC451C755734C5DBDCDBE31C27F369EA0A7B7CDED5FAEF5478F7AA17FDDB527179153B72DB35416AF3B893E44044844F0BD49F411221ED9B7E63E128AC8078FFD4A3F06F7B96F912F492D7C417D0F2F668F1068A1925292AC51DF5518F2D846303BFBD6D9B5E3DF2FBE1C1FBD527291C0BCE916F688A53E8ED5336ED0F94D1A8EDCE153433BB70114EEDA4D036B3B750248AC6EAEC512BE81A4AFED490D869B030902817DBC083F29883106B7B9ECEB69D7AC0464E7073E4BD1F88455EF227D4783941C24C83F5C19BB0F971A8AEFD759152DB53D4216A653CB6AB013FDFD9CD0D9B01DD0A20873E798B9897A35D6D48CFE2E62D4967DCD40826D0CB0EB813D3A2AE84CE1BD52EFBE1BB52876F695B75381B931B4716354FA73EA504AB04E040D086D02C1F46DC7726250DAC74D860325D5D752F6117F4469C56950851E43D2232FA05C956ADBF1E53BD9CF18367AC04EB2B7583F1DCC166981BEEA0775BDC2643F5C1146765E14FCD6E18275F368D8EBC486DE977B8110233EBD81B2AE4D61EBAA1FE600E1AA96256AF45E14C8C099143EC8C51005AF34A218DDA8F1DA1BFF1DEC431046E9FD721D455C53982BAC4528C25E1486160CA009756CA5EDD0EE1212AE3F6C47E13F4C45D1F18D20184F9388EDB1090823AC0F9F60B33A3E945BFEDD85A5977C78935C6BB40B2E30ACF68FE23FD5675397A46DFF644C3EE51580B16527F8087FAB8671F092BBC288E97B7A30AE545C65DE58489803865C5F6CCAA82E4F48CDAE44FC8C52DDF08ED2F3D800B2A4E2B96BC6EBB56A7E6FD0C85848E0A2B9DB8A1B52DA68F532809963EAA4EEB770692C6C5630E45DFD0992307A7FFCC602B2BD44F18AC0712EC314EE648E23D161D230DD5995412648B6D8254383150233FD56868CA14E3A2485841E0782CFBB5FF800ED2FE8F2D50FEDAF79CEAEC0C0B7CA5E09142F960E142C35E166516B307758A598A1BCDF98E0B64E9DCE9BCE45DAD9D48C6F7EA51774573218C63DAFC1ADECE60FAC0C210787F354907CDDD6B08EDCC088B4885957A828CBEA06BE422302E42C673FCAA4721E26227F00F77B28EE4B0C29112F0E7ABFED8098C38E0AB0FF88A2051420AC7AFF3A8BB35516FFD91A67B83948C65F7050BCBA541FB1DFD78AEB9FD28E49F87CB40C67FA899E2B8ACD10AC7101A5CD1D82C0FEC2D93EBD461D566E7700D4BEC48172E64DE2084F0C4215913C8394DA2790DF53F36F5CE3CD891B32EE5470EEF0AE92598E9234E65512962D6EDD9FDEA56A0FD4CC0E7552C35E082F0D142D0A446945E8F354B6F0C2F23BD807B68EEFA77B2B010C91B9384588809F7A7BA172C024DA2D73426B040138AEB2AC2AE28A7E20CA247E117F3114530F25DB9FB9E82E601FFD2405F3A552E07C706FB3CAE967EB13C8533F8518C92B2CEF482FD6710BF8DA550864B243A760CE9A7471EEDE5FB0566897A8A871148EBB40041F8D6785045CF701CDA0016015D4411D6E63F4DAB0720EDCB42FB8E41A2FA4B9F4C5DDBC16E488A483B0D3E496FD4D0B2E96018C2D51D289DD59235ECA3AEBB62E439E50AE1B22368593445B2F8ED467C135D8F120F117AE7DC75D51402F4BC7222F6F4A14AEC39AB02F28B10758CB5707FC7E8A6A10D5A28B66E959B9D882A6E7235837587ADA71370C32A4790FC04C69EA6205413289CE2DA37EE4C45AF10C56F70AB40A8AC534121DECFB91231D17902412F1B2C5DBBF11085E6A255FB4DBA8B6F21CB3AC0D966E51F067EDD7DED155F69ECFF108722BEA46198609CF92556FEFB1776377EC4C033B63DEB7E092CCA097D859D4211FD9607395C3B1F613F2FFDBFFD64FA62DE2820C060F2C6010857E7744117670DD1B426735E1D51281DBC6DBB3EB5DE75B69904F91F523B32FE1D4F95D43CCE6DBF92AC4EAF08A29E55C179FA0B587BF4E1D89244D522D18E8F075325AB241BD2C12EE94BDEF8080FBA99680D5DACF1B1B13F837F036D4053EC9F2A695B04AAF3A9A39E3E18F25BA742B329D8668B90486EEC71E70F1A1177DF2CC587FB4C8F578651DF7AA369CF1EBA071CC87AC9D30ABC0DF5875A1FE5B1CAF1973493D96F3C3F3F37C527CDEFB9017C6B8941E700E227E8E12B73D9A478A4C632E4BE2FA7FF33C44779F5287F632AFB75FFFF2920A380C24275E7A0AC8548710E244D3CEA19ACDE6A82BD5D463C3A254B6E0AE6185EC2B482B58C98D6CEA5AD099BB62DA8C74693410562F275B4772BFEAB2B6C17747F37B18B8F93EC2844A57BF3665A6107EC82034304E447D27DA66D52D7A3A7A5F177071B9AB4C1471A18E660EE788D0172B7DB78328B2F2376C32950755C68699BF0B12494C02281F22388B94BDC4EEDBD277BB1EF8FE1040F930ADFACCEA65371A06DE438FBDB4B9EFE19911C51E0CC2269F92B5C04690BB5B8444670FCDCBC50AB83481F4755DF91139E9739D0335BD56BC7C92A94FDFE7B0642D89A7F5F46195D8967D0112F99DED6580951C81AC6509D03A005358C322CAD7D1EB1B9C60B28485D9B863252D5F331C4B7B2FC722F60552C366156B15564492612B542BBB302CDFC529F5415D1B3639941ABEF3F8F940EE9FD80D9F360712FE4DFE61221DDCC13AC7E92D0D0801F6BF2964AC0290CBDCD9DBF23F26CD120F58E2F2BB8C903EB6EF1A48016C62687602DC9443E09E1AB4461CBBEA3E0ED2CF2D86D7F9C9C1F74E16B306D0FE00CAC774AE99169090BA456900F7F2981F93594130652D7E0C0F38564DD3D9F1B73778D89E678567D91064E221EEB76ACB528C8D2F541C297AC290D8F2EFA26FF9B8C3A4CF8285DBDDB0A832191FE30125CFFC83EEB12D7C76968494656736A78C5792E01451408632F732559D6091AE9BC4BB78DB9BAFC4B7BDBC7EAADB7E1FB5EE0B0F923DC2C9F1F718A0F01EF3ABE409485DA42337899267A7C70FC5CFA448F8F370935A054ED7F83244771F390E57A1DA2DF5A51A57B9AF12C33EA7F5E3420A4CDFD52D74CE7195AABBA52B0A32D07E9ED96061FD4434B3BD5B5A27AFB69E83211BD889A7D9BBBDA3E745107898BADCB7A6B8D86125BBD4275FDC81A8652B838EDC0815BCBB2BBD5B25200F9965521F84E9FEECD8BF3D767A127F329CF78AD1C7BC23F5CB009F8182BED56E640E69B9827553253087B09ABB1DD9ECEF15AECC7852A116FB143F8418D94D4B088EEB4C13A614B7ABD33C9EB620F81B4EF0EBCB8E79599A140F957A14056AB321FC098BA6EF86E566A12C6192822CBE53CFFF4ECE5DF8EA15FC19392C96DE9152AE455F7CF6819F4BFD30F9554272453EA4DF06C40709E236E0C424CE9E8DC25D30F31FD0AB0C5ADFF2FD4A1813571F0CE773D4CCFE4E15EA0AA42834923BA8329E5F09287DA266C7995C848AE42C48FB39EE9FE3A4582B760092C6B46AB739576B614EBD5118B2235C43564E1A107B894DDFE370CBC9B66EAA7DEB0A818210C398BA7B6B5D9B4C7F0D49E21381C69E71BEFD2BBEC67F17CA5F6555C3562D621DC6F4C6E5BACF11B0ACC894B72C18551DD9A78354DD76B18751E96F5ADEA0A314E8825D9FF0690B1F43A76D9DC8BBF1FF17CB37955F71BD5581A900EC091F9DE39F58ABD51F000D74E4DDD9FAD8EF343F762F3842320EC6A1110A6489FB510A93CE945F6C7FADE61BC2AF538C392336031AC5266A270D9ACBE5A58364952732A74EFC4B11920AF62E633F90D97DD607ED64A75796012020500780C2E952D9CC4C79226A45968B6B7DF3A9FCB60E3094F8CF6CEF7D0CB9395E8867CEC2C092255D31084C20CB648B9C2CA5928E67EA6B6708A0 -MD = DD2DE6EAB604E20ACBEC82A82A1EB3A0E4577DA7923DCB7DA0F46A1C -Len = 32981 -Msg = CF23D1B9870C2589A5CB3C87208DA86322514B36B41C92C42B73A262F991832D36A84B5F7008F68ECBDBD98F75ED55E08A4F873F58F3670D2DEC58C63D8A524666FD5DF52D6F5EC169652D9075522BCD6B48D1E083501662BA21B540C6A039C2CF96B79468E9483B5260EB4E56DE2496D4CC8CE80C7C8EFF37D73F7DB9DF2ABC5A6C0A2FDA0DE421CB2E04101A7F755BD3D2F7572DC851D44103B2D533CE9574CB9B644EB826946753A7A2C60E4E7F18CAAFDD40DB8BF43756032956972F19D8DFEA2B61F9D0110E25A680887D24A8F04A8C96D52E9FAFC6106921BB3D1AC6CB1D936EBCBEE5DC7F33FE3ADF693F3FEA79E545833789E4EC1EE725AE3159234B1344F63852ED3834AAA7D9594BDA5E8CFFA207E17BE0F2B7EC6888215F22BD05EE90BA46BFA77C0DB551F05D4986725AAD9D44045379DCA8CDC7F6DC97D875DFC3B5812B35269CF3079DE78BA90CCC138C830032CF288EA010EDB2A5CCB08E87E8FF9BE766669AB95EF9C1331C402AB6F68653B5683AEA58344D0F8B3FC8AA947A413DE40062AC89462D91EEB6FE28730D86566CBCF5824933CA224F6598ECDD4F95BD607C6E56453FA3F16977D4A8A4CABFDC67C7D98404E366341F44A8A8A5A55B27460F0C5B7DB810A7388B46116DFB9767829BB1711CC585CC2E0F693AE63E9480C183B41F84DAD77FD118C93C7120E524EC6FF2558524D85D8A6FC6C5F1A43F429E9E6B5C9DEF8E4748404AF8637C268752107E3EEF813464ABE75D613D5A97C575CB3E47295A0FE2485D6B2BE6F1B5310B7F098A72A4EE15F20EBD1D8365CB311C293FD485194287DB68BA31F6967F7E6CCB62F7E7922174195EDDB306B2A69E7BA9C63662BD314EB3B884CB597583276FAD396FAEF4270930C06FB2B9292B1D691E2798A361C5EF45D7A7F8AABF5EE33FF5670688E05FAD747483DF1878BE34CEECEDAD99EDE1D4EE6DF9C1381BE0C3B5A3AF070B8271111E9AEA7F9D8E2CFF2BBACA92D8A666B406F64A07550AD266CBBF271D8F55FB6DC4EE0E0CCEFF894AFDE2F13A3834689722B60FAFA0BD35635281DA983485208AB25D7F2D491F6C2275B084B55CC73923709B74464C90E680816588D45FFFB62851572EBC8D20FA3F303EBFD311C9A75CE4BDE021388656F0834D5E2897DF88BA1EA57C01FD6D2AD622BBD3B3E4A1751E0850A59B1F541D99C87017F766A042146B2E8DC2957FC1E73C8D409AA7A0F6B04A1C1F00AA1CB2ABE563D97761439D93F36E48C33421AA52D4BE0C782296073D277A085D9AAAFFC74A718A631C1D5A874E593D2E7BF7BD800E0F4A054CC4F68EA0A8F31785CDE479D2997A00931B35D72B1F133C070774A3DD7D436427B6B991A83A51DB5E1621F8FEF198B1DFCAEF48D17E6DF5A011784CF93C8D2BE0E1C137BCCBC94315B225631861184E3C81D8442A7F19958156D9EB48A9A5B6EF083691AD0E98498F968497685CC7FBE3EDA9EA2C52650FBEA9D1B993E3AE192FF4F6A4174AD8D3CD5210D2A0EB87D38C65C90CE6D329AE1D10D386D7BED0A7C6E635031EC65B8FB6CE6683ABAC40276075C9145F4E72E745266AD8F4A0C173FCE3021913C2225194DDE5D840F7DBCB08BDB1778F971C194B0175CB5D0DFE920ABD38A663710995C6A00F34EDA058AD58C0D97D261936217D4503264470B53577346A2A37164C04C160B59C3E3E5C3128AC9EF4240B00B616568375A769F6DAF7E7CB8F8DABFF138FDF3B55D660796483E6CB57E02E5F5C3495D54B1235EF8FB26812AE4CF1E3661126490EFD5FD485B547B9036ECC5B1C43C6325A60313F634169B6FC36B78D5517E1CF6CE973F6A0CB03D9C3B4E2D1382CE244B9B253297F0FBA73707BB4DEC75BE4A2526EFC842F20DB3769D11F384E47A6D8AAE72E7297BCB973DBA454211E092EA56AE1B0FDB46DD6CCE63E3271EAAAFA68CB3384594FFCD38B91E19C26E24C0D0211A056BB6DA108F8DC077922D7FEBFBB9993590A3E932A446EE608A5A3CF727DCB2F744D0FAB7241F8BE93DCC7EAD4138BDAF09DD4FB04DF5DD254FA914C8FDE336432F7BE423C2F6FAA70760CC56C5E9A887FBD22051138466B8A65B9289177DCB8C027D1BD4765B52860A3EBD1E060AD046C0E72D85DA726F985B4242823CD6DE9BD93E8BA0BD3F756C541CC8458D8757F0D1E6A96E16F910B3B31A108E3973AF1A74703600039C9918CD5AB1629155984657F11BC4E81419D04307E052680F71D2633CAC1BB489BCE4B405D00629A2D1F077CA8E8311EC3A02B4FED3BDAF4DF2E16E7D3EF8463278FBDA78530A61C6EF78C3A7580C028AB377C40022093D136F7CD7B228A664AF831373E7AD427B641A39DD80E17EA33BB00F9B67E59160A9D6C81E6FB4F150AA8340AF1C7886C3493B12ABAE10B9B32104B9E81E20AFFEED3A3BCFE88DA4C6802F0F6EC9DF73431128BC0CB6666DAA164BBBCA27E723E0431B44AD01D0CBF58D4BE8C920EC9911914F98056184EB84A9E98F219574251F9E39AB1BDEC70BB47C82DFE5C9B84C0D5839C12A917FC5E0D19C7E2736312D548BA5040569B78C17353ACD5A0A0851000224E63EFA075539641B83A79DF98779E8E5BABB97D2113847A319BEC45216E6AE9C8BA6D5BDBFD485D97533AA192BAB3BC259D2B148EBA33EF5A208087D7D45CEF2D23CAAF60BDB267877CB66FCA08D0C8D72FC411AF9B5A3A3CCB97081E8EF62649F66E3EFBC635AF8625B944B6531D5B702B791C61369AF6B0A03AE2342B683E4A24DA07FC9965694027529F6D33DB56CEF3F31C518364396A70EDF271C20735D37A91735BCFCF0D4E1B4280C15D61DED753BF97137FF160F9ED1CBB73BE701F4651CFD6A6C75D0A152581623B6F92D00E4487DB292B5BBE066F2B9704956A3A269F953B3B9082577ECD73462CB5D8A183E0050D6A38333B8C3298BE84C94BE939DFA8298EECDFEA6E662863A9C7F0820409B38868407C448DF572D14C9D3522B2450CE484001C830247C479FD980E7BB14FD678B900A10BD7CE72FD83F799572F37A595A1945530A1D789F3D3D74223D489A0944EBF9C73D5F5C834396FF5CF0FEC10141A46E13A328AE6D218ED49061E95DBD8879D00E0092EA217D4C0669C867B954E07654E099A20CFC69F3563429E70FC37982866363AEDDB40E8EAC8832411B127F1466B3C9D9A68730672017E9770C645A8EF4812E403856CAF55D7C21B84830E2DE511C092E39F00AAD28A92B41499B3137C4E1AB629B277114482D4C2ED7B36B328D2CF92D3811A18E603D2A2F0606F63DC299832716F3CDE3C5BF1601A487D5354E854A5FEAEE7D30174AB20853CB17839CCD4731D2598121DEE37081769751D2AA84249EE071AB873C8561061F6471AA34AB603F9D0B6B852376A9F50183A8DBD503F1FBEF0269F7695579EDD4E698A8CC5E14C530C9DA1CAAE59715ECD8110AC4D48B73DF5BFAB27EAA70999EDFDF361CD1A53004CEC4AB8F56DFBDF736BF26E74CF6D7E671372E0352E1E1B94C79AA8EBA78C630645955CACE002CA9EDD2BA4E80CC4281C2F178B2FE4BDEA61A1FA3D6396F6F770A6AE46D8EC46650AAFE094030973680DCA8FFF4BFC79FD9385B4D277400ECCE0621D0AC9679A6DE0358C7CDF2E7723AA2387A18B2FB2CAB8F865093EE63A652A31F828DA4473050D4C2140CB87F7BF6731F100A526737278B8944A830385462FB94C13FA2239231EF4A9B1D1254A23C3755D73C6CDA02C7F5762ECFA00844D6C8AAEC2A301B60B358EFAAF9B86EBFC5E7DD5E5A3F5D00E4E95AF6C78B81663988C9B95B69C05A0316C47AF3BD1166B7B6402D1F22DF5D32DDE4E8E0891148626E617215EFA4C237441AA03DB665D23FE0FEF38DF821D00F824242B4BDA39E7869FA4FD01EEDB9298FEE5A491B089A3F93CEE20827932FBA2E0B74F9EBCDA6B2E5AA4222600085A76871D6E163C2D0A0B9437031889D51CEDEE7BF098856AB17D0073778DFBEF8EE70F950EBDD39AFD97DFCBC7676339578661CD58D0F683488F11EBE2AA120226B9B1B47B39E52DB7B70BC03A88ADE7A37C58ED0CDB4A894956CF22355B1AD27347A6431C4A90F8E07E4EA5D1EE83B0D13357103DAD61FFE7C7BC432F73E9CD8288D0A60D3769351E3927FE32DAF89D19455E14B139D0FAE14F219603EBE07381BC9AB5D635EC88C7D85654F97DC1E0E32F6967275DABCCD4A4D3126C8213A4116B6DF1D5F9C3BC7F913AB92B83D9816326F660757A0216929BFAD70146898F72CA017B0BA5CF1237835A23D7320561B85C1B20D8BE0187B172B24598879BC6BB6E7900EF3E21C18F8201AA169E6010687A591CD1E2BA2EC4A3A13C39E91194EDE15A5F2950B420406FDE4806FC108D49FD3ED7A826577C4E8ED1D46B4016714C408C27D995A228A021A80D0991B3E7AE875C4D72F7EF192A1EAD66FC895C0C7625FA05EE567567CCD5C7FE2968AE2215EFA442CF79B0B4F15EEFF79932438F3FC18956089E5619B1E99387D578D1D364C46B5FD683C9649E735F9E1EB37C0D3DB07355FB4170BB2AAC1DFD770C2B64C94373BE335986F251062B427156B23DB6CE433DC5AA18CDC0D13046C0AED2431209A339252D2C796B453845BF9326AD1C895C5DF44EE3FAA288748CA5EF4BD6800C04709CE4863C562AAFE5658CF394E9C75AD32B056F86A49132B9B613655D204A3C456A1A024F48D586D0E5903A13CFEBAC81BD6F440F617E16B099AA84E174821125AA8BEC6D5D93073ACD66C69625DFDB53A55FA5CBA2E9DCB0E7F453298CC3EF8E96223452DB7B0985C61CF7C2AB2C7DD999DDE3BC7EC060BE35C226D1884B88BF832AAEE01C0E4CC3888E226F428EEDE7DE45CF9F241BF1AF60FA75F3E63EE8BDDC9153A40A0D91FA7063AABFCE2DF2E24031FA6C9D85507514B2DCB631A9532D2DB223BF2D13C85FCE1422B064821B2BD0843F4CBD9BEA9AE2D44D655BC46C769037E7C07C727EC8A23CFD112F46841D3497CB70DD07BCCEC1C73C1EB9D615AFC57D7243AE92A4B843A13FDBA5235A0F17A668F891AB0C1030A467FB1477ACA14C7B869849BEA93B8AC7B6D8336134FE099ED3CF9BEDA189478046BB4E84638D621A7A3C47C14925ACEFAF470D6E93A671E0B76233D8F871828274D62F46BB364CF043B3A9BD63CA96B12F155D5A19DE777F0BD1091B207345212D4B839A5E0442AAAE8FCFAD8DAFFFB22C8D63B2B6F08AFEE6DA71C931BB09DA69C93FA1F1D40736560D973D8398ECBE98690691EE2F7273F1BF3478E42E434D078849466C43B9B628286D88B033C738B504115F70CC1BFDD211951F82FCCB34855848F3DE99E8E43FA548A8079C8B4222C799674A031501417814F62767ADF80251E8CF1D9C3C08651CEF806DDDC457BD56286A1144AF4EC1892C934EAE8A500687C1FCB0FFD4E873C51266BC1F17BF3FE33F640FBB44DEBFD30D25E149BDCC143E48A6FC89D8DD605D5662C154BAF0222E659250B58813BAF19B0698099297F23D5E94E68AB388673790C86D88CAE0D24ED564DC9B02C4E33A22AC99F727A7E1198A48CE427F7570DE74206B5A7D4FEAB009361F71F92B6B1093D6CCA615E377E9076681FA8FD1E0F39C0707BD0F2877BB8E704B936CF01E7040F337DDD6E69444774D909E914B9CF6DF86B1163CE9A71199EE6B8700D9AD15D458F1F60699E3FA5F614E922F49A1DC5DB82DE31A4A48D5041DBF526A67A405E2C77586CEB095FC91564140E6FBE0323ECD803E2108AD7707A216610F02D4D1F55D2134D10937D65916FEE43F7AF43EBDC78553B08E30FC35AD7BB698CE8C19DA811154BBAF230F51F00819B78E98 -MD = 3458D49D6EE75110D89EEFE88DFFD1C2E320EBF35EDF27107F726EAF -Len = 33044 -Msg = 90D0A04D264CEB219DF8E93134F8400D7065B4BFE72EB0DB68F44A6EF3BB052B93A51D38059710758446D479508EE51B17D172E6D52C7847CD93EE9E05428B00ADA0840073959FF674C70CD612F15FBF45C3E6BDFB60EE81E6C3ABD76B5708FE025667DFA56115C091D7C782D2B786AECF71C258751789BCF5CCF037D7CA52FEC8AC86F061AE30F4477909E0AD0382D2B9EFFA6F00757A4BA923EBAFA8ED5F58BC8B309EEB3B46049016157A964DAF2A0C30173A3B2439B21072CA322DF5D603CD054BF95E2C264EA30D3D978F5D3EE66FAC382D4ACD7CBB6718BE0F9839F7E0D10D0FE9F67A6A88B7040869E5973491E02138155A3385321948DDEFF654DB6F19C826752E4630FE1456C290F7DE398E28DE8FF3307DCAF5C5C59FF2C8C63F2F5DAF20A0BEC71B250EA99D1303989E28B0E974742090C8097CE5A12E3F1A4B3D2C6FA76779FA1664D38711EC393B6A2EAF665171DAF367E378CC151DA180A23ED89937C65B80A35B4EB41C040A7B316BDD0D7BEF2DDF5831BA885EA3F7D1EF7CEC77E761E0F14EA4241F89FA02D1DF156F8DEEAA4B13679A25A287A7A3627D211B12DF9D33379499B27A08F9D762394196BFD893FFA37B01C177013ED18221598DB6F50988323256CADD1DCDE8434F05A5890E70F720C93446003E3BC5CB87A2E4763AC62A283C3ACA19F31ED613C735ECEF057162B06BB853DCE9B1978FA1EB42CE22A4AEA1A64283A491454281873C944186A4271DBD5D01FAF36391EDC3F3A6C7396207958E6B1F770BBC343FDF7661BD27594F9B4396DC11836DE59D5BD2B211A3A0080D985ADB7CEE761AA9F177485A538B129AB8B4B95CF26617941E78467521C9A6878F78AC80B9F69946AC3DBF3CBD84174EC1DBFF9ED2ADE5CEFCA29C935CA403D2EDA89B80D24D6C342A7F3AE6EF69A5B7DB4085430DA4B62E6BA633A6F09B5BB0472782B3ADE9214BC6FCD52D85807DB044653BB17002197537C1CE82F88B5239C0CED08268FBD8170BEA94B2AC73EAF488FDB2CF5E168693D5B1DB8ED7CF226063BF5BDE783512771431EC9958AC5DC13379F56B8036BAEDE50BC2AFE779A832568CC8DACBE41938732BB3A32734DC2161BB8F3020D65B4352974CCC667C8EFDC4B493ACE3C1D15A3B863709A8A8F7ACE56C0335982E5FB209ECEF3067FB899BEDD2A24CABC64A8F71974FBE8977445B978BD2E6FD035D7B6FBD8B00112F7E63BDE2852D1BDC7864E2785BA0344C645BAFB725E9AC358B4F79CF476AB04C407F395A7EF9D0161E034D3B96FB4194F0463682FE245B4D6CE5B51D270069716CC32008482B2D2346D7BF1CAA7D487561E92324411C409C32073C51A0A9B39C802FA0DC7631B809508BF300A1887D4A0BCFC0D1D698190A9A0D9D788C1B2ACA8DFAFCC8064296FC394FD42BB2840CFA86B060C7CFE34CF361788C58290C5071D3397ABA83F525BF3717AF582757E24E420366AAB9C9B044256D32446A0C6AE9027ED76D05AEA5073DC3F5D220E459261DDD15C5EDCD389F10FC934B4E6FB288733F4AF92871BE3F0A3C90693D93BB6272ADD2748FAEF9724BF57E1415B8038077B6EA40B595A56F3C7E03D55B37C8D37EAC122115E3A64E449FA2E92527B0772FF30446E9B230DB8B3246D982D5C189461D0FD787005C1F96CC99D595AD627E5F99FD5F8952BA53B97CD8C46F633E9E5D5471C850827D5662DCA826AEEE8547B19EFDC9F6BF491E04B028069E33B2EF10F4A5073DD00A968ECB5753A57828656A03EA55278B493235AC1D6EDC7C5ED5276591AA9F870E2138D96F5AC83F50AE4913A00D820DDBBD86FF4BF6766C18ADE340E7D740CFC354FF9B364D6E670A5D844DFA80390EA16A33AE012AEC2F5CF5BE1C65CA371AD4904257192D32D974B43C979ACA1FC8E48D76E96C26130CC1139D7C7CF8120C1DB3A6A0B98319BFC3BA0BE54B29AA40EA7973CF284D7495FBE855B652B8334775562512D0F6054F9EF4BB27CAEC20651765FC17D2EA7A0608E34FE4A6ED5D2DBD8A61D7BB050A273EDF11CF4C8022D8564158B5BCF68B9548F4BF73DA5E15155CD870AABEC3BEF711283625BD87DF107FEABF7BEA330D5E572F5DCDEC622920E752FABD34C16EB0F01E0B7B4E1B0E126E0BD2949257D5339139FC5D3114C9CFD417F9F8773715E21779758DFEBC12EE60268836346E05783E35DA4F027CFFB3A45CE5939A9B549ED3BBDDFF797CD8ACB7D117DA8A9643EF9A3C4426CF4D55AC46460D00A2CA803736C1826CCC6C21A9485A16547C234E08682295F3A0BE24E1D444259544FE6E23050AAF023F4BA217EFFD32D6C54659148FF0C2210174341870EEB0348DBB4AF6D87E931B539D2D0614480F78129C183B6E6D9A047B86F1FB11EB1D5874CBCE24BE42C13E955DEC996FF5458012A0F30C8FE004510135459C0FB2475298B5C799D7980FA9A849833EDF6247DA8BD10BD1F05120E1458BD75276E600FF92E577DB90F630ECD546BC9ABE7B5C0372FC974BDE0253B10EF7E5D60C96E5AD8042428B39C8DDCC4C723BCD459EF063AB05979660613D59404F4D3085592EF51DDF858AABE9C55EB04956305FDC319CAB9484FD50FCC8F5766158C4D8424A3C7F9EC3F1598F39A67FC2A0908A3F319D4CEE23EA8217BC56C6FA185D75DAA897B51C24B02FF6BED5EF8F67077E23F99DD1261C20D37019601AF4051EA74783589E01E1DDE7A99EF435CFE11976A73DA40A72C41DFC506D756E6531AC3C2660AA54FF20375E5D7547C1879E80E6B103B925588A8C2FD00355E062690272572152C2B18A11A19A03C9F4D5A9832CB2AD436554748EE9FCED171DE55AF9EFA299BB1979C182A18A12B83E89F8BC2EEC5BAD9AAC4CFCCBE0311A022FFA2CA6D60D50589F447CEB2F3F15369F025CD9C5E19977F67DAE9E736FCCDFFA38A8506A78EBA8E48840D596FCF26608E2E5ADA69A741A9A042F67F8FEDD3BC1202BFF66636F5675316ACEA0511B0E3FBBE36CEA2AD83800E57E8EBEA2D5F891D3AEC2BF4FC301AAEC3F18B15C5FC52B6A73FF5C1E6E92CBD8C1CFE2AE84F5A188FC6C77F26504B2F14BB2CEBF00827D83B70983926D479A27018381BA55AF2027ADA0ACF21EE770C50674C239DA2CCA1E6E0452A11620F63684BC0DFC4012867082E8E40FF37D15F12E82A76F3C2946109023FB3A0049BA1CFAFBF901D0494241D001F7C18AE23E60D0F9BBAC68FE649E30E0AFA78AADF0F63948E619BD47E4D0404233F8D4867E59992AE18F9A1DEDBB986201FA94362BD477AE062D6FA027C78F84D8657EF91476B49F58D1B7AE3CBBEE63114A441EEF4E3A4DE365A08ABAD7CFFD2B4E3EEACF74E34DF09263479612FBA63A9699D55A8D65828E872182961B77A35883FEE187A130F1D134470ADBAA86241085A14CFCF81F4BF47E842EEED2D71102AB7C8B437981F3CB2DDC96AD4607A66FC1781688E6F006B0A27EA966EAB0691ABB6223E5EB1BE6937C1B04FD0A0A73CF111296E21B837E0B77C427B09128EE012F3E67405D47D69E7D28DDA17676530AA2C9ED56C1882DB08491107EC02AEB31DE7CA8E9FD689C6E0A53B17925A659BDCCDCF049800F44613BF9980AB334DCA2FB4C01E265B81E9C34E63CE9FB903ECAC599BDDE616313091CEAE3F0B051EE884980E64B69B206944950C8FED471561A11DB3A85FEF378D4EA3759A2FD99A760925DF1C72641D1D3DEA3960AA7F7B1B71149E0B15517C3A80C0E32F72FA87C0460A54E325A1B479D6E0004EB0164B68138CD6D442D6A3A9A828E338B2C75D0C248C4568D67948E9608945C89C890B8B8129A0D0E5A19877650C75C7FA4AEA3CC8B885C6A15016F3C4846FF662123F176348C976DF6F3D5C98E6A32DB87235EAB86F67E6834A7E607F359B125DFDB45C1F9B848E71EF22B289D30612A2210F82490CC47D212FCC36BDF41BD93793E8C4F0FC0AB0A232C84ACE8EB704732039E9F55006011DB3B61B537827786C6CBEAC7DEB6472FDA101187A986AFCC2D848E1B8BC1F02D5E76C8E9F888AD66E42F954D623302848E8ED1E4FFF0A8738AAF451A4232A5D9531DEDD55ED285B8F806273A301BF27A650CBEEB9AC9A856A410F4DD8C3455A1A01E5BFFD82FB8FB413105DFC0CFE33D4FD12F17CB2EC26AE6B20EE613068ADBEC644FA0CF29CD5B7260EA22DD7345A3DDE53DCEE9352163FBEBC0236907E46C77F886F2B661896C2D9A352B8E7A0AE9F2E08B2A233333A9F7331ADBBB6895614E78DF70B86296E46063BF64F7A35BAF362D52ED11309DA23AEBF899C910F56F618A12195092D13384D07563F2B61CDF43CFE169D6AB0375A86A55CA06AAEAC4656C1E34BD581DAED8E3123171F28E3DC0F4F1F18D91AC34B53BD9E134B4ABCC97C70C696C6C4A03C64DFE09B01E8956C522C04956F711DE0AB0661DE2978BB01968FE4963EDABBF1EA4E8B2E41DA5DD2F9EB4FACE370ABFFE1AD644B86D2E78A43A2DB8800B0D4FAD6D20AEA81EBED2E6AD4D82D1019F1EB0C2077B91E64E9DF68E67D64891E704727AFEDC94156D206E1F3F710FEC6C522B3AD38BFF4B3CAA95162D5A68DACFCA4A7A09309E1AF20883749A31EFB90F7EE393C161C27E6D7BA91A9AE8C81FB84A9A7CC948BAF8E8507367B687223A3E62A60D5A9B7BB4681DD998DC979C39770891FE354BA2249B0F6B66A9317CB3C9C8FB5F2F8FDF86CB7CECBD23BA7874AD379FE1DD973500CA5FC1CF478FF1DD4B53E98CBEDE9FEAC1E0CA58856E39449B07DD6CB6B799F5794FF41E9E9C42824A60CD98868E5E7C723F9212CF8857870A852B5764D63FF135F48F3478D9BDD96643662E8A0070CBEF71C3485CE5BC6853ED0CE89BA50D6BDE1896A0CE24469BE53EC2CD3B108423AAB3600AAC46B4A575A2924DDC2CE595D7C05ADF79FA2CB5DE2885D5CC2CEEBE4675A31A3D739DCE2A52FDBC65945F97D0E53034297351627107976CED025E0FDA79024CD129060E4EF825CAD5C3B7477C34E8C8FD70A0AD44F8C3AF5115D9EF68BC0AF43CA48C5EDF53BD0AF15DE37851ED86DB14369080F4248152AF7A1E6DD93A5EC4F89CCC898F2FF1387E0A1A55FA5A1F0E8138138F627BAFB4B36E8EEB94AB5FACBBF515917B2FEC41614BC72176D513FA37745426EC7D0CCFEF22C5EB885802AAF420BCC586E4BA23E84F06197E4475021C1017206253CD4B409CDA84F53A0AAEE4D2B1ACF597F27D7FE5A408D3F429DC7FADB3C3DEB4FDBDE053A4B4BAAC12B9E06ACD0D61CC266BA1B6FD455F6584F735E51FC8FAAD801703609FEA72195594D45B1E017230ABB444579BC64AAD39FF1448770A92C2CC3411FC54020E5F8965158597FF436874C2D2E08AA12BB0469FF510ECFEE6ED72218966B8209DC29A065E06CB7FA6593D5B1D879E55DA403F870FCE0967E1E79069811AC7B33C4DDB0F1E3E1C5AFF37AFA35B500C2B97DDCE00D8D9BFE528E31927671F6B1F82D25A0C261761660EE15ACE4F4E59FFF7C5E33686F8A802E2F11AED29CC9C82ED69FFE9A8E15BF688A3B7E6DB3AA1968878885AD9BADE5B7B09973C73AFA6B0A0A250FF0921C4D02B45AEB108E198745E6E535ED4478D34ED867DAE296E29691FCFB48387D4B5F116458855869FEE6FD286E947FDA77092CCD092650C1929A0062C829B9AF5D0348BF4B98488BFE3E536D98A856CAB830F54AB0D0C339C0A06AD1D37B285052918A0FCB08457067D869A4CDF19C2658527B86D211E3FEC70A888300984907882BCE5AA838A2C246A40EC502022BF93F3E3F35F6F8A7EBC8ABF7FB0A4671FED82312512838A28F2E2213A1EB7D109AF1BEC614078228E728E333ABC0BA8A0 -MD = B3A87E46322ECA1CA961D400703F3A5D0DA4169DBA5C11E43BEF026B -Len = 33107 -Msg = 1EBA5252CEFC5DE67BE08F8FEC07F29DAA2159A94635C8277BFC05F33E5F3D8FFF361B3D6A16864F9807EDF209B756AE2A8D967FBF94EDAEF25A0FE19E0BF93BF5CC0F91956EB9BD07BB8215E30F01A9533C8FCD852755C735E24FA5E7C42C7A3B9AF21F115C29F4EBA138CD077ABD12A4F00F52F72529BED4E0A578FD18FEF597D3603F3D7D98CAE720892D1815CF00B914AFC86BD22077AB4DC70C6F765205F1BEB840857ABB9AF4D1C0FAAA2B55A1DBBA061ED841670F76AC14969AFF758AE94C39024C67942A9252EFBC6278FFE313A1FA0D0879F0F010786EF4D66BD55E2BD46E8E7C3F7BE971F0559A335B01147812B14CF18F3D09189BF49B7FCE59F6D07603BBCFCBB42AD31E86683E31FE726C8825B797BBCD2BE3A2F6905FF35B0C2396A6A074055D00940DAFC2D832EC1C8651916CCE45E208D69D0E1EC9F13723C3BF088E5B5F059BB772F1D0324E407FA25F3895ACED071C783F18C04F37CC641C03EF0C3E18AF5442EB8A9987AC44B9BB8B9BBF679B08F045C9B906FE1DFEF7273286F53AF7309F9FAD3ADA8101C9F3E9C70B5EEF989A3F1A83882FFC4C63B187148F846F10711832A872DB3CC07FD091D7B1B8A6767FE762500FF1FFF9BE5D4F80D4A2164ED22C80E6F7E1EA48A474FE73D5A0E5FABA9D1E4FAAF650EB3385BA022983EEF07FD4B1E545B1383B31046C91539129D6ADF7A52BAA47DF4C5EF908A3978BE44B3E54985EFCA3B6B0F5617526B7B5913C7D207295CC31E9AE95CFD1C04DFA485B0C377B097B3E7D187612AC7D67A9CB029138EB6729977B90A6A97B334C8502FF36CE087A9033706CE8F722036AF81C898542A978642FFB358E043E5D48CD5873CEBCBB028030D3042152BDD3B5E8B82E36BE37E026733F359471DC1121EE075034DBDF5342A41FB9193830293E725F2033A7C5C9048A185EBE5F7B268FA8C3295DCF965C7E6B1D407FF5F51C20FE9A019C87904F603248C163438E1CBA84AF5E965C4D0B3500B1B0CB290479D2116325CBF4FAB96AC73B501F1E4E0155554FC714CF59C7CEFC1D17D60DE543738EE91C811FBED1CA428E2F60E7928E6FADBEAA09DFB8F79F5250DAC8B96530439C9C2DF79A349A4AAA8CCE765B38297FBEE155130B2AB603DC860268ACB6BFD4E6A5CBF0F35F97AFB386877FF67176CD1D934440E99EB79333DDC3F3AF305512AA837872D5CFF433601C5B591A7F04BDB0DF0C8FD1593C192B2D84B11CAA3E3036C49DB0CE9B3AD09621B60670CF8559360F17A8A2E580A829BF35F0403AC9469D03F8FEBA3F9285C31B69199A2697758F5635EDB2C775EACD810F32B9132C57BA7B5D30C843605BB7F35C86AA860E9764071BD1050B6F29693CB9A923EB9A6F465CAF290D331D8CF1924EFECDF03ACD002276DBF5FC58266D756E3FB1400FF7A38C6CB227993FA923D780E2AE670D1047D5A82D7220E2EB36E76A8EC27E871D37A757A8656B29F90FE3E068E793D188768318E0B2A3845EE5E465EF69F147D1FBB70EADBCB9EA65CDC6C99FE15D378EFFC956720B72914D1E5A9706A990B9B87B73E877B3C916BA5A0D188C5B314996D17086B65BFA77ACB6C3647092A3580FBCC11A1A20DC213315ADB1711E39AE81F4D73190A5DF14F7EC1B9F6A2CB36EBB6A8FE05853948F34AC8AABB915326131209F00EE7987F8A5336C218461A29158884EDE88D22AB3301940DB3EAD316907284439EC928B877C094FDF99CFE47D1B13A2841437667220011239B524F8D817CA2A3053763E85D0AECAB3885B0F2BEE8E27D919A10D976737EF95DC8A601594138085029883624AECF8E2169888C63C1FFBB789C1407E666756CBBA6245936934939AB5FD76E91F9E9E41AB9FEC3F33EBCFF33518949ADB858D5AF6244668F2DBFB11E7CDA52A0293D801B78B0CF33D06803F0A00EB27A706DFBDFAE550D6DA6FC10D2C9C1FE226E41C842FFD75EEBC893E6DC3AD61C62829E5E06312F2F196141E4B677AE89DCF63784876690BEEA7EB2CFC91AA6F097701BAB99947496E4539F7AD130362D82ED83D0DFCC8A25C3229C26FD631FB62727B29A389A0DC639B774438F95E06A44EB9201AC56F71E81B0A5542116FB2C8A90016EF465D5DDC126C0CB8DDCFA263A97E765622F0E6A1104511D0D6555C0969E618720A13CFFD98A16E1849C21779F0B5BB2891997CA8767AF8EEEBD4644F5E1B364019B9547D140DF1019215F8FCB4C3919FE80E05FDA72B2BD63B03843B7CC698934AD1AABE78667CB1FB7FD396B2DA12B9F7053A110388AA2B039D8476069777E2E847031C4AB988865EBF03C77D0072D65F6C946057B96B7EF92D02118E06D96A7B0D6B9E237B1A65CFE63B495575FFC7BE1D9BBD240AB247027BBE24DFE5B899C6FA3F37B484BB1D88D77961103288B77717A9D55FB10FEF1F206B58A59B49E2A182A1C4CC96929404F8AB53A8AFA019A9363EA89B92852221597E29625127C5B0F0EFD834D168A9ADF4B8F20BCA0F5848B8D23C580B8F8DAB4CFEF75C4F22A38749AC1B98BE2C0A918DD2BA7994217CD9ABFE2C2951EF71C51073BDCDA82B3EE701C56BAE5AC5C4EBC7095CB46A178DA5CE65A5A6E693FD69494B3E73000008F8F8A9D0481F686FA80FABE284F6DE826CEA33F132C802D9637C06377D38BCB92B29BB294E1522815A3A5685B7E3ACD6BF8F6388481AC897EA3D425E8511A1800F8F7B4415F396A59012BA9D180916E0A2404EDEAD50095CC4B465BC7939E390BBF83FDDC573B719BEDF100C60D5E64097D81FE0F8D04AA32D8ACCC24BF640A9823475DBDF5453AAC500249F3BC48D4BF4E6222A9DE96FE28086C370F24966CDA264F578148E3BB0F3E5B9F5FE6A1CC13FE0FCBB031F1ECA2BAAFCD8B8FF90AF5D52454830D7A0C42C4B6F49C9A641FCAAEC61A174231E669EC83912F9A578630FA4854447DFDD81EA32FAAAC4991CF305D10E644C0665B9D960DC4EB98B68167B7629668EF41711D0B03744190CF88D045112845E06AA03C0EF774ABBF86545646D5319A745F095190EE2F47AD39F8D86DB42D1F676403C75F960D541337896377008F331CC662D183EA347795A20894DB79AF94EC98C3C767B4F6EC4D44E21E8D9B096152E4AC089D1D0A94811A606DF6FE9D7C2849F76510C668E58BB69810F6C2BF8F9BFD653E983FAC2C45ED929C8F3C22B8BE794041B3838AFC7C93945AC1C5C603F7C87235EC774696AAD16680442F17D0CEA8D58ABD96B5BB06F4191F8DAAB1BAA5D6152BD7EB8A34D9EDE07A5C5E00AEC88CE384351035AE6449E2D0116A87678657365E55535723E14E980EAC287C8C133427930193FB9C0E43F75321B2108275FFF2BE9F5DA19D646F15A1D75C1E93204594AC11F9ECECC31DCC50799018C2CD4B64F03320B1A33CA71DE289B23863088BCE9C5D8C968F9F2E21D86B9DCEDEF080B2B6E7BFC9C7D7C4EF477FB06E1648117EF3BF3D5A16C69699966D8113C527E8D94ECF1CBD8C0BEACAABC86F61CC4064C1345A7DF04F34F3202594C0A8F38B7A414E9C037F279C908FAD93FDEC33D4CF5EEBE84D6D185BEB1822DCBF8B19EDBCBDD94BF83B3D6FCA06A1B62ED73455CDBDEAAC22E55328EC991483CDE6249F61C3770817889F953D84BBD0E66B650415D7B0BCC7945B64A0D194761478F2BE77BEBFA8E5405F74378FED5F5206E8600E7D979C6CB7C42E8FAB267A7360466F31EBCEB5A48C10C425420D7D562B471FFE29400ACC678A716ED3A5BE7850C621E1CE9060BD3B1F81F3ED79533B32D10FE0109BE541E12E3D75763338FB2CB9A48B7B7E39E5E647D05C55932EB13608B757B7549D929D5362030C5B23DC4BF9948A30C74BA84FA1B91F1143D9D171F5D0A8003EF9FE5AE2F67E7769F7BB45D15FD3F5D5056B7BEDEEC056137302A4709D6ADFE9E2A5C0B1915C4C6334CE673CFC87B0AF91E6A53DD3FFE738266C5856361D63057154C68E0F597F3B5AFF3859F4590C5317F2028C47CAD7CEA55018EB613BDA3100BA42F710C27303FC4EDF6D925F0A1BE3ABC3D92E7BD0589B77040AA9F253EE34B02216F16D348059F1EA9DB6B7C9A4B47CB087C01809B9DAC4CF25B3FE3E18A28DFC53CFB5A391FA5A54388B7CB11184DBAFEF5981BFDB859D9A232B772A16C0D481559FE90DAC139311600501B4E6C36A408E83003DFE5DE5D34C244CD2583ACFB49FF4BD02BF84A28EC3BEDCC086F34E711DB02C7BD725E194F18207CC9418F8AAC0262512F92420429F204763135D2DE794645F2D751552891C91047DE795D131AB29F66D4C7E31058C5D2AFF164661E7EA66E3D4F5FB7C79887984FE874855E6C26E96C0AD578EE4928A6166C1F85F2AC2611DB1F4B8B6007E7C0107D7A8FAD430624B6CECDD9B4DFA7C17600EEC15BFEDDF6A2557A94D83B24A49D9474E259C9B937D0F7455362CA2076CB7DB3D7FD6EF488E5247D27D7A3B7403610B4E8AB8DA58D577C85458938A29179750B603ABF63F7DAE8CA9D591F13F14E077924F453405E14122A2024A57B283DD285A4A1D7ECF2005EFEE0ECFEFC3139A00F050982FBA1CB2BD7092C348DBEF5A59FB79506D1E06957BF584A38A5A6001B2B07B5E8F20666E26B33B487C4046D98ED686663739ED43B1DE2145C9247D16A7364D5B27CD33D1552D2C3A2ADF7D884FC59E143FDD6F01FA674866D495733F7EB8CDD4ABCC3A95EAEF397B86A1B039CFBD68E8EC6FF664B2B96FFA0BD263B51BD76BD47459093776755F021435D13E4DF90CABB786E8AE2BDE8BD51FA5B5A482EEEA6221E6E081098BB17A6A7BF19A3158ABDC958188A7217606E3AE7D226A7331E5A2ABCC3EBE56B49C2A76A260965E6A2D893459EFDF636A8C519F5A1889488E41BE87FEB585C98406B0E98FC2A646C835F66FDE20C47A7EE431E83DD81E7CA7A2D69A29AB40D2CF8DD7383BF44CAD7BB9517101FB3DFB9E5F16D7D8E98781BD8BF05873B9CD4A815CB471549F1B4F1BEF913F6882BCB68FC93FF1BAC24FD4196A108075883CAD9229AE649E8364B7A49C4294E990736C0B027C2EBC1CC8F429C47D291C360C01ADE11539992B9129D0F65A76DA6932B0DA1265AEB0D1D535E4175DB6A66307E2A338789C5E580F68B87E6D25418C001AB3559AD079190453F53FBB72A575D67D9D2802EFDCE34F8398C1FBE895B97E4F4665B62ABB0C60B8343CE8F580C950E73EE53099F16162EA7E390DA047ADEA6D7581C2CE28A0B38DA4162607ADE60A25F7C2DD0A57ADE6719F406B82A9135BDA418112A3A9C354FD7B2AAEB386FD012D33D5B4630D6831C26623235737208AC1C3B07AD86269536DF1EF60066614D6616486E987F10C807B9FFFEE69804DF60D945242CED640AA516CDE3D4C127CB6B894BE99FE293DB29ABA117D983277C4411013B2E7FAFD279E8A144A1B57FB238EC879F4392E3A9CA4B4CAD05872BAF884867957D37A76497B32552EE5684E71362452FC04105F4FF5F47D0EA601AD1258EB45A8545B8EF956DDD5D6A37FB9686FABCE86439D55F993CD662F93642926D940CC5E2971460D936D9B10F8A6E1003121E10C7B1089116232D2C25D69814686786059A633DAAD9B82E564003745583346A8B50430810DADA20C77C94D74A207AE150A9996FA58EAF20A0FA7576E6C12301A4EC1BB3B5DF65524AF89459880F80101BFFE640E18F60FA5B33373D83193110628911CD314E87DB5699E889C3516D65F0B261EB7241BEF1E041F63875EF26536A4BFC1E95A8AEF5C864F553B30C1BB5C4E8A62EDA64E9F5A457351514D03FBA7FDF5FDD39135FBB2DA501E493E15A518C14ABC2D94C4775777AD98A90AE7BD480AA49926EB7195AAF1960 -MD = C63A494B70F2DEB1C08CF012CD7AD91D547FBAA0C6B45BDF1AF1CE11 -Len = 33170 -Msg = 31FF4223660E881E1E5F1F4C2448093434E696F96F3F621BEAE9130532E7A88FBB8BBB7F44E835B523384116C227C248D3652D3BA8459B8F1885B2935FB2A70F0E141ACE02D117502A55692159007AF93D361B2EC2339F011F1B03BE9E2BA31DEF9FDFBA2197FB603FF2FAE832A49F2AA53B093AC1FF97014DB9D1D2DBCB19D04DE5EA9860B437C4385DBAFA268D16AE9C717544A2D68C7E6CE24067870AB74AF063A95D4176F63DEB79A97501B17719640CC2B7A5320DEE1277D90EB71E7E1B3A69141C96848F5EA3BB131C988E1415CD6F8B4C7A2F359CE8D671E47611D39197CD82B7A1EF217D4FA777B1E75D8FD1FF08B9CC996A83E50B28935AB3086B57F8CC457463FB5492A9914A6D2209EFCF0ED0881EE34E9973FE209B5BCA9140E8D5B4977357836F7971E56BF8057780A2C420E440B4F180377CDF58D5A61F1F2B4E16881DADA53E44CE9F0F679F07D54841C6ED8F67854FE082F4FEE2F2BEA9AE58E414ACBA1BB988CCF9FDF29FD5F28D05ED5422C2E9F5E4B4DD2AC1007454CE70F67991B5787591A42169148A6AA6EAE723DA6DD1957C1E8FBBBB1AF5F0BD727D0236A59C5E319B1AF01A740404C1579AE494047C1F0098B9303CC60589FAE616F7A2569B12A12C1979AAB7A5A78C5415CAE36C0B17EBBD4474695E4EB9307A1BE7C899E810CABFC9506639570F4D16DB5AD33B1E9A1AD6EF576C795E49521011983A0EF880F19D0B00A8AB113684CB773B850E70B940E04CED62C75BC9E1FF7B1E74DF282EE5DAF53495236C68896C50D479FE40F50D752234597E7629A74E58764705155C1E4C0B3F900CACB7CBE9082039827B70768BBD68343969351A59AB87564309583BFBE6F47533CFF29607816662AE242CC4773198FFD5F5D732C9E55357D631A50A95A8A50A37D4AA611623228B5D6E71ADEC0D04E0624217F6A0536B9B8C9F7AFBDC13241301DB5ED92E33C5DD616E5A744BA1BA4786DFE0FACF01673F41E52F7532AB8F2A566281110A06D168E9F07344C36E034E97A32A2E998BC0DEC28E00B5AA8989AC2DDF990BB035655E881173935034A01AC489682FEF454990EF96CF01918F069A50D593954841F870BA5B54FFC4E840B948F9E4BE50D7F74E5412D1DC423C3F51140C73FABE91DABD1AD1C559876B2AD1DE8F9A8E1B48ABDA919D005B31C66883406EBE4199C09E1F2FA32FE47CC6154934D5B8C0EA6EF199E53FCBC43F71C3919F53249890C4DD65D25CA4C67C35BE89F073DF8F562FD0F8C4C14B3F96962F97B723CBE77D15E856A0B9D8B241DBCC6DC3565BCCA8EE756E3F78F51373F281DD2185F0276429B82849A418B77595BB7A953AFC66196ED910486C67C57B835887B82A7C88E6E3B4C43CEAFEB4EC09CB1B3169533959D033BF2CF4DA50F74AC5F2CEE9680B7C3A001363CD4274C0DEB6C8E4915C24675B6A20806686674923619033CED39F16E7EBBE1ED36DA8CBF1BE51F956F7D15DC2DB31ED9800C81F7A5245ECB06285278CB405424E0728E319090B96D4B35A04E7A57A2378319C0527DC729B26D5013517B070661F6E13D99AF13BE101996BA4F107BA0A78BFAE8142EB3BB83F634B7B557B49FAE1640AC51B7D3D2AAA03BCCBF938088724EAE23EB8F04E224408B145E678365B1F03CEB651456E73A02AA15AC52A59BE961C6906469FFE9AEE3C6F8862F6FB9EA4FF103ECD843171C74FB5198FF1E40C6F7C572A2853F0864D82E6C458828316D7BC46A040F521317C9FA8869780F327D5089C7F93A2A88AAE2A054F0A611BE614F9F9E8844013DBCE45E4D3A7D8EF04C3A4FACB99436155D6DF7A717AB758235A2885B1867D520C42C25E7C06C1EA8E5BF55363B2DE7B3FFC7D15FE7B9CC94810369591284163FBE68505D3C7E70CC1AE9A8AC26962A2F3EB0607FDE36827AB5BA114C75A0E55E42E09FE3FC9D157E2004E89C86540E56EB15DF74B66B6EFAC70DC6E9DAE6F97627D206A91D3A95AA7662F70483BB1B2325FA3C7F7E09398633B4137140D006CA0FB7482B91EEBF17334F4D530CA70B2A6E6BBEB379EF3118BC63A81093E960A993FB15F25BD648B7674564665DC4DD053AAC75F8742F6EA2437D42685AB4653BC23B451A5FDAA43B0E1C626FA190808B36EAC5CB7A5CF45A3AAB5EB75F48A466DF0502D7AFEC808BC75AE1505FCF7C04DD1F6F71318E32F56C2931CFB8F3FD197273A327261990BD303E9A2391275716AAF9EEB45671C32D4423BA7C97562BA4A3AFDD96A5E3DA7908E740568F7345873AACA4B0F6066C73FBDE7F3AAB8FA605586E24E3DD606D555109E2F7DD50C2F80791A1787FC96F03EA7DB5B146CE042219A0FEC0D5AEEDDB16EBC0252BF4621D04620E8993D9332B911A74E0581C96F9332A281221609FFC067B43640DE10BA40B954B2EA1E30551B728F36D7E1EED3AAD724FFFDD854E8FA0A895FFBD80915D5057B89F282BBC09FBAB1AF291EBEDA99DE716CC9E88ADC6FD6C5E1A2E797CBE7167A8A3349D5EBBF896517230B5CFC45F4E944504B35A8816C433E7F8755015ADAE5EE70322D083BE711B99A2CBB120DC9728FF8D3B55377A1A6D2D2DDB3153646D2C7B7F7AD66F220EA5841955D7152B7BC30305613CD8EC5FFEA9D0868FFCC86E4F786B5FD8590DBDFDA7B2A5FD77941274BFA3B94AF4E4AF9439D4E6C8EA6FFC52F376AF8B33EDE7AD411D46DD51592D99E128EDF738BED34027F1CDFA1F1F7A8C5808C48F796FADDE6B0C931139C8EEB9BFE0787D787F866117C1F0709BD94F0C5102B029BF5B133FED9BC23590D344162F9446937DBB0D6EC4984445A751E4602C58FA4C1D3E01DF6DB5FC33A83756E305C09147CFE92CA1A29C8D1B724410152233DCE68E7851134DF81658CDAB1E55291AD46DB9ACF9FC59CB9032DA274E638DCCF34283BCC20A04D0FFF07C87789AC7BBEB55CE1C649F9D5260CB965FE43546E84209D89B71ECBACA2B93EEF99B0B03CE036D6C73B12C8CE29E57E26A283E312E040EFF287569925B7103F2F103E71FF471EF76DD489A53BCE359309C23A9FA33F945817A18B704169B9407380E7E1DFAD96DB62E3E37195533C8A0B3CE4842AD407A42D62F283A1E3B9D6C6DEC4F9A38A72223DBE56BEADAE3BFDFB97EA5972B9EE5CF1EB1D4BA23A2967AB9A7FB60E8C153C8D882BD013229EAA5826F1560265CD899FECD0E10DF7915668BA8A9BC33D8E3DFA16B3D76F1A6E77B678F575F403CFC0B78521EC929AC194335CDC6C4EC12A9C14DD51AD2558EE9349D3E07FA0C93EEEBDF56A8F015F5F442E2E4E53AEEF42AB8B444ECD1FD4A8BD6752D0DC3E37BD0DF840D3A8729D46F5F406EC7FE0A5835FCEDD4D9B77B35EA1FF52B9F2312853F04677DED79788E1E4E1A1C411E41C82D592BC00AC052CFDB9A97A6BDB3526E869A720375837A118E84A507D4DAC69852C883ED468E332227A2BEFACEB4643E4B3EBA0378BA45312C4DB485EAFD535F5803CCE8DC95032A48F09FFC1AF77556F78884B593CEA68F5855EE909D849AD3DB1F52801D404D0A13018A6820F443E1465670CA0E7CE27AE8583E5BC9103797A3FA7A16AA580212AFCF1FF8C0DFAF55FEC767B3D12F3B3CC7FCB988D2E7993B3E33F0524211631822CDCA56FCA15BCB0B4CED6CB73D9C8486D3E81473D49F074257C85A6AD7F88C32FAD8FAB798DB6001630C678830B12A07BD5BA569E016CC3689FDB1E1E2E1A025464F84F793E4FE625804D3F458C66CAFD8C4D9C12743A3653CFF41A081986569E6DEA6BEC136E224285C1B26CCB51796CF8A8AC11E8F0678ECA69CD3030C8080A9CC4ECDA7D3F4CAE0212C0931D89705A0E1D9038F844E53F5581E75405AF32F5CAD170B67660F80D402BB6E8C893DA24ED49B6E10B2F7DAB4E425FCE5E2913656A102DB32CC414DBF4507E7FD0C2085666B390DF2F5CCF372B9A05F0DFD79236C6BD8E84EB7790ABE2B287885A18F8C20906EB182B869C23D624C06C79170AA8DAB34EB5F3E74BE9E1DE80EE0E541175FB6E2C62BF14F184A3F7265996CCB7E00716B838EEFB66FAEF3EF22DE9110D5348722554B861A8097B457ABCBD8C8CD355F74774E83E26E51504E3D4976A88464BED4B9F64202A58474F488A105AB7CDDF209FDF6C7D954832FBD58C8EA76248FE666913F0D8522B835B9B48518B4CB9FB1D8D769CADF4CE0FBD51D8B53AF8D8E00BF7E5F4C096A5B561FFB058D7BF89D47E908E532739D8DD4C43A424B97433FF7C88889CC8158C430836CE495CAAC20CEA0E871A001B5F0BC1496DD1B542BC6041411EDFEE6CA934B3D0D4DED65B68941E9F31F1D8978DAEB464442677E63E27800BE38E41FE95D6B4E1321283FA41A45C1DB688303C57AC2683EEAD2AB395495D157503D1BE82E99F9B0ECA2967CDE104FD351E2D1CEA2A24DEFEE9329EADD6371F98FB9A2CB1C9B1D177BD933D443B6E710DA374BEF451B5C041566D67C4E3C4F7E5CA0ACC669E68A68D37912C23154ED822CFED5B9B6884DFF4D1D64BED343FE05B0B85465B3C188DAE9FB76D65139950D6E38A80C05A6FDB07974B7910795E286960EB91AC93FCF0221B86BECAEFBF4A9079F4FF02689067139A730E0E4B19B6C9799B77888FAE3760F29EB3F6D838A0BC40BDBED78B9AD65D81D768F5238492F1DB5E047325EC087EF0C925D12032D7B31C4D50FB73935BBD9C4F5932AF0703FB9CCB5CAC7C2030072D30A1A01F26D61C058F9EF1512F4EE72D103F2E79F8AF4A520958C62FEB8D39B8555D5E116884150943990E8A726C070516671B02DFEDDAD4CD35F50DEB2B765685EBECDF7F88D30924A6940834ECA569C8B7A6AAFDEDBD4C78AD632F914BA33D317E7C475EF96447F856F0B3DEA4E9C867144B517D8D4BA61E036B8078052C3EF66179EF8C9FED55A40D2CA1DDE3834AF2CBA1AFF0DCD97ABDBC33DFFC836B00CB28B7613F15A7B2C7A3764F106EC7F3EFF22E1DEAD8C43E4D921AABA3CA78C923271268CF8BFB1B004A9C59A8BF5976140336F36B2F3F56468D0C0D5A6F0F5E4E97C9AEBB061405A9E98BC46C07E0013CA6C55D0B5E951B4B13519FCB3E9D001805517EAEE2005DC8C6B9B7E0D4D5F773BD8BF439B0A648B9FEA08A4380DAFF1C1A9A43720C2AE17EE22BA7B7EF39D5D7F4FD103711D59CB95995F76A16BA9C9EEE0DADBD08BAF73AE95A95446F04CC12CD1218D1042F105B8634D607AC09C32DFA47D2ED0E7CC10CF0060A23207409BA5EFAC7E8195618166CD57CFBEE80B5250505A86BA3EBB68046075411B902CAB7C22461430DD31A9B02488680A909F5957C7E7ADD4BDB398CDC774DA5E77F126F0E87241D411FF0C9A1A23AC7B47432AD329A1C3554BF12B06C1B995D79F1C7D99B0B36A0E893363F68967B86B4C3AAD3341066F40FC79AB522167241295E51C1A35CCDA74594EE85431AEDAE10EBF294B6C06960D965E79DC622E22689C5E21E67F00412B9F232D0B01AA58DD9B58BE4C707F347145874393667EDAD7A9814115FD2238F4EAA23582DA675668E713C6F8D6C131D00F257B2B52F0D2E6FA8C363E75068034645FC9179ADA01B2E24D4D1C2AB941024E2C498FFA414536B425D0A572EA8E09F3D6E8601FB1DD83799E5F73B60E683A027FC89A76C3B0FCEBD43F7088395BD056C320E96436B000EE8EF106F19F5AEFB235E7CF9DCB4FF599ECCDACB3577658F89C3351D217A34835F8E00C362E0E42A5C0C4CD09A7287755C2DE85130BC1809C954FA747CCBD09F5D1DF9E68F595AC3FFBCBEAE0E98E03265C020D784B269ED682009C935279538D134861EF2FD841E10EF746F5027C8F42EB832C09834701B6D27E0DD9460BA0F0F2D50A309814F95C70EC05FC0 -MD = 60B188FC69D9770D2991773CA43F10266C50C9F18F6ED674CA76E82A -Len = 33233 -Msg = 8CAEB58CFB11AD9343C0947EF764F0922394DEB33D9FA3DEAD8F2EAF246EBF104CA2EDA96CC6AC704CAE9F3517DD46B2D6EF3433042D1674C924CBCFED5BD38CDA51666D3A925D5FE00F2142A4357BFCF090EFA819546FDEA44575E2097C56DDF6BC11014BEF6579EA8162BB3F11E8FB29AD556FE8136D252E887960C8BEBBCDE3967067CC260FFE553239F7C434A6CB7AAF335A25554184F951112F1E6FD92B31EE71313ADB98AF0188E205DC8EF8D3D2EBE6FB48020713A6419A31F43DE57BE305C272CF089653656D2CDBD6A6E07DB12D4135EA917F4E841E227BA312360E47D3677317B59E5FCF2011F4663CEA9B3A3605F29DB3E7FF8A225F5C292937A015F8D08510196C66C811A723A5A1FE2ADEBE3F84F1F3C27612CB2D043AC333EF04E52DEDF0D84818153A096941DEF7EB0356942E375E3BFD339C7C64C3069FF82574A40594EE4A1776431B3E57F56E1018E9101A9DAE6A50C85E7ECD032F3E26ED9DFFCFA7C44511FC0469903EB2B3D003BB3EEC8A86645C86301E654828389572FD3774B8606B5303AB26726DA88CEB8C63E7DFB0337423475967B7282E4F7F1975BBB2FF71D1FCBE5CBF37DBDBAD59F89D71F5D0ACEFD8D5EE64F38D8108261F601FAD9E5B1B9446BEA291E8E1386789AA7D56448E30A3357988C7DB2AE051FEB03E24CE494A1E31AE035F81788B34D483064071A3A186AD58EDA1DABE3FAFEAE5427524E4921296F71AE08530593896A14FC98972C76833E81C450CB6FC49C9EB52099A7DAB7D1E33A1C3B5A6EC20F2473B4499EC72AC62457FE8E90FDFD5CD143AECA30890818A0F86FA9E0FB3B020EBDC4E8461B6A3C13DAFBD0C48134243ED7DC872B12C88320043B2E5FB30E4F83794D4E1194BD4F1354ACED6011F72B0A3B2CC2029DC0F163B149CB42B8DC4DCFE918C19618BB2B162C4D579D8FC64EA0D49A6FD681826B841D0F27C14DBAA8F8048CE56B72D34EB1E1C9D8D430713B13C6C7D74C30308687A299D6B21BD7132F2C08382BD199DAFEB7322C0C0EB6053BE68B4D91838ABF20E4F688C3659BAE23B6028F0BA565FB1A10BB500B7525CA0A91A1924BBD7BFE0CCB94FEF7E4DBDD186E886B82CAD52F34B0EDFF1C1F1A6F6A33D9C49DED5CD3CF2D7D9B6951A9D819AD04CA3426F4ABCE7DBA445228E94D01DA39C1C08380A13FBE1F46DE3EC7420E48C5AEF83EA8DCF8B37CE264716B807020B7C710E98F332EE764CEA0E49005E20D695FBCD8B1AD53323F403EBBCB8D3C0AF5BF6FFCE464E5340F57A3EC357052A395A439EB97C49A3AA31B038A716A5C38C5BB550429EC444D3AE776B07639192C68CA6DDE54DBF38380BD3ADDB27CABBAF0F6B5CF356149AF8264E29BB77EBC29599787E12CB46860F711032B28C876F79F13433F9D2B4D68847002EE1F3F2C77B3484765B6483722699C63B98DD26F5B16A1061EFC440F7D111D5AECBC9544C3A422DE2AE9984EF10C11C274CE96C51B12F73A8180D48F61A3916CE6BB31B8CF9A0B11FB63F38771F80585C39D6B8568CCB98294D05A21527AAE77FB342A86DD8D7A1852707C1D43BE16D61A5EA13D1F15E4BD3A105593C442AAE2A878AA4BC161A19E733291A60B2280495FA48E9DA58CAB8FFAB70A58EB533AA97F831E65414B18DA7EF3F33ADD4D9BCEE377FA41BEC14EC5D71238A7EA76F9BACB0BD7F1A28BB11DC5A5A9B198EF640DF35219D4B4ABBA59F61653EF6181364167F83318AA8EFCBA6B26638E0DFA72679F1A8500C6807BE41ED363488D23C030865F8B0F5B4C0833AC82DD805083A5ED1AB3D2BF0D0FB2DAE4002B62602A9C314C8E0265C5B5B753329C75C5BE4040D99E86A12E53AEE2298F78EC3D0AEEE961E9FB19716BFF5A4F8442DF8C34A50E809702E38473AA1E4B51E8506B7E482933445C24E5388E14CD9479C7FD5086E78FB2C263C715665889CB46CD7C2FE718C386FF4777DA6A4EE8325588DDE77A65CA3CF24632729944720D7DD745AF90617910CFC2B5D5A6F09751D0C4200122FB604BEF8D9E8365361DEBA2CF7F7DCC7507CD96A797625DC6E8605C728419C31535E2091126DC9A296D46188F963A520A58115C16D7C3643B0ACF2781A01811BF134D11758BA43D908E52CF286C5ADC1A82158C3814ED9B8E55898202A69E5E19E3E969A2AE5B2488D208F1C20213F81A9DF66724FA7EEAF70EB71708BEC052824E6670F69826D8643FA661137000BFAD1A28418C03E125BAEFB5B88CA551B66767A7E2DDB9348CCDC00E65484DB613F03005A9CE2C2D4D725D7E8BAF1945C7907DA4C206E6354B10138555949AD886ECB17B6C700BDC5ABD8866B5229D8B6857580845CCE471F1B0896EEB6F6009F96EB9DB36AFC80D907038AEA34DDFCD428DE30663A11BC5878184F3D6D5D7E445BC3803459B9E2F0E3D71FCECE9FE0FD72EDDB3541930A560FA30B9FD5473CE6527B6DA19C6EB8FAA1EEA5EB47CB97A6B9373E62B4799530FD6C84A0DA9C7FD8A6AB6E3FB2B904E72F392FBAB0BD079E82F35516B632B84E8AA2540C5BFE458C547CEA2BA73E42D4B821F9146BD339B310794FA0962CE2E54FA9968AABCBF36DABECA298ECFFCECDC40078C186CC30854D527BAC7D3767B2DF54674B569E99A1E785051BF2CB301556ED3CF33F4D679D3D229B47F9C348D4EDF75C667026236E54D18AF843482B8111D73AE354EBA6174C5E2F079167285A1B99EB5F0EA79B3FF00E37866DEB80A4C13AC8B270942072E538AB30EFE14C53311E0DF7DD168F47197AAECB019A267E9AAFC4008A63EE1618155EAEB2E7C1772193CFA33058A64A7C9098E615C25392D3D6613A5F65DE680888850C89AFBE1AFC369C057D7E07D46AE2F55B0D51B79E064776838D40A22E9CE28377F7A9B56299F84A33F67F22D53241936978ED7B861F71BB8F7A0BA1EDD2A668FA3EF917476A0822022423C4FCAA9DF0304215BCD842E732A0B1D550B3C256B65C3FF7FC0181246FB9863D537C2A2AF77F362C8822EDD7A20B5E30ABAA8A248BDF9B72EE1D3C2A584361E9AE46400FBD165267690DAF329F081CC3C9855E9D983460A5B9637444C6B1FFE0798BD348E0EF4A43DA4525DC93160FBD13269547726B29C4A15F3058380A7300FCAE8890408C97D3010269F910C1AFBB8B6E217C50E7CAA15CB796BE114306EA44EA007198071C6E43818ABE3AC8718989AFFD43A83E253D6BEF1C4188BFC6C49682A046210371D8644767B6D7983F45C198AB0A4A6E8242C0B15C9FD8721CF25DA1EADFCC7251C4E86BFD6B7F8F3F15A845EC25D2BC78CEBDCD75CB8D0DA9D62E1A39D7E8E8ED7B6DCB7089C839E299602A0E362008E4F9AC89D27FAFF12E751415F77B28C0B276D645B3D671727C0A89CBC4E2F0B63AF96DBEF022F77D82740EE6F81679ABA9491547D0584F9263900CE536F029E3532563FCF01FA9585A8AF4CBBBD975395996FCC4A00FA8FC374C0877F075625540F40334931B60CCF556C5D5CA3074B35F818B58CB4C8E6EB5328561C8C1D32B796CD5D3C3CCBEB10DC9EA8BC1F6D45B3925AD1C19F7DA01796D594FEAA3F0A775C3160331ACFDEFD03CDF4477FB5F6B9713CD56B2AE1E71766BC2F7AA1C5D866D626E9086603F62260E68924D413497D3BE31EA84B637381E6C22A0FBFB7B1D6ED7A6D234E5FAC719A0A95533960F1E55F7979EF3A64DBDF3A64E1DB35790D8A4CCB4E172B1D1547C9E1CF50538A9868A9B139C6554C68393407670B0D9EAD48EC99FA59EC566A22D0CA2D53935B5DE4E481EEE2046C11B1D4F5DEE2FD901B76A84A20B40E62EC158F9CD732D976C6DD20E8547C26C28B5FC1205C726D1C06BED4F1CA2A94B7A8428FD050D6F3D58722269DE868BF5754DEAA2C3561FDCDF4EA9803B07070867A3D8E844C3716771EEE464FB330F0E5B9AC171369605FA22F4A160923FCA8CF11111D0E665F2250E7946C13A5823F52160F63A2EBC6E17F23E0B78494406F7B511F97F937075B908553D6D4C62ECD0C9768C2FF0E71FDDFFF7EAC82921E324F1EB63AB0C282ECDB626D42BF58ED66B64EAE1F37ED1768DFADE58E3482663509A34D2B9BF6EF47A0AD7BBCABA97E5DC773168108D6580758A48ADF9354439D576D900B3AC5DA0932B3192C6AB8D3A6D7A60C2924DC1C3D86B1307B58094834D536BD64D06EAEA5387BCF4556324D4FF1AD308C42C7BEDE0E82461D2BD6A31ABE97583F4A8E86EBFDDED6BB13D77942ACA00AE93907867FA9E6F14A0B26412D332467BB9FA9345A1699EFB5236F170A6795DF1652B358970A938605FD4260FE6A63689C0BC6CDD85CBF8F8909A99BFCA75D19D3BBCC4E5A84761CD3CF62403FB0F130D3EDB8D26D005EB1F2DEA68F577A0292E94FD0D9B5EB449F3408A686C833493B1744CA2B8D16640C60CC44EB9F7CD52582B74AAC1EB0CDBEA7713CF529C3A19BEC7525CA831BF01654601BCAF3D65D41E2AA9149A180457A10044AD9DF2FA963363E31481B1B116DFD173955B61B46ED61793ED83C1B6CD6922B844034AAFDBA2D6E0AC347446410E6532132188D9A77781578962987FDE3DB8E29B8C6CE2423DAE28EA90AADA431DEA58724A54FD30D24841E99171FFB09A79027561CFE67EADEFB44698C8E35C005792206807D11F03DADECC5EFDCB2C2D4DF60621EC221E1C6A3988540B5C38D8F97215CC9C44DA1C457558F49228CD639BDD5D2BF37B0AB59784A825DE63033C082114C3538EDBBB67D23C583FC301449A327F900A884F6E5711177F014A615307358BA605D98593A528978875ABDAFC2590AC4A93E65F1B0093E896EFF2B62FA80F0B25EC4FB91BB2A2FF9C85F354A166654C4E4CC0381D3CCDB190F8045AB64F6F724059D5331437E15477A4AB5B20ED715E85EE48F52223DEC52BFBA5D4ED6204854B94FB407181B300931C5655F5100711142AA56810099FF73B2B8054302D75D9FCF7BCD931FDBF10C23F5A31C49A8005D03A1C729BC4C3F85CA05A8C4C69160909B6784C31B3C6EF9CA70626C2FD11A3DBFA71FDD820DC9360037C2AC948690EB48B5ABCA8845626586DD338252E5E121A2C2E1C12CC034CDDC75F8FF88A6D4A312BE743B1340F6A6A131F10BAE89047AD015436EDBFE7C099864441E0CA53F37D6FE2505FA2790FE27EB58985EDC594E9EFC667B5F4C605217CD4731397A6F3BB2EDE56927DC3486F753DA812BF7B6723415EE9E1D864F1EBBDF8247AA5AC7FA365567556B2E5188E014C6123558C1F55F5210E6157A36AC11E722FBB40AA61F502B6EB6E52E52ADD0AC53BDCECB0EAE664B7081350DE3D57C02448BAC8C657C4D2C9F5462FAC0CD63642F6279E0114B91C82C6C3BB6832250BB8D81D9AACE02285ECD454BAD42F4741192BAA45F68156817E09DA91026F59C77A0FC96DDD99A6C55CCD485DD0B40D1044A64D06899BFC1086B27FA818C018C7183EF7C7C731E9F859306700BCBB468E1B843BE38128326E2B9069C2ABFA40146EF4BD88D1EA62AE8964A887761CDAF1A2B56F72C702179C7B5A2A0C15D3DEDB0E120D3213B79FB2FBA76C829CA59295F9771F4DCC45C9E79BC934048E63880AE36887F6E6DD842436179675CDDE8686AC4DABABE33CAAA23B398C795D26F2D059420240CA68462D8EA8E47811809283F0A0163FF2D3BDE049C316AE767F6DE54973A04872B70EC9A7A2D25B6EA9E69065291DF54300FDA2C5D24159EF6655B201791A3CF4C3D9DAB7E67D49E9D8FCE66124A1E181A30953CC07BCC38A77F45EE38286367DE57B75D43DBC4DDF4D5C302DB14781156126C6EE095EA2D355F17EFD0B69A119B28DA02E4846F5A7FD3232A39063A2E112DDC7E0E32A3C2DF70B3127E9456D6ACEAEB43C799AD53F80 -MD = D161176511E7A1EC5BB933E584D3AC681233B5EC7F702832C7C80A94 -Len = 33296 -Msg = 61CC4D97F411D959562A0FC4109B442AFFF59BDB158415E8658F9545A4AA2BA8B64A65B0C71FDF338D2F48EE031D8B6FC2B049C2BE4F25CFB5D959C77099689B4C607A2F81C5FAFECB3290633C5E7766C2E766B4CBB1F97F8A4D61C6C55CA996C8FFEF51EF28A90C06DC75E20AFF339A28A44FC057FE51FEDE7260938E89AD74ACFE13767BCDB8D25BB890C1401C5986C6A1DDD366EB5EDCA55EC9B65C1014DEA47597DAB811446ED3C7A3571BC77D1E3E97CAC5608C43CD032C63455406EA98B311688F11A0792A0B8E65FF804526638A730EF25A6F4A7B1892DE226B6FA40B65E4FEF5387AC4EEDA6EECCF155712E7536C1A4AAAD5F78F8C8668420DA7A48D486F4C4F006329E7BD8750165512005D88061EF2354A84749EF29FC0D5D4753006878686D09825825D25589AA3F386ABD079396312E8CB26CC92420CCAC17492895B2ABD20170A1DF011181F4051AEFF2DE784913CC40FA85E5F26C3FB36BC396F6B1EE7117E77D29A253E37F02769F7574D6CA23A56F92514AA615A424B484F90F382E1AD0D3AC3915E048D99D74779BE1403E49C61F6760949E8945593F7A0DE5D884BDC2E94F4BBEFD51D83E331FDB7FE8E4C4B0429A24EC02ED9F3DF54404F6D7C8FF52895E5853442C03DCDB9A980377E09C21AB8819B29EC96AD0D0FABDB77E42BCCC7FC7A70B83EE053F556B905C63F8114C17A45AE8D19CECA6E5218336EC11613DC11532D91652E78F86726A80749D70CC54CA41C33D643F280F109F6269C3DA377BFE87BFA60A1D167881AF220FC8D2A6E290226FC2D0F66D2A1A7FABE47AA8007EEC301E82FF50BF7148463645DD2471927F9546DA78E15D102E701BF06C972EED2B489DE28BC2148577FB489141DE8CB51D24282E621267A4139D1F0BC35DC9D9C42BC33A04F81095AB3F176C4212E50B77EA2D132C9A5B90B1E32E631CF1E10C5583514325978581C1E55F752D76DBFFC8576F56422C5DA1CE20E77387F5173894467AB0588653BBB44BCBEBE4853FDB9CD39157068C907B32CFC4AA5DAF2D024E0C3B2A804FE5F2CDE75D299B37C5FB4422D7E61E959ABF90C9A3D8DF629E76F4A44B76263E9EB7AD1649EA89F8838705E1A632FA0B91482E907F077B992C96B3064D6D7604D09E682A5886A2D9334138161DF5141C3F06251BD470163875387AFB38163394B335B79210BAD92ACA568BD1AE1E511C22803BBA36079FEF028353AA0F5734A1C7C6C4E6ED684742BABAD0E93EDBCD0DE50473A5F46CBD9C592FA92D42EBE010ACEA97BB36FBABE2F14BD02B1A07B35701D131623BDD526BEDDAD0B4FC6FBBFD4CFCA8E513767ED4D10EC64F920E9E6CD528676875A070CA6D7AAC6807B53B7B13749CBE350D5FCFE1B34E4DF2E89507019BD6FCB24AFC3A1C9BD64CA4C7572FAC9D87649510D5F91B373EFA0B97EDE7B8768D0186B968E5A7F6D181CB5F45BE2EBB942E23D821BD7A8A1D7B0E2A735DEE8944C378FF9A98E13AD7344198B576C6CC770C082D640936D3F07021293764662F77195CF956E91AA7D14EBDD06C41B57C9E881F2DE467AEF05FE9EA1809C450A45F3F0D67D7447F8AF8F87DD52B30362F44AFAFF54A2A0331AD8C18C2F3594A1E187A1D94A4C1829D87EA67ECE045772BBC82C231FEAAFA81E2F6E18D7F45020AED2B22FEE1DF13FC31847EBC9F8CA140E4944F8D111A4DEB56C0888880EB95601FBACE79918A6BE2F0BD370215689988725E9AFA988553867F898C939A8DC4A58FAAB9B105185904CD543382F7DDE811EBD114AE109B97EFB4A7BD4E582C3F60423B48C1E35B8C0F291048C29375F9CC2D4C01079A207BB7BCF875FC7535BF47DB251ED8A60F03D84E49E32EC5E72F6DF26F18BA040F508A02ECE21597BD710C36052EBF7A0CFA8C1FDA132EE3F9DFF8814CFDFE0A514C91FC79546B82447926D422B8AAB87B94CC29F165E1F970FF274FE2A6621EAC5F12816129D27B8DF06E32A41752A65DE0B47283EF049422A9AF58A9BFCB042ACE1CE470124369A915E2BDDCC292431E88982BC6F9C51AC4C8B3E2AA96BFD6B574AE9D702A2673081EBF54FB332F552EE17BA638112816286E94FE43C6695752E67F69CE6DC4893E1DBE8C5DF8F292271F4F5C140F324AFB49A1565717FF0E0681F01CB7CF96D2F8C50A2D76FA6B4509701211E07C7142D22A2FC40C2CB47E91A0DDE3CD86FBD02EE53F8367D1F25E6BC0C04F19080AC19689E721327634289261827333594CF23A7CC0B0C95261257F2F2A4D9EAF72704890F29A5C6F12394C6A57688BBF61E187012CB7C92D720585976AEE344BCCBA607E74F5032C14592C317D211C3848FD76CBFD84D7A621E3D89FECA1AC8D1C0090855D530DF05978EA50C36DB86D311FDE0F8C6598DFFA94F094E4C034FCB13986ECCF09DCCA03F2BA06F86D2E49AA9115BD80CF49549E6FB23A81419826F7F3704A1FEACAA456DA4C107614C992443D5DBC8940F66C2F396786CE6520E08B715D1DC3AC0E695B7BE348972522DC4C831F02B4253DC76181F979C6F0450A7303288ABE8B9FD6F8A9F46AA93C4E6724E29C9891BA4EB8403013DEF6068413BCB4D413EABD69B812F479A2B63437ABE8C0CE4AAB34386DE580BD704AA364F17C031195F0DEF63CFD88F1246A5895D3D06C2BFC919939280ECB8D1177D799062B4F4F0B3C7D855AAD76A525301EB6706695639D03A4C0CFAB11A1EA74AAD65D68BAEFF5B0355AEC1BCDFF9FCA7F3BA5DFA9F7E1D073305BD96F9ABF5EC76A14BE21EE536E09866C1E0C4B9AB8E70430BC708DDE617F6686C2B6165981BF5C70C747AB222482B076F5032656EA780E0798C5F18223590D3872804C379E5114C6A49C8DBFC14BEE6804612EB21B2055AFCC7C1B2A8E8BE67FAD7FD8B5E2641FE8CF37792FE47BFC35C76949610F6718DB9403B29F536DE09CE4A254F9D612DCB93175F5592466CF9B7ED0585F83D1EB7AE64CD83C117A7F7A02A859A73377BAF4624BCB5B7C313F6C2613138245FA0A40B844CD8670111AA27BBB01A7368AA56BF24DC7D8E21FCA56E84A32776571FF60B3AE38B3AD1ED3ED3BDD19EDE8C24C2AA71ECC2B28124DD0AFC382B784E273E838AFB698D8AA336016C4988A58ECE0D8A2A2D94362D738346C950BF05008A10E29BF27F15B802F213B8E69473B023332952912F20472FDCF193077A0F460E684F9FDECD2D7793DDB33D5457BA30B4D91EC272D1E6E5D2795698A9AF406A8C05D1BA2A64F883D37EA18505A0F5745A2DDA217EAB1774A9D813B8387EA16C48EC8E5600C16D98FD4BA0A1EF2888FDFCEF5365401004B02CF704623277CE502A54E4E03D91914BA829C56740F777A5C28FBD45EAC571DDA7B89EC7FC982F65E5CB382415440162091C2F041FC0F97F20693305C25DE7837A2F650577AC6CBFFC09F1F695417CD5ECC555697693B12166CDA47B8A745F489406942C599AF5F085306EFAA508B5BF0A406269F600B68B58CE3E204C3BEA59E4F3C19157C60246EDF18141597BC0CFFF8308878E4F36E4C443BA874BE58278FD5B332CA73CBABA2A302579E5DF863DB92251C597CD45F836D0B9D3ADD59EF92468542B377E3250FBADE0833914066A39566009507D4C3D575851224E860429F617AC7EBEBDF534DEA8F3AC3F7A14F815751C8E72E907F9077B54AAC645B4BDADBFD969AB38312CBA888F0568170C02F36A4C5F0055E6702F39D62B2383835A719A60E3A6055DF550B3590341B66770897BCC66F8A52016F1491973D565EED5D1C718CA8997C8A64D467170608991D14F1E50A8FC63C4A3B464D08D05F72E9CEB8AC69B5F889EE16F99454BB5F822F153C9D9DCF4F0BBBEB510D706F2C7CE5E516E1AF5CBB838C95D973B34230379CC30299DA585BDD8AD8BDD43EA6AD8AA8F4447ED4F411E4A3CE25C4B338882C6DDDA40A8C2228491CB6CB33A5AE703D29865A151BEBBFC5910B6441B10CF64C189A71911677C10F11DECBA96A420DE0EF9C124F36FC5D27FDD75C388533C88667347B5277C2E1FC0026B75E38E6E46ACECB2BA8EFADBAF1489CF45F4A9225691492BC63785966C018A8FBEFE58C5533E2BF2C601A0A5EF08CBF1B115BF3452C94953ACB7294FF09C7FCE12F8CB86333AD7EEA514AE12333558F255F5D7039AF77D724F66C962192509C5B5E07CA8161D6002417B793F25B92532C61D67CA6CE4E1718B414A86B237FCF0199D7E560C2136AFB290711B3E2B8D403EE0537C351972E86551E5EB9A3535D7D602E5C444219B3B3D63412592399A7EE91BF3BFC26F5A3A91BFE9EF9A875CCA8C6CDE2FCC7CDDC971897E559BA56761599C5F883A7C2AA2E4CCB753C659678D16D158EF12AF987260FE98087C23773AE20F81FD590E1CF738D3C04B0955F2B20B30F54381C106115D4ED83FC7F6BE6D143B61C2D589A317E98E18336150B3350CE0E16E8214DA55476887DA6FC64D61BA49425DA1C156DB5ECA01411FA062183DD29FA1CED491E5E1E2E3CE160A8E9E4FF1000BAF632A92D8E972077C23C666810339E9D9B5F62FDA5BCDC45D315BF8DB41B81AA165763780BECB544F277BF10491CD085A8F5AD91EB6DCE793F480A27C448AC8DB95738E36AD0F15FAE23A98F73E1BD96A6DFA6B1A4DF4D34441D973AF7E1994C06763BBAB81AC19B0BE9EC856365DE6721840B2A4800F27E32D9046FC67B7F443A88C3BAE70138305E9F162DBA6219E6F8FD68494FE644BF6F198D1B3A934416E96AC219C72EA95648B1D9677C7DBA1E3CC6E6B01198EA85A6FA3DBE68FFD5B936747BF86253622BF0656C4178E9B259F01FBFBEF7DBB6F45EA2D01CF4AD075718440C00DC66321B311F399436064E7F56D254BAAE85A3199C31357B70E81180D1BEDE7FCE128D2AA7FE5C5095A05314B056205E719F13C738FC443F94DD3DD8BF28A8024491D3625794CEF85B2C2C810208A8557B04F517C42EFD9502A1B4DE412B47C530EE6F0056B5EAC5BE87AE7442AA84F30AD9B6C50D8518632BD4512783BD3FB358B9CBEE1ECD5D634D617A57BA8AC2D8F12C99C1A146D6FCB9901F46C05FDB5BC3DDB7D8C0D694B5E0432E29A2BB3BDA70D3977D7967082069AA36F425C60D3EDA2922FD41DDB7D1FA2CE76256E3EC53A5575DE0B0919BB719CD73884F052A35FDA47861C13BB523509BF91233ACFB82C674BC46FB5AABA970E29EA48AF84FEAEE9AAC0CDE8AD0FF2B38AA378963D62217B8C079BEE27985B725EC8327F8A496CBCA3EBC763793CDDA9C5C84B42678A0AA6B9BAA03A5CBD7E2F733E956DD9B5712317068EA369D7821E3C288C019110C0EB792EF4FE7BDE199EF10C973138AF40FA52FB35DFFA939E3D843ADA7750896917772101E49076812E623F8FE435452CC39CFC3C6BD3665BB7E20FD09E28C08D9D29CDB7A4C5F7302ACFB63A56BD481F535A136182577E0AF1436C050EA376B335DA9CF960042A1158FA842A85DCC923BB7EE96016860C2231A1F0D859275801958CEBDB374CC1BCEE2069AE9A2E970391172AB7BB9D39D991F68C2E087A0773387B62A608641EC54A7E8976B7A9AD1FA9904BB3FA98FBB332D14B6B23A82F4FFA69A8DBEEB4733B7E69430BF6B1EC5C8E5B0D7801B4C745D92DFE071224C7DA687A7E1991B03867E82E7F3D3DCC2C63AD5EE9CFC20451BEC862D421E03B11195BCAF01EC4428691CDE6618DB63AE73C08181304D4B06561383176664D20052BD5B7373A7EC53D1A4FCD63D7390D00D2217CFDE499036E6EA389DBAC12D08F40D6322A26C5681FF0C1F9B638CC08CED61524EC48A8E8BF93D2028DC10FFE063CB807C94CAD3C2B694ED9747385EF5934F4C84F907AF7999E476C2735E1318AAD6EBB7947D9A64B2F625E2DAB7E77B6FDBF -MD = 3BE8198D4841D57B6675571850543635DD9F22882D49328B755598D9 -Len = 33359 -Msg = B60CE4CC0089515CAA4832D6EBA109EFD0481B84A2945929039FC9B39FC4B09881DF03EE0E089C9E11AA09E8CACD85DAE81A37A7E168405027B6CEF8E8D34E3A584BABA5B91A5D3BF317EF5A6CB4B97B0BB5DDE36917766BBF5445DDCB85845FEA6B00D779DA2E4815460F69D862C6691348F8A6911AFC4D2899D3A1657496AE3CF7BA1A5C952AAB4EAA240F637E52DA6DE2C66A5D1303514CFF3658267EE969A14C34BC43772C5795EC1CD368097AE69E4F6766BBBFD26E55E6EFCAC6996335390CBBEFAE22C06739916638B8E80CF2CEFEADC643517A8E8ED63CD014127FC2BFE8B327DAF6D8C681B2D831E96626242885546F18784D51C8E2B52E5479E3566A168D436F7065B37CE1158C21F9D6DD953C2E46F6B8401B5FFFBE8AA631C27C3E607E79366E2A396BC6684255C96F86757AE1E810389DD47796F2F12084FDEEF2E3FF94CE09FA97D08D15D1A5B4D4196DD203DC36D29DC03627D1C9C5E4615A69BCD4C54D60133907E454BA63BCF2A8BA49CE5B209168A32C5BA4AC0B82FE97A1707BA8FF1AE9C5B603028FE1B206FBB7C5A225B745D19F70BEE8918BF0610EBB5527F7928B57E448A786ABFD76EF16E3ED364046F024CEE960234800FE318CBCED0F9ABFC317CE6181E8044572EDC725CE253B52B5F5CD2BEEA1B9BEB89DE276BCC0D2C057D556416A6EE5EBC510CBCE3DA8D55BDF17232E44AF1A75A9EC86D2676435EEF5DB4DCE63347A3F341EFAF6FDEA3C99D6F51DF457E1D77941091FCF248CCBE275A8E9F2BFA66BDF05CA97D8B6001F2B6E6F771F95C8C1B568DBE411CA2B312000AB0807B8AB2E5034A49ED1EDDDF6DCB552B1055AEC29F8F5800D9195E66CE9B0BD2FCD0046F9D72F6E48CB536961CFE8573132024B08E3F27342E8B341F713EB93F45D2EF82CC2C1A4B2087E9314BE61CEBFD05830940CF519044FB9A564997DAEBFF89EBF4C0C9DB24792B8E0DF05B796A60466AF5265C04E389FAB315451382882AED4EF9A8B86FE6A08EAC06B1EC602748AB01D5C4E08052BBCACF927E51E8CA3DAA8615A693D1947740181B9ACA1807511F11508AEA5F0B85D3AB2AAAFB525A163E477021C82D9F89D3809C43600EC7B368469966A86E91FC899F716AE753DFE0630FF01686C2F18072D29D36FC7ED84D324013E71FA23D84C2FB936A9B337865610736386A761B26B0F50356A1E6A455CCCC1EF21B8C587DD5F4C732F8CCB21E45DADD9ECEA0D2567D36BFCAC2210E3CDBD9D8637B0926DBB3BE2783B0D52518B29D444E153FF338CD436EDD15D18506A49B40542BA1EBB7735BB4592F4559D45A19D6B81A03E819CDE46EEAEECA06D35FB04F5644B34C044AC51E756B8D4996FC63DB1ECE6D3760DE5A82171599A5B27CAFCB44507E79EC9ED7BFAF655EF712F00EDA9B2E4D9DDB8044E4304E1893B77145BBE4C8C62BBDF10EF806888AD9622F011BC5639756429624E02A95A3F461F9C8A66B4165072E4A8D335E57671BE82C90C620F5E55DACDB7277E72AF0FA2B9D234732FFC59A60F8B4E5A2D2EB4D12826EE1C5B7B0E7E0521AC71CE9936157C79E9517A7CA3ACD3B9E9899072010EBF6492D7F6100EA8B4E829AF6FBD8344BC28FFA941A65288BA74DCD4019C20FE99D20AFA31758DF89CF48C70858A76BA23091DED73AACB7C66D7D619F85EA0C45A6F6349E360A69EBD1B7B420B67E13E591662964B33C0921B0FBE8866EB90C6BF9DDE089C744F6EF9DD561CABEC3F0ACDF57242709F897A9DC74BCA6837E339701C1BEA981FEFAA1DB5AF00993E0D6584F0DD7209E583CFFAB833E65A0E7C639EE5A72F14F49B3ED99B7DEEB5FDE577ABD1C1D3D5DD8D67785027DBDC25208D4CF6AF5EA9C168B65DA4D16CADA86B35B4A074BE2E19CE7ECC87143CFCFD5614E691DF2FEE81258FFF0B3BB791D6BCF5245943A421675203B86C06F0EBD5DCC6326E0ADC08FEE1D59094072D4A5346138CB89E904D03ADC357FE85DADCE4130D27C303E855224E1B359368EBCAC5BA7A6308C2FB4EEDC790AF8F12443ED2796CB95321D6DD901E47933CE99B0840498413820B81E4183AA81D39864DB500340E06280FDCB0A7A55E1D4CB2305E94000AC44B33045708BB057A145D1370EC500D41575170B477FD59854ADF4719A2388BB7A086E1836EB6149375F5CE7AF4FB5738FD7A045BA290D84FC68DB2301148083BEF27B8C901CDA8B8C43A79D72FCD84E47522C6E6EB6D617EDD12473E91A6A435BA55A8C3C3B4E410ABBA75EB85CC5014B10074C150E3B6B30AB44F97BB9CB804F19E46C035C211EB678EA1C18A4B80BE1028213AAE666CCF3A364799ABDA3C35DBC382A7EC16249F9F990B1542087E48A56B159F2672789A3A557727711BC1C18EA4ACF2AF42E701D0C11F162E7D4D8B020FD03A2DF2B5A33BF7DD520BAC1EBF9EFEB506058A022B35EEB0E891AFFB31F02C421C7501C33238A1D81863475B5D153EFCA06F336376C3156E483F910B8176DB64193EA0258F052B7FC093B628E0E7D5BD76885D6AC1E86CBC4D0DAA7586BADD48876FFF6C09B51359987EC3DBDA52DBBA320B2792F042F2F8B879FE99185D75001E4B73250A97C25EE2A1C809529C30BA34E0C3058754A54DD19EFB1326B011DD892E71B170FEAB40BE4FE8A0424485DDB3B0810E2234B617EE270D7D7D1015835B3D1E176AC720DEF9C964AAF0DE4A50BC95F6311D74BC30DD469C0DB132CA2641C00FFD4037B9EDC94EAD4306DB49B331E1EDDA7585B10A53FD65B9D173BBB12B66442FDC52D0D3F5A35E9DD0F0DD3CC2A729FCF1D25A54310B6F9237693A1DCF088EBA2D749E4DA7B395DD6F657C23FEA047832384BDDA5F73C6C0A686E3DD0CE49520C2FD5C092F091D120FDB4638494E4D7205E7E91C247408C6A9B3152CFC81872A4A1F06D6EDB5FAEEA1662D2201F08186A61AED509030F0053FDE13E2F19B956E46BAE64796A53964DF41E5B0E02A87EEA2BDEED1A5E880DF04337881FD5AEF9D77085B578D452003764D9C7CA900FD7B7BBB805B8CBCE5EB9283EF4410C1526ADC99DEDA4CDD7227462EA7BF67AD987185898B767DA59A48A53546C48B15C8512842A1C433681FC53B730AE2FD7A55D7D5313B28CEC42CED009E26CDFA57955DAD8489FFC7E95598BDFF8EFAB616160FCF02A9A52C798EB5C0C33F501F7C1F00652EB710D62074DFE4DF8B4BA5FFC7D806284FD19BCF8C50394AB00359181AEDDCBFE79B690CA117527E525A64E14A8471F69B7F56B18295992C3B077990CE3D273445FFFCA740A0D495DB278151F1988F53A4C94C2D9B3A2F459BF4FAF39A3C299EC756FA4E00DEF050BD06DA8E2A3FDD26DD2B6261C80DEA263A1D0108D5E8D64B9BF88BDF74BC9B23996C8E6E55289862F23CDA64DB797F0A106D293698B3AEAE60763F633773E049FD7AAEDCF9060209DB4E077E97679D7231538F59920A84FC838E3F5DEAC99405072D84C650860513E447E867AA9D6F53A480F2E747080F6311B56E834CE4B38E80BA87BEC45930F36E79673AEBF18BE8BBC02EB7332EB619BAA534AD987CA43CCEF7A7F6D6C32493F695787BE2597F18FEFF1627B6E4D4FB1D7EBF67490DAB23FBDDBBBA61B663CB5386D61A2B154370F2F9AD8F99B9D49BEF3FCCD323C6EFB1439FDA6AE9AC8AE29410499AED3D16F043C3366EB94850F8C2DC1228E96EDF83F73396D80B3589EC7039CA16F87D56A9446754C97A69851A0F83BE47DB4F27027DE9709BBE7B7985A2A642E1D7BEECDB79F64E302272C219B20DDD939646923B4ED7F9AA3868ACE6D15F2AFEF4EA04362BEDB7DD6E7BE9C38F21F22B42764B094E0E7A6A755CAC85D33B8405E91A6194B36C62566CB700D535487C4A8AE74FAE16643FB16F40DAC102CEA7CBECD757EDD7C77002900061347604CFBAE45CDFE7294006969D7DEB13B9CEAA093AE1D0ED41F7140C11BD4E22CD39E6F369E594D9252732279147C37B2E32ED90FA375CE004470EE897B213B1CF7D3540D9E91BEEAD5BC550EB36A2B3764669133751F159D2B378660B1A2CCCFDF42F1E10FA80229CDC1A0C9A90C581E18044DE2B6BE53B259C6548DA9CB7A264B6EC9B7CC65D56B5667F0A6C5552868B6C867C62C9A5C148875D0B2875774B10910D04890D9F4E2297D6102A3D3A7DCC5C0B02B7D4BED1E098B761B325A584ACA532C8BED95B32BCF808994784A8A8A265C3F3A129D217379C603F680A7E6FC13BC6907F363676AF1669DDE75C906FABCCE7FE06EFEFEDB7A970FFAF1E21B3ACB19C09F4424DC1A046962A1667F71AFABAD8B0E29ECFC4DB2E993599096CDA0814EF87929F73BC984CA9B5D17D8710F93A3547BE2C46686498E26BF4E4B54354F1084CB9322257E8615092CA3EDEC57F07C3EEFB17A0ACFC795017FBD5E860A2C3A73382F16DA7B439CF1CAEEFDD1940432A9548FDB3C7903C03C0D20A53B85079E026D2A90DF38F4C118656B78BFCC64B614341B4E3487BA71A6CC800E638EAA71E8C5BE6BC9CB0860455585F544D56BE34FA4A39BB203BA2FF4C40EFC11E24CFB171E4D15574AB607A3191CE50BF0AC6D5F5EF723B6C854BBB304FE9FDD15CE8835B3E1FAFA5D167AE3830B66ABB23062B35EF13D439B963A5DD55FBD76A0797C437BD5A3DA87BA63A366874A7F9D6A3E056C608008E9E24485D516A674ED1F1A460B686CBADE9D8599BA2EFE1161BD3ABDB9196021FAE42405E14B9EF0E7875A6C6CBDBAAFC6EC060C1355E10560247011D3826A765AECA4179BD11DBDEB68D9768E0ABAF49637927603085C842B6B402DC8C46425F95C6982CCBEF655BD1FA35F89E855909F335C9B9D73122D911FA8393D5F8C92C6557D16A71F8F5865D0D783A51490E4CCC12B5060B1CECECA246AF2527D337A82BB685C49A17A14B368FBBEAFD1E053824E93BFF8355DAD95E212F183024BEFD25C83F103FBAF5CB1FAB97DD8CFBA23D343BB40A38249818A669CABC2FF70DAB069B2123919ABC7D02760B38F8F22BA07940D59500F409441DCDBF6BB5A8852C5DEEC3C4DB0ACCA79DE94602F3A58FB5EFD85AA2BBD8A00EE3BDE72D90D63CF050A4F8127643574EB01F8E08709BD4BDDCA6EB42246D34554303AAC35261CB0AC629505C5203385E15932CC556814EC3F633FEB9BE04258EA84689705D9B7B8647B2DECC6410FA70C14664C45BCD8A5004299F906D7C5CAE14909FEFE9CE6EA983522D2185C7FB819CC5BF2C9C841972B957C23BD9BA793968DB5FA8FB505EA5830D67C3B61DFA79773912DDD978884D90C2FCDB2FA9876CA5A97D92E0873D89101C85D146FC7346834C8FC691D954B431D229B62370389FC1794DD17A66008495FF5265EDC8DA2ED6FA944EACE08BFF9EC875F6413D94D0C81E89116DD5ACE5C2D9D8A1FA7C6B8DCD195ED3B43C7B59034B42D08B9CF9481833187A764E13D954CAF5496EA6FC7DE303FFA9E6560E3E7BE891E06AC2B225D4F7CD44403A0EFB163B0E3B28EA84AF3F5E11BA2645BF7782F29704EF3D31D884972A89F3D7F8363138B804F08775DE28D1AE2F02BB81AD92D813FC90CBB5D0DD0BC79410F5682812C9CD7E54540BED5C92BC53D318F219F8E191C5EBC87071A4C1F857CD056A137D94F436FEDA961FC8B23AB42D6FDF667BDF8F56A20B6EECA092C9089D1D842D5CA36CE8EF09A1DDE60783054699B4878BADA79CF2F4B4FADBBDA544D0F4DA81C43EE2E50AEE5DCE3DCF60484423B4A85515BFA0CC1827F96221B0FA34476B336F2C1491CC015F59280B65A6FBEF4330FA2AB18AFD284EBA9298CB6D01AD854BB28537F03A773315E59DA23939D849D7FFED06337585DFBD4B408258F13514EFB2A1983D3DF0B42A2497BE6F5AC1C7957EAC7946275A9F5E284C49F118B3677A -MD = 549358A79447B0185583894C6B0B64C7553CD1D3573813DB988E1FFD -Len = 33422 -Msg = 20ABE20EE8ACA38C5107DCEFE3DF22FB33FB2B8C7BB45F2E5726B98196736C29648EB713E3AAAD1D86D04B4A62A53B10F61D0E0AAD72F262F9D5D6BAC6B41F592ED0674E1A7EA58A94F9D6AEE17C529EAD85DDBDB96470966DA59705D34B19568A0EDCE337870AD34E3A3AEF210D4DF28FC88C6BFB713743DD4819D92AB03F21E69F393EB35537B76CDFEE7C143C9057693A34583886A188A3F418A775445EDEFF1B490812A46E0351337DC1351EAFB2535388A98A707D344BE4AC270615F166DAE466614AEAF65F1A3E3992393304F8B7693CBE06B4925C3BA4E8C76165875BD4E705E3E6FE34DDD0705731138D5DD1AC748FDB7ED700B342629D667430E001645D8AEDA724C10474F5A9D6499973F040264F20FADDDA63A90646D6D8A0BDE4507B113B36BD26BB5EB98CEA7CA10CCD0750D040A0CE090DF7F34D715FB296466274F4984DF0EAC314933135CD32394DF69BC591091A19F7C0B6C9CD2D026C127E9742558CE66AB94E9F11B988ED20D311530FF1FEA14735B4C6E5A7B05CCF69AD25B5C05643BDBFAFC9275EDEB7392F0CE2883CE09762C1559B9748112C97BC3A85A2F5483B753831B89BDA3401280131D00EFD836CB996BC523BD1BDCF0BC4910A2708161B5E59CF6C6B013BE69A0BD1F98A91219D6C6CD140FCDA3F341ED481492C32B2EF62B5D08B085E8FAD578894E19AEC7740D60C3B82C54CBE736000D2E02C709C4EABE0FF3A14F0543DCCAE9BBEB595C2E9F24186060D1604D0CB40D65A13DE92258F3080D84906A5981D6ED8BA159356C830CEF30F8A4F8F001779ABE51D161AC23FDE6C7D9299879A55416315B87213F4CBE5F748B0594C48D9A376D3675EA2919E76EC6D118034C16AB3E7C01614F4A71F4BF8AD51EAD05F1E00D001A9C41DBFE3889BC85115F7B7ABDA83A461C7AB62091CBE2D08D41DA86BF874F0D32EE4097B015798665221126C990ED1C64FE3660A7EB4109555E0B50381DBEF500393EC483E76562959C7222F8087226924EE19C50F76897E8EB05288D5FC607500DC851EE5FC3FF55DF5B903CC06DD03F2E4791F0F0FCB74C3EC35230EFC383FE7EA0A44FB05DF63B87E6490DF349C035555F93BAD84A93E971BD0121A4D6CE53B538B002E49C97A91FAF8221917C8D4F8E087FCB864F92517B838AE46EAB120C0750EF1C60991A7080CCDAB86F9C2D65B82D61221BE35F1982385DA5E530782CD85A9880C50C75ED122EB717068A95226B92BF4DF32E5569A911E42647636AD6DA157133EEE75AD043B040C769941C039230633CD026651887A2BA74B194B87480B4F52188F760AD9AF78F855B0504F65D399A0D53EF0F5CEF0879A018DB16BD6518F912C0DD062B38AF22ECEF457D44266998C5B5DE4F818426B7DC8B36E944C21EB68C1589594636E4CB77C8FBBF5F3FF6FDF869EEB7243F70F2DBF772BDCD915E567755BCF5664DAE066AA41950FBA7BBCC845F040BC09C622682B964E37A30B07BD33B931B6DBA43C190136EF8765A9ECA3CB2EA92320EAC7CB5555CDFFE54807D554FAF3F38124179D64D7787AA4BD11696735FD70DA824CD4A98889EC50728E0173BFD98382E5C2A47EACF50109487A76AC2F2E10620BACC6808AAF49F6BB06463559500704A1872F6539B2A6A4A3BAAD3A630DDFA0CEAE3FF82C3686833FA3282056DEF1339AEDE4B7F2E82499035F0886843849765248A3110183060EECE4F0F997C04FB6C02CF1E6319729EC2443ABFB6159EDE92DACD47E03D213D8BF206A3807AADC51F7BE4CB41A458AEA80A3EAEE046EEA6C7F8EF410529FAD8F8E22EA48FEEDF5F8CFA7084C6D8764CFDD903BE4F37864F0A6534F653C6375AFE4BE7924900CACC4AF4FF5A3F34E65F535E1E03096DB48CC8CEB14935FAC171A95389DF98DE70D40E0D5A476D64C57654E516BF940EF7BF7169E93D362094207DCEC499DC6FFF5A7787D3C7B7F9E4E0E873DFC49FA73A546B7A6E51F783BB9AC824734367B4A9EABCCFCFA2FF55930FFA4FE8CC805A584C70D3EF282930190A16EE8FBBAD6E07785A85E2A2BAA1FCF503BFEF2BF53B700ACE2453F2BB994ED6E580E57E3E03233B0608630F2FE40FC123D4C43FC69B4EC090E58B2016295D639A463A614E400CFB98A1136AB5E888326617F1A1B6BC4BAC5E76257AB2C9BC3867453908E1849A63CD8CDEAA06E1493C376E47EB2766ABF0D167A5A52BF056F4596681218AC4E9EA54E81D4A5A3D16E4E79ED094ED640A4F67210A0AFD3411883419F0E07BB769C8DAC1D19918FA9AD36A3C8B80696E3678E07FA3375030CE1DC0A8C6B9F4C91F6AA3F0A09348AA8F6A3CA8EB3E979AE0D55F2AA8FD738E6338295C51EA1DFED26219027FCED06FC6586B16BA533E5D1F6D802ECFF76CDB7B39B42504BB1DAFAF561F2FF98207D2BCE468651571AA3262E16DC85A2AA9031C24A24B960803C88C64A72D55DBA5573475B9EE7DF689103EBF1E6DDD937710A45FC55584ED0B42B651872D09307CA4302DCC10C0BD9BFC9CC221A45EA6499BD3FF18576E066BA074615996832950AE4BCB7B3C07439D4593C7BD11FC99555DD1FEA6E2C2B528D92F9C1418EDAB8BCF950C01E4E51F037CEDAC983B1A3D62CF94D6AE1C4DAC3088B1EC9029D14195C3A13B101EF49CDFF771916AC61E44C00BBD321A5142EF31FB9829C133A51BE6A711C6354A9EBE422F19466528CBB5C16FB45550AF679BF852DCD1924E08BEDEC9CBC3F4AE2E07E48F1BF68B706AF7584010DC30BBC495A044961A50F5E146263DE943A727C49893D2D9BA7D75E6D6DE01CBA8FD20D7324C09C85E2CAA94388E418E9B2A3527E57656F4249BA4A63607A703836D51FA145C665A0645D8FB9B28C259BE35D8E0875839D6BDA71093CB932B2C50B905314B05FEEBBCE196D70E5BE99ED60DDEEE9DFAD5582B1B9035672945D30D33ADA00699BE07484987096FD254C4524D0046C1833C038776F8414B6B5E31D3CACDE0EC19151F89A883F494B01D083548B93389715CA5A988FC7F49DC120CAC548923BBE31F45C3B184713F904A054F1BC879ABBC663EBFA6EFF3F3DA9CFD29F69314CBE7E5025377CAE1CD915C1A30B4244F22015E7EB2448037580305670B1692692EBB26F14D5038B394B74A70ACE0EBCE107A6430DAA28F7B96AA897F9B01467E519803B68A34946562D8CCDF555975D5BA206894BF97AD249B0B15DE837CEF70FDF5A7C7A3D250C7A4A36A2B9B9507A72A159981D0C7B2A33DDEF861DF212971F015999C30577A9C7CC3BDBCF148AABE9626BFF4BFD137656F64813894AE5F2AC52FAF76F1820B0E02871ED622F9A2B87E6976CA7DF97C427A29BEDB8B8CE4FD5BF646B666A9B523B2391CFD755C6B2E6CE0CDE37B9C4F00B54B64CDB53651DC583CFBE1CAD6D6C3C3B7AB29B17EF4FF8F22BE90B0183CC342484B160396E6394273B9BD210AA6380E2C628C41AA16AFCACC1BC76CE9CF9D975499842FB242CF17AA7CF289B866C22C63AC262BE6269501D0EA06AA21D3B8BE67B349D41C3D30EEC08709C2A6462C1087481713CAB4F30D954872DC836CFF72C6C1066F79823ED88A2C748A0C8A36F9B8B5203416B203DED789B3D72BBE6B17FC05DF22351CD4870E6450CBE9D7FFFFD645FB3F5FF8D1819FFA700437E0674B9E23DC05B35F519B23BE335C537054E59CCA6EDB75CF59FA87794009BF029D87AD8E961507E265398829FC064CBC9148F9A16C9A19C2B16BDBF55463D54CF51C4EE8228485AD2ECE74AC0EE1F496D17D36E28CD97F02DCCF1AF32D6D7F75E2634A8AFAA0AC3E36C057197F7530E93411DFD4270D338A49366C3DE04C07CF0AE45DBD5E5BE7B096429573937327F4F7099A4F62C93DA38366FE52979C47B111112534FC207D22E839D15EF70B45BB378869E2E852692130500BCFBCB7C866E11BB9F6C15D649671677E5D6DF2BE1E812A2DEBD97243F905D3A58D788A5C03B3035779729811BC4DC4C961D1E51267C334242926BC640F1B969DB99AEF5696628D0BA93F652037437D6EA766D0AD6DD63F5814F675892B70616894FB2DD4EC5C905965D80ACAABCB5B558291235759726CEF1177CE564C27FE7B7677DE56A1E714A7AFB6235BE836E316E20F7D0C45A281E0F872BFF388933BD1AECA78751C2C2506CA3E64D8E34B3552D66EC045EE71B55AA59135F66ABFAD4D3130F08E1C0665FC4B7CF18802ADE858058B088FE762F0D62D2DB981625C1FF102BE0D0C30B5CE8C77F57BF7AEBBD18B68DFE0614C23B372156FE3F0220F8FB66FFA5E0873CC7BAC8CC5193270DCBCB33DB212C3BCF7355C77F7C3535B2BBF1461EC3AC793FBA883C67C96E1A4C955B61D6BB4287247E2E47D23F5353A58802867E5AD64BD14855F9666AA2286AB74CA6475C80C6345839A0CA117FC11402857A831DFB88AD7440C1DAD120AD538D0998D66B533B2E7EB3057AA43F701517B139ECD94EADB397B81AAFB0FCCDC97F369E60D113BEC08F0E561259826CC3BA42DA77D2B3BBAD48D0DC31DFEB7CFA968E050D2F5647F9B9D5A61C22C2654DAD4CA8A9BACF890745B91C5675356DBD28B080FB596879D36BADFE644015803CA1507460C7C641AEE1C684AA62E87BD1F6028E090BC53EE175FEFAA4AE06B1897E4968881F5D22744471246BE7C2D18640ED377669464D7F09581C592EC96A842CF286C67C6328BD1461E338866F8BE9490BF271A18C1F0C331DCD6AF9A84431D465CA240B98D2A925182E4FFA4FF1E70BEED9F48C55611E2BCC7C2E1270B548E07055AC63E247960BE0B021F3712DD621663816DDECFAA80A2A388A768829A819AE9B40C6560AE91AEFB8AB9FAD5B4E692E0C80243117B99638666289B23C393F3D0421DAD3B9347D18222F6BF4A1E0A29F3EF728DD630ABD286ABEC46077F919201A81A71C5E4B351BF3C58A17948F79CFAE03F380F3498E5A4222DCBB06042A623023990933DAC4F7FEF2A56996B141EB74C23F9DDC1AA740023D4539BAF4686852EFB280DAF3AC8055FFECAD0CD796A11B96E47BF9D16851C3C90E8694757EF0D6F4FF66B2E8EB89D48EF24CA807CD31C08AFBCB8659336E72D5D47C6104E9ABF3C838F1EBB39E5A176E168341C140545A9984120F7D3A2A53E0BD394EF8278312EC4A2970F12E413CB1630E2FDEC94CD091C573E2528A816A2B64E15CC6953AE736964EC5405FBF5C4B7E7AD7754F984A71ACBCA60AC624CD4436204C9A6E3525DBC01FECF5B5297DC327CA8C9C88D67DFD893DBBC7247812A95B73CC95253F10E0208E8E1C93F17970E3CBD07F1143BB6C53D516B15EFAB40121EFBD8A0F5A8E6D9B3FDFA5F493F7CD0AADD16FAF14E67867420D4A1B5C0F33A4540780773B30F38378F49E923742B84994219CFF352FFA9A5C76382F2D28A5744FF3DD91BB927B2973E8EDAFF64E54E8D22335F07B6A372CF7B987AEAA698183475D1A3B2C8E06FBE1698C64997330E33FE621D999657CDCC80F3C4B77BFBBEA2BE3E3836A45FD9F8C3355D6684FB2B4BFEF8B14D3238F92D265404566B653A412BCA1DE00D2E46BDB21ED60031BDA7E88A1F2B308A48C9603E196F2E3AE89E4147BA2011F2BF30DA01513D0DF05870CCAC2FA443BC21BCDC9418026C67DC96EDB8E268D7EF9ED35B708800BCC57964D710F09AABA50FE184B3E327C1AA602137AAE61BE99F4D7C87C07DC4B9D483689E1EB973D502BD01C3FF119445E5FB21129585B8CF230F5271DDC259A1DFEB5679DC93FA24FAA27555BAA7C0B561074678141A9FBAA24B7CE04E6F73895C95AD8790FED0FD4A1AF59A1BD738B664D588953B8CEA50F700BD8F7D8FBAEED4F3A63BECEEF4CE2985A467988DEDBF1727BF6DCC4D52B9295BBEC45AF847EB5263C95411FAFD4E3295806AF9DDA8D4F301C -MD = A98727DE0A85715BDD5BE6C863B264C90DC813F90F0820A6462173DC -Len = 33485 -Msg = 18B858C61D121272559389ED75B1B1F59B47C7B61288E878CEB94D90AF66BF10A33345D6F5744C2DAB6821EAD8F3500F3DE8298A3A4BF54D18CA24A1F2B9206EAE707E06A458320BF1A5E97B7E408BFA16735C743498FF2F4788628646D42493C91A074A38F4837E275D6020467A49A49B36DAF4EAE0EEADAF863DFF98E9A230B70DCA34E12A4DDC7EA0C970BED352B653B393D3D0DCCD265B2598B814A823E7ADAFAD92CEF93A2E23AFE77DA3FDFB566B32941BC9524A795BEFD4562CBBDEC2B8D30118492D9A49BC77C881F2FE6F0B7189DDBF740385D15A01C7377644150EF1CE53E9F088AB0407FFAE90D8B4DB54B58568D6DB00C845C0D4329984FEA21F104E9E6784F63960EE5C36984243A350BE5F8AC85B07273F72B36EE1C7B25090B34F07F3EDF10F7C4E3E1FF55A1A4143105AFFBECF4C0179672C1CC44568AB88C230F437DC040D969F3B67B389BE79BFD44F5E9B245322B3FBB8BBC1AD52217CC19FE6BFA2E9AB25991DEFB6130C2CECE371D9BE5A68E8980B5D9C292C6886E0759581644FDE7D7D851AFA1C7EADDFF02ECDF33CB671F9F16638A294A7AA8C388037145EDE553932E3A62F67CDD9DB29BE8374639832226ED2219A397D1B481672440D326F6C17E4B031F2113AC444119FA8188B863113AC41C758174DD9FB4FB25BBFBC9825167FE3CAF6946D1679517AB4F37A9C25CBBCD03BAF0725969CA0D6AE43E78C018E39D134BC3D27E7DBB65CA9D4D303211D3D12F81CA9516FA0D54614FE09C55B58A1BC2F9382E5A30D7368CE57D89828944C4A87087893C1F12C7F5C25A3537C48F4558C52F64538002776782F4C4380DE307E933A376D329794D962A793C61D80354402AA94C0049A820421D4FE22DCCC88826717321320BB9A8617C728FC7933A237F43D5459C17EEBFB52F1278761EB2204DE41F2C2F5ED0D6C851BF7396F7A45F38C517795110A1946B997E0860EEB88E7E031A617132047484E4397F7028AE5BA92BEF45CFD4D97D2A30FBCF2F2545FBDA77A9996236B674735D8305B4CC0EA1D6B4C1AB554FDEED7052A71464F14A767A35C8ABBA74F2853A55A13113EFDE7F50CFC44405EE4D39A023516B817FC4D0370DE9CD17066C155F01EBE7A04FC8A3DBFF3EB126C1B9E4A0DDB8B89B4B794E8AD823151FBCF3876EB775C1AE5E8001929E84579AB724F1E6201F891113C00BBD48C85414CBAE4948325C89032A38CEF0D9F49FF467363EA1306A150D9FCC32D96CA46F500F472A07EEFB660D11FB53934C0FE96485C7E24B9DBF8A846D280418C7FD3396F4001E33BFE5D422384C1B93BA5A41F1C8FFD5329978704612E184157E3BBB38F1DBC7425ABB6AF71072926FE4858D8BAA23176A402A358EE44DD53904A63A3BF206B491808918134003BE9C7AD95146A569A6611ACFA32E1B5C234D8AC55EDE37D2842E373B1BE2C3BFDBA357608FFA3BE0FD8D73E31171427C4E8A84B2FE48D7023284AFA2721238A6B5D5FDC418DD4F05D2F95C1E66B4A926F90D4047173D4B6C86145E2C9375A6B53F5079628F91A90A2A6D9C7B41D8CF7B9FC8695EE19A651F59299D999BCA38B78B0F57F077880786EF1AF5A371BA8F10E9C5E1FB68A6649CB32669C05B424A9D2F81171207FBA1D2B80193E31D45070C8D888F56ABC78055427AE2F3660CC5DCBE872E6BCEF74A619733E7A81202BFCE6774B3B35F03976495595943E75B4334BD0ECA5224B1DDE135BD28A2A503288A0C771FD31FA9AD291B739EFFDBC16160AFFD500E70D5EE71FC47E17847DC19D05758A8D787AB6DCBB923C2A953BF15E88627E46DD3E40FDD379AEDA16A47A576F2739120B2DA563B94F1B11BB7F8E0C5D0599539B8876C27590D044A63C7C907720A84F4E71134E02A27AF7883D285B46DA008A10C8A2C725AB000A80F4E5F0F3739CCC3D042A18DFD6D3E065F225EDC4165BF096B7D758AFD74FFD54E7364062F449FF1DE581F4B31F91286A3F97E6E19C6D5BE083E344A73C2118AD49B47842460617D43C62F60BDD454700A5D91E8725CF107E59D57A3A8128619E3F0D6088E40030C26F07173EAD52C3981EA5C8147AE1FAE64F05FB37FA8D8C8F7E1F14B858D1CFEAD84FEB4D255FCF963A26786BDE2945498A81EEC196A44B3C356136334670DA74F76647998F064FDEF943186E051790E74B61B0C76E89EEBAC05B87EF8E328A22C46B916435FF05135CEC61083F2BB0078E0BB4B5B168F9A4AD2248F8D8EB99BD55504FD82F939A996BF8715691D2E7CB274E49592C7391095467C9379CDE2DA7C27E47130920FEE8DFB8D8C1E143CD94D7FC68A3E65CBE59594ECAE87D0A3B6FBCB56662827C274F306D3579B3841F4F1EB09DB0BB987F1AAE7000FC772D46EEBD1571D21872AED4562C1C6D147A2AAE2CCF2014E47F7B835A04A8B5507FE8FFA5829EA8EBC3F93A6CD034FDBD8FFCF17F8301C7A04EF9D75562EF6DAA05C642A656BD3D2DD54FA9023D7C0C91290C61DA162DF0D8F9ED158A50B53A73E087BB3BD1D7455962C9DBE1BB29DF6776DB8FC41E12964FE2981D1B018E513A749DFB034C5F9F0639F466554EE43127CB46462C5C30116793316EE07CFC8496EF0509644A0FF2A2CB82988FACCE6D8D21AC04D60879846189F4C594D9672B99219D567AB6AD4A10E11B5C630B68536AA971AF63ECF42D82B17961C132EE9D5592F12EEF69B1977DFA360A86D9CEEB13EDCEEB2EEFC6249AC7A25A483814E50D29141F5E21CD0136696F83D8D177036FF4C99A5ED83F2D6E711774FA6281C31B7C15FB93760DC3B0BE12B89B598FBE501E075FF31C4EE4264326E95A2BFAE9338EB67E41437F4B4D446FD4043FF17964784E1C1ADF65A11BD2711602DDC62FE36D52BDDA114CB0E9D1059B51ABB4795843F8B6C82ABC929ED2724124A11F07BD2243D3F503AE1FF72C4F2AA558F0FB60A7BF8F2E9C09ECDF8AD0605FA0DC3C00431A01E3BB5454DDF4A982268950103CD64A8A067FFB6DC6ABC98341FE85CF37F0B41D14C4326180FD1C0D20D2F1572D76ABD94F08E3F574728EF621A7C4E8A71C9D572E9550EE9F2E4F4E1AF72693D387C71DFA90F3AB4AE9F05B3D763D43CC4E09C8BE5D0439C6AD255C17D1DFDE10E577C00CFC933CD6BE9C980D9ED6355C164C0284F479BF05878EF0BCE9470C04CA70DB38215719FC47B92CAAF8AD39320DDAD9CACE7033F7833D5986BD609EB50CEAE6994CAB738CF4FB0FF4BF6F55810F22F82E623FB20143355810E5E3418A733CDAABCC13A7D907B64CD7CCF55A14B9727913437EAAD7DDB6C7E2D7F955C13A0839F1BBC8AF708E8D708447C5A592F1605BED18E5AF17453203D8676DBEEB42820F9ACFC99E774E9B2E72A99A9EB904849B7F4817A3B15583CE151A59E6B4C98E1CC58B966E84C969C5420F2B7AE478DE4DB624ACB45E489DC0D2C2811AF5408D7EB94014B7441A105DCFC8824605F34639BDC195F87BE5720B4062C25EF1963F548A8638E6A8D5C6905AE131DF17889BB9417FDB1218AB34751C73B3D84A939C490E7E7FA5E2A8233828A495CAE3FFC6F1CA42B7683292E09F1DB791B1A1E486B2C32FFF6ACF28B3AE3D256BA38806A18504AE36E8CE44EE76ACF8422E41A933062CEABA0B858FD10F53D79DED71BD6E8224ECF1B4C3881E0AB211244CA62E859CCE473F28DBD3D961674174EC2566D02C331AFCC76527D96B838686A25605572B630F8CBA74135FAA6F53C35D9F0944C60B66CB4F4BDE5B2BAA621721AD6BBD5582A3395FBC6DCF6BCD389F852C510508DF05A59458652A26E2681CD8A805BFA972DC7C901AEACCFE54F95A12D416B8EE240AAAE3249CDB2351A4EAE66855766715C81380D4136FAA4030F709E844BB638D25AD9563A1AD2D70267429205CD03B19758C5EDA9F592F0E443C6890FAC15F8E269B41B561C04DE836C6A7D16C6FDEB03CEE87BB25DBCBD0CF7301E40D96ED0846F7FFEE08F08B7E323E14596CA1195C0239E398BCBEC7B02D76E317066AA5B5C1730AEED303E561FEEB57208BF59C980063C1B9C94DA5BE9FAB34EC0A8FD67F2587B4616CF13009DA5E1D4D057F3DE13FA283A3D8543833EE9F05329A3F15BE0CEC6F11D662796B84FED86F0BC61179CE5EA8C1FFDD833B78BC1E6361EFF893BD3B88508896A23BCE43F48CE99781876DB087E89D5A7B5D11CE456C35B3A5C2AD8ED191E422054595B9BDE5E3054429BD04DF0470FEF823D28AE64737B94129AC6FE4F61CEF9DE31E50A6AABEE1C3D21A844F18D58D0215B8ED9C408A25F91147CD8386F34CD6B45AF4180BA89F514018BD493CE95B57588C46A8A7F1F88899130D9B1BFB40DD146E85F71A7FCD010699FC1A06796A46B89FB19811C80BD7E23253888DEAB79AEB18ADFB76C2E7E5F9B1EE15740E78BF3C831259276BFE953DC8ACE4E20EB44E619876ECD435E9AF4D1D49214E66D83FCEC5EFC44D8EA9A363E9236FF504B331B85A38FBCD09D5B018091ADDD044558375EF4154B889FA99236B43AD0BAF2AE7EA944E8E519E9518EE309908BFE8F25130F9CE5BBE970657368387EA79685B35616231032C9F6B0B7D1F790B6C73E32E58C205E221EAB218E4B624313FA73EE7FCF7334E2D81D30CDC2743B9583A6B4843674BA6677642217BAC3AE4DED04DB39BC786901481848EEB784164435A52EE67481F7B54389A7C8B569403D352A91E24B6D691529CF224D202A8796E6DD0ECB7119ECE43B73BFCE835DC09F4748CE9296CBFCD983E3D04A4608D58790A4B47F686B9252F6929AA8D1A83CFB808E5EECDFCFD7E1167EFF3217CB0AB767D5EF14BF682AA85CF44E627BAD17B0D52FC8EE569B3899C6C18466AE3400B247F904DB593F9AB0C407EDD0615F1EB2109C93CA17C60377A637A1F1BEFC43206565FE40D01B147F1D17FE7485B05D6EEC87229E078F640BA609C6E9C92646661CD5D0B1419878C70A12C957AF61EE07BED2A6809BE4E58CE07BE71C3437BA1AC0012EC2705E81ADA8FADED01C2719DA536CEACFDA41C230E2E8E640124546062E7AB8590382414D1FE535692D5D9A951F87F090530F4C36EDEC779295FB648671C201A18466D4EF3883C153F000F6996E7D28B32C21A738289273432633644928323862DDBCBEB1532BF3836ABA168A06477306DE55B24A55A176FFB53AFF181AF032CCD532C7C6740887EACF8466CB8E641E1253EAF59F2AFCC3214BBFBDC95B2024418C420D8222D5C053E41CB8309608A67D757955DA43B0158C6E7DAD9A6346CAF034E49583360C46745A36C52ED68F4AFA56FEDC0CDE2E300DAD4BF07D6B9A8FB09113C8CD4D9F2FA6A712FDCFEFEA9D486B75AADE952C043F12CAF9C7ADB7FD6029ED38453BA05861657C0D2151FF105A699C8272634E944D931E34DC4C743C45F224BD8301FC252D8D9BAF17016C0B3B92398F170392A7BB34B95C4C4C70311D8210E35DCC97421FF45D44CF1B423CB54060D4627A3D4C3857EC5A0F3FCE8F3659463732313BF51C27B216036452BE54674338FBE9A259BBE5C7694296CDF424F0EFF2D9B68FB9DCD61BCFB17A134382F064AE87E5C50030D714D164B91D786435DD6E5782841A599D0CAC4478438BB2624DD4242136FCFD10A8F7469FA6EE483DB97CAE6B84E97AEF598AD39DDC47AA83DFEA87018583925CD9503C859C89CE92AC6C5AF4E22A44F96EBA12E83DCE042A484BB3C50403EECFFC5D51FACC0E8EBB6AFC0D338C8F4DD2B6B0EE75863EE773B5B44E1681F45C3606122AC6C9FA225A67D9795429095C47D848D9FB3F28E67021124E79F4131C5D49D00F9A2A05533C4715FF4D13DF5350E38B51815E4BF3F77C67D0FA0710016F005E875CFAD243054D43F3CE3CAF92B7B71B9F0A2F39E884E506DFEDAFDEECCDE22EDAFFEEAB8D9285EE759C8 -MD = F2D6CF193BA45396458A7EB68673C96B73BFF57BAB932CC09A1A17FA -Len = 33548 -Msg = 2CEE81D751114965553E91997050D9C6C788069966EC553A387981D2AD4A41F5D29884E1E5DA47ED9CC4A2347832A4AB69E100EA7DBD808A97456E74563AD225FB9CA0FF5F6E99E24602D2CFA91F3FCD2D17D35DCF03C724F8C5FC4849A9D733B07C40241E8656AE53B12C05BE1CEC33FFECB31A16F85CF09AC5A32572A4F2CA5DF39529D373EAA67B48CA4B00B8B53E71A83F6A1462C0F61FB943ACB12F4D37868F9797E0E45E75B81844C886265BB859221905F3BC90BAC8981DC8892CF592723A73B094516B2192597C0BA021B5ADCE9E618FAF1E77544BA34F3CBEA09746BB50C23EE0EB7A7717DD5ABA4B2180B337B52733E2972DAB90E0F9F036173EA1D023AD931403EBD5A9E1417843031ED6B491EE0EF077FF0EC1404D9A4D93C63FEF25877720BC4FA0BFCA0BA0D916D0530654B909CB183B5828D385F5E79F99B30CEB33FAC86C6FD8DD08F4132DF5E879561BB06215B33CCB2194A05849576759F9BC7E4AC0306D11CB50B41631290603A0429F46C7B65A86ED689E39466DBF7DE51DF6662A149FF1E0B237283B3356B86A4F1A5380B9E0779C3BA74C37A40E3D3C3C38793107CA575191162CD64FD6071712725A2976511E459944F6873699DF6AEB7CBFAC583A93D2612AD99A24E945DCF918C2F354E04226EB5A71E0DB0BD9A3F6AF6EB7613CC915A857F0D6D13504AE907233352541671629159FF5E7D3BF433F4CE3C8323D50C36EF391AC735A6F5E852C0729DA16327A9ED8C5ABF43DD67962AE8BC69FE7EEA924142052FF391311107626EA052731E00DACE3D774EB23BCB521B87FC480C148B40716EF72A9C3E170FD2B068C01A5A1DA66434733BD6ACC2AE5398941FBB164949F2B099391704739480507FD7B2E90413B6AC1472423062199E82F05936284985691869F005041D161682206E3189951DB726EF0774559CCE03D175777D501F8667FBC7D9B3898D2AEBF5D39C66BD0DEEEAE63E7C46A4D0FBEDED6890E9D4260288198B162A1C6504EBD995BF02E0C1CE8BDFA31DFD74D0FB1847BF4C1B120BC7A9A508E09EA6AB7A38394A8F4AD781B140E693138055B64DFAEA3D1FB25B267DE6F014C520F8D6FBE239B5F7BEB7CF6F33A87DF46EC7927FABD92A23BB7D8BE6299E0F13BD9EACC9A4F43B572ACC627187F990AE31DBAB38CECCD917EBF1D9D227411F9B2E53CE82474D806A4B57E98868E03D34AE73AF860BF33FD92C5A407D33E65999A40366673DA6F6920A84CE48D38B508B065FE9B4DA33A8CD6063DB9F2AF42C8E05C183C08FAFDE10629C6447E4087C8BFB22AA60FA9E761C2DB2BD59E806C4111E2418801B269E43DC38DDE3B9043F6576CE6FAF053957C69A2953D72997891DECA8386311692AD200DD1A5FBEC4EEF7143796B4F6AA4267BD898CEEFEF2FF6D3047D67EAFD3D0759FBA302E26DA3DCDB8509F0FA9A6DBC5E15B31ACE2357B9D78F6F2F406E48FE41A4E03EC244D41D5DB8AE445A8654242321FBA3CFF0DA7E9F23FEC8593D279B59FB0CF72F9E43EF2DD301F86594FB2D92D3D44D09C156267F87E88647E2016E0F124550116AAE486B3500BD0A5D25C6BAE1140CA30003B3459BD353763D5F87A912D9B89B2276E2DD68F99DA439DE90AD531C4928780FFA4E14E3DD7CBA452F15F2859E25E19EBF2707B902349600048B1F660955B6C69EB5431433F68C5DEAAED45C0FBDD2C4CBF26CB348ECA204807E3D42390F56DA8236FFEA7E708E19263FF7A9D2E9F1EA43424476C84C4F21A54F355FCDB90D4BD385A69DA41B63B543BEAD291EF3E12E433C77F648248354057C2669793A4F773C571BC8782653CAB4B3861C0D6E69DE45EDD3C91921F813AC227AAF365401BB6D3ED04FFA46A7BC71746BD457815F68448EBC1F07EAE90BAF5E15C450564021822411A5E2CF5821FA0E74B70E1D9A5C7DCC20404B6C89D845813CCC9F320CF334F99A3B5B8C1496CC3F6CB58E11982285972B8ADD97483F95FC3DA9ED8E88260CBA07D6CE1DFA62E9E0D2AA04F3F673444E6AB2336852D0D27B102912EBB499EFCB85C653B39C4FBD55E8DB4DCD8255EEE8182C2F77696F14E262B10A5F44C56047784C8293E1898EB555106E1080C0BE8B2DB1771ECDF44CCAD2515CDE62A38D6F4602F4C3A91FA3CABFD9DDC28A4326E31CBBC7D04B3E5FE7746F0256900AEAAA09F136A3974C7B26A044C8FB7434DDC784D15937C09520092EFD338E917937ED5A11263ED2BC343B8BF7DB2D0711DF468A1DBCBE196ACD532429C56F60DE72210EA01FC39ED4DFCF9412AFE126A67EB3222AA86530AD950A9EF1353228F37C0F07A7F38D1EE1C602C8D371D9BC92475918A5AF14F92E68EEF94C47FA7F1BED6F29F597FB8F30241A62A638CE263932521A8051B1878AD99C0F2613AA0B78D76DF514CD2CED0B31DD1F2E0A41C49E72EAB0B03BBDC3C5456C13F2FFDCF51EE08157AA2D27323DE625A9ABEF698E3B8FAF8C6A9719D5B2684DD5FFB99D133C465CFFDEE9DC8BAA5EE29D26D0C21160E85803509718A9B7C4A3298D3906A941A807F9A841D9CD0C1916F65B63E7FB2E1B38631537BA5556029830198226A3AC2D483F5BA0612508B8FFB618F294732343062B6810B225C245C7319B8221720DEC5FE793679DEC790BC86EE1C61022025820779EC3614BD6B752161B69BC55ED42A19BD71C5900691E2DE327594CBE935BC76090DBD1D62B30A88F8C821DB70C2CE396C7F264CF40EBD0752412D33D7A9702FFCA6DBC80B40C951603B71EDFECD56472FEDCBF3F2FB6C97D1C8852BB2CE6BB93262EF3676DCE252346A840B5E9808CE2AF09696D1524495E3D20FFE910DFF2B0CFB80CAF9259D6B2619C84E4B18ABBDDB85E145650D8086FFA8C2B9FAECC5ECB166C08E331676E2E7FADD7A839E3AFA0EEEB808471349270878D665A94888F9BA0B017DAF91CD0E63A4A473E44C1CCDF7EE4BCB5CAF56CC14BBF8081EF44E408368EECB39515DCB674398A697F0769A88F0AD195BD3BB831ECC00C765415B066C92DC9F32ADE4DA9B53F1E20F256C96F8D5725FE0787D692B0D43652565CEE92663500760692A8AA871ABF2A6CCEA66D63AD27A52075747C5FED77A50FEBCC7A690BD2574AA9F720C30184B30856E7C4AE34B619D8F215F407AAD27D3D1903A488165314D2E0B3460937B9A87E1C66414A633B5B3E5A35CCFD409879715C026DA3023E647F343A5D5927495C4028388444689FBE4D65D8F420159E74816B3AE976D8A47E9526E4E6698EA0AE6913D44EF8964F11653EE6FAFA6D57DE11A87D9CDA64114B6800177C3191C5891A29EBAB61EDC400D162924AE7CECFC786D141F1BEE816B868E5B2260AEDEE35DA90FB931E6342FB59961C83E9A0185B6284F22A873983013F8E33B508DA69A88A718B8A46CA3743E61E97688437B7B72A7ABFE54A537BFED59EF6C33D18E566D4A56C52374D3BA39D39A25A8D628C7D5CBBAEBACF571017B5991D37A4AA92C0A94482B5D768A9BB98483C80570AA22E43F367EBB10DF7F51ED1C06BD7212D0E258E34DC8C728E9FF412EADDEF5567E09915EADD55ED3BFEA0B8F9D1C3EA99D4FB481398903887397439CE1D9131C8AE5FA4CB152452D8C63ADD9B93B1DB05CFFAB8BEB69C55C2F24BC88616F9C39DCD30BFB0833FA779998AB8A366BD851EC1796860FD4482482145CB43F0F626FAF95E2827825B075F57B46072972DCC382141DE4FF35A2B18AE705B79C0511AE1D108729DC97BDE03B170562CE891E6AAF6D04F342D8AE912E66F5029BFA49C1D3F142018D8B7A9D7C78E68742A99F0327505E1E7D37774D4F26714B59849FBB95D4C735843862A3F5114BEF05737373DB08CAFBCF78FBC792F204482EBF3E36170DE83C7289BBA896970F4702DAD7533718DAF8A3B1ACB26CE314FA48EE4C4F7621EAB1BE2A40B38949D5693A0668BC3A14FC9577C0CFAA9B63FC867ACD795BEFBA2B73A850F06144145389D3CE95C6AF2EF4A19C23232359EEF762E4C6DD60D6564100F0FB4A0DA8E8F523D4CA8A06357C4AA9AAD5B004180F9A15C1A4DF1135CD39DC83183D9D610739FCA59A57DF008B477F94184C290760735D7A56E4D6538AD1F0ABCAAC453ECF2509E1191961C29F0035438F36A5C96B521B66A92E2B390CA8776F0AD02149165133ABA97EED5E27031600FE20D3EDC46C0071F616D7474AB9F1CD892D7271980C2E77465A72550497123CA83E4141B48CD93BD9D9166DCF999CEFB217C9C589FE8E59E29A194947C398D81F4CA2FA180BEBDED0C7DC650FBE83C3917E89D857F00F7FD3C13F249542F36B4533141466B0E496E8E074719EC9E478B415449FF71093C1301802FA118ED250466DD91895138B2A9A5B2392ABCC19A5C760CFAF512DB68EDEAD7FA43CBB8BCD0667116869AE03A89F53AE0DB9864F108077B159FC213E86FC271C9C5353D736073A72C24470B73B9358DB7BA8E126C8A5018F4FF896E6688F4CA2AC6CCD42D08ECB0BA269017F2E31F4D56161236D64A8AE5C9CB077CEA5D64784D65E307882D3C61E81B3136D6FB985F741769C37075B72D9442F584F025099CD874DACEE3C72EA7E0AC2C8DE1A98B1F17A12E0D5F3E2962F1444F65D874C654C7DC77AF1AD24825089056AF49311294DBBA771510A0ECC9395253160E06C090A367B25B404AAD0E6524979E2D2D6A315D6CB826030A6E855AA47C960409401E59814A30874C6395EEB0EE5163B1727AEB1958FE01F9D629FEBD35B9B772718AB4D51A434FF573CC2D6D12CEFAC817B8D3954CE79F2A062FE7E7214C97B02DC081F8307CE5B8A1BECC42F5BE36F944FF69AE2F61402D90F9735E2F21684417534300B2F8C52B520D18212E70C6E59B7944ED1E2DBE8542A798B251AA49B360657CE4C0BB99F84203CEC771F6A03C876B68CF23008B98B9F61A2AC5B9B092FE3F96B87E6686F05F02D831A119CFEE520E02E71956712BD86F6D6225A97A8235228B0E9A0DCBE052599BFA015116C5F1A3F0EF59987403F2FF82912FA30996D6F7D3B303674A56032B96E4179A403DD9DF1BAC4AB6281DD4D97331FE7A74A2EDA02697AC3D26CC7FC9AEC126010919274522483C891233F9A6CC587B78A4564576144403C99B59EE132134A48AA4665629550BB90E25F8AA36D8C5EC7363B31686B732386142BD8D21C0EE2BC61C2085DC85192874807C81B958CCF3F4B747620FA6D29A3B600708CF1A699B0C7732360EB27A1937D9662B6F291E6A73ACF6F91FA529C8A3121165D136BD465FAF1FA1E0EFE08460CC1D4FED8B10446944390605807EE5FC70F50130E96E243A05F73C271AE4EA067218789F7F987DAFF984D1BAA135DEC3F32BDBFAF3C93AA8EB2406790980A4E6257BD0B3D134F6CC673DDB3E5B029A6C2E780994BB40BDB4D39F232F3AA431C27F448207953A87B84933B49DB2430320BC4C98A9FA5FC096C01570ECF18E56F842958EBFE15A68AF56586292209F52A34D2872D2F7BF122ACAD16386E92637099F0C46CDA8685DE272EF6BFD40246F2856070737CCB0B389CF15669AE02D870615BF848E84532FED4A496E41C0402CF09D352DFECEFCA703E729FACA3E05F98D7F3F0B566C06B1E5A3EFB5BB276BF36A6A084FAFBC6D5D4F1B76E18D558B3ABC0C034040D239A41CD2A6E848E054D34552C35CB1F04DEEC908A8FFEBD21DE1CB8415CC220AE0A30B6AE9080EFD45618FBEDEC5E35964FA1753BE0AF8ED0950AECF9FB29C56F413CE587BEA9D95F5B13D1CF5C49A3C8F32548E972AF567665183267CC43B95BFB5563C83E96AB623DD56808CB6343B2C3C1CCD2544D2FF94049E96EE18B12B8B7CCE621121B547B15D7713F24AC8334567DD8A6CBCDA104984F2095818DBA6048C475A972EB659DBF6F22BB8E866E1BEDBEC32EB974E02018440949A41A0 -MD = 07AD69C3CBA738420054BB88BD2B5788E89E73AFAAA4644BCE9F9ECA -Len = 33611 -Msg = 88819846F43AFE114F3A1891947EA41B28CDCE5FF662F3350620D7E05EEE9A094B3E69FB764D529C53EEDDD62FFFD28FA934AABC74F3FF824A26E6AAA17FC7A2BE186FF8C8696BC82EE530D4F0C71527E1256E7C7ABDA7384E31246F880F017D0822D69372E35BA965DBFF9E66C7AFBB4334C43551560AECA2FFBE5BA183DC1CA6773B2FA457D900E7A6B79BDE12F2998E86E15291548C6575580D83354E2C83EA7C3261BFA48392816971489E269DFB713C49C76ABF8856DE5351E8E84958189200A27218C3A474B3E7D0C78C5382622E4775C406815662C158852CE91460441938D092ED7585EFF8FBA5999B94F358EDF46C19C6B25601C23AFCC3BD983DA75A1F581A4E02DBBC84DD35F27A31746159BC61DA6FB754C82FB8D0A7379C97BF94534E945719A491C2F7D7CE8C30FF577BB2DA36B38ADAF09EA49D847B1970B7E33E03346FE44FF9FF7AEDBDFD0D2D14FA5326236FDFD12ABFED1B3A020611690DC5C9117376360E3058EB849D79E573508FBB52AE266489BACAC0D39BADC17597053DA2A833C72B53AB408F0083522237FA40A580A8D92484CFADE958515E111A6CDF1A0EBA64C333CB17101713A883D4E0176516446820F262213C9F09EF26A3244FEEDA2E6B3A513C19A9D2D49BE7B70145D1FC58892BFDB06EA5CC465121939E4B6CF96EC8E7EEF147997D4FAFEE0E097394D15BEC5EDFCA2E30813CD5C150B7A65263A914A35E65B555896A2FA77169FE3E9F0936A78BDB4548B9C6E4E0FD7065333C49C6D0E53911D69CAED25425A511942670C7652F08CAA2ACBB21BA0CEC276EC6E624C081E523DF6B1FA8350923EAF3E1EFDBB54E12034A6AD86E94CEC03D5ECB5D9DD231EE0E55866E52B390E6B2367BB1D0C84FF5CC3C9933EE30FCED8C805EEB5FB41E2C964B1EA63131204D87C733CE7F5B450C639E485D93738ECC35BF8116A93D60AAF746E3D3D7E09C02B7653E2A1362A7F2406E01FE9D6F1184512B0033DD3E10EF13701C9717466D4679A114B0F823B33B787C2D6A1AE02ADF9C506A1BF9C476F67E98391D66F236559474D906AA9BA8028522A9901AD85DFBDD2A7B7761B24E62D99246A7E6F309355102A7FB54CFBB77F6293C5AA8A61EFB779E572046F5954EB6244D195418213C86E7A9CB88384E5C059E5DBC2925EFEA39109AC3BC1D891AAC5A676F1E30B9121F28D73D0A8A75980AF7C7086FA1F8DEE1D1C728F6AC9A8509E7C5B232B3BF5E349931A18C740978885DC1B03B5F773EB876EB443192C7BA393AE5A72D2E813A952D9B5FA035262BED8779384BBCC5A2C77F28492D54E6F9E3F53E4DD46E34855C1995A6F720EEEFEEF235A3FB034762C3574BBE230805D0D2E46536F3CD82DCB3E795FE325E808D68C0BCA0845A808049CC840E5CE2C06A6EF7611DC8AFD3B1CD4DC10B552B81AF950AF1EEA74CBE7B4AC9C99F74FAE5416D3466CF69B31E8ECC093F18FA32C25236B16ECD321A58B82AF84DE1FCB5797EE504D4AE3A01AB8E3ABF86D76ADBB79B6C04253EBE11C557B18D79BA33CCEAF98EDB8E531EF87318DF03BEB6188F5F5EFE3F9B783A25BB6BC7D6713B3AF37846355254325EA74395154E1FE0054310E039BDAD575A8E6FCA7C68712DB4A4928FB3E4099F216022DAE9A90ED9524970D236076779A3EB5C7C177B1E0AD6429A415689A4636EFD919267ECA4C29BB46183F085070C4EE7BF98BB44D9ACD427114B1F612F492A5F18AC72E5FEE6A136A65C895D2F6CBD367331B876D98352D1A3A4681C47B993560F2AB2A386829A2D5F6286799529DA212AE88B1B4859ABC203068F016E903876A68892DD5609DFE34A9B867AB8721D496DFFE165567FE31148BDE7A7C747B1DB1A36E44D2873E4FD65583531DBFED6C2BBFDF822E5663801D086E783668ED36602AAC0FE8539F3118657C3D01FB496A2D267654931544D1B371886E0745017EBEF219F8918F969927642A707EE2739294CC1232CB9750A0C6929FF979958DE352BCFDADFF667BD423A7774B8553736BBA7EF4A519276DB4984D59839CDE54048129F65D9985929AFCDC538945BDB9FC38505E66E3F38826215C30B596CD7F584C878CFCC5B54CF12F706919B821EC293E95F00AC37912CE0E285AF374AA7480E99DD052588D96C36CAAD0526DF2F04473090AC4AFB9A947119D54C91C8B9FB282CAA774547A864D0888A3A5BC31748CFAED6D79E1561800BBCD22E809957C592B2B2FB690589F65D6EB5E70DF6526C9D0E7FB67AA46DEAE7045C667037607B0F31DD62D92FF003379B932FE141170DB08969014963CAE037743A30EE1A6BC37926ABC87FC8EBF7253D687FA9401869F296C60D905E6D6F3AE4800477EC0FD8930AD0B21F5BAF96B52AC840786A4BD13875F228A9B6A01B3C71EEF39C7FA15FA47BE200C08A509E220F481D170DF92820D6CF30345C41A2D4AC546239538934C9522B2FE410971C174DCC68D0C69C61FD902FC00B20417901B57B1F8CEFB430DD396B1260C59E3F15FBC72F452C06AE0F36EF0FEA0224E7058A824055E573DF837BAAA72651C81BE040CBF75FC4253263C4C781CD259BED6218C21ADFF24D44BA42AC8FB2B473E5CBBDA21DC7D7871937CECA8198E10C6E1EE3399F0EE2C7CFF93510B8A7D28F1DA10B1881F2F6CCA843B01FE6E58681D34E3309CB19D6A18DC4B4F2970B59868F80A29859E5FDD7897CA722339A90C79295D1727A0D2390A6679FFB6907A25044CBE627C9A49DE426655C68FA0B829A0A51099EB967575C6879B4C265AE8235906754D72B0E93FC837D35B50183F2135A1991FC1E04297B680FB2D2F1B3E11F3A0F3CD2D431AA7753F6C0EF16DA8AAAB77B5E1BE00A915A3466FCE9A39B184E0DA1E2306C6CDACF1BA9A7248EADACE8F62187BCD5EE89B20B6835992782FED69A8DA44C90625A26BA843A978CD7EAB424478B6F783DFF8CC3A1B514AF4942B030E9DC222BBA0DA3C6F9D8B11D736FDBCC4DA14B77DE53EAB69B68DEE242FA2A9E95225A06AC7A52F35BEE178C024073A7BC2FA7E7F9454126DF8DDBD566417075D6C237A8924C95F89142CAD8978740DCF858D4EFB93B228F623A478B66E48A5BD24322881B2424C108B4612D75FEBC9091AABE9DD5E237E3318A746483D842E567267A870D6B9C7A55587C0ED8BD50927CCA14EDA3C79AF36EAE28382955A920FF4601F4BEC3F539CB2C3420F299202466B1734D015E9305E11F8EF40BDE361BCCE0B9A56E71DCE8BCAFBD760334147C9C89B4C5C7D13E8B45B9F2E21AD570376E6C653CBCC4351CB32C22E7C4954C9C1C236A59C3D70C89444A2E96621366E8039832C6F6D8ED25FF2C8E9DC9F1959AC2A3F7FCD826A74C7450A414DE3EB7A40C8507FF21B7A9F2755860B110A19574F00B5F915E3EFF7DA4AE95969F55171BC5F9973FB555ACFB0F47D0DC5DEF7D818535C5C4E24857F9873E3E7EAD2DB381514AC8247671FD7FB171CD84A279055480DEB9A1BEDCBA18681F6747884B9ACC27AD3CCB4ECEC850EC87313E1208BC07CA55E2B64FC6C64BE79FF5C254EB511BD6951E4C97726FFF5EFDE42986F9A22A1897ADBE5E90E68FD9F52A1CE291F66CB02DC8B088AC237E7B676378914AD0FFB2A4A6E56BF3F9CDDAA455CE3BB7E57C8B3919F70C3CD6BBB9939273FE6917EE8933EF5A0A783E558F0DD3CDB8BEAE077570329B333176BC86010A19C969F93445433008A595A0AA2C1BA2B995AD952BFBDBD26294B40210DD17654534759B5A974740526C68F86EAFB8CEB680FC87F616506D5CCF33FA388D50EBDC6BCA13630E0700686264824579DCD69006FE23BB22D924CED611EA404761F3C2F2A737682048602F41BA0BB95AC3D2CC54261FCF60A46E943CA2431F426076F7D06FBCB5242401E418F3B305C4D63A65159F4641D89253D5889DA7839F90C0E01D9EC32F3F38A658DD5DFA00123A045197CCCFB6AAD72DAEE00DDD271D8FF0A0DF3CB265467E89C730075A4D78C7980F4F6A0059058BB85AB88A0FA02A86E305F829E57A543822FA2FC3EEA2E0E7A799828843B05C46598E336C1231C2E222FA5EEBADDDC18607EE5F39A4D0270E064E4DAD4FB7BEC7FEED71C1A0B33F0B816B8857BB12E933A10CC03DEDC58775914F503B44F28F378CE93422BFDBC34E4DDC230623C3527416F5DE8235D6B6770006EE74E7EE25826256B3094EF5D8D5DFABFA3F896D54F6DEFEDAE0BA50367E1697B17EC6CAD547AB43A6D43E2FD2398B011C70A4B8C1DAD53E64A8C674FA87EDF3225C486AF7FC916E021C9567B4F4E7644D4F7B83F3CF28D31AAA6C86CA7C9351B38DE45CE92792B3ED0AB026855BC99D68270881B9F6F36B7F39F875E37CB3276F215D0DEBD18C88E80508E578642AAEB545F7A23CFEA454C9E0899CF7C14A64E01BBE7FC5A7FAA41CE3EC0E2E6745FBF45A8856AEA4EAB30EDEBE53E0BC0C4F27860FF3EA3DBAC565C753A4824E7EAFFD51FE4BCB2B9E4E5999F0D78F608D4E69D3A9BE96BF87FB878B994124F283FF144738609DBACF7B9804D2E4314566B03A16D5A35CC25930228FE4620564792DB271825BF10DACCEED518B0084D530C542832F03661C8494713EBF3716804CFC0B0E71F6DCF7F7F08A2F86BEFCB7E222C7DD55459E2444A510915939AFFA67833B16C8781D76F7E443D7CCC41793B9ABC6E7562A718FB4AAD5F63256DB75C9F931CAFCD2008C453B35C6FE77A63ED764BD9DFDAE351AD0FA33CBAB3BF9679937E2C05ACC63692E07864FD3DFF16837D9CD9A09A9578CB652C48A80CB4A898835F4207E82AA4B622B558683F5A184A3C5A914CC66068F4687CCC30AD8CFC3B7A587723CB6F1EDB93A1BE41E927E0127EA46EB1E43922225FC98977A78169359E3F2C30676661B35F7A42E8ACC0E971ABD84D7C6D8D7CD7EBB7A3952F9BC38F46E6D8E497FDD7FA2C2FF3619429967C8BB974059C0553D03A158813F3B50DE28908874944AF1BCAF765ECFB2743CFF5537F8E3E1EA8576B0E75445495807B651DB53B8C4C075CB8DFC6CC973BAE56E520028F94708173D3BE371A2FBFFD43C680C417390AE83AED07E5EF08BFD843916E247237242130A38C585137C6CA8054F3919DD64F87D155DA701E29556D62F5AEA2131FACCCC18618A06D5EC85A37632147481481ED1CF3D315F76CCE071C0CA705C8BAD8BB92DF0541C8CF02AA651B8A9BD6D2BBFDCBDA4F673F76566945C9DF47F037A5274674BE8BBFE23B31C78BEB5EC566D1692E129417B6E3F92EA4DEC83166CB7920D580FE115AD1CC0638E439D68237B80D16DCD2C21590666BD847B2F8BD12FFD19577083A1EB218A98F7CF58CE768D9C33FFE5AD2C45D77A9732B90FE8FB530484A4CF9142FD74F6BC5A7EAE5086C51954894CCE0018F02FE0F5BAB32FE6A5C47A2E778BF183690A2CA40BF7DC5CDAF22E96B75E549C2B89F490E870DD51B9D76011F043D0DD8F1000107A0968963A2C6455CC809814C3C67D58450EFF06BD01083DCD38C4981A0E16C5C0D62D31E7C0B370CD54407A54300239DA59E1FEA9B125088BAB893E85D51A0E62B646E31F5335EB3B1F421796A1BE4F16696776360090B983E834E678A07A348606BF7B1B48C49A7805DA54C8A65436279A7EC257BC5E312ED69A9B7914B428ED167737E7839AC4AB5E8DE0B70841E679F6DCF21C3CA09FA19E30AAB8B7F794FE4D04DED4384670A68781D1E93688CA71886481175C3C168B737133BBF05E76C6807CBACCA28F2A940C87DA69D5C9951D75BFD431C4CBF61B009BE559D489E44BC348387C1665C2FB7A845E9BBA8FDDFE2C461A84E4562F1C32DB90EC9718F233B46F52D106C5B2B1F4A2F91453CDBB24CF93C3A496A653146D23320DCF35D66E811FF8B3B684618B5289F4955549493D0A5F8D14F5357987D5C699C1C66178862A2743724D1AAE00 -MD = C64554F4558A2689497DEE522B2F6F0A48147EAD747875BCE677D44C -Len = 33674 -Msg = C34CFD49B892AEDFE08711B2007BF339062B2A66189FA50F1CCDC8A0A89BFDF1EAA5984533A757B01BAAA78D67881440A6B0CCC71BAA97698E0DFEDF0EAC4A1C939615B90DC7659839EBD41FC15A97DE0E93F5F6BABC9522D9F08B8290FC6A216816CC1AEDA852F09E22D222F40BDF106EB1AD59D128E2DCD804756FB6FC169129CA5BAF310F6B3A5761F78F1B35BE22A5EBB4D83B633CBD54AAF4AE193F1C28C5FC890975FA5F9D112597FFC4D46C9E3158F12D7A44241A03AC3686F3A609A2238F2AD8CA20469AA19E558D224D93CF0F572CF69CC24B3794010545B26301874BDC9C08AD69C93CFDF45A6BEF9DCBACC63C45E179C52B59290E3BD1976F6A07788E65C762477353F404805E200292E8E7D2752DAC99EAD19A3B2C57E991EA175DA7427D53A2CDF594C5C9E682FE9C37838662D26F636927F05B71F79C4496955ECBA093F8B88705F76CBE1DAB276E071D57216F0B719227471B05884C18189258C0F7DDDBA86AF5CE2E6F82266AD208DB792EE886F41DB4AAEAFC14FB97E2597CD39A8FAA5C81EDC45C2697BD6297829F7115040FFE52F7EFB27F0630ED8B11B44B139408B26D4489E531683F11C32C3E5CEC3849265BFE1B8A6F77D7BA3DEA5CA88ADA2D828F281954786177E8FA958ECAFE49C11F08C338FF9A251E15E4447BA2538E99CBA14328AC4BC7195A1661CD65B92FB5862081858E6E4A472705C2D9A59160D1290BD0973BF666379E62BF000691A15551BC077790F2FFB244EF7FB1DF095A31599EB53F8E8E560D4F2CFF64E8392E71E089149723630E0B856A0E69245CB18F13D1F8D510BBADC48959C17D0090067B6575682C6BCE8C69B111EC2823DDDF7C42A4F9DB7BDE5BD3281B008BB39CF38600F9F4DC0934ABBF4A18920D805467B0D42388BB7D2B73308985505E45BB5FE985417FB043F586C24A8493E4473FA4873CA5919557544861C38BAB12F0DA60B2DCC18AA79232070EEECB4D1B9076B5999451C5A7CE01655C05038F477A076CD09AE187CDEECC327CEC791B8E4B96AB2EAFF6C3C60AB287F40C403DF36818EC36EF984E9CA584235FEA194A02D8610184C3556900A99098073BEF77D9B0875FBE001730DCA6729F965DC17E56E0156FE7EDD7350E3295D40DE2DFD48C040195CE0A0AFE32D5E8BF738A5097954DD0FE3863F7A0474D3A9E36BF2EF287894AE2393ECAE7B137F93C214D9E531D28355C96C4162DB5CACCBBBC3F7B7A7B808FA023ABFDDA60B2BDA016FFAF23D38E834674D204BAC82EA66E3DDA97BE03984706CC759AA0E8B2D9C73520C6E55236D584EEEFE8B4C570E21BF70C2C8B77422D4CCB4AA8EA177B1D005509BD6DFA608CB7E1F81943B0338D37A84E95206FF53A8A689DC000C68F8C294CED51108F2AF095BF1C99706D8B5EA90505CAF7EFB7C3639765649DADFE31F14BAF0C6FB5BDEF79DE008A74F8995B49C23334B283C2DB00785272E5F250B7E3B50AB282DB4DD6D19E1842DACC6803D2030B827301CFCCCB08CAF0E4B1F8C3592D9221155C0AF04126035A397305030528A70CB702FEF660C1CD542D71D8F6C2C7FFD573BDF79ABEC662C82FE655D585E6051FBE062858D2034AD824E2ED6A8279494D46BD357F01EDC54D86333B8864F99962CC294AB5504FF8C2CC99053E8571806F51A93A45C87AB11CDE60F52D5F688285A29874A8D9CFB6CDD51A2A647718DBA2420C9E15A5E07CB2CC8534220ABB1257788FC6C6740D9C584BBE75B3F1A4A6D7AED26288C67CEF3FCD3145323333BBD93AA05D225D333C27052AFE80A1E58C21597C074195BD65366D106FDA025156D88E5902F04FF0CC846A37F54CF041D2029781039144AB19CE1FC23E08DFE3AA053229D1B107862EFC04132751827A0774AD1EB558CA3785FF8DDAF7D83E0E95ADA9105FB79DDA4F2A80AFABBC35DE4AEA4DF46D0409881905CB4CD4E68BC7490F923E8852466D377F3AE79FEAB1AAB4D0B3AD4ED6837690D50D43BF6353B1AE67C373364D15892BDEFA12907C54CEDB243A1465AE6CD36E5E37CCB2DDC2B6A663D37C2DF1D8BCC61CDCA331C4675527AF79B3E1CB9D64DB72F8FD6337E5DCDA4B8FC3A58B50E258046AD049D582BA9E6BBAE8DEE0322A1FDADB3E1F0289073706DC83E1691711BEAC86469F8017BB6093A8EC2A486B08C6895A4CD0269D73E3F914AFA3D7C587508C6BA028483AB3E3A698A6D2713BB2B12B3009C410750BCD9819C5BC5AC693CFE13338F68208E69681D3EBA41B1F3DAF908E73845BDB810DF1892127D0921767F1D16083A2EAF8DE3502F319398990B683F8CFD4AA3352EED3B25EFA45BEC6C1476691882D86F3B481D68FDBAE5A87B599A6DD5605B5B06CFF7AEA1ACF351069FEAF9D96D5426C769D9B36DADEBCF15A28F33F95630E7134B58C9F3401CDB3A7E99F1559DB094AFA372ECE15ED3A39991A9BD28D7164EB99E97F0BDC3F9BC6B47FB91E62E0859F2C8A4EAB332B45C5DAA986BD78E1B0986B1B5B4B9ECB4B910F568606EACA5E4A4C26113A057181D90243CBACB28278F9C6DE0309EFA2A9364276605EB95FB0234BE938F80919DE0FC8A379333A90040929619E1138E473E27C92F69516322DC88349889194025D69F7AC714C679AF704C80B896DEFDDBF54B7AB92DFC543F364A3520444E1AAC6483245729D163A0690404E42BA5BEE1212DDA8A4194A7721B0090FBAD4A2CBA60F3EBB5E21477A1CC567B3B29A15BE2FE7F72F1DC94449086A1A70F8F9E20AFCDEEFF40EFF61C003E66DA3055D21DD62976806066BDC12F655FB2689C2258FA083362D5B5DD824E759AF31A734223A21DC4463F36757856EC2E7E5867678EC95C7EE4E369525E2EE937A2962A761A7B5DEE38AF6CB3028A0E20DBB499E0366EA9F466DEF52F2640F3FEF2383B3EEEA5C4E0A5E09F2FEE8B2F07C28BBCA032CDA8B6A04C4FF5DD973D96FEE3A1EA98FCDA2792DF971268FC0C61DE7C13B0B7A222A77DB79113BDEF479DAE3360B6737610D2CBC063FAF11BD0F8A3F6304BACE87B9C81E89EE81263C1CB8F28EB12E25EF7D284493F4BDB105CB2B2476A9D547C8EEEA76A5062A187B6605A831AE2322F251480D55F7FD3FBA4869BF548894EA0B8DC5794E1356E92F27728A9AFA71188FE81052CA334699F91D1AD98A4A3EC92151BF15652E76980483ECE1B3EB2C85E92473C98A02BDB50F7C3D2C52297FB5BA478680E8E318F1896A224475A4B463B0C99FD5DFE9404E2382EAB51BE330442E0F39FF82E8404A70B549DB480C5EE98D0B88BF2ECE7867CA976059AB2998F01DE65A4C9B8E6D8F0CC25CF05CCFB2F497C12CCF029F0101B3294CD493BDE40D5DB116CE45B7876D8297A4BB7DF14BAE1F4B06778745835A4593E7094104E44E9B9CD029A2757750761539DAB3BD183E2AE98C2883C42BE76E5D60CDFEA7CBE1407852559B6E5E91C64EA1E625BFFA664E45BE6F69719D01E184B71F339525729499C826B20B347E11698D8E2447CB98C737002F568886B962C29E10FC6DB0F49F69346163B157E582116C3CE10E9F7B0A6BE67129C663E1F1B043DD42287A0425A90C88786D314627A13A4AC20C325FE1F312CD99A486867D62390EC2883CEFB34408DD6AB123C4A3EA40A150B241B0AF9A4B57A58093EA0F42D351A08A4C6C0AD36645B0692F09EBC8FF857AD52B15F341F6AFAD925339569D0C5D7C8AF9C37D92938EF1A70FCCFDDF8C301C3D6DAE03C184CD5B3F0BF1B7A95A3F64A1CC34114A0E0C0A0F13D19E3F8C4E9BEDFAD7FD16BBD38F3CB98C3C4FA2D95D3CF88E069790E26DEB77ECC5DB18D68DF6982F8AFB129B04B0BF719508B0B69064A190518215C24472F6F593220775C3581A3C904F4066BDBD7FCC4E90A284EDE0DDDF2D230F12235186AA2CA6B746B63694F2A53B29F319AE2F3C0E13A8D0AD99F1C57B5C123C32F3FED928E6C8168F259E9B4DF9E2E194A30BD394198281C4313A22BFBD31A78086A4A065A2461C7AC5175D1EA5EFDA14A1C82A437AF1C4A9C6466021F7A70A68A1BA9CD9CBD0A643EA575E8EA48E4F28755DB67022ACEB7CC36D09415927F2C71DBFE9F1A9F976818430E45B2DCFD78A78125B75033B4E6E83C3810E557476DC1F967F3EBBA8C0F746AEA127315F46169790C94060F9E38E98F6DB4D83322ECDD188B2BAB56010417F959FD9766968EE3F612ADE45709A0358E10F63E5A183D8F268E230FF3E80E132D9D0702FAF77BAEB34DEDA45CFB778232C6A93CD7BDF106FBE9C782DD073DF176D0A981FFFDF0D976E831780DCC5530F70B2FB3D0083B1F0759E5576FF0BE62E5683D41970EFFC4F53B8C10708437AB634AA8F2A52E43431EEFF0873556DD12C94901EF6EC15479A094A628259EC4673AA4490C147C5A8E6FE51F205FF40E6AF7B0026B9774757F0D6D105A62D2C2ED1970FEF1EBBBAC68ABCEF8F6AC40DEA666BB684B07A7E39DA577625868750ECAD078222D3FA9B7243F9FDC303B59A7148D94B8BD91B728E8070AB91FB8704FDEEDAE809465FE872C14635ADA840E3ADB4DCBBAF7D955C3A7006D80ED9E959BD7FDC75CC7BD751E7B7621F8521DD092F51814030B29F958A10C407E2D535571057296F2177599B72B8D666957BF4ABD2B4CB7C38A7F2FB82FBAB2008D7B57FE319184A94282A566A0C3FF6959C6EE5095D48BDFB18F0AD53748E22F0E6082B3E5DA3497BF1907061CB39C907953C4E2FDD46BCFDC75A49F014A2642ECF25D659A180A3E33A294E9417492F1D990FA1B721C5289E3A48AE57B08A0330AA71304E59B033FFCAE7F3278F6CB4954EED67FC66E3EE81187216BBBFF7CFFDACFD3831D7738BBDB59CBE1F230F3F16EE0E559452B8A013A07E20007127EB18576E1A2FA5809808F6F58D20459C6B23444A896BF0005530C125FB6D575995A64D7C23694169210ED868D1E2E800DD5966BF67E0EA3EF9F4F7F846DB036451EC0C51D230BFA401C561004632BA486022575C336989E50DD75F7063B9DFAB0EC1FA9820157D8AD245335CFBDC14AF13A1A208AC3DB4B9169098CB52B6FDE51F6508A67E2B44C58BC9D6AF8AE91AC680A896DEE65DFDBDEE96D509ED46A450DD17C6E68CDD391212D7CE1DDFC0C2180BA398671E720E1D0DD52A540F7B2C436A280D825F3EE63BA5A4C780C1505BCD72D8E0E0F4314D2D887FC319E9D559669CFD3E97283B8FCEB39EC455A30C642DF84BAE1618ACBF1AC7C5E2D6645136FCB74205942DFF6361913578134FA3C1912F0BE410824EBCBA8436646C7E2D3BECB76E39DF7C28B0F0C06AAD0FA0B914232957AEBDC81CA5616280B9645660BE44F90BFBD9A930CAFDA5A82D6A13D741753425D29E85979EB6A0B7BA66A904F7286DF8F8A47C993C58EB1D3DB813B88C31A919BDB0C34586E1643E69BD3109DCBA79CF378ACFB492D31E354B4E96387335109F8B27114836C2D6D8D0DC8358422033741C550B038EA998250AB4D7C3CF0BE1E8A2DD9B1980F4ADC79B5FEEF5F1ABF5D10A3C7A5087A6394FBF82346A778A31FD6EA97041675F9D541D81706D42F4EA8E28C1A762EF5507AB46807D2B0D62F7EE602C254072B76A4BE1A87F72EB79FA0FDC2796DC6F66413E3C6A3E1C5FF83D6A5C86C26F55431FC0ED29DB5CD07C77C0948376796939D570744C2955CEADB79E13EDC738C56468D7C67DE904488E4EFF376D7A43BD7FDDF055F8F3124CC35A31D2B2400DFE81880F9D71FD3D214549A0730954476EAA55F7D2AC152037E4F2AAB82B306BE22D12EF0A7A6103AF7637F47E82989D58B3F717D58000CF8F39A2851DA1D8255592AECD52C3B10FB349DD61EE19EEBD489506F58B4DDAE85A37194A22F7704B2BCE1A146BE68FE34BC17F5D89C65BF21162F7B3451C8DFAA42863A2699642B792425C4C9F11DBAF8151D224A11D6D4B68C6315EEE01CA6B0465B23E117369F2E180 -MD = FB78B7BE0639C89F431A19A4315C5C481598F898C9011EA3FEED87F8 -Len = 33737 -Msg = E09A3004E7051B5C42B007BB8A7E8D29AB8FDC2F27042B4A511BBE865734AF8BE088A0608A3759C075E08465EEDAF6DC658741A76290CEA1650F4011969435BDE9311C574E6A381F14EBD535366DD665D9C7C1B886C89FBF8B7A409D377F2330447324AA4E4F348BCA81817FF06EF4CA686C9B1E83599C63C384C16FCF5AAAA6F24668794E4FA3E5FC9AF88579FB1806CAAFF7C5DC319827872089880E59EC544B94A7B0DBE4C10C5D029E82EDCAE1C0AFFB9E8F2CE96FBE6CC964DF98ACF6E41C27E34939F263C4487DE331A0641CB84C0AD4ABE7A323F0FC2D274ECD013E35B54BEE6E6B53A71EF396F6C4A8E1E49607E6890D1766060C15E0F5DD3424CF61460AC7AEFF1120ADFEC72BA29C00FBA4AA253612A2B379444013AB54076C24649C7A31559FB07B2FAC02E46132F925A79ABAF9848A4BF68BA3CA67FBF83A0C1613E1DAFA68E64D3E3D0CC01F3F864BC570B85DE4446F901CA34EEE6DC39F079741E22AD5E70ABEC08ED6015E67AC8CFCD4BC5C8D487F357920B9D7055D78121B54088162F1C88DC36642EFAB6A83BAF3159FB3BEE1D2C93013863B56F53BDD16E5BAEF778ECD0B5FCAA0F1FA87AC3AAA7932A33AC931896392670A636F429F46B1AE1104A71982DADB61BE249DDBC179E28FA6E35FE3796AD5D83E3D1439101F5AB778033A6023BCD6E2656E71E25C559F0188B1DB8B1F00DF4B550078BFBCFCF5A46758C8E9D462E45918D9E7D681DB543A955E2BD5C0E713FBE057679CDFBFE6CB7016DDBFFB2D6D48BB39F600C6ED732FA548FFA86CDB75B9D5594FE6716888C391ADB17BC725F83E1DE8DC87B063DF521F34973B997A385B3AFB564E70E5D2A23234A90AD70420FE48DBC071AAE281C9484693DC337D8F98EFD81915E1F195CA63AD28FCC7FB9099914A7AAD65F8F9A9FA409F5375B3C6FBD3C0E772426442218AA57C6BDDA05191D93ED1991A91FA089154F50C087FB2E7FE319BD05F28684D6C4D798F8BD50C29D132CF12C2D58BE8B2BF6F3854B75BEA19DF43BBF5808C7754AF506A12B1D08CB2E2D1B2A4F8FE32457153BBE0CDAFF97EC2E4046EC2EFD49C5C97EDE276388DB95578F8412DEADC07D9D04B32BF4BBB4ECDF15E2E788A03E51CD8CB669FD6F49FD32D26D83D94959CA08690DBAFD9084DAFD0656F9D6C03414E58C3688B962BF0A14B9ACA5F660639AAB216D7BC092343B5D1FB79ACD655CA4E32FA0C6ABCBF57A24751BC9AC13CB606A6AF775B3DE047F901712AF1ECF1A2555449BB70324F4A2650F1CAFABCED4711A18440F1F3E309EEBD12436C391A0318442702AD5C8B31D8FB21AAFF2DFB80F1A9A3A8DCB8E84BC8CF1A612A3E7AF38DF06F6DFC450C345807F2082998809C76F58BE10C59D4FF293A1B1160B8B327DBDC51301F50814D95689681B70F3356D485397526D0A4123AABE585ADC132415065495AE3CD5595380F44A8E19DA0EF71D9FAC77A71444F9178555905C7AAAC5CA53D819ABE6769BB30449CD69D9A30231203835EF606B565311101D533E83E4DE1FF26ED7F555AA7DB0976BB76ED54BDCB4E1EA66534C4D178AFF751064D6545D22B3DCD2E1B7C71D08970B4410B5AD30A1107C14ADB6F3512006AE70648F4C7FAAFA3D604C937DC32BD924811BC9438AF1DAC471678C3C69E8F8999F005543DD994C69548C6743A8306B50D35CFF0BF9AAD6F97B9F448054AC2A4C09969F243087DD14537475817A18DD49FA6BCB049812FBBDCF5CC38E721B026CF371D0C4C916C2CA2A6A287261056A906604B31F564DAE06679E314AB77191EB2F2A7E64EBAB2E970E742CF05418EAA41791AE8C721EDE61CCD4D1851254FCB4BD7CF2A20BA6815D3DC820A37A9041A82F8E46541FB833449BCC0EE6E2B85014C494A7C4BA060BA946B0D0D1ADC6EEBF7A27B272BB53FD90AE3C3FDEAC99C505F76056587E27FC8B24841C02840D3FE456A5A8B07EE8642A3B69FA0C36CF5DD1FE0ACD539D61BC25D69842410BB0B409FC59B4D545F041265BF795CD21BB5554C3694CA4E05EC19AA3059991F370B14567DDAAF04A4B5FF963BDF07827CC388BCB0E6197F5C4A82B6C02EC15149BE8F9D2732C1C5198AC9FF8148A410F5638A32E0108B1C17D9DDF34F136040952B6C1E268715E6D6E5E17D732D8DDD7BB3ACC6EE10E73C032757D2C285F679CC9CFE95AA82CB5CA2FF45784E90BD2E68E9BA0D7261FA0FF875737564614144B4295F9BD1768C6FDDB81C9E5354CFA6FBA38F4E90891EE0FFDBA2F413899919E5E01F0D50C80654F25BC6D86FE6DE8A5253CE17B31D5DDEA211A3EF2EF7C0292BAD523098AD9FDCB391FCB281C1739CBC8933246EBE5AE56D8FD149F3855F28BE54937CBB2F14214CD8C6700B489FB35DBE8BE3FE5D4DB70BB56C8A0DA972F39C63E10CB09DD2B0C8DDFF0E4624A5F23CCFA9EA897CD697B897DB3C528C8CC3A54E8B18401774808D95E982E45AEB89D283FF7FD22C10F48ABD2C73DD818876A918CC77E96B05E7C915E15EF4771A8A175FE21BFC42477E7B04A5F04F1BDC737B4A28DE395AB46DAC8590B8CA52F966499A73BEABF6B50A40926A7B9DC9A9EBD47A65B1AA7B515D0EF23F5333713F11DCC902ADE213EAC0022A487354131A6CC6314AC242DD2927CEBA9F9A243B9FEC84977D054515785CFE9C1E71C3B1A33E95DD01B967B73D71DF4E6942B46603BB403E09C3320062511421EB51BE375B9C8EA8285BBC4144553D72180CC961EC6E6208641422EE5AA4AA87188D9C4528825B149AC13386DEEFFE98C938D449E9E31AA45C14EF09F5736C864E1EE5907F0F58E916A42A47C5AF615D164445E7AE8F6FC29C7EBFD2D4D0FCF966880AF72412BFB649E9DD200666507DC853E26E8392EBD7B26ACAE7B152F2677BB7564C9047075237C32A84ABF0F4340C88EFC8F27FFDBAD9A4E8F8324A86263455D7B95C59895A6998EC6E8466E7EB5BA1EB6812AF48C99A1897D00D00B1ADF2DC28A0238EA6114C9E56F71E0DA2A296465AED4FB00D65C1C6452285B09E86DDF52D09A8C12047829C150EDD16EA5F7AA4F389CEDBF6F3CBF12F303424686BA7830F2B297138C1FE3B6D64117054A87D5148CF121B64E7C3B5A03C30ABD418CE1ACA2E95B792626AB399B9EDD4FAC5858BB1DDD42E9C5FB6B9195214F64BC72F18FD80E5E2E4C1423B30B6784713CC1336CC02F3070CC39A7FB5B9DAD7B24A80967826F8BF37EF2EE1FAF884EED3028B62D2015D548F46323DC8339732EAD2E99331E138ABBA82DDFCCEC7824DDD89B87E77BC787CCCA17E234F817E3BE7FFB5E92E41862DF6CDD18D3B819438A6AB6CB5DEC8436E735154788EA9F8C81221D6CA410CE5EDDE19FB862CEFC9893A3B1C6E3BEBDCCAFA7B1F96878813F141967E0A1ADCFF609E6F15332DEA01E24B3258DC522C14335FEB4810F40955863558F4128BA8655985D8632BAB362875079979125E5C91BBC8872C07F2497D7E6EB5AB1C98F5E34957D729126BD79D4D7BFF71EB4C964539FEAFA82DB4DDEEA39E3E3514F04F813838B3BDA3FD362B0B49853BD168294E42FF82DDA5122E653F410761C2D2CF78AFB9C3A2AACE3DE16A9420E3C14078E5EAFF9A25FAD2314210E7E05D622E895875D0271B5790B8D49D1A4855E3BDBB2A13971F381712AB9487314600F8FC148C3566B75DCC0F88C809548A1D0205F20A0131029A7100E36B7D9E5D0E02E640D32EDDD4FE52520F67EA6115937EF4251C488F268BD50488CB5A3E64B01EB0A9F50EE44AC081F84F78B34F465ED67930C4982D9CD31C6F32B64A62562B0870BEC5BA3ACEADEDD5B37EDD18D00F28ED5F75DFCACC8762FE2ADB9B60E66B0E0A8983DF94F3C97F9BD6A1EEDFD6F534FFFDB966D923412DA1653F56F580BB3C5098B4139A7EC41A12B2EBAE897002F3CCCDDC927A15BC285FA66FE54DC8669BD8741687C5C9B3E649638B3E1EDE395132905190B85D4555A8C7145D766BC131FB21D52920EF5CB3C91C88C2CBC5359071D18D3DB4F201CC6C3AA2541862BFAF68822A79F0853995D8D412934F948E49AEF30C895763183BDE48D938A5D6FBA8DE4CBE691ED375E842778EA75EF84B1CA0D8A31BC7F651B97B62375C6174673295896EDB0EAF0E92F602DA39712EAD556802776E2D9381A772B6586520EF5BB8E6AD67174BCAEEF84EE2F08FF4ADE8877273398095C6622097FDDA9BC010788189F18ADAB253A42296C1F156BFD915992DB491C1A0940BC390C2D3FF93A92BD50C15841BBEF130D8B06E3A2A856F38077A1824B0DA3EEAEBB3E637662E80BA783131A1CF87EC148C3502F50B4E19AF41203088CE513929C0EAB24C6FFEF2A1C077F84C1C0F41A45B7C87F9D50EC756FCF32A0693C78C706BB889AD03051F02ECA90CBAE068944518E14929C6B3568422AAC77EC30BD6AF307ED648F2C0E9F57FE2244A8355FE9DD3F229A14A200D5C809416E5E0DFEB30680898C9FBBFFFDEEAFEE4CE3D980408AAC3571C5E80AD2A62F4DEC11F56165E68733204D8054AAF6C8522C4757E21BD11A433BBE93B5CCA49927DF7C1AA93722CD372E8B7C916E9C2D356FD8BA49FAFCE5AE7104E1ABF4C8D03DFE72A4C4BB98CC82DA2DF7F10F21386D1B7917D0E48772C1B8593F2B36FB2C821FB0F6FE5C962C3B7CEA51C5F29349F69FEED56E463CCC1986BBA86BFC29545E2F793002DE719A68865761D7F3827E07FAD5961B4619573F2835E3A591197BC82B6315E44AC52295CD1F753DEE4AA8AA37393ACE849AAFA7632202A7B4D54EF351753837393B47405192564332455D23D467CCC2D07FFCCE184371167DE79A17C7E2DAD1CD93E6ED6D2CB7354DFA226EF8DA12B591BF4AB27EA8B41CC13F87ECBF811D353065C8575394017BAA354E09C5A4CB904FA0A4179B9938A7F4DA6B26C843479AE9183142AA19F3B1F43DE143EC549207BDB3DA0FBECEA8E1C2EF010BBA25B4355921D7B24108FC358E7472636CEA46592C9A6BF6DC661936003B084E3F3F6AF660947A0CB8198738EFD01E4FB894986B80BCE2E8C632785227044E09C812D4CEF22B7EDE722400BAEA7756A9C0CABB1F6CC7D89F6FEF7C8C4819F53DAADC4314E1101AE3334E07C5045830467505204809659C811D283B69996F08650AB5BC0D808D64BC9214063E736253F21391BBCDAB5DF487D706214EF9C0A4C78F5BCDDA9737B507C56B5F6E20D1F7CC89847A0FDE303B0B6925EDA0305D0464A7252EAA5A073FE08BF7FE7D610C5364D29F66362C4879B8B4EB2F5E64CBCD17CA9B6804F810F8A181890EB498FB4CE14518DF2B84F5B846CDCBC82E1BA484F3F2427ABD17E208C4CB90BBB5633C48921A0222866B355326CD62604964783BE8A15A877C45F119CFE1542B6E7C5D61B2F2D6A9F54082D2644D09A66251C8A5C790867E17DF274DBF8208ABBCF15C313739D0686358A962DC5CCE719F136E469EDE71735FC556B8FF8A6F04F85490AA1088BA41CC226705DE1C0F70A5DDA1FF7F35084CD669386658E87923BB239BDD66CEA86BB6F6EFF13FDAF927498FA9C0B6E5E71E22898C2037D1A50864AF8BBFF63E679E577D1691F0AD6E95F2FAA59D002FC06B6EA35D61991D0B473F806CF0DF84E6D57F8608B1E84C60D1520A8BA39F41566293E3F5854676764AF46F5DA8CA248618B8A98537FA8B7DE9DCC8690B8ADC5427BCC3F76DC9D9E23645983168775DEAF80B11CC09DEFE0A5A6B9296B39D4B23BB97C7DAB0F39FAE09013A1531F401226B91C2ED11F7FD4CA3A15857E1817AB5D23987AA89D730107149B94B34DF0CB94BD8461A3DFE6E3445EFC160DBA0E4D7DC5562A7EC1D4A2536087ACE9EF156B51B124C5C13509D6A55BDA71AFD8CAF53A04365A009577DF1468265599C6C1C92A9ECF26F0C077FB30CA87DAD97534C874D3E2F2240B6B7A24A4DD915C47C33EFD5BFA7E0E0B9DF93043E3DC4AC280 -MD = 7A7E9181714A83F2A20ED387714CFF069B42926A5D7D0E23EA85F75B -Len = 33800 -Msg = 6964E2D650B19AA6D31B839C604A90AA3D105834F3854DF4A41D4787A387042CC413DE27503A1EFC366B87ED677EA63DCCD40D9C7F699FFF9B8A42B596173014B9E811D42D2DE574ED5C80FC6A5A86B772A3EEBE5640102527401C0E9BEF57E05BBF06986535D3163788C60C92EC7460B7FC685FB45FB8A18FA84EF5A37C94A2EC3A948DCAFC69B83E2434ABCFDAFCE948D8C76ED9BA780D39AC3DD098EBB3208538A666CED8ACF1B3031C5EF23592FC432AC25BE0552C1A6463E3CC778D456A520432A8C55436573219C49E6BC27474AA4BD9B1B3BC64917D016B6580AEF2A0BA41ACFB98EA869D3995012715D06D64E0AAEFB2627125F225E2EFEA21AF7EC49304B8E6399623FAC15D6CDF39C4177A12254E5D807B4AAECED6D591F4D0BF50C07F5B69E7D60055062654E7B1C8B96AF726BCB34B10C60B7FC3B10DBC69107C7D81043BCAA681EB354CF19AF26AE3C7CB321B892C33CD044A24A5249F2F2EA3F804944B5049CA887EAA6D4CD5E52D17CF01CB0FCECDA47425EC85F8362AE045ED0D109758C90134EA27C4CBF6E3ABE7F283F4C3FFC4455EAE4790329AE47658DB2850B09A79A89BDBF72A20DC887B6AD7ADECBD5A86C08479D446EF817E13A37819C227792E3E0FF80A2831B20760B879A489A4AE50AFF9FB1DFF39132DD84300EF7ABE05E98C5929683A2DDFEA99468996D652DCCC698183F9A3103F7C049A7227733D0C14ED1BB809B4EF750DF19094885961D327394D6CFA0A21B341681738B7E6FEEFCBF4DD474B7B45EA64A3A60B97BFF297E8A52CD4AA6E92D6DBB7FEF7F736D29CE3B041488A6DB68D28F3C0204CFFF82CE6EAD11E11D7B060A0FF550711BE33288ACC63B6DCF2062251771544AD41B35B1EA5F11C4B196C48F5FBFCB4B39C60044A70E1DBB2CFBF9D8FCC855DEC9A0B33F2021CC76B236ADEB5A1356CFB8590FC1DDF8A721D9331861DB604AD0C8C89871E960019A0DABA43202ADDD526C1706E782FAC5F98295F4C6036B8E2DF6D225B6335D1314143573AB8E66A7750BDB6420452FA060B24FBBC3618D951490534718D97E3AE994D5E770D103E1F405A5357A2521E9393ED2ED197E7AAC87E142205C69DBEE846034FE6F2168DC207D13022E11427E8F02087D2F4E850E7FD21237D56BE970781CD779F7B0D8E9F689E6CADA3386B5E779E382AE3DEB6CB20DBA16A94D147101FE594790A5B331D40551C8C1D81052CE00642F56E4048F6831D713E74E3F4C6ED2352854854E35C06313F0104FA47EEB282AFF9A3ED3D683FC88E9684AA0C460C3EC333080D5F557520A359803563A1D8BA7C716082CBEA808DFF6296947CEF7EA30CBAD458C0B90A07847E3E557CFC33B0E3893D32924934DA966F6D451FF8C6B28ECAD7480CC137327E5DB10D180D41E8088660297DFA99126F7E2AB290F206C02644B4F28A603E959077E13D65C650CC0513259C36324CB5223E829350EB0A567317FA176213EBEFD40B98C38055B24AD85171FF0724410926B38D8A06DE500775D39E472B0B3212122204136D0793ED28F6EA070ED50745745DF57079F7D4C63C6B5A862A031DA93F4E576873E6ED03EAABC2A59D4FDE5A670850A52B17DFB059AD5A0822FF68B9A3A11A26BDE519E86A2C7F743BC932BB29208383621D509DA438A56B56E1AAADC330A0CEADE51EA65ECA256E3DEE4495C3FB94F41C121B03B6996981033D5D9E5540719E29EB1AD9A10C2182811629BB5A7D2296842FCA6018E44B1B2B0EE56DB63EDACFFA837A0147D1FBEA737FD66B614FA097819422DAEB9E1F04B81D4B1E569AA84708AFAC7A9DD92F95D9CAC1137404F950C70D0E337C956BFD2C7B64A3B99F1499F9B297391B0996B42289E205B47900168F8BC3A30C84CDF00AF52EF14D8B4A87675F8859E9C3980524C2081D3A08DE576C1FD5B40459E299BA89FBD05C8ED01E3BEDD893F7EC17DD1BE1EEE0B19186E739DDE650566C395EB143451C09EB51C6E14EEF3FC3E20210CE62C49D0BB862CEC28872C0CD989050B56EEEB062AE2645C1510635E4085F5940EEC6274CA982E312AB21BA0930BE4D6B57AD8D36BBF58DC05D353E32A5CFCC4EB008610E24A8F2A1FCB57BF6E4ADCF80D3408997D6872A2EA5E94E74CC184ECCBBA15882745E03146045DBF6E94127581CEE20F2F408841D1982132E5B7F582B91784740761EFDC9346BD9EBB3C1FD341C3056F4DBB4B36EA9E4BF05C965B367346472D0EB55B840ED49EF245C6F86EC5394063305BA0DF45DB30F7658D28AA988CC9AD97F0A9C0B3E59FB623D55C61F2E202521714970C2285BDBF7C6119FA3097D82F6A1EBC33D42C85A93630AE18521A2F8AA785A17C2D9354033FE297B172EA1F06CCA686DE4E1A28836DA559E4405856411D58533CE33C6B573EC51F0F565499F6FCA8837FC80BC4925867EEB6BDCAB15EF1C70B17E02A535E2F423D36591A22CF527D118D5C540A6749E1C206058C0452BD9C8F5885EB5823BA8515C105F8D96FD5F4AF9337E66D35069D19EC041A7D979452E5743A6A22DA0DF662FD9D1A2AC3F8D431A61F4FB944089C52233167E0D53899B6D45C51393F3EF6894921486D2F9F4D5E6E95107FB975C8E856AFC76B06BF3648668EAFF6AA59FC9A3AA536E548880D4D79C9EB5CFEBA4D6D5D402197C0E1608500D69833C069BD1C45D766A7BC783C0194A2C813B223F141D8AE2868FD65D68DD67EF463E34E4FC20C7777BE17A3FCFA51A9D98FB23B341B12CDD2B430B0602CAB03A226C7CEE4F9488C8319DDBF4EFF1B614BA9C1FE0098E9CE1B57EA4D8D777EE89F4C2E3C729216B6B2EE2685DB9C1945B27986C748DCA51BB361824824FB2A31EF9D7244B734779B86354BC0DBA438D378193A84785B6B864306EB6E6A0A80FA2AF04985FC540477B911D7EA859D8F956DD1DF3E464D884A6355E8B24CA3F05F25EE53B23EBE43CE6C32774FB74BACE33A12E7C1798B7116BEE1245CBE323882464C49B647D61350ADEB84CAE9C61B02BD702E6D8DE849FAD57A57AD297150312198D89EF1366E45286F4BCC8217DB2EDD39B144D6BA1D6CB0D1C74BE396CB535E6FF9900AC371A6F9E8DAA45DD1B1842FC685D1FDEE0FC127A165B03B561002CA56F19143024C41520489BEFA82AF92FCE5BB220DCEC1AA047B299F7FAC2BCB489C99044AEFAF2920C324597DAACAB92F6347BC0EF95CA619DC19A7F28A1CBBACEFC85EA2BD7A769E6BE424F4AF08AF7F24F5475EE2434ACEECEC18BFBCFD3479226363B2BFA915DA76B839857A33641B4B9F64F15702ADB3964E5DB19FAF48489A7F6F9F56A2A258C54E0E5F97F382FA99274B2607D3D6A6B94CA075EB454080B01435C5ABA8B45AD6EDFD00DDC0270C7E54919A43DC715CB7B37E8423C7D2285D222AEC66E4DC4B55BC6EED3CED1B8D5B364F5FED35BA0312E46418192937792E865EBF5D5315F1E395194004B77F1D15E48203E3E5BD2C508E3CD8D1E2075B3D6DB0A5B28C10F155B13954297DB518A3E47DB5DA1C0ED8536FA7B5945E952BB5C4E24C40FCA0C344302A5202B92A351738225505209D810789F7A590672ECAAD866ACE771A3F9091A1695DA17B3576213A0DB5C4641E78045822AFD939B6272D12E05CDD1040681AAEE55523BE6371C53FCED13638A9448C0E9AF8AEF55ACAF723D513DAB5138F62E28FEB489E75BE072418051CDFDABC7CEB0C99F181C6AD95E7EFF5226BE5C4F4EDEE7A8C4A0500241EDBC363CB4C3AC12DD046EF0C840933740F48C63DE39C082FF4374C2D8453F2B813F397B822E90FD59B448262C00FDCAE73BCF90CAE164BAE33041CB809E7CAFCFDD658065B84B7C370CE3E08D505F7A2BA783A666EF74D8743336FA4DF4E20A1F8D58CD0B0EFF66FA77803F42169F51109A4CCFD008F36E23EDBAAA6ABF53B822C9EF356B79027CF28DF9E5D5D7CA360AEB407CF02CA2689F8131C78CE6DE7C5D8A2DC65A91DF7ACA7787ECD5145C5C791B7428F3F9CBB22F584EB564AF89263F5750CB37C8151F205B2FCA7DF746226D5AFE10177C8BC456452EA65D449E19B4253D6625D5C3349F3EC3BE554D4158DF219DE226AF379A422A8DAC91B97C64E19C120141D806767F7EE931D88E293EE8AE1EFD2766EE83174DE19BB645EE3455133B81E2270AC1C7CCEB037A50A5CCD540F00ABE27F05BBC29A2F10542CA0AE130D2B2A1464DB03C0B2510A9E7FB98AB24FD391CBAE0A112A66EAC05304127D1545BE6638B6D35606877719C3CD782FAE3FAAD1B89EB603750C7B5C3CE84F93FAC147346350C750CF2CA7EF9099D6725BD31172C37FAE60E07F33572CB843E67E8662D0DD55E424AFA9B1D57CBF9DDCDE447A3B8B604EFA253EBB2CEBE01521F0353C521F457F451CD93346D815D6BCBA87B3D2F96A22ED17C17B90BE3DDF7E04838C4F780BE2C96B781558B4A4999B3ADBAACA1229F22FF637CFC068CE8802F8684AAC32AE32BD09CD5C1D770900CC7C5FE8DF41E8110FAAD782C15C3CD637BA619A0037D7378C72CB0C95A35A9109BE11F8C4BF0D3BB80949A15C64A0D6F52A9B52A521D06DC749CD0E553418E127FB519BDA401F59E5AE517CBC2F538B6C32F9CE5C34088CFFFE03FDC7D36A7A912EDE8254B7EA46F1262973BE564089C44825437D8DBA98BE04CF7F6AB5D03C5C10AB51557F331D0B1B919B9643EFAD709080D2FF46BE83E081551F64ECD826DB09469179FF4B068CCA172D1E16750BD6D4C805146DC0221A555C81931A60206AF7CB485D2FB7FA9D7AACBC3E3729EB09979D2E683EA3ED8AD3B4BAAF4FE25F8B227568795563D3F2902A97375C521BA20F9C5E860DFAC83A0F0ED347588F250A44F01C93611405AEB04C6E75153F0A6E064E19D895DF7596C6A48A0BB3804A78937A45BCD05486314BAF72661349E8EB516FCFBAFFB31639716C5B88CAF4255E20EE90A6EF402E7A39C5CCDC5B196A99C5455639E9ECB788F94ABD7A711833B92DB9FD56B6412BF84C6BEE9505682EA300CEEDA496EF06CC477C272318F9883212794E9AD88177B65CECC1BA8474D3DE7656B61A3B832240578A4FF704CAA65E01A29F365C1ABB1DF23D61AD41C08B092CE870BA1103857DA37D8F5647A5D5ADA7BB1D9804C547C187BD1767258292514491CEC97BA41F48C6B581FE8E74520D0F0F6B0E44C9920290F68684D169253087540EBE733AE2465254BA04BEB703F3A309BE14B4F22EA63AA2DE8E674D2AD446F356D1CFE1207A5ED7C2D565CCD5CC1EF0EB1E7919C26E92B851F7478C83DE6CD21A3547CD4464A6B6B4DA6A8D8F736D16D818063D1FB95A8D6A46911FC564AA5CFB1CF76EF09D0C104648F92DB9B28816F560A24935923A945A1FB52AD9FAC6EA2E640A64F79F25693398B0A0E567518D950714A8AAF343A68A4EB1EE1F518ACBE99E05041CA505AD509F6EBCC68C84D85DC17E60F0240EC848A842F4A1ABF11371F46CE69D5B535FAB5634523E359AE14DD07749FBC6390EEB9E5330FC07926C971C719CD02AA565048CDA7E534365A3F39555F25BEC847C0FE5A76EF68F038FF552DA2722581CC14ECEDA1297942A1A67D0501815747C61517A9AC876DB662641F750A917EDFD8EA199D27E5D56855E5200791CD404D15B6EF6F5771234B0902C9DB5B033F260359F1A52E6646DBDE9E4F9876A7BF2C5FD7BA028BAA306FF9D4287DF88AA055C833ED8AC6A56D2C83AD69AD3FD6FFA96AB717444035D3B8DAE9D26D475767CAD452B607B3ECA6C573C38530DB071968B7E1DC26058827C57AD84A14B495FE082419255C495C5E13F5BC34D96CB498378CC16DBF6683D54836E12D44D76956A6B0CE788AF5282B9F06B5BAD30347A1D537EF864BB0C1496176B1B10118D02A56407609C0208E860B86A47C82B6FDE76CEC5AA70CF58B4B110D67E70E7B37DFE3A1D530183111E2AC6B30736BE4FFD6DBAEC5DCBB7194B9F0CC733F0A3A -MD = 93436CF55014B533DA3F890BD31879B4DCDD88FBD80343B6248C8D7C -Len = 33863 -Msg = F8141D4ACE703BD763677394CCF20F8C3AC2E518E6D17FE0356328B74B4714EA97FDB1B7CFCF07C217AB7D68F1C90682086B5F06A691B5B2FCAD188B2F7E93BA5AC895D9B1358627D58D59999E483073D12C8C674B80515C8E471048F2579254E142EF54879A9038AEA4A0B6063E739FBAA505D6C64B7BEC2482B62FF1A69E17DD5A8D4647EA4D6EB5BC439D68C1577252B06CE1FC085F8458DB14BD0362F129A8E569DFE24E9D591374BE7370264A9F4109AC8EF25EE1BCE1C3375AF306E8D62D2FD02AB62413FBEAD90E915E4354F071CF9008D855EBBF1306C6DCF310D6EE2703524D4331BADB138250B9411676BD729FE108B76CD707177CB94B3DF647BADFCF3882235FE0E5010BCEF9C241068C41A3AFE4E3F8F88230231359359C8048BDFA89FE2BB4A652365C3C0907CC34F3BB16EA1510F73D0FDC0B9EDEC403B95CF1F11F3DD913C281FF3F7959BE4F10494914465F92F8099D388C27DE4AB000F1989D91E43CA7A3C4F5193ECED8DD4BDBC091E2F6AD39E2996D0E7523A3C2AFE3314929A27854CF53AA8789E433C91B83989FF08D768A3048D6159205002AD82CA748CA5D58BE9BF92FC9CDC4F8B6DC5A771927F8484D2BB209FD9D0A81D8940600D5410DED726BEE238CC16B291608B12E4B0B31BA64800F556ABE3CCD6D37B6A76446066E8A15FAACE83A218F071F2DFE51809CB81B3F4689F81CE52D6EAF4BB2CAFE507BB62D256C3E6CA93F370B851BBF7DC534357EC171A5C19E7D472DAEB5AD2DBB593EBF9F8022E168173E3D5436F983C42CBC2765E7EC731011743B8A40F240921914A2CF49BB5FC1E9741A6FE782950A87FE5206EB7D0A5441CE6998A4EE91F7826DA6D11DDD92A8B604C9C8DCDA2AF2FEE601D7352A9B6A975C4698D376E2F40BE1886D5AA82C6A68C0E574CC19C6F10AAD6989DE853D2E9FFE661A3182EA47AEB02000514CDD395AE99769AFB9151A32D0F7223C46BCCD4DEB72C16D228DBE4BCD44AFC89A2F39CD3879C912CA159747B8C7B33730E9A4F649A1108B9CA05AF1F064B9E2A943CEF52F91B1120460BDCEA02B6DA8C038924A07996483D96C56B52CCDAD08669D39E9BFE8326A07D02416E37B4E19FD5E1DDD36B1DAAC6AF08DA3DB302B7B2768A4DCCAD0A0B04632219084EED2748F28C40E4A31A7B75E4711D080CAF5BEB95DE192BD0E143D1F4335DDEBA6C4A3FB5F82E0FB8C35D8ACC08020B52613D49E4AAEA6018DD2AE5FFD6EDA04D9C76A11D04F0229EB149A31D8089931C092EE86012CD949A9A065C929744FFE3CEFF31BA133285BEE2B833A6403C69B4D22BF4C367D3F29C674E25011E37E3259D0E023B943B1471CB1E01976E6F1205441429B1B48B97930059CC4C3323B599CA309304408DF1560EAFCA5D5BEE38C03EBC0EA5BDE618E5F50842B264AD11471A6B4A101B67E4EDC5E2F90EDDDC66276D902C21E77568BF037BD26FE87FB74033CE3FAE3A8D00292348DD079E1BD881D34C1425442538365052C7413D27836AD0440A802E74196D07EB1FCE07D07459E68F3A0B306FD33429800A6E6D9720CDD534D110A53FD3E441DB5B1CA44D2DC0B107857E961F2C7628DFEFED18ED54B45B4F23B339FA1D88B61968B8EAE44F79AD2C0CDEC7CA45F6663EFE0C5E7E6800271E6A58EFB9A69C513BDCA937D22149C405B39B7D2A67E58340A6DA561C2ED98142B3ED3F51D39A63B67C977D6693564C666987A9598F96A03DDA82109287220C0D31AD91665E27394B25DC6216C4C8B5B9BD36F62F6E9FCE6B2950B0A9B13EEB2508C9567543A1D4CFD5D9805A8D135D9AA1DEA84A2C2E76F7C0FD5D3E1978BD4D4BAEDAE2972579897B209533ADE37C4E2D4AC5544E1796CFBCEBEAF2B734AEEBC86EDF58FD3AF930491AAD6DD92B58D56F2DEB0A7E7EE232A8421611AC4EA7A38C7BC9F740A4C270A62737E8900236710508AFA0301D6020A6A30BAF727186A766B29F56D84AACBD853CB61D396322090311D408D7CC75029ABF7EB03ED06A0F38367C480F53396DFB6ECC6AE02DAD9788973A9693351BB06D60B5F11E1030D6ED94AA353A31977E1FFCF6471B178FB3EC7D518C059DD5B89BE6E4A12C1CC9A70F80B7E08C60161927CA745625622A84893372CA1B5CF65E79E2D112D6C2C21DF0C3BDF65ABE6438EB8116C7BA7A250F3A9CF44B62A113092EB3ADDCD89BA3976C9CA1F38AF85E5E937071FEE561B59BC85DFB073EE59431E6857F28D5D15F211018BAA40BB3D4A8EC4A03D61839F410379CBA529FDDEDBEAC92B96A414C1FAFA3F331A6F0E277B9AEEF88410C342086E0E6EA4EA568EC6AF3DD4802C8D7552594F611711D09BFF9D1663650F06D0B33BAB5019BA9BAEAEFD2E44340A498B3E62E3011FD48FEBABA2303C83AED4218CC8A7A880DD9F70E1C0D7F6355D1E25A95C9C7B8CD7D8B5284529D1F8E1A9F79E8EC7213D1F00E3F34E135B4FB35348B549746120E09D29AB5124B13BFA72E5205D574E2A01ECB3FDAEE783B2ADF20A489989611737D94AEA77F717F32D7069BFBE7DDA12B6AF6ECAE9992740B8321FE98639D77CD160F0450BDF8A051939FBAB98A3362BEED39BB3141D7221CF857CC8145E1953B25BCFD28D3A3F5DC0028DB935D4D8399859AD2AFF53D8AE9A0D1F20CA8D543D3D294497299D7785DB2D13D8F0B36A5D08D78844112508BD7BCFF852FD10A4745846CC52C9FBA9EA80A34AAEB4B0A55DF5B2FEDE36BC21997C6D8BD2987B867D33111E2826394BFDC94028018BEDC7CE96082075382A723F2BFAAB2FB91FB5DAC3B80674F0F191F23F7EB342207E1107378D6868C138CD32A8D74FCD2B8507E557EF7E6634EEC59FF42F7D23FFAA1EBF93FACA8F5E6625858E78D1E506525B5AA50350E40B35166D338B047E358E9ED05B039E7D0067557D622554CFFA77C91EC985405A9FB997B106D8880C8F92E26373AE3DAAC05F62E9B2DD4F9A2B088ADA44890908DF07D723800B4E37307B824A429C45263800BA61E0ECB55E19A8187915CA3DA161BD10B29C74B39017C2FCD5F982DCFABE5CA1B92B7EE2DF06AACD5EE8509DAD9DF6DF32EA9902AF0440C6A63EB0A0B799EDD1F5DC78CAB1D9940F03287DAACA80D22D46AAFAB1C9DB67A23B9A2657DE9C45040C749E95B88DCD73978101304D4BA041D69EC06A4F1C5EF6394F25212C6B13F0D641528C1BC1F76F97AFF8817138615C6A68D960EAB29F1001FACF7A45DD38EC2F524ADD8A17C6FBA6326A925E03357FBC32542AA2E1BC040298BE85D56B6515EB7C8E6B6CC75C31D741F44F625B3FD208701E7DCBF04FFAAEF117ED255488C4161C6780049F08817CFDCF39E7B7060624F7984B6210B1CBFE703465E04F4AB2546784DA99CDB22543CFBBDA909F280894BA44C3D55CBA2848C7B4F9B1B5B47041456F5ED711450326AC2EA2FAB64C067AF4B264428062FC4BA64CDECCBFE5895DB08E23502474EBD2ADAAEDDF0248D326A004B5B4C3B47F83B8601F9048920780DF15AAA0DA60FB1F605058344C3A293CD42DD09DE2F1BAAEE4B21A7154F0E4096EF5AC55A5F2B3A2F288E62C7FE2A707FA6D2BB9169F6EF0CCC5A09BB4BB7AD3E75BD6461B6BDB2853B880EBD416DAEB47EDA3A24BAE5B6E5A8F80236CDF4FA02AC442AA5E5BE281B38F4F569CDBBBDA1EEF8DD96ADF1F3607318969242C25BE89D4B293A56C1129FD74F15506B0598A1BADC7628AE01016E014FD3538BA681975151195077BE0F8F46753102F85B0A9B796DFF43D61073615B8E2ADEBC7081321A86957719EE9386379E3058ACA96D0FDDE1969531FAF4F21EE0D079F0879DBFE009D2B4E4D8968D38AC5DA01D99B57A4412F607FA6D7B69B754E207AB81CA22AE779DC58161DAAEEDCAF872FB205F9AE108E7A9F8A3F20B94A171BB5BBB4D9E174DECA6917075CEF9FFAAA33C73E7A784BF8B9B06DAEFA8378B0BDDCBE21C1278BCAE953D5BA311A3C98C5CEE75426C38AD04B07FE0CFCC9251349496B3F6AF4D8D1805AE7B927456999966224E5333F91968B0927234B9E0FF1982DB6CAAE8F912773960FAB3E47781D36B798B8C307B84BB78FC01F78E983935FA66703A8B43B16E37C98ABBE0C5411662C47EFD6A085825AE599F04A4F4280A2CA21D6778D8A9A8B20D9FB846A1B2CE7DA31179C8410312334D597B0EA3A3E41F187F0BE1797BD6DE1A730F7927B4774D21432EBD890DC406279ABA05EB41506C9F50B097CF8B45BDF8BA1A708653B52319659E2E7BA2A1EE6D3EF74EB04E5D43A83A7C430D1311F2B3A2C65BD8A6C5E53DB61CE15E1253DC5BE47B8A6DBB95F2F53F9805244F9C73F05270F750E4B4685B538994C330F82317EF552EB8B52B6033212430D4A01898AEA7909395789E7B167B84CD752579E48017131A0D62F208621CB7F33AF57F8DD47C90C2CCFACA392419760FADD37E3C1155BE2147F80958431B4C35B661B85276F1A096511B5F9A51470BBB2B2BBB8E2E6F6BC8B349B24F6BBCF2EECA2575FF48A421D3D066440B10B7D87440CF51FE2C7D6083C0BFF26EA114936C168C125B53E4BECF484A48EE447A3C1CF2E153F1203D2D036D942637C0B44C652E7B30641373BC42309C356FAF527CAAE8D679788726FC11560C779CF415E32554841FFD89BDC733B3A3AD388DA0940E7AEEF6BCA3567C110D0846B8FD918A129FEA83E8193E152AB965B42F05EB95A82F4D405E429550F5C3CFD1455327C4E790D0019CAA90A1798868CDD9B069277A7D685E55F56516578102DAE4C204872ECC7D460F29142C458E9D38FE34C84D5B143460EC878DDAFCCF9C1F199286A3FAD14D030F118262C7FCF1FAA9C421BDFE78CB9ECF9F75FADF6AB9335C46BE522BFB42A58DBD0D1641D2AF70B258F41106093BA6AB09A53F5A5369C7D1DE0207F954DA1EAB1CE19AB7A765B6D34E917E16C1254E2C5055CB6067F0148432EE412746B9661B6D49E9F36EB0CE4D439019AA87D85AFFE8115EC976E2A1F71CC6B5900145F05B9D689436B30BCE84760F827DE98034C0083E8E5D1A6DF55053BE151B25EA56FBEB16E9652846239ED2386C539769430BC541CAF01B68ECD84A7AF880C7A596106DB5A2DD7883197AC117FEEAF942ACCCB28C9DFBAAF217ACF18639B885604C43A6B2B4B43F930A026CD5F2A4F3DEA30FFB6C26723700494F913C727219303AC281CAE5819C632D5D4EF530DF7ED428CA4C59EDB1FF82AFB3C52DF25D9325CD73D3489F63EE066C18554854C28652D454ED83E7D64FDBFDE07314768463768F1AF997DF3DA904E6E3C097401EDA8FADE5F80A8683F581F632BA5B31762189E5E685DD640C86B8AE4251CBD5B21F2117F026193337D926C568A88C5D109EC79C82EE7CB164CC4537B9434ADB5594DB0508076BF99FAC6C0C5088FD41EA7C528CD2DDE2D0E278D072D854277774E5FD2C2D4BBF848BB378625FF87632BB6DFDD584E6C9E5D5ACF2899C3E5708C57CB2BBAD15FEE0FFBEDB7E4E41B2BBD0FE3E55F634A3B730BE6F8139D201445A2C2698CBAE0389CBEB652AEBDE6A3C6EDE63A1AFD013FEF38AA1DE3D88E779E4981772F7981E055DC2DA69A7BDF8B8B2FDD149B01694A2832FDA06F9ED00DE9D4D10E22F97E84273894587DAA0648B3845C86B526065D0DD1DB8D2546F993E95E41221F9E9228BFE8B8C7B0272694E3B8B55C7ED888DC542E8B0F3D5E703F7C2494701C99415AAEC5386D86673177E32DDCE2129EC5CBB7256C77900A6918CCBF9A848D3B3640F0463B548F2B566FF7614B6145267D4984CA59C5A190A85F32B037F5F656D07B524C222D118AB18B1DC53F2823428FC2105FD6535C0A8CB19F1C74CB93C74A83D1213DAE927F3CC856E942F01720CB3F7DFC5EF38D71FCB94C0806D58C3A23F231DD6FB05B7207CCFA25E2D4072443A89057D742B0CD6D926094D6DCEAD4EC74F8A338BF841B4DA942D5E9BBAE04559B35EA499AAA839EC46C800EEDFA66 -MD = E18FA4955322E5A6DBE1B57D4110C549513154DC1869EB40BAD9FEE4 -Len = 33926 -Msg = 7DB40A5E4474F213CF3B91F6FD312FF7E8D68B23E1901094D3CECF156F74D3F415D0D77BABA580B989CD402B551009B6E78013BE912AAB77DE2C7EEBA90431776515F0F74B3D459B9E29C4CAA54F2F6A580C9752E81F22EB5341D9330C3FDD80A33EAD5947426C9E09FE6248D2F80CA7B45A54BE3554F7E05F58721890645DEA24BEA33E2DA3E7FAEC6109A8D8DC69B6A41B5309969B98CB3756E43F6F0AB33670845EC4F3872E5F7C614EA01D6BACFF21E7A64412AEDF18A37AA952ABAF8FFB086BD7082CB9DF9BC7A5CC8054C205D8F01F08EE997FA9690B0283057F2008626AC8FF043E3F7F94F269436DCF3862DADD4839A2202893848327E24FEF37EA4C91CB1467E01ABAFC57B7B268B7E3D72F1ABB11B3A06814B51B48E0B0A2DC55E48E5DA2A65FCBF10362E0A075DCCB41A284CB38C946453A4A1E3FBC12017EDB69794FDC07E300463B6AFA372B323C5632B57628254093C88F25A63EE0540FB0A061F87E3DC20DF2CE046ACC4F3183023A801BF95F43D2F2AB7568C5BAF68B987F73C8F222D8413B7710008AFB12A7242C9B7D696D8D3577D664026A12BB5DAF2FC4F44FB81B00376386F60F95E1EFDC24919D5E139E8870655D1466794B60CCDCDB7F4DC549A825DB8822A3720CDDCFA1B259D003E1D6251B7530C12319F690F732E542963D2C4F6CF0EE4D79A22354886C27C974C613F43B0BBE861ABBB4EDCC8D867E7C22C1F9470B7A23DAF8E76DEACB0C5EBA0CAF7E319612FFDBF5B507A6EF527D98ED32A1699BF36CC3C5F5A78540259E116545EBE8CB8E3A377AB411D952B4FF9121241B630790B9733BF307A5DBDF5FEABABE02B5E44061DDB0D0D16F89739F75C0FDBFCB6768417EEE9E477E48AEAC851C02D7343F311E209A339F15C0ACA133A0D76495BF9DC4C90B50FF2D4FB1C08C5FF0785F1E93698D1DD800220236123C5320803D85E952C726C2EFE05286FBA36420754DF4A58926B3C14EC906C59C937D311F407A27A87C44C30EE7374B755C619D0A4C31EC007EB41C4C1E886ABEA354735EAE1165DD34B0D238BDEA6D162E60EE9E0B66A5FCE48BC2D5547A3518537C755731F0DEF4F8AF64F1348746ED1705A920F1C62DFC389ABF74917A8C038094F87AADC753BBE9310B25C8EFA990AF7B649EDBEF90C1CB53B6C55804FDDCD9584A265BB4DFCD54E35416A8C5E9FC4A848652BC9C7605A865465A0EBE7AA9C9F981AB7579792EEFAE25A1D7F7FED850C57171951CF67860700DB579E890B83BAB2576CCAE524D71B07DA996D33CF46699984DDF9FDDAAB47FE7A4B5D4E04CFADE4AB6751E449F09451BBDA355925372B318D4418A8BA57B195E6383EEFD1DDBDE77677466A7B59FD8978561F9BC8684D0B4C42BD80C42FE66D7F35E5EBEE78D41D3763E22A4B3CFD5BA67F960F94C035A072365876269A7BA8649CF5B915DC81FE45C21C8E5C11B806984A047FFD12438405FE2547777A6818A87A95F1AFE04C6B6CFC036E1774FB9B71FB8BA7914A440E89C34C8370EF23425D7AD939BDA286136447DF8F73EC1B3C8CF419639B7F610E845D572E56FABD11859759BF13FE1B8A2C08B96A73C7BC408A1C831DC828CD2D2B1D70DAAE625750B3E979BADE8158CB3CC7871608C3B8BCEC57769B2FAE6C931BA46B4739023317E0BA3D186B46028F94CA226E13DFE0530060A5D5DD81564AEC376752D73E20718D6782FEEEADE84D97D3D41072422ADC9CA27934F93900D9804836FBD701D14C3A83082B50EF6AFB3E6CBB6F1CBACCF73C1D940CB96104807EAE27FE22D87C0D11D646324BD396CDEE219C6222F0DF6A8AEA2F6026DC1B6DC98B3A1803A1808422131396A4BD01CE80A10D94B700ABF72B1AFF8BEB1F3BA5BDA4E643243762040174C93832A5227B3FABF159822729BCA1DFFFE13E50DD738D509E99757FDE461F6DE26CFB703EAB2933953C433121D96F7FF806B8BA9DD41304222A3712F268B970EBD4191990CDF0C8E934404CF94284257F7B9A7B9B8BC5CB7D238E28B8E73C367CEF27728F53A850D999CDA1C2B08238181F4D1C8A81BCBE7D89D2A4F3F7952DFD7F4E771A2C4E666DF5E26C431026BDD046DE4831EA5ECFE6466B27950E8DCFE79253CDE0AD9BBB4DC72C2B5B2481ACC935EDE795F2C4EF2E958A659482A52D71358BCAA23489F4A237A77DB368F1F7003FD3B25BA310A45F583CE50C98449E6DFAF4B10F859B259D7F887E11B77A5F8E2EBBD1975E7B8784A36FD3602744F65B54C99E7BE835A633833C0DCC62A531BCB5AC8E24E82175658A6844383AF5F07FCFD82BBEA0726F251074700B6EFE6ED487CD78F4B482BDDC67612AA1DDF60FE9C8D21C2F6489FBDF1712F9D7DDC7AB195DAEE328A31219FC9615E1FCDD80E8C03198AB888FDE1B9DB6B176C199DB769303E5B1099A6A044EFAA73EE6A5F75F351FC3587DEEDE20763D324C1B209A8119C2E331926232BBBB88AF4A73089FAB1431964BDB1E07D5427E20171ABECDC57958DA0BEFC2FA992CF51D06570AEA20708BC032FA1F1C10A10FF1E8723C202C2E0E0250A560EE8A1C73C343101664F1546BE735E7BBE73C3B705E1453D50D2F26267781D4785C3A4C95A74F5D8B05983C805ED46F8FD3C8192E1378DC5EE99CA3BFD0A32871ED2E798B7FFA644155BD0165320B2826DF7D0B0EEC03CC5AEDC8EA18FC6B1ADD5ECA4DBE76B0AA32FAC95DBDFB4D0273E912A8F18BACF606B7F5CCFECAB42137B3C12A8051D2D7BCC6ABFBFA6A1644EA44652CBE2B7948E417AC9B29C3CE9026AC5054F4DC683C7DA66BF4CA76CF21AE2F79A14CEBFA6A85837CF2029BD4028D8F32305C9757D418390D89CF428F76EC99B751EC38D1196A63F08C5F12AEF703A627EE1F8A90F058F365285DDB8B2A0F401FDE79339D4C7475AA591D8C437104F9698EB9149D7096BB08EADBF0ECEE45F9AD8406B5969728511C1428B21A7416C9EE389AE8AC81125134C3688E5BC69632EC81E2E26B1F929184606665E0E835490555B33D4284D49F20DFBF855C63A6CBC01DFD7C8D4AC9D7CA903AC26DC3BCB851F66BBD704211C3CA06324A2EF5B82B504C1CE81D21DA76FA891E64C8170AF43F8865E34090DE0C09E5983352A22514B0A7EE47CF91F119A5B6219BD6AC905C9E3D79841191D92AB94654D830D505FD533C0E8C09F9214BD1ECB23F97EDE7D6810F5FA329BFADF7CFC53735463FB0B12BD2BD9E015367EC5276DFBBF995D1370F04CA789A090841B109821123D1844B18C90E2DF297D22E75428453BDF77BE25A36225FA7D23A1FA7EDB8E3991AD45CDEECF2698CE4D1440CF0A23444FA1C27DE2C8F4BB6D29866BEAE1B4EA0A5D24C522A609C6D3C19C6084D18D969BC5056A06F594102722678313AF24CF0643E2446CEBD75CDB0AF533EB22E8834F956014EED86C2BE7D84ABA7A8A5BCC4161AFC2EF4ECF01D011C70D72FEE83D8773727DA8A68127D0A6BB829594A40C63AB41338E6E4717FC3D59B803184EB3916E81471BB580C582D6A0F8280D471D92F3258EC0AFFAB09CDB246BCE73C23551D0774BEE537B4277DAD85D9CC5D7631B8737084D67944B4782550623E41DACC5C0E53D70FFD2A3EC8F9D3DFD8C4A1F8AAE5CF882749D0BE591558AB5C4EE994762BF252B65668FCD40B6ADCC751CF1AFFC6880F654A8C272CEE24D4EAD935C1BE9F1D4CBF24DC53916D9A8C3E7A48F19BB0D9B49DC3142574E988289C8C49981BF146CA346387E66F335852353BDAE509B5C6C22C5724E7D268E3676FE2C0B418C2797327B7E5158005C676FC3B370EF4A35C34A08BFC390D9C86CC434E224C625D6FD27C78D517A9B583946893F4F39807B980E09031C84D8C067F106E80A34C436F5C251729491BF3D48A309E694F560B6E569EB1A107B12F12A610AD800949CA351D2AA88C6631490997D4626BC720074609A4C9F1FB6FD44AEEE3072812B29B49E50861419979FDCB10632792F6C8DEC362CE6E2A42251EE7D5112F907E5044F0F1BC39BABF2A6BC8B59FCCCBDC93D982AB3ADE39E6B108E3E563D1D0EB29A63ADB9A36484982FC45CB95BB06C439352546A976DC27FB1324349483076B9FB43590847484ED45E2415E68741E6D33ADA1A6D7EAA0312C8379BA4ED337F9F02889FF582F7433D6EA66084FD06DBD3A6BDE42AC686D91DA96F8758608A19CEFA54A72476CDAFC5E26AB8DFBEB5F37F4796228B8B90D1F14861B64BD712055094F382D9D128AAF1CC8E87835C43360731B3DA713278E484CFB45239D27D4C90BE72E8A0CAC0EB91E38B8CF86899B8622843A2DB4F96503379850018197C79B213660D5A582C2E2AC773B36A8CA9E8C238F2A3EE67196371F0E94F46AD3AD69D6413BECB2C87CFDA073B60EE6149A2DFC55D5051513AB215DBB2BD4022F553BD5577ADBFBA0AC44B7CF3263D859334D394C1401150A96D22968DE4323338AD8BB44362BB0E4AECC9048762549589375E46C47B70D0FAFC7F096A5533E96D1FC24E7619C1ED39B9FB30B37FBD063615C33C0F8909E5DEC2B4D03836FC061A5A5812DF77840C2B04E972BE5B5FD52D68189D3586DBAD7B313E512EDF09044BF2271BBA8CB35B9D383456DC291F569862455545A9CC6B05BC43847D9900136936F2975FB6E8B8D9499BEB68157823BCEA2267BA258D5B0290DE0BFB27711E2C9AB2CE810E8DE6EF1C829C9EB24D3B96AB1FAD6BB32039AC2EF87D2913A2A5DAA4D97742C19A994E09662E42AA576F86FE64342309392AE2D883B2CF131ADB0111921001141E2C8844C052D189754563343C81F5AE987D723F09942B1CFCE8FDF02EDC0705D2D32A4B28CB186F542112CE1321E32661BB71A2F756E6E0F4A12054928276657D81B990D5B801C4333F1F3D8CA9AA3F8237F0EAE8A879234AAEA635E7EC5AEC9F2058F1BDE966531D85925797EAF51C4CA679D0D10C85AB3972812DF9445C892B3347CFE624E14D4278BDB1480DA756CE4D92C4A12BFD5D3DA93A84D86FC5C150B42050B7A4728B26B17815979343A7E67E98B2B49D2057CBC0D3954341AF7A914F145191DBAEAC5F80A1FEF7F976452A76570D628757E87EE240A0884ED43B8551DF3A4CCD5771DE0B8921F803714C6E85B443192E3D7E8EB93EE907C6EFCF8736993216D750939FA1D6018DA5CA15F25C1D58B0ACBE150CD1E01BEEC80D643B5D267C41D6298BE1599B08A76A6489BF7C3A1E5C1114F403C2ACC2B9B98A21B0886B41954A4C489563EFE9A19410DD715404B334A2BD7B7D9E72D0114DA5C9AFAB6F00146AA9AD3679576A0043BD6C92063C9F0E97E84F9289F9D185E42F80747CE09AAC0106748E832110544A7750F27F3F7E399C6575D683C8F3CE6468B3F0FB68CFC3644AB907A176A193D480A69081F42A677C1979B113970A4FE8FB1937D109FEDEE3D8106F3608A6D1E24F163CC7F3B0D52445D77F72E6A29FCC1B2010AE0F9FDB99F50F3D2CC748CF0438F342D2D6FF1A5607A923C07DC2746F384A2478E8DFFC812C5DE014AD51C37AA62E8D8EBA209333FA6C420907523FC0C8C330DEA225FC83C87BF254F448121857AF3663D22063F4B3E015277B752EB6B3D2D9547F82E19A8D0148FB11BFAEFC078F502652F4BA9A2D6BB9BFCE898C50862803BBFFFFEAE7236C6CADDFAA18C4696422573B794842C328026394FDD4FE33EE68F6DD685BCDFFE37E2CE304F023096A966C48C6D6951FA0DA994E192184E6EA020887234B473BEDD460D18967723A5474277E2DA9A5E19E67F5E289F2CDDC7E87FED8F1C874901B408DB402E64B142F8CC5B8343A0F02BAFA186D270C6A429D1FD55F30BC2C840BE5C3ABB0D0FD38B5AD448A46031E2713BE096C0009F5FC5F536F3E4C6469CC73C65F3DE13CB9BEA455BC4773523EC3F012864CE90A072CFCF73EE60164E6140793ED0E96FAB6EBEC4D39A74BC81537BEF52C33E6FE7B8804CE419FAAF7884899C52D9D23A4CC3374B5EB62652EACBF5D4ED8 -MD = 57547CF146061BDA8DB2D27F43E1535A0D982C2215AD54DCDDEBB415 -Len = 33989 -Msg = 8505650BC2434B4FF51518F3ABC78C0995D2B1A7AA0CF102BEEE238BEA746964263A194E61DB2142E1F4E61B593A917BF10B32D2DFEB3D6C90F9F599991EE215D9DFDF2BF5CF0A0A3848F59E2C1DB07A2E57981771D9C9735BA8C0748A5D2F0C5389C419798C9CC255ADF6D3967DDFFADC90993CA08A2A16D184D394211F85F986AD4C65D35430C67F3A763F3A039116D41036811CA734F384D8FC4DD8E203AF667AFF9642B58C1ACA3CA94F514238C9F9AE4D5C5EE19DD22F8EABB1CB47BCC7B0A64FB5D34684871B2AEAAFE039A41CD92B86DE6A70E7F665B5989B4DCBAB48AA430E8EACA730352089E579385467AD3D0A750CB92DFC2F96FE5377C94AC21AB3D21D77727C9AA20B88071F619842CF37869C5DD1A150105C36C8B3C5FE5FF73770BE90FFFC14A18EC2EA6DA84EF268324F5CBFC4B69E2B7C5AA67DEC621EC253B3FC413DADFF1787A3BF965DB32A0E2438B36F178CD1CE4E59338A2A8A47D8B4B47F67BD2E7370218549A48EB06FCD99692ED242CADCDC8EA3C12E3341BB90C8A51C5F2E258141225633F61891B7E0228CA9C89F37C624BE3991E67F2BA9C3094B311DAAEEFF29A2A673ADCBDADE177EEB11F1B7D2F7FA087F1128CD4F6B23D6A2CDA6FEAE869AB345F724FE9D05CE5E7972F093F5D19FABF67B597A69850D2065629F4B4DE898E9C10898F4FF0CE17B3EF3147DA534CCBF8A2B665EE3778EC890A2F7C71DB88FBFB1F9796594218FA2A799F0100E5F27185D515FF6E5E92D8245FA1AF9BF2321F47676246AB7360BB4B1CCCB436F8F87C569C35B3ADD292E104B130C953834341B83389D287035C8CCD1AE0789E5834A234441E4A1E69CB4CB55DEBB01CBA189AE8CED8A884C894AA97087C95D4716E93F3361140833F2FB45A38FD7B945E53B06F3439D09D09FB3C61E46ABC42F02CCE62549884C76D5F0FCA1FC625E63576E63A4E4FF259190773ECB87E1659869E91B04A8B5283A92C2FFDE19B299F276BC6134B4841E980D7ED27B4A513E505C4025FD14591133DA452C08F79BEEA953753542D3AE532CD2AE06F4592364D45004248AF2436A8E0B7C2F008093F5FC30B9E4A3EE0D08FA7A3ABD002DACF8D9EA14C88505E306F019A7CFD6E6B1CBA899766F7118F93B7EF0ADC81121515AF84AEB0C1A9DFE140CF5F09066EEA0E6424DB0219E4DAA1E485A87FC2AD65876E4BEE9CF71BF73D1585FACB04B03A1ADC76D6C200EC5DF056E12C9BD1DFEDDB53C8F8C46D61A373EA849D15A9E56CBFA129994EA38BB7CA0FDC8C9177C0F3343B1E0765AE7F9C593C4D48F22FC35E2B9DBC87AF7409AF239DFF09046110684A9A7345396183B3984B47D605570BCD99079AFD589D041D579FF02D8CC369A861BC6CF9E6DD274E7A7D825248C4A0ECA98346016B620725F0B90B8D10BF1177E4328213BD5D51798527331CF92656409EF28B8258E7C2ED48A3C3AAF76FDB490709F0CB204228A6041B1B9487E87CD6FBFFE004AEED2B3176ED5C6FEA263A8A2B45BA92874DA491873B8823358B1BA8F01346E7690C4FFD09A56CCC34F894C628698B508C647D269D4E96F05ADAB1A4660788C20774BD60798E9506A9BA72682F337716A7B1D8C449DD5DDD15F06B44AB50AE83A94B20D21001C01F979008D343BCBADEFB2E0D52CA3EABA814AFF91C1528B2117D34A6FDF07C969B71AD701A2B49F3EC227FEC9294C4B4E44D71922EAE376BB1EFA358F4A78782725F2059DC7F9432D2DBCD8280033919F672C75860516C81B06111E2552DD50FD3E264800C15D19550220A9D08BF5FE6CEDFBF987FF29A4701D419A816A9FF86268FDFB658B40D36A45EE9C31823069A658533BFB0D94C0E5F06B11C02DBD6B9219B665F5BB3E64E0861ADADEAAFD1795B5774C5C9DB1E2E8D8129D66989C3F3697A12D7F9C4F17F3902BF567A6272735A993DB34F4EB4E713F0CDE03C39CF67C0C21B775AA98B98E70B18C3E779291430781FA5D273F4A0F4D3C702F05EDE88FE2BE7FA81E3BD599F11239BFB4BA9AF8253F803A4B9E113073803F2BAB6A27C0E4BC833C423720D5D6F3BE05B735646CAF5455DBA5E477FA37841EFF3BAA739AF8F5041865AB88A45B3F476FD990BCB4D4BFE7955BF3E56DBBE79C7B68BD85F89E4AF019ABE20C333AB6BF540ED272EDE7606B56FA2EE6D049E5EC2940E70874FD76B05BD87E9066E7B855FAC43BF003B47D8DC4F3CE274DE5466CC2F21FDCE0C1DDED6FF4A5957B282C31B696C38DA9D530757A6B78D9E75BCBAF62766B3ABF3FCAE240FB5F402066CF7F40043A08D76395B55EF3912F23BCC31DBB7187E68F86378FA65A36F8538E6A7D3BF5089FC02A0B2A3D2CCEB5D2C5B0B664621998C5A506F8A20F32113C99E878BACE2A318D2EDF20B0F604843792B4AA29E9EC014C285F5E0EEDABFA8C8612DDC50C1F6B46E9AC6A97AF1A603892C2AF6AACE74447A84B1994A775C17D2534ECC20BF22EE7E496B38CB1EA0D00E17ADB41ACB7524C14ED0C2C459E0DA4472A17794C1386CB361427DDB310BAB95E6F46F9171680C234E7A1CB381B67316E5767B448FFC8894C7B60A8A5BE8DDA0D66BCF4DBC19CCC81348FE38D59A91DF079F2C94B29FA4A1053B4FA012123FE136C16A9F3FD83DF637B1F937BA7077D7C587586B47A1D0267B2562D716D0C0E68664B9496F9B8413DFFF074DCCC6166EAED877CF182DD6493133F1041D3F2A4F4487C10F67EB062150FAADD8963A02D1F7FC9B5199A18EC9005CC8119B6CEEE29AF5D7B85A782B02D37472D0A6CAE64BE24A14F87182CD16AB17C39F5DA8601E67C73482B1361A18FC99DD533AC3F3C7C09B3BF6E7C840238F4821E8D5330A4C32F6ECD4BC9D1B5C92C4DF6B46A48DF2553EA4934C4F476C119E6AFF54313B7C5B117CA32CC8709145C3EB57DEC64EA622F147DF78ED1919AC1A217C3C9EF088C1421D434747588F9CC2ABB65488BA9314CB01732219419129D9178FC7264228D76E5151E892E60ED2DDE4B277D5C4A6ACE6FCB9773A12E6567F20C6D05D8D5E664FDA82E3BDF91C4C2CFC0584BA60ED76E22CDE100E9FFD1A431D46F8C7BFD134379C16FEBB9C44CA1A1BDEA5CF589E694DBA0D58683E32B2DECE1A4A1A7EFA063087F795825E8537EFCDE9B5F56221643208D0405E4D85866DB311F5A3C75ECE020E6CB9C259F22072FE8692E684AFBAFE12B1D6F4A3419EFAA53B2FE8B377B648457E333AEB64C621141B901C32285C51AFF1DF536955B484E61F51556B4733B3DC4FE7D2D25AD5B6F785E9EB4E0683131B2B289C31CC0FD66D880A135FD357E03D575675AA33D516A8FCCA2894F18896C4B3668B8039E91D5520E9DF173C7C5B758D129F58C7AB8DE2534B01E98FE20A8FBBB4DF3C0EC73592D4749EA35740033B728F63B3906B84E8AF9F1DA08F6A1B2039F6B658F326C2EF5106F4752EDF7C2C9EB2A7F84C3127A09BDFC89D0DD697703967AC51E92445062C1627DA1DF4BD59BCE1B7FB9BECDCD3FF0BE514D431A1DD5D3D64D66434E3D7676B3F23A545E5980A7E706CFCE8D8A8B48EF84C7EAD7832E39E157EC8B726AC00363FD1754AC19678379E8CDFA8991B3F9553C9495BACCB1A7E39345DD9D097AF336BF34FE3CE6B777601FA89AFBFE3DD96F73C7303764B3DA8AFF7410CCAF495FAD207618CD76E199786A7505E3D7F3C0018465D62194132118C6DB27F0DBB190EB00D25523D2992154AA581926F3F7ACA24CE52F1531B2156830BBA84BE6AA68909AEC77A5680138145B7209810F06283DA6A57BD51EB6F316F41DFD672301447396561E429781F35B8527DAAFE6E10DBE630D71348FE68DF693A26A766B280025F3D0A110A8B036A5DC6D876BC12AF5636389A2D955454B315ACC4CCF90A5642F0CBEF26B5D5FCBF9C8AA6B338EAAF54C17DE94AF69B8A04AA789C93DB8E399C782D1CB57481BE5B8C67AEDD3D92077437F6324867549B2AA3FB465010C65B03667D43E49D47D1191722830F894494E2EBD787418C65ECCFB4B1F646FBCB7F3BF788CE2E81892F0F33CF15F04AF16A0689BE6315945CF3C2D6F580EFAD2DA51F80A15F5D1FB0695263648924345063A1D2985A68081026EDE0B68F39C45268853FF67D746604E255E3116562CCA26B3915F5BD05CA0E6B542902216A640743B75CBCE41A93660A25B1741DFD996FE2C903E75CC57F58A449492B3F2B5FBD742D7B194091955244FC36FF23F575BEAEB0C96487298AA48DCA7180FD3730767EDD9C6A715DD4D3FE5573ADBA218733C1795782194728B21827AFB34A2B7557912183080E86EAEC22D1AC17A9EA9C821F07200246FD9E0FBF8E3E969067C5CAEE9F2A2E366914B08CF7C7FA07E35D1593DCF6CBDCF4AD1531D10DB3ED31E8084A884BD467902F424A1FFF36547C29D68AD27B7CB27460BF0024E9A62FB2C7EFDC3EED7F39B8840998807278312FA08E94B357AE2DE05A5EE3D7243B3053DA887B2EC821DC6BF65AE36A19F12DBC34BE229A6EE8D159F194057A3BBEA22D163A2754F6EBD85FFEE9A2467602B431C25E35AFA85A7968E62780FBD5A5A62376B4DF72D552041AC7833B9378B72FDEDA9A1FE4249F369D3A8820E0AD8877B5151891F530B0380A30A7328A8E8590D619753BEC19F76579D2BA9B3D5FA945C60E9F81E1531C164AE4A5D29DBAB2FB09B1395BE69C489E69B1AD8A22A164623C921C834368E54B22017B4A5F3CBEBA3E050FD9124BA1A58E5E70FC4182A3D5255A69D8AF7F1616025292044B4E69F33C4C624DD7FE68563DD11F369DA01EB6C7E2A8FCA5B3D2F92E9C7525CC32AE95CCEFEF92FCF105C751D3E000ABF407EA6EB7493249C60144C2C4F01E7197A383435F8091E2667C8639CFE48AABC0234EC307661541A4A72A945D410D2824B2CFECAC7ECE47859650525EF9AE20058067E77E64473FA4CFB38B94B6058C52B60CB085AF320ABE98CD176440D1675CF2782F0D76BD4478B50E1015DE4B42CA325B69615AEBAAF4FFD5E22AED17044F3CBA479CBCE28858DA64A6CA6D90A02AE83BB44B730F5C63F2D66CF54BB4D2F31A391BB1808AD97B5DB491C3EF0CACB73477D49541F1E58627E80DD56ADE7374FBD116EE3C172C94A80E1231CE6405EF03BB3585E45275B4C878D7245E7A87046A83DB7EBDA06A12CCCCF8B74980EEFE202D8C4057D86D80C13D1B6B9399B958DF7261ABE64BEA2C18FB2F6B32A4DDE758095552F6B3B38D0A218DD25DCB674C2F2CE3C6A6D78A9AC4AFAA1EFBB23EDCE41393734BFC2FE2D4BC24691C46A27293309E1C65054697D48B8F0C352F001079EBA60A50ECCBF81860EE878DE8B706783CE8E94348A3DD393AD0F61818F6D23C1DCB81D0F9D00B38A346C1E2EE6CC7C6C6D1981339439A09BF6A4EC20E5DFF190F059BF0575F6A29D2754BAC0B4360ED157BAA267FE513B8FD473FC76038A19AE833A79254A66D155563B6326D33754C668E24B866C1E4ED08D63D61013B175C9299B28754D76CFDBBC84712916553A985FB280956A7438C3B2619D779886A77EF22CDAE257C3FAFCE8D108B0D038A8FA36AD6EA553AD8637B4C16BD59ED3048C79BED10D5E8AF58A5D92EC609ED8F382CD77F3BBB520DA0E1EA7798BC3AE3F7B6FE202B020BE311D165246BDC5158E1818B47C038A010205D722398A66813A21A2B1CAF699F1EC7650ECB50387264EA27923CCA215ACBECEB68726301825978C4987A0B0BDFEDF875722B6AC6F04575F339B2C797354E2337F7EE4A50455A748C078E4BF2F5B11E58E016F4C092CC97E289E0C71A4BF12E46C5CBE125F45745F455072C63F2A219C42CFE63E9D3107167B6117343F088E7ABAC3401E312FDF2E74C2E07215445933DADF404B3494B4A56CB3B3CE328184458819C30C86B9AF8FDB61F93299AF99617369C7C05E80B68C5AC1EBEC750C56CF043F28617454F4BF3583DD9278226561C977B4FB14C3CF8B2B885A5D5E192A69415E59F662959FEDD234817CF0D56EA42B70 -MD = E8FC959FAF7E33B7CD269EAB49877EEA922F552EED074D29E0E055F2 -Len = 34052 -Msg = 2BA8E777E91F7BB2923CD6E358E9FB039BBA08EFC510A595CF80976F4227B345BCB673776C90208BCB2019BDD1796B35BC01D45031FE54F6A5A7EF3EAD9E16EB3684051164A8B332335028D03D4849889BCEE532BAE0A205349DB78AD78A5B6DD757F3231B0A08FB0A83B6C797A2D268F905EFBA0053D575B32716F5C38565E698187A0C4D502745081E0AB2D7DA50227E7B0D3DA5951097D9BA08CE37259589B4B7FD9BE2D84A935FCB113D306FE0B551085B72D49D1A61E6318E42562E40029C8CC85C1C7B0446C9A985E7EE002BD3BBCC39A3D0E880D3D909B5912583C25F31F279528B8F2872A139AF5C25118639ADAD512EF786197677AAA4E6719671093606B86604A73ED4A8F3F0CEAA475678130792E75899E4C88B76FE1161C5834A69ED3D935482DB6F9C37082972F1576A1A1DCD5C48CCCFDA0B7FF4BB4E781B3873139A81AEAEB3B51F5BE66E4DE3C4F9260C3ADFA92720066115398C02A6A1A200CEF1465D6F343EF9D9B46C8744787B11EFE26A0EDC21BDA124C3552881D9B68D85E4D5EB5F2579EB638C9839F89638426DC1194D929ADBF4530B7FB94B2E95C49382EE5453072F10EA3200B151AE3B0ED776DECBE4EB01C980F18F6317B869A6A19D3A8A152E78CF452BE7BA1A35BCB39AC6CE64F4123584B1432B686FAF5A0A34FA86BFDC43209B97908806DBFA1B7B5AA2D243A4DAB21032178686A5F4424D6FEAA253314DE707C76BA3F339228B0CA452A50C202FDBC1B4E008D0CF8B414BDC59BD170D4BFA815F612D63DE43C53D1869345C1C4E9EB73B7027CD4541C2AB3DA0E27174A897E4E02199929F45A2E31DC7D8981FDE14D5E8A37B5C46B3A92723E7023228615E15C91EF566438046B029712888ED1A5459E7EFD47D96F31368FF8BA65F25A79D8B2D353C5CBA2F974745C7C9424DF742C6535EBD367DDC990827878D4446CA17155DB14673518AC3983F91B5F3AB32778D97EAD8436F6DBE2CFEF68CF7DFC4E63FCCD4802DF92420F7B2E3907443FD0C248C36CEC84C81B517092F95DCC044D3D3E036B005C1925312E2AE38640C89CC685E9E9E745D5C6E6DBEA26FEBBE556ECA836BD5F986450EF875FFEEA215E522D426F6B1F7D5EBC6E5FA6D5F0AE7C154907CC7CE670C96716D551E4C574FE088B51A75BD2AF4625DA98164485BA3D10B75CCD179C07BE931A581CE4CD1F02326BB9FFC046D59129C0FE82AA8F9F89B38FDF8E22CEE54EB09C9B42381EF4A38A5593B59C032554514689CC1CE73C6970AC08690A21AA1C68111BE3139CDE21308D958F98BB09C406E8CEB73A664D6133C4C185BEE5B88B1E3EE09973171B9789B57EF7303AE6DEFFF943EFCD6D13A8A23D170DDAF7113C5996E1C14E8B07057E3C865307C24B5F2E72C7169A3FA2E4DED5E1F62B6FE6F83C722CE47134DA3E9F94FD0341DBF07D73EE81778FBEA21E02FB97CA7998A3989432387ECE89AF5D093B369F0F8AAF6A09C43F3623C9B2073943B2855F542FF65BEBF1E14CC15FBDCB97C2CE1FBE88918904655ABBC2587DC3F9C7D1BB417F685B3ACB04F7B994DCE4E5C638F4CE22A0D037E6D81E3688EA829C2D0329C37069A501137389ACF9B9DF65F03430BDD56BD8FC33278E8A9410E96843DA17AD984C9FC891073C44D2931E9AF9672C439B9A0BE1743CD17947381D0029F6B9FA9D06F7BBB3D62D3A9BCE14D992F8A928FC42EFAC06F37453BBAF24F56396A1E006B0FCF7037315F9C20DFFF64689684D408A673BBAA80474278918001D9B66ED5229EE2EE5A83A76C4AC7C70B3B92DAAD16DED82AD3D9F40B130BEE520A7E005BF4E8AB93AF7DCAD8A287040951025C5852644FAF460A41CC3C45C184BF21013AD27B68B11986A253E310C9E770A40D4C79876443CC06BC972F99CB5569F634FE68F69F7F7E6091E6B75F0F4B6E9B6758AB5077C9A53F63D6A7108B657D645413B8377AA5D201A34F429828D2D06F5967A4573F30A6D4675C24DC2A917F848E827287C8678269D53B449DB54695BE5EA5D5A31AF08766B097E873F733621A2E377E56E534F50ED332638F458E0F9DEEE428982FFA198F50C610259BCADAF43F5A76F82B437B0093D004D27FB067D0C8C6D6C9E263020EE338CB18BEFF71FD1D8C6D063667041859BED1253D92D00D393701CCBC43F88BD9F1DBE6B50295460CE62AEF6064440DC7469B770C9EA38C5BB2BD8131E35D6ED521DA8591AC114B9986CB754F8287EFB05EA827E46BAB3FCB557D5B18421C45D2DB65470CB639194C7164D4228ED0EA2732EDF8EE425609737BAA60942C0469250DC9E8D2536EC0150107C98D866DBC313F731BBB28D385F099B039FB4985DC7D9813B2174E39D560E367D31A763AB1752D9842BA96520B6F634F18DD55A34719E3020840FD5805C069EB8BB26941A3D8B92AB73EF3F104F9D3B73EFD0CED008DFB9587BDE817BF9AFE03EE917C81F5908F186494AFC412CC618B4F90E7D1A82B2FDC8231B17E027EF08CB77D30E09B515A72A9C67C554CA1AF852B6F17A9E25E478E429890AD4A1BB04FABD80D4ABD4F69022B7DFE8A2027D617B6FD7CED7534B4DC35C99180B098DA24A0595E821F3E46A76B450126229C18DF33BF044E2C2805A68048F1BC57DE0E6E9A341E19264A419D05EF091E191BAF41C22A3A5B3C6915846F8F250A637D879585F6BF8902B2CB549866C81ADB46F69927FCF731D62ED8D83A43E865B0BC72C7F10859B4CD076219937E1CA7B81C00C3596E4E9492B91BEC88ED81948A2E558D8866556BACF7F9DCC83404072E240A1E912B3E75EBD42D49221479951AA9073C5E136FEFA9B41034EB0E60D903848746D5F1C76238EFB3C0B7722DA8FE5DF94B2CEC1C1A810D9E057AA8394572507967ED66E49D5C2A9BCD3761581D1C6D2092F1BF4F0836AE44AD4F6C240E1D28AB13FC77C86A4258C3660B73A0600C1D0A77717D945FD49774313296A974B00F1735DC12AB7BA4082B2494A9C06F4CE374B29974695C368BF9251BBE33914FB05C83870C7FAF21C3E31E94F95DF500D6390395F2579B4502F811A2069C5FEB35816811278FF0A1179266581C5E50ACB68544D6AD4DCC37676F2CDB78F6979D3D0EBADFB74019588CE0563293E37D91DCB7D97ADDA77DCBB568433057D6FFD029FD96FC5D50969B6BF918972ACB98167D0BCBCDBCC5519DAC2796AA63A38931C53EA517EBC7880525933B221522B0A87AFE9385001E9BBDEA2172C519F8F3CF6AE1320AA9790F0F99BD0E803A824582CF804B778E7FBD3B040320FCD5514FAA1A9367CE7B2089FBBEF41B7E27B9347E06168030F891D9AACECCBE5D8859D369C93D1CDE679F7CBFA0319AD431CA30ABA5572AD83561A7884A37100E81B9FF07A5C3FE9325266A76396A1D1EF4476D0D762678B6E4ED0233480B94A54812FB4A78E3FDA1AB9B7E13A2458F4AFB88492AF3F5D3BCDA016A15EF53B45FCB917A95BDE052E559FF3ADB451F6BECF010A6744000CAA5C0AAE2D3FF3BC3226AF825DCC9064A84447CEF38BCC36C61D08F5DE4697D8CF7DDE866623787D0FD8274439E03D0C86A909FC34A138109C1F222BD2BDA39201AD7E5C99FFF0EC86788D5DE06B05281D436D8A298D9581F9D71A94CFB56955490DB1682ECC96CA2B2A4FB9E0E7FB413C7E3075B27932A02B6752D83CDBB3D7A672A8E2418E04CD0288B2FCD4AC2B33DE45D292A6041C17E87EF6DB28378A5D282954C247701CD57D848E4850159209CA560732D779190519165085E13778558A84F813C016200ECD7EFED7C24187655D09D10680396409EC1CF1C45E82E35D39116B271DD06D3C7D48E7D7B9618A65370EE67EF290A88DDD7E56BC871D918A35EFBB56279DA0A8BCF0F19C929ED42D4DAF99C8B3763A3A8A8785FED0DB594FFE73EBB6C0154C1D1A299FF8BF766B6F54EA263067BD74D175352EC1019D7789B206B14BA22AA2DAE520B3360431A9F993621D873C29D9E17831F8D5B792C6A3070470AE09CD613DF15C36C07EAC4633AC06A97974FC26293F3E035DB608BD5AD648009DAAEEC63F82B40C91EB3463A5F72DB6BCA1E98C99303D703BC5C2EE48C00C5AF4C185B7D2E6D326466C83F2A8B09DAF5A5A163146F897E1173647E48995B727199FCF851500DF0E8DC902CE142C2ACE032D009A5A8C20EB8BE3D72C1AB00124768684AB9C33CDC624C0377E1D03FC1A3F95B152350349C123B23C4484ADB708C93DF74C5CA7BAE9ED244BCD1ACC45AEFCF48C8B310AE46C890BA297AE40F40580F02068BDDCAD874C7F802C67D3D68708CB5D474C62E784160DCA977120C827EE599CFC94899610ABB53ED9CFE770BF69819A0DEBB6DBD79CBDCD96102FD14527C42C72265F46E494BFE42687E5F536246418CA1CEC8967B5A5816E04A1DC7775A102B08193B885B13F9B45A5B16A96ADA573DDFD1E90AA939E0DA75526B59ADF3D1DE33216E40C2321CDAAA815C0B3DC4D092A9C7299082902442C1CE2A1B756D3A2F776DA29149A5BE9C79A5C5646BC430122142C6D56BB343B61F4C870396DC1C91E31C6224CF85F63B3A36B9C267A9F8EEDA8080A9FCE6C2F070A019A053DBB2548853C1F3FA392BA88B80DC689B75FFA3E90A3234C726BB56FE5D8A1026FEBB1DDCED501A71106B653B40779DC228D07CB23EC82A3A05588CA3382D6A4A576DBE044A677C6498E1774010977F3F7D8B7FB8BFFF626F8AD40C99B30129136FC1518B9B81E376369119043BC784C8F3C0A6A8D8ACAFC82E6F226AAB72260E6CE7F16DD6F68958CFD47C4DA0D509BF15C13267B5D1423A458A48129041C9B6CD722B6A48F61F5AF81A6CCBFFB380F0855E6757B10BDE90860F5E478C1B5A4364952128B7DBA02ED0183947BD805B4AD468E624DAFEC2E6EE99BB7420554D6991DE7CF224EAE1B054F14A7501242F09D34CC4B4E41334BFC42C62CC9A8D0975D12A96A29D6B4D6CCAE84EAABEBAF386F5862796080F212EDDFECA4980B9E5FFCADF759CD252C72A6A3FF8C8B9A4869E792729FC7FCCB0DBF659E8E7CC89731CC2FA4AC394B2138482A59BE94168B821591633EF7A7573F077AE9F4B5FC50491FDEED542AE777A90F3A7B8F726FAF3CE02502579EE88CE94FDE0BDFAD2A13427060B907894180DD098D0FAF174EF59AB27A140AF814EF713AA06F4D012753F88BA426BB5BC086C2A3A7E1F06631ACD605436B0F5CEBA4CD8301E49B4ECE0AFE0F474E3BD84341F548B1341A3491F6B8B2FEDCFC14729927ED184712F6D5A3ACFAE4AFA9E0E40AD113852F459EB47A1C1274ABBFB48243986EC77C12481E737931D52075CB4E2F05F600E7F870C4E0AA25BAFEC75EA2D9C8F42DD9B2A14D49D493C110986709A41DD2C87D450D32C609E3A647CB4B067D4A89751381C02D3D37580ACC46737C72A48FF71BE159696E4473AFF22B55114400570260543F85C00B094113C12130019523DDC7387A955B8411D7AC18270BAFC5CF3C54688BA60AD0EC2A4D5535577143B694F6B53BCC67C68F958D3CB2A993A5AB3DD426504F08354EA1A6E7FCBA782CB6ADDDC5A96C249A3181A42A0A89544F9396FEF90CF1778900E51E783B1574B842D7C5704132F843EBD4866E22731455FF1E26D1CAFF77460708DBCB67A662C71ADE967427CB583794EA7D74C6322045CADF7AF3D49C6F28FB108FB88E39B3802F2B78A271C190A5549132A822CEC2D0B98A913203F39A455D70C4492FDEE48D32832FC880AFF06B7D3E0CEDED59EE26D0DDD9D3618B2D2DA298B8142749F52C0006A50BD533E1646E589CE342B80D98B7975936931209DAF3EDE38F185B0D94F8EEEC2801FD4BFB2D4835B938DF1CD5FDAAAAA05EC66731303C707872864EBB7B61118B4A784502A00144020C32BE6856CB243369FE49E2C1EF6B34837F1B103A8D4B19C55BD5D5E64DD821274438DC0DCE3A03DA288A57F0EC0FB1C6CE95A995510949797319511D6D8BD5BDBC601ACA8882959A50A6976C69B3BA5E2F6BBEEAFEF9DFCC4D61E30 -MD = 6906A9062EE148A244CD06A59F629ACDCA5DDBA7DE8036C2CC555DE1 -Len = 34115 -Msg = 08A26FB15A55074FEA4D1590D88601181C2B231393B138EC02021A9C65A1ACFB2E7C1FD5FA967EA64B74BDFDDFEAFF869088B0994B378B450D4CBB3EDFD55C00A60486E2A60DD72866FF69D487B9749F0BB83853ED414DD5CD771864FA5F04D7934C5A335F96157C273D96042814A799E844973A9117259F8AB669A53B278D316CDD8B5C13177D57DC5EFDB15F5DD0B557A20654833AB8166A53F26277879775863C3B25956C9F2B6A1F8A8BD009C3ED4E1511C692011DD2BCCD69CD69244E641FED6582163554CDD56129380967F857BD7E9EE769D94048F6F6B9723AC7A00F44B10F2613A118F3C20EA426F55CF4AA56CC8EAF3586F58C4BA54CD8E6957B8ACA0AD0535F01716E6765301EF257EECDD1BFF56902EFE6A15A80CEEB6AD8FF9E8F58C4B260BA00D12444BDE845F4A665C7C9DC5DE1D9F13CC038C99962CCD85CAA980143E2E0AE893B3F26ECE9219E982DFF3E1E6B9E14517A5E6CD3D5CD01AA6B6349BE110A87EAA9200CF3E2CFCD439DFBCC4FB90FD659ECBA9B14BD340BC22FB603798E608879756D71999C6DEF708F673D33AF660C7406A9D9422FA0031AA4B378425CE9BA444343E72216D4D144B83319CA83C58AF46B936B46B92A083C6B148F734A6E5D7627FDCD54292558ADB52BDE8B4AB94DAD8BA756084A7631CFF1A8F811D0F2160501DA9819F69EAC309AF3E7D04169F429E46151C7EE64A9F53BBB5A6113908F49FC2FB10BC130A4D12341250A48346A81E9BBE4FDFF911E811331FC242BF9FB97EB7F8B6025D17D486CEA5CA28DD8D8821A77A1C23284BD6DB75AF547C05DC38A6476E952FDB0D70556B0968F055188C58322AC4602DA6FE05451DE82304BB2DFFDAC82DC0F99DB2F2A49DAA9A3AFE7673CC36B4DFDE25DEF9D31C4B93662E58A0EF5E134272F62EB5C81C6F9D084F1550545795DFCE7028789575BC0FF2FDAB7467D73C21A85D19C88DA9133D6C6A6DDDE0F74AA3061F1818C8B75B5CF8719107346545EB9CA3223762BA996CB1CE8C40C0ECE53D7F81DCF79C6616B11CCAF2CF89C47382BFBDD05BF5DDAC2DEC98CB56486B1B288493287DFDDEBAF6CF70A116522671CEE9CAED6F65E349C64F84CA5D79D77759035E99627E60C2E3DFC68588AF17C547E92C701C3467F334AA36B2821257AE1A97E2F6588C817A9C721709B94A9F6B06DAC6765FF48421D5C88673A56705F1B3584480331877D4C3C98CD3930B3CEE18CFFA711FE9D433F0F8EDFE9AB5C209D799C5E7BBDDEE1538DEFA074A9742D49AD989B9716E087E8AF1F265AFBC9123B9D25871952219E045AF11F4F05D9B9B7CE7E6E55B738E2A1A3A0AC99A0C8A27D86FB3477A43367434772C36C5BBBF93CC58D83F2F3BF12B48E2B9465C2EC15069DF7906B9A7B63DB5728E6008A6F438B83F84B3DB0D8D7CE1FEA099481891162843213263588B77100AE5604D2A6801BBBBCA78958F9F1291F8D4CE7A9D0F6E05CC7F3E3272117C44F3810771E3C1031448A6BF3C93023112FCB576FE740FCEB7E06C3454C9929267C496CD88021A6ECFBA9914DDB2724E151AD2431D5EC125D5322512A858659843DA7659ECC0E10E61E6E236561866992E368ACB4C1D0372B98C3B96733748446B39E7A165DEC816977B63F2C13F70C0951336F7BD1C8BF79954828CA0AE2645C2ACD3631C4580D5B7C009798E37349EE63F5D7B6BC4DC139C5E5433424CF36E0743180AF4D799015060A71DF494031CD61036C91EDEFCD76D38F9112C51C5BCF86B3B2C37EBF2E463B0B9644F77ECBE9730A97DE8158A325D503DF025C6B9E145219A26B0B4E09C67EC5D093E173E115FB21770E8F1DD5144C2ABC3A7144A12A5E83E7EEA93C80C81148F80472C25C248B83C7EA0A23E615C9D73C21CFA32547CCB57AC52A3E30E3E067DF76F7E8A597C5C84EF07E2ECC8B3115ABB31AE979B8BF34C17B1839D1B40E00C1FB614B56934EB76CEE11BD5448AB1F2E558C2082C3942E713243D91976B43B3A89C53D8E3E42E48A752E6837E51EE37DC596983E3D2AF46E3923F2C6957E9CDB7D6B32C4315739DFDD3D1270069E2BC80173231E0FCA9317C4B020CEA8A17D3D7B481233A65B70D669DC08CE5CAE4B3F8A751EFEEDE8B3D35ED0494C8BFC9B722FAB17116287E1F96C7709EA6A6D11C2E672C07DFDAED1A2B9395986A6F5698BBC33564DB8E5B73EA6E448095B68372E59085D4ED26C93FC4ADFE4490E4721C704488F34F54BAFF90C905B57B0E90D5310BC0B347F49BE4180FA27927E4DB6EAB98B0EBAE179C6CB926FD78E3724EDDFA0F06B8C3716C8DEF420B9FA13B760D24926873A132491435E3DB820471B3A905312DBA6E734AFA4032A51C387FFC438CB2E5CD0D4DBDC80026864C73307C10E41166C2A5E4026C1B17BA1504D695CF1171E299E59A9280123294BB3524192D9749693F23C617FE94162E35AA2E43F0C50849B106E6C2C456B2C58E617E51CAC6794F2B91BC2931D41EE00C32F2FF64AAE1D51CD04D4F752D217B3F45934B3EDBB9F75048F22FF826A0BDC56443EC51F37CA177421642B697DE8F96627A93EF90EDE1EFAFEB0F6B9708E6FDD69E5771ECA1E212E532A8660FEEF500A27DD5B613D6AB2AB6BCD408D3E05EA70FB050B1CAEB54237BBCEC3F9D5CDA0CCEC02FE591204ED95D7BC802B8F6A4895121C5B6AFCE297C6AB2E33AD7352EA1CFC297F6FB34809A817F04FAC22B11011CCA899B18591CE66E5A41A448B5C68C4FB5DC6A66D8ED7E93B7BD35193A1BD37399F441F1D5C26047BD9B6106E9BDD9D6A4ABF8E9E7A87D9349EDCB8E317D9D3DE4C3610FBD24778F2007979FAC5FDB2E79F7D5657A4C1A2E3D26279D105A407E32919BE3F2F3106AD14CBDC7393960C365FCAF12322C875E4746FB5500ABD693415A7AB0AAF2CD21D7A4FFB76375837389611749A7E4A4EA61030EA298910FBCF0D23F54C262DE480795E064781B6AA88A665C4FE9A8D07EC9575E06FB1C2D97D699E84902A5FCE57237C99DCD186D70678A82313046F148EA0F4537E611A0874EAE7CE5E17E4992224F05EEB0C9D838925F55492600479A1C4F92831B442E1643327ECE199861BF46DB30D7F0C26781A291D3D5A08D03CD5584E300A332BEB6EDA8A6AA435AD9C82C6C5E9FBBF84E68B12C96783B32C17309EE00F4D9F21A282AFF51DEB91629DB056E3476A1A6F1F3E3848A28174E95FD0E43E0E81ED1CA45310500FA0207C68697AA927BBD73A2394118B1AD1FDD09A8AD358B453588FE6325BEEF5FE1730678CF395D387ABDC8FC9F42BA29945009AFBBE04ECACB5FBC222C1FCBCFDC8734DD3DD31F25E96297D2287BA1E14BF5B2BE34D54F51CBA5B6FFF4483C098191E168CE66B8651DAAF3CAD1346AD6E8B56808892C1E1E7F1B1A9F8FA0CA8801B58E4155B6B852EC5A089044A24EB952184DC2AE9CE37757D569B46C61D07DB220CD3B499E6386A5DA47AED612A1D8424EA0DD61E9CD8BDCB6102A2344706F0DF35EB097E95F31D4644F00E15D7041282952394D0215DF8E2B967C3FD2D0B1882B61BC2E15F1F92AF4AEB512C85489317636F58B9CC40AFC0737019769FB6CEC4B1D5B09DE3E676A0DB1701D024D64930971A3E865652A26BFB0CD3C1D0F811C1EC62AD0D8F3C84ECC3E423A0A302F36F28E38C64664C99A7EA43AA736B02F7A8D80C1CA7DE4401805B9754B9CEA58B1AAFBA168F2A273C86BF39DE577A1943EA0959FD9F9EB45EF47D38B331BEA8EFF411774FA89BA287AE30FF4F2FBB4DB6DBDA42B2167B2EE0FF3AF6C42926C3CA2FE9643C175B2B1EBF0B137DA61CD3ACC3EA0981A1E6EA1C1FAD4B4CA4D46A2B6DCD8C9ADE64FC5B524C8627DF61AB79F29F91E16E53FAF4C8E4270B1A28B4D6C5CD0F9063D50AD611E42FDC076F3F6A500A8B91FBD7C624C32A4360233142741FFBD41C0751D21D4550B09A144E0D53BA825A8D12B850E12448FBE8EA663CC21E8F446C7938F7B0A788B9CA8C237D6F922259A109EEC5C7E3A7CE3930105712C53B500CF680F6EC9D22AC880CD08FC4BFE932D8D18D6592FCE7A5D80810734C8B7AACCEF49B1BB07AC95481B6D0E9F11E4AD7AA41D479AFBB4B356416127F9FEE5815CB7935B19206ABC9D8778DECE340B1D5C9FAD79D5240550E6648B569FE763DB7AE215B061BE35333107FBEA795A592484EE646482C4743B688677A46745D98280DA1443491DE63A245F873F8D7276C988230F8F9DF646BA89546A285D8EB8F4BBFB98585FEAF89146517A057FE0E3E7565B02BFC2BDBDD7188CF9A3EAC162E78A630322A78BB1364781B8DAAC8A7A7F5DDFFA937EDC8744123EFFC387E311E62FFF98D62C1CD8E9A9521061E7A0FB306C9AEB0967AC065632DA5631F9FF12AD3511D07EFF2E104E9C55DA4043441159BA176FA2F9B24AAFBFEA5F0671D5E6875E775C5D147A8760118BC370FFEBE0E4BDF26637D8AB01B0A9F6DB7249C296656EEABAC92A2F4D22EB5EE4927D1D90E3D479DF910F72F44E1C5DA6CB70A944E81CCF758D7EE5625A7095FB3A64162DD10ED8E38D8BE9EDD9235075EE330DCDF66CFEEE0706D5F3586B3A8A5931438C7FD70202DACE19926387E229B926D2C1CEDE82C4358B0210EBDD3BFDE8FE06FFB1658444E0B98A297CB32568943A1B8692133DC7CDF7648FD1B4B63633E8BA72D1FCA10E8B59D491516EF05E68B3F8A6EDCC37E08E688556EF93190D45B4EC1212AAFA507BD38D67A24963B69F05C19CE903EACCB64624407291A36684979DE9979A5E0111ACEC9DE91F41404C88B1D48657716D704B54CE9301ABDAB82676D49A7BA38FEA72F3CD50982F00ABB32D579E82FF06D90C9B46A37311BDA8CDA864F53C1AD8DE01F477DE54ED4BDFAD47AB86A54100094A42F4F61B9F089FE8E644A2E78CD0E7477C67CCE3192E7A25125E2EED9EBAAB755E89880810EB7039CEE70137C9C0870439F30CF0BA1FDC6286BA04DD77B1043E07E1BEB1530D2A1F26C32D331A0110D0A25B8EC8AC44C44AA0D40034D50D7EBCCE484C6AFC17539304EB1F6A7158DEFDB6384D45D4D303D3C0891A57B7E791B671C78148BB5044B72B98F539D27510D79B2F2C6169A11145589FB43F3C80EF7F32AAB56550CAAA573374A6D890F0678713CCCC1531C869D81CB3525C6E8D7DD8C1615322AA4A82A4E8CF91C9771F21FA220FD6078652582705D3603C1DCF0084C706F03284EEABE7947A828BA18D82F00955D28462B72FAC1FEF517BC4AFFE9AB7D358D8F28DAD851CC9B405D3D7B057871ABE9766F533CEF0BFB9E573C12BD099B74FA368A6D602F5A3E63639055B4759BA067B9A3C3118D9BD2F8060900209DFC133E6B830D2FE4BF6B79741BADBBEEF401844643E18CB35CE3C853C9D7753D0CEA714672E4C9EF549505D5869E8092715B28EBB20A5163E87813FF5E97589A8AE04A5CB44F60C6710EFB76DB776328B87E747F8FF3883B8F099B0FA4BF8A1B1A401223868D072AFB6E86B7D4A3EBE7929AE438E4C7B4A6B4133C59553453FFC83D8EE157B5E8CC077A1D264C0D85E0547BA4EA381ED3134E9FDBDA8A32ABDD0CCB5A8180863EC9E087428B095C535C094E75C1BF9F582724F413C3958BBD16DD56D67E0CC93158CFFA08FEEFF3101F8D34DC6BBD5E39AA507EBE25A447F468AD63FCA31124CF5690D95B038CBEE69042DE776EC3E63983B765300C6279A0876AF5EC9D9D34052891F4D0B7FC7F69349134C204B6139666B8098110133D01138B7903A65105B67254AF1D3A8FFA5A7D938A2801BF0738851BAD197A2C8B765D53252CE4770A2F4D071111A3405DCD6417E986A76564110A17C9D3C57BB5E206ED0F5346FF436DCA36A001851363B01A44431D1B9B24A89C14A0223A918304D760EC53557405275C1F08E941DFE480630DD5FFFB8EA96CD9A4AF7933B0BC32B59F9F6B31B3039CFA1733D454C8F28A2CB5E14F97730FB0D11E3892C3DF9C7E4457921FBBB9C5E7C97623C54E51B3D1CF2B8D6E27940F81644ABCC0D79640832040 -MD = A6FF91DB792D8ABC76B8630E2626205909EF192716497C5D2B191AA6 -Len = 34178 -Msg = 3222F8DA4D086ECCEFDA193FFE17930FDB8EC21E8064398D71DC1130672AFA1E48E1DC2491BC7F86476B7E99DD80EA5294EC87C9466C304E16DF683E4CE0A035DFBD3726CF1AEA558EFE0CFABB47B550B85971DDF1B21D62F80A777CA2CC41EB4BE2825E27FA606D59FB0B640A1CE783C5740B1DDEBC9C3DD4D56A701D7B88E935D6F483F9804B9DFC04E141037F2B9A2FFBACA94BE1ABC8F79B3F4DF112E800EC950B6C10FEB7C4E80E64F2812910F00F776DDFF1BCAD70363DA37E7B74E8EE700A6C96C467471B60437915B7B72E93B5B62BFEB734E29F6A45188654DBF1EF9F2EF26E72964F31E9937F784B3F8C1E6A67E9E82F7BA0C5C0F95301FE80FBC6419319C2432F986548CDDF695B1971AD0E47A6C09B51750B1371A452549DAB4E532CF94A2F662114324E4C90142F45A7E9D4544EAD3551DD9502E04ED8C0ED4DBAF67BD79AA9B0EAA7BE45CB43948814922A5E535259F8AB3F791ABFA2C2CE5CEABB2706576D03B333498DF1133F6373C4CCF8482413980C61B63AEBEC4BB49D96CF817689E46D59512129021AAFE73E86CD7D31D3731127A58643E06D3CE029F5B3EB69F9F3DFAEA03B07B815E14D23498B4989BB2635C075779B07DB968B1B19CEA3D1916A6137235CB1FD61E395700A70D50A46D4921635D14DD18ECE47268650F597D4F72FFBA0EA2EF9E0E7FB6FA743A7A0DE7EC7B349B35520483512638A9DDE3777798054E8B33E70A359107D101C1E327AABDD11F5305195FE74DE3FA6102B95855D6F9D1972860B548FC54795276AE410167CF6B543C70BEA6CF78E3C7F51C376DC8A01B3053D081704AED9CADA455828D064A3CDB4D5F5276EB44DB0FBADB362710CB35D572B538A23ED9D5B1B9267B5C0AE595508A66075B049C781670A1FEEF6D3D5D1CBF1EAB7694613E2B33EAFEA30421C50EEFB1C3822657024DC4A79A128F9EEF37B45C918F617978B51D52BFAFB3C425733080B63B525E3739B1B3E4740A7C2DDEE69657FBE1E47145A2D7660FACFA137DE8D51A096847A34B0C1D6A891FAE024F0C99D1444969A72C986A78DE2E2A2C281A6ABFB3E61E69713412C703BEEE8FD8C34A66A152BCD8F5FC13FD049DF4506D87806E242E30AC016905091F66EFF535EB04EEFA6C8D40661FA383DC5A726153D3A3903123AA10770A6DADFD2558D67453FD04F7D1FE6A17896221771DA60B91E5DB5892804D4AB6B8CDAF8AE384C94703C2C245587F613E1C9FCDE79E2A81FC588AB5DC78D5BF1CCCC491B72748D2B7A914222379CEBD46A0CAF733AC768BA90BF3A464DBC9275D88570A0C234DCA62A4A1B4556447008A067BF1EB142E7D3585291A80469C4797B8D335D1B26BAECD13EFBD95CADEF0FD6B5337DF537F290249F5B6CCE92E2FFFE462831FAA547EB80D6368156959DBEBBD41DDE5B323B202A88D553D344F4C7967FAC42DFB204B2FF2DB55D04B8DE92072F86A8129A8BF480A661B0E27D96EC947F35EA259AB7B564EC1C81CCBB6ECED3E1F8C913E5470D9EA530B538E05C44AF8DAF87D95AD22297D48A218740E90B27FA44DC3EE27E5AAE970752007C7995DFDFAD475B3EA969F08F8E0E152CE74D0267FA1436181C21C97A8EFA053402FB1ACEB2E3BA43C33005E37FA0E122C1D43F2C30C99500F6B16ADFB77F7933A1492693A1943FAF2CFD42A10710535C1F4E9A61702CDE37191BC772A64F12701829BC26E82229C184B11E9F80B81DFDBD5D8C45CFE7565455182F26DA38B8C9A0F71CDC8E34CBBF6D48ABE0C36B04FF3A79A6B19371EDE9A73CACE4CD50A18042EB3433A1CDC15F41C93607A479AE475EFD9C8F9A60E241AACE6C130B93B3CAF44E7A01D70AF45D4BD85E3B926F5ED08A430E5F8DAA1BE77C361DD540995F63179E1F8E3B7B33DCC323BB5CA1E687CF9FE1889833B41E82CCD47CC6484A449CEC41FAB9D92DD83197AD8647E773956A5E4F9CA3C4316A6D9C0702722D236957E662E7621C703674960AE07E2A3703A3A544E9930CB938EEB859D7D792DB111FB6BD2383D7C4918294CEF537815F332DA7DABC51BDB232580AC05CD269ADD28DB84996A35DCFC3FCA06674387C0F512122ED838EC9628C337913FEC03E1AB21B094A0DFFDF1DB6561B54BE0AECC30532D03536AFA6425BA8DF8AAD2BB5AB7043B508171A099DDA7304236F39C90C2141E53237B254D51CA49D28217BC5DA151645FD890F956FC52055D5E45F56A1875F96BFC395723ED5BB09A7736ADE9D545214D5155346A79BA5467477759C5C930D37A2DB9387AEFC9877C35368B8BD4D0B4E3A2B4C3008D79D0BBB6BB434B3EEBFC1B45D17CF3E3235231BF86B5FFD610BB1ED341B6B397F91B49AEABA3909ED7DD9267B283D61D433C8398268D8D16868D32F696CB47D317347A75FDE0E760CAB17C52CB7F8C4DA1017E0494C98742233939E1D20E6BE82C654F5874B0FA2AED397EBE8914067BF939FB15F92A2CAFCAF4672060D4199FFF9C1F299F103CA582771355A2C39CCAAFAAC3DB02A8DA2C0633658D37AB8CBB30441870DE1373EE142F294FA2823DF7ABD9EA1372F2EEC9A0D07AB09A3E6E08DB071AFB32409A1A84B7FF95F314857952094E9E02CBF382573858E1934777799D59FF42AB99D05AEBE5C0D973CAE058A49B862C7958CB3D79A88024A674CE0413EA26014098CD0006A3F09AFE772567FC3011121BFF9E630DB3D06707E55945483704E81631AB233CFC09BB03596AF1A565B4D5D47B4FA8ACF4F405EC11F40475FE2B193F2072BDF582B81D9AFE1CFA61359BE17175A6D39D74A0F2FFBE6CBE7217B124BB3F6588F2F931C284F833F970245814ED220D3051CD169A1E272DBEDE5BC252E2367BB05C2EBEC4F81636103BD0553B12E30F8037C303988B384E89F6388E9E480BAECB0CF0B96E636C7803990EB757731DAE2AD658F362CDEFCD7C5D9EF321D86D14E46FCED854F0A84A8A475FFE49BF66DBF121DDCA8506F344DC14B250F0B84A48515AF3ED2464925B9076F4E3BB50042748CF1A8F87CE785A921B314943A98E1EDE991E445F94F4E8CDF4EDD648EB9D0A9D98F41588DDA3DFA5B5CDA26C1FB5E6FA6593806795CFCF724A6A19D1736A1C9F6959D484AAF8DFF69EA3C560B1086E14F218B87627CD353CD796D845FB30EF09B99E2E6B31F4AEC490E88DD3A81A69F2F3C132E335D4BAAE13226BBB205B1051AE8BBF5F480AD59B94CB0F58B32A1446846C8DD987D328AF5105257AF8B9E52695021DEDED3C354D6672EDDE73B58057BC9AAFA9FD66776E40F0EBD4808F72FF6118DEF28A9E1C5ECF0F32866D6AFBC5943C3838140758F2DC55D8E91D42C3C2FD4DD9402F98922FFD2C84AB9176B4FF0BF3B4CAF63C12107B90313E0CF9E415EFAEA8C05A6B285DB8D5243AF46BA64AC3C9AFC74EADD87667D26CA2E63808EBBD94C8B878B745DC61556E9D975642DAA0310EF1164DE7D1DEDD4B4B072486A25E338D05DEA0868726624820E4161A64935D570EB0ADD40A21F73E1C0131CBC75D2A2BD5409B95646C723B0C3758C4C2CBB86E3DD03F1100C63AC6E325F0FBC37FF4AC8638F7F3C4BC18411C8FC2DCD4A4870758C20FED7B12EF87A9B1D718BD93BB2EC358747E750785C6E224E5ADC2B4BCDC5880E882A4C2E78F0A3ADBFF4CDC6801CC1F70A62C78283379D5A1726C5F90B2E2AD65F3731AF359FFFD516AD185F955E84611920DAA1C53DF99F6839545D9C94D3F3A490E6B466751CB985AE0C4144DE87E210CD1A3AF93622FF8B9A32940724D0CA2B34DA36CCA7F8036B1648DA425CCC5264C8855E93DF950D7C71DB60004CC026BDEC5F4FD1D4FA42BA3032C33531242FE2771E9B0D5F8385AB9FF02CC3261970228AFB7F65454797A9E1A83F48F3838C0EFACCAC808DAE5480A8344D2CBE1C2D4F331952E502B54878A2FA7CE806147A19468117B43D3EC6F30A0230635672C86A2FB9CA03A1B7C3DEFC9FCD5CA84FB6D361A35887D210D29B8AF48A8F5E836F09809EEE4C6F1EB776F872D33C650887C7FF8DF6FD89F2DD3C055DD5EC0230872326699C93FF0ABB3208DDBA49A2E4799C85232B73978E9DF9C1B1FF0259522DA933EF8E51BEA11C899CA9BD635B5EDE4271FEE16CF2BDFD28F0F0F280765167D59C11103629AB9C2A18EB5D9B143DFD4051769A267716067607497806AF4103A10CF9C4674678CE56E2E5B78C03BB17124BDC51D6B275C9B567EC6EB3EA75F6A6D7D35501B5B2D73A9B7D5B6A05D54C398BE365E7E0629E4167284D59A50F5E23DA86897DA775042C76DAF308B612B3C8D801E6D97DF9CC38E0146E15982EEBF12D018FC1C1CA2D26BC621818E3C43A3E1E2725EC669E411E0430C29E19DAE97BD0AA08F0D1F205319CCC4D0D0A689BCEB2EB747DDB0BA5C7C8DF3ADA84A0D68BADEA5AC3C75A1B9DDC10894AA0D8A125E7296C49E378B5DE72EF5CDC94A1217441798A3C32AC183AD6E19E34A618B8C29C42C715B0F0B0A407C230F1748DB9480895635DB96B48CB7FF60F0D4D1D81356ED4836D87A0268AC3DF4E7DAFECEACC314C4D03A64CC274FA80EF2934D028A6DE66E37E350126018EDD9591DEF6FD5F27B6B0DA7B7C219A3817FB9F506BA4ADA584296EF1149182F0E22E1978A4AA3268023BB0805534830E4D2F319C3C7A03E2D5E4A2DFA928AE029B242C9E258F2F76F686545DC663486E2F2A03E725EBBC3ACA88CC00B5F50779C018A0D21817A288F055449E0032508F8AE2271CD91CB5AAD23A68A9AC72DB35D9E3D1993CAAE5B8641991B55CD3397ED9FF649CF48F616D6B8E15A9192F34029688B30F3FE6B04DD9255EB22D3405A9A3E2C7BD5444C280D5E3339CED6F646AA7C0BEF97F1CBA88A44212BCF1D0597992DA7E742F5A37BAE3D29DA11C0869FBDD889301E1837FC97FA35092CEB342A8C881FFF8DD417689F7C5582EE8F47BABAB4AF9FF2C6F0B598BB4704944D2876D77D85A24ACDF395BE18EA5EB6329F0DFA5FBC8737D0F36D0D86F11BF9381EEB651709C8EDC53DCD07B198C8356AEBE509441D9CB76C89CD2417811FFA4A74E1BC4F1AA1A997BA7BB22E0B7EF48B515983251ADC04C0F5D9AB5CD645EDB4575479AC858012E93E8F642C77B4606ED8F2494BAAFEEAC4E48A8EB782700271267592BC74DB93BCC6FE224AABA9DDB9C61647D90758BC6EBD67E6E855C44B5DDCE5DA6ABD8F7E3A96573D349701B8F7D182C26114959B93DB6BEBCA2F716C15D356661BC5D7B56F98358DDAD3A44216486C2B8359931E0927598099B60FEFBC3A006692BFE70DB3487426C063A7CA1426B8C74BD9E303F6312AA7A962ACD2B0398F2E248BDC194379826B193EEA07A047CD0BB37192665D6E067C98DCFD9082BB79D644F01AECED4B816CE1B0563C42044D91FDDFD824F7E6B51B9BA132AA0E1B00750435C1B2951AFE05B1C2546C79BC6132D0DB64423E22CB3C1897370A477E979E5F50FCABE8F415077DC0E2449C6302BF9117F138E28CC33FC68E9E96A5A5906D8B61A30FD565AADDF5F0BD112777D620CCBCBB2979E059B60F3B00A53C286008F5BFDEAFC676ED0F5B305E1E6D416B8D32BDF50796BA369047FAE49E753FE8142ED4FC4375FC4F7ABD2174110FD26E8CBC49F903E3B0B246169127F6339A81402D9F86D9686F549180D806EC592C99C11B740DE8453A7EFF517A968F863291641F0B44F4D8DC3035DF1B57D8547D527B987C06F137E6D422AEAA29E705CA07435FED9678C3A535FE1F3C4138FA9D6FC11D97F197331B8689E19D2AC384C9750B7A201EB753AF12A411D1B7FE3AF6A0D28DBFE0449A3AE113666F2D16A3FBF890242C4DE2B26AD04CC718F619E8A2D1E6F29287261C5D858E45D9459B6802F1B3169D54D7D7770EA4BFB802A699E8CC619A4CCE984F977FAEDF4213B15ED298698B6704DCD22530025C42B5DD5F8308D4BCF9D6C3D3577A85125D1A123DF4C694B20B93267AD718BA4AF03100ED0DA1DF3AD2F3444162126A56B516BDEBCC380C6B4D311329CD973DE57B7E81C74ADC7363DAA40 -MD = 576CC32094769749C436530F2C803731E0E3554D3A4FCA4D01C2CAEE -Len = 34241 -Msg = 0218C8A13FC33D77350FA1F41CAE4447332083233B7EC49D11668473B50E2CA18CF2F945C3F9BBFB11CB52935AF8CFCB9837C655FB04C5C3980853F888F581818EBE708C44488EE0FF0F395B5DD626BD0422BF0DD0E2A66836EE5A2AB15281FEA726A8EBFF541B9F2F3DB3677A279E106EB09C542BE2D875CE6926972136270D50AAF056CAE76629E03E21693CFA267A27B8F79365BF01BC4A5CF8EC745FBCF4532CCA719211C608E742C1D416DFBDB24E8C866800A981FA3E7FC79CACDE73F5A925763867A82CA6F7FA327F6270225A223F1D70CFA7279BB5AB5CE096AE7442BDA7019162384DD5D6F6620331D1AB25F13FCC22F9EEBCCD753186DF2F4B4F1D4D22056F2D267364713599D79CEA52DA6A438874198C7089D52761B009829939C5C9B2F46530ED16C5081E6DDED3D42DF07190D833E8B88FA8576218D2056D71DFF547B79E9890B0B19B2DABA25A4D416165F0DAAF237399A9488FB83146DF8A327728FDAB520AD845F85F3825154FB2C73A00BE5CA7133221556A87359C1EE8307E8B4EAA8D62D8242A61E1677B28D4286978AE32460F489831C058A809CA5CECC1E1F3503487935F84873C4E53E8169F6EB44FC8604B7EB98700B68EA485EEA23D48937C808A9B244AA73499482E1512BDB151513812023AFAA848BFBF0FA353AFBA3840324438CED61C99BCE722CCC5E8A439B3FAD42A2DCF9A27D109ED3D13CA3225F3EBD6E85EDAA217B31D42E577B639373685A156350C521C41B87AB53A42B33E324A742EA3D33A3950ECC21DE6727B225DFC9321A95FCD950772DBE0CFBAFF1C623888B39AF0E8E5CD38FFE025F8B02852D91A231005329E6D4435F0413EC4E0E44C371322D92D4D510DA1163210EFCBB7DF2C2E16ADE71B75EA912264C393257BFB05CD6820AB11A2BE7B18476395B5C1E6422D7DD8ADA4F5C61FF2C99E95DF1D54B5E9933291DF5DC099DB54813932913BE2D092BD75CFF36579CE31C1393B9F018EA5E95C0C163FD40F755B185C2FA0BE15DCE5D643C2CED0714D15E21509A47E07D1E4374DE80DEA0BD111D7441B4377652518296C2283CC4056D157E4D4DAE148539E270D9140EE1F69ED7B8A145536EF1ED0C667B3D01C4468DA7CF0EBB5F4AF4771C4304CD56414D597E64C71C36E6325C1C35F6DC0DF4737F5FFFC8FCD47C8B06103E548459097D00E23CDBAE10975E90B93C5B1221D4AE221E4DD828B05949177547C593B0F2E964E201EA64B9DBC858EB45F2A0BCB168639C04D4A916241F6F88728E1013BC44E95A9FAD410642C15ADCE0D7D7528D691EA3771CFC07E25ECC1DEE69F86943264DEA0EC40BAE54E31C4E78A8EC0F6CD4EF6147714E7DCBB719C027873754185F93733F2661FB926B31B48DF68D505B7254094343EF443A162CD7223026D7EF5102CC5377E07462A2DADA527D0A5F0AB51BFCD6AB38B17C468101A151E948F2084F307C4B2F1A5A0F502B44311288714E22DD1DFF6C99E44961D28EB5EBE834CDDD4156357AE4C42E104DAC302F2DFC77F1D3C29B31938473677D67D93B8E3428ACBD8A758C46FCC882A3686BFC01FB550A8E8ADFA5E3DB9904F90A6D06E29EA7B4E6D3816CD3EB8C837659DB5DA3B282FB24917072B010066C0D3D614EDD3DA4BDED9169074491B659C6C60E621B8C7D88DFA9A7B4F0F5FF3DBD08DEA259E9C511B223A1C4F4A835F32C124EB52726394A40667798EB2B5796EE8A10D55E2518EA0F75B3E2E334405B4BB69A7BA9FAABFABB546822BB16D4D2428FAFA1B7108FC51A1D073A0E1034234A2C4CD56D60FC63884D92C35BB72E1304D31DF91D5391CC0CE2A44FCFAEF7939A418ED093112C1B94FB63D32FDD1C42BB03CEC21F9899B598BF82BDF0DC7185A2683EC7D00EB2B28BB9C63E43921339A7F5A27590DDBAED92679DBE76D530941549BF9E7898B5290268900FF925E72D511969CF1BBEB1D3421FDB695AFBC17C3DEC4C6962E7F0B7FC37F52E6BCBC5307C8EBB115F562FFD64BD4667312948F349A8405720ACB5696D1C76B288A032085C914B95C5C911A36B228004E3A8234FE5CFB049A733060B92C82950C335715AC4AB7FCB0364E53393D77D61F88798F54964EBF1A81D813EA5B3FE98BE0910B66FA2A5010411A804B6B191A3C3098A94F2969C8C166C3363E6A1A694D0B3ED415518297E41C219F3F2793F9BDA1B9A969EE964AE3F3B9E08D7FA23291E38CBEB33E450C8B9EFDBB6404486F1ED8861D4D98D3C7EAABFEA4DE115530D87BC79224034E1345AB2D23805B069CDF38E2949234E5817F34B88ED660E243ED74FB63518B402B100620A8ECF8CD64F68C9C0A36F8508416F36452C39E4E319540DF77869497182009EE6571DBE1FB3C2619F538D390904B3CC7E5B0A76AE8173FF18DD9C9FC0C2DA98DBC00640C18EEC24DEA6BDED3C6D15E2C0C1AB896B0149E51DCC58780624889C0BDBA60285252959C28BBC72C6D814EDD7A0FFD4B6FC717A5A93E3C2FA520EB59AB0673E4F13689DC8D5C992002231D0E0093AF90BAF3ED7652FC1C65CFF93C704F9F4AC99078E0CF48E107413E8E6CFD255539CE8A74FC7435D96456C1A9D81DC447D7DC52BAE2AAB22C6E2E747DB6F97CF5C6983F6E0A081F1584F6B9E7DAB37647348D6D9F33A1F88FD96ACE0451112F87230E824B30D62C13A2DDA884234E2537E7A387A7D221B98726FB41EEB22681BDDE2D6A620A3F61705C012FC8B0B504835AA4C5E801D4CB3C3891CBA52D797159372BD3285109B8547145829EFAED820230AD6154163340C275A0BA03834F91614EAFC780940939FF04DBAFC14797A676D01C1E1E67AE6BF3B0F9A40E1135C35F14308E23A239083C8D955FB6F4B17FE615416F7A58E50BFAA3E673AB7D01337F34BC5C758504410F137FF2A9BC0C4A56EB5089A3DC07DA3CD45B4B6FCF9CE73242C4E9CDEE152B33EDE9E3C3C24E4323628C351C793D523E03B59F2ED097C467147CA96892956721D05A5072C24555C4647AA1E5B107425E8399AD8F82E2B83C8CD0CFAF31F6E569103D6BA26073A2FEC572A6BBA61FE51F947928D93A7E9D71BF0CA75FBE48A1D4B13CD5E3BEB2A037FFA8DB9467828F19C9E8B8AEB8EA0BC714400E8B467372929FEA5D27145A115151BD678EB65C555CA90EEE71C6EAA0FC880AEACD10D0373B60D81D83235A260CEDF372088C9CD750075ABD3D093C257FFCC91BE0F59AF1B25579C723832AA7D20B5B971E9AD5A1F6B86D6679B8F89DE92AE04C44B184FA33EBE931D1F452015BE877CF17F3524E071993D3F0691543EED5BBDC2CD1DCB4D41456A01D0C027CCEC03A8B344DADBEFD751A8FCEA43976F28046844D1398969D161DB98953CED51EEF36BE38B8E11D028FF1ECE7BF506C8945995A66B44BB5AC0C1180BBC73FD5C8F0CECCB12F339E1BE47099D8E863AC8F5C6226381E8132696C5D2128A8FB628A9BD7C499460DB709B492EBDCB854EB8D607E217BACB99F5CA9AD451B22C96459D24F6B8B84E542E71CA9A560C5C4FA60E1370321DB82A684B38BFF2536D8A6664820C1374FE732745C7CC640D2E679D63CFB5DF588C600D3FFEA163A459F66C06890F27BD2806BE2050BB28FC66510F1131768B651C97DA05C99B666F260FCD051951FF980C60B2AF2B49AA6F2E4801DA99FD62F43A32EBAAC80F83FFEFCE89F8A20B9AF7ACD208C1F348160863009D62BFDF448060551226BEAE201786552A438668810A307FE8778001FE56414D42B061F53FCA98924380E098CDBBDC946B80AA5343D06CF32C0B42029A5E3658098E7CE33AD1B02383501456BF154AD6AA1302819ADCF61960513D9C2DE14EE189158A28065A022AA34677B1AE96D3CDFCD8EAA788CA21B6708D783EC40029EB142BF55B818675475E5E2074FF6E4C87C5482EC9375B21E8A09F5D914A231500DC9136821E0406AB920B39813724709232CDCF1B206C6F2CBCB7A4FCE79B203E6966F599753EFD28B76B18EAC7EC596DE2B69248315E11E0D40FA0F44B94D6998B4D02CF100BEE2573716774319AA9A37075CE14BB2EE560BC6A42EE8B9D574CD2B422FECFC6D90A8BA734B000835F05FEB347A14D1116817EF0495C6658C70200470DCED1C88A4A465594F72616AB7DE8FF138CD5C90B971170D602A047F76FD4C8B4E3E3A21EA47C5AD80B6F1627EE2420A72336126206335A8D5F57D916863096BA22FB39D002EDE31C822C8E4E7C89B9CE3748D8ED035F179ADA25C96FAF953B88D3C16810138AA7831881BF9C4E13D6FACB913028C6C492010014DAF31C954BF38915C13489F80E9744F869D06785D70D48D48EC8A1864DF4D7F96CD6221049279A753D14C8C8E9DD87E285223107A61B32B9148F4EA4625CCD5BA4AF44D887B957B8F22AA963C07F61F73EAF79014827B3D59DC4EB8CB3EB98AA3F8062C294D09056C5BB865ACB72D00D17C08988406A08239E404FBDBF3391185BC62DAE0B412C64AFDAF61272FFD02CBB6876B4F1434837EB534EF9EAE3E253D2F97C51377F7EE19F5CF4A2A94BEE2E36E16A94EE7701966ACDEC78BFF46C0EDC33D591771EC46194AAEFA17648B103EE11C9E2DA78FCD8991DB954748E7309BE7B29BE74B386C48DC57D99B66C821B26AD2E6D895C69706A790BFC16F659174104AB05E5F739EEB8F251ED08F654DBC93A43AB44E17510CEA5CAED3CA694CF8C365D5821A4CB849D53094C254D47BFF7732AF4E73809FF417CA82BABE70694234C90E1B7F49C85D0745E00F4C132BBA2A2AF846BF81FD40CC206BB79DFD4C16FC3315F6E963FD064B29D63320F46601383ED74750A6FA0649B5925F89BFF68555E3067FB758DCBE0F3DEB6DF96125E558462FA86DAB016086130B3DA154EBAF6B60C44FAF2D527E47F70FBEF4485567B8477A8A496726B6871ED092ED826955E57E60658518B3AE11BCCFBAA448C8932A45052CCA5A97E4112470CE8C4F258AA7EDA990AE6BFD3C931DA2F3F4D7389EDD38DBDB48FE6A15344C095C7816BBF8DB4FCC0F6CCDD8A86AF7F44716B99BF630587A33964CF72105506B7D323142C8C7E406B4BFB15CC7E561E44313C7E499B0086FFAAE780A1E5CEF759B887ACC6254B22DBB7C56DCADD44CC1730AA817356D359CA5FA1B64D9655F71A7FB4A1C024E37E047EB22FC1E46568F95E349B88DF087808E98BA01E2307A29CA09E0598C277F05DE3FE50A3E06BAC9E1D72591337216FF8350BE8638F773152274F7494AAA01CAA394D2B744CA89EB5E2DCC118A0F5754189E8B8C58DF4F73792955D5D002F8CB3B486E445F514300A0A0999F851188688B5AF45222EDFBD029AC112830B319DF2DD9FC0CF2F3B10B3094B8AD4C8F805090DA58AFD6D2E11A0D0F271E5DD98645DFD979E9A1FDC21D7FDC6BEE67D06A95486748A30C380C293967188D83541A01922D8DA22C189B552F9DCC7789DFAEC0B9B10CEC6996198FA0974206EBE65AC6446AB52418DE343B2B407574F4216C9D4066A3C1F113A8D53A3CCDC60D41E6D85B97C05C5820FF50E68E6340D2C4DAB42827D38182BA3B59B7185B7CF70DC6036B1141F020B61D2636B4555C4ACF7BA83FA8F05AC67798C64695E6F17EB6D018128946A323C97643657D786F3E952B5436D423EC082E55B6473E07391E39FEC92B6A707167ED549162B236C2A75BD2F8107E3C4C1CF6D2AAFE5ADD18D30D00EDD378F5DD1D3786134F160D4464A68BEE5DEA916C7C94FF493595B3A8EB0093EA3A4A79D90BBBDB3B659D073969438DC2DB0DF5C914230ABFA379A17174B2109E5980AF58D4CC0D36A8CE550C76941CABEC664F233318E5F595DB4B20465665E8B0822F5F8FC8F24F9551A9BA4CDF657552A73771ED57C0CF88C2FCF5EB00E1036CBA60D7987B51E7C10F6376ACE3B478F4EECA2610CDA52C8FF1CD117225F417F78008AC4BB57C8DAABEBE0BAD24E73616A0B939F4A834A707090F2777FA19C83542603C2B437AFD41322AE68E0F18EF5C3ED93472178842B90D8CED5474FF6C984B9F84EBE5BAAB29CC79C670CC94F20C0EDCCA6268FCF680 -MD = C186E1325BB9B2D18CC91F6D3090177D25E766787552A0DEDE0AF7FC -Len = 34304 -Msg = 0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2 -MD = BADF580A485B279058183B4D53755FBAA8889D34B041619BC292E8D0 diff --git a/node_modules/sha3/test/data/README b/node_modules/sha3/test/data/README deleted file mode 100644 index e9bc1a0..0000000 --- a/node_modules/sha3/test/data/README +++ /dev/null @@ -1,3 +0,0 @@ -From KeccakKAT-3.zip - -http://keccak.noekeon.org/KeccakKAT-3.zip diff --git a/node_modules/sha3/test/data/ShortMsgKAT_224.txt b/node_modules/sha3/test/data/ShortMsgKAT_224.txt deleted file mode 100755 index 98190a0..0000000 --- a/node_modules/sha3/test/data/ShortMsgKAT_224.txt +++ /dev/null @@ -1,8195 +0,0 @@ -# ShortMsgKAT_224.txt -# Algorithm Name: Keccak -# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche) - -Len = 0 -Msg = 00 -MD = F71837502BA8E10837BDD8D365ADB85591895602FC552B48B7390ABD - -Len = 1 -Msg = 00 -MD = 860E3EC314C5CBF19C1A4314E9EA8CB85CECD18BD850B42F5C6F2A07 - -Len = 2 -Msg = C0 -MD = 6B22CDDBD1366F7B8DB2026AEE8A0AFA86B323AED7AA270AD928D1C5 - -Len = 3 -Msg = C0 -MD = 2B695A6FD92A2B3F3CE9CFCA617D22C9BB52815DD59A9719B01BAD25 - -Len = 4 -Msg = 80 -MD = BFA0740D2F2EDCDEE2DB3F66F04FB8179967D3FB5981644D9D084BD7 - -Len = 5 -Msg = 48 -MD = E4384016D64610D75E0A5D73821A02D524F847A25A571B5940CD6450 - -Len = 6 -Msg = 50 -MD = A0FB02F1D41BC09CC4B3E85B15BE85E3B3C2D43EB36DD616C640D7CA - -Len = 7 -Msg = 98 -MD = C00ECD3072762C82D08F8F76FECF38BE23075F9C5663D06A9184BD0B - -Len = 8 -Msg = CC -MD = A9CAB59EB40A10B246290F2D6086E32E3689FAF1D26B470C899F2802 - -Len = 9 -Msg = 9800 -MD = 5720E4308A3EA6F412A9E22AC3846579150BCCEB8F1E20836DA610B4 - -Len = 10 -Msg = 9D40 -MD = 5B464B1929CBB8FA7C2036D3F3ADFEB885257E5EA65610B31D57C3DD - -Len = 11 -Msg = AA80 -MD = E534929C710AEF8D794993A5603AB8DCE13F90261DA0F20B76C606A9 - -Len = 12 -Msg = 9830 -MD = 548C76FF8FEB36FD7AE767F442F0AF32461A72ECBB70F7624C465BAF - -Len = 13 -Msg = 5030 -MD = F06E9C525F7D0AF9AD7DA2BECDE216B8EE5C24BD05DB8EEAEE4AB17D - -Len = 14 -Msg = 4D24 -MD = C31A82A1E34BCFB48A9E16FA2F33D9BEC1BF919111E1ACB36F947069 - -Len = 15 -Msg = CBDE -MD = 7A33EC1EFD89305E9ED7F71AA2DAF5595C35CF71129F50AB8E789282 - -Len = 16 -Msg = 41FB -MD = 615BA367AFDC35AAC397BC7EB5D58D106A734B24986D5D978FEFD62C - -Len = 17 -Msg = 4FF400 -MD = 94D5B162A324674454BBADB377375DA15C3BE74225D346010AE557A9 - -Len = 18 -Msg = FD0440 -MD = 898CB38D96598F42BDD1D1644420F65D99085D8AE129DAD9FA00EBC7 - -Len = 19 -Msg = 424D00 -MD = E8E7B4D902425DAEFC1050D6239D501E596F80749BF3E3FB12E8F757 - -Len = 20 -Msg = 3FDEE0 -MD = BF40E4D1A33A719FABC2AC4D8010649B6B3228B5279BAA91F7A8B59C - -Len = 21 -Msg = 335768 -MD = 72F0D82FBDF5D0705E3DCC9E1B3BA0A2ECF76A63FBFA077B0D962A35 - -Len = 22 -Msg = 051E7C -MD = 74C70F1985CDDE1185564A210B77499C30BD72472E306A004E7686F5 - -Len = 23 -Msg = 717F8C -MD = D71BDEFD0EC94933643140CBAFC622F7A156DB7FEA5878A839FBDAA6 - -Len = 24 -Msg = 1F877C -MD = 6F9D2898EFD096BAAAAAB2E97482DDB6389B8E6CAA964B7A0E347E13 - -Len = 25 -Msg = EB35CF80 -MD = 09260888DADDDA3BF29487346A4DF10FAFD72D40E420AC8DF94E8438 - -Len = 26 -Msg = B406C480 -MD = FD9A92C593AECCAA94BEACD310B83F88B3E67E7BDB825BAEF311B8AB - -Len = 27 -Msg = CEE88040 -MD = 10F444B9E23743B29D8000F0118257D6E2BD986C3BB11BCD40FC1496 - -Len = 28 -Msg = C584DB70 -MD = 5A5F498AD3B0016DAE1AA51D31033B1477B449D9F7E48CEB7AD20471 - -Len = 29 -Msg = 53587BC8 -MD = E7B462FE88FE41B20C5E11D2125D1788383CC5C0EC7E9E8AEF1A7532 - -Len = 30 -Msg = 69A305B0 -MD = CC782A50B955801EFA399A4499A582D49B8636BCC5AD376694B4F3F2 - -Len = 31 -Msg = C9375ECE -MD = 3C4B7B7AFBE979DF4D87EEEC8E6D15B6B0D97EDD9EDF9A01739A0C7B - -Len = 32 -Msg = C1ECFDFC -MD = E405869DA1464A705700A3CBCE131AABEEBA9C8D2FE6576B21BCBE16 - -Len = 33 -Msg = 8D73E8A280 -MD = B39D6BC02265FBCA1AD221F084AFF3CDFF13E11B515E65562ABD3E39 - -Len = 34 -Msg = 06F2522080 -MD = 651ECCB5C0F55F97D33C817BCC7CDCF0C508A042D1E7E5D10180AF41 - -Len = 35 -Msg = 3EF6C36F20 -MD = 0C3D280A84F9C8E7BD6EEE3524A8C87889A691928AE3D14D355B9C24 - -Len = 36 -Msg = 0127A1D340 -MD = 50EAE81AAD60BD33821398B7E4F03645BC64D2A9E4B2265ADA63FE93 - -Len = 37 -Msg = 6A6AB6C210 -MD = AFCDBC12717B1AEB4321FC753B7396550D3E8E67A91B73437EE5C0F8 - -Len = 38 -Msg = AF3175E160 -MD = 54C71FA8BC7F884D4BA65788F7F815BA1EBDE20D4331582BD071B258 - -Len = 39 -Msg = B66609ED86 -MD = 7903AF4F749DFB59995F8DB4F77F23ECB05710BA8C58DBBA713240C1 - -Len = 40 -Msg = 21F134AC57 -MD = 5573DA2B02216A860389A581F6E9FB8D805E9E02F6FA911701EEE298 - -Len = 41 -Msg = 3DC2AADFFC80 -MD = 51C4D2A09822C7D0D0B675E5E0BB695D58D3DD041A7E98FAD79F8504 - -Len = 42 -Msg = 9202736D2240 -MD = 9DF739B384C6A34C3CC28EF9BC133D39D318697A5ED7BFAB42705AD8 - -Len = 43 -Msg = F219BD629820 -MD = BD2D06E2B0F56A8D8343F8C4CF075B917E3B422E748A99F7DC080248 - -Len = 44 -Msg = F3511EE2C4B0 -MD = 698DD0FD85BC581A5CE04DC35E49C4874F3C49C51B1EA8823577ABCB - -Len = 45 -Msg = 3ECAB6BF7720 -MD = 6BA99B770B148B5BF74ACCF2FD0DCA926D268144FFCA209173393808 - -Len = 46 -Msg = CD62F688F498 -MD = 17DD2CB98F577FED70751FD6DEBEBF32C65B9DDF89482A3A8885C7F2 - -Len = 47 -Msg = C2CBAA33A9F8 -MD = A29E7ED06A08AA7107DA0E0BB0F05A7F733FCBCFCFE7189C3F4C4FA8 - -Len = 48 -Msg = C6F50BB74E29 -MD = 163C9060163AA66B8B7C0CFAA65D934BFF219BCBC267187CABA0042F - -Len = 49 -Msg = 79F1B4CCC62A00 -MD = BB54D988BBF70789AC15966BBB5F5E839D515451F07064B3700D8C1D - -Len = 50 -Msg = 90239D7EA2A5C0 -MD = B37BFC0C804DD7C4025618224C4AA94FFE432658C4E5BE17832FBB9F - -Len = 51 -Msg = 9AF4C2D144E340 -MD = 418A82704CFFA94825845E227E502788FA68326BC03A5E79E16DD03A - -Len = 52 -Msg = A4F2613FA7AB70 -MD = 00110D7777BA379340EA55521FBA7274CF38C290113B695EB22CCE27 - -Len = 53 -Msg = E863B85EE7B528 -MD = F4F2EC6E873360278405DD38C8DFF07E0B0C966FAF6A7FD9ECF822A0 - -Len = 54 -Msg = 9F3D6D6A44B684 -MD = D0CC1493D0CC2A80EEF80FA1393436B2385398DADF6674D8E0568515 - -Len = 55 -Msg = 14B06DD54EB364 -MD = 234D0EF72A89B54841873E019B878A30E88403A138D41C5274A53DCC - -Len = 56 -Msg = 119713CC83EEEF -MD = CFC04C6F8463DDAB24CDF8B8652BD11DF23DD1B95F118328DD01580E - -Len = 57 -Msg = 8569DF971E674E00 -MD = 80D3FEA800C88632215547479562A06A03A709D356E36DB35A5FBF2B - -Len = 58 -Msg = 42DA39AC5951FEC0 -MD = DA0EB8B0A82BCBCAF7A8C1F6F46954F4B017EA58D56F46B123866AFF - -Len = 59 -Msg = 230688D359F31380 -MD = 3ADE50B1421B31B6F44060AEB94EA01A156FF8274111016A74C81944 - -Len = 60 -Msg = BA594E0FB9EBBD30 -MD = D81499F06723C114B2A1D72EEFB4FE60153F08EFAAF18C61D99CE5EB - -Len = 61 -Msg = 9D1BC347E3B05240 -MD = 4A5097F18AC0FC7A42C932FB5E4C4C9E15E70B1A5F42CFF5127C13F7 - -Len = 62 -Msg = 756FDE7AB6CB531C -MD = 4D93072832A16E406E17068090B43011B982FF6F05AD0FA4BC22DECB - -Len = 63 -Msg = 669DAD29EA0D289E -MD = 5567A134FD2457BF608B33B837FB9F4C704508E2A4C4B6F9F4D60AB1 - -Len = 64 -Msg = 4A4F202484512526 -MD = 7A5C2CB3F999DD00EFF7399963314CA647DD0E5AE1BDDEC611F8338D - -Len = 65 -Msg = C86CCB0A4116026080 -MD = A56D25AB7622B07C03253E332621098379683B8076C188FA59950D53 - -Len = 66 -Msg = 7A556A043BD867FB00 -MD = 648D79B54FF141215C47B4751755884069C0EC18935661D7F5304AC8 - -Len = 67 -Msg = 91829C7B4031005880 -MD = 6DCE19923F1D0B3BEB29DA17878A44C92DC869B2753145B5A4E115D3 - -Len = 68 -Msg = 0462427C865798D260 -MD = 5346B464D6E20F53B19747C1260B8C39AB74F04517C7547CB35903BD - -Len = 69 -Msg = A51806364AFBD2E830 -MD = CAD76F8352124B1E96CBFEC37F6E6320401FE8BF33F0760F7AAF6C05 - -Len = 70 -Msg = F8CB65B7FE6995F200 -MD = B0CDB68FE3C60FBEC2EAF36B5A18A63BD2207622A41C4DB244911C9E - -Len = 71 -Msg = 454C87F43DA37EDB04 -MD = 0613A2D32D46C63DF3912781B91CB6254D2943FB5F2439408A375ED6 - -Len = 72 -Msg = 1F66AB4185ED9B6375 -MD = A5A75806083AA9307074EF8FBD7DF592985E5F714611E812216C0449 - -Len = 73 -Msg = 5D7C71C275D9F5613E00 -MD = 369BD872A68293A885DC12736D181BAC92387E95B705B2EADB9F9CEA - -Len = 74 -Msg = 1A533E4BD100A83884C0 -MD = AED613151BB0944DEBC9D3875582E826BBCBDD2082A6F755C5572CA7 - -Len = 75 -Msg = 7C8433BB4FD46EA17BE0 -MD = 7D38A79B0468C47D5166B9AD6B346F33373D13056D7DCF0165768FDC - -Len = 76 -Msg = 8CACC33C81B29F0E8830 -MD = 2387F63A440EED70D605B8243E7B0DE40F10A8AEFFD35272E8E2DA0D - -Len = 77 -Msg = 9CD0B4A48455A6716AC0 -MD = D76EBF7BADBE523FEBDA203A99D85EAA6250E9092AA7FDDC9DE438D4 - -Len = 78 -Msg = 4DBF1B5FFD3D72D20F50 -MD = FF8D8510E0A8A5FFF7E355736BE26D8FED6EA44A50F87A0C82D5F170 - -Len = 79 -Msg = BE31E2945E1BA17901C0 -MD = 0127A30684455B047573BFAC0C3383FC509F61EB2D133E7979A61887 - -Len = 80 -Msg = EED7422227613B6F53C9 -MD = AC78FC53A1DB90A634F1AAAF90119C889C8C24B59B98B7366029CC73 - -Len = 81 -Msg = 77B56B460796582D1FEE00 -MD = 52E0B339C1FDA1858AF79641CCEC5D8613E1D2E3A0F8F3AD4BB99DAE - -Len = 82 -Msg = 5F085C1F91F2E5EB05C840 -MD = 886F06A40D7B7A15970DE3C59FFF8EF9F26BB51593EB1906FB359452 - -Len = 83 -Msg = E5E559373233E6EF933120 -MD = D00DCB541FA0E209A9133970B998EAA036B7DEC325B4BAE992C71422 - -Len = 84 -Msg = 670C357239C46D9E96DD20 -MD = 0B7E73B5633D974DC1DCEA7A685662219D4E2CC654907EDA21761945 - -Len = 85 -Msg = 33BAF96B35241EB2243230 -MD = CD62CB06BA59F1014F7286A8AFA5B835BCBE90502F6FB969D817ACF0 - -Len = 86 -Msg = 7148A621D35D6D486BDA90 -MD = 1CCF41FFD6EB38BC43AF819D4C15A276964571A94BE8A34B013706AA - -Len = 87 -Msg = 9D7146B5E9C8246BEA8C4E -MD = 7BD5D4AFC0E611F6B408F46052390D13DEFA298524DE5DA63AC59C79 - -Len = 88 -Msg = EAEED5CDFFD89DECE455F1 -MD = 672CA6826686BEDB258532830D606B258C6DE60154EC0957CD8B858B - -Len = 89 -Msg = CAD98AD0D9BF161229074280 -MD = 4772C2EDC594A82C97718CC2A8C3DC955DB75ACA6C5A0222035684FA - -Len = 90 -Msg = 6B767F82890709DDF7A1EE80 -MD = 9D5F4A1C0BDC5D96367D780786E9B816806C9DA4ECE87019A01FC9BC - -Len = 91 -Msg = 73697688CBBF28C51DDDDAE0 -MD = 4B0C1D23B37C05D06A922804199D33454378E9DA43F469F9D379F2E9 - -Len = 92 -Msg = A3C1967A97E58B43453D3760 -MD = 11BB96942D1875072218FE7E5EEF48754E81510DACC775B6FF0A7B56 - -Len = 93 -Msg = 03981280D89F7EC9845C29A0 -MD = A6FFAABB0D8ACC441D77E958FC1B1685E8FEC651C7AF8FA708A1E247 - -Len = 94 -Msg = 0E42E6EFD4D3785EF0BB3A4C -MD = 13776A77B4D138450C790EC3F0F18D83995A21E3CA544CEE21D9C4C3 - -Len = 95 -Msg = 6CE6B3C077865CAB3D099B66 -MD = 39855F1C31B753350E923D96445F5B595CB52440ECAA19ED869437AD - -Len = 96 -Msg = 5BE43C90F22902E4FE8ED2D3 -MD = D98CA07E172B0BC53D679D2F8D002C63FD24A6307F2B7E1EEEF28BE0 - -Len = 97 -Msg = E94F8C8A909FFB8DF22C19FA80 -MD = B0D19D47D1CC2366CA6505599DFB41A7630093D4443856912114136E - -Len = 98 -Msg = 004761F6028ADBDC4D5A8CA640 -MD = 139C1A00367B34977FBC43C72E6012388125F327604B58F787483F92 - -Len = 99 -Msg = B1BA2223CC3AC042D06554EAC0 -MD = 29F679441B97A8A32DA27423B1245A3197AF5DA380DA2D16B9FA20C8 - -Len = 100 -Msg = 746122438AD1B5B8989D64B320 -MD = 05C5DF35A86107DCBFD6B0E789979C1FD16B9CB9D40B9038A557375E - -Len = 101 -Msg = 3DAD6E4B69AE8BD16D830213E0 -MD = 39664D18B0E21BD6FF8AF58F4039E484658FA3C78A0BA1975DD532F8 - -Len = 102 -Msg = D441F54B918819F36B220B9608 -MD = 95824B831376D552FAD111F6313CA20A2BEF5306D444AB2136952575 - -Len = 103 -Msg = F44CE7427B6042ED343F6D2194 -MD = 7C3BCA6D0CEB319E810B97E546AD416EDB100D2C4857BB7A36059646 - -Len = 104 -Msg = A746273228122F381C3B46E4F1 -MD = F122BE39C91A6C17CD5900F531E680D54CEDEFD4F0E3D113D26543D4 - -Len = 105 -Msg = B883CDD1742C224246784DB69080 -MD = 2FD30CDD3B8F80019E110C472B830C7B54E199E2253CCA695FB28179 - -Len = 106 -Msg = 555FD729751EB2F8986B19578740 -MD = 9FE96E4DEFF7F1214595118388967037FA8EFC375A4D5FBF34DF911D - -Len = 107 -Msg = 7A609524C0F706F629441B978AE0 -MD = 8BC0895113E6D98ADAD0624D924775F9644D3EB44221212DB7F968DF - -Len = 108 -Msg = AC79B374D401EFDB3232D0826C60 -MD = C849D63621F1739219E3CC9A28764C7FDFC0189E578FD26A1CBE6A7F - -Len = 109 -Msg = D8FC20BD0025C7582B7946947918 -MD = 362C576877D8AF5102AE228BA506FD83098A44D66E5846E438ABC781 - -Len = 110 -Msg = 0ECB1FC3F81F3236FA7B91F7AACC -MD = 10E958D1885AABACDF77656A09174163E1625FFA4C458B2F2D200E2C - -Len = 111 -Msg = D5334CA10554C583F11D9F84A71E -MD = E76DBE5384D512D7DDB8D645DCFF1993932021317249EF94BE4B8477 - -Len = 112 -Msg = 3C5871CD619C69A63B540EB5A625 -MD = 2A26D2AD2015C67CABB7895EC5FA25473D4D1433FAE92B9B2CDA31F0 - -Len = 113 -Msg = A999538B0C31D7339A217C1484C680 -MD = 9770D675AB0A970F1772707315A77594ED47646DF75363BD2AE96124 - -Len = 114 -Msg = F4D4FEE364CE3CF439D0160EA7E780 -MD = F8BF5E472E7A35DF53F7E42C9FFC448848A05763F296A5136C965321 - -Len = 115 -Msg = 55A4FA6097E8753CCE38FB4E59D460 -MD = 921FE823CA8C1B0363DA6054D4DC0C5C64051E0FFE3780224D96B38C - -Len = 116 -Msg = FEE0239360210B6E3761E6059DAC10 -MD = DB357FEFDD02728A7BED426C55357058D6B87336243885CBC66DCE1E - -Len = 117 -Msg = 1750D5D521528582177DCDB046E008 -MD = C0D0322F21A76FA8A306473B4367F6FE79A3F3879D89F6B8B6D27D93 - -Len = 118 -Msg = 68BF3921EF9DD0B6ABF732D9E508A4 -MD = D45CF5EDEB8A4FA9622BDB48726E5AACBE6826CCACBC4AB60D9E9D7A - -Len = 119 -Msg = C26037F951B3CE27D56C0303432FEA -MD = 8930F90DB77DD86B4DCA78A70A8E886FA6042F71E189EC5F88AD5E71 - -Len = 120 -Msg = FA22874BCC068879E8EF11A69F0722 -MD = A69E4EC1648CBBD595558EE4EA345E4196C2881E85E853739B1F4604 - -Len = 121 -Msg = F3D384F6F8B0F7683C2875EAFC19D680 -MD = 4287C58E7429993D32EEC7FE9E4F9BF2B52788E0A84FEAC44B46F228 - -Len = 122 -Msg = D8A9E01B7ABA9C15F27C650AA6D98040 -MD = B1CBFEDF11CFEE655236FBC7D8E6A3CD76243587C864E1B9811AF437 - -Len = 123 -Msg = 2CFF7186405B02024C4203A7FE7A11A0 -MD = F3B0AA53A5361E28E589E24BB45A1B65BD64AA1A294914909317737D - -Len = 124 -Msg = 87217854ED19AC6E8AEF3B39B97CD350 -MD = D7BE4C4EDD34C8D9CDE24921F1827FC3568F2D3152C1B5C620DB3451 - -Len = 125 -Msg = 441D8FC5478410033BEE2F3DA9FFFCB8 -MD = 13DC32C528FE32D961AB9D3C8DD69B129BF20B86907DC0FF905E8868 - -Len = 126 -Msg = 0341698E451A235FEC3A6BBE42C07B04 -MD = A316DE06991F18C22599A712B3A9BDAECCE851199B5E06AF2115DE49 - -Len = 127 -Msg = 2C288B527CE3F931B0C565BED2C62758 -MD = 0E288A25D426DE26455DE18B19B50BE8AF0E2DFEF82CC32DD44DD6B5 - -Len = 128 -Msg = 52A608AB21CCDD8A4457A57EDE782176 -MD = 5679CD509C5120AF54795CF477149641CF27B2EBB6A5F90340704E57 - -Len = 129 -Msg = E35A1AC6054BA5FECE64AEB3CB97ACDE00 -MD = 73E5422E4AD460E46536DEE283570FFB4EADF02750CFC8F1EF660A68 - -Len = 130 -Msg = 34EE2C639DF9C71BA46E88058962D3C2C0 -MD = 7675BA55616B9270934FFEB516003FF26A7ED895AA8D8301F2CE53D3 - -Len = 131 -Msg = 5EF1EC3AF3A823667B01CEB7069C3D6F20 -MD = 52233EB3893C72447DF152D686E7F4779A99F8C4E622CA933B8D31C3 - -Len = 132 -Msg = A4E76D43E7CC38C19ABF5B09F0E2104E80 -MD = 97788E1647DF9CFE5A73135C73F0169A6A2E8782E10E3C207D02FAB7 - -Len = 133 -Msg = F7E6911439AFDEB747AEE1DA0E64165B98 -MD = D311DA904AA2D2273BF123C53DC07A5943D4EF8CB99E1F806135B52D - -Len = 134 -Msg = 365C16113FEA84CFAA647B4B6BAD705F74 -MD = CE6A0EF6A1A8215EAEED972AD704DC2964203A0FF2D99EE56F89FCD1 - -Len = 135 -Msg = D783EE042795EA5E2FC9817DCC24CE1BF6 -MD = B1D0D23204E1806721D37B207F475C8AED3C30CCA8AD6F83C5983D84 - -Len = 136 -Msg = 82E192E4043DDCD12ECF52969D0F807EED -MD = 455584A1A3BBFBB977AE08DDEE93DA5ACAE0F2F4C3CDAAF089728AAE - -Len = 137 -Msg = 7E3F13DB88EAA22EEFEC3AB47B7CC5AC8080 -MD = 1880787E25339EFA951573679A2D7BBC985B32FB8DDC230EE29492C6 - -Len = 138 -Msg = EB673EAA409B4F98C581D8DA542EB58B1380 -MD = EED6E06F7150D752267855A61B3D22AADE8E7B60B6735947156E22D6 - -Len = 139 -Msg = 84D42DE0D62B7A480FFB939533283B7A4440 -MD = 48020A6DC9D5FF09515588F6719C30E34A0B490AE1B6C5B4EC271F6F - -Len = 140 -Msg = BABAD873529BE92E9BC49CC71964A554ECC0 -MD = D70557410ED91A31B27994588E7088BEC5AE0E24309A4B32E4DEE001 - -Len = 141 -Msg = DC3BB8370C04147834819A2845A79B5A20F0 -MD = 44C279813CE78E5CDA3EF53AB254C5995DCEA104C9AD386C963BB7B8 - -Len = 142 -Msg = 8952BE55B2BCA64F32B5401A99A8392AE39C -MD = 5F59D2C6A00E17BF2517BFF7B607A9B43CE958BA7E950279FE70416F - -Len = 143 -Msg = A53B4420787D32433A0DFD5D09E5D8E7374C -MD = BBFEAA3B5FB125CCA642F82732843741CC66EDBE9C2315DAC6026E48 - -Len = 144 -Msg = 75683DCB556140C522543BB6E9098B21A21E -MD = BB779E7267CAF0E891547EE3E3BABF17837671CF731ED56334F61CC3 - -Len = 145 -Msg = 46A2262940F3D7D9AB6B1680A300674AAD2D80 -MD = 1C0D236FD406D177165A51C85CECA351AB28CCCCEDACC2949CAACDAD - -Len = 146 -Msg = 86804F34609F9945125324B33E672E8F79F600 -MD = 08BED55441F586468879F6CB017A3053F6C620E68F2F6D4999C220E0 - -Len = 147 -Msg = 7B2DC42D8B580D6CBD359C46B0321BE37429C0 -MD = 2E292D1C9FC9E52FEA63C4DEFA20F47664B6E27BFA37FB6C10511143 - -Len = 148 -Msg = 0903A731D853AB15F958B8E40CED0B9FCB7110 -MD = 2738409058987634C0720E35BB9C4DA70A34BF22E14963E771F7262E - -Len = 149 -Msg = 8E3C148CB528836E4DD538D903A3D5BE586A38 -MD = 91DED2D8815BA9057DF10B3439D2CECE793CDAC7E632A32555323939 - -Len = 150 -Msg = 6EC0D6E14E4619ADD039F4A24F9FC4D0DAD3DC -MD = AA31EDA6FF3EBCDC8BFEE1837A8D2968E81ADFC03DC8EA60743F8F07 - -Len = 151 -Msg = 12FECA3B2A8699FF59120DFB38BC87793F8AF4 -MD = 90CA5A213DCC906D118C8FA0B47C633EEA161BB1C3786100DC9E1496 - -Len = 152 -Msg = 06E4EFE45035E61FAAF4287B4D8D1F12CA97E5 -MD = E7B181DAEC132D3B6C9DFBF61841135B87FB995BE20957B8CD095E2B - -Len = 153 -Msg = 8ACDD913E4C985859FEBD62F6EEB412230252680 -MD = D2665789F862BDBD8B9B23E1D0331B381875A2C93898A9A4F87D0EB4 - -Len = 154 -Msg = 3487448A5103B1F7EB054C74FB1CCFD3E7B51A40 -MD = 2AB9456013029AD522AF937AAC528FAA5C5985455CAE5C679544DBB7 - -Len = 155 -Msg = 21B898B65DE49038D0D359CA991356FDABD719E0 -MD = BCD29500B0FF2BBE97F2EAEADD58A7FC4CF51BBC3989A1C536A786D6 - -Len = 156 -Msg = E35DD4BEE303448271E4A68160A4152B30D4EC00 -MD = CB341FC95C914BBADB828AC394F3887B63787A1AF1654C9C8262AEAE - -Len = 157 -Msg = 8E2A8A60383170AA48152522610B8D5B547A0CC0 -MD = 51B24BBA7BD8D719C1BB6EB4B659CA26672CDA06419BED3805C9F7D4 - -Len = 158 -Msg = F674C01755AD0D41FEA8EB4F984F9033E38C65F4 -MD = 88D02F89534021FE91CAFFCBB5843B0D60DC28D13DCF3C8C98AE88CE - -Len = 159 -Msg = DEE4696A6DA3B8A6137BF9573B91B40F288200C2 -MD = DCEA307E360479387E752D3E6FDF2497AC2604781590434BCCB18A7B - -Len = 160 -Msg = E26193989D06568FE688E75540AEA06747D9F851 -MD = 44729646A05AD0503A876B448F88F177A0A263AB746CA6E30676ADB2 - -Len = 161 -Msg = 7659DA517F96FAD5A0B1277F52FED01E4835313100 -MD = BAC22D4C44DB1B5F010E22F77D9AB8C8AAFC32A2474D4542A84FD87B - -Len = 162 -Msg = 11F80B2028EE430ACC4E525FA85488E64C64A0EB00 -MD = E1DCA322A8048CB92EB19D1B348B65838676E52A688395F43AEF0099 - -Len = 163 -Msg = F2F533845CA07407654214C0BF1C5693824E0496C0 -MD = F0F8AEEEFB94FA08D3F13DBAEEF101E6AC632A4B18BBAA23B1719BD4 - -Len = 164 -Msg = DF9CA9E83AC80CF76F0C596F15C8CE5DE722AA9460 -MD = 6605D6A4B6BEF23881C19FD2D66EEAF34B7BE4156385DB3494521B8B - -Len = 165 -Msg = 59D9E0612A067556CA31FCE628BC9ED8CBCF038198 -MD = BBB17C8FEAE07E136165908B9EBD6F485764973FB84A8F5B52CF209F - -Len = 166 -Msg = AC3C4EF2B493AC819DC2DB7E25EBE4580115473C04 -MD = 6F9E697F754DE4A8813B923AFF7B5AD1593E1D4EC63B8F124C0702A0 - -Len = 167 -Msg = 91935544B8DA1D9A33120838D090AAA9508D7395EE -MD = 70D5FE5FC431D6DC1462501911AC87F82D635A27AE84FA9AF6D62EA8 - -Len = 168 -Msg = D8DC8FDEFBDCE9D44E4CBAFE78447BAE3B5436102A -MD = 05E15793E417DD4E02CD6C5636D42C1638C164D70B79F717F25D1A15 - -Len = 169 -Msg = 0AAAE7B9E64C5379E6C385712FBCA90088C5879DC600 -MD = CA4F758A11C8D2D76FD133D3FD20AC9ED1FC4F5548FA2384C48A8652 - -Len = 170 -Msg = 89BFECFB6566E0FB46B71DED91D3C392B31D167BE680 -MD = 0F95A834D9B34751EE93DB3A3570BF4B66C457FAC232C49BE955D45F - -Len = 171 -Msg = AD723D09C67B09677286E46AE2AFF84ABCE35B621D60 -MD = B41A59FCF042659D8724D2E590AFD932369DEE526865C408EB4E7837 - -Len = 172 -Msg = 6037223B33346FEFC063E63E10D7BA78FF02C00A8A40 -MD = C7B035F8541B0775B52CC6F4D22F0EC69B5C6B9A6447996A6C04A9A9 - -Len = 173 -Msg = 57E4329B428F70DE94A211479B2071BBB7E508F1D2E0 -MD = 1C4861BAD9B7910AD79F0C03594D71D5B10F15335F85E8AB4F2A2A15 - -Len = 174 -Msg = B0FA56D8833B44F45FA2A5109AD4C2CAD819050DFF1C -MD = E393B23E698163329D8E444F2B2EFAE6FE8A7401A888E4070D420234 - -Len = 175 -Msg = 4582F3EE0E0BFDC5CFA3FA7550E939BCF9C0B5EFD04C -MD = C68AED4566E747152A9935D58C405D3A4BB5A91567CE8BB1E9D42154 - -Len = 176 -Msg = 57085FD7E14216AB102D8317B0CB338A786D5FC32D8F -MD = 2C4077A8858966EF79AAC3EC6D82855EAD22867BA45D617A68CB926E - -Len = 177 -Msg = 88B929BF491A1497E86DDF6A4040B31270EF97D88E4D80 -MD = E627D2DC1E3DC0D2999EDFF1DFABF0C63D40BF89BD7742E5DD3B9C31 - -Len = 178 -Msg = C5DCAD3AA886AA7D2336333D8D777EB15B143861A70AC0 -MD = 50C9F7E5355CE8F4162B10B40B3720367365BDBB2626FB998D584947 - -Len = 179 -Msg = 12F94C52AFB08898E37C2FB4B778E458F37C6858C1E720 -MD = B7BC1FBF2A632D693C57FB1DC89D2EA15F9AC399FF2BAB060CD742E7 - -Len = 180 -Msg = CD911C2634643EFC060E2B641228BAB22C223B8B1186D0 -MD = A0201511026BE054EDCBD8960FB0F9BB01892B02680252E41A9789C5 - -Len = 181 -Msg = C194643A333C0D9CF125B6B729069530858BB4A916FE70 -MD = 564BBAEB91F9D7971C1C07C482E799489C08939179F273562F92CAF3 - -Len = 182 -Msg = 093A095AD39D10B3DD25C571B44C612193056D1B112AD4 -MD = 75D93222163D654BE2F3771C2EE7E78FF1AEF5BB1B949658BD1914E6 - -Len = 183 -Msg = C95D9E47B11AFBB807B10CB90260A1A1263E9934EB181A -MD = 57B7228B830C6A5F04F93B1FC08E2760BD0891BD0D7CB71550FC5856 - -Len = 184 -Msg = A05404DF5DBB57697E2C16FA29DEFAC8AB3560D6126FA0 -MD = 2E897B479FBCBF42D2139F6768DF147A3B85C36A5B3F3C066EB0565E - -Len = 185 -Msg = 4380398B1D3E170596F1CF7AAE1D32CD20B5684FF1D81D00 -MD = A073E2CFAB73FC01E4A178F7BF41D68D32474C8BA571072C9C416DE1 - -Len = 186 -Msg = E7EA48586E6665F113727B7C9EC7BAB64D3DBEA3FFF317C0 -MD = 6EBEECDA8D316AE4D4D391DD93909F141D6D00B5787151F3202E7015 - -Len = 187 -Msg = 9DB8E92F7CB06389B57BDC2B510E30566EBAB9B72DDE5EE0 -MD = 1279BFD1170877443AED3A2B319AD51112089D8AE0A199528D4343E4 - -Len = 188 -Msg = 9FDED6A700AEBB65BF26400F30F5862CE6B550F67681BEF0 -MD = 05BCE51C58B64B05BC258F0EB0757481C436FA7E5BCDA8A962F4281F - -Len = 189 -Msg = 893B3BCFA97A81076A579D81CC66EB540351DC3A241290B0 -MD = 1637DEECF460207536DDCDCAA036DED24AB02A1B91CB276B6482A2AC - -Len = 190 -Msg = 90725E6308171BFBB26B928FC0A6F1C3B32718B74A37A0C8 -MD = 751625EB29EB3A24959B79AFB8EAF44D44675BE1DD524C46A8B0E487 - -Len = 191 -Msg = C1A516E38C83393D9F049EDB1E50CDD2DE3CE448E5D676B4 -MD = 898A18EF8117A7D23117883FEB4DF709B1C38D848322B48F276064AB - -Len = 192 -Msg = AECBB02759F7433D6FCB06963C74061CD83B5B3FFA6F13C6 -MD = BA76FFEFD006B81EF5991E697D0425621B16818EA27C11056E00904E - -Len = 193 -Msg = 90105B1F751AA0EE546B3EDAC10EF8ABE9CA71C0F0CDDC0800 -MD = A2F2B5D6D132D0F93E949DDD2F7B77EA7947B71CA0A31AB68D1FE56B - -Len = 194 -Msg = E0CE59E9943CE116C7B745FC595B3C58129052321F67FB8840 -MD = BD68F1BD7669D5F208BAE1AF85BB00D0AEEA13B5F2093FBF98C58162 - -Len = 195 -Msg = 0502D3A22A7A0E6729EFC524FCC50BC7C62B35C12C537E70C0 -MD = 185BE39AF32048351BFBF308454FB22EAF6EAF837196E501251A1D93 - -Len = 196 -Msg = 4D9BF0AD887F1F21023B749F3F9D2340C0288F009D39214600 -MD = 3EEA3B19E02257DB93CD4EB935738F73B50C8447073096C58569EE99 - -Len = 197 -Msg = ACC9748344B37FDDF81027547EC8D26B1C469531935B7A2AA0 -MD = C23EEF10CF004BE34C16B99A1FE261B4A41B6E5CF1C5F8CB3F0D03A4 - -Len = 198 -Msg = B704443E84AD25B0E73716EA414234BA929F2D927DC1E1B890 -MD = 5F9977626FB73103909F173B3EF8D428652FF6D4DCAC4C6FF7E0B383 - -Len = 199 -Msg = E916DF6F4B5E9356DACD76B89F593B70C2B44B3EB1B5835ABA -MD = CA3A51E448FF6F985E0E5EAF002C832060ADFDB0605E227F3B098A2A - -Len = 200 -Msg = AAFDC9243D3D4A096558A360CC27C8D862F0BE73DB5E88AA55 -MD = 1C1E758D87399A36BF7C8A2E6A55CE6A4F0C498737956959959FD2AC - -Len = 201 -Msg = 396D32D8553DC0DDC72B415A684349AD9B1BA8E10D05970AC080 -MD = 33866CEDDC96257846FBCC2CB27125AAB77CAEDABA4E8E315EB09CBA - -Len = 202 -Msg = 35DD0644FA89E942858FC0D9A614C1E5B711EF9F178C04840D40 -MD = DF160BEEBB2FE565F668064DC342BB0C9376B25392BD564F373CF643 - -Len = 203 -Msg = E9617EF66F3BF56D461F2C20CD395778FB8AAE1B557A9FFE43A0 -MD = B7775251DF964E09566FE6D7B55E681FE032A89FD09A893034ACAF13 - -Len = 204 -Msg = 6123803C735CD7D81C5E95AC866919C0348D46D4FE04E5CA2DA0 -MD = AE6E9185BF88E878F0A9AC90496F7721727464226E8829EBE25DAF92 - -Len = 205 -Msg = 982408A37B19F65DC9522146F2C44B62F2A09912C3BAB1047110 -MD = D9AAB0AF952499749DD1D0C73770539A719A1FFC969A287012A2E80A - -Len = 206 -Msg = 54EB64D8FB23A010586155CDF5C33B1D864D0F18CCA0C03BC97C -MD = 2D6E7D124FE2470ED1319632DA1734DF6F649AD75CAED29CAC921302 - -Len = 207 -Msg = DAE26BEF8C3A247D8881C8FDE00E6F0805147CE81DDD81B53B0A -MD = C7B8311E274D32DEC013792B3A6C095B0084950B19855A73F735D882 - -Len = 208 -Msg = 7BC84867F6F9E9FDC3E1046CAE3A52C77ED485860EE260E30B15 -MD = DDEA76409C61F6D1873F01A34251C74C37B34F28F7F482A84395B5F3 - -Len = 209 -Msg = 9254E832A57DA5D35623BCB77EE4A376280FBA69225E388B34D280 -MD = 6A14FE14298CAE2C9B33AC4507CA9D4074C1CFD648736BA9B1CDFFB4 - -Len = 210 -Msg = 7F891B766CF192FE504687E1D56C843BB0921E1280B5E7287466C0 -MD = C37A536D977A2A59F214EF353F6F028659531B5BB3B455C613BEE563 - -Len = 211 -Msg = 0B007253F2DC7DF79883A1C7128EBEBE35E0D902A5D3CDBF539460 -MD = 008045AE3F3C95D38E20BAF3BF9D333EE504A3FE91F62FF863E29D24 - -Len = 212 -Msg = D49B562EE6EB7311BA70A8E78F655A4B4853332C116D7DDF16A100 -MD = 46182F39E24E3D189A2726411EACEF91205B9872A7B95366EA8237AA - -Len = 213 -Msg = 5B1D8934A654645972E4CA94DBCB2FE1AF9156853A2DC2D2B18DF0 -MD = 2E4E6693F132B591D715DD95EBECC784ACC03BEB6D055C0A539F8C33 - -Len = 214 -Msg = 9484FF47AB375A83B5E0A83FDE85EC66509706C9181BABA42478F4 -MD = 7D047CC3FEDEAC8F6C341E45DBE4C713189A426D00C39A33B5C6E4CE - -Len = 215 -Msg = 939C03856BDD26D48A3DED1A121342742F5F833A2CDF39C266306E -MD = 1BA055DE5772606F6B062305EEB5351F8963B8A9827FB5BDC4C1C703 - -Len = 216 -Msg = FAC523575A99EC48279A7A459E98FF901918A475034327EFB55843 -MD = 777C523CF42D0006ED1F88F1BD0C3A5EF21814723794B8461A375C3A - -Len = 217 -Msg = F891360CBAAFBC60E0CDC1CAA548329F6A80778ED08874FB85266A80 -MD = 469547DF8339CAC706E49C4A4832E8A2732ECDE158AE72F235398208 - -Len = 218 -Msg = 02CC21DBC82B94B3CFD25B0B5F99C45F14D8485A88E45DA3C6B9AF00 -MD = 6006F65EE5956FBA526FC32EAA1E411942D88A8A67AA3DF569BC3C87 - -Len = 219 -Msg = 42D3FD8720077B184CB3119815CCA28C0D76F259B5D764AE47F71120 -MD = 6824D62E85545D61DC333A8EF199F0E2E42F42A23B0CE4D076B94B9C - -Len = 220 -Msg = EB9B5A62EE1BEF70A170B96DF0D7E8F974EA8B5997E22CFEFE0BA840 -MD = 6154F66ED03D54CFE957C0ED55FC60E810A27290692940CA3FB31186 - -Len = 221 -Msg = 4A1369D63E894C71D6DECEAA47D797EF1DF4E8AEF56F76CE0FFF4B80 -MD = 8B1A43B3EBE3552964A1FA8730EF9360E6C399A077E52DB4DEE57E97 - -Len = 222 -Msg = 4B9C5BB731732C0BC83B1ECC8139164D16E92EC105F66B78BEEB35D4 -MD = 2E26B86863D1293B034BC3E7FCAA2D57A82668F2A8402C26CC334FB6 - -Len = 223 -Msg = 68F41368B7B347819494CFF74E9D8E649BE4EBB287D9B4553248F52E -MD = 79D530FF220C29B99476DBC627EFDA264EE2BE1C4D2DCC6C2BD7F177 - -Len = 224 -Msg = 0F8B2D8FCFD9D68CFFC17CCFB117709B53D26462A3F346FB7C79B85E -MD = 8D7474ED6DEA4626AD3C1D06D2AD5B198CAAD07B12077C680CF6D89B - -Len = 225 -Msg = AF4BE96D46A63B08104C3345CE0AB60EDC88B4104CFB74BBC0238C3A80 -MD = FE508C4F59D05B413063A0F9DDD94F1591F7B6317A1C368345E1C5A4 - -Len = 226 -Msg = FDD3B8E0423BCCBBAA7019DE3E5C7A49A7F5A192E2FB64011DBA892540 -MD = A76D1BA1415961A914600B70ACD9D9349F49A3806BA9AB47C4AE422F - -Len = 227 -Msg = 69DB49ED9D36946A357B2386FD5C652918762D8656F1EA3CA86D393B80 -MD = 3D28365465810B4A44C7E20F998798320B7AE5A681AB04FF6BB683EC - -Len = 228 -Msg = 984557523A3444AB956E0C040B96C6D4E5F93D0F181606260BD7A731A0 -MD = C5E21C94131B4B950129074D519601C26E54C96753328CD016A65317 - -Len = 229 -Msg = 0C6D4DD90DD7F01CCC7EAE273D8502C9B307F9F913415E9207EE76BA00 -MD = 6F256488B7699FA173F01E778DEB2CA2E382C9E8B074323A1771251A - -Len = 230 -Msg = B42F11FE464CEEE0516A17B8B9AE5890FDE0B929007B568AB9F9A9B8B4 -MD = F210310B038A0797455B37C23470500765647B0EB71A2AEDEC25C8C0 - -Len = 231 -Msg = 915BB70E3A5ACD0EC87D5570058A4CF47CAE5A56E552EC102E0F1E9ECA -MD = 41C2920F0A0D217F1AD309E281EB9742048AAD1334FBCDDD207BF074 - -Len = 232 -Msg = A963C3E895FF5A0BE4824400518D81412F875FA50521E26E85EAC90C04 -MD = F525D4515D3CA54A2FAB9C679E93561FE151EA0960751352CD7F591A - -Len = 233 -Msg = 5A45392A407EB4671C94E2181362802E090D71BD19CF1B3E7CF08E999780 -MD = 38B9E6C67BA0C0DC883607CD32BBE66854CA66DEA361ECBC76451070 - -Len = 234 -Msg = FE51F40C4D7807E4ABB5DC347D97E2787F1B175BB0AD9584F8DBC494B200 -MD = 5645480547B6C0997D2E204E3E7D72CEBBC2804CFB0381A7100F1803 - -Len = 235 -Msg = 3FC7400AC8F98C0B419781292E3DBF605BA9DA9C7E7C3FA2FA625BE18B40 -MD = 31D0BA72C5DD2AAD46F9C81CA053D4E5E06A2ED327781725B358AC88 - -Len = 236 -Msg = 313C7ED0191674C883C2E6A46CB162F9F1203EB8DA3CC0979CC46A6EED20 -MD = 00E81E32A232A164566FD96AD8B8BCB5E1749920396A7B89700EEC24 - -Len = 237 -Msg = 7F9CAF49ED7EC9CA1693C0D5700965718F7D6C178B7CA4E577F07FE5CBD0 -MD = 030FFFFF4856B3332C7FA4D403247D4EEBACEA9757573612D9BBFE19 - -Len = 238 -Msg = 5FE7F0B783293004B9D834D71397512B9F807927383B88D996FB32B5D748 -MD = 96A0647228AE1B62BCE45584C7AC000A94E170BE365A123B33F5316F - -Len = 239 -Msg = B94B68ED7FD70E3C30854A2C690E3AB48452ED374786F893F2187FB8461E -MD = 17EA7C780FEC18D27722C438F7306A98B78A526B774DA1F45DA26763 - -Len = 240 -Msg = 03A18688B10CC0EDF83ADF0A84808A9718383C4070C6C4F295098699AC2C -MD = 9A8455F41F693B91B3DE46BF66FF09D42DC300B856B1DC2DFD12555C - -Len = 241 -Msg = FF47DE5C77211D891494904695A30AABACD0CB707C358999599E28A4A2B300 -MD = B7A65E7597805A54032A549EF5C9DD83CE99629982958B3444CEDF2E - -Len = 242 -Msg = E36648955EF0236283244693B5B9FE95C823F6D3E339DE3E1EF42F8E059A80 -MD = 6E29316A6E1DAE6AEE526A338F03CC7B4ED15DE7D308C4984F46BEEF - -Len = 243 -Msg = 9EB5DDA4A42EC1617D3F5BB18369F73E4DAA180450769CC0CEB1B2AAF63800 -MD = 864284174B2FEBD28EA9B8C8D41DC8EC86668F8564424BB7E2FFCEDF - -Len = 244 -Msg = 31AB94F53C25D46A0B436D689663878B757F1380C6796A20EA481CED41DC50 -MD = 017642B04B2F5988E3AF8132880767B3D58C383F686FAA798BC78BFD - -Len = 245 -Msg = 3A77FFCD08FFD1F9DBC4F3DAA172EAA998413E67E6DCFC0F8E502CD9DB9090 -MD = 1A7351CEBC95DD6B8AB70016F5499F19BDAAD06C9E64F9A1602C5394 - -Len = 246 -Msg = E07B79FF758BCBC30164AF289E10788EE1B893988AD243618E8478AA8E3BB0 -MD = C5A7D68636125C6FD3835BEA6EE3D147BEEB6871205B0303D9374E70 - -Len = 247 -Msg = 9E4417A445A11ED1B9F8453ADEEE21E419BAC1C0FC7541C99DA00D53735020 -MD = 74E6D14ED97EA5E0A95671DB1DB7A2A860AC4EC03BB3187805544CDC - -Len = 248 -Msg = 84FB51B517DF6C5ACCB5D022F8F28DA09B10232D42320FFC32DBECC3835B29 -MD = 81AF3A7A5BD4C1F948D6AF4B96F93C3B0CF9C0E7A6DA6FCD71EEC7F6 - -Len = 249 -Msg = 064FA8C3A9904C17B6E284B7625BD70E8B54DAB53D538B66D0A52954F90E1100 -MD = FAEC9080747E2FB70772A3CF165C5D12710D9BB5B73A645A3452D540 - -Len = 250 -Msg = 0372CD1CE0B74CE05E717FC4B9A82CE1A888F4EF7B0027A5D6DC5F8D13936E40 -MD = EE3B0EA29DA89000266B6814DB39DE5B27C312BD74B1BED1C9EE297A - -Len = 251 -Msg = C7BC6DF69FDBB01BA287A66B0DC82F453119B7ADB8AA0F7DF4D4D1BF5E0DBE20 -MD = 2F8F159318F898D01BDFB664B4F757CAD1F5DB4106ECD416B3BEBE20 - -Len = 252 -Msg = C6D8EE5CC53B4BF75956E31EFA8A4BE99D7AB651461FC44E9D16A691F6859D10 -MD = A289B28A03ED34840BF1FF9B871AB3A75225E4AB9D792A5556F35EC0 - -Len = 253 -Msg = E2076C55D1BE257EC034FB68800508B12F91444C99BC1AA12575FC7D7A6A2088 -MD = F292E0EB5074B784E161A6178EAB6158E304694304EF65453EEDA784 - -Len = 254 -Msg = F667B870AA707996CABB9F7788C9357A7A6EA28B2A711DFCE10CC86FC6C6DDD0 -MD = D61232890D95A4239C7CE115AC9377E49B505C369DAFF875297ED13F - -Len = 255 -Msg = 820AE9D30CACE62A961B6ACB37B86A72FD46D1E2E0F9574D3B963F387758FBB2 -MD = 9E499D42F29FC0F5636F858BB5F8DCED3F41825DE799EDFF8CC5BD22 - -Len = 256 -Msg = 9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10 -MD = A27A051A36A1501974AD8E9873E9DF231AA9AD90EC1D7A8BBF8F639A - -Len = 257 -Msg = D5AC1E30C10BC1CD15E27866FEFA48E33AEA2E319868F932A2B84C64663E73DD80 -MD = 16A8E7371A71083B9FB0F59586ADCA1EA9F031E68DB1DE792E06EE22 - -Len = 258 -Msg = 4AB430957A6D231FD5B96442302A63812493F7EB505E7EDAF5D79F1DBF7D3E8280 -MD = E99E96CA6DAE688918EAC7CFB5486E6E34AE6031CC4AC6ABAEB53B53 - -Len = 259 -Msg = B261358A122A159ADBA413F8CF0F2D02D7F9E05901F47A6C1ABA5F9F77FBD3AA20 -MD = 3FCB1F154E4F2E502B0E905A702A5E9318699AA073750B9F21F42EB4 - -Len = 260 -Msg = C479243928CF52640DD0C74157A672EAC366D4A5BA0D4148EB2D09C25C4FDBBA10 -MD = 8B82460390D51E06C5867D0540E7AE95F7F7B5B7C29CF460CA4325F2 - -Len = 261 -Msg = B3980A9DEF20DBE4D286B75DBEC249001E420EA4393B562B2B17DE15114869D820 -MD = CB2F89AC08325BD024D1BD5981BA8432D49E44E2EE69131F7FD1C60A - -Len = 262 -Msg = 1BD985CDE3B3494404E1B4D16B2BED5172D095F8EA8C8F8C347B19B83BA2E92F98 -MD = 5F58BE938BC3CE638F90E715BB20AB16E8A4AC38BA31CFD71D6C1316 - -Len = 263 -Msg = 2B47DAAD44C64F2DAD4423AB3366D82770019669115714DB01AAD8141EAD2AF914 -MD = 32CBF6F9BD9A784DFF929D9877A1076C4C9AA29EA8C7E8B565A120B8 - -Len = 264 -Msg = DE8F1B3FAA4B7040ED4563C3B8E598253178E87E4D0DF75E4FF2F2DEDD5A0BE046 -MD = F217812E362EC64D4DC5EACFABC165184BFA456E5C32C2C7900253D0 - -Len = 265 -Msg = A96D1AED0D267920DF19544968478BFD9ED476D500FBA307B9EE8CB02179629AF300 -MD = E92C11DFBC5460DF259423D9ED6680CFB9887FBD3CEF5EDF8AB43466 - -Len = 266 -Msg = C5DFDACB24DB60BC725FEEB11B15F88D1EEDD5D654E14B9D681AA533A094A9F8ED80 -MD = 5E0FE7288931BED71E1A25CF293A10A6EEA632BCCDEA91C65AA371DC - -Len = 267 -Msg = 9E1D99E9DBE5FA828FBE655788BC8B715EB75E71F225FB895BD4CA6D758D5C03A980 -MD = 6F661EA22D08524E2D61691FEB08FD46381F8C3485C5242C1BE2CB81 - -Len = 268 -Msg = 87C9BD4514CABA10C9D867BDB49C8FFF5BD6BFB6FBB018A67E7D5374B31ABFD1AD40 -MD = B2EE060BE57EF2198C6FF174AB54350937D827763EB6BFF28350AD3D - -Len = 269 -Msg = F9E1A6D9D6792B9F5C3ACDDD9EAAFF0370F7A217983152F48D23AC1CE87E3BCCC960 -MD = 5653877BB3B39CD85A4F593D9DBEE7CF4DA27359E037C3B3F6639D17 - -Len = 270 -Msg = 3F567A6078B6F952DF6E07681E04D178DC76F537B3696DE0640F0AEA78AD0B98118C -MD = B05D53029989449898DD8D6A4595F1D9D5EEECFA431375B56D37D665 - -Len = 271 -Msg = EE6B41172C01654AB7C0CF20B7F36AB0703483E938AEB8CD18E6F9BCDB29FFB3BA90 -MD = 729C0C1C7B9B815C3A109447233F0C37652B88735523F3A56060AE58 - -Len = 272 -Msg = 62F154EC394D0BC757D045C798C8B87A00E0655D0481A7D2D9FB58D93AEDC676B5A0 -MD = 5CA92B5F5830E1E5F8DF4391339DF7DF1F23BB31AA05437C103F1652 - -Len = 273 -Msg = 0AB446212263B276D8A86F20FB75AC94156E2C8D9B1C7DE35049D113AC96FD18DCE200 -MD = E6CBDA1C6263960DB5C979974C3BCFA00B7202921493179B3BC10DDE - -Len = 274 -Msg = ECE9BD39477F2F9B4A8FEE98906D5526D0F994E5D8F6057F13A20DFEB0467C60FD4AC0 -MD = 70EAAFBEB5640EBB21566A6D9AF4ABDBE181E7107B0409E831B169B6 - -Len = 275 -Msg = 0FDD7CD321A364E44EA135DECDA4910BDE8120C1FB23C63C795EB17DA82628D40FBAC0 -MD = EE37453B51435F309E7B10B571D61E6C92FF7ABAD9F4147D43D034B5 - -Len = 276 -Msg = 54210A5886A04CBD1EFDEFE792DCC7C4085B3A2E582A5A4C0F5314B63216FED382C820 -MD = 68ECC1A19AAADFE177C9CE70CA491D28B5C2A286605B38EF98E2AC07 - -Len = 277 -Msg = E4EBF54BDC9F4B1B91A42C0822BFF0BB5613ECDFA1E0A01474BED6897D5A37CB1D7CF8 -MD = 11C64C59D67ACD656A73DD5073C4F25ED1971D51D6E364513746779D - -Len = 278 -Msg = D9C2020DB24BC84887F7DD078CC6C243029ADFF37C3D41A33C291E95837561FA13C948 -MD = 9C05A27CD109C8F0D81108D3E46C23AD8F2E89A334D533CAD62FB05F - -Len = 279 -Msg = 21D2D64C53798DB8A118101B76FC39957D286137A838428042F13D5472AA42E41D38FA -MD = 76B65CEAC437EA7973A36939B1DD7A4390309A2967D047C52F711515 - -Len = 280 -Msg = B2DCFE9FF19E2B23CE7DA2A4207D3E5EC7C6112A8A22AEC9675A886378E14E5BFBAD4E -MD = 9F01F07D930F40A26407760104EFD10D4436295F6B8C41FE2A4E09EA - -Len = 281 -Msg = A40D0922D28BE97EB6C2C071269A0A11547F7D206D39D3C53229078220DAB6704FD0F100 -MD = E4E139AF6A218FC96D3DDCDDA01A80B3D50671B111E4A9D8DC49FE87 - -Len = 282 -Msg = 57F929AEE5B4628EF6FE014E93BE6C509E0FD437B33C86625841AE12DC302E1599222140 -MD = C5005E17F2CCBB2BF3F7E46FEB81810F4D6D1FE742A50282AA63F29B - -Len = 283 -Msg = F69533A9AB0CFDFBF2F5A5D990C52B0533F76A4427225FB6FD458F965655483096389AC0 -MD = C31A5C43EA355CD081EDBB0527B55D37BD7619E2DB4B098C2C4AC438 - -Len = 284 -Msg = 5322E6BCED609A2177C5FD2BC95DB4B7DE2F1884A8D710B41D473BD544AB3B0D8126CFD0 -MD = C48F1E6A377FC32B5C33BB70183ACF28B7FFF5C63849467F102A1C4B - -Len = 285 -Msg = A599E2676154A6E3D1D091953F0399CCD63672AAB01334070020E5D4721DFD96DBC3C250 -MD = 78587A5C7EF92F11679046F56D3E375B52B55A1E94FF8FFDCBBF8EC0 - -Len = 286 -Msg = 6C22766FDE70CEFEADE46F7C9197724211216DBD0D89E2B0AE2273548CBE15C5473C4658 -MD = A0C160ABE2F0BF93CB875B0FF570DFB83B5B58FEF83F48666080AE2B - -Len = 287 -Msg = D3D02C5BE255684FF0094A2A97741C6AC6BEB6FA68CE253CDCE6F315390512D8C9441566 -MD = ACE18337EE24CAF32078BB58511A8ADE3E9ED9707C8E1D3CA16ABEC8 - -Len = 288 -Msg = 47F5697AC8C31409C0868827347A613A3562041C633CF1F1F86865A576E02835ED2C2492 -MD = 22A3FED1F4E298C37A1D7BA0C80E994B11D95F290F3945A3CEB2E2E6 - -Len = 289 -Msg = F1AC7DE5E3616550BD56CC0C77FF8A375AB68D13DE2B722373F140F8ABD139EC88F44BD400 -MD = FC98A3990B9C51B404DB008A549D2272450084ADDA919ACBF615994D - -Len = 290 -Msg = 678527E5C580FA674AF530CCB276BE6E9F8003F428E3F47C533EC2BA518F1779DD78E5D380 -MD = 6DA939DA90DCC4F1EC870DD76870B3A8CEF028EFE96750C7899E2D95 - -Len = 291 -Msg = ABA2217B97DBC72869B04FB6B3BE2294F1795A3186E1DC73B4424918952D0C5314AA9B6FC0 -MD = 5D719B166032BD3464005B3B0B3003B9F8B5A5866CADA185E5F92070 - -Len = 292 -Msg = 332E1B3FC86DB38A50EF54E186531E2562C586D502F93CD60703F2253EDC1513DD728572C0 -MD = D84EA647A071F3BDDE7B5DB2A5324307E69CBE26D4CD42BC2418BA85 - -Len = 293 -Msg = BBD8DDFB18D02307F142BC0CD7589C205809D60BE0D947F1D4B640ABC80FE4EFA55CE3F940 -MD = D095E8AE005FD9AF4E85F0C8909F7CCFC0E2152D9B57D266B9A18E7D - -Len = 294 -Msg = 405FBFFFDD6C1208747AC3220F509CC8702554F8E5C6D1E680963DA085483B87124BC3FDD4 -MD = 422626E63E5FE639AACA2B2A8008E7230F97FC4FC9E604A869FD4AF8 - -Len = 295 -Msg = 1C148D3B7B7425FC2AEF8D56A3DD47EB45CDAFE5B2F0560A7D3394FFE1F268D2FBE9B6AF20 -MD = 55BAE7D3C2D430126439D1B7DEFA25D479A03FA278E5F9E7CE24314C - -Len = 296 -Msg = 512A6D292E67ECB2FE486BFE92660953A75484FF4C4F2ECA2B0AF0EDCDD4339C6B2EE4E542 -MD = 35F1AB1263211F738D3F97D0E4840C387E09369F23BF9239150D0306 - -Len = 297 -Msg = 227D677CF3CC4A9414B92D0469A682A990D6065003E8800AD230F8E1E985A524D795D3576580 -MD = 3E38661F0D40A84BE717C61851B3E6493C31C8C2C9FEAF0250C3DD7A - -Len = 298 -Msg = A613BA9874384B4A8C9F3499E920D06C194FBFECEFBCA745454EBD9A9D396613511A72B78740 -MD = 33E6C788456B12E737E7D7C41268949C4746DA97E7428EBFED5D8AEA - -Len = 299 -Msg = 1C5CFD28B933493A66DC9BF5CA3D9DA856919248E5920909C915BC8FCE40EF1E6E0B0C6969C0 -MD = 4AE508AF12D0D17996FE99AAE367894742516E137F400484B951B098 - -Len = 300 -Msg = 204EB3CE02AB77FE6F3FFFFDA3F7A257B53B2A07E67505C7DBCCCB50832D4F9A2882B98BBF40 -MD = DF24190AAC6BD39A38880E75B33A2D15FE90149FC80D2B7803F0BB96 - -Len = 301 -Msg = 38BFDB67DE50E43150FA5CD4DB63798B5E62BBFF32FB6455DCB255F5C6AACF27B13D47716278 -MD = BB0539DBDD4E122F16300CD3A8C487761819209F4EB4EC3743617865 - -Len = 302 -Msg = 0CF6117A1614A773BD4840F01FD2ECFC04AC73F07C5A94F98A9E3BFCB7985125D4A1BFC9D1E0 -MD = D322D23BC3AE11E98EB5FFE92DC7309286C77991CB03C5E20EF4FF9E - -Len = 303 -Msg = 7462D66CB57E83172A87412759B5F9CDB8600388D1C3F90F8FC8A89E0F3C513769B9BC8FCB82 -MD = 205686161E2F84121925AADDFD1CC1E0A7B9C8E3F0AD6BA77FE89B84 - -Len = 304 -Msg = 973CF2B4DCF0BFA872B41194CB05BB4E16760A1840D8343301802576197EC19E2A1493D8F4FB -MD = 34CC708B874D40478E82324BF3AA32FE9F85AFF8C60B4BADF97003E3 - -Len = 305 -Msg = 3C97ACA85A13A0106FD47D7C59D81C58F2E2C5C7F5C717A6033E6819A0EBE6081661AB141BBE00 -MD = 2C551C66ECDECFF99490A9DA67AF7F69A6BE53E8D067963E6077B604 - -Len = 306 -Msg = D18F5D56D451363967D4767E79BDA1A4A90DE871687084C922EDE4319A6716E4FFB5072D8D6980 -MD = 8A46E6926871C9518C35C14DB379C3D74E1470E7E7F71DD1C404F09C - -Len = 307 -Msg = 557058858B0E5697FC9C4419E6C907A8B85F622519ACA056DD4E3704D8CBC35B91A5076D0D33C0 -MD = 3C70794D66D31CA730C5D3BB7AA466DE01BECA04C958DAFE68C8BF18 - -Len = 308 -Msg = 06B2CEC17D720757AD0B9F832AA958141091B25B0AB2B4920242CC3EE2BC438B04754FC84A4D40 -MD = ADC8EA6C86F99ACEF545F9A53009AE22744A8C551297BD95B610FD74 - -Len = 309 -Msg = B98CF17F2C7EB0E739634CED318316AFDC815897E4316175DCD40DE242ECE3149920E2DA76D140 -MD = 5B551D382C0ED7D2B1B914420BE5F0937A815E8F27E5343721F5ABA2 - -Len = 310 -Msg = 9444C95EA6A36C1649F600A26586135A34F1E56633208C767F4265A9F0B47776E3CD5AA515B5FC -MD = 0BF8196D7C0E400758D5812ABE6B6C8B75B953662E7ACD8F65733D7F - -Len = 311 -Msg = 9C30ADFA9CE9F25A6AFFCA7105DFBDBFA98A0E2F57719A645C5D867F5B7D5F8A0D821C605102DC -MD = 2F7CA890091400F11B7739FC403141214A62A1F0C70E74E60065A01B - -Len = 312 -Msg = 80BEEBCD2E3F8A9451D4499961C9731AE667CDC24EA020CE3B9AA4BBC0A7F79E30A934467DA4B0 -MD = 5F339B2F87E7F695B236267C819BA1705D97644AD72E0871C7E3A913 - -Len = 313 -Msg = B82A59C86DAC0285610218EF2C068238C941F5BE67CA5A5CB471E195B3B93E984B65A6CADEAD3400 -MD = 4655529BBC23330F0F2D23CB9C949F86ADBAC1F43F9DDCEA71D42700 - -Len = 314 -Msg = 8F4806F43BFDF940A0E0DE30168832AC32A3EA1456DFF574FABA15473FCD6F1DC7DA773277678940 -MD = CFCFC4442D37A05D4C51119AC6514D6283E58CA2434C8DAF5D1656AF - -Len = 315 -Msg = AC1264C9D5338FFDAB0FF7F5AAF487F7E046601056B15678180A54C0B1CEBABA915A4E77CA5241E0 -MD = BAAA4EF6110FDAB5DEE65621E11DAA678B54923FBBCBDC7346816C84 - -Len = 316 -Msg = 2CC2C66FC829514F585D9BE4BF8CC7E694323E42777A78C917D33538F6E53B5C7786062597424390 -MD = 461A08495F75A24F0AB80F27C148ABED0F0FC9111849FCC62916BC71 - -Len = 317 -Msg = 29BE069D897FFCA132F8CA5C1D2E34FD1D02603FEAEC338C768F9676FE581A03EE3399AD9CF180A8 -MD = F86CD1536C3740B61D948A30B22493D87A72A6F663F23B33FE77EED0 - -Len = 318 -Msg = 991EB535DCC32C260C0D46DB6DDE353DADF0839FAA4903029B3B0D9B49A3E746D49D8EF3F8271A80 -MD = 3660730321F5671B9E0D7F96065D5070A113F2FB59FFCE8B9B67C994 - -Len = 319 -Msg = CD10861F3A9632FFA513E08DD9BCBF6B2E7BA21CB46D55E724C7D3BE5B7C6145DE686CA9F9F6C20A -MD = 41E216F3D28659F3A6038396AFEDB89E2DBC91A70F3E0D5A49FCE889 - -Len = 320 -Msg = 7ABAA12EC2A7347674E444140AE0FB659D08E1C66DECD8D6EAE925FA451D65F3C0308E29446B8ED3 -MD = 8E20D5C83CDA8226B58CEFD74C293CA7579CBB3949CA9EB2F61565B8 - -Len = 321 -Msg = 6AE52D5CFD459F254563F1AEDF7619AAEAC27C70B83CCF7AFE16DFB4E44AE45346CEF0994DD642D580 -MD = FEB06179893A2B0E4DEBD2163247009E85A2228E286DED2244EED7BB - -Len = 322 -Msg = 0D030F9A2E2A5EAB466D6FBEF14962AAFFAC30C866086F50DA454B9E6AA30A0DB5E620D272C9B577C0 -MD = 243FBF71CB50EFE396A23CAF82CB16B24780227DCE5AA352D8C2D427 - -Len = 323 -Msg = 260B122E4E17495DAA1A9E004C5AA0EE759DB729EB269435EF9D229F41774D4C7ACEAF6352A5628F00 -MD = 15C499ED1CC8AE59822E2A239ECFAA4D50FEAD85D96530D78ED7AECF - -Len = 324 -Msg = EA774E81D5A63B0C7894492C70A0960AEAB24E88FBCC765D5D2AB69F1D66852F715A4A1316DDCF12F0 -MD = 005567CD359AC015E795E00D0E0061FD8327B4BDD345AB76038EB735 - -Len = 325 -Msg = 46020957F94AA4B4574527455E6E9DFCB571A073F066C7707D8FE4BAB714C99515782295ABD51E0628 -MD = AEDF78C40C7370DE9169D4F50D17FFFE299C02622C777B8436E643A2 - -Len = 326 -Msg = C8C1BECD825C7F75CC12F31B1DC070B375768BE540D49F7D8475D83D64DD11891761AC99B1DE6AE2A8 -MD = EB249BD1DC716200FE1F7536518EF37FF03A4B693D9C95153143B385 - -Len = 327 -Msg = 4A5F9BCAD4914FBB2FE01FCEFBE7C7B5F061F3BBFC3289F2275CFAAB8F69312ED88C53FCACAB6B9B8A -MD = 5DE17CC7895D34F03FC8138BF06E666A77CC9C2258922769017DEB08 - -Len = 328 -Msg = C88DEE9927679B8AF422ABCBACF283B904FF31E1CAC58C7819809F65D5807D46723B20F67BA610C2B7 -MD = 606255348812CFB5082F4D4BB6BBC2FEEF044E381FEB0E346061AA4F - -Len = 329 -Msg = 6EBA5B65EA4C5EDE782C7178469530309F30A19D25F36C5CA9061320F2D541DF439F0A6646014F87D180 -MD = 582AB8395BB98AB5E648C86A203E0DCBC30B67029D4BFEB3EC3FD95B - -Len = 330 -Msg = 756279C3F03DA783BF46BFE8E6FBECEC6BD372FAB35732CD8B1ED72C62C28DAE0EBA4FFC02245892E900 -MD = F9B3F8B0CF305E12543FAD3D63F76476983F6A18785A0920253C8AA9 - -Len = 331 -Msg = 2CCB8AB11969F71041A9F18F91B4A76341FA6DE184E9A9B2CA0A4951B128DEB705EA81E190E772235AA0 -MD = 0FDA4E651B6DF43426019A6D6CE55FE74EB3C5F15F0D82E2F6C13EB2 - -Len = 332 -Msg = E6FD7544D317CFF635257BDD529C4A986611D254C7CE5200F5485928684F40E0DB046BDC4B2633AF6AE0 -MD = 324F231C27C002EADFFFC167125F3AC5DAAEE8AC6E196FD887D5ED07 - -Len = 333 -Msg = 0B2173D6DB9B9E03F799B6B59DEBCCE1FFEAA8CD118F22E3A5342C53D4D78A2109D7F1798AFE499F4E48 -MD = 8AB8C63A2D942CB5ED0EBDF5215644FCEA728BA43E2356ACE8DD074C - -Len = 334 -Msg = 29DA389850B6279E146BB9F948913C4C6595DF8317CAF71FC4836B29A963FBBB0F27776F111F7AA7E42C -MD = 5237D3E1E9370FCB9A5C9845E706FBA63B77FF6C9364B5998FCCF0CD - -Len = 335 -Msg = 9393D143C10AE0CA7636DA6CBB692146C86528A9F8C3724BA57C74A9E00FB3848A2473C221529A16374A -MD = FDFAB5B9E39B4A582EA49784EBD37967C2466DEE612D6AB64270ECA5 - -Len = 336 -Msg = 01E43FE350FCEC450EC9B102053E6B5D56E09896E0DDD9074FE138E6038210270C834CE6EADC2BB86BF6 -MD = C885274CC3BF110995FEF1154A86772F28B41E745E86E935B4E3A03F - -Len = 337 -Msg = 7708476C99437E2FD9BE4754BBF89A08324C36D49B27D852034F1CC54BCFED95B4E0E11A7C909E8D128480 -MD = A8A51CA1076E66F9DCEB1277C6A5E44FA70924394ABEFD9CF6185C1C - -Len = 338 -Msg = 12B37259E6C70B2FAC786F0E573A7A467DD9178B7D2EF0CF264E8E12ACCC3060C62A4971E0100BB93CD700 -MD = AFFDCD750AD54CE7A36CBC25E2F3FA644FCE0C6BEAE0B803D6B2DA1C - -Len = 339 -Msg = A5A38B8A372C372049ED7D377535B6EF29AE7574986DC30D0A79D9D0B5DDA3103A9D85741B5D58BE366720 -MD = 80675A862804191C603E3D1EFFC0C3AEFE5886DA3FFC31698D682773 - -Len = 340 -Msg = 028A103A894572CFAAADBF89765D49F1E3ED6DA3F00A4A48E84545B11854D47C3FF0C936E7E897FA60E250 -MD = EFA50881DA3D0CEEAF932BC416387CABAFF0C632E4A0DB1CB923DD08 - -Len = 341 -Msg = BF3AF568D5BDBBE53AD42A2C7D419015A57E47663F0C73837CD483B190C09BFA9F120713E4E743D5394F20 -MD = 1DD8895947219C8618D9DD5DE8B29336115E33D32D7BE57F6B8DF8E4 - -Len = 342 -Msg = 1540A10CFBFC8593F64F4949CFA61E01E577C30C987DC150BA15F6C39ACEBAEDD240B9BA78322D79863970 -MD = E14F841BD9A73520957A12A2E3BE1B445E6BCEAC4872B1AA9308CD47 - -Len = 343 -Msg = FE2DA1F667125A9EB370B832ED0C5161AFAC4BC7A03976CEEF8B89FFDFA61008CF4BA2649D190F2AA721DE -MD = 918806235CC490CF731F237C3CEFC8ECA6C5D17B65EF1491BF2DA99A - -Len = 344 -Msg = 337023370A48B62EE43546F17C4EF2BF8D7ECD1D49F90BAB604B839C2E6E5BD21540D29BA27AB8E309A4B7 -MD = EFA7F7E7BFFA6A5E7F7D1C24E7A0A9DC9A6F72B3E9550A0AAA06CCE6 - -Len = 345 -Msg = 1FEDC8DDAAC6856744AEFD7CBC018561054E6E3585CAB3F46710F6F8A997AB9D9EFC09FBFCEE9EA1CDFE4400 -MD = 451BA5DC9A43B5AC957ADE426E2E4A2209971DA568D2508CEBA82797 - -Len = 346 -Msg = 656D58E735A9AF7CBC79B31C648E200BDE86AEB02349D5FCA38C3C1E57D3BFDFBA46059244A808F528826480 -MD = 175BF95AAFF3261CE2013EFB74E13AD357B0661982A9ADDD3AE4983A - -Len = 347 -Msg = 06E33F05EC6F55B818F18C7C20E1C7BD7370EE97DEC79F723EC80FF86EE286F379B5183C9CD6242BFC2D4BA0 -MD = CAF7BBF40F0E9BC0505B875157B85DF229B0B7197BB8DBEA2DD9D3B9 - -Len = 348 -Msg = 09B73DEF13C73B22E45263E5B9E5F4F291FB0132B24425A836A3BD6295DA7AAE2B4301805933F67CCC35B510 -MD = 9BDC29723E8B6AEBBEBDEC867DB88FCE38A9C37D6E9C524ACFD24BC3 - -Len = 349 -Msg = A2CC0259EBA6A30CF724502773D94178E67FDE7F510C5BF320791877752B815BE201437AE318CFF42BD12230 -MD = 44CA2F0EC02281B2F556029892EC0FD0DDA67D5BEA1ED5F709406054 - -Len = 350 -Msg = 2C76974C31F633D26395D833037C6BA084B345CAFC3858303D552838BC9832017178D72C2468A9CC347D6C18 -MD = 3AE3D59ED964456745B5A1295945930EB1ACF7AF779D74307CCF4FA9 - -Len = 351 -Msg = E0F134DF7984DD0D183B8761DA86000C298E7B8AE7A7308EDA560F816C475AFF5C85ED74103B683C2867E0F0 -MD = 705AD0BA1D23D057FDE49C9BE17C3C3E71912D497F74389E3C5EF740 - -Len = 352 -Msg = 6892540F964C8C74BD2DB02C0AD884510CB38AFD4438AF31FC912756F3EFEC6B32B58EBC38FC2A6B913596A8 -MD = ACA7DCCC6B809D511F4C248CAA5D1374E734C1ED6B995760CC3C56D2 - -Len = 353 -Msg = EB093452BC1B8B5C069C93383A6888CBDBDF54EA27EE2A6EA03866CAD6F8480DDF46010BCD29511FEB34E7A200 -MD = C64411CAD396BB60CE6B2D136C52F089A2D3802C369563F5A85E8816 - -Len = 354 -Msg = 182124E36883F7209E73389F39F72B1840ABEC27A3F072F1687BF1A117E6A500AE98F62CF1512C62EF2ED00800 -MD = 6A12E674C0BD17EFFC3E7852244460CAD363C0411DBA3D7C56CD6909 - -Len = 355 -Msg = 2CA783CB3D5E33AAE3DE058E16527161A84B7B53CEFBEEA929A60B146C92124FA69B61613FB1748832C2C1F060 -MD = 3630E2ED506E9D6A904A0BAB586B6DA86CEF559E33B2084678858231 - -Len = 356 -Msg = 7E36947B12C82FA496D485EDD42A6F2C3C32894878DA04D92F1D462668448DE6ED6276D18C349DE0ED4732B500 -MD = 40182B8BD0BA4A12C94F70DE217B54E3E78C1BE9210CEB5E1F3AF702 - -Len = 357 -Msg = D6AD21DF91125357AD9F6B6D67E3FB441BB479EE5EFA53478E3DE2EE183B3E079432CEEC47043CFF7759D717C8 -MD = 64474D36B44D61A90D7D8EAEB997C93D142E2F3E7BFEEE7310D0BB7E - -Len = 358 -Msg = 15463F7D27902F09F4BFDC40A704B38A6F9D5CB5C01EC8B9BE2C1DE8BD0D02A950141652B8C0E68A7A88C25F9C -MD = 923B544BD3ADEDF107BD61EC9BF00C43017B1D32052003F2BCE04AC8 - -Len = 359 -Msg = C6608A516B83270FB53379002DD11F426C0CAABCEBB89F9F7D89DE9069F7A6EC76699B8503B8FEFF4418206CC2 -MD = 598BAC5D653E0224252E181737D04688F1EC4D0F948CEF04724B0288 - -Len = 360 -Msg = F5961DFD2B1FFFFDA4FFBF30560C165BFEDAB8CE0BE525845DEB8DC61004B7DB38467205F5DCFB34A2ACFE96C0 -MD = 6F1EF55CCC6EF9B68DE54C14448487901022452AB761F84644E9A127 - -Len = 361 -Msg = 501C700F800129EBF944F9F60A87AF09AAB22CEB2507459EA596430594A0607E9CAFE92DCE870F251D9CCBA22500 -MD = E53DE6DD3F8964482FE0DB179EA862663F0FD3022A8BB2BC5C0E750C - -Len = 362 -Msg = 446594BFB8B97519D99B1EF9DBFFFF5DD75DD72F60E6788A8DE42F1BD917B450D76B165E97343353F4659268F840 -MD = EB15628FA1BF4CBB23CE6DBBA3A564C9A65312A3A139624D718B5EC5 - -Len = 363 -Msg = E6E6686481E5A98343D81BE7CDBACB5DCBD7AE77ED892B4EFE2E55EE914B4C4D3F47C31D3BF02AB52733265EB280 -MD = 98142BA6D9CB17724CEC647C931FE29E71D62CB07D8DC9C4F0365AA2 - -Len = 364 -Msg = FD7D50DFA2F48B2D1C72E99336F88F389DF5A1F616F49B616ED4C51C05F6340085267910BA7137B36BF3E9190990 -MD = F47C02BAE11DC308FCCDB93F1750ED0D1F6A8FA2DA351247B783424A - -Len = 365 -Msg = 57D7B43D26E8BAD1FEEF7ADF6893ADE1554F3AA453CCB8EBE8ADBA7A8F9E64BDC8126882F3E8872EAE10EF8D9EA8 -MD = F80DD7AEE599D1733C563AAF983CDB8455E261E35C2FA795498AA16C - -Len = 366 -Msg = 56816DB5D0458EFB764D88C5101906337FDFA82082D67DBA964B35EACB019FBCC202EAFA9966A47656BB52E4E804 -MD = F62E091636CD14DE03364B2FD5B17FEF24930F73DBB77B5252AB19FA - -Len = 367 -Msg = 0780658D267A25094629F1822E2D430573D6D1CB3D057D66BE241278244ACB3EA4418E8B21D5138455A80BDC81A0 -MD = 6E4AB1465EF38B8D5316047F43C30B4A548D974A2613B051D931B6C0 - -Len = 368 -Msg = CA061A2EB6CEED8881CE2057172D869D73A1951E63D57261384B80CEB5451E77B06CF0F5A0EA15CA907EE1C27EBA -MD = B297F61FF06021BFE1B9D350B3F54D810BC16ADE17001BAE1B4CD4A2 - -Len = 369 -Msg = C6CF28AD22398E68491C6EC930B95AFEDBF6E44330BB8A9E46B2B7A77B35E3793E6F684E2103E3954BA173CEE7B180 -MD = CD08A5157C53857F64E46BD18E95E2697948577F24C8DE93C8055DD4 - -Len = 370 -Msg = 245C8B218DADF2D694AF106BDFFDC34CB24D0D00EABF16F94D010AA3D53AFD1E3BA64B8CC419B2291D8BC84D0A8280 -MD = E749508CB81FE5F0D3CEDB60922A0343C2DDDCFCFA5BC989D436A8A2 - -Len = 371 -Msg = 6B3056B6F3768AFFE4952DF6E33D991044D92D8EFF9CB886C0516BA9B15827C69DD5C87A8DD7F3AE53A0928AF153C0 -MD = B7357B374F44696E0BA6759C5CD347734476E7D4DD407EA7929C059F - -Len = 372 -Msg = 7A0CB5B2759A5E0361CB2238B2BBC1306B3605D6EE6DA35B77E26EA7A80C9480C7D72C9C1F0876F2C850A8B9BF2460 -MD = 5CFB1384AAB5A93B68DAAB288F5A58A5380782BA3D41E7F78C7E3C62 - -Len = 373 -Msg = 3F589EC4DAAFA9125ADAD0DEA6C0CC6230ADEDFEE2C5C8483B9C05814452B977BA3E487DE46FDB42788DC076780250 -MD = 141F23FA63E11FB9303FC8125D5479FD788BAC9C96D02B19F655C586 - -Len = 374 -Msg = ED78EF2E98AA9AFD62EE9BB8A531B69D91EE5F8EE701BD97EEAC88C2B09A75056C03DA7F2438FFEDD03A47399A07A0 -MD = E183549AC4A3AFFE9F37A048581E443434777FED343DC9EADB63E1C5 - -Len = 375 -Msg = 7193F965E130AA832EAB17149906EA78B4F2341085A5A1A124C1A9AA182118E5693FAFEDFD6FAC7AE4BBA79E907A4E -MD = 933EC4C94E7171F9B0508D9F72A7C9A88799C76DE128733A75822380 - -Len = 376 -Msg = 1743A77251D69242750C4F1140532CD3C33F9B5CCDF7514E8584D4A5F9FBD730BCF84D0D4726364B9BF95AB251D9BB -MD = BE9A75436C3988FB2FE21D0C10EAD9B9C807DE2E13A9BD8437F13332 - -Len = 377 -Msg = B01795726D8DA32E9C36F37E09479F4571DA850893CE76BB1510A4FFFF85DB3E2DC89E23917955D748A79612E3141D00 -MD = 29A9B70C1AEE7ECB816F2D6A0FFD81A23D3288623A45E6E9EBCAF0A0 - -Len = 378 -Msg = 9BFAD4C6CBE6C8E010C1ED56D377A507FB745DD26767F67F5F84569BD28DF01F697149118B37826F0C064A96BF6F8440 -MD = 9CC959A5FAB7014D7DE8820FBD1DE788C32C78548A9A4018AFA08D56 - -Len = 379 -Msg = 0B36E609EC9B746AC8007967F4445CB9BF020D4FB08D72C893E17CB7632CFA9B43C3C39947AA674B2FA47469EE512C80 -MD = 436C156416BD143D25805A6A584D48B6296A0F1522B2D4D0264314D4 - -Len = 380 -Msg = 50BAAD7D4756E451D9734DBFCD6781FDF01E44FECC02B822F489FF7640A07320DE9E0CA2EF9452C146605E7A942C90F0 -MD = EDE823B8B3AEAE39C15CA965FAFC714FA11B8B348B1EA8BB898B6CD6 - -Len = 381 -Msg = 868EDB30D33E50D2639082F69CD0C61BABAE09129A8AFE697307E95D3419D7B90ECAC04F3EFD627E285C04DEE318AAB8 -MD = 44E66BDA8C9611607D62CA81EDF45B32B887FDEC03735E5B29DAE823 - -Len = 382 -Msg = 9C540C6D4043298DF4BC9EA0B789EFC43216C3CB20D1997C7BEFE94B677A03669C3D7EBD0D3D156D5431BCC1D4669CEC -MD = 295EC428CBD8501E26A733D57E9A544501C6B00474DDE1A54F662521 - -Len = 383 -Msg = 80C9184EDB1C247FDF554231308F15D6C5F45ECF6D21E7D6BEB8EB841410B1146DEF2F9AA9C452EE60361CE6C67043E6 -MD = C2127ED7150ED82817B8434992B99BF8C4606306F8E3358EFF7447D0 - -Len = 384 -Msg = D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9 -MD = 4304582C3892942B1960822C965788B22DE19F1C6D5E204476ADFD26 - -Len = 385 -Msg = F6D31F3C22A3D006881241A2D0F4138A2C3E683C8C75AFBFE1DACBBBB6976D51BB7598210B606411602B04C774023C5B80 -MD = F73B6D475CFBD345DD246DB909D24E60670803E40C250B497E5DA3ED - -Len = 386 -Msg = 9E38E9FC2A49E920FDC0452A2CAB48D187952AD2AEF98D1070BB409E5E363A15F8A8D4E56716225478A9AE429F58E5A280 -MD = 269F2012B292F64F27B35219D8F91BA6E63BB676F6126E4D83635E18 - -Len = 387 -Msg = 0C2B7646EF6BB85EA55D7CB3D15DDAB2F03F74DB6BB92859E5D06EBC364300174619490E907219D3664FC591B36B6FF900 -MD = 19955C1C7033C4446DAFDC61DFAC1A322B21980948229E50FC96AAD4 - -Len = 388 -Msg = F08C6B743F2BE9E64E55BF64219455FCA6ADEC2950599CF90F87D1CBE3E20EC9C2ED5C5688B8F6F68F07D2ECB7E9DC5CC0 -MD = 26AFE636C1E90A7F2CF26996EC0A4649A9095F78C7B77A5DFE769AAD - -Len = 389 -Msg = AE2BE2C31BA294971E252E26FBA821A90368507DA6FBEFBD213C3C2B20CBBA0E4759B61261B95A3715549E37126FED6ED8 -MD = D2D166B8A4E1D95FA51B7E3457E7C46C5E296F42CC23B1F40EE323B0 - -Len = 390 -Msg = 2D394EB3C3F1DC9A6BC8A88E6DA85849A89038B2DD26113BF503169D3EAC0079B56AAD799436A343A0EC5F53E5D9E94A40 -MD = 7B5F1DE906FA8C355686129C6E08C6A3FA7A0FC84A0B9038A20BF31C - -Len = 391 -Msg = 53C96678A5B5E16BD5E23C68078774D685E8506F90FE37DA9F5DAA027D8A92BF50A9802B12C724A30FBC1BCB665AC9FE36 -MD = 578C58D7642E0CA4ADA7CC117C017530B609E8BD1F55A8E080C10433 - -Len = 392 -Msg = BE9684BE70340860373C9C482BA517E899FC81BAAA12E5C6D7727975D1D41BA8BEF788CDB5CF4606C9C1C7F61AED59F97D -MD = 0480EF8519C32F89C65B8DD450025EC49CBDADA6C4CFCFC6FB4F1C61 - -Len = 393 -Msg = B107511A7881EC739420A1F7FA56FE6DC9BC265D48FEAE99E8F6051EE7129F25F90C7D56A6B16F80733E174DCAE715000280 -MD = A1BE8BE0F6E563A5EC54FAE769136A66D617ED646F08B3E0741BE44E - -Len = 394 -Msg = D7661A5026665CC9D5A9676E92BA21F430F044C8F4C61941C8F0C075D5E7C5CF0009B6471368222412A70F96C24D194118C0 -MD = B85668EE58E48DC395BF880273ED94616BD23B4DB7F5F2D3A6C38B66 - -Len = 395 -Msg = A0C5DEAC53C00561B7340D31106E4B61B6B8CDAF7950D5B9AFBA9BA0B8B7418DAE4680B460B1A288029712DDB946DEA0E640 -MD = 9E85402C9399D8F80C70B269D001559E48E5CF31594DD60635308A1A - -Len = 396 -Msg = 06A82E6D3E0067A21BDF39EB89FBD0729618A0803DF3F362F81835622423CCF9177EF5BBACA40EBCC851D806594F502FEDB0 -MD = CE5F0DEAA52E36D7A367DF42D2E8800AF4A04E3E1C53FA9EF84F8E63 - -Len = 397 -Msg = B8284DBDDE2AD5DDB44D04251D9E9A6EF9702CBE564BB8722DFE0DA70A228F0AB8D0164F86772F65AB25FA3D029C892439F8 -MD = 96B5CAAB75C691B5F3254C2A4332E308D0809506C0B95E853FA1C9CF - -Len = 398 -Msg = CFAF722B7986FF2C401957C8BB60F9777309C978520A21A692F47F6BD08C054F4A42A7C1E703153E3C61309F203E82C38C44 -MD = D685B44507BC22FFC352594D3894AFDF8B7B516B25053DDC29D1F2C6 - -Len = 399 -Msg = 9329A4CCEC09FB23008F0C59EF522D1B5D85B7FB3832AE3D6C3B15EB7847ABA6128036088E8E1722166A49565A93B7F11EA6 -MD = 30443485B9CB357411D0D88DDEF5B2CE513516199C8B1B62EE155002 - -Len = 400 -Msg = 7E15D2B9EA74CA60F66C8DFAB377D9198B7B16DEB6A1BA0EA3C7EE2042F89D3786E779CF053C77785AA9E692F821F14A7F51 -MD = 0BDE9CD50D70F00EED97CCE40C3DF22BB4904C08C4177C3A95985D97 - -Len = 401 -Msg = 319ECAFB15FE7FAAD64C4BA7560FB257B2EE2C1E4AA49E8426612938B08D717F0120CE812FFC7F2D005713A1682BB1DDB98180 -MD = 73B372C29E2E4483FAB28D4CBF6FD992ED5B3DFD6E072CD9F2051C86 - -Len = 402 -Msg = 47D9F1CAEE18C889A12A410DCC086C8D863901B89FA5869FF8FEC5A64B065659F57E7EA54D9911BA05E8A57DD222921C505240 -MD = AA6799EE697F86F9676A353DD1AEED5B2711206A3CC92605882954C3 - -Len = 403 -Msg = 74927E91B6F203D54E2E81EFFB4F14889B1958A64568C21053E3DC5A941E14C2077D9DFFC18611B9CF5646DFB6C27E0D304E20 -MD = D38ED76BC8516EC188909DA349B15768B2DC1A2BBBCCF156E72541A1 - -Len = 404 -Msg = F6E46F9A7261261D239C74300F434D21475A03D2AEEBFB546F0C5AC6BC4EE97A197FAD9CC1B3C396C244F8F20F97632DC8EC30 -MD = 508B26849A4ACF4E0A0FE44CA77D189A2C805FA0A60BB665BAEC0A60 - -Len = 405 -Msg = 429DE6D5EAB64B3353736AA20106409B58C0C956F4F751E24CA3D519B730308AFF43232262F1DAE6BE948E87F6C187BA725FB8 -MD = 7DE3776B002822C917E743984DEEAD6FD7341AC8C726161F9B041228 - -Len = 406 -Msg = 429D066735761A1E5EA847E5EE3EFA5ABF2BE447E9D6E2715CF702F99FD2028AF3432ADD0D7F409E0A3DF144AF995B67B46A50 -MD = 893AF071424A4F3C22378118517FE86D4051AE93C0879C0D2FBC9BB5 - -Len = 407 -Msg = 0A798F7C67743E076AEDB61F0BA84D657DA0DA2923AD4D66DEF4D5934C49991427CDBD0134772D97DB1ED1522BA9EB7F972B30 -MD = 3350BD924ABC01FDF49E863E4BC89005DA2EC0832EB38F00748D6816 - -Len = 408 -Msg = 9A219BE43713BD578015E9FDA66C0F2D83CAC563B776AB9F38F3E4F7EF229CB443304FBA401EFB2BDBD7ECE939102298651C86 -MD = 3BF3ADDB761AB32A38B7B47047AD45B68EDFD88ED475227447EA1B1E - -Len = 409 -Msg = 072B844D05C1141680E5A86AB9933E524A9C7FFB0006FD2CEBF48C420AB7890FF685BFDBA54E31571FAD5625C1F08467C9EEF300 -MD = 7CD7FDFBD73CBEE2AC4DD5091013F975E81BF7A5B812F1091E36FDF8 - -Len = 410 -Msg = C6547E7A0D7954F0D14A531E99B6BA3B22B93194D472E669C926FB3BFEFDFC638418425B4F2C11C438A8903004922C9242A1BD00 -MD = 208126AC1407B3B54391F612E38C0EE075A57CF6385CE56880D96FEF - -Len = 411 -Msg = 84844062ACFF2734EF26AAF41303D0E767527DF9C54781EEE27F84D0C3262094612C44A8104471ADBD7B9D2899AE4B751CAD1700 -MD = 7FD1D170F210B860BDF4F7B65F5736EC4AFFBC0A5F913D77AA0E0D94 - -Len = 412 -Msg = CE88E129B93E120B3F80720C43F187308A336418787D20EFFF630885E20948862BB0ECD3539E1D23D05223C988A2E5495A92A600 -MD = 41241E4B9F537A30C8251FA54709044B1B681AF967B2945A901F7199 - -Len = 413 -Msg = 4D4768585B090550A4289861A3EA955EE420D41A04B71199575120280DA1F0B9038AF3F35EFA1B8FDCE29F8F5F35DC6A803D49F0 -MD = 0235D7CC1F4E01B2B71AB92D5EF6A9D2A93F4E817C21361536DBDD59 - -Len = 414 -Msg = 010FE46B5A0E37D07218028437F52F2FCF41063B6CDEF9433769D3AE35885599EACED0BD468E731C8A43986851545A7D200787F4 -MD = 6BB2B89826B9FBD74D16E16F071E6B2A12F3C4E22830B8AAA92460F1 - -Len = 415 -Msg = 5A7586F07BFD09DDC140DCAC2D5F6822EB9868F8258DF4DE7D6811EB43C37624A727177EA10F28943083AF7603F954E5CE1BDA0C -MD = 1F75E148A93585AA7CA7F8A93F0B07E61E57596722E047BDC681F57E - -Len = 416 -Msg = C8F2B693BD0D75EF99CAEBDC22ADF4088A95A3542F637203E283BBC3268780E787D68D28CC3897452F6A22AA8573CCEBF245972A -MD = 6182614C8257EB05E9AC0950E15E6044872E5C0AB2AF4540764CA0C8 - -Len = 417 -Msg = 8C7FFA23F6AF3DF0385B9EBF9E14F6998354025123E95E92023A3885360ED163DA1F430A259F6C535A6E3975A3AA541FA536F34900 -MD = E95EBEF5C1B8B5924553804FA00D3BE413AF2EF132A1EB83ABE79ED5 - -Len = 418 -Msg = A48E78686CEB99446507346AA71D0C7C5D97AF093895DCE569D8F69B16771696E429787C87946214985B0B6EE9301EC89746495640 -MD = 322C949DE8D6F244C3A553A61DDA4C22801782A445C3036543F41FFC - -Len = 419 -Msg = D13CADCDEF36059A4FC6EA141CF4460B93631519A40CE26ABAA635480687A7AA39D15CE827BDCE367C619AF46F838B3B1ED26DFD40 -MD = BE69B2F1638BFB7359F3DEC687BFD89A40EC04537633C53410469200 - -Len = 420 -Msg = 82275CE8689C8466DBDC50AE683961A5C5D4D3A348025498BEE894E8F0D6B9328D7005FABB85E13A48DF19BCDA503234AF7124C980 -MD = B5E88E58A7CCAB2571363404B713D45B776103DAEB04DD4A8F7A8A36 - -Len = 421 -Msg = 4B6FE5B999B90B21DB0CF4B8DE1E4351F80D680C49D3F040869256F6371065FF35DAD6BA971698248931C769B95869855377DCCC88 -MD = F9C224CF474AF5842C82E66095540D813C2F93B35C45E3112E96590B - -Len = 422 -Msg = 3CAFA3937071BB3055C96A364F9B1FA56266F47E03A1A28213166177495A59713C04B7475E1AC2573B979BE28EEEF0B651E195CD8C -MD = 87EDB1AFDA49354E5BAC34E4F3594802516C55B8F96D091745EA0676 - -Len = 423 -Msg = 93302958B1CA9E71AA01CA51E8E6E370D7414FEF7288714EB71F2005CAD8E605C6D173A1617823DCA776AF99A98ECA41274AA1610E -MD = 21AF9E5ED1510A59D1677421FB6FA451A87DDE43E768D67C5968DA15 - -Len = 424 -Msg = EC0F99711016C6A2A07AD80D16427506CE6F441059FD269442BAAA28C6CA037B22EEAC49D5D894C0BF66219F2C08E9D0E8AB21DE52 -MD = 0B5DC722EEA2C348325FD9B3D7F08F365B71D5B582C27BEB79B51D5D - -Len = 425 -Msg = E6F4D535970FD7C9E4DD8BBB2D4B4257E68065391F4DEED3B4F7A7E4FD9E61C3D77394C673571F1AA4640D91AE3318DB62D77F237B80 -MD = 1F423B1CC5CD2044D9F9334125CCB0510CA8E22F5AE0FAD58F1EB627 - -Len = 426 -Msg = AD7CF7E15D97E0AEE75B907BCB48C30ADA54CC6C9F1B3371C7AFC74E176E6A07B1D8624B135102E395AD98A31921EA81F121CBC85E80 -MD = FD9F745FDF56064DAFD9EEC2102AD101D45D9C0FA1F86B09B8263D67 - -Len = 427 -Msg = A9154D621C9B4BFE856394C8C47D5204EF218C54668713568F5C30BFA5980B24B63B4759EF05C16F5E4948BF91BEA979FF990A9EB520 -MD = 6BDDBBCCD4135613A052F09BAE5C7D63B2DEBAB62BE59C83E532F077 - -Len = 428 -Msg = C020B6643B128F27BF4E654D131E6C41669FD6F5941BBE0102053FB0C7CE405574D44AFA98D9E9A41EEDC1B6E21FECFDBCAF89EE50F0 -MD = B6F0E2D7711588784DCAE05FDF59850D71B5D3CDAB03840A3D5CD915 - -Len = 429 -Msg = 3D26CDFCE6E89B4D1A4DB097BFFA4FE505DCB18D0C191836F3978CE1685F7E7FC59F89D71FA443F0EB5A29092628B5ED778EA9D8E280 -MD = D770BDBEA142BBB8B67201548F0609E528AE145F91F7F937C1FB9EE8 - -Len = 430 -Msg = 0BB08EA725002AE244064B3560D147027CED860FC32F289E08F5BB3E33DF133D2AD6962B8DB6BE7E050511D0743B66B5D2238B66DA6C -MD = B540F73CF9E92EBEE941A8ADFB04DD58D654F4D6B909420D0B961386 - -Len = 431 -Msg = 49FF7A3964CBB260C1A624EA3423BE62256253D1128B81E75C3E277B419C0FEDDE0CD4DBB5DF0DBAD5F16ADAFCFE09F2E642F5117DFC -MD = C52D3FB94123E1BB60FFA20E2BE92F28B15B10962AD62E13FDFE6B57 - -Len = 432 -Msg = 0DC45181337CA32A8222FE7A3BF42FC9F89744259CFF653504D6051FE84B1A7FFD20CB47D4696CE212A686BB9BE9A8AB1C697B6D6A33 -MD = 29C2B817C75B6417BC89C262AF9D58F0C18FBD991F59F4181F237038 - -Len = 433 -Msg = C9E5FE547A3E2A4F070F2EDF8915A1AE232DB0A6974D8BDF88D15C7FC828AB82E919B061312404128457AA460B055330E74A72250B4180 -MD = 20E4D0C8EBE14FDE30405B97894301F63F469162E5AF8A04D2FDE7CB - -Len = 434 -Msg = ECDFA7350DD9A1C79FC41FAD4276264510A4F53748BF58BD655D0E041D68D81A839D9D9126753759FB2C2EC92DC690759DB8972EB2EFC0 -MD = 031AD661FC769ACD0EEEAD8082875C18B1274B232AF7B7A506CE1FC5 - -Len = 435 -Msg = 60E9D7F0EAD1F704D626ADD35B269BC6BA9FA723D21D3FFD07BFF7BC2A7F253427C669468413D50DE4E087E6DFB40D3394180F4D885AC0 -MD = AF38FFD09FE981847127901A541CD6F87180C79DB068CF7F3DC08268 - -Len = 436 -Msg = 50D69429B80F785AFD10DC3C47AFCA11D66BA16F591AF56DBF5D283C427FAE7544D06A88F4F2DDC020A90E39231019364963C9D0271680 -MD = DDF22B026466EA75B8A896BA2F84A0CAC1DFAEF040A0369FA8BC0B13 - -Len = 437 -Msg = E3D2906D5DCDEC5910F6C1B43BA414C0F6D8FFD992C2CF76B082AF565DEF8C00348739AEABE24879B1E49C50ED9CC281E25E47E0ED8460 -MD = 5DFD79D7A63758E20F50F43140FECEBB6A4FDE90F208EFD3BD254AF6 - -Len = 438 -Msg = 352FC252E3EEE275D29AF0C2F5803C762259249E8BCBF9F293BFEAD094328454275D817F98F302F3E899A406C8D39211D0BFB7F36B80E0 -MD = C630978A353A0EE83E7D23B4E9AF0B4DF93EF8DE14B4A77B9A164D06 - -Len = 439 -Msg = 6AFF359906DD15357A5262CEB17DD58FF51B74DCF55FF951260CF6A419282752E13B7CA0798612E3E1094202603A2E331792350FD4A10E -MD = 0ABB587107280329BC0ACCEE09417FA4491A10300DEA802FABD44A9E - -Len = 440 -Msg = DE286BA4206E8B005714F80FB1CDFAEBDE91D29F84603E4A3EBC04686F99A46C9E880B96C574825582E8812A26E5A857FFC6579F63742F -MD = 62C5876694D88007709B50900EE2E6CA9505CC90067EFBF4C1D95B0B - -Len = 441 -Msg = 5C0DAFD24AC5712E9772017732C245E30BA569E247F82AFE4D05305375141482A8778D8C5F0D6C5B27BAB687568C04CC1D883466549CEB00 -MD = 886790363C23E59AD48756F6328127499B5BC6CA8127676FD9D2AE96 - -Len = 442 -Msg = 70CB8949582A95F73E1C00831431E1A7AA4372FDAA3DE4DD66B554539E8003DC6638A292E3C07BC09AD007590670D9DB9995F76CC6044100 -MD = C677BF0E7620937D1A0EC7C82C9A4665F7F4AEE13FE4CD891F716CD4 - -Len = 443 -Msg = F1724864E3A8C9EF8F9FFF07224B295ACD1DF21D5CD318F0C8484642BECB45DC9FAE4E18459451DBE7C94524165BB323A363AEB34F12AE00 -MD = C7F4C59FE5A191FF0CDE9C22462D237D9929B62E47C667A57D4EA927 - -Len = 444 -Msg = A5E2F570FF98F95601BCB7EBB0CE9D22FD5A9A0727F10594DAAE511395FE8D48472159B20EA94B81414CA50363A716EE0130881FA81DBC70 -MD = 8BD1C79DE05C9F8D68AEFE6BC26E5329607615AFDCDFD03368611922 - -Len = 445 -Msg = 59C8DFC6BFFF8D1FC4ED4B362A0C73D1E2C47CE11FF4CFC3FAF74B69BDE0D70A7D44C91F21324E93A0562DD088351AF94B97C4CAD3D38D10 -MD = 90D6EC3A0EA8D4DF979B1DE05552F37C6EEC7CFAE21B9CD870554918 - -Len = 446 -Msg = 456D25084E73FD7F8B4E9E0C5A28A3DF6BF72A95CFF996645C0D6989B7C36DAA989F6D570578838D276366101DECE16C188E2AB0D1CBB020 -MD = 59630049979E85A2C369CD35D040CC68CA24111E1DD3A6C2CE3F4AF9 - -Len = 447 -Msg = F6203A102927E1F775EE10391B2370C4133EA999EF76E822FB47B2C47372FC5A0B2F61C467FDA567621DE7FCD29559C8B479AFFEC131572A -MD = 09E07EEF8CB731571D654E1D2EC1FC27C4C7639CDBFCBC0EF981A671 - -Len = 448 -Msg = EEBCC18057252CBF3F9C070F1A73213356D5D4BC19AC2A411EC8CDEEE7A571E2E20EAF61FD0C33A0FFEB297DDB77A97F0A415347DB66BCAF -MD = D362BE7896B2AC3CA4DC3161B7F6C5B3FBE65F32D040402B8D306B15 - -Len = 449 -Msg = 1251A40134EAF29B0FCBBA4E9712AD63E95DF1473C561127B1BE2B64375804F7D54C442B0C89100E66BCFEB906013437E7EC5885C197756580 -MD = D2C2AF1343F771086561F6B1CEB3BB9C5E5424B3C8254F54FA2615F4 - -Len = 450 -Msg = 71DC616856F90F79E04F31F16DFFAAE002EDC5725CA3FA59D2A468F69587D80CD90D1B488F86F481B4A00B447B26AD425E7AC7AD4D09774740 -MD = 0E3AC379D0342FCD3DD532FE6534723E90BB15FE9F85DDCEC8326865 - -Len = 451 -Msg = 57AE1BF18725675EE13EC67FA5C4B6EC1911CE82F73C00F4BAD877D778EF22FE6EA93224262015A5DFCACAE3087807FF8895B72B5C530A3640 -MD = 7572BBDB35783BDD8FD0CD4F4DA8E626DEE38A8F3C8217D5C29707EC - -Len = 452 -Msg = 841AAE4092D3C3ECEAB075CB9EE06EA07AEEADD236767B1595FC7510888A87C4747C3CF4AC68E5093E069423CF98B767EA4098886E1CD64D80 -MD = 786D9587D1607B2A960040E4770BFCCB5956D65863F4F3C68A7DDB15 - -Len = 453 -Msg = 5D6A069F7980F35DB923E7D3DE2835F8878630BBC8751670EBA733FBBF614EBE3E0B03E860334E56499E43BEF8D6AC1C6C9C1588B1A56FAF00 -MD = A5803C64DFA06D9385CD60CF7977B87965C6A29AD06B87164B39B5E8 - -Len = 454 -Msg = D2BC7F70B8ED9853C98C2E3017F97E8B1643C10959227D3D0D334A938F12C53EB3C1371608732A50CD5614768F804B98C9E587858A469B7DF8 -MD = E17379B7FBF5F32AFB2BB785D33B59C87BA253610A31DF66F2765771 - -Len = 455 -Msg = 55B1386C80FBECC7B54207EEAEF70069B1836378558309973FE2836322BEFD420AAAD73E399D1BCA063A590C3A82DF8708B1457B61A2C80352 -MD = 48792C5E8384C577F22B2EFD2C5B289DC535B389CF1F443A96747F86 - -Len = 456 -Msg = 416B5CDC9FE951BD361BD7ABFC120A5054758EBA88FDD68FD84E39D3B09AC25497D36B43CBE7B85A6A3CEBDA8DB4E5549C3EE51BB6FCB6AC1E -MD = D420C7BDF8D86D7B1CBD1AF7868EBC4FF17245595B94959A0714333C - -Len = 457 -Msg = 9F15C32E77E8DDCDF9576D2A17AAFADB77A66A35B0CB244C6F6079A3F033B2B42AE723DA59302984BBCC7D25EC57714F79C7316C81762EE98F00 -MD = 8161B1F88576F6A2A1C2444D5CDA2F3C246C9DF520A4B4A5F0631CC1 - -Len = 458 -Msg = 0C7D0C80FC9D6F36EA9F87C248D503A29761221BB58AF67327DC82CDB25883B5251D3F7F148F5EE32EC47AC70498CA7C6A2EE82B18918B381E00 -MD = 0ACE8C31841426572B59B999AB976767812BE62E3F8FCB896986B17D - -Len = 459 -Msg = 1A057422EDB7E08FCD04AD53DFD7A8C123647A1032F5025DBC7C22916250FCACDF1B2B5DD0CE295EB5F424F541FF55BF6A8D777A571C0B508120 -MD = B50172215CD222191A94301422F3087188A6214DF983808F940E22FA - -Len = 460 -Msg = AC3EACDE274757E1AD019FC3B68250DFB627414EEDE1FEB4A4A313F50BCF18F84EE1466DE13E5AA62E72D8C28E5365873F36C3DF581A7BBACAE0 -MD = 2B00447833449E75812DE77DB270493679A17847131E839A5E4736F0 - -Len = 461 -Msg = FF8748F7DD2AB2ECDC95EDA2E0189D55F012748DD9EB63B3E77802E215431A96D5F59F3A4C9E70F023C2F91C218E308EC8DAF7463082C15F7080 -MD = E7439700B598A4B0E19BAE05B1B75ADAB26E6A18BC821156EA76B04E - -Len = 462 -Msg = DAAFF074211D1E547725C49C5709F0FC904D8944864B0350A1453DE2E56F188DD61534C4FAA59384436F6A6CD9702E1931E675DDB3BD6977B2F0 -MD = 80A9DB039E8210758E541B01E4DDB9EB5DBAECE8FD18795AA373E93B - -Len = 463 -Msg = D191A654280C7618570DE0EC2E3BC1578E9EC81AC48022FFEE1224AECF2A67E572DF39C343E7B1B06E56417FE83233FC6CD40ABF2602BE6FF640 -MD = 8815453736FDC16F71E6A881AC6FE919046B612416121ABB6C9354FC - -Len = 464 -Msg = 5C5FAF66F32E0F8311C32E8DA8284A4ED60891A5A7E50FB2956B3CBAA79FC66CA376460E100415401FC2B8518C64502F187EA14BFC9503759705 -MD = 2E04DAE6E3FDF2A47FF40E6F3E61B371F3E51A5864A31CC11D127620 - -Len = 465 -Msg = 84D9ADC0C9097A66ECBA5BAC63BA2EAD6CC52D95BE23FAD7088234D87A3B6B6B956DCAAACCE94B98C9314C47F41BFB20D601B5F20CCEB86C4A3F00 -MD = 24B72C23D8EA165FD0C3E98F9EEFD1FC7DC7F82AB85340CB9798CB75 - -Len = 466 -Msg = 2B90FDCE3B7D08812A3EE16E47ED849B134FB644A09ED63B274B09F38EFE46E5CB6C1E6F3F4C48CB23F8DF74D81E594C0C16100E1D446693AB9A00 -MD = D072F1D2A4F683DA62310F6FD3847234A2086723E5390C0114666B0A - -Len = 467 -Msg = 883B4DDC623CBEE9365494693358E8DCF0E253B345C12A1270A4937730A04417B66D6E2A3A712560C6A07859EF56EEA6BE39CE1FAA2EA283FC8AE0 -MD = F38C8A737B02CA6E0F702F851A3D0808835DC1599E3F954EE1F6C62F - -Len = 468 -Msg = E679CBB7F00A3902E805D1FE5DD015E7C4692ACD0BDC6BCE9B6C0CC31195E6D43DF50586F030691180543A54836687398FC51DFA57562980755140 -MD = 92C5DF57FCF2B789B325DAC5869F78E8964E10490D4ADA388F8FF30E - -Len = 469 -Msg = 9E86F90FB087F12F7F9B7C6F526B5352EC2E6BA8A1E27202323BFACCD1A85D0DD6456AF7EB02DC01F9AC7800BAE5A55A011AC869EE8E9881714F80 -MD = EEC2B0CFD06D6C14E03B2A3EFF43AB68DF79D0713716A5DF5BD56D79 - -Len = 470 -Msg = F24E07FEC11D49BE67326349510A57AB414774A1C56111B46D988B93AA29BB35E1C1BD47E80F8621C06E8A78D590B30181430BED12B27702168A24 -MD = F45BD3B5264CFAA74076BD6DA6F10EF2DC27D545E6AA3FF27A4A6B93 - -Len = 471 -Msg = 5E391FC9253D20EE80CDEC7B9259C01CE479BB4C97A76CABF722B6DB2F105EEAB8B91C5A4CEEBD05C39138A0E9398290CF6C9C13C62AF335CB0A60 -MD = EE7FBCDD4336507A220404A2EEBD7B9CDFE3E51A413576C0ED3A9D8D - -Len = 472 -Msg = 7167E1E02BE1A7CA69D788666F823AE4EEF39271F3C26A5CF7CEE05BCA83161066DC2E217B330DF821103799DF6D74810EED363ADC4AB99F36046A -MD = 22817A21CFCEC4FD2348B6BE8A7042A37754D76A3F33A8F818312CC7 - -Len = 473 -Msg = 031321978E471EAB14C2EE6E3EACCF57B203A9662C2343CD764A41FFDAAB43D5830D29A15E568767627A116D5B8F47D2363959DC6BA7B0BFF674C600 -MD = B8EE51D6026A11089B3FD4F03CBA9CCB673553BC37A78549365E1794 - -Len = 474 -Msg = 8A07ADE176B3DA0C6CD3C8B40A3CC8C6F0C214C660B885A7486B4E447677FBE0C62284F00A816E3B083D1A4F614C44A5F04E98255B5BA15849767D40 -MD = 7C415EE2EAAB73C53C77E113D42828F51DD4CD0BD4A291AE186C202E - -Len = 475 -Msg = 6C993A10F1EAC2D1BD759277077D7E3337822C428FC92EDFF444C58F106617BE61D23395F77AD6D0C43659CB29578E40BC0CCE1292C637236215BDA0 -MD = B1E25A27280EC28A14A31B55675716786274E2231A357834CF4A543E - -Len = 476 -Msg = BDB3EBAD9FFAFE0EE4E4AC7FDF0A970BE38E8A915684EA15628EF03DAD5454FC353D9EB27A93C428C7A7ACDAC6A4C51E7C35D845782BF6B9AA74B3C0 -MD = 652A83147A6A1BF93D23DCE04F86B65305DCE8E8772AAD5715BC87ED - -Len = 477 -Msg = 04C9968BDC58062E20D602B6BBA6596280EA44E4DFB4F11842F847436C68722B8CF82F9AD7A474B1257A73D3D3CF8CC7CCBDAB52DBF2C43D16A82038 -MD = 45B6A9F3056AFD62FEFE9002EF03561B024C86F533485BBDE9A88D19 - -Len = 478 -Msg = 33FB9B9C1403340C038504CE1BA613725788CB765CE9D1A359F15BCDD2BB888A8D0FA370312048601E29536297738485160E1B0F3FEF938A285A2A74 -MD = A7094E119B4038203BABC8DE50EE2078EF2035DA275DDE2BEC01F5EC - -Len = 479 -Msg = A5B8774B9D957DB574F9D6BCD8B888E70E746F3EB240DFC9507B3983B8F2940B6625E36BEC3100C90FDB40182BEC5DD007276FD1281AB704792F8E16 -MD = 050A1DE26AFC8491F551EA29BED8D2FFD083198379C55BEF8B5A6363 - -Len = 480 -Msg = 2FDA311DBBA27321C5329510FAE6948F03210B76D43E7448D1689A063877B6D14C4F6D0EAA96C150051371F7DD8A4119F7DA5C483CC3E6723C01FB7D -MD = 68CAF2203317A8BED30C1792E888910124F2F0EE1D24D47274BCC856 - -Len = 481 -Msg = 72B72F086513EABF4CC313157CF04745B40E5A77A04206103005FC3EB7A77D1EAF81B6F9020A1BE6BF7AD8C0C2011D8AA8F18EFC0620B893B50EA03000 -MD = C442B1E725569D94FB6B0DF7BCA87E8FE99998B8A8471231D9B4E687 - -Len = 482 -Msg = 7FD02685386254BBDF27B52E5CAE59FC7BAEE3AFD2ECA52B912738354245804D87D0303B6060D076F2F12DE3FD19F475AEC0FD410CC14794731806F640 -MD = 808276BD2C5B9ED5D729D8322E52785D54A41A56E023CB6D6CBF8FDB - -Len = 483 -Msg = 02DAA8B12F35FDAFE5AB24B236E00245256500D472EFF4904E954DD4397B9F49DC142DCCBB1C2B3B4D3AFCA3FCEC4EFAF9854B3054901A53A180168320 -MD = 0CB8D3E8458DD87443F1FB81CE3663DFCC599E339A402B53EC135BC9 - -Len = 484 -Msg = 260632DAC6BD8BC667679202D38C471383227D0715AFFABC37B6593544B3799C257DD168BE9B39576FCC583FFB5012629E60C44A51FD67BD432047E2E0 -MD = 417FE54F0009897044DDD5176ED9001A5AD116C35BB74CF29269D9EF - -Len = 485 -Msg = E61BF690723D45257C7B2004E8CD05D876C8D792D94680D95CA2CD869FFFFF5ACF9D0B162455AFB6F19B8C60C97B2D8CEFD4F74AAC7034204DFDD7FA68 -MD = 8584E275769ED3DAD87A452AD849179B72BC1D2E3409D435197AFA75 - -Len = 486 -Msg = CF719DD9A1256446A6220A91F975E26934E33C1CEBF2D5DFD7FCED270B7073D3E96F2215BCF2844E4A25FD506567BABF039BA9F622F935410ED3F6BD58 -MD = B578A0421DCBC0F9A6388FEA0DD4610AC65C93A91EFB67F0575A2460 - -Len = 487 -Msg = A6E86899DDE05DF1C81826047106FC6C258A4B6E347411CB66D28CA203DADC465548D1986C17E548465646CB95801A2EF4E6322EC13320FA551E2651C8 -MD = 2295D8D019753ABA80D981D1A99B46291BC95C0068BE51D26AA0C458 - -Len = 488 -Msg = 95D1474A5AAB5D2422ACA6E481187833A6212BD2D0F91451A67DD786DFC91DFED51B35F47E1DEB8A8AB4B9CB67B70179CC26F553AE7B569969CE151B8D -MD = 7BBAC0C0F192D2C479348358D2247E4C08966A512F73D40445B52EC7 - -Len = 489 -Msg = 1090FD6C2652EFB04DAD880724CB7414743FCFB4F93CF8312CB0B463CC27FE18BE9F745C499925F8FB4C43C11BE87D17EBA1359FD2F9E5CC2C40A84E8A80 -MD = F559BF905F4D41355A86C88240BC314FB86BD5E26000C376BBFA11BD - -Len = 490 -Msg = 723BB81B01FAB9DAAF8F48B75557DBAA5103773C0DB24168BFA06886E6AFAC0EAF5A943669EFE84B0E3FF2BA6B681C4A16626D3A3DA58BF6D4781203E5C0 -MD = F9BFCA80A711FD81034C68353F5704A15CC92B576FEF5838C00A928D - -Len = 491 -Msg = 6091F9DFFCBD33C3852046578766797323339BEC2414C7DD044D60542C38DA9A5A6F8B385BB1BBCE2354CE744CED5FD673E7C9A4F50E6298994328A24CC0 -MD = FA699BFB30DC2BA51DA13B03AC358BAA13137A9056A644ABF635B0E7 - -Len = 492 -Msg = F406EC84ABE14A45CA8F161EBE319125E83A19E4452AFD47DB3BE542501A405EA7DA19C317006C1FF9FF7E305C836881638A56C0427181809139C1D21900 -MD = 8F67C5D63F5171AE40051C0072AC570755738406616D879EE4E9E975 - -Len = 493 -Msg = 1F3DDCAD0F956BA1A34322731FFB1E58C46C66A0E9E5D60CC08E62FBEB55E63061894C13B334D2FC0B9B8C0293228F2A4BE36FA91B96054756264697EC28 -MD = 507002AF4E17B39CCCFA8C1FD476ED7A993D9AEBDEDF74BC43AC8E7C - -Len = 494 -Msg = 3AFC3DBCB3FD9F4ED17D707AB37EE10590A8F3CE8F49E3C5A99077AA2BAD362F81D715B7132E62922A629FDD5A746C36FA97A7218146B55D559C8330497C -MD = B2EDA0A96AB0D498F5AF16CB2B22A171EBD34AE2230CA74473DBB067 - -Len = 495 -Msg = E4D811304A25E7AD7773FCAC8F028E60E4BAE3867EA81FD4B99FA53FC7991F34937D7278C146865F5BA10352CBF0FB8ACE858B42B0A7EFBAC0F62C6106F6 -MD = D29BFC5BEF62ABA86406BB080CB6D907D96A44C4DCB8563DF0C3370E - -Len = 496 -Msg = C71BD7941F41DF044A2927A8FF55B4B467C33D089F0988AA253D294ADDBDB32530C0D4208B10D9959823F0C0F0734684006DF79F7099870F6BF53211A88D -MD = D226D9E1F36EC4222693699B6D0383C1452E391C41EFD7645289F8E3 - -Len = 497 -Msg = 061AE36ACF15BF6AAAE8A35A8196E13337FAAA50340FD70FF9F0CD02E53C3724E84C16EAFFFBC09D6EE55F3B344E6E37ACACF3B687B0F44CB06427A23B5400 -MD = D783C409205EAED0D17E7A1B5F171D2430F9648F3E29AD82535F7ECD - -Len = 498 -Msg = 98B5605377B6A50833F0561B7AED5FEADB5411A7851EBFC8F9156C82714F6A6A07ECF372E4591F91EA3F25AADFD47A2220B55EE2838BA02ED8ECFAF5FA8280 -MD = 5FB3B186BDDA1BBB8B7BBA1F79558C3B8AD0E93997BCBEE29371B2A2 - -Len = 499 -Msg = F4CC640571758CB1BB7D83B8D4FDC9BC8AE34EDDE4867D3ED464593F939C646E9725553DFC9346CE8A966225A716FE520EDCCB6F7CC064930E0A8D89DA76E0 -MD = 3821698332DC7E88D55509D11B1D9D19DD4DA9140C4A9758D76D6446 - -Len = 500 -Msg = 67674ED72E45F150D25F661EBB7F60F21A6AB07EC53EEAE794906E0137959B034F495A1DF0E71D9934C28944C4693AD7BACFA66236157E37746A6D165BCF70 -MD = 000D3A0FF92A653923DB2F719137DFD0B137E7E4E75698768A301A59 - -Len = 501 -Msg = 19513D84D7B9FC5D5C1C6E57404888C6D201B6D6D054D346EE000933FA7467E0E4A6AF3A065498B4055EA1AFFC9EF805C4D7161C58A9EADD68049B9FCDAC88 -MD = 3B33B9693E03B47D2C8A3345B8F3045C497484275D5DFB8BFF021F9F - -Len = 502 -Msg = A8D213B9586C9E81AF32CCB8E70E1E76FCE9EBC2FACF250F4DD0D826912932A3045B0BE6DA7839361FBDD8746B4855D08E99DD94B7196A77538269EC06E370 -MD = 3A0DAF8CF7ECC988A86776FD0028BA04BFE6FE0311BF6B96736EC5D4 - -Len = 503 -Msg = A1D82877A8B3C98D68FD9937CFDA320688798C2BFBAB2D55C078D853E3052D17F349BCE2F875756B442D26B54C13E119C0FB96C5DEA16A05208A53FCBFF950 -MD = 1A661490594AC565E0475DB4CF629B22BCADE3BC6F15199EB2E10959 - -Len = 504 -Msg = F57C64006D9EA761892E145C99DF1B24640883DA79D9ED5262859DCDA8C3C32E05B03D984F1AB4A230242AB6B78D368DC5AAA1E6D3498D53371E84B0C1D4BA -MD = 294A1E5A0629A2736F188691A35FE1ABB55472785DAFF6CD88C6D537 - -Len = 505 -Msg = 8473DC5382DE32957E3A15CA3D791C67D20CF9EFBE3E46407DCA5D02635AC86D2E0B22C76D7D080D362E82758914CC0AE2B89BD35F71D84492D9430742789C80 -MD = B8CD6A113482964890CD7E664163DDDE99E709DBA410F7C0FBE806F0 - -Len = 506 -Msg = B9E3E2755ED1215381B24557EE14F8CD2687A071AEB3C74F421CFEA3CFF8A6EA0D4BDA2AD4BD8243CBA72B481CBD526E1EFA1D9FD432B987E81265824429BAC0 -MD = 4E3FC7899504D4677D2D07BB307EE2ACC64414093D45A2F5D076652E - -Len = 507 -Msg = E8332535E9A2052467A10205C87000BFC6A68D73962E69E4E56F10BC79C633C52F4D0074D6077595B660072E10740DFA66BC1320469A3196E021E1327CC03AE0 -MD = 0C417F17D27ACF37952E1C2B8D37FE6F74FB656BF9ACFF3D4818CF21 - -Len = 508 -Msg = 6B078FB58DCF9A52EB84BE6EEB7CA87DF711160DB96D1FEE6A289A299844DEADC99BA30FFDB77FFBE36B62DA8116D59512DB3813ECAE09459ECDC5599343A8A0 -MD = 3EF04391AFA7E5A50B0BC5DABAE2ECBF659EDCFABA3850E8778BB093 - -Len = 509 -Msg = 80EE82DECF5B9FD94A7A8F9866ECD1925715DEF457A43DF01AA1196101A91E1706A31868305AC282FDB8018D19930A07E229BDF92835BF544C585CA957031538 -MD = 62625E1BB073D4CE117D8549E74ECA79DB2C9A94B2DD1E8B09E16896 - -Len = 510 -Msg = 15E0FEEB0F7010B047634E909D4646454FA1F06D7DAE63E831191CAD21604FEC81FF4FE69E540169A752C82CAC9C167E15C431F29AAF752B57DE63BEB0319580 -MD = 44713F9C002EB516F0E01CAB6C2C4997971EBA9BCC6E9A365F7DBBE9 - -Len = 511 -Msg = 538989EEFA891A2F2FDB195E6C75A36FFD9010B0D58419CB209EA58178284E38491A0A8549EECC27ED31C02E24DF4321DAE90E6867DA851898867D2993997300 -MD = 29CABF778FFF9CCA844DE52DC541E7EAA3B21C35B0A2B2D05395A536 - -Len = 512 -Msg = E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7 -MD = C533DCF88CD1A5DFF22B914D3875BD57FC17B2E1F474AE360C3877D2 - -Len = 513 -Msg = 559EE28FF19F91DFB5F12A4EA7823F7C6F6AFCFE31FAEFE1DBC810521C59CCAB4CE747B6A37E3E700C4DB3B243D2210D59FA18CCF344BDA10089ECAFBD2046D700 -MD = EAB1F419CF77774A90168946DADBBDD198EB8F430A72CFFA693A1493 - -Len = 514 -Msg = 3369763B630EC3D1F8DF47DA9804FB6AEE5831D5B5EED07A3B5FD8DE1B96F721825AAA698164F58CF1F3DAF8E7790947E8698E718CFE1808D571F4855BA312AC00 -MD = 148C8A3FD7881F89585DA616278BE0C65E847EE8B3BB673628E32CD7 - -Len = 515 -Msg = 6CB17B2EA081DCB1B2AE30BD5DD5A1A9F845DAEADA0C0F76CDB3E45DD92F1516FEB193AE54E85678C16DDC174C1546985520E54F45CB1E03AF7C27A9A89FD16340 -MD = 46D35C0C3C292921309B807BFBB1C76CF9FB174477A6B2FFA0CA7257 - -Len = 516 -Msg = 2BFCEBE7E89132B9A809595E5F224712B4DC34164B8AAB486490291353D176C2CDBC967C325887288CCB7BFEBA29A4778B13FE78C97E2707EB5501096B700DE890 -MD = 6700E5C83921914C1306D0477FE867770BB493784F4992E8907EA2C7 - -Len = 517 -Msg = A3E70F2D2137770818805804DDDFAF6C5D758AA50101B255B9731EDCDDCE604F9A336B4ECA8370FF56B96E8C2379E26B94BE3B5D659CA4550AC2CD50F25EFA26E8 -MD = 864BAA8F77F47674466ECF3056819ACF1CE17778EB65D9837F8166E9 - -Len = 518 -Msg = 2F1F2DAADA4BEF1649F2E6DCF226CC626183FA45FB9F8D561F5E12B96A7888A16D78DD177B0CD8B153E02768AA408A1166630F450394FEBF8B76CC08F6B545B0D4 -MD = 71D4948F798FA4F97739B48A5441433D28744CB4133BEFB55DAAF883 - -Len = 519 -Msg = 010348951C308EA6CD8B9E0D3D70AC0469AD4B1A64B69873690041177D4F25FAD90BC94A719466079400AB2BFFE4A45AFA49DDAEE6962E3EFC615A4D6EF82C5966 -MD = 0C89E5FFA65DC74FE6F68BEDF3CA2BC6C759D4FDE413A82EB56673C3 - -Len = 520 -Msg = 16E8B3D8F988E9BB04DE9C96F2627811C973CE4A5296B4772CA3EEFEB80A652BDF21F50DF79F32DB23F9F73D393B2D57D9A0297F7A2F2E79CFDA39FA393DF1AC00 -MD = C9B7AD7A32B70DFB5A8A2FF9D98B300E484B996ED752A732D84DB6F7 - -Len = 521 -Msg = BE442CCD00200140AB3E88FC0398AD7DE7E4EE191A3261064D53922ED599DCC855AF4FC7C8910FF871046F486FBFA66080A8920EB2AB4AAC2AF2E28B0F7AD3499D00 -MD = EF668FE6AD4670BC566029D21C5DCD6BA668AC568733A9CFBC55C945 - -Len = 522 -Msg = E3A99A6DF6DD46AC6426E66F8F3C0D5E106D2CDEEFD318D2B156D63D83F2ED89C6620A05D95EA0058F34DEB935797E33288626D18083449AA9C8A2A2AAFF573383C0 -MD = A4B0F2560633DF7CA66AB6D4969FFFE46429D967E9D92F2C426E9968 - -Len = 523 -Msg = 2F7AA4AC44632140E9225BA95CB9BB4DA26AD78222BB746D1D98D8B57FFCD00C2D5AC271487FEE2CC27A0D9C62F3B577DF3F8B88239E2BFF2934FCC2A047AEE5B9C0 -MD = 6C3722CA5AA29B5CFEEB49676E6CF149926CD33F35ED975B4B45643B - -Len = 524 -Msg = A1EC099A79B5A35A4223D4C881F0CB11414BC90FD2FFB4667F1DEA99858AFD889D6D1655A19E46FD629C6AB50A7B4C41C5B4E23C6ADE46CD1312720571A268E39B60 -MD = 8EA01F4793350BBCBDE14FE668CDC3FAC743ACF00505953CDFC2FC6A - -Len = 525 -Msg = 8E5973C1A658519BFA2D40C26CC3E73314A14019F7D8A2E66C1DC510547250BFFA12299557902CA95BA718CB6ADF2ED8D290ED7F390FFE44D11AE6E3D9C62400CA60 -MD = 54F8134F212FB36FCCD4CD6EF5DB21B0AAD5D1C52F90A06C4449D299 - -Len = 526 -Msg = E00A470BA681EFA0F966BE976F98C42036B34A116154E4B4E10A6CD5D14F001673D95C1E0FEAE1C0A5A9F80F8A1608AC3C9A908EB4CACFF8A5C8BFDF699A4312FD24 -MD = D37FD4FCD47351588A765ED85C8C9C19FFD42169DC4E57EF42431BAF - -Len = 527 -Msg = D923883110D5D4F4614C59A9189185ECCA7C5B99319022617382CE2C2C5E8699220F0B0CD0A43B474759BDF463DA0C5165D661DC838FC24D7C4341EBE9E190EC5AC6 -MD = 83FBA453E6C633EA3A7D61EB5F76C9572A9D87F46E27D7D76C4BAC81 - -Len = 528 -Msg = FC424EEB27C18A11C01F39C555D8B78A805B88DBA1DC2A42ED5E2C0EC737FF68B2456D80EB85E11714FA3F8EABFB906D3C17964CB4F5E76B29C1765DB03D91BE37FC -MD = CF646D5E5C81818C97A01F393F8033CE3CB7CCD07FDAC9988766BD1C - -Len = 529 -Msg = CF1D9DA31D5673D04A9514C9C4940489A3A7D5F92F163B653F8325C1E63947E7E2AAFA97F18F61FDEBED5168FB69BEA9749C48DF8529A2D371FBB9B62A52D7CDC19400 -MD = AA3EC3EAD4BB42604A9B233AC155CD7494753F93532AC0EB6F572D2F - -Len = 530 -Msg = DE0C2162926F18E7B7F04C967E4EABD01CCF78F36645A732782C638C8B67974FFB9309E12FDD140CD880360509B2112EB2C03BEC4FD03C2F658FDE72E524C861CFD400 -MD = C543D9151128010BE6C3A691AEC6D5E66AA568A47CFC3E7E45D9BD9C - -Len = 531 -Msg = A05C7165CB93CC0F09CC1D9D1118E3CAA9AEC51EBD44D10897D0771FC5302AE55176FDDEA05FB01EE4956BA342ADC7BDD6A50D74505828D87EA49EC62273E32F976CE0 -MD = FA39F6433D2EDCD4E373331FF77DB8FE091F575E7B5C5D74EFBF34DA - -Len = 532 -Msg = 728AAD14235696C8974370D9238E80BD16A93D050C865DB08FA06C5E4D12EAF1415D59DA4F7CA16981481B10743AFDAC95BC8292CD837DE24692AB5E70488016140B30 -MD = C51331B65F7BCB4E75FEC7926141AEA075A2E768ECC3C4F77CF2B78F - -Len = 533 -Msg = 59E0177EAB8DD3EF68BDDF879D196D651E501F878C364B363BFE1F291546F6A9286161C569C7078C97DB9BA14011807B7FCF671E692CAF601FFB4C76F8E8289A280C70 -MD = 7F17947CDC6FECA8E11A38CD7F378F9810C73ED0337E9A3056E8B596 - -Len = 534 -Msg = 2557EC19609AC2F7B3F80AAFCAD251AE9406E68638C6F34753BF051A89D19CFE4B13D03B4D4966EDF8565D18EED198E295209C93308CF7E83AA41DE4A1074D19F6D8B8 -MD = 444E167CEFA879A625D86505AB00D3087964401D4BA8D8D87A076DD2 - -Len = 535 -Msg = 0C6CAE1F4A2400C0E320993AAC01CD5007B32E10ACA1690EFE071ED9CB980DBDBA2B08B90A01026D2B6781E189B05E394AD5950152040A4E10C97BCCAC7B2C1A0A83A0 -MD = 5455AD3BEDCFE9501CB1C91577D3746B816E4E8724845156FDD52C57 - -Len = 536 -Msg = ABE3472B54E72734BDBA7D9158736464251C4F21B33FBBC92D7FAC9A35C4E3322FF01D2380CBAA4EF8FB07D21A2128B7B9F5B6D9F34E13F39C7FFC2E72E47888599BA5 -MD = D411E8A7CF50AAF91076A8CC5F01BF5B6BB2CCAE8046BF47871891FD - -Len = 537 -Msg = 4470C0B4C5821BCF0B9EA25B6F7D90C9C50B063FF923CEF75638D73621B2F4F5B56D92DD720536357B000162DDF401FB5475C06C4C88F80C38EB8FDC8617F661037A3E80 -MD = C4867BABF3536491902F3B9A3030CF94630445E8391C265288014BDA - -Len = 538 -Msg = D138F1008FDE534C233CA94A79C14FF6B3BAF4B365FD8176A0A58170314BD70AAC14E58561E8A9C47163741365A31801F5F4B6E32AA8E3F4439890CD30AA97FDB0A6CA00 -MD = 00CA02DA2EEFD78E925059D0797A2D157E741FF711EFA38576561BD6 - -Len = 539 -Msg = B4578CF28E7891C9CC1CC79D0F4807DA6A5C37441ABD483B77C65E502A318A86AEA5581020CFE9E9E6A230DD0A529AE90E84086209E16779CD3DC0753713F830532C96A0 -MD = D4D471E8A0FCA73084BED65DDE71D96030600772D63AA37DB34EED59 - -Len = 540 -Msg = E33A87CDDC83DF9E9DDA70693E20C31F13F7766F63BB97547B9676D9A6BC999DCC65EF9B486CEC34002A149E840C3D87864C90AA1489CB7FA9C4167E475CBA337E485A30 -MD = F5FDC8660A26437DB9CA254C46F0BF241940225B2C2BE0929BC297DC - -Len = 541 -Msg = A1238AFE1839BBC600C8BA91C17BAE23E1146BBA2D76FDE1A9EF1FB7BDE3D2D9C7A3201E78F2800040ABF26D3606209C4D22FE53370DD03CC8B12ED95272A9A5E1557820 -MD = 733B3D891E10954E83C55CCF8BC0079D33A810E5C4B7156424F869F5 - -Len = 542 -Msg = 5489A48EBA7457530F8A2723352515FE794031E11CF5FA57128448F9709FA27CF20E3E379FF7D5724C0A55E3550656787EA45BDF7510F5216388320112AA692A8E33E704 -MD = 50585D0FC3B88B36DE23250D4A38CBCEED7426B85F95BAF4C371D6C2 - -Len = 543 -Msg = 2EB78EF630423B07F50CD987F31EF94142905400E5259BCC235A51027B153318352CE56562436588F6E332570F96E873AB189C1DB6264E91FF991401720D25F31FD4343A -MD = 16841A4BA8A5DE8EEEE2D9E0E558BFB412E83F0B7B5194433F1062B2 - -Len = 544 -Msg = 36F9F0A65F2CA498D739B944D6EFF3DA5EBBA57E7D9C41598A2B0E4380F3CF4B479EC2348D015FFE6256273511154AFCF3B4B4BF09D6C4744FDD0F62D75079D440706B05 -MD = E094C0303D1841C6E4C0864857CF36CFC980E3CB4D78F18E301117C4 - -Len = 545 -Msg = 7FBFB37A08D050D584F6D58862373E1627DC81CD0F650A4980A783487FF3D3ECEC71909DACA59F13A47E2F7FEEA949A5D444587B5B9B483B5E5D25776047CD00237C619380 -MD = 3D32A2601F59B9E9A1B631C5E90A79359F757306190A6B82241E910D - -Len = 546 -Msg = 3BD3EC7D914EC6461AAC5412025903B049E48584325F81AC822B7091E992A36B3401C7349170F7647D46715F440C5FC40608FC97D01447B65898906F5C4E61088AA7626340 -MD = DCE1C58A8D0E8C73FAEA263E1DE6A4F3E3F2AC989EC2654B0784A2D9 - -Len = 547 -Msg = 2516B94FED3FA3C8C8892F0EC0AA8F74D9295904810095BF4F88ABEBF93896A8F0256496182B76A9A1D37DB18D154E31D07D9A87C38712549365DCEFD2291A46520856F1A0 -MD = F91DD817FF7C58F3C8732C4F0062FB32D99F9F16AD5AD0D0A04BDA25 - -Len = 548 -Msg = 763AA494184999EBBC09D59178B44E0F24102A737CC43C62FED6B5F6B175531C00859FFA1AF9FF292283078A26A602BE4C43DC3F54C806927C401B905CD0D73E6B1A853B70 -MD = A36D6EE8D4101053DB54BF72B36ECC4725D1715D6CA74729DCA870D6 - -Len = 549 -Msg = DFD617A8BA7BF6C2FD65A7D531EBF0DFF617926830D0FF1E146A03F103422648C645907F47ACCD66FB6E510CD3F69AE9D43A69EBDF6B32736F5C1394B2FC5D445EB3E72EF8 -MD = 09352B5C287410B56D516B2C7FD1B22439264F50A9B9EB25A500E8E4 - -Len = 550 -Msg = D2321825C805E9BC50BB8138ED2102FEBBF4A48D39C468C576B055EBC4008FF8317E544BF78AF36E021A5E1809F5032D84C7769EAC4A59D346B64957D7B715AEDA82089C44 -MD = DBF02D3758C2E4338C325B1384CAAC49420BA51E7B17C9A6F87D48F0 - -Len = 551 -Msg = 3D97DE13463FE4FBBCA43FA797A7594614DE028CFCB477033EEA9AA00FC7C7CC085B130639CF3AD64401EC1ADE15C7398BF115F4B33ACC6B9F2F20CCA6DB7F77828CCD633A -MD = 28BA99643414E0F2979E38BD5432C790F88B793B5226DD082CB5E441 - -Len = 552 -Msg = ABC87763CAE1CA98BD8C5B82CABA54AC83286F87E9610128AE4DE68AC95DF5E329C360717BD349F26B872528492CA7C94C2C1E1EF56B74DBB65C2AC351981FDB31D06C77A4 -MD = 51948E1772C2C2EE49158D02A975B27477BD041262954C3E60F5ACC2 - -Len = 553 -Msg = 37603DA843EF88DB2515EEF27405CC61410C4E2DA79B6C8606FE93343EFECF6180729350408F382031F9322EAEDDB85899997DFF332D029FA2EEAE0050B2DCDD25198F0F7300 -MD = 27D79D39EAB5D30D89C1826A35FFD8A415B428BD404F7731E50099EC - -Len = 554 -Msg = 3248B698D97B6F9D9EF74359134F24A653A66A989FB1E6DEA74E4D13C1843EBCBE5B8AF1629C181A095E1B3F4C2F1B84552F006ADE5765BF3EBB8C1F6FC2E6D234E14B193AC0 -MD = 6EBEB660D6EB497845C8853C0492E876B0A6D5D6677CA6A4957EE119 - -Len = 555 -Msg = 2680D25D09089F163BE9F8D1F5A08926B71FE579BD82A31CF3EB1039BDD5244D0D9F14649843AB97547F65B443C7F2337914C8A2395EAE93F0BF1C43D8C01EBFD58C955741C0 -MD = 4FEB032F135571322919DF8E2A8F7B511A460B3D612A2A2AE029EFF1 - -Len = 556 -Msg = EB31208EC2EB7695CA12D5DA41D70D247374D6877A4843E63A8812EF8518C0C2E0E224DDA708B88B9F958219E74CB5A7ADE195FAC3690DEBE41C0928C5DB54F8ECC6FF3248B0 -MD = 515974F9807134CC825DFCDE6D89436DF4960D20614BD3BB17370EEA - -Len = 557 -Msg = 757324619B2F5A81EF4126DA2B22E556FBBCAEB03D2D71AC77F8F08792DD8576960293EF62ADE524CDA00FAAD2D0FF33C60C001B352C29AFCBF0DD995B5085E3833B55C0C6A0 -MD = E362E6A14B608A7F92A255AA7DE282440AA8847CF84761648BC9AF21 - -Len = 558 -Msg = 3F7727465659B9BC8379A1BCE9EA8636F07135ACFD75AE2AB86D96691B7797C10170E6EFFB1636608C18EF065872BDD8938567BD9E76F5ABEC4052C07221402C93401486C6B0 -MD = 45596242A92135444DA04241795A050159FA7DB72D53C517E87334E2 - -Len = 559 -Msg = D02655C3BFB9521DA291885C9E448526B25864570ED209E33CE2B65BA737A717022A95CE93A719166B0D8BC9EF7E4AFF721DFB1C1730B70D9ACBA858E4A4A9359152921EC73A -MD = AC1B7669141B46C2E7D2669C92B2158043B5487DE16769202245B9F1 - -Len = 560 -Msg = 94F7CA8E1A54234C6D53CC734BB3D3150C8BA8C5F880EAB8D25FED13793A9701EBE320509286FD8E422E931D99C98DA4DF7E70AE447BAB8CFFD92382D8A77760A259FC4FBD72 -MD = 8214A2B0E8BB60CD3E4DFB0D0855D0F6C4BA6D2728D0687BDF75F79E - -Len = 561 -Msg = CEFFB8673C1722594E925B0B9E7CFFE54861AFDAD2AE51528A507A25F26E19498EE305566788A05CDE16FD8F6C92F1049047F89CA1D46FEC489C745A12C79633F13C927DAE7380 -MD = 4A33450CFDD68DB967F68553E6D7EF2AAB925825CB6A028E2320809C - -Len = 562 -Msg = 9C46E4954EB8286850B9AF257EDA31286625F8E935137E6F582B2930F2167BA25DA85C2C4949100CB391B214A097615CB8A9E8611A9D9F94D54ABC3865E1F28529C4FDCB16C900 -MD = 7CEC6DF96EAD764794DF3D307E455B135D4CC9D1DE0AFC427F9B938B - -Len = 563 -Msg = A56641438A5264B3DEA5635B9C9F308CC1DB42C882ACA9B6839C08618BA6E2D771CED4450698E2AB0C1C489BD69EB1D0A79F90A2B9BCC28230CF151F827A4D6762342869AB4D00 -MD = 047211850F27C022465509A9A789BD09E2011DC4C393A9A55A8A56A6 - -Len = 564 -Msg = C371B57FA3CBE85892E163BFA45D95F803686466FAB99259458ECC7FB465D25F2EF17189DAF7643468822AAE499FE5227986908032B68A8AFC299CB70339722652E6B8D7B75090 -MD = 2A0B9406EA2219F8FD59F7160BB4B1AFC55A0288095214B5F5C2F816 - -Len = 565 -Msg = 114EAE7CE0CF58F7FB56676C4936BD7B018CEA5C1B19F08AC785CF9CA1F034607BD30B574925B3DB0BCA5CC9C0F3D4909064CE15B637D38691FBA467438B51F0E02D723E45D3C0 -MD = 9CA32B52CAB103C1E496CBEB0F8F0CF48CB9F3398D719C80F232AD32 - -Len = 566 -Msg = BFD7C3C1B5D442B4AA3DDC298B95FEFF68212C64233AAC2319C630B2E4916911C0CC01399D3FE2F699A70403652B3FCB77601E0BEBB9832B50E33ECAF033E4F7AF9565C1B25874 -MD = ABBADAF2F69BE2F1762D3F438D1DE9AB749430AEE0171CDABAB8A26B - -Len = 567 -Msg = 02462D5F711B30301F0A39E0397651EF0FC444A701D8177A1E76BC77ADF9C461036EBDF678DD10C9C9F365457A07F885BE5660B4768D551281DB67EAA5283FB383A8702E637D40 -MD = 526BF698BD0C546720DC2E62E4C87FF527C66AA045F383D2AE117F75 - -Len = 568 -Msg = 13BD2811F6ED2B6F04FF3895ACEED7BEF8DCD45EB121791BC194A0F806206BFFC3B9281C2B308B1A729CE008119DD3066E9378ACDCC50A98A82E20738800B6CDDBE5FE9694AD6D -MD = 8A2AE6B9AA7B1E08F8C7DC3BF5AE876660D30F79391714A175381091 - -Len = 569 -Msg = 1AA7751BB1AB38921AA754162F00E8DA55DD9A5959FB1B316D6F622A6E7D27D6640D4B2D13FB70B30B87AF3D5AD06A1A7746AAD25979AFE91925D28E1B585ABAB56FFD6E41268880 -MD = 69249B93566BC437FD020A8DA1282402354250BC352EBFE37CB89A1D - -Len = 570 -Msg = CC592E8F00C441202D834185DB8B5B9441E1AD1024573260393AF6D69269B6414D5E5C2BE374C9A9DAC4425693ABA78C729308AB3E7DA6CA43B91A717FF0FDEA4EAA7612F229C780 -MD = BE4185274FB0886B76B9224C38DB871260840CBAE1583BF85A0A3E34 - -Len = 571 -Msg = 18057027D18CD129DFB5584F87C48D8ECE475A366F33C62736932F55CD9ADE656B6D7F27EC182DC565B5FC6E3E125D4A0C5904A3666CD79F611562755C66D87EE6038B10C1E44F80 -MD = 44D6E89BFF2E0E8AF2F900E4AA107A96B89F9884C28A1679FDF46045 - -Len = 572 -Msg = B3C5D348DA8B5AA4932E196713FD43A200B5095207CCEBF0F2F347A1C565C1F709231D8D7B3AE4E11EA4A71BF10C75FBF075D5C88E846D24C607D93A4992111D7AB637ACE577A700 -MD = 10C91A3461FDD84163FEA49D6DDE9561B22CBACEDB359BDA04CEA135 - -Len = 573 -Msg = 77E244AAE547DA970AC2F73B0AFF4D870EDCCA2E0EE14B1F6F2A8702E4B482162B12F67BFCE1F087A7F240C9D0CC0706991E63800822B2F948BA553503AF630F4C182A1FDE676F60 -MD = 23BA8A9BEDBEC396B9D8F86909018F1202D6F6E4ED63F758B48DCF7C - -Len = 574 -Msg = D34964352D3F10A58861BCFD9E492E30FB3FBCBD1090532A83590EC4B56A52B2E9AFA17E9C2B803143AE63915754D4887CF98C5B8BB8A48AC5535EF72B75CDA7612931E71D9E9E6C -MD = 189F3E39A45FF9A4AFCEEE3C75F15DB825C6DD706CF82FF407E92A41 - -Len = 575 -Msg = 5610326DF88C0154A99B962BDAFDC56A0206232EB7C2B30C40469D8011AF8F176AEC5A416A992C71A9F94E03E4F7BA079E4AF5174B7B0CE06369156D45F9385384D07CA55D837D10 -MD = B125395F5CB5E52EEDF5D65B73021EFB27EACCBCC88DAA92913E04CE - -Len = 576 -Msg = 1EED9CBA179A009EC2EC5508773DD305477CA117E6D569E66B5F64C6BC64801CE25A8424CE4A26D575B8A6FB10EAD3FD1992EDDDEEC2EBE7150DC98F63ADC3237EF57B91397AA8A7 -MD = 702B1906A63D0F924AFEC3BB5E5C5742E85F9834EA6F5306644811A1 - -Len = 577 -Msg = E2A6C7C31424B9B1E391EC72D45A0758A41B7794E6161FE1B4EEEB2E9F345B45DB8B64097D0D2C09E3C3C5380822E62426DC169E94808B6E6802D27C067CF3A03BD1B2AD2B89483300 -MD = 96A6389FA8C560D5D353BE3D30E67C5AE0D4A1DA1931A241022F9B27 - -Len = 578 -Msg = BFC9C513134AA3E5813C125CCF279F33FB95A36C540274ECAC1EEB43189B2A1299F6F76F4F381E3D33576AA4BDDED13148314779C5A84AFC52CBBB8B42346466D3ED126F0D4C466400 -MD = 500E970C86490CD1E94F9DC999099AA56CEC38EDDD0975E64F18420E - -Len = 579 -Msg = 2A8E0C4A157E09AC3A83F7131C30599B3C8C8CB8D1FCABC4E9B606E265275C0680843CFDF1DF70AC5BAFD472F6A3AAEA93E2E51DDE78192D1D5313A79754926115AFA58B68D39DECA0 -MD = C9DA95D652C391CE5EDC22DD014C37E1B121C7C8D787B0481EFCE209 - -Len = 580 -Msg = 7F08ADFA726E42B95752387BD6248128D4E52706344AC7290314D9814356A121CB1EC7D7B018F0DB15457FBEEDEA5E1A1CCF627B164DF5A341B6E9AB23D6C79BFD9359578669B9C000 -MD = 302C9509BCEBC27E0ED6169528622834AB9FA9591518952E0DD05925 - -Len = 581 -Msg = D0885BFD63E133FFDBDDFBA5DDABE302CCB292AD79C6CF2C848485446178472C123001A6C06245B0E7725B6C278D556E9444A6624EE3A612C27A194C76CF8197B275EFDD3042FC8600 -MD = B5E4FDB97C07CBD0D4D3E4752D0BCF75165D4F3E23F6E1346887D835 - -Len = 582 -Msg = DF98AAD16AB9EFA536176798654E6394668F576C9D6DEF29B6085FA29C9878966EFBE223E5F56D5BB69E8B27AC9B23F4D89A856EBA58EC5D20C7EAE6E58102BDD58C57EF843EB5D798 -MD = CB3F60759A52CD09707E1E3FD065C4AF5D512FCEB159468CA4ACC016 - -Len = 583 -Msg = 9881E0C17927FB375634460158644EA6549E3F866FEB6923A99E3548108AA4E2420CB8C280991BAF535E28047EAE07832D543278459E21156F90B913C1FF926316CC813DF101007912 -MD = 791F6E103A8A780EFFEEFC18E0D94E34F020724430B1CFEFAF23CBF0 - -Len = 584 -Msg = BA5B67B5EC3A3FFAE2C19DD8176A2EF75C0CD903725D45C9CB7009A900C0B0CA7A2967A95AE68269A6DBF8466C7B6844A1D608AC661F7EFF00538E323DB5F2C644B78B2D48DE1A08AA -MD = BF2101511220B7DFE54B127C2476EAADFD4EAB7FD0F6BDD193078AC8 - -Len = 585 -Msg = F116DE7433D03DC10339E3661D06EBC8AD264DBACD05614B09119970AE3A85FA80D8DBB23403FE2874A967F66732C1711C455E6F299111F5B0FA378519D7F25CF945BCE7B8668203FB80 -MD = 5CCF03484CBCC0877253752C952994BC5967D8F73E65ADEF8811C6EC - -Len = 586 -Msg = CF33DD0DD4CDDB006109E02BA6CC6ACE8EA839DE2FC68A3357C1758EA1E2775E05019F12F2CAC5C2EF594D4F1DC26DE2F9543FEBA34E9F0475508EF848D6BEB4C26C2417BF1CC1419300 -MD = 24EC2238B98E9EC6CB68890917ED5796E92C273A3AF383C5AB0ACFE5 - -Len = 587 -Msg = E32A1614AB569B1E5A897DECCB8D55CAF82CDAE61D0EDF09BF1AF52163F1E63668C4AB8E8A0CAE4C82E0E187BF5260CB9D2112211EA7C12AD08758EB8AEAF3258BFA07081D3038ADB760 -MD = 9F2EC6310A18CECE9195F013EE758503AC9EA505F54748793B07FFC9 - -Len = 588 -Msg = 870615E5FA42425D15D4DDB1920D99BA17844FCC6741BFDB1238B907B1071E241A1FE9D6122C40B640056786D516DB3C5495793EC6BB3309BB66D53D623FF4A28620E6613BD39B51EEA0 -MD = 0C4EA4229409CB0D8C40468F77277ADA3A06516FAFAC8F94AB8B137C - -Len = 589 -Msg = 9B1FEFB7B55DE30D70525169271683A21320D0E01C38CD630A79F36B15D05CE96B622C586F48F4251C948546760EA88D470F5BCEA84CEDADE74A0FA68A001F68C6BB1EEF8BDB6630A400 -MD = F7D80560910BFFECD42034F3E8D29B39E3E59BF63D5C87CABC7ED38F - -Len = 590 -Msg = 6BD0B9A20EE65C9C4E2B5ED2662D01876E76FD98283317C7941A6107D40F06EC88F6A3B235E073F7963F9D3DFD178226C6AE1C67FE00C2266FD608697EDADF07AB4F6C0303E82FBEA000 -MD = 06A18C9F5FA70FE09BFCC257F88D6FF455E81E8EAE3A2CDE1A76AB4D - -Len = 591 -Msg = 43DDEFA4D3868E5C6671FF04BE2969549E9728D876A800879D84363EA77121371DCE33832E6092945E44CD5D8EB33ECE8F459342BD47A0A1D0BF165028119EECF77C154194E9E41106EA -MD = B92619F52ABF131E23B1AE345E2AF953798A2308BF299DA485C422F0 - -Len = 592 -Msg = 0EFA26AC5673167DCACAB860932ED612F65FF49B80FA9AE65465E5542CB62075DF1C5AE54FBA4DB807BE25B070033EFA223BDD5B1D3C94C6E1909C02B620D4B1B3A6C9FED24D70749604 -MD = B07ADBED912723A07FA5353F665EC14FF82D85E90BE3E5A1F5C90FFF - -Len = 593 -Msg = 89ED3A52A979EEC4BBD0191089043B7DD1475DB503E1B9CBBED58C46D81C9493F15A9832411C0B5455696B1142945CA022B4845299ED17B3EB276DB83DA3953433BEB873DFC1152DC59A00 -MD = 8BFA77BF2BA9590DA2E094004C1CF615813AD08B1B5A66DF9A4EB474 - -Len = 594 -Msg = D6D1EF350BCF8029CC20400775A57090045D7D9FE4D51C52B4EFADE7E69FD952CDDB66FCEA59DDA899A6578B0E4C115305895B909241D4D1ABF2A4DCD97CAAE0E22563B7C6A61009C8F040 -MD = 09A108E6DD90A60BD68C7A8E6A7DCE7FC4D530AC31D7C0028645D69B - -Len = 595 -Msg = F535C15710C29512FEA5E1388C742D3D181C5F52EC4FB9EABCE691125317D7FC5C4098435C0FE6BC44323B8607A7CF9EE56DAEB7048939940DA2DA4AFC1CE8652AFF60C53F72198E2902E0 -MD = 80E3A139890EA9A86C7AB4C4C4AF20CA7DA2332DF33FD168F28879CD - -Len = 596 -Msg = 4606C6B2B2E9EB8AEF7D956640FAC17D6A2FCBC407B84D4B4C7D852B2121F08CED0AA8544EB2DBDC0AFABEA2CA0514C744637A745089E3B534EDB8E5D9E9EE7DEC904CCF7DF45365F8E020 -MD = 5CE6C00D834EB7FD195AD54F5107CFE81B18419BF58772628EF36ED2 - -Len = 597 -Msg = D7AA2C9A3EF05452042FF75509A59521200DC3A76B77F067AAFFE475D408E055768ED33FF1B95572942BE792868D390700E82D2217DA9EDCD561254325EC98B3F85A24063F25F51E149110 -MD = E602980ABE4CF85C97A0495DB38FFD76B8CDA75E6778AFF735056482 - -Len = 598 -Msg = 6D812DBC3315206E516E52D4E810CB0D274DDB5586F192066645B6B7E7022F36787CFD6E98E553FCF15BF3F1C8C07856C4D9D44D9715ACD92DD02CD68B6C95A5322F8938F2654FEC102344 -MD = EBC2CA36CCC6C238098A1593F632A8C1279ADC7C4B4D5293DF3FC1EE - -Len = 599 -Msg = B22FD723C48AE0A1D2B6440775FE49A44720D30E36F1D8D07CB5C49A79BF432D62B95F1A13C6D51D35B6B8AF12517CCFBAFE0691567BC337338312AD24066DB73731CBE66F49C76ACA085E -MD = 5FF50289FB8D87E41B2AC7AAA2082D98F3EE074901DC669E372954FE - -Len = 600 -Msg = BBFD933D1FD7BF594AC7F435277DC17D8D5A5B8E4D13D96D2F64E771ABBD51A5A8AEA741BECCBDDB177BCEA05243EBD003CFDEAE877CCA4DA94605B67691919D8B033F77D384CA01593C1B -MD = D1718F0D387AC427111A7E90E575DE5F04778EA2BA147A8451914FF0 - -Len = 601 -Msg = 0C86E4810BA7A10163172A8D718D80CF20F519C4191E8080B9FF3A6A21ECB913A14A05F04576BB95E38676296D708D74CD30CFF86D103EE2A79FCD6E39A09912D0CF7671580E0644DC74C600 -MD = 8CDDC7962A34A00DA8B55A6E443F387579DB5038893DF8CA68F18EB3 - -Len = 602 -Msg = 869BEAC3E5B5A3FE99018564592A004B396DAC8DE9F47AC01B5870FEAC4C0371D7EA84D4AB8E199959B423FE069DE86273EC4A73DC3D28BA66FAF7E80A26AC6B3525E530C03A2E2E30992980 -MD = 90C7BAF00F452F56B87842E8F21C86B04422604F12A7A919B13A0336 - -Len = 603 -Msg = CB2A977A3760DF60DDA2EC3A24865490299D27165F4497518B1F3471C1BD73E1FAFD2CE0DEF129B02BF6EC9C08D903C3A544F695FBDE5945C23975B0AC0CDD513810CAC6A998251BCB3E6DE0 -MD = BD0EBC447F13B4256358E991E935D74D9E8F576DBB376C86334FA62E - -Len = 604 -Msg = 389B167E0A47A88EFA81870A0E8D8D86365B57C7CC3D77E0120685FAB3DB28319348101E1453B56F671D7E92D50B7941AEB88E493A1E1D9D06894DB8CE83C6F57C218A9652A5302BFFBE32A0 -MD = 124938272625BD8440FEA0C067E038CEDDC78BA7B5787BE6A5068C87 - -Len = 605 -Msg = E5E15235A5E5787BA52BA4BF335C297D36A96B999F230942B6A8FF1DC4A64F9917C6D564E27EA229938BEA691F70F334011B8C03B778E616FBE1C220B1564F3519144FF35C73AE1E98C4DA28 -MD = F47E52CC8C036A2DF5C9FED29015A9F0843685745DC2B662ACBE6656 - -Len = 606 -Msg = 1A0F8F926C0C9D4E4CC4E1E5F130DE44EDB8544421AD3BFD80E28D092E2C878EBDDFC62F484BC30B3C93FABCC924A5B9D3A7FA227609D921BE26ECB46D112CBE5C5F91B22F54CAD85EBC2578 -MD = 56DEA72C884C1B0B92D2D80257B80E763D9224FA6D4FC40788141C70 - -Len = 607 -Msg = 6299776218D85291AD65FC0E7782D3D03A6FB17BBD72F3C93A210BC49956E3AFD3BD048B49681300DB7676337271DFB46C22AD929DA6365442ED785671FCF2BD549832614270DE119B086EC0 -MD = 3E2563A0E28CAA1B9D5486C3029650CD57F4D8AFC7817117B86BE872 - -Len = 608 -Msg = 90078999FD3C35B8AFBF4066CBDE335891365F0FC75C1286CDD88FA51FAB94F9B8DEF7C9AC582A5DBCD95817AFB7D1B48F63704E19C2BAA4DF347F48D4A6D603013C23F1E9611D595EBAC37C -MD = FAF7D793024E6D05E77C5231712478822C915292FCC1427E6ACFD3CF - -Len = 609 -Msg = 32B722648C5D5A9558B328581F00BE0473ACCB994A92533904E7691A83C179D22A027CA97AE8FD09DD5503A307D23F03DD9979AEA237ADC9D76ACBADBB1C482D5FB3023AA194ACC84D4428C700 -MD = 457CBF48A1554941FBDBD13D0B3C7A82AC88052751C292165793A9F2 - -Len = 610 -Msg = 3C33B1AF42292D4BB3E86744DB23DFA39914FB81885A564A52ABCA01215D552F6CA3BF56F201086232DC24EDD0B7683EB0F59E9FA96AB1578F8AF44AF903AD496E11B4766CEF3460979CD83140 -MD = 7D16C3E3B44730AC760E9440C8D31B2A9B1911F23B5258FD2403D3ED - -Len = 611 -Msg = 1A3051F42AB45179AD429B1616BFC686CBD15FF02D200FDAFB1F89A38CCFEB6EBF00B30179CF0BEF176A2D4CA63CAC0FDDE1A50BE122F408BACE72EEC6320F98AF6ACA4AFC79185B518FD8ECC0 -MD = 716DBD7170793FCAB07153D3A140223635032CF890974B7E07762911 - -Len = 612 -Msg = CD041C63D5330432294D0926228B1EAF6D234BCA839CF4C9EC8C823415FC34450214AFD2E4975045E6E933E8BF9EAF52A998EA879A06954488E95D0A3359F601EA5401201DB5FD8B3B01EB86B0 -MD = A8CA69B456A3AB995D37E406A84E719109A6F4AB13E1437F434B7DAC - -Len = 613 -Msg = B88574119E0E2765562879FE7171DFAA8FDD492AE7F4D9DF4B858AFEFD95C55BBA259267878FCA3BDFA6B1BB23189BFD81207CCBC50482E830704FA2F3EF5362A0DDC6DACA3A74413E78F97868 -MD = A34B960B78107E65DC3D54EAE4EE085879320F674BA776269E683717 - -Len = 614 -Msg = C2DC8467DDE39EE6896D915A7B4ED9F3D389FDE2D19D176857891AFE62E7FC6C3070AEAC3CFBB07BF32EA8978B689CA890A083644E54C4AB950DE65AC6270E2C8CACB766C8C494818BBEB09068 -MD = 23DD7D0550791DFF5D29495799701292A032B083382B69C686B55E94 - -Len = 615 -Msg = 03DC684CAF8ADF39F716F19E4E899E8CFD8CE1F75D01FE529A85A2B9736A00C7AE6D235E48C7CFF83B08A274E8A1F71142781A40132429808096A1E442EE6A3F76DFD5EDCE623DBAE00F7AC3F6 -MD = 8145FA8B654ED08BEBAC175241748A551ED690A154B0F33EED33EEEA - -Len = 616 -Msg = 64105ECA863515C20E7CFBAA0A0B8809046164F374D691CDBD6508AAABC1819F9AC84B52BAFC1B0FE7CDDBC554B608C01C8904C669D8DB316A0953A4C68ECE324EC5A49FFDB59A1BD6A292AA0E -MD = A375D756A8F39C72F67CA489C95F99350FFD0515B151A3BFF288CAAA - -Len = 617 -Msg = 9A53A66C40C574D09FB5CC46D7BBBAF18D392FAD22FDA037E45AC895FE32A1B35691AB42E697E64F27239BCD0B3B9929FC4A2C8D730AC3DF39AEB066282E1F7B73984F0BBF2BE4EC40AE8B194280 -MD = 4ACBF4A3F46FC731DE303261C0DDE8B379A610575A64E54EC23EBD70 - -Len = 618 -Msg = 2ACF3BA8177AF3BF39D6C75B4ADBFA997FD201D5C489260AFFFA0ABB9E4908417DE5B29B005AA277A82F8BC6153AB7AF6A9B418357F2DE6D9AC4D77713695706C99425DFD70586D29AF60863F0C0 -MD = 157AE2A0CF5FCB980BDC8E11F14CACB400C4988FF51E56FFF9755F68 - -Len = 619 -Msg = 5C38BA82BFF584A77A0DA5635C2FC3B3E82E43A2BE5C338215735A06CB679228A5AE18853909E64561DD2F5600E5AC9C5456DBC9F6CD7B3EFC2F925BF4412B3B82148C2F3091B259283BEC309F80 -MD = B7FF3DA7DA29A636DE23D4D00F599D4D123A4911190F1610BFC21CA1 - -Len = 620 -Msg = 9E75EB68CA9AC9FB4F4AEEC3805E3C4C15DA0DEFDC9678F5062509BE84B1BC0345E25E99C1D2B7E2399FEEFC39E84C3042FBC7CE27D702547D6648D560FAC8268114A96E079BF4721D53F92E16B0 -MD = 614FE50E0161534D8913E3AE995AB5A2319D6060234107E29E975FD9 - -Len = 621 -Msg = D4565A61C040688B23AE1AD10FE5934D776ABEC6E718E91EFBABF51F2DF9AA572A5427048D98D1E7813AC854FB348081B0332052127FDCEA10D3F40FC924C07A4B41EA70342BCFA4CB79EC8B8020 -MD = F75FF72CBE7930C5207DEF4D36A98D112D2832FAD92D4F932BC25EE7 - -Len = 622 -Msg = 83AC1F77EC3B31443B117F2936E1FBB7F5D635CD84E0178B16302D66D80923214FFBE32AD36CDE4E2B62CB7EA91DCA5F0DD9AAD99B50B984F00F5CF2C617BEF6BAD0605C2DE03641AB6AD3CACDEC -MD = A9755BF2550D4102E6CBA5F02A73246311E9B6DD66789631C60EA87F - -Len = 623 -Msg = D5F52D229676FA418C0F976AE854592C7AAB09267816B5589E10C60C6DB702D2C0590983AC0FCB70759C4A97D61F50B4F992666C4B4935B6409EB37BD4890B72BDFC46B3738DA166510F7F01C92A -MD = 964C02D1E87C7DC7ADF05CDB26A1AF43C685D6F4295F0F2D90569251 - -Len = 624 -Msg = D4654BE288B9F3B711C2D02015978A8CC57471D5680A092AA534F7372C71CEAAB725A383C4FCF4D8DEAA57FCA3CE056F312961ECCF9B86F14981BA5BED6AB5B4498E1F6C82C6CAE6FC14845B3C8A -MD = 1BD1B6F3144A3DEE93DEA1DF03C0E958F485B8AE164DCEE55F973413 - -Len = 625 -Msg = 588A1024CC2DF536C93ECB5EAAF9CAA4BBFAD79EEAFFB5B05468658C46F14BEFB47A2D97F29E462C71FBB64686F2E613AA04D6ABF053284D4BCA9CF6B57F0C8DD0B718423E24CA9347FE4F5CE41380 -MD = 857BEC66D42179812F646C552089ACA33BDB19F8E1E1FA75F98601E9 - -Len = 626 -Msg = A539AAF94509CFBC8459CE5A4E95CA3D6875B19AC3B119FBB08DCBE553BC83457308D3F413D4362A6E74C35492B1DFFA5D7185BFCA34E85B4B3EA30EC0108A3CA82E55305EF5CD71BEED761D1F5540 -MD = 5C70AB780B68545D659B54023298F7D9D1793166563BAF439439471D - -Len = 627 -Msg = DD82F62080CB62E34FF4081376030A1306AE226BA181413E0CCE7BD1CBCF83EB09665F4F74176FEED3FA9619D391947F5169330409C3B06904E01E7B3502C88693605EDA211BF315D0106FA3968E00 -MD = CF7771B1BA8784A19E6C6F24238518DB67D2C52426B2F0CBAAAC877D - -Len = 628 -Msg = 7DD4B776E7A5CEF671F43948269DDB104F0A5CC315F08FEEB0749D79F626F4E55F4213EC30ACC38B9F78E44716D858A785BD938E8FCF57F8FF2B5BA15407A79A69A83BD5DA69B379C64EA72CB9D5A0 -MD = CC76AF952584A787704A52EDB4B8F8D156A9E91A3BAC065B1D179A51 - -Len = 629 -Msg = 9AE70DC8965C2FCB43D79F2A2EEAD4C00A8C19D565EF8B125664633F3FA786F3BFA7DE1372FE84764314A480B8E04A71BB00A701795B1C7A96B7F22A3ED7E86DF8487979B6525A66A10C4C9B63AC50 -MD = D0A19B28B60C37B88642773137CC45A488AB5E72F778A05F7AD2F09F - -Len = 630 -Msg = B21B8C40CF1390EA0392F145E9C7C4FB58B2CD2D8C812D0A2839BA2128A1088068B5F17B38324AEBCA2FF9AF59E8AF325948830FD73D1D8EC98AFDEF4D50CF95F712A0874976DA3C0F77202253356C -MD = 872F75FC86C4E0FE1A66855735FD96F18555C41FC10E34D39AD73BE3 - -Len = 631 -Msg = D688AB44EB8723AA2B0F45736F3DF3B5C6D6B5C316E6C182FA8A45AB2D469D68F6C82C81C999B1D5BBFF731FBB65113FD70327182307C07FBB74F97BE8196C183B0C860881FE75DBD9B3166BBFFC24 -MD = 212B5579915723BDA66A631B5F1EB59EA82E5191E5ECB9481D3C8ACB - -Len = 632 -Msg = 12D9394888305AC96E65F2BF0E1B18C29C90FE9D714DD59F651F52B88B3008C588435548066EA2FC4C101118C91F32556224A540DE6EFDDBCA296EF1FB00341F5B01FECFC146BDB251B3BDAD556CD2 -MD = BE88B495D0CD90281AF2094B8D7E72EB417288CA16F751C09694B682 - -Len = 633 -Msg = 093FC95304175C45118A6EF8EAF0A58A9D45C6326D6259398D8C6C88567AC9B12C6CDB0B80974D3C104C389E3D721F528ED51B7D8B110FDD955EDF4E13B4883142BB23F7AFB99E5B899D92D5563A6480 -MD = D1970E9B9A605A75CB43D45BACA825D85B50FA19E30EFD031F80069F - -Len = 634 -Msg = 8AD86DCD3D4EEE9F1B28800E8E6E66B8FA0594C285B67765EBB4035F96AC4155A5F21A61DF4D25441B3265A411ABE9BB5D4ED7FE4D6037D49F2406560AF5E46483C8E1694ABE8A4CDCADED44FD8ED740 -MD = 3426BC16AC24832223FA8A52A4BCB17957AEFD759A4E14A90243E373 - -Len = 635 -Msg = F72D42FD9BE95CF4E1580CFC269747F172F3C17ECC0545DFDBA77C2E5C9DEFB98838C539DAFCD912F39D1D7C126C93BDB2F08293603533DF36430AD72EF419581B011B64224933D0A8BD9DA2A4AE9E00 -MD = 83F70157DA59BAE2984C515FB53A851BC89CE39F3D3E537B792595E1 - -Len = 636 -Msg = 4FAD29DB36DD7FD0D7556D77D422DC0AD547CD156321A0C0A988662F3A9919C408ACF3049CDFC2F87309D553CC7B84F3B5ED89DCC6F1F707E0009C6D7E93B7F8089CD57AD9C2A4CEE97FAD6425C93420 -MD = B837AF1BAAC9059C272AA76A37EE686137A9645123B4D4150B042AFA - -Len = 637 -Msg = FA18047AF5A407B03BDE3FD0554363C2B95E36122B83FAFAF0E9EE933E6B8FC30344E34B7224F4A13A3FB3D1E15B4EFEA5AC8D8BC8DC3F59BDE305E7F337B77830674EB0DFE041F2B6F18F01CD59DC38 -MD = 2E3646CF3D98F4AB91953E20E9420BCE15F95E75230A60C24EF6F273 - -Len = 638 -Msg = 37E3823B27C5A47D59F9A801CB773C72DC1B6C04621AAC60D7ACE9590D0A202B2308B07BF1AC28E6E015B873C95B0143CF6B83805D6BC9EE186E8A75404642D15901334E09D731C02BCA748A33C965FC -MD = B02C8B31CCA6D9DB895D54C9D9EADF8F05CCEA60ADCB2A30ABB4FC8D - -Len = 639 -Msg = 99A25B5CDE96655B4F29BDE8A691DC8D0BF9AAAEBED84B55E8BB044CEAA98FFD72C6F0B98AC4222FEAB773F9175796047FAD484F18F33A72AEE87276957F3BCF5ABC256DE0E14157C4903174823657C2 -MD = 55A02550A525C7F093306889FE606917C74F56F99551FF482EB282A4 - -Len = 640 -Msg = 871A0D7A5F36C3DA1DFCE57ACD8AB8487C274FAD336BC137EBD6FF4658B547C1DCFAB65F037AA58F35EF16AFF4ABE77BA61F65826F7BE681B5B6D5A1EA8085E2AE9CD5CF0991878A311B549A6D6AF230 -MD = 7DAC046254808464024617D63A038267FE2CA65052BDEB569A0A9C15 - -Len = 641 -Msg = EE9AC0C239D9644C82660B488FA2598C3B288A01C84608EE555AC027C01FDBB614E18D5C1B3036E88115B5BD42B465526B92CB94776634377290333571F8D28518EA26F37DF8DE37ABE87DA2E55BD2DF80 -MD = 9045C8563481AF3E488C2CBF9D3B84DD1AF44BE64E70818925BAAD00 - -Len = 642 -Msg = 10D86540DCDEEF9B16EF516608D711500ED8F8E3F4122224993B3EFF37053DA602A9378889058954EF5B0BC3BF55DA2C88C881C583FEDAC724E1259E62CFC9EA973CE0F3FD2F9B92A19773A5312D493F00 -MD = 7122DEF70B39632F9461C4E996E538C7E6FDD5E0445AE57ADDBFBEDD - -Len = 643 -Msg = ED84FA0338D35196086E1116FA0BC0B31790D4AECCAB9AB51B42AB8AF76A6E97B284ED9D0321E891AA6E42C906325C4CD3379188F4400DB8BB2FD7526896B3DDFC733E19AD2C8BD0269872DF02D8000A40 -MD = 141BE44FDABA947A2B72D360538E6B35AA196C129688F7BD68E485B9 - -Len = 644 -Msg = 47A28CBEB8ECC3BE04B9112668271CC7A16C1015118CA72257EA0189D994914452FE7C5C66D83E10607DE3F144B04F9DF70003087237B55320AD925BC02BE3CD4BE9E9664A7C601DA89C1311565E03F430 -MD = 2249E27959A180A7B0011F6BA96AA6650BB1DC83640A3F9B583F9461 - -Len = 645 -Msg = 4EF91000C81FCECDD34020116B25E51C00871C104BDE349969BDF56A5BA844B4B78D7CD167CACC46693E0EBE9F72FF4ED3F3B4F03D2CBD26E9C0FB2BC422F84F35F248F4AF366F952E2D98B8441DD13A80 -MD = 02A8945BE58A4FB6C67F41C98E3963532BB921CF3EDBEF8D18039DA7 - -Len = 646 -Msg = D8C5BA1029D56F569D9ECEFB0E4556298B474A8014FC1EBEAC8F4B61A1326CA2D40ECD50A5A15C9EAAA17253434601F548F4F380D843A53FFD2697A845DFF2E2237AC7ACD9056894E5E35E563CB02769A0 -MD = 4AC3BF8EF9B63453C9FA7DBC7481037F7012FA691D329A9A5A4D7919 - -Len = 647 -Msg = 3A974442BE9FBC1F4321AD311F3B7D26537CCF129655F16EBBE11D6271C9F30001E910CFFD71EBF57794C5E07A9BC228CC2E93B0BC56A17F6CB49EDDAF29DDC1F83E68EDD1A21B84AC5BA1FC5834022C08 -MD = D29A70975795E35436C426273BA1DA86999C8E7E434ED848415F2F9F - -Len = 648 -Msg = E90B4FFEF4D457BC7711FF4AA72231CA25AF6B2E206F8BF859D8758B89A7CD36105DB2538D06DA83BAD5F663BA11A5F6F61F236FD5F8D53C5E89F183A3CEC615B50C7C681E773D109FF7491B5CC22296C5 -MD = 89F6B320EFABE42CE13C9E20E4829F31A7848EEE3FC854E603FBD46F - -Len = 649 -Msg = 291A175AA79A73524CC5A8D1324E068AAA6E2A3CAA43AD44216BC1D94580A4E8997EDF665A8E2142D63FDB55C005AB6B1D81C695C1460BE418F0C2122B4FBA09CD381ADD1B8FE1C646FD03784E246437AE00 -MD = 83DF229D7975ADAD46772C9470153EB29C909D9D47709C4F9A33C527 - -Len = 650 -Msg = ECA7ADB20C7BD746B39A1A1B4EF9C1F319403E601D6B282FFB2DC6C01A83E6C01A01BFC72AFEED867B5BDB8FDB2987105CDE36F38BBD7CBB6A185AF91CB3F3592FC20BE27B0C277D6D398C21530B333B6100 -MD = 246DED5CC12B40CDDC25E1468A171C7423C03BD7C7DED2D4EC365823 - -Len = 651 -Msg = 324C69CBCA2A5B8B42E1DFEFB2D7290D5871F3442CA554B5D34227F06A732DA857C4EA2BE0E8D86299A70BF0E754A06512D8C9ED4232339BF6E338B89CD7F18848B81CEFA8431ACC2E0941D3FBA7F17F8540 -MD = A08B593B33723FFB76FEB2C778B99F775C424A2DF810CADAF41D0F03 - -Len = 652 -Msg = E34B1ED9CF859DF804A8F42B71E68C2DE6A3349EEB87B450D350BC2F79868748E71C44E8D4D41BD3A770E521DE7AA98C430910212E294AEEC65C0E7762C7CD9F03A2C61AFF873C28A9DB3EEAFB2C09E24F90 -MD = CC0D0B1168FA99BF6A55DD3D0E180FDB31E8430A41C8FB981E01EFD0 - -Len = 653 -Msg = B19701F0F71E36A61B27E9DEF9A7062719A497BFF82CCF01E076E8C08F94B1F6C67473DC909B192067BF6481B44A44FE77340C4EB7FEC31B2EA97A4341D09E31EFC00C48D11FE125DA151B6C7635094EEE30 -MD = 2C0FF020BCFAFB02397252A8256C6059A01F8F6C6A159EDA91943CB4 - -Len = 654 -Msg = C700B40AA21E2C2FB143377421FB0E5C4C665E529D8C6C6E5A4DCB0B388B5726926D41A9A336E6AD38CC3F239CC85DE38DC221A4ECD281B4E271D90BF24A1FE943A6A5A637C36B48424FE6079C1F2C2D7878 -MD = 0E9B9B4A10216A03EE7C8DDFDA6167B7D029AA22770765E2986B5D24 - -Len = 655 -Msg = F2224C30809A42D86701D95473C9DA3AAC8324D8D59AA8F75BF8E5A1420130BC971499725FFC56D1047F5987620492F383F477CDBF98EF01DB50F1FC0A7B3D9BD20C31ACFFBF60FB18E9962896B2E0431466 -MD = E84B95FD1CA77487E46ECFFC7AA3D06A610E8926D5CF7AB08E439D47 - -Len = 656 -Msg = E728DE62D75856500C4C77A428612CD804F30C3F10D36FB219C5CA0AA30726AB190E5F3F279E0733D77E7267C17BE27D21650A9A4D1E32F649627638DBADA9702C7CA303269ED14014B2F3CF8B894EAC8554 -MD = A805DBD3B8DF5E03E05EFFFDE1B94B35A23C5D77C2797D984E56656F - -Len = 657 -Msg = CEE8685B3D95B231028587AC25C7E1790A7EAE52A5BADDF63C44DBDAD15DED0EE60708BCF52594F2FFE21BCC6849558A06770559A409450E6C87917D447D53D321EFB737668072DBB86B4A57C2CD4E5B3EDE80 -MD = 6D725B5B6C15B9AEA6DBDC676DB14334695D658639E30DA614FBA2B0 - -Len = 658 -Msg = 0B813C3BB65702538E6A0B953C9D272DD738817C86FB21A6DABAA13CA63E7F7A92F39036E08A68886EF8D495D6C2956125B4AF181B13BB41C89E83CC8B6E9CBA159CCB92C755E56CE1C3458DAC38718652C440 -MD = E03F2A96041084D42EA1A0A26FC46AB3A40DDCC62A95577E8EA2834B - -Len = 659 -Msg = DDA54A9794F7FD0B7DBBA54A8341460FA46A067BA59EB7276D721F5182B59FA17F3DAB0015776D8BA29CF88BA64F6629B0FD0847FE2A86699CBB1EEB441AA17BC9070B432CCEA7B81060F742CCB4EBFE409260 -MD = 63F5E5D0B6EF658ABDA4D668A2104EF23B47095FA5099F9537A6C3DC - -Len = 660 -Msg = D71B21EDC24E6FAF788F909BF9015775BE75EF9FD9C179E9C9C8281813055A1627E1604C35BBD465FF7D30FBCE70ADCD6F17F11E786FA85996AE178532531A5BC68DEC364647D2F4453AA7881E232563283D20 -MD = FFC76F590C4E77765382801BC492D9BBCEE090792058FE141E0FC9CD - -Len = 661 -Msg = FBFD53BCB158FA9DB2EAE0AA165B704ADA66AD28D5FAD0AAF4F075EBE04F295D5D4F69CC2936881FCDBEDDD48D48A6F3F0FDF1586382F9B97DE28CD225364D2EC0CF872AE691B76F10C7622B1409F1D4C1C648 -MD = 71EEA43A697F14831E58FC35BAA8358572793257E12DCC4CE24D6D3B - -Len = 662 -Msg = 7E767921A14D35F1662B628F4A3F9E285F3F165316128AA84E06F032A0003A445B6C1816CAFFB61D7318D249C9179A27BA6F758103E9D82F3D1F7AE5726D485270AEA9BB40E9E11831D9DC4ABE6089FEAA6960 -MD = FE583882703668ABDBCF5C3FBA6161CA322D7760F356881E47AD041A - -Len = 663 -Msg = 020B34BA7071093BA752B2913F9774C29204D00A137ECEF964F4B05DCCDE457837E0E724431F606E75E3C14B441E9F2C53C7504F5838C57400BA593BC59E74E4E923EF0CF44D734C07A20C2DECB1DCA82444AC -MD = 60D4B39C14A542396DC47F24F222409979027791C502317069D239E9 - -Len = 664 -Msg = 6348F229E7B1DF3B770C77544E5166E081850FA1C6C88169DB74C76E42EB983FACB276AD6A0D1FA7B50D3E3B6FCD799EC97470920A7ABED47D288FF883E24CA21C7F8016B93BB9B9E078BDB9703D2B781B616E -MD = F05742CC1DB422A3113AC49602E8D0DD6CB472E7ED26BCE40BBA09BD - -Len = 665 -Msg = 5332DDDD7949110448AADF3FF60CC30D6CA83E32C49FAFF9625C3B39E80BB94AB82D9288B85A5D4315DF92FB9A8D1F6643C2DA0FAD11F62411899714FF8688BBACF01915598C259F5301EEF92F9A2CD965D43A00 -MD = B00D19BF07C031CCB71866F2A322A2CC27585A19DD96B1F3EF863672 - -Len = 666 -Msg = A90A69E0B616278A1EA45ABFB27876514B9A94C1E1E24C4C22A47DB8569DF9FC64820C5A46E8762ABE56C095AAA1F5E97509F16BE71C437E8965BA7395CD82F6566B6B4CCD2595A9326151716A2041D97419CA80 -MD = FEE17D9DFB77F3DBD4FDF3EB6B5ED2A8A8F5FDA11FA71674C6F0A7A7 - -Len = 667 -Msg = A8E6EA7B074CDFB1983B864345B26C1C51B6799399092F146E5A83F68544D139B4DCF355C18563D5924106AED6135E8789DDA606A264B9F6EF059E009BB6D9797F56B307CEACA7330B103FA36A066B07D5FAFF80 -MD = 7257A48A5220433E68D7B5F30A0A203FF0EAD313F28C48BA8DC1B4A4 - -Len = 668 -Msg = DE6F56BE8FD2622BF9A9D72E126BF9E6C709B7DE2DF49F025D3A54335ACEA3913491EE0A8FE4B511BAF9B0BDF907066E4E70B8165B5E7B173F9D8F491248379AC2E0139A2435EAE5B53AF8B9BF974E02E68B1530 -MD = 444AB5EB2D6A09DBFB02ACBC51DD583801B4E16C1353B22E3677FD32 - -Len = 669 -Msg = 183111D07A16E338EDB2BED4EBFFE453C900976F33ACF6D521F014B98EC4BCDBB606AC70CB557CA17E0C02CE8395DB05611100B0A3DE4861FC0510CE734D2718E9A2C01940DBDBBA806BAD0B5BB3B13DF37C41F0 -MD = 3D1ED3B4C8F10312EA3828DB0273F7258D4FDBFCADCBF7E6202A04FA - -Len = 670 -Msg = 05CF7BC0F43F7DD750F7B238624157941F0C26F990D967C1A9A6B1713E090E790D574206DC47F2C61D570F1641A0C6F240269E9F1F1754E4AECC734BB7F55566135504A94B03F775860E4ABB0E7ED6ABDC275FA8 -MD = 16A515A8C4AB6376A264A1C48AA421D6A27CAA338A7F34CFABD45D5C - -Len = 671 -Msg = 39FDF47FD4BA466DDCC6CACB1D4A1941A67AA2985B8832B79A194CC31AA9C308FDAE7A2393621C14836A4BD32A2D75C0A0F94D8F6DAD905565D8F437438D080628809212621BEC1051527B9CA217545BF35FBE8C -MD = E9F1AEF8F5F04A860838A045B9398F4D83C3BF6DCE38A81C878F6A76 - -Len = 672 -Msg = 4B127FDE5DE733A1680C2790363627E63AC8A3F1B4707D982CAEA258655D9BF18F89AFE54127482BA01E08845594B671306A025C9A5C5B6F93B0A39522DC877437BE5C2436CBF300CE7AB6747934FCFC30AEAAF6 -MD = 45945F867B7E1E75EE496E0FC4AAFF71A0CC539841D153439AED4DFC - -Len = 673 -Msg = C65513559AFE979CF98A11ED2BA28093FD980E4827D7AA88D4EC8509A0621B4DE6ACD0313E0DCD79CB791914D6BDA9E0DFDA44424FFBD29F0BA7824A37605AFF32A9AF813B38293174B929BD836B19108B206B5800 -MD = 69CEB4DE2B6B5832F15B1645FB4538130EC0604870BA37C9C25C25A1 - -Len = 674 -Msg = 57EAD014B8ACC155958D62563E9F51F709D858379D699AF657C67DA30378AA7916AF2DFFA626EA24019F4ADEA5DD2F776FA49191673B08C804C2396292F82B9A36C90E5E0498370A221111EE58F7D2137B96D58740 -MD = 425006C291D3C9AC00D52674511EADEF4029D7A98F78FF290D254DD7 - -Len = 675 -Msg = 815D4AD9D572A2DF8656281CAEE841AE46F8FD3AE24EE2FE148929C570CDB3E7D0B08FC26F42B5636A3ECE524355E6FE28F019F139839C2BBC79F18C765F8ECD7EB139DB97816EFB832A09534C07FA18DD68033960 -MD = E3A7C6A836F62675D106B1E900FEB2A1900EEE6ABEA3BA159B9BCF44 - -Len = 676 -Msg = 6D5BDBEC01986DCE1000A7EE1968BA9E6BEE72560C230F33F5DD758B593AA482CE01730B4234E7D9E8A211B9602BAE5C918971B816604BDFA382EA6593D27AAA40628358BFA92DDD44E84F4714FC41AF834761E4D0 -MD = 18869932C24FE7F9DE6106F45E6DF589EC8B5C3A65C9268306E570B5 - -Len = 677 -Msg = 4BA150A5EBA308AD19F868282BD246A6DD84D7FEC4B2E5EC43918F946D61061B3D1D11973D22D7C9E7E5702E59C7414B034D2C53EF91729522C9CD82A9F9378FBB4856F1BD10898296CCE3B90CFFDCAB58945BF580 -MD = 3684AA60B590A2D05A95272146ACCE00BF019E9D22048DED80F43E3D - -Len = 678 -Msg = 65666871ECE7F4087742945841BB624EF9D5C6400F4D78857810E704507195D6AD0B047EC823D29EA20967FE037BC4546BB2E4FF5B85EC7FC8AA8D1260BBC5C5ED5AF6789B81928DA011FE91A5017C8867391DF504 -MD = 0E37CA64F3F01AEE5DAE599F2111C7F1DF2597E4AAE7B0A15B7FF274 - -Len = 679 -Msg = 01D6257DF9FFF02334322A6CE3948C5C17A9C525D04B5778394B7690063407A9BE263E3C3CD8108457B2176854542FB2A1053578A9B3A36300630D2B3DD82DDEAACA7A10DA4C6B387AB7DA0B4897AC129822F0DE1C -MD = 0BEAEF8995B3810F0C140375BB47EC8670BD36CAEBBDFC9F57605913 - -Len = 680 -Msg = 08461F006CFF4CC64B752C957287E5A0FAABC05C9BFF89D23FD902D324C79903B48FCB8F8F4B01F3E4DDB483593D25F000386698F5ADE7FAADE9615FDC50D32785EA51D49894E45BAA3DC707E224688C6408B68B11 -MD = 5A8AC7533E1354068B564CCD214EB2A2E097DD60E08BD69FC782B0AF - -Len = 681 -Msg = 46D226D1AE24FFD00A066EFB6D561AECB244806BF048E60330BE461C07793F8172BFA3D52F9A98BACFAB2CD39864FAADF72C8A7F94A977E1AC7597061638ACE3E21BA36CBD4007EF139E7DD8B620139DBB0AFFA81D80 -MD = 5025912D275EE08AED58D233F63E7632636E79DA447D1A097001BC8C - -Len = 682 -Msg = BEC8AC7466698A548C1015FB4BE3450D86983940D0948A6B53D9024C51B356C3CAAA87E9A15A06873331C3B0E2023346E87EA14CD757FEEE5F77A4DA821087D36229A4C3BDD68C03FB27D0F80C6E3D7E9C8A036A9200 -MD = 6B6AC852E0BD0EC10CCE88A0318DAA051337FB6ED9BB9DBC3266DFDC - -Len = 683 -Msg = EE0C430A0ACA534E72BDB81416F8A84C376529637209779A74F82C0934825CFF164AB703513B26E4E64F2EB05D462B1A422B8423B52205075FF2E8FBD36FA82E343AC0B06A3CB2EFA7E509A7B0B04EC23C5C4AA20760 -MD = 703E3AC0787E8514D5B08A505700DB47BFC9045B1109FD55264E36DB - -Len = 684 -Msg = 5262C0E6A835DDC17CA500196D4B3F74F30BE0A85E70D0AB343AA33BA65B08E35EE2E05F2812D3420F8466A75E550CDAF47C77E3E6BA22D0DFDF0D55697DD9759695DCCC84353DD2B81AB0FE59CA3E9A6680A5C29EA0 -MD = B7491F683F6D9DCFE9CB687A0483D0E30E304C6509E6B2D7735A8D5A - -Len = 685 -Msg = 7692563421ECD26D31A2A48D509820C69B1CE339B689C0421DAA658E43F62618EDD77EB6FB8C8C876176A13A7DB1E6F5CCF458F17DC76C993208D722D942E1968033DCF445E369B6375D0D488930B1653C12EA1B33C8 -MD = CA684D1F6DC6B7A5B619172C2D6AED731889ABF61E48D3DB9C5D6B9E - -Len = 686 -Msg = B67F18A877D01C5FE24A5A81431CE673D6941FDE954FB92D593291D38E5BECE6EE5C6DB0BA571C5B11D96DF1D683CF14B560E3FF015DE782D2D23CA661B18FCBA123CFE4EFF13545CF10C20E8619C513826B8B017590 -MD = 7D2BA4E87CA65AAB1537CB02ECD49D75AE89A8ADC256EFD49F6B9BCB - -Len = 687 -Msg = 3DF1EA02F3B72F7DF4C2B23BDB4A07F8B42CA5BB071039C7A5854B87D20CF522B6542E882B6A40C5CBF4410AC39F4D0259B7133E65E6D3931AF6547563603889968A5537429A5461693DE1E248EB01EF78B971143BCA -MD = 8356A052E52CA0FA16853A50E1456A21A6043666E69C480751FBFC75 - -Len = 688 -Msg = 68C8F8849B120E6E0C9969A5866AF591A829B92F33CD9A4A3196957A148C49138E1E2F5C7619A6D5EDEBE995ACD81EC8BB9C7B9CFCA678D081EA9E25A75D39DB04E18D475920CE828B94E72241F24DB72546B352A0E4 -MD = 059F7EB983362FD44E94E2BFD59CCED43CAE959C9A483EBD5E6E2036 - -Len = 689 -Msg = 4C4B4D003C4341C9C120B0E717622C70F17AAF88F49DB5E4C10124EE6BB1A090EB3A638BC262FC4A761B0C6FAB9913ED105DE2FC6FCD4BB748B9270305A34994BF81E43A86F8A026FD6048285A4F93455A598D5C47B980 -MD = B85E3EA3C0849081309F99FBCF57399F4E1028582827011854A5E46A - -Len = 690 -Msg = 61A7A180B5122B174C0FD9B531C66FF1E273353D348DA58C345F78565DEB59A973566B89BBCA79F403ADEBA899E56FC9AB9885A9AB6ACB96A3920AB27C16FE424A93A21A72D6749756FC14C92EB08F078D6E21D0C0EEC0 -MD = 5640A84310C7DC73494C119DFB7EA43E0A83F703950DD3AB01C628AB - -Len = 691 -Msg = DF1081403952FF202893B5849BBFFFF74BBDD670C20EAD37A69C6A04291033FAEF0C94E4EC4201A2911A73E6367268A5F66E11561A6636A05CD2CDA8A065B2366B7DB0880F0E0B972CBDCCC70F3F4B13A93F63275C4120 -MD = B8B959C10EA4561F5BB50F84814CB3B4A0E4CF50DE759F497E2EDD40 - -Len = 692 -Msg = CBD12C05EE3BE8484D9005E2B9F017F8E5EB0E7CF122A393B1C570C1ED9B4EE1C65CBCE0DFF77CB991E6F3F66D7B0EF45204894E5527C1AE655321D84CC2E94046F265EA726127628D15D4EDED37BB42D8E40B3EE6D430 -MD = 5F337BB19977B86D378C0ED27DF03CD739D90A5B6566AFC96695E873 - -Len = 693 -Msg = 659AF27FD1E6C59C9DA9318DA4E063707AF5204A963038B7E83242DCAB783F009CB034E39A82D26E1B2B6E84422281421687244DB5CE43A187FD96C39A59196AC2FD820FDB52BAB8DB579F87AEEF3EEBD0851952B70008 -MD = 407F366C6324C62FCF156D5707E414EA49A1A9B6DB2F64888E691EA5 - -Len = 694 -Msg = D32EE5CF0455CDB7459BEABEAB67AF3E385E6D7D576FC3F9A3545EA4C28C94AA4833AC1D477C084FC3DCBA799D7DB42260695D651CC299E51987D60F8256A8BAFAFE2A3E414C235A56946DDF9562DE66D80B375DA578C0 -MD = 31808E36306AE544BE2DCB683848B15CA7AF457FB7B3A1A4E02535EF - -Len = 695 -Msg = 62683FAA989429CC513787CD401953E80F8C9C7D41634D1888A08A3242D8FB2BEC07E5E02C7D8D00C446F5F08BF846927B5409E6BCAFAE4ACF70F30383D6C29D062625870F6DDEFD1920179CAD59A2983F0E20E78F5440 -MD = 7ACE52C3D26D5B45BFA3784F0D305A2AD50E410E9DEE8650CDC5A8C4 - -Len = 696 -Msg = B8D56472954E31FB54E28FCA743F84D8DC34891CB564C64B08F7B71636DEBD64CA1EDBDBA7FC5C3E40049CE982BBA8C7E0703034E331384695E9DE76B5104F2FBC4535ECBEEBC33BC27F29F18F6F27E8023B0FBB6F563C -MD = 22D62AD272FEFC89F73256EAACE00C7B8E998FB322C8EB67DC1EAC6A - -Len = 697 -Msg = 806CCD839B87C2A7C784F9AF9D5BF1F3CB663E39BE778FFC58865F953A837903542727FD51ACE8A276F9F5888F9B9FE1755B5D603284509D9099B310E01776281034FC57E91EC6781FCADEFE9B5E34C2D58ACA5636D7CC00 -MD = 4E61093334C72C75D5DF00F617C16A4C90161F4625FF94F5EC6F300D - -Len = 698 -Msg = CA4D271BB220A5E1B6503C8E44AB9F3554D85F2BFF4C4F6A6ECE5C7E91FA10374AAF75D9FB45D4F0B442A3058FC1BAE39127C4C71146F5B2D4E87034EA34E67F822651A57D5D70F7A564FADD4143E940E971AE985E1D7240 -MD = D65DAC684C1D1D09573CF66179219729D305583BF49DFD499FAA8686 - -Len = 699 -Msg = A2786A30089CF96D17574434B2E274B89CA8D7AD73C3FF491F50ED2965614288DC6B47B491B879857E384EEFE7149611E56DCAFA6498CAEEDFBA30C0CBC52269A3C6248587D77509E2019717E47DC27210A449E8EE0E9060 -MD = 6C3E0D17866BC527D83162DC28DB0297A12BB480D729FAC31435BF42 - -Len = 700 -Msg = 96FEBBB1DD01497E3E9EC768D864A48734DC7DCEFE567F84EE9309CB46B5056F6C730B1A6836912FFB473C0EB7BBB77BCD1483D1470910DE99328A43B2F0ABA0CD4BEAC2938937C2DC38C5E2822610814CF44DA89181E2A0 -MD = F45A3543ADADF674E82879069FF0D7B0242D084312C290CFAF1F9EF8 - -Len = 701 -Msg = 871EE5187FED8FFC3049079417641B332F0B73B2665C60823BCA8BFDF0989CF312D36732EA456405A3E0EA72F770329DB44949DDF7596318D37D99C8E0F8F71E22534493708CD6521711100EE059C53D2C2753E1A920B6A8 -MD = 90546A59D3918C827BC36547C4DE980F4003562BF71EEEF5B6E58D3D - -Len = 702 -Msg = 12A6F918BC8A7E16920F4B4033F71ECDC3B5FF72894936BDC0A26BBF6FE66C594244FC37DCAF4CE0F24E75B12E486CF4C41FF97C8EF4E66825503B657787C284A6ABCEBB6B175623297DE98745A4A3C62A93682CAA4A8D58 -MD = 14066A7D5BC62ABCCB571E66898AAA1D6C58E9DC040198CAFFAF8343 - -Len = 703 -Msg = 44D3E60CCFF7355FBB2168287FF0A1CDA69AC68D0A7EFE45F3A81D3F095FC8EF2F29B028942CA304A1A6FF223E52BB10A335DE8395B324CE26D802F770E0B47BD6B6FFBC1D9FA0B15A851ECB0F7F62F3C6704A1B16CAC2E0 -MD = CB52A06D9CCE2762064D45E785A27FA4303F0304ACAC44CB9E201003 - -Len = 704 -Msg = 0D58AC665FA84342E60CEFEE31B1A4EACDB092F122DFC68309077AED1F3E528F578859EE9E4CEFB4A728E946324927B675CD4F4AC84F64DB3DACFE850C1DD18744C74CECCD9FE4DC214085108F404EAB6D8F452B5442A47D -MD = A396EA905EB612554BD00E4FC1BB4C5247D73FDE4BBAF5380ED42DD0 - -Len = 705 -Msg = 01EFD67EF39BB09135E89B144997728AD2B318BB6321F421D7EC85BB38DD655FF2C565CB86FB427F4DD4EC69CDD079624FF6AD51438FC7264F86ABED42A93091C80771914884EFE67DF9A1A169A7806392A1E82D71BC748C00 -MD = 04A77703422AA174EF73B3AC927DF1BFE50D2006A46B44A49B0A7E40 - -Len = 706 -Msg = 1B8B523F851D64097271FF7F02DE002EB26AA338D93D760EF8BFA7B798CD5EA16BF3A32AA7261288CE542B07EA93E8FB48BB545BDAEFF58EA990CA44001A6000E33436BC10C28E5AF184CE442BA2F3954E6B7B1C15E4690680 -MD = FDA97A21F4BDBFEC3C843B7BD6CA63698410736C2F2CF7E20C13D9BD - -Len = 707 -Msg = CC579BB31BE1F113D7F436511B6B600889D1169F0A82C3777ECE9857B613AD5CF5DC8C621F95744F1A997F947CBBAB981F1BB910753B6658C11EAA2C3421D410E786C9727D34E79A8501123F1AE43A9ECB933D1256EF103EC0 -MD = 5CFE2D6C626BFA71E21698D20090A56812808634A8A0A68C838704C3 - -Len = 708 -Msg = 23DBD6EA6FADE48BA4D2D596F4BD1608E38BC566812A5899041D2B8A867B20D0C6080E3EABF6208B7BA26E2243F270810A2ED2F2CF6A0AB9975FC3D0460F19CF0C8EA7842CC15A12AF2F31C7A97A19D5421C368AEA8CBCB1F0 -MD = ABDAC1CD0130FFCDE6BA130C4B09ABB56B69BBF679AE94C50BEC86FB - -Len = 709 -Msg = 33ACE56FDA97E4E458E135A93730AF474A233C9E468E4BA8D2D6144D3D86FAF619FFCE35463F136C3EFF4FE16F8D4F7B0BB3D6BBD80880A935E7FB55F310309EDB0134E3770BEBF81622C8CCD6CA04AB7C9D9BA40DC0C7BC90 -MD = DA8CE4574256BC464A9190459000D606F7F770D61AE5AF8833E0C8EB - -Len = 710 -Msg = 37402934012C4CBCD189BE7AEE367F3C12B32B306980416AE5A20674DAF6BA41EEA9F09981D58DB2E38AA3DFA5173218E2DE374575BBD95FC039FDCA99ADFBCC30220492324189EBC2DBD5271A28CC8B8DB90D7D2651190810 -MD = E219599BE8C57A3A4DF3D1A73F17BB4C5786CA34ECFEDE4C2C819D30 - -Len = 711 -Msg = 44DA0511C6401815BCA95272F343C27F8A67B19EAED67169957F4B364059537A8F018D5C9DD478C0643F26D723EAEDE5BD2834751D291A0EA86BBF1C368FA2952D4ABE5B3F424B6D3F6C5A129817CD2F3FD6EBFC93F6B3F752 -MD = E9597CCBAF6DB5BBDC54DA704D8754C5E46BE1DFBBE54B3D86FFDF26 - -Len = 712 -Msg = 1755E2D2E5D1C1B0156456B539753FF416651D44698E87002DCF61DCFA2B4E72F264D9AD591DF1FDEE7B41B2EB00283C5AEBB3411323B672EAA145C5125185104F20F335804B02325B6DEA65603F349F4D5D8B782DD3469CCD -MD = D8B5B24B9E92326FDE5DB1058EEDBEEDB0B65982925734B6E2844036 - -Len = 713 -Msg = 5498F0A76D37803918FD6B15EE166DC9FF9731F1C5A50E058713E285132BC43F2CD5960444E234F8467953890F35459207C52E6F39F0102E4684A18AF3E95126D7437F8A4266FE304B484E73CE5FBF96D2CC4BC29EFD03383A80 -MD = 2B55E6E12B30C1F0CE905FBA47918AE5E0BDDA572A04536E9011312A - -Len = 714 -Msg = C0E4A4D8BEE0E03415D5A2A3D11E83088F11F27BE91484A691A15D9C1450F82F295B2BF9BD80093987FD95033F9EA7334E3C832EBE019406B0B7B32F293ABC3AD98BF65459FE860E817B106AB4FD41A6DCDE128205DBC1AFCA80 -MD = 3E737FC0EF9225339BB80C7F08690BF45622568183D6321062C01A56 - -Len = 715 -Msg = 2E99D58138061701615DFF1A8953E671548D6324CF19476D9CD33849043696E1540AAC3F44A011EE94423A2330B61C2FB2A1CE77FFC12392DB812F4F0BF8608223DCCF19019D80755A46902019DFD790D342DA79D5A84C009F60 -MD = A30D9A7673A4D589BB599C07555F9FAC235DB4713EBF54CD46B38CC4 - -Len = 716 -Msg = 447355A1A902BDF51F3AEA5D6F904BDD7B958A269727A8F15B1520E15FDFA01DC8D23DA925F622210A587098033BD8AED48727CFC66BC11905410FA4623E8D8456F7CCBBE6582DB121AE2E7676461007E4E225905AA2D30A53D0 -MD = 69E20A2D0CE3B4FCEA6210D8C5A49245F66790C97E3D30F63285FA30 - -Len = 717 -Msg = 64B9BE2D9BD49866C57E320D7079476C1FB62FCE5E8196AC82A62782F693968539D331B8F46E8B76722B3DDCCDB3DB194873E02996CDEB199237F0CE4C377D46DE925E7EA0540337D03378EF3FEC8488F0728DB40CDA98C11988 -MD = E2B4F1FFE351D3633B3236EEEBE73E2A7153830A0B4C3CCD6DE8F3FD - -Len = 718 -Msg = 8408659B0998506DD15A6375D400D017CB1081CFC1322BFA61BC19E4278AA172199D091AE29F7BB5B0B9E01F3F9AA2F5ABFF8DA03709092A65074F965CF0A1253A1EEADE65A132AA5C17E4E880F1382709BBB3056C643A12A928 -MD = A411C1E334F1F1BBC9F91B2D25184C139A5665D0EA827F4263A2FAD8 - -Len = 719 -Msg = 8E51395F9CBB75F8B98104508108016D275B6F769588DCCE2858E1D6995EFE7BD216B9835965FD90664CB4F2743EC5817B6820868D039190BCFD07E68B9C13A014FF2703DE6B081B86C55D72BCC22F4770FC7965D1E75AB9948E -MD = F3E9083EE9ED97C0EBAC54F03FDF0EAEA113F96E604FE11B3EB03AE0 - -Len = 720 -Msg = B180DE1A611111EE7584BA2C4B020598CD574AC77E404E853D15A101C6F5A2E5C801D7D85DC95286A1804C870BB9F00FD4DCB03AA8328275158819DCAD7253F3E3D237AEAA7979268A5DB1C6CE08A9EC7C2579783C8AFC1F91A7 -MD = FDB9015B20DB446F79575E6B8C73A98EAC731CFE2E59BD46DBDA0E35 - -Len = 721 -Msg = 1CFC3DF19818EAA21C03FDE78CDA0C704EBCEE5866F71DD8E3B1B38C9B7354443A3174099928AB8589F5EAA4F030074D3185BEAE29B75A9B7B449106EEBB05E32B7A621962FBBA4C74162FFD111BFCA10DCFA4F909C7C1AD98E500 -MD = 2DF053A07762168FFACBF2E765735872EFD77DC5A9EDCC97BB59DA8E - -Len = 722 -Msg = 2202FE7CB2BD3C73A7FFC49EA7A459AD89B62257B842B189042EE58720D7734926FAF10293D1455B7C9A4718CDEF1910F54A3140CC70268A3138819526F173595487AF4603F31B4CF644B3C4FCE967A520143DCC7438B396AC04C0 -MD = 24AA32BB921B472EFDC0405AB2E3F5714E382497B0FBE61016578735 - -Len = 723 -Msg = 490671DB10124CC0462CE3AAB939A6873B6111DD47A0CF31DB0F188FFBB60CB1F5C29BF6A236895201B52ABB93988F3B5091B3F00524C7BC5B70DAB990529797FB08CABFA7C01ED302E3BDA464344478296D584EAC426C3862E260 -MD = 9E79CE08C61B74F1DE45E05A893F1BA39C21C30E7161C5457EF4B8BE - -Len = 724 -Msg = 5A2A63F0BDCC12F2E6FA0D3A7CC1230890489E03100CB2B5FBD196F3C5CC46611F1C0BB50217B5FF5BD0B00604FB3B408937068F23492F498980329ADCEEB3F3E7C5869DAA37EF56C77EC485BFE84D07C31926FFDC1998C391A3F0 -MD = A40838CBEC5DA2F52EAB38BC3D267B0D4AB2607D319EAFD2A246DC05 - -Len = 725 -Msg = 0CBF90E972B7FAA236A4EF379B189E96475488C0CDC8163C1501355F283FF2EF2A3359F2966F3E5DDF5B619E4C8AB2840FD93284BDC1018AC8532BE123CC7928D3B1B7BE9929A1BA3F7F59D4CFA6D8C0CC5BE7EDDF878A5EAB35D8 -MD = B410A2D087418CF1E2F650191C88D833F08924BAA26D3AF5351533C4 - -Len = 726 -Msg = 43B5CF0EB20A1782F17DD07E95BDA2AED072798E4DF4FD9B6655EB087EBA8549D68A2C61B08A6B26ECEA623DD5C7D7215F0F3C5E5C4F45BBD4B580A8BC2BBD8ABFB76366E18927D25A74FBD1896536C36028CAF12713544A753A98 -MD = 9A9079EC0DF1FECA7850D6B38DB4F3BD8C8A66E843FFAAF884EF3E92 - -Len = 727 -Msg = 0B1CB486FC934262E8DAADA5789855E2DF164FC5B5141336077B2C1589064ABD1BE8F92E455AE6AA2CE8F4F7ADC653B36F4AE3BF82134D639111BE7CC40EA02DE51AF9AD1F653E8EC56D60BD93CC4937D3256DE51CB5F1962F42B6 -MD = 5ECA1C7CBA6BB557B114EC5C2537F53E058485A0F3A3A365FF4518F2 - -Len = 728 -Msg = CF3583CBDFD4CBC17063B1E7D90B02F0E6E2EE05F99D77E24E560392535E47E05077157F96813544A17046914F9EFB64762A23CF7A49FE52A0A4C01C630CFE8727B81FB99A89FF7CC11DCA5173057E0417B8FE7A9EFBA6D95C555F -MD = DF1B47E73E8CBD2CA852CF58AD68B5F8BAA1169C0795961041E8A918 - -Len = 729 -Msg = 97BD1EF155DBFF92ED40EF57502EB5B11BB43D0525805EB66CE6CA6B2C4F27ECEB69E7196FA0AB9E097FCE104FD621CADD0CD24A660725DBD32D336BBC8054FA5F8E8631239D90CA428700C962F70304EABB7D21E7A1C86093756900 -MD = 1B88163D0EAB496D60C922386F90795632AADF96419D7613E5B91781 - -Len = 730 -Msg = 5020D3EF88B8A5154DC7CE9FFBD5E717DFA478990A5F54241E83C4B67F5BF0B486CCC4C441A75DCAB06B5F680E4CCBB4949AC79974B242113CAF54838F926F2674810F2258EE12826DF2B95961DEC901B59361877B3566A0385E6A00 -MD = 85BC0C520101B298E32EB248580916959D906336E190889AD732F68C - -Len = 731 -Msg = 420F2E0A79EDF6879787FC94F2099AE0C4A3D04BC8932274A8DDC95ACC8C7E1403659777027A8002881E4588B03B3DC6369B7AA32E4ED7624C30B10AC8E2F16DDE7561620D3EC186E0A8395A7F90E67A52931E779F8A8D6297EEC6A0 -MD = DAEA4AA31266371514A1E38C45827E5ED92BA8C6C4C7DA2C75CAE649 - -Len = 732 -Msg = 2FCE6B9232D11B2AFFCE835A8420C8F940390D5BB74E32A85432BD09286F1F5FCE5795225247491929D92169C9E7989AFF84B61D10597B651B875253FD07C098C513C8155652A7C98CB3958D2E8329FA43B7EB5685AE19D4F427C7A0 -MD = 48CB2DB470534A9C958698B8F07CEA7102F50B40F70E24CA90E7C01F - -Len = 733 -Msg = 500A6E6A9AFB85255208BC8AC021AED541E93975BD9F83E0C7A5ACA7DBA0C6B92090B08543D888E8219EF073C959731637DC2C2AD8E425C7D85CB80FC319365DCE32B271EFD47148D2E89B39D55A820BF092C5E0739371F96F49CA70 -MD = E003DD6B0F2C0F0451FBA383FE247BCCFB1D26CD9FFE22A457DD81E3 - -Len = 734 -Msg = E5C9075478B6D0EB732C668AF5C3F523D4FA1983C564FF060FF725164E9AB9A0C80AF83FF749A5BA3E12538F0AA89E596E8293DE963EF6B3D25D23A53CC11F852B41539A3897878741F29CDF04B7137EFB104A395122DC4F2D8DD884 -MD = D30C6F18576B8D3D6727CCEBBA127295FE861A3D951925D65B1F664D - -Len = 735 -Msg = 92D2A406FEBC4031759A4BD3A7449812DDAFBB1F814125EFB0680458242C24C60AC3CEEA9446CBD8B5829CDDA4F17D12D621416F8A84070EB70680F2EB3E54684D97066FC5697BE7C3F8284F896966CA6607DBEA21713A18582C2596 -MD = F3A48C5EC21D5BCBB0CBD1AFE9B8739410C87B390260349C240F68B9 - -Len = 736 -Msg = 072FC02340EF99115BAD72F92C01E4C093B9599F6CFC45CB380EE686CB5EB019E806AB9BD55E634AB10AA62A9510CC0672CD3EDDB589C7DF2B67FCD3329F61B1A4441ECA87A33C8F55DA4FBBAD5CF2B2527B8E983BB31A2FADEC7523 -MD = 1E8A90918D6EAD31E446D4EE2673871ECC5C7DA9B18ED511E1632E0D - -Len = 737 -Msg = B2CD11B36C8EDA2E79452DDD5A6D84A5B30E32F0E7AD88CBD234CA5C6C8DA088E559889130A3CD3E7FC8C2EA2BBDA9A3AD0E099F87A54B0C1C772A8425D81263F15B280A3D26772EEA18C011D66314D98F0146DAE57B03CAC8084B4780 -MD = D8E73FAB927E0102BC13E9E20B4C5A967902CDAE19402FC7A4A30E1F - -Len = 738 -Msg = 03E7746A3778D7AB8352C9B1B78FC83D9AFBED688AA1D8B1DF3DCDADF47C79D9C686074177C98FD35701E3CB967E2A34516BC1297D6F72FCF4164DBB286A646D30FA5C9C9984CE7B25BF7E76ED96268CD6B3F1C53592605D190DFEB200 -MD = 89C110563242250F2EA78B0519BF0A9EC9EEF6F27E6A1C8D1BC5F95A - -Len = 739 -Msg = 81A038A15FD7D39F55041B3C436B2D2ABF168A589244AAC58AF8E3234657E0E9892344D87E57F8FF8535282CC3046ACFE21795F55F521E9720441BEC60D8948FB7F4086CA1CDF11A55E6F477B08E1FE9993F20B55533A05617EFB56780 -MD = D9A5174C18A5D7199468AB2EC6DF9CEBEF46CE74266C852C7815F76A - -Len = 740 -Msg = A2D5A45983DBEA20C34211B395736AB2E93B185F2AB4A09C9BD1221D070E196B34B736682CCB9E5ECA84491EC2CE45DE770B79BF138FE18DAE6C1CDED27992557C939ECD5E99431F2D8EEE6DBF8FCDE40040522EB74058B32EA34DF4B0 -MD = BD739C661259B3C1223A74CCD0AB284EC224E56A3912C05A0F5E5050 - -Len = 741 -Msg = BE4D1EB0174E7864361BF6E36D4B017E02DA05C498747457A01283F10889205877A53D588AA2A6515888D3DC411A6A12FC7DE5FF9FFA2487CBA37204F2116261361CF243F9A686251665345702EA29BF61F6467F353FB3958EF501C600 -MD = 2DEE31FD98182EB756ABC58615EABDA47C087C7D3F55551EF64475AB - -Len = 742 -Msg = 2034010759152F3222157B787FAF0688A0E9A470772FC1C41E608C0738085B00EFD92F0CE2AEB194556CA83C2EFF6CDD0510A7CE3739308B2D54A3668A799271E14721C33AA50359406825DD16D2F21983DB25BC195D7E2292F9B7E624 -MD = 670B2CBD20EEDB674BE637BD08DEFD54BA70DD84BFDD3F2CEAF5595D - -Len = 743 -Msg = 32A05FC349E5A290FA9B3CB6B1E692057992AD2AEA4767E30644AE845134A1024E5A68156B4FC368DB7187063C99C33896DA02A99FFA4F7D8A22B578DF030E8CE34EF5FC3661CBF56E86801C1BE531A67B4317DC6C6576C12A9167D0C6 -MD = 5181C92CD724DA7EBE18BF042F5745905ADADB03B06F8A9F63267376 - -Len = 744 -Msg = 76EECF956A52649F877528146DE33DF249CD800E21830F65E90F0F25CA9D6540FDE40603230ECA6760F1139C7F268DEBA2060631EEA92B1FFF05F93FD5572FBE29579ECD48BC3A8D6C2EB4A6B26E38D6C5FBF2C08044AEEA470A8F2F26 -MD = 1060AFD1E1B9F7F41291A4861774B3B0C95A812788A41D7EBEF4A893 - -Len = 745 -Msg = 1DCDC5D09B905D1F932BEEF9D3529ADCC20322937CA3576086DF22FA0DB226D4A2E49F41A21908C2B6F77055ABB72D7769174B35813586DFC1802047D801380350FA7EBBD158DEC6C82E93AEB06E8B18B6CD99FCC72E575E5BFA4AB32100 -MD = 1FC425A08993D3F3B0E1FCE13A13691F5B6836EE8651A22B3ED704AD - -Len = 746 -Msg = EEACB938F6285732979F3CB7CAE9023A0F187CDDD0CDED771037ECCAD2DFDC9AABE803035AED9B42A164F1CA5E754C40F31BBA3A3E253958DF75CBDC16367565FF426D30FF4435E9013655BCB52CA1140345E712D8F7A4921B1E18B04300 -MD = 9AD7D63D4B3656434487389C6571438F1F82FAD1574BC05C1C940CB3 - -Len = 747 -Msg = F5C107B8C6F4C0B86202A1E943B049A09FA770F010333DC67233A7754D437EAD8C183D1F8AE3A4D62045DD69F9E751E82FE078768B0314898FEBAFF3B228CC85DD7C7AE786004555698B930D288CAF17E97A3200E4069EBEF80059F32780 -MD = 965893713CC2CD49FC0CD77900C9AC3F7D98A132BE9301B3D0BE1949 - -Len = 748 -Msg = 2488C513A23128D2FB1694435F708E15C4DC0B2C2FE7B6AB060ACD0096E696F8D735B6557FEE0E518870AC2D4F62759C990F458DE19AAF1473288CC4252AE745651140790058F2ED53B30B35E556B865D331D1A0B4875809FFDF3250FB80 -MD = 57C7781CF9CEE869BE1295A4DF025757F99C8021F21FF735B6465FA4 - -Len = 749 -Msg = 44DFB4D53F3F197A602B273046B4D37E78C2FAEE6B64EDB48A8EC18AC173D21D9B1140A1EF00A184E75DA7262CE9873ED99AB740BA75872A37BFE3179127ED0C301D26FF6C7EC76D80C691452D2B84B05341E1D93457C7B6623338621D30 -MD = 5A9AC831865075CCF67860490E20801E4959175E9F5C54F0670F145C - -Len = 750 -Msg = 798CE6CA7DC91C938FF9C3F3253DF0B57FD5D548B162562082A88AECB01F69FB68092CFE8E7921768636AE88C35FFFF093E0E380B28CF939750FAE3207198ECECB327F0CA80DB4B0026D2BF1B9E8C5B01DA7C761BB1DDB4ABE2CD9DF6C38 -MD = 1EB4C94825D5CC9282160E6BB73D16DAEA65B1736BE0C49CBA3E38A9 - -Len = 751 -Msg = 8177FAE4AD2299632B8CC7CA64A77777C4CB0770DA8AD86A73A1387F2A53B473EE373DB0FCB73163CFD6903EF5ABBA7464AD74D7E3342D0118C99635CFD2DF68349ECC0D2B3C56502178E33C52CE3D7EB486C5DC33FA1EE79915D232D78A -MD = 7F64A08BFDF7E4862D3F63FB6A6AD399D51E8C3D4CC7EDC85DB57949 - -Len = 752 -Msg = 7ADC0B6693E61C269F278E6944A5A2D8300981E40022F839AC644387BFAC9086650085C2CDC585FEA47B9D2E52D65A2B29A7DC370401EF5D60DD0D21F9E2B90FAE919319B14B8C5565B0423CEFB827D5F1203302A9D01523498A4DB10374 -MD = EA91EDC393491B4CBC035B8538DF08E3C6B8CAD18338053C81FE2E08 - -Len = 753 -Msg = 6B6F9EAFA4DFBCC5968C0E9F2FD05418D0D14408DDD4F815D823DFDC3B86A6CC4CD7E251EDC6D1CD01F70ECDC0E10F57B6DDE2A299D964C64B3369041B8903B85FCBDC6F421320EE88C1963603E91C1EFDA49A9EBC6CD3BA5BDB56810BE400 -MD = DA5FC957F6D5EECE0A4D4BABA25AC87E5954C4CC30CC7FC44858E0AE - -Len = 754 -Msg = FCDF2D9025A965E76B1062BEBCC4263060C47FBF50B94D8E6543CC4C18D9D451B70AB93D5D33880F41AF4AA1EC9657B9041D12B5360FC2CA584886F5123751E5DC4950D8371DF9E47B28BCB548D23E0E0FD2398415B435E638BE561DA9B6C0 -MD = D0A7E12D33ED3214AE6132D74D8A3D987E6AD58D6DBFCEE1B2C7D428 - -Len = 755 -Msg = 686E9C366F294D6CBD34198F99137212E06602B3946126EF61F129A751AD217C9B65BBB64777D0CB79B0287C111E2CDF7A230ADE611F3E686837D2CCD482D6EE8989547CFFEB22E9EA6486B8F5B801A43055AFF71BB31FED1722B561FB9B80 -MD = A4313B1092DC0D8A9E88A97D1B0BC1D7C594D2B1144E343F88BCD443 - -Len = 756 -Msg = 8F3F248C4ECC21F82CD80EB4B9351EE7F1DA57CA05940F5A16AAF673320FD07337F2EF33D949A20B4F10F46FCD4BA11ACA937F485DA1F8340976BF5B8A0AF3E9E9A1357AC423B0A5D135DD22D46BA708EF929F87503BCCC210ED3CC07762F0 -MD = CB6F287BF4D4C1FBA25C737871576F659A8157B9219074B55CCC1665 - -Len = 757 -Msg = F81B17BB20E5EC27B38A136443DCC8361D0407F9A703C395C18210B5013EF565B79D2F211D3A57FD12FAE93E7AE049967CEB74ACC197187E7CBA48A3AA334F7CA54E1EFF502E10BD8CC0261B61BFEFC109FFCD980D94339E526F49CA8C1168 -MD = EE66E7A36CFDEBCFF0DD8E3AA36A266E2FEF6FA06702B0E29C52C554 - -Len = 758 -Msg = 44BC65FEEB041D28F92DECC9CCED0C82EA96A625578D136F3433BBFA45D4560FD02C4137880A5A5340BA50B508664D2D2F28E9A1DEFB835DD11917B7CB1F99C0F68255461CFB3D5B63605A41F2E767A5312F22C2763AF9AC56DF84AD2B9360 -MD = F36F9F37438C327A4AA38822D31F46F211971FABFD70A4C9BF9262F9 - -Len = 759 -Msg = AE840D40174167BB2263166491BCFC27D22277B34EE01988A1EAB70D588013FB67622EA09814065F4053B608661C5D1ACC9EDD2CC60FD1237A3FAF54752357D9A4BC668C22544BD278FBFA8137A70F2D749F00B64224D7F89AF7D21C658F28 -MD = D235F7FA595998DA7BAD6A697D9633F1F2F24359860251FC21DBAA73 - -Len = 760 -Msg = E1FFFA9826CCE8B86BCCEFB8794E48C46CDF372013F782ECED1E378269B7BE2B7BF51374092261AE120E822BE685F2E7A83664BCFBE38FE8633F24E633FFE1988E1BC5ACF59A587079A57A910BDA60060E85B5F5B6F776F0529639D9CCE4BD -MD = DF1AF149E5C92CB29174C1EDB6ED891EBCE4366010DC7CBFC9B1D757 - -Len = 761 -Msg = AEE916551172614EF72AE01261F6A0A83A3CA96DE06100D037370B33F1E1C4A48C6E03FCDAA0EFB1855DE62251035568C2E143B5ED4A7BEADC8E3880F3EBAB6043718FE1716DA54857BE77B9665885BFD917FCF3B689EAA656EB4BCD40C3A000 -MD = 68774113C91E63180C8CF7688E00AE3E68018D3ED3CE487CA1127DA9 - -Len = 762 -Msg = B62D734A657549F5F0DD26152D7520393E93FA79120520AF6D18160EF699842894B298C965D1FF9CB4200F778F4DEBB7910B34049488974EAC2EEF9372DD4674CF91981C5DD04FE47878D82F7215A1DF00B5DEE6D657771F77FCFF4A0F0FB700 -MD = D30D1AA59CC81EDEFACBDE37DFA61C53B6195AEB1DA10E735E7A3E19 - -Len = 763 -Msg = 607A7830E232CC6C8ADA43E6771A47D6D8F85533B09350591BEB1372A4968766D539D9720CD6FE0DFBE37B4B2B477DC120DC152B9662B9BE32403920B942D284F092D5C7FF6FC86E14ADF7605A0B356876212FFEA7313780112E469E587ED6A0 -MD = F0A332BC705B73199679CB2F8869035BF4BD7E20B1B47105EC75AD4B - -Len = 764 -Msg = F9BD410B5BDB01459653C9043E69479086CC7843259BAA5DF4E7F14BFEA9161EE11B149CE9977DB82F4666B2027E33FB5E2F2F298EF7E7D17E54957F63D5FFFCCE2203613D248F8D1C87C675530531677C1B2F2301640748F2770F2F9399DBE0 -MD = A5153AB4B5107F7AE70EED085E260E0AD5DA624E0B0003F776FCC1C1 - -Len = 765 -Msg = EA3C9C739E567B78C16751BCB07F497B3062483431236FF300EFFEE566E546610727D5EBEBB653A44616BB898D7396E9C8050F5D4569100EB64EC70DF3182A75A2F3108807E7CF8CF9CB46F8DF2DB20570BF49BE10A7CBA0201CDC68562C6598 -MD = CF1FA65F991CE40DFF09AFB49FB16F74165B91495EA73A76EF73F670 - -Len = 766 -Msg = D2FAB29E41C33D863B9D54D5289CAF08DD6A1807577A67C667E9A15B3E028D35D8FED331EA42491D09BB442900810A9188562E043BB07D445B8BCE72DF4FA79FB9883680CF619C1C33FF2FFCEB88652785C9B1DCD84DCC820971964740A7B694 -MD = 6A9C83BE366556E8127FA8C75E700DB6DBC18CB4E88BD7CE6ACEE56C - -Len = 767 -Msg = 7D1D7760367AC57888886DB653E275894F5E77307FD0552F3C215DFBAEFB379DEA88D2F94BCEF14B31CEDEB8B721CE65B51055357AB8D56AD4F131B9ACAD1F71861312F5A4BC8F7DF6FAA913A40DF179B887CF946597709DCCFFA0EBD4675812 -MD = CCE77AADF46D12B62B68ED6952B2D0056CE01535DFCF83CD02B09839 - -Len = 768 -Msg = 69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600 -MD = 5F698408BFF0246B05BAD96CB342B2FD2F11B6804EF2FA07A81B0920 - -Len = 769 -Msg = 2EA8CEC39A5FD5C5D1702E3414E3E1B2E7F995EEE85ED45C839D6F9700D0A98717105A653C1DD4A6BA203C37C2139A94A2BADF7D91B78EE47549A44DDECE61A7D57545D1AF181264D80C3E5F6048242DB8566C4B5A19B917A6E743376C80C5D900 -MD = 133563A556ABBAFBDCDE5C3107EF52714D97542EA4F9B5A78C64EB34 - -Len = 770 -Msg = 2F7BB5955EC214D7888D9905F242672DBA9AD7F069DCC7223BAE86D98E06963022BDA9BCFB4FB70E08A9D925259CB170116A232EED329E9ADAD7B2BA6265D228A5ACFD9217A26E3566C8911DAD49130E5B94AA76B63B2791B3F03DB1E223873D00 -MD = 3CEBF75349892989FD588719DC34582EF03790B8F273D429F2084EE6 - -Len = 771 -Msg = 9F17FEC7F006213F7CF73F749FADE644FB82FEDB4AD040D6215C2C37E231777A76ACF2B11322BB77C48DB77F7DC4FAD97D967990CB04414E3DD5F59F51492F84119CA604A258BC449AA334548100A4E820ED8E62A3168889D8D23464F1F34DC0E0 -MD = 2B8E37701881A9E3EBFDE684D29633C752142F665EF84C60A16D32B6 - -Len = 772 -Msg = 67B2619FAAF64FCD3EC0185032761437131683F4F75DAA2CB234F5C0E8014EF0CDAD47C93D3962052FA629CDC759BBA3EC8AB9CDF65D5C9B2EC6FA803DAF0A583FE1176768B81EADC4793E0CE47FF204C758B02DC21F9DEAB6267C2ACD5356D290 -MD = 07F444FFEA321CF3B825BD504E08782E42EE78F04D1347BCE3292854 - -Len = 773 -Msg = ACA049B282819B944F1F6114F989DD133A8B777922A8D2D487F04776405C31DB13BBBDD2D2B7AD994B28903F9C3C74549B8AE0DDB89D20221B30006DE9A13728BC2A553C8363FDEBAEC392C4D9AE569ED57B52D8BC20F593D96D857B1EFEA18D10 -MD = 6E4CF9F723ED288B7EB3D7D90238BB24360F94676E4DC65DE60629CC - -Len = 774 -Msg = 84D4E78D5A5CD08A94717D8AE14FE24E3670AF58851605DD337FD29482BA01BEFA38F954C9C5E021EEE41D1FA230C0AAA1BA306D6059ED113A9B9CCEB9F70D92A4B6886ECEB7E805D51E823BFA7A6B270199A0DAC2F6514EC6CC0DAC2E2D8CED10 -MD = C307B62D704BC3AF12D6420644B6B3711B3665EA433830D2804DA27D - -Len = 775 -Msg = 43C5378EC8FB95C451DCE02DFFD1DD6EC6E73EC464AEB26D9BE6ACDCD10A246E12740D939D480D0F69FABB6216E3FBF6C53C723B6624EFD8A79E90BFEFA048AFEA723F54B0F72168EBD6B271F981B5395DEE468278C80B014EC0D483F3C037270A -MD = 6454E926E79533DAFD8546879460F874CE49ED032BA98331AC0C79CA - -Len = 776 -Msg = 38A10A352CA5AEDFA8E19C64787D8E9C3A75DBF3B8674BFAB29B5DBFC15A63D10FAE66CD1A6E6D2452D557967EAAD89A4C98449787B0B3164CA5B717A93F24EB0B506CEB70CBBCB8D72B2A72993F909AAD92F044E0B5A2C9AC9CB16A0CA2F81F49 -MD = EBE6D61E8A946E0D45D3889F9E360ACD3A1A7D6C4B1307448E6E7357 - -Len = 777 -Msg = ECD731D02EEDBE3A4B9FFD5FDA34CB343D655176C691D8E8FBABC6A15F73B8E168E2AD9C97361EAD1EBD3C3335C1FC683882B81DAF55D9D657DA01EBED9D06A52C5C938B1D970AEC5EFD5034CE61DC9F67074A2DA145C27B4329CFB0F8B489729880 -MD = 0D4A25AB6576AA8C41A8C1C992C5E8DE54368E53A45F743B725B2D9A - -Len = 778 -Msg = C9CD6851FC6B8031E039FB7BDD8F1A6D7EC7854272E2309DA9CBA90A00F1F90B5FD3AE6E394067E17BBB4BD60B7BC11C8F425C430303EFECE951F5BA99BF550D98897C3723D758764A3A9F1D0CB95CA20B0BB919F061BEE4F5ABA38DA0FD146E46C0 -MD = 6F2F49B7BAED99F4B7F76CD9CFA891ECB6E2C716343FFED8EC90C5AE - -Len = 779 -Msg = C48E7340EB22C6EA14ABF7890E781E355FB37A7C278443FC710E8C17B87D13FEC7153E8E68BAE3DD640F966E3EA2813B36B017DD1B3D8D5099C4CA1EAD1C9BF5D1B92214BA10E8E0D783CE1C364FFF56F137A03189E0E62EFFF2B3535C9749F1EE80 -MD = 88E74ABEBA0E0037BD060352532F0BA4732B18BE230EA8F8C9B3784B - -Len = 780 -Msg = 01CE485175B07C55FC35363FEA239A26718D34DFC08E38E1391D4002C2B3F977A0074ECDA3AB485E6F3B0FE394BC64F187ED6A3B04A7B93EAE9876AEF77F01124ED2DD88956565669378C2CEE09D49728D3935F97698A6A3EF7C49E69104BA38F3B0 -MD = A6BA9BD4EF5E3142B73A932A85169E9DACF633DACC3F9DA3CD6B96CD - -Len = 781 -Msg = 69D1FE474AE0892557398BA77643E7A7F0AB218374CBCE7A9D2E51B1B319EA39B1EED38378482CF5D3780F543A773D80C66783F11B793BA267F32F23ED16473B6488C4E1006916B686044247BF3777224D5F16233AFA837A9988E436AB5BE485ADC0 -MD = 92665FE1F16BC5646CA36A76548E2D468EB0287577FBF5B2B94FDF36 - -Len = 782 -Msg = 79EF097DBFA16820E6A40454D428F3FB0B19047DD0AB46588F825ECC6344C53BDDACA3DF63E2FB087984BC58C22F2B61003CEE298C2B35EE788CD4C834A82DE93A04E8722826A645CC3EFD07F32B30C3CD59BC5C82CFF16B213A09CA24A53DA12E70 -MD = 30F789A245D38E2C353A405D83C8E2B45CE3C2734EBFABBF1E22C015 - -Len = 783 -Msg = D03DD6E01CCF153ED2878C9D3DE4E0DE7D96D91A2CE3BFD7E77ED6652616EB87188C466D44E6DA9FDB2015DD896761B88033E0D98B960C322153B51548CF21EF26029556E7FC85D62783B676EE38FAEF56F156383CCD06915FAE4395B3403E50DB66 -MD = 73FBE0B492BC8818DE3725302F32530382F7809D7192495DD4CF1682 - -Len = 784 -Msg = 6D8C6E449BC13634F115749C248C17CD148B72157A2C37BF8969EA83B4D6BA8C0EE2711C28EE11495F43049596520CE436004B026B6C1F7292B9C436B055CBB72D530D860D1276A1502A5140E3C3F54A93663E4D20EDEC32D284E25564F624955B52 -MD = 1B7F6BCB2271AC9C3B558E95F85285EE756B03B767A01AC57D7C6E94 - -Len = 785 -Msg = 6A15D2C891310B9D31EA4DE5ED861595938093F969102EC4E61F36688005876CAC6AA4DD19185E756AC6C75B1A77C46952D5147B52862DC108D8B690191DDFB93F9463BC95EA6054688AC748A519EFF46E0D6FFF33F312A9531B90E5B81D1EB9BC5400 -MD = 9170D5B3C5BF2A4DC73C31A334220838A088E78CEDCACFAAA2FEA334 - -Len = 786 -Msg = 4799898B930C206FD677188EDFE87F53978DDFA62418695F83A764F096CF0C3E77EA9EC22552F4EC608B59DFAD49691B076181A15C9B18539A6A64443DBED8B575CCE0BCF1D01DCB3719CBFACAC94E36CD466D253F3192F74D0900667196BFFD8BFEC0 -MD = 5DC1796B519E6E3766DDF6541136BE8E17CDF8A4F43D976DDD90B90B - -Len = 787 -Msg = D00AF463BA4905312AC7C93AE0F5814D903C2CF3E4314A09D8083E8FF602ED65301BF032FFFA16E57CC1D39B78BE5F7F1B4E7D118EB4C9C60B2AA752377820F4B23F52AFB3DABA13C33E354F2AD791B98C0285B3289D017FD0B015E275F56452C64DE0 -MD = 67031B15BDA06C9CB31D8712857C8B2751AE96C4955E4A6A2386B5FA - -Len = 788 -Msg = 4BA02BD76E684B9DBF18AB2EC6A5CA2EAFDF25F5A7D4C90177DE0F93392983E680A71F03185136D6396A65F583837F84871CF564E62E7CEC42B58C8BA153952B28F7A9880D9D7B5FD8E1CBDF9CA005FD78D72BAAD574414E4128CA28730C29804C9CF0 -MD = A53303A2F6164C93F5AACD938660C61F9ABD4F2D337483707DAF424A - -Len = 789 -Msg = 4540739B329C3748092E2AAAD779D52393B8D97B42F784121F4C045A586BF21E33EC1A55AD2A16B398587A15297B9A8B5858572CBAA405275748ACA67FD75D5102466F5BB433A77C41F442120E1D3C95365C9A014B324B01A75D3182F88F9F89AB5B08 -MD = 86758B669715947FB50108D1F4FB1E9D169FAAA723E91CD8E988AFB3 - -Len = 790 -Msg = 19218B21018F5392D90433A5BB255292CE42EE74A3CB012B28EBF120F1BB35B3F0697B33043E90F4CA5649984EE1866AFA01457FB5F8A160AA54FB249E171436325AED03B959BECBBC8D6E323507470C147D7CF6D1CAEEA06218022444E01B5A2D54F8 -MD = DFDE06E5349DBED91AEE740437735FE9BBFF7C17E3340475E92BF646 - -Len = 791 -Msg = 29C1C9CF77BBF33FE3335014E7E88BA5EB777B55DF264589B44D05FC135E4C5170852968ADE4D911476D5C0D0D5E82506345A7B6A1A84EEAACDD49DE05487A6A861CF30AED0B86E320B73AA2E0BF6A67277662C0B7696E585E97F690DC51DD1F51E41A -MD = 80889E7F937E283F38AD3A5F9D476FC30F649637CA2CBC492B0EE48D - -Len = 792 -Msg = 6EFCBCAF451C129DBE00B9CEF0C3749D3EE9D41C7BD500ADE40CDC65DEDBBBADB885A5B14B32A0C0D087825201E303288A733842FA7E599C0C514E078F05C821C7A4498B01C40032E9F1872A1C925FA17CE253E8935E4C3C71282242CB716B2089CCC1 -MD = 436D1BCD6B3DE2677A72B93E2CEDB60C84A4FE125A802E2997EB2E67 - -Len = 793 -Msg = EDE8BB44D6C9F552F8B2C14750B8D8419370145875D04CCB213E4BD41DA0ABA1CA36DECA9710BB6C846A7DB3E90AECD10492E8135A3289393AD1F8F30FE1EB3707FD966369F766D6331ED4DE80D8252C03D88F6101781E987185EC7E277BFEB7312B6F80 -MD = 5F48D747DDD82381CD68B21A88FA6837DED7644F20CA2B3A3EBB77E9 - -Len = 794 -Msg = CE727EA48D1188D5AE6308DE82ACE9B491A784153CF45690B8FD23A7FE9FA4F43186D423735D56BC9D6E4E69E7B203698AA2EAACFE42064EFAF1538434A4780F13D1AEACF78A5F84C60BFA2E8753C1E51A518B05ECBCBBD86FA27EF3B64838F5FF2235C0 -MD = 5ABEE61E085AD84CD72F171F8F413542716A76A86EF5FEE687A8C1BE - -Len = 795 -Msg = 3457335BA5117C3E7568CEF312C75EBE57BBD6EFE2C06E0D3457614F429A27A6216928507CB18C198CB9CDEE8BFF4B2EC62F29AA9F9DEF4A0AF45741CDFC3C5B96F10B8E2886AC4D24A6DDBC490E402031DAF68A742AEB7EC1C0426807A073C86C9EBA20 -MD = C0496A8FBE0A5896EB47ABE755ED91DDEE1BEECDC747A3827771C15D - -Len = 796 -Msg = 886F0BBC8286AEFCE8684D589789A401EA5EC013B0F36CEB015860168458A68B66CE0917567D3401B6D3725F16089C9EF77978180B282D6C315B54A60D7E76EE1676C66C78367C2F3361EA0D7D88ECBCA4C4BB58381AEB2E5E061B6901C3684599B4B390 -MD = 876B7D36682B00CDD5C99BEF8379EBCA3E7EA85B4CAF21C21E1E365A - -Len = 797 -Msg = 083CCE8161113669202D9028456FDDF2F9C911D06B732290F8C17F28675E71DFDAEBCAF0B0E2DFB89336B3B2AA6C21232949AB3567F10888437B8D895B4FD0E82D099C63B8578A51352215309900495A71BAC7B60FDA02318C381A984204532E031948F0 -MD = 5CB92F203E708305083A8B9C5E6E0B34112F5BBB9315265A0E95CDF0 - -Len = 798 -Msg = 57E254FFFEB91C9E6625991FC2AA3083D47BE7A967E187F72EF31EE024FFD7754FCDA48C584948BC4411B166326299D0FE63D2B11A0A5F9395C88F3DBEEEC5E130BBCEA280FDBE851C48BCDF49A56ED9BA9569C244A9F7665E1ACC7921DBD8AB0B9ECE64 -MD = 9334157B479283888019AA3AF55834D2FBE5BC3A2DAD5C3985FAA874 - -Len = 799 -Msg = 7425D92769338BB8EB433A25BC7CD734276B7735677AE2B95F5B485AF20D238C2EA6676ADE03BFCB54B4AEE8ADC461EE2DF2113987FE7BD3AECFE78EF6CFCC6FDB00C11CE655A2EE21AE4C9C0780D26999674A7C10FBC11780FB0D0C0E9166D34361595A -MD = C8627507D6B202D0B7391C46746956E11C36D459FC57979D4B9DEFBC - -Len = 800 -Msg = 433C5303131624C0021D868A30825475E8D0BD3052A022180398F4CA4423B98214B6BEAAC21C8807A2C33F8C93BD42B092CC1B06CEDF3224D5ED1EC29784444F22E08A55AA58542B524B02CD3D5D5F6907AFE71C5D7462224A3F9D9E53E7E0846DCBB4CE -MD = 62B10F1B6236EBC2DA72957742A8D4E48E213B5F8934604BFD4D2C3A - -Len = 801 -Msg = A5E5E7F725AF8C544D93D2D409D6F82D3BF941D5F9783C279FC6156699A8D8D3133FDFBEA9FED5446315C33A18A93C006D2ACA4EBB4878FCC55970C477AA4E88D44094B0BFBF12C50CA62EDE8AF48AF3E96F78A96CC6DCD98480086DEC487DD003A4BEAF00 -MD = 170B9AF3E380019C51078EA93EC9D1B9CA3D70BB3598C561AFB29CB2 - -Len = 802 -Msg = DFD88A3F1A60E1B9A763B264CFF5CE6B34ADC92B3CCF29C6841D261D0DFF42415D10E3FCD96EA4BCA762BF5984B06F9DD2359538C6EA628D6B810DE79A6E572C18CD3F49DCE1CAC943E9500E19CA2E5B71142B9AC511F240BE6523A49A37282189D4A69800 -MD = 4FA855AF11112DF1A094436CFE99FB9F5129FD90A1CA8EFF38C6EC10 - -Len = 803 -Msg = 33054CF806168A875E95D33E5B58622BD057A49373376322E9350EAC04F7424613A0C86802AEA9B8FD7BB93D41CEAEE53A94D0B66951FE0C7E93E75659A2987833765901F1A4A20A0EAC3F8AA4DC6BB075017812ED4E8CF883BD23AD17EB7DE6CC54B21E80 -MD = F843F177725862CB4068FAC29DB826B923FEAFDD0F1407101C4D0FD0 - -Len = 804 -Msg = 7E8EFC3504D6EFC19B36327F55DA196A13A082688FD85B63D0C48369149D6BFF4293D120A1CAEFE18AC17F046B4196DB0D6CB4CDE7739727BCB8880E652C60B2F48668FA3A40B1C94BB393E09E14CB1591343C943874CE4195251D930C772B9439386ACF60 -MD = D9DA96F4D10F463AE9885C9AB475E73FE00161117B3F8D75AFC9EDEA - -Len = 805 -Msg = EEB67D90755792773D303BFD27895032E74F41AFF1B3C552A2F9707842AAD7745E31FCA6EA35FDD47EA99EB27A2B063B0268943E75E629073E77D7FEC8C2E8380FDD7ADBA292803B3E7BEF8D85B23B937BC2444AB69740497902A8767F19AB91C33EC65A58 -MD = 65CDD42C661D25362BBC1DC7551998516AE2D09ACB8ED1BD1CD00DEA - -Len = 806 -Msg = 9C433E350E1BE986080C5757ED51FCB47EB31D70A9AB061236AAB0907C82C9CCEDFBA2EA62DA2C783CF5151683015EA75DD545E79BAD38DE99B287D25CE11C657D507D94435984A4276D8940F4EA571FFC9B550379F6148C720E4B9133D71EE120B8935A3C -MD = 76A83A0A4BA81D6B16C47ED125CD08C3C8D65B6E3EBF542F967CC088 - -Len = 807 -Msg = 769CB7E6B4DF1D6A4E50461EDF4DD06502F2EC543E85A3C64CA6B9FE378E71B1A461AEB8F12A16D4B113CC688BD3E142968DA6AD191EBD84C6FD77268E11FA83E1B5A8D61B5DEEA355E5BE623ECC5C4C5B11FA0B4951CBAF741A674065368F761594D0C77C -MD = F3BECEF2289676A899780D98699C73A1E9C3922D75B8473DA1033BBB - -Len = 808 -Msg = A873E0C67CA639026B6683008F7AA6324D4979550E9BCE064CA1E1FB97A30B147A24F3F666C0A72D71348EDE701CF2D17E2253C34D1EC3B647DBCEF2F879F4EB881C4830B791378C901EB725EA5C172316C6D606E0AF7DF4DF7F76E490CD30B2BADF45685F -MD = 1186BEA0880D0A96F6A56BBB431F4D264838BB0180DCF66EF0B599CA - -Len = 809 -Msg = 5972087DF84E1087BE6AF080329EF86D8823D4DFBCF32403E58F9F33F889C15FE13D36E327B78A61BA646D54933A7A7B7B55522FEB9C3748CBBCE5D9AD190A84A65CDE8FBC3195034D419F41B883AF393D39F566FEA0552119F0EBE6A36C80DED27C9E6EEF00 -MD = 251D542762B72F0A6766A5292FC90136259A9FFDF1C2C6811CEE521B - -Len = 810 -Msg = 6DB3F5D3691D10F0FBF2A40E56C0754593762446B21BF42C602790F3F0510D14464DD730D0648591119B425A94DC7474648127D39AD764698E5690D82357D3396DFEEF12A91F19EC62C6355A363563E08BA942A4BD06E2D05FA5C9037F3766304A640D01D800 -MD = 1DE8B4714852419C8869ABC82A08E33E882603E212C9EA608178628B - -Len = 811 -Msg = E5EC70D574A9AF9A358F33A15CC8C3830879D52939E6F95A695F76FAAABB988ED2A7BEF8974957C71090D3129E773B56DE379637DBA6BB29E8DC3F7116B67B690A056F2DDCE0A3C3FF65A7217D0F6EBA4BA9F5641EFB67EE88BDD80F0172086A60A9ED322960 -MD = 885B93EBF4270E02AB88F821ACFD90CC5C6638A50A8FE4282F361DA1 - -Len = 812 -Msg = EE5B52EF1C171ACEE68C2E3C4AB9BA08B91153DBA6C85CA817BC14E3484EB6B0E4D93766AAF37C3A571A52950EBE5DCBFBDFEDE238866EC6CF0B41FBD86518A07C360AD1BC4AEC074EF32083E9FD19B7F2C19ED5E7A0F162AFE1F1FD11C38F929C3D53BDBCF0 -MD = 7EB81C2DB00E4E11641353524B24DA3DB86B1F0B80CBDBAE89D032C0 - -Len = 813 -Msg = C27E137ADDECA1E45434891C08DE549E79A79D148E46B8A99727FED7C28CBA6662BB9C8DDFC9E631E410FBFA899B2FEA7DD27CB49DAEB1BC51C85F3FE220711ABB10836F97B6A2D0D27010719C002FE8BD88406E051506BD560E945AFAC765C8ECDC0E476ED0 -MD = 6319CC3FB63EEC49BF5D92824BA63D163D0B7932926B37D3FDFD2ADA - -Len = 814 -Msg = 1A4FF48A014B9B9B73ABF97D0D6C8043CC542ED70226C9A06439251E676B59DFB775688A6AC7BE695A4C768F4A635186C98F7D87D31333BC0FCC3562B41333AB41A1495C615689892008E50C46ECD6F0CA33672219F15F0F583248A5283B3EEE67A750E310C0 -MD = 894E7D6BBE9B4CC6C7CF24CD7976B8C10F75C751E103161E6323E046 - -Len = 815 -Msg = EBFE2BB16E038B5E58D23E44300E75911B153B031AE0EA461F3AEBF8DD9B4E4BE5703F18E8205293E2E0415AED09AC41E8A5937FCDA3796C2997143F5DFB6B585C7652F1ACCB8AB4B6123196628880670D5B07DD989E04474372E32FFE65CC7192C42D25B1F0 -MD = 95F23CEF34637E41DFBF8C7C666BDC64075E641ED93D0B9E1E8AB307 - -Len = 816 -Msg = 006917B64F9DCDF1D2D87C8A6173B64F6587168E80FAA80F82D84F60301E561E312D9FBCE62F39A6FB476E01E925F26BCC91DE621449BE6504C504830AAE394096C8FC7694651051365D4EE9070101EC9B68086F2EA8F8AB7B811EA8AD934D5C9B62C60A4771 -MD = 383D2F41ECFDA5994E815432999D192E1A282FF5663196A4A268A67D - -Len = 817 -Msg = DAAF92F1DD17419CB8CFFC3B36436412E393C29822EACE765F18D5531BDB87BA878A816D73FA52842FF6A4590614E9B50C1FBA6CD3D538E8E07E1BB7967014D5E4906BB5CF070097D4B57FD44E705AE825A2AF35E265639E85C49323CAE2BECF48C13E400ECB80 -MD = F932D788B6B0B418D7E5EC0AAFBC0DA5913BBDEBAF83A953A50B08D9 - -Len = 818 -Msg = B5655245E132143776E7DF7EECF7590B09EC823EECC6E2E3D3E4724C4CF7264094A7CF6EFE235AE4CA71C11A64D020FE13F472259AF9D0C8773CB0FCDAF86D2D602CFAF6690854CB8831730529950DF7E65D8EE9CC3B4C89CFECF054EF0D4BF8404D8F9B849AC0 -MD = 12F4438FA7FF06510C7AB2600AAA307F62C5E689D3F683239EE973B3 - -Len = 819 -Msg = D4A9D0503F80C8A4BE00A5A1BF4139B846DD1784E9547D30EBC6241ACFDEEC1DAD4BE6D11A8AEEC157D59F61972414BDE06D17CF56274547201A5F90C9EA82B64E88D78850C7F968E15AC8A82BF08FF53328A3E15DE615A21C28A3D42436F84C55F234EF23CA20 -MD = 965E6E3B4FFB070390C43E2D6C782131F4990869B09AD7711E974B7C - -Len = 820 -Msg = 61EFBDF5987F9C45CE71F21DE495E46DDEAD02E679ED9C83A0613BE3FCA8660145F47340FF300657271024C3E8BB7E27F31406EAACDAB3C5F299B66C101B0083EF230A7283E868337E8699EE3A5723C42BA488B0FCDFF172E819576C5993B496BD768276A113E0 -MD = 801F0F2CAF74B5AD5C8B2B0C1BEF2A38A2DCE35D7DD250563053C25E - -Len = 821 -Msg = 6674A76DB4DB544DA1D6FF5D7A01ACD0BAA446911421C7BDB19F347DAC8145337FA2220A1760AAF88A5803A6C2502E796BA486600946B60F2171E7EEE138F9A93CF7EA8785496B078CF26FE15627240D528B205054AD68E6FEB7F5F0B0DBA570A86A44B88FE3A0 -MD = A6E812063EFEE64F070E8E6A355781B39C058F0C40DB0A3F7376562C - -Len = 822 -Msg = D5CDD6DC483DD693792AB8599E31F7E678E2E3F50E9B09DA1D16537FE21B8700B47CFBEC2F2B31C83CF612594A3D847B2A0497D3C1A4E78A75CFE94B850F08580D799921A2A105B7280B07629845E2CAE0ACDD43E62C3CC76F2BE06F11C233B32C8CB32D2CAFD0 -MD = 1C95A22328BB7D180CE439C5F6F2C9AC983BEB75F324A6D110C8877E - -Len = 823 -Msg = 95430200EE2A59BA3D4FF5176E9328EEB792F57838631334BA0D95862CE2BA8550ADDE662EC5689D2932B6637ECA4268861BA868C5FB08DD016DF6E3F5E8F7BC86C063F0B471A94BB02C999C13D8A89F2DC536ADFDE9048E836674E781CA2F5247A23FD280CE30 -MD = F2478EB33F6D7C693821298B3337C6BAA94AFC3BF7CB7D365EEBBCDC - -Len = 824 -Msg = F13C972C52CB3CC4A4DF28C97F2DF11CE089B815466BE88863243EB318C2ADB1A417CB1041308598541720197B9B1CB5BA2318BD5574D1DF2174AF14884149BA9B2F446D609DF240CE335599957B8EC80876D9A085AE084907BC5961B20BF5F6CA58D5DAB38ADB -MD = E2594A633B2DC671FD0DDFD3BF7238332C425520827C524FB0E19778 - -Len = 825 -Msg = 96EF70D6957AFED1EBF9C5E3E1CA33DCEE14589C8AD2C7819B401D8C93473A06D0CFED12D4155488DE13496426F7808C666927DBCC54CD58F82A9D7879541D6F66FCC0239E89DBA84C85AA34FFE93DB632AFE2B490E2794F95A8A6C14706759688696354AF9E4C80 -MD = FBA5D59E2069F098B6FE319F340043AEC98955FBF23E6C5661A28CD4 - -Len = 826 -Msg = 22BAE2BE6335304E5F9779FA2FDF496D9636492A8B3E6B650420DAA6B45BE8B25A2F00045DB1364B1F69DF590EEF88E61EF2F2E11FF9903C9A484B0EFB2A65E2984710C71688A00A8C04AF9335A826FC0EDF197B3F3BE1AA4685BD39847A18B7F388C56D5CF749C0 -MD = 6CCA9891AEDA1B5A6FFBD89131221DA6C559702A00979767554D346A - -Len = 827 -Msg = D076043F4045A478C51530D457FC950916FAEAF555C2B28E8567394D0BB8A3C7D8A7225E6C0C94D39D03F0F50133ABBE6F009302153014025FB4B1F7B8EFCC9F4F9C3EAB0608DB41095AAD0D2B63037F3986DF71D6651946EE9F18DF52635BBD360F21E2555C5020 -MD = 0193A4C1D0998643937D8C2B814FC286D2DDB1C08A9A7E4B8BB143A0 - -Len = 828 -Msg = AFC0DFAD531BFAD5320903F56AF3D1C6A1A7EEB365004B5193F48B3F1B6364B502B3E767BBEC8D3C8CB1888BEF939745427AF225DB0B80227382E93478D80798D6F7CC79E1229126763B5595747708412E2A1065468967AF88E87CA44BF7C70CD94D6C0285D77D20 -MD = 0C2D626D5F11B517113CCED16EF0D930017EE3A67CED448898274BE3 - -Len = 829 -Msg = 38F33BD532B7A176B1BBD5440A6B6F34BA5EB710A4ED3B73195E79CB0D227258C97771B69CF8319D30F71A86B06A04D4F8F564044B25595FDDC559435426F6802FAC0A9B8EF02A66CD99E052320F3EFAC5E98F41DC62177FC5422C0C7CFFC845B61C93465BB61A08 -MD = 9487B19F24959D32847958D70EFE33F2C29938FDB7597780BC42B7E6 - -Len = 830 -Msg = 4A1D225317981D38424F1CCC96F7D895EFD4DBF51A0B568BFDB33F81AAC34098EE0D1F8F5819885FCF53823851E2DCDDC4D42164E223DB7F0C8A25655E91D193D595D31808C1B11115BD5913548A2A7F7C954719A1EE305D67A59AB3EEE0BD1326D2C46FAB79FAA4 -MD = D0E8868BBE1E968FCFCD190C620EEC818D48798D342994E64FB98442 - -Len = 831 -Msg = 071E9535D8B487FBAC04DD0C720CF0902365F55279752F4A4AEA2DC849F6F596562DD874C2FBC90A0773CB9AFFD80BCDEB16673471B2A4EB40410CACA3D7DDDC57C727D3FB4D25DD147C77426DEF0A86BC0840307F6495493714BA9C0C3C1F4959016F1F81A5D466 -MD = 5A132263837A987701DBA7C530C77EFA545C90215A1E6BA0900DB934 - -Len = 832 -Msg = E35780EB9799AD4C77535D4DDB683CF33EF367715327CF4C4A58ED9CBDCDD486F669F80189D549A9364FA82A51A52654EC721BB3AAB95DCEB4A86A6AFA93826DB923517E928F33E3FBA850D45660EF83B9876ACCAFA2A9987A254B137C6E140A21691E1069413848 -MD = 234764AAE8C39B1571D7741BB176FF86246070EC9AC97A1B2EB35472 - -Len = 833 -Msg = CDF3B81753BBE183F089CA5B99AC4DA2944DD2CA4AD5502A5FB27D51FB4C5DD3A73337F3CCCD5F3EDAC73F23BC14677F8862E94A9C899607E9CDD242D399C9CF2CC17AADDCB2B1FA86691B82BB3F80B8F53BE95B3806BA1D61555ADA06C1F16AA011F99CF8EC913980 -MD = E9066104001F90B09BB18753716D579FDF2449CBDC92270B2FE82B26 - -Len = 834 -Msg = 1719A08AE56DA8261AC8CC3B0E644425C1A4AEDBE7563BAF61591CA0462F4AA5D0D31CE15F9A616C8980017C0C886C80AB258958074ABFCACAC023E671D8509AC053F5AF9456C22D9A85BE4D1788DC12E7F14C076534BEEA7FA37921A4F1336B02721AD135B6E57C40 -MD = FC6A5FC40101199DF04F6C2FF5B7430219C0D1D298D9A406AD81B0AB - -Len = 835 -Msg = E483D597CCF87190A723FCB835B7D58E051122D6641B5A2BF495BC121B50A1D087146DC722D08785DA3690C569CE1E4FB0C1241E501A4D3E438BD598E637275B08A3130F13789F01E1F0B87317BA3C70155E6770060C1058C73966D534B38D1D99AB40C39810428000 -MD = A1E6541D59039266F3F160AF14CE403046B291F884AC601CD09BB538 - -Len = 836 -Msg = 6C9018345E122A389CEF69E5DB5FFEC001A5D9BD4ED6A05C82D236CF90A6D4FF1AB5DC991572097413D308272FA40EE4EE7BEA95F4EFDAAC6EE20EBFFED180C9A002F491CCC42490B1E51A284E309E326F43530A5C2745E82412C6A6C7AB8603E0F264F8B9941FD260 -MD = 42A501EE07F2F75A160A8FCE6474E63D2EC62D426606CDCABAF91701 - -Len = 837 -Msg = F3160A912C1F7C08CEAB5E6C6E94C50FD124F3DD9C4D8034D27C80B39B7B9BF130F861D365AD61DFA407A8EF91AEBEDBE23E9DE96406FF0C6C312553FEDB125AFD59F7711210861A5A476B293F3CC355425CB949C2E833AE4A30DD9B4CE35EEAEF2FBDE4FD6D32B660 -MD = BE0D80F22989132628BF6EAC954AA422E2B1473ADEB923F2D661E8B4 - -Len = 838 -Msg = 4BF1FAD35729900567FB4A3E0D5681C689CD0066EE0E97479A4A746F5E771517C42B6B827BFE16381CD52A985002160833BAC1AF81269F18821B0E6CD6C54AD33827BE5094BAFA6A08A67502714EF0101D5D91E8AA9AB81031AD2B6DF4963709DBC790ACB88A527698 -MD = 576B5FBC693F16DD67EAC0935E8FA52CBEABFDDEBE717AAE5358AF35 - -Len = 839 -Msg = 195361302C2F5B1B927CEE67B003E885A4E1D4FAFD7D13B02F5FB743608902060CCBCB200A57B374C8D220828DB36CCDADD6EE2AB33EE53B2002203D632B36B45E13778DACE865A715B375FC8CCA7FDBABCB5F1FAC8BC2B890D5A460583BDC5CFEF67A0BBF143D3918 -MD = 3496FFF0BFFA5EB34C8B6E70562C58B2BCC97B7BBB231A73430EC7C4 - -Len = 840 -Msg = 64EC021C9585E01FFE6D31BB50D44C79B6993D72678163DB474947A053674619D158016ADB243F5C8D50AA92F50AB36E579FF2DABB780A2B529370DAA299207CFBCDD3A9A25006D19C4F1FE33E4B1EAEC315D8C6EE1E730623FD1941875B924EB57D6D0C2EDC4E78D6 -MD = A634D7EBAA2BC0043EB5E237690E38FF1E05EE5A042882A233A2D92A - -Len = 841 -Msg = A9C9225032B1662ACA561F01B0CD87798649F98A7C3C71F716AF72E55838536563BD092AEC04323328C107EE20D704D0ADC7C0DA8FE6598218078DB1D0F00874BFA7048039416EF082B6925623FCEEB145919D75C27591952EB7B363F784258033AEC75D5F3A9D81CC00 -MD = D8870EA22D9C9269644AD16CB8B897FD2C430FF4E52D8991E0270DB4 - -Len = 842 -Msg = 1713AF8638ACE90592AC2B3BD76514C19F032C734641D29131412FA04ACD5C80CAE7FF34675E7B26D38488C0A5A34F88C36903ABAC06A319F59559C52F409C83C92CC07CAE1E1957F1B54ECBFC52F5F38F4B03D9573F5E2F5A5C7470D7F1F0BB4D356F13C4D401580400 -MD = 178107F3570A9C8810D483B04E35622027F0E0C2CD95D7E513B55C27 - -Len = 843 -Msg = F0B3C5E666BFCA1D234692223F77A6B80A0AF6C1E2456E8BFFE24147DC8BB7311386E21BE38FAC428447F89CE69BF5D399D4F10CFCC384B0643229D22AD5D1A96B5AF06743CBF8505C99171439E6F6305C28EC2D87473ED6181BD2FAB7C35610FA3D4B373D5683904EE0 -MD = 760152DBB50553229F28DBCCAB56C1578FECDAD3DF68A4C5CA18F010 - -Len = 844 -Msg = 51F0F520821988794FBA4A96C05CA8128955155F49F5B1D4609C8BEB3796E606E105873C4E1A9E1A1BBEA9C037BFA266748DE15EF59A3698068B2F64E448661E528299DA53F217527109628261FE236227CE792C93C27A86B742023A91E9F4EDC9C16AF3F9720BD6EB30 -MD = A8615AE42E1CEE31148062B07D5587CA21CA480AFBC17B3B498DAC2C - -Len = 845 -Msg = 5A601FC60FF03D6849FCD88E8E124B8AC906EB9002B91465B98EEA0F1C638EC35989EF537DF63FCC37FC465C3AA0E409378786B21CD884CFAED67C00A4784DC7855FF0CBF4DC78A9FCA92EC641BC5EE01960E6FDDE2418FFEDC338581479B09680C1579A063E7D7344E8 -MD = 92A78F44141207412770922DA3192BBF93BC3EBADBF8320BE74C4584 - -Len = 846 -Msg = 51B98503D91D779B7661CD7D28851F2F5FBD10D3FF1ED31743A9FC4B6D65FAA01E7385E0DE50DD1B4BC392D09CBC2042DADF5A827B305CE513648A46B35C003D6EAE1524379BFA009FD0CFEC537A5BE2516A524A8309A65AD93AC83B83479F4BA700307A7A1C5295CA18 -MD = CA55911E15257A9B2AAC549E2AD6A9E38075BFFD7E6577C1CB3B069C - -Len = 847 -Msg = 3DD565D9B8F291493D80301C50833F016FDCA70D35E6B66D8ED41AFD12B21AF8C675D487012EDC75A168124C9F7AFFEC4DD754A3B3050AF799D23E9322C328C61E131789DD7EECC47D0D973908A4B2706E3AAFA9CD9285470DD1877C164B12B9E45B7E8804D1C01CB866 -MD = 5B691BE733C847736850FA6C9AE363E8BE4E811A17D724EC0AC3EEB0 - -Len = 848 -Msg = 5954BAB512CF327D66B5D9F296180080402624AD7628506B555EEA8382562324CF452FBA4A2130DE3E165D11831A270D9CB97CE8C2D32A96F50D71600BB4CA268CF98E90D6496B0A6619A5A8C63DB6D8A0634DFC6C7EC8EA9C006B6C456F1B20CD19E781AF20454AC880 -MD = EF03FBB1EF3296EECFB98909E416D113B5741E44962EC57993C6DA5D - -Len = 849 -Msg = 8D22D0A3F113581C2C91A309747D3480D111FB0162796E06D48DAD005BD2275BB189B08A55FC56FDAC5D28BCE6F9EDCDC32EE464C1675C738AE8624CD20F7FA84A173329E3623DF7541835FECDB68416F665E4F5B4A357D74AB09EACD4EE6E3A301733536294A937FDCE80 -MD = F50228A1F74F33DA4CC15ABCB85D9C66D1E7B240C99B3C7D83BF71CA - -Len = 850 -Msg = E7EA0B40D3BC92E9624256442D52F477AEBF8473F1742B50C80783548BA450FEBEEC40D7DC7D3BA8D2B03BD72CFE1E36FEAF85681D155C0F435195E7533BD6048FD0796C05F6BB7B539F9EA5F51C16C6AC74DD79C3842218565C4B46D85EC00FE324E8489FF25FF5DFAD00 -MD = 4877CC6C35006BE93ECB7BE35472A59F9765EF08718F2ED69A68385E - -Len = 851 -Msg = 60A997F14924AF0BD818AAB8FB4FE112B298FD0D7556A4A118974E1612EDF6F479C5247F4BCF1E7ADD3D1D485317C668A1F627E0181F9E6ED35C4499A487783CEEC5F7AD330EA18989700C4A622F578A4A04FE0DF9ED9A7E45D7E5D79E5F26A68B0CB8D5E5D96CEA36EC00 -MD = D8ADBD58174D9023CB3A83CDFFAD4173B497DD51BD6AD8B2A27675CF - -Len = 852 -Msg = 162EC5B24DDFA48F4AA65289645F89CE3991040461A4240C59397253C89765295B27B12E19D5C1CF9080B45AA7BCCC14A0A79B3D7C428F48397EB429E925B4FCE06782DFE2487C6B0F0480B8124A15F6301259AD8211C3D859B705357E8D23AA92EEE769149F5171A33C70 -MD = B0B38D6EF40E576838CB8B39199DE1345A3C3EF8B56C1924F8DCE247 - -Len = 853 -Msg = D9C4E4068DD2D247BCFCCAEA5734472961D5C916EEBC714CC0FEE54141CC5DA3435CF8D492FE3BA399ED175911A195FCDFD22EFB57FD9D7D401C445B29AB330211E3103399794B205EC65B9658F9E425972C214ACFB1F1B481CBE2F4CA561564DA47383772CC8A190A1090 -MD = B7BD13A8D8A5E5B908ECD80C4B386AEC9596CA00667D563D5708EC27 - -Len = 854 -Msg = 574493FD995F2E299A0794B67AEFEC00A2015B0DA8E8FF1C1913457580BBF6812551A2F45821B5C864B065E9CF8CD6A4B2C7E11B64F7F572824014FDA485FD6235D30E9B7ADA48FAEC98F6AF9E5022E422037AC57EDC00EA528181E780863EF47E834E0F457FF410DFFCF4 -MD = 5E83DEE87C66DA4FACC97F99CC4FA2EBA286B872D7A2820E4138A4B2 - -Len = 855 -Msg = 3AEAB6285D74E6AF887D78B6A22059B2238CEEF2482D961A9C36A032158A8262061336ED09FFB7ABBD3D49B8EF0851DD5DAEC4970D27F6A69BCA5117AAE0593AEAD6BC6615D11ED11B057DCE996D614FA80DE96EA704C132578E9F20550659A6E483B4893122FA3B224022 -MD = E72FCFC9658CB7D8F7C519E83516D66B32DA46F739A6ECFFE4038F04 - -Len = 856 -Msg = 03D9F92B2C565709A568724A0AFF90F8F347F43B02338F94A03ED32E6F33666FF5802DA4C81BDCE0D0E86C04AFD4EDC2FC8B4141C2975B6F07639B1994C973D9A9AFCE3D9D365862003498513BFA166D2629E314D97441667B007414E739D7FEBF0FE3C32C17AA188A8683 -MD = 210D245CC8B5A7B4C1B118A9890ECDDC34A66EA92805B7A7C19A944A - -Len = 857 -Msg = 11ED52B37CB6F8AFF28BFBBB49E4E346B84CB02B5DEA39CA1409C16C589664BABCE3C7AB4539626907269657249DEA708A63E1073AD1E2AF1804E43472399B6EE58992638254B581843924CAA9AA3C461D09241E76FED2C282E07E95039C9889DD6383E8B1C941D70B5D5280 -MD = FB9DD51FA320D24C74D8C1CC776DDA8ED8F296D51DA3C44D4F37A6E7 - -Len = 858 -Msg = 716B179648AD3C2346DED9AAE6968D91088CE60038DA2898BDF5645EA6EFB342DC043F21ED12CB2503743B618600B92EA66543A0B676165A2C161876E5E74917D1CC8E6649C51B6C1DAAD6BB39CE9362C1043C6A2DB31C05C64CE78FD3A33CA595A534FA036E40A89712EC80 -MD = A6DD9BF1710F1A9897E054FE8EA40DC850B8201E9821C15FE6BBCDD1 - -Len = 859 -Msg = 9FE7597F6E6F36CF0880765DDA6B7B9DDFD35B1C1F06F08A234751DA553BE2E54CA9FAA02751F6F44C37A69F666D12D80ECAF508185831DACB5014CBD3F8097B2D84DDF808CE2286C8D5502C3740780D2593B037A24A9A5A27C347E85C6C985AA933DD204E47D33EEE294440 -MD = 27F0CABCEC05FA1D9A0804710CD0F0636E39C77154129B4753B3B38F - -Len = 860 -Msg = DD644126DE54607B612C2384A80B3B47F3E3278BBF40372D7DA4C53003A4F7D39E845A7EC6E6FCDFEDFAFA31C0B13F8988F48F2329C0533E16C9C84FF40C123C421BFF9D8CC1B5561F1BD89178360ABDA3B29CA3870523D18FCAC8FF4B462C3C0AACDDD7FFD183FDC2E65810 -MD = 0E66039A3DCB35A740667BE73A9511A0DF9743D824E525F4F4ACA313 - -Len = 861 -Msg = D5836C5A1E008D30DE039FB99096EB19D3A679E32D33ABBF7F414F37A9B1B790AAB4625D50299487BFEED13AFECD7F6BA9995AFE7872151431A04E04D101085DB55A6703858F0A43226CBA7343076690B2B97D58F1B39226F5353073F53C4D2B9590AFB71034B2929340F528 -MD = 0F10FC4C0D4F4E27F546F88F92C9570325B2793A3251A6B1A7040A6F - -Len = 862 -Msg = 5AE530EA690D546A4B86ADA0775066C3C7C94A8F0503A0F1939EF21BDF7916CD3D63F154C91C401B9A0A875DC17927E2FC0CF66286C8A2B2139F573036CAF94B2DCC2B04598ED332975308B684330C8FBB7045690E25BAE8CF2015F9927C73C529FB699F60BB9D272BAD2340 -MD = 24186EC1DA98FCDC705CED91BE1B3F5830F12260E64B054CF976513D - -Len = 863 -Msg = B24C20ADA2E35BF97724BB745334D4DF9399F22CC3D7E249ED004AFA98F4E2CE79567AAF543EBEF35DAE9D4545185B88BE1D33E2AB5E5B5FFBFAF00BC96AB6F4BE5A6A3E12E173884461C5DB1E67A81686ECCD9B45D69371546A28C50DC3B2D21EB097D20C14A7EC4F8F8C38 -MD = DEA3D69971B7503E9D56B2FDA97C70B90E791940062E8AA5A088A86A - -Len = 864 -Msg = F31E8B4F9E0621D531D22A380BE5D9ABD56FAEC53CBD39B1FAB230EA67184440E5B1D15457BD25F56204FA917FA48E669016CB48C1FFC1E1E45274B3B47379E00A43843CF8601A5551411EC12503E5AAC43D8676A1B2297EC7A0800DBFEE04292E937F21C005F17411473041 -MD = 517BAE010715A020435CFDB531B856C5704E0EC611360F60D5B76161 - -Len = 865 -Msg = 6C089DC0C0746EB94EE1BDDD372CB9FCBBD340F858EC3379B1B43C0B9F48E9FD66FEF9AD9AD5F9FE34E8FC385F1F23DDC6D4C6E4DE2AA2EECFD328EEE188955A5D8A3BF87A885DE41FCE956520867C43A00E36D0B6943B470B52584F5740058D78031B46DEAEF6BC9B76D02880 -MD = AF636292C61C6E771777CE9D27F6D2BF05BDE82A3007CC8320C31FA8 - -Len = 866 -Msg = 38EF1659BF482F6DCE756B7D3B7F96AA8FCC7C25A000C590CBAD9BE30F5BDDD941352621883D0E5135766E147578D3553A484BD407011653DB0105CF28DD825836ABE332C0E04D6E36981290B21695B213035F4A39A7230B93A1174FF7D6107145273A42177F9649D5096DC980 -MD = C4028FFDB912FEA992BF623D512CA1C4B2DAEDB015DB62AE4F74FEBB - -Len = 867 -Msg = 1ED4FFE25D9FA1F051658E44DCC5299DB496FCF0BF7B5A0533685BE2A96198C15259A21527C83951DD8AFA04F65978A7CA01CCD6DFC6953EF152B8B112980136BDD47C78B8E8FD660BE8CCF67D890173529061C722ED593478ED4D2EF7FC0787E2E259045259EAA8152576B520 -MD = 2E5299B9CFDBBE79E2C265F912A0D5D40C0337FFAC18A199B29F7788 - -Len = 868 -Msg = 4EDC5CDEBBAC7C80D4C9FDFF4D3482116A02FEA7E4311F6AC00E17383C6E4542D9F51AA753739D1250A955B37081BB573B0F06103300CDEC753C7EE544B36A735418EEF115BD4777871F887022893C4B51E54F90122BF9A06EE20448A7B75EB649A36D6E543765489B13A1EE20 -MD = 682C652789BA2C19350CEBDAFCB3FC2EF4849CDB6C552869E6095A46 - -Len = 869 -Msg = 98450F06D846FF0F6DAFB7FD5A9E902537527F31FA6CEA70B8F22880A9DD01F1EBDF20884D235B884F438CE98B5420F195EC0FC4631FEBA8964141F28EED890522DD31F93EDEE85F96B6DAF92A85BE48E959642E922299FDE360F25B5BA2BBDF1AF40A222D09EC045A5AF5C608 -MD = 09B80959D1D3CDEAB5767A047D3907C584AE853F66EAB3202639E8FB - -Len = 870 -Msg = BD8C839CD9FF816E7D8706EB66F2FB60D3EA400394504AC21A3AB17DE594A26A7334A8F7A6AB5576EA8D78A6C69F1D9E3EA5B7AE20B2834C72FECB08423244FB7DB810CDAD3F041B54E12BCFA6678AEA075A366369525B195173665E78C0953EA46C4116D7EE9CEC0041A9BB0C -MD = 827FB6E22E4FF959B507E551739A601F65320FCFF610306771E1D870 - -Len = 871 -Msg = A4C6DB6224A23DB87F291FF0B0C6C2A7925224594E60E1FAD4D4EDBFFA35F5EDA3798029C3BCE4DB2A78AB04C4A408D5A542237DCC1330AF47F0546D35AF06B2977DCE2678814E30B45418B5E97C6041BBC13697692C347769905D5CF06877A1EDCE1D6AB4F10DC0FB4F314648 -MD = BB0621C55DF5EA448A61EA346183A387FBD69E4A5F432149D8874159 - -Len = 872 -Msg = 758EA3FEA738973DB0B8BE7E599BBEF4519373D6E6DCD7195EA885FC991D896762992759C2A09002912FB08E0CB5B76F49162AEB8CF87B172CF3AD190253DF612F77B1F0C532E3B5FC99C2D31F8F65011695A087A35EE4EEE5E334C369D8EE5D29F695815D866DA99DF3F79403 -MD = 79D478B4BC5E6FC2D406BB1C3834A5CE397A88E80135F55D8FE32C5E - -Len = 873 -Msg = E0473E8455316C13A301D697B9C17DE7D843F6203E669CF502F2E7260F0DC0717DF3AF7C64C3E28DA3A46C2DF401CD0049E5008D2FE32BE8060AEB272720585B8BBADB413547FC5EB59680CBDD68430B7937A5FBD3E83F9DC8D08CC928F48773A8166C4616C53B9CA0E8D56E0000 -MD = 1D9D1AE61E09B4016804B95F887CDC57B801D04C12C6D396D0D4E49A - -Len = 874 -Msg = D9293EE8603E4D1977F7ED45626ED5498D7FE581F27BD0E62A8608CE5EDCB826D711830E50840D2E532EA5DB6E668563719B6FC8FB317C989C692C5C2964E5323D209FD600FD876941A0F8D6EFE5EED4EC8D011D6147B4E75E1062FE812A27A1D010B45E9FECFF24C55DCD5F8000 -MD = A55FCAC32B2CD44F4106131AE9B1D33B1190C89724104470251E56BA - -Len = 875 -Msg = 885AE9439FCF219F75F227AFAE8AE85183C863D2DE3AACC2D3633D90020B9DDE7CDF0E5AE202FC18987F265F782459712A43FE2C4D435E64E6DA7F813113F566E4EF1E445E36AE673A34733C383DC421F1B13D7561A65BC9AF5779B9E65DD51DC98AC6CFE1B7412B53AAE68FD480 -MD = 0216DE4C939D486E4A6CDC17AD2204FA474F49310E2049934FCB7A4B - -Len = 876 -Msg = 94BA5F913C14061E96ECE9E552301D4A1ED6C43CCB8F86392A0D5C4574146BC1EDF34CADDCC197F8AFF61C1DE42B92CFE24908D88FF84952E6A60BB81392AA7110EBDFEE2D3627481BCA009769A4861E7840D83D316E612A01820D1483B07E393E9C75022DE3D2323F026B0E3840 -MD = 55D738A36FFD37DC165C51DBE7F4DA3393C66EE3524A29F59107F3A9 - -Len = 877 -Msg = 899A55982CC299EE96744F2A374850A496D86A3386CDEB1633DB5607174A8EC31FC881DA9B8E2137F92625F33A69769DD830F358E64E76605CE0DB6DD547791DE9F2D64EEEA8146D18C59F81B9FC93D91BC05FB85AEF9F2456668EC7A9DA0A86F8B4D607226713741393F744DC60 -MD = DAAA17B8C8EBC55EF37CCF668E0E107EC2844AC5BB37FB749E68F464 - -Len = 878 -Msg = 85F6897B45BBF252A97CC12A6E3EC901A05AEAE252062C04551573B5078F8C973A709CE932310355881CD0469D10CCED841863E3AB1646831F298D0732984B15FA085F65B484A5B31B46B5549486F95ACFDDFBE9C4523EFCE83E7817E03824E906D6C72BB17C0E4159875782EBFC -MD = 38AAFF02EB3DA7546F32AED8151C882AD5B9D07F81EC526CAA73FBA6 - -Len = 879 -Msg = FA5F18A9255EACE5136C5FD603199E3438A45618547D99321FFD907EAA47ED4F16B8B4A5B40C878D6C9804BBA983F007AFA7CC98C6A274D07139927CA2ABAAB6B22F65921268E954CFFEFBB1DC2B0EC09F5FAA2EFE0ECC0638601A94A52E15CE4DD3F01C1DC7AE530710D779F908 -MD = E5E46004ADF7A921E5BE0AD525EDD6D60363AF4BEE8F28EBE40B16ED - -Len = 880 -Msg = 47C6E0C2B74948465921868804F0F7BD50DD323583DC784F998A93CD1CA4C6EF84D41DC81C2C40F34B5BEE6A93867B3BDBA0052C5F59E6F3657918C382E771D33109122CC8BB0E1E53C4E3D13B43CE44970F5E0C079D2AD7D7A3549CD75760C21BB15B447589E86E8D76B1E9CED2 -MD = F7BA7A56AFC1C58E62841C3B98F5677199F24B534B0D52D9A5C95495 - -Len = 881 -Msg = 9B7D4639E3400BDD19C7672BE23F354FEB221570BE8307942F52FCBD3045FD5A681AB50B226400AC6A213B6BCC0B5E9CB05614177F77BBE3F06CBB2E2F13C167478DB5779ECCB585E3E9391F3107DAAFDA2A6ABDBF91BCE6540960EE2F415D7599022B81405904038EAAA89E2D5F80 -MD = 644765B0BA1B9782EE94878D5AFE855442A5960B69D427A1473EC203 - -Len = 882 -Msg = BA02BF87C61CB69491F6B5500A43499483C9D1DA8056F30D0199B8AA52AE2941FEDEF0E8AC94CF8C7D1E6F1603D75618BE563D3303573263BAF5BC706D6685FB8D08984A756BE3A981DBD96A3FE38CDFA0206CCFB6456CAE650C829EC3A2480E165B3C671C70A2EE16460698D82040 -MD = 3F4CDB48415FEF4DC78619670CEBCC6574778E6CF87DE47A983775CE - -Len = 883 -Msg = 6C54239533A5FBC9617060FBD3C76719EE224823624739482FAFB1F6D7A39C31036CC8EA64FF265054DA2DEAF00F90207A2DB4691C8AA623651A575D25424603C682AF9A8346E4F63E74956E160C1E55BB7118DAF1D1A9FB390F53446823502680F98D279F420F2D614C2218D5E000 -MD = 8FCDDAD5FA03F9BB595D9D6837E34EBA038B9ADFD8E0D19E094954C7 - -Len = 884 -Msg = 492BB221C33A3D456C7B2A0C41C6145501451D247569F470A1F7637FFBBDA6FECAEAA43ACD76E24BBD607A55596C69060C360D519B7FE9EBE794769B7CEE6A5035265B069E641BF17CE887F0490C90D655F5FE91B95D46A1F5EB9138CBFD232DE94B3DF9944131D0C64C69E4652990 -MD = E632D3E51DD125B71908805AD244EA4F5F086D998EB9D527649FC080 - -Len = 885 -Msg = 8F71E8CEAB8CAAC38430EC1E8011D9C81B73BBCF32D60A495CF8207876D5DE42526116A57352A7FD2A6F20EFE100FA4FE0575EFF13F205AE33D0C3345ED4D587BAD1CB2F6AE0A15EF6681D168FA473ECABA29EACBD10CD6C64702A4EEE21535E7CCCC0037EF1F4C0B6199C8F413D90 -MD = 5DC6977EF4E07F72A2C94D42C18348B0565DCDD1D4981D056FB7D068 - -Len = 886 -Msg = 0D7BF755403AD46BE09C7DD8FEC713FBE9D96B9EE5D7AF7AB598FA6C4D5EA86C29DD6EE9C7A8103E6D572865019E6F0909F86FA2E59ECDC5B16678CAF64217282E2B474F40F53007F71D4ACBFFA230E1D2313CB44C812D71FAC6EB58A30097D4336BAFA8332FCA1EFCD6C48E9F9050 -MD = 4165B7BB33831335EAAABCF2BCF59BFCD9130B1E3B1160DF10CEDC44 - -Len = 887 -Msg = 5E13D7C65724A037F7DC646FD1815767F3A83C69C69052FF6624DAC438967A7257DEA3A269042F3ADD1CFE53B3D1A5AFB72702A90F60EC5E02B1EDBD7121532E2DCF37D82B96184B347F9D4BD57AB0E1E086406DBE941E0660B5B4C18221B9939F51A4D242E82FA2FF7CEDEF196EAC -MD = 16CA01243EB65794B6A7DD7A80B11A31DF95B736D14A29113D755CC0 - -Len = 888 -Msg = F690A132AB46B28EDFA6479283D6444E371C6459108AFD9C35DBD235E0B6B6FF4C4EA58E7554BD002460433B2164CA51E868F7947D7D7A0D792E4ABF0BE5F450853CC40D85485B2B8857EA31B5EA6E4CCFA2F3A7EF3380066D7D8979FDAC618AAD3D7E886DEA4F005AE4AD05E5065F -MD = 78A90B769E9A326C93D5A6A6105AEE031DCEB2C8D222B36E02F27DB6 - -Len = 889 -Msg = 36069C92F2AA4915D08FC19E9818ED0DCF80157D3A8D6646ECF8B4A31ADC3036744FB8B70499E90C6C7E1D2C4BE35B81DBF5A386C7F69BB320A2450D17B56D641BC7BAAD77E5D55BB6E9ABE594E04A3676F056AE60082EF33D2A74380270F6116CB4C2DF973FA8747205553A8768DE80 -MD = 80547495FDEFBFB29FA783FBC9FA6FA66B750786022E361603E97F0A - -Len = 890 -Msg = A1379F64FB9DA0EF3D4F819B898C30348E41E902552B60E437B513A87EE84C2EA0652ABCC2AA9D32428D76B569B3ED9B3D937C93A02C22F8FF0E4A3E09D9C8A22B2CEBA9F8E921760E103CB12AAE2B1196FCF2E5C45FBD0C381ACF5E6E4A8032D59EE9E09FC4ED561C5CECFBF43D1240 -MD = C61CE3A2A7396D72D6CD013C4CE22B4E67B54791CF35BD7CB846B06F - -Len = 891 -Msg = 9742A31BAF76E4E828011592CF2D4C9A94BC16A6856726F2B3340E1EC6787A99AC6832E6CDD32A92B92BF10F976EAED09CB9B538583421223CEE3F76182E9C5B8066BFD9FC924848C7F888BB42019471062BA2C82D1A904E94D90288487A32133CD51D04603588517305DF93697A5520 -MD = A3419144BA59D34737CF489383C93F7E080D5FA7ECF81BB6C0649A84 - -Len = 892 -Msg = DFD9ECAEA5316F067B49D5B04A229C55B8FFCDBD1BB7B4E92B546887A5584730F3BD4DCB1CF8AD362E2301F5970E917DC457EB1634729CC9CD3EA362C66E20F29DA5006CA5D7F70EC89FC75CE1470C5C20B21838B45EE461DA1F42C257C8CE940CA5CB0C3822047D10C875D6B41A1D40 -MD = 05958A389200D74BB283AC23CFB3AB0B2DF66253A9D9062A2E04C3A4 - -Len = 893 -Msg = 6AC7E1CFD4573ED4595189E12E5B963FB45C167BD56544CAEB461F6D03DB1084D14BE35233310F48FCA0F9D41DE619EF1E29C78FEE50B412DD4E74ECEC9FA6AD45D2D6BE7BA7D8D9381DC5060A2110334D84CA79235BCE5667B0D49BB4137E2E23970D40044104AB0890FAF8437CC2E8 -MD = E3F8AA33B0042CC9985E18F42D1B220BF91ED836628F8E48CE856ACC - -Len = 894 -Msg = 1257C5E3E177DEF4ACE316DFD5ABDDFD6BA7FCA241173927411F47DFE2E79FBC5139B775A912AAD0822B220C08521E0A25C8EE15D4F215B1663D92647A28AE0A2CE23F054E77456668AAB17DB63858B666A4638FADF6BCEAC8152E9BE239F0ED6AA404A1D1C2C55C14655D8E1B33A828 -MD = CDEC07504A5DA3E9501D36669ED14E8B5485B421984A915CBBC957DC - -Len = 895 -Msg = F2E39862B18601C5C4EA3B13745BE51AB578BE0049C2B01C6D9C2C283532FBCE5C5FE7BD77C36400944716F53F692465BA1C70B28F1203EA123165C3993E0A371E1284C74DD37EB53A0043ED84DDCDED882E233482433A3E0104E6517E277D3A2D2577CD28622CA177D8A41443AD8F94 -MD = C1182FD5DE72AFB4F407B5AF926E1EB7088ECE2724C48FCFE6512F1D - -Len = 896 -Msg = 58D6A99BC6458824B256916770A8417040721CCCFD4B79EACD8B65A3767CE5BA7E74104C985AC56B8CC9AEBD16FEBD4CDA5ADB130B0FF2329CC8D611EB14DAC268A2F9E633C99DE33997FEA41C52A7C5E1317D5B5DAED35EBA7D5A60E45D1FA7EAABC35F5C2B0A0F2379231953322C4E -MD = 3D9D5C2FD2F60F4BB89E11FD3BC2FBD65602EB3F3F38D6FA03BDCE2C - -Len = 897 -Msg = CB1BD5900398E5753E85BF405F77C3C344F7F1775B59E7F8ADD11882A5B27FEEE9011DB75A20388EFA2DDAE78A82C8E5EC9207C149D383BAF293C2F68CFA930A240599B662033C05C86DF576F53D0F04CD105544CD5695DA321B94EA57BEC41DC9CE192B1343B2E1AFD541FDDAE1B50200 -MD = 50E3FE11D024062544442B37D32E5128A6A77C9E4C6D3BADE8FD055E - -Len = 898 -Msg = F35C7F97B4D789FFF4E7DBED0EA1B5B2935EA6889332084669255230DE67E35090B3640F3C6F375E98AEA92BF5B3618478FDA284B7DDCECF37259378DBC0BDC192F656F69F5066E91A2F9D285C5988D39BF8E163DDCAC828A927AEBF42B5F174321ED3B9A968655A942DC0CC37199041C0 -MD = 177514C5B888C7A6F83B5F4C0BCCC479560057C7F67CEB9CEAA14848 - -Len = 899 -Msg = CE5A6C17FAE7130BAA565CDB84F919E7E1C13027B50F0E103071C843388F2C51B51E4D330555F0D919499110D3FAB5EC8D307CDEFC7D15CFECBDE4A06A36E1278C9D9A3D8238D4982F135C2DCFC0B28D10796A4979F9B4CCC5A81B35C1259A7B072FD17B46D555CF7C3BCCDD801E4819E0 -MD = DE2E65A5A856563E7CF842536FBDA410187BA01BCE488664C9CAF3C3 - -Len = 900 -Msg = 3A7391401865505D3782C08C9291C87611598862E2632530B1AB50252D62EBBA310FD943A378AB3897DF53F424CED09986143C6A4B68B0818B9356343D9F6097407BFEE7FF15D41E73C50D4F8B38468BE9143F68741EC8C79A6F28D6B4439CB82A1E8FE59C8131123A07C4C5300FB19E60 -MD = 3D381707511C03BECDFFC594A9F514DEFAF0CFD77C53D74FBB581DED - -Len = 901 -Msg = 3DA31721130FB8F85A43C5B5656BAD56F0A0573CD32F3363E4E9E3B4A593A2AED2E184B2336844EC6C8E8D6F47002FD998A8BD63B2D405DD2BEDDCD2E4C0C0FAB13113147B381C2546BF513D6C2C0B3B860C170B680EC1A5B907D5043BFF1EED67EB35F6AFFDD0DCE5B17A5C1BFDC5CA38 -MD = A8303BD6C85EF7E51D91942F9A66FC0E40C5FCE199EF626B830E12D9 - -Len = 902 -Msg = E582A3A06EC79B463562CAE62212DC63C40A4E76A6C06C08CCC3FF442229F217B143A0AD650F16241A94A65956BED1C2D2B57AB2199E130EACF60A92D1E9E5FA03BFD78874EA655092F3C07A98F0A491874523660AD80128E7CCBF7E8012066F18E00DA1EC5ECF397A38C747A61DC5E7A4 -MD = BFB2299A408E7489A026D231DCD1FBBAA4BE3095E48A7543E86F640F - -Len = 903 -Msg = 215D67DD190F953146EC654EDC04B574C1D080D1FADDE7FE272E88B8BECEE0EE9272B903C0CE25DDA82C99B2CD8CC6FB0BC554D78173859375FC85AEBA208907FAFDDEA3CB89410E6A8780E5B5E270B124A9940DA148F41C3F18B9696A6FEC1DB8BB81165F104CE061BDE070A8F788FEE4 -MD = 4D7F7602A99E5714C0022B1B31F3BBC5D9BBFAE6AB384984EBF23C79 - -Len = 904 -Msg = BEFAB574396D7F8B6705E2D5B58B2C1C820BB24E3F4BAE3E8FBCD36DBF734EE14E5D6AB972AEDD3540235466E825850EE4C512EA9795ABFD33F330D9FD7F79E62BBB63A6EA85DE15BEAEEA6F8D204A28956059E2632D11861DFB0E65BC07AC8A159388D5C3277E227286F65FF5E5B5AEC1 -MD = E1FABE16152560387FADAD3324CBB94D8AF968786C3C994C8F926D32 - -Len = 905 -Msg = 4E5FD6C9C5E693E89062F8D79B7479ABA27CD93729E03179804BB8BCE53F270A6D0F29604835646619485414C538FBB4473067228A4593340E30165A7EBFA7F470CACBDB9CC192AB424D7B7926A5A96166FA56277DEF34ADE6C6A7C31240F86981E30BB3F2AAC492B1850016B1F5F3622A00 -MD = D0311AB53AE5F3C0804EBC046DE35932E6AB8FE34FF874494BE41607 - -Len = 906 -Msg = 1DD8BA4977A97AF96F65FBF2BFD718E20C955313D9E08A8F3FB63B092ECA604C3D65C7B8AF97EBA322FCCB3CD0B091747DD1445DF3734A01611A2EA5CC6882CFEFC3FB78200A162744DD353A51F10EF43311B9F4340BDE9D57028ED8143A2DD7A765DF9DBA3446D8FDE72A601F0500E98440 -MD = A64F2B4E03DB40EB5571D00E22E0CB8B1A13E878ABB9B08375EFF6F8 - -Len = 907 -Msg = 94A8E87E831C5E5196512F3BFC03A72804F00A5F8B7814957E1109D7C6AE32149E5AB11D70C7AB52F5BB67C290AB1CAEA35CFD3490BCD8C48F96B7ED876D0D5357562E34B4871969BB3C667C11E67004D69232CF1FB054A2910A4A72DD158656A2C0FADAD10B708442128C0331C49032E940 -MD = A5B6A55DBD0777A19E6F3B8A170114D9B4DB38439ADF83C8A2F6F6E8 - -Len = 908 -Msg = 15A42B05F9C3C1551DDBFB964D698040DFE50240CA07E7394DB47BC628A36A31880AAA7A1821BBEFBA965645C560046B296AE7CA6EC45A04E0A9741FFD88BE539E335AB26BBCE51F3958A4CC61FD3BE079B029731D9917802935330F68BE6358D7B8FC120570AFAA25B1FF54B7B0A788A7C0 -MD = 7F17CBF19186C9D4E5153E611EEE5D9284AADCA5C12374C2A0380808 - -Len = 909 -Msg = EBB1C5063C59E47C5D879549E8A5180D7E764D8BDAE5AA8E570ED50557DD19B601E488106018079AE3F1E787DE14FD12F985B38ED7A9A953FEE7975E47218BA610B5060EFC67637EDD9E6A051DAEC967BC86CCE55F417BD7CC7732BA636E55FB4831B117644ADA00C8BF5309BD7FBF42EF10 -MD = 1F05C9EB11D207597830F5958472D6066841D4DD1AAFCD9141E2C712 - -Len = 910 -Msg = 3C8BCFC309833426B1EF0BFD3E9083DC116F28F26FCF034A879F0EC0CD04BD0B2E2A32FEA71AE279D67313CB5293AC7E158D2EBCE4A73941924EA0785082B13AB58F71C620DAEEB7FAB6C85CDF2D40E0CB787767E8F2298553BA9C033F820AD312C12E90AAFBB3DCCF4D852F82FB3FC70664 -MD = F7149C571FA5A4C033907E53C29F389A52945BDD65A1F29D7F766A38 - -Len = 911 -Msg = F34B462EBF8A5D882AE3064B434506D605D2750EF56D33020BFB47859CAD2D26C902DD26906C3AD53A2FFE99C7C0D5A0EE1081657E0B5341511C3177B745847C55805B59837967763A5535E42547EA81168A71CBEEA4AACD0F6AFB06B2B9ADB7675F6763BD142ED87BD8570567AD64FFDA90 -MD = 6118DE2A35AF2B232BFBD8CDF038DD05A9145F30506B5E0956D83FE5 - -Len = 912 -Msg = 8E58144FA9179D686478622CE450C748260C95D1BA43B8F9B59ABECA8D93488DA73463EF40198B4D16FB0B0707201347E0506FF19D01BEA0F42B8AF9E71A1F1BD168781069D4D338FDEF00BF419FBB003031DF671F4A37979564F69282DE9C65407847DD0DA505AB1641C02DEA4F0D834986 -MD = CEF84F1966215B1511F5E0DB564D6827898184FBCB88BE0213FC563F - -Len = 913 -Msg = B1E06AEE75FCCE86BCF194866D0779720F1DEC50586F29FD22C2B7CA37F19D257492EA0C05CFA98AB7B42D33A53B78E5CF62643F0CF02E934B9B70224E0952673B572463F25659FC015851C73E3F040AD60983CF4A048BB9F277EBB18F4936064D73371D7FAD0AB3D1EBB6E7035CDE458BCF80 -MD = 420E2C21F20E412A167914A6016EFD0B531222C83ED818A551E0BD79 - -Len = 914 -Msg = 7A8B81C5FE8BF2C12BC8E9E7A0894F837320ABCFF2972A9D7352DA7175AC7C5039D654EAC136A020334C956B49323918998580BD1F2987A342F905FDED93DF4CE76A91428F524AB656B24AEDE625884511484B707C3BB3C52E46428B44F8A87676BD73480DD3951E8E826EC14C24F52D48ED00 -MD = 034963A20CA22154026C6FF6EDBBE0CCEF6C85BE6BC1190E2DF4D7C5 - -Len = 915 -Msg = FCC03C4AF57D9C21C777D2B4AE611DEE9F4653684AFB0AB0F98606D2CD2A43B24288B9C302BD296B702FFC8D88FDDFDAF830451CFA97407179E864C77416AF18F19617582317C70DB29834F585324B44333BC6076F3CEA3F3F5E124C7B259C482EB42BF5C85FEB3691A9CD5D227145A5DC6600 -MD = 5CF3AE6BB20315CE34A4D09065FDAC28E066A9A30D36D967985554D0 - -Len = 916 -Msg = 96CCCA331611A6E0FDAF50A8E4C10967F1741C19EE95A11BB9D02A689971380DB8DADD0F8523C6A1D3F6F12875C3AFA0B6A8A1D961FBEE33FD48011DCB829036701FFF6B3084A19D7A21083FA8B08353C6EC5BE9584FD2D9CA6E63EE51DFDBC721740A43C0568F5A732AD5374C965B496B1480 -MD = FC67BECEC8543E8F06AB33B6AB402D3DB38DF9FB537688480D5C82E1 - -Len = 917 -Msg = C6F7E76B2ED480FB33F7915128AC1383A275FBE15AE9C997907E11BEABB1E49C8C9BF783355CC3D8C9719AF1B0B94222956AAC2C19B0F68AD4CC2449412BF8CBAABB014D277AB446CFA90D0E3CFA1A1F22273D4AF4A8391DD3FA0FD75015F39C204CE592715A00036953401BECC68A983F8E50 -MD = 4F2B8C065B259473976A3588E5595D22C0A81B13200DEE35DA372076 - -Len = 918 -Msg = 9ABFB3294448A7EF38BC194B4E61027CA0671CCFEF6AEBCC0A706F15958D777CE0FBB47F1FCC3E470E878A991D139D02F89D36A54053EC3E370BF45E1AAB3B58B25122584D4CFC4BACE5F7282F25F322107E8043DAB875E8707F94358C6ECDFD96CCC09803756814D098EE3C4A7A8BC2D44398 -MD = 6BF429D3078A6E69E7FDA49EA26115378DD795680B1C3E3529A188C5 - -Len = 919 -Msg = 3EDA9C01C0BAC0A7DF3288EAEB878C44FE750F92EB7FC1AFFAA3DD1B492781D220E210F169B673EB469594C708C2A4297CCF1ABA5D2C438E9FBD91EFF1A0941564582AFA650F03ADFA4336AACFF855F49364D234842C907E7FCA80CDE686E545D5CE0CB43C0359E18155EB3079469ACDEDEE92 -MD = 08F35DCED1954CF5B2A0B45B8474BF0D66AEB481A9564DCD9CB378AC - -Len = 920 -Msg = B55C10EAE0EC684C16D13463F29291BF26C82E2FA0422A99C71DB4AF14DD9C7F33EDA52FD73D017CC0F2DBE734D831F0D820D06D5F89DACC485739144F8CFD4799223B1AFF9031A105CB6A029BA71E6E5867D85A554991C38DF3C9EF8C1E1E9A7630BE61CAABCA69280C399C1FB7A12D12AEFC -MD = 8E4B5A2B79FC1E7D0526AACB5B9AC01A569635644C9249DFFEE3B927 - -Len = 921 -Msg = 269180F685A910A96BABF3F6EE41D59E1A147773B610A81849ABA32B9B3F67D92CE4B575503C9CAE47F0B8D37BA66830952229BD64BD113B5055C1C4071BD749158188D343606C5DB34C3C1831087A0251868DE2F1689F358BC98832CD8C292806BF31A575895089B72004C037C8990CC845BA80 -MD = 9F52C7A9BA4C1FFEC956B19E05743EBBFB5AD090A76A94FD1204511D - -Len = 922 -Msg = FFFAC212A9A44997E7273F3B708F37B778AD53290AA2B523EB10181EAD0785918211FA5130C0BF333BB9EEAF35BCF8D3C210A041DFD8A43F9F045589218542B4FE2C63D340A968F0E21354D8C26C6B55A437E1C0208C1F53A2D32F13170AAB6978214F900C0FD6D7C589459C9506FD2385D376C0 -MD = F82F10869E60DBE9CCA0CEBEAD6BE556F480B6CAA50ABB0662C0F79B - -Len = 923 -Msg = 3B80BB9F2BB7659C2F3B2FAB83E68033EF455E97C6831D484BDB52850EDAAB4F89EF8FC39ECB29971F7349E5EF2C4030CAF069C40F58AD755E2D013249FDFD2D41583569634E0126A3272676CCF6A3D7A7429327923590574077D3A21BD282836D198AC6AFA14FD4A5927E594A9753509C8F1100 -MD = FD23794D64B9565B7AF4747514824172AAEC5275637C698923D00289 - -Len = 924 -Msg = ECD96FDCD43F1456B19C563E7531854DDA6A724CA160717E5404B8056322F7036D50056BBE1538F5128B72C90862A7A4C6AD3E5548353D88B255F3149C4097B7B412F5B45B27DC9E7293831A61B20BFE0FF57E7299CCABDCCB32DE6B006422A0B7DCA9630F57D58A258CC32D28F39A9628337640 -MD = 834849D1D234546AB6D2CF7493B89C42118E3A80508F46AF8A72F38D - -Len = 925 -Msg = 2FC972D13E9ED60AD42189018D21F46A99E50E437101549A56FDF91C80A7F63B1CBDD3A1631502AD006DE0CCDE3F74E14BD189BAF6BB2CF936B619D9DDD644100E9603E3170AB7D0FA3B6D79AC15BFBF8FC1672B908E82EDCA7DFE5C7DA8B6A5004BBC1C1999164E95772DF1B5D5078EECBDB350 -MD = 713B0D036AC19E4568231D304C7CB06840A075895E05652B9CB95B4E - -Len = 926 -Msg = 3DA3A0681FA83C46C47B8D2D8394EB3138C899956108F7C0534CB3CAECEC2527434B441CC79E580B260904D4C95D9D53FD45DEF4F23E90EB01EC7FACAD671DAFBA8D3E66EE650F0E7A029BE3FF2DEB340436D004E5910E65C28174155D8DA004059504F484CF757314D43426FF458303F1885940 -MD = 2992D75265D3F88E73E7D5BE18DA2AEFE18136EF4C94885934154DCA - -Len = 927 -Msg = EBDB935B08BC0C4077D649A2516D0C035BBFB64D69B783BE8F12796E44707EB2F244CC27089AC2A07A7412486A7A18F895F1570DEBBB638A36597008ACDA55FD3D128406C9D46D7FA32F71B718E52EEE8AD83D6F5B5FD6C8078121073518FF83D582563FB4E95EBCC4A6A6100E030EEF9A82F616 -MD = 7F7DD114BF473DE2E8DC84EBDF58CFA572B0708966FFE1726EA46FB9 - -Len = 928 -Msg = 2EEEA693F585F4ED6F6F8865BBAE47A6908AECD7C429E4BEC4F0DE1D0CA0183FA201A0CB14A529B7D7AC0E6FF6607A3243EE9FB11BCF3E2304FE75FFCDDD6C5C2E2A4CD45F63C962D010645058D36571404A6D2B4F44755434D76998E83409C3205AA1615DB44057DB991231D2CB42624574F545 -MD = BAFF55CDAD66AA77AD677E13A138B2F17286B504EA6B94EFFD9D9A95 - -Len = 929 -Msg = FB7BB870E78E7EBF63E1C4953C5948DBBD548CC952A4B6D4788E0D190B9ED9CE8702F2075CBC5DA62945F118819C5621FE22587F51461B91F7DCE4D86C076DCF945CE93764B01ECBDA86DEA3EF17EEAF0D5BB4233028388A70CC239D39A427941C77E19EE99C88BF12F9BD6E687B3A826240568100 -MD = 001907728509B60402E2C8923EF37B2387B98B7DC35A5E3B0C811E83 - -Len = 930 -Msg = 04DA38CBBB45475B6B5EFF77AB65A7144AF92EAA062AD6AB8A84C714DCFCBFDD666443E08C1EA3D4DCD3BE730F7401760C6EB9EA600FA5CF1CBE5297F0D4F66671BEC146A58DE30E5547FE9DEFA9B96E95344FC8F32CFEAA4AE1D4A109964BA3AEA697FEB6B6BBB42AED1BB365E324DFF650764FC0 -MD = BA8F8E750BFC767D2379767F0432AFEEDA044CDB9CDF71746E9D130A - -Len = 931 -Msg = FE876EA28A466698DD179787EA825DA434D02A0641099EA4CBED0641F15E3DFC2A37322A094269D4C590455C3EB8F019C8295D24A434FA4977FD078C691BB540C7CAD0B6E6284BBAAC1C8545CE00F71A494945AF86A4FE2AF46F11DE9C89EFDB17E62B9AAF4526BBB9663D4623FD589574529F7580 -MD = 41B6A0347D3C6A79E96CB232D487E10D7C0CA9EB6112D6BDE2818D2A - -Len = 932 -Msg = C4DDA8D7807FEF102A62B78CD4700A6BFAAC60D650A7F5AB6B377EF3936639EC67FDDDED1EBDBCD05ABF3EC0BE4980ED84E1FB536786CDF0954854FDB9F3DF27AFD5F350E4AA735FD9C32C790F6F424A1915CB115A37E6AEC3C257A974D6683E0CCE2926DFFBAFF8C0CAF094307733969CC6834520 -MD = 183BC1746E08EB952EA4E3F943764086FD5BB88068F49F9123EF402A - -Len = 933 -Msg = 0E4D1948742EDD97D4AAFA0163292AF7899C469489A0DA98FC9AE4B6430EE112CC7F22C29904350A9C196C214C13C9117E8245676B3E5C7AB9D51120116B3CBC07026927CA0C33ED516796E98A0EF9865746DDE811C8B56EBE9BA469117D9BCCCC70204F1AAB358A703987EF8637BC85BE18A011A0 -MD = 01F783ADAB3CAF2537E0579105986B73777943929ABB5B79A6DDDEC0 - -Len = 934 -Msg = 73E79155019FE478F8D817C3D5EF3D4F66D3BDB22ABFF76DE083A8E5CF1EF4F8E5C55917351BCE4AA707483D9302DB11DB21CC6CCCB4012B0980ECB76077CD0309775F7EC98BC40A27044BA830FF7ECD42825C7B7B28133BB732218234D9165372DC61261878776985D2C980C9868BD6521557AE3C -MD = DF93AA7143C16D63CF635B9B2DCB15F8FA20D857CEDC978475C5D91B - -Len = 935 -Msg = CC47E530D64AC0381DEA486BCE637E3B631232A5B55165358A0F9C2069C1A3AAD14302F2AF25FC4F4F40D41F708760AB080861D8F92EE65C1927326FD095EC52E45B7F5D67D4B4987C43FE8FE61AD6E5476535564DCE408606AEC8E98618B174542B530238A51AD13EDA91AAB7C34DA7AD2F28E50E -MD = 1871271BEC2A0C41548455435C7F9782EF89EB159A61DEA41881A389 - -Len = 936 -Msg = DAB11DC0B047DB0420A585F56C42D93175562852428499F66A0DB811FCDDDAB2F7CDFFED1543E5FB72110B64686BC7B6887A538AD44C050F1E42631BC4EC8A9F2A047163D822A38989EE4AAB01B4C1F161B062D873B1CFA388FD301514F62224157B9BEF423C7783B7AAC8D30D65CD1BBA8D689C2D -MD = B4EFBE1167755F5A75B72CF15E0601662D036A16CAC8602A909FB328 - -Len = 937 -Msg = 0033695F13910B1E68323B64B7FEA6E291C07DE47C448174C72E53E69AC2B9281E6D6703BE904F601301A7A92012BDF1E7AC0E389DA9E420283FA96681B0495B250CF11CEB845903468DC2B34B825294596C86BA38A41B636E155B3CF55A986708DACD1034C62A0BB3449322AB57A2A97DBE9E93FC00 -MD = 4FA5095F9246699C76434E31F71514CADF80EF2A893748DBA9EF617A - -Len = 938 -Msg = 77485C2226894283A91EE91E83192068DDAF49E99FED9838344ACC569348BE9D9ACDE7CF447C0BD84FFFA3559A16C5F61912E4ECEBFFAAB31B3F5B239C87FC3EDFCEA7303E1C57827E8B45BA3B4F357167FD749EA101B15EF913F838A6CE68E4792F276BBD2784554B84703376891D951321D0C8D600 -MD = 93DDE974146D2055E6F7F23403A8CF91CC2DB709D5EEC160806185C2 - -Len = 939 -Msg = 6C95A9A1DEA097D15316AE7F5B4A6D2746C6C81D72093614C9AC25AD1FFA68996FEB8666D94F453E9E405D42BE6C9757A94BA777566F054DD6315DA3DD837E70FC939F7129D1D7D4DDC3A7D5FFDDC54B60BDDAF2622060E8C5E5830794DDA711E85C52B4BFFA5F716BE50BC978574D88C579F2E19CC0 -MD = 34E64F9CBC000BC4B767353830BD559D33987C8834DDF9E97EF2DF42 - -Len = 940 -Msg = 4F62C87A0F5C45700E4A39D2EE331FCDF9A8C33E08E26CAE547306D1FB80DEA35A6E58E63839BDBFEFFFB1C35F80386EAE52CCCBCF61C835E9E6505DB798AF26D42575E021B96B3F0DF3405B817833F3FB4B89B941B8D88BF9D6E467A0863BE72D950BF006CA84E3DA31D71D562A9F0D8231C76CF5C0 -MD = 71B98F095C0983CA92B08EC20B29E2E09FB2458AC768118EEFABA8DB - -Len = 941 -Msg = 5136F1DEF48BF98D5FE05CD02C2309F994156D650FFE1583DA3ED50AA9B13BCB0DA8E83C68B8D331672110B25EA928F4D20D869E444B3194C044C09EFD66D966964A3FB446D6B0F027EEB79D50DAD6A5F0005B19FC68F140D768488C0D401B7FDDF8303E0FB8860A6847CD453797ACCE3C7C35ACAAE0 -MD = AC437FB7F9EAC93906558751D9A54A42FEDAEF17E1E79D5D07E7C80E - -Len = 942 -Msg = 0F9EB1E210E28319D732BA71FBE8B3A99E337D3F4FC3FD4959F51AAA15C2E8D7DEB32EBC69A031057AED466181089FDABA63B3337EC0960A0EFA3F5B257446557B6C585C324F86034448D0419CB538E328877F669CE2A03B9B3A6E5DDA904666F1E20B0ECD674B84E1AE14AA2278F18565CF8E37BDBC -MD = 27D20CA00D8339CC3DB225E88C606F57EF20518EB3086D4074B83298 - -Len = 943 -Msg = 7C9853BBA660650A5C27C4C948FD65A67150FB559C5863BE944AAD3F84E946777C93D3D9BE3AD41155A05197ED3DB7ADB0BB55A55C69DE9A5896A5C677EDBC8DC4F3C50E22BEA9ADA9D21E6408D19974B7760037EB6977BD118F6CECFE7DA5240082DDC2FC2304A407C0B6073B70315B3761246B9652 -MD = 8633AAE8A7D46C87DDEC4119F31C8062A84D86B5DE53DF239A9DC561 - -Len = 944 -Msg = 42E99A2F80AEE0E001279A2434F731E01D34A44B1A8101726921C0590C30F3120EB83059F325E894A5AC959DCA71CE2214799916424E859D27D789437B9D27240BF8C35ADBAFCECC322B48AA205B293962D858652ABACBD588BCF6CBC388D0993BD622F96ED54614C25B6A9AA527589EAAFFCF17DDF7 -MD = FA4BB608F8F60841E1189F8770051695CDC9935BDA7187C36419228A - -Len = 945 -Msg = A154F2565761BFFC5589EA8CF6CB9C29F4C632D1471FC80534F24749C908C23E56505BE40785612AF08F921AD19348D2D2453649198265249EFEEACCF4AA3E6DD60F4970942FD828E25FD2F88BDC2274C5C94B7DCC7431715B3C2428AE7A922213F6485502B4BD84F1522EBD8795C549AC800FD99C5E00 -MD = 8BAF2DD93EE1517C06525475E54BB1CF7C52DCE86EA75557F3DD7F11 - -Len = 946 -Msg = E7A82BA7364E23F5BC770F6C5D8C3B1A4E24B328943470700FCEDA84B8D316B716E2FED583D2324C17FF1E9EE07D72D42CF58FF159070479E6721E2031C9D7D94262033DF94CE492D6C64FEEBC7B3B1DC9F719D9681F51F25461D8693E7FAAEF05DECF1AE271858BA473577A372DD79FC9D1B0F69C46C0 -MD = EC8FFDC2AB5D5B6BE3FC7BCDD447F1FD8978FBC2163F7EDAD46BB155 - -Len = 947 -Msg = C3AAB6905BEA639451D49C444D9D470D2F033C7D92405C2672CDB78E724D4BB7ADAA0C0E5A57A4B78F4F0BBD5B542D06086CEB0A42F2A6CF4B43745EF870928BFD22579BE8B5753328111BCB996B58F10A8A6D6C04806FB089DB9CABEAF212C9830BDAC08FDBA87617AD69B858FA1D5337273AE8367320 -MD = 579F62629B9E8C43B8DBD160EE7483EF9F5918D1D3DDFC4EC748228C - -Len = 948 -Msg = EECFEAEEC17BC07F2EE0913E696D50C194C13B6A2738092E5BD5F30BFFD3BAE559F3E47191AAA333297475F113EFCB1B4A088471CD800934FADD0F5DCC9B1B67AC488B27B8A7D5408CEC9CDA91EBADA76C9AADA32986604E113790BAF3A4B433CD81ED3DDFB9DA9995E49BFC8B7A15D07B363AE8376F10 -MD = E1699CDEBED9131888D109349BDB65BEA0005B90F83EE5F72721C51A - -Len = 949 -Msg = 04A5269B1ABA9E44557BE500D16D2C5C830C9AF49D33AC8B0566BCD699679630180B74EA9824A3E9538789397FB6CFAC8961BA7F0F7A5B0181E7072C53651CF91451DFFF3B7FE5C00B890EB13A984C11B78F801C9EA33FF9B2A52AC71907B92F028D767085A01F3234AA9B98283F684065B60457BD9880 -MD = 382794EBFD3520FD80407181BE935705CF53B894C0959777EA0B114C - -Len = 950 -Msg = 68541BF2F087D4505570E2C5DBD2FC596D938E57CC74980F5EF52FB229F5CBEA92481E9F62E92891A7F333E6581E21354FFF2C5A43899FF6BAA2FBC2E737B350CB5586CD7D7A6634BF5DD9B6BF4DB0A99021D432A0D76F16C74D4514013A3C13A88C53927B91411C7718931445913AD4C71A7B710DB168 -MD = E613185669977D9E69259934F07106359F0DE4A5C49D1300A65614A4 - -Len = 951 -Msg = 2BFC949736AA36D4938AFBC3C01B604A7EDEE1C6D17EF3798EBDB86F9CFDE9C033DDAB4175C8F346E00E7BACC20DF7A52F4F0DF2744FC5EB9377E64BF6AE52639F796B1C15ABBB47BF938FB3D6253834DD680EFE244E832F810D315870F5E73BDF53130AB9C4CD203D828D183C5A954BEC1EF434B21BE6 -MD = 5B690470A1F82FA1DB80B666859DBD81C5EBCFDB9C0224EF062C16A9 - -Len = 952 -Msg = 3C9B46450C0F2CAE8E3823F8BDB4277F31B744CE2EB17054BDDC6DFF36AF7F49FB8A2320CC3BDF8E0A2EA29AD3A55DE1165D219ADEDDB5175253E2D1489E9B6FDD02E2C3D3A4B54D60E3A47334C37913C5695378A669E9B72DEC32AF5434F93F46176EBF044C4784467C700470D0C0B40C8A088C815816 -MD = B3A877231519C24E2EFA424E6057128EA105B54C65E58074B5B1583C - -Len = 953 -Msg = 1E8E26C707DB4BB0F459F069840D28639F22CF740EC59D8F3BB840F7654642C2DB228259BCCB3532944D85D2F33BE1B401886E9FCF7101FBB4539CDA1E81529C160ACCA588E706749FFE70B20665FD4FD91BCA558E0D28DC03CF8469930CE8307519E8724373EAA2B6F22ECF04989078F91A2FE9A8E4A800 -MD = F5ADC0E0DD4D2574317D6D6CA486A6FA692457A7D6E7BBDF9A35747D - -Len = 954 -Msg = BBCE8A5EE8C0EB938B8BA8D0E9390B12BBBE6178ED29EAACBF92869F72BC157AA4F20F150059CF228399079449AAF9893FCF65775E5CE706898C4FC89DEBC86447C64A2CFCD22DBD2F639F199C1956571FD1C34A11609201F520921B1489F58B51EFBCEABF3CDA1853A7A66D076162A9C2053051BCA78C40 -MD = 6DE66DB054D54D4DE963E7DCA3E99EA5C4361D2B0FFCE9C730A837B1 - -Len = 955 -Msg = 036E2807A1F1675D8F01F88F1A5C34D664F49BBFCFCB60892D24DF43CBD6566BB7DBF33D47D816DBF244B7912E6A72740508804D3FDB4575B67D97B202DB80AE9A2B88EF84E7C74C3FB6A1F0FBAB8E62D96F76855E43D0BA372457A21503BA621CB52FF039CAA32DB99EA39B466CEA191287FA069118F1C0 -MD = 54E2E6979A6DC2D7C5B6E1D73DA9A1792DB8975DDCDD9256C1ED5A49 - -Len = 956 -Msg = AEB50208D1F67BD48A95A3BB4454C9E4ACACF2C8935F2E48C06B1F73AD8C497FDB9F99E11BA78C12D83E93ED8BC34BF7BB27770F647BE727F0C92FBBAAB92DB31039EAA3416A8BD803470A531DE363254942F921AC597E949D95858FF42B6C7F385F90DCC8869A95B5E31466845347DCCA479B07D35822F0 -MD = ECDEB9E79A7B32B46C7EA8134BF1BBFBDF8D395E82E17141C7E1656F - -Len = 957 -Msg = 5F69A5461117B8C2DE8048AEC04B2D0C7865A9107E3D90B7CCB3CB20B0E84FB7E162C75A766D7A1B9F6EF588581683B5CD125EA541CE47E6A78904D542C23F5184A64F073D931CC23690457AFD3538844914BA118A7D7C8A24F198CFBCC9675CFDFEC29F1E84658A0F8A344910FAA51E8D0719A9027E4298 -MD = 82640D964FF856B58A82E476D05A8875C23F6ED6292C3153DE479BC4 - -Len = 958 -Msg = 4116C941F3786516EF58063F0C226264F17037040C08817D86DA911C86B04DFAD0A64CD1BBF611EAA8C21AEFD71FBE41123090F71373B8BE43B1DBDB8758E63219CFBB7FC1F665834B8F5DB8FFEB5C8144E5ACDDB42AE73ED3848B933CB43E9CF7E2F77063D0BC5693FBC6775DDED5B57C0B70FFBDFE3AB0 -MD = E27CAF51F566423D913783D9DC50D2EB85D99F1449C753EBCFC091FC - -Len = 959 -Msg = CF191D62C44A107949F4D8E62C61069DD7771CD42D183B27314874EB19067EAC1919C849470B31B0DDB1D2886EFADBBD68D28B22B021F9A0F4890F02D7084EC08E3DDF0A14C0132FC8EDA62A786FA28F3092A517E525567F8EB512439431DBDDD4768FB7BFA596D8A04603481DD84740D296F8FEA8A52978 -MD = BFBD33C911EC7987C4D3F5B4CD584A981476D80DE92246B2C4A3AB7F - -Len = 960 -Msg = D1E654B77CB155F5C77971A64DF9E5D34C26A3CAD6C7F6B300D39DEB1910094691ADAA095BE4BA5D86690A976428635D5526F3E946F7DC3BD4DBC78999E653441187A81F9ADCD5A3C5F254BC8256B0158F54673DCC1232F6E918EBFC6C51CE67EAEB042D9F57EEC4BFE910E169AF78B3DE48D137DF4F2840 -MD = 9F385C0B645DB8DB8B73C98C40BE264FFEE6151C7B5A0964E67DAA9F - -Len = 961 -Msg = 9475609D6686B9DCA38EA5DE587DAD1F458D59F96BE790896A32B2AF82F897389BFED7572018883432007222720EAE42A654DFEEAEC1653D3464E28282D567E8E59CC6EC53FF6AB20052D2FB27FB8001313E75700F58D6339EA4C55DBAC4833DB7FA59E5512019DB87022F8BDE9A4366484C755B410A01AB00 -MD = 88D9D4BEDAA14A48074E1F6832A0AD9682DAF9CBBEA9C66FD1639489 - -Len = 962 -Msg = 61BB6E84099A381FA591A31CBF684DD9B68B5F752A2246E78FB57C016F66E43102C5CA5B0F19A7F6AC5A20174A7180FB9FB2B6D2DC8E4CAAEDEEDCC6F4032054E8B698E613B545D75AE10C0A344B656C8FB759B5A615DD6DD3EEF8254BEAB7FF03430E8DD0BF8FAA19A9F469DA37D943E71DE3B477873FFB80 -MD = E1B9A9FAC739CE133058161C12931F1FEFA4896BF9582802E439BD95 - -Len = 963 -Msg = DAC1487938375CDA49E04607C6B7A3CBC3AE585AA81B05F009353C52D4A0A9398E12F10E3EC433232C2FC21E46C614D085D1570BB70D107039C2D13A121B8BC45B0681A19D05D62CB582970B14E982F04BA4AB2B6C5EF3379FFF473592DAD92B61BE8E967A90F3E1D2962947B9FBF5DB7C48D8139ED85DF2C0 -MD = E26D757DC5649CEC7DA01AFF138A7258CB2B7A42258AED8F756DB200 - -Len = 964 -Msg = DCE3F8690BB3AA06BFCECBFFD4355049288C073272A503BB9B351D82062E9EE85E7BABAAF87AC25ECC2E3895F8CD1FBE2F9DCE21A4E9295BF1F8B0CB8DF98726B390D52AD21492CF442385959E226047BBE0A9B10D013E7AC9BB3D3BB89E262EBECC0AEA914D6375977C4E39E55063C73EEF6C8CB533D18AC0 -MD = 5DEEF0AD1C5AA398AD3B3E7E478E8DCB62709E5039E73C8A4E597476 - -Len = 965 -Msg = 1BDF288A6AEAEE17B671269B70FF9FC51F7C6B27A8B492C134D37CC217C225EABAD8A904F555E19F78B51E579D77082569B6DC2DAF8C30516B40611781ABB58DB528FFE79336F34CD07E0EA394E6ED982F5992EB89FE8F693B0F51F177518A7B42C3794AB9C55A02846F1AB250480E81AA82BCB18C173A6030 -MD = 0A62A913B3B73D8A2F07CAECF21951EC2572500BE9BACEB1E8AC2512 - -Len = 966 -Msg = 588FE175F9D58E6149FA78E460E72D2BBE43EC3EAE3ECD4E39B292B627B4BC24E87E410087317E1A9D0855440B56A036349C18FED313D01CD85B30B67973F7AE119154120C2A0EAA3174CC89D68A598347353DCF8AB4D2A5AF0E2B954CC0EDD3A5D3725D60A870351000A24E7B9EE126F54790C3649E0C509C -MD = 9466336209FAFCABC45CD4FFB3067CB6DE918A13810A358DFC5A2F92 - -Len = 967 -Msg = A5175DC9A97A1104E5CD368A1F3529A291BEB228E2CE94DDD8AA413FB6E860A654C95C649F594445F5F681484DF635D244213C8211C01DBF382942C3F83A6A1252E138529341FB45C06CB08B47D34E305390927FF9811933938B35297E63F668D907FAF7CFCC2DC3253A4BF80283AEFCAC42C63FE20D8F097C -MD = 46AE3A2DB14C341F5D432C96DBB91A4DCF29D132F22CE6C5BDF6B839 - -Len = 968 -Msg = 626F68C18A69A6590159A9C46BE03D5965698F2DAC3DE779B878B3D9C421E0F21B955A16C715C1EC1E22CE3EB645B8B4F263F60660EA3028981EEBD6C8C3A367285B691C8EE56944A7CD1217997E1D9C21620B536BDBD5DE8925FF71DEC6FBC06624AB6B21E329813DE90D1E572DFB89A18120C3F606355D25 -MD = BD6C865993082EC7B3808C13FD140FE0C0667B3EE51B9F8F1F4DFFD8 - -Len = 969 -Msg = 8B7EC746D297783731F7FF197779A6C0E053A84D255D9B69CF811CE154510B7D829F46E2F8F1FCF3185DB1987C7A137FF644A05BC0FFE4795419AB82F43D2EE079335101C95950740F76A3324F935C84EF7A122665F37CC7040824771C3198C745B92FAE74133488A0417C5E13E1D8C64532160789B93DCA4800 -MD = 811B7821965A5C52C91DF2DBE605151D15710334DB543786A278465B - -Len = 970 -Msg = A94F24D5ABFF3CCC0B8D72C4A721E3ED82FC279648E6BA849CA895B0600A086241C7810DE204B25104E82A528CB2C43057CF3660551D04D9F737D58EC0DAEB7E3A4573EFE20C381D8E8C79B6868F6FF718E5D6CF0613256B651CF06A5E8B4E20C43D6B7E6BA050A1F9F60C56F47BBFD970C3CAEC91DFC13E7100 -MD = E1C7B6E0CAADB71F30D44A69882EF90AEBB1285B49DC1DCC5151947D - -Len = 971 -Msg = B9BF29E393C058AF5C3BCF93FED768EAEACD6CA7227E9730A2E78FC6C8E8D944967F2B412FC8B9BA8E3DFF001AC96B1E04AC0F10CD5207B3DBE7A493BCF49C2719AE0D20CABD072D7752F10EEE993373737CBBB33062CCB6C27A6606DDD8B7B57887ED9BE9FDF615D513830134867D039BD191501A77650987E0 -MD = DD8D7C17D92BE144B2D42BDC56BEC2196EC52C01194B3926C72C4CB2 - -Len = 972 -Msg = A4A5663566413E82C9FF0EF700F98298437A3186142E70862E19DEBF018BC209BBCF4B251A994A14E1A4F1C8B07FE4DF5AA10556391F3BDB6FAE11FC8EC2AD36EC31767C73EBB71BCF688F6122F0015FFB5B65FC9B70401F8B4118C8A98AEB287770029CD0BB29FC451E4F114EEDDA588684C4EC8D18E68E88B0 -MD = FEF116E05F24EE3833A72C0D3FFB4CCE53AB92A7E3DA66334A69C49B - -Len = 973 -Msg = 55DAED515EB96107C3C810648169BF65CB31CC423D10280C60F872855AF11088598254FE85EBA0C5776C787D314B5EF092209D354DCD84F85327A92C177AED949A6C2739022597119D1ED4808FE9FF2B1BC4FB2D902F79C6E6E5435A4F4737CEC79570834CD3BD4E9BF7F2A3F7E0D3DCD006AF83CD188D61A4E0 -MD = DE17D9E6FB684536F1E513B2752405DA0D364F1EA4EB21A7D91DAEDE - -Len = 974 -Msg = 107FE24AB253AD1B0100BAA74056A3637FB2A4CF89B13F618F947268BFDE6268F964B43C87C99D908657E9BA033059432A4DEA8E1748F7043C73FAE823B74CC10214965EC2F1E021AFAC25D4A3928C90D88CE4B881DB75DB5137B0B890211B9F1F89E262CF062223FBDB7B7831A320439B27013C83B564DF9F2C -MD = 1D92F737183DAFAC688B6E3C7D492E2ED3E19966923B970DFD710BEC - -Len = 975 -Msg = F6202E868BFFD3E288A03F4D334B78B723CC20F86FEC6AEEAA06693E3C6BD631C42DCE3B999051BB23EAC7500E9D94EA968C7BB0D63011D9CE2A4A58954EAA2AD8DA5A275E39453CAC036227E4EA4EF0712252A5F11981A63EEEA45BD335D33140208CB20E7CB2B4870AD4DFFB5E0E8C06D7E822756782B5D2B0 -MD = 66CDBE09CDB15100475DDCCD2693397842963021A793C3B7EA25C092 - -Len = 976 -Msg = 651A6FB3C4B80C7C68C6011675E6094EB56ABF5FC3057324EBC6477825061F9F27E7A94633ABD1FA598A746E4A577CAF524C52EC1788471F92B8C37F23795CA19D559D446CAB16CBCDCE90B79FA1026CEE77BF4AB1B503C5B94C2256AD75B3EAC6FD5DCB96ACA4B03A834BFB4E9AF988CECBF2AE597CB9097940 -MD = 8CA844ACFCAABD3B969F86C2F1ECDF1620574EC8C24426BE2DCC1BB5 - -Len = 977 -Msg = D92EC59AE7D2C38D0D6C4203EB551D29AE72AE152241E0D42D6DA610B3070A4DED3051A3A607CAEF6EF487402BB205C318AF4C22048F1E3C9AE33B087C2DCE7A40F7D61BBB6AB8C0BF8EB60CCAF24CA5222A72967AB74A99C2096B8E432CDFA0F38E6BD59DAD95E1B0A5932328A36B62897E872A20358D79988D00 -MD = 286C96F29BF89C3EB937F129C49D6FF0178B5B33121459E2915B797A - -Len = 978 -Msg = BEB1651BC96984876B509D703934E82198129E9F6F07492C1F37A6C8F8A7AF06D474BB23388AA492F41F589A0488C94FFF4BB6C518172CDF1804EC417DE35C212A44B65C73D236882327228DCEAC23BB05796735AE4AF05A7D837824CF6E4DC429963C16B2145B29DBA1516B37ABDF0C0C4F917EADC2643BFDB580 -MD = D976407AC18AA822C3D48DB5074D12F6C35361964815923D1D80C26F - -Len = 979 -Msg = B19714A2A02455CAAE27AE643E9725A143BA473B9A6A40E8557C23072F094404E0D22A4649264C064B9869AF35F01D9453F2B452AB469B7E794A60727B23C1DD83BDECFD8269DB59FEA168E524A9D7A9F700247C5965F8DF5A179FB667CCAFF1BB189D708E6D018DFB5B3CC16466B50B6E6244793887D637F60E00 -MD = 5440A642DE214829077EA249F2C882855338BAC5439B2019D814D991 - -Len = 980 -Msg = 9DAAFFB294AE4DE0628718707F96B2714032CFC2B15B7091610EE876EFFFE498390F5625B33BAC592BDBCD5AC419F1C4133F346931BC2EB1A82A90AB5941FEE961529358F1A739894104CA8EBB3DEA22B492E81F2A8D7EBF7B208C2000F0DE664E7BC4B2792439AAEE2E796ED11D9DE254B583C5A1FAEF2BA01EE0 -MD = 65F00C63DD9253E227B3D0A18915D84F9C4574BFB2326C275E289F0C - -Len = 981 -Msg = 29800F52B584B675C62B0B26053A303D82E8707329E83689FF63DE1A55874D2155305FB332E49E49C016731B4CB4407D28703FF3CC40116DC5AE81FB8080F0DD8E29298570273C0255CBBE85C6236984F0FD0021A4951BD979ACF8C092485AF7DFBE4B98EDC81DC92CB2C3AEC62DCA758F70288FF04EC2AA2427D8 -MD = 6394557DDC23F65B8E830656DC402E77B789CD4567CFAF2594516FAE - -Len = 982 -Msg = CDE6DFADC607435F1D98A2E6C907869B5272F9CC63B851BEAE6185E4E1C08456C612ADD38FAF4E089A0DD4D8C74FD2705805F87417744938A99038AFA6A708BCAC88EB7723747099781BC44B79C35C00F0E609EB8E5FA65B197B3A6CAA4A1941CB5B9999FFBCE1ACA410D1F9EFE7BE43CFF02FB35FE893345EC070 -MD = 5AE73569357103EF2F1A584952FA780602AF5C7D69467842AAA506E9 - -Len = 983 -Msg = DECE0DCDAD18A4A646CFDF248D5A68171B9968E65F145574E6DEA421E73569DA82A9B941CA3973A342EA5AE80588C73489D3F42F28D347BA2FE9D67E0E7326BC3857D21A4AA0B70CE596072AA7979159F016AD11C28B213BFC467D68FCA254FCA30B0089AB52BE070704273853498FA055C7085696AF13DA063F7A -MD = 74054532C1F1A9D4DB7290C0A44796DCEEFA1B7A43BB4C3C7CD900BF - -Len = 984 -Msg = 8AAF072FCE8A2D96BC10B3C91C809EE93072FB205CA7F10ABD82ECD82CF040B1BC49EA13D1857815C0E99781DE3ADBB5443CE1C897E55188CEAF221AA9681638DE05AE1B322938F46BCE51543B57ECDB4C266272259D1798DE13BE90E10EFEC2D07484D9B21A3870E2AA9E06C21AA2D0C9CF420080A80A91DEE16F -MD = E8D549FF8D53745A4C5C75BDAD92314025DA877A77CE49EA134840FA - -Len = 985 -Msg = BF5EA928E0690803906D6B96FD0EB1B2791C097B2E89A833CFB31E39925898AA6AC461F68585C43A4CA02F1E2E2E0079BAE65F93FEE50F0338913B806CAD9BA941D8A089F219635B170905D3C6564B9D8F30923873CEF618D44DA784B659F0A070454D57BB93AFFA4BD4CF2B12266F5BFA32A8BD97420DB526D02600 -MD = BF4F51F8BF9788A2C605F7353A27BB048C39DF598EC39FF13C584FEB - -Len = 986 -Msg = 8739B52698115E947D96E0F4B41E488BF1233CDC7ACC1B44A18EB0FE4DF8A6EDB47B5483B9A1389174753441289E00205C4CF7A55FD4D2ACF5570686DC12123DC4CD26DB5C6DE03CEAD5207BEE94D63F280CF40D26EBB7206122F34D17ABDD570A4494DCB665D40BA8DBDC46650B4166D2613D628B3FD1BB6A60C9C0 -MD = 2F38F3763C44AB16C4BC8FD90F789E7EC7B34C2C7474227E078C3F86 - -Len = 987 -Msg = D610C8FCCF7577909810F3C630784EFCD2FD11F4F5600774977A55CF141CB15254237645BCCB124420F4AB52268AE4E3D128FEA4AF96EA09220874F5ABE331AFDBA7282B3108F5633D00EC247F862ACE4FBCE38F91A02C21B03136AD7FBC105A3AC0A49B08637BA4039FC3EF1FD2A82AC756FDE1C753C628CADC8C80 -MD = B598A3A9EDA7EBF9A77A025BF84DD30F5F7A4BD48A0D6A27B27EE8CB - -Len = 988 -Msg = 075487E9BA7B7C40CE8107A554A8940D6B041920A9124366D88DC20E2F89622E8A98140CC1F23AD25C71E6261D3C31BD9BDDB9A8DF92581350ED66272507BF63A6B838AC8099C31FF7832423B1B7B066706F318E5AC45F04999C5A29587CD11A21D3A96EE4DF76D5B25D5E5A978A79B67398FF6C12700A5290A4E580 -MD = 5758CD8E3115E98D925C65FE1B4E1368AE1F3333D8BE95470EB9A31D - -Len = 989 -Msg = 102B3D774615C1D8140E59F3FE9AF4DF5FF0165A61E5D574244ACDFCF8F20CD0EC99B5E4D8562C2927E47395D7649461A1FE98C845F0164BBBC1CE42309B4C7810A49A99A16FB123418AD4B88B012B5DF7216402491A63B67D55989498F15A94D4AA6C55964EE0F557509C19F1A6E3BB76926FB6BBB5ED7AD6E23B80 -MD = 55BBA47F30B5898D3DF2750E715640E22F37A29E7185CF88E8E32F17 - -Len = 990 -Msg = 2E67063E542E25159C357C82BD71E869E7A1F1C364D9C4932C015EB6954E2BF55F087AF672D91BC3061933C8E94C6E524DE8FA2D85B7BB9E0C9C50ECD078A9147F431CAF3AB207AEAF57A10C20016943084B0225238C6F8F36C5631D359E6D6BFD29440A404C9607981CC8DD2051002F049F58FD3D08390B8DDA62A0 -MD = 1CD8A206A3E0BBD6504F3D2A5E3B0954B086A83EC1BF6D8D042D297F - -Len = 991 -Msg = 335674F14CD689A1D83B1BC3568CD0F1BE5A8024349E5A863C40F3FD2B4DD49F5F13823C4D2F38BF87D4BB30561B21D99294E82653B98495E8186194D636EA00D66FC39EE72ADF537ED3C9B46377DA722097753957932CDA5FF77F0F756585CA7D1C98F084E90E96C1F7425D7B486F1C9844EE3A554B0F8AD620FC7E -MD = BABDC1D73A79C8A2A3B91296D619A59ECADFE49BC43B267475052E36 - -Len = 992 -Msg = 53F918FD00B1701BD504F8CDEA803ACCA21AC18C564AB90C2A17DA592C7D69688F6580575395551E8CD33E0FEF08CA6ED4588D4D140B3E44C032355DF1C531564D7F4835753344345A6781E11CD5E095B73DF5F82C8AE3AD00877936896671E947CC52E2B29DCD463D90A0C9929128DA222B5A211450BBC0E02448E2 -MD = E6BD80787F8704FFF73112E8B368ADFBA3A1109162C769491349DCEF - -Len = 993 -Msg = 891C926AD668CCD7BB7718C43C2E22A8E5C2D398B8287689326506EF244112D0A5E03B2199F85B01F10DA8C4AB881773BE0870323A0F1BEE0B340DE96BA0EEF086784B496572ECF67B31AFDEE367B808109609D8B997604C0DFCC54CBCB50297E6768B74A609536099B308D30CCB665DEF4033F12D48F7182AF000D900 -MD = 7E99F545997560C9543D14D54CA63CD3739FDCF26EF3B18AED13B9FF - -Len = 994 -Msg = 0D5D9B2A4E8F4B3EC6B901A03AD1F0993E75BFAF629E94CCAE58470FA6411CD874CEF26955CB5ABDB3221BEB44996780E23962C7AD87A92509A98920F1A4486AA27387799AA3255F0BB56CFE17C11A6E9F8CB4FD4C40EE7A514D32F1231B63ED092310D99C2351DC50BC79439DE971F12C863B9EBFB555BA75CDB86B80 -MD = 309DDD439CAB39EBE314FC820B10078E785F7D9C4146E6FF9F86548A - -Len = 995 -Msg = C41477734638902C6CD4EFBADC2B78AB296AB64643D08B54FB4328639781993EFCB34777C3642FFD7FE95E773E8F9DD849243C0B268A3C1C867EE6674A303E1E8AE048B1058827C48590B8398ACD53EDF8EB6B97B036ED20AB921B9ABD644384ECEFD985135FE185D69045CF33F5FE18B6193D5B87E330D553999E60C0 -MD = E01271AF0A1B22B87B29B242F2E7AF808CE524062DCB8040A964B1CB - -Len = 996 -Msg = F8DCEEBC6E71E0654F2C0AD8ABC7C07194E32BCB1655C86AA04088A083A675A76D266CCE0823CE15B5C8C059B795B318DFD115E51181414F4FC1619C1DCCBE909ED9A8154ACD44BF14DEA59E13E02C8940A122AE36BDC86E088A1725113560B5F6F3E33DEDE2495538F6D49676E0BD590C721674D55BE3B138DB3BBD50 -MD = D9A5384F636F0BAA29092E324F1A090C5A7E4F22C4503BB6E24EBB19 - -Len = 997 -Msg = B5A120C542550C04AE93A55997D6AC48A3A3CDD159C3151882BEA757AB79CE25892B11C2A6FCACC19135DE170AF6DBECACD6B0172F1DFC9646DA56EA3623CD6179F2F023D06952505731E85F4295833819268FA43BF3B00E5418D355AF79D830400E250E5F04CCB7CBDFDC20CA1F1534AD8D0C0AF78A7048D8CDDAE280 -MD = C4E1A13E9C61E48EB53EF02521D7F8AAC003763F87A36E4D0C649AD9 - -Len = 998 -Msg = 29DBDC75C55797AF9D8EB7205B0BC8703B69308568C992E23FB33506F880857A02EC1D4B5149A0627CC898022F7C8F5429C5C7BCB0D6F8FE8802FEB85A5879CE613EDA128C473AEFBC11EB5ED774035A0A5ABEEACF72B4BB633389745C662FCF678C0691910110091EADC11912D09EAE4877E3B03A997A89261DEE46B0 -MD = 73D0210CC08ED5B28F2C07473BB45C4201A46800BA84969FF678954F - -Len = 999 -Msg = EFC078BE55C0BFF648E9FD2DD9A33B283995B7C4BD5B0999E804EDA614EEE19D224108C5081CF84389165DC607B317711D5D6ECACD080D272B28C364A609138340D8F2681CE9116E5931CEBF9EC81781E19DA49AC394AB340B6543C377BFF08C08AD9EBF9455030644E5A18ACC73CDC64EC0DC58785885A12CCC08D570 -MD = D666404B4D858580FA4CFE6E4142E7C08C69585FDA6407958F38F26C - -Len = 1000 -Msg = A64599B8A61B5CCEC9E67AED69447459C8DA3D1EC6C7C7C82A7428B9B584FA67E90F68E2C00FBBED4613666E5168DA4A16F395F7A3C3832B3B134BFC9CBAA95D2A0FE252F44AC6681EB6D40AB91C1D0282FED6701C57463D3C5F2BB8C6A7301FB4576AA3B5F15510DB8956FF77478C26A7C09BEA7B398CFC83503F538E -MD = BD7D9E6CF9D2C1030F892533E01B72B5288E174B0864D81D71F8C6E6 - -Len = 1001 -Msg = F8A80B5D707D5CB67837175D946F507B9FC4E58A809044BC4E61F4FB2D2B986E4169ED4708E6B2ED0C0C308148129AB65BE6DF0E9C62C115C003580B388D40F29AE4CB435F30C9891D595D72CFFE36FADC5E39FD5B2A423B528106FA717580FDDC65F0B405159BE436C049D22096E314059540D64362439FF04FF07BCE80 -MD = 16758E6621905BC9A255979E5FB5E756DEE7B13845AFBF43A21C4A69 - -Len = 1002 -Msg = 881397A6C422988B891645BAFAFEFF2EAF4897BC1ED598C693B14FE16F33A553B45BBC4C0FE5F6327460ABC45A35D70427A867DE78BC7BB27C087DCF0E0E416C71D8EF95CC3FEC40AE699470A354580BDA8EA4CD21CFEA433CD2AD7A87DA309C3A7CA82FC80EC318CB7DA213EBAC14D3E8937C07B6175769451699373580 -MD = 74DC05D19E0FF20C86DE1B77019DBEC2A1CD13BF3801DE719FBEA5E4 - -Len = 1003 -Msg = 2CA31ECAE38ECCBDD176B36679ECC7914EDE98BD88D3426589EE92A0BC1CEA705712B3D7CD9DD823A56F22F506966FFE58A2B6E10130B47401A62F67687E4DA182DAAD13226F08784A7DD8C8E1C1005EBC8D631D6A906C1C3EF7846298A9B18826A23F7A88BF20FA80E583A12D3A5A675998D5B561CEC96B9072E4169040 -MD = 8D5960182421F0C94FBCDB9BA30DF145035BD764FBFE739B56BFD74A - -Len = 1004 -Msg = E352E6FC140B3A9CF77DD2313ED07C5BBEAD0B6DB80C38D9667036AF05BBAC2AA8E31B93A63C98A966E13356FA8E6FC312B84D8FDD72A29AFBA5429D67521F9E650C0D68501DA50274FBFB946365FC6F5136F855B973054B8FFDD9237E8A88E955CDBF7762E66DC371F00E0AC8F91FFF6572894D2C968393EAAE5B0B68A0 -MD = E21238D6D992C886CCDCFE400BF5DDB230ABC2A7696A24CAA285B533 - -Len = 1005 -Msg = 6A8303912378CC2EFCD9B9A67FC21041FB19CE06D716B180FB308BE88B7F3B3B089C833378D9D97C8D0B2D35F68C48CC25A2202565F8FFBDF926B2E99F0E62C7E7A876C25A58219A46C639D0A8FD12474A6EEFB717A4343F301E5801A8F4011FA7391F8C37386A3209B0E29A8C2656D245E60906D2BB0671402018CBBDD8 -MD = BF02AC921DB13D61E4362211EB25B6D1AFD685D94937839A48C381AD - -Len = 1006 -Msg = 91B2A9D434D3EC751C5881B9F738D5F799B553D6E9D4B8F928C845D4113142FB6EB9BB3D10ED463D83782FDCE58389F2930FFB4AAE89D505AE1FE7370F45E2C4D52EE64BA7F1BAE453CE068B494880F83B8B06EAD4E41889F30EFF6780873E2DC880D1C0500E85B189143BC170231891699D1E42E80375EB48B8A64CB61C -MD = 31FAAFB554A7961EEE00C1B2D212D5DCEEE43F6A464C63270556F46B - -Len = 1007 -Msg = DCBA43253DE673A87C700169DF961A6BB5DD1ACFBD29D882933E67CE38A28FCC270028FF5BA9F0CA3CB243FBFDA95955B065873D33C397969E0F6B6BED989B99C72A2C6732C2F4C9A50FF224EE7FEE4A35D008C89A08DD7A69BF0514F0B8418D0BA90BDB5DEC7237B4CC4756192B43587025C49D678213A77ABB8CCC6838 -MD = 5F79103ADFB9CF9F82A5FE5B618D127923984678A303F0EA5000CD8D - -Len = 1008 -Msg = 0E3AB0E054739B00CDB6A87BD12CAE024B54CB5E550E6C425360C2E87E59401F5EC24EF0314855F0F56C47695D56A7FB1417693AF2A1ED5291F2FEE95F75EED54A1B1C2E81226FBFF6F63ADE584911C71967A8EB70933BC3F5D15BC91B5C2644D9516D3C3A8C154EE48E118BD1442C043C7A0DBA5AC5B1D5360AAE5B9065 -MD = A5312E8C7F0A3594A8ECD1ABC5CBC14B2585F0B1FE32A4E1FA0A2E25 - -Len = 1009 -Msg = CBAF5193380537A7BE1DBF6FBADB77042397BB65E092DEB4CB80BE1B34F92C75F7F1665AFA86590CE2E72CC8B36FB7C0326E37C02D63E153CE92D8A7C8A0AE01B27B41338B21C0C5FBAF8F717D930A2259EAEF2A0151878630A4CBE4024F71C3287687333BB163B1A6AD90102796CC902FA5FDED9E8D036DED9F4FEC12D880 -MD = AB57529B1B5AE9AA9EC2EC8AB057E7B68BB92F3ABA0D0306BF5B06CD - -Len = 1010 -Msg = 2BBEC642C07331548CEBAB8CAFC7A9678156C6D9E0F344D76B924D029B395B5C5C9289793D84C982EA84048DB0241F1A765F6A62BDC005CF6D2A3DA487A83841624D2C9BA17B9D682BB07ACDD98362D58C0956FE14EA33AB66AF46369AF0017E95EFAE72877FF0BAE5F971CC1ABA22FB0407C56A45A29F8CF8613B84C8ED00 -MD = 337DD57DB145EDF324C4919DE5FF023268261A64B99DAFD7099E88C6 - -Len = 1011 -Msg = 4A51CD0024B4B64885B922480C07B0D8B5A0FB9333255262BF8D9D5184A2DA73FCCA3E41C9100551D7DE7E2C1EEEA23BEAF4C3D6DBEB9E776BA9FDFF1A12E2C0E1769A1A2504F9CF1D295015E0C302930865F873A81500974727D81B2885620CF3F6D84375E97AFED7CACEEECC4D973E99E398678807EA990ADE94BC6D3F00 -MD = 56368886934C10184AD1600EB2081F51F7C3613030CC84DAC2776AAC - -Len = 1012 -Msg = 42E9B6E6107B2AF444920DBC1CBB9CE206A544D8CE5BB35901428C12E417E1672663EC7AC0E880636ED2F6D314942BA1A5B8A130F5B27756721CAB6B07C210D4292D23B4295105259304659C3A2198F2805FC8E0DA23132E53776309BA28D98CAD0C50B8104FF35A67C609310EF324E20365E695A21AA751B60742EFE9C850 -MD = B019B8CC079CACA1C6F8D6AC484C2084E646BC7C1DDFE108CC1A63BD - -Len = 1013 -Msg = C1D22289C5BD9E6E58CE5DFD1E04F8554E21C45DB29826C2CC00C2930FA6523B6300849B3CF3F687156EE70BDDBA13FC0B159901BA0706973B231F1B14DE4E5D6B0530675318F7C9D58319A21D674C56983AA8633956318AEABC4F81C4A67068965A0C32B822C541562E2B73F2F77C1812963C16BF862C1E56F908379A28E0 -MD = C1FD2DCB5291B9528CA13D885B9F080C062DB30270FD40167D35608D - -Len = 1014 -Msg = AC30B8A0576A71EDCF7ED976281063BB934E29B0DA7149CDEBBF8AE7243EBEA77E669D0D831E9995F56DF3B3474D88D721DFC91AF2BDA84DDA53B56C8B3CE6FCC0D4858ED135A3E549B8EA79B8B9CA41B5FAC6E326B75ED57EBB0096A54B2C13421EED8AFA38D9DC88F0CFB71ADD6561F564F28B3BE0CDA21D045081B74BC8 -MD = 6BFE084D6A8F90E5810F37F3088F3B3E06FEB35E10D6AA9F821261BF - -Len = 1015 -Msg = CA1CB2686F67E663F17744F498F8C7191CDBCEBCB4C39E67C1136FE707E59F1993E908FA5CB3C31ABC31046B896615096905062BDC4A8909A253D967DD9CB47BFBA1817CDF7870D3A39F5E2C058ACA26C88871D94E3C10DAE7E9659C3D8BA1732B97271F1B41812A89644F3DB0683DFDCAD82C28B3C238B73602857F5DAC3E -MD = 20DEB70A5A93C63094FE2FCE04B884DCDCFCB30D6387586B2E1E5289 - -Len = 1016 -Msg = A62FC595B4096E6336E53FCDFC8D1CC175D71DAC9D750A6133D23199EAAC288207944CEA6B16D27631915B4619F743DA2E30A0C00BBDB1BBB35AB852EF3B9AEC6B0A8DCC6E9E1ABAA3AD62AC0A6C5DE765DE2C3711B769E3FDE44A74016FFF82AC46FA8F1797D3B2A726B696E3DEA5530439ACEE3A45C2A51BC32DD055650B -MD = 2E0D739386AAAF37980EE421AA8C19B19AF52E70F59DC0A6988471F5 - -Len = 1017 -Msg = F27A756754DF98BA50E2A4EE3A11535C80A2076191D08CF98015F232BE0599317EABE4168C8A4ADC9EEEEF6DF285B9B00BD5730EFA61CFB094024D5B4C20EF6F8CDC1DF6CB6F75389905BB40F662C2D4D293E61E59A6EC2186600531E17E9A4D58F785029E6603B09C4AAAD31F0191CA3FFCB943A976E508F15918BAA7416500 -MD = CC8ADC765868AE4B35BB4EADF783BF5D4002A638A5117ADCFA7582B0 - -Len = 1018 -Msg = DC3A0D1D54DE91AF722FABE877CC34147D356EBB79F45F18F7BFB2772F53167C712FB6D6CD8E51FA6DD3D3E78E49C2B6489FC38AB0311FFDB36A5AB6B658FD02A4710B8897324163E3B233FA7EDFD672F44E1AD4CEFE2EAB06C8D8421D05D4F300DD967215EEC4A8AD9AF47F04D2C99C0205D6B66415B6DF4B7EF60DE972FE40 -MD = 6C4D11422DD1DCFD07F7225340AC7B73B32F21CE6814614DE08D6545 - -Len = 1019 -Msg = B39C004D0A5DDF2AAC50BD18F447723AAF56CB3089D8619AF0A86904AFAACCE22AE12C376579F53B5E63B16A37E710ED86A24F7071D0AE6D4E697754896BA7D647B7E10A0D56E5EFF13C4D213F20F34E57D2EE99E0232518CFF32BFED139337FA4FB8E5AAEAE68A6671AE852724E0978BEFB518B97E2DDE76760739CC0869C00 -MD = 099E9CCEA7BBF1123538893658757B0C5503B24B8EB783AE7D9A141A - -Len = 1020 -Msg = 25016111E052E9A09A597EE2AC0F5624C970A4E1A1411160E13D0D37F4F0013358A5DF1590D1215397BA8ED93463142D9194A0CAF5F6FB3C8BA2F7B151C764A873A6F1A529D38C77F1A993BC7E98D6FE7FBCC66E9F8C96AB7A17A728BA2FB01A017769E208802BB1BFD7E837709B408D3ACDA2CEF1127D4F8332F7933B664980 -MD = AA78CF5C82F85E241EAD2A0316E272CE9DBE6633F435D8034AA72076 - -Len = 1021 -Msg = 7E699CD10F06D8CC6CDAE2C97CB90DA76FC28E1349276390C7DC7388409B7AF6118F5F291559145E09A47C346B32C89DF8F6945C6C901875CDF143AB3BCF6F6CD122783900918079B193E18461567FABB6FD6B18266519C7E4CEFA79CA89558A5613B67A375AB603AA796F0F20A3D79E7F47ED84E996F23D9F3DAB645D30AD00 -MD = 13EAB0504FDD36AF7BDB3A0D4DC2282741B2C5E7ADC92229E6618A52 - -Len = 1022 -Msg = 7C5260CCCC53E47F31F2389A70B999403F90933FF1EBCDE519D5C13F98F5209BC1D3DBE907DF24AE4655F64DEAE48DA7F932805BBED5BD670CE1180A9CD095BFBE078316AFAC497D45DF3DEEA8BB092A8827C0E4C63F5AE2408465B22BCB793271207818220B5E9001B14FF788E992D5C70FE7EB19FD1AFAE93CF8D22EE33168 -MD = F2C8581C09C8362F3D6267B2E60A0DB94E3C1DD780210F1AD0D41EBB - -Len = 1023 -Msg = 1B4BF91CE5B2317E526F4046E9CB668AECD040B0F445E74A57544BE2A4F8572C5BD363240474BE6E7285B1A094E0F938D927BAF67B26C648A4A2933EECA67B3610210B7D3ABC972A0A6E1698BF2FC8E53E50FF4458C2DC5D581F78CE93A7D5758B3779FE9C169282FBB5BB0FBB84253AF925D1599D63C1216232CDEAD5A6AA6C -MD = 55DEFAE340D2A3B651D87620A153F3AF301EB9C6EF42EC1B45EB7343 - -Len = 1024 -Msg = 2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817 -MD = AF3E0CC6E64501F10FD39722E852355FD6D80D32190631E2F06C22AD - -Len = 1025 -Msg = 6EFE4CEA291F0EAB9A6240240558F1D65CB9570E0D0DF643146470CAD699F010D2E22AD80E1B5C0312B9615084CC515BDF63E5F4153D31D97322B6583D962FA5B2864A7E5759B6E5E5472A8EB058046170B9E6FE71D49143B2B095261A0FEE5254B5CC94AF47E54BC23AB122AF7662BAD4C908A80CCF380A64854FFF50E1600300 -MD = B6CDC91DC9C38C9DC987103FEA469552F76A3FCBC62ED66F0EFFAE6D - -Len = 1026 -Msg = CA5E7C549122799F037C32146F540EEF7F559847000F24429C6163D88BF3FB8D8A973675A565340B84317C49F6A998125F0A0E282F9F0750D167DE1B52C2F17BE54297910FEB779639436FA5A07B56456EED08C838296FDA8171854208C9DC9EC982A5AF9B407269E89DA2DEBD8F26020DD91232AAD4D78C1BE53D1E3261FC3380 -MD = 04D75DEFB69F59456DFB2F08C31C8911A44E8D6E6DCED348DFDDB382 - -Len = 1027 -Msg = 7CB99BC76B5B91CFECC52A2D78F09B63364DCBC4055EAA2CE91714BAB67F00B832E8DE22E9CC577C1496B7A303606789429D1C13DF87773A36D03EB33AF1C7500B6124FF3E2097A79D601453A635294C5F5794625363AF403E49B8F7823704C3F4A1F33A44614CBDE133073FC692F7030F5B2564E509BB84CC65632FEE1F35D980 -MD = 21C1CE0B608DA9E19E8699CE2B2F729AC42DD8DB9DFFC621C61A1463 - -Len = 1028 -Msg = DFDC85887AA85D70021BBEC37A88C783BE70256A977A14C11B5991ACD3BE5B8945ACCCEB2774E37B8161E105E30F3DC38E2A610EAE923ED300C56006E719F4BBC070E04BC14267612E0ABA5F08A1C7C5070DDC31E30E2B6ACA6289CB509B356B6D67A1BDC383A51E70F689B0CE6F333216AA76209FD23C51E65BA2D04829308610 -MD = 2DEF4BCAA0F1C3C830551A0F38A2E9D3C8AF4967CF1863D2F8FB7462 - -Len = 1029 -Msg = A4490E4E8AA88667CAAA47DE7E8B1CEC83B5C75D883465AC3FC2C875FC068C2857D295B17A64C91861C8D091E54BBC30CB67C27FF77758FF6C976EC39ACF03B0F16E53320A4BB00F3B43D9ECE4151CFCA00C5D0F010165AC8F78A31F6A25F978A5FA988351F7B14EED3D72AC36DC135E86B44A4591C25C7AF98D88032732F9EF60 -MD = 76DDA0AB380A42D078FF03ABB0C837F56E203B75CF69259AA2793F3D - -Len = 1030 -Msg = 254D2D7947E9A7079C88937766191C20706B2B550576C82ED60B25CB3D262A42E458AD0C900080BD9DE109E25A414644C9CD8AD52554F9519B46952185E04C2928BE22BC07665F04C02EFC5A4EA79A6FA631726BB98EB903AFB014EFDE7DD1261D024A377BC4DCFEEC04E3387F89BE8CD10CA73D1564666D2CBB439D3F9141E4A0 -MD = 99FE12449B3FABD71E226D3271E854A60A3C2FDFCDE4717C1209229B - -Len = 1031 -Msg = 78EE5BD77828543846085243397AC50664B2C96499765E491E3ECB95AC6A969B80FE3421A86D31FFE267DE151BA6FD7723CAF30D3EB7EE316B3891C24F8456934AE808DFDE484C421A8BFD3F60AAF2CD2D52B47A6F57875BFCC41A812E90D883448955BE552E351DDD41394124413321435188516FF1D9A461F282CFB835EBC862 -MD = F277D8263CBDACF7E1DCEBBB83E012ECB1D823AB77C75A1F7AB71C62 - -Len = 1032 -Msg = 10DB509B2CDCABA6C062AE33BE48116A29EB18E390E1BBADA5CA0A2718AFBCD23431440106594893043CC7F2625281BF7DE2655880966A23705F0C5155C2F5CCA9F2C2142E96D0A2E763B70686CD421B5DB812DACED0C6D65035FDE558E94F26B3E6DDE5BD13980CC80292B723013BD033284584BFF27657871B0CF07A849F4AE2 -MD = F009E05D1AFE2D33D2C5F4008B46F31468A7BF5299D4F0AB0EFE4FD3 - -Len = 1033 -Msg = 17934FEEFB19AF1D162F47DC010049B39C84AEBC5E11D43D9B46F843CF75F8128D7C655F10E7A815E9A6339D1B427268FE1D16B803E1F1C9FBA0C76DB007B520D821FAF833248F539A368ED17396DAE14C85009FAD853B158C1C48FB06006465367E3ED31437580E094E25452FF26DBAC133553D3BD22B7C1578E314BA047B799280 -MD = 8322751E00BB4BC961FAA8C553DF8749FA150E35C98F44C8605FD966 - -Len = 1034 -Msg = F828FF08E8D707D43B3D19E6528A3E0692259A8BBCD079A4030EE0A43B095E7C508666123E7DAB54D93A71A3A67C8013EA2E20AE0629A62242FE190F7891BAB9234CBB7AAAE3AADE2E427224D7A018B0BA866AC05FF87A7B7391FFECEA5E94E66B62B63EF03E314F06F3BE2E54CA6339B6DAE797D17DCC78BE7144C54B670C5B8400 -MD = 2939A9357E78F2C619B89E022790FD32B36C2972D0B05B56FE27204C - -Len = 1035 -Msg = 3CE70939498490AEBD7EB61AEB4216954AF123E90DC7EFEAC7BD364085BB7803B9C0AB20BA9EEF065B301B417FEF08B994BA4D2B52C75EDDBA92A57D3FBE962A5B519A0F3B1FA3ABB39EDCE126A124741842C8F745E33D1ED1B082AD01D86007EE431A8774981EEFA9286D1D256F75624A59C222AD70C012DCAF8E19A7ABBE27B0E0 -MD = 329B43EB69D43D839F5CA3923D171A62BA473080DF800EBAA85CEDE8 - -Len = 1036 -Msg = 0EC5838E1DD9C1E01BE54B20EA20A834D4573A4F4CEC151A40EC8D1D9F97FA536EFFC957AA86CC96616C4BC5BEA6F15820E9E1BA794674309ED6B90D40394D644D9A81220AA7A6EF9645ED760375A3EB3F515EF80E2ECC816809EE4E0ECA9A41482C1DD65964EC78B3566F8F5A9C7DD8746A66ADABACD2D827331CDB3CFCE2F94CD0 -MD = 4DDBF64D1B20B22C110E8FD1CF8D011BEEE063B16CAF5351E8CF71EA - -Len = 1037 -Msg = FE5F59C765736017B6105040F249FC5B6957FBA1ED5E4A4F625C7F4B9EF7B6F2E24ABBC543B1CB53EC8B52DBA94450B13893320701FFACF1730073752FFF295DA40485F8B8DE9B3F7B1FEFB4C1E07564022A3DE7F102FCE0F37C6DD08220D1C39537DEFD9DDD87ABE6833C4727DC08E81E2DED23CADC3D52F28FAAD89C69BD66B998 -MD = 72D6B445136AF4EE6E749BA6A51C9589096BA147E0449422ACF27573 - -Len = 1038 -Msg = 964B2419D5D9D2840AA6FF56B88321D60320599B00852613C563A501FDE3C14CBF4591759FB6CB3BAD876FC0E39DFD4866B9978B65EF92ECDE9FECF3484BEC6A125D0ECFFB00ED074C2570CE913C8916EB3A7EDA6E9D70E133C0E61879CF2AFC0F4D2A3685A8CA979621D80100F6C0B2ABE9F9957D89724180AF98655CA7955D428C -MD = 764161CCBDB8D7C9086451CE6678447C16BE33B31AD11BBE2EF840D0 - -Len = 1039 -Msg = 221BF8337CDD673D323A6DB530A225E621A573D5497B1841D27A96D32AFF8E499D1EE360CD8D356C907371A034709A9CE02E650426A0C5E9618FE41FFAE0A57FD2CEF4C47437557EAFF02CC2BA394303C336A464BC9241C8FC86C157B68E35B36B8BB301ED5F906207871ADB49E02EC8FE2BDF342D23C8327032DF70855FC6B1684A -MD = 55937468F55255B53B99B0AB49C815E7D12CDAD402FEF487A7FBF372 - -Len = 1040 -Msg = 9334DE60C997BDA6086101A6314F64E4458F5FF9450C509DF006E8C547983C651CA97879175AABA0C539E82D05C1E02C480975CBB30118121061B1EBAC4F8D9A3781E2DB6B18042E01ECF9017A64A0E57447EC7FCBE6A7F82585F7403EE2223D52D37B4BF426428613D6B4257980972A0ACAB508A7620C1CB28EB4E9D30FC41361EC -MD = 76281BD1613843A3ADBCBC78D1923AFB5B8AA2DCBC48934DEEC84AAA - -Len = 1041 -Msg = 3D90A93AD2235F8BA283865E49711D1C3C990F5621C18A31B626421D431476F367B06B40C5867F416935FB556FC2F8628F7BF9AC3C28BD796C2A332B46CDC624A62A21D22AE6CBD931F5A9EBED57092DEF55879D7AC9D05AF4475C75CAFA2F2F3720A830114056FF13CF9B0CDFBA04CF358E2D6F0C1186A68C871ADC4DDCC70F476B80 -MD = 4E877845D8436E18BD81E1D7B690723CBCE05A256DC6F74917FC6447 - -Len = 1042 -Msg = C8A7DD1E3C1C4B00E21E0709922D5A2EE2DB3EF4D8C772DCA8006C9E99577C2E5334A3AC65E696D0878F9E526C51518421B37204D37A571D0F71C193A7C426416F5D4ADF1614D6B50DD2F316AC427291CA41F369B20E823990D6C0B4F557281624776669533F9D01EA31D56AAC5D6390EED5D3A6FB055BE7E7ACC53D28C657D3B66040 -MD = 9D3C0F0271AA3E245F70374D6DF25316694E78F24512730BE9BB414B - -Len = 1043 -Msg = EF927430586D5B9B2774F1E92055A0BF6E683E0F0A68B3B6034F9E5B839BD0FCFD058E99C655B827318AD098DD2DE10DED60BC1B11A3A7AA1370EB898FA4505867A20236EF89EFAD3BE5A82EF39C785F24359B14B4B629008327E708F9A9830CC66356AC6F9D5E5D4EA6A733FD6CAF59F5796FBDEF70DE66B1A7C0AC56F12DBFB924A0 -MD = A1212C49F8D0D43DC605466B04599548864A1CBE3ADCB25BC12729AD - -Len = 1044 -Msg = 8133BD79A1E1499D04B283B2AA1238CE2A50C1467248010ACA4FDF9D0046F6BB069DAB81EBC0F29DED2168FC8566E6C44EB222185C894D0FB582799A47F3A4F9147CF11A4359C5D4CAA8A00B60843BC04F08425073222E083D7897F8F760AA3640D09EFA0CA1127A536D19C09E7DC1C0E3409269FEA735E10329611772AE1A5FE87B60 -MD = 6C7A24253806C1DAC53DE9A7FBF4F020551A4D3DCDA1E32179B2235B - -Len = 1045 -Msg = 017103601A622CC6479298FC16091B08BEAE94B0C20380EDE796390CEF7957AC31AF910E0785768817FD68DC0BAFB27F15960B8FB417E792DBA5779DEBAA9DADA43EDA2522277233DA2F544E53394633F3BF92DE1E30CE5B3395BC941F5229F56C76FECC6026FDF5E4A95EB6CD3E90121CD16E4DFDC617058A51290A1EC2F663EF5E70 -MD = 7C7765EFB3B708FB965CF2E058D865E5AE83F182EF07CDC6DFE8A30B - -Len = 1046 -Msg = 9AEAC19F616A4DD3BECD72939B6F318651DBF59C6E04DDB52AA4923C4054F2B2F6A14AAE357CFC2C941DCE1B6E2D2766F29F401E7FE51EEE5D67504904B6600C2CE16B8D0BD3D2074FD00B516BCCA62C78246A5062DF3F7B19F47856F0779AF1A5FCE21CE60EEE6A3129EB592539C31982786F881744B16E0EB2357EE72A2BBCFEDA3C -MD = CB0389F7A10B120B62A0807032FA92EABC03B24BA3DE6123591C6CAB - -Len = 1047 -Msg = 464ECE94E81ED3387EE92183B43B4BD70F06A9F2FFE3072075102001C3BB608DFEF3CEA25EA521D74C95BEC09E4D2EC0BF3F65BC0C8DCE25FBC9D7A90B31ADA562278A89C3113563ED449EE12124ACD1591D3D586476B5B27D3B64DBF27934EE8CF97FE1F6259A0D520844886B570551BB532397EAA46C317F63728A37AB22A94D98E2 -MD = 7EADA5AD6F0655AD93C61850D1A8EA9F83650F214AD8F21952A75CAB - -Len = 1048 -Msg = E88AB086891693AA535CEB20E64C7AB97C7DD3548F3786339897A5F0C39031549CA870166E477743CCFBE016B4428D89738E426F5FFE81626137F17AECFF61B72DBEE2DC20961880CFE281DFAB5EE38B1921881450E16032DE5E4D55AD8D4FCA609721B0692BAC79BE5A06E177FE8C80C0C83519FB3347DE9F43D5561CB8107B9B5EDC -MD = DA7C79E04FCA2B69AAA58199CA69105B6B18FE67E29F380501AA7FA8 - -Len = 1049 -Msg = 21DDEEF5DEEDD0438878B962A1D8A389678E34170A9C7DF55A2B0555D23AB3BC604D219AF38CF4B53F825CFEAF5B6CBEAFE028F61260CD1730F5CF32E2D9AE09ED879D4157B52618D6978A7C30C4DFD42A9C51373C98F486797589E362E3D0B27A7D29EB2086549A69E1F4EA94E915A2A2B08C19ABA3DA21192121B39AC7159356836900 -MD = EE54E4AD4A24AC5BFC1C16DC8E950500DD61B732092EEA0B58789F55 - -Len = 1050 -Msg = 6A57AB28E6B5AE23DC9B0B3D9DB281C25F2CAE1234A491C5429A367C46E237F33246E28BB822FD7F0C8FEE333FF8F810C5F25D8F1755E7E7B35954E1FB5D546AFB1573D6DE44C4C6E15AC43396AFC517B2BB23A134BFBEE7C4FE7DBC4E966F93A1A92DF5CC79032E37B35BB5AFAFA31A2BF03152D8668C6A669321B94A5B1399236955C0 -MD = 20229E94E289BF62E1ADF1B318159774B1AC84B5CA26C4A194B0950C - -Len = 1051 -Msg = 33DE2D5AE75E8F29C17C780363BA7A390AD99082C59C5131FD7EC40033D6BF32DDE1142D6079F2A3080A6CDB3F276C02C461882114DB8A6AEB5F91C0D66E189B2C956FAB3565E4FACDCA863859303557EBB538700CD5BDA9A40CD97150676CF8850A1AE1E7D349DA3E9F9A987E8FFB8A434E54A830833DDC96B9BE8E66D4B57E260B1D80 -MD = 0A846B7D2912AB833CE7F62421F25ECA9752BA41FFFCD162EBBB1FE6 - -Len = 1052 -Msg = F5A418ACA95D064DDB98A6E9F2782583280F70B7403D5973F622E50DAA6ADE937D9CD544BB8203092C5DBCAFDD426892E6B46EEB84940AD8E1D57D686EE51AB61D453672CDD90F4290F5FACF19FA52FC7DD277429CF978F174604EEE3E941F475EE25C5B839735F2087DA632724211DA3E5A9C551D5633FC0AE624FC93CBD09B85706100 -MD = E00D3479F889EAE9D67BD8C5B12E2105B501B5AE4E60C0709B2124EC - -Len = 1053 -Msg = E7B4FC9419F04B5BCCA5FCBDEAA781B365FEC1453BBFBC96D48D8AA601433B22760055AFD7A200B6E3A5EC998B1DAC6448900D2C733701049A3AA90CDE4D673DA4E70C4A12340B5E88370ACCE0236D7F617240599E50F53D13D6C5DC461F8994C5CC90776305944DA2BE7F154FC18A1C1B5B31F4F3362D4DB7BED6248AD6E87831A99B30 -MD = E8571D137B6F2CA551B3CC740DABF54E17908384E9DD9268D10244AA - -Len = 1054 -Msg = 446DF0CE24DD985DA3A3947E6ABB50AFA23F2FDE99D3F9F59F1331B9814FD363FFC551CA46EA987D10F1BA25E8CCCF2A4F5DE02C51A08BCDAA8306140B32B06A9C0272CD217B95926215C1AB32AEDE04F6425C1BE94AAE51CA0923097C128483029B2EBF8CDF38380EBC72DAAA62AC6FACCD9E35DECD63CC28326BD0550F54FEB9904278 -MD = B442CADA841CD77BA6D24B71A336F6FF623183E6628DD80BA0B5A713 - -Len = 1055 -Msg = 3B176161456A7EFACB82F588B41E9512F3595948C9F54630A25568116CBFD2B92C4174E11BEB34AEB35C3E496728734D4CB2B6BF3FF8477D34802FB6BDA003D3F03691B1EC4ED55BB58C7539A16636C09C60E03FA0FE6AC5DA402E57F03005BB0854E80E941D6C5DBA3CF2414F4140ED5F996B108FA054A68A8DA5BB3ECDE20EB5FA1768 -MD = E6D16394B6D6DE66C3792F49052C732ECE299A4A852E19CE4D370B2B - -Len = 1056 -Msg = FD19E01A83EB6EC810B94582CB8FBFA2FCB992B53684FB748D2264F020D3B960CB1D6B8C348C2B54A9FCEA72330C2AAA9A24ECDB00C436ABC702361A82BB8828B85369B8C72ECE0082FE06557163899C2A0EFA466C33C04343A839417057399A63A3929BE1EE4805D6CE3E5D0D0967FE9004696A5663F4CAC9179006A2CEB75542D75D68 -MD = 70ECB261757371A282903C696715DC03F106A339F076203BAB436E94 - -Len = 1057 -Msg = FC4C32F6D00559A9BD84443E62CA62BD3F9AD791CCC43DFB58A562E73F9050196DE4D1AA15515B22560429F7C6BE74066F3F55F2BD77A9FA2E8072E5697A76A9AE7349C72FAFF8C549060DD7290F2C34B23970F0F5504B120B2442802BF2E75641B977728AFCF4D36485BF2D155B4DE9FB392B657D5EC5BC835A344899DA6D996663858900 -MD = 5AF70E3AE71D9F546E76DD62192E0E5D25A97756D0628CDA0EFB0A6D - -Len = 1058 -Msg = 14CE9F192FDD23BBB8A407021CC2724E0DA6ED7234E06695E7693A2B02C1C043DE9833C273C0D1421369E73FC206FE3860D5B7F258301112DB5D85A5D2CCE3464CC6E4C45494A155477DC4A9BBBE5A34F4D8ED59371F74CB19809249BCD281226C0172E73C354923D25142712D307B3C4A68010117DB88EBDF7485B734FD1F7400F0607300 -MD = A1D1C4DED3B04F098B9AC8AB1BD41D92DBF54893979B3E20F1C84868 - -Len = 1059 -Msg = 280E16F8EAF76DD5CB1319E7A832E9C8C19665B90D57034947D3FDAAE11FF7C9C4063543AEE6131F1240F1454141C18A47AB997C9DEC0C2E603A2B781C8886A8A27B19F72D6BD1BD0290263510A9452AC3AE81BAC01C91A759C404AB3D28F5FF4D6F193E3B22F44E2E7107F6D5D019EBA4B016BFE0E2C337B5C3D4516CB5C8E17FBE13E8A0 -MD = E82F0E2431D48617B541F425F7E6494662A6CD9D19A9EB3FC755BA21 - -Len = 1060 -Msg = 0EFA3A88C6CACC9734525F2F6772CC9A7B55D07B87A53CD89E2B630909A96124648FC5523E0CACAD477E2A903F2EEE62B700902BB571E1A55282FAC0269378DE49C210D3D3564017A8DB4684755C0F139C414EED8CEF6993CCB1D76E1983B6666F90B16F5ED2B9A53D3D0439F3F532BAA784648E14B674D33AE96A823ACA205F2B1FCD5D10 -MD = 141DC12BD22A2F1F64C2A023A716FEEFE5F48E8C61096BFFAEA91B2F - -Len = 1061 -Msg = AE1BEA529E00EB3269266AC316C88D3300ED9EAA08805D71BECC8AD93C916763A1616946F7A90F4CBD99C3B9A2122DC65D7065A915334B680843A94EFB5BDC0ACD4F20B8B7575BACCC415272827CF359D81526CEDA8E1B8FFD030B2F4E5168ED8F4088961BF8AC8354703F3E6E427BD98D5FA0F60EED513B05E2A5DB569CB62FF1685C3088 -MD = B21010ECD44E0FBCA6AFFC138A613215B329197B48BCB29EF367B954 - -Len = 1062 -Msg = 6BEABE530BDDDB616E859A1C553D80F91A1015C9A0AFE1C16519B4C14FDE70CA20A05411BAD72CBAB6A125206B1F44ED8042F45581AAFF430DB140942C3FF3A6DF70B0AC32BFBBCDAC05D7B2C03DE2554334DF6BA3A921511FE7EAB8F7309D4FF3E81C550B0E0B33FCC638A3F80C21E01963781B588B93BE505D914549D33ACE1FF83FB010 -MD = FB453C68541B0081DBF0AA14FE7E48EEA67B2CFE09CE56E5A49EED2D - -Len = 1063 -Msg = 06BA6E79C6A8C0EAF1A1FB39FE0009BE2E7800A4692C1A01113BB666607D0EF90FDFCC0DF4F8A70491A28461669F2B8A45EF158C3B604ACC4EAF046674DC5FB38D941BE12E57BA96833A573140AEFF34ED4203DC4324AECCDD11F1F2B5B2DE5B77C0689040FE7607C67F1199D498285DC0A1B4D5B2CFF4F1E2EAC54CD09F26F608AE6B6598 -MD = 5BFE9A5925B187D780D0A8A920D13705D60E3E8282DA71E89A9EE072 - -Len = 1064 -Msg = 59AE20B6F7E0B3C7A989AFB28324A40FCA25D8651CF1F46AE383EF6D8441587AA1C04C3E3BF88E8131CE6145CFB8973D961E8432B202FA5AF3E09D625FAAD825BC19DA9B5C6C20D02ABDA2FCC58B5BD3FE507BF201263F30543819510C12BC23E2DDB4F711D087A86EDB1B355313363A2DE996B891025E147036087401CCF3CA7815BF3C49 -MD = 740D3CB455133173EC652AA04709EF0F549F19A9D4CC6BEC9E876B5A - -Len = 1065 -Msg = 53C04FEA5FB71DC880D097A3AB90D549804DC48A73117B901C0CBC5C3EF590331569C074E0EE30354A94B34AF1FE4CB7A620C8E21A94027EFB0A04CBE18570D8B0C957E35782D46E5993FBE747AC158B1F0E4CF4012D57204C5226F578F0ABA56B517991C4309F3D1D1F7F9FA9A2CDF1E45C874AB297A0DD295BAFD951A6268117F2C258E080 -MD = 72639EB9355DEFB870F9FD0F5C178592B3E80C87CE33216CCBFA2544 - -Len = 1066 -Msg = F8A6F6BD845C0831FEE2F05132462FD77F9252404468A658FFFC537C5A1965B69F2935EADC66C16FDF98B3B3D866A4D53EB0EADC7F1E639574532ECFCC1C67D16530821C8EFE9A28CCA527F35924C015B466C3749F72DFD84C82732B8986ECF7E7B2E4E5F31CB5347AAAA5E82171FFDD92647A7F823E4E2F8889F732B38CB072B14B5F13E740 -MD = 58B9F1AF1FB3CDB85AB4067C4B9E4B285B5F176B9CA2FBC2CE3456F6 - -Len = 1067 -Msg = B7A4C88E4A3D7E7A38CDBE3BA7504290D21F255078537C3D7EFAC3B5AFC19F81A0C2BC2F2F4C3209DD7D2C30789EDD143C1641B274FCB8840D4D94B809F83AD303FA7C23BE570873FA615F20AB79E2B85C09AA80061D823D4D3BDF6C49937350888984A9825AD67C9D6DCF6B05B3F989419FF63697010633C1D397F7E4FBC7F28C816B9D26A0 -MD = AFCA69FAEA6ADD0B6B3603BB8009B75D3F1ECA5B9D4D48F1C26FF1AC - -Len = 1068 -Msg = 0915646912F9D65E80B4718E4597B3D33C8A634964A2FCCE96DC7871C2E3AEDCA6D83A78D57380241C9E6C4D010A594D31BE0CDDAD2403567F486CA5E7A2EC49358A87E0E311839BD0475F68BB6CB623967E21AD25216D985E841F2E248853FE45AF8001FD02DDF42C62B9AE6D58CCCC77DFA6C3652AEEBD3147835965A524F61F20DAB12DB0 -MD = CC45325016475346EE6057B3E762D990336814E3EE11A5FD14F92EFC - -Len = 1069 -Msg = 00A9047B379AB468B988C672FBFDD7B66E06F2B33E3A1E35DCE0D57566E3430983237FFBB7C3B469CDF5239CD6B151EFB11B8AED6516723DC2AD77E448962C118A2B1E51502463678F86E47309158967A168D33461DEB278F7317333ADF3B9C1B8011A39BC5211CEE3826678FDEE96C1BCA6D7035B9CDBAF58A4A9148713E1C3306C03C7DB10 -MD = AAE95AD807D019BD213E4C9E024364963E93851222AFF7CE73ECB9DF - -Len = 1070 -Msg = 409DBDFFB836B5B92DCDFF82825CB19043D26CB2BFC2C1961338B87647E7925DD322DA8A3611989F16DB1D5971DE0783FF6FE86D33E175EC55E4BD4F43DD8466CA3FB4A0468E4BFB571CD7E3C2A44D3356CD583EB63D9D9583345DC3773D9D257A1FAC8424AE528C3F8DB6C8383915F87EAF86488CF0435297B38A5341CC1560055149FAFF90 -MD = F47CC9F7329FD42E72F931E33D5F0A838AEB4BD8A08DBEE5DF55D8F2 - -Len = 1071 -Msg = 53383978B3D3F0F99DECB33B9F183136D0928A2F4EABDC4937F40E021D7F28D49FCBC48F92DB74B3CDB14C243DFFF1FFDD6C2810BDFC08712BB006D5717D9B3B19B31A6B78A4BF6E4206A1E229C61813DFB5D38AF3D2C0A19F47FD813A8802CFA837F1AA88F20ACDBABCC3CD574C81BB69E26732D2E77B06366546B3E6DD75DB443E0A1B16CC -MD = 23621BB88A3EC038319F0E3AF4C26BBDADD5A5FD2CCFC54289F29370 - -Len = 1072 -Msg = 77EE804B9F3295AB2362798B72B0A1B2D3291DCEB8139896355830F34B3B328561531F8079B79A6E9980705150866402FDC176C05897E359A6CB1A7AB067383EB497182A7E5AEF7038E4C96D133B2782917417E391535B5E1B51F47D8ED7E4D4025FE98DC87B9C1622614BFF3D1029E68E372DE719803857CA52067CDDAAD958951CB2068CC6 -MD = 663835A81A2A38D5AD3A37BD9BC96618D27CA32286E9091834A0871A - -Len = 1073 -Msg = CC4CEB09E892BA340EBD8839690C8C77B6276E33E1E87ECF9F3F475A36D22677258FB019DC08EE7670A685DD766213ADB7A55924D05FDCEF85A0B033ABB97BEBB9210D278EEB6837B4511FBE53BED7AA1880B1575EB1EB6999E0AA2723B50C76B9D72C384B78EB418F7456FFD61030ED761063FC5CD76A7BD16ABE1C050B7C20AB7AF6FCBA7B00 -MD = 6326CBB588C34F891FA9F1EE7288D7B85DB56C63D372AD8541C8A5DA - -Len = 1074 -Msg = A171F7F0CC38AD3C6185BED8BB94EA42AC92CEDD458215264B8CF9D2BDE36D4BAFA2B885CD8EEE3BF0491318D84ABC1D15407080B7DD8F4652CFDC8CF1C709A8CA3F322C92954D798C01AA17D6B5C45B5039E2B66839184ED72770620015C06F54C53E6CD538CB7EFD987D5890C7FF013CE93240D34C68278B92AB9C73F771CD3B1DCD1B8C3380 -MD = 6862262C11099EED5A46AC3504C5769D9DC54CE0CAC9C2AB525DE964 - -Len = 1075 -Msg = 34A955BBACD0F8D9181E6D573290010DD36F46C16D5342DB7DBE9EA9049B9B14766F822B644A598DAD015FCEC1A2FAC8C4F2EE961E8A9E962655D05144F54B2525C7A7D98D1AF46952F782764C6AC9BFCFC9C0ADF3E12038C89BAA3DA273D58B406D82E1D263D417E75386E9DE11281DF4D96208FCA32B19D871A109A736FBC5C3F29FCCAD2DA0 -MD = 4B6A72A8D9D70797F52F40C0377B4C5F37DB2054BAF15B6772827DEA - -Len = 1076 -Msg = B9C7F790421747555F738A0F4F2BE81A693F440312A99F9A1835AD2427058B14E2202ABF9F12DDC25091A3D91BC80C03546E97789C667EEA433E9E1CF967F7A28AC1F8D81F6CF8A06FCE64DCAF549B77B374CEEEE63DAF77D0EF7BBEE45902051E14F85847B7F16F8C168A1A147ED0EAAAE34F4CAD779B8831301965AA3486DA726B1A7CD62DB0 -MD = C64E29B1DDEF306A487E85DD42C649BA3B445D00000B485805319AC2 - -Len = 1077 -Msg = 2E2F9F6F2F735C837CAF7ECDE1AE9F41C4BE21C15797F63528B2055889F0610450A5BB973EED188F9392C9DC7B4E73E65D18437DEF436E299D465FE7E437A11FC2F8311840233934D4596B1959546E34F5C37F0FA9316CD586744BEB8DA770AFEB0D8B1248F5FCB2F542E8F9B9F34EC1802B042D50783A3884115D08B6471EC383C25484DA37C8 -MD = 617B5E4D82C274899ADB32FF0357CDDF911FB01000B6AB2C8174F661 - -Len = 1078 -Msg = 01BF05739A0A3633131E869E79F3CFE2D4400F29786C04C4D04726E632CD9EED3AC89FE6A206896FAA447FDBB131E34B83B6713280DEF5167193634D68987B608A5C1046287E64EEE7EAEBA308F5137E0C188FC35AC15F264139C7B93F3E1597328B9D39F13D9A959632A9330D852D726D982AF6D00EFE996EF92410F85AD4A742681872C6FDC0 -MD = 3DF212EEEB59942F77F0C9363728BEB8086AAF48BAC0C69588361861 - -Len = 1079 -Msg = EC686F7C71E53D760FA840B3AB715D8C0BAD257072CC56EC259D1C240851D329BBD11F48993FD01A73B48DA16297D95F62D8E08A1A465FF6A5ABD63EC21037F68F14617BC1CF15B1F71B120C7C8D60CE32F5C610F00D306EAAD3991B442ABFE5ADD064046BBA9FB8F4F9A38D99037D80765DAB0342CA779B86B1E7E8C3D698CC3E5304318DCC28 -MD = 561A7D9E2AADAF0F8D4BB76A00DC13C451FB5CFAC346724E890195A8 - -Len = 1080 -Msg = B771D5CEF5D1A41A93D15643D7181D2A2EF0A8E84D91812F20ED21F147BEF732BF3A60EF4067C3734B85BC8CD471780F10DC9E8291B58339A677B960218F71E793F2797AEA349406512829065D37BB55EA796FA4F56FD8896B49B2CD19B43215AD967C712B24E5032D065232E02C127409D2ED4146B9D75D763D52DB98D949D3B0FED6A8052FBB -MD = 2594153AC2DE681F4DEE340FA344EC388773A377D5B89E503254FD2E - -Len = 1081 -Msg = 4C727CE979CB8F2F98C2821E6797161CD3BED5806DE8B08087AB61D739A32B760604695C1DEDBC3538E987E52DE252A46D80C260B3560B2C71CA37172C6A7F6D581FB4E0B0BB06E4C9504BA6B3F172CAA2D5AA92022D2BE4AABC96CBA2F917B7519E397DD6EE35A122125FFE90AA846EFE38E774711AEC8D55A4045F927D433B42018F0F72E1A480 -MD = D0A5446C9737553AD3DB8082F43840EDAFFBF404E9945C140E833539 - -Len = 1082 -Msg = D44FB8AF633D0DE91CBADA6BC655EA864A291E404A829BA9089851ED2513461B35BE92AD602018567A4A92BBE37D20E353832D7562618685072BFDEF93D287EE6D083CBE2406332701923B83452656B67483B772922ECDD4BAE3D5D5F0C8064E32A71098E628084DC9549773C2C078C04CA18CDBB981E7AF5791C0338E95A01224283F1D3FC94240 -MD = 7232F83DFA2D5611BE6FA92117791B5CB008042C61C9D63D4F7C07C8 - -Len = 1083 -Msg = A676AE811E49EDACA42C55FF4305E2A12648C465B8FCE4828598D85B6F8821E7DC35731B21AE6A963CDB6CC3D35F1E30B165D42E5844B64475A9E75D6474D9A044BD46696D44929FC185AC54580165FC74BB855FF1CA1E31041B960E6E5AFA62B3E9E216EA004D3EDA3C893B5C2A091161314EDD55DDE464460152684C5154298E0FDEA58C692E40 -MD = FAD4B169CDCAA5BB16B029B70D6CF2085B037835C81198C26FD84580 - -Len = 1084 -Msg = 70A4730279D082EEBF6500E4E61AB4ACA585FC47EFB9CC68CDF701EB55C53A5B7FF42477756A16B6B727DDE9CD90AF741428018F9D0A6A219A1A4649521E7B0EE57F38B60D900ACA04552CE4ABB537034B017900182C6C639E8251BCC31D897BCB7804545A1201501244479EB92ADBFE6C29B738AE9F25C2CCF04A7064BCE438DA1E98FE7686E740 -MD = E2C7A6FE874063A9FE80D4DB5A647238760756557267D72E61F2B197 - -Len = 1085 -Msg = 7DE762652C7A3135A8B42A45E29C5C4E31791487B1777F151B29FD2CBC901EAB6864AF5788EBDAA54E5707B82D96150E47780C05CA59347B72864172F40C1E91B786E3891BBFA66D761A2ECB69873C28BABA3E1EC725E9346DF6A1F315B96DDEBC5F10F97CA0CD30D108AECC747628435BB93951FFAA0A965EE1A9A1943CA018F0133E9D946BC430 -MD = 6E6D9AF820EBB25B22D79A46D066A529704635183DC50FCBD1B917C6 - -Len = 1086 -Msg = 549C452B52BF24CD363C8C6F832FADF5AE643E51BFD75D31968224ADEA8D8EE5CC9A4B7C6A8DA0EEDE2B0F0651A5E1889C4F03953155AA4F7EACC3F17A55A71984E36018E9D8150BA31A0317C14A457C754C72CCED34250B3CFCA8A330DE2F5A6829433615CFB4FD0E63921593D1B519399EC8BE42A32AD96CEFDDDE181ECDE193707F967E182684 -MD = D413E7C37343A38847F1EC3AF0CD14F1428107250EE0AEB7E38469A2 - -Len = 1087 -Msg = 323CB91D4292ED7F95C98DFD71074379D2CB19E8CC83186B241A62F495CB9B5562345F70DC9C6A06A10424869DCF9C6D100AF700ACEFA7EE011CA6E8C41AF13FF8C9D7BEF1526A8C601F69B7E51E1B8E761EC597C22C0476A74FA7ECCFBE0D2084B0482C46C0D9CB359307B6528A3C88AD5236B990EBDDCC762339D095B34DD503C7E27EEC0D0ADC -MD = 41592718E6E8689F2256975C02BCE4CA6D80782F6E2EF4E3C001ED53 - -Len = 1088 -Msg = B32D95B0B9AAD2A8816DE6D06D1F86008505BD8C14124F6E9A163B5A2ADE55F835D0EC3880EF50700D3B25E42CC0AF050CCD1BE5E555B23087E04D7BF9813622780C7313A1954F8740B6EE2D3F71F768DD417F520482BD3A08D4F222B4EE9DBD015447B33507DD50F3AB4247C5DE9A8ABD62A8DECEA01E3B87C8B927F5B08BEB37674C6F8E380C04 -MD = 42275C296937745758FF2B7BEE9A897191AE87E42BD10198D9466C19 - -Len = 1089 -Msg = 5B11A12546F0ACB075C50D1B5345605D9A8542B87AF03EA106945D3BEC5EF7A9360B03187BD6BDD510576CB68E8B89649711C1586F58D406B44331609A4152C725BA290B4357C0DD33039306342E6640BBE5E27035E6118E13E1F47E74436053446175368A82647D433D693FDC5927DB2C5AB7B49274AD2E522C3FCD8603964246C1EBF4C78881E500 -MD = 9904C4175F4284F31F005E1A64DF35FC49A10C74624EBE03385D3790 - -Len = 1090 -Msg = 95E4E9445A009D7BA13582D798DA2BA2EE87D523FD11079D7D4D7415EC275578A6765100E195C662FA22491C91D929E5196525B061C7BEF28B5C7E007754A543BC7577B1A28002A12C8AECFF500488673EEBBAD04B5DC521A23A62C48E27587E40F96585998EDA108DB8536E4DE4F0F8F7ADAFFEAC348FB0ED7C272432BB3123E0463FCC23090AD2C0 -MD = C408E2EB1698DF2C792674B5D23F985AB8A1DB243EF5C52E267BC5E2 - -Len = 1091 -Msg = 99890D0AF31A29F66EA71EDC5B22CA37A1E32281D75249797335D503350CA4D9393B88A493E519CAE8227CDBE43EA16C3034FB2F3BEFAE6A24955968C095F9AA8287ABEDFA012F339B38059B803F8A49CDFE0A44A1FDC0F5A95417F39D0A6A7250BE89421B9E6C6275961D2DCCA2CEEA8DDEB9F815E2E229730C98B81F899443DD11E26548A08F2D60 -MD = 363F0048958FD257C1AC324682919BFEAA534BEA6515D63124051129 - -Len = 1092 -Msg = 86D3A8756E45CAD9D351BA6D187A5FA35D0F898948E922F3DCF7D1D24C991791031EDFF0FEC7AE1B4B93406FB555CA782869900E7FA4BAC5ACC6D1333EC8819D8809004E544CFD2AE83C6E34854CD2D07C72F64D052259E138FD44204660317E73367D5B6E89E2B0AD53D1D5F00277625D8F8FB3D418501F76B127F9426688AA1D70ED3A3645950D40 -MD = FC47FACF370C383EA692F334FB2BA1C0AECC77A0C308B9EF72ED23A5 - -Len = 1093 -Msg = A2554C66211476EF2B6527FA9810A152CAB5ED42AE8926D582F4B0BF358EA30AAAF75EDEA37F3C7E1C63A66514C5B244316B562EC47D7816D6D4AA209E5B3D718413B4A30A26FCD28D2CCCF4907DEE332A090975DBD481EC5A945E17C1F3D2751AEC0C7EC6F3EE61A8DF8DA4D41B1B8BEE408FFD1CA1475B9F7A04EAED705350DCB86010D0FA03FAB8 -MD = DAC44813991C8EF823E96A9F65A8EB5E190A4C5E33390807EC7729D8 - -Len = 1094 -Msg = 8913BDBF67DAC137CA5E1C7FCEDFCD43680574F7AA64FD63E8FB7B672CB39E7B1989E44916FA2D44DB0108F56AD945405D6D736633EE06E82C36B255B4677437DE5F0FA61064F659CC2189B3BCE909268BBC3FE1E02885A755BD60501C611A09B6F101F119850206FCDB7D1E20E60185612ACFDA62B487D1DCB40994165DE81ADF43EC22D39DAA831C -MD = 65426E012B2CDFA925BFD9CE3246E4B8BE884FCCEACBA9258732A145 - -Len = 1095 -Msg = 2CDA1B5738756EE102A02BF1E2538A988D62894143D4E9F19CDBBE8F89D365E4BAEC3EAB665014E09FCB98751F1337CCC33852A1B062D20AD04E844D87DE82456412C8EC1D837BC75B2292831B80A7CFA0C2EC8B4C5238690BBD7F32F90FE4F2188947393EF43720E888F9D0AA6F22EE75FE03A96F28CB3AC08ACE6944BA59C81B926B9169DF7B1452 -MD = 07D7B8C18792C4E13FCD2404AF21DCDBEF3E39799762D6AF587C057F - -Len = 1096 -Msg = 04410E31082A47584B406F051398A6ABE74E4DA59BB6F85E6B49E8A1F7F2CA00DFBA5462C2CD2BFDE8B64FB21D70C083F11318B56A52D03B81CAC5EEC29EB31BD0078B6156786DA3D6D8C33098C5C47BB67AC64DB14165AF65B44544D806DDE5F487D5373C7F9792C299E9686B7E5821E7C8E2458315B996B5677D926DAC57B3F22DA873C601016A0D -MD = 143F9055EB1F736729C77721FB65ED5EE142F6E969132FB22989C11F - -Len = 1097 -Msg = 8F20862EB9CEEDD84B3F7E4E7387DE2DE46E141DB60C9E29C45EF6809107D79334E086129C757FD820EE5B3D0123C4C28B34B11C97ED178367D0CAE25DA80641C541973331B1FD3DAC8F5582B9D42ACE951F4916DD4F76C16D3FB877CDDD20B989CD67A109CE139DCE137BE25D03256273DE1526EDF611E29AE7CEAF881E64BB30935BD07B22DEF87880 -MD = 00C429DDED07F6ABB487CCC020A2F5C3759C727DD95CC43D7038A388 - -Len = 1098 -Msg = ECD1C8A48651172811A515025A25503A9AD8AB6203F05BA929E8DD58CBFC12ADA9C7B3BAA565367F757FCCBCD1A05C1BF394D9EB4477433E4F143B6B405A3EC913AA756921FC5AED376921F8676C1A467FA219F381F6CAA0246FA18B16A78CA55FBF58C7711663AD6129414F97F88AE25FBF53D1F55FF9C3CCC6601CAD7AFAFBA2E14F34A47007F809C0 -MD = 2A6DD37DE2678E54E174CBDFBF71609ED8B5EEB5EE8E79A65E701C19 - -Len = 1099 -Msg = 091ACE177B650C3E607A71AD088652C65C8F3EF813144AAE6589EC92A7C511DC195470357171A23EA904A316CA405364C55EDA60A409C808609CFEE8BD2C8CF5D3607C37C77074A87F2235CFAE2222FEA82C5EB6B8C117D21CC8E29A7698FD9211118374F86F92DF1724D797210A66CE91254978B50259DE484DDD62F0EE6F5D5A5E8E00D549E90DE8E0 -MD = 162FBCB285EDA8E1BC42AEFE09057A23CC5D006C309BD357BE243AE4 - -Len = 1100 -Msg = 534B61438B3CED888D051393506E80A2A71FC2B2BBA6099C8DDA2CA48C26563BF91B5F201420024A0865114F5749B496539E99D78D5E691D763454825740B6CDE5EA88513A09C3BFC65EBE2EE2C3F4D56AB1798559972D92520DB6BD79AB7BBCC416F22759183BD0FBBF16CB02EE5A5DB3A0015EEC399E8BA9A2949E1AFAD4203F427095952DEFDE4FC0 -MD = 34B9E783C62894CDC06521DEB2939F340372E69E4561064588BB5CDF - -Len = 1101 -Msg = 9485B10269346EFA89E972BD6912DD9A878E0682F548BA438B52DED37E374135CCCE076BD254F80B4E9253C479343AE53D7899578B61E6C01A1E1B50C26A1554EEC28783C45FF9EC90D013A7BDE8724B369E708BA547C270B0BEFACD16F4AA427C1B7AF937420C5ED61D3F7865A52065FEF7F803411BC2CEB33711E9E67ECCDC9D774FE532C850D934F8 -MD = 12C5E8B1F8C7FEC3C0C2E26C5A68C5D93A52BE42E9A65F3C702B6EAC - -Len = 1102 -Msg = 51853A418DD59D08475390A4AF946B850CA46A508A8385C782B5312304683D9D287ABC97099EABCBEAF589AF4EC9F509AEB4323FB600EFEDD49A1A6BFC802A4B11D5DB9C49CF0776A1E55406E5CE46ED022F1B7458CC3A1287A748D0FB574376382C34EB8346CE941B6C78639CDC4D10DD58B5A11E3F8FA4A4129FEA7BE28E0040985408905ACB7202B0 -MD = 841DF22C2AD157952650C22FC13CEEFB80FE15033DA0233C54F74E17 - -Len = 1103 -Msg = 02A2FC7D539DD0FFF7337A0C42C23C2F9B505AFDB06F38F1C8AD8EFBFE41467F4727D7ACEFB17668957D2B57BA67971EBEA22FF1D8933F8F2759708CF1F96622258EA221AB8A143A574B59C96FC5250548DE6A4CDEBA0ED4BF49D3CB62F2F1F0C5F8F05C4F8AA249B1F96003AF89DBDEC3C578E3B7D62A1AE591E67F3EB57243484124A2BF71626DFA7C -MD = 4A1EA215CD9573C1A7940AE00D0C9BEAF54F972963DF823478A01462 - -Len = 1104 -Msg = 8B81E9BADDE026F14D95C019977024C9E13DB7A5CD21F9E9FC491D716164BBACDC7060D882615D411438AEA056C340CDF977788F6E17D118DE55026855F93270472D1FD18B9E7E812BAE107E0DFDE7063301B71F6CFE4E225CAB3B232905A56E994F08EE2891BA922D49C3DAFEB75F7C69750CB67D822C96176C46BD8A29F1701373FB09A1A6E3C7158F -MD = 449A0313CCAB4427032B6BE9D66F827FFB4C71B538B2104F9D14D14A - -Len = 1105 -Msg = D885277BA59CD5B0A510BC8F77CEB8658E407AE08A873ECB0D2487590905C55CBAFA1A108D4BFC4286235984B746F10C03AB15F7EDA75A6DC302622CD212C44434DD027328630BA5377CDA18C62F07FE62BCBAE8EFC3655FA772E604A08E2F6DE068896A67097187B75B507B3F5874F157DA74187F5FF868FC02AFF44AB720FB7FC84CBEA70CA0C32F6280 -MD = 45696A7E55D0258577744306BE0968AA8A9F289E67C45F4174978FF6 - -Len = 1106 -Msg = C9E4994C72FCB03CC6DD0B5AADECA313D1B99F7595C9E40BE56DA64E8BCD0F12C811E029AA414780F16F912DBB00E4B226B9A9DFEBE9298FC0EC157F466BCB4871FB2B2D7B847DF7DC9281C0DB2B16F140B547089B2454A72475A709B3A3FC8D968C367C6A14AEE8E2A1025259D850E999A8B994746BE4A79011946F3122A9B8097654224CFEDF13C47140 -MD = 92D38DADAA56ED3AB9FFA703FACB48B3483F74BE03304184C0E010ED - -Len = 1107 -Msg = 18DE896CCAC5B0584C6605CF8DDC4BCA77E2F8207B3333482FBC02129BB8AB2763B17B3D3753654BFB5ED80294B4EC2F0A49DD0000FCC4B5BBBAD28922106180F1ED3EC72D73F278B613F965E5913ECD2BB25DB1765A76388593E9DEE66BFF75AD42D7266EE9E67E228323926C178FCB582E402BCCA3560B24C47F3D983316396D69FC1A7D1C250531A8A0 -MD = 6F70F253D6EBF820DF344803BD6DD4DEDC98F6C41A0D48DFF4F4EC64 - -Len = 1108 -Msg = 10927E62CBA50DC5D92EF8B03649EEAA5932869AD735A22D0EEF2B2DB5DF6433308DE06723D75D2630C9A21AAC0129014DE427FB07BDA5FC28CED642B665C1D4930B49080E50C9D8B0D4C7279834B71AEBB69C57974E45C81130D9C4675DDE38446AB64B26CEFD8BE1666F2ED8B78AD30673AF75CF73DE5B1971AE038F379BC51920263E9F5F18EDC21C40 -MD = CB167AB57A873343B27042B83119787DB27CBB4057D2D4DADD8FCBDB - -Len = 1109 -Msg = 3A58F6C016F9325FE3DB0E33919263A4155B673CA916DA362214638085FBDFB0572781B1A9CEEAE62FF993DA3B01E21383CA63A490F07D733381C6A58D83B84D812BA1E5B25694A3898F063A73EE6E542911303CB749B9B8B971538EB6112292128FCA1F209CFE49A98F532DBB1A4EBBA10330580FD73B33F31F93D799F2F4030C5CE0F0882A78F9681558 -MD = 3B8DB0611DD32CB2222F4E96AF6FB46CCBFCD5D0DF048FBA1F42E4B0 - -Len = 1110 -Msg = 2D17254047F202430E864B21F820FD944356E8FBEEE769616413DC789C21FF5EE290550338921737B0B73E45D14AE85337284BF8942950342E0C278B191E16AC07DF2F34E8E3BD19971EF6FA4743EB75754AAE1E34146DB5F7CF7A6083DD01D675BE3256AC7FCF1B3E518AF902699BF7C49BF153A5674E25BA8FB19B50E18E8631DFCB5274CC794BC39324 -MD = 9A75EC4D11F8DBBF1606B4FBF2ECD303B6072B73BF21808B03E3FF74 - -Len = 1111 -Msg = B4CCFB77F6D11DD5E48E1A0535B8F9775122ADDDDB9049B072138381939643FA5D5117BEC65B5AB487F018574347E437C0F41ADA18AF6373DFD212C1EA732181C0F2C5B45462D40F299A212D212516E9089EFC243665CAA06921EECC653677D94B39E6FA325567BAB84A984052546E9A5C4ADE161F5DF6DF97F73C226F993948F63181FD8D4BD9192D084A -MD = ED7BBB22FCD9E48FAA901B324954087AD443256969CFEB5757471365 - -Len = 1112 -Msg = FA6EED24DA6666A22208146B19A532C2EC9BA94F09F1DEF1E7FC13C399A48E41ACC2A589D099276296348F396253B57CB0E40291BD282773656B6E0D8BEA1CDA084A3738816A840485FCF3FB307F777FA5FEAC48695C2AF4769720258C77943FB4556C362D9CBA8BF103AEB9034BAA8EA8BFB9C4F8E6742CE0D52C49EA8E974F339612E830E9E7A9C29065 -MD = 21E2760644A19ED18ED0CD74C4E4C071D770132AD215EB6F7D42B01D - -Len = 1113 -Msg = CDBA5700B140CCFD21E0B8FDCF0E7B879292537BA1020B5A5AC12C1FA5CB09BB69E11F6FB2B8E18EA44CC21D31D30EADB150A4619E664333EA7195717EE311D94DAD45CDFCD9339790750A738548F17C4BEC9D0563C805BBE943BC2ADB95627D3984B34D2F8413A98E19090FA4497C8B2FD9E59DE706599DE09134EE1B9C58372BC87B6925B4E1208623F980 -MD = 1DABF91C49821F3730C95DDD1E5CE1D39AC5A0F009890359A0BF65E5 - -Len = 1114 -Msg = 8FC83D24635224EDA4A9CC82B63291A87E6CDBD4BBCA2497D9EB075784B2E749F5EBA53C80AA17ECF658D91A3908A564E6C2BF6363C3A7E2A508D471451559D4CC0775247695E6FB207D383F7906A0254800976818B6DC32F9488F4D907B4432807DBE607EEAAE9508532346013F4A9770110E200D72E47B0814623F810EB3BE968B8BDDA22F3C99B61CA3C0 -MD = 48D5CDE5C0C14CE1DC61FA92100FE9EEBE493FC7330BED6782105CC4 - -Len = 1115 -Msg = FDC09E81D5C6D2481A3C57A0828F8FBD17B4C4C288F043F5BCFD0C55024CFE291567EEDC2A82FC849E349DCE8C2821D3A7E1DDEEF9BDC90220E7EEC17C18F5557B4B2D64D342C45794FBAB47CC0E1610249DB940DAFD66C70551934C1AF804EDD9DC834ECD8F036280E513897009F0C619E815828FF0ECA3BCE5C30203B5E5F038ED364B1229DAFBA20278C0 -MD = 1E206C924AF4C42964BC9E2FAE73DA7D74971DF5AF33CB266587DA19 - -Len = 1116 -Msg = 2B35EA4A2CFF637B951841A2DED38895D6D4CA4AFE8040EC61859A76432C5D3885B75B9D13228FC629A0E3F123DA446035B66853418B67D0EEE1BBB983B361083A078F02622FCEE37302C9DFC9085A1885F8454EE56F0A9EBEC38026A0638771B4AA6C09E461BEE69ED16677610B926709D7795A47C1B4D6E5F443BC9EA464D1F2077AD18074AFE30ED27280 -MD = AE28782A588AFE41F4A1C26B2E2BEAB0388F7717B56E2D23C981B26A - -Len = 1117 -Msg = DE1B928D0D48404C330ACEF3492378B2A5D9F4BC2EA16600446CB058634935F35D32471BF24C15072CCC54C6CF83A0DD5194B9EC140DC0EBE691464B0D730A4092CA0BF08A0098E800582C453E5518E704E998787F9E34C3D69CD0FC7DE2333784385B02B1480A5CC4C4DDDF2422509344DA2C7A8BE0C654133A7B2D2AF3D367569CDA35CA6000076F3870D8 -MD = FAAF9C9E4C0E531A062B26721AB3846B30A6B5EB8E0E36D749D684D4 - -Len = 1118 -Msg = CB0334F2129D291773071EB41BC3A7BC95D44A01D945B604507C2DB5488D30806B220CB03499450DC3F8D2EE936CBB93552189E624452827438311FC11753B8173133E7235501430CDD199E44030EE9FA6EF063734F4AF0CFCB36C1C0C0A127DB579D78640AFE5E7C7823775D689890F612FD4FEA4012E3C7AF289A24FE0F17072AE6B2FEDAEAC5712060174 -MD = 8CB390D8C108BE8817E4C193D39DB1ECC8B824398199E0E9D5F6AB8A - -Len = 1119 -Msg = 2D2E1CFF4DBE19D856447906D6E14E532E713E20F2CFD73AD76F580A8E617C1DDC1FF9EA781E8974EBBEB17ADE82CD57DB3B92512A2B8C13C4ACDBFD941F83CAD9F664AE321E2AE972422DB187D699933E348E52374C1D4714A13632BFEF26D168D27948F3241D3A0266F34014DE0BAA18BCEEE6C0E7AECDADAD53FD92FCC1406C0F30128F98FD549C6F8C2E -MD = 5FFB6DF2B650F7C0DB63B4EB2733909414FAFABDA4B9009927F5A722 - -Len = 1120 -Msg = 9BB4AF1B4F09C071CE3CAFA92E4EB73CE8A6F5D82A85733440368DEE4EB1CBC7B55AC150773B6FE47DBE036C45582ED67E23F4C74585DAB509DF1B83610564545642B2B1EC463E18048FC23477C6B2AA035594ECD33791AF6AF4CBC2A1166ABA8D628C57E707F0B0E8707CAF91CD44BDB915E0296E0190D56D33D8DDE10B5B60377838973C1D943C22ED335E -MD = D5534C72BE2E4B1FAAA813118B0D29DBB86F624067EA34515AFA08BE - -Len = 1121 -Msg = 355872C5BFF81DE902B8E9E82666A99FDFD866545F39AA8AEAE26EB3A3A7798BF7085A26FC83B42D0CA2541A589F7C4DF3C2637202281AE22A137C9CFB5B7F324AD1DE1962B388EE699B2164828DF997DE802FC6948D166D3E00C70CC78E522B7338926FBAC67153DC5CB219BF8E24743D7E38C2C00BC32006B43E113C2F5CBF2067E35C754601982751498900 -MD = C408D04FA7CCDA43B7F098CD6EA820C8ED31B2FBF7BE1D337868EA9C - -Len = 1122 -Msg = EA3B98208EE7977FBF045230E52F8482F1A9CBD7F3469752114A1130B4D0CC72F5C2B52F4D316E94183B017BEE71536993AC43D66B40F60EA12005FAF2952BB4BD0202AEF3AD8B34DC8C200859327C65BE9C182A130E0D7AE0CBC4F6CA92D5F12075402A68247FC7F2BE557C93B9C689F4ACD825000D3FB630CCF9573577563090A1277C1B4C62CCE7088F2280 -MD = DF0D4A04E222B1E9022A387506C8402FADBB4B54DE4F72FB399E3896 - -Len = 1123 -Msg = B85D2AE087D8E2BCD2DF5320091FE59F356962E278FE17031328B2B4BF413600A8F782DA6ED3FB8A06F3ABDC46CF7491A626FDE9DCFAB53DB60E35FFA444909482C2B68E622028B3F047728F19955181C1ECC1AA0B70B661548742AD62444D4F3A27E9FE7ADB5E4DE2C98D4E86D2FBAA0F6D41F913A718BA995B9B04A33AA5B2B5716EF1BBB9899BC2F2421960 -MD = 6FA916C26FF9DC26F1F47091AB60ACDCBB8C537F719A2DB7135557A6 - -Len = 1124 -Msg = F2198E064F7F0935554FD140CEC82B3438E615876B22F36C7B2CA852C4902F12958E4C5CFF290A69156E21E1DADE8BB06EB5BC9F0B7A2926722786944358283D1EF9ACE91C72B0574481DEEF365A33023C7DDA3E6016424EAF6B826370C400DCF24D03D4383C1A102506D9194746E5D74139E81E4EBCDAC6886114F5AD59882B0A9B0EB494BA4D98089EF032E0 -MD = 0313DF4AB530825DE078AF772589648FFDAAFECCC73FA5291785B0E4 - -Len = 1125 -Msg = 95A89F7A1CB4BDA4D383EF4FCFADDCB55950A7D340D49BD65A04744929252162E3FCB9F3568EEC982C08B2F2BA932B84092707353DD102B37AA081A76B73545DB577FC0E80F43908835E9FFD31E1A661B1B14F7309B461F972E8A4A6A18427F8C280AB441BA2C619AAD5FF9D67D3A9920E012B6FE6A473E7503DEFB29E34B85ADC06E7F807B3F39A7636280630 -MD = 91B519EA8FDF910632E28514E714F6ED3D6C72E8F5EC04F5761FB274 - -Len = 1126 -Msg = D1273FCC09485AD18C279A7E332ED3490D058A0B5A8D03E22B6715A5455394F41059EEFDC3DCD7337FE7D82293751EDE700E017C7344F168605A9ACBFBAA68879D74DE31B8C1726C9117CE956EF7D4AD1CC4426A767BC799849A478B7F1E04F83722F5AD54CE2C5171735533CCECDE5740CAA2D0A3A8E0877CB87CA866C959E9FD5114D54E779D190D41ABBBE4 -MD = 715713B24B26044119A02ED157E0CFAA0FB164504A70E2CD41FB5FCF - -Len = 1127 -Msg = A88C9A85D29A2E99FDA4E4CCC67FFA1E87072F844B17D45AB076974AABED7DD8CFD4A32244A2D6C4312D5CABA2D73306333E62E6A121B4E4E924D0B31A303A51732709BC26087B18C46CD4A1101AF4F2A7E781E71D8ECC72CCA63F0D968CE958B79B16690AEBA169180D181A50ECF2149E318B200D3F40C893E599B0D749E1BF8A95DF4134192D79FF8D9CC95A -MD = 9542771F05847BCF8B9A717D206CF88D61577A2AD42E0C799817E0FA - -Len = 1128 -Msg = 2167F02118CC62043E9091A647CADBED95611A521FE0D64E8518F16C808AB297725598AE296880A773607A798F7C3CFCE80D251EBEC6885015F9ABF7EAABAE46798F82CB5926DE5C23F44A3F9F9534B3C6F405B5364C2F8A8BDC5CA49C749BED8CE4BA48897062AE8424CA6DDE5F55C0E42A95D1E292CA54FB46A84FBC9CD87F2D0C9E7448DE3043AE22FDD229 -MD = C0CD413B1CE000A1BBE3A2CD103C7F8F95925AC6C8A5C922AFB5F96D - -Len = 1129 -Msg = E63DE4330EA9871CF723133AE8F2A04EE4B9A78AA044E500B8022E99A8ABF8070405DD291824CB5DA14B916B9E18028D9C76018B3C74BDC456D13A97FE4BE140FC940CCF0A648207A0472E4C8F60F6D235F1F097C2E5F48BAE57695115FF5707B5A7F4250A6CE8988DB9BED4596325DFF87E08DD2204FA1D28A17F6F7A20293156130D64680D176DA80734027E00 -MD = 1614EA030CA3F99C62A8862440765ACCE10335CBAA7609930045243E - -Len = 1130 -Msg = 3CD3193249FCA77C04CEF261CFF614FCC5B5BC7EBC9A99F6C88DF6C6232784BD03B0B119CEFFF2DE10C562998FFBC1F2E3D64ABE50F026CF1AACE2492CE19AF0A9C8F4BE6DEB1702A34B5792F1D79460E74A3825F3D3D46769E105CACB8556F16E61A60BB640F4918D0A0E689CE6E5B92977A53BF6C3A1AE2852C6F355049C797152B87367083387ACFF4EFABB40 -MD = 69CE552970E177F92239D52567B8149421FCC5D9EBF10DE310CBBA94 - -Len = 1131 -Msg = DB898DDB4201457E81D5ED2A739FA8A1491FDE99C5E22AE077C577ADF84253E7BB72745733EB89FCA405F78D80887CF055DE93F19E200E346547198E5AE4E0E1EE2F819DC12417EF8D0C352EEE351914450A8FCE74A3E242EF0535558A4254F9B0AB5025D65E59177F83F2FCD2B83B955F91711252FAB9F613CA2EC038588A68C201B777757AC9B71B5262A91CA0 -MD = AB4746DAF516BFB96552648BCDBD363FF8E23D8F08D609F7FD772AC2 - -Len = 1132 -Msg = CB54ADB942A2CD04BE65D1499564188B4D1AC647CEED1CC5116498EE2421EBA700E63F8DA23DAEE3223B21096FE39A0C8DAF21E3AA8B07FE7FB58836D2E70348837B72412B9AC8B5EFBA5AACDBE685AE6F7594197AD7DD95F82CDB4D31FF37EA89422C27D0C89497A1593CD96B6160862E1559BD558620F1831B0EE428C25D1456B88B3CC613CE8F9A8794A3C390 -MD = 37E7555F06879C1C36AD440433FC69E1BDE18025B8E2BF35CFAFF821 - -Len = 1133 -Msg = 3889F0DB5E6B929D85BB0D1C26A06C1E87B6A1EEF7E65B90E51DC1195C94F58C19C1CD7717C4F276BBE8702179D4196793C4069D4D91CB3C7051962B9675E978B9CA5FF5C648E36DE672BC06040ECBC1C9F7D8FFA3D1CB9A0783F3682D0C4BA5705AED875B9F4528192BC30ACECA099F7FC7D9F8AE9161FF092D935B7F4C5343FEACA0D69BF8082B16CE95A415D8 -MD = A626B1C420E198C73BD613E5405188658D6A963C0335D42D8549386A - -Len = 1134 -Msg = 05B41EAF294ADFD909A5D43A53F1A0F5ECE57CF2DB3EEF714EFE75A226290476DA995B35148DD1D09A18EC000D41ED59D1E5FDFF169504F771961732E7AE05877CBC301E02108A0F42C56D093F484EFB86436F06FC0C38FBD52F1BA418A0DA28B7D8D9B73C0532E7A86915797D121A9F0437AC230D2E887ED7BA55CDBC2ADB946C35A7A989848469E77BD45470E8 -MD = F2F1261E95854E4E05D59020FBC359F9FEED89612094EB85764B5A0B - -Len = 1135 -Msg = 9090328108C62427294439D9BD43C1D5E5A7E2604998129BDEDE9DA02352C84D5318735BB8B9E66EDD6254936552B7CBED1A86E48CC9CB92C136BC5282FD7195DE09A05ABBC7AE97AD3D9CEB7C2051B3446CC4C4CC2B7FCCACA3DE155F58821EE7AFCAA026C969518B4C6B411392C612416B15196FF9532E25CDA2AFD9925980D44E65FF878761D26A4159FCBCBE -MD = 5F4565071A58F5BBC6A1E2646A295907C600E1993FA1E8000CF48D4A - -Len = 1136 -Msg = 94B7FA0BC1C44E949B1D7617D31B4720CBE7CA57C6FA4F4094D4761567E389ECC64F6968E4064DF70DF836A47D0C713336B5028B35930D29EB7A7F9A5AF9AD5CF441745BAEC9BB014CEEFF5A41BA5C1CE085FEB980BAB9CF79F2158E03EF7E63E29C38D7816A84D4F71E0F548B7FC316085AE38A060FF9B8DEC36F91AD9EBC0A5B6C338CBB8F6659D342A24368CF -MD = 93C6BF585E994B1669184AC71DC8E772B53443E668DA0786D528090B - -Len = 1137 -Msg = 01A2142EB62A90EA4BDA88F7677EF008E33636A68FABF1C88624C4C99BFFC7A1E1FC32EC7005AA20A36227932AC2E0D21F56FE1B9E4532315968F46DFF3068EC334CDF3F78BE88BF68E0F387829BF9FBC09A1A2F7237BF199FE75C46E60348D768958DA3ABC3D16865A82232E2E75ABD1990EDD2F1109685AB61AFD92E1C63BA59514FFB1AD075696C7DA7273DE700 -MD = 22430142F469409E9DB8C800E90D57443804EB41259786D58D5EA594 - -Len = 1138 -Msg = 635B23C427214AEE08B4BFA141E1EF5FE2FDFD1C0A0BFD60CF0AE6B47D18ADA0BC2C24511BAB5ABEED7FEDB7BA4A1AB9801BFF5812263682FA6CF4CE4C9126FCA1F1708A54596C6C3D8B3F8C9915AA0E061F2455D8CBD8976BA96D9EB6A4BA8348F62B7718D15DE2AEEA8B805E72345D1D29E7E499EB7D4F615DDD20BE17BB8FC7188E3CCB59B42B8EF40ED0EE9F40 -MD = F8090F69C13A6AB9B0190BF6975B12CF6E309306D9A5F6F35D72068B - -Len = 1139 -Msg = 35EA1F5687FDF343A7AFC05028A6F0DC3B3519069A260543C0CFE54968441731F69542683480CCF2A638FD8283E75FAAC5B9AA3C2264BE88701E8E71A58742F7C7DA7BDEC9213AB89B8568C339427ACA8D11497B01E8A2F68C2702BD95D3BA665C388B7AF0CFCB87E48BAA072C9FE708A7465A57200A85A21A66B0721CB49E93D8FEB62B0830F9136DA5E18462A400 -MD = 72DFFABF66C82A1F32BE088879448830E8BD995B24FE4B76953E0BBD - -Len = 1140 -Msg = 03C7B22BF3EA9840CAA63B4F1D042C816E79FC6A611ACE2BD8F4400ADCE54EAF6208DA56E54E5A1F64AED4F68F0BEBE288C98798014472D23028097B12809320C20A56AFCC83721974BA088759CFCC2B8BD78F4D14CBBA26F7C7FB4271E2389BE54E2D32261EADD992F4F96692A52F6662C9518A937A37C4F92A83337FB0071048E29C3CB0A197565263B37C20C900 -MD = 74CD0EDFFD4C7A90E3E8CA3B55BD271E1775E0C01AC6CE90BC36188E - -Len = 1141 -Msg = E74F49AB1C5D5239EED54252D90AA7C0638184E8454E53B6676F7021E50AC7656368A5D1911CF9B26E6FBC17F67DDD5E7F765765192889290552BDEDF7DC3BBA7AD73976FD993944757CC458A3F608BC6EF7B1E15661ADEEB0065CA1C40A209C90CD230276A6F9E548E234339D5EECA2CFABDB1599D8F7CCF58CC772452D6ACEE4ABFCDF61B6B5DCC698387A339FA8 -MD = 119F76E1C895737C46DD3BF6950FECEB0D7FAE1FA862F1BEE6BB3079 - -Len = 1142 -Msg = BD2F38B76FE144C9695BAE33AF7EDB0F76F0F25079D9236DDE3C5213E44E6B71B49878C55023F69E9760A625945706CF6FA262F294B93FAB898747DA5A05C0B06C73695F9B827132D163733F7B6E6EFFA16C35D7F2A0E344BDAFB18B0718C5744689FBFCB7A7DDE8EA83908F985C63D65DC26B971C43EFEBB4AC8B6C416231F680B4D88DD7A27FB4631922045E8F94 -MD = 4BBB1CFA71068D2AF942A2993F20E17B4D937628EB5F72298B48B1ED - -Len = 1143 -Msg = 21254C00B81AEB85763DA860D089F5757C5659E39F73B9127A5B3092A9B1FAD24C8CCB407BD0B6F6504C7E10F672855EF7311074866D8B95B38FFBE75AB22D67227DB8A36E262F396B5FF253947A276B1D9954E7F886EEC0AD6B8DED19734FC4A3A0F9374D3ABA9BCAB67B0646970394EAC1C7AAB16D5285BB44F721B8A5D9A52D91444196D1A3FA019857D7048B1C -MD = 30C7DC142FD0ABF9F1AD58B1811A19F63B35DA2BF458A1EC0F0C6505 - -Len = 1144 -Msg = EA40E83CB18B3A242C1ECC6CCD0B7853A439DAB2C569CFC6DC38A19F5C90ACBF76AEF9EA3742FF3B54EF7D36EB7CE4FF1C9AB3BC119CFF6BE93C03E208783335C0AB8137BE5B10CDC66FF3F89A1BDDC6A1EED74F504CBE7290690BB295A872B9E3FE2CEE9E6C67C41DB8EFD7D863CF10F840FE618E7936DA3DCA5CA6DF933F24F6954BA0801A1294CD8D7E66DFAFEC -MD = BFE15BB51F680F2F489F0FDEB32F271090A09D1563F29FEAF92104E0 - -Len = 1145 -Msg = 03DFA64F87FD32347B4FBCDF6E9C93C8F24DD6FDF73C0714A1D3F2238950A0B17E17241281312FCFED19182066E8481BF02860BF3159373E812CC0723559E989B619E2EEAC2A98A7D671D09342B38485C544D7604EC34F5B3E9B75127F606BDC3FDAABBFA76C4485FE3153CCF0B8D3AF0082DC22C3DC3B50A1343792A2F75434C7ADA300F426B2E372E6F4D78482C000 -MD = FCDA5AF589E4F80BF86713DDB0A6DDA09ADF87F410FA83F5EE9EE9E3 - -Len = 1146 -Msg = B7C48C1E18BFF9ADA3D2973DB9D7A9294F1AFC90C7A9BE72179E12A6D3EB74E71027718116582C133FA6254874BB2DFCA6801FDCD65BFFC6CA77AB064E78F9961FFE0A580E3444BE1E5F26EC81242D85F829577FFEB15DACB76E5982A6E7B3A7C57FDC71E70F7F9C2C60402E86E4C784727E57EC0B6FEEB386AEEB91055A16450D8B633DA0403A4FD6DB89949275C740 -MD = 413C466F583394819E9977B6BCAA41ED8C78CCBF08DC8B35356874A9 - -Len = 1147 -Msg = 856344695FFA7F9E71CCA31E66780E83E946374FEB320A3D0D4E944EE8AD38917B892B1E4842817E9B9572EAE8BE6340A1DDED6DDB8216944CD9D403E137F1B3CD53688043E145D6D5BBE9C6A5078958AC10A96F1FB9953983996D386AF3E368394F57A7BABE20A22A7D9F8F5AC665B996B34989CECAFA60A618743CB5970FB4167F6A46635090E32C381D9A8E68DBA0 -MD = 3E4CAFDD6D671D2698D9F13721960C1F81CC235D211A2E7F18436249 - -Len = 1148 -Msg = B037F0650E028765F25A5323E3D6DC8AC4E9ED37BC69F08B42B372328A99E38827E7BFFA32FE443D09657E3835FED992CD2AD84EC38C21FEFBF3E2F9E55690A2C176539E9E12ABF4A81AD6EA9E6DBF34AEF4AF2438805D9A5A6189A64317F81FCDFABEC47E963612CD565C792E4E619B7912C308A489C7C57875BB49D3418162DC8BBE776F351B71DBD7BE5DB781C300 -MD = E5B15C3EA69733F7AF3944CEA483655965A6431761060B7A24FDB4BD - -Len = 1149 -Msg = 26A1E2EB41FEF9EFAEE544083D4069AE01DAAF800A88A35F7C00CACBE5789F19891574FB25E19F15CE8DD52066F3030CE12B9438E6EB929BE14DE20F064AC1A8E8E1B76B99448B1DF719EFE5BE37039C5BB5399D17957C796B9EE91F6488FB4F2003ABDE0BDB297790BF4D252041583EA1AFE847C9CA7DA85A28BE30DC1BAEA372057D120228E0EF01C4EDDFB54F8740 -MD = 5A56799813311B961E8FDA9DE4FB3A1438C6F0DFCA27226598B42226 - -Len = 1150 -Msg = 44F98C05A2BDA1602DAE7E8BCCD93AF9F16F1A0F415DDA94D0037B2E2EDE5647F5BA095E1744828A51E1FD65C9BAC3811817F10E69CFD446DEAA9000092B508CCC9EEEC23F3B5E0BFB99A7262639A8B8CA8FC0F54A97DFF5CE43531ADE028F23BA5DD79DF7C23D4813B9E5D89BC1DEF8D8604FD6191CC370D3B55624C30203DC2A467693D9D0087AAB7E210D14459F94 -MD = 35A8D37EBD941DDD3FA5E4BCB35CBD17D9D536153918BF71F84FB97B - -Len = 1151 -Msg = 47CE52119BFE9170B124036E93790352ECA551962985658BC3898D1D05919B7C62BD8809568C008DB20395B1317F4BBDF3AA2E982A3326C6E9ABFE5992EDD75583E9649636D9E642D1585806832B257A45D485E1B17B9264C9A2386660E18D7A4F7F2F862816DA8382AC9E4E0C3A599DC1D84ED57C69F7F172EBECEE7C48A7E810B13B3A3FBB5188070B05A7833047A4 -MD = 89646FE59AD3E89E810A4EEE5B653A46F2D86A1C03658B11A6E5F70D - -Len = 1152 -Msg = 157D5B7E4507F66D9A267476D33831E7BB768D4D04CC3438DA12F9010263EA5FCAFBDE2579DB2F6B58F911D593D5F79FB05FE3596E3FA80FF2F761D1B0E57080055C118C53E53CDB63055261D7C9B2B39BD90ACC32520CBBDBDA2C4FD8856DBCEE173132A2679198DAF83007A9B5C51511AE49766C792A29520388444EBEFE28256FB33D4260439CBA73A9479EE00C63 -MD = 6D735FB7579135F61B771B2BB0D81514CDE9C977ACCF6FEAF6EDEBF0 - -Len = 1153 -Msg = D17D32EB803ACA60E349E8389738023A0D053F8753F02DBF1B525252DF546AD52B8F5A1AA36DE05C14DF40EBC6BFBB3FB3743AFEE9ABF4CD29D2C4D707372923DC7989781277637627925044E0BB0B79D03B899CFC97B05E10481AE57A53351BA87955D956236837FFAF5AA3D8354F4C612422CA3FB4AF509A4ABC7F120A990072862FA1A8E0BFB64D9E119D691CB32B80 -MD = EA2A817439AE943C6E60DC37E5B417F02F05EDC4621D74FF4FA75A76 - -Len = 1154 -Msg = 18D8D02EA80EB2F461E55B0C55557EEF0468BBCB72B298DF8A760A7A70633D5402FA38E709B2FD800C5D5903A4E23DC5540A52517A6AE4C25A27AEE13C7F2D9F14AC488D926B24EDD63B9FF7B12F2773F22080C101BA2466797A5D258225F05D56803D9D3931B9947B6CAA2F637A979C3069344DB2D7F346FB3B0AD94577660121F2BC87B5E0D0F1D8D9C14680CE652800 -MD = 4B83C021E15D0FFBAE7AEC72678ABBFCF0FF673EBFAB1FC041719D8E - -Len = 1155 -Msg = 11C02C0B259C1566EF6044F8592FDE9E60F3D53348C71A04C049E4F197C3506223D415CC18F867CA0A660324644A77C8503B129B9B7AD3035B1E7B26F4C0EE8AEF299304448B1546D35B1E7DA4A934D2F8D7AC91C67E2D61AB2A9DF72DAD133934E7CAF18C82823DAA4624CA2B79996773E20AA86AED4728CB40D3B912FE3E271603FCFA9D7A2846822DC33B8DF5DD75A0 -MD = CA4F57DCBD94D2B78EC18B0ED74384A9634AF6C3E14446ACB9773C40 - -Len = 1156 -Msg = 6503E5415EF398D9731CFBCCCFA3203C17580D31035D512F969F9CD9A8C17DBAAB8CCF7289F36EA81A312E0E2A087E196C3F6E82C37A58898BDB8CDC77C5A0E100B1DB136DCA7EDA83722333DEF9472C73F42017BAA45BFD76FA1DA558126EF57FE9ACE4B32763F1996CB578FD0A7E51FDCE9B4DDAE2FD761308F2558395DC247C7BB4A108166B4BE73A54F4A8DB5E11F0 -MD = 2C7C730E6877AAE54CAD31B52A908CD58FE333956545332C977416E4 - -Len = 1157 -Msg = 2D04416E47394C0C28859633A9CF4B32B07D941141D2CEBF4ECDA5B00D91422F619800BE12CCB50BCEC630A4F8069AF9436CC63FF79B15F8B725935E4185701AF832BB99EC7AF362E831A986CDAD2796EA904A2B01466B2B94F17F2C6480556AA3A795C3CC57CCDBAE6ECC8221206D5065701036C8F95301E35069F682EEC1548C70B56474E314074BD869219EA9D4B570 -MD = A6599E906E45CD79B3CBA58714604B227BE0193B65F6B2D34A953479 - -Len = 1158 -Msg = 3C8A5A0334A2C9A8B4BC0C08A6C4FE0FCFCB4C95F09A966D2BCC432DFEB24517369C15B75FCB6D11C9143D22E5CB79FE0AF1081D9A5BB31B837CB33703014D908D83A61968F455F09AAF85AE01CA1EF1B8E0ED9D02BD2C47206A123E7B90F3A028D14F9E11B52BC705165CAE9B9A65F3A2228F3D5390076AF0B5EB53AD2AA6599DA678658D4E72E7E3025B59363F754EAC -MD = 27003A1358A7F42F4E0C045CE256EE54F552485D2C0173ACA5AC554A - -Len = 1159 -Msg = 12B830C80CE922F2379641BB7FDD4E0442D3856B4BB064241836053C4CD11FCD2A79A83CD342DB812AE961267819063897E0317052E8EA1B7C93890C74D7EE6819EB9C9C7BEF48D29C62BA42C47058D3F5FAE90FD30F8C49DA48138D8490F3F347F8999AE34551A7C748E8612CAA1D7151F680CE993DD807235FE50A3CFE9DEF4006393E1B0D63F8533765525D3A35E93A -MD = D5BEC341DEA6EBAF1563439C44518C79D84D72517EFC51FCDCE3F12F - -Len = 1160 -Msg = 836B34B515476F613FE447A4E0C3F3B8F20910AC89A3977055C960D2D5D2B72BD8ACC715A9035321B86703A411DDE0466D58A59769672AA60AD587B8481DE4BBA552A1645779789501EC53D540B904821F32B0BD1855B04E4848F9F8CFE9EBD8911BE95781A759D7AD9724A7102DBE576776B7C632BC39B9B5E19057E226552A5994C1DBB3B5C7871A11F5537011044C53 -MD = 6D93153145904CEBE0E8A66C272BEDF4F0D0A3C53AB30264135431A7 - -Len = 1161 -Msg = B6D26954A6248D430EF24FFEE1945470C465009DB645AE80D9C96D0365081276C30A4B9962C898F126F94C20C64045F1EE8A3E92E053BC2A0E523E7C431A3E52048C37F4803308E8E87508108C5BC4268CBEE526F76E160EB143D6582F56F2CCEC95250F6E2DF32041F9378BA347CDA1EDFD1C20AF848F9763298CFF00ACAA53A390F44CB19CA2FC3F68CB1B002042E38D00 -MD = CC45531022B80AD5FB44FFB5899FC96317B54AB30373EAB3EEE7971C - -Len = 1162 -Msg = 8C4E31FA1C8CDBD79E5FBEF356B59E9380DE9322F1F38A94C373DE21449A309D194226ECAC4C2A3043104D30337C455CE77061156208DEF5BB7FA8ECC6B4B121247D4E9AB472BF38262995C0E46AE9BED99FF12405B900D9E37A3EDDDB06D0DD4A74BB19AEBFCD7EAE1CE2236488D73C58EDAB5F9834EA0C7FDBD90F1E8FDD8683023D28711AC96824D2424FB444C8365580 -MD = 739162290A01B75E80D480EFCF4479942CDE898CA41A6B07A09AD604 - -Len = 1163 -Msg = 4414CA5B0EFAB33109A7280A70B8133D70C0697D4E7FCCDA751C7136191E40098A542BD8966E16837A0B3CD80BA313A2B027536E4C0016D258477E1FC40678C1A815AA1304BFBD5485F58BED84E094641C412B94975A800E595AB2D654ED93FD0E90AAC471FD243C4C8C4572FA62C89C795BA60D610AEC5C5FB5310346EE4EAD650B220F41B49E50CFA6DA45D510E181A0A0 -MD = 5D9E4E1A7A6B6EA1850321CCE0475E28552222D36A0BB1DB26DAF1DE - -Len = 1164 -Msg = B549E5BE6D307AC5371E9A361BD86B4C140E61F2FF38B6D17CB6079C14961D7F795D443D1CE3F3C9BAD4390B5DF5B793FBF8E618C42D66E194C4A2D7CE4C3B0977259BE8005FD30B9A3E861F363875A9DD176BDA1BD050FCD5993E1142A7C0EB2B5E8CB6B66CAC6CF0646B19EB3FB14C4D9FABAF48FB70EE777491D760951CFD736674875D579A1A615394E08EE8C331A430 -MD = E9E9210A9CE05505E99308898222323D2D9D4170FBF8323E8435AB76 - -Len = 1165 -Msg = 901816742594C8C7DF11FDF358E919E98DB6317A965426E43CCDB094214CA72FA5AB808C0BB8DBA1DE77CA3F5FBAD80EBC85AC437DF212099F4510544C7163BF214E42968114EB0F7BE50227B7A5F10BE46EB4DC1E55432C39438CBFEB922A5DE1E2070388998542ADCD095B9D94449EDC473F64C011B90EAE24B89C0DB7F4B55B8BC8154EA7E6D35BFC1E47770D5ED43D88 -MD = 6A0304EFA03DC19501CECF7C185BDB4BD074D10DA59889DCBC4A5757 - -Len = 1166 -Msg = 68F3CA7119C4F03DF39F854337F916C0D2874CE0D41FF1F357866781C76449C2C5D628C47CF8DD4D83D37F84F1159333602DBFDB899D620D2C593935C3F60E504C358CE2C4C7579522921EED2756A9C208FE1D91CFBBA72969B0191B619BF1D58D7B635D590F80825439E09B75A41DDEC0CA46A6A680D2A63DD93E8A50E49B7D19EC0BA6B545996499D79CAED4DD2AF35270 -MD = 612B74776E90838F3173918B630D7BA12BE77071B007DD841D67C25A - -Len = 1167 -Msg = B9F9D504F5929F3BF59F2C3CD1EED63BA74BF1444D4CA4347C61F54B129520C0077C3D4A9885288D5D58B33EF84C89B8801CE6A11E4370E7B479E0EC60C5408B73758533243828F9A414F4D6280F66F84CAA1A05965C8E97199E2A192170188F6FBF55B7F129072C30E87FB726ACE803AF6DCA4ECA9069D550B427D7EAF6BA0EED9A296500C442CA4E97B013BDCF5CF4FFE8 -MD = 86086EAE0B27AE1C809C56D5DC0B1E0EEA54F295351AD70D05C79437 - -Len = 1168 -Msg = CC7784A4912A7AB5AD3620AAB29BA87077CD3CB83636ADC9F3DC94F51EDF521B2161EF108F21A0A298557981C0E53CE6CED45BDF782C1EF200D29BAB81DD6460586964EDAB7CEBDBBEC75FD7925060F7DA2B853B2B089588FA0F8C16EC6498B14C55DCEE335CB3A91D698E4D393AB8E8EAC0825F8ADEBEEE196DF41205C011674E53426CAA453F8DE1CBB57932B0B741D4C6 -MD = AFE30535675A7021BF618941D94DDFFCCEFCAA1EF06CDE306D5D7A75 - -Len = 1169 -Msg = 7578F49DEC3E779736091AA8EC290A2F2A6AB4E7E02DD02E655748233401F0D4B07313ACE1D7760335D53AB539EEA95ED166839427DA6B40FF95705DD2F7B6F73BBA222D876218BA59CA6877CA198C044BDEA0EA0C67D49796CC326A237677D6732F3D1BDA0F411F7BEF6BD17E26CF8729EB89A23C25D93C9B4A688A21DF1ECF93A62757DE81A3DE44AD98292CB5CC3D662400 -MD = BA34016FD8AE4A28987D1E39F4AE41839EEEE321EDC303FF1575A15B - -Len = 1170 -Msg = EB14DE5434C648F26EDA4758903B2860FE1F57E40505A0CDF6BAF3B0CDEF2635017D42C42399AC686B0A23459C2F1D73613B389E7407BBA9D5F93038622B9ED5494123233B5AFE63565C847352B2C76EDCBBCE5A8DCB5AABDE305AD7C3A2F72EA4BDB7B71BFB1093D669B364E51ECC1DE046A6F6C6A5DB3FB791C390373717670E29C8DBB48A1A12EBE3CFC3CBD44CB1340180 -MD = 636AA88BB209C4D70B5D5B6CFFA9489BE3C80FDB6823EB51099920B9 - -Len = 1171 -Msg = AB7B466829094B1062BA045DA7100C355D3942C06675FB8E304277EB3DA4F6F4AC99FE0E69862363BDCB79C2593DA19B435D83879D61FB058C2DCB0AC9F3C489AC54D787937297E53A400C96543319F151BF1218A7249776B8A55B2DA79C4D659255AF260A7E63DCA829079554244B3CA82CFBEB4C19FB5BD6C69D97AF0F41854F418619706CC5E8F87A2B2E8D6C6AA7C8F800 -MD = EA9B3E3DC9D63551B6F870BE4BDE7215C291FD5EB94A778BE9D80858 - -Len = 1172 -Msg = 910BF093C0DED15736115D84AF3E44E8314B77C31D72BD72C4F4D0CD6C567ABEBB245C216A5DBD914AF09FCF09FF3CB1BF0D2F19BDE7B418891B02679A6EDB0D432E66D83B155E71A5F8FF881D54F03C568C501726176CA24E0CF3C80CBAE4FB55B2F8C8AD021C43D855072C4170E31D45AE6C2F1FA467C59D38DEF1948E9A3496DCA570DCF5BCE480C7B51D9233E7F928D920 -MD = 62920BCE56E2AF53EF48BB8FFBE50DC8634D338D08D847E16A603FE8 - -Len = 1173 -Msg = 6C2317F5B39417E3ADA7C71CE7A8D69DDD1E25B607B86B8BE099111D64D6DC7C4A2B7D9CF60A33AD7650C21C702C968204F92CBC3D2BC18FA0EC8DF49F0F4B880E5C4E144498DF0DA067C7AF37EED9A6540885823BD984957B2A0EA87DF8264EB4BB17B26C68A9F9734BFA6FF6EEDC6C5C8A6BB036FD4D7791455AA5569CFE6E643745252450877B62E2116808CF1CFD882758 -MD = 12CD2590C18E13C339349599E1E8F20F2F4A1D2CB3B49BBB7323EF64 - -Len = 1174 -Msg = 25D3A9228CC1232F8F65C1C95AF61637C115D4516464EBFA6795BF778C5BE311128F5F41D70465487A22C32D22F1D9BDCFFEA0547996207B913A6543516EE27694B7FA7FF182074E0C709339EC36781E3C91A724326FA5AB72F59032D4FAE15B6C4F512FC29EF0D078FF6010EABE0CA1F2B57E351FE5AE34C97AC09C81FAFAF251CB1D21F76C8C3FB16435C0B057C35F9E7B94 -MD = 15B887F1E54C5137A8365FD582C47AB7E5997311518BA021D762EA22 - -Len = 1175 -Msg = 53DEB99B91DAF23B4467DBE3B98FE9579D1A1766A235585D7CF6D65C10C844C6EEC0D59C43BEC7B3117A5E42DD35EADC84439F884349AB94FECF403C1944F25BFACEC73FED352C49D1D6D4CAEE5F0F58BA1D4E27388E87E2EB9C0152D0705DC22EAD4A8EEF13C2160C9795ACD51FFB73979D5C21AAAD813F0A9E1A9E6E0B13F6F4E7E5314250620BA1B80953EA80F8E821AE9A -MD = 068FE29596F164BF3CF886EB934405CD7E18F77D71AD3A9FDE999220 - -Len = 1176 -Msg = 7639B461FFF270B2455AC1D1AFCE782944AEA5E9087EB4A39EB96BB5C3BAAF0E868C8526D3404F9405E79E77BFAC5FFB89BF1957B523E17D341D7323C302EA7083872DD5E8705694ACDDA36D5A1B895AAA16ECA6104C82688532C8BFE1790B5DC9F4EC5FE95BAED37E1D287BE710431F1E5E8EE105BC42ED37D74B1E55984BF1C09FE6A1FA13EF3B96FAEAED6A2A1950A12153 -MD = 916501614891BD99400A8AEAABF69326FA98B833AED82386AB19E507 - -Len = 1177 -Msg = 9AFEA0868A1A5BDFC88B78BD641243C8152D8F9D1601A32815DEF06CD9EDB6139B0E0821F742BC203B6C3E550B80948FDDA65FCDFD427BDAF90E6F94716EC99E7844B261CC6F1FE737195E0DEA72EDFF6BA96992D59747BE0AEEA610B7F0FFABF12B86C4E17E5F79501B9F29668F8B2D7505410981229B445BABF8A2A5D1BF38C9D0F3668C6893C5AA55E13B3BAAC6C49F47B100 -MD = D1934348DD959D8D85DD8F65F51954727640FB9A7269AE756AAAE836 - -Len = 1178 -Msg = 5866E10C6B7ED7A1DCEB9362F737B4B2F51AD1747915CEA521DD190734DB6C58A69E9B807B6E91651A77FD1C018D1B9F237ACA44E861A8330D220A63EEDBC9ABACBE57B70850BC9E70EB95D3D2F611CE07603C394799997716D244FA8DB4B5B3E91178CF93A050D6F5AD5DEAEB039F4511593D533BE38A2B554B470A33C74D070B04592633D389FF6C7530577ECF0F572A31B280 -MD = 6CC90B8C25CD60842842B20ED0C7F029DE66A1010C720286CFA403DF - -Len = 1179 -Msg = DC5F38825ADF0C2ED13063D7A142494DE2FB8CFD78718CD87BEA1B17288D18FC6A914D6F2B6BDB7218DE003CBABD3F2B5C1248DCA7E221FC0B141203BD7C96AC3D6746155147363D5C75E4BB05D6AE03C0DC4B8CCEB689AF6CCEDBCA79F2FB901107C8F91CB146E57E79921097BCE553DEC9FA17AFC94F55CFEE76C4B9F8379B3E87857B874DEEEAA140F6DBF158CB5E42085360 -MD = B52868BD8B02FEE8F5B17B6834C74EDFB1B4DFD01C956954DE18FC94 - -Len = 1180 -Msg = 788BD86E95800633621BD3314977F9BFFD02E73D885AB580D1EF3DE480103FF2C449AD81B2CC15CAAF350D794E48DF3F64804B5DC5ACDA419EC34E95D50A6614EFCB4C6DA3267F26B75BFAC3C87CC0DC81C2683EAA9ECE7C3F5E7847ECF00FA1A9043AE5A90EE15F8B81083F38829933C8C75DF3F08075847F2B64F29B973BABB18592438F9A69E20BE11C084372895E91B837B0 -MD = D244951851CB9221944D91845D0BD6127D4F1067C4132036C782B2F4 - -Len = 1181 -Msg = 375B857529A24EFE7A78B2CA46E1A4295912CD7B739AEB1CBDA7BEFC901EB4FFD8BED49F3366E4E8C0EA1EE938F60E17D2D0D05F5100F288415CAC3F7E82FD30689E2CC692BE02CB3E34CFF7D3DE7975042E3C5C3F8AE348FF3402A6107583E57C8E038D25668D76E43772FD92E227D5C1E8330A929D342CDF8DEBE1D314C88EAED559A13461772B73CF39093216C57679943FD8 -MD = 5E4A61294C262D26DE57B40643DC74BF4870894194A1E471EAA1FB11 - -Len = 1182 -Msg = C40B66822F1F282D598F05CB2094EC4E69419FFDFE3833672A289B4ECF43EF408EF4862ABA90A81570E35E73EE4809E6A02CA9F6B14D96AC2C401045F2D5D86137051B4D3F5556961DBB96CB32CCFB38D215F826D00986037C6012EEA06B9FFD10170DF6E4E20D75A46C8F7A345B3C67917002276C73F717E4E61ED4329C3E03643E9D56FCB266498DC37A72A932F3A890FF1CB0 -MD = 6A8374920053EFE27566EE6354A8A9B5F2C6B43D65049B2A1A87490B - -Len = 1183 -Msg = 494342589E394B324577E17E59EC8EA27F4ABC8D0454EC70AF0BE40FECF638A278A290137220AE9F00A2CA70CACB85BDD4013823917DD9E4AC1B5E00521D3F385729AAAD85AEDE5B8BBCC9FD1F97AA614FA3176DB83D192CCF775BB5A3C51F9CC9E1E6639B3F58373BDF3F20CD2F7BF780336F4F5F12AC6F3AB01DD1A139D067FCFDEB184B291DE76C7D770D8EC122BFB4CF890C -MD = 6D96FBA0677729318E59CD39669949C9F1DD3F8D6FD11EC2B08129A3 - -Len = 1184 -Msg = EB6513FC61B30CFBA58D4D7E80F94D14589090CF1D80B1DF2E68088DC6104959BA0D583D585E9578AB0AEC0CF36C48435EB52ED9AB4BBCE7A5ABE679C97AE2DBE35E8CC1D45B06DDA3CF418665C57CBEE4BBB47FA4CAF78F4EE656FEC237FE4EEBBAFA206E1EF2BD0EE4AE71BD0E9B2F54F91DAADF1FEBFD7032381D636B733DCB3BF76FB14E23AFF1F68ED3DBCF75C9B99C6F26 -MD = 9C3759905E47E49CC7057C9237545D444F758535F991F7E8728F3A51 - -Len = 1185 -Msg = 826DBB35FA1752054063522EBD05A746B5AEC31C1B27031080BF56A79BDAF998065B5DB044FD6AF4E14A3AD246CFED7AF104E8ED2B63A696489D610DEAF6128A742D669FAA149CAD862F467D73E53793C1C8D6237839F5677D5CD3FA78816B41E640C62F9D593E7B94595CBB1DCF3AEAA0CB05A88F890AFF71F30C8629FD3AE3348CC7338B1743B9E5768DBAA8BDBE6446E5DC4600 -MD = D59A8EE9EC493F487EFF8C8A69CADE7D88DD3F6B3A4AB2735473FCBE - -Len = 1186 -Msg = EA5C8DFB574F00CC9CD3DB9A5D499C2F722A35257347A4A80B4C141ED02DDD7CEA584E1608144B6D579029730244ABC25DDE51EF19772376D2607A13ED513BA3E43D6ED7A99553D23EF2E0171538FEC263EFE422AFF4B723BCD0B85E3FDB07E2DEA2CB66C8F4F4C6D9138914E6ADD822E276879A122F75C14575FC77A7117F05E274A029ACD74F8DFAEC843DB2581CD778702BF8C0 -MD = 76C0E5A58CAAF9D18FD6984C1EB783E5D6D1ACA44CA90431BB773D35 - -Len = 1187 -Msg = 2EB70DA0700DDF3821FE877474EE9F5B8A516C8818F18D57E2DD3F85E537B4C47CDFF4944220BE5084212290B9EFB10D7099A12AC41DEE0C6D7DBB2FE376DC8EBA1A845D5DA62634E7C3C15DC2DD6C6F44BA4B82B73D7B58ABD41A35D2AEFEE2263155A7B60CF2454FE240FAC4F8BB75A0829098793554CD2617CD7B02307848100EB5CCE098520C167F42FF4F32CEBA6AD91B45C0 -MD = B432D480A2C17278A0E842700A64C1969C05BB182308ED83BFC481FB - -Len = 1188 -Msg = 1FB040B1196A11132472801DC17BAB0A09E0A85CB66DDC8F19415317B04A2B854E0C3F798AC6488C8FDB452C9A83E23FCFEC96C5CB99BD6D5FB53415B3A24CED6925B5092E75EC4A91809497C34E1634BD1F851DF04896869F105CAEA4B881FB1905113B67BDA4507CE676F45B65D89893E2C2FD9D883041A8F7AB576FC927A51C3BC97B18F87903E421A7D9A26CFB5C4BADE82DD0 -MD = 7189E21C155EB5AC44CDCF4389E83ABFC48042311A2FF480BA658034 - -Len = 1189 -Msg = 0AC19F7A5B5B5587B57EB2A3DD742020D6F25DB96E18D88B96E264C6C7CD95C39056C62E262075A89C2E9C7F95B7DA28BDE2EFD0AB61E08CC24905D3758C07EE9E044E08891041B3EE94DEF1CCAC41E213CF637289E859DCA3563F38A410EAE04B0256464DB8AECD6AE02C2F0750E241F825B4BC3D2746CCC41FC709ABC5403E6B8AD975ABD5086EC452D7E4EA8BEDEDFAB8057C20 -MD = FAFF8800E2B88D2CE69B4BC9D291ED1D3BCDFA69E2365F44C9430099 - -Len = 1190 -Msg = E5DBE6EF5D7C8260E18896A8118B42B75BF6891D7B79E784213C7385FC06DD68637A4ADDFD25374AF0122C04FA01DEC789B6BA08347EB226F985437D6EB855DA96EAEA2714373ECC6BD02BA3C77DBE2A6CFAB6FE6738C6DDE04A8D7D107CFC0EE87DD66B850F70D2C676AF4EB9ACB0C771A2EB9495F86C21F8B59847A53F8637863D0D29D5015F0129CDBA4819755F1339840C15D4 -MD = 42C8239D2B98CEB4F5C594B50905EA7FF02EF245A2F2C8E32CA2A60F - -Len = 1191 -Msg = 59CF21660C207C793EC978C2D02834BA9BF79A9F6B47164193BB3C45F7195B78485EE73640CBA87D563627E6F08CE6D621EDDA03063CF51810B56B1E03E6601545F5BA3FC80AE74F055441DEE6AC31B02363E7624734D89259B52D69108C2839DFBF4E64553D09F5F5A4EDA85D7B69F9E668F78156B06EA4C0002F33495CBB464808DF0F48F07D4AF65573889E3C10CE188F7015FC -MD = 0238A72C63A94DC70F6259AF8FA4305CFAD6B6390A7272CFCB6B2085 - -Len = 1192 -Msg = 1594D74BF5DDE444265D4C04DAD9721FF3E34CBF622DAF341FE16B96431F6C4DF1F760D34F296EB97D98D560AD5286FEC4DCE1724F20B54FD7DF51D4BF137ADD656C80546FB1BF516D62EE82BAA992910EF4CC18B70F3F8698276FCFB44E0EC546C2C39CFD8EE91034FF9303058B4252462F86C823EB15BF481E6B79CC3A02218595B3658E8B37382BD5048EAED5FD02C37944E73B -MD = 733ACDF9CED47F2E43936ED6C2AC0F824F4F5B5D2942522D4DE5F6FC - -Len = 1193 -Msg = 880D1E3AD14193B4F50EEEF144EE2B95FD817D157521EA14512CDCE43B1E498C0F3DA6906B3152668B79E542732D3424AD8AA392FB1D951D88AFEF7BB419E9E6630F8543E089D44F8397E420A0EC1F439AC2B1353C4B811D752E3B9D47C2220FE490ED4B2E78F63E8B05758417AC89B62CE2776156AA316C07414BF840B61D2AC875C23D313354FDCF2AC13F48F18BE75804E42E2F80 -MD = 7426C79F7341F3A122223B9A9D0775CBC20CF21CDE39722019C1E795 - -Len = 1194 -Msg = 90486823C70519411AF34F204AC4138D7B6915C43D1A0910955E0DAABA761C55E1AD5F75B2A834DC90558B112BF80D24B9969DD22D1FAA4553F94AADFF5281214F3B41D2E8190F83C4B15B1545766B78C73DAAF920D06194456D3069DEAC4344C176753F5E6A7DB6955CA6837123DC12CD19D0D46DD3DEE721199AFD8CA7BE9D8A08A85E5E97F720A82C6BAE20A6666322820A466A00 -MD = D280CF7BC3D1BD454C9AA67A1E5DD7387FF6B54CA4D2F96500508B9B - -Len = 1195 -Msg = 1554706EED3D3C4BFF57E5ECE7E346FDBCBFEA1369C8819813AC26F9CBB9EFA54000343E9FC91A1751B4E5017397936F63229AE21FAAA04049E3EE32808B31EF53818C893D67248835D9A9BE4F7A72466423A1378666D95769203303F2933452E302DFCB870A642118B37BA723F88E28804AC1E39DC81FA98F6E2D150FBB5B05FD19F527F4B601918255BEDB7ECAAF71D83B5002EAA0 -MD = F1C49B7E28713876ACB9F1AA46BF1DED7CC3EFEB310D1887B297C134 - -Len = 1196 -Msg = 700516F8246D73E28CB79EB2AC2F806A67DEBD5CBC438F9B58FB02B85E6667C3E96ACF02168F83CCA0AB4560FA6A31A10DCF638B2AAE4D0EB9DFEBA4EB723D574005659B72D3596BEA991809290C612D90BA4448A8D413E2B8B07F41E9AAB65761366D7A19C97E3ECA66496B16A5556989093937CB365B029FF0DECFF7C74E26810D7E00CB4EE35D965F19F70046FC5A062386C0E820 -MD = 850015BD762420BA4C2E126AEAF4F6717909CFE88E53A331D4039B97 - -Len = 1197 -Msg = B3151A083EF4ED82D6FF662D632D3A15CE93EDE988CD7E31EF91E2944DAC669BBD8D4EDF28B07C0809A9D7965AC023E143A9D8B66C8442A51283F69E7684000B8C8CB3CA12891E3B8AD8CE342514F5671FFF3506D937D734505D1B7E4557CB69B83D76F15806C56E6696ADF027C497BD7E30C19B92E2F5E4536808917986E59FEA339DB1B19186495DEC650DB7B85EAE5925AAC57158 -MD = 28660BCC1C69DE3D3513BF942B130B79C83E285374261714DD9844C6 - -Len = 1198 -Msg = 2BE9BF5794E6A8EF2BA1EB5DA245610577FEDB653B12EAF68DB8FCD5AC2FC0495475912D5F5D83E81B51098F9A7FBE1E2B4B8D5370EB64FA98B73147C0DB53C74D508BF0BF96C0DF5C6F765C94E4DD1A00DE2D3F86A6A67B2EAFCC31E97A0B57A5D068E62C59D5CC2459DFF4B5F385E8D360918E8FE7C61E0B54369A7DAE211BAD3E0A6DE8D798399A45886D2A1F14433A20C46B640C -MD = DA93745C9C72FEC1F3868D01FE6D503183749062CDEF6DF14FCDCEF8 - -Len = 1199 -Msg = 513DBFF1209835CD5C01E7FF2A85F1CD70A37CEF3D61897F88C25B40D448D7F4A14DE631A2B44E366238CD1637DEA9EA0437B78693AF5F1E37ABD61BEB9A6F302FC0958976D7E35508D79052C6CB37CD0EFF35031DCEB6D9C0E6E8321B2A79BDF5C97F1AD9EC9EDC27C359B0396A3FF4A276A8C3B6526599C90CBEF761FFBB4722CA389597F69E9A67BCF5403649252A857B56BF6C12 -MD = 2FF0B4D144AFB69C577C1D26B230C43CC0DCB4534DED14D283176EAA - -Len = 1200 -Msg = 4CFA1278903026F66FEDD41374558BE1B585D03C5C55DAC94361DF286D4BD39C7CB8037ED3B267B07C346626449D0CC5B0DD2CF221F7E4C3449A4BE99985D2D5E67BFF2923357DDEAB5ABCB4619F3A3A57B2CF928A022EB27676C6CF805689004FCA4D41EA6C2D0A4789C7605F7BB838DD883B3AD3E6027E775BCF262881428099C7FFF95B14C095EA130E0B9938A5E22FC52650F591 -MD = 530438B7A86B16434C82713EF7392D25C5CF814C7C6408368C4F2EAF - -Len = 1201 -Msg = 0409C9EB80912B2931EEEE3255E452201EFC972E6427EA1C9FD8DB51DECBDAD5145B0EF578EECD56ED3D9026F65705B30ECBDB27B32866ED5F6205E72899BD9FDC76A81F4613C4ACCEE9D0B19CCCAC6EC99C93A0F337BC2B9FFBA0EF5C2858CA503F5B4D2974AA0DEBB407F5E01D707DE7CBB96AB993672FDBE46C6DC462A1BD38B853B9038B45A9023D14585CD3F21F761A5329930000 -MD = 9414A10E229CC078EC02D02FEB907771CA284A4328B92AD2F998DAE4 - -Len = 1202 -Msg = E4C0456940913E4F1D513208BBFA725EABA66714F89D4830D0B1D3EC3EAD6944A533F661AF7F37145C5550EAF106A6E5EF75647EC078C48DAB5579A71C3F1394847B329951806F160EB4CCDBA77033F21665ED9A6CD872B207F83CF006F5DADBA8A2FF05CF7576648F87E32C3B3DECA8539F65CBF65663D761C3F6C03EA66C2F60FC18EF7C5200B173E9D136A16066A9022465AE02B440 -MD = 93AE8A1361C5227800B7336A579D087A6C6ADB6F218984851DC47724 - -Len = 1203 -Msg = CF2B1D3749F0FCFE15667C2180E01A3090C60387B864522F06C8C6754F2655359FBDB91AE7EDEA95009470FED761B30641DD3B98390EF85B4B8BCC927D63DFB80DB643534B65862AC148DCDC95162D707022510F9996689AAA1B4B50C6A8867A74B11D00B2517FC81D96E8D1BF24CF0ECA862CAC750059AA7BA1B81ACE44DA18287DE4D7AC0386917F3570BC2C4E3ACB6F233C85406EC0 -MD = B3D21DA634CA36D96C848159AF16A52F4C373FF77F9F1A32219E31B6 - -Len = 1204 -Msg = 78D24A6EC44983D0836B45520E6218A0B017F82547E8EE1EB61C8F9D6C5AA5A0ABB6B0635320B9DFD2EF8C4B3523AD4AEE16B24F17A069B6A477F2797FCEDC02AA9499E4EA579CEC79510288C11FABB4D1625EB84BBF4A20DD65C9D406E7309C3D897F83CCAE2BE9FAFF2E2303A86AB75E424425A339D2C6E2846D64BAFCB9905F84477132858D0C03F5F546F6D30D108253AC76B64880 -MD = 927D4FB33D5A4104C9CDDA7252B289962DD4FF53ABE101495F324B4A - -Len = 1205 -Msg = 8D1B3A5DD6AF7423E91EC02A68D19A902166B12968BA6A9B3C2C86CE746161B434DD2EC00607563061DC04EDA5646DD5AA49B1DA5CC7EA2BFA64E6832939EB1E70B61D2E0A44A519E9C6469E7F9C0C3C65A819F306273DBE1022946675E476A604FB08A1A0FD9DAB905134FAD2F26E732A69FCD7DB11A1ED353E24841C400B0A4AD734A8744B024735E8F98A9F7FF39A0006A1B3F1BF10 -MD = 946DBB0BD396B3D979023AE63468C7BBD532853D449F34EEDCB2DB71 - -Len = 1206 -Msg = 91544241F70505C5295091A16575C6E00E55CD65D205CADC8EFEDAB50398B8CB34BEC20FE7A5E4D31C79731405DAA46879B52200B8B2B114B22FAF7B7B9C3BA530D76BFC9EE733CEAF49E4A14DFF39872019FF7A1196D8333076BEF518B6410F764F60F413BE7969F56D85972B6C5B689E9400038211C3238ABDB2A32AF962EB2FC8E28355F594F091B5675BA0F6B042F83D6BE7876234 -MD = B0167231EEA8CF8CE33AF22001A081C83131967670E3046D17A88C47 - -Len = 1207 -Msg = 56E0C89263D8B0EAFAD6AF1035860FC6C542B1B7B9B9B434D29A3A125307C85C882DE03ED68BBC937A6340970933C89271846416042640AA90F77C9C8F670FB4123D9B628799FEF18C87AB4F914B2419DACAB45D2E0FDC686D48171EBBF17CA4DC28A7548C0836B996F6C387631AA413117DEAE5A1D380B94DE2686E61476E230B2ACD642FECA0D769482E30170888981505E9FE8CD8BA -MD = 71F506FDB2FF96012A106A27C7F94BBA326C34FF7F0477795AC512B5 - -Len = 1208 -Msg = D3E65CB92CFA79662F6AF493D696A07CCF32AAADCCEFF06E73E8D9F6F909209E66715D6E978788C49EFB9087B170ECF3AA86D2D4D1A065AE0EFC8924F365D676B3CB9E2BEC918FD96D0B43DEE83727C9A93BF56CA2B2E59ADBA85696546A815067FC7A78039629D4948D157E7B0D826D1BF8E81237BAB7321312FDAA4D521744F988DB6FDF04549D0FDCA393D639C729AF716E9C8BBA48 -MD = 84944EB018F8A124E3C969C037464EE32BACF8E58901D2E22291DF9A - -Len = 1209 -Msg = 558AA1969870FA3F59EE259B5797358ED42E6B3F7E7548FB4C7985461EA9E3A65BC021FC95626DD462FF2F99BB5A6A8E19AA27AEB184F41630E67D3265688857C61AC58B205406BFA6F02C6D6463C33598F824F0387C86797D8AA9EAB639B6A77B7076B52EB5398C8F31155A6A1BBDAF2DEA857C798E8F9B3168CCCAAAD4EA37C5AED9BD9E3B94042C94963C5064F572B163B6A8A6CFDE80 -MD = 2A2CD39E4310BAF856453D7E40D374161085ABD715D649CC59462562 - -Len = 1210 -Msg = B25A91F9A28E69447149BE857CE03282351517AF22F6512F7EE3B00B161125EE2673840D5765E9AAF2098732E7D9780C31452872AB6CDD658C5F2D8A7529D0E622394C26A03B11F45D15DB0FAFF43107B1B750B822E0433CA634354EF8782216ABB666D187BA1486CC3CC923F4A270300886B4CC3FE3E4507ACDC605EE440733F786852054662E43811CD1B77D97E6829C3D7AA9084F0CC0 -MD = 18013910E6C51EBA897887E31B824F2A84AE6713EBA5ADF142B78BD8 - -Len = 1211 -Msg = D5BC5EA66BFF1C5573168AB9E814082331157B8B885C9E4976088A7CCD342186CFD88499887DB0144A9743F13B5F4C402C18A6B060DD8DF0101E1C11482E109AFC78C0C6352F7D4AE47009A3DFD2AC5B3C6E08CD253D717253FB89F94E98DF386FB09333A1F4E3BE1792ECAC7C2CAB28B447ED0363A5EC84BC1E26A2AA7F3C5208E0C0015125155C63A4AF5787437D7CEF410CDB393A2FE0 -MD = C637FA7B424797AD16F8E5C1D24B696C8E0A4A00E3E19FF5AD5EA5D0 - -Len = 1212 -Msg = 7B32C25404B828B7975B85A7F8E808CAA26E48DCE8E28C5CD0D98A29D3FB1E34D09914421C693BA70EEA3CB5C79F8842B8EB70DF6548B223B14680E31566C6C126F53EE77A0C5A4FE46A6DD6E81E1281E39F5CE580204702728509A3207AB6D316712D355125F8310026321D2E0E318B58C6E6E49CCDC867BD908803FF4AE066A9AF402FDEAA1006B100679A4F68145588C21E9D569C5B80 -MD = EC44CBB97186FFB016BB1E77B92730DF284E260319A13F2557A1E306 - -Len = 1213 -Msg = FFD56A3A7BFBCBB58E076EC15B32FDC6515E6A3CC797671D8291C7F9905D5CBED34607D713D1FACCE5CF240F4B0CEE151A43CB96FF832686832E28FE24B603D95FFB82D757B2AC496C80FDDA8E5701DAC77F597DE05D9D74008652CC06E5A724B3D279A43CAB626EAFA8732B446CBB24C2A574EB6DB20C736678B65B71FD0BECA4004C0F6BF8E656E754CED34295FF3B2977DBF083301050 -MD = DE1EFD1C21420AAF1EF7A924AE7A95617041E246D900767F6E38AFB4 - -Len = 1214 -Msg = C8ECC9C02A54BCD934F3AA9416D4C8539BFC445C20CA833678394503C6B87091B8B51185859DE712FD9CF8EF6DC4237811312F1BCB9276D88B256CABCF2BE94A04B91FFE528B3CE13E68748C16D9370A228ADC895832FAB7C425E3D75A6B1901DE47993CD484AAB82EA902C6332B5888BFBB60415F4A0B05748EA088212D8964228A5C1899CA4F8C8F21C1236FA118B68B5287AA0A9D8F04 -MD = C6CBC473B41F9D427D2855FB4B9E0A46AFF5B888A946EEAEFCF9EC5F - -Len = 1215 -Msg = 625AF287E043C8F40C535BA8495B07A4F20310AD069F1C1A1698E2FC2682DE1294F7290C5BB7C4CA4397CFB9380ECDA6FAEAA39230513A145646BA120D95E816CCE3D13F5C9E6F667B2C17CA6D20E29DDEDBD74BB7051F3F61826A7554D537A26261D0B5759C615530D36139863811429ED257F8D85F30BCAF67D10B9C926C398DBEDDA79C0F7C858BC1C6FE4EF20DD3580A1419F4414834 -MD = FDEB88EDEDF14EB38B1E68770DEF0CA506F84F236E2E1370557AAC1B - -Len = 1216 -Msg = 842CC583504539622D7F71E7E31863A2B885C56A0BA62DB4C2A3F2FD12E79660DC7205CA29A0DC0A87DB4DC62EE47A41DB36B9DDB3293B9AC4BAAE7DF5C6E7201E17F717AB56E12CAD476BE49608AD2D50309E7D48D2D8DE4FA58AC3CFEAFEEE48C0A9EEC88498E3EFC51F54D300D828DDDCCB9D0B06DD021A29CF5CB5B2506915BEB8A11998B8B886E0F9B7A80E97D91A7D01270F9A7717 -MD = 1311DA757C405F2A0EAB110B0C515F05FCD59F5495A9704252DA5AB8 - -Len = 1217 -Msg = EE795C10211EA9D303C7C8333C6CDE90E606A65C1D5D73C4A26645EF592950FA96B2A666F360A3C56C3C00584DC2BCFAE83E35B738DBB63C65EE199D44EAE8D82654007F9387327378678A82B649EFC8E44EAB65DAD64F4087BBE76BB90060B161B9826B7AD0ADF81F503BBB964AF705F1376DFAE246DC5C4B4995BC2AFB4DC5E43FE44BDF5B66B949AC499E615BFB04A0DDAF25D6A0702300 -MD = B439CD81BDDBBF774EB393E3032D8B44ABEDF95287AB97DBE6FFBF8B - -Len = 1218 -Msg = CFCE57319D4C68132C9491522458BAA42493219C4E61CEEE5248F6DF0A65CA2D82C846BAFA01628DEC4A07911F1C71C4DCE7AC66AD005A8D973D3E8D646C9EAA47FC8FBE0899FE69A43BC20DFDD262756B7A703DC6D1A271B544D7E8EF077C3EDDBD0784FAC5B7AA197F25E8A83E1A507D0A893E24FE2AD4EFAD28F65C8682EA423223ABA8E04E48EAE78BE0F70FF0F0C44749AA4972A4F1C0 -MD = 97144D87B345BB49C6266DE7A6E7DC4A4EF54EF516B5668B6458B4DD - -Len = 1219 -Msg = 91B24F53E90CDC482054BAD312C5126F80154C3AE92C1680A0807B2592EE95AF75C2105FE437C3F70F6B6B06F98AEAEA13E572FFD42024E748D1BEF6044A54D7D057303AAB3D5B940D2DEA3C405E667484334A628F94312086D72E3744A75EC43B645879D45917E7C587A27573B63BC2318E080767808BAD0286F1EF1B41192667037DAC968D784B09DD6342B31CAD52E936E65B8F3DC097A0 -MD = EA8EDFA69901AAF5FB87374AACEECEEAFA33180374D0BF5979B5D632 - -Len = 1220 -Msg = 77E951D75C4B0CAA1BD37CD917B05E25F17259FD831CA35166350425844422C59B85C34E40262A01EDA5EC99F4D0E1BA62D371284CFF46FD1ED5152C3AA612F279CF48095157FF8CD0A8951CA8C4B56DE177BC493FA3601976184D05F2D34CDCFC9F230DB5ACA5CAC3CCD60A05E67FE1FCD9D23930F1D4708697B2B226CAAA3E4B89C97EF142F17D56A2F417207BC51F4F30245624A1647900 -MD = A7D8B12E8657788062C43C76E19EC0CAC69D808F8B95861ABE6768AC - -Len = 1221 -Msg = 78E4FD46027326BB88D6C727711089A2A4643BE28267B6BC224EB4105B4BE07B73E28A2A97C02F17980F296B1494BFA51158D4DA1DAC27569B7598D8B11A10E040497A87E892EE035826CF948CDD957CF23EE17E88228849E00E8839B2D2DEA60C3E2CC0C7AFBA8EF335E9B8A0610EC25A452533D1F3AEF251166CA8D384E440EA616BC416706C0FF8D6613B89D62C6E5BAE80078A6E528168 -MD = BC46D5BA361153E682508CC7145AD66212711D940DBF3F56B468C172 - -Len = 1222 -Msg = 49A1E08F3F4B954DB2998AE9F6B6E48A5E0CF52CC402CBC34A5472A5FA7A5C16C2818EEA453408514394F390DD5889D58FA6AD8CAF373F48F58E7FDCD1A769BDC47B24D8500CF72488D93453ABB336A82D689F0B983600B80623AE818B00108A1CD4A615C9648E1A2D095DC544563E19071F7C4FA13E01379B67A723E58B6CC9620F2D93CF7D6B25F4346E3932E8322847610E718A41F3EAE4 -MD = E7AA553AC001ABB30BB08F921D5092C89DD2BBF352C6E1E39A969838 - -Len = 1223 -Msg = 54C62479E70B5E674958039D5B0A720C878A69C9197A905B0445C8241F256DD80F146545F4A97F8C3C3CA4D9AD5F27E2704A98822CBCAF9A1F3D32B8570406C9D9CE13ED2D78FDB5C2827A4BA9DE242AC09C26DB0AA135B06FC7506E3B9AB45958059F151919A99B3E36F7E4331D7620D6E720A9A20042128CF47EBC231372EB9A1B7C7C16B268F375447DE1F094836CB12C1EEF00100A14C8 -MD = D341D69DB04B7B32139B8141E607F1119E88A366E712DEE8C35855E5 - -Len = 1224 -Msg = 6C4B0A0719573E57248661E98FEBE326571F9A1CA813D3638531AE28B4860F23C3A3A8AC1C250034A660E2D71E16D3ACC4BF9CE215C6F15B1C0FC7E77D3D27157E66DA9CEEC9258F8F2BF9E02B4AC93793DD6E29E307EDE3695A0DF63CBDC0FC66FB770813EB149CA2A916911BEE4902C47C7802E69E405FE3C04CEB5522792A5503FA829F707272226621F7C488A7698C0D69AA561BE9F378 -MD = B5FDAEAD7E68333CEDB5D4AD636AE7059EB31305E2C831787FD51265 - -Len = 1225 -Msg = 0944B0500C2FD3F0ACD0B0623EDA2E763BD95483CA40A44015BC0689F840AA97873AAEF58FF7CA01B0BEBFA789D301D3BF25AF39D32F198AC941BFC93C2051E1F2A38389AA26C7B04CB76D7B23361232587F923E630F27DFC7AE0E9FA8ADF10FD7D022200FCEE5847148003CC7144119DB20D0E2AA6564F261CF78F1B9F79CFB3DC8A9867BBC7FF49D719F493686006F2060B93D8B3DF679F900 -MD = 778AEC34E973E6BD88834A7A942E3E403B2F5A06BE4C54971A202E56 - -Len = 1226 -Msg = 07CE3EBDE3C2F23BC7CAA9D38E5312961A470F9375EC3DF44809853D47862A2332D0BC4F29B267CE3FDCA659720BDFB84713BE1B2F7387D679E3A8AC8A12837E8003E9EADEDFD3E29AEF2150594604F507CA276A9DC5EB3EE8EB74B511787EE2862AC0976588106273795CC6F41596ABA09B9C59382DAB0398E95F75193BE0B14A7E45C88CA9B8186C9B0F0485A4DD9B4FFC361EB28D34EC1E80 -MD = 25DF037029B42F1A9F8EAE0D05DADBA8B9A3DC023B56246A04FB1DE1 - -Len = 1227 -Msg = A12682794B203ADAAC278FF0FDDBA860CACEC00C1CE9A1D4577E3D7EEF99B291E306189DCDA797C45D643C1E9542AB0A16C9369286A1FDB6AC4D5C1C213973F95A468DF114BC7FAD9EF3118CBB8312E4685FB6B46ADF1AEA568AFC69BF805FA48B9D25064A98F3C2961ADEE697250FFA4FBBAC491D698CD46BEF3E7995E3416C405F75062D739631E901670BB3400BBCA014FD22700919780C20 -MD = DA7D39A5ED0FE9D503DC1109FF39DEAA79AF65F356A1577C11C441E7 - -Len = 1228 -Msg = 6FE5239D775677E62348DC46DC379F70CA024DE4A4744D1D6070F6A90F26F1E1720D0A9FB31668E41C8CF350B7EFFA2DA0CD1DDDFC8203011A80CD325259FD47E8E2CE329284D54639C73F1AADA1E034F291505D672B979C94A08022EC15FE2241C687B8E2694B4F108A39E1DD672F9503E3A3A99B95DC87B8BF74A95B332201A916CBDEB8182D3D60E6E482FF04A3EA05DF548595D487CBCCA0 -MD = BEC6A3447A42918721D94CD659B15E2D79640237DC6720D3B2EC5A50 - -Len = 1229 -Msg = B063F65D94AEA4383850A817286586F22CE3EB09C7EDD293EE8146BB8B2706E0F1BEA7784B708D6CA004B28ED7BC4E3E432A76A4A644BEA920C6EBBDABE3333C083EB682878D7C07643FFEF6E50357DAC346B2106DBA30E1288A1886D01A7F3D2BC970ADC5AD33C5C86212544F692D4C56C83F448836D79B9882E7F85DB38AA3E07AD0399F0152A08A08B6EB4E5CDF21851C8A7C73065B068140 -MD = 8F9BC1B5DCB483DDF26FDDC8D628E2D9DE585D3A97163905D97563D8 - -Len = 1230 -Msg = 48A2ACD9C115E1AEC54BEE539F842ADC43170FF60E003272E9E471135514A50F855094BEEF742A175835BF1102B747BDEFB149EC234D81F2BECDC17C079ABF874C3CBC4741E6115F34831BCAA7D4D954EAEF78C04C640EDE7931B1AC63BF8F665CD4724886487FE13F68097583461B58E88EBBE815F141BFD3C7BAC974D462976234D3706884C663A9ABD6FF86C046281446AA07317F36CF7DAC -MD = D773591E2A3749159EBFDA5C4B9D8F0AD3D1F40193B917338CB9C19F - -Len = 1231 -Msg = C6810F0B8436125C00646A67D9AD7F1689821E3B0F02BCB47A3DCD2DCC292CCA93170951FFA4BA6CD0A533C5889BE768CC82FAB0AA7433AD928073894D1EB21DA667F49020E3EECD26234FC5EA28665BACCBA515C40071CCE0C139281D8A5AE4D91482C259C15FAA9794E699880E9D48FA06C71968B2CD34448495AEF6C55506EC96E71E6326823C0EA399060043B0D5BA74AE64B6F14797199A -MD = 7A029CB73B624A4DDE2ED5496241B006349973DB415D4C9CF049B201 - -Len = 1232 -Msg = 51B7DBB7CE2FFEB427A91CCFE5218FD40F9E0B7E24756D4C47CD55606008BDC27D16400933906FD9F30EFFDD4880022D081155342AF3FB6CD53672AB7FB5B3A3BCBE47BE1FD3A2278CAE8A5FD61C1433F7D350675DD21803746CADCA574130F01200024C6340AB0CC2CF74F2234669F34E9009EF2EB94823D62B31407F4BA46F1A1EEC41641E84D77727B59E746B8A671BEF936F05BE820759FA -MD = 2919FD6C376AEC9F502893A9970B9AC6591855227C0E137BE01705AC - -Len = 1233 -Msg = 5CEC4FED86E4B4355F1DB08D3BCF6C9E2BF3624935F49F69BFBF10FE95121BD62AE073AD191722DDE7F015C3C19F9D3AF6FFE2D767CF0A0EB9FDB244167182D7ED6831319D4984400EEA1DCA41CE0D27D85420A59C68C54EBDAA9AF331FD4B7C1B8C118C2BCB2D963643580240653522A1A1E42FD8D941C886FB3BD8877803FB959F2A851E9834192C4B93A64F2DF5E268EBC12CDF8E5C0EEE9200 -MD = E6F5B526BA93FEE70A0B9F78A5F7A8D986FBA1A84E32CE064607CCD9 - -Len = 1234 -Msg = F1A47FCAE4AF23100EAC7E8CB58A24A00E61B1E668E86EB3391FB1D369E5EEEC2759F39AAF9F2A10EBAE83970E75007F8625B3FC95B9D38E927D5AFC55186F3921E93727E4C38E1535ACCED7F697926AB2221D3B0873667F9DF870F4A6F376EE5E75C0A5DA919FD4EE923A488B7F6A20BE349A06DD19B4C7327ED57A7168129732A3BADAB7A3DF08A186E677838FF49B7E7BE57270F8FDD12EF4C0 -MD = FACF7A512DFE78B3D9D984C27A1AF181419D5865B392EF07DC1D3850 - -Len = 1235 -Msg = 9C9BC5FF6E2A46A6DAE4D51E6FB46CBEBFB3E308F00F6BDA289E88FAC4CE4CB51ECB8C9685450226B8AB2B5E567BF49B3D04397AFA383A08185FA86F55DB6FB88ED8467A4BA95F69ACE83C955BAF5E616B1DFC73CE2EF6D5B696AEE81C9D742A8F9699704FAE2FD370740640A822FD2DFDE1C7E156D6D4B9E6AC6EA2F3546ABD60F0841BD49EAA8B8D26CEF0DF273171EC9F20D2E1FFFBE0E9EB00 -MD = A0CD43AE8B9F7E2322DC28581D3EADFCED31E5101EF265914628F100 - -Len = 1236 -Msg = 6BC7AFFE4C66FA084508F7343E698EAE4A74EFE0A4E8FEB2F83AD82C01ABB999D07F6F3082480743D309841E4AC44BEDB69CBC6A082505BCA690BFE52BB67FD9D6CF5C37D981BF8CE5E6B0B7429B4518094DA9604BCC39775D63CB49E2B50C35D12D78C5717142710AA48C7DC4190B2D4C18FE53ED42B9DA9FA71E9700A9BE0B6041733E17313C00FC309655EF4476421E4061F59EB15A70C4FC40 -MD = 174DC4919D2E2C7A61BD9E5B4E7A0A1254CF76DCC932E6815033EF6C - -Len = 1237 -Msg = 29354E6F76ACA48E55F1B5D3169F02B066277DCFCD00230340F400056852F7AA53DDB2B6329325643F40A5E7AFC06F66D7AE2B2A08F8F142A929D0D21AB8636BFB32528EB928966798EAD25140A6B3FA2DF9024125A013189FC79B43F2C4448BCEC44C6029EA4CD4F758F23515E4FB327367069BCF55515283087F32BAE0A8C5B8F577AF52FEF9E084453CA629DAED5A36454B0BAAFEF0C15CF7A0 -MD = 4702E75E48AA18953CDA95FDFB8C94CBA7EBFE4174F45BED88036D6A - -Len = 1238 -Msg = 626F397D0260EAB42C6EF7098A132C01F266B7BF8B931B7DC9B386801DD1F56271B0B45E1C36B7A69C29F53B05827944DECE0D4BF50084FE753A1C471F4C895905FBC35829196B9539A4C395F5F819D37A248AA3C1BC4F42BA4C3B09A5BE323BCDDB0A14E7AFFC2E2E039D69266515727001D97E585155B6B1C5A94B9A1CFBD9B762B38DAFBD956125B9A0FAF437241EDA5349C2D3266DDD1E796C -MD = DC2B99CF1F2DBB8BA89C28D35F829BE2A3709EE395EFD5C724096BD2 - -Len = 1239 -Msg = C8356DFF2E7F57914AAB911BC03DD06FB3A90EC2D10CFD003A28FF8673230ED6B972FEBA869E4F7DBA1F07153582751FBD62D3B7D99236A09A5F0BA4252E35CDCBF87D6B36D40EFDF3EC5A5AFE70014717F2F730C1C4E516908387FECC704E2F17C8E88F58FB4B1D51A17CE63D45CDEC2AFC6F2CD645D63DE0C5D62AC280A75881B00E76E72C43D40840A91AF569398BDAB704ABD85F1DE2C10C76 -MD = DF19B690397896D39F9DB5463CB96FD7E08DFE7BC6BB202410C56342 - -Len = 1240 -Msg = 83599D93F5561E821BD01A472386BC2FF4EFBD4AED60D5821E84AAE74D8071029810F5E286F8F17651CD27DA07B1EB4382F754CD1C95268783AD09220F5502840370D494BEB17124220F6AFCE91EC8A0F55231F9652433E5CE3489B727716CF4AEBA7DCDA20CD29AA9A859201253F948DD94395ABA9E3852BD1D60DDA7AE5DC045B283DA006E1CBAD83CC13292A315DB5553305C628DD091146597 -MD = 8910E7ABC3DAA506974EC13E35C43133EBFA91DEEC99BFAD4954447E - -Len = 1241 -Msg = DC77D6CC04036F3EADEC0A3F2DB83F877CF24A2AA319A804C018840956F50B3830B8900428BE0505AE0089466A22845952CF8F4192333ECA1F4243434012DC5B833DC514ADA93CCE39AF280C961746E3DE14E5B1AC280911C31498796728DF1CAAD96C4B0C9D907773AF7C86A6A5804B40AB86697FC4BE83E0CB386D14BB872A9276203256285902DB42B05F71050ABC71ADE1E06D37F4950CEF3B00 -MD = 8CF380C23E1901495EA4D2CB962F958CB8A9AA1B9E6B230C2497BE22 - -Len = 1242 -Msg = D57982D9B0D4B3D9B18117EC323DC1F654ADD71AB06440C77C49E05F110F82AB974B5C22637F6A1BFA579B78DA05A17D5CCDBC2EF464970414779448545EF2410EDBAB5D93FB8E85C6C15C4D5C4182E13A07C8B1CB016A41298E6D6512DB94606F8C843A1F611824BCBBB0461B161B0AE0D6D5B9B80720E10103FB5F2DAA3BC7A16CA73C36234F72C8A5F7441D86DAC1AC3436743C8CF817570C7640 -MD = 306D7517A11B11708D03572EEF9CEB28AF9779CAAE809D6C28F07FA3 - -Len = 1243 -Msg = 162F77C5AEB35AEF23D128AD0AC9685C204176A0893FD8BB45274B35C2D7C9CA4ED1773632C9B2720B751E73ADF5FCB331B9DC4517805457D1C22E59AB1FA4A26FFC5F4A22BA0B1B1D12A047FA81CEFBFEB9EF20300ADF43DFAA4CDC468F17E89179CDB442AB24A61BB693E6EAE09073FD410E7D0DC3553CD8B3EE4212EE3C9F90627A35217EE3A8B0505D688B574CD65B7198101ECC065E3991A520 -MD = E001A09605CCF079D3BE5D19B21A8EA012C08A266754BCC4486D86F8 - -Len = 1244 -Msg = 099E4A3C983332023A43028E13F12E85DEEE45A88E8BBB4916729029F86BE3291475178DF24726684F3BCDD166E8214B9342FF80305707F72BDB86005116B9741A8D4F2AA953BAA0294A1759654D24C32C311D0D81F077B9086BBEE226A93E9B906553E32CED52BB92B427840421A5B711CEC2A2D07C1CFEDADE4DD8CE5509039816EB54B5210A45B088E4975E99544B22E2A59F43E767F33B5B05F0 -MD = 791DB5464BD9486AE903B06CD3EE186FADAF9F48EAAF17A16D471A7C - -Len = 1245 -Msg = 7B9B005E94027DC151F29B0836D4F2E3716E11EC9E1B0875DA9581F3BFF5F412E22AE3D790281F547550BFA6EA2188A976CBCA567C5A5327DE7BDB4229D48C253B0650C3B518E5ABEFA5E1F7E079D38BF18F1A13500105F4D96C4A29002203D18047568FEA183ADBA3C1D06576AB73FE88CE704495204B7B31D40A0C6D09AA6CF65310DCA730A5488DDB0D5EBEB7583D75A75480C0B06C0EB1C48CB0 -MD = BC07D8A370C3992208FCBDD31D3D1052F395065A6BC05CCAD6814B48 - -Len = 1246 -Msg = 50FCF726597FCF26CDE79CD42D68C338E7E26299D0AE41EB2B87F417409F65C0FAEBDC4C95D52AD3777E774E8BF982C7DB1B3CC1B43BB1298463BFFD061A5DE2162DB8610C747D41E71BC4A49414205B56B1D86FBB81E74039DDA4FBD84316E2BBF7C9F2599D340A2E86CEE58BFEE5D34A684F1858822BEE5F73193DF8C46303D949FA8E962789699C15709C74D702FC96C5A3B82982370788A74BF4 -MD = 890B6BFE8F00F5F75C4CC8FF27E8C777CB0A537174850B4D5DCB7C02 - -Len = 1247 -Msg = 6BBBF4930A96E1A18417FE5A539A36AA9A3F70E055E359091E5ACBCBDACED975DF2BD07B770899C1888EA4623E70CBC0D9CB398EA1FD9BC950F047EDFD478324DB645F7A90F81EA98E38E93A1326558EFA8813FDE52DD073998046A3AA2AE3CC39EECA6012DA5AA8CFF1A4F3E59068EC163C75EB56EEE8838E0E2E03FCA370E54F3ACA668DC5F77677645B7915A52C788EBCC9B731F91CD9A0990834 -MD = 3EE6406FA3080E0D34B6597999850F36E2A4444CFAA4F27AB2A294A0 - -Len = 1248 -Msg = 2BE9BF526C9D5A75D565DD11EF63B979D068659C7F026C08BEA4AF161D85A462D80E45040E91F4165C074C43AC661380311A8CBED59CC8E4C4518E80CD2C78AB1CABF66BFF83EAB3A80148550307310950D034A6286C93A1ECE8929E6385C5E3BB6EA8A7C0FB6D6332E320E71CC4EB462A2A62E2BFE08F0CCAD93E61BEDB5DD0B786A728AB666F07E0576D189C92BF9FB20DCA49AC2D3956D47385E2 -MD = F8B4A4A6FBB8C8432712B5B815B36685C86656C3F67D05BDBB44B49A - -Len = 1249 -Msg = E5C9D107E19D9BDB989AF870BE40F1B6FA06DB3DD70E741D2F03198DE02E58E2A37203A7E766A8B918836039A2503062AA3D4778D1EA931BDC6E76554FC965584E0497AE75627686E10E50DF6302C2458E087AD4E8F0ADF22538ABBAA431703349BCF5C026C30BAD0F42D93C64D2918167E161A3C8A1848ACE16F56CF5DD5B8E0796ED50805346ED9AB04038E91676C92BCCE7FA74FE258B6D01350C00 -MD = 666ABCA42197991387CBDC98514B070F04B7462776CB965174A0B948 - -Len = 1250 -Msg = D43686E59F554A3045CE43C0457D8EA84E70AF4F0C8133905C27C85648E6EDCCB1ADDB46AB7E5AF68B2EFD6C95BCBF9281DAECC1191A416CAB872001F347B66C5658F0567EC86D2CAC8EC531F32EBEB8D8CCAB863A30B574F575F227452BB4129C84C6050F693F0EAD880B552CEDB4673AF621AC9678AE17BFE2AA2C940CC54227662130E4ED37020409D308CCF72270F74DA075451339BFF8B27D60C0 -MD = 9AB93743C040E1C24E1885FE1756E6DA9427AA58CEF80279FC01FB45 - -Len = 1251 -Msg = 309D9918CD4DE7ABA6E69619B8C0FAC749D4B96B71A58739AD3E3379DB4E6323ED7A3AB5FB6C8BDE28A8D362A4DF86CF9C418688B06394211A87288F2D3BF7BD60013C0E1AA153B5B94A6E2AF9C3964A561336DD115C74AB25B2A63E4B17B521709A207F41EBA5E412A65FC8CBF1C49D1C927CD92482BF6C2D22BDDE6D8C21DF69A9222BFB4B5BC57E891BE4DFAA41D8B725F7590F5D6A07CD0C0E5220 -MD = 88FD75BDE49CA24CBBBFCD85BFE1A94049CE57B73D0684A815934A0F - -Len = 1252 -Msg = 556FB9FCEAF608496C7681F31E303E911CF23E3D436EBF7997FE695A567B190409ADDCABFAC6C044E9B3BEBCA670CC42809B930DEC67BDBBF264D13F15250196AD387E0E51A754D3377284B77BAFD740529503BECAFB2399AADA3E7394EE46A997CE3AFB26CC0E8A8D9D616E61B786109A14D1E9414AEAFC8F806553B86194680F4D17F97FF55E35D5894EBE177402BFE5BBD6185C5E05FB4EFED46C90 -MD = FF973B4449EE684D3328CE7C7F68B7B1F8907FCE2802EDDA9B63F60F - -Len = 1253 -Msg = E1BB4075E498A327DF0160C8101EF6983BC938D67C47AC3F642A00655914C4A99D7CD0D0D70C81DBA014EC7C8A7350CCF30ECAA24F481E7064C8E9BC8CCF02AA5B93AFEC8DE3966662426C6AA20051CEAE8BC3D04B7801591FBBC6D41C1185C510BD153D51E9CF64F0458BD84E7344C4C5AAD4B2C05C8B9D9416EAEFBC91EA7686B5B5FCBBA9C913F4A06CE26D4F041686A6C800263BC4EE612607E6F8 -MD = D3A7D15BB76E4016CEB146505774172D00D54A418B3F543CB86B4152 - -Len = 1254 -Msg = 26E8F3698FD7145A13658E12E46B76144A404387E1FC39AF205532F3A04DCBB5C4C111B6B538B45B66B36E2FC683D2288EF30E5ECC3B557D4849E08008AEC60DCC565AF19C9418C5DBDD68D1727E8D08ACCDB5382F64DC0532B866A6F7CE4E2396FB4E2FC4720B0596DF649F7F9CCD88E95F4B75890945730C60F4FB5D5D6ACB54B463B7A817F241C1B3D09CAD036093588B69A07DE5928FFDBF3768F4 -MD = DE48B45C2B29D8165E9DE427A60B6467BFB9A199B4A248D6B526B3E1 - -Len = 1255 -Msg = 8161F4946F076CBAD3E13E8ED4E287CE35F00DAC4E7870E3FBD1F3EEF3C380255FF4A858400B8D035C6BFC6C25D17AD0A5A8D625E1F8F6116A9C5D40CCE992806FD508DFEC50C4841E4D403B788A93BE86F8E3687A939FCC16CB6B826D4025FF572545945EABE4B144D10A669C4B47F368F11093E748C559142E2BA4B007321DCBE166EFFB5C36306FEDD98D98ED5A6F273D56724C8B611B802314EE94 -MD = 70C6EC6D6C05BB71F58698AAF0A078068EFA6ADD81A549101205E1CA - -Len = 1256 -Msg = CA76D3A12595A817682617006848675547D3E8F50C2210F9AF906C0E7CE50B4460186FE70457A9E879E79FD4D1A688C70A347361C847BA0DD6AA52936EAF8E58A1BE2F5C1C704E20146D366AEB3853BED9DE9BEFE9569AC8AAEA37A9FB7139A1A1A7D5C748605A8DEFB297869EBEDD71D615A5DA23496D11E11ABBB126B206FA0A7797EE7DE117986012D0362DCEF775C2FE145ADA6BDA1CCB326BF644 -MD = 926FE0044B12422D3E4BFA52C59252ACC91DBF09C488AE9D31C7EB63 - -Len = 1257 -Msg = F0119C8BC95F23CCBAB4DEF542665D9BFE015AA4619ADE158F1D21FAC3C4F7E3D68E5EBD303F920B017DA561F6AA751235D55FFAF241CA8759E376B0AE60F04AC31A591E3DB1F58BF4850329BE199EE1D6A750792CC3B7839B66C06753ACE50786223E0DD16EAFF479B89BE123C1098D8E6D30607B1FB9792F6D86608FA26A1D9214BD619D614FF4EC326EDFC6BAF44A565061856A6A796C5CCFB021F980 -MD = 47AD5A72AD648616D13B5267FF54573116B1B62F8059731AD4CBBC2C - -Len = 1258 -Msg = 21A57777A8B0B5501280BC7717E54E6B0F8601B8362BD3ACD7C25798FE78A76515B10651F736CDEB08D9AC70C05D3E12BBEC98799C7EA021699D852B4C1EAD48B301BC6C269157422EFFF2B7749CF0D19E2D47F757E6A56BEC71DF86482EAD78E342944114D3D7BE2D381B01066FAE0FB328AF0530CF29A1C2479922BC5E82B7D1108570262E55555391B85A347CB186390D9476247080758013E0ACD080 -MD = B53727767C557B7B3F409A78E1942F9BC8CB8BFCE20A37F7CB42E09E - -Len = 1259 -Msg = 0E7BE48BCB01238A181A4CE2D5F23BE4337E96DDB7CB9504250209886AA050BE6007E594E14E58B64ADE5B9FB8F90C7CCC9B5939B1CAF74174BBE6A554BD40148AE7CA525C4DDA1CF0CFC11812DFF12BE121E388794AE8AFD75615475E9D2C2267F0E332F298D17DB1D597A97DBEDFDC34594E00DC107839A3AF455C1CCA44597A53A314ACCBDEFCA82D123EE53D0B6663BF3395311593B0265F87131020 -MD = F01DD257A8A20F72EA9845CD232D181146ACA6457DBD5B2139ED1C3A - -Len = 1260 -Msg = 6C38EFE88285521063F33FE108162D56EB5109EC0DA8AED88EF76AD7B88BF1361D135ECFE67CA1069FDFE1E0DD7A175C0DBDCBC3B3E55388AF3A866AB8ACC756927CAA142E2A4AD6805A616D1100B51E9B1B3AD04708BBFCFE27E4F8BBFAA823A57D127B6FF5359DA704F61F96BB882E6FE33C648D5855C725B092C4E4E0DAABCF6BABB56BE3450C73C3F07A2971E16E1954B6E1D17E92DC5795743FCEA0 -MD = 7B50DA02B83A52001508A7C4C1F588E0A7955FC8BAF6757113023EA9 - -Len = 1261 -Msg = B8BC88E9B1A8DEBA56DD1E9B418D379AA11252E609ED52AB42A67458D87E3F2D60AF36595D8E33E317701CAE5CD58557C20617124068EC55A7096FE49480E625A51E987D73729FC4C531B7346ED8391AA3F0D6F8827ECECBD74C7BECF9373E692FFF01947CC11C92CB619244E0EF3562A96A17030414F44FCC35B2756A667C003C88CCD1AB31992FC659552DA1BCE4F1807B3745C349D3C96B38CA1C93C8 -MD = CC8F5B012BC0ACE8F37DCF43A6FC7F662F36724FB6402B56435EEC9B - -Len = 1262 -Msg = 3FD3693A5376B0943D4D99601D92B3C55CA7B3889E02431B7CBEBDB6D7D886BFE7B057819E14764FE39B828D233FE9FF6B7CA010965F8F8777A80393A0B86E61379C26DA68A304D6A47A5DE2C029561CDB4CDA5CB471A84BB7358D8EBCD50521C6693B138348388258A032DB48D067FC0BAAD8266D6A880ED1B8EC9C559C26E97C6C2037D5D51F753604039461E26D4683382BB2EFA5A13E734E2CE90B90 -MD = D4B5F8EF320CA67ECDE061CBDE392C1302D9EF041EFA3EB831447694 - -Len = 1263 -Msg = ADAA5A1187FD564FE9FBEAF43E48D41438B609CF80694F3E0872AFC1F172FD18E4D1FFD96B674B4A765A6D1A63827E0ABB708EC776B9458F5EE904501B096F625B7A47E7D6CDE2E19009C5C81DA80194BE8EC613F0E038F8E0D39A92851774729A25F00068660BD25CEF0E7F734056D5972AB36757FE45F55F2768DFA29038127269B46AC68079A26E0CB8C52815E22BB61E32E48A78FDA6A006557D580C -MD = B694CCF8B7CD18BE2ACD7D270E870A567B2AE3D7D28594694DA6CCE4 - -Len = 1264 -Msg = F76B85DC67421025D64E93096D1D712B7BAF7FB001716F02D33B2160C2C882C310EF13A576B1C2D30EF8F78EF8D2F465007109AAD93F74CB9E7D7BEF7C9590E8AF3B267C89C15DB238138C45833C98CC4A471A7802723EF4C744A853CF80A0C2568DD4ED58A2C9644806F42104CEE53628E5BDF7B63B0B338E931E31B87C24B146C6D040605567CEEF5960DF9E022CB469D4C787F4CBA3C544A1AC91F95F -MD = A4E4B4A573F7B8865D77D7E57F7D840A55261A96E5FEDD763D0811F4 - -Len = 1265 -Msg = 91440F1C8F7CD08B2FA70D334BA56F12FA0AACA189346291DA0B69F58BF65869DB2CC98FF82D56B4F9EB9106D4CF20AAB00DAC3669DA29944DA8D9D23B797D8D2ACB22E5D0127473E8DDE2EAFF6BE3DAA7FF7FC7D9F8DEEFE2634D8F3071D196AEB24DC1D9CDDF4D865D794BF120CE78B20F06124B656BB7CC5172E87400C50E6C3249E8372240ABF5A8814B66C9C3FFEEF2B71BE2FD0183BBE6DABC95AB00 -MD = 65D4F15B387C20B3B1B09B96CB0D53B567B1BC163E8E1EC42B0B9481 - -Len = 1266 -Msg = 8F66375F8723070CABEEDCAC50B0A986B133E4685F68FA60E36A61EA0042747029DB1E7672EFD41833674EA9D29E30BCAEBF74E23D7C715B9963F78489692C3EFBA4116CF30193E74926B1FF7A2C6465928EAB794496D46101F45D26BF1186FC66CE159AC50A3E2E379A7981DC6419F29F7E63FAC2751E696C97403BE37C6B01B34557DFEE5B68FFAF22071F0466576016334CFEB6CA53FC40BB1C5DAC9CC0 -MD = FAF5C1C1AB3E571301B167FAF137F7FDFE39C63EF7A8E429234516C4 - -Len = 1267 -Msg = 0D030E023E6C3B59E25BAF6023F1CF3657C566FA66C0F8BCFCD04F3163AFF6C2DBA0661132FA477F3D32C514F53F8E89B316DE84AA55A4AB38C33084354944EA9AFFCB8727AED5675AFC52EE6201961C15B28B0CD38948AEEE51F6E17C172946BC1B51ADD5316C30703CDFDD7FF87A7612CD576E7FD4956C0283AD12E13A4FB548509526A13B6A867353AE959D4E70B31959097BA28E25FD04358EBC568640 -MD = E808B7B4B07A1D090F15246426D8F1EFA26E18E5E5EC4ECF4A0881FB - -Len = 1268 -Msg = 99883206EEFD96B8ABCCEFD8872185AF185079F568314B0AAF55D2A5291A5B1AB29B9D25839A369F0260D55E29E2B60AE448393BFCBF18F8D091A8C1A0739F25EB2748C7A45BE8F88C9414745CF3C236A40BB1AEE8A85B53BD088684BF4E7DD1A9370C1BDEA575886295675A01D03FC06A7E01100F03436E5A3FC224DFDC6D9E8A00345AE14FCFBAEAF428A11AE4B4BE9B839B50CA80843435ADBB964A4F70 -MD = 3C98F10D853A2D0E576FD752E192293931345B2470A658F45FB5DDCD - -Len = 1269 -Msg = A6B3EEC583A09261D745849CD236679E2F9795123478BF76245F5E61F00EF6FB32497499B967CD550126BE3D88B4BBDB55EDF14AB745654B70EEEFA79A26FF00B6BD86DF619D53F72DE374965F277BFD87CFFC9124CDBE422A2AEE0A784D705566B78239A66D321F4FCA6DC11DC553D26C7F57EE05A86166D4E073BFE54DC6525E83F739C70DD4CF4CD07000CB595DDFA749D9D1D5D3CFC0A4CA2F5ECC7528 -MD = 430F15D34F7020ACA85099E5297DAC22337ABBD7B825691636DCC876 - -Len = 1270 -Msg = 817F2D641D62B9A54D78DA451D7743A234B424D1AA73D173306C0F66D78970A8BC13C87A9BB24071B0BD9F5B5512A7146C4EEE5BACE25AE3B9F25038592EEDC07B8CCF0FA262EC2B091C0CB15557E5A2C6F9AFB264662417E570C0CF37A770B963021A60E7D5CA2C5BBD8EA1E01C95408CFA335616F253A489F89DB1B49CCF1AC66AD4D7D4CCFEC6719F8C0B1CFDB40CAF5DB8BE02E32B516EE89682BB6ABC -MD = E573DA73C47D6B1B8FD9B9C3121C25BBBEC2C60126557F58C7B91AEF - -Len = 1271 -Msg = 825BBFF42A57069513C6DE0DBD31CFB7C114E42F8011892F9C53E41DED542F88051A3219007B85C08DF9F83E13B4B836B83A0E39AB9DED55B4026B85A0789E166B27B94D64938F9997BABAF6DB2C0DB2C680FE7D094708F8A6309F4AF8CA4F835A09289A6BA63697D87C730BCC3794FA3CD5DE836E64E5C4DBFB024B9C230C6E3645559F38FB97026DFA542E04A5DD50876FD844E95AF2E3CD2C9C3F8551A4 -MD = 79D4E4F019AEB10B0A215FB7ACED64F35B487FA6640D09CECBD84E91 - -Len = 1272 -Msg = 25B8C9C032EA6BCD733FFC8718FBB2A503A4EA8F71DEA1176189F694304F0FF68E862A8197B839957549EF243A5279FC2646BD4C009B6D1EDEBF24738197ABB4C992F6B1DC9BA891F570879ACCD5A6B18691A93C7D0A8D38F95B639C1DAEB48C4C2F15CCF5B9D508F8333C32DE78781B41850F261B855C4BEBCC125A380C54D501C5D3BD07E6B52102116088E53D76583B0161E2A58D0778F091206AABD5A1 -MD = EBFD796B29F6059931732F98602185B6377C4E6E40BD26C810D6DA96 - -Len = 1273 -Msg = 53171F51D758037D43E75BC46D0160792E060C1F61A78922CC13BE9CA84FC9227404FFE6A3B054AFE5AF13D62DE8E6E5CF6A428B794CD6EEA56DE923DF662D54C8ECB3ABCC0E09A31A66B7ED02DC03D9B55AE44872D51A2A4F95756B9B611B87DB1757389F718BF0C413419C46BB9FBA8E7266FE2C438F8A4D8377F220B71C4C0CF3E7DBA8471CCD615BE0F49E97448BD2748FFCB47C46A508809E72F8CECF00 -MD = 8409FBB79EF1AF5D3C3217DABB94A56DF9CC91E5C855C257FAA7BE11 - -Len = 1274 -Msg = 8B766DA40380903F6A333AA1DD549144FCA246E2136252A5831859711F08BD02B449A1F85ADE21941C81CF5C70AE27DF71F797C3F3991BF7CBF64D5FE5E228E03A9BA275B6BA6B55C847D3E3EA01C011C2D623A712615D5804DAA36527174814C711623346A7B2E50A50C1D906AD2CD1345CC23E2A08161F027DEF1AF127A71A43D19C19034D99F3BFDB4579486E61134D84BAA14000A32E74B1CEA54969F480 -MD = F633D9E971778A2927FD940A0A4F89B1E64EAA7523362FB8D57C516E - -Len = 1275 -Msg = DEA895DDD527F9F680EB69D0881BC6308044D98E2A407C6ADC64DA9D8DE14494844063DF64F94EA19D94C7E5BBC528E3078E1900A92D2F8E44D15AB097C9974B10665D3235C4BB08D9E6C6DC5DCB281EE116A29B345DB2DAC736160E772D609E2F091B166F8A09078BE95656A4B6F17DA17DEA7A7D51CF41F318690E566F0501106FF3CE7EE0A0D2327202B23CE11D91F6BB5C873A41D3BE4AB4F6DD30D6D660 -MD = 430907054F7D24F88775C94A46B29AC66F7EAF10B93E331CDADE15F4 - -Len = 1276 -Msg = C927E69503AE94F153360DC508B0E77682465E5B8365953A2C9626E2DCE4D875FAF1E3F3ADD70E34AA7EA6EA175D79A9E700D652BE8B7759707306D10FC33D1528D70D389E6ED9B8E0F8D478ACFE5BE223D4B791FED6AE65F363EDF4186FB088F69CDF394D74BF53AC465A3541432C41C7666B653858A7E6D06B0985C0F7B1176D1129DD1146357F847289A439E543E480F932B8602B3AFC754F540361A61370 -MD = D21F5DA379FBB9C0060CA956DFC13D33133F3704138A229BA1F8B975 - -Len = 1277 -Msg = 32419664499B391A213850C12E86F4FBA5B2BF3DADB0DC65D4EE9C9AD2710FC1419B4D4E9B85205E51BFD3CC0F6EA075C14DFCD1BD6800ED644FFB9EF737F1FAF9FB77E5621A5E15AF7F93D04E6D2DDABD71A032BE5BAFD0D0976D0DDB54DCBE79F192580BABEBF54F2EB6F421CE60BF939FCB8F237289A107B329C5F0426DE9C32303DAF98F3AF5F87C5A44EDD1083C6A2B8C045E8FD65B318304823C313400 -MD = C2EB28749A2D7838EE1DD15A0ECB1F7FEFEE693FC0C7C1EDA13463AE - -Len = 1278 -Msg = 470E65B3F6A5460C9704053896F3DC638C1D735F393855B28A4F5A76FC5A419563845B553EEB30E9057D777FD2751BD6D7863E7D881DA2C2698961396ABE2518A64CB8BAA1CAF73B8B5AFD9D42CF071973A9904511C81164D509F3CB7A4EDD89C7F79A6761E9CF2A600FED47EB4A225310544E0CA41B1D8C9649905324EE0BEE1A5AFB3F1B7D9A2CFCDC8B52CE611B10B088EFC0991DA73A7845964BC83EB794 -MD = 0727384B6E3DF3840A2E8EF4572303F1CC89166DC5A916F1C8E90E89 - -Len = 1279 -Msg = A4E9FA020BA2E03DB8678FB9F502FCE8E58EEC36CBAD94756E5566DEA5681EB48381C5DF545029B435F7208C69ECC279E993F56F808D59961C9822471A04F501EFABE78236B7D1D759F6D227F65CBBABA66C5B81FB88B6DF218BBA89024E4558719F005BCACC96FDCC4DBC2D4FA417DF849D96E3D0F4778FE2E20864DC058563527ACBC197BF04B692CE00CA4339A8B21745D3B54B88C22727287C63C68EAEFE -MD = 5D492258417B7462AF4B283D6E7870EFCADF8512EFF62CF8EA1F0F6E - -Len = 1280 -Msg = 21CFDC2A7CCB7F331B3D2EEFFF37E48AD9FA9C788C3F3C200E0173D99963E1CBCA93623B264E920394AE48BB4C3A5BB96FFBC8F0E53F30E22956ADABC2765F57FB761E147ECBF8567533DB6E50C8A1F894310A94EDF806DD8CA6A0E141C0FA7C9FAE6C6AE65F18C93A8529E6E5B553BF55F25BE2E80A9882BD37F145FECBEB3D447A3C4E46C21524CC55CDD62F521AB92A8BA72B897996C49BB273198B7B1C9E -MD = 3FB7392A6621B852312A374C14A679AFB0E3D2EC6A2D147BD5E873F6 - -Len = 1281 -Msg = EFDFD54747AFC74789E3585D271BBFBFD2B45AB16DE6F960B8176F3E18358F106B148F585144020D6E055A35572EB7AEA1D4E8662340FD641758DF09DC5D7BD6058A2679076CF8AFD9440F4EEF8AB76AB23E2A9801EBD66190B742B0EDA0DB513E8B34133CAAD28D9A74E1B3F0A44622B5FECC6D88ADCB47BB590C8F2078270576FA8DEFAA7473AB7BE4DDFF9142DDA4701E2FBF30B0072BBD0E42DC761A5A1900 -MD = 8A9041F3810C1784265A045F85A4BFEABD776DEA965FA53896DE9155 - -Len = 1282 -Msg = 835C2A951B9770857A5BC36CA40428294E8A7F3EE5953CF7D612349B7BF4C2CA54FDC48D22206E0564C9E42C5FEFB1D799BFCA4A90ADB6CDE24C4B5BF58230F85086EA86C5C7A3A58D2DF7BD7A50EE51812AB957F075D60316381C99D24121F24E3089190F5A64995A898D25DCAF6ED422AD5A11046C156FD2A9B3A901FFE9E86B3A434B9EF8E132D1CFAAA7DC0EB6BF36974FB02655D9FF7D2E6806FAD8F56240 -MD = 02675B6BA474481CBA62BE605962672FFF338DCDFE450FBFB809D08E - -Len = 1283 -Msg = 487BF06ACA4F8CCB9FBE64BED71AA95E8254DCCBCA59A391977CA1CB657D7772C8997A9513D46C6560A3B3208DFDEEF161F1791BBE78762669D6035654872DE662FB0E35507C3C47F1CD7C4FC48F429B610223932065724BC8127C938CFC687175E8753203C8DFAC4A45ACA459E6CFC1C42F9E686418F9803438875EE94A99AE0C73E65A4CDB070417A437734BC89A46B44A27F305CBB693299D5A80C8BD426900 -MD = BEDCCAF2AF39DBA163B74DDF5B0964855D19609827D520E610CEC627 - -Len = 1284 -Msg = FDD4EA48CA09D3A4876ADAC2A22D6E016C6CA18A35ADE17DD52466242249EB8937B13129E6CC5CB7AF48307A892EF40B190BEC41523CF0E6EDC72215B7B33E6FBDAF475E0E2FA0E863E83727FD0256A0F943646286BECA53D8A1A0117E13D2D46376340873A608ACA2B3532A516B9CDFD23A78AF03BD47EBDBEE97AC9A536AFF8B494E1FC662E5E1A4DD64C284C16B510DCA8AEA7D74E5CBAC8BB61DB5A0DAEA10 -MD = B75764D39E968C1104293385D9310C30BE16333FD62BD60BC7F5CCB9 - -Len = 1285 -Msg = 97819B95462CDC009A37EF3C6A91169E111753FECD21364FFBF95987EA73825771740DF970A5E0C68015E819CB4670C752EADE35A1876638BAE3B7FA7A5441638F52B092CBB026A2C16B60FAEC950D41A35F2CA4EF4D6154FDC4EA58CC617E783EBEBCD55E72E05DED2D34D68EC80CD3A1AEBBD053331A8C9DA25028C0DCCC2B1FAC93B4740BA94B3B8F066EA9C666DF5F083BF864CE9E0E54CABF10A11D1EF050 -MD = 024E53A88AA426FD7FE08C41143C9AD5768C127EC848B5EEEC16754A - -Len = 1286 -Msg = 597550EC49C64E81F38314DE7A825B56D0ED8B801394B4F6701100C3AB8BE122D124F7DACA5187DA9A1BB8AB905031CEDA2AC1F0B4644CE9CA283F65236D43E8709951B18C17D27CA45BA90B8EE84CEFE8E73EB209446D75DB554882A6DC0AC284B7A5093975F5B10409749BED474E92E19C7B479AB17B254BD9B9D3A35F0CC912CCE433BE6092A89CBC14C1F8D5EB76F370683039000D757FF5E06BA4A8820D20 -MD = A9B38B2F2DAF64E3A13FB209D300DBD87E5390FE6DEF8D9B0B41D077 - -Len = 1287 -Msg = E79F049F5F8FCABD20CF328EB4FFA20D4AD500FDEC6DCB9692CD294E1DC54513E789D4D76D6DD2B17542E131826A6AB20ECF7BFCE476334F6540307C99FC76CB85AD49442B36B25F0FC81279BB2AB0B27846BCB7E9038092EBC3F6E0011746ED397D8CE77B9CA67AAC8F01DCEA90352FCD8893C276BF9DBB76C78B5E217063CD8930314A5B96D0641D82182E2EA67E7FDE3DEC6C13B75DC65659B15E56E75B768E -MD = 0695AD222CA0C5147EF8B42794808C8A3BC7472E96465565B689A9AD - -Len = 1288 -Msg = 4E452BA42127DCC956EF4F8F35DD68CB225FB73B5BC7E1EC5A898BBA2931563E74FAFF3B67314F241EC49F4A7061E3BD0213AE826BAB380F1F14FAAB8B0EFDDD5FD1BB49373853A08F30553D5A55CCBBB8153DE4704F29CA2BDEEF0419468E05DD51557CCC80C0A96190BBCC4D77ECFF21C66BDF486459D427F986410F883A80A5BCC32C20F0478BB9A97A126FC5F95451E40F292A4614930D054C851ACD019CCF -MD = 8B3750655AF5ECA10CC4F291043590E2D19759253047A4C1DBC86577 - -Len = 1289 -Msg = 8AD7F2067E4BDC72F3C66DEAF459D1D15323EF79004735603069E1546806AA3783BD572E76EC472D215794537815ECE3213DE792C359B9EBD678CD22772C73708D3E9F83C3F6EC5681F96100365383AC1FD38BAB1A777F48F267EB877604DD8C3E9A27A4E42392858268E8215175ED1C9FA7F5FCD2887BE6658D804FEB5DAAC79C6DF26B90737C2CF48F3FBD0D6D87BF51C0925658BFBB91284C9158AA327BD66880 -MD = 7A64BF0760724E4FB7CD24A2967EE039AB6FF4B434D2D7CB6D44D19A - -Len = 1290 -Msg = 3C48158E1B2C890D8BAE91F9610D7E7CC3ADCF77FD18FED0F1C121D11234674C700B5545DE6CE4713B7C3FB79E20F11E3A709EFD942D9271B6FE0E5CB600D5ABDF178D27E37E9474EBDBCCBB3DE7C0F499E4E8CDC8FBB9D845A1E6DD89A0C28CEEE5CC74D5F90A041D4BAD61018DC1866543FFF1C09694F5717D2A2B876D397F7542D2A35776FFFFBC2B39A53AB06DF9E7B7E8C9F339495C8F31C5227B4DA8549540 -MD = B3D6F124501DB92288EC273B68458380EC38E5FE7FB6E0A926476AAB - -Len = 1291 -Msg = 4812A05C8906BD360455A99F2F968B8674591A55F7213CA7C5ED298E3B199D278BFBE27D29C2372B94648DFAC050CA869F875CD7779958FF3815402050ECF110AD4FB2FCA4622E13CDEF51F80526D8E3E7149E7A8E8874E0ED8B612585DE2C14546A2AF86B8CD892EC9D0C222B66E4037D417880FE07F25C8AC5E4BC02F3CF2DA743ED72EF243791E7927E3EF0DCA6258DE98A700AE53450D57EB86554494FEEBF80 -MD = D5EACD7C948A19993389DA47DE4A5DE1E40CA13B64394B590CD9B6F1 - -Len = 1292 -Msg = 433DD44D7C672F2E15670086DB548C15B30B92219C8925685FFC5D97EB4EEAD9A76A613C382A399192CA8E6EBF31743E279C71BDB749190EC136268BC008856C03398AE0DA550E859F47169E88F950A597F0560336D7E5C58BFA20C0E0B57DE4B902C6ED1E99868E2A48FEA544DF47539B215E9E1DF268F0FCD4DE3215D1A8AC4C215D896B041FA24C0F8639AE2A6D67D1AD31BA0D1A1DBE783FECD3B49A1EB3C460 -MD = B55D98862F36A99E78917A24054DA07F160C72E84B1D8B05A071EEAE - -Len = 1293 -Msg = 3C2796DAE592507DC2AE56411DD6295B8517F0F009CEF9ED8C7D52024A4D6744916935ACACCE820A698E837B51C96D79501EE3662FE918F441CCAF82F00F6D0DAC0EC0F900E50A36BB93DEE19C319757D39B46866590F80D451681390199E030472968BC6616E657781EAE0F4B97EEC0995BC37BB7CC448A7FE441D05B70E86E5DA8C7854ABB45318C6DD83DD99A94CDA9F3B82B62F1962730E1CCE1F7386CF1B970 -MD = E3EC6FBFABC6CD5DDA6FD8065B73694D292A479EEB4744746FC89166 - -Len = 1294 -Msg = CAE6C210EEA071097DD53581E47239AF612213DB39225EC8C03D62D3F1BAE63D69B0826F9FDB540714A11D84E43786D4E1F984677E30280E4EA2878E424D86ECF3EAA986F08CC24145B333476877B0072660A3412CE92AF94A4150A98AD00D3008A8B78A00222530DD797E020EB259D25586B905FDBF7CFF103B972ACE04BE42B43CA538CB426515A7A6F86E27DB0D8D5D0E2F61B103D842D09928F4C56F59CBA0E8 -MD = 0D656ACFFA7C9A7B11D9E46F6D427687B91777C2DDA9C5D747023C65 - -Len = 1295 -Msg = 2022A89E86B267A920CF6E6BA856A8542B9DF1CF736F0A0B3ACCC09BFBED6F04870017261A29DA12E61FFBDD68F7D55D034CEC90A1A31AAA69149D185356BEFD2D592E8126462142AC330D83075AC661B46A73BF5FDF0595B3E311BE13140C4BD041E1713689A7FAF7F210B06710917BC79A0A739E04B09BD76BDFA9412E39050137D39025DEA5A1264DE08780A53C4130AA89BC024CF1DE63239EEAA8104527EE4C -MD = 343C39491D192E7446808CB362C2E3D6CFD0B1BC2E98F533362B33F5 - -Len = 1296 -Msg = FA85671DF7DADF99A6FFEE97A3AB9991671F5629195049880497487867A6C446B60087FAC9A0F2FCC8E3B24E97E42345B93B5F7D3691829D3F8CCD4BB36411B85FC2328EB0C51CB3151F70860AD3246CE0623A8DC8B3C49F958F8690F8E3860E71EB2B1479A5CEA0B3F8BEFD87ACAF5362435EAECCB52F38617BC6C5C2C6E269EAD1FBD69E941D4AD2012DA2C5B21BCFBF98E4A77AB2AF1F3FDA3233F046D38F1DC8 -MD = D3A5004477BBB21CF7D0FCA84E51A7A57E93FAE7222570C01B00E89A - -Len = 1297 -Msg = B11CF575F6678B0A418851761D3D2940DEC21E57314C0C8DCAF7CC51F3543C7EA3238F5BFB65C254F3D8F01C560CB9F5DFF6FD2D87FED5F2FB2C8A3DFFB2B7369709342F80BCCA077202151499F08FAAECEA4F6F07E85763FEEF5E062E4E6BA827AFFD278FBBA7F4FE90C748B582694E5A80D1561D5518343D0B1F88FDF6C61CD829D147D692AB9030F0712513259A5F73F37995B4CD923E815E95A9D2FE35E8293D00 -MD = BF8D2E6F9CF6A08C414A1904D6F2380C09E94AB9247C6F80BCAE1EE3 - -Len = 1298 -Msg = 6AD2B1B7D7D8F12D7ED616E464F7DEC1E64CDEBD637FF3DF232AF9ED5C810065F4CD00B1B75657F1089E185F3DB5F8F3467F685100697ED7667A7FB87871BCF8B936E05F99073CFF15A36CAF3BEBD22A9AF18113970B5B0777F643A56DDB5ECA4AD3E14E994C6D4D0CE43B8489C46097514339F12C4327EB8232E1BD929BDF1B798E71651D841EADC34817F2F6917DC5AC9D54BFB4A45E252BCD4039D71702F9AEE140 -MD = 028F8FE6FB85F67B12FE27FC62C2DEFAB5F5CF5EC711B4074E86AB0C - -Len = 1299 -Msg = 5662FA185A69C135AE9BF1BC3031A8EF17E3FD3595D78C768DC7318C43F2BF158DB5615BD5D87EE05475233C836CDB687AA09D63951EE5F2AF339B145DEE7C1F07A36784B469836C7B19C61BE08D64D996155E7B6B40D3DCB28E68A6C8BC0F5C8EA240A6AEAF719A061DEABDF819CCBEC87B31159716B193522F68AF57F7CC376A57FC926AB35E942F54D1F3843349071DD24E1D59C860ABA71CFE11C1462C8A954DA0 -MD = F5D1B5B9DC8AA3B39D7F82ED2161F63CC690E1EFC4A47E3B6DEDB355 - -Len = 1300 -Msg = 7779B3E263816A8F9F86D7CEB0DE612784D0CFDF4C9A54E8D6F7959AF5297F46F0E7528B64D24A7647232F4A28998F57FCC61E9DD78A678EE8F0BC5E331E2640A98DCA85D4E2E498AF62508A7A2511EC20AAECFFA8D6F26659789FE36CD6D33568C0AD6086060985E3A8E992EABD83216AC1F5D267BCB805AEF0E359CB65E69730473FE00D5DC7758EEE979077DD67A2BE990B4E242C2790574B17FCC6440086A22A60 -MD = 3ADA32B49332634D31C86D11125ACF97277F7B8F248CE7A6E2156854 - -Len = 1301 -Msg = 7FC8C0CC3D01FBE25FFF8C68B48A22805582D1697A4258874DD185CE20E3B1206AA69A83FED342ABF1ACC0BB480029D9C899A929E9A3E12072318CF2905FF97206A3F28409E309C2AF4529F212C9AA5030FE357E2D6C697FEC3763959DCCD61E295BE47CD76C4F1A9075E178C8D5ED01A3232422BD5AAF7DCEA80696367E5908EDEC837A7B25D600A9A8F9FE9507513CB8B1F283FF5FCF41A0AF18C7A121726C4EEEB8 -MD = 0B956C473FD765EFF31526F7E2CCD0E5F4CD6AE0E288E4EEC84583AB - -Len = 1302 -Msg = 5F9C4BF48853C04ACD6E4DF5D3058623089C466CE9D8DB0F56E8DF97E6EED8A77D848BF7B3D5B7E561BD745424829328420387B2951BCED984D59764443C3A8DE197BD5CF090958277B6B609C2AF771FAD8053DC2CADA33FA3E177592F3E975B3114D5C87AB3734D7E9CF5A4668AF60CB84202949115DEE795BC195E54AA3B0073172EDAFF954D46858BE26A174D92AD5938870FF1D5612049508F5FEBCA5998714F7C -MD = DD43799DC5320B4C241528CDEC57035968B2232E791513D5102B17F0 - -Len = 1303 -Msg = DFF4935452139DBF9E54D1BBDF61EDF88B12270DDA0E8AD766053B91B9343ECFBD793093D5FBA674DB77C92C42740E76C95CB72DE88F817C174E43A28EE12567E79462F3960FDF27B0B2D03A008C7C19943C7435338BC701E14ABBF8A783E505637425AD6139922DECA4524263ABED9D384EFD62A1A82C4788263A19A931A98AD9698DF7706128663629D67497C60489356FCBA61662D55A5831B7F1A64B49D479CA26 -MD = 754E7B7BEBB1B400D178A2B21C91DF88A9AC468845790C2ABFF6D5FA - -Len = 1304 -Msg = E90847AE6797FBC0B6B36D6E588C0A743D725788CA50B6D792352EA8294F5BA654A15366B8E1B288D84F5178240827975A763BC45C7B0430E8A559DF4488505E009C63DA994F1403F407958203CEBB6E37D89C94A5EACF6039A327F6C4DBBC7A2A307D976AA39E41AF6537243FC218DFA6AB4DD817B6A397DF5CA69107A9198799ED248641B63B42CB4C29BFDD7975AC96EDFC274AC562D0474C60347A078CE4C25E88 -MD = 75B77C36E394711DFD35C11AEC8C033DCD7C18712F3B06D1FEDC1077 - -Len = 1305 -Msg = 9471390C1E87C0B03050DEE02D4F9B4ECBBE43981BF41F7EED9B38E309999536E4C550CF4BB9CC80A585F546CC25726B7041BFDB5FCD1DF123236064A297C11862CA1B378BA81B52F179FAD165F1E3D9EB32C53D2BAA5C4EE1380B8E757E288EA55BA911A1F1EA72A2E7D1A3B92E284966D316F22D4D0065AAD3B1743D47533CE8B362E26286C70C61997B3E4560CE6FD84384DABE495216ABA7DE1013147FA81688C900 -MD = DBBE5FC67AC909689003349CF94AA72B5B8C4232020E19F78D393BC1 - -Len = 1306 -Msg = 71ABD048E4D533B8C8DAA416C8ACBD4D70EA10EC8F0DFFDCD1244CACA21E8C1258ECCF53763DB6FDD1AD92A6968767E5A03BBADEC5CCE37762A2C6F7697F537BBD2651FE372A9900D957ED2F60BF62A8407F1AA5F18600C0575A3FC10CAB9B23ACB86ECF40E83D8E111FAE6B76F940FE8173071D8842981886E3FC86C4AD30654AA086C110562B50A2F7292409F91131A63E3617591A4AB8AD11512C0449A00E35FC2300 -MD = 492C1854B8CE00C0FE3DA9161F4E345820177BFB23E425A7F1A83242 - -Len = 1307 -Msg = 96B1EB63101ACB4E8D4B1F567AE85F344115D62A2BA9A3A75FF2B203446862B10296625C87ACF3D14BB1928B3FFF49E137B9458713C11950E0167586BCFF8FEAEC9E54B6DDAD31DEAA4B987A5BB5642CC224670B8F685D44A4E251A824295F6382A8C303FC85DCD5A55B6974F2DBAFB05A4A46C79A51407CDA912E5A09D4040ACD7DBDA7B0F1B57D733B26EDBC77B977420C3477D5E06B4A112FFE8E3C275C0D0C516D80 -MD = CEF313762B2168DDD5240D05902B918330F4AE1781D1EEEBEC0E8B38 - -Len = 1308 -Msg = 88DD2CB6A0A2FDA530FEBA6B06B37412BEBBB69BA3FA198052379BC6140395604ADF13345B3E313B04D2CDF8FB718E3BF36267C5E209EF98046C3812BFF94D1870B7BF302C004889452FD3C4A2CED2AEFC848878ABF70587200AC447F8E6C2C8BEA5C5CB72AB7BF4294208A7234C23DF5C963DC6F530BDCA1337A49B760508CFF20927FE64E68BF6A558464B1897AE65EB18C5091734BC8E1AFD63814F8990C58193FDA0 -MD = 6699A0481BE378E0A2DDAB31EA08154FD1093F705252041E1158A788 - -Len = 1309 -Msg = FA163114DB716206F3C7F7BE954FD93043A2D74484E53F510396F69CC74DF96D5A3A1BA46AE5D7B24529C655BDEC87274B94FC52A7857A6F3E888FBB20EE286EE717FECBACC5462DAE1FFFA610ABF9605F2D4494ABBE3B7F03A2CA857B9EDF686A2E9D28AC7B6F582E0E2AB5D32D986B7B39270B9D45EB9F34A443B3CC2E5A5EC2966DF1B6FED07FC9B1C357A84BF9D7F61F5B65C93B696234F953F8C074DD28DF4749C8 -MD = C58B1F67465194E29D92552B312ADE31E6D3DA188BBC5C032DD2DE29 - -Len = 1310 -Msg = 20C6506D220F6F7DC38280C9B74ED7EAF33462452729FE54F74C5A1D2F664A80C6D93BE893AD2F49A332D88E42D0367FA52A420FD2E78D039323AA19EEFD069C0FE3AEEB261FC7F6060B597BEF88DCF08F2441B74DF23DA1111117CBDF9D18F9EE0485EEB25E980944A0449F5C7CD7D3BE8E6A9CC44D435A4CE4512FB11FA594809C9CFD9B88E6020F5282D15AAF9968DB4A49DE99F6081E2953FB489D6A6D437F207D50 -MD = 6B81C02805F4A4D44F7E7887233FD18BAF0A14035C4716F043F4871E - -Len = 1311 -Msg = A92F1321F39DB5C4DB733D4066E3E4B0E7D21CEC0BC7E2A056AF5EF322FC41B1F8E2ABA2AEE1D3989F2E4FDD42E03BB7FCD2575EE6A1C5A8CFE9C24ED165E3F71EBE9AE5998F12A058CBDFBBBEEFA10DA4822AF880C222707A72D47A376E95088EC09B1CACB895F75F425D04DC72D507CBFB7799784A1D0C2881AB675896442CA424B55F6577E856A1A3C960CBA3D455066AB5284A40ADDB1F3B9BE1A77CEC192B75D108 -MD = F0B238153B70149CA7B47C820E744DCFE4AAD6E45EB12E3F30DDD647 - -Len = 1312 -Msg = F6D5C2B6C93954FC627602C00C4CA9A7D3ED12B27173F0B2C9B0E4A5939398A665E67E69D0B12FB7E4CEB253E8083D1CEB724AC07F009F094E42F2D6F2129489E846EAFF0700A8D4453EF453A3EDDC18F408C77A83275617FABC4EA3A2833AA73406C0E966276079D38E8E38539A70E194CC5513AAA457C699383FD1900B1E72BDFB835D1FD321B37BA80549B078A49EA08152869A918CA57F5B54ED71E4FD3AC5C06729 -MD = E52DF7FDF957269CA0B0F46553D554FE2E6367019B379A1E4F4C7A9F - -Len = 1313 -Msg = 9961309EE2294A79F63F67E15FA0F9B64371A52A33857230E8353C3131458CB573CA7B42C62A945E44DDA553DDC4F830305FDB11B39F61F6DC7A77F45D8A78A1DE5E444871850DB3D77A5FA22664D003CF58CF270EA826D875DB95860A47E057E8E985C91BFC850B0FD10286D7EAFABF60D43591C1EF72200BCD620D9C823D2B571C79A0F735F7130C8EEB485F0AD15F3C3FCDE12B6F903568263820E09FC596A98E4CDD00 -MD = 87F64396C14FF0E887CB870C227F2C56716FA893D83195006FD1530C - -Len = 1314 -Msg = D7FA17AAC404782878C2D2699B8FBF799081144D736007CEB5D26AE1E8FBCC91FFB451FE0ACD54FA46FAD5015F6E054B5FDBB1156839B2ABAC25175E305E7A5B2290C095CE6DEBA98AE8FA42EF2A55570AC1F9D8AFBA87C7D164DAB421BE235EE4E20969C3601CB5F553B800308EA4F0AFB4F15B66F24AF0658FF64831E1AB34105ACA3150CF5A263EC55D0E6A7727BED78FA74FA5FEE2763C0E3DB49D7E529CAA85C52880 -MD = 5A3599D6CC5CD9E7EF4C88730F353C099E3DA4816374A5FCB80C27A8 - -Len = 1315 -Msg = AC37BCD48E5439D0E943E371F5BC1898A4E012238AE77D9B58A3E0009992C4A133213FD26CCFD44E55126B853300E3C55585F1CB273E6A47374481AACE9609AB76D8F11C123A7CA069E74826B82E15304CD01958769BC1118EA86F911CEEFB9EBE136B2A07FBCE3B54D86A9D8FDA25CCF6B51181FD37DCCF5814EA3BE8A93459EED41FF29851518894536B3CD6D0FBF2346FBA2F9D832CF694E9BF4E901ACF66558972A2C0 -MD = 14D77BA398DD9F916B01225D487ECAE972CD4291443900EC68E9E4FA - -Len = 1316 -Msg = DF7CE9796053F5F36763BA2245F6627DD1F55566D4131D5884E68E74AE069929F606FCD502614D0D2D426A3D462962E779B9A22426C97406ED169719AA2E81E47E68A361D8D0AD192A27262074E872D2ABAC6558795DF2DA248CCED42D2C81E90154E010416CF9A20F53F7CA80967D888B0935F5747ED74B10AEA4A3403033C7BB2819C65FB91FFA65CBA3165D38A0881BFC2EF576890AEF8A988FB0179C38545C357FE290 -MD = 87B053DC4FE648B9E607C4D953F0FBF1728F4B036BA1E193A761639F - -Len = 1317 -Msg = AE8640B2496BAB96E5B8011A948B207A656B1B78CD05DC6B7CF47119C742B5277837765B9250CA580788441441318E181960FB6C429FAA217C4937EB1B4DABA073A2655EB4DB6E7075E5E3BE85CEC13C5BC50CE7641CA251D617D47F86F10E8B3F6E84C17E0704BE08C6D3DA01CF21D492576E86AA1A0450FCCEA682966E00E5B460CC3FEE46075924CAA941636BB5B0759031F38C067429FBEF3956B05F911D8AE0405CC0 -MD = 2D3EFF6153EF9F4CCD00B81EBA8864373E73B1009D56948349A2A791 - -Len = 1318 -Msg = E13B3481EC450F9C4E1BE94348D4A727EA03FF80FECBF0873BBEFAA88A0CF4AF1FCEA38BF55218710AD8C01703797D22AB1C957D4B6552BEC094267D40BB91EC5A6459A142089079369E125361193E166AA50205E66A5BC1723F3596B21388C50CBAD03FCAE9295C48493254087A5742741521E85E6E78B95F7CBB4DD7BFD49CD007A7E651151DA15EF8C6E1754B92919CC60EA7BE1B58B8D60A2A9584A47E626C598538E0 -MD = EA1C88D6539F27C013D6804E25511F1D19F6DE909DA59780B2C896B8 - -Len = 1319 -Msg = 2F3F0FAECE6B161E84BD245332DD6458A97F266F7AAF6917FB4A5729DC5989B5A918C6DFAA698268F126383D190C4F13A40F765CC76F25E8705FFDF9EBC6BF8984DDC7E5D673F2DB437421A5EBA8360CEE5D213B407ADECCF16E694E962C672DC058965E188A5C30CD1C5AE278325BF0CF21CEA9F6857E982CCB54E68F6B754BE9372C9A9AFEF256B5F2B70A9F60204B0A9B2BFD4809F319B3695AA453A52F62E2DD2C6F54 -MD = 0091CEC9BC3CEF78E24992ABBFC85734FFDB4C2F45FCF932768A2BED - -Len = 1320 -Msg = CF8562B1BED89892D67DDAAF3DEEB28246456E972326DBCDB5CF3FB289ACA01E68DA5D59896E3A6165358B071B304D6AB3D018944BE5049D5E0E2BB819ACF67A6006111089E6767132D72DD85BEDDCBB2D64496DB0CC92955AB4C6234F1EEA24F2D51483F2E209E4589BF9519FAC51B4D061E801125E605F8093BB6997BC163D551596FE4AB7CFAE8FB9A90F6980480CE0C229FD1675409BD788354DAF316240CFE0AF93EB -MD = 41853CD54692DBD478BB1E2D6CEDCDA1D139C838AC956A37C87F098F - -Len = 1321 -Msg = D8D4CA5DF5EFCBF2D65017ECB36C3BD473D607A30C25EE755924FD1E81E859F0311395E70099035BE27BEFEAB73CEFB3078BE02A61EDC1B01710D41EF113E710BB8C1BA51F5AF87FFEC0FC441515D06C165D076857C56597D01D80F73A700DC0797B609081EF2C71DF882AD6D35AAA4700C510621215CDA7BA2A2D73970556BCCAAC4D55BFED9F38C25645B98126CBB76D662E927A314C4378327941D1A8965FD1059E85A180 -MD = 1ACEC864D5DA227A4D4252B3CBB4B12701D00E26F5F387674DDF4638 - -Len = 1322 -Msg = 10C81B77ED26F307D86E4B10EFFD230C8FEAA519695DAB1869346C89B9DA7BD33B5BCA5C0C43DDE500A8C02AF37A417C97AD0AFB6A07AD274F0D09234C74229B3FAF91A5658D2D2A35EDD6992B2E3B213E8336C0B1DD29211EA4B215C358F5810E025B3DF5AF083DED25A6BFDD39BD34B3D7356A17657D31BE1E03E3F562C8DD249116AF11B1CA8DF62A0198D21F855EBDF9209F10600C0B0AB655DC2CE8DE056C8D8FA9A200 -MD = 8D2793D99D457B0798423BB6E468F77DEA086786963BDE7FD5E5D049 - -Len = 1323 -Msg = 38DF77114DAC70D214DE02A6253C53D03A44AAD53507C23A6CC64123A59D08511BCDC09505CEC62131C63D89B0A9C0F7071FCBF0A14EF340D0C33C93F37705B076AAAB9E4F590399547754F97B10C79C304907BA8D18D93D16F206198A2839FC265E3D942ADC8ED27D073910A2824424C3725409FD46064C426A0E7417B416E833A8A8FE57046EBA806AFE5AF13E756A6375EA6BDBEC8F5576B615622EA259CB161A878E50A0 -MD = 7CC7C6C88E059A7932B93E60E310DB5BF8F906817CEC07E60E9D2193 - -Len = 1324 -Msg = 430F558E2C30BE5DE10C71F8CF89A448EFF3D6BB8DCD62D2A09DD0FC9171DECCD07C65E77A79147F1D8D75E646BE71379A7EB1A317078D3E70D4CE560BF24948CDDDE283C1F87D907332181404F327DC9CBDF037CD00759EE403AA72874D7B99FE298310AAA01CD3CB1AAD14A116E6E5B1AB95E48E67A73019704D59444BEAAE4DA1C1A432A57233D5B2A233E98ADA735B1AB5B0975C1DFC33C0A7C8AE18775DEC8169A814C0 -MD = 671185C4114689FEA55E50586BDA320B1E3A9AD07A597012D14FF8DA - -Len = 1325 -Msg = 213D28C42575EC3A807C614609DABAAF4C1CBD06C0FC14D4CB4FAEE17995404399731CBD6D2B3DED3F0FF8B603A7F139625E6193F269D825DE24E2E442AE02AE948C6B3D7E91C1FEB5210280985BD2E1D5D1E7ED1B63896D20A18F8E14250384131E3B1AA2B47A23078DE9EB65B735133992CAFB56B22549313C632B8FEF70BFA8610E5B5C82BDE68C88BD957FCA36B5151AC18B3C2030315C1A8049F6582A6C210115293728 -MD = 3579D4D2E3C9F2FCAB09AE3293126A42E2965EF7BE8B5735896DBEFC - -Len = 1326 -Msg = 15EC4EB1CB742F14FFBAF11D1CA740F17864D55BA3AE39EFE5E43DD58B0A9A7345B9155F91714C9CF73DA71D59BE61E170CF62E15A5081C4D165693580FAE1401D6CB047D6F5ECFB38453E9906E9A8ECCD861579186EC2EFA503C54420673F2F3F49DF69FF76052B93B92F39F50235C83995B54CEE108F2A9327ADB4CA7098B53647A9E4EC5D4EE6EE042717FE82D505AB9BD3CAA78C4B576E8B37E38663CD20A467F091397C -MD = 9F8A3E3AF78778C62E9DB696578043649CEC83639E9DCC8330F5FE4F - -Len = 1327 -Msg = 65B08BEF40F0B21475DD76DD4928E3FF488CF3EF73F4E494A0D32D72F303910CAED04B767690E66972ED6C8B2878CFF3793459FA91A59F59EB7D75C50BF5E49A97455C9B0CD2F0C76B8DA25EDF988655C3BF92DC69E487A1750ADC615AD8DE7AC35D3BCF9F4A034B26D55AEFDA210B753C29101340975DFDA82BE82AA4BF4C9AF108FA4001242F4A412BDD2883F33A46BBEEDC449978B03134E7D7CA7CEF9649F03FE5C2CA6A -MD = E58573F553EB826D1D1D519559428222BF553AF3689B064E9C8647F4 - -Len = 1328 -Msg = 2ACE31ABB0A2E3267944D2F75E1559985DB7354C6E605F18DC8470423FCA30B7331D9B33C4A4326783D1CAAE1B4F07060EFF978E4746BF0C7E30CD61040BD5EC2746B29863EB7F103EBDA614C4291A805B6A4C8214230564A0557BC7102E0BD3ED23719252F7435D64D210EE2AAFC585BE903FA41E1968C50FD5D5367926DF7A05E3A42CF07E656FF92DE73B036CF8B19898C0CB34557C0C12C2D8B84E91181AF467BC75A9D1 -MD = 1F2727D5132C453BD321A9FC7AA46FB8B3341D90988C41DE8439D2F1 - -Len = 1329 -Msg = B13731617DC804E12B6D0208D197E1CA5A19206F697C7A77A36CD015F2A8332DCB4BABDCF4A5C63605E27AD0B57A03B423859ACC51D82A10AF5DBB8FD50909EDBCFB7D429B4F77933438B76CA9532BF10BD1F36B42612C662AAF299B8C9C88ED55E88A1FC780E6CCCB61594CC0B5D9905184AFDEFA5DF5DB1BE814312CD2EF6C89EAF002B0DBCD03814B71B6B1E581F51BDD7DEDA95733369F39849A9E8529F4104BA2B3438280 -MD = EE3F8FC815909572A99F05265404439BB1C04EA822D70589D5E927B4 - -Len = 1330 -Msg = 01368F9B4FD19B850547FA39520B328FAB5371026EF643ABE0CA52A1FE3214AD838183533E5430E79C4E6F6079F576797449AF05761796FEB48C2BCA074D318B7F3281778016F0E204B2DB0488F1FC5FC1452590FE60D133886003CF16FD5544362EDC86CD6570F7C3A653E3DDAC125BE266E39E92BB65AF965BB8F59D1326BCCFFB71F952AC9B95B68A30586BC524073E98911F10E4CD0D0BB9E0C0830BA0944236A747353D00 -MD = 63A0F3546D088D6977307DCF8E72CCA5361F882F06388EB34AAA4197 - -Len = 1331 -Msg = A876C4B9EB23D6D1A0874DFFB3DB4A23094425DACA15775BCAE881E6B3425D116C959BAB6B04DA1A772532EF92EFD9709BB1DD4CB3FF4411882209D3F95D90952692AFA66F9183E8CD2533346D3E5118557CFFDE039D3BABC38647A7C1DD0BA04804EBD8EA3E905BF334FC5844C0E6DB853B4F693D4E087DF754FCBA1C5B2C234EEF82349006C5856AB7E6E8FD8ABA1A3E7E373A486F4BB710A507955A7590B887BB6EEAE01F40 -MD = 246C7128CF90B9880E9837CC1972131D3D435CD33DA657B4A878A720 - -Len = 1332 -Msg = 73461B72151939F14C3463B9133B21CA31FEEC81AB2E32D1BC0EE079609A0E27E903FAC07A733062C1495B35DD1EAA2D11FEBE2CC98F832DF67BA3BEA187C9084FD421EB179293B209BC142B35159AC5057EAADFDA530668C6A645B235E0ECF290BF3CA902FD27875F129EC1913C82A6E6D6CADC63FA672D540554703B25A8CF1B92948B310BEDB4CF3CE581C188661579401CF107B3FEFAC9B642076A589CE28868B3DBC78D00 -MD = 2DEF8E3B6B74D52AEBFB159B703F6D4C9A6BA2579CAC7303CDDDD31B - -Len = 1333 -Msg = FDAA7C54912A9D81983FC765E53A5B99B5D478DA0EC137A942D7282D3C97FC674EE734CC9B3DECA4D482E33052D1D0E1F47327ECCE1129BDCA5DD9DE6C5722A54DE82E7F4B223219E6682AD353815A74862B03B2B852CD7A246433FEDF1E7F3C95E59A9FDB00080A4C7CB5473E5E8A9FC2784AFB8730F5B3ABE0EA489C501BDE120B9584D45074192A16BDDD8172545DB3BD993FDBD3D721F4B3E145594CD3410229427985BFD0 -MD = 7803504C4B5B2FD457DFE218B45124F169B3CFCA9915F3BF12C4BBFC - -Len = 1334 -Msg = 3FB8DB0394383660250C48371EAA971C4C2F5A3088F028E759FB9FF3775CE1D6BF7D3B114143B21B5C98C7A60D760784787420BE0B29A71663774D02CAB07895B14D18AF5F26B58D97C87AB6DFC5E6C5023880F2D181D868A4938761377F085C51134D383B19F10B9C2527E20EC3ED5603A5F8182EA3CC7A1204B331FCFB17D1E0D42819D18691451051B12F07C2E3FA908842DA0B7F72CDD0E31D7B80552526B36F20C90E4A6C -MD = BE990555767893807C28EB877110265B6656F63518F1C1BECBCDC169 - -Len = 1335 -Msg = 9135F850B5F1C12FC35D88D789F6C0C489F4E5D09C3FFCB4C0A21A6532ACE66D192B214E8E82F099F3CEF20930F1E8FBEA47933016457972BFF66AED7FD8295B01F1F2528CC98A04F1082033D8240749EAFF393E6247C03F51C8250717F10D4BAAB223C86F2189396B48036B0285FB38773915F8CB9AEEC5A0BD117967FC220534A23EC333C6CFDEBD66C526F10E91EA82CE0AA4039C6463278A10F9763528C5A1555213D4A2BE -MD = FAAFC927D8F6C668A277518A4D82225EAAD2B0C1FF92505BC5697673 - -Len = 1336 -Msg = 0D8D09AED19F1013969CE5E7EB92F83A209AE76BE31C754844EA9116CEB39A22EBB6003017BBCF26555FA6624185187DB8F0CB3564B8B1C06BF685D47F3286EDA20B83358F599D2044BBF0583FAB8D78F854FE0A596183230C5EF8E54426750EAF2CC4E29D3BDD037E734D863C2BD9789B4C243096138F7672C232314EFFDFC6513427E2DA76916B5248933BE312EB5DDE4CF70804FB258AC5FB82D58D08177AC6F4756017FFF5 -MD = 5E745F8966D91EEE013B061281BC20C79B0323000A15BBDE7E0D25AE - -Len = 1337 -Msg = 39CFC640D96492FE5EE066C51815F22D0EC9069BDE5A1062E578B1FE19A045A4F77FC367B44CC052EA0092841AA1B2D36B5B4F5023F4139DC9D36C6A45E25CCF173DE83CAD177485E1DC089DAFB5FCE3F3103372675AB5D1D54D8AD9F91A9CCE0E55E14FF565ED156FEFCCF244E976ADCC41458D1C8F709F0D2BA20E836B532D5C2475BDBCE95CE32633C63CDE42A76AA032F2F4A01F6B66EF2B666C34B2EFFAEC5C85F880EE3600 -MD = 6FAEAC205638C91DF463ED9ED7F095CE1E4102A10B0509532CE6CC2D - -Len = 1338 -Msg = 6E126C93AC75E3C7320CCC9DF871C1E414D5A88C01A90BB739E84F7CD4053781C755DCBF96C9C69558F270972F2AE1622D5FC47D52DDD07161ED302D66363C50C7E8F2523B6F4ECA6C1CF71BFD3BB91D8EB83ABDDFA0C1E8CDCF4B2EB2A5949D3EBCBC6E9DA9918AD21F5EB1261C1CEAAB1ADD82034681460441D0E5380DDB02678915113D77F95EE3D42C3170E14A559399C3CB8941FC953EBB3E913A73789E5D298D6C840DA900 -MD = 89F7A1E53425986765EE34CB569FFED3E7BE9573549C320D3E71C348 - -Len = 1339 -Msg = F55557FF8DE74819A835E310339E4487E743C20D60DB4162581B160AA9C1C5F45DD760A6FB350FA7C3540E718C25FE6E045478D57932C30E710F0EAABE473AC7E4C789DC2BCB10AF75A4B0DAB28352EA889C257848C885D5E25BACF44ACEA5613BE7C2F34B0E1C3E60B092E84393592761AC201AA63CC1327C9BCC590F0415FDF781D038CC23631977FE6FF968D63C0AAD3BA1678163C4705F46BE48AD84C418A10291E7048B0B40 -MD = CA046E40B2FCD54418E45894AA87DCCB5F5AF12F8A47A5E875A2A5A7 - -Len = 1340 -Msg = 58DFF83B67C6E67DDADE60ED6A0C268047FF37144EAA34FAF2FCE48AFA56B7733C0F4107AEED3695ACE8C4B55A59195E1E2FC93107C1147A38B1E48ECC1601001EC488491412FC5F23565FC7F51AF9B0DCCE5FE954E59309BDF99BE3959865BC9ACF18296F150BF157EAD0A3BBEFC43A50AEA865AC390DC0A69F813FA2D9A83A99695B918538DCB798F29D9FB909EDA9B06D83302B8E04773F911CB2641AE861D3D12FD49FDF7FA0 -MD = 6D7C40856E2826C4D9528D8AE2EE5431717380F37F205A6CCA123DEF - -Len = 1341 -Msg = 3B5E3D1050E346FCB62F940EBAD635921CE417C934D3589691AF4EB303EE1B0268E19D3E7E77F3C053617ECDD8677AF9FFBD15D94013AEE8BD2096252A1B31014CAF1B75BF197566EC217B979166C43CDE5EE8D56732719CF0CAC6096AAAA54CD606BCF7279FC202304C1FEDBC58A77CBDD40FB058FDC95E6569B0B00C8ED5EF60E54816585F71829AFF637C75272C7A5E08B6B380A23B5CE11368BA6BE566283E4B78D043733810 -MD = C1186772F02678B6D8D72665822B97AD80105F78AE86627E8F62CA50 - -Len = 1342 -Msg = 5D2333C4A14A60656AB7FAC56229020ED2CE882448E1FC052EC15468AC4B4BE980D042515EE3280D0F9A6A100E20ECBDB415BF52F620B85C94D2652304FBF053256A6CF5835C57652DFC7F999307E097417EF294CB3EA68BE9E55AB65B55D57E625CD1C4C43D6F6B2C391B8229CA1051D085D485729565BA2B4BC8EBFACA0A849A8CB5F8B6548AD1BD66E397E3AB812026210CE7A918A7F9E41B600D360A5DA1C4D9508733815F50 -MD = 9422A5BD0EE95A0DF123132F13EF806399F2C6556941ACDFDDD54833 - -Len = 1343 -Msg = C2F40504BA614ADC304AFEE4C618E6CDC679B644D42829C105F1B0E4470334C566D580FEBC52E425A85DE9E341BA19BB42DFFE31B5096027E13334603896B76E3FFA4C9B40D9FBC4D0DD6BBAA824CA0B151FA56C1A6709928FB853804F0CEA2242B08159F046B28741766337E0957793617B0446E1468B279A037ED18305809EBDD74E36E7873C01B9363ECE9AAFA8E96B43E2AB289665234F8893707C491C6C3738E604C289BE92 -MD = AAA9C8B89F29A3337225A4F15958F5991046DA2A05B4DA5CC0D3675B - -Len = 1344 -Msg = C3236B73DEB7662BF3F3DAA58F137B358BA610560EF7455785A9BEFDB035A066E90704F929BD9689CEF0CE3BDA5ACF4480BCEB8D09D10B098AD8500D9B6071DFC3A14AF6C77511D81E3AA8844986C3BEA6F469F9E02194C92868CD5F51646256798FF0424954C1434BDFED9FACB390B07D342E992936E0F88BFD0E884A0DDB679D0547CCDEC6384285A45429D115AC7D235A717242021D1DC35641F5F0A48E8445DBA58E6CB2C8EA -MD = CD2EEB7D48D0260986BADF16F15AA09B5229B7830C73EE95B8CBF85A - -Len = 1345 -Msg = C3CB3CE5975C2DD22C8BB03A4E86271D01D07EA027B7557E6EBA98A5CA4B6E8CCCE18C02878C7479D92E546C2961CB99269E80E7A61BED7F1E0FD5ACE5DEC74B8D3F5F2CAA0717822E78EAF8BF1BBDE53913BF9814CA4103C3A98D559FAFF2CD503972075F3C04C8D9DBAB07F67DDC2B1BA43DB3A13EB6574C5E7B7042CC1C7F182BF8CA384CAF5704D3C16EBED4539A7DA4A396F8180EAC0186A99F910B8710EA081B5934B39A1080 -MD = 6F26C9FAEA2FE9A99193BB9D8FE507568C6ECB4278C5FECD0B49DDEF - -Len = 1346 -Msg = F40E5F1455783F8572FE80D3153C87D5BC3CC1E32163424E57083619716ED21C5A055FF1E8E0B49F3B860E1704601ACFFCBCAA546A98F9B86709B74121753FDB16DF79D099136570DDA02948921F52D22CBE958248E0A2B9B6E409146C3DAC0002224DB6BCB40E86DAADD4E51F17ABCFAF21535171217D421E828546A5F1F648D4003431BA5C24A0A540FE1F31A7CCA19BFB5D17B943FE774BB3DB387C8B7352E7E1B2E43A423C6A00 -MD = F72AE7A3210B81246C3594578B835F1CDDA380EE02C48469AFA3FCFE - -Len = 1347 -Msg = 7D9D6BF2422DB04E8C9D0F8D2AFFC296A305021A82DD99B5A0CF36B7B94AB0BAFFA1683A5899FABEC74909636D1EF585F80DB9817E37D09667A4A4FE5833624548B24F87BDE66B66D758A4B49F208C75A5EF80DC5088BD05E3DD12DE637506D4E10D5E1D73179D577361C7B7C98B36DC16A7DA068F3430957FCEB669D3C0ABDF0D7DEF41F534ACB9B124DDAE7E57CC9915440C1B6D8996179E6D796C90D254A4EB8F0C4CAC1ACFF3C0 -MD = 1607616C415A6BB6F650F14BA13F5BA5C7D1E7DF2A809252081FDAE7 - -Len = 1348 -Msg = 07B8187B9A37B5ED72741E4A43724ABB1A14AE3D6A62B74E3C81A8B54C9B71EF81A2704FA5DFE752A2D7FAF9DA5D046AB6BE4F3E7F241D89D79A77CC6B46EF7442308566B4604431FB4B865781BFD4549C116160FCAC4FAD092ECD4C443DA5FDD5E2977D6C18714B1315B84B2778141710218B6DB4A21BB4D1F294907E3F1BFB6FE51E7A004DB8678BE9B799DBB14BB3A4D4190E7D33C69AA8EC772EE2A20133BF968DB96F2F8E1760 -MD = AD78DC626507B89BB0245DFE2D64D0F9E576845C24384F391D7E119E - -Len = 1349 -Msg = 77206E0087B19C5F785F0FCA287AFBB804589648A52A4757614FC17B4B90BF68D3F4F103487F8B7FA7A31A6C6E888EF6EFD973766CD0D189C80E7B33277D22B6DB89108AD4B3851709B749F535ED18181AA564F05ACBADEB21BFAD4AF5FE1EF08DD72D26F4720586D153C8A6F2BC14881EB07FB0C6B88C004EFCB8A96317468F62BEF8B6532E6AB4F205400B33DA576E0694D4667BC66FAF8AEFBA644A820D548D3F90657398B96020 -MD = 15355DFC169C08624AFEB449541CB6D537CC6A252FF3ECDCCA99866D - -Len = 1350 -Msg = 96D0600089A412478237ADC295FFFE4D898DDD2EF945BDB7F2202905699E16C9F623A17F9525234A77A4C51BF594E8419D9A82419AD954A5FCBDA1E46185CB872F2CB729078C6E5EF7B99B8AC4BCA5F9FF58D9C22F128CE12E118661CD4BBB32166191E46348977284EF07FB9DEC83FE46794B2556FC74D0E8AFA9ED59C25C928F03A2D7CDA4DEE0180FA00B0C04EDE8879836D8A61BC0168226F1EE0CECEDE25C835A4253757CAE5C -MD = 4410CDD2D1EBD307775E5017BF3972489E0DEF2224BC9310249C5D7D - -Len = 1351 -Msg = A9FB6E614A0D60016E54F7F76379AB10662A8147E40C19DEE4303DCDA99E08ACB8CB14CF41A42541C52865A5106C8B1278CFFADBE74015E4AF6A21EFED08A57A0C8E71525D75FF08493398B7F1A45BF92E6BB571E05A01DF3004B5FA4DEDC71405EB302587A2001D82CE4AB6540552E6418ED617F1807018917FC9AA772FBD4BBEE3FC43BDE9113D7E33A6CEA09B2B8B6ACA762DE6F35E78F52E28EA131DEFF81C34AA51B24D8FB210 -MD = C0B2B6D92E6B669BF6E516F84042935D9B6A5AD920288066FEB5D232 - -Len = 1352 -Msg = B39FEB8283EADC63E8184B51DF5AE3FD41AAC8A963BB0BE1CD08AA5867D8D910C669221E73243360646F6553D1CA05A84E8DC0DE05B6419EC349CA994480193D01C92525F3FB3DCEFB08AFC6D26947BDBBFD85193F53B50609C6140905C53A6686B58E53A319A57B962331EDE98149AF3DE3118A819DA4D76706A0424B4E1D2910B0ED26AF61D150EBCB46595D4266A0BD7F651BA47D0C7F179CA28545007D92E8419D48FDFBD744CE -MD = 3322FA727A0089F500A6A99D67419A76C7AF77EF2893E8D385B42720 - -Len = 1353 -Msg = 36FD2EF569A5A40207DEC3C593DCE23194D2DE040551345672589F374ACA38C0ABE149F4E38D53C1B24F02BB06DBD9FE3703012F0E5DD9FB836F38BDC62FB11B55EBEE418686155296A54077D71E05546188C6381D0277BB367D2C64EB1977F100B178AA2530E1219DBC0381BF52F1C81897AA2B7075FF775EF42FD948A5F751C8A2CBC0B5F591685B39039BC08FFC7246E9EF8EE8B65AFC11A3C59C25E9F020344CAE26BB62DFCEE600 -MD = ACA51D080EE7E799221494072BF7025FF63E8FCAFB9302FF8695A7A4 - -Len = 1354 -Msg = A868924523128669E906EF130800AE8CD611A019CD74A3BBA69535EC017865BB576DBCA2530803D74EBDF9A280D0342F84B1D428E4E447635C0237D44C48190E595294B44283BED2141FFC8CE76B8D2C4CAA166B81AF988ADC13C28CFFABA21FC625EEFB2B70A6D3C0BAFC91B7F07CB4861B689A45CF70D0F61F37934A5D7018F206D1E327DBCE56F347CBE576F1218270DC49F7C1D63B76A21A354B3CEC87A1A57E8BB332BF39D6BE40 -MD = F3EC0E832C740BA87D386B12B6D9301173F77F8A0C9A05ED9DFEE57D - -Len = 1355 -Msg = CAEFDB135D53FA74983D99E6C0E003D451084699ED4AB28959A931ECDA5FA7E45D54D3345987DEA612F20DE812F699E9272EC5599C365D1BD948B0AD2C30BA9C61622C06814FFD397E34CD0D6079D88C5477648607BF33160AB1853EDD71547132A4C0BCB89463CFE0D579AD4D042BBC6DC2C8D529353E004786CF7FA457AAB6723A70B2BC51F71E7B472B5A7C0D90725CBBE355323BA4ED99CCC6703FF13853F686AE3381003DE704C0 -MD = BD78942088240ACA0BF542977B0DE4576D69DC6598A06A37061063BB - -Len = 1356 -Msg = 49A49E75573AECAC91FE025544C29871E97348F0C26232E008BAE56EEB1D9522C98251A44CC8E34F081554E3156F41408965CB9315A1CA7A53D14193500D155EBDFD3CF93F7DBAB715C49D2AAB0C82D165E7A792B8A5DAD7C2C1DF57501D14E20CD6F3C207B07532F772A55756E237405BCA9FDD0E9E6307FBB2DAA3F8B0FB6B2BB0D350E933837A6E742AE9D242578ACA6084CEA26E3D046A0A7158ECF4E852785DB96F72D8B780DC20 -MD = 36C674D8F8E16DEBAE443410C7072963C2E17C79850C14547BBFFD52 - -Len = 1357 -Msg = 939A4A630A161EE6428D48E351FD28190F9CA3E99418855FE282FCFAF85D9B995EF83C934020FE4D7104D9E6191AA489CDD37F7002C9EBC3ADF792DBFFAA2EA7BE1A1F3D7C0616479376C7660BBA1DCA7633474F4101A68766CBCFBDC269E81305468C93D4FF6B01DE681A38C6351DF0C53DF8807374B2AAA487F93A37D2B8C319218EAA06DE9470D94EACFD3083BCD78D29A5B85B4653BE36F1A722DA6AFAA5C5609EEEA47BCD33C850 -MD = 4ACE01C54D00DAFFE91F5465EFDCE43999BC746685C5C806E21C0641 - -Len = 1358 -Msg = 5309B29396779ADEC58AE82992BC55FF47213BD044F67070C5453201A83CA555C9A009FD7B372C50282E5947008D0E7FB125004148884EC2C88640C91372468B6EB8F884C983C83090282EEA7737D953DD2C6AF6A85FAAD6CF72A14512849961913F14EAD5F203A4AC7A5481AE2BB722C6F0427D61E6CEED47FB181CE29642C753282563A78BF6ABF1854D9B1686559439A073E2AC2FDE86BD9955721F9B69288A61F575BAC5450DFBF4 -MD = FB28E948BE512E4E0A2D93BBE52910A37348463CA10500CF76B704F2 - -Len = 1359 -Msg = 2E1AA86E98FDA5D02B5A87975A497001E6CBA9DAA3DFAB73247BA5711C94C920D746B35F91669F84B5B9D18938C2A670948BCE4050AE33615B1EDF6F4C4463C40A0DD16132A27D8DC2E061744FA443522FF8321A92C71B14B6A3B75846760FCFCC94580FC830E5BDE5C7C3B3BCAC45CA8A7B71D6313D181F6B3A02B66FD1C2C8790DD87A743F7A7A48958BA1BE4F57B2A07D6B314576D9607F4BBDB62C3258DAFD24D3167A3127D1C00E -MD = 00502501A0F586013C04AE4CC5469B19D6313F745EB3CB1D4C92D6F7 - -Len = 1360 -Msg = A983D54F503803E8C7999F4EDBBE82E9084F422143A932DDDDC47A17B0B7564A7F37A99D0786E99476428D29E29D3C197A72BFAB1342C12A0FC4787FD7017D7A6174049EA43B5779169EF7472BDBBD941DCB82FC73AAC45A8A94C9F2BD3477F61FD3B796F02A1B8264A214C6FEA74B7051B226C722099EC7883A462B83B6AFDD4009248B8A237F605FE5A08FE7D8B45321421EBBA67BD70A0B00DDBF94BAAB7F359D5D1EEA105F28DCFB -MD = 234C1BC03FD4C3D38DD4C736B59A9107911210D54E98B3A372F57236 - -Len = 1361 -Msg = 65A13FF28557E4982462A50B622D2B33D68CE803F2BD202F9F930AE5BE9026425F26C640992BA53AA014F7B0765DD49FD7C843A20D42A3135C2A16532B79CA414B65E9672AAEF56D20F72C63CA115153BF9E3EED2EAE0A03A3B054F4868FE8E9F83B4F9E4CE1A9CB87A88280780F8EFBDEAD6E3CDC1BD27000019D38DB3D4F4FD467B4F9CF2DFB4D46A1ED63EC518B72FA301ADA91746495D579FDB94D147C55FBE8A8E4F5A427E28E8700 -MD = B5E35F356B38067415099D45EE838E9ECA6935FD7E53AB9C5A11694E - -Len = 1362 -Msg = 1045E853FA06432CC0C84304B661E0BF42E06D1212CE69CC6BE4BA28B6B7C4C62679B58A137C5B8CADC43F0E353A2F824457D0D9FE8FE017150DEE305F6346EAF01F9E220A4233F5674AFCF1C29F2EEB4B283D97E3695C007E62D453FAB2D192F16CF26FA7E048BE5EED75809688933D55EA478BEAAEDED1F7F07603ED77CC19B9557197848E606426D7B363ED592512D0488B95618940451D295D32A26E6C155D13BF3A17C65894F598C0 -MD = 4FFD7A262FBC35DB7A0EB115772CA62D03FD729CCD2E22A621C34A8E - -Len = 1363 -Msg = 3C10731D5A71E84653384B14B09D136B3B5A5C1F426B6C717521643912FE1346178CD03638F5FFF9584E3E4968E6D8BF2D0D00B893BE39A09F6EC23239053D5E5AA8D95BB999938CAAF66E12C4BE7D65DE0713DC352D9FF372D70BD9C00B3A0133B989449F4535B4FFEFDF5262C3A8D1DA90111853C0E10D4AD880E911880BD7C325804BA23F465916C273325800B04BD6F18C7885D7D2368A099A84367AAC420A865021BFD1A379E29680 -MD = AAD36CFC1D7811299844EA734BBD0C5CDB1FD41850D90B14123B4276 - -Len = 1364 -Msg = E1D0B5DF1D9D66347907624DCE47F60B127CE791BBB92933E5E4A976509CFE339527540B602A8A73151B654D5B8ABE44D2BBC887CC78A08826D15A2FB8A1FD33DE8E7FC57FCC26C93E2B95F2D7C9322D4DC6C955B844063FC00508ABBCF85408880F73298211A7E7EA3179097E5B8113D3CB95C85F3BA015A87DCE752A0A5AC4E7D0C7B53014AA1ABA3921AA12A32689CF7DFFA5AD6CFC6EB68816AE3DDB5BF6FE77AA80A647995490A0D0 -MD = 868857D4E377ABFAA6370CF215AEB7BAB58C1E4C6E8F5F196E633C62 - -Len = 1365 -Msg = EB46065DA3891E567295BE6219759C53F3DD0A85BBE66C93292120E35C0ACB54AEFA0785791A0FD1BE185DE702A684554FE5037C74906332F0755C88A7D8D5281A793ABE36C9FE1B0AAA79C67DD80FD84C0A07D83F63D053980FCA4FC5E11C8157FD57CE84E939FFC574EE8274C8B2C3608A0FAA1FC8D980CE5526F9D1D73E65B1057560B62A69BBFDE5649A31A4FEA16DB8835251673E1A1CAA2542B248230A9F7C7DDBABFC4474B8CD20 -MD = 09B9B587F60A2E659C6464D41CB15991CD8347E59D6BC1B3770B8160 - -Len = 1366 -Msg = 97C3A9F14749A457F890C34FDA5EA43A7AB1CDEE0EA0355FDA7B0027D47072B25A8ECA77C5FF22CFD0AB66E443E33315D3303E06693227A05F56D45648430556307E0CAE518E64E173EF36DF0B3A18900A4DA6D31AB65D40EBD67CB027F2584B3CD266625358905C9C482B61E41F6F11FB749785161FFDA33079F21DB116E2C25C7773BB3A7EE85E23D940F95F3579B90DC088E407997393A5EF709D477BD7E5A682237D1C7E835076FD60 -MD = D650EF6D68DA5E7ECD6833BE73FCB3775667A4D0F0866CCBC66587C0 - -Len = 1367 -Msg = 411BAE7879445A945453DD7EBBE35049A2537031F12F7A90C712E6D72C720E7B21E15D4523DC0A5EE090522A69D2786253136E5DEB20FE0D260A67ED509B88EE4444B86EADFCBB9D365CA16BB937065E17B6D6BE7697FB337E1047E91E211489615BD4BD85B5F90B6B44114D0871D9A0890CA0F9BD7960E927C5E6EF0E0651AB7C66E2D1BBE65DC29E8557C15DC5A15076C7AF08925F93C615FDB8A50F99C0FF427589619AB54960880226 -MD = 760444759966C2D20A6E642C5A7DDCFD780C2EABDE1011107C08F76D - -Len = 1368 -Msg = E4D1C1897A0A866CE564635B74222F9696BF2C7F640DD78D7E2ACA66E1B61C642BB03EA7536AAE597811E9BF4A7B453EDE31F97B46A5F0EF51A071A2B3918DF16B152519AE3776F9F1EDAB4C2A377C3292E96408359D3613844D5EB393000283D5AD3401A318B12FD1474B8612F2BB50FB6A8B9E023A54D7DDE28C43D6D8854C8D9D1155935C199811DBFC87E9E0072E90EB88681CC7529714F8FB8A2C9D88567ADFB974EE205A9BF7B848 -MD = BF229F4017E1674D4CB87B70D3D777C7114F085D77216437B860D641 - -Len = 1369 -Msg = 85B3E18D46E358D5BE8A54559ECD1869416AFA911BB6D553040FF39BF7E0886FF7586EE57A4972A9C85ACA71C7D85E2391E2B168C71FEF71BCE1404DADA3C302861FE17A1199CA115A20F3A5F073A3C98FC65D36A03F02099A0B5E9D3993CACEB2636357DFCD05F849A71B8B765FBE0558033ECF0A4E8FC6678325804B5554DEDD02F5A50B88B81898E31C621557624B52CC3431E07B0B3281CB452B4D92C5F7D283795ADB9787E0C4D1EE00 -MD = 095CE8D65FFB8123BD49DC767D8DD60A838974C3CA3E01820BC1970E - -Len = 1370 -Msg = BDC1CFD804C90965C32F231EFD3483B12D81CF36497D0C5CE5AD10E9F1D6A47690123D86F5B7D92A35B13A4A19B6BECCB493841C5D78014D7F200DB2E6AB53EA9E9D0F32371E037E14F5E03359A5F5682577E47E08AB5BE223E6C34039D3BE6CEB345F2CE3C4BABF4AFB0CDB336D97CF06C6431C142FC05B50DC0700EA3ADACEC0F08078A5F7EB61F4C6A7015BDD1519389B4FAAB4F93051377B0A324FAFE3AB84F2BD31FBFBDD919BBE9CC0 -MD = F340D49B3F3FEDCED13CB7ED240879CEBE0064505DEF9FFD779DAA68 - -Len = 1371 -Msg = 182CC05EA535B6507804ECABD9447E181E602C8B80AA08C4F594753F4CC8156DACCC95263AE798D21438E085A4C68E3B3E29E99B7B005CD6E7479D113B255804084123C3313DA10C6D205B384809B5600ED73EAD804B29CB2B39E478941C84C937D6DBE1B670E0AE4C40316431B1DC9E84728E079CD1C087823471F599A2B02EDB097CD17B251DC10AF677F0E9B6254F2F7BFEC1CF9A30F4E5790CB671AAAEBFFB6862D8E75195D2AEAE9E40 -MD = 1F9A285380F4416D126026558FC2F452D89CEAE8EA73834E47A93E3C - -Len = 1372 -Msg = 6DB97D9CDC81366D8B1652EBA9608590A389871428F38725C8665F571E2F69B12D2268B6912D7AF51EF0C3B254ED335F3924675B2A6F83699705D3CD5DD8B2AF4A63DC44368DFD6F5D4E15696F4FCC71D6727ECCB83734AB9243A6C29C7184BE593D335222A2C1B15117C7FED7527B8D5ACF773DF6F61F34B79A225B66FF74BD1CF839C5D5DC28E08FEAC32A9C4959931D114AC39172A1F6EEFECFD0437D86309FC8538777A030980DB93610 -MD = 2BC1C979FF6F1CF64DB27FFB230D1CAD5F08917F48BFD97AA0A76BE8 - -Len = 1373 -Msg = B71EDC0731A448ED973F53998CC6988AE0B5FB1C8A7B75FBA3975C6AD65E2F003528D6B1BEBFB236BAE5D731766E97784EAC74EE93B432933F72A94B063BE3ADE93AC63CE35A78956F9FC00063EF6170B565EDA7A71294570F0CAB1E80B924EBD343AB451C96A093D9D8823B2CD2287C45298C800B1433F0C5496C1652008147D7F87B160F717E6F57BDE6A5974D46F25CD8CDD9202E90098487088461269E21E581F12529600E68D6715AD0 -MD = 41AEC779346530161ECEB7855EA8FD0482D35051A92DCCE331C4E269 - -Len = 1374 -Msg = 64FAAB8A8E7D4548A733309F81FFCA40517CEE9EF4B134157940B0E52C8F071EC60F073BF95C1D5172999783B8DC13C7EA5FF5E487E04E681D307C89AC67185882A5DFA18593D3C6552490A06741814DD43C333D2E70BEA94D3DC2100FC67886B27378541EE26D8AC08D14BB1A0BE10963B031D821FCE5FAC64E267307F04EE942F5F2D4B5CF621C2BFFB6DCCD03A200A11CFBA6ED13E48E9DD9D9BFBA1851159BC9E8AC4A69D0A97DA1AE88 -MD = 3279FBFE45A61082A34C43B24309E05242A1CC587F92912688B5CE35 - -Len = 1375 -Msg = E8E01A8CC8EA94EDC5E43E3B1E147DB402CE56040B87A3C4036D868AB599C4B10BF522DAE9D96551C29B2973EFD816310DD4EB56DBCA9E4F4BAF51989A9881A5C5635C4C0D6737D5C34C89C6A5F0B23D4CAE3A72FBC6C52E3B660BC9A169AA805580B804DB77027159CE5581C5479A070FB0781E059FD422F7D17C7BC14B8CCB600ED857E1C0951C9DBD9EFE72A65C2D937E9405025A251DD5C8BEF9EB191D89F035A660A4BBDDD74BFE8606 -MD = AFA9FC5EE7D3F2C4CFDA327A347E1ECCE2C84811FE96D7EECF03F483 - -Len = 1376 -Msg = B10C59723E3DCADD6D75DF87D0A1580E73133A9B7D00CB95EC19F5547027323BE75158B11F80B6E142C6A78531886D9047B08E551E75E6261E79785366D7024BD7CD9CF322D9BE7D57FB661069F2481C7BB759CD71B4B36CA2BC2DF6D3A328FAEBDB995A9794A8D72155ED551A1F87C80BF6059B43FC764900B18A1C2441F7487743CF84E565F61F8DD2ECE6B6CCC9444049197AAAF53E926FBEE3BFCA8BE588EC77F29D211BE89DE18B15F6 -MD = F95DE3F40E5FAF58D3320B5B24ACEC7DE6B4B7E54C2F80F6D314AB5A - -Len = 1377 -Msg = 52C72BD51E24E67F69619F02DC7FDD64EF2ECC334E3F425CC96D9B634A0FE1346046D4F7E19A7075562BD22EA8B335AC3E1068F86254B43DFC388B702E77D90B73BB0EAF6F341E0CF78DA95C9D098911E7A93B691160CCD7615AB5F7BB356D5551326EEBBAA00D6CEC324BF08D46DD0092062840BB790C5D4145EA722B7840A06B4F814E0CA2243DBFB1D9F869A2711C691004FA56CE16CDF67886C6FD0C6280C4A0662DD7DA7215E9BFB3D480 -MD = 8BFA17116FE7A28BB64E167F770C42848937D740B66CF235101265A3 - -Len = 1378 -Msg = AFB597E82538398591806218893B1FA841954B165037B929D0B3524F9FE10D9F0427847F565141EB216E27FD2A74A7293D3C6EC0C6652F02E8F68F9CAA1C1711CACE6681E857EC6DE0C2F4ADE4965934A0C2CC54B2C3B5C8C2F4C8932FF2EF22860EF81776EA18DF6C3E03E9F61C845CB8971C63DD9D7DEF53CF4EB71BAC71890E08855A5134783A2268857C5098C30906118DDF44A60ABDB8289045F183936F65E5F036D92A5316B05DA64B00 -MD = 5A5BD5E3B266B4F106948D7C84B18686F1A71DFB4F4E6FDA0987D1AA - -Len = 1379 -Msg = 791B9415322D15723051857ED74D2ED3C7C6576BA23E8AE8204FC05588C16C8FC70D6005ADBF7C96189CC8B0CFC2CFFCCC6623ACC59E5C7AA94130308FC98AA1768279DBBFEBE893511B10C23B93173D0E0D0045679F0DA7E3003034F01A7078D37A4D1061D48674BD924612E9433EE034D3EEC990DDE038FD2276CE680C933E6C987F20E3ECAF01012CAEAFBAEF8CECC41CB42897ABC51D9C4325507D22833F2ADB7132FC8C653357308E7880 -MD = 1C1F1138A20FE13B6C53C03B494A26E48E517834C50F1198019263DE - -Len = 1380 -Msg = 2CAEF41468981905BE646B56CCD195134864FEC4EBB1D745D797E0F1C0248E7B56C2DBE73EA06F0BBE9033AE741635B947845D0DC4DEECEE855B4C7017E638468F20363B60273F6AA8EC3C5440E9D5D8CF6EEAC954B54D37343DABEFF6ECE1D4F9C85A5F79F7AB64C10B91CC6A9F5309FDC8C36C5704870537131E9918CC44FB308679EE283E729A097329AE4BCFDF8D6244EF97A7BFCFDEF00A6DE4B1B34A5EF2BC34DEB40C98F6AF8C7BD910 -MD = 68E68C7787C761B24BF4A52C2F3C78D00FE9AB25A9DF1A91AA3F9FF7 - -Len = 1381 -Msg = CD157A1F0076499D06D822BBF48EBA19FE4D9EB7A0CAB55581EA89FBB362FC67FD4D58567C7AE04A55FC4CF821A28360911782838ABE0EE4BEB982382059F5E4E944338AE9BD974E9B4430B65FC8759D407166D6C4AB9EE23F430E7018988655BE974A8FF08E4B932858FAB8CD314804FAA12B51B17BEFFE6846B0D3F3A5A42A13D844846ED813405D3DCF7F06C51B995D6DACA4EA50C9A77A372E4D67C295B1362EC96F6DC442032D56FB1E68 -MD = 25D3418F6731E0A41D86F3B015AA1223AB9F8CEC23F3F0025FDBD32B - -Len = 1382 -Msg = C4E9236E259392165FFF38AF36A5797AD66D670D0CDD283409CE1B2DEDE1E3D2CDDD50003DCDEAF3602FCA089DF1749B5718CDB1303488DC3479FE9C6D08A9976EA90A207628FDCBE513793068A8D6B1DC7B2CDCE92BDA7C9E3AAC8EFC00A9230929B3B4752B1FF753E20A8F79DFC65FE433B4B2A4BBA4591B053CAF333F05E590DD9BB5191AFAA8B6AE12FBFC92736B5AF3DF31B3900C76A443B667394FE6AAFDC0045D4BC3AFFDF4822E565C -MD = F1DA2B8D4A717E968AB2EE06D70D16EC15B5E7A418802D4FDB81D8FD - -Len = 1383 -Msg = FF273A0DE1AEA7B291BB606A75DA03511A80372BF12777462BD2151B6807604CDDD0DA1912691FCC03143C43F3E01E8EAD912FA16A2C31AC1C09144ABF6A41F300254EE0DE5858AB6E9536FC6C03F6DBBF91CF2C1DE2604BFD662072299C6A1547F1C3433B91BEF6616B7CD723433842ADCF6F1D38D3B6E3B28F603C068F4CF1712F3A8A2B7C5778F167F835981665B1030EA8D2591C4C5EF22897BE6BA626853D0F180A899CA8377943829646 -MD = D20AE87A6FE6E7C81FA555856750422E386A6C0CF061FC882D7486D4 - -Len = 1384 -Msg = DB11F609BABA7B0CA634926B1DD539C8CBADA24967D7ADD4D9876F77C2D80C0F4DCEFBD7121548373582705CCA2495BD2A43716FE64ED26D059CFB566B3364BD49EE0717BDD9810DD14D8FAD80DBBDC4CAFB37CC60FB0FE2A80FB4541B8CA9D59DCE457738A9D3D8F641AF8C3FD6DA162DC16FC01AAC527A4A0255B4D231C0BE50F44F0DB0B713AF03D968FE7F0F61ED0824C55C4B5265548FEBD6AAD5C5EEDF63EFE793489C39B8FD29D104CE -MD = 04B3BBBDDFEBA441005A48CEBDBB1C6B6A674C2D9B224DA29844374D - -Len = 1385 -Msg = EA61FEE3D84881B73252C723EF892EE3D60A8C0E7110CC35D63AD57F0763804DC54C312A2AC900A3BC853544FE1B9E8FEA9919DD96C7C4CF2ACFF778A7F7D7178D60E7EFA92D2D4B799DF82B3211EEFEDA49A0E95EB20A7396295FC7C30DC364D74FD23C324F1F012839B51E972630AFD62589AD3B153CCD5B9BDE845312D62B2A62D6D0C133643AD6FFF829B2F4CDEE0A398484FE203A853EB509E1269CD5EE7E7FBEC1B0FEBB044AAA36016A80 -MD = 07414836E643EAF4ACCDB8C653BD4C029622051846B1623E8DE96DC9 - -Len = 1386 -Msg = F1586589214B8CD84E5D927FD50736234739505CAB71DF09B22A38518ED55A880BED800C9E631F6AD8E6CBD3A92412A53217E5B8CC92E75235FEE0B383C7D336918B029BB7187978F15271D48C7022A99A048F93570E358FB8BD973FAC8D68D635E5C49DEAE188F081A21B6D3A029417DE1066235E2DE8D52FA10F4F593686BF534337AC15500DF139C391EF3E4EA43B4A1530498BB6E90AD08C1B7E0878AB1AE94913B36185515B3FBF7CDFBF80 -MD = 47C96C17E28229F6BEB6E6BEC5B78C4FE3CACC1E7E7A1794D27F7DB8 - -Len = 1387 -Msg = ED10EBF6ACDDEECA6F59FC92B58DED1903484E3760DF203E6553624144B1F2E092522E1144B79DE50E741780BCCE881B074CD9188A978428B1246111C894098A76CEFC4D7DDBDF92DC1D86BE09271F5A85D058DA63441B51AD5C10CC9E9262B0ADA8196AFD5C8B8B89D5C69FD4CFFFFB402ABA352236D582A16896B338A69B9571C79B53F3B0103267516998E4A709DB983462037DC23132E4611A4D829E3190CB58F0FE447BDC3AA224EC768C00 -MD = 42DB5745550929B504F7CD0F8A3834B72C7C5BFD1E7CFEE35010FD2F - -Len = 1388 -Msg = 4EE2DBF84BDC18BF4069449BBC6FE90C089D53371B8414D74F40FE3D43FF5F61541C643E259A0DB2A34EB8E7DA502C92A3919F29C61FD3365E8D7F571FB862341A2B6AD9BF0A4F71413188C47C3D4DFF35026AB91E55D4B3B659EB721170E89FA87E076124BFE598C254F5D9B9B5E1B7CC96E45F11402729FF7F8E4071AEC38C8EB303E3B7889F7922B4C54B8A66B5131D712809A7C18245EA099401FEF20A89E5F5680807BA7AA320CA30250B30 -MD = 7176DF67F52B628A0705B13D7F58B74958AF18F3B490550734C78634 - -Len = 1389 -Msg = CFB1DB8692375D3784AD79DA62D9BC0C04365706936AA01B23FD2351BEFD1BAE7DAF96B50C6BB7E1FE2303C50E4634C0812E3F097E123F6955ABCFD8F5CC6E37F68286A2135A327C24766311F5E1595024677F5FB1B3E0D7204C3797729A6EE71826D89B8E96E3D31AB98BA6CA2F266C39F8710BF4C15F388306077153CC26F395806FEA930C34BCEC873A20DCC2F9CB2D77A9C3D4FA3B54B20FE1FC2AA89D5BBF0C881A5EF04FFD73D51F701A10 -MD = 61BD431268DA066C86CEB7F3898B600421DAE808CADB7DDC7794DACB - -Len = 1390 -Msg = 8686F3296230432C11D4C534409C7F6C9410C6F01791E137C456874DD6242AB34485785F08233C78010C5EFCFE3AF755B9EB61D0E311BCB971EDE86AD070069599D33FD628DD4C818C318462940AABF9577199120D7E3840C2BE07E5BDA2F12DB777BFF7251048ACE87FE6B18F33630C2D6A50CC9A6B05C2C85A7A9972147A447CC036733B49CC5722139A2B299BA81ABCFDB83544C7F711B602A7C8372B0436B304C303151A4BE6850F315C8608 -MD = AF6C2D1512AE0463AA5650F47655F67EE516BF485B7461F7CEE49346 - -Len = 1391 -Msg = 16C331314AAD721AB955B9C268B2B40C7989E438D91ECF65EBDBD4ABBBAA69D77270FB48BA3CF63B249E78B58D9AF7A57E49E6883E1457188E20D1F8AA8A04A3ED5688E6E0AA4A0C011D02C04EA127D0F66908FEED9CA100E66C976DB5EDD08B832402644537E2ED1BAE1567418B11F017C026E473236B90EB1E171288AB04B945A494282A6FCBFB901A7E567AB31A89A30034F78AB6D8D199C4F03470CBE2BD8374C81866BCE9E91233E1BDAB52 -MD = DDFE7D65BB6AD9C0A39EF059D52963EF538597AA8D8487AAF69E43D9 - -Len = 1392 -Msg = BEBD4F1A84FC8B15E4452A54BD02D69E304B7F32616AADD90537937106AE4E28DE9D8AAB02D19BC3E2FDE1D651559E296453E4DBA94370A14DBBB2D1D4E2022302EE90E208321EFCD8528AD89E46DC839EA9DF618EA8394A6BFF308E7726BAE0C19BCD4BE52DA6258E2EF4E96AA21244429F49EF5CB486D7FF35CAC1BACB7E95711944BCCB2AB34700D42D1EB38B5D536B947348A458EDE3DC6BD6EC547B1B0CAE5B257BE36A7124E1060C170FFA -MD = 6C1809CD88A0EDB211986359498E0AC37E25E8EB62946938C37D3C26 - -Len = 1393 -Msg = 418FAB3A13197089C90621B9BFE43DC2096DC0A0F50461C17AE025BCFED1F8DE587F6AB515EE1987C6D96CCED7F80F9112ACF4B67BE67B0247414EAB033DCCD6028703BD346DBD61A478EC67C17C7DC586563997FD8AF3C9CCF7E5D66D25386FD7F056122C43788F502C14DFEFE435720A277DA4FB8456C237C2828A7442DC934B7D1B1D240562A5AA721BBA9A6E87ECEC6E55790D71B00BF1D8C27D56ACBC553C6136839046B1B111A0919EFCD600 -MD = C32077AA7E8FD8F9C8CAB06EA081798118DA6208D1CEBE5F67BB26B1 - -Len = 1394 -Msg = 2AF8395D282C705DD7A2DC02E6F79DFADF23E7E7DA63FCC4E14D60FBBBFD723F5CB0C861AA79AF16C425E11D28FAF444C0C1A8A769152C92AA9E8B366A8553C596D68B0290F19F47A3F7D597CC04ED1A0AC32AA7560027633E8CF814208D6DF5972BB2F8752FEBF4B23BA23CB9CFC4D5908FF74FA49938966FCC9E95A31783CD9B60DF0590E8A74AD8176142C788C3AEED4DA04708E4F0665AD24C8A100E09ABF9D7CB5BE9A588F45FDAECBB81AAC0 -MD = B0CA9AAA8CF8350455BEE65FB534A96532BDB67F8C8EAC168E208BC9 - -Len = 1395 -Msg = 18975325469743A4A76EF7C718397A460A489DD0FB36D977D88FE12BD1BD5D1209362A1D116DF0E627F7C96187BFBB7DA8702349F246267D623BBE3C8B3BD69A74149D03DA66834D65AA7B4371842227D6D336456C39FB04CC61A2469C5C5C97F325B1A86D87A081599148E50448FD3ED41F21083B718E875B13CCB9070682A56F96DD27D60D13A15808A80422BCB26429B857B2DCEA20AD6B26B2B367B0F09482616152C180E84A907E8EB7A2D800 -MD = 4D5142DA94B5A5121F540C049888105C821A200E1C7BEB3F6B96DC4F - -Len = 1396 -Msg = EBA3F211DC5247D0EB7583D5A99C8A3A20DC6B82A392BEBAC86F083891E04FA0DB97A3B6A67062DAD957ADCE8F6168FEB5A9BDC8A708FF92970A66F930179C8DCC4FC33D39268C2347B2BC2D42FC27E64D4058FEE185B79547DA0EF0B07FDDFD88DED5A12EFF174C50D6978C3CF28C08403B6D48C36E15A244E3170E217C6E5F117E621214C327824C59176EEDAA2FC634FE9E05D514455C8BE239F15949D12367969DC6E5C9BB3E733DB09A68E2F0 -MD = AC84FD6A3EADBEEB02E98AB11BD97BAE7D91FF74BFFA28A1DEEE206B - -Len = 1397 -Msg = FC42CE9E24AACE4B51A0C3EAE31CD7E0832708318A2B07EBE636DA95FBED1A3195456FD4C465CF1E568CA6B5F015EACA47801FE50B739850CE728C25004D0D355C6405638437A6DC1A27CB10D4DE70597DE383E070C46E798E96191A326D4C6F42DD6F64BF8D2D3E87F5C892E195F2AD6ADF16D2865F2DFCF0759CD495925FCBC35D7F62F1BDBA3670FF0F3062F2975D6D82A532437EE3935A4DD1268BB280E2957BF171571105EB7E676546AFA438 -MD = 244DCE69C95619EE127CBE027F9E9F13CEF4F8098F55C402DD93146B - -Len = 1398 -Msg = B2F147D74B33F101A11948F56B0B7E5FF2A1F30C5944B32ED076E09E18DF1B803CC368906E1BF021B9D3305E8B992594B2C461CB7E89383C7860D4DC1CBC4B503D5158C1D81CF752483E46C28AF0C8BC0A51A9E752AE436CF5D06A0C4CB15ADE6BE96AEA3365405FF63582ACA21CAC5F7B9BE377D264D599C410B8D01CCF332CE15D56F9FA7B79919DEA2359653E8D7F0E9FCCFCC48D1F9769B623EBE4E2E6973D792F790B63D969FD5290B93D5540 -MD = B3371AAA0C88CB305B01B9E5303C83442B0A8D338941236FBFA57497 - -Len = 1399 -Msg = 440EFCD5D8D5CF760A5DCAEAD7B30F9E0BC1261044269AE4F9458311DADF289B5E8A8FDB1214B650F9BCCFEEB4D0B27295C4539D40392776667B8146CAAF5D8E7DE6AF353EBE6305635943A53DF4391C88D8360168D4190AD62FFB48F31FE986ECEC14554C2377E40F426D674626823575C1A40B15C54A706203A70F473CA441300CA70BFDB191050CFEA75961CC631768EB20AB21F1FD8CC5D64A5DDD885917D15E16ABF8B078A59B6D8096E76E1C -MD = 7C8809854A8ED35C881327B37DB14331F668AE8F2E74B155705054F8 - -Len = 1400 -Msg = 5ACA56A03A13784BDC3289D9364F79E2A85C12276B49B92DB0ADAA4F206D5028F213F678C3510E111F9DC4C1C1F8B6ACB17A6413AA227607C515C62A733817BA5E762CC6748E7E0D6872C984D723C9BB3B117EB8963185300A80BFA65CDE495D70A46C44858605FCCBED086C2B45CEF963D33294DBE9706B13AF22F1B7C4CD5A001CFEC251FBA18E722C6E1C4B1166918B4F6F48A98B64B3C07FC86A6B17A6D0480AB79D4E6415B520F1C484D675B1 -MD = D2744A1BBB34718FCBB614C21E1FCCD0FF88615CB82AA03803AB9460 - -Len = 1401 -Msg = A1DD8A52168BFF3504304272CBF393FF2297B1DE115511B7071FAF15CECEA7C1D2E498C46E9BAEFCB0145D4FD220C38271E5AE6EDBC482D3214E3B6AABFA141BD981450B130E971BC0E12C0EE89DA62281BB9395C9935EFE474D8E6F6B99BABFA0E4A6538A90C51E6567E1C8AA7E8EE62E8AF6290E3B74295C023877B8909F00EB53755A62B089C0924382CDFA7DA75521056CB6D1C6D6FCEBCE124C7DCAC671D02BFA5E5A8A49A4B6880F33ADB88900 -MD = 6DFCF49F295781326E740276AE0DF24C471E56B3298D36007CBD4723 - -Len = 1402 -Msg = AB6037D426290CD66B89DF7DDE674805C863F8101C2D76443B1BF25707B695B8174F0C942FF7D2F952339FCC936B2897E7BED9C02371A5DCE95D45DA60769F3DE0DFF5A42B962AC9AF1A1612DDEF9D2D586E7E3F090C1C34B9D621235A5CFE124BC4153A1F78DFA15261F7681237D7AA132E96300B9313CF456F0A04188166E3AD6D39858D16ABECF77244BAEF5C72AC491724C8603CE01570EA1ACEFDBBB50BD9BDCFF0BCEE8C1366B0A6B6A5ED2E80 -MD = 4ABD85B435479FAB8790200438007DD1F3EA1583EF23B6D37B0172FA - -Len = 1403 -Msg = A3550EDC3CBFBF03416D72E2D0597D87BEFAD3D31F5B34C4FC50EC47E9CEA45E3565AE04D27EFE21DAC37660356B1CF75D3BBC522CE936A22F8219E0F27DA6BAF3D00D5793BBC2A9CF0960DEB3221844E2C18E37BA2176098C3656AAD8E69FEA5C76C4AC9EDC05F19B63D7D867A6C848899A42461EC6AB4687C0667C42C539698E755B6DDFAA6F4F316BD4A8F91DD173257A309E6B62A3090E6E5AB0DAAAAAD1B8F2DAC5D03FD2CBC3B804A951143160 -MD = 74B43C088BDD21E822801624B170E72E866B92AEC6984EF5CA1C9A66 - -Len = 1404 -Msg = 338673A0B843331C60FC9FF2EE15A4DFBACB8E77DBB541AAC44E2F6A9226355535E54FDEDE98A71D970F21E1B549AF75C7F91DDAC6693FD1AA4AAF970D3C2D88B4636DAF4153B3ACB92CF76529D9ED18D31EA1BCE1563F1F3A076F97C58A32583B137B9BED88D9A8DE9648E14462A7154226B949EDA577D3888F7C9CCA560FBB53808B32713BF62C95515D857CF630E3EAB52C50CBDE730B48951D165E14FDCCF9B5CFB9ED2169D9615002A6576CDD90 -MD = 5C7C6B725879E400CA083009189E2274099C489CCA2622174AE8C940 - -Len = 1405 -Msg = 62C779F840173FA00C27DCB9171DA91E6A8E6CD65805AD17AC31435DEE8C50F5E3EBCC4A9A8DB116CDC602138914AF21BDBBB6A962BAF4C49FD73C1A55E2A3F4C44648E03E5201D6FC6D298BFC3D6716FC3A5C53989C53FE933BF16659BFCD46DD099790E2E617CFEDC88B7F5A48AA7BEE7AA5B910BB748BF089DD12339444EA9029A90554BBB75B5AEB36AA400C1082C1C92BD27F442EF0C93994FE3BBC4559B94DE6E3629A9498526212ED021C1980 -MD = 4E93DC9E00F4F0FD5D2CCBC378FF2F69FB21796B7822542C90923749 - -Len = 1406 -Msg = 30F3656BC45520F876ED30757D6F6D6A3AB361C76C8E6C5F47CC7C81A4F0E25D8AFAFFBA6C40E831E6782A09B1EAA138D7933ADBB8C51D4E74B1504A8B40D7D54F70476AE16FABC3C64F71E9F9C8B62655DC2D8D082E0E045E133430378CB399A03E2AA0A6ED473987080CF2C5F8546A1F59680FC1A356A99801CB291EA68DEDECBF5178920F3077977B99BC704294092F4D0066CCFA76D38E6AD378D3A7D5FE1BE18C9F4589311AC6EB2242C812A7C0 -MD = C82DD5F9BDAAEDC579B22CB7A440B51A3FDFEAF67FEFED594FBCBA3E - -Len = 1407 -Msg = 1FF51A1F8BDF6283E70E07F6BE761AC51B6731DF858232C78809E1526010464A70DBEAFCA5A165C9E1764A0E6C6EFB3E911D034E9BF99EFCBA863216C261A404B8B825E9E8098C226BB7D644CA4DCD219DBE957992A82D1950E7D2992FBA55C7C3812D61D51ECEC3A6ACF5F09F36E480F2FD99BEAD455897D32094A9017086E5B813CD39E2C46BCB31E89AD6C6BB10C58EC67D89E4FD4263923EFE969D89F561A745FAB1D1B81BD48DFBB27249C386CA -MD = 33E17602F3D774748CE70426A41ED69C9D9BAF025C469B8B3DB86684 - -Len = 1408 -Msg = A5AAD0E4646A32C85CFCAC73F02FC5300F1982FABB2F2179E28303E447854094CDFC854310E5C0F60993CEFF54D84D6B46323D930ADB07C17599B35B505F09E784BCA5985E0172257797FB53649E2E9723EFD16865C31B5C3D5113B58BB0BFC8920FABDDA086D7537E66D709D050BD14D0C960873F156FAD5B3D3840CDFCDC9BE6AF519DB262A27F40896AB25CC39F96984D650611C0D5A3080D5B3A1BF186ABD42956588B3B58CD948970D298776060 -MD = F6115F635D98B572FD1BA85763ECCF8BF273FBF7B96F0DB0120CA8AD - -Len = 1409 -Msg = C0A3AF99262209CD3D272635B9DBA05E7A15EF5C0BA6326EC15C1C98704884C0962363F0B9B441C7188E3E2FB8F12DFECA0E17C89DAC0D58D7206FCDC50259990A305BCD1B748E8E00E9757094B5869294136E977F889D5A2760FCC03678C283289397848039FB9E7E1F45EC308198A4630B48FDD54D57697A190653B23251385C04DD77397E9C27428AA9202554A1C170C813A4FB4B9322BE237B406BA1D5EA2E8F1CA247A135A16AD8E28B6724855C80 -MD = F466EE4D8748040C60B3927CA9873E0B4B4F8079DB36016306C62774 - -Len = 1410 -Msg = B0BC6D10B7393F90550D82BDB1B21ED87219D301CF90F738557E606680476EF33A181F939F67A65B40D6BE99E4715B7DC6C8A78F78D38C94D93AD4E342E25543A18381D3E7CC932D7578F3386C0ADD1C20188100AB99FF739D6E9961F86780089DE081F0FFE54C38682A1B4A320A2EE04B2EAFD2D8E63D691ACA60B35B49A3AED81110805FCDDA7819D6A19419F507BDE40C998B2095294714A51D32D46247DCC162D5B24F4B80B9C631DC7C542323F080 -MD = 27754E72E6E87A1D320AD82D02AA05E30E5730EA0040715455EF96FF - -Len = 1411 -Msg = EC886F18CC5512BDD6AC13D5B6711292FBCE5346EDF45A688F4130E5914E565EBBFB4EB6244759D0C061170C730A58DC4A05D9F7CE785EFD635AA625B47D6A5A2BD4FF4F12F3DEE95CFA066750C5EBFEE47D71B511184607EC6ECC71DAFA87CA7348612F02FF564E468B24216C9ACC6A9D0259627ABC4CD470B50FC4330D60643D1846E1B7594B01CBF63505EDC5938AFFB8A497BFEE43025BA7FB323EA46F2261F04ACF96E381DDE0E4AD3CD7D86238E0 -MD = 0862EEB58C13F085E28F081E9988668A13E769BDC133B4B3CA6025F6 - -Len = 1412 -Msg = 813E99662714AC60D61C1D7D7F7A5269D8902FCE95B7609224F8CC92F73EE92385A27E670D70EDFE5585023F22A0053BE490554AB97ACE2D0997D7BE77F61C9FC192C0237E5688FF34AB7CD441460A4EF6395AAA2C7F2799CDD143531961E6554A93459306874965426A3E1C5A075B91381DE55CA07D2A783557B953F3DAF67FCCDEE5C0D027D335D07615B75CE699F41EA0B53F5B1FFDB2CBF0116BA1531387E51FC65F9C829B2A504E794932BF5E3A90 -MD = B4CF8E0F90DB621CAA5026AC184856B0FACB00441A6C72CFC6B8635B - -Len = 1413 -Msg = 60B651B269E159E5B8C5A1322917C61AC875B4F508F3534D2AB8545BEF7F12B8EEDD363DE66BAD766C86C102E491C29CF45FB7A114FA2BC7A4A95D61A96F8B159244FF088528F7B5B732FAB280EE2272BF4D4A97F167CD546941B8895B27E170DCF46CFD7E045810AFA47D16C8993AB09617C137DB70E84BAA445440F2DE8AD261BF74722DE32286BCB798393CE4F997B2B01759908854C4C45391EFF7BD4F1918F7B9E5DE12250A03CF09A81740C79738 -MD = 833053935CAD6EA105A635B1BD278BCEEA6F920CCC57751201864482 - -Len = 1414 -Msg = B8E9A3D80161E08435E4993A2B3D8FAB8EE51DEB9431DB1A7719E24563D2D2DC4F8A4A3D32DB8E0A205090CFF3656BEACAD4B680D41709E5933943B49DF67803C9B0502637B15382A81F3EAA1A91240347BE0595064BCD480AFCEBA8F465EBEE3B2AC41010660453C1897366BBAA433F6A3E8CDF9901AB7A4D38C8772F8BF0A8E7E9D637A61CBD9766A4554B8759F7750CB586D2BE320A18BED8238DB5C02CC227F4311D02C3F12C0C7435C036CB43A0A0 -MD = 230C2AEE503D464FE5D99C7DF530670E782F5283BE842FAB560CFC98 - -Len = 1415 -Msg = 3A65D42C96E4AA1CD020DAA204E7EEA764F1CD551EB2B00EC645C12427D10360A140BC91EA1CAC2EDD405DD863DA17DF51ECCEAA3344E9B79575F6B86823384024DDF524217A90125754891E2C509AFD15E9D34C414100BCB5D9B5AF98E95B54252E7C82E7230C1249F4BC5E05CD8EF2CDE11474628185AFC3EA5BAF7081E4E84F0522976F9C9FDB293721DA2BBD90B955592953CAC9635877B70397434A08D15F8EA3EBDF62A28B0869781138CC56675C -MD = 58939C1BDBB0C770BF4DB3AECA924CC97F6022E2A37209BF87DB3A7B - -Len = 1416 -Msg = 06CBBE67E94A978203EAD6C057A1A5B098478B4B4CBEF5A97E93C8E42F5572713575FC2A884531D7622F8F879387A859A80F10EF02708CD8F7413AB385AFC357678B9578C0EBF641EF076A1A30F1F75379E9DCB2A885BDD295905EE80C0168A62A9597D10CF12DD2D8CEE46645C7E5A141F6E0E23AA482ABE5661C16E69EF1E28371E2E236C359BA4E92C25626A7B7FF13F6EA4AE906E1CFE163E91719B1F750A96CBDE5FBC953D9E576CD216AFC90323A -MD = 5EE73A4F13A08A2D9B1E52DF88972FFB9F03B843A387EE52B00EDCEE - -Len = 1417 -Msg = 630F25144D78BF5D608715AED30D38FCCB9D529181D7AF8C13840A910912DC83DD22AD509C733C04D362B13A8A61568AF79F78020B83039C4DD9F793299D46DF5CC5DFA6D1A43A0497432CDCA64885BF7F091149E07AA2564A3DD1BE08A8465A7DC71CC41044AEE1F193C9D27B12A7A1B986C869243A560FDED3812C5D17A1C8B8EF47CC0EABF9910A9C8EA0014526C211D954299ADBDFF445CDE4517C3D9613E52F35EB0BC4FF6B7D0322E47B36688E1A80 -MD = CDC18A6C1ADA29018581194627E9F4618C917F0DAFED9E9542E9E815 - -Len = 1418 -Msg = 81515F0C225B6CF2BE73CA43A2B453DD8BA9310A72969A11399CAA2CEEFFDD68B44B1EB2C6AD5C92B15901CC7293DA540B50849DD4587DA32BD2395DBFFC4573F677CCEDBFF15CA06A14E737AA607942E31BBB16F96BE637B6ED4EE8FAAFEFDFF57EE9473ED97BAA6D7D8ADCB9F5EA8DDDC8092BD695FA669DCF9090C7F61417CD583A935E000E9E7C70348BA48DB4368794222D613B909B439B6D630ACFF7CD5A00858C5195D675C824D4B7EA2E6018C400 -MD = 4C0511ABA2D6A4480DD104B45A34C5028CD98E3A92D8CE4DE38DB444 - -Len = 1419 -Msg = DDF22A40EC1A0B060063F956521F0D4F5C578554F845600C747C7DCCDDFAADFBD8ACDCC6B3C4730CD22A0356FC5FB59D3597C704924F99F143D57BF65BD009A8351F04C879D75AE6667A9BB4A91DDC1FC7F4BCB0FF420E410C70B9CEC1672AE831598FB482216822C394925AFB758DFCE484F3A4FD41E2D072EE15D7DAE46858FA595B6C6EC51DF9D56FB4DF693D512E8F9597809D7C4D4A43124E8DDB196E924366173952DCDD9A385B0895B8118BB24820 -MD = 20694DFCD1C5E1FDF06C6BEA2E9B2EC679062B3E14A6847AEE45C205 - -Len = 1420 -Msg = C0D30C478BC1B4F00073128BD8D67ED36109A807E8950278F99F30054E610AB8144AB0EA6CFB7AFD181BA4A6B08EFC900F52B418D649A864464C05B27BE7A1034EF537AB4132A4D39D20D6E7FE5C368FB281E16E624A3AE185A89BDFADFDE23E765654BF5DB95DD04BC8860EB03AF6CB2D44F26B75852FE6C1EBECCA1BA0E1DAA247FE2AE936A7A7389A0358AA52EAFD12735074342410BAC6D62665DE6F60F1E381DBB70D24E9DC0F9B39CDE4F48A592980 -MD = D1BA83D4F66F9108A613CE4245B27939EEA528094FAE3CB9630B97F0 - -Len = 1421 -Msg = B18568A3A8FEC3EF94AE11FC3F950E423446F6D598B31593C2EF3C85BAAA314E388446572B4A1DAF972C8F96ED05FBD30C2A7D9519F9F4D481691D6D80806BF5DD2A6B6BF4DFF749017F24AF44DD2802707637C9B94037DC75EDD16DAD00FC4BF273FAAD88577AE66E40D7BBA9DF1771E6EB4C8DFCA59F3F80DCBE713EAD814532E05E23D29E24E52530EAB98360799F69F34D84C4CD406F0694B07ACC57A6A5A3A5CB98F206FEAFB774B16EE8222B88FC40 -MD = DBEE40DFA881902E728446642B3318EE5FD16220384224D494E2467F - -Len = 1422 -Msg = E3C6B699E534C149A2F343D2E1D626992AA5A59101788EBA6D878EFB946E281CF95752DB91169984282CD9BD610C217058AADA5369D7CA45EE4B240AB84E8F8FDE3EB18A88015DDFDA475C146E32E6047AF1365899DBFF520993D42BBF6520492F7E3A1005C2368E2C45BDEA46B2B7AF9F17783CD3BFDD346EAD18142B348180FA173618B7385E5561ACF1EE8E5A11B583A94444A8B8483A5316073890396B14697AB3EA2DB759AEFCA0D723E56B9C43C5E4 -MD = D07C6888164038FECF183196F094EE1E1B3CE279C798D90E81731A2F - -Len = 1423 -Msg = AAE187C91F8EC85BB6DE3F46E9E30D176C4E070818834DB8FABEEFED1F51557C6BF16EE80AE3A7465AFC513C1C0B92CC9E1E14C6C8D7A03375662117AD498ED2300799ED8B0BE37FF6A95D0D57BA4A9FEFB4BE43CC2B7C095D571986547F7825C83A1C6148891803847A7EFCEB5D78D835407D608CA8EA1E6FCEC4BB8BC26D700D04AD0C2306B148E00216421745478215917D3E5D5B17428C27A13566F4F87BDD020DE5A2B6FC4BEB0C0F73FAF72E5C868C -MD = ECAE68D9BC154FFE6D052B9ED99E8A324A73DFD3A43D729E37B8A1C0 - -Len = 1424 -Msg = F1C528CF7739874707D4D8AD5B98F7C77169DE0B57188DF233B2DC8A5B31EDA5DB4291DD9F68E6BAD37B8D7F6C9C0044B3BF74BBC3D7D1798E138709B0D75E7C593D3CCCDC1B20C7174B4E692ADD820ACE262D45CCFAE2077E878796347168060A162ECCA8C38C1A88350BD63BB539134F700FD4ADDD5959E255337DAA06BC86358FABCBEFDFB5BC889783D843C08AADC6C4F6C36F65F156E851C9A0F917E4A367B5AD93D874812A1DE6A7B93CD53AD97232 -MD = 44BC64559BDB910B7079E0261FF8B49DBA141B32ECBCB70B3ABDFBF9 - -Len = 1425 -Msg = 27FF5954E8891FCD89DABE745EB7CD5958DFF6D7E3E3D2CF97B2D0E2EE4CDAEFDA88C0758648BB079FDBABB329133F6634869421B535E48F989334E8A856ED39DCB05910D58DC95781F3C257B40BE661409C132EC32F608AE30D29C54A3654B1CFA4BDFA3D390C3C4A5E38F45A767BCB00FD0EAF9058609F1BB406C9CB74E407E5BDF239BA4E49436AC0372AF24085E06385798284F0DCE70945BC2527A8B1F120E052F2C07A4B053C157377563F3A90697580 -MD = 1F8479CB1BFC51E1BEB645B3A41423C30C296610CA2E2456BD841EE3 - -Len = 1426 -Msg = 42F0737B6AEA5ACA87B2C457D174D642606D7453D0C9A4506340BF1E512BE60F14E69BB3DEDB5B104AF7EC2C9081C8298981FBFAF0BD0E60BA4434EEE1851D921B04BE4C9AA5EC34448912FF855B8FFC1B21CEFCAA953501E2A941C931FCBFBDC04FF3BB20C5FE4F44350C940B3EAD03B51A9D96C0A207872EC9A0400D9F0B9034A2F52973DC162666C42B2EB62C79C00BC037675BCDB8B89A088F5C9D71D794ABA89E73BA02D6897F782587CB3D48D4EA39C0 -MD = 58FFFB54BE2E5D114A54685031DDA934B57E5D1DF676195E4A1D0ED8 - -Len = 1427 -Msg = 9FDB2A4D221AB91136D757429CB01EAB202E2F0CB45594D71089E64A3BFBC162CCF9E5D524B59E86FF0D4A17FCEA00527406F0EF14530340480330FD4C4EF48AB6C711A8426908207992697B270B6896F9100B821B763E2C8F0CF8AB5717835D8BC79130B33C48FF8B922E9B7E94C99B8BD361248211CF56D763363E9677161793541C04EB803377B8082D5655C3A3B407465CCCBB85A1F3A713EFD1F4D1430E25D6256FAB4E933F1A559D85F8B65A56749100 -MD = 45FD97224EFE53E813B65489D73DC7F082BA5570772ABAB03D9AF43A - -Len = 1428 -Msg = 057A73197CCC3B7A68FC6723BD1C32AD3D5E01AA6B52DB53D546EF1F7623F428619D25E3D7AC1704D6B23AE2D8433FEE576A0139FA46FF0B2E13D4DD413812E7B767E822A4C3CC69DF40B45478D95C1199270A6D28894F99584C2025156540207A3493E239EC7E95E7938376D0BABB5EEBF41C461653F9752A6CD4B1521E9B1F1163F13E186F8B82434A4DA1D8FA0882AD016456F046C7175FA0A8834C8D5DE4AEF28C986B8B5EF5CE4581AC6B616AF6F509A0 -MD = 92646DFE3DA97F97E893789454D757AE6FAC97B280EE102EDB831B2A - -Len = 1429 -Msg = FCB2CCDB7CB717152580A4D6FCB174C44B33153708EFD174F3AF31CA0A01C8DDF6C8F07E608EED84F450EEE51096F951446FDE340A9BA3AFB0C9E44E84208498A99D02C5959A37815516E140E3758B5E00EF67DBD9BDF8B3C6A01623D328F649620D85A757902EC780CA3BE2A54DA5A8929776DFD578C44A953FDDE6A6D35B6163510C22E02CBA7479D277F04883CBB83A05AEE5755342DEC6EC49DCB4CC44EE99AEE761EDE6CCF851FA3B23D3467D44487F00 -MD = C4A2BEA6C34746E2417BF6AC2819B727AA64DD1D3284C48F12F4EDF2 - -Len = 1430 -Msg = 710712BFEA5E62A9D7954D7B01F3F8674990BB1F59CC6D822C4EF08AC5A51DBE500359BCA2F2A74AAC4ADD615396A30AE28FEFC53EFAE850FE9536815035A8B8BC064F7D43B309CEA40A825C008F0E4A0F9BBBCCCFF4C4DAB40BCB4AEA16926DE6516C6793C19BEAD079358EBDF6C08D5AAF9EC4D4B600642843B904C0DEF4D3B865A80F0D47DCADA317E9C341EF8C791085ECB7724724E7D8779E9EF05B4B7F5F813D6D9A37EFF6D46AB0B01CFB402B247C14 -MD = 8AFDD1E7B54F3E32026EB83D72D3CDC2B797E61E406C4E292CBDEB9C - -Len = 1431 -Msg = 84E71B4DDDC7FF264CDB550A47ED25478E863E97CBAA6059F471A13693A5E96D4433185C3F7514EC6CECD03AB6564F23D716B2BAE4A13B251F7DBE1EB3CDB00CAAA677588AC611BB45293C550B647A3DBDDE55B20AE6BFF0E6F3A1E1B6B6BD34731EBD87019EC0FF5E396459C70577587FCD0E12443FDB66E7D9C0C9C757DF7F0569E7F4BBAA06435C7CD2A7530197BEDB0046DD51FE2262FA729C048A49EE357F2D135F9A9317C163997CA714B3F6F5C2CEA2 -MD = 9C201F1AD757C58086DF32290D459EAEAF6FB4AAE8EB6D1E3E61EF44 - -Len = 1432 -Msg = 9D9F3A7ECD51B41F6572FD0D0881E30390DFB780991DAE7DB3B47619134718E6F987810E542619DFAA7B505C76B7350C6432D8BF1CFEBDF1069B90A35F0D04CBDF130B0DFC7875F4A4E62CDB8E525AADD7CE842520A482AC18F09442D78305FE85A74E39E760A4837482ED2F437DD13B2EC1042AFCF9DECDC3E877E50FF4106AD10A525230D11920324A81094DA31DEAB6476AA42F20C84843CFC1C58545EE80352BDD3740DD6A16792AE2D86F11641BB717C2 -MD = DE82ADDE823C312F83B3D4C0BD35AA0395AB747ABBC22A70973E2A6C - -Len = 1433 -Msg = DBB381C83C3DEEEA298B3675314561096DB1F8447B93ACD2588E66C568C111B9DDDE0E5B504A05C041D0DD293D46303D5DF2DF40AE977D85EB2DFBB2B572D41163808F3B227E2C5B262EFAE57C3FD8E379407C1F05085686388F731B0AF0E085ABF39BBB8A73785E34B4ED59A10C97112FDEA64AE17205CFBF8D40B31AC29C206E535D0EBE38BECEA633E47D2F5BC8B35CA5FA6F87C4E22E3789D797E0E3B6188FBA2ECDA83100D3360F73B5AB2D7305353D2D00 -MD = A19088BD70E7B213C8D010B35B2D6E1B15F8D2E50D95BA0F543197A4 - -Len = 1434 -Msg = E0CD21C86AC23727E5E5DB80A53C5F827CB30453E30F603A4442E5B311E90C152A129F8221AD64D1F8FF54DE336F0A1F92CB9D62C7660100EABB8F850C035F2A88689F9AF69FD598FB7D1A8995727B99170AE840758E88C1DBFE5873EDF336F4E68457A0EC41A21C99EBE8CD10EA45A56B3870B710D4FBFB7CABA277291A3368DEEDDA83C18D1F71701E9EBB241497C689272E06C84AF1505675EB998D9B61D92CFEF5AF71F93BA6E69F004EB7FD70A7A949FC00 -MD = 0C45D88D05DDAADA3ACA54FDE6625506FC42E6F60B2A98397642245D - -Len = 1435 -Msg = 33769F64E496F6B1F638DE77E3538A49912116ED9BB6DF2CB78291F05F95C274B971AB1AF1ADCCEB32477171C4415C0D7332D36BAB37EDAC0278DC8C392E906F7075280BFF6EE7817D49DBAD67966D36119D82BD49C19CE299EB7C64A00DD4BCFA921691BF064758E3010D5F2C7B5878E6E0B763D3113F3BD6E80155A4DF33137360F735145E907F1165C6739DBB58933C6483C962A7C3F139115FF428D61438A614909BA6BB233CF953A953FF4561C6F7015240 -MD = 43DCD6A8FCFD24AD80B97E72938B53C1FFA8E808CC0AE7EDCE737D6E - -Len = 1436 -Msg = F3B541C39E2EC19FF5750EB4079E723F5E6BFAD3CE36CD9BB5B94C8BA520784F3651714D6ED955777FDD5A8FD543245B61C7E02B2C3CB70FD5691861F52D3EAFD3D278BA01C11B8A133F8C83C59E6D92359064543B418919000A1E80B908FD605766635B796696B57DBD8EB06C100AA2C1045D6C4881E2DA0038D7103A271F00F1AF4A048F246E8D8EF1509D9544FEC29E935E1FB12649FA7FEA43FFDFE84174A3ED17E4D802189127AD58B4D45781EF60CF2270 -MD = AADF752ADF974BA68D00BADB5F4C9D0FC6653330F923D4A2B5D8F660 - -Len = 1437 -Msg = 485F865DB14C353CBF0DA045E31DA2C6A0AB5D311EDFC6FAF819E524D55C3352D026370C5B9B0D3A764DBB76CD9B34BE367FA1A9BFB0AC617C94D47AECC92F3FE5F57B27B1E34F99B994470248BFAC53BB7D58B978FD048CFD8FB12A0EB30F163D7820973F3C08078F9C07D8AC1C2029D8639EDB51EFB60C461F7740E1252E42EEB6EB3466E0BEE310148059E352766A8D3ED0C08E2ACA6F5EA39680DFA2E691EF44ED4DBC92B27B28C22E666118AAD88E623A68 -MD = DDF748B195838E47289E88DD3B767517212D48B96ED4E5C7A67DB3A4 - -Len = 1438 -Msg = 47B4E93B903E93CFDA571880ED0D0EB2B409D724A6A6D835CCE0C6554AE633B2A385263323EC852FA11D8212690F7078D8AC78218C72953C2FAEB4A5065A779B0E484248003A3FA72EE244EFC6D0A4B1D1CED8EC099492E13DEE522FA2DFD89D8904793A9E22C7272C77CEAF265C7DCA3FD08DFF17C038F7D72A513B415A083D5F5101D2982B342D75ACA0A7FFD8B00F59BA8C0D2B0AE6CA17EE763731E1A54BB071C21F63965F10FF8B50C4E4AE6EA311C15AB4 -MD = 037CEBC3F918682B9E808A28DCD283C49534E20837E81BDF9A4FB7EA - -Len = 1439 -Msg = 192D3A6963242323C642AC515B34F048904B933B7FC8C437EA751F8764B489BCB823E3658308B1D336A6A0BCEEF2E2ED8F27C2EF30C6F3C6F80FEEE59594B29983CEAA98AFBF04FBA3E6A9C9B2EB8A178076BCD838FE9658F7BEDC9275487A10C43CA8CF0D0278CE815D8D4FABBEA410E4857F45A5F1D593A49AEA704E3D5BEE8554CDB7ABC51AC584CC13F099CE3D1871C57032476951DD46E1C162D155B89BCAFBBFA867C2622ADF42321205E7F097DA3EEDA8 -MD = D37142CCE9AFCC440CEF32591D1AC20045B9A9BE77EBF85B70F2EE26 - -Len = 1440 -Msg = 5179888724819FBAD3AFA927D3577796660E6A81C52D98E9303261D5A4A83232F6F758934D50AA83FF9E20A5926DFEBAAC49529D006EB923C5AE5048ED544EC471ED7191EDF46363383824F915769B3E688094C682B02151E5EE01E510B431C8865AFF8B6B6F2F59CB6D129DA79E97C6D2B8FA6C6DA3F603199D2D1BCAB547682A81CD6CF65F6551121391D78BCC23B5BD0E922EC6D8BF97C952E84DD28AEF909ABA31EDB903B28FBFC33B7703CD996215A11238 -MD = B1BA910C9F5E126607FF2531AFFECBA791261E354E2C1A81FDA7A756 - -Len = 1441 -Msg = CB28DC66F267394A3C1D2D1F0EB3BDD240EF9247529E8720395D64ADC644F5B57893658A6E57A34BA62F68E237283EA6831CA94A0FE337BC9B1D08A773133B968515FE7FDA3F851E108EE51D8FD01BE0A8C5B725D530B6425B7E9A988501982901932E899F89DC606D1ED8B1431E4C56015DE52EBFD8B09CD259FBB2D1B3A69C58B9684C66870F0D60B0FE0F75EF310177D512CF549256CB656EF3ACEE3B2EF6728806F74DE8F627C13B272E4E9885EC4DA7AD2F00 -MD = 204FE8A79D31224B36A7F8B9C8676EE032D6C490D6C9DFF1D89D93E1 - -Len = 1442 -Msg = B2C51A76F1B06AEB1253AD6E8676DBBD29B8583ED2D3783268FEDEC3CC0CD4CAF9F12E6FE389294FC22A26C88E318E047D9A98BE25EE9B732F93D10FB57E8F3255F6A063DE245942664715C9A3BB9170587AAE67352E7E622369C2BB879B665A0B528FB1575EBEAA297425F6C7C4084E56C76BA7A08025CE545F0F4E9B32A331B950EB6CD55164200E35D04DEBBE5F16E62BA8624E93DA2FCF8AB5900A21EE87DF4514B3C5C93E5FEFDC24D56F9B691497256B2BC0 -MD = 98306A025955964AD511CCFA7E52B96614CB5B5E833B0E9CB6249135 - -Len = 1443 -Msg = 36D5168F9586EF46911AEA6EF807874442C0DA3ECBFDA4106E0A71E921C511DD57904E9146E40EE1FF73B0A27C31CF06AB50B13D1DC8885932D37CF5290FF9D99C3D5E82700C569123564007D6DE15C34BFBB6CB76C7C86586156F668FF41E1DA02C7545E913F9FC9E68C3D8E029647FEAE1EDB069B8DF51A8185A50BA1FE44FC460F6CAD0A07CBBBAF5A09FDAB67158BC6D5DAEE6DE926D1C38B3AAAFB9A3EE43017ECA11165C9AB567E8A88EAB7B5DCA15ABF4C0 -MD = 66774C99EBBD72F5E60B7DC56B3E83C98AD2876B95CB87722B383726 - -Len = 1444 -Msg = C7873F231D267158FFB7CD6451E1A0D8CD45C1F2226C44D875C30DF55660BDA0CEE25962DAC638D3473A088BD101B62EF078DB5C2B6F88DD2C76CAFEEE78615D1B36D0BB40569A486AFCE45A1C00E8B36148B865D415DD25D451CD4A84239B899A5D37F4E1FFD8A68072529872A890B6C339EB013F931B5810C6F65859BC1F8A3F7C9105FCD2AAFCB6A837C2715B4BED69C29CB21EDD6136C114C187A3DF169CC4BEFC1F6698E1928BC038AC8CFB1CF1C7F26EEC80 -MD = 49FE1999C1F0AF31C6B7FF73A30D4072079E45FB2311E2CBA4D7F7E9 - -Len = 1445 -Msg = 597C27B64C8D275F6417DE1F56A9C78CAE747E024E8DEEC25B79C28045AA3A2A1416DC9976A000BF766DCE03023615D82DB887C2A8DBC758206CC4A645319A5A32AF70B3B1A5058209AF0564C8839C0D2D5A298539D6D0F5EAB212093AA116B074D1D66A785064AB5EAB3258D307D4CBB2C0B3EB97403B542EDCDA51AEE1077CF1E0187EB4CCA42744EA22F1CF0FBC6B96B112AF1B235A8D618491E19B4112DEDCC1B6F8C3722C8408CCC6D1DB3318054B2A376560 -MD = A890A649D8E118C5937C5DC29BEBE67D30F848F7A8B450946C573F47 - -Len = 1446 -Msg = 6AFD2AFB1B7217CB78DE5C9230502D0092D8D414E00D4D042C659A8DA687E1B09445D95F87B6A48901DBE3784C71D4C0A98724C05C80A52529A76C0EDA6549F9876219F1103A5C1432A4ADB76F5BDFFC30C46D9E22A2B141524F735369190E860AB33FAD9B34D17BA936AAE4059660A5C9006E5E6EF070142A0C3B6CDC550E5658360993A14665AA63B71495741F23076696BC799234AAB0AA598E53C9FCCDF14EE38060C11D4F799C9BC3B608189FA0BDDB006344 -MD = F1B40DC1CBA63650142430A231745D8CE3326115C181148BEAE91CD8 - -Len = 1447 -Msg = 0D7CCBEC6DEA7B571B4BA9D8E11FAF3CBCD363DEFBE8BDF97F99E149BF3BF004AEB600784100AF7AC53A1CCF43166FDCE8AA87EF6A9A7CE66110C72B8DBC940AA6487C9A0439446EC0C555B7DF3E0D219A21392B740461574693FB814C15A4068626D29DDFCE3215F0701511AB4B1CB96C544B8B25DD385F0E870F5A32B88AD31FD49FC5F25C9867E682DA5ED1707A6022A58349405E665563BFA17F815FB0B402FFE5AB89BAF3D758DB8B4291F65329C8C4CF950C -MD = AECE4274B4BE3E1F82FCBCEED6C60F0D2CB300DFDD6CAEACEE5CE0AC - -Len = 1448 -Msg = 576EF3520D30B7A4899B8C0D5E359E45C5189ADD100E43BE429A02FB3DE5FF4F8FD0E79D9663ACCA72CD29C94582B19292A557C5B1315297D168FBB54E9E2ECD13809C2B5FCE998EDC6570545E1499DBE7FB74D47CD7F35823B212B05BF3F5A79CAA34224FDD670D335FCB106F5D92C3946F44D3AFCBAE2E41AC554D8E6759F332B76BE89A0324AA12C5482D1EA3EE89DED4936F3E3C080436F539FA137E74C6D3389BDF5A45074C47BC7B20B0948407A66D855E2F -MD = 3EF8D4A6BB8E172374E806E8D65D5F81B3FDB36299DE1C0CCC26DC65 - -Len = 1449 -Msg = 3564C4692887D8CB8067A9D799396CF83E3DDB7E32CC4FAB3C87D31222B668852BFBAA78E3D2ACDB5AD889361E31B9DFE0FBCFCA00CAEBF8D07A9ABFA3CA818D0EA41EED422BC2C7F0AF9EF15C6D53FCD781E20112F9E41BC8F1C9E1DB278A723FA1C2D5523AC38BC0D5A93D3306AC033E62848932B10394AD1040F235466B7ECD11F484A0C874BC84AB18175C7BDB4F816A3762AF418D64978823A450B8696A1F78B1ED66D649EEC8ACD35160C5885E11CFBE86CC00 -MD = 0A8162EC3BF6972678C5A360C65AFF269907B539783D6BA68D7DFA92 - -Len = 1450 -Msg = 860296392D96C556086F61E4ED34E50C95B721A8B051544F6031AE174250979846DCC2E5811201CF7A16342976B7EDA6D2B3C4644FE8FA3398C05921C79CE3DD806264E80AC1EA1FC124FE51D573AD7823D2C7CEECF4F06C98CCE809B5C16313E04DC0B48A9410115B36DC5331F6C2BB7606ED2F7E6A0D575F8D0E93D996FE246D5BE00AC2A5155E47E87E73D568C990C44BEE93530073ABC1952EEE5904F41254FDF82030C4ECB46F497A695A43C87BB759AE1FE280 -MD = 3EA132AFBE3BC93228B589FE94533CF3C493F9A184C8774EDB06CC90 - -Len = 1451 -Msg = 8A59028DB3B6F5C6073C6A778DAB8A9A3F64D3AE4F13DCDD25481DEE57D2DC82481C83CE4D43D8A173DF49A04303E980F28D2F4BD898BE8DA36F0E470DAE4752192F9923B46E5AC88D7C4D3DCB8C8D29E8135E0E0DC44952D45D7DF503BEF6E53FE9776F8E4BD69F238F4CDAB93F063FC4639F5B72B65B90FDC96421C5BF23B8B30D7F87DF53B74EC6ACF131701693CB6C744AF9DCFE4BB4831C854AF76FEBA6DEF37D4469041DCCCFEDC1504227EB60570A450A6C40 -MD = 8398C6CED248ED0EF688026F1936C6F9D79DF7771139E738153BEC51 - -Len = 1452 -Msg = 79E4BAAADC1878BFB1EB26C7D4B23178446845FF6AB3E45E571BF06FC28675A7AE0FE524FB99925CE7373ED9DE395B296603C9F53CBE738393776B9C5AE265965D26ACAE303C4DA1DC45F190B057B561B1F8B13A4C02D8CAD6E1DECDFD8825A64A40A78FCBA195759D596AC898A2B984B459ADF1FD7781B3BE50AADC6D7529C38DBCEB9016A8600D2940213C1DEC81F7BFF72E6D753D2FC540B50621B759F1430233E588BBBEDAD1E978AF4D78859F869BC25A587C60 -MD = DD8F32B263CC50D611EC7737FAAAEA11638B0C608338592A231CBCA9 - -Len = 1453 -Msg = 0FE88DF0E99E878F8DFF574D6FEB68022CD544533B7D81B07ED92C67ED85A6E890D635E1801026E84B202551E7BCADAA869D9E00B1CE69C0EF2AF908248541E0BE5134B5CEEF8AE1A2B548FA0DF257477F7A0669DA6092C2D9894F00C299B1FE7EE480978D655F463942D159F0F6414E77DD5795E3AF080D060CB06C0765A7582058C47A9C8C1B2A255CC8655F8EDBA851413DAAE7EA4F4DBE6DC9AC91ADB6FD702A2F039B82E461EC29B3442915D4E12601A8515928 -MD = 1887FF02C2FB720F37AA36C5DBF3B6F26F6279866848BD70D1D15546 - -Len = 1454 -Msg = 679A778BE6C04980258827BA7F375C1592BBD320C505431B9F83547E686CE1AC87DDF4954A481F3227D27ACE93CFDFE507A8131CCEDBE29578D3523DE3E0590C4D17204B2044DA755EDD8B2D429E0B9092A8429B89AB2A62E0E7519450A193EBFDC2C4FA695C90C07F29C016CFF238F777D6ADD5AB606E1CFDBEE92420A0D8F9A23D5F291F496571AC573E98D8FBA2C31BBF04C1218AB9B7ACA6FB3C6B0BBB0FA9B8EF9684AE3F77275D53EACDDCFC5DAC4220189940 -MD = 2431D02C5DA90A2E79438EDE5AD70970E978EBD92BDD7FE16CB5220A - -Len = 1455 -Msg = 69F739517865837781C3907381AFD544AD54E4B4E92E4F6A94E4508C592606548EC974CE57BD5EB500DB5D5DE19B6A5205C826EE7E805930BB01296F245F285264759C5D87C10CBF9FA8FB2BCA99EAE647E18E39D23CD916C7B8C709740D88DA333A7772ECB55BD639F19F25BF0F3CDCF1576A5C5B4EF558284D427C226DDA5828F2A638310243A42BB9A180C89DBC7533BDE057A6ADFA799D7C316B4949B49488FFBC760CA818F9E4B11A83FF144B91076C98691944 -MD = 2B8A7D7A4380D094003B9AED3C8A59DE086BD6D18B15E0435EF8E98D - -Len = 1456 -Msg = 0DF2152FA4F4357C8741529DD77E783925D3D76E95BAFA2B542A2C33F3D1D117D159CF473F82310356FEE4C90A9E505E70F8F24859656368BA09381FA245EB6C3D763F3093F0C89B972E66B53D59406D9F01AEA07F8B3B615CAC4EE4D05F542E7D0DAB45D67CCCCD3A606CCBEB31EA1FA7005BA07176E60DAB7D78F6810EF086F42F08E595F0EC217372B98970CC6321576D92CE38F7C397A403BADA1548D205C343AC09DECA86325373C3B76D9F32028FEA8EB32515 -MD = 1C89D6460B3F13584BF8319EE538F24C850CA771A51ECC547652BAE3 - -Len = 1457 -Msg = F8E43655B94493FA926E048EFA326945C953FFEA2316BF10C90D8B89FCEDC9E65E9A9BCAA73B5EF6B2AADF520D92094C9FABB9D4BA8E9498A1D0F91AC13CCAE05DA45ECF860606392BF868A0DC145F85D3E763DE868A65A9725C12F594D4645DA14C8C74B34BEC7AC206CB2CA3279F6CD594691F434C25D365A3CAF900908A45F051032FACA859544555FD9D09BA5AF7FF07CC309926086F92F1808D711F7EED88068EBC5E1704A3C2601F6B30DA0FA73C39264EBB8A00 -MD = 1C6B7BE5CF547E111469D9862964998D6CD2BE1E4E24E73D2179F7EB - -Len = 1458 -Msg = 05CC9F30A93EF36488B4CE5EF2C7C3996CF902620215CF9F06D63F02F5B4B33A41E6AD8BA5F86A91CC811F6BD5BD8634A90103D1DDC83E3F7FBF3259C85CB1D2BFC5499345A0F5A5A40DD26D7D85EF30C49402995300C7E5794590707162AE45194A916D304BBBA40ED09F9FF063EB0C9925F1743F968BD78EBFAFCCB67AB4E379065DB6C6F4AA5E933A9905A2328C5762819EA56B496A1834F017C387D5CAA70631113F3308ACF1AD2CC01B302E0BCDE3635CB699FA00 -MD = 79B69C8769FEFCBB63741F3F4BF85FB019637A89AB04B5D9AA0080A6 - -Len = 1459 -Msg = 918872C3409496104D1F1CC94F168356BFCDB801DF3CE29D512E0F1FE736192EAF690EAA9DCD9216497A29F8AAD1F662BB38BE9D2D94B0CC25978FA5C2FA1E6A3F8F594BD354AD4DA9011F35C2A9B47FCFE20A83F5DC7C9750FFB60D24C7013923B09E4D8C8F299280BEA11781E2E5971872926728C2FF2CC2DC946D342E0B9C8B79576CD8F75E3AFBBABA4C3B2CC2CB21671A24F2190650D2AC23EDA04061440A31AAA50122C745D0FF9A3971BB1B3C698147DE9981E0 -MD = 59A11F4816CEFF970F9F80CE1973AB773442BDFFACA057AFD9FE9E4C - -Len = 1460 -Msg = 307310A8B3FC2728EEB4A10D9620098D24A8C5059A6EAA111E401689EBAA2B10DE5876F12042A1422EBC9B33F9C306C506F59FD76FF5BB194C278E41370226ACF7BFDBBC7E88C82D4D28AB26B669562F67EE3EE9A882B1CA390FEDDE8AC0B70EA2E29CCE4B9169A83835A72BDE1709BE8638BA00D05149977EABBCA5D0B70D0BC935F77F85458DE4CEA519A32E29EF01CCC760E7E549A347BC227C1B127E7D46F730C01394681D0E3B3300446EAB291207CAF424C679C0 -MD = 6B9D2892294E4EB2E2B6B9C495CC86AAC857E58FC4D9B9AC6E8BD014 - -Len = 1461 -Msg = 29EE9AE317F88A0A03059E3AB719C6D6BD690C9F2A54751E329EB1ED700E5D2199F80D47E711F83A3FFF5D7E6FB1ECAC25E4E5BDD8CF81757F59AE3AAB01FBC3F8F4BC1EB9618601FD00E3BBB9AE6B7CE52AECD8C7D256CCD22FC7F097C70D637F39EB138AAAE3B826578273D47C12869413F9E3EFC920286CBC247D0395165BE7BA0AADFB40F431F0AE40122DAA6993F99E15FE3FA0B37D610CA794B60458205F85A1E8C5AC4B10B772A7E96256F87410C62E9CABFB20 -MD = E6DF3FBD4342E7BA2C15BF9B4897D1232B7BFC0CE1813BA0963CBB0E - -Len = 1462 -Msg = D1E9441652727BAC2E45E25C2BB6AED06FF14EE8C4968183EA986B05B096D4000AE3AF0AD3E565B82D973B574C30E5D58946E987244520EEF1E0D76841235C1C7DA7AB073B86D0F185505A4491C19A963ACC10B166EA9F7AA164EB40989674AA882E9AFC4F58344D7C60B4784B831DEDE1C484FE5644E98EC02D3772F762565AA95B52A75D4A890E5AEBB607956F379F20EDB1EFB87B21163BD14858F8025426A26630AB5C43550658F04DEFD54ECAED3513AC077CE9FC -MD = 21E5383857C81FD293337803E7A51B94B3479D01E9C944914AEFC1C1 - -Len = 1463 -Msg = A12F4FD666CB7D9226CFAAE60161177991EB2319316E8BCEEAC1EE41E2F44D6077E5837748B1DFEB545650429C4C76883408152A239F494742BEF1EBEEDE1C79617712C8F01BB17ECE00EA31BB14747B657E6C1EEB69A1EF5415E3A0C96EA2A3772417A2ED061C47F358C0225463002F280AE990F0B01FFF211B0CDB479E20F90F88D5C67D2A5708D655F6F05046E92F8CA0BC440E1164520D9B57D0E0F4048E8D0DF854B410B4207571561CF1B3BDE8293C46F6FD19DC -MD = 9BCEC37298E440898F996626350C0D871743402511DA9F0C0D06684B - -Len = 1464 -Msg = 3E15350D87D6EBB5C8AD99D42515CFE17980933C7A8F6B8BBBF0A63728CEFAAD2052623C0BD5931839112A48633FB3C2004E0749C87A41B26A8B48945539D1FF41A4B269462FD199BFECD45374756F55A9116E92093AC99451AEFB2AF9FD32D6D7F5FBC7F7A540D5097C096EBC3B3A721541DE073A1CC02F7FB0FB1B9327FB0B1218CA49C9487AB5396622A13AE546C97ABDEF6B56380DDA7012A8384091B6656D0AB272D363CEA78163FF765CDD13AB1738B940D16CAE -MD = 99981766CFE3B1888F2A008EFA1088016CB29993567F9BB74B5C4D3C - -Len = 1465 -Msg = 55BC529569E0801CD498C8AF42B5461FBADD2C26EE7D32CBD5C682B62B41584B1E268A85E039693E4690815F116C315184450F0443F585EB53C4E101D02BA7DEE60C6FF63CE5F9FBC04FB8CC4564CE4BC2906B23917AB86DEC1E5BD443578E0DC7A3B4A0D06E0C6D3D869AC686EEB943232F44FB71206899A068F0D7503F052A765D509DF738B6C9EBA2F0A349FC7BA9BF6827AE8AD7959FA186054C31766DD4535873577F20EBCE2E6F1972357CEF9915320FBEAF253100 -MD = 253B5C811E783FBF248EB1480BAAEFCA95AD64B8994DF7716C1C4E46 - -Len = 1466 -Msg = C29B2724C942166ACA51A1FD3DCC1BA857BAA82329022DD6B54AEF86AA4C60359B60B0C377C56A793807D645EDE0A20A8D0C1EF21B3BA7D4459609BE3DDF434F1ECE24ABA109F90E1CD2AEAFF4C924EE8252CE18E5B60CC598E8F6280B9681672FE0556D22FD2D7F264909F745545EA2D828512877C9B1BC12E0597DE7B10FE8A7C24841A09BEDFEFC7070FF1EFA61E7D602A7B6C1A3EED14B4D3CEE999CC484C455373412812D609183F8E2858A9FE56852111E17769B40 -MD = 78083E7EF47F45E2F3CB1B66BD300E37CDFD7CDEAAADA799A678F1E5 - -Len = 1467 -Msg = BBFEC968BF89177A453BC37ABDD7049F5B9E3FE88E090708E6807D8502A61443F2AC1D28E2CA0BDF925D55E869CD89CB9A647C2B17D5F561B462E2014D78DDAD9DF49E9AB6F41C76C0FAAAF7D6E11EEFF841112305756437DE2661E73936F7F1B497BB99293F1E04A89B70D41A045D37127F95C358A66813F8E894544E8D287EA0AA576F0D036AB3849D34443D77EA4E4DB8879F41921A103FA1390C001E179CE81D3C08EA23C0F3D3DA4ED4827B018FF5A6EC816EF890A0 -MD = A91205416BDBE5F250CB6EA4A91D989DC946835398AEC329DEBF74A3 - -Len = 1468 -Msg = 4F1873004061A5730EB73DA54F66A5E2769165B2AA9834188C124CDCFCC76863F252484FB91EA88D83F01A617578C828A39EDD28FBF9B150BDFA10195F229B6AEEBC4044F8E020135448C0C9AC6F218FD775864DD0D5276EDD9A2312F427D3BA76E993DC660764D1675188BA27F16C858952307203C2627F81B8CF39C617E9A1CBA0517F4EAE73B26C8B5793AAC96D51FF8383D24222937DBFE4489FAF8E2A1E2F2511E58860320E0328CA6853C862D3B9FCA83A9BD50450 -MD = DC719C7EB33BA48379F7301646E73302E603A849A52F44172C4EC9E7 - -Len = 1469 -Msg = C15A364863123C42B27DC6B60BB754C1596396DA21BF66BB4E874C52619D122D065EAB67ED766710E17078E886BEDBF49DF81035EBF94DD8121962F221A2E68F9A6D0AB13B1CF2DA0919D9DEC33860D499F2DB1F3945972EE7634258B6921DA9C88FAE360E9907F7926942F3321B0A4E68893528149F5BB078F3A72D20896AA327D3BDD615D02337B1F1B60FC81B02BD68394D681B2EEED6E3F20E1E40C94BFDE855AD8B13536C4BC32364955BE2952EAB3A0C94A195BE80 -MD = 7E08805FBDA6691C69A6206910DF61344935AAC9EED4F72202BF6F05 - -Len = 1470 -Msg = DA29CC2E02E9904345DEE5618997310DBDDA21DD65E28CFACAF637837B9466B9791059277C197A33CAAF2AF7B88FDC143F16DD9CF976B5FD6C0390B18F8AF6C7B93000DC2CCB061D7B63C60055B840EE0ED935D455ECF9586CEB935B041E2C58BAE410651F5DA2BFB3CC23CAA30AA9038563747CB9E05764277BDC9D50330BFB96255071FCB22209E033A269A9537C5529CE2A9F3D332CB903C715512E611E4E984191A7EC7BBD4A68143C8AD136E7ECD5719DF0383AC218 -MD = 2A65EC4864B6BE25B80DDCD63978607D3ADEB6D556D187963DDA80A6 - -Len = 1471 -Msg = 94EA90EDA1D00D2F8299F99C7AB8F2C19D05452155A5117E07505A1EFEE1B1754B011174F1C41B72F0AC72AF62BA24172565B5AF8DBE62EFB6BAE9B746F3487A9F61557AADF0BE5A2C8F877A7D2E301FDF45DF9A50633F87C99C38102F4E011435F451278A17CED52764FF55BEAA3E7576457E81A685F1A03770CCDEE8C06C1158AFCCF0746D58DF1E85DB956B75DFD86B26CA9A936D0833BCC64356782F27D5E9F9C76898FAE7AE1AC44B07272AD64918BA3E5BCB272F02 -MD = 667485D12BF559B5DF8C08709E4533F6B6D42215381B8DC9C054E2DF - -Len = 1472 -Msg = C38D6B0B757CB552BE40940ECE0009EF3B0B59307C1451686F1A22702922800D58BCE7A636C1727EE547C01B214779E898FC0E560F8AE7F61BEF4D75EAA696B921FD6B735D171535E9EDD267C192B99880C87997711002009095D8A7A437E258104A41A505E5EF71E5613DDD2008195F0C574E6BA3FE40099CFA116E5F1A2FA8A6DA04BADCB4E2D5D0DE31FDC4800891C45781A0AAC7C907B56D631FCA5CE8B2CDE620D11D1777ED9FA603541DE794DDC5758FCD5FAD78C0 -MD = 0215E91EF992DCC7E82D16A2C9B27921C1310C182F59DF8BED5151E8 - -Len = 1473 -Msg = 44A75B4C7422D2FC2879347615AC5EF30D1A10D6EA091C9F93748CA7BC5D48D8961BD5DF974BC9850BCF8F529C86237E1E836271EC0A4D6DBD9DF26A016B22A12571476FA219A9952B3711D19DF31A840BD3381B51E94F3212385DFFBE48162AE4AA4D5EF8B555B83EA5B37FFCF30E1C7982156B4438FA12E4D55D5066EDA3073D630942AAA5415524B2891B17020E7C71BB70EB24405CEA0A091D42E6DDD5E2FD3C2401E21F4EFC0FDD58E9D592D8DDD72C475A5026C99C00 -MD = 67B5408B5E3B78966BEC92DBA55085A45DC60C384D461420E83C46EC - -Len = 1474 -Msg = 09CFD94CC99BD82ED115021FB794B680352912BE0A8E28CE534E82D4AC283FD68585CE8BF121D1F1953F2FA98F38427525D186635CFB0AD88D5FE7FFCB4C469235139AC64DEE44C8B1361363F6FFBEEF11060FE26C516FDBC421752D0E4700F91237F38819AF9F4F35E519CF52FF4E7FEC87B9079B8ADD4B8F6C49828696122F279997631DB09047B88206E2DA672B1DEF24CC5C022D3845654A680273872D7E0E86685DC809B692335667E99D2D108AA9E0084BC9AE177780 -MD = 26F23649A89CF6EC98D1A7A089534B1E3D24918BE78890E1CF9781D4 - -Len = 1475 -Msg = D445328CDC413E194E2674C4861E4B02834DC69113CEE287E147902A8182E845C722D0B48BB4CCF68D69380F93DF2D783CDF63D1935DC118E4B209A6B2082CF88F4CD4AD6502C0F1CE94348DEE1D382C920450FD1668A1C4087877CDE362F4F8AD35EC122F63B8C93BBB06CB8D11C4305D38E783F3F536C9ECEF1455C294FA8175C910EF540E64E85D4E84216BCFF45725AC1AF6BC30F3005BE37C359F7CC0296D508A64B7D91F94B874A24FF602AD7908199C3BF08851CC20 -MD = EAE811D74801E1B765624439D8F9E13ADE6F91BB99BDE7055EFCE829 - -Len = 1476 -Msg = AD7557DB28F9AC08D6F70EF4AF59606DE6431BF5CB1AEA43E34D3A6B2A33DE5B654A11D95CFA02E24E19E65BCC45BD78D0266F1AECE3E10B4E101BB4238847BD4F88D019DF1F03D089EF5E51797DA0F2A117977861BAE10AAC4977F4C0672057B535DEB34C6F99BDB94A7ABDB015CAFD017A27CB710C5CFC8EDCAE842930F10A35806F5E1A9D2398AB23DBECB14A50106720523A1BFE54E3D2188C672F177B993FE3574908789FDFCEC58CF811440E9060497C8281C5529340 -MD = F7E3C490588607BBA2D755F31E7574B4CFC3677D64E9A811BC740FD1 - -Len = 1477 -Msg = CFB596177B9CC328223225536EE388C73D740E80E777BFA3CB117F9044EC292EBF6BC61521C6A2E9D25A7737EA702AFFF5DC7A521EEDCBA633338FAF7E13F6B62A1957D8DF39748DD4A0CDFAFD9235294375C5041761C6C54714E23EC10249AEDEDF5FDD1D25ECCFE9C240C759E435F6C8662F5CC1DAA40DEF573ABDDEA0908A4D6B07CC148F4153E34D6D5965B24D3553EDFC34CAA0634A622B22CBAD494D5C2D0C908B17B5E7A3E785AF8F8B80808B1F0DF0EE838DEE3F00 -MD = 8B94249A9C416B2EF5A7D940B55DBA9B8F4DCA84CA4B66FF552C9964 - -Len = 1478 -Msg = E93C98D933A5F2C8D34F02E9BDFA64694F79FF969897F7F71D776D16E518B4F91443D3799DD0C4BFC6582E080B6712BD93295922C6BDFA99BA209CE536489A25C4755264B053DB2A0948B98006648E00FEE6A3B1C644DDB775EB4B092838FFF335C92B7EEA8D51A44C563C969E9CC09042C6809AB5D09FA8208BA2BD78B7F6803DA6A92F145388CE4FDA96BFAE287121809BEBF7741EB0C7A27E7E7A445C4D448D8A98BBB6C1D31EB8183DD21078E6BF6DBC9653A2E2053890 -MD = 276A9F7C9A2236250F3A3260052BB9F36AB484105793948CA7B3C89B - -Len = 1479 -Msg = 532FB4C8E6753AC952A1B707308830D930A10D7F4422F2FB54CD2FDE1B584BB75ABDD8017F2F2966633E4ED2BAB7DF21F7C6652645215B18DBCCCCC64B27139A68143CFF9930ABED16022164121F38D4D12E62308D898420BF00A59DC3A7F26F07C8AFEB4F8CEF3DB3C98B307787C495B60A83EBA8594658D6E5F4B13057523E38D177F20C715A7C0188C2B342CB26D7282C5FBB124C6CDD7A1122F63080B8FD2C671EE1E994A874D14C1B4325D06733E9FE962E06219DA988 -MD = 78B905D921AC72D922D46790EDB5F083B26B46A62AC59038CF87BDB9 - -Len = 1480 -Msg = 8D2DE3F0B37A6385C90739805B170057F091CD0C7A0BC951540F26A5A75B3E694631BB64C7635EED316F51318E9D8DE13C70A2ABA04A14836855F35E480528B776D0A1E8A23B547C8B8D6A0D09B241D3BE9377160CCA4E6793D00A515DC2992CB7FC741DACA171431DA99CCE6F7789F129E2AC5CF65B40D703035CD2185BB936C82002DAF8CBC27A7A9E554B06196630446A6F0A14BA155ED26D95BD627B7205C072D02B60DB0FD7E49EA058C2E0BA202DAFF0DE91E845CF79 -MD = E52EA6714A3978810DC19E999C32516D4ACF0CBCD67E917A4FEB56D0 - -Len = 1481 -Msg = CAD77B5AF3CD58692829171435B8C7B878D31D7A7DC56B0B89F6D13C75385AE8B268E309717C289F988ED5EC216703148CBD202FCBF9A07CECE0E9E87C108761CAE85DF513F1BBE31C6E9A2A4E9282BDD037491B65F70AD1CE54FCFE4CCBAF3FF59CF815FCA87352B7BD1BF1A61C32524AA4E8A41BAFE3B5DE8BC3E82EB3DD989B8D4FA36B023FBCE4456E6D253C70018DA40033F61821DFC937B0D2132E78B235903617E6511E3CB2AE00848D3B0ADA5AB00D04CB8539853500 -MD = E386535C690687E3F75F0AD993FA72049D864DD9A3B44F82898A8E9E - -Len = 1482 -Msg = 9FA55EAC5F6D56ED388E535C9BB95EE7129168D77438427E4CE012EE9DCEF6C489F72D660C6766152A15EBE3CD9CB32D143CA8A44D925BC8763B16CC8820C2C4312E1F01F691B3BA08A4DD9DBAD5594887A9129025DA743FAEADED8C593889E6B12D9EAED305917155761A62B64B5FDC250EBF7E172FA047A18B5E2FA3F65900A2E8B487305E296DF23260A08056B8FC092C997A82C0A0CB647A25D4EEAE8AF4C5F301DC630D43D41331C3C722C60F904CE8F1E59B54B8D40A00 -MD = 5B5D482C589558FBE72EF086F4D2D5A3F0C56C6819A4A4B4EA94C1B2 - -Len = 1483 -Msg = E256110F06106A8DE854A108A4C6611E415D5E73948718DA023521B2E948CD898E6B2246D7905C6D183D8BFF98A43554F813E9D19E09757879ED5B29FAEFCAEDAF1FDC8CE2C4AEF6A5D26F35331C899895ACBCE4B234B222CD5E0E19CCF9FB4D75AC50153684C3F8647BD0067307A07ABCC75E8C15CF62B842378528EA95D34837A87F01ABDF385D507423BF9803179DAC1FB8278FD28CE90C7194296D0AD9432591C0C1AC2EDAD8DD5C07E395A05947B8235AC0434286ECD5E0 -MD = 79823FD5FC77799F582EFD5C46BEC6B5EB2F1110F7BB7EC2302CB1B0 - -Len = 1484 -Msg = 54BCB9646D0C68565627D302A0FE16B1729E78A0528F96BFE95C130797F1A619C779267A13883D0CDC992CB0444B0FF694787EEFB42978BC483027BF22AD8F43B41B522B74776109D40297F61D104E6DEEE4C189552A2228FF97679E0889D6A76425DDDD08911B8C14B63803B76358B7B2B9FBF121208127E4E5EE2CC9A3E71CF29E17C735C29557F09B168E1818DA2215C96F2D4E08A1B09F996974CB8D40488E0A02B9287F4526DFB13529EB38B80761BF918D489C763AEB40 -MD = 1B458E112828180E4419C89F5DED1E79CA7231060826D6C101CA4D29 - -Len = 1485 -Msg = 4BD43ED651E7BCFCFDCBA394595BBE757608C73A69B10A94B40DFA689EBB4629613602651D716DD360A98F1C942EE12E73236B4689BBEA3F98DD276255803F9F9A054E855E4C16EA37577D84366E227E3C66FCC646B8851393895A8C18960B1C6A9B3001B30F172C3B13DCDFE89E71A7D785B2E9C3D49C82F2A87625B5BC544A7DF12406D65D627AE666AB4E6D7CD133A92DF5E1B2AA31E146D9B3300EEDCDE1817A77182FD9F71AC45CD42C70CA5D6739164AE6146AEA860578 -MD = D0CCC8C8A164FE35CF52D7454FC44959A0F0873E75C919E95F55AD19 - -Len = 1486 -Msg = 719D1B312C421896259055DA2BCFFEED2AA86B319FCBE4370B8AD722952CD203B4AF18396F45D934C6513FF21A90A44A0EA7C5B931989F0BBAD559334E020FE6925C76BE4F6339D6C8EF64A6E7E011FAA3CA768F40BF561EE58AD5B9EFBD75E6FB51EE8DEB820F61E398837723D34B49EE251023929CCA4FA70078738E2A49F15918FC0B680F9E2C9F91145C68D35064639FAE4417E422FAF9E723E8278FCD8530484B4A41A193BE9426DB16AB839EE616F80512E59BA55CA304 -MD = DCBE756161E8D112ABC5367C94DEBC060EFDACDB3DE5CFBB7D1B597D - -Len = 1487 -Msg = EA044B09C5EC1E6A714E329A63B70B1887A6085274EED2DCB8F4B56B2991D2768313A56F6733231804D3D283863A764843B59409A9BB53FAB192877190813F9DDB08A19ABC32DE2F1FA58FD38C002EA8BA8954182CFADB37E90170C2E0FE3CFDC614237A1E8F0D7C4679BB4BF794CBF3E22953A5EBF55C22C531A282CCDB0FE8B9ED6EF4D731B4B73495FE632C328B7682FFFEF79F5421D99D9E32947E290F24F76FB45D38BC2159F84FC2675D5F059B3A56B7F60B35FCE832E6 -MD = AB39B56763E888269C2975883EA799E0A229DCAA9217B854FAF8BDB3 - -Len = 1488 -Msg = C464BBDAD275C50DCD983B65AD1019B9FF85A1E71C807F3204BB2C921DC31FBCD8C5FC45868AE9EF85B6C9B83BBA2A5A822201ED68586EC5EC27FB2857A5D1A2D09D09115F22DCC39FE61F5E1BA0FF6E8B4ACB4C6DA748BE7F3F0839739394FF7FA8E39F7F7E84A33C3866875C01BCB1263C9405D91908E9E0B50E7459FABB63D8C6BBB73D8E3483C099B55BC30FF092FF68B6ADEDFD477D63570C9F5515847F36E24BA0B705557130CEC57EBAD1D0B31A378E91894EE26E3A04 -MD = 4C3D6321133EF74810E60D3190FFF3CF20C8521CAEA6FF782D7E3BAB - -Len = 1489 -Msg = A3B6E919C29F0779F010018E9673A03EB7B45D635CABE817ADDE1024A39F14406956BB363A3C9E5D05CCFE04C98E26547EB5D044221B4A2EC10035187D7E29FEC3FE04E540C53FF0A5AAD283FF6DFDE44A4D66152F3A57341DF67554E504D4575B151A1C1B03883828E22997055CEC567979BB54784C80D57C17AE590B171A4A8E9C539E9B35FBB99369E35889A78F93A47298054C29D16C627A61228C3D489355158E4B3F39F7F515F93481D339F72FC8B3A5F71CE123212F6800 -MD = E41A85935FBF4AC2712BACD52787C6E5B92074CCDACEC3F59965F5CD - -Len = 1490 -Msg = 4EE4B06A4E24251F70866E9677E9D53BC176ECB513506058D0A77799B0817F2DD51A1FB6C092579435AFDD86D996EDFBC9A503C32FEEC9307755C83F6A39D057DA88CF3EEC01EF6609CF60D2149D61633AAF027A4AEAE25BC64C469AB4EBA304B8347D088466AECCC5B3D18CD3E24D3C6C95BFE2711E61D17805A92D05BBF8639A0BA9ADBA6D5394A09924415BF28F778679F1BF578549CD71A0AF3E57DC74DEB58B65792D3117C0835A03F0AFD622D8649696B92A8D2D343E7300 -MD = 49DF48D8D14D08EA01578AEEEA8020AE268F89AEA784E938D03CAAAA - -Len = 1491 -Msg = EA20C22288323559BF6E70257E5A591DA6AE97FDA9BF2D2AC91DA8CFF506B2DE939F49DBBF7C8F31DA22A7F54DD2C5898256EA9D7B6A509FF3B9E593747C4765E5F228C8156062DF6A15135DBF582B0789AD1F12565552DA81825708D215B012C3CF333D3568A26D6F5DF383E8A47730CA657333BB65534EBE04E4A6253728D5C31DF432F55F71EE5525E430586153C5D8E99B4C9AFAF7B4199990226F47A1F68461FFCF3215CBDA693485F3C155C559B47FB86FB176106258FB40 -MD = D0526AD2852A70F7D4A685C3A09698DAC422E59ACDF2D88AF477C05F - -Len = 1492 -Msg = 441C41706EF18997EEF9B4990BC7B67273D9A90E99A64E161F0F79223A079EA8873500D722834DC7177A9063AFFC05E6B1C67B3AA10BB905E393E6C998DF7ED17EDF76096E4514D352EBB5E060911DA466D6BF26C9E540D10D5F0A0D5D7E0244B89CE207226112A782CC9D98B206EAEABF5C31A3F752C780A3FB57A46EE81E4F0F28A4D5A0ADB405FFD80B35CFA93EB2F6793EDA5BCF5F9E8D57362FF4C65ADA45064098F110EE799931B04C913A05E5C43BA6427FDF1502B546F0 -MD = 8BDA48F04CA8EE451483F0BFC885304F0F7B2B125F2251E8850AEACD - -Len = 1493 -Msg = D61ACEBBACCE0A1C2ECEBF549884696BF89A6FA017148D21ADE0BEAA038B417A0423B167D18286B3F5981F73E15760E7655C903EC27B41745EC22CB790681CE19857D34B249EE0FDE3C4F2211E6ABEC7CEB7FACDD8C23B1460E87EFBE81B4869851374DDDF3A79EC5A9020A185E6F87CC6F7BE11A6F8CBA0C4819F80E0875A9816116B9E77634CD06ED3CD88BC6B8846CC622B4769D20C9B19CE4C94B3CB2BF932864F9C472919280835692DE0DB831A0DF8A3884439ABCDD93AE0 -MD = EE525E5DF9CFE272B43B62BA57E84846261D2C1D3653F3C4E59C3FEA - -Len = 1494 -Msg = B4A2C1ABB183856531A1D8D13D5419E2905427814E0D941428CCFD0805D96B9AAB2BAE33C09A5940823907A58B0672EBCA981E5302F8143D48F85C2988347750606E80AA2FC4AAF246D0066BFE85B1D43882AD048B373009E7B75DF4AF50C792FA3C22216112136C80FD303CE511E9A2D9B906CF0DD009171952BD062933F58A96150D3AC0551E77B69037A0DE0569C6181690FE780976758E10498DDD6A8AE269FF8BE65B6EC809C8F81DA31029798753F3BD53906B8B3441A448 -MD = 7208DA5E83E4E76D3D6AC7493CB56994C073F1637369EBB9AE2F462F - -Len = 1495 -Msg = EDB075B34AD833E5481CA7E60C44A435F960F741B380AAB44DC0E7D36DFF686967B6B2CA190E972B02B574BBEED5B4DB6649094BD1E858599276591B2F9D8B4F09872CB8E2689D3263D363C185FE353D34E2B4D74536DA74F9A1EEEB5BC820462DAA02E08DE18666EE45DF1E3027C324757090DB9A428FD9616B77C7469D7D342FB3831D3C2ACAB9BCD3C29631445085AEE08EE985EEBDED841FB16EF45484E6EF05735CE8DE6CA10D71DF778251F993C5B59FD56E40C2F99A77B0 -MD = 289A7A7F8A18F22FC1644CF696382857019F6377DE256241C947CDE3 - -Len = 1496 -Msg = 8B8D68BB8A75732FE272815A68A1C9C5AA31B41DEDC8493E76525D1D013D33CEBD9E21A5BB95DB2616976A8C07FCF411F5F6BC6F7E0B57ACA78CC2790A6F9B898858AC9C79B165FF24E66677531E39F572BE5D81EB3264524181115F32780257BFB9AEEC6AF12AF28E587CAC068A1A2953B59AD680F4C245B2E3EC36F59940D37E1D3DB38E13EDB29B5C0F404F6FF87F80FC8BE7A225FF22FBB9C8B6B1D7330C57840D24BC75B06B80D30DAD6806544D510AF6C4785E823AC3E0B8 -MD = B9F006DBF853C023DEBE2F40035A7E83C49CDE656EC86A4621950F3E - -Len = 1497 -Msg = 91D47B29F4A6397296F8FC30D7DEFEEFB9A0A29D56A31F0ED443996E66EA7B9CFC0122F8D942B8946F80C352C468DDD7F1FB261C3EEDB4274040BDFEBF60FE4F689FA7DE2D0B692F9E401BA17B810906535C4DAFDB004AD235798205BF9615E5B4FC385F6192BBDF4865C4E4B299B1494C27D98844F7179EB21A7CC464833BB5E6A0165DB54B9F9114EC8604F662B6B3E8A02E22AFBC170D66CD06A78C7831083119BCA3356079688837B1F2488A4E0A12D754166FBFB4FD81CB2F00 -MD = F3ACCA0B869756649E3ACD6DF4D57D9E97965C86B1ED79C34224FF09 - -Len = 1498 -Msg = F5CC4F8FA3793571B809F6CE2A3D500B4B435116AA90E04FD2A1F591DC94EA41699033076B30FE816769F0B59F37E72D2E476DE192CAAC4110C2A46635A05BDD8516C53BE98B505182CD4A75E6263972A2AED090FBBEF69F929422EE15737C23DF60B26797937A257383699FD13F3A85B41429CBBE83B6E2AD4F5D7C5D935A956A73E17330D822F7C869E7FAA76E4E8870D9E0A3B219CF145BE394D339782A927386F1FA2B1CAE28337126927501A43F6947B6FB80364D0B823DC500 -MD = C320359E9FD70EF2A93218E4AC3508BFE3832E187DB7E52CA03DD479 - -Len = 1499 -Msg = 5D712726889DF7831304D027671BEB451F1A32492A7170D7FEB2FA755AD8BB2E1CD6BBB5DB2BF4DE1588CC0225F674F10F8AB9846CE5370BFC99FAD1110D7CAA132B2FB08F371B4D067765ED91A8E23D385EB065D47530A394D588777B3CFC22D1BF8F68DB285B597FBA71D243A4C4AAC7B0D1376A468A364C16A25F1E4404620EB9E9D5357BBC30F529FD8F02EC09D959417E2D4B3E2980A20D8F633BE8B9F53FB8EB276DB34CC1BC10CAE1A6BE1ACCCD75F3775DB19EE52B361DC0 -MD = 7B0615E2936315AB915DD559B2CA1ABBD21BC4752EBA915ACC754D45 - -Len = 1500 -Msg = 1809F981B54AA5B37007A269F6CDE7144081B3E6538B3205B366DC7C85DEA9A1655B3CED86D8B9CBD892E3A06FE3A57736128D469FCDFE32FACF51517405FEDA833478A3114B365746762373B6DA9BEF0E8F08F0E8D7D4996B5AC19A48A61223ADA7F7D20BE3BBE9805784A47C04A8FAC94AC5552E75E3082CBB2757DDE0744FE97E08D403240896CE381B4E48AA5F45CF3F5B7F33D402DC6070CAF90D742799E861BB792C009C636D8D73EF0C1805EE47365EC0EFA6C2CD794CDB10 -MD = 9C17900BDFCCE18C36147A04E8368943C6B09890272522321C120F35 - -Len = 1501 -Msg = 06ED3B343E6D7B3E85BE6CCC154FE33CB8F515DFBE0D90F0E707E957B06F89C0CDE0D7E767ECA5DC6F39AAAE3A5330FAA2674A63E76125E66D21C82482E3F51A3E08F17B4F2887BED5810408CC243D52D535AEC4CB63E8FB655FE331582CFD29793C16A2E502A715BF6F71CBC3719FAF0D0A1C74B1D222028C524CF3125C5ACFADE467952CFFEFFDF7AE7A439320959148DD5F21E6549F602C7E329B9E59465D5E14987F7FF101F725FF7AB15AF9F73848B058C61275A3B1FB0AA630 -MD = 9A4D006340EA984C21AB657E324FF771FE99BE50AFC25EFCE6737EED - -Len = 1502 -Msg = DDF19649A6FFA95A56CB8458A9DCE9BA51EE5FD82120952C38D7E0244EEC4710F2D2D67DB61079E7658D2DC9A69B14427E1AB52EC3E973BCF6041778D95EA4B6A172E8E7ECE8F245827AAE4D057708913FA32ABB973AEE71EEA0F3F62CC8B4A21B924C20AEAA00359A48100F8DB8E8DB10ACF3270681150E326EFE99739332B4FA7568344D73A0943606E4A6FFE49BDC1788301FCA269987F7F3AB43530A0089D5FFF1CE8F3389F6E1889309ADEFECF15B05CA13295BB554E8D2ED14 -MD = 7158C8866B6CD7F581BAD35FF5DC06ED5DFBA45EDCDB2A9E67EAC8C9 - -Len = 1503 -Msg = 4E72712C6C4A26956F86B9EA99A334147AFE15580CEB51171AD5F95E654AAFCCEDFFD10E214F5C71B7AAB2147C4A48404088C22EED0F4BF517D414CE1D2BB04825FEC5E692A72283DF63FC947323ABB95FBF2AF489BD1E8F769405BCDE2D48B892473D8527374AEC620E0E81AE5220C1BF8C4266C8C657A681F7CCFFDD16EE545E20532D93FF70D4F5A47A5A168911EC5455BC4E78706D6436AF51F6939AC8D8598C0C43FE8E11912DDF8B342DAED02777F2D858B967FB80854CB054 -MD = 6EB2756E3F31EA2DAFBB342B068DC378AF97FBB803E86F7E401D9A88 - -Len = 1504 -Msg = 6B018710446F368E7421F1BC0CCF562D9C1843846BC8D98D1C9BF7D9D6FCB48BFC3BF83B36D44C4FA93430AF75CD190BDE36A7F92F867F58A803900DF8018150384D85D82132F123006AC2AEBA58E02A037FE6AFBD65ECA7C44977DD3DC74F48B6E7A1BFD5CC4DCF24E4D52E92BD4455848E4928B0EAC8B7476FE3CC03E862AA4DFF4470DBFED6DE48E410F25096487ECFC32A27277F3F5023B2725ADE461B1355889554A8836C9CF53BD767F5737D55184EEA1AB3F53EDD0976C485 -MD = 0A5AA6BC564B8CB2F5FD7255455C0E7A5DACE0050C3BBD259FDE2AB9 - -Len = 1505 -Msg = 21C9F4F5D4B2F235C5DB749C3174A603E5BF933C0C383FC4FA5832F7C110080497D8A93D3707DDA98042343A2FC52BD4D546A8806241E7C59E98D7ECD2CD3CB4497514FE12ACC0F124024906755F1D76C187349BECCCCEFEC2AFA2C68C50886121087C7FDD4E0E5BFEAB080AC98525900EF581C58A9D71880967F147E6E1D8CB94B9B1CA93EFD3AFCA6A365E44A0D1AF1759A5FBE089A3EF75B0049C09CFBA8D535B629F8FB672BA08B67B3AC7F6045E3116C98DE660D146141608C800 -MD = 7101C2061AA9BFC42D3AC2BD9DA529DACC4B9C131B9400034D83D705 - -Len = 1506 -Msg = AD079FF788E9089DC1D3E82BAB818ED4CEB3B31F501A1A78E59EAFAA6C5898A42D4A766E775F364D9AF8E0E3378CA0C0B3E3CED670688D6271966F6EFF622A4E862C847A43E6A600F9EFA1EB9E6CC3EA624921185F6F8909E9D98C599ADB8EC63ECB752F5F86C4312E7A9F6679E6FE3F181B525F50A6313DB2DF33EAA70BBC0302EE9C7166DD84D2E91CD064F9CAC2D9102938E76D5D78130054D532078FD3BE22FAA84845CFCD91D919ECA680A67D1987E264EC091D81B3C5C66FC440 -MD = 3258590F329445F3402820E3E0DDBAB7161CE0CC5F6F71B119DE12EB - -Len = 1507 -Msg = 8837670BAFF97C556C9C46B55ABA348121CDBCD53A976EFBE084A1F635E37AD9B7CD3F510093010B74F663564F221A80E2582413E0334338525857EC20584D289870E51BEA927EB26C17B2B0EAC46863C7992D73C8395FC914C91C73B9B3A170A599D4C04706E314F8866292C663A8BC130C41209A92A92D6E8957428F1B0A03A36ABDCC1FA2F3CDE567A6F92ADC03496A2464B4B9F9E1634712BA3C291C4A5979A97D105B65D94FCABA9F717DF9B93C799E9B8ABBD7054B8E8AA5B640 -MD = EB89839B44B46AAD2BD2F802D9D0CE2F67291B679793203BE0D11E4A - -Len = 1508 -Msg = 5B41626C5658D205AC9F26DA1670435AD18AC4AED629C65F5DE44CCF1654B871E20FE5F0601108B7D3E6E1E773209D6DA0CE4D20D3865D57F7FA08B36B4278DC0CD5548EB1C8FAF0D3D04373A3FA5887796C3D18846A2A190AE553DACBFD712987CB18350CD4397E89DD7D176279181B762B4666471DBBB53BF8B9E53D604054B65E6AAE00CB588424FD867F745AC82191274939FA4CEECB109F3279649B0A9AB74A5B3DEF529D3C3E98B65E0E32E3568AC227322B67DA6DB28BA57BE0 -MD = DE85BB064ED1A2D6A48A6D29F9492A75EA5109110823E640D90F1CDB - -Len = 1509 -Msg = 76C5DDB4AE2FB58B7851A9F87A8257CA9FA782F690D436EE0EA3AE1C649258FD7DFEFE8D638D1176869B02617FB10C679F37ECFBCD6D8FDFB46A30D068F371867B858BBE3CFAFFB030D30F92BCA496D702759908ACFE978A986B000BD0C2D91918CC1AF38BFE0EBD997017CF687F70D3ED17EF486BFF5449C8141FA64548A6C4F34E477B4FC0DC9CA09A6EB9EC0EF5EC119CF14B055240D9078BBBA339BB8713F0B4DB7B74CBE88EF81B8B2851E377C26672D36BB908B32D8DCFE33820 -MD = 29C3F4F8227C8C686C3F3B83F2727134BB87BCD51DDFA8429E47D242 - -Len = 1510 -Msg = 3231AA77DAFBC66F776E85C3121AC5B75EAFFE1E75E684E9E128332D857B397983FFA193A1982C966BDA623F065D7FB79F78794B7C70975F04BAE50C1E843E00222527B996E9407961E4EC08DC83851D2C6E4EFDD5F1B408AF0D9EB361E1E7CDEC6F3CEF0DA71DC0F4B165253F9AF8974039D1AE2B2FFECBAC3F366FBF999574A16B85277E74384B587005211CA3ECBAF1D8A6E2B4525D85DBB6E025A5A6A274D4AB5728BB9F0B60FF9E97598A3A322303FD228B487DEE554489750604 -MD = 209AADFCC83327CF66D7F2767A803DE6EC46E409F5391F55F6F64E15 - -Len = 1511 -Msg = D40502C71D588EC7373853BEBB5B6C453EC1A10C11C0CBAA921723C5C43CA3FCAD59FE103A439421E0E1EAA81B927F7F90E2D9881A3ECF12BB041CD74FA925AC0F41800CDA6732720A94E1F64716EBB3DA6341FD33932EEB3A2C78148A4A241E54F3CA789C9E9CB798CDD048255E1CBDFAF9BB497428BF33D589FE2404966EA6ED025CF9D83974F82B0A0424DB9BD2E819EDFEF2CB75973BF5B819F1ACE8E0AE28A7FC82BC18A43B92FE9F86D1F9F3E09E5876DD33EC416357B036DD8A -MD = 1EFA505D59C3E7D35F44A523C593F52DE01B6204187D2AD6AB2444FB - -Len = 1512 -Msg = C9534A24714BD4BE37C88A3DA1082EDA7CABD154C309D7BD670DCCD95AA535594463058A29F79031D6ECAA9F675D1211E9359BE82669A79C855EA8D89DD38C2C761DDD0EC0CE9E97597432E9A1BEAE062CDD71EDFDFD464119BE9E69D18A7A7FD7CE0E2106F0C8B0ABF4715E2CA48EF9F454DC203C96656653B727083513F8EFB86E49C513BB758B3B052FE21F1C05BB33C37129D6CC81F1AEF6ADC45B0E8827A830FE545CF57D0955802C117D23CCB55EA28F95C0D8C2F9C5A242B33F -MD = 8CA4E085F04956B5B16520E3A767F8BA937364FE5F4460288AD4F231 - -Len = 1513 -Msg = 164EC736064045386559CA629C733C82B4869BD8890BFAFF495CDF01D15EB92ABAFB515BF16374B33541646D671508B2CE2E4E686A1880A7833277AA51A69D5530339FA446CC614A423669B03B2305869A15FF83CDE64752F0515EDF5A9E48F8D032D13A73B7CCA40E5B2629CFEA0517223F39992BD3EE66F993EB52BE8FC70CBA3C401ECC4E7246CAF7F352CD581E4DCBF0C1A57EE47BE34F2F8D6B005C5898A9F1D0716AD7C2BCB028D939BF1259CC71EF3C21513139301B5A2E996280 -MD = 43215975A2354A4046C1DF9821B03A437E6A399A05584C50CEED95D9 - -Len = 1514 -Msg = 93A3301751EBF08B69B4F632DAC659C973EA72B97AEA6745C3D256B4BEFE304391C4A8178B3E0D68AA32D935F10C455F2D2B419FD4041A0362E7F80E99C0F7EE35733AC1023664E80F97D3CC8A23226C1719D1CA3AA5D57FD37249340F280573D7D4F835CD2AE93429C26635322CC5B6127026CC7CCEDD13686D085292136ECEE97C4027A3625DA2B75B3970CADE67F5B804045C91F5C8C44004958EB6FEF772684B260164C15A55E98781898AA2453899E373EC0DBC940054D35A789400 -MD = A754066B488F3AEC9E5EC143FA41618423517D93736D64810B386CA9 - -Len = 1515 -Msg = 2F64B5FD5A770053A8DBF0244449755471C20AEF67A7B7F80119FBCE5F1C7684E491495D28A1C2BE005F7F973A851957BAC2E70B034E198B3E43D22B40ADA9925808BFCE4FFDB92C96D90A185209EB0C1073CE48282C7066CA26F06138E574CAD984C2F76AE1D17EB05E873F1FD5C767A4EB43C2ED184FF148D55A394F862F140431BD0D1D57190B5238C065270580066CEA65F6A13FF92AB663F7AF0EFA9102F008C1C017C9164D5EB01F345A45A1406885CC039D79421AADF30E038D80 -MD = 2F8C77F546BF3D80E8E5E2834B23C084BA2B8E6D34A45F63A473B944 - -Len = 1516 -Msg = C95EC3A4573DCDEB8ADD58F4529EEF16D9E31C2F9CE4DCA1781F22C9F9E74A47D3045526C7C053030079B462E6A38608697D6FCF7C0C2563C76449271F64B00025BE2DC445ED740C95D605CFB974769140477612080500A7FC64BDF267C8155AC9A068929485CFAF0A2C1EE2A8A005E993A4AD60C1FD2D6EB9AD6FB24945C807AA0A879B601AD735655121A119D87E14D0E3432EA6580137FACD27DB351ED3901F5C6330B7EE827BE2099904793FF3C6F3C88B2D684D10531432DCBBDFF0 -MD = CE0590FA9A63C6EAA5811BC5279340D8C11A46388843E559DC906C55 - -Len = 1517 -Msg = C1E2C87F7DA563CE3970CE5F1BB25EEE582DEEB4D95D5930064982B139CFBF0396DF7F4625B175AB5DB3170A42DCB97FF3588FFB9178A45D9B7B147B5361156393DE9581297BFC47A9EB4F4DED2C05119C97174FF0191C27C83546CA1F06DB74EF562A16D61330D2F3568A2F09659BE40D5CFFD1D8406711D90B51990AD575D1C34A8138A9ECD2F7468CD39DE4B9536ABC19CCA8EB729E5437DDEB86319B5A7412975DFF6EAD33ABD1F598061CAD24DC0810DFA064A3947A773A338C00E8 -MD = 58FAA726ED3738055C2CEACDAEDF1DAEF47CA8108718984163A56ED7 - -Len = 1518 -Msg = 98F2A571C0545A06CA3830F8C73789AC2B5361BBB2B93AA1AC877781F827D3C207703FCE38031BC54189F87A43F10860D4B402DD65A4DF9B5AC88AF2B0B37F68BEA1086929E65DC2AFF2C2FD215D6C8374DE7A89C407F48C63B203896C353712BAD1AEC664BFD196F906952149E50600F831F05DF71301E0DEBE49591375956930D72D15550655E48A8080D651129C5D2FF92E80A3C13745E74397FCA228AF940A349B3E90F51CD58666F1BDA760B6A46F0558E140B6DFC4F5748C58BF4C -MD = D975397E73E879C5FE14F9A259A1E35BC8793D5F57CF7731BE90655B - -Len = 1519 -Msg = 0A1CB542A7A25319117119DCBFFE09F7DCBFAB7B689182255A9A962E8CAE47736835CF659D7514E0DE2C68D319BDC2A220159B1FB090925AAA1660E1867461AE0FA3CFAECEEF44344D60C6803498DB0250E193482ED57871FA5393604B77A5B5C9A9299152F889407A1FC6D7309888F23FCD9955A43E3469FAA8B13676687C46DDB31D3547708AA814735735D39BA14CEA70E893DBAD172A244E51B5499D7607DC7D724F74ADC906A8C3909F643CFF39E5C3A41F12EBD18DC52E9BD4DFC0 -MD = 236623399DB3E20635618D5381B9F2A7923D8A6255F88F9E53A5C6C1 - -Len = 1520 -Msg = 07906C87297B867ABF4576E9F3CC7F82F22B154AFCBF293B9319F1B0584DA6A40C27B32E0B1B7F412C4F1B82480E70A9235B12EC27090A5A33175A2BB28D8ADC475CEFE33F7803F8CE27967217381F02E67A3B4F84A71F1C5228E0C2AD971373F6F672624FCEA8D1A9F85170FAD30FA0BBD25035C3B41A6175D467998BD1215F6F3866F53847F9CF68EF3E2FBB54BC994DE2302B829C5EEA68EC441FCBAFD7D16AE4FE9FFF98BF00E5BC2AD54DD91FF9FDA4DD77B6C754A91955D1FBAAD0 -MD = C0AA34391CB3104C41995F3DE782F012D421585E5384E047A997062F - -Len = 1521 -Msg = 047A906EB123927C5EBCBAD31211D731EAEAACDDC7CAE1A13D4068154D317BB7C010D5FCD6C4D800F3809D5083F8625BFA9AAB71E1687689F43FAC8675F51400DE5489CDC525421C8230B732EE5EAAF76B11B9BE4CC49C815FFA8B658CF0F18388C9D24202EA611E086D31BE4D1311E372E0115CC5E4ADBBC6E0B2C371410DA89196D8E447DA34E6B3787DA9B4293666FA6585A76FC2B130561790DD10C478A7E071F8EBFB933664F54ED398ADCD1FA35FAD11866DBE05DD8CFEC00549D700 -MD = E39DE8727B1FED5CA447B2B14DB8F5C2F682CB769D97997C5C27A65A - -Len = 1522 -Msg = 18059DD3D09C5F36814FE25AD96FC6B6BEEB0DB9ED79D6E8D1E252E2A43DDFDC9E156FD215BF8426F6C5EA127510BB99777349A0EB03B68D03CF8B9F10BBEDBA7482A86E1D8E054E60F9821083424000C215D13AFB47D3C33699F452AB7DA5E2C95685C7C87E4F465FE78A8E79C76ADDC3501C99C1734D09DA817EFCD4809CF57A105BC1253A6D2A4E23D2E431A426607CD1C61980CB26143F03EE50500503C63F0206BE5B238888A038B9EC34C24D5EB6E70DF31BED948F373B4F7E52B240 -MD = 388ED2BBB18E2D299BFAF261C419E3A9FF7BD9FBEE5E7516A0F964CD - -Len = 1523 -Msg = E31399BE5D40239F6B1925B165BB34573FD8FD179C082027792F94B67D2545630F0A680E85D2B835E31CAC2504ECDB49D191977D0E4AD69A76AFDE5FD7A4D70074E9B522008D3A5A1A6D60B722F84304395E2D7B7E29805FF653216833DF11C367448AE10E11D37091590D22EF1C97E16B3AC8CB900ADA0D357C9FA2944313D6B796E1C9995B07C03098E3777B7582A7091F0D03A611BC76622B8CBF80DC007574490DF0A5B93F25A1A6EA9CDD4515CD9CCCD46A56B116B7579E97F8F22180 -MD = D1A845E0EB30D987F3DE87019D6AE51DB4F071039EC69F54134DFDC4 - -Len = 1524 -Msg = D66E3B30963A1D5F71160CEA74CC1E8C3CEFBA41D2CBF5D0E7DC3A97316E6B21A7D7C5ED1FC7FEFDB8B628BACCF0CED538FE6F6B18A8D1A9DE4D8E31448170F4CEA96CDC7A9F2FF0A18A4955C75C604DEB98AC158961D6891AD5FA867239781DA424CCC806E57AA77DB7BFC85AAA7EC720BCA36A6F0501E2D55D7BB16469C9E4018CA34317F5D1AD6DB2F0E410493BC8FBDF38C1B8ED1ADDB62C2F5B7592A8D8627CFE97F0FF180524845C8D6C5ACD823FA1D810FF8E228C531EE61BED5330 -MD = 4271041B9C4D0C6E2D7BBCBC046C964ED3E5D65012923A96D7B8CC53 - -Len = 1525 -Msg = 9274C08E458E1AF850826A75FB9A25F7328C6F427EC1B9231947306D864A8759E7D743F85EF79160F6ADAAFD829640C2E6C88892A21F0E52FE1746C57CFBF740D5674AA41F59A0135E66151B1FD654977A32C5DC744AAB2EE36D60A140FECF6BB5BC8A5BA8CE7CDCFA218F285B93C89B07E0349B6157241F7061901DC426BE93956089B38093513C792CDF73034989F8129B3232B540D5F8C86417194AD4AC481FD5465B7777952A4D3A784B0C10AF4A75C6FC09AC20973780B30110E28B98 -MD = 6564E794D3A209B70E23567528401925887ED3B8810F8292A6C7FE81 - -Len = 1526 -Msg = 688D106A612E437C87E453D503FF3341FD0AC63A6C0AE190E5B7CB426F671DC919DE4A8A9FA6DE17B8D489DB16ABAFAE781A83A349A570BE5D5493D2882AE4FC881CB10BC97898BB67DEEC91C1A15F85FADF051B256F0A3098F539C84D51E42049011EEEB9BCF709146E76F0F491E1AF48EFD41EFB19406DDF842D25EB8DDEA67AD1AFDEB758F6A604938EB746680C5123080D5FF2B3CD2663A7AD7A7DD76BCBA59739B36ACA628C5454EA76496DB11A1538E00E632FDD41F386EA85C524B0 -MD = 9948957C2AE2321770688783291F4E37220DD4D44C56930A5A0855B2 - -Len = 1527 -Msg = 1D7E3221FD66FB9CDE83AAE60A4D78AB5A7A7CA08B829FFEC5D38D838F114B2115D29577C055188CF149F28C81F76D6800DE3A7E96BB808D13081914C9159441963F9833175B952E5B6BA09D62EF241AD19CA7942049E2575597B1A53365692BF46B211B6182D3C2321C15883A9D22FA8BFF917F26102F4E82331109B328DF7359836BFD008FE4F4AF0854EBB6BAE0561EC8BAEB054877F3BEDA6D8D402BA47270DBF6207A243F7ADFF17658E35D6F52186E4D79572B99D8812C67C41617C4 -MD = 2CE555BA01E2F9D73CC2D048A815CF38681949021D27AFFBD5D79352 - -Len = 1528 -Msg = 588E94B9054ABC2189DF69B8BA34341B77CDD528E7860E5DEFCAA79B0C9A452AD4B82AA306BE84536EB7CEDCBE058D7B84A6AEF826B028B8A0271B69AC3605A9635EA9F5EA0AA700F3EB7835BC54611B922964300C953EFE7491E3677C2CEBE0822E956CD16433B02C68C4A23252C3F9E151A416B4963257B783E038F6B4D5C9F110F871652C7A649A7BCEDCBCCC6F2D0725BB903CC196BA76C76AA9F10A190B1D1168993BAA9FFC96A1655216773458BEC72B0E39C9F2C121378FEAB4E76A -MD = 33C10010A0B810386AE62F3F927DEAFC0D5AF0AF3DC7A8355CB779CD - -Len = 1529 -Msg = 7C7710BB2B7F643FA7A2DB758E18152AA812CA88461EFCE1177656AACA4F236555CFC69040EDF76686F30B233462AB67614FAFA20028DC0A42E6F362C8A978F12560DA7A2E4ED5CA37CC7D79F7A5E8DE92A6B9BA7D1E4ECE52E22A56904E39DEF32F2D03B7688AE1C3E499FFE9929D9577020465847E5B70710E7426A4F2552511F9DA9F8B7D0F7BE1EF17102E4562531F8259C07B52270DA01179BB320F7ACF3F5A6E22764DAC232EDAC5600D1C70FEAE0B011EC28D9D0B66A6CB860A5E9180 -MD = 56E6F6766C71EEC4327A2A830DE566DBFFD68FA213C584EBA2BC268F - -Len = 1530 -Msg = 3BE11DD7FF78BB7C917005B235AC496BCA96A4317FDE079F6D358D95BB0352E9E89C29AA781203E5FD63DD2F685810386950E5946C0B9F0EB88877AF5175EE884E76935F5301DF59C79A06C5BFC6620C4D6FCEC86FEF9E518AB4146EFFE8813759D6415505D84B0EC66D58860D4D415FA36A28753F7C61A5B7845623322BD7743E079C82E6B9206398D665AC18C50FB073BE119AD5532A7164FB8FF8064D0D1706A2FB430E37AB478E4032CE110AA96B7963B636043EBB873F21FB106C5CC400 -MD = FA61358333CE2601CFBEB502EE20BB5196EB7DC62C495286157D3698 - -Len = 1531 -Msg = 50E7C9F830EBB80B5AC8B0A5B110483A97D5C549D343AEFF2259BE20E036CC1D80268C085B9C25317101E24E165C577D04E07887AD17A58E799C4C6758D8FBA836B4AF48D2CF31305A11FB92CBA4B23C4060F4A11BC2A1B8151AD547C6E9009DC1D46A38C633D956EF5CD75E1D697BC6D1251FB33A591AC4B138AB72C4D5551FB2C73BB5D946E16D7A9FEB18AE38BC58B2DF4254E650B8EE4AAC94D9444DCE18C2CF4D38A80278BB2E7FF0E167F252C54CE34589D93887BCD6371C73B99E69C0 -MD = E24847BE4CB53A1E969909F77253C39B343CA7BA78E7787E5E321504 - -Len = 1532 -Msg = 939685986E3BE870F1D7514A7AAAE50CD58EBAFF6EFB1FB64082D27AB939A40A568EAC0C1BBB33594E2471BB545FFB09A804176250C6E7DB8C11D0833EE70C09CFBB888116A7C8EB064BB52794425058AF707848DA63418A979231977D11FA509D7696C58FE3647029B7A85F9E6A682E195DE0D9F2AAD7E4F0DE6F22040B7A26720742AD89F34B09C8BFDA2072A0D43EA0AE4159B6178EF28A8A8FF9899679178B433BC78097924806B4DD854214D3EFA67F9C44DFAEFFD944E94E03C5728400 -MD = 82BB59F24EEB177DC0C4E0FC6957AAB1BD66EE9625FF6DF8B8CA92E4 - -Len = 1533 -Msg = 82EE3ADEAEDA69F4A21548A9CF4DBD79B6E6652782541C9B0F6F4C1589316E20E9EC5E6DA563449DA640E2656B5B790E1015BF59B647039625F3517EAE3D79279FBA90C40BE10C26D9D68C709893BA8EEE250C12E65391A66E452989E5CAB836B371975DD71821F23EBFC5367CE5FFC7B10FBD79A80B1865253810CAABB06DCAB11345FAD11F2A95590F4F35EB3D465BBECD174AAC660821DF9A71BDA01FA9C71D96E7AB191290A0A03EFA2EFEEB25C141F8CD8B4FAC6A075BCBB67E3B275C80 -MD = 3F2A32C5A1F6CBD66E98EACCD3386EC40AF704B57B992A91947FAFB4 - -Len = 1534 -Msg = FFB1B0703490FEFC1C9FCB456E94CE7BA6366570A8B71D1B65B06468AC317461946ABC9B2330B959183BE534661975956C57DE13EAB4147E82C3CB72EF21524B35EF0254F934D966EE7A01861A3AFA9CA333251549859FCB105A36F16631E72DE0C9BB3D1051098F016E0864CEA78B4144DAC493C5088C2F212D29E115EBF3B6C7D382C25947950E9759BEF6407F8EF8F1F3BB9C65EA9111C3F4854732B8E8FD7F9C369D7DAAA5AA57B6061779ABE02C34419ED60159C8CCA33FE2831E5A3814 -MD = 06043CBECA91F97E124EBA6766660F118328489C7E1F13C42ABC97AE - -Len = 1535 -Msg = 2EDA3FAFE9381A10FFE89C83D818ED3E3F061F08A7928734842BB8B81D99019A342752418607DCE8E2EDEB229AE1D7E78111AF6B5C19FDF57BE5ED53F89BD7ADAD2265D25468529AA2A20C5FE4AF81ABF93FDDC23C37103F9795E13ABAAEB0B89AD0F7CBB5D65CE9D9C66CE49EC666920BED8A8E7CBE1343336BC82448594FA18502AA72B5FC509CC140F69453138BD07C00ED7B43992D04518416A863AB9793E527F31595E6E6E8A6D71582444006D2639A58181EA2B939B7AE1B2DDEACF3F0 -MD = 399F2597AD9C58E1DCD7DBAB92FC343B69087D5A873322DB1444E14F - -Len = 1536 -Msg = 08959A7E4BAAE874928813364071194E2939772F20DB7C3157078987C557C2A6D5ABE68D520EEF3DC491692E1E21BCD880ADEBF63BB4213B50897FA005256ED41B5690F78F52855C8D9168A4B666FCE2DA2B456D7A7E7C17AB5F2FB1EE90B79E698712E963715983FD07641AE4B4E9DC73203FAC1AE11FA1F8C7941FCC82EAB247ADDB56E2638447E9D609E610B60CE086656AAEBF1DA3C8A231D7D94E2FD0AFE46B391FF14A72EAEB3F44AD4DF85866DEF43D4781A0B3578BC996C87970B132 -MD = 842A2E13D2728CA55B42D784BB6BC4B889E56775AD56BF75789CC57A - -Len = 1537 -Msg = 22BC0AE27FED148842D8DC7A4F75EDAFCEB1923BFFEC9837198C87BC5F982CEF077B6031316C06346D9A47240C5C3B719C8A13D178BB248724E79DDA498483EC4DF8114D007630A995F81CD17899B264E1B5878645842C1D918C4427E1F9216D79F1B9CB8C69393D0A4EBBE766F3ECE21AE05DF4F67F045C1CC10F713E4A035D2C4B427ADDE84327FE6B8DA75520692F094EBBAF83D4F2149B2E968FBAE7AAB189CC988B4EBC2E20259F5C24C985FD3DD451ED9F4ADC3532C792C3E404C75A3E00 -MD = 91D9A2BA7C5CF8965BAB7C417CBC4B6F51A96430B7D678051D67DC4A - -Len = 1538 -Msg = 13486FC0E375B8F22813F4066F9DC1695F945173CFACF57B9FB00518869EEF6AB5F50AF27DA2B72AEEC03014CB5E43E5FFF3EB6F1C912DC35C790962B834A5FA85BC123E09EC6D366CDD283ECB250CA85FB27F298A4719FDED869CEEE330C699D0AEE9A5626D9F6CA7D7891081738A5A897A1D3017AEFF03C74EBA000C53BE5AB121598CAAD58DAC265EF1ED5D365B25D13675FFEEA3B329210D9E3275CA305911075B44EE1B5F18572CB7CD15709957DF8FDFB0A05CE60DDA4A99C1797A0CA340 -MD = 0B3B87F0CEEFA19A0D8922A5368BBCB14FCB2777C3D60A3E88A8EE0B - -Len = 1539 -Msg = 4063E5DC8320BED3AA4B6F13EF74C24E98E28BB686EC8190B5DEE2CECF117A905795710BB201CA7BCD6E5EEBDB83D462370AC4311389EFF237934CAA55777A29F6B3F1297D4BA0D41BB0A62BC2CF97A6575B2DE8E7E9CA0489D4B9603D883F3576161763C53E2043DB33C34F6C898C975F5684CCAE891C27A5C81A72BA06994B6036BBF3B8646235B317C5CE02BE028FCD26AD04456C89E23DF63304158AC1D6E3206B94A4DC0C5978F3143BB98F7E0466E4A826C40CFCB88B72D56F0968D4EEA0 -MD = EA66C9E75B7E24465A8133CDC5A2D3DDF4D9DCDE8DB1A75F448B9817 - -Len = 1540 -Msg = 6A8DF103843D2D0485A3A89E41D83DD78A5310735F3788D4A69676CA4892190FC81B5F2B7AA11C68F00416383F13ECB8E299215C57A313A5EB4BF1A23B08C978C548151C515611A5CB0E75689A480A1119CEEF5EFD2043C1E7746A410396CA2873F6F0D949F35D6767E4986113061DCB15A5107B8E6D2AF4679DDE9E8EA8916076DD202D268C44114B26FA113E254A9512D73D6EEDF6A55BFFDF46BD330B354586191967C0B14FE5E3D29E8BB7B2602134E2EFCE6A1FB1797FC14D73A1AE5F8FB0 -MD = 12BFB36CA63888B2D8B7CBE88AB7079054B638BD294E4432C2967B8C - -Len = 1541 -Msg = 3CA201D57CA5785111782561451B1F8E3FBA9E6162D8DE78414F1F1C54C8E2A201958CA179D41EEECC204212BE77D90E73269AB485ED35CC96365887C076688E25E89F5854FCF9FDE708F6570BD8ECB12388D76354D6CE6944F2DB2B1499627FF5181119F60A0C864C3E3382CFA21901DA25B0E7DF7A1D944AD894E47CAC5895CDB75D547DE570396E6C1114B4B68702524D1CBC061D099B6926D9F2AAE4F8B54C5620319315381185795F3F0ADABFAFA6188C580A11527CAD352C20ABD9714280 -MD = 6817CA348394A109481295AB6A2E60F9EA238429566D125B3958F92C - -Len = 1542 -Msg = B20C646228BDA529104BE210123D5E51708EC173F76C372912124937BA09F9CEBCA094B382B78A567963BE62D958937BE084B82C10F31E03A5675529D8BE52E1EDAC3830C19F76AF099AD547EDBEA4698ED985A4F077C55CE029C512383C8CA6BC523A66DEA3ECFECC2F267F61C57D74ADEE7AC446903F7C90000BF0D2D84DCB240EAB650335979F93D67B5C206F1C8308EE90DDDBF8EFAA5EADA079379E3FAE3F414790F6F63A1AD54651164F6A9BBEA1606D84229AF9A9DB9826A51244FD804C -MD = 76380E8CF26C0A5ED1F1B966B6FD0297495C3456CA7894043CA65221 - -Len = 1543 -Msg = 0F224183DD571D3B290DCD180DB3677C9A9B162D484C8244CF40D2DF67A249EC305B9094BC309FC182F3C12BDBE0562B8FC44EF0961A0FD03317BD2058D374D45BACD55303B1F8D5C59C7D5FE05479E5BC2CB2CDB5B447ADD45427932003BCE15F835AF3A9B94E1C4A7F492C0983D8D406C8428D67C023C6361578C9A6B5F0EAA9DAC2913D4CAD882C05C275B8A7EFC4BEF0C12E066AABEF350DDC8EE4451595379FBFE98C7D2EA9F6C770FDFFDE3852C818322927347B4CCA27EA059C8644D9A4 -MD = 251EAD3E57A50302C1DB9867A9D99047C619ADCD44EE38F8C01C776F - -Len = 1544 -Msg = CB2A234F45E2ECD5863895A451D389A369AAB99CFEF0D5C9FFCA1E6E63F763B5C14FB9B478313C8E8C0EFEB3AC9500CF5FD93791B789E67EAC12FD038E2547CC8E0FC9DB591F33A1E4907C64A922DDA23EC9827310B306098554A4A78F050262DB5B545B159E1FF1DCA6EB734B872343B842C57EAFCFDA8405EEDBB48EF32E99696D135979235C3A05364E371C2D76F1902F1D83146DF9495C0A6C57D7BF9EE77E80F9787AEE27BE1FE126CDC9EF893A4A7DCBBC367E40FE4E1EE90B42EA25AF01 -MD = A576281CFAA89DCEFB1D37772400BA4CABCEEF33CBA2F833336A74F2 - -Len = 1545 -Msg = 094879F98FF555E949C7165606B1A9A17BF188B2CE0C904C89AE519373EF772AA8A08AC42FDFFD933F18EA8DFA598B5119D6F2FA75AA69B5E18951F4553448002BB547763E7699D458D04F893B065869ACD14F7C6A39CEEA6320A63158E7878B94AF3A3116A6150AA23B624395F1555BADCE532C69C256433BCDB2E74985E330CF408F00DE21F0A191C83E91FDE112598AE5B49916462A6636BEECC0372E7AAA0F70E8298EFFFD9E4FA943D2AB32B1936423AC4295BF143EDB174F5F1E40F52E6400 -MD = 1B1BCCD7B8B651C541A118D2CAD6A6CAB1A91A208E9E668155C8ED53 - -Len = 1546 -Msg = F535558E373874104E154A503F82CBCAADD4617A38E9670CB3C012869DF16AF75DB0E9AC8866A48576A3EB212533E1064A60AC17AF43BF47A7D2464D93BF2261D0DA09A9F97D4FB5881CAE75B065E9F76967EB9E39A4770889423649B70CD15F1E091A8950C51F3AA29F66E99BC8C084627625899FAE82846CEF1979A94E29D9AA90C0C5E32A30BE520E7E7BB5EF0E9CB8CC5D2E9E7F41C37EBA0017C427417543744915A77B72DDC3161929ADBA0B992E9EC3B8626348DC889383D38060A8589DC0 -MD = 126449B3E740BC245F7B503E84E643951477A746D7DA1B094714F6DA - -Len = 1547 -Msg = 4AFB68BB38DAF4C64A43D0892DE39CF0EE0B24499F434BE306967C933CECB3412F0DAA124E67FF1A58BB26C9FC9F91B6401317B84E0047D4B6E57D2F3D9C88459D1603B2748983A8C3B4CFE6E81EB9DBC299BA3927A3E1F76A5F54812EB9037189EAE3B19417B8F48CEB2C025F122DB62036FA4290B38DDB90A9687008A1B7D67DF503371785D1C7519FBE21B5B09C448FA69EE914355C95230D446CDBAA90DBDF354AF8C86E01DA389F02296A6B86153A078467B85885D276AD00216FF797B68C40 -MD = C9C2C996E29BC1E1F027BA9E1200169A2FDF060B4B4BBBAB557FBCB3 - -Len = 1548 -Msg = F0F4921AF9447384288AAAE217F8C827444426E8F5D06C61F7E6F02ECA806556C4A0AE6268E6A9C2AEC1A3081503BADAA999036760C234A66B6879ACDD9F59FE28EF3026310C1291007F0FB092D26F7E4B7B60C448E455A114D248CCDCF7CD295E3DA226E2FFE2C4F17E5B1EA6328A2A32DFE7D50083AA7516D90336179D3D6E10E77C131562834330233EA33E4B96C81570956BEE98946B2D2644FCAAF829A7299438DD80E22E81F944D0B295ACEB19608FEF6ABDB52A34C2422E18ECE9D8FA9A70 -MD = 8F4234AB68AEF12A29FA182469A2FEF12A9FFB68514A858B4B1A9BC7 - -Len = 1549 -Msg = 1E9E4FD505A9A5C29F41B86F0B4EF8F615209F7D231E08DE0636F4F1B01FA7DB51F1869C05591D5F0E5D758A1EFCFB32F4257805823E67C4D1F4C6A70D4AFB70C1C99E8E144922985400F778D676173278DE0B7540B667005B604EE77064C80F0B9A7BCD2317DEE692E2A7DB69BC4A1816675ABF2815AB732E187CF76BD7DC9D46B7258A6F6207C66F97E26CF154A700216A0BA6BF410AF4189633771F25EB8C38ACAFAF9B52AF64E29ADFC91EC48416BD51CB90FE6747F9706CC1FF347AA8969CA8 -MD = 4BB207C4602E0687456BB971BA95B0B551BB53FE8588B596B64E38C0 - -Len = 1550 -Msg = 1140A34A3BFBF1949E57F8209A253EB83F61FFBD9C0565433BE3ED949DE5E4C3197D6DBA2BAAB08A8E30FEECB6A48DDC96D5FC223A9E2A558C981018FE9EA08CE870ED81DD7D59AF73D4D5BA16B060CC82788558DE63FEB733241451527ECE313EFA7F05ADD1F3BD710069E0929B1ED4C01307C89655E07B0F89EAE1F701E9926FE6A1FF414E10FAB2FD0212C33F648BB3A3C9DA3AC60AB93A37F18C4B59888811B82349008A277415720D72EBD37C2A45B66094128F10D066D358E7EBC6E226B0A8 -MD = A83F5FCC64A9D05070141C601B5EB3BACA651DE515CB52874812D9C7 - -Len = 1551 -Msg = 7A1BCC212431E90B8FD721E8D2CDF5B07EF8F8CB4B57DEBAF2A5032487B46F20F99C2951C769BC728C053B532F29420692220C958BB6783BDD83D36AE85761EC47C546B742EA51A041CBD7A8F57BEA69DF6DF348AB4272D7300AD9F263C7F8F7E631874B4CC40CA3FEEFA74D9F5AD720E6913F7A79BD94EBDA147C4830AB443C08D5986E045573DE8E65AEFC979FD84B25FA1C6F638AB86570CC5443DEB36D05A8B05A28D8A7F95B6510E956F2BFB9FB90A30BCD8C9725D1CF35CDA63DFB1E51AA46 -MD = 83DAC2787B6FF61D2064B8363066CE4D25DB2D833338693F8574CCBF - -Len = 1552 -Msg = D16BEADF02AB1D4DC6F88B8C4554C51E866DF830B89C06E786A5F8757E8909310AF51C840EFE8D20B35331F4355D80F73295974653DDD620CDDE4730FB6C8D0D2DCB2B45D92D4FBDB567C0A3E86BD1A8A795AF26FBF29FC6C65941CDDB090FF7CD230AC5268AB4606FCCBA9EDED0A2B5D014EE0C34F0B2881AC036E24E151BE89EEB6CD9A7A790AFCCFF234D7CB11B99EBF58CD0C589F20BDAC4F9F0E28F75E3E04E5B3DEBCE607A496D848D67FA7B49132C71B878FD5557E082A18ECA1FBDA94D4B -MD = B1579476972D42FA388FEEB8424834672C4D1A4225EE2DB89DEA7359 - -Len = 1553 -Msg = A49A1590851397A7413ED265B02F89516A78D73558C36139B23BE5864E2C42170C24F08E3058C07CF8F07A41C1C161870D32AAAF5B11D08FA5682727B85B8D6AFE70000C95463DAD5E87FAE024881569BE2A543677F0BF62955E4836A2254D0047687AABD8D41E3842F37D5CADC4935E7C9526509FBF6DD4F4E69CBDDD2CC4439A0B0F772AC4EA3E14D560A85EA98B5929C54B33C0243F911AF5CE4A87A145763EF85A72B94BE5222459F49D330D1A58281383ADED89ABB3CE78A471364C2F9895E800 -MD = CD68CBBE288AC105E227119A8564699E60B99EA576E0E8EF5E37D3C7 - -Len = 1554 -Msg = 037810EE77BCB2D3B7438AD56F145E4E936C170B5056FE2074D1D274C432856BDDE9568DFD9DE410207043632DC20D634159022A300D6CD82A6EFA4C0D7AB7E899D0979E5A445076FE31C898EC1F0F2A7A171417DCBD88F581C7ED7F61234C05A61CBBC7FB8B2EE4D656096042FC54F6A8DE6E472CE691165B9F3CA143E5021B606B9C1780F84FDE02255F75A9082A5685744C2059561444EED3271F6E6B287C36B729597A6755E257FC41FDD23AC9004C72B878B3199AC5EE1FEB36F94BFC0DF6A840 -MD = 9A476FEED56A63F5C125A2013D9C291342285A3F06ECA2303ACF0011 - -Len = 1555 -Msg = 71F4A1CDC25DA28537CF2C3DE9730490516C3989543132786A77CF8D6CC2668D0DDF4D78A057B4AC0CA61324A18172010D6659AE7FD66EDCA465B920390ACFC93AF248BCF8841452CF749256A709DDB58AE3A7F7410247C9746B31518AAF8FC960697379AA66CD7F777666CCE898C8A22FB5C34933960B98E1B599F4795A7C60706147A7C08DF34004449B94BEBE5AB258DF9E1D0FB1D5A9FBC22042D9316D3245BD80EF488084C00EDC7CFD47A445BA99479F7D904ACD1031A0186D70C0B0C2B93980 -MD = 5FE0EC7B67FD99F74DFCC0ADB4B599795EBD43565A4F1728DBE28DEE - -Len = 1556 -Msg = A74842C1312297AF8D3C14B1717A71D2125AE4B27CB1F75FAE2BCE476BFB2038A514AC60F4484894885FBE3F28E9DA5C5BD9288D1F912B46EFD2FB928FFF70A6B3844E2953400303D5E270286D8ACDAEEDED6EF00DBE865DE3F6D5E54DC76B93C3412B999F39EA46E2B1A9969F1B09C8ED8E0DFD4F4E882BB29A0C1F2660EC4EDED872A7108A4FAC824623567B15D2B2EDAADCD5D7A8756405870CFE1C15F0C763CE4AB525A32207CAFFFE093BFBE7696D8A14571AFAA2F08FDCF55560ADA17A52BC00 -MD = 2575B16127C4D1216A6F6BE6EDD93AECFFE37DC92E93A58212F9C5D7 - -Len = 1557 -Msg = 0E9FA73B82BDE1AD7B2D37BD10CBFD89AAC53EEA32EB3C2DAE512B23756B9A696B19770A02B0BA0AEFB5142C8FC7314B16D8894D0426C7C0ADDD875170C0B709BFE52998656E22DDF7FFB697D457A1C07A290BA236C9F90B2D03BEB8FFBB23D750601BAE49A732ADC3C3CEE3029370E0B26FBD4317A2F23721B20CB760BF7D4DF04C30ED3A11213AE500F9085A7EC53095A99022D75E989F1C983D52F40112229D9BBA5D342D2638FC7535D8F540168293106E1B280CC4491E4AE551041EAADBE20878 -MD = 93721A448F86A9CD4AF4A4BF78FF5CFD9B5C7B163BA7B6F383222E52 - -Len = 1558 -Msg = 7F725C787CF708E35CFD6DFE7F66D223C1048FEED331B3526C6360F846C0FAF23158CE2EBF2621140C5B4FE92AF12EA8448DF6821208D2C9A256D357E43566B5BDCA2F33CA9027063F557975B766F0ED1BE8626A17F28A94F41D4E6C51F0B8885C505D75506C6730CEEAEC765C4B0783A22782209740745DBB8172E89E92A29E136298240E7907BA38C893E21F23ABB2ED2D43A56AB9747555C9532AB47BFF6A56653B9097C05DAA6EDE9E262622987715BADF5BC25E9FBFE6E12B74F789367BFF8BF8 -MD = DD55BB556B8F1B4A93E3491CA839F19C024C34DDC6D8A8A129D731B1 - -Len = 1559 -Msg = 185219625F19DC9F8E12AC7256DAEE6EEBA17AD72FF821E180A602098C22372C5E18D969B9059A882A22E10CE2512BF7A8C012E43A8BA8B61381C22BD1C5C4276722AAF3CC66C95F0450783D9150854CE0C21DC9F92D3C64AE6D1F379FEE822E886949040813534ABF765756B20B8586A2B73EA55A170B135A20BC3AFDD1D64E8D667CB5BDC815674F3BED646F890CBADCE08B475CD01CA656F8A6F87890271BB0AF3D98B51F3E98C91B641FE67E8F13AB1715768CCF01F34A61E4B61C9D559D0F1290 -MD = 91E0B290A5A3B32601B32CBDDF3A34B3F6F4E3B68D7369509D93B5EC - -Len = 1560 -Msg = 8F65F6BC59A85705016E2BAE7FE57980DE3127E5AB275F573D334F73F8603106EC3553016608EF2DD6E69B24BE0B7113BF6A760BA6E9CE1C48F9E186012CF96A1D4849D75DF5BB8315387FD78E9E153E76F8BA7EC6C8849810F59FB4BB9B004318210B37F1299526866F44059E017E22E96CBE418699D014C6EA01C9F0038B10299884DBEC3199BB05ADC94E955A1533219C1115FED0E5F21228B071F40DD57C4240D98D37B73E412FE0FA4703120D7C0C67972ED233E5DEB300A22605472FA3A3BA86 -MD = A32EC69648B4FD9BA2431ED0FEF036188C19788D7DDF0D25B6B03ECD - -Len = 1561 -Msg = F7F5B2062D7FE77A5C1CA6173B2C72268E83D68BAF6AA3F4692EB7587930F0338FE2A400369E6E414AED899068ED7AF8BF755A1E720F3176DAAE62E65BC8D91CBB1BA7409B4373B245D3655408D22B402FED1480A92D4EF3BAE5E6450E2D7846650C684E1B174FAB86F05A228969CBB3F7D11977A2E1F6EADFBC6A0531EADAD2970D62B63E69392BD0A55FC315F92BFC9C383579D390FC447780E429E5D28DB5116D9E7129FA5D61920D680C743986D7B4E21A9C54FA272066978D740BF35C572F418C80 -MD = 1A9B3EA7DA538013E8698142F68180B110F19A192CD0FCBCDF1E1CE6 - -Len = 1562 -Msg = 89CC05BE42885C72B4A3E790F3E8E0401707A5B9EDC34893C4DFC8D9227F9B98480AFDFCB8521A1B2B7D19F9BD77712D3D7538EB74F9BA09A1910BB065A6A809CFA777C25DB447B6047CDE44FF96C1ED5D93784A2F4D261EE4DF2B083EA5EC3FC070832648A43A8836616AEC89909E89CB1BF034BE1C69E25E48369FC2EFC345F9A4AB91FA20EF0C96F81EE00F597A9B13E5FC1816F5025802A30F79055FC607B0E0F114DE264FA2E3F2EF9B488615BDDCF810F8944162C682BAF41642A6374D773FEC40 -MD = B8BED5DE33470DBA952DC6F52E0F79D6BAD57C7ADC355440F752704C - -Len = 1563 -Msg = 4F6927F8DE4BA416E9C4E063B80599F4DFF974600CC6EBEBA4709EC0945395EF99BD5B7D77471EF6C04F17F9AB7E1B91622A35E47148B7533331E9986220B9E4D08F254BE34D61A0074DDA157D3DDAC8F2DB4711BF5730F65097A0629B741353CD263FE173BF72D76A6849330604349E775626F49943AD74F583C060431AE9204060EAD1BAC426851D894AD41E52CBF0BD48E734C52547A618B10F6415E92C200795635A61C47AEDE65864AA48F17E3A7729D5AD883C2A6A924EA54266A384F6F92EACC0 -MD = 6BF24C410248A0CD02AF71005D3BBE6F49AB56791995CF214B0AE1D2 - -Len = 1564 -Msg = 7A76F5CD6C47FBDF0B300E156ECF26155B385F4185B844DC560F413F2C2437D3F653D9E84070AD44B173BD568D0A41ABC009532C0B0EE41A7A35D45508E7CB582F761D2158297C15A8BEE1857515621B5446696FBBB7EECE96B3BE7F3B7F3B2E46A9A8328D0DC4C61AA56AB3B417A31B6D1D6A25BE3CDF31EC6B0084E90D2BE1CB2397B66E6E93E2EE0D5532CD1E4DE1C9A1EFF1CB5E6D4E037097931511716A25BF2AD382B16EF07DF13CB9A800CE8D7F1A0F664108147DB5729E64FBF6B55AD741E8D0 -MD = 9EC62043DABDFEF517969B8A9E3C3AE6B8E9991B206E7A6D17300947 - -Len = 1565 -Msg = C3D691B57082AF833B84CB2956E41FA99D40314FC4D7655BA3C10851812161EAE38650CE8C37CCB8306B91C2F5B650C33E0B826E8EA97180FE7E5D8A2FD7C0F3264DB8465D68533CD7289A1C0682D30AF11A04C92A82FCCD569B5D432E83E57268C4A219C176285B25886DD032BDA105FBED64F6EB233F1EAF2CAC49CE7A3A7F72F0B07310677D680A3800DF2A164107A7581FDB77E24201BF84F0D6FC44FE7711CA9AB59308A8FD72DD2C551EC10D43FE42EA44EF96B5004352071FC212FFDD05F6C3D8 -MD = 48F1078C1535ABA172E0044C41D7AD0B29723D1DB8FCCDF97297FFFA - -Len = 1566 -Msg = F0E6E8CD841FF441FDCD2CB144A2DB21C2D41E7700634B3F8A93A02E979349CB1A6873B78965F5880B8782432D22E856EA2C78ECCF2BEEB4B02E43A3574139364200357144601774DEEF24BFFA5357D5336AF4A61F8B7144D9834576796C9B95697783861A51B35B79FE28EA9F04082A64A563EE52882D3811652FE95FCDA0AB4095BEA34BA55A05DF43AC7BC925D080F890E9C8E7C37CFEFAE2E075DFA5B14566D7452117C64E3CBFF151694B29A7C599339E119F6C48ABF398B3CAA65E21A2EA19BD58 -MD = 20F08A8ED541DE8A033EA4DBF3CAE0BBD0C5D74CC5FE01A9B5232BA4 - -Len = 1567 -Msg = 2FA46DA3D6241ADC5773DE113EEDE19EC18F8E3F531EC13C59B1CF91E73FE39AE132390692669BC5BE14DAD8C88749D97B4122FC691990D353B0EE4A55A0BFC4462B9F7D876FB4A39197E887017835E54A26A4C98EF91F154185D47DB1A681F6F0183C8BE8756D10F511059619E8634C38B55955049B4E0BBC214517448D6BC33E2DC8FE8D3D286E1631E4580F07C2EEF5317642FDE6AA5A2BE4C55D25585FB9B303C24DAEE4EE0E623C0A4B621AF20314D74434264B7C6EDACA3358257EC39262BBB55E -MD = 3DF8278F8B548D6BD18EE4A9753C6C2180E29200C8BC85670DE0CE32 - -Len = 1568 -Msg = 84891E52E0D451813210C3FD635B39A03A6B7A7317B221A7ABC270DFA946C42669AACBBBDF801E1584F330E28C729847EA14152BD637B3D0F2B38B4BD5BF9C791C58806281103A3EABBAEDE5E711E539E6A8B2CF297CF351C078B4FA8F7F35CF61BEBF8814BF248A01D41E86C5715EA40C63F7375379A7EB1D78F27622FB468AB784AAABA4E534A6DFD1DF6FA15511341E725ED2E87F98737CCB7B6A6DFAE416477472B046BF1811187D151BFA9F7B2BF9ACDB23A3BE507CDF14CFDF517D2CB5FB9E4AB6 -MD = 2B8CF4C8D9E6717EBCE4F0584ADA59A8ACDFAB98AD7E33F355B77095 - -Len = 1569 -Msg = 1924D11C865F5258A151DC2CEEF6FFEBE86E13120A3DCD3ED6A1B790D1C653C8DD1AA2933EEE9BC3C7EB4BD42855E7C5E4CF073C09B179F2FE7DFE4F990B62ADF093739DC25607265D00DCEE57291047BD2B23000A843842566B4D28C5F022885BDC76FE0C3CB0368CB2DDA3A9D327E8D0BCB003668C53BFE1FA294496C5128B7C3B41EBEA639D070C11E4B2997E886C8693B6D1E17D7B5A63F752A74D2AAC2D8BD25D177B5E4A532B3069A6B71EA3ACED5B6D5EDF0DC723DB2E336CC8F5D4690D1477F580 -MD = A6D91FD4B85DB338A74F8A80FA484445461960D0BDBF0E93987273BA - -Len = 1570 -Msg = E7935FC6CFA5B3087D0FBE6242ED76FFD17FCB91CB388CDA8507B6489032D6B8772BCD0FDF8AB47A353C3F5B42A09E1B8A81DA59295B48AC250506D3742CFB4F758069A89017AEF3B6CCC9FF79C4322971788CA874D0664CD5F5900C8A57B4551107F58674EB19081DF0175241850BDE8B1D28D3345FFC0B53146A6EC728F72A866162AB9A942B0DE6EDE0D35E56D1102B71C9E6DA261480AFE9AA032C910B7E9E5372510603CF888BADBF5E9E469F6A59049FFC8F05FA58CC4ADAF10FF6629286F0F85EC0 -MD = 666729F86C0B4484B65A18E2417C004A5DE0D51EF1A9A9143A10E552 - -Len = 1571 -Msg = 14C24ED71ABA68FADFA20979A31A6F0E64C839AEE476B018FEE6F1E6C0829FBB764197BF0357A2C03EAB0E61E793F7185BD3F1863E8E5A3970A1E0AEE86D401D7FB079888E5CD442F56780FB05384DE328D00834C504751A28D0E1D028AD1455277BC662A3DFABF903DB129342659949F8363AA94E9ABADAA6C33956B410D4B914713A2DD59AAD28B66791A2942B3FEE58F011F8E8CB693D9D52481623F11E300BB51E808BC3AA346905EEDA2EB59CB469EB99A0B1F2D7DA56CE6167D5005DCB18DBE728E0 -MD = C629FC80F5BB33D4C58F5E4B467D09364BF46EC6C81A58A55ED0F357 - -Len = 1572 -Msg = 94A31FF206DBE122709C56660F5FA690FE65273F918B44118D647BA94E81C8FD837AB68EF7A67CC9C3FDAE7F29883B31E786D0B4E90148CB146D11A68828BD4D3E16FFF6FC010E93F5FE04453C23DC6B4A995B1DB5D430E383B78F8D90D7754434F54E56808A7BE3EDF21DFDF2D824B94D7CDDDF652D1655A7E1806C436AB5BE6BCB673CEDF407AAF4CBA98A9335339B6F86BC11A08A08738827B29058DD6BE75A83D11D6E70285E062E7AA1E03D79098997C13E6CC45235EA37FE02BD0EF47F9E4C5028D0 -MD = F7072F9405E06DD4172DE1D9D1BB7F448B2A7D567874D14B9529CD1F - -Len = 1573 -Msg = AD30B3BE44B88B1011FA94DAF026E1F9B7CF834B972463E8BB77BE43F068127AE9BE0DB3D2B5B20118C50053239870571D9971721BB4AEB5F716FDE77ED2932E4AFBAC5C4E177CE68A0B849E91373CD2202A22085A775F09765AF9CDE7B359B8CAF4ED89B0AD46C856A40AC477641A2E793FBA446A2973F70C978F8C9116F9932BB39AA530DB1B4AF2E0EA9EB8AFF1225C275EC204A5FB091784E5D49814C5788CE7D409893B38AF270115DF681082EBCC051F2390C20B5A80EE74C213BA29499FC9255390 -MD = 305B9EAD42EF0B39AF78E0EDD9B62F9A762D6EC20FD5573B83AEC0DA - -Len = 1574 -Msg = 4C86FAB1AB85CB3D2D6394869241DCE2DEE5B3097373DC2584858C4B0D2A8494A802BDBE3C1BF08FF1DE84773FFE307A0432310B6B874AA55833BAC8B56FF7C0FADB831A00143C9BC17EE0E2547A90F95FF2C73F1E6BC8E3AB0745ED5814972AA247D72AFD7161C192981FA8B85DE7CDCAE3F023FFC4CC62E5257129D85F6E0D950D28C457512213A84BE7DF5AE54FBFE7964D3FDC009C70322FFA50782F443763730CB4CF49600FD4A3C831D580D1026E6EAA1801846EB2A8175F528DB9A09B1987AF148C -MD = 1893A659153739C34AC20B716E962BA657930626916E761FC53C37E1 - -Len = 1575 -Msg = F2E2E57FAE32B0A84C5D7B43174C74DAE20144A875A52ECFFD0BCEFFDA3B86E7200C1FE848A7A89D737204D199AFF82CAABC2723C7970618BEDB3FEEEED2CC172F5FFC0525ECFB7F6402407D85273A21DB19CCFF4FC5F1487EB5A87BFAD8E1C9D4832C1DE34D70ABAC87A68342AFF65881DD881876570C1404B4612345341266457243D5A03D7C01B4B34979C01F6EDDCA3EB662A79A73A0E12992424F8F461321466C8D481E2F90C31E8DF4A79F39F9F5E87A8CD12055B31AC6ECD4B81C975B7BC3F30048 -MD = 48FE37033F31272F0C45494F93543A3DD02B86BBA66E4BB85521BE19 - -Len = 1576 -Msg = FDD7A9433A3B4AFABD7A3A5E3457E56DEBF78E84B7A0B0CA0E8C6D53BD0C2DAE31B2700C6128334F43981BE3B213B1D7A118D59C7E6B6493A86F866A1635C12859CFB9AD17460A77B4522A5C1883C3D6ACC86E6162667EC414E9A104AA892053A2B1D72165A855BACD8FAF8034A5DD9B716F47A0818C09BB6BAF22AA503C06B4CA261F557761989D2AFBD88B6A678AD128AF68672107D0F1FC73C5CA740459297B3292B281E93BCEB761BDE7221C3A55708E5EC84472CDDCAA84ECF23723CC0991355C6280 -MD = E583849474F3C759B7A3093C7ABADD61425073AEA2678E278215708D - -Len = 1577 -Msg = 90E5EC58E79320AE60ABE631E3073FDCE992CA5BA19A6E3F2272F6B0E9F9A9BCF70236C5FB0DB8DBFD980683DF4C176F07C27A944699A5AC7552C0D5D3824BD3E95E2DFB7D412FA0A8F5D2B73E0936F11E6B95FE8AB3FDB02A8ACCD1AC7867066318A3F60F244F79D01CCCB340BD4216B8C9222294187122133605EE25230DEE6262DE75506648BC6867A8C70FEB75B687661EB9C5D87C630BE06CED62AEB7A6C8B2A7DF23FF8A34E3BEED0CFD3B30A3ECEF1B59BA1C8988A46971686658FA110AE238330700 -MD = A0EB9C2DC175C8D9D54CE82FD5569761A180A0A265FED3C216D17A94 - -Len = 1578 -Msg = 7D10486481F81E0B593C849E54D047DB523A6F31E7B19FD80E747364F43CA2B1773DC9B62B004D855CC38330EE82DE4EDB37F07402A9301E40A6E135EE2DB0B8BFC493B69E4DEB2543E0241D8416467D8CAA0FDC73E6D6E177A0A18885946318416F0DF593BF680EF5D10ABE8E752EE3646DC6280DDBCB500548290D4E4826D685DE446037C25068A9424ED6D0C9B63EE650A42674B7E231F40761F7F367C043537E320B79C9D9071362A7E9F6E65AFD9BF4536D860AB58015715953718CDEB040240A731E40 -MD = 05534AB5AABEB185BE6BF614BD8CAF51B911FA8555D3027433D48DF9 - -Len = 1579 -Msg = CDCA251E2C752A3E724A0D32B65AA4B1D5C87DEBC1F87D802C6DEE8EDA523C10026985390DDA593ABD375E86FCA31950FB74FA6FAEF330225BE70C71D2492C95410E6B115BDF694DD5965C6D4FC5B585EA4DF25803C9FAC55FAC49EA732D736752BC8634A2871CAA788261E352A1C8B3A645D0E22BDF10D62C6756E656F9E78314BE069B2E1444B32273B8EC132A4DA2D10EA148EF8161D238B11A437F2983E26B7C8AE95210B393BB3E624D99FEF3C72FFD1B521B8B4D41B426E4F8055C0B50776EE059C6E0 -MD = 6C74B24CE406E0C21324AF5AE8A3FF6B4CEB05108DA13ED5E64EE6C8 - -Len = 1580 -Msg = BC114681C35F67BEF8C8CC81BBDF40B879EA33A05D034B38B6EEE163819DFFF9E15B0B9ED7A80D9FB9C9499AD2DAC94AD8CAB68B4871E3423CD35C67D710A37830478C344EB4439B0BA4ACE3554B682F6BA20209923932ACB9F743D8BD6A4938466531FC5AB43E6E8DAED4815F288C16D909402DB7ABCABF8B96F305BB7BBD1D73D86FE03012A9CDA5AC4577BBA3ED9375EB9566C12A0BFE08F4B8EBC663A8B0CDEA53D65802847C09A07E9D8E51BA7DA92F575D523F2D1418EB5D169CBA1901B7829339C4A0 -MD = 867F9834FE13AC61D2B59BFE126783BACA648B1B469432C1006F2C63 - -Len = 1581 -Msg = 5019CE0DD714A0C8B92017E26AF6BC433E101A4EA01D2E39BA4FBD467974C0831EB6F4E2639CDD8596EFCBEFC546C22C75D8F742C0C3439D49C199F9D4ECF9CCAF4D375BB8508FD8F7314473A1EC2E3B9A12386122773F8AD12E6C9319134FB1C8EE836C8CBA8B714FB1D0BF11190D1E9A2A80D7907160607F43FA0DE59E77850FDD32161F05A9C13C8C6BB0F5AA8D2F8A4FA1C38AF78C61A26B560F06FD813121BC133B54D88CF1033EA7069E98AE8D8A6E2F99B584AD8F56DB1ABC1590E8DE34ADDE195CC8 -MD = 8FA3912C546F3A68C40C855799DFC97540CE888C78BA64390653D10B - -Len = 1582 -Msg = 2CC35AADA46B1AE9F81024B610740D81451D81426C6A02C00110687C39F45546E57793C5B31EBD9A1F52A14279A767C58816D77377873B91DC392888C467916C876391A5312BEF9C13898FCAC965CC7AC6B7209D757E40618EB94FE173A27A102679173E1A86ACACDDD181E1B0684F78EDCCD712229979A0A9BEBF55B27A8E74ACE453C77A681428D9C775C701BBAD9D3E4EB8EDC2BCCD09DA540F7AC232DF89E379229F47330668730E2E262695C6FE1F3E7E553125241734B1002EE7F6B39FD4695A686248 -MD = 935EE59A738D139B862A4EEBE0B5B930AB13AEEE64E342FAAD3F8B1D - -Len = 1583 -Msg = 1916F52B31159E1BD0C2F375057A01A15CF716B49160C7AF88BEAD7A1D91ABCBFC20595DF3BD0A36FF92F0E35495E12E9EB49FD9C38EEA08567CBF32074389843541090B742915BDCDBD0286F66A657FFAF248E64C15053A14D02ED841F268205716894BB36D13477F2045A57DC8CC51BE67FD50BA15757E18A71A7F529BFC8EBE84F8562645169CF4EA0DF921233287B7530553545839FD5DFED59DC7610D3A6ED7FC97B5CEAD9E17AEE9E5452572075E7656CD517E5E94E4A01FE66403E26A6F3DDAE8A504 -MD = 25CA80EFA6BE85F54E0F7DDA5E9666C66FD78C3B26CA6046E6AAB86D - -Len = 1584 -Msg = 70A40BFBEF92277A1AAD72F6B79D0177197C4EBD432668CFEC05D099ACCB651062B5DFF156C0B27336687A94B26679CFDD9DAF7AD204338DD9C4D14114033A5C225BD11F217B5F4732DA167EE3F939262D4043FC9CBA92303B7B5E96AEA12ADDA64859DF4B86E9EE0B58E39091E6B188B408AC94E1294A8911245EE361E60E601EFF58D1D37639F3753BEC80EBB4EFDE25817436076623FC65415FE51D1B0280366D12C554D86743F3C3B6572E400361A60726131441BA493A83FBE9AFDA90F7AF1AE717238D -MD = 10795D3ABCC077F4A1F5B5653C478F9DB42110EA9F34925470B3CD11 - -Len = 1585 -Msg = 4A3FAD4471E41E86724FDB35F4D3B26BFF60DBAFC5D4BD351135C8A7478A3B07001CD9C20829D41471A146A3EFB8EE598612F921CD1E4CC4A47FCCDB8FF0F67F44680E3378A8AA64619A33CFB5A4378FE4079567813BFB481BDC595B307BC97D70493FD08E2DAA4D97D2AA64FD08192C11D0A41A8D26119B0E8EDE30EB80F4E8BC2B8B0794C393B6FC23DB16F46DD6BCE8E52388B8D014CF6EA40EF553CDFC33EEFCF4898436B60162B98D99B1EF472FB4C79301B56AD49BCD6659BAD899C81F49B81D67CD9200 -MD = F2FBD2EF0F74623558D346E5BC1265BAB74159EC17BDFCB84E43FCF4 - -Len = 1586 -Msg = A68AB5DEC5519049A81EC8B6EC950DF8A9D989B58B5C4C397B22801DC85A24266CB91ADE2E99F53B91B5AE3C23B7D7185B21BE6582048BC8A1570E828C5D46666DCE1DCE06921ADD366D9043BC797B3E6EDDA00782FB57C13ED2D2F555AACCF7840D01C6DD75FD3D700C3BB18A49A7D60A879FD4BAD06D68A7C5763ED677B0C5A248E3CBE476A674D31F8C7DD5521C4F652329D56D6DA138D50D3126BE315C1963F376B4AFED50EB2F16E645B86593FE7433FB6BDB40621EDCD2F41E8D6DB8A1031AA73D7C9180 -MD = DEA10122CD551B0F512D7F7DA9741479BB29D662D80594D496AC61F6 - -Len = 1587 -Msg = E99B30E55F72FBE081ED5AF28A0B464810B49F98AD1B41C14BB47CBB1EAFFF99BB30A753099FB3FDD7964B06C6340E0C96B7EA1B95E928823A5090AD6B668E3CA047BFC8C653673B193F892824971C4449B37922304BDD160465CB842D3F44AF50C742A7F71C2A08682360CAE493FB8384644F056B5D9B25E4B2799ABE70E905CF7B0E7DEBF82496009DDB054754A9560C18377EB64D1BBA169C353A443CD9D80E6A39801FEBB9BAE3549399982D8C3578591B198ABB8CF2720C33012E76319EDCF1BCF0FA7580 -MD = 65C8FB3498559E4C7B4C6D08E662419EFB1E99DA1586E585078A8589 - -Len = 1588 -Msg = 108B8CD3F79E74BC10D98D8A48A480A171ECFE1DCFC279D849AE49A01484A964070F0AC4400F85D8C0ACB88CCF5B6D41E7DFBD3FEF08865592C4052924DC0674A9FBD68A16FEBDE0CE7FB61C2F0D4AF7CF57DB925AFE0BA6109348F11BFD346ACD5A6A8674A8B6D6BA3229D4588E0419849A555B4121426F22C61B4978EEE4A22DA23D2A8E96BFBF5D5BFA4C2DBF3CE6FDE6433058E9738D1B3043134DCC1D00BF5860CF17115B8D6FB2AF35DE707F222520CEFE5001951BFE965DDB654B37B8B935F4BDA1D9F0 -MD = F42C3936E485AFE0C2E6C57F22D525B30397C678EAFC98953821EFAD - -Len = 1589 -Msg = DE5BFAAE3D29D15E1B522121DD99D62671BD1CD310CFD04825B0A203BC8E4068C765FC005F916E218FBFB3DAFBE565AA27E3E26401D450CBAE7EDC8ED460431BB0CF3BE8471E2ED60342613FEB2E6685CDCD2DEF4053905565BF9447F36A1F4C1DB380E607D9B331B64AF73F9875540D8BBE1A2C6AAC1BBB8D7FEFC22A9136F5F9CC04001B621AD5569D341FBEA3F829D76ADEB99BB4C6A1AA0D70C22DA85B40D3ADC0EC31812CE3D40ACEFD27377E99F748EF930FB60AFD4A83C9810679806EE6B0DD9432F530 -MD = ED346DD22C887C9DDE9763483D62ADCADC16D9F6381D6CAA38D719E0 - -Len = 1590 -Msg = 04CFEB6AE07A84B6BE0A8FBCE81E3BC966D4CA35888C9F83E215FCA0280526ABA19081F862591B91C98D52DB46C9CB0ADF79F8E74B66C8C8F7D9BFCD2DBC6D37E25433F81417E84DE6A1E79CFF48A7AEA7898C722D4754110D9A151F9DB4E7A0E460C0BBD0A607E3F1B9820B878B3BA21820CB41E15B9BF6FC46FD0126064E0BE9BF60C0E6175291DDB35B53A39DB570EB1DF10CB6BC54D40BFCF2A84758C54EDD42A43658A87C2B6D6E7071D2D3170E2218AC0C9389888B2B9E25339C8D4E25D62B789BC1EF5C -MD = 6AA93B1A5D1651A1D9CAD996007EF01463CAFBCE69C6086CEDB70C81 - -Len = 1591 -Msg = 68C048F9095F71348C5534663C9E927ADFD3ECD4F99CB381AAC3266F66315193FD08523A905714D4E6B4BF72F605A68E164F6057538A3DBF89683B9665A047B018168E16A24990C61E1CFAC62CB3B888B4F2C5008F49452F1DD81B94288BFC94B89886B5DC23B55DD74A51C74A4D44DA267C9443340438FA3ECC220B9E5E81DDE7049337522473996E8FADB6AC0775D3D3C6ECC8FE20EFE92275071909229830024262C762C9DEEEC2DC646B220D5D5CFE6B09BA8790CCC10D01BD8E5178F5ECD92C6E5233274A -MD = EF8C2D2563A3252B5312D5F2C863E8EFB7C58E15C96FA7AE52CCB301 - -Len = 1592 -Msg = 74356E449F4BF8644F77B14F4D67CB6BD9C1F5AE357621D5B8147E562B65C66585CAF2E491B48529A01A34D226D436959153815380D5689E30B35357CDAC6E08D3F2B0E88E200600D62BD9F5EAF488DF86A4470EA227006182E44809009868C4C280C43D7D64A5268FA719074960087B3A6ABC837882F882C837834535929389A12B2C78187E2EA07EF8B8EEF27DC85002C3AE35F1A50BEE6A1C48BA7E175F3316670B27983472AA6A61EED0A683A39EE323080620EA44A9F74411AE5CE99030528F9AB49C79F2 -MD = 31A843B4A9F332F3B6B099843540AA70651B26B80E0BD75B77F3AA9B - -Len = 1593 -Msg = DDBDE9D6BA8A0889828CCEE9243EFF68E2C4D342E84273C9F4B4F6BAA3F2CF622354FFDC7EB6D31C9F55A341881FE7AD266B45B8CCACEA665C0ED227AD699051C020EC1C51834D0B7BDB69352B196CAB5C0C1648ED3A9BF9D77550A136EDCD294FFB41732E010CCA56BA0FFB20B3296F88C7D2A802F60AD7E39FD1F8AAE9F5B1B075BCBEA2CA6B3A79FE5BC2D13AF5BE022CEFDEB32E3659E2437F10BAD7210DCFBD21AE1B60E54862AF0B302FB596ECEE90783BC98798A31CFD9ABC07D2BE5B7379480BDCE1BF00 -MD = CC99CEFE2ACBF9C7D3EC7E862E617A94F929E9D31EF49131EC8F8115 - -Len = 1594 -Msg = FD76F5473E5DE24298193400A93C9ACD88CE44F855C1FF2980B0A40AE8418FB7119CA8FAB283221876EF54E7C3CE09AD70EB14C1B4A18A11FEA453DE45DFA5D16BF0071392224D15A7DCA73A10F2F0476F5300AE8BB88F706F22DEABFF0E6BCAEE981E4FDF7A028AD7B800A65A994EF73DC2F34166C92EAECE507DB3DA95264B36E29B30EC9D852172D5E227468E735EC8C43177ACD1C2EEC380A7FF6B44748580F5190EAB108C37517217757AABB265EF18CF97B3DDF7B2BAC1ED07105B8825C5F2B955F23A6900 -MD = B971123BC8FE63B1E53E871655723F72A0B34E67075597FF1FFAFBD0 - -Len = 1595 -Msg = B82326F747C89F4976951420E31FD1969A46153D0F58D43E8D795F89DF7863AA752CF3210123937C76772C03B8C824ECF3601C4BC469ED02804126192534568B662FE8BC5CDAD86EE7B6F9B0F2AA98D996A810316830833B2B4C153F0AC30646D4E02B34417930EF1A5BA15A0E640C092750DB48E79EA7BCCD9ED1A5E24B93B3AE53C6F6380817A5491EFC9A29D8C8211C45152CBB28E1B8DA29BA4E634097BEDC1DD3C46ACE8E920BEF9B41CEEDAE26EB1733664CEF70CE8B9B4CD8E5377FC498C7C64348FD7C60 -MD = 1E9B2BE2DDC9FBF0C8471E20B42142132811B44C4BCF9EAB81B69ED8 - -Len = 1596 -Msg = A1C179F412135FB1CFEABCD4D97D1B9AC22DBA60C174A5E889A188D3FA23E31EED0DF9EC72A1B48FF965DB0282143E48F15EEC05B0502A34B9B1770F79B299E1088183F080FD4C390C069AA310408D3B9E39961EA9457A18FAD96687DCCD6F8E4C3CBFCC55537919CBF0816D563BFBE2D7B32727625F1FAAE1A7AE153A6C1AB45CB8F8915F66122CF0570BE115849A24901CA6CFCFD96FBA7290455452881CD09D143867A67313C9D4ADD919436149200C1A4D9ABFA84A66A935F2B6203D0125A9654A5EC16117D0 -MD = 91E96A330B6ABDE106F8B968ED4E37526E60E78B1EABF8D233BFCA80 - -Len = 1597 -Msg = 56585935F30E0C5DF323FCE4A4714E50186A1868342A2692302C0A93AA273B1C0E9F4DEF90117D0D20DAEFC40E7A3643DD5BC87BDE18F59E9AA7401309A18341AA687411269E2E847D6647274D05807536F39559839F3ABEB1D92939B8CD682DC2396EE27CB5A5FEEF2F3C66294119A4303F16E76C5A74303064941B2437212B73BDBC83E02ED998CC520E8EFA5D388E94D869F02D2E82992F37CBDB238001033CF481776D706759C29B1D69A1EB9EE1653D140BF47F9AB2E5774B60F14128DB0FDA416DB783D5D0 -MD = 5354A913E45BA3D458FB1CA77D3CA5BFA35373DB32DA943A49A483C9 - -Len = 1598 -Msg = D3522A6A36034E5CB35A86D9AC147076015AC3FB2E268A7B2BD1961E7C50E847BE9690BDD655DA76641CF0A9ED6185AFD5904145392DFD0D7BD4EA7940AC6E0D49EFFF68A23D8278C1692CD4B08AB49E840FBDA309E8342FA77F38CF779885138ACE50D1BE596A36C959CC8741E607C453455E63BE1F15FFA3F1558A7D48C5F2B3781158117E5839BF4097F003D9B52B4AB21F099FF3464704F48C68505F1CCE098F071C5A6741918884A14B81D12E02A88F084299832CC51EC8D87DA25D5E4C4F6139B5C3F48DFC -MD = C0706CEE4893D5683AC33D4E636462EAF8317B61C10990D50226AF32 - -Len = 1599 -Msg = 347858A3C88CA84AD4E03F46CFD4A20D0CFBD31B9EAF5E2A428D8050A1F53DA5D8D42730B8E9B5D10578760CA2667F99F0B73180A88E22E75B11A524E789AB5E9E7863348A6D26C337F55307DE45D6E18FE951E0EF65745A54826A6C4F141588B11F904F9477041FDBFB40F260B5F49910C0091894812F3E91786050A5136E944EBF60C57A3415BBD5DE0C4BF960E1983C6F0A36A10B5336A800893A2AF078E734A946A3E1105B6DD64A16C62379F72D7D808F14793FF6264F635262553C9312DE0F80C0A5D43ACE -MD = DFD1F0F63A6A3DC6D96A8168B4208CBD964BDF98F5A19F9BDE6FE36C - -Len = 1600 -Msg = 8C3798E51BC68482D7337D3ABB75DC9FFE860714A9AD73551E120059860DDE24AB87327222B64CF774415A70F724CDF270DE3FE47DDA07B61C9EF2A3551F45A5584860248FABDE676E1CD75F6355AA3EAEABE3B51DC813D9FB2EAA4F0F1D9F834D7CAD9C7C695AE84B329385BC0BEF895B9F1EDF44A03D4B410CC23A79A6B62E4F346A5E8DD851C2857995DDBF5B2D717AEB847310E1F6A46AC3D26A7F9B44985AF656D2B7C9406E8A9E8F47DCB4EF6B83CAACF9AEFB6118BFCFF7E44BEF6937EBDDC89186839B77 -MD = 1029CA117957D80F3C859E8394DD34969331CA3BCEDC436B1EAB0849 - -Len = 1601 -Msg = 24E94DA7D1C92C690323242366867A5B805F81EC7C1132C024EDB5D0A09614DC67C068B0FEAFCB6DDEDA0A1C346F2238B0C6D6AB17A197B5170BE004275106E4CB9711745CBF1696B3BC7B764C693AF4F43B30DE3196A8B61A3FB5754EB7B99F5F9B65C8B2190B12CE038C0DEE4D3F95BFBBBBCB662EBA3BD42143A61415C728F736CB8350F5DB2351BE4BD6B8785F20209625AC2F56A789DA397C65F2E6BAB2F5C651F543CCFA554672FC46F9C6AB63887A2F7FD30B13BFE66155CD964ED7FF4937EE8626CECA4880 -MD = EB9021BA992722901C8B98B3010F9A8D8B7299EB258FEB7A8D899059 - -Len = 1602 -Msg = 70BCB8E40B6F1FC372AE4582872E2806F12270013A5DFC58B2591FF68CD1EBF89DD5F201E226C81A9EB7F4B391BB8E3469AE3311B3279BEEB191DE6067CA55AD661DE8DFE3B0D88BC9577EA5A3CAA8364CDB54C40ED345EEF3F46E8D8D69B35C0B9D9A881DE6FEEED0EBC814618D1F5A9A033F59B51773D4B91DE7D366DB28C71D8D08CBEFF882920ECD240026EBA6281BEC7A4AE692A77C830C4DF7606ED3161497EF547B6938DABAE45E01FD2D3B403AE9086F98B69FC377C6B0B353E62FDF7FAFAD48CEB91BDBC0 -MD = EA9291ECE43518D3803CF610B47B60741A0C4531334CD5E363932870 - -Len = 1603 -Msg = 67A2ACDFE159EAB1A5B7D9161BFEFC43392FCD250EB68E95BE7D309BC453507687DBC8E26EC6954BC8CA87D825D3E87B149676D717C05F8FD953CCB2B998F57D9D13ACA970DC073637D1F303D0CB12E6BF2E6E6561A09B3EA1CB6BA3217B43B73E679BB3F59FA227E7BFC6A785184D24516335FE9282E231DF0F28D36248E125D9A6DE1A3CB08FCE7955BC1984DDFF6502BCC100D952FFA62E69D664CB76B6B4D4D02993F92C5C3F2EE115C384C996154DAA3EB2914F0ED2826AFBEC2DE86594DA71ADA1A1F04D5F60 -MD = 8DF89763EF533FB776964FE079E54EAB655090FC9C1F843CBE8E8EB1 - -Len = 1604 -Msg = 92C85290E7533F339C3F8637748E6B756C4CE24D21C6E5F2CC29D5D5B0FE770473BE6D26398D22B88B67D5DC398F8EABB2747487A5635DCA0C18D95E3F522A1D0605AAE2F99743F591D31961278ADEB03481DBFE3FBA5ACC722127567EE9A60872890A976E656872FF9696BCDFF8120C49C337A44522507E98D30D96DAAE13197C8464EB2CEAF011C79F83ACFCE448B0C15BF5FA94AC0E6F61770DC55FA0D9AD3B708164BEF6665DF6EB51F3E493C8E7252F3562B464E94E849A12DC52AA19A0067FA41F090C607950 -MD = 4C0AD6657528B85B799E5D69268D83766568EF39F091A71E0B685E79 - -Len = 1605 -Msg = A8847BD4C5F54B7BF00F4D0669F7ACAA71BD0C69A12D53F998910C858BD69BB2A09D46346C04390E0FEC9F6547B04209209E1C0FFA41C497BAE7470B6D3228E081773454046B655D0910088FF7137A17869AA97992C0CBB34C513BA06420EC3C0610C0DCD1A21142A5A3BB50CC50A5109FF8D81796D015A8E99DD352C1E6908B19C1F55E617A04BFB699F98798DE1B456627CFEC2F2FE10BD880A4531B4EAC2867E782A8C9A1D564A5D6349B3E02C27B513D676FD9819FD28D37187C80406D1A377FD16C1D5511D288 -MD = FF9407CA0B588C49E4C5261F75886339639D1287A35E5D11BBF07529 - -Len = 1606 -Msg = 57B6CF67BE832C5FF9630C6C23F45EB662D91CCEF2313DBA0B3961FF63A1C95D2193511B3CF773A9E149701506DCDF66CF148682ACCD60CFE5261CA8482001A75AAFAC4452AAF3EAAC7B0C6F963AF736A8C07E175B06DD38B8AEF3491343C2C319713EEBD2063125D970660BCD813B25EF8E208AC96DBFE21D0106ABAEEFBA9EBEEFDF0AEAF41C011E6F91C0AE8D84B104E7C33CCCB863CA72FACF09D1B8FD0EB1BAC3A5B07D3004664B9AD568EC5A254F470CA99FDD5BA7270DA6ECD0983B5F3F1107BB6F8F4A9BE4 -MD = A646F1B025AA68B489511A997EA4020B0BDA625A2352310FD30C8545 - -Len = 1607 -Msg = 773E8CD756FDA30FD5D91E11765CE2E07B9ADB1AA5D28E54690C42E2C88270522EF70BDC457E671A2F0BE72066FD6AB9AA4FADEE137A2C7B33890B7926AD69514ABF915B094E4602833A4C3EC2A294D4A86791637BECA3A2E49A6B1678C557EC667177F2C98BAD18137A8ECF7AE31ADE6645871AF70894DDA7D5039A1CAB5836D3F1FCE31FC4260609C5A85A3728D7E50D521CF196922FA72C6AEC3CE6A5EBD0C1C1ECF45CC8F2E4EC0B283B359F1E7CF62070888E9BA2EED005BD1E7B9E50A6CD7146361773610A76 -MD = EF629B54E1051927DECC22587A56F9B06B11CA56B48B495FFB204839 - -Len = 1608 -Msg = FA56BF730C4F8395875189C10C4FB251605757A8FECC31F9737E3C2503B02608E6731E85D7A38393C67DE516B85304824BFB135E33BF22B3A23B913BF6ACD2B7AB85198B8187B2BCD454D5E3318CACB32FD6261C31AE7F6C54EF6A7A2A4C9F3ECB81CE3555D4F0AD466DD4C108A90399D70041997C3B25345A9653F3C9A6711AB1B91D6A9D2216442DA2C973CBD685EE7643BFD77327A2F7AE9CB283620A08716DFB462E5C1D65432CA9D56A90E811443CD1ECB8F0DE179C9CB48BA4F6FEC360C66F252F6E64EDC96B -MD = 6096E9914C1AC93A6809DE7AD91119C637B00BBD64DCC3E1FAC1E1ED - -Len = 1609 -Msg = 9FF8A2A4213E2CD5F76338232761F86130B1609DDBFECC9EE0712A7F3DEEAF36BFF36D0959DF5547713E072DF78E87BA6F9A0B27B55A15A48FDB21897DD5C76C1CD22266B7895DC06969098C9E4EA6B4E73287D50075ED84DD14535214ACE53CB9F8935CCC7DA8EB0B0A14A5655B19429B4C9CD842B4E1A3DFE980ED978236ED49E6C82526D18122583B61DD9A04E04372344BED009271C83CB352219A0E802D2ED016EC94BB799D69663CADC92EABA4E638A2781828AEB6BDABCEE600510BE61782CBD3F30361AE5E80 -MD = FEE27EB6BFB895EC912BF27FE99D6108921612AECD51E9648CC23012 - -Len = 1610 -Msg = 1AC32A48B8F354AB80580B77B6ECF9231CB9B5749DE765EEC1E7A3B8A751B6D7B3100520B27EF10D4ED1E9671D31721374BAE63FDF4014BE492E868FF08F159BCAAE359FDFEF88C66A5AC7A2A55DB0D93BE929234F7FFC8BD8D3FEC296DC2A588CF47AFEFC10FBD7E67E81CFAA1F61403E9AA25CA4D11314590B1D74828F90416288A2D10CBCA43057518EB7C583197C44F03ACEBB7A8E12F1880860335E54D30BAD54171DE4904E5BD3F22F91004A2A95467F24F8BE0D88681D79978D1948711EA3E49308225A3260C0 -MD = 05BD140A2B284A70285CFB4C5B65908B1D3CDFAF1F172F6CC48E781E - -Len = 1611 -Msg = F0AD4970D30ACA266FE736FD168F4A023FAD4E998BE61BFBF20587432CC318FD57748DD6792B973857381A095A8A1D234D6D98B89E44427ABD07A622298A28C888D1C6DEB24FF2B8E29029E7616B9D4E3769437B6AAF8028CD856A67AAD1E627E52C941B1DAC239C6555F9E8655A28E89AACBC8D830B1C5AAFE4A104D94C4E9A86BFA24FF74C08D341FAE30C705EA84C78784366EB37A43E3F7FBB671D0177B61FF5420214121C0BBD451BBE6BD32E5A6CBC2A4908F48601AC24935D8D861846039BC53A16C583019420 -MD = 48EAED4FC8B045DF6ECEAF36B680DC723A761A6036EE09878B035F8E - -Len = 1612 -Msg = 3BE987D46800EE451CC793FDA988C727092851357138E7C112FA5F611114320951A65BC45AB34E1887A73B7FDF932E6743CCEF3731737A5520C6F4B88437A8B4CFC89A78885C1D8612BDFF6F4EE5C0E5C36DE87863AF9E63803740E06D16C2EB5F44BE7161F0ADE58A94DD6584DE18C80CFB88022A50C1040369E8962B70D9160A847C4207B104C48803B1740E9D1E1F5F0F4FAC4202E6E98D2D5C09FECC2C382084FC63CC9D26AC8DCF307118E8D72CDE0FCF04067443A5A1A9A833912E041FA251A9647F2FE2BD9330 -MD = A09040D6995EF2A27FC09626D6D8BE33AAD4FE8855EE5BF63334AC75 - -Len = 1613 -Msg = A8FD1D5C15E4CAA7ED292CD3693F9418E46AC4C9635A1AECE4A8E0EFA9B76EC1E356F80A54A45C62FCEF3B782E2882115FEC648E89A58D47669131605AC558E14F43A2DAD745521F37676F4B2C491FDEEFD42C3CB6D9E313638D843C59702EE637BCD813303FC34CEDF0DC017F93595DF8636505E4E96FFDE3D369DCEBC9493E7AD0AAFD1D44FCC25121C4BDEA74C07EC0264D20973E526D5D9876B17D5050978DA6B39EBC530EE2112939804EE5DF60712778B66C917DDF3428FEB2E5B27BCFD69CDE6ABEC96B5CB500 -MD = BBD4BE45EF4E398671763586B09B505463967566BA73CFAB34FDA539 - -Len = 1614 -Msg = A46537443AB90410B94FE953B2D17D44BBD81E996022690F081EAE3AB7FFC9A9BFC419BFA66F88F3260C44D71E1D577BB9CA1C3A2977FAEB50C6B4F21117BA6976BF964DD5C2146286A35C608474E8D87A708C04DD0165655C4AF624C0CFCB88B844B18E4B14514D3A416C46BDB0A95D9D42301AF1EE9F82E6CAE0531A5C92FC6A1663B9C07BC16A982C08017C660E77CA1313ABD742CE18EA7B92C0944859AF6E2462C00BBB2399D33A86D2A10ADA9AFD3DF6CDCC001CFBEEC4A320A014EACF3C6819928F54C492A430 -MD = B30505200FDACA5B1DDA8B0A06FE4E7DCF7C11B309A2B9C3C13FD7EA - -Len = 1615 -Msg = 2FE16DBF1226D02C64CE853C981B1F6FE6953504EA690DE36D8E88915C979676306185132CCC2BA8F603AC355C8258044FFE942FD60B8CDF2E7D0C0B0C8FB37967AEE1F6327253C3AFF37FF0FF45C06C58141F389542582BA07C36AE59F173F83141C9144CBB9800B77661BBC0A16BCAF6273E1E476A72640256CA952F67C130F6E8F54B0BB5FEA837467C5507A0DFA256868F6868C1B0F98AA9DAFF35AF40BBC816DF280DA9A5896B722353857CADFD0793D2F17FF0DD6AEAF4D0E589D09A13C22A3C2C7623BC86DD30 -MD = A50A141F31D2BA70BA92E3F16439D1FA1DC4528DF9AC145F1FC90982 - -Len = 1616 -Msg = B6134F9C3E91DD8000740D009DD806240811D51AB1546A974BCB18D344642BAA5CD5903AF84D58EC5BA17301D5EC0F10CCD0509CBB3FD3FFF9172D193AF0F782252FD1338C7244D40E0E42362275B22D01C4C3389F19DD69BDF958EBE28E31A4FFE2B5F18A87831CFB7095F58A87C9FA21DB72BA269379B2DC2384B3DA953C7925761FED324620ACEA435E52B424A7723F6A2357374157A34CD8252351C25A1B232826CEFE1BD3E70FFC15A31E7C0598219D7F00436294D11891B82497BC78AA5363892A2495DF8C1EEF -MD = F583F07DF2327887C6F10A9B1D509A744F3C294A4227976E3C3722E8 - -Len = 1617 -Msg = 9C931DFD9C4D8C101C8F629C7B12084CD414F91DAC571E93F843CB77FB6C073BE1227605078AAE37D880F31D660692455314C9E818AAC083F4C9533CC2F9DCE60229D1C4F3A6DFA50AC6DD4C5C7F2AF2BAD5BD7F308BD3618B40FD9495EFFF87FC338E55D6949BCC6DF902CE0EF1F496E2D8E63DC225AEB9D2FC7CA7FD081B86E54D87E441FA1A5251ABF4C004C691C684E0009DFD3FB7D6620126CB0D859DBB884AF8DA735CD51F89316F28E11FEDFF238C13D0DBCFFD4BDC55AAE2C0C20F6AA4C9CA620955A050B11D80 -MD = 23EEB14706FFD8179ACF6D8FA89D72CE97845191FBE2C87FF1F182C7 - -Len = 1618 -Msg = FC9E543C76D384217780D7D47167AAC9826EAD5BD2FB0727A1BC37A15D31E45C75C2543976CD4F2C9C244DD358402934B37242C0210052F1344130E48D2D1605334F0F05592F1A2D9A40E0CA9F24821B51FDCBE2B9ACBC78D0CADB31448262D90147943550B913445E07AC1DB311DDC2CBF37AE39DBFEEB2353DB1C66C4D7448281CDEE230ED6075F5F8BB1BE7BB708337EB5ED98935F81912A86A6F727A611183945F4DB323E2374B70C6743961B84A9DA53E45397E3B8566CCB049C97B43704CA7CDD1BEE8543D82FF80 -MD = AC9EFCF821FDFD776B852ADAFB17A42E780A644FB3DF3A848206E739 - -Len = 1619 -Msg = 69B28A0A8AFD90F5AAC6C3C3906D619C2AC2312C5B908306C75E0D1BA79551B4FEB1EC9331A463385397EE0BE08F5F7EE8F5CA73B849B35817F19A827E3628651D79112BD514291FEB570057ACACEF4B0B99500BEF10C7638A0517B3F2F69E0F76F6DD15C11E38CAEC38B02C1CA4EB53028E604058546FB1EC5647F8544ABA1382D63D6020374559C3DBB35CB11B80208E1C464BA71C35EAF87455CFCC5E820592CF4D094BE9222F027EEA87C9AD0FFE42E84EDE6B4F2C6706E78B81449918B5F83D7D72481E9D11603340 -MD = 9000732D77881B0FF85783943348D3C02C1C5346729ADAECB1F53870 - -Len = 1620 -Msg = D616E9B17727CE826D28E5672AE1124235B8D3CCA505F931DB0E9FCB68AAC2324FD78D81F632DCCCE2E55654AAD4F4F1EE055147034F21F675E11833C2A85236EA23BAA44C3F8CCA4CE61C0CDB1EE635C361833CB20A16815942C637C67F3B5C0FA833D2717CA27FC339A66009BA76EB0CD1579312946FDAAB821D508859BC5AFC1C40042F2B61A0AD9B68357E216885113A052FED54D791BEA264C904C037321CE39EFBB8FB69DD700DBE53325BD8A71F6D832A7B7817F3DEAD7248EE86C698826BBFB58F6807F5E03AF0 -MD = 1B6E1A59025F26294B1CB808CA60F24859B97F55D64746D67E2C46F8 - -Len = 1621 -Msg = 570A724BC4DB5A97944847CF9496A80699944D703300E06AEACD03BBA32BFA3D335C265DDAD711B00B0637DE34BE4920395028A4021F51E56B0300196EA2E6FA0F281205617826B76269346F725833EC2CBEF01E8CD10D506AE1421924A7118830194978E5D5FF48D64315940B740E149436D0C6665E1EDEBA26D2E898FE8B153CDD7AB4D542F4845F3836773D6528329D0338768CDD1A83F40FC7DF5601EB840C7CC60A3E1AC40DB4A2418058E5C0C4AD572CDAA8E5DF2D94CCF97C5E9DB945F7157602383A0709E785C0 -MD = 57B61D3C2FE9FD0708301B69A928E2D3D781949DCF750897834B4196 - -Len = 1622 -Msg = 705BB313E3151FA58E67D27A222063D89CC1F51B0F85AFBD286F7A2679DE97E85608283BCB05A722B4964FD00469DA851DB6478AD123D15BD7C345168644E655CE27B26BE4860226846316590FE4A928EB70EF137EDA87500A1D2B7C926CE24F129CF2C26108C13FFA54DD7440E7A072E86F892A7CECE5B32FFA64A8EACCC0894918BBE03356EFBBE1CDD0D8D2874D4F0CF2DE97B6FF136C82E52CA2DDFFC7C071B235FDF45EA75F882218AA447DB1774B524E491A71C8AD36EF7E237586B8EF8C9D1F51696FA87BB7BEA8 -MD = 0B7C6257EC150A41971FA18B8D29F6EEC7888B2990EF91F454F17A96 - -Len = 1623 -Msg = FB6A9DFFEAE4C1DDD12A0B91B6DF791491C66FA5F63C17AACA03E05A021A0FBDF6110AB4F613DC4A18C3529510ECCAB3487B52F29B21C721C36A9D8ABACF0391BE26628855F488A67EE544F5A8F4ED28496F7D2EEBF0A6293848914D5AB313DBCC97FE8D6557BC0B55428EE9F9286473E3CA7F419958C3A6834B46DCFCF7FB33B9D212B8499AF8F742F63680C8BD3E9ED47483A765E7A24BF8E025FBC6F22BF119DCCF0C8325DE3842D7A38A2D7814609DF157CBC468B90E5F994E3FA5ECAD60086584D7DE80222F19080E -MD = E312B7FFCAE9C85E12D33BA59AEB880B3CE67FE10F2A76E25DE12836 - -Len = 1624 -Msg = C941CDB9C28AB0A791F2E5C8E8BB52850626AA89205BEC3A7E22682313D198B1FA33FC7295381354858758AE6C8EC6FAC3245C6E454D16FA2F51C4166FAB51DF272858F2D603770C40987F64442D487AF49CD5C3991CE858EA2A60DAB6A65A34414965933973AC2457089E359160B7CDEDC42F29E10A91921785F6B7224EE0B349393CDCFF6151B50B377D609559923D0984CDA6000829B916AB6896693EF6A2199B3C22F7DC5500A15B8258420E314C222BC000BC4E5413E6DD82C993F8330F5C6D1BE4BC79F08A1A0A46 -MD = A9F43B9621FC5902DF2458FD53D0CDE90AAE7000855C67D853C7937A - -Len = 1625 -Msg = 4512826ACF04E03A179B4637CDDA71C13DE4A063A95616E213DD9BF6F738EFFCEB958D8C5FA812CD9F7E0DC1071642B327FF8FA5E30092DFD3422CD66F371AFC8F5771EB86734099F9E731F303300E49E2196371BC90359B2099241F772F9BCEEA3A994ADA8E8A9377D50400264CD6BA2C016C6DF662194962F394C684CD77D1896980B6269944196A29EA086B6D37D240A242273B7BE94FC2F9DCE896E68F2AA6DD7E02360D80F10819A0B7B3631F9214498465ED58191F33A002E85781E21C711E4239481C704366E15E00 -MD = 679E62AD53DF559170FFE9F86486461A161AE6ED83FC38BDA1493F67 - -Len = 1626 -Msg = 5F0A71F137E9E6C4A89323D63F4C64524A8C571FE3B461ACD6ADC6868BA280CF54209AD953F2B6C79D94EBF15440257B0FAD8DA1989528EB001637A9ED39B5335111B580091106D3578BAA32220763B87881BF1C04E6F735316B1DD60939ECC8FAA36723443835BEB11375A8D1777A1E67F8383D13DF4D4AC7EABED0639F6937FBD56BD4861A2619916E378AF371B26302978C98D29B2E0D5687FDA5C0042865B31C18CED3D93E6955F868BB2B1DA780FEFF91FCF8C2FF368A19B053A4924CB118D4446B061C57AF4DA86100 -MD = F833469C7BA21E0FA21E8B3D2C476E3CB611D1E1E5E656E96D4F995C - -Len = 1627 -Msg = B5508E04114A8AD105281386E03A926D5C1D30675AE728200DD66183ABC7CBADA4B04461905FB650ABE443C35A9CB1F02036DADBBE4AB835546DE4B073A169EABF7B65BB8A7A189469C5FEAFBA84EB212AC4032E2C0E98B440FFE7AB41315F6925C019080AEE16FE28797637790A9427723EEB09E9501FA7EF18D332BDD27E9A211501AF5D4EB85A08B29004031DE3A819FAA9F1FF60351BB24DB87A0C9148DA4F3D36A59F3A1234B0065169B7E04341FED4FA38A06DD11B2F48C5C717DF6412D7CB8C86306C1432A70C1300 -MD = 71FC4D7463D46AB654372B6899DD4FEA5174DC87B190919CF97BC4CE - -Len = 1628 -Msg = 460E5926CF79EAB6CDB5EBD255A787EC57EC030675F65C2CA6000B39C36B6CA62AADD1A9B6DDA1FF864C57D939A5AD53F463A4AB0E2839C9687B3695A2A78C9FF44A4A1822FD0CABA41196EE879F766FE11B7DC5E6E65BFAD3D3C3ED215C2D501771C16C483E57CB0D33FC1F8ED374A99E68AF15A412F85852ECACFB8F852A72EE683B9BD417F79AA217F6DD7A94A7BA87336A0588831E7A4028AA6418711B9E666573411DB81C2B3CA5B0243EB5DA495FEB870E0314D23AE7A667CBD3D6B5BC7CDE2574D09FB4FDA4581EF0 -MD = 58494F8F48739DD83AA05661F2B1407D68D2F66405341EAB689C1F01 - -Len = 1629 -Msg = 13F4F5E8D19555A5E0636AEACF49EDB517612FC8CFAF02777FA81381D9F17FB9EBD3CD7B68C5BFE27C8FCBB83C28C4E9708EE72A5170CED985E4B27A68914D0625B03F9641F4E610B53B791CB9362AF625F1391840D0A375EF19FD8D038F4F7BCDF4A203E4B4CB3657C7254D183E3D88C171AFB511D043671E58CAC1ADBF03AF311C19AFEF2EDEEA14D53FD4DC7118506B0F6300CA176B2F891278894894AFE678A379DB28FA5E4DCCFB5E6A43D0A67797EC976FB6EFB312B1E8ADF73DEB9EA58BD2C153EF7CD20A8C48BD78 -MD = 830F015012DAA225DC6C31B2558439B4F2A0A10E15A645B354E6CA93 - -Len = 1630 -Msg = F8053BBDDEFEE95D05436D656F5CA1B71672EAE38D2E77071A086E1481D32EEA88336D78B6E75E7534B86168D317870B322C7733948FDE6EDD6A043B84EC6DD5D98FCDA0D5D2724E4A7CF497DD360ABBBEE936673953789BC7224F0585B655D20FC21E2064355A419194204C22C9E32B58714C62535CE5266EFBC885A8058A870AF26859A2BC09691B4B1701E267C92FFAE916792BEBC5EB31D1C3A89211DB21472CB045177E747496F0DE3BA5A7ADEC1905162593C9DF1E0AB50B00B2D3E85C9AB75EC875731B13474C9298 -MD = D9E6A3DD66B3A94CB24688279C5C6E6E557199C2B029E4E69CF388BA - -Len = 1631 -Msg = 20F91E3E6BB637C2BA5B562FEFB1AADBEA72F6DDE874469E7453B74D5EC85E59F390CD317D5ABCA6EA15CA5B307F8517EF25328A2316E9CE32D9DB2609178F8B8DE2154F5EC37BAE069FA9A4BBAECEAD354D4BA3387F043085FAA6E5DB3BE7D0A257E1F46B8AE899BCB6932448B554265E8CCF7251710BAF133A4083F17279759E4AA27CCD1274B1B299DBAF19257C2DF5FD2F2060280D55F1B11B7EC362F894A459AA81D0AF2B3C43BD6D3767CBB6DB53B1DC54D4545638FC7977A7D81CCD1485B11F8D7309E200AD569474 -MD = 09E3144E81F9913117482B078A27968DF3C548D1420C9528CF347BFD - -Len = 1632 -Msg = 4499EFFFAC4BCEA52747EFD1E4F20B73E48758BE915C88A1FFE5299B0B005837A46B2F20A9CB3C6E64A9E3C564A27C0F1C6AD1960373036EC5BFE1A8FC6A435C2185ED0F114C50E8B3E4C7ED96B06A036819C9463E864A58D6286F785E32A804443A56AF0B4DF6ABC57ED5C2B185DDEE8489EA080DEEEE66AA33C2E6DAB36251C402682B6824821F998C32163164298E1FAFD31BABBCFFB594C91888C6219079D907FDB438ED89529D6D96212FD55ABE20399DBEFD342248507436931CDEAD496EB6E4A80358ACC78647D043 -MD = E9675FAAC37C93AA61FF9730679A3D1209ADBAD4652582DFF5B1BAAF - -Len = 1633 -Msg = CCBDCDBE422FEA72623873EBCA042A2F27EFEF40EF34289984B308672F89D8B9E0B9C3BEAE4972A892A4597D2970D402DFBE3429B6FB92D8B5556ACDD674EA060928F7A9A66A2613CB00AF3E464894EE32EAB35E9DB227747838B896AF8A9DB1151BB470E1535092944982BEF528BDBD00F444D02A220255898EE8940191C15476E167DCAE3365ACC671CA62BAE9FA5B6AA03BDD55D2E8F9BF76857A81658D01992E08A2F6418D2335BECE9E97D6906BC3C8D6F29D9C5749F4A57910BFAD25EB298C056DB574BF585C82EDCC80 -MD = 467DAE506F64726EBC41917C469DF2B722F526418170232CB6406FE8 - -Len = 1634 -Msg = 1ADEF1C21E7469C34E78EA4D2D257FFE5622D172B2DA0E93EC6FEC7FC825158F7C7C2AD1E56D4309FE8461BDA8E06C5003A912BDECD3AE2824077F89845D2BC0D83199567CAC50D05F86B9FD42901C93952C85405A22CDBB584303A613356B53B739828865243D6AA729C4D9C10AD0DFE8B748BC2EF4303DEA69EAF396D6720E1F11995D2703CDE2AF6CD6E8AF7DA17067A3E38F6B231D199D32CE6AA71A0BEA2B815AE3F68B0BBE42979F46FC50EDC801A2C5CE8DBDAD0DE61E92BC8F8A8CDEF30F043BCE6F55D49065188780 -MD = EC4CF71D6B486F4BE2D4F90DD297702B1E6B8E998245C40CE9D06CAA - -Len = 1635 -Msg = F15F5FD8BE90D7DEDD1314869BD2039DC2F5908B908CF4741728AA8EE6F24D982658DD54772D6FB451CC4A2463EB47E06CC1D0D831F4890C68654ED11FF62932B5889729B861A629980AA86C9F8615DC9EA1502BC3AF35B918F0863E5022DA60AC88490D0C64929517B7EBD0CD8CF9FB82517E12C27F06D5A8250CDA267E53CE4CF7D3B26169197B38DFA2589C29E3005C2556F3E50E26CD4DD809DB873303A3DD2141008E851B3D4B7562E14BBEFE2A97D47EF29341324E551A3C13E08147D40FB6178BD98DB0BA5CA4640F80 -MD = 7D53E18E9118813FE3989D560D1ECF0600F3F2E2C28D73598264F1E5 - -Len = 1636 -Msg = 0C34D0BBBD2657D0C028A030BBD626F2E4427119D2281E6E75B0BD087C2E7FF0947C8AD5B17E151EB991A0D5C9000EB8454417850BCC869D87DB0BC38C04ACFD1B94773810681888B83EF92ED5E9EE671618DFE67A9CA62E5F6B840195FED233DF5E2CF2026CC89D7997AA3C870C061AA877DE2DA503503BA703C3658FB1B3A2B6C886C4855DDB6C779A3D9721340D41D556B7B5F91BF96F04B8BCC37DE2E0B666BE14F7E931DA6BA91B7DFBCD2E9E16CBDBC660A9A569A4360ECEC700873C8501AEF6C260C564AFAFFFB568D0 -MD = DDEB785A5A2F96C5CA77F4614B96864E4DA125E2A338173808FA2794 - -Len = 1637 -Msg = EE248972CCC5FBF6536657A10F190E2DF0266662AC50680581ED4D5E3B7D074E950E47588CA113B307111A599D797E08814B4A166633607CA024D296A0733DABFEBBFAF43A7A98B16836DD0983C31B0F8B0335A50BA8C5EBD5CEC7D3562CB8851BEAF6677A9ECB951EBA7CD2D7433E6FA77469AC2ECAC93D88F42B9019D41E8F588BC6544512E5CA8BDD5E4DDD2428C73255A7582C4BE5788057067B530C2539F5B01671C146D28A99C1264C69B76A079B2FB3D3FE7E6ACF0679E7B7DA1ED7484A52CED5D104CE4224EB13F630 -MD = 2040C06DFE087005D61E52F3CF76635748A326CBBD5507ADE254D658 - -Len = 1638 -Msg = E6391A7E201B049AAB723F633CBB384ABC9C7AEA14BDFB1466E06BA8060F066848A3CD53325F07A638D074B6CCE4837460E228F9978F5951563462BB40D8669831A75E815DDAD72089B98495C2C853E80BBD2EB59FC96EDAA227844AD127045AF51D72527139A935618175B98885E4FB71BB3480CCEA51F7E75CAA344CAE25C6194EF3BC77DE186369C97DB534D70C606D9E1013EEE2AF02413D9101FC4A61E3350E81A3528DF1E746FF5ECDB27DCFF89621D240ACFC80F074D7F83824E5842DC1F4ECFE74397E4C91AEF9F520 -MD = 93BE8F76DC6C49E11F036A84FCF643AF9D3DD31747A51A2BEAFC090C - -Len = 1639 -Msg = 0BA293C65A0223662A04FF90E97F152B2BB999E3C46966030918CA341D6701E4C7A19AAED4ADA69CAF9C45BFB2CA35E813A7BC92C10DAB5C68F64C5B97923D5402BEBAEBC962C77E188A283672210FFBB62A92157A09AACFCAE39B8DE00BF70376EF3F504A5ABB488242BDF32E946C6BBE590472E4A9C05993BCD9F1DC6E52431FEE6F20AA9CBF952548482CBAD43043E8725CCDAB58D5F37C5307DF9B57C199C71613AA3C4CEF6C7D13677226B213E78A8E404607E5BC592E0E88DD48650C8CB2F6DE18B71DA2CDA994C79948 -MD = 70581C9A565DD99EC2B0847F9E5E52D334F029AF3FAF4347DDD78771 - -Len = 1640 -Msg = EECBB8FDFA4DA62170FD06727F697D81F83F601FF61E478105D3CB7502F2C89BF3E8F56EDD469D049807A38882A7EEFBC85FC9A950952E9FA84B8AFEBD3CE782D4DA598002827B1EB98882EA1F0A8F7AA9CE013A6E9BC462FB66C8D4A18DA21401E1B93356EB12F3725B6DB1684F2300A98B9A119E5D27FF704AFFB618E12708E77E6E5F34139A5A41131FD1D6336C272A8FC37080F041C71341BEE6AB550CB4A20A6DDB6A8E0299F2B14BC730C54B8B1C1C487B494BDCCFD3A53535AB2F231590BF2C4062FD2AD58F906A2D0D -MD = CDB500740812A0D70C68D0097DCC7ACA86EC066C89D36642879A74A5 - -Len = 1641 -Msg = 9D8A483570AB16908C17E63363E8B292F8EF6D5B7043BB17EDB7D0B9AE9393A2D13FAFD0909E50E437C3934C18ED11200301C61196C2340BD70D6891A74CE8C2A04F31BF653E9610C5A93E3203A6B188F36F3D753393FADAE2A01A0D4F5E51BEC7AC939194A15C707CEA4BA48ED4D3A85F333A69F33E63E7EC7156AEA49669DE0BB1E75B5CCA3A759CB039DB7A977A5C1F6450FE069D595F30E965B7BBF6184CCD3E2E4B44FEA466C517A1EE1E5B40AC7068EB0E62CF13AFED1AB13DE7F679BD19840770B3070FE7FBD453BE3A80 -MD = 0F02DDEDEA888FDF0105235A910076CF71990CE21110A4A5C03DD306 - -Len = 1642 -Msg = 37B1027E4AD24931103547B93B8A36526E738388503D72B153CE7D867A3094B92CD0A6E35A35FAB85BBD2BD211153CC7D623EE0B756C4F6169A36289775F1F42257FD3E799B63004C5799E32B46973FBDDDC46E5E9E6049043E03E0CFD0B7F51F6C5A75B31E4A0F47A65EDEFFD37A830A742F7AC411033A12333BBA0BC3F0757A12DC2B38A5AC54505D8E2F7CFC4C04ECFCA80745C22F40F0A13EECD55A60E2DB5C292AB38E8626CBFF2A66C76BEA11CE36B7726F9E2F7EF9779EDB7282A883FECD8093E4A5523185365C8877980 -MD = 99E3C3B542930A55FA83C013AD2504F28F5CF54D4DEF0EA7ED1437E2 - -Len = 1643 -Msg = CCD746C21AEE13D421F7B853F2E57D907150D9B317E55231B06FA13231A42B8661C0036D4C03727F48AD32C189F68DB5994611ACED2FF28FA1DDCECCB714C84B5D11621F0A7B59676922FE06914633FE0DAE5A72C3586D194C3971A5CA0B22FB1EDD7DB42C8B992949E642C481E1375B19EA92FF7EC3E7511BBA02A0D4CD66A3A57E854533AC3B46C8EBD47FEDBAA837618A9262FB03BF1B5AB140DC5F46F98E4A58B252EDF82AAD7E01FD0A89AB69244B4F7BBA5EC2CAA096ADCC674A5F0B3E55D8B4CD22F19B7100E034FE95C0 -MD = F6FABD85D0293565B69D2568E8EB2A6BA89627CF8B102D64F1F74E54 - -Len = 1644 -Msg = EE5AB1EB81BD8A647E1225744B90BFA8A998FF3018202AB4DD9C4F2891FCDA96AE786FF6D6530B0723AC3C7E943762996A7DBDA33DFCB8B2CD33F53150A8FF6BAA16E0E0CF8122C4F4B6BBCF4A5DCC5BC47F1BF41A1799CDE31C9D814444E55892E513DC9AD6E885AA305B95C087494513E2D1CB65D5AD9D1932FD53AEDE0974C4190535730C4C58920735E175CF4BE06BA5B1942F535B8898F6DC211593A3AED8C7AE1C32FBEAAA3C7FB171C46B7753679567BDB829E6EC769FB0A1C2E9F88CE55882A6E52AA2763EFF719D9620 -MD = 97C4F464216EEEC35F31DBEF7E1FE2987AB8CE461AF531A4F8F1FA1F - -Len = 1645 -Msg = B4E1CD73549230E9CA7AD60D99CF67C757B5A6C1105A39BBB4B92F3F11C7F1EAFDFAD71AD607BE795A60868C209711437A9D0B10F2FA3F0AEF49625197BA5014694C273740D76031BE3CEB6D2D959A7EA679B6DD2810AC4894780724E4714271E5C2957D20E55C384221791D1804BE9FCD656907342247EA85EB4D7982AF5B9AC6840FD60751DF25F5FA29B143A91FCB486013071619C8095548521665EA1098E7B2394B1161AEE4E1CB0438D080B95B4EA303E3FE8AA60C2E6FA5395E980E8B03FDCCA41D1C435A5C476C911840 -MD = 17DB4713161832FDD9194AD38AB016820B7710D143F84D17D46605CC - -Len = 1646 -Msg = 034D64592B99303F21D91AC35FF3B9A0A4A93EB886C4BB487B566170DE393F1E5CA82B704A6C029343B8BBCD674ECAEE1AEED2A6E21ADD8BF5219A37F8E1349C7A3F76839A3F39ADEE5CF4B9E91FCB68622ED5DCEF01F546C9B99A48456CA3FDBCC5013E47A4C345E54EA0FCC52FA14445B18F956B2C3A3B6C35FD9E72A60AA81D5E7E1CA0A54AC9B5F45B1A9E7ABC4D78D2452691EFD6ED268873CC94CEA342332832686E70703F88EFA1764221CD8884391607F8ED1FD5138ABF28D0FAF5904989C9D54D4BBCCA9C77374ED2EC -MD = D58F25BB1D8DD9F2990D16A2896C6C110751582E45E927CF900A31B7 - -Len = 1647 -Msg = A290D488AB0626BD0BBD35BE8933D6063AA4F878A966E33B73D42E40AF66D0B242E3A3BBF42F7F00DC933AA19DB48508A62349A1142F9A1AF638A8A6A459F096D83A03CF5E7BE4545EAA22819AA816010D35C6AE5AD5412FB14B526331A9445BD374DB0272303C71E92924A2CDDBD8186BBD193C2C0B83C08E041B393CA0A8A25DAE892F112634C43FF581D0510BEBEEDE0E95FA8A8F0E25302DBF77DD22CF1935DD09D2156015825CDF95175EDE8816305459A901072E4FD2E2BE191D5FE13BDDE04C535C6984BD9EBE2DCA7B12 -MD = EE0ACEDC179342281CD6AE8A338D97E95FD47601DF1016C8112E5DFA - -Len = 1648 -Msg = E64F3E4ACE5C8418D65FEC2BC5D2A303DD458034736E3B0DF719098BE7A206DEAF52D6BA82316CAF330EF852375188CDE2B39CC94AA449578A7E2A8E3F5A9D68E816B8D16889FBC0EBF0939D04F63033AE9AE2BDAB73B88C26D6BD25EE460EE1EF58FB0AFA92CC539F8C76D3D097E7A6A63EBB9B5887EDF3CF076028C5BBD5B9DB3211371AD3FE121D4E9BF44229F4E1ECF5A0F9F0EBA4D5CEB72878AB22C3F0EB5A625323AC66F7061F4A81FAC834471E0C59553F108475FE290D43E6A055AE3EE46FB67422F814A68C4BE3E8C9 -MD = 66F205D7147991A940AFFB7401B692275338519A97608C584362FFEE - -Len = 1649 -Msg = 88D11A550DA2A6C99D1A1E1ED5FC7D8F4CF3593658F13D30AD65CF6BF862611B87AFE11F22D46529E8BE7CC9D5834DFC3812D8F74AB895465C5273D7204C7D2D9A015BDC343AAC4432B8E97A9BD60FC496EE3C1AD18E0CBFF4745EBF9A8E5E917C4CFE68958A1DFF1B5E68FEFD553C72B5F3725054E44E38F94112CEEBA3128EB6049EBB77CD67014A9D316D218AF547B695866E7E058611E8237B185783729690FF9A1D97E99AF0EA84683BCAFB12496BCA91E3AD271EE225F8971AE8CEBACFDB18B8CA7EB67DBFD2A14684CD7580 -MD = 0C113D336CACEC913047B837B2AD1B72D28D7DE4EEF26BA236DA5C40 - -Len = 1650 -Msg = 8770ADC96669E667525D133761D4E914C2A4CB5ADF81DCC6129A88A496F5231FA960101F76F1B43036F76084B773E76E7566F489550FBCB0919013ABE142BEF449553051D2249DEA6C8ECA9ABEFBBD7A167D3C5641393B02848D3269DB8C13519B11087D6128BA9296B63B639FCD6132E5372A93C9E30AFBAC564526098A6DCA0ACDE2C659EFD9250D187864F82505B291683B83A686709D792BD785B8879DB4658381E84BB4855CF7D78A16B7BFDBDEAF352352FD34D1C204A8AD1C558E128B0788D7D27F6F508E7DFF2F46028A00 -MD = 5CC2EE95BCEA4CC08253545BBF27B5F43D7AAD534C25B7FF2E5BB75F - -Len = 1651 -Msg = C355A7E5BBC13F1F080B810FEA90CE4C034AA1E7C3C6B209FB87399FCBA4A344706EEDD97AF881610C64FFBF44AD0BF321CA5249CA6EA09EE34FC513DEB34D5B98C6ED7340ED0D292D967C60856FADBAE4318FA427B879FD6852CF5A871F9D6428AC10CB048F6737DE6847F2AAAA998021A26C0F85760E9AF6CC8A5428AA308FBED9BEF937BE4BEB24A9DAF6A4F8374991D6C7961D1EEC6FE123713F42D78713734ED8792A278368119C83C9999BF952B1B1F7FADBC8F29C6237F5246F17948902147E6659260D2120DDADE9266220 -MD = 742613C643114A1FCC46701DC143867BAA2691D100749FAF81E62A16 - -Len = 1652 -Msg = 0EB9AC23DF20C16D5184AD7252974B6A436D0F3F63696E5C3BDF6CB0D413AE9A6AD4873ADFC7449715FDDA2FF70691DF23FE97A5B4B26865B4079420EFE15BC91D49EDE69824460D9C088BFBFFA099BCA0069BAA011B5D6A156DAB76EEA11FCA667511308A797798FD06722DBE91AD244C1783886303E1C97B9341EF1E15F5A0CF776E047EC051A5AC226DE0080E81AA35D14910036D920F62DEF9A28E66E0120CBC15A6DFEAA937CCE1529DB8847A4400CF89D5BD9D46AEA1E82A5DB785848D8CF5D7B85463256E56B67F3DB31B00 -MD = 83F22ADA014B55224113422C241D6A464E453FB8DFB876426F88C9F1 - -Len = 1653 -Msg = 2123F23DB3299E66FF044A90F8668E0C935758B51E11A690F1F6B9A95335FD1A2A2F51B45747C2565CEA770C06E2C95A879B61399B9B86A0D44C557B9889A367416EFB6F3CB2F36D2FEEB487F93B33CF1587DE397CE5EBAA29DD808F503152562CF20F6B5E1CCB111A7E79831B2071AD69D69E8623AB3E7CC9445D30DA19521CCC7352F6FDC489427599A86A963DAFFF24483F256FAEC750C931AD732E8642355F73D901D4819CB922B92CB05D62C2899CCDB557EC15326B4B135E2957A548FE861F70052844AEC9CBFF7F57D64DA8 -MD = 61E51113EB607D0A69AC47B95382167FD744BC2AF0660A359E0183FD - -Len = 1654 -Msg = 0AD619AC99A7F310B9D30C4AFE98149E59B6155B94C064CF2B9D2129F83A062499CDAB4BBB94312687FAC290410414064C5951973FB6E8ABD75975CA110B9885E2CFF19B89A33AB4C0BE0A7762F001A7732AF2CC5791C07730757524EF7BA7D5BC40AAA820E6DA3F16A5975CB3F68AE52E074433FDBFD831A5A625DB6DD7F3D2E08F51103F499D9457B95E28C6E003A0C29F39D0E5CDBA736E78E5F38643BCB5908779D6BCC711D2AEC62B9A7B24876A30D9D9BA65D032FAD16DD75229DD9DB6E87309AA897491D8AE19BF84CE0380 -MD = 4FEAFEEEB1AB4F8C63F2A9E8FFA3F1E0A0E18C0564172FDF14D0BDD0 - -Len = 1655 -Msg = DD5ACA2737DB9BFED4999C08898B23D933AC9C173387B1FDEF93BAF1224FA1F39BB22E3B2EA9C983B18ECEE377081BC56570B60733D686CDB0CB94642C91E34331E372E7FCC400A22DBE4A984871462184CC3276EAB7423616BFB827CBA65C5E7DF4E0A1E9F5139C2E87892C35C9A59A62D6E204264A0429FC33CE476716B4E0F059543E034A0B7E03A1EB15D4C497AB79D5C6B4A9B3AF26DDCF30CD5D7E398767E871DC823CFDD694C00C2F6256E28493777B09C51E2A2E285AA9C6FCBC80493C0A3F46FB3B13FD280C29967268A2 -MD = 25D5FE5A068991E98BB95B6AD7E390C5C75B9E8B1721084F9222911B - -Len = 1656 -Msg = D2CB2D733033F9E91395312808383CC4F0CA974E87EC68400D52E96B3FA6984AC58D9AD0938DDE5A973008D818C49607D9DE2284E7618F1B8AED8372FBD52ED54557AF4220FAC09DFA8443011699B97D743F8F2B1AEF3537EBB45DCC9E13DFB438428EE190A4EFDB3CAEB7F3933117BF63ABDC7E57BEB4171C7E1AD260AB0587806C4D137B6316B50ABC9CCE0DFF3ACADA47BBB86BE777E617BBE578FF4519844DB360E0A96C6701290E76BB95D26F0F804C8A4F2717EAC4E7DE9F2CFF3BBC55A17E776C0D02856032A6CD10AD2838 -MD = 909FB29277AB2C4CE4279C485D4FBA7E18FF1A88C66DAF7ACF630310 - -Len = 1657 -Msg = 061446729772A1A26F7F9A87702EABC582071872B6AB1373A1B88EBB259F0EFDEB159E12792588061C011602F6C42B8392E15AFC582388AC0903628E64C1DBE4F2B86109683F28EDC22C12CBE5541683715D039FEFC23E91629E9E4A330C6D0A68276DC60FD72C6AB20B71B79D2888159F49D327693CB48B61DFF2DE0E74D8A452320F9A9835D2C28613D555346BBD78F5320896E87AE92BC3B00A1B1BE403022D81258AFE07437BE13D339FC4481E96856D5CB49C547776C9CA467D05C38B8CBCFD71C0D899645705584F6ADDCCF000 -MD = CBB3D8BDD0BA3BA15179F04A8FDE1C09021969271C4CC5D4FA01FC9A - -Len = 1658 -Msg = E2A4C02A8657C5D41445E9FA687E6F613278D5A8E9B6EBD5F76D817F1F5CCAC6C72278A70B96FAFDFE30ED00C27F20804FDCEF3882E3E47E3A36DA1708BD8059998BC367A1362F543CA8B9D224C6EE1C86E274B7B20D2CB64D6DA4ED53C751F7B561238AFB974D96ABC0878A386A7E28A9DFCE3C818E1B124ECA55BE07139CCF6C6020A4E4596A2EFCC7B84D271662FBC72074A16AE5EE37AAE4E5CBF19088A3C6C54A3D573B41889CE3D04459A0C466F0DD8E5CB3FD9C18211670CEF5F11DD406CFB922F14B7DB2F1F4B5C8C3D97240 -MD = 50DFAB63BCBE8028E7975DE70C9D1C924784B8D2DC4F4F70853E448A - -Len = 1659 -Msg = A2871DF706DD5662C5E6ABBA84790DCC435B5D2EFAE1650DF11245EAAD20096CB90A216A0F36BBC3DA6497087B02C81270B7698E97C6047B5108DE235C97EBD599DB942844AA6B3E0737BFA5FC8EA09022F310378A8E8816E155E535F0C0E4D2ABCCDE37916D9527680860DB6745C2B1B245BBCBED0C2561656DEAAE921B8C82872E667936F49A6105FBEAB4AD46A5BC7BE0BE0303EE92EA250BBFCDC3A6A23D514C0D9CF8DEB91FCDD421CB6A4EA988B4F9E6DCD2566B6A4702E9CFC437AF87EE22A20E558B306A97E11ED0AF891300 -MD = 73820ABE3BA845B192ED0DF50B1F5D0F02A34EBDD94838ABE4142858 - -Len = 1660 -Msg = D7F71FB30197E861BE59A77679FA5CD15239843842F4473EA9088FD6630A35949863D53DAD1E74093237CC822933387E7EE37A6D6190B72C52A08CF250954582357BE1E81317A6B65B247F21E0AD32BCFF600C5D671F8629C4946EE505C8CDEE4B8D6A7217556193538CF965FE9CAC3D44BC52898894CAFEAFD11F7ECCDDBFF518D6279D5DFC66C2D09D7DD23B0D3C3245167BD44C1089A1544DDB9EC1177290A2180B7606EEA44663D1589F1E9207B37B74DFB97D17F4D137B0719A09A6EF0C39F6CC0741D3A672005C707A09732120 -MD = 8CEE8EAD2106C419A12E75E993D4FCB74DFBBCA0465D1D0FD0591E70 - -Len = 1661 -Msg = FE7DC1A26BF9B564A32930CCC3E3F143EEC2E2C92A63D31025114D0C335949CFFEEE336489D1A830731343974B9DD1E7DD6C83659B238D7F2EF4C91DD38C382BF03D32A0C74E704CF382A8711AC31149F76A1EA5FCD0B89B064562CE0C6BC46B34861B21CAD36CFF2AD07CD249FC2327785191B4BA0CC61DF7428298F852C250324CFBAB818294C24C534097FCC5F9403266955B65C47123E3E0D8CBF6E8478A231523F9913F3F6C6BBC8050D116400CDBE68F431860DF7322CC813B48DB3E8F52D35409D1E95882BA54C5857DB67A50 -MD = A2CA2BF35FF3783E6F58B0E7BDF55312F55B285666B689E9A75BD6A7 - -Len = 1662 -Msg = 872B77FB2DFF6AB011C7462CDC3B4892AFEFE4F6A786952DE02E49FE0C27FF89D81986E36F173D68B25D61F8D480BD3D06607545E618284EE0D4C2114BF7B00497D41BA41374709BE4FBF06A3F883701799B5FCC7382244C566F91C7398B13C06CAA5EB79F6914FD194CD18023D431F4A482AFF991B130ACDF7425009DE58A2049E577A6B19C68F14AE6AAA18492DD85FD6BAA91ECB346616819BD50B929298A7C0240812860C9ACABEBA7DDC13460F36C3ED6F068B200D0A3B8AF51ACBD07DC4CAF4EDCCFEC52A1D79F0465E12E74F0 -MD = AEA1E4FDD61271410004B6B35ED07341FE8E21EFE49B1520D1A54334 - -Len = 1663 -Msg = A73BFE2AE3EC4855C30923FFD31C8258B4B34C739C869A97A13CA07930E60BE81A0F7893741CF2F2DCDC9272559CE61A07F8F750A0BEB50A604BC22A35046B46AC78377F82707FD436961291FB862F9BEAE56B4569009C486FC73B3FD36842A3074B88E8C6B5F8815703DEAAD29F1915213EF61AE55833F52BBF8DE07EEED341AC93F3622FFC24FF713D3B5FDEA439CCFDC8B41F7449238717249998E651E3E9C9AF2F0D56B9EFE2E2AE3E3B67CC8E70E4CDFF3BC301B5C8BF92089A2BBB925D0308543C8BAFF4782E9A415C17367E0C -MD = 8D0A69B4466B56E05CA3AD75767E086BDD9A50AFB53BD4DD29867573 - -Len = 1664 -Msg = F2998955613DD414CC111DF5CE30A995BB792E260B0E37A5B1D942FE90171A4AC2F66D4928D7AD377F4D0554CBF4C523D21F6E5F379D6F4B028CDCB9B1758D3B39663242FF3CB6EDE6A36A6F05DB3BC41E0D861B384B6DEC58BB096D0A422FD542DF175E1BE1571FB52AE66F2D86A2F6824A8CFAACBAC4A7492AD0433EEB15454AF8F312B3B2A577750E3EFBD370E8A8CAC1582581971FBA3BA4BD0D76E718DACF8433D33A59D287F8CC92234E7A271041B526E389EFB0E40B6A18B3AAF658E82ED1C78631FD23B4C3EB27C3FAEC8685 -MD = ED535EC075C983A08F7D7AD5714EBC846F25E8661492B2B31978EDF2 - -Len = 1665 -Msg = C3A6C9A38DE76C9A716E9861AC10D549F0C5EB678DC9FB2919018B5DC88E365F9F3C03DF1FD9DAC46728ECE38E97465A418F599EA0674680EE6D3BE167E1C6D7E0750228AD7FD8C7EA070AB9DD73D6138DC70AC4D9907235DDA108E379E81F7E00B1C9E2B7F16FE8DBA014853032A619166BDC2D488B3AE8615CCAB2C2A9E1A2D5A38753D9B2422CD91599F2D5D87F89D6449491EC7418F4DD39C53DCD9F1EF9F3448E75E8A73C33C32EBDC3A613BB5E5490540B1C74E48CF9AEE17BC3AC2BE50F80CDD0C69649336E5545E612DB2AA400 -MD = 2AC766244DCCCC2D668DD4F1E604C90B3A4C5FFC9CB5CEB1C0B2C9AC - -Len = 1666 -Msg = 0CE9C0A8B363C6504DD16AF53CA1028AEE93444E0A82A1573DDEAF6B41B7450CCD5120A72621983ECABE5BABB8CF0F1D3CC9E67AD8309D71B0355C3F9D667D1412982A0379EC376DB3B8D44D01AB58F7A97552DB4B1A178FB3FA15E33DEDBA345D7BB475731EA53F20E8D6CA0895B33117446094823E1ACD7A5A5632AF20ECBF94ED42B62169867FA6B4E9D512B9A4B443B2AA6A5752EE68C63CB42E5FB2C022C60DDBDAFA25E8A2493CDE12586D17089E9AC4A9E9CCF0E7FAAA5252049CB1ABE8DADC9EA9F552DA996B780E7B90144040 -MD = 29C9E046B055B9887539DDB56A1B198A400248785090084C299C6CD3 - -Len = 1667 -Msg = 566EA91163B197DD99311CDA8083A3FEF200E9B5C84BE85A9F60D0AA73502EAD446FF757E4B37C026493573BBFE54F547FF6124E8F4C9478F68BE242664886695332185AADF0D68F38FCAC08AF2AE40F0AB98BDE182D4D597E6F1371B90D0FC4FB1EFC48804F528A2C6C4EBE47BE3FC4B74F0B795C422B4EA4211440299953714C51784D93329985537903ADCF14262514E2B576F916E2463712AE0B6DFC041B411BEC16FE050AE3018A28C6211AE20D65E053C5A68DB5AE09F0B5D2C22FFB9EC83D9BF7EBC54E66F0A01A2299416123A0 -MD = F0D6A5AB7971F7663C0DC4878EF37154DBC725802FD3AF6F9A135AEA - -Len = 1668 -Msg = BC89FD708B4E589FDC763193633E4D86D65857FFD3F69BD8972DAE8B8B029C8CABDAEDD159B0D0EEEDBD8302C279A5EF5C379F1DE5CC7D8C0021221E04823E28BDCF6535940B0DB0E87F39731B8CC48B95608544ABD5E01E1E3BD4D24DCF20863D7EDC003DCD0FD458306D3C4CE67E93DC4EA2EF2B6F5A1EE908CA23E32984ED946E9EA2588E33776D926024FFC5FFF715BF87E424D05618D3A914C77CA954B8A80BC50624CCB8EA30E226DFB50BBB956F147AEF1BF0DFDA43A6114E5094E42E6B6F39B00BCBFBF2C600F2629C3FB66320 -MD = C1A0023FF4BF77E5E61A2267EB6A012034181F48BFEAC9C6F271AD80 - -Len = 1669 -Msg = B594C19EA19FBC4A9C7DD9DF4993CC7171ADD9B0E872BC211F60EB89D313CB5B5FBBDEB5D535AD20397550CA6534B859BA881D0713DEE6774471F57ADA476A511AE98414F07482F49F783F069D7DC5AAF42EFCCAE350A7320A4703254687258CB0B056558E2C6E31A2B336D1C36D770043DB799DA99CA06C38B93DB93F776891F2BF2BEFA70BF87C0E4C1383FFF4444DF05849D9F04699BDA9A95859BA5D038D42AD0EC4CE1AF15499230FBE9D12CC0998316266FB02ACEF9BC4FDFFC84E5A17FB2A605EE8F0239383A2DBB1E1A4087488 -MD = F2E6340A80A3CB0A8182FE6F1D61ACCFDDD483F6FB428C5412068246 - -Len = 1670 -Msg = 32366020205740D26523E6A91E2ADE18D6D7018535C132F17EF6AEDF034BD8D812739188436F1AC21E429C0798FB0435975D5555E34DC5F1B412647571D32B2180E53F45DD83BA97524DD38AFA67A6FD54E93BD33746D80E70B46D5045F2403CDF329DE154099DC721F6288191B9583793F0AF20774C730DDEF605A5B4C36A93B726D1CCBF9A2175E425A866326BE8BC1C3600F7C95200BC28F498CFD645757D8D90A2CDA7E6E15307F61075B78EB82016C0ED2DCB4F6903F71CDBEAA2DD273C4880B6EBCD601F1813478269D05D370D54 -MD = 92136185FBB4EA9DD4377F6337A10F4C06F0569F5CDAE7FD28B3ACAB - -Len = 1671 -Msg = EA87C7C79D9C993C4EC01DCF55AD7CC433F8BC8101C9584455939A975EEAB6DC9C7DB7A00ED54CE15B473A26BA861C0E53394D762E2E72AC6A3930AB4E90E4D443C1B3E1CE337DEF21BCFBDA38D863D7330B33425A2251BA3D3A4935F5C1B62A2FA08F40983748131160F11853F05C1B65075FE224BC6289C31A7B93ED78C3C2428F14ED79CD0A2F7164979757251BCCC4A255F1E50DB5DB171CC05BAC9F893E9E86885392C66FC183232F7A3633F1D701575261B702769E161B8DA670D07B97DF1D9B36D24A28EBBEF639408789CDC39C -MD = 62A97F2AD17CBA347618A96F8084D3F2087409A7A39E1B8B055A235A - -Len = 1672 -Msg = 447797E2899B72A356BA55BF4DF3ACCA6CDB1041EB477BD1834A9F9ACBC340A294D729F2F97DF3A610BE0FF15EDB9C6D5DB41644B9874360140FC64F52AA03F0286C8A640670067A84E017926A70438DB1BB361DEFEE7317021425F8821DEF26D1EFD77FC853B818545D055ADC9284796E583C76E6FE74C9AC2587AA46AA8F8804F2FEB5836CC4B3ABABAB8429A5783E17D5999F32242EB59EF30CD7ADABC16D72DBDB097623047C98989F88D14EAF02A7212BE16EC2D07981AAA99949DDF89ECD90333A77BC4E1988A82ABF7C7CAF3291 -MD = 87F15CC2AEC24168D8BBAF188825F3BB0178CFB5C5899F2FD042CE89 - -Len = 1673 -Msg = 9ABA7C331CFD36242CABC3C6BA887C8CE4675F51FDCFCF49E706F6BC3C4215CE421D15B304F60CA6D19BBF8535D39F300BB415940FA23D8C788BA07970E0F1AA494AD3A6D988873E84B2E2E2A21D50751592C5FAF8EB1B30012B73B929C2734DF234F4FD7E0C2978B713A2B757812FF2D151D3C1C627E121F293F8DEA2DF2F9EE9A66E2859F635B615651736FACE4AC7E58D9B9A05A652FC0E6A9121B8D478FB04B5809E1994B3E3BC7E6A82D2A450071589AB46C6F5264838E425082B7D8BE92E49AA3632A2A54CDBB01360534080312600 -MD = 0301B49BE7998FD1F651A153BB5CD49F7B1DF8ABD6CDDDBAFDD43FC8 - -Len = 1674 -Msg = 477BBAAF6240F4FBF19012F55396AC5E1C9C21AC4710866E58811E4A721D1E1BA2F13AB04EBAF2DF5A0F29C0213F8C7D3CFE34CBDE94A17D2ED0322A298F43123FCCC9A05059B224751607464C8B60DAE1E67A17B18F4252C2F54A7AAF4B6A5B52A640BDA2F58A7F86F61870FA5B7C2DC183CE5B1965DF783C30F63223551EDD62D563208094392D2EBF9C6C938AFBD408E08AD0A87ECC926BD25E784EE4D4D3C3C935ACBE870D8A777D7CE6DBBC675E32409748FE1CC641E4EDEEBEC6FE242E3A88434F93FF9F4677FF8994EE6F07214C00 -MD = 4397170ED3467427B402A9434060BB344D02ABC830B1E80EC22EC1B4 - -Len = 1675 -Msg = 96655F154EFCE33E6D9EB56C3471D5BC074E95358CAEC947B638FD63EBDC1B841A88FAEA4004D9E068341586D03437A3A3871255CCE036F4E7770B740A05B79016B9E94132DEBE7CE7BEA242ED7067927D4812F448E3B9AA9CECD01DE26AF84157AB79D3E50C83D1E821714A333D23279918C7C04BD999465B427919EFA9CC0A05936B42F3AEC5AF30874064A163D7E086977B32FA81DB19B6ABEB7DAF81512579885E9E8C257B58487231648BEDB6E33FF1021A97147BCD39EBCD4E2CA4228956DC674F61674175E16DF7AB56FCC518F280 -MD = BF90D9D6877B53138EEAEE22581DE5D6578623B60B9A147BD835535A - -Len = 1676 -Msg = 09FCAD77247BCDF3B8683ABDA5DFFD6B58C47C0C8D88A274CEE217B35C702B5C84F3DDF8C57B6947B6D04046C81CA0A4672D4780B9EB694AA4920FC0E01ECC56BD9E137892892AD2D31BCD491A23214825843897322BE5D33729AA22EDE7F21A115CD74DF0AE3CFE28BB610C26461BB2911420C7C4BA932626A9DEC6CD22A8889076949ECDC415F86DC788D73D733CDA4DA49D6F65E67E8F20BFDB825D8AFD898E5D0162EDCD536C2BC5F978A8AA128550DF987EFAFD0BD6799BBDD9EF8F3D04D534D5B5816C29EFCD43ED78F538AEC30850 -MD = 18B975D9E40CF499293DB9334E2775AC9C091C02F5BB990C00743A5C - -Len = 1677 -Msg = AB8A10D700174B4B43C23BACE4393A55E0DB75135AA0AF3EE8A3A1F1102DEDCC427795DDA341DB51B2E26880B4240C904FF51FB0C78EDA9334017C07E56A5795ABA4DB246F3D477FA76F2B69568F09F6ABE8B0F5B2CF3D4B293EF76CB22A658278FDC4DCA98F3026E7D12417EB9928B9CE4A70F59B64E1DC834AC27D996E5763A867F354C50E73DC4244DC2FA350A7B6385DCCC8E9B427472759FDB7FB052156B10D34DAFFA4E71E60DA992E0C4E48FB3F91C6B2CD127E1D2B9EC6AECA04D54B1DCD9ECCB331D0EFAE15A2AF47950ABA4170 -MD = 853762C1BDC4C322CB65C33F0CACE574605CD5F668C4EED39724D6B2 - -Len = 1678 -Msg = 05DBB0DFC9C650216514DAB69119695C0A0F80EB7D678EF91C8D0CD8123C6DFA6A88287177D7D9797DD5F84134D0A96451CF96664B7374EDD453E8FB31A106334E957224A434F156F3E9A83B7A44E54666EFBF25685391EB9BF541E2F6ACCED20ECEE46CE60423A744F5F5B7104E1F96A8D0C5E66D58AC121F300F88A3D017BF5F79AB64382EFC524DE1129C3E2E456D7203235A4D11F040A2520AA517E73DBB1D580B283797612838708DA911B5C7FBD1D4B48D41F81C87C7863305663376FB80415B82B8038E1686AF5D826B74DF282C80 -MD = 5920DEC3AF2259B7E1AC058F3E647D2541411BAC81012089E142D433 - -Len = 1679 -Msg = 987AA5D10B8C1CE8D2A389535A7EF6392D68D4EC80819864603CB92860768E81225E2B1606B83CA62E8047291B9DCA25393B776FAA0C4E3914DD0AFCAFC21392C43AB37058F028A6EF330E6A3B53E3ABAFFE2EF62D126712C00C855765A91C111A89FDBECC5D5ACFC676B566B32B0BA6DA12EFF945A8886448A610AAB9B66B2548DB32C5B8612588A8D0A02F1E0C83878296FB2ACA1A09C25D438F8F2EC7875A61B9022FBE7F1BB7D972B0ACBEE28259B42A09B4F26105F1D0CBA58C6066F12FC2ECD14F286DF4635A0B691416127E34DECC -MD = 9EEECC28666F1E734E7C266ED9C173D61020767E6B2674C083A6B400 - -Len = 1680 -Msg = 9F2C18ADE9B380C784E170FB763E9AA205F64303067EB1BCEA93DF5DAC4BF5A2E00B78195F808DF24FC76E26CB7BE31DC35F0844CDED1567BBA29858CFFC97FB29010331B01D6A3FB3159CC1B973D255DA9843E34A0A4061CABDB9ED37F241BFABB3C20D32743F4026B59A4CCC385A2301F83C0B0A190B0F2D01ACB8F0D41111E10F2F4E149379275599A52DC089B35FDD5234B0CFB7B6D8AEBD563CA1FA653C5C021DFD6F5920E6F18BFAFDBECBF0AB00281333ED50B9A999549C1C8F8C63D7626C48322E9791D5FF72294049BDE91E73F8 -MD = 31BB872545217FDBF11077E86B1EE451475C31DC5E0E636EFBE50825 - -Len = 1681 -Msg = 2CF3288DF0C40A7AF765DF75268CC32B63098A1E42CC6941A795108BAFB6EBF09EBC92949F1E92AB140B8CAC7546A3B51C923524B1539D22697529358BEC7EA462E92E1CDCE8B7A3081997A0EC9CBED66BFE8334EF651DDCD8A69C577BFC10894E583F1F443BB88ECFF1719CF7DCA3F8E7348EB721038E97E090D138C2F42C2B0A19EBB63FFFC4966D6377D60C64042AB9BBBA423A215406E21901AE3C6339918288596A1064B56C328B3CB54C6327ECF5FD741717E1BCA1BAD8751AE21FC13EE04E4148E1B34F49FD3915868A981F5BDD6E80 -MD = 0486A1BAC7AE1CE4D0B638FCD168C42FCDB6D2F8599809DC88B9B278 - -Len = 1682 -Msg = E406B68F1C75EE4C12E73229919DCB8C1EC3967E0AFCB0D349968BA95EDC915654851090E15793B67F675635A1EAAD6347904493E88DEE6395D295F93E223CB111D325D94F5A34E11C5C8773C26614D10F28CB07822D6875D7B76D8ACBC2F5EE2FB9F08B87CA1A006065768264D81046E8C6ED0BD2222F70A81074F5DEBB3E3EB5FD588874C7D89131EDD5C826C3F75A38AD60EA417CA26B5F4AAA3E95B1E2AF4081B5CC1CF16E54651111432C58A367F532A6E87096706774BB9FD2C11A75E6B706B53EF5D4EE562E22621B11F47FD2284E80 -MD = D09498A7DE0FFD8E9FF91158C63041EDE831E841E771BF61DEF15EF8 - -Len = 1683 -Msg = 6F551116863B6CA50D37C17BE7547CA8CBA1D34C93BDAF07BD94DD9D422099E2C896A73B5084181CD94F4325A16688A5D9392DD59C26C6A3619BB40FCD1BE58DDF8A94CEF25215077E734FB8CB52809CAD9A379608AD26FCF08856701FC5E1AFB2F9D5A042B745F0058546A1B28BC3354B11151AF38C52F058A41663C65E82EEFBBBEF366DFF01797DFCE4E291B1CFF9A1045F8B7F784DB6E2CBF7DC33B4F4CB0E4DD4F2C65E773B2EAD81C4899BE4056E45F840D473ECD394383C2CC8E0E5686C84130EDF8E6625AE51B3E1F07A0335474E00 -MD = 1FD7455796EAFF05382989129D6F18E2381AB0706CA7AFBBE44CB3A4 - -Len = 1684 -Msg = 77CE50C2A1AF8A234F2C50CF62806FBD5D0B856736129015DD361F6894AA9AB427A3151C2BF036953F857269C8C429BC7D715673B56FBC8B8953ED28885388569E15CA47E4FC31B3C4DB8FAF09AD46A7BAD593CAD9E1B5709531FA6F44DC70E03804BC4D0BF5D23A6D7C0C1B55F321FDCAC708879F212C0C917B72E33689635B80FA87C8A084A239BEB4B4B4CEBB40ED948ECE200D7003D4E3319B3A1589B62F5B34EB6D02071595CD26013EFD1CEA645454EC37DAD75A23E2A73A844364318F0D1437CC9B5BC159C3F00EAE2CBC3789C06780 -MD = B228CB211D85E875AF57242CCAD1A1DB69D7595935280DEC3A8726AE - -Len = 1685 -Msg = 3388AAC4F2F412000389A9D676060B736C2D67263BDFA6E63BE3D5660B5EE69A2D5E15F81EA0A967DD47E1AEE70B6F9445B5AEC1875F699D5C4821F97A543754EC6DE498B7B59B570F239937712FB462DB40008792DD0FDEFBBFF6F333C8879C3284C3ADC5D20D6888F01F2A91602931990C90101CC26FF86D29C547AB80C00E2B001262F7EA283B87C822DB2A07A52D9C622537D3318F9FB1EC88FDB779B47FB33493E0D165F945FE674621AA0A908001C84903995D0616BA5C6BDCEC171F6746EDDD8FC9B94261165C7DCEA64900661D9978 -MD = 0C90106C5165E9B6AA6C7F5F6357E02155A1338C1ACE87AFE663EB70 - -Len = 1686 -Msg = 2CA96922D63B06A48D96B05B502F4E296B91D73ED57617BBF68278D0DFC2FCFDD6BD20548E6E717675FAE637DB6B5238A08982EB783B19E508DD5E87EF4845ED933CBC8755FC645E2E84859ECA2708FC9329B36FDD0F7178839D2D10B610769F791972BD93A4BB292EBF55BECC9F8152CE72EF6A379229E7CB0993F5590F6BFCE875CD339804BEE0ACF5F354706BD79909443F0B512DC7DB4C1EE3C0C171EBC0CF1C1DDEBDB963F6F880AB8CF357A93C5F551F6246526121FBE40E10B68C3319A2FED010B4F02B34514A5E7E5CE84616F4A0D8 -MD = 0374DBA475868ECE56C743DE8D8B3E4D2F06535D0E82B85D97BA1F85 - -Len = 1687 -Msg = 9DA1EACBA5D0F46160540A856F1E212405809F0574C7524291A3D20B4E7CC3CDF5022DE66FDB79888BEEC81D0EF338AAFFFFAB7C5F8A5DA403E6E41826864718EAAB9ABF1882DD8852BDD443E4F23C29D05BC8B44735ECF8884505351E3DA083557CFA8663D85203CED742232F7E150F24B55FCD5B7B2D1F2990FABABE62A8F85435809DDDAD0E268554FC6258809062A113AE1755E747730A969CECD37873C8F99049E8310F676BF352C41A122F2D8E75D58862AB6ED4E196F2202C862464B1A5F4F25BC03F6142DC6EBEC5C30C2BFCEDD57E -MD = BA6DEB5CC87086186E9450069BB24046AB0056C527D5F17E1095F997 - -Len = 1688 -Msg = AE159F3FA33619002AE6BCCE8CBBDD7D28E5ED9D61534595C4C9F43C402A9BB31F3B301CBFD4A43CE4C24CD5C9849CC6259ECA90E2A79E01FFBAC07BA0E147FA42676A1D668570E0396387B5BCD599E8E66AAED1B8A191C5A47547F61373021FA6DEADCB55363D233C24440F2C73DBB519F7C9FA5A8962EFD5F6252C0407F190DFEFAD707F3C7007D69FF36B8489A5B6B7C557E79DD4F50C06511F599F56C896B35C917B63BA35C6FF8092BAF7D1658E77FC95D8A6A43EEB4C01F33F03877F92774BE89C1114DD531C011E53A34DC248A2F0E6 -MD = 26D69F0AE8E4DC61C6354FF570FDD913CAF21C18697F0371F2D323AF - -Len = 1689 -Msg = 0660E0A141302B50534D949C8925E6707EC8992E5A2C644C7022A94D19271743416868E874FF8DB9B83F7307703DBA2C0B1E4CC533A1ACFBC16F44B103BA7CFF0FA74C026059E8B87530A1E8561EBFDD94E07DAAC12DB30FB7DD888E1F09B75A22CA86CE821639C2D2F053ABD75D10AF6080427F0B9A676A04BE3A0E45ECCEF9C7D228B423519B8174B420E6CA812C74C79D77EFF70F95545AB0CDD4274A22BBC9A636043BFF1E1EC56C9839119BE62F2E0BE9AB3036BC0E90FF334B60BCF6173C81FAB7E5FD55F1A5984093D82F563FF09F0D80 -MD = 82670A32ECF07F0B1C88E18AB4D59E6416E7DD14C4EE8A29BFFA5A75 - -Len = 1690 -Msg = F4B026CB6D798171DC89A186B1E41EE8E349C26F69ECA4E3768AD90B1F1C6F067D7EC0FC0C0464483FBDD806574F5738E2ABE34086F569C8A91266F7F09596D77B993C3DC612AFCB346545F0185D645A8EB83D1CA3FF7DD6EB7F679BBBB8F2E52925622807DF47E7E02D3B6A9EFCA343984642F36AC9008C0CDF899F9905613082B39E83AE4390F78822579BE7BF2DA24DE753207D3F2A3645F147FC113545974B2C4C563752413649B7B6CDCD7C578DA209F45FCBFF681807B9F5EC6DC003DB7BF59B715E542587D9EC850543CA6B9729A54880 -MD = 8711AF1676546E95953DDB290919AE74C094EC537355A16A1EDEADD2 - -Len = 1691 -Msg = 83659B5B4040A75E046DFCDB2179EF7A7680053C1C86498C4D9FA39D6C0CF3648E0946DA8EF5630C6430E2DF4F194C591D1912B5DA03AECAF6C6A440C6F41F304F252D40414239EBED0FD994CFEBF0E95248D229A9583E8C66F980F5B2D509EEFDDB28BA8BA55716D809B9030A1A2ABD663467E8DECA0C8FCB6B44D1297AFB2FBD1B9F44F37DADF1D3DE4FE301F983ED8222C3C0BAAEAA5216A421A0065D6DE18810538B17D5FCF00A98BF46A9B103E353D0D33CFFA04288DB928C0ACF5E1C0A748A2072651E32915E0CC1E9D745D2A6551C2F40 -MD = 3F26A0DEE43140E23E75210AA3FCDB9BEB25FA922DAB71AE37AF513D - -Len = 1692 -Msg = 856F1B2F6C81E8A8C3C6532106EF4108B2FBA424BBCEFCC5F12D67387CE8FB8ED88C80B56A7AD4EB79E39FE779EE65BBA038DA0D7003BC16FE087DE0074ABF764F33D075C2F152415858B0E18B33C7120B27972B608838B5D8B4E303C569F84515ACD539BB53F583630F8D3BB28C935935D60B973120ED94A8678AB79800DBDF2D6463D26B587C630F725DB8C3F960E1BB597CF963EF543B3CC7A05FB81EDB7BBE6F893C631BB48310453E900F0CEDBF9EFE9FFEBC08BCDC198E46DB9156B4EEBC40F9977DF341647AE371BC4CCC06470A0AD690 -MD = 91B144CE0CCC3560657EA390B126D98466FFFF9D39C2FCECF0441818 - -Len = 1693 -Msg = 4AD3F42F008EF17C88465189BDA1A33E2DBB52A1ABAAC899388E50B54599F3C2C0B1D2FD28B9343E82F8B7C5BE7558C8D611572B6D55845433E2546BDF23F38FEF02455F8D5C979BF96E237A3F5E9ED2E05E1023CC12FC0B6ED4136638DAF8AE1AFAC247F4DA8E37051FF13DCFF2DDD5FD8142791F067DA654A58EB0FD27DFFFB53FEFF7331AE8CF2D03484CA5680BCA02141B1219D6F2AD8A42EDA113BC2A250D9C960D568CE448C8EFB5158267ABCECC8B972A6BAD7B4F5E8D278B45DF1E04173120EAD2591CC5298E28D2E60EEEB4938D1828 -MD = 904351B1B933B7FF3A25DB9F806CA1E97276A8AE77A0E41583137E6E - -Len = 1694 -Msg = 450EC015C3BAFA6F1A17D87AE57F449A7B868276783D0E259B7B05CC733E43667FCE3561CE954AC0C3DB26E86B52A9587FFA1F6CE15523B048B341DE8C868F126A8E06CC49717D9655B46359A2CA802BF19F93218BDDFBF8E2713DAE7B59FF826EE72F83D35B5E2807C8DCB2B6DD84DB5268DD874BF92B2D7E64F86EB8286F04B9748E117DBA480FE66CF4D7C5B2635070E866AB6CEB2D2EFE231EE88448918D327110ABB5CF90B6E7F99596723639A295A209A5FD0DD6C6D5EFC660546885FC0CDE34F441A4892780006F29C0F3297CE30EC788 -MD = 8FB2FD8B39E649FE4843CBBEB1F25E9C25F4E2DA9C899D1F8D52C1EC - -Len = 1695 -Msg = 82D4B43E3E055B976435EDE9BCD1F157601562B53688338BD2ABF33A8A602658254165B79514636A0D8541ED8983E0EE96E8E20148125981C7C9EF20C6ECCAC0A7A123066C3F1D9A2DFA3E16F515849BEA3F172E2C1C4D81972FD5FBF4ADD14FD27983DFC1C53E43E7ED296FFD496CAB119E939E3E3EFAB7A30546DAEAEB491C322E074DF3C0F4973CC20ADE3BAB5A4CDDECA7D6CE47B8CCB53070B62FB99BA28CC7EF69BB850A24C84562D72EAF152F915E544343233434E702B3F64CEA729BA16A3C11B359C900D30EE61DAB54E55005B30C16 -MD = 25DBF1897EEEB0C549342AD8607337AC80B2F5FBDF8106B2536A23FC - -Len = 1696 -Msg = 3B8E97C5FFC2D6A40FA7DE7FCEFC90F3B12C940E7AB415321E29EE692DFAC799B009C99DCDDB708FCE5A178C5C35EE2B8617143EDC4C40B4D313661F49ABDD93CEA79D117518805496FE6ACF292C4C2A1F76B403A97D7C399DAF85B46AD84E16246C67D6836757BDE336C290D5D401E6C1386AB32797AF6BB251E9B2D8FE754C47482B72E0B394EAB76916126FD68EA7D65EB93D59F5B4C5AC40F7C3B37E7F3694F29424C24AF8C8F0EF59CD9DBF1D28E0E10F799A6F78CAD1D45B9DB3D7DEE4A7059ABE99182714983B9C9D44D7F5643596D4F3 -MD = 175393534D90B614B158105C95E18A1052A56D0E775EA1CF51AD5853 - -Len = 1697 -Msg = 1BAC2D5646DE9AD40B20EB6C7B8EB53354B90BA0743658B3EE64F6B12F472CA0D3AA9F75A1E2AB1B08A6BCE8EBFAE3FB921B559C04D55BF8145735DE94A4F6EB5A4A82FF38D19E1BD5C8E84F1A4E0307C50DEDCEE7B493C7E0B7688AD9795BF2FEE617DF7EACE1BAB2BBB1A4D4CF2A363FCDD0F352B6AE39257F4BD0E3941B0714E28F8B46F89F0A238EC7DBDA51B4A18BD4B10693F3533F50148D6C30C1B46DE82D2BF5260B397CBD7F169EED2910D347B19BCE6ECFD5C4382A00F31BB88AF480BAD53CA75C32D0568C14A4DB3D4D50DA70A8EB00 -MD = 6781BA9C440A0AA55647B5997AAAF653732CDA3F13F36DCE87CDA609 - -Len = 1698 -Msg = 74E106832472376088777B910B6DE296F18678DEF09B672C268FB5844D9751E56CF5BFA6FA8BD1A5E1DAE84BC9A706696DFC1AD035B5F034D8A9BFC9175F3F6E351DD9625D0E46E3BD1829DB6B9E7E0E3A74A5BB5AF519946A86ED26EA21121AC7034DC6F56570EFA31C65EF26F53B21F8C1D922AE1E01AC42F5777BF7EF06C20869F60E2A8CC35E2476956C0BDE6BBEA9AB74E09881E2507560092A68582F8F2C5B050A6B06349A9F21BA72243BDC8CCE423DCCD9B3D1A83CB8108BD04EBECC4F11D6E4F66905A35C3DA1B1F430DE32338F5F0A80 -MD = 0B4839B2730C2BF43AF34E11B9A5BD25F786AB28A7C72B20BA582B68 - -Len = 1699 -Msg = EDDAC5821724B9E4F0EDDE899155DEC46B0DF63DDBE51E8911B2778BBAD4A32B09B3FAE2F40D27BB7F450F1DFEDA4A891273B02867DD680B0E0B0EEA70B79B81FA8EC0CF94E7D7CA7C1FF4CA53834760E0BD781032312DD5B609C30F37CFEF3B445250B67023C15581477ADF21F5BEA45A2CE4C94E0731832290167713A42CA5E08545E6EDE35BB9A9A58FDC4729862043EE68A51F4328B8DF73B320A436FC01C2BA93283782D506A7728A7C2D360F4922D9553BF9BC37AADCABE0134BAE04357F938621631AB25A457459BA1B7D43827A2726D720 -MD = EEA75823597278BF26727940C7E108E2BDC84D4755FED544242A6ADC - -Len = 1700 -Msg = 34B7D9773CA69D76B7EF15AD792A7353D76355E7DEC7F922186D04CD0FE70042FBCCA5821AC45B0395A99DC69F0F828204411E740219069DF078711B208572E7238251D953003B9380E72A39F3EA0C82C56DB020C38AE3824D2C209E644328EEBF40101437F823181DE665D734070171CBD6367A09786A2CA5B75A57A18C55687AC022B82E9D36C5E473F4D3C93AD137971DBF7DF1ED505BB156EE850EA4451C6A7AD4E6B85F47275473F01C2D8BECC4EDF5EC31A0DCBB4AC3366359F6D0DDC1A89409CDC624DC227F7CEF00B91BF1333932510610 -MD = 71A2C2477828665C27F71C7250327F66F08BEF977F7EAE080EE870A7 - -Len = 1701 -Msg = 25BF5D329447C8A7414999D32A955EF80D2B7AE38E1DFDADC0E82EB94B96AD8BDF99C24E742B0503E80CF897A6E81C2B613FA2E7CFD34F1500E2B5D028DC6294CF89947F16A4AA54C1C58F9272C17E76970ABF412629BAE4E88DA49DA0AFC676DB1F9AB23F7846EC6AA9DF28DC1E2654869C663A25C4A803529002CA250CDE571029EEA4365BBD2B16E353923DE5D8F4DA452C1110C51447128E55444B8643704B668598B7B42389C5A92AE193EEC1185CF7189B987E2EC23C1499582091D8930143573B03360D420C2E4F6EF5D4A710F4C62C75A8 -MD = 90257450A341EB231D2A9741A60A8325A8F7EA4F988DA77119A6AF62 - -Len = 1702 -Msg = CE4F3CC47B14C9D6DFF5ABF17DF95B015F7CE226A4D4EF1B41AFDE76EFFDB7FAF342567D413BFBAD868C00AF20FE8F95CD7E12AEFDC6085C6AB2AFCD302C0AE10724AF383E8292E01BFC5F89E9420324989FC63817F7C967BDDBAE816AE7C7CDC27AAFE230479C1FDC33D64C98199DEC3347A6E5CD90034618A40CF87203287B9822E712B73A2AA32B5CA917BB756F1CC22D41F197354DC21368C65148A431C5E9285D9F8F2C9CB0352339BE6C46FD6D12228B2D562A648804015CDF03FBC8FE3C1B784FF8718865143BDF9883F3D2680E41C9BE64 -MD = 8896C42C199B5247F0ACCD7ACACF59610A4D20E06087D85CD201665C - -Len = 1703 -Msg = D2D80B91FC1C69E71F6BD25E1FE274A83FAB06249F909780059C3778EFA9DDFF75D5AF3A52DDDC219A6F0E8AA796E9D65103D90CFEB032EDB567FE9ECA7E86B0D66D1D2F550F07C7364D323564C8F3C41124EF4FEF8981CF611BFAD99DEDDE8E64E5E6BF8D9872D41E03459DE9CA7EC4772E08A6469ED35ACD59FF428537721C07AAB8FB005E6F2B3E5F01E7349B3F20E79D7454A2DE51505FDA1698B5E54647313F2E839E7954B6ABBD32762BF9C57162561EA101650AE81AFD766C7AF1A7EF0A814D6032C59220CBE449765A4D34D59BD104EDB4 -MD = 1F8EFCF45AD3DFADF485247937A6B25A7E91981EE4E1C92DFD6A5F84 - -Len = 1704 -Msg = 3434EC31B10FAFDBFEEC0DD6BD94E80F7BA9DCA19EF075F7EB017512AF66D6A4BCF7D16BA0819A1892A6372F9B35BCC7CA8155EE19E8428BC22D214856ED5FA9374C3C09BDE169602CC219679F65A1566FC7316F4CC3B631A18FB4449FA6AFA16A3DB2BC4212EFF539C67CF184680826535589C7111D73BFFCE431B4C40492E763D9279560AAA38EB2DC14A212D723F994A1FE656FF4DD14551CE4E7C621B2AA5604A10001B2878A897A28A08095C325E10A26D2FB1A75BFD64C250309BB55A44F23BBAC0D5516A1C687D3B41EF2FBBF9CC56D4739 -MD = 3DECD71DA22639985CF242F2FAE7172459042C826495C8D8D95C3719 - -Len = 1705 -Msg = 231AFF791AAC840DED19CF4D259A955CA2993A8E60727B451552E83F26A56506E6E635F43242946B2B1629E687A3162EE47AB6A32F7EDDF3BABE0D9E9F253842E81E092DAA9229FE770AA9E4189820DAFE92406F30874202461D10204A208AB90D5EB3582B636DE48D2DEBC543CA2023C0D12FC14F34E2F62112F9CD0B6295E2C1D37408018B424A79C319A048899A3EED77F8CDACE914037716C23E73E3C79B6D7BAD4F1EA0C19A60B0B7FA3C07D90A18B5FC9C0A6A8FB7CE62800871053E4EB1AEE0F3BB1928E9598CAC63BA44B5B54772E4DA8200 -MD = 6EA7D710EA2941EB9BACC86D55B6D766D844A82ABA7D0067579DD5B6 - -Len = 1706 -Msg = 7AB9912186325DC1DF33C032BB1475A10B90AB8C15B2D26DCB2A178903178C31F6BC88B3BAB84AA16434E9302FACC0C463C99375BF2A05EE35D53FAF0E4BE126FF670F2A1783FE23B31D22BA224AA4E12F4B1068D1D837F1B0077A186C73F96D846345FFBBFCE48A21A6C51F0788FE52E4938B59F2EB1FBD0705DEB88C893151B61FE17E2EC29BAEA4889C14236ED992C5434358C0E3C3296A6315473DC8DB49754B68DFA97B2DB837E155DA5FF5E4241DFBEA2857F4A08865C9A8B6DC958906DDA95347E1E59BC1308F5B2FA0BC8BD8969465C28440 -MD = A0BA969B19919CDC9EFDC88DEBBFAA8D91E441625EAF7F3C1CD7E532 - -Len = 1707 -Msg = FB8C83012A74DE84888E3D41279319F93332F920493A71B81C6F217C699EBE842251DDB02625F3B5295A2EEE825F4B9087F42334847EE290CDC6B7B8B28E67ADB5EF6E4CCB455BF73876797DF7C39880BAFDE4B9E461770B0CF118C66703519DD42B6C488EBBF0135E22C35E31491C595ACC3DC8DC4C71E4B028E88F9552D2A9E3CD98F27C0D755212B04D35046ED8FA4F1F5E8534B6447615C78A823A9E7B4546FBBF4E29B51DB3C2A1ABB391A5F6F35CD424106ACB645590D20DF58FE8D564BE7496313216DB51BD3DEFC50840455CA48E7FED3BC0 -MD = AD72FC01E5F83287C0D6F43800065A19C0298762E81D7228B9F77540 - -Len = 1708 -Msg = 18BD2C8E4D1220A39AC90CDF0295F8A8BA1BCF49177752713A3C808AEF218F12C4F0FFC030572704FE1871ABC2588FCA54566DEDE0EDDD608CE7058F0CD6D63DA5060EFED342AAFB642FE01E377EBD9D6BEE63507E702D270773B4E10FA4C066D25E4AB5BF16FF4FF4407D6E5451C23548FA4FC0266EB5381A472376756ACA6A94AA02943B2DB286EAC1311C4A354D236A3924AFEFC1C82D2B2C1BFF7B10E25485006346B6E95ADAD69AD172BEAA1184E00E89870FCF53C23C2071B0529A9D09BC9CFE182A869EB793E2261FB0B667D52156F3628C50 -MD = 1A89043E66CE7FDBC95B0E3BDFFF1AC690A8189521EE481624AB011A - -Len = 1709 -Msg = 347D043DA6E918EAB702D86EAB0CF7960C0ECDE65988FFD03BAF9C0E020884257447C7EABE4D7FD9435E1419024400F22CC10D37B51D59BE721E7D8AC235C3E66989538A2D8DCC8738B214D1DB81D0ACE89DBE6119E8D7C81CBC510F2DEC5A809F5AF767C8E5ECA0EB2736563D85DC17824CAFC2F6AB039B0B49CB0F456ED52F4FB3AB4227B80B5E9F12F167097866551DC5921F04364EEEFC01C0C3BE14C03713547ADA71CA681B753B647F3DDB5C27C405C5FAA5F5A752EE27CD25957FC1134C1E442545D8B585631DD18F2F858B3CEF53F57BFEB8 -MD = 03D9239E3DBCB89AD54399A2556E969CCFCDC94092EF5C53918AF492 - -Len = 1710 -Msg = 465A614C0AF40580A27871CD12DA42D1EBF9B7D9D4CB71B4F8E1A25EBC99CB36BFB99B8B8247BEEC9A10FD5F278226624F8C3C861D14C533F9BB0763DD5F394318F7BB67B4C763FF9891B7366B21B623B260F26AF524929C2E07733C9B8711EDF7C682214A1E740ED16301639947CB42F049AC40BCF3AD45D498442DE1BCD0702256116D2F24E6FF42049A84843AA71F923325878C7BB7C6AED482B103D56B1140EB673BB958B9363E3F71C693C542F8536A3D859326C987C27EE95B76B7E4C855E8E758B02C8AA443E6A1D88BFB1656F4332D070128 -MD = 80ED84C4CCCDC6B9CB73B4ADC6CF96716164DF67CFFE9FDA8B37E312 - -Len = 1711 -Msg = 52D90524A8479E97249EF04DCBD00D0D53A500466FCC2E0CDE71ADEC409A11FD57D242103B77D9298A7D213445CA13C1B985A4149BF025AE47FA4D55C0DF836B607E9E8F9C0A1F73EAC9F67D2FAFC222D40047552FC1BF7B39BDDE7FB5B4D4E3D836AC9412BDE2E91C98DA15E2A08B33C446A2B1ABFF97960EBB426744806D712953AF4B293F1F79A1F2B5389EF77EC13FAD66ECF4DDD8F54BCFAE99032BAD76911ACD9A0BB0A4C4D787F33F364551D913BD9D6A91372CCCC9DFB652586C99F719B17586C0839C4E60654126E6CE46A3C672FFE0D528 -MD = E337E0B1EAFA3F63829F0728E3DA4A6205B9CFF8AE14C8C24723DE7D - -Len = 1712 -Msg = 7C7953D81C8D208FD1C97681D48F49DD003456DE60475B84070EF4847C333B74575B1FC8D2A186964485A3B8634FEAA3595AAA1A2F4595A7D6B6153563DEE31BBAC443C8A33EED6D5D956A980A68366C2527B550EE950250DFB691EACBD5D56AE14B970668BE174C89DF2FEA43AE52F13142639C884FD62A3683C0C3792F0F24AB1318BCB27E21F4737FAB62C77EA38BC8FD1CF41F7DAB64C13FEBE7152BF5BB7AB5A78F5346D43CC741CB6F72B7B8980F268B68BF62ABDFB1577A52438FE14B591498CC95F071228460C7C5D5CEB4A7BDE588E7F21C -MD = 2D0A56864BBEC6449FBF7B2EAE53DA46647183B56FA4EDB1602E5163 - -Len = 1713 -Msg = 54B61F11272B78B0FDC95FC10117A54D290E051D004A8C3EC2C95773CEEE8B18DD7B97B655C6498054C0C0A5DF34A0FD040C20C46D5AECA2094D4EC1E59B7558FC27E179110D058782FF3A2F627A91B606FF35BA0C1A2355D7388D6EFDFD97147698B633D4D2843F040BE31E483D3102B8418D8A8A2EC6FBEB1DDB291E04BC18F01D0EFE92E6F72F49D9D64D9408522FCD12E3BC8B6358CC9F0952DC0783E81FD11450D20CC37C6F526FACF9BA0C04464C45772D3537F0767F685C71D3659B88953C244A5F82B01E5B0C2B106621C70DCC3179FA9BF180 -MD = A7A5E5C9F38DD2C3DF4379B730F7DB4D2A7565C5D6B412191C6C56E6 - -Len = 1714 -Msg = 1806F931E78B282F08D9B153982963BA7009198954F820F740CBDA4CCD4F74712A84968E741F67E81B0EDD71B53D016257B9021D491CAB64AF2953DF73E2720C275849356966734422670F4D385C2916E561BC89C432FA92A81EFC9FFECB2E59404066C346200514E79E46C4EE4E351DFA8BED90CAC2DEECADC4F7EE3AE381146C5C21EF3859CC9A231DEBC71E7E5DDBADFFA9E7DB7FB86B3682D7142ECCF06B8D78B50577CC03FB9EB0006BA63174871AC7CBA303B87EB9C69FFA31705AD943381338F46D3F216232411A936064DCBD4E3A0B38D82D40 -MD = 0E90ECA0C1E5EDD7D705EACAB4ECA0AFB7D9BB0D6FAE813C5B3314D4 - -Len = 1715 -Msg = 55A7A7B48849199F1BE5C9CA6252C1BBECA9E3D4B9A81A085D201191EAF2290556054C00904F2F854F7208AB29312EFD205F95D3CA4CC26ECFB02707AF4410A54031E7F7727D72A1B7B50A031D866674306511224B1057D9920177ADD762E391EDC1269F0D4FFEC5689F9C2EBD22167B708173830479C377BBA8FCA1792607273FB4214DFA3A5130963A45C96D65F0FB230AA1DB3683F9C58CED7F5555E757B1B596FB79B54A1E61D5245763DF724CED620DF2F048EC703988B3D1D307DF9CB6B1A78A344782FE6B0F9AF5F5C074AA4BE1D596512726C0 -MD = F6B09EC2ED4288EF55774CDCA91E0A92C8B1FD73616A9BC99590DD12 - -Len = 1716 -Msg = D85126F4772B9166A15AE05551B00F3F0924D1F0EC65E9109F164C3C337CE978AF02477FF217EE571A17DF901A158F02FD8F79D64F09CA11A15B453480E08E46F49961C6CBC4C6FDA9706E094682BC8C64F1D74BCFBED70C389397CD76BDFB52A728484297EF974C0E524682C926697B2D33AADA7E749E930AA78731164E08C2EBDFBEA1BBA1DE7739212E14DABBA84B502C3F6550EA79022B7533B270BD6168731B7F72492A3937E12047FB4DD3D261EE6DA38AE01A4110E0E1FFB8E503E0269B1CFD43D2A4C1DD8D3189E5022A2188CDA4DD60C9D400 -MD = 0F5A4DE28D10FBC1711560E05D45E352AECB5F1E47D015C43B0E9D5F - -Len = 1717 -Msg = 74573A14637C34B05ADDD60A85BF22DC7E818D04EB94DAC9DAD5EF2891AF122599438F08CE2297109A7AB161E163D9BEE71C366270B6BE4E8F92D4E716FAA3ACE866C049F4BFEF5E5CE5F6A5DDA0C877D17FE2B179599C80B75B2485DEE6B912C5720CB63C906AB77DF480FB9AA3A8CEA11D8B2C63D88DD3AD6ADB8311197E469818200B52C4ADDD51D13D6DF3F3810AED15890A7C1F9388EC296CC79905AC65E006DB0DB3207DF7674874D733AE5A50C5348A208D115E247F023766E1D9F3DBF3769EFA1F5CF950AA6DD903CC36FCFF08321D71D7B2C0 -MD = 6A9FF37B40C1820DB0F159DBBFB0B6D626176474ABC4BDB31611A8AE - -Len = 1718 -Msg = AEB43BF2C27EC6A64D5A8FF892C67B282AE35FA1436323F0480689249AC3A552EA43AD8B983A4DA901A024403EB23CC3A07EDEEF1B0F836110305CAEEE070FE0254EBB70C17342599AF6ACACEA2392ED56526FA0DD9B5513309D0D6C9D5C222370144B531DC0897B80C0FAA16C050116B74BCE3D026BDF4C2AFABDC67381BA6663C47E509012B8EB097A86E5190BD32F8F8BC1B51F3CFCDEC3FA844358671B42F7F510ACEB9F3BF3C3449B47E7F64997EDD5B6E4F5B8A2241F4F8EDE88D0BABC7C10173F5C51C27144EA745D11EF876126D487E842E57C -MD = E23F9DD63259F87EA95FDAF66F0276F668F923C446752BC9E091DBC8 - -Len = 1719 -Msg = 4E6558C1D4F2C474AC32B623E7088FB80820E127A90D9E9BD584F81FE3BD701F5DF85C57248FB42E538CEF05A5139D4B6741D6EC47361EC47558037F7B3606C351382A0132EB52A42FA75E16F043B16126F3A12D50C5A28CDC7EEEABBF10C081C56163DAF2AADF5ED706D568E167A843DCAC64C56AE3DFF0017CF359115F22528B98AA209EAC24734870C186998FDF32CD12DA1B8C95BB103650D51FE3766397C23C202B40D146EE82CBD25BEEFD79CDF94B6E8C90638FC23856728607FD873A683402FB46DE44E746E1FAEFDAFC805170A72AACD03620 -MD = D156F8C2EC1CCB2F809CBDDD52017C36E2D2C364D4DA11E4E3890D64 - -Len = 1720 -Msg = 7A6A4F4FDC59A1D223381AE5AF498D74B7252ECF59E389E49130C7EAEE626E7BD9897EFFD92017F4CCDE66B0440462CDEDFD352D8153E6A4C8D7A0812F701CC737B5178C2556F07111200EB627DBC299CAA792DFA58F35935299FA3A3519E9B03166DFFA159103FFA35E8577F7C0A86C6B46FE13DB8E2CDD9DCFBA85BDDDCCE0A7A8E155F81F712D8E9FE646153D3D22C811BD39F830433B2213DD46301941B59293FD0A33E2B63ADBD95239BC01315C46FDB678875B3C81E053A40F581CFBEC24A1404B1671A1B88A6D06120229518FB13A74CA0AC5AE -MD = A0FF9E11FBB451943A17E3AC510DE0B582BB072B16DC4E03F9E4019F - -Len = 1721 -Msg = F50014B208EB74778C5E65F27F3B7AACD008D7702D56890C769A6A62E4A9BD9C2A9B7E62653B061AF29CC45E37A4E8160B21B5EDE780F0558E1A94F1F23FFD17ECC4BB543F0E278141ECBBE2D3E7D252E22BB87CF64346661B56BC725D90B655E3B4820ED7D1E055232FDD8B08FEB0DBA125C05C42633ED8E050A5D98E4047F64BA217395F9503983626F1E6E0E5768A049E94E7207E9CF9FEA593DEEC252CCCEC7DE21E9A1BE2347A5BC3A0D878C1778112B4F94B4123053B0E1BDE994B8444B7CDF1FEDA2A28FF8E3343501B58E9ECB7AE47354BCEEA80 -MD = A9A0934AC0D472970E9728B0881FD2C360512C73A33290F7E299F01E - -Len = 1722 -Msg = 63FF7ECF12ED74A2E1D9162ACDFDDAB310EF6AEF426E53B88FD29759A6B6D9B0CB28E22C67A1D294206EDE4780964E0C20E27F8221E15E2BF34A3A9F3B38E573AAEF778E6A490C4CAA18729E88395BC866DAF1B2B2D3391F59C8B9699C8E54BF0A758CF5C3A8B097D606B9A6A4B3792B27F132CEDD00E105F2B85D6307664FA39A14270DC402C308409A18695A93BAD45E071CC235CC1F84C418C91081B0554231466700D8A7FF1790C1DB9ED496AC0B38655154A3BD5C70FB9466CA20C69170C4EF3DC18323C36E5A0EFAFBFFB017944706F70D004C7240 -MD = 049B233C37FC55A608A0D1DA56FE659BC913B9CC35946B1A9CD53793 - -Len = 1723 -Msg = 3D02827ABA2E9C794A33E2A1ED946BB0437BC419CE5DCA92EC886531946C96A8D261C70D5422DF0D04221CF0AA4339694C560600E757D6539518B4347D341CCC5A57613A29DD31301C0C0055F1FFC44BB15622ACC47DB80BA50EEEF8226647F7D5F3FF8EA03A968CC6870157A8CADC9924BC9388A9748F7908423B344D915BC29011ACCDF57A04F4400B1C848B493AEB1BF9839865F44BFCD4D643B2FDA2E20B883D5A2368B137EE700D3E83D8E9FD01661E869E41410E686905BFFF2983B6C5930346A8452164972F23715DC9ABC673B0D41C92A65B89E0 -MD = CBBE298C284054C0496D7A31EA664E677266A06104C292FDFD23B0AE - -Len = 1724 -Msg = D6CE68E12CD933EB93A09F6DDB922855604613B4A76CE6F5D6C58991779720C91E652C70B380960ECB409AAD5761DEE4A3DB5C288EE7C13EA16E8FC7FD6BC6C9FCE77A4B236B99314E1745AD8C2425ADC0B4D8F746D8E972FF584131A4ECB2C4038C0BC0B0FAC7BF1249CBB58215EC07769F8BB2E78267D57B978E2BA09DAA70E022C1C57005F33D76718788AC81817033AA6A0BE89EBFD3DE3E5F8E743C1068D3663EE22D206273AAE6A2358101C3423F1DC99658B7916C581A1C39EA42CDDC180E7C8B136CB633CAC407004B503C4D0623FE3107B1FA50 -MD = 13C23773A714316890D9362E0C5885E8B04363EA5DD36C6B8EF73A5D - -Len = 1725 -Msg = D22AC23AF99096368C3C7992DE621B9DFF7A2B9EB697064E2DD184F7A4BD3DBDCB76DE8520F627BB7BF9DA2016BB04957BD202295F262DBF7B7008E10C5BB00D70D7615E7C1142C1E05BDC05EA51AE81D03414E28B0B61DD78BC8B5BCC06776F4006CB04AC5B0D417E557DB9166CACC5DF5A514C488FF47E42ABFCB87207FD5240459F2C6A723677A4DDB636EA83CC0A323D7609F0E03D800F7767E220C52D5FC828AF4FF003C7198485214F1CBD30A9757129F4FA1067F3DC896EADAF0DB3B78923D4945A90F731F5C1C1DC07666CD651D3BA6DF6E922F0 -MD = AA7B9EF389DA22ABBAB5D1690E26E93857D4509084BBAC30E01650DB - -Len = 1726 -Msg = 0D7B88F3C598B66455959C84D2636CA1C834B73D7F56A97AA07755EB99C4C8BC9016102A1A6A5B45ACD2879DF56F79A1CCB54CD9B1981A3EC9B6FAFFDAA8ADBC6F5E64A3E75594E0659294FCBEC07563D40088637E8771C36BAFE082FD938ADD0904564D89B9FC697EFBA9A0161C3A46014D77901F42FE1F27721115988CBCBFDF5A93C6217E32EA88EB18FD9E7C248F5C43593F03F194E4D3EFF5B85AB474A653E5FCA0D7FD955DF0784B2823DE88A80D83AC93F634A06601D3378CE6F318F63ED5B3F478E61468C348B83697EC9CC0271A99D23B0FE8B0 -MD = 59CC79695A9C7ED353ED80D18D8616BBE4179AF69B8CE847F4E309E1 - -Len = 1727 -Msg = 6D058830F672327A9003386CF0E0EF22738E2027B4114991DC2C4BA6757A62BDB190E3414A4EE979F172BED470FD9D9B085F62D4D9D05621140ED834BC8FC25A8DE066846DB9DC7920B4FD201567C9B7255E41A4D724C87CB7C287FA4BE3D5DF6A1ABAB78F3C8386A33B5D9A03A26784E63999C8C7DC784F541912786E1DD524E2A9F0BB4B6EF87FB1CCA144EDE9B1576E45765589DFAAB5CDED2A025556404469E39E95C74DC5FD11A0FA7FFB21423298B5168C5CEDC34762C36BEB2A1B6BC90E691304B661C638AD7E0BBC2E7A6B3CC87443079D73D1B2 -MD = CA3F0454AFC86A473ECF8EC755215C0436C93F49842949CD6506EF1B - -Len = 1728 -Msg = D9FAA14CEBE9B7DE551B6C0765409A33938562013B5E8E0E1E0A6418DF7399D0A6A771FB81C3CA9BD3BB8E2951B0BC792525A294EBD1083688806FE5E7F1E17FD4E3A41D00C89E8FCF4A363CAEDB1ACB558E3D562F1302B3D83BB886ED27B76033798131DAB05B4217381EAAA7BA15EC820BB5C13B516DD640EAEC5A27D05FDFCA0F35B3A5312146806B4C0275BCD0AAA3B2017F346975DB566F9B4D137F4EE10644C2A2DA66DEECA5342E236495C3C6280528BFD32E90AF4CD9BB908F34012B52B4BC56D48CC8A6B59BAB014988EABD12E1A0A1C2E170E7 -MD = 4FEFBE74645949A1291C6F6F05EAF4B780EA01EC5EA5105ECDCB984A - -Len = 1729 -Msg = B0AB1FC29576BDF5BCF22A14049DFF38A48B5CD9749C95E4733B18039606DEFD52A73B190C10B59EED4297384B928E6E60304F145F45B3BC4B72A68BCE4EB4F644CEB3E8739881EC43F36C7489AD32A207F3921034647DBA76DC0E41E1358ACD2A45B606BA8CB75472966D1E0A2AABEB880BD837F8317EC8550F326E712AED4EB4AD11CDB6F4FA597BA30954A09A1E386B7E335A45FF2110E6A365876C8BBE5C4475906D0D2400CDFE7FE4672BE6A5168748E11F73F155C3AEBDB3415BB0BDA5BC07F9C2687718B65F1C753A52D09B27F4724651BDF2D09F00 -MD = E7FF87A919E1A714C917C52778CFC05255B0D082E359503556DEBFA2 - -Len = 1730 -Msg = 5EBA9547DA91D476A5B6E44447652756F86ED187590326EF32D18E4D05D05678339AA640B22E029E6C22FF5CBBAF154118F219E3A8EAC24135F2732362AEA3177321EE3DCAA7A94BAA5B04E69D83F0E99E1EDC58A93D0B0BEF8F3AE7DCC0B9CF5D2557D225567FB2C768C59BA8EC70F5C05E480232A64C6ACC0C561BC13BBD28A5BD0C2CE2C23491EFEF39ACD313A777FAD4BCADF0667C6CAD1B8BD8583690FED2F6CE17C33421944A8B3CC62806369D302621C11A66BEB642526308945E5FF32C37DFE81870C3987EA69BE829C83495CCF7D929BDA8A85240 -MD = ECA2D1536F7BD865A3441A039763C8CD64881AB3BC57C3AC4424F9D2 - -Len = 1731 -Msg = 7E2BC340635BA8777E065C7BE34A876EB20A8DF3170DAF70DEBC6CCD47C2EB126F5E3DCF692FDA19B751B3EA503199CBCE86177AFC261E0661CAED6884CA4C109DD2031CF69EC1EB24BCB73CA622DE18B43C01B1BBBF6B2A22FB4DD6D3B73BC1C2A8BB6085B7971F6909ADD9C5316184F5370889F5FEF6D27CEFC4291202A90620573B150EC3EE31262C455517FBA064AF031F74EDDFC05648AD7BE1DB52CEC623CDA6DE842676AFCA1AB318CACCC8FD137B65044C4EFA0B647CC2A0ED3D075DF0877D42116800546633A445C44F21079661EC7B46A5B80C20 -MD = 1743563F0647177286B45E116002F03482A29ECE3E0F783D162F5AB2 - -Len = 1732 -Msg = DA35B0DA3A478D7E4929262859168B4B717F5D1FCDBC249763B5C4FF33B7781822BF98CE97DCEF54AA4AC8B42A4FFAFB5FB934F29DEF33363C561B606FED6A0EC0C2A3FC746801B87333D18CEDA22D9B519DADC6004FAE5A3320E1CA91D9225C47CEDFF521A349CEC7BC34BAAD64FED23BED387833526E22245B35DF621F5DE0DF72588B95E98A442242826F3A38F19F4648606EA28B68B3044DA72831709DCF8E65BD6D047DD81DD83FDFA262757D668FEE6FD65527B01EDD0A6D14334503225BD15CC41EB1D5D6075282913C801B43438AC6EB752A018530 -MD = 7E546DD1305B675322365B4B9B8CFA89A2C5515302ED302466500D45 - -Len = 1733 -Msg = 4F18D64F8FD0E7C23C75EB389D165A47BC97E57ACC4E415430C9C2A89E1A2A0EBF7B58DCEEC95CBF998D4373ABDF564272CECCAFAEA835026CB62DBCBD0CB9CB38BB21716EAEF0D4F288BA31F5269DAF12C9B50B21EE38B2A620FBD9499784B73A9CC8F6488DAC51545A680D07978A961A517181BAB99684FA2380ABEDD5090A446380995FCDAC7A9B8A45E49B3A88F7EE37DBC147521F902564BD83F7680D4E3F5A96C6BC9915E5E8A8D850B0C8F37B878623AE7EEE57D704FCF4163D4EBD2EA0D665C65F85CD049CD3C4F930C1A2B2C9F05F9F79690F2C90 -MD = 002C0B2B7A3C687C05A97CD02ECF1CAB4738C38EC2468D5007FC3699 - -Len = 1734 -Msg = D165744E9A601CE8B758FF58406FE6D3038A1FF50C98B9AB59D68A23A19048268775FC65142DE0080D954BA1C9ACD44203C1AEE14CF2595F3104393C0421631AF62C82CACFC9D08311523AE9D533A32E353800B73B9EF0F276F2E68846A2BC84276A1F6FED9A23D40B4B664C7922C609AC86DC2F55656CE92BC015C9BF1FA7AF4F1E42ECAA6EFE2B499DA3092D0D89D6961870D17FBA8753ADC69CD7BD3F6B194AAF4A2EC3CFD08E25491E63502921E7CC10A5587A71A9CA0F16B98196EA03C4A72BB443C80835B9A21C48586198064D12FDFFAE79726F93DC -MD = 01368E14E1EC29BAAECD20528C3CECD2BE77E4865EDA5490BA0979C4 - -Len = 1735 -Msg = 24DE7418E94F7355E13E5D931BBAA9D4D54F10343459F224C884F367C80ECAA3C80CB17BAE478FA79944AFAE0818CEBB614A7F2AFD8CCEF604A952A35351A95F0EFECF03641DD7B82B2CE046A3C6CB3AF281597A4E87F2E322863DFC1B61DC52793C6FDCD107C5AAB3B81F75ED2DA006569C7378AD3D418B9086152C58473660C61738D1C33BD74867F3F94D133E6708F34F8456CFF843C99258ADDD2B9DA18A6FDD87C9A530E2330C0BC6731AC9B8BEE51FE3CC3D81B07304002DAB6DB3A43BDF45CB19E03873682A1041ACB6423BB638DCEF04AED9F7DF1E -MD = F452D72C7E7E3C1D4EBA2AD7629A842CFCC4338A62620A3094B80012 - -Len = 1736 -Msg = 2D8427433D0C61F2D96CFE80CF1E932265A191365C3B61AAA3D6DCC039F6BA2AD52A6A8CC30FC10F705E6B7705105977FA496C1C708A277A124304F1FC40911E7441D1B5E77B951AAD7B01FD5DB1B377D165B05BBF898042E39660CAF8B279FE5229D1A8DB86C0999ED65E53D01CCBC4B43173CCF992B3A14586F6BA42F5FE30AFA8AE40C5DF29966F9346DA5F8B35F16A1DE3AB6DE0F477D8D8660918060E88B9B9E9CA6A4207033B87A812DBF5544D39E4882010F82B6CE005F8E8FF6FE3C3806BC2B73C2B83AFB704345629304F9F86358712E9FAE3CA3E -MD = 7CC9EEBBE0DF46A398233FA31286F8A530292B53E48BA54B6AE40472 - -Len = 1737 -Msg = F38433CA26FAE8B01EAE24EC59EAB6FF4CE7909E1D73F3D8ED5AD663730391BC561D163FCC44CED801F7B48C4BBF0D578979BAF1E95ED5FA5506AE07DA805FC042074C3E1F6D34ECFC842B3C652746F1F2DF086494F0E0EFF56DB48AC1EC12DEA198FDDF5257EC18395C75AEFFFE8317FA9A7235EFF0C4418DA43E929B7E53DDD09607FF6F9A907F6DCE3EFE263A75183859EBB4682CCAEDE876FF9564CCBAE9817C088FF61381207A8B5276EF41645652B7C1FE9814C175C30587E2094CD44A3DF8A7EC240AFBD4ADA10AF53859CAF6EE3DDA2A79DD77CC7980 -MD = C83678223AF28BE90FDD656BED730FF8511302A176C48D8ADB76AB88 - -Len = 1738 -Msg = E5D9B23AF789159A99ED98663E1543957FB105A093C2486B1ADC776581BC5AD9AD88282E0A256F0C0E0C1A60F1264A06EC528788C71AEB1A5BA87208E467E890C0E0AD964EC3FF1D8F4908F6C277A070F0EA921C69DD2CC720E2812F6FEC9565570441AFE65040D1CC591087C15CA804CA953A1BFD5410811FBC7E56BD2EB15AFEF1B7A1567E42871AF1D0E42DE6ADD8BEFA7DF866CB7D446CC5AF3677F68EBF9B9DCB95AA596097B98F8AB56F080620C10A0B28C34461BB7C948019BF650FB3E7B12E8CC7CADCD3CF78C77B6EF4953EBB28634BDFF4E11780C0 -MD = CBEB7475612ADAA7FADCA2124582E48B03B6481A44787AAA3B284DE7 - -Len = 1739 -Msg = 73CB144295AB9BF193DFF255E2BE770102DC59890854039AB39DB11ED6AC6AD8797144832578C21CAFE0EC25C0383CB0EC4648DA2B23BD4203006B511AD5362D3ED4543A279DDEC3FC0E17492894FEDFD052CEFFAE126395C3E6BB0DC9AB43772E3C130534A53E5F1D4B49DA36C47A22E99422A776844028BB0AD862D20C125F56DF6722D807229D27F18DC5B95841DD42EFAC25DAD229112B63F8A7BBAEC36DF280766F9301B319F4A2FEFBF6D5A7B17F620E38959F056E2F39E721636846EE8C66D93FBEA3D0AC06D23301C8CE46182B2DC7BE3EC2EA485180 -MD = FD0E07BAF84673F5CAC10CDEBF35177EF39AC91BE88CF0AB31EA948D - -Len = 1740 -Msg = 1F55FD989BE2EE0BAD7FA02D95355FC64C3BE8DC25C76EFE980CAF9FDD7DEFA19B5E591240441C634DAC479CA9103E78040F490510C0C8689D8E35CEC420BA1ABD97EBBE9B7ADF882E0AC256E55CF5F38F83588D49153EF53FE2F25A612676EE764D744047476C3747B40659039EB560A2892507F05FCBA688FBD004F680BE23AEBAADC9FF61973FE6728719C5E0E2B3AF19F540FAFC295D13F55BE06C6C93F489CA5A7294A66B1EC0757BAB1CE8C6EE8595B53BB927B65F02536742EC3A1C275CDBB09C2D7A4F612AD0C5CC00FE93EFACC74A4CB0C05C8F4DB0 -MD = C979A13A8DB6803A9092B25022A65F2FC33A14AADD00950C6461E2D7 - -Len = 1741 -Msg = 0555AFF140369CD288EF4850691D9F5DB6431DADB004BCFF7408E47A0F5DCB4965C3694FC2A6C754452AA775DDC8CECB241EDF8643757E603843F27E885CCAC475A33CD968BAD907438DC37B209681291B6CF5E794A23967398A76D9925D76DE70D7E2B9D623E4126CB95A865EB7E17C2347245528ED9976EC8048C663D50C4E05D5BB8ACA77C98E1800EAADCF0ACEF06E68852DCF102A52829CF2B187EEB7DD00083114B5B913BACA3C5A2381F0FF7A35A5D40E691035EA8D9E0A74B7E17ABE2F848313F6364883D742D82DBCFA61A113CBAEC441E9A33ECD88 -MD = ABD75D02B14CD477BE0249A13BD5EAF674BFD21BB2A264D2B0BBF729 - -Len = 1742 -Msg = CBA6BF1318BBEF28CD3AF3CCD6FB4CC78AD723997E6FDDA09FB98751B061315BC28B6DE6BACE893911502BC21DE0D93C20DB7DBB32013EF22A3CFA699063FBCA483FA27D0EF2F98491B04E0873C4004D419046B112A0F253F5A9EADAB2EFBB59650E0EE8EF22AB26B00F4F8DF463BD5EDAC2B1EA58313C2BDC90C9837A30BFA7970FD3306E7493E769FC9E9E1E293BEDD78A152866954927C97625A6F6779698D497116AB7CF6621D3EAE5E7DB7F3726B35B36A6AE27343FD3C980E218D8A7D9427357219FAD1907256F682A993C6C5C7601DB1171DADB584CBC -MD = 3AD2EDEF2DBF7B973DA800F7ED8738E1E9B3D45179495ABFF3823635 - -Len = 1743 -Msg = CC1E708654358899B253086A1FA3E7F41E1FF10C6E145476DE2D86B27F1260B12C470EDA91FEBBBD8421A036FE200EF55D76E77DAA2506337C413BCCBDEBA791825C0EFA5397FF77AC8625DD3BED03B7295C9BDE16DF5A2751C383655987427E6DB98507E9FA1D5683DFEA692881C91A89B3CC71A4F41F13AF6C4BF70F0B8839AAE0CC27A6F49FFC16D69C06132D5E2198C41139C219B11205DCE4BFE8775C23AB8DE0F5537C4727E60D72D8D24979AB46878B626629DB4A44F7D0480A530B59678320FAA6B6D5D01F54853134FA5634560547D3307ACACC3C5C -MD = A871F02B43FF4C0618A91449D1050D2415A0F1B3AA7BBB8794305AE7 - -Len = 1744 -Msg = 5E19D97887FCAAC0387E22C6F803C34A3DACD2604172433F7A8A7A526CA4A2A1271ECFC5D5D7BE5AC0D85D921095350DFC65997D443C21C8094E0A3FEFD2961BCB94AED03291AE310CCDA75D8ACE4BC7D89E7D3E5D1650BDA5D668B8B50BFC8E608E184F4D3A9A2BADC4FF5F07E0C0BC8A9F2E0B2A26FD6D8C550008FAAAB75FD71AF2A424BEC9A7CD9D83FAD4C8E9319115656A8717D3B523A68FF8004258B9990ED362308461804BA3E3A7E92D8F2FFAE5C2FBA55BA5A3C27C0A2F71BD711D2FE1799C2ADB31B200035481E9EE5C4ADF2AB9C0FA50B23975CF -MD = 03D718DA677C4018E52288BB30E4E6E732A16144931176F0A8C73970 - -Len = 1745 -Msg = C880C4B995AD9D758482D3640E7219DBFE62180D012C37FC7C8427298ECACBC9FA5948C3B23C1F42EB6069A8850A075F709F88CAF61645B26BDF30C6BFD8BE91800BA8F1C63E162849309CADC88CC2E319E5550569A655A4B6419F88037D8FC6A3C4A4C35A3B21CFBC60910A9AF554EDDAC3982676301BE9069B7537F93C7134A0177A3517EA00A7756D9BD9F3B7D40C5985C14D39A8C58CA8420874D21EF372288CB153606E7E5E710B340F8F29854DCE08197BD1F127B47969A2B0EA20A3115D4F7CD1B48EEF6C3F6639607969C57E47BE42D4F2024D1B34E800 -MD = 44A478138BA16C4A817FDDB97564A93C5B9F6A21C783585C07CC83E4 - -Len = 1746 -Msg = 697718B0CFF69EDE70B7C49FD40EB4778AF938B2412E2086630800CCBFB27645B86C854BD95B7A0105B5C8BDD3B4E9AD76C79961A8D18F6A634F36753692E1527A4D198EA39757BF8AAD72844D3135BE711C1C693E5D181313F98FE86B8B7177467942BDB3EBBEDC08B96F384D4266A48CBDCF3CDA17E7C77A4F419C87A83950DA70D7840E7D254A174D403AE9BEB731F72A211D0211F170220318C65154432D3A0C254A96A6CB614AF61AA3B3C312D5C2B47A1E766BC109B6CB98827D6A6661F8990AB73045BCF17AE31A90AB3B8C6A6D9C0B24B287AB16969600 -MD = 74FF1C686E5A6EDFF6EE8EEBF425B1CD8E42751FA71A607C17753999 - -Len = 1747 -Msg = 5710347D5FEE482797696CA7582540372408B58898D3D97515B7794EAACD5D8D88D838F817437E172BB7DFAF8E5A996D9EC028C4D6047B09721AD2EA28D348677DF40DB9722D2DCCE46F2D786C0A4F053CAAA4E2C71459D7653262CA7B6DADDF07A1F5A2A0CB52335CFBEE50BCCF01F6714224793C3C53F117DF0C6EDB849042A03526E74BA8A42680695DEA4A09C00920F83A680F539876D526F29C48EB76E2C32D5A5A2D1B9E412A789643A98433BA4E3C33973528502E95FD8389FD8A88A0FC570DC4DFC081E6D02D7756E299C32AFA9FF94A39D7B8AAFCA160 -MD = 2DC3B9FDD52BA90BCD3924F3BB4FB4C19448EC0B9A7DD823D5221C25 - -Len = 1748 -Msg = 9A1D42B3E5E3C43C39EFD6E3816765D650B8AA14ACEBE53FBF4061CD0D3CD880C94A1B98D2A165F8EC0A5BD803EAE346F326788A9C83971C002B5A5DAEAA84A7824E0928C86FA9218A1317433CA520A6A4632CDE0CC7EE35C764624BEEC5192D03504BCCABDFFA8D0455864AFD50ECC78F0DCDC62BA98FECA4CB62349B4CDBABDF7158046B3CF8A4201D1FE31D5A40EDB8A0F2439384D00566651682FEA8778EECC2B02781BEA796C7BA0DAD376AC869313728A420D50B074289DEE922CF8864CF32C52C070848ACD58D670863E2016BCAAFD6E44635B838CB3E10 -MD = 2BC7DBF23D6FB741B69270A20E701B0ED4B9FCB71704C834A7F55100 - -Len = 1749 -Msg = 44CC34DBF0516E0402BBDDF524D4B5CEA882F4E5408D86796056FCE392FE5AF771681419BD0BD4527010FC33F879AA9B2B95BC4A51BD7AEC455FF38403B8C15CA1C692C896889A5D734C382DE86F581CF34BC8C51DFB522EE032FCFB0B8136A40B123D3A6AB200D18E79FF5A11818C8249B66123B3D4AA48A3017D1B3936349FD8F1F9BDA1710CF0D23B407C2367C84F8A6FEC389E1093BA70E51602FA2E35043D1AB93B9941F6A83FF14DC25A023F550F853D7A0BB16D4991678E19340D30A7C11FFF8E1F6610222233C691A68EB45133D096CD254A2ECB51B5F0 -MD = 6AE0C07A1D759CD9721A635F2FCAF4EEFEACA179F15A90ADC73D0C13 - -Len = 1750 -Msg = D25B283D67DEF2DD143B65F00401876CB84122B5351C42590D9E23F87F3C222AAF9754B5CBB703BB4ACDFCE294BFBB03990D9D26786B603D6AF0C7AC0CC83C7DBC90FB3581EEAA4EE2326E4DD1C06ECEA4ED6D01CB941A40F6AF3441552614807B908F58A0EF5900B2705054C4B599F85D01EA04B3D2028BB9F225656BCCB4B0E8FA36FA4FF4A49AB646C271B2F579D6953C246DA236B189167F5C470439B3BFA95526BB654F724631434B1E040EA67F684A85B3B4F283E185297059603110A40404AB12D4650E662ABDA2BA870AC2C3A3D313815EAD2026A461A8 -MD = 4D24B05B03BD8A3EAE5541A4589F0D3247387C381C6F72F1840DC344 - -Len = 1751 -Msg = 067E8165EFCD31852B49536B78D91461A545C83E6BA5AF83F94E9419ED8AA4BCEAB4835005DA56BA953F4273C98B311FE4EDF3CC0560DF033E696B7C353B404D0BE599294B6301F1D473F5166C91A1741062A56E8378C0E0C0F1A64794C6A178B0BB821C025DC11A597EB1E5E676F8736661E864F42F5E84D1846251CDFA03C7B2D848FEC46CD75E9FE162C08C451642C9578D6828D8BF763F3113089BBC0786BEB3466EDF013AB675B6FD49DF4A9F1E837D53C3D011628B9F206FEF1D9F0669BE2E7A7873B4A68957EE7BA8B0DFC7F6E5093EAD29B3A3049FA3D8 -MD = 9475A9561A032F98E7E487E306865A1AF4E33C70F1591830BC54A6C2 - -Len = 1752 -Msg = C8E976AB4638909387CE3B8D4E510C3230E5690E02C45093B1D297910ABC481E56EEA0F296F98379DFC9080AF69E73B2399D1C143BEE80AE1328162CE1BA7F6A8374679B20AACD380EB4E61382C99998704D62701AFA914F9A2705CDB065885F50D086C3EB5753700C387118BB142F3E6DA1E988DFB31AC75D7368931E45D1391A274B22F83CEB072F9BCABC0B216685BFD789F5023971024B1878A205442522F9EA7D8797A4102A3DF41703768251FD5E017C85D1200A464118AA35654E7CA39F3C375B8EF8CBE7534DBC64BC20BEFB417CF60EC92F63D9EE7397 -MD = A9ABB430FC1B3D8C6CDEB5319878E7B12B118E2E03F40562A376418C - -Len = 1753 -Msg = B0BB9952B8C75305D9ED7F8C402A3414F7DD1353D72E2242E7F96157811488CFDF7E2DF7005090E703CBC7D1EADB690345CB685DEFC764D7E02DB36D196C5E068D06A103BA3B2D6E3C5B6DA7CB789DB167781DA22EECFC2174E2BDFB3AD0434F557EDED255D635ECAF3C8C145EDF64554807FB42E011F25D630FE7C5F1D7B7E582C9A94D10F58C2D5385660E68BAA49D188381AA31D6A5114B08A870735F5C4356F37C9F935609A8703216243C21C1C7E23DDEBE432B1B64266A4D831E2B6F2826955F35AB376D7890AFF04DF6CBC378632EFF128A2E3AD82F494200 -MD = FEDB2A8212285D6C62C56C94CD275A7CEFE5DF6B94093B752196EB30 - -Len = 1754 -Msg = A579FA4FA6B6E09B5809B2EBD750D35A4CBAD3F28D70D808825B73D40BB3C0A749634C0FD7F86B988CCE10B6A54B9CD885C103BA8B019BB7F2D366B2E5478B5AF2AB94661C55EA6D7FB7F747ACCA8E7E34F8FA0CD7E9542B4C4D31D6BD4CF25413805DAB3C9F769D00F9F5F53D74F5B21CAAF8277965A8599E6946E59ECF286CB001CE26CCA3CA96D7F2B483E01492D90EFFE57A47FEDD201C9604FB5D870E7E2C213B298DEB828D1C6170E208A32E8E1D3376DB0033A86F2E4BC2CF2A87A7EE7065C19992FE938CCF4FF2F63C69535279774BDBE07D3161B3FED6C0 -MD = C4B15B7A452E87F3CBA705AA8FDE9A1D10CCC623D82913C1E69275B0 - -Len = 1755 -Msg = F8D48AF2F89262E4E53EF211B891FEF6B999EC4F60EC1D803268526F7E0E11086E3DF232F4A0C4AE9D2CDBE93A2DF937E4AC673CB0174ABA62DAB5219CFB998590E6E986762943D99A5C3B9DAAB43AD333660793017BCD7F8060F85C338A658B27DF2AC36916F9EFC6CADB099779F0DC44803AE8A66F50413FECC75E60C9BF61ED54CAC360FE635588F112DDD2C02FE05A51BFB4639DC1CC970CD5B33DCEF967DE44FECF12F2D5362BD61D7069DA2D3FD0C00BA410CF1916635B1886220CA07D64E126A00C107A7771E251E00DD176146B93A6E23FA2F60FACFD7BA0 -MD = 690D0C6A4CB17B3D84813B3AAD642224B6B0026F8C4723C4E094ED62 - -Len = 1756 -Msg = 7CA20C32E491F1501148E67EA2E7CD36AA5BC7A2F24818554FB7F74A1FC7943DCBA82725C451B13C4BC9E3A1B87F759724BFA5A3D82C0DE79DB7E2E4D112CA7BF9CD7392ED7BA92E9A44CF449ABE096C87E8556A817A400F75855953BD839257372EC32772D10A75BDD2242FDE9773C7B06551DE2F3F25C32BB1C9549E4A16FA45D629D28F21868229A4D22324EE27C207B0DDBF86B6802B9094DF8929AEEF904015D4D127CE3F7966BD0B35AE01F2B29A3A8C867CA3FF0980B812EF2081B43D63EA288B3D736EC8E53093DEAD12AEB3F8C9B1F32E494FCF166D65D0 -MD = 5D70FF058F05E861E256BBACA1AE803A731ABEB9CA1FE840D59B15E1 - -Len = 1757 -Msg = 3A1DB864D72DE4B6171388B5438A7D80C16B93A2C14A9592DF49A2420798FA25B969423BD3EDCD78508AA3268EE37CE5B94396570B819CFF3C8DF24FD57833CB3D0B12F615461205E9604243239968CF78B131E8F1B7DF444B91CD3B227ACA9C2E2BC288B7BCD23F9E5541FC9EC9B2C4ACB08D16BBAF409A99C5D94C6E635790E47427A967B30066826DAD10254CB6D7D59AC8E77020646B14E485EE2602B6DE382E4B7038CD5E68476CD337A77E687A8D60B3E74425E4A38F9FFC9B9F2B912863CC365D12E0AC1463786BDB7081BEE4980416CBCCE7F1A7EFC4EB20 -MD = 6CE1AA6BB939171B5984C7CA9290C67C1951F6843BAB4E7C0AA865A1 - -Len = 1758 -Msg = D9346257711A20A2CE70BBEE79A7C667E787691D9B1526DCE935F897A7B08F10F913D6C1EFB6E43E16D95A2993D945D911EF001D3EF9A902A1F42D0A72763C57FAEDA2AECA9B1D4B8BED766D058E8563365F83593EDABEFB8BF7EB896DA65DD3EF461E860C55390C0016F3B9535AA7B8743D73499D5B6E4174CAEE284F2F272CBD548FC81FECBBB2B8690AE55AE0B9CE920BE03424C94A4C8A6CCF96A11B484F170F5F4C0F834196AE5125E01555A85DB2E5CC88693E7D96E30DE1569E8C1AB74375DA3A5686E57639349A629D3415F19BA17D820BEADA8A115A6FF8 -MD = ACA8C9FCA239C60E9B1E5771906EE5A2C9A28C789BBD0A628164E881 - -Len = 1759 -Msg = 200988CB395E9D56BD5DAAB00100EDC9D4F0BCCA0D080E16DB7A9C0CF0DC3E064CB74C37CAE7B44DC315394C5712257ABBCC89D1FD90013364EBD1A55AAF6C17AA0924697FF58F68DE9698DBE691FC85E8F3B95AEB65CBDB655C5E8DCD929E94BAC3389667A18D65DD9BC8D0EB481453964ECDCE89453260C48B57F8ED5A647987D0EF3E7E045AF257CA60DDCD05BFAC255218D74A101172AE2C4BE286F931EFE855C04F1E0B570E17B70733E2CBEF9F16D5F35242482C098873B24C4AFADE932D17FB0E2A139DCDB0BF98D4FFF5D7E83BAD7A4290CEF7B75CEDBED2 -MD = D8E594919CC7FE00D96B8F3792DEE7CAB5AD5B81FD4AE1B430E639F8 - -Len = 1760 -Msg = 7145FA124B7429A1FC2231237A949BA7201BCC1822D3272DE005B682398196C25F7E5CC2F289FBF44415F699CB7FE6757791B1443410234AE061EDF623359E2B4E32C19BF88450432DD01CAA5EB16A1DC378F391CA5E3C4E5F356728BDDD4975DB7C890DA8BBC84CC73FF244394D0D48954978765E4A00B593F70F2CA082673A261ED88DBCEF1127728D8CD89BC2C597E9102CED6010F65FA75A14EBE467FA57CE3BD4948B6867D74A9DF5C0EC6F530CBF2EE61CE6F06BC8F2864DFF5583776B31DF8C7FFCB61428A56BF7BD37188B4A5123BBF338393AF46EDA85E6 -MD = 4A7A58B337872189A06B53B6BCC50C29EF9D0BBC491832907AF14EC8 - -Len = 1761 -Msg = F83DFEB95ED2CE9382DC80FA8025D5C20014C597CD70382655A8B647328A656E7552FFB590BB9F4149168332ED4EDB0895FAF01B3C957610164A19B0C91FA0A8354498FAB810B835B7A6F46FBE555B2D120CBA7E86C347F3905882DE7D1897984D04CDC39121A7806EAF90419D242849F98FE519439B1EF88980C28F3481B63AA5434E05EAFA90C5A5A7BAFFE92A6B489689CF157E0587EDCFC4061F367482F4AC8D0374847BF2328F409C481A025D4998FDEA0C84F20BF6EEC3335582FFD8C5ED31EECC09216F55D559B3570E423BA35015E52A86BFDE90A7ED981D00 -MD = 4435804998A99D0E949396A6BEF18E8CDCAA22C3B37553FBBBE00AFA - -Len = 1762 -Msg = 7C2F7C86D647031A2D9465634783954FAE406A4CFED02B9951F64687F55FF5DA2D6DEFC329E5A6CBDE17DDAFC4D6AEFE552FD66829B1D3B218CA430994C475B0A74B64B1E60F25885F0A4DFFC8F6C5FB9CCFBE6B75246764F2B3A743F911113F6CCD42B3DE0E34EC7C50DF188B2771B96E1979947F2B53E8F2AEF409BFD97E4FC569E8067465E5D2AFB99FD05C4EC5FB6C033DE47CF0C4834D135537F4B8AE0CE96B2048B25D10550585891BA9171FEE557E1C0F03D589FBD77D446D1823BBD77494A93C749AECEAC1E35C80B645D9D935F61B2DBD575D94F415EAEA40 -MD = 96F61F8D2C6151FF4D0A81BAE0A51133BEEC37510CF32477D8A2CB9E - -Len = 1763 -Msg = A900BC22D5490F6540345B762F5329FBB563BB48E9A443AEF9CFB0E4044E53F88832F3C660E9D057E236E9DAEB95FF496CA830231DC2A84FB5D8598E259DE4EA42D1E98DD7ACB604ACD9F758ED08DBB4A8B8CE7CA73427B77DF31B70AE9A08E2792FFF16008796E0D7C048E575E2972D71A6A07707B34CE92CCC9E1E7793D3C4BBE233A42AEDCE3F950254AE25588C65B313505A507E7819B4E8437351BEA586921D53F5C29A9FFBB16D34CF5826B33E8C620CBF5CE7F4D91AF9E04BB176FA56443D3B1F97036DA112E236304EBE8888BC4D14212FB65776A26D976DE0 -MD = 3780C228C1E52BA193EBAA1994A72125833EE471FD1AD4DDD203E1D6 - -Len = 1764 -Msg = A8B4422DDEFBF38A277C587515DD63322690FDE56E5D7EDE0BED671C862AE75EF5906F8091B8FD6FCE7B0A41DC98A09E9326AFF348B59A81D898FCB4F2204E6F3547B9F9F6B127BB66793997C93922A6E65835D33F59E094E055E84FB6334519A39F4D22B2A516268768442D56CBFFA087BB10487BA5CE886978C4141ADECFDD66392F4CE557CAB50B398A3EF252234ED711D0CCB3268B9658560B33C1E90CE47C7054B92DFA052BB941154C4C249A8EE2BC71D54884154D28ABACC62744B5D120AD291CBB93834557402CC01F9E0D80AD269485171F8577D878EF6D40 -MD = 676CC7EC8CA7795AA39F26A9E1238AAFCDBC936D8870AD829F32ED81 - -Len = 1765 -Msg = 0B8736AE4685DE67E038637B0F0E13DA2FC538406DE8B1CBD84E2B93AB3C566788B17345BF1F75AADFA74B9B57880DB3B7DCCFBF692E833FCD637C067C44BEA40A64A76C1349029FF550D0AC011904E91DCFA3569FB6BAC4862D0B1FB3DA23F88DC5EAA7491EDB68DD38A53997E3B40B2164AAA7D77E8ADEE5C48DDC40B4DDC99D95E810D9CA48E42169AF572174EBE5FF0FEC604C0914F695CAF83BA0F4307460D91623B107C110E847E6834324DB0E5A49A948594A0BA3557003A3E44B41262F6EECB7EA29EA272DF0D1F32FA2EAD1A03305639C8D4552E1A06D5520 -MD = 63CF63722D1E6154606064BDEDF1DCBF5E57AF1707AA4EA1D7C76722 - -Len = 1766 -Msg = 8472162B8C5D55A99F235168982A178A2F46BB53CE1FEC5E3FB51F62C11C2D7EB770F5BAE3B1D66B10789D28B5249209608D28BFC5D0092237411676DB9ECBF8109BD8AC577127481260BE41B5772EEC7AB7714FF05EFD0D9FD6A1318AFBA473982563E50B2A9B788DA93C434BE4A9286A2B6DECDE6B07AB4EF170CE5E49835CB67A9684B9BEBABC9FD3E91DDD6E36F7D712398C5DCCE633310F7853176926D687D2C0CEE030797C2A78625D92E85AA2F6EABD22142C2445617E54CC30ED9E3364C69EF8B5C8409F350ED954323BDAAE9001369DCE3861A4996D3D0D18 -MD = 0682A407751CEF92631BBA83B0F2B7905AD92EA85909EB27B90D2C01 - -Len = 1767 -Msg = FBD1BAAB1A2164DE65B47C947571C963E46500CFE29C6E2D3C654EA66600F2540FACFD02C2E12E8207CB2A18830C2CBF1CE4E2187D5A1FFD830CB3AC60B8F1C108F632A232E92132F673264983F1682A89807774371DCAD3881F6DD21D00CECC9298285AF4393FE9870603C7E85478AE4C482E27164909B99FABBA5EC6E6C9674A16D0F4CF3D398BA2E94A0713BB15C10004554C88CBBDCC957ADE527C8AB091A23AB05320CC0EC3DD8AC7F88FAFF3C4F9F20B2A1875A50FBB7981469936BD59CCDCECFC3024B8295E120E1C5B9004F23EA1556A860709908955AB51A2 -MD = AE6F9EEA4C772EDE89AB2133844E39525D711191D6663E0E9343F43A - -Len = 1768 -Msg = 7FDFADCC9D29BAD23AE038C6C65CDA1AEF757221B8872ED3D75FF8DF7DA0627D266E224E812C39F7983E4558BFD0A1F2BEF3FEB56BA09120EF762917B9C093867948547AEE98600D10D87B20106878A8D22C64378BF634F7F75900C03986B077B0BF8B740A82447B61B99FEE5376C5EB6680EC9E3088F0BDD0C56883413D60C1357D3C811950E5890E7600103C916341B80C743C6A852B7B4FB60C3BA21F3BC15B8382437A68454779CF3CD7F9F90CCC8EF28D0B706535B1E4108EB5627BB45D719CB046839AEE311CA1ABDC8319E050D67972CB35A6B1601B25DBF487 -MD = 808E01CD273919BA1BFF011E0E7094EC6D5C4962912B08F11965AB58 - -Len = 1769 -Msg = 362A8F973645373B80C928F334FF23B7EE402C2464CE49A86EEC3BB5275BBA3793BFDE3B7981139E0C208F4A5E46D16C22E95FF3358072478898138DEA56910522CB6827F8A6733C8B401C65F1389ED4E06FCD5978348C33FC29BBA2858CA06116753F1DEBADDC89DA4F68E6A8510459BE5C5576EFCDACC4F0FE545BE377620F75C507E2D4F32098B30BBDA06D69919C9E313C1D402462A4AFCAC637F23B52D247D6BBAA483D3B350CF006169FA9D7A9E94C1B103AEE8F93ECAA91EE0EB8224B1CEB5F87B4C715DCB5BA9F534F09B8231E4C5F2C5D54922515799A83B600 -MD = 71C850686A36C0DEFAEFE668A404F9356763EA1B02215BB3EC0BE932 - -Len = 1770 -Msg = 1CC22077B4338E60F383F43C1F64D73C8877BF0879F4EF0E1EF4355AA96F40CD5FA9FCD75CA20E7C52C072F6FF3C0E5132EC69C5339BD30CC2F0D6779DBB576C24BD4C54D64A745280A9FB83FBEE787713DE725475D697B2172D87A194E1EEA61014222C518A23F4D67C604C9742B0EFA8F82BDE5C2066540E8593CB8D3AE8CA62844E9E80CBBC01A70919E7551E4ABF9789DAB9A3C3F76412F72B0AAEF0EB78BD18D00817DF1278F19DFE9E4FDA40C73B029CA06EB9F7B6ECEE3CEBD92D51429976A8F93B75993503B4764599A1153598FFD267E102AFE4EA304B246B80 -MD = 7200E8B30704A517FAABD44870126E7380657B568DE1A078A10EBCEA - -Len = 1771 -Msg = ED975907D6BB37C0DCABDAB298C7E9E174C9BE1EF386D1EB2ECB82FE0364DF8503E3568BCE47AE0873AED18F0B8CEDAFCBA27E2ED0892EBB31F49E26139A61C0FCEA7257F8D919622DD325F0908D27D7A80BE461B2129E462B8F84EFE42331DC2CC4C8E5AFBF339D5D1C0A087E444D6E432FEA224051ED58B4BCD839C41FAD6DDDBCDC3EF3B9DD65A91ADE9619C5BF90469C4D29AD631B9C3F7675BE22D4D1369384F34094C9EBB255C4FD19117278A727AEE9BE8A37991D1EF430952274446DFC2299497B4A32A18594C1BAA6E993906049B0DC9B70DF34F71C5F7CAB40 -MD = A5E616E0F0744E580FD7FEEA970CE7A447EEB5558D2F87E7B5413D70 - -Len = 1772 -Msg = E5C0FBEB6B9B24FC8D6AED56E9B813E0B335159619E32279D68CC1A60A32A905EE810F31D79C65F557BA5349E2076F5E86D3D0967BC67A1FF4D67E86643E79267B0547CA98C484D781F621545EC35830FB4710D87FA5ED6F6B0C7C3ACE434D71F6B00EAA423C37F2841DEFB2F3B76387ED86B94A7780A1E67458A5362B281A19EAE50BFAE97C9B116AF64E93086500978BAAC32C989DBE68D2BAE2EC86048A56DB8EF1C42C7B73EFA712E73CEFD9711F22573C00F03BBCF43CD46A8F08015A6450B68BD234482B8AD1F87C28F3629414740615D6A631ECF5AF486662C6B0 -MD = 95113DF0FCF45913773F73CE684D3047FA59B5864301E9CE71FA5CDA - -Len = 1773 -Msg = FFB110826A187B8217E127508F7FCC8D047F91228778BC82D1CAC8EED4503159CDC07C9BC64BD7AB4D199B9D058DC48AC77868779458DF1B002FECF875782C9E305A682C233FF7B3428A3F23BB4A60DD32270238DE49D4973031814FF2D7EDFB88482951025A51358BAEDE5AB72968883E906B65ED277C934F802F1B372959A53E9DEA5FE96E2D17B2219A96FD02F8AB193C8B570A4D842DCA0786CE0D48A5208C2E0AD737163703CD1F8573FB910521C746E79F1EC6FEDA7503264E117D9D9F9AE784B83B8425E714EF0001F91096220644156A834F1EC08C2F1C035310 -MD = 71A44C7A2665F7F9EDBDAB992A7216F1B1F4183AE87E2E4B0E2704B8 - -Len = 1774 -Msg = 858FD6156E56C400E14D20C9797E5C3C77DA1FEDFD9F78A668223890E539A642C032D54BBC3DB3D0523DEC2B54484622FD1E552F3D13412D4C239072046C26B6C831B936E64C539712EE9C7913287E51E2701664E8ED5C3DA4BF399B8EF9E16DE5B8E20A07EC662AD3C85F93E87E06D1B1872EABDD98CC6DDC2261AF5EF3E1B308AAC3B1F6E5586988335A179DDF710CFD0E4404A0C737D5DFEEE0ECED5B622AC2C5C3ECB2121D56B7B2F556C79C116607577B340588485B89CBEBF2127F474EBF2C0D381450A5012963B1C94AC794D86AEC05E53420D9FBBD8E719E5974 -MD = 5029A2C4C3B89A21A537269C660F5495134E2E0EA3A622CC07960C14 - -Len = 1775 -Msg = B8A81A70EBAE566CBF2CDBACA0D32F504281A5F6199E2410009F3B0EEAE3E6F22DFDC976DCBE56DDCFF18560A5880827E13EEE8D3E8973008E7FA21FBC9BC617909648D30552923B304061FC0AC5DC4B9E9E0D6C7D6C0DFCF14A7871C88EF98D6354226F7665CDC7B26AE9D5C028BCC3394DEFFFB09C5191701EF82CD111EACBA9FF23D943A9D93879A0F4F094A4A0C3B6524F6BDA783A3A1B571FBDAA5CBC6A29616B86F0160361ABD99175FD24D79A87959B98AE7DC0C53FEDB2FC065A2D0086C4FEE596F8A047DFEC8C9A24353E60438E6868A695A66AE1D1E3425384 -MD = AEB0329161390CFB74C7C0F485ECC992CC2D74F0B4752072E051D946 - -Len = 1776 -Msg = 988638219FD3095421F826F56E4F09E356296B628C3CE6930C9F2E758FD1A80C8273F2F61E4DAAE65C4F110D3E7CA0965AC7D24E34C0DC4BA2D6FF0BF5BBE93B3585F354D7543CB542A1AA54674D375077F2D360A8F4D42F3DB131C3B7AB7306267BA107659864A90C8C909460A73621D1F5D9D3FD95BEB19B23DB1CB6C0D0FBA91D36891529B8BD8263CAA1BAB56A4AFFAED44962DF096D8D5B1EB845EF31188B3E10F1AF811A13F156BEB7A288AAE593EBD1471B624AA1A7C6ADF01E2200B3D72D88A3AED3100C88231E41EFC376906F0B580DC895F080FDA5741DB1CB -MD = DCBCC30B6909FDF00650F1A10CFBBD419408F9D37F378C5CA693B803 - -Len = 1777 -Msg = 689E99F0F012A351D6D4C65C6E45F66F75133492B96CA3FBD2FAF9C7BD0A064B0272BC6FA6E06E0D6C9A40F952D3CAE3AAAE8D8E45B78B7DBC4AE55D55977B77855867A93BAF38D6C1EBB80C3FA2D64417412822C5EBB48E39C0BE2D1ECD8D7B32E9ABBCA89BFADDE5B690BE604E5D636D1E14D7CA3600D21555526D89479E0959D7476D25FEB82C9D07A51C3A7473D6DB944AC3E272DE038AEF2CED6FFC7925CBE5CB28808B0481C6B7CFA7FB98386B3E285D1C27C4CE95F043AB15D2599BC146A3213B49ABD62622E9B8F004142402BD6FDB22E12C78BD2A1F1A79867100 -MD = CF86E02674BDE9A8D15C68C03E568E1F637EB58AE405D785B2028176 - -Len = 1778 -Msg = B5EE16BAB537B6C45B4F6A4037CC7C7AECED7AB9BC6F64D5A84B0993EB079A49DB78521DA17F82B6573A1E1C17088CC249E3860A1C775DF37E3396A0DF546FF0580F7198385046F24A4449F62421397838D1839BCB0D1074FB0B130BAE7C6770D38B5349765DB7480EB42F3A644AB106DBEECE2AD154A849F65F8206DEF6CB74E8D18949CDED9DD965382829755700271DD8C2128B6FD4F73741D0EB611EC10767D8C362586DB58AB5952E8D40D739063B838DF5F26E719B777A370DD4B4598C3F0012F3907EA5445CD43EE622144B3E8A6F5E7A95288E58EA31D69F9EB200 -MD = AB4B1F7CDF2DFBC289147504A2AD36A9C08DE6F640332424D229E7DA - -Len = 1779 -Msg = 59E5284707E07BAC72F72F9C794598045B6CDC1B84D6868F41B9C3F56BF2B8B8066F3A4FFDE362D5F8C9165D0F4F2422DD961B510C1FF30F1522044719A7843C5E2E86462F34D011C90382294E1262BF9210EA74E6EC20A341E1A61FA695897D5FAEE35AA02879DD6E61C953DE7A948F4A6127412A905A7800BEE515957F63ADBAA6917C60DC47D2BE0B9E7D2BF5DA653B79096E266B8B0209AA5B47AA547F0009F4E3046D130D0CA7BB80FB3D08602EBC52AAF4326F9A3A090ECC10BA3E75887E899ACA9E7225591A1A9818C0F942E24296C4B92A94507F982B7806074220 -MD = FF3489C8B5E572B3BE322A65E821F0FB05DE0BB0D9E0EBBFA72C46C1 - -Len = 1780 -Msg = A826E94F52AD6F99EE16FB3C8176F742ED6128DF75F5946979DA9F3465D8EFEA205182FE62C0AED722922EFA0340AC02261E94B520A016CD0F9C5527663A4012E2A8CD1F5D5BE194693AF7B0FB56CC63BF67E98B3DC891B362FF58C0885F72945FAA606670F4FCE2D0EA0C58146FADD1AF2D722A8BE13812B875A4CA7776D548C52937CCA376B06A72260D353B39E85E64368C0185D154C91887B41CEA32CEA0F319E915F38CAEEABE01C47DF2961B28269B260E430DB9CCB8605F99D6A534B5DB5A079508E726135D73BB462EFC3AEFF8142FC389865DDF4662EB42D22D50 -MD = BE0CAE616790E37C7E03A143F736D1B83F01AF760DAC63DAFAFB496C - -Len = 1781 -Msg = 596FC0D7AF7728C870648A62AC2A4E20924CFDFF4127378AAA6A18FBA54C9D572E7E79039D4C449458A36DDCD5AED4FD463FB207BA99841BDB8C9BCB9AE8AE75E03536BA2A808A32A8C81194C11E8365996107CDF410D2E5CFFB2EC9E2297FED09154FECC91658B9386488767E6D9501E50876EE4373A2C65C7A5573F7F04A46B05B82ACC35151A66D610278DEE87389FD1CB125FAFFB00CE75F22F39AB08D13A8428C9C59C1BFB974759542EAB24DF016C5C231CF504A2624E138F6304E0F52CC6B3F40645EA0152C085250367C889B786FD3B8B25E1D6FB01DDA18694470 -MD = 17A333585BCA638DFBE0F1E4B0560637FD09F3BB9A9770FED101525B - -Len = 1782 -Msg = EFB3D29588D15242E8BA1350B47160927ACAA45EFC76A7F49C4A645493A0E481263CE4633E9BDB4E5F0AF7A9590ABF367EDCB427F8F4356A69856866CB677970E229D34E36796F78C75BA454217DFA3C68891588BFD38D0444C89734F58378E8748E1A641FE0912C8767CA3F2CCC9E8F4EAABFA09297A4633EDDFD420F0182BB916AE6B060A3C03D754D6AB223CA8914AAA0E357FE80A0BE4ED410C80DB9FCED2E57F46B5AB8BDA63423D8A0C03E113891EE6B5B7C0D336157DAA8AFE6A944F5A121F1944A37399B930CDF53F84E0C66A4B77A1261187686C8F7C2F16DECF8 -MD = CCF85504D3E3A8EC778B6E4788F3C0E406F30190090643411E624F38 - -Len = 1783 -Msg = B8E7A79771D4F282C163A1E2C72A0E9AA1B51C60BC857DA2925E30678F8AAFE7366FDA06CAE7B39F80C17136C990734EE58674AE4200F847C2AE1BAF8BE24FE7951CDB7573EF0F0173E9372C9DF3A5C0334E90636DA48C23460145D9BD486DEF39E4FA04DE9BEE953919FBCE96D9EF6C73A2D1DC5C5FE20378093A6535E6299585B8C63F2A080BF5FE5F11818824B206AA65AC4B358EB2093A6DBD656BC3D17498C56A36190F76D32FA130B203570EEC3A44AE20F76FB2514FA7B9A3104AE07F62DAA2FEF7387D46B9076A109FD2E0290D0DB3280DE6D72F0003AB3BE2C66C -MD = 20A3BFA2A499BA314ED998E44C9347FD92E790765A24500DDEB1CC02 - -Len = 1784 -Msg = 5AAB62756D307A669D146ABA988D9074C5A159B3DE85151A819B117CA1FF6597F6156E80FDD28C9C3176835164D37DA7DA11D94E09ADD770B68A6E081CD22CA0C004BFE7CD283BF43A588DA91F509B27A6584C474A4A2F3EE0F1F56447379240A5AB1FB77FDCA49B305F07BA86B62756FB9EFB4FC225C86845F026EA542076B91A0BC2CDD136E122C659BE259D98E5841DF4C2F60330D4D8CDEE7BF1A0A244524EECC68FF2AEF5BF0069C9E87A11C6E519DE1A4062A10C83837388F7EF58598A3846F49D499682B683C4A062B421594FAFBC1383C943BA83BDEF515EFCF10D -MD = BE077F12762EF51859B6C520B19231E30442AC268CE4FD47366FF9F1 - -Len = 1785 -Msg = DB5F9F96CE8C4916DAB039CB29B925B057044C126CD116712C4A91D5F0CC3CA08C1F27FCEAA7706D3F183A541210B5D0DA8FD7093CFE660C210B6BC06846FEBCBCDDB9BF68C34FF9AC1DBCF325CA6EE41552D7D28A0B200BD7509AC6147907557C3DA239F86A3A600BEAE2CB5078CAFA77D2479CFCDB13590B90B376044FA4F4C29D537CD5F537BAA1C0839EA3DA3C57120104A3F804641275F8C5940BDD4C81F18B12EAD0B37249CE33B3079622FAB25E174F9C72599B41BC536BBF9749B65B8A9A783907393C1D2BDC437E5B4DDB37E9FA1C81CBD7634AB31883878EA1DE80 -MD = 1F2D9078CD152C12B9CA0E04E7DB1482BDC5C533BF7741B1A2B7D7AA - -Len = 1786 -Msg = 109D1D580E527C36614A4743E2F8B92E13CE86CE212F70D9E08951297EF173298806274CCE4F3AA756F2A6BFA4873322BEF2D2A0C3131B1FE1AFF81874A2A715561310A9CC7D8338DEFE44A27500B5AFDAD4300160B507A2BC58CAEEB3683B9596D822011D0B01E3C314741F3948F9148679B822A55E55CA19901D41AF8195489DE0980A4E0DD892EA9420A60BF83B1203F317C2295CE73CE9FFE9E498A3335B8AC4683E0C17E18D9F7050528469B177F5A3FB4FFA1F88E6A0FAF60C8018DADE63A2D5F0FE8B970C5589ADC8BF706D9B574190963CAC5ADB827F60DB174A7680 -MD = C634D37B2371A9C297F34FCC9161193514A45B21BA0570258358CC75 - -Len = 1787 -Msg = 22EAA6EC79BCBCB54AC77F96F50B5932D35ECAFDF8F1F52F680D29C57E8F6F5C5C456F772A1D2F398CAB6E8487225126EB71AC8E306ADA353FEC4B71AFC588FEA5BFB0318AF87E319C627BBE499A67057FEFC24DAD44E525194DE82081BBACD4911E2395DED81F97A381E13E23BA1CF3F6E58B9D297BAE7B3C3CD224C00F6D030B4658D19A69B0B5965BBDBBE8F8339418E8E28C0BE9D7C7CDC71990CBED39D45D0E423F8F410C306FFAF581A1D73F0737A33334463DCD18054F899EB79A89EC7A99249F06703323BF05952826A4C0932B820FEE9481EEA07A859AACD1991A60 -MD = 23A8A382BFE41AC1DD83C5C96CCD1F2D62EEB64388AA9588989927E3 - -Len = 1788 -Msg = A398525B9304377B97BE57240B5E03932B0A798000EB2387BCCEC628D068B6DD5B4CA1D0FE037E325986A4669EAF2EA4888B6E6D36914AEF81B59F4B4B4C87EB452E88A38EE3FBE408594B5F9991E6A2529E80DBD2F5BC32F8C48EB5708754E8C2D7487EA8C741051DD38160041DB4D16D6E92E0C2158D854AA84832DB900790434C9C6D68C4F0D9BC53B008FAEE397A460A6D43E23AA404BF090D584104A597BBF4C5A9B5817EBD985651393EB0CE96C668045E089C2BF6F8472AD2F6BE0F9D4735428CE214CA1DA70CC4580B9D4EF42C9185DAF0BF5EBECB9EFF45B2C0A4E0 -MD = 7638E846E99BFF0209AB6951971687258DD6455564C466DA9BCD765C - -Len = 1789 -Msg = E6F462213A8E30F8E6C9D36CFA3D6DF08FFC26D96646DFEB1418C8A198FE4F2365E303671389EB7A4AABB4EE3B6C4E86C86198742F76CBFC45AC2153DDF5E672B8C1A8A753E83DFD25E1458ECEFBDB571BAB1D6C5DDD28A1B1184B27374F65C28B9E4529716A843031CCA409D9DDAF6B99FD0E2623FCB96E02D111B61CB16705C5726FEEB414AB259FF86C392E9C5F5AF40357A244EA0BBFE5E1F06510F40E8B09EE516FBAF1C5E3CC44F7755B10BE5DC9EA06F6A25E368BD1324AC64F8350D85DEF415AFF1C1148CE50EABABECF501126AF66C6FDFFB6953122C1AFDE846AB8 -MD = 74B5AF6AA55ED17DCC2CD6B31A1CF8D264B4A1B1E249BD10039B5B21 - -Len = 1790 -Msg = 9B7474751EC3E0BC817A13FB0D8D98AAB5DA9ED6192BBCE3B8358A6B03DE907A7DA7F45868AFDC72A8C178CF893703C9D25B2E80979664868A0D725C4A29697275D51C94E203DBBB7D84768F733CBA856888EBA76958CE9D2EB687A0FAE48353183032CDD560514D01243AB6E0D6DA65A2FDDC9561366025D4BB1CB67FCAF66B11EF599EE7CC40C4F88238B8C24D75E8D23ABF217351935C4D85877059EAF01CE68425AD8979E6C8560CEE26F0613CB0B090BE7F74C1EE2950B134486F9F11E9C911FB7F07C957D1E150C29B938D01B813FE4E99008CA1AE70761AF1D1500D10 -MD = 05385C3473A5F5107E61B5E68371D690CB2806740EE5468B311C563B - -Len = 1791 -Msg = 8130BEEACC213C8789815550C32C2548E750A2516FC174498BB346743379B651A3566F4116291C6C86FA0DD913E41670ED1BFFA3FD95BB8ABAE218FC16C27BF4DCA132ECBDB589E807BBE980B25373E59B3093DA9ECD4303311CD36E800E7029A953219AFBD18B7A68616EE0B372C81319F0238AA6260FD4D6044C04FC9AE7A82CEFF96D518F340928EFF34145817DB8A18E4EABD6401623318198A3B90FDA9F86D93EB14BD976F6E980331A2FD7F41AACC8ABD1559ACF38EEE6407E38EDA98420742F5FA197B577A5EA34A3D452BFA3E77F7C9CE1CA386AB7966C6CDCD0ACDA -MD = 898C77EB795585D3128A4D523DE61BC4ACB8ED0A0F4211BA98D5C550 - -Len = 1792 -Msg = 47B8216AA0FBB5D67966F2E82C17C07AA2D6327E96FCD83E3DE7333689F3EE79994A1BF45082C4D725ED8D41205CB5BCDF5C341F77FACB1DA46A5B9B2CBC49EADF786BCD881F371A95FA17DF73F606519AEA0FF79D5A11427B98EE7F13A5C00637E2854134691059839121FEA9ABE2CD1BCBBBF27C74CAF3678E05BFB1C949897EA01F56FFA4DAFBE8644611685C617A3206C7A7036E4AC816799F693DAFE7F19F303CE4EBA09D21E03610201BFC665B72400A547A1E00FA9B7AD8D84F84B34AEF118515E74DEF11B9188BD1E1F97D9A12C30132EC2806339BDADACDA2FD8B78 -MD = 25C425265AB07D0A8EC659D4D5EE618BDE87003B7255FF4B5315F1C7 - -Len = 1793 -Msg = 27D6EE9DBED93F4FF6F3A7BAF8B72C092329912F4A15AF0EEA52F9E322A084BBD9B406672D9BC94A4A492AA0845E9390F04330B8EC31F2EDCDD05221F4524EF7FDAEDCEE67CF2E44FA2D298431EBEC108750F1CE529319A50F8392400C722F5E53B6D53C63E16BA27A374E99715E9050FED4792682184A5F268DDB6D1625716C2CE8509F36D9AC9565D742759F658A90C1D20AC4E66BF75FAE130114D83EEAB638A4C77B3CAABC4F631B3271805ABFCCA43CE5445AF17CCF1DE7CEC30A5E3107EBED862AC949A163687E309C6F6ADCA442F707BE5957761647AEA187F10F88D080 -MD = E29825571D57A2E60A92BA69209E3357A15190CC98952857602ABBE5 - -Len = 1794 -Msg = C79C9FE2A1606723EC5D8337EF848D1AF1E7A1E856BF25D36464FA5FE65563A2AF9E66DB7D52BC3F2DAA1238CA2EB67AFD32349A70308751AAC7495DD1AE4683F8F47F8EB67BF0C09303763B14E7E56098B4EDAE326ACC8ECF2760071C8D5E953B1DFC4D078D2D1380F93B950D54986B586D61A908C9252ACAAC8423A5406A0DE1A0AC74B936C493D194EE413FBAFC96F3DDB4721F37BC451AE41B6DAE9A5C0A813DAC3062679B0B95388BE628E027948A99B34BFFA65B4DFBCACBF5F5B2A64BA7E0611A8302D18354E297CB3AC65740E060876440F96FACA71B655261A43E6BC0 -MD = C7EE64F45574E11EF03875E82A94E79212C463906BF75803F48DA937 - -Len = 1795 -Msg = CDEDB7F4BE61E5253A46B965A08FE346C388C0F77680B3D402EFCB1013B83CB0F72C79BBB3461890F24634FC48F4A77B4035C2B28AA75AA9EF49FF390F4C3726121A1E4FDE6E97C2D72E51ECEBB76A9750E80A3D6D58A6F3D0709E8362AD005E10D5FF33B9953D45E2AF090654BE13B1D32950931601BF84B037BFAA2694CF26FD6C8833C0AF72FD78AF0C01B301FE9D9265F9B6AD3ADBC0DB1C7C4AC3E6F48709C1B4AB8777D6B5EC9FD7D409BD31900836ADEED56CCFA3985E868C6AA7EF2B8AF854CFF7AD2692EED15DCF83C4D948C8AB7A25F79A83D761C1EEA364059B4300 -MD = 70BBC889DAE1F8C5F5B4F577C85D3C1C2023B33D56780E3208CCCA36 - -Len = 1796 -Msg = 8DDCCD9E22F2ADB324237FB5D57C093280ACD83B53DECA3B914651E8CAE649E2904DB8EB0105BD4E921975D71BD5342060765BA915CE51C0D65BFAE74B52543C32F923E86CAF8D7E2CB19D5D9E935CE33B32FD9CF2E5ADAE48BF1419FC83ADF8ED00D624B4C1001A840ABECE16CEDB785277A1AB6CB02335CD867240BCECD0C200C747E428EFBF82A49961AA30226B9ED910C4B4E8971C7D27B5E2115A7DA0C2D91E15CE6FF4FFAE854FDF4DD14AACBB0A562B03EDDE104CA3F7658A66B6D4DB8AD7428B58816DE25802EA871834AE1EE4CE9A80F5F12826438B663C279B143480 -MD = F8F5998C86B5D4ED193D0DF4EBC904FA839905F75CCE02A4911A9E85 - -Len = 1797 -Msg = 48840249A35C396A5E9AB7C6CD2F0FF7EA3166BE9EFA96532F9E76E58B350595E7885C6E4C236B34FC66A14873F11EE0691DD3843BBE0F38A73638FC8BC689DC42C8A1C3951D94E538BB80FD94787FD58398A8FCA3D8BA0863CA8E6FCA51F01A3370D59A37308BD2334FB7315C74413A02F620F464C819F159C75D3E1017B7B768FFD9FF3B5A6A45C03376FC2E5E08398E23E67F80082C825A4635882D953AD6B8E34DD7236AEA73681AA53ACE2FACE0583B0CFE81C467F49F0E05F9EFEA53C826E18CFE9F4B288F1405485DC207649CAA7B93A4820F640D02C788854F49E76E48 -MD = 4ECE58D38AFC0CE9B359DFC48A75F5B2B32BFC8E1F16AA9103B1BB6F - -Len = 1798 -Msg = 0F1D284ADAAE48146EBAB918BD31203EDD82ED4204FF85D7B0389784222852CACA0D54E415520A5C033711EFEB6B9CFD7FD0B8F1C605C729224357362625FE976A58DDED74D028218AA9099C24A9DB1499BDD9FB89E3A14F89DD1A602E78FF4EC2A7FEE4DFDEB35E0A71E1CA7EAA0010C8EFD92881E420A22C92D12D697D4F3A36B30E2F7C1B054A9865684F855679E9F8B8BBF58E4075085FA2FD27CB57C5A8F6A9D86F081EBA58643956E1680337BC6B7C547B05C7183A1F40D569B15B0329ED82FD59511E930EAD1262AE3A15BB284DA0C99F42615C00899B80C1D645DBC6DC -MD = B45A101A77806ED4BE582AC7E2C6B8DA4A2766F068C2DB5FECD58647 - -Len = 1799 -Msg = 9C9827C405695B340C750EB7B48F70EF04742A95157782810B1E090EC8CF7F1757379ECE9877586ECBE00F25022F962F131402EB9C5FE4BDC739748D340A79A915D11F660471E9B2E833652E07CBA8B5AF1363094AA8086AEB8A46E01917B4A5DC9DFC0F5B93B7E8882FA2EA69BCA02EE516C6AC63C6121A623CD909A6043BC7CE50FD00B706D1D23736C8D9DFE34F9887CFB9E7CEC0FE45BD1FD1C21EAACBFBD3A55CEBFE2AC7D35994380277E178A77242E11CF73D2247E6CC5F2848EFB20FCB870DB1A86AB409716A7D146C10824575BBE183A2CEC05FE923E119DA578372C4 -MD = E5FAF58ECCF91795E5C8DDD351112BAAF6B38E97FFAEF27D62AEBE4A - -Len = 1800 -Msg = 8CFF1F67FE53C098896D9136389BD8881816CCAB34862BB67A656E3D98896F3CE6FFD4DA73975809FCDF9666760D6E561C55238B205D8049C1CEDEEF374D1735DAA533147BFA960B2CCE4A4F254176BB4D1BD1E89654432B8DBE1A135C42115B394B024856A2A83DC85D6782BE4B444239567CCEC4B184D4548EAE3FF6A192F343292BA2E32A0F267F31CC26719EB85245D415FB897AC2DA433EE91A99424C9D7F1766A44171D1651001C38FC79294ACCC68CEB5665D36218454D3BA169AE058A831338C17743603F81EE173BFC0927464F9BD728DEE94C6AEAB7AAE6EE3A627E8 -MD = 046CF62C41CE9B0F54B667558063023F59887BADA9CC288414ADEE7F - -Len = 1801 -Msg = 93E0C330DCB438B4B2B735F7AA4753EEE8123FCBEB25223F98A17F97BAA4221C22F3538F35AF743F5A17660E8E1FEAF0E6A6D17265FD591F44C194C2454BEAE9510014FA5D96EA632A889E059DB6932D327E4BE6A616186612C5724468FD0AD4F2CD1DCFE4E8A2E512815B79D89C2E9878DCF4B5DDD41678B6FB612BE2AC2075DFB3A7B1F9A00A540BE55D6B787FA38E02E084B06967AC8A2351790E88D8632663DD28B6E4CE6BF7A6638630362203974BE186671E76B17C4372399415A2D02F50E82FF4C65C3EA3434207C61035539779E6A91677D29AFE1F87C4C0339DAB2D1880 -MD = 8F9348E0BE6004E320C3E410CC4896F953B8CE7B105251D86613625E - -Len = 1802 -Msg = 0A12DA8B95783EFC78ACF14A765CBB96FD14E7FECAA12F3634AB8FBAA1735B938474E0E5BEF5B85D02CA9AD30F8285BF6D86A5CD8E8E31044A3C93E0831E29BF76BD2122621B3015F37A0C5CCE07F5FD6B16AE6670CD1135BB9BC1ED8DE5FFD8A8E25EFAA3DA1C7CDF7CF4E00713251A7493EB3B8CA59940B4B7831BA83C3C3DAC506086D0892132636F10ADE3EAF2BDC1C81FDBBA5358CA69F5298ADDCF82D4B7657549B059B5C028385A0C6596EFD8746C83032B4F4C57F84802EE8DE0B2E5CADDBA774494F78F9F194DE1097C83E2D05277CA4B5A55BD19EDB6D9CE5A6C5044C0 -MD = 466F7FE8885C49BDB663A09D4D449DC286030F4DDEBC112682ACC684 - -Len = 1803 -Msg = C085E32E69584DAF2D6EF0103E7281FE361715A51E68183D4271C7D8D84431758F42F74FC551CC5AF6907A896D107DB614FEC36C809173B3062004F9DC6E45142AEEB962D8BCB7CBC7E710A61AF23F7CC18393F2281C8CBBB5927BD09E52F6CCBCE7CBC2AA28104294978963376DD564418CB771B78A386DCBAFFBE05C06C814A156DF02DA4F252C00C8ABB25278F87E2704563136EC829C5F92C516A236C68CCB2C4F0611454FE04E1C9A4E85C6C8C52EDE60BD578C999643DB5D929F4102E84667CCC8EEB7B8C2FF2B8F4764D31E74BF2BA36D19D0EDF438E2C814B98C5D05F7E0 -MD = 3B40D1ADF02B171D7787DC7E58B77C871FC1A8B017C63DDD55BB23DE - -Len = 1804 -Msg = 5EE5BE16B15FA56AD14EE25205AE1879BBB0E025963270ABC462BD7CEC673390DA462D2737ABB4D926D7A15E3C5AAC86F076E6D7F7F10C86DD2E62CC856F814394403EC7D85C5326CA8902161C005CF1280F71974F2731F42C4F03B779DAF07610C4A34F1C4EB4044B77546D991EDEA239E6A6289E2B35E53B4F59A96D18FB55A2E2299D6CE0182CA4283444819E36EED59E9FC3AD186F14D66F60ADFB1596AD7AB29C65A350FFB00C58373ADE7787428468567BCB5B3CBFE781E2A69C365FDD5FFAEA902368BF2D6CC53A1A3401BA729E94F778B031BBECDD49DD8391634BDE4B50 -MD = 8464FB1C4E6EB77D43539ACBBB8B7FCBDC52050402771F3F5CABD356 - -Len = 1805 -Msg = B173953CAF23954D0A0C59DDE1C74651A4ACB3D38148F5ACA07C2891A8086C8D5BC8B4B34C7F8BA4F63F313FDFE3C40F74EBE48BE5379B8441BE37F54A810F0809E5CB8742DA8A3BEFA52F749DD6C3296B777E4CC1D6B22810E21B72B7A00E169519627C6BDA77DC9559B87E64282C0045EA13F1FE62E53FB0BAFDAFB0B7C1A2B8105318CDC10A559C32206EA85A79CFDA54F363975B65F91DC2D42F0F02922768E9ECE2789F1FF71486F9B5D7F56104FCF5DEE191D666171222BF47F73E69904168EE565A634B970CE57032B6394BEF82E78A807805F4C39C5D64A29B7135584368 -MD = 7657EE142F38CE739AD89BA979A4B5966136399BEE3E986F7E8119AC - -Len = 1806 -Msg = 30D48650BBDA8EC79A0DD891FD707160A3C5E16CBE1207330F170A5850E8364C6019325A8FF4AFC809F144C118D7012D315B3F4622268FB5F6F350BB5D0048924FBB30A5390CC5DE60F264E183B90F2D38A1E499DD8CD4B06C3C57A70A612604D2F4E937ACB4E23F02C7FCFB73CC87684ED61C70A98A2B3BBE2181FA14879A36EC965229D73DC1E2743BDD285B12A75B924130D630CC2F02D917209AF4775E01B5446FF76D12A2108621D900D7495CBDCFAA64A781A3C33A6BD61653D61BD0DEE7781796404492099CF850B74F5FE86E0C385D5C314B5FD209E8FF990FD76BDE8F18 -MD = 6175EBCFDD04588CF52C1AC6AE7517FC311620EABF135C2F4EA61156 - -Len = 1807 -Msg = 37FF7F5AC736908E07CE01969410B314A031372CB1D184FD683C2FC43A30678B2C3DDD92F040A89D5E3F1D5247DD9FAA9EFB501CFF4F40014EF6508DFC37D410AA679EA3D3D0545189408167C1CB6826F97615BC27FCBAC7DBE5547A721FB92181F037B4CBC63D4609D2001727BA88C7ED78F3B3A50E0EC4505DA4D9BBF6D3C5F854D90128C2106E8F1B4D81C33F67FF804B080EA79285904F4AA71B78F71A8B01E6E728DD55C294E86A0E1FEF0915C1AEA1523DF5B15AEC8874AEDF60CD8F2B26B746A3CAF4A9E60CED23861DD5444128187ACAD282F076C1AE01EC7883AD417BC4 -MD = 561C5ED121BE0E74DA4A78BC371693AC2C832673D9D5B2DD6644D4B3 - -Len = 1808 -Msg = EACD07971CFF9B9939903F8C1D8CBB5D4DB1B548A85D04E037514A583604E787F32992BF2111B97AC5E8A938233552731321522AB5E8583561260B7D13EBEEF785B23A41FD8576A6DA764A8ED6D822D4957A545D5244756C18AA80E1AAD4D1F9C20D259DEE1711E2CC8FD013169FB7CC4CE38B362F8E0936AE9198B7E838DCEA4F7A5B9429BB3F6BBCF2DC92565E3676C1C5E6EB3DD2A0F86AA23EDD3D0891F197447692794B3DFA269611AD97F72B795602B4FDB198F3FD3EB41B415064256E345E8D8C51C555DC8A21904A9B0F1AD0EFFAB7786AAC2DA3B196507E9F33CA356427 -MD = 37E3844080986179FDA99E9B8C54E294643060795B66E810E3E25D9E - -Len = 1809 -Msg = C3166574DCF055139638158B619D5E8A424330DE6518B1B452E359EB4AA5DC5EB051FF8A778305871482BF5AF417A5B9540B9DBDBF5B67FAFABE2B3BEAC0479E236ED078A5D514BE7DFA179667451609EC25C6F89A629A2C55258164ECB8374E91E75649D3713BA757CA92C7E744D4FF66B653679F77CFB3A007467E802701DA3D2DCBAB7E3CD9132061A79F50BBA74359EEF864ACEC727A11114687C35C5605B6B8587B9A57C2C0AF5FC9BB8547A0F5E3327174048576B0D970DF5CD54CEB67569361A1F81329AF65FA370AAFDC05453FCEBC9003FF8AFD9527D4D7EE619E35D2B780 -MD = 53D18BDBCA666B74FF4E4AB246EA28C5563CF7B4F5629CA1995A40C3 - -Len = 1810 -Msg = 56CF4692BCFA741A977A5B7637842054E6DE09EB578CFF84F6E5F5A8CDF06F85E535B35C6E27BEF83228133B58981752B855CB789A8CF41ED956C3C8CED7AE8BA913F41E6A930ED8801C27FD28141EDF70D76AA99DF34E0A2B585A22CC66A60679640BA012668D5B0F1F6D14E160C6490F3B609CC1D34E7A819AA5A65DAE440C97CB68B6CC803D4FDD298C0927B42DE9F3BAE2DA2C9A455E1BFD8D6A004D594318557EB28C0659C1BE67F539C79F0E915834739B3C8EE6B1F4F2B3E7E708EFA4F952210701CA055425EC7726A585233145CB881187F2A3517D0C15CC788E49B13870C0 -MD = C474C1E0EC2C1A88C721B4DE5D2AB73EFE27719BD5D76A7DFCBD19D4 - -Len = 1811 -Msg = 26276D9B2F77FA3C271F2751245817DBCF869BB0C43C5E64C10800A438C8B37463DA85AB4F64C267BD4E29CD36D53B27D41FD3049FB430C7BB5A975675424D277BECF1872F85A08FC6E86ECD21140876B233F5D29325B578662333DCB18B16394C5183FFA25FEB71FA74709EA089B7D70D6C9495D347288D69DE56CCBF1936F2E96F34B1895E275CA531081EB5719B8B58154A09A2F8ED0C8CED5C76BA3CFD8ECD799447706E8CF3B10F8FFB0AE3A653A6273478079815FF9DAAF2D14F0024AD43DB447B41B28C35C08B7A2405C82581000F3C317DEB6412159CFD4BDF201D0F1A13A0 -MD = 3123EBC634FF135C82444894E0BC25F1C6B9ED1C2E35CB2FDDD948D6 - -Len = 1812 -Msg = B85BE89EB4D326C87509C30ACC237B17A04D9AB91C1F29949C19F300B7385A5C248AC36D3098EC7254CAF61ED0A9F0F9A6E05DF510A88D38E9BE6981746F43589AAEAEA8FA5311F57942597BD048222EF1F490D818D162092796863ADEE21E25521ACEFA7E757E02B42F4A2134E1D69929D5BEA7ED5C33798F6DB7C479B6D11D085C00A0B00F650ADF38B56FC8895739B5F7E5F475659F08F35244189622B0D9634F390FA84C5EF41162C6E330C04137F1F4EF16BBF76AAF1B99E5E3823242CFF278E8140F350E04F71571C7E94647A8446DDD6AB32FDD16D25ACCB7323FFE7D5857E0 -MD = 7D0E036C9C4CE056F4DEA23C99EC5429516CC071A69669A9D85CF49B - -Len = 1813 -Msg = FBE6F14FF1D32FAFE0BFD62E3B16724B8193F83BD3A4F8ADFD89A3FBFF74D2BC5D2933A671C1B1ACD08E1EEC94C4824F6C591259E6A7418F39B6AE225C78B0DB5B95249DDFEAE8D61B3B8D97795CCAF47A19BBC4AAB6BD563CB82854D0E0BF63A60BE398546DB66893F1DF6751F3089EA3820541001878819A7522050A6F2C9C3C75474F5FFDA0CD119CF01CA322616178B3ADEDB432D8EFFAFF881E3FB08C5FF0149CCB1573B496EFDC20B38646740A0901875A7643857CBD49CF60935608ED6E1F72CA61FE6E48CA17BB060E34DDCCA119C7F257C2F66411DC3D679558F884706F28 -MD = EE67E2906D515A97E9A3A3F3A0110C21C6F81503585DBA73BCF0D172 - -Len = 1814 -Msg = 383D6998DF151E192BDB63C6E79DF5BAA9D7D7A55D895377CD6A0C2BA9A4325F9279AD1777E4A63BC48BCD651750FC2391BA52C35B8C3F83413608277888863668A8E3915286D6724B394C872F672C39CBBB37B9F9117DF638A828B87D97D303580A7537EC381B31F5DDE578B0D577F4BFED8D222A4FA26FFF77785A0F0C44B21939A768BD1140E642256C9A0226A355F06BA02662704EA757E6FB9DAA9338B865A0325A158A4C17FC7D9C0028745BFF71B244CD8AB1DFA55D9F979450834E2E98E95961786253B07BACEDC6E1249FD0125445607091F5CDBEEFBBBC1776D43BD7DA7C -MD = 8A88A0DF1D2824BAA9F449C5EF598D7AE573B80D9A131EF5E3D96634 - -Len = 1815 -Msg = CCFA0CB8A230E9E9FF0C09FAD375CFAC5E815A4CE1EF6FB81B6E37BB199559C09DACDFA913DE0FCDD0B3628C09A9F488C846AF0D43DB7A4D2AA79445C7E6A6FA7143B0B62299C8BE6F04F9E34E8DD30C63E782B3D27D2EE4ED1CB75468A7BA4F66B061C3DF16587E208A6F3A2F260983941271C3CA7953EB4B7F0E8E4C8BE1827C652B1DBC48CEEA4FB39F0B0FD6BFDE38E273B75E6DF8509E5093A6C9E1DF9DB370C6E6F57970D718F8B934AD02D0E27C31282D1C90E9AFBBFCE8053A862587A3092FA400F6CC70C8D2C47678B40A4BCA21A1E881895717FE6A2962A332A89B7BF2FE -MD = 6DDBE3A9F01F8B664BBDEC0980FAB9E436D0CF84E6C8D43B40E9598D - -Len = 1816 -Msg = 23AC4E9A42C6EF45C3336CE6DFC2FF7DE8884CD23DC912FEF0F7756C09D335C189F3AD3A23697ABDA851A81881A0C8CCAFC980AB2C702564C2BE15FE4C4B9F10DFB2248D0D0CB2E2887FD4598A1D4ACDA897944A2FFC580FF92719C95CF2AA42DC584674CB5A9BC5765B9D6DDF5789791D15F8DD925AA12BFFAFBCE60827B490BB7DF3DDA6F2A143C8BF96ABC903D83D59A791E2D62814A89B8080A28060568CF24A80AE61179FE84E0FFAD00388178CB6A617D37EFD54CC01970A4A41D1A8D3DDCE46EDBBA4AB7C90AD565398D376F431189CE8C1C33E132FEAE6A8CD17A61C630012 -MD = 3B503D615E54132B42CAC1A0450A0D7E2EDC63ED87BF109C509C7987 - -Len = 1817 -Msg = A77640D2D35F23FEF37D6F971F5AF60A63763E74ECABF3AB5393AB48793C0B8B25433B4ABF21CE1C5F22A8D2386FE9D7AB860E6331938283D2833A6D0390D29BBEEFB32C2805EDAFAB62F01B38899404A386DBA844B93EC6D70DDB3BB2543B41E3C32861769A27D020EACE26EAAB0AFE700D1771E77E71105812079E77B7454A9D9D3F449CBC4A68A0DB6E961932371B39318CADCD025B6F477B7CA85AA86FF6465669EB79647C850EB856B57E5B16AD90E5EC8C710B4C9F45BF02331A72968D86DD938091C4475CF88D31CCB41389CFEAFF34A7809B86D140B11FAC7DE185A40F88C180 -MD = 9C171BE92FDA1F16190D0D5FAD82403A58E015438C082AD8E417F666 - -Len = 1818 -Msg = 53EC7B6F97B359A2263D6040F3260CA95752B7D291A962C47BB982B6774CE13ADAD766E030ED85C982F166B0AACF9BBD0F51BC0AC322FC6F65E46D591BF86CD7F152975EB03CA48F0075F0D06F1EC205B42BC0A6D25B111BC475515CB91F4D988B1FE94DD1D5721B8CEB73DE17978DA68768843D44D6B02032E9D51F1DF2CEA5FC1DFCDD0830EBFA03A145E0A794E7EAD3D2B322FDC1DD6C6F135CCA1E73DBDD42598BC0C78299C6EAE2DCD675538F96CA9643F70B094165786B98B96339DB327532B84D789CAEC650973BF105A35465B8BA69B44DC991EB66C2C29139537066FE846380 -MD = 28E458ABEAEFCCCCFF8F1CE945B40A1E7F1850F50F92BF75C72459DF - -Len = 1819 -Msg = 9D4DF0D98116F5F8BDFBBF3FD3AE80B980EC6BB9AA27D05CCB8EBAB8D7E5792C62E5F2587703F74F51F9C94AFE7984E756A5910397827E0F3A86076E2794DA28499F301F251854A0FD444D3BF201BBB50C4761E61FFA99CD21F43DE1F6E059BDCFB7D0E216257B55EED61BF5172542D51F9AD264DCD1A89D473CA615BD6528FA5BF330E5EFF67B5C995741BBE1B3721B832003C17488FEF20FAAA29B57E27DB7B8C27792CC0A9D8BECBC0660F52EF67EE6BA3369B1B1681B84747CAA4BD730A6A1B246FBE0C14140E0A3406D55258B8F1C851B181112F21183F7450F93215790CF6BB160 -MD = FD30DA65BF49057DE825BC9B092E4330CC56621D6CC3D09900E43BBE - -Len = 1820 -Msg = F14B19040E8437EEBCCD46724A7A2461EDCBCE33184B017311FB3D5871A8D6A9FBA5B93100F28060ADE0A6D4B7CD5EA7C39E218174F1F8E237BB5D43B51F12176000EDA4D70A493B957657EEA9F742DBED3486CEF3901902BC4EF4A6BCE18A6EA2F27D7EB51D32E33E2CD928C5B1C31A5C1FCEE30BE01AC70CFAE540DE372CC176A1FAA63E354860971B595D2280387DE39FBB12E6399448121FD265FF47B5B95D84BBF871EE23080912A2C841EE86BF238D2533931BE9ED8C3B8B194D81A9C358DEF0BA28E01E3008C857DECCF0D1630789782D13A414849A292AFAEC50872A9B2767C0 -MD = C93BBB6E8ACE61F6B39C47DE740949DD2D6141B34FC6DD64D26BEDF4 - -Len = 1821 -Msg = CA663A31D8D4362E485F1359CCBD0B021EC94269F501F50FA6C4FC6B9AEA3BF94BF8AF5EF88CD81355002BC33D1938B4B3F3ABEBF6A4E0F47E63D6F41780C9A9028D6A99FC1194097A8DA3DCF8CFBE40A11B1887C88822B69815FE28E2F90D4FC09229D0015F0587656BFED67CE889F375045883D86B0341A76E2E027CFC621A67A8CAE74209FD5BBF12212902F36A9101E02AF83B82A28FA99AEBC367CD46F2B648AA34F497F5421770D62CA47C0F6127CF3C82E77CFA398DA87DF2AA9C99516745ACD0041D45C426BE97EE0757911931FD9E7E58E26EFAF438B812FF2E52E6D17F3210 -MD = 180BC3FEF81BBEE5FCD3DEC91E9EADB7C92C81F53410F776F492B5C9 - -Len = 1822 -Msg = 123F3665D10C6BE2668F87C7BA72F688E549B1A41D097F75496DE8AAAFECECF890D8EF3F4D130B0F4A9E0BF46B29AF25E7F0592F7EC179CE94151800E701AEAE9DE620D625D03B12EA8ECFCB37969493708BB85E536F5E16D37F0CD06EF861945492A828F345528407F457C02B3D60D3BCB4F49AEABDEA5392FC5CC94A97E7A7B41B1893EA99BB80D22D1346279717647ECF6AE2311561E834E5D112F3540CC880E9AA0F582C64667E8CB4AD6D5C04BE1557F6A0A56E2A371456499B8D84717E0510C11AB67CDB756783775F6B9EC11F5925981BB5D4DB7E35131679E55478DE329D3A68 -MD = CF79B47BE23DF829FF6F23E5974E9269F80B6B3F1D77194C00BC2CD6 - -Len = 1823 -Msg = 402643679D796742D356236A01DAA1AAADA71F66D90B79C1CC220FB33312650A938A948980B6D2B5DDEA9122547BCEFBF6D165E29C8656A5A3FE55FCE33CC96AD45B98CC34D6F81B54CA7205182D623F7A86E83043C2F4B58A8D129D713D5F41A5465C9B695B2100A6369D57C34B33E2578C313EDE53ADE7C2DE3A75095D1DE9BA629E2E3B90062908E691CD94B5D240E65837CE476E137ECE7B7818579AF7FC4B1E10513BEB176A1BD253EB80C22BA8C60C1A1C5EC316EBEA8828202024A543D289DFAFC4DBF1667416D4CA5AB8D6E42D0C1E9C9B2B40751D20ED4A4FF7E2F90784EC60 -MD = 27CA8F0FB282383DB4D93ECF41C8F371AEE1BD5FB9315CC9CA3EA79A - -Len = 1824 -Msg = 0172DF732282C9D488669C358E3492260CBE91C95CFBC1E3FEA6C4B0EC129B45F242ACE09F152FC6234E1BEE8AAB8CD56E8B486E1DCBA9C05407C2F95DA8D8F1C0AF78EE2ED82A3A79EC0CB0709396EE62AADB84F8A4EE8A7CCCA3C1EE84E302A09EA802204AFECF04097E67D0F8E8A9D2651126C0A598A37081E42D168B0AE8A71951C524259E4E2054E535B779679BDADE566FE55700858618E626B4A0FAF895BCCE9011504A49E05FD56127EAE3D1F8917AFB548ECADABDA1020111FEC9314C413498A360B08640549A22CB23C731ACE743252A8227A0D2689D4C6001606678DFB921 -MD = CB40837DAF4A882538464DEC0A999DA482B4AAE08708EA6D5D7FF461 - -Len = 1825 -Msg = 26BD6C97E9E30DB3DB590A76835E02AA4BB89990A51C76F4F91B7A0B2AB6FE1C02AAA8863B4B3674F9DEA77050C6CB545AC5EAB25D1AAFC430528CCF416F1FA1A8EF34A3797E005877D37AAD7A0D849EB4A6CF080E0DF10EB2D33CAD7F5653CE49177DE297119961A3C6A9AF7557CB33BAC84441DB417B5342C2F92E8DFD1BCC93D2653BAB8870D1EDC19033E9CBFACFD107FAF39156F1B54B41F703B3168F018A81E2E1F4E99B75BC2C1E769E283F2FBA11DC253C6630375EF425D4BEEB51F572C060767C85BBE9588B296056008F095E1EA46F875CBE22C984B85B309930BEA70890E680 -MD = CEC121D606AA1CD4D75CEDA6160C9F98D4F31CF4A7DECF4E6C9EE609 - -Len = 1826 -Msg = 5C834FEB24D7F670BEEB8B67568DC79253100E1BD7EF2C828D6CFC22039BF49F845C25546EDB592C398CA3F81CAD9D2750573822A72D60F23234B010C5D540E0A144CC05E85AD2B78EFFB7E01A538E8CD9F9E331DB6B88664D95846C32F8022AA774793DE2C28431B798B6601B10414F1BD4F5BF2E8D8D8A1468E7258EF6E2989E76814605CA6D26C2B43E3CE73674421EB27A4401324FD7B5C64C70826F67DBA8262D53FF8D6E7EF03DF2C2CFFF2D567A31603F839BC5375476383C051912885B39D652B3306CBEC139ECBDEAA32C0F3A5D628FA121D29F3D24EDBBAF501AEB0AC6A1DC40 -MD = 73F5BB70554FA92C8BD58102EA39F2BC968BC6D50237EE9C33800B9B - -Len = 1827 -Msg = 89DD51714894F40D6736792CE595850AB69C8031ACC48B986FF0556DDBFB26EC1A8D28087023042AF29DAD8D026FF0A6A1A281EDCD5CBF708A9A8487F706897F9EC68282C01046145B8ECE4B47D062EB69E9DF4EF9B45F9A557E035F6332D987693D4387CC4B665476BF058E9B33CD20503E1FEA00B8A302338E5EB2676A3B1B4A4A25E4168EBECE4CD5ED2B84B00656795D2089FA8F92EBA0AF2A5C705091F781D49B24577197A3025A52CC7B6D01AC1A3B28E60CE8FDD9940D46624FC8A7AE159E54124490FFAAC2B5E6D8F2F0088FA17ECA432E0F701D87A444D289403B974F68F780C0 -MD = C8D6952A3637F7436E25462509901748C439C549ED56C89081B16D59 - -Len = 1828 -Msg = CDDD2E9A96131C7E3A1AECFA200B414908370D1406E2240F257228028F556DF1043E10DF7900063D19B239DE71926512FCA45FA43FDC2ED73C1D4B96C1D305C70ABC09296BC6B80079FB84A6E544ED27DE2BBF1B2799360264858C661F331CB5B01B355BE13AE25F0BC87178AFC650621235DA7AF715D8E4D8DBACF693CA0F8C59105E9B5F457B600BD8452F42571FE3CD658F9F3C55B652A627983A5A150BD8259316D39FB1EF768DF2C3316C249B776A912035F7BBCA1D77C1920BA72EEFCB80933359E0D785C5CBA4B40CAB791B08CDC58FCDDFD30623DC3D9B6D53C7FBAF2054C977D0 -MD = 6602DE1EFBBC16FA9A2133757E872A347966A662092FE69B422BA538 - -Len = 1829 -Msg = 7598D75D07175436BA21F3CFC27DDA119096C793740DCAF11978B785150CEFE010CDBA27C4AFA5798F58D689E639D2B8CEECAE84EDE6599C00FCE4541A3E0F5B2B72C65EF0C576BC479325F761D8713161CCD4EA27302EA53CC4113EAFD94ADCE60CB8C4E3546538578EB28F2116B32E92961D5CD08012CB890B5EE0BD4D7DBD667B5D988E8566AFF6675F57433D40E6547D7280BDE4C5E44A4FF442C6C9AE8AA37D197B2416A6BED8422690A6D2091442E5E90F5E3EC5A7D7E89E4581189293C6CFCE1ECD667F792521752D0D785E7A767B55252F02E8A9A4342E084943A3FE1EE9366310 -MD = AF8FFE3219D474EDA7D88BA73F2AADFCA0E5368B7780154A364BE6C4 - -Len = 1830 -Msg = 5663593146BD2856F9206D81F0F64E10905F69BF1DEE07B1EA4547E1644402FC338C5C92697859653A7F09456EA10A846A5B0940B547828C666521BA4339C93F6A1AD58A44E32F34B5C7E904D6778D1F529A0C5905E9D0E4385B3F08D096EDF0DFEA1EECCBB67BF8B935A8B4E182C36DC2D69F6090F1FB6D18E6883C9772452A4EA5130EB277B84782E190CF03FD4E7D88B050AD2AB22C9D31B34D6A6A202BBBFDA8F0B61C7B665D920654FDF79655CA37490A6442A69F8BB33EC128FBDF992A95FAB380E3CB8E6EEC89D41950F9F645FACA86489F5D24D2CE86E4D554685E62A7567D7A58 -MD = B5D3C2D8FB5A172BDE933ED0371599E86363B2112CE89915CE0E2795 - -Len = 1831 -Msg = B38CE3DD3F6A1C6ADABE07481F8BC37378BFBFDE6562D5CAE1F65EC787A70FA381033C163F944FDA956DD2DE1CE94AF1B1726691B61CFB32116F2D5428BF128F3B673444D73CA3DFCC323DAE946C036A15BC1BC1799C42EB970DE6235B336B5F10AA568547E11D93E873DF1F318381327BF0993FF9302952EB86C258C461DA3DD7C649390BB0703A2EFD82F6DEC8B08C541C925EF75ACEE45BB11A4ADCB321B0463119A409CE65CB9EAE75AE8D5BFCAD3EA54BD5A960A522E740620D8A2B07E71BFA14B0003A50AE4DC73C50DA7C6F2C438AFC5E5B51E3608EEEC16B443A439D9C8FA2DB98 -MD = C30A59674010CC89772E8480F1D7D887D9973D3ABB3492CEF1732D0A - -Len = 1832 -Msg = 3875B9240CF3E0A8B59C658540F26A701CF188496E2C2174788B126FD29402D6A75453BA0635284D08835F40051A2A9683DC92AFB9383719191231170379BA6F4ADC816FECBB0F9C446B785BF520796841E58878B73C58D3EBB097CE4761FDEABE15DE2F319DFBAF1742CDEB389559C788131A6793E193856661376C81CE9568DA19AA6925B47FFD77A43C7A0E758C37D69254909FF0FBD415EF8EB937BCD49F91468B49974C07DC819ABD67395DB0E05874FF83DDDAB895344ABD0E7111B2DF9E58D76D85AD98106B36295826BE04D435615595605E4B4BB824B33C4AFEB5E7BB0D19F909 -MD = EAE911E66661DCD3472B458A48B74730468923C7ABCAC7F311F02463 - -Len = 1833 -Msg = 7AAF064B8FA13BB2955744B2E18F0AD1E799850D68236B45FB62A3AA11717936FE42E5722E30397A7474D3C551A290979DDA5127E51A27B7EADC7D7A2EB563B6882DE50D3391FB17D96B74AAA1A5EFA27B1B98FEEDA557385C0CFC69EC680D0EDA5D4104658BC9835B714968208091D1DE0FE4082DB62F6C10CA62757948A83BB507B0159168A39349EEF2AEDEFC85755FDC402C6B44AD1655D8A9AA4D6EC1BF026508B41DF0527333C96ECB91C2C626A23C18C9C61CC32320009B895F6F2C363197119F41EA858B23A377A548802A6147E852B5C8AA008711AA6CB78F1C6F2EC8BA270CAE00 -MD = 4361D96595CF585469E7CF786B3DA676AAB04884F52B164EBF37E0C7 - -Len = 1834 -Msg = ED1CC805A521D45C409965AA7A564CD5DCC0A27891008B296CEA8683BDAD85A9C35E6925AFAC9DCE2A7E33F47C5E6BF9D8EBC7ACF035BE05F38330DBA1770C58087412ECA4FC41FD0004BED47C31521F17DD592E5638272E3ADDFA237D3B497518502DD3130EFC9C9D77158228AA671B4105E07F8D6002043BC99E956F15DF49A9781C8209F68810698A6DD22DE1D5095283B0A97015F73E4707289D9C1236789E3D9E9EF6BF3B1FA5994AE21A51BB10E8DB3CA5879A7EFFD3E9FC01C81CEF0BBF332F44892E2A509E02EFA417B39B8046163CA49E4D310522AED1874184DEC4F2AFD9AEBC80 -MD = B8D0C4F6FB3428EC5F221F647F120A66020170A67E37F9FF23B45960 - -Len = 1835 -Msg = CF68D10756BD67D4BB27D278DBD54353FD1CFD416AF8957B66982247AAFC7F95AF90D0746150994EE72CBEC0F1AB55D3295D4EB59CAA48A49A6221ED63C17A436AF243EDAA4CFC0CFC8AEDB3395514DA8F92FD4696C0251D69B622509C7DF56740C9C3B938E044FA5FC0182A3EA9CCCD3843E5ECC75227ECF305F5063338AB7B73872C288DA65E7F04D7FCBC5BC14FEEF432ED780C55D2DFCABD65E6D95C8ACA350886C6514AA33574645B8ADA868FD7DF75F81A3AC75FDE093BEE15D8C9CD01AFD8731C1FB87F12E845FEA2FCFD5AD961D46C6A7BD033380A92D158F727DE24C8D6D7A4A140 -MD = 984B7534B22CC9F216F7F0A4DB452DFD49CBA021FCC1CB70B6BC03F0 - -Len = 1836 -Msg = 06C383F828F6D58D1F99567DC5AAB7BBB7F8B9F0DC941CEB0938C0C1367DDEA5F03CEF432C4BACFF10E314E3B66EC473EA6D238D86BFB2DC83FB744E1B63618FC0B72380942AFD0919A3CE11F9F5F781402A14A00FAFD0C79CC516E74058963411E5D3C59B8D8C87AD916737F4C216B9B28F39FEDFECAA3657C1B284CA7AC897B85CF6FE72DF44E0629EA2C61D8E4C0FC1460002D7F1131339DEDD78CB8235767B64E7417B06E13577D02A94D9350EF66A5C12553E56B7840D0569D4E5A5928050C9A738F9ADB557671848C58A504F63146B946938935C76C28264F675F462C7D76E95FFC1B0 -MD = 80EF9FA5FC3E1CE721A63789F5997CF336004AF75D8F6A437CA9020A - -Len = 1837 -Msg = 27C482CF399044DB05B251DCF9D8A788C0CC214DCF7451EDB9D2423A13BA32B6447D17825AE67ECB70EEA8B182B14FED66D2F1179B4ED66F53C56CE0C679598C09589A4B8FC1C3E42A0091FFFD4B4C464763FFFB1ABFB7DC49337C46C097027CF3BC5B14B34E590E17A2C4059E50971DF2DE66E2E714E5834BE769371DBD56107C30BAAE1438E02AD5F825A4B690D8477311871AAF7C5B4C540C0C3B296F724668862AC9144849BDF18FEAF17DF98246B5BA88C929C940EDC42EE9116F7656F1E2B40385F9B05DAB23243014FB122967B97B8CFDC369478866E57CC8D98949DE41D8835A1148 -MD = A24320E355D2B73AFDF4D49F5255A645C4FF0DCDB2275D42BB3C646D - -Len = 1838 -Msg = 3F06A9590EBDD717DC6150AB4A4EA1904BCE033B78C8D437C013D78B6D147BCFD8557298E44E11A6E1C82986F626092F435278DF0212DAD2AEADC09CB84926C74441ABEA04E3F0095876BB4D6463A9448B775B082B5D7F0B3AF0DAEEB9786A3D404D16C2DE8DB319B34D496B5E03C30608A171FD180E7D32A0F496AD0903997183BCAA62A57FC6450098D480B7A3F8BB7329528A1D4358B2520828BB7C3DA65577406A4C241F39461C6F03D22C054A9E736F4ACBD6916B254C7145CF73347A024B418D8801236EC61C74955345F6BBA944D8C8135B594220C104C95FE85C9BD187505041176C -MD = A3C9A2660F8695BD6159A7BB081C285FB288D864E1D448C503E46EC4 - -Len = 1839 -Msg = A8A9555BC035CA2CDA773CD7C01159FD6EE4CCF03C3E43C565CE85C88A842B14C765991FBB424F01B53F7157D413F5E7D3CBC0C9B084F6205E9815432C0B83B116E1714FCF9E20C07111C3C202EBE068D4D4B6B163E42D2922B9C36BD32BCC768C10489FCEFAF472D1E160FC7C5726A89F32E0632D15679972EAFCAA4C8AD48DB3C4DBC42FCA6B12B6979CB12C72F22BA5056A12AA99CECB65A3958AB8F66920818D6DB0FF34AA8BE45739BE1FE9C991819DBC896A078DB828641F5736858BDF0ABBB3CB786C49045028F8BE1C836E8E88DE775D93ED42914AF9C7AD38091A41485B155DBAF4 -MD = 9225090019CF29BEAEAF63ABABB984235F41E69D06D13EA9FC440F2F - -Len = 1840 -Msg = 747CC1A59FEFBA94A9C75BA866C30DC5C1CB0C0F8E9361D98484956DD5D1A40F6184AFBE3DAC9F76028D1CAECCFBF69199C6CE2B4C092A3F4D2A56FE5A33A00757F4D7DEE5DFB0524311A97AE0668A47971B95766E2F6DD48C3F57841F91F04A00AD5EA70F2D479A2620DC5CD78EAAB3A3B011719B7E78D19DDF70D9423798AF77517EBC55392FCD01FC600D8D466B9E7A7A85BF33F9CC5419E9BD874DDFD60981150DDAF8D7FEBAA4374F0872A5628D318000311E2F5655365AD4D407C20E5C04DF17A222E7DEEC79C5AB1116D8572F91CD06E1CCC7CED53736FC867FD49ECEBE6BF8082E8A -MD = 307D5A8BA5865A4D281ACB2F3C5EF16E3B11BCD8C0F82D22D47C2CC8 - -Len = 1841 -Msg = 133F3DC8F20A325DB666A5F7D9D66468C052553A9F32AD1394A2B8CB1B952872B6920B8E34EEC5A34CD64C019948CA219826CD8A5511D3458EDCCE0537E30594ED4CB6BA4253B793B9416A8634327C743D7BC81E601A09097647B3AE0A215939184AA82856FE0F8A6F03E844BC38208722756AE0AA8FEDC14D91DD46E2D367779BC302D4960E80FD8851AEB8629D6A6D10F5A85161C3CE21E83CDC91100B18B39F9CC5EC6B90B883877FEEA50A5FF5B7E2C66943102187BD71069022D7218367D10237119ADC218B261DB11B3B31C3DFB76D87E5569D397462CE9A888D047BA3924C2E3F955F00 -MD = 58AE4B2877394508FB88F95C49EABCE574D6D7B6AAAB08EE5129F2BA - -Len = 1842 -Msg = 7691632F35A0F8EA7E14D97B4F782FB51902A0BA5188E09551E979496011C62AEE48687E1DD9895703205B8EAD514FE531D9C44D64B3DEDAB2BED907FB07EAE2511838B38F1184BDFF60FED005C5A520869030F76E15A7C3F890B5D35803F8FD348DE11ED20BC0EE231DC208DF079AB03B3923D765DD94EE48B0BF604AF1E8567BD31576D7C221C6EFDC8E17A02B914A0D442D81FD1576F840C511D1712D1089BF465E54A358BC1AEE706CCB539EE55BE1E9250A7B32EDC5821BFB41D6B8257BDF98CF5C83CD0266C65073EFA88BABCFFB23F0C50D64B1ADF4E841140BA8D178CC9CA3C6DC1900 -MD = 73400172D5C85DFB09B07415DFACAAD6E480DB3DE07BBD4E846AEC34 - -Len = 1843 -Msg = B1268A9996DE08A4B261958C314BE9FEF0A7234DA9EF1A84C330289FFD3D4C185DA8BE58560450F026DC2F71502F2A0E238BBC6772F51FA12E9059323ECF5DBDFE9DFB273719C63E68B1E799FF107F7DAB82EC9B60705DDB2CA9EAB37FB0E45DE36F58E4D3E6382CA5FFE8D16A57C27E8C34698D27DDBB3A28F6AB805C800CF7B6D7A38939F49DC33D2046EC0CBA8F47D96F8BFC17FF77039E5C6A32BDC9455A3F3D835E3F21B9D2116AC6F6729CA5EAA85EBF5B46EE23D2C55C4C447AE5AD7672E18DBF95E53AC1FF933611F2ECD728019688CFB266AE775445B036B364656286ACF50A12FA60 -MD = A531F15AC2BB87FE5DC7E423A2AFAD70441325BF2CEB521762B9F420 - -Len = 1844 -Msg = F6FA29C1E172DCF3238DE51B812EA3A94CBD505C5E8A7227E6A6A93E26275C9DA60A90A609D8F0DE42995870519B0A159B4042D44935A279976048C8F6636785DA95CB0FE908E7A915756BBD753CFCE8F7F72F2A42CB096D5D217F7C3084D7E45C6E54B333FFD1B35F95B748160FCE480F6E12033F6F368095ACE612766D49BB91871604C0F91EFF86AB0F0F943838823B104471C2F6229FD12C2B48F67CF7CABFA0D7BEEAFAD1D06B691D063D1C23D286F327A66A154AEE0308A44E05C94BCADF2103C2CFADD0EE48E3C793F3BB2CFC163190B573C489EE580D231F1D0ABE1B42DC9D1AE9D100 -MD = 823CFD6B7D6773433D3916252185CCE92A6542D2F05E56EE9B71DD0E - -Len = 1845 -Msg = 927D50017CC3FBC15A5F5430E4F5ED97872FCD5E8DB5295EB2FBE7D3137EF7FC454A499B09F733402AF972E13E4E24B42D5F7037550A80A4080051483B00CA5EC796D4DCA3ACC32509990ED14FF32EE4A38BEBEEC34EB49CA4882041A1FC72EE2207977DA9C0DFD9689EE039F5AA9FDD37BA789DDEE2E94E4B93E896F71699C46BA45C9AD29C6351318292AA3707BA47DC2AA1FFF1C112E18CCB0886D1BCF306A0D7599C810D02A9A1FB181615CDC818E36B219F83791F89C976B3673260579986BFB4FF99FF7089BFAEEB1345B4F49802B6CCEC7F4806DC6C93E77AEC16F6950C88417EC62070 -MD = 9CD6971B5340B4F9984969D63ED51C3F19CB3B5388A4C322A7B1A435 - -Len = 1846 -Msg = 29BF8670CC82FAFD3FD81D1EAEC1B312C4F6F56D444275DCC396BBE88942E4D646920181235EDA860987824BD9D925187CCD864E602241759F17AAE0B3E4132D14808499425B93C5041E2A053BA742C1423CAD030FA29E28B96A52CF1468238E783640637C169F27F02990D1E243A2A6E967E038F1D455A39A47DCF28F7EC7151DA0ED58166AEE613C1C759E0CD99076CCF6B4B7A7775F207187AEB15E288E3DBA49024D56A91EC65812F7A113F0EDF2ED7F50013874A1320A2A86E67EB5B3FCD12AE0B0860ACCEDE9DFA7427914374956DFA2AD4619664F829B2C59038EF54A7AF0B94974C644 -MD = 7784C66DA928EB09C20BC1BF012F7B7CAFDFB32A919F16131721EC1C - -Len = 1847 -Msg = 2A4DDEDD34CAAC49ADA033A9695DD6A97722941E4B79F03F55B367EB6DEECF372CAF3D96E28125B4C43EEDCE9F2D22F407F250D5E7CC29FD24E800CFEFCA6DE46147F7BDC3AF25878C6D04BE42B50B47B767FE03779153AE14B88BF95465CADAE27FA15BE654DF88ABD6B4A275A3B51764D64F4D9A8A0DC1DC0320A1592ED2E867ED9F15E2EDF8DFC28110ED52749B5A7B5D4CB307A13E19694F2EFED47EE974568858D6DCA09DC936AAA24D7B8A16969EC54352BC495BD67963DDEDF57D5E7D8131CBA5DCAE5D08C663D35B05605638E6FB091F483817995268DAEC4004A3451711E5C66B3640 -MD = 51DBEB62EB8DDA8DBFEDE4AEB2ABB07429C34D7BEAE49C2367153D31 - -Len = 1848 -Msg = 57AF971FCCAEC97435DC2EC9EF0429BCEDC6B647729EA168858A6E49AC1071E706F4A5A645CA14E8C7746D65511620682C906C8B86EC901F3DDED4167B3F00B06CBFAC6AEE3728051B3E5FF10B4F9ED8BD0B8DA94303C833755B3CA3AEDDF0B54BC8D6632138B5D25BAB03D17B3458A9D782108006F5BB7DE75B5C0BA854B423D8BB801E701E99DC4FEAAD59BC1C7112453B04D33EA3635639FB802C73C2B71D58A56BBD671B18FE34ED2E3DCA38827D63FDB1D4FB3285405004B2B3E26081A8FF08CD6D2B08F8E7B7E90A2AB1ED7A41B1D0128522C2F8BFF56A7FE67969422CE839A9D4608F03 -MD = 58666B325D81CBE6A4BBAD91720E2BA93C70EA114E7F77323C5BE486 - -Len = 1849 -Msg = C1783FB7FC7DB5B8EBF9A0357442BB99233369A73B0749F33C50136FCFE2479C2FC94ED87A6AA019EFAA119A2305668E116517BE31A4DF84C44B672918999C198CDFCC0AAEC695182AB1EFEFDDFB8EE2AE8C9FB981BFC69FC403C24ED7C17F564FAFCEA706AC3FC7DB4E3C08E2E488262E47EBDDE6461AFF5FBE876FB1EA5B764996B6B94CEDA388E6CE29724D6C9744A6EDFE1639138598FC5C579EED9A56FC5F68D8732DF2A4EF70FB272338BB096B16C6C12DD4B603DDE5CDD05C9686825F936EA6560D08788D35C6EF6AC44BE032F68029084B915BF007803A3B1F8E8D05C68DB8609C153480 -MD = DA7DA61B7E18C9ED66CAB847673ADAFA5E5AA9683275BE05286977A1 - -Len = 1850 -Msg = 5FC6470564242C4BC6997B8D3CE0BE6BBF3C132A052FD3C78C6373B13031E576F6E7FEB36A848410E5E48228B0D6B18E0EB64423138A3425CDD50EBACA32D354442403B6D395CFA93E8B81C57FD074E8CC36698B5CB50932A8430AC24EB986DB1C9CE1F4CF2D71A79B4FBE65D393F0BE516C94EB471C256C6BE81A70E17081B5951F7C3CA5E84CC7270884F0A65A6B2BF8853914078C611BBF5A73FE89274ACA6DDCA94B970DE7CC88FF4911C825ADCBDABBD5CBE9A63644A2C15DF1935F4BA8A2AA5978149D5B8DD4B4D14EEE842DAE8BD5BA044B207C4795F872B4B219843C611A7E466F6BED40 -MD = 3EA855F76967C813CCBFEDA8C7B078CC30288DABAD76CA6248EDFFF4 - -Len = 1851 -Msg = 0D6CA1C8C4E025937AD2C62FB841FC6AC14DBD6208A418C01FADB43DEE62CE03D70ABF8614F3F773C7ADDA7DED6EC569DB516FA7408F73A628C68AB4ABBCC0DAF9CF1EA313A8EB0D8239F3726D20ACC285B617FB3F04EB20AC6E7F588144498E40E4668D54BC7692F84F7DF2B4C2099AF34F077F2B46829D43DC5037FB3B1B144CE110E7753CE6CEC76CC01D848EF0C169068218DA9AE4EAC53D845CAF91C206B8A46B6F869C6890A09BBEF06DC65F1F63FDF1EC33C5DDC2FEAD36A24ECECD795A7ABDD3BC4051EA2B748391CD7637F1859B7A027906C2D8D922E2F20C99E110BFC67593B58568E0 -MD = E44F94317DB4202FF5EEBA559280471CAED15A19125668DB2BDB56AF - -Len = 1852 -Msg = 9D68E842C8636C149AF7ABC5AC9FB685B69C872BEDAEC8765608A2A27454E4F13AF557A300DAE256835BBF4EF9256F2C9B5FEF61C51FA573F9DF26F4672AD4F97B25969AB60BA6CC5DF2449456F54F2F1ED8B4A5DD455A38BAAAB1C57C8B870C7C62F07575337B3EBEB78D0671213B22201A1F96BD82413D854C28EA3D043C5EA8AFD23D3217E9EA53B099859D5096985CBE655588F3F2E5B3A4BD6D8A12E8E930AA3EDA60A5EB3FCFC200BFF2A413C8E7D0919CC2B79F343CF792666CF9C3EFF4AB199428974C3EE7B48D48284A486D586E07CFB21FBDDD2C75B9ED90C33120D9469C0ED84A7150 -MD = 0110D579047730ADEFAF8CE49D6C5FD1AA56732021D3C0D43343E4B3 - -Len = 1853 -Msg = FC9FAA47BE421F49AD0BC84E7EE489268084C00592F45645A2CAFB817C7E33DD82005894FE333089EA8E5FE6DF3743A5A6C5CAFC3A86C3CBB4030BF743FFD944816A71EEF4FE45A357CD81A3E047C7CE8EC3B90E90AFA4BFC4FAA324A97D095A68EA070CCA14779E813733432A046F9393B08E614615A5C7B573A548349670F36F3DD69D3FA9F2228957CF4C81FF8F9A4BFB514B68D35F8E03A710577D6077C48D4B9947B1426BA5386F41D11DF6A560AFC4D5C030AB7C11E65BF2D5A2C7AACCFB05C1BE6CC7C9CE9A301CD4CBB7BA63A2BDC9FB2A71404B832C8FD2C9FA53DA520B4587EB80F610 -MD = 686045C3B7A5FDAB6C82ED5B508D42D64CC5BAFB3EE98057FF0A80C7 - -Len = 1854 -Msg = 30DFB1FF68E242E5C35344B6D5363F9BC0645FE35111DAB05357B0FD5F2AA4355D56D537D54A17B18DC56DEF90784ECAAF92CD67006C174BE4E232C773841E8ABA05B71D2A950568E2ADF766058744A6564D883DAFD123704DFAE1966E25A036ACB268B7547DE88534A5067411D55BEFDC0C9B98F27DA16977EDB972335D320B8954A0CD6F669AEB6764D271B6D2250F08B2DD17A537C6F6B46E1AA793C261C01056D081D48D939C70E8BD29B8697BDF8ED885D194C5874E329823457D85E0DAEE5589BCE1226B144D69544E790C8EAA77B3E771A5AE7A08E292D321304D5BD531B75E43E892EBBC -MD = 302E24779204742F934E565D0DCB92C8603980FCDF17A80BC745F561 - -Len = 1855 -Msg = 8B8EE065F4F8E1E18C037F99F0657ADC659559676ABE160D0112EC4CDB58DAABFD58BC968CCF2BFCBF8CCF84670912515DBDEFD64ED0D35F7DAB9A21A7CE95EB0D285DD9DEF35C2825AE7C2999A6C099B5640D97979402E374C4B81E92302C24C33BF7FAC1660D04AE731250F6EA3CFF051606A5E0AF66EC669FB031310B278F673DA3B7DB78B521C0E81897D88C8C6EC7DE470C4F93C25350B381F5420CCBE2CCB56910919FFA1750D96738C3F80C2DE309889972616B31976A8E5D76CA26E111F2CCD34949BF3CAF5F682837EC02FF90981660CFFBE403C7619D2C38E764BC794463986B788AD2 -MD = 44F61D6368E65DFD1695140CD0FD36A679940F6FCB6D27E4E078BD80 - -Len = 1856 -Msg = 04E16DEDC1227902BAAF332D3D08923601BDD64F573FAA1BB7201918CFE16B1E10151DAE875DA0C0D63C59C3DD050C4C6A874011B018421AFC4623AB0381831B2DA2A8BA42C96E4F70864AC44E106F94311051E74C77C1291BF5DB9539E69567BF6A11CF6932BBBAD33F8946BF5814C066D851633D1A513510039B349939BFD42B858C21827C8FF05F1D09B1B0765DC78A135B5CA4DFBA0801BCADDFA175623C8B647EACFB4444B85A44F73890607D06D507A4F8393658788669F6EF4DEB58D08C50CA0756D5E2F49D1A7AD73E0F0B3D3B5F090ACF622B1878C59133E4A848E05153592EA81C6FBF -MD = BC296FFD39381CF1C96228A9F380F41C871B8788C654ED9B384C17FE - -Len = 1857 -Msg = 4426F07482D08D23BEFE266B3289AA606B8656403368843EF5275D93A735A1EA48D25293B2FEC242DFB58F7C387F0943B53E3BDF49F922B10A89CAB3D192010ABB2CCFBB758F7258895B3680083B9BE3E7EE79ADD241EB063CB2A63C0BA4278DC9CE078257B9B42AC4C6F7C6F5AF6B3328284F1DA4C04102A456CDECBA73DBE380C8BFD9AFD2F05DB7B558CB318E15C0C4E4FECED736145BF207356009D76F81F33F25459B74E079FCAC54145DFC2213AF55F7EFD34F5567A4F4A3F6D01503619808C7FC361D366643A4D2D04678DAC223832D35C83B759887C060AE300B1F630AC2B9BD442673A680 -MD = B2AA6D1CECC1595F2E3FE78D9D3BD8DE44FF62FEEBFE2407A23F937D - -Len = 1858 -Msg = 4743DAD3E151BF5E0B9090C79B76A7E425F65CEAC259F901234BD59BC01172BAFCA5D80C3A80841547CF424E52D53C66C73407B686FF44A72638CAF89A09FDEC13341DDD297795D256C3A3FC58D1925FD1029C55FA76C9AF2F277F42CAAFDE084E708D0C89DE48382D582FCF8343965EDC1552749245A9DD7DD2881FE904968AEC8012AAF2D6C52DA081682BF062D39B7DD137BF1DA53942E24E60388546D60C6E074D96D6330B3FC262D2D1053324861B4E9C482F4C4159FDF0BC739A39192BCA18D5C54F1E9748068D63E0A232C99F3504C3B211EC5C727049371D52515231DAB097C014786DE080 -MD = 6994012829BD1F0C8DF38314D0602242546BAE4B70B133CB1C5629BF - -Len = 1859 -Msg = 3C892301CE8E40088696DE300C1AF4BC362D52CEF0BDF4BE2CB7782D4538ACE3A69DA72C6D0A04FC416EB1A6F5F24AFFDC4AC3A8BC58574DC18A0FB4117D4B6083876067E18B62D0B0D35F537D7FE57E921F361FF598194B9F12DB83D24BA10D7976BA334EAB98EF5524EC074B0F4D663E8991D568142189A89FFAB0B6D851697366A2B935BEA15780C0929368E07E3DCBB7E421B58486F6850F20A9E1B499B549338EB0D32DF8362552ACC97AA388BB81BD64FBEAD0F89938613403C43149B79CFE391505673EBC19C01169E4A3BC90C33015896C3F9EC083F6C77C914E6C774B42BE8A6948AEA840 -MD = 3523E837ADF0FFEA94BE25A92D0C9697DBA53BF4A8ECFCE2A562F715 - -Len = 1860 -Msg = E6991E70A7A1D85F9E99EAED812879054136F3A048D96156A4A0778E66CD23CBCB13197FF5FD92AE7F316AE045120BC5AC67DD4F887442F4DCCB77048BF2E5D7A1B4A17DA0F8D30A422EAADB498130CB1DB102CC68C43E70CFE883A58659549CF439317FEBB48048450D3C7D04756ED880E8760F48652FE46E41CB197A6938D5CD81D2BDB058F180097662CFF5727A3E7FD351803E97D4A2D54F2CE7F9EB76530F3D9C7B69540221C894F2164D1F98379CA174FC276E5D97B2BCE598976B7B7B658C3655461C9C15E62CEB380A35305A8B5978F44D86B5132F0EF5744AD0DC51F6D7E40BDFBE5F0380 -MD = 050242682F2DFF409DA7A6726C0903AA4C38E36CF7545C4B4D35906B - -Len = 1861 -Msg = AF52B30D7CB6ABA2053D0208FDB3924AC2C32B931B14629AF563527E2A4E8F069DE7E3EFD5E769371CC80D7FA106F202F90CB270105FFF33C345AE2E346237C5FCDC8AB91AB8E847660F215DF3E1B570874D9482C221A5F6B445652A4393315CD60A79B24AEAB8F0086DCBD09A0979CE4431A4BF2515C5274670AD8E3F4489B49DD0DF064EB00DDC33BB778014B53BB2E61A3421BD94754FBE5B9A7FBDED04329E65FAAD493F3B4922CD8115C86F116095B46BBDD84B39CD69E484E08D9CA1B5DCDD9EBC126877DD4D6ED4227DCB3320C56F6F1E4017053841859A3BFEAA77ED640259F99A51BEA460 -MD = 0C130481555AB1B813DE49896071D52883A5FD54E0DFC2C4C365D1E2 - -Len = 1862 -Msg = 42AA49F4A2E8B72F5621122E00B059647A8C6ACD8400BCAA1EC4BF95B5E3A093D32022C6016F42581C9C2C3DF81105B3EE9D53BA623333406B4319FF1FA71F7ED8046A6B2892F601A6AEF902BD7054E67437C23CD00A28ED3275F6163EE2CC714C4B31EADA0451E40E0A66DFF244595A10E200582D19D1B78DC70B2895DAFC390D2B9386E194CAE4429CAC6D98E224015645E2827E1C016AC54737CACCF071CBE8E91E601C5A926B847C60636BFAB114158679D0E451AF3F3A97D716F96D92B51FA5EC90165416DE5633B5B8BCAA6B45D599745EB31AE3BB98C6B19E6F789BA6E21EFF754B16A4C41C -MD = D919716608CF2254CDACD9D92AC77D6CD8981F38E85564CD6A1463A1 - -Len = 1863 -Msg = EEF6D5C6F1147E9A29D854F15E8C5BBB680BC09EBFF8BCDDB963CA5267C668E648B47024F3972C9BCE05E74753735BFB45C50461D900DE1BE6BBD5DA4626BA6548BC7A47A8FBDBE45508A5C03C6980731BDA8BAA557EF6AE6117707F153D91982E1CE06E89F28D576B7602C3AC7FE77C34AAA1D36572C58A8A9A39F20A608A9EEBD4108F664F66D454C78EF4883E1C8C37319EC69C88063812A5FB2BD23AE9B4E49DF8F34FF9FD244D40D6E1A4B454CC6ABB4716C75327E5C46AF21EC8B0E1B0520BB16E4638C1BF3C9A6F8445BCF3FC9329BC626223CFC97175FD0A16EB8730F7EE2C8CA5CBFF8D06 -MD = 86DFA18F13E33A1CC1811478450FFC76599017DC1FB7A5F97EBBE4EE - -Len = 1864 -Msg = 7C815C384EEE0F288ECE27CCED52A01603127B079C007378BC5D1E6C5E9E6D1C735723ACBBD5801AC49854B2B569D4472D33F40BBB8882956245C366DC3582D71696A97A4E19557E41E54DEE482A14229005F93AFD2C4A7D8614D10A97A9DFA07F7CD946FA45263063DDD29DB8F9E34DB60DAA32684F0072EA2A9426ECEBFA5239FB67F29C18CBAA2AF6ED4BF4283936823AC1790164FEC5457A9CBA7C767CA59392D94CAB7448F50EB34E9A93A80027471CE59736F099C886DEA1AB4CBA4D89F5FC7AE2F21CCD27F611ECA4626B2D08DC22382E92C1EFB2F6AFDC8FDC3D2172604F5035C46B8197D3 -MD = 0CCEAE713E5E39BCEFE7A2273004816FE005D5EDFB2A965CC9AC9948 - -Len = 1865 -Msg = 4DF4BBFC86C99AB997A02CC93519BA1B6D58CD568237DC930E71C4963F48F304AAEB102EADD5E93902C441368752098DC02CD9518B1FD3E26FFC1C34E6773866432E25F552E44356C2CAA4A1BF375B73E17561D28DDF85C8FE6EAFB3A17D51AA0D512BF106B4325F9BD0F47E532A6D9A7DAA2F90D8AC43426209191512FD59816F245495CC6FC14DF5826D34B2381A1812B3CA9C4C8324D7D66A4A76F7B483032BAFE76128C5853968B80152D21CDC2BE64BF2AA9439C178C264062AA61097DBB287DE1BCEA6AFFB08468D3751AD533B4357CAB562E0105A0F848052DF66DDF9E2B7C062558114019D80 -MD = 9CF29C241741623D5CC672A03CA5154B70798849630802FBDFF58098 - -Len = 1866 -Msg = C1FD4A92ED91E80437F2492D1F0933D8B71AA1FA1457C8243EC5C1A4DDC1996F04A3AA922EF7571F50D11CD10155C20D198D4BE9846C4C46E5CB8F602241B7033E542E7C8BC4D03570B8D7DA6CAA74B104856CC97BE1510864D7566E76CD19E8182C496F94CA7E9A5A2329323B665F5BCF41A7BB5BD8D729A4876D7E9A76B7764B830FE75312A3F268DA28E476985257FABF2C04263E6A1D69E9F5C34E11CAE04CE015A731FB1B492F405A271D6899184C4AD3631FEBB554021C36DA8E2A5864BC3F8DB8461D0B7AC9AA94222119DBE9263E0A9CFB8E8B98F456C1EA717433B4BA8A509A5CC4631140C0 -MD = 906381873F84B0A96BFA53D6EEB7368A38CC69E64E7EA15ED894FAB3 - -Len = 1867 -Msg = 25AE6A6AAF2D2E5E0E0F1AC428EA4A982A601334D7527E9A0B7D699EF19C0584C5332623D4A9418156978F763F6C142009A76C5DCCEA9FAD261C93D9BC851538202745BFA220EFA3872C60D28C5A45AC8F85011F95278A28D029D0947B6EB8AB359FB4366DE97A757EDE3536B2EB7F25026B5179F32324E03086D1687CD1F335874F2161FCB387300AE9C460F8BA20468AD070C64B94A8D8E9D38A5C1328983CD26000F77508AA430A49A5444BFE451C19A2ABD1DAB0492C80307B61240BC18F24B2CBE2DA5AC8FC85C9B2FF984D351AFC303A83F4E3170D02B8083EC2CBB7D671A9B2AEC95BD719D660 -MD = 1F10FB00729FD8C54CADCBFFE4218EB407E784A695B4C81A10F85D00 - -Len = 1868 -Msg = 4251F3233CFF0E056271F186FF88284C5E29990FFFCFAB44F9CFA2EEBE619B72C3681DE8AFA75739A6B9DCE88F4463AC03F1FE21139E45C968F72347A6DEEFE78863DCEE29E2309733A8B477AD67524A4317E47A40C2027992C057A934A9C09D3C4DFBA062F4F653626F2E65AEE5C08378E9B5FCF87D937F71320E5D8CB9A5CB89360A0D7BE1BA7628AC1B0253D8280D32F7C03942A26659768AD774D95AB91269DF18576DEC613260872C558534C80290ECDA296DF12F6407390D78E7A192FEB2F4CE67CECC90CE7DC62593B3610D8FABBBA4C1E468815DFA614767F3AC0BA72FB18899426D3D76D6A0 -MD = A162B1F4C44A2636C703C4D51FBD8857044B1ED82359B3BA7DDF0E87 - -Len = 1869 -Msg = FEB6A3B8C8168406BAFA4C6C4D437B0E5ADA67BDCD5383E2217005A81092047263ED80F09D72EFF2F1B39282B94B2AE5A79D099BC8AD3F38E124644AC5825A37C22506048DF9AA75FFAC09EA24BB218E1F7730D354FCADD36E02122765AABAA7D56EADE503AE02113A52011A87AD7A113A717608BDE4F8F5A1DB524901B582EB2FC351612C13E604F425AA333C5C5229DCAB69F0E02821F2C00045BBE119975AA82043BD4AD5B8FCB57C3F766E7DB60770040419F4DA26846803E2413A356B607952049B8F5E7C694B0DFE703768AF3A8BCA7C5446C01C7A257D0D3476E5853DFB2BB329BDD12B14ED10 -MD = 45C9573E007E426F9867489D1DDDCA64DB0D4A1F93D8DBD3FC0B2966 - -Len = 1870 -Msg = 07B0807CEBA5AB708AB70FAA26C57DC848357CE71F54B1BBB640F34C2392ADACBEF2779999ED9ED0BEDA61086E3F5C427F3FEFB6D9CA7AF1DA684CA977D69B755CF10B5DD9B5D229016329ED7A8C5BF65E86AD07672F6823897A700152907FC188A673F1F748BEF8EBAF740D08403A34FDC6EA6498B552766509387440B9E557C3BD2775691DC1DF4A70D867B8DAB848EE1272910CBBF2FE02B836A4F44B69A031C82D4E86758E67491DDDE0DCE19F0B30229213BE2C4EFE138D21B746D7B76A3E4370F46065736A06433AE27BCF475C1E6B99BE1414B2C74EFCC8C5F209B5EEF747BC491021A1B1AB7C -MD = 4EB7DDD3AF489505EA734E335F17A0D7A3D30C436C78D280AB279D32 - -Len = 1871 -Msg = 077EE43315D81DA192AD7FFDEA1F8846FCE8E6497BB577FE0D84A3B33CB09997606C10E735922DAB8CE9508BC5FC9216493DABFB6982C060C8658DD0FBD3820386B8CF69C299E478AF4B46F677DF77B10B4416F87A984ADA7BEA287E7241C18F1D373ABE08B69D2C3EF3191AE6D88B794A2CD49AF24DEB98C24E2F647F1C97D37AE5BCEC2EAFED490C9153722ED8B8D2A1DD116EC398E147C6A1C15098FDB40E34666DB897A460622DC22C5E0EF0A7CB3A44A7DF8CA1521FC03CBA3DA3055DD0EF57DF1951277FF196F310B091049219ED89B9FB9AAB1E8C803458B383F75F8B71E466BD6B379CC445B2 -MD = 19AC41416DEAB1F2F654035CB36B34288CFDD2FB4BABDEC540DCB0F7 - -Len = 1872 -Msg = E29D505158DBDD937D9E3D2145658EE6F5992A2FC790F4F608D9CDB44A091D5B94B88E81FAC4FDF5C49442F13B911C55886469629551189EAFF62488F1A479B7DB11A1560E198DDCCCCF50159093425FF7F1CB8D1D1246D0978764087D6BAC257026B090EFAE8CEC5F22B6F21C59ACE1AC7386F5B8837CA6A12B6FBF5534DD0560EF05CA78104D3B943DDB220FEAEC89AA5E692A00F822A2AB9A2FE60350D75E7BE16FF2526DC643872502D01F42F188ABED0A6E9A6F5FD0D1CE7D5755C9FFA66B0AF0B20BD806F08E06156690D81AC811778CA3DAC2C249B96002017FCE93E507E3B953ACF99964B847 -MD = 7997FDF30837D8B25E85FC01316E31B61EE814490DA002A04816D7CA - -Len = 1873 -Msg = 71DAB3D5E14975584855B425C41A4553606B8D758FF3D9897F173EBEE24BE2D269E0915FFEE407582B4FE64C1A1252D07AC56FF7D164441DA25CF75ED3BD15F582A41BF97B36101AB73D2495BF77F77277A52E41993DF8A6A889331AB48B4BFFBE5486671C673F618C7B758FEA417D358FE1A617A6F5A8BC3619E1A58A1B5B4A40AADF4E8DDD4CA6B557E777FB7EFB7E755F3E4E0DFB6E89A53380B4013BA9AD071C3E147417BB663867F65D478DEE59E71B0F753015DFF08207DC4A985754B0BD81BA2A9B66DAD4881FF73B82BD31CF62B2CAD3591EF3EC790711FCAA3897BDA87C2DA9E564BC30601D80 -MD = DF7AD6185162F42EEBB7B19862891F16FFCB78ABCBC91AF2F0488D00 - -Len = 1874 -Msg = CBA489942ED9C4FA6742C4442AF01F4503857D1BF17107169319A95B03DB4DA89379875761C26E82ED2A87EA5B532DAF6C9E3E12E6CCF8ABCA098D6ACE16559C87EE70802AA6BCC24D322D3469D59EDCA58B485A8D761707B2AE6A17746F75089A4FC0AD748B5AFA77DA2D32F2DEBDB7E0204343B6F732A91CE97E6694EACD38DD31BC1FB319B5322391FC69F4E6EFCF87ED5D75FA43CEF00A7B64554D5022E41FD07A09E0B08C8721FACCFAB978CDEFA81368AA965F3018D40D1E3EA5A13C2EB45508EA71B9084F664970153A36FA115CB538FF98B082CB2674523876CDD60145234A23F1BC6E80D0B340 -MD = 720856E35385375728DFEC7AA4D474DE1BE1AE8CC306621DBB170799 - -Len = 1875 -Msg = 2A2084884877E8EF481192AAEFB04AE7E016905FD19EBFE4AC13480224472DA2AC2EE2C2A652C72B1EE84C090B89F015060CD8ED31A320EE8CDCF0652197C8290AEDE81EE0109FB4B5F33E96AAE6004099AF9FF74E0C0D3CC69B5E655C2E6E2E8AD884C184D96716FDB8482EF16028E08C9518F505F9FAFB22A5B988246F2F45C7E8C32A4CD5ECC7C8667C5249D294E691E3E7855EC547D18F5FDCDD062FCE2809873D53527EF72FF707CBC994AED439B2364C10E6346D52BC8037C6D82E73353518CFF35E62A453E5F68ECD5F13A2F0E55A783923B41D8FB53D0C853DFD40E5C7CC8914958D1394E76C60 -MD = AE3C1065EA757591C00B8CC938BCC35BC97DE7395C530C0A7E485CA5 - -Len = 1876 -Msg = BC7AA0446C7B561CD3CA9FF43904F23C761B83F50AD0F489EBD9AA9C466771F1FC6C8C77D1C9C55929532DBC1456D0D4ED1E7E9FA1DC9AA6013B555C217D480DA0735997E8A2EF951D978936351C444CBA6A4CCAEBB3417616677143BE2F4B4DA61D1B8A385185F74581249B1212C7820AC6DBE0B3BA8081E259B78E672152513E357943B927E01EE4BCA4D903775E6E67195E105D9F513F679DF949D852ED2A77B96D14A967D76D34CD4B18F8C4970DDC95436EF8614ACD896817954D2CFB995AED03B3983A72FC67F3BD96949B1FCBFA6E26ED6CC2DECDD4EEC72787B868783A9B1758AFB2BAF1BBC010 -MD = 590EA38EBB225FAB25BFF21A55CBA68ED0F8CA7AB89BA09412CD2D88 - -Len = 1877 -Msg = E91BFE2738D209FE5A8D7DF18EED381E2119D4EC5C507E7C3776F4EB0389A67B0B4E1D62E71BF71C37F84B994624DE6CA18C2C5D50E1E279EE0989E526391E63063E55553DBCD3AA08DF0D10A2D24B121EAA009A57C949498F9B21D80D1A81BAE55BE5F902B035406AE16E1BF7EBC1E21B377D3EA4A78039C5B572F2187D4217181741EA9487EE2FC4B6295EB152EB66B62F83E38D1B090AAC2E82220CCC46F8E1C16EC2D772805C6ED31243C5C976DF1B25F4FA04794716D9E60C84C13FD17350930C2B9D01DD44A19E2783B4E2DB7701996DC612C4246AF2428EEA9CBA510B14C9AA6C71F66785A5B2A0 -MD = B3643D8F6810643BB030C495AD769ED5076B5743E9C90D4A4C3F993F - -Len = 1878 -Msg = B5B7B936D7040BBAF4F133DABA95410B59734A61C50659654B2C441C4D74FC5BA926701516457F66CDC65603DF61E3D0E44A928537E438880EF48E93C29B60BE180BCD6BB28C32B30B29B20812E138C554EC8824CCCE7E49A6B2746018098056539133DF334C92D03F3DB12F32316C15D236576F00392D4FDCB065B4C8ECB96A81C4492CD93DF4760212A7CA123F019FE2EC2F9FC56EEF3FB7F21991F31621C8082E2032BC45754546C016E449DAC7B70DCBDC63FABE31E7A806FD226C798F8B34CCDA13EDC088E6DE58CCD03379269F58E583A670C71F5F96683106967E56C29EED242645AEA259CA0D2C -MD = 50D4ED319D5AAB23DF6AD620A81922A07E91FD0874DB15232D3D49E3 - -Len = 1879 -Msg = 2D9FFFF282AED376A69AFA50A700619CA32967E6A057A851B111C5387FDDC31BC54300F7233EC3A19FB2BC9EA509FB1AA9F2A1EA05D9427CF751CCCB39B3418A3BA0F01D63BA626A7A21B88F8D8A6DF57F178160C829E88E6546A65E0EEF4DCB0E5AAC1391F2E7C4890B90B6C38BA1A5828CE4D80119866F3F33DE9C029C1A8E89E7152961CE5FCE9013534A91A2DB42B086E7B9C8C6589474489103CD0FF683ECE788D889C81C75C80394613E0CB66B6B6FE962E356E3EE9B159F1460B2D753E2992744C34489DCAFBB429E4E151CFDB1EC5D43CDFA44FEADD2C1CF25C097EF26C48113E5F75BBF950AE0 -MD = EEDF4A02275617FEF3DFC984C2D3925CA293C2EA5C33E58D174F4295 - -Len = 1880 -Msg = D85588696F576E65ECA0155F395F0CFACD83F36A99111ED5768DF2D116D2121E32357BA4F54EDE927F189F297D3A97FAD4E9A0F5B41D8D89DD7FE20156799C2B7B6BF9C957BA0D6763F5C3BC5129747BBB53652B49290CFF1C87E2CDF2C4B95D8AAEE09BC8FBFA6883E62D237885810491BFC101F1D8C636E3D0EDE838AD05C207A3DF4FAD76452979EB99F29AFAECEDD1C63B8D36CF378454A1BB67A741C77AC6B6B3F95F4F02B64DABC15438613EA49750DF42EE90101F115AA9ABB9FF64324DDE9DABBB01054E1BD6B4BCDC7930A44C2300D87CA78C06924D0323AD7887E46C90E8C4D100ACD9EED21E -MD = 9897B479871AC73DABBE6221E27BFA67278F2BB044E3D0726FCB2B81 - -Len = 1881 -Msg = 9B5DF8D7D727C54D2E19A7A525180CFCF88067B5C5205A0A41713EDDC19A6A0CB8DD7C1C1DE7E9F038CFB3A9D3853CA1D24C2D17D55B0310C2BC696191C2D7217177E00DD4354276FFAC3FD8FB2414E309937AE3BE9B94CC3D0904CCC966B70031FE4F589460B1E831FE46C579F802AF8210B48D15409FEFD6DA627DBAE0D17A0F9E95A1490EFD05D458CB4DED08BF6201E4139CAB7BE67514F5766D75AC28BE0BFE57AEBBDD81FB6A3C2A5E088AD72312480BDDDBC85CCFDFBEB13A6FCD0970AEF6F00AC922B8EFCE8AEA4635D15C63370E92F6DFBD2B8201600C81FC58CD57148CBC6FDF1D862B30211480 -MD = F5AF09D56805A878B09AA42B8D6D2215E4BD750D032D63804DE45EB9 - -Len = 1882 -Msg = 6D35A20EAB3E02B1974F66603A111EBC5D3A1BCA88226D2172215E57EFB59DCE76E78E55DDE1B7FFFE0F1F9194AA9A7C9A88AEF15ECA5577D5AE885F6C1E94B960B697D9210EE5E08801CD5727CB870C5CF62D2AC769D52527413210DB7DAB8679C1EF0AC288B4D20D401BBD503D02686F8324F7C441B9CBFE85BAA147E24E4B93286C9B24C6940C4391D0CAD11F75A5CF326AD6033BB160651F5B8F825D4F460BEB14C5680C6FE90AF460FDBA3EC45CE26BA68649B88D9AE0FA737B88A4DF28241D9DDA4F24C02B53FB1063D54CDA4780BB877A48206C20115147B3ECF238DC969E2B10EF0BA8B2CC2BA5C0 -MD = 7AF19202CD2E187F9FD55DE6399E91CC868AABB1476F9B17485AA184 - -Len = 1883 -Msg = AC0DFB4ACEF738945A21058C6B8E9728B5F5D8BEDC5A62C65064CEFB085C1BE69573CB7261165EFBB479AED2920235521FE64D09B5B68BC666B22014078F4E08072B854584D2F8BF910BEEBB018594CAAC5B5B734592831EEC4F954A33C506524301D28CCECC3D7D60C0BB37F25FB0286F0A3D24E5FFB04E2ED33F17557EE45C1CB50D821929AC534CAD695FAB1C12A5ABC44AD5818CD0F899D7023FC3D1C797CFBFD7E7AC6FFB79E367BE21DAB7E353DFA5C79B69638720BC914102B599F130052A1B81C373856CD017F647C0EE802F3600C5D52B4EEF5DCA52C82A4D0814428BE9E37443F9AC287D430E40 -MD = 8F368553A8FD774EE7E34D1608D45F2F8A2A0E3FFF9E0A19C622320E - -Len = 1884 -Msg = AD54F5E5D76DD3B229155AD1F3D9063BC1C624A4E265BCF03EFC4475F3ACD9E85661F836E3A25FD2ED900AD6F43FABBEF7580D06D54315065B2AE6EA76FCBD28564382D0AEC2E61CEDE74F8C14A67E722E6177154AD1875D9939F9EDA3E3C7A84244D115B0907E4D0C9CC6E8FDB143A3444EC54584D4A909358A715ED0F43D108C44ACCDACC366CD5614D560F1F06A398F5DF4C6A00391EF89F97483B8FCC42C14E2D154F4E07C3F8A2D6026A5BA025CAF46AF2D374DC7E8B2301B0F500F43BCF1416C3FD87709A204AB342C2762471D28ECAD10C852D32DC053636465DF2265674855C72D70B306297F5290 -MD = F3A492E3BD6DE2BBE829BAA9A01D78C21C914FD1DA3701689006B2C9 - -Len = 1885 -Msg = 53D52F2032B1C46D95C57520FA0CF46EDC7BC6C0C33001D9627E7FD56932C7CAA7CB972083039C1E4060405D210FD60E546997D9D912444EF583455018FC3CFD51F9A4705BB9F6DA7F629A08B23F3ABE6EF27CD6CAC03349FA5062E9B9CECD5DD4EB64655705FA491C6AB62012E35231669512AD5DB1AD4185142C3504835E5B5CC4A18D9EC05DB517D5A05174097AC305137CFC30DE721F605DCBFA88465C1D693C69CC03EBEFAA36886BAF39DEC8ED6EDC49EA34E6768EA13D462C6F9827AB031FCDB0C514851A5F8754FB451E1EBE55CB69BCED93E7D05951152E8DDBB6F57B838CD1340C4C01BD33CF90 -MD = 43C007BDB744CD434D787DC0608DE6FE931B96D1D8EF17920D0C1A8E - -Len = 1886 -Msg = 21FE58214464B868040194D4F73D5C23118ADAC415179F783E76ABFB26DCB8426821E42C350A5AB99E1ECB27BBFE87C35A5E30A1420DB9E82A29A7FD9AAF22768946DD8395DC015F6EC475BBCD8446C89A7D76B4F15B3ABC12DA9B8394402A4A336D4EED27AFD435EB72C91715E06F6687EB0355B89D9966D7CFCE736519F50CEB43E1FD4433ABD1DF3AB907C52434C15E02DF9CB91AF7A90FDBC0DBC59E5D3373D5CB0A2172B2FA74700DB3B7923CFEBBF84F0F51F63999CC4CDF2555F6314A2CAB5EC7FBCEAA7BA6B1FAE3EBC71D605E5F9C27DCA3ACE176DAC25523E511B0BBC52FE5F9C5F299C381D488 -MD = 7219F5EEC1497249A234A3145FE9B55F069C9C31C13F58C8FDF0A072 - -Len = 1887 -Msg = 0DD7BAA7F00F3B72BF6E9F5EAB0176819ECDA7AC23AA78241F3D885EE7D791200C0970280D7772805E2806846882E7FBD0B09062782AFE528C69AFB1898568B748906264965BD2730F93F3501EFFFAA2A972DC37EE3B15BA330190A1945DAF78E0C75E191082F604240A6302D23935B13222347EBFFC7C0CD9B47FD7EF152DB68FC15374F7A78BA6CFA1272173C34F73051202C3D5D964A07AE03A12025E39DDFD4A5E7B0B95B84E81DAE08A0038F5EC4457A251483C4867D7E3F2DE4373FEDB63FECB542A936E59DD71EBE077681D3BFC6BB6D624E04199937BE910A5FABC44626A6ED49864C0C4B7A9A1FC -MD = 98B98374E3580B7A2E9DA2DC6404588C4410235AA96D2D6E78CE807A - -Len = 1888 -Msg = 3A12F8508B40C32C74492B66323375DCFE49184C78F73179F3314B79E63376B8AC683F5A51F1534BD729B02B04D002F55CBD8E8FC9B5EC1EA6BBE6A0D0E7431518E6BA45D124035F9D3DCE0A8BB7BF1430A9F657E0B4EA9F20EB20C786A58181A1E20A96F1628F8728A13BDF7A4B4B32FC8AA7054CC4881AE7FA19AFA65C6C3EE1B3ADE3192AF42054A8A911B8EC1826865D46D93F1E7C5E2B7813C92A506E53886F3D4701BB93D2A681AD109C845904BB861AF8AF0646B6E399B38B614051D34F6842563A0F37EC00CB3D865FC5D746C4987DE2A65071100883A2A9C7A2BFE1E2DD603D9EA24DC7C5FD06BE -MD = EAD2620FBC4BDFB14AEC8C7B9AA882BA3EB2AACC9A15D7D36DBA086D - -Len = 1889 -Msg = 6EF15F1D7C11CCB07B7B3FCD92C8086B27C8BFD1728F6B4AFF7C29DA17D2B3E5A2181181BB4B11DA8BB2365368594A50CA9B07969753724F2BEBCF7D208A6CB02AD7C8A694C8F86B551BE9A68D98564A941090EF6E5E751CD39909F87BBC7B516F9A829E3AE277E287C3548A69EB1019D5BE3951C6F3583B1B82F09A339E8C236B178C3C9DE3E85F6CE38E8B6AE0D02C0B7BA75DD589887A834AA9EC1B3F50D3495C72DAFC0E67E5FF5CA36FAE7155230A1C54EF30EBC3508E775DFDBF6BAC06EE23B6EB8ACCF8FBE8CFD2A45CB268E11FA574B016FED1DB09458276F53D8AEA57B3AA046393719127F4A07700 -MD = C816562FE52B49FE06AEF952DA2867D54D0A34AFE3A27E1CC197E049 - -Len = 1890 -Msg = 8F1FA4E6804B6EBEE7584B7B1E2F76CBBCCC1699BA68DE8B05ED2DE8F4ED2107340E4E1DA49DC7E72D96251A8EA551DF35410D4296250D71EE5FE4D8C396CFB48B2E5F2B184F7453E0D74FDCE51D99DC2A39E4AC291BF18BE2EF1D5A1A02DFDC9DC712D5A1A45544B1D45F279394F2316212BF7B5A0E7DF002E3ABDC57D91D7AEDC8EF95F0ED7F6E38EBCC7BDB7A254D6D50EBF8D4D63D27C8AD5F4DD843E4B7CB14A57349985A45A326DBE775AF9E97909A84AD9927E614A4A6D7EE825F84B5DE6695D1E9C651BB6EF57DEFD17E876D8CF2AF552C2B65C2446B177D76C02E0342DFEE23E4D7CC0B994A122080 -MD = 6177CF79D4BF496C9CC688FF3267C4ADF376C43BD0FB5FB7A910F37F - -Len = 1891 -Msg = 86045C9767C27085DDCAF969CD015AB4B8FDD157E1993A98708376BD37ACEF1F9D057D5A1B25FB1AEB74C361EA478A37D1ADC261ABA42555AC512B81FF0E689E1C76830BD69F9BCE4447B452300216452099D059B8D67EB157D001A0416FC2701384A5F2DAABCBC94C7FCED505064C1F0494694F7007FBFC4D43323E4C8D719DAB37C0E2D73D3677B3283114C41F611DEE02390466A417F43734DB9FDD0842A102B88238B5426250CD92F98EC91C540EE24C3F5837BB8F058A08EAC3FEDF32E25BEF8972ECD1D9EAAC379E1939541CC8542303D75F1D807857E545989844DF52F3C44587CC21102541D987B9C0 -MD = 2714540ADC13138060384CC42DAF08AD51DB96149D1BB3F01E4152F8 - -Len = 1892 -Msg = 7AD8A30BCE5DC62809ADCD37A2579DBBE2DDA653502892B72E2F9894DF9F4825606A13EE7AE4D0590F2F241C6614660E77DA5BD8D55D6C6F02B614E62B92087FCBD24B2E0CF746CCFB1C3C3B5B41058786AFAD296D6FCFE9B53E35404A7347720D1EACF3837B4949C6CD9317E18F8D2C3AA2326C4B848C44D524D140DD2555B4C6E96017DBEFBE3C473CCE502AD528636432FFCB4DE6F122EF2C9A05B6EBDFA1286EBBE42A131FBC54FAA8D060DD9574B363216189191AF074925D19D22B79FFD4B00DFAB9E6BA72F3EC0BB2AA1FFA170AE34FC413E5BC424D41C34AF4D991128FB3F5B05459A96AAFAB37C740 -MD = 2D9CFF91639EC9FFD85B324CB6C16106AAF310F309E6CA83B8E18CF1 - -Len = 1893 -Msg = 385AF75BE90E5622E14E98D775F6C880B790683A3369801A9DBBBC62D40467ED2B1F0DA3EEAB036373B8E374CAC3044D1D248F06B8C197D20419A2E8D4E7AE87E8EC56BCD165756475FA98FEF04CB81035552481D7262E5F2DD872C750C15EB1E02F4EFEA20890112B958717D16CBE93E8F2E33A83FF6DBC3E04BF9D89F03938526E1C277F86F12CDC1097CB13152585952A6ACEE5027206FC6FA3D72C8A3B3D065FEA75A4D1E2BE33F0E32A6628AE7541B0E81088CBDB7905140ED757E0A5A7798326AB0A26FDB85D9AFD35EB25817C6B2608A1F20A1FDB198CD3A72422C7512F2C744234826E1254AB8B7038 -MD = 28DF7D492E449323C34E682FAB27C1F15AC65491FCCAF3F373844985 - -Len = 1894 -Msg = C5ED28E519062E99AAB7E01D6BBBC42FFA0CC6E304E8D489D8C854BB2E4E949EBCDAB329E147128AF11C75F92988AA1A42875CDE9AD9FA4861C03F4A66018B0496A06DC48E70E15E2A7E51E35AD6B4F15220C249BD40ADD5DCC9C58C844383BD436EE9803C87D48BE54974CFAAA19585587FB088E0F8580A851A7C7A2A5E5B2CAACCC09E9560298129972CD26FB603FC5E86425AF9659B93F3F6695A1AE7EED525F31C717FFA699ABA0ACAB0317D7DCB786FC1F238C0B3D826AF10BCDB372DAC68C219674E7E9F9212BA4EE0E2E156F1BB818D4887D9D195247108B4A131448D91046773A6F48FBD748FAB9F04 -MD = 6357C58D9132B72C366DC4D32AD0DA38B2FAA9C71260098579712ABF - -Len = 1895 -Msg = B3303FCEFAA4765F0F8BF01AECC4ADF3BCE7CA9F5DBD9FB203EC0347C583A477FE8D7AA23756C47B2F8F76C1337305DCFD2AC0942546E04F30F1A4661F36EF4CC10A49905A2EA717D5E2AE1615330290B06E0C2DD6C55BF3B8FB06D49120D1B28B8EF5B7FCEADB97F2BA0BC64B458CB1E79934393CA7D4E03C7B3601367DFFA70B0AB51865389C817866F73E1279D97D762350737D9E16F6CD64A09391A956316D63BB611B580905A9670EEC91749CA1D1041324729F3E35248E183E6113E08EB6674B06AC41FA391762C8B0D1FD764D9828F314F80546EC300A26AF32ADB9F838214E457301F1805D2A1579D6 -MD = 9972EB36C1E837B9E8DEEC6BC71346827A58257C4FFD69C521D0835D - -Len = 1896 -Msg = 1861EDCE46FA5AD17E1FF1DEAE084DEC580F97D0A67885DFE834B9DFAC1AE076742CE9E267512CA51F6DF5A455AF0C5FD6ABF94ACEA103A3370C354485A7846FB84F3AC7C2904B5B2FBF227002CE512133BB7E1C4E50057BFD1E44DB33C7CDB969A99E284B184F50A14B068A1FC5009D9B298DBE92239572A7627AAC02ABE8F3E3B473417F36D4D2505D16B7577F4526C9D94A270A2DFE450D06DA8F6FA956879A0A55CFE99E742EA555EA477BA3E9B44CCD508C375423611AF92E55345DC215779B2D5119EBA49C71D49B9FE3F1569FA24E5CA3E332D042422A8B8158D3EC66A80012976F31FFDF305F0C9C5E -MD = 545E59812C7AEA1BD1CD48880D6650117DFD9E58A791DAC1072B19DA - -Len = 1897 -Msg = 30464E409A3B937C485408A41CAA7CE8421BAF61D2B7DA168CFBB9405474ACDFFE48F5D8F4DF6A72BC4EE068439A25048045D51A8A47446785C005798FE8A89EC63AADBAD883DF27989B159D04459CB3FECF20E32B410A39785D2D03188B012576FE15E5D2E7BE31DBAD9B7697A08CC49E6EA4E53218BDF1BF3D2107DF74CC05923BE9DDFB75BD1692AAE1908CA32F4AFD9DA23DB66BC723619498E0697D3934518F06E2D0909B8571096942ADEF6E31B5E31D0853C36334F09F7AADA41D4D0AB49AF327DFBDDEADA12D7AF97E4D5D7989DB22E1F8EE44FE2E36646A6E1225C8625BBF9A63A6769F5C191FD11A80 -MD = 8F8894DA9500FBD115708DD66A0D2D136A86885E40848A24D67A317C - -Len = 1898 -Msg = D0D5DB1EE32912B390DBB8642F314AAAC36F58D46E98D508DE2007ECB63F487CFD2DD81930D003C60E7EE781FB987959A86128B754E813B933B91A714C8C2BD09C338C3F2170D3753EEC2FAA812F81C287276B85371F398EBB7CDCEB9C20528FE9DA86A1C19749173C62A1917CA1DD82D5036CD241A45D0FA5733C8986B9954C173CED51C40FA1A0A0B8134DA1ADA8019615FEE4BAB7253600513CB960DFD335D1AB376B921E4D47A1F5AD75F88C7575EE32A5B2BF175EA230995B3252632C1D4B7B3E4045A1EFC0C6EFF757B31CB1A29C80AF96DBFA4BCDECE8BAFDB2EDC6F0F85D6C97157019FDC7B3B5033380 -MD = A462C36AF6BD7E0F300CFA4E4BD0ABBABA93159CBEDE68C7509A0429 - -Len = 1899 -Msg = C7865E96161416FBB9568C2667F7B69C2AAE38FEEF6E89FEE038199C889E72D1A0A7EC5E37181C2D6BA903D9A14D6C74EA1B009179BA298CA72BB9A6E9D5CEE1E2C03719D850D7703C692C83C58D57FA2EEE1AD28CED2CBBA6203F1FC16323A5352D08CCF63CD1E69DC35EFF1E07D1240EC099B956680EA8F7E907A42C8A5D7FF1C8CA85046113F337C9F5DC5F48DC2BB8CC548222274167E61262124E4483725E5E5CFCC8BE9AC6FD8CE4AC978855F9A63023187F4031CFDAF75D1E9AB2D500F7578770E1F08FD7515EEF064B6B0D2E1A6E37628BFE68CD33C54E5FFBFA0F2C3C129902F3DAD6C3EB2AFF4431C0 -MD = FE3791C1BB42C0A86C5CA79152F561DFB432DD8CA9D24F2E7CD69563 - -Len = 1900 -Msg = 6A0D95FB7E1385C290FED05695D0F9E1BB07CC16A34E4BE0C6E9AFBC809465EC091FE41102C9DF99797B33DE52459A7CD266D5005F33F565CAB3C020CB9331AF08D5AEF45F59242FEDD25A933DFDE0FB6ED5537B0C0F132D58CE45ED874A91D1030CA3D6ABEF53F7EFCA6658941769B9447649C92E062C863FC8CCEDDF87984211225C4999592C6FE591F4A31D397D96884304CEE028EA830222B15BE306EC567E2A2397151DE8D1D670D80D0335D78C3475BC4D3AF25C3E3851600D2A9EEBA5CDCC48A438E5D023D8EBA08D1A6445912BACC65717962071D96AB499A5A36C950573D801F6066E9E0837363110C0 -MD = 723061E4CD5E7516B9024AF974EDC1A5219D6345E3E0B3815B12191D - -Len = 1901 -Msg = AE7DBB62E7B9A47FDA5643A8221FCDEE971907867A43680CAAE6EE618EC365D998839AFDD3185E8F56DC5E57EC71090089B815FD2F2B6DCFA19B1EF25001714E6F9A3CB58D35C858E6912DA487FB806AE3A32A0AB50034AA7B3C063CC47FB7D207E961396ABD557627B0FC1C3EE14A84E6C94CB27BC74B6DF2DBF2C26E44CB031EF8AE82D04B11739E2CDAC18341C389DF1353C99D419B26D41B8B4F916E79A124FB16F30743B305A56674772B9AB9167C01C5745FA0598B2C5A63C43C27797E2B9D63F1B1D9527FD6A4997A5ACFC51B124750C59A356F70FF258A86BE32E4C08D4AC352642580368586B69CC720 -MD = 179AE61174847120D8F15341B4C094E494A1A3672042ACB556F62519 - -Len = 1902 -Msg = 25B99AEF0E7C37266F10CDF83715CFD1803E0C3DAA8B8D4D44A49D3118588007449EBA78E6759B825195D53D7370E1E20A687B9245183605EE92C7231DA00D1F83DEF383FCA4D437F047E7A1AB23F3EA309D0E73CCF6260BDB9C151E3F3C0435C72E986035418E4DCE502A2F63751062D42DC0DDCCC92243253681EACD2B1224B5F82A8D875BAFB362F76EF7919F2A0A17B69E13095EA71F06990CFD70156733B0C42DBBA31A130F648D451300EFEC70DED0E1F850A0C06F6C2FF0E38C1C9316046451CB52A21F06E1301A071C5EB8EA23E39A18D1B7218BD2833ABB98F4BB0CDA30F4B49FDD2FFF493D7167DB3C -MD = 5C65031532DFBBCE34C171A011E4F2141C6526BF6DC4E80B7789291B - -Len = 1903 -Msg = 715E9D91D3D364B04ED7A446DF0CC4AD51A5D8B31DC0A90EB9BF6675F9052BF3360E3D5A7D9C373C94C9AA9F6B200450272F4B37EB9A5BAEBE95C86AD74BECF18ECACBF3C8B4D5AA32C15E0D1457451D664967B6AA4676C992DBC1CA6A6576BB1788C94E0C97E1A85402B8624B03791F896A85A4A4132B7FD7679E8786B8A66E0526E1FD0782CD14D1712173F0A96063D68242652F52F8ABBFE284E637C62BADF97372DDC7CB2700FE31001D094AB77378D205CDE474710530028CD598FAD893536B6752A542171F6FDBA6893D3AE06CB8221AA27C89570E463E6C31620CA976234479B15B8A6258D4779FC321C0 -MD = 40AEB4A62F941E489F055F28014D3203BF2CDFE12F2FA721B2C8EA09 - -Len = 1904 -Msg = 08D0FFDE3A6E4EF65608EA672E4830C12943D7187CCFF08F4941CFC13E545F3B9C7AD5EEBBE2B01642B486CAF855C2C73F58C1E4E3391DA8E2D63D96E15FD84953AE5C231911B00AD6050CD7AAFDAAC9B0F663AE6AAB45519D0F5391A541707D479034E73A6AD805AE3598096AF078F1393301493D663DD71F83869CA27BA508B7E91E81E128C1716DC3ACFE3084B2201E04CF8006617EECF1B640474A5D45CFDE9F4D3EF92D6D055B909892194D8A8218DB6D8203A84261D200D71473D7488F3427416B6896C137D455F231071CACBC86E0415AB88AEC841D96B7B8AF41E05BB461A40645BF176601F1E760DE5F -MD = 7C2FA00961BCF020B95A0ED7193EA3583340BBD37898EF6A464C1940 - -Len = 1905 -Msg = D54EBC88B04A14EBB0AA1D59C3A4498FB560438B5884F6E6A744C78761AC06934138E03FDCA96CDFBFDCF94A2D51151C35D5D03ABD61FD7850B8309D65D3EC495DB487E6A7B6F50E6B30A58DB0FF64982A79409AAF49766E032F7893E0888EC71673858FB57224F9A3FC170B06B74E54E2F512F6188684937C070E5C21839AC032FE1150F48D229CB6853769DEFB8C1998B48E79A96EEA86993D215FF0152A30147761D8D45D5CC6B2B81A46F99B7EE7904F2C825AE1B454931A24E51F3B0D4618AE5D784C94BD747F08E5689108D7E2DD291EABA7AC562BA7C768219AFE2CF7325672F3F2237CCBFA743D184A9D00 -MD = DC3786D2EF123CDBF1342E01562DFAADDD2BD356E22E2CC53B6D58B0 - -Len = 1906 -Msg = 1B9DBAE7FFD110EB2A4EC1C27A9C2C09F59DDF426A1D32D18766432B4D9EBE9D6FFDCE6140764930D5526D38CA45C2E4BED10B620F4B5F6B42B2B2B3F539A062DC36465483F660A3B0DD1FD5130156C31497F2BF2EE650716897B9D79A69018CEFCE1CCE2955A5EDE0EC457B8533D802316B5D4420B9D5BDC708E9B1F39E0E91722D9EF6A646DE2313C4AA88E71C46991E799A564A3F53CB245A91DC9E704104DD930F2EDD1A39DA491329C13D75FD6E71B076E1F5A1DCFEFFD1E2757FAB630F4C7A28874BE66287E733B462D45964889B42080C0DAD909D86D44CE5B16503B41246C827E00DDB13BB936185B15A40 -MD = 917ADAC1DFAF7AA800430F3097259FF316E32E09B4680CFB31A6FCFD - -Len = 1907 -Msg = 948B3189A832A89B77011CCC3A5BCB0BF9921458DD9E8B0DF900E7FD1BED31053A714C7BAB9018A94E5145768224724F0715F7F959629120FC5F2AE282FC16C029759FD38E109CBFCE44DE36469613FC3E75A0DFA599F4B74358CCDE5E0E75934675C8A65687B08FBB8B0914A8D2A7D26578C98E996A12E6AEE779DD5B12B6F1381BC3EFC84DCD86A1488B1289E296484141587F9C2DE5814AF5CE74197ED41D6E47974A1012F465446B8B568DF4CC56629F0C34A9FC9C4DB1F2139006D02A071243594BCE5BA792F0D5ADD297FD728DE29107E60A87E8F0E3E360FFDB10FD23BB8B8C5824F0534F3C202838BA7540 -MD = 853A0A72CC4CA4D3C36D9CCC59928B9821187A78F4CDFAB768B94794 - -Len = 1908 -Msg = DD78EE486F318664E7A4D66B15E5ADFB15CA07955E290655CEEB942E5478871507B4EF5AC241EF683BDBD0611806DFE2DE432E04F1AA93E1608FD6A2B36BBB799611CC80B912E2FAFCE43FE688EE8ABD5EA5F04641B84E6D1C23C0742E64BFF7364BC1AB8B6D9C0FD89AB8EB4E1EEFBF7A17039891819092BDB39E493C8469A2ABB8F691E6BF40B45F98205C50292C7E860514460DEA5FD3A331342CBD70D7E8B2D5D6A94C341F27B00706C967A085DAB5E75A499E7B885AD3A3E3DB1F2B2DCC6F4AF700845F010E91BEB0594758EC13E345B41498E6D45BEF60879CC812349C395934ABB047BDE1E8129170525B60 -MD = B072B9EAC13C3CC41D0688D51E3620E6B1A7784735EBC3A54A2F33C3 - -Len = 1909 -Msg = CEDFB16E8666009C16626B4828156C6B374059093ED1E6F9D9FA3F524EB7FFD030F21761426E5838448F3D43FA87366FDBC1FC58D75C9F4762CB34FEF1746991EB3E0BA6FD0BEB93F0EE5A3BBBA466B2A667C818AB4C8BB1699DE0BDCEE984E45972BBB737E33B271B8C52B612013980996990F8B4A8D63F499D121DEEA5AC2D98B3C86BB6D0D62948562502F18E0C8DECE3A86FC28E39EF39A2FEF225A406B7B0AEDF4B3949B894F1846FD656AA8DDC0FF1ABD33F54F0A74FC35A9C6C299A4F89A24098CF3966F070BADD4BED889F3E1DAB75870127CAC9106CECA696CC186DF678D2E392AB592DB003AFB2659E78 -MD = 0E87C3F8A55C2738F0CF669A52828240CDC732E23971DFC471C6155D - -Len = 1910 -Msg = 88B7A04F09EBB5BA5AE5D406C00A42CD7A809FE193956CDD28EB763DCB771DF5CA02A0C3E963CC9D4ABEE25037E82A7BF776ACA0129216E80D2AABB7A61C84AB5A2E675F2DA118EB159E0495BE9B8361362B7D376D08BB2F407B65E69120A1009B55CC0A8425DFDA0422BC1E7005DC4E8EDF925B79DB2230447D7E0BED9111566A8DE861B6CD11AC5F4BC9F7701312BDCA9019C4D799D085396FF8A83522D7842FD8AC880AB792EAEA4C4DA5670A586D1B13B005B8D26B371264AED50AF8106FEF5FA9232FB4D780F7118667B31F219E0655C2CD0D9ADA7F4C0032E8A8C40AEEF8E710635EBD3288F81DA883C269C8 -MD = 5119ADDB56535CCDD5E56E53516DB51FD0DAC2C9B7FA134C701FDF79 - -Len = 1911 -Msg = 60BCE2AB04FD3142DAEF5C0D8BD52DEB6C60195DDEADC37BB50B8D7AC49D0736B9C98AC3F426C5BD548AE17CE4CF25089ABE525AE70774D1F52C219097D9CC7E25EE0A9AFDD92E63C720E09DFE45BB8D83EB36CBC8379C361C6D4A31401FEAB4DDA2E867937E5A6E9E2190D2411E837A7317FBB46859F8A40E24B4079219A2AA3A94EE94376B92D4BB86F3BF79457C1F32083F3AC6330AA9E87F49FBB75958E205EBF0133539139A68CA8498D9BA099251635F804EF3711B72D65E8F0D7ACE7A135024FB8C15DA8D8B0194BA4E8BEDD18E593DDE80558E2B9E697D053BC6363A98CB273594C9A8EAF93238532E25CE -MD = 018FF6C9FE3D5B19CDA95007655603E1D8AF1C27125AE8D7AFD47236 - -Len = 1912 -Msg = D782ABB72A5BE3392757BE02D3E45BE6E2099D6F000D042C8A543F50ED6EBC055A7F133B0DD8E9BC348536EDCAAE2E12EC18E8837DF7A1B3C87EC46D50C241DEE820FD586197552DC20BEEA50F445A07A38F1768A39E2B2FF05DDDEDF751F1DEF612D2E4D810DAA3A0CC904516F9A43AF660315385178A529E51F8AAE141808C8BC5D7B60CAC26BB984AC1890D0436EF780426C547E94A7B08F01ACBFC4A3825EAE04F520A9016F2FB8BF5165ED12736FC71E36A49A73614739EAA3EC834069B1B40F1350C2B3AB885C02C640B9F7686ED5F99527E41CFCD796FE4C256C9173186C226169FF257954EBDA81C0E5F99 -MD = 232DB22EB2C19109AFEFB71918EA2DAA7C0D76652E1884EA7A8AE646 - -Len = 1913 -Msg = 1155C2A0961A8BAE0B6D7525BBD4F8C6462DDCE9F37A406B9207C3F103FD12D777784434C89C0230E64768A054160B530F0E9B0183B00964F9AD9286B0D3DB255CFFD3B68FE526C3761F72A45F842667C277B210F157F1C9EF5C9AC7F7A050C2D3D73C4D48E85E29842F9E951C07266AE96A24285D316D4F372C067B7480B663A59AA04FE75AA96AF5425E2D3BE0DB2525FD9348198465C7917856716A667503729940B2E7190281D58B3ABE3B96CE9EAD0BDEC79F7DBA5172989CD1A73CCB8B51B67214E19D0EF7ED4F2ED33A7D773862A4CB899F8DE45197B878866F8FFEF1ED73641A5BD58F7745EC17D84D42C980 -MD = 61739D3E98D8CE77DE2FB58FC45B593E2B8663B48F9F05F9650046A5 - -Len = 1914 -Msg = 8821B2711521487594E20F09E0DABC97A5B5E29A37121BDF965F828D0972FE9386B28A37D47805308491811C8C1A4357895ED65C427E5AEFEA2926DBE7A909B8431D3B362A850A0810E6F30D7EB00C5A0FC8D933B088D8CC52932DC297B5CE2B644CF56D4DFDD59AB0760D5C11CC1A10275D4938EE0D2BD54AA9513D1B179587E77227703F0F6E66DA34CC1A0DD382B6213A6B313CC8C5CD75A956D027DA212DF965128933FCA4F7A2507C19E54EB6E915868C29A8188782998FE07E8CCB50FE433B3C2E66CD6D794A06E9E7D40AAE843D6700D1D4CC1D1C34AAAC811BF8489996F7FA81D6AA1954EEB441EE411CAFC0 -MD = B604DD80F245F1FAE608EB6C84236DBCE32B2EBC0FB7E9A197B6B385 - -Len = 1915 -Msg = 5C6398D4A6AF6BDA6C973B04F9E7E8A2800370250D1B5E9FF3595CC651BB246E73B0BF208E47048415EB6FB3C09CE3ABCB7C996C06B40E18EC35427AA1E5CF64CBF6F0C07B02E98EAC25C141ABE224D3989C3A34FB6EE68934875A40BE3BA10ED0BA7DFCEDE81C6B7555F6E5C9D4B9E92436E478D1169D436134F618201027B8131575CB8F057EEBA566FB8A1680072D32E60A978693FAF9FCBF82DB37B91F174FE5E88D625F2017B61B5DB7290FC6583C3C933B1B0A745C30D780AF04CE6E777FB258AAD030B3F10EE1B4FDE47026332A49B9C9DC5586133C7F5D69A1EBB0E70B841F72FE1AEA8A7A3D39E3C9629320 -MD = D3E196AB0AEFD57F3F17686103AE775389FF80DC59C433BA86710DFA - -Len = 1916 -Msg = 893576B07D2B49F97BC412C47E1799E6C620124B69290F2C49EAE0739988CD48926A6EF536BD3B0C970A060426BB360FB5793C8371E61DD70C318A76FC993C77763963831659394322E579EFC766835F966B0CC188032C8B6856D02BB9FE5FD7C388914D72C2AA94331B4AA185DEC2B3270C6B1E5463DF02CC4C9ECCD42AD2934D4D1D821615F965348C0CAB875219A61C1E8C12F3343443A53A66699180153B0525F95D2E3A655278DBE91C09F102718A90B7D5A4ECD6D237CDB9B0154E373EC89B6C1C705275B999D8C9A1D2F1A8D075038DD4A98EE9E156715CCED4D859B4D56B41F8767FAAE886CF5E67223EED50 -MD = 619C2319CC3153B20AF0BA1211C38DAFDA9634DF41D8420000DDC8BB - -Len = 1917 -Msg = C67B666E8F9A79D6B28AD45690009B68E78C65AC5B1D932B4CA91C320DFB4A5954E5E2994F9E52283229C62E91F030DDDA4FC3AE227A85BA7FBB96823EAFD70E8B98D299A40807451FA5778BD0F055B2D20FEC21FAB0D9A6D5AD2567A5974F399F28019F45964DDC7055A49676DA6E307E36A098C9BB2A01154BF7CF6D0981EE82C8EDB82FD36989795FD8638D7EFD1A9B96612AC7DE5CB00C29FF0280EBFE742D02C22D0DCB0702EC1246FFF5705C14462850E2F818A9FC8A596E5FD6C8BDC9B947BF76A5BE37C0727A8922A55D6BA20491FF4D6843EA0154DE71FD6EC129D38E2370124B5A26B47B247D1D7C3B1008 -MD = A4E176AFEC599F5A56B847F92F43752831C28213EA0275C0E599ABBB - -Len = 1918 -Msg = DA9269FAE1BA9E76EED4C864050ED952DAFC19882DFF9A3373228B31AE0190E601E36ADF1E791453A1153B48EF19D903772E062E47F6D887341A213AE96FCEC5CB9C2022A04A469C41D06DBC71CBB5C6BA2583574878B84B62E368BEA0E081E0304C7AB441399702536AA5A17BB13AE368DEBDFB83F560E65C74630DB48B146166E09F3AA31D8B10F10F4670EA60EDC1632CA8580A2345C04173F469B249319451893A198640AC2CB0A7E3472A17A19169C371D9991D2F859238C4F9EFBF980E05F26F3C9E172D36B8FE61D4337B4E1AECC4039A4103E7D2BAC1A7080F1932D8FA4FA0A2075C56B2F6BA83B63CE9D39C -MD = C47D7CDEFC5C69D82EB75E40066D5E5302509B440EE052ECE9DDD92E - -Len = 1919 -Msg = C8C9D74ACDB42DAFFBA0B1734BEB5C54778D7970F2226BD9C8EB24E3EC1AC11E982FA705F0479C049A9B6046E85A269A258C104CF442C8156D431960D021A533D73B709B8D212C221AE2D03EE7A6182117A823A9E3F3B4CCB43FA0DBD5B238241CCCCCF05CE5C62C3762237B6449779635D992D2FB730D2DD382B2E61CD5F23F680F848A4162D80010E87DCB4182F192395D73B93A2040C0FAA3E404AA1089E40E1B0B08A7F08036CC5E4CE1CE90F1C10DE4BCD4887564A6FFD7166639C79588B763F95101A32AFB77F727C45BFFAB4C6238C04E837E513E12A88C74B940EF933FF7547D08B8ADF32F8CAD5F61C38DEA -MD = B66055084859823C1D2B5BDD0E52A4AB4F8842EF4C8586BA1639F826 - -Len = 1920 -Msg = 5FCE8109A358570E40983E1184E541833BB9091E280F258CFB144387B05D190E431CB19BAA67273BA0C58ABE91308E1844DCD0B3678BAA42F335F2FA05267A0240B3C718A5942B3B3E3BFA98A55C25A1466E8D7A603722CB2BBF03AFA54CD769A99F310735EE5A05DAE2C22D397BD95635F58C48A67F90E1B73AAFCD3F82117F0166657838691005B18DA6F341D6E90FC1CDB352B30FAE45D348294E501B63252DE14740F2B85AE5299DDEC3172DE8B6D0BA219A20A23BB5E10FF434D39DB3F583305E9F5C039D98569E377B75A70AB837D1DF269B8A4B566F40BB91B577455FD3C356C914FA06B9A7CE24C7317A172D -MD = DB85AF5CFCE746240E6D44E73CEF66A72CE5968284D35FFEF7FBFF6C - -Len = 1921 -Msg = E1CE71B61ED330EEFBB09C280FD34A878F0378A0BFE2A046516BDA084DE38083ADCCBF42A6820DA5D46F1AB062B1CA433BED4DEE26F3D7A094F90BFB8A56EAC4064CFD3D5E5DBEA334D2984D4BB148F582B7CB64C82970AB0C4A947E28646E2742C1C8BC1C636FAA3A21216C2228E644FEA74B8E7CDD3DD006757317E1E5D4F2A67DAAD8D868D8831E36EE6BBCD7DF34FB38DF51DB43E26EE8E6C493057841F3085A6E825C4DFC8AEAC9A5B311A6E235FEFBA6C8F8D3EFF658639DBD957510DD001D2D18151118949B80B6BEF15F9CAD579ED30C3B2C95DAE83EACBFB5EDAD3A42C03DC8C8C7A713152CB065F28B537100 -MD = CD4C283F0162CC43B57B52CBE52B06F74A7BCA7B133248D2475F827F - -Len = 1922 -Msg = 3BCBD35851DA712C8C509A0A03388C743587A1C36055670DD0B5DD3144DA20CE739E417E7F197E72B91790D3B49338E667EABA7DAA04BA6046BBF0F1763787681BB487D690239DE655DA3031B7DD39EE1FF9C550ED6EF15E742AA0DCBF56D6A05782783A003E5CBFC272D3F71BD641C54215E8A6966A252F8D17BD5B208F25D7F8F91F4754D9B16184B333D2ED695483F99CEDF5224C4BF1F0F44323A9B3F801735DF8B284C072B4D7C3BFC31CBE1DB3FA2FB45A595B9C9FC8D98D8429861DB1D0EE3EA484C61F86877EC61AFE5DCBDAA38818EF002A4A4EE8305FB1109D3CCD222EC5F3B2DCF951A1B39FEBF19517B7C0 -MD = 5AF4AC2740E47367347BF10D541701C13D1EA68DFADB5302F1F004D5 - -Len = 1923 -Msg = 6C48CD3CE2E401AF5C680E91EAB0A386B90520022F017BF60A5B04A1D52E6618CAE48C0CC3A2D7F16848F9A372E4D0067E73E1183370220D73549E9C510F02BE4044761F82B2D9B227E059D3ED089BAAAB8FF61F65E37495A19C630AED17D8F42C5D24C109AF39E528856654835D0CBB2C55904EBCC2B95506EA73D11A68EBDDF0841F14092F2A4249EB9048BF7E26D4F929A0C26D1A8EE98D3ED6BA5D7E0E45E3A7C59435A7740D1D6D6BB638ABE271554DE4F7E88730BAF804F454924D33AF28FEF287FC6F50199BCB2207DE7D1C962D2E9555160D22DBE3C32FBB7733A669F8783F6551E8E5769B6291AD00CEDCCD60 -MD = BA54F0CF742E1EA6CC196BC284C6EDF84916A3467921AE1466DDA771 - -Len = 1924 -Msg = C0F2D732005BCE3A7572AC90EC56AF2AA22B3349D2DBB534A4D88FC7C9493130E380ECF6B9244868F16DE465C08798D4D6E5087346C7AD26629C7075682DFA28D2FE387E99557A1C39A8AD790FE665B59EF80ED0ED784B30C4DD5645C9EC6510B358AEEC8AE20FBC8DBF0B2DBEA557CE15B223F33D9BB23E38927021DB61ABBD26DB50C4FCFB219EB7CD540BEC18D23F60748972C58F7F474EDD58384F1C3411D67ABC5B5810E95CD2648463992CB4EC6AC8EB63DDFF8BF6890A69B3249DAE5E7459A489A5B66D899ACC09525177E0DF731949AE98C327B942AA6789A6DA286C7285A791F0FB2D3EC42C2EABCADE008520 -MD = F62A2C51965F33212C4CD8ECCE57C094E64A3ACDC4659BFBF46805BF - -Len = 1925 -Msg = E851A3020ABB0B3BB3D4A4020FEBCE6F548F26EDB8CACE828658D444701AC43931402030EEF8814002254E64ACDFCE8DBA162431F032027A27AFA93F82F71946D97BAA83AB79703DB230367952819951C068FCD0E30736B9D69F87620DC3EADD25F31C6206D7BEB14D0841CE44DFB75E69346D96CD9FE9B9398852F71FE25B1CB25DD7B8A96128BA039374397EE4AD1B22789D6ECA2C1CE1F3A7E637E2C7E78EDC880DB188D7AC6886FA3576DF4957CC600CB66783D799E57B7C4BF7ECEA78A741589B2EDBBACBBB0489F3A66F14529BF20DAFCB831A885F7C35016B768E7F2434D68A941DD86599C7A1D412D4142035C8 -MD = E755FE275C108C10DD9ABB0C452785999CF85EC80AA21FBDEDD1A792 - -Len = 1926 -Msg = B5D87282661F6A707A64532CA1FB72C7B80B47989810A15618A44CFB71F07D53B24D6D80C45EC2BDF485743C835F3C6B057DA0769F07462D1672A4AA6896B047B2010EF16C54ECC74C522FF44227F8409CB86F3C8BF488739DBF89F5B40477C48914764BB98E4A03561D74A5B3C11324987F0986C191B00BC5584EAA710CD7A9A1A44B108E8367FFC27B7F9AB82CDA038D38E36D4AABA71E3D844FD9D356AF4B8AE611BF842CE819582FE64EE26C5DABE4884519FD1BD8646A13ECB0D9B0B6F42C0B9632BE73B2C45A8912BCD70AE9F5D576AE77C9A1CACE95DD320BF9FD252BEC627C227AACE9CDAFBAE0748ACA750214 -MD = B3FB0F351F1929E83C3B7C72DD4B1C5306F606653C6CB6F079FE6B24 - -Len = 1927 -Msg = EC432C662CFF134BCA2CC20ADBB5A8AE473BD56F229107C5F5C830E5CBC92DB0367677304E4AD2949E93DEF6B5DDCC6AC2783ACF8AD34A8F7F8CF3B8C79263AEB131ED8BEB2958A593868F5E8163216B363865693CCF7B730F36F948CED775D0FB1E6A76727845A1D25F140F3DB68F6D3CA9F6B4D2985831E3287DA61219530EF21BD82BBBE28089D1E68A4C3DAEAF574A5E91F15A68AEEA7836735ADA78A2C5731CF1129C94398DDC0C2B5AE53E8BFEBD81AE08BB2B91FDB36C770C36FC77807486F19AE716114F61B23202F7540BA27EE2F72658EE6F8E81F11BDA44921544E749EEAB9ECD5C7BF857F83945D3FF8F8E -MD = D09ED8FE8ED0F2F0B73F8502CA7506E5BC1727D511D284A874FF6E8E - -Len = 1928 -Msg = 6172F1971A6E1E4E6170AFBAD95D5FEC99BF69B24B674BC17DD78011615E502DE6F56B86B1A71D3F4348087218AC7B7D09302993BE272E4A591968AEF18A1262D665610D1070EE91CC8DA36E1F841A69A7A682C580E836941D21D909A3AFC1F0B963E1CA5AB193E124A1A53DF1C587470E5881FB54DAE1B0D840F0C8F9D1B04C645BA1041C7D8DBF22030A623AA15638B3D99A2C400FF76F3252079AF88D2B37F35EE66C1AD7801A28D3D388AC450B97D5F0F79E4541755356B3B1A5696B023F39AB7AB5F28DF4202936BC97393B93BC915CB159EA1BD7A0A414CB4B7A1AC3AF68F50D79F0C9C7314E750F7D02FAA58BFA -MD = A1EB42FB0792361F0D6809A2E8DC062F09F2855B39BC2C4B7F54311E - -Len = 1929 -Msg = F6D60894154B44006CADFBA9450BD0D46F297E634844235C322E7A06B2D1B335F69F4EEFB914B4674CBADD6AE48AFA1CD9BAFAF884417FEE5F36C54AF8C34B8AD179206BCB45BD858FE64A5E3884825E90EF29489DF07C69329CA1B4D8BB5E638ABB382D8255958057AAFBDEF0899A5E470FF7222DBAF9B66B1AACF9F407517870C45289A20BE83E673E96D0428B75C8C98A30A6FBB4D6441890ABC54C45529BC7E2C78F167D3D1DF034C360D101444798D0C9F1F65A3B7E3D9761EBB5826B81B749F716EB428D845C5D5B9F2BA8B263659B54FED4DAFDD2DE91DCBB0CABF7C70D827A37E0388EF87C90420CFE25167EE880 -MD = A0D3D13E33B2096DC2D6C52D6A50976079EEDE79E75F4BAE5EBEFEED - -Len = 1930 -Msg = D01BEC496170470B95E81ECE9EA0A39FCC640FDEE3DA2E94582BBC0D51C7E5FCCF7C10728D0CDE4397DCA66CD95281A998B6F0025EC854A0697D54E09082F387FB3593871F12B6642FBB302BB9AC82BECCD1BEE69ADBB25A82CB11A42D0CA2F057052286746BD93F70B3774E1AE0FCFDE5D1E870F0A0CB380770C1E352F2E9CB8958496EDF7389F9B894D7AEB78D6FC1933FBE6CA5938660C5EA1054EFFF2F17F8C6C082A9E776B0FA244020A0729BE8BD5AD4D683E9FFA550CD928E773588385CA8501EB7F47AD60D98AAC1B518477C78DFDCC2A680D1F596273972528CE90A68A8AE4D9D3152AB436003D684CFB83C9500 -MD = E1E3874BE47FF9DF583256565569E9CD32778BE05FBBC3BC85D7143D - -Len = 1931 -Msg = F83EF50679FA09197746549D69559A19D040EB7B625BB41CBE543257D605E3329B19B65DE3884B55B3EC22A899079DEE016EF3D8D2BDA07D85218E0D91D1A604B71F97E7C77FB0D4E685AE7FEDB7C36344DF1EDA1879139E0E723FE5AD4DF1EFB6BB56661591ABFB17C4C8DCBA76342D9547CC2B7F0B8EFE5C6704307538F1794497B01745FE00C24E83CEC5ABDDFD37422A898FA04F546F66529D66338E9C16D70C34FD4D5C4695BA79091F6EFC5504D79B078994CB12238D11B078F4AF709F3B7AFCA4345307921570791F755EDD739CF5CD846476FF5F3714F578DAED1451CB9F17BF8931FEA89D693275B7A0FD775AC0 -MD = 2FBBF87AD5A623E0E25BC53E9CADB94F2868930EDA8DAA56631E2E34 - -Len = 1932 -Msg = E397D0A65D8CB58DCA01E63AFB0E80D42DD48A722C042CD0248155DEB09E4520B20E2CFC093B1D19B60DAEFCDB7D5AC389531305570BDD10F7CEC6F2B7505E651880EC29022E954062E220626FFC2D0BFA30E4F27A8FC90110D72847562183A5AEF08623EF14EC1F760A11544A536342107675525276A97F07B84EF89A89BC6585DBF79C982203B26F1C73D5620D5A5AEA82DB45B87E2E2D096C70593E48301F7D13ECB5A6803A978E709754631F2CEBE81E0B24B00521AD7D1E749385944064E7B437C18C3B5EC81C40844D3EDD7703DE23BBC351EFE62035C20D6C4A0C051D06B88A51C0594CCA1923FB389BF63589AFF0 -MD = DE1813494B5A8DA3DB228D866CD6E5545300EBEE8714B20163A5B2BA - -Len = 1933 -Msg = 41FECDC28FF9A09A9A50831800EBDC57E0BFA56A6BDC15D110EEAA608BEFF84B87AA7D18DBD19F4B9AB3104FAD569B49EDFE479E42ABD108A0B3B46EFAFBEE1C36A4C46545F26FCD830156FE3A2413689DA4453B28FACBCB6D77DE0C9EF7A19DAE60F9625A833A77A39A58A69F2EA4FDCAFECD7A6ED8A2DAED0B5D21E5A72F2D2FE57CBE170DB151919ABDB92266C5F3D36BDAA93FA9924E7010914D35FBEA35B54BCF1C9A2A60CC5C7874ED873EE98B0542A4E63A1A9D6735BFBC27D108003F0A960960C38EC286C560BCBA0FE2945D43B571BE0335D4E0ED7379047F35B2B026DC0A158E9387A04BF369E1DF6E414F27D0 -MD = A905F9A6902B659146B6A810FAC7C342614FF87BE45BB4B6E4F5ED1F - -Len = 1934 -Msg = 7A869D4DF91F80B8A8B95AB98D919C84D51708E420A44BAC3CE15AE2865D209E4473A25093819173B75EC7D2D6760CF177301ABC5ECE66658BC64B0DC64B83E9B609CCF9C85F3A2EE13B48E1D79DF6D56F9D5FF5630ADCC4CEA8B9E9414717657F90511F3F6DCFB04533DA5B1989AC0637501C0B38C47FB0059B7C3A5E0843D51B7F3D50FCEDF32B7667D82696D457AEAF9885B332390863A0566CC1827B29C7FFB8B0E808625F41672EE698A892DDFBCA2FAA5912407C9EC646B23E8A3449D47DA8DD3DD116B6304D75667880F07D5A3E71A2A06B8E8781F9B49B845E9A778C422853F303E0FF3326FF14300ACE16BDA68C -MD = EA517230B9190BC3A58D1E621BFFF6C2B0B51E2C406409BA1C31ABE1 - -Len = 1935 -Msg = 7DB18BB52773D68C0D01A7D22F43EDE79401EEA2FBD6B8CAC5A27C095B17D757423CF06D69653DB9E8AB88B0BA9D7FF8FF9A7127D53B75816B0ED9E4D418DF5E670FCD67DD1129003B424307794B74E9C21A43CB77ADB1FD3F31980A7C4D955FDF54F9DEF230D560E0C7A0DCA0D8F4E50BA443E5BE91211A16D94CEA5D1D5988BD6C6B09E0E80CE4C84B55D3F9F5E584B30E2FD7C42DA1F07FD717A8E0F1AA80074C8E69990FBCB870022719C70B4210F3D538C3E1F96428E56522E9DEB3A33AAAFD71D06A16F69DA49A94FA15E13EE90BBA294E7A7D0FE376FF4B07596EEFB517074ABAB621DFA2F3F8099A167D2BD601B4 -MD = 88CB9262AEDFEF3FAD6C2A3DCA00776CB21283538B6FBC2D373A9498 - -Len = 1936 -Msg = 5668ECD99DFBE215C4118398AC9C9EAF1A1433FAB4CCDD3968064752B625EA944731F75D48A27D047D67547F14DD0FFAA55FA5E29F7AF0D161D85EAFC4F2029B717C918EAB9D304543290BDBA7158B68020C0BA4E079BC95B5BC0FC044A992B94B4CCD3BD66D0EABB5DBBAB904D62E00752C4E3B0091D773BCF4C14B4377DA3EFFF824B1CB2FA01B32D1E46C909E626ED2DAE920F4C7DBEB635BC754FACBD8D49BEBA3F23C1C41CCBFCD0EE0C114E69737F5597C0BF1D859F0C767E18002AE8E39C26261FFDE2920D3D0BAF0E906138696CFE5B7E32B600F45DF3AAA39932F3A7DF95B60FA8712A2271FCAF3911CE7B511B1 -MD = 1AF4A3AB9A07CF064C254D122CC7DE15E0F0D3CA3DFA50EA1C43A78D - -Len = 1937 -Msg = F1672F20DBF2C8F24A2683F43D202D70C7328A600DE10802AE491FC2EDBD56B29138807A423626679B0F191F4948B1606C547A310052F325871F837C0DAF5B43485E3799952F53073D6823D0B69133619826DC50632438C65E32D7C11D402496FECA7553D8A4B93EB669D2FDF87ECD69E1E24AF18A3D8976BB63E33F48809673E390A151F0CCB0F2F551D89128F95B6B3697DFBABD98D4E176278B7034884EED380F5B0BC287DA7F28737A9096CB017928BC72B7CC603C1ED0B3C035FE49517F77EACF6209DDE29DC7495DCB29A8ED6ED86ADDA488B3D53685BABC734CD5BDBE2A9D4497F7B337A0B49C65496CF1977E356280 -MD = 36A5DC7A11E6C7D2435DF2BA6361A9FA85D8D4F68A4F1035188112D6 - -Len = 1938 -Msg = 1AEAF41B963F4372F9E9B283284F91E257A93A728E7DA3737990BF7F6E62F5A504034AE08E2A4B13A07B78A950BDC6C677D740E32673583E0E996440ECFF6F6F5E734FCCDF1F94398E8D837FDF99F8811319DFA90BA5F4910B757F9926DCEB0896B08AB66C874B5A272E0E590803B77F5D0189FFBFBEF81CD305F7A8749C4F6FAA00FEB58AD242D68DE4B100BB2C30512AC79A3168D25AD0AC4718DE8561DD01CE6F38262B835728A85853486357486978A311FF1009082D4C3FCB7ED3E759AF2E7434669CF569E1326CB269BE5F51E20F1591143D7503F64247BD9C36C65122C2702CBB4A9A097FCC0367C0BA13F607F06240 -MD = DFDE46AF02C3FAB28B76271077C420CAF2FD6C93CCC88CBC75758F75 - -Len = 1939 -Msg = 657A2AE32158D7A4F49CD42430779EA1403B434ECAE5229E8280AB3154F2787840F4E3797682B8194D95E0D2207D3C68E7F92CB9F1382C4C79D57E0D78F801F32E77CA71A5982E1D8077723B7D7A96576108DB019F9DD4F314313CA80EDDA39BFE9AA9CC60C9AC776CE720F625842C4EDC3CDFF27C90968B7D5B5F51389C4B7E43636882A531B033BB25AF7747E780AD316E71D4B95D90974185D00DE7A07EFD6B5D86CF06CC49D986CF3E70574A84EA183059C565DC8D1B2676ADE9983447423586C1486AA1C2E0C7958C27075842BBBBBA68025A58D35E85B3699D6CDF95758D088C74ECDB5980C7BFE1AD0F73E1DEDB8580 -MD = D63A1639D7851C628E3577F60D6B45DEEE738777D82C109AC33AA2F9 - -Len = 1940 -Msg = F3B8DFDD776558056FA3FF838F1A97119A5D7A7D5B351F1BBDE608E59CB534AC068A86B37B41BEE9CE0E032948542F2125A89BF502612A813D83E3EE50559724EF21B0F25BECE0B0EC3A96D207C5C34505F0FC19484AEABA1129293530148C58379E00BA13FA7C241761ECCB19039224FBA9EC2EC1F7648AD0FDC6EF0ACDDE258F76F97D8049EF1E3885E835CC9A93F037763470179AA2905197AB76CEB0E3FCD46CD023EC166932CB65B1C11F08EA57AFC68D536F9164CEAEBD654C1170F8901C26041145DA94719274350C86EB5AC33FAC19B01E2D1B178C0AFAF80BBB4D6784CA00F5D7D58B0BC6D9DA5043AF55176886B0 -MD = 3D7A3F274A1E9EABC5E5430E8D0E99BEDB0CE92508185837E79E6EBE - -Len = 1941 -Msg = 3970E275ACB10C4632DFE4909D143EAAE1E2F39720B73B695E5C71613088D7872165C98A6ACBF09A746C05460F33EE8E00B1FA46ED219CE5C8FA8788297B9E3C6A96615970137839B03C352204CB21489921F774A16E3EBAAB9ABDF1A19CC6321DD6EFDD25C0253403548572BB4417663DA33EBAD92243E6B9E8C0F97B13B884126262409D2A20CC01AF3EC2F238CF51A1E3D7ECE9AC4A98C0446210DB4CC4993274494DD452D46BB66A3A528713480AED5AF3FBABF6BE979EF50ED443438F795A087D400282B6E0B5B52EC747DA0E2C5EDA9EB002426689B115A37CCDB46D6440830B9BDCAA59078F62BA0635360BC85EA388 -MD = 06F96079577989BB24A37E20E3349D917B8D5A374883F98C84075352 - -Len = 1942 -Msg = EEE6D0C949C72BFE8F83AC35A5DBCFB50181BA1BB3AD4F77E2636C68E1FB860A6AA0A0C21B6160A2453478C9C0769FEB0E7E6D122E67A7C78CB1ABFD0BCDD569ED8094FA1024E78913423150E0BA500615DEC54846F15F9E297E8F1C592AA7802F37E8F8A29892BADB5DE3E445946A88FD67A657A69B6B9098C6A6CB08286B04D541B88333E59CEB78615B0E4EBB54896E956682015FF77FBCCA79B1F68AD3FC82C9A56E5A68C00E4AA795C9C97EC7EE618D6E5D977B9EE1DC94E363F073D02FF9AE85554DBD7940441275C082B560CC13DEB402CD8692EA6C4A690321EF275862821558255E73BD8AF9309B735ECBD810C0A0 -MD = 59C43214728BE2E692986197EE6AD94655048FBD01B7A93B2D26981B - -Len = 1943 -Msg = E93187EA359EA34D538A88DEDF73F6DA1B62D445EA3C520AAB03D12B127123446DC72D1092EC3A1549E4BE4DC4BAF9D73511244D57A5D9218101353D3731D464510A74FAE679F346D9098DDCA12B9E3D23BBCF7A23617F326F72FF75F7BA6842D55D71A2220FD15F632225B66493220ADFD891339AC6C6D769008BFBF5A19E27D20627E16D5A445DD2C8DCC1AB54CF133C7109FB3FFCB6000AF08AB4A2C9161F883FC2A1FB7D0CBB5C748D6309660C1DA9E22ED9648E57346E02D1DD5D0105DA6413F4830A921869D869683E8D584175E65724B890CA53E7879F390C146CFD4E884BF681C58403944288AFA11B79ECA3F37F1E -MD = 83485E407188C195905B3CC648ACC89D36BF2C28AF90DAFF1FA02FBB - -Len = 1944 -Msg = 03D625488354DF30E3F875A68EDFCF340E8366A8E1AB67F9D5C5486A96829DFAC0578289082B2A62117E1CF418B43B90E0ADC881FC6AE8105C888E9ECD21AEA1C9AE1A4038DFD17378FED71D02AE492087D7CDCD98F746855227967CB1AB4714261EE3BEAD3F4DB118329D3EBEF4BC48A875C19BA763966DA0EBEA800E01B2F50B00E9DD4CACA6DCB314D00184EF71EA2391D760C950710DB4A70F9212FFC54861F9DC752CE18867B8AD0C48DF8466EF7231E7AC567F0EB55099E622EBB86CB237520190A61C66AD34F1F4E289CB3282AE3EAAC6152ED24D2C92BAE5A7658252A53C49B7B02DFE54FDB2E90074B6CF310AC661 -MD = C14D43525E18892C79142D887D2AD3992848B72CCC087F64F0F1D621 - -Len = 1945 -Msg = 79734C970C947EA9B10A7909CD077AF990A1305F88F918FCEFA11266A5C6B6DEB5D3D3C1782F0EDCDD3C7BFD64B4B38C08F75BC13210261859B0D062C777AA1A8140DACAA59260781F27777799C462E76F59499B18D7978B717955BAFEF3476C626952B91F9EE67C2E8CFC0F61CAD2DB8BF1198EEE8DD4B74AE5D28A4617091A1461DE098F5E1CEA67B7E387BAADF0BC08D3F8CB150F388395BA926F2C4FFE923DE7218093FF709C43E300F0DB38E79C6C07BD1134902E768A76FAECEE6B3FFEFFC90F498E2BC78757852F6D2B4CF9B3EC44C185B770B39D17482C5A547C4B4EED24748AF0A54553392542EF58752ACB832B9000 -MD = 135071AAEABC6754DA570A1F34AE93B256BEA28F242E276C9DE97D97 - -Len = 1946 -Msg = 471255C92FED4F68F468A69B5B71B02D688EDA01FB0F12227E8B84C10C80462126D821118F4882633284574456F49C7E1849C5044191748E0162FAF81F239409751BA227BE04E0D890CA74FC77B5C5887101EB09761B445C56530011E3518659C1521717A9273CCA06A7F287423E9DD5FA32DA7FF996EC5A629B4D908A4BAE72FCB3CFB4F9F27128EC9E566BA59E907E54E2FBB8243864ABFB6FEF98CCB4B715FCFED874AC30FE850273E53D879E3B41D5946011C60D6C18BED388E0CDBFD8B55D25533B7308C5A7F9B25D56602543BB74481E142127CEF2DE20287DFAF62375606557DB8365B81EEF89CE7E1B3D4DF3F1B01DC0 -MD = C61352FC5B3EE56CB63E608E4FECCAD0673351E9B2B45B5988BDE05A - -Len = 1947 -Msg = F2A7F95A3286702B02DBA5DF8E6D9F76DBFBDB08A945A3CD202503158F7AD59D4A06F304CA6C1329523ACBCDF43B9419D612B0D1BFB9A764D0C1588C3A9302202FD730B85E38605119F9C0326C38EDDC6A126AF6388BBFE3BA486F4A5820974477259DCE99678EF608871DD08A6814001ED99CDEC13A87650F449DC7DA3F476BF19A5FB0D88AC65BE45E5A8B94CFB3408C371B9A4856099C1865047272F8252A69E0B4650E432084FB53E1E583BABDB8896EE9F7E037DC96C87787B5CC4F504F8C3E649139EB5CD2B4292EE5E5A31C7927DEB948CAF5F30CE7664702DE79537A46CE8C5EA95B39BA1A05870C487E781D9A549B20 -MD = 173D4767C38FEC80190E39CB4DF96967F97251652A8F4556750588D3 - -Len = 1948 -Msg = 11281730B07493309A2EF913FBACA2D4277B2A5D405925839553C7363B2DA90C60A6526AC86363CE6AF778A0CB7E4A1D9A7DD75E16A1DA94702EB8EB8382BBD0389D436D05B8EB303402290A43F240A999887C169B8726B0B02956751A6029C8C3BB2C07AD102B37A0C52CED9220B5B0FB1A7F985075C6D4C06500187092E09D8A9A1749262523196A42CA1046F01378550F60924084F6C9AB24DBCA521E7D6957411AB83B9FD856A1E08D9725D363F28B0CF032BDAED78D9121099366C7A48003092B3B94E97EF04512A9CA7B7968DBAF134EF08DB292658F624A54674FE7CB79F2BA47D90093C867F4F06D33144DF9E5BE1370 -MD = BC013EF4CF3E2D52D9B93B0C46B9F653C8314E4763EC1E0B5D78E144 - -Len = 1949 -Msg = E5073AF60BA51D98E8645F20A209416A2391A365A0B3A78A3601E4CD1130FCDC846B32622475A9B601AE33C8FA463D8D152C0846040A9A4BB0EBECA1B9258111E886996049F421133C7D21F2ADA0525A06EECEDBD5ED8FE310D34EF8C71F27C18AAAAC2EE1E38BB080851383DA7A684699F80C0A7BD51A0188311C12AD5A058CE5540ADFA3A425CA5D1C00EDBBE3A5695AD08258A796642220C5D8BF9144B351C3B5753E7EA77D46903A4733EE24B4989D797E2FC6A187BC0AB855CE71A650A13BF4B64BF5AA6DA142320E1367D37439E99E2FA95DEF311F596E682A01CAFBA051D515C31823A93B9C71970843568C379C073578 -MD = FA12E2D03CFD54239A9297C54356019FE94188F7B899722357071826 - -Len = 1950 -Msg = F5E87603D3DA08C7C37AD0FDDD62337B423B6FB0651236F818458FF022F7B9FF714E352E196C7DDA164708FE21ED7223CC0C4670E3BA27667ABE7027BB471562C83BDC247EC9313B9A7E5F5B17DBC3B39B258954814813C427A9EB3234975DC3D3536AC42FCAD7C18435FE32A5D5658DB28BE1E61451137C677FF36834188EB6A6631FA27B2F2292FA07386B3978462FA263EBEB85CD16F30A0835512693AAC397C55E401808B124B5C4D1427E4EAABD826D74824C036E857250FAF95BF5011FAA9D7EC93AA84033518AE0E2C283DB10129B43E9B33D47C6C7C8909D58C18EE95E19497E387ED9646826EA2958A7D4BD07029F14 -MD = 657466C67B45C4F1B2CD9ECB3E2EB134C8B50D4D60CE25FA8EA82A3D - -Len = 1951 -Msg = 39696823C4BCC5F0D504B14D276F56B130AC9117288C81B6A8DB585A8CC436D300DCEA5C85118F594184128BE8D80AE307DAAF60E42418A34A626D4CABD960451656E60565B6519DC4857FA9D11D2EF1D5D162D95AD2C7C806218A00A7D8B71F0C6F2106173D95C77EBC8922A9C81816283504036697EE9915C39F844E2BE638D6591233A87995F98CF3433DD47D0A4613D6BA67B4EF77F855D31659C25C345CD6FC3ED635CC443622821977B46D56EB45062D4508BA1210F7A70FD01A2E03DFA5134167673A31ACC4A42ABCC1DC9AF7A409508F43D99163F604F3A32780EFCE330C03A1CC9BF5AC88092C914A23A27A96E5161E -MD = 62F29E5402D72FE0B6592A193FDDDDDDA637392BF2EE2B7D7B77D171 - -Len = 1952 -Msg = 2EDC282FFB90B97118DD03AAA03B145F363905E3CBD2D50ECD692B37BF000185C651D3E9726C690D3773EC1E48510E42B17742B0B0377E7DE6B8F55E00A8A4DB4740CEE6DB0830529DD19617501DC1E9359AA3BCF147E0A76B3AB70C4984C13E339E6806BB35E683AF8527093670859F3D8A0FC7D493BCBA6BB12B5F65E71E705CA5D6C948D66ED3D730B26DB395B3447737C26FAD089AA0AD0E306CB28BF0ACF106F89AF3745F0EC72D534968CCA543CD2CA50C94B1456743254E358C1317C07A07BF2B0ECA438A709367FAFC89A57239028FC5FECFD53B8EF958EF10EE0608B7F5CB9923AD97058EC067700CC746C127A61EE3 -MD = 116C0462D50D57F948015EC74BE9015707313712B45883C02FE84E1E - -Len = 1953 -Msg = ABF669BCDE5C63620ABBF5E74E8C613BE25B9F7DB855D2485FA0EAD7D46FEF857A755DA6F1ABC1ECE8E83213591C6EF5CAB3C346DC317332EB35A0127F1E833A945BC260FBF9404ED8B4A75B2A2C9D8CD69661541873B3500847861C803AC25208FDA7E896DF7B586FD018EF021768F43AA5EA0E5861843AACE2847263813BCA7CF762E6BBE72468A688A0AF80E9A73DC11C74524A13C0E8B592EB8077F18AEE77D0F106617799187EA3512427126B59904A5CDE4AE6D20034B6DF59C21DAAAEE7BAA7D99B13C35B58BE23406CC1D276A65042E9E78BBF42DF8AA602DB2BE09852B8C19700CE0D7519948055EBACABBF24EBA16E80 -MD = 887E6C829A27D6DAB18E5288983E8401B9EE46CDB01EEDFB23FECC63 - -Len = 1954 -Msg = 16410D74CB95F744EEBADF9BC50688811C4AC9131DC59AA3761DD2DAFA8A2C02E3E4021B613B3E971CB5ED40ECD2161B3AB9161D8E30F8A227F497E8721A88D67FB0712639823F824426FBC1FF08E27DCFD4474E54F9E6B4EBDD57D89BC3D5A847C55C2AA1002A0C0F653DD5971772650B4A9AF6B2358B5C5845531446AE4DF144EAAB797BE5D990E22B7DC582576C4FF8ACB3EED02B96948D252C66E8C28F043F9D176772AEF45FFCB61C85035ABE67D57E9F4EF7BAD93C39B4BE09682B158FC43A591EA7C06C456F6651D2C6562E1B6086E7A27B135EEE694E3D2AA07D13343E7BB2505E15FA8A486F114E1F5DB4D8D4D8145600 -MD = B4CC7F1BBDDA7C86133ACBED0C841D10751473B6FDF429FFD12375B5 - -Len = 1955 -Msg = B9E9D8B68C875D73D858308A6605688E6FE70FD52893AAF1B7BDC413892E3FCF4A43AA4CCFD985E0E73EA2AB52545B2DF7170E70FD275649651A0FE095321E878087E256DD3D9A67CBAA1845E7384F704CAC79EC12256CE217027F27536E36F8CD4F12F862BF5AFA786861D27627BB3AC4460426CD2F1E847DE9C72B20607158189BF77F2D46F22CEA2E4436CD9FDFF7E296D6864F47045F4794DA08F0B02D370296E206C16FA311CEA6E2F6272BE995F81B291B70534EE6D8932B606219784145B50B2C67C67CFF06AAE6294FBF282780CCB522B61E9DC2C8572782FA3B90981D63280E477E6D920B6249181206136411D859C020 -MD = D7102ED535B178467D896C1AF09FD4FC69C2586824FC673755757514 - -Len = 1956 -Msg = E71727BC500E230A97CF57873E425E5901107C83F1448440DA95F4018D51C486FE25C39EA3D361E199DA66198851532D3513A9F74236BC02F0647A292A57C33CCA61F4ACCB32890BC94894EFE36007E3506C1E89D495B39999529DBFD62ED78B8642E1A7CF4D478F955D0695CD506BD7368675100C35F12D679B6F99F9E7F57506F0BF13DF269141EF5E746D57FB445F3C2F3A95F7AA55378533165DDA3748F8E804C45088AD748CF2DF7E8E5ABFCD4A36B0656D7C84C231F3F38D7A50F3593BEDDEA2D8414C1EC538D243E86AB1E51015DF0F0C535F96FE3C63604CA0BFC30ED6EB8AB18FEEBE0B18FEFDCCF202BD322277461B80 -MD = 712138427C60DD64D2A39CCE240A204BA13F7A2D70B6897D09955F9D - -Len = 1957 -Msg = 5EEC164C54FD4B1DF8E215DFEE8F22A9AC70FF7E96D92EFDAD389EEF1F0AA918DFB4EF1D714989AE6BA1DDF9D87DDC8D04981E6DB5C3AEB569E9122F1F6E608D44F4661FBE39BCB9CB9A6968F7670FFB67BFBCC2B328D3C315491E7AE9F8E28A501B28F58D9E6C261FA7CCA6E756001217F61D561EDF515667AEF88E6C7639E0073E7DA6FEC27AD73D8ECDC408B0448788289801CFF6F4322541FBBED19FD72D5C6BB2D3358940B40AA59E1753CC8278A479520BE1C567A480D62BC75AEC2B656DE8369E2A00D4C426DD556EFE3C4531C8E2E8020862EFCF01D525A04D7355A56EDA0D09EE21C3AFE10635E824B9895E9C723259F0 -MD = BA3CDFCDA4B21CA3D91FE3ABF0550ADD9F74C3997793111E93A0809C - -Len = 1958 -Msg = 948BCA040669ED34E540EFD1CD355103D23B4453AA59908627C6F3B21CD0F5B0E06E8C90CB4DAFFD958A2257BB2352A6F20341F6475368E17833DA438804740AB547142D3C62DC9EA8D335CDA93E2BC5938AF59F7A70222F2BE15A2F2341F92BB7A4BC92BA10E16EDCD7884201E44C87E74F54C4B210F40EC00C046A59AA165C88DFA6841571F86CA8A3EC493EA3B20781D09CBBD1BF3758FFE56FA23ADCB16CDA95129EB525CA86AFD9CEE8E0C76B3AC30E39AAE2953D7E06DFD566B2B530D8CE4C0844193775FA86804454BEE5E97E991E0CF5961F934B3BA2B34B731DA477AD033DF5D5BB944E811B4A9DDDE5AFD0971515CC40 -MD = 314460D1ECB40866A7BC417F9E5C6ABE17ADF2072E753A0BB9D27978 - -Len = 1959 -Msg = 2B344C1DFEA8F82F33004C08B3C41F31B584D250684DD642BFB736F6B47B6CB8A0694BE038469FFED59C97303CDC5B8C8628159C6D4A610849CBE034AC2B61D1CC3B70FB8E19A6E4408AA9040B0281F966AD20483F617F06F071C1885F37D0C539B551D0E8B85CC17024BF1EF07D98812795E623B426BAEB12E4406625392E10F598E257430B51A4CC1AA6EA1D9BE8DD00E826A956584BD56530405739BD8BCFFFA43A0B94E77456869E730CFB7C674F1BF78FC3B282C37E16BB45C1C6664B16322265FDC9B1F23410DC1BC83CDDB0A4100A24DBB82981CF81025761CA8E69E8A5D3FBBCD2E0BEDA902B6DF7E621BA1957CAC83E56 -MD = B498D97DC67A609508789DFDB751F271F973FA6AFA8E6559069BB3BD - -Len = 1960 -Msg = 90B28A6AA1FE533915BCB8E81ED6CACDC10962B7FF82474F845EEB86977600CF70B07BA8E3796141EE340E3FCE842A38A50AFBE90301A3BDCC591F2E7D9DE53E495525560B908C892439990A2CA2679C5539FFDF636777AD9C1CDEF809CDA9E8DCDB451ABB9E9C17EFA4379ABD24B182BD981CAFC792640A183B61694301D04C5B3EAAD694A6BD4CC06EF5DA8FA23B4FA2A64559C5A68397930079D250C51BCF00E2B16A6C49171433B0AADFD80231276560B80458DD77089B7A1BBCC9E7E4B9F881EACD6C92C4318348A13F4914EB27115A1CFC5D16D7FD94954C3532EFACA2CAB025103B2D02C6FD71DA3A77F417D7932685888A -MD = 96F7111176641F6373701BA594090079146D4220F30B5120C12498BA - -Len = 1961 -Msg = 1CCACD735B6D80BDDFD9F35303AFCE91279D5B500DFF2A3E43E0DF18BC47A47EF28F25097DB8D0D46A714F4C9E45819AA6B76D0CF93CD40C58EA79E84878C8DC3C8235F13DAF55E1B0FEB2A8ECBB6F58CC64E5D2150875E9732154F6FDF18494C92DAB65DBB8C607E91EA876A0E69DA35EEAA2F76A006D8C96C16C58E0EBC4FBF425A36BC1D10372E30EFC4AFEABBD8A41352F8905A8B206A7415F970381B50F555475856C0F74FB68F4B20F53C959C7D4F8F9C6C4442890BCA2485FE72F1130A496EBAF5D1BCE106B1CDA803C443D0069E1F9B00F2CA2DD2FFF9BC3B72970C27F7242E23E44A992D77777E544BAD9E3FC0E86498000 -MD = FE087A44025B62146AAF77E706654468935ACD713D2725BF1310FC2E - -Len = 1962 -Msg = D7F33625BF8D38000F44C468F593E88028F26DF18E25617735C7AC39B585C552D1CE84C84F75447F9F75A38115C0525D65D60786CFBDC9B11465BE38407948044BF24F6010C959FE222E86285FA829F118DBE44B331C7973BD32A5821A303078454A8C694BB36206A0EBD9186448451E65476164F4D8617DD55D52309738D7E3EF91BC21FD4D99B746CFE60236D44B53D17D7E28CB09275790184F86D71CF52063130DFBC615CE0EC7F7A2BF9E993D4C5137518079A29D75F198904DB796EE3C5F9814F4112DF210A9967CDB0571E353E5F7AA5B472B725B156BF43860F8C150A5A8F6A545AF9C3ED4F48BE4C65F961EB542795B4200 -MD = AC75CC36666A2C5514714BDDF41096D2FD1B779A9DFC3E2F4FC3AE9F - -Len = 1963 -Msg = 94174FF8C5D36489C7E6D98198D1C7AF45147D146FD3ACEA280A7E316396605E822ED71F82BBFCC51A235267C58CFEA72A69450287CE7F3F9B915AC11B18558890F711D3B6DEEEB362AD037B39A79C7D213FAD77DCE5D23BD1A335D178EA70636DB86988E6483A6D0D9957EFAA944822FAE8C1E70ED42BC6ABAD56E93876BAB5F3BD11511B51A44A6A44965E65A45D4334B6A44050C86318D1EFC235E443532582F6EE13CE5DA824CCE76F56287B5C6C3711EE99ED602FDCF397FC0B629DA4805AB7DFF1B503467C1732D77425C4E31549FE21FBF5FA67CEAA8EB9B8F44202C4CE0DC0CBDDAFEB38866BA57EF156371A809B21CE1D80 -MD = 3B31BFD8F86E377E7E54E7149F2C287C6DD0FFBA1E0C57B23A0F6D3D - -Len = 1964 -Msg = CD5532D4872E63E8DD65445D2DFF5E5F98F5AB898C51BF15F3B81BAEEF33FCAB207DD00CC4489D0C6C1E55582793A7766677EF55004D12E642F30960237F733B5C0039F2EB395671B006B694862C1ADFDBC21F7BCA7635933E58F8ED826EEA0340895CB0C9AB05D3E8F70CF561F27E794467C9CDF12AC6AAD70925F3F192140FCCEAF88A10528C39FCC14F5CBB3F8394A576FF0C2B98CFE390F7645C1DE0DDC02D3FF1831F7047143F001791F7C9753D8900F554AF61BE43A4553F02860B2EDCC4EACB5591B05235D299640654A5EE4A38B5DCE6447C655DF36C82602FB9383F04B1AA6FFB495F101B4BF9BC55607027A55BBA536F30 -MD = 788D0888AE7228D9E89A46C13B0E25119E23E6E54A3BF8CC65EC6A2D - -Len = 1965 -Msg = 6EA799C47249BA1831270FA6B7235587C4F04527EF854290E156DA1C494DE0E65A5F6AB9A257DBEA55717A3D0D127944585C5BAC713D35A6AF8C8FCD5B0529A8684F6AF238FBFBE31149734EDD251FD4AE4148073E73157F1F7CF6EAD5366B6AE389D20EE9F1AA425E46C509C9178F83EBB697AC71439A8B9664810499315DA0B01DA01752D78D6C0F111FE5E4ED772688C70EC6652C29916247C95127AEAD9F585FFAC7E2AFD753F8F8E7EEA44C93377FB945BA6817920A8D763D069E73B0FE1B7059B88C43C3DDBC1AB94BAC3A718AD48F72F2E6303527046BE49CD2BD452FFB3A1F26673FF6B8F5048AE41F9DDF49EF9522496408 -MD = ECF895AF92E00C8972E11CAF0D0D228459181598E930ADF82123D12D - -Len = 1966 -Msg = A1F22C756A6CB226E7FAB31F870A4E3721035F9F592F429D56141D9B73DD7A09BE3DF7AFF6DD16E29C01BBE00CBD4F4D681EDF5E2173B51F17F8A40F54E5D9F02CED20AA341FD48C203874D5EBE485554221A8C4E9C20B4070C688443A48D31F479B564071AC2F79CCBAADFA8C432B61BF9F767AC5BFDAB1E747A1D8ACB0761ABF58DD8768F1F2726C97ED5936B0629E3E1AA1FB581845179E5542F84523E3E71212E1B3B6843D9FA31A2B8C6FFF5A71B3E37D6F1F6A9A904A500BEA9F9650D0D6F6E9448FA83BCAB431D26212E057002884BC55E908F59A90275C5E3E53084260BA75C3955FB76DA67072C20477037BAC0159BFBAA4 -MD = 9DBDA9DCE872C89588A3CDF2029E808D7C62B96370FFF5BFA16ADDCD - -Len = 1967 -Msg = 81809338942312D6009885462990E428637F38E8E692E23635B052D285C393B1FE82421747432266CFAEFCC25233A4BD1F40B95D1244A73F48F9ED0BD418409A0EE45041FE4E800C1AC1A886FA26E91C3375FC9A443D4C4791BEDD8A562569A5EF11AD5E5FCBEF3CEB4C8D6D7CB62A5CB373E2FDC17074345A5E51DF0B363F70DD7A286685489101622FCA652622ADD70013C694E3E0167001175F10DB2EF0E442071ECFFA676DC3EB76D8CCADABB493EEB209967DF3A526CD606795D3B52A495ABAA26750D6805169F81BC840C7E7398BA977AF73AC0664384313747DA5C09C312EF2594F28F38B00A8FFF56C55231B8EAF0DCDA6F8 -MD = 15649CBA2BC9612A2727654669CB65F87B854E84239E87EF6FF3172F - -Len = 1968 -Msg = 2969447D175490F2AA9BB055014DBEF2E6854C95F8D60950BFE8C0BE8DE254C26B2D31B9E4DE9C68C9ADF49E4EE9B1C2850967F29F5D08738483B417BB96B2A56F0C8ACA632B552059C59AAC3F61F7B45C966B75F1D9931FF4E596406378CEE91AAA726A3A84C33F37E9CDBE626B5745A0B06064A8A8D56E53AAF102D23DD9DF0A3FDF7A638509A6761A33FA42FA8DDBD8E16159C93008B53765019C3F0E9F10B144CE2AC57F5D7297F9C9949E4FF68B70D339F87501CE8550B772F32C6DA8AD2CE2100A895D8B08FA1EEAD7C376B407709703C510B50F87E73E43F8E7348F87C3832A547EF2BBE5799ABEDCF5E1F372EA809233F006 -MD = 9EDDAB2C9C60B122503C1C30EC6E74050EE13C7E103A05F9ED41D992 - -Len = 1969 -Msg = DBD3544D800AA1089CBB836C48569B2E763E156D6A8F09D6BC6744334EAF929455DC50F1EAFECC039EC10539DB8D8695A60FB242C96911FA4A3CE955BC7A46C4F057C58B93633BF80047D4450D664461C5D3D4DE011483710E847AB548BE8C9D70296BDE75EB478E34FFB1C90672435D4DA025C15EA940C8BA6C2C6E15FBC13244D706395EBE5DC90D48A9A4C9F0FF0269E7DD3B352CFD0AB10BB88C4C5CB8A822B31F1541486138DF7B212B522AE091FBEEA721E63EFA3000487B0A52BEA62F15ECC44A2BA2DC8814075CA990A7EC45CF73FF21E7A0B4ECD683368AA32032471DB5C80FD3EAED54757BB930A52AE0911940784B2D9080 -MD = 2F8D39D4A43BDF19BDDA6104121499B9BBA122C4F343850090C5FF93 - -Len = 1970 -Msg = 0DCE440272E7BF0E8808D973FAB447897D8E2437FA6B38F5738B9BA24AEB92DF2AE7ED077BF290998AA8A53355AE2B54BE1834EB453380DAA81C8A9ACE210DF4D5D9A6F303C1CCB3CEE10AEB826AC172253869B56E95E488D5E315BE56BC46F7572CAE284B6636B67A23986F35D02D01E28A092899852CCCFA3AD3575FCBC7376BB2F6F7C76177C066ED0C1E656A21DD2B8AA057BE4417F09B81B94C17EE37120426FD2FC9C8A146C85CA6D6543EBFC658D408DF7D18F1987AEEC78E8CD011DBA6DFBAC87D9EE4756759E15A92A9177AE040F5A2C3E92FC508E4F3D623D84F8395C8BF68DA80EF9257E74E192277CB1DA02FE0F8662B80 -MD = F7C9D10BF3F601F9AFD396A8CA8FCBDD1BC87669C0837FDB414A4CB5 - -Len = 1971 -Msg = A2F6C9FFA8253C61D6C8F78BE1237183E4B65C253EA14132A79DEAA81EF92F5A6C3D9F29B0F938E3EFF71161962A8ABA2FEE2BEBD3A02F8573F92525F5A98022C41D3D4984941E04D02040A8483F5743BFBDE3D622F64E53CEA89B5A237F1027F6D27A8B4046FD5366DB8F4CC056C23280B9AF8D7CF39E084E42762C4D3175D2B8CD9BC78229894CBA719201F4DA580034305AF981E57EAA123FF1444CF930AF1DE2EE6171BE5269C714BA85D15E6D69F42BC3448D993E82AF6C3372B0585CB51E39282CC5675677EC7F09E1890BD98C2618ADEB7C5BBAD4EB3FE58ECB44F8A4F8255E0A6129D739A757E79CCB39EE6748BBCAC21EBB20 -MD = 3912CA283DCEA1BC1481BC1E0E9540600A18782FB3EE4B0E5ED41EB0 - -Len = 1972 -Msg = 3B9779B86531629061CFAA92407403174AFC68A88CB78D3EB1CDE576BA91E9BCD160CA18C43C1C16F9ABC6C391C05704506710FCB8D0E2E42EBFE764A53E78721B1D2113AA21127BD90C263D4B4A8AA4FB2635D29EE4EB6FCC3CE26BB0B14926F0001CC3712CE5E18E21116029ABF3F61E72A7FC2E5FEDE35741E86CFE51444600302DB629893F0731BF6D2884AD972F36A53F9982669EF8E9792E7FE4FCD456C8DA6AD11A176BFBA5C0C6C0A822C37D085A610F9510F0560935961BE285E80002A9D178B9ED01127463B72000E61B1A146E78B815216114F777041CFAB127962D0B1159DC9B3236FDD03C2C401C842E99B9A433850EE0 -MD = A35FE0A918C8B7D56C2EEBBB2199EA6CAFAB5DE0B91BBFCD74671CE1 - -Len = 1973 -Msg = 4460F6EBE4C0F0C89A96962AAAF68A01064C41E45BC3B0C3073F09319F29EA541F1F43F27008DED6D1EF1F0386FEE37C05E09C68A51849C22891575FDD0ED0E632EF818A875EFDB7D132D6E8F16946BE22C6294DA34288ABAC37FE8CFF2E5BA5FC79E6D5FBA3418F6F0683F3BC4B8D1880C5B7A716593615ED64A1A84FB61B5B29FC773701E6B60D96F4CA628ACA5A52A490439FF6A29855EA58D7D118BD83451AF3685A216DFF00A8179237AF0DE8D847117A6E834AA00DFF30748F31643D774EC6647961E446D7AAEC1CA5C57FA205C3C66F407A4F629A7A2DB1ACBE20BAB9C41F6019CCC2E07CB96567291EF53878BCD000CD1BE3C0 -MD = 9DCC4869740763AF1E895A860C473B1AD90C021C31D3B20583894AA9 - -Len = 1974 -Msg = 7765B5933AB981AD4263A6313B20E75F946BBA84B3DA7FDE2C108E1F45EC9443EB2159E4CFE6F94FA71A46E14F6A31E87CAB6A46877DDF8F8E19E62621D27B2FCB05FB817E9B325993D826D92CD1711A5DBA1315FC53784B0558873CBFB903447E2A24E0CD84A84678CB9CABC4189CB8FB2E1AA53E93DB4DEDF70CBDAA402336E5AEC36C5316D124DB57C4FD68B63CC46016DEF71D7D8D04E988F1B3731F0822AFC717A036A54CEB947244E208A21E4D61FEE25A5CA55E6F7DE52A95629F379CDED7C9D5EED4F44D215FA6E62BD55B390AE5503EF2666AA564DAA2A4122B64B99632DE6095EB1DB5B92BCA0AF12E041B7939B96B8D3734 -MD = 2ECAE435193E4B820AAE5FE30F5C3C2452D2E1E8FA273665C315AE06 - -Len = 1975 -Msg = 17D27BCFC84896AEE10DF3866AA3D8A18783644307467341B3D585A544ECBD50573710C72D2C2639545EF16BB6902505A556841E7141238E5546384DE52F1E3F56FA342AD0A3D6315BB0565E67DDFE47C9574078CF7AD385082E310B3E14CCF9C32D0F1CB69D3A19668288425287263A899687445E4B5A791186494422CD40ACDA3876E51F8BF77BDCC709864F60D15A73DCBA9DFE257A30CED49A76724643C5E8F8D75E5B34066116DA94EBEF91C52AAF508C8DF1EC5F982227C95F7BC0CE2BF0A712AD48F7E862C61FADE2289866650D311D4213857C4ABD6C2CFDC1C89C7C450951E3DA5557C0EACDB218C97958F600DC7B22746CC0 -MD = 5109FAB4EFAAA3519FF45FC94E10A688B751D30352A3DD517365F0FD - -Len = 1976 -Msg = 721645633A44A2C78B19024EAECF58575AB23C27190833C26875DC0F0D50B46AEA9C343D82EA7D5B3E50EC700545C615DAEAEA64726A0F05607576DCD396D812B03FB6551C641087856D050B10E6A4D5577B82A98AFB89CEE8594C9DC19E79FEFF0382FCFD127F1B803A4B9946F4AC9A4378E1E6E041B1389A53E3450CD32D9D2941B0CBABDB50DA8EA2513145164C3AB6BCBD251C448D2D4B087AC57A59C2285D564F16DA4ED5E607ED979592146FFB0EF3F3DB308FB342DF5EB5924A48256FC763141A278814C82D6D6348577545870AE3A83C7230AC02A1540FE1798F7EF09E335A865A2AE0949B21E4F748FB8A51F44750E213A8FB -MD = 54CC87B9655180C0E1C6672350AE1952DDF51EE5D7E215569652AA2E - -Len = 1977 -Msg = C8805073A9044F80741F09AF69CAADEF2A17B56E785F262B7BE09A27C1EA05A4D58D04FE84F513CA24E2F3F323B20FA5427F0D8D7143B424010EA901A02D5969D8DA81B99FDF67F3FFC7DAC9AF010C7EC6C454CA5512116CCBCDAA15DF47C4D55C58F9B10724D3616AEE9B3938484227718A458A9B33440E61A9569F1E99667BD26D7C70B689C1EB6F1C557F689BC58FFE274C21E4F88C9660321569A6ED4A8CCEDE6640B4BA4E8ED6968DDCD5CF3FF1EF6DE0F036CD0FC81B7DADAA4BC7FEE9C0AE62AA115512F876FDC8896EADAD48C9A6123D6D8755B812D19E77B1A40C5F973C4586E774BE02F0AA2C6F62B1617D00F0EDA15BEE6380 -MD = 4BA238E63AE1548D7036E78FC6B1C47C444986212F988F50D79D6AD5 - -Len = 1978 -Msg = 187F478A37386BAF26EABCC1A56AED42BFBE0FAE4D858405A66DD88637D1CAD7EC3E1F7DA226DAC75FC33686476A29B7427544069EF6844C1E9F5707F24B671918ACD172F352AFD2F30AD91289D57F20751D58E23E928B07CF76E6617CB251814D264BE2658059E0CCA41C08FFFBEA7803DCC6E125E5092D349EFB0260FF0BFF9CB8A4EB7D82B195C4FC17F77F5641AF9FEEA9ECFF4682856638D4F12105DBA8755009269F2083E0953F3FC877D180B253F8F5591E1944D13C83776AFD8C7AC861BD5F083A2078C65B51B4ED174B1F57428CA24D798C12E724911618C4E620A7388EFC719A647DE1586541FA690BC1E1F2F2131B4FDC0C40 -MD = B56F1CC324F5404B5B4463A3AD5191F6CBD20E2F11CFC6AD1BCEFD8C - -Len = 1979 -Msg = 752534268E1492913DF547FE5A08FC558087006C000B2005E763093386C6BD4BD172873CEBE156F45BB4CB1DE99661B61870DD8C611B99DA07D15A6B2CE220E30B2DE3BB778BE30F30392769C84EAFA3697E04D9C8CECD1AD8065975A03D9984B3FF73AA757968F1E2F3C44E6E611713CE9FAE1849909F076A0BE17B80319515B58F4A27FBCEDF7DED27653655C05F89133596AC136630B3BD728988D833632ADED5834368856F1E77CB8B9BBC37D1CB5A989DD1009C8348C0F8FED009F62D3F37C2994824FA80BA8AB0AD3B484EF48979817BDD482064283F4E89A93AB3126405695EBFE166CF3070764B3126883A6C854901CD7F44DC60 -MD = C72FE3C62E37062B92BD95B402FD9DC3305ECD82CD6B1BE333CEA80F - -Len = 1980 -Msg = AC1569ED914F50B464922215661963F99EEC3C048FA809B032B9EAA69AA7B138B5F049897B1A73AD8CA4734F1B6FD6DF0112983E29820E8FAEFA6D530AB1FF03DE9349181D9C235D14689EC5C30419EEA0D891A8A33F295333B02227BCEA4DA7381584353AD9AB5603E03E69B66D8AEAB20B15AE84C26DDCFCA9EE7DD14EB459784495EDA6D273136653FA98BD42BCA1A0A714A8A3DDAD33C7A6B1916838D4FC25F0524E992DAFCC15FF866CF2DF1613A0C3B81C1FA6BB5D34ECDEFFF540032338EA9D372ECB57692A3AF10B7592179B6D70DEF5281A804BCB83C6EC48D8938CEB66EC6F3696D5A729D130C3F94FED71BD4A4071EA86F950 -MD = 567417A6D8881EC9A6FD66628BAB599FDFEDD04D69E15F485E186704 - -Len = 1981 -Msg = 24EBF97325E94624ED9571F110D4F9C0D459D6B659B30000F47B52BACA0E7C8E41C8DD1D4FAAE2B0803B22F7C49354507011DBFB157A8D110BE9F8B056470EDED8BE8072601C6FE963584F3A32FF989335EADF05240B355EB4A59770F7F370E02346058C74DCEA0A7DDD4E2EBEA8CB9036B0859B04F1132625A081993BDC622D8CFFA64A7F003C46067C6B224161C56C6D68647124C3B92BD0A1CDD24A98E15462458EA4B8510C7A7027DA769317AA0B399A1D0447525E3697A18C3F4C91D2E4064FFE358A459A3E97DE7DBE8E78DFF5A277F4DE7C4FDDAAF8D1A492420C1D6C60665D4E72598ED24EBD2D695053532561A5810002911588 -MD = 583F0EE9C7FC9A6908BD11CB66DE37E8EE7C523D7DE31F252D2239F1 - -Len = 1982 -Msg = F965E971E9A188AC8F57F2BA40A21C0739FA6AABE4FACDB1F5EB88A9093B42D1D4FB562335B5D10B10C0C6940A2CC0EEBDE1BDB840FC1256DE90CEF0E008B3F1BD27B7141DCA0CA42B579DB8629B7DA66E36D578906152AB3B22CB0ADF3C5544F9D8249BBBD51089E6C758349B8AE53D7C459E8DA42E7BD7C7AA6237C00DEFFA268C059E3EBC450760E658D104D7177DD45B3F3CB254E3FB1AA8D2B7DDD24B20A7727D34DF50FC5A103D9F2623D3A9488A4A8938739CEDADC30E0DF2BB00DE74E7E4105ADEF42FD83FB97B315AFAD9456795D492B02EE3F9FA942408F74D1D716931271A044CC25303BB04B4C057008E74D2BEBE20931FFC -MD = FC43A1C93EC6D4BCD6DB7F15B9F6158BDF463C67AF4061548CD4517C - -Len = 1983 -Msg = A3DFE4DDEB6F6CBC08CD03EDA2A386676E9E32DF1C093937377295A7FA10421449E7087C6FEDA907DEEB478CBDDA62BCF56CD9361386E607D486F887F77D9AAD16ED65EDEABBC5D2DB830A8E5059094C190E39DAAAE4C4BB9B5743A9218189EF5FA1CBC2A6E8FAC2878417D37E4B0ED6FC4794B6CA8A9D213452CC02E6DADCAEF439C940DF132CCEA86722563FF416D5FF13C38F34EDF3734A9E6E69304CAF7FFB959A2AF03D08ACC6B04A5E43FAACC9ACD2697F7E60DDDCD74948EE73171C751548A506A9319E0103DA0B8C97B35CE261647E92D2E10EFC9D57114B9C9EF8ADA583B084B8F7099520AEEF26548BC9C50F8A7DBB18FA2928 -MD = 46050852BCCD31B3AC2AAACAE224BAF24A846AEAF22542A330FEBE8B - -Len = 1984 -Msg = 6B860D39725A14B498BB714574B4D37CA787404768F64C648B1751B353AC92BAC2C3A28EA909FDF0423336401A02E63EC24325300D823B6864BB701F9D7C7A1F8EC9D0AE3584AA6DD62EA1997CD831B4BABD9A4DA50932D4EFDA745C61E4130890E156AEE6113716DAF95764222A91187DB2EFFEA49D5D0596102D619BD26A616BBFDA8335505FBB0D90B4C180D1A2335B91538E1668F9F9642790B4E55F9CAB0FE2BDD2935D001EE6419ABAB5457880D0DBFF20ED8758F4C20FE759EFB33141CF0E892587FE8187E5FBC57786B7E8B089612C936DFC03D27EFBBE7C8673F1606BD51D5FF386F4A7AB68EDF59F385EB1291F117BFE717399 -MD = 4629C97F9BA98698E0DDECA5E0A3B6DE210EA9E84BF942C2CCF4EC68 - -Len = 1985 -Msg = D32ED64B8AC893E8814F30BA3A421FE80F06FE8BB2599AE6977CF0387E07B7F6BD57AF3980F039921945522F75A1D9B1B1CADD6B666E6D19A9930847B3E7A1BCF942B8CBB25F6D63FD0C1A61365F64E645EC1957D1582CC75790460F92DEA77A3F53F4E695A1E712211BF187A379E04C40098BE74F5BF2DA7EE371E6C3B16B93D2A01A033EB41A3C5F834C4ACB817AD78BCF0D24B8FF876DF98ED9094A69FEDF58AAF100DC82B20CD81520411715FCB054018456C5BCD6EFF22ED949F9EE2C823FB2F22653118816CA66D7FCE9554401035B71939039B1E010A15DAA57A7F374025BEE3F9CF85A79CCF7751E4AFEFD4B1A8C71B6AAD3A40680 -MD = 6888057DD3BE79E8026B28EBFDFAD53438BFF6EEB5E85099273F4009 - -Len = 1986 -Msg = CE81B8CDF42C400880AA4A46486ADB10D8E58DDFF5AB61856EC7417A93F1FB0B0C788D0BC3457BA0639078034F22DC1FA93635B0259C4DADC9A59C7A3B80CF7D5FF82C2C8029E27F2F0FD612BE4D7271D3045947E173C971D1FF3649A7CF97F5B8849ACBC34E86FAC4ACACC467786666E1D753FFB933DFEF1C214D229505BA51C5CA6705E9513AF7909BD7A4A43F035F1A78D383F663708669B62922FFD5EA59B41EB44A3EEC3D38092F74093455F1A54C4A73EDF6B23A74EAF0539518A74F174799128F6CDC7BD2BA69CD7B2E69E35E97B9424849605187C6B3F3F2D0A0AE5443378438BFC504C6FF354BAC02E073D31C5C8DF1AB31B553C0 -MD = 3F1B865D9014A3ECBB17448BEECD8EE9B7271A0F43066A08B559AFFE - -Len = 1987 -Msg = 142C2824180B20EB38CB707804017AA76CBF53ECCF69E084A1B09EBB13ECC2B12B7D58EEDF06CE7446D231565B6A34C18E782C339039CA41CF94002FCD502270DB6ED60A2C7E2A06E4AD98EB37E94173C1CD531417F29A9188422727456F44E113E1611B363288D8ADBCEFC725CF0FFBA2BE5A91B0939FC0D1FF81CACE638B34390D2D5F0018E30D2C69780D715BCB484687D7D672F06DB11E557EBF9BDAE5CF982BA0C1257996805218672116D34CAD98328C6B62D2ED5C28E7A1B30DBCE0EFE498BBBFB8797271F1D8E8903D5FD9217435609E86FD3595762E824CD4C7DA5B1597C4251FF596FB267DF0C44863D3D24D72ED5997E5E59120 -MD = 537001C925A27C777A813DCF75479157F58E6B981BCFD452EC2B2C84 - -Len = 1988 -Msg = 329A07D707AA29AFC4D5E780B828DD5F183C0C481C6E12FE60CA6B188C233DF3973C832983BD59B474E9D39D0C54502D7DD983FB404C77DF6FA7FC349C8E74F18E7C2533346A0B505BB7508C7CD11687BEFC78D7A2EB6C253B99E427E0DE4FB7D2460BB900DDCF6B3528207A057F5BA40E89C810B35174FAA3A94373FE1CD2DDE4C8CA7274E0D33365597654C4F75E28F7FE03648A76B8D27F28B0AAF87331C65FDA4E1B0D26DE1849931134CE4BDD6F0FE898D05AFBB7F2C2D2D1F5C4E9A8D81A1476D04AC82225B7ABC2857B129CEBAEC02F343E2B8285729662872B8F29BF8667D9FDE69EEDEA464FB460D80134771FB375314E985FBF60 -MD = 3F9AFC0EA29DFB0B3818663406389D8954DFB0C0A8586C0600FEAB51 - -Len = 1989 -Msg = 531375EE838C53F7A0F60D2EF68193AB311A57BB99DECBB5318FA03CEC28C4614CC301A76EC10A414464A128402549708EECC35F14D0F41972BD85F1B2BD0F49EC725D32738A745F63C59864EBFEF162A744136ECE8FD317D04B48EED993D1C2AF428FD65CDEAB6AA83827C3C5F1944FF39CB3FAAAAD89E7F69F154A1367AB04A2BB739D42CE4075309057CFD50B197B63988DD70CAAE8632D3602984664FE7113E6CEEDBCF46F61461A36E8DD555334D0272C1BD3D834B55B3BF3193191E458D72E8BC0CDED3F311A95388F1527F98A8515EB1FB77F298F03AC73D587AD866FEEAD91D17925533EEF29AEFB53F8DBE534DA4902F1A564EDC8 -MD = 8B59416F970CCAC4DC13132D95587C3F6BCB28B6928ADDDC36441D04 - -Len = 1990 -Msg = 3077B114046798409B052A162823AE9CC4DB68F0C32E8E8A9F12B039C99B8C8D2100AEC68BC7AAD75F5AE414A8E458B2D10B430DF82A30178B66C7DCE52F1FAC05C8D28D511C39A3BDBDDCD43B46B68C7A591CD6ADF6F5AA9E5306BC308FC771CA43BF1B63B6CA9604A24F70B5A2ECC3C4772C5B583B6798F61352EF976DDC14FA9D12BFA3EDC1B70BC198837318E687670411D049476516AC35DCDEDEC5F77F36B5FB3F18607C13CDB7F9E0B413F5AC2C8DD8B6070BB84F40368F44C887E1B3D08F1EA5B52D82799F5BF18A0DA9A64DB60F6EAD631BBF93EADA405C7CB4D39E1129945E265B75A9322EFF74983470134A454B1AFF0F4529C0 -MD = FA25CEE3E66A37CDCC18FAEF818755905577CD2EA8F16765085B04BA - -Len = 1991 -Msg = DE175365B0EB7442D7AC52719CEEC2A930CAD9B9F9BEA109F0F78668CD568EE0C1D4D7A82D44D9D1DD2C01B8A3C74A4EDBC9E59FE6A646C496C8955F96B385284FDD2F7B2715C71FE0A062A3F890F2C03713A234E46C7AF287FEF559CE955FE33CEF3BF62C0A811B3E366782000CCE4781C94F1CE71601936CCAF21EE51622E7115CC769C1282E9A4930D7E4BB0FB324C5A8F6414AE1C443E61FB1910C1384B3848AF40B8A4EE96241CC132F0BE6603DA079E67AF04C234972613857FD5718E54D66D1B542CBD964EC074DF0F48C21509641ED11B0C4FF3F6950DEFF55526A0936D4DCDB28ECCB9D83BB9D68D93C3AB18B09AB8CEA1B6109D2 -MD = E3D2D1A2751E2DCF0273FF5CAED77814D11E2997B84647A1253CED9C - -Len = 1992 -Msg = 6A01830AF3889A25183244DECB508BD01253D5B508AB490D3124AFBF42626B2E70894E9B562B288D0A2450CFACF14A0DDAE5C04716E5A0082C33981F6037D23D5E045EE1EF2283FB8B6378A914C5D9441627A722C282FF452E25A7EA608D69CEE4393A0725D17963D0342684F255496D8A18C2961145315130549311FC07F0312FB78E6077334F87EAA873BEE8AA95698996EB21375EB2B4EF53C14401207DEB4568398E5DD9A7CF97E8C9663E23334B46912F8344C19EFCF8C2BA6F04325F1A27E062B62A58D0766FC6DB4D2C6A1928604B0175D872D16B7908EBC041761187CC785526C2A3873FEAC3A642BB39F5351550AF9770C328AF7B -MD = F45034AA94C1A2686EB849EF4262F2F5BA9ACDD0E8EA32401E060B43 - -Len = 1993 -Msg = FAABF245E59C1E88C39FDB7ACB77B2B3F67FFF22CDCE4F109B321C5B720DF0E4C3995B01968676D4305C88CA3A539A9B740A97068AC91F966F2111C7AD7E1A32E947CAC73F1F5DB8CDB85374FAC8DDC0B964E506F042FC8C76D4273E6CC1C370189E60DDF920FE9895F4C2E6DE87B742D09BD90D0C6D792A0DBA942EA21D89C735F90BC71CCC32BF661AA35762EE8C4E5C354B8D72F9124134C02E15AF1E7BE14B8CD862FDFE7838CA75BA76D8CFCAA427B0D4D65068999B9195948E387EFB1596EAF8AFDCB4D953F2833C2569FB0C40252244A356DC044ECC03FAD63D1BD2D2FD9A683731A28C0D13254EC9BDB5EF09EE3A1AE3148A143EA080 -MD = 030393CB2EF5595BB41B9B2F332535366C08FACA70C6540D0CDC6C87 - -Len = 1994 -Msg = 41C9AB2D7A66C27D36633BBD90024BDD2A07F4D266AEDE26023FEE9207565467B4FC917C4712D5ABC56CE66F0020390E5A2BDF7C36821AA032078721A8EDB4CAF94D055A26C182D42796936A6A1DDF29F4383D169DA0FB442F899505FFEDE41C2110163E7ED694562A687EDDC54D5EF2E7EDFA91FC7D3F73FBA2D80D37A5F980435CBDE686408B3BD2E6D8D2449446F7C6C2B441965DA6D17779FC3F33DAEBF05E1060D378A21708DAD6520B1F8F53FBC65328C24B507B5E20DDB5E2C80766E794A1A71259AEA52DD1C885054E1D83ACC38010E2D26CEBDA306762762149648763328D341725644ACF60A09B2ADBB96002F01263572170188540 -MD = D49D3CD0EE377351C9B93BD207C70A29C178F7E807866660CFC30E9E - -Len = 1995 -Msg = A245516F0282C8B0E6F2EA8718D0ECCB66D9C1F90CCD26D793BF9DF3101C5D0913029BBBC09832E621D65527B3823C47708409464BFC59199221A3EFA28B413563137DD4A2EBBB5D62CE6ED865AC9F1D9A7696E891D1832FCEDA6DA96DBAD1F6DA4B52121ED3D4BB70FD7C9D46386ADC38821202B2B6F8D4562F5B10008E35BEA86B21991F9438B2D63F753BFD680FCB509A9A23087672C11317E44BED611A113CF7A5336B36C311992D9403A9E181BFE3CF48C0990FDC347B12FF6997C5C451E720396631BC26E43CBD69CFF6C77D8FBADFE738A0B91B7BC213A37314CE4D645A3CA98EF451165CB394A021ACCE94F268FFD2F95741B8883D00 -MD = 0D9AF4D44C3002C6922C024DF4AB983B6559F098ADF5BBA3B152DC35 - -Len = 1996 -Msg = 2F30C488FFDB8B60D41FFB45CDA988F0EB13DADB46DFB03654CF1BB662E9CFAAAF49830D2F011BF511E0437B2E55A0F56D7BB4BDBFA63896FB7DBF6741C3227CF9DB40FB4AEB4280A0BE09638F735F320B228B2CC65E88FA75339A948B7A1BA147532593DC85A793F723BF4EBAEEB9181366D9FA7DFC49C9F07B52E8F601B92B7F54A55D3393B6680FF65317DA41C0B0040E9206F65C3C183D8CB832DA4FCB465A731348ADADE1227F779D20788A096405A26CE76444E7D8713DDA48DDE0F56006D38E910CDFF2F1D0F20EF4F38D9B2BC9D1C31C7509D370E31E298892CE85D547ACCB4ECD36FB0BAA61935073CB2DA89B83A93D23F21B4D5280 -MD = 5DD421E3937A9079C4071D23E3AE4BDC680260F253612ECBE8498885 - -Len = 1997 -Msg = D60976242E138CB0311CF692E23FB29DCBED3AB53B9B9A5C810C8CC5EA22ACF5E5EAD41A541A66FD03DA085A088CB6BE50166B2C604777771F90ED0CCBD8F6C445BE01C650B655106D713CC18613F1EDA3C45FA92A68FBC24C660BA1F13440BBEB36E8B2813F2D85D82B5EF19163D0FE77B80A3E66B378D3F14936917A2390CBDD5AC367DF32E109704CA448F4B8F5F1937494976A7D721FB3098671DCD5615739E15A22E4D5D7CA1064DA010EC5E371EA286CFDDE523CF3EDDEF2BDB58DDFB021599B5DDEF9CB9DC83E5BCA43247FE5C31A9E1BE19D02C8F84F7816689D6E6F0444940300ABF38A70C9AFABEB54B5B926B3D90B5ED0C5AA3AB8 -MD = 8B1C9913C77C84D70E5A0601C9365ACA33DF27BB45940CB2CEA768D8 - -Len = 1998 -Msg = 8A1B7485D535E846F7F57A9C668B202F71E36C4970CF9F1EB14B433148193B466A7DC82012AB7C5E97A9D0E622CFA4A9B846A5C7B621E89CFCABFE752169ACE355CCADB19243718937F55E66682C6538B0C66B94830D7B03DE0FBF63E4104DECDA39E9667727602C37A9B5ABE069569F6E3D0417842B96576FC9FF3B20ECE46A68BAF6B4EA8D6855E84A72D6DEA2CA13546F9447D229E83D185698BB5FB1C073570B0C94557B90C45BDCAE552E45313E99A4B94D422DE9DFC84494E2FD1E90CC922EAE9C49AADEA642638F44222F71CF1D63BD2E7164396FE1EEA7AA8DE59EE4CB35FEADA22C3B752F569F2E3B2BD14191E956318D708E9D0600 -MD = 2BECA65605D41BD3FA91F84506E8FFADCA7A4ABEB10A94BA5EB5DC68 - -Len = 1999 -Msg = BE48556570B10A62DF06BC43B6A034A221C26E455E28A1541AEA3042ECF9778BCA7F81AC9F7525E190124E359E7436D15C629FD388AF0F7EC42F4096C7C421E0733A716F78C86A1D77CC66683FF16B022685409C3E99240255BFA2660F3353D5B9F1704890C9156E5CA3A5ADB62952239D3B6D3E6C2EB7BAEFC4B5B385B3E7A41BBDA175B9D00F88CF061E78A921C90AA0AF22CFB5E0660981D071CD67800A0CEBA6D6732D9D3EA0CD821378B5BEA369BFB1D42280F4A81D44F6C254337CFFFAE8C69F49A444EA23A736451942B98439C03F13A52FFCA6A77F51E46D4A71E384CDD93A39C713293C10FD79C906FBB0EA5251A2E7B55905DE81C8 -MD = 0F9E1BE4EE2FDC0DC7DC91E4C156D13C06775A03E06D3BF97F3735B6 - -Len = 2000 -Msg = B3C5E74B69933C2533106C563B4CA20238F2B6E675E8681E34A389894785BDADE59652D4A73D80A5C85BD454FD1E9FFDAD1C3815F5038E9EF432AAC5C3C4FE840CC370CF86580A6011778BBEDAF511A51B56D1A2EB68394AA299E26DA9ADA6A2F39B9FAFF7FBA457689B9C1A577B2A1E505FDF75C7A0A64B1DF81B3A356001BF0DF4E02A1FC59F651C9D585EC6224BB279C6BEBA2966E8882D68376081B987468E7AED1EF90EBD090AE825795CDCA1B4F09A979C8DFC21A48D8A53CDBB26C4DB547FC06EFE2F9850EDD2685A4661CB4911F165D4B63EF25B87D0A96D3DFF6AB0758999AAD214D07BD4F133A6734FDE445FE474711B69A98F7E2B -MD = 62153F592C49D3C0485F80073319049A510C730327940CD9D52F3698 - -Len = 2001 -Msg = BCB3D6F4A9BDBEB6222F317E94CAED0A102FC75E32C4127A8DBCE180166D4B034E6DF22C2B4A77636D6ACBB5CD1EDDBB280A97CED0E4C396723C9703DEE371BF2687F8CBE1D3A007B2C475EAFB030601F9034506412F0674230A6A6EB9DBDD08AD8D545C19FB0DA52506A488A789E5FC6B92799E5A8DB3D57D8985398F7E9C12A060CFA0DCD8A1E34E0A635055B616FA91C1985797E0FCA6566E03791D29D684691A39DD0181B1D584AD1C51004300FFC5DBD63D9494B2E0368776EB54624FA8BD1E8BB5145C76ECDF0D1183D67E7C7A0AF6621DC3E81637C86E160AC677851F294FE6730CE34AB488C447F665A9F59D356D7273A2675494A75380 -MD = 6BD951B3BAD3F8E78ABCDE4A0D5D46FEBCC9D31EF471B3CE24F1650B - -Len = 2002 -Msg = EEA3D4F70866CBB97B2FEB1F13E05791E52A8EDFC58B2339A97ED00070EE50F9EC377D8BCC8DF98DE2B99BB53345C13CAE6D6EB6E9CE0EEDFB59C0AA64DF00FF6B8AF3AF56CFEEB0DAD9AFA44564B11C3DD295618B07BCB13C6592B785B2E5B4698BC0EC8C6D57D602FE8FDCEFA619629CB52BB1079000FC478C92C24FC94E76B29D84BE2D489A79F16E42EAEE1D9842E9CC260BBEE9AE9A42A1170662E2617F72CC4B72A38B32642F7C47555532779FFB5B86FEB63E06F4C42E0849110ECE84D37B18A65C7156E23BFDB32B9756069DFCCABA8E3BC47E6F0FE8BBC7C2D9A4D2E071A595EEABF3E4CB6F637CAB25704E8D21379AFEB0BCC6483FC0 -MD = 56310FE660E9B30B9C1BE176068DBE5E868F8374FFAFB4B519D39A89 - -Len = 2003 -Msg = 07BD6D792691D1134F9DC46A34F930F1E073455F53A5EC48AA0113713A41238160C8E421097EF56EE05D0651DD91E6B77D3B7685A44BC480A1D0743305859EA10A24C4315DE8262842D79711A6B7B06D97E2D494229BD291E038A80A07DAFDE7E051411DF08E3BB812FC12F1AEBFDFDD0843B3075FC9431C4CFCA0A527BF7D4CF474783AB3675D4832B2DBB0E6255BA65D649FA0C52DACEDDA27E66FDB7E796DC6EC86EB06ED70F547634E82933A478427ABBDB73FE02BECE63D942C204F4F7067C990F6EBA66E3B80C4411FCE9333C3BD5783D222C1809742FE30DDA06C08CACF82D67ABBC903300D8B26A3F073C00AFA8D5DB5488FAE653E87C0 -MD = A38E63F5ED95B7DFEF7BB3FDC97CD749BF41E5DA4EA2A983E23EB979 - -Len = 2004 -Msg = C87A40A7F50BD9E5D0470D3888727F55F650491B815BEFB245944C2023F5DCBFC061894E69225379C450999472FC415C8406A5CEBA2E1197FC3D611530A994F9EC73F7356E02439F343DEB16DD09599500D362C7BFF01C76002B437A7E86B45187FD8FBDAC88F8886995767B9EDA6ACA959E7B82C7193FF7E6644F36BD861C17E490CB14F0F7F9319DC502AEB8F30AEE58143E1536ADE6C3C6479C64617A3C04C13BD16DBE91AA3AB8768154B6A6E27D8C9B14A5A4562CB3D1B70E124ED38D09A1593EF6C1E10400ADE66FA267D604C16F990DE32F3CD34A85421F19189DBECF7C02BCE65BC094B554732C721CDC73AA39C3C4A887785D42C6C730 -MD = A52AA4A1C009B9FFC47D195E87BCE5FD2D4536F3D4542D8BD71C5F4E - -Len = 2005 -Msg = 59897517159787EC93369C74AB7AE836A65F1F76421B8134EA32ABFDD66BCE4240723A8BAAF264CFFC4AF19F114780D4C11A8B978A6060D42239F3702CB8D69E03C0355239A7CCAB99F5F2E5B9B7C70A0CCCE87C215A27943430690D3F4971B696CA2FD552D362FA4C9B4923836BD2DFE678C0EFEB56C8E87223B609EED0768E75E3226735C3BCBCB399889286973DC2190EEDBC5AE2FD698E921395E7FFCA61DB46BE5187CD8F380E76DAF5625931162F4972517A6DCD875AAA46D2FB1C8EE156340156666D092FEC19C3891A4F3E375A9859C4E48ECC224E2B010173D59744FBEB0062E6F07994C725FF32F4525348238D9E3016A0D79A6F2278 -MD = EF6A1C3053D434FEBB06032210ECBE90D9BA9943D7FF368D5ADEB9A8 - -Len = 2006 -Msg = 43898A8F7A09FE62ED0229A3102CC1436A2D662224278D3053A94B122045EBF2C164EC70B79389F72D81629F47133C98A2CC0AF6C935E640B39F1C197FA824DAD41FCC51362AD27AE80FDD0075988742A53058AB8DE4AF7EE577F35B9506EBA415F16B4533CDFE5A952218A6D76DDD16A4DEC24C7D9332A41B6372053D1419C37579BDA0C358EB984C1490E7146372FD336216D0A0CE9F282D6D9919406B4C97113ED412DEAB3737C3DE9C6F6BA813C1D7253047DEF24637528B6447126F0B2470DCAC0D693C72816BBF0F74762183030F7F5C9B5D11D6C90E7BB8F50499982709FEBF58E291B672D523089A02D112F7BAED00DDA8B4138BFE207C -MD = 1F50653051541253463449B57EE2F8751763600EC9485ED4DC4BF8F9 - -Len = 2007 -Msg = B0077DA24064BAE6404B2041DD10F3619079446B7BAFD1B3901CE4DF21FA9BC02145AC75F8DC975C74C4BBFB110DC171736C6EAA9EBEBC17757DC4AF3FC4B5B4CA1D6004D79B95E2DA6099903B3E08B74EDBDC745185E67C7878EE47025D11B446B533BF710429606B0F64332EE985E100FC4B5A0189F1632CB498168AA59FF99149E857B579AA617C0D4C90A642C25D0F314C3AEC6C52A7BFD25AE09541DAB3CF3B1B547A20EDC13D39ABB120E52FC19C2C969D171CB2805FDC2C2192B52494B37B97A35BFD17AD015BA5830DEF975E1BF7C910B45729F7BA97A3E94D4517622A9397432C79B297876562208A0F8BE1971B32DF82470E29541AD8 -MD = B89CA9F14EAF729C4DB2BA6FA9C80B40580CF659911D726A805FBD15 - -Len = 2008 -Msg = 83AF34279CCB5430FEBEC07A81950D30F4B66F484826AFEE7456F0071A51E1BBC55570B5CC7EC6F9309C17BF5BEFDD7C6BA6E968CF218A2B34BD5CF927AB846E38A40BBD81759E9E33381016A755F699DF35D660007B5EADF292FEEFB735207EBF70B5BD17834F7BFA0E16CB219AD4AF524AB1EA37334AA66435E5D397FC0A065C411EBBCE32C240B90476D307CE802EC82C1C49BC1BEC48C0675EC2A6C6F3ED3E5B741D13437095707C565E10D8A20B8C20468FF9514FCF31B4249CD82DCEE58C0A2AF538B291A87E3390D737191A07484A5D3F3FB8C8F15CE056E5E5F8FEBE5E1FB59D6740980AA06CA8A0C20F5712B4CDE5D032E92AB89F0AE1 -MD = ECDE4D6EB0CF28010B45D0D310E7D05F08B80AFC44B8A359BE7E1923 - -Len = 2009 -Msg = F38261A1E0C715F8BE26B6F39B82CED03A42B1920AE44F32AC447C5A224B7CF3AD428C1395678EDA9BAFB746EBC7035124B2BC38EB18CF23DA956493035DCC4BE8431AFA158AFC1B8BACC8F4C609F903C63B4B34FCF935AC9EB787ED4CBEFD465C220B18EBD03E634044DF8C76E51FAA484C050E5B1D6DE2A87C17D6C59FA10AA10D1A3D3F55937FF92804C7F99ACFF2549D9938BC255600ADB7CEB7D4F461B1B337A0CD2DB31AF31EB32718C623E51E2773E3143C433613E6B8971675B5F6FBD886EB52112976D3D3CF3551A522F264E08CD23A54D560FDBADE04ACA0B0B51025AFBFB6C387698E3D03558E978C1976E50EE472A114E277255FBD80 -MD = 94A45263A758E5DDED3071F4934B9879881D8C1DDEA653A43DA66959 - -Len = 2010 -Msg = 0400F2747226C0098A84CD5B655AFF6374D3FCAED87289D590116712BBBE96F8ADE6B5BB9C58A3010CCD8AB0142C2750544B2AA7ED2AD5FF341D46D060C0095C3D1252ED17FE0560E7942DD9520861B3CDD5828B13886F88811F92281CD0D90EAEEE5664898A82178A86803F4B357F4497F5B433F13A69380F748E5C4FF58DCDB311869F74EAA70803CDE14FAC26A6F58C2B4C5ED5FF72F81930CFFBA834DD1696A78015A6A1300F5D1F0E557A07D19972FD133092CA07902E66D1B41369A986757875E33E0797A2724C38BE538EE4E43A49D711F816FA450A5D46286FB90A5D5F38CE0CFC8CBEEDF4FB164830E3FCBE059792E4A819FB9F3A903A40 -MD = FD7910D7DB6F5D30BE624E4C6B9E0D2E84A2E5FD5E13BE3BC4CD36BD - -Len = 2011 -Msg = 7978F60D35A8F4D678A3C3D9C9D4B348C151CC3665D67F3B391FF621CD2DAD46CADBADBFBE0B254F3F37194F20BDB05C1765F8B3B69C2EBEE5462918C2B92E22C2FC1959197805547E55B4527DFFBACFF0C7F2E91E05DBE570698350FC3BBA4A3685498F4D16E70FA79B427A1286C84BEBC91D19AF251CB553072929F0268282F052093306BCBCCFEB866AD419EB084198277A6F876DA551985499A6098155FED43EE6CB6EC6236D3D01778DD3822BBBA0A1D3A1870F9683B6FA81E1B78F8BB37E3EC126B34929012B99490E124DF37E1FC9D809C8A337358F9B03DB7B9ACCA3F5BD9DEEC8987E166D0F33CCE7E061A33852F5636B807F948273D3A0 -MD = 3BCC59D222BD35E1F2A21A205096832F9FA5130DBF4577E7376B9616 - -Len = 2012 -Msg = 521C82A5144B864024C414840BED6D9D038118F25D02D1A8B564B7C669C46A080466BA2FDA823652966A44620C6FDB666416892D427B76574A7BF2A33A22500E27AA6C00A655A0483C849681DE3B1DECBBE0FF7A17EF4092A4C9C64422A2E6810C0AAFD133DEEF9D1B8326B898E5641FFA338AB6A32698179F36B16C67707E1846E52105BF246FFBEB0341C92C4BE4E62B772AAAA84A91481C8E5C13B43330B66A27D9DEBD891989952EB41330B9AFC3C3A48DD35E8A62DC9777D5D3A83C478BF92A347C9DFDA5FF3295F093142BBA5DE4CEF213AA74FAE5AA2068BCE9AB181967944E379B959FE2AE8F5C22A21A5516F74EEC7B296D41C946864CC0 -MD = 431DE5B9111AAD9537253A9CE15DF70F21391B9DB0959610679C661B - -Len = 2013 -Msg = D431DB95235C0763527A87EF5A698EA7DDC832FA8377FA56A661499E5464B9C6638A1896F826FA102B8CE891A1BCFB3540F1C9F26BAED42603BA3EBA6F24E493E629588FC08C6F5599123C2931465CD90081EA2BAA35EA39293CA49FF2B83B4BBAFA7B1677A7968C97D8325DD9A41113D9CABD2FFDF3D5709AB4C84F6AADA004F3768071C1184BD34629760E40BB17EBABE7A347DCAB9CEF57B44B2D010CC7FD13411E86157D0D839CCFAD0C4B5C17E33BD5D879584B77682C56E86AACCA13F348F5BBD296161B20B4C53D537A82CDCD212031AA2E91F27FF8B8E0641A6D6FF984ABF8020F58C83FCA4C06DF580ECA80480C105007E1BD1B404F4020 -MD = 56212897ABD9FA2EDBDA04BDE7528E54D896714F18D4E1795D53122F - -Len = 2014 -Msg = 17065477F68B70B0EC8D04713DDACA9B0009FA8065AEEF1490D6156CEFE776FEC243003D10DB512A4EBCCBD840B0E0F210B5DE02288DB6E14F96A46D3135629A30D932E5D8B3A6A657B3FD1A66FBD8A121CA0B531ABEE644C425C9F858998A17E22F8A9F0323A6113A1F0BBB25A9DD8F4710354E6D4D1101FC903155977F27C8F4F23B358049FE6E289BF713ABD332F1712F6D15A3A8485D0583FA6C046D154D4ED7CEC383F568350D64B28985863978390DFA8F176A9D7A915CAA34DBD70EDA3D773E4BB8CA2935664F7E87276AFB0621F180A40BBDE010A8CEAFBB5BF17FA564A21E568902B77679A3120595A89EB768537C90C524440CAC31B304 -MD = 2F1B5DA7C4669BEE024FA2FADB26F2074F28956A6EB4766C52F9E557 - -Len = 2015 -Msg = 43F40589C133BD422DD57CA9EBF10AB028B7E9F0438C38569420688D0204B6BF99214D7929588122BCAA39CC3C6DB84598DE32A3868DB1BCC04EED36812E73333084FAA1CF535084F99BFCFBB0FE2DFDDF5F04CCF348DC1C7000210807DE593ECB24530E289808DA43BDD752484E32455014537347EECDF17CA6BF67084199DDE1A5E445C824BF65BD965423EF21EBDC9B6FC932B78F0BD68D54DFC5351816E0F6E7380F46086AE66D5475F022385B6802EEC5F2330F76D2FB17B7861372F9D0370D42C947D268882AB68FCAF473C543470F881EE4458048D782DC42A98FC810E56F1EBBD8DE11E9B230F753FF20DFF76C9593C5CA56684C43194C78 -MD = 49E7BCB969F4083AA7CC060F3DC78AE0BFF558EE7C7A7DC638D14B12 - -Len = 2016 -Msg = A7ED84749CCC56BB1DFBA57119D279D412B8A986886D810F067AF349E8749E9EA746A60B03742636C464FC1EE233ACC52C1983914692B64309EDFDF29F1AB912EC3E8DA074D3F1D231511F5756F0B6EEAD3E89A6A88FE330A10FACE267BFFBFC3E3090C7FD9A850561F363AD75EA881E7244F80FF55802D5EF7A1A4E7B89FCFA80F16DF54D1B056EE637E6964B9E0FFD15B6196BDD7DB270C56B47251485348E49813B4EB9ED122A01B3EA45AD5E1A929DF61D5C0F3E77E1FDC356B63883A60E9CBB9FC3E00C2F32DBD469659883F690C6772E335F617BC33F161D6F6984252EE12E62B6000AC5231E0C9BC65BE223D8DFD94C5004A101AF9FD6C0FB -MD = 3BFC5018CF15CB88007929924B3E014635EF135C91F9671B29BE8731 - -Len = 2017 -Msg = 7935E30C177572EA9DDB189E2EE00B99239E31E88A1D04D48D80A9FCF7FFFD2C006C09E9C377D6AD161A3F86909C9EEFAC16625271A12906E58105A69A8BDB8774FD5238DB266F41F0F0E6AABD635C489E937A63A5F297BB043A38D4DAD91D1CC94E516818F5D61FC46BBC529F3E3260702BF9364D6A23D39C1FB3DBB2CF21C19E4B42BE38BE5CDAD468C62EDEACD91D8811A773A0432D804E630C8403F181CA1AA8FAE62BC76F7EDC4C6F9B55CEAFAF4E8152D38C4D49CF73012DD0B51CA3BD8818729EA595E460D202BF25197F2D088F39959C8E6B07F2346B1CC149BE41206AD5D027A0A264C61074F7DCBFEDB9E82A9280D80207D105CE51233F80 -MD = 2F3EE8DC010E1D009B909D2F92F4EC4BC6CFE07265EC10E4ED4B3EA4 - -Len = 2018 -Msg = FA6E5C7AB3D80FCB11F68B4575BD8C6D4FC9F754CE29AAEAF56AAB37AAA967A1023A228AAB4C67580B607A50662632A5A0E9259C8DAFA3EBDF14E8810CB9EFA5AF12611804BA687B0BF0F0CF1FC881657688D6A25E0B5DB7F6218BD9CE61A6982FAF06B5CF6F6C9DC85E8D74F0CEFBC4AFBF881F08491B885095BD3BF17BE844BD80E3A6510FE272C312837758F80CDACF3921EE01930929ED0B60CD2CA97276EAA2264C288106482CA521BEA53FA4B62CE26A7DF0BDAEB23C57C638E99255C727962BCB9FCB49F4661DFFE50B3B86CFA4C697E461DA1B1A790A4F7858FF59192A90965DE79A00BAC7362C4E3B09AA019959B3D96C44EFB22E4371DD00 -MD = B308968B103EC86703D7884AD3E51EFE9C3FD963B4EE476E0871F157 - -Len = 2019 -Msg = 230BF4BDE34E022702183439EB2A7B99C763C09F738E92DAD945C2AEDEB9624AFFAEE3C2858AF2DA90E301A4E3B59E27C6926C5CD04C390018148373F65A3A9BF72E80EC38DA22B1CEA155541ACBD64CE01D62605C88C43D51459BFF591F7445EC651A2CE678446F921C9D45FA7B1AA2AA16A83E256F61AB8ACCB99C4369A0A6545211B4C3385CE3DDC0C9F5CA5D2B9A6F929FBA7CC3EAF0D6CC7F018EAD2013E99F7B482D58E148DE1A0086E7766B50FBE266D31CB77129194B4BC2C5865CE18A0779911725EC751EE5B809F5B401B4753E4FE841E18551E5E16F35C77470C61CC692C45F8C4476FF99C194C820A2C7F3A2C657C2BE97573878C38C20 -MD = 74DC48E12357EFE74E2EDD0AA74981DAB306840E2A42D78DAC2D9184 - -Len = 2020 -Msg = 0367DD6457986EC8B94A722727C79DEF1EB26ED506310A88CFE4065B9BCDA02B95BCB8F5D4AA2AF1A0011290F302970D54BB0091B48FF90118AF051E65C00839EAB6FF8462EBA232C0E406A4573702DB72FE8D58B0C15AAFC079CCB5D5D0A702871EF3DDC46769D3EDFF0CE8E9AE9A0A15FC9F36153C9E5461748899308CCE2B5E8C97BB9F16C8505A34DEE5DD7DF47AECE9ACF4F13B2845DE7E48BC4326471ABC9F86D73FAD9C5E42C9AF89D0DF00971F39306C91F0B97102AE44749CE2111938C4E0BFAB15B68DD34DF8E54B52D8928E1804313C363E46A7DB7ED412C6FA918C1F7985320C412D457D3CAC140650999775CC2C9D9D2E918FA1B0BE00 -MD = C151B5AD81D0DDE0C666CCFBD94473092609B7B6A84753E70CAE4C97 - -Len = 2021 -Msg = E8C1EC93AA28C61DAE66F7C29F9271464F045FA279D6601BBC838EFF3A5B53EA2299C128C00FB997FC9BD1E579951A0B2B4BDDD0D03BCD04B71651B7C74C8BF3C6194663CE07F68C37F13CF53E8E5CAD3C491EE25539BBF494C43017BBFA6645E49544DBE203E803FCC809E2C93A0EB191BBD3780BCF5E70491C1C5A18E659FE79E94FA2EDA8EFAA739625955B9EA7636EAB2E746AB571C7C9B40EA9D899506989525E54633D5186DA4F93AE6C7FF238A852BC2786F7EBA8C36968F26546191B983CD24FC3EABAA757DA7462E1C2253BECD08D4B3ADA75850F32C835D9DA083072BE453EFB5E514255BA72EC47AC344B944EC384428CE785FB30613BE0 -MD = 0EAEEBB04CEB81D9C569DEBFC269C4E3E85D5C5210E760B5C491E0D5 - -Len = 2022 -Msg = 7AD52ECA2EC84E56B93ED49761733D65A8143382CF7D9995AEF6F3C8F72D24F52B2342743B08687CF416A16F00BA58CE218745A63DE2E07E671232109A14E3F5F085E60C967836C5F12DE97246A1762620DB570C52E3CEA7FE47EE53FF454DB3F610E72E35EE59E38D77519DA8D0533BC30C5B5B6380541238063BDCA3618C5FD8D2A140943DF297FC83611671FFE2C48E8BAA204C15A1A3F78B4FC9C66B4C259FDE8445D7F9160CEE1CEBD7810B543BDC152A887D53D0AF866E3535827C61282F34E968FD350608A38E5399B1F8B171097BC059E7685D01BBA86A1EF4FB748A2CB0D24193389EEF52942243D09903397480F5051B3D28C2FD6E066620 -MD = B6FC9F903B1BE37158CB5460DD40997DE4043864FF70F6D617218F95 - -Len = 2023 -Msg = 895AA7BAED3164D54B1E76CA9891E3876B045A3588FFCD0AEC989A9A96CCAB03EF6056B252C698B59E6BB552F17C8996388A80FEB020BC253501EB8FD6C034A61D9251DFC06DC852B3A99161F65200D52B3E26531EA5FE1AE297BEC2653CEE2BC8A2293AD619DA5D853F561695AB52DC1411A88738B1E9608D7B7D86EDA2BCA385816BA58A72D07C93D2F31F2A24343E5A5D64FE6912F0E99AF0ADE0C5E83C57E50D671B4D9CB8111B9B5AAADC821783FA8D69ABF292E07106D85504CD7D11272F27FD51C216910A7DB2CE38372A58E3D688CEC8B76414368C929B50AC2BB068B2203C67035D1B52D69E52A6A5E4805F88F8F9072AFF5F6F98EDFD71F6 -MD = 83F241DB290DBF9BD329DB312F8CE41ABE63F570459664098758228F - -Len = 2024 -Msg = A6FE30DCFCDA1A329E82AB50E32B5F50EB25C873C5D2305860A835AECEE6264AA36A47429922C4B8B3AFD00DA16035830EDB897831C4E7B00F2C23FC0B15FDC30D85FB70C30C431C638E1A25B51CAF1D7E8B050B7F89BFB30F59F0F20FECFF3D639ABC4255B3868FC45DD81E47EB12AB40F2AAC735DF5D1DC1AD997CEFC4D836B854CEE9AC02900036F3867FE0D84AFFF37BDE3308C2206C62C4743375094108877C73B87B2546FE05EA137BEDFC06A2796274099A0D554DA8F7D7223A48CBF31B7DECAA1EBC8B145763E3673168C1B1B715C1CD99ECD3DDB238B06049885ECAD9347C2436DFF32C771F34A38587A44A82C5D3D137A03CAA27E66C8FF6 -MD = 22715559AD15717722B1FA0583996090C79C3DF16CC1E6E0F6D3E898 - -Len = 2025 -Msg = 51F8BDCACDA5A57DD68942F72CAD34BE06CCB06F9603359C80D7E5E39D2254FF3593226D0E068CCD06E54F0490CA6267CE2CB73CAC45552173BB980FE06C6DB076B97405088D6203492B73E40532C4A259B760504216A46BCF04B8251FDE04D8AA82354303C103163D166E2F79E9204FBD1F09B8ED474DE23BEA752F9D58C9B39A955B7B8B4BC610BB554B5B6D5220F0DF58FA3308D5BDAB635F8AEF9532309AE48EC70133788B93A14F155D3AC0EF7597E84E9881E49E9BF709F0AADB79E8CA5987B15FFBDC0F10B70E4034554952315E156B01A0AAAB6AE3584FE3F522FA5DF8F909A4C2F27AE26CA35C04198D77D1271E2CE12B92566F243037204380 -MD = CD201A3F8584CBC0546636043D07BB45C54813CEF6AB67F2D47055E3 - -Len = 2026 -Msg = 21E921EA42279D39789AE6DE121C4EE530FF4488638F8AC66C9C2AF97CFE8AB41BFBF2BF217946396743E1B6377BB29440CB73AB40921AA6D209134D9D583434751A8CACBAE380E8F222A07BA5B5DF1E1629C68550E1F3B9546BB816296DB08A8D8F1BA97FF3D8DCFEA8346ACC1AF1EFED1041BF60C65E3F99DA9E534ED13DC91937123B2F9C95C476102C16E436CE1F8505AD7E6986CD92BF59624C2D4140C3DFF9E824BEA580651B8B189EE21497E1B1835ACE948ED9E0C99CCCED5798F618B9680BD5E2ED3C37353B87C1DFD7219C2DCFF2FC6D08C4692450B6CF88B38936B8E79FCBD40949421B878371CD6E070C01B3C45AFA40D7558971362D7C80 -MD = 737119E96A0C8B0A91D7885E55C7A2A0C7847B1542EEA04068492F2B - -Len = 2027 -Msg = 136B91AE480FEDE05560946E2498ECF3DD14A3A690621367BC96FAA7A7FD17E9877CC7680586DBA63210A50761005BE42BE609F0FDFDFC57E2E9CD7CB313A74A685B4381461BC636A158830FA668058F428B62A914A9ED8B8CB26A82062F91CC9119D303CD95A6B288AB9B5DE4829D340EF99CEFB84842840D60680B870E82513788E744FC1C779DBC6481E82B335203D20E6420273235B105072DFAC5B0BF5B40D4C5F42D7B74FE753924C80E68E049DFB5721037C4F23279C84B50697226D31F1B827BB33E0CF53E398AE128B20BF9BB77F8E379833B8813B8BD1897610A568033BCC1CC953F9D9CD20674D85260BBCBCEDDCD5295DCFB633C12F4E2C0 -MD = B0C40CBDA161EF6827356B72FDA5D026403B68ACA05BB75CFF132773 - -Len = 2028 -Msg = 66507B499F6D8A15A968D9EF30289B4CFAB08ECBAEED472D58140D3C0726746155FA07D73B0374B8D1DADD60432252A4B4F891EC83122BACC96F6A7488B0702A05648488BD0B31950B21D1EFFE567A7A2F7E2D12499DD2D64ED98242B235D9452C35D6CE72D0AE4A57019966AA4C0802A68D20C001A58B0344DBF0D216497CD9414F5079058AA667E30E7D00278CC872542CBF5E81FDBABD321FB0CF877C3972A7EAE36ECC95801E879AB410C75FDF82FF8121214873ECBC4D1F20CC3E9EE2BCACE7659747BD65C37E6E3F209519C7CD189F023C89EF09D7F232243463169C92001818670FAD9059377ABC957C97B94ED20D2E71DB202C0C1036F0BB9510 -MD = B63F603D49D69F220609FAD117792CD022A0640986436B9650603774 - -Len = 2029 -Msg = 9FE62860A9C15D81A218CEFC0C50914B49F04A8A86CBD9DE7132CBD76EA878140267C917EA83BB930BE41268C01D63303682BAFE04F576DBC7C167953F9B90B9938CBE27F83BCD800F0F4602AA88BBA68FE3D8E31A3A8BBA76CC9CD30235B719E5838307CFC7B635517BDAA796E792B72DF8ECDC5A26B6D2949CC443800D12D705354D1CCDFE88E526AAC41C71B7E9A710659550DC7338FB97E774CFF9C44BAD6A31B5783745D503FDBEA6B34CF611022D20CD1B5BAA64E60D111E40989D0F50683BFC5F1CCA929667157977FF1101817DAC901C7E9FC3032ED7FF4DA36A9DC90F8B9C1D81B20B5D972A662975F4DEB7E2199A3FA2E300703FE38BDAAF38 -MD = 0FC8E05F09BF1E83FFB169A67801613D1FF730C8445A00CF079DB38E - -Len = 2030 -Msg = A91E640739831082E52FFBE1DA2BEE69E8DCCB8AC4175EF07EEE805087A53F164CCEE639EF5C510ABE9B204AD46376878301FA785B89B1AB924CB069E8F535933F61E469A2DB92F4BAD7BC6E9F550FF38ABD06CDCB421B4B60E64E00D3371DAD1F2B52DF5D0609BD653088AA201939A3324411B59070F7A4016439C97E27E0A7FFC463C8EB1896CCEFF358E1E3C9EB383CD6B8D8F27585280DA8C70E3D5809D08FFD605CDE24940AF1999802ADA4E8AA2CE9DFB8FDCFB877F4EFE1C6945A314BEAB88ADE3DC3F835A4C76ED46008A6D0688C83307E740AEA16D12B7BC56183CFF9B4374C12C53D4F364B0D688601624141B225988D75EE3647EB4EA22D74 -MD = 18261A26BBC1EDDCA33B0BC58FBBA82E06AE5AA63130A77EE51F9734 - -Len = 2031 -Msg = E5B97559FB95D8E558BA351B7F715DFBD2835417B500231EEF8C9AC1EA163A4EB890E6054F0B9CD4F843D249846A0E6BC3A1B0C88B0DBDA86A28F8E6EB30508D78E70917A17BAF35F98FF98B3BA3402DBA0A3111C1F0B62B931F5CCC5B179C9CC1F66CF687721A3551098F5B3DD7CD642F245398E2B36981405771E614422DDFCAC667449C39399DA06D2012B038C1AF106DB458BD4C3D67EC01B44FC473E1E98048816F70F17AA5FC347E0FC494C302334091D323F40A8C1894F610729EB7845DB749E40C7AC0BB37570F42434E64905BA3928AB359AF4F6BD2AAFE2A74DF01A4C8176840D7B069AD0AFFC8C403EF4C82BCE137E491F421149C172B2228 -MD = FF5F9E305D68F3516D8BF13029D517EC026C4D795FDB042D3DE01B92 - -Len = 2032 -Msg = 83167FF53704C3AA19E9FB3303539759C46DD4091A52DDAE9AD86408B69335989E61414BC20AB4D01220E35241EFF5C9522B079FBA597674C8D716FE441E566110B6211531CECCF8FD06BC8E511D00785E57788ED9A1C5C73524F01830D2E1148C92D0EDC97113E3B7B5CD3049627ABDB8B39DD4D6890E0EE91993F92B03354A88F52251C546E64434D9C3D74544F23FB93E5A2D2F1FB15545B4E1367C97335B0291944C8B730AD3D4789273FA44FB98D78A36C3C3764ABEEAC7C569C1E43A352E5B770C3504F87090DEE075A1C4C85C0C39CF421BDCC615F9EFF6CB4FE6468004AECE5F30E1ECC6DB22AD9939BB2B0CCC96521DFBF4AE008B5B46BC006E -MD = 2F36FF8AB7264F7A5766DE025018E19B5A64D90994B743B8FBFBDCCA - -Len = 2033 -Msg = 183E87351ABE6CDE83B3160C5E174B7F543F6D1C2AE1507171E532607490E527194E030E25D543C7856BCC3AAED1A0F6BD5EBAE7D569DB10FDC684DF99DF107A78BEC6B0682FF647DEB9429A8FCCF2C13EE69EC8E3A4BD85DFE2BC2F0D8FE4CAF2EAD4BF96890A21DB95609CE8626328DBA475F3D09F22126CF83646FEC3059DC735C12A6D0C0E2AF306C26C99EDA34FA3F5885606725718E2216352999A7F9C5F19219249311375E0EDE0707096B48F32F01FBF3A53FF8D4F5D7D950EB49A7FC1D2A1E8D4839630D854CBA801F9A354558B9866F7EB2F12ABA56F8CC3D60A5D151B0DBEFFAEBB6305C3716A0F939F9D3BF7971DE2AE9E49750BBD7C8AD300 -MD = 65827159B488EA8BB332B31F7D13EE7A66F41A5602BFEE6B645F2736 - -Len = 2034 -Msg = F8FF3B3787516E0A7579734B74EF878E7C64C19103AE67A47B9BB72D884D1A233DB5FDEAC236D23C94CC5E0A50F80FA0354EBF950A25D22A5D077F0017D0250F5B0B43A6B6958A74D0EC2179441229F698023DF319C408ECFA062B70D5FAB0545E955BA6F77C3B848DD041A4C40877FAB1AA89CDE0699E7C98575C104D713E7265405109B56A034A91A9BABACCE8BF2B493E84AD20C0055EF281642F7FF49D5775C05AB80415102B94FE90CF920DCBEAED91DC4B0BEB57708DBBAE82329EDF2FC0980F47266893DCADA678B374B34BBF75E8716464A3BDAE28A6281501B503A17E4A6E87AD35BF0BEEF0C81EAF744C4BF02485C4438B41097AF72D070E9AC0 -MD = 59038E03CA001E489A2CAEE3EB4864DD4492C9A2B88E0452C6317CA7 - -Len = 2035 -Msg = 7EA3A713810E1A3CE414301D5B3E5698844F8DEC10729045C5299F07AC74C8A926BA6241CC4FAD0826B073A36CB9AABD7EE4763CFF17173957791F3FF615C897264D9A88A509F932D332BA3B95E5F3B4469AFA7183A67BA46F7B6D43B99A5F5B92823B9CF22F3657CBCFAA8A5FD0EFECC507702AB1B0D1DEDBEAAE326B49AB080188206024CE0F1324A5C9D10AC07ACDB9F60F008A345DA3A8DDA50CF90E364DBCD0845B031D0AB44BE1DE22E7F13F7C092B945055EBF8B17DD8E06D4F4D8D2883918B309376E07D6849927CFC0F99F32AF039C866E723D3A951A374AFD532B50EAE3BE6FD3634B95D184574CF0F5399352FE164D3BCAC75C3E07E800D59A0 -MD = E2135D52DE08F176369032AA4CE1012EA6ED641E298554605C40DD92 - -Len = 2036 -Msg = 5F878802DA83E8C9822A0262D2C29E1520E3B8B21D01928610B2DD3940379A70B635E1028D236AF0A4F3E7D19F64BA5A286B61DEF259A8B2587B3673BA13533C8067427CA0252C39BFD6A41D70269BE40D35BA7B9B9AC38CE4B980168BCADA5149AA8B49363FC93FD12AD4FF4D89EE8FA87FFABCEFF8508E949EBE8AFDCE5FCBB55960C6BBD912D80481736A0B485F1911068D242596C223C5D6CDF4DFECC7292D24C8925588336AE40033ECB4A61761BC2518E7C51F14E62FDB67897EE6BF398430D87B8B1427C3FFDD43B85AF3B329456E169A02D4573484478DA4747B81056D0D51D63E5B13442FC16BB228C6E87632A9EE59D48EE7DC3E20090EA6CE90 -MD = CC029EF13973565AB8159F33A6C6CBF73A7DBD1737B1DDA3BA5ACCA2 - -Len = 2037 -Msg = B652BCB949215CC82A08AA428F90CAA72755D785F102D112689205ECB97F68844B120FAE0F68F87AFB41BE7AFFE3946CDE47AFDD5F1A2AC8326D1C15976C610CF261F95D49D7F13DF9619D58B585446D0F572514C046AC5DB3AA8CD2BFBA41DC9332ECCD4C9DD946FBC60EA604E9E69319ECA5A3EF3910E446D57AC1543CA4DD29F2A42ED3F12B2F21B40911258DB642365F8D5F9737E3F39D77B8BC53CED9E3A2E0C0C8328F27428764E25CFA14FAA401A42B8C5EC1586DC1B4EA108D8AEC3CCC312738D8320F41917D413D3E5214DC46A7AD5EAB4E7326279CD5CEB30FA881535621E096925D18E62C71CBABEADD9DA58321F80C8F6777FB97C516426A18 -MD = 2DB7BFA89EBECF19E6813DC6262064FCDE2D5ED2FD793CD3060EF8CE - -Len = 2038 -Msg = 6546D6A5C2F0D01D65BB637E5FD0E07E8320380580E1145BC90FD193D43A615625BF84014832BC89F4D7B06151A6070D29BC8BDAFC7CA713350A1A690ACE8DDD8491C0CDD5625537DA096C76BF8B0D92F43F2EE0250B49F31B3FEE950A4BE5BA0C92A9865F13F933521F84D3F6A35679EE5A1AA7723143B0479CDB749EFDBD7ED0C4C4577A57EAB953AF4D4F51BDBC25D5152ABC17431F4A54EF54C09BD4559F398DEDE349CA00EF9896B67241CDE6568C2E227D1A9B476DD6CFAA213AF4DF680A10227E40AA3287AC52A3E1FC763A5800014E0E986EB22109654E18C65493E6194E1735C631A74F9C5EB2491FEF909983ABDB45C98E673C276A431E2AC418 -MD = E0313A40EAF2A37CDE65F475FF86B7860CEA15C38A31BB80E4B2DC20 - -Len = 2039 -Msg = 032E441D08C89545C5961987E89BE2560F04BC3F020F798A83F403AE49A45F16B2D4BAAF899FAB28E85680A5B0354009827ADB04810FFA3E102CD50F3CBB5F13B38162EBBDD866F9AEC7CA8BCF702BD2026497B9F4AFF49507461C9658C6326815FE96922FB96977A79C3A0E81B7854312B8B5147F3B5D028C666F99D57899A68D63DD6C8261A0894636EFDF628338C4AB39B83F9AB66FF748C4FC41458BA8926ADF757A74F59603F61C5EA8C2F1C1B5D9A015F37E4443B50F20047405050B81969C1108EB01C09CEF25F081FC9885FF5623E76F741B811D03A9E05EA2D6DF1C735027D715DB3C8074ADC2ED16082A7A2C8D948275484220E682FE0D0E9A70 -MD = 4D8821E9592E91470EB12830642FE1EE95D323E73F3EBFF818207AC7 - -Len = 2040 -Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 -MD = 5AF56987EA9CF11FCD0EAC5EBC14B037365E9B1123E31CB2DFC7929A - -Len = 2041 -Msg = 7163B9175ECF3A64D3713ECC73204470A0DC1B015B4DF7ACADDBC68D14DA8C923BB6FF08BB79C1CFA8E001B85139E0A9B18131FC34832C9058D9B8415FBC3DB4C75EB9D8CC025A6F5203BD7A1FAC956C737C11692EA194D18D80F63ED5A2ACB3BC8E3E235DEC9C43819E0001FE35AB6FC3FC25046CD079B32B0FA40816F69E0C47C05C3D7AA68863E8CB4197921DCFDE83BCFE3A8F243BAC68374FAAA6CE9A01438D7AED50CA231954CE9A59EDE88A408CF8114012F619003D6E192CB7CBB7AC3A9BF1712F943453D3AF925F2F1BBF10D6EC0094A7832BF3D0A52CF727E52EB2403FCF3AD7D4CDC8A86DE388840372C250A8011F27BC1B029EC3F39FC14B9180 -MD = B5A506A5FBA7F6B83C771AD79BE89B65A92BFADA3DAF8812887FC5DE - -Len = 2042 -Msg = 3DCEC0E888A6A238E2AFB6A02F6F270FC30B93C2CD4FFF9F6E9A0153D50FBA559080A282519C7B91396147B7279937805060E529F415150FD7A9E1950DEF27FB2DC0B201C73C2A834AE0CC073961B2CFB074E40DB425B0E6628389CC622D7B963DB1F7A35823CE80D40DA1112302EB90461EADA4005EF4D5DDA5C04BC7AAF3A9DED53AC54BC17E2E27967C7B828AEAFDC192DED6AE741044347BE7888B3B6DEF63A118830ABB1F6B6D5B2D28E5F7D5803E8507D4F6D06D85D90D1E250E6389CF63D182F4587E5C5526847A0C95E2EFFC3344E32BA29E56757BC0125148FF08B83553A8CDF0F68AECB514F06941199799C491E0C55C58D240560905B56C6CF800 -MD = 0A27436B5043040CD975323C3F94A4C0C9FC6C9E8F42BA2D37ECDC63 - -Len = 2043 -Msg = 41355A235D1F809C3C5B921CE7FB9D517ECC1E7439FB304F2D1CF919DAA5DE13154FAD2BC8FD7F3EA3B026CEF34BCFF61B5D779CD8D2C76461FA3821D6343AD05A791BC915164543C32A74C85FB225DF22A0039D6F349C6E39545CBD490359EE5152D32F263BA5B6169223F6BA9E125AF53BAFBA95FDEEF5A068B6299871CA1BB743235076471144501E03C911701476152C218EBF1A734198655498EB6F82A1FDDBE4BB845B0DD7636943CE869812F9DB13E59055A7ECA774C60105E95A59E23A9156E23FB51AA9B7AA95BE82D8B375542D320A1989A85E6F9ABADF85CFCAB576C93E71A1E1367A2789F21DE5D4BFC0660DFEC110860DAA15F23FD3A4600620 -MD = C4D065CD89348A55C5978F39B07FBAB6E7DE7DCF9FDCB38E760BE9D0 - -Len = 2044 -Msg = CA0B483D9E27EE4DE097CC92AF14D4A1B096E7533E85AFF050C49798A09167C63CCC9E85BEE8FDBF3681547C687D71E24B4CF618410FE9DF0B0D161AD323E14385C661EA7DCA937F62ACD0E54173FB18C22DC0048B35470D81BE6F1790B8CE63CC5495821AA34211DCE1E681F95DAC61C960EA25D74FABCF97BC3CB800BE6DFB4325A608BA2C701756B31C179B6E0724B7DE0E95E9732865034AEE72C19617BE8AC5CC266633E949C733B38F4915C94964EF5EC2F5C5BD65E1446F2621A120376B10DAC06792625799E67BE6F474D4DEE4D4E84C8EA08F03FE4C95D8967C3C28E82606FE7390449C4C0EBFC002054C8228157D04D8B4346A1667EB173CF238B0 -MD = 88D6B7CBFEB3B4B4FBFA9994500EE3677F011D91324C7708E68825D6 - -Len = 2045 -Msg = EC545360EE77F181B55B942CC77E84B64A74241F8E02BB940560575964C5FA131C453BCB179B6547D317180BDA99D8EA69D4216B58E8C38BCABA42E2B1E23712C6558C6A1A14996955540A4D54A97364B1ED11BAB2B20E0DCA2827FE47EAC10E7BEB694ED6F48860D419F3C370F893F57D9858193389DAF69EAB130C0BCF00D639E3ACE5240E232D733D0A1AB4A805BB8367472DFEE0873762CED8006DB3EC84153A48088581C2BFEDF78FF9DCD628B2B9DB64FFA900B62EEC1F358E4ED5EA31CA719EFBF381B6AF5B366CBF2025099E30B39BF446C8CA123AC302FFCD163946306F5420E3C2E8D50F48169402EF2E1764228D30A4F14A3EEAD1C0A106667518 -MD = 3F8184BF8CA89C1F4FF57EE458B250F6BA2B8E940B879078C0703B20 - -Len = 2046 -Msg = 36CF74E3561474F90A2B62718C8740CE553A207334A1EDC7F95B702848595EC23285F826C989CD975C4390E24C485335B616BCBEBC16EB7C24E895F1A633D5E331DA67BD2A86B088BA6874BAAC74F08F5483D0702F0E41229C14A588BEBD592F86DADB5BA72A1E7FE310728B4234AEC7361AE460DB299D54235DBC92DC20DA9A9B3DD3FD7E68DABEE80C8D1272BC1D1C98093CAC93DBF7FAD2D448E2F1A7992256ECB537DC501756F66D6D7B4409C4C74CEB9355E8587136F67FEE9736667370EC924AF34DE22F75410C1251B344653F2535A163B7FB90ECD874FB0362670E2F9182EFDF0221B0F727BC63534E9F98F4AD713D6B9486F58221442273B9D1EE50 -MD = 59120F3DCC596F928252B47B482007CFB900FAF5804A0A83666334AF - -Len = 2047 -Msg = 1F42ADD25C0A80A4C82AAE3A0E302ABF9261DCA7E7884FD869D96ED4CE88AAAA25304D2D79E1FA5CC1FA2C95899229BC87431AD06DA524F2140E70BD0536E9685EE7808F598D8A9FE15D40A72AEFF431239292C5F64BDB7F620E5D160B329DEB58CF6D5C0665A3DED61AE4ADBCA94DC2B7B02CDF3992FDF79B3D93E546D5823C3A630923064ED24C3D974C4602A49DF75E49CF7BD51EDC7382214CBA850C4D3D11B40A70B1D926E3755EC79693620C242AB0F23EA206BA337A7EDC5421D63126CB6C7094F6BC1CF9943796BE2A0D9EB74FC726AA0C0D3B3D39039DEAD39A7169F8C3E2365DD349E358BF08C717D2E436D65172A76ED5E1F1E694A75C19280B2A -MD = 5F1B01A38F16E7A1F59A3A3BD8F7A64CA0918306127716B26E3CD415 diff --git a/node_modules/sha3/test/data/ShortMsgKAT_256.txt b/node_modules/sha3/test/data/ShortMsgKAT_256.txt deleted file mode 100755 index d36ec39..0000000 --- a/node_modules/sha3/test/data/ShortMsgKAT_256.txt +++ /dev/null @@ -1,8195 +0,0 @@ -# ShortMsgKAT_256.txt -# Algorithm Name: Keccak -# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche) - -Len = 0 -Msg = 00 -MD = C5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 - -Len = 1 -Msg = 00 -MD = C3E5CB55999EEFF4E07B7EFFEC77582D0A5A11A94FC268A872493099273992E1 - -Len = 2 -Msg = C0 -MD = 3A1108D4A90A31B85A10BDCE77F4BFBDCC5B1D70DD405686F8BBDE834AA1A410 - -Len = 3 -Msg = C0 -MD = 7384D12118DA4AD51A519806E2529FB2548B5DCE2A87122B8507F71A28A35DEB - -Len = 4 -Msg = 80 -MD = 53E5E48805AE70306BF9DDC26E9EE2DB87AFE95EF0BFB9F9C44211BE11A4C810 - -Len = 5 -Msg = 48 -MD = C341F676DA4D10D32D9DAD5140D497FECFE9565C79F4F5AA7F1D3C36B290FE3B - -Len = 6 -Msg = 50 -MD = 80B7ED96C53F37EBD0A0F2F7C63B0B35480F57215AB8C5FDF9F5F6E989A53366 - -Len = 7 -Msg = 98 -MD = ACA86EE608E0A6E31C0173F2EEDEE26C527F108F7F11A19A2E4327116485414C - -Len = 8 -Msg = CC -MD = EEAD6DBFC7340A56CAEDC044696A168870549A6A7F6F56961E84A54BD9970B8A - -Len = 9 -Msg = 9800 -MD = C4F437FE4FEB0C18374C8DC1ADE599C5E3F1B68A27D25AE5FC63AFF64215DEC0 - -Len = 10 -Msg = 9D40 -MD = 347B1E3842FEC39CFD8E4368AC9DED9498C545778C665DE29B355FCD32B968EF - -Len = 11 -Msg = AA80 -MD = 5C0E432A4CE0D37047442ACCCB27F5BCF8817B085B0C476D83A0324265023A23 - -Len = 12 -Msg = 9830 -MD = 5F533B014DD834E4A833CEFD68185B84E4E805DF6DD2DA8D9B891B89BE414516 - -Len = 13 -Msg = 5030 -MD = ADE94E747FC7B97F051467FC4B62799217054CB4DDBA5EED5166522C30671767 - -Len = 14 -Msg = 4D24 -MD = 65126BC60DF2CA9FD9BA08D22540CEB67DD9F5A1B90037084A3C2098ADF35AFA - -Len = 15 -Msg = CBDE -MD = CEEF2CC62B98D5BA981C5AA6ADC0CD811D2B703D82A52B741445B756D3A17E9F - -Len = 16 -Msg = 41FB -MD = A8EACEDA4D47B3281A795AD9E1EA2122B407BAF9AABCB9E18B5717B7873537D2 - -Len = 17 -Msg = 4FF400 -MD = FEB2D9EE5DB62E192CC136B0328F1A04732CF5CD4DBE067B5FB35E729D9DE106 - -Len = 18 -Msg = FD0440 -MD = EFDA1D093A29B770CF95BE39BD960165BD7DBBDEC9DECAFFDAEE3E34426CB670 - -Len = 19 -Msg = 424D00 -MD = 2967863A3FA769311C98153EA71B2F58FAC2AEFC92D502D2B030DAA097631A09 - -Len = 20 -Msg = 3FDEE0 -MD = 8FC23D199D8DB9044B6B313D0789D39EAD31CE7392A5C1F7227810EEE619F949 - -Len = 21 -Msg = 335768 -MD = 857E9BC126CE62A333CAAE30B7BA7BD4A84F4E8BCF05A72E4B127FC7A0990B1E - -Len = 22 -Msg = 051E7C -MD = DB333F4801AE3F521636EACB798C17BF6C317F2DFCA4A88E2E4D2587A2C5E28E - -Len = 23 -Msg = 717F8C -MD = 93246A0962C915B7319711C35C5A03B318101C9C970852FDE60A5288CA55054B - -Len = 24 -Msg = 1F877C -MD = 627D7BC1491B2AB127282827B8DE2D276B13D7D70FB4C5957FDF20655BC7AC30 - -Len = 25 -Msg = EB35CF80 -MD = 4AEE49625742C0E7713DB8409F7B5A0ABEA42A52BE534F2362B30F0BF04AD765 - -Len = 26 -Msg = B406C480 -MD = 5EC09D130EC4396AAE8C7CA02637C572A38BE2499243DABFE8DD04BE24B8CD86 - -Len = 27 -Msg = CEE88040 -MD = 4AE73C07E666D4709C8551A05AB88E36D6F0AFAC66B6603022FA662DC5A15E45 - -Len = 28 -Msg = C584DB70 -MD = 18AB7589FD160AA6E44D7D7E07E271F3B8CE4C92103107C0495366286946B993 - -Len = 29 -Msg = 53587BC8 -MD = 4F04A937E7E18C58B575426766B0D94B47CB305CC2205B7CDDD200021F9AED22 - -Len = 30 -Msg = 69A305B0 -MD = C96BF48340982CA3EAD3C1471F2001BC21FCF06771264462EEC6FE9B67048483 - -Len = 31 -Msg = C9375ECE -MD = 8DE0214DEB21ED025350FCE18E9A53D72B43114AEC720775C62D6CF6C297802A - -Len = 32 -Msg = C1ECFDFC -MD = B149E766D7612EAF7D55F74E1A4FDD63709A8115B14F61FCD22AA4ABC8B8E122 - -Len = 33 -Msg = 8D73E8A280 -MD = EF82B3BF37A2E5E4D8307FEF97979FC369F30F1C5C99C9CE844698244FBA539C - -Len = 34 -Msg = 06F2522080 -MD = 142A5D1A4691A4CB45718917B47A90540C986DB9EA492F952208CD1513A86109 - -Len = 35 -Msg = 3EF6C36F20 -MD = 5981816520C69459284F988464C2830BEA42198D07EB616253FF7692EEC2428A - -Len = 36 -Msg = 0127A1D340 -MD = 48D2AA43D1287AE2ED57B900FA0912EB166C6BA25184528C3A7E11A9B5BFF302 - -Len = 37 -Msg = 6A6AB6C210 -MD = D3D34FA208E7F89625E31F13245919A837954B228CDF020DC1C2ACF8DC00829E - -Len = 38 -Msg = AF3175E160 -MD = 3465375BEB6397B152B56B5945521CA60328E08C3C6F8D2B4994B9BB6FA1D8CD - -Len = 39 -Msg = B66609ED86 -MD = 3B81E1D58A40849F5F08FD56B1B09547AF3915C9EB955A0C97188462520C5B37 - -Len = 40 -Msg = 21F134AC57 -MD = 67F05544DBE97D5D6417C1B1EA9BC0E3A99A541381D1CD9B08A9765687EB5BB4 - -Len = 41 -Msg = 3DC2AADFFC80 -MD = E384EEF58B65B4889D9A573A8D29949D233950E6E35974ADC381F100CAB7457F - -Len = 42 -Msg = 9202736D2240 -MD = 6920522DD6F3233CFC549F354F3C9C559EEDD0C9615F99E447653740F8D10B39 - -Len = 43 -Msg = F219BD629820 -MD = A32077883406BF909951F6A56D02990954C2450B0FE78DBB08F9117179F3D371 - -Len = 44 -Msg = F3511EE2C4B0 -MD = FE07FBF11CC5B997881A8ED1539033BF6EADCC5741A38A54BCE59700036C3CF0 - -Len = 45 -Msg = 3ECAB6BF7720 -MD = FE2865FBB5D95F1952EF200F054AF4F2D80E32AB54B0080C3E5DE6861AF0FEEA - -Len = 46 -Msg = CD62F688F498 -MD = 239BC9DFEAFB7A887C8CE1105CFEFC5D00C27A57A0B0DBA07728007F154B837B - -Len = 47 -Msg = C2CBAA33A9F8 -MD = 1CE4BC22AEA81814DEFB4612D8114EE71C466336E768A761979652461B2273E0 - -Len = 48 -Msg = C6F50BB74E29 -MD = 923062C4E6F057597220D182DBB10E81CD25F60B54005B2A75DD33D6DAC518D0 - -Len = 49 -Msg = 79F1B4CCC62A00 -MD = 33D0AB4E9DA0A2E41B994BCBB41377A8DA5DBEA4B3D77FCFACB69341EBC14059 - -Len = 50 -Msg = 90239D7EA2A5C0 -MD = C339C439548C707B9DAB9127057205A11CDF36F2075E602BB1F5E3F64A004943 - -Len = 51 -Msg = 9AF4C2D144E340 -MD = 8490A3D449971C67C00BEFD752D02F9FC8D9B219B08CE3EDD4EE68D5E005CFD9 - -Len = 52 -Msg = A4F2613FA7AB70 -MD = 259DFFA01BF8129B7EF2E92704E012BB23B183DE9C141900B354681E9150BEAA - -Len = 53 -Msg = E863B85EE7B528 -MD = EE8E37D25CDF9A710FF49C6620DB31D101E6125F30D8EF4D19BBF797A169EA54 - -Len = 54 -Msg = 9F3D6D6A44B684 -MD = FD8299D867C94F304F8D4838A55BE47B97CA8DF1E12FC202A841B56417892AAD - -Len = 55 -Msg = 14B06DD54EB364 -MD = 86E77130D9663D9763E5DAE108ED78C352309AF29689A5A5BAF3DF88E431DB91 - -Len = 56 -Msg = 119713CC83EEEF -MD = FEB8405DCD315D48C6CBF7A3504996DE8E25CC22566EFEC67433712EDA99894F - -Len = 57 -Msg = 8569DF971E674E00 -MD = 9C8553DC980CFD3583275AEF2B2E55DFA63B792A39B112030DFF1615FC5C275D - -Len = 58 -Msg = 42DA39AC5951FEC0 -MD = 1BD2B7C59EACBC6848178CE2C617A327542D9CA8095D410378D17228978E77DC - -Len = 59 -Msg = 230688D359F31380 -MD = 658FE74678830CED32A106E4E8691F914008A9478820762494141DB6803C6590 - -Len = 60 -Msg = BA594E0FB9EBBD30 -MD = E2F7C1B451DD1241709DB7DC732A71299716F649E05B495BD2088D989749B684 - -Len = 61 -Msg = 9D1BC347E3B05240 -MD = E8DE03A3487DF1A7B4E34972B1F1639760D004A6B8075EA2957A2E7866F53B02 - -Len = 62 -Msg = 756FDE7AB6CB531C -MD = 9BC9A5AF910479719493F9B4A1D600AD652BA2A12CAFB91756D8941989321449 - -Len = 63 -Msg = 669DAD29EA0D289E -MD = 76C5BEAEC4FD548F181410E29ECE5D805F20F7C02A450218ABC7F77BB9190054 - -Len = 64 -Msg = 4A4F202484512526 -MD = E620D8F2982B24FEDAAA3BAA9B46C3F9CE204EE356666553ECB35E15C3FF9BF9 - -Len = 65 -Msg = C86CCB0A4116026080 -MD = 9BE1D600B0B7DB2FEE56A922999001544F5A7B7E13CE15DA4A69F51F805F9934 - -Len = 66 -Msg = 7A556A043BD867FB00 -MD = CED8C33839842BC9EC4DAC86130537E99F2D7A7912097DD28CBC37AF8344767F - -Len = 67 -Msg = 91829C7B4031005880 -MD = 600BE2EDFA4FD1590D8A7BD3BA7A29DB29C57613456DDA61130630EA25418776 - -Len = 68 -Msg = 0462427C865798D260 -MD = 10D53FA10359EABFE44C087E9F05D91E41C905302A28D6AB0458BD02AD3A56D9 - -Len = 69 -Msg = A51806364AFBD2E830 -MD = 547866981BC411E6EE472C0FAF656718E1FC9A8E4E5BDC77CA9B1500218AB6E0 - -Len = 70 -Msg = F8CB65B7FE6995F200 -MD = 55F89B76D9BB2CB95ECB973EE7BC98D6884DF65577E4817AF980F3DD931B1E82 - -Len = 71 -Msg = 454C87F43DA37EDB04 -MD = 60C1C82A3CD5785520ECDAE9E1B4B81DCCA50ECC71C98D87B5639B7EA2B4B54D - -Len = 72 -Msg = 1F66AB4185ED9B6375 -MD = 9E03F7C9A3D055ECA1D786ED6FB624D93F1CF0AC27F9C2B6C05E509FAC9E7FCA - -Len = 73 -Msg = 5D7C71C275D9F5613E00 -MD = 0DC2DA8257D4EE97045302B7C9EA1FDF5A74617BF76A80D40B642039FB98797F - -Len = 74 -Msg = 1A533E4BD100A83884C0 -MD = 22392BDF4D73B3B30DF521F9732277BA0660EA874D6FBF590D45A7D92550B74A - -Len = 75 -Msg = 7C8433BB4FD46EA17BE0 -MD = E84BA16D775073EFEB3267EB71B03D300FB24AE8E20C7A429078BD482FB5CF58 - -Len = 76 -Msg = 8CACC33C81B29F0E8830 -MD = C48D7A60A5F284571F8137F5E977FC1E58029F7EA8C987881622F8707CE046A1 - -Len = 77 -Msg = 9CD0B4A48455A6716AC0 -MD = 8EAB59D8E6EAC8D2C952B68D6C9E996C0564D9B24B4692A898A76E3A236BF265 - -Len = 78 -Msg = 4DBF1B5FFD3D72D20F50 -MD = E954D22C63E93AC5A7CCA219C8C105699628AFEF2F67668AC386FE1FB950B2D0 - -Len = 79 -Msg = BE31E2945E1BA17901C0 -MD = 8A1BE04E3C26CF7AAAF98DAD5B48B82C00C451358FB73D0E3EF494C27923EA91 - -Len = 80 -Msg = EED7422227613B6F53C9 -MD = CAAD8E1ED546630748A12F5351B518A9A431CDA6BA56CBFC3CCBDD8AAE5092F7 - -Len = 81 -Msg = 77B56B460796582D1FEE00 -MD = AF2070D4228C338B8B991A069B4ABC6DF90AD457E0D819D0D9DA6D6C6FBCCC9C - -Len = 82 -Msg = 5F085C1F91F2E5EB05C840 -MD = 3C212ED21664DE5382F61BA448C4A6CD3EE393CF17925A402C78F5A98D9516A3 - -Len = 83 -Msg = E5E559373233E6EF933120 -MD = 56BC09BD629C0702991D75C81493E0EB68DCAEF196D1E51744F35A572ED578E3 - -Len = 84 -Msg = 670C357239C46D9E96DD20 -MD = 946B017EDA027F7414B6AB77209D85568A01A4F771DC4D9DD3DA7E0701C820A3 - -Len = 85 -Msg = 33BAF96B35241EB2243230 -MD = D9C45196B356D0B4D8C46A429F7AD0E0132734E4E5536B7CBF1E53C6D30F0A25 - -Len = 86 -Msg = 7148A621D35D6D486BDA90 -MD = 79830328139FDB52054C555CB3122B34BAA23F3A498280B8A7EA0D608CB63C21 - -Len = 87 -Msg = 9D7146B5E9C8246BEA8C4E -MD = 721B2FE59047A3920353E7804168D318220AFFC4CF1478EECA9771D3119314EC - -Len = 88 -Msg = EAEED5CDFFD89DECE455F1 -MD = D61708BDB3211A9AAB28D4DF01DFA4B29ED40285844D841042257E97488617B0 - -Len = 89 -Msg = CAD98AD0D9BF161229074280 -MD = 464416564DAA60F07B0025FA54BD6F9BDB08594A92F7CF41F77DEA888928D881 - -Len = 90 -Msg = 6B767F82890709DDF7A1EE80 -MD = 48706E09CBF498AC1DC9CF1939F90099E1CADC6D3F1169981CBDD443DE15CD4C - -Len = 91 -Msg = 73697688CBBF28C51DDDDAE0 -MD = 5373BBDF231F7979CAD769751E17E5338858D6D9F2BE36F8CDE32538092D1EAE - -Len = 92 -Msg = A3C1967A97E58B43453D3760 -MD = 608F739ED99E8EA245B6874C2A2F4594D96894CDA33AE77AC7869463712BCCC6 - -Len = 93 -Msg = 03981280D89F7EC9845C29A0 -MD = A8EB2E66E6314EDF500A190646855C8A0116307F3EBD1F42EE39BEE10C68E6DF - -Len = 94 -Msg = 0E42E6EFD4D3785EF0BB3A4C -MD = E8ECEA06E06A8DB063DB045A935BE659F9D972E4DB0BD06E1A2FDE0AE171A4CE - -Len = 95 -Msg = 6CE6B3C077865CAB3D099B66 -MD = D285516254B574EF9EE5DDA48BED01D4A0D3E9C3A8D017EFC4991EBBEBA07CBC - -Len = 96 -Msg = 5BE43C90F22902E4FE8ED2D3 -MD = 0F53BE55990780B3FAD9870F04F7D8153C3AE605C057C85ABB5D71765043AAA8 - -Len = 97 -Msg = E94F8C8A909FFB8DF22C19FA80 -MD = 266B884DA48C7CE464A4174D6598C01EF04ED0377AA36A467D81C4B4E45BDE9D - -Len = 98 -Msg = 004761F6028ADBDC4D5A8CA640 -MD = 29D30D4B14D3B4EB9A562678ECD196C76C4F78DD76D00CAE4029499BE4F4B819 - -Len = 99 -Msg = B1BA2223CC3AC042D06554EAC0 -MD = A43DA9A3F12E0C2A2C81D97826798D1CB71309B26A8F4D132D2E586FE0074AD9 - -Len = 100 -Msg = 746122438AD1B5B8989D64B320 -MD = F019D82875634377FB3EAA757FDF20DBBA26F8035B92BF69D279DC9B31557631 - -Len = 101 -Msg = 3DAD6E4B69AE8BD16D830213E0 -MD = D01B0A44F48FEBAD0CC64A47F70D204D61A8A863B8CCF0F9EDA6F078B852802F - -Len = 102 -Msg = D441F54B918819F36B220B9608 -MD = C60B87A90EB000B8E052B96527DDE5C4DA8799C6E28A3431D5BF8AC58D2ED0FF - -Len = 103 -Msg = F44CE7427B6042ED343F6D2194 -MD = E9EAB397AC6131A795BFDE8BAD3774FC01374E96642153BCDB5C64A76388FA0E - -Len = 104 -Msg = A746273228122F381C3B46E4F1 -MD = 32215AE88204A782B62D1810D945DE49948DE458600F5E1E3896CECA2ED3292B - -Len = 105 -Msg = B883CDD1742C224246784DB69080 -MD = 39E35FB6ABDCF0A8CA677F0293EE5F291234CBE2D11ECFD4BF931BEA48677515 - -Len = 106 -Msg = 555FD729751EB2F8986B19578740 -MD = 32A5A36D9C8A97C2CA967C9559E05833D4765AF541CE2E4DE58AF2D206FFB8D2 - -Len = 107 -Msg = 7A609524C0F706F629441B978AE0 -MD = 9FD99800F420E182D3EE44C9FA2A8059EF364D11D135D84B8806D524F40A6C71 - -Len = 108 -Msg = AC79B374D401EFDB3232D0826C60 -MD = 91AF28C4165C1A73CBFDC11393B1F4BBFE53991FE7EC93B3F020A085520DE92D - -Len = 109 -Msg = D8FC20BD0025C7582B7946947918 -MD = 59EC9EBDC7BDEDF08DBCDFDA17D5A6D1B0A0E561FA84AF319DCAC0BBEFE3FDC0 - -Len = 110 -Msg = 0ECB1FC3F81F3236FA7B91F7AACC -MD = 9D85D53877B4A00EBF423E8133F352634F3751111D9603CFF9933A05A9CE938B - -Len = 111 -Msg = D5334CA10554C583F11D9F84A71E -MD = 7EAF924D551248929D3EF4DCF11004EE30CAA94C5A13CBBBF9608D9A34D70E5D - -Len = 112 -Msg = 3C5871CD619C69A63B540EB5A625 -MD = 9510DA68E58EBB8D2AB9DE8485BB408E358299A9C011AE8544B0D0FAF9D4A4EA - -Len = 113 -Msg = A999538B0C31D7339A217C1484C680 -MD = F20B43DA43F4CC425F540F1D470EEB0ACCE64A2690E5FF81A19DBE22A588394B - -Len = 114 -Msg = F4D4FEE364CE3CF439D0160EA7E780 -MD = 405410292E9D5A0876776860B39D16246D26B76613740D114B8AE357B968AA81 - -Len = 115 -Msg = 55A4FA6097E8753CCE38FB4E59D460 -MD = 80C395D6BD0E301D6B91B5D4B0E085B711878B4FFF1B6BBBFE257F6F7B876902 - -Len = 116 -Msg = FEE0239360210B6E3761E6059DAC10 -MD = 09032D83344E0B19322762249684E17657F7B75B122D7A765BECA24FDDFED2E4 - -Len = 117 -Msg = 1750D5D521528582177DCDB046E008 -MD = 8B01B5FA46BE87BDDE27A5B7DD395EDF18FF8AE40430D2395713E51311C2CB21 - -Len = 118 -Msg = 68BF3921EF9DD0B6ABF732D9E508A4 -MD = F6DB1DF0871C6DCB1BFB0C196B6CE3F4D60AAC64E108EE05235608F585DE735A - -Len = 119 -Msg = C26037F951B3CE27D56C0303432FEA -MD = 869543C1792B2BEA42AC487C0C5AAE4D778400C508E53B3EB80CD2118E951070 - -Len = 120 -Msg = FA22874BCC068879E8EF11A69F0722 -MD = F20B3BCF743AA6FA084038520791C364CB6D3D1DD75841F8D7021CD98322BD8F - -Len = 121 -Msg = F3D384F6F8B0F7683C2875EAFC19D680 -MD = 5A74F8D25CBBAD796120BF67C12E9BA8D9166DB360E7D428C7051ABBDDA97E74 - -Len = 122 -Msg = D8A9E01B7ABA9C15F27C650AA6D98040 -MD = E07719E87A46E9777D31CA26824CE514A9E0E0AFA9A6B9F6A74FB8CB8C16C466 - -Len = 123 -Msg = 2CFF7186405B02024C4203A7FE7A11A0 -MD = D864BC877ACCD078DA604C8100922EB630C643114916DD3CEE73C71BEFC61275 - -Len = 124 -Msg = 87217854ED19AC6E8AEF3B39B97CD350 -MD = F919B9BCD8BA8DC86A07907CEED97A81256A04B72FA0D4318A822435D1FB4602 - -Len = 125 -Msg = 441D8FC5478410033BEE2F3DA9FFFCB8 -MD = E543380A64ED6BA555A59BD4E5AA57A310DD8599EBE15EA51AE803003BF64D57 - -Len = 126 -Msg = 0341698E451A235FEC3A6BBE42C07B04 -MD = E08309D0DBF14E7B1E8184CF1FAFE1C51330540685293B39AD45A22C94CC3424 - -Len = 127 -Msg = 2C288B527CE3F931B0C565BED2C62758 -MD = 8467438B7D0AD91E49D6B8274AFB2485A916CC24230AEED6163E7BB45FDC2066 - -Len = 128 -Msg = 52A608AB21CCDD8A4457A57EDE782176 -MD = 0E32DEFA2071F0B5AC0E6A108B842ED0F1D3249712F58EE0DDF956FE332A5F95 - -Len = 129 -Msg = E35A1AC6054BA5FECE64AEB3CB97ACDE00 -MD = D6D55BD6196A54EE9DE46EB6794A0C34474AABE72314BAC9620CD47754A69C27 - -Len = 130 -Msg = 34EE2C639DF9C71BA46E88058962D3C2C0 -MD = C09E1CB05F2643016AFB668027E0A18DFAAB39CD323B99253E3C0991522ADF11 - -Len = 131 -Msg = 5EF1EC3AF3A823667B01CEB7069C3D6F20 -MD = 43A58FD8CD4AF591AFBBFE329059F24D1CF023B96E17CF531F32B68F3D8B86AB - -Len = 132 -Msg = A4E76D43E7CC38C19ABF5B09F0E2104E80 -MD = 8196E06986391F4F63D6A1992011BD4A74EE5BF4282D0B2B6788DFE5363F99F2 - -Len = 133 -Msg = F7E6911439AFDEB747AEE1DA0E64165B98 -MD = 04B428F393B865631396C4BC128A7637095996DBBED2DAEA7CB2883165055AC6 - -Len = 134 -Msg = 365C16113FEA84CFAA647B4B6BAD705F74 -MD = 820D9AB1F49BB115D42416D82F6B63EA7F7EDD190450A16D99AF3A1ECD6A4203 - -Len = 135 -Msg = D783EE042795EA5E2FC9817DCC24CE1BF6 -MD = 8C21F09B1C58C5FE6EE2039DB6543B93D810D00CAAAD83897C475C04EB7D359F - -Len = 136 -Msg = 82E192E4043DDCD12ECF52969D0F807EED -MD = 9204550677B9AA770E6E93E319B9958540D54FF4DCCB063C8561302CD8AFF676 - -Len = 137 -Msg = 7E3F13DB88EAA22EEFEC3AB47B7CC5AC8080 -MD = 9891BD74C31304F9A333FC79DE33FE9635C3EE3C6DE7E3397A84832FE5885D33 - -Len = 138 -Msg = EB673EAA409B4F98C581D8DA542EB58B1380 -MD = 41F8280B2302ACBA5F60F369F5189DF5BB1262E1FC41CA699D9347912FE11E9B - -Len = 139 -Msg = 84D42DE0D62B7A480FFB939533283B7A4440 -MD = B640F87CC605761DAFA931A942076EC3BF19D3D4362CB2B99BD1ADF0F66ADBCB - -Len = 140 -Msg = BABAD873529BE92E9BC49CC71964A554ECC0 -MD = 34333D89AEDCE8581A561D35DFC10155EF0DB17A45D295ABB69596C205709A75 - -Len = 141 -Msg = DC3BB8370C04147834819A2845A79B5A20F0 -MD = 01A5AEFE5D65CFF12D7CCA72C5DD0A26483BE735DCE3D941DF2E379989105570 - -Len = 142 -Msg = 8952BE55B2BCA64F32B5401A99A8392AE39C -MD = 622BC8A931343CDE78C4EA5BC2C3174DCC9B0592C04175D6B6FB429558F9916C - -Len = 143 -Msg = A53B4420787D32433A0DFD5D09E5D8E7374C -MD = ADF40CD8A7E8F39DC02F889E037F48C57B5A5DAAB19DDF612C213FD13B7D0E3C - -Len = 144 -Msg = 75683DCB556140C522543BB6E9098B21A21E -MD = A6D5444CB7AA61F5106CDEDB39D5E1DD7D608F102798D7E818AC87289123A1DB - -Len = 145 -Msg = 46A2262940F3D7D9AB6B1680A300674AAD2D80 -MD = 8ADBDACA8987B439E8906AAC1010CF40938F2407B3BBD85ECBB62938C56937D0 - -Len = 146 -Msg = 86804F34609F9945125324B33E672E8F79F600 -MD = 040655685678F4D827C1F5915C47336E751FA0210FD7DA4459C7AA4D9BC75DA0 - -Len = 147 -Msg = 7B2DC42D8B580D6CBD359C46B0321BE37429C0 -MD = 9DAE06EE54E564159D3B5EDA70C4457C8930B2BED8EC2A488EC853ECB96E282B - -Len = 148 -Msg = 0903A731D853AB15F958B8E40CED0B9FCB7110 -MD = 4F52009FA1AEF58238667BA4B3FC16DD4042EAE40991CA7D136B55FE3399090C - -Len = 149 -Msg = 8E3C148CB528836E4DD538D903A3D5BE586A38 -MD = CE99FA4CAFA21AA87A6C9391DFA0163FB3751C8C9A18BAC0EF112BAE6B8C8515 - -Len = 150 -Msg = 6EC0D6E14E4619ADD039F4A24F9FC4D0DAD3DC -MD = C6AB8DF3DF806BD4A5FE6B2D4D27DAD319BE04084E3DAE6D47D962DE79024639 - -Len = 151 -Msg = 12FECA3B2A8699FF59120DFB38BC87793F8AF4 -MD = 1A4CC1223A33BA6F9EC25D458BFE08849DDFAE456DE932A9B457B0ED571B0D5D - -Len = 152 -Msg = 06E4EFE45035E61FAAF4287B4D8D1F12CA97E5 -MD = 5796B993D0BD1257CF26782B4E58FAFB22B0986D88684AB5A2E6CEC6706275F9 - -Len = 153 -Msg = 8ACDD913E4C985859FEBD62F6EEB412230252680 -MD = 3841793FC223E26D064A7C5B3CCE93146603754E0C79D01E61852249B27F51CF - -Len = 154 -Msg = 3487448A5103B1F7EB054C74FB1CCFD3E7B51A40 -MD = 68B4AF82A857FC06F1B1961D336CA08272D1320B95F96D5324A6ED1733A54072 - -Len = 155 -Msg = 21B898B65DE49038D0D359CA991356FDABD719E0 -MD = FE462A1116F4A7053ECAD692DE01F27F8F711E187771E5052FB5C46A3FABB99D - -Len = 156 -Msg = E35DD4BEE303448271E4A68160A4152B30D4EC00 -MD = ED8278F51DB0B5A9460E4C663B199E82294E884EDB54F9EBC70E61A78D40368A - -Len = 157 -Msg = 8E2A8A60383170AA48152522610B8D5B547A0CC0 -MD = 30B9D671F85F5FDE2B1219C00350BB42DA8973832453B4EAD951C3FC0A608549 - -Len = 158 -Msg = F674C01755AD0D41FEA8EB4F984F9033E38C65F4 -MD = 151DC2B346C843E377D09D603C5830B76D17BF6F155E778FB3B4E1B2AE30C966 - -Len = 159 -Msg = DEE4696A6DA3B8A6137BF9573B91B40F288200C2 -MD = 50631CC968830B38404167D9BF3823A3A4DCA58CF07AA37E6E1577EC566015BF - -Len = 160 -Msg = E26193989D06568FE688E75540AEA06747D9F851 -MD = CFBE73C6585BE6204DD473ABE356B539477174C4B770BFC91E9FDBCBC57086E6 - -Len = 161 -Msg = 7659DA517F96FAD5A0B1277F52FED01E4835313100 -MD = 7E4A46DA3DC2BD0C4BBB4FA52611D47109037312E115CFBB9FB6F5E2A9734BEE - -Len = 162 -Msg = 11F80B2028EE430ACC4E525FA85488E64C64A0EB00 -MD = 08144E56D502F5653AB90FEBD248D971A32EB9FA7A915AF74B99161C4C32B468 - -Len = 163 -Msg = F2F533845CA07407654214C0BF1C5693824E0496C0 -MD = 33B016241F354B3E373F18ED492B9B9096993590512AD3A5CE85F41D399F21BD - -Len = 164 -Msg = DF9CA9E83AC80CF76F0C596F15C8CE5DE722AA9460 -MD = 6BD1D49ECBCBBE7F6C8479CD56F09CDC3DA1504FF17786B11C3AD6B28D1C7834 - -Len = 165 -Msg = 59D9E0612A067556CA31FCE628BC9ED8CBCF038198 -MD = BFD5644CFF76E7FE600E4BC9B2B82E0F675DED8F6A7E6F7E9DEC6D464BF39C98 - -Len = 166 -Msg = AC3C4EF2B493AC819DC2DB7E25EBE4580115473C04 -MD = 971DE3F5080D6FCDDA54945CAB1A928C4C86AB5FA1227FA482F34E2EA7A10DA5 - -Len = 167 -Msg = 91935544B8DA1D9A33120838D090AAA9508D7395EE -MD = 33267B11482749CC2E1BC147CFD9320E0421F77A0C4CF55218987FEC08529407 - -Len = 168 -Msg = D8DC8FDEFBDCE9D44E4CBAFE78447BAE3B5436102A -MD = 31C8006B0EC35E690674297CB27476DB6066B5FA9825C60728E9E0BB338FB7C3 - -Len = 169 -Msg = 0AAAE7B9E64C5379E6C385712FBCA90088C5879DC600 -MD = 709FBAA3DA87D0F310EACE55ADB3EED4CDBDD95F7E2A5980A4E4E3AD87C606CD - -Len = 170 -Msg = 89BFECFB6566E0FB46B71DED91D3C392B31D167BE680 -MD = 2E54167EE1CD62FF3BB2C3CC104BBC68839D10886073757BDDE02A02C065B4ED - -Len = 171 -Msg = AD723D09C67B09677286E46AE2AFF84ABCE35B621D60 -MD = 85B69487936E4ED6C5215CFCD13A333A0903D3E7EDD89F2EBC0C7C3DACDD589A - -Len = 172 -Msg = 6037223B33346FEFC063E63E10D7BA78FF02C00A8A40 -MD = 7FFA709F2098F335061E9AAB006983D6E0EBC55012119FE8D07B7849F15A00F0 - -Len = 173 -Msg = 57E4329B428F70DE94A211479B2071BBB7E508F1D2E0 -MD = CD91A07EC4A6ABBAE994DC7C1F79AE856589F0AAE8D722B91F1770005D57BA12 - -Len = 174 -Msg = B0FA56D8833B44F45FA2A5109AD4C2CAD819050DFF1C -MD = FB399C9544C580C2C1AF05848434F28B975E28E40AE7A2F0D59980B11D5F02B3 - -Len = 175 -Msg = 4582F3EE0E0BFDC5CFA3FA7550E939BCF9C0B5EFD04C -MD = F000553C885A074F3099F0F51B2A261C3AFFA5649C347C3DCE55920CC61E25BB - -Len = 176 -Msg = 57085FD7E14216AB102D8317B0CB338A786D5FC32D8F -MD = 3B8FA3904FE1B837565A50D0FBF03E487D6D72FC3CEA41ADCCE33DF1B835D247 - -Len = 177 -Msg = 88B929BF491A1497E86DDF6A4040B31270EF97D88E4D80 -MD = 66FA2D248DAF49FF267015D11925B3E26081077595FE72BBC3FB4F6DE59624B3 - -Len = 178 -Msg = C5DCAD3AA886AA7D2336333D8D777EB15B143861A70AC0 -MD = 352FB05E6AEF1985704E7907176CE19E7EB4E26C5A978576064EB87850A4C1A9 - -Len = 179 -Msg = 12F94C52AFB08898E37C2FB4B778E458F37C6858C1E720 -MD = 56E80E7874093481CF99F090CA7BE3591DABCFFB60D34CF7D7BA8D41AA53E474 - -Len = 180 -Msg = CD911C2634643EFC060E2B641228BAB22C223B8B1186D0 -MD = 5065AAA6591BCCF7856A029E5B57AE76072E2A319588022C490E96DC5C27B456 - -Len = 181 -Msg = C194643A333C0D9CF125B6B729069530858BB4A916FE70 -MD = 98F57B219DEDE9C486EE47968E612E67A4CC9DF9D254437A17702DDE3765DB4F - -Len = 182 -Msg = 093A095AD39D10B3DD25C571B44C612193056D1B112AD4 -MD = C18D21A543916E2AAF8BB91A9D3250C564BC68E03CF7CFE77BA01C120ECB24DE - -Len = 183 -Msg = C95D9E47B11AFBB807B10CB90260A1A1263E9934EB181A -MD = 03C2044E472C6844B277FD86E18F775FA247EA61AA9EA0AA43F5C0F6DF1DE269 - -Len = 184 -Msg = A05404DF5DBB57697E2C16FA29DEFAC8AB3560D6126FA0 -MD = 37FEBC4DF9D50DAEABD0CAA6578812A687E55F1AC0B109D2512810D00548C85B - -Len = 185 -Msg = 4380398B1D3E170596F1CF7AAE1D32CD20B5684FF1D81D00 -MD = 2082CCBD3BF84EB70476AAD419DE901FA4EBE7C8BCAEE633958D8D76021CFCD7 - -Len = 186 -Msg = E7EA48586E6665F113727B7C9EC7BAB64D3DBEA3FFF317C0 -MD = A754E04A19F59987327A47EEF87AD56AA479B002F136AAD4A6228BB742E2500E - -Len = 187 -Msg = 9DB8E92F7CB06389B57BDC2B510E30566EBAB9B72DDE5EE0 -MD = 4CAA1AC4129788163E1AE077E8EE1E05207536ACBFCFC8035D869E52F1865A68 - -Len = 188 -Msg = 9FDED6A700AEBB65BF26400F30F5862CE6B550F67681BEF0 -MD = 5A29AA9C293495AD1E2A1BA07919A2509F5D1AE81760C0163EE5FB690C17CCF1 - -Len = 189 -Msg = 893B3BCFA97A81076A579D81CC66EB540351DC3A241290B0 -MD = 99AA5988D0AA6BCC2E7EEB2BBF54DA7951451DDAB0DF2E13CAFCADBC2D152065 - -Len = 190 -Msg = 90725E6308171BFBB26B928FC0A6F1C3B32718B74A37A0C8 -MD = E5856D60387AE9402704A17C7E849E95235A647AC4FD4800183B07AE217B450F - -Len = 191 -Msg = C1A516E38C83393D9F049EDB1E50CDD2DE3CE448E5D676B4 -MD = 7F66BE08695E49B53C3F749A8D9DF781E577C48B98C0212DC661BA86D0429873 - -Len = 192 -Msg = AECBB02759F7433D6FCB06963C74061CD83B5B3FFA6F13C6 -MD = 2329810B5A4735BCD49C10E6456C0B1DED5EAC258AF47CBB797CA162AB6D1BA8 - -Len = 193 -Msg = 90105B1F751AA0EE546B3EDAC10EF8ABE9CA71C0F0CDDC0800 -MD = 86252B78C292DC84280605710889B3513BF3458E868F71D7DE2C4312A4917A0E - -Len = 194 -Msg = E0CE59E9943CE116C7B745FC595B3C58129052321F67FB8840 -MD = 92BCD77C6BF5A7220F45E6F762FE7C92226764EE002EA39AF42665221F8390A2 - -Len = 195 -Msg = 0502D3A22A7A0E6729EFC524FCC50BC7C62B35C12C537E70C0 -MD = ED55BCA2C0427A5728FB88E3EC3E24B0DBCB850F19DC71EAC2C04BC9B351E5B6 - -Len = 196 -Msg = 4D9BF0AD887F1F21023B749F3F9D2340C0288F009D39214600 -MD = 778AA4ADA311AA3BB78F3D742B30407EEA2A5D2E228D93401DEAACC45B93ECD1 - -Len = 197 -Msg = ACC9748344B37FDDF81027547EC8D26B1C469531935B7A2AA0 -MD = B2F08CE35817FC186EEC9580BEFF6BC0396B84C8B808D8F012D023DD799D64AB - -Len = 198 -Msg = B704443E84AD25B0E73716EA414234BA929F2D927DC1E1B890 -MD = 54A5690D2FB409C32198E2686F38E0EEFA8B48DB4BFDA5D378AE50E0E44B7B82 - -Len = 199 -Msg = E916DF6F4B5E9356DACD76B89F593B70C2B44B3EB1B5835ABA -MD = 127BE5FD941EFC9911F4258C08999BD213ADDC247942BAE4F93BB6D5531F0B61 - -Len = 200 -Msg = AAFDC9243D3D4A096558A360CC27C8D862F0BE73DB5E88AA55 -MD = 6FFFA070B865BE3EE766DC2DB49B6AA55C369F7DE3703ADA2612D754145C01E6 - -Len = 201 -Msg = 396D32D8553DC0DDC72B415A684349AD9B1BA8E10D05970AC080 -MD = D32C8C54380EA7CEA67AE584A977931BF0E67340456DC0CB4357631122E87470 - -Len = 202 -Msg = 35DD0644FA89E942858FC0D9A614C1E5B711EF9F178C04840D40 -MD = E79D74CE6B5BE111F5B256D07E03B11744CE82AFEFDEB0E15C9A6F4DCE38ADEA - -Len = 203 -Msg = E9617EF66F3BF56D461F2C20CD395778FB8AAE1B557A9FFE43A0 -MD = A058CDC93D85412E8827BC813E65B363B2784D22E4FEC70ED6D3CE2BE48C04A9 - -Len = 204 -Msg = 6123803C735CD7D81C5E95AC866919C0348D46D4FE04E5CA2DA0 -MD = D0742263397FE5EBC1C74EE17F0442B957C23354A403571A65164124F297116D - -Len = 205 -Msg = 982408A37B19F65DC9522146F2C44B62F2A09912C3BAB1047110 -MD = E12E4B72A9891AC9D556B62C4244F67BF431F5F9B2D4F054694D0C9336B1166A - -Len = 206 -Msg = 54EB64D8FB23A010586155CDF5C33B1D864D0F18CCA0C03BC97C -MD = 16104C3B08B6EFB71681A9343BB194E21FFC38633BBB9C6C7038E1A349525FF6 - -Len = 207 -Msg = DAE26BEF8C3A247D8881C8FDE00E6F0805147CE81DDD81B53B0A -MD = 1178E8F66BA17934B499AB531C19DB4FA8B42F2D7F32E6FFADDC4DD1DFB0730D - -Len = 208 -Msg = 7BC84867F6F9E9FDC3E1046CAE3A52C77ED485860EE260E30B15 -MD = B30761C053E926F150B9DCE7E005B4D87811CCFB9E3B6EDB0221022F01711CF0 - -Len = 209 -Msg = 9254E832A57DA5D35623BCB77EE4A376280FBA69225E388B34D280 -MD = BB68EA06F1F649F3028555D165ECA33793C21E732B61811862D21E35EAD6ABB9 - -Len = 210 -Msg = 7F891B766CF192FE504687E1D56C843BB0921E1280B5E7287466C0 -MD = 220BDEBEA193D478B576F1D1A61800B78FD04C7D01057A27FBCA4574B4693709 - -Len = 211 -Msg = 0B007253F2DC7DF79883A1C7128EBEBE35E0D902A5D3CDBF539460 -MD = D781AAF38BBF2B5A70945237A859AD3D1A4D8774475136E294D06B217F6A6D55 - -Len = 212 -Msg = D49B562EE6EB7311BA70A8E78F655A4B4853332C116D7DDF16A100 -MD = 9952A3ACC0D5EC0BAB97D2802B920052F5BC33B6F4ECDB7FDDD21DC9E27E4CB1 - -Len = 213 -Msg = 5B1D8934A654645972E4CA94DBCB2FE1AF9156853A2DC2D2B18DF0 -MD = ECEF9AD6318AD1B5223369D5FC6B4D49B6B9A6732F3FA266E0F553BC646DF861 - -Len = 214 -Msg = 9484FF47AB375A83B5E0A83FDE85EC66509706C9181BABA42478F4 -MD = 1F94C94821CFFC53EA41E10C668F1A1C855C9D9572A693DA04358176EA3B7644 - -Len = 215 -Msg = 939C03856BDD26D48A3DED1A121342742F5F833A2CDF39C266306E -MD = 7F6782835E74A464D016694B9743A3769B33FB77D7FD87EF86268D65F0926978 - -Len = 216 -Msg = FAC523575A99EC48279A7A459E98FF901918A475034327EFB55843 -MD = 04F1B3C1E25BA5D012E22AD144E5A8719D94322D05AD9EF61E7DB49B59959B3A - -Len = 217 -Msg = F891360CBAAFBC60E0CDC1CAA548329F6A80778ED08874FB85266A80 -MD = C91A07EDB84E33F7003285A700EFF5329F33F5A0D59B1D63A5A130230F983D4D - -Len = 218 -Msg = 02CC21DBC82B94B3CFD25B0B5F99C45F14D8485A88E45DA3C6B9AF00 -MD = 05083C3EFD60039CA3C3D7108F311C5FCE165649F176DFF9CA4E0343923A59EE - -Len = 219 -Msg = 42D3FD8720077B184CB3119815CCA28C0D76F259B5D764AE47F71120 -MD = 46EEDE4CE47CFD08246339C289185569C3F77AC1EA0755FA258E8EF8D09B3DA4 - -Len = 220 -Msg = EB9B5A62EE1BEF70A170B96DF0D7E8F974EA8B5997E22CFEFE0BA840 -MD = CDB2CAB34F20335D477F19ACFC9A9F829D859DC39C32AD0304440ACF150DF9FC - -Len = 221 -Msg = 4A1369D63E894C71D6DECEAA47D797EF1DF4E8AEF56F76CE0FFF4B80 -MD = FC66413B1EAC39E757205B422EAD5B011FA9D743FE7682280D933749413BBF69 - -Len = 222 -Msg = 4B9C5BB731732C0BC83B1ECC8139164D16E92EC105F66B78BEEB35D4 -MD = 4EBF4E075D5CD1B3C4A363F19CD6254FF31ACC9BD737A82DBFFD36BAC7701514 - -Len = 223 -Msg = 68F41368B7B347819494CFF74E9D8E649BE4EBB287D9B4553248F52E -MD = 034609955912A58B10E72C2AA10C13D28C7A6E5B0B83A3A34E1BBBFB1AB0E4EB - -Len = 224 -Msg = 0F8B2D8FCFD9D68CFFC17CCFB117709B53D26462A3F346FB7C79B85E -MD = AEEF4B4DA420834FFCED26DB291248FB2D01E765E2B0564057F8E6C2030AC37F - -Len = 225 -Msg = AF4BE96D46A63B08104C3345CE0AB60EDC88B4104CFB74BBC0238C3A80 -MD = BA5E9652008B0A1F1FBC7186AFF770746A8218D92DFAA42B4353353CAD104DA3 - -Len = 226 -Msg = FDD3B8E0423BCCBBAA7019DE3E5C7A49A7F5A192E2FB64011DBA892540 -MD = EF6D2C59813F8EE521BF99753594830D32D81827993333C8EC3C2ACEE08120DD - -Len = 227 -Msg = 69DB49ED9D36946A357B2386FD5C652918762D8656F1EA3CA86D393B80 -MD = 6C821FEFFA23E39BEC9E7D7C2F317E9741C7043697A86C036B90CE368DEB35E4 - -Len = 228 -Msg = 984557523A3444AB956E0C040B96C6D4E5F93D0F181606260BD7A731A0 -MD = DD3A30C8CAB68D62C1F94DB18D2CEE4FD6D52BBC4C1F65584147B7009163CA01 - -Len = 229 -Msg = 0C6D4DD90DD7F01CCC7EAE273D8502C9B307F9F913415E9207EE76BA00 -MD = E04DB05EA2F18CC0432E95AA1F634FB1EA6B65B96546571E3ADD3AF7485A5573 - -Len = 230 -Msg = B42F11FE464CEEE0516A17B8B9AE5890FDE0B929007B568AB9F9A9B8B4 -MD = 69B1E209EA1CE962687E7B8329B7FEA5EF51E9A359B15FC6DB96D2D23BE81F87 - -Len = 231 -Msg = 915BB70E3A5ACD0EC87D5570058A4CF47CAE5A56E552EC102E0F1E9ECA -MD = 153A44022228882A01E8F055C46156B5CE18406FD9F49AF7FDB2245442F9169B - -Len = 232 -Msg = A963C3E895FF5A0BE4824400518D81412F875FA50521E26E85EAC90C04 -MD = 03D26AEEB4A7BDDDBFF7CFF667198C425941A2776922DF2BEC545F5304E2C61C - -Len = 233 -Msg = 5A45392A407EB4671C94E2181362802E090D71BD19CF1B3E7CF08E999780 -MD = 4CFC3FB0D014B93779A97CB09E25B588C315DF70778A9FDF3F2419C91FE6670D - -Len = 234 -Msg = FE51F40C4D7807E4ABB5DC347D97E2787F1B175BB0AD9584F8DBC494B200 -MD = 606410A2875BB6458D5AB7F611E85C231E5DEBAD293779F0F694324428FD40A1 - -Len = 235 -Msg = 3FC7400AC8F98C0B419781292E3DBF605BA9DA9C7E7C3FA2FA625BE18B40 -MD = C7DC1F1778D0B62861AA0293417C66E57279DCFF69BDDE7FE07406C520F33A33 - -Len = 236 -Msg = 313C7ED0191674C883C2E6A46CB162F9F1203EB8DA3CC0979CC46A6EED20 -MD = 778E4AC753301D939C3AD483353E93C9FB83F6182893BCE3E2534991E2E7AFA5 - -Len = 237 -Msg = 7F9CAF49ED7EC9CA1693C0D5700965718F7D6C178B7CA4E577F07FE5CBD0 -MD = A590D76A336B2CCFC17452FDCE20ACAA0ACCB5BAA8579C7BE0C889F9CC51314A - -Len = 238 -Msg = 5FE7F0B783293004B9D834D71397512B9F807927383B88D996FB32B5D748 -MD = 0BC5F893E4977199A4F689B94BB024BC3ECC59DE5BEBCC2A7D9414494DE5D3B4 - -Len = 239 -Msg = B94B68ED7FD70E3C30854A2C690E3AB48452ED374786F893F2187FB8461E -MD = 177CF5E63EF346EDC262B4281FAAD1E3DC6E798AECD795E9BC6348511195AAC5 - -Len = 240 -Msg = 03A18688B10CC0EDF83ADF0A84808A9718383C4070C6C4F295098699AC2C -MD = 435CFC0D1AFD8D5509A9CCBF49706575038685BF08DB549D9714548240463EE9 - -Len = 241 -Msg = FF47DE5C77211D891494904695A30AABACD0CB707C358999599E28A4A2B300 -MD = BB871EDFF7E70DE5BD38CE73DDB9A34A6F85F4E2EFB6E0B410FF1FC4A9ABB30E - -Len = 242 -Msg = E36648955EF0236283244693B5B9FE95C823F6D3E339DE3E1EF42F8E059A80 -MD = CD8E0F984EEA5A91BE26C1513417C93A9F4E2EF014825A7CECAE051A5E83B734 - -Len = 243 -Msg = 9EB5DDA4A42EC1617D3F5BB18369F73E4DAA180450769CC0CEB1B2AAF63800 -MD = 5FC15EEDFCA845CBC7EAFAB3D7AD4F11685E7CA28FA5C01E14F0AE794ED98F35 - -Len = 244 -Msg = 31AB94F53C25D46A0B436D689663878B757F1380C6796A20EA481CED41DC50 -MD = 2F0FE11BC018F83464D2ECD6E048B878CF77317138570526C2ECEEA069F50F34 - -Len = 245 -Msg = 3A77FFCD08FFD1F9DBC4F3DAA172EAA998413E67E6DCFC0F8E502CD9DB9090 -MD = C3FC7ACFB511AF6B01701C3DF659AB6530675B8A260AE01668066F49467DE010 - -Len = 246 -Msg = E07B79FF758BCBC30164AF289E10788EE1B893988AD243618E8478AA8E3BB0 -MD = D3139987F703848A135188E4FA71C262B47DDF1C8069F60BDFA22D5B78229E75 - -Len = 247 -Msg = 9E4417A445A11ED1B9F8453ADEEE21E419BAC1C0FC7541C99DA00D53735020 -MD = BA566F36BB50B8B06EF090D92C3E2042DD6056099EFAFF04B674C634AD242692 - -Len = 248 -Msg = 84FB51B517DF6C5ACCB5D022F8F28DA09B10232D42320FFC32DBECC3835B29 -MD = D477FB02CAAA95B3280EC8EE882C29D9E8A654B21EF178E0F97571BF9D4D3C1C - -Len = 249 -Msg = 064FA8C3A9904C17B6E284B7625BD70E8B54DAB53D538B66D0A52954F90E1100 -MD = CC0182D57D87938EFCD731B6B298DF836DFEEAAF18A8838DA637015F20AF59E5 - -Len = 250 -Msg = 0372CD1CE0B74CE05E717FC4B9A82CE1A888F4EF7B0027A5D6DC5F8D13936E40 -MD = 3D074CFDBC193F2D9D5C386D02D7F0FC90AEFDB2657700EB06197A7C6C6D5C56 - -Len = 251 -Msg = C7BC6DF69FDBB01BA287A66B0DC82F453119B7ADB8AA0F7DF4D4D1BF5E0DBE20 -MD = B7B3102BD46196F5767A735CEE949893E4DAD7B573FB1561C1228CB9ACA91A52 - -Len = 252 -Msg = C6D8EE5CC53B4BF75956E31EFA8A4BE99D7AB651461FC44E9D16A691F6859D10 -MD = 380840C8302F3273798765728C175AE48C339633B73DC231076C904E39F04329 - -Len = 253 -Msg = E2076C55D1BE257EC034FB68800508B12F91444C99BC1AA12575FC7D7A6A2088 -MD = F3A77A18796603E71E6A14F737D477996E30E8022B15F847ED828F657D09E5D6 - -Len = 254 -Msg = F667B870AA707996CABB9F7788C9357A7A6EA28B2A711DFCE10CC86FC6C6DDD0 -MD = E013D9CFD08BFB2BD41F8F177D1FC3712F7F2C0BFA6BFD132161DF5C23F358AA - -Len = 255 -Msg = 820AE9D30CACE62A961B6ACB37B86A72FD46D1E2E0F9574D3B963F387758FBB2 -MD = 12FE3F288B71EAF1B21C6922E0AB82F9F288DE76245299E4584FE27D640F89C4 - -Len = 256 -Msg = 9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10 -MD = 24DD2EE02482144F539F810D2CAA8A7B75D0FA33657E47932122D273C3F6F6D1 - -Len = 257 -Msg = D5AC1E30C10BC1CD15E27866FEFA48E33AEA2E319868F932A2B84C64663E73DD80 -MD = EF45D3AC1927FCF04C5312F379542C4B933DBF4996BB19A21291B0C42165B5A5 - -Len = 258 -Msg = 4AB430957A6D231FD5B96442302A63812493F7EB505E7EDAF5D79F1DBF7D3E8280 -MD = 693607850F53603CF4CBE2F85478022AE432A2CC473A937F23AD8300954699D4 - -Len = 259 -Msg = B261358A122A159ADBA413F8CF0F2D02D7F9E05901F47A6C1ABA5F9F77FBD3AA20 -MD = D5751C421C5B0CB6E8D85984199F120B91C6FE1C7221082D6DC4979E4253DE2B - -Len = 260 -Msg = C479243928CF52640DD0C74157A672EAC366D4A5BA0D4148EB2D09C25C4FDBBA10 -MD = 4235EBE90160A42D89953F6A6484EF10F8FBDCEA2D93B25BA40210A0317615B8 - -Len = 261 -Msg = B3980A9DEF20DBE4D286B75DBEC249001E420EA4393B562B2B17DE15114869D820 -MD = A9A593D264423A733C4C17A53744D72A4E10B16F0614BD244C7D8299E1D6405F - -Len = 262 -Msg = 1BD985CDE3B3494404E1B4D16B2BED5172D095F8EA8C8F8C347B19B83BA2E92F98 -MD = 6B6914C370E037CC7417D8D4045FF6EC3AED6656C7887C8B7D6C923F8DB8332F - -Len = 263 -Msg = 2B47DAAD44C64F2DAD4423AB3366D82770019669115714DB01AAD8141EAD2AF914 -MD = B36CE79CE1DCCF8B5C82633021308FAB54B83FADD7CF6A108BF8B0417B7873C0 - -Len = 264 -Msg = DE8F1B3FAA4B7040ED4563C3B8E598253178E87E4D0DF75E4FF2F2DEDD5A0BE046 -MD = E78C421E6213AFF8DE1F025759A4F2C943DB62BBDE359C8737E19B3776ED2DD2 - -Len = 265 -Msg = A96D1AED0D267920DF19544968478BFD9ED476D500FBA307B9EE8CB02179629AF300 -MD = FE18A795348502A2D5C94B3F65AF66A19BF2F304ED5EBBEF2A4F3946601284A7 - -Len = 266 -Msg = C5DFDACB24DB60BC725FEEB11B15F88D1EEDD5D654E14B9D681AA533A094A9F8ED80 -MD = FE6D935F258197D386590108F3CEA1524FC4F06A7288187FA09C1C36ABCC34E4 - -Len = 267 -Msg = 9E1D99E9DBE5FA828FBE655788BC8B715EB75E71F225FB895BD4CA6D758D5C03A980 -MD = A1959D3DB04D231E471C0D5A4AF2290487356EC4FE743D193D2D72149DB8C831 - -Len = 268 -Msg = 87C9BD4514CABA10C9D867BDB49C8FFF5BD6BFB6FBB018A67E7D5374B31ABFD1AD40 -MD = 073E128997B3705834A0D478E2F15BCFD5FE9F9BEC4E2E2302DAB3597E8EFBA8 - -Len = 269 -Msg = F9E1A6D9D6792B9F5C3ACDDD9EAAFF0370F7A217983152F48D23AC1CE87E3BCCC960 -MD = 9B96EF36E08215697264411E6E2AA3164038C20B1DE066ACA59B8AFDB4F9B01D - -Len = 270 -Msg = 3F567A6078B6F952DF6E07681E04D178DC76F537B3696DE0640F0AEA78AD0B98118C -MD = A1C04BFB4A933242F5B15C6D75A850581377F4DCF6BA1B3DE3639E90242061F9 - -Len = 271 -Msg = EE6B41172C01654AB7C0CF20B7F36AB0703483E938AEB8CD18E6F9BCDB29FFB3BA90 -MD = C4355861A59F96CE29AE04FA1B04F665FE984091F7719840145319DB31C81C85 - -Len = 272 -Msg = 62F154EC394D0BC757D045C798C8B87A00E0655D0481A7D2D9FB58D93AEDC676B5A0 -MD = CCE3E3D498328A4D9C5B4DBF9A1209628AB82621AD1A0D0A18680362889E6164 - -Len = 273 -Msg = 0AB446212263B276D8A86F20FB75AC94156E2C8D9B1C7DE35049D113AC96FD18DCE200 -MD = 2CE706A37D46F6545B32D62C2780B3196C807FC66F2F0FC039D24D6E6CAEE421 - -Len = 274 -Msg = ECE9BD39477F2F9B4A8FEE98906D5526D0F994E5D8F6057F13A20DFEB0467C60FD4AC0 -MD = 4C66C805591C99D0CCAD64454A8DB1AA303AB9E644B71E2DDC4608FA3196B1A3 - -Len = 275 -Msg = 0FDD7CD321A364E44EA135DECDA4910BDE8120C1FB23C63C795EB17DA82628D40FBAC0 -MD = 0C786F73D8AA8FEF81A01766F07D7D0496954E97EA01B38A62ACC60A8A48176F - -Len = 276 -Msg = 54210A5886A04CBD1EFDEFE792DCC7C4085B3A2E582A5A4C0F5314B63216FED382C820 -MD = 686966F4A197423632E2CE84C2855EA843F9BC5968D0FDA624972AA70421C82B - -Len = 277 -Msg = E4EBF54BDC9F4B1B91A42C0822BFF0BB5613ECDFA1E0A01474BED6897D5A37CB1D7CF8 -MD = 77DAF427B4DD6CD9EBB78C220659C2090B43D430A7BAB9B7A65F68FAD9E8153C - -Len = 278 -Msg = D9C2020DB24BC84887F7DD078CC6C243029ADFF37C3D41A33C291E95837561FA13C948 -MD = 02B427E95CF71240D7460E0609CC7523B6EAFBA4F953AD75C88ABE52B01EAB7C - -Len = 279 -Msg = 21D2D64C53798DB8A118101B76FC39957D286137A838428042F13D5472AA42E41D38FA -MD = 2BAA310A691136A323544A2B956AD66E001772CF4852998EBD04A7707DA55460 - -Len = 280 -Msg = B2DCFE9FF19E2B23CE7DA2A4207D3E5EC7C6112A8A22AEC9675A886378E14E5BFBAD4E -MD = F871DB93C5C92ECD65D4EDB96FCB12E4729BC2A1899F7FB029F50BFF431CBB72 - -Len = 281 -Msg = A40D0922D28BE97EB6C2C071269A0A11547F7D206D39D3C53229078220DAB6704FD0F100 -MD = E864EEBFD3C79C8DDAF57583BA4A0CDB7BC69664729A2A3DD6E39AEF9CF71997 - -Len = 282 -Msg = 57F929AEE5B4628EF6FE014E93BE6C509E0FD437B33C86625841AE12DC302E1599222140 -MD = 95BC94A1CA51F8876D68E8B6EB6F88E2FAE2007FFD419B3E3C0BFC07E3702E48 - -Len = 283 -Msg = F69533A9AB0CFDFBF2F5A5D990C52B0533F76A4427225FB6FD458F965655483096389AC0 -MD = 21FF4B091AAEA576AA3FD66363395BE745548C681F105CCE7B663681B1F1ECDA - -Len = 284 -Msg = 5322E6BCED609A2177C5FD2BC95DB4B7DE2F1884A8D710B41D473BD544AB3B0D8126CFD0 -MD = 543795C1EB306634683BABBA42931DBA748B4C3798A2B2D138E08ADEDAF5D2B6 - -Len = 285 -Msg = A599E2676154A6E3D1D091953F0399CCD63672AAB01334070020E5D4721DFD96DBC3C250 -MD = 039B8D539077E28B923736827F00EFBC445A91DFB72E1A1C0CBFC236718F60A4 - -Len = 286 -Msg = 6C22766FDE70CEFEADE46F7C9197724211216DBD0D89E2B0AE2273548CBE15C5473C4658 -MD = C62AEFD5C35ECD4ED8F3519756D6756EDCDC299BD4F1232694DB27CDBCCDB013 - -Len = 287 -Msg = D3D02C5BE255684FF0094A2A97741C6AC6BEB6FA68CE253CDCE6F315390512D8C9441566 -MD = 142DED8E63C120952658F9E06934802E006EEDC26412A6F3A9A424508A3E99D1 - -Len = 288 -Msg = 47F5697AC8C31409C0868827347A613A3562041C633CF1F1F86865A576E02835ED2C2492 -MD = 4EB143477431DF019311AED936CAB91A912EC1E6868B71E9EDDB777408D4AF34 - -Len = 289 -Msg = F1AC7DE5E3616550BD56CC0C77FF8A375AB68D13DE2B722373F140F8ABD139EC88F44BD400 -MD = 9889CB6346AAC872C974192E3ECD0AD7E387F984DBC8D78DE9E652514BF01DCF - -Len = 290 -Msg = 678527E5C580FA674AF530CCB276BE6E9F8003F428E3F47C533EC2BA518F1779DD78E5D380 -MD = 47634FBAF03C9FEDC46F633ADDCF54B86FC527921719D3A3864A9EB221E49468 - -Len = 291 -Msg = ABA2217B97DBC72869B04FB6B3BE2294F1795A3186E1DC73B4424918952D0C5314AA9B6FC0 -MD = F3A5F3A9A920E097AD9AD64E3383DB891D8605D2A61CAAB13EFA08AA4E6573D2 - -Len = 292 -Msg = 332E1B3FC86DB38A50EF54E186531E2562C586D502F93CD60703F2253EDC1513DD728572C0 -MD = 71374C8A8338E771FE1307CBBB4C67ADC9E78E485BBC7EBF6AFA65BD3EB73CED - -Len = 293 -Msg = BBD8DDFB18D02307F142BC0CD7589C205809D60BE0D947F1D4B640ABC80FE4EFA55CE3F940 -MD = D5048BFF537E109D9E3B541C0E05BF1301CD513D25BE89EA3A0E4FF2052530B5 - -Len = 294 -Msg = 405FBFFFDD6C1208747AC3220F509CC8702554F8E5C6D1E680963DA085483B87124BC3FDD4 -MD = BE43B5B7B299EA90FFC531581CB9F5844453B28B8CB1FE2F920CC2B56F102E66 - -Len = 295 -Msg = 1C148D3B7B7425FC2AEF8D56A3DD47EB45CDAFE5B2F0560A7D3394FFE1F268D2FBE9B6AF20 -MD = AE5383472FCBFDE499FAD005D56DD079F9E5BE4A15A9938168A666B3F3714817 - -Len = 296 -Msg = 512A6D292E67ECB2FE486BFE92660953A75484FF4C4F2ECA2B0AF0EDCDD4339C6B2EE4E542 -MD = 9A0C1D50A59DBF657F6713C795ED14E1F23B4EAA137C5540AACDB0A7E32C29FC - -Len = 297 -Msg = 227D677CF3CC4A9414B92D0469A682A990D6065003E8800AD230F8E1E985A524D795D3576580 -MD = 7A08629658DEAB879B7C1CB16287A34C442E0DCB9B644F3A705FC033F1007021 - -Len = 298 -Msg = A613BA9874384B4A8C9F3499E920D06C194FBFECEFBCA745454EBD9A9D396613511A72B78740 -MD = 69CDA2A0858D554A4EE6DBC964B66DABA4F80D2F5446F85ED0956E0E88123CE2 - -Len = 299 -Msg = 1C5CFD28B933493A66DC9BF5CA3D9DA856919248E5920909C915BC8FCE40EF1E6E0B0C6969C0 -MD = C779815D4C6D0D4B11C956F1F759D671E07D29A7A9ECD5772048DB146902AC3B - -Len = 300 -Msg = 204EB3CE02AB77FE6F3FFFFDA3F7A257B53B2A07E67505C7DBCCCB50832D4F9A2882B98BBF40 -MD = DB7436EF36798425051A1E879302CDD7811AFDF58E4DBE6F348B9017FA933F89 - -Len = 301 -Msg = 38BFDB67DE50E43150FA5CD4DB63798B5E62BBFF32FB6455DCB255F5C6AACF27B13D47716278 -MD = F7CEFA237F1F23B19899451873BF62D43B7CC32E71A2AB690183D5FEEA9E593E - -Len = 302 -Msg = 0CF6117A1614A773BD4840F01FD2ECFC04AC73F07C5A94F98A9E3BFCB7985125D4A1BFC9D1E0 -MD = CC57280531EC39760938A761D3B9C55947F33C918AAEC1372D322E991266AB3B - -Len = 303 -Msg = 7462D66CB57E83172A87412759B5F9CDB8600388D1C3F90F8FC8A89E0F3C513769B9BC8FCB82 -MD = F42F3012335793C2172BC5C57B042509E25182C9DD25809986A31F7074309CB8 - -Len = 304 -Msg = 973CF2B4DCF0BFA872B41194CB05BB4E16760A1840D8343301802576197EC19E2A1493D8F4FB -MD = BA062E5D370216D11985C4CA7A2658DDC7328B4BE4B40A52DD8FA3CA662F09D1 - -Len = 305 -Msg = 3C97ACA85A13A0106FD47D7C59D81C58F2E2C5C7F5C717A6033E6819A0EBE6081661AB141BBE00 -MD = 3C20F5DD14E0B5B3DB527A3B7475846DDFC93DF6B87B2E61851B2049DDA0E5A7 - -Len = 306 -Msg = D18F5D56D451363967D4767E79BDA1A4A90DE871687084C922EDE4319A6716E4FFB5072D8D6980 -MD = CBC67223746844B519E0763F2F035893FDF8C438BB1AB6FD3372ABBB64E636F3 - -Len = 307 -Msg = 557058858B0E5697FC9C4419E6C907A8B85F622519ACA056DD4E3704D8CBC35B91A5076D0D33C0 -MD = 658FC02C10632C8D9A1D24A23235AED9EB30C40CCCD8230505F2C35E3FEBDE07 - -Len = 308 -Msg = 06B2CEC17D720757AD0B9F832AA958141091B25B0AB2B4920242CC3EE2BC438B04754FC84A4D40 -MD = 9AB74A97EDFB84597CFB1B3A18531530511F0E535E9AA4B1E72A4741CA5B1E42 - -Len = 309 -Msg = B98CF17F2C7EB0E739634CED318316AFDC815897E4316175DCD40DE242ECE3149920E2DA76D140 -MD = 0AA431D1C6041008CC9FC2C222B47F280C87026F4FE99EF45A78FE5BFE7763A2 - -Len = 310 -Msg = 9444C95EA6A36C1649F600A26586135A34F1E56633208C767F4265A9F0B47776E3CD5AA515B5FC -MD = 5B6261C228BFF90B3C9E0E511F454F14AF4274E6102C733FE051A4E526F90FDB - -Len = 311 -Msg = 9C30ADFA9CE9F25A6AFFCA7105DFBDBFA98A0E2F57719A645C5D867F5B7D5F8A0D821C605102DC -MD = 7C849389C0AEED7147091488FB3E72699C875CD35F0826331A7F9832167B9FF8 - -Len = 312 -Msg = 80BEEBCD2E3F8A9451D4499961C9731AE667CDC24EA020CE3B9AA4BBC0A7F79E30A934467DA4B0 -MD = 3A083AE163DF42BD51B9C664BEE9DC4362F16E63383DF16473DF71BE6DD40C1C - -Len = 313 -Msg = B82A59C86DAC0285610218EF2C068238C941F5BE67CA5A5CB471E195B3B93E984B65A6CADEAD3400 -MD = 98257A06519F50E590F05DC25D33B84AABA70D6DEBA5383D3E8EEF465B9CC4CA - -Len = 314 -Msg = 8F4806F43BFDF940A0E0DE30168832AC32A3EA1456DFF574FABA15473FCD6F1DC7DA773277678940 -MD = B4EA979E884B333FDB94C5612415860AAF812ED555B64255D0E1BBA168DD5C03 - -Len = 315 -Msg = AC1264C9D5338FFDAB0FF7F5AAF487F7E046601056B15678180A54C0B1CEBABA915A4E77CA5241E0 -MD = 2A7A201561E0BA3E5BB4BBCC9FACBF92EAB9D6383745847EB93AD0178233831C - -Len = 316 -Msg = 2CC2C66FC829514F585D9BE4BF8CC7E694323E42777A78C917D33538F6E53B5C7786062597424390 -MD = 52D6DE82A7B0BE301FDBD03E821B856765104AF6AE0C967553BAFAE26D449B5D - -Len = 317 -Msg = 29BE069D897FFCA132F8CA5C1D2E34FD1D02603FEAEC338C768F9676FE581A03EE3399AD9CF180A8 -MD = 545DD6D107C05A9A0680D5F25EEACBFE32E65FAE88B41F5980FD863EA4D26A63 - -Len = 318 -Msg = 991EB535DCC32C260C0D46DB6DDE353DADF0839FAA4903029B3B0D9B49A3E746D49D8EF3F8271A80 -MD = 7CC8881955DF6550CA1B22DF2EE3F0FC2F8F671C047A32BBD682FA415768DCE1 - -Len = 319 -Msg = CD10861F3A9632FFA513E08DD9BCBF6B2E7BA21CB46D55E724C7D3BE5B7C6145DE686CA9F9F6C20A -MD = CFDD75CB01505AD890245A1F9641259964FB6ED1673003F2964AF09EC3F37067 - -Len = 320 -Msg = 7ABAA12EC2A7347674E444140AE0FB659D08E1C66DECD8D6EAE925FA451D65F3C0308E29446B8ED3 -MD = 4876E273AC00942576D9608D5B63ECC9A3E75D5E0C42C6ABDBCDE037785AF9A7 - -Len = 321 -Msg = 6AE52D5CFD459F254563F1AEDF7619AAEAC27C70B83CCF7AFE16DFB4E44AE45346CEF0994DD642D580 -MD = 6BBC636995355DDC7CAA80E3E619331F64A23A00506240929348867A50F2EFE1 - -Len = 322 -Msg = 0D030F9A2E2A5EAB466D6FBEF14962AAFFAC30C866086F50DA454B9E6AA30A0DB5E620D272C9B577C0 -MD = 5CF6BB44FD4017E16A3242F5FC2D375FDA00D9DDE92B95375627E2B856257F5C - -Len = 323 -Msg = 260B122E4E17495DAA1A9E004C5AA0EE759DB729EB269435EF9D229F41774D4C7ACEAF6352A5628F00 -MD = C94A11AD4E8235E5A5045F902CBC99ECA4340F09C556A17B90E2CC8A350B324B - -Len = 324 -Msg = EA774E81D5A63B0C7894492C70A0960AEAB24E88FBCC765D5D2AB69F1D66852F715A4A1316DDCF12F0 -MD = D10E0B96A977B0441B08050DD0E7C07F2546A3F600B71A20F900EBFA9F5BFE2F - -Len = 325 -Msg = 46020957F94AA4B4574527455E6E9DFCB571A073F066C7707D8FE4BAB714C99515782295ABD51E0628 -MD = CD0BB977F1F24BF0C1600101E16F87E713FD3292F816D1A1631C708A8D00A13C - -Len = 326 -Msg = C8C1BECD825C7F75CC12F31B1DC070B375768BE540D49F7D8475D83D64DD11891761AC99B1DE6AE2A8 -MD = 5355A9325713407F373EA4596AE5A491F27460789B1789FC44E235649E00F9CF - -Len = 327 -Msg = 4A5F9BCAD4914FBB2FE01FCEFBE7C7B5F061F3BBFC3289F2275CFAAB8F69312ED88C53FCACAB6B9B8A -MD = 27C2D8EB268B52A1DCEA5EA7F315A057DC199F7669F92D65E5AAAEE9F5495DF2 - -Len = 328 -Msg = C88DEE9927679B8AF422ABCBACF283B904FF31E1CAC58C7819809F65D5807D46723B20F67BA610C2B7 -MD = 4797BA1C7AB7197050D6B2E506F2DF4550E4B673DF78F18C465424E48DF5E997 - -Len = 329 -Msg = 6EBA5B65EA4C5EDE782C7178469530309F30A19D25F36C5CA9061320F2D541DF439F0A6646014F87D180 -MD = F7D17A0D0A3BEB35D27777C76624C6C8FABD1D816119C45C20BF7CAC4AD1BC5E - -Len = 330 -Msg = 756279C3F03DA783BF46BFE8E6FBECEC6BD372FAB35732CD8B1ED72C62C28DAE0EBA4FFC02245892E900 -MD = 4C10AD89E30D88C68590821A804CD6F52BD5BAD49A840E617FF7BE53F1C72BA5 - -Len = 331 -Msg = 2CCB8AB11969F71041A9F18F91B4A76341FA6DE184E9A9B2CA0A4951B128DEB705EA81E190E772235AA0 -MD = 9987DDB3E73C58F9670535EA6113E8FC5BFECA03E9998A33A7FA6B67F6600C05 - -Len = 332 -Msg = E6FD7544D317CFF635257BDD529C4A986611D254C7CE5200F5485928684F40E0DB046BDC4B2633AF6AE0 -MD = DD8FB1B5098975BE9A9AA02BB27611B2DEC8D943B3333A2CBEE7475ECD9CD0C4 - -Len = 333 -Msg = 0B2173D6DB9B9E03F799B6B59DEBCCE1FFEAA8CD118F22E3A5342C53D4D78A2109D7F1798AFE499F4E48 -MD = C0656E2B9D0A9894790EB7BC71D59AB31132A8A2B4C5F0D7D51E77CC20D773EA - -Len = 334 -Msg = 29DA389850B6279E146BB9F948913C4C6595DF8317CAF71FC4836B29A963FBBB0F27776F111F7AA7E42C -MD = CF8A4BE123EE5B7A96B33EFCBA491EDB802A0C8F338023A594FEF1D9D0FA48DD - -Len = 335 -Msg = 9393D143C10AE0CA7636DA6CBB692146C86528A9F8C3724BA57C74A9E00FB3848A2473C221529A16374A -MD = 14C475E85BEAD6BB7F69EA4EF67FFA199EE4FC2924F4A644D9619223563E471B - -Len = 336 -Msg = 01E43FE350FCEC450EC9B102053E6B5D56E09896E0DDD9074FE138E6038210270C834CE6EADC2BB86BF6 -MD = 41C91BE98C5813A4C5D8AE7C29B9919C1CC95B4A05F82433948CB99D9A6D039C - -Len = 337 -Msg = 7708476C99437E2FD9BE4754BBF89A08324C36D49B27D852034F1CC54BCFED95B4E0E11A7C909E8D128480 -MD = 1AEBE2B1E73E81BE73F34A2F317FC75303A9B677152435F00C027C3695728808 - -Len = 338 -Msg = 12B37259E6C70B2FAC786F0E573A7A467DD9178B7D2EF0CF264E8E12ACCC3060C62A4971E0100BB93CD700 -MD = E71D9EB57EE3AB015B8F40C52A966F887588E01009209AAD7B0BA44974E53F45 - -Len = 339 -Msg = A5A38B8A372C372049ED7D377535B6EF29AE7574986DC30D0A79D9D0B5DDA3103A9D85741B5D58BE366720 -MD = A576739D8972B46209CFEA0E1371975DCEE9533018278CA8A39BB34F72D32938 - -Len = 340 -Msg = 028A103A894572CFAAADBF89765D49F1E3ED6DA3F00A4A48E84545B11854D47C3FF0C936E7E897FA60E250 -MD = CF855AEA5A97DB64124FEFA6AA93BAB0324B91D0AD2B8D2414EB73B27EF4F62B - -Len = 341 -Msg = BF3AF568D5BDBBE53AD42A2C7D419015A57E47663F0C73837CD483B190C09BFA9F120713E4E743D5394F20 -MD = 57B49BDA1B7A3285AC40D18BCD51625A8740DEB01A381161F7360262CD29C776 - -Len = 342 -Msg = 1540A10CFBFC8593F64F4949CFA61E01E577C30C987DC150BA15F6C39ACEBAEDD240B9BA78322D79863970 -MD = 26CF520A3F866FF0A7215C9DA6FD897901DEAF17B7D0AC8F08A200E2584E5FEE - -Len = 343 -Msg = FE2DA1F667125A9EB370B832ED0C5161AFAC4BC7A03976CEEF8B89FFDFA61008CF4BA2649D190F2AA721DE -MD = 242A50B87A2E860B9177C38ADF3228B392A2955F6ADA3B7D69504F8E43B9246C - -Len = 344 -Msg = 337023370A48B62EE43546F17C4EF2BF8D7ECD1D49F90BAB604B839C2E6E5BD21540D29BA27AB8E309A4B7 -MD = EE354290E3F9CE9123C49BA616E1A2684A90F3DDD84E73A1D2C232F740412B18 - -Len = 345 -Msg = 1FEDC8DDAAC6856744AEFD7CBC018561054E6E3585CAB3F46710F6F8A997AB9D9EFC09FBFCEE9EA1CDFE4400 -MD = 16D3610F4B69B82B263B9ECB1F3467A801110059838E7E363D47445CA0096353 - -Len = 346 -Msg = 656D58E735A9AF7CBC79B31C648E200BDE86AEB02349D5FCA38C3C1E57D3BFDFBA46059244A808F528826480 -MD = C96F7F0B1515409705C87A615495A16ED017089BB648D0B522A8DC4C8C2AE0E6 - -Len = 347 -Msg = 06E33F05EC6F55B818F18C7C20E1C7BD7370EE97DEC79F723EC80FF86EE286F379B5183C9CD6242BFC2D4BA0 -MD = DBFE7797AB0DA616471D9920DC189D1CF49FF95F519C6831EAF04D29CABB92F8 - -Len = 348 -Msg = 09B73DEF13C73B22E45263E5B9E5F4F291FB0132B24425A836A3BD6295DA7AAE2B4301805933F67CCC35B510 -MD = 35ADD8DF5816CE54CB5BD8FAC457313F7D286AE8EBC0BF919EA32BB4EE1CB593 - -Len = 349 -Msg = A2CC0259EBA6A30CF724502773D94178E67FDE7F510C5BF320791877752B815BE201437AE318CFF42BD12230 -MD = A8DE947664E60C10D4D53066502973576553310A882067459CE3D2817B220FFF - -Len = 350 -Msg = 2C76974C31F633D26395D833037C6BA084B345CAFC3858303D552838BC9832017178D72C2468A9CC347D6C18 -MD = 3E617D9068894D21136859AB113F3433F92DAF650ED36899222079C3950F79D0 - -Len = 351 -Msg = E0F134DF7984DD0D183B8761DA86000C298E7B8AE7A7308EDA560F816C475AFF5C85ED74103B683C2867E0F0 -MD = FD3448A59D9FB00FD53ACFB6F3C8A8D3ED4ADD8D956EE654297A1A2D9AD35617 - -Len = 352 -Msg = 6892540F964C8C74BD2DB02C0AD884510CB38AFD4438AF31FC912756F3EFEC6B32B58EBC38FC2A6B913596A8 -MD = FBEC0B6D71696EEDE900B77AA6D7D25F4AB45DF8961CA9C8B3F4F9B51AF983AB - -Len = 353 -Msg = EB093452BC1B8B5C069C93383A6888CBDBDF54EA27EE2A6EA03866CAD6F8480DDF46010BCD29511FEB34E7A200 -MD = 9B2C9E2384F77C1A80B3E8481669F61322BC867B6710C77FFB091DBCD28113D6 - -Len = 354 -Msg = 182124E36883F7209E73389F39F72B1840ABEC27A3F072F1687BF1A117E6A500AE98F62CF1512C62EF2ED00800 -MD = 3267CE4844FE8A9B61BD84965F563D64095391BDD0F095FAB47AD27B56CB521C - -Len = 355 -Msg = 2CA783CB3D5E33AAE3DE058E16527161A84B7B53CEFBEEA929A60B146C92124FA69B61613FB1748832C2C1F060 -MD = A1B8B0EB9854C44FD90142968C0A6EE99D6CEDCFDE9AC29CACFD9D25B31EE407 - -Len = 356 -Msg = 7E36947B12C82FA496D485EDD42A6F2C3C32894878DA04D92F1D462668448DE6ED6276D18C349DE0ED4732B500 -MD = 29D0579F2731503F502D9E66060A726030C211D2D37F6366B548DC0714F99EF2 - -Len = 357 -Msg = D6AD21DF91125357AD9F6B6D67E3FB441BB479EE5EFA53478E3DE2EE183B3E079432CEEC47043CFF7759D717C8 -MD = 4B64E9498CAF59D68122471A2F645C85DDC15E948381F8E6466BCFE5CB0E305F - -Len = 358 -Msg = 15463F7D27902F09F4BFDC40A704B38A6F9D5CB5C01EC8B9BE2C1DE8BD0D02A950141652B8C0E68A7A88C25F9C -MD = FC2BDC9D76A2D5016DC796E8F9D76A54C600E7B6AF208554E76E22A08B85C347 - -Len = 359 -Msg = C6608A516B83270FB53379002DD11F426C0CAABCEBB89F9F7D89DE9069F7A6EC76699B8503B8FEFF4418206CC2 -MD = 6EBDFF64D0D3CA3097216DD88989723E5F688D62A4B93EB5DA89641F68256E1D - -Len = 360 -Msg = F5961DFD2B1FFFFDA4FFBF30560C165BFEDAB8CE0BE525845DEB8DC61004B7DB38467205F5DCFB34A2ACFE96C0 -MD = 9D24AEEA08F9A4B5FB8B6DE85A2296F5F4108DDD1EEA4F8EE58819CF84EDB765 - -Len = 361 -Msg = 501C700F800129EBF944F9F60A87AF09AAB22CEB2507459EA596430594A0607E9CAFE92DCE870F251D9CCBA22500 -MD = 00461FE341B5BF6BECBEA9F926566FB4940B8E4E9D08E494830D0C806960DB3D - -Len = 362 -Msg = 446594BFB8B97519D99B1EF9DBFFFF5DD75DD72F60E6788A8DE42F1BD917B450D76B165E97343353F4659268F840 -MD = 25B06AC01077F053A3FD00993EF0408B6A432E99AE1ECEC250FDF7AF80D3386D - -Len = 363 -Msg = E6E6686481E5A98343D81BE7CDBACB5DCBD7AE77ED892B4EFE2E55EE914B4C4D3F47C31D3BF02AB52733265EB280 -MD = 643BD76706C6EC8783A7FC7D2C8189ADCB1E4605EA5A6A8BBE9B2AC0590C42A2 - -Len = 364 -Msg = FD7D50DFA2F48B2D1C72E99336F88F389DF5A1F616F49B616ED4C51C05F6340085267910BA7137B36BF3E9190990 -MD = 4FC6952642F8449329FB8B0BE2841A9CB7795753B9DD632708F269AB0F9A44D7 - -Len = 365 -Msg = 57D7B43D26E8BAD1FEEF7ADF6893ADE1554F3AA453CCB8EBE8ADBA7A8F9E64BDC8126882F3E8872EAE10EF8D9EA8 -MD = A84C075E331DBFBBF3B1DCD4825BE039A4420741AA66645F1787DA8639AA8D48 - -Len = 366 -Msg = 56816DB5D0458EFB764D88C5101906337FDFA82082D67DBA964B35EACB019FBCC202EAFA9966A47656BB52E4E804 -MD = A440994AC6B49D180B281138000D8587EB4A67FAB5AA83401F0724EBD3B62D4F - -Len = 367 -Msg = 0780658D267A25094629F1822E2D430573D6D1CB3D057D66BE241278244ACB3EA4418E8B21D5138455A80BDC81A0 -MD = 8A5C12BC3F7C39F201543C395FCB7715112E798FFF624915F8F2614D0DDCFAB3 - -Len = 368 -Msg = CA061A2EB6CEED8881CE2057172D869D73A1951E63D57261384B80CEB5451E77B06CF0F5A0EA15CA907EE1C27EBA -MD = 732034CAE3FF1116F07FC18B5A26EF8FAF3FE75D3DBCA05E48795365E0A17C40 - -Len = 369 -Msg = C6CF28AD22398E68491C6EC930B95AFEDBF6E44330BB8A9E46B2B7A77B35E3793E6F684E2103E3954BA173CEE7B180 -MD = D1AAD542917C13FBDC897F79FAAEF42CA9EB037F1510DBFCCEBE73F668F70CDE - -Len = 370 -Msg = 245C8B218DADF2D694AF106BDFFDC34CB24D0D00EABF16F94D010AA3D53AFD1E3BA64B8CC419B2291D8BC84D0A8280 -MD = 0D3222D0A0BF5FC2E93ADBBE241135062D048CC9C3EFA01FE250A9D35D572D1A - -Len = 371 -Msg = 6B3056B6F3768AFFE4952DF6E33D991044D92D8EFF9CB886C0516BA9B15827C69DD5C87A8DD7F3AE53A0928AF153C0 -MD = 694FC750A02CD153DC03F875344AC873268FC5DDCBC136DC012A6FCDB4474D3A - -Len = 372 -Msg = 7A0CB5B2759A5E0361CB2238B2BBC1306B3605D6EE6DA35B77E26EA7A80C9480C7D72C9C1F0876F2C850A8B9BF2460 -MD = 6D3F4D4CE15FCE198CFFFDCCBBB581A5B3F15808EB7E21FC8091D5F68166E473 - -Len = 373 -Msg = 3F589EC4DAAFA9125ADAD0DEA6C0CC6230ADEDFEE2C5C8483B9C05814452B977BA3E487DE46FDB42788DC076780250 -MD = AC8ACE8341EA2DDA634786DFA0D73C477743670A6233EB64EE25D993051102C3 - -Len = 374 -Msg = ED78EF2E98AA9AFD62EE9BB8A531B69D91EE5F8EE701BD97EEAC88C2B09A75056C03DA7F2438FFEDD03A47399A07A0 -MD = D1A4C6FAD38082DEE2B8568E5FA11834494EC6F2882FA983E954A2F5D2DB4262 - -Len = 375 -Msg = 7193F965E130AA832EAB17149906EA78B4F2341085A5A1A124C1A9AA182118E5693FAFEDFD6FAC7AE4BBA79E907A4E -MD = 74459A4336967D75F58C73D72BB103C703474D65CF4EDF5279E6ADEE617E4844 - -Len = 376 -Msg = 1743A77251D69242750C4F1140532CD3C33F9B5CCDF7514E8584D4A5F9FBD730BCF84D0D4726364B9BF95AB251D9BB -MD = DEAC521805BC6A97C0870E9E225D1C4B2FD8F3A9A7F6B39E357C26414821E2DD - -Len = 377 -Msg = B01795726D8DA32E9C36F37E09479F4571DA850893CE76BB1510A4FFFF85DB3E2DC89E23917955D748A79612E3141D00 -MD = 766286F97788E1E96A4A8A4024C21C5D6A0F7D0344A2CCC06719BEE55C0E3AF2 - -Len = 378 -Msg = 9BFAD4C6CBE6C8E010C1ED56D377A507FB745DD26767F67F5F84569BD28DF01F697149118B37826F0C064A96BF6F8440 -MD = 31ED34CFB6B5B54FC3B21EB8AD48482E0D90DF8C19633F91B622F00E45577C48 - -Len = 379 -Msg = 0B36E609EC9B746AC8007967F4445CB9BF020D4FB08D72C893E17CB7632CFA9B43C3C39947AA674B2FA47469EE512C80 -MD = 75C5DCD6129318EEB8474D1008DAFADC4DA353CDEED68412EFB8BA688AC4ABC9 - -Len = 380 -Msg = 50BAAD7D4756E451D9734DBFCD6781FDF01E44FECC02B822F489FF7640A07320DE9E0CA2EF9452C146605E7A942C90F0 -MD = E30D1C81A1945FC7F025A2BB4FEFDC6EA7A48AD2B09B3C9AD25CB69F3597058B - -Len = 381 -Msg = 868EDB30D33E50D2639082F69CD0C61BABAE09129A8AFE697307E95D3419D7B90ECAC04F3EFD627E285C04DEE318AAB8 -MD = 2F93FA059B56C386A40FE89D9C9F9C9ECD0F69B9E2DC8101EA6E20BFFE1FBB30 - -Len = 382 -Msg = 9C540C6D4043298DF4BC9EA0B789EFC43216C3CB20D1997C7BEFE94B677A03669C3D7EBD0D3D156D5431BCC1D4669CEC -MD = 5B53CE426FBDC3C75BC56C6B8E9DEFE85338114B38D4D2B38972FB2EEFC0641D - -Len = 383 -Msg = 80C9184EDB1C247FDF554231308F15D6C5F45ECF6D21E7D6BEB8EB841410B1146DEF2F9AA9C452EE60361CE6C67043E6 -MD = 464020013307E018317B11795240E0A9F11417AF40F0ED1E2DBAE829C4BFCE4B - -Len = 384 -Msg = D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9 -MD = AD55537347B20D9FCA02683E6DE1032EC10EB84DA4CBD501E49744A666292EDF - -Len = 385 -Msg = F6D31F3C22A3D006881241A2D0F4138A2C3E683C8C75AFBFE1DACBBBB6976D51BB7598210B606411602B04C774023C5B80 -MD = 2874C7A3D60F42DB812B0D7BA1BE4FEE7A0ECA56EF819AC244B4491A1673035D - -Len = 386 -Msg = 9E38E9FC2A49E920FDC0452A2CAB48D187952AD2AEF98D1070BB409E5E363A15F8A8D4E56716225478A9AE429F58E5A280 -MD = 7A1684E5C7B6C0BACE372DF894CABB8C97FAB86C613F6EC9E886F127255E1A4B - -Len = 387 -Msg = 0C2B7646EF6BB85EA55D7CB3D15DDAB2F03F74DB6BB92859E5D06EBC364300174619490E907219D3664FC591B36B6FF900 -MD = 0EBB135B43182EFC46E756778FB848BB5658C0C983571177FC2592B153FC2EBD - -Len = 388 -Msg = F08C6B743F2BE9E64E55BF64219455FCA6ADEC2950599CF90F87D1CBE3E20EC9C2ED5C5688B8F6F68F07D2ECB7E9DC5CC0 -MD = 4ED870970556DB67A6DB0516765E508DA7A5F9E6C25920CD15CFC830EBCEC815 - -Len = 389 -Msg = AE2BE2C31BA294971E252E26FBA821A90368507DA6FBEFBD213C3C2B20CBBA0E4759B61261B95A3715549E37126FED6ED8 -MD = A1497D4D98868F012E2CFA49FD93FD65B9344D687716A536502A2808EA63D1B0 - -Len = 390 -Msg = 2D394EB3C3F1DC9A6BC8A88E6DA85849A89038B2DD26113BF503169D3EAC0079B56AAD799436A343A0EC5F53E5D9E94A40 -MD = 95DFD06F3480DAB52BB73B98A485FD9066051D9B6E8963BCE08F6440775679E7 - -Len = 391 -Msg = 53C96678A5B5E16BD5E23C68078774D685E8506F90FE37DA9F5DAA027D8A92BF50A9802B12C724A30FBC1BCB665AC9FE36 -MD = 952CBF5A6ACC67A744821B122A1F20D6CA5B0F4894414144C09365D62C8FAA00 - -Len = 392 -Msg = BE9684BE70340860373C9C482BA517E899FC81BAAA12E5C6D7727975D1D41BA8BEF788CDB5CF4606C9C1C7F61AED59F97D -MD = B1F990204BF630569A3EDC634864274786F40CE1C57165EE32D0E29F5D0C6851 - -Len = 393 -Msg = B107511A7881EC739420A1F7FA56FE6DC9BC265D48FEAE99E8F6051EE7129F25F90C7D56A6B16F80733E174DCAE715000280 -MD = 817C776AFC04869C1E846F8D93C9766572EF8C87FBB80CDFB812E3DF0CAAA154 - -Len = 394 -Msg = D7661A5026665CC9D5A9676E92BA21F430F044C8F4C61941C8F0C075D5E7C5CF0009B6471368222412A70F96C24D194118C0 -MD = 1212965B133CAD2C62B14E28C88BEED3B6D303DBEFEFEDFD18FB0DA4C76C9E35 - -Len = 395 -Msg = A0C5DEAC53C00561B7340D31106E4B61B6B8CDAF7950D5B9AFBA9BA0B8B7418DAE4680B460B1A288029712DDB946DEA0E640 -MD = A47605EF13A281AABF32848BB2B6BC51E901E6D44E27B4350F6F71E3F2ECB54E - -Len = 396 -Msg = 06A82E6D3E0067A21BDF39EB89FBD0729618A0803DF3F362F81835622423CCF9177EF5BBACA40EBCC851D806594F502FEDB0 -MD = F234910B55FB243F3E546B40F0576A86AE2C504355886DD5693DDA7B27EDF075 - -Len = 397 -Msg = B8284DBDDE2AD5DDB44D04251D9E9A6EF9702CBE564BB8722DFE0DA70A228F0AB8D0164F86772F65AB25FA3D029C892439F8 -MD = 0B62F50E6B950894D7FA43BCA5B581F472D295E87D988F3EB4E0B47B5BD078B7 - -Len = 398 -Msg = CFAF722B7986FF2C401957C8BB60F9777309C978520A21A692F47F6BD08C054F4A42A7C1E703153E3C61309F203E82C38C44 -MD = 1255F64B92B359BD8039761C90A6D1E7EF077FFC81D1660A82B0D1F537A93741 - -Len = 399 -Msg = 9329A4CCEC09FB23008F0C59EF522D1B5D85B7FB3832AE3D6C3B15EB7847ABA6128036088E8E1722166A49565A93B7F11EA6 -MD = BAE8BEBAF428E89DE4115A6AFD97509235A5452229B9D093D0BEEFA3B8147983 - -Len = 400 -Msg = 7E15D2B9EA74CA60F66C8DFAB377D9198B7B16DEB6A1BA0EA3C7EE2042F89D3786E779CF053C77785AA9E692F821F14A7F51 -MD = FA460CD51BC611786D364FCABE39052BCD5F009EDFA81F4701C5B22B729B0016 - -Len = 401 -Msg = 319ECAFB15FE7FAAD64C4BA7560FB257B2EE2C1E4AA49E8426612938B08D717F0120CE812FFC7F2D005713A1682BB1DDB98180 -MD = 139548D046E372A6E0A1C54526100529E7033D2218635957567CD4AC03CAEABE - -Len = 402 -Msg = 47D9F1CAEE18C889A12A410DCC086C8D863901B89FA5869FF8FEC5A64B065659F57E7EA54D9911BA05E8A57DD222921C505240 -MD = 67C94CB7E41FF2E43270FE283C9F24054F3C054B4712A92F69C8D859F0D9DAC0 - -Len = 403 -Msg = 74927E91B6F203D54E2E81EFFB4F14889B1958A64568C21053E3DC5A941E14C2077D9DFFC18611B9CF5646DFB6C27E0D304E20 -MD = 32A4C1121762872F68CF206DF3D3A8E1D5FB09C7E711EF3717E92AB0A23FF978 - -Len = 404 -Msg = F6E46F9A7261261D239C74300F434D21475A03D2AEEBFB546F0C5AC6BC4EE97A197FAD9CC1B3C396C244F8F20F97632DC8EC30 -MD = DE89F827CE3147108A6D815B217206DBF7BFFB6B55AB7722BBAF0A3DFAC398A7 - -Len = 405 -Msg = 429DE6D5EAB64B3353736AA20106409B58C0C956F4F751E24CA3D519B730308AFF43232262F1DAE6BE948E87F6C187BA725FB8 -MD = BADE09EDD44A44689A61969B80FB4C57C89BAC052368903643B66B75BD83C084 - -Len = 406 -Msg = 429D066735761A1E5EA847E5EE3EFA5ABF2BE447E9D6E2715CF702F99FD2028AF3432ADD0D7F409E0A3DF144AF995B67B46A50 -MD = 9FED6E33401A696BA8E78787D98DD9F9812B8BD8A072EDF55A48E2E544A48710 - -Len = 407 -Msg = 0A798F7C67743E076AEDB61F0BA84D657DA0DA2923AD4D66DEF4D5934C49991427CDBD0134772D97DB1ED1522BA9EB7F972B30 -MD = F63A171093752504B8C3924779290DE22371F5DA8CA82113DCBB440B1ED70D17 - -Len = 408 -Msg = 9A219BE43713BD578015E9FDA66C0F2D83CAC563B776AB9F38F3E4F7EF229CB443304FBA401EFB2BDBD7ECE939102298651C86 -MD = F7B0FE5A69FF44060D4F6AD2486E6CDE9ED679AF9AA1ADA613E4CC392442BEB5 - -Len = 409 -Msg = 072B844D05C1141680E5A86AB9933E524A9C7FFB0006FD2CEBF48C420AB7890FF685BFDBA54E31571FAD5625C1F08467C9EEF300 -MD = 9BC90B7F39645653F29B39DC300DB5596A37299401613DEE1893C3749167D989 - -Len = 410 -Msg = C6547E7A0D7954F0D14A531E99B6BA3B22B93194D472E669C926FB3BFEFDFC638418425B4F2C11C438A8903004922C9242A1BD00 -MD = 2FCFE6362AF12E973EF82F8CE332E8B5B1EF78628C9FA3EEF8EF3F3BFC3972F0 - -Len = 411 -Msg = 84844062ACFF2734EF26AAF41303D0E767527DF9C54781EEE27F84D0C3262094612C44A8104471ADBD7B9D2899AE4B751CAD1700 -MD = 4E890E3E99A13E6C8FE22A22FBCDE185312AF1338FB7F539130C8DCDB5B800BE - -Len = 412 -Msg = CE88E129B93E120B3F80720C43F187308A336418787D20EFFF630885E20948862BB0ECD3539E1D23D05223C988A2E5495A92A600 -MD = 95AC38939407538753A628212509D2AABB5F4D490D85A8992C4A518E8CAC5BF5 - -Len = 413 -Msg = 4D4768585B090550A4289861A3EA955EE420D41A04B71199575120280DA1F0B9038AF3F35EFA1B8FDCE29F8F5F35DC6A803D49F0 -MD = 10E33DC2E796704B18D73B777F8EA3B9C8D7A7B4B1D6AA35F076314460408023 - -Len = 414 -Msg = 010FE46B5A0E37D07218028437F52F2FCF41063B6CDEF9433769D3AE35885599EACED0BD468E731C8A43986851545A7D200787F4 -MD = 0466529F6873682559D681B62D2AD09C6A74C7457EFC323B862128A351DE4036 - -Len = 415 -Msg = 5A7586F07BFD09DDC140DCAC2D5F6822EB9868F8258DF4DE7D6811EB43C37624A727177EA10F28943083AF7603F954E5CE1BDA0C -MD = 78E30BEBF8355B13AD6089A2BE203C81D72BC2DC729B62574A341F5F2BE31EC8 - -Len = 416 -Msg = C8F2B693BD0D75EF99CAEBDC22ADF4088A95A3542F637203E283BBC3268780E787D68D28CC3897452F6A22AA8573CCEBF245972A -MD = 24204D491F202534859FC0A208237184471A2D801FB3B934D0968D0D843D0345 - -Len = 417 -Msg = 8C7FFA23F6AF3DF0385B9EBF9E14F6998354025123E95E92023A3885360ED163DA1F430A259F6C535A6E3975A3AA541FA536F34900 -MD = FA6B637BD1AB6B54AEAE9555DC1238A2F3FC8B4157D95A74B91A62A50772F8DC - -Len = 418 -Msg = A48E78686CEB99446507346AA71D0C7C5D97AF093895DCE569D8F69B16771696E429787C87946214985B0B6EE9301EC89746495640 -MD = 2D14744BB8B44AFA4C9CAEE0E6A3190887BBCED2BD778093E6BD047007A7BA84 - -Len = 419 -Msg = D13CADCDEF36059A4FC6EA141CF4460B93631519A40CE26ABAA635480687A7AA39D15CE827BDCE367C619AF46F838B3B1ED26DFD40 -MD = 6844EF2F85F3DEC87DB42696B765F75A7BF18B7D140473A2B422AF6EBE52FEF4 - -Len = 420 -Msg = 82275CE8689C8466DBDC50AE683961A5C5D4D3A348025498BEE894E8F0D6B9328D7005FABB85E13A48DF19BCDA503234AF7124C980 -MD = 5C20B106657D98043446BB607C6B1413225A4EC670DB43297629F6B69988A53E - -Len = 421 -Msg = 4B6FE5B999B90B21DB0CF4B8DE1E4351F80D680C49D3F040869256F6371065FF35DAD6BA971698248931C769B95869855377DCCC88 -MD = FDBEEB73D7AAF78C665A19A174FC2AEEA02B3FCE5A154E7EA8C005E4B60EEBD5 - -Len = 422 -Msg = 3CAFA3937071BB3055C96A364F9B1FA56266F47E03A1A28213166177495A59713C04B7475E1AC2573B979BE28EEEF0B651E195CD8C -MD = A87852A9F3A03075117FFF0C0662904F005024999A79712C162CCC3AADD5AD7A - -Len = 423 -Msg = 93302958B1CA9E71AA01CA51E8E6E370D7414FEF7288714EB71F2005CAD8E605C6D173A1617823DCA776AF99A98ECA41274AA1610E -MD = 111E6D2A855C4E6FFA79429A0E9743B2C1CDB76DC826FA305F9CD31B8379EBA3 - -Len = 424 -Msg = EC0F99711016C6A2A07AD80D16427506CE6F441059FD269442BAAA28C6CA037B22EEAC49D5D894C0BF66219F2C08E9D0E8AB21DE52 -MD = 81147CBA0647EEE78C4784874C0557621A138CA781FB6F5DCD0D9C609AF56F35 - -Len = 425 -Msg = E6F4D535970FD7C9E4DD8BBB2D4B4257E68065391F4DEED3B4F7A7E4FD9E61C3D77394C673571F1AA4640D91AE3318DB62D77F237B80 -MD = 3CA2E430212DD6198BF40427401CDF9D822E27EBAC3D7F54DA3F408C66F6880F - -Len = 426 -Msg = AD7CF7E15D97E0AEE75B907BCB48C30ADA54CC6C9F1B3371C7AFC74E176E6A07B1D8624B135102E395AD98A31921EA81F121CBC85E80 -MD = 800F328DE88FCDC3357E76F8ADA88680A77F6C63A3095BE8E3244D4F9987C3C3 - -Len = 427 -Msg = A9154D621C9B4BFE856394C8C47D5204EF218C54668713568F5C30BFA5980B24B63B4759EF05C16F5E4948BF91BEA979FF990A9EB520 -MD = A5671913BAA4B7ABE2468464D46B65E8ABE0E99817686F4A01C4BE38DAD4FC63 - -Len = 428 -Msg = C020B6643B128F27BF4E654D131E6C41669FD6F5941BBE0102053FB0C7CE405574D44AFA98D9E9A41EEDC1B6E21FECFDBCAF89EE50F0 -MD = C0B3231031B7F25D8E7EF58BBF604F9DE5A9228A99F868083D4160155FE61078 - -Len = 429 -Msg = 3D26CDFCE6E89B4D1A4DB097BFFA4FE505DCB18D0C191836F3978CE1685F7E7FC59F89D71FA443F0EB5A29092628B5ED778EA9D8E280 -MD = 84C6F63BC7D4A9E79DAC9313CEDEFC70E88AC301379C2F6B5A3150A6059F648B - -Len = 430 -Msg = 0BB08EA725002AE244064B3560D147027CED860FC32F289E08F5BB3E33DF133D2AD6962B8DB6BE7E050511D0743B66B5D2238B66DA6C -MD = 1A6987604BD092BBC246D7BD4092B4D83F3E44DF7BB750AC93A324852F035273 - -Len = 431 -Msg = 49FF7A3964CBB260C1A624EA3423BE62256253D1128B81E75C3E277B419C0FEDDE0CD4DBB5DF0DBAD5F16ADAFCFE09F2E642F5117DFC -MD = 1019395EF9C2F0A2513367791AADA90C3E4627B90BF9A9FC55817C979ED953CF - -Len = 432 -Msg = 0DC45181337CA32A8222FE7A3BF42FC9F89744259CFF653504D6051FE84B1A7FFD20CB47D4696CE212A686BB9BE9A8AB1C697B6D6A33 -MD = 5B6D7EDA559574FAE882E6266F4C2BE362133E44B5A947ECB6E75DB9FC8567E0 - -Len = 433 -Msg = C9E5FE547A3E2A4F070F2EDF8915A1AE232DB0A6974D8BDF88D15C7FC828AB82E919B061312404128457AA460B055330E74A72250B4180 -MD = A525C358AFF2A3A78A79D28D118A9E709A7B018ABE9150ED468195BD9DF4611A - -Len = 434 -Msg = ECDFA7350DD9A1C79FC41FAD4276264510A4F53748BF58BD655D0E041D68D81A839D9D9126753759FB2C2EC92DC690759DB8972EB2EFC0 -MD = 962F2C202C8740A0AC7838EF0222CD4284862A31A165F2F46F15A943BDB1A1AE - -Len = 435 -Msg = 60E9D7F0EAD1F704D626ADD35B269BC6BA9FA723D21D3FFD07BFF7BC2A7F253427C669468413D50DE4E087E6DFB40D3394180F4D885AC0 -MD = 0DBAF1BBA4248F3F0FF56362F9356284495B7AC6421238B574C18AE6169CD72A - -Len = 436 -Msg = 50D69429B80F785AFD10DC3C47AFCA11D66BA16F591AF56DBF5D283C427FAE7544D06A88F4F2DDC020A90E39231019364963C9D0271680 -MD = 781EF1BDDCC55FE63081619808F447F4EF3EB4B50AB35B593CE5C4D53586BC5D - -Len = 437 -Msg = E3D2906D5DCDEC5910F6C1B43BA414C0F6D8FFD992C2CF76B082AF565DEF8C00348739AEABE24879B1E49C50ED9CC281E25E47E0ED8460 -MD = 5DAE96144863093D0F6131289E4984436C5EFA15EC9313ABE8C1ADF46EC48472 - -Len = 438 -Msg = 352FC252E3EEE275D29AF0C2F5803C762259249E8BCBF9F293BFEAD094328454275D817F98F302F3E899A406C8D39211D0BFB7F36B80E0 -MD = 7CE3ABC8F27AB2091EC633659F0609482754BD55A5B7889631A39A7497D337F7 - -Len = 439 -Msg = 6AFF359906DD15357A5262CEB17DD58FF51B74DCF55FF951260CF6A419282752E13B7CA0798612E3E1094202603A2E331792350FD4A10E -MD = 672A6B2C69C74BEFA327F1EAB7056D09C56E49EDBE366D677DDA4C224135B0C1 - -Len = 440 -Msg = DE286BA4206E8B005714F80FB1CDFAEBDE91D29F84603E4A3EBC04686F99A46C9E880B96C574825582E8812A26E5A857FFC6579F63742F -MD = 86F87E75C87F9BE39E4AA6D0C5A37A5964D6FFDC462525C0642C9DB010DE38EE - -Len = 441 -Msg = 5C0DAFD24AC5712E9772017732C245E30BA569E247F82AFE4D05305375141482A8778D8C5F0D6C5B27BAB687568C04CC1D883466549CEB00 -MD = A2FD6FC457BAE3DB51EAEA8D6BD71D2D9F69294C8AC6B81153F1486C90EC8838 - -Len = 442 -Msg = 70CB8949582A95F73E1C00831431E1A7AA4372FDAA3DE4DD66B554539E8003DC6638A292E3C07BC09AD007590670D9DB9995F76CC6044100 -MD = 65D645F08AFDCEA5B216796AA7F54F5743C9FA32C89AB0595230FAAC7330BC06 - -Len = 443 -Msg = F1724864E3A8C9EF8F9FFF07224B295ACD1DF21D5CD318F0C8484642BECB45DC9FAE4E18459451DBE7C94524165BB323A363AEB34F12AE00 -MD = D7155BDB40B8BFF6FCF5597D8D4D0FEDCE607728654705004C2CA97C456BBEAE - -Len = 444 -Msg = A5E2F570FF98F95601BCB7EBB0CE9D22FD5A9A0727F10594DAAE511395FE8D48472159B20EA94B81414CA50363A716EE0130881FA81DBC70 -MD = C3A7C802AC1124C89FA3FA2E172E3CE7C252BCFA92EE159CA32AE444089F9A1F - -Len = 445 -Msg = 59C8DFC6BFFF8D1FC4ED4B362A0C73D1E2C47CE11FF4CFC3FAF74B69BDE0D70A7D44C91F21324E93A0562DD088351AF94B97C4CAD3D38D10 -MD = 11EDADBF244ECA9D625AF2F5BCA0B2EEA543B47CFBDFBD933642F51671A6F177 - -Len = 446 -Msg = 456D25084E73FD7F8B4E9E0C5A28A3DF6BF72A95CFF996645C0D6989B7C36DAA989F6D570578838D276366101DECE16C188E2AB0D1CBB020 -MD = E25B69275BCCEA86B76B0CCAC9531921C5C190CD717AD578174C74DEF1A94185 - -Len = 447 -Msg = F6203A102927E1F775EE10391B2370C4133EA999EF76E822FB47B2C47372FC5A0B2F61C467FDA567621DE7FCD29559C8B479AFFEC131572A -MD = C036391518CE7A26AF5C2274128824030B3FDAC33BFD76AF4E2B6A613314B1EE - -Len = 448 -Msg = EEBCC18057252CBF3F9C070F1A73213356D5D4BC19AC2A411EC8CDEEE7A571E2E20EAF61FD0C33A0FFEB297DDB77A97F0A415347DB66BCAF -MD = 959FE007B57C2947C36D1D66CC0808D80DB7DF45D68A34852B70D2DDA192C25C - -Len = 449 -Msg = 1251A40134EAF29B0FCBBA4E9712AD63E95DF1473C561127B1BE2B64375804F7D54C442B0C89100E66BCFEB906013437E7EC5885C197756580 -MD = 841D93CE5B5217F0EB7C5402D5DD41804363649C55277B6C7D8E53E5013AF89C - -Len = 450 -Msg = 71DC616856F90F79E04F31F16DFFAAE002EDC5725CA3FA59D2A468F69587D80CD90D1B488F86F481B4A00B447B26AD425E7AC7AD4D09774740 -MD = A3DDA8C5D90D0C90CC6F51593418C2DEBF8232BF5F85B8E635C30E8D9860CFB0 - -Len = 451 -Msg = 57AE1BF18725675EE13EC67FA5C4B6EC1911CE82F73C00F4BAD877D778EF22FE6EA93224262015A5DFCACAE3087807FF8895B72B5C530A3640 -MD = B77EF3FD6E74FA981E79BD0BD43AD4AD5E63D658BE44CC1BB070A155176C3865 - -Len = 452 -Msg = 841AAE4092D3C3ECEAB075CB9EE06EA07AEEADD236767B1595FC7510888A87C4747C3CF4AC68E5093E069423CF98B767EA4098886E1CD64D80 -MD = D5AA12506DD78EA97B395C40F5752087E4D1AF5BA7C3AA907B599A14FAE21DAC - -Len = 453 -Msg = 5D6A069F7980F35DB923E7D3DE2835F8878630BBC8751670EBA733FBBF614EBE3E0B03E860334E56499E43BEF8D6AC1C6C9C1588B1A56FAF00 -MD = 560E08409199E8A76CF899754CFF09C09355E48E09AF1121DCDE713653E2E813 - -Len = 454 -Msg = D2BC7F70B8ED9853C98C2E3017F97E8B1643C10959227D3D0D334A938F12C53EB3C1371608732A50CD5614768F804B98C9E587858A469B7DF8 -MD = 2BEE6176C0FF0ECC3F590A8B2F0ADC477440B0D7774FB25CE3C93A0CBF9F2850 - -Len = 455 -Msg = 55B1386C80FBECC7B54207EEAEF70069B1836378558309973FE2836322BEFD420AAAD73E399D1BCA063A590C3A82DF8708B1457B61A2C80352 -MD = A38B9B0E882EAC9E225D36A7C218094FA924D539FBE236BECAC62DD0F6B9D6B9 - -Len = 456 -Msg = 416B5CDC9FE951BD361BD7ABFC120A5054758EBA88FDD68FD84E39D3B09AC25497D36B43CBE7B85A6A3CEBDA8DB4E5549C3EE51BB6FCB6AC1E -MD = 1A93567EEBC41CC44D9346CDE646005D3E82DE8EEEB131E9C1F6D1E4AFD260F7 - -Len = 457 -Msg = 9F15C32E77E8DDCDF9576D2A17AAFADB77A66A35B0CB244C6F6079A3F033B2B42AE723DA59302984BBCC7D25EC57714F79C7316C81762EE98F00 -MD = 6FEF82CE035259721B2BD902B6E1EE2ABF49369532C98AFA422DF1114232B598 - -Len = 458 -Msg = 0C7D0C80FC9D6F36EA9F87C248D503A29761221BB58AF67327DC82CDB25883B5251D3F7F148F5EE32EC47AC70498CA7C6A2EE82B18918B381E00 -MD = CB6ED2BEF590979CDD64DB0FF82E9DE9CA10E92E9EF0CC5CB37FFD19EB515AAA - -Len = 459 -Msg = 1A057422EDB7E08FCD04AD53DFD7A8C123647A1032F5025DBC7C22916250FCACDF1B2B5DD0CE295EB5F424F541FF55BF6A8D777A571C0B508120 -MD = DCE1BBD5314DAB485ED59355F385FDA72E43D347A025E5580F06DF3FBDB438E8 - -Len = 460 -Msg = AC3EACDE274757E1AD019FC3B68250DFB627414EEDE1FEB4A4A313F50BCF18F84EE1466DE13E5AA62E72D8C28E5365873F36C3DF581A7BBACAE0 -MD = B82BF1D50686BCB59D8EA149098E6F9AF6A8D6311AD0A77674AC2E83B935ABC5 - -Len = 461 -Msg = FF8748F7DD2AB2ECDC95EDA2E0189D55F012748DD9EB63B3E77802E215431A96D5F59F3A4C9E70F023C2F91C218E308EC8DAF7463082C15F7080 -MD = 8C2F35F3832CFEE6BEEFE219AF37B0CE48401623ECE067A05B7AB5A4C93DB165 - -Len = 462 -Msg = DAAFF074211D1E547725C49C5709F0FC904D8944864B0350A1453DE2E56F188DD61534C4FAA59384436F6A6CD9702E1931E675DDB3BD6977B2F0 -MD = 169D531FD463975B048F444826C71A07D30023A5BEAFC3F337273CFC47C426B4 - -Len = 463 -Msg = D191A654280C7618570DE0EC2E3BC1578E9EC81AC48022FFEE1224AECF2A67E572DF39C343E7B1B06E56417FE83233FC6CD40ABF2602BE6FF640 -MD = 5051B4DFA8FD244633224C903CC24DB4E3B8D735EA536ABF2F6851DA4162E085 - -Len = 464 -Msg = 5C5FAF66F32E0F8311C32E8DA8284A4ED60891A5A7E50FB2956B3CBAA79FC66CA376460E100415401FC2B8518C64502F187EA14BFC9503759705 -MD = 549DB056B65EDF7D05BD66661B6D0A39B29B825BC80910F8BF7060A53BFF68E1 - -Len = 465 -Msg = 84D9ADC0C9097A66ECBA5BAC63BA2EAD6CC52D95BE23FAD7088234D87A3B6B6B956DCAAACCE94B98C9314C47F41BFB20D601B5F20CCEB86C4A3F00 -MD = AB3B7C4BC4E75D0DBC6B5DB91A266DB341C7E1062620BEB3BD5210B3B656000E - -Len = 466 -Msg = 2B90FDCE3B7D08812A3EE16E47ED849B134FB644A09ED63B274B09F38EFE46E5CB6C1E6F3F4C48CB23F8DF74D81E594C0C16100E1D446693AB9A00 -MD = C25924C45A75294A7446B1919A0AE686C6C3140D4ADEE18AB22A82AE6A0F3A66 - -Len = 467 -Msg = 883B4DDC623CBEE9365494693358E8DCF0E253B345C12A1270A4937730A04417B66D6E2A3A712560C6A07859EF56EEA6BE39CE1FAA2EA283FC8AE0 -MD = 41C02A159125164AC18AFFC85866381548EB0FD8596411DF88BDAF2704900CAF - -Len = 468 -Msg = E679CBB7F00A3902E805D1FE5DD015E7C4692ACD0BDC6BCE9B6C0CC31195E6D43DF50586F030691180543A54836687398FC51DFA57562980755140 -MD = 5CE5D584F9D13736650EA43FDFD1F61B67B6EFF50CDF32D1F598D45ACDA33D4C - -Len = 469 -Msg = 9E86F90FB087F12F7F9B7C6F526B5352EC2E6BA8A1E27202323BFACCD1A85D0DD6456AF7EB02DC01F9AC7800BAE5A55A011AC869EE8E9881714F80 -MD = 64DF7C16B2AECFC6A1F0377918524611F26A92E400D733CE154D18813B2B8EB4 - -Len = 470 -Msg = F24E07FEC11D49BE67326349510A57AB414774A1C56111B46D988B93AA29BB35E1C1BD47E80F8621C06E8A78D590B30181430BED12B27702168A24 -MD = C43466E31B383B6F278C0109390038C677108A86D7EAC115925893F859D76702 - -Len = 471 -Msg = 5E391FC9253D20EE80CDEC7B9259C01CE479BB4C97A76CABF722B6DB2F105EEAB8B91C5A4CEEBD05C39138A0E9398290CF6C9C13C62AF335CB0A60 -MD = B94976913C995EF666FCECE30385CAF1C91F1DDCFBBFE059C78D8F4559A09693 - -Len = 472 -Msg = 7167E1E02BE1A7CA69D788666F823AE4EEF39271F3C26A5CF7CEE05BCA83161066DC2E217B330DF821103799DF6D74810EED363ADC4AB99F36046A -MD = 794ABFD7EB622D5608C1C7B3F0A7821A71900B7172847FB0907AA2899972663E - -Len = 473 -Msg = 031321978E471EAB14C2EE6E3EACCF57B203A9662C2343CD764A41FFDAAB43D5830D29A15E568767627A116D5B8F47D2363959DC6BA7B0BFF674C600 -MD = 980F5456316F9C2398CC30DF9E8B9F277E340CCDB84E28370A1E9AEC11F83C5F - -Len = 474 -Msg = 8A07ADE176B3DA0C6CD3C8B40A3CC8C6F0C214C660B885A7486B4E447677FBE0C62284F00A816E3B083D1A4F614C44A5F04E98255B5BA15849767D40 -MD = F485E1FAF42FAA9FED74B782EE9EA9F16181CDC8DF02E98EB1AC11023739727E - -Len = 475 -Msg = 6C993A10F1EAC2D1BD759277077D7E3337822C428FC92EDFF444C58F106617BE61D23395F77AD6D0C43659CB29578E40BC0CCE1292C637236215BDA0 -MD = B236AAC9BB67A3C39A5BBA209A40866769ED777E233E74FF12A8A5A70AADB053 - -Len = 476 -Msg = BDB3EBAD9FFAFE0EE4E4AC7FDF0A970BE38E8A915684EA15628EF03DAD5454FC353D9EB27A93C428C7A7ACDAC6A4C51E7C35D845782BF6B9AA74B3C0 -MD = D68CA6ED623A4087055305DBD40B9794ADFB601D9E7369C8E0C5491741F58D58 - -Len = 477 -Msg = 04C9968BDC58062E20D602B6BBA6596280EA44E4DFB4F11842F847436C68722B8CF82F9AD7A474B1257A73D3D3CF8CC7CCBDAB52DBF2C43D16A82038 -MD = FEB160540D0848B7F81CE8C54359F39E8896368EE29A1519789E0687E2E8CB37 - -Len = 478 -Msg = 33FB9B9C1403340C038504CE1BA613725788CB765CE9D1A359F15BCDD2BB888A8D0FA370312048601E29536297738485160E1B0F3FEF938A285A2A74 -MD = 59466D7746504F569BB955B7CF519C93CD7A219358A7FABA96E28CFFD38C0CBE - -Len = 479 -Msg = A5B8774B9D957DB574F9D6BCD8B888E70E746F3EB240DFC9507B3983B8F2940B6625E36BEC3100C90FDB40182BEC5DD007276FD1281AB704792F8E16 -MD = FA4A748A6523391538D23C38E27B8498E00644EE970DA6E4080531F2FBFC4F45 - -Len = 480 -Msg = 2FDA311DBBA27321C5329510FAE6948F03210B76D43E7448D1689A063877B6D14C4F6D0EAA96C150051371F7DD8A4119F7DA5C483CC3E6723C01FB7D -MD = 9CE89958CBDDD8DCB22F66E8CBA5F6091A51953189464803BDC773ABC7FAA906 - -Len = 481 -Msg = 72B72F086513EABF4CC313157CF04745B40E5A77A04206103005FC3EB7A77D1EAF81B6F9020A1BE6BF7AD8C0C2011D8AA8F18EFC0620B893B50EA03000 -MD = D369FE5477DCD6571AC81BDAF47922F850A08FEAE36F6E3456D96F24F54BCC27 - -Len = 482 -Msg = 7FD02685386254BBDF27B52E5CAE59FC7BAEE3AFD2ECA52B912738354245804D87D0303B6060D076F2F12DE3FD19F475AEC0FD410CC14794731806F640 -MD = 3854EC626079B86716E0FC469AF8AF887FA71FD861B5546B2077AEAF6F792E9D - -Len = 483 -Msg = 02DAA8B12F35FDAFE5AB24B236E00245256500D472EFF4904E954DD4397B9F49DC142DCCBB1C2B3B4D3AFCA3FCEC4EFAF9854B3054901A53A180168320 -MD = A13D4883074BCBDE2F437CCEEBC31C83E0A8A1507E82D67BA5A7102CCEF5E81B - -Len = 484 -Msg = 260632DAC6BD8BC667679202D38C471383227D0715AFFABC37B6593544B3799C257DD168BE9B39576FCC583FFB5012629E60C44A51FD67BD432047E2E0 -MD = C7736CEEAEEB4CC77CA4DF011A749255BDD6B17D91847EA36302F2525FA07F05 - -Len = 485 -Msg = E61BF690723D45257C7B2004E8CD05D876C8D792D94680D95CA2CD869FFFFF5ACF9D0B162455AFB6F19B8C60C97B2D8CEFD4F74AAC7034204DFDD7FA68 -MD = 05DB4C18D4443FCD59527652D2C90A00E9EEE19BE74D9031239D9C82D8339495 - -Len = 486 -Msg = CF719DD9A1256446A6220A91F975E26934E33C1CEBF2D5DFD7FCED270B7073D3E96F2215BCF2844E4A25FD506567BABF039BA9F622F935410ED3F6BD58 -MD = 30DC5CE9E086C3F1786616CADEABCCBF3A3CC3C80A24981730F3815DD44EA92F - -Len = 487 -Msg = A6E86899DDE05DF1C81826047106FC6C258A4B6E347411CB66D28CA203DADC465548D1986C17E548465646CB95801A2EF4E6322EC13320FA551E2651C8 -MD = 8E32AEDACD4F231F482B591C2EAF1362AC9F06231A4B78B996C337384F554AC8 - -Len = 488 -Msg = 95D1474A5AAB5D2422ACA6E481187833A6212BD2D0F91451A67DD786DFC91DFED51B35F47E1DEB8A8AB4B9CB67B70179CC26F553AE7B569969CE151B8D -MD = 6DA733817DC826E8DA773BECA7338131AB7396417104EDA25970980C4EB2A15F - -Len = 489 -Msg = 1090FD6C2652EFB04DAD880724CB7414743FCFB4F93CF8312CB0B463CC27FE18BE9F745C499925F8FB4C43C11BE87D17EBA1359FD2F9E5CC2C40A84E8A80 -MD = 875DF7AFF1D829182B85D543B13AC857014F74F9FCC3A35C610B008FD5813F29 - -Len = 490 -Msg = 723BB81B01FAB9DAAF8F48B75557DBAA5103773C0DB24168BFA06886E6AFAC0EAF5A943669EFE84B0E3FF2BA6B681C4A16626D3A3DA58BF6D4781203E5C0 -MD = 574765B3FE24702A9FE4E61F34B42CF10649239BB7F5424AE9E36BB34B42C415 - -Len = 491 -Msg = 6091F9DFFCBD33C3852046578766797323339BEC2414C7DD044D60542C38DA9A5A6F8B385BB1BBCE2354CE744CED5FD673E7C9A4F50E6298994328A24CC0 -MD = 211EE1E7705F3F201D8223E1A4C2AEB9DE96F1234D6C8232058E8402BC31FA46 - -Len = 492 -Msg = F406EC84ABE14A45CA8F161EBE319125E83A19E4452AFD47DB3BE542501A405EA7DA19C317006C1FF9FF7E305C836881638A56C0427181809139C1D21900 -MD = 58BF33618B83D9BE5526B455E94F3DD579A18B083E2BA6D9E723911A5AA1B6A1 - -Len = 493 -Msg = 1F3DDCAD0F956BA1A34322731FFB1E58C46C66A0E9E5D60CC08E62FBEB55E63061894C13B334D2FC0B9B8C0293228F2A4BE36FA91B96054756264697EC28 -MD = CD71145C316B961C369C128D01B9500A72ED279988F22F64C270A308E00A15B6 - -Len = 494 -Msg = 3AFC3DBCB3FD9F4ED17D707AB37EE10590A8F3CE8F49E3C5A99077AA2BAD362F81D715B7132E62922A629FDD5A746C36FA97A7218146B55D559C8330497C -MD = 74F573C32A0B2256E72DFC700BFB6090B9993AAA94EAE8F5E7F848D4A14F2E7E - -Len = 495 -Msg = E4D811304A25E7AD7773FCAC8F028E60E4BAE3867EA81FD4B99FA53FC7991F34937D7278C146865F5BA10352CBF0FB8ACE858B42B0A7EFBAC0F62C6106F6 -MD = D85BA60F91878C0851240A4094D9EA2F64636BE5CDFF54B7AD5325D616899101 - -Len = 496 -Msg = C71BD7941F41DF044A2927A8FF55B4B467C33D089F0988AA253D294ADDBDB32530C0D4208B10D9959823F0C0F0734684006DF79F7099870F6BF53211A88D -MD = 66C9CDC8E8C6C9417D7FFBEF3B54B702EEE5F01A9BDA8DD4E28FE3335DEBBB51 - -Len = 497 -Msg = 061AE36ACF15BF6AAAE8A35A8196E13337FAAA50340FD70FF9F0CD02E53C3724E84C16EAFFFBC09D6EE55F3B344E6E37ACACF3B687B0F44CB06427A23B5400 -MD = 624D80B5D4F0655C266C848C6FBB5F8EE8B9BE12F1C9337368835AF867D0CA1F - -Len = 498 -Msg = 98B5605377B6A50833F0561B7AED5FEADB5411A7851EBFC8F9156C82714F6A6A07ECF372E4591F91EA3F25AADFD47A2220B55EE2838BA02ED8ECFAF5FA8280 -MD = 5D53111392EB1F712C1441B0AACCA92F1948B8836CC2AAD5C03F88750BF2E3E7 - -Len = 499 -Msg = F4CC640571758CB1BB7D83B8D4FDC9BC8AE34EDDE4867D3ED464593F939C646E9725553DFC9346CE8A966225A716FE520EDCCB6F7CC064930E0A8D89DA76E0 -MD = 827583CB39E7EC0A8CA323010C126CD072D45D247623497D4118D2AA65E194AB - -Len = 500 -Msg = 67674ED72E45F150D25F661EBB7F60F21A6AB07EC53EEAE794906E0137959B034F495A1DF0E71D9934C28944C4693AD7BACFA66236157E37746A6D165BCF70 -MD = 28F7584D74D55D54E3657DAB7F493C1B38CFBE43232B52C2D6375405C704B774 - -Len = 501 -Msg = 19513D84D7B9FC5D5C1C6E57404888C6D201B6D6D054D346EE000933FA7467E0E4A6AF3A065498B4055EA1AFFC9EF805C4D7161C58A9EADD68049B9FCDAC88 -MD = B5D8321A74D122A45EFA3D102DA71320A8976F21392BECD207D80EE30B415F79 - -Len = 502 -Msg = A8D213B9586C9E81AF32CCB8E70E1E76FCE9EBC2FACF250F4DD0D826912932A3045B0BE6DA7839361FBDD8746B4855D08E99DD94B7196A77538269EC06E370 -MD = B4C57AED67C3C2DC7163899302FBAD24A25642902A4D44D00B0685AF2C7469FE - -Len = 503 -Msg = A1D82877A8B3C98D68FD9937CFDA320688798C2BFBAB2D55C078D853E3052D17F349BCE2F875756B442D26B54C13E119C0FB96C5DEA16A05208A53FCBFF950 -MD = 22A4F749EBEF42960F87319C585E6CEF04C8E9DBE84747133AB8583200AB5A82 - -Len = 504 -Msg = F57C64006D9EA761892E145C99DF1B24640883DA79D9ED5262859DCDA8C3C32E05B03D984F1AB4A230242AB6B78D368DC5AAA1E6D3498D53371E84B0C1D4BA -MD = 24AB37A93674CCB1CEEC9E5681EFC8BDF9FCC7721CF1CAC175E0B20E461575B8 - -Len = 505 -Msg = 8473DC5382DE32957E3A15CA3D791C67D20CF9EFBE3E46407DCA5D02635AC86D2E0B22C76D7D080D362E82758914CC0AE2B89BD35F71D84492D9430742789C80 -MD = 2AD97A5C7B0144C66797421450BC16CBE6BCF56C062C11256B3AF88B77770725 - -Len = 506 -Msg = B9E3E2755ED1215381B24557EE14F8CD2687A071AEB3C74F421CFEA3CFF8A6EA0D4BDA2AD4BD8243CBA72B481CBD526E1EFA1D9FD432B987E81265824429BAC0 -MD = B5127C8310CDB4E0ACB33E9408B891F52D00B0A1E639A6BED3C676EF3F0BCD44 - -Len = 507 -Msg = E8332535E9A2052467A10205C87000BFC6A68D73962E69E4E56F10BC79C633C52F4D0074D6077595B660072E10740DFA66BC1320469A3196E021E1327CC03AE0 -MD = 60F97A108464BDAB44FD7CC3E5BC80BC7289A07ECAE2B81D36DB8C41E3F6DA4B - -Len = 508 -Msg = 6B078FB58DCF9A52EB84BE6EEB7CA87DF711160DB96D1FEE6A289A299844DEADC99BA30FFDB77FFBE36B62DA8116D59512DB3813ECAE09459ECDC5599343A8A0 -MD = 6F3F8EC308FF8991AA4E2542D15D06D6D4201481CFBEE9B5B3504EE32EAD72EB - -Len = 509 -Msg = 80EE82DECF5B9FD94A7A8F9866ECD1925715DEF457A43DF01AA1196101A91E1706A31868305AC282FDB8018D19930A07E229BDF92835BF544C585CA957031538 -MD = BABC8BD0845DBB44CF04981D2FA77422AF00613D57CD1CB3A68DFBD32ED63EEB - -Len = 510 -Msg = 15E0FEEB0F7010B047634E909D4646454FA1F06D7DAE63E831191CAD21604FEC81FF4FE69E540169A752C82CAC9C167E15C431F29AAF752B57DE63BEB0319580 -MD = 43040DD3462A8617B231C5419321A317733ACC6E0F7E7D5FA929CCBD3EB8B6E6 - -Len = 511 -Msg = 538989EEFA891A2F2FDB195E6C75A36FFD9010B0D58419CB209EA58178284E38491A0A8549EECC27ED31C02E24DF4321DAE90E6867DA851898867D2993997300 -MD = F86279C0A027B729460979D4EDB49601BD1315C3B0DD7B0D691F73FB59CDC2F0 - -Len = 512 -Msg = E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7 -MD = 574271CD13959E8DDEAE5BFBDB02A3FDF54F2BABFD0CBEB893082A974957D0C1 - -Len = 513 -Msg = 559EE28FF19F91DFB5F12A4EA7823F7C6F6AFCFE31FAEFE1DBC810521C59CCAB4CE747B6A37E3E700C4DB3B243D2210D59FA18CCF344BDA10089ECAFBD2046D700 -MD = 827D56C85DD65862A97613AE8172F2CFCABC938CA4EABF346F4EE380527D3F57 - -Len = 514 -Msg = 3369763B630EC3D1F8DF47DA9804FB6AEE5831D5B5EED07A3B5FD8DE1B96F721825AAA698164F58CF1F3DAF8E7790947E8698E718CFE1808D571F4855BA312AC00 -MD = 2BB8A1E3E55A021A16A9DAD2A13D4CD0AA44A08487F8C97067F3C7E6ABFB1ADB - -Len = 515 -Msg = 6CB17B2EA081DCB1B2AE30BD5DD5A1A9F845DAEADA0C0F76CDB3E45DD92F1516FEB193AE54E85678C16DDC174C1546985520E54F45CB1E03AF7C27A9A89FD16340 -MD = 316F44A0423C1B5A92F34D588B7F4AF4B0C96EDB7F1CAFE38A9129F8E9E74F95 - -Len = 516 -Msg = 2BFCEBE7E89132B9A809595E5F224712B4DC34164B8AAB486490291353D176C2CDBC967C325887288CCB7BFEBA29A4778B13FE78C97E2707EB5501096B700DE890 -MD = 0A14C1DBF40EAE287D861710B747C93259DC9B875A454295D347FC12D52860BE - -Len = 517 -Msg = A3E70F2D2137770818805804DDDFAF6C5D758AA50101B255B9731EDCDDCE604F9A336B4ECA8370FF56B96E8C2379E26B94BE3B5D659CA4550AC2CD50F25EFA26E8 -MD = 0A86050A0F2495697EED5C0122FBADB946282EBD75414A3C9175AFFA79A330FB - -Len = 518 -Msg = 2F1F2DAADA4BEF1649F2E6DCF226CC626183FA45FB9F8D561F5E12B96A7888A16D78DD177B0CD8B153E02768AA408A1166630F450394FEBF8B76CC08F6B545B0D4 -MD = AF2292002173557C8969CAEACA470513CA34EDDEE11FA6B14049A30CF9188E62 - -Len = 519 -Msg = 010348951C308EA6CD8B9E0D3D70AC0469AD4B1A64B69873690041177D4F25FAD90BC94A719466079400AB2BFFE4A45AFA49DDAEE6962E3EFC615A4D6EF82C5966 -MD = 15334166CF20D1506B75ADFB38D5075D03E5506254A62AAFA2F92ACD7BBC2803 - -Len = 520 -Msg = 16E8B3D8F988E9BB04DE9C96F2627811C973CE4A5296B4772CA3EEFEB80A652BDF21F50DF79F32DB23F9F73D393B2D57D9A0297F7A2F2E79CFDA39FA393DF1AC00 -MD = 1947E901FA59EA789845775F2A4DB9B4848F8A776073D53D84CBD5D927A96BFF - -Len = 521 -Msg = BE442CCD00200140AB3E88FC0398AD7DE7E4EE191A3261064D53922ED599DCC855AF4FC7C8910FF871046F486FBFA66080A8920EB2AB4AAC2AF2E28B0F7AD3499D00 -MD = 17EC135A9EA7979C4530CBF8362B01E7BD433368D805D2F0D15694231E113358 - -Len = 522 -Msg = E3A99A6DF6DD46AC6426E66F8F3C0D5E106D2CDEEFD318D2B156D63D83F2ED89C6620A05D95EA0058F34DEB935797E33288626D18083449AA9C8A2A2AAFF573383C0 -MD = 4AD6E1D4BB4A5E97984220AA614F76466A10CC9FF73E74BB90FF6477D6CDA868 - -Len = 523 -Msg = 2F7AA4AC44632140E9225BA95CB9BB4DA26AD78222BB746D1D98D8B57FFCD00C2D5AC271487FEE2CC27A0D9C62F3B577DF3F8B88239E2BFF2934FCC2A047AEE5B9C0 -MD = B4B5DEF8F1DC85E67BE2DC03F73DB473E55A487C204ED9D9177DE0E7C58B30A6 - -Len = 524 -Msg = A1EC099A79B5A35A4223D4C881F0CB11414BC90FD2FFB4667F1DEA99858AFD889D6D1655A19E46FD629C6AB50A7B4C41C5B4E23C6ADE46CD1312720571A268E39B60 -MD = 34CC4B87943A653E56B386F25C26E993E94B7DEFE98F2F86B1222F3B2A5B62BB - -Len = 525 -Msg = 8E5973C1A658519BFA2D40C26CC3E73314A14019F7D8A2E66C1DC510547250BFFA12299557902CA95BA718CB6ADF2ED8D290ED7F390FFE44D11AE6E3D9C62400CA60 -MD = 5D77BFA332981DA6030E5E420308BB96B06C317AEA322B4F55463788DAC1B130 - -Len = 526 -Msg = E00A470BA681EFA0F966BE976F98C42036B34A116154E4B4E10A6CD5D14F001673D95C1E0FEAE1C0A5A9F80F8A1608AC3C9A908EB4CACFF8A5C8BFDF699A4312FD24 -MD = 3B78CD555BBC070D5B4F46615E619E8A04F1194951973BB450600590A53C861D - -Len = 527 -Msg = D923883110D5D4F4614C59A9189185ECCA7C5B99319022617382CE2C2C5E8699220F0B0CD0A43B474759BDF463DA0C5165D661DC838FC24D7C4341EBE9E190EC5AC6 -MD = CE75D4EF4D9E8BBF7CE3D68DA4F2DBAB707F819A12728474E536F67D7D5EB0FF - -Len = 528 -Msg = FC424EEB27C18A11C01F39C555D8B78A805B88DBA1DC2A42ED5E2C0EC737FF68B2456D80EB85E11714FA3F8EABFB906D3C17964CB4F5E76B29C1765DB03D91BE37FC -MD = 0C1B8C1AF237E9C5501B50316A80865AAC08A34ACF4F8BEDD4A2D6E7B7BCBB85 - -Len = 529 -Msg = CF1D9DA31D5673D04A9514C9C4940489A3A7D5F92F163B653F8325C1E63947E7E2AAFA97F18F61FDEBED5168FB69BEA9749C48DF8529A2D371FBB9B62A52D7CDC19400 -MD = 9F74A41A930D33D350C9AF8755986877A17A256D7064100A139544EA1B1AED8C - -Len = 530 -Msg = DE0C2162926F18E7B7F04C967E4EABD01CCF78F36645A732782C638C8B67974FFB9309E12FDD140CD880360509B2112EB2C03BEC4FD03C2F658FDE72E524C861CFD400 -MD = 0E610DEB20AF76DC3E670A6B0F01EE3F9C7461B70D3F63B15B11FDF0E3489D35 - -Len = 531 -Msg = A05C7165CB93CC0F09CC1D9D1118E3CAA9AEC51EBD44D10897D0771FC5302AE55176FDDEA05FB01EE4956BA342ADC7BDD6A50D74505828D87EA49EC62273E32F976CE0 -MD = 6B79F993A974F34693F9E4BB81287713FE4DE0F57F28E821ADEC4491F058054E - -Len = 532 -Msg = 728AAD14235696C8974370D9238E80BD16A93D050C865DB08FA06C5E4D12EAF1415D59DA4F7CA16981481B10743AFDAC95BC8292CD837DE24692AB5E70488016140B30 -MD = BBCFE1318FCCF6532BF81828516E3ED1EDB77E90795C712B9952B9E531E5BD98 - -Len = 533 -Msg = 59E0177EAB8DD3EF68BDDF879D196D651E501F878C364B363BFE1F291546F6A9286161C569C7078C97DB9BA14011807B7FCF671E692CAF601FFB4C76F8E8289A280C70 -MD = F6D2C7B1939DCA8D25C0AB89811DDDF2E5C6650EC336254A9653B79F1E40E960 - -Len = 534 -Msg = 2557EC19609AC2F7B3F80AAFCAD251AE9406E68638C6F34753BF051A89D19CFE4B13D03B4D4966EDF8565D18EED198E295209C93308CF7E83AA41DE4A1074D19F6D8B8 -MD = FA5E7E0EE763C5E568D4D8F17C90C6E9FFCE5998EBCC3C436A4626ED2DC6F4B6 - -Len = 535 -Msg = 0C6CAE1F4A2400C0E320993AAC01CD5007B32E10ACA1690EFE071ED9CB980DBDBA2B08B90A01026D2B6781E189B05E394AD5950152040A4E10C97BCCAC7B2C1A0A83A0 -MD = 173AE87CC1ABBC1B62D6F36A045E55A6D2F70676D625150FE6F5ABE88415E152 - -Len = 536 -Msg = ABE3472B54E72734BDBA7D9158736464251C4F21B33FBBC92D7FAC9A35C4E3322FF01D2380CBAA4EF8FB07D21A2128B7B9F5B6D9F34E13F39C7FFC2E72E47888599BA5 -MD = C4315666C71FEA834D8FF27F025F5CC34F37C1AAE78604A4B08DAC45DECD42BE - -Len = 537 -Msg = 4470C0B4C5821BCF0B9EA25B6F7D90C9C50B063FF923CEF75638D73621B2F4F5B56D92DD720536357B000162DDF401FB5475C06C4C88F80C38EB8FDC8617F661037A3E80 -MD = C8AD8F956623A87D1547A881E01733FEE0000D81A064CDFE6937BECE1F2C5D38 - -Len = 538 -Msg = D138F1008FDE534C233CA94A79C14FF6B3BAF4B365FD8176A0A58170314BD70AAC14E58561E8A9C47163741365A31801F5F4B6E32AA8E3F4439890CD30AA97FDB0A6CA00 -MD = 6F43745C787A936798D0A8A98A553E1D7A7FC2AABFEF5897D0C9FDFDCB93CFCD - -Len = 539 -Msg = B4578CF28E7891C9CC1CC79D0F4807DA6A5C37441ABD483B77C65E502A318A86AEA5581020CFE9E9E6A230DD0A529AE90E84086209E16779CD3DC0753713F830532C96A0 -MD = B0D9E839F90C500EFF089EE65C52839B6758114E52543F937CE938F0184FC2B6 - -Len = 540 -Msg = E33A87CDDC83DF9E9DDA70693E20C31F13F7766F63BB97547B9676D9A6BC999DCC65EF9B486CEC34002A149E840C3D87864C90AA1489CB7FA9C4167E475CBA337E485A30 -MD = 4F13ED8BAFD0578498E16570B98C69E291043FBB3DE8FB150E016B23060735B2 - -Len = 541 -Msg = A1238AFE1839BBC600C8BA91C17BAE23E1146BBA2D76FDE1A9EF1FB7BDE3D2D9C7A3201E78F2800040ABF26D3606209C4D22FE53370DD03CC8B12ED95272A9A5E1557820 -MD = B6E7CB14D4D437429A15C236644199BE456B29864061BA5A50AD8DBD8CBB942A - -Len = 542 -Msg = 5489A48EBA7457530F8A2723352515FE794031E11CF5FA57128448F9709FA27CF20E3E379FF7D5724C0A55E3550656787EA45BDF7510F5216388320112AA692A8E33E704 -MD = A9FD31490F859F9EF2DBE9805112378D482CDAA7BAF607007B50DB82D82F8FA6 - -Len = 543 -Msg = 2EB78EF630423B07F50CD987F31EF94142905400E5259BCC235A51027B153318352CE56562436588F6E332570F96E873AB189C1DB6264E91FF991401720D25F31FD4343A -MD = E13E37C74C844D14DCDB293F91BC6153FBEF5F04E2026A40CB8E60A32C2E1925 - -Len = 544 -Msg = 36F9F0A65F2CA498D739B944D6EFF3DA5EBBA57E7D9C41598A2B0E4380F3CF4B479EC2348D015FFE6256273511154AFCF3B4B4BF09D6C4744FDD0F62D75079D440706B05 -MD = 5FF8734DB3F9977EEE9CF5E2CF725C57AF09926490C55ABD9D00A42E91A8C344 - -Len = 545 -Msg = 7FBFB37A08D050D584F6D58862373E1627DC81CD0F650A4980A783487FF3D3ECEC71909DACA59F13A47E2F7FEEA949A5D444587B5B9B483B5E5D25776047CD00237C619380 -MD = 3E0EE29D683A50BB7E8519DB1C669FED21CE1F0125A7F8CB5F975DCEB819B9C8 - -Len = 546 -Msg = 3BD3EC7D914EC6461AAC5412025903B049E48584325F81AC822B7091E992A36B3401C7349170F7647D46715F440C5FC40608FC97D01447B65898906F5C4E61088AA7626340 -MD = C4F38BBB71C0C68250FE09EFC09632AB1F2E2ED63CAE8AD109C73301AB6C867B - -Len = 547 -Msg = 2516B94FED3FA3C8C8892F0EC0AA8F74D9295904810095BF4F88ABEBF93896A8F0256496182B76A9A1D37DB18D154E31D07D9A87C38712549365DCEFD2291A46520856F1A0 -MD = B56A134E051FDCBBFCEE12088A085DA983185400C86FFF668A03F5F01D47FA3B - -Len = 548 -Msg = 763AA494184999EBBC09D59178B44E0F24102A737CC43C62FED6B5F6B175531C00859FFA1AF9FF292283078A26A602BE4C43DC3F54C806927C401B905CD0D73E6B1A853B70 -MD = D9BA627D95DD98CA19556AB027516C31ADD7D997CBE5E3BDF9D4AAE8C8D9FDCA - -Len = 549 -Msg = DFD617A8BA7BF6C2FD65A7D531EBF0DFF617926830D0FF1E146A03F103422648C645907F47ACCD66FB6E510CD3F69AE9D43A69EBDF6B32736F5C1394B2FC5D445EB3E72EF8 -MD = 19FD0558663D86CAA3174328CCECEE1B528280C3F914EE56CB375B03DC665D0A - -Len = 550 -Msg = D2321825C805E9BC50BB8138ED2102FEBBF4A48D39C468C576B055EBC4008FF8317E544BF78AF36E021A5E1809F5032D84C7769EAC4A59D346B64957D7B715AEDA82089C44 -MD = 5691B6DDC859D4F7D9EE6608856CE01DA3BEFCB11DDB7424509AF449B12AE587 - -Len = 551 -Msg = 3D97DE13463FE4FBBCA43FA797A7594614DE028CFCB477033EEA9AA00FC7C7CC085B130639CF3AD64401EC1ADE15C7398BF115F4B33ACC6B9F2F20CCA6DB7F77828CCD633A -MD = 26DE72D25CF479225E41F66306AFAC044A4E47F4DE3C76D6C7B20E4865CA808F - -Len = 552 -Msg = ABC87763CAE1CA98BD8C5B82CABA54AC83286F87E9610128AE4DE68AC95DF5E329C360717BD349F26B872528492CA7C94C2C1E1EF56B74DBB65C2AC351981FDB31D06C77A4 -MD = 1E141A171CAB085252EA4C2F8F1F1087DD85A75AB3ACD0B3C28EAA5735D349AF - -Len = 553 -Msg = 37603DA843EF88DB2515EEF27405CC61410C4E2DA79B6C8606FE93343EFECF6180729350408F382031F9322EAEDDB85899997DFF332D029FA2EEAE0050B2DCDD25198F0F7300 -MD = 202FD91237AAB35CFF1C79E6D049428204E3F0660280343A190E7F7DF8DD2EBE - -Len = 554 -Msg = 3248B698D97B6F9D9EF74359134F24A653A66A989FB1E6DEA74E4D13C1843EBCBE5B8AF1629C181A095E1B3F4C2F1B84552F006ADE5765BF3EBB8C1F6FC2E6D234E14B193AC0 -MD = 63A1862285375946189BD698D3F4F2C368AD7BAED59E31D7D7CA0ED4147EE8C4 - -Len = 555 -Msg = 2680D25D09089F163BE9F8D1F5A08926B71FE579BD82A31CF3EB1039BDD5244D0D9F14649843AB97547F65B443C7F2337914C8A2395EAE93F0BF1C43D8C01EBFD58C955741C0 -MD = 58683F565E58B3C120F6FDC557104FF3FB092C5F15089C7021C22266246FB39D - -Len = 556 -Msg = EB31208EC2EB7695CA12D5DA41D70D247374D6877A4843E63A8812EF8518C0C2E0E224DDA708B88B9F958219E74CB5A7ADE195FAC3690DEBE41C0928C5DB54F8ECC6FF3248B0 -MD = 559744F0AECBDB5A411A58BA28A3BC4178BA030F2CA6E289921D00EEBB93029E - -Len = 557 -Msg = 757324619B2F5A81EF4126DA2B22E556FBBCAEB03D2D71AC77F8F08792DD8576960293EF62ADE524CDA00FAAD2D0FF33C60C001B352C29AFCBF0DD995B5085E3833B55C0C6A0 -MD = 72D118B741FCA015E5FACA5FFA80F64760F5661E648234D2A542C3B8815C3327 - -Len = 558 -Msg = 3F7727465659B9BC8379A1BCE9EA8636F07135ACFD75AE2AB86D96691B7797C10170E6EFFB1636608C18EF065872BDD8938567BD9E76F5ABEC4052C07221402C93401486C6B0 -MD = C2A98025F0D7A8EC1DBF20D0874FEC67721A3404C65FA93C773AB9B998727F38 - -Len = 559 -Msg = D02655C3BFB9521DA291885C9E448526B25864570ED209E33CE2B65BA737A717022A95CE93A719166B0D8BC9EF7E4AFF721DFB1C1730B70D9ACBA858E4A4A9359152921EC73A -MD = 75BC09581937F9E2D49BCBC38CC8B17B8DA1E922E29EC39FB59E6AB5F6C91A88 - -Len = 560 -Msg = 94F7CA8E1A54234C6D53CC734BB3D3150C8BA8C5F880EAB8D25FED13793A9701EBE320509286FD8E422E931D99C98DA4DF7E70AE447BAB8CFFD92382D8A77760A259FC4FBD72 -MD = EF763F22F359DD7F5B3FE6A745C423D6B641EC07BA5235232A0701510F74426E - -Len = 561 -Msg = CEFFB8673C1722594E925B0B9E7CFFE54861AFDAD2AE51528A507A25F26E19498EE305566788A05CDE16FD8F6C92F1049047F89CA1D46FEC489C745A12C79633F13C927DAE7380 -MD = 72AC517DF6D6AD825111ED7183D07D5F50B8ED13B36FA7DDB7AD31EAEAFA5C5E - -Len = 562 -Msg = 9C46E4954EB8286850B9AF257EDA31286625F8E935137E6F582B2930F2167BA25DA85C2C4949100CB391B214A097615CB8A9E8611A9D9F94D54ABC3865E1F28529C4FDCB16C900 -MD = 91F377193C2190A543C1E26D70BD9F095F4EC3649271A26B7BE96D3F7FF9DCFB - -Len = 563 -Msg = A56641438A5264B3DEA5635B9C9F308CC1DB42C882ACA9B6839C08618BA6E2D771CED4450698E2AB0C1C489BD69EB1D0A79F90A2B9BCC28230CF151F827A4D6762342869AB4D00 -MD = 98E2C8DDFF8ADC3639F6F81017F7B12A66294E89158447EA9A1A5EEB905C1B38 - -Len = 564 -Msg = C371B57FA3CBE85892E163BFA45D95F803686466FAB99259458ECC7FB465D25F2EF17189DAF7643468822AAE499FE5227986908032B68A8AFC299CB70339722652E6B8D7B75090 -MD = AAF0B14552C47969C88970C723E42F8E46F641946C8398EA9D6EDC92016EFA68 - -Len = 565 -Msg = 114EAE7CE0CF58F7FB56676C4936BD7B018CEA5C1B19F08AC785CF9CA1F034607BD30B574925B3DB0BCA5CC9C0F3D4909064CE15B637D38691FBA467438B51F0E02D723E45D3C0 -MD = 08098B1DCABAF55577394B7B3472787EAE2D8B8AE22633814CBCD5EADF8DC00E - -Len = 566 -Msg = BFD7C3C1B5D442B4AA3DDC298B95FEFF68212C64233AAC2319C630B2E4916911C0CC01399D3FE2F699A70403652B3FCB77601E0BEBB9832B50E33ECAF033E4F7AF9565C1B25874 -MD = 425F7BD36A0656BC59850F4A06B1640DAA5F3E18E13B1CD2D6E34AE52DC61740 - -Len = 567 -Msg = 02462D5F711B30301F0A39E0397651EF0FC444A701D8177A1E76BC77ADF9C461036EBDF678DD10C9C9F365457A07F885BE5660B4768D551281DB67EAA5283FB383A8702E637D40 -MD = 177FD5F0870DB4EFB6521F6C0E3C886B84CA9222374A86BAA5CA376B174ACB8A - -Len = 568 -Msg = 13BD2811F6ED2B6F04FF3895ACEED7BEF8DCD45EB121791BC194A0F806206BFFC3B9281C2B308B1A729CE008119DD3066E9378ACDCC50A98A82E20738800B6CDDBE5FE9694AD6D -MD = 6A769F93F255B078FE73AFF68F0422A279939920E4690B4AFF0E433CFA3D3DF3 - -Len = 569 -Msg = 1AA7751BB1AB38921AA754162F00E8DA55DD9A5959FB1B316D6F622A6E7D27D6640D4B2D13FB70B30B87AF3D5AD06A1A7746AAD25979AFE91925D28E1B585ABAB56FFD6E41268880 -MD = 7ACA33C9C9A381C6C0FBCD34EBFF49001D7FB85CB6809E9A8CC9DC5D32B379EE - -Len = 570 -Msg = CC592E8F00C441202D834185DB8B5B9441E1AD1024573260393AF6D69269B6414D5E5C2BE374C9A9DAC4425693ABA78C729308AB3E7DA6CA43B91A717FF0FDEA4EAA7612F229C780 -MD = 766F86D8CA1BB2A0AEB4291F6A5AE3BD6A78D799FE86375CCB4799CFDDBA3A4A - -Len = 571 -Msg = 18057027D18CD129DFB5584F87C48D8ECE475A366F33C62736932F55CD9ADE656B6D7F27EC182DC565B5FC6E3E125D4A0C5904A3666CD79F611562755C66D87EE6038B10C1E44F80 -MD = C1C5B1FD6EA1ECDEE387842353EFB97F5907B6924443C3150D6A0A398DB4E1CD - -Len = 572 -Msg = B3C5D348DA8B5AA4932E196713FD43A200B5095207CCEBF0F2F347A1C565C1F709231D8D7B3AE4E11EA4A71BF10C75FBF075D5C88E846D24C607D93A4992111D7AB637ACE577A700 -MD = 600F5861FB4DBF8C5F00ED6D00D6F91A67249813A1C09A72723596123BFEFE17 - -Len = 573 -Msg = 77E244AAE547DA970AC2F73B0AFF4D870EDCCA2E0EE14B1F6F2A8702E4B482162B12F67BFCE1F087A7F240C9D0CC0706991E63800822B2F948BA553503AF630F4C182A1FDE676F60 -MD = B753EDA92638C9F5E84C11ECD7CF3A05FB7CB45D0CF3F235E372AB3DEC45DC1C - -Len = 574 -Msg = D34964352D3F10A58861BCFD9E492E30FB3FBCBD1090532A83590EC4B56A52B2E9AFA17E9C2B803143AE63915754D4887CF98C5B8BB8A48AC5535EF72B75CDA7612931E71D9E9E6C -MD = B9EB858ED6EDE4936F3A6F14FE5CF9739DE0E6EF86C58DBAF7A1939739B4BAF1 - -Len = 575 -Msg = 5610326DF88C0154A99B962BDAFDC56A0206232EB7C2B30C40469D8011AF8F176AEC5A416A992C71A9F94E03E4F7BA079E4AF5174B7B0CE06369156D45F9385384D07CA55D837D10 -MD = 3AA1DEBC67B92F4344BF255224F942DA8C1C792F2DC17CAA7BA4EA42DBF40E71 - -Len = 576 -Msg = 1EED9CBA179A009EC2EC5508773DD305477CA117E6D569E66B5F64C6BC64801CE25A8424CE4A26D575B8A6FB10EAD3FD1992EDDDEEC2EBE7150DC98F63ADC3237EF57B91397AA8A7 -MD = C06DD4261638C44AFCB186F0AF5DE20EA53AA63316FBB71728F874FF3DACEB0D - -Len = 577 -Msg = E2A6C7C31424B9B1E391EC72D45A0758A41B7794E6161FE1B4EEEB2E9F345B45DB8B64097D0D2C09E3C3C5380822E62426DC169E94808B6E6802D27C067CF3A03BD1B2AD2B89483300 -MD = 3E53D442D745C0721603B77C6CF54C98168B53C26C9339BAD1C0F835C0ECEF93 - -Len = 578 -Msg = BFC9C513134AA3E5813C125CCF279F33FB95A36C540274ECAC1EEB43189B2A1299F6F76F4F381E3D33576AA4BDDED13148314779C5A84AFC52CBBB8B42346466D3ED126F0D4C466400 -MD = 4A80D28E9837CC55EB36E6EBE3A54F22C004943E5CAD2AC671F8EBFD72D4652D - -Len = 579 -Msg = 2A8E0C4A157E09AC3A83F7131C30599B3C8C8CB8D1FCABC4E9B606E265275C0680843CFDF1DF70AC5BAFD472F6A3AAEA93E2E51DDE78192D1D5313A79754926115AFA58B68D39DECA0 -MD = 38A8F164C804E136D1B6EC36C4AA152D7C5DE922CD420977AE7958228DAB9EC3 - -Len = 580 -Msg = 7F08ADFA726E42B95752387BD6248128D4E52706344AC7290314D9814356A121CB1EC7D7B018F0DB15457FBEEDEA5E1A1CCF627B164DF5A341B6E9AB23D6C79BFD9359578669B9C000 -MD = 07A3E0E09AFAEE8E78162FE8EF8B6C41096015509E657EC65E00B3B54A5CF52D - -Len = 581 -Msg = D0885BFD63E133FFDBDDFBA5DDABE302CCB292AD79C6CF2C848485446178472C123001A6C06245B0E7725B6C278D556E9444A6624EE3A612C27A194C76CF8197B275EFDD3042FC8600 -MD = 546132EB430032E441440816D357F51F5DE1F8602F9503A3C3FAA4A49A9B0CBC - -Len = 582 -Msg = DF98AAD16AB9EFA536176798654E6394668F576C9D6DEF29B6085FA29C9878966EFBE223E5F56D5BB69E8B27AC9B23F4D89A856EBA58EC5D20C7EAE6E58102BDD58C57EF843EB5D798 -MD = F2577791605939059C721CEB0C6AE605A3237A8D389F6841532A088FF0F496AF - -Len = 583 -Msg = 9881E0C17927FB375634460158644EA6549E3F866FEB6923A99E3548108AA4E2420CB8C280991BAF535E28047EAE07832D543278459E21156F90B913C1FF926316CC813DF101007912 -MD = 1F27183B9DCBC6EE3846721EF46A449F47679A217452D6C60202F30E76510A6F - -Len = 584 -Msg = BA5B67B5EC3A3FFAE2C19DD8176A2EF75C0CD903725D45C9CB7009A900C0B0CA7A2967A95AE68269A6DBF8466C7B6844A1D608AC661F7EFF00538E323DB5F2C644B78B2D48DE1A08AA -MD = B5D84B1809E83B5E75AA53BDEE79E3A97F3FE3A7D3162EBD4908240FF69131D8 - -Len = 585 -Msg = F116DE7433D03DC10339E3661D06EBC8AD264DBACD05614B09119970AE3A85FA80D8DBB23403FE2874A967F66732C1711C455E6F299111F5B0FA378519D7F25CF945BCE7B8668203FB80 -MD = 5C0246E423C71B8B63F5D756D486991B9206CF66F147F542E190B02BB0CC8F0C - -Len = 586 -Msg = CF33DD0DD4CDDB006109E02BA6CC6ACE8EA839DE2FC68A3357C1758EA1E2775E05019F12F2CAC5C2EF594D4F1DC26DE2F9543FEBA34E9F0475508EF848D6BEB4C26C2417BF1CC1419300 -MD = 215733339DD6565634817902A9E674FD379A95FE6DF0D80E5E5F0C6313D7203A - -Len = 587 -Msg = E32A1614AB569B1E5A897DECCB8D55CAF82CDAE61D0EDF09BF1AF52163F1E63668C4AB8E8A0CAE4C82E0E187BF5260CB9D2112211EA7C12AD08758EB8AEAF3258BFA07081D3038ADB760 -MD = 3AD5CF7080D5D794C995FD808D1EF910F406A9E455A6728BE02F1A93407E94C3 - -Len = 588 -Msg = 870615E5FA42425D15D4DDB1920D99BA17844FCC6741BFDB1238B907B1071E241A1FE9D6122C40B640056786D516DB3C5495793EC6BB3309BB66D53D623FF4A28620E6613BD39B51EEA0 -MD = E2D22C55C332DC805CEA8A759E82D8640859C6D49CB2C6C50066786420EADD5A - -Len = 589 -Msg = 9B1FEFB7B55DE30D70525169271683A21320D0E01C38CD630A79F36B15D05CE96B622C586F48F4251C948546760EA88D470F5BCEA84CEDADE74A0FA68A001F68C6BB1EEF8BDB6630A400 -MD = 94567EDE0801E5500EB0228BBB9DD8DB7C6805258C507D0396CA32A6647C7BD2 - -Len = 590 -Msg = 6BD0B9A20EE65C9C4E2B5ED2662D01876E76FD98283317C7941A6107D40F06EC88F6A3B235E073F7963F9D3DFD178226C6AE1C67FE00C2266FD608697EDADF07AB4F6C0303E82FBEA000 -MD = 634F3E7962690CF4CFDBD5083B8F2886EF9D340F6EB18CCFF71EF14A32412B7C - -Len = 591 -Msg = 43DDEFA4D3868E5C6671FF04BE2969549E9728D876A800879D84363EA77121371DCE33832E6092945E44CD5D8EB33ECE8F459342BD47A0A1D0BF165028119EECF77C154194E9E41106EA -MD = D338CA19B2DCCB0D96ACFA78121B771E26D8413D9DFA9CFB9706B55F1295A359 - -Len = 592 -Msg = 0EFA26AC5673167DCACAB860932ED612F65FF49B80FA9AE65465E5542CB62075DF1C5AE54FBA4DB807BE25B070033EFA223BDD5B1D3C94C6E1909C02B620D4B1B3A6C9FED24D70749604 -MD = CAD7ABB5BBA5905B5181DD2DBC4E68CFD01BA8659F21C8290D3F835C1A68BBE5 - -Len = 593 -Msg = 89ED3A52A979EEC4BBD0191089043B7DD1475DB503E1B9CBBED58C46D81C9493F15A9832411C0B5455696B1142945CA022B4845299ED17B3EB276DB83DA3953433BEB873DFC1152DC59A00 -MD = 600717428818CADC978EEF42EBE4183FCEF42F03A834ABF2DB4E97C5C7727DF2 - -Len = 594 -Msg = D6D1EF350BCF8029CC20400775A57090045D7D9FE4D51C52B4EFADE7E69FD952CDDB66FCEA59DDA899A6578B0E4C115305895B909241D4D1ABF2A4DCD97CAAE0E22563B7C6A61009C8F040 -MD = 6D3EFFB1A4103412554C8D5B8031416B0A83242A0E804D70986B1FEB6DA6AF94 - -Len = 595 -Msg = F535C15710C29512FEA5E1388C742D3D181C5F52EC4FB9EABCE691125317D7FC5C4098435C0FE6BC44323B8607A7CF9EE56DAEB7048939940DA2DA4AFC1CE8652AFF60C53F72198E2902E0 -MD = 2EE5BE1F53D870E8B1432895356618AA5CEB64B8A9D8A09F14179E3EC6A97AC9 - -Len = 596 -Msg = 4606C6B2B2E9EB8AEF7D956640FAC17D6A2FCBC407B84D4B4C7D852B2121F08CED0AA8544EB2DBDC0AFABEA2CA0514C744637A745089E3B534EDB8E5D9E9EE7DEC904CCF7DF45365F8E020 -MD = A11DEC7E8F9CBE2981D9485B9B70204B492998F626E908003CB09EA17C6DF970 - -Len = 597 -Msg = D7AA2C9A3EF05452042FF75509A59521200DC3A76B77F067AAFFE475D408E055768ED33FF1B95572942BE792868D390700E82D2217DA9EDCD561254325EC98B3F85A24063F25F51E149110 -MD = C5B79A16870268508A6F2CA006F79D31AA9EE223C13D1EB91025D07C6E4877AA - -Len = 598 -Msg = 6D812DBC3315206E516E52D4E810CB0D274DDB5586F192066645B6B7E7022F36787CFD6E98E553FCF15BF3F1C8C07856C4D9D44D9715ACD92DD02CD68B6C95A5322F8938F2654FEC102344 -MD = 3A4AFBC8739B665E5E444DC0C0FF8C90999EC4C8CC9A8E4EA10436795C057372 - -Len = 599 -Msg = B22FD723C48AE0A1D2B6440775FE49A44720D30E36F1D8D07CB5C49A79BF432D62B95F1A13C6D51D35B6B8AF12517CCFBAFE0691567BC337338312AD24066DB73731CBE66F49C76ACA085E -MD = 60F6372359E2E327C3D42C510D7AB6693EB15CC8D80A7F72A563ECF126389657 - -Len = 600 -Msg = BBFD933D1FD7BF594AC7F435277DC17D8D5A5B8E4D13D96D2F64E771ABBD51A5A8AEA741BECCBDDB177BCEA05243EBD003CFDEAE877CCA4DA94605B67691919D8B033F77D384CA01593C1B -MD = 83CA09C1F418B5DAD0A7F64A904A2E07C3314F7D02D92622F8F4674BC1F6AA3D - -Len = 601 -Msg = 0C86E4810BA7A10163172A8D718D80CF20F519C4191E8080B9FF3A6A21ECB913A14A05F04576BB95E38676296D708D74CD30CFF86D103EE2A79FCD6E39A09912D0CF7671580E0644DC74C600 -MD = A40CDA7EB252867A874654BF2CCEA292BB4CC60289474D0EAA67FBEAAF1A5D10 - -Len = 602 -Msg = 869BEAC3E5B5A3FE99018564592A004B396DAC8DE9F47AC01B5870FEAC4C0371D7EA84D4AB8E199959B423FE069DE86273EC4A73DC3D28BA66FAF7E80A26AC6B3525E530C03A2E2E30992980 -MD = 1B794A840185816CA0C936EA92C3CE6D52C5233559962A520B9C237E5A1CE990 - -Len = 603 -Msg = CB2A977A3760DF60DDA2EC3A24865490299D27165F4497518B1F3471C1BD73E1FAFD2CE0DEF129B02BF6EC9C08D903C3A544F695FBDE5945C23975B0AC0CDD513810CAC6A998251BCB3E6DE0 -MD = 1C9E6AB0F31C8BDBBD1395C2D17580DBAE602AC79284BE19F8A6B5B3CCCA63EC - -Len = 604 -Msg = 389B167E0A47A88EFA81870A0E8D8D86365B57C7CC3D77E0120685FAB3DB28319348101E1453B56F671D7E92D50B7941AEB88E493A1E1D9D06894DB8CE83C6F57C218A9652A5302BFFBE32A0 -MD = 09A9B84289DA79A121C7E641C14EE9EE55448001DC87D8B7A5CCAF01FFA0E572 - -Len = 605 -Msg = E5E15235A5E5787BA52BA4BF335C297D36A96B999F230942B6A8FF1DC4A64F9917C6D564E27EA229938BEA691F70F334011B8C03B778E616FBE1C220B1564F3519144FF35C73AE1E98C4DA28 -MD = 2A7D12BF400FD7EB3E6558413AD0FBAAE90F4201174172373D208B5013D2DEB5 - -Len = 606 -Msg = 1A0F8F926C0C9D4E4CC4E1E5F130DE44EDB8544421AD3BFD80E28D092E2C878EBDDFC62F484BC30B3C93FABCC924A5B9D3A7FA227609D921BE26ECB46D112CBE5C5F91B22F54CAD85EBC2578 -MD = AD3E0982D0C9BCCF635002A2BBD02890F9A0EB0BA0E93B4EF0A3EC95608AB784 - -Len = 607 -Msg = 6299776218D85291AD65FC0E7782D3D03A6FB17BBD72F3C93A210BC49956E3AFD3BD048B49681300DB7676337271DFB46C22AD929DA6365442ED785671FCF2BD549832614270DE119B086EC0 -MD = 0D50A0FFA5CF875560FD0736E8AF5B0D074323F45C8BDD581E7E9EAEB2082898 - -Len = 608 -Msg = 90078999FD3C35B8AFBF4066CBDE335891365F0FC75C1286CDD88FA51FAB94F9B8DEF7C9AC582A5DBCD95817AFB7D1B48F63704E19C2BAA4DF347F48D4A6D603013C23F1E9611D595EBAC37C -MD = 330DE3EE16AEF6711461A994863EED47AF71B362D4C2F243534EF432F63A091A - -Len = 609 -Msg = 32B722648C5D5A9558B328581F00BE0473ACCB994A92533904E7691A83C179D22A027CA97AE8FD09DD5503A307D23F03DD9979AEA237ADC9D76ACBADBB1C482D5FB3023AA194ACC84D4428C700 -MD = 8BB648478E2498DFC55DCA7F01E6F469573AA2E7FC312ED550F4606C9C2A93AC - -Len = 610 -Msg = 3C33B1AF42292D4BB3E86744DB23DFA39914FB81885A564A52ABCA01215D552F6CA3BF56F201086232DC24EDD0B7683EB0F59E9FA96AB1578F8AF44AF903AD496E11B4766CEF3460979CD83140 -MD = 35AA015A033C5B6F67BC4B643D59396D90EE1DE6E19907674449671C699348FF - -Len = 611 -Msg = 1A3051F42AB45179AD429B1616BFC686CBD15FF02D200FDAFB1F89A38CCFEB6EBF00B30179CF0BEF176A2D4CA63CAC0FDDE1A50BE122F408BACE72EEC6320F98AF6ACA4AFC79185B518FD8ECC0 -MD = 520BFFB9A0B672C21691A40014447602C736538CB26A70CEEB64019E0208A647 - -Len = 612 -Msg = CD041C63D5330432294D0926228B1EAF6D234BCA839CF4C9EC8C823415FC34450214AFD2E4975045E6E933E8BF9EAF52A998EA879A06954488E95D0A3359F601EA5401201DB5FD8B3B01EB86B0 -MD = F05945E331EAF0B155A7E3C2E48115337C1498E11FAB2D6B3D07EFD2BD6B8C1D - -Len = 613 -Msg = B88574119E0E2765562879FE7171DFAA8FDD492AE7F4D9DF4B858AFEFD95C55BBA259267878FCA3BDFA6B1BB23189BFD81207CCBC50482E830704FA2F3EF5362A0DDC6DACA3A74413E78F97868 -MD = 1A0AC0B2E3BE89F88782BE3C4EC32304255D5FD4DA7F0171A249C37BD1270347 - -Len = 614 -Msg = C2DC8467DDE39EE6896D915A7B4ED9F3D389FDE2D19D176857891AFE62E7FC6C3070AEAC3CFBB07BF32EA8978B689CA890A083644E54C4AB950DE65AC6270E2C8CACB766C8C494818BBEB09068 -MD = D723976E4A1611939B5F3B745F9012652BD95AF3D2C835720BFBC4108942EB11 - -Len = 615 -Msg = 03DC684CAF8ADF39F716F19E4E899E8CFD8CE1F75D01FE529A85A2B9736A00C7AE6D235E48C7CFF83B08A274E8A1F71142781A40132429808096A1E442EE6A3F76DFD5EDCE623DBAE00F7AC3F6 -MD = 638ABFE5BFF4B361278386DC57FDE4D14FF382F03198F976920BDCEE0EA5FE4E - -Len = 616 -Msg = 64105ECA863515C20E7CFBAA0A0B8809046164F374D691CDBD6508AAABC1819F9AC84B52BAFC1B0FE7CDDBC554B608C01C8904C669D8DB316A0953A4C68ECE324EC5A49FFDB59A1BD6A292AA0E -MD = B5675197E49B357218F7118CD15EE773B39BD59B224D9A45CA71C6E371D938F1 - -Len = 617 -Msg = 9A53A66C40C574D09FB5CC46D7BBBAF18D392FAD22FDA037E45AC895FE32A1B35691AB42E697E64F27239BCD0B3B9929FC4A2C8D730AC3DF39AEB066282E1F7B73984F0BBF2BE4EC40AE8B194280 -MD = 5BAF7B51F625AD6D46DF6468610CC693FBF136FC117595CF9F213B9D2F44B087 - -Len = 618 -Msg = 2ACF3BA8177AF3BF39D6C75B4ADBFA997FD201D5C489260AFFFA0ABB9E4908417DE5B29B005AA277A82F8BC6153AB7AF6A9B418357F2DE6D9AC4D77713695706C99425DFD70586D29AF60863F0C0 -MD = 3341C9A1F2EEF69FD05BBF4EE191CD405FAAA2BCEAEADE52F9D98E2FD350B74C - -Len = 619 -Msg = 5C38BA82BFF584A77A0DA5635C2FC3B3E82E43A2BE5C338215735A06CB679228A5AE18853909E64561DD2F5600E5AC9C5456DBC9F6CD7B3EFC2F925BF4412B3B82148C2F3091B259283BEC309F80 -MD = 82DA55EABCC6FA918EA2D86A6E481A7DE2CBD9D55FBDB4796382E62FFA863922 - -Len = 620 -Msg = 9E75EB68CA9AC9FB4F4AEEC3805E3C4C15DA0DEFDC9678F5062509BE84B1BC0345E25E99C1D2B7E2399FEEFC39E84C3042FBC7CE27D702547D6648D560FAC8268114A96E079BF4721D53F92E16B0 -MD = F272161B313C3A09A98F2E0BB1CEFAC9AF55C4C740336F6E19C1B8CEDCC1BB3B - -Len = 621 -Msg = D4565A61C040688B23AE1AD10FE5934D776ABEC6E718E91EFBABF51F2DF9AA572A5427048D98D1E7813AC854FB348081B0332052127FDCEA10D3F40FC924C07A4B41EA70342BCFA4CB79EC8B8020 -MD = BE8CAE49FAB03A8E0AAD0A7FF3E27E81A1E7221A9B3D0171166B2660D8AAFE93 - -Len = 622 -Msg = 83AC1F77EC3B31443B117F2936E1FBB7F5D635CD84E0178B16302D66D80923214FFBE32AD36CDE4E2B62CB7EA91DCA5F0DD9AAD99B50B984F00F5CF2C617BEF6BAD0605C2DE03641AB6AD3CACDEC -MD = 9E05D0F774A402CD96F01CA747147E96CC2B56E153BC1AF9F7B59C5AF2821116 - -Len = 623 -Msg = D5F52D229676FA418C0F976AE854592C7AAB09267816B5589E10C60C6DB702D2C0590983AC0FCB70759C4A97D61F50B4F992666C4B4935B6409EB37BD4890B72BDFC46B3738DA166510F7F01C92A -MD = E035C3A4C8D9B88FA3DE507E0F22CAD03A2D26934834B8775FDE8AEB1D5D82E0 - -Len = 624 -Msg = D4654BE288B9F3B711C2D02015978A8CC57471D5680A092AA534F7372C71CEAAB725A383C4FCF4D8DEAA57FCA3CE056F312961ECCF9B86F14981BA5BED6AB5B4498E1F6C82C6CAE6FC14845B3C8A -MD = CD9038C1066A59990DF5752107B066EEBBE672CBCA0F60D687D03A9D821934BE - -Len = 625 -Msg = 588A1024CC2DF536C93ECB5EAAF9CAA4BBFAD79EEAFFB5B05468658C46F14BEFB47A2D97F29E462C71FBB64686F2E613AA04D6ABF053284D4BCA9CF6B57F0C8DD0B718423E24CA9347FE4F5CE41380 -MD = E409836BB4DD0485B3D659788F4790D59E3AC8D8DDAC660DA8F4EBA6218E945F - -Len = 626 -Msg = A539AAF94509CFBC8459CE5A4E95CA3D6875B19AC3B119FBB08DCBE553BC83457308D3F413D4362A6E74C35492B1DFFA5D7185BFCA34E85B4B3EA30EC0108A3CA82E55305EF5CD71BEED761D1F5540 -MD = BE561B75E8F9BC3400CC57BA34EA1356449B3C78887343CFE0B923441A008D96 - -Len = 627 -Msg = DD82F62080CB62E34FF4081376030A1306AE226BA181413E0CCE7BD1CBCF83EB09665F4F74176FEED3FA9619D391947F5169330409C3B06904E01E7B3502C88693605EDA211BF315D0106FA3968E00 -MD = 9CCC1D16D3873F913E72937DFF96BB05ADC8472B21123F8A06FC27CB270EDA20 - -Len = 628 -Msg = 7DD4B776E7A5CEF671F43948269DDB104F0A5CC315F08FEEB0749D79F626F4E55F4213EC30ACC38B9F78E44716D858A785BD938E8FCF57F8FF2B5BA15407A79A69A83BD5DA69B379C64EA72CB9D5A0 -MD = FB2B2A49D5F2459E59F42C805664123942E467EC24D83752964CF72FB2D41323 - -Len = 629 -Msg = 9AE70DC8965C2FCB43D79F2A2EEAD4C00A8C19D565EF8B125664633F3FA786F3BFA7DE1372FE84764314A480B8E04A71BB00A701795B1C7A96B7F22A3ED7E86DF8487979B6525A66A10C4C9B63AC50 -MD = 3C6E0198FADA11E379EFDA5EECFDD70B775013EEDFC44E444490D04ECF604B5C - -Len = 630 -Msg = B21B8C40CF1390EA0392F145E9C7C4FB58B2CD2D8C812D0A2839BA2128A1088068B5F17B38324AEBCA2FF9AF59E8AF325948830FD73D1D8EC98AFDEF4D50CF95F712A0874976DA3C0F77202253356C -MD = DAFD84BF95F88A1C5C7854A6FDADCB782F8446D29C42C5E5084A5ECD6D9B33FD - -Len = 631 -Msg = D688AB44EB8723AA2B0F45736F3DF3B5C6D6B5C316E6C182FA8A45AB2D469D68F6C82C81C999B1D5BBFF731FBB65113FD70327182307C07FBB74F97BE8196C183B0C860881FE75DBD9B3166BBFFC24 -MD = DA3B6E006B6D6CF425F22D66DB5EB035CE2485EF5C45B562CE48CD9C53FE63A5 - -Len = 632 -Msg = 12D9394888305AC96E65F2BF0E1B18C29C90FE9D714DD59F651F52B88B3008C588435548066EA2FC4C101118C91F32556224A540DE6EFDDBCA296EF1FB00341F5B01FECFC146BDB251B3BDAD556CD2 -MD = D3172CA263AFF2B9DB6FB13337F2543C5AF51151801A76194012F710306C14F6 - -Len = 633 -Msg = 093FC95304175C45118A6EF8EAF0A58A9D45C6326D6259398D8C6C88567AC9B12C6CDB0B80974D3C104C389E3D721F528ED51B7D8B110FDD955EDF4E13B4883142BB23F7AFB99E5B899D92D5563A6480 -MD = 0ED96D7CBB8CFBA97B49EA62466A3FF5F2F51AD04F4CB9DF9D2D84866583866A - -Len = 634 -Msg = 8AD86DCD3D4EEE9F1B28800E8E6E66B8FA0594C285B67765EBB4035F96AC4155A5F21A61DF4D25441B3265A411ABE9BB5D4ED7FE4D6037D49F2406560AF5E46483C8E1694ABE8A4CDCADED44FD8ED740 -MD = F18369BAF5510D9BFE3BD98943EAEF3E4513A8CB61C3E57BD9ADEA811C88675A - -Len = 635 -Msg = F72D42FD9BE95CF4E1580CFC269747F172F3C17ECC0545DFDBA77C2E5C9DEFB98838C539DAFCD912F39D1D7C126C93BDB2F08293603533DF36430AD72EF419581B011B64224933D0A8BD9DA2A4AE9E00 -MD = 05BF3FC6E7590262671FB166B660A0BB4AECCD6BD318736DC85CAB1ABFD2578B - -Len = 636 -Msg = 4FAD29DB36DD7FD0D7556D77D422DC0AD547CD156321A0C0A988662F3A9919C408ACF3049CDFC2F87309D553CC7B84F3B5ED89DCC6F1F707E0009C6D7E93B7F8089CD57AD9C2A4CEE97FAD6425C93420 -MD = 7723F9F0A4162A467A9CE1054D1E3E334C0A51D0EF97D249577D8864EAC27EFB - -Len = 637 -Msg = FA18047AF5A407B03BDE3FD0554363C2B95E36122B83FAFAF0E9EE933E6B8FC30344E34B7224F4A13A3FB3D1E15B4EFEA5AC8D8BC8DC3F59BDE305E7F337B77830674EB0DFE041F2B6F18F01CD59DC38 -MD = 6A3054142C3E3BE22C385D9F8A1019C9CB6A2FB1DA7B7514939F2445324297CC - -Len = 638 -Msg = 37E3823B27C5A47D59F9A801CB773C72DC1B6C04621AAC60D7ACE9590D0A202B2308B07BF1AC28E6E015B873C95B0143CF6B83805D6BC9EE186E8A75404642D15901334E09D731C02BCA748A33C965FC -MD = B0DF5900C221ED3F65FBF9348DA4B6C81E105445DEA488CE24CF2A7BEB47AA34 - -Len = 639 -Msg = 99A25B5CDE96655B4F29BDE8A691DC8D0BF9AAAEBED84B55E8BB044CEAA98FFD72C6F0B98AC4222FEAB773F9175796047FAD484F18F33A72AEE87276957F3BCF5ABC256DE0E14157C4903174823657C2 -MD = 65BDE4D923C1FF55E024E8455407A617671E39F5A29329E798F4109661184801 - -Len = 640 -Msg = 871A0D7A5F36C3DA1DFCE57ACD8AB8487C274FAD336BC137EBD6FF4658B547C1DCFAB65F037AA58F35EF16AFF4ABE77BA61F65826F7BE681B5B6D5A1EA8085E2AE9CD5CF0991878A311B549A6D6AF230 -MD = 9E3D4BCF580EECE39BCF13E5716E5BB8F5E8C3FC3723F66246F836D8DB1238F1 - -Len = 641 -Msg = EE9AC0C239D9644C82660B488FA2598C3B288A01C84608EE555AC027C01FDBB614E18D5C1B3036E88115B5BD42B465526B92CB94776634377290333571F8D28518EA26F37DF8DE37ABE87DA2E55BD2DF80 -MD = 194534DF958781BAADDE7FBE36658C57D3FBB386AD15130FDB22558EFB4D634C - -Len = 642 -Msg = 10D86540DCDEEF9B16EF516608D711500ED8F8E3F4122224993B3EFF37053DA602A9378889058954EF5B0BC3BF55DA2C88C881C583FEDAC724E1259E62CFC9EA973CE0F3FD2F9B92A19773A5312D493F00 -MD = 1E58863DD20BECEF2B2420976331FE4B0053D10795E4776BC3B16DBDC487A60E - -Len = 643 -Msg = ED84FA0338D35196086E1116FA0BC0B31790D4AECCAB9AB51B42AB8AF76A6E97B284ED9D0321E891AA6E42C906325C4CD3379188F4400DB8BB2FD7526896B3DDFC733E19AD2C8BD0269872DF02D8000A40 -MD = D7CFBACDAD0CDAF7F779D0CF1C1F678399DD1FA6DCF501D28B047F8C5941CA67 - -Len = 644 -Msg = 47A28CBEB8ECC3BE04B9112668271CC7A16C1015118CA72257EA0189D994914452FE7C5C66D83E10607DE3F144B04F9DF70003087237B55320AD925BC02BE3CD4BE9E9664A7C601DA89C1311565E03F430 -MD = 66A0DE4F2D33E76628D0B684DF025ECD45CF716D6F13881C143F593D98B91730 - -Len = 645 -Msg = 4EF91000C81FCECDD34020116B25E51C00871C104BDE349969BDF56A5BA844B4B78D7CD167CACC46693E0EBE9F72FF4ED3F3B4F03D2CBD26E9C0FB2BC422F84F35F248F4AF366F952E2D98B8441DD13A80 -MD = 79FAB51B387D4CC1185DA33757574982496246673792F0D3F90EB46B6367140D - -Len = 646 -Msg = D8C5BA1029D56F569D9ECEFB0E4556298B474A8014FC1EBEAC8F4B61A1326CA2D40ECD50A5A15C9EAAA17253434601F548F4F380D843A53FFD2697A845DFF2E2237AC7ACD9056894E5E35E563CB02769A0 -MD = AB93840FB1683BCFF27C16E7D0284EC5F5199AE39600BDED44A1BE171CC1ED00 - -Len = 647 -Msg = 3A974442BE9FBC1F4321AD311F3B7D26537CCF129655F16EBBE11D6271C9F30001E910CFFD71EBF57794C5E07A9BC228CC2E93B0BC56A17F6CB49EDDAF29DDC1F83E68EDD1A21B84AC5BA1FC5834022C08 -MD = 143601D6DEE9232E5AA78C2AC6E70CB976ED675D69C5ACB8B2F7615BCFF4098F - -Len = 648 -Msg = E90B4FFEF4D457BC7711FF4AA72231CA25AF6B2E206F8BF859D8758B89A7CD36105DB2538D06DA83BAD5F663BA11A5F6F61F236FD5F8D53C5E89F183A3CEC615B50C7C681E773D109FF7491B5CC22296C5 -MD = EDC2D3B49C85B8DD75F7B5128DA04CD76BF4878779A0077AF3F1D7FB44F18931 - -Len = 649 -Msg = 291A175AA79A73524CC5A8D1324E068AAA6E2A3CAA43AD44216BC1D94580A4E8997EDF665A8E2142D63FDB55C005AB6B1D81C695C1460BE418F0C2122B4FBA09CD381ADD1B8FE1C646FD03784E246437AE00 -MD = 55951D5C9D7EEB80AD66285790932E7E2A92389B404AB82485CF0CE47EAB2398 - -Len = 650 -Msg = ECA7ADB20C7BD746B39A1A1B4EF9C1F319403E601D6B282FFB2DC6C01A83E6C01A01BFC72AFEED867B5BDB8FDB2987105CDE36F38BBD7CBB6A185AF91CB3F3592FC20BE27B0C277D6D398C21530B333B6100 -MD = 1F97C53D9218A8E040D1CCD26D1506718FD485E08FAA8D782DD6E398A8657631 - -Len = 651 -Msg = 324C69CBCA2A5B8B42E1DFEFB2D7290D5871F3442CA554B5D34227F06A732DA857C4EA2BE0E8D86299A70BF0E754A06512D8C9ED4232339BF6E338B89CD7F18848B81CEFA8431ACC2E0941D3FBA7F17F8540 -MD = A7C14BA263315F83A45C77A2355ACB816186B2B56A9C5208EF0854659321ACF9 - -Len = 652 -Msg = E34B1ED9CF859DF804A8F42B71E68C2DE6A3349EEB87B450D350BC2F79868748E71C44E8D4D41BD3A770E521DE7AA98C430910212E294AEEC65C0E7762C7CD9F03A2C61AFF873C28A9DB3EEAFB2C09E24F90 -MD = 1F6AE878AFF74DC102B2ABC28FE7D843AF457DD8E2808947A7A5E1A88B9C5A79 - -Len = 653 -Msg = B19701F0F71E36A61B27E9DEF9A7062719A497BFF82CCF01E076E8C08F94B1F6C67473DC909B192067BF6481B44A44FE77340C4EB7FEC31B2EA97A4341D09E31EFC00C48D11FE125DA151B6C7635094EEE30 -MD = 62FF7AF711CDCC3812D48771949C89E7856FBB2C11AC821955897DB635A0E575 - -Len = 654 -Msg = C700B40AA21E2C2FB143377421FB0E5C4C665E529D8C6C6E5A4DCB0B388B5726926D41A9A336E6AD38CC3F239CC85DE38DC221A4ECD281B4E271D90BF24A1FE943A6A5A637C36B48424FE6079C1F2C2D7878 -MD = 589C42E8B575886235BEBD048777E6A1A3ED1E6F8F5FBB3F46665AF475E9FED5 - -Len = 655 -Msg = F2224C30809A42D86701D95473C9DA3AAC8324D8D59AA8F75BF8E5A1420130BC971499725FFC56D1047F5987620492F383F477CDBF98EF01DB50F1FC0A7B3D9BD20C31ACFFBF60FB18E9962896B2E0431466 -MD = 168D0D3BF06651F72413E794B859493D94B92E4F4A7D6516E46F74EA40EEF083 - -Len = 656 -Msg = E728DE62D75856500C4C77A428612CD804F30C3F10D36FB219C5CA0AA30726AB190E5F3F279E0733D77E7267C17BE27D21650A9A4D1E32F649627638DBADA9702C7CA303269ED14014B2F3CF8B894EAC8554 -MD = 80DCE7F04DD6AC17CE709B56CF6EA6C0A57190649BB187B5E6D95FA18100C7AC - -Len = 657 -Msg = CEE8685B3D95B231028587AC25C7E1790A7EAE52A5BADDF63C44DBDAD15DED0EE60708BCF52594F2FFE21BCC6849558A06770559A409450E6C87917D447D53D321EFB737668072DBB86B4A57C2CD4E5B3EDE80 -MD = 77DAAAAF223AD1FADB80EB7AD5C278DEABF416E96C341D29B37B9A84DB009CC2 - -Len = 658 -Msg = 0B813C3BB65702538E6A0B953C9D272DD738817C86FB21A6DABAA13CA63E7F7A92F39036E08A68886EF8D495D6C2956125B4AF181B13BB41C89E83CC8B6E9CBA159CCB92C755E56CE1C3458DAC38718652C440 -MD = 6A462E87BB5060D4F1F01B278B3E0787623F02D3295DF42A5F7FE529868A8D3E - -Len = 659 -Msg = DDA54A9794F7FD0B7DBBA54A8341460FA46A067BA59EB7276D721F5182B59FA17F3DAB0015776D8BA29CF88BA64F6629B0FD0847FE2A86699CBB1EEB441AA17BC9070B432CCEA7B81060F742CCB4EBFE409260 -MD = 281279A865FAB54689F6E8689CB63C6786DD2837D610AA4F84A610C77728DBDC - -Len = 660 -Msg = D71B21EDC24E6FAF788F909BF9015775BE75EF9FD9C179E9C9C8281813055A1627E1604C35BBD465FF7D30FBCE70ADCD6F17F11E786FA85996AE178532531A5BC68DEC364647D2F4453AA7881E232563283D20 -MD = D0F9C72925390FF3A0596BE1654C03751883173E8B94D34608B7D37ACEEB7DF9 - -Len = 661 -Msg = FBFD53BCB158FA9DB2EAE0AA165B704ADA66AD28D5FAD0AAF4F075EBE04F295D5D4F69CC2936881FCDBEDDD48D48A6F3F0FDF1586382F9B97DE28CD225364D2EC0CF872AE691B76F10C7622B1409F1D4C1C648 -MD = 87BFDCBFE4D00D7D786EC3BD6EE4275B73D4A843EC8AC0DAC6419F5A1F712F0B - -Len = 662 -Msg = 7E767921A14D35F1662B628F4A3F9E285F3F165316128AA84E06F032A0003A445B6C1816CAFFB61D7318D249C9179A27BA6F758103E9D82F3D1F7AE5726D485270AEA9BB40E9E11831D9DC4ABE6089FEAA6960 -MD = 48F52837EEFB6E6294046118C4F72438ED9185003344C71A8DF1330B72649EC8 - -Len = 663 -Msg = 020B34BA7071093BA752B2913F9774C29204D00A137ECEF964F4B05DCCDE457837E0E724431F606E75E3C14B441E9F2C53C7504F5838C57400BA593BC59E74E4E923EF0CF44D734C07A20C2DECB1DCA82444AC -MD = DB726786CD584FC23E5EA10BE99AA538AEFA83E210C5EC902EF903AE95736BBE - -Len = 664 -Msg = 6348F229E7B1DF3B770C77544E5166E081850FA1C6C88169DB74C76E42EB983FACB276AD6A0D1FA7B50D3E3B6FCD799EC97470920A7ABED47D288FF883E24CA21C7F8016B93BB9B9E078BDB9703D2B781B616E -MD = 49BBD5435D2706F85FE77B84A5FA15DDD8259E5D2C20FB947F139373E5C86121 - -Len = 665 -Msg = 5332DDDD7949110448AADF3FF60CC30D6CA83E32C49FAFF9625C3B39E80BB94AB82D9288B85A5D4315DF92FB9A8D1F6643C2DA0FAD11F62411899714FF8688BBACF01915598C259F5301EEF92F9A2CD965D43A00 -MD = BAC2A71BCCAEB34B9FBC1B675A638B51E7ABCE6257218F3A4E30901030CE0720 - -Len = 666 -Msg = A90A69E0B616278A1EA45ABFB27876514B9A94C1E1E24C4C22A47DB8569DF9FC64820C5A46E8762ABE56C095AAA1F5E97509F16BE71C437E8965BA7395CD82F6566B6B4CCD2595A9326151716A2041D97419CA80 -MD = 02E59BE9E4B9E57FA783D9F1F5DEC0FCD215E911BF922BAD7AAAB2830746744B - -Len = 667 -Msg = A8E6EA7B074CDFB1983B864345B26C1C51B6799399092F146E5A83F68544D139B4DCF355C18563D5924106AED6135E8789DDA606A264B9F6EF059E009BB6D9797F56B307CEACA7330B103FA36A066B07D5FAFF80 -MD = 67EA4D958DB562A79DF556D58DBE5481BDECCA7CFD79C1B384439D0C5A46D19F - -Len = 668 -Msg = DE6F56BE8FD2622BF9A9D72E126BF9E6C709B7DE2DF49F025D3A54335ACEA3913491EE0A8FE4B511BAF9B0BDF907066E4E70B8165B5E7B173F9D8F491248379AC2E0139A2435EAE5B53AF8B9BF974E02E68B1530 -MD = C21DC75D435E77AD9EC690C486DF6F8A495E82F1921FDFEABCF29116245D94D2 - -Len = 669 -Msg = 183111D07A16E338EDB2BED4EBFFE453C900976F33ACF6D521F014B98EC4BCDBB606AC70CB557CA17E0C02CE8395DB05611100B0A3DE4861FC0510CE734D2718E9A2C01940DBDBBA806BAD0B5BB3B13DF37C41F0 -MD = 2D9A461D24EEAFCFEF1EF58EA5C9EEE090819266EB3D77F9020596B62AFA5281 - -Len = 670 -Msg = 05CF7BC0F43F7DD750F7B238624157941F0C26F990D967C1A9A6B1713E090E790D574206DC47F2C61D570F1641A0C6F240269E9F1F1754E4AECC734BB7F55566135504A94B03F775860E4ABB0E7ED6ABDC275FA8 -MD = 0905CBBC7728871AB9A1CED4A2BC8D34F4FF47E94BEDE87172616D2A784256F8 - -Len = 671 -Msg = 39FDF47FD4BA466DDCC6CACB1D4A1941A67AA2985B8832B79A194CC31AA9C308FDAE7A2393621C14836A4BD32A2D75C0A0F94D8F6DAD905565D8F437438D080628809212621BEC1051527B9CA217545BF35FBE8C -MD = 0746C6745787EE183F160599BA5AA96045081056EBD4C78D7522B8B2BCCF5D16 - -Len = 672 -Msg = 4B127FDE5DE733A1680C2790363627E63AC8A3F1B4707D982CAEA258655D9BF18F89AFE54127482BA01E08845594B671306A025C9A5C5B6F93B0A39522DC877437BE5C2436CBF300CE7AB6747934FCFC30AEAAF6 -MD = 6B6C11F9731D60789D713DAF53D2EB10AB9CCF15430EA5D1249BE06EDFE2BFF6 - -Len = 673 -Msg = C65513559AFE979CF98A11ED2BA28093FD980E4827D7AA88D4EC8509A0621B4DE6ACD0313E0DCD79CB791914D6BDA9E0DFDA44424FFBD29F0BA7824A37605AFF32A9AF813B38293174B929BD836B19108B206B5800 -MD = 35EC2E54F944B72A95CC84902D42BE4516CE3A038CAB674590869794D0CB9724 - -Len = 674 -Msg = 57EAD014B8ACC155958D62563E9F51F709D858379D699AF657C67DA30378AA7916AF2DFFA626EA24019F4ADEA5DD2F776FA49191673B08C804C2396292F82B9A36C90E5E0498370A221111EE58F7D2137B96D58740 -MD = 2225EBBE1B13F6D742DD44289EC6ED6E5D24263EEE6F25A2AA5830C6E09B7B2D - -Len = 675 -Msg = 815D4AD9D572A2DF8656281CAEE841AE46F8FD3AE24EE2FE148929C570CDB3E7D0B08FC26F42B5636A3ECE524355E6FE28F019F139839C2BBC79F18C765F8ECD7EB139DB97816EFB832A09534C07FA18DD68033960 -MD = CC23BCAF812DFD4A85AAF43B3B3B3C36C2F1CEAA86C62246953822F32E7D2016 - -Len = 676 -Msg = 6D5BDBEC01986DCE1000A7EE1968BA9E6BEE72560C230F33F5DD758B593AA482CE01730B4234E7D9E8A211B9602BAE5C918971B816604BDFA382EA6593D27AAA40628358BFA92DDD44E84F4714FC41AF834761E4D0 -MD = 126101315A22D767B40A156A2E0BFD45DC34830D57F4AB66B7ADA5AEBE645BF4 - -Len = 677 -Msg = 4BA150A5EBA308AD19F868282BD246A6DD84D7FEC4B2E5EC43918F946D61061B3D1D11973D22D7C9E7E5702E59C7414B034D2C53EF91729522C9CD82A9F9378FBB4856F1BD10898296CCE3B90CFFDCAB58945BF580 -MD = 801A5EB001E014A29E7C07965EB513B8F4009A62CB4DC19CEA2CE8EA3120E042 - -Len = 678 -Msg = 65666871ECE7F4087742945841BB624EF9D5C6400F4D78857810E704507195D6AD0B047EC823D29EA20967FE037BC4546BB2E4FF5B85EC7FC8AA8D1260BBC5C5ED5AF6789B81928DA011FE91A5017C8867391DF504 -MD = 7EB95C36652D806D320A6A589670EC5D69FA9B7D21D9EED16DCBF1BDF7535EB0 - -Len = 679 -Msg = 01D6257DF9FFF02334322A6CE3948C5C17A9C525D04B5778394B7690063407A9BE263E3C3CD8108457B2176854542FB2A1053578A9B3A36300630D2B3DD82DDEAACA7A10DA4C6B387AB7DA0B4897AC129822F0DE1C -MD = 59A556C3635B0D3F6002F7CE7388272991BCF1BB865493930C42DDB0CEEE4D04 - -Len = 680 -Msg = 08461F006CFF4CC64B752C957287E5A0FAABC05C9BFF89D23FD902D324C79903B48FCB8F8F4B01F3E4DDB483593D25F000386698F5ADE7FAADE9615FDC50D32785EA51D49894E45BAA3DC707E224688C6408B68B11 -MD = 7E738E8EB3D47D18E97D87C7B3FC681F86417883CED92BA93C3077812BBD17E7 - -Len = 681 -Msg = 46D226D1AE24FFD00A066EFB6D561AECB244806BF048E60330BE461C07793F8172BFA3D52F9A98BACFAB2CD39864FAADF72C8A7F94A977E1AC7597061638ACE3E21BA36CBD4007EF139E7DD8B620139DBB0AFFA81D80 -MD = 0627B24653950D65769F904C18FC1D108CC89A9E912C67004B13D4A3ECCC0750 - -Len = 682 -Msg = BEC8AC7466698A548C1015FB4BE3450D86983940D0948A6B53D9024C51B356C3CAAA87E9A15A06873331C3B0E2023346E87EA14CD757FEEE5F77A4DA821087D36229A4C3BDD68C03FB27D0F80C6E3D7E9C8A036A9200 -MD = FC21EB896F5721FC0D55398EB88B0A2BEF94E90E2F810FCC020C6A7CCA587592 - -Len = 683 -Msg = EE0C430A0ACA534E72BDB81416F8A84C376529637209779A74F82C0934825CFF164AB703513B26E4E64F2EB05D462B1A422B8423B52205075FF2E8FBD36FA82E343AC0B06A3CB2EFA7E509A7B0B04EC23C5C4AA20760 -MD = A4659CE10E34AADFDD0DDD1B427BB65C6D076286D91FA774CD2A0CE0B2E3B3BD - -Len = 684 -Msg = 5262C0E6A835DDC17CA500196D4B3F74F30BE0A85E70D0AB343AA33BA65B08E35EE2E05F2812D3420F8466A75E550CDAF47C77E3E6BA22D0DFDF0D55697DD9759695DCCC84353DD2B81AB0FE59CA3E9A6680A5C29EA0 -MD = 267B15A2C6F1AC3EA70685F406C569E7186D05DFEFBEEAF64F03C06E2C7212A9 - -Len = 685 -Msg = 7692563421ECD26D31A2A48D509820C69B1CE339B689C0421DAA658E43F62618EDD77EB6FB8C8C876176A13A7DB1E6F5CCF458F17DC76C993208D722D942E1968033DCF445E369B6375D0D488930B1653C12EA1B33C8 -MD = C51BEAA768A1B02473751705F1487262E3B026E16FA2B82C4E49995BF5004BC0 - -Len = 686 -Msg = B67F18A877D01C5FE24A5A81431CE673D6941FDE954FB92D593291D38E5BECE6EE5C6DB0BA571C5B11D96DF1D683CF14B560E3FF015DE782D2D23CA661B18FCBA123CFE4EFF13545CF10C20E8619C513826B8B017590 -MD = 722D0D0C4AA5D36332AE81905BC1DEF4AB61D03E286F55E43727477C4E0CE5FB - -Len = 687 -Msg = 3DF1EA02F3B72F7DF4C2B23BDB4A07F8B42CA5BB071039C7A5854B87D20CF522B6542E882B6A40C5CBF4410AC39F4D0259B7133E65E6D3931AF6547563603889968A5537429A5461693DE1E248EB01EF78B971143BCA -MD = 663E31372909C019530A4675B950E8FCA7D6E44995681F4FC776C9A9CA29D1B9 - -Len = 688 -Msg = 68C8F8849B120E6E0C9969A5866AF591A829B92F33CD9A4A3196957A148C49138E1E2F5C7619A6D5EDEBE995ACD81EC8BB9C7B9CFCA678D081EA9E25A75D39DB04E18D475920CE828B94E72241F24DB72546B352A0E4 -MD = A278BA93BA0D7CD2677BE08C9DFC5F516A37F722BB06565FA22500F66FE031A9 - -Len = 689 -Msg = 4C4B4D003C4341C9C120B0E717622C70F17AAF88F49DB5E4C10124EE6BB1A090EB3A638BC262FC4A761B0C6FAB9913ED105DE2FC6FCD4BB748B9270305A34994BF81E43A86F8A026FD6048285A4F93455A598D5C47B980 -MD = 88A3D01748E19612E89DAD45D8EDD6483A9066DBE339DC1DDE1116BB63184BBF - -Len = 690 -Msg = 61A7A180B5122B174C0FD9B531C66FF1E273353D348DA58C345F78565DEB59A973566B89BBCA79F403ADEBA899E56FC9AB9885A9AB6ACB96A3920AB27C16FE424A93A21A72D6749756FC14C92EB08F078D6E21D0C0EEC0 -MD = 1061ABC5F14992F349D6DB54B7541C49BE14D6E5A6FCFF4E46549505DD712283 - -Len = 691 -Msg = DF1081403952FF202893B5849BBFFFF74BBDD670C20EAD37A69C6A04291033FAEF0C94E4EC4201A2911A73E6367268A5F66E11561A6636A05CD2CDA8A065B2366B7DB0880F0E0B972CBDCCC70F3F4B13A93F63275C4120 -MD = FF7CAA7418CAC369106CFF32786DCC35F225D77ABAB161EDEBC90D5AA7872E26 - -Len = 692 -Msg = CBD12C05EE3BE8484D9005E2B9F017F8E5EB0E7CF122A393B1C570C1ED9B4EE1C65CBCE0DFF77CB991E6F3F66D7B0EF45204894E5527C1AE655321D84CC2E94046F265EA726127628D15D4EDED37BB42D8E40B3EE6D430 -MD = FD3452C8D2011F9F7264161A9A5D2596A47F49587F9B57B72124076BA2B18004 - -Len = 693 -Msg = 659AF27FD1E6C59C9DA9318DA4E063707AF5204A963038B7E83242DCAB783F009CB034E39A82D26E1B2B6E84422281421687244DB5CE43A187FD96C39A59196AC2FD820FDB52BAB8DB579F87AEEF3EEBD0851952B70008 -MD = 4E482DF1E56CD13540D6F41B7B3A6EC81E956AF908EED855E15D22E8D155E57F - -Len = 694 -Msg = D32EE5CF0455CDB7459BEABEAB67AF3E385E6D7D576FC3F9A3545EA4C28C94AA4833AC1D477C084FC3DCBA799D7DB42260695D651CC299E51987D60F8256A8BAFAFE2A3E414C235A56946DDF9562DE66D80B375DA578C0 -MD = 2D589A2EAFE0A335A1182828B3A23374F94BDB5966090FFFBDEFBD83793637B0 - -Len = 695 -Msg = 62683FAA989429CC513787CD401953E80F8C9C7D41634D1888A08A3242D8FB2BEC07E5E02C7D8D00C446F5F08BF846927B5409E6BCAFAE4ACF70F30383D6C29D062625870F6DDEFD1920179CAD59A2983F0E20E78F5440 -MD = 7879C4B7FF41FC9D1FC66EE5D0E2D4491B61F78721138C3F05835B0A9E20FC2A - -Len = 696 -Msg = B8D56472954E31FB54E28FCA743F84D8DC34891CB564C64B08F7B71636DEBD64CA1EDBDBA7FC5C3E40049CE982BBA8C7E0703034E331384695E9DE76B5104F2FBC4535ECBEEBC33BC27F29F18F6F27E8023B0FBB6F563C -MD = 9C0A9F0DA113D39F491B7DA6C4DA5D84FE1CC46367E5ACC433CA3E0500951738 - -Len = 697 -Msg = 806CCD839B87C2A7C784F9AF9D5BF1F3CB663E39BE778FFC58865F953A837903542727FD51ACE8A276F9F5888F9B9FE1755B5D603284509D9099B310E01776281034FC57E91EC6781FCADEFE9B5E34C2D58ACA5636D7CC00 -MD = 2A60B395AFB470A412B470EA87EB14E6EAB446961329384FE9DE6CEBD22B5FE2 - -Len = 698 -Msg = CA4D271BB220A5E1B6503C8E44AB9F3554D85F2BFF4C4F6A6ECE5C7E91FA10374AAF75D9FB45D4F0B442A3058FC1BAE39127C4C71146F5B2D4E87034EA34E67F822651A57D5D70F7A564FADD4143E940E971AE985E1D7240 -MD = 5CB73C12C593C7590BCD0615DE9E0B3BB00CDDBDC208BEE356DF61EFE7972921 - -Len = 699 -Msg = A2786A30089CF96D17574434B2E274B89CA8D7AD73C3FF491F50ED2965614288DC6B47B491B879857E384EEFE7149611E56DCAFA6498CAEEDFBA30C0CBC52269A3C6248587D77509E2019717E47DC27210A449E8EE0E9060 -MD = E10267036E3B19B7626D0FC1B5960998037A96A7BC057A91F7D0168CD840B510 - -Len = 700 -Msg = 96FEBBB1DD01497E3E9EC768D864A48734DC7DCEFE567F84EE9309CB46B5056F6C730B1A6836912FFB473C0EB7BBB77BCD1483D1470910DE99328A43B2F0ABA0CD4BEAC2938937C2DC38C5E2822610814CF44DA89181E2A0 -MD = 8DE4625D212E4FA34F1584FF0A6B5026CDA6D695D762F1615D52329B8AB5232F - -Len = 701 -Msg = 871EE5187FED8FFC3049079417641B332F0B73B2665C60823BCA8BFDF0989CF312D36732EA456405A3E0EA72F770329DB44949DDF7596318D37D99C8E0F8F71E22534493708CD6521711100EE059C53D2C2753E1A920B6A8 -MD = D938C827808048F91485B55766786BDD13132CB684A865ED32D93017CEB9400A - -Len = 702 -Msg = 12A6F918BC8A7E16920F4B4033F71ECDC3B5FF72894936BDC0A26BBF6FE66C594244FC37DCAF4CE0F24E75B12E486CF4C41FF97C8EF4E66825503B657787C284A6ABCEBB6B175623297DE98745A4A3C62A93682CAA4A8D58 -MD = 36480F72B1653221F7584A5060979CAA231697806410B0025BC181278E0E6162 - -Len = 703 -Msg = 44D3E60CCFF7355FBB2168287FF0A1CDA69AC68D0A7EFE45F3A81D3F095FC8EF2F29B028942CA304A1A6FF223E52BB10A335DE8395B324CE26D802F770E0B47BD6B6FFBC1D9FA0B15A851ECB0F7F62F3C6704A1B16CAC2E0 -MD = C7BA5E35985793878542DC8EC1130C653946EEF86BB84F6A0FF032B0FB452E75 - -Len = 704 -Msg = 0D58AC665FA84342E60CEFEE31B1A4EACDB092F122DFC68309077AED1F3E528F578859EE9E4CEFB4A728E946324927B675CD4F4AC84F64DB3DACFE850C1DD18744C74CECCD9FE4DC214085108F404EAB6D8F452B5442A47D -MD = 6BED496D02FE4CC27D96DCEED14A67DA7BDF75E19B624896DFF6B0B68E4FCC12 - -Len = 705 -Msg = 01EFD67EF39BB09135E89B144997728AD2B318BB6321F421D7EC85BB38DD655FF2C565CB86FB427F4DD4EC69CDD079624FF6AD51438FC7264F86ABED42A93091C80771914884EFE67DF9A1A169A7806392A1E82D71BC748C00 -MD = CF841CC287665952D29DE86C272AFE6385449D4E02308E3E82D77831974F9F19 - -Len = 706 -Msg = 1B8B523F851D64097271FF7F02DE002EB26AA338D93D760EF8BFA7B798CD5EA16BF3A32AA7261288CE542B07EA93E8FB48BB545BDAEFF58EA990CA44001A6000E33436BC10C28E5AF184CE442BA2F3954E6B7B1C15E4690680 -MD = 05BC3FB88FAD0B109D4548BF5ED2536D2D4A1BA0B5E3D3C3C0E16912A792D6E8 - -Len = 707 -Msg = CC579BB31BE1F113D7F436511B6B600889D1169F0A82C3777ECE9857B613AD5CF5DC8C621F95744F1A997F947CBBAB981F1BB910753B6658C11EAA2C3421D410E786C9727D34E79A8501123F1AE43A9ECB933D1256EF103EC0 -MD = 4000AFDF4848D97D2EB14B15FEF165E0F8546F803463F1748EDB4DB425093EA4 - -Len = 708 -Msg = 23DBD6EA6FADE48BA4D2D596F4BD1608E38BC566812A5899041D2B8A867B20D0C6080E3EABF6208B7BA26E2243F270810A2ED2F2CF6A0AB9975FC3D0460F19CF0C8EA7842CC15A12AF2F31C7A97A19D5421C368AEA8CBCB1F0 -MD = A693D6CD8F2386059ABC325D8BBE13E467F858880A0EF95091A8BBA9167C87A3 - -Len = 709 -Msg = 33ACE56FDA97E4E458E135A93730AF474A233C9E468E4BA8D2D6144D3D86FAF619FFCE35463F136C3EFF4FE16F8D4F7B0BB3D6BBD80880A935E7FB55F310309EDB0134E3770BEBF81622C8CCD6CA04AB7C9D9BA40DC0C7BC90 -MD = 98F31A479D977FCA0E647D462036F939CF5FD42389B2B061737355505218CD27 - -Len = 710 -Msg = 37402934012C4CBCD189BE7AEE367F3C12B32B306980416AE5A20674DAF6BA41EEA9F09981D58DB2E38AA3DFA5173218E2DE374575BBD95FC039FDCA99ADFBCC30220492324189EBC2DBD5271A28CC8B8DB90D7D2651190810 -MD = 0AD5E31B1292472031659EF7D51113C28DF0A8430BA1E561BDFEEDB058189333 - -Len = 711 -Msg = 44DA0511C6401815BCA95272F343C27F8A67B19EAED67169957F4B364059537A8F018D5C9DD478C0643F26D723EAEDE5BD2834751D291A0EA86BBF1C368FA2952D4ABE5B3F424B6D3F6C5A129817CD2F3FD6EBFC93F6B3F752 -MD = FE29498F876FE72DD3F4AECC4ABAA86DE73FAC66C4A0BF72CDBC9DDC35E90953 - -Len = 712 -Msg = 1755E2D2E5D1C1B0156456B539753FF416651D44698E87002DCF61DCFA2B4E72F264D9AD591DF1FDEE7B41B2EB00283C5AEBB3411323B672EAA145C5125185104F20F335804B02325B6DEA65603F349F4D5D8B782DD3469CCD -MD = ECD2E3FAF4BA4DD67E5A8656CEBEBDB24611611678E92EB60F7CBD3111D0A345 - -Len = 713 -Msg = 5498F0A76D37803918FD6B15EE166DC9FF9731F1C5A50E058713E285132BC43F2CD5960444E234F8467953890F35459207C52E6F39F0102E4684A18AF3E95126D7437F8A4266FE304B484E73CE5FBF96D2CC4BC29EFD03383A80 -MD = 818EFC3212B9877E8700227EC7452AA827A1377930F3AC66A04546E4F3C3F43C - -Len = 714 -Msg = C0E4A4D8BEE0E03415D5A2A3D11E83088F11F27BE91484A691A15D9C1450F82F295B2BF9BD80093987FD95033F9EA7334E3C832EBE019406B0B7B32F293ABC3AD98BF65459FE860E817B106AB4FD41A6DCDE128205DBC1AFCA80 -MD = FB7150BC46AA671CF1160C56DF7BABBADA45A4014BE8A3108E51589E204F2E31 - -Len = 715 -Msg = 2E99D58138061701615DFF1A8953E671548D6324CF19476D9CD33849043696E1540AAC3F44A011EE94423A2330B61C2FB2A1CE77FFC12392DB812F4F0BF8608223DCCF19019D80755A46902019DFD790D342DA79D5A84C009F60 -MD = 5DAA03C5A70298154647E7561518C4BA70D4A4FD5102BDF4BF9457A9E9AF84C8 - -Len = 716 -Msg = 447355A1A902BDF51F3AEA5D6F904BDD7B958A269727A8F15B1520E15FDFA01DC8D23DA925F622210A587098033BD8AED48727CFC66BC11905410FA4623E8D8456F7CCBBE6582DB121AE2E7676461007E4E225905AA2D30A53D0 -MD = E3E0495A1C1999960974A77EA14818B8403236424C3E57BC446932A5F89AE82D - -Len = 717 -Msg = 64B9BE2D9BD49866C57E320D7079476C1FB62FCE5E8196AC82A62782F693968539D331B8F46E8B76722B3DDCCDB3DB194873E02996CDEB199237F0CE4C377D46DE925E7EA0540337D03378EF3FEC8488F0728DB40CDA98C11988 -MD = 597CAA4236DBF22572A14BB87A680B2D73E5A70E3D8DE9461B5D6B5EAA595D28 - -Len = 718 -Msg = 8408659B0998506DD15A6375D400D017CB1081CFC1322BFA61BC19E4278AA172199D091AE29F7BB5B0B9E01F3F9AA2F5ABFF8DA03709092A65074F965CF0A1253A1EEADE65A132AA5C17E4E880F1382709BBB3056C643A12A928 -MD = 12728424BC92FE89E47D9CB9FD38154545D5B8410243191C9E3903769C7D6FA2 - -Len = 719 -Msg = 8E51395F9CBB75F8B98104508108016D275B6F769588DCCE2858E1D6995EFE7BD216B9835965FD90664CB4F2743EC5817B6820868D039190BCFD07E68B9C13A014FF2703DE6B081B86C55D72BCC22F4770FC7965D1E75AB9948E -MD = 40E725729FC76C1F72192545F6E61A272A19ACBD980C2940CBAE2A791B4A863B - -Len = 720 -Msg = B180DE1A611111EE7584BA2C4B020598CD574AC77E404E853D15A101C6F5A2E5C801D7D85DC95286A1804C870BB9F00FD4DCB03AA8328275158819DCAD7253F3E3D237AEAA7979268A5DB1C6CE08A9EC7C2579783C8AFC1F91A7 -MD = 634A95A7E8BA58F7818A13903EC8F3411B6ECB7E389EC9AA97C0ECF87FADD588 - -Len = 721 -Msg = 1CFC3DF19818EAA21C03FDE78CDA0C704EBCEE5866F71DD8E3B1B38C9B7354443A3174099928AB8589F5EAA4F030074D3185BEAE29B75A9B7B449106EEBB05E32B7A621962FBBA4C74162FFD111BFCA10DCFA4F909C7C1AD98E500 -MD = D946C964DCA96870EEEC874F76C33495F18D1BB00887A3B53A4BC8190A9E7D2E - -Len = 722 -Msg = 2202FE7CB2BD3C73A7FFC49EA7A459AD89B62257B842B189042EE58720D7734926FAF10293D1455B7C9A4718CDEF1910F54A3140CC70268A3138819526F173595487AF4603F31B4CF644B3C4FCE967A520143DCC7438B396AC04C0 -MD = BDEC3CAA91566CB312AD9DA2D082EA7E02879289822D3CECACF87BFF5AEC059E - -Len = 723 -Msg = 490671DB10124CC0462CE3AAB939A6873B6111DD47A0CF31DB0F188FFBB60CB1F5C29BF6A236895201B52ABB93988F3B5091B3F00524C7BC5B70DAB990529797FB08CABFA7C01ED302E3BDA464344478296D584EAC426C3862E260 -MD = 8F3F1A2B13441AA5A224432E0B07C9B598C6E802083F8C3C1454BC33223CAADF - -Len = 724 -Msg = 5A2A63F0BDCC12F2E6FA0D3A7CC1230890489E03100CB2B5FBD196F3C5CC46611F1C0BB50217B5FF5BD0B00604FB3B408937068F23492F498980329ADCEEB3F3E7C5869DAA37EF56C77EC485BFE84D07C31926FFDC1998C391A3F0 -MD = 0AE0C2ACFB5B75BE11D1C7BA61722C36F9ED31ADFCCE72AC8288552C80B1B914 - -Len = 725 -Msg = 0CBF90E972B7FAA236A4EF379B189E96475488C0CDC8163C1501355F283FF2EF2A3359F2966F3E5DDF5B619E4C8AB2840FD93284BDC1018AC8532BE123CC7928D3B1B7BE9929A1BA3F7F59D4CFA6D8C0CC5BE7EDDF878A5EAB35D8 -MD = 2F2751456D4015A80F3EDF35FB5BD93CCBD71EA03C8389BC5989C7BC012E9DAC - -Len = 726 -Msg = 43B5CF0EB20A1782F17DD07E95BDA2AED072798E4DF4FD9B6655EB087EBA8549D68A2C61B08A6B26ECEA623DD5C7D7215F0F3C5E5C4F45BBD4B580A8BC2BBD8ABFB76366E18927D25A74FBD1896536C36028CAF12713544A753A98 -MD = 173D5698E74E7E160FB887E05924662D0794A69F3BBF544AE4361182A901E640 - -Len = 727 -Msg = 0B1CB486FC934262E8DAADA5789855E2DF164FC5B5141336077B2C1589064ABD1BE8F92E455AE6AA2CE8F4F7ADC653B36F4AE3BF82134D639111BE7CC40EA02DE51AF9AD1F653E8EC56D60BD93CC4937D3256DE51CB5F1962F42B6 -MD = 6932EFB8A430FB932E9904FEA77A85F8CB842B1DBF4C7AAFE36B8220B71A8F41 - -Len = 728 -Msg = CF3583CBDFD4CBC17063B1E7D90B02F0E6E2EE05F99D77E24E560392535E47E05077157F96813544A17046914F9EFB64762A23CF7A49FE52A0A4C01C630CFE8727B81FB99A89FF7CC11DCA5173057E0417B8FE7A9EFBA6D95C555F -MD = A0FE352BA2389B0430EDBE1201032EB09C255514C5C5B529C4BAAFCEB1AC9817 - -Len = 729 -Msg = 97BD1EF155DBFF92ED40EF57502EB5B11BB43D0525805EB66CE6CA6B2C4F27ECEB69E7196FA0AB9E097FCE104FD621CADD0CD24A660725DBD32D336BBC8054FA5F8E8631239D90CA428700C962F70304EABB7D21E7A1C86093756900 -MD = E3B90E71B171CEA3B188B501A7A8407F0C0239C1180F1A2DB60F42E7B3BDAB05 - -Len = 730 -Msg = 5020D3EF88B8A5154DC7CE9FFBD5E717DFA478990A5F54241E83C4B67F5BF0B486CCC4C441A75DCAB06B5F680E4CCBB4949AC79974B242113CAF54838F926F2674810F2258EE12826DF2B95961DEC901B59361877B3566A0385E6A00 -MD = 0EE353589DA1B300C1742588EF2826B38C04A602D210E6127AC525D6A79F8382 - -Len = 731 -Msg = 420F2E0A79EDF6879787FC94F2099AE0C4A3D04BC8932274A8DDC95ACC8C7E1403659777027A8002881E4588B03B3DC6369B7AA32E4ED7624C30B10AC8E2F16DDE7561620D3EC186E0A8395A7F90E67A52931E779F8A8D6297EEC6A0 -MD = E644179788EA36F6B745DD4B4A559EAD0C64E113EB005087D3A2E435A8CA47DE - -Len = 732 -Msg = 2FCE6B9232D11B2AFFCE835A8420C8F940390D5BB74E32A85432BD09286F1F5FCE5795225247491929D92169C9E7989AFF84B61D10597B651B875253FD07C098C513C8155652A7C98CB3958D2E8329FA43B7EB5685AE19D4F427C7A0 -MD = D6772C0905BC8CEADF686B0442D08695A9E4631A18317023BA4965C701B05907 - -Len = 733 -Msg = 500A6E6A9AFB85255208BC8AC021AED541E93975BD9F83E0C7A5ACA7DBA0C6B92090B08543D888E8219EF073C959731637DC2C2AD8E425C7D85CB80FC319365DCE32B271EFD47148D2E89B39D55A820BF092C5E0739371F96F49CA70 -MD = 750785A8A9E8595E5B00C9FE65DA32E891932C0663C8E5E22C4E23B46F34E4BD - -Len = 734 -Msg = E5C9075478B6D0EB732C668AF5C3F523D4FA1983C564FF060FF725164E9AB9A0C80AF83FF749A5BA3E12538F0AA89E596E8293DE963EF6B3D25D23A53CC11F852B41539A3897878741F29CDF04B7137EFB104A395122DC4F2D8DD884 -MD = C56612982B29321314CDE272F14B1E92E6B3E9BF3F4C2025F6FC3DB4F0106814 - -Len = 735 -Msg = 92D2A406FEBC4031759A4BD3A7449812DDAFBB1F814125EFB0680458242C24C60AC3CEEA9446CBD8B5829CDDA4F17D12D621416F8A84070EB70680F2EB3E54684D97066FC5697BE7C3F8284F896966CA6607DBEA21713A18582C2596 -MD = 3D13AEE62B3613C03FBD29402A6FA47D01414BE9DA124094FA8FC45102F2F039 - -Len = 736 -Msg = 072FC02340EF99115BAD72F92C01E4C093B9599F6CFC45CB380EE686CB5EB019E806AB9BD55E634AB10AA62A9510CC0672CD3EDDB589C7DF2B67FCD3329F61B1A4441ECA87A33C8F55DA4FBBAD5CF2B2527B8E983BB31A2FADEC7523 -MD = 9A0BFE14F9F3127ACA86773A620945731DF781A6D7DC82930CCDE2F69DAC8F94 - -Len = 737 -Msg = B2CD11B36C8EDA2E79452DDD5A6D84A5B30E32F0E7AD88CBD234CA5C6C8DA088E559889130A3CD3E7FC8C2EA2BBDA9A3AD0E099F87A54B0C1C772A8425D81263F15B280A3D26772EEA18C011D66314D98F0146DAE57B03CAC8084B4780 -MD = 3A09B6C82A608E7389547428E29E82A2B34CB4DCFD6CF100712E3EED48411777 - -Len = 738 -Msg = 03E7746A3778D7AB8352C9B1B78FC83D9AFBED688AA1D8B1DF3DCDADF47C79D9C686074177C98FD35701E3CB967E2A34516BC1297D6F72FCF4164DBB286A646D30FA5C9C9984CE7B25BF7E76ED96268CD6B3F1C53592605D190DFEB200 -MD = AFCF69829DF13599D8BE8FBE477EDCDA7F152B53CD5845186A556DD611E86F13 - -Len = 739 -Msg = 81A038A15FD7D39F55041B3C436B2D2ABF168A589244AAC58AF8E3234657E0E9892344D87E57F8FF8535282CC3046ACFE21795F55F521E9720441BEC60D8948FB7F4086CA1CDF11A55E6F477B08E1FE9993F20B55533A05617EFB56780 -MD = F6609C74BF55ADAF3C6C44600FD6902E56CE3C49CC70515554F9D43E97652DFC - -Len = 740 -Msg = A2D5A45983DBEA20C34211B395736AB2E93B185F2AB4A09C9BD1221D070E196B34B736682CCB9E5ECA84491EC2CE45DE770B79BF138FE18DAE6C1CDED27992557C939ECD5E99431F2D8EEE6DBF8FCDE40040522EB74058B32EA34DF4B0 -MD = 259295D9CF7FC45B1285F1051A72DD58C6BB2D226325B94EE2A3A6F224599D76 - -Len = 741 -Msg = BE4D1EB0174E7864361BF6E36D4B017E02DA05C498747457A01283F10889205877A53D588AA2A6515888D3DC411A6A12FC7DE5FF9FFA2487CBA37204F2116261361CF243F9A686251665345702EA29BF61F6467F353FB3958EF501C600 -MD = 8245B6E65947DA886B7F07EFEFE792E9F16A4729CF0B5853F691E7AFC07E36E1 - -Len = 742 -Msg = 2034010759152F3222157B787FAF0688A0E9A470772FC1C41E608C0738085B00EFD92F0CE2AEB194556CA83C2EFF6CDD0510A7CE3739308B2D54A3668A799271E14721C33AA50359406825DD16D2F21983DB25BC195D7E2292F9B7E624 -MD = 24C5B293E6203C9CB0178BD5F5F118F5F01CF6BF0CC500FA909CAC1ACE46B012 - -Len = 743 -Msg = 32A05FC349E5A290FA9B3CB6B1E692057992AD2AEA4767E30644AE845134A1024E5A68156B4FC368DB7187063C99C33896DA02A99FFA4F7D8A22B578DF030E8CE34EF5FC3661CBF56E86801C1BE531A67B4317DC6C6576C12A9167D0C6 -MD = 7AB6D47C0D0635A5A6A4903A84140F37370DC0738A703C1292262E8B2072EC2B - -Len = 744 -Msg = 76EECF956A52649F877528146DE33DF249CD800E21830F65E90F0F25CA9D6540FDE40603230ECA6760F1139C7F268DEBA2060631EEA92B1FFF05F93FD5572FBE29579ECD48BC3A8D6C2EB4A6B26E38D6C5FBF2C08044AEEA470A8F2F26 -MD = 19E5101BDE60B200A8B171E4C3EA3DFD913E10111D96F9682ACC7467282B4E31 - -Len = 745 -Msg = 1DCDC5D09B905D1F932BEEF9D3529ADCC20322937CA3576086DF22FA0DB226D4A2E49F41A21908C2B6F77055ABB72D7769174B35813586DFC1802047D801380350FA7EBBD158DEC6C82E93AEB06E8B18B6CD99FCC72E575E5BFA4AB32100 -MD = 04CEA62D4852E54AA553EBD0C98FB32919509D493C0BE2AE8147D6DB401DE1EF - -Len = 746 -Msg = EEACB938F6285732979F3CB7CAE9023A0F187CDDD0CDED771037ECCAD2DFDC9AABE803035AED9B42A164F1CA5E754C40F31BBA3A3E253958DF75CBDC16367565FF426D30FF4435E9013655BCB52CA1140345E712D8F7A4921B1E18B04300 -MD = 8A2FD7C63861FADB6506EF623081E0A8F3158F3605AFCF176E9B19A8512810B0 - -Len = 747 -Msg = F5C107B8C6F4C0B86202A1E943B049A09FA770F010333DC67233A7754D437EAD8C183D1F8AE3A4D62045DD69F9E751E82FE078768B0314898FEBAFF3B228CC85DD7C7AE786004555698B930D288CAF17E97A3200E4069EBEF80059F32780 -MD = 057A9E28B3DBBA424A1B1134D0C748233E821C4E05C23CD8FD4635AEE20C2AC0 - -Len = 748 -Msg = 2488C513A23128D2FB1694435F708E15C4DC0B2C2FE7B6AB060ACD0096E696F8D735B6557FEE0E518870AC2D4F62759C990F458DE19AAF1473288CC4252AE745651140790058F2ED53B30B35E556B865D331D1A0B4875809FFDF3250FB80 -MD = 2C58EBEA4A889DCAE93ECE646CF47742CBD27F6D81A424F81753EE5E56D1065B - -Len = 749 -Msg = 44DFB4D53F3F197A602B273046B4D37E78C2FAEE6B64EDB48A8EC18AC173D21D9B1140A1EF00A184E75DA7262CE9873ED99AB740BA75872A37BFE3179127ED0C301D26FF6C7EC76D80C691452D2B84B05341E1D93457C7B6623338621D30 -MD = 8E871CE3BED17F29D30869CED80A739EE4B451B2606D45BE278A1F0F812AA083 - -Len = 750 -Msg = 798CE6CA7DC91C938FF9C3F3253DF0B57FD5D548B162562082A88AECB01F69FB68092CFE8E7921768636AE88C35FFFF093E0E380B28CF939750FAE3207198ECECB327F0CA80DB4B0026D2BF1B9E8C5B01DA7C761BB1DDB4ABE2CD9DF6C38 -MD = 2F837F14DD5462E88B7553AD23CD7E5B8C6F25594D6B4B02625D62595635C45D - -Len = 751 -Msg = 8177FAE4AD2299632B8CC7CA64A77777C4CB0770DA8AD86A73A1387F2A53B473EE373DB0FCB73163CFD6903EF5ABBA7464AD74D7E3342D0118C99635CFD2DF68349ECC0D2B3C56502178E33C52CE3D7EB486C5DC33FA1EE79915D232D78A -MD = 3FC5E5F0372F5C382881FDEA5766AC380A018F900B3D0275C83509B02E11CF14 - -Len = 752 -Msg = 7ADC0B6693E61C269F278E6944A5A2D8300981E40022F839AC644387BFAC9086650085C2CDC585FEA47B9D2E52D65A2B29A7DC370401EF5D60DD0D21F9E2B90FAE919319B14B8C5565B0423CEFB827D5F1203302A9D01523498A4DB10374 -MD = 4CC2AFF141987F4C2E683FA2DE30042BACDCD06087D7A7B014996E9CFEAA58CE - -Len = 753 -Msg = 6B6F9EAFA4DFBCC5968C0E9F2FD05418D0D14408DDD4F815D823DFDC3B86A6CC4CD7E251EDC6D1CD01F70ECDC0E10F57B6DDE2A299D964C64B3369041B8903B85FCBDC6F421320EE88C1963603E91C1EFDA49A9EBC6CD3BA5BDB56810BE400 -MD = E78614175EF0751FEC7DDBEB030FF4AFEC10F3994125A5AB3B96EB307300ECB0 - -Len = 754 -Msg = FCDF2D9025A965E76B1062BEBCC4263060C47FBF50B94D8E6543CC4C18D9D451B70AB93D5D33880F41AF4AA1EC9657B9041D12B5360FC2CA584886F5123751E5DC4950D8371DF9E47B28BCB548D23E0E0FD2398415B435E638BE561DA9B6C0 -MD = D739E6A20533AADFCBD1A5416EA3B05544E53DEF3A51CA481E8F99183C3002E9 - -Len = 755 -Msg = 686E9C366F294D6CBD34198F99137212E06602B3946126EF61F129A751AD217C9B65BBB64777D0CB79B0287C111E2CDF7A230ADE611F3E686837D2CCD482D6EE8989547CFFEB22E9EA6486B8F5B801A43055AFF71BB31FED1722B561FB9B80 -MD = A137FDBFF6C69AB4FA6AFE57682717D8CEB03731920B256BD2F1CAB872A638E1 - -Len = 756 -Msg = 8F3F248C4ECC21F82CD80EB4B9351EE7F1DA57CA05940F5A16AAF673320FD07337F2EF33D949A20B4F10F46FCD4BA11ACA937F485DA1F8340976BF5B8A0AF3E9E9A1357AC423B0A5D135DD22D46BA708EF929F87503BCCC210ED3CC07762F0 -MD = D7751D974A9613FFB75D78A14D6565ECEBB7F3D59265B382A30A221E30C99452 - -Len = 757 -Msg = F81B17BB20E5EC27B38A136443DCC8361D0407F9A703C395C18210B5013EF565B79D2F211D3A57FD12FAE93E7AE049967CEB74ACC197187E7CBA48A3AA334F7CA54E1EFF502E10BD8CC0261B61BFEFC109FFCD980D94339E526F49CA8C1168 -MD = DA8933B40B6C99271907F36888BBD6ED8591D25F9FE02B7120E2D5651CB1E11D - -Len = 758 -Msg = 44BC65FEEB041D28F92DECC9CCED0C82EA96A625578D136F3433BBFA45D4560FD02C4137880A5A5340BA50B508664D2D2F28E9A1DEFB835DD11917B7CB1F99C0F68255461CFB3D5B63605A41F2E767A5312F22C2763AF9AC56DF84AD2B9360 -MD = 979B9A2510EC3F007C905BC52509AACB5D37C24A613E3A177BA7F31720EE2D36 - -Len = 759 -Msg = AE840D40174167BB2263166491BCFC27D22277B34EE01988A1EAB70D588013FB67622EA09814065F4053B608661C5D1ACC9EDD2CC60FD1237A3FAF54752357D9A4BC668C22544BD278FBFA8137A70F2D749F00B64224D7F89AF7D21C658F28 -MD = C237DA7B9A1AC14C192826CAFC565B389C5C6F35E1E64104A91594F6F4B7AEA4 - -Len = 760 -Msg = E1FFFA9826CCE8B86BCCEFB8794E48C46CDF372013F782ECED1E378269B7BE2B7BF51374092261AE120E822BE685F2E7A83664BCFBE38FE8633F24E633FFE1988E1BC5ACF59A587079A57A910BDA60060E85B5F5B6F776F0529639D9CCE4BD -MD = 9A8CE819894EFCCC2153B239C3ADC3F07D0968EAC5EC8080AC0174F2D5E6959C - -Len = 761 -Msg = AEE916551172614EF72AE01261F6A0A83A3CA96DE06100D037370B33F1E1C4A48C6E03FCDAA0EFB1855DE62251035568C2E143B5ED4A7BEADC8E3880F3EBAB6043718FE1716DA54857BE77B9665885BFD917FCF3B689EAA656EB4BCD40C3A000 -MD = E8C960B776EDAC27C3E0143380B4A80990B5FDC2EC783F67D5387C16804951AA - -Len = 762 -Msg = B62D734A657549F5F0DD26152D7520393E93FA79120520AF6D18160EF699842894B298C965D1FF9CB4200F778F4DEBB7910B34049488974EAC2EEF9372DD4674CF91981C5DD04FE47878D82F7215A1DF00B5DEE6D657771F77FCFF4A0F0FB700 -MD = EC421D29BBF2A9C0E93BF85C473A31837B99FCB44C00DB991F6D35616465AF72 - -Len = 763 -Msg = 607A7830E232CC6C8ADA43E6771A47D6D8F85533B09350591BEB1372A4968766D539D9720CD6FE0DFBE37B4B2B477DC120DC152B9662B9BE32403920B942D284F092D5C7FF6FC86E14ADF7605A0B356876212FFEA7313780112E469E587ED6A0 -MD = 28A6CB2C04D6DDAD0D4B14206C9BA150045B5467F7CAF4F32B28D7FC700C0C57 - -Len = 764 -Msg = F9BD410B5BDB01459653C9043E69479086CC7843259BAA5DF4E7F14BFEA9161EE11B149CE9977DB82F4666B2027E33FB5E2F2F298EF7E7D17E54957F63D5FFFCCE2203613D248F8D1C87C675530531677C1B2F2301640748F2770F2F9399DBE0 -MD = E4C5303625E25794AD515DD1AAA901D89A46FA39FFFCBE5603984A8DA1A96971 - -Len = 765 -Msg = EA3C9C739E567B78C16751BCB07F497B3062483431236FF300EFFEE566E546610727D5EBEBB653A44616BB898D7396E9C8050F5D4569100EB64EC70DF3182A75A2F3108807E7CF8CF9CB46F8DF2DB20570BF49BE10A7CBA0201CDC68562C6598 -MD = 1435457349E61274F3B58D498DDDDDDEB19BB1E05774A80DC3E0CDA6F966D0A7 - -Len = 766 -Msg = D2FAB29E41C33D863B9D54D5289CAF08DD6A1807577A67C667E9A15B3E028D35D8FED331EA42491D09BB442900810A9188562E043BB07D445B8BCE72DF4FA79FB9883680CF619C1C33FF2FFCEB88652785C9B1DCD84DCC820971964740A7B694 -MD = 825A1129DB8922565B5B49A0512D7946F35FB12AC6D52297451E941689375258 - -Len = 767 -Msg = 7D1D7760367AC57888886DB653E275894F5E77307FD0552F3C215DFBAEFB379DEA88D2F94BCEF14B31CEDEB8B721CE65B51055357AB8D56AD4F131B9ACAD1F71861312F5A4BC8F7DF6FAA913A40DF179B887CF946597709DCCFFA0EBD4675812 -MD = 5095327A2DD5F272FED01C6084D6E12E33C828783650E8B3A557D0DA40068B40 - -Len = 768 -Msg = 69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600 -MD = 8B35768525F59AC77D35522AC885831A9947299E114A8956FE5BCA103DB7BB2C - -Len = 769 -Msg = 2EA8CEC39A5FD5C5D1702E3414E3E1B2E7F995EEE85ED45C839D6F9700D0A98717105A653C1DD4A6BA203C37C2139A94A2BADF7D91B78EE47549A44DDECE61A7D57545D1AF181264D80C3E5F6048242DB8566C4B5A19B917A6E743376C80C5D900 -MD = 64E69F5AC52460667AD20482B862D00A7F8E06E23F13E7F4641C1D9EA1339436 - -Len = 770 -Msg = 2F7BB5955EC214D7888D9905F242672DBA9AD7F069DCC7223BAE86D98E06963022BDA9BCFB4FB70E08A9D925259CB170116A232EED329E9ADAD7B2BA6265D228A5ACFD9217A26E3566C8911DAD49130E5B94AA76B63B2791B3F03DB1E223873D00 -MD = D20ED1571E784A2792CF6395413E866B0DB6827903DB0D869992612DB074A668 - -Len = 771 -Msg = 9F17FEC7F006213F7CF73F749FADE644FB82FEDB4AD040D6215C2C37E231777A76ACF2B11322BB77C48DB77F7DC4FAD97D967990CB04414E3DD5F59F51492F84119CA604A258BC449AA334548100A4E820ED8E62A3168889D8D23464F1F34DC0E0 -MD = 359D2792633DD0CA70FF79EFA2F02EE105377DBFBB792863355E23CAF6B0DB73 - -Len = 772 -Msg = 67B2619FAAF64FCD3EC0185032761437131683F4F75DAA2CB234F5C0E8014EF0CDAD47C93D3962052FA629CDC759BBA3EC8AB9CDF65D5C9B2EC6FA803DAF0A583FE1176768B81EADC4793E0CE47FF204C758B02DC21F9DEAB6267C2ACD5356D290 -MD = 2350957ACFF060CEA13F7B73CF7E79BE7A45206877156FB98363FBB3D44305D1 - -Len = 773 -Msg = ACA049B282819B944F1F6114F989DD133A8B777922A8D2D487F04776405C31DB13BBBDD2D2B7AD994B28903F9C3C74549B8AE0DDB89D20221B30006DE9A13728BC2A553C8363FDEBAEC392C4D9AE569ED57B52D8BC20F593D96D857B1EFEA18D10 -MD = E1D43912D44E4294FAEAACD49887AD11CF07D23F48EFE32F45231C523288EABB - -Len = 774 -Msg = 84D4E78D5A5CD08A94717D8AE14FE24E3670AF58851605DD337FD29482BA01BEFA38F954C9C5E021EEE41D1FA230C0AAA1BA306D6059ED113A9B9CCEB9F70D92A4B6886ECEB7E805D51E823BFA7A6B270199A0DAC2F6514EC6CC0DAC2E2D8CED10 -MD = 2F58F022B07FB10CAD763694194FCD58109D0EFD4CD21A9C6CFEAA6AABE9B43B - -Len = 775 -Msg = 43C5378EC8FB95C451DCE02DFFD1DD6EC6E73EC464AEB26D9BE6ACDCD10A246E12740D939D480D0F69FABB6216E3FBF6C53C723B6624EFD8A79E90BFEFA048AFEA723F54B0F72168EBD6B271F981B5395DEE468278C80B014EC0D483F3C037270A -MD = D9C5A20280649BC2F60D9EA0B774587EFAE67BC773B5086139C95AF39334A42F - -Len = 776 -Msg = 38A10A352CA5AEDFA8E19C64787D8E9C3A75DBF3B8674BFAB29B5DBFC15A63D10FAE66CD1A6E6D2452D557967EAAD89A4C98449787B0B3164CA5B717A93F24EB0B506CEB70CBBCB8D72B2A72993F909AAD92F044E0B5A2C9AC9CB16A0CA2F81F49 -MD = 955F1F7E4E54660B26F30086F2DDDAEDD32813547C1B95D305D882682B4FF7A0 - -Len = 777 -Msg = ECD731D02EEDBE3A4B9FFD5FDA34CB343D655176C691D8E8FBABC6A15F73B8E168E2AD9C97361EAD1EBD3C3335C1FC683882B81DAF55D9D657DA01EBED9D06A52C5C938B1D970AEC5EFD5034CE61DC9F67074A2DA145C27B4329CFB0F8B489729880 -MD = EF4FB1B78427183892416F2F893C2C081C71A2BF3E05E721BE073FE5CB13FCAB - -Len = 778 -Msg = C9CD6851FC6B8031E039FB7BDD8F1A6D7EC7854272E2309DA9CBA90A00F1F90B5FD3AE6E394067E17BBB4BD60B7BC11C8F425C430303EFECE951F5BA99BF550D98897C3723D758764A3A9F1D0CB95CA20B0BB919F061BEE4F5ABA38DA0FD146E46C0 -MD = 86ADE53C36F96F07A9F76182CFB45CCC348052BD9EAB2688FB6A0FD662966595 - -Len = 779 -Msg = C48E7340EB22C6EA14ABF7890E781E355FB37A7C278443FC710E8C17B87D13FEC7153E8E68BAE3DD640F966E3EA2813B36B017DD1B3D8D5099C4CA1EAD1C9BF5D1B92214BA10E8E0D783CE1C364FFF56F137A03189E0E62EFFF2B3535C9749F1EE80 -MD = 019B301CACB5F265B7143E10EB5D2DA2DE4E7A422CF90C274D0112986E050F90 - -Len = 780 -Msg = 01CE485175B07C55FC35363FEA239A26718D34DFC08E38E1391D4002C2B3F977A0074ECDA3AB485E6F3B0FE394BC64F187ED6A3B04A7B93EAE9876AEF77F01124ED2DD88956565669378C2CEE09D49728D3935F97698A6A3EF7C49E69104BA38F3B0 -MD = 3F41E543EA5B6AF470E7E0EDE605F7D3D6BB40849A135F8BA3B99AD43C369567 - -Len = 781 -Msg = 69D1FE474AE0892557398BA77643E7A7F0AB218374CBCE7A9D2E51B1B319EA39B1EED38378482CF5D3780F543A773D80C66783F11B793BA267F32F23ED16473B6488C4E1006916B686044247BF3777224D5F16233AFA837A9988E436AB5BE485ADC0 -MD = FD82C2D851CFFDC5FB4A56D9B77BDF02A7C7CAECF9A26537618F715E5E8D9545 - -Len = 782 -Msg = 79EF097DBFA16820E6A40454D428F3FB0B19047DD0AB46588F825ECC6344C53BDDACA3DF63E2FB087984BC58C22F2B61003CEE298C2B35EE788CD4C834A82DE93A04E8722826A645CC3EFD07F32B30C3CD59BC5C82CFF16B213A09CA24A53DA12E70 -MD = 968F4DE10B35405253763CB5F4ACCC181C5AE5B06E291C18B2065618FDBAA557 - -Len = 783 -Msg = D03DD6E01CCF153ED2878C9D3DE4E0DE7D96D91A2CE3BFD7E77ED6652616EB87188C466D44E6DA9FDB2015DD896761B88033E0D98B960C322153B51548CF21EF26029556E7FC85D62783B676EE38FAEF56F156383CCD06915FAE4395B3403E50DB66 -MD = 8F6EEF9E8D67832EE2398F69B04B475DCBF52E9E71D7D346B02F5EDC59B0D5FB - -Len = 784 -Msg = 6D8C6E449BC13634F115749C248C17CD148B72157A2C37BF8969EA83B4D6BA8C0EE2711C28EE11495F43049596520CE436004B026B6C1F7292B9C436B055CBB72D530D860D1276A1502A5140E3C3F54A93663E4D20EDEC32D284E25564F624955B52 -MD = 8FAC5A34EBAFA38B55333624A9514FE97D9956E74309C5252CD2090D3BBE2F9E - -Len = 785 -Msg = 6A15D2C891310B9D31EA4DE5ED861595938093F969102EC4E61F36688005876CAC6AA4DD19185E756AC6C75B1A77C46952D5147B52862DC108D8B690191DDFB93F9463BC95EA6054688AC748A519EFF46E0D6FFF33F312A9531B90E5B81D1EB9BC5400 -MD = 1DA5295F10813C0F72D636883C63AE8BC140744A3F28CB8389ECFA7FD74D1A64 - -Len = 786 -Msg = 4799898B930C206FD677188EDFE87F53978DDFA62418695F83A764F096CF0C3E77EA9EC22552F4EC608B59DFAD49691B076181A15C9B18539A6A64443DBED8B575CCE0BCF1D01DCB3719CBFACAC94E36CD466D253F3192F74D0900667196BFFD8BFEC0 -MD = E1AB50948EE70B7E8D36B44D2B5B073A88C38F49F408E29CDFBA73CA46C42EF3 - -Len = 787 -Msg = D00AF463BA4905312AC7C93AE0F5814D903C2CF3E4314A09D8083E8FF602ED65301BF032FFFA16E57CC1D39B78BE5F7F1B4E7D118EB4C9C60B2AA752377820F4B23F52AFB3DABA13C33E354F2AD791B98C0285B3289D017FD0B015E275F56452C64DE0 -MD = 62AABA395E7A3C6836D9BABF13938A7B6451BEDE45891814891184314FF0EC58 - -Len = 788 -Msg = 4BA02BD76E684B9DBF18AB2EC6A5CA2EAFDF25F5A7D4C90177DE0F93392983E680A71F03185136D6396A65F583837F84871CF564E62E7CEC42B58C8BA153952B28F7A9880D9D7B5FD8E1CBDF9CA005FD78D72BAAD574414E4128CA28730C29804C9CF0 -MD = 01257E4CA00F14D96C8ED551EC4022FD25F466AA32ECB348B9D4A76B7E46CEB0 - -Len = 789 -Msg = 4540739B329C3748092E2AAAD779D52393B8D97B42F784121F4C045A586BF21E33EC1A55AD2A16B398587A15297B9A8B5858572CBAA405275748ACA67FD75D5102466F5BB433A77C41F442120E1D3C95365C9A014B324B01A75D3182F88F9F89AB5B08 -MD = 9B4F94B8B9753FC6569F45B310755FFF872A1AE4C24C3C00F08B11B57BB3E66E - -Len = 790 -Msg = 19218B21018F5392D90433A5BB255292CE42EE74A3CB012B28EBF120F1BB35B3F0697B33043E90F4CA5649984EE1866AFA01457FB5F8A160AA54FB249E171436325AED03B959BECBBC8D6E323507470C147D7CF6D1CAEEA06218022444E01B5A2D54F8 -MD = 6034DF011419C3E22DD921DBBCBF27AB9D8FAC8141136EFC91E8916757963C6C - -Len = 791 -Msg = 29C1C9CF77BBF33FE3335014E7E88BA5EB777B55DF264589B44D05FC135E4C5170852968ADE4D911476D5C0D0D5E82506345A7B6A1A84EEAACDD49DE05487A6A861CF30AED0B86E320B73AA2E0BF6A67277662C0B7696E585E97F690DC51DD1F51E41A -MD = 18FFB18A1866871FC0324D4DE9D0EAA6C2BF52526BF8D858766D5185BFE8F0EB - -Len = 792 -Msg = 6EFCBCAF451C129DBE00B9CEF0C3749D3EE9D41C7BD500ADE40CDC65DEDBBBADB885A5B14B32A0C0D087825201E303288A733842FA7E599C0C514E078F05C821C7A4498B01C40032E9F1872A1C925FA17CE253E8935E4C3C71282242CB716B2089CCC1 -MD = 62039E0F53869480F88C87BB3D19A31AAD32878F27F2C4E78FF02BBEA2B8B0B9 - -Len = 793 -Msg = EDE8BB44D6C9F552F8B2C14750B8D8419370145875D04CCB213E4BD41DA0ABA1CA36DECA9710BB6C846A7DB3E90AECD10492E8135A3289393AD1F8F30FE1EB3707FD966369F766D6331ED4DE80D8252C03D88F6101781E987185EC7E277BFEB7312B6F80 -MD = 9258F0CADDF3201C8157330F743D89A18E8C5701926863BFFCDB83D0BE34EFFE - -Len = 794 -Msg = CE727EA48D1188D5AE6308DE82ACE9B491A784153CF45690B8FD23A7FE9FA4F43186D423735D56BC9D6E4E69E7B203698AA2EAACFE42064EFAF1538434A4780F13D1AEACF78A5F84C60BFA2E8753C1E51A518B05ECBCBBD86FA27EF3B64838F5FF2235C0 -MD = C862279ADC72B37720E8620F4C317E3BFDD03EAF80A21BE74EDCC59C83D38A1C - -Len = 795 -Msg = 3457335BA5117C3E7568CEF312C75EBE57BBD6EFE2C06E0D3457614F429A27A6216928507CB18C198CB9CDEE8BFF4B2EC62F29AA9F9DEF4A0AF45741CDFC3C5B96F10B8E2886AC4D24A6DDBC490E402031DAF68A742AEB7EC1C0426807A073C86C9EBA20 -MD = 6DFD346EE4884CD634890DA0BDA637D48CD1A0D745564FB4223D022B9DC07F13 - -Len = 796 -Msg = 886F0BBC8286AEFCE8684D589789A401EA5EC013B0F36CEB015860168458A68B66CE0917567D3401B6D3725F16089C9EF77978180B282D6C315B54A60D7E76EE1676C66C78367C2F3361EA0D7D88ECBCA4C4BB58381AEB2E5E061B6901C3684599B4B390 -MD = F0BF81ACEF373F41DAFCA8466058EF2327079F3AE33CEB486F83AA359C33A316 - -Len = 797 -Msg = 083CCE8161113669202D9028456FDDF2F9C911D06B732290F8C17F28675E71DFDAEBCAF0B0E2DFB89336B3B2AA6C21232949AB3567F10888437B8D895B4FD0E82D099C63B8578A51352215309900495A71BAC7B60FDA02318C381A984204532E031948F0 -MD = 27B105FD85024A805E8D13CE6AFCFEFA5F9801BE59887F100A3BBC184DD7F197 - -Len = 798 -Msg = 57E254FFFEB91C9E6625991FC2AA3083D47BE7A967E187F72EF31EE024FFD7754FCDA48C584948BC4411B166326299D0FE63D2B11A0A5F9395C88F3DBEEEC5E130BBCEA280FDBE851C48BCDF49A56ED9BA9569C244A9F7665E1ACC7921DBD8AB0B9ECE64 -MD = B07C48E426CCA1C8163BA659CF354715F5B8FEAD20019B43BC4F56986490E185 - -Len = 799 -Msg = 7425D92769338BB8EB433A25BC7CD734276B7735677AE2B95F5B485AF20D238C2EA6676ADE03BFCB54B4AEE8ADC461EE2DF2113987FE7BD3AECFE78EF6CFCC6FDB00C11CE655A2EE21AE4C9C0780D26999674A7C10FBC11780FB0D0C0E9166D34361595A -MD = 410A8522AAB2DDA6A5C5E6CF16E4658839B68E5334E19F8D609BE4DB00CBB4FF - -Len = 800 -Msg = 433C5303131624C0021D868A30825475E8D0BD3052A022180398F4CA4423B98214B6BEAAC21C8807A2C33F8C93BD42B092CC1B06CEDF3224D5ED1EC29784444F22E08A55AA58542B524B02CD3D5D5F6907AFE71C5D7462224A3F9D9E53E7E0846DCBB4CE -MD = CE87A5173BFFD92399221658F801D45C294D9006EE9F3F9D419C8D427748DC41 - -Len = 801 -Msg = A5E5E7F725AF8C544D93D2D409D6F82D3BF941D5F9783C279FC6156699A8D8D3133FDFBEA9FED5446315C33A18A93C006D2ACA4EBB4878FCC55970C477AA4E88D44094B0BFBF12C50CA62EDE8AF48AF3E96F78A96CC6DCD98480086DEC487DD003A4BEAF00 -MD = 5CE5DFDC43E6322B2345A8D841DE6E1CCEBCB69BB7836B8C0D8158A02684B0BE - -Len = 802 -Msg = DFD88A3F1A60E1B9A763B264CFF5CE6B34ADC92B3CCF29C6841D261D0DFF42415D10E3FCD96EA4BCA762BF5984B06F9DD2359538C6EA628D6B810DE79A6E572C18CD3F49DCE1CAC943E9500E19CA2E5B71142B9AC511F240BE6523A49A37282189D4A69800 -MD = B7AD8C78499986DB7D65AACB57A05530BAE330270906B419F30DA058AF16B805 - -Len = 803 -Msg = 33054CF806168A875E95D33E5B58622BD057A49373376322E9350EAC04F7424613A0C86802AEA9B8FD7BB93D41CEAEE53A94D0B66951FE0C7E93E75659A2987833765901F1A4A20A0EAC3F8AA4DC6BB075017812ED4E8CF883BD23AD17EB7DE6CC54B21E80 -MD = 0BF60AA411FE0AAC99AC17B91D5330F4795B3E69EBEE72882C9A2FA28EC48636 - -Len = 804 -Msg = 7E8EFC3504D6EFC19B36327F55DA196A13A082688FD85B63D0C48369149D6BFF4293D120A1CAEFE18AC17F046B4196DB0D6CB4CDE7739727BCB8880E652C60B2F48668FA3A40B1C94BB393E09E14CB1591343C943874CE4195251D930C772B9439386ACF60 -MD = AEF903C9FAEB819DED24786E6CB35401BA851D4AC1BBC150A2371E15505BE758 - -Len = 805 -Msg = EEB67D90755792773D303BFD27895032E74F41AFF1B3C552A2F9707842AAD7745E31FCA6EA35FDD47EA99EB27A2B063B0268943E75E629073E77D7FEC8C2E8380FDD7ADBA292803B3E7BEF8D85B23B937BC2444AB69740497902A8767F19AB91C33EC65A58 -MD = 4926474171ABF79B1AE61022783E8DCD54112BFD45E0CA1B1978116D9743A9D0 - -Len = 806 -Msg = 9C433E350E1BE986080C5757ED51FCB47EB31D70A9AB061236AAB0907C82C9CCEDFBA2EA62DA2C783CF5151683015EA75DD545E79BAD38DE99B287D25CE11C657D507D94435984A4276D8940F4EA571FFC9B550379F6148C720E4B9133D71EE120B8935A3C -MD = 3B8DB532490AD4890623CB73F0DBE567AE629137F98A504B9DF8D38659640CC7 - -Len = 807 -Msg = 769CB7E6B4DF1D6A4E50461EDF4DD06502F2EC543E85A3C64CA6B9FE378E71B1A461AEB8F12A16D4B113CC688BD3E142968DA6AD191EBD84C6FD77268E11FA83E1B5A8D61B5DEEA355E5BE623ECC5C4C5B11FA0B4951CBAF741A674065368F761594D0C77C -MD = 71989E2170F243C4791205B1FBF4C7935F013EBEE4BBE8088436657629E98F80 - -Len = 808 -Msg = A873E0C67CA639026B6683008F7AA6324D4979550E9BCE064CA1E1FB97A30B147A24F3F666C0A72D71348EDE701CF2D17E2253C34D1EC3B647DBCEF2F879F4EB881C4830B791378C901EB725EA5C172316C6D606E0AF7DF4DF7F76E490CD30B2BADF45685F -MD = 2EF8907B60108638E50EAC535CC46CA02E04581DDB4235FBAC5CB5C53583E24B - -Len = 809 -Msg = 5972087DF84E1087BE6AF080329EF86D8823D4DFBCF32403E58F9F33F889C15FE13D36E327B78A61BA646D54933A7A7B7B55522FEB9C3748CBBCE5D9AD190A84A65CDE8FBC3195034D419F41B883AF393D39F566FEA0552119F0EBE6A36C80DED27C9E6EEF00 -MD = 5CE6C84BD1F82103E84491AC1F637326F7ADFF8CCCFA9D04A60AC7D8DB3EB0EF - -Len = 810 -Msg = 6DB3F5D3691D10F0FBF2A40E56C0754593762446B21BF42C602790F3F0510D14464DD730D0648591119B425A94DC7474648127D39AD764698E5690D82357D3396DFEEF12A91F19EC62C6355A363563E08BA942A4BD06E2D05FA5C9037F3766304A640D01D800 -MD = C999446A23BACC568F11D896A32E00891ACCCCB3AB02BDB75E424123047FD32D - -Len = 811 -Msg = E5EC70D574A9AF9A358F33A15CC8C3830879D52939E6F95A695F76FAAABB988ED2A7BEF8974957C71090D3129E773B56DE379637DBA6BB29E8DC3F7116B67B690A056F2DDCE0A3C3FF65A7217D0F6EBA4BA9F5641EFB67EE88BDD80F0172086A60A9ED322960 -MD = FA6160697E3229C04EDE2A007D9C2B9FE79E2292B2EE58C9FEDD375612B87C65 - -Len = 812 -Msg = EE5B52EF1C171ACEE68C2E3C4AB9BA08B91153DBA6C85CA817BC14E3484EB6B0E4D93766AAF37C3A571A52950EBE5DCBFBDFEDE238866EC6CF0B41FBD86518A07C360AD1BC4AEC074EF32083E9FD19B7F2C19ED5E7A0F162AFE1F1FD11C38F929C3D53BDBCF0 -MD = 0A0D6BD4ED6B19F7252F767D6E4BFE0A1FA9020D3A5945444F28C753F22C93A0 - -Len = 813 -Msg = C27E137ADDECA1E45434891C08DE549E79A79D148E46B8A99727FED7C28CBA6662BB9C8DDFC9E631E410FBFA899B2FEA7DD27CB49DAEB1BC51C85F3FE220711ABB10836F97B6A2D0D27010719C002FE8BD88406E051506BD560E945AFAC765C8ECDC0E476ED0 -MD = 737AC3E61EBC494CAC48B8C368255C11F7F5A4EECED51B55946C190011050BAF - -Len = 814 -Msg = 1A4FF48A014B9B9B73ABF97D0D6C8043CC542ED70226C9A06439251E676B59DFB775688A6AC7BE695A4C768F4A635186C98F7D87D31333BC0FCC3562B41333AB41A1495C615689892008E50C46ECD6F0CA33672219F15F0F583248A5283B3EEE67A750E310C0 -MD = E6AF688D65A0C60C5B38A83B505141CD2E38AB6AD4C18F2F8511CEB6E85FF4CC - -Len = 815 -Msg = EBFE2BB16E038B5E58D23E44300E75911B153B031AE0EA461F3AEBF8DD9B4E4BE5703F18E8205293E2E0415AED09AC41E8A5937FCDA3796C2997143F5DFB6B585C7652F1ACCB8AB4B6123196628880670D5B07DD989E04474372E32FFE65CC7192C42D25B1F0 -MD = 2A0E9E66E8E14E8DDA0C880610C4D4D15BF3873226B806F41C302836BF1219E0 - -Len = 816 -Msg = 006917B64F9DCDF1D2D87C8A6173B64F6587168E80FAA80F82D84F60301E561E312D9FBCE62F39A6FB476E01E925F26BCC91DE621449BE6504C504830AAE394096C8FC7694651051365D4EE9070101EC9B68086F2EA8F8AB7B811EA8AD934D5C9B62C60A4771 -MD = BE8B5BD36518E9C5F4C768FC02461BB3D39A5D00EDEF82CEC7DF351DF80238E0 - -Len = 817 -Msg = DAAF92F1DD17419CB8CFFC3B36436412E393C29822EACE765F18D5531BDB87BA878A816D73FA52842FF6A4590614E9B50C1FBA6CD3D538E8E07E1BB7967014D5E4906BB5CF070097D4B57FD44E705AE825A2AF35E265639E85C49323CAE2BECF48C13E400ECB80 -MD = 55082A7214B5240088297A7E58825A15063B14867A76A088F73CD37DA79D8244 - -Len = 818 -Msg = B5655245E132143776E7DF7EECF7590B09EC823EECC6E2E3D3E4724C4CF7264094A7CF6EFE235AE4CA71C11A64D020FE13F472259AF9D0C8773CB0FCDAF86D2D602CFAF6690854CB8831730529950DF7E65D8EE9CC3B4C89CFECF054EF0D4BF8404D8F9B849AC0 -MD = 6AE29691919FD5A093DE0E4848F9DFFE46AEDC9FD39C918B911147E5D477BD86 - -Len = 819 -Msg = D4A9D0503F80C8A4BE00A5A1BF4139B846DD1784E9547D30EBC6241ACFDEEC1DAD4BE6D11A8AEEC157D59F61972414BDE06D17CF56274547201A5F90C9EA82B64E88D78850C7F968E15AC8A82BF08FF53328A3E15DE615A21C28A3D42436F84C55F234EF23CA20 -MD = D38301C7965C46CA87A9E977D40C03AD946CCB79E326CA3B04290E01A29FB302 - -Len = 820 -Msg = 61EFBDF5987F9C45CE71F21DE495E46DDEAD02E679ED9C83A0613BE3FCA8660145F47340FF300657271024C3E8BB7E27F31406EAACDAB3C5F299B66C101B0083EF230A7283E868337E8699EE3A5723C42BA488B0FCDFF172E819576C5993B496BD768276A113E0 -MD = FBADF8F9B4946790BEA1F9EFFBA945664EF63E99B277027131130295792317B9 - -Len = 821 -Msg = 6674A76DB4DB544DA1D6FF5D7A01ACD0BAA446911421C7BDB19F347DAC8145337FA2220A1760AAF88A5803A6C2502E796BA486600946B60F2171E7EEE138F9A93CF7EA8785496B078CF26FE15627240D528B205054AD68E6FEB7F5F0B0DBA570A86A44B88FE3A0 -MD = 7DDAAD764C5C95374844C85777F34661002A59E9D132413EBA45D36328F2D5C6 - -Len = 822 -Msg = D5CDD6DC483DD693792AB8599E31F7E678E2E3F50E9B09DA1D16537FE21B8700B47CFBEC2F2B31C83CF612594A3D847B2A0497D3C1A4E78A75CFE94B850F08580D799921A2A105B7280B07629845E2CAE0ACDD43E62C3CC76F2BE06F11C233B32C8CB32D2CAFD0 -MD = 6BFB5E14D897D07BE45A29F4203898B98E68FCE784D8EC7A72F43802AB89DF5C - -Len = 823 -Msg = 95430200EE2A59BA3D4FF5176E9328EEB792F57838631334BA0D95862CE2BA8550ADDE662EC5689D2932B6637ECA4268861BA868C5FB08DD016DF6E3F5E8F7BC86C063F0B471A94BB02C999C13D8A89F2DC536ADFDE9048E836674E781CA2F5247A23FD280CE30 -MD = 53CDB6CF8567757C7946C9A3A79D5365D99AD550F5BCE92FA109D3A895F56FA6 - -Len = 824 -Msg = F13C972C52CB3CC4A4DF28C97F2DF11CE089B815466BE88863243EB318C2ADB1A417CB1041308598541720197B9B1CB5BA2318BD5574D1DF2174AF14884149BA9B2F446D609DF240CE335599957B8EC80876D9A085AE084907BC5961B20BF5F6CA58D5DAB38ADB -MD = 52CBC5DBE49B009663C43F079DD180E38A77533778062A72A29E864A58522922 - -Len = 825 -Msg = 96EF70D6957AFED1EBF9C5E3E1CA33DCEE14589C8AD2C7819B401D8C93473A06D0CFED12D4155488DE13496426F7808C666927DBCC54CD58F82A9D7879541D6F66FCC0239E89DBA84C85AA34FFE93DB632AFE2B490E2794F95A8A6C14706759688696354AF9E4C80 -MD = B96D49E84B4404B6854FAD6908F10C6E15DB9BE58E155EC7882C97E51E1162D0 - -Len = 826 -Msg = 22BAE2BE6335304E5F9779FA2FDF496D9636492A8B3E6B650420DAA6B45BE8B25A2F00045DB1364B1F69DF590EEF88E61EF2F2E11FF9903C9A484B0EFB2A65E2984710C71688A00A8C04AF9335A826FC0EDF197B3F3BE1AA4685BD39847A18B7F388C56D5CF749C0 -MD = BE1F38422DC757E7E1B8B27BCF11E7FD957E34753130AE7918DC98EFB407CFF5 - -Len = 827 -Msg = D076043F4045A478C51530D457FC950916FAEAF555C2B28E8567394D0BB8A3C7D8A7225E6C0C94D39D03F0F50133ABBE6F009302153014025FB4B1F7B8EFCC9F4F9C3EAB0608DB41095AAD0D2B63037F3986DF71D6651946EE9F18DF52635BBD360F21E2555C5020 -MD = 80CBD03A05E7F0327D8904D69232189D2CDBC00DA720F00B46CD25D91D86414A - -Len = 828 -Msg = AFC0DFAD531BFAD5320903F56AF3D1C6A1A7EEB365004B5193F48B3F1B6364B502B3E767BBEC8D3C8CB1888BEF939745427AF225DB0B80227382E93478D80798D6F7CC79E1229126763B5595747708412E2A1065468967AF88E87CA44BF7C70CD94D6C0285D77D20 -MD = 26B719FEBE8B5D91C3DF27D6F769DA2C156871F7EA885043DF4452AF0437EE91 - -Len = 829 -Msg = 38F33BD532B7A176B1BBD5440A6B6F34BA5EB710A4ED3B73195E79CB0D227258C97771B69CF8319D30F71A86B06A04D4F8F564044B25595FDDC559435426F6802FAC0A9B8EF02A66CD99E052320F3EFAC5E98F41DC62177FC5422C0C7CFFC845B61C93465BB61A08 -MD = 26829A633FA2985F5B5DDAD881ED67FCEBFB904760CD7C110D8BF23070B82991 - -Len = 830 -Msg = 4A1D225317981D38424F1CCC96F7D895EFD4DBF51A0B568BFDB33F81AAC34098EE0D1F8F5819885FCF53823851E2DCDDC4D42164E223DB7F0C8A25655E91D193D595D31808C1B11115BD5913548A2A7F7C954719A1EE305D67A59AB3EEE0BD1326D2C46FAB79FAA4 -MD = 10FEC90DFCA98D1D2E21836D6B49E0AAF14A5293EAB60D2A0F8A2AA6E788298C - -Len = 831 -Msg = 071E9535D8B487FBAC04DD0C720CF0902365F55279752F4A4AEA2DC849F6F596562DD874C2FBC90A0773CB9AFFD80BCDEB16673471B2A4EB40410CACA3D7DDDC57C727D3FB4D25DD147C77426DEF0A86BC0840307F6495493714BA9C0C3C1F4959016F1F81A5D466 -MD = 74BF8B9CDC80656EE3503776B1F4702427617221480E43BFDE529637D827CB8C - -Len = 832 -Msg = E35780EB9799AD4C77535D4DDB683CF33EF367715327CF4C4A58ED9CBDCDD486F669F80189D549A9364FA82A51A52654EC721BB3AAB95DCEB4A86A6AFA93826DB923517E928F33E3FBA850D45660EF83B9876ACCAFA2A9987A254B137C6E140A21691E1069413848 -MD = 3A8DFCFD1B362003DDFA17910727539E64B18021ABBA018B5F58D71F7A449733 - -Len = 833 -Msg = CDF3B81753BBE183F089CA5B99AC4DA2944DD2CA4AD5502A5FB27D51FB4C5DD3A73337F3CCCD5F3EDAC73F23BC14677F8862E94A9C899607E9CDD242D399C9CF2CC17AADDCB2B1FA86691B82BB3F80B8F53BE95B3806BA1D61555ADA06C1F16AA011F99CF8EC913980 -MD = 605DC4FFD6CE912E1269D62DE4CBABB61DA63B643FB25421404D299B5831A2B7 - -Len = 834 -Msg = 1719A08AE56DA8261AC8CC3B0E644425C1A4AEDBE7563BAF61591CA0462F4AA5D0D31CE15F9A616C8980017C0C886C80AB258958074ABFCACAC023E671D8509AC053F5AF9456C22D9A85BE4D1788DC12E7F14C076534BEEA7FA37921A4F1336B02721AD135B6E57C40 -MD = F92AD0A89F5D247611F9F6425C3EF929C96BC58BD3AC73262EB2D85F002C4614 - -Len = 835 -Msg = E483D597CCF87190A723FCB835B7D58E051122D6641B5A2BF495BC121B50A1D087146DC722D08785DA3690C569CE1E4FB0C1241E501A4D3E438BD598E637275B08A3130F13789F01E1F0B87317BA3C70155E6770060C1058C73966D534B38D1D99AB40C39810428000 -MD = 8F3385CE972CD1311D27D8FAE1B14DBB85DB4711E4650F4BD09E75F21D7A66F6 - -Len = 836 -Msg = 6C9018345E122A389CEF69E5DB5FFEC001A5D9BD4ED6A05C82D236CF90A6D4FF1AB5DC991572097413D308272FA40EE4EE7BEA95F4EFDAAC6EE20EBFFED180C9A002F491CCC42490B1E51A284E309E326F43530A5C2745E82412C6A6C7AB8603E0F264F8B9941FD260 -MD = D2FC4C582A0AA483F6FDCD0BEA63C0D0B1B59A0C25A9AFBF8A5A748627E5A246 - -Len = 837 -Msg = F3160A912C1F7C08CEAB5E6C6E94C50FD124F3DD9C4D8034D27C80B39B7B9BF130F861D365AD61DFA407A8EF91AEBEDBE23E9DE96406FF0C6C312553FEDB125AFD59F7711210861A5A476B293F3CC355425CB949C2E833AE4A30DD9B4CE35EEAEF2FBDE4FD6D32B660 -MD = 7275027BE5A0B4389F3FFB3A13E2C786D429B33C5FF1786399C5DAD25420213F - -Len = 838 -Msg = 4BF1FAD35729900567FB4A3E0D5681C689CD0066EE0E97479A4A746F5E771517C42B6B827BFE16381CD52A985002160833BAC1AF81269F18821B0E6CD6C54AD33827BE5094BAFA6A08A67502714EF0101D5D91E8AA9AB81031AD2B6DF4963709DBC790ACB88A527698 -MD = 1EBCED66DDAC35E1CEAF1B5105068D4ACE58748F96950261EFCD4CC4E25F4825 - -Len = 839 -Msg = 195361302C2F5B1B927CEE67B003E885A4E1D4FAFD7D13B02F5FB743608902060CCBCB200A57B374C8D220828DB36CCDADD6EE2AB33EE53B2002203D632B36B45E13778DACE865A715B375FC8CCA7FDBABCB5F1FAC8BC2B890D5A460583BDC5CFEF67A0BBF143D3918 -MD = 325624004121A0072F67976F7EC23488A883A16F015472B06D1C8F3A6C3F4580 - -Len = 840 -Msg = 64EC021C9585E01FFE6D31BB50D44C79B6993D72678163DB474947A053674619D158016ADB243F5C8D50AA92F50AB36E579FF2DABB780A2B529370DAA299207CFBCDD3A9A25006D19C4F1FE33E4B1EAEC315D8C6EE1E730623FD1941875B924EB57D6D0C2EDC4E78D6 -MD = FA221DEEE80E25E53C6C448AA22028B72501F07D1FF2C3FC7F93AF9838B2D0A9 - -Len = 841 -Msg = A9C9225032B1662ACA561F01B0CD87798649F98A7C3C71F716AF72E55838536563BD092AEC04323328C107EE20D704D0ADC7C0DA8FE6598218078DB1D0F00874BFA7048039416EF082B6925623FCEEB145919D75C27591952EB7B363F784258033AEC75D5F3A9D81CC00 -MD = 495B712A5ABD6CAE4E435CE8C36772E18970312E315C5C824EAFAF3BEA7F135E - -Len = 842 -Msg = 1713AF8638ACE90592AC2B3BD76514C19F032C734641D29131412FA04ACD5C80CAE7FF34675E7B26D38488C0A5A34F88C36903ABAC06A319F59559C52F409C83C92CC07CAE1E1957F1B54ECBFC52F5F38F4B03D9573F5E2F5A5C7470D7F1F0BB4D356F13C4D401580400 -MD = A5CB86BB638F86836F0757CBAF33B845B62FEBFF8EC52011EF019DFBCE8D03F2 - -Len = 843 -Msg = F0B3C5E666BFCA1D234692223F77A6B80A0AF6C1E2456E8BFFE24147DC8BB7311386E21BE38FAC428447F89CE69BF5D399D4F10CFCC384B0643229D22AD5D1A96B5AF06743CBF8505C99171439E6F6305C28EC2D87473ED6181BD2FAB7C35610FA3D4B373D5683904EE0 -MD = 894F76989A753ECB43A24F0D32CE331B50F841EE333A6AFBDFA6A180CA940390 - -Len = 844 -Msg = 51F0F520821988794FBA4A96C05CA8128955155F49F5B1D4609C8BEB3796E606E105873C4E1A9E1A1BBEA9C037BFA266748DE15EF59A3698068B2F64E448661E528299DA53F217527109628261FE236227CE792C93C27A86B742023A91E9F4EDC9C16AF3F9720BD6EB30 -MD = 7BBB2A3D7B5C6D73ABABC8EF7D0F2D0A730D85F4184DBED9521CFAFC3F1D188F - -Len = 845 -Msg = 5A601FC60FF03D6849FCD88E8E124B8AC906EB9002B91465B98EEA0F1C638EC35989EF537DF63FCC37FC465C3AA0E409378786B21CD884CFAED67C00A4784DC7855FF0CBF4DC78A9FCA92EC641BC5EE01960E6FDDE2418FFEDC338581479B09680C1579A063E7D7344E8 -MD = 9631CEFA06F73B894377BADFB34BBD6F2D7BE73E824484291EA116E5211FC745 - -Len = 846 -Msg = 51B98503D91D779B7661CD7D28851F2F5FBD10D3FF1ED31743A9FC4B6D65FAA01E7385E0DE50DD1B4BC392D09CBC2042DADF5A827B305CE513648A46B35C003D6EAE1524379BFA009FD0CFEC537A5BE2516A524A8309A65AD93AC83B83479F4BA700307A7A1C5295CA18 -MD = F3C2E4CEEBEBBA8EA3506241282A6BD6AF8EC2280271BF22A1F59E0A9CD8BAB0 - -Len = 847 -Msg = 3DD565D9B8F291493D80301C50833F016FDCA70D35E6B66D8ED41AFD12B21AF8C675D487012EDC75A168124C9F7AFFEC4DD754A3B3050AF799D23E9322C328C61E131789DD7EECC47D0D973908A4B2706E3AAFA9CD9285470DD1877C164B12B9E45B7E8804D1C01CB866 -MD = C4054807C918150648C19C4FFD0A2B1F5BA683911F8B947E0A8FF6E5CA7040EA - -Len = 848 -Msg = 5954BAB512CF327D66B5D9F296180080402624AD7628506B555EEA8382562324CF452FBA4A2130DE3E165D11831A270D9CB97CE8C2D32A96F50D71600BB4CA268CF98E90D6496B0A6619A5A8C63DB6D8A0634DFC6C7EC8EA9C006B6C456F1B20CD19E781AF20454AC880 -MD = ED9C8B87FCE27BE4E95610DB1DDD0C035847F4699DFC8C039A798A30343A6059 - -Len = 849 -Msg = 8D22D0A3F113581C2C91A309747D3480D111FB0162796E06D48DAD005BD2275BB189B08A55FC56FDAC5D28BCE6F9EDCDC32EE464C1675C738AE8624CD20F7FA84A173329E3623DF7541835FECDB68416F665E4F5B4A357D74AB09EACD4EE6E3A301733536294A937FDCE80 -MD = F4422E22CA6C6555FA094E739DF73D401741F161B558A894C376A9AC578DCE63 - -Len = 850 -Msg = E7EA0B40D3BC92E9624256442D52F477AEBF8473F1742B50C80783548BA450FEBEEC40D7DC7D3BA8D2B03BD72CFE1E36FEAF85681D155C0F435195E7533BD6048FD0796C05F6BB7B539F9EA5F51C16C6AC74DD79C3842218565C4B46D85EC00FE324E8489FF25FF5DFAD00 -MD = 2684D4B11DD959E94DB6614759401BFF2A88B521EB811B7FC4BAF34777ED6CD6 - -Len = 851 -Msg = 60A997F14924AF0BD818AAB8FB4FE112B298FD0D7556A4A118974E1612EDF6F479C5247F4BCF1E7ADD3D1D485317C668A1F627E0181F9E6ED35C4499A487783CEEC5F7AD330EA18989700C4A622F578A4A04FE0DF9ED9A7E45D7E5D79E5F26A68B0CB8D5E5D96CEA36EC00 -MD = 0F6B19FA5C3332F1EC1BF9DB72751965B2AFF74CBBB892C55CAB355F4F7C3F7D - -Len = 852 -Msg = 162EC5B24DDFA48F4AA65289645F89CE3991040461A4240C59397253C89765295B27B12E19D5C1CF9080B45AA7BCCC14A0A79B3D7C428F48397EB429E925B4FCE06782DFE2487C6B0F0480B8124A15F6301259AD8211C3D859B705357E8D23AA92EEE769149F5171A33C70 -MD = 0EDF608A17586A5E751BEF65BBD43B30D6E422A4FB48E668114A9DE6762B8131 - -Len = 853 -Msg = D9C4E4068DD2D247BCFCCAEA5734472961D5C916EEBC714CC0FEE54141CC5DA3435CF8D492FE3BA399ED175911A195FCDFD22EFB57FD9D7D401C445B29AB330211E3103399794B205EC65B9658F9E425972C214ACFB1F1B481CBE2F4CA561564DA47383772CC8A190A1090 -MD = 2BDC2402BEFFA5883190FDDBAFDC51C657B25FF3074E413AF1271A8D08B97274 - -Len = 854 -Msg = 574493FD995F2E299A0794B67AEFEC00A2015B0DA8E8FF1C1913457580BBF6812551A2F45821B5C864B065E9CF8CD6A4B2C7E11B64F7F572824014FDA485FD6235D30E9B7ADA48FAEC98F6AF9E5022E422037AC57EDC00EA528181E780863EF47E834E0F457FF410DFFCF4 -MD = 089F41DD86AC700670C4F94DF48AE792E14FF5DE7DE4DFCFEABEB57A1B8C52DF - -Len = 855 -Msg = 3AEAB6285D74E6AF887D78B6A22059B2238CEEF2482D961A9C36A032158A8262061336ED09FFB7ABBD3D49B8EF0851DD5DAEC4970D27F6A69BCA5117AAE0593AEAD6BC6615D11ED11B057DCE996D614FA80DE96EA704C132578E9F20550659A6E483B4893122FA3B224022 -MD = 372E4DA57B4C03A09B8B59B57539B52EF7119054F8DEB4F48074283838B0115A - -Len = 856 -Msg = 03D9F92B2C565709A568724A0AFF90F8F347F43B02338F94A03ED32E6F33666FF5802DA4C81BDCE0D0E86C04AFD4EDC2FC8B4141C2975B6F07639B1994C973D9A9AFCE3D9D365862003498513BFA166D2629E314D97441667B007414E739D7FEBF0FE3C32C17AA188A8683 -MD = A485CC9CF4CA4F659F89A0B791A4423953424AC57146B879D385A9E4062AFE52 - -Len = 857 -Msg = 11ED52B37CB6F8AFF28BFBBB49E4E346B84CB02B5DEA39CA1409C16C589664BABCE3C7AB4539626907269657249DEA708A63E1073AD1E2AF1804E43472399B6EE58992638254B581843924CAA9AA3C461D09241E76FED2C282E07E95039C9889DD6383E8B1C941D70B5D5280 -MD = AB3B5F3125CF3F57F16EDDF4F1515564F36051D35B47E3136B9D1994C270CAB6 - -Len = 858 -Msg = 716B179648AD3C2346DED9AAE6968D91088CE60038DA2898BDF5645EA6EFB342DC043F21ED12CB2503743B618600B92EA66543A0B676165A2C161876E5E74917D1CC8E6649C51B6C1DAAD6BB39CE9362C1043C6A2DB31C05C64CE78FD3A33CA595A534FA036E40A89712EC80 -MD = BF6CB47ED00AC2B9DC58F30492468E579D3E90C12102FC5D29ABB2401F52B350 - -Len = 859 -Msg = 9FE7597F6E6F36CF0880765DDA6B7B9DDFD35B1C1F06F08A234751DA553BE2E54CA9FAA02751F6F44C37A69F666D12D80ECAF508185831DACB5014CBD3F8097B2D84DDF808CE2286C8D5502C3740780D2593B037A24A9A5A27C347E85C6C985AA933DD204E47D33EEE294440 -MD = FF223486DA6A0FF298050C6A184D8FBFF38B7EE20FD27D7657505B4E6588222D - -Len = 860 -Msg = DD644126DE54607B612C2384A80B3B47F3E3278BBF40372D7DA4C53003A4F7D39E845A7EC6E6FCDFEDFAFA31C0B13F8988F48F2329C0533E16C9C84FF40C123C421BFF9D8CC1B5561F1BD89178360ABDA3B29CA3870523D18FCAC8FF4B462C3C0AACDDD7FFD183FDC2E65810 -MD = 0B4971D7ACAD5EB55C8539BD841ECA62DFE8531D813CE71B7EA8824C9641ADDE - -Len = 861 -Msg = D5836C5A1E008D30DE039FB99096EB19D3A679E32D33ABBF7F414F37A9B1B790AAB4625D50299487BFEED13AFECD7F6BA9995AFE7872151431A04E04D101085DB55A6703858F0A43226CBA7343076690B2B97D58F1B39226F5353073F53C4D2B9590AFB71034B2929340F528 -MD = 6A90A232ED59910F2496C70E98441406B8140F445811E51CFE2A13A224906358 - -Len = 862 -Msg = 5AE530EA690D546A4B86ADA0775066C3C7C94A8F0503A0F1939EF21BDF7916CD3D63F154C91C401B9A0A875DC17927E2FC0CF66286C8A2B2139F573036CAF94B2DCC2B04598ED332975308B684330C8FBB7045690E25BAE8CF2015F9927C73C529FB699F60BB9D272BAD2340 -MD = 0A8D8BDF0CBE8D05C61AC2B9456A3CFDEDF57DB4B261D424BDE026C2683D00A0 - -Len = 863 -Msg = B24C20ADA2E35BF97724BB745334D4DF9399F22CC3D7E249ED004AFA98F4E2CE79567AAF543EBEF35DAE9D4545185B88BE1D33E2AB5E5B5FFBFAF00BC96AB6F4BE5A6A3E12E173884461C5DB1E67A81686ECCD9B45D69371546A28C50DC3B2D21EB097D20C14A7EC4F8F8C38 -MD = ECCF64A8BDF56E1E7B8CCC4E05DC130F81DCBA5556A00D88FE9629445AF8873A - -Len = 864 -Msg = F31E8B4F9E0621D531D22A380BE5D9ABD56FAEC53CBD39B1FAB230EA67184440E5B1D15457BD25F56204FA917FA48E669016CB48C1FFC1E1E45274B3B47379E00A43843CF8601A5551411EC12503E5AAC43D8676A1B2297EC7A0800DBFEE04292E937F21C005F17411473041 -MD = 93CD4369A7796239A5CDF78BCE22EBB2137A631C3A613D5E35816D2A64A34947 - -Len = 865 -Msg = 6C089DC0C0746EB94EE1BDDD372CB9FCBBD340F858EC3379B1B43C0B9F48E9FD66FEF9AD9AD5F9FE34E8FC385F1F23DDC6D4C6E4DE2AA2EECFD328EEE188955A5D8A3BF87A885DE41FCE956520867C43A00E36D0B6943B470B52584F5740058D78031B46DEAEF6BC9B76D02880 -MD = 90A4E7216C8452D1EB8F0BF92F7669B53BD5E738DBFCA4E4FE8FD687F824A09A - -Len = 866 -Msg = 38EF1659BF482F6DCE756B7D3B7F96AA8FCC7C25A000C590CBAD9BE30F5BDDD941352621883D0E5135766E147578D3553A484BD407011653DB0105CF28DD825836ABE332C0E04D6E36981290B21695B213035F4A39A7230B93A1174FF7D6107145273A42177F9649D5096DC980 -MD = 0296211CD2C739F7A68B3337823492326F93068B7693B69BA5EE9064366A2C53 - -Len = 867 -Msg = 1ED4FFE25D9FA1F051658E44DCC5299DB496FCF0BF7B5A0533685BE2A96198C15259A21527C83951DD8AFA04F65978A7CA01CCD6DFC6953EF152B8B112980136BDD47C78B8E8FD660BE8CCF67D890173529061C722ED593478ED4D2EF7FC0787E2E259045259EAA8152576B520 -MD = FDDC251295080930F51517C540E983586B2E745BA1A939EAA291BECEDC89834C - -Len = 868 -Msg = 4EDC5CDEBBAC7C80D4C9FDFF4D3482116A02FEA7E4311F6AC00E17383C6E4542D9F51AA753739D1250A955B37081BB573B0F06103300CDEC753C7EE544B36A735418EEF115BD4777871F887022893C4B51E54F90122BF9A06EE20448A7B75EB649A36D6E543765489B13A1EE20 -MD = C685E5BF466297404BA52F1084C15A81EF5F833ACF8C74EF755E9263A37FEC1B - -Len = 869 -Msg = 98450F06D846FF0F6DAFB7FD5A9E902537527F31FA6CEA70B8F22880A9DD01F1EBDF20884D235B884F438CE98B5420F195EC0FC4631FEBA8964141F28EED890522DD31F93EDEE85F96B6DAF92A85BE48E959642E922299FDE360F25B5BA2BBDF1AF40A222D09EC045A5AF5C608 -MD = CB9092C794E9D63F432E7E392578DC7D740CF8366BEB66500598CA5CEB03B2D4 - -Len = 870 -Msg = BD8C839CD9FF816E7D8706EB66F2FB60D3EA400394504AC21A3AB17DE594A26A7334A8F7A6AB5576EA8D78A6C69F1D9E3EA5B7AE20B2834C72FECB08423244FB7DB810CDAD3F041B54E12BCFA6678AEA075A366369525B195173665E78C0953EA46C4116D7EE9CEC0041A9BB0C -MD = 0282D99A60FD14BD9876B945D215D32D10C23A5F5492C860802DE569FD9D72A7 - -Len = 871 -Msg = A4C6DB6224A23DB87F291FF0B0C6C2A7925224594E60E1FAD4D4EDBFFA35F5EDA3798029C3BCE4DB2A78AB04C4A408D5A542237DCC1330AF47F0546D35AF06B2977DCE2678814E30B45418B5E97C6041BBC13697692C347769905D5CF06877A1EDCE1D6AB4F10DC0FB4F314648 -MD = A12A3762184C542BC887B42A0ED761AE044CF379211B265B41198BFE5DF35E33 - -Len = 872 -Msg = 758EA3FEA738973DB0B8BE7E599BBEF4519373D6E6DCD7195EA885FC991D896762992759C2A09002912FB08E0CB5B76F49162AEB8CF87B172CF3AD190253DF612F77B1F0C532E3B5FC99C2D31F8F65011695A087A35EE4EEE5E334C369D8EE5D29F695815D866DA99DF3F79403 -MD = 3751CE08750D927EB5C3AE4CA62A703A481D86A4FA1C011E812B4BC0A2FEF08D - -Len = 873 -Msg = E0473E8455316C13A301D697B9C17DE7D843F6203E669CF502F2E7260F0DC0717DF3AF7C64C3E28DA3A46C2DF401CD0049E5008D2FE32BE8060AEB272720585B8BBADB413547FC5EB59680CBDD68430B7937A5FBD3E83F9DC8D08CC928F48773A8166C4616C53B9CA0E8D56E0000 -MD = E5F196138E6D7F8E3D339516406E81AF2C7A727E7857BEEFBDD8FF35181DA03B - -Len = 874 -Msg = D9293EE8603E4D1977F7ED45626ED5498D7FE581F27BD0E62A8608CE5EDCB826D711830E50840D2E532EA5DB6E668563719B6FC8FB317C989C692C5C2964E5323D209FD600FD876941A0F8D6EFE5EED4EC8D011D6147B4E75E1062FE812A27A1D010B45E9FECFF24C55DCD5F8000 -MD = D54D5D8909BECDBDDD1A5C823E88D4F8D27FDFFC69BEEB7CC83A28F4C14512F8 - -Len = 875 -Msg = 885AE9439FCF219F75F227AFAE8AE85183C863D2DE3AACC2D3633D90020B9DDE7CDF0E5AE202FC18987F265F782459712A43FE2C4D435E64E6DA7F813113F566E4EF1E445E36AE673A34733C383DC421F1B13D7561A65BC9AF5779B9E65DD51DC98AC6CFE1B7412B53AAE68FD480 -MD = D8519C926638199F7A65A8B7079CC5D7C3D5F0744C317CD4340D4E4AA8C4B6E2 - -Len = 876 -Msg = 94BA5F913C14061E96ECE9E552301D4A1ED6C43CCB8F86392A0D5C4574146BC1EDF34CADDCC197F8AFF61C1DE42B92CFE24908D88FF84952E6A60BB81392AA7110EBDFEE2D3627481BCA009769A4861E7840D83D316E612A01820D1483B07E393E9C75022DE3D2323F026B0E3840 -MD = 1E25A00423F27DF1E87207A3F3E1E5A2FBAF0DA750E079A514BF55023C13ABC0 - -Len = 877 -Msg = 899A55982CC299EE96744F2A374850A496D86A3386CDEB1633DB5607174A8EC31FC881DA9B8E2137F92625F33A69769DD830F358E64E76605CE0DB6DD547791DE9F2D64EEEA8146D18C59F81B9FC93D91BC05FB85AEF9F2456668EC7A9DA0A86F8B4D607226713741393F744DC60 -MD = FF0E61FD76EB2FB4AD27F2DF72465464B549E5D776BB2B0822D0C8A649111B77 - -Len = 878 -Msg = 85F6897B45BBF252A97CC12A6E3EC901A05AEAE252062C04551573B5078F8C973A709CE932310355881CD0469D10CCED841863E3AB1646831F298D0732984B15FA085F65B484A5B31B46B5549486F95ACFDDFBE9C4523EFCE83E7817E03824E906D6C72BB17C0E4159875782EBFC -MD = 5F0F3FEC7E77C61E12109B99DA675A26315861EA38CB460D75C4C4C12B712B07 - -Len = 879 -Msg = FA5F18A9255EACE5136C5FD603199E3438A45618547D99321FFD907EAA47ED4F16B8B4A5B40C878D6C9804BBA983F007AFA7CC98C6A274D07139927CA2ABAAB6B22F65921268E954CFFEFBB1DC2B0EC09F5FAA2EFE0ECC0638601A94A52E15CE4DD3F01C1DC7AE530710D779F908 -MD = 668F97012C9ADEB43F5C23E551E7DD2D52A15E639F8C0A59279934EBE81C705D - -Len = 880 -Msg = 47C6E0C2B74948465921868804F0F7BD50DD323583DC784F998A93CD1CA4C6EF84D41DC81C2C40F34B5BEE6A93867B3BDBA0052C5F59E6F3657918C382E771D33109122CC8BB0E1E53C4E3D13B43CE44970F5E0C079D2AD7D7A3549CD75760C21BB15B447589E86E8D76B1E9CED2 -MD = A88C7EF7B89B7B6F75D83922B8FD00F034D719F97C67884121434447AE9DD3B9 - -Len = 881 -Msg = 9B7D4639E3400BDD19C7672BE23F354FEB221570BE8307942F52FCBD3045FD5A681AB50B226400AC6A213B6BCC0B5E9CB05614177F77BBE3F06CBB2E2F13C167478DB5779ECCB585E3E9391F3107DAAFDA2A6ABDBF91BCE6540960EE2F415D7599022B81405904038EAAA89E2D5F80 -MD = 9B728EF38E26649688735442C9056D0AAE2D8AF5EDEC9711B95C95948F868472 - -Len = 882 -Msg = BA02BF87C61CB69491F6B5500A43499483C9D1DA8056F30D0199B8AA52AE2941FEDEF0E8AC94CF8C7D1E6F1603D75618BE563D3303573263BAF5BC706D6685FB8D08984A756BE3A981DBD96A3FE38CDFA0206CCFB6456CAE650C829EC3A2480E165B3C671C70A2EE16460698D82040 -MD = 7122FD303B4FDD25FA84E001FA1C49029C01C299EE3A622639C37E06FD9ADA72 - -Len = 883 -Msg = 6C54239533A5FBC9617060FBD3C76719EE224823624739482FAFB1F6D7A39C31036CC8EA64FF265054DA2DEAF00F90207A2DB4691C8AA623651A575D25424603C682AF9A8346E4F63E74956E160C1E55BB7118DAF1D1A9FB390F53446823502680F98D279F420F2D614C2218D5E000 -MD = ED4EE2B43DCACFE7161A86386220D272E87B4F837B0E3140EB518B8AD2283AD4 - -Len = 884 -Msg = 492BB221C33A3D456C7B2A0C41C6145501451D247569F470A1F7637FFBBDA6FECAEAA43ACD76E24BBD607A55596C69060C360D519B7FE9EBE794769B7CEE6A5035265B069E641BF17CE887F0490C90D655F5FE91B95D46A1F5EB9138CBFD232DE94B3DF9944131D0C64C69E4652990 -MD = 76436B21516571FB4B370874BE1C6AADB995BFC7AA9D31862912DE244D574395 - -Len = 885 -Msg = 8F71E8CEAB8CAAC38430EC1E8011D9C81B73BBCF32D60A495CF8207876D5DE42526116A57352A7FD2A6F20EFE100FA4FE0575EFF13F205AE33D0C3345ED4D587BAD1CB2F6AE0A15EF6681D168FA473ECABA29EACBD10CD6C64702A4EEE21535E7CCCC0037EF1F4C0B6199C8F413D90 -MD = 31363B9902D22A6083F1851F14227DC05A0DA164C99EF02629066F9E561BBA5B - -Len = 886 -Msg = 0D7BF755403AD46BE09C7DD8FEC713FBE9D96B9EE5D7AF7AB598FA6C4D5EA86C29DD6EE9C7A8103E6D572865019E6F0909F86FA2E59ECDC5B16678CAF64217282E2B474F40F53007F71D4ACBFFA230E1D2313CB44C812D71FAC6EB58A30097D4336BAFA8332FCA1EFCD6C48E9F9050 -MD = F5EBC8CFA639074119C7AF891D35B32C636DA931BCB7360AC96A0A2E69C325D3 - -Len = 887 -Msg = 5E13D7C65724A037F7DC646FD1815767F3A83C69C69052FF6624DAC438967A7257DEA3A269042F3ADD1CFE53B3D1A5AFB72702A90F60EC5E02B1EDBD7121532E2DCF37D82B96184B347F9D4BD57AB0E1E086406DBE941E0660B5B4C18221B9939F51A4D242E82FA2FF7CEDEF196EAC -MD = AA5EE68B82CA1C0F900C9F5A5F45B5DD6DB7AB300CF5697E5ECD8A4E89CEA865 - -Len = 888 -Msg = F690A132AB46B28EDFA6479283D6444E371C6459108AFD9C35DBD235E0B6B6FF4C4EA58E7554BD002460433B2164CA51E868F7947D7D7A0D792E4ABF0BE5F450853CC40D85485B2B8857EA31B5EA6E4CCFA2F3A7EF3380066D7D8979FDAC618AAD3D7E886DEA4F005AE4AD05E5065F -MD = 2B4F8F9EF7D6ED60BB4881E635E0F887A51B0C1A42BAB077976B43D2C715E11A - -Len = 889 -Msg = 36069C92F2AA4915D08FC19E9818ED0DCF80157D3A8D6646ECF8B4A31ADC3036744FB8B70499E90C6C7E1D2C4BE35B81DBF5A386C7F69BB320A2450D17B56D641BC7BAAD77E5D55BB6E9ABE594E04A3676F056AE60082EF33D2A74380270F6116CB4C2DF973FA8747205553A8768DE80 -MD = F9BA6DC5C313ADC632D3F905A6A70CF532F31998DA545394E660D17F009A11A5 - -Len = 890 -Msg = A1379F64FB9DA0EF3D4F819B898C30348E41E902552B60E437B513A87EE84C2EA0652ABCC2AA9D32428D76B569B3ED9B3D937C93A02C22F8FF0E4A3E09D9C8A22B2CEBA9F8E921760E103CB12AAE2B1196FCF2E5C45FBD0C381ACF5E6E4A8032D59EE9E09FC4ED561C5CECFBF43D1240 -MD = 0A3204DC720CB39079904A95902BC36726FA93E6D28BA312AFDB11A84072C90C - -Len = 891 -Msg = 9742A31BAF76E4E828011592CF2D4C9A94BC16A6856726F2B3340E1EC6787A99AC6832E6CDD32A92B92BF10F976EAED09CB9B538583421223CEE3F76182E9C5B8066BFD9FC924848C7F888BB42019471062BA2C82D1A904E94D90288487A32133CD51D04603588517305DF93697A5520 -MD = A3BF5FF73CF02475248777BC2508C6495518CDAC1FFBA7E115546356B6525F2E - -Len = 892 -Msg = DFD9ECAEA5316F067B49D5B04A229C55B8FFCDBD1BB7B4E92B546887A5584730F3BD4DCB1CF8AD362E2301F5970E917DC457EB1634729CC9CD3EA362C66E20F29DA5006CA5D7F70EC89FC75CE1470C5C20B21838B45EE461DA1F42C257C8CE940CA5CB0C3822047D10C875D6B41A1D40 -MD = F20404EC42294AF3F35050178AF2BC050ACC82F6AFF9FE98D36984ED84360DE1 - -Len = 893 -Msg = 6AC7E1CFD4573ED4595189E12E5B963FB45C167BD56544CAEB461F6D03DB1084D14BE35233310F48FCA0F9D41DE619EF1E29C78FEE50B412DD4E74ECEC9FA6AD45D2D6BE7BA7D8D9381DC5060A2110334D84CA79235BCE5667B0D49BB4137E2E23970D40044104AB0890FAF8437CC2E8 -MD = 0CF7FEA38D32297B74FD619A4EC1FB8CDEFC43E76D181A655E60F8F8F71B5916 - -Len = 894 -Msg = 1257C5E3E177DEF4ACE316DFD5ABDDFD6BA7FCA241173927411F47DFE2E79FBC5139B775A912AAD0822B220C08521E0A25C8EE15D4F215B1663D92647A28AE0A2CE23F054E77456668AAB17DB63858B666A4638FADF6BCEAC8152E9BE239F0ED6AA404A1D1C2C55C14655D8E1B33A828 -MD = 87F0DCD36B9858B13CA460B403EC28200A054380DD8D334D0AA83567E1886B97 - -Len = 895 -Msg = F2E39862B18601C5C4EA3B13745BE51AB578BE0049C2B01C6D9C2C283532FBCE5C5FE7BD77C36400944716F53F692465BA1C70B28F1203EA123165C3993E0A371E1284C74DD37EB53A0043ED84DDCDED882E233482433A3E0104E6517E277D3A2D2577CD28622CA177D8A41443AD8F94 -MD = 8830330494B879D4201CA91FA494402B818DF0E914C4D17BB9BCDE32E7D1823A - -Len = 896 -Msg = 58D6A99BC6458824B256916770A8417040721CCCFD4B79EACD8B65A3767CE5BA7E74104C985AC56B8CC9AEBD16FEBD4CDA5ADB130B0FF2329CC8D611EB14DAC268A2F9E633C99DE33997FEA41C52A7C5E1317D5B5DAED35EBA7D5A60E45D1FA7EAABC35F5C2B0A0F2379231953322C4E -MD = 586CFFDC434313CC4E133E85AC88B3E5DEA71818ABCAC236F0AAE418F72B6CDE - -Len = 897 -Msg = CB1BD5900398E5753E85BF405F77C3C344F7F1775B59E7F8ADD11882A5B27FEEE9011DB75A20388EFA2DDAE78A82C8E5EC9207C149D383BAF293C2F68CFA930A240599B662033C05C86DF576F53D0F04CD105544CD5695DA321B94EA57BEC41DC9CE192B1343B2E1AFD541FDDAE1B50200 -MD = 1AA25286FA074E9B6C27CCAE93F6D3786DBC932D3ADDBD2635BFD697D6E721B8 - -Len = 898 -Msg = F35C7F97B4D789FFF4E7DBED0EA1B5B2935EA6889332084669255230DE67E35090B3640F3C6F375E98AEA92BF5B3618478FDA284B7DDCECF37259378DBC0BDC192F656F69F5066E91A2F9D285C5988D39BF8E163DDCAC828A927AEBF42B5F174321ED3B9A968655A942DC0CC37199041C0 -MD = 25C5D3ECD5E06D6A38E6478860E18858FE387F670E2CF6F7ADECD1FEABF2F821 - -Len = 899 -Msg = CE5A6C17FAE7130BAA565CDB84F919E7E1C13027B50F0E103071C843388F2C51B51E4D330555F0D919499110D3FAB5EC8D307CDEFC7D15CFECBDE4A06A36E1278C9D9A3D8238D4982F135C2DCFC0B28D10796A4979F9B4CCC5A81B35C1259A7B072FD17B46D555CF7C3BCCDD801E4819E0 -MD = 019C770ED500E68322BF9D54B53DDFB60FB346D00A55B68EAE42F6B15A77B38C - -Len = 900 -Msg = 3A7391401865505D3782C08C9291C87611598862E2632530B1AB50252D62EBBA310FD943A378AB3897DF53F424CED09986143C6A4B68B0818B9356343D9F6097407BFEE7FF15D41E73C50D4F8B38468BE9143F68741EC8C79A6F28D6B4439CB82A1E8FE59C8131123A07C4C5300FB19E60 -MD = 558DFCC29B4F97F62076D15A7415E0A9112E960D916635AAD0C58560FE06743D - -Len = 901 -Msg = 3DA31721130FB8F85A43C5B5656BAD56F0A0573CD32F3363E4E9E3B4A593A2AED2E184B2336844EC6C8E8D6F47002FD998A8BD63B2D405DD2BEDDCD2E4C0C0FAB13113147B381C2546BF513D6C2C0B3B860C170B680EC1A5B907D5043BFF1EED67EB35F6AFFDD0DCE5B17A5C1BFDC5CA38 -MD = 417DB1289315AA9D806057B8CD7E691CBEAAE6777DB6AC9A7C00F290DFF08011 - -Len = 902 -Msg = E582A3A06EC79B463562CAE62212DC63C40A4E76A6C06C08CCC3FF442229F217B143A0AD650F16241A94A65956BED1C2D2B57AB2199E130EACF60A92D1E9E5FA03BFD78874EA655092F3C07A98F0A491874523660AD80128E7CCBF7E8012066F18E00DA1EC5ECF397A38C747A61DC5E7A4 -MD = 6D1C9BBF996FEA51EFA9631AD9021E2CB2A9ED26708B2AA782DFDD710A2FF749 - -Len = 903 -Msg = 215D67DD190F953146EC654EDC04B574C1D080D1FADDE7FE272E88B8BECEE0EE9272B903C0CE25DDA82C99B2CD8CC6FB0BC554D78173859375FC85AEBA208907FAFDDEA3CB89410E6A8780E5B5E270B124A9940DA148F41C3F18B9696A6FEC1DB8BB81165F104CE061BDE070A8F788FEE4 -MD = C217527E8A0D4E6FBB289E9BB76B8A03857BCE483FE308ECD3E63D3744859D83 - -Len = 904 -Msg = BEFAB574396D7F8B6705E2D5B58B2C1C820BB24E3F4BAE3E8FBCD36DBF734EE14E5D6AB972AEDD3540235466E825850EE4C512EA9795ABFD33F330D9FD7F79E62BBB63A6EA85DE15BEAEEA6F8D204A28956059E2632D11861DFB0E65BC07AC8A159388D5C3277E227286F65FF5E5B5AEC1 -MD = 52D14AB96B24AA4A7A55721AA8550B1FCCAC3653C78234783F7295AE5F39A17A - -Len = 905 -Msg = 4E5FD6C9C5E693E89062F8D79B7479ABA27CD93729E03179804BB8BCE53F270A6D0F29604835646619485414C538FBB4473067228A4593340E30165A7EBFA7F470CACBDB9CC192AB424D7B7926A5A96166FA56277DEF34ADE6C6A7C31240F86981E30BB3F2AAC492B1850016B1F5F3622A00 -MD = D9E2CEFBDD986E812715C2E86191C1EDC43DDEBBF85418BD244BEB1E510E45F5 - -Len = 906 -Msg = 1DD8BA4977A97AF96F65FBF2BFD718E20C955313D9E08A8F3FB63B092ECA604C3D65C7B8AF97EBA322FCCB3CD0B091747DD1445DF3734A01611A2EA5CC6882CFEFC3FB78200A162744DD353A51F10EF43311B9F4340BDE9D57028ED8143A2DD7A765DF9DBA3446D8FDE72A601F0500E98440 -MD = C13036559771BC2843E8BC5DE013202AE72F7E52DFBE9D8124BD6B3E2A921580 - -Len = 907 -Msg = 94A8E87E831C5E5196512F3BFC03A72804F00A5F8B7814957E1109D7C6AE32149E5AB11D70C7AB52F5BB67C290AB1CAEA35CFD3490BCD8C48F96B7ED876D0D5357562E34B4871969BB3C667C11E67004D69232CF1FB054A2910A4A72DD158656A2C0FADAD10B708442128C0331C49032E940 -MD = C8A310B207AF643FD3EC8B11E30A21E96AFC004EC1C942275DBF1C0A24B25C12 - -Len = 908 -Msg = 15A42B05F9C3C1551DDBFB964D698040DFE50240CA07E7394DB47BC628A36A31880AAA7A1821BBEFBA965645C560046B296AE7CA6EC45A04E0A9741FFD88BE539E335AB26BBCE51F3958A4CC61FD3BE079B029731D9917802935330F68BE6358D7B8FC120570AFAA25B1FF54B7B0A788A7C0 -MD = F13C3C22E265BFCC79D944775FC6C0C5E76E652339A7CD1AF4D1A6E8D69FEA94 - -Len = 909 -Msg = EBB1C5063C59E47C5D879549E8A5180D7E764D8BDAE5AA8E570ED50557DD19B601E488106018079AE3F1E787DE14FD12F985B38ED7A9A953FEE7975E47218BA610B5060EFC67637EDD9E6A051DAEC967BC86CCE55F417BD7CC7732BA636E55FB4831B117644ADA00C8BF5309BD7FBF42EF10 -MD = 2452B5425CEAD395C99AF476DF2FF3F104DCEB8DD32BD9A9E62CCF6AE68C19E6 - -Len = 910 -Msg = 3C8BCFC309833426B1EF0BFD3E9083DC116F28F26FCF034A879F0EC0CD04BD0B2E2A32FEA71AE279D67313CB5293AC7E158D2EBCE4A73941924EA0785082B13AB58F71C620DAEEB7FAB6C85CDF2D40E0CB787767E8F2298553BA9C033F820AD312C12E90AAFBB3DCCF4D852F82FB3FC70664 -MD = F44B9225BD85A82F362CC5221C40269DBB1957F0E1E5C68C2A839521F61EEF91 - -Len = 911 -Msg = F34B462EBF8A5D882AE3064B434506D605D2750EF56D33020BFB47859CAD2D26C902DD26906C3AD53A2FFE99C7C0D5A0EE1081657E0B5341511C3177B745847C55805B59837967763A5535E42547EA81168A71CBEEA4AACD0F6AFB06B2B9ADB7675F6763BD142ED87BD8570567AD64FFDA90 -MD = 3F95610702EC5EF44FD01BEDA561AD197DAC9D0AD7193FFC6601871B3E81FD15 - -Len = 912 -Msg = 8E58144FA9179D686478622CE450C748260C95D1BA43B8F9B59ABECA8D93488DA73463EF40198B4D16FB0B0707201347E0506FF19D01BEA0F42B8AF9E71A1F1BD168781069D4D338FDEF00BF419FBB003031DF671F4A37979564F69282DE9C65407847DD0DA505AB1641C02DEA4F0D834986 -MD = B6345EDD966030CF70DFB5B7552BC141C42EFE7A7E84F957B1BAF4671BAE4354 - -Len = 913 -Msg = B1E06AEE75FCCE86BCF194866D0779720F1DEC50586F29FD22C2B7CA37F19D257492EA0C05CFA98AB7B42D33A53B78E5CF62643F0CF02E934B9B70224E0952673B572463F25659FC015851C73E3F040AD60983CF4A048BB9F277EBB18F4936064D73371D7FAD0AB3D1EBB6E7035CDE458BCF80 -MD = 97F0BCE31333DF5A27B4E4F8FEC22E4B8A4657D7E56B044D3B9DCFDA7377E11D - -Len = 914 -Msg = 7A8B81C5FE8BF2C12BC8E9E7A0894F837320ABCFF2972A9D7352DA7175AC7C5039D654EAC136A020334C956B49323918998580BD1F2987A342F905FDED93DF4CE76A91428F524AB656B24AEDE625884511484B707C3BB3C52E46428B44F8A87676BD73480DD3951E8E826EC14C24F52D48ED00 -MD = 64BC6CD88A3A2F258D82DA56A66343831B7762A977905BAC0E7893A7772A855A - -Len = 915 -Msg = FCC03C4AF57D9C21C777D2B4AE611DEE9F4653684AFB0AB0F98606D2CD2A43B24288B9C302BD296B702FFC8D88FDDFDAF830451CFA97407179E864C77416AF18F19617582317C70DB29834F585324B44333BC6076F3CEA3F3F5E124C7B259C482EB42BF5C85FEB3691A9CD5D227145A5DC6600 -MD = 0CA9CDB7EF249E6A79EA2CA2FCFF0D91B6798A0B2B3985E73432AC1470047146 - -Len = 916 -Msg = 96CCCA331611A6E0FDAF50A8E4C10967F1741C19EE95A11BB9D02A689971380DB8DADD0F8523C6A1D3F6F12875C3AFA0B6A8A1D961FBEE33FD48011DCB829036701FFF6B3084A19D7A21083FA8B08353C6EC5BE9584FD2D9CA6E63EE51DFDBC721740A43C0568F5A732AD5374C965B496B1480 -MD = F1B9E7AE6259036889F2118D771F2665ED29B227CCB05037D3A5C144E4277E51 - -Len = 917 -Msg = C6F7E76B2ED480FB33F7915128AC1383A275FBE15AE9C997907E11BEABB1E49C8C9BF783355CC3D8C9719AF1B0B94222956AAC2C19B0F68AD4CC2449412BF8CBAABB014D277AB446CFA90D0E3CFA1A1F22273D4AF4A8391DD3FA0FD75015F39C204CE592715A00036953401BECC68A983F8E50 -MD = A308ADEAA044F6182A7B82CFB5DF7E125EFE20572A5BA03F0B63A2040A660C25 - -Len = 918 -Msg = 9ABFB3294448A7EF38BC194B4E61027CA0671CCFEF6AEBCC0A706F15958D777CE0FBB47F1FCC3E470E878A991D139D02F89D36A54053EC3E370BF45E1AAB3B58B25122584D4CFC4BACE5F7282F25F322107E8043DAB875E8707F94358C6ECDFD96CCC09803756814D098EE3C4A7A8BC2D44398 -MD = 0CA5AEA064FE25FAE938C072F91DF4F1B94EBF2A06F1D9F79F8895A96161BBFF - -Len = 919 -Msg = 3EDA9C01C0BAC0A7DF3288EAEB878C44FE750F92EB7FC1AFFAA3DD1B492781D220E210F169B673EB469594C708C2A4297CCF1ABA5D2C438E9FBD91EFF1A0941564582AFA650F03ADFA4336AACFF855F49364D234842C907E7FCA80CDE686E545D5CE0CB43C0359E18155EB3079469ACDEDEE92 -MD = FC9E866098B84043F74029B87FED460DB41F28E3D325DEE029A0A48004E54896 - -Len = 920 -Msg = B55C10EAE0EC684C16D13463F29291BF26C82E2FA0422A99C71DB4AF14DD9C7F33EDA52FD73D017CC0F2DBE734D831F0D820D06D5F89DACC485739144F8CFD4799223B1AFF9031A105CB6A029BA71E6E5867D85A554991C38DF3C9EF8C1E1E9A7630BE61CAABCA69280C399C1FB7A12D12AEFC -MD = 0347901965D3635005E75A1095695CCA050BC9ED2D440C0372A31B348514A889 - -Len = 921 -Msg = 269180F685A910A96BABF3F6EE41D59E1A147773B610A81849ABA32B9B3F67D92CE4B575503C9CAE47F0B8D37BA66830952229BD64BD113B5055C1C4071BD749158188D343606C5DB34C3C1831087A0251868DE2F1689F358BC98832CD8C292806BF31A575895089B72004C037C8990CC845BA80 -MD = 43CD228BA170FF6CE0B79197B5CC87354E0DFC601C66E3D0AA51C72FA4B1F04A - -Len = 922 -Msg = FFFAC212A9A44997E7273F3B708F37B778AD53290AA2B523EB10181EAD0785918211FA5130C0BF333BB9EEAF35BCF8D3C210A041DFD8A43F9F045589218542B4FE2C63D340A968F0E21354D8C26C6B55A437E1C0208C1F53A2D32F13170AAB6978214F900C0FD6D7C589459C9506FD2385D376C0 -MD = F86195A58446744241544BD28E3065C13CE5E9D30C0D9F8A38E55FBACEEFA4A0 - -Len = 923 -Msg = 3B80BB9F2BB7659C2F3B2FAB83E68033EF455E97C6831D484BDB52850EDAAB4F89EF8FC39ECB29971F7349E5EF2C4030CAF069C40F58AD755E2D013249FDFD2D41583569634E0126A3272676CCF6A3D7A7429327923590574077D3A21BD282836D198AC6AFA14FD4A5927E594A9753509C8F1100 -MD = A0C4EE7B3E108EBEE66ACB6C506D049A04F748104E20B2074D3E8117C3A3E64A - -Len = 924 -Msg = ECD96FDCD43F1456B19C563E7531854DDA6A724CA160717E5404B8056322F7036D50056BBE1538F5128B72C90862A7A4C6AD3E5548353D88B255F3149C4097B7B412F5B45B27DC9E7293831A61B20BFE0FF57E7299CCABDCCB32DE6B006422A0B7DCA9630F57D58A258CC32D28F39A9628337640 -MD = 811CF4F0D6F43BF4E5AF13BA6F6EE331E8198175398A86624A412352B1B9594E - -Len = 925 -Msg = 2FC972D13E9ED60AD42189018D21F46A99E50E437101549A56FDF91C80A7F63B1CBDD3A1631502AD006DE0CCDE3F74E14BD189BAF6BB2CF936B619D9DDD644100E9603E3170AB7D0FA3B6D79AC15BFBF8FC1672B908E82EDCA7DFE5C7DA8B6A5004BBC1C1999164E95772DF1B5D5078EECBDB350 -MD = 05A5C57836266AC23A37CD2BD0773BF4A9646080BD12809C68E4DE0C0C877FB5 - -Len = 926 -Msg = 3DA3A0681FA83C46C47B8D2D8394EB3138C899956108F7C0534CB3CAECEC2527434B441CC79E580B260904D4C95D9D53FD45DEF4F23E90EB01EC7FACAD671DAFBA8D3E66EE650F0E7A029BE3FF2DEB340436D004E5910E65C28174155D8DA004059504F484CF757314D43426FF458303F1885940 -MD = 1E02434D280832D8B0B9C118B625B01DEEF303E3A3C12B32474BC3E0FE9CCCB1 - -Len = 927 -Msg = EBDB935B08BC0C4077D649A2516D0C035BBFB64D69B783BE8F12796E44707EB2F244CC27089AC2A07A7412486A7A18F895F1570DEBBB638A36597008ACDA55FD3D128406C9D46D7FA32F71B718E52EEE8AD83D6F5B5FD6C8078121073518FF83D582563FB4E95EBCC4A6A6100E030EEF9A82F616 -MD = DC78A5AD5591797E1566022CC09C796838F690E83412C6A1A6C73AB834EEB462 - -Len = 928 -Msg = 2EEEA693F585F4ED6F6F8865BBAE47A6908AECD7C429E4BEC4F0DE1D0CA0183FA201A0CB14A529B7D7AC0E6FF6607A3243EE9FB11BCF3E2304FE75FFCDDD6C5C2E2A4CD45F63C962D010645058D36571404A6D2B4F44755434D76998E83409C3205AA1615DB44057DB991231D2CB42624574F545 -MD = F0BF7105870F2382B76863BB97AEE79F95AE0E8142675BBCCDB3475B0C99352F - -Len = 929 -Msg = FB7BB870E78E7EBF63E1C4953C5948DBBD548CC952A4B6D4788E0D190B9ED9CE8702F2075CBC5DA62945F118819C5621FE22587F51461B91F7DCE4D86C076DCF945CE93764B01ECBDA86DEA3EF17EEAF0D5BB4233028388A70CC239D39A427941C77E19EE99C88BF12F9BD6E687B3A826240568100 -MD = F2784BF3B995A3A883C59AEF628E3A6D75870B052593E763ABA1EA997923B9AC - -Len = 930 -Msg = 04DA38CBBB45475B6B5EFF77AB65A7144AF92EAA062AD6AB8A84C714DCFCBFDD666443E08C1EA3D4DCD3BE730F7401760C6EB9EA600FA5CF1CBE5297F0D4F66671BEC146A58DE30E5547FE9DEFA9B96E95344FC8F32CFEAA4AE1D4A109964BA3AEA697FEB6B6BBB42AED1BB365E324DFF650764FC0 -MD = 2C629F116D83110530F9C1B1EC4FE50A1CA7F15ED0321CB7784A46D4523DF017 - -Len = 931 -Msg = FE876EA28A466698DD179787EA825DA434D02A0641099EA4CBED0641F15E3DFC2A37322A094269D4C590455C3EB8F019C8295D24A434FA4977FD078C691BB540C7CAD0B6E6284BBAAC1C8545CE00F71A494945AF86A4FE2AF46F11DE9C89EFDB17E62B9AAF4526BBB9663D4623FD589574529F7580 -MD = 00941AFA95C4511AD006AB4CADE1679041D4DF9EDDC0B8F9484EB72DCB4B09A2 - -Len = 932 -Msg = C4DDA8D7807FEF102A62B78CD4700A6BFAAC60D650A7F5AB6B377EF3936639EC67FDDDED1EBDBCD05ABF3EC0BE4980ED84E1FB536786CDF0954854FDB9F3DF27AFD5F350E4AA735FD9C32C790F6F424A1915CB115A37E6AEC3C257A974D6683E0CCE2926DFFBAFF8C0CAF094307733969CC6834520 -MD = D765376503A0728CFBDDD907732A05416B69B05CEB6890A0E0F9C65E083AE0C1 - -Len = 933 -Msg = 0E4D1948742EDD97D4AAFA0163292AF7899C469489A0DA98FC9AE4B6430EE112CC7F22C29904350A9C196C214C13C9117E8245676B3E5C7AB9D51120116B3CBC07026927CA0C33ED516796E98A0EF9865746DDE811C8B56EBE9BA469117D9BCCCC70204F1AAB358A703987EF8637BC85BE18A011A0 -MD = A8D3C2E4F4FAF5AFA3D798E38EA770CEF76486C5EA4B297F050F411426E4478A - -Len = 934 -Msg = 73E79155019FE478F8D817C3D5EF3D4F66D3BDB22ABFF76DE083A8E5CF1EF4F8E5C55917351BCE4AA707483D9302DB11DB21CC6CCCB4012B0980ECB76077CD0309775F7EC98BC40A27044BA830FF7ECD42825C7B7B28133BB732218234D9165372DC61261878776985D2C980C9868BD6521557AE3C -MD = 0964D0676C5A8ABD34015C2C2FC3449CA2DF72CA27652E192FCBCB9D832C685B - -Len = 935 -Msg = CC47E530D64AC0381DEA486BCE637E3B631232A5B55165358A0F9C2069C1A3AAD14302F2AF25FC4F4F40D41F708760AB080861D8F92EE65C1927326FD095EC52E45B7F5D67D4B4987C43FE8FE61AD6E5476535564DCE408606AEC8E98618B174542B530238A51AD13EDA91AAB7C34DA7AD2F28E50E -MD = 66F83C40337D57B7913D3B167486E02E1DA6508BD2FCEED70008ADB1D06F3665 - -Len = 936 -Msg = DAB11DC0B047DB0420A585F56C42D93175562852428499F66A0DB811FCDDDAB2F7CDFFED1543E5FB72110B64686BC7B6887A538AD44C050F1E42631BC4EC8A9F2A047163D822A38989EE4AAB01B4C1F161B062D873B1CFA388FD301514F62224157B9BEF423C7783B7AAC8D30D65CD1BBA8D689C2D -MD = 631C6F5ABE50B27C9DEA557FC3FBD3FB25781FCB1BBF9F2E010CCA20EC52DBC4 - -Len = 937 -Msg = 0033695F13910B1E68323B64B7FEA6E291C07DE47C448174C72E53E69AC2B9281E6D6703BE904F601301A7A92012BDF1E7AC0E389DA9E420283FA96681B0495B250CF11CEB845903468DC2B34B825294596C86BA38A41B636E155B3CF55A986708DACD1034C62A0BB3449322AB57A2A97DBE9E93FC00 -MD = 9FBFA16F4CD44C94C6C81641AE7596E0657FD61AC4C75A33BAA9FC36D0467D1C - -Len = 938 -Msg = 77485C2226894283A91EE91E83192068DDAF49E99FED9838344ACC569348BE9D9ACDE7CF447C0BD84FFFA3559A16C5F61912E4ECEBFFAAB31B3F5B239C87FC3EDFCEA7303E1C57827E8B45BA3B4F357167FD749EA101B15EF913F838A6CE68E4792F276BBD2784554B84703376891D951321D0C8D600 -MD = 664793F76A1BF10D7682A1DE4B79BA39160E9933D2262DFA0F7F85AD9750106C - -Len = 939 -Msg = 6C95A9A1DEA097D15316AE7F5B4A6D2746C6C81D72093614C9AC25AD1FFA68996FEB8666D94F453E9E405D42BE6C9757A94BA777566F054DD6315DA3DD837E70FC939F7129D1D7D4DDC3A7D5FFDDC54B60BDDAF2622060E8C5E5830794DDA711E85C52B4BFFA5F716BE50BC978574D88C579F2E19CC0 -MD = 51440BE99FD040A9FCA3FDC21747CE2812D49806AEC90DFA4825F2231615D050 - -Len = 940 -Msg = 4F62C87A0F5C45700E4A39D2EE331FCDF9A8C33E08E26CAE547306D1FB80DEA35A6E58E63839BDBFEFFFB1C35F80386EAE52CCCBCF61C835E9E6505DB798AF26D42575E021B96B3F0DF3405B817833F3FB4B89B941B8D88BF9D6E467A0863BE72D950BF006CA84E3DA31D71D562A9F0D8231C76CF5C0 -MD = 878C294E17E17CFF835954ADAB3611458BF8FC4A1D02175E7058DF5714B22044 - -Len = 941 -Msg = 5136F1DEF48BF98D5FE05CD02C2309F994156D650FFE1583DA3ED50AA9B13BCB0DA8E83C68B8D331672110B25EA928F4D20D869E444B3194C044C09EFD66D966964A3FB446D6B0F027EEB79D50DAD6A5F0005B19FC68F140D768488C0D401B7FDDF8303E0FB8860A6847CD453797ACCE3C7C35ACAAE0 -MD = B52F9C72F2D48B540A9672268A204EB6A2EEF46982AE15605A0F18CD73D3BE1F - -Len = 942 -Msg = 0F9EB1E210E28319D732BA71FBE8B3A99E337D3F4FC3FD4959F51AAA15C2E8D7DEB32EBC69A031057AED466181089FDABA63B3337EC0960A0EFA3F5B257446557B6C585C324F86034448D0419CB538E328877F669CE2A03B9B3A6E5DDA904666F1E20B0ECD674B84E1AE14AA2278F18565CF8E37BDBC -MD = CE50FB68AF8E6A8692A838726A9A90BF95E6793F0319CFD89DB4A6982C9683C8 - -Len = 943 -Msg = 7C9853BBA660650A5C27C4C948FD65A67150FB559C5863BE944AAD3F84E946777C93D3D9BE3AD41155A05197ED3DB7ADB0BB55A55C69DE9A5896A5C677EDBC8DC4F3C50E22BEA9ADA9D21E6408D19974B7760037EB6977BD118F6CECFE7DA5240082DDC2FC2304A407C0B6073B70315B3761246B9652 -MD = 8A3D659675F99ADF385E89C3A8F82EE6072F215AE5ABBD22AA93682B736C5EF6 - -Len = 944 -Msg = 42E99A2F80AEE0E001279A2434F731E01D34A44B1A8101726921C0590C30F3120EB83059F325E894A5AC959DCA71CE2214799916424E859D27D789437B9D27240BF8C35ADBAFCECC322B48AA205B293962D858652ABACBD588BCF6CBC388D0993BD622F96ED54614C25B6A9AA527589EAAFFCF17DDF7 -MD = 3757A53D195B43B403A796A74AAFB2064072A69E372EE5B36CC2B7A791F75C9F - -Len = 945 -Msg = A154F2565761BFFC5589EA8CF6CB9C29F4C632D1471FC80534F24749C908C23E56505BE40785612AF08F921AD19348D2D2453649198265249EFEEACCF4AA3E6DD60F4970942FD828E25FD2F88BDC2274C5C94B7DCC7431715B3C2428AE7A922213F6485502B4BD84F1522EBD8795C549AC800FD99C5E00 -MD = 2AFE335874A64E4F4872430F065B5786771783DA4C6507409045B0A286D184AD - -Len = 946 -Msg = E7A82BA7364E23F5BC770F6C5D8C3B1A4E24B328943470700FCEDA84B8D316B716E2FED583D2324C17FF1E9EE07D72D42CF58FF159070479E6721E2031C9D7D94262033DF94CE492D6C64FEEBC7B3B1DC9F719D9681F51F25461D8693E7FAAEF05DECF1AE271858BA473577A372DD79FC9D1B0F69C46C0 -MD = 1303F6932DEE65D9865A219E62B9D7779AF916566866C580F94ED944727E8795 - -Len = 947 -Msg = C3AAB6905BEA639451D49C444D9D470D2F033C7D92405C2672CDB78E724D4BB7ADAA0C0E5A57A4B78F4F0BBD5B542D06086CEB0A42F2A6CF4B43745EF870928BFD22579BE8B5753328111BCB996B58F10A8A6D6C04806FB089DB9CABEAF212C9830BDAC08FDBA87617AD69B858FA1D5337273AE8367320 -MD = 9FBFEECE1E773CC36F53531F8C19D67A4D039D3056B8DBC7FC512F8CBB9DDD3E - -Len = 948 -Msg = EECFEAEEC17BC07F2EE0913E696D50C194C13B6A2738092E5BD5F30BFFD3BAE559F3E47191AAA333297475F113EFCB1B4A088471CD800934FADD0F5DCC9B1B67AC488B27B8A7D5408CEC9CDA91EBADA76C9AADA32986604E113790BAF3A4B433CD81ED3DDFB9DA9995E49BFC8B7A15D07B363AE8376F10 -MD = B6FC650974757605E6D3D2109EA8B4CA7CE6B6B542A65DE7FBD17838726F14B7 - -Len = 949 -Msg = 04A5269B1ABA9E44557BE500D16D2C5C830C9AF49D33AC8B0566BCD699679630180B74EA9824A3E9538789397FB6CFAC8961BA7F0F7A5B0181E7072C53651CF91451DFFF3B7FE5C00B890EB13A984C11B78F801C9EA33FF9B2A52AC71907B92F028D767085A01F3234AA9B98283F684065B60457BD9880 -MD = 5689A1CDEC392456547C9FD7A165316779F5C141962CDEA3F0AD427D0A915DF5 - -Len = 950 -Msg = 68541BF2F087D4505570E2C5DBD2FC596D938E57CC74980F5EF52FB229F5CBEA92481E9F62E92891A7F333E6581E21354FFF2C5A43899FF6BAA2FBC2E737B350CB5586CD7D7A6634BF5DD9B6BF4DB0A99021D432A0D76F16C74D4514013A3C13A88C53927B91411C7718931445913AD4C71A7B710DB168 -MD = 4481CE129A1B35155269C66692468D3B69544BD1298C0C8671BFEF6A7A66F992 - -Len = 951 -Msg = 2BFC949736AA36D4938AFBC3C01B604A7EDEE1C6D17EF3798EBDB86F9CFDE9C033DDAB4175C8F346E00E7BACC20DF7A52F4F0DF2744FC5EB9377E64BF6AE52639F796B1C15ABBB47BF938FB3D6253834DD680EFE244E832F810D315870F5E73BDF53130AB9C4CD203D828D183C5A954BEC1EF434B21BE6 -MD = 5294E055104CE23BAF581196DFFCFF826AA7EAA16BD7C12B6761BB495FB4BA86 - -Len = 952 -Msg = 3C9B46450C0F2CAE8E3823F8BDB4277F31B744CE2EB17054BDDC6DFF36AF7F49FB8A2320CC3BDF8E0A2EA29AD3A55DE1165D219ADEDDB5175253E2D1489E9B6FDD02E2C3D3A4B54D60E3A47334C37913C5695378A669E9B72DEC32AF5434F93F46176EBF044C4784467C700470D0C0B40C8A088C815816 -MD = 0CC903ACBCED724B221D34877D1D1427182F9493A33DF7758720E8BFC7AF98EE - -Len = 953 -Msg = 1E8E26C707DB4BB0F459F069840D28639F22CF740EC59D8F3BB840F7654642C2DB228259BCCB3532944D85D2F33BE1B401886E9FCF7101FBB4539CDA1E81529C160ACCA588E706749FFE70B20665FD4FD91BCA558E0D28DC03CF8469930CE8307519E8724373EAA2B6F22ECF04989078F91A2FE9A8E4A800 -MD = 6CB2D2859F103CC71F03E1A90C7220613230691C8F384DD8739D1D0A342686B2 - -Len = 954 -Msg = BBCE8A5EE8C0EB938B8BA8D0E9390B12BBBE6178ED29EAACBF92869F72BC157AA4F20F150059CF228399079449AAF9893FCF65775E5CE706898C4FC89DEBC86447C64A2CFCD22DBD2F639F199C1956571FD1C34A11609201F520921B1489F58B51EFBCEABF3CDA1853A7A66D076162A9C2053051BCA78C40 -MD = 6DE9979BC0C8636315A18A3A98611D3627A837CABCB832A26E053D7C5A3B3F25 - -Len = 955 -Msg = 036E2807A1F1675D8F01F88F1A5C34D664F49BBFCFCB60892D24DF43CBD6566BB7DBF33D47D816DBF244B7912E6A72740508804D3FDB4575B67D97B202DB80AE9A2B88EF84E7C74C3FB6A1F0FBAB8E62D96F76855E43D0BA372457A21503BA621CB52FF039CAA32DB99EA39B466CEA191287FA069118F1C0 -MD = 8EA1FF962AB37A915828BD0B74B4107C2810689120B6E9951070894D49A87680 - -Len = 956 -Msg = AEB50208D1F67BD48A95A3BB4454C9E4ACACF2C8935F2E48C06B1F73AD8C497FDB9F99E11BA78C12D83E93ED8BC34BF7BB27770F647BE727F0C92FBBAAB92DB31039EAA3416A8BD803470A531DE363254942F921AC597E949D95858FF42B6C7F385F90DCC8869A95B5E31466845347DCCA479B07D35822F0 -MD = 4D8F7278166B26AE6147B281639E955A45DDDE7E4B5322C774A26AB829E5D4FB - -Len = 957 -Msg = 5F69A5461117B8C2DE8048AEC04B2D0C7865A9107E3D90B7CCB3CB20B0E84FB7E162C75A766D7A1B9F6EF588581683B5CD125EA541CE47E6A78904D542C23F5184A64F073D931CC23690457AFD3538844914BA118A7D7C8A24F198CFBCC9675CFDFEC29F1E84658A0F8A344910FAA51E8D0719A9027E4298 -MD = 9F908B4045320D8E388AC5E905075759D4D8688608F6264002B8C914A98AA104 - -Len = 958 -Msg = 4116C941F3786516EF58063F0C226264F17037040C08817D86DA911C86B04DFAD0A64CD1BBF611EAA8C21AEFD71FBE41123090F71373B8BE43B1DBDB8758E63219CFBB7FC1F665834B8F5DB8FFEB5C8144E5ACDDB42AE73ED3848B933CB43E9CF7E2F77063D0BC5693FBC6775DDED5B57C0B70FFBDFE3AB0 -MD = 5913473EE9B34F6ABAA48D322F8DAB89B3CAF382FBC732BE4840F71EFFB9136D - -Len = 959 -Msg = CF191D62C44A107949F4D8E62C61069DD7771CD42D183B27314874EB19067EAC1919C849470B31B0DDB1D2886EFADBBD68D28B22B021F9A0F4890F02D7084EC08E3DDF0A14C0132FC8EDA62A786FA28F3092A517E525567F8EB512439431DBDDD4768FB7BFA596D8A04603481DD84740D296F8FEA8A52978 -MD = 8A3212B7A3963F5375DB5D543910F92F67FE20EDBFEB0E935412EDBFEEB0AA60 - -Len = 960 -Msg = D1E654B77CB155F5C77971A64DF9E5D34C26A3CAD6C7F6B300D39DEB1910094691ADAA095BE4BA5D86690A976428635D5526F3E946F7DC3BD4DBC78999E653441187A81F9ADCD5A3C5F254BC8256B0158F54673DCC1232F6E918EBFC6C51CE67EAEB042D9F57EEC4BFE910E169AF78B3DE48D137DF4F2840 -MD = F23750C32973F24C2422F4E2B43589D9E76D6A575938E01A96AE8E73D026569C - -Len = 961 -Msg = 9475609D6686B9DCA38EA5DE587DAD1F458D59F96BE790896A32B2AF82F897389BFED7572018883432007222720EAE42A654DFEEAEC1653D3464E28282D567E8E59CC6EC53FF6AB20052D2FB27FB8001313E75700F58D6339EA4C55DBAC4833DB7FA59E5512019DB87022F8BDE9A4366484C755B410A01AB00 -MD = D32DC2C5CD2C61A0F17AB3D65DF98D88CCF2163135464AA6B605A64DB6EFEEE1 - -Len = 962 -Msg = 61BB6E84099A381FA591A31CBF684DD9B68B5F752A2246E78FB57C016F66E43102C5CA5B0F19A7F6AC5A20174A7180FB9FB2B6D2DC8E4CAAEDEEDCC6F4032054E8B698E613B545D75AE10C0A344B656C8FB759B5A615DD6DD3EEF8254BEAB7FF03430E8DD0BF8FAA19A9F469DA37D943E71DE3B477873FFB80 -MD = C5D91A67D1C0684F830D84FE9555F911430432540BD14C6CEF51BA8E6326409B - -Len = 963 -Msg = DAC1487938375CDA49E04607C6B7A3CBC3AE585AA81B05F009353C52D4A0A9398E12F10E3EC433232C2FC21E46C614D085D1570BB70D107039C2D13A121B8BC45B0681A19D05D62CB582970B14E982F04BA4AB2B6C5EF3379FFF473592DAD92B61BE8E967A90F3E1D2962947B9FBF5DB7C48D8139ED85DF2C0 -MD = A8CB50C0BB21E977035DA840992849A38366290BD62177E44D070895776E832C - -Len = 964 -Msg = DCE3F8690BB3AA06BFCECBFFD4355049288C073272A503BB9B351D82062E9EE85E7BABAAF87AC25ECC2E3895F8CD1FBE2F9DCE21A4E9295BF1F8B0CB8DF98726B390D52AD21492CF442385959E226047BBE0A9B10D013E7AC9BB3D3BB89E262EBECC0AEA914D6375977C4E39E55063C73EEF6C8CB533D18AC0 -MD = 29FD6870D7A898B5888E1BD642C94DCA164A555A606D4F62D9631DBC6CCA4BAC - -Len = 965 -Msg = 1BDF288A6AEAEE17B671269B70FF9FC51F7C6B27A8B492C134D37CC217C225EABAD8A904F555E19F78B51E579D77082569B6DC2DAF8C30516B40611781ABB58DB528FFE79336F34CD07E0EA394E6ED982F5992EB89FE8F693B0F51F177518A7B42C3794AB9C55A02846F1AB250480E81AA82BCB18C173A6030 -MD = 99264B82909851AE505333AA8E64226EED2CA8D7BE1FB8E0BBAA1AE19EAA2C79 - -Len = 966 -Msg = 588FE175F9D58E6149FA78E460E72D2BBE43EC3EAE3ECD4E39B292B627B4BC24E87E410087317E1A9D0855440B56A036349C18FED313D01CD85B30B67973F7AE119154120C2A0EAA3174CC89D68A598347353DCF8AB4D2A5AF0E2B954CC0EDD3A5D3725D60A870351000A24E7B9EE126F54790C3649E0C509C -MD = 1273D991540C10D57CE26634D653E4993DF4E25A0086C03997CA47C9A835E87C - -Len = 967 -Msg = A5175DC9A97A1104E5CD368A1F3529A291BEB228E2CE94DDD8AA413FB6E860A654C95C649F594445F5F681484DF635D244213C8211C01DBF382942C3F83A6A1252E138529341FB45C06CB08B47D34E305390927FF9811933938B35297E63F668D907FAF7CFCC2DC3253A4BF80283AEFCAC42C63FE20D8F097C -MD = 7EC28484456C5FED8F7BCD64D81C71861EA576E17551655AEA4ECE2003EBC6BD - -Len = 968 -Msg = 626F68C18A69A6590159A9C46BE03D5965698F2DAC3DE779B878B3D9C421E0F21B955A16C715C1EC1E22CE3EB645B8B4F263F60660EA3028981EEBD6C8C3A367285B691C8EE56944A7CD1217997E1D9C21620B536BDBD5DE8925FF71DEC6FBC06624AB6B21E329813DE90D1E572DFB89A18120C3F606355D25 -MD = 1ECE87E44A99F59D26411418FB8793689FF8A9C6EF75599056087D8C995BCE1E - -Len = 969 -Msg = 8B7EC746D297783731F7FF197779A6C0E053A84D255D9B69CF811CE154510B7D829F46E2F8F1FCF3185DB1987C7A137FF644A05BC0FFE4795419AB82F43D2EE079335101C95950740F76A3324F935C84EF7A122665F37CC7040824771C3198C745B92FAE74133488A0417C5E13E1D8C64532160789B93DCA4800 -MD = D7642E070229378CA0DB224CECF5885C3200A8A5ABEC565ACF82D843BDCFCA69 - -Len = 970 -Msg = A94F24D5ABFF3CCC0B8D72C4A721E3ED82FC279648E6BA849CA895B0600A086241C7810DE204B25104E82A528CB2C43057CF3660551D04D9F737D58EC0DAEB7E3A4573EFE20C381D8E8C79B6868F6FF718E5D6CF0613256B651CF06A5E8B4E20C43D6B7E6BA050A1F9F60C56F47BBFD970C3CAEC91DFC13E7100 -MD = ACE3DE0827811BB36B934587F6E7304402AC1685C8D10A412CCF3E609836E73C - -Len = 971 -Msg = B9BF29E393C058AF5C3BCF93FED768EAEACD6CA7227E9730A2E78FC6C8E8D944967F2B412FC8B9BA8E3DFF001AC96B1E04AC0F10CD5207B3DBE7A493BCF49C2719AE0D20CABD072D7752F10EEE993373737CBBB33062CCB6C27A6606DDD8B7B57887ED9BE9FDF615D513830134867D039BD191501A77650987E0 -MD = CEFDA7FE976334C5DE8B563271D33FB07204D7C36F0F0B6D3888182AACDEA1AA - -Len = 972 -Msg = A4A5663566413E82C9FF0EF700F98298437A3186142E70862E19DEBF018BC209BBCF4B251A994A14E1A4F1C8B07FE4DF5AA10556391F3BDB6FAE11FC8EC2AD36EC31767C73EBB71BCF688F6122F0015FFB5B65FC9B70401F8B4118C8A98AEB287770029CD0BB29FC451E4F114EEDDA588684C4EC8D18E68E88B0 -MD = 4A922BFC39BBC6E757B47FC4C3316E4B381B9527FD84A4DD4E74F1CA61C512FF - -Len = 973 -Msg = 55DAED515EB96107C3C810648169BF65CB31CC423D10280C60F872855AF11088598254FE85EBA0C5776C787D314B5EF092209D354DCD84F85327A92C177AED949A6C2739022597119D1ED4808FE9FF2B1BC4FB2D902F79C6E6E5435A4F4737CEC79570834CD3BD4E9BF7F2A3F7E0D3DCD006AF83CD188D61A4E0 -MD = 911748703B203EFB39CC4B820DCE6020B32B7D8886C6F31AFD0F294CD41A629B - -Len = 974 -Msg = 107FE24AB253AD1B0100BAA74056A3637FB2A4CF89B13F618F947268BFDE6268F964B43C87C99D908657E9BA033059432A4DEA8E1748F7043C73FAE823B74CC10214965EC2F1E021AFAC25D4A3928C90D88CE4B881DB75DB5137B0B890211B9F1F89E262CF062223FBDB7B7831A320439B27013C83B564DF9F2C -MD = 08533DA64CA79FF3015FE3974FA3AF9446ADE8BC3D9173228AC7A983D379F953 - -Len = 975 -Msg = F6202E868BFFD3E288A03F4D334B78B723CC20F86FEC6AEEAA06693E3C6BD631C42DCE3B999051BB23EAC7500E9D94EA968C7BB0D63011D9CE2A4A58954EAA2AD8DA5A275E39453CAC036227E4EA4EF0712252A5F11981A63EEEA45BD335D33140208CB20E7CB2B4870AD4DFFB5E0E8C06D7E822756782B5D2B0 -MD = C43C0C183BDA8E13F2589E053C101E4CB94B33F2414A1BE5E32265A9E1FAD222 - -Len = 976 -Msg = 651A6FB3C4B80C7C68C6011675E6094EB56ABF5FC3057324EBC6477825061F9F27E7A94633ABD1FA598A746E4A577CAF524C52EC1788471F92B8C37F23795CA19D559D446CAB16CBCDCE90B79FA1026CEE77BF4AB1B503C5B94C2256AD75B3EAC6FD5DCB96ACA4B03A834BFB4E9AF988CECBF2AE597CB9097940 -MD = 71B4F90AC9215D7474B1197D1B8B24449FD57E9B05483D32EDBEBCB21A82F866 - -Len = 977 -Msg = D92EC59AE7D2C38D0D6C4203EB551D29AE72AE152241E0D42D6DA610B3070A4DED3051A3A607CAEF6EF487402BB205C318AF4C22048F1E3C9AE33B087C2DCE7A40F7D61BBB6AB8C0BF8EB60CCAF24CA5222A72967AB74A99C2096B8E432CDFA0F38E6BD59DAD95E1B0A5932328A36B62897E872A20358D79988D00 -MD = CCB959C41AEA5C490EBC61403566EE9AF1BAFFBA8DFEAD830848A39646E82042 - -Len = 978 -Msg = BEB1651BC96984876B509D703934E82198129E9F6F07492C1F37A6C8F8A7AF06D474BB23388AA492F41F589A0488C94FFF4BB6C518172CDF1804EC417DE35C212A44B65C73D236882327228DCEAC23BB05796735AE4AF05A7D837824CF6E4DC429963C16B2145B29DBA1516B37ABDF0C0C4F917EADC2643BFDB580 -MD = 8A4E93CF78CE4347BDCF10276DB0555D710F362ED8D576530AA9E475119D1A68 - -Len = 979 -Msg = B19714A2A02455CAAE27AE643E9725A143BA473B9A6A40E8557C23072F094404E0D22A4649264C064B9869AF35F01D9453F2B452AB469B7E794A60727B23C1DD83BDECFD8269DB59FEA168E524A9D7A9F700247C5965F8DF5A179FB667CCAFF1BB189D708E6D018DFB5B3CC16466B50B6E6244793887D637F60E00 -MD = 2E3EF7B4378801005868D7D2728429AAF1EC53889E4D906F01CC6A2FE1CC0F4E - -Len = 980 -Msg = 9DAAFFB294AE4DE0628718707F96B2714032CFC2B15B7091610EE876EFFFE498390F5625B33BAC592BDBCD5AC419F1C4133F346931BC2EB1A82A90AB5941FEE961529358F1A739894104CA8EBB3DEA22B492E81F2A8D7EBF7B208C2000F0DE664E7BC4B2792439AAEE2E796ED11D9DE254B583C5A1FAEF2BA01EE0 -MD = B6F24FEA8C192304703E6292AA2B1C7A478F814DB0EFB7AE02881D4A34019530 - -Len = 981 -Msg = 29800F52B584B675C62B0B26053A303D82E8707329E83689FF63DE1A55874D2155305FB332E49E49C016731B4CB4407D28703FF3CC40116DC5AE81FB8080F0DD8E29298570273C0255CBBE85C6236984F0FD0021A4951BD979ACF8C092485AF7DFBE4B98EDC81DC92CB2C3AEC62DCA758F70288FF04EC2AA2427D8 -MD = 2241314734398C0EB7136CB47000262772B7D27FAC5900A5FD34F67C786AFAD7 - -Len = 982 -Msg = CDE6DFADC607435F1D98A2E6C907869B5272F9CC63B851BEAE6185E4E1C08456C612ADD38FAF4E089A0DD4D8C74FD2705805F87417744938A99038AFA6A708BCAC88EB7723747099781BC44B79C35C00F0E609EB8E5FA65B197B3A6CAA4A1941CB5B9999FFBCE1ACA410D1F9EFE7BE43CFF02FB35FE893345EC070 -MD = 2BD846602F5995ADE5C00C10B83EC71C394EAC5ABE311DF1AD06E5BADCBDB872 - -Len = 983 -Msg = DECE0DCDAD18A4A646CFDF248D5A68171B9968E65F145574E6DEA421E73569DA82A9B941CA3973A342EA5AE80588C73489D3F42F28D347BA2FE9D67E0E7326BC3857D21A4AA0B70CE596072AA7979159F016AD11C28B213BFC467D68FCA254FCA30B0089AB52BE070704273853498FA055C7085696AF13DA063F7A -MD = F78DD313DB43C1BEC290951E6FF5545CD626813B388B0111636D28D2DC723C10 - -Len = 984 -Msg = 8AAF072FCE8A2D96BC10B3C91C809EE93072FB205CA7F10ABD82ECD82CF040B1BC49EA13D1857815C0E99781DE3ADBB5443CE1C897E55188CEAF221AA9681638DE05AE1B322938F46BCE51543B57ECDB4C266272259D1798DE13BE90E10EFEC2D07484D9B21A3870E2AA9E06C21AA2D0C9CF420080A80A91DEE16F -MD = 3B3678BB116FADAB484291F0CF972606523501F5B45D51063797972928E333C0 - -Len = 985 -Msg = BF5EA928E0690803906D6B96FD0EB1B2791C097B2E89A833CFB31E39925898AA6AC461F68585C43A4CA02F1E2E2E0079BAE65F93FEE50F0338913B806CAD9BA941D8A089F219635B170905D3C6564B9D8F30923873CEF618D44DA784B659F0A070454D57BB93AFFA4BD4CF2B12266F5BFA32A8BD97420DB526D02600 -MD = E06A736EE936760D5DA5DB5FC9EC14F0A3987417FC3A49761A0962FD8846AEBC - -Len = 986 -Msg = 8739B52698115E947D96E0F4B41E488BF1233CDC7ACC1B44A18EB0FE4DF8A6EDB47B5483B9A1389174753441289E00205C4CF7A55FD4D2ACF5570686DC12123DC4CD26DB5C6DE03CEAD5207BEE94D63F280CF40D26EBB7206122F34D17ABDD570A4494DCB665D40BA8DBDC46650B4166D2613D628B3FD1BB6A60C9C0 -MD = ACB9A6BFDBF5E0327D53A59331DB76AF8FFA644C861BE060BCAB03F48C2B221F - -Len = 987 -Msg = D610C8FCCF7577909810F3C630784EFCD2FD11F4F5600774977A55CF141CB15254237645BCCB124420F4AB52268AE4E3D128FEA4AF96EA09220874F5ABE331AFDBA7282B3108F5633D00EC247F862ACE4FBCE38F91A02C21B03136AD7FBC105A3AC0A49B08637BA4039FC3EF1FD2A82AC756FDE1C753C628CADC8C80 -MD = BB82D877D0EDBB177F86A464F33AA531E173FEDBAF395A30823D1F5A14310FC9 - -Len = 988 -Msg = 075487E9BA7B7C40CE8107A554A8940D6B041920A9124366D88DC20E2F89622E8A98140CC1F23AD25C71E6261D3C31BD9BDDB9A8DF92581350ED66272507BF63A6B838AC8099C31FF7832423B1B7B066706F318E5AC45F04999C5A29587CD11A21D3A96EE4DF76D5B25D5E5A978A79B67398FF6C12700A5290A4E580 -MD = 7EBAA4BEFD475EB1ED4F7A4EEB955DF1CD955B30E8C9111A48567F0D39A4170A - -Len = 989 -Msg = 102B3D774615C1D8140E59F3FE9AF4DF5FF0165A61E5D574244ACDFCF8F20CD0EC99B5E4D8562C2927E47395D7649461A1FE98C845F0164BBBC1CE42309B4C7810A49A99A16FB123418AD4B88B012B5DF7216402491A63B67D55989498F15A94D4AA6C55964EE0F557509C19F1A6E3BB76926FB6BBB5ED7AD6E23B80 -MD = ED3F6E91B9A657AA303679E9DF7638F339FEC7A15494FFB919B377C2F4E3F6E4 - -Len = 990 -Msg = 2E67063E542E25159C357C82BD71E869E7A1F1C364D9C4932C015EB6954E2BF55F087AF672D91BC3061933C8E94C6E524DE8FA2D85B7BB9E0C9C50ECD078A9147F431CAF3AB207AEAF57A10C20016943084B0225238C6F8F36C5631D359E6D6BFD29440A404C9607981CC8DD2051002F049F58FD3D08390B8DDA62A0 -MD = B08929B637170E57B30B6570164A3E26F759B5902D768FF7B95D875715CBA2BA - -Len = 991 -Msg = 335674F14CD689A1D83B1BC3568CD0F1BE5A8024349E5A863C40F3FD2B4DD49F5F13823C4D2F38BF87D4BB30561B21D99294E82653B98495E8186194D636EA00D66FC39EE72ADF537ED3C9B46377DA722097753957932CDA5FF77F0F756585CA7D1C98F084E90E96C1F7425D7B486F1C9844EE3A554B0F8AD620FC7E -MD = D67FEA66F6EB8924B8C095C291A16CDABF787DFCA52B207DF4A85EC88E2366FD - -Len = 992 -Msg = 53F918FD00B1701BD504F8CDEA803ACCA21AC18C564AB90C2A17DA592C7D69688F6580575395551E8CD33E0FEF08CA6ED4588D4D140B3E44C032355DF1C531564D7F4835753344345A6781E11CD5E095B73DF5F82C8AE3AD00877936896671E947CC52E2B29DCD463D90A0C9929128DA222B5A211450BBC0E02448E2 -MD = 4068246495F508897813332962D3AE0B84685045E832A9A39AD5E94C154D2679 - -Len = 993 -Msg = 891C926AD668CCD7BB7718C43C2E22A8E5C2D398B8287689326506EF244112D0A5E03B2199F85B01F10DA8C4AB881773BE0870323A0F1BEE0B340DE96BA0EEF086784B496572ECF67B31AFDEE367B808109609D8B997604C0DFCC54CBCB50297E6768B74A609536099B308D30CCB665DEF4033F12D48F7182AF000D900 -MD = 0C5BDCFD26909A5E260EB984A711BC2787307A51323F06F16BCF073D15940E91 - -Len = 994 -Msg = 0D5D9B2A4E8F4B3EC6B901A03AD1F0993E75BFAF629E94CCAE58470FA6411CD874CEF26955CB5ABDB3221BEB44996780E23962C7AD87A92509A98920F1A4486AA27387799AA3255F0BB56CFE17C11A6E9F8CB4FD4C40EE7A514D32F1231B63ED092310D99C2351DC50BC79439DE971F12C863B9EBFB555BA75CDB86B80 -MD = 87C729A9AAF7898B0CF8FCC324922D3CEC38C9B6322D52CBC0FDD41D4D42BA65 - -Len = 995 -Msg = C41477734638902C6CD4EFBADC2B78AB296AB64643D08B54FB4328639781993EFCB34777C3642FFD7FE95E773E8F9DD849243C0B268A3C1C867EE6674A303E1E8AE048B1058827C48590B8398ACD53EDF8EB6B97B036ED20AB921B9ABD644384ECEFD985135FE185D69045CF33F5FE18B6193D5B87E330D553999E60C0 -MD = B8400BB7EDEEE79AFFFB9B51F54D9CABA0F145A9378417ACFA202C57A6978ABD - -Len = 996 -Msg = F8DCEEBC6E71E0654F2C0AD8ABC7C07194E32BCB1655C86AA04088A083A675A76D266CCE0823CE15B5C8C059B795B318DFD115E51181414F4FC1619C1DCCBE909ED9A8154ACD44BF14DEA59E13E02C8940A122AE36BDC86E088A1725113560B5F6F3E33DEDE2495538F6D49676E0BD590C721674D55BE3B138DB3BBD50 -MD = 124258D92755413E54A361A4413C6CE1E187D0999C4A073982CF7BDCF9FC2FBD - -Len = 997 -Msg = B5A120C542550C04AE93A55997D6AC48A3A3CDD159C3151882BEA757AB79CE25892B11C2A6FCACC19135DE170AF6DBECACD6B0172F1DFC9646DA56EA3623CD6179F2F023D06952505731E85F4295833819268FA43BF3B00E5418D355AF79D830400E250E5F04CCB7CBDFDC20CA1F1534AD8D0C0AF78A7048D8CDDAE280 -MD = F727F71D5E316D5E75F478F3431C476AC2D5637BE50121412073F9CD1B4F58C1 - -Len = 998 -Msg = 29DBDC75C55797AF9D8EB7205B0BC8703B69308568C992E23FB33506F880857A02EC1D4B5149A0627CC898022F7C8F5429C5C7BCB0D6F8FE8802FEB85A5879CE613EDA128C473AEFBC11EB5ED774035A0A5ABEEACF72B4BB633389745C662FCF678C0691910110091EADC11912D09EAE4877E3B03A997A89261DEE46B0 -MD = BE08AEE8A13BE58E189ADCEB0A3C766C3B4EDA5C486EE8983FF6556A6126F7F3 - -Len = 999 -Msg = EFC078BE55C0BFF648E9FD2DD9A33B283995B7C4BD5B0999E804EDA614EEE19D224108C5081CF84389165DC607B317711D5D6ECACD080D272B28C364A609138340D8F2681CE9116E5931CEBF9EC81781E19DA49AC394AB340B6543C377BFF08C08AD9EBF9455030644E5A18ACC73CDC64EC0DC58785885A12CCC08D570 -MD = F01370488D9D7E2DDB55C317D12FCFF442E125293F57E77A9A23AAA0247FD62F - -Len = 1000 -Msg = A64599B8A61B5CCEC9E67AED69447459C8DA3D1EC6C7C7C82A7428B9B584FA67E90F68E2C00FBBED4613666E5168DA4A16F395F7A3C3832B3B134BFC9CBAA95D2A0FE252F44AC6681EB6D40AB91C1D0282FED6701C57463D3C5F2BB8C6A7301FB4576AA3B5F15510DB8956FF77478C26A7C09BEA7B398CFC83503F538E -MD = 82696259536520E5E4D47E106BD1DCB397529AAFB75878F332D2AF2684493F1B - -Len = 1001 -Msg = F8A80B5D707D5CB67837175D946F507B9FC4E58A809044BC4E61F4FB2D2B986E4169ED4708E6B2ED0C0C308148129AB65BE6DF0E9C62C115C003580B388D40F29AE4CB435F30C9891D595D72CFFE36FADC5E39FD5B2A423B528106FA717580FDDC65F0B405159BE436C049D22096E314059540D64362439FF04FF07BCE80 -MD = 5BCB793BD1610D665D5B5384969EFBD9F8C8326366DB92A94175686D0B06BA04 - -Len = 1002 -Msg = 881397A6C422988B891645BAFAFEFF2EAF4897BC1ED598C693B14FE16F33A553B45BBC4C0FE5F6327460ABC45A35D70427A867DE78BC7BB27C087DCF0E0E416C71D8EF95CC3FEC40AE699470A354580BDA8EA4CD21CFEA433CD2AD7A87DA309C3A7CA82FC80EC318CB7DA213EBAC14D3E8937C07B6175769451699373580 -MD = 7D07B704F0AD8423F9E603198972E2515B910F840352749A34FEBACB5B93D104 - -Len = 1003 -Msg = 2CA31ECAE38ECCBDD176B36679ECC7914EDE98BD88D3426589EE92A0BC1CEA705712B3D7CD9DD823A56F22F506966FFE58A2B6E10130B47401A62F67687E4DA182DAAD13226F08784A7DD8C8E1C1005EBC8D631D6A906C1C3EF7846298A9B18826A23F7A88BF20FA80E583A12D3A5A675998D5B561CEC96B9072E4169040 -MD = ABBDC3AC1028662C4FC47F8C69046298BCDCC4AC4514F5021F7A60EF89ECF6E1 - -Len = 1004 -Msg = E352E6FC140B3A9CF77DD2313ED07C5BBEAD0B6DB80C38D9667036AF05BBAC2AA8E31B93A63C98A966E13356FA8E6FC312B84D8FDD72A29AFBA5429D67521F9E650C0D68501DA50274FBFB946365FC6F5136F855B973054B8FFDD9237E8A88E955CDBF7762E66DC371F00E0AC8F91FFF6572894D2C968393EAAE5B0B68A0 -MD = 61A3820627C0B2780480AD49A0D2D66194E16D718ECF9F62A2BDE5724976515F - -Len = 1005 -Msg = 6A8303912378CC2EFCD9B9A67FC21041FB19CE06D716B180FB308BE88B7F3B3B089C833378D9D97C8D0B2D35F68C48CC25A2202565F8FFBDF926B2E99F0E62C7E7A876C25A58219A46C639D0A8FD12474A6EEFB717A4343F301E5801A8F4011FA7391F8C37386A3209B0E29A8C2656D245E60906D2BB0671402018CBBDD8 -MD = 955BAA0561F60006667B8CD349735CC1316D1F49A3FC0407E619137D009F2D83 - -Len = 1006 -Msg = 91B2A9D434D3EC751C5881B9F738D5F799B553D6E9D4B8F928C845D4113142FB6EB9BB3D10ED463D83782FDCE58389F2930FFB4AAE89D505AE1FE7370F45E2C4D52EE64BA7F1BAE453CE068B494880F83B8B06EAD4E41889F30EFF6780873E2DC880D1C0500E85B189143BC170231891699D1E42E80375EB48B8A64CB61C -MD = 3ED6724B67774CFF3F3E679B80C16A7B3514302D8E678F037E2EBFD00F0CF5DE - -Len = 1007 -Msg = DCBA43253DE673A87C700169DF961A6BB5DD1ACFBD29D882933E67CE38A28FCC270028FF5BA9F0CA3CB243FBFDA95955B065873D33C397969E0F6B6BED989B99C72A2C6732C2F4C9A50FF224EE7FEE4A35D008C89A08DD7A69BF0514F0B8418D0BA90BDB5DEC7237B4CC4756192B43587025C49D678213A77ABB8CCC6838 -MD = ACA04294ABA97422D58AD32FAFBC7AA3B2CC74E2AE7498CB3439A0CBE6038968 - -Len = 1008 -Msg = 0E3AB0E054739B00CDB6A87BD12CAE024B54CB5E550E6C425360C2E87E59401F5EC24EF0314855F0F56C47695D56A7FB1417693AF2A1ED5291F2FEE95F75EED54A1B1C2E81226FBFF6F63ADE584911C71967A8EB70933BC3F5D15BC91B5C2644D9516D3C3A8C154EE48E118BD1442C043C7A0DBA5AC5B1D5360AAE5B9065 -MD = B494852603393B2B71845BACBDCE89FA1427DFE4AF9CDF925D4F93FA83B9966B - -Len = 1009 -Msg = CBAF5193380537A7BE1DBF6FBADB77042397BB65E092DEB4CB80BE1B34F92C75F7F1665AFA86590CE2E72CC8B36FB7C0326E37C02D63E153CE92D8A7C8A0AE01B27B41338B21C0C5FBAF8F717D930A2259EAEF2A0151878630A4CBE4024F71C3287687333BB163B1A6AD90102796CC902FA5FDED9E8D036DED9F4FEC12D880 -MD = 8FC652A7195D12C375F727413FFD5F85A0979FA92E9FA306D66B2954785BC759 - -Len = 1010 -Msg = 2BBEC642C07331548CEBAB8CAFC7A9678156C6D9E0F344D76B924D029B395B5C5C9289793D84C982EA84048DB0241F1A765F6A62BDC005CF6D2A3DA487A83841624D2C9BA17B9D682BB07ACDD98362D58C0956FE14EA33AB66AF46369AF0017E95EFAE72877FF0BAE5F971CC1ABA22FB0407C56A45A29F8CF8613B84C8ED00 -MD = 5B3DF8AE7C0000B999208CDFD6F6E033F3CF0316B655C943D132B4AF093AC91D - -Len = 1011 -Msg = 4A51CD0024B4B64885B922480C07B0D8B5A0FB9333255262BF8D9D5184A2DA73FCCA3E41C9100551D7DE7E2C1EEEA23BEAF4C3D6DBEB9E776BA9FDFF1A12E2C0E1769A1A2504F9CF1D295015E0C302930865F873A81500974727D81B2885620CF3F6D84375E97AFED7CACEEECC4D973E99E398678807EA990ADE94BC6D3F00 -MD = 6B88D0A1F9AFC3EF040DAE3F3B57A45D3EA29337E3019B743C2F592CF9FF055B - -Len = 1012 -Msg = 42E9B6E6107B2AF444920DBC1CBB9CE206A544D8CE5BB35901428C12E417E1672663EC7AC0E880636ED2F6D314942BA1A5B8A130F5B27756721CAB6B07C210D4292D23B4295105259304659C3A2198F2805FC8E0DA23132E53776309BA28D98CAD0C50B8104FF35A67C609310EF324E20365E695A21AA751B60742EFE9C850 -MD = 26C8C2E278298437E1748BEC1E6399189A2016D0A11BAFEDC59ED67B06EC8E79 - -Len = 1013 -Msg = C1D22289C5BD9E6E58CE5DFD1E04F8554E21C45DB29826C2CC00C2930FA6523B6300849B3CF3F687156EE70BDDBA13FC0B159901BA0706973B231F1B14DE4E5D6B0530675318F7C9D58319A21D674C56983AA8633956318AEABC4F81C4A67068965A0C32B822C541562E2B73F2F77C1812963C16BF862C1E56F908379A28E0 -MD = FFCF162BB08682E5B0B4C2F6DF8527868326E5CBDF040AD16CDF14E425D0F869 - -Len = 1014 -Msg = AC30B8A0576A71EDCF7ED976281063BB934E29B0DA7149CDEBBF8AE7243EBEA77E669D0D831E9995F56DF3B3474D88D721DFC91AF2BDA84DDA53B56C8B3CE6FCC0D4858ED135A3E549B8EA79B8B9CA41B5FAC6E326B75ED57EBB0096A54B2C13421EED8AFA38D9DC88F0CFB71ADD6561F564F28B3BE0CDA21D045081B74BC8 -MD = 2672F58063E7E4E73CF92249118FD4B193EFDB733F78F9B516B9A2085368DAB0 - -Len = 1015 -Msg = CA1CB2686F67E663F17744F498F8C7191CDBCEBCB4C39E67C1136FE707E59F1993E908FA5CB3C31ABC31046B896615096905062BDC4A8909A253D967DD9CB47BFBA1817CDF7870D3A39F5E2C058ACA26C88871D94E3C10DAE7E9659C3D8BA1732B97271F1B41812A89644F3DB0683DFDCAD82C28B3C238B73602857F5DAC3E -MD = 8005DE6323D8C2A57368AF52B303DDB2AB73F4B9C7911F4D474A8F957E59C236 - -Len = 1016 -Msg = A62FC595B4096E6336E53FCDFC8D1CC175D71DAC9D750A6133D23199EAAC288207944CEA6B16D27631915B4619F743DA2E30A0C00BBDB1BBB35AB852EF3B9AEC6B0A8DCC6E9E1ABAA3AD62AC0A6C5DE765DE2C3711B769E3FDE44A74016FFF82AC46FA8F1797D3B2A726B696E3DEA5530439ACEE3A45C2A51BC32DD055650B -MD = D8A619C0DFBED2A9498A147B53D7B33DD653D390E5C0CD691F02C8608822D06A - -Len = 1017 -Msg = F27A756754DF98BA50E2A4EE3A11535C80A2076191D08CF98015F232BE0599317EABE4168C8A4ADC9EEEEF6DF285B9B00BD5730EFA61CFB094024D5B4C20EF6F8CDC1DF6CB6F75389905BB40F662C2D4D293E61E59A6EC2186600531E17E9A4D58F785029E6603B09C4AAAD31F0191CA3FFCB943A976E508F15918BAA7416500 -MD = 71139E48BC849D5ED09D287AFD4AF1F031385A3D4BA5E876CD88811E61FF18BC - -Len = 1018 -Msg = DC3A0D1D54DE91AF722FABE877CC34147D356EBB79F45F18F7BFB2772F53167C712FB6D6CD8E51FA6DD3D3E78E49C2B6489FC38AB0311FFDB36A5AB6B658FD02A4710B8897324163E3B233FA7EDFD672F44E1AD4CEFE2EAB06C8D8421D05D4F300DD967215EEC4A8AD9AF47F04D2C99C0205D6B66415B6DF4B7EF60DE972FE40 -MD = D28D77B7285B46A7FA2534914DBD835DF755BD7F505F6E095E3C92FDC932FF2C - -Len = 1019 -Msg = B39C004D0A5DDF2AAC50BD18F447723AAF56CB3089D8619AF0A86904AFAACCE22AE12C376579F53B5E63B16A37E710ED86A24F7071D0AE6D4E697754896BA7D647B7E10A0D56E5EFF13C4D213F20F34E57D2EE99E0232518CFF32BFED139337FA4FB8E5AAEAE68A6671AE852724E0978BEFB518B97E2DDE76760739CC0869C00 -MD = B5CE72CC252E590D8162CE1DF01F30201D76574D21BF7F6A2400C6757841A411 - -Len = 1020 -Msg = 25016111E052E9A09A597EE2AC0F5624C970A4E1A1411160E13D0D37F4F0013358A5DF1590D1215397BA8ED93463142D9194A0CAF5F6FB3C8BA2F7B151C764A873A6F1A529D38C77F1A993BC7E98D6FE7FBCC66E9F8C96AB7A17A728BA2FB01A017769E208802BB1BFD7E837709B408D3ACDA2CEF1127D4F8332F7933B664980 -MD = F863BB30BC6BB08AE67217EBD2EB7B0A713F0A9875AB29CE125029B66A27F196 - -Len = 1021 -Msg = 7E699CD10F06D8CC6CDAE2C97CB90DA76FC28E1349276390C7DC7388409B7AF6118F5F291559145E09A47C346B32C89DF8F6945C6C901875CDF143AB3BCF6F6CD122783900918079B193E18461567FABB6FD6B18266519C7E4CEFA79CA89558A5613B67A375AB603AA796F0F20A3D79E7F47ED84E996F23D9F3DAB645D30AD00 -MD = F83220A4824AA7651124C730AF7408A82F4E6097AC8FB8DFBB9C81C3A13646FB - -Len = 1022 -Msg = 7C5260CCCC53E47F31F2389A70B999403F90933FF1EBCDE519D5C13F98F5209BC1D3DBE907DF24AE4655F64DEAE48DA7F932805BBED5BD670CE1180A9CD095BFBE078316AFAC497D45DF3DEEA8BB092A8827C0E4C63F5AE2408465B22BCB793271207818220B5E9001B14FF788E992D5C70FE7EB19FD1AFAE93CF8D22EE33168 -MD = 7E29A41186D41280C7FB705170B7C5D5DC13F9AC78BBCABCDBB3055F06E4A06A - -Len = 1023 -Msg = 1B4BF91CE5B2317E526F4046E9CB668AECD040B0F445E74A57544BE2A4F8572C5BD363240474BE6E7285B1A094E0F938D927BAF67B26C648A4A2933EECA67B3610210B7D3ABC972A0A6E1698BF2FC8E53E50FF4458C2DC5D581F78CE93A7D5758B3779FE9C169282FBB5BB0FBB84253AF925D1599D63C1216232CDEAD5A6AA6C -MD = 3FB8980346623CE1C9B76F73393162C226C3925C2C0E6B27B28E04C1FD2C8490 - -Len = 1024 -Msg = 2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817 -MD = D82E257D000DC9FA279A00E2961E3286D2FE1C02EF59833AB8A6A7101BC25054 - -Len = 1025 -Msg = 6EFE4CEA291F0EAB9A6240240558F1D65CB9570E0D0DF643146470CAD699F010D2E22AD80E1B5C0312B9615084CC515BDF63E5F4153D31D97322B6583D962FA5B2864A7E5759B6E5E5472A8EB058046170B9E6FE71D49143B2B095261A0FEE5254B5CC94AF47E54BC23AB122AF7662BAD4C908A80CCF380A64854FFF50E1600300 -MD = E72D4E64975A9EAFB60651495386C620CE3F924FB4C6B38050086BB3FB19F2C6 - -Len = 1026 -Msg = CA5E7C549122799F037C32146F540EEF7F559847000F24429C6163D88BF3FB8D8A973675A565340B84317C49F6A998125F0A0E282F9F0750D167DE1B52C2F17BE54297910FEB779639436FA5A07B56456EED08C838296FDA8171854208C9DC9EC982A5AF9B407269E89DA2DEBD8F26020DD91232AAD4D78C1BE53D1E3261FC3380 -MD = 3C397240AB0F97B174220E2337A9F55FBD87583B6F330AA1B832C8D805F97380 - -Len = 1027 -Msg = 7CB99BC76B5B91CFECC52A2D78F09B63364DCBC4055EAA2CE91714BAB67F00B832E8DE22E9CC577C1496B7A303606789429D1C13DF87773A36D03EB33AF1C7500B6124FF3E2097A79D601453A635294C5F5794625363AF403E49B8F7823704C3F4A1F33A44614CBDE133073FC692F7030F5B2564E509BB84CC65632FEE1F35D980 -MD = 7623C1AC02D62A3C0BF67F9D6A890BD5F958DEA001E5988CAE93B0699A9F3A8B - -Len = 1028 -Msg = DFDC85887AA85D70021BBEC37A88C783BE70256A977A14C11B5991ACD3BE5B8945ACCCEB2774E37B8161E105E30F3DC38E2A610EAE923ED300C56006E719F4BBC070E04BC14267612E0ABA5F08A1C7C5070DDC31E30E2B6ACA6289CB509B356B6D67A1BDC383A51E70F689B0CE6F333216AA76209FD23C51E65BA2D04829308610 -MD = 6D5DE2A1B8C51016FB886939917E739BB702B916E6236132E6F2821AC081D9DE - -Len = 1029 -Msg = A4490E4E8AA88667CAAA47DE7E8B1CEC83B5C75D883465AC3FC2C875FC068C2857D295B17A64C91861C8D091E54BBC30CB67C27FF77758FF6C976EC39ACF03B0F16E53320A4BB00F3B43D9ECE4151CFCA00C5D0F010165AC8F78A31F6A25F978A5FA988351F7B14EED3D72AC36DC135E86B44A4591C25C7AF98D88032732F9EF60 -MD = 4406A05FEC93D3986C199B6E5F4AADC21F420E6C9A8D98E5DE9B6F19CC9F8E25 - -Len = 1030 -Msg = 254D2D7947E9A7079C88937766191C20706B2B550576C82ED60B25CB3D262A42E458AD0C900080BD9DE109E25A414644C9CD8AD52554F9519B46952185E04C2928BE22BC07665F04C02EFC5A4EA79A6FA631726BB98EB903AFB014EFDE7DD1261D024A377BC4DCFEEC04E3387F89BE8CD10CA73D1564666D2CBB439D3F9141E4A0 -MD = 28553BA3F5E85F928C44C8124C852278E6A19EDB8B1DBE84801D94644F16F4FF - -Len = 1031 -Msg = 78EE5BD77828543846085243397AC50664B2C96499765E491E3ECB95AC6A969B80FE3421A86D31FFE267DE151BA6FD7723CAF30D3EB7EE316B3891C24F8456934AE808DFDE484C421A8BFD3F60AAF2CD2D52B47A6F57875BFCC41A812E90D883448955BE552E351DDD41394124413321435188516FF1D9A461F282CFB835EBC862 -MD = 50AB697A29CA2CEAAB523A193F3759E6B6E27353AD056D92AE784861497C651B - -Len = 1032 -Msg = 10DB509B2CDCABA6C062AE33BE48116A29EB18E390E1BBADA5CA0A2718AFBCD23431440106594893043CC7F2625281BF7DE2655880966A23705F0C5155C2F5CCA9F2C2142E96D0A2E763B70686CD421B5DB812DACED0C6D65035FDE558E94F26B3E6DDE5BD13980CC80292B723013BD033284584BFF27657871B0CF07A849F4AE2 -MD = 8D5B7DBF3947219ACDB04FB2E11A84A313C54C22F2AE858DFC8887BF6265F5F3 - -Len = 1033 -Msg = 17934FEEFB19AF1D162F47DC010049B39C84AEBC5E11D43D9B46F843CF75F8128D7C655F10E7A815E9A6339D1B427268FE1D16B803E1F1C9FBA0C76DB007B520D821FAF833248F539A368ED17396DAE14C85009FAD853B158C1C48FB06006465367E3ED31437580E094E25452FF26DBAC133553D3BD22B7C1578E314BA047B799280 -MD = A4671A708213291E78E743D8A23A1E2B80532FCC7B293B9CF102BA89EAFD0FFF - -Len = 1034 -Msg = F828FF08E8D707D43B3D19E6528A3E0692259A8BBCD079A4030EE0A43B095E7C508666123E7DAB54D93A71A3A67C8013EA2E20AE0629A62242FE190F7891BAB9234CBB7AAAE3AADE2E427224D7A018B0BA866AC05FF87A7B7391FFECEA5E94E66B62B63EF03E314F06F3BE2E54CA6339B6DAE797D17DCC78BE7144C54B670C5B8400 -MD = BB20699452E161F8AE36C5D99765292425D18F490A6126A806D7CC5D4DEC0498 - -Len = 1035 -Msg = 3CE70939498490AEBD7EB61AEB4216954AF123E90DC7EFEAC7BD364085BB7803B9C0AB20BA9EEF065B301B417FEF08B994BA4D2B52C75EDDBA92A57D3FBE962A5B519A0F3B1FA3ABB39EDCE126A124741842C8F745E33D1ED1B082AD01D86007EE431A8774981EEFA9286D1D256F75624A59C222AD70C012DCAF8E19A7ABBE27B0E0 -MD = 4BAFC1FB85F1E447BD2AB383EB01568B869FBD7D088A23D91C82D75633C9B42E - -Len = 1036 -Msg = 0EC5838E1DD9C1E01BE54B20EA20A834D4573A4F4CEC151A40EC8D1D9F97FA536EFFC957AA86CC96616C4BC5BEA6F15820E9E1BA794674309ED6B90D40394D644D9A81220AA7A6EF9645ED760375A3EB3F515EF80E2ECC816809EE4E0ECA9A41482C1DD65964EC78B3566F8F5A9C7DD8746A66ADABACD2D827331CDB3CFCE2F94CD0 -MD = EFB5608ABF503F99D86182FDBE874A69F064D291B81F69DF2760907099BD7F0C - -Len = 1037 -Msg = FE5F59C765736017B6105040F249FC5B6957FBA1ED5E4A4F625C7F4B9EF7B6F2E24ABBC543B1CB53EC8B52DBA94450B13893320701FFACF1730073752FFF295DA40485F8B8DE9B3F7B1FEFB4C1E07564022A3DE7F102FCE0F37C6DD08220D1C39537DEFD9DDD87ABE6833C4727DC08E81E2DED23CADC3D52F28FAAD89C69BD66B998 -MD = 0195C0017F0E9060FBBE9103B193471EDB35D3800435C2F93FD8BC9082D6B128 - -Len = 1038 -Msg = 964B2419D5D9D2840AA6FF56B88321D60320599B00852613C563A501FDE3C14CBF4591759FB6CB3BAD876FC0E39DFD4866B9978B65EF92ECDE9FECF3484BEC6A125D0ECFFB00ED074C2570CE913C8916EB3A7EDA6E9D70E133C0E61879CF2AFC0F4D2A3685A8CA979621D80100F6C0B2ABE9F9957D89724180AF98655CA7955D428C -MD = EF51A37848CC9FEE4AEEDEBE198D2ABBFBFF0915366A968F9E3BC6509F563767 - -Len = 1039 -Msg = 221BF8337CDD673D323A6DB530A225E621A573D5497B1841D27A96D32AFF8E499D1EE360CD8D356C907371A034709A9CE02E650426A0C5E9618FE41FFAE0A57FD2CEF4C47437557EAFF02CC2BA394303C336A464BC9241C8FC86C157B68E35B36B8BB301ED5F906207871ADB49E02EC8FE2BDF342D23C8327032DF70855FC6B1684A -MD = 695CFF3007B5395482BEE446B5C2FB09A2035951B903C10C38D45DFB2B8C424A - -Len = 1040 -Msg = 9334DE60C997BDA6086101A6314F64E4458F5FF9450C509DF006E8C547983C651CA97879175AABA0C539E82D05C1E02C480975CBB30118121061B1EBAC4F8D9A3781E2DB6B18042E01ECF9017A64A0E57447EC7FCBE6A7F82585F7403EE2223D52D37B4BF426428613D6B4257980972A0ACAB508A7620C1CB28EB4E9D30FC41361EC -MD = 607C3F31342C3EE5C93E552A8DD79FA86DCCAE2C1B58AABAC25B5918ACFA4DA5 - -Len = 1041 -Msg = 3D90A93AD2235F8BA283865E49711D1C3C990F5621C18A31B626421D431476F367B06B40C5867F416935FB556FC2F8628F7BF9AC3C28BD796C2A332B46CDC624A62A21D22AE6CBD931F5A9EBED57092DEF55879D7AC9D05AF4475C75CAFA2F2F3720A830114056FF13CF9B0CDFBA04CF358E2D6F0C1186A68C871ADC4DDCC70F476B80 -MD = AAFE9F4E7262ABD17F3D2C22432964A6B7BDDF529CB99A1569FD003237E2EBA4 - -Len = 1042 -Msg = C8A7DD1E3C1C4B00E21E0709922D5A2EE2DB3EF4D8C772DCA8006C9E99577C2E5334A3AC65E696D0878F9E526C51518421B37204D37A571D0F71C193A7C426416F5D4ADF1614D6B50DD2F316AC427291CA41F369B20E823990D6C0B4F557281624776669533F9D01EA31D56AAC5D6390EED5D3A6FB055BE7E7ACC53D28C657D3B66040 -MD = 7AF136D3DE31D47B180F8219AC82830DB8C7A1F0428296A47415C284DD04FD69 - -Len = 1043 -Msg = EF927430586D5B9B2774F1E92055A0BF6E683E0F0A68B3B6034F9E5B839BD0FCFD058E99C655B827318AD098DD2DE10DED60BC1B11A3A7AA1370EB898FA4505867A20236EF89EFAD3BE5A82EF39C785F24359B14B4B629008327E708F9A9830CC66356AC6F9D5E5D4EA6A733FD6CAF59F5796FBDEF70DE66B1A7C0AC56F12DBFB924A0 -MD = 32507938760D8533BA389BD6D86B871A175150178A83E39A747C732599C7C2C5 - -Len = 1044 -Msg = 8133BD79A1E1499D04B283B2AA1238CE2A50C1467248010ACA4FDF9D0046F6BB069DAB81EBC0F29DED2168FC8566E6C44EB222185C894D0FB582799A47F3A4F9147CF11A4359C5D4CAA8A00B60843BC04F08425073222E083D7897F8F760AA3640D09EFA0CA1127A536D19C09E7DC1C0E3409269FEA735E10329611772AE1A5FE87B60 -MD = 9972F5714329228C7DB0BC2522FF3F54412511CF13C24B17A14D6E86010FAF50 - -Len = 1045 -Msg = 017103601A622CC6479298FC16091B08BEAE94B0C20380EDE796390CEF7957AC31AF910E0785768817FD68DC0BAFB27F15960B8FB417E792DBA5779DEBAA9DADA43EDA2522277233DA2F544E53394633F3BF92DE1E30CE5B3395BC941F5229F56C76FECC6026FDF5E4A95EB6CD3E90121CD16E4DFDC617058A51290A1EC2F663EF5E70 -MD = 7D2FD1FEB7F236322EBB22EAE96183E2CDA382C185ED4403387588B12A932839 - -Len = 1046 -Msg = 9AEAC19F616A4DD3BECD72939B6F318651DBF59C6E04DDB52AA4923C4054F2B2F6A14AAE357CFC2C941DCE1B6E2D2766F29F401E7FE51EEE5D67504904B6600C2CE16B8D0BD3D2074FD00B516BCCA62C78246A5062DF3F7B19F47856F0779AF1A5FCE21CE60EEE6A3129EB592539C31982786F881744B16E0EB2357EE72A2BBCFEDA3C -MD = AB258C39523C40B038F369E998D8108DABFED417494398B8C1F9421FF4C97669 - -Len = 1047 -Msg = 464ECE94E81ED3387EE92183B43B4BD70F06A9F2FFE3072075102001C3BB608DFEF3CEA25EA521D74C95BEC09E4D2EC0BF3F65BC0C8DCE25FBC9D7A90B31ADA562278A89C3113563ED449EE12124ACD1591D3D586476B5B27D3B64DBF27934EE8CF97FE1F6259A0D520844886B570551BB532397EAA46C317F63728A37AB22A94D98E2 -MD = F1AAD5D2954D1236702B00177D645C1A9E5AB139A7462AD58F736EA3811EC424 - -Len = 1048 -Msg = E88AB086891693AA535CEB20E64C7AB97C7DD3548F3786339897A5F0C39031549CA870166E477743CCFBE016B4428D89738E426F5FFE81626137F17AECFF61B72DBEE2DC20961880CFE281DFAB5EE38B1921881450E16032DE5E4D55AD8D4FCA609721B0692BAC79BE5A06E177FE8C80C0C83519FB3347DE9F43D5561CB8107B9B5EDC -MD = 0656DE9DCD7B7112A86C7BA199637D2C1C9E9CFBB713E4EDE79F8862EE69993F - -Len = 1049 -Msg = 21DDEEF5DEEDD0438878B962A1D8A389678E34170A9C7DF55A2B0555D23AB3BC604D219AF38CF4B53F825CFEAF5B6CBEAFE028F61260CD1730F5CF32E2D9AE09ED879D4157B52618D6978A7C30C4DFD42A9C51373C98F486797589E362E3D0B27A7D29EB2086549A69E1F4EA94E915A2A2B08C19ABA3DA21192121B39AC7159356836900 -MD = 0F88A56E7EC95F3130163606C0CC29F216F1396BA54A945B48FAA2B5D77B9F31 - -Len = 1050 -Msg = 6A57AB28E6B5AE23DC9B0B3D9DB281C25F2CAE1234A491C5429A367C46E237F33246E28BB822FD7F0C8FEE333FF8F810C5F25D8F1755E7E7B35954E1FB5D546AFB1573D6DE44C4C6E15AC43396AFC517B2BB23A134BFBEE7C4FE7DBC4E966F93A1A92DF5CC79032E37B35BB5AFAFA31A2BF03152D8668C6A669321B94A5B1399236955C0 -MD = AE3C40F98EB1180168FAE3C961CA4F6B05AE93663212B7D113DCD7B67D6DF3FC - -Len = 1051 -Msg = 33DE2D5AE75E8F29C17C780363BA7A390AD99082C59C5131FD7EC40033D6BF32DDE1142D6079F2A3080A6CDB3F276C02C461882114DB8A6AEB5F91C0D66E189B2C956FAB3565E4FACDCA863859303557EBB538700CD5BDA9A40CD97150676CF8850A1AE1E7D349DA3E9F9A987E8FFB8A434E54A830833DDC96B9BE8E66D4B57E260B1D80 -MD = D8D40BDB9B22E2C947AEF914E7C644D4F93E6D91C3BB507E97C78AA5564C41EF - -Len = 1052 -Msg = F5A418ACA95D064DDB98A6E9F2782583280F70B7403D5973F622E50DAA6ADE937D9CD544BB8203092C5DBCAFDD426892E6B46EEB84940AD8E1D57D686EE51AB61D453672CDD90F4290F5FACF19FA52FC7DD277429CF978F174604EEE3E941F475EE25C5B839735F2087DA632724211DA3E5A9C551D5633FC0AE624FC93CBD09B85706100 -MD = 3DFDF7FCD3CC9045B776CC626669F6AA253784D20C1A9DBA8D468CEA5F6A4011 - -Len = 1053 -Msg = E7B4FC9419F04B5BCCA5FCBDEAA781B365FEC1453BBFBC96D48D8AA601433B22760055AFD7A200B6E3A5EC998B1DAC6448900D2C733701049A3AA90CDE4D673DA4E70C4A12340B5E88370ACCE0236D7F617240599E50F53D13D6C5DC461F8994C5CC90776305944DA2BE7F154FC18A1C1B5B31F4F3362D4DB7BED6248AD6E87831A99B30 -MD = 9C64D51393EC5E8CFF6BC46EA24ED6666FAFCDCF71730468FA8A95911037609C - -Len = 1054 -Msg = 446DF0CE24DD985DA3A3947E6ABB50AFA23F2FDE99D3F9F59F1331B9814FD363FFC551CA46EA987D10F1BA25E8CCCF2A4F5DE02C51A08BCDAA8306140B32B06A9C0272CD217B95926215C1AB32AEDE04F6425C1BE94AAE51CA0923097C128483029B2EBF8CDF38380EBC72DAAA62AC6FACCD9E35DECD63CC28326BD0550F54FEB9904278 -MD = FA5612023BE968804CF3E2F1821307B64D49E7625E3E5553BAC03E6F114CF1A4 - -Len = 1055 -Msg = 3B176161456A7EFACB82F588B41E9512F3595948C9F54630A25568116CBFD2B92C4174E11BEB34AEB35C3E496728734D4CB2B6BF3FF8477D34802FB6BDA003D3F03691B1EC4ED55BB58C7539A16636C09C60E03FA0FE6AC5DA402E57F03005BB0854E80E941D6C5DBA3CF2414F4140ED5F996B108FA054A68A8DA5BB3ECDE20EB5FA1768 -MD = 20868683870EE71EBFDAB9FAA6EF6D217A7D50931B7801DDECD44BE9062E6E41 - -Len = 1056 -Msg = FD19E01A83EB6EC810B94582CB8FBFA2FCB992B53684FB748D2264F020D3B960CB1D6B8C348C2B54A9FCEA72330C2AAA9A24ECDB00C436ABC702361A82BB8828B85369B8C72ECE0082FE06557163899C2A0EFA466C33C04343A839417057399A63A3929BE1EE4805D6CE3E5D0D0967FE9004696A5663F4CAC9179006A2CEB75542D75D68 -MD = 4DDD6224858299F3378E3F5A0ECC52FA4C419C8EBB20F635C4C43F36324ECB4E - -Len = 1057 -Msg = FC4C32F6D00559A9BD84443E62CA62BD3F9AD791CCC43DFB58A562E73F9050196DE4D1AA15515B22560429F7C6BE74066F3F55F2BD77A9FA2E8072E5697A76A9AE7349C72FAFF8C549060DD7290F2C34B23970F0F5504B120B2442802BF2E75641B977728AFCF4D36485BF2D155B4DE9FB392B657D5EC5BC835A344899DA6D996663858900 -MD = 248EB684D97CEEC1E9E699E926DBD808D4BFCF814AFC23569A440726432C95F6 - -Len = 1058 -Msg = 14CE9F192FDD23BBB8A407021CC2724E0DA6ED7234E06695E7693A2B02C1C043DE9833C273C0D1421369E73FC206FE3860D5B7F258301112DB5D85A5D2CCE3464CC6E4C45494A155477DC4A9BBBE5A34F4D8ED59371F74CB19809249BCD281226C0172E73C354923D25142712D307B3C4A68010117DB88EBDF7485B734FD1F7400F0607300 -MD = D7BE0345BC3151354FB959A11BE25BD2FCB3261D498564B1B76561670AD42267 - -Len = 1059 -Msg = 280E16F8EAF76DD5CB1319E7A832E9C8C19665B90D57034947D3FDAAE11FF7C9C4063543AEE6131F1240F1454141C18A47AB997C9DEC0C2E603A2B781C8886A8A27B19F72D6BD1BD0290263510A9452AC3AE81BAC01C91A759C404AB3D28F5FF4D6F193E3B22F44E2E7107F6D5D019EBA4B016BFE0E2C337B5C3D4516CB5C8E17FBE13E8A0 -MD = E33962A7C34E66B2FB88D8E38777366D2F7177F1F967B6101E6EE7FD5B933344 - -Len = 1060 -Msg = 0EFA3A88C6CACC9734525F2F6772CC9A7B55D07B87A53CD89E2B630909A96124648FC5523E0CACAD477E2A903F2EEE62B700902BB571E1A55282FAC0269378DE49C210D3D3564017A8DB4684755C0F139C414EED8CEF6993CCB1D76E1983B6666F90B16F5ED2B9A53D3D0439F3F532BAA784648E14B674D33AE96A823ACA205F2B1FCD5D10 -MD = A54434AB561F608B3745FF72DEDA6ACED767E9535859B75BAC4A325E6A273DA0 - -Len = 1061 -Msg = AE1BEA529E00EB3269266AC316C88D3300ED9EAA08805D71BECC8AD93C916763A1616946F7A90F4CBD99C3B9A2122DC65D7065A915334B680843A94EFB5BDC0ACD4F20B8B7575BACCC415272827CF359D81526CEDA8E1B8FFD030B2F4E5168ED8F4088961BF8AC8354703F3E6E427BD98D5FA0F60EED513B05E2A5DB569CB62FF1685C3088 -MD = 2A182CFC8E3428D6478B599675E7009A991D99E10F6F53A84712141BE19E898F - -Len = 1062 -Msg = 6BEABE530BDDDB616E859A1C553D80F91A1015C9A0AFE1C16519B4C14FDE70CA20A05411BAD72CBAB6A125206B1F44ED8042F45581AAFF430DB140942C3FF3A6DF70B0AC32BFBBCDAC05D7B2C03DE2554334DF6BA3A921511FE7EAB8F7309D4FF3E81C550B0E0B33FCC638A3F80C21E01963781B588B93BE505D914549D33ACE1FF83FB010 -MD = CC0A85151B57D46BCB103CCD2C657C8AC60052F3CC5A5494595C888B5753D677 - -Len = 1063 -Msg = 06BA6E79C6A8C0EAF1A1FB39FE0009BE2E7800A4692C1A01113BB666607D0EF90FDFCC0DF4F8A70491A28461669F2B8A45EF158C3B604ACC4EAF046674DC5FB38D941BE12E57BA96833A573140AEFF34ED4203DC4324AECCDD11F1F2B5B2DE5B77C0689040FE7607C67F1199D498285DC0A1B4D5B2CFF4F1E2EAC54CD09F26F608AE6B6598 -MD = 0046F5357F60B35A9EE6042948B247F0E240F806E8FA4C5918A844EB55300B6E - -Len = 1064 -Msg = 59AE20B6F7E0B3C7A989AFB28324A40FCA25D8651CF1F46AE383EF6D8441587AA1C04C3E3BF88E8131CE6145CFB8973D961E8432B202FA5AF3E09D625FAAD825BC19DA9B5C6C20D02ABDA2FCC58B5BD3FE507BF201263F30543819510C12BC23E2DDB4F711D087A86EDB1B355313363A2DE996B891025E147036087401CCF3CA7815BF3C49 -MD = EC096314E2F73B6A7027FFFA02104C2F6DD187F20C743445BEFD4B5C034B3295 - -Len = 1065 -Msg = 53C04FEA5FB71DC880D097A3AB90D549804DC48A73117B901C0CBC5C3EF590331569C074E0EE30354A94B34AF1FE4CB7A620C8E21A94027EFB0A04CBE18570D8B0C957E35782D46E5993FBE747AC158B1F0E4CF4012D57204C5226F578F0ABA56B517991C4309F3D1D1F7F9FA9A2CDF1E45C874AB297A0DD295BAFD951A6268117F2C258E080 -MD = 03E185ABE79B45716C0B7279DCC3090776B5AE89D64074161BBB64080CA39032 - -Len = 1066 -Msg = F8A6F6BD845C0831FEE2F05132462FD77F9252404468A658FFFC537C5A1965B69F2935EADC66C16FDF98B3B3D866A4D53EB0EADC7F1E639574532ECFCC1C67D16530821C8EFE9A28CCA527F35924C015B466C3749F72DFD84C82732B8986ECF7E7B2E4E5F31CB5347AAAA5E82171FFDD92647A7F823E4E2F8889F732B38CB072B14B5F13E740 -MD = FA67AD79083ED414B337DED1A72265B4146E09F667CCF37E6AC95828106E1B6B - -Len = 1067 -Msg = B7A4C88E4A3D7E7A38CDBE3BA7504290D21F255078537C3D7EFAC3B5AFC19F81A0C2BC2F2F4C3209DD7D2C30789EDD143C1641B274FCB8840D4D94B809F83AD303FA7C23BE570873FA615F20AB79E2B85C09AA80061D823D4D3BDF6C49937350888984A9825AD67C9D6DCF6B05B3F989419FF63697010633C1D397F7E4FBC7F28C816B9D26A0 -MD = DD1645A8A288FC7E9BBE51427B8ACC32B15A9E27065E28677DC901543B8D5D9E - -Len = 1068 -Msg = 0915646912F9D65E80B4718E4597B3D33C8A634964A2FCCE96DC7871C2E3AEDCA6D83A78D57380241C9E6C4D010A594D31BE0CDDAD2403567F486CA5E7A2EC49358A87E0E311839BD0475F68BB6CB623967E21AD25216D985E841F2E248853FE45AF8001FD02DDF42C62B9AE6D58CCCC77DFA6C3652AEEBD3147835965A524F61F20DAB12DB0 -MD = 30513CF60CED61EA945DCB7F89BEB377753E26951399F470DC6777952C2B2CD9 - -Len = 1069 -Msg = 00A9047B379AB468B988C672FBFDD7B66E06F2B33E3A1E35DCE0D57566E3430983237FFBB7C3B469CDF5239CD6B151EFB11B8AED6516723DC2AD77E448962C118A2B1E51502463678F86E47309158967A168D33461DEB278F7317333ADF3B9C1B8011A39BC5211CEE3826678FDEE96C1BCA6D7035B9CDBAF58A4A9148713E1C3306C03C7DB10 -MD = 62D5DCC0D314FEFA064AEFB2CA1E60EC6DD4AB3E0D6E1B4CEB2CF05EC2D06F67 - -Len = 1070 -Msg = 409DBDFFB836B5B92DCDFF82825CB19043D26CB2BFC2C1961338B87647E7925DD322DA8A3611989F16DB1D5971DE0783FF6FE86D33E175EC55E4BD4F43DD8466CA3FB4A0468E4BFB571CD7E3C2A44D3356CD583EB63D9D9583345DC3773D9D257A1FAC8424AE528C3F8DB6C8383915F87EAF86488CF0435297B38A5341CC1560055149FAFF90 -MD = EA39F020862AA4DA2AE1EEC898B8E0ADA814958CE26442CFB205F2FF30B50AE2 - -Len = 1071 -Msg = 53383978B3D3F0F99DECB33B9F183136D0928A2F4EABDC4937F40E021D7F28D49FCBC48F92DB74B3CDB14C243DFFF1FFDD6C2810BDFC08712BB006D5717D9B3B19B31A6B78A4BF6E4206A1E229C61813DFB5D38AF3D2C0A19F47FD813A8802CFA837F1AA88F20ACDBABCC3CD574C81BB69E26732D2E77B06366546B3E6DD75DB443E0A1B16CC -MD = 10DACD4005ACF19BC48500BDCF1A4332C3D15A33106D61D16A30B11AED971A99 - -Len = 1072 -Msg = 77EE804B9F3295AB2362798B72B0A1B2D3291DCEB8139896355830F34B3B328561531F8079B79A6E9980705150866402FDC176C05897E359A6CB1A7AB067383EB497182A7E5AEF7038E4C96D133B2782917417E391535B5E1B51F47D8ED7E4D4025FE98DC87B9C1622614BFF3D1029E68E372DE719803857CA52067CDDAAD958951CB2068CC6 -MD = FE71D01C2EE50E054D6B07147EF62954FDE7E6959D6EEBA68E3C94107EB0084D - -Len = 1073 -Msg = CC4CEB09E892BA340EBD8839690C8C77B6276E33E1E87ECF9F3F475A36D22677258FB019DC08EE7670A685DD766213ADB7A55924D05FDCEF85A0B033ABB97BEBB9210D278EEB6837B4511FBE53BED7AA1880B1575EB1EB6999E0AA2723B50C76B9D72C384B78EB418F7456FFD61030ED761063FC5CD76A7BD16ABE1C050B7C20AB7AF6FCBA7B00 -MD = 7E18E43E66DA2EFD7D82D6D64139A72CB4B823F3874430660DF71DF461AFD03D - -Len = 1074 -Msg = A171F7F0CC38AD3C6185BED8BB94EA42AC92CEDD458215264B8CF9D2BDE36D4BAFA2B885CD8EEE3BF0491318D84ABC1D15407080B7DD8F4652CFDC8CF1C709A8CA3F322C92954D798C01AA17D6B5C45B5039E2B66839184ED72770620015C06F54C53E6CD538CB7EFD987D5890C7FF013CE93240D34C68278B92AB9C73F771CD3B1DCD1B8C3380 -MD = B1104B36FE10BD20B1C925D52660F81150E126EEDA44677915F23ED336D79024 - -Len = 1075 -Msg = 34A955BBACD0F8D9181E6D573290010DD36F46C16D5342DB7DBE9EA9049B9B14766F822B644A598DAD015FCEC1A2FAC8C4F2EE961E8A9E962655D05144F54B2525C7A7D98D1AF46952F782764C6AC9BFCFC9C0ADF3E12038C89BAA3DA273D58B406D82E1D263D417E75386E9DE11281DF4D96208FCA32B19D871A109A736FBC5C3F29FCCAD2DA0 -MD = 4BCA5CEBC6FCA99BE62FB23FEB63943493A9EE46D78916FB5A63BBBCC7AC2B80 - -Len = 1076 -Msg = B9C7F790421747555F738A0F4F2BE81A693F440312A99F9A1835AD2427058B14E2202ABF9F12DDC25091A3D91BC80C03546E97789C667EEA433E9E1CF967F7A28AC1F8D81F6CF8A06FCE64DCAF549B77B374CEEEE63DAF77D0EF7BBEE45902051E14F85847B7F16F8C168A1A147ED0EAAAE34F4CAD779B8831301965AA3486DA726B1A7CD62DB0 -MD = 46D956A495C1C3DC4AEE2E72B64F781415A946FAA22F142E7B95688C40DE49E8 - -Len = 1077 -Msg = 2E2F9F6F2F735C837CAF7ECDE1AE9F41C4BE21C15797F63528B2055889F0610450A5BB973EED188F9392C9DC7B4E73E65D18437DEF436E299D465FE7E437A11FC2F8311840233934D4596B1959546E34F5C37F0FA9316CD586744BEB8DA770AFEB0D8B1248F5FCB2F542E8F9B9F34EC1802B042D50783A3884115D08B6471EC383C25484DA37C8 -MD = 52397ACC77A6310FBF260718CF124DE7E2ACBFDA72E74F0B4D09BD48EE0495F8 - -Len = 1078 -Msg = 01BF05739A0A3633131E869E79F3CFE2D4400F29786C04C4D04726E632CD9EED3AC89FE6A206896FAA447FDBB131E34B83B6713280DEF5167193634D68987B608A5C1046287E64EEE7EAEBA308F5137E0C188FC35AC15F264139C7B93F3E1597328B9D39F13D9A959632A9330D852D726D982AF6D00EFE996EF92410F85AD4A742681872C6FDC0 -MD = F0628CD4634414473CA1AD60A999AF5E906981B8C4E7551D910DC8A450F0F776 - -Len = 1079 -Msg = EC686F7C71E53D760FA840B3AB715D8C0BAD257072CC56EC259D1C240851D329BBD11F48993FD01A73B48DA16297D95F62D8E08A1A465FF6A5ABD63EC21037F68F14617BC1CF15B1F71B120C7C8D60CE32F5C610F00D306EAAD3991B442ABFE5ADD064046BBA9FB8F4F9A38D99037D80765DAB0342CA779B86B1E7E8C3D698CC3E5304318DCC28 -MD = 088846A8BE7E2893A06C93715C56A63C3E9D9A2020B11009D1EF9D0B4BDEF3B8 - -Len = 1080 -Msg = B771D5CEF5D1A41A93D15643D7181D2A2EF0A8E84D91812F20ED21F147BEF732BF3A60EF4067C3734B85BC8CD471780F10DC9E8291B58339A677B960218F71E793F2797AEA349406512829065D37BB55EA796FA4F56FD8896B49B2CD19B43215AD967C712B24E5032D065232E02C127409D2ED4146B9D75D763D52DB98D949D3B0FED6A8052FBB -MD = BD6F5492582A7C1B116304DE28314DF9FFFE95B0DA11AF52FE9440A717A34859 - -Len = 1081 -Msg = 4C727CE979CB8F2F98C2821E6797161CD3BED5806DE8B08087AB61D739A32B760604695C1DEDBC3538E987E52DE252A46D80C260B3560B2C71CA37172C6A7F6D581FB4E0B0BB06E4C9504BA6B3F172CAA2D5AA92022D2BE4AABC96CBA2F917B7519E397DD6EE35A122125FFE90AA846EFE38E774711AEC8D55A4045F927D433B42018F0F72E1A480 -MD = 1D40D734701A830018E7D49ED1DF04F84AA1BB91B59F4C98299DADC234CE448C - -Len = 1082 -Msg = D44FB8AF633D0DE91CBADA6BC655EA864A291E404A829BA9089851ED2513461B35BE92AD602018567A4A92BBE37D20E353832D7562618685072BFDEF93D287EE6D083CBE2406332701923B83452656B67483B772922ECDD4BAE3D5D5F0C8064E32A71098E628084DC9549773C2C078C04CA18CDBB981E7AF5791C0338E95A01224283F1D3FC94240 -MD = FE74E920A78BAA99433C6AF81048B07260241B9F91AF1C20C1F6DC2793F8D90B - -Len = 1083 -Msg = A676AE811E49EDACA42C55FF4305E2A12648C465B8FCE4828598D85B6F8821E7DC35731B21AE6A963CDB6CC3D35F1E30B165D42E5844B64475A9E75D6474D9A044BD46696D44929FC185AC54580165FC74BB855FF1CA1E31041B960E6E5AFA62B3E9E216EA004D3EDA3C893B5C2A091161314EDD55DDE464460152684C5154298E0FDEA58C692E40 -MD = 32F8F70827A3937985CBC9C7FE363A5BC2AEC52361108A47C1D116E9CDC97EF5 - -Len = 1084 -Msg = 70A4730279D082EEBF6500E4E61AB4ACA585FC47EFB9CC68CDF701EB55C53A5B7FF42477756A16B6B727DDE9CD90AF741428018F9D0A6A219A1A4649521E7B0EE57F38B60D900ACA04552CE4ABB537034B017900182C6C639E8251BCC31D897BCB7804545A1201501244479EB92ADBFE6C29B738AE9F25C2CCF04A7064BCE438DA1E98FE7686E740 -MD = 22F0409E52112AB70E25F05D87625B2356123B845058A4AE6DA30EE55E7F4872 - -Len = 1085 -Msg = 7DE762652C7A3135A8B42A45E29C5C4E31791487B1777F151B29FD2CBC901EAB6864AF5788EBDAA54E5707B82D96150E47780C05CA59347B72864172F40C1E91B786E3891BBFA66D761A2ECB69873C28BABA3E1EC725E9346DF6A1F315B96DDEBC5F10F97CA0CD30D108AECC747628435BB93951FFAA0A965EE1A9A1943CA018F0133E9D946BC430 -MD = 9D180AABB04429EF33B723815DE8C1469614BD31D9B7B3D02443BFE1D7D6B77C - -Len = 1086 -Msg = 549C452B52BF24CD363C8C6F832FADF5AE643E51BFD75D31968224ADEA8D8EE5CC9A4B7C6A8DA0EEDE2B0F0651A5E1889C4F03953155AA4F7EACC3F17A55A71984E36018E9D8150BA31A0317C14A457C754C72CCED34250B3CFCA8A330DE2F5A6829433615CFB4FD0E63921593D1B519399EC8BE42A32AD96CEFDDDE181ECDE193707F967E182684 -MD = AAA4559ACF91B138CAE4D56263520C10A8CC02E2466B135ABA32E6F9501DB402 - -Len = 1087 -Msg = 323CB91D4292ED7F95C98DFD71074379D2CB19E8CC83186B241A62F495CB9B5562345F70DC9C6A06A10424869DCF9C6D100AF700ACEFA7EE011CA6E8C41AF13FF8C9D7BEF1526A8C601F69B7E51E1B8E761EC597C22C0476A74FA7ECCFBE0D2084B0482C46C0D9CB359307B6528A3C88AD5236B990EBDDCC762339D095B34DD503C7E27EEC0D0ADC -MD = F1C7CE26AD6A977282AD6C9547FE0E0E5845BB4E4EAB94E5ED2E3A977C1FFF87 - -Len = 1088 -Msg = B32D95B0B9AAD2A8816DE6D06D1F86008505BD8C14124F6E9A163B5A2ADE55F835D0EC3880EF50700D3B25E42CC0AF050CCD1BE5E555B23087E04D7BF9813622780C7313A1954F8740B6EE2D3F71F768DD417F520482BD3A08D4F222B4EE9DBD015447B33507DD50F3AB4247C5DE9A8ABD62A8DECEA01E3B87C8B927F5B08BEB37674C6F8E380C04 -MD = E717A7769448ABBE5FEF8187954A88AC56DED1D22E63940AB80D029585A21921 - -Len = 1089 -Msg = 5B11A12546F0ACB075C50D1B5345605D9A8542B87AF03EA106945D3BEC5EF7A9360B03187BD6BDD510576CB68E8B89649711C1586F58D406B44331609A4152C725BA290B4357C0DD33039306342E6640BBE5E27035E6118E13E1F47E74436053446175368A82647D433D693FDC5927DB2C5AB7B49274AD2E522C3FCD8603964246C1EBF4C78881E500 -MD = 0F6B769B9EF4C883E978D5FE25EC6BAAC97D615F28336EC0AA97ED31E5D16E33 - -Len = 1090 -Msg = 95E4E9445A009D7BA13582D798DA2BA2EE87D523FD11079D7D4D7415EC275578A6765100E195C662FA22491C91D929E5196525B061C7BEF28B5C7E007754A543BC7577B1A28002A12C8AECFF500488673EEBBAD04B5DC521A23A62C48E27587E40F96585998EDA108DB8536E4DE4F0F8F7ADAFFEAC348FB0ED7C272432BB3123E0463FCC23090AD2C0 -MD = 6AE9810E259C8A21FC9DF9D4C2BF1D3C7E314AB7C97AD308A38DE70EC9F1BB4C - -Len = 1091 -Msg = 99890D0AF31A29F66EA71EDC5B22CA37A1E32281D75249797335D503350CA4D9393B88A493E519CAE8227CDBE43EA16C3034FB2F3BEFAE6A24955968C095F9AA8287ABEDFA012F339B38059B803F8A49CDFE0A44A1FDC0F5A95417F39D0A6A7250BE89421B9E6C6275961D2DCCA2CEEA8DDEB9F815E2E229730C98B81F899443DD11E26548A08F2D60 -MD = 14F08431A319B3B296DEEFA1C7463DA64B17A9AFB677743646AB93B08ED796D5 - -Len = 1092 -Msg = 86D3A8756E45CAD9D351BA6D187A5FA35D0F898948E922F3DCF7D1D24C991791031EDFF0FEC7AE1B4B93406FB555CA782869900E7FA4BAC5ACC6D1333EC8819D8809004E544CFD2AE83C6E34854CD2D07C72F64D052259E138FD44204660317E73367D5B6E89E2B0AD53D1D5F00277625D8F8FB3D418501F76B127F9426688AA1D70ED3A3645950D40 -MD = 464FED76AF7F4982A12550E7ADD1AA909E68B22367E425152081617C19986BE5 - -Len = 1093 -Msg = A2554C66211476EF2B6527FA9810A152CAB5ED42AE8926D582F4B0BF358EA30AAAF75EDEA37F3C7E1C63A66514C5B244316B562EC47D7816D6D4AA209E5B3D718413B4A30A26FCD28D2CCCF4907DEE332A090975DBD481EC5A945E17C1F3D2751AEC0C7EC6F3EE61A8DF8DA4D41B1B8BEE408FFD1CA1475B9F7A04EAED705350DCB86010D0FA03FAB8 -MD = 676E18D66FA96BAB1CE63C3DBB62466BCF2B0E571A73BBDCB6CBA993ACC0F2E3 - -Len = 1094 -Msg = 8913BDBF67DAC137CA5E1C7FCEDFCD43680574F7AA64FD63E8FB7B672CB39E7B1989E44916FA2D44DB0108F56AD945405D6D736633EE06E82C36B255B4677437DE5F0FA61064F659CC2189B3BCE909268BBC3FE1E02885A755BD60501C611A09B6F101F119850206FCDB7D1E20E60185612ACFDA62B487D1DCB40994165DE81ADF43EC22D39DAA831C -MD = 12FAF7E6C15BBE07E33689243AB879A692EBC8638DBF9A2319537CC6EFF00F7E - -Len = 1095 -Msg = 2CDA1B5738756EE102A02BF1E2538A988D62894143D4E9F19CDBBE8F89D365E4BAEC3EAB665014E09FCB98751F1337CCC33852A1B062D20AD04E844D87DE82456412C8EC1D837BC75B2292831B80A7CFA0C2EC8B4C5238690BBD7F32F90FE4F2188947393EF43720E888F9D0AA6F22EE75FE03A96F28CB3AC08ACE6944BA59C81B926B9169DF7B1452 -MD = CF160472628CD619A19A1290600422BDFBF10F8C1BA919AADF58C5AE623367A6 - -Len = 1096 -Msg = 04410E31082A47584B406F051398A6ABE74E4DA59BB6F85E6B49E8A1F7F2CA00DFBA5462C2CD2BFDE8B64FB21D70C083F11318B56A52D03B81CAC5EEC29EB31BD0078B6156786DA3D6D8C33098C5C47BB67AC64DB14165AF65B44544D806DDE5F487D5373C7F9792C299E9686B7E5821E7C8E2458315B996B5677D926DAC57B3F22DA873C601016A0D -MD = A95D50B50B4545F0947441DF74A1E9D74622EB3BAA49C1BBFC3A0CCE6619C1AA - -Len = 1097 -Msg = 8F20862EB9CEEDD84B3F7E4E7387DE2DE46E141DB60C9E29C45EF6809107D79334E086129C757FD820EE5B3D0123C4C28B34B11C97ED178367D0CAE25DA80641C541973331B1FD3DAC8F5582B9D42ACE951F4916DD4F76C16D3FB877CDDD20B989CD67A109CE139DCE137BE25D03256273DE1526EDF611E29AE7CEAF881E64BB30935BD07B22DEF87880 -MD = E673876649FA3DF5101920886AA83D65BCB3E43D89A56552D8D12005173A5FE1 - -Len = 1098 -Msg = ECD1C8A48651172811A515025A25503A9AD8AB6203F05BA929E8DD58CBFC12ADA9C7B3BAA565367F757FCCBCD1A05C1BF394D9EB4477433E4F143B6B405A3EC913AA756921FC5AED376921F8676C1A467FA219F381F6CAA0246FA18B16A78CA55FBF58C7711663AD6129414F97F88AE25FBF53D1F55FF9C3CCC6601CAD7AFAFBA2E14F34A47007F809C0 -MD = 4275CDD98C4C43E7B0DDD59B322980FB7FBF154B4FC1108B452C7DDE144E74A2 - -Len = 1099 -Msg = 091ACE177B650C3E607A71AD088652C65C8F3EF813144AAE6589EC92A7C511DC195470357171A23EA904A316CA405364C55EDA60A409C808609CFEE8BD2C8CF5D3607C37C77074A87F2235CFAE2222FEA82C5EB6B8C117D21CC8E29A7698FD9211118374F86F92DF1724D797210A66CE91254978B50259DE484DDD62F0EE6F5D5A5E8E00D549E90DE8E0 -MD = C3AE6ADD15294EDD83D70682528D7CB973FEDD9B1085D697A35CA94650F8FC4B - -Len = 1100 -Msg = 534B61438B3CED888D051393506E80A2A71FC2B2BBA6099C8DDA2CA48C26563BF91B5F201420024A0865114F5749B496539E99D78D5E691D763454825740B6CDE5EA88513A09C3BFC65EBE2EE2C3F4D56AB1798559972D92520DB6BD79AB7BBCC416F22759183BD0FBBF16CB02EE5A5DB3A0015EEC399E8BA9A2949E1AFAD4203F427095952DEFDE4FC0 -MD = 6484915BBD975618C3DFB98D3DD1151157FCEE233509E7A454EC55CA351D6AFD - -Len = 1101 -Msg = 9485B10269346EFA89E972BD6912DD9A878E0682F548BA438B52DED37E374135CCCE076BD254F80B4E9253C479343AE53D7899578B61E6C01A1E1B50C26A1554EEC28783C45FF9EC90D013A7BDE8724B369E708BA547C270B0BEFACD16F4AA427C1B7AF937420C5ED61D3F7865A52065FEF7F803411BC2CEB33711E9E67ECCDC9D774FE532C850D934F8 -MD = 8DB30A222800837071E2FC469609ECE689B05B615E3B607FA51629ACECFE4997 - -Len = 1102 -Msg = 51853A418DD59D08475390A4AF946B850CA46A508A8385C782B5312304683D9D287ABC97099EABCBEAF589AF4EC9F509AEB4323FB600EFEDD49A1A6BFC802A4B11D5DB9C49CF0776A1E55406E5CE46ED022F1B7458CC3A1287A748D0FB574376382C34EB8346CE941B6C78639CDC4D10DD58B5A11E3F8FA4A4129FEA7BE28E0040985408905ACB7202B0 -MD = 2019B22796E6E2572C1CF3770912B1886A7208C12DB920AB0658C023F6CE957E - -Len = 1103 -Msg = 02A2FC7D539DD0FFF7337A0C42C23C2F9B505AFDB06F38F1C8AD8EFBFE41467F4727D7ACEFB17668957D2B57BA67971EBEA22FF1D8933F8F2759708CF1F96622258EA221AB8A143A574B59C96FC5250548DE6A4CDEBA0ED4BF49D3CB62F2F1F0C5F8F05C4F8AA249B1F96003AF89DBDEC3C578E3B7D62A1AE591E67F3EB57243484124A2BF71626DFA7C -MD = 866DAA02759E7CC51D1AB0838F6AD5CB4546A5EFEAB2B483573F79FFE0EA1120 - -Len = 1104 -Msg = 8B81E9BADDE026F14D95C019977024C9E13DB7A5CD21F9E9FC491D716164BBACDC7060D882615D411438AEA056C340CDF977788F6E17D118DE55026855F93270472D1FD18B9E7E812BAE107E0DFDE7063301B71F6CFE4E225CAB3B232905A56E994F08EE2891BA922D49C3DAFEB75F7C69750CB67D822C96176C46BD8A29F1701373FB09A1A6E3C7158F -MD = ED53D72595ACE3A6D5166A4EDE41CCE362D644BDED772BE616B87BCF678A6364 - -Len = 1105 -Msg = D885277BA59CD5B0A510BC8F77CEB8658E407AE08A873ECB0D2487590905C55CBAFA1A108D4BFC4286235984B746F10C03AB15F7EDA75A6DC302622CD212C44434DD027328630BA5377CDA18C62F07FE62BCBAE8EFC3655FA772E604A08E2F6DE068896A67097187B75B507B3F5874F157DA74187F5FF868FC02AFF44AB720FB7FC84CBEA70CA0C32F6280 -MD = 7CA3A4A3278BF315CEE14984F6293E8092934468519710E4BAE8E5530645806A - -Len = 1106 -Msg = C9E4994C72FCB03CC6DD0B5AADECA313D1B99F7595C9E40BE56DA64E8BCD0F12C811E029AA414780F16F912DBB00E4B226B9A9DFEBE9298FC0EC157F466BCB4871FB2B2D7B847DF7DC9281C0DB2B16F140B547089B2454A72475A709B3A3FC8D968C367C6A14AEE8E2A1025259D850E999A8B994746BE4A79011946F3122A9B8097654224CFEDF13C47140 -MD = 49746417684F7D8A8442D1D22A678A3942435095B862C4CA4CD7300625D21340 - -Len = 1107 -Msg = 18DE896CCAC5B0584C6605CF8DDC4BCA77E2F8207B3333482FBC02129BB8AB2763B17B3D3753654BFB5ED80294B4EC2F0A49DD0000FCC4B5BBBAD28922106180F1ED3EC72D73F278B613F965E5913ECD2BB25DB1765A76388593E9DEE66BFF75AD42D7266EE9E67E228323926C178FCB582E402BCCA3560B24C47F3D983316396D69FC1A7D1C250531A8A0 -MD = CF42559F1E0907336BE2CCED951FBF391084042166007BB770ED77BA43EBEB16 - -Len = 1108 -Msg = 10927E62CBA50DC5D92EF8B03649EEAA5932869AD735A22D0EEF2B2DB5DF6433308DE06723D75D2630C9A21AAC0129014DE427FB07BDA5FC28CED642B665C1D4930B49080E50C9D8B0D4C7279834B71AEBB69C57974E45C81130D9C4675DDE38446AB64B26CEFD8BE1666F2ED8B78AD30673AF75CF73DE5B1971AE038F379BC51920263E9F5F18EDC21C40 -MD = 236F41204BEFF692AD672C8AA2A18030311103C06AB3456F18C2F314CAF2CA9B - -Len = 1109 -Msg = 3A58F6C016F9325FE3DB0E33919263A4155B673CA916DA362214638085FBDFB0572781B1A9CEEAE62FF993DA3B01E21383CA63A490F07D733381C6A58D83B84D812BA1E5B25694A3898F063A73EE6E542911303CB749B9B8B971538EB6112292128FCA1F209CFE49A98F532DBB1A4EBBA10330580FD73B33F31F93D799F2F4030C5CE0F0882A78F9681558 -MD = 6987C1423E9B6D4EB8F1F67B8152E3895FD67F4C9E4DB16B3C314EC71FEE72C4 - -Len = 1110 -Msg = 2D17254047F202430E864B21F820FD944356E8FBEEE769616413DC789C21FF5EE290550338921737B0B73E45D14AE85337284BF8942950342E0C278B191E16AC07DF2F34E8E3BD19971EF6FA4743EB75754AAE1E34146DB5F7CF7A6083DD01D675BE3256AC7FCF1B3E518AF902699BF7C49BF153A5674E25BA8FB19B50E18E8631DFCB5274CC794BC39324 -MD = 766868F4C63CD8BA6A474EB575836B7B4FC914CFA24BEA3C0080B60580468832 - -Len = 1111 -Msg = B4CCFB77F6D11DD5E48E1A0535B8F9775122ADDDDB9049B072138381939643FA5D5117BEC65B5AB487F018574347E437C0F41ADA18AF6373DFD212C1EA732181C0F2C5B45462D40F299A212D212516E9089EFC243665CAA06921EECC653677D94B39E6FA325567BAB84A984052546E9A5C4ADE161F5DF6DF97F73C226F993948F63181FD8D4BD9192D084A -MD = A006541DF0CA78AB8B22F433F28213F17D1B35C9B171A8115407FF3D273DAAE1 - -Len = 1112 -Msg = FA6EED24DA6666A22208146B19A532C2EC9BA94F09F1DEF1E7FC13C399A48E41ACC2A589D099276296348F396253B57CB0E40291BD282773656B6E0D8BEA1CDA084A3738816A840485FCF3FB307F777FA5FEAC48695C2AF4769720258C77943FB4556C362D9CBA8BF103AEB9034BAA8EA8BFB9C4F8E6742CE0D52C49EA8E974F339612E830E9E7A9C29065 -MD = 810401B247C23529E24655CAB86C42DF44085DA76CA01C9A14618E563B7C41BE - -Len = 1113 -Msg = CDBA5700B140CCFD21E0B8FDCF0E7B879292537BA1020B5A5AC12C1FA5CB09BB69E11F6FB2B8E18EA44CC21D31D30EADB150A4619E664333EA7195717EE311D94DAD45CDFCD9339790750A738548F17C4BEC9D0563C805BBE943BC2ADB95627D3984B34D2F8413A98E19090FA4497C8B2FD9E59DE706599DE09134EE1B9C58372BC87B6925B4E1208623F980 -MD = 316C7D67A72CADDB21E381B0958F20F0686C38940303EBF0CCF3E666D1467357 - -Len = 1114 -Msg = 8FC83D24635224EDA4A9CC82B63291A87E6CDBD4BBCA2497D9EB075784B2E749F5EBA53C80AA17ECF658D91A3908A564E6C2BF6363C3A7E2A508D471451559D4CC0775247695E6FB207D383F7906A0254800976818B6DC32F9488F4D907B4432807DBE607EEAAE9508532346013F4A9770110E200D72E47B0814623F810EB3BE968B8BDDA22F3C99B61CA3C0 -MD = E8D7BC2CB76B1E60F8D6ABF303E62F55425F5D2AF1A5FECFCD785FBBD3E2F7E0 - -Len = 1115 -Msg = FDC09E81D5C6D2481A3C57A0828F8FBD17B4C4C288F043F5BCFD0C55024CFE291567EEDC2A82FC849E349DCE8C2821D3A7E1DDEEF9BDC90220E7EEC17C18F5557B4B2D64D342C45794FBAB47CC0E1610249DB940DAFD66C70551934C1AF804EDD9DC834ECD8F036280E513897009F0C619E815828FF0ECA3BCE5C30203B5E5F038ED364B1229DAFBA20278C0 -MD = 6D92C318B3E13BE5D884F107F884542777F286267DD9207B36629E304785B359 - -Len = 1116 -Msg = 2B35EA4A2CFF637B951841A2DED38895D6D4CA4AFE8040EC61859A76432C5D3885B75B9D13228FC629A0E3F123DA446035B66853418B67D0EEE1BBB983B361083A078F02622FCEE37302C9DFC9085A1885F8454EE56F0A9EBEC38026A0638771B4AA6C09E461BEE69ED16677610B926709D7795A47C1B4D6E5F443BC9EA464D1F2077AD18074AFE30ED27280 -MD = 7601A5F8B12D623A9D3E88AB28C9C1901A752E06EBC60ACC97F51E41B6AA35D8 - -Len = 1117 -Msg = DE1B928D0D48404C330ACEF3492378B2A5D9F4BC2EA16600446CB058634935F35D32471BF24C15072CCC54C6CF83A0DD5194B9EC140DC0EBE691464B0D730A4092CA0BF08A0098E800582C453E5518E704E998787F9E34C3D69CD0FC7DE2333784385B02B1480A5CC4C4DDDF2422509344DA2C7A8BE0C654133A7B2D2AF3D367569CDA35CA6000076F3870D8 -MD = 8E224E86FE19EB3557FACE5C7808FC1E719FF0D6E450B4C8362AA35FAF082F88 - -Len = 1118 -Msg = CB0334F2129D291773071EB41BC3A7BC95D44A01D945B604507C2DB5488D30806B220CB03499450DC3F8D2EE936CBB93552189E624452827438311FC11753B8173133E7235501430CDD199E44030EE9FA6EF063734F4AF0CFCB36C1C0C0A127DB579D78640AFE5E7C7823775D689890F612FD4FEA4012E3C7AF289A24FE0F17072AE6B2FEDAEAC5712060174 -MD = B3E64594F733D82AC1C26944C506793179406809C012E20B671CDF24A9D4EADD - -Len = 1119 -Msg = 2D2E1CFF4DBE19D856447906D6E14E532E713E20F2CFD73AD76F580A8E617C1DDC1FF9EA781E8974EBBEB17ADE82CD57DB3B92512A2B8C13C4ACDBFD941F83CAD9F664AE321E2AE972422DB187D699933E348E52374C1D4714A13632BFEF26D168D27948F3241D3A0266F34014DE0BAA18BCEEE6C0E7AECDADAD53FD92FCC1406C0F30128F98FD549C6F8C2E -MD = FCB2CC9E0A34BCA693D7FFB93502DFB7DE8CEC3C4679E72C16CA42CAE42C2654 - -Len = 1120 -Msg = 9BB4AF1B4F09C071CE3CAFA92E4EB73CE8A6F5D82A85733440368DEE4EB1CBC7B55AC150773B6FE47DBE036C45582ED67E23F4C74585DAB509DF1B83610564545642B2B1EC463E18048FC23477C6B2AA035594ECD33791AF6AF4CBC2A1166ABA8D628C57E707F0B0E8707CAF91CD44BDB915E0296E0190D56D33D8DDE10B5B60377838973C1D943C22ED335E -MD = 9F01E63F2355393ECB1908D0CAF39718833004A4BF37EBF4CF8D7319B65172DF - -Len = 1121 -Msg = 355872C5BFF81DE902B8E9E82666A99FDFD866545F39AA8AEAE26EB3A3A7798BF7085A26FC83B42D0CA2541A589F7C4DF3C2637202281AE22A137C9CFB5B7F324AD1DE1962B388EE699B2164828DF997DE802FC6948D166D3E00C70CC78E522B7338926FBAC67153DC5CB219BF8E24743D7E38C2C00BC32006B43E113C2F5CBF2067E35C754601982751498900 -MD = D5666A8F93B20234E827B6F15C6209BE3CF0403724EF5F2C9D0AFBB1B9DE4ABF - -Len = 1122 -Msg = EA3B98208EE7977FBF045230E52F8482F1A9CBD7F3469752114A1130B4D0CC72F5C2B52F4D316E94183B017BEE71536993AC43D66B40F60EA12005FAF2952BB4BD0202AEF3AD8B34DC8C200859327C65BE9C182A130E0D7AE0CBC4F6CA92D5F12075402A68247FC7F2BE557C93B9C689F4ACD825000D3FB630CCF9573577563090A1277C1B4C62CCE7088F2280 -MD = 6FDBE8EDCA99A507D6AD4E20DCBBE88D531B22290D0DDB539C7F23A912D9EE8B - -Len = 1123 -Msg = B85D2AE087D8E2BCD2DF5320091FE59F356962E278FE17031328B2B4BF413600A8F782DA6ED3FB8A06F3ABDC46CF7491A626FDE9DCFAB53DB60E35FFA444909482C2B68E622028B3F047728F19955181C1ECC1AA0B70B661548742AD62444D4F3A27E9FE7ADB5E4DE2C98D4E86D2FBAA0F6D41F913A718BA995B9B04A33AA5B2B5716EF1BBB9899BC2F2421960 -MD = 3E2944A604203ECB3AC6165978C55C98A240628CBF68E37DEA2A7E372A93509C - -Len = 1124 -Msg = F2198E064F7F0935554FD140CEC82B3438E615876B22F36C7B2CA852C4902F12958E4C5CFF290A69156E21E1DADE8BB06EB5BC9F0B7A2926722786944358283D1EF9ACE91C72B0574481DEEF365A33023C7DDA3E6016424EAF6B826370C400DCF24D03D4383C1A102506D9194746E5D74139E81E4EBCDAC6886114F5AD59882B0A9B0EB494BA4D98089EF032E0 -MD = 54700E66FD70BF9EFBCD91844F3F9AA7837BF4A14F071251A3A4FF532F59F1A8 - -Len = 1125 -Msg = 95A89F7A1CB4BDA4D383EF4FCFADDCB55950A7D340D49BD65A04744929252162E3FCB9F3568EEC982C08B2F2BA932B84092707353DD102B37AA081A76B73545DB577FC0E80F43908835E9FFD31E1A661B1B14F7309B461F972E8A4A6A18427F8C280AB441BA2C619AAD5FF9D67D3A9920E012B6FE6A473E7503DEFB29E34B85ADC06E7F807B3F39A7636280630 -MD = 54BD4511FE046F471F5ACDA1E06CDC159A10B4E3CF1A5A52E0CD7EB780D02AC1 - -Len = 1126 -Msg = D1273FCC09485AD18C279A7E332ED3490D058A0B5A8D03E22B6715A5455394F41059EEFDC3DCD7337FE7D82293751EDE700E017C7344F168605A9ACBFBAA68879D74DE31B8C1726C9117CE956EF7D4AD1CC4426A767BC799849A478B7F1E04F83722F5AD54CE2C5171735533CCECDE5740CAA2D0A3A8E0877CB87CA866C959E9FD5114D54E779D190D41ABBBE4 -MD = D5EE300FC3CD5BBAB4A2B3010BF61F7AE2023ADCE365DE9982B902D34F371ADC - -Len = 1127 -Msg = A88C9A85D29A2E99FDA4E4CCC67FFA1E87072F844B17D45AB076974AABED7DD8CFD4A32244A2D6C4312D5CABA2D73306333E62E6A121B4E4E924D0B31A303A51732709BC26087B18C46CD4A1101AF4F2A7E781E71D8ECC72CCA63F0D968CE958B79B16690AEBA169180D181A50ECF2149E318B200D3F40C893E599B0D749E1BF8A95DF4134192D79FF8D9CC95A -MD = 436199ED67BCC8E9A6EDE9E5341802B9AE4B00E90D859483FB1970BEF67B5D0A - -Len = 1128 -Msg = 2167F02118CC62043E9091A647CADBED95611A521FE0D64E8518F16C808AB297725598AE296880A773607A798F7C3CFCE80D251EBEC6885015F9ABF7EAABAE46798F82CB5926DE5C23F44A3F9F9534B3C6F405B5364C2F8A8BDC5CA49C749BED8CE4BA48897062AE8424CA6DDE5F55C0E42A95D1E292CA54FB46A84FBC9CD87F2D0C9E7448DE3043AE22FDD229 -MD = 7EC11DE7DB790A850281F043592779B409195DB4ECEDEEFBB93BA683D3BCA851 - -Len = 1129 -Msg = E63DE4330EA9871CF723133AE8F2A04EE4B9A78AA044E500B8022E99A8ABF8070405DD291824CB5DA14B916B9E18028D9C76018B3C74BDC456D13A97FE4BE140FC940CCF0A648207A0472E4C8F60F6D235F1F097C2E5F48BAE57695115FF5707B5A7F4250A6CE8988DB9BED4596325DFF87E08DD2204FA1D28A17F6F7A20293156130D64680D176DA80734027E00 -MD = E277D80FE51E747DB05847D35F1C5B23A08CD6BAEAE21A0F942840C569BF4932 - -Len = 1130 -Msg = 3CD3193249FCA77C04CEF261CFF614FCC5B5BC7EBC9A99F6C88DF6C6232784BD03B0B119CEFFF2DE10C562998FFBC1F2E3D64ABE50F026CF1AACE2492CE19AF0A9C8F4BE6DEB1702A34B5792F1D79460E74A3825F3D3D46769E105CACB8556F16E61A60BB640F4918D0A0E689CE6E5B92977A53BF6C3A1AE2852C6F355049C797152B87367083387ACFF4EFABB40 -MD = 2A26B9324C4177A588827F78B6F7FAFB9E17B7E707A391BCFAE8F6CE291866B5 - -Len = 1131 -Msg = DB898DDB4201457E81D5ED2A739FA8A1491FDE99C5E22AE077C577ADF84253E7BB72745733EB89FCA405F78D80887CF055DE93F19E200E346547198E5AE4E0E1EE2F819DC12417EF8D0C352EEE351914450A8FCE74A3E242EF0535558A4254F9B0AB5025D65E59177F83F2FCD2B83B955F91711252FAB9F613CA2EC038588A68C201B777757AC9B71B5262A91CA0 -MD = C8678EBAA95766336AFA1DEEAA4B565D9B37189ECCFF75ADD646EF03F42A4010 - -Len = 1132 -Msg = CB54ADB942A2CD04BE65D1499564188B4D1AC647CEED1CC5116498EE2421EBA700E63F8DA23DAEE3223B21096FE39A0C8DAF21E3AA8B07FE7FB58836D2E70348837B72412B9AC8B5EFBA5AACDBE685AE6F7594197AD7DD95F82CDB4D31FF37EA89422C27D0C89497A1593CD96B6160862E1559BD558620F1831B0EE428C25D1456B88B3CC613CE8F9A8794A3C390 -MD = 5EED9731EADC8C1F44F55EFB83E388EE82EF808427EE59774BCFD75F231AF472 - -Len = 1133 -Msg = 3889F0DB5E6B929D85BB0D1C26A06C1E87B6A1EEF7E65B90E51DC1195C94F58C19C1CD7717C4F276BBE8702179D4196793C4069D4D91CB3C7051962B9675E978B9CA5FF5C648E36DE672BC06040ECBC1C9F7D8FFA3D1CB9A0783F3682D0C4BA5705AED875B9F4528192BC30ACECA099F7FC7D9F8AE9161FF092D935B7F4C5343FEACA0D69BF8082B16CE95A415D8 -MD = E036D913FB953B9D24C191AC2C6D586583A16B1DB220F783CE620E10717F4FC8 - -Len = 1134 -Msg = 05B41EAF294ADFD909A5D43A53F1A0F5ECE57CF2DB3EEF714EFE75A226290476DA995B35148DD1D09A18EC000D41ED59D1E5FDFF169504F771961732E7AE05877CBC301E02108A0F42C56D093F484EFB86436F06FC0C38FBD52F1BA418A0DA28B7D8D9B73C0532E7A86915797D121A9F0437AC230D2E887ED7BA55CDBC2ADB946C35A7A989848469E77BD45470E8 -MD = 2496F7D70F4DCDB2E2E1A16ACAB6941F9F80C050720E3FC337CC85AC342E61DC - -Len = 1135 -Msg = 9090328108C62427294439D9BD43C1D5E5A7E2604998129BDEDE9DA02352C84D5318735BB8B9E66EDD6254936552B7CBED1A86E48CC9CB92C136BC5282FD7195DE09A05ABBC7AE97AD3D9CEB7C2051B3446CC4C4CC2B7FCCACA3DE155F58821EE7AFCAA026C969518B4C6B411392C612416B15196FF9532E25CDA2AFD9925980D44E65FF878761D26A4159FCBCBE -MD = 5B65BBABF8BD807EC0912868C7EECAF401248FCA70F568D221FB677580B53F71 - -Len = 1136 -Msg = 94B7FA0BC1C44E949B1D7617D31B4720CBE7CA57C6FA4F4094D4761567E389ECC64F6968E4064DF70DF836A47D0C713336B5028B35930D29EB7A7F9A5AF9AD5CF441745BAEC9BB014CEEFF5A41BA5C1CE085FEB980BAB9CF79F2158E03EF7E63E29C38D7816A84D4F71E0F548B7FC316085AE38A060FF9B8DEC36F91AD9EBC0A5B6C338CBB8F6659D342A24368CF -MD = A74AF9C523B4A08D9DB9692EA89255977A5919B9292B7CD0D92C90C97C98E224 - -Len = 1137 -Msg = 01A2142EB62A90EA4BDA88F7677EF008E33636A68FABF1C88624C4C99BFFC7A1E1FC32EC7005AA20A36227932AC2E0D21F56FE1B9E4532315968F46DFF3068EC334CDF3F78BE88BF68E0F387829BF9FBC09A1A2F7237BF199FE75C46E60348D768958DA3ABC3D16865A82232E2E75ABD1990EDD2F1109685AB61AFD92E1C63BA59514FFB1AD075696C7DA7273DE700 -MD = 66B86D6A118C25623EF71842ECACD13AB422ADFC2E8743B0EA6B2FF7E752C340 - -Len = 1138 -Msg = 635B23C427214AEE08B4BFA141E1EF5FE2FDFD1C0A0BFD60CF0AE6B47D18ADA0BC2C24511BAB5ABEED7FEDB7BA4A1AB9801BFF5812263682FA6CF4CE4C9126FCA1F1708A54596C6C3D8B3F8C9915AA0E061F2455D8CBD8976BA96D9EB6A4BA8348F62B7718D15DE2AEEA8B805E72345D1D29E7E499EB7D4F615DDD20BE17BB8FC7188E3CCB59B42B8EF40ED0EE9F40 -MD = 74463E33DB7443E64ADB4F5FD6BB69652381D4A3843EDB11606C57F46E478A89 - -Len = 1139 -Msg = 35EA1F5687FDF343A7AFC05028A6F0DC3B3519069A260543C0CFE54968441731F69542683480CCF2A638FD8283E75FAAC5B9AA3C2264BE88701E8E71A58742F7C7DA7BDEC9213AB89B8568C339427ACA8D11497B01E8A2F68C2702BD95D3BA665C388B7AF0CFCB87E48BAA072C9FE708A7465A57200A85A21A66B0721CB49E93D8FEB62B0830F9136DA5E18462A400 -MD = 2A422AC905B2FD45525272096CCA82CA07628C295573BE1FC8D2F20E39438FF2 - -Len = 1140 -Msg = 03C7B22BF3EA9840CAA63B4F1D042C816E79FC6A611ACE2BD8F4400ADCE54EAF6208DA56E54E5A1F64AED4F68F0BEBE288C98798014472D23028097B12809320C20A56AFCC83721974BA088759CFCC2B8BD78F4D14CBBA26F7C7FB4271E2389BE54E2D32261EADD992F4F96692A52F6662C9518A937A37C4F92A83337FB0071048E29C3CB0A197565263B37C20C900 -MD = F2CF026578ED6D07A13658551F31881CBA7796219E518CE188AC24354889BD67 - -Len = 1141 -Msg = E74F49AB1C5D5239EED54252D90AA7C0638184E8454E53B6676F7021E50AC7656368A5D1911CF9B26E6FBC17F67DDD5E7F765765192889290552BDEDF7DC3BBA7AD73976FD993944757CC458A3F608BC6EF7B1E15661ADEEB0065CA1C40A209C90CD230276A6F9E548E234339D5EECA2CFABDB1599D8F7CCF58CC772452D6ACEE4ABFCDF61B6B5DCC698387A339FA8 -MD = CD450169BD2FCDE1E21064E9A308E8DAF69CD54659FFA81C646694086A70D068 - -Len = 1142 -Msg = BD2F38B76FE144C9695BAE33AF7EDB0F76F0F25079D9236DDE3C5213E44E6B71B49878C55023F69E9760A625945706CF6FA262F294B93FAB898747DA5A05C0B06C73695F9B827132D163733F7B6E6EFFA16C35D7F2A0E344BDAFB18B0718C5744689FBFCB7A7DDE8EA83908F985C63D65DC26B971C43EFEBB4AC8B6C416231F680B4D88DD7A27FB4631922045E8F94 -MD = 06F55F7D33614442C79049E85DAA009038AD9DE8DE55E8A827F21DFD2E631906 - -Len = 1143 -Msg = 21254C00B81AEB85763DA860D089F5757C5659E39F73B9127A5B3092A9B1FAD24C8CCB407BD0B6F6504C7E10F672855EF7311074866D8B95B38FFBE75AB22D67227DB8A36E262F396B5FF253947A276B1D9954E7F886EEC0AD6B8DED19734FC4A3A0F9374D3ABA9BCAB67B0646970394EAC1C7AAB16D5285BB44F721B8A5D9A52D91444196D1A3FA019857D7048B1C -MD = 3654BC5D15E423914E6060FFC4F92695F5498825EF1525CF1D734272E9B8AC71 - -Len = 1144 -Msg = EA40E83CB18B3A242C1ECC6CCD0B7853A439DAB2C569CFC6DC38A19F5C90ACBF76AEF9EA3742FF3B54EF7D36EB7CE4FF1C9AB3BC119CFF6BE93C03E208783335C0AB8137BE5B10CDC66FF3F89A1BDDC6A1EED74F504CBE7290690BB295A872B9E3FE2CEE9E6C67C41DB8EFD7D863CF10F840FE618E7936DA3DCA5CA6DF933F24F6954BA0801A1294CD8D7E66DFAFEC -MD = 344D129C228359463C40555D94213D015627E5871C04F106A0FEEF9361CDECB6 - -Len = 1145 -Msg = 03DFA64F87FD32347B4FBCDF6E9C93C8F24DD6FDF73C0714A1D3F2238950A0B17E17241281312FCFED19182066E8481BF02860BF3159373E812CC0723559E989B619E2EEAC2A98A7D671D09342B38485C544D7604EC34F5B3E9B75127F606BDC3FDAABBFA76C4485FE3153CCF0B8D3AF0082DC22C3DC3B50A1343792A2F75434C7ADA300F426B2E372E6F4D78482C000 -MD = A8D8BEB23B2ADDB876619C6739B5B0051C1A514ACD1CECDB041DD80099EE83BE - -Len = 1146 -Msg = B7C48C1E18BFF9ADA3D2973DB9D7A9294F1AFC90C7A9BE72179E12A6D3EB74E71027718116582C133FA6254874BB2DFCA6801FDCD65BFFC6CA77AB064E78F9961FFE0A580E3444BE1E5F26EC81242D85F829577FFEB15DACB76E5982A6E7B3A7C57FDC71E70F7F9C2C60402E86E4C784727E57EC0B6FEEB386AEEB91055A16450D8B633DA0403A4FD6DB89949275C740 -MD = 6D49989453E51660CF1B906A1475452AC68E8764EEBEBEBDC2B43CD9C173C886 - -Len = 1147 -Msg = 856344695FFA7F9E71CCA31E66780E83E946374FEB320A3D0D4E944EE8AD38917B892B1E4842817E9B9572EAE8BE6340A1DDED6DDB8216944CD9D403E137F1B3CD53688043E145D6D5BBE9C6A5078958AC10A96F1FB9953983996D386AF3E368394F57A7BABE20A22A7D9F8F5AC665B996B34989CECAFA60A618743CB5970FB4167F6A46635090E32C381D9A8E68DBA0 -MD = 123388928E061CE1B97B68E7D104B597EC46AB405B1AE14809BD26AFFD2EE289 - -Len = 1148 -Msg = B037F0650E028765F25A5323E3D6DC8AC4E9ED37BC69F08B42B372328A99E38827E7BFFA32FE443D09657E3835FED992CD2AD84EC38C21FEFBF3E2F9E55690A2C176539E9E12ABF4A81AD6EA9E6DBF34AEF4AF2438805D9A5A6189A64317F81FCDFABEC47E963612CD565C792E4E619B7912C308A489C7C57875BB49D3418162DC8BBE776F351B71DBD7BE5DB781C300 -MD = 626932F7884408589ADAE08D46588FDA63487B9147377F6AC5AD9F847B758CEF - -Len = 1149 -Msg = 26A1E2EB41FEF9EFAEE544083D4069AE01DAAF800A88A35F7C00CACBE5789F19891574FB25E19F15CE8DD52066F3030CE12B9438E6EB929BE14DE20F064AC1A8E8E1B76B99448B1DF719EFE5BE37039C5BB5399D17957C796B9EE91F6488FB4F2003ABDE0BDB297790BF4D252041583EA1AFE847C9CA7DA85A28BE30DC1BAEA372057D120228E0EF01C4EDDFB54F8740 -MD = 448D9C282CA818DAAB0C7290B5584947F23AF543394EA0E9EFA7EB948802302A - -Len = 1150 -Msg = 44F98C05A2BDA1602DAE7E8BCCD93AF9F16F1A0F415DDA94D0037B2E2EDE5647F5BA095E1744828A51E1FD65C9BAC3811817F10E69CFD446DEAA9000092B508CCC9EEEC23F3B5E0BFB99A7262639A8B8CA8FC0F54A97DFF5CE43531ADE028F23BA5DD79DF7C23D4813B9E5D89BC1DEF8D8604FD6191CC370D3B55624C30203DC2A467693D9D0087AAB7E210D14459F94 -MD = F28028CBEA0DF5854CA27B78C58E632BC4809720EE33642B3CB1E14B9B0FC8D0 - -Len = 1151 -Msg = 47CE52119BFE9170B124036E93790352ECA551962985658BC3898D1D05919B7C62BD8809568C008DB20395B1317F4BBDF3AA2E982A3326C6E9ABFE5992EDD75583E9649636D9E642D1585806832B257A45D485E1B17B9264C9A2386660E18D7A4F7F2F862816DA8382AC9E4E0C3A599DC1D84ED57C69F7F172EBECEE7C48A7E810B13B3A3FBB5188070B05A7833047A4 -MD = DC47800481C0A25AA515FD362F4C33856C5F691B3027366342E250A08A0C282E - -Len = 1152 -Msg = 157D5B7E4507F66D9A267476D33831E7BB768D4D04CC3438DA12F9010263EA5FCAFBDE2579DB2F6B58F911D593D5F79FB05FE3596E3FA80FF2F761D1B0E57080055C118C53E53CDB63055261D7C9B2B39BD90ACC32520CBBDBDA2C4FD8856DBCEE173132A2679198DAF83007A9B5C51511AE49766C792A29520388444EBEFE28256FB33D4260439CBA73A9479EE00C63 -MD = 4CE7C2B935F21FC34C5E56D940A555C593872AEC2F896DE4E68F2A017060F535 - -Len = 1153 -Msg = D17D32EB803ACA60E349E8389738023A0D053F8753F02DBF1B525252DF546AD52B8F5A1AA36DE05C14DF40EBC6BFBB3FB3743AFEE9ABF4CD29D2C4D707372923DC7989781277637627925044E0BB0B79D03B899CFC97B05E10481AE57A53351BA87955D956236837FFAF5AA3D8354F4C612422CA3FB4AF509A4ABC7F120A990072862FA1A8E0BFB64D9E119D691CB32B80 -MD = 3C5149C75901AE99E273FD5B258A9E6A2A55E257A0AD125A0F90D99FB6EAC349 - -Len = 1154 -Msg = 18D8D02EA80EB2F461E55B0C55557EEF0468BBCB72B298DF8A760A7A70633D5402FA38E709B2FD800C5D5903A4E23DC5540A52517A6AE4C25A27AEE13C7F2D9F14AC488D926B24EDD63B9FF7B12F2773F22080C101BA2466797A5D258225F05D56803D9D3931B9947B6CAA2F637A979C3069344DB2D7F346FB3B0AD94577660121F2BC87B5E0D0F1D8D9C14680CE652800 -MD = BBE5FDFB3A174D73BEDF68B3EA0552D61565FBC24A0DFB987F59F7549A26DCC4 - -Len = 1155 -Msg = 11C02C0B259C1566EF6044F8592FDE9E60F3D53348C71A04C049E4F197C3506223D415CC18F867CA0A660324644A77C8503B129B9B7AD3035B1E7B26F4C0EE8AEF299304448B1546D35B1E7DA4A934D2F8D7AC91C67E2D61AB2A9DF72DAD133934E7CAF18C82823DAA4624CA2B79996773E20AA86AED4728CB40D3B912FE3E271603FCFA9D7A2846822DC33B8DF5DD75A0 -MD = 01D5C0FDA1567715CFB96299EEE68730B4E28EEBA1596DEA5A4369175F8450C5 - -Len = 1156 -Msg = 6503E5415EF398D9731CFBCCCFA3203C17580D31035D512F969F9CD9A8C17DBAAB8CCF7289F36EA81A312E0E2A087E196C3F6E82C37A58898BDB8CDC77C5A0E100B1DB136DCA7EDA83722333DEF9472C73F42017BAA45BFD76FA1DA558126EF57FE9ACE4B32763F1996CB578FD0A7E51FDCE9B4DDAE2FD761308F2558395DC247C7BB4A108166B4BE73A54F4A8DB5E11F0 -MD = F0D121FE1C3E5C67589FBF6B778E4750A8F5B383A551857372FADEBA29B0534E - -Len = 1157 -Msg = 2D04416E47394C0C28859633A9CF4B32B07D941141D2CEBF4ECDA5B00D91422F619800BE12CCB50BCEC630A4F8069AF9436CC63FF79B15F8B725935E4185701AF832BB99EC7AF362E831A986CDAD2796EA904A2B01466B2B94F17F2C6480556AA3A795C3CC57CCDBAE6ECC8221206D5065701036C8F95301E35069F682EEC1548C70B56474E314074BD869219EA9D4B570 -MD = DFAD893B66140528432FE5D174EA0ACC9E1F4E63C362A3AA96D201B6CB011312 - -Len = 1158 -Msg = 3C8A5A0334A2C9A8B4BC0C08A6C4FE0FCFCB4C95F09A966D2BCC432DFEB24517369C15B75FCB6D11C9143D22E5CB79FE0AF1081D9A5BB31B837CB33703014D908D83A61968F455F09AAF85AE01CA1EF1B8E0ED9D02BD2C47206A123E7B90F3A028D14F9E11B52BC705165CAE9B9A65F3A2228F3D5390076AF0B5EB53AD2AA6599DA678658D4E72E7E3025B59363F754EAC -MD = B4FEE8393673569A70097C5DDB836E2F93417C90140B002777E988A86582778A - -Len = 1159 -Msg = 12B830C80CE922F2379641BB7FDD4E0442D3856B4BB064241836053C4CD11FCD2A79A83CD342DB812AE961267819063897E0317052E8EA1B7C93890C74D7EE6819EB9C9C7BEF48D29C62BA42C47058D3F5FAE90FD30F8C49DA48138D8490F3F347F8999AE34551A7C748E8612CAA1D7151F680CE993DD807235FE50A3CFE9DEF4006393E1B0D63F8533765525D3A35E93A -MD = CA4229529911018250C019DE7CBA92B40410FC1B04967BB2601266D518ADBAF1 - -Len = 1160 -Msg = 836B34B515476F613FE447A4E0C3F3B8F20910AC89A3977055C960D2D5D2B72BD8ACC715A9035321B86703A411DDE0466D58A59769672AA60AD587B8481DE4BBA552A1645779789501EC53D540B904821F32B0BD1855B04E4848F9F8CFE9EBD8911BE95781A759D7AD9724A7102DBE576776B7C632BC39B9B5E19057E226552A5994C1DBB3B5C7871A11F5537011044C53 -MD = 24B69D8AB35BACCBD92F94E1B70B07C4C0ECF14EAEAC4B6B8560966D5BE086F3 - -Len = 1161 -Msg = B6D26954A6248D430EF24FFEE1945470C465009DB645AE80D9C96D0365081276C30A4B9962C898F126F94C20C64045F1EE8A3E92E053BC2A0E523E7C431A3E52048C37F4803308E8E87508108C5BC4268CBEE526F76E160EB143D6582F56F2CCEC95250F6E2DF32041F9378BA347CDA1EDFD1C20AF848F9763298CFF00ACAA53A390F44CB19CA2FC3F68CB1B002042E38D00 -MD = 92A4CF327BA933964D27D3EA3BECE1C525DF055830AE487B5AA081CAE69DEA70 - -Len = 1162 -Msg = 8C4E31FA1C8CDBD79E5FBEF356B59E9380DE9322F1F38A94C373DE21449A309D194226ECAC4C2A3043104D30337C455CE77061156208DEF5BB7FA8ECC6B4B121247D4E9AB472BF38262995C0E46AE9BED99FF12405B900D9E37A3EDDDB06D0DD4A74BB19AEBFCD7EAE1CE2236488D73C58EDAB5F9834EA0C7FDBD90F1E8FDD8683023D28711AC96824D2424FB444C8365580 -MD = A299ABB750F31CEABE652EE1C2544ED00BE93996EE194CC2FFEDFCF9FC34160F - -Len = 1163 -Msg = 4414CA5B0EFAB33109A7280A70B8133D70C0697D4E7FCCDA751C7136191E40098A542BD8966E16837A0B3CD80BA313A2B027536E4C0016D258477E1FC40678C1A815AA1304BFBD5485F58BED84E094641C412B94975A800E595AB2D654ED93FD0E90AAC471FD243C4C8C4572FA62C89C795BA60D610AEC5C5FB5310346EE4EAD650B220F41B49E50CFA6DA45D510E181A0A0 -MD = E50F0D5ED0245FE5B136672616BB1FF15F2B54F831D324EDBA497C474D6FA2C7 - -Len = 1164 -Msg = B549E5BE6D307AC5371E9A361BD86B4C140E61F2FF38B6D17CB6079C14961D7F795D443D1CE3F3C9BAD4390B5DF5B793FBF8E618C42D66E194C4A2D7CE4C3B0977259BE8005FD30B9A3E861F363875A9DD176BDA1BD050FCD5993E1142A7C0EB2B5E8CB6B66CAC6CF0646B19EB3FB14C4D9FABAF48FB70EE777491D760951CFD736674875D579A1A615394E08EE8C331A430 -MD = A20F98A4358F12AB1F5E79461096337FF187E0DBFAC7428ACB1E05FEFDB2B9A7 - -Len = 1165 -Msg = 901816742594C8C7DF11FDF358E919E98DB6317A965426E43CCDB094214CA72FA5AB808C0BB8DBA1DE77CA3F5FBAD80EBC85AC437DF212099F4510544C7163BF214E42968114EB0F7BE50227B7A5F10BE46EB4DC1E55432C39438CBFEB922A5DE1E2070388998542ADCD095B9D94449EDC473F64C011B90EAE24B89C0DB7F4B55B8BC8154EA7E6D35BFC1E47770D5ED43D88 -MD = A7CC217CF709A7BE4E7CC4BC73F1E4E1C0A65338529E8A43B4366EEAE257665E - -Len = 1166 -Msg = 68F3CA7119C4F03DF39F854337F916C0D2874CE0D41FF1F357866781C76449C2C5D628C47CF8DD4D83D37F84F1159333602DBFDB899D620D2C593935C3F60E504C358CE2C4C7579522921EED2756A9C208FE1D91CFBBA72969B0191B619BF1D58D7B635D590F80825439E09B75A41DDEC0CA46A6A680D2A63DD93E8A50E49B7D19EC0BA6B545996499D79CAED4DD2AF35270 -MD = EB1568687D3456F5CB256631AE2C1A16AD79857ADF29A90579516689CE88B1FB - -Len = 1167 -Msg = B9F9D504F5929F3BF59F2C3CD1EED63BA74BF1444D4CA4347C61F54B129520C0077C3D4A9885288D5D58B33EF84C89B8801CE6A11E4370E7B479E0EC60C5408B73758533243828F9A414F4D6280F66F84CAA1A05965C8E97199E2A192170188F6FBF55B7F129072C30E87FB726ACE803AF6DCA4ECA9069D550B427D7EAF6BA0EED9A296500C442CA4E97B013BDCF5CF4FFE8 -MD = 9696EEA20185FA48A159A9510F1D40C320309E829929C24E49BF7B3125C11D6B - -Len = 1168 -Msg = CC7784A4912A7AB5AD3620AAB29BA87077CD3CB83636ADC9F3DC94F51EDF521B2161EF108F21A0A298557981C0E53CE6CED45BDF782C1EF200D29BAB81DD6460586964EDAB7CEBDBBEC75FD7925060F7DA2B853B2B089588FA0F8C16EC6498B14C55DCEE335CB3A91D698E4D393AB8E8EAC0825F8ADEBEEE196DF41205C011674E53426CAA453F8DE1CBB57932B0B741D4C6 -MD = 19F34215373E8E80F686953E03CA472B50216719CB515E0667D4E686E45FCF7C - -Len = 1169 -Msg = 7578F49DEC3E779736091AA8EC290A2F2A6AB4E7E02DD02E655748233401F0D4B07313ACE1D7760335D53AB539EEA95ED166839427DA6B40FF95705DD2F7B6F73BBA222D876218BA59CA6877CA198C044BDEA0EA0C67D49796CC326A237677D6732F3D1BDA0F411F7BEF6BD17E26CF8729EB89A23C25D93C9B4A688A21DF1ECF93A62757DE81A3DE44AD98292CB5CC3D662400 -MD = 4C131C14791CD2F5673D4B737E2F78AD6E0E11DFFFFCEA003139209063C4259B - -Len = 1170 -Msg = EB14DE5434C648F26EDA4758903B2860FE1F57E40505A0CDF6BAF3B0CDEF2635017D42C42399AC686B0A23459C2F1D73613B389E7407BBA9D5F93038622B9ED5494123233B5AFE63565C847352B2C76EDCBBCE5A8DCB5AABDE305AD7C3A2F72EA4BDB7B71BFB1093D669B364E51ECC1DE046A6F6C6A5DB3FB791C390373717670E29C8DBB48A1A12EBE3CFC3CBD44CB1340180 -MD = 12C4B663BB2382E8B5663F21F2186C3FCA190481E0F9571D75FE029D777D4919 - -Len = 1171 -Msg = AB7B466829094B1062BA045DA7100C355D3942C06675FB8E304277EB3DA4F6F4AC99FE0E69862363BDCB79C2593DA19B435D83879D61FB058C2DCB0AC9F3C489AC54D787937297E53A400C96543319F151BF1218A7249776B8A55B2DA79C4D659255AF260A7E63DCA829079554244B3CA82CFBEB4C19FB5BD6C69D97AF0F41854F418619706CC5E8F87A2B2E8D6C6AA7C8F800 -MD = 443BEA197FF89182C33D751A2A8E39D33525EBF9ABB04A87371AAAC4C669D0EB - -Len = 1172 -Msg = 910BF093C0DED15736115D84AF3E44E8314B77C31D72BD72C4F4D0CD6C567ABEBB245C216A5DBD914AF09FCF09FF3CB1BF0D2F19BDE7B418891B02679A6EDB0D432E66D83B155E71A5F8FF881D54F03C568C501726176CA24E0CF3C80CBAE4FB55B2F8C8AD021C43D855072C4170E31D45AE6C2F1FA467C59D38DEF1948E9A3496DCA570DCF5BCE480C7B51D9233E7F928D920 -MD = B8F2C23967DDCBCF8DF95588DBC01B69C753D5AD04F378E4FC7E4227FBE04871 - -Len = 1173 -Msg = 6C2317F5B39417E3ADA7C71CE7A8D69DDD1E25B607B86B8BE099111D64D6DC7C4A2B7D9CF60A33AD7650C21C702C968204F92CBC3D2BC18FA0EC8DF49F0F4B880E5C4E144498DF0DA067C7AF37EED9A6540885823BD984957B2A0EA87DF8264EB4BB17B26C68A9F9734BFA6FF6EEDC6C5C8A6BB036FD4D7791455AA5569CFE6E643745252450877B62E2116808CF1CFD882758 -MD = 064D44FF2C5B2D0DA5B5FA0D23212DD2D36621667D8DA3FB01EBE1A833817E7B - -Len = 1174 -Msg = 25D3A9228CC1232F8F65C1C95AF61637C115D4516464EBFA6795BF778C5BE311128F5F41D70465487A22C32D22F1D9BDCFFEA0547996207B913A6543516EE27694B7FA7FF182074E0C709339EC36781E3C91A724326FA5AB72F59032D4FAE15B6C4F512FC29EF0D078FF6010EABE0CA1F2B57E351FE5AE34C97AC09C81FAFAF251CB1D21F76C8C3FB16435C0B057C35F9E7B94 -MD = AB004A687D4C815FC659920F7DAF6E330EE2E2D77D37E4CCC8538E9E3CABEB4C - -Len = 1175 -Msg = 53DEB99B91DAF23B4467DBE3B98FE9579D1A1766A235585D7CF6D65C10C844C6EEC0D59C43BEC7B3117A5E42DD35EADC84439F884349AB94FECF403C1944F25BFACEC73FED352C49D1D6D4CAEE5F0F58BA1D4E27388E87E2EB9C0152D0705DC22EAD4A8EEF13C2160C9795ACD51FFB73979D5C21AAAD813F0A9E1A9E6E0B13F6F4E7E5314250620BA1B80953EA80F8E821AE9A -MD = D777681624E89EB72070EFBEDB143295C2D84BBD7D703AF3E1FBBFE6132918B2 - -Len = 1176 -Msg = 7639B461FFF270B2455AC1D1AFCE782944AEA5E9087EB4A39EB96BB5C3BAAF0E868C8526D3404F9405E79E77BFAC5FFB89BF1957B523E17D341D7323C302EA7083872DD5E8705694ACDDA36D5A1B895AAA16ECA6104C82688532C8BFE1790B5DC9F4EC5FE95BAED37E1D287BE710431F1E5E8EE105BC42ED37D74B1E55984BF1C09FE6A1FA13EF3B96FAEAED6A2A1950A12153 -MD = 290BD4808E5676EB0C978084E4CD68E745031659A26807AD615B10CDA589B969 - -Len = 1177 -Msg = 9AFEA0868A1A5BDFC88B78BD641243C8152D8F9D1601A32815DEF06CD9EDB6139B0E0821F742BC203B6C3E550B80948FDDA65FCDFD427BDAF90E6F94716EC99E7844B261CC6F1FE737195E0DEA72EDFF6BA96992D59747BE0AEEA610B7F0FFABF12B86C4E17E5F79501B9F29668F8B2D7505410981229B445BABF8A2A5D1BF38C9D0F3668C6893C5AA55E13B3BAAC6C49F47B100 -MD = A00DA2CCFEB7DDF166181944A9833E3ECBD5AA651AB92FB1B392E445DDBF5C01 - -Len = 1178 -Msg = 5866E10C6B7ED7A1DCEB9362F737B4B2F51AD1747915CEA521DD190734DB6C58A69E9B807B6E91651A77FD1C018D1B9F237ACA44E861A8330D220A63EEDBC9ABACBE57B70850BC9E70EB95D3D2F611CE07603C394799997716D244FA8DB4B5B3E91178CF93A050D6F5AD5DEAEB039F4511593D533BE38A2B554B470A33C74D070B04592633D389FF6C7530577ECF0F572A31B280 -MD = 20CD738F3E5C32F36742E9EABA3A1142C1AC86E68B0A38CB50297EA26B18EEFB - -Len = 1179 -Msg = DC5F38825ADF0C2ED13063D7A142494DE2FB8CFD78718CD87BEA1B17288D18FC6A914D6F2B6BDB7218DE003CBABD3F2B5C1248DCA7E221FC0B141203BD7C96AC3D6746155147363D5C75E4BB05D6AE03C0DC4B8CCEB689AF6CCEDBCA79F2FB901107C8F91CB146E57E79921097BCE553DEC9FA17AFC94F55CFEE76C4B9F8379B3E87857B874DEEEAA140F6DBF158CB5E42085360 -MD = B70FE51976B8A4D96184859B52BA9BB22BA0D5C405D30A3A7E5AE86E4882FB25 - -Len = 1180 -Msg = 788BD86E95800633621BD3314977F9BFFD02E73D885AB580D1EF3DE480103FF2C449AD81B2CC15CAAF350D794E48DF3F64804B5DC5ACDA419EC34E95D50A6614EFCB4C6DA3267F26B75BFAC3C87CC0DC81C2683EAA9ECE7C3F5E7847ECF00FA1A9043AE5A90EE15F8B81083F38829933C8C75DF3F08075847F2B64F29B973BABB18592438F9A69E20BE11C084372895E91B837B0 -MD = 41DBFA3DFCB7916FAFB605654405A98B824535184AD0E08458FC7712B1E0668E - -Len = 1181 -Msg = 375B857529A24EFE7A78B2CA46E1A4295912CD7B739AEB1CBDA7BEFC901EB4FFD8BED49F3366E4E8C0EA1EE938F60E17D2D0D05F5100F288415CAC3F7E82FD30689E2CC692BE02CB3E34CFF7D3DE7975042E3C5C3F8AE348FF3402A6107583E57C8E038D25668D76E43772FD92E227D5C1E8330A929D342CDF8DEBE1D314C88EAED559A13461772B73CF39093216C57679943FD8 -MD = 463A22B21B8211D13A794C814359F824FEE4F816A36314D91C76259753E8370E - -Len = 1182 -Msg = C40B66822F1F282D598F05CB2094EC4E69419FFDFE3833672A289B4ECF43EF408EF4862ABA90A81570E35E73EE4809E6A02CA9F6B14D96AC2C401045F2D5D86137051B4D3F5556961DBB96CB32CCFB38D215F826D00986037C6012EEA06B9FFD10170DF6E4E20D75A46C8F7A345B3C67917002276C73F717E4E61ED4329C3E03643E9D56FCB266498DC37A72A932F3A890FF1CB0 -MD = 4994DD26CEBD9B496A56C49868376EFB3638953D630572B40BF458ED3BA7A2BD - -Len = 1183 -Msg = 494342589E394B324577E17E59EC8EA27F4ABC8D0454EC70AF0BE40FECF638A278A290137220AE9F00A2CA70CACB85BDD4013823917DD9E4AC1B5E00521D3F385729AAAD85AEDE5B8BBCC9FD1F97AA614FA3176DB83D192CCF775BB5A3C51F9CC9E1E6639B3F58373BDF3F20CD2F7BF780336F4F5F12AC6F3AB01DD1A139D067FCFDEB184B291DE76C7D770D8EC122BFB4CF890C -MD = 88A85E40B83BDBDC9D41446DB278A9F10AA39DC4D9E7673CDA1AC26A5320928B - -Len = 1184 -Msg = EB6513FC61B30CFBA58D4D7E80F94D14589090CF1D80B1DF2E68088DC6104959BA0D583D585E9578AB0AEC0CF36C48435EB52ED9AB4BBCE7A5ABE679C97AE2DBE35E8CC1D45B06DDA3CF418665C57CBEE4BBB47FA4CAF78F4EE656FEC237FE4EEBBAFA206E1EF2BD0EE4AE71BD0E9B2F54F91DAADF1FEBFD7032381D636B733DCB3BF76FB14E23AFF1F68ED3DBCF75C9B99C6F26 -MD = 70999AB9818309AFA8F1ADC4FEA47A071A8ABD94012F7CE28CC794A0D997C5CB - -Len = 1185 -Msg = 826DBB35FA1752054063522EBD05A746B5AEC31C1B27031080BF56A79BDAF998065B5DB044FD6AF4E14A3AD246CFED7AF104E8ED2B63A696489D610DEAF6128A742D669FAA149CAD862F467D73E53793C1C8D6237839F5677D5CD3FA78816B41E640C62F9D593E7B94595CBB1DCF3AEAA0CB05A88F890AFF71F30C8629FD3AE3348CC7338B1743B9E5768DBAA8BDBE6446E5DC4600 -MD = FC6DA7DF19ADB0DFC05B703133D05CE72463AC1ABB0BB23333FACAE57AC508DA - -Len = 1186 -Msg = EA5C8DFB574F00CC9CD3DB9A5D499C2F722A35257347A4A80B4C141ED02DDD7CEA584E1608144B6D579029730244ABC25DDE51EF19772376D2607A13ED513BA3E43D6ED7A99553D23EF2E0171538FEC263EFE422AFF4B723BCD0B85E3FDB07E2DEA2CB66C8F4F4C6D9138914E6ADD822E276879A122F75C14575FC77A7117F05E274A029ACD74F8DFAEC843DB2581CD778702BF8C0 -MD = 202ECFEAE5ECDD955452C4AA40899372AEE7D82178085859CBF75643B408B764 - -Len = 1187 -Msg = 2EB70DA0700DDF3821FE877474EE9F5B8A516C8818F18D57E2DD3F85E537B4C47CDFF4944220BE5084212290B9EFB10D7099A12AC41DEE0C6D7DBB2FE376DC8EBA1A845D5DA62634E7C3C15DC2DD6C6F44BA4B82B73D7B58ABD41A35D2AEFEE2263155A7B60CF2454FE240FAC4F8BB75A0829098793554CD2617CD7B02307848100EB5CCE098520C167F42FF4F32CEBA6AD91B45C0 -MD = 40230018F9D2B28B9EC43FD912D5850D7EAECB0638FF5C01E26D7BD608A41F22 - -Len = 1188 -Msg = 1FB040B1196A11132472801DC17BAB0A09E0A85CB66DDC8F19415317B04A2B854E0C3F798AC6488C8FDB452C9A83E23FCFEC96C5CB99BD6D5FB53415B3A24CED6925B5092E75EC4A91809497C34E1634BD1F851DF04896869F105CAEA4B881FB1905113B67BDA4507CE676F45B65D89893E2C2FD9D883041A8F7AB576FC927A51C3BC97B18F87903E421A7D9A26CFB5C4BADE82DD0 -MD = C0B3CF50D34DAA4EDF5DECD4F3AD20D40A8FF3B2A22FB362168263D2D008513B - -Len = 1189 -Msg = 0AC19F7A5B5B5587B57EB2A3DD742020D6F25DB96E18D88B96E264C6C7CD95C39056C62E262075A89C2E9C7F95B7DA28BDE2EFD0AB61E08CC24905D3758C07EE9E044E08891041B3EE94DEF1CCAC41E213CF637289E859DCA3563F38A410EAE04B0256464DB8AECD6AE02C2F0750E241F825B4BC3D2746CCC41FC709ABC5403E6B8AD975ABD5086EC452D7E4EA8BEDEDFAB8057C20 -MD = 6CA28941FC7AEB008295A64D63D5BE9BF7D64C7A435B76A653A0FA0D28581978 - -Len = 1190 -Msg = E5DBE6EF5D7C8260E18896A8118B42B75BF6891D7B79E784213C7385FC06DD68637A4ADDFD25374AF0122C04FA01DEC789B6BA08347EB226F985437D6EB855DA96EAEA2714373ECC6BD02BA3C77DBE2A6CFAB6FE6738C6DDE04A8D7D107CFC0EE87DD66B850F70D2C676AF4EB9ACB0C771A2EB9495F86C21F8B59847A53F8637863D0D29D5015F0129CDBA4819755F1339840C15D4 -MD = 5598939D1227C5AC439FD04E121E65FB2D04EE02CB5413CE10EA388EDB8A0AAF - -Len = 1191 -Msg = 59CF21660C207C793EC978C2D02834BA9BF79A9F6B47164193BB3C45F7195B78485EE73640CBA87D563627E6F08CE6D621EDDA03063CF51810B56B1E03E6601545F5BA3FC80AE74F055441DEE6AC31B02363E7624734D89259B52D69108C2839DFBF4E64553D09F5F5A4EDA85D7B69F9E668F78156B06EA4C0002F33495CBB464808DF0F48F07D4AF65573889E3C10CE188F7015FC -MD = 43B7EC632B32FB667D9177DC4A62A1F21301CADE5BA3F0A6477649EBA0E10A1C - -Len = 1192 -Msg = 1594D74BF5DDE444265D4C04DAD9721FF3E34CBF622DAF341FE16B96431F6C4DF1F760D34F296EB97D98D560AD5286FEC4DCE1724F20B54FD7DF51D4BF137ADD656C80546FB1BF516D62EE82BAA992910EF4CC18B70F3F8698276FCFB44E0EC546C2C39CFD8EE91034FF9303058B4252462F86C823EB15BF481E6B79CC3A02218595B3658E8B37382BD5048EAED5FD02C37944E73B -MD = 83120033B0140FE3E3E1CBFEBFF323ABC08535C0AA017803F5D2F4ECB35F5DFB - -Len = 1193 -Msg = 880D1E3AD14193B4F50EEEF144EE2B95FD817D157521EA14512CDCE43B1E498C0F3DA6906B3152668B79E542732D3424AD8AA392FB1D951D88AFEF7BB419E9E6630F8543E089D44F8397E420A0EC1F439AC2B1353C4B811D752E3B9D47C2220FE490ED4B2E78F63E8B05758417AC89B62CE2776156AA316C07414BF840B61D2AC875C23D313354FDCF2AC13F48F18BE75804E42E2F80 -MD = 314F089789DAC8E432F20EAFDCE760091780FEAB5FD33FBB32BE6293E042BFB4 - -Len = 1194 -Msg = 90486823C70519411AF34F204AC4138D7B6915C43D1A0910955E0DAABA761C55E1AD5F75B2A834DC90558B112BF80D24B9969DD22D1FAA4553F94AADFF5281214F3B41D2E8190F83C4B15B1545766B78C73DAAF920D06194456D3069DEAC4344C176753F5E6A7DB6955CA6837123DC12CD19D0D46DD3DEE721199AFD8CA7BE9D8A08A85E5E97F720A82C6BAE20A6666322820A466A00 -MD = 8D25F7E639939B7DF914AAA69E2189294B6E1D99248DDF02A198084223D3D1CC - -Len = 1195 -Msg = 1554706EED3D3C4BFF57E5ECE7E346FDBCBFEA1369C8819813AC26F9CBB9EFA54000343E9FC91A1751B4E5017397936F63229AE21FAAA04049E3EE32808B31EF53818C893D67248835D9A9BE4F7A72466423A1378666D95769203303F2933452E302DFCB870A642118B37BA723F88E28804AC1E39DC81FA98F6E2D150FBB5B05FD19F527F4B601918255BEDB7ECAAF71D83B5002EAA0 -MD = 63A856A19F473551ADB58226E78C23D41F00DFD8E2ED2B5C53649A34A9430C57 - -Len = 1196 -Msg = 700516F8246D73E28CB79EB2AC2F806A67DEBD5CBC438F9B58FB02B85E6667C3E96ACF02168F83CCA0AB4560FA6A31A10DCF638B2AAE4D0EB9DFEBA4EB723D574005659B72D3596BEA991809290C612D90BA4448A8D413E2B8B07F41E9AAB65761366D7A19C97E3ECA66496B16A5556989093937CB365B029FF0DECFF7C74E26810D7E00CB4EE35D965F19F70046FC5A062386C0E820 -MD = EBF7611538453ABBF40511DC484FBDC7B605280B88B1D04A01D38434EB811765 - -Len = 1197 -Msg = B3151A083EF4ED82D6FF662D632D3A15CE93EDE988CD7E31EF91E2944DAC669BBD8D4EDF28B07C0809A9D7965AC023E143A9D8B66C8442A51283F69E7684000B8C8CB3CA12891E3B8AD8CE342514F5671FFF3506D937D734505D1B7E4557CB69B83D76F15806C56E6696ADF027C497BD7E30C19B92E2F5E4536808917986E59FEA339DB1B19186495DEC650DB7B85EAE5925AAC57158 -MD = 2E7829107F9EB756AE76161B2DECF8B44A1287BDBC7A8043280CDEF973B137E2 - -Len = 1198 -Msg = 2BE9BF5794E6A8EF2BA1EB5DA245610577FEDB653B12EAF68DB8FCD5AC2FC0495475912D5F5D83E81B51098F9A7FBE1E2B4B8D5370EB64FA98B73147C0DB53C74D508BF0BF96C0DF5C6F765C94E4DD1A00DE2D3F86A6A67B2EAFCC31E97A0B57A5D068E62C59D5CC2459DFF4B5F385E8D360918E8FE7C61E0B54369A7DAE211BAD3E0A6DE8D798399A45886D2A1F14433A20C46B640C -MD = 3DF7D323FE1FDC75C1E88B064264447ED0FD9C8BE8B28B8C4A55A6DCFC06129E - -Len = 1199 -Msg = 513DBFF1209835CD5C01E7FF2A85F1CD70A37CEF3D61897F88C25B40D448D7F4A14DE631A2B44E366238CD1637DEA9EA0437B78693AF5F1E37ABD61BEB9A6F302FC0958976D7E35508D79052C6CB37CD0EFF35031DCEB6D9C0E6E8321B2A79BDF5C97F1AD9EC9EDC27C359B0396A3FF4A276A8C3B6526599C90CBEF761FFBB4722CA389597F69E9A67BCF5403649252A857B56BF6C12 -MD = 02FAC01790BD2F15C97B259755C9101D439A6EE0F0D831E4D42D58F89EDFEDE3 - -Len = 1200 -Msg = 4CFA1278903026F66FEDD41374558BE1B585D03C5C55DAC94361DF286D4BD39C7CB8037ED3B267B07C346626449D0CC5B0DD2CF221F7E4C3449A4BE99985D2D5E67BFF2923357DDEAB5ABCB4619F3A3A57B2CF928A022EB27676C6CF805689004FCA4D41EA6C2D0A4789C7605F7BB838DD883B3AD3E6027E775BCF262881428099C7FFF95B14C095EA130E0B9938A5E22FC52650F591 -MD = 5584BF3E93BC25945C508B9188D0502C6E755BBEBABFC8CB907FA7A252EF464A - -Len = 1201 -Msg = 0409C9EB80912B2931EEEE3255E452201EFC972E6427EA1C9FD8DB51DECBDAD5145B0EF578EECD56ED3D9026F65705B30ECBDB27B32866ED5F6205E72899BD9FDC76A81F4613C4ACCEE9D0B19CCCAC6EC99C93A0F337BC2B9FFBA0EF5C2858CA503F5B4D2974AA0DEBB407F5E01D707DE7CBB96AB993672FDBE46C6DC462A1BD38B853B9038B45A9023D14585CD3F21F761A5329930000 -MD = 5964D6B9F8C58F32FAE8A6F7306E01849F0A8343AE0C91D6F37BE5CCE247B204 - -Len = 1202 -Msg = E4C0456940913E4F1D513208BBFA725EABA66714F89D4830D0B1D3EC3EAD6944A533F661AF7F37145C5550EAF106A6E5EF75647EC078C48DAB5579A71C3F1394847B329951806F160EB4CCDBA77033F21665ED9A6CD872B207F83CF006F5DADBA8A2FF05CF7576648F87E32C3B3DECA8539F65CBF65663D761C3F6C03EA66C2F60FC18EF7C5200B173E9D136A16066A9022465AE02B440 -MD = CAF3196F2B567E817D8C796DD2BAC983DDC9F37657F3B20934A4A95C3CA66C97 - -Len = 1203 -Msg = CF2B1D3749F0FCFE15667C2180E01A3090C60387B864522F06C8C6754F2655359FBDB91AE7EDEA95009470FED761B30641DD3B98390EF85B4B8BCC927D63DFB80DB643534B65862AC148DCDC95162D707022510F9996689AAA1B4B50C6A8867A74B11D00B2517FC81D96E8D1BF24CF0ECA862CAC750059AA7BA1B81ACE44DA18287DE4D7AC0386917F3570BC2C4E3ACB6F233C85406EC0 -MD = 79B48AF23621DF99AAA5FDECD4EB420FC84EB929ADA451E0D1F423BEF929A62B - -Len = 1204 -Msg = 78D24A6EC44983D0836B45520E6218A0B017F82547E8EE1EB61C8F9D6C5AA5A0ABB6B0635320B9DFD2EF8C4B3523AD4AEE16B24F17A069B6A477F2797FCEDC02AA9499E4EA579CEC79510288C11FABB4D1625EB84BBF4A20DD65C9D406E7309C3D897F83CCAE2BE9FAFF2E2303A86AB75E424425A339D2C6E2846D64BAFCB9905F84477132858D0C03F5F546F6D30D108253AC76B64880 -MD = C9D87E47B951D375809EABE2358B5CAC14AB0716FC0C4CB0CC1A88AC63ED17C3 - -Len = 1205 -Msg = 8D1B3A5DD6AF7423E91EC02A68D19A902166B12968BA6A9B3C2C86CE746161B434DD2EC00607563061DC04EDA5646DD5AA49B1DA5CC7EA2BFA64E6832939EB1E70B61D2E0A44A519E9C6469E7F9C0C3C65A819F306273DBE1022946675E476A604FB08A1A0FD9DAB905134FAD2F26E732A69FCD7DB11A1ED353E24841C400B0A4AD734A8744B024735E8F98A9F7FF39A0006A1B3F1BF10 -MD = 2FC002E1D3E666812D75E3A6E1C096E20C0DDA3F52FF6876630B0DE9704F7A68 - -Len = 1206 -Msg = 91544241F70505C5295091A16575C6E00E55CD65D205CADC8EFEDAB50398B8CB34BEC20FE7A5E4D31C79731405DAA46879B52200B8B2B114B22FAF7B7B9C3BA530D76BFC9EE733CEAF49E4A14DFF39872019FF7A1196D8333076BEF518B6410F764F60F413BE7969F56D85972B6C5B689E9400038211C3238ABDB2A32AF962EB2FC8E28355F594F091B5675BA0F6B042F83D6BE7876234 -MD = A6AA76A37C86A060299A7A521E03717E4829AD017C73BC8D14438607133DD54B - -Len = 1207 -Msg = 56E0C89263D8B0EAFAD6AF1035860FC6C542B1B7B9B9B434D29A3A125307C85C882DE03ED68BBC937A6340970933C89271846416042640AA90F77C9C8F670FB4123D9B628799FEF18C87AB4F914B2419DACAB45D2E0FDC686D48171EBBF17CA4DC28A7548C0836B996F6C387631AA413117DEAE5A1D380B94DE2686E61476E230B2ACD642FECA0D769482E30170888981505E9FE8CD8BA -MD = 36E3F6EB9CB3E6F55EF4905FDC9CF5A8290BBE23C6F295BF3409A45764250759 - -Len = 1208 -Msg = D3E65CB92CFA79662F6AF493D696A07CCF32AAADCCEFF06E73E8D9F6F909209E66715D6E978788C49EFB9087B170ECF3AA86D2D4D1A065AE0EFC8924F365D676B3CB9E2BEC918FD96D0B43DEE83727C9A93BF56CA2B2E59ADBA85696546A815067FC7A78039629D4948D157E7B0D826D1BF8E81237BAB7321312FDAA4D521744F988DB6FDF04549D0FDCA393D639C729AF716E9C8BBA48 -MD = C234B252C21EDB842634CC124DA5BEE8A4749CFFBA134723F7963B3A9729C0B4 - -Len = 1209 -Msg = 558AA1969870FA3F59EE259B5797358ED42E6B3F7E7548FB4C7985461EA9E3A65BC021FC95626DD462FF2F99BB5A6A8E19AA27AEB184F41630E67D3265688857C61AC58B205406BFA6F02C6D6463C33598F824F0387C86797D8AA9EAB639B6A77B7076B52EB5398C8F31155A6A1BBDAF2DEA857C798E8F9B3168CCCAAAD4EA37C5AED9BD9E3B94042C94963C5064F572B163B6A8A6CFDE80 -MD = F51CADC40F85B8E10114283CB0E542E86AECC255A991024BB55EAD52E2780264 - -Len = 1210 -Msg = B25A91F9A28E69447149BE857CE03282351517AF22F6512F7EE3B00B161125EE2673840D5765E9AAF2098732E7D9780C31452872AB6CDD658C5F2D8A7529D0E622394C26A03B11F45D15DB0FAFF43107B1B750B822E0433CA634354EF8782216ABB666D187BA1486CC3CC923F4A270300886B4CC3FE3E4507ACDC605EE440733F786852054662E43811CD1B77D97E6829C3D7AA9084F0CC0 -MD = 0CF76725ACBE948E015C87C8E85BB9B8DAD8F04BE53A7FE97B99011C55CD508A - -Len = 1211 -Msg = D5BC5EA66BFF1C5573168AB9E814082331157B8B885C9E4976088A7CCD342186CFD88499887DB0144A9743F13B5F4C402C18A6B060DD8DF0101E1C11482E109AFC78C0C6352F7D4AE47009A3DFD2AC5B3C6E08CD253D717253FB89F94E98DF386FB09333A1F4E3BE1792ECAC7C2CAB28B447ED0363A5EC84BC1E26A2AA7F3C5208E0C0015125155C63A4AF5787437D7CEF410CDB393A2FE0 -MD = BA1FBD14E86771E7C6EA16B6A239D00251C0E747691B473268EBE8924905537D - -Len = 1212 -Msg = 7B32C25404B828B7975B85A7F8E808CAA26E48DCE8E28C5CD0D98A29D3FB1E34D09914421C693BA70EEA3CB5C79F8842B8EB70DF6548B223B14680E31566C6C126F53EE77A0C5A4FE46A6DD6E81E1281E39F5CE580204702728509A3207AB6D316712D355125F8310026321D2E0E318B58C6E6E49CCDC867BD908803FF4AE066A9AF402FDEAA1006B100679A4F68145588C21E9D569C5B80 -MD = 1BD57A0DBCAB8DFFF4D618A42E1EF77841908CE548FD4C7DCC71288E88050C93 - -Len = 1213 -Msg = FFD56A3A7BFBCBB58E076EC15B32FDC6515E6A3CC797671D8291C7F9905D5CBED34607D713D1FACCE5CF240F4B0CEE151A43CB96FF832686832E28FE24B603D95FFB82D757B2AC496C80FDDA8E5701DAC77F597DE05D9D74008652CC06E5A724B3D279A43CAB626EAFA8732B446CBB24C2A574EB6DB20C736678B65B71FD0BECA4004C0F6BF8E656E754CED34295FF3B2977DBF083301050 -MD = 98ECA14A1249DFA1D6ED203FA5F2D0C67047FE168568BDC3BB93B97FAFE73BE0 - -Len = 1214 -Msg = C8ECC9C02A54BCD934F3AA9416D4C8539BFC445C20CA833678394503C6B87091B8B51185859DE712FD9CF8EF6DC4237811312F1BCB9276D88B256CABCF2BE94A04B91FFE528B3CE13E68748C16D9370A228ADC895832FAB7C425E3D75A6B1901DE47993CD484AAB82EA902C6332B5888BFBB60415F4A0B05748EA088212D8964228A5C1899CA4F8C8F21C1236FA118B68B5287AA0A9D8F04 -MD = 3DAB9BB3ECA13DF900FB629BF359B1654EB9993E090C46E31F2FACF9B06D245A - -Len = 1215 -Msg = 625AF287E043C8F40C535BA8495B07A4F20310AD069F1C1A1698E2FC2682DE1294F7290C5BB7C4CA4397CFB9380ECDA6FAEAA39230513A145646BA120D95E816CCE3D13F5C9E6F667B2C17CA6D20E29DDEDBD74BB7051F3F61826A7554D537A26261D0B5759C615530D36139863811429ED257F8D85F30BCAF67D10B9C926C398DBEDDA79C0F7C858BC1C6FE4EF20DD3580A1419F4414834 -MD = BAAA7000207BE4236B2D0144E7F1887D019248AE5E9D06C486F8ABE83A206100 - -Len = 1216 -Msg = 842CC583504539622D7F71E7E31863A2B885C56A0BA62DB4C2A3F2FD12E79660DC7205CA29A0DC0A87DB4DC62EE47A41DB36B9DDB3293B9AC4BAAE7DF5C6E7201E17F717AB56E12CAD476BE49608AD2D50309E7D48D2D8DE4FA58AC3CFEAFEEE48C0A9EEC88498E3EFC51F54D300D828DDDCCB9D0B06DD021A29CF5CB5B2506915BEB8A11998B8B886E0F9B7A80E97D91A7D01270F9A7717 -MD = 645F25456752091FFFCAADE806C34C79DFFE72140C7C75D6A6ECFEEDF6DB401C - -Len = 1217 -Msg = EE795C10211EA9D303C7C8333C6CDE90E606A65C1D5D73C4A26645EF592950FA96B2A666F360A3C56C3C00584DC2BCFAE83E35B738DBB63C65EE199D44EAE8D82654007F9387327378678A82B649EFC8E44EAB65DAD64F4087BBE76BB90060B161B9826B7AD0ADF81F503BBB964AF705F1376DFAE246DC5C4B4995BC2AFB4DC5E43FE44BDF5B66B949AC499E615BFB04A0DDAF25D6A0702300 -MD = 35B6E1FB49C1B5822D7CC48E219D91CA29CE188AE8AFE5CE6DEE712EB39229B2 - -Len = 1218 -Msg = CFCE57319D4C68132C9491522458BAA42493219C4E61CEEE5248F6DF0A65CA2D82C846BAFA01628DEC4A07911F1C71C4DCE7AC66AD005A8D973D3E8D646C9EAA47FC8FBE0899FE69A43BC20DFDD262756B7A703DC6D1A271B544D7E8EF077C3EDDBD0784FAC5B7AA197F25E8A83E1A507D0A893E24FE2AD4EFAD28F65C8682EA423223ABA8E04E48EAE78BE0F70FF0F0C44749AA4972A4F1C0 -MD = DA6D4E1C699A1EDCACA945C624B854DF903B4D6B83D603CAA8BCE083B966722E - -Len = 1219 -Msg = 91B24F53E90CDC482054BAD312C5126F80154C3AE92C1680A0807B2592EE95AF75C2105FE437C3F70F6B6B06F98AEAEA13E572FFD42024E748D1BEF6044A54D7D057303AAB3D5B940D2DEA3C405E667484334A628F94312086D72E3744A75EC43B645879D45917E7C587A27573B63BC2318E080767808BAD0286F1EF1B41192667037DAC968D784B09DD6342B31CAD52E936E65B8F3DC097A0 -MD = DDFF7AC91B5B524D6F7C82092F6C369FCA7A0D804F875AD3A3C8B7C440FED0F0 - -Len = 1220 -Msg = 77E951D75C4B0CAA1BD37CD917B05E25F17259FD831CA35166350425844422C59B85C34E40262A01EDA5EC99F4D0E1BA62D371284CFF46FD1ED5152C3AA612F279CF48095157FF8CD0A8951CA8C4B56DE177BC493FA3601976184D05F2D34CDCFC9F230DB5ACA5CAC3CCD60A05E67FE1FCD9D23930F1D4708697B2B226CAAA3E4B89C97EF142F17D56A2F417207BC51F4F30245624A1647900 -MD = 103CEA662315F952489CFC8A608CF905B3B01D4BC4F4F5BE5D1ABA85717466FE - -Len = 1221 -Msg = 78E4FD46027326BB88D6C727711089A2A4643BE28267B6BC224EB4105B4BE07B73E28A2A97C02F17980F296B1494BFA51158D4DA1DAC27569B7598D8B11A10E040497A87E892EE035826CF948CDD957CF23EE17E88228849E00E8839B2D2DEA60C3E2CC0C7AFBA8EF335E9B8A0610EC25A452533D1F3AEF251166CA8D384E440EA616BC416706C0FF8D6613B89D62C6E5BAE80078A6E528168 -MD = FFB638F8FCE0F51CFBA13545D2D8BB7A85AB6303675EFFBCEB2825DEF0E3B493 - -Len = 1222 -Msg = 49A1E08F3F4B954DB2998AE9F6B6E48A5E0CF52CC402CBC34A5472A5FA7A5C16C2818EEA453408514394F390DD5889D58FA6AD8CAF373F48F58E7FDCD1A769BDC47B24D8500CF72488D93453ABB336A82D689F0B983600B80623AE818B00108A1CD4A615C9648E1A2D095DC544563E19071F7C4FA13E01379B67A723E58B6CC9620F2D93CF7D6B25F4346E3932E8322847610E718A41F3EAE4 -MD = 14F85815327BD1D7EF8231E8E20347676DBDF75EC33E0A491D6042E952AE4726 - -Len = 1223 -Msg = 54C62479E70B5E674958039D5B0A720C878A69C9197A905B0445C8241F256DD80F146545F4A97F8C3C3CA4D9AD5F27E2704A98822CBCAF9A1F3D32B8570406C9D9CE13ED2D78FDB5C2827A4BA9DE242AC09C26DB0AA135B06FC7506E3B9AB45958059F151919A99B3E36F7E4331D7620D6E720A9A20042128CF47EBC231372EB9A1B7C7C16B268F375447DE1F094836CB12C1EEF00100A14C8 -MD = FF6CE68B8C921E29B20A164CF448582094B3B2AEC2506604EDF59916E1D6C4FC - -Len = 1224 -Msg = 6C4B0A0719573E57248661E98FEBE326571F9A1CA813D3638531AE28B4860F23C3A3A8AC1C250034A660E2D71E16D3ACC4BF9CE215C6F15B1C0FC7E77D3D27157E66DA9CEEC9258F8F2BF9E02B4AC93793DD6E29E307EDE3695A0DF63CBDC0FC66FB770813EB149CA2A916911BEE4902C47C7802E69E405FE3C04CEB5522792A5503FA829F707272226621F7C488A7698C0D69AA561BE9F378 -MD = 2D7CAC697E7410C1F7735DD691624A7D04FA51815858E8BA98B19B0DED0638B5 - -Len = 1225 -Msg = 0944B0500C2FD3F0ACD0B0623EDA2E763BD95483CA40A44015BC0689F840AA97873AAEF58FF7CA01B0BEBFA789D301D3BF25AF39D32F198AC941BFC93C2051E1F2A38389AA26C7B04CB76D7B23361232587F923E630F27DFC7AE0E9FA8ADF10FD7D022200FCEE5847148003CC7144119DB20D0E2AA6564F261CF78F1B9F79CFB3DC8A9867BBC7FF49D719F493686006F2060B93D8B3DF679F900 -MD = 4713ED1A75A97AF37F2F1EFDE209022D3637B64AFA0B0052299CFA033EBACA2B - -Len = 1226 -Msg = 07CE3EBDE3C2F23BC7CAA9D38E5312961A470F9375EC3DF44809853D47862A2332D0BC4F29B267CE3FDCA659720BDFB84713BE1B2F7387D679E3A8AC8A12837E8003E9EADEDFD3E29AEF2150594604F507CA276A9DC5EB3EE8EB74B511787EE2862AC0976588106273795CC6F41596ABA09B9C59382DAB0398E95F75193BE0B14A7E45C88CA9B8186C9B0F0485A4DD9B4FFC361EB28D34EC1E80 -MD = 8B8D8EF1C6BD1A23F77404B0D7E905D7F34E4B5FEF2D1A265960A061807697E9 - -Len = 1227 -Msg = A12682794B203ADAAC278FF0FDDBA860CACEC00C1CE9A1D4577E3D7EEF99B291E306189DCDA797C45D643C1E9542AB0A16C9369286A1FDB6AC4D5C1C213973F95A468DF114BC7FAD9EF3118CBB8312E4685FB6B46ADF1AEA568AFC69BF805FA48B9D25064A98F3C2961ADEE697250FFA4FBBAC491D698CD46BEF3E7995E3416C405F75062D739631E901670BB3400BBCA014FD22700919780C20 -MD = 6810997D15F94DF66D305B03B38569BE30272549D655632061F1B92BC0A5EA7A - -Len = 1228 -Msg = 6FE5239D775677E62348DC46DC379F70CA024DE4A4744D1D6070F6A90F26F1E1720D0A9FB31668E41C8CF350B7EFFA2DA0CD1DDDFC8203011A80CD325259FD47E8E2CE329284D54639C73F1AADA1E034F291505D672B979C94A08022EC15FE2241C687B8E2694B4F108A39E1DD672F9503E3A3A99B95DC87B8BF74A95B332201A916CBDEB8182D3D60E6E482FF04A3EA05DF548595D487CBCCA0 -MD = 9204E388C001C84F9364DD74D43FA5620521E9770D42FB146A15D093E4286A1D - -Len = 1229 -Msg = B063F65D94AEA4383850A817286586F22CE3EB09C7EDD293EE8146BB8B2706E0F1BEA7784B708D6CA004B28ED7BC4E3E432A76A4A644BEA920C6EBBDABE3333C083EB682878D7C07643FFEF6E50357DAC346B2106DBA30E1288A1886D01A7F3D2BC970ADC5AD33C5C86212544F692D4C56C83F448836D79B9882E7F85DB38AA3E07AD0399F0152A08A08B6EB4E5CDF21851C8A7C73065B068140 -MD = 9D87AE546739E2792C614C71C7B9A13408731F7FDB07D6ED8229C0F7E0F1FF72 - -Len = 1230 -Msg = 48A2ACD9C115E1AEC54BEE539F842ADC43170FF60E003272E9E471135514A50F855094BEEF742A175835BF1102B747BDEFB149EC234D81F2BECDC17C079ABF874C3CBC4741E6115F34831BCAA7D4D954EAEF78C04C640EDE7931B1AC63BF8F665CD4724886487FE13F68097583461B58E88EBBE815F141BFD3C7BAC974D462976234D3706884C663A9ABD6FF86C046281446AA07317F36CF7DAC -MD = F56ECAC0FD3A57167F3342AA703B446E146FCC09617A90AE71B9438E8BD2235A - -Len = 1231 -Msg = C6810F0B8436125C00646A67D9AD7F1689821E3B0F02BCB47A3DCD2DCC292CCA93170951FFA4BA6CD0A533C5889BE768CC82FAB0AA7433AD928073894D1EB21DA667F49020E3EECD26234FC5EA28665BACCBA515C40071CCE0C139281D8A5AE4D91482C259C15FAA9794E699880E9D48FA06C71968B2CD34448495AEF6C55506EC96E71E6326823C0EA399060043B0D5BA74AE64B6F14797199A -MD = 184D1E43E81DD748C63A8968F84029E9F463993295C0EC3D6DC83583426EDA34 - -Len = 1232 -Msg = 51B7DBB7CE2FFEB427A91CCFE5218FD40F9E0B7E24756D4C47CD55606008BDC27D16400933906FD9F30EFFDD4880022D081155342AF3FB6CD53672AB7FB5B3A3BCBE47BE1FD3A2278CAE8A5FD61C1433F7D350675DD21803746CADCA574130F01200024C6340AB0CC2CF74F2234669F34E9009EF2EB94823D62B31407F4BA46F1A1EEC41641E84D77727B59E746B8A671BEF936F05BE820759FA -MD = F664F626BC6B7A8CF03BE429155EE1F5CD6ECF14816DE49A5E229903F89A4DC6 - -Len = 1233 -Msg = 5CEC4FED86E4B4355F1DB08D3BCF6C9E2BF3624935F49F69BFBF10FE95121BD62AE073AD191722DDE7F015C3C19F9D3AF6FFE2D767CF0A0EB9FDB244167182D7ED6831319D4984400EEA1DCA41CE0D27D85420A59C68C54EBDAA9AF331FD4B7C1B8C118C2BCB2D963643580240653522A1A1E42FD8D941C886FB3BD8877803FB959F2A851E9834192C4B93A64F2DF5E268EBC12CDF8E5C0EEE9200 -MD = D9ADDC52ED89932E677510CCCC9F91F7EC4C78475A9CCA6A727F388CAFBAFFD6 - -Len = 1234 -Msg = F1A47FCAE4AF23100EAC7E8CB58A24A00E61B1E668E86EB3391FB1D369E5EEEC2759F39AAF9F2A10EBAE83970E75007F8625B3FC95B9D38E927D5AFC55186F3921E93727E4C38E1535ACCED7F697926AB2221D3B0873667F9DF870F4A6F376EE5E75C0A5DA919FD4EE923A488B7F6A20BE349A06DD19B4C7327ED57A7168129732A3BADAB7A3DF08A186E677838FF49B7E7BE57270F8FDD12EF4C0 -MD = 7CDEE73373ECD20571A7384CE0AA2C16525B70C7D16A9123C9E858F79C0B29B6 - -Len = 1235 -Msg = 9C9BC5FF6E2A46A6DAE4D51E6FB46CBEBFB3E308F00F6BDA289E88FAC4CE4CB51ECB8C9685450226B8AB2B5E567BF49B3D04397AFA383A08185FA86F55DB6FB88ED8467A4BA95F69ACE83C955BAF5E616B1DFC73CE2EF6D5B696AEE81C9D742A8F9699704FAE2FD370740640A822FD2DFDE1C7E156D6D4B9E6AC6EA2F3546ABD60F0841BD49EAA8B8D26CEF0DF273171EC9F20D2E1FFFBE0E9EB00 -MD = A99D55133882D79C8C5F5E98A4CC634314BAEDB5F8EF91CF0138C1E05719028A - -Len = 1236 -Msg = 6BC7AFFE4C66FA084508F7343E698EAE4A74EFE0A4E8FEB2F83AD82C01ABB999D07F6F3082480743D309841E4AC44BEDB69CBC6A082505BCA690BFE52BB67FD9D6CF5C37D981BF8CE5E6B0B7429B4518094DA9604BCC39775D63CB49E2B50C35D12D78C5717142710AA48C7DC4190B2D4C18FE53ED42B9DA9FA71E9700A9BE0B6041733E17313C00FC309655EF4476421E4061F59EB15A70C4FC40 -MD = 389C93D635951862053E77C119E646682A86EA831B309DDC3C2A006E55240DB5 - -Len = 1237 -Msg = 29354E6F76ACA48E55F1B5D3169F02B066277DCFCD00230340F400056852F7AA53DDB2B6329325643F40A5E7AFC06F66D7AE2B2A08F8F142A929D0D21AB8636BFB32528EB928966798EAD25140A6B3FA2DF9024125A013189FC79B43F2C4448BCEC44C6029EA4CD4F758F23515E4FB327367069BCF55515283087F32BAE0A8C5B8F577AF52FEF9E084453CA629DAED5A36454B0BAAFEF0C15CF7A0 -MD = 039FA2458E7D60259192CD93F4191394D2B837FC5F3D137F37CDD0C298CEA38F - -Len = 1238 -Msg = 626F397D0260EAB42C6EF7098A132C01F266B7BF8B931B7DC9B386801DD1F56271B0B45E1C36B7A69C29F53B05827944DECE0D4BF50084FE753A1C471F4C895905FBC35829196B9539A4C395F5F819D37A248AA3C1BC4F42BA4C3B09A5BE323BCDDB0A14E7AFFC2E2E039D69266515727001D97E585155B6B1C5A94B9A1CFBD9B762B38DAFBD956125B9A0FAF437241EDA5349C2D3266DDD1E796C -MD = 0C48A2B73CAB709A7235E602217C99A48283AECE10AA804CB8D1089924D3EA26 - -Len = 1239 -Msg = C8356DFF2E7F57914AAB911BC03DD06FB3A90EC2D10CFD003A28FF8673230ED6B972FEBA869E4F7DBA1F07153582751FBD62D3B7D99236A09A5F0BA4252E35CDCBF87D6B36D40EFDF3EC5A5AFE70014717F2F730C1C4E516908387FECC704E2F17C8E88F58FB4B1D51A17CE63D45CDEC2AFC6F2CD645D63DE0C5D62AC280A75881B00E76E72C43D40840A91AF569398BDAB704ABD85F1DE2C10C76 -MD = 346DD042C2837A3CB10401D71DFDA32E37C968050C67A2E4F48D3C85350E9758 - -Len = 1240 -Msg = 83599D93F5561E821BD01A472386BC2FF4EFBD4AED60D5821E84AAE74D8071029810F5E286F8F17651CD27DA07B1EB4382F754CD1C95268783AD09220F5502840370D494BEB17124220F6AFCE91EC8A0F55231F9652433E5CE3489B727716CF4AEBA7DCDA20CD29AA9A859201253F948DD94395ABA9E3852BD1D60DDA7AE5DC045B283DA006E1CBAD83CC13292A315DB5553305C628DD091146597 -MD = 06425E83E4AF817D735E9962C0CDDCE2CD40A087A6B0AF3599719E415AB9A72A - -Len = 1241 -Msg = DC77D6CC04036F3EADEC0A3F2DB83F877CF24A2AA319A804C018840956F50B3830B8900428BE0505AE0089466A22845952CF8F4192333ECA1F4243434012DC5B833DC514ADA93CCE39AF280C961746E3DE14E5B1AC280911C31498796728DF1CAAD96C4B0C9D907773AF7C86A6A5804B40AB86697FC4BE83E0CB386D14BB872A9276203256285902DB42B05F71050ABC71ADE1E06D37F4950CEF3B00 -MD = 69C14DD722DA8C72A8B7866E0B721A1E6D681EA10A56FC349EB9858C6BFA454F - -Len = 1242 -Msg = D57982D9B0D4B3D9B18117EC323DC1F654ADD71AB06440C77C49E05F110F82AB974B5C22637F6A1BFA579B78DA05A17D5CCDBC2EF464970414779448545EF2410EDBAB5D93FB8E85C6C15C4D5C4182E13A07C8B1CB016A41298E6D6512DB94606F8C843A1F611824BCBBB0461B161B0AE0D6D5B9B80720E10103FB5F2DAA3BC7A16CA73C36234F72C8A5F7441D86DAC1AC3436743C8CF817570C7640 -MD = 51D052389077C2CEC34EF218D89884B2B7B14BB9A662C30282E0AF4ED7AB15E6 - -Len = 1243 -Msg = 162F77C5AEB35AEF23D128AD0AC9685C204176A0893FD8BB45274B35C2D7C9CA4ED1773632C9B2720B751E73ADF5FCB331B9DC4517805457D1C22E59AB1FA4A26FFC5F4A22BA0B1B1D12A047FA81CEFBFEB9EF20300ADF43DFAA4CDC468F17E89179CDB442AB24A61BB693E6EAE09073FD410E7D0DC3553CD8B3EE4212EE3C9F90627A35217EE3A8B0505D688B574CD65B7198101ECC065E3991A520 -MD = D8FFA8E76B47B213DABE7CA3958421240991D245117FAEC08C54426052ACB32F - -Len = 1244 -Msg = 099E4A3C983332023A43028E13F12E85DEEE45A88E8BBB4916729029F86BE3291475178DF24726684F3BCDD166E8214B9342FF80305707F72BDB86005116B9741A8D4F2AA953BAA0294A1759654D24C32C311D0D81F077B9086BBEE226A93E9B906553E32CED52BB92B427840421A5B711CEC2A2D07C1CFEDADE4DD8CE5509039816EB54B5210A45B088E4975E99544B22E2A59F43E767F33B5B05F0 -MD = 16FDFA3159E22F413BC9809BA9122680DBDCA6C77AFB616DB5C608E0AF7B9766 - -Len = 1245 -Msg = 7B9B005E94027DC151F29B0836D4F2E3716E11EC9E1B0875DA9581F3BFF5F412E22AE3D790281F547550BFA6EA2188A976CBCA567C5A5327DE7BDB4229D48C253B0650C3B518E5ABEFA5E1F7E079D38BF18F1A13500105F4D96C4A29002203D18047568FEA183ADBA3C1D06576AB73FE88CE704495204B7B31D40A0C6D09AA6CF65310DCA730A5488DDB0D5EBEB7583D75A75480C0B06C0EB1C48CB0 -MD = A4B2CD5A7151528182B26E3152B825817B7E4E4464416582C61C5D0AF2FA27EB - -Len = 1246 -Msg = 50FCF726597FCF26CDE79CD42D68C338E7E26299D0AE41EB2B87F417409F65C0FAEBDC4C95D52AD3777E774E8BF982C7DB1B3CC1B43BB1298463BFFD061A5DE2162DB8610C747D41E71BC4A49414205B56B1D86FBB81E74039DDA4FBD84316E2BBF7C9F2599D340A2E86CEE58BFEE5D34A684F1858822BEE5F73193DF8C46303D949FA8E962789699C15709C74D702FC96C5A3B82982370788A74BF4 -MD = 79E5D70659283305FBFC9FECAF61430927D4B75780A755BE7B8B6298A1CE5B31 - -Len = 1247 -Msg = 6BBBF4930A96E1A18417FE5A539A36AA9A3F70E055E359091E5ACBCBDACED975DF2BD07B770899C1888EA4623E70CBC0D9CB398EA1FD9BC950F047EDFD478324DB645F7A90F81EA98E38E93A1326558EFA8813FDE52DD073998046A3AA2AE3CC39EECA6012DA5AA8CFF1A4F3E59068EC163C75EB56EEE8838E0E2E03FCA370E54F3ACA668DC5F77677645B7915A52C788EBCC9B731F91CD9A0990834 -MD = B6DDD37E7A739773EF55A1A0C26CAAA9700DC23E79D0171ECF97348BFE37A50D - -Len = 1248 -Msg = 2BE9BF526C9D5A75D565DD11EF63B979D068659C7F026C08BEA4AF161D85A462D80E45040E91F4165C074C43AC661380311A8CBED59CC8E4C4518E80CD2C78AB1CABF66BFF83EAB3A80148550307310950D034A6286C93A1ECE8929E6385C5E3BB6EA8A7C0FB6D6332E320E71CC4EB462A2A62E2BFE08F0CCAD93E61BEDB5DD0B786A728AB666F07E0576D189C92BF9FB20DCA49AC2D3956D47385E2 -MD = E8C329149B075C459E11C8AC1E7E6ACFA51CA981C89EC0768ED79D19F4E484FB - -Len = 1249 -Msg = E5C9D107E19D9BDB989AF870BE40F1B6FA06DB3DD70E741D2F03198DE02E58E2A37203A7E766A8B918836039A2503062AA3D4778D1EA931BDC6E76554FC965584E0497AE75627686E10E50DF6302C2458E087AD4E8F0ADF22538ABBAA431703349BCF5C026C30BAD0F42D93C64D2918167E161A3C8A1848ACE16F56CF5DD5B8E0796ED50805346ED9AB04038E91676C92BCCE7FA74FE258B6D01350C00 -MD = 94FEDB57A10E0681C96D4FE776374534E8D25DB3C704E5A953CF64A05CEE14F2 - -Len = 1250 -Msg = D43686E59F554A3045CE43C0457D8EA84E70AF4F0C8133905C27C85648E6EDCCB1ADDB46AB7E5AF68B2EFD6C95BCBF9281DAECC1191A416CAB872001F347B66C5658F0567EC86D2CAC8EC531F32EBEB8D8CCAB863A30B574F575F227452BB4129C84C6050F693F0EAD880B552CEDB4673AF621AC9678AE17BFE2AA2C940CC54227662130E4ED37020409D308CCF72270F74DA075451339BFF8B27D60C0 -MD = 39E564712898F3A566E4E0DB8E901B62B7BEBB6BE39CC2D6ACB24462AE3DBE77 - -Len = 1251 -Msg = 309D9918CD4DE7ABA6E69619B8C0FAC749D4B96B71A58739AD3E3379DB4E6323ED7A3AB5FB6C8BDE28A8D362A4DF86CF9C418688B06394211A87288F2D3BF7BD60013C0E1AA153B5B94A6E2AF9C3964A561336DD115C74AB25B2A63E4B17B521709A207F41EBA5E412A65FC8CBF1C49D1C927CD92482BF6C2D22BDDE6D8C21DF69A9222BFB4B5BC57E891BE4DFAA41D8B725F7590F5D6A07CD0C0E5220 -MD = FFF2C196F03A48A5456A49461BD70E31A38D7158B57FEED627367922171D8785 - -Len = 1252 -Msg = 556FB9FCEAF608496C7681F31E303E911CF23E3D436EBF7997FE695A567B190409ADDCABFAC6C044E9B3BEBCA670CC42809B930DEC67BDBBF264D13F15250196AD387E0E51A754D3377284B77BAFD740529503BECAFB2399AADA3E7394EE46A997CE3AFB26CC0E8A8D9D616E61B786109A14D1E9414AEAFC8F806553B86194680F4D17F97FF55E35D5894EBE177402BFE5BBD6185C5E05FB4EFED46C90 -MD = 4B76DF51A8AFB4D739E03F86C04145830E5BE458791A5D9FCC5AC5467A8BDFA2 - -Len = 1253 -Msg = E1BB4075E498A327DF0160C8101EF6983BC938D67C47AC3F642A00655914C4A99D7CD0D0D70C81DBA014EC7C8A7350CCF30ECAA24F481E7064C8E9BC8CCF02AA5B93AFEC8DE3966662426C6AA20051CEAE8BC3D04B7801591FBBC6D41C1185C510BD153D51E9CF64F0458BD84E7344C4C5AAD4B2C05C8B9D9416EAEFBC91EA7686B5B5FCBBA9C913F4A06CE26D4F041686A6C800263BC4EE612607E6F8 -MD = 467185AA19E823396BCA00B1DE62A17033811E80C811FB1F1126D2394FADCA7D - -Len = 1254 -Msg = 26E8F3698FD7145A13658E12E46B76144A404387E1FC39AF205532F3A04DCBB5C4C111B6B538B45B66B36E2FC683D2288EF30E5ECC3B557D4849E08008AEC60DCC565AF19C9418C5DBDD68D1727E8D08ACCDB5382F64DC0532B866A6F7CE4E2396FB4E2FC4720B0596DF649F7F9CCD88E95F4B75890945730C60F4FB5D5D6ACB54B463B7A817F241C1B3D09CAD036093588B69A07DE5928FFDBF3768F4 -MD = 5AABAF455DB8C563D1F93A0C117EF9B5840948824042B69B20C8A6D3AE57CB15 - -Len = 1255 -Msg = 8161F4946F076CBAD3E13E8ED4E287CE35F00DAC4E7870E3FBD1F3EEF3C380255FF4A858400B8D035C6BFC6C25D17AD0A5A8D625E1F8F6116A9C5D40CCE992806FD508DFEC50C4841E4D403B788A93BE86F8E3687A939FCC16CB6B826D4025FF572545945EABE4B144D10A669C4B47F368F11093E748C559142E2BA4B007321DCBE166EFFB5C36306FEDD98D98ED5A6F273D56724C8B611B802314EE94 -MD = 68FD32662CAB7A49F0019F1AD7EE3DAAAE8A67013544CE17C08DDCD1A5AD8790 - -Len = 1256 -Msg = CA76D3A12595A817682617006848675547D3E8F50C2210F9AF906C0E7CE50B4460186FE70457A9E879E79FD4D1A688C70A347361C847BA0DD6AA52936EAF8E58A1BE2F5C1C704E20146D366AEB3853BED9DE9BEFE9569AC8AAEA37A9FB7139A1A1A7D5C748605A8DEFB297869EBEDD71D615A5DA23496D11E11ABBB126B206FA0A7797EE7DE117986012D0362DCEF775C2FE145ADA6BDA1CCB326BF644 -MD = C86768F6C349EB323BD82DB19676E10BD8AE9F7057763556BBB6D0B671E60F2A - -Len = 1257 -Msg = F0119C8BC95F23CCBAB4DEF542665D9BFE015AA4619ADE158F1D21FAC3C4F7E3D68E5EBD303F920B017DA561F6AA751235D55FFAF241CA8759E376B0AE60F04AC31A591E3DB1F58BF4850329BE199EE1D6A750792CC3B7839B66C06753ACE50786223E0DD16EAFF479B89BE123C1098D8E6D30607B1FB9792F6D86608FA26A1D9214BD619D614FF4EC326EDFC6BAF44A565061856A6A796C5CCFB021F980 -MD = 18B5D9F50B90CA1B43174C81796B506A3C1A4EB5758A1CABDEF082F4A22535B8 - -Len = 1258 -Msg = 21A57777A8B0B5501280BC7717E54E6B0F8601B8362BD3ACD7C25798FE78A76515B10651F736CDEB08D9AC70C05D3E12BBEC98799C7EA021699D852B4C1EAD48B301BC6C269157422EFFF2B7749CF0D19E2D47F757E6A56BEC71DF86482EAD78E342944114D3D7BE2D381B01066FAE0FB328AF0530CF29A1C2479922BC5E82B7D1108570262E55555391B85A347CB186390D9476247080758013E0ACD080 -MD = B6D197DB0368A20F10D44E6CE0CEA8FC5E3E045CE36F6045E54D131A73D46991 - -Len = 1259 -Msg = 0E7BE48BCB01238A181A4CE2D5F23BE4337E96DDB7CB9504250209886AA050BE6007E594E14E58B64ADE5B9FB8F90C7CCC9B5939B1CAF74174BBE6A554BD40148AE7CA525C4DDA1CF0CFC11812DFF12BE121E388794AE8AFD75615475E9D2C2267F0E332F298D17DB1D597A97DBEDFDC34594E00DC107839A3AF455C1CCA44597A53A314ACCBDEFCA82D123EE53D0B6663BF3395311593B0265F87131020 -MD = CBC3ED192DF1F85248DC1B1C07A7E279E16B5D856BEDDDBB02FEDBAA36AE8337 - -Len = 1260 -Msg = 6C38EFE88285521063F33FE108162D56EB5109EC0DA8AED88EF76AD7B88BF1361D135ECFE67CA1069FDFE1E0DD7A175C0DBDCBC3B3E55388AF3A866AB8ACC756927CAA142E2A4AD6805A616D1100B51E9B1B3AD04708BBFCFE27E4F8BBFAA823A57D127B6FF5359DA704F61F96BB882E6FE33C648D5855C725B092C4E4E0DAABCF6BABB56BE3450C73C3F07A2971E16E1954B6E1D17E92DC5795743FCEA0 -MD = B7C0589555B2E9654B7C07BCB4683115E46FDAD06717CBECBDCA9CDE0C040B8C - -Len = 1261 -Msg = B8BC88E9B1A8DEBA56DD1E9B418D379AA11252E609ED52AB42A67458D87E3F2D60AF36595D8E33E317701CAE5CD58557C20617124068EC55A7096FE49480E625A51E987D73729FC4C531B7346ED8391AA3F0D6F8827ECECBD74C7BECF9373E692FFF01947CC11C92CB619244E0EF3562A96A17030414F44FCC35B2756A667C003C88CCD1AB31992FC659552DA1BCE4F1807B3745C349D3C96B38CA1C93C8 -MD = 9F79B4E6358AA815DB9669FE6BAFAC98BFACC3AF942AD201B5DFEF266AB5E3FA - -Len = 1262 -Msg = 3FD3693A5376B0943D4D99601D92B3C55CA7B3889E02431B7CBEBDB6D7D886BFE7B057819E14764FE39B828D233FE9FF6B7CA010965F8F8777A80393A0B86E61379C26DA68A304D6A47A5DE2C029561CDB4CDA5CB471A84BB7358D8EBCD50521C6693B138348388258A032DB48D067FC0BAAD8266D6A880ED1B8EC9C559C26E97C6C2037D5D51F753604039461E26D4683382BB2EFA5A13E734E2CE90B90 -MD = 36F9D1F4DCC11D0F0C47CBF38F866DBE01908F0F7D1B99428F0FDAB36BA86D8A - -Len = 1263 -Msg = ADAA5A1187FD564FE9FBEAF43E48D41438B609CF80694F3E0872AFC1F172FD18E4D1FFD96B674B4A765A6D1A63827E0ABB708EC776B9458F5EE904501B096F625B7A47E7D6CDE2E19009C5C81DA80194BE8EC613F0E038F8E0D39A92851774729A25F00068660BD25CEF0E7F734056D5972AB36757FE45F55F2768DFA29038127269B46AC68079A26E0CB8C52815E22BB61E32E48A78FDA6A006557D580C -MD = A94E8A80E5F8D206C0132CFA54D0A82AB04F8180C1DE6F26E43C8005FA0E060D - -Len = 1264 -Msg = F76B85DC67421025D64E93096D1D712B7BAF7FB001716F02D33B2160C2C882C310EF13A576B1C2D30EF8F78EF8D2F465007109AAD93F74CB9E7D7BEF7C9590E8AF3B267C89C15DB238138C45833C98CC4A471A7802723EF4C744A853CF80A0C2568DD4ED58A2C9644806F42104CEE53628E5BDF7B63B0B338E931E31B87C24B146C6D040605567CEEF5960DF9E022CB469D4C787F4CBA3C544A1AC91F95F -MD = D97F46F3B7EDBFB16E52BFEC7DBA0815B94D46E4251E48A853EABDF876127714 - -Len = 1265 -Msg = 91440F1C8F7CD08B2FA70D334BA56F12FA0AACA189346291DA0B69F58BF65869DB2CC98FF82D56B4F9EB9106D4CF20AAB00DAC3669DA29944DA8D9D23B797D8D2ACB22E5D0127473E8DDE2EAFF6BE3DAA7FF7FC7D9F8DEEFE2634D8F3071D196AEB24DC1D9CDDF4D865D794BF120CE78B20F06124B656BB7CC5172E87400C50E6C3249E8372240ABF5A8814B66C9C3FFEEF2B71BE2FD0183BBE6DABC95AB00 -MD = 57E9DE53B6E7DA995C630484DE71E699DFE859BEEAE2B6E40FE4E61ABAB0F348 - -Len = 1266 -Msg = 8F66375F8723070CABEEDCAC50B0A986B133E4685F68FA60E36A61EA0042747029DB1E7672EFD41833674EA9D29E30BCAEBF74E23D7C715B9963F78489692C3EFBA4116CF30193E74926B1FF7A2C6465928EAB794496D46101F45D26BF1186FC66CE159AC50A3E2E379A7981DC6419F29F7E63FAC2751E696C97403BE37C6B01B34557DFEE5B68FFAF22071F0466576016334CFEB6CA53FC40BB1C5DAC9CC0 -MD = 5C41BBBA8E209F9E39D08DE0BAE7BD96D539E531075033402700D682FF554A2B - -Len = 1267 -Msg = 0D030E023E6C3B59E25BAF6023F1CF3657C566FA66C0F8BCFCD04F3163AFF6C2DBA0661132FA477F3D32C514F53F8E89B316DE84AA55A4AB38C33084354944EA9AFFCB8727AED5675AFC52EE6201961C15B28B0CD38948AEEE51F6E17C172946BC1B51ADD5316C30703CDFDD7FF87A7612CD576E7FD4956C0283AD12E13A4FB548509526A13B6A867353AE959D4E70B31959097BA28E25FD04358EBC568640 -MD = 72330B3013E4732F75520076320D9B08F6FAB2CF7543360236FCFC40CBB45256 - -Len = 1268 -Msg = 99883206EEFD96B8ABCCEFD8872185AF185079F568314B0AAF55D2A5291A5B1AB29B9D25839A369F0260D55E29E2B60AE448393BFCBF18F8D091A8C1A0739F25EB2748C7A45BE8F88C9414745CF3C236A40BB1AEE8A85B53BD088684BF4E7DD1A9370C1BDEA575886295675A01D03FC06A7E01100F03436E5A3FC224DFDC6D9E8A00345AE14FCFBAEAF428A11AE4B4BE9B839B50CA80843435ADBB964A4F70 -MD = 1018589F343282FD3ECAAB843A2A3D7C9118D4AA1C15760B82C83CDA6051850A - -Len = 1269 -Msg = A6B3EEC583A09261D745849CD236679E2F9795123478BF76245F5E61F00EF6FB32497499B967CD550126BE3D88B4BBDB55EDF14AB745654B70EEEFA79A26FF00B6BD86DF619D53F72DE374965F277BFD87CFFC9124CDBE422A2AEE0A784D705566B78239A66D321F4FCA6DC11DC553D26C7F57EE05A86166D4E073BFE54DC6525E83F739C70DD4CF4CD07000CB595DDFA749D9D1D5D3CFC0A4CA2F5ECC7528 -MD = F2A16610C2A7E43E7CD7F8EC13DC8D92CD2565573E71A34FF6E614CC8888293D - -Len = 1270 -Msg = 817F2D641D62B9A54D78DA451D7743A234B424D1AA73D173306C0F66D78970A8BC13C87A9BB24071B0BD9F5B5512A7146C4EEE5BACE25AE3B9F25038592EEDC07B8CCF0FA262EC2B091C0CB15557E5A2C6F9AFB264662417E570C0CF37A770B963021A60E7D5CA2C5BBD8EA1E01C95408CFA335616F253A489F89DB1B49CCF1AC66AD4D7D4CCFEC6719F8C0B1CFDB40CAF5DB8BE02E32B516EE89682BB6ABC -MD = 97C8A266ACE8415007116C3047BD7EAF5B8C06ED03C05492A67CB7E90976F69D - -Len = 1271 -Msg = 825BBFF42A57069513C6DE0DBD31CFB7C114E42F8011892F9C53E41DED542F88051A3219007B85C08DF9F83E13B4B836B83A0E39AB9DED55B4026B85A0789E166B27B94D64938F9997BABAF6DB2C0DB2C680FE7D094708F8A6309F4AF8CA4F835A09289A6BA63697D87C730BCC3794FA3CD5DE836E64E5C4DBFB024B9C230C6E3645559F38FB97026DFA542E04A5DD50876FD844E95AF2E3CD2C9C3F8551A4 -MD = EF6DACA1430B8693CB3CC255381CF87009ED8D612EFB406BB473C6DC24B7736F - -Len = 1272 -Msg = 25B8C9C032EA6BCD733FFC8718FBB2A503A4EA8F71DEA1176189F694304F0FF68E862A8197B839957549EF243A5279FC2646BD4C009B6D1EDEBF24738197ABB4C992F6B1DC9BA891F570879ACCD5A6B18691A93C7D0A8D38F95B639C1DAEB48C4C2F15CCF5B9D508F8333C32DE78781B41850F261B855C4BEBCC125A380C54D501C5D3BD07E6B52102116088E53D76583B0161E2A58D0778F091206AABD5A1 -MD = 51D08E00AAA252812D873357107616055B1B8C5FB2AC7917D0F901DFB01FAC47 - -Len = 1273 -Msg = 53171F51D758037D43E75BC46D0160792E060C1F61A78922CC13BE9CA84FC9227404FFE6A3B054AFE5AF13D62DE8E6E5CF6A428B794CD6EEA56DE923DF662D54C8ECB3ABCC0E09A31A66B7ED02DC03D9B55AE44872D51A2A4F95756B9B611B87DB1757389F718BF0C413419C46BB9FBA8E7266FE2C438F8A4D8377F220B71C4C0CF3E7DBA8471CCD615BE0F49E97448BD2748FFCB47C46A508809E72F8CECF00 -MD = 7F3D544B3730D8CB835D0FCA2749555886FBDF2EC77FDA6EC1E50C81AC3A01B3 - -Len = 1274 -Msg = 8B766DA40380903F6A333AA1DD549144FCA246E2136252A5831859711F08BD02B449A1F85ADE21941C81CF5C70AE27DF71F797C3F3991BF7CBF64D5FE5E228E03A9BA275B6BA6B55C847D3E3EA01C011C2D623A712615D5804DAA36527174814C711623346A7B2E50A50C1D906AD2CD1345CC23E2A08161F027DEF1AF127A71A43D19C19034D99F3BFDB4579486E61134D84BAA14000A32E74B1CEA54969F480 -MD = ECDDCB7FFC7E2F01DFE5F8E5E3B57044DCBB1A9E3DF75D4739927ECB9D4B066A - -Len = 1275 -Msg = DEA895DDD527F9F680EB69D0881BC6308044D98E2A407C6ADC64DA9D8DE14494844063DF64F94EA19D94C7E5BBC528E3078E1900A92D2F8E44D15AB097C9974B10665D3235C4BB08D9E6C6DC5DCB281EE116A29B345DB2DAC736160E772D609E2F091B166F8A09078BE95656A4B6F17DA17DEA7A7D51CF41F318690E566F0501106FF3CE7EE0A0D2327202B23CE11D91F6BB5C873A41D3BE4AB4F6DD30D6D660 -MD = F31545DC17EB59AAF37822B6662734186D83586C9AA52C97AB7D2BF77A8E0886 - -Len = 1276 -Msg = C927E69503AE94F153360DC508B0E77682465E5B8365953A2C9626E2DCE4D875FAF1E3F3ADD70E34AA7EA6EA175D79A9E700D652BE8B7759707306D10FC33D1528D70D389E6ED9B8E0F8D478ACFE5BE223D4B791FED6AE65F363EDF4186FB088F69CDF394D74BF53AC465A3541432C41C7666B653858A7E6D06B0985C0F7B1176D1129DD1146357F847289A439E543E480F932B8602B3AFC754F540361A61370 -MD = 14A822E41ACFA962CC06FFA6AFFDBC3E9DFEDDFEB592BCE1F2C023D38F0D3625 - -Len = 1277 -Msg = 32419664499B391A213850C12E86F4FBA5B2BF3DADB0DC65D4EE9C9AD2710FC1419B4D4E9B85205E51BFD3CC0F6EA075C14DFCD1BD6800ED644FFB9EF737F1FAF9FB77E5621A5E15AF7F93D04E6D2DDABD71A032BE5BAFD0D0976D0DDB54DCBE79F192580BABEBF54F2EB6F421CE60BF939FCB8F237289A107B329C5F0426DE9C32303DAF98F3AF5F87C5A44EDD1083C6A2B8C045E8FD65B318304823C313400 -MD = 63F4E5D3E1189ADCCC0C819CCF529A9F0DC9B05B7F73335F1749BCB4991174CA - -Len = 1278 -Msg = 470E65B3F6A5460C9704053896F3DC638C1D735F393855B28A4F5A76FC5A419563845B553EEB30E9057D777FD2751BD6D7863E7D881DA2C2698961396ABE2518A64CB8BAA1CAF73B8B5AFD9D42CF071973A9904511C81164D509F3CB7A4EDD89C7F79A6761E9CF2A600FED47EB4A225310544E0CA41B1D8C9649905324EE0BEE1A5AFB3F1B7D9A2CFCDC8B52CE611B10B088EFC0991DA73A7845964BC83EB794 -MD = BC4A2C7370C15FB047404839EF4392DD1E24FFD60FEEDE3C5B3D1797D88E7B74 - -Len = 1279 -Msg = A4E9FA020BA2E03DB8678FB9F502FCE8E58EEC36CBAD94756E5566DEA5681EB48381C5DF545029B435F7208C69ECC279E993F56F808D59961C9822471A04F501EFABE78236B7D1D759F6D227F65CBBABA66C5B81FB88B6DF218BBA89024E4558719F005BCACC96FDCC4DBC2D4FA417DF849D96E3D0F4778FE2E20864DC058563527ACBC197BF04B692CE00CA4339A8B21745D3B54B88C22727287C63C68EAEFE -MD = 770C3E4F43B3B46A5457F408CD3589027D490847A5104632106F6FA98F549D5C - -Len = 1280 -Msg = 21CFDC2A7CCB7F331B3D2EEFFF37E48AD9FA9C788C3F3C200E0173D99963E1CBCA93623B264E920394AE48BB4C3A5BB96FFBC8F0E53F30E22956ADABC2765F57FB761E147ECBF8567533DB6E50C8A1F894310A94EDF806DD8CA6A0E141C0FA7C9FAE6C6AE65F18C93A8529E6E5B553BF55F25BE2E80A9882BD37F145FECBEB3D447A3C4E46C21524CC55CDD62F521AB92A8BA72B897996C49BB273198B7B1C9E -MD = C6A188A6BDACA4DD7B1BC3E41019AFE93473063F932C166E3242B7F52A3C6F8E - -Len = 1281 -Msg = EFDFD54747AFC74789E3585D271BBFBFD2B45AB16DE6F960B8176F3E18358F106B148F585144020D6E055A35572EB7AEA1D4E8662340FD641758DF09DC5D7BD6058A2679076CF8AFD9440F4EEF8AB76AB23E2A9801EBD66190B742B0EDA0DB513E8B34133CAAD28D9A74E1B3F0A44622B5FECC6D88ADCB47BB590C8F2078270576FA8DEFAA7473AB7BE4DDFF9142DDA4701E2FBF30B0072BBD0E42DC761A5A1900 -MD = 8CB50A5C0304AD051BFCF4134FC867371EC793FA4C34203D5D522E4EA68BE5DD - -Len = 1282 -Msg = 835C2A951B9770857A5BC36CA40428294E8A7F3EE5953CF7D612349B7BF4C2CA54FDC48D22206E0564C9E42C5FEFB1D799BFCA4A90ADB6CDE24C4B5BF58230F85086EA86C5C7A3A58D2DF7BD7A50EE51812AB957F075D60316381C99D24121F24E3089190F5A64995A898D25DCAF6ED422AD5A11046C156FD2A9B3A901FFE9E86B3A434B9EF8E132D1CFAAA7DC0EB6BF36974FB02655D9FF7D2E6806FAD8F56240 -MD = 75389648CCA850262930B6563CA0B85F2982869CBD83B7602367AC2389A8D105 - -Len = 1283 -Msg = 487BF06ACA4F8CCB9FBE64BED71AA95E8254DCCBCA59A391977CA1CB657D7772C8997A9513D46C6560A3B3208DFDEEF161F1791BBE78762669D6035654872DE662FB0E35507C3C47F1CD7C4FC48F429B610223932065724BC8127C938CFC687175E8753203C8DFAC4A45ACA459E6CFC1C42F9E686418F9803438875EE94A99AE0C73E65A4CDB070417A437734BC89A46B44A27F305CBB693299D5A80C8BD426900 -MD = 8058250E36FEF7FFB46B8606753CC33B00222D34F230F5A51C8693E9B07E1B5D - -Len = 1284 -Msg = FDD4EA48CA09D3A4876ADAC2A22D6E016C6CA18A35ADE17DD52466242249EB8937B13129E6CC5CB7AF48307A892EF40B190BEC41523CF0E6EDC72215B7B33E6FBDAF475E0E2FA0E863E83727FD0256A0F943646286BECA53D8A1A0117E13D2D46376340873A608ACA2B3532A516B9CDFD23A78AF03BD47EBDBEE97AC9A536AFF8B494E1FC662E5E1A4DD64C284C16B510DCA8AEA7D74E5CBAC8BB61DB5A0DAEA10 -MD = A434DFFE8E2A2C18799DC7CE32A277F34498D442C8A25C992E28CDC83DE2A324 - -Len = 1285 -Msg = 97819B95462CDC009A37EF3C6A91169E111753FECD21364FFBF95987EA73825771740DF970A5E0C68015E819CB4670C752EADE35A1876638BAE3B7FA7A5441638F52B092CBB026A2C16B60FAEC950D41A35F2CA4EF4D6154FDC4EA58CC617E783EBEBCD55E72E05DED2D34D68EC80CD3A1AEBBD053331A8C9DA25028C0DCCC2B1FAC93B4740BA94B3B8F066EA9C666DF5F083BF864CE9E0E54CABF10A11D1EF050 -MD = A68B1B174409F96A775FA94AD5E3BF9A649CCFDD26930E94567921950F854797 - -Len = 1286 -Msg = 597550EC49C64E81F38314DE7A825B56D0ED8B801394B4F6701100C3AB8BE122D124F7DACA5187DA9A1BB8AB905031CEDA2AC1F0B4644CE9CA283F65236D43E8709951B18C17D27CA45BA90B8EE84CEFE8E73EB209446D75DB554882A6DC0AC284B7A5093975F5B10409749BED474E92E19C7B479AB17B254BD9B9D3A35F0CC912CCE433BE6092A89CBC14C1F8D5EB76F370683039000D757FF5E06BA4A8820D20 -MD = 5A9EC537E73B7A07C81E14E44446212A47D5C4EEEABF4DB03A60A1B33EE56475 - -Len = 1287 -Msg = E79F049F5F8FCABD20CF328EB4FFA20D4AD500FDEC6DCB9692CD294E1DC54513E789D4D76D6DD2B17542E131826A6AB20ECF7BFCE476334F6540307C99FC76CB85AD49442B36B25F0FC81279BB2AB0B27846BCB7E9038092EBC3F6E0011746ED397D8CE77B9CA67AAC8F01DCEA90352FCD8893C276BF9DBB76C78B5E217063CD8930314A5B96D0641D82182E2EA67E7FDE3DEC6C13B75DC65659B15E56E75B768E -MD = 9B3BCCBFCD1FB4C5EE4F4634E6519BFAED8C97A1A99B91B99AC60672A04C09F5 - -Len = 1288 -Msg = 4E452BA42127DCC956EF4F8F35DD68CB225FB73B5BC7E1EC5A898BBA2931563E74FAFF3B67314F241EC49F4A7061E3BD0213AE826BAB380F1F14FAAB8B0EFDDD5FD1BB49373853A08F30553D5A55CCBBB8153DE4704F29CA2BDEEF0419468E05DD51557CCC80C0A96190BBCC4D77ECFF21C66BDF486459D427F986410F883A80A5BCC32C20F0478BB9A97A126FC5F95451E40F292A4614930D054C851ACD019CCF -MD = 2B31FBC565110110011AB2C8F6CC3DA8FB55D41B1AE5E04310283F207D39682D - -Len = 1289 -Msg = 8AD7F2067E4BDC72F3C66DEAF459D1D15323EF79004735603069E1546806AA3783BD572E76EC472D215794537815ECE3213DE792C359B9EBD678CD22772C73708D3E9F83C3F6EC5681F96100365383AC1FD38BAB1A777F48F267EB877604DD8C3E9A27A4E42392858268E8215175ED1C9FA7F5FCD2887BE6658D804FEB5DAAC79C6DF26B90737C2CF48F3FBD0D6D87BF51C0925658BFBB91284C9158AA327BD66880 -MD = 8779EA62C78E99778D2A7EAB66F9B1352791311506D9643270FB683F9FE349D1 - -Len = 1290 -Msg = 3C48158E1B2C890D8BAE91F9610D7E7CC3ADCF77FD18FED0F1C121D11234674C700B5545DE6CE4713B7C3FB79E20F11E3A709EFD942D9271B6FE0E5CB600D5ABDF178D27E37E9474EBDBCCBB3DE7C0F499E4E8CDC8FBB9D845A1E6DD89A0C28CEEE5CC74D5F90A041D4BAD61018DC1866543FFF1C09694F5717D2A2B876D397F7542D2A35776FFFFBC2B39A53AB06DF9E7B7E8C9F339495C8F31C5227B4DA8549540 -MD = 222732FD7242393C0123963E3DFA7F9E9ADF9FEFF687817E5F7B9D3199C82B34 - -Len = 1291 -Msg = 4812A05C8906BD360455A99F2F968B8674591A55F7213CA7C5ED298E3B199D278BFBE27D29C2372B94648DFAC050CA869F875CD7779958FF3815402050ECF110AD4FB2FCA4622E13CDEF51F80526D8E3E7149E7A8E8874E0ED8B612585DE2C14546A2AF86B8CD892EC9D0C222B66E4037D417880FE07F25C8AC5E4BC02F3CF2DA743ED72EF243791E7927E3EF0DCA6258DE98A700AE53450D57EB86554494FEEBF80 -MD = C810050318288BCCBA62038C17153BE2E76B0BD04F9C7D243D8131680A754764 - -Len = 1292 -Msg = 433DD44D7C672F2E15670086DB548C15B30B92219C8925685FFC5D97EB4EEAD9A76A613C382A399192CA8E6EBF31743E279C71BDB749190EC136268BC008856C03398AE0DA550E859F47169E88F950A597F0560336D7E5C58BFA20C0E0B57DE4B902C6ED1E99868E2A48FEA544DF47539B215E9E1DF268F0FCD4DE3215D1A8AC4C215D896B041FA24C0F8639AE2A6D67D1AD31BA0D1A1DBE783FECD3B49A1EB3C460 -MD = 778E1C21C34E4310C2CECDD92CDCAA9FE798EE528BAEC2CA2C4DBAD67A93CC4E - -Len = 1293 -Msg = 3C2796DAE592507DC2AE56411DD6295B8517F0F009CEF9ED8C7D52024A4D6744916935ACACCE820A698E837B51C96D79501EE3662FE918F441CCAF82F00F6D0DAC0EC0F900E50A36BB93DEE19C319757D39B46866590F80D451681390199E030472968BC6616E657781EAE0F4B97EEC0995BC37BB7CC448A7FE441D05B70E86E5DA8C7854ABB45318C6DD83DD99A94CDA9F3B82B62F1962730E1CCE1F7386CF1B970 -MD = 5CDA8D0FE4FD02F79A18EDAC0270CCD426CD4F66FCA5A65C6C814030D0452463 - -Len = 1294 -Msg = CAE6C210EEA071097DD53581E47239AF612213DB39225EC8C03D62D3F1BAE63D69B0826F9FDB540714A11D84E43786D4E1F984677E30280E4EA2878E424D86ECF3EAA986F08CC24145B333476877B0072660A3412CE92AF94A4150A98AD00D3008A8B78A00222530DD797E020EB259D25586B905FDBF7CFF103B972ACE04BE42B43CA538CB426515A7A6F86E27DB0D8D5D0E2F61B103D842D09928F4C56F59CBA0E8 -MD = D7DEF3EB236871D10A5B735965C3CC91E926998676284FE60266846AFF186F47 - -Len = 1295 -Msg = 2022A89E86B267A920CF6E6BA856A8542B9DF1CF736F0A0B3ACCC09BFBED6F04870017261A29DA12E61FFBDD68F7D55D034CEC90A1A31AAA69149D185356BEFD2D592E8126462142AC330D83075AC661B46A73BF5FDF0595B3E311BE13140C4BD041E1713689A7FAF7F210B06710917BC79A0A739E04B09BD76BDFA9412E39050137D39025DEA5A1264DE08780A53C4130AA89BC024CF1DE63239EEAA8104527EE4C -MD = B9E87F09DD5E005B9D6C797C7400428B786772A9297EEF107846C92F615E4749 - -Len = 1296 -Msg = FA85671DF7DADF99A6FFEE97A3AB9991671F5629195049880497487867A6C446B60087FAC9A0F2FCC8E3B24E97E42345B93B5F7D3691829D3F8CCD4BB36411B85FC2328EB0C51CB3151F70860AD3246CE0623A8DC8B3C49F958F8690F8E3860E71EB2B1479A5CEA0B3F8BEFD87ACAF5362435EAECCB52F38617BC6C5C2C6E269EAD1FBD69E941D4AD2012DA2C5B21BCFBF98E4A77AB2AF1F3FDA3233F046D38F1DC8 -MD = 1351F5DBA46098B9A773381D85D52FAD491B3A82AF9107F173DB81FB35ED91D2 - -Len = 1297 -Msg = B11CF575F6678B0A418851761D3D2940DEC21E57314C0C8DCAF7CC51F3543C7EA3238F5BFB65C254F3D8F01C560CB9F5DFF6FD2D87FED5F2FB2C8A3DFFB2B7369709342F80BCCA077202151499F08FAAECEA4F6F07E85763FEEF5E062E4E6BA827AFFD278FBBA7F4FE90C748B582694E5A80D1561D5518343D0B1F88FDF6C61CD829D147D692AB9030F0712513259A5F73F37995B4CD923E815E95A9D2FE35E8293D00 -MD = A4627AE4AFE8E33AC70B96011EFD81E69D2C325736327EB6CED4D9CA600E9C04 - -Len = 1298 -Msg = 6AD2B1B7D7D8F12D7ED616E464F7DEC1E64CDEBD637FF3DF232AF9ED5C810065F4CD00B1B75657F1089E185F3DB5F8F3467F685100697ED7667A7FB87871BCF8B936E05F99073CFF15A36CAF3BEBD22A9AF18113970B5B0777F643A56DDB5ECA4AD3E14E994C6D4D0CE43B8489C46097514339F12C4327EB8232E1BD929BDF1B798E71651D841EADC34817F2F6917DC5AC9D54BFB4A45E252BCD4039D71702F9AEE140 -MD = 14EF4061E4941A1A5C3883E6299031698C465D1E131AA66D7879B82279A95F2D - -Len = 1299 -Msg = 5662FA185A69C135AE9BF1BC3031A8EF17E3FD3595D78C768DC7318C43F2BF158DB5615BD5D87EE05475233C836CDB687AA09D63951EE5F2AF339B145DEE7C1F07A36784B469836C7B19C61BE08D64D996155E7B6B40D3DCB28E68A6C8BC0F5C8EA240A6AEAF719A061DEABDF819CCBEC87B31159716B193522F68AF57F7CC376A57FC926AB35E942F54D1F3843349071DD24E1D59C860ABA71CFE11C1462C8A954DA0 -MD = 340608E934DDFE9117DC4A6BD9F1C46A775B87069A015EFAC21C7209EA8712C6 - -Len = 1300 -Msg = 7779B3E263816A8F9F86D7CEB0DE612784D0CFDF4C9A54E8D6F7959AF5297F46F0E7528B64D24A7647232F4A28998F57FCC61E9DD78A678EE8F0BC5E331E2640A98DCA85D4E2E498AF62508A7A2511EC20AAECFFA8D6F26659789FE36CD6D33568C0AD6086060985E3A8E992EABD83216AC1F5D267BCB805AEF0E359CB65E69730473FE00D5DC7758EEE979077DD67A2BE990B4E242C2790574B17FCC6440086A22A60 -MD = 0D1A12F25A13179BA7502F56E5E2DC0873843C6CAF2F554A00690F6BA26CE325 - -Len = 1301 -Msg = 7FC8C0CC3D01FBE25FFF8C68B48A22805582D1697A4258874DD185CE20E3B1206AA69A83FED342ABF1ACC0BB480029D9C899A929E9A3E12072318CF2905FF97206A3F28409E309C2AF4529F212C9AA5030FE357E2D6C697FEC3763959DCCD61E295BE47CD76C4F1A9075E178C8D5ED01A3232422BD5AAF7DCEA80696367E5908EDEC837A7B25D600A9A8F9FE9507513CB8B1F283FF5FCF41A0AF18C7A121726C4EEEB8 -MD = 6067E9666EC620C4EB862597DC0C9508964F5DC517F3BE18A34AB435FDD82494 - -Len = 1302 -Msg = 5F9C4BF48853C04ACD6E4DF5D3058623089C466CE9D8DB0F56E8DF97E6EED8A77D848BF7B3D5B7E561BD745424829328420387B2951BCED984D59764443C3A8DE197BD5CF090958277B6B609C2AF771FAD8053DC2CADA33FA3E177592F3E975B3114D5C87AB3734D7E9CF5A4668AF60CB84202949115DEE795BC195E54AA3B0073172EDAFF954D46858BE26A174D92AD5938870FF1D5612049508F5FEBCA5998714F7C -MD = FF3C87A0EDE1A1D8AE8E2C894E073FA4184AA4255777B18784C7B4AFA366264D - -Len = 1303 -Msg = DFF4935452139DBF9E54D1BBDF61EDF88B12270DDA0E8AD766053B91B9343ECFBD793093D5FBA674DB77C92C42740E76C95CB72DE88F817C174E43A28EE12567E79462F3960FDF27B0B2D03A008C7C19943C7435338BC701E14ABBF8A783E505637425AD6139922DECA4524263ABED9D384EFD62A1A82C4788263A19A931A98AD9698DF7706128663629D67497C60489356FCBA61662D55A5831B7F1A64B49D479CA26 -MD = D01E62CF125201E7D22F21109700DF010818832B5EECCB77DEA342E695652CAD - -Len = 1304 -Msg = E90847AE6797FBC0B6B36D6E588C0A743D725788CA50B6D792352EA8294F5BA654A15366B8E1B288D84F5178240827975A763BC45C7B0430E8A559DF4488505E009C63DA994F1403F407958203CEBB6E37D89C94A5EACF6039A327F6C4DBBC7A2A307D976AA39E41AF6537243FC218DFA6AB4DD817B6A397DF5CA69107A9198799ED248641B63B42CB4C29BFDD7975AC96EDFC274AC562D0474C60347A078CE4C25E88 -MD = DFFC700F3E4D84D9131CBB1F98FB843DBAFCB2EF94A52E89D204D431451A3331 - -Len = 1305 -Msg = 9471390C1E87C0B03050DEE02D4F9B4ECBBE43981BF41F7EED9B38E309999536E4C550CF4BB9CC80A585F546CC25726B7041BFDB5FCD1DF123236064A297C11862CA1B378BA81B52F179FAD165F1E3D9EB32C53D2BAA5C4EE1380B8E757E288EA55BA911A1F1EA72A2E7D1A3B92E284966D316F22D4D0065AAD3B1743D47533CE8B362E26286C70C61997B3E4560CE6FD84384DABE495216ABA7DE1013147FA81688C900 -MD = 8347CE79088DCFA00BE7A0A9F140D38E50A0DCF310FD51761C85F36BD4B0C1A3 - -Len = 1306 -Msg = 71ABD048E4D533B8C8DAA416C8ACBD4D70EA10EC8F0DFFDCD1244CACA21E8C1258ECCF53763DB6FDD1AD92A6968767E5A03BBADEC5CCE37762A2C6F7697F537BBD2651FE372A9900D957ED2F60BF62A8407F1AA5F18600C0575A3FC10CAB9B23ACB86ECF40E83D8E111FAE6B76F940FE8173071D8842981886E3FC86C4AD30654AA086C110562B50A2F7292409F91131A63E3617591A4AB8AD11512C0449A00E35FC2300 -MD = FEA386D2232F237D42CA19019828608864570687C2229D13254329C7A434B4B8 - -Len = 1307 -Msg = 96B1EB63101ACB4E8D4B1F567AE85F344115D62A2BA9A3A75FF2B203446862B10296625C87ACF3D14BB1928B3FFF49E137B9458713C11950E0167586BCFF8FEAEC9E54B6DDAD31DEAA4B987A5BB5642CC224670B8F685D44A4E251A824295F6382A8C303FC85DCD5A55B6974F2DBAFB05A4A46C79A51407CDA912E5A09D4040ACD7DBDA7B0F1B57D733B26EDBC77B977420C3477D5E06B4A112FFE8E3C275C0D0C516D80 -MD = F94E744C925B69537B7A9A8F427C621390FC2001B93DB8F83601E5831ADC0F01 - -Len = 1308 -Msg = 88DD2CB6A0A2FDA530FEBA6B06B37412BEBBB69BA3FA198052379BC6140395604ADF13345B3E313B04D2CDF8FB718E3BF36267C5E209EF98046C3812BFF94D1870B7BF302C004889452FD3C4A2CED2AEFC848878ABF70587200AC447F8E6C2C8BEA5C5CB72AB7BF4294208A7234C23DF5C963DC6F530BDCA1337A49B760508CFF20927FE64E68BF6A558464B1897AE65EB18C5091734BC8E1AFD63814F8990C58193FDA0 -MD = 7C65788545FD7BD14D73DF831EC1D7AB6434E2E0E6AA21D39A1C202097197B42 - -Len = 1309 -Msg = FA163114DB716206F3C7F7BE954FD93043A2D74484E53F510396F69CC74DF96D5A3A1BA46AE5D7B24529C655BDEC87274B94FC52A7857A6F3E888FBB20EE286EE717FECBACC5462DAE1FFFA610ABF9605F2D4494ABBE3B7F03A2CA857B9EDF686A2E9D28AC7B6F582E0E2AB5D32D986B7B39270B9D45EB9F34A443B3CC2E5A5EC2966DF1B6FED07FC9B1C357A84BF9D7F61F5B65C93B696234F953F8C074DD28DF4749C8 -MD = 332E3A3CE09CA1AE9616BFA4824B081DA7891D0B7D6AD90398BAC4294049C266 - -Len = 1310 -Msg = 20C6506D220F6F7DC38280C9B74ED7EAF33462452729FE54F74C5A1D2F664A80C6D93BE893AD2F49A332D88E42D0367FA52A420FD2E78D039323AA19EEFD069C0FE3AEEB261FC7F6060B597BEF88DCF08F2441B74DF23DA1111117CBDF9D18F9EE0485EEB25E980944A0449F5C7CD7D3BE8E6A9CC44D435A4CE4512FB11FA594809C9CFD9B88E6020F5282D15AAF9968DB4A49DE99F6081E2953FB489D6A6D437F207D50 -MD = B2EE2A91DDFFB16776F5067DF412073A431AF6774BCE22778877FC5C47F793C7 - -Len = 1311 -Msg = A92F1321F39DB5C4DB733D4066E3E4B0E7D21CEC0BC7E2A056AF5EF322FC41B1F8E2ABA2AEE1D3989F2E4FDD42E03BB7FCD2575EE6A1C5A8CFE9C24ED165E3F71EBE9AE5998F12A058CBDFBBBEEFA10DA4822AF880C222707A72D47A376E95088EC09B1CACB895F75F425D04DC72D507CBFB7799784A1D0C2881AB675896442CA424B55F6577E856A1A3C960CBA3D455066AB5284A40ADDB1F3B9BE1A77CEC192B75D108 -MD = EE36E145922E88260D7D94829726DB8F1850D813CF1D2FC4E8F33FC3ED115576 - -Len = 1312 -Msg = F6D5C2B6C93954FC627602C00C4CA9A7D3ED12B27173F0B2C9B0E4A5939398A665E67E69D0B12FB7E4CEB253E8083D1CEB724AC07F009F094E42F2D6F2129489E846EAFF0700A8D4453EF453A3EDDC18F408C77A83275617FABC4EA3A2833AA73406C0E966276079D38E8E38539A70E194CC5513AAA457C699383FD1900B1E72BDFB835D1FD321B37BA80549B078A49EA08152869A918CA57F5B54ED71E4FD3AC5C06729 -MD = 26726B52242EF8ECF4C66AED9C4B46BF6F5D87044A0B99D4E4AF47DC360B9B0E - -Len = 1313 -Msg = 9961309EE2294A79F63F67E15FA0F9B64371A52A33857230E8353C3131458CB573CA7B42C62A945E44DDA553DDC4F830305FDB11B39F61F6DC7A77F45D8A78A1DE5E444871850DB3D77A5FA22664D003CF58CF270EA826D875DB95860A47E057E8E985C91BFC850B0FD10286D7EAFABF60D43591C1EF72200BCD620D9C823D2B571C79A0F735F7130C8EEB485F0AD15F3C3FCDE12B6F903568263820E09FC596A98E4CDD00 -MD = B701884BBBEDAFB4C629F5CF7150BAC2BDA13A435DBBEF90043AB7717ACF4908 - -Len = 1314 -Msg = D7FA17AAC404782878C2D2699B8FBF799081144D736007CEB5D26AE1E8FBCC91FFB451FE0ACD54FA46FAD5015F6E054B5FDBB1156839B2ABAC25175E305E7A5B2290C095CE6DEBA98AE8FA42EF2A55570AC1F9D8AFBA87C7D164DAB421BE235EE4E20969C3601CB5F553B800308EA4F0AFB4F15B66F24AF0658FF64831E1AB34105ACA3150CF5A263EC55D0E6A7727BED78FA74FA5FEE2763C0E3DB49D7E529CAA85C52880 -MD = 942BD7D40697681FF8E6EC5FDF4249BD78572CA62D430768949454420B898964 - -Len = 1315 -Msg = AC37BCD48E5439D0E943E371F5BC1898A4E012238AE77D9B58A3E0009992C4A133213FD26CCFD44E55126B853300E3C55585F1CB273E6A47374481AACE9609AB76D8F11C123A7CA069E74826B82E15304CD01958769BC1118EA86F911CEEFB9EBE136B2A07FBCE3B54D86A9D8FDA25CCF6B51181FD37DCCF5814EA3BE8A93459EED41FF29851518894536B3CD6D0FBF2346FBA2F9D832CF694E9BF4E901ACF66558972A2C0 -MD = 455DA2A607499504054A57B78CC3779A2DFD2BC6B8B1F1F95EE69D93419336AD - -Len = 1316 -Msg = DF7CE9796053F5F36763BA2245F6627DD1F55566D4131D5884E68E74AE069929F606FCD502614D0D2D426A3D462962E779B9A22426C97406ED169719AA2E81E47E68A361D8D0AD192A27262074E872D2ABAC6558795DF2DA248CCED42D2C81E90154E010416CF9A20F53F7CA80967D888B0935F5747ED74B10AEA4A3403033C7BB2819C65FB91FFA65CBA3165D38A0881BFC2EF576890AEF8A988FB0179C38545C357FE290 -MD = 6ACF95AE58F0EEC20B1808E4D51A41561DBEEB1ED6F051D77EDF27B317C3583A - -Len = 1317 -Msg = AE8640B2496BAB96E5B8011A948B207A656B1B78CD05DC6B7CF47119C742B5277837765B9250CA580788441441318E181960FB6C429FAA217C4937EB1B4DABA073A2655EB4DB6E7075E5E3BE85CEC13C5BC50CE7641CA251D617D47F86F10E8B3F6E84C17E0704BE08C6D3DA01CF21D492576E86AA1A0450FCCEA682966E00E5B460CC3FEE46075924CAA941636BB5B0759031F38C067429FBEF3956B05F911D8AE0405CC0 -MD = A54C3BBA794874181486F5ACEED0219A9CB130CB09A3E41F030DFA194F39E881 - -Len = 1318 -Msg = E13B3481EC450F9C4E1BE94348D4A727EA03FF80FECBF0873BBEFAA88A0CF4AF1FCEA38BF55218710AD8C01703797D22AB1C957D4B6552BEC094267D40BB91EC5A6459A142089079369E125361193E166AA50205E66A5BC1723F3596B21388C50CBAD03FCAE9295C48493254087A5742741521E85E6E78B95F7CBB4DD7BFD49CD007A7E651151DA15EF8C6E1754B92919CC60EA7BE1B58B8D60A2A9584A47E626C598538E0 -MD = 4BE1251043A555F40DDFA8C11E170F1D9223AB82A01A863EA262470C131160E3 - -Len = 1319 -Msg = 2F3F0FAECE6B161E84BD245332DD6458A97F266F7AAF6917FB4A5729DC5989B5A918C6DFAA698268F126383D190C4F13A40F765CC76F25E8705FFDF9EBC6BF8984DDC7E5D673F2DB437421A5EBA8360CEE5D213B407ADECCF16E694E962C672DC058965E188A5C30CD1C5AE278325BF0CF21CEA9F6857E982CCB54E68F6B754BE9372C9A9AFEF256B5F2B70A9F60204B0A9B2BFD4809F319B3695AA453A52F62E2DD2C6F54 -MD = E1313E9B03FD95BFE99664A1A5A4881847D272F80B28A2BC6B204BDEE514B288 - -Len = 1320 -Msg = CF8562B1BED89892D67DDAAF3DEEB28246456E972326DBCDB5CF3FB289ACA01E68DA5D59896E3A6165358B071B304D6AB3D018944BE5049D5E0E2BB819ACF67A6006111089E6767132D72DD85BEDDCBB2D64496DB0CC92955AB4C6234F1EEA24F2D51483F2E209E4589BF9519FAC51B4D061E801125E605F8093BB6997BC163D551596FE4AB7CFAE8FB9A90F6980480CE0C229FD1675409BD788354DAF316240CFE0AF93EB -MD = 25E536315F08A40976ADECB54756EBC0B224C38FAF11509371B5A692A5269AB5 - -Len = 1321 -Msg = D8D4CA5DF5EFCBF2D65017ECB36C3BD473D607A30C25EE755924FD1E81E859F0311395E70099035BE27BEFEAB73CEFB3078BE02A61EDC1B01710D41EF113E710BB8C1BA51F5AF87FFEC0FC441515D06C165D076857C56597D01D80F73A700DC0797B609081EF2C71DF882AD6D35AAA4700C510621215CDA7BA2A2D73970556BCCAAC4D55BFED9F38C25645B98126CBB76D662E927A314C4378327941D1A8965FD1059E85A180 -MD = DC213F17A2DF43026E3D24C95AA567701882521C0B047A5CFB7F5FDEEA20984F - -Len = 1322 -Msg = 10C81B77ED26F307D86E4B10EFFD230C8FEAA519695DAB1869346C89B9DA7BD33B5BCA5C0C43DDE500A8C02AF37A417C97AD0AFB6A07AD274F0D09234C74229B3FAF91A5658D2D2A35EDD6992B2E3B213E8336C0B1DD29211EA4B215C358F5810E025B3DF5AF083DED25A6BFDD39BD34B3D7356A17657D31BE1E03E3F562C8DD249116AF11B1CA8DF62A0198D21F855EBDF9209F10600C0B0AB655DC2CE8DE056C8D8FA9A200 -MD = 5EDAE0E733BE47D033199F48F391CFE6A56E2DE2F672E575F7ACD5A60459F72E - -Len = 1323 -Msg = 38DF77114DAC70D214DE02A6253C53D03A44AAD53507C23A6CC64123A59D08511BCDC09505CEC62131C63D89B0A9C0F7071FCBF0A14EF340D0C33C93F37705B076AAAB9E4F590399547754F97B10C79C304907BA8D18D93D16F206198A2839FC265E3D942ADC8ED27D073910A2824424C3725409FD46064C426A0E7417B416E833A8A8FE57046EBA806AFE5AF13E756A6375EA6BDBEC8F5576B615622EA259CB161A878E50A0 -MD = AC22E3D6124A9723CF62CCB426B0EA5403565D280D698EEDBEBF519D71D63E4D - -Len = 1324 -Msg = 430F558E2C30BE5DE10C71F8CF89A448EFF3D6BB8DCD62D2A09DD0FC9171DECCD07C65E77A79147F1D8D75E646BE71379A7EB1A317078D3E70D4CE560BF24948CDDDE283C1F87D907332181404F327DC9CBDF037CD00759EE403AA72874D7B99FE298310AAA01CD3CB1AAD14A116E6E5B1AB95E48E67A73019704D59444BEAAE4DA1C1A432A57233D5B2A233E98ADA735B1AB5B0975C1DFC33C0A7C8AE18775DEC8169A814C0 -MD = AD98C94D741635DC353F18CDD3C34D9D31B4EE26D1A6C12E4654EB5B33C470B9 - -Len = 1325 -Msg = 213D28C42575EC3A807C614609DABAAF4C1CBD06C0FC14D4CB4FAEE17995404399731CBD6D2B3DED3F0FF8B603A7F139625E6193F269D825DE24E2E442AE02AE948C6B3D7E91C1FEB5210280985BD2E1D5D1E7ED1B63896D20A18F8E14250384131E3B1AA2B47A23078DE9EB65B735133992CAFB56B22549313C632B8FEF70BFA8610E5B5C82BDE68C88BD957FCA36B5151AC18B3C2030315C1A8049F6582A6C210115293728 -MD = D6B5845AAE5AFD1A0C133F8B591589A2F6204B220E4A2133ABA78E324053F395 - -Len = 1326 -Msg = 15EC4EB1CB742F14FFBAF11D1CA740F17864D55BA3AE39EFE5E43DD58B0A9A7345B9155F91714C9CF73DA71D59BE61E170CF62E15A5081C4D165693580FAE1401D6CB047D6F5ECFB38453E9906E9A8ECCD861579186EC2EFA503C54420673F2F3F49DF69FF76052B93B92F39F50235C83995B54CEE108F2A9327ADB4CA7098B53647A9E4EC5D4EE6EE042717FE82D505AB9BD3CAA78C4B576E8B37E38663CD20A467F091397C -MD = 4CB80B2F687005C8125EE9A033087606113753A2DF5347EF2D107E193A3A5D85 - -Len = 1327 -Msg = 65B08BEF40F0B21475DD76DD4928E3FF488CF3EF73F4E494A0D32D72F303910CAED04B767690E66972ED6C8B2878CFF3793459FA91A59F59EB7D75C50BF5E49A97455C9B0CD2F0C76B8DA25EDF988655C3BF92DC69E487A1750ADC615AD8DE7AC35D3BCF9F4A034B26D55AEFDA210B753C29101340975DFDA82BE82AA4BF4C9AF108FA4001242F4A412BDD2883F33A46BBEEDC449978B03134E7D7CA7CEF9649F03FE5C2CA6A -MD = 142299923F22EBD516D1730B1943DDEA61A22B27FA5F92F23CFD13A283227CB6 - -Len = 1328 -Msg = 2ACE31ABB0A2E3267944D2F75E1559985DB7354C6E605F18DC8470423FCA30B7331D9B33C4A4326783D1CAAE1B4F07060EFF978E4746BF0C7E30CD61040BD5EC2746B29863EB7F103EBDA614C4291A805B6A4C8214230564A0557BC7102E0BD3ED23719252F7435D64D210EE2AAFC585BE903FA41E1968C50FD5D5367926DF7A05E3A42CF07E656FF92DE73B036CF8B19898C0CB34557C0C12C2D8B84E91181AF467BC75A9D1 -MD = AB504592AD7184BE83CC659EFB5D3DE88BA04B060B45D16A76F034080DDE56C6 - -Len = 1329 -Msg = B13731617DC804E12B6D0208D197E1CA5A19206F697C7A77A36CD015F2A8332DCB4BABDCF4A5C63605E27AD0B57A03B423859ACC51D82A10AF5DBB8FD50909EDBCFB7D429B4F77933438B76CA9532BF10BD1F36B42612C662AAF299B8C9C88ED55E88A1FC780E6CCCB61594CC0B5D9905184AFDEFA5DF5DB1BE814312CD2EF6C89EAF002B0DBCD03814B71B6B1E581F51BDD7DEDA95733369F39849A9E8529F4104BA2B3438280 -MD = 2D5F8C248CFC6E78B8B8ABE01FB26F8BA9641039D5D4A70E7450336E0E1E5428 - -Len = 1330 -Msg = 01368F9B4FD19B850547FA39520B328FAB5371026EF643ABE0CA52A1FE3214AD838183533E5430E79C4E6F6079F576797449AF05761796FEB48C2BCA074D318B7F3281778016F0E204B2DB0488F1FC5FC1452590FE60D133886003CF16FD5544362EDC86CD6570F7C3A653E3DDAC125BE266E39E92BB65AF965BB8F59D1326BCCFFB71F952AC9B95B68A30586BC524073E98911F10E4CD0D0BB9E0C0830BA0944236A747353D00 -MD = AC0508E6028D8048574E759245F77D4EBC53ABE2F6597AF6112A98FEFFCCE661 - -Len = 1331 -Msg = A876C4B9EB23D6D1A0874DFFB3DB4A23094425DACA15775BCAE881E6B3425D116C959BAB6B04DA1A772532EF92EFD9709BB1DD4CB3FF4411882209D3F95D90952692AFA66F9183E8CD2533346D3E5118557CFFDE039D3BABC38647A7C1DD0BA04804EBD8EA3E905BF334FC5844C0E6DB853B4F693D4E087DF754FCBA1C5B2C234EEF82349006C5856AB7E6E8FD8ABA1A3E7E373A486F4BB710A507955A7590B887BB6EEAE01F40 -MD = BD3713B2C58BC9177DB5291B802DD9E74550D446CA09F543B1A2DD903FEEBB80 - -Len = 1332 -Msg = 73461B72151939F14C3463B9133B21CA31FEEC81AB2E32D1BC0EE079609A0E27E903FAC07A733062C1495B35DD1EAA2D11FEBE2CC98F832DF67BA3BEA187C9084FD421EB179293B209BC142B35159AC5057EAADFDA530668C6A645B235E0ECF290BF3CA902FD27875F129EC1913C82A6E6D6CADC63FA672D540554703B25A8CF1B92948B310BEDB4CF3CE581C188661579401CF107B3FEFAC9B642076A589CE28868B3DBC78D00 -MD = 18661D5F926DC2A369CF51C044463B08650A495F8A61154EA25203F9AE0CEC64 - -Len = 1333 -Msg = FDAA7C54912A9D81983FC765E53A5B99B5D478DA0EC137A942D7282D3C97FC674EE734CC9B3DECA4D482E33052D1D0E1F47327ECCE1129BDCA5DD9DE6C5722A54DE82E7F4B223219E6682AD353815A74862B03B2B852CD7A246433FEDF1E7F3C95E59A9FDB00080A4C7CB5473E5E8A9FC2784AFB8730F5B3ABE0EA489C501BDE120B9584D45074192A16BDDD8172545DB3BD993FDBD3D721F4B3E145594CD3410229427985BFD0 -MD = A4921DD15CAF4361A8B713F7455030957E51BCAAA3B690458CBF773987105DDC - -Len = 1334 -Msg = 3FB8DB0394383660250C48371EAA971C4C2F5A3088F028E759FB9FF3775CE1D6BF7D3B114143B21B5C98C7A60D760784787420BE0B29A71663774D02CAB07895B14D18AF5F26B58D97C87AB6DFC5E6C5023880F2D181D868A4938761377F085C51134D383B19F10B9C2527E20EC3ED5603A5F8182EA3CC7A1204B331FCFB17D1E0D42819D18691451051B12F07C2E3FA908842DA0B7F72CDD0E31D7B80552526B36F20C90E4A6C -MD = 30C9FCA521578465A17651C27F552A965AD70FA503F650170796B831E3D57B9E - -Len = 1335 -Msg = 9135F850B5F1C12FC35D88D789F6C0C489F4E5D09C3FFCB4C0A21A6532ACE66D192B214E8E82F099F3CEF20930F1E8FBEA47933016457972BFF66AED7FD8295B01F1F2528CC98A04F1082033D8240749EAFF393E6247C03F51C8250717F10D4BAAB223C86F2189396B48036B0285FB38773915F8CB9AEEC5A0BD117967FC220534A23EC333C6CFDEBD66C526F10E91EA82CE0AA4039C6463278A10F9763528C5A1555213D4A2BE -MD = D1C62819F05E5756C0018951E6ADF847C5FF7A2CA541D4DAA51A407F92BC2FF2 - -Len = 1336 -Msg = 0D8D09AED19F1013969CE5E7EB92F83A209AE76BE31C754844EA9116CEB39A22EBB6003017BBCF26555FA6624185187DB8F0CB3564B8B1C06BF685D47F3286EDA20B83358F599D2044BBF0583FAB8D78F854FE0A596183230C5EF8E54426750EAF2CC4E29D3BDD037E734D863C2BD9789B4C243096138F7672C232314EFFDFC6513427E2DA76916B5248933BE312EB5DDE4CF70804FB258AC5FB82D58D08177AC6F4756017FFF5 -MD = 5D8EE133EC441A3DF50A5268A8F393F13F30F23F226AE3A18EC331844402FF54 - -Len = 1337 -Msg = 39CFC640D96492FE5EE066C51815F22D0EC9069BDE5A1062E578B1FE19A045A4F77FC367B44CC052EA0092841AA1B2D36B5B4F5023F4139DC9D36C6A45E25CCF173DE83CAD177485E1DC089DAFB5FCE3F3103372675AB5D1D54D8AD9F91A9CCE0E55E14FF565ED156FEFCCF244E976ADCC41458D1C8F709F0D2BA20E836B532D5C2475BDBCE95CE32633C63CDE42A76AA032F2F4A01F6B66EF2B666C34B2EFFAEC5C85F880EE3600 -MD = A80627E58496328F7F0AC48A7C1E19F60BB82AC3104184A0CCCC93F5BA433FCA - -Len = 1338 -Msg = 6E126C93AC75E3C7320CCC9DF871C1E414D5A88C01A90BB739E84F7CD4053781C755DCBF96C9C69558F270972F2AE1622D5FC47D52DDD07161ED302D66363C50C7E8F2523B6F4ECA6C1CF71BFD3BB91D8EB83ABDDFA0C1E8CDCF4B2EB2A5949D3EBCBC6E9DA9918AD21F5EB1261C1CEAAB1ADD82034681460441D0E5380DDB02678915113D77F95EE3D42C3170E14A559399C3CB8941FC953EBB3E913A73789E5D298D6C840DA900 -MD = C629149880EF991754F87468E343710307620DEB00AC4D4CC0FAD1165D685BA4 - -Len = 1339 -Msg = F55557FF8DE74819A835E310339E4487E743C20D60DB4162581B160AA9C1C5F45DD760A6FB350FA7C3540E718C25FE6E045478D57932C30E710F0EAABE473AC7E4C789DC2BCB10AF75A4B0DAB28352EA889C257848C885D5E25BACF44ACEA5613BE7C2F34B0E1C3E60B092E84393592761AC201AA63CC1327C9BCC590F0415FDF781D038CC23631977FE6FF968D63C0AAD3BA1678163C4705F46BE48AD84C418A10291E7048B0B40 -MD = 6614B2D79033A0C009A56C113B4FA43A3A82741E4B4E9FD78303A147E6CD8A18 - -Len = 1340 -Msg = 58DFF83B67C6E67DDADE60ED6A0C268047FF37144EAA34FAF2FCE48AFA56B7733C0F4107AEED3695ACE8C4B55A59195E1E2FC93107C1147A38B1E48ECC1601001EC488491412FC5F23565FC7F51AF9B0DCCE5FE954E59309BDF99BE3959865BC9ACF18296F150BF157EAD0A3BBEFC43A50AEA865AC390DC0A69F813FA2D9A83A99695B918538DCB798F29D9FB909EDA9B06D83302B8E04773F911CB2641AE861D3D12FD49FDF7FA0 -MD = DB74124C020EDF536E7E0A05F366AF4C7108464ABD143C0EB2ADE3CF4C107FCA - -Len = 1341 -Msg = 3B5E3D1050E346FCB62F940EBAD635921CE417C934D3589691AF4EB303EE1B0268E19D3E7E77F3C053617ECDD8677AF9FFBD15D94013AEE8BD2096252A1B31014CAF1B75BF197566EC217B979166C43CDE5EE8D56732719CF0CAC6096AAAA54CD606BCF7279FC202304C1FEDBC58A77CBDD40FB058FDC95E6569B0B00C8ED5EF60E54816585F71829AFF637C75272C7A5E08B6B380A23B5CE11368BA6BE566283E4B78D043733810 -MD = 3A83ACA0F278B691E96E732DBB2D3F19674A19B1EEA67A03F7DD587C3C16C1F2 - -Len = 1342 -Msg = 5D2333C4A14A60656AB7FAC56229020ED2CE882448E1FC052EC15468AC4B4BE980D042515EE3280D0F9A6A100E20ECBDB415BF52F620B85C94D2652304FBF053256A6CF5835C57652DFC7F999307E097417EF294CB3EA68BE9E55AB65B55D57E625CD1C4C43D6F6B2C391B8229CA1051D085D485729565BA2B4BC8EBFACA0A849A8CB5F8B6548AD1BD66E397E3AB812026210CE7A918A7F9E41B600D360A5DA1C4D9508733815F50 -MD = 401647451A983AEECDC4A1A8DEA686EAE1D1FD68E6D7AFFB1F2CB6209DCC9002 - -Len = 1343 -Msg = C2F40504BA614ADC304AFEE4C618E6CDC679B644D42829C105F1B0E4470334C566D580FEBC52E425A85DE9E341BA19BB42DFFE31B5096027E13334603896B76E3FFA4C9B40D9FBC4D0DD6BBAA824CA0B151FA56C1A6709928FB853804F0CEA2242B08159F046B28741766337E0957793617B0446E1468B279A037ED18305809EBDD74E36E7873C01B9363ECE9AAFA8E96B43E2AB289665234F8893707C491C6C3738E604C289BE92 -MD = BA3740B8DF5787188403F761C7EECB76B3944F378CF530040B90646D564F2B98 - -Len = 1344 -Msg = C3236B73DEB7662BF3F3DAA58F137B358BA610560EF7455785A9BEFDB035A066E90704F929BD9689CEF0CE3BDA5ACF4480BCEB8D09D10B098AD8500D9B6071DFC3A14AF6C77511D81E3AA8844986C3BEA6F469F9E02194C92868CD5F51646256798FF0424954C1434BDFED9FACB390B07D342E992936E0F88BFD0E884A0DDB679D0547CCDEC6384285A45429D115AC7D235A717242021D1DC35641F5F0A48E8445DBA58E6CB2C8EA -MD = 712B1CC04C009B52035CC44C9505BB5CB577BA0AD1734EC23620F57EEF3D37FB - -Len = 1345 -Msg = C3CB3CE5975C2DD22C8BB03A4E86271D01D07EA027B7557E6EBA98A5CA4B6E8CCCE18C02878C7479D92E546C2961CB99269E80E7A61BED7F1E0FD5ACE5DEC74B8D3F5F2CAA0717822E78EAF8BF1BBDE53913BF9814CA4103C3A98D559FAFF2CD503972075F3C04C8D9DBAB07F67DDC2B1BA43DB3A13EB6574C5E7B7042CC1C7F182BF8CA384CAF5704D3C16EBED4539A7DA4A396F8180EAC0186A99F910B8710EA081B5934B39A1080 -MD = 4D242B68D08078B16A2BC8568759315E913413D30B84A6F058F126EA4C202096 - -Len = 1346 -Msg = F40E5F1455783F8572FE80D3153C87D5BC3CC1E32163424E57083619716ED21C5A055FF1E8E0B49F3B860E1704601ACFFCBCAA546A98F9B86709B74121753FDB16DF79D099136570DDA02948921F52D22CBE958248E0A2B9B6E409146C3DAC0002224DB6BCB40E86DAADD4E51F17ABCFAF21535171217D421E828546A5F1F648D4003431BA5C24A0A540FE1F31A7CCA19BFB5D17B943FE774BB3DB387C8B7352E7E1B2E43A423C6A00 -MD = 97895CDA15E41832B552A536B6FB22FBA1BC9EDA1B80C506FABF1CAB8BD32544 - -Len = 1347 -Msg = 7D9D6BF2422DB04E8C9D0F8D2AFFC296A305021A82DD99B5A0CF36B7B94AB0BAFFA1683A5899FABEC74909636D1EF585F80DB9817E37D09667A4A4FE5833624548B24F87BDE66B66D758A4B49F208C75A5EF80DC5088BD05E3DD12DE637506D4E10D5E1D73179D577361C7B7C98B36DC16A7DA068F3430957FCEB669D3C0ABDF0D7DEF41F534ACB9B124DDAE7E57CC9915440C1B6D8996179E6D796C90D254A4EB8F0C4CAC1ACFF3C0 -MD = B7CB1843FC8DC6F2BFC93FC76ECB7F384297CA4171E2FD96AEB125B824BC05B0 - -Len = 1348 -Msg = 07B8187B9A37B5ED72741E4A43724ABB1A14AE3D6A62B74E3C81A8B54C9B71EF81A2704FA5DFE752A2D7FAF9DA5D046AB6BE4F3E7F241D89D79A77CC6B46EF7442308566B4604431FB4B865781BFD4549C116160FCAC4FAD092ECD4C443DA5FDD5E2977D6C18714B1315B84B2778141710218B6DB4A21BB4D1F294907E3F1BFB6FE51E7A004DB8678BE9B799DBB14BB3A4D4190E7D33C69AA8EC772EE2A20133BF968DB96F2F8E1760 -MD = 0CE942F691F4A4A30EBF1E743C41ECEC312271E012CD22E9E49BF6D2ACFBCEB6 - -Len = 1349 -Msg = 77206E0087B19C5F785F0FCA287AFBB804589648A52A4757614FC17B4B90BF68D3F4F103487F8B7FA7A31A6C6E888EF6EFD973766CD0D189C80E7B33277D22B6DB89108AD4B3851709B749F535ED18181AA564F05ACBADEB21BFAD4AF5FE1EF08DD72D26F4720586D153C8A6F2BC14881EB07FB0C6B88C004EFCB8A96317468F62BEF8B6532E6AB4F205400B33DA576E0694D4667BC66FAF8AEFBA644A820D548D3F90657398B96020 -MD = 7C359A3A9D6DCB5C5130851BE8C4E9E123F9D4D5D99B8C4870CCD6AA4B69B9FB - -Len = 1350 -Msg = 96D0600089A412478237ADC295FFFE4D898DDD2EF945BDB7F2202905699E16C9F623A17F9525234A77A4C51BF594E8419D9A82419AD954A5FCBDA1E46185CB872F2CB729078C6E5EF7B99B8AC4BCA5F9FF58D9C22F128CE12E118661CD4BBB32166191E46348977284EF07FB9DEC83FE46794B2556FC74D0E8AFA9ED59C25C928F03A2D7CDA4DEE0180FA00B0C04EDE8879836D8A61BC0168226F1EE0CECEDE25C835A4253757CAE5C -MD = 7B80DD00686D3021B2EEE17735189C657580719F12698E5785714F1317FBA583 - -Len = 1351 -Msg = A9FB6E614A0D60016E54F7F76379AB10662A8147E40C19DEE4303DCDA99E08ACB8CB14CF41A42541C52865A5106C8B1278CFFADBE74015E4AF6A21EFED08A57A0C8E71525D75FF08493398B7F1A45BF92E6BB571E05A01DF3004B5FA4DEDC71405EB302587A2001D82CE4AB6540552E6418ED617F1807018917FC9AA772FBD4BBEE3FC43BDE9113D7E33A6CEA09B2B8B6ACA762DE6F35E78F52E28EA131DEFF81C34AA51B24D8FB210 -MD = 97677E106EBC1D3C6414D44AADA4E7C0420B08DF4690BCA736D189695822F97F - -Len = 1352 -Msg = B39FEB8283EADC63E8184B51DF5AE3FD41AAC8A963BB0BE1CD08AA5867D8D910C669221E73243360646F6553D1CA05A84E8DC0DE05B6419EC349CA994480193D01C92525F3FB3DCEFB08AFC6D26947BDBBFD85193F53B50609C6140905C53A6686B58E53A319A57B962331EDE98149AF3DE3118A819DA4D76706A0424B4E1D2910B0ED26AF61D150EBCB46595D4266A0BD7F651BA47D0C7F179CA28545007D92E8419D48FDFBD744CE -MD = 942E39E230A2251FFDB2F85202871C98597008401B322FF9840CC90CC85B337D - -Len = 1353 -Msg = 36FD2EF569A5A40207DEC3C593DCE23194D2DE040551345672589F374ACA38C0ABE149F4E38D53C1B24F02BB06DBD9FE3703012F0E5DD9FB836F38BDC62FB11B55EBEE418686155296A54077D71E05546188C6381D0277BB367D2C64EB1977F100B178AA2530E1219DBC0381BF52F1C81897AA2B7075FF775EF42FD948A5F751C8A2CBC0B5F591685B39039BC08FFC7246E9EF8EE8B65AFC11A3C59C25E9F020344CAE26BB62DFCEE600 -MD = 9F2EC711914CC267458E0BF5CF67BDB4FD186E423F3C5E67E2E2D2D3F58781E8 - -Len = 1354 -Msg = A868924523128669E906EF130800AE8CD611A019CD74A3BBA69535EC017865BB576DBCA2530803D74EBDF9A280D0342F84B1D428E4E447635C0237D44C48190E595294B44283BED2141FFC8CE76B8D2C4CAA166B81AF988ADC13C28CFFABA21FC625EEFB2B70A6D3C0BAFC91B7F07CB4861B689A45CF70D0F61F37934A5D7018F206D1E327DBCE56F347CBE576F1218270DC49F7C1D63B76A21A354B3CEC87A1A57E8BB332BF39D6BE40 -MD = 329BE72AB74A8EBD6E934CF3E53C234DEDA83B4C875F87C4ADB35FBF8C936A4F - -Len = 1355 -Msg = CAEFDB135D53FA74983D99E6C0E003D451084699ED4AB28959A931ECDA5FA7E45D54D3345987DEA612F20DE812F699E9272EC5599C365D1BD948B0AD2C30BA9C61622C06814FFD397E34CD0D6079D88C5477648607BF33160AB1853EDD71547132A4C0BCB89463CFE0D579AD4D042BBC6DC2C8D529353E004786CF7FA457AAB6723A70B2BC51F71E7B472B5A7C0D90725CBBE355323BA4ED99CCC6703FF13853F686AE3381003DE704C0 -MD = 2797425AA10F88B84751092739131581F9E7DD304C8BBF65A0318005D0993A2E - -Len = 1356 -Msg = 49A49E75573AECAC91FE025544C29871E97348F0C26232E008BAE56EEB1D9522C98251A44CC8E34F081554E3156F41408965CB9315A1CA7A53D14193500D155EBDFD3CF93F7DBAB715C49D2AAB0C82D165E7A792B8A5DAD7C2C1DF57501D14E20CD6F3C207B07532F772A55756E237405BCA9FDD0E9E6307FBB2DAA3F8B0FB6B2BB0D350E933837A6E742AE9D242578ACA6084CEA26E3D046A0A7158ECF4E852785DB96F72D8B780DC20 -MD = FCD0A95091EF89B769326603D89B5787E7C84FC927C26B7C1AC67B6BA6941B44 - -Len = 1357 -Msg = 939A4A630A161EE6428D48E351FD28190F9CA3E99418855FE282FCFAF85D9B995EF83C934020FE4D7104D9E6191AA489CDD37F7002C9EBC3ADF792DBFFAA2EA7BE1A1F3D7C0616479376C7660BBA1DCA7633474F4101A68766CBCFBDC269E81305468C93D4FF6B01DE681A38C6351DF0C53DF8807374B2AAA487F93A37D2B8C319218EAA06DE9470D94EACFD3083BCD78D29A5B85B4653BE36F1A722DA6AFAA5C5609EEEA47BCD33C850 -MD = 3A5A299C92B890CC7D5233DA6DA490DBF65A98FECD89D96F978DF593486ED7B6 - -Len = 1358 -Msg = 5309B29396779ADEC58AE82992BC55FF47213BD044F67070C5453201A83CA555C9A009FD7B372C50282E5947008D0E7FB125004148884EC2C88640C91372468B6EB8F884C983C83090282EEA7737D953DD2C6AF6A85FAAD6CF72A14512849961913F14EAD5F203A4AC7A5481AE2BB722C6F0427D61E6CEED47FB181CE29642C753282563A78BF6ABF1854D9B1686559439A073E2AC2FDE86BD9955721F9B69288A61F575BAC5450DFBF4 -MD = BF5313FD051D7F48F792D741FB32CA325DD5D526AAA8E13594B8A4E46D757A38 - -Len = 1359 -Msg = 2E1AA86E98FDA5D02B5A87975A497001E6CBA9DAA3DFAB73247BA5711C94C920D746B35F91669F84B5B9D18938C2A670948BCE4050AE33615B1EDF6F4C4463C40A0DD16132A27D8DC2E061744FA443522FF8321A92C71B14B6A3B75846760FCFCC94580FC830E5BDE5C7C3B3BCAC45CA8A7B71D6313D181F6B3A02B66FD1C2C8790DD87A743F7A7A48958BA1BE4F57B2A07D6B314576D9607F4BBDB62C3258DAFD24D3167A3127D1C00E -MD = 47CF9735653CFF477ED98998C36EA94D6BB6234CD6DA3AC75119AB160B793FD9 - -Len = 1360 -Msg = A983D54F503803E8C7999F4EDBBE82E9084F422143A932DDDDC47A17B0B7564A7F37A99D0786E99476428D29E29D3C197A72BFAB1342C12A0FC4787FD7017D7A6174049EA43B5779169EF7472BDBBD941DCB82FC73AAC45A8A94C9F2BD3477F61FD3B796F02A1B8264A214C6FEA74B7051B226C722099EC7883A462B83B6AFDD4009248B8A237F605FE5A08FE7D8B45321421EBBA67BD70A0B00DDBF94BAAB7F359D5D1EEA105F28DCFB -MD = B542B6CD8EF2DAB4ED83B77AC6DC52DAF554ECDA4EF7AB0A50E546BEBE2D8E5A - -Len = 1361 -Msg = 65A13FF28557E4982462A50B622D2B33D68CE803F2BD202F9F930AE5BE9026425F26C640992BA53AA014F7B0765DD49FD7C843A20D42A3135C2A16532B79CA414B65E9672AAEF56D20F72C63CA115153BF9E3EED2EAE0A03A3B054F4868FE8E9F83B4F9E4CE1A9CB87A88280780F8EFBDEAD6E3CDC1BD27000019D38DB3D4F4FD467B4F9CF2DFB4D46A1ED63EC518B72FA301ADA91746495D579FDB94D147C55FBE8A8E4F5A427E28E8700 -MD = 008D603F40C1799CED00F56620086F917C718ADAE83937952D3908C7E225FB52 - -Len = 1362 -Msg = 1045E853FA06432CC0C84304B661E0BF42E06D1212CE69CC6BE4BA28B6B7C4C62679B58A137C5B8CADC43F0E353A2F824457D0D9FE8FE017150DEE305F6346EAF01F9E220A4233F5674AFCF1C29F2EEB4B283D97E3695C007E62D453FAB2D192F16CF26FA7E048BE5EED75809688933D55EA478BEAAEDED1F7F07603ED77CC19B9557197848E606426D7B363ED592512D0488B95618940451D295D32A26E6C155D13BF3A17C65894F598C0 -MD = E691CF5B902DF8AE620FA428980B1CA19EB21C84081B7575FB76FD22C6CCD150 - -Len = 1363 -Msg = 3C10731D5A71E84653384B14B09D136B3B5A5C1F426B6C717521643912FE1346178CD03638F5FFF9584E3E4968E6D8BF2D0D00B893BE39A09F6EC23239053D5E5AA8D95BB999938CAAF66E12C4BE7D65DE0713DC352D9FF372D70BD9C00B3A0133B989449F4535B4FFEFDF5262C3A8D1DA90111853C0E10D4AD880E911880BD7C325804BA23F465916C273325800B04BD6F18C7885D7D2368A099A84367AAC420A865021BFD1A379E29680 -MD = 1AF0CD528E8FB1DCDCBB37C073A4A3702129C9BD551A4BD78B90AE1EA9865635 - -Len = 1364 -Msg = E1D0B5DF1D9D66347907624DCE47F60B127CE791BBB92933E5E4A976509CFE339527540B602A8A73151B654D5B8ABE44D2BBC887CC78A08826D15A2FB8A1FD33DE8E7FC57FCC26C93E2B95F2D7C9322D4DC6C955B844063FC00508ABBCF85408880F73298211A7E7EA3179097E5B8113D3CB95C85F3BA015A87DCE752A0A5AC4E7D0C7B53014AA1ABA3921AA12A32689CF7DFFA5AD6CFC6EB68816AE3DDB5BF6FE77AA80A647995490A0D0 -MD = C86B06E07A4F6C5F0694986AF052446A77F6820FD8D94F5E134CF6557219D013 - -Len = 1365 -Msg = EB46065DA3891E567295BE6219759C53F3DD0A85BBE66C93292120E35C0ACB54AEFA0785791A0FD1BE185DE702A684554FE5037C74906332F0755C88A7D8D5281A793ABE36C9FE1B0AAA79C67DD80FD84C0A07D83F63D053980FCA4FC5E11C8157FD57CE84E939FFC574EE8274C8B2C3608A0FAA1FC8D980CE5526F9D1D73E65B1057560B62A69BBFDE5649A31A4FEA16DB8835251673E1A1CAA2542B248230A9F7C7DDBABFC4474B8CD20 -MD = 1940F78F64F5AEB78B98EDD04C6FD9FBB844423EB18D5756D79CF96A88A3B345 - -Len = 1366 -Msg = 97C3A9F14749A457F890C34FDA5EA43A7AB1CDEE0EA0355FDA7B0027D47072B25A8ECA77C5FF22CFD0AB66E443E33315D3303E06693227A05F56D45648430556307E0CAE518E64E173EF36DF0B3A18900A4DA6D31AB65D40EBD67CB027F2584B3CD266625358905C9C482B61E41F6F11FB749785161FFDA33079F21DB116E2C25C7773BB3A7EE85E23D940F95F3579B90DC088E407997393A5EF709D477BD7E5A682237D1C7E835076FD60 -MD = 16A959B4B324C8E1A50709BD8A70136FE43AFA91D5D49BEFC8348F4F2370A3BB - -Len = 1367 -Msg = 411BAE7879445A945453DD7EBBE35049A2537031F12F7A90C712E6D72C720E7B21E15D4523DC0A5EE090522A69D2786253136E5DEB20FE0D260A67ED509B88EE4444B86EADFCBB9D365CA16BB937065E17B6D6BE7697FB337E1047E91E211489615BD4BD85B5F90B6B44114D0871D9A0890CA0F9BD7960E927C5E6EF0E0651AB7C66E2D1BBE65DC29E8557C15DC5A15076C7AF08925F93C615FDB8A50F99C0FF427589619AB54960880226 -MD = 17060230630300F43B0E947FE9192B13CF16B2170CEC8FF45E10B317EFA14090 - -Len = 1368 -Msg = E4D1C1897A0A866CE564635B74222F9696BF2C7F640DD78D7E2ACA66E1B61C642BB03EA7536AAE597811E9BF4A7B453EDE31F97B46A5F0EF51A071A2B3918DF16B152519AE3776F9F1EDAB4C2A377C3292E96408359D3613844D5EB393000283D5AD3401A318B12FD1474B8612F2BB50FB6A8B9E023A54D7DDE28C43D6D8854C8D9D1155935C199811DBFC87E9E0072E90EB88681CC7529714F8FB8A2C9D88567ADFB974EE205A9BF7B848 -MD = F7E9E825722E6554A8619CCA3E57F5B5E6B7347431D55CE178372C917BFB3DC2 - -Len = 1369 -Msg = 85B3E18D46E358D5BE8A54559ECD1869416AFA911BB6D553040FF39BF7E0886FF7586EE57A4972A9C85ACA71C7D85E2391E2B168C71FEF71BCE1404DADA3C302861FE17A1199CA115A20F3A5F073A3C98FC65D36A03F02099A0B5E9D3993CACEB2636357DFCD05F849A71B8B765FBE0558033ECF0A4E8FC6678325804B5554DEDD02F5A50B88B81898E31C621557624B52CC3431E07B0B3281CB452B4D92C5F7D283795ADB9787E0C4D1EE00 -MD = 4B154B811D7F1C4942431D75803E884C1E415046398AF60C2D396A16DCBE8363 - -Len = 1370 -Msg = BDC1CFD804C90965C32F231EFD3483B12D81CF36497D0C5CE5AD10E9F1D6A47690123D86F5B7D92A35B13A4A19B6BECCB493841C5D78014D7F200DB2E6AB53EA9E9D0F32371E037E14F5E03359A5F5682577E47E08AB5BE223E6C34039D3BE6CEB345F2CE3C4BABF4AFB0CDB336D97CF06C6431C142FC05B50DC0700EA3ADACEC0F08078A5F7EB61F4C6A7015BDD1519389B4FAAB4F93051377B0A324FAFE3AB84F2BD31FBFBDD919BBE9CC0 -MD = 4A3AE535354BE55A338F5A93CE48D1783E9FBE8C84E207AC148AE9C91733411E - -Len = 1371 -Msg = 182CC05EA535B6507804ECABD9447E181E602C8B80AA08C4F594753F4CC8156DACCC95263AE798D21438E085A4C68E3B3E29E99B7B005CD6E7479D113B255804084123C3313DA10C6D205B384809B5600ED73EAD804B29CB2B39E478941C84C937D6DBE1B670E0AE4C40316431B1DC9E84728E079CD1C087823471F599A2B02EDB097CD17B251DC10AF677F0E9B6254F2F7BFEC1CF9A30F4E5790CB671AAAEBFFB6862D8E75195D2AEAE9E40 -MD = CDE4F6BA3EE57B4B3D049A32BC3EC72C7A7B64323BC98608B1E0F2426FC10CA5 - -Len = 1372 -Msg = 6DB97D9CDC81366D8B1652EBA9608590A389871428F38725C8665F571E2F69B12D2268B6912D7AF51EF0C3B254ED335F3924675B2A6F83699705D3CD5DD8B2AF4A63DC44368DFD6F5D4E15696F4FCC71D6727ECCB83734AB9243A6C29C7184BE593D335222A2C1B15117C7FED7527B8D5ACF773DF6F61F34B79A225B66FF74BD1CF839C5D5DC28E08FEAC32A9C4959931D114AC39172A1F6EEFECFD0437D86309FC8538777A030980DB93610 -MD = F9CFA34CAEB3A3A69306384F7F3DA16FA06509DBC7C1CCAF9102EAB12ECD6054 - -Len = 1373 -Msg = B71EDC0731A448ED973F53998CC6988AE0B5FB1C8A7B75FBA3975C6AD65E2F003528D6B1BEBFB236BAE5D731766E97784EAC74EE93B432933F72A94B063BE3ADE93AC63CE35A78956F9FC00063EF6170B565EDA7A71294570F0CAB1E80B924EBD343AB451C96A093D9D8823B2CD2287C45298C800B1433F0C5496C1652008147D7F87B160F717E6F57BDE6A5974D46F25CD8CDD9202E90098487088461269E21E581F12529600E68D6715AD0 -MD = F137F345877422731F9C4E901EC8921C3EF8170534D89349407E0970F4ACAE41 - -Len = 1374 -Msg = 64FAAB8A8E7D4548A733309F81FFCA40517CEE9EF4B134157940B0E52C8F071EC60F073BF95C1D5172999783B8DC13C7EA5FF5E487E04E681D307C89AC67185882A5DFA18593D3C6552490A06741814DD43C333D2E70BEA94D3DC2100FC67886B27378541EE26D8AC08D14BB1A0BE10963B031D821FCE5FAC64E267307F04EE942F5F2D4B5CF621C2BFFB6DCCD03A200A11CFBA6ED13E48E9DD9D9BFBA1851159BC9E8AC4A69D0A97DA1AE88 -MD = 9DAEEDEF722C48F7622FD99430396F6A1EA3F761DBC187654D281896A1FE875E - -Len = 1375 -Msg = E8E01A8CC8EA94EDC5E43E3B1E147DB402CE56040B87A3C4036D868AB599C4B10BF522DAE9D96551C29B2973EFD816310DD4EB56DBCA9E4F4BAF51989A9881A5C5635C4C0D6737D5C34C89C6A5F0B23D4CAE3A72FBC6C52E3B660BC9A169AA805580B804DB77027159CE5581C5479A070FB0781E059FD422F7D17C7BC14B8CCB600ED857E1C0951C9DBD9EFE72A65C2D937E9405025A251DD5C8BEF9EB191D89F035A660A4BBDDD74BFE8606 -MD = 7FAF162C10E917F04BDCE75FD2062D238AC19C8ADB05B20044BA2DA4096586D0 - -Len = 1376 -Msg = B10C59723E3DCADD6D75DF87D0A1580E73133A9B7D00CB95EC19F5547027323BE75158B11F80B6E142C6A78531886D9047B08E551E75E6261E79785366D7024BD7CD9CF322D9BE7D57FB661069F2481C7BB759CD71B4B36CA2BC2DF6D3A328FAEBDB995A9794A8D72155ED551A1F87C80BF6059B43FC764900B18A1C2441F7487743CF84E565F61F8DD2ECE6B6CCC9444049197AAAF53E926FBEE3BFCA8BE588EC77F29D211BE89DE18B15F6 -MD = 14BB22B98EAF41A4C224FD3C37188A755F9B04F46F3E23A652DA3DB9E25D2F2C - -Len = 1377 -Msg = 52C72BD51E24E67F69619F02DC7FDD64EF2ECC334E3F425CC96D9B634A0FE1346046D4F7E19A7075562BD22EA8B335AC3E1068F86254B43DFC388B702E77D90B73BB0EAF6F341E0CF78DA95C9D098911E7A93B691160CCD7615AB5F7BB356D5551326EEBBAA00D6CEC324BF08D46DD0092062840BB790C5D4145EA722B7840A06B4F814E0CA2243DBFB1D9F869A2711C691004FA56CE16CDF67886C6FD0C6280C4A0662DD7DA7215E9BFB3D480 -MD = 4D5C7B10A3E7D14F37DF13DA339A9C7F0060F7B44D9F1767C738862B09449EDE - -Len = 1378 -Msg = AFB597E82538398591806218893B1FA841954B165037B929D0B3524F9FE10D9F0427847F565141EB216E27FD2A74A7293D3C6EC0C6652F02E8F68F9CAA1C1711CACE6681E857EC6DE0C2F4ADE4965934A0C2CC54B2C3B5C8C2F4C8932FF2EF22860EF81776EA18DF6C3E03E9F61C845CB8971C63DD9D7DEF53CF4EB71BAC71890E08855A5134783A2268857C5098C30906118DDF44A60ABDB8289045F183936F65E5F036D92A5316B05DA64B00 -MD = C679FE7FA7342D7E78A788A73D0D9E9EC2CE082C4F08DE5C35727F978C66BC92 - -Len = 1379 -Msg = 791B9415322D15723051857ED74D2ED3C7C6576BA23E8AE8204FC05588C16C8FC70D6005ADBF7C96189CC8B0CFC2CFFCCC6623ACC59E5C7AA94130308FC98AA1768279DBBFEBE893511B10C23B93173D0E0D0045679F0DA7E3003034F01A7078D37A4D1061D48674BD924612E9433EE034D3EEC990DDE038FD2276CE680C933E6C987F20E3ECAF01012CAEAFBAEF8CECC41CB42897ABC51D9C4325507D22833F2ADB7132FC8C653357308E7880 -MD = 517F5DC8447902A514E2497CC7ECAE830DB06B9BC5CD5015C599B0D2F9677964 - -Len = 1380 -Msg = 2CAEF41468981905BE646B56CCD195134864FEC4EBB1D745D797E0F1C0248E7B56C2DBE73EA06F0BBE9033AE741635B947845D0DC4DEECEE855B4C7017E638468F20363B60273F6AA8EC3C5440E9D5D8CF6EEAC954B54D37343DABEFF6ECE1D4F9C85A5F79F7AB64C10B91CC6A9F5309FDC8C36C5704870537131E9918CC44FB308679EE283E729A097329AE4BCFDF8D6244EF97A7BFCFDEF00A6DE4B1B34A5EF2BC34DEB40C98F6AF8C7BD910 -MD = 9CDA248411C08BB59A5398A75118F2E95F9BE01E39A469496DB8C9A01A80C089 - -Len = 1381 -Msg = CD157A1F0076499D06D822BBF48EBA19FE4D9EB7A0CAB55581EA89FBB362FC67FD4D58567C7AE04A55FC4CF821A28360911782838ABE0EE4BEB982382059F5E4E944338AE9BD974E9B4430B65FC8759D407166D6C4AB9EE23F430E7018988655BE974A8FF08E4B932858FAB8CD314804FAA12B51B17BEFFE6846B0D3F3A5A42A13D844846ED813405D3DCF7F06C51B995D6DACA4EA50C9A77A372E4D67C295B1362EC96F6DC442032D56FB1E68 -MD = 6B0422B844547B2CFFFA356542574C0A4D53DD8AD87C72E12DD0A1A83EC93817 - -Len = 1382 -Msg = C4E9236E259392165FFF38AF36A5797AD66D670D0CDD283409CE1B2DEDE1E3D2CDDD50003DCDEAF3602FCA089DF1749B5718CDB1303488DC3479FE9C6D08A9976EA90A207628FDCBE513793068A8D6B1DC7B2CDCE92BDA7C9E3AAC8EFC00A9230929B3B4752B1FF753E20A8F79DFC65FE433B4B2A4BBA4591B053CAF333F05E590DD9BB5191AFAA8B6AE12FBFC92736B5AF3DF31B3900C76A443B667394FE6AAFDC0045D4BC3AFFDF4822E565C -MD = 61C406FAAA4D20C9FF777876A657EACBDDBDF165EEB360CED1B291E04FF14147 - -Len = 1383 -Msg = FF273A0DE1AEA7B291BB606A75DA03511A80372BF12777462BD2151B6807604CDDD0DA1912691FCC03143C43F3E01E8EAD912FA16A2C31AC1C09144ABF6A41F300254EE0DE5858AB6E9536FC6C03F6DBBF91CF2C1DE2604BFD662072299C6A1547F1C3433B91BEF6616B7CD723433842ADCF6F1D38D3B6E3B28F603C068F4CF1712F3A8A2B7C5778F167F835981665B1030EA8D2591C4C5EF22897BE6BA626853D0F180A899CA8377943829646 -MD = E595E3EE0867471C5171EE5E01ADC0476544549FA3232465427E1C49F7BCFC8A - -Len = 1384 -Msg = DB11F609BABA7B0CA634926B1DD539C8CBADA24967D7ADD4D9876F77C2D80C0F4DCEFBD7121548373582705CCA2495BD2A43716FE64ED26D059CFB566B3364BD49EE0717BDD9810DD14D8FAD80DBBDC4CAFB37CC60FB0FE2A80FB4541B8CA9D59DCE457738A9D3D8F641AF8C3FD6DA162DC16FC01AAC527A4A0255B4D231C0BE50F44F0DB0B713AF03D968FE7F0F61ED0824C55C4B5265548FEBD6AAD5C5EEDF63EFE793489C39B8FD29D104CE -MD = EB5668F9941C06E5E38EA01B7FA980638B9536CA1939950C1629F84A6EFF3866 - -Len = 1385 -Msg = EA61FEE3D84881B73252C723EF892EE3D60A8C0E7110CC35D63AD57F0763804DC54C312A2AC900A3BC853544FE1B9E8FEA9919DD96C7C4CF2ACFF778A7F7D7178D60E7EFA92D2D4B799DF82B3211EEFEDA49A0E95EB20A7396295FC7C30DC364D74FD23C324F1F012839B51E972630AFD62589AD3B153CCD5B9BDE845312D62B2A62D6D0C133643AD6FFF829B2F4CDEE0A398484FE203A853EB509E1269CD5EE7E7FBEC1B0FEBB044AAA36016A80 -MD = 1E10DDCB69E8310AD2499DC07A10079C36C5E7299EAE452AECB058312EB9C5AB - -Len = 1386 -Msg = F1586589214B8CD84E5D927FD50736234739505CAB71DF09B22A38518ED55A880BED800C9E631F6AD8E6CBD3A92412A53217E5B8CC92E75235FEE0B383C7D336918B029BB7187978F15271D48C7022A99A048F93570E358FB8BD973FAC8D68D635E5C49DEAE188F081A21B6D3A029417DE1066235E2DE8D52FA10F4F593686BF534337AC15500DF139C391EF3E4EA43B4A1530498BB6E90AD08C1B7E0878AB1AE94913B36185515B3FBF7CDFBF80 -MD = 8EDC7B93DDF297FE874EAE26CDF1D340B7E263405D7E55410753330DE6E5BDAE - -Len = 1387 -Msg = ED10EBF6ACDDEECA6F59FC92B58DED1903484E3760DF203E6553624144B1F2E092522E1144B79DE50E741780BCCE881B074CD9188A978428B1246111C894098A76CEFC4D7DDBDF92DC1D86BE09271F5A85D058DA63441B51AD5C10CC9E9262B0ADA8196AFD5C8B8B89D5C69FD4CFFFFB402ABA352236D582A16896B338A69B9571C79B53F3B0103267516998E4A709DB983462037DC23132E4611A4D829E3190CB58F0FE447BDC3AA224EC768C00 -MD = 3EB0C4A04B1015EAE2C29F1E7200744A95ED00B8F19DEAA637FAFF6BE1E3121D - -Len = 1388 -Msg = 4EE2DBF84BDC18BF4069449BBC6FE90C089D53371B8414D74F40FE3D43FF5F61541C643E259A0DB2A34EB8E7DA502C92A3919F29C61FD3365E8D7F571FB862341A2B6AD9BF0A4F71413188C47C3D4DFF35026AB91E55D4B3B659EB721170E89FA87E076124BFE598C254F5D9B9B5E1B7CC96E45F11402729FF7F8E4071AEC38C8EB303E3B7889F7922B4C54B8A66B5131D712809A7C18245EA099401FEF20A89E5F5680807BA7AA320CA30250B30 -MD = E669DF384D0AF8947DAF1F84C79BA662F57F217114789CFFBA5FAF0F886F192D - -Len = 1389 -Msg = CFB1DB8692375D3784AD79DA62D9BC0C04365706936AA01B23FD2351BEFD1BAE7DAF96B50C6BB7E1FE2303C50E4634C0812E3F097E123F6955ABCFD8F5CC6E37F68286A2135A327C24766311F5E1595024677F5FB1B3E0D7204C3797729A6EE71826D89B8E96E3D31AB98BA6CA2F266C39F8710BF4C15F388306077153CC26F395806FEA930C34BCEC873A20DCC2F9CB2D77A9C3D4FA3B54B20FE1FC2AA89D5BBF0C881A5EF04FFD73D51F701A10 -MD = 9D3B609E2A75787ECC2EA1A20F26DC383816760448E485B63AFF847531437B82 - -Len = 1390 -Msg = 8686F3296230432C11D4C534409C7F6C9410C6F01791E137C456874DD6242AB34485785F08233C78010C5EFCFE3AF755B9EB61D0E311BCB971EDE86AD070069599D33FD628DD4C818C318462940AABF9577199120D7E3840C2BE07E5BDA2F12DB777BFF7251048ACE87FE6B18F33630C2D6A50CC9A6B05C2C85A7A9972147A447CC036733B49CC5722139A2B299BA81ABCFDB83544C7F711B602A7C8372B0436B304C303151A4BE6850F315C8608 -MD = 3EA7D0593298716A616552AC667ED2E89CFDE86FF09394A376F9A79DC97D44CE - -Len = 1391 -Msg = 16C331314AAD721AB955B9C268B2B40C7989E438D91ECF65EBDBD4ABBBAA69D77270FB48BA3CF63B249E78B58D9AF7A57E49E6883E1457188E20D1F8AA8A04A3ED5688E6E0AA4A0C011D02C04EA127D0F66908FEED9CA100E66C976DB5EDD08B832402644537E2ED1BAE1567418B11F017C026E473236B90EB1E171288AB04B945A494282A6FCBFB901A7E567AB31A89A30034F78AB6D8D199C4F03470CBE2BD8374C81866BCE9E91233E1BDAB52 -MD = 01A43A259E8A7E70B8F039F48F96805DFBA164F8C095A9219CCD614663A5682E - -Len = 1392 -Msg = BEBD4F1A84FC8B15E4452A54BD02D69E304B7F32616AADD90537937106AE4E28DE9D8AAB02D19BC3E2FDE1D651559E296453E4DBA94370A14DBBB2D1D4E2022302EE90E208321EFCD8528AD89E46DC839EA9DF618EA8394A6BFF308E7726BAE0C19BCD4BE52DA6258E2EF4E96AA21244429F49EF5CB486D7FF35CAC1BACB7E95711944BCCB2AB34700D42D1EB38B5D536B947348A458EDE3DC6BD6EC547B1B0CAE5B257BE36A7124E1060C170FFA -MD = 913014BB6E243FAC3A22A185F8227A68C2311DC0B718E276BBBDB73AF98BE35F - -Len = 1393 -Msg = 418FAB3A13197089C90621B9BFE43DC2096DC0A0F50461C17AE025BCFED1F8DE587F6AB515EE1987C6D96CCED7F80F9112ACF4B67BE67B0247414EAB033DCCD6028703BD346DBD61A478EC67C17C7DC586563997FD8AF3C9CCF7E5D66D25386FD7F056122C43788F502C14DFEFE435720A277DA4FB8456C237C2828A7442DC934B7D1B1D240562A5AA721BBA9A6E87ECEC6E55790D71B00BF1D8C27D56ACBC553C6136839046B1B111A0919EFCD600 -MD = 43079C9B46D3AA7580ADB5EE3AD1A36C4A3CE4E4451111E00E18825E3F4367A9 - -Len = 1394 -Msg = 2AF8395D282C705DD7A2DC02E6F79DFADF23E7E7DA63FCC4E14D60FBBBFD723F5CB0C861AA79AF16C425E11D28FAF444C0C1A8A769152C92AA9E8B366A8553C596D68B0290F19F47A3F7D597CC04ED1A0AC32AA7560027633E8CF814208D6DF5972BB2F8752FEBF4B23BA23CB9CFC4D5908FF74FA49938966FCC9E95A31783CD9B60DF0590E8A74AD8176142C788C3AEED4DA04708E4F0665AD24C8A100E09ABF9D7CB5BE9A588F45FDAECBB81AAC0 -MD = E442FE265FE0ABA2BBA4C2D9D4F211512BF275A58F80FF612903F659B251C482 - -Len = 1395 -Msg = 18975325469743A4A76EF7C718397A460A489DD0FB36D977D88FE12BD1BD5D1209362A1D116DF0E627F7C96187BFBB7DA8702349F246267D623BBE3C8B3BD69A74149D03DA66834D65AA7B4371842227D6D336456C39FB04CC61A2469C5C5C97F325B1A86D87A081599148E50448FD3ED41F21083B718E875B13CCB9070682A56F96DD27D60D13A15808A80422BCB26429B857B2DCEA20AD6B26B2B367B0F09482616152C180E84A907E8EB7A2D800 -MD = 6E5198B21591F000DF70C36B8F540E8D14E0058ACC32BB06598DA57884234913 - -Len = 1396 -Msg = EBA3F211DC5247D0EB7583D5A99C8A3A20DC6B82A392BEBAC86F083891E04FA0DB97A3B6A67062DAD957ADCE8F6168FEB5A9BDC8A708FF92970A66F930179C8DCC4FC33D39268C2347B2BC2D42FC27E64D4058FEE185B79547DA0EF0B07FDDFD88DED5A12EFF174C50D6978C3CF28C08403B6D48C36E15A244E3170E217C6E5F117E621214C327824C59176EEDAA2FC634FE9E05D514455C8BE239F15949D12367969DC6E5C9BB3E733DB09A68E2F0 -MD = 42615A9FF398D098AA26268AB3C43705AFD40FD39BEF67F204F84041B660D1DB - -Len = 1397 -Msg = FC42CE9E24AACE4B51A0C3EAE31CD7E0832708318A2B07EBE636DA95FBED1A3195456FD4C465CF1E568CA6B5F015EACA47801FE50B739850CE728C25004D0D355C6405638437A6DC1A27CB10D4DE70597DE383E070C46E798E96191A326D4C6F42DD6F64BF8D2D3E87F5C892E195F2AD6ADF16D2865F2DFCF0759CD495925FCBC35D7F62F1BDBA3670FF0F3062F2975D6D82A532437EE3935A4DD1268BB280E2957BF171571105EB7E676546AFA438 -MD = 893B1C683E12E5B608912B3B714224A8DE1BD4ECBD5C176997EA571195264518 - -Len = 1398 -Msg = B2F147D74B33F101A11948F56B0B7E5FF2A1F30C5944B32ED076E09E18DF1B803CC368906E1BF021B9D3305E8B992594B2C461CB7E89383C7860D4DC1CBC4B503D5158C1D81CF752483E46C28AF0C8BC0A51A9E752AE436CF5D06A0C4CB15ADE6BE96AEA3365405FF63582ACA21CAC5F7B9BE377D264D599C410B8D01CCF332CE15D56F9FA7B79919DEA2359653E8D7F0E9FCCFCC48D1F9769B623EBE4E2E6973D792F790B63D969FD5290B93D5540 -MD = 29D57FB8206508BB3FE9933BD068C5544AC8DA99FF9E5EFFE1E8730AFB65D9E3 - -Len = 1399 -Msg = 440EFCD5D8D5CF760A5DCAEAD7B30F9E0BC1261044269AE4F9458311DADF289B5E8A8FDB1214B650F9BCCFEEB4D0B27295C4539D40392776667B8146CAAF5D8E7DE6AF353EBE6305635943A53DF4391C88D8360168D4190AD62FFB48F31FE986ECEC14554C2377E40F426D674626823575C1A40B15C54A706203A70F473CA441300CA70BFDB191050CFEA75961CC631768EB20AB21F1FD8CC5D64A5DDD885917D15E16ABF8B078A59B6D8096E76E1C -MD = A046D1F9AFF522CD914037783FE45319E3F7B57A170608C4E886FF8B18928A7F - -Len = 1400 -Msg = 5ACA56A03A13784BDC3289D9364F79E2A85C12276B49B92DB0ADAA4F206D5028F213F678C3510E111F9DC4C1C1F8B6ACB17A6413AA227607C515C62A733817BA5E762CC6748E7E0D6872C984D723C9BB3B117EB8963185300A80BFA65CDE495D70A46C44858605FCCBED086C2B45CEF963D33294DBE9706B13AF22F1B7C4CD5A001CFEC251FBA18E722C6E1C4B1166918B4F6F48A98B64B3C07FC86A6B17A6D0480AB79D4E6415B520F1C484D675B1 -MD = 0284418C10190F413042E3ECEB3954979B94AFBF2E545FC7F8A3C7DB2C235916 - -Len = 1401 -Msg = A1DD8A52168BFF3504304272CBF393FF2297B1DE115511B7071FAF15CECEA7C1D2E498C46E9BAEFCB0145D4FD220C38271E5AE6EDBC482D3214E3B6AABFA141BD981450B130E971BC0E12C0EE89DA62281BB9395C9935EFE474D8E6F6B99BABFA0E4A6538A90C51E6567E1C8AA7E8EE62E8AF6290E3B74295C023877B8909F00EB53755A62B089C0924382CDFA7DA75521056CB6D1C6D6FCEBCE124C7DCAC671D02BFA5E5A8A49A4B6880F33ADB88900 -MD = F3029A841555F3D50C38DA5E876B8EABD29E2D0914DAD424144C59C86C72B0D9 - -Len = 1402 -Msg = AB6037D426290CD66B89DF7DDE674805C863F8101C2D76443B1BF25707B695B8174F0C942FF7D2F952339FCC936B2897E7BED9C02371A5DCE95D45DA60769F3DE0DFF5A42B962AC9AF1A1612DDEF9D2D586E7E3F090C1C34B9D621235A5CFE124BC4153A1F78DFA15261F7681237D7AA132E96300B9313CF456F0A04188166E3AD6D39858D16ABECF77244BAEF5C72AC491724C8603CE01570EA1ACEFDBBB50BD9BDCFF0BCEE8C1366B0A6B6A5ED2E80 -MD = 2B11EBE60C360B5CC4EC7E6125415A358F5669D76CAB460A6DAD293EF641D2A6 - -Len = 1403 -Msg = A3550EDC3CBFBF03416D72E2D0597D87BEFAD3D31F5B34C4FC50EC47E9CEA45E3565AE04D27EFE21DAC37660356B1CF75D3BBC522CE936A22F8219E0F27DA6BAF3D00D5793BBC2A9CF0960DEB3221844E2C18E37BA2176098C3656AAD8E69FEA5C76C4AC9EDC05F19B63D7D867A6C848899A42461EC6AB4687C0667C42C539698E755B6DDFAA6F4F316BD4A8F91DD173257A309E6B62A3090E6E5AB0DAAAAAD1B8F2DAC5D03FD2CBC3B804A951143160 -MD = D7CAE79D2E21C2EACEFE7BBB885E0CB7AAE1D562315C596530E054D9E6E33D07 - -Len = 1404 -Msg = 338673A0B843331C60FC9FF2EE15A4DFBACB8E77DBB541AAC44E2F6A9226355535E54FDEDE98A71D970F21E1B549AF75C7F91DDAC6693FD1AA4AAF970D3C2D88B4636DAF4153B3ACB92CF76529D9ED18D31EA1BCE1563F1F3A076F97C58A32583B137B9BED88D9A8DE9648E14462A7154226B949EDA577D3888F7C9CCA560FBB53808B32713BF62C95515D857CF630E3EAB52C50CBDE730B48951D165E14FDCCF9B5CFB9ED2169D9615002A6576CDD90 -MD = FB131F846E4FBB1402968C32C32C63A8975F797CA0A27E61C2106CAD007AC89E - -Len = 1405 -Msg = 62C779F840173FA00C27DCB9171DA91E6A8E6CD65805AD17AC31435DEE8C50F5E3EBCC4A9A8DB116CDC602138914AF21BDBBB6A962BAF4C49FD73C1A55E2A3F4C44648E03E5201D6FC6D298BFC3D6716FC3A5C53989C53FE933BF16659BFCD46DD099790E2E617CFEDC88B7F5A48AA7BEE7AA5B910BB748BF089DD12339444EA9029A90554BBB75B5AEB36AA400C1082C1C92BD27F442EF0C93994FE3BBC4559B94DE6E3629A9498526212ED021C1980 -MD = B948FFEF85A65E3E3099A29FA908B3BDD5C65587885A11A316253F6E90DA6400 - -Len = 1406 -Msg = 30F3656BC45520F876ED30757D6F6D6A3AB361C76C8E6C5F47CC7C81A4F0E25D8AFAFFBA6C40E831E6782A09B1EAA138D7933ADBB8C51D4E74B1504A8B40D7D54F70476AE16FABC3C64F71E9F9C8B62655DC2D8D082E0E045E133430378CB399A03E2AA0A6ED473987080CF2C5F8546A1F59680FC1A356A99801CB291EA68DEDECBF5178920F3077977B99BC704294092F4D0066CCFA76D38E6AD378D3A7D5FE1BE18C9F4589311AC6EB2242C812A7C0 -MD = 5C4879E7364D5D46C2A507C4856790FD2B8E82C44406BDAFDB331F19FE254589 - -Len = 1407 -Msg = 1FF51A1F8BDF6283E70E07F6BE761AC51B6731DF858232C78809E1526010464A70DBEAFCA5A165C9E1764A0E6C6EFB3E911D034E9BF99EFCBA863216C261A404B8B825E9E8098C226BB7D644CA4DCD219DBE957992A82D1950E7D2992FBA55C7C3812D61D51ECEC3A6ACF5F09F36E480F2FD99BEAD455897D32094A9017086E5B813CD39E2C46BCB31E89AD6C6BB10C58EC67D89E4FD4263923EFE969D89F561A745FAB1D1B81BD48DFBB27249C386CA -MD = A54A82C54DBECE9FFB297FF30804E78C60E59EB3326B5DDCB50A3497671EF140 - -Len = 1408 -Msg = A5AAD0E4646A32C85CFCAC73F02FC5300F1982FABB2F2179E28303E447854094CDFC854310E5C0F60993CEFF54D84D6B46323D930ADB07C17599B35B505F09E784BCA5985E0172257797FB53649E2E9723EFD16865C31B5C3D5113B58BB0BFC8920FABDDA086D7537E66D709D050BD14D0C960873F156FAD5B3D3840CDFCDC9BE6AF519DB262A27F40896AB25CC39F96984D650611C0D5A3080D5B3A1BF186ABD42956588B3B58CD948970D298776060 -MD = 8FEBFF801787F5803E151DCA3434A5CD44ADB49F1C2FFD5D0CD077A9075A492D - -Len = 1409 -Msg = C0A3AF99262209CD3D272635B9DBA05E7A15EF5C0BA6326EC15C1C98704884C0962363F0B9B441C7188E3E2FB8F12DFECA0E17C89DAC0D58D7206FCDC50259990A305BCD1B748E8E00E9757094B5869294136E977F889D5A2760FCC03678C283289397848039FB9E7E1F45EC308198A4630B48FDD54D57697A190653B23251385C04DD77397E9C27428AA9202554A1C170C813A4FB4B9322BE237B406BA1D5EA2E8F1CA247A135A16AD8E28B6724855C80 -MD = 968678A17C2C7055B056E87473831D9BA5D2340EAE7E24CCEC403486A9D3DD96 - -Len = 1410 -Msg = B0BC6D10B7393F90550D82BDB1B21ED87219D301CF90F738557E606680476EF33A181F939F67A65B40D6BE99E4715B7DC6C8A78F78D38C94D93AD4E342E25543A18381D3E7CC932D7578F3386C0ADD1C20188100AB99FF739D6E9961F86780089DE081F0FFE54C38682A1B4A320A2EE04B2EAFD2D8E63D691ACA60B35B49A3AED81110805FCDDA7819D6A19419F507BDE40C998B2095294714A51D32D46247DCC162D5B24F4B80B9C631DC7C542323F080 -MD = FE305AF36DEEFD82110B845DCCE0A99C7AD783F823BED6E366D420DBC0B6DB91 - -Len = 1411 -Msg = EC886F18CC5512BDD6AC13D5B6711292FBCE5346EDF45A688F4130E5914E565EBBFB4EB6244759D0C061170C730A58DC4A05D9F7CE785EFD635AA625B47D6A5A2BD4FF4F12F3DEE95CFA066750C5EBFEE47D71B511184607EC6ECC71DAFA87CA7348612F02FF564E468B24216C9ACC6A9D0259627ABC4CD470B50FC4330D60643D1846E1B7594B01CBF63505EDC5938AFFB8A497BFEE43025BA7FB323EA46F2261F04ACF96E381DDE0E4AD3CD7D86238E0 -MD = F78BA046966271CFA43B30F2270517556D14D86869086877CA3119F97A4F4420 - -Len = 1412 -Msg = 813E99662714AC60D61C1D7D7F7A5269D8902FCE95B7609224F8CC92F73EE92385A27E670D70EDFE5585023F22A0053BE490554AB97ACE2D0997D7BE77F61C9FC192C0237E5688FF34AB7CD441460A4EF6395AAA2C7F2799CDD143531961E6554A93459306874965426A3E1C5A075B91381DE55CA07D2A783557B953F3DAF67FCCDEE5C0D027D335D07615B75CE699F41EA0B53F5B1FFDB2CBF0116BA1531387E51FC65F9C829B2A504E794932BF5E3A90 -MD = 62BE3CA82BB044AE4CC41D03B3C467C97FB1165587F30C24853018BE6D06F5CC - -Len = 1413 -Msg = 60B651B269E159E5B8C5A1322917C61AC875B4F508F3534D2AB8545BEF7F12B8EEDD363DE66BAD766C86C102E491C29CF45FB7A114FA2BC7A4A95D61A96F8B159244FF088528F7B5B732FAB280EE2272BF4D4A97F167CD546941B8895B27E170DCF46CFD7E045810AFA47D16C8993AB09617C137DB70E84BAA445440F2DE8AD261BF74722DE32286BCB798393CE4F997B2B01759908854C4C45391EFF7BD4F1918F7B9E5DE12250A03CF09A81740C79738 -MD = 67FA3A41947484D2F523A6A9E51AAD8342DFB0B18F5F7B2D0C2DF54F3CE5BC6A - -Len = 1414 -Msg = B8E9A3D80161E08435E4993A2B3D8FAB8EE51DEB9431DB1A7719E24563D2D2DC4F8A4A3D32DB8E0A205090CFF3656BEACAD4B680D41709E5933943B49DF67803C9B0502637B15382A81F3EAA1A91240347BE0595064BCD480AFCEBA8F465EBEE3B2AC41010660453C1897366BBAA433F6A3E8CDF9901AB7A4D38C8772F8BF0A8E7E9D637A61CBD9766A4554B8759F7750CB586D2BE320A18BED8238DB5C02CC227F4311D02C3F12C0C7435C036CB43A0A0 -MD = BA95C653A52C696E94796C9C10ED458C13047692C42C3D14F83791FAA51BB6C2 - -Len = 1415 -Msg = 3A65D42C96E4AA1CD020DAA204E7EEA764F1CD551EB2B00EC645C12427D10360A140BC91EA1CAC2EDD405DD863DA17DF51ECCEAA3344E9B79575F6B86823384024DDF524217A90125754891E2C509AFD15E9D34C414100BCB5D9B5AF98E95B54252E7C82E7230C1249F4BC5E05CD8EF2CDE11474628185AFC3EA5BAF7081E4E84F0522976F9C9FDB293721DA2BBD90B955592953CAC9635877B70397434A08D15F8EA3EBDF62A28B0869781138CC56675C -MD = 9FF6F1088463BAAFD9DC1D36E1D6C67B86A5BD4B9B6B1C35DD64C13A7FC30AFA - -Len = 1416 -Msg = 06CBBE67E94A978203EAD6C057A1A5B098478B4B4CBEF5A97E93C8E42F5572713575FC2A884531D7622F8F879387A859A80F10EF02708CD8F7413AB385AFC357678B9578C0EBF641EF076A1A30F1F75379E9DCB2A885BDD295905EE80C0168A62A9597D10CF12DD2D8CEE46645C7E5A141F6E0E23AA482ABE5661C16E69EF1E28371E2E236C359BA4E92C25626A7B7FF13F6EA4AE906E1CFE163E91719B1F750A96CBDE5FBC953D9E576CD216AFC90323A -MD = EA7511B993B786DF59A3B3E0B3CD876C0F056D6CA43CC89C51C1B21CCDC79B42 - -Len = 1417 -Msg = 630F25144D78BF5D608715AED30D38FCCB9D529181D7AF8C13840A910912DC83DD22AD509C733C04D362B13A8A61568AF79F78020B83039C4DD9F793299D46DF5CC5DFA6D1A43A0497432CDCA64885BF7F091149E07AA2564A3DD1BE08A8465A7DC71CC41044AEE1F193C9D27B12A7A1B986C869243A560FDED3812C5D17A1C8B8EF47CC0EABF9910A9C8EA0014526C211D954299ADBDFF445CDE4517C3D9613E52F35EB0BC4FF6B7D0322E47B36688E1A80 -MD = 0A0E9ABB1360E2D9E5C53ED15B3F849C648BAE84EF871B8974EFB209DE05D730 - -Len = 1418 -Msg = 81515F0C225B6CF2BE73CA43A2B453DD8BA9310A72969A11399CAA2CEEFFDD68B44B1EB2C6AD5C92B15901CC7293DA540B50849DD4587DA32BD2395DBFFC4573F677CCEDBFF15CA06A14E737AA607942E31BBB16F96BE637B6ED4EE8FAAFEFDFF57EE9473ED97BAA6D7D8ADCB9F5EA8DDDC8092BD695FA669DCF9090C7F61417CD583A935E000E9E7C70348BA48DB4368794222D613B909B439B6D630ACFF7CD5A00858C5195D675C824D4B7EA2E6018C400 -MD = 359A9449B1163CD52C082F39742A2369767B91AB313D89920C3FEDD519FA736F - -Len = 1419 -Msg = DDF22A40EC1A0B060063F956521F0D4F5C578554F845600C747C7DCCDDFAADFBD8ACDCC6B3C4730CD22A0356FC5FB59D3597C704924F99F143D57BF65BD009A8351F04C879D75AE6667A9BB4A91DDC1FC7F4BCB0FF420E410C70B9CEC1672AE831598FB482216822C394925AFB758DFCE484F3A4FD41E2D072EE15D7DAE46858FA595B6C6EC51DF9D56FB4DF693D512E8F9597809D7C4D4A43124E8DDB196E924366173952DCDD9A385B0895B8118BB24820 -MD = 36C809B04AD7E2797FD08A75F890F3EAD2582B2C5BBA93F197F8C4D5FD97E1C4 - -Len = 1420 -Msg = C0D30C478BC1B4F00073128BD8D67ED36109A807E8950278F99F30054E610AB8144AB0EA6CFB7AFD181BA4A6B08EFC900F52B418D649A864464C05B27BE7A1034EF537AB4132A4D39D20D6E7FE5C368FB281E16E624A3AE185A89BDFADFDE23E765654BF5DB95DD04BC8860EB03AF6CB2D44F26B75852FE6C1EBECCA1BA0E1DAA247FE2AE936A7A7389A0358AA52EAFD12735074342410BAC6D62665DE6F60F1E381DBB70D24E9DC0F9B39CDE4F48A592980 -MD = EE943170E54EE087EAA019E2B34CB357C9BB502995D12D9A8994FA511DB20BA4 - -Len = 1421 -Msg = B18568A3A8FEC3EF94AE11FC3F950E423446F6D598B31593C2EF3C85BAAA314E388446572B4A1DAF972C8F96ED05FBD30C2A7D9519F9F4D481691D6D80806BF5DD2A6B6BF4DFF749017F24AF44DD2802707637C9B94037DC75EDD16DAD00FC4BF273FAAD88577AE66E40D7BBA9DF1771E6EB4C8DFCA59F3F80DCBE713EAD814532E05E23D29E24E52530EAB98360799F69F34D84C4CD406F0694B07ACC57A6A5A3A5CB98F206FEAFB774B16EE8222B88FC40 -MD = 6958134ADF13BB1E88ADB7BE3926996B30565BFBA48D0DEFC31A7DD0200F8289 - -Len = 1422 -Msg = E3C6B699E534C149A2F343D2E1D626992AA5A59101788EBA6D878EFB946E281CF95752DB91169984282CD9BD610C217058AADA5369D7CA45EE4B240AB84E8F8FDE3EB18A88015DDFDA475C146E32E6047AF1365899DBFF520993D42BBF6520492F7E3A1005C2368E2C45BDEA46B2B7AF9F17783CD3BFDD346EAD18142B348180FA173618B7385E5561ACF1EE8E5A11B583A94444A8B8483A5316073890396B14697AB3EA2DB759AEFCA0D723E56B9C43C5E4 -MD = 65000687F9C8362D1E96BE006C8FA255D5B2A8B615FE60F288AA7C52CBEAFEEC - -Len = 1423 -Msg = AAE187C91F8EC85BB6DE3F46E9E30D176C4E070818834DB8FABEEFED1F51557C6BF16EE80AE3A7465AFC513C1C0B92CC9E1E14C6C8D7A03375662117AD498ED2300799ED8B0BE37FF6A95D0D57BA4A9FEFB4BE43CC2B7C095D571986547F7825C83A1C6148891803847A7EFCEB5D78D835407D608CA8EA1E6FCEC4BB8BC26D700D04AD0C2306B148E00216421745478215917D3E5D5B17428C27A13566F4F87BDD020DE5A2B6FC4BEB0C0F73FAF72E5C868C -MD = 06417E2DCBB1F48EA34348FDBE205C76F8AEFCFCD8ECDD13C1B9ABA46F0927F6 - -Len = 1424 -Msg = F1C528CF7739874707D4D8AD5B98F7C77169DE0B57188DF233B2DC8A5B31EDA5DB4291DD9F68E6BAD37B8D7F6C9C0044B3BF74BBC3D7D1798E138709B0D75E7C593D3CCCDC1B20C7174B4E692ADD820ACE262D45CCFAE2077E878796347168060A162ECCA8C38C1A88350BD63BB539134F700FD4ADDD5959E255337DAA06BC86358FABCBEFDFB5BC889783D843C08AADC6C4F6C36F65F156E851C9A0F917E4A367B5AD93D874812A1DE6A7B93CD53AD97232 -MD = BAAECB6E9DB57971D5C70F5819FF89C5093254DE19EF6059C43CC0AFDA7C5D34 - -Len = 1425 -Msg = 27FF5954E8891FCD89DABE745EB7CD5958DFF6D7E3E3D2CF97B2D0E2EE4CDAEFDA88C0758648BB079FDBABB329133F6634869421B535E48F989334E8A856ED39DCB05910D58DC95781F3C257B40BE661409C132EC32F608AE30D29C54A3654B1CFA4BDFA3D390C3C4A5E38F45A767BCB00FD0EAF9058609F1BB406C9CB74E407E5BDF239BA4E49436AC0372AF24085E06385798284F0DCE70945BC2527A8B1F120E052F2C07A4B053C157377563F3A90697580 -MD = 744F9581D967E0F7EEE479C5132C0F9DE5996CE264AD08E54EAC6E486217E4C9 - -Len = 1426 -Msg = 42F0737B6AEA5ACA87B2C457D174D642606D7453D0C9A4506340BF1E512BE60F14E69BB3DEDB5B104AF7EC2C9081C8298981FBFAF0BD0E60BA4434EEE1851D921B04BE4C9AA5EC34448912FF855B8FFC1B21CEFCAA953501E2A941C931FCBFBDC04FF3BB20C5FE4F44350C940B3EAD03B51A9D96C0A207872EC9A0400D9F0B9034A2F52973DC162666C42B2EB62C79C00BC037675BCDB8B89A088F5C9D71D794ABA89E73BA02D6897F782587CB3D48D4EA39C0 -MD = 7AB0EC7ADDCB43E036DAF9751E46392EB51C7A0D7C7FC1881691BCA5AB99EC81 - -Len = 1427 -Msg = 9FDB2A4D221AB91136D757429CB01EAB202E2F0CB45594D71089E64A3BFBC162CCF9E5D524B59E86FF0D4A17FCEA00527406F0EF14530340480330FD4C4EF48AB6C711A8426908207992697B270B6896F9100B821B763E2C8F0CF8AB5717835D8BC79130B33C48FF8B922E9B7E94C99B8BD361248211CF56D763363E9677161793541C04EB803377B8082D5655C3A3B407465CCCBB85A1F3A713EFD1F4D1430E25D6256FAB4E933F1A559D85F8B65A56749100 -MD = C1007ACF0F2D53F34A7CACDBDEEFDA528E2EA25D03EFD68A7F7207D40282BD81 - -Len = 1428 -Msg = 057A73197CCC3B7A68FC6723BD1C32AD3D5E01AA6B52DB53D546EF1F7623F428619D25E3D7AC1704D6B23AE2D8433FEE576A0139FA46FF0B2E13D4DD413812E7B767E822A4C3CC69DF40B45478D95C1199270A6D28894F99584C2025156540207A3493E239EC7E95E7938376D0BABB5EEBF41C461653F9752A6CD4B1521E9B1F1163F13E186F8B82434A4DA1D8FA0882AD016456F046C7175FA0A8834C8D5DE4AEF28C986B8B5EF5CE4581AC6B616AF6F509A0 -MD = 40CF2F1918043827A222BAA31CDC9754E4F935D52743236DA5FEDD9512C5389A - -Len = 1429 -Msg = FCB2CCDB7CB717152580A4D6FCB174C44B33153708EFD174F3AF31CA0A01C8DDF6C8F07E608EED84F450EEE51096F951446FDE340A9BA3AFB0C9E44E84208498A99D02C5959A37815516E140E3758B5E00EF67DBD9BDF8B3C6A01623D328F649620D85A757902EC780CA3BE2A54DA5A8929776DFD578C44A953FDDE6A6D35B6163510C22E02CBA7479D277F04883CBB83A05AEE5755342DEC6EC49DCB4CC44EE99AEE761EDE6CCF851FA3B23D3467D44487F00 -MD = D39ED14A5298E58FC843FED662D9FAD6404C64233334B5C24C4B23B06D9DB642 - -Len = 1430 -Msg = 710712BFEA5E62A9D7954D7B01F3F8674990BB1F59CC6D822C4EF08AC5A51DBE500359BCA2F2A74AAC4ADD615396A30AE28FEFC53EFAE850FE9536815035A8B8BC064F7D43B309CEA40A825C008F0E4A0F9BBBCCCFF4C4DAB40BCB4AEA16926DE6516C6793C19BEAD079358EBDF6C08D5AAF9EC4D4B600642843B904C0DEF4D3B865A80F0D47DCADA317E9C341EF8C791085ECB7724724E7D8779E9EF05B4B7F5F813D6D9A37EFF6D46AB0B01CFB402B247C14 -MD = 1BACDE48E6EACD69FE2D6D39EFD30EFC6D59E3CD0DFBA09286611FA0E5E361DE - -Len = 1431 -Msg = 84E71B4DDDC7FF264CDB550A47ED25478E863E97CBAA6059F471A13693A5E96D4433185C3F7514EC6CECD03AB6564F23D716B2BAE4A13B251F7DBE1EB3CDB00CAAA677588AC611BB45293C550B647A3DBDDE55B20AE6BFF0E6F3A1E1B6B6BD34731EBD87019EC0FF5E396459C70577587FCD0E12443FDB66E7D9C0C9C757DF7F0569E7F4BBAA06435C7CD2A7530197BEDB0046DD51FE2262FA729C048A49EE357F2D135F9A9317C163997CA714B3F6F5C2CEA2 -MD = 1DBD24EDE78C4CEBAE168C4A910876B712D3114D56561F39D72B1D1299AB6764 - -Len = 1432 -Msg = 9D9F3A7ECD51B41F6572FD0D0881E30390DFB780991DAE7DB3B47619134718E6F987810E542619DFAA7B505C76B7350C6432D8BF1CFEBDF1069B90A35F0D04CBDF130B0DFC7875F4A4E62CDB8E525AADD7CE842520A482AC18F09442D78305FE85A74E39E760A4837482ED2F437DD13B2EC1042AFCF9DECDC3E877E50FF4106AD10A525230D11920324A81094DA31DEAB6476AA42F20C84843CFC1C58545EE80352BDD3740DD6A16792AE2D86F11641BB717C2 -MD = 56DB69430B8CA852221D55D7BBFF477DC83F7CB44AB44DDD64C31A52C483DB4F - -Len = 1433 -Msg = DBB381C83C3DEEEA298B3675314561096DB1F8447B93ACD2588E66C568C111B9DDDE0E5B504A05C041D0DD293D46303D5DF2DF40AE977D85EB2DFBB2B572D41163808F3B227E2C5B262EFAE57C3FD8E379407C1F05085686388F731B0AF0E085ABF39BBB8A73785E34B4ED59A10C97112FDEA64AE17205CFBF8D40B31AC29C206E535D0EBE38BECEA633E47D2F5BC8B35CA5FA6F87C4E22E3789D797E0E3B6188FBA2ECDA83100D3360F73B5AB2D7305353D2D00 -MD = 1C2E5087176DEB2E739CD5595DC87C19394CDCE3EBA2660637ACA228B72899EF - -Len = 1434 -Msg = E0CD21C86AC23727E5E5DB80A53C5F827CB30453E30F603A4442E5B311E90C152A129F8221AD64D1F8FF54DE336F0A1F92CB9D62C7660100EABB8F850C035F2A88689F9AF69FD598FB7D1A8995727B99170AE840758E88C1DBFE5873EDF336F4E68457A0EC41A21C99EBE8CD10EA45A56B3870B710D4FBFB7CABA277291A3368DEEDDA83C18D1F71701E9EBB241497C689272E06C84AF1505675EB998D9B61D92CFEF5AF71F93BA6E69F004EB7FD70A7A949FC00 -MD = 28F5AE2D592C2FD3942D5AD7F72A8E17E69B2BE34C6068A3B85FF34BEDD298FF - -Len = 1435 -Msg = 33769F64E496F6B1F638DE77E3538A49912116ED9BB6DF2CB78291F05F95C274B971AB1AF1ADCCEB32477171C4415C0D7332D36BAB37EDAC0278DC8C392E906F7075280BFF6EE7817D49DBAD67966D36119D82BD49C19CE299EB7C64A00DD4BCFA921691BF064758E3010D5F2C7B5878E6E0B763D3113F3BD6E80155A4DF33137360F735145E907F1165C6739DBB58933C6483C962A7C3F139115FF428D61438A614909BA6BB233CF953A953FF4561C6F7015240 -MD = F4697AF4ECDBD3F5EFC4ED222ED6245BEA6A66C510B8F5335C4D8BD3555991BF - -Len = 1436 -Msg = F3B541C39E2EC19FF5750EB4079E723F5E6BFAD3CE36CD9BB5B94C8BA520784F3651714D6ED955777FDD5A8FD543245B61C7E02B2C3CB70FD5691861F52D3EAFD3D278BA01C11B8A133F8C83C59E6D92359064543B418919000A1E80B908FD605766635B796696B57DBD8EB06C100AA2C1045D6C4881E2DA0038D7103A271F00F1AF4A048F246E8D8EF1509D9544FEC29E935E1FB12649FA7FEA43FFDFE84174A3ED17E4D802189127AD58B4D45781EF60CF2270 -MD = 9F15B662B7A60E17F3C148FF6B6042C1333EB06A06DC4CB87EFD3ADB0FE0BB06 - -Len = 1437 -Msg = 485F865DB14C353CBF0DA045E31DA2C6A0AB5D311EDFC6FAF819E524D55C3352D026370C5B9B0D3A764DBB76CD9B34BE367FA1A9BFB0AC617C94D47AECC92F3FE5F57B27B1E34F99B994470248BFAC53BB7D58B978FD048CFD8FB12A0EB30F163D7820973F3C08078F9C07D8AC1C2029D8639EDB51EFB60C461F7740E1252E42EEB6EB3466E0BEE310148059E352766A8D3ED0C08E2ACA6F5EA39680DFA2E691EF44ED4DBC92B27B28C22E666118AAD88E623A68 -MD = 7D4919B062824AC6BAD7E52C29C689F08A032A5B68CBB23A09A4EAB828F7E925 - -Len = 1438 -Msg = 47B4E93B903E93CFDA571880ED0D0EB2B409D724A6A6D835CCE0C6554AE633B2A385263323EC852FA11D8212690F7078D8AC78218C72953C2FAEB4A5065A779B0E484248003A3FA72EE244EFC6D0A4B1D1CED8EC099492E13DEE522FA2DFD89D8904793A9E22C7272C77CEAF265C7DCA3FD08DFF17C038F7D72A513B415A083D5F5101D2982B342D75ACA0A7FFD8B00F59BA8C0D2B0AE6CA17EE763731E1A54BB071C21F63965F10FF8B50C4E4AE6EA311C15AB4 -MD = 807D1DC023376D17A27C9AB1167A4C51F99F2427757DB0A8CA9EFB4DD4654726 - -Len = 1439 -Msg = 192D3A6963242323C642AC515B34F048904B933B7FC8C437EA751F8764B489BCB823E3658308B1D336A6A0BCEEF2E2ED8F27C2EF30C6F3C6F80FEEE59594B29983CEAA98AFBF04FBA3E6A9C9B2EB8A178076BCD838FE9658F7BEDC9275487A10C43CA8CF0D0278CE815D8D4FABBEA410E4857F45A5F1D593A49AEA704E3D5BEE8554CDB7ABC51AC584CC13F099CE3D1871C57032476951DD46E1C162D155B89BCAFBBFA867C2622ADF42321205E7F097DA3EEDA8 -MD = 1ADDC1AF963660BBFC917B97441AEE037EF17BF817B70CB2B8C46300CB1E88FE - -Len = 1440 -Msg = 5179888724819FBAD3AFA927D3577796660E6A81C52D98E9303261D5A4A83232F6F758934D50AA83FF9E20A5926DFEBAAC49529D006EB923C5AE5048ED544EC471ED7191EDF46363383824F915769B3E688094C682B02151E5EE01E510B431C8865AFF8B6B6F2F59CB6D129DA79E97C6D2B8FA6C6DA3F603199D2D1BCAB547682A81CD6CF65F6551121391D78BCC23B5BD0E922EC6D8BF97C952E84DD28AEF909ABA31EDB903B28FBFC33B7703CD996215A11238 -MD = F8538F597F4463CAD7A91905744B87156DB33C65BA87B912427FEC3669F425D4 - -Len = 1441 -Msg = CB28DC66F267394A3C1D2D1F0EB3BDD240EF9247529E8720395D64ADC644F5B57893658A6E57A34BA62F68E237283EA6831CA94A0FE337BC9B1D08A773133B968515FE7FDA3F851E108EE51D8FD01BE0A8C5B725D530B6425B7E9A988501982901932E899F89DC606D1ED8B1431E4C56015DE52EBFD8B09CD259FBB2D1B3A69C58B9684C66870F0D60B0FE0F75EF310177D512CF549256CB656EF3ACEE3B2EF6728806F74DE8F627C13B272E4E9885EC4DA7AD2F00 -MD = E12005D42C2ADFDCC1D81B5930FCE06E66EF5382939EE633CF037878554836D7 - -Len = 1442 -Msg = B2C51A76F1B06AEB1253AD6E8676DBBD29B8583ED2D3783268FEDEC3CC0CD4CAF9F12E6FE389294FC22A26C88E318E047D9A98BE25EE9B732F93D10FB57E8F3255F6A063DE245942664715C9A3BB9170587AAE67352E7E622369C2BB879B665A0B528FB1575EBEAA297425F6C7C4084E56C76BA7A08025CE545F0F4E9B32A331B950EB6CD55164200E35D04DEBBE5F16E62BA8624E93DA2FCF8AB5900A21EE87DF4514B3C5C93E5FEFDC24D56F9B691497256B2BC0 -MD = EA355D7F74A912B933B165535A5493EDD313C9C1D639AFD026FAC01D5CB94950 - -Len = 1443 -Msg = 36D5168F9586EF46911AEA6EF807874442C0DA3ECBFDA4106E0A71E921C511DD57904E9146E40EE1FF73B0A27C31CF06AB50B13D1DC8885932D37CF5290FF9D99C3D5E82700C569123564007D6DE15C34BFBB6CB76C7C86586156F668FF41E1DA02C7545E913F9FC9E68C3D8E029647FEAE1EDB069B8DF51A8185A50BA1FE44FC460F6CAD0A07CBBBAF5A09FDAB67158BC6D5DAEE6DE926D1C38B3AAAFB9A3EE43017ECA11165C9AB567E8A88EAB7B5DCA15ABF4C0 -MD = 3F2628095B86624B123037FAEC22ED38271FC58B2C4DBCFA3F0E4AA0D7192FB4 - -Len = 1444 -Msg = C7873F231D267158FFB7CD6451E1A0D8CD45C1F2226C44D875C30DF55660BDA0CEE25962DAC638D3473A088BD101B62EF078DB5C2B6F88DD2C76CAFEEE78615D1B36D0BB40569A486AFCE45A1C00E8B36148B865D415DD25D451CD4A84239B899A5D37F4E1FFD8A68072529872A890B6C339EB013F931B5810C6F65859BC1F8A3F7C9105FCD2AAFCB6A837C2715B4BED69C29CB21EDD6136C114C187A3DF169CC4BEFC1F6698E1928BC038AC8CFB1CF1C7F26EEC80 -MD = 4324F625FE591710D31DB6B72E2E97BEDDEB4FD62D41CC2EDF2DEDBDE4B301FA - -Len = 1445 -Msg = 597C27B64C8D275F6417DE1F56A9C78CAE747E024E8DEEC25B79C28045AA3A2A1416DC9976A000BF766DCE03023615D82DB887C2A8DBC758206CC4A645319A5A32AF70B3B1A5058209AF0564C8839C0D2D5A298539D6D0F5EAB212093AA116B074D1D66A785064AB5EAB3258D307D4CBB2C0B3EB97403B542EDCDA51AEE1077CF1E0187EB4CCA42744EA22F1CF0FBC6B96B112AF1B235A8D618491E19B4112DEDCC1B6F8C3722C8408CCC6D1DB3318054B2A376560 -MD = 9137A03284D46C83C5C3DBB7F9E15987B7F42EB4EAD1582E9D372D42C66941A9 - -Len = 1446 -Msg = 6AFD2AFB1B7217CB78DE5C9230502D0092D8D414E00D4D042C659A8DA687E1B09445D95F87B6A48901DBE3784C71D4C0A98724C05C80A52529A76C0EDA6549F9876219F1103A5C1432A4ADB76F5BDFFC30C46D9E22A2B141524F735369190E860AB33FAD9B34D17BA936AAE4059660A5C9006E5E6EF070142A0C3B6CDC550E5658360993A14665AA63B71495741F23076696BC799234AAB0AA598E53C9FCCDF14EE38060C11D4F799C9BC3B608189FA0BDDB006344 -MD = 4FECA94898F9EA969E82FC84189C47084919F02CC498D5E2D51E1E5747B7F9D9 - -Len = 1447 -Msg = 0D7CCBEC6DEA7B571B4BA9D8E11FAF3CBCD363DEFBE8BDF97F99E149BF3BF004AEB600784100AF7AC53A1CCF43166FDCE8AA87EF6A9A7CE66110C72B8DBC940AA6487C9A0439446EC0C555B7DF3E0D219A21392B740461574693FB814C15A4068626D29DDFCE3215F0701511AB4B1CB96C544B8B25DD385F0E870F5A32B88AD31FD49FC5F25C9867E682DA5ED1707A6022A58349405E665563BFA17F815FB0B402FFE5AB89BAF3D758DB8B4291F65329C8C4CF950C -MD = A2F02F4B44E45F51757056FA199328830518AB394654CF1C3834FA4340A14917 - -Len = 1448 -Msg = 576EF3520D30B7A4899B8C0D5E359E45C5189ADD100E43BE429A02FB3DE5FF4F8FD0E79D9663ACCA72CD29C94582B19292A557C5B1315297D168FBB54E9E2ECD13809C2B5FCE998EDC6570545E1499DBE7FB74D47CD7F35823B212B05BF3F5A79CAA34224FDD670D335FCB106F5D92C3946F44D3AFCBAE2E41AC554D8E6759F332B76BE89A0324AA12C5482D1EA3EE89DED4936F3E3C080436F539FA137E74C6D3389BDF5A45074C47BC7B20B0948407A66D855E2F -MD = 447EDA923CFE1112A6F1A3E4C735BF8EE9E4F2AEE7DE666A472FF8CF0FC65315 - -Len = 1449 -Msg = 3564C4692887D8CB8067A9D799396CF83E3DDB7E32CC4FAB3C87D31222B668852BFBAA78E3D2ACDB5AD889361E31B9DFE0FBCFCA00CAEBF8D07A9ABFA3CA818D0EA41EED422BC2C7F0AF9EF15C6D53FCD781E20112F9E41BC8F1C9E1DB278A723FA1C2D5523AC38BC0D5A93D3306AC033E62848932B10394AD1040F235466B7ECD11F484A0C874BC84AB18175C7BDB4F816A3762AF418D64978823A450B8696A1F78B1ED66D649EEC8ACD35160C5885E11CFBE86CC00 -MD = 89C2B04225862076E03FCBDABF35FC228BEF398BB8191A327A964F104C4C7672 - -Len = 1450 -Msg = 860296392D96C556086F61E4ED34E50C95B721A8B051544F6031AE174250979846DCC2E5811201CF7A16342976B7EDA6D2B3C4644FE8FA3398C05921C79CE3DD806264E80AC1EA1FC124FE51D573AD7823D2C7CEECF4F06C98CCE809B5C16313E04DC0B48A9410115B36DC5331F6C2BB7606ED2F7E6A0D575F8D0E93D996FE246D5BE00AC2A5155E47E87E73D568C990C44BEE93530073ABC1952EEE5904F41254FDF82030C4ECB46F497A695A43C87BB759AE1FE280 -MD = F8E300085054F9B9824991608548F74665D774C4DF5AC599B1A7D8234587F103 - -Len = 1451 -Msg = 8A59028DB3B6F5C6073C6A778DAB8A9A3F64D3AE4F13DCDD25481DEE57D2DC82481C83CE4D43D8A173DF49A04303E980F28D2F4BD898BE8DA36F0E470DAE4752192F9923B46E5AC88D7C4D3DCB8C8D29E8135E0E0DC44952D45D7DF503BEF6E53FE9776F8E4BD69F238F4CDAB93F063FC4639F5B72B65B90FDC96421C5BF23B8B30D7F87DF53B74EC6ACF131701693CB6C744AF9DCFE4BB4831C854AF76FEBA6DEF37D4469041DCCCFEDC1504227EB60570A450A6C40 -MD = F08CC8CF5C2B0D8ADD327A3EF4E453F7877CB3ADC454422AB170D7B61A98260D - -Len = 1452 -Msg = 79E4BAAADC1878BFB1EB26C7D4B23178446845FF6AB3E45E571BF06FC28675A7AE0FE524FB99925CE7373ED9DE395B296603C9F53CBE738393776B9C5AE265965D26ACAE303C4DA1DC45F190B057B561B1F8B13A4C02D8CAD6E1DECDFD8825A64A40A78FCBA195759D596AC898A2B984B459ADF1FD7781B3BE50AADC6D7529C38DBCEB9016A8600D2940213C1DEC81F7BFF72E6D753D2FC540B50621B759F1430233E588BBBEDAD1E978AF4D78859F869BC25A587C60 -MD = 39CED503AF08A5565B53375C556F01C251D7212F86866958723BC3A9EED1833B - -Len = 1453 -Msg = 0FE88DF0E99E878F8DFF574D6FEB68022CD544533B7D81B07ED92C67ED85A6E890D635E1801026E84B202551E7BCADAA869D9E00B1CE69C0EF2AF908248541E0BE5134B5CEEF8AE1A2B548FA0DF257477F7A0669DA6092C2D9894F00C299B1FE7EE480978D655F463942D159F0F6414E77DD5795E3AF080D060CB06C0765A7582058C47A9C8C1B2A255CC8655F8EDBA851413DAAE7EA4F4DBE6DC9AC91ADB6FD702A2F039B82E461EC29B3442915D4E12601A8515928 -MD = A9641A953CFB13FB2A503CEAD6343D13A4B4D1E6CC3B2BE0741E35B562870CD5 - -Len = 1454 -Msg = 679A778BE6C04980258827BA7F375C1592BBD320C505431B9F83547E686CE1AC87DDF4954A481F3227D27ACE93CFDFE507A8131CCEDBE29578D3523DE3E0590C4D17204B2044DA755EDD8B2D429E0B9092A8429B89AB2A62E0E7519450A193EBFDC2C4FA695C90C07F29C016CFF238F777D6ADD5AB606E1CFDBEE92420A0D8F9A23D5F291F496571AC573E98D8FBA2C31BBF04C1218AB9B7ACA6FB3C6B0BBB0FA9B8EF9684AE3F77275D53EACDDCFC5DAC4220189940 -MD = D9193873A72F32EF7572CF62A5383F6B6D459DFAAD98552D5024319339EC9D87 - -Len = 1455 -Msg = 69F739517865837781C3907381AFD544AD54E4B4E92E4F6A94E4508C592606548EC974CE57BD5EB500DB5D5DE19B6A5205C826EE7E805930BB01296F245F285264759C5D87C10CBF9FA8FB2BCA99EAE647E18E39D23CD916C7B8C709740D88DA333A7772ECB55BD639F19F25BF0F3CDCF1576A5C5B4EF558284D427C226DDA5828F2A638310243A42BB9A180C89DBC7533BDE057A6ADFA799D7C316B4949B49488FFBC760CA818F9E4B11A83FF144B91076C98691944 -MD = FDA877B2675BD648EACB440E25115EAD4173BE2E9F4348181D8DC12FFD6063C0 - -Len = 1456 -Msg = 0DF2152FA4F4357C8741529DD77E783925D3D76E95BAFA2B542A2C33F3D1D117D159CF473F82310356FEE4C90A9E505E70F8F24859656368BA09381FA245EB6C3D763F3093F0C89B972E66B53D59406D9F01AEA07F8B3B615CAC4EE4D05F542E7D0DAB45D67CCCCD3A606CCBEB31EA1FA7005BA07176E60DAB7D78F6810EF086F42F08E595F0EC217372B98970CC6321576D92CE38F7C397A403BADA1548D205C343AC09DECA86325373C3B76D9F32028FEA8EB32515 -MD = 74D94C13AFEA4DDD07A637B68B6FE095017C092B3CDCCDC498E26035D86D921E - -Len = 1457 -Msg = F8E43655B94493FA926E048EFA326945C953FFEA2316BF10C90D8B89FCEDC9E65E9A9BCAA73B5EF6B2AADF520D92094C9FABB9D4BA8E9498A1D0F91AC13CCAE05DA45ECF860606392BF868A0DC145F85D3E763DE868A65A9725C12F594D4645DA14C8C74B34BEC7AC206CB2CA3279F6CD594691F434C25D365A3CAF900908A45F051032FACA859544555FD9D09BA5AF7FF07CC309926086F92F1808D711F7EED88068EBC5E1704A3C2601F6B30DA0FA73C39264EBB8A00 -MD = 251D7E2BDA9073BBD555985DF40D54BF6CBF21EF44313D1F6078CEAA9BDC0D46 - -Len = 1458 -Msg = 05CC9F30A93EF36488B4CE5EF2C7C3996CF902620215CF9F06D63F02F5B4B33A41E6AD8BA5F86A91CC811F6BD5BD8634A90103D1DDC83E3F7FBF3259C85CB1D2BFC5499345A0F5A5A40DD26D7D85EF30C49402995300C7E5794590707162AE45194A916D304BBBA40ED09F9FF063EB0C9925F1743F968BD78EBFAFCCB67AB4E379065DB6C6F4AA5E933A9905A2328C5762819EA56B496A1834F017C387D5CAA70631113F3308ACF1AD2CC01B302E0BCDE3635CB699FA00 -MD = 4AB987C0F66C58646935BF9CD4E01EF6DFF69D4FCE677D03368EFFB4F9CA9FC8 - -Len = 1459 -Msg = 918872C3409496104D1F1CC94F168356BFCDB801DF3CE29D512E0F1FE736192EAF690EAA9DCD9216497A29F8AAD1F662BB38BE9D2D94B0CC25978FA5C2FA1E6A3F8F594BD354AD4DA9011F35C2A9B47FCFE20A83F5DC7C9750FFB60D24C7013923B09E4D8C8F299280BEA11781E2E5971872926728C2FF2CC2DC946D342E0B9C8B79576CD8F75E3AFBBABA4C3B2CC2CB21671A24F2190650D2AC23EDA04061440A31AAA50122C745D0FF9A3971BB1B3C698147DE9981E0 -MD = 71E53318AB3A590B23D9863D3CC0ED41576F1095F249B777EB99B46EBDC505C8 - -Len = 1460 -Msg = 307310A8B3FC2728EEB4A10D9620098D24A8C5059A6EAA111E401689EBAA2B10DE5876F12042A1422EBC9B33F9C306C506F59FD76FF5BB194C278E41370226ACF7BFDBBC7E88C82D4D28AB26B669562F67EE3EE9A882B1CA390FEDDE8AC0B70EA2E29CCE4B9169A83835A72BDE1709BE8638BA00D05149977EABBCA5D0B70D0BC935F77F85458DE4CEA519A32E29EF01CCC760E7E549A347BC227C1B127E7D46F730C01394681D0E3B3300446EAB291207CAF424C679C0 -MD = D1699265551ACDD56EF9036E02FD795E2CAB9B3F2E8DBD89E0E7AE8C80441393 - -Len = 1461 -Msg = 29EE9AE317F88A0A03059E3AB719C6D6BD690C9F2A54751E329EB1ED700E5D2199F80D47E711F83A3FFF5D7E6FB1ECAC25E4E5BDD8CF81757F59AE3AAB01FBC3F8F4BC1EB9618601FD00E3BBB9AE6B7CE52AECD8C7D256CCD22FC7F097C70D637F39EB138AAAE3B826578273D47C12869413F9E3EFC920286CBC247D0395165BE7BA0AADFB40F431F0AE40122DAA6993F99E15FE3FA0B37D610CA794B60458205F85A1E8C5AC4B10B772A7E96256F87410C62E9CABFB20 -MD = 630B2698587C84D4B6177F42EEF3569DEC73487C503B929CB4608D956B70E1BB - -Len = 1462 -Msg = D1E9441652727BAC2E45E25C2BB6AED06FF14EE8C4968183EA986B05B096D4000AE3AF0AD3E565B82D973B574C30E5D58946E987244520EEF1E0D76841235C1C7DA7AB073B86D0F185505A4491C19A963ACC10B166EA9F7AA164EB40989674AA882E9AFC4F58344D7C60B4784B831DEDE1C484FE5644E98EC02D3772F762565AA95B52A75D4A890E5AEBB607956F379F20EDB1EFB87B21163BD14858F8025426A26630AB5C43550658F04DEFD54ECAED3513AC077CE9FC -MD = B69919307F4DBFFD1B0C5A1E883152C27BEC823F93A8FEC17CA76BF0DC1068D9 - -Len = 1463 -Msg = A12F4FD666CB7D9226CFAAE60161177991EB2319316E8BCEEAC1EE41E2F44D6077E5837748B1DFEB545650429C4C76883408152A239F494742BEF1EBEEDE1C79617712C8F01BB17ECE00EA31BB14747B657E6C1EEB69A1EF5415E3A0C96EA2A3772417A2ED061C47F358C0225463002F280AE990F0B01FFF211B0CDB479E20F90F88D5C67D2A5708D655F6F05046E92F8CA0BC440E1164520D9B57D0E0F4048E8D0DF854B410B4207571561CF1B3BDE8293C46F6FD19DC -MD = BD3C5B3C19237BB4D9FD277871CC7C4860ABF719EF06D536A47883D1FAEAF401 - -Len = 1464 -Msg = 3E15350D87D6EBB5C8AD99D42515CFE17980933C7A8F6B8BBBF0A63728CEFAAD2052623C0BD5931839112A48633FB3C2004E0749C87A41B26A8B48945539D1FF41A4B269462FD199BFECD45374756F55A9116E92093AC99451AEFB2AF9FD32D6D7F5FBC7F7A540D5097C096EBC3B3A721541DE073A1CC02F7FB0FB1B9327FB0B1218CA49C9487AB5396622A13AE546C97ABDEF6B56380DDA7012A8384091B6656D0AB272D363CEA78163FF765CDD13AB1738B940D16CAE -MD = CC11196C095BFFA090A05BA0BC255D38BDA7218D9311143F4F200B1852D1BB0D - -Len = 1465 -Msg = 55BC529569E0801CD498C8AF42B5461FBADD2C26EE7D32CBD5C682B62B41584B1E268A85E039693E4690815F116C315184450F0443F585EB53C4E101D02BA7DEE60C6FF63CE5F9FBC04FB8CC4564CE4BC2906B23917AB86DEC1E5BD443578E0DC7A3B4A0D06E0C6D3D869AC686EEB943232F44FB71206899A068F0D7503F052A765D509DF738B6C9EBA2F0A349FC7BA9BF6827AE8AD7959FA186054C31766DD4535873577F20EBCE2E6F1972357CEF9915320FBEAF253100 -MD = E27CD776614A96404CC66DD1DA4A9FB50C9721BF2DA8E72C1C800C954DFDB757 - -Len = 1466 -Msg = C29B2724C942166ACA51A1FD3DCC1BA857BAA82329022DD6B54AEF86AA4C60359B60B0C377C56A793807D645EDE0A20A8D0C1EF21B3BA7D4459609BE3DDF434F1ECE24ABA109F90E1CD2AEAFF4C924EE8252CE18E5B60CC598E8F6280B9681672FE0556D22FD2D7F264909F745545EA2D828512877C9B1BC12E0597DE7B10FE8A7C24841A09BEDFEFC7070FF1EFA61E7D602A7B6C1A3EED14B4D3CEE999CC484C455373412812D609183F8E2858A9FE56852111E17769B40 -MD = 098AB3FC463CA896515C6588FE2D877389D82ABE20F35EBCF41473A78E133347 - -Len = 1467 -Msg = BBFEC968BF89177A453BC37ABDD7049F5B9E3FE88E090708E6807D8502A61443F2AC1D28E2CA0BDF925D55E869CD89CB9A647C2B17D5F561B462E2014D78DDAD9DF49E9AB6F41C76C0FAAAF7D6E11EEFF841112305756437DE2661E73936F7F1B497BB99293F1E04A89B70D41A045D37127F95C358A66813F8E894544E8D287EA0AA576F0D036AB3849D34443D77EA4E4DB8879F41921A103FA1390C001E179CE81D3C08EA23C0F3D3DA4ED4827B018FF5A6EC816EF890A0 -MD = C818208E1237CBDEDFE24CA588B011045DB50C56629BB7D872AC5D8103AFC3B5 - -Len = 1468 -Msg = 4F1873004061A5730EB73DA54F66A5E2769165B2AA9834188C124CDCFCC76863F252484FB91EA88D83F01A617578C828A39EDD28FBF9B150BDFA10195F229B6AEEBC4044F8E020135448C0C9AC6F218FD775864DD0D5276EDD9A2312F427D3BA76E993DC660764D1675188BA27F16C858952307203C2627F81B8CF39C617E9A1CBA0517F4EAE73B26C8B5793AAC96D51FF8383D24222937DBFE4489FAF8E2A1E2F2511E58860320E0328CA6853C862D3B9FCA83A9BD50450 -MD = 7DFB092E2C14F321EFD63D619EDEF97A7D891DA40F74C26A21C9F4CCD4835A15 - -Len = 1469 -Msg = C15A364863123C42B27DC6B60BB754C1596396DA21BF66BB4E874C52619D122D065EAB67ED766710E17078E886BEDBF49DF81035EBF94DD8121962F221A2E68F9A6D0AB13B1CF2DA0919D9DEC33860D499F2DB1F3945972EE7634258B6921DA9C88FAE360E9907F7926942F3321B0A4E68893528149F5BB078F3A72D20896AA327D3BDD615D02337B1F1B60FC81B02BD68394D681B2EEED6E3F20E1E40C94BFDE855AD8B13536C4BC32364955BE2952EAB3A0C94A195BE80 -MD = 885C4D3E77208087CAC3FD8FB803A2D4134F7CA2AAFB88C9F5A685FC759D001D - -Len = 1470 -Msg = DA29CC2E02E9904345DEE5618997310DBDDA21DD65E28CFACAF637837B9466B9791059277C197A33CAAF2AF7B88FDC143F16DD9CF976B5FD6C0390B18F8AF6C7B93000DC2CCB061D7B63C60055B840EE0ED935D455ECF9586CEB935B041E2C58BAE410651F5DA2BFB3CC23CAA30AA9038563747CB9E05764277BDC9D50330BFB96255071FCB22209E033A269A9537C5529CE2A9F3D332CB903C715512E611E4E984191A7EC7BBD4A68143C8AD136E7ECD5719DF0383AC218 -MD = 5D3EA151B8E04DC28C3793BE34E914C5720D78EC0F4A8C9917C455C26FE13986 - -Len = 1471 -Msg = 94EA90EDA1D00D2F8299F99C7AB8F2C19D05452155A5117E07505A1EFEE1B1754B011174F1C41B72F0AC72AF62BA24172565B5AF8DBE62EFB6BAE9B746F3487A9F61557AADF0BE5A2C8F877A7D2E301FDF45DF9A50633F87C99C38102F4E011435F451278A17CED52764FF55BEAA3E7576457E81A685F1A03770CCDEE8C06C1158AFCCF0746D58DF1E85DB956B75DFD86B26CA9A936D0833BCC64356782F27D5E9F9C76898FAE7AE1AC44B07272AD64918BA3E5BCB272F02 -MD = AFB3A3A9C1D8F13E4BB1BE5248F46B49BC234919703D4410458F9329C897F955 - -Len = 1472 -Msg = C38D6B0B757CB552BE40940ECE0009EF3B0B59307C1451686F1A22702922800D58BCE7A636C1727EE547C01B214779E898FC0E560F8AE7F61BEF4D75EAA696B921FD6B735D171535E9EDD267C192B99880C87997711002009095D8A7A437E258104A41A505E5EF71E5613DDD2008195F0C574E6BA3FE40099CFA116E5F1A2FA8A6DA04BADCB4E2D5D0DE31FDC4800891C45781A0AAC7C907B56D631FCA5CE8B2CDE620D11D1777ED9FA603541DE794DDC5758FCD5FAD78C0 -MD = 8C085B54C213704374DDD920A45168608BE65DFD036A562659F47143604144C2 - -Len = 1473 -Msg = 44A75B4C7422D2FC2879347615AC5EF30D1A10D6EA091C9F93748CA7BC5D48D8961BD5DF974BC9850BCF8F529C86237E1E836271EC0A4D6DBD9DF26A016B22A12571476FA219A9952B3711D19DF31A840BD3381B51E94F3212385DFFBE48162AE4AA4D5EF8B555B83EA5B37FFCF30E1C7982156B4438FA12E4D55D5066EDA3073D630942AAA5415524B2891B17020E7C71BB70EB24405CEA0A091D42E6DDD5E2FD3C2401E21F4EFC0FDD58E9D592D8DDD72C475A5026C99C00 -MD = B6E7D65B3D913E75EDE69478073DF46A5C17FDFB6971B3225E892C9D2DB10D8E - -Len = 1474 -Msg = 09CFD94CC99BD82ED115021FB794B680352912BE0A8E28CE534E82D4AC283FD68585CE8BF121D1F1953F2FA98F38427525D186635CFB0AD88D5FE7FFCB4C469235139AC64DEE44C8B1361363F6FFBEEF11060FE26C516FDBC421752D0E4700F91237F38819AF9F4F35E519CF52FF4E7FEC87B9079B8ADD4B8F6C49828696122F279997631DB09047B88206E2DA672B1DEF24CC5C022D3845654A680273872D7E0E86685DC809B692335667E99D2D108AA9E0084BC9AE177780 -MD = 17870BA981F90F795E4CE8C2F442DF5632F0151D9223B71975CC68BFE3262C0A - -Len = 1475 -Msg = D445328CDC413E194E2674C4861E4B02834DC69113CEE287E147902A8182E845C722D0B48BB4CCF68D69380F93DF2D783CDF63D1935DC118E4B209A6B2082CF88F4CD4AD6502C0F1CE94348DEE1D382C920450FD1668A1C4087877CDE362F4F8AD35EC122F63B8C93BBB06CB8D11C4305D38E783F3F536C9ECEF1455C294FA8175C910EF540E64E85D4E84216BCFF45725AC1AF6BC30F3005BE37C359F7CC0296D508A64B7D91F94B874A24FF602AD7908199C3BF08851CC20 -MD = 2E408C64E8D9188A20496AB5F2C3D6FDDC962B5675E7E18FDA45574E7B6AE7DE - -Len = 1476 -Msg = AD7557DB28F9AC08D6F70EF4AF59606DE6431BF5CB1AEA43E34D3A6B2A33DE5B654A11D95CFA02E24E19E65BCC45BD78D0266F1AECE3E10B4E101BB4238847BD4F88D019DF1F03D089EF5E51797DA0F2A117977861BAE10AAC4977F4C0672057B535DEB34C6F99BDB94A7ABDB015CAFD017A27CB710C5CFC8EDCAE842930F10A35806F5E1A9D2398AB23DBECB14A50106720523A1BFE54E3D2188C672F177B993FE3574908789FDFCEC58CF811440E9060497C8281C5529340 -MD = 268CF616CD0578B737CEE4E21A2A8BA91D2F7E1AA62E4E4F253783FC3E7A3DE9 - -Len = 1477 -Msg = CFB596177B9CC328223225536EE388C73D740E80E777BFA3CB117F9044EC292EBF6BC61521C6A2E9D25A7737EA702AFFF5DC7A521EEDCBA633338FAF7E13F6B62A1957D8DF39748DD4A0CDFAFD9235294375C5041761C6C54714E23EC10249AEDEDF5FDD1D25ECCFE9C240C759E435F6C8662F5CC1DAA40DEF573ABDDEA0908A4D6B07CC148F4153E34D6D5965B24D3553EDFC34CAA0634A622B22CBAD494D5C2D0C908B17B5E7A3E785AF8F8B80808B1F0DF0EE838DEE3F00 -MD = 674B362447B5840ACD5309D6F94A51BCCA2BE620D5864169DD9130831A8ED3BF - -Len = 1478 -Msg = E93C98D933A5F2C8D34F02E9BDFA64694F79FF969897F7F71D776D16E518B4F91443D3799DD0C4BFC6582E080B6712BD93295922C6BDFA99BA209CE536489A25C4755264B053DB2A0948B98006648E00FEE6A3B1C644DDB775EB4B092838FFF335C92B7EEA8D51A44C563C969E9CC09042C6809AB5D09FA8208BA2BD78B7F6803DA6A92F145388CE4FDA96BFAE287121809BEBF7741EB0C7A27E7E7A445C4D448D8A98BBB6C1D31EB8183DD21078E6BF6DBC9653A2E2053890 -MD = D3E817B6E378C5C7E42C57A0BCEB6D11408D9D597B118C335E46E0C81316A415 - -Len = 1479 -Msg = 532FB4C8E6753AC952A1B707308830D930A10D7F4422F2FB54CD2FDE1B584BB75ABDD8017F2F2966633E4ED2BAB7DF21F7C6652645215B18DBCCCCC64B27139A68143CFF9930ABED16022164121F38D4D12E62308D898420BF00A59DC3A7F26F07C8AFEB4F8CEF3DB3C98B307787C495B60A83EBA8594658D6E5F4B13057523E38D177F20C715A7C0188C2B342CB26D7282C5FBB124C6CDD7A1122F63080B8FD2C671EE1E994A874D14C1B4325D06733E9FE962E06219DA988 -MD = 2B231211061EA1B1519D63443AC1AD29889CCDA6A637F2883E30AE3FD51CA1E8 - -Len = 1480 -Msg = 8D2DE3F0B37A6385C90739805B170057F091CD0C7A0BC951540F26A5A75B3E694631BB64C7635EED316F51318E9D8DE13C70A2ABA04A14836855F35E480528B776D0A1E8A23B547C8B8D6A0D09B241D3BE9377160CCA4E6793D00A515DC2992CB7FC741DACA171431DA99CCE6F7789F129E2AC5CF65B40D703035CD2185BB936C82002DAF8CBC27A7A9E554B06196630446A6F0A14BA155ED26D95BD627B7205C072D02B60DB0FD7E49EA058C2E0BA202DAFF0DE91E845CF79 -MD = D2E233264A3773495FFD12159EF7B631660C1B3E53A3DA0F24AE14466F167757 - -Len = 1481 -Msg = CAD77B5AF3CD58692829171435B8C7B878D31D7A7DC56B0B89F6D13C75385AE8B268E309717C289F988ED5EC216703148CBD202FCBF9A07CECE0E9E87C108761CAE85DF513F1BBE31C6E9A2A4E9282BDD037491B65F70AD1CE54FCFE4CCBAF3FF59CF815FCA87352B7BD1BF1A61C32524AA4E8A41BAFE3B5DE8BC3E82EB3DD989B8D4FA36B023FBCE4456E6D253C70018DA40033F61821DFC937B0D2132E78B235903617E6511E3CB2AE00848D3B0ADA5AB00D04CB8539853500 -MD = F75881DC5C34A0F759AF6D2C4878E24309969D062968DFEE9B32742969E439CB - -Len = 1482 -Msg = 9FA55EAC5F6D56ED388E535C9BB95EE7129168D77438427E4CE012EE9DCEF6C489F72D660C6766152A15EBE3CD9CB32D143CA8A44D925BC8763B16CC8820C2C4312E1F01F691B3BA08A4DD9DBAD5594887A9129025DA743FAEADED8C593889E6B12D9EAED305917155761A62B64B5FDC250EBF7E172FA047A18B5E2FA3F65900A2E8B487305E296DF23260A08056B8FC092C997A82C0A0CB647A25D4EEAE8AF4C5F301DC630D43D41331C3C722C60F904CE8F1E59B54B8D40A00 -MD = 93E193B7AC4065B95A4585D8C3499ED6AD66331B48E680616B71DA98BEF07407 - -Len = 1483 -Msg = E256110F06106A8DE854A108A4C6611E415D5E73948718DA023521B2E948CD898E6B2246D7905C6D183D8BFF98A43554F813E9D19E09757879ED5B29FAEFCAEDAF1FDC8CE2C4AEF6A5D26F35331C899895ACBCE4B234B222CD5E0E19CCF9FB4D75AC50153684C3F8647BD0067307A07ABCC75E8C15CF62B842378528EA95D34837A87F01ABDF385D507423BF9803179DAC1FB8278FD28CE90C7194296D0AD9432591C0C1AC2EDAD8DD5C07E395A05947B8235AC0434286ECD5E0 -MD = 6FD5BCD0A75517D7B52D042D32C66778AA935A0CE58108D63D2E35DFAD458780 - -Len = 1484 -Msg = 54BCB9646D0C68565627D302A0FE16B1729E78A0528F96BFE95C130797F1A619C779267A13883D0CDC992CB0444B0FF694787EEFB42978BC483027BF22AD8F43B41B522B74776109D40297F61D104E6DEEE4C189552A2228FF97679E0889D6A76425DDDD08911B8C14B63803B76358B7B2B9FBF121208127E4E5EE2CC9A3E71CF29E17C735C29557F09B168E1818DA2215C96F2D4E08A1B09F996974CB8D40488E0A02B9287F4526DFB13529EB38B80761BF918D489C763AEB40 -MD = 20ED68A1C04A5DE02CDF2FDBC11D4A6DDCB8B32A2EF4DE399597A1E4CFBD384B - -Len = 1485 -Msg = 4BD43ED651E7BCFCFDCBA394595BBE757608C73A69B10A94B40DFA689EBB4629613602651D716DD360A98F1C942EE12E73236B4689BBEA3F98DD276255803F9F9A054E855E4C16EA37577D84366E227E3C66FCC646B8851393895A8C18960B1C6A9B3001B30F172C3B13DCDFE89E71A7D785B2E9C3D49C82F2A87625B5BC544A7DF12406D65D627AE666AB4E6D7CD133A92DF5E1B2AA31E146D9B3300EEDCDE1817A77182FD9F71AC45CD42C70CA5D6739164AE6146AEA860578 -MD = 37230DC1E4A5E17270AAE02EA93946CFBEE4B02C9D46254309905AA142DA9263 - -Len = 1486 -Msg = 719D1B312C421896259055DA2BCFFEED2AA86B319FCBE4370B8AD722952CD203B4AF18396F45D934C6513FF21A90A44A0EA7C5B931989F0BBAD559334E020FE6925C76BE4F6339D6C8EF64A6E7E011FAA3CA768F40BF561EE58AD5B9EFBD75E6FB51EE8DEB820F61E398837723D34B49EE251023929CCA4FA70078738E2A49F15918FC0B680F9E2C9F91145C68D35064639FAE4417E422FAF9E723E8278FCD8530484B4A41A193BE9426DB16AB839EE616F80512E59BA55CA304 -MD = 224274868543B534ECD253D90A7807867C1D39077CB68C1643708382351998ED - -Len = 1487 -Msg = EA044B09C5EC1E6A714E329A63B70B1887A6085274EED2DCB8F4B56B2991D2768313A56F6733231804D3D283863A764843B59409A9BB53FAB192877190813F9DDB08A19ABC32DE2F1FA58FD38C002EA8BA8954182CFADB37E90170C2E0FE3CFDC614237A1E8F0D7C4679BB4BF794CBF3E22953A5EBF55C22C531A282CCDB0FE8B9ED6EF4D731B4B73495FE632C328B7682FFFEF79F5421D99D9E32947E290F24F76FB45D38BC2159F84FC2675D5F059B3A56B7F60B35FCE832E6 -MD = D749550E136DB4989C490DEEB107EC8EFC9341EE21A6B68A65F4425DD6FDB419 - -Len = 1488 -Msg = C464BBDAD275C50DCD983B65AD1019B9FF85A1E71C807F3204BB2C921DC31FBCD8C5FC45868AE9EF85B6C9B83BBA2A5A822201ED68586EC5EC27FB2857A5D1A2D09D09115F22DCC39FE61F5E1BA0FF6E8B4ACB4C6DA748BE7F3F0839739394FF7FA8E39F7F7E84A33C3866875C01BCB1263C9405D91908E9E0B50E7459FABB63D8C6BBB73D8E3483C099B55BC30FF092FF68B6ADEDFD477D63570C9F5515847F36E24BA0B705557130CEC57EBAD1D0B31A378E91894EE26E3A04 -MD = FFAC7CA5FA067419D1BDB00C0E49C6E1A748880923A23ED5DD67DDE63D777EDB - -Len = 1489 -Msg = A3B6E919C29F0779F010018E9673A03EB7B45D635CABE817ADDE1024A39F14406956BB363A3C9E5D05CCFE04C98E26547EB5D044221B4A2EC10035187D7E29FEC3FE04E540C53FF0A5AAD283FF6DFDE44A4D66152F3A57341DF67554E504D4575B151A1C1B03883828E22997055CEC567979BB54784C80D57C17AE590B171A4A8E9C539E9B35FBB99369E35889A78F93A47298054C29D16C627A61228C3D489355158E4B3F39F7F515F93481D339F72FC8B3A5F71CE123212F6800 -MD = A0A418B5EF7B9696F0F1D6416066889398C5BC2A454B793C51B573668C2E673B - -Len = 1490 -Msg = 4EE4B06A4E24251F70866E9677E9D53BC176ECB513506058D0A77799B0817F2DD51A1FB6C092579435AFDD86D996EDFBC9A503C32FEEC9307755C83F6A39D057DA88CF3EEC01EF6609CF60D2149D61633AAF027A4AEAE25BC64C469AB4EBA304B8347D088466AECCC5B3D18CD3E24D3C6C95BFE2711E61D17805A92D05BBF8639A0BA9ADBA6D5394A09924415BF28F778679F1BF578549CD71A0AF3E57DC74DEB58B65792D3117C0835A03F0AFD622D8649696B92A8D2D343E7300 -MD = 3B864B8A3FF6AE0E10BD18FF31BA93871514DF4AF87A8E1B42367F27B353E7EC - -Len = 1491 -Msg = EA20C22288323559BF6E70257E5A591DA6AE97FDA9BF2D2AC91DA8CFF506B2DE939F49DBBF7C8F31DA22A7F54DD2C5898256EA9D7B6A509FF3B9E593747C4765E5F228C8156062DF6A15135DBF582B0789AD1F12565552DA81825708D215B012C3CF333D3568A26D6F5DF383E8A47730CA657333BB65534EBE04E4A6253728D5C31DF432F55F71EE5525E430586153C5D8E99B4C9AFAF7B4199990226F47A1F68461FFCF3215CBDA693485F3C155C559B47FB86FB176106258FB40 -MD = 89BE9AD92EC6CC6BF879A4B36DC983EC2ABADE6317A303216B2308725AA40768 - -Len = 1492 -Msg = 441C41706EF18997EEF9B4990BC7B67273D9A90E99A64E161F0F79223A079EA8873500D722834DC7177A9063AFFC05E6B1C67B3AA10BB905E393E6C998DF7ED17EDF76096E4514D352EBB5E060911DA466D6BF26C9E540D10D5F0A0D5D7E0244B89CE207226112A782CC9D98B206EAEABF5C31A3F752C780A3FB57A46EE81E4F0F28A4D5A0ADB405FFD80B35CFA93EB2F6793EDA5BCF5F9E8D57362FF4C65ADA45064098F110EE799931B04C913A05E5C43BA6427FDF1502B546F0 -MD = 3AE44231DC9F22097BDCD3AF21D0C6DED3415CDF144CBA02457FD5813701AA79 - -Len = 1493 -Msg = D61ACEBBACCE0A1C2ECEBF549884696BF89A6FA017148D21ADE0BEAA038B417A0423B167D18286B3F5981F73E15760E7655C903EC27B41745EC22CB790681CE19857D34B249EE0FDE3C4F2211E6ABEC7CEB7FACDD8C23B1460E87EFBE81B4869851374DDDF3A79EC5A9020A185E6F87CC6F7BE11A6F8CBA0C4819F80E0875A9816116B9E77634CD06ED3CD88BC6B8846CC622B4769D20C9B19CE4C94B3CB2BF932864F9C472919280835692DE0DB831A0DF8A3884439ABCDD93AE0 -MD = 657BF90B9E692369400EC4B5A3B748AE554516169AB9C6DFF55BD10359BD31F5 - -Len = 1494 -Msg = B4A2C1ABB183856531A1D8D13D5419E2905427814E0D941428CCFD0805D96B9AAB2BAE33C09A5940823907A58B0672EBCA981E5302F8143D48F85C2988347750606E80AA2FC4AAF246D0066BFE85B1D43882AD048B373009E7B75DF4AF50C792FA3C22216112136C80FD303CE511E9A2D9B906CF0DD009171952BD062933F58A96150D3AC0551E77B69037A0DE0569C6181690FE780976758E10498DDD6A8AE269FF8BE65B6EC809C8F81DA31029798753F3BD53906B8B3441A448 -MD = 22F8321EF9BB4F164FD5C960B95C7F6F37DEA51B23861F7B3B7BC02232FACF28 - -Len = 1495 -Msg = EDB075B34AD833E5481CA7E60C44A435F960F741B380AAB44DC0E7D36DFF686967B6B2CA190E972B02B574BBEED5B4DB6649094BD1E858599276591B2F9D8B4F09872CB8E2689D3263D363C185FE353D34E2B4D74536DA74F9A1EEEB5BC820462DAA02E08DE18666EE45DF1E3027C324757090DB9A428FD9616B77C7469D7D342FB3831D3C2ACAB9BCD3C29631445085AEE08EE985EEBDED841FB16EF45484E6EF05735CE8DE6CA10D71DF778251F993C5B59FD56E40C2F99A77B0 -MD = 094E03BEA3451C2997972424A02B621866CC2EE33B898F27738F0E181AB1DE6A - -Len = 1496 -Msg = 8B8D68BB8A75732FE272815A68A1C9C5AA31B41DEDC8493E76525D1D013D33CEBD9E21A5BB95DB2616976A8C07FCF411F5F6BC6F7E0B57ACA78CC2790A6F9B898858AC9C79B165FF24E66677531E39F572BE5D81EB3264524181115F32780257BFB9AEEC6AF12AF28E587CAC068A1A2953B59AD680F4C245B2E3EC36F59940D37E1D3DB38E13EDB29B5C0F404F6FF87F80FC8BE7A225FF22FBB9C8B6B1D7330C57840D24BC75B06B80D30DAD6806544D510AF6C4785E823AC3E0B8 -MD = 5B2ECA0920D32B1964BBF5810A6E6E53675ED1B83897FD04600D72E097845859 - -Len = 1497 -Msg = 91D47B29F4A6397296F8FC30D7DEFEEFB9A0A29D56A31F0ED443996E66EA7B9CFC0122F8D942B8946F80C352C468DDD7F1FB261C3EEDB4274040BDFEBF60FE4F689FA7DE2D0B692F9E401BA17B810906535C4DAFDB004AD235798205BF9615E5B4FC385F6192BBDF4865C4E4B299B1494C27D98844F7179EB21A7CC464833BB5E6A0165DB54B9F9114EC8604F662B6B3E8A02E22AFBC170D66CD06A78C7831083119BCA3356079688837B1F2488A4E0A12D754166FBFB4FD81CB2F00 -MD = 4D84119C33336465A8D0E97131E5A85C70C3BEEB29DC7C46AE970E5593C392BF - -Len = 1498 -Msg = F5CC4F8FA3793571B809F6CE2A3D500B4B435116AA90E04FD2A1F591DC94EA41699033076B30FE816769F0B59F37E72D2E476DE192CAAC4110C2A46635A05BDD8516C53BE98B505182CD4A75E6263972A2AED090FBBEF69F929422EE15737C23DF60B26797937A257383699FD13F3A85B41429CBBE83B6E2AD4F5D7C5D935A956A73E17330D822F7C869E7FAA76E4E8870D9E0A3B219CF145BE394D339782A927386F1FA2B1CAE28337126927501A43F6947B6FB80364D0B823DC500 -MD = 8172E73C2696C88F07E9D0245610B3EF5965A434A58B68591CB5BC0D1FC70236 - -Len = 1499 -Msg = 5D712726889DF7831304D027671BEB451F1A32492A7170D7FEB2FA755AD8BB2E1CD6BBB5DB2BF4DE1588CC0225F674F10F8AB9846CE5370BFC99FAD1110D7CAA132B2FB08F371B4D067765ED91A8E23D385EB065D47530A394D588777B3CFC22D1BF8F68DB285B597FBA71D243A4C4AAC7B0D1376A468A364C16A25F1E4404620EB9E9D5357BBC30F529FD8F02EC09D959417E2D4B3E2980A20D8F633BE8B9F53FB8EB276DB34CC1BC10CAE1A6BE1ACCCD75F3775DB19EE52B361DC0 -MD = 2B6051BC5B6A8B61E4B8BECC23017D0FF276C018372DFDB96DC02A54A08D2FFE - -Len = 1500 -Msg = 1809F981B54AA5B37007A269F6CDE7144081B3E6538B3205B366DC7C85DEA9A1655B3CED86D8B9CBD892E3A06FE3A57736128D469FCDFE32FACF51517405FEDA833478A3114B365746762373B6DA9BEF0E8F08F0E8D7D4996B5AC19A48A61223ADA7F7D20BE3BBE9805784A47C04A8FAC94AC5552E75E3082CBB2757DDE0744FE97E08D403240896CE381B4E48AA5F45CF3F5B7F33D402DC6070CAF90D742799E861BB792C009C636D8D73EF0C1805EE47365EC0EFA6C2CD794CDB10 -MD = 6EF4BA5828D775479DE2E677E268CCF54E283543AD5F32F5C0E53F73A0885171 - -Len = 1501 -Msg = 06ED3B343E6D7B3E85BE6CCC154FE33CB8F515DFBE0D90F0E707E957B06F89C0CDE0D7E767ECA5DC6F39AAAE3A5330FAA2674A63E76125E66D21C82482E3F51A3E08F17B4F2887BED5810408CC243D52D535AEC4CB63E8FB655FE331582CFD29793C16A2E502A715BF6F71CBC3719FAF0D0A1C74B1D222028C524CF3125C5ACFADE467952CFFEFFDF7AE7A439320959148DD5F21E6549F602C7E329B9E59465D5E14987F7FF101F725FF7AB15AF9F73848B058C61275A3B1FB0AA630 -MD = 7A49B1D46F0909AC9D2A9DE4E23761B883FCABAB9A3EDA500A90C63F5E3E6782 - -Len = 1502 -Msg = DDF19649A6FFA95A56CB8458A9DCE9BA51EE5FD82120952C38D7E0244EEC4710F2D2D67DB61079E7658D2DC9A69B14427E1AB52EC3E973BCF6041778D95EA4B6A172E8E7ECE8F245827AAE4D057708913FA32ABB973AEE71EEA0F3F62CC8B4A21B924C20AEAA00359A48100F8DB8E8DB10ACF3270681150E326EFE99739332B4FA7568344D73A0943606E4A6FFE49BDC1788301FCA269987F7F3AB43530A0089D5FFF1CE8F3389F6E1889309ADEFECF15B05CA13295BB554E8D2ED14 -MD = 48996BB2E69376A40238BCB275B4F34F233F35B32FF770AC31482D74BEEA52A8 - -Len = 1503 -Msg = 4E72712C6C4A26956F86B9EA99A334147AFE15580CEB51171AD5F95E654AAFCCEDFFD10E214F5C71B7AAB2147C4A48404088C22EED0F4BF517D414CE1D2BB04825FEC5E692A72283DF63FC947323ABB95FBF2AF489BD1E8F769405BCDE2D48B892473D8527374AEC620E0E81AE5220C1BF8C4266C8C657A681F7CCFFDD16EE545E20532D93FF70D4F5A47A5A168911EC5455BC4E78706D6436AF51F6939AC8D8598C0C43FE8E11912DDF8B342DAED02777F2D858B967FB80854CB054 -MD = FCFD9AC24B1BD1B1EE35BA8C361F4971A559C2F2BE5BC1692DD8F47A8B4813F3 - -Len = 1504 -Msg = 6B018710446F368E7421F1BC0CCF562D9C1843846BC8D98D1C9BF7D9D6FCB48BFC3BF83B36D44C4FA93430AF75CD190BDE36A7F92F867F58A803900DF8018150384D85D82132F123006AC2AEBA58E02A037FE6AFBD65ECA7C44977DD3DC74F48B6E7A1BFD5CC4DCF24E4D52E92BD4455848E4928B0EAC8B7476FE3CC03E862AA4DFF4470DBFED6DE48E410F25096487ECFC32A27277F3F5023B2725ADE461B1355889554A8836C9CF53BD767F5737D55184EEA1AB3F53EDD0976C485 -MD = 68F41FDFC7217E89687ED118BC31AC6ED2D9D1E1A2F1B20A2D429729FA03517B - -Len = 1505 -Msg = 21C9F4F5D4B2F235C5DB749C3174A603E5BF933C0C383FC4FA5832F7C110080497D8A93D3707DDA98042343A2FC52BD4D546A8806241E7C59E98D7ECD2CD3CB4497514FE12ACC0F124024906755F1D76C187349BECCCCEFEC2AFA2C68C50886121087C7FDD4E0E5BFEAB080AC98525900EF581C58A9D71880967F147E6E1D8CB94B9B1CA93EFD3AFCA6A365E44A0D1AF1759A5FBE089A3EF75B0049C09CFBA8D535B629F8FB672BA08B67B3AC7F6045E3116C98DE660D146141608C800 -MD = 7028A2CCE94A46F93060D40BB8B373C9BD78B73C0A6F802B55E5629E4A94618D - -Len = 1506 -Msg = AD079FF788E9089DC1D3E82BAB818ED4CEB3B31F501A1A78E59EAFAA6C5898A42D4A766E775F364D9AF8E0E3378CA0C0B3E3CED670688D6271966F6EFF622A4E862C847A43E6A600F9EFA1EB9E6CC3EA624921185F6F8909E9D98C599ADB8EC63ECB752F5F86C4312E7A9F6679E6FE3F181B525F50A6313DB2DF33EAA70BBC0302EE9C7166DD84D2E91CD064F9CAC2D9102938E76D5D78130054D532078FD3BE22FAA84845CFCD91D919ECA680A67D1987E264EC091D81B3C5C66FC440 -MD = D1020E1FF78DD11A8D99C2EE1042373C7E8E703677FABFF29F78FF89ADFAB922 - -Len = 1507 -Msg = 8837670BAFF97C556C9C46B55ABA348121CDBCD53A976EFBE084A1F635E37AD9B7CD3F510093010B74F663564F221A80E2582413E0334338525857EC20584D289870E51BEA927EB26C17B2B0EAC46863C7992D73C8395FC914C91C73B9B3A170A599D4C04706E314F8866292C663A8BC130C41209A92A92D6E8957428F1B0A03A36ABDCC1FA2F3CDE567A6F92ADC03496A2464B4B9F9E1634712BA3C291C4A5979A97D105B65D94FCABA9F717DF9B93C799E9B8ABBD7054B8E8AA5B640 -MD = 1503B883CEAE4F6D3FC015692EC9E890F4E70F0EB9238BF8DA526C275725A1D7 - -Len = 1508 -Msg = 5B41626C5658D205AC9F26DA1670435AD18AC4AED629C65F5DE44CCF1654B871E20FE5F0601108B7D3E6E1E773209D6DA0CE4D20D3865D57F7FA08B36B4278DC0CD5548EB1C8FAF0D3D04373A3FA5887796C3D18846A2A190AE553DACBFD712987CB18350CD4397E89DD7D176279181B762B4666471DBBB53BF8B9E53D604054B65E6AAE00CB588424FD867F745AC82191274939FA4CEECB109F3279649B0A9AB74A5B3DEF529D3C3E98B65E0E32E3568AC227322B67DA6DB28BA57BE0 -MD = 441C6882D04914527DE431F8BFFDB7F1BDAD4F7BF62798750E66D5117B3DF694 - -Len = 1509 -Msg = 76C5DDB4AE2FB58B7851A9F87A8257CA9FA782F690D436EE0EA3AE1C649258FD7DFEFE8D638D1176869B02617FB10C679F37ECFBCD6D8FDFB46A30D068F371867B858BBE3CFAFFB030D30F92BCA496D702759908ACFE978A986B000BD0C2D91918CC1AF38BFE0EBD997017CF687F70D3ED17EF486BFF5449C8141FA64548A6C4F34E477B4FC0DC9CA09A6EB9EC0EF5EC119CF14B055240D9078BBBA339BB8713F0B4DB7B74CBE88EF81B8B2851E377C26672D36BB908B32D8DCFE33820 -MD = 42D85C245E0C6D4150BA329F8029F320BAE181E4E578FEBA1A475E5A3148B620 - -Len = 1510 -Msg = 3231AA77DAFBC66F776E85C3121AC5B75EAFFE1E75E684E9E128332D857B397983FFA193A1982C966BDA623F065D7FB79F78794B7C70975F04BAE50C1E843E00222527B996E9407961E4EC08DC83851D2C6E4EFDD5F1B408AF0D9EB361E1E7CDEC6F3CEF0DA71DC0F4B165253F9AF8974039D1AE2B2FFECBAC3F366FBF999574A16B85277E74384B587005211CA3ECBAF1D8A6E2B4525D85DBB6E025A5A6A274D4AB5728BB9F0B60FF9E97598A3A322303FD228B487DEE554489750604 -MD = E18640F91142C9933B2F1C52726A5882A897B4ED6E4FFC5298EDDC0379CBF2D6 - -Len = 1511 -Msg = D40502C71D588EC7373853BEBB5B6C453EC1A10C11C0CBAA921723C5C43CA3FCAD59FE103A439421E0E1EAA81B927F7F90E2D9881A3ECF12BB041CD74FA925AC0F41800CDA6732720A94E1F64716EBB3DA6341FD33932EEB3A2C78148A4A241E54F3CA789C9E9CB798CDD048255E1CBDFAF9BB497428BF33D589FE2404966EA6ED025CF9D83974F82B0A0424DB9BD2E819EDFEF2CB75973BF5B819F1ACE8E0AE28A7FC82BC18A43B92FE9F86D1F9F3E09E5876DD33EC416357B036DD8A -MD = 3BF09FA05BEF999810EB0D40B9309FBC665ECBC355E2FE5620C5B6C3F028CE92 - -Len = 1512 -Msg = C9534A24714BD4BE37C88A3DA1082EDA7CABD154C309D7BD670DCCD95AA535594463058A29F79031D6ECAA9F675D1211E9359BE82669A79C855EA8D89DD38C2C761DDD0EC0CE9E97597432E9A1BEAE062CDD71EDFDFD464119BE9E69D18A7A7FD7CE0E2106F0C8B0ABF4715E2CA48EF9F454DC203C96656653B727083513F8EFB86E49C513BB758B3B052FE21F1C05BB33C37129D6CC81F1AEF6ADC45B0E8827A830FE545CF57D0955802C117D23CCB55EA28F95C0D8C2F9C5A242B33F -MD = FA2F3DE31E9CF25AB9A978C82D605A43EE39B68AC8E30F49F9D209CB4E172AB4 - -Len = 1513 -Msg = 164EC736064045386559CA629C733C82B4869BD8890BFAFF495CDF01D15EB92ABAFB515BF16374B33541646D671508B2CE2E4E686A1880A7833277AA51A69D5530339FA446CC614A423669B03B2305869A15FF83CDE64752F0515EDF5A9E48F8D032D13A73B7CCA40E5B2629CFEA0517223F39992BD3EE66F993EB52BE8FC70CBA3C401ECC4E7246CAF7F352CD581E4DCBF0C1A57EE47BE34F2F8D6B005C5898A9F1D0716AD7C2BCB028D939BF1259CC71EF3C21513139301B5A2E996280 -MD = 1A3A1D7B6E75C3400EED98550F4A3D32375DDCCBF1FCD7A6B6620E719005D230 - -Len = 1514 -Msg = 93A3301751EBF08B69B4F632DAC659C973EA72B97AEA6745C3D256B4BEFE304391C4A8178B3E0D68AA32D935F10C455F2D2B419FD4041A0362E7F80E99C0F7EE35733AC1023664E80F97D3CC8A23226C1719D1CA3AA5D57FD37249340F280573D7D4F835CD2AE93429C26635322CC5B6127026CC7CCEDD13686D085292136ECEE97C4027A3625DA2B75B3970CADE67F5B804045C91F5C8C44004958EB6FEF772684B260164C15A55E98781898AA2453899E373EC0DBC940054D35A789400 -MD = A17426A2C2716C5F67B0E03586310DD92EDDE1E786ED1C6E1C48FA64004AF3DC - -Len = 1515 -Msg = 2F64B5FD5A770053A8DBF0244449755471C20AEF67A7B7F80119FBCE5F1C7684E491495D28A1C2BE005F7F973A851957BAC2E70B034E198B3E43D22B40ADA9925808BFCE4FFDB92C96D90A185209EB0C1073CE48282C7066CA26F06138E574CAD984C2F76AE1D17EB05E873F1FD5C767A4EB43C2ED184FF148D55A394F862F140431BD0D1D57190B5238C065270580066CEA65F6A13FF92AB663F7AF0EFA9102F008C1C017C9164D5EB01F345A45A1406885CC039D79421AADF30E038D80 -MD = 1AA4576B20439FB8E3D2F064E91D96113776F00D79027A2161797793C7994AAB - -Len = 1516 -Msg = C95EC3A4573DCDEB8ADD58F4529EEF16D9E31C2F9CE4DCA1781F22C9F9E74A47D3045526C7C053030079B462E6A38608697D6FCF7C0C2563C76449271F64B00025BE2DC445ED740C95D605CFB974769140477612080500A7FC64BDF267C8155AC9A068929485CFAF0A2C1EE2A8A005E993A4AD60C1FD2D6EB9AD6FB24945C807AA0A879B601AD735655121A119D87E14D0E3432EA6580137FACD27DB351ED3901F5C6330B7EE827BE2099904793FF3C6F3C88B2D684D10531432DCBBDFF0 -MD = DF653A7E5EBCFED10A12678DBF2FF011B7ABF54C5AECBF0307E62D9F71A13816 - -Len = 1517 -Msg = C1E2C87F7DA563CE3970CE5F1BB25EEE582DEEB4D95D5930064982B139CFBF0396DF7F4625B175AB5DB3170A42DCB97FF3588FFB9178A45D9B7B147B5361156393DE9581297BFC47A9EB4F4DED2C05119C97174FF0191C27C83546CA1F06DB74EF562A16D61330D2F3568A2F09659BE40D5CFFD1D8406711D90B51990AD575D1C34A8138A9ECD2F7468CD39DE4B9536ABC19CCA8EB729E5437DDEB86319B5A7412975DFF6EAD33ABD1F598061CAD24DC0810DFA064A3947A773A338C00E8 -MD = 826D2B2807F0957E07C98FF29DB17A8620A45072A5F4C6A829D2636A99C81345 - -Len = 1518 -Msg = 98F2A571C0545A06CA3830F8C73789AC2B5361BBB2B93AA1AC877781F827D3C207703FCE38031BC54189F87A43F10860D4B402DD65A4DF9B5AC88AF2B0B37F68BEA1086929E65DC2AFF2C2FD215D6C8374DE7A89C407F48C63B203896C353712BAD1AEC664BFD196F906952149E50600F831F05DF71301E0DEBE49591375956930D72D15550655E48A8080D651129C5D2FF92E80A3C13745E74397FCA228AF940A349B3E90F51CD58666F1BDA760B6A46F0558E140B6DFC4F5748C58BF4C -MD = 88CEA4DF2EF7429232AA9FF09F17081E8F263FD994FE102BEF45E60A7C0AD926 - -Len = 1519 -Msg = 0A1CB542A7A25319117119DCBFFE09F7DCBFAB7B689182255A9A962E8CAE47736835CF659D7514E0DE2C68D319BDC2A220159B1FB090925AAA1660E1867461AE0FA3CFAECEEF44344D60C6803498DB0250E193482ED57871FA5393604B77A5B5C9A9299152F889407A1FC6D7309888F23FCD9955A43E3469FAA8B13676687C46DDB31D3547708AA814735735D39BA14CEA70E893DBAD172A244E51B5499D7607DC7D724F74ADC906A8C3909F643CFF39E5C3A41F12EBD18DC52E9BD4DFC0 -MD = 81D3F99F822DAB970A02046FBF121275D35BF9918BF13BD8CF1E5077A1524C62 - -Len = 1520 -Msg = 07906C87297B867ABF4576E9F3CC7F82F22B154AFCBF293B9319F1B0584DA6A40C27B32E0B1B7F412C4F1B82480E70A9235B12EC27090A5A33175A2BB28D8ADC475CEFE33F7803F8CE27967217381F02E67A3B4F84A71F1C5228E0C2AD971373F6F672624FCEA8D1A9F85170FAD30FA0BBD25035C3B41A6175D467998BD1215F6F3866F53847F9CF68EF3E2FBB54BC994DE2302B829C5EEA68EC441FCBAFD7D16AE4FE9FFF98BF00E5BC2AD54DD91FF9FDA4DD77B6C754A91955D1FBAAD0 -MD = BA2AF506C10DA8D7751E67ED766CFCD47D048D6EF9277DBD2ABFE2FD5D787B79 - -Len = 1521 -Msg = 047A906EB123927C5EBCBAD31211D731EAEAACDDC7CAE1A13D4068154D317BB7C010D5FCD6C4D800F3809D5083F8625BFA9AAB71E1687689F43FAC8675F51400DE5489CDC525421C8230B732EE5EAAF76B11B9BE4CC49C815FFA8B658CF0F18388C9D24202EA611E086D31BE4D1311E372E0115CC5E4ADBBC6E0B2C371410DA89196D8E447DA34E6B3787DA9B4293666FA6585A76FC2B130561790DD10C478A7E071F8EBFB933664F54ED398ADCD1FA35FAD11866DBE05DD8CFEC00549D700 -MD = ECB24E86DD22A2B483A98087EB5B7EE04A26661C77141631DB29D4BC0D7617D5 - -Len = 1522 -Msg = 18059DD3D09C5F36814FE25AD96FC6B6BEEB0DB9ED79D6E8D1E252E2A43DDFDC9E156FD215BF8426F6C5EA127510BB99777349A0EB03B68D03CF8B9F10BBEDBA7482A86E1D8E054E60F9821083424000C215D13AFB47D3C33699F452AB7DA5E2C95685C7C87E4F465FE78A8E79C76ADDC3501C99C1734D09DA817EFCD4809CF57A105BC1253A6D2A4E23D2E431A426607CD1C61980CB26143F03EE50500503C63F0206BE5B238888A038B9EC34C24D5EB6E70DF31BED948F373B4F7E52B240 -MD = 2F3918DCEBAC552600BFE9F9031E26789F8E8FA505CE29021925E8D23073F0DD - -Len = 1523 -Msg = E31399BE5D40239F6B1925B165BB34573FD8FD179C082027792F94B67D2545630F0A680E85D2B835E31CAC2504ECDB49D191977D0E4AD69A76AFDE5FD7A4D70074E9B522008D3A5A1A6D60B722F84304395E2D7B7E29805FF653216833DF11C367448AE10E11D37091590D22EF1C97E16B3AC8CB900ADA0D357C9FA2944313D6B796E1C9995B07C03098E3777B7582A7091F0D03A611BC76622B8CBF80DC007574490DF0A5B93F25A1A6EA9CDD4515CD9CCCD46A56B116B7579E97F8F22180 -MD = 0CA0D877FFC81447951DDA26288A09B7F46522AB3DAD47AC0A2C7CEA10673E30 - -Len = 1524 -Msg = D66E3B30963A1D5F71160CEA74CC1E8C3CEFBA41D2CBF5D0E7DC3A97316E6B21A7D7C5ED1FC7FEFDB8B628BACCF0CED538FE6F6B18A8D1A9DE4D8E31448170F4CEA96CDC7A9F2FF0A18A4955C75C604DEB98AC158961D6891AD5FA867239781DA424CCC806E57AA77DB7BFC85AAA7EC720BCA36A6F0501E2D55D7BB16469C9E4018CA34317F5D1AD6DB2F0E410493BC8FBDF38C1B8ED1ADDB62C2F5B7592A8D8627CFE97F0FF180524845C8D6C5ACD823FA1D810FF8E228C531EE61BED5330 -MD = 283B35A21337502E8FC0846D9B10AB00FFD315042C3A92670FD29283807F8FA7 - -Len = 1525 -Msg = 9274C08E458E1AF850826A75FB9A25F7328C6F427EC1B9231947306D864A8759E7D743F85EF79160F6ADAAFD829640C2E6C88892A21F0E52FE1746C57CFBF740D5674AA41F59A0135E66151B1FD654977A32C5DC744AAB2EE36D60A140FECF6BB5BC8A5BA8CE7CDCFA218F285B93C89B07E0349B6157241F7061901DC426BE93956089B38093513C792CDF73034989F8129B3232B540D5F8C86417194AD4AC481FD5465B7777952A4D3A784B0C10AF4A75C6FC09AC20973780B30110E28B98 -MD = EF9A46534CC6E0DAE81C15BFDD10649DCE007F32C54EE4E3D96A36FF429E1B3F - -Len = 1526 -Msg = 688D106A612E437C87E453D503FF3341FD0AC63A6C0AE190E5B7CB426F671DC919DE4A8A9FA6DE17B8D489DB16ABAFAE781A83A349A570BE5D5493D2882AE4FC881CB10BC97898BB67DEEC91C1A15F85FADF051B256F0A3098F539C84D51E42049011EEEB9BCF709146E76F0F491E1AF48EFD41EFB19406DDF842D25EB8DDEA67AD1AFDEB758F6A604938EB746680C5123080D5FF2B3CD2663A7AD7A7DD76BCBA59739B36ACA628C5454EA76496DB11A1538E00E632FDD41F386EA85C524B0 -MD = DC73F6E7C1531A76FCCD81D12F0B0124E1AFB08D548A17C651292E42FC8DD4F9 - -Len = 1527 -Msg = 1D7E3221FD66FB9CDE83AAE60A4D78AB5A7A7CA08B829FFEC5D38D838F114B2115D29577C055188CF149F28C81F76D6800DE3A7E96BB808D13081914C9159441963F9833175B952E5B6BA09D62EF241AD19CA7942049E2575597B1A53365692BF46B211B6182D3C2321C15883A9D22FA8BFF917F26102F4E82331109B328DF7359836BFD008FE4F4AF0854EBB6BAE0561EC8BAEB054877F3BEDA6D8D402BA47270DBF6207A243F7ADFF17658E35D6F52186E4D79572B99D8812C67C41617C4 -MD = 892A5285363673DAC285A0F9E7636A9E12268B1FFF68A7463D4071459167A1DD - -Len = 1528 -Msg = 588E94B9054ABC2189DF69B8BA34341B77CDD528E7860E5DEFCAA79B0C9A452AD4B82AA306BE84536EB7CEDCBE058D7B84A6AEF826B028B8A0271B69AC3605A9635EA9F5EA0AA700F3EB7835BC54611B922964300C953EFE7491E3677C2CEBE0822E956CD16433B02C68C4A23252C3F9E151A416B4963257B783E038F6B4D5C9F110F871652C7A649A7BCEDCBCCC6F2D0725BB903CC196BA76C76AA9F10A190B1D1168993BAA9FFC96A1655216773458BEC72B0E39C9F2C121378FEAB4E76A -MD = 3CD33F8811AF12183C53E978528F53AE7D559432724029E55FCFA9B990B91713 - -Len = 1529 -Msg = 7C7710BB2B7F643FA7A2DB758E18152AA812CA88461EFCE1177656AACA4F236555CFC69040EDF76686F30B233462AB67614FAFA20028DC0A42E6F362C8A978F12560DA7A2E4ED5CA37CC7D79F7A5E8DE92A6B9BA7D1E4ECE52E22A56904E39DEF32F2D03B7688AE1C3E499FFE9929D9577020465847E5B70710E7426A4F2552511F9DA9F8B7D0F7BE1EF17102E4562531F8259C07B52270DA01179BB320F7ACF3F5A6E22764DAC232EDAC5600D1C70FEAE0B011EC28D9D0B66A6CB860A5E9180 -MD = 64F3ACA645D5452C662C7A5560F6FC32405A4C6D503EC390286EEE4E25E7E8E9 - -Len = 1530 -Msg = 3BE11DD7FF78BB7C917005B235AC496BCA96A4317FDE079F6D358D95BB0352E9E89C29AA781203E5FD63DD2F685810386950E5946C0B9F0EB88877AF5175EE884E76935F5301DF59C79A06C5BFC6620C4D6FCEC86FEF9E518AB4146EFFE8813759D6415505D84B0EC66D58860D4D415FA36A28753F7C61A5B7845623322BD7743E079C82E6B9206398D665AC18C50FB073BE119AD5532A7164FB8FF8064D0D1706A2FB430E37AB478E4032CE110AA96B7963B636043EBB873F21FB106C5CC400 -MD = 07DDC41A0D02CAF37765BA23EAE2FCCE8EFD65BD7476F9E2EE4BEF7888FA1CE4 - -Len = 1531 -Msg = 50E7C9F830EBB80B5AC8B0A5B110483A97D5C549D343AEFF2259BE20E036CC1D80268C085B9C25317101E24E165C577D04E07887AD17A58E799C4C6758D8FBA836B4AF48D2CF31305A11FB92CBA4B23C4060F4A11BC2A1B8151AD547C6E9009DC1D46A38C633D956EF5CD75E1D697BC6D1251FB33A591AC4B138AB72C4D5551FB2C73BB5D946E16D7A9FEB18AE38BC58B2DF4254E650B8EE4AAC94D9444DCE18C2CF4D38A80278BB2E7FF0E167F252C54CE34589D93887BCD6371C73B99E69C0 -MD = D3F8CF520D0931DA6F6D960C78234163CCCEEABD68479E681555CB6492601F7E - -Len = 1532 -Msg = 939685986E3BE870F1D7514A7AAAE50CD58EBAFF6EFB1FB64082D27AB939A40A568EAC0C1BBB33594E2471BB545FFB09A804176250C6E7DB8C11D0833EE70C09CFBB888116A7C8EB064BB52794425058AF707848DA63418A979231977D11FA509D7696C58FE3647029B7A85F9E6A682E195DE0D9F2AAD7E4F0DE6F22040B7A26720742AD89F34B09C8BFDA2072A0D43EA0AE4159B6178EF28A8A8FF9899679178B433BC78097924806B4DD854214D3EFA67F9C44DFAEFFD944E94E03C5728400 -MD = 8916790B645E686F472F69648772FA122DC8C2C7227A5D8189B9A7EE7CABB8AA - -Len = 1533 -Msg = 82EE3ADEAEDA69F4A21548A9CF4DBD79B6E6652782541C9B0F6F4C1589316E20E9EC5E6DA563449DA640E2656B5B790E1015BF59B647039625F3517EAE3D79279FBA90C40BE10C26D9D68C709893BA8EEE250C12E65391A66E452989E5CAB836B371975DD71821F23EBFC5367CE5FFC7B10FBD79A80B1865253810CAABB06DCAB11345FAD11F2A95590F4F35EB3D465BBECD174AAC660821DF9A71BDA01FA9C71D96E7AB191290A0A03EFA2EFEEB25C141F8CD8B4FAC6A075BCBB67E3B275C80 -MD = 03B687D9FB5ED35486AA3DFA639DF17CCD8199D8C17D8346C58F765530E5BC8A - -Len = 1534 -Msg = FFB1B0703490FEFC1C9FCB456E94CE7BA6366570A8B71D1B65B06468AC317461946ABC9B2330B959183BE534661975956C57DE13EAB4147E82C3CB72EF21524B35EF0254F934D966EE7A01861A3AFA9CA333251549859FCB105A36F16631E72DE0C9BB3D1051098F016E0864CEA78B4144DAC493C5088C2F212D29E115EBF3B6C7D382C25947950E9759BEF6407F8EF8F1F3BB9C65EA9111C3F4854732B8E8FD7F9C369D7DAAA5AA57B6061779ABE02C34419ED60159C8CCA33FE2831E5A3814 -MD = 69840F46D6C276D6F4277A32CDE54F63B9A40EE1C20EED678A15DFCED30A17D8 - -Len = 1535 -Msg = 2EDA3FAFE9381A10FFE89C83D818ED3E3F061F08A7928734842BB8B81D99019A342752418607DCE8E2EDEB229AE1D7E78111AF6B5C19FDF57BE5ED53F89BD7ADAD2265D25468529AA2A20C5FE4AF81ABF93FDDC23C37103F9795E13ABAAEB0B89AD0F7CBB5D65CE9D9C66CE49EC666920BED8A8E7CBE1343336BC82448594FA18502AA72B5FC509CC140F69453138BD07C00ED7B43992D04518416A863AB9793E527F31595E6E6E8A6D71582444006D2639A58181EA2B939B7AE1B2DDEACF3F0 -MD = D0738DF5F13F9CE11E0B7F7E6FD09DB91265D904B1BD30E4B39D261AABA12108 - -Len = 1536 -Msg = 08959A7E4BAAE874928813364071194E2939772F20DB7C3157078987C557C2A6D5ABE68D520EEF3DC491692E1E21BCD880ADEBF63BB4213B50897FA005256ED41B5690F78F52855C8D9168A4B666FCE2DA2B456D7A7E7C17AB5F2FB1EE90B79E698712E963715983FD07641AE4B4E9DC73203FAC1AE11FA1F8C7941FCC82EAB247ADDB56E2638447E9D609E610B60CE086656AAEBF1DA3C8A231D7D94E2FD0AFE46B391FF14A72EAEB3F44AD4DF85866DEF43D4781A0B3578BC996C87970B132 -MD = 3ECC9D27994022045CBEAB4FC041F12419CEC8060C8F6F9F0372884DF6074B5C - -Len = 1537 -Msg = 22BC0AE27FED148842D8DC7A4F75EDAFCEB1923BFFEC9837198C87BC5F982CEF077B6031316C06346D9A47240C5C3B719C8A13D178BB248724E79DDA498483EC4DF8114D007630A995F81CD17899B264E1B5878645842C1D918C4427E1F9216D79F1B9CB8C69393D0A4EBBE766F3ECE21AE05DF4F67F045C1CC10F713E4A035D2C4B427ADDE84327FE6B8DA75520692F094EBBAF83D4F2149B2E968FBAE7AAB189CC988B4EBC2E20259F5C24C985FD3DD451ED9F4ADC3532C792C3E404C75A3E00 -MD = 1089C8051AC3A5456CF84F9967BF88FEBEA7E143C47903F82C380FEFB1D8A28D - -Len = 1538 -Msg = 13486FC0E375B8F22813F4066F9DC1695F945173CFACF57B9FB00518869EEF6AB5F50AF27DA2B72AEEC03014CB5E43E5FFF3EB6F1C912DC35C790962B834A5FA85BC123E09EC6D366CDD283ECB250CA85FB27F298A4719FDED869CEEE330C699D0AEE9A5626D9F6CA7D7891081738A5A897A1D3017AEFF03C74EBA000C53BE5AB121598CAAD58DAC265EF1ED5D365B25D13675FFEEA3B329210D9E3275CA305911075B44EE1B5F18572CB7CD15709957DF8FDFB0A05CE60DDA4A99C1797A0CA340 -MD = 1DC6F21A9592DD5BAAF8E45186EEAA6A57AEE72F57BD2D60C3BACC093344CB90 - -Len = 1539 -Msg = 4063E5DC8320BED3AA4B6F13EF74C24E98E28BB686EC8190B5DEE2CECF117A905795710BB201CA7BCD6E5EEBDB83D462370AC4311389EFF237934CAA55777A29F6B3F1297D4BA0D41BB0A62BC2CF97A6575B2DE8E7E9CA0489D4B9603D883F3576161763C53E2043DB33C34F6C898C975F5684CCAE891C27A5C81A72BA06994B6036BBF3B8646235B317C5CE02BE028FCD26AD04456C89E23DF63304158AC1D6E3206B94A4DC0C5978F3143BB98F7E0466E4A826C40CFCB88B72D56F0968D4EEA0 -MD = 6D975A4F20C21CC3D9433CD5DCF13154754956C1E31FCDABD7D63436F430D469 - -Len = 1540 -Msg = 6A8DF103843D2D0485A3A89E41D83DD78A5310735F3788D4A69676CA4892190FC81B5F2B7AA11C68F00416383F13ECB8E299215C57A313A5EB4BF1A23B08C978C548151C515611A5CB0E75689A480A1119CEEF5EFD2043C1E7746A410396CA2873F6F0D949F35D6767E4986113061DCB15A5107B8E6D2AF4679DDE9E8EA8916076DD202D268C44114B26FA113E254A9512D73D6EEDF6A55BFFDF46BD330B354586191967C0B14FE5E3D29E8BB7B2602134E2EFCE6A1FB1797FC14D73A1AE5F8FB0 -MD = ADB1C85C0D8086627B439A0CD4570425E8C68EAA725D6B031B51A7D58B20635E - -Len = 1541 -Msg = 3CA201D57CA5785111782561451B1F8E3FBA9E6162D8DE78414F1F1C54C8E2A201958CA179D41EEECC204212BE77D90E73269AB485ED35CC96365887C076688E25E89F5854FCF9FDE708F6570BD8ECB12388D76354D6CE6944F2DB2B1499627FF5181119F60A0C864C3E3382CFA21901DA25B0E7DF7A1D944AD894E47CAC5895CDB75D547DE570396E6C1114B4B68702524D1CBC061D099B6926D9F2AAE4F8B54C5620319315381185795F3F0ADABFAFA6188C580A11527CAD352C20ABD9714280 -MD = 5C21B75085A686D69BE5F5F0FCB16A091B3151109B94EFF7B674C7E0318BA98B - -Len = 1542 -Msg = B20C646228BDA529104BE210123D5E51708EC173F76C372912124937BA09F9CEBCA094B382B78A567963BE62D958937BE084B82C10F31E03A5675529D8BE52E1EDAC3830C19F76AF099AD547EDBEA4698ED985A4F077C55CE029C512383C8CA6BC523A66DEA3ECFECC2F267F61C57D74ADEE7AC446903F7C90000BF0D2D84DCB240EAB650335979F93D67B5C206F1C8308EE90DDDBF8EFAA5EADA079379E3FAE3F414790F6F63A1AD54651164F6A9BBEA1606D84229AF9A9DB9826A51244FD804C -MD = 273B512FB8B36CB0AB58567A389AF391328849DB93CD142C3F34CE303F199290 - -Len = 1543 -Msg = 0F224183DD571D3B290DCD180DB3677C9A9B162D484C8244CF40D2DF67A249EC305B9094BC309FC182F3C12BDBE0562B8FC44EF0961A0FD03317BD2058D374D45BACD55303B1F8D5C59C7D5FE05479E5BC2CB2CDB5B447ADD45427932003BCE15F835AF3A9B94E1C4A7F492C0983D8D406C8428D67C023C6361578C9A6B5F0EAA9DAC2913D4CAD882C05C275B8A7EFC4BEF0C12E066AABEF350DDC8EE4451595379FBFE98C7D2EA9F6C770FDFFDE3852C818322927347B4CCA27EA059C8644D9A4 -MD = 59DFB1DAF2BE0521FD414955FF98FD321BE8AB8936F043236217E796D28BE1E4 - -Len = 1544 -Msg = CB2A234F45E2ECD5863895A451D389A369AAB99CFEF0D5C9FFCA1E6E63F763B5C14FB9B478313C8E8C0EFEB3AC9500CF5FD93791B789E67EAC12FD038E2547CC8E0FC9DB591F33A1E4907C64A922DDA23EC9827310B306098554A4A78F050262DB5B545B159E1FF1DCA6EB734B872343B842C57EAFCFDA8405EEDBB48EF32E99696D135979235C3A05364E371C2D76F1902F1D83146DF9495C0A6C57D7BF9EE77E80F9787AEE27BE1FE126CDC9EF893A4A7DCBBC367E40FE4E1EE90B42EA25AF01 -MD = 1501988A55372AC1B0B78849F3B7E107E0BF1F2CBAF670DE7F15ACBB1A00AD3D - -Len = 1545 -Msg = 094879F98FF555E949C7165606B1A9A17BF188B2CE0C904C89AE519373EF772AA8A08AC42FDFFD933F18EA8DFA598B5119D6F2FA75AA69B5E18951F4553448002BB547763E7699D458D04F893B065869ACD14F7C6A39CEEA6320A63158E7878B94AF3A3116A6150AA23B624395F1555BADCE532C69C256433BCDB2E74985E330CF408F00DE21F0A191C83E91FDE112598AE5B49916462A6636BEECC0372E7AAA0F70E8298EFFFD9E4FA943D2AB32B1936423AC4295BF143EDB174F5F1E40F52E6400 -MD = E8FA5111C2C887618F6D45C8283639D60F245B1A58570A437A039DA01E2DC21E - -Len = 1546 -Msg = F535558E373874104E154A503F82CBCAADD4617A38E9670CB3C012869DF16AF75DB0E9AC8866A48576A3EB212533E1064A60AC17AF43BF47A7D2464D93BF2261D0DA09A9F97D4FB5881CAE75B065E9F76967EB9E39A4770889423649B70CD15F1E091A8950C51F3AA29F66E99BC8C084627625899FAE82846CEF1979A94E29D9AA90C0C5E32A30BE520E7E7BB5EF0E9CB8CC5D2E9E7F41C37EBA0017C427417543744915A77B72DDC3161929ADBA0B992E9EC3B8626348DC889383D38060A8589DC0 -MD = 648747039FE92CDCAC3A865EE23CF9085B82C17BCC3AC1E8A925858F99B1DB97 - -Len = 1547 -Msg = 4AFB68BB38DAF4C64A43D0892DE39CF0EE0B24499F434BE306967C933CECB3412F0DAA124E67FF1A58BB26C9FC9F91B6401317B84E0047D4B6E57D2F3D9C88459D1603B2748983A8C3B4CFE6E81EB9DBC299BA3927A3E1F76A5F54812EB9037189EAE3B19417B8F48CEB2C025F122DB62036FA4290B38DDB90A9687008A1B7D67DF503371785D1C7519FBE21B5B09C448FA69EE914355C95230D446CDBAA90DBDF354AF8C86E01DA389F02296A6B86153A078467B85885D276AD00216FF797B68C40 -MD = 3166E37AA88120117A00DC72828895E3A05EF36F86A0D10DB7F0626340D1DD53 - -Len = 1548 -Msg = F0F4921AF9447384288AAAE217F8C827444426E8F5D06C61F7E6F02ECA806556C4A0AE6268E6A9C2AEC1A3081503BADAA999036760C234A66B6879ACDD9F59FE28EF3026310C1291007F0FB092D26F7E4B7B60C448E455A114D248CCDCF7CD295E3DA226E2FFE2C4F17E5B1EA6328A2A32DFE7D50083AA7516D90336179D3D6E10E77C131562834330233EA33E4B96C81570956BEE98946B2D2644FCAAF829A7299438DD80E22E81F944D0B295ACEB19608FEF6ABDB52A34C2422E18ECE9D8FA9A70 -MD = A62E3E63C74E7140BF0D7D5207AFB3AA1269C74F8A70526798DBA39999990FCC - -Len = 1549 -Msg = 1E9E4FD505A9A5C29F41B86F0B4EF8F615209F7D231E08DE0636F4F1B01FA7DB51F1869C05591D5F0E5D758A1EFCFB32F4257805823E67C4D1F4C6A70D4AFB70C1C99E8E144922985400F778D676173278DE0B7540B667005B604EE77064C80F0B9A7BCD2317DEE692E2A7DB69BC4A1816675ABF2815AB732E187CF76BD7DC9D46B7258A6F6207C66F97E26CF154A700216A0BA6BF410AF4189633771F25EB8C38ACAFAF9B52AF64E29ADFC91EC48416BD51CB90FE6747F9706CC1FF347AA8969CA8 -MD = A9FAFF3D30B0682E3FFB504CDA03E45B947CF267AF8D85928746438DA6535363 - -Len = 1550 -Msg = 1140A34A3BFBF1949E57F8209A253EB83F61FFBD9C0565433BE3ED949DE5E4C3197D6DBA2BAAB08A8E30FEECB6A48DDC96D5FC223A9E2A558C981018FE9EA08CE870ED81DD7D59AF73D4D5BA16B060CC82788558DE63FEB733241451527ECE313EFA7F05ADD1F3BD710069E0929B1ED4C01307C89655E07B0F89EAE1F701E9926FE6A1FF414E10FAB2FD0212C33F648BB3A3C9DA3AC60AB93A37F18C4B59888811B82349008A277415720D72EBD37C2A45B66094128F10D066D358E7EBC6E226B0A8 -MD = 05EA8AF1D0C4E6E5B9911CF0646DEE4CD828DB127078AE7AB7AD249A23F84CB3 - -Len = 1551 -Msg = 7A1BCC212431E90B8FD721E8D2CDF5B07EF8F8CB4B57DEBAF2A5032487B46F20F99C2951C769BC728C053B532F29420692220C958BB6783BDD83D36AE85761EC47C546B742EA51A041CBD7A8F57BEA69DF6DF348AB4272D7300AD9F263C7F8F7E631874B4CC40CA3FEEFA74D9F5AD720E6913F7A79BD94EBDA147C4830AB443C08D5986E045573DE8E65AEFC979FD84B25FA1C6F638AB86570CC5443DEB36D05A8B05A28D8A7F95B6510E956F2BFB9FB90A30BCD8C9725D1CF35CDA63DFB1E51AA46 -MD = 13BB6EC58B7020B65ABEF338C2ACD2D2A3ECFED8F3EB780A601F47AB10E120B0 - -Len = 1552 -Msg = D16BEADF02AB1D4DC6F88B8C4554C51E866DF830B89C06E786A5F8757E8909310AF51C840EFE8D20B35331F4355D80F73295974653DDD620CDDE4730FB6C8D0D2DCB2B45D92D4FBDB567C0A3E86BD1A8A795AF26FBF29FC6C65941CDDB090FF7CD230AC5268AB4606FCCBA9EDED0A2B5D014EE0C34F0B2881AC036E24E151BE89EEB6CD9A7A790AFCCFF234D7CB11B99EBF58CD0C589F20BDAC4F9F0E28F75E3E04E5B3DEBCE607A496D848D67FA7B49132C71B878FD5557E082A18ECA1FBDA94D4B -MD = 5C4E860A0175C92C1E6AF2CBB3084162403CED073FAAC901D0D358B6BF5EEFA9 - -Len = 1553 -Msg = A49A1590851397A7413ED265B02F89516A78D73558C36139B23BE5864E2C42170C24F08E3058C07CF8F07A41C1C161870D32AAAF5B11D08FA5682727B85B8D6AFE70000C95463DAD5E87FAE024881569BE2A543677F0BF62955E4836A2254D0047687AABD8D41E3842F37D5CADC4935E7C9526509FBF6DD4F4E69CBDDD2CC4439A0B0F772AC4EA3E14D560A85EA98B5929C54B33C0243F911AF5CE4A87A145763EF85A72B94BE5222459F49D330D1A58281383ADED89ABB3CE78A471364C2F9895E800 -MD = 0FC6FA835A58C63BDCB38386F3EA11E0A85072C92FE182DDF45E9D7482E37B60 - -Len = 1554 -Msg = 037810EE77BCB2D3B7438AD56F145E4E936C170B5056FE2074D1D274C432856BDDE9568DFD9DE410207043632DC20D634159022A300D6CD82A6EFA4C0D7AB7E899D0979E5A445076FE31C898EC1F0F2A7A171417DCBD88F581C7ED7F61234C05A61CBBC7FB8B2EE4D656096042FC54F6A8DE6E472CE691165B9F3CA143E5021B606B9C1780F84FDE02255F75A9082A5685744C2059561444EED3271F6E6B287C36B729597A6755E257FC41FDD23AC9004C72B878B3199AC5EE1FEB36F94BFC0DF6A840 -MD = E933C7F21152C3E6DE5597E2E38B5D5D7A8826D837A2389DDC97E8FFAE92D00D - -Len = 1555 -Msg = 71F4A1CDC25DA28537CF2C3DE9730490516C3989543132786A77CF8D6CC2668D0DDF4D78A057B4AC0CA61324A18172010D6659AE7FD66EDCA465B920390ACFC93AF248BCF8841452CF749256A709DDB58AE3A7F7410247C9746B31518AAF8FC960697379AA66CD7F777666CCE898C8A22FB5C34933960B98E1B599F4795A7C60706147A7C08DF34004449B94BEBE5AB258DF9E1D0FB1D5A9FBC22042D9316D3245BD80EF488084C00EDC7CFD47A445BA99479F7D904ACD1031A0186D70C0B0C2B93980 -MD = 22A3BEC36BE28010CCE93F8BC6758D51218E8A5E8068030A1093874CAFD4EC86 - -Len = 1556 -Msg = A74842C1312297AF8D3C14B1717A71D2125AE4B27CB1F75FAE2BCE476BFB2038A514AC60F4484894885FBE3F28E9DA5C5BD9288D1F912B46EFD2FB928FFF70A6B3844E2953400303D5E270286D8ACDAEEDED6EF00DBE865DE3F6D5E54DC76B93C3412B999F39EA46E2B1A9969F1B09C8ED8E0DFD4F4E882BB29A0C1F2660EC4EDED872A7108A4FAC824623567B15D2B2EDAADCD5D7A8756405870CFE1C15F0C763CE4AB525A32207CAFFFE093BFBE7696D8A14571AFAA2F08FDCF55560ADA17A52BC00 -MD = 958C00AFF6DA289C1226190B1C31E9091D49255BBEAD4FC5F2E5608DF650FD91 - -Len = 1557 -Msg = 0E9FA73B82BDE1AD7B2D37BD10CBFD89AAC53EEA32EB3C2DAE512B23756B9A696B19770A02B0BA0AEFB5142C8FC7314B16D8894D0426C7C0ADDD875170C0B709BFE52998656E22DDF7FFB697D457A1C07A290BA236C9F90B2D03BEB8FFBB23D750601BAE49A732ADC3C3CEE3029370E0B26FBD4317A2F23721B20CB760BF7D4DF04C30ED3A11213AE500F9085A7EC53095A99022D75E989F1C983D52F40112229D9BBA5D342D2638FC7535D8F540168293106E1B280CC4491E4AE551041EAADBE20878 -MD = 35A4AB18E068BEE6A9095A2A3AB61660B04CEC5977F1B9EA154A241C487F1AAA - -Len = 1558 -Msg = 7F725C787CF708E35CFD6DFE7F66D223C1048FEED331B3526C6360F846C0FAF23158CE2EBF2621140C5B4FE92AF12EA8448DF6821208D2C9A256D357E43566B5BDCA2F33CA9027063F557975B766F0ED1BE8626A17F28A94F41D4E6C51F0B8885C505D75506C6730CEEAEC765C4B0783A22782209740745DBB8172E89E92A29E136298240E7907BA38C893E21F23ABB2ED2D43A56AB9747555C9532AB47BFF6A56653B9097C05DAA6EDE9E262622987715BADF5BC25E9FBFE6E12B74F789367BFF8BF8 -MD = F6084171094EC576A2CA795C411EA33B6EC03B165A011AC5196DD0E42DE54D7F - -Len = 1559 -Msg = 185219625F19DC9F8E12AC7256DAEE6EEBA17AD72FF821E180A602098C22372C5E18D969B9059A882A22E10CE2512BF7A8C012E43A8BA8B61381C22BD1C5C4276722AAF3CC66C95F0450783D9150854CE0C21DC9F92D3C64AE6D1F379FEE822E886949040813534ABF765756B20B8586A2B73EA55A170B135A20BC3AFDD1D64E8D667CB5BDC815674F3BED646F890CBADCE08B475CD01CA656F8A6F87890271BB0AF3D98B51F3E98C91B641FE67E8F13AB1715768CCF01F34A61E4B61C9D559D0F1290 -MD = 7CCE291E01763B4D5B203A0136C55BB94045D8CB30904F7C4E26974E28D6AAB9 - -Len = 1560 -Msg = 8F65F6BC59A85705016E2BAE7FE57980DE3127E5AB275F573D334F73F8603106EC3553016608EF2DD6E69B24BE0B7113BF6A760BA6E9CE1C48F9E186012CF96A1D4849D75DF5BB8315387FD78E9E153E76F8BA7EC6C8849810F59FB4BB9B004318210B37F1299526866F44059E017E22E96CBE418699D014C6EA01C9F0038B10299884DBEC3199BB05ADC94E955A1533219C1115FED0E5F21228B071F40DD57C4240D98D37B73E412FE0FA4703120D7C0C67972ED233E5DEB300A22605472FA3A3BA86 -MD = 272B4F689263057FBF7605AAA67AF012D742267164C4FAB68035D99C5829B4F0 - -Len = 1561 -Msg = F7F5B2062D7FE77A5C1CA6173B2C72268E83D68BAF6AA3F4692EB7587930F0338FE2A400369E6E414AED899068ED7AF8BF755A1E720F3176DAAE62E65BC8D91CBB1BA7409B4373B245D3655408D22B402FED1480A92D4EF3BAE5E6450E2D7846650C684E1B174FAB86F05A228969CBB3F7D11977A2E1F6EADFBC6A0531EADAD2970D62B63E69392BD0A55FC315F92BFC9C383579D390FC447780E429E5D28DB5116D9E7129FA5D61920D680C743986D7B4E21A9C54FA272066978D740BF35C572F418C80 -MD = 7A40E260C2DF2DB33344CD2D1D9981036986CB82BF155753AB94039E7E1593FC - -Len = 1562 -Msg = 89CC05BE42885C72B4A3E790F3E8E0401707A5B9EDC34893C4DFC8D9227F9B98480AFDFCB8521A1B2B7D19F9BD77712D3D7538EB74F9BA09A1910BB065A6A809CFA777C25DB447B6047CDE44FF96C1ED5D93784A2F4D261EE4DF2B083EA5EC3FC070832648A43A8836616AEC89909E89CB1BF034BE1C69E25E48369FC2EFC345F9A4AB91FA20EF0C96F81EE00F597A9B13E5FC1816F5025802A30F79055FC607B0E0F114DE264FA2E3F2EF9B488615BDDCF810F8944162C682BAF41642A6374D773FEC40 -MD = 43FE0943434D08B712B9CB060CA08620289A2F9F8152CA985769CAD42C7F71BE - -Len = 1563 -Msg = 4F6927F8DE4BA416E9C4E063B80599F4DFF974600CC6EBEBA4709EC0945395EF99BD5B7D77471EF6C04F17F9AB7E1B91622A35E47148B7533331E9986220B9E4D08F254BE34D61A0074DDA157D3DDAC8F2DB4711BF5730F65097A0629B741353CD263FE173BF72D76A6849330604349E775626F49943AD74F583C060431AE9204060EAD1BAC426851D894AD41E52CBF0BD48E734C52547A618B10F6415E92C200795635A61C47AEDE65864AA48F17E3A7729D5AD883C2A6A924EA54266A384F6F92EACC0 -MD = 3431506ADE0E16CD754922E2305C7889B4C9DBC7F35B87B723A0189B1C0C536B - -Len = 1564 -Msg = 7A76F5CD6C47FBDF0B300E156ECF26155B385F4185B844DC560F413F2C2437D3F653D9E84070AD44B173BD568D0A41ABC009532C0B0EE41A7A35D45508E7CB582F761D2158297C15A8BEE1857515621B5446696FBBB7EECE96B3BE7F3B7F3B2E46A9A8328D0DC4C61AA56AB3B417A31B6D1D6A25BE3CDF31EC6B0084E90D2BE1CB2397B66E6E93E2EE0D5532CD1E4DE1C9A1EFF1CB5E6D4E037097931511716A25BF2AD382B16EF07DF13CB9A800CE8D7F1A0F664108147DB5729E64FBF6B55AD741E8D0 -MD = 21054EE3AF20A37D0E9CF2973C2175BAC445A887D64E1E2CC2214A85F1DEEC17 - -Len = 1565 -Msg = C3D691B57082AF833B84CB2956E41FA99D40314FC4D7655BA3C10851812161EAE38650CE8C37CCB8306B91C2F5B650C33E0B826E8EA97180FE7E5D8A2FD7C0F3264DB8465D68533CD7289A1C0682D30AF11A04C92A82FCCD569B5D432E83E57268C4A219C176285B25886DD032BDA105FBED64F6EB233F1EAF2CAC49CE7A3A7F72F0B07310677D680A3800DF2A164107A7581FDB77E24201BF84F0D6FC44FE7711CA9AB59308A8FD72DD2C551EC10D43FE42EA44EF96B5004352071FC212FFDD05F6C3D8 -MD = 6C7460493D1148489F01E1D2AD751782C434CA5515D5781BD0D3AA7C36591712 - -Len = 1566 -Msg = F0E6E8CD841FF441FDCD2CB144A2DB21C2D41E7700634B3F8A93A02E979349CB1A6873B78965F5880B8782432D22E856EA2C78ECCF2BEEB4B02E43A3574139364200357144601774DEEF24BFFA5357D5336AF4A61F8B7144D9834576796C9B95697783861A51B35B79FE28EA9F04082A64A563EE52882D3811652FE95FCDA0AB4095BEA34BA55A05DF43AC7BC925D080F890E9C8E7C37CFEFAE2E075DFA5B14566D7452117C64E3CBFF151694B29A7C599339E119F6C48ABF398B3CAA65E21A2EA19BD58 -MD = 7FFE2289787E9EDDA98E43444A2D94FFE1B21E68BF754D5179569143E796E5CF - -Len = 1567 -Msg = 2FA46DA3D6241ADC5773DE113EEDE19EC18F8E3F531EC13C59B1CF91E73FE39AE132390692669BC5BE14DAD8C88749D97B4122FC691990D353B0EE4A55A0BFC4462B9F7D876FB4A39197E887017835E54A26A4C98EF91F154185D47DB1A681F6F0183C8BE8756D10F511059619E8634C38B55955049B4E0BBC214517448D6BC33E2DC8FE8D3D286E1631E4580F07C2EEF5317642FDE6AA5A2BE4C55D25585FB9B303C24DAEE4EE0E623C0A4B621AF20314D74434264B7C6EDACA3358257EC39262BBB55E -MD = 396585EFEC6F5D65C4E65E70DF0FAA3ECC95ED3685102D0D7110131EBA4005A0 - -Len = 1568 -Msg = 84891E52E0D451813210C3FD635B39A03A6B7A7317B221A7ABC270DFA946C42669AACBBBDF801E1584F330E28C729847EA14152BD637B3D0F2B38B4BD5BF9C791C58806281103A3EABBAEDE5E711E539E6A8B2CF297CF351C078B4FA8F7F35CF61BEBF8814BF248A01D41E86C5715EA40C63F7375379A7EB1D78F27622FB468AB784AAABA4E534A6DFD1DF6FA15511341E725ED2E87F98737CCB7B6A6DFAE416477472B046BF1811187D151BFA9F7B2BF9ACDB23A3BE507CDF14CFDF517D2CB5FB9E4AB6 -MD = 9B28E42B67EF32EC80DA10A07B004E1D71C6DCE71D8013FFA0305D0D0CE0469D - -Len = 1569 -Msg = 1924D11C865F5258A151DC2CEEF6FFEBE86E13120A3DCD3ED6A1B790D1C653C8DD1AA2933EEE9BC3C7EB4BD42855E7C5E4CF073C09B179F2FE7DFE4F990B62ADF093739DC25607265D00DCEE57291047BD2B23000A843842566B4D28C5F022885BDC76FE0C3CB0368CB2DDA3A9D327E8D0BCB003668C53BFE1FA294496C5128B7C3B41EBEA639D070C11E4B2997E886C8693B6D1E17D7B5A63F752A74D2AAC2D8BD25D177B5E4A532B3069A6B71EA3ACED5B6D5EDF0DC723DB2E336CC8F5D4690D1477F580 -MD = 8C9699443FCC88689EED869757625D71533907907E85432881A962333E420332 - -Len = 1570 -Msg = E7935FC6CFA5B3087D0FBE6242ED76FFD17FCB91CB388CDA8507B6489032D6B8772BCD0FDF8AB47A353C3F5B42A09E1B8A81DA59295B48AC250506D3742CFB4F758069A89017AEF3B6CCC9FF79C4322971788CA874D0664CD5F5900C8A57B4551107F58674EB19081DF0175241850BDE8B1D28D3345FFC0B53146A6EC728F72A866162AB9A942B0DE6EDE0D35E56D1102B71C9E6DA261480AFE9AA032C910B7E9E5372510603CF888BADBF5E9E469F6A59049FFC8F05FA58CC4ADAF10FF6629286F0F85EC0 -MD = 73E1A081B8703CAB9A036BEACA54E8B84C829FFFA54B548A9D210197D885BCA4 - -Len = 1571 -Msg = 14C24ED71ABA68FADFA20979A31A6F0E64C839AEE476B018FEE6F1E6C0829FBB764197BF0357A2C03EAB0E61E793F7185BD3F1863E8E5A3970A1E0AEE86D401D7FB079888E5CD442F56780FB05384DE328D00834C504751A28D0E1D028AD1455277BC662A3DFABF903DB129342659949F8363AA94E9ABADAA6C33956B410D4B914713A2DD59AAD28B66791A2942B3FEE58F011F8E8CB693D9D52481623F11E300BB51E808BC3AA346905EEDA2EB59CB469EB99A0B1F2D7DA56CE6167D5005DCB18DBE728E0 -MD = F98961A4CEBA4E38091ECA7BB33EF8E54DE9F0775F56E112A2C70A3728378584 - -Len = 1572 -Msg = 94A31FF206DBE122709C56660F5FA690FE65273F918B44118D647BA94E81C8FD837AB68EF7A67CC9C3FDAE7F29883B31E786D0B4E90148CB146D11A68828BD4D3E16FFF6FC010E93F5FE04453C23DC6B4A995B1DB5D430E383B78F8D90D7754434F54E56808A7BE3EDF21DFDF2D824B94D7CDDDF652D1655A7E1806C436AB5BE6BCB673CEDF407AAF4CBA98A9335339B6F86BC11A08A08738827B29058DD6BE75A83D11D6E70285E062E7AA1E03D79098997C13E6CC45235EA37FE02BD0EF47F9E4C5028D0 -MD = 090FA3890381E7D413DEB23360475988B0B93CF4BFDF6151D9EA0A741D963355 - -Len = 1573 -Msg = AD30B3BE44B88B1011FA94DAF026E1F9B7CF834B972463E8BB77BE43F068127AE9BE0DB3D2B5B20118C50053239870571D9971721BB4AEB5F716FDE77ED2932E4AFBAC5C4E177CE68A0B849E91373CD2202A22085A775F09765AF9CDE7B359B8CAF4ED89B0AD46C856A40AC477641A2E793FBA446A2973F70C978F8C9116F9932BB39AA530DB1B4AF2E0EA9EB8AFF1225C275EC204A5FB091784E5D49814C5788CE7D409893B38AF270115DF681082EBCC051F2390C20B5A80EE74C213BA29499FC9255390 -MD = 9F95DE1E9AB813A8D768070D0E797BADF08EDD44568E169CF9051BFA5E89A248 - -Len = 1574 -Msg = 4C86FAB1AB85CB3D2D6394869241DCE2DEE5B3097373DC2584858C4B0D2A8494A802BDBE3C1BF08FF1DE84773FFE307A0432310B6B874AA55833BAC8B56FF7C0FADB831A00143C9BC17EE0E2547A90F95FF2C73F1E6BC8E3AB0745ED5814972AA247D72AFD7161C192981FA8B85DE7CDCAE3F023FFC4CC62E5257129D85F6E0D950D28C457512213A84BE7DF5AE54FBFE7964D3FDC009C70322FFA50782F443763730CB4CF49600FD4A3C831D580D1026E6EAA1801846EB2A8175F528DB9A09B1987AF148C -MD = 1A016692ED8380D9B136182EC3442C24C311EA2D9816AC1E7C1130072C8DB497 - -Len = 1575 -Msg = F2E2E57FAE32B0A84C5D7B43174C74DAE20144A875A52ECFFD0BCEFFDA3B86E7200C1FE848A7A89D737204D199AFF82CAABC2723C7970618BEDB3FEEEED2CC172F5FFC0525ECFB7F6402407D85273A21DB19CCFF4FC5F1487EB5A87BFAD8E1C9D4832C1DE34D70ABAC87A68342AFF65881DD881876570C1404B4612345341266457243D5A03D7C01B4B34979C01F6EDDCA3EB662A79A73A0E12992424F8F461321466C8D481E2F90C31E8DF4A79F39F9F5E87A8CD12055B31AC6ECD4B81C975B7BC3F30048 -MD = 03279AC34316E17CCE120508902DCF8D90795A0623B758702676AB77097DE644 - -Len = 1576 -Msg = FDD7A9433A3B4AFABD7A3A5E3457E56DEBF78E84B7A0B0CA0E8C6D53BD0C2DAE31B2700C6128334F43981BE3B213B1D7A118D59C7E6B6493A86F866A1635C12859CFB9AD17460A77B4522A5C1883C3D6ACC86E6162667EC414E9A104AA892053A2B1D72165A855BACD8FAF8034A5DD9B716F47A0818C09BB6BAF22AA503C06B4CA261F557761989D2AFBD88B6A678AD128AF68672107D0F1FC73C5CA740459297B3292B281E93BCEB761BDE7221C3A55708E5EC84472CDDCAA84ECF23723CC0991355C6280 -MD = EE53F83D2E2CCC315C6377EADDA5F42F42F3AADD664E3E895C37CBE9D0E9B9DE - -Len = 1577 -Msg = 90E5EC58E79320AE60ABE631E3073FDCE992CA5BA19A6E3F2272F6B0E9F9A9BCF70236C5FB0DB8DBFD980683DF4C176F07C27A944699A5AC7552C0D5D3824BD3E95E2DFB7D412FA0A8F5D2B73E0936F11E6B95FE8AB3FDB02A8ACCD1AC7867066318A3F60F244F79D01CCCB340BD4216B8C9222294187122133605EE25230DEE6262DE75506648BC6867A8C70FEB75B687661EB9C5D87C630BE06CED62AEB7A6C8B2A7DF23FF8A34E3BEED0CFD3B30A3ECEF1B59BA1C8988A46971686658FA110AE238330700 -MD = 40C35AFB8C0DF37988E5FD7288B313848541B041401C5323AA64042D340FA10B - -Len = 1578 -Msg = 7D10486481F81E0B593C849E54D047DB523A6F31E7B19FD80E747364F43CA2B1773DC9B62B004D855CC38330EE82DE4EDB37F07402A9301E40A6E135EE2DB0B8BFC493B69E4DEB2543E0241D8416467D8CAA0FDC73E6D6E177A0A18885946318416F0DF593BF680EF5D10ABE8E752EE3646DC6280DDBCB500548290D4E4826D685DE446037C25068A9424ED6D0C9B63EE650A42674B7E231F40761F7F367C043537E320B79C9D9071362A7E9F6E65AFD9BF4536D860AB58015715953718CDEB040240A731E40 -MD = 5D1B0D28E543D7FC015D71BE9A6E7FC9550BEECDC82B7598E7ECC74F079FA324 - -Len = 1579 -Msg = CDCA251E2C752A3E724A0D32B65AA4B1D5C87DEBC1F87D802C6DEE8EDA523C10026985390DDA593ABD375E86FCA31950FB74FA6FAEF330225BE70C71D2492C95410E6B115BDF694DD5965C6D4FC5B585EA4DF25803C9FAC55FAC49EA732D736752BC8634A2871CAA788261E352A1C8B3A645D0E22BDF10D62C6756E656F9E78314BE069B2E1444B32273B8EC132A4DA2D10EA148EF8161D238B11A437F2983E26B7C8AE95210B393BB3E624D99FEF3C72FFD1B521B8B4D41B426E4F8055C0B50776EE059C6E0 -MD = 53ACC0E54EFF2421DF7D34E1A77B10499A2D355914E7E31B55424CCDE9C23830 - -Len = 1580 -Msg = BC114681C35F67BEF8C8CC81BBDF40B879EA33A05D034B38B6EEE163819DFFF9E15B0B9ED7A80D9FB9C9499AD2DAC94AD8CAB68B4871E3423CD35C67D710A37830478C344EB4439B0BA4ACE3554B682F6BA20209923932ACB9F743D8BD6A4938466531FC5AB43E6E8DAED4815F288C16D909402DB7ABCABF8B96F305BB7BBD1D73D86FE03012A9CDA5AC4577BBA3ED9375EB9566C12A0BFE08F4B8EBC663A8B0CDEA53D65802847C09A07E9D8E51BA7DA92F575D523F2D1418EB5D169CBA1901B7829339C4A0 -MD = 4876BEC10AFCF1385B11BEC372085BCF53AED0EAF98BD3D525ED8E4D2F5318D0 - -Len = 1581 -Msg = 5019CE0DD714A0C8B92017E26AF6BC433E101A4EA01D2E39BA4FBD467974C0831EB6F4E2639CDD8596EFCBEFC546C22C75D8F742C0C3439D49C199F9D4ECF9CCAF4D375BB8508FD8F7314473A1EC2E3B9A12386122773F8AD12E6C9319134FB1C8EE836C8CBA8B714FB1D0BF11190D1E9A2A80D7907160607F43FA0DE59E77850FDD32161F05A9C13C8C6BB0F5AA8D2F8A4FA1C38AF78C61A26B560F06FD813121BC133B54D88CF1033EA7069E98AE8D8A6E2F99B584AD8F56DB1ABC1590E8DE34ADDE195CC8 -MD = 739D5A5F1D3837EE947D713A5A77C1EED2519CB69C578EA2FC22A294D076D7DD - -Len = 1582 -Msg = 2CC35AADA46B1AE9F81024B610740D81451D81426C6A02C00110687C39F45546E57793C5B31EBD9A1F52A14279A767C58816D77377873B91DC392888C467916C876391A5312BEF9C13898FCAC965CC7AC6B7209D757E40618EB94FE173A27A102679173E1A86ACACDDD181E1B0684F78EDCCD712229979A0A9BEBF55B27A8E74ACE453C77A681428D9C775C701BBAD9D3E4EB8EDC2BCCD09DA540F7AC232DF89E379229F47330668730E2E262695C6FE1F3E7E553125241734B1002EE7F6B39FD4695A686248 -MD = 6C937C51B2BE5E6003AC4DAF3EE7297245FF02A456E3A2149CA0564999A408BF - -Len = 1583 -Msg = 1916F52B31159E1BD0C2F375057A01A15CF716B49160C7AF88BEAD7A1D91ABCBFC20595DF3BD0A36FF92F0E35495E12E9EB49FD9C38EEA08567CBF32074389843541090B742915BDCDBD0286F66A657FFAF248E64C15053A14D02ED841F268205716894BB36D13477F2045A57DC8CC51BE67FD50BA15757E18A71A7F529BFC8EBE84F8562645169CF4EA0DF921233287B7530553545839FD5DFED59DC7610D3A6ED7FC97B5CEAD9E17AEE9E5452572075E7656CD517E5E94E4A01FE66403E26A6F3DDAE8A504 -MD = 54ACEAC9EAF579FF8CA90CD6D71F73E2D40186E70AB76BDC0F944ED00E245DFF - -Len = 1584 -Msg = 70A40BFBEF92277A1AAD72F6B79D0177197C4EBD432668CFEC05D099ACCB651062B5DFF156C0B27336687A94B26679CFDD9DAF7AD204338DD9C4D14114033A5C225BD11F217B5F4732DA167EE3F939262D4043FC9CBA92303B7B5E96AEA12ADDA64859DF4B86E9EE0B58E39091E6B188B408AC94E1294A8911245EE361E60E601EFF58D1D37639F3753BEC80EBB4EFDE25817436076623FC65415FE51D1B0280366D12C554D86743F3C3B6572E400361A60726131441BA493A83FBE9AFDA90F7AF1AE717238D -MD = 21CCFDA65C4B915303012B852AB29481030F87347C29917E21F210F2BD5EFC9C - -Len = 1585 -Msg = 4A3FAD4471E41E86724FDB35F4D3B26BFF60DBAFC5D4BD351135C8A7478A3B07001CD9C20829D41471A146A3EFB8EE598612F921CD1E4CC4A47FCCDB8FF0F67F44680E3378A8AA64619A33CFB5A4378FE4079567813BFB481BDC595B307BC97D70493FD08E2DAA4D97D2AA64FD08192C11D0A41A8D26119B0E8EDE30EB80F4E8BC2B8B0794C393B6FC23DB16F46DD6BCE8E52388B8D014CF6EA40EF553CDFC33EEFCF4898436B60162B98D99B1EF472FB4C79301B56AD49BCD6659BAD899C81F49B81D67CD9200 -MD = 8D9242ACB87ED06DF6EE6B3D43E922E72CB853F9B0C20EB55433106C24A7E9CF - -Len = 1586 -Msg = A68AB5DEC5519049A81EC8B6EC950DF8A9D989B58B5C4C397B22801DC85A24266CB91ADE2E99F53B91B5AE3C23B7D7185B21BE6582048BC8A1570E828C5D46666DCE1DCE06921ADD366D9043BC797B3E6EDDA00782FB57C13ED2D2F555AACCF7840D01C6DD75FD3D700C3BB18A49A7D60A879FD4BAD06D68A7C5763ED677B0C5A248E3CBE476A674D31F8C7DD5521C4F652329D56D6DA138D50D3126BE315C1963F376B4AFED50EB2F16E645B86593FE7433FB6BDB40621EDCD2F41E8D6DB8A1031AA73D7C9180 -MD = 805AA81741084214E97890A7F4BA5A315124833E5A06AF4885924402A109C62C - -Len = 1587 -Msg = E99B30E55F72FBE081ED5AF28A0B464810B49F98AD1B41C14BB47CBB1EAFFF99BB30A753099FB3FDD7964B06C6340E0C96B7EA1B95E928823A5090AD6B668E3CA047BFC8C653673B193F892824971C4449B37922304BDD160465CB842D3F44AF50C742A7F71C2A08682360CAE493FB8384644F056B5D9B25E4B2799ABE70E905CF7B0E7DEBF82496009DDB054754A9560C18377EB64D1BBA169C353A443CD9D80E6A39801FEBB9BAE3549399982D8C3578591B198ABB8CF2720C33012E76319EDCF1BCF0FA7580 -MD = 772480FF931A24867617DE232900317A19CF404E326989B69521F41058341486 - -Len = 1588 -Msg = 108B8CD3F79E74BC10D98D8A48A480A171ECFE1DCFC279D849AE49A01484A964070F0AC4400F85D8C0ACB88CCF5B6D41E7DFBD3FEF08865592C4052924DC0674A9FBD68A16FEBDE0CE7FB61C2F0D4AF7CF57DB925AFE0BA6109348F11BFD346ACD5A6A8674A8B6D6BA3229D4588E0419849A555B4121426F22C61B4978EEE4A22DA23D2A8E96BFBF5D5BFA4C2DBF3CE6FDE6433058E9738D1B3043134DCC1D00BF5860CF17115B8D6FB2AF35DE707F222520CEFE5001951BFE965DDB654B37B8B935F4BDA1D9F0 -MD = 3469032F8C5B46ED5C436ED659166C5512DE548ECB15213238BE74F4717548AF - -Len = 1589 -Msg = DE5BFAAE3D29D15E1B522121DD99D62671BD1CD310CFD04825B0A203BC8E4068C765FC005F916E218FBFB3DAFBE565AA27E3E26401D450CBAE7EDC8ED460431BB0CF3BE8471E2ED60342613FEB2E6685CDCD2DEF4053905565BF9447F36A1F4C1DB380E607D9B331B64AF73F9875540D8BBE1A2C6AAC1BBB8D7FEFC22A9136F5F9CC04001B621AD5569D341FBEA3F829D76ADEB99BB4C6A1AA0D70C22DA85B40D3ADC0EC31812CE3D40ACEFD27377E99F748EF930FB60AFD4A83C9810679806EE6B0DD9432F530 -MD = A8289D032DBD05754E013EE44B993AFBDA7EDB88F36D9EB51E6F58B7FA80C709 - -Len = 1590 -Msg = 04CFEB6AE07A84B6BE0A8FBCE81E3BC966D4CA35888C9F83E215FCA0280526ABA19081F862591B91C98D52DB46C9CB0ADF79F8E74B66C8C8F7D9BFCD2DBC6D37E25433F81417E84DE6A1E79CFF48A7AEA7898C722D4754110D9A151F9DB4E7A0E460C0BBD0A607E3F1B9820B878B3BA21820CB41E15B9BF6FC46FD0126064E0BE9BF60C0E6175291DDB35B53A39DB570EB1DF10CB6BC54D40BFCF2A84758C54EDD42A43658A87C2B6D6E7071D2D3170E2218AC0C9389888B2B9E25339C8D4E25D62B789BC1EF5C -MD = 7759734D259B22696806348B9243191C009AE51E034AEDF4F0E66A7AD4D92A15 - -Len = 1591 -Msg = 68C048F9095F71348C5534663C9E927ADFD3ECD4F99CB381AAC3266F66315193FD08523A905714D4E6B4BF72F605A68E164F6057538A3DBF89683B9665A047B018168E16A24990C61E1CFAC62CB3B888B4F2C5008F49452F1DD81B94288BFC94B89886B5DC23B55DD74A51C74A4D44DA267C9443340438FA3ECC220B9E5E81DDE7049337522473996E8FADB6AC0775D3D3C6ECC8FE20EFE92275071909229830024262C762C9DEEEC2DC646B220D5D5CFE6B09BA8790CCC10D01BD8E5178F5ECD92C6E5233274A -MD = 4A38D622B0F8A102054BFE74C81210A0CF63F8F8539810C46C5D8CFF8884BFFB - -Len = 1592 -Msg = 74356E449F4BF8644F77B14F4D67CB6BD9C1F5AE357621D5B8147E562B65C66585CAF2E491B48529A01A34D226D436959153815380D5689E30B35357CDAC6E08D3F2B0E88E200600D62BD9F5EAF488DF86A4470EA227006182E44809009868C4C280C43D7D64A5268FA719074960087B3A6ABC837882F882C837834535929389A12B2C78187E2EA07EF8B8EEF27DC85002C3AE35F1A50BEE6A1C48BA7E175F3316670B27983472AA6A61EED0A683A39EE323080620EA44A9F74411AE5CE99030528F9AB49C79F2 -MD = F5BF70710DA440EDB43AFD3EB7698180317FFEFA81406BB4DF9C2BB8B0B1C034 - -Len = 1593 -Msg = DDBDE9D6BA8A0889828CCEE9243EFF68E2C4D342E84273C9F4B4F6BAA3F2CF622354FFDC7EB6D31C9F55A341881FE7AD266B45B8CCACEA665C0ED227AD699051C020EC1C51834D0B7BDB69352B196CAB5C0C1648ED3A9BF9D77550A136EDCD294FFB41732E010CCA56BA0FFB20B3296F88C7D2A802F60AD7E39FD1F8AAE9F5B1B075BCBEA2CA6B3A79FE5BC2D13AF5BE022CEFDEB32E3659E2437F10BAD7210DCFBD21AE1B60E54862AF0B302FB596ECEE90783BC98798A31CFD9ABC07D2BE5B7379480BDCE1BF00 -MD = 2A934A2BF97174F364F0F9E95A1CAF2B750D6E53F0378D8357510CCEF9FC0421 - -Len = 1594 -Msg = FD76F5473E5DE24298193400A93C9ACD88CE44F855C1FF2980B0A40AE8418FB7119CA8FAB283221876EF54E7C3CE09AD70EB14C1B4A18A11FEA453DE45DFA5D16BF0071392224D15A7DCA73A10F2F0476F5300AE8BB88F706F22DEABFF0E6BCAEE981E4FDF7A028AD7B800A65A994EF73DC2F34166C92EAECE507DB3DA95264B36E29B30EC9D852172D5E227468E735EC8C43177ACD1C2EEC380A7FF6B44748580F5190EAB108C37517217757AABB265EF18CF97B3DDF7B2BAC1ED07105B8825C5F2B955F23A6900 -MD = F57E1D15A4A397E8BC192D08D0EC39DAEFCCDD0EDFC55489303DAA3FA874F8DA - -Len = 1595 -Msg = B82326F747C89F4976951420E31FD1969A46153D0F58D43E8D795F89DF7863AA752CF3210123937C76772C03B8C824ECF3601C4BC469ED02804126192534568B662FE8BC5CDAD86EE7B6F9B0F2AA98D996A810316830833B2B4C153F0AC30646D4E02B34417930EF1A5BA15A0E640C092750DB48E79EA7BCCD9ED1A5E24B93B3AE53C6F6380817A5491EFC9A29D8C8211C45152CBB28E1B8DA29BA4E634097BEDC1DD3C46ACE8E920BEF9B41CEEDAE26EB1733664CEF70CE8B9B4CD8E5377FC498C7C64348FD7C60 -MD = 608D3F1EB0DD2754FD0CBEE454DCDE866432D955DA2C02CB130A2E02EFFB1671 - -Len = 1596 -Msg = A1C179F412135FB1CFEABCD4D97D1B9AC22DBA60C174A5E889A188D3FA23E31EED0DF9EC72A1B48FF965DB0282143E48F15EEC05B0502A34B9B1770F79B299E1088183F080FD4C390C069AA310408D3B9E39961EA9457A18FAD96687DCCD6F8E4C3CBFCC55537919CBF0816D563BFBE2D7B32727625F1FAAE1A7AE153A6C1AB45CB8F8915F66122CF0570BE115849A24901CA6CFCFD96FBA7290455452881CD09D143867A67313C9D4ADD919436149200C1A4D9ABFA84A66A935F2B6203D0125A9654A5EC16117D0 -MD = 19AC48728A0BEB1449977129AF947592899FE749D67EBE4709B8BB0301153B56 - -Len = 1597 -Msg = 56585935F30E0C5DF323FCE4A4714E50186A1868342A2692302C0A93AA273B1C0E9F4DEF90117D0D20DAEFC40E7A3643DD5BC87BDE18F59E9AA7401309A18341AA687411269E2E847D6647274D05807536F39559839F3ABEB1D92939B8CD682DC2396EE27CB5A5FEEF2F3C66294119A4303F16E76C5A74303064941B2437212B73BDBC83E02ED998CC520E8EFA5D388E94D869F02D2E82992F37CBDB238001033CF481776D706759C29B1D69A1EB9EE1653D140BF47F9AB2E5774B60F14128DB0FDA416DB783D5D0 -MD = 631B7070796F79BA5042EB41518D141D101FFD3EA5D9FE175FE20C1CDF888A66 - -Len = 1598 -Msg = D3522A6A36034E5CB35A86D9AC147076015AC3FB2E268A7B2BD1961E7C50E847BE9690BDD655DA76641CF0A9ED6185AFD5904145392DFD0D7BD4EA7940AC6E0D49EFFF68A23D8278C1692CD4B08AB49E840FBDA309E8342FA77F38CF779885138ACE50D1BE596A36C959CC8741E607C453455E63BE1F15FFA3F1558A7D48C5F2B3781158117E5839BF4097F003D9B52B4AB21F099FF3464704F48C68505F1CCE098F071C5A6741918884A14B81D12E02A88F084299832CC51EC8D87DA25D5E4C4F6139B5C3F48DFC -MD = 50A4B5497A5BC67D133D4ED7DF1CD96E8CACD3B004F4947D70599BF9699991CC - -Len = 1599 -Msg = 347858A3C88CA84AD4E03F46CFD4A20D0CFBD31B9EAF5E2A428D8050A1F53DA5D8D42730B8E9B5D10578760CA2667F99F0B73180A88E22E75B11A524E789AB5E9E7863348A6D26C337F55307DE45D6E18FE951E0EF65745A54826A6C4F141588B11F904F9477041FDBFB40F260B5F49910C0091894812F3E91786050A5136E944EBF60C57A3415BBD5DE0C4BF960E1983C6F0A36A10B5336A800893A2AF078E734A946A3E1105B6DD64A16C62379F72D7D808F14793FF6264F635262553C9312DE0F80C0A5D43ACE -MD = 8EDBFE2E5D998AAA285911DA350990F69A8307EC08C6D68848496100D99C31E1 - -Len = 1600 -Msg = 8C3798E51BC68482D7337D3ABB75DC9FFE860714A9AD73551E120059860DDE24AB87327222B64CF774415A70F724CDF270DE3FE47DDA07B61C9EF2A3551F45A5584860248FABDE676E1CD75F6355AA3EAEABE3B51DC813D9FB2EAA4F0F1D9F834D7CAD9C7C695AE84B329385BC0BEF895B9F1EDF44A03D4B410CC23A79A6B62E4F346A5E8DD851C2857995DDBF5B2D717AEB847310E1F6A46AC3D26A7F9B44985AF656D2B7C9406E8A9E8F47DCB4EF6B83CAACF9AEFB6118BFCFF7E44BEF6937EBDDC89186839B77 -MD = E83EA21F5BC0976953AF86069A10EB6024A1AC59D609688E4A9759BB8B6C9441 - -Len = 1601 -Msg = 24E94DA7D1C92C690323242366867A5B805F81EC7C1132C024EDB5D0A09614DC67C068B0FEAFCB6DDEDA0A1C346F2238B0C6D6AB17A197B5170BE004275106E4CB9711745CBF1696B3BC7B764C693AF4F43B30DE3196A8B61A3FB5754EB7B99F5F9B65C8B2190B12CE038C0DEE4D3F95BFBBBBCB662EBA3BD42143A61415C728F736CB8350F5DB2351BE4BD6B8785F20209625AC2F56A789DA397C65F2E6BAB2F5C651F543CCFA554672FC46F9C6AB63887A2F7FD30B13BFE66155CD964ED7FF4937EE8626CECA4880 -MD = B34C6372254BFA476892C4539BB3314348A65110FCB7BB8BAEA252EE16138BFF - -Len = 1602 -Msg = 70BCB8E40B6F1FC372AE4582872E2806F12270013A5DFC58B2591FF68CD1EBF89DD5F201E226C81A9EB7F4B391BB8E3469AE3311B3279BEEB191DE6067CA55AD661DE8DFE3B0D88BC9577EA5A3CAA8364CDB54C40ED345EEF3F46E8D8D69B35C0B9D9A881DE6FEEED0EBC814618D1F5A9A033F59B51773D4B91DE7D366DB28C71D8D08CBEFF882920ECD240026EBA6281BEC7A4AE692A77C830C4DF7606ED3161497EF547B6938DABAE45E01FD2D3B403AE9086F98B69FC377C6B0B353E62FDF7FAFAD48CEB91BDBC0 -MD = 3204C462224CA62F6B71DD27518B54298AE3F1E4DE958A29162B0FCCDDC98223 - -Len = 1603 -Msg = 67A2ACDFE159EAB1A5B7D9161BFEFC43392FCD250EB68E95BE7D309BC453507687DBC8E26EC6954BC8CA87D825D3E87B149676D717C05F8FD953CCB2B998F57D9D13ACA970DC073637D1F303D0CB12E6BF2E6E6561A09B3EA1CB6BA3217B43B73E679BB3F59FA227E7BFC6A785184D24516335FE9282E231DF0F28D36248E125D9A6DE1A3CB08FCE7955BC1984DDFF6502BCC100D952FFA62E69D664CB76B6B4D4D02993F92C5C3F2EE115C384C996154DAA3EB2914F0ED2826AFBEC2DE86594DA71ADA1A1F04D5F60 -MD = 64F2F0F4DC03E8AF0DE1E424A051AC6755FDC629C8868F2BB1199C822BDFA509 - -Len = 1604 -Msg = 92C85290E7533F339C3F8637748E6B756C4CE24D21C6E5F2CC29D5D5B0FE770473BE6D26398D22B88B67D5DC398F8EABB2747487A5635DCA0C18D95E3F522A1D0605AAE2F99743F591D31961278ADEB03481DBFE3FBA5ACC722127567EE9A60872890A976E656872FF9696BCDFF8120C49C337A44522507E98D30D96DAAE13197C8464EB2CEAF011C79F83ACFCE448B0C15BF5FA94AC0E6F61770DC55FA0D9AD3B708164BEF6665DF6EB51F3E493C8E7252F3562B464E94E849A12DC52AA19A0067FA41F090C607950 -MD = E4DCF331D2FE833D2903B2BF2BDCA3CE73C26352850EB87BCA2225C0853506F6 - -Len = 1605 -Msg = A8847BD4C5F54B7BF00F4D0669F7ACAA71BD0C69A12D53F998910C858BD69BB2A09D46346C04390E0FEC9F6547B04209209E1C0FFA41C497BAE7470B6D3228E081773454046B655D0910088FF7137A17869AA97992C0CBB34C513BA06420EC3C0610C0DCD1A21142A5A3BB50CC50A5109FF8D81796D015A8E99DD352C1E6908B19C1F55E617A04BFB699F98798DE1B456627CFEC2F2FE10BD880A4531B4EAC2867E782A8C9A1D564A5D6349B3E02C27B513D676FD9819FD28D37187C80406D1A377FD16C1D5511D288 -MD = 827EB2BB2BF005252B1FDCBDDFA2584ACBB560638ECE47F123BFA71A9F40A134 - -Len = 1606 -Msg = 57B6CF67BE832C5FF9630C6C23F45EB662D91CCEF2313DBA0B3961FF63A1C95D2193511B3CF773A9E149701506DCDF66CF148682ACCD60CFE5261CA8482001A75AAFAC4452AAF3EAAC7B0C6F963AF736A8C07E175B06DD38B8AEF3491343C2C319713EEBD2063125D970660BCD813B25EF8E208AC96DBFE21D0106ABAEEFBA9EBEEFDF0AEAF41C011E6F91C0AE8D84B104E7C33CCCB863CA72FACF09D1B8FD0EB1BAC3A5B07D3004664B9AD568EC5A254F470CA99FDD5BA7270DA6ECD0983B5F3F1107BB6F8F4A9BE4 -MD = C074CFA65A33CC88B9B3A970C608773102675ED4F82FE0A76E20304F386A03FA - -Len = 1607 -Msg = 773E8CD756FDA30FD5D91E11765CE2E07B9ADB1AA5D28E54690C42E2C88270522EF70BDC457E671A2F0BE72066FD6AB9AA4FADEE137A2C7B33890B7926AD69514ABF915B094E4602833A4C3EC2A294D4A86791637BECA3A2E49A6B1678C557EC667177F2C98BAD18137A8ECF7AE31ADE6645871AF70894DDA7D5039A1CAB5836D3F1FCE31FC4260609C5A85A3728D7E50D521CF196922FA72C6AEC3CE6A5EBD0C1C1ECF45CC8F2E4EC0B283B359F1E7CF62070888E9BA2EED005BD1E7B9E50A6CD7146361773610A76 -MD = 5E5209477035363FBC95C5944AB12C87D17EE4D05DC5B5180019E2D1E746142F - -Len = 1608 -Msg = FA56BF730C4F8395875189C10C4FB251605757A8FECC31F9737E3C2503B02608E6731E85D7A38393C67DE516B85304824BFB135E33BF22B3A23B913BF6ACD2B7AB85198B8187B2BCD454D5E3318CACB32FD6261C31AE7F6C54EF6A7A2A4C9F3ECB81CE3555D4F0AD466DD4C108A90399D70041997C3B25345A9653F3C9A6711AB1B91D6A9D2216442DA2C973CBD685EE7643BFD77327A2F7AE9CB283620A08716DFB462E5C1D65432CA9D56A90E811443CD1ECB8F0DE179C9CB48BA4F6FEC360C66F252F6E64EDC96B -MD = A2D93C6367E1862809D367EC37F9DA44CB3A8B4319C6A094C5E7D7266FE3A593 - -Len = 1609 -Msg = 9FF8A2A4213E2CD5F76338232761F86130B1609DDBFECC9EE0712A7F3DEEAF36BFF36D0959DF5547713E072DF78E87BA6F9A0B27B55A15A48FDB21897DD5C76C1CD22266B7895DC06969098C9E4EA6B4E73287D50075ED84DD14535214ACE53CB9F8935CCC7DA8EB0B0A14A5655B19429B4C9CD842B4E1A3DFE980ED978236ED49E6C82526D18122583B61DD9A04E04372344BED009271C83CB352219A0E802D2ED016EC94BB799D69663CADC92EABA4E638A2781828AEB6BDABCEE600510BE61782CBD3F30361AE5E80 -MD = F6BAF29D218E7CCEC98F675BC09450D9AEDB910113224EA70B6C9AD4DA9D321E - -Len = 1610 -Msg = 1AC32A48B8F354AB80580B77B6ECF9231CB9B5749DE765EEC1E7A3B8A751B6D7B3100520B27EF10D4ED1E9671D31721374BAE63FDF4014BE492E868FF08F159BCAAE359FDFEF88C66A5AC7A2A55DB0D93BE929234F7FFC8BD8D3FEC296DC2A588CF47AFEFC10FBD7E67E81CFAA1F61403E9AA25CA4D11314590B1D74828F90416288A2D10CBCA43057518EB7C583197C44F03ACEBB7A8E12F1880860335E54D30BAD54171DE4904E5BD3F22F91004A2A95467F24F8BE0D88681D79978D1948711EA3E49308225A3260C0 -MD = 6DE6B5C76A9B33D3EDF45464CAA54FD8744FC58469A8B785C550AEB95ED67166 - -Len = 1611 -Msg = F0AD4970D30ACA266FE736FD168F4A023FAD4E998BE61BFBF20587432CC318FD57748DD6792B973857381A095A8A1D234D6D98B89E44427ABD07A622298A28C888D1C6DEB24FF2B8E29029E7616B9D4E3769437B6AAF8028CD856A67AAD1E627E52C941B1DAC239C6555F9E8655A28E89AACBC8D830B1C5AAFE4A104D94C4E9A86BFA24FF74C08D341FAE30C705EA84C78784366EB37A43E3F7FBB671D0177B61FF5420214121C0BBD451BBE6BD32E5A6CBC2A4908F48601AC24935D8D861846039BC53A16C583019420 -MD = C18108F81EB8FB777442ECD49ECA27F05A8B15B1BCA215CFB1D342D7F921175B - -Len = 1612 -Msg = 3BE987D46800EE451CC793FDA988C727092851357138E7C112FA5F611114320951A65BC45AB34E1887A73B7FDF932E6743CCEF3731737A5520C6F4B88437A8B4CFC89A78885C1D8612BDFF6F4EE5C0E5C36DE87863AF9E63803740E06D16C2EB5F44BE7161F0ADE58A94DD6584DE18C80CFB88022A50C1040369E8962B70D9160A847C4207B104C48803B1740E9D1E1F5F0F4FAC4202E6E98D2D5C09FECC2C382084FC63CC9D26AC8DCF307118E8D72CDE0FCF04067443A5A1A9A833912E041FA251A9647F2FE2BD9330 -MD = 5C6BC4E3C84BBDE26A492C11C3E2688C4633329ED5347075FC88469BE0F6635C - -Len = 1613 -Msg = A8FD1D5C15E4CAA7ED292CD3693F9418E46AC4C9635A1AECE4A8E0EFA9B76EC1E356F80A54A45C62FCEF3B782E2882115FEC648E89A58D47669131605AC558E14F43A2DAD745521F37676F4B2C491FDEEFD42C3CB6D9E313638D843C59702EE637BCD813303FC34CEDF0DC017F93595DF8636505E4E96FFDE3D369DCEBC9493E7AD0AAFD1D44FCC25121C4BDEA74C07EC0264D20973E526D5D9876B17D5050978DA6B39EBC530EE2112939804EE5DF60712778B66C917DDF3428FEB2E5B27BCFD69CDE6ABEC96B5CB500 -MD = 30F9B26BC71D4254C1F29450CCE79A1CCE7EB8DD49075C904A150BF5635D300B - -Len = 1614 -Msg = A46537443AB90410B94FE953B2D17D44BBD81E996022690F081EAE3AB7FFC9A9BFC419BFA66F88F3260C44D71E1D577BB9CA1C3A2977FAEB50C6B4F21117BA6976BF964DD5C2146286A35C608474E8D87A708C04DD0165655C4AF624C0CFCB88B844B18E4B14514D3A416C46BDB0A95D9D42301AF1EE9F82E6CAE0531A5C92FC6A1663B9C07BC16A982C08017C660E77CA1313ABD742CE18EA7B92C0944859AF6E2462C00BBB2399D33A86D2A10ADA9AFD3DF6CDCC001CFBEEC4A320A014EACF3C6819928F54C492A430 -MD = DB8B815070A367EB3FEB3164835CD584779A7D34C9B24990EF721485D3E7D0A2 - -Len = 1615 -Msg = 2FE16DBF1226D02C64CE853C981B1F6FE6953504EA690DE36D8E88915C979676306185132CCC2BA8F603AC355C8258044FFE942FD60B8CDF2E7D0C0B0C8FB37967AEE1F6327253C3AFF37FF0FF45C06C58141F389542582BA07C36AE59F173F83141C9144CBB9800B77661BBC0A16BCAF6273E1E476A72640256CA952F67C130F6E8F54B0BB5FEA837467C5507A0DFA256868F6868C1B0F98AA9DAFF35AF40BBC816DF280DA9A5896B722353857CADFD0793D2F17FF0DD6AEAF4D0E589D09A13C22A3C2C7623BC86DD30 -MD = 803EB566E6EAD6BC190EA69A7D8A7DADE16AFD6C1C4BA819661E1112D433BF97 - -Len = 1616 -Msg = B6134F9C3E91DD8000740D009DD806240811D51AB1546A974BCB18D344642BAA5CD5903AF84D58EC5BA17301D5EC0F10CCD0509CBB3FD3FFF9172D193AF0F782252FD1338C7244D40E0E42362275B22D01C4C3389F19DD69BDF958EBE28E31A4FFE2B5F18A87831CFB7095F58A87C9FA21DB72BA269379B2DC2384B3DA953C7925761FED324620ACEA435E52B424A7723F6A2357374157A34CD8252351C25A1B232826CEFE1BD3E70FFC15A31E7C0598219D7F00436294D11891B82497BC78AA5363892A2495DF8C1EEF -MD = 3C647B195F22DC16D6DECC8873017DF369EE1C4696340934DB158DC4059C76DF - -Len = 1617 -Msg = 9C931DFD9C4D8C101C8F629C7B12084CD414F91DAC571E93F843CB77FB6C073BE1227605078AAE37D880F31D660692455314C9E818AAC083F4C9533CC2F9DCE60229D1C4F3A6DFA50AC6DD4C5C7F2AF2BAD5BD7F308BD3618B40FD9495EFFF87FC338E55D6949BCC6DF902CE0EF1F496E2D8E63DC225AEB9D2FC7CA7FD081B86E54D87E441FA1A5251ABF4C004C691C684E0009DFD3FB7D6620126CB0D859DBB884AF8DA735CD51F89316F28E11FEDFF238C13D0DBCFFD4BDC55AAE2C0C20F6AA4C9CA620955A050B11D80 -MD = 7C47261EEEBA522468902C4481B5573DC35A46CD9A53AB9914F3BBD65954B455 - -Len = 1618 -Msg = FC9E543C76D384217780D7D47167AAC9826EAD5BD2FB0727A1BC37A15D31E45C75C2543976CD4F2C9C244DD358402934B37242C0210052F1344130E48D2D1605334F0F05592F1A2D9A40E0CA9F24821B51FDCBE2B9ACBC78D0CADB31448262D90147943550B913445E07AC1DB311DDC2CBF37AE39DBFEEB2353DB1C66C4D7448281CDEE230ED6075F5F8BB1BE7BB708337EB5ED98935F81912A86A6F727A611183945F4DB323E2374B70C6743961B84A9DA53E45397E3B8566CCB049C97B43704CA7CDD1BEE8543D82FF80 -MD = 41E86DD977362B56356A8C0ED71A630532D96D391ECB2D4E6B33C7D65F061B19 - -Len = 1619 -Msg = 69B28A0A8AFD90F5AAC6C3C3906D619C2AC2312C5B908306C75E0D1BA79551B4FEB1EC9331A463385397EE0BE08F5F7EE8F5CA73B849B35817F19A827E3628651D79112BD514291FEB570057ACACEF4B0B99500BEF10C7638A0517B3F2F69E0F76F6DD15C11E38CAEC38B02C1CA4EB53028E604058546FB1EC5647F8544ABA1382D63D6020374559C3DBB35CB11B80208E1C464BA71C35EAF87455CFCC5E820592CF4D094BE9222F027EEA87C9AD0FFE42E84EDE6B4F2C6706E78B81449918B5F83D7D72481E9D11603340 -MD = 4DA26D1080704B57FCBC90A5B74044D529F27ABA603D6B3D96A7643A0D6DAAC6 - -Len = 1620 -Msg = D616E9B17727CE826D28E5672AE1124235B8D3CCA505F931DB0E9FCB68AAC2324FD78D81F632DCCCE2E55654AAD4F4F1EE055147034F21F675E11833C2A85236EA23BAA44C3F8CCA4CE61C0CDB1EE635C361833CB20A16815942C637C67F3B5C0FA833D2717CA27FC339A66009BA76EB0CD1579312946FDAAB821D508859BC5AFC1C40042F2B61A0AD9B68357E216885113A052FED54D791BEA264C904C037321CE39EFBB8FB69DD700DBE53325BD8A71F6D832A7B7817F3DEAD7248EE86C698826BBFB58F6807F5E03AF0 -MD = E9E126FB74FE24807054D1C424F8D059FBA009011B74A7812BCE6DE4F1846305 - -Len = 1621 -Msg = 570A724BC4DB5A97944847CF9496A80699944D703300E06AEACD03BBA32BFA3D335C265DDAD711B00B0637DE34BE4920395028A4021F51E56B0300196EA2E6FA0F281205617826B76269346F725833EC2CBEF01E8CD10D506AE1421924A7118830194978E5D5FF48D64315940B740E149436D0C6665E1EDEBA26D2E898FE8B153CDD7AB4D542F4845F3836773D6528329D0338768CDD1A83F40FC7DF5601EB840C7CC60A3E1AC40DB4A2418058E5C0C4AD572CDAA8E5DF2D94CCF97C5E9DB945F7157602383A0709E785C0 -MD = E15B5D0CAF9C2B027F08F8A5478A4A91F383075F1D270D5B5C2A81C2FA3B454E - -Len = 1622 -Msg = 705BB313E3151FA58E67D27A222063D89CC1F51B0F85AFBD286F7A2679DE97E85608283BCB05A722B4964FD00469DA851DB6478AD123D15BD7C345168644E655CE27B26BE4860226846316590FE4A928EB70EF137EDA87500A1D2B7C926CE24F129CF2C26108C13FFA54DD7440E7A072E86F892A7CECE5B32FFA64A8EACCC0894918BBE03356EFBBE1CDD0D8D2874D4F0CF2DE97B6FF136C82E52CA2DDFFC7C071B235FDF45EA75F882218AA447DB1774B524E491A71C8AD36EF7E237586B8EF8C9D1F51696FA87BB7BEA8 -MD = 90A86712958E12855C635E4665FD3480910BA194A7D7203D970E306C18610F38 - -Len = 1623 -Msg = FB6A9DFFEAE4C1DDD12A0B91B6DF791491C66FA5F63C17AACA03E05A021A0FBDF6110AB4F613DC4A18C3529510ECCAB3487B52F29B21C721C36A9D8ABACF0391BE26628855F488A67EE544F5A8F4ED28496F7D2EEBF0A6293848914D5AB313DBCC97FE8D6557BC0B55428EE9F9286473E3CA7F419958C3A6834B46DCFCF7FB33B9D212B8499AF8F742F63680C8BD3E9ED47483A765E7A24BF8E025FBC6F22BF119DCCF0C8325DE3842D7A38A2D7814609DF157CBC468B90E5F994E3FA5ECAD60086584D7DE80222F19080E -MD = 1EDE2B6FF9592B652A5F95B2EE47F7E7F91B7A6A08A0EF15A2FC8ACD210759D2 - -Len = 1624 -Msg = C941CDB9C28AB0A791F2E5C8E8BB52850626AA89205BEC3A7E22682313D198B1FA33FC7295381354858758AE6C8EC6FAC3245C6E454D16FA2F51C4166FAB51DF272858F2D603770C40987F64442D487AF49CD5C3991CE858EA2A60DAB6A65A34414965933973AC2457089E359160B7CDEDC42F29E10A91921785F6B7224EE0B349393CDCFF6151B50B377D609559923D0984CDA6000829B916AB6896693EF6A2199B3C22F7DC5500A15B8258420E314C222BC000BC4E5413E6DD82C993F8330F5C6D1BE4BC79F08A1A0A46 -MD = 3BB394D056D94FDE68920CD383378EE3ABCC44B7259D3DB9CD0A897E021F7E2E - -Len = 1625 -Msg = 4512826ACF04E03A179B4637CDDA71C13DE4A063A95616E213DD9BF6F738EFFCEB958D8C5FA812CD9F7E0DC1071642B327FF8FA5E30092DFD3422CD66F371AFC8F5771EB86734099F9E731F303300E49E2196371BC90359B2099241F772F9BCEEA3A994ADA8E8A9377D50400264CD6BA2C016C6DF662194962F394C684CD77D1896980B6269944196A29EA086B6D37D240A242273B7BE94FC2F9DCE896E68F2AA6DD7E02360D80F10819A0B7B3631F9214498465ED58191F33A002E85781E21C711E4239481C704366E15E00 -MD = C1272511066AB7890F4EAE81DD9123B809FC1A79C1F34C93D21FA20598CF7A5D - -Len = 1626 -Msg = 5F0A71F137E9E6C4A89323D63F4C64524A8C571FE3B461ACD6ADC6868BA280CF54209AD953F2B6C79D94EBF15440257B0FAD8DA1989528EB001637A9ED39B5335111B580091106D3578BAA32220763B87881BF1C04E6F735316B1DD60939ECC8FAA36723443835BEB11375A8D1777A1E67F8383D13DF4D4AC7EABED0639F6937FBD56BD4861A2619916E378AF371B26302978C98D29B2E0D5687FDA5C0042865B31C18CED3D93E6955F868BB2B1DA780FEFF91FCF8C2FF368A19B053A4924CB118D4446B061C57AF4DA86100 -MD = 953808573D5D48C4FE34008078F11CEBFD17C2E053C1BDDF8156125F3A12DC22 - -Len = 1627 -Msg = B5508E04114A8AD105281386E03A926D5C1D30675AE728200DD66183ABC7CBADA4B04461905FB650ABE443C35A9CB1F02036DADBBE4AB835546DE4B073A169EABF7B65BB8A7A189469C5FEAFBA84EB212AC4032E2C0E98B440FFE7AB41315F6925C019080AEE16FE28797637790A9427723EEB09E9501FA7EF18D332BDD27E9A211501AF5D4EB85A08B29004031DE3A819FAA9F1FF60351BB24DB87A0C9148DA4F3D36A59F3A1234B0065169B7E04341FED4FA38A06DD11B2F48C5C717DF6412D7CB8C86306C1432A70C1300 -MD = FAF00AAF0F32AE99D056FE30FF5A69628567F86C88AC742C678FC5D0C701BAA0 - -Len = 1628 -Msg = 460E5926CF79EAB6CDB5EBD255A787EC57EC030675F65C2CA6000B39C36B6CA62AADD1A9B6DDA1FF864C57D939A5AD53F463A4AB0E2839C9687B3695A2A78C9FF44A4A1822FD0CABA41196EE879F766FE11B7DC5E6E65BFAD3D3C3ED215C2D501771C16C483E57CB0D33FC1F8ED374A99E68AF15A412F85852ECACFB8F852A72EE683B9BD417F79AA217F6DD7A94A7BA87336A0588831E7A4028AA6418711B9E666573411DB81C2B3CA5B0243EB5DA495FEB870E0314D23AE7A667CBD3D6B5BC7CDE2574D09FB4FDA4581EF0 -MD = 41FAF2E64F608427AA23DB85A29AC9C46D4511F451D092E7548AF717D5DE877B - -Len = 1629 -Msg = 13F4F5E8D19555A5E0636AEACF49EDB517612FC8CFAF02777FA81381D9F17FB9EBD3CD7B68C5BFE27C8FCBB83C28C4E9708EE72A5170CED985E4B27A68914D0625B03F9641F4E610B53B791CB9362AF625F1391840D0A375EF19FD8D038F4F7BCDF4A203E4B4CB3657C7254D183E3D88C171AFB511D043671E58CAC1ADBF03AF311C19AFEF2EDEEA14D53FD4DC7118506B0F6300CA176B2F891278894894AFE678A379DB28FA5E4DCCFB5E6A43D0A67797EC976FB6EFB312B1E8ADF73DEB9EA58BD2C153EF7CD20A8C48BD78 -MD = 4F53885AB1D984202ECCEC03C95B6344BCD6FC6B6A39608ECF409C01AA9A02C4 - -Len = 1630 -Msg = F8053BBDDEFEE95D05436D656F5CA1B71672EAE38D2E77071A086E1481D32EEA88336D78B6E75E7534B86168D317870B322C7733948FDE6EDD6A043B84EC6DD5D98FCDA0D5D2724E4A7CF497DD360ABBBEE936673953789BC7224F0585B655D20FC21E2064355A419194204C22C9E32B58714C62535CE5266EFBC885A8058A870AF26859A2BC09691B4B1701E267C92FFAE916792BEBC5EB31D1C3A89211DB21472CB045177E747496F0DE3BA5A7ADEC1905162593C9DF1E0AB50B00B2D3E85C9AB75EC875731B13474C9298 -MD = 52C828DC907BDA077BF81F3D9F6F39BA7D5509152C184F105F185263E2D3DDF7 - -Len = 1631 -Msg = 20F91E3E6BB637C2BA5B562FEFB1AADBEA72F6DDE874469E7453B74D5EC85E59F390CD317D5ABCA6EA15CA5B307F8517EF25328A2316E9CE32D9DB2609178F8B8DE2154F5EC37BAE069FA9A4BBAECEAD354D4BA3387F043085FAA6E5DB3BE7D0A257E1F46B8AE899BCB6932448B554265E8CCF7251710BAF133A4083F17279759E4AA27CCD1274B1B299DBAF19257C2DF5FD2F2060280D55F1B11B7EC362F894A459AA81D0AF2B3C43BD6D3767CBB6DB53B1DC54D4545638FC7977A7D81CCD1485B11F8D7309E200AD569474 -MD = 61F8498236C228E1E6672A70AC937E3A25C8DA86B4442BE44B28F3E5F023DC80 - -Len = 1632 -Msg = 4499EFFFAC4BCEA52747EFD1E4F20B73E48758BE915C88A1FFE5299B0B005837A46B2F20A9CB3C6E64A9E3C564A27C0F1C6AD1960373036EC5BFE1A8FC6A435C2185ED0F114C50E8B3E4C7ED96B06A036819C9463E864A58D6286F785E32A804443A56AF0B4DF6ABC57ED5C2B185DDEE8489EA080DEEEE66AA33C2E6DAB36251C402682B6824821F998C32163164298E1FAFD31BABBCFFB594C91888C6219079D907FDB438ED89529D6D96212FD55ABE20399DBEFD342248507436931CDEAD496EB6E4A80358ACC78647D043 -MD = 43640F408613CBF7393D900B921F22B826357F3B4FDFF7168EC45CBFB3EF5EFF - -Len = 1633 -Msg = CCBDCDBE422FEA72623873EBCA042A2F27EFEF40EF34289984B308672F89D8B9E0B9C3BEAE4972A892A4597D2970D402DFBE3429B6FB92D8B5556ACDD674EA060928F7A9A66A2613CB00AF3E464894EE32EAB35E9DB227747838B896AF8A9DB1151BB470E1535092944982BEF528BDBD00F444D02A220255898EE8940191C15476E167DCAE3365ACC671CA62BAE9FA5B6AA03BDD55D2E8F9BF76857A81658D01992E08A2F6418D2335BECE9E97D6906BC3C8D6F29D9C5749F4A57910BFAD25EB298C056DB574BF585C82EDCC80 -MD = 9734F75588BACF760B03AD84A91747EAF75D81C4CDBB03F1170EAF8F62F88F52 - -Len = 1634 -Msg = 1ADEF1C21E7469C34E78EA4D2D257FFE5622D172B2DA0E93EC6FEC7FC825158F7C7C2AD1E56D4309FE8461BDA8E06C5003A912BDECD3AE2824077F89845D2BC0D83199567CAC50D05F86B9FD42901C93952C85405A22CDBB584303A613356B53B739828865243D6AA729C4D9C10AD0DFE8B748BC2EF4303DEA69EAF396D6720E1F11995D2703CDE2AF6CD6E8AF7DA17067A3E38F6B231D199D32CE6AA71A0BEA2B815AE3F68B0BBE42979F46FC50EDC801A2C5CE8DBDAD0DE61E92BC8F8A8CDEF30F043BCE6F55D49065188780 -MD = F1E66EB02E6AAE08D01B76985D6C475A347D09F9C6807F460E7EE2261F6A93E5 - -Len = 1635 -Msg = F15F5FD8BE90D7DEDD1314869BD2039DC2F5908B908CF4741728AA8EE6F24D982658DD54772D6FB451CC4A2463EB47E06CC1D0D831F4890C68654ED11FF62932B5889729B861A629980AA86C9F8615DC9EA1502BC3AF35B918F0863E5022DA60AC88490D0C64929517B7EBD0CD8CF9FB82517E12C27F06D5A8250CDA267E53CE4CF7D3B26169197B38DFA2589C29E3005C2556F3E50E26CD4DD809DB873303A3DD2141008E851B3D4B7562E14BBEFE2A97D47EF29341324E551A3C13E08147D40FB6178BD98DB0BA5CA4640F80 -MD = A081066A4B0F77F99BCD07C5D3331677C6DAE3DE2E85BD69EC6A48BBDE0F385C - -Len = 1636 -Msg = 0C34D0BBBD2657D0C028A030BBD626F2E4427119D2281E6E75B0BD087C2E7FF0947C8AD5B17E151EB991A0D5C9000EB8454417850BCC869D87DB0BC38C04ACFD1B94773810681888B83EF92ED5E9EE671618DFE67A9CA62E5F6B840195FED233DF5E2CF2026CC89D7997AA3C870C061AA877DE2DA503503BA703C3658FB1B3A2B6C886C4855DDB6C779A3D9721340D41D556B7B5F91BF96F04B8BCC37DE2E0B666BE14F7E931DA6BA91B7DFBCD2E9E16CBDBC660A9A569A4360ECEC700873C8501AEF6C260C564AFAFFFB568D0 -MD = A7992CAC87DFE6D0909A0296366EF46D30DC8127B08008FD0BF7E194066019EB - -Len = 1637 -Msg = EE248972CCC5FBF6536657A10F190E2DF0266662AC50680581ED4D5E3B7D074E950E47588CA113B307111A599D797E08814B4A166633607CA024D296A0733DABFEBBFAF43A7A98B16836DD0983C31B0F8B0335A50BA8C5EBD5CEC7D3562CB8851BEAF6677A9ECB951EBA7CD2D7433E6FA77469AC2ECAC93D88F42B9019D41E8F588BC6544512E5CA8BDD5E4DDD2428C73255A7582C4BE5788057067B530C2539F5B01671C146D28A99C1264C69B76A079B2FB3D3FE7E6ACF0679E7B7DA1ED7484A52CED5D104CE4224EB13F630 -MD = FBA69B71CEDFC27C3EFAD73A538FC3B2F78CD9DB8579C2C26DFB5990D7D2161A - -Len = 1638 -Msg = E6391A7E201B049AAB723F633CBB384ABC9C7AEA14BDFB1466E06BA8060F066848A3CD53325F07A638D074B6CCE4837460E228F9978F5951563462BB40D8669831A75E815DDAD72089B98495C2C853E80BBD2EB59FC96EDAA227844AD127045AF51D72527139A935618175B98885E4FB71BB3480CCEA51F7E75CAA344CAE25C6194EF3BC77DE186369C97DB534D70C606D9E1013EEE2AF02413D9101FC4A61E3350E81A3528DF1E746FF5ECDB27DCFF89621D240ACFC80F074D7F83824E5842DC1F4ECFE74397E4C91AEF9F520 -MD = FF77691937F3116A9B32D8675FDDAC879C86A6CB7743E08D7930002C28715C0F - -Len = 1639 -Msg = 0BA293C65A0223662A04FF90E97F152B2BB999E3C46966030918CA341D6701E4C7A19AAED4ADA69CAF9C45BFB2CA35E813A7BC92C10DAB5C68F64C5B97923D5402BEBAEBC962C77E188A283672210FFBB62A92157A09AACFCAE39B8DE00BF70376EF3F504A5ABB488242BDF32E946C6BBE590472E4A9C05993BCD9F1DC6E52431FEE6F20AA9CBF952548482CBAD43043E8725CCDAB58D5F37C5307DF9B57C199C71613AA3C4CEF6C7D13677226B213E78A8E404607E5BC592E0E88DD48650C8CB2F6DE18B71DA2CDA994C79948 -MD = 975B6A69B3495C1D9D00845A3762BEF590F9176E6C946DF4A5BD0D1ADE2BA65C - -Len = 1640 -Msg = EECBB8FDFA4DA62170FD06727F697D81F83F601FF61E478105D3CB7502F2C89BF3E8F56EDD469D049807A38882A7EEFBC85FC9A950952E9FA84B8AFEBD3CE782D4DA598002827B1EB98882EA1F0A8F7AA9CE013A6E9BC462FB66C8D4A18DA21401E1B93356EB12F3725B6DB1684F2300A98B9A119E5D27FF704AFFB618E12708E77E6E5F34139A5A41131FD1D6336C272A8FC37080F041C71341BEE6AB550CB4A20A6DDB6A8E0299F2B14BC730C54B8B1C1C487B494BDCCFD3A53535AB2F231590BF2C4062FD2AD58F906A2D0D -MD = CB3713A5D5ABBC6AF72F8B38A701C71269B3B51C62EC5116F96AD0D42A10FD90 - -Len = 1641 -Msg = 9D8A483570AB16908C17E63363E8B292F8EF6D5B7043BB17EDB7D0B9AE9393A2D13FAFD0909E50E437C3934C18ED11200301C61196C2340BD70D6891A74CE8C2A04F31BF653E9610C5A93E3203A6B188F36F3D753393FADAE2A01A0D4F5E51BEC7AC939194A15C707CEA4BA48ED4D3A85F333A69F33E63E7EC7156AEA49669DE0BB1E75B5CCA3A759CB039DB7A977A5C1F6450FE069D595F30E965B7BBF6184CCD3E2E4B44FEA466C517A1EE1E5B40AC7068EB0E62CF13AFED1AB13DE7F679BD19840770B3070FE7FBD453BE3A80 -MD = B8E5488F2FFEEEBD2A82C81EF7904194978CA2C2D5EF44FAB9C39F2E690A9E7D - -Len = 1642 -Msg = 37B1027E4AD24931103547B93B8A36526E738388503D72B153CE7D867A3094B92CD0A6E35A35FAB85BBD2BD211153CC7D623EE0B756C4F6169A36289775F1F42257FD3E799B63004C5799E32B46973FBDDDC46E5E9E6049043E03E0CFD0B7F51F6C5A75B31E4A0F47A65EDEFFD37A830A742F7AC411033A12333BBA0BC3F0757A12DC2B38A5AC54505D8E2F7CFC4C04ECFCA80745C22F40F0A13EECD55A60E2DB5C292AB38E8626CBFF2A66C76BEA11CE36B7726F9E2F7EF9779EDB7282A883FECD8093E4A5523185365C8877980 -MD = 2A6C14FC80A4F7410934391811E46AFBA5074C2E8094891440B66F70A90DC5A0 - -Len = 1643 -Msg = CCD746C21AEE13D421F7B853F2E57D907150D9B317E55231B06FA13231A42B8661C0036D4C03727F48AD32C189F68DB5994611ACED2FF28FA1DDCECCB714C84B5D11621F0A7B59676922FE06914633FE0DAE5A72C3586D194C3971A5CA0B22FB1EDD7DB42C8B992949E642C481E1375B19EA92FF7EC3E7511BBA02A0D4CD66A3A57E854533AC3B46C8EBD47FEDBAA837618A9262FB03BF1B5AB140DC5F46F98E4A58B252EDF82AAD7E01FD0A89AB69244B4F7BBA5EC2CAA096ADCC674A5F0B3E55D8B4CD22F19B7100E034FE95C0 -MD = 06D4827608F662EE8C0B66E09CCB7AD7B7920E5F029202B0BEC83DF287727EB1 - -Len = 1644 -Msg = EE5AB1EB81BD8A647E1225744B90BFA8A998FF3018202AB4DD9C4F2891FCDA96AE786FF6D6530B0723AC3C7E943762996A7DBDA33DFCB8B2CD33F53150A8FF6BAA16E0E0CF8122C4F4B6BBCF4A5DCC5BC47F1BF41A1799CDE31C9D814444E55892E513DC9AD6E885AA305B95C087494513E2D1CB65D5AD9D1932FD53AEDE0974C4190535730C4C58920735E175CF4BE06BA5B1942F535B8898F6DC211593A3AED8C7AE1C32FBEAAA3C7FB171C46B7753679567BDB829E6EC769FB0A1C2E9F88CE55882A6E52AA2763EFF719D9620 -MD = B86C0CE72774CA92629297822D61C5E916437734F67738E1C82A6C242326AA20 - -Len = 1645 -Msg = B4E1CD73549230E9CA7AD60D99CF67C757B5A6C1105A39BBB4B92F3F11C7F1EAFDFAD71AD607BE795A60868C209711437A9D0B10F2FA3F0AEF49625197BA5014694C273740D76031BE3CEB6D2D959A7EA679B6DD2810AC4894780724E4714271E5C2957D20E55C384221791D1804BE9FCD656907342247EA85EB4D7982AF5B9AC6840FD60751DF25F5FA29B143A91FCB486013071619C8095548521665EA1098E7B2394B1161AEE4E1CB0438D080B95B4EA303E3FE8AA60C2E6FA5395E980E8B03FDCCA41D1C435A5C476C911840 -MD = 57BD0833EAF05F30C7072422BC0C6EE30E0860E9CCE768A8B1248BC50F4407EF - -Len = 1646 -Msg = 034D64592B99303F21D91AC35FF3B9A0A4A93EB886C4BB487B566170DE393F1E5CA82B704A6C029343B8BBCD674ECAEE1AEED2A6E21ADD8BF5219A37F8E1349C7A3F76839A3F39ADEE5CF4B9E91FCB68622ED5DCEF01F546C9B99A48456CA3FDBCC5013E47A4C345E54EA0FCC52FA14445B18F956B2C3A3B6C35FD9E72A60AA81D5E7E1CA0A54AC9B5F45B1A9E7ABC4D78D2452691EFD6ED268873CC94CEA342332832686E70703F88EFA1764221CD8884391607F8ED1FD5138ABF28D0FAF5904989C9D54D4BBCCA9C77374ED2EC -MD = EDCD34606F39289ED102E2950D2F49AFE12F3BB55AE93CB41C1EC90586BF2AF0 - -Len = 1647 -Msg = A290D488AB0626BD0BBD35BE8933D6063AA4F878A966E33B73D42E40AF66D0B242E3A3BBF42F7F00DC933AA19DB48508A62349A1142F9A1AF638A8A6A459F096D83A03CF5E7BE4545EAA22819AA816010D35C6AE5AD5412FB14B526331A9445BD374DB0272303C71E92924A2CDDBD8186BBD193C2C0B83C08E041B393CA0A8A25DAE892F112634C43FF581D0510BEBEEDE0E95FA8A8F0E25302DBF77DD22CF1935DD09D2156015825CDF95175EDE8816305459A901072E4FD2E2BE191D5FE13BDDE04C535C6984BD9EBE2DCA7B12 -MD = 062179D2CDB512AD5F56A8908BFE121E763962C8FEFDE138FAD3CE6C06F0C01D - -Len = 1648 -Msg = E64F3E4ACE5C8418D65FEC2BC5D2A303DD458034736E3B0DF719098BE7A206DEAF52D6BA82316CAF330EF852375188CDE2B39CC94AA449578A7E2A8E3F5A9D68E816B8D16889FBC0EBF0939D04F63033AE9AE2BDAB73B88C26D6BD25EE460EE1EF58FB0AFA92CC539F8C76D3D097E7A6A63EBB9B5887EDF3CF076028C5BBD5B9DB3211371AD3FE121D4E9BF44229F4E1ECF5A0F9F0EBA4D5CEB72878AB22C3F0EB5A625323AC66F7061F4A81FAC834471E0C59553F108475FE290D43E6A055AE3EE46FB67422F814A68C4BE3E8C9 -MD = B304FC4CA22131857D242EB12FE899ED9E6B55717C3360F113512A84174E6A77 - -Len = 1649 -Msg = 88D11A550DA2A6C99D1A1E1ED5FC7D8F4CF3593658F13D30AD65CF6BF862611B87AFE11F22D46529E8BE7CC9D5834DFC3812D8F74AB895465C5273D7204C7D2D9A015BDC343AAC4432B8E97A9BD60FC496EE3C1AD18E0CBFF4745EBF9A8E5E917C4CFE68958A1DFF1B5E68FEFD553C72B5F3725054E44E38F94112CEEBA3128EB6049EBB77CD67014A9D316D218AF547B695866E7E058611E8237B185783729690FF9A1D97E99AF0EA84683BCAFB12496BCA91E3AD271EE225F8971AE8CEBACFDB18B8CA7EB67DBFD2A14684CD7580 -MD = 3A8C30139F136E9D86547D29B94D863DEECEB27C4075D84C320331893B291652 - -Len = 1650 -Msg = 8770ADC96669E667525D133761D4E914C2A4CB5ADF81DCC6129A88A496F5231FA960101F76F1B43036F76084B773E76E7566F489550FBCB0919013ABE142BEF449553051D2249DEA6C8ECA9ABEFBBD7A167D3C5641393B02848D3269DB8C13519B11087D6128BA9296B63B639FCD6132E5372A93C9E30AFBAC564526098A6DCA0ACDE2C659EFD9250D187864F82505B291683B83A686709D792BD785B8879DB4658381E84BB4855CF7D78A16B7BFDBDEAF352352FD34D1C204A8AD1C558E128B0788D7D27F6F508E7DFF2F46028A00 -MD = 50DB9257BD22472F7ABD51C90D2DF9E93525D55147FC5D013BF3232440CB378D - -Len = 1651 -Msg = C355A7E5BBC13F1F080B810FEA90CE4C034AA1E7C3C6B209FB87399FCBA4A344706EEDD97AF881610C64FFBF44AD0BF321CA5249CA6EA09EE34FC513DEB34D5B98C6ED7340ED0D292D967C60856FADBAE4318FA427B879FD6852CF5A871F9D6428AC10CB048F6737DE6847F2AAAA998021A26C0F85760E9AF6CC8A5428AA308FBED9BEF937BE4BEB24A9DAF6A4F8374991D6C7961D1EEC6FE123713F42D78713734ED8792A278368119C83C9999BF952B1B1F7FADBC8F29C6237F5246F17948902147E6659260D2120DDADE9266220 -MD = 2554FD05DBBDC468066E41D328E6776EB1DE7A584A2BECD74450D91627144CB3 - -Len = 1652 -Msg = 0EB9AC23DF20C16D5184AD7252974B6A436D0F3F63696E5C3BDF6CB0D413AE9A6AD4873ADFC7449715FDDA2FF70691DF23FE97A5B4B26865B4079420EFE15BC91D49EDE69824460D9C088BFBFFA099BCA0069BAA011B5D6A156DAB76EEA11FCA667511308A797798FD06722DBE91AD244C1783886303E1C97B9341EF1E15F5A0CF776E047EC051A5AC226DE0080E81AA35D14910036D920F62DEF9A28E66E0120CBC15A6DFEAA937CCE1529DB8847A4400CF89D5BD9D46AEA1E82A5DB785848D8CF5D7B85463256E56B67F3DB31B00 -MD = EA3A1C9DF79C3414A0BB7FA0E011A27B350C1BC94C8225E9FF35B7D17C911177 - -Len = 1653 -Msg = 2123F23DB3299E66FF044A90F8668E0C935758B51E11A690F1F6B9A95335FD1A2A2F51B45747C2565CEA770C06E2C95A879B61399B9B86A0D44C557B9889A367416EFB6F3CB2F36D2FEEB487F93B33CF1587DE397CE5EBAA29DD808F503152562CF20F6B5E1CCB111A7E79831B2071AD69D69E8623AB3E7CC9445D30DA19521CCC7352F6FDC489427599A86A963DAFFF24483F256FAEC750C931AD732E8642355F73D901D4819CB922B92CB05D62C2899CCDB557EC15326B4B135E2957A548FE861F70052844AEC9CBFF7F57D64DA8 -MD = 98E89D2A4DBCBB1D8FA6B8203EFFD5184ED301D4D693324552A11203C5F9B024 - -Len = 1654 -Msg = 0AD619AC99A7F310B9D30C4AFE98149E59B6155B94C064CF2B9D2129F83A062499CDAB4BBB94312687FAC290410414064C5951973FB6E8ABD75975CA110B9885E2CFF19B89A33AB4C0BE0A7762F001A7732AF2CC5791C07730757524EF7BA7D5BC40AAA820E6DA3F16A5975CB3F68AE52E074433FDBFD831A5A625DB6DD7F3D2E08F51103F499D9457B95E28C6E003A0C29F39D0E5CDBA736E78E5F38643BCB5908779D6BCC711D2AEC62B9A7B24876A30D9D9BA65D032FAD16DD75229DD9DB6E87309AA897491D8AE19BF84CE0380 -MD = 2882FA1D299DA6DFF73EB699DFB6E9058757A291CC66BB116CBFFDC44F12498A - -Len = 1655 -Msg = DD5ACA2737DB9BFED4999C08898B23D933AC9C173387B1FDEF93BAF1224FA1F39BB22E3B2EA9C983B18ECEE377081BC56570B60733D686CDB0CB94642C91E34331E372E7FCC400A22DBE4A984871462184CC3276EAB7423616BFB827CBA65C5E7DF4E0A1E9F5139C2E87892C35C9A59A62D6E204264A0429FC33CE476716B4E0F059543E034A0B7E03A1EB15D4C497AB79D5C6B4A9B3AF26DDCF30CD5D7E398767E871DC823CFDD694C00C2F6256E28493777B09C51E2A2E285AA9C6FCBC80493C0A3F46FB3B13FD280C29967268A2 -MD = 8EED8C2D233ED238F7E5F447692C8A838595A95C310896B953940B9BB5A6B81C - -Len = 1656 -Msg = D2CB2D733033F9E91395312808383CC4F0CA974E87EC68400D52E96B3FA6984AC58D9AD0938DDE5A973008D818C49607D9DE2284E7618F1B8AED8372FBD52ED54557AF4220FAC09DFA8443011699B97D743F8F2B1AEF3537EBB45DCC9E13DFB438428EE190A4EFDB3CAEB7F3933117BF63ABDC7E57BEB4171C7E1AD260AB0587806C4D137B6316B50ABC9CCE0DFF3ACADA47BBB86BE777E617BBE578FF4519844DB360E0A96C6701290E76BB95D26F0F804C8A4F2717EAC4E7DE9F2CFF3BBC55A17E776C0D02856032A6CD10AD2838 -MD = A3CA830D4771C1BAA7FADA76C5FCEADD0F3CB9736E19CFEC52E9E74F56BFDD55 - -Len = 1657 -Msg = 061446729772A1A26F7F9A87702EABC582071872B6AB1373A1B88EBB259F0EFDEB159E12792588061C011602F6C42B8392E15AFC582388AC0903628E64C1DBE4F2B86109683F28EDC22C12CBE5541683715D039FEFC23E91629E9E4A330C6D0A68276DC60FD72C6AB20B71B79D2888159F49D327693CB48B61DFF2DE0E74D8A452320F9A9835D2C28613D555346BBD78F5320896E87AE92BC3B00A1B1BE403022D81258AFE07437BE13D339FC4481E96856D5CB49C547776C9CA467D05C38B8CBCFD71C0D899645705584F6ADDCCF000 -MD = 74369695B2D5D4052593C4A22058C060A9D8598382105505DFEF52BA33C47265 - -Len = 1658 -Msg = E2A4C02A8657C5D41445E9FA687E6F613278D5A8E9B6EBD5F76D817F1F5CCAC6C72278A70B96FAFDFE30ED00C27F20804FDCEF3882E3E47E3A36DA1708BD8059998BC367A1362F543CA8B9D224C6EE1C86E274B7B20D2CB64D6DA4ED53C751F7B561238AFB974D96ABC0878A386A7E28A9DFCE3C818E1B124ECA55BE07139CCF6C6020A4E4596A2EFCC7B84D271662FBC72074A16AE5EE37AAE4E5CBF19088A3C6C54A3D573B41889CE3D04459A0C466F0DD8E5CB3FD9C18211670CEF5F11DD406CFB922F14B7DB2F1F4B5C8C3D97240 -MD = 8E478115D28EC71841A76F2F714F4CD06701D8F0028B737648B2885293601D0D - -Len = 1659 -Msg = A2871DF706DD5662C5E6ABBA84790DCC435B5D2EFAE1650DF11245EAAD20096CB90A216A0F36BBC3DA6497087B02C81270B7698E97C6047B5108DE235C97EBD599DB942844AA6B3E0737BFA5FC8EA09022F310378A8E8816E155E535F0C0E4D2ABCCDE37916D9527680860DB6745C2B1B245BBCBED0C2561656DEAAE921B8C82872E667936F49A6105FBEAB4AD46A5BC7BE0BE0303EE92EA250BBFCDC3A6A23D514C0D9CF8DEB91FCDD421CB6A4EA988B4F9E6DCD2566B6A4702E9CFC437AF87EE22A20E558B306A97E11ED0AF891300 -MD = 4501B9301DDA16E6CDA73E08953FCC9CC062347425815D895F3C765B875DABDA - -Len = 1660 -Msg = D7F71FB30197E861BE59A77679FA5CD15239843842F4473EA9088FD6630A35949863D53DAD1E74093237CC822933387E7EE37A6D6190B72C52A08CF250954582357BE1E81317A6B65B247F21E0AD32BCFF600C5D671F8629C4946EE505C8CDEE4B8D6A7217556193538CF965FE9CAC3D44BC52898894CAFEAFD11F7ECCDDBFF518D6279D5DFC66C2D09D7DD23B0D3C3245167BD44C1089A1544DDB9EC1177290A2180B7606EEA44663D1589F1E9207B37B74DFB97D17F4D137B0719A09A6EF0C39F6CC0741D3A672005C707A09732120 -MD = 67D2A9BF0203EB2F4D9D06DC1D3D142BAE8386B257F875EAA0397807EE8D4A58 - -Len = 1661 -Msg = FE7DC1A26BF9B564A32930CCC3E3F143EEC2E2C92A63D31025114D0C335949CFFEEE336489D1A830731343974B9DD1E7DD6C83659B238D7F2EF4C91DD38C382BF03D32A0C74E704CF382A8711AC31149F76A1EA5FCD0B89B064562CE0C6BC46B34861B21CAD36CFF2AD07CD249FC2327785191B4BA0CC61DF7428298F852C250324CFBAB818294C24C534097FCC5F9403266955B65C47123E3E0D8CBF6E8478A231523F9913F3F6C6BBC8050D116400CDBE68F431860DF7322CC813B48DB3E8F52D35409D1E95882BA54C5857DB67A50 -MD = 6F929402E08474BE42032A55DF4941EFC0D83792586BE909B366A6CFBAED1A16 - -Len = 1662 -Msg = 872B77FB2DFF6AB011C7462CDC3B4892AFEFE4F6A786952DE02E49FE0C27FF89D81986E36F173D68B25D61F8D480BD3D06607545E618284EE0D4C2114BF7B00497D41BA41374709BE4FBF06A3F883701799B5FCC7382244C566F91C7398B13C06CAA5EB79F6914FD194CD18023D431F4A482AFF991B130ACDF7425009DE58A2049E577A6B19C68F14AE6AAA18492DD85FD6BAA91ECB346616819BD50B929298A7C0240812860C9ACABEBA7DDC13460F36C3ED6F068B200D0A3B8AF51ACBD07DC4CAF4EDCCFEC52A1D79F0465E12E74F0 -MD = FDD1D73EA2DF3CE624D1ADFB7E96E63AC28C21A191407D106B6C8300ACBB01F7 - -Len = 1663 -Msg = A73BFE2AE3EC4855C30923FFD31C8258B4B34C739C869A97A13CA07930E60BE81A0F7893741CF2F2DCDC9272559CE61A07F8F750A0BEB50A604BC22A35046B46AC78377F82707FD436961291FB862F9BEAE56B4569009C486FC73B3FD36842A3074B88E8C6B5F8815703DEAAD29F1915213EF61AE55833F52BBF8DE07EEED341AC93F3622FFC24FF713D3B5FDEA439CCFDC8B41F7449238717249998E651E3E9C9AF2F0D56B9EFE2E2AE3E3B67CC8E70E4CDFF3BC301B5C8BF92089A2BBB925D0308543C8BAFF4782E9A415C17367E0C -MD = 012E1CB7C903AFE57194260296FD9B183D3DCFC55B23986F47D7A73CAF5C86DA - -Len = 1664 -Msg = F2998955613DD414CC111DF5CE30A995BB792E260B0E37A5B1D942FE90171A4AC2F66D4928D7AD377F4D0554CBF4C523D21F6E5F379D6F4B028CDCB9B1758D3B39663242FF3CB6EDE6A36A6F05DB3BC41E0D861B384B6DEC58BB096D0A422FD542DF175E1BE1571FB52AE66F2D86A2F6824A8CFAACBAC4A7492AD0433EEB15454AF8F312B3B2A577750E3EFBD370E8A8CAC1582581971FBA3BA4BD0D76E718DACF8433D33A59D287F8CC92234E7A271041B526E389EFB0E40B6A18B3AAF658E82ED1C78631FD23B4C3EB27C3FAEC8685 -MD = CA158C46370E64A9F032F5BA8E091460FD555EF700EDF7087E56BEBFFA261DE7 - -Len = 1665 -Msg = C3A6C9A38DE76C9A716E9861AC10D549F0C5EB678DC9FB2919018B5DC88E365F9F3C03DF1FD9DAC46728ECE38E97465A418F599EA0674680EE6D3BE167E1C6D7E0750228AD7FD8C7EA070AB9DD73D6138DC70AC4D9907235DDA108E379E81F7E00B1C9E2B7F16FE8DBA014853032A619166BDC2D488B3AE8615CCAB2C2A9E1A2D5A38753D9B2422CD91599F2D5D87F89D6449491EC7418F4DD39C53DCD9F1EF9F3448E75E8A73C33C32EBDC3A613BB5E5490540B1C74E48CF9AEE17BC3AC2BE50F80CDD0C69649336E5545E612DB2AA400 -MD = 24C5F9AAEF4D1C2507EF097882FFFF026C378141F66F050CF61CA035110E6DF4 - -Len = 1666 -Msg = 0CE9C0A8B363C6504DD16AF53CA1028AEE93444E0A82A1573DDEAF6B41B7450CCD5120A72621983ECABE5BABB8CF0F1D3CC9E67AD8309D71B0355C3F9D667D1412982A0379EC376DB3B8D44D01AB58F7A97552DB4B1A178FB3FA15E33DEDBA345D7BB475731EA53F20E8D6CA0895B33117446094823E1ACD7A5A5632AF20ECBF94ED42B62169867FA6B4E9D512B9A4B443B2AA6A5752EE68C63CB42E5FB2C022C60DDBDAFA25E8A2493CDE12586D17089E9AC4A9E9CCF0E7FAAA5252049CB1ABE8DADC9EA9F552DA996B780E7B90144040 -MD = 409787A204CD78B9E09A24D4F728A89DB8CEB50F4532EB7BC34EC6FC93B461D9 - -Len = 1667 -Msg = 566EA91163B197DD99311CDA8083A3FEF200E9B5C84BE85A9F60D0AA73502EAD446FF757E4B37C026493573BBFE54F547FF6124E8F4C9478F68BE242664886695332185AADF0D68F38FCAC08AF2AE40F0AB98BDE182D4D597E6F1371B90D0FC4FB1EFC48804F528A2C6C4EBE47BE3FC4B74F0B795C422B4EA4211440299953714C51784D93329985537903ADCF14262514E2B576F916E2463712AE0B6DFC041B411BEC16FE050AE3018A28C6211AE20D65E053C5A68DB5AE09F0B5D2C22FFB9EC83D9BF7EBC54E66F0A01A2299416123A0 -MD = B9BFB2D909830AE0950C1A985749C291A38B995147D65E335D4318FEB930FB56 - -Len = 1668 -Msg = BC89FD708B4E589FDC763193633E4D86D65857FFD3F69BD8972DAE8B8B029C8CABDAEDD159B0D0EEEDBD8302C279A5EF5C379F1DE5CC7D8C0021221E04823E28BDCF6535940B0DB0E87F39731B8CC48B95608544ABD5E01E1E3BD4D24DCF20863D7EDC003DCD0FD458306D3C4CE67E93DC4EA2EF2B6F5A1EE908CA23E32984ED946E9EA2588E33776D926024FFC5FFF715BF87E424D05618D3A914C77CA954B8A80BC50624CCB8EA30E226DFB50BBB956F147AEF1BF0DFDA43A6114E5094E42E6B6F39B00BCBFBF2C600F2629C3FB66320 -MD = C6F50ADD6473168FABDA907CDF4F8385327253CBC7FAD16134840DAE360EBB6F - -Len = 1669 -Msg = B594C19EA19FBC4A9C7DD9DF4993CC7171ADD9B0E872BC211F60EB89D313CB5B5FBBDEB5D535AD20397550CA6534B859BA881D0713DEE6774471F57ADA476A511AE98414F07482F49F783F069D7DC5AAF42EFCCAE350A7320A4703254687258CB0B056558E2C6E31A2B336D1C36D770043DB799DA99CA06C38B93DB93F776891F2BF2BEFA70BF87C0E4C1383FFF4444DF05849D9F04699BDA9A95859BA5D038D42AD0EC4CE1AF15499230FBE9D12CC0998316266FB02ACEF9BC4FDFFC84E5A17FB2A605EE8F0239383A2DBB1E1A4087488 -MD = 5555621AB2A133A7E7E106284D61DF4FF6728CCAA805A546E24EA3F9EA81CFE1 - -Len = 1670 -Msg = 32366020205740D26523E6A91E2ADE18D6D7018535C132F17EF6AEDF034BD8D812739188436F1AC21E429C0798FB0435975D5555E34DC5F1B412647571D32B2180E53F45DD83BA97524DD38AFA67A6FD54E93BD33746D80E70B46D5045F2403CDF329DE154099DC721F6288191B9583793F0AF20774C730DDEF605A5B4C36A93B726D1CCBF9A2175E425A866326BE8BC1C3600F7C95200BC28F498CFD645757D8D90A2CDA7E6E15307F61075B78EB82016C0ED2DCB4F6903F71CDBEAA2DD273C4880B6EBCD601F1813478269D05D370D54 -MD = B106889E9AEFAE908C2510E43881E6404F356661FBDAA5DA738BBA2882432910 - -Len = 1671 -Msg = EA87C7C79D9C993C4EC01DCF55AD7CC433F8BC8101C9584455939A975EEAB6DC9C7DB7A00ED54CE15B473A26BA861C0E53394D762E2E72AC6A3930AB4E90E4D443C1B3E1CE337DEF21BCFBDA38D863D7330B33425A2251BA3D3A4935F5C1B62A2FA08F40983748131160F11853F05C1B65075FE224BC6289C31A7B93ED78C3C2428F14ED79CD0A2F7164979757251BCCC4A255F1E50DB5DB171CC05BAC9F893E9E86885392C66FC183232F7A3633F1D701575261B702769E161B8DA670D07B97DF1D9B36D24A28EBBEF639408789CDC39C -MD = A6D1C497BB3FD964641F3C00C544FE21B766831C5915E8FE2F813BD265DE9AA1 - -Len = 1672 -Msg = 447797E2899B72A356BA55BF4DF3ACCA6CDB1041EB477BD1834A9F9ACBC340A294D729F2F97DF3A610BE0FF15EDB9C6D5DB41644B9874360140FC64F52AA03F0286C8A640670067A84E017926A70438DB1BB361DEFEE7317021425F8821DEF26D1EFD77FC853B818545D055ADC9284796E583C76E6FE74C9AC2587AA46AA8F8804F2FEB5836CC4B3ABABAB8429A5783E17D5999F32242EB59EF30CD7ADABC16D72DBDB097623047C98989F88D14EAF02A7212BE16EC2D07981AAA99949DDF89ECD90333A77BC4E1988A82ABF7C7CAF3291 -MD = 5901CDA0CD1510DB5455D072D2737A6721AD9EE3272953A19C7AB378BF3646C5 - -Len = 1673 -Msg = 9ABA7C331CFD36242CABC3C6BA887C8CE4675F51FDCFCF49E706F6BC3C4215CE421D15B304F60CA6D19BBF8535D39F300BB415940FA23D8C788BA07970E0F1AA494AD3A6D988873E84B2E2E2A21D50751592C5FAF8EB1B30012B73B929C2734DF234F4FD7E0C2978B713A2B757812FF2D151D3C1C627E121F293F8DEA2DF2F9EE9A66E2859F635B615651736FACE4AC7E58D9B9A05A652FC0E6A9121B8D478FB04B5809E1994B3E3BC7E6A82D2A450071589AB46C6F5264838E425082B7D8BE92E49AA3632A2A54CDBB01360534080312600 -MD = F3E8947A1CEE1D41657D1BC6066D71C5960C6BE23053D73FAAFF1C3C36B4A9D6 - -Len = 1674 -Msg = 477BBAAF6240F4FBF19012F55396AC5E1C9C21AC4710866E58811E4A721D1E1BA2F13AB04EBAF2DF5A0F29C0213F8C7D3CFE34CBDE94A17D2ED0322A298F43123FCCC9A05059B224751607464C8B60DAE1E67A17B18F4252C2F54A7AAF4B6A5B52A640BDA2F58A7F86F61870FA5B7C2DC183CE5B1965DF783C30F63223551EDD62D563208094392D2EBF9C6C938AFBD408E08AD0A87ECC926BD25E784EE4D4D3C3C935ACBE870D8A777D7CE6DBBC675E32409748FE1CC641E4EDEEBEC6FE242E3A88434F93FF9F4677FF8994EE6F07214C00 -MD = 5BF3FE93E4F2454ED5B7FD3871786A78B26B4E20BFDB670123E816F9554B9C46 - -Len = 1675 -Msg = 96655F154EFCE33E6D9EB56C3471D5BC074E95358CAEC947B638FD63EBDC1B841A88FAEA4004D9E068341586D03437A3A3871255CCE036F4E7770B740A05B79016B9E94132DEBE7CE7BEA242ED7067927D4812F448E3B9AA9CECD01DE26AF84157AB79D3E50C83D1E821714A333D23279918C7C04BD999465B427919EFA9CC0A05936B42F3AEC5AF30874064A163D7E086977B32FA81DB19B6ABEB7DAF81512579885E9E8C257B58487231648BEDB6E33FF1021A97147BCD39EBCD4E2CA4228956DC674F61674175E16DF7AB56FCC518F280 -MD = 1BD0EFC94279D167729D85FA9E300B509F545975D77C514B4EA17A564C316528 - -Len = 1676 -Msg = 09FCAD77247BCDF3B8683ABDA5DFFD6B58C47C0C8D88A274CEE217B35C702B5C84F3DDF8C57B6947B6D04046C81CA0A4672D4780B9EB694AA4920FC0E01ECC56BD9E137892892AD2D31BCD491A23214825843897322BE5D33729AA22EDE7F21A115CD74DF0AE3CFE28BB610C26461BB2911420C7C4BA932626A9DEC6CD22A8889076949ECDC415F86DC788D73D733CDA4DA49D6F65E67E8F20BFDB825D8AFD898E5D0162EDCD536C2BC5F978A8AA128550DF987EFAFD0BD6799BBDD9EF8F3D04D534D5B5816C29EFCD43ED78F538AEC30850 -MD = 089952BE03F0591204C75A57177FB9455A85EED2834AAD77138AEA5170669975 - -Len = 1677 -Msg = AB8A10D700174B4B43C23BACE4393A55E0DB75135AA0AF3EE8A3A1F1102DEDCC427795DDA341DB51B2E26880B4240C904FF51FB0C78EDA9334017C07E56A5795ABA4DB246F3D477FA76F2B69568F09F6ABE8B0F5B2CF3D4B293EF76CB22A658278FDC4DCA98F3026E7D12417EB9928B9CE4A70F59B64E1DC834AC27D996E5763A867F354C50E73DC4244DC2FA350A7B6385DCCC8E9B427472759FDB7FB052156B10D34DAFFA4E71E60DA992E0C4E48FB3F91C6B2CD127E1D2B9EC6AECA04D54B1DCD9ECCB331D0EFAE15A2AF47950ABA4170 -MD = FA0A11F6DAE8366BD2628F383B4B7E8F997039B8A7B7D0A802494DF5BE4E5895 - -Len = 1678 -Msg = 05DBB0DFC9C650216514DAB69119695C0A0F80EB7D678EF91C8D0CD8123C6DFA6A88287177D7D9797DD5F84134D0A96451CF96664B7374EDD453E8FB31A106334E957224A434F156F3E9A83B7A44E54666EFBF25685391EB9BF541E2F6ACCED20ECEE46CE60423A744F5F5B7104E1F96A8D0C5E66D58AC121F300F88A3D017BF5F79AB64382EFC524DE1129C3E2E456D7203235A4D11F040A2520AA517E73DBB1D580B283797612838708DA911B5C7FBD1D4B48D41F81C87C7863305663376FB80415B82B8038E1686AF5D826B74DF282C80 -MD = 48A4F7B681C218E63719B98740232273DAF5DBE001A53B07A264420E2F898BAA - -Len = 1679 -Msg = 987AA5D10B8C1CE8D2A389535A7EF6392D68D4EC80819864603CB92860768E81225E2B1606B83CA62E8047291B9DCA25393B776FAA0C4E3914DD0AFCAFC21392C43AB37058F028A6EF330E6A3B53E3ABAFFE2EF62D126712C00C855765A91C111A89FDBECC5D5ACFC676B566B32B0BA6DA12EFF945A8886448A610AAB9B66B2548DB32C5B8612588A8D0A02F1E0C83878296FB2ACA1A09C25D438F8F2EC7875A61B9022FBE7F1BB7D972B0ACBEE28259B42A09B4F26105F1D0CBA58C6066F12FC2ECD14F286DF4635A0B691416127E34DECC -MD = BF91E90356E16F79F50DB9849C2285AB1A7ACE4EF4D64171C6F90508EC5A8630 - -Len = 1680 -Msg = 9F2C18ADE9B380C784E170FB763E9AA205F64303067EB1BCEA93DF5DAC4BF5A2E00B78195F808DF24FC76E26CB7BE31DC35F0844CDED1567BBA29858CFFC97FB29010331B01D6A3FB3159CC1B973D255DA9843E34A0A4061CABDB9ED37F241BFABB3C20D32743F4026B59A4CCC385A2301F83C0B0A190B0F2D01ACB8F0D41111E10F2F4E149379275599A52DC089B35FDD5234B0CFB7B6D8AEBD563CA1FA653C5C021DFD6F5920E6F18BFAFDBECBF0AB00281333ED50B9A999549C1C8F8C63D7626C48322E9791D5FF72294049BDE91E73F8 -MD = F64562D6273EFB5EBD027E0A6F38C3FB204A6DBE894EE01200EA249B747CFE66 - -Len = 1681 -Msg = 2CF3288DF0C40A7AF765DF75268CC32B63098A1E42CC6941A795108BAFB6EBF09EBC92949F1E92AB140B8CAC7546A3B51C923524B1539D22697529358BEC7EA462E92E1CDCE8B7A3081997A0EC9CBED66BFE8334EF651DDCD8A69C577BFC10894E583F1F443BB88ECFF1719CF7DCA3F8E7348EB721038E97E090D138C2F42C2B0A19EBB63FFFC4966D6377D60C64042AB9BBBA423A215406E21901AE3C6339918288596A1064B56C328B3CB54C6327ECF5FD741717E1BCA1BAD8751AE21FC13EE04E4148E1B34F49FD3915868A981F5BDD6E80 -MD = DE2A5177AA170C064EC8133988885342E41EA9FD9E00038F09E88CFD6DD7C5A0 - -Len = 1682 -Msg = E406B68F1C75EE4C12E73229919DCB8C1EC3967E0AFCB0D349968BA95EDC915654851090E15793B67F675635A1EAAD6347904493E88DEE6395D295F93E223CB111D325D94F5A34E11C5C8773C26614D10F28CB07822D6875D7B76D8ACBC2F5EE2FB9F08B87CA1A006065768264D81046E8C6ED0BD2222F70A81074F5DEBB3E3EB5FD588874C7D89131EDD5C826C3F75A38AD60EA417CA26B5F4AAA3E95B1E2AF4081B5CC1CF16E54651111432C58A367F532A6E87096706774BB9FD2C11A75E6B706B53EF5D4EE562E22621B11F47FD2284E80 -MD = 6A3C1DC5027161CBE85EDDD9EAB7CBB06221C54C8259E3339EF75A9DA6F494FD - -Len = 1683 -Msg = 6F551116863B6CA50D37C17BE7547CA8CBA1D34C93BDAF07BD94DD9D422099E2C896A73B5084181CD94F4325A16688A5D9392DD59C26C6A3619BB40FCD1BE58DDF8A94CEF25215077E734FB8CB52809CAD9A379608AD26FCF08856701FC5E1AFB2F9D5A042B745F0058546A1B28BC3354B11151AF38C52F058A41663C65E82EEFBBBEF366DFF01797DFCE4E291B1CFF9A1045F8B7F784DB6E2CBF7DC33B4F4CB0E4DD4F2C65E773B2EAD81C4899BE4056E45F840D473ECD394383C2CC8E0E5686C84130EDF8E6625AE51B3E1F07A0335474E00 -MD = 8DE961EE22ACB9C0F552A12A9B4746867593E2B7353A94E96FCAD297AD7897CD - -Len = 1684 -Msg = 77CE50C2A1AF8A234F2C50CF62806FBD5D0B856736129015DD361F6894AA9AB427A3151C2BF036953F857269C8C429BC7D715673B56FBC8B8953ED28885388569E15CA47E4FC31B3C4DB8FAF09AD46A7BAD593CAD9E1B5709531FA6F44DC70E03804BC4D0BF5D23A6D7C0C1B55F321FDCAC708879F212C0C917B72E33689635B80FA87C8A084A239BEB4B4B4CEBB40ED948ECE200D7003D4E3319B3A1589B62F5B34EB6D02071595CD26013EFD1CEA645454EC37DAD75A23E2A73A844364318F0D1437CC9B5BC159C3F00EAE2CBC3789C06780 -MD = 1037F16BFA15DBA16F834B4A5F66893F6069FDE6AA2FC2F757FB1FE5521B9DE1 - -Len = 1685 -Msg = 3388AAC4F2F412000389A9D676060B736C2D67263BDFA6E63BE3D5660B5EE69A2D5E15F81EA0A967DD47E1AEE70B6F9445B5AEC1875F699D5C4821F97A543754EC6DE498B7B59B570F239937712FB462DB40008792DD0FDEFBBFF6F333C8879C3284C3ADC5D20D6888F01F2A91602931990C90101CC26FF86D29C547AB80C00E2B001262F7EA283B87C822DB2A07A52D9C622537D3318F9FB1EC88FDB779B47FB33493E0D165F945FE674621AA0A908001C84903995D0616BA5C6BDCEC171F6746EDDD8FC9B94261165C7DCEA64900661D9978 -MD = C43B2D1477FCBEA51DA1C236EE1D79C0B318E5ECA7D5440B6D31575CF05B90AD - -Len = 1686 -Msg = 2CA96922D63B06A48D96B05B502F4E296B91D73ED57617BBF68278D0DFC2FCFDD6BD20548E6E717675FAE637DB6B5238A08982EB783B19E508DD5E87EF4845ED933CBC8755FC645E2E84859ECA2708FC9329B36FDD0F7178839D2D10B610769F791972BD93A4BB292EBF55BECC9F8152CE72EF6A379229E7CB0993F5590F6BFCE875CD339804BEE0ACF5F354706BD79909443F0B512DC7DB4C1EE3C0C171EBC0CF1C1DDEBDB963F6F880AB8CF357A93C5F551F6246526121FBE40E10B68C3319A2FED010B4F02B34514A5E7E5CE84616F4A0D8 -MD = 2789DDD488B064C33FB2EC86BA3C9FDA9E9E87D5148AFE250D19EC311FD0552F - -Len = 1687 -Msg = 9DA1EACBA5D0F46160540A856F1E212405809F0574C7524291A3D20B4E7CC3CDF5022DE66FDB79888BEEC81D0EF338AAFFFFAB7C5F8A5DA403E6E41826864718EAAB9ABF1882DD8852BDD443E4F23C29D05BC8B44735ECF8884505351E3DA083557CFA8663D85203CED742232F7E150F24B55FCD5B7B2D1F2990FABABE62A8F85435809DDDAD0E268554FC6258809062A113AE1755E747730A969CECD37873C8F99049E8310F676BF352C41A122F2D8E75D58862AB6ED4E196F2202C862464B1A5F4F25BC03F6142DC6EBEC5C30C2BFCEDD57E -MD = A8B38F5F2C286592F6635449FFB8F8102C72AD28B82297BE53C3410A1EF8B55E - -Len = 1688 -Msg = AE159F3FA33619002AE6BCCE8CBBDD7D28E5ED9D61534595C4C9F43C402A9BB31F3B301CBFD4A43CE4C24CD5C9849CC6259ECA90E2A79E01FFBAC07BA0E147FA42676A1D668570E0396387B5BCD599E8E66AAED1B8A191C5A47547F61373021FA6DEADCB55363D233C24440F2C73DBB519F7C9FA5A8962EFD5F6252C0407F190DFEFAD707F3C7007D69FF36B8489A5B6B7C557E79DD4F50C06511F599F56C896B35C917B63BA35C6FF8092BAF7D1658E77FC95D8A6A43EEB4C01F33F03877F92774BE89C1114DD531C011E53A34DC248A2F0E6 -MD = E7D7A113B3A33175D0ABD2CF4F9ADD8E41DC86C93C9552C5B3588277FBCAA24A - -Len = 1689 -Msg = 0660E0A141302B50534D949C8925E6707EC8992E5A2C644C7022A94D19271743416868E874FF8DB9B83F7307703DBA2C0B1E4CC533A1ACFBC16F44B103BA7CFF0FA74C026059E8B87530A1E8561EBFDD94E07DAAC12DB30FB7DD888E1F09B75A22CA86CE821639C2D2F053ABD75D10AF6080427F0B9A676A04BE3A0E45ECCEF9C7D228B423519B8174B420E6CA812C74C79D77EFF70F95545AB0CDD4274A22BBC9A636043BFF1E1EC56C9839119BE62F2E0BE9AB3036BC0E90FF334B60BCF6173C81FAB7E5FD55F1A5984093D82F563FF09F0D80 -MD = 80C7587E2F387E50FD0A2369719DADA61C816A2D90D5E0BF1267BC8E8D4231B4 - -Len = 1690 -Msg = F4B026CB6D798171DC89A186B1E41EE8E349C26F69ECA4E3768AD90B1F1C6F067D7EC0FC0C0464483FBDD806574F5738E2ABE34086F569C8A91266F7F09596D77B993C3DC612AFCB346545F0185D645A8EB83D1CA3FF7DD6EB7F679BBBB8F2E52925622807DF47E7E02D3B6A9EFCA343984642F36AC9008C0CDF899F9905613082B39E83AE4390F78822579BE7BF2DA24DE753207D3F2A3645F147FC113545974B2C4C563752413649B7B6CDCD7C578DA209F45FCBFF681807B9F5EC6DC003DB7BF59B715E542587D9EC850543CA6B9729A54880 -MD = 5D551CD1196AFC1A7BF4D70E991577FF636E83C4DB420515590384CA31C3413E - -Len = 1691 -Msg = 83659B5B4040A75E046DFCDB2179EF7A7680053C1C86498C4D9FA39D6C0CF3648E0946DA8EF5630C6430E2DF4F194C591D1912B5DA03AECAF6C6A440C6F41F304F252D40414239EBED0FD994CFEBF0E95248D229A9583E8C66F980F5B2D509EEFDDB28BA8BA55716D809B9030A1A2ABD663467E8DECA0C8FCB6B44D1297AFB2FBD1B9F44F37DADF1D3DE4FE301F983ED8222C3C0BAAEAA5216A421A0065D6DE18810538B17D5FCF00A98BF46A9B103E353D0D33CFFA04288DB928C0ACF5E1C0A748A2072651E32915E0CC1E9D745D2A6551C2F40 -MD = 0A82BA03F8CF22B98E89483FBA819C26A8B0D0362F977F99637EB96CBB08DDC0 - -Len = 1692 -Msg = 856F1B2F6C81E8A8C3C6532106EF4108B2FBA424BBCEFCC5F12D67387CE8FB8ED88C80B56A7AD4EB79E39FE779EE65BBA038DA0D7003BC16FE087DE0074ABF764F33D075C2F152415858B0E18B33C7120B27972B608838B5D8B4E303C569F84515ACD539BB53F583630F8D3BB28C935935D60B973120ED94A8678AB79800DBDF2D6463D26B587C630F725DB8C3F960E1BB597CF963EF543B3CC7A05FB81EDB7BBE6F893C631BB48310453E900F0CEDBF9EFE9FFEBC08BCDC198E46DB9156B4EEBC40F9977DF341647AE371BC4CCC06470A0AD690 -MD = 1EA1B727EC13EE2070C2D5BE2E820C1FE5C86BE4C5B5A2FB84F051E6ABCD5972 - -Len = 1693 -Msg = 4AD3F42F008EF17C88465189BDA1A33E2DBB52A1ABAAC899388E50B54599F3C2C0B1D2FD28B9343E82F8B7C5BE7558C8D611572B6D55845433E2546BDF23F38FEF02455F8D5C979BF96E237A3F5E9ED2E05E1023CC12FC0B6ED4136638DAF8AE1AFAC247F4DA8E37051FF13DCFF2DDD5FD8142791F067DA654A58EB0FD27DFFFB53FEFF7331AE8CF2D03484CA5680BCA02141B1219D6F2AD8A42EDA113BC2A250D9C960D568CE448C8EFB5158267ABCECC8B972A6BAD7B4F5E8D278B45DF1E04173120EAD2591CC5298E28D2E60EEEB4938D1828 -MD = 6A4682803D2D7FB2F4EB934314AD483476007F76CCF8DAF27CFF796197E9AAA7 - -Len = 1694 -Msg = 450EC015C3BAFA6F1A17D87AE57F449A7B868276783D0E259B7B05CC733E43667FCE3561CE954AC0C3DB26E86B52A9587FFA1F6CE15523B048B341DE8C868F126A8E06CC49717D9655B46359A2CA802BF19F93218BDDFBF8E2713DAE7B59FF826EE72F83D35B5E2807C8DCB2B6DD84DB5268DD874BF92B2D7E64F86EB8286F04B9748E117DBA480FE66CF4D7C5B2635070E866AB6CEB2D2EFE231EE88448918D327110ABB5CF90B6E7F99596723639A295A209A5FD0DD6C6D5EFC660546885FC0CDE34F441A4892780006F29C0F3297CE30EC788 -MD = 0A0C190E7174B8EF5734CBEB59B2943302D8786BAF6BA0EA3FFFDE7DD1B7F228 - -Len = 1695 -Msg = 82D4B43E3E055B976435EDE9BCD1F157601562B53688338BD2ABF33A8A602658254165B79514636A0D8541ED8983E0EE96E8E20148125981C7C9EF20C6ECCAC0A7A123066C3F1D9A2DFA3E16F515849BEA3F172E2C1C4D81972FD5FBF4ADD14FD27983DFC1C53E43E7ED296FFD496CAB119E939E3E3EFAB7A30546DAEAEB491C322E074DF3C0F4973CC20ADE3BAB5A4CDDECA7D6CE47B8CCB53070B62FB99BA28CC7EF69BB850A24C84562D72EAF152F915E544343233434E702B3F64CEA729BA16A3C11B359C900D30EE61DAB54E55005B30C16 -MD = 9D4779DA0D5777DB715FCD334AD07508D003911BC3C13E4486A27F226DDA78BA - -Len = 1696 -Msg = 3B8E97C5FFC2D6A40FA7DE7FCEFC90F3B12C940E7AB415321E29EE692DFAC799B009C99DCDDB708FCE5A178C5C35EE2B8617143EDC4C40B4D313661F49ABDD93CEA79D117518805496FE6ACF292C4C2A1F76B403A97D7C399DAF85B46AD84E16246C67D6836757BDE336C290D5D401E6C1386AB32797AF6BB251E9B2D8FE754C47482B72E0B394EAB76916126FD68EA7D65EB93D59F5B4C5AC40F7C3B37E7F3694F29424C24AF8C8F0EF59CD9DBF1D28E0E10F799A6F78CAD1D45B9DB3D7DEE4A7059ABE99182714983B9C9D44D7F5643596D4F3 -MD = 3B40C1493AF411AE7849904D478DF2407254BF62B88E9BFFD7B42BD2A60CE0FA - -Len = 1697 -Msg = 1BAC2D5646DE9AD40B20EB6C7B8EB53354B90BA0743658B3EE64F6B12F472CA0D3AA9F75A1E2AB1B08A6BCE8EBFAE3FB921B559C04D55BF8145735DE94A4F6EB5A4A82FF38D19E1BD5C8E84F1A4E0307C50DEDCEE7B493C7E0B7688AD9795BF2FEE617DF7EACE1BAB2BBB1A4D4CF2A363FCDD0F352B6AE39257F4BD0E3941B0714E28F8B46F89F0A238EC7DBDA51B4A18BD4B10693F3533F50148D6C30C1B46DE82D2BF5260B397CBD7F169EED2910D347B19BCE6ECFD5C4382A00F31BB88AF480BAD53CA75C32D0568C14A4DB3D4D50DA70A8EB00 -MD = 9159D612EB09AC16883DEC4A8703CBBC3FBDAA79266B8D351286813E6AA974DD - -Len = 1698 -Msg = 74E106832472376088777B910B6DE296F18678DEF09B672C268FB5844D9751E56CF5BFA6FA8BD1A5E1DAE84BC9A706696DFC1AD035B5F034D8A9BFC9175F3F6E351DD9625D0E46E3BD1829DB6B9E7E0E3A74A5BB5AF519946A86ED26EA21121AC7034DC6F56570EFA31C65EF26F53B21F8C1D922AE1E01AC42F5777BF7EF06C20869F60E2A8CC35E2476956C0BDE6BBEA9AB74E09881E2507560092A68582F8F2C5B050A6B06349A9F21BA72243BDC8CCE423DCCD9B3D1A83CB8108BD04EBECC4F11D6E4F66905A35C3DA1B1F430DE32338F5F0A80 -MD = 38E3E8D23013B9C1A5924851B20A3C4C96031F13FEC324ACC671CD6ECFBB67BE - -Len = 1699 -Msg = EDDAC5821724B9E4F0EDDE899155DEC46B0DF63DDBE51E8911B2778BBAD4A32B09B3FAE2F40D27BB7F450F1DFEDA4A891273B02867DD680B0E0B0EEA70B79B81FA8EC0CF94E7D7CA7C1FF4CA53834760E0BD781032312DD5B609C30F37CFEF3B445250B67023C15581477ADF21F5BEA45A2CE4C94E0731832290167713A42CA5E08545E6EDE35BB9A9A58FDC4729862043EE68A51F4328B8DF73B320A436FC01C2BA93283782D506A7728A7C2D360F4922D9553BF9BC37AADCABE0134BAE04357F938621631AB25A457459BA1B7D43827A2726D720 -MD = CA6ED878610366051125E8706E400D3943FC3E82F6C442E3850AD0A23A634463 - -Len = 1700 -Msg = 34B7D9773CA69D76B7EF15AD792A7353D76355E7DEC7F922186D04CD0FE70042FBCCA5821AC45B0395A99DC69F0F828204411E740219069DF078711B208572E7238251D953003B9380E72A39F3EA0C82C56DB020C38AE3824D2C209E644328EEBF40101437F823181DE665D734070171CBD6367A09786A2CA5B75A57A18C55687AC022B82E9D36C5E473F4D3C93AD137971DBF7DF1ED505BB156EE850EA4451C6A7AD4E6B85F47275473F01C2D8BECC4EDF5EC31A0DCBB4AC3366359F6D0DDC1A89409CDC624DC227F7CEF00B91BF1333932510610 -MD = 1F45064553A37124651A6A17383FC0D1166C6B906DA8BCB6F45BBF6DCB3EB5ED - -Len = 1701 -Msg = 25BF5D329447C8A7414999D32A955EF80D2B7AE38E1DFDADC0E82EB94B96AD8BDF99C24E742B0503E80CF897A6E81C2B613FA2E7CFD34F1500E2B5D028DC6294CF89947F16A4AA54C1C58F9272C17E76970ABF412629BAE4E88DA49DA0AFC676DB1F9AB23F7846EC6AA9DF28DC1E2654869C663A25C4A803529002CA250CDE571029EEA4365BBD2B16E353923DE5D8F4DA452C1110C51447128E55444B8643704B668598B7B42389C5A92AE193EEC1185CF7189B987E2EC23C1499582091D8930143573B03360D420C2E4F6EF5D4A710F4C62C75A8 -MD = F33FE9615F7D185A30843753E777F6F2B96C1088461120EA5B748CD04F72647E - -Len = 1702 -Msg = CE4F3CC47B14C9D6DFF5ABF17DF95B015F7CE226A4D4EF1B41AFDE76EFFDB7FAF342567D413BFBAD868C00AF20FE8F95CD7E12AEFDC6085C6AB2AFCD302C0AE10724AF383E8292E01BFC5F89E9420324989FC63817F7C967BDDBAE816AE7C7CDC27AAFE230479C1FDC33D64C98199DEC3347A6E5CD90034618A40CF87203287B9822E712B73A2AA32B5CA917BB756F1CC22D41F197354DC21368C65148A431C5E9285D9F8F2C9CB0352339BE6C46FD6D12228B2D562A648804015CDF03FBC8FE3C1B784FF8718865143BDF9883F3D2680E41C9BE64 -MD = 5FAF3D03F34E1D5F4874D42B6E698F4EEAB21B8BB456DB228A4CDBD0FF6B270A - -Len = 1703 -Msg = D2D80B91FC1C69E71F6BD25E1FE274A83FAB06249F909780059C3778EFA9DDFF75D5AF3A52DDDC219A6F0E8AA796E9D65103D90CFEB032EDB567FE9ECA7E86B0D66D1D2F550F07C7364D323564C8F3C41124EF4FEF8981CF611BFAD99DEDDE8E64E5E6BF8D9872D41E03459DE9CA7EC4772E08A6469ED35ACD59FF428537721C07AAB8FB005E6F2B3E5F01E7349B3F20E79D7454A2DE51505FDA1698B5E54647313F2E839E7954B6ABBD32762BF9C57162561EA101650AE81AFD766C7AF1A7EF0A814D6032C59220CBE449765A4D34D59BD104EDB4 -MD = 7472DFD58381B4A8F23D7524E7EEF0AF5D7AA67DCE19F22BF84F0D3F69DB999A - -Len = 1704 -Msg = 3434EC31B10FAFDBFEEC0DD6BD94E80F7BA9DCA19EF075F7EB017512AF66D6A4BCF7D16BA0819A1892A6372F9B35BCC7CA8155EE19E8428BC22D214856ED5FA9374C3C09BDE169602CC219679F65A1566FC7316F4CC3B631A18FB4449FA6AFA16A3DB2BC4212EFF539C67CF184680826535589C7111D73BFFCE431B4C40492E763D9279560AAA38EB2DC14A212D723F994A1FE656FF4DD14551CE4E7C621B2AA5604A10001B2878A897A28A08095C325E10A26D2FB1A75BFD64C250309BB55A44F23BBAC0D5516A1C687D3B41EF2FBBF9CC56D4739 -MD = FEEB172AEAB2F0DEB748FB77801CA22D3CE99B7A9F9789E479B93D1F4B1D227F - -Len = 1705 -Msg = 231AFF791AAC840DED19CF4D259A955CA2993A8E60727B451552E83F26A56506E6E635F43242946B2B1629E687A3162EE47AB6A32F7EDDF3BABE0D9E9F253842E81E092DAA9229FE770AA9E4189820DAFE92406F30874202461D10204A208AB90D5EB3582B636DE48D2DEBC543CA2023C0D12FC14F34E2F62112F9CD0B6295E2C1D37408018B424A79C319A048899A3EED77F8CDACE914037716C23E73E3C79B6D7BAD4F1EA0C19A60B0B7FA3C07D90A18B5FC9C0A6A8FB7CE62800871053E4EB1AEE0F3BB1928E9598CAC63BA44B5B54772E4DA8200 -MD = 5485C3838864CD651A4365F56004822C999D8C8DEFCC8EA65E98139DD486DDC1 - -Len = 1706 -Msg = 7AB9912186325DC1DF33C032BB1475A10B90AB8C15B2D26DCB2A178903178C31F6BC88B3BAB84AA16434E9302FACC0C463C99375BF2A05EE35D53FAF0E4BE126FF670F2A1783FE23B31D22BA224AA4E12F4B1068D1D837F1B0077A186C73F96D846345FFBBFCE48A21A6C51F0788FE52E4938B59F2EB1FBD0705DEB88C893151B61FE17E2EC29BAEA4889C14236ED992C5434358C0E3C3296A6315473DC8DB49754B68DFA97B2DB837E155DA5FF5E4241DFBEA2857F4A08865C9A8B6DC958906DDA95347E1E59BC1308F5B2FA0BC8BD8969465C28440 -MD = 95972AC3F63949A0D085FB253FAACBBB876EA6C75F744F0C4E5CC5D86ADA4C7B - -Len = 1707 -Msg = FB8C83012A74DE84888E3D41279319F93332F920493A71B81C6F217C699EBE842251DDB02625F3B5295A2EEE825F4B9087F42334847EE290CDC6B7B8B28E67ADB5EF6E4CCB455BF73876797DF7C39880BAFDE4B9E461770B0CF118C66703519DD42B6C488EBBF0135E22C35E31491C595ACC3DC8DC4C71E4B028E88F9552D2A9E3CD98F27C0D755212B04D35046ED8FA4F1F5E8534B6447615C78A823A9E7B4546FBBF4E29B51DB3C2A1ABB391A5F6F35CD424106ACB645590D20DF58FE8D564BE7496313216DB51BD3DEFC50840455CA48E7FED3BC0 -MD = FD9A4ADF294122F8A6D13D4B7EC7A47985B30CF3A851E761547244CC617431D1 - -Len = 1708 -Msg = 18BD2C8E4D1220A39AC90CDF0295F8A8BA1BCF49177752713A3C808AEF218F12C4F0FFC030572704FE1871ABC2588FCA54566DEDE0EDDD608CE7058F0CD6D63DA5060EFED342AAFB642FE01E377EBD9D6BEE63507E702D270773B4E10FA4C066D25E4AB5BF16FF4FF4407D6E5451C23548FA4FC0266EB5381A472376756ACA6A94AA02943B2DB286EAC1311C4A354D236A3924AFEFC1C82D2B2C1BFF7B10E25485006346B6E95ADAD69AD172BEAA1184E00E89870FCF53C23C2071B0529A9D09BC9CFE182A869EB793E2261FB0B667D52156F3628C50 -MD = 2A728B838197FF54339073F7BFF63BDBE2E285F5AD3FC5CC3C98BA8BBFD7DA55 - -Len = 1709 -Msg = 347D043DA6E918EAB702D86EAB0CF7960C0ECDE65988FFD03BAF9C0E020884257447C7EABE4D7FD9435E1419024400F22CC10D37B51D59BE721E7D8AC235C3E66989538A2D8DCC8738B214D1DB81D0ACE89DBE6119E8D7C81CBC510F2DEC5A809F5AF767C8E5ECA0EB2736563D85DC17824CAFC2F6AB039B0B49CB0F456ED52F4FB3AB4227B80B5E9F12F167097866551DC5921F04364EEEFC01C0C3BE14C03713547ADA71CA681B753B647F3DDB5C27C405C5FAA5F5A752EE27CD25957FC1134C1E442545D8B585631DD18F2F858B3CEF53F57BFEB8 -MD = 69A2DC276A0D80A924A9EE7A21C0FCA7997D55C06894CF59547AD6FD1DC1FDC1 - -Len = 1710 -Msg = 465A614C0AF40580A27871CD12DA42D1EBF9B7D9D4CB71B4F8E1A25EBC99CB36BFB99B8B8247BEEC9A10FD5F278226624F8C3C861D14C533F9BB0763DD5F394318F7BB67B4C763FF9891B7366B21B623B260F26AF524929C2E07733C9B8711EDF7C682214A1E740ED16301639947CB42F049AC40BCF3AD45D498442DE1BCD0702256116D2F24E6FF42049A84843AA71F923325878C7BB7C6AED482B103D56B1140EB673BB958B9363E3F71C693C542F8536A3D859326C987C27EE95B76B7E4C855E8E758B02C8AA443E6A1D88BFB1656F4332D070128 -MD = 6033A1885C81CBD3FA0D0E42D599FFABA052E736789EF31AB0BD33C7B0A91527 - -Len = 1711 -Msg = 52D90524A8479E97249EF04DCBD00D0D53A500466FCC2E0CDE71ADEC409A11FD57D242103B77D9298A7D213445CA13C1B985A4149BF025AE47FA4D55C0DF836B607E9E8F9C0A1F73EAC9F67D2FAFC222D40047552FC1BF7B39BDDE7FB5B4D4E3D836AC9412BDE2E91C98DA15E2A08B33C446A2B1ABFF97960EBB426744806D712953AF4B293F1F79A1F2B5389EF77EC13FAD66ECF4DDD8F54BCFAE99032BAD76911ACD9A0BB0A4C4D787F33F364551D913BD9D6A91372CCCC9DFB652586C99F719B17586C0839C4E60654126E6CE46A3C672FFE0D528 -MD = BC0EFDC1F30AADC9FEE51102C92700388AC80D528700CAADB002F8EBFD3737AA - -Len = 1712 -Msg = 7C7953D81C8D208FD1C97681D48F49DD003456DE60475B84070EF4847C333B74575B1FC8D2A186964485A3B8634FEAA3595AAA1A2F4595A7D6B6153563DEE31BBAC443C8A33EED6D5D956A980A68366C2527B550EE950250DFB691EACBD5D56AE14B970668BE174C89DF2FEA43AE52F13142639C884FD62A3683C0C3792F0F24AB1318BCB27E21F4737FAB62C77EA38BC8FD1CF41F7DAB64C13FEBE7152BF5BB7AB5A78F5346D43CC741CB6F72B7B8980F268B68BF62ABDFB1577A52438FE14B591498CC95F071228460C7C5D5CEB4A7BDE588E7F21C -MD = B240BC52B8AF1B502E26BF1D5E75FE2663BFBA503FAF10F46754DC3D23CB61C1 - -Len = 1713 -Msg = 54B61F11272B78B0FDC95FC10117A54D290E051D004A8C3EC2C95773CEEE8B18DD7B97B655C6498054C0C0A5DF34A0FD040C20C46D5AECA2094D4EC1E59B7558FC27E179110D058782FF3A2F627A91B606FF35BA0C1A2355D7388D6EFDFD97147698B633D4D2843F040BE31E483D3102B8418D8A8A2EC6FBEB1DDB291E04BC18F01D0EFE92E6F72F49D9D64D9408522FCD12E3BC8B6358CC9F0952DC0783E81FD11450D20CC37C6F526FACF9BA0C04464C45772D3537F0767F685C71D3659B88953C244A5F82B01E5B0C2B106621C70DCC3179FA9BF180 -MD = 951FF583973BB0A288C9EBCAFF6828603961370915331692D15384ED188DA13C - -Len = 1714 -Msg = 1806F931E78B282F08D9B153982963BA7009198954F820F740CBDA4CCD4F74712A84968E741F67E81B0EDD71B53D016257B9021D491CAB64AF2953DF73E2720C275849356966734422670F4D385C2916E561BC89C432FA92A81EFC9FFECB2E59404066C346200514E79E46C4EE4E351DFA8BED90CAC2DEECADC4F7EE3AE381146C5C21EF3859CC9A231DEBC71E7E5DDBADFFA9E7DB7FB86B3682D7142ECCF06B8D78B50577CC03FB9EB0006BA63174871AC7CBA303B87EB9C69FFA31705AD943381338F46D3F216232411A936064DCBD4E3A0B38D82D40 -MD = 9D9018FABAC206F0058DB20090924BEEBD16E2AB6167C03CA3118BB0C6519D1B - -Len = 1715 -Msg = 55A7A7B48849199F1BE5C9CA6252C1BBECA9E3D4B9A81A085D201191EAF2290556054C00904F2F854F7208AB29312EFD205F95D3CA4CC26ECFB02707AF4410A54031E7F7727D72A1B7B50A031D866674306511224B1057D9920177ADD762E391EDC1269F0D4FFEC5689F9C2EBD22167B708173830479C377BBA8FCA1792607273FB4214DFA3A5130963A45C96D65F0FB230AA1DB3683F9C58CED7F5555E757B1B596FB79B54A1E61D5245763DF724CED620DF2F048EC703988B3D1D307DF9CB6B1A78A344782FE6B0F9AF5F5C074AA4BE1D596512726C0 -MD = AB8D36D88CF66BDF58578DFA032B4F749C467B9412A3F4FD41F89786B97F7AB2 - -Len = 1716 -Msg = D85126F4772B9166A15AE05551B00F3F0924D1F0EC65E9109F164C3C337CE978AF02477FF217EE571A17DF901A158F02FD8F79D64F09CA11A15B453480E08E46F49961C6CBC4C6FDA9706E094682BC8C64F1D74BCFBED70C389397CD76BDFB52A728484297EF974C0E524682C926697B2D33AADA7E749E930AA78731164E08C2EBDFBEA1BBA1DE7739212E14DABBA84B502C3F6550EA79022B7533B270BD6168731B7F72492A3937E12047FB4DD3D261EE6DA38AE01A4110E0E1FFB8E503E0269B1CFD43D2A4C1DD8D3189E5022A2188CDA4DD60C9D400 -MD = F64EBA5B07BCEBD121870F7BF0B35CC30A8877FB39EE1471508157BBB02B3177 - -Len = 1717 -Msg = 74573A14637C34B05ADDD60A85BF22DC7E818D04EB94DAC9DAD5EF2891AF122599438F08CE2297109A7AB161E163D9BEE71C366270B6BE4E8F92D4E716FAA3ACE866C049F4BFEF5E5CE5F6A5DDA0C877D17FE2B179599C80B75B2485DEE6B912C5720CB63C906AB77DF480FB9AA3A8CEA11D8B2C63D88DD3AD6ADB8311197E469818200B52C4ADDD51D13D6DF3F3810AED15890A7C1F9388EC296CC79905AC65E006DB0DB3207DF7674874D733AE5A50C5348A208D115E247F023766E1D9F3DBF3769EFA1F5CF950AA6DD903CC36FCFF08321D71D7B2C0 -MD = F46E7EC7AE4F0ECC6A14BB44A1BC3B6BA678546FB08DD94CEE7D7C9762651D30 - -Len = 1718 -Msg = AEB43BF2C27EC6A64D5A8FF892C67B282AE35FA1436323F0480689249AC3A552EA43AD8B983A4DA901A024403EB23CC3A07EDEEF1B0F836110305CAEEE070FE0254EBB70C17342599AF6ACACEA2392ED56526FA0DD9B5513309D0D6C9D5C222370144B531DC0897B80C0FAA16C050116B74BCE3D026BDF4C2AFABDC67381BA6663C47E509012B8EB097A86E5190BD32F8F8BC1B51F3CFCDEC3FA844358671B42F7F510ACEB9F3BF3C3449B47E7F64997EDD5B6E4F5B8A2241F4F8EDE88D0BABC7C10173F5C51C27144EA745D11EF876126D487E842E57C -MD = A38464BED5BCB2B13511029E2927BFDACE8EAB1FC256A0A0BA20E6B0270FD3A7 - -Len = 1719 -Msg = 4E6558C1D4F2C474AC32B623E7088FB80820E127A90D9E9BD584F81FE3BD701F5DF85C57248FB42E538CEF05A5139D4B6741D6EC47361EC47558037F7B3606C351382A0132EB52A42FA75E16F043B16126F3A12D50C5A28CDC7EEEABBF10C081C56163DAF2AADF5ED706D568E167A843DCAC64C56AE3DFF0017CF359115F22528B98AA209EAC24734870C186998FDF32CD12DA1B8C95BB103650D51FE3766397C23C202B40D146EE82CBD25BEEFD79CDF94B6E8C90638FC23856728607FD873A683402FB46DE44E746E1FAEFDAFC805170A72AACD03620 -MD = 8C173825AF6E6B00584119451959729DC7BDF21E82E8EE9E304C6BFAB8A52323 - -Len = 1720 -Msg = 7A6A4F4FDC59A1D223381AE5AF498D74B7252ECF59E389E49130C7EAEE626E7BD9897EFFD92017F4CCDE66B0440462CDEDFD352D8153E6A4C8D7A0812F701CC737B5178C2556F07111200EB627DBC299CAA792DFA58F35935299FA3A3519E9B03166DFFA159103FFA35E8577F7C0A86C6B46FE13DB8E2CDD9DCFBA85BDDDCCE0A7A8E155F81F712D8E9FE646153D3D22C811BD39F830433B2213DD46301941B59293FD0A33E2B63ADBD95239BC01315C46FDB678875B3C81E053A40F581CFBEC24A1404B1671A1B88A6D06120229518FB13A74CA0AC5AE -MD = 3EBACE41F578FDE6603E032FC1C7CFEEF1CB79FE938A94D4C7B58B0BA4CB9720 - -Len = 1721 -Msg = F50014B208EB74778C5E65F27F3B7AACD008D7702D56890C769A6A62E4A9BD9C2A9B7E62653B061AF29CC45E37A4E8160B21B5EDE780F0558E1A94F1F23FFD17ECC4BB543F0E278141ECBBE2D3E7D252E22BB87CF64346661B56BC725D90B655E3B4820ED7D1E055232FDD8B08FEB0DBA125C05C42633ED8E050A5D98E4047F64BA217395F9503983626F1E6E0E5768A049E94E7207E9CF9FEA593DEEC252CCCEC7DE21E9A1BE2347A5BC3A0D878C1778112B4F94B4123053B0E1BDE994B8444B7CDF1FEDA2A28FF8E3343501B58E9ECB7AE47354BCEEA80 -MD = CD904F1AD18E8856BCF75A9813C7D79117BF654004559C2EE41191929489EF88 - -Len = 1722 -Msg = 63FF7ECF12ED74A2E1D9162ACDFDDAB310EF6AEF426E53B88FD29759A6B6D9B0CB28E22C67A1D294206EDE4780964E0C20E27F8221E15E2BF34A3A9F3B38E573AAEF778E6A490C4CAA18729E88395BC866DAF1B2B2D3391F59C8B9699C8E54BF0A758CF5C3A8B097D606B9A6A4B3792B27F132CEDD00E105F2B85D6307664FA39A14270DC402C308409A18695A93BAD45E071CC235CC1F84C418C91081B0554231466700D8A7FF1790C1DB9ED496AC0B38655154A3BD5C70FB9466CA20C69170C4EF3DC18323C36E5A0EFAFBFFB017944706F70D004C7240 -MD = A0202313C5DD813C0A08418680C0BEBA173F70D6D5C69296249389427CABDE8E - -Len = 1723 -Msg = 3D02827ABA2E9C794A33E2A1ED946BB0437BC419CE5DCA92EC886531946C96A8D261C70D5422DF0D04221CF0AA4339694C560600E757D6539518B4347D341CCC5A57613A29DD31301C0C0055F1FFC44BB15622ACC47DB80BA50EEEF8226647F7D5F3FF8EA03A968CC6870157A8CADC9924BC9388A9748F7908423B344D915BC29011ACCDF57A04F4400B1C848B493AEB1BF9839865F44BFCD4D643B2FDA2E20B883D5A2368B137EE700D3E83D8E9FD01661E869E41410E686905BFFF2983B6C5930346A8452164972F23715DC9ABC673B0D41C92A65B89E0 -MD = 01ABBDD47384C211E828A6E3ACAB8D63258B9B0B2B6BBF6D3AAC30DE0118A450 - -Len = 1724 -Msg = D6CE68E12CD933EB93A09F6DDB922855604613B4A76CE6F5D6C58991779720C91E652C70B380960ECB409AAD5761DEE4A3DB5C288EE7C13EA16E8FC7FD6BC6C9FCE77A4B236B99314E1745AD8C2425ADC0B4D8F746D8E972FF584131A4ECB2C4038C0BC0B0FAC7BF1249CBB58215EC07769F8BB2E78267D57B978E2BA09DAA70E022C1C57005F33D76718788AC81817033AA6A0BE89EBFD3DE3E5F8E743C1068D3663EE22D206273AAE6A2358101C3423F1DC99658B7916C581A1C39EA42CDDC180E7C8B136CB633CAC407004B503C4D0623FE3107B1FA50 -MD = FB70947924E5C2C06233BFF3864B23CCAE091081E162DD982206CDC504DEBAD3 - -Len = 1725 -Msg = D22AC23AF99096368C3C7992DE621B9DFF7A2B9EB697064E2DD184F7A4BD3DBDCB76DE8520F627BB7BF9DA2016BB04957BD202295F262DBF7B7008E10C5BB00D70D7615E7C1142C1E05BDC05EA51AE81D03414E28B0B61DD78BC8B5BCC06776F4006CB04AC5B0D417E557DB9166CACC5DF5A514C488FF47E42ABFCB87207FD5240459F2C6A723677A4DDB636EA83CC0A323D7609F0E03D800F7767E220C52D5FC828AF4FF003C7198485214F1CBD30A9757129F4FA1067F3DC896EADAF0DB3B78923D4945A90F731F5C1C1DC07666CD651D3BA6DF6E922F0 -MD = 0768422D13BAC93596F89D34998EC4C9547107FE36611DE83D3F1E250BCCD266 - -Len = 1726 -Msg = 0D7B88F3C598B66455959C84D2636CA1C834B73D7F56A97AA07755EB99C4C8BC9016102A1A6A5B45ACD2879DF56F79A1CCB54CD9B1981A3EC9B6FAFFDAA8ADBC6F5E64A3E75594E0659294FCBEC07563D40088637E8771C36BAFE082FD938ADD0904564D89B9FC697EFBA9A0161C3A46014D77901F42FE1F27721115988CBCBFDF5A93C6217E32EA88EB18FD9E7C248F5C43593F03F194E4D3EFF5B85AB474A653E5FCA0D7FD955DF0784B2823DE88A80D83AC93F634A06601D3378CE6F318F63ED5B3F478E61468C348B83697EC9CC0271A99D23B0FE8B0 -MD = FC0341AD4D675D5183DF5A16ABCFCD7B1788A6B4F4B5C6E5ECE0238638015887 - -Len = 1727 -Msg = 6D058830F672327A9003386CF0E0EF22738E2027B4114991DC2C4BA6757A62BDB190E3414A4EE979F172BED470FD9D9B085F62D4D9D05621140ED834BC8FC25A8DE066846DB9DC7920B4FD201567C9B7255E41A4D724C87CB7C287FA4BE3D5DF6A1ABAB78F3C8386A33B5D9A03A26784E63999C8C7DC784F541912786E1DD524E2A9F0BB4B6EF87FB1CCA144EDE9B1576E45765589DFAAB5CDED2A025556404469E39E95C74DC5FD11A0FA7FFB21423298B5168C5CEDC34762C36BEB2A1B6BC90E691304B661C638AD7E0BBC2E7A6B3CC87443079D73D1B2 -MD = 6B8D7DDB14D3929F8FB5E0237E2B34731A9CB473BC8BA83ABFAE0A8ACAEBF3BD - -Len = 1728 -Msg = D9FAA14CEBE9B7DE551B6C0765409A33938562013B5E8E0E1E0A6418DF7399D0A6A771FB81C3CA9BD3BB8E2951B0BC792525A294EBD1083688806FE5E7F1E17FD4E3A41D00C89E8FCF4A363CAEDB1ACB558E3D562F1302B3D83BB886ED27B76033798131DAB05B4217381EAAA7BA15EC820BB5C13B516DD640EAEC5A27D05FDFCA0F35B3A5312146806B4C0275BCD0AAA3B2017F346975DB566F9B4D137F4EE10644C2A2DA66DEECA5342E236495C3C6280528BFD32E90AF4CD9BB908F34012B52B4BC56D48CC8A6B59BAB014988EABD12E1A0A1C2E170E7 -MD = 65EB4BD5ECCA7164CE9B66727F112C1AC6120DDD200DCB5CE75B7487843FCDB8 - -Len = 1729 -Msg = B0AB1FC29576BDF5BCF22A14049DFF38A48B5CD9749C95E4733B18039606DEFD52A73B190C10B59EED4297384B928E6E60304F145F45B3BC4B72A68BCE4EB4F644CEB3E8739881EC43F36C7489AD32A207F3921034647DBA76DC0E41E1358ACD2A45B606BA8CB75472966D1E0A2AABEB880BD837F8317EC8550F326E712AED4EB4AD11CDB6F4FA597BA30954A09A1E386B7E335A45FF2110E6A365876C8BBE5C4475906D0D2400CDFE7FE4672BE6A5168748E11F73F155C3AEBDB3415BB0BDA5BC07F9C2687718B65F1C753A52D09B27F4724651BDF2D09F00 -MD = 8B004FC69C99677D0D210FC18D7E7C403EB4F706B7C95231BC321806EE890ACD - -Len = 1730 -Msg = 5EBA9547DA91D476A5B6E44447652756F86ED187590326EF32D18E4D05D05678339AA640B22E029E6C22FF5CBBAF154118F219E3A8EAC24135F2732362AEA3177321EE3DCAA7A94BAA5B04E69D83F0E99E1EDC58A93D0B0BEF8F3AE7DCC0B9CF5D2557D225567FB2C768C59BA8EC70F5C05E480232A64C6ACC0C561BC13BBD28A5BD0C2CE2C23491EFEF39ACD313A777FAD4BCADF0667C6CAD1B8BD8583690FED2F6CE17C33421944A8B3CC62806369D302621C11A66BEB642526308945E5FF32C37DFE81870C3987EA69BE829C83495CCF7D929BDA8A85240 -MD = 491EB3827BA117AF4C228E9D4ED230DCF8265336548932FE9E86CDF2D8482E34 - -Len = 1731 -Msg = 7E2BC340635BA8777E065C7BE34A876EB20A8DF3170DAF70DEBC6CCD47C2EB126F5E3DCF692FDA19B751B3EA503199CBCE86177AFC261E0661CAED6884CA4C109DD2031CF69EC1EB24BCB73CA622DE18B43C01B1BBBF6B2A22FB4DD6D3B73BC1C2A8BB6085B7971F6909ADD9C5316184F5370889F5FEF6D27CEFC4291202A90620573B150EC3EE31262C455517FBA064AF031F74EDDFC05648AD7BE1DB52CEC623CDA6DE842676AFCA1AB318CACCC8FD137B65044C4EFA0B647CC2A0ED3D075DF0877D42116800546633A445C44F21079661EC7B46A5B80C20 -MD = 573990A6D6636B5098262F5294AE6D5AD9593D9276D6F0CB03C687BB15CAB533 - -Len = 1732 -Msg = DA35B0DA3A478D7E4929262859168B4B717F5D1FCDBC249763B5C4FF33B7781822BF98CE97DCEF54AA4AC8B42A4FFAFB5FB934F29DEF33363C561B606FED6A0EC0C2A3FC746801B87333D18CEDA22D9B519DADC6004FAE5A3320E1CA91D9225C47CEDFF521A349CEC7BC34BAAD64FED23BED387833526E22245B35DF621F5DE0DF72588B95E98A442242826F3A38F19F4648606EA28B68B3044DA72831709DCF8E65BD6D047DD81DD83FDFA262757D668FEE6FD65527B01EDD0A6D14334503225BD15CC41EB1D5D6075282913C801B43438AC6EB752A018530 -MD = 6D6E29121BFE38836E900AC2B5C1D0FD200136CF1B6373B53F49D566FECD13BD - -Len = 1733 -Msg = 4F18D64F8FD0E7C23C75EB389D165A47BC97E57ACC4E415430C9C2A89E1A2A0EBF7B58DCEEC95CBF998D4373ABDF564272CECCAFAEA835026CB62DBCBD0CB9CB38BB21716EAEF0D4F288BA31F5269DAF12C9B50B21EE38B2A620FBD9499784B73A9CC8F6488DAC51545A680D07978A961A517181BAB99684FA2380ABEDD5090A446380995FCDAC7A9B8A45E49B3A88F7EE37DBC147521F902564BD83F7680D4E3F5A96C6BC9915E5E8A8D850B0C8F37B878623AE7EEE57D704FCF4163D4EBD2EA0D665C65F85CD049CD3C4F930C1A2B2C9F05F9F79690F2C90 -MD = DBC67095FC446F410874E215785ED9F567D3220C6113199BF748ED42F42A9656 - -Len = 1734 -Msg = D165744E9A601CE8B758FF58406FE6D3038A1FF50C98B9AB59D68A23A19048268775FC65142DE0080D954BA1C9ACD44203C1AEE14CF2595F3104393C0421631AF62C82CACFC9D08311523AE9D533A32E353800B73B9EF0F276F2E68846A2BC84276A1F6FED9A23D40B4B664C7922C609AC86DC2F55656CE92BC015C9BF1FA7AF4F1E42ECAA6EFE2B499DA3092D0D89D6961870D17FBA8753ADC69CD7BD3F6B194AAF4A2EC3CFD08E25491E63502921E7CC10A5587A71A9CA0F16B98196EA03C4A72BB443C80835B9A21C48586198064D12FDFFAE79726F93DC -MD = EB5E688ECDE28CCF2B317BDB970EEE540966F593E23C50E5A5BBE0ACCF77D88C - -Len = 1735 -Msg = 24DE7418E94F7355E13E5D931BBAA9D4D54F10343459F224C884F367C80ECAA3C80CB17BAE478FA79944AFAE0818CEBB614A7F2AFD8CCEF604A952A35351A95F0EFECF03641DD7B82B2CE046A3C6CB3AF281597A4E87F2E322863DFC1B61DC52793C6FDCD107C5AAB3B81F75ED2DA006569C7378AD3D418B9086152C58473660C61738D1C33BD74867F3F94D133E6708F34F8456CFF843C99258ADDD2B9DA18A6FDD87C9A530E2330C0BC6731AC9B8BEE51FE3CC3D81B07304002DAB6DB3A43BDF45CB19E03873682A1041ACB6423BB638DCEF04AED9F7DF1E -MD = 9076DB8758EBAF7F69AA63148B1FEEE4C04848BB35C8D3324982AD8EB93D060A - -Len = 1736 -Msg = 2D8427433D0C61F2D96CFE80CF1E932265A191365C3B61AAA3D6DCC039F6BA2AD52A6A8CC30FC10F705E6B7705105977FA496C1C708A277A124304F1FC40911E7441D1B5E77B951AAD7B01FD5DB1B377D165B05BBF898042E39660CAF8B279FE5229D1A8DB86C0999ED65E53D01CCBC4B43173CCF992B3A14586F6BA42F5FE30AFA8AE40C5DF29966F9346DA5F8B35F16A1DE3AB6DE0F477D8D8660918060E88B9B9E9CA6A4207033B87A812DBF5544D39E4882010F82B6CE005F8E8FF6FE3C3806BC2B73C2B83AFB704345629304F9F86358712E9FAE3CA3E -MD = D7155F6D3A90801F5E547689389FF62A604C81B7C1583D9204AC6B0194F0E8DD - -Len = 1737 -Msg = F38433CA26FAE8B01EAE24EC59EAB6FF4CE7909E1D73F3D8ED5AD663730391BC561D163FCC44CED801F7B48C4BBF0D578979BAF1E95ED5FA5506AE07DA805FC042074C3E1F6D34ECFC842B3C652746F1F2DF086494F0E0EFF56DB48AC1EC12DEA198FDDF5257EC18395C75AEFFFE8317FA9A7235EFF0C4418DA43E929B7E53DDD09607FF6F9A907F6DCE3EFE263A75183859EBB4682CCAEDE876FF9564CCBAE9817C088FF61381207A8B5276EF41645652B7C1FE9814C175C30587E2094CD44A3DF8A7EC240AFBD4ADA10AF53859CAF6EE3DDA2A79DD77CC7980 -MD = 2E98A175BC9BAD09AA0CA89F7851237646E4B41DE0090CFA5E5E102127F7A89A - -Len = 1738 -Msg = E5D9B23AF789159A99ED98663E1543957FB105A093C2486B1ADC776581BC5AD9AD88282E0A256F0C0E0C1A60F1264A06EC528788C71AEB1A5BA87208E467E890C0E0AD964EC3FF1D8F4908F6C277A070F0EA921C69DD2CC720E2812F6FEC9565570441AFE65040D1CC591087C15CA804CA953A1BFD5410811FBC7E56BD2EB15AFEF1B7A1567E42871AF1D0E42DE6ADD8BEFA7DF866CB7D446CC5AF3677F68EBF9B9DCB95AA596097B98F8AB56F080620C10A0B28C34461BB7C948019BF650FB3E7B12E8CC7CADCD3CF78C77B6EF4953EBB28634BDFF4E11780C0 -MD = 1EF9FD33B5D0563F7A772B0AE3E971D7459FD1CA42F1F6559143EF8B490A803E - -Len = 1739 -Msg = 73CB144295AB9BF193DFF255E2BE770102DC59890854039AB39DB11ED6AC6AD8797144832578C21CAFE0EC25C0383CB0EC4648DA2B23BD4203006B511AD5362D3ED4543A279DDEC3FC0E17492894FEDFD052CEFFAE126395C3E6BB0DC9AB43772E3C130534A53E5F1D4B49DA36C47A22E99422A776844028BB0AD862D20C125F56DF6722D807229D27F18DC5B95841DD42EFAC25DAD229112B63F8A7BBAEC36DF280766F9301B319F4A2FEFBF6D5A7B17F620E38959F056E2F39E721636846EE8C66D93FBEA3D0AC06D23301C8CE46182B2DC7BE3EC2EA485180 -MD = 3C1C04F10B177E0865DE126119D0109C7EAA427C0E73C0E5D7B795B70C5AB932 - -Len = 1740 -Msg = 1F55FD989BE2EE0BAD7FA02D95355FC64C3BE8DC25C76EFE980CAF9FDD7DEFA19B5E591240441C634DAC479CA9103E78040F490510C0C8689D8E35CEC420BA1ABD97EBBE9B7ADF882E0AC256E55CF5F38F83588D49153EF53FE2F25A612676EE764D744047476C3747B40659039EB560A2892507F05FCBA688FBD004F680BE23AEBAADC9FF61973FE6728719C5E0E2B3AF19F540FAFC295D13F55BE06C6C93F489CA5A7294A66B1EC0757BAB1CE8C6EE8595B53BB927B65F02536742EC3A1C275CDBB09C2D7A4F612AD0C5CC00FE93EFACC74A4CB0C05C8F4DB0 -MD = 612BC7CE9EA4CFA6EFE69B2F824FCCA356E49E3AF973088647EB2658CFF3D8A2 - -Len = 1741 -Msg = 0555AFF140369CD288EF4850691D9F5DB6431DADB004BCFF7408E47A0F5DCB4965C3694FC2A6C754452AA775DDC8CECB241EDF8643757E603843F27E885CCAC475A33CD968BAD907438DC37B209681291B6CF5E794A23967398A76D9925D76DE70D7E2B9D623E4126CB95A865EB7E17C2347245528ED9976EC8048C663D50C4E05D5BB8ACA77C98E1800EAADCF0ACEF06E68852DCF102A52829CF2B187EEB7DD00083114B5B913BACA3C5A2381F0FF7A35A5D40E691035EA8D9E0A74B7E17ABE2F848313F6364883D742D82DBCFA61A113CBAEC441E9A33ECD88 -MD = A4971C0E1772C1DB2D2E8C76CF2D7B5D5718C0DF426AB58EB79772D40FBF8878 - -Len = 1742 -Msg = CBA6BF1318BBEF28CD3AF3CCD6FB4CC78AD723997E6FDDA09FB98751B061315BC28B6DE6BACE893911502BC21DE0D93C20DB7DBB32013EF22A3CFA699063FBCA483FA27D0EF2F98491B04E0873C4004D419046B112A0F253F5A9EADAB2EFBB59650E0EE8EF22AB26B00F4F8DF463BD5EDAC2B1EA58313C2BDC90C9837A30BFA7970FD3306E7493E769FC9E9E1E293BEDD78A152866954927C97625A6F6779698D497116AB7CF6621D3EAE5E7DB7F3726B35B36A6AE27343FD3C980E218D8A7D9427357219FAD1907256F682A993C6C5C7601DB1171DADB584CBC -MD = C58554CB9825BF81CC0107D2D647059F30DFEB58A29515D00F3E3156A7963D62 - -Len = 1743 -Msg = CC1E708654358899B253086A1FA3E7F41E1FF10C6E145476DE2D86B27F1260B12C470EDA91FEBBBD8421A036FE200EF55D76E77DAA2506337C413BCCBDEBA791825C0EFA5397FF77AC8625DD3BED03B7295C9BDE16DF5A2751C383655987427E6DB98507E9FA1D5683DFEA692881C91A89B3CC71A4F41F13AF6C4BF70F0B8839AAE0CC27A6F49FFC16D69C06132D5E2198C41139C219B11205DCE4BFE8775C23AB8DE0F5537C4727E60D72D8D24979AB46878B626629DB4A44F7D0480A530B59678320FAA6B6D5D01F54853134FA5634560547D3307ACACC3C5C -MD = 8F3B1B5F6AADA94B0AC0C3882755083DBB0D611317DF6250A5A7B90B0F410A2E - -Len = 1744 -Msg = 5E19D97887FCAAC0387E22C6F803C34A3DACD2604172433F7A8A7A526CA4A2A1271ECFC5D5D7BE5AC0D85D921095350DFC65997D443C21C8094E0A3FEFD2961BCB94AED03291AE310CCDA75D8ACE4BC7D89E7D3E5D1650BDA5D668B8B50BFC8E608E184F4D3A9A2BADC4FF5F07E0C0BC8A9F2E0B2A26FD6D8C550008FAAAB75FD71AF2A424BEC9A7CD9D83FAD4C8E9319115656A8717D3B523A68FF8004258B9990ED362308461804BA3E3A7E92D8F2FFAE5C2FBA55BA5A3C27C0A2F71BD711D2FE1799C2ADB31B200035481E9EE5C4ADF2AB9C0FA50B23975CF -MD = AA7ADAF16F39E398B4AB0ADA037710556B720B0248D84817B2CFDF7600933595 - -Len = 1745 -Msg = C880C4B995AD9D758482D3640E7219DBFE62180D012C37FC7C8427298ECACBC9FA5948C3B23C1F42EB6069A8850A075F709F88CAF61645B26BDF30C6BFD8BE91800BA8F1C63E162849309CADC88CC2E319E5550569A655A4B6419F88037D8FC6A3C4A4C35A3B21CFBC60910A9AF554EDDAC3982676301BE9069B7537F93C7134A0177A3517EA00A7756D9BD9F3B7D40C5985C14D39A8C58CA8420874D21EF372288CB153606E7E5E710B340F8F29854DCE08197BD1F127B47969A2B0EA20A3115D4F7CD1B48EEF6C3F6639607969C57E47BE42D4F2024D1B34E800 -MD = 0B17CC1370C841689B1D2756184E6E667C76FDAEBBC959C1C888E96AC13CBB60 - -Len = 1746 -Msg = 697718B0CFF69EDE70B7C49FD40EB4778AF938B2412E2086630800CCBFB27645B86C854BD95B7A0105B5C8BDD3B4E9AD76C79961A8D18F6A634F36753692E1527A4D198EA39757BF8AAD72844D3135BE711C1C693E5D181313F98FE86B8B7177467942BDB3EBBEDC08B96F384D4266A48CBDCF3CDA17E7C77A4F419C87A83950DA70D7840E7D254A174D403AE9BEB731F72A211D0211F170220318C65154432D3A0C254A96A6CB614AF61AA3B3C312D5C2B47A1E766BC109B6CB98827D6A6661F8990AB73045BCF17AE31A90AB3B8C6A6D9C0B24B287AB16969600 -MD = DC12D921D4BF6780416BEA785132BEE39A5245AE9DF67A97B497721F606738F4 - -Len = 1747 -Msg = 5710347D5FEE482797696CA7582540372408B58898D3D97515B7794EAACD5D8D88D838F817437E172BB7DFAF8E5A996D9EC028C4D6047B09721AD2EA28D348677DF40DB9722D2DCCE46F2D786C0A4F053CAAA4E2C71459D7653262CA7B6DADDF07A1F5A2A0CB52335CFBEE50BCCF01F6714224793C3C53F117DF0C6EDB849042A03526E74BA8A42680695DEA4A09C00920F83A680F539876D526F29C48EB76E2C32D5A5A2D1B9E412A789643A98433BA4E3C33973528502E95FD8389FD8A88A0FC570DC4DFC081E6D02D7756E299C32AFA9FF94A39D7B8AAFCA160 -MD = A6103260A115773BCD4FDD889BBD7A886BA2FECE85323D627A2213C5622B597B - -Len = 1748 -Msg = 9A1D42B3E5E3C43C39EFD6E3816765D650B8AA14ACEBE53FBF4061CD0D3CD880C94A1B98D2A165F8EC0A5BD803EAE346F326788A9C83971C002B5A5DAEAA84A7824E0928C86FA9218A1317433CA520A6A4632CDE0CC7EE35C764624BEEC5192D03504BCCABDFFA8D0455864AFD50ECC78F0DCDC62BA98FECA4CB62349B4CDBABDF7158046B3CF8A4201D1FE31D5A40EDB8A0F2439384D00566651682FEA8778EECC2B02781BEA796C7BA0DAD376AC869313728A420D50B074289DEE922CF8864CF32C52C070848ACD58D670863E2016BCAAFD6E44635B838CB3E10 -MD = 783CC756232A4D89DA76F7F570DB8594B2AB156F09A1C4AC79B0B61FB3812494 - -Len = 1749 -Msg = 44CC34DBF0516E0402BBDDF524D4B5CEA882F4E5408D86796056FCE392FE5AF771681419BD0BD4527010FC33F879AA9B2B95BC4A51BD7AEC455FF38403B8C15CA1C692C896889A5D734C382DE86F581CF34BC8C51DFB522EE032FCFB0B8136A40B123D3A6AB200D18E79FF5A11818C8249B66123B3D4AA48A3017D1B3936349FD8F1F9BDA1710CF0D23B407C2367C84F8A6FEC389E1093BA70E51602FA2E35043D1AB93B9941F6A83FF14DC25A023F550F853D7A0BB16D4991678E19340D30A7C11FFF8E1F6610222233C691A68EB45133D096CD254A2ECB51B5F0 -MD = 1208806FC24420FDC23DABD3FCC9A4D43D08C2DFC1EEEF049690468D32460035 - -Len = 1750 -Msg = D25B283D67DEF2DD143B65F00401876CB84122B5351C42590D9E23F87F3C222AAF9754B5CBB703BB4ACDFCE294BFBB03990D9D26786B603D6AF0C7AC0CC83C7DBC90FB3581EEAA4EE2326E4DD1C06ECEA4ED6D01CB941A40F6AF3441552614807B908F58A0EF5900B2705054C4B599F85D01EA04B3D2028BB9F225656BCCB4B0E8FA36FA4FF4A49AB646C271B2F579D6953C246DA236B189167F5C470439B3BFA95526BB654F724631434B1E040EA67F684A85B3B4F283E185297059603110A40404AB12D4650E662ABDA2BA870AC2C3A3D313815EAD2026A461A8 -MD = 22A93171023ECE0D1962F777AAC1C425AD31F83E4EE6893A5A78F5AFBF087FDB - -Len = 1751 -Msg = 067E8165EFCD31852B49536B78D91461A545C83E6BA5AF83F94E9419ED8AA4BCEAB4835005DA56BA953F4273C98B311FE4EDF3CC0560DF033E696B7C353B404D0BE599294B6301F1D473F5166C91A1741062A56E8378C0E0C0F1A64794C6A178B0BB821C025DC11A597EB1E5E676F8736661E864F42F5E84D1846251CDFA03C7B2D848FEC46CD75E9FE162C08C451642C9578D6828D8BF763F3113089BBC0786BEB3466EDF013AB675B6FD49DF4A9F1E837D53C3D011628B9F206FEF1D9F0669BE2E7A7873B4A68957EE7BA8B0DFC7F6E5093EAD29B3A3049FA3D8 -MD = 6AE31F7E149F87645C20E8FC0AC41FAC8528199AA594EEF0764FFDFDF2D45E0B - -Len = 1752 -Msg = C8E976AB4638909387CE3B8D4E510C3230E5690E02C45093B1D297910ABC481E56EEA0F296F98379DFC9080AF69E73B2399D1C143BEE80AE1328162CE1BA7F6A8374679B20AACD380EB4E61382C99998704D62701AFA914F9A2705CDB065885F50D086C3EB5753700C387118BB142F3E6DA1E988DFB31AC75D7368931E45D1391A274B22F83CEB072F9BCABC0B216685BFD789F5023971024B1878A205442522F9EA7D8797A4102A3DF41703768251FD5E017C85D1200A464118AA35654E7CA39F3C375B8EF8CBE7534DBC64BC20BEFB417CF60EC92F63D9EE7397 -MD = B195463FE22A160802BE0A0464EE3AB4D2B117DE517B331C7BF04C8BA90C6120 - -Len = 1753 -Msg = B0BB9952B8C75305D9ED7F8C402A3414F7DD1353D72E2242E7F96157811488CFDF7E2DF7005090E703CBC7D1EADB690345CB685DEFC764D7E02DB36D196C5E068D06A103BA3B2D6E3C5B6DA7CB789DB167781DA22EECFC2174E2BDFB3AD0434F557EDED255D635ECAF3C8C145EDF64554807FB42E011F25D630FE7C5F1D7B7E582C9A94D10F58C2D5385660E68BAA49D188381AA31D6A5114B08A870735F5C4356F37C9F935609A8703216243C21C1C7E23DDEBE432B1B64266A4D831E2B6F2826955F35AB376D7890AFF04DF6CBC378632EFF128A2E3AD82F494200 -MD = 1AA45271F7F8A41271D2DE66CF26C5220DF213509463E652A8DA2DAA061A9CC6 - -Len = 1754 -Msg = A579FA4FA6B6E09B5809B2EBD750D35A4CBAD3F28D70D808825B73D40BB3C0A749634C0FD7F86B988CCE10B6A54B9CD885C103BA8B019BB7F2D366B2E5478B5AF2AB94661C55EA6D7FB7F747ACCA8E7E34F8FA0CD7E9542B4C4D31D6BD4CF25413805DAB3C9F769D00F9F5F53D74F5B21CAAF8277965A8599E6946E59ECF286CB001CE26CCA3CA96D7F2B483E01492D90EFFE57A47FEDD201C9604FB5D870E7E2C213B298DEB828D1C6170E208A32E8E1D3376DB0033A86F2E4BC2CF2A87A7EE7065C19992FE938CCF4FF2F63C69535279774BDBE07D3161B3FED6C0 -MD = 463956A99CE05907BD0E617E990FC6C234ED351A5FF19EE683B21B456FADC5C9 - -Len = 1755 -Msg = F8D48AF2F89262E4E53EF211B891FEF6B999EC4F60EC1D803268526F7E0E11086E3DF232F4A0C4AE9D2CDBE93A2DF937E4AC673CB0174ABA62DAB5219CFB998590E6E986762943D99A5C3B9DAAB43AD333660793017BCD7F8060F85C338A658B27DF2AC36916F9EFC6CADB099779F0DC44803AE8A66F50413FECC75E60C9BF61ED54CAC360FE635588F112DDD2C02FE05A51BFB4639DC1CC970CD5B33DCEF967DE44FECF12F2D5362BD61D7069DA2D3FD0C00BA410CF1916635B1886220CA07D64E126A00C107A7771E251E00DD176146B93A6E23FA2F60FACFD7BA0 -MD = 55157A4515EE7DF2641962DDEC9B754F827C603AC69FC7D9F2AB0C46E7C92166 - -Len = 1756 -Msg = 7CA20C32E491F1501148E67EA2E7CD36AA5BC7A2F24818554FB7F74A1FC7943DCBA82725C451B13C4BC9E3A1B87F759724BFA5A3D82C0DE79DB7E2E4D112CA7BF9CD7392ED7BA92E9A44CF449ABE096C87E8556A817A400F75855953BD839257372EC32772D10A75BDD2242FDE9773C7B06551DE2F3F25C32BB1C9549E4A16FA45D629D28F21868229A4D22324EE27C207B0DDBF86B6802B9094DF8929AEEF904015D4D127CE3F7966BD0B35AE01F2B29A3A8C867CA3FF0980B812EF2081B43D63EA288B3D736EC8E53093DEAD12AEB3F8C9B1F32E494FCF166D65D0 -MD = 11D3552105E519D505ED69F0AEA876E4EE3F04F845A0D22F2691B7024D2F2D9E - -Len = 1757 -Msg = 3A1DB864D72DE4B6171388B5438A7D80C16B93A2C14A9592DF49A2420798FA25B969423BD3EDCD78508AA3268EE37CE5B94396570B819CFF3C8DF24FD57833CB3D0B12F615461205E9604243239968CF78B131E8F1B7DF444B91CD3B227ACA9C2E2BC288B7BCD23F9E5541FC9EC9B2C4ACB08D16BBAF409A99C5D94C6E635790E47427A967B30066826DAD10254CB6D7D59AC8E77020646B14E485EE2602B6DE382E4B7038CD5E68476CD337A77E687A8D60B3E74425E4A38F9FFC9B9F2B912863CC365D12E0AC1463786BDB7081BEE4980416CBCCE7F1A7EFC4EB20 -MD = F97D94E828A4DEE0C72FDBF44179513E7F0CA433FCF9F03DF460BC91FF64629F - -Len = 1758 -Msg = D9346257711A20A2CE70BBEE79A7C667E787691D9B1526DCE935F897A7B08F10F913D6C1EFB6E43E16D95A2993D945D911EF001D3EF9A902A1F42D0A72763C57FAEDA2AECA9B1D4B8BED766D058E8563365F83593EDABEFB8BF7EB896DA65DD3EF461E860C55390C0016F3B9535AA7B8743D73499D5B6E4174CAEE284F2F272CBD548FC81FECBBB2B8690AE55AE0B9CE920BE03424C94A4C8A6CCF96A11B484F170F5F4C0F834196AE5125E01555A85DB2E5CC88693E7D96E30DE1569E8C1AB74375DA3A5686E57639349A629D3415F19BA17D820BEADA8A115A6FF8 -MD = E595748AD06D051CDE4B9EB43E0C40FFC0889AF74A3A3D132638B07889523B2A - -Len = 1759 -Msg = 200988CB395E9D56BD5DAAB00100EDC9D4F0BCCA0D080E16DB7A9C0CF0DC3E064CB74C37CAE7B44DC315394C5712257ABBCC89D1FD90013364EBD1A55AAF6C17AA0924697FF58F68DE9698DBE691FC85E8F3B95AEB65CBDB655C5E8DCD929E94BAC3389667A18D65DD9BC8D0EB481453964ECDCE89453260C48B57F8ED5A647987D0EF3E7E045AF257CA60DDCD05BFAC255218D74A101172AE2C4BE286F931EFE855C04F1E0B570E17B70733E2CBEF9F16D5F35242482C098873B24C4AFADE932D17FB0E2A139DCDB0BF98D4FFF5D7E83BAD7A4290CEF7B75CEDBED2 -MD = A919F85A0C33739396C3B5BBBAADC3DB4A826CF3D94D8D66A591B51252FA8AF1 - -Len = 1760 -Msg = 7145FA124B7429A1FC2231237A949BA7201BCC1822D3272DE005B682398196C25F7E5CC2F289FBF44415F699CB7FE6757791B1443410234AE061EDF623359E2B4E32C19BF88450432DD01CAA5EB16A1DC378F391CA5E3C4E5F356728BDDD4975DB7C890DA8BBC84CC73FF244394D0D48954978765E4A00B593F70F2CA082673A261ED88DBCEF1127728D8CD89BC2C597E9102CED6010F65FA75A14EBE467FA57CE3BD4948B6867D74A9DF5C0EC6F530CBF2EE61CE6F06BC8F2864DFF5583776B31DF8C7FFCB61428A56BF7BD37188B4A5123BBF338393AF46EDA85E6 -MD = 9F9296C53E753A4DE4E5C5A547F51763A96903B083FBC7A7828EFFE4763A7CE6 - -Len = 1761 -Msg = F83DFEB95ED2CE9382DC80FA8025D5C20014C597CD70382655A8B647328A656E7552FFB590BB9F4149168332ED4EDB0895FAF01B3C957610164A19B0C91FA0A8354498FAB810B835B7A6F46FBE555B2D120CBA7E86C347F3905882DE7D1897984D04CDC39121A7806EAF90419D242849F98FE519439B1EF88980C28F3481B63AA5434E05EAFA90C5A5A7BAFFE92A6B489689CF157E0587EDCFC4061F367482F4AC8D0374847BF2328F409C481A025D4998FDEA0C84F20BF6EEC3335582FFD8C5ED31EECC09216F55D559B3570E423BA35015E52A86BFDE90A7ED981D00 -MD = B4DC57FF16E594446309D5A1418CE92BEE3A6E29913B2B61189BA9D3BD243206 - -Len = 1762 -Msg = 7C2F7C86D647031A2D9465634783954FAE406A4CFED02B9951F64687F55FF5DA2D6DEFC329E5A6CBDE17DDAFC4D6AEFE552FD66829B1D3B218CA430994C475B0A74B64B1E60F25885F0A4DFFC8F6C5FB9CCFBE6B75246764F2B3A743F911113F6CCD42B3DE0E34EC7C50DF188B2771B96E1979947F2B53E8F2AEF409BFD97E4FC569E8067465E5D2AFB99FD05C4EC5FB6C033DE47CF0C4834D135537F4B8AE0CE96B2048B25D10550585891BA9171FEE557E1C0F03D589FBD77D446D1823BBD77494A93C749AECEAC1E35C80B645D9D935F61B2DBD575D94F415EAEA40 -MD = D613F0B347929A5D62A5B60773DA01E204C2DE01D92C622D8EC9BE5B122A64A5 - -Len = 1763 -Msg = A900BC22D5490F6540345B762F5329FBB563BB48E9A443AEF9CFB0E4044E53F88832F3C660E9D057E236E9DAEB95FF496CA830231DC2A84FB5D8598E259DE4EA42D1E98DD7ACB604ACD9F758ED08DBB4A8B8CE7CA73427B77DF31B70AE9A08E2792FFF16008796E0D7C048E575E2972D71A6A07707B34CE92CCC9E1E7793D3C4BBE233A42AEDCE3F950254AE25588C65B313505A507E7819B4E8437351BEA586921D53F5C29A9FFBB16D34CF5826B33E8C620CBF5CE7F4D91AF9E04BB176FA56443D3B1F97036DA112E236304EBE8888BC4D14212FB65776A26D976DE0 -MD = 5C5299FD6DA35FDFA0BB2313DB714B24ABCF4CAB50DC9ADB0494D2AFF461F501 - -Len = 1764 -Msg = A8B4422DDEFBF38A277C587515DD63322690FDE56E5D7EDE0BED671C862AE75EF5906F8091B8FD6FCE7B0A41DC98A09E9326AFF348B59A81D898FCB4F2204E6F3547B9F9F6B127BB66793997C93922A6E65835D33F59E094E055E84FB6334519A39F4D22B2A516268768442D56CBFFA087BB10487BA5CE886978C4141ADECFDD66392F4CE557CAB50B398A3EF252234ED711D0CCB3268B9658560B33C1E90CE47C7054B92DFA052BB941154C4C249A8EE2BC71D54884154D28ABACC62744B5D120AD291CBB93834557402CC01F9E0D80AD269485171F8577D878EF6D40 -MD = EC6456A2D1EF1E866376FAF430A504832050D14EC56A41FDB494A41C4E7696E0 - -Len = 1765 -Msg = 0B8736AE4685DE67E038637B0F0E13DA2FC538406DE8B1CBD84E2B93AB3C566788B17345BF1F75AADFA74B9B57880DB3B7DCCFBF692E833FCD637C067C44BEA40A64A76C1349029FF550D0AC011904E91DCFA3569FB6BAC4862D0B1FB3DA23F88DC5EAA7491EDB68DD38A53997E3B40B2164AAA7D77E8ADEE5C48DDC40B4DDC99D95E810D9CA48E42169AF572174EBE5FF0FEC604C0914F695CAF83BA0F4307460D91623B107C110E847E6834324DB0E5A49A948594A0BA3557003A3E44B41262F6EECB7EA29EA272DF0D1F32FA2EAD1A03305639C8D4552E1A06D5520 -MD = 079F72F4ACD9635FE7B8AA4CC0BB90C390435D8F359BAA4CA547842A0CF98CCA - -Len = 1766 -Msg = 8472162B8C5D55A99F235168982A178A2F46BB53CE1FEC5E3FB51F62C11C2D7EB770F5BAE3B1D66B10789D28B5249209608D28BFC5D0092237411676DB9ECBF8109BD8AC577127481260BE41B5772EEC7AB7714FF05EFD0D9FD6A1318AFBA473982563E50B2A9B788DA93C434BE4A9286A2B6DECDE6B07AB4EF170CE5E49835CB67A9684B9BEBABC9FD3E91DDD6E36F7D712398C5DCCE633310F7853176926D687D2C0CEE030797C2A78625D92E85AA2F6EABD22142C2445617E54CC30ED9E3364C69EF8B5C8409F350ED954323BDAAE9001369DCE3861A4996D3D0D18 -MD = 1156F81D51C97EDE81DD86545FF8233345A7A1C1464CADD69B9400EC30121CAC - -Len = 1767 -Msg = FBD1BAAB1A2164DE65B47C947571C963E46500CFE29C6E2D3C654EA66600F2540FACFD02C2E12E8207CB2A18830C2CBF1CE4E2187D5A1FFD830CB3AC60B8F1C108F632A232E92132F673264983F1682A89807774371DCAD3881F6DD21D00CECC9298285AF4393FE9870603C7E85478AE4C482E27164909B99FABBA5EC6E6C9674A16D0F4CF3D398BA2E94A0713BB15C10004554C88CBBDCC957ADE527C8AB091A23AB05320CC0EC3DD8AC7F88FAFF3C4F9F20B2A1875A50FBB7981469936BD59CCDCECFC3024B8295E120E1C5B9004F23EA1556A860709908955AB51A2 -MD = 4576744BD88F7A7CF8F841693B86A9E9A5A4B3FF1C1296B5592FE9C852A7DF32 - -Len = 1768 -Msg = 7FDFADCC9D29BAD23AE038C6C65CDA1AEF757221B8872ED3D75FF8DF7DA0627D266E224E812C39F7983E4558BFD0A1F2BEF3FEB56BA09120EF762917B9C093867948547AEE98600D10D87B20106878A8D22C64378BF634F7F75900C03986B077B0BF8B740A82447B61B99FEE5376C5EB6680EC9E3088F0BDD0C56883413D60C1357D3C811950E5890E7600103C916341B80C743C6A852B7B4FB60C3BA21F3BC15B8382437A68454779CF3CD7F9F90CCC8EF28D0B706535B1E4108EB5627BB45D719CB046839AEE311CA1ABDC8319E050D67972CB35A6B1601B25DBF487 -MD = 51DE4090AEC36F6C446476C709253272CAB595D9887CA5D52A9B38086854D58F - -Len = 1769 -Msg = 362A8F973645373B80C928F334FF23B7EE402C2464CE49A86EEC3BB5275BBA3793BFDE3B7981139E0C208F4A5E46D16C22E95FF3358072478898138DEA56910522CB6827F8A6733C8B401C65F1389ED4E06FCD5978348C33FC29BBA2858CA06116753F1DEBADDC89DA4F68E6A8510459BE5C5576EFCDACC4F0FE545BE377620F75C507E2D4F32098B30BBDA06D69919C9E313C1D402462A4AFCAC637F23B52D247D6BBAA483D3B350CF006169FA9D7A9E94C1B103AEE8F93ECAA91EE0EB8224B1CEB5F87B4C715DCB5BA9F534F09B8231E4C5F2C5D54922515799A83B600 -MD = 991C1C14BCEC3CD8E1CC6AC25E5130125285A404A3217E3E0FBC47CCAA7016C4 - -Len = 1770 -Msg = 1CC22077B4338E60F383F43C1F64D73C8877BF0879F4EF0E1EF4355AA96F40CD5FA9FCD75CA20E7C52C072F6FF3C0E5132EC69C5339BD30CC2F0D6779DBB576C24BD4C54D64A745280A9FB83FBEE787713DE725475D697B2172D87A194E1EEA61014222C518A23F4D67C604C9742B0EFA8F82BDE5C2066540E8593CB8D3AE8CA62844E9E80CBBC01A70919E7551E4ABF9789DAB9A3C3F76412F72B0AAEF0EB78BD18D00817DF1278F19DFE9E4FDA40C73B029CA06EB9F7B6ECEE3CEBD92D51429976A8F93B75993503B4764599A1153598FFD267E102AFE4EA304B246B80 -MD = B730A53C804D1BBB7D5DCDB047C38AEA802A67B89395B520284538E261727436 - -Len = 1771 -Msg = ED975907D6BB37C0DCABDAB298C7E9E174C9BE1EF386D1EB2ECB82FE0364DF8503E3568BCE47AE0873AED18F0B8CEDAFCBA27E2ED0892EBB31F49E26139A61C0FCEA7257F8D919622DD325F0908D27D7A80BE461B2129E462B8F84EFE42331DC2CC4C8E5AFBF339D5D1C0A087E444D6E432FEA224051ED58B4BCD839C41FAD6DDDBCDC3EF3B9DD65A91ADE9619C5BF90469C4D29AD631B9C3F7675BE22D4D1369384F34094C9EBB255C4FD19117278A727AEE9BE8A37991D1EF430952274446DFC2299497B4A32A18594C1BAA6E993906049B0DC9B70DF34F71C5F7CAB40 -MD = 2E65607D26FF9AC3A9618B904DFFC6B86E3D54CE2AC9BBDD42E4A179EB306ED5 - -Len = 1772 -Msg = E5C0FBEB6B9B24FC8D6AED56E9B813E0B335159619E32279D68CC1A60A32A905EE810F31D79C65F557BA5349E2076F5E86D3D0967BC67A1FF4D67E86643E79267B0547CA98C484D781F621545EC35830FB4710D87FA5ED6F6B0C7C3ACE434D71F6B00EAA423C37F2841DEFB2F3B76387ED86B94A7780A1E67458A5362B281A19EAE50BFAE97C9B116AF64E93086500978BAAC32C989DBE68D2BAE2EC86048A56DB8EF1C42C7B73EFA712E73CEFD9711F22573C00F03BBCF43CD46A8F08015A6450B68BD234482B8AD1F87C28F3629414740615D6A631ECF5AF486662C6B0 -MD = 4F1107FAF7FD59704AF665B2789109DE63EE772E5C7CA7749B31818D39A2A960 - -Len = 1773 -Msg = FFB110826A187B8217E127508F7FCC8D047F91228778BC82D1CAC8EED4503159CDC07C9BC64BD7AB4D199B9D058DC48AC77868779458DF1B002FECF875782C9E305A682C233FF7B3428A3F23BB4A60DD32270238DE49D4973031814FF2D7EDFB88482951025A51358BAEDE5AB72968883E906B65ED277C934F802F1B372959A53E9DEA5FE96E2D17B2219A96FD02F8AB193C8B570A4D842DCA0786CE0D48A5208C2E0AD737163703CD1F8573FB910521C746E79F1EC6FEDA7503264E117D9D9F9AE784B83B8425E714EF0001F91096220644156A834F1EC08C2F1C035310 -MD = B9E6DC8914B0E0C13581089483B92F7D3BD33EABCC31F4A5197A38D77EA53E6B - -Len = 1774 -Msg = 858FD6156E56C400E14D20C9797E5C3C77DA1FEDFD9F78A668223890E539A642C032D54BBC3DB3D0523DEC2B54484622FD1E552F3D13412D4C239072046C26B6C831B936E64C539712EE9C7913287E51E2701664E8ED5C3DA4BF399B8EF9E16DE5B8E20A07EC662AD3C85F93E87E06D1B1872EABDD98CC6DDC2261AF5EF3E1B308AAC3B1F6E5586988335A179DDF710CFD0E4404A0C737D5DFEEE0ECED5B622AC2C5C3ECB2121D56B7B2F556C79C116607577B340588485B89CBEBF2127F474EBF2C0D381450A5012963B1C94AC794D86AEC05E53420D9FBBD8E719E5974 -MD = 42BBE0982473C49D38B17059AA98181206A85759F692323447E9BD594D5D83A8 - -Len = 1775 -Msg = B8A81A70EBAE566CBF2CDBACA0D32F504281A5F6199E2410009F3B0EEAE3E6F22DFDC976DCBE56DDCFF18560A5880827E13EEE8D3E8973008E7FA21FBC9BC617909648D30552923B304061FC0AC5DC4B9E9E0D6C7D6C0DFCF14A7871C88EF98D6354226F7665CDC7B26AE9D5C028BCC3394DEFFFB09C5191701EF82CD111EACBA9FF23D943A9D93879A0F4F094A4A0C3B6524F6BDA783A3A1B571FBDAA5CBC6A29616B86F0160361ABD99175FD24D79A87959B98AE7DC0C53FEDB2FC065A2D0086C4FEE596F8A047DFEC8C9A24353E60438E6868A695A66AE1D1E3425384 -MD = 0EF7922F6C51B9E5A45A7CA0DA4178C37DD68DFA515C6E860C32ADEA0FEB62EB - -Len = 1776 -Msg = 988638219FD3095421F826F56E4F09E356296B628C3CE6930C9F2E758FD1A80C8273F2F61E4DAAE65C4F110D3E7CA0965AC7D24E34C0DC4BA2D6FF0BF5BBE93B3585F354D7543CB542A1AA54674D375077F2D360A8F4D42F3DB131C3B7AB7306267BA107659864A90C8C909460A73621D1F5D9D3FD95BEB19B23DB1CB6C0D0FBA91D36891529B8BD8263CAA1BAB56A4AFFAED44962DF096D8D5B1EB845EF31188B3E10F1AF811A13F156BEB7A288AAE593EBD1471B624AA1A7C6ADF01E2200B3D72D88A3AED3100C88231E41EFC376906F0B580DC895F080FDA5741DB1CB -MD = 87A17400F919F2F53232B2205E1E8B14BD5698A76E74B9BDD5638A5C7BA5DE1E - -Len = 1777 -Msg = 689E99F0F012A351D6D4C65C6E45F66F75133492B96CA3FBD2FAF9C7BD0A064B0272BC6FA6E06E0D6C9A40F952D3CAE3AAAE8D8E45B78B7DBC4AE55D55977B77855867A93BAF38D6C1EBB80C3FA2D64417412822C5EBB48E39C0BE2D1ECD8D7B32E9ABBCA89BFADDE5B690BE604E5D636D1E14D7CA3600D21555526D89479E0959D7476D25FEB82C9D07A51C3A7473D6DB944AC3E272DE038AEF2CED6FFC7925CBE5CB28808B0481C6B7CFA7FB98386B3E285D1C27C4CE95F043AB15D2599BC146A3213B49ABD62622E9B8F004142402BD6FDB22E12C78BD2A1F1A79867100 -MD = D2744974AB7B8AF6B125E61FC2166CBA054C0CD05AD3D25B9E758933A1413C67 - -Len = 1778 -Msg = B5EE16BAB537B6C45B4F6A4037CC7C7AECED7AB9BC6F64D5A84B0993EB079A49DB78521DA17F82B6573A1E1C17088CC249E3860A1C775DF37E3396A0DF546FF0580F7198385046F24A4449F62421397838D1839BCB0D1074FB0B130BAE7C6770D38B5349765DB7480EB42F3A644AB106DBEECE2AD154A849F65F8206DEF6CB74E8D18949CDED9DD965382829755700271DD8C2128B6FD4F73741D0EB611EC10767D8C362586DB58AB5952E8D40D739063B838DF5F26E719B777A370DD4B4598C3F0012F3907EA5445CD43EE622144B3E8A6F5E7A95288E58EA31D69F9EB200 -MD = 257371D12F1FDC2F9F96EA9C228874716D44AFE185E2040F69EE859F996AF681 - -Len = 1779 -Msg = 59E5284707E07BAC72F72F9C794598045B6CDC1B84D6868F41B9C3F56BF2B8B8066F3A4FFDE362D5F8C9165D0F4F2422DD961B510C1FF30F1522044719A7843C5E2E86462F34D011C90382294E1262BF9210EA74E6EC20A341E1A61FA695897D5FAEE35AA02879DD6E61C953DE7A948F4A6127412A905A7800BEE515957F63ADBAA6917C60DC47D2BE0B9E7D2BF5DA653B79096E266B8B0209AA5B47AA547F0009F4E3046D130D0CA7BB80FB3D08602EBC52AAF4326F9A3A090ECC10BA3E75887E899ACA9E7225591A1A9818C0F942E24296C4B92A94507F982B7806074220 -MD = 4592242E2516EF1A7F0821762886DCFE2FD0965F2D044A292639377209C24801 - -Len = 1780 -Msg = A826E94F52AD6F99EE16FB3C8176F742ED6128DF75F5946979DA9F3465D8EFEA205182FE62C0AED722922EFA0340AC02261E94B520A016CD0F9C5527663A4012E2A8CD1F5D5BE194693AF7B0FB56CC63BF67E98B3DC891B362FF58C0885F72945FAA606670F4FCE2D0EA0C58146FADD1AF2D722A8BE13812B875A4CA7776D548C52937CCA376B06A72260D353B39E85E64368C0185D154C91887B41CEA32CEA0F319E915F38CAEEABE01C47DF2961B28269B260E430DB9CCB8605F99D6A534B5DB5A079508E726135D73BB462EFC3AEFF8142FC389865DDF4662EB42D22D50 -MD = 2F0D7B07A915FB5D44C04AEF59D4C7509E46C259EBBF0676C38EC2B3E62EF7D8 - -Len = 1781 -Msg = 596FC0D7AF7728C870648A62AC2A4E20924CFDFF4127378AAA6A18FBA54C9D572E7E79039D4C449458A36DDCD5AED4FD463FB207BA99841BDB8C9BCB9AE8AE75E03536BA2A808A32A8C81194C11E8365996107CDF410D2E5CFFB2EC9E2297FED09154FECC91658B9386488767E6D9501E50876EE4373A2C65C7A5573F7F04A46B05B82ACC35151A66D610278DEE87389FD1CB125FAFFB00CE75F22F39AB08D13A8428C9C59C1BFB974759542EAB24DF016C5C231CF504A2624E138F6304E0F52CC6B3F40645EA0152C085250367C889B786FD3B8B25E1D6FB01DDA18694470 -MD = 1682F4E8AE749968AC6E2BD83139EE61BB196F843BB4C8EFD188E1AF54F676D6 - -Len = 1782 -Msg = EFB3D29588D15242E8BA1350B47160927ACAA45EFC76A7F49C4A645493A0E481263CE4633E9BDB4E5F0AF7A9590ABF367EDCB427F8F4356A69856866CB677970E229D34E36796F78C75BA454217DFA3C68891588BFD38D0444C89734F58378E8748E1A641FE0912C8767CA3F2CCC9E8F4EAABFA09297A4633EDDFD420F0182BB916AE6B060A3C03D754D6AB223CA8914AAA0E357FE80A0BE4ED410C80DB9FCED2E57F46B5AB8BDA63423D8A0C03E113891EE6B5B7C0D336157DAA8AFE6A944F5A121F1944A37399B930CDF53F84E0C66A4B77A1261187686C8F7C2F16DECF8 -MD = D01951141A6E1973C086D13B515CF29DD51F04F892942E6E64ABAC45F3C85EA8 - -Len = 1783 -Msg = B8E7A79771D4F282C163A1E2C72A0E9AA1B51C60BC857DA2925E30678F8AAFE7366FDA06CAE7B39F80C17136C990734EE58674AE4200F847C2AE1BAF8BE24FE7951CDB7573EF0F0173E9372C9DF3A5C0334E90636DA48C23460145D9BD486DEF39E4FA04DE9BEE953919FBCE96D9EF6C73A2D1DC5C5FE20378093A6535E6299585B8C63F2A080BF5FE5F11818824B206AA65AC4B358EB2093A6DBD656BC3D17498C56A36190F76D32FA130B203570EEC3A44AE20F76FB2514FA7B9A3104AE07F62DAA2FEF7387D46B9076A109FD2E0290D0DB3280DE6D72F0003AB3BE2C66C -MD = 31AC89F6F3DB358E00CC52A4F1A67F0A125723113C2DD788B165DF3F229AC899 - -Len = 1784 -Msg = 5AAB62756D307A669D146ABA988D9074C5A159B3DE85151A819B117CA1FF6597F6156E80FDD28C9C3176835164D37DA7DA11D94E09ADD770B68A6E081CD22CA0C004BFE7CD283BF43A588DA91F509B27A6584C474A4A2F3EE0F1F56447379240A5AB1FB77FDCA49B305F07BA86B62756FB9EFB4FC225C86845F026EA542076B91A0BC2CDD136E122C659BE259D98E5841DF4C2F60330D4D8CDEE7BF1A0A244524EECC68FF2AEF5BF0069C9E87A11C6E519DE1A4062A10C83837388F7EF58598A3846F49D499682B683C4A062B421594FAFBC1383C943BA83BDEF515EFCF10D -MD = 9742536C461D0C3503A6C943FA8105DBCD1E542F728D71CCC0517CFFC232EA68 - -Len = 1785 -Msg = DB5F9F96CE8C4916DAB039CB29B925B057044C126CD116712C4A91D5F0CC3CA08C1F27FCEAA7706D3F183A541210B5D0DA8FD7093CFE660C210B6BC06846FEBCBCDDB9BF68C34FF9AC1DBCF325CA6EE41552D7D28A0B200BD7509AC6147907557C3DA239F86A3A600BEAE2CB5078CAFA77D2479CFCDB13590B90B376044FA4F4C29D537CD5F537BAA1C0839EA3DA3C57120104A3F804641275F8C5940BDD4C81F18B12EAD0B37249CE33B3079622FAB25E174F9C72599B41BC536BBF9749B65B8A9A783907393C1D2BDC437E5B4DDB37E9FA1C81CBD7634AB31883878EA1DE80 -MD = 69BD65C6F7854B2E1EEF7E027A34D5ABF51C6DEFA75BAA214E17159DC4C955D6 - -Len = 1786 -Msg = 109D1D580E527C36614A4743E2F8B92E13CE86CE212F70D9E08951297EF173298806274CCE4F3AA756F2A6BFA4873322BEF2D2A0C3131B1FE1AFF81874A2A715561310A9CC7D8338DEFE44A27500B5AFDAD4300160B507A2BC58CAEEB3683B9596D822011D0B01E3C314741F3948F9148679B822A55E55CA19901D41AF8195489DE0980A4E0DD892EA9420A60BF83B1203F317C2295CE73CE9FFE9E498A3335B8AC4683E0C17E18D9F7050528469B177F5A3FB4FFA1F88E6A0FAF60C8018DADE63A2D5F0FE8B970C5589ADC8BF706D9B574190963CAC5ADB827F60DB174A7680 -MD = 6FD763449546C5575F56FAA910CF15F50A2DCCEC095E4D59C26BD8AC6266839C - -Len = 1787 -Msg = 22EAA6EC79BCBCB54AC77F96F50B5932D35ECAFDF8F1F52F680D29C57E8F6F5C5C456F772A1D2F398CAB6E8487225126EB71AC8E306ADA353FEC4B71AFC588FEA5BFB0318AF87E319C627BBE499A67057FEFC24DAD44E525194DE82081BBACD4911E2395DED81F97A381E13E23BA1CF3F6E58B9D297BAE7B3C3CD224C00F6D030B4658D19A69B0B5965BBDBBE8F8339418E8E28C0BE9D7C7CDC71990CBED39D45D0E423F8F410C306FFAF581A1D73F0737A33334463DCD18054F899EB79A89EC7A99249F06703323BF05952826A4C0932B820FEE9481EEA07A859AACD1991A60 -MD = 96867478A6FA79268B3467A38AF501FF3A5599BA0EC2CA5A6C7AFFBE127F5F2B - -Len = 1788 -Msg = A398525B9304377B97BE57240B5E03932B0A798000EB2387BCCEC628D068B6DD5B4CA1D0FE037E325986A4669EAF2EA4888B6E6D36914AEF81B59F4B4B4C87EB452E88A38EE3FBE408594B5F9991E6A2529E80DBD2F5BC32F8C48EB5708754E8C2D7487EA8C741051DD38160041DB4D16D6E92E0C2158D854AA84832DB900790434C9C6D68C4F0D9BC53B008FAEE397A460A6D43E23AA404BF090D584104A597BBF4C5A9B5817EBD985651393EB0CE96C668045E089C2BF6F8472AD2F6BE0F9D4735428CE214CA1DA70CC4580B9D4EF42C9185DAF0BF5EBECB9EFF45B2C0A4E0 -MD = 1AFAB26873F8C405CCF4C17B79A5EDB2113BDBA5AD078072B11A385E293271A2 - -Len = 1789 -Msg = E6F462213A8E30F8E6C9D36CFA3D6DF08FFC26D96646DFEB1418C8A198FE4F2365E303671389EB7A4AABB4EE3B6C4E86C86198742F76CBFC45AC2153DDF5E672B8C1A8A753E83DFD25E1458ECEFBDB571BAB1D6C5DDD28A1B1184B27374F65C28B9E4529716A843031CCA409D9DDAF6B99FD0E2623FCB96E02D111B61CB16705C5726FEEB414AB259FF86C392E9C5F5AF40357A244EA0BBFE5E1F06510F40E8B09EE516FBAF1C5E3CC44F7755B10BE5DC9EA06F6A25E368BD1324AC64F8350D85DEF415AFF1C1148CE50EABABECF501126AF66C6FDFFB6953122C1AFDE846AB8 -MD = B18FA1123DF6C3867EB61A25DBF3313CF62C446A4011240BB4038B3127B8DE10 - -Len = 1790 -Msg = 9B7474751EC3E0BC817A13FB0D8D98AAB5DA9ED6192BBCE3B8358A6B03DE907A7DA7F45868AFDC72A8C178CF893703C9D25B2E80979664868A0D725C4A29697275D51C94E203DBBB7D84768F733CBA856888EBA76958CE9D2EB687A0FAE48353183032CDD560514D01243AB6E0D6DA65A2FDDC9561366025D4BB1CB67FCAF66B11EF599EE7CC40C4F88238B8C24D75E8D23ABF217351935C4D85877059EAF01CE68425AD8979E6C8560CEE26F0613CB0B090BE7F74C1EE2950B134486F9F11E9C911FB7F07C957D1E150C29B938D01B813FE4E99008CA1AE70761AF1D1500D10 -MD = AEF492AFAF26D87CDA68B211F0E2DAE9FD7B162E291620812A3C67F6A929AE21 - -Len = 1791 -Msg = 8130BEEACC213C8789815550C32C2548E750A2516FC174498BB346743379B651A3566F4116291C6C86FA0DD913E41670ED1BFFA3FD95BB8ABAE218FC16C27BF4DCA132ECBDB589E807BBE980B25373E59B3093DA9ECD4303311CD36E800E7029A953219AFBD18B7A68616EE0B372C81319F0238AA6260FD4D6044C04FC9AE7A82CEFF96D518F340928EFF34145817DB8A18E4EABD6401623318198A3B90FDA9F86D93EB14BD976F6E980331A2FD7F41AACC8ABD1559ACF38EEE6407E38EDA98420742F5FA197B577A5EA34A3D452BFA3E77F7C9CE1CA386AB7966C6CDCD0ACDA -MD = D7BC6B87765F5A9AD6939784520C0B3B75C006683B9FA31579B02B4BC34594F7 - -Len = 1792 -Msg = 47B8216AA0FBB5D67966F2E82C17C07AA2D6327E96FCD83E3DE7333689F3EE79994A1BF45082C4D725ED8D41205CB5BCDF5C341F77FACB1DA46A5B9B2CBC49EADF786BCD881F371A95FA17DF73F606519AEA0FF79D5A11427B98EE7F13A5C00637E2854134691059839121FEA9ABE2CD1BCBBBF27C74CAF3678E05BFB1C949897EA01F56FFA4DAFBE8644611685C617A3206C7A7036E4AC816799F693DAFE7F19F303CE4EBA09D21E03610201BFC665B72400A547A1E00FA9B7AD8D84F84B34AEF118515E74DEF11B9188BD1E1F97D9A12C30132EC2806339BDADACDA2FD8B78 -MD = AE3BF0936497A2955DF874B7F2685314C7606030B9C6E7BFB8A8DFF9825957B5 - -Len = 1793 -Msg = 27D6EE9DBED93F4FF6F3A7BAF8B72C092329912F4A15AF0EEA52F9E322A084BBD9B406672D9BC94A4A492AA0845E9390F04330B8EC31F2EDCDD05221F4524EF7FDAEDCEE67CF2E44FA2D298431EBEC108750F1CE529319A50F8392400C722F5E53B6D53C63E16BA27A374E99715E9050FED4792682184A5F268DDB6D1625716C2CE8509F36D9AC9565D742759F658A90C1D20AC4E66BF75FAE130114D83EEAB638A4C77B3CAABC4F631B3271805ABFCCA43CE5445AF17CCF1DE7CEC30A5E3107EBED862AC949A163687E309C6F6ADCA442F707BE5957761647AEA187F10F88D080 -MD = 1975A1ADFC2696409F2F5DFEB5A2898A426B6B1D7CEA4369F7A0593133C78AE7 - -Len = 1794 -Msg = C79C9FE2A1606723EC5D8337EF848D1AF1E7A1E856BF25D36464FA5FE65563A2AF9E66DB7D52BC3F2DAA1238CA2EB67AFD32349A70308751AAC7495DD1AE4683F8F47F8EB67BF0C09303763B14E7E56098B4EDAE326ACC8ECF2760071C8D5E953B1DFC4D078D2D1380F93B950D54986B586D61A908C9252ACAAC8423A5406A0DE1A0AC74B936C493D194EE413FBAFC96F3DDB4721F37BC451AE41B6DAE9A5C0A813DAC3062679B0B95388BE628E027948A99B34BFFA65B4DFBCACBF5F5B2A64BA7E0611A8302D18354E297CB3AC65740E060876440F96FACA71B655261A43E6BC0 -MD = 19D16CEA0B863FD3576638067AE38D449B7BAAE333CC682746BABFDF88476A19 - -Len = 1795 -Msg = CDEDB7F4BE61E5253A46B965A08FE346C388C0F77680B3D402EFCB1013B83CB0F72C79BBB3461890F24634FC48F4A77B4035C2B28AA75AA9EF49FF390F4C3726121A1E4FDE6E97C2D72E51ECEBB76A9750E80A3D6D58A6F3D0709E8362AD005E10D5FF33B9953D45E2AF090654BE13B1D32950931601BF84B037BFAA2694CF26FD6C8833C0AF72FD78AF0C01B301FE9D9265F9B6AD3ADBC0DB1C7C4AC3E6F48709C1B4AB8777D6B5EC9FD7D409BD31900836ADEED56CCFA3985E868C6AA7EF2B8AF854CFF7AD2692EED15DCF83C4D948C8AB7A25F79A83D761C1EEA364059B4300 -MD = 133FDED48CFE24E4DC6BF402C188985024AED5E5F5BD2A964B63974FBF8951A3 - -Len = 1796 -Msg = 8DDCCD9E22F2ADB324237FB5D57C093280ACD83B53DECA3B914651E8CAE649E2904DB8EB0105BD4E921975D71BD5342060765BA915CE51C0D65BFAE74B52543C32F923E86CAF8D7E2CB19D5D9E935CE33B32FD9CF2E5ADAE48BF1419FC83ADF8ED00D624B4C1001A840ABECE16CEDB785277A1AB6CB02335CD867240BCECD0C200C747E428EFBF82A49961AA30226B9ED910C4B4E8971C7D27B5E2115A7DA0C2D91E15CE6FF4FFAE854FDF4DD14AACBB0A562B03EDDE104CA3F7658A66B6D4DB8AD7428B58816DE25802EA871834AE1EE4CE9A80F5F12826438B663C279B143480 -MD = 17B5E98CA1706B315BF53C85152D64C10B7E759AC2D8A02EC11219919B8971CA - -Len = 1797 -Msg = 48840249A35C396A5E9AB7C6CD2F0FF7EA3166BE9EFA96532F9E76E58B350595E7885C6E4C236B34FC66A14873F11EE0691DD3843BBE0F38A73638FC8BC689DC42C8A1C3951D94E538BB80FD94787FD58398A8FCA3D8BA0863CA8E6FCA51F01A3370D59A37308BD2334FB7315C74413A02F620F464C819F159C75D3E1017B7B768FFD9FF3B5A6A45C03376FC2E5E08398E23E67F80082C825A4635882D953AD6B8E34DD7236AEA73681AA53ACE2FACE0583B0CFE81C467F49F0E05F9EFEA53C826E18CFE9F4B288F1405485DC207649CAA7B93A4820F640D02C788854F49E76E48 -MD = EFA146FCE061962A941A834678F28C8EBEAE60DA9D6831888513C1AE29A18BDE - -Len = 1798 -Msg = 0F1D284ADAAE48146EBAB918BD31203EDD82ED4204FF85D7B0389784222852CACA0D54E415520A5C033711EFEB6B9CFD7FD0B8F1C605C729224357362625FE976A58DDED74D028218AA9099C24A9DB1499BDD9FB89E3A14F89DD1A602E78FF4EC2A7FEE4DFDEB35E0A71E1CA7EAA0010C8EFD92881E420A22C92D12D697D4F3A36B30E2F7C1B054A9865684F855679E9F8B8BBF58E4075085FA2FD27CB57C5A8F6A9D86F081EBA58643956E1680337BC6B7C547B05C7183A1F40D569B15B0329ED82FD59511E930EAD1262AE3A15BB284DA0C99F42615C00899B80C1D645DBC6DC -MD = E106B73F09DE77234C393A707FB95C2841830B1320D1F83C8702FFC81D4128F0 - -Len = 1799 -Msg = 9C9827C405695B340C750EB7B48F70EF04742A95157782810B1E090EC8CF7F1757379ECE9877586ECBE00F25022F962F131402EB9C5FE4BDC739748D340A79A915D11F660471E9B2E833652E07CBA8B5AF1363094AA8086AEB8A46E01917B4A5DC9DFC0F5B93B7E8882FA2EA69BCA02EE516C6AC63C6121A623CD909A6043BC7CE50FD00B706D1D23736C8D9DFE34F9887CFB9E7CEC0FE45BD1FD1C21EAACBFBD3A55CEBFE2AC7D35994380277E178A77242E11CF73D2247E6CC5F2848EFB20FCB870DB1A86AB409716A7D146C10824575BBE183A2CEC05FE923E119DA578372C4 -MD = 3906F8B896B5556F6B07BDA5C5AA8913C890582EBFEBE04CEC4FC61EB6471FEA - -Len = 1800 -Msg = 8CFF1F67FE53C098896D9136389BD8881816CCAB34862BB67A656E3D98896F3CE6FFD4DA73975809FCDF9666760D6E561C55238B205D8049C1CEDEEF374D1735DAA533147BFA960B2CCE4A4F254176BB4D1BD1E89654432B8DBE1A135C42115B394B024856A2A83DC85D6782BE4B444239567CCEC4B184D4548EAE3FF6A192F343292BA2E32A0F267F31CC26719EB85245D415FB897AC2DA433EE91A99424C9D7F1766A44171D1651001C38FC79294ACCC68CEB5665D36218454D3BA169AE058A831338C17743603F81EE173BFC0927464F9BD728DEE94C6AEAB7AAE6EE3A627E8 -MD = 5FE0216DCC1BDB48F3375B9173B7B232939AA2177C6D056E908C8F2B9293B030 - -Len = 1801 -Msg = 93E0C330DCB438B4B2B735F7AA4753EEE8123FCBEB25223F98A17F97BAA4221C22F3538F35AF743F5A17660E8E1FEAF0E6A6D17265FD591F44C194C2454BEAE9510014FA5D96EA632A889E059DB6932D327E4BE6A616186612C5724468FD0AD4F2CD1DCFE4E8A2E512815B79D89C2E9878DCF4B5DDD41678B6FB612BE2AC2075DFB3A7B1F9A00A540BE55D6B787FA38E02E084B06967AC8A2351790E88D8632663DD28B6E4CE6BF7A6638630362203974BE186671E76B17C4372399415A2D02F50E82FF4C65C3EA3434207C61035539779E6A91677D29AFE1F87C4C0339DAB2D1880 -MD = 6E7439E5E78542A553AB9171BC05DC9D46F861EF9418C26B22B6F2449D8A2F57 - -Len = 1802 -Msg = 0A12DA8B95783EFC78ACF14A765CBB96FD14E7FECAA12F3634AB8FBAA1735B938474E0E5BEF5B85D02CA9AD30F8285BF6D86A5CD8E8E31044A3C93E0831E29BF76BD2122621B3015F37A0C5CCE07F5FD6B16AE6670CD1135BB9BC1ED8DE5FFD8A8E25EFAA3DA1C7CDF7CF4E00713251A7493EB3B8CA59940B4B7831BA83C3C3DAC506086D0892132636F10ADE3EAF2BDC1C81FDBBA5358CA69F5298ADDCF82D4B7657549B059B5C028385A0C6596EFD8746C83032B4F4C57F84802EE8DE0B2E5CADDBA774494F78F9F194DE1097C83E2D05277CA4B5A55BD19EDB6D9CE5A6C5044C0 -MD = 496D163A5DA7B4E059CEF46626D2E6B8269D094C7A7D97822C33F4B1BC993430 - -Len = 1803 -Msg = C085E32E69584DAF2D6EF0103E7281FE361715A51E68183D4271C7D8D84431758F42F74FC551CC5AF6907A896D107DB614FEC36C809173B3062004F9DC6E45142AEEB962D8BCB7CBC7E710A61AF23F7CC18393F2281C8CBBB5927BD09E52F6CCBCE7CBC2AA28104294978963376DD564418CB771B78A386DCBAFFBE05C06C814A156DF02DA4F252C00C8ABB25278F87E2704563136EC829C5F92C516A236C68CCB2C4F0611454FE04E1C9A4E85C6C8C52EDE60BD578C999643DB5D929F4102E84667CCC8EEB7B8C2FF2B8F4764D31E74BF2BA36D19D0EDF438E2C814B98C5D05F7E0 -MD = B3BF1AEDFB07323BC2E6A0CC5B586D9365D63AD55568BD391CE06A57C7BA4354 - -Len = 1804 -Msg = 5EE5BE16B15FA56AD14EE25205AE1879BBB0E025963270ABC462BD7CEC673390DA462D2737ABB4D926D7A15E3C5AAC86F076E6D7F7F10C86DD2E62CC856F814394403EC7D85C5326CA8902161C005CF1280F71974F2731F42C4F03B779DAF07610C4A34F1C4EB4044B77546D991EDEA239E6A6289E2B35E53B4F59A96D18FB55A2E2299D6CE0182CA4283444819E36EED59E9FC3AD186F14D66F60ADFB1596AD7AB29C65A350FFB00C58373ADE7787428468567BCB5B3CBFE781E2A69C365FDD5FFAEA902368BF2D6CC53A1A3401BA729E94F778B031BBECDD49DD8391634BDE4B50 -MD = 35E4739CF2D4A8094EB7072AD2686038A064807AE72B466BEF3D9F6CEC31C9B6 - -Len = 1805 -Msg = B173953CAF23954D0A0C59DDE1C74651A4ACB3D38148F5ACA07C2891A8086C8D5BC8B4B34C7F8BA4F63F313FDFE3C40F74EBE48BE5379B8441BE37F54A810F0809E5CB8742DA8A3BEFA52F749DD6C3296B777E4CC1D6B22810E21B72B7A00E169519627C6BDA77DC9559B87E64282C0045EA13F1FE62E53FB0BAFDAFB0B7C1A2B8105318CDC10A559C32206EA85A79CFDA54F363975B65F91DC2D42F0F02922768E9ECE2789F1FF71486F9B5D7F56104FCF5DEE191D666171222BF47F73E69904168EE565A634B970CE57032B6394BEF82E78A807805F4C39C5D64A29B7135584368 -MD = 159DEB2B2ED972B6E8C0FED7F9AECD6D93487B563234C17A104B5AA3868F34B8 - -Len = 1806 -Msg = 30D48650BBDA8EC79A0DD891FD707160A3C5E16CBE1207330F170A5850E8364C6019325A8FF4AFC809F144C118D7012D315B3F4622268FB5F6F350BB5D0048924FBB30A5390CC5DE60F264E183B90F2D38A1E499DD8CD4B06C3C57A70A612604D2F4E937ACB4E23F02C7FCFB73CC87684ED61C70A98A2B3BBE2181FA14879A36EC965229D73DC1E2743BDD285B12A75B924130D630CC2F02D917209AF4775E01B5446FF76D12A2108621D900D7495CBDCFAA64A781A3C33A6BD61653D61BD0DEE7781796404492099CF850B74F5FE86E0C385D5C314B5FD209E8FF990FD76BDE8F18 -MD = 0945D546CD730BFEE479B8AC733FE54C24858BF59CC67569BFEC59C64C50D081 - -Len = 1807 -Msg = 37FF7F5AC736908E07CE01969410B314A031372CB1D184FD683C2FC43A30678B2C3DDD92F040A89D5E3F1D5247DD9FAA9EFB501CFF4F40014EF6508DFC37D410AA679EA3D3D0545189408167C1CB6826F97615BC27FCBAC7DBE5547A721FB92181F037B4CBC63D4609D2001727BA88C7ED78F3B3A50E0EC4505DA4D9BBF6D3C5F854D90128C2106E8F1B4D81C33F67FF804B080EA79285904F4AA71B78F71A8B01E6E728DD55C294E86A0E1FEF0915C1AEA1523DF5B15AEC8874AEDF60CD8F2B26B746A3CAF4A9E60CED23861DD5444128187ACAD282F076C1AE01EC7883AD417BC4 -MD = 7E93BACD92E79A0D2372D6CB9ACFB1F049142C7833BD9EF46B552612CB989A5B - -Len = 1808 -Msg = EACD07971CFF9B9939903F8C1D8CBB5D4DB1B548A85D04E037514A583604E787F32992BF2111B97AC5E8A938233552731321522AB5E8583561260B7D13EBEEF785B23A41FD8576A6DA764A8ED6D822D4957A545D5244756C18AA80E1AAD4D1F9C20D259DEE1711E2CC8FD013169FB7CC4CE38B362F8E0936AE9198B7E838DCEA4F7A5B9429BB3F6BBCF2DC92565E3676C1C5E6EB3DD2A0F86AA23EDD3D0891F197447692794B3DFA269611AD97F72B795602B4FDB198F3FD3EB41B415064256E345E8D8C51C555DC8A21904A9B0F1AD0EFFAB7786AAC2DA3B196507E9F33CA356427 -MD = C339904EC865F24FB3F88F142A8786D770934E006EAEDDBF45ACBB6B38431021 - -Len = 1809 -Msg = C3166574DCF055139638158B619D5E8A424330DE6518B1B452E359EB4AA5DC5EB051FF8A778305871482BF5AF417A5B9540B9DBDBF5B67FAFABE2B3BEAC0479E236ED078A5D514BE7DFA179667451609EC25C6F89A629A2C55258164ECB8374E91E75649D3713BA757CA92C7E744D4FF66B653679F77CFB3A007467E802701DA3D2DCBAB7E3CD9132061A79F50BBA74359EEF864ACEC727A11114687C35C5605B6B8587B9A57C2C0AF5FC9BB8547A0F5E3327174048576B0D970DF5CD54CEB67569361A1F81329AF65FA370AAFDC05453FCEBC9003FF8AFD9527D4D7EE619E35D2B780 -MD = 662CDE2F6F71FBD09C5971048D24155639DE349E5A2A01DA315D427BB0808F11 - -Len = 1810 -Msg = 56CF4692BCFA741A977A5B7637842054E6DE09EB578CFF84F6E5F5A8CDF06F85E535B35C6E27BEF83228133B58981752B855CB789A8CF41ED956C3C8CED7AE8BA913F41E6A930ED8801C27FD28141EDF70D76AA99DF34E0A2B585A22CC66A60679640BA012668D5B0F1F6D14E160C6490F3B609CC1D34E7A819AA5A65DAE440C97CB68B6CC803D4FDD298C0927B42DE9F3BAE2DA2C9A455E1BFD8D6A004D594318557EB28C0659C1BE67F539C79F0E915834739B3C8EE6B1F4F2B3E7E708EFA4F952210701CA055425EC7726A585233145CB881187F2A3517D0C15CC788E49B13870C0 -MD = F25D19A77C2DDEF76E4CC02F9757B4AF7A3D17F6B812D90C830EA342A57DC827 - -Len = 1811 -Msg = 26276D9B2F77FA3C271F2751245817DBCF869BB0C43C5E64C10800A438C8B37463DA85AB4F64C267BD4E29CD36D53B27D41FD3049FB430C7BB5A975675424D277BECF1872F85A08FC6E86ECD21140876B233F5D29325B578662333DCB18B16394C5183FFA25FEB71FA74709EA089B7D70D6C9495D347288D69DE56CCBF1936F2E96F34B1895E275CA531081EB5719B8B58154A09A2F8ED0C8CED5C76BA3CFD8ECD799447706E8CF3B10F8FFB0AE3A653A6273478079815FF9DAAF2D14F0024AD43DB447B41B28C35C08B7A2405C82581000F3C317DEB6412159CFD4BDF201D0F1A13A0 -MD = D13B7E74D4A1E54DF85C17D7CFAE011657349EC4F0F9DD27B7790BA8C477DAEC - -Len = 1812 -Msg = B85BE89EB4D326C87509C30ACC237B17A04D9AB91C1F29949C19F300B7385A5C248AC36D3098EC7254CAF61ED0A9F0F9A6E05DF510A88D38E9BE6981746F43589AAEAEA8FA5311F57942597BD048222EF1F490D818D162092796863ADEE21E25521ACEFA7E757E02B42F4A2134E1D69929D5BEA7ED5C33798F6DB7C479B6D11D085C00A0B00F650ADF38B56FC8895739B5F7E5F475659F08F35244189622B0D9634F390FA84C5EF41162C6E330C04137F1F4EF16BBF76AAF1B99E5E3823242CFF278E8140F350E04F71571C7E94647A8446DDD6AB32FDD16D25ACCB7323FFE7D5857E0 -MD = 1467910890A4A58DBF34095EE3E4EA24B926C2A8BCB26DDDA1D475669C45BE90 - -Len = 1813 -Msg = FBE6F14FF1D32FAFE0BFD62E3B16724B8193F83BD3A4F8ADFD89A3FBFF74D2BC5D2933A671C1B1ACD08E1EEC94C4824F6C591259E6A7418F39B6AE225C78B0DB5B95249DDFEAE8D61B3B8D97795CCAF47A19BBC4AAB6BD563CB82854D0E0BF63A60BE398546DB66893F1DF6751F3089EA3820541001878819A7522050A6F2C9C3C75474F5FFDA0CD119CF01CA322616178B3ADEDB432D8EFFAFF881E3FB08C5FF0149CCB1573B496EFDC20B38646740A0901875A7643857CBD49CF60935608ED6E1F72CA61FE6E48CA17BB060E34DDCCA119C7F257C2F66411DC3D679558F884706F28 -MD = 335F846AB42CBB8AD6AF3E5C50FD19A2A508E92D837DCE5784DE2FC01AE69088 - -Len = 1814 -Msg = 383D6998DF151E192BDB63C6E79DF5BAA9D7D7A55D895377CD6A0C2BA9A4325F9279AD1777E4A63BC48BCD651750FC2391BA52C35B8C3F83413608277888863668A8E3915286D6724B394C872F672C39CBBB37B9F9117DF638A828B87D97D303580A7537EC381B31F5DDE578B0D577F4BFED8D222A4FA26FFF77785A0F0C44B21939A768BD1140E642256C9A0226A355F06BA02662704EA757E6FB9DAA9338B865A0325A158A4C17FC7D9C0028745BFF71B244CD8AB1DFA55D9F979450834E2E98E95961786253B07BACEDC6E1249FD0125445607091F5CDBEEFBBBC1776D43BD7DA7C -MD = C03B4B834AD5DCC39462909C8EE42985ED03F2BE698680FD5C72F9D7D7EA3C69 - -Len = 1815 -Msg = CCFA0CB8A230E9E9FF0C09FAD375CFAC5E815A4CE1EF6FB81B6E37BB199559C09DACDFA913DE0FCDD0B3628C09A9F488C846AF0D43DB7A4D2AA79445C7E6A6FA7143B0B62299C8BE6F04F9E34E8DD30C63E782B3D27D2EE4ED1CB75468A7BA4F66B061C3DF16587E208A6F3A2F260983941271C3CA7953EB4B7F0E8E4C8BE1827C652B1DBC48CEEA4FB39F0B0FD6BFDE38E273B75E6DF8509E5093A6C9E1DF9DB370C6E6F57970D718F8B934AD02D0E27C31282D1C90E9AFBBFCE8053A862587A3092FA400F6CC70C8D2C47678B40A4BCA21A1E881895717FE6A2962A332A89B7BF2FE -MD = D5E10EB9D8686758CBE9024769EDDD8547F7EBBBDEAD2814484DE7A080DECA14 - -Len = 1816 -Msg = 23AC4E9A42C6EF45C3336CE6DFC2FF7DE8884CD23DC912FEF0F7756C09D335C189F3AD3A23697ABDA851A81881A0C8CCAFC980AB2C702564C2BE15FE4C4B9F10DFB2248D0D0CB2E2887FD4598A1D4ACDA897944A2FFC580FF92719C95CF2AA42DC584674CB5A9BC5765B9D6DDF5789791D15F8DD925AA12BFFAFBCE60827B490BB7DF3DDA6F2A143C8BF96ABC903D83D59A791E2D62814A89B8080A28060568CF24A80AE61179FE84E0FFAD00388178CB6A617D37EFD54CC01970A4A41D1A8D3DDCE46EDBBA4AB7C90AD565398D376F431189CE8C1C33E132FEAE6A8CD17A61C630012 -MD = 4CA8B7FEBDF0A8062E9B76185CF4165071BB30928C18F14338C305626789C6D3 - -Len = 1817 -Msg = A77640D2D35F23FEF37D6F971F5AF60A63763E74ECABF3AB5393AB48793C0B8B25433B4ABF21CE1C5F22A8D2386FE9D7AB860E6331938283D2833A6D0390D29BBEEFB32C2805EDAFAB62F01B38899404A386DBA844B93EC6D70DDB3BB2543B41E3C32861769A27D020EACE26EAAB0AFE700D1771E77E71105812079E77B7454A9D9D3F449CBC4A68A0DB6E961932371B39318CADCD025B6F477B7CA85AA86FF6465669EB79647C850EB856B57E5B16AD90E5EC8C710B4C9F45BF02331A72968D86DD938091C4475CF88D31CCB41389CFEAFF34A7809B86D140B11FAC7DE185A40F88C180 -MD = 8AF26EBBBBEA9AD620B5F9739FB82FC62A53DF473BCD9CE3C1FC41BEF4209A1D - -Len = 1818 -Msg = 53EC7B6F97B359A2263D6040F3260CA95752B7D291A962C47BB982B6774CE13ADAD766E030ED85C982F166B0AACF9BBD0F51BC0AC322FC6F65E46D591BF86CD7F152975EB03CA48F0075F0D06F1EC205B42BC0A6D25B111BC475515CB91F4D988B1FE94DD1D5721B8CEB73DE17978DA68768843D44D6B02032E9D51F1DF2CEA5FC1DFCDD0830EBFA03A145E0A794E7EAD3D2B322FDC1DD6C6F135CCA1E73DBDD42598BC0C78299C6EAE2DCD675538F96CA9643F70B094165786B98B96339DB327532B84D789CAEC650973BF105A35465B8BA69B44DC991EB66C2C29139537066FE846380 -MD = 413BE82F18F34CF8E74529C15CD40F3AF1EC91C2780766E1083B552F931EA76A - -Len = 1819 -Msg = 9D4DF0D98116F5F8BDFBBF3FD3AE80B980EC6BB9AA27D05CCB8EBAB8D7E5792C62E5F2587703F74F51F9C94AFE7984E756A5910397827E0F3A86076E2794DA28499F301F251854A0FD444D3BF201BBB50C4761E61FFA99CD21F43DE1F6E059BDCFB7D0E216257B55EED61BF5172542D51F9AD264DCD1A89D473CA615BD6528FA5BF330E5EFF67B5C995741BBE1B3721B832003C17488FEF20FAAA29B57E27DB7B8C27792CC0A9D8BECBC0660F52EF67EE6BA3369B1B1681B84747CAA4BD730A6A1B246FBE0C14140E0A3406D55258B8F1C851B181112F21183F7450F93215790CF6BB160 -MD = D6B91AABC996E0FA3F663EEEAEC32B57B4352A4A0EA1372CACF04003FF3BE456 - -Len = 1820 -Msg = F14B19040E8437EEBCCD46724A7A2461EDCBCE33184B017311FB3D5871A8D6A9FBA5B93100F28060ADE0A6D4B7CD5EA7C39E218174F1F8E237BB5D43B51F12176000EDA4D70A493B957657EEA9F742DBED3486CEF3901902BC4EF4A6BCE18A6EA2F27D7EB51D32E33E2CD928C5B1C31A5C1FCEE30BE01AC70CFAE540DE372CC176A1FAA63E354860971B595D2280387DE39FBB12E6399448121FD265FF47B5B95D84BBF871EE23080912A2C841EE86BF238D2533931BE9ED8C3B8B194D81A9C358DEF0BA28E01E3008C857DECCF0D1630789782D13A414849A292AFAEC50872A9B2767C0 -MD = 188D93348079F8D9C0AA8E21F21B4CEC754DF5300D5068188FDEE8F0681F2E53 - -Len = 1821 -Msg = CA663A31D8D4362E485F1359CCBD0B021EC94269F501F50FA6C4FC6B9AEA3BF94BF8AF5EF88CD81355002BC33D1938B4B3F3ABEBF6A4E0F47E63D6F41780C9A9028D6A99FC1194097A8DA3DCF8CFBE40A11B1887C88822B69815FE28E2F90D4FC09229D0015F0587656BFED67CE889F375045883D86B0341A76E2E027CFC621A67A8CAE74209FD5BBF12212902F36A9101E02AF83B82A28FA99AEBC367CD46F2B648AA34F497F5421770D62CA47C0F6127CF3C82E77CFA398DA87DF2AA9C99516745ACD0041D45C426BE97EE0757911931FD9E7E58E26EFAF438B812FF2E52E6D17F3210 -MD = 926C6BBB511B8A023A66B856985561DD222AF8F8BBB00C065B1987DE512D1092 - -Len = 1822 -Msg = 123F3665D10C6BE2668F87C7BA72F688E549B1A41D097F75496DE8AAAFECECF890D8EF3F4D130B0F4A9E0BF46B29AF25E7F0592F7EC179CE94151800E701AEAE9DE620D625D03B12EA8ECFCB37969493708BB85E536F5E16D37F0CD06EF861945492A828F345528407F457C02B3D60D3BCB4F49AEABDEA5392FC5CC94A97E7A7B41B1893EA99BB80D22D1346279717647ECF6AE2311561E834E5D112F3540CC880E9AA0F582C64667E8CB4AD6D5C04BE1557F6A0A56E2A371456499B8D84717E0510C11AB67CDB756783775F6B9EC11F5925981BB5D4DB7E35131679E55478DE329D3A68 -MD = 0DC75E1F214E002C0E7BF44460EC0F8EC69D2DA8C4743D19356969FF44E27537 - -Len = 1823 -Msg = 402643679D796742D356236A01DAA1AAADA71F66D90B79C1CC220FB33312650A938A948980B6D2B5DDEA9122547BCEFBF6D165E29C8656A5A3FE55FCE33CC96AD45B98CC34D6F81B54CA7205182D623F7A86E83043C2F4B58A8D129D713D5F41A5465C9B695B2100A6369D57C34B33E2578C313EDE53ADE7C2DE3A75095D1DE9BA629E2E3B90062908E691CD94B5D240E65837CE476E137ECE7B7818579AF7FC4B1E10513BEB176A1BD253EB80C22BA8C60C1A1C5EC316EBEA8828202024A543D289DFAFC4DBF1667416D4CA5AB8D6E42D0C1E9C9B2B40751D20ED4A4FF7E2F90784EC60 -MD = 0EE2CB120041D5DFCA3E1D8817E665896223C0959FB02EF077D9DCDAA9CD565B - -Len = 1824 -Msg = 0172DF732282C9D488669C358E3492260CBE91C95CFBC1E3FEA6C4B0EC129B45F242ACE09F152FC6234E1BEE8AAB8CD56E8B486E1DCBA9C05407C2F95DA8D8F1C0AF78EE2ED82A3A79EC0CB0709396EE62AADB84F8A4EE8A7CCCA3C1EE84E302A09EA802204AFECF04097E67D0F8E8A9D2651126C0A598A37081E42D168B0AE8A71951C524259E4E2054E535B779679BDADE566FE55700858618E626B4A0FAF895BCCE9011504A49E05FD56127EAE3D1F8917AFB548ECADABDA1020111FEC9314C413498A360B08640549A22CB23C731ACE743252A8227A0D2689D4C6001606678DFB921 -MD = 23D2614420859B2F13AC084453DD35C33FE47C894DD50C087FD1653FCAEEA00B - -Len = 1825 -Msg = 26BD6C97E9E30DB3DB590A76835E02AA4BB89990A51C76F4F91B7A0B2AB6FE1C02AAA8863B4B3674F9DEA77050C6CB545AC5EAB25D1AAFC430528CCF416F1FA1A8EF34A3797E005877D37AAD7A0D849EB4A6CF080E0DF10EB2D33CAD7F5653CE49177DE297119961A3C6A9AF7557CB33BAC84441DB417B5342C2F92E8DFD1BCC93D2653BAB8870D1EDC19033E9CBFACFD107FAF39156F1B54B41F703B3168F018A81E2E1F4E99B75BC2C1E769E283F2FBA11DC253C6630375EF425D4BEEB51F572C060767C85BBE9588B296056008F095E1EA46F875CBE22C984B85B309930BEA70890E680 -MD = 306488EBF206D436E615F448F5F273C3F4A1AE6016C6D207FA9472AAE80436C1 - -Len = 1826 -Msg = 5C834FEB24D7F670BEEB8B67568DC79253100E1BD7EF2C828D6CFC22039BF49F845C25546EDB592C398CA3F81CAD9D2750573822A72D60F23234B010C5D540E0A144CC05E85AD2B78EFFB7E01A538E8CD9F9E331DB6B88664D95846C32F8022AA774793DE2C28431B798B6601B10414F1BD4F5BF2E8D8D8A1468E7258EF6E2989E76814605CA6D26C2B43E3CE73674421EB27A4401324FD7B5C64C70826F67DBA8262D53FF8D6E7EF03DF2C2CFFF2D567A31603F839BC5375476383C051912885B39D652B3306CBEC139ECBDEAA32C0F3A5D628FA121D29F3D24EDBBAF501AEB0AC6A1DC40 -MD = F7DB8CB83EC60656D3DC47FB27CF3687E5817D89A860E6A287655707AEE6D4F0 - -Len = 1827 -Msg = 89DD51714894F40D6736792CE595850AB69C8031ACC48B986FF0556DDBFB26EC1A8D28087023042AF29DAD8D026FF0A6A1A281EDCD5CBF708A9A8487F706897F9EC68282C01046145B8ECE4B47D062EB69E9DF4EF9B45F9A557E035F6332D987693D4387CC4B665476BF058E9B33CD20503E1FEA00B8A302338E5EB2676A3B1B4A4A25E4168EBECE4CD5ED2B84B00656795D2089FA8F92EBA0AF2A5C705091F781D49B24577197A3025A52CC7B6D01AC1A3B28E60CE8FDD9940D46624FC8A7AE159E54124490FFAAC2B5E6D8F2F0088FA17ECA432E0F701D87A444D289403B974F68F780C0 -MD = 977E94AF56633F57915B7B1512D54D370C0B09A21766D858A31FECED8EAADC90 - -Len = 1828 -Msg = CDDD2E9A96131C7E3A1AECFA200B414908370D1406E2240F257228028F556DF1043E10DF7900063D19B239DE71926512FCA45FA43FDC2ED73C1D4B96C1D305C70ABC09296BC6B80079FB84A6E544ED27DE2BBF1B2799360264858C661F331CB5B01B355BE13AE25F0BC87178AFC650621235DA7AF715D8E4D8DBACF693CA0F8C59105E9B5F457B600BD8452F42571FE3CD658F9F3C55B652A627983A5A150BD8259316D39FB1EF768DF2C3316C249B776A912035F7BBCA1D77C1920BA72EEFCB80933359E0D785C5CBA4B40CAB791B08CDC58FCDDFD30623DC3D9B6D53C7FBAF2054C977D0 -MD = 218D0E67892F9A096163141D8E5A99EBAEB6844C8C7860D4993DC7166271F0E1 - -Len = 1829 -Msg = 7598D75D07175436BA21F3CFC27DDA119096C793740DCAF11978B785150CEFE010CDBA27C4AFA5798F58D689E639D2B8CEECAE84EDE6599C00FCE4541A3E0F5B2B72C65EF0C576BC479325F761D8713161CCD4EA27302EA53CC4113EAFD94ADCE60CB8C4E3546538578EB28F2116B32E92961D5CD08012CB890B5EE0BD4D7DBD667B5D988E8566AFF6675F57433D40E6547D7280BDE4C5E44A4FF442C6C9AE8AA37D197B2416A6BED8422690A6D2091442E5E90F5E3EC5A7D7E89E4581189293C6CFCE1ECD667F792521752D0D785E7A767B55252F02E8A9A4342E084943A3FE1EE9366310 -MD = 6616C517E53D08E82B11823198B6FA901657C5FE5047A5A60F7B103D51A974FB - -Len = 1830 -Msg = 5663593146BD2856F9206D81F0F64E10905F69BF1DEE07B1EA4547E1644402FC338C5C92697859653A7F09456EA10A846A5B0940B547828C666521BA4339C93F6A1AD58A44E32F34B5C7E904D6778D1F529A0C5905E9D0E4385B3F08D096EDF0DFEA1EECCBB67BF8B935A8B4E182C36DC2D69F6090F1FB6D18E6883C9772452A4EA5130EB277B84782E190CF03FD4E7D88B050AD2AB22C9D31B34D6A6A202BBBFDA8F0B61C7B665D920654FDF79655CA37490A6442A69F8BB33EC128FBDF992A95FAB380E3CB8E6EEC89D41950F9F645FACA86489F5D24D2CE86E4D554685E62A7567D7A58 -MD = 04D237A3C75305A974F1054CCA88D3651739991D206BD0DEEB057297F30F4E65 - -Len = 1831 -Msg = B38CE3DD3F6A1C6ADABE07481F8BC37378BFBFDE6562D5CAE1F65EC787A70FA381033C163F944FDA956DD2DE1CE94AF1B1726691B61CFB32116F2D5428BF128F3B673444D73CA3DFCC323DAE946C036A15BC1BC1799C42EB970DE6235B336B5F10AA568547E11D93E873DF1F318381327BF0993FF9302952EB86C258C461DA3DD7C649390BB0703A2EFD82F6DEC8B08C541C925EF75ACEE45BB11A4ADCB321B0463119A409CE65CB9EAE75AE8D5BFCAD3EA54BD5A960A522E740620D8A2B07E71BFA14B0003A50AE4DC73C50DA7C6F2C438AFC5E5B51E3608EEEC16B443A439D9C8FA2DB98 -MD = 65893C788DC7FCE090F5C295882132AC206AE26C5091014F338DF33D4DE40CBD - -Len = 1832 -Msg = 3875B9240CF3E0A8B59C658540F26A701CF188496E2C2174788B126FD29402D6A75453BA0635284D08835F40051A2A9683DC92AFB9383719191231170379BA6F4ADC816FECBB0F9C446B785BF520796841E58878B73C58D3EBB097CE4761FDEABE15DE2F319DFBAF1742CDEB389559C788131A6793E193856661376C81CE9568DA19AA6925B47FFD77A43C7A0E758C37D69254909FF0FBD415EF8EB937BCD49F91468B49974C07DC819ABD67395DB0E05874FF83DDDAB895344ABD0E7111B2DF9E58D76D85AD98106B36295826BE04D435615595605E4B4BB824B33C4AFEB5E7BB0D19F909 -MD = 5590BB75247D7CD0B35620F0062B90FFB2A24DE41220ED629D9E9A7ABCADFB51 - -Len = 1833 -Msg = 7AAF064B8FA13BB2955744B2E18F0AD1E799850D68236B45FB62A3AA11717936FE42E5722E30397A7474D3C551A290979DDA5127E51A27B7EADC7D7A2EB563B6882DE50D3391FB17D96B74AAA1A5EFA27B1B98FEEDA557385C0CFC69EC680D0EDA5D4104658BC9835B714968208091D1DE0FE4082DB62F6C10CA62757948A83BB507B0159168A39349EEF2AEDEFC85755FDC402C6B44AD1655D8A9AA4D6EC1BF026508B41DF0527333C96ECB91C2C626A23C18C9C61CC32320009B895F6F2C363197119F41EA858B23A377A548802A6147E852B5C8AA008711AA6CB78F1C6F2EC8BA270CAE00 -MD = DA26F0FF71637386EE925A2AEB3E31127DEC36E222DCCC7285BFC1DE09A29477 - -Len = 1834 -Msg = ED1CC805A521D45C409965AA7A564CD5DCC0A27891008B296CEA8683BDAD85A9C35E6925AFAC9DCE2A7E33F47C5E6BF9D8EBC7ACF035BE05F38330DBA1770C58087412ECA4FC41FD0004BED47C31521F17DD592E5638272E3ADDFA237D3B497518502DD3130EFC9C9D77158228AA671B4105E07F8D6002043BC99E956F15DF49A9781C8209F68810698A6DD22DE1D5095283B0A97015F73E4707289D9C1236789E3D9E9EF6BF3B1FA5994AE21A51BB10E8DB3CA5879A7EFFD3E9FC01C81CEF0BBF332F44892E2A509E02EFA417B39B8046163CA49E4D310522AED1874184DEC4F2AFD9AEBC80 -MD = 6745E3FAAF4F8BD08EE428DB7BCE16A72854E200CEAA4FCC7576D46E2802CD58 - -Len = 1835 -Msg = CF68D10756BD67D4BB27D278DBD54353FD1CFD416AF8957B66982247AAFC7F95AF90D0746150994EE72CBEC0F1AB55D3295D4EB59CAA48A49A6221ED63C17A436AF243EDAA4CFC0CFC8AEDB3395514DA8F92FD4696C0251D69B622509C7DF56740C9C3B938E044FA5FC0182A3EA9CCCD3843E5ECC75227ECF305F5063338AB7B73872C288DA65E7F04D7FCBC5BC14FEEF432ED780C55D2DFCABD65E6D95C8ACA350886C6514AA33574645B8ADA868FD7DF75F81A3AC75FDE093BEE15D8C9CD01AFD8731C1FB87F12E845FEA2FCFD5AD961D46C6A7BD033380A92D158F727DE24C8D6D7A4A140 -MD = DFBC0CDAB13028BCF40B17DF54DA6C15A3471327FF564C8C10813F5987F0A798 - -Len = 1836 -Msg = 06C383F828F6D58D1F99567DC5AAB7BBB7F8B9F0DC941CEB0938C0C1367DDEA5F03CEF432C4BACFF10E314E3B66EC473EA6D238D86BFB2DC83FB744E1B63618FC0B72380942AFD0919A3CE11F9F5F781402A14A00FAFD0C79CC516E74058963411E5D3C59B8D8C87AD916737F4C216B9B28F39FEDFECAA3657C1B284CA7AC897B85CF6FE72DF44E0629EA2C61D8E4C0FC1460002D7F1131339DEDD78CB8235767B64E7417B06E13577D02A94D9350EF66A5C12553E56B7840D0569D4E5A5928050C9A738F9ADB557671848C58A504F63146B946938935C76C28264F675F462C7D76E95FFC1B0 -MD = F0A9F96DB49ED8CA2FE36A0B0A377E718330D8C537BAB046570781FD6D3C6B05 - -Len = 1837 -Msg = 27C482CF399044DB05B251DCF9D8A788C0CC214DCF7451EDB9D2423A13BA32B6447D17825AE67ECB70EEA8B182B14FED66D2F1179B4ED66F53C56CE0C679598C09589A4B8FC1C3E42A0091FFFD4B4C464763FFFB1ABFB7DC49337C46C097027CF3BC5B14B34E590E17A2C4059E50971DF2DE66E2E714E5834BE769371DBD56107C30BAAE1438E02AD5F825A4B690D8477311871AAF7C5B4C540C0C3B296F724668862AC9144849BDF18FEAF17DF98246B5BA88C929C940EDC42EE9116F7656F1E2B40385F9B05DAB23243014FB122967B97B8CFDC369478866E57CC8D98949DE41D8835A1148 -MD = A120FA3640BC0C148A1D22873DAA68EAB217BE55CFAFD70030B70D2160C9C3B8 - -Len = 1838 -Msg = 3F06A9590EBDD717DC6150AB4A4EA1904BCE033B78C8D437C013D78B6D147BCFD8557298E44E11A6E1C82986F626092F435278DF0212DAD2AEADC09CB84926C74441ABEA04E3F0095876BB4D6463A9448B775B082B5D7F0B3AF0DAEEB9786A3D404D16C2DE8DB319B34D496B5E03C30608A171FD180E7D32A0F496AD0903997183BCAA62A57FC6450098D480B7A3F8BB7329528A1D4358B2520828BB7C3DA65577406A4C241F39461C6F03D22C054A9E736F4ACBD6916B254C7145CF73347A024B418D8801236EC61C74955345F6BBA944D8C8135B594220C104C95FE85C9BD187505041176C -MD = 3278BD9C69478C70A3EF15750136311A38EF210F8CA874C670E4D926E59871D6 - -Len = 1839 -Msg = A8A9555BC035CA2CDA773CD7C01159FD6EE4CCF03C3E43C565CE85C88A842B14C765991FBB424F01B53F7157D413F5E7D3CBC0C9B084F6205E9815432C0B83B116E1714FCF9E20C07111C3C202EBE068D4D4B6B163E42D2922B9C36BD32BCC768C10489FCEFAF472D1E160FC7C5726A89F32E0632D15679972EAFCAA4C8AD48DB3C4DBC42FCA6B12B6979CB12C72F22BA5056A12AA99CECB65A3958AB8F66920818D6DB0FF34AA8BE45739BE1FE9C991819DBC896A078DB828641F5736858BDF0ABBB3CB786C49045028F8BE1C836E8E88DE775D93ED42914AF9C7AD38091A41485B155DBAF4 -MD = E8140EB3DE6BB4BE8529C9C3FA18D2584BCA1678AC4A144F960C7FC168C266E8 - -Len = 1840 -Msg = 747CC1A59FEFBA94A9C75BA866C30DC5C1CB0C0F8E9361D98484956DD5D1A40F6184AFBE3DAC9F76028D1CAECCFBF69199C6CE2B4C092A3F4D2A56FE5A33A00757F4D7DEE5DFB0524311A97AE0668A47971B95766E2F6DD48C3F57841F91F04A00AD5EA70F2D479A2620DC5CD78EAAB3A3B011719B7E78D19DDF70D9423798AF77517EBC55392FCD01FC600D8D466B9E7A7A85BF33F9CC5419E9BD874DDFD60981150DDAF8D7FEBAA4374F0872A5628D318000311E2F5655365AD4D407C20E5C04DF17A222E7DEEC79C5AB1116D8572F91CD06E1CCC7CED53736FC867FD49ECEBE6BF8082E8A -MD = E5932441B012E503B0B0C6104703BA02613E472AD65655C085B0ADB07656B28F - -Len = 1841 -Msg = 133F3DC8F20A325DB666A5F7D9D66468C052553A9F32AD1394A2B8CB1B952872B6920B8E34EEC5A34CD64C019948CA219826CD8A5511D3458EDCCE0537E30594ED4CB6BA4253B793B9416A8634327C743D7BC81E601A09097647B3AE0A215939184AA82856FE0F8A6F03E844BC38208722756AE0AA8FEDC14D91DD46E2D367779BC302D4960E80FD8851AEB8629D6A6D10F5A85161C3CE21E83CDC91100B18B39F9CC5EC6B90B883877FEEA50A5FF5B7E2C66943102187BD71069022D7218367D10237119ADC218B261DB11B3B31C3DFB76D87E5569D397462CE9A888D047BA3924C2E3F955F00 -MD = BA9CAA01631B9FB9C332574A088EE80985F9D08F09DCF16423834B87544FE5C3 - -Len = 1842 -Msg = 7691632F35A0F8EA7E14D97B4F782FB51902A0BA5188E09551E979496011C62AEE48687E1DD9895703205B8EAD514FE531D9C44D64B3DEDAB2BED907FB07EAE2511838B38F1184BDFF60FED005C5A520869030F76E15A7C3F890B5D35803F8FD348DE11ED20BC0EE231DC208DF079AB03B3923D765DD94EE48B0BF604AF1E8567BD31576D7C221C6EFDC8E17A02B914A0D442D81FD1576F840C511D1712D1089BF465E54A358BC1AEE706CCB539EE55BE1E9250A7B32EDC5821BFB41D6B8257BDF98CF5C83CD0266C65073EFA88BABCFFB23F0C50D64B1ADF4E841140BA8D178CC9CA3C6DC1900 -MD = 4CE21378DC030CA4C17C4F0622AE455CEA53C3344B2DA189901CA3C72AF59C68 - -Len = 1843 -Msg = B1268A9996DE08A4B261958C314BE9FEF0A7234DA9EF1A84C330289FFD3D4C185DA8BE58560450F026DC2F71502F2A0E238BBC6772F51FA12E9059323ECF5DBDFE9DFB273719C63E68B1E799FF107F7DAB82EC9B60705DDB2CA9EAB37FB0E45DE36F58E4D3E6382CA5FFE8D16A57C27E8C34698D27DDBB3A28F6AB805C800CF7B6D7A38939F49DC33D2046EC0CBA8F47D96F8BFC17FF77039E5C6A32BDC9455A3F3D835E3F21B9D2116AC6F6729CA5EAA85EBF5B46EE23D2C55C4C447AE5AD7672E18DBF95E53AC1FF933611F2ECD728019688CFB266AE775445B036B364656286ACF50A12FA60 -MD = ED8B45F0541DD8725692D6FFCF5C62CE51A8C875058F37BA5834D088F4FF019D - -Len = 1844 -Msg = F6FA29C1E172DCF3238DE51B812EA3A94CBD505C5E8A7227E6A6A93E26275C9DA60A90A609D8F0DE42995870519B0A159B4042D44935A279976048C8F6636785DA95CB0FE908E7A915756BBD753CFCE8F7F72F2A42CB096D5D217F7C3084D7E45C6E54B333FFD1B35F95B748160FCE480F6E12033F6F368095ACE612766D49BB91871604C0F91EFF86AB0F0F943838823B104471C2F6229FD12C2B48F67CF7CABFA0D7BEEAFAD1D06B691D063D1C23D286F327A66A154AEE0308A44E05C94BCADF2103C2CFADD0EE48E3C793F3BB2CFC163190B573C489EE580D231F1D0ABE1B42DC9D1AE9D100 -MD = 78619F9C029DE69738F8046187186529D3DE415A93C0C9A656F067C7AE40D8E6 - -Len = 1845 -Msg = 927D50017CC3FBC15A5F5430E4F5ED97872FCD5E8DB5295EB2FBE7D3137EF7FC454A499B09F733402AF972E13E4E24B42D5F7037550A80A4080051483B00CA5EC796D4DCA3ACC32509990ED14FF32EE4A38BEBEEC34EB49CA4882041A1FC72EE2207977DA9C0DFD9689EE039F5AA9FDD37BA789DDEE2E94E4B93E896F71699C46BA45C9AD29C6351318292AA3707BA47DC2AA1FFF1C112E18CCB0886D1BCF306A0D7599C810D02A9A1FB181615CDC818E36B219F83791F89C976B3673260579986BFB4FF99FF7089BFAEEB1345B4F49802B6CCEC7F4806DC6C93E77AEC16F6950C88417EC62070 -MD = B8C1D7EBCEB911930BC265BBE88CDBC59EDB91995C44350D5AA33A037F021D65 - -Len = 1846 -Msg = 29BF8670CC82FAFD3FD81D1EAEC1B312C4F6F56D444275DCC396BBE88942E4D646920181235EDA860987824BD9D925187CCD864E602241759F17AAE0B3E4132D14808499425B93C5041E2A053BA742C1423CAD030FA29E28B96A52CF1468238E783640637C169F27F02990D1E243A2A6E967E038F1D455A39A47DCF28F7EC7151DA0ED58166AEE613C1C759E0CD99076CCF6B4B7A7775F207187AEB15E288E3DBA49024D56A91EC65812F7A113F0EDF2ED7F50013874A1320A2A86E67EB5B3FCD12AE0B0860ACCEDE9DFA7427914374956DFA2AD4619664F829B2C59038EF54A7AF0B94974C644 -MD = 20A49A144970CB73D723466840D46A16E4D16361DAFFA425F9DE8B307E120469 - -Len = 1847 -Msg = 2A4DDEDD34CAAC49ADA033A9695DD6A97722941E4B79F03F55B367EB6DEECF372CAF3D96E28125B4C43EEDCE9F2D22F407F250D5E7CC29FD24E800CFEFCA6DE46147F7BDC3AF25878C6D04BE42B50B47B767FE03779153AE14B88BF95465CADAE27FA15BE654DF88ABD6B4A275A3B51764D64F4D9A8A0DC1DC0320A1592ED2E867ED9F15E2EDF8DFC28110ED52749B5A7B5D4CB307A13E19694F2EFED47EE974568858D6DCA09DC936AAA24D7B8A16969EC54352BC495BD67963DDEDF57D5E7D8131CBA5DCAE5D08C663D35B05605638E6FB091F483817995268DAEC4004A3451711E5C66B3640 -MD = 663257D17EDD4C9199241DDAE1D2506234CF2D31E55AD37056A233E8FD43F67C - -Len = 1848 -Msg = 57AF971FCCAEC97435DC2EC9EF0429BCEDC6B647729EA168858A6E49AC1071E706F4A5A645CA14E8C7746D65511620682C906C8B86EC901F3DDED4167B3F00B06CBFAC6AEE3728051B3E5FF10B4F9ED8BD0B8DA94303C833755B3CA3AEDDF0B54BC8D6632138B5D25BAB03D17B3458A9D782108006F5BB7DE75B5C0BA854B423D8BB801E701E99DC4FEAAD59BC1C7112453B04D33EA3635639FB802C73C2B71D58A56BBD671B18FE34ED2E3DCA38827D63FDB1D4FB3285405004B2B3E26081A8FF08CD6D2B08F8E7B7E90A2AB1ED7A41B1D0128522C2F8BFF56A7FE67969422CE839A9D4608F03 -MD = 21C0D84EB7B61774F97DB5D9ACF1DFFAFB662C01ED291A442BEC6F14D1334699 - -Len = 1849 -Msg = C1783FB7FC7DB5B8EBF9A0357442BB99233369A73B0749F33C50136FCFE2479C2FC94ED87A6AA019EFAA119A2305668E116517BE31A4DF84C44B672918999C198CDFCC0AAEC695182AB1EFEFDDFB8EE2AE8C9FB981BFC69FC403C24ED7C17F564FAFCEA706AC3FC7DB4E3C08E2E488262E47EBDDE6461AFF5FBE876FB1EA5B764996B6B94CEDA388E6CE29724D6C9744A6EDFE1639138598FC5C579EED9A56FC5F68D8732DF2A4EF70FB272338BB096B16C6C12DD4B603DDE5CDD05C9686825F936EA6560D08788D35C6EF6AC44BE032F68029084B915BF007803A3B1F8E8D05C68DB8609C153480 -MD = 5C3963E7ECD492125F638B0F5370046754049DAB886F61DA9146E59201162473 - -Len = 1850 -Msg = 5FC6470564242C4BC6997B8D3CE0BE6BBF3C132A052FD3C78C6373B13031E576F6E7FEB36A848410E5E48228B0D6B18E0EB64423138A3425CDD50EBACA32D354442403B6D395CFA93E8B81C57FD074E8CC36698B5CB50932A8430AC24EB986DB1C9CE1F4CF2D71A79B4FBE65D393F0BE516C94EB471C256C6BE81A70E17081B5951F7C3CA5E84CC7270884F0A65A6B2BF8853914078C611BBF5A73FE89274ACA6DDCA94B970DE7CC88FF4911C825ADCBDABBD5CBE9A63644A2C15DF1935F4BA8A2AA5978149D5B8DD4B4D14EEE842DAE8BD5BA044B207C4795F872B4B219843C611A7E466F6BED40 -MD = B6D94D34BAA4D0AAF00280EF16AFDE9B562AD1BA23455A9B95C3F3797BCEC10D - -Len = 1851 -Msg = 0D6CA1C8C4E025937AD2C62FB841FC6AC14DBD6208A418C01FADB43DEE62CE03D70ABF8614F3F773C7ADDA7DED6EC569DB516FA7408F73A628C68AB4ABBCC0DAF9CF1EA313A8EB0D8239F3726D20ACC285B617FB3F04EB20AC6E7F588144498E40E4668D54BC7692F84F7DF2B4C2099AF34F077F2B46829D43DC5037FB3B1B144CE110E7753CE6CEC76CC01D848EF0C169068218DA9AE4EAC53D845CAF91C206B8A46B6F869C6890A09BBEF06DC65F1F63FDF1EC33C5DDC2FEAD36A24ECECD795A7ABDD3BC4051EA2B748391CD7637F1859B7A027906C2D8D922E2F20C99E110BFC67593B58568E0 -MD = 7D761270C602AE7C6EEBEAAB85A22BFB7CCD20FF4A3F3FF5D7FF5B3DC59CFB7E - -Len = 1852 -Msg = 9D68E842C8636C149AF7ABC5AC9FB685B69C872BEDAEC8765608A2A27454E4F13AF557A300DAE256835BBF4EF9256F2C9B5FEF61C51FA573F9DF26F4672AD4F97B25969AB60BA6CC5DF2449456F54F2F1ED8B4A5DD455A38BAAAB1C57C8B870C7C62F07575337B3EBEB78D0671213B22201A1F96BD82413D854C28EA3D043C5EA8AFD23D3217E9EA53B099859D5096985CBE655588F3F2E5B3A4BD6D8A12E8E930AA3EDA60A5EB3FCFC200BFF2A413C8E7D0919CC2B79F343CF792666CF9C3EFF4AB199428974C3EE7B48D48284A486D586E07CFB21FBDDD2C75B9ED90C33120D9469C0ED84A7150 -MD = DF4D24DCAE0AE8F12102C4F3262EBB83CBB8B90683E29BF775E4AA40FE4157D7 - -Len = 1853 -Msg = FC9FAA47BE421F49AD0BC84E7EE489268084C00592F45645A2CAFB817C7E33DD82005894FE333089EA8E5FE6DF3743A5A6C5CAFC3A86C3CBB4030BF743FFD944816A71EEF4FE45A357CD81A3E047C7CE8EC3B90E90AFA4BFC4FAA324A97D095A68EA070CCA14779E813733432A046F9393B08E614615A5C7B573A548349670F36F3DD69D3FA9F2228957CF4C81FF8F9A4BFB514B68D35F8E03A710577D6077C48D4B9947B1426BA5386F41D11DF6A560AFC4D5C030AB7C11E65BF2D5A2C7AACCFB05C1BE6CC7C9CE9A301CD4CBB7BA63A2BDC9FB2A71404B832C8FD2C9FA53DA520B4587EB80F610 -MD = 6B53963E74CFFA308ABA1A37DD4CDFFD0F530FAF50A340B557B84E8993D56A44 - -Len = 1854 -Msg = 30DFB1FF68E242E5C35344B6D5363F9BC0645FE35111DAB05357B0FD5F2AA4355D56D537D54A17B18DC56DEF90784ECAAF92CD67006C174BE4E232C773841E8ABA05B71D2A950568E2ADF766058744A6564D883DAFD123704DFAE1966E25A036ACB268B7547DE88534A5067411D55BEFDC0C9B98F27DA16977EDB972335D320B8954A0CD6F669AEB6764D271B6D2250F08B2DD17A537C6F6B46E1AA793C261C01056D081D48D939C70E8BD29B8697BDF8ED885D194C5874E329823457D85E0DAEE5589BCE1226B144D69544E790C8EAA77B3E771A5AE7A08E292D321304D5BD531B75E43E892EBBC -MD = B108862DF875D15AAE6A23880D00F0B7FB7DC301FA7CC31B324FE979C857B036 - -Len = 1855 -Msg = 8B8EE065F4F8E1E18C037F99F0657ADC659559676ABE160D0112EC4CDB58DAABFD58BC968CCF2BFCBF8CCF84670912515DBDEFD64ED0D35F7DAB9A21A7CE95EB0D285DD9DEF35C2825AE7C2999A6C099B5640D97979402E374C4B81E92302C24C33BF7FAC1660D04AE731250F6EA3CFF051606A5E0AF66EC669FB031310B278F673DA3B7DB78B521C0E81897D88C8C6EC7DE470C4F93C25350B381F5420CCBE2CCB56910919FFA1750D96738C3F80C2DE309889972616B31976A8E5D76CA26E111F2CCD34949BF3CAF5F682837EC02FF90981660CFFBE403C7619D2C38E764BC794463986B788AD2 -MD = 838F64832E71A53BCC62FBFBA418CFF956D88AE4848B1A312447934A776E8E3D - -Len = 1856 -Msg = 04E16DEDC1227902BAAF332D3D08923601BDD64F573FAA1BB7201918CFE16B1E10151DAE875DA0C0D63C59C3DD050C4C6A874011B018421AFC4623AB0381831B2DA2A8BA42C96E4F70864AC44E106F94311051E74C77C1291BF5DB9539E69567BF6A11CF6932BBBAD33F8946BF5814C066D851633D1A513510039B349939BFD42B858C21827C8FF05F1D09B1B0765DC78A135B5CA4DFBA0801BCADDFA175623C8B647EACFB4444B85A44F73890607D06D507A4F8393658788669F6EF4DEB58D08C50CA0756D5E2F49D1A7AD73E0F0B3D3B5F090ACF622B1878C59133E4A848E05153592EA81C6FBF -MD = 0D1E6BB88188B49AF0A9A05EB1AF94255E6799515A2F8EB46AA6AF9A9DD5B9E0 - -Len = 1857 -Msg = 4426F07482D08D23BEFE266B3289AA606B8656403368843EF5275D93A735A1EA48D25293B2FEC242DFB58F7C387F0943B53E3BDF49F922B10A89CAB3D192010ABB2CCFBB758F7258895B3680083B9BE3E7EE79ADD241EB063CB2A63C0BA4278DC9CE078257B9B42AC4C6F7C6F5AF6B3328284F1DA4C04102A456CDECBA73DBE380C8BFD9AFD2F05DB7B558CB318E15C0C4E4FECED736145BF207356009D76F81F33F25459B74E079FCAC54145DFC2213AF55F7EFD34F5567A4F4A3F6D01503619808C7FC361D366643A4D2D04678DAC223832D35C83B759887C060AE300B1F630AC2B9BD442673A680 -MD = 9048CA918204041A98E704C67173CD4AA251DE3D03A7FAEA7B1AFB5D8EB4CB7B - -Len = 1858 -Msg = 4743DAD3E151BF5E0B9090C79B76A7E425F65CEAC259F901234BD59BC01172BAFCA5D80C3A80841547CF424E52D53C66C73407B686FF44A72638CAF89A09FDEC13341DDD297795D256C3A3FC58D1925FD1029C55FA76C9AF2F277F42CAAFDE084E708D0C89DE48382D582FCF8343965EDC1552749245A9DD7DD2881FE904968AEC8012AAF2D6C52DA081682BF062D39B7DD137BF1DA53942E24E60388546D60C6E074D96D6330B3FC262D2D1053324861B4E9C482F4C4159FDF0BC739A39192BCA18D5C54F1E9748068D63E0A232C99F3504C3B211EC5C727049371D52515231DAB097C014786DE080 -MD = 61E174A7C2E8463066E0933C1EE3244228166DD6B6A7C9D0176C527BADC9FAF4 - -Len = 1859 -Msg = 3C892301CE8E40088696DE300C1AF4BC362D52CEF0BDF4BE2CB7782D4538ACE3A69DA72C6D0A04FC416EB1A6F5F24AFFDC4AC3A8BC58574DC18A0FB4117D4B6083876067E18B62D0B0D35F537D7FE57E921F361FF598194B9F12DB83D24BA10D7976BA334EAB98EF5524EC074B0F4D663E8991D568142189A89FFAB0B6D851697366A2B935BEA15780C0929368E07E3DCBB7E421B58486F6850F20A9E1B499B549338EB0D32DF8362552ACC97AA388BB81BD64FBEAD0F89938613403C43149B79CFE391505673EBC19C01169E4A3BC90C33015896C3F9EC083F6C77C914E6C774B42BE8A6948AEA840 -MD = 1DD59C3382335895589B4D1A9068C73B646558E61EBFC17C64080AF1AC0CDD0F - -Len = 1860 -Msg = E6991E70A7A1D85F9E99EAED812879054136F3A048D96156A4A0778E66CD23CBCB13197FF5FD92AE7F316AE045120BC5AC67DD4F887442F4DCCB77048BF2E5D7A1B4A17DA0F8D30A422EAADB498130CB1DB102CC68C43E70CFE883A58659549CF439317FEBB48048450D3C7D04756ED880E8760F48652FE46E41CB197A6938D5CD81D2BDB058F180097662CFF5727A3E7FD351803E97D4A2D54F2CE7F9EB76530F3D9C7B69540221C894F2164D1F98379CA174FC276E5D97B2BCE598976B7B7B658C3655461C9C15E62CEB380A35305A8B5978F44D86B5132F0EF5744AD0DC51F6D7E40BDFBE5F0380 -MD = 11900DEBB745229669F86B36BEAC9333C89C79B61C0E8241458F96FC3FF90EAC - -Len = 1861 -Msg = AF52B30D7CB6ABA2053D0208FDB3924AC2C32B931B14629AF563527E2A4E8F069DE7E3EFD5E769371CC80D7FA106F202F90CB270105FFF33C345AE2E346237C5FCDC8AB91AB8E847660F215DF3E1B570874D9482C221A5F6B445652A4393315CD60A79B24AEAB8F0086DCBD09A0979CE4431A4BF2515C5274670AD8E3F4489B49DD0DF064EB00DDC33BB778014B53BB2E61A3421BD94754FBE5B9A7FBDED04329E65FAAD493F3B4922CD8115C86F116095B46BBDD84B39CD69E484E08D9CA1B5DCDD9EBC126877DD4D6ED4227DCB3320C56F6F1E4017053841859A3BFEAA77ED640259F99A51BEA460 -MD = 821A65955CF1584A39D5F08E8D4C1D031E245899CD5881326474FF6DF6C06841 - -Len = 1862 -Msg = 42AA49F4A2E8B72F5621122E00B059647A8C6ACD8400BCAA1EC4BF95B5E3A093D32022C6016F42581C9C2C3DF81105B3EE9D53BA623333406B4319FF1FA71F7ED8046A6B2892F601A6AEF902BD7054E67437C23CD00A28ED3275F6163EE2CC714C4B31EADA0451E40E0A66DFF244595A10E200582D19D1B78DC70B2895DAFC390D2B9386E194CAE4429CAC6D98E224015645E2827E1C016AC54737CACCF071CBE8E91E601C5A926B847C60636BFAB114158679D0E451AF3F3A97D716F96D92B51FA5EC90165416DE5633B5B8BCAA6B45D599745EB31AE3BB98C6B19E6F789BA6E21EFF754B16A4C41C -MD = 4F9CB3C0B0C4F5D8864D9E2F0434E03662BCE485C3AB5163472A1019BA632E7B - -Len = 1863 -Msg = EEF6D5C6F1147E9A29D854F15E8C5BBB680BC09EBFF8BCDDB963CA5267C668E648B47024F3972C9BCE05E74753735BFB45C50461D900DE1BE6BBD5DA4626BA6548BC7A47A8FBDBE45508A5C03C6980731BDA8BAA557EF6AE6117707F153D91982E1CE06E89F28D576B7602C3AC7FE77C34AAA1D36572C58A8A9A39F20A608A9EEBD4108F664F66D454C78EF4883E1C8C37319EC69C88063812A5FB2BD23AE9B4E49DF8F34FF9FD244D40D6E1A4B454CC6ABB4716C75327E5C46AF21EC8B0E1B0520BB16E4638C1BF3C9A6F8445BCF3FC9329BC626223CFC97175FD0A16EB8730F7EE2C8CA5CBFF8D06 -MD = 1CCB3D97406F4786453F43482E333587C5362DE3CC12E17BC7A1CC2AF84BBC3A - -Len = 1864 -Msg = 7C815C384EEE0F288ECE27CCED52A01603127B079C007378BC5D1E6C5E9E6D1C735723ACBBD5801AC49854B2B569D4472D33F40BBB8882956245C366DC3582D71696A97A4E19557E41E54DEE482A14229005F93AFD2C4A7D8614D10A97A9DFA07F7CD946FA45263063DDD29DB8F9E34DB60DAA32684F0072EA2A9426ECEBFA5239FB67F29C18CBAA2AF6ED4BF4283936823AC1790164FEC5457A9CBA7C767CA59392D94CAB7448F50EB34E9A93A80027471CE59736F099C886DEA1AB4CBA4D89F5FC7AE2F21CCD27F611ECA4626B2D08DC22382E92C1EFB2F6AFDC8FDC3D2172604F5035C46B8197D3 -MD = 935DED24F5CECC69E1F012B60B7831ABCE7EF50EEB0BEA7F816C3DBF2B4ABDC1 - -Len = 1865 -Msg = 4DF4BBFC86C99AB997A02CC93519BA1B6D58CD568237DC930E71C4963F48F304AAEB102EADD5E93902C441368752098DC02CD9518B1FD3E26FFC1C34E6773866432E25F552E44356C2CAA4A1BF375B73E17561D28DDF85C8FE6EAFB3A17D51AA0D512BF106B4325F9BD0F47E532A6D9A7DAA2F90D8AC43426209191512FD59816F245495CC6FC14DF5826D34B2381A1812B3CA9C4C8324D7D66A4A76F7B483032BAFE76128C5853968B80152D21CDC2BE64BF2AA9439C178C264062AA61097DBB287DE1BCEA6AFFB08468D3751AD533B4357CAB562E0105A0F848052DF66DDF9E2B7C062558114019D80 -MD = 37DE765CF89839FDFC382E5EB75C0C2965BFD59AD12EA24004E9E8DDE88ED4CF - -Len = 1866 -Msg = C1FD4A92ED91E80437F2492D1F0933D8B71AA1FA1457C8243EC5C1A4DDC1996F04A3AA922EF7571F50D11CD10155C20D198D4BE9846C4C46E5CB8F602241B7033E542E7C8BC4D03570B8D7DA6CAA74B104856CC97BE1510864D7566E76CD19E8182C496F94CA7E9A5A2329323B665F5BCF41A7BB5BD8D729A4876D7E9A76B7764B830FE75312A3F268DA28E476985257FABF2C04263E6A1D69E9F5C34E11CAE04CE015A731FB1B492F405A271D6899184C4AD3631FEBB554021C36DA8E2A5864BC3F8DB8461D0B7AC9AA94222119DBE9263E0A9CFB8E8B98F456C1EA717433B4BA8A509A5CC4631140C0 -MD = 4960DD63EE6FEA3A03451AB8A779BCA9FC0646078F58223DEE2A60A963664159 - -Len = 1867 -Msg = 25AE6A6AAF2D2E5E0E0F1AC428EA4A982A601334D7527E9A0B7D699EF19C0584C5332623D4A9418156978F763F6C142009A76C5DCCEA9FAD261C93D9BC851538202745BFA220EFA3872C60D28C5A45AC8F85011F95278A28D029D0947B6EB8AB359FB4366DE97A757EDE3536B2EB7F25026B5179F32324E03086D1687CD1F335874F2161FCB387300AE9C460F8BA20468AD070C64B94A8D8E9D38A5C1328983CD26000F77508AA430A49A5444BFE451C19A2ABD1DAB0492C80307B61240BC18F24B2CBE2DA5AC8FC85C9B2FF984D351AFC303A83F4E3170D02B8083EC2CBB7D671A9B2AEC95BD719D660 -MD = 05E712544BF2507428B21341DB7A0398CA3F5D8040C9D0E906A0D764D4A20B93 - -Len = 1868 -Msg = 4251F3233CFF0E056271F186FF88284C5E29990FFFCFAB44F9CFA2EEBE619B72C3681DE8AFA75739A6B9DCE88F4463AC03F1FE21139E45C968F72347A6DEEFE78863DCEE29E2309733A8B477AD67524A4317E47A40C2027992C057A934A9C09D3C4DFBA062F4F653626F2E65AEE5C08378E9B5FCF87D937F71320E5D8CB9A5CB89360A0D7BE1BA7628AC1B0253D8280D32F7C03942A26659768AD774D95AB91269DF18576DEC613260872C558534C80290ECDA296DF12F6407390D78E7A192FEB2F4CE67CECC90CE7DC62593B3610D8FABBBA4C1E468815DFA614767F3AC0BA72FB18899426D3D76D6A0 -MD = 377A6A24459864ED9F4BE7E2FD621A86F8B7F870C741FE30C46D9E4821045C60 - -Len = 1869 -Msg = FEB6A3B8C8168406BAFA4C6C4D437B0E5ADA67BDCD5383E2217005A81092047263ED80F09D72EFF2F1B39282B94B2AE5A79D099BC8AD3F38E124644AC5825A37C22506048DF9AA75FFAC09EA24BB218E1F7730D354FCADD36E02122765AABAA7D56EADE503AE02113A52011A87AD7A113A717608BDE4F8F5A1DB524901B582EB2FC351612C13E604F425AA333C5C5229DCAB69F0E02821F2C00045BBE119975AA82043BD4AD5B8FCB57C3F766E7DB60770040419F4DA26846803E2413A356B607952049B8F5E7C694B0DFE703768AF3A8BCA7C5446C01C7A257D0D3476E5853DFB2BB329BDD12B14ED10 -MD = 6183C3DD1AC3FB4241FF06E51B204322B8575BC25E41A622531EC14F97001083 - -Len = 1870 -Msg = 07B0807CEBA5AB708AB70FAA26C57DC848357CE71F54B1BBB640F34C2392ADACBEF2779999ED9ED0BEDA61086E3F5C427F3FEFB6D9CA7AF1DA684CA977D69B755CF10B5DD9B5D229016329ED7A8C5BF65E86AD07672F6823897A700152907FC188A673F1F748BEF8EBAF740D08403A34FDC6EA6498B552766509387440B9E557C3BD2775691DC1DF4A70D867B8DAB848EE1272910CBBF2FE02B836A4F44B69A031C82D4E86758E67491DDDE0DCE19F0B30229213BE2C4EFE138D21B746D7B76A3E4370F46065736A06433AE27BCF475C1E6B99BE1414B2C74EFCC8C5F209B5EEF747BC491021A1B1AB7C -MD = 3E78152A23335D769A5817D8F756DEC403E072C760F38EF389A3EE8C8D186365 - -Len = 1871 -Msg = 077EE43315D81DA192AD7FFDEA1F8846FCE8E6497BB577FE0D84A3B33CB09997606C10E735922DAB8CE9508BC5FC9216493DABFB6982C060C8658DD0FBD3820386B8CF69C299E478AF4B46F677DF77B10B4416F87A984ADA7BEA287E7241C18F1D373ABE08B69D2C3EF3191AE6D88B794A2CD49AF24DEB98C24E2F647F1C97D37AE5BCEC2EAFED490C9153722ED8B8D2A1DD116EC398E147C6A1C15098FDB40E34666DB897A460622DC22C5E0EF0A7CB3A44A7DF8CA1521FC03CBA3DA3055DD0EF57DF1951277FF196F310B091049219ED89B9FB9AAB1E8C803458B383F75F8B71E466BD6B379CC445B2 -MD = C6ACB257B13AA983D807588C20AD575EE4FD15FC58D8BB07860FF103210CEAB4 - -Len = 1872 -Msg = E29D505158DBDD937D9E3D2145658EE6F5992A2FC790F4F608D9CDB44A091D5B94B88E81FAC4FDF5C49442F13B911C55886469629551189EAFF62488F1A479B7DB11A1560E198DDCCCCF50159093425FF7F1CB8D1D1246D0978764087D6BAC257026B090EFAE8CEC5F22B6F21C59ACE1AC7386F5B8837CA6A12B6FBF5534DD0560EF05CA78104D3B943DDB220FEAEC89AA5E692A00F822A2AB9A2FE60350D75E7BE16FF2526DC643872502D01F42F188ABED0A6E9A6F5FD0D1CE7D5755C9FFA66B0AF0B20BD806F08E06156690D81AC811778CA3DAC2C249B96002017FCE93E507E3B953ACF99964B847 -MD = 6755BF7E60E4E07965BAC24E51B1DE93E3DD42AE780F256647D4CC2EF8EFF771 - -Len = 1873 -Msg = 71DAB3D5E14975584855B425C41A4553606B8D758FF3D9897F173EBEE24BE2D269E0915FFEE407582B4FE64C1A1252D07AC56FF7D164441DA25CF75ED3BD15F582A41BF97B36101AB73D2495BF77F77277A52E41993DF8A6A889331AB48B4BFFBE5486671C673F618C7B758FEA417D358FE1A617A6F5A8BC3619E1A58A1B5B4A40AADF4E8DDD4CA6B557E777FB7EFB7E755F3E4E0DFB6E89A53380B4013BA9AD071C3E147417BB663867F65D478DEE59E71B0F753015DFF08207DC4A985754B0BD81BA2A9B66DAD4881FF73B82BD31CF62B2CAD3591EF3EC790711FCAA3897BDA87C2DA9E564BC30601D80 -MD = 6287BD04E9B9A03CB8D570017869022846A98792F7455DDA476CD32304D9935F - -Len = 1874 -Msg = CBA489942ED9C4FA6742C4442AF01F4503857D1BF17107169319A95B03DB4DA89379875761C26E82ED2A87EA5B532DAF6C9E3E12E6CCF8ABCA098D6ACE16559C87EE70802AA6BCC24D322D3469D59EDCA58B485A8D761707B2AE6A17746F75089A4FC0AD748B5AFA77DA2D32F2DEBDB7E0204343B6F732A91CE97E6694EACD38DD31BC1FB319B5322391FC69F4E6EFCF87ED5D75FA43CEF00A7B64554D5022E41FD07A09E0B08C8721FACCFAB978CDEFA81368AA965F3018D40D1E3EA5A13C2EB45508EA71B9084F664970153A36FA115CB538FF98B082CB2674523876CDD60145234A23F1BC6E80D0B340 -MD = 205C6FD77899A9095496893A4EB55E3693FA7A4B40845239740C927392C8385C - -Len = 1875 -Msg = 2A2084884877E8EF481192AAEFB04AE7E016905FD19EBFE4AC13480224472DA2AC2EE2C2A652C72B1EE84C090B89F015060CD8ED31A320EE8CDCF0652197C8290AEDE81EE0109FB4B5F33E96AAE6004099AF9FF74E0C0D3CC69B5E655C2E6E2E8AD884C184D96716FDB8482EF16028E08C9518F505F9FAFB22A5B988246F2F45C7E8C32A4CD5ECC7C8667C5249D294E691E3E7855EC547D18F5FDCDD062FCE2809873D53527EF72FF707CBC994AED439B2364C10E6346D52BC8037C6D82E73353518CFF35E62A453E5F68ECD5F13A2F0E55A783923B41D8FB53D0C853DFD40E5C7CC8914958D1394E76C60 -MD = F5FE09206C722F492DE4335713DC03B6CC308B09406B5076205EED821113AC64 - -Len = 1876 -Msg = BC7AA0446C7B561CD3CA9FF43904F23C761B83F50AD0F489EBD9AA9C466771F1FC6C8C77D1C9C55929532DBC1456D0D4ED1E7E9FA1DC9AA6013B555C217D480DA0735997E8A2EF951D978936351C444CBA6A4CCAEBB3417616677143BE2F4B4DA61D1B8A385185F74581249B1212C7820AC6DBE0B3BA8081E259B78E672152513E357943B927E01EE4BCA4D903775E6E67195E105D9F513F679DF949D852ED2A77B96D14A967D76D34CD4B18F8C4970DDC95436EF8614ACD896817954D2CFB995AED03B3983A72FC67F3BD96949B1FCBFA6E26ED6CC2DECDD4EEC72787B868783A9B1758AFB2BAF1BBC010 -MD = 16103427F821162B18A769257FDB258AAE270C3C9582A7008B8F516FA0BB0ACA - -Len = 1877 -Msg = E91BFE2738D209FE5A8D7DF18EED381E2119D4EC5C507E7C3776F4EB0389A67B0B4E1D62E71BF71C37F84B994624DE6CA18C2C5D50E1E279EE0989E526391E63063E55553DBCD3AA08DF0D10A2D24B121EAA009A57C949498F9B21D80D1A81BAE55BE5F902B035406AE16E1BF7EBC1E21B377D3EA4A78039C5B572F2187D4217181741EA9487EE2FC4B6295EB152EB66B62F83E38D1B090AAC2E82220CCC46F8E1C16EC2D772805C6ED31243C5C976DF1B25F4FA04794716D9E60C84C13FD17350930C2B9D01DD44A19E2783B4E2DB7701996DC612C4246AF2428EEA9CBA510B14C9AA6C71F66785A5B2A0 -MD = 5D4181419FC98A6CE71979B64AE87167E76FFE4175F8D73355C24E04FFB7EFFB - -Len = 1878 -Msg = B5B7B936D7040BBAF4F133DABA95410B59734A61C50659654B2C441C4D74FC5BA926701516457F66CDC65603DF61E3D0E44A928537E438880EF48E93C29B60BE180BCD6BB28C32B30B29B20812E138C554EC8824CCCE7E49A6B2746018098056539133DF334C92D03F3DB12F32316C15D236576F00392D4FDCB065B4C8ECB96A81C4492CD93DF4760212A7CA123F019FE2EC2F9FC56EEF3FB7F21991F31621C8082E2032BC45754546C016E449DAC7B70DCBDC63FABE31E7A806FD226C798F8B34CCDA13EDC088E6DE58CCD03379269F58E583A670C71F5F96683106967E56C29EED242645AEA259CA0D2C -MD = 3709340D85600BF96C79079338ECD1152D04425C884A91F9ECD82CEF6A86F4A9 - -Len = 1879 -Msg = 2D9FFFF282AED376A69AFA50A700619CA32967E6A057A851B111C5387FDDC31BC54300F7233EC3A19FB2BC9EA509FB1AA9F2A1EA05D9427CF751CCCB39B3418A3BA0F01D63BA626A7A21B88F8D8A6DF57F178160C829E88E6546A65E0EEF4DCB0E5AAC1391F2E7C4890B90B6C38BA1A5828CE4D80119866F3F33DE9C029C1A8E89E7152961CE5FCE9013534A91A2DB42B086E7B9C8C6589474489103CD0FF683ECE788D889C81C75C80394613E0CB66B6B6FE962E356E3EE9B159F1460B2D753E2992744C34489DCAFBB429E4E151CFDB1EC5D43CDFA44FEADD2C1CF25C097EF26C48113E5F75BBF950AE0 -MD = 5213098BDB6C737998B438952079D7C852FDBE412166A29A93595CC476A2D40D - -Len = 1880 -Msg = D85588696F576E65ECA0155F395F0CFACD83F36A99111ED5768DF2D116D2121E32357BA4F54EDE927F189F297D3A97FAD4E9A0F5B41D8D89DD7FE20156799C2B7B6BF9C957BA0D6763F5C3BC5129747BBB53652B49290CFF1C87E2CDF2C4B95D8AAEE09BC8FBFA6883E62D237885810491BFC101F1D8C636E3D0EDE838AD05C207A3DF4FAD76452979EB99F29AFAECEDD1C63B8D36CF378454A1BB67A741C77AC6B6B3F95F4F02B64DABC15438613EA49750DF42EE90101F115AA9ABB9FF64324DDE9DABBB01054E1BD6B4BCDC7930A44C2300D87CA78C06924D0323AD7887E46C90E8C4D100ACD9EED21E -MD = 62C9F5E5B56E2994327A7F9A03888DA7BAD67E387593803B1807482B137B4509 - -Len = 1881 -Msg = 9B5DF8D7D727C54D2E19A7A525180CFCF88067B5C5205A0A41713EDDC19A6A0CB8DD7C1C1DE7E9F038CFB3A9D3853CA1D24C2D17D55B0310C2BC696191C2D7217177E00DD4354276FFAC3FD8FB2414E309937AE3BE9B94CC3D0904CCC966B70031FE4F589460B1E831FE46C579F802AF8210B48D15409FEFD6DA627DBAE0D17A0F9E95A1490EFD05D458CB4DED08BF6201E4139CAB7BE67514F5766D75AC28BE0BFE57AEBBDD81FB6A3C2A5E088AD72312480BDDDBC85CCFDFBEB13A6FCD0970AEF6F00AC922B8EFCE8AEA4635D15C63370E92F6DFBD2B8201600C81FC58CD57148CBC6FDF1D862B30211480 -MD = 1729A4CD0F541CB206D4EAB852E2FE8EF839F3B576683E5A9B90515EE1923446 - -Len = 1882 -Msg = 6D35A20EAB3E02B1974F66603A111EBC5D3A1BCA88226D2172215E57EFB59DCE76E78E55DDE1B7FFFE0F1F9194AA9A7C9A88AEF15ECA5577D5AE885F6C1E94B960B697D9210EE5E08801CD5727CB870C5CF62D2AC769D52527413210DB7DAB8679C1EF0AC288B4D20D401BBD503D02686F8324F7C441B9CBFE85BAA147E24E4B93286C9B24C6940C4391D0CAD11F75A5CF326AD6033BB160651F5B8F825D4F460BEB14C5680C6FE90AF460FDBA3EC45CE26BA68649B88D9AE0FA737B88A4DF28241D9DDA4F24C02B53FB1063D54CDA4780BB877A48206C20115147B3ECF238DC969E2B10EF0BA8B2CC2BA5C0 -MD = 8891055818A4B8A675CCFF43B220858536787EA72CCADEA68CC3E3631340F9F1 - -Len = 1883 -Msg = AC0DFB4ACEF738945A21058C6B8E9728B5F5D8BEDC5A62C65064CEFB085C1BE69573CB7261165EFBB479AED2920235521FE64D09B5B68BC666B22014078F4E08072B854584D2F8BF910BEEBB018594CAAC5B5B734592831EEC4F954A33C506524301D28CCECC3D7D60C0BB37F25FB0286F0A3D24E5FFB04E2ED33F17557EE45C1CB50D821929AC534CAD695FAB1C12A5ABC44AD5818CD0F899D7023FC3D1C797CFBFD7E7AC6FFB79E367BE21DAB7E353DFA5C79B69638720BC914102B599F130052A1B81C373856CD017F647C0EE802F3600C5D52B4EEF5DCA52C82A4D0814428BE9E37443F9AC287D430E40 -MD = BC1ABD85BD847819E11DD8E37EB95751D123B9724E0B5E3156E72C5CF7BC3F9B - -Len = 1884 -Msg = AD54F5E5D76DD3B229155AD1F3D9063BC1C624A4E265BCF03EFC4475F3ACD9E85661F836E3A25FD2ED900AD6F43FABBEF7580D06D54315065B2AE6EA76FCBD28564382D0AEC2E61CEDE74F8C14A67E722E6177154AD1875D9939F9EDA3E3C7A84244D115B0907E4D0C9CC6E8FDB143A3444EC54584D4A909358A715ED0F43D108C44ACCDACC366CD5614D560F1F06A398F5DF4C6A00391EF89F97483B8FCC42C14E2D154F4E07C3F8A2D6026A5BA025CAF46AF2D374DC7E8B2301B0F500F43BCF1416C3FD87709A204AB342C2762471D28ECAD10C852D32DC053636465DF2265674855C72D70B306297F5290 -MD = 64FD3282AA5BD7EF2EE8A3DEB0338780E38E4943BDF1E8F1F04FA46D638AA6BC - -Len = 1885 -Msg = 53D52F2032B1C46D95C57520FA0CF46EDC7BC6C0C33001D9627E7FD56932C7CAA7CB972083039C1E4060405D210FD60E546997D9D912444EF583455018FC3CFD51F9A4705BB9F6DA7F629A08B23F3ABE6EF27CD6CAC03349FA5062E9B9CECD5DD4EB64655705FA491C6AB62012E35231669512AD5DB1AD4185142C3504835E5B5CC4A18D9EC05DB517D5A05174097AC305137CFC30DE721F605DCBFA88465C1D693C69CC03EBEFAA36886BAF39DEC8ED6EDC49EA34E6768EA13D462C6F9827AB031FCDB0C514851A5F8754FB451E1EBE55CB69BCED93E7D05951152E8DDBB6F57B838CD1340C4C01BD33CF90 -MD = B035C1393C66120D927FF0DD65E5E29F1E5F5673E4B66239B2D695BCF1CAB2CC - -Len = 1886 -Msg = 21FE58214464B868040194D4F73D5C23118ADAC415179F783E76ABFB26DCB8426821E42C350A5AB99E1ECB27BBFE87C35A5E30A1420DB9E82A29A7FD9AAF22768946DD8395DC015F6EC475BBCD8446C89A7D76B4F15B3ABC12DA9B8394402A4A336D4EED27AFD435EB72C91715E06F6687EB0355B89D9966D7CFCE736519F50CEB43E1FD4433ABD1DF3AB907C52434C15E02DF9CB91AF7A90FDBC0DBC59E5D3373D5CB0A2172B2FA74700DB3B7923CFEBBF84F0F51F63999CC4CDF2555F6314A2CAB5EC7FBCEAA7BA6B1FAE3EBC71D605E5F9C27DCA3ACE176DAC25523E511B0BBC52FE5F9C5F299C381D488 -MD = F5F7009458C4E598ECDCA5661B132F7B9EDD4731E09984FE379680ACA42B4A38 - -Len = 1887 -Msg = 0DD7BAA7F00F3B72BF6E9F5EAB0176819ECDA7AC23AA78241F3D885EE7D791200C0970280D7772805E2806846882E7FBD0B09062782AFE528C69AFB1898568B748906264965BD2730F93F3501EFFFAA2A972DC37EE3B15BA330190A1945DAF78E0C75E191082F604240A6302D23935B13222347EBFFC7C0CD9B47FD7EF152DB68FC15374F7A78BA6CFA1272173C34F73051202C3D5D964A07AE03A12025E39DDFD4A5E7B0B95B84E81DAE08A0038F5EC4457A251483C4867D7E3F2DE4373FEDB63FECB542A936E59DD71EBE077681D3BFC6BB6D624E04199937BE910A5FABC44626A6ED49864C0C4B7A9A1FC -MD = 522CFBA6508647171EBF5AFB23AF09702FDD94EBB46A3687B81CB3C4E33AB782 - -Len = 1888 -Msg = 3A12F8508B40C32C74492B66323375DCFE49184C78F73179F3314B79E63376B8AC683F5A51F1534BD729B02B04D002F55CBD8E8FC9B5EC1EA6BBE6A0D0E7431518E6BA45D124035F9D3DCE0A8BB7BF1430A9F657E0B4EA9F20EB20C786A58181A1E20A96F1628F8728A13BDF7A4B4B32FC8AA7054CC4881AE7FA19AFA65C6C3EE1B3ADE3192AF42054A8A911B8EC1826865D46D93F1E7C5E2B7813C92A506E53886F3D4701BB93D2A681AD109C845904BB861AF8AF0646B6E399B38B614051D34F6842563A0F37EC00CB3D865FC5D746C4987DE2A65071100883A2A9C7A2BFE1E2DD603D9EA24DC7C5FD06BE -MD = 9927FA5EFD86304E73D54AA4928818C05B01504672C529471394A82E049E5F95 - -Len = 1889 -Msg = 6EF15F1D7C11CCB07B7B3FCD92C8086B27C8BFD1728F6B4AFF7C29DA17D2B3E5A2181181BB4B11DA8BB2365368594A50CA9B07969753724F2BEBCF7D208A6CB02AD7C8A694C8F86B551BE9A68D98564A941090EF6E5E751CD39909F87BBC7B516F9A829E3AE277E287C3548A69EB1019D5BE3951C6F3583B1B82F09A339E8C236B178C3C9DE3E85F6CE38E8B6AE0D02C0B7BA75DD589887A834AA9EC1B3F50D3495C72DAFC0E67E5FF5CA36FAE7155230A1C54EF30EBC3508E775DFDBF6BAC06EE23B6EB8ACCF8FBE8CFD2A45CB268E11FA574B016FED1DB09458276F53D8AEA57B3AA046393719127F4A07700 -MD = 48970883612070E4E2D4FF6E3B4B25E78CBCF52C0E725007E1DD18795B9F9D74 - -Len = 1890 -Msg = 8F1FA4E6804B6EBEE7584B7B1E2F76CBBCCC1699BA68DE8B05ED2DE8F4ED2107340E4E1DA49DC7E72D96251A8EA551DF35410D4296250D71EE5FE4D8C396CFB48B2E5F2B184F7453E0D74FDCE51D99DC2A39E4AC291BF18BE2EF1D5A1A02DFDC9DC712D5A1A45544B1D45F279394F2316212BF7B5A0E7DF002E3ABDC57D91D7AEDC8EF95F0ED7F6E38EBCC7BDB7A254D6D50EBF8D4D63D27C8AD5F4DD843E4B7CB14A57349985A45A326DBE775AF9E97909A84AD9927E614A4A6D7EE825F84B5DE6695D1E9C651BB6EF57DEFD17E876D8CF2AF552C2B65C2446B177D76C02E0342DFEE23E4D7CC0B994A122080 -MD = 9F100B9428077A2608EE34AE3539B21C42616468759506628F9FFBD413C94065 - -Len = 1891 -Msg = 86045C9767C27085DDCAF969CD015AB4B8FDD157E1993A98708376BD37ACEF1F9D057D5A1B25FB1AEB74C361EA478A37D1ADC261ABA42555AC512B81FF0E689E1C76830BD69F9BCE4447B452300216452099D059B8D67EB157D001A0416FC2701384A5F2DAABCBC94C7FCED505064C1F0494694F7007FBFC4D43323E4C8D719DAB37C0E2D73D3677B3283114C41F611DEE02390466A417F43734DB9FDD0842A102B88238B5426250CD92F98EC91C540EE24C3F5837BB8F058A08EAC3FEDF32E25BEF8972ECD1D9EAAC379E1939541CC8542303D75F1D807857E545989844DF52F3C44587CC21102541D987B9C0 -MD = B4D76FEF1127F14CD82F3B1617CFFF4114092F7154EF0C2690852E56CF76C828 - -Len = 1892 -Msg = 7AD8A30BCE5DC62809ADCD37A2579DBBE2DDA653502892B72E2F9894DF9F4825606A13EE7AE4D0590F2F241C6614660E77DA5BD8D55D6C6F02B614E62B92087FCBD24B2E0CF746CCFB1C3C3B5B41058786AFAD296D6FCFE9B53E35404A7347720D1EACF3837B4949C6CD9317E18F8D2C3AA2326C4B848C44D524D140DD2555B4C6E96017DBEFBE3C473CCE502AD528636432FFCB4DE6F122EF2C9A05B6EBDFA1286EBBE42A131FBC54FAA8D060DD9574B363216189191AF074925D19D22B79FFD4B00DFAB9E6BA72F3EC0BB2AA1FFA170AE34FC413E5BC424D41C34AF4D991128FB3F5B05459A96AAFAB37C740 -MD = 48858373A2969929FFD88FE5D400A4D01BF77DD1E5E7B908F03E90341AA03222 - -Len = 1893 -Msg = 385AF75BE90E5622E14E98D775F6C880B790683A3369801A9DBBBC62D40467ED2B1F0DA3EEAB036373B8E374CAC3044D1D248F06B8C197D20419A2E8D4E7AE87E8EC56BCD165756475FA98FEF04CB81035552481D7262E5F2DD872C750C15EB1E02F4EFEA20890112B958717D16CBE93E8F2E33A83FF6DBC3E04BF9D89F03938526E1C277F86F12CDC1097CB13152585952A6ACEE5027206FC6FA3D72C8A3B3D065FEA75A4D1E2BE33F0E32A6628AE7541B0E81088CBDB7905140ED757E0A5A7798326AB0A26FDB85D9AFD35EB25817C6B2608A1F20A1FDB198CD3A72422C7512F2C744234826E1254AB8B7038 -MD = FF86040519B3BBAB55E5D92AF8BA4F0CE8079FA22DB0E3FFABFD6BEDC49010B7 - -Len = 1894 -Msg = C5ED28E519062E99AAB7E01D6BBBC42FFA0CC6E304E8D489D8C854BB2E4E949EBCDAB329E147128AF11C75F92988AA1A42875CDE9AD9FA4861C03F4A66018B0496A06DC48E70E15E2A7E51E35AD6B4F15220C249BD40ADD5DCC9C58C844383BD436EE9803C87D48BE54974CFAAA19585587FB088E0F8580A851A7C7A2A5E5B2CAACCC09E9560298129972CD26FB603FC5E86425AF9659B93F3F6695A1AE7EED525F31C717FFA699ABA0ACAB0317D7DCB786FC1F238C0B3D826AF10BCDB372DAC68C219674E7E9F9212BA4EE0E2E156F1BB818D4887D9D195247108B4A131448D91046773A6F48FBD748FAB9F04 -MD = EF04583FBBE2959DB8C3C8B0D38C67A7162E3252F3DB7569F04D71C8CD498432 - -Len = 1895 -Msg = B3303FCEFAA4765F0F8BF01AECC4ADF3BCE7CA9F5DBD9FB203EC0347C583A477FE8D7AA23756C47B2F8F76C1337305DCFD2AC0942546E04F30F1A4661F36EF4CC10A49905A2EA717D5E2AE1615330290B06E0C2DD6C55BF3B8FB06D49120D1B28B8EF5B7FCEADB97F2BA0BC64B458CB1E79934393CA7D4E03C7B3601367DFFA70B0AB51865389C817866F73E1279D97D762350737D9E16F6CD64A09391A956316D63BB611B580905A9670EEC91749CA1D1041324729F3E35248E183E6113E08EB6674B06AC41FA391762C8B0D1FD764D9828F314F80546EC300A26AF32ADB9F838214E457301F1805D2A1579D6 -MD = 0E99CF7CC075338F56BA592C8DAE5840AC5A00B8700090BC8E5BFF8536ACF654 - -Len = 1896 -Msg = 1861EDCE46FA5AD17E1FF1DEAE084DEC580F97D0A67885DFE834B9DFAC1AE076742CE9E267512CA51F6DF5A455AF0C5FD6ABF94ACEA103A3370C354485A7846FB84F3AC7C2904B5B2FBF227002CE512133BB7E1C4E50057BFD1E44DB33C7CDB969A99E284B184F50A14B068A1FC5009D9B298DBE92239572A7627AAC02ABE8F3E3B473417F36D4D2505D16B7577F4526C9D94A270A2DFE450D06DA8F6FA956879A0A55CFE99E742EA555EA477BA3E9B44CCD508C375423611AF92E55345DC215779B2D5119EBA49C71D49B9FE3F1569FA24E5CA3E332D042422A8B8158D3EC66A80012976F31FFDF305F0C9C5E -MD = 84E056BF7BDFC73A3AAA95B00A74A136D776069BEEB304423BEAD90120DB6350 - -Len = 1897 -Msg = 30464E409A3B937C485408A41CAA7CE8421BAF61D2B7DA168CFBB9405474ACDFFE48F5D8F4DF6A72BC4EE068439A25048045D51A8A47446785C005798FE8A89EC63AADBAD883DF27989B159D04459CB3FECF20E32B410A39785D2D03188B012576FE15E5D2E7BE31DBAD9B7697A08CC49E6EA4E53218BDF1BF3D2107DF74CC05923BE9DDFB75BD1692AAE1908CA32F4AFD9DA23DB66BC723619498E0697D3934518F06E2D0909B8571096942ADEF6E31B5E31D0853C36334F09F7AADA41D4D0AB49AF327DFBDDEADA12D7AF97E4D5D7989DB22E1F8EE44FE2E36646A6E1225C8625BBF9A63A6769F5C191FD11A80 -MD = 09E688EF0B4CA068DCD1408E5D7F48D376EC63414D7B6603C95299ABAD08CD47 - -Len = 1898 -Msg = D0D5DB1EE32912B390DBB8642F314AAAC36F58D46E98D508DE2007ECB63F487CFD2DD81930D003C60E7EE781FB987959A86128B754E813B933B91A714C8C2BD09C338C3F2170D3753EEC2FAA812F81C287276B85371F398EBB7CDCEB9C20528FE9DA86A1C19749173C62A1917CA1DD82D5036CD241A45D0FA5733C8986B9954C173CED51C40FA1A0A0B8134DA1ADA8019615FEE4BAB7253600513CB960DFD335D1AB376B921E4D47A1F5AD75F88C7575EE32A5B2BF175EA230995B3252632C1D4B7B3E4045A1EFC0C6EFF757B31CB1A29C80AF96DBFA4BCDECE8BAFDB2EDC6F0F85D6C97157019FDC7B3B5033380 -MD = 8BB1DED4268B22BA352A03ABF8581C9F48DBADF4585A31CF7F6D1B7184B162B6 - -Len = 1899 -Msg = C7865E96161416FBB9568C2667F7B69C2AAE38FEEF6E89FEE038199C889E72D1A0A7EC5E37181C2D6BA903D9A14D6C74EA1B009179BA298CA72BB9A6E9D5CEE1E2C03719D850D7703C692C83C58D57FA2EEE1AD28CED2CBBA6203F1FC16323A5352D08CCF63CD1E69DC35EFF1E07D1240EC099B956680EA8F7E907A42C8A5D7FF1C8CA85046113F337C9F5DC5F48DC2BB8CC548222274167E61262124E4483725E5E5CFCC8BE9AC6FD8CE4AC978855F9A63023187F4031CFDAF75D1E9AB2D500F7578770E1F08FD7515EEF064B6B0D2E1A6E37628BFE68CD33C54E5FFBFA0F2C3C129902F3DAD6C3EB2AFF4431C0 -MD = 4CC5D7F930483A914BDFF0822BA005EC909E8C4D9666BCEDE6EB7048C869F5F9 - -Len = 1900 -Msg = 6A0D95FB7E1385C290FED05695D0F9E1BB07CC16A34E4BE0C6E9AFBC809465EC091FE41102C9DF99797B33DE52459A7CD266D5005F33F565CAB3C020CB9331AF08D5AEF45F59242FEDD25A933DFDE0FB6ED5537B0C0F132D58CE45ED874A91D1030CA3D6ABEF53F7EFCA6658941769B9447649C92E062C863FC8CCEDDF87984211225C4999592C6FE591F4A31D397D96884304CEE028EA830222B15BE306EC567E2A2397151DE8D1D670D80D0335D78C3475BC4D3AF25C3E3851600D2A9EEBA5CDCC48A438E5D023D8EBA08D1A6445912BACC65717962071D96AB499A5A36C950573D801F6066E9E0837363110C0 -MD = 2C703CF300F3CC9A6833A494A4587C855A4F39A802B8DC20E7F8101F5193DE14 - -Len = 1901 -Msg = AE7DBB62E7B9A47FDA5643A8221FCDEE971907867A43680CAAE6EE618EC365D998839AFDD3185E8F56DC5E57EC71090089B815FD2F2B6DCFA19B1EF25001714E6F9A3CB58D35C858E6912DA487FB806AE3A32A0AB50034AA7B3C063CC47FB7D207E961396ABD557627B0FC1C3EE14A84E6C94CB27BC74B6DF2DBF2C26E44CB031EF8AE82D04B11739E2CDAC18341C389DF1353C99D419B26D41B8B4F916E79A124FB16F30743B305A56674772B9AB9167C01C5745FA0598B2C5A63C43C27797E2B9D63F1B1D9527FD6A4997A5ACFC51B124750C59A356F70FF258A86BE32E4C08D4AC352642580368586B69CC720 -MD = EABECAD27D2A15FF7421888A7679AD974C2B8EB041C1627BA231093B0C90FA9B - -Len = 1902 -Msg = 25B99AEF0E7C37266F10CDF83715CFD1803E0C3DAA8B8D4D44A49D3118588007449EBA78E6759B825195D53D7370E1E20A687B9245183605EE92C7231DA00D1F83DEF383FCA4D437F047E7A1AB23F3EA309D0E73CCF6260BDB9C151E3F3C0435C72E986035418E4DCE502A2F63751062D42DC0DDCCC92243253681EACD2B1224B5F82A8D875BAFB362F76EF7919F2A0A17B69E13095EA71F06990CFD70156733B0C42DBBA31A130F648D451300EFEC70DED0E1F850A0C06F6C2FF0E38C1C9316046451CB52A21F06E1301A071C5EB8EA23E39A18D1B7218BD2833ABB98F4BB0CDA30F4B49FDD2FFF493D7167DB3C -MD = 534D4AA6F7DAF407CD50BE8D9D1F3686AD57A4F3924F8B96641A8AB87ABB95B1 - -Len = 1903 -Msg = 715E9D91D3D364B04ED7A446DF0CC4AD51A5D8B31DC0A90EB9BF6675F9052BF3360E3D5A7D9C373C94C9AA9F6B200450272F4B37EB9A5BAEBE95C86AD74BECF18ECACBF3C8B4D5AA32C15E0D1457451D664967B6AA4676C992DBC1CA6A6576BB1788C94E0C97E1A85402B8624B03791F896A85A4A4132B7FD7679E8786B8A66E0526E1FD0782CD14D1712173F0A96063D68242652F52F8ABBFE284E637C62BADF97372DDC7CB2700FE31001D094AB77378D205CDE474710530028CD598FAD893536B6752A542171F6FDBA6893D3AE06CB8221AA27C89570E463E6C31620CA976234479B15B8A6258D4779FC321C0 -MD = D8BB99DE1614F3643056EC6A559B21136AC13EF5987F9EB49B6A78CF3488FA78 - -Len = 1904 -Msg = 08D0FFDE3A6E4EF65608EA672E4830C12943D7187CCFF08F4941CFC13E545F3B9C7AD5EEBBE2B01642B486CAF855C2C73F58C1E4E3391DA8E2D63D96E15FD84953AE5C231911B00AD6050CD7AAFDAAC9B0F663AE6AAB45519D0F5391A541707D479034E73A6AD805AE3598096AF078F1393301493D663DD71F83869CA27BA508B7E91E81E128C1716DC3ACFE3084B2201E04CF8006617EECF1B640474A5D45CFDE9F4D3EF92D6D055B909892194D8A8218DB6D8203A84261D200D71473D7488F3427416B6896C137D455F231071CACBC86E0415AB88AEC841D96B7B8AF41E05BB461A40645BF176601F1E760DE5F -MD = 401C3BE59CC373453AEF9603F7335C1D5FE669909A1425D7671DCB84A49887CA - -Len = 1905 -Msg = D54EBC88B04A14EBB0AA1D59C3A4498FB560438B5884F6E6A744C78761AC06934138E03FDCA96CDFBFDCF94A2D51151C35D5D03ABD61FD7850B8309D65D3EC495DB487E6A7B6F50E6B30A58DB0FF64982A79409AAF49766E032F7893E0888EC71673858FB57224F9A3FC170B06B74E54E2F512F6188684937C070E5C21839AC032FE1150F48D229CB6853769DEFB8C1998B48E79A96EEA86993D215FF0152A30147761D8D45D5CC6B2B81A46F99B7EE7904F2C825AE1B454931A24E51F3B0D4618AE5D784C94BD747F08E5689108D7E2DD291EABA7AC562BA7C768219AFE2CF7325672F3F2237CCBFA743D184A9D00 -MD = E6A96E3F6430A11FC546848D538FD79CE46665C8560AAD127E3C6A56CF255280 - -Len = 1906 -Msg = 1B9DBAE7FFD110EB2A4EC1C27A9C2C09F59DDF426A1D32D18766432B4D9EBE9D6FFDCE6140764930D5526D38CA45C2E4BED10B620F4B5F6B42B2B2B3F539A062DC36465483F660A3B0DD1FD5130156C31497F2BF2EE650716897B9D79A69018CEFCE1CCE2955A5EDE0EC457B8533D802316B5D4420B9D5BDC708E9B1F39E0E91722D9EF6A646DE2313C4AA88E71C46991E799A564A3F53CB245A91DC9E704104DD930F2EDD1A39DA491329C13D75FD6E71B076E1F5A1DCFEFFD1E2757FAB630F4C7A28874BE66287E733B462D45964889B42080C0DAD909D86D44CE5B16503B41246C827E00DDB13BB936185B15A40 -MD = F1CC0FADE0D411B264F89CA8B657136DE424F34D97DC2769F8B1236BE1800CB7 - -Len = 1907 -Msg = 948B3189A832A89B77011CCC3A5BCB0BF9921458DD9E8B0DF900E7FD1BED31053A714C7BAB9018A94E5145768224724F0715F7F959629120FC5F2AE282FC16C029759FD38E109CBFCE44DE36469613FC3E75A0DFA599F4B74358CCDE5E0E75934675C8A65687B08FBB8B0914A8D2A7D26578C98E996A12E6AEE779DD5B12B6F1381BC3EFC84DCD86A1488B1289E296484141587F9C2DE5814AF5CE74197ED41D6E47974A1012F465446B8B568DF4CC56629F0C34A9FC9C4DB1F2139006D02A071243594BCE5BA792F0D5ADD297FD728DE29107E60A87E8F0E3E360FFDB10FD23BB8B8C5824F0534F3C202838BA7540 -MD = 3946521895DAB8441D6CE767B85A549B2B0E79357F9380E9C71E21B56B9DD521 - -Len = 1908 -Msg = DD78EE486F318664E7A4D66B15E5ADFB15CA07955E290655CEEB942E5478871507B4EF5AC241EF683BDBD0611806DFE2DE432E04F1AA93E1608FD6A2B36BBB799611CC80B912E2FAFCE43FE688EE8ABD5EA5F04641B84E6D1C23C0742E64BFF7364BC1AB8B6D9C0FD89AB8EB4E1EEFBF7A17039891819092BDB39E493C8469A2ABB8F691E6BF40B45F98205C50292C7E860514460DEA5FD3A331342CBD70D7E8B2D5D6A94C341F27B00706C967A085DAB5E75A499E7B885AD3A3E3DB1F2B2DCC6F4AF700845F010E91BEB0594758EC13E345B41498E6D45BEF60879CC812349C395934ABB047BDE1E8129170525B60 -MD = 3B345D2AAAE824F690D22292D18526CA585322FCC43A36E1C8A31857792990EF - -Len = 1909 -Msg = CEDFB16E8666009C16626B4828156C6B374059093ED1E6F9D9FA3F524EB7FFD030F21761426E5838448F3D43FA87366FDBC1FC58D75C9F4762CB34FEF1746991EB3E0BA6FD0BEB93F0EE5A3BBBA466B2A667C818AB4C8BB1699DE0BDCEE984E45972BBB737E33B271B8C52B612013980996990F8B4A8D63F499D121DEEA5AC2D98B3C86BB6D0D62948562502F18E0C8DECE3A86FC28E39EF39A2FEF225A406B7B0AEDF4B3949B894F1846FD656AA8DDC0FF1ABD33F54F0A74FC35A9C6C299A4F89A24098CF3966F070BADD4BED889F3E1DAB75870127CAC9106CECA696CC186DF678D2E392AB592DB003AFB2659E78 -MD = 24C98FAB4CD5BC9D759EF81C921699C73B61A7E2F94815CD57715EA20552E2B3 - -Len = 1910 -Msg = 88B7A04F09EBB5BA5AE5D406C00A42CD7A809FE193956CDD28EB763DCB771DF5CA02A0C3E963CC9D4ABEE25037E82A7BF776ACA0129216E80D2AABB7A61C84AB5A2E675F2DA118EB159E0495BE9B8361362B7D376D08BB2F407B65E69120A1009B55CC0A8425DFDA0422BC1E7005DC4E8EDF925B79DB2230447D7E0BED9111566A8DE861B6CD11AC5F4BC9F7701312BDCA9019C4D799D085396FF8A83522D7842FD8AC880AB792EAEA4C4DA5670A586D1B13B005B8D26B371264AED50AF8106FEF5FA9232FB4D780F7118667B31F219E0655C2CD0D9ADA7F4C0032E8A8C40AEEF8E710635EBD3288F81DA883C269C8 -MD = 49DE3BBB8761DFC0DF09612B0C902E68C0E326F79B68A50CADBD5EC375857EDD - -Len = 1911 -Msg = 60BCE2AB04FD3142DAEF5C0D8BD52DEB6C60195DDEADC37BB50B8D7AC49D0736B9C98AC3F426C5BD548AE17CE4CF25089ABE525AE70774D1F52C219097D9CC7E25EE0A9AFDD92E63C720E09DFE45BB8D83EB36CBC8379C361C6D4A31401FEAB4DDA2E867937E5A6E9E2190D2411E837A7317FBB46859F8A40E24B4079219A2AA3A94EE94376B92D4BB86F3BF79457C1F32083F3AC6330AA9E87F49FBB75958E205EBF0133539139A68CA8498D9BA099251635F804EF3711B72D65E8F0D7ACE7A135024FB8C15DA8D8B0194BA4E8BEDD18E593DDE80558E2B9E697D053BC6363A98CB273594C9A8EAF93238532E25CE -MD = 4120C046FB4D56C4581D43B131BAC27331AD625A86ACCA5BA64A69C9E77247D0 - -Len = 1912 -Msg = D782ABB72A5BE3392757BE02D3E45BE6E2099D6F000D042C8A543F50ED6EBC055A7F133B0DD8E9BC348536EDCAAE2E12EC18E8837DF7A1B3C87EC46D50C241DEE820FD586197552DC20BEEA50F445A07A38F1768A39E2B2FF05DDDEDF751F1DEF612D2E4D810DAA3A0CC904516F9A43AF660315385178A529E51F8AAE141808C8BC5D7B60CAC26BB984AC1890D0436EF780426C547E94A7B08F01ACBFC4A3825EAE04F520A9016F2FB8BF5165ED12736FC71E36A49A73614739EAA3EC834069B1B40F1350C2B3AB885C02C640B9F7686ED5F99527E41CFCD796FE4C256C9173186C226169FF257954EBDA81C0E5F99 -MD = 020485DCD264296AFDB7F643CA828C93356F1714CBCC2FBBDD30F9896C3F2789 - -Len = 1913 -Msg = 1155C2A0961A8BAE0B6D7525BBD4F8C6462DDCE9F37A406B9207C3F103FD12D777784434C89C0230E64768A054160B530F0E9B0183B00964F9AD9286B0D3DB255CFFD3B68FE526C3761F72A45F842667C277B210F157F1C9EF5C9AC7F7A050C2D3D73C4D48E85E29842F9E951C07266AE96A24285D316D4F372C067B7480B663A59AA04FE75AA96AF5425E2D3BE0DB2525FD9348198465C7917856716A667503729940B2E7190281D58B3ABE3B96CE9EAD0BDEC79F7DBA5172989CD1A73CCB8B51B67214E19D0EF7ED4F2ED33A7D773862A4CB899F8DE45197B878866F8FFEF1ED73641A5BD58F7745EC17D84D42C980 -MD = BBD7ADB084877CFFA4CF63C7902C04D0C3A96597CF723A64A7924B0372CF819C - -Len = 1914 -Msg = 8821B2711521487594E20F09E0DABC97A5B5E29A37121BDF965F828D0972FE9386B28A37D47805308491811C8C1A4357895ED65C427E5AEFEA2926DBE7A909B8431D3B362A850A0810E6F30D7EB00C5A0FC8D933B088D8CC52932DC297B5CE2B644CF56D4DFDD59AB0760D5C11CC1A10275D4938EE0D2BD54AA9513D1B179587E77227703F0F6E66DA34CC1A0DD382B6213A6B313CC8C5CD75A956D027DA212DF965128933FCA4F7A2507C19E54EB6E915868C29A8188782998FE07E8CCB50FE433B3C2E66CD6D794A06E9E7D40AAE843D6700D1D4CC1D1C34AAAC811BF8489996F7FA81D6AA1954EEB441EE411CAFC0 -MD = C1A43CCD8D52AE582696C516C33B591DE6EF800433FFB369332D6DD1FAB1AD63 - -Len = 1915 -Msg = 5C6398D4A6AF6BDA6C973B04F9E7E8A2800370250D1B5E9FF3595CC651BB246E73B0BF208E47048415EB6FB3C09CE3ABCB7C996C06B40E18EC35427AA1E5CF64CBF6F0C07B02E98EAC25C141ABE224D3989C3A34FB6EE68934875A40BE3BA10ED0BA7DFCEDE81C6B7555F6E5C9D4B9E92436E478D1169D436134F618201027B8131575CB8F057EEBA566FB8A1680072D32E60A978693FAF9FCBF82DB37B91F174FE5E88D625F2017B61B5DB7290FC6583C3C933B1B0A745C30D780AF04CE6E777FB258AAD030B3F10EE1B4FDE47026332A49B9C9DC5586133C7F5D69A1EBB0E70B841F72FE1AEA8A7A3D39E3C9629320 -MD = B1FD2E6E4195114FB6F9F1DDB2AD41C928AA11CC53A8F77E9927E94EBE2D78F9 - -Len = 1916 -Msg = 893576B07D2B49F97BC412C47E1799E6C620124B69290F2C49EAE0739988CD48926A6EF536BD3B0C970A060426BB360FB5793C8371E61DD70C318A76FC993C77763963831659394322E579EFC766835F966B0CC188032C8B6856D02BB9FE5FD7C388914D72C2AA94331B4AA185DEC2B3270C6B1E5463DF02CC4C9ECCD42AD2934D4D1D821615F965348C0CAB875219A61C1E8C12F3343443A53A66699180153B0525F95D2E3A655278DBE91C09F102718A90B7D5A4ECD6D237CDB9B0154E373EC89B6C1C705275B999D8C9A1D2F1A8D075038DD4A98EE9E156715CCED4D859B4D56B41F8767FAAE886CF5E67223EED50 -MD = 1EE0D360EC0DBA70DD6F0335D345D7F5772CA6EFB36D17225E3801D0EA32C9BA - -Len = 1917 -Msg = C67B666E8F9A79D6B28AD45690009B68E78C65AC5B1D932B4CA91C320DFB4A5954E5E2994F9E52283229C62E91F030DDDA4FC3AE227A85BA7FBB96823EAFD70E8B98D299A40807451FA5778BD0F055B2D20FEC21FAB0D9A6D5AD2567A5974F399F28019F45964DDC7055A49676DA6E307E36A098C9BB2A01154BF7CF6D0981EE82C8EDB82FD36989795FD8638D7EFD1A9B96612AC7DE5CB00C29FF0280EBFE742D02C22D0DCB0702EC1246FFF5705C14462850E2F818A9FC8A596E5FD6C8BDC9B947BF76A5BE37C0727A8922A55D6BA20491FF4D6843EA0154DE71FD6EC129D38E2370124B5A26B47B247D1D7C3B1008 -MD = 7BC399E1399A5A848643D85052E3884CEAE68D9EB914BA42DC1750CAA317A6B6 - -Len = 1918 -Msg = DA9269FAE1BA9E76EED4C864050ED952DAFC19882DFF9A3373228B31AE0190E601E36ADF1E791453A1153B48EF19D903772E062E47F6D887341A213AE96FCEC5CB9C2022A04A469C41D06DBC71CBB5C6BA2583574878B84B62E368BEA0E081E0304C7AB441399702536AA5A17BB13AE368DEBDFB83F560E65C74630DB48B146166E09F3AA31D8B10F10F4670EA60EDC1632CA8580A2345C04173F469B249319451893A198640AC2CB0A7E3472A17A19169C371D9991D2F859238C4F9EFBF980E05F26F3C9E172D36B8FE61D4337B4E1AECC4039A4103E7D2BAC1A7080F1932D8FA4FA0A2075C56B2F6BA83B63CE9D39C -MD = 8648244438563D21621A4FBB382C5AC56AD060B926817C60F240CBB932708C60 - -Len = 1919 -Msg = C8C9D74ACDB42DAFFBA0B1734BEB5C54778D7970F2226BD9C8EB24E3EC1AC11E982FA705F0479C049A9B6046E85A269A258C104CF442C8156D431960D021A533D73B709B8D212C221AE2D03EE7A6182117A823A9E3F3B4CCB43FA0DBD5B238241CCCCCF05CE5C62C3762237B6449779635D992D2FB730D2DD382B2E61CD5F23F680F848A4162D80010E87DCB4182F192395D73B93A2040C0FAA3E404AA1089E40E1B0B08A7F08036CC5E4CE1CE90F1C10DE4BCD4887564A6FFD7166639C79588B763F95101A32AFB77F727C45BFFAB4C6238C04E837E513E12A88C74B940EF933FF7547D08B8ADF32F8CAD5F61C38DEA -MD = 8B8CBC3D98059270D24E594A746CA1D3044DFEF451222AB752788B0A0F626A83 - -Len = 1920 -Msg = 5FCE8109A358570E40983E1184E541833BB9091E280F258CFB144387B05D190E431CB19BAA67273BA0C58ABE91308E1844DCD0B3678BAA42F335F2FA05267A0240B3C718A5942B3B3E3BFA98A55C25A1466E8D7A603722CB2BBF03AFA54CD769A99F310735EE5A05DAE2C22D397BD95635F58C48A67F90E1B73AAFCD3F82117F0166657838691005B18DA6F341D6E90FC1CDB352B30FAE45D348294E501B63252DE14740F2B85AE5299DDEC3172DE8B6D0BA219A20A23BB5E10FF434D39DB3F583305E9F5C039D98569E377B75A70AB837D1DF269B8A4B566F40BB91B577455FD3C356C914FA06B9A7CE24C7317A172D -MD = F8C43E28816BB41993BDB866888F3CC59EFBA208390144D3878DBF9FBFA1D57E - -Len = 1921 -Msg = E1CE71B61ED330EEFBB09C280FD34A878F0378A0BFE2A046516BDA084DE38083ADCCBF42A6820DA5D46F1AB062B1CA433BED4DEE26F3D7A094F90BFB8A56EAC4064CFD3D5E5DBEA334D2984D4BB148F582B7CB64C82970AB0C4A947E28646E2742C1C8BC1C636FAA3A21216C2228E644FEA74B8E7CDD3DD006757317E1E5D4F2A67DAAD8D868D8831E36EE6BBCD7DF34FB38DF51DB43E26EE8E6C493057841F3085A6E825C4DFC8AEAC9A5B311A6E235FEFBA6C8F8D3EFF658639DBD957510DD001D2D18151118949B80B6BEF15F9CAD579ED30C3B2C95DAE83EACBFB5EDAD3A42C03DC8C8C7A713152CB065F28B537100 -MD = 54C342B49ED802B4392A57E8239E974384A7934A7F50EF1DEE1C5E57963E194F - -Len = 1922 -Msg = 3BCBD35851DA712C8C509A0A03388C743587A1C36055670DD0B5DD3144DA20CE739E417E7F197E72B91790D3B49338E667EABA7DAA04BA6046BBF0F1763787681BB487D690239DE655DA3031B7DD39EE1FF9C550ED6EF15E742AA0DCBF56D6A05782783A003E5CBFC272D3F71BD641C54215E8A6966A252F8D17BD5B208F25D7F8F91F4754D9B16184B333D2ED695483F99CEDF5224C4BF1F0F44323A9B3F801735DF8B284C072B4D7C3BFC31CBE1DB3FA2FB45A595B9C9FC8D98D8429861DB1D0EE3EA484C61F86877EC61AFE5DCBDAA38818EF002A4A4EE8305FB1109D3CCD222EC5F3B2DCF951A1B39FEBF19517B7C0 -MD = F148CED078AAEA3F2B079CC56D9ED1DE1A7371F4E057EF5472B773FD70088B04 - -Len = 1923 -Msg = 6C48CD3CE2E401AF5C680E91EAB0A386B90520022F017BF60A5B04A1D52E6618CAE48C0CC3A2D7F16848F9A372E4D0067E73E1183370220D73549E9C510F02BE4044761F82B2D9B227E059D3ED089BAAAB8FF61F65E37495A19C630AED17D8F42C5D24C109AF39E528856654835D0CBB2C55904EBCC2B95506EA73D11A68EBDDF0841F14092F2A4249EB9048BF7E26D4F929A0C26D1A8EE98D3ED6BA5D7E0E45E3A7C59435A7740D1D6D6BB638ABE271554DE4F7E88730BAF804F454924D33AF28FEF287FC6F50199BCB2207DE7D1C962D2E9555160D22DBE3C32FBB7733A669F8783F6551E8E5769B6291AD00CEDCCD60 -MD = 774DA79E795CAB0131828511CD8FB082163E5DC946AE3879F904B370C9084E0A - -Len = 1924 -Msg = C0F2D732005BCE3A7572AC90EC56AF2AA22B3349D2DBB534A4D88FC7C9493130E380ECF6B9244868F16DE465C08798D4D6E5087346C7AD26629C7075682DFA28D2FE387E99557A1C39A8AD790FE665B59EF80ED0ED784B30C4DD5645C9EC6510B358AEEC8AE20FBC8DBF0B2DBEA557CE15B223F33D9BB23E38927021DB61ABBD26DB50C4FCFB219EB7CD540BEC18D23F60748972C58F7F474EDD58384F1C3411D67ABC5B5810E95CD2648463992CB4EC6AC8EB63DDFF8BF6890A69B3249DAE5E7459A489A5B66D899ACC09525177E0DF731949AE98C327B942AA6789A6DA286C7285A791F0FB2D3EC42C2EABCADE008520 -MD = EF2AFB01FFB6A0F55AE4A71DE0638F3CC4122B30FAF135ADFCEB26A24B3679A7 - -Len = 1925 -Msg = E851A3020ABB0B3BB3D4A4020FEBCE6F548F26EDB8CACE828658D444701AC43931402030EEF8814002254E64ACDFCE8DBA162431F032027A27AFA93F82F71946D97BAA83AB79703DB230367952819951C068FCD0E30736B9D69F87620DC3EADD25F31C6206D7BEB14D0841CE44DFB75E69346D96CD9FE9B9398852F71FE25B1CB25DD7B8A96128BA039374397EE4AD1B22789D6ECA2C1CE1F3A7E637E2C7E78EDC880DB188D7AC6886FA3576DF4957CC600CB66783D799E57B7C4BF7ECEA78A741589B2EDBBACBBB0489F3A66F14529BF20DAFCB831A885F7C35016B768E7F2434D68A941DD86599C7A1D412D4142035C8 -MD = E4A1A26FD5172C8598A6D496CF6B719019B23FD6713AC12BF1F607D03E7CB2D3 - -Len = 1926 -Msg = B5D87282661F6A707A64532CA1FB72C7B80B47989810A15618A44CFB71F07D53B24D6D80C45EC2BDF485743C835F3C6B057DA0769F07462D1672A4AA6896B047B2010EF16C54ECC74C522FF44227F8409CB86F3C8BF488739DBF89F5B40477C48914764BB98E4A03561D74A5B3C11324987F0986C191B00BC5584EAA710CD7A9A1A44B108E8367FFC27B7F9AB82CDA038D38E36D4AABA71E3D844FD9D356AF4B8AE611BF842CE819582FE64EE26C5DABE4884519FD1BD8646A13ECB0D9B0B6F42C0B9632BE73B2C45A8912BCD70AE9F5D576AE77C9A1CACE95DD320BF9FD252BEC627C227AACE9CDAFBAE0748ACA750214 -MD = 0678F9B768526D91E05344BF6FEBE91C2AF3C4DDCCD9D73F7F13C18F9F6A6FC5 - -Len = 1927 -Msg = EC432C662CFF134BCA2CC20ADBB5A8AE473BD56F229107C5F5C830E5CBC92DB0367677304E4AD2949E93DEF6B5DDCC6AC2783ACF8AD34A8F7F8CF3B8C79263AEB131ED8BEB2958A593868F5E8163216B363865693CCF7B730F36F948CED775D0FB1E6A76727845A1D25F140F3DB68F6D3CA9F6B4D2985831E3287DA61219530EF21BD82BBBE28089D1E68A4C3DAEAF574A5E91F15A68AEEA7836735ADA78A2C5731CF1129C94398DDC0C2B5AE53E8BFEBD81AE08BB2B91FDB36C770C36FC77807486F19AE716114F61B23202F7540BA27EE2F72658EE6F8E81F11BDA44921544E749EEAB9ECD5C7BF857F83945D3FF8F8E -MD = 2E801DF6E7050063AD18A42EC17D680F982F0F4FE99FC343F459F60BA68A64C5 - -Len = 1928 -Msg = 6172F1971A6E1E4E6170AFBAD95D5FEC99BF69B24B674BC17DD78011615E502DE6F56B86B1A71D3F4348087218AC7B7D09302993BE272E4A591968AEF18A1262D665610D1070EE91CC8DA36E1F841A69A7A682C580E836941D21D909A3AFC1F0B963E1CA5AB193E124A1A53DF1C587470E5881FB54DAE1B0D840F0C8F9D1B04C645BA1041C7D8DBF22030A623AA15638B3D99A2C400FF76F3252079AF88D2B37F35EE66C1AD7801A28D3D388AC450B97D5F0F79E4541755356B3B1A5696B023F39AB7AB5F28DF4202936BC97393B93BC915CB159EA1BD7A0A414CB4B7A1AC3AF68F50D79F0C9C7314E750F7D02FAA58BFA -MD = 4EA524E705020284B18284E34683725590E1EE565A6FF598ED4D42B1C987471E - -Len = 1929 -Msg = F6D60894154B44006CADFBA9450BD0D46F297E634844235C322E7A06B2D1B335F69F4EEFB914B4674CBADD6AE48AFA1CD9BAFAF884417FEE5F36C54AF8C34B8AD179206BCB45BD858FE64A5E3884825E90EF29489DF07C69329CA1B4D8BB5E638ABB382D8255958057AAFBDEF0899A5E470FF7222DBAF9B66B1AACF9F407517870C45289A20BE83E673E96D0428B75C8C98A30A6FBB4D6441890ABC54C45529BC7E2C78F167D3D1DF034C360D101444798D0C9F1F65A3B7E3D9761EBB5826B81B749F716EB428D845C5D5B9F2BA8B263659B54FED4DAFDD2DE91DCBB0CABF7C70D827A37E0388EF87C90420CFE25167EE880 -MD = 39F926AE02CAB39F8B12154AF3B12269069B49BC99F03B38D5C5D4BB4060F730 - -Len = 1930 -Msg = D01BEC496170470B95E81ECE9EA0A39FCC640FDEE3DA2E94582BBC0D51C7E5FCCF7C10728D0CDE4397DCA66CD95281A998B6F0025EC854A0697D54E09082F387FB3593871F12B6642FBB302BB9AC82BECCD1BEE69ADBB25A82CB11A42D0CA2F057052286746BD93F70B3774E1AE0FCFDE5D1E870F0A0CB380770C1E352F2E9CB8958496EDF7389F9B894D7AEB78D6FC1933FBE6CA5938660C5EA1054EFFF2F17F8C6C082A9E776B0FA244020A0729BE8BD5AD4D683E9FFA550CD928E773588385CA8501EB7F47AD60D98AAC1B518477C78DFDCC2A680D1F596273972528CE90A68A8AE4D9D3152AB436003D684CFB83C9500 -MD = AE8EB492B8466D028FAAF1DCD8C84476CCFB845AF8892A5D7AF7D9C2F46CBFA7 - -Len = 1931 -Msg = F83EF50679FA09197746549D69559A19D040EB7B625BB41CBE543257D605E3329B19B65DE3884B55B3EC22A899079DEE016EF3D8D2BDA07D85218E0D91D1A604B71F97E7C77FB0D4E685AE7FEDB7C36344DF1EDA1879139E0E723FE5AD4DF1EFB6BB56661591ABFB17C4C8DCBA76342D9547CC2B7F0B8EFE5C6704307538F1794497B01745FE00C24E83CEC5ABDDFD37422A898FA04F546F66529D66338E9C16D70C34FD4D5C4695BA79091F6EFC5504D79B078994CB12238D11B078F4AF709F3B7AFCA4345307921570791F755EDD739CF5CD846476FF5F3714F578DAED1451CB9F17BF8931FEA89D693275B7A0FD775AC0 -MD = 46E510C8409C6BE2FFF41A951CC65633382B79451C0D9C701C2ECBF635CE42EE - -Len = 1932 -Msg = E397D0A65D8CB58DCA01E63AFB0E80D42DD48A722C042CD0248155DEB09E4520B20E2CFC093B1D19B60DAEFCDB7D5AC389531305570BDD10F7CEC6F2B7505E651880EC29022E954062E220626FFC2D0BFA30E4F27A8FC90110D72847562183A5AEF08623EF14EC1F760A11544A536342107675525276A97F07B84EF89A89BC6585DBF79C982203B26F1C73D5620D5A5AEA82DB45B87E2E2D096C70593E48301F7D13ECB5A6803A978E709754631F2CEBE81E0B24B00521AD7D1E749385944064E7B437C18C3B5EC81C40844D3EDD7703DE23BBC351EFE62035C20D6C4A0C051D06B88A51C0594CCA1923FB389BF63589AFF0 -MD = DFB5FCF50389FEAA3278E42459AA2E0728DEAA5F028C47988B0D28B79A2164AF - -Len = 1933 -Msg = 41FECDC28FF9A09A9A50831800EBDC57E0BFA56A6BDC15D110EEAA608BEFF84B87AA7D18DBD19F4B9AB3104FAD569B49EDFE479E42ABD108A0B3B46EFAFBEE1C36A4C46545F26FCD830156FE3A2413689DA4453B28FACBCB6D77DE0C9EF7A19DAE60F9625A833A77A39A58A69F2EA4FDCAFECD7A6ED8A2DAED0B5D21E5A72F2D2FE57CBE170DB151919ABDB92266C5F3D36BDAA93FA9924E7010914D35FBEA35B54BCF1C9A2A60CC5C7874ED873EE98B0542A4E63A1A9D6735BFBC27D108003F0A960960C38EC286C560BCBA0FE2945D43B571BE0335D4E0ED7379047F35B2B026DC0A158E9387A04BF369E1DF6E414F27D0 -MD = DE194ED39E2CED6041C0E524FEDC82FEC18A201C0B62535B13EAFEDE1596FF4E - -Len = 1934 -Msg = 7A869D4DF91F80B8A8B95AB98D919C84D51708E420A44BAC3CE15AE2865D209E4473A25093819173B75EC7D2D6760CF177301ABC5ECE66658BC64B0DC64B83E9B609CCF9C85F3A2EE13B48E1D79DF6D56F9D5FF5630ADCC4CEA8B9E9414717657F90511F3F6DCFB04533DA5B1989AC0637501C0B38C47FB0059B7C3A5E0843D51B7F3D50FCEDF32B7667D82696D457AEAF9885B332390863A0566CC1827B29C7FFB8B0E808625F41672EE698A892DDFBCA2FAA5912407C9EC646B23E8A3449D47DA8DD3DD116B6304D75667880F07D5A3E71A2A06B8E8781F9B49B845E9A778C422853F303E0FF3326FF14300ACE16BDA68C -MD = 6808ACC93464C964412DC678435A736F2E34453C480857B13F9C40DBBAF0C56F - -Len = 1935 -Msg = 7DB18BB52773D68C0D01A7D22F43EDE79401EEA2FBD6B8CAC5A27C095B17D757423CF06D69653DB9E8AB88B0BA9D7FF8FF9A7127D53B75816B0ED9E4D418DF5E670FCD67DD1129003B424307794B74E9C21A43CB77ADB1FD3F31980A7C4D955FDF54F9DEF230D560E0C7A0DCA0D8F4E50BA443E5BE91211A16D94CEA5D1D5988BD6C6B09E0E80CE4C84B55D3F9F5E584B30E2FD7C42DA1F07FD717A8E0F1AA80074C8E69990FBCB870022719C70B4210F3D538C3E1F96428E56522E9DEB3A33AAAFD71D06A16F69DA49A94FA15E13EE90BBA294E7A7D0FE376FF4B07596EEFB517074ABAB621DFA2F3F8099A167D2BD601B4 -MD = 49442B01046FFD40E8506F1CB42A8D32DF79A0538042BE5327177BFEBEA55407 - -Len = 1936 -Msg = 5668ECD99DFBE215C4118398AC9C9EAF1A1433FAB4CCDD3968064752B625EA944731F75D48A27D047D67547F14DD0FFAA55FA5E29F7AF0D161D85EAFC4F2029B717C918EAB9D304543290BDBA7158B68020C0BA4E079BC95B5BC0FC044A992B94B4CCD3BD66D0EABB5DBBAB904D62E00752C4E3B0091D773BCF4C14B4377DA3EFFF824B1CB2FA01B32D1E46C909E626ED2DAE920F4C7DBEB635BC754FACBD8D49BEBA3F23C1C41CCBFCD0EE0C114E69737F5597C0BF1D859F0C767E18002AE8E39C26261FFDE2920D3D0BAF0E906138696CFE5B7E32B600F45DF3AAA39932F3A7DF95B60FA8712A2271FCAF3911CE7B511B1 -MD = E4963E74AE01FF7774B96B4F614D1CB2A4CF8D206ED93C66FA42F71432BE2C3F - -Len = 1937 -Msg = F1672F20DBF2C8F24A2683F43D202D70C7328A600DE10802AE491FC2EDBD56B29138807A423626679B0F191F4948B1606C547A310052F325871F837C0DAF5B43485E3799952F53073D6823D0B69133619826DC50632438C65E32D7C11D402496FECA7553D8A4B93EB669D2FDF87ECD69E1E24AF18A3D8976BB63E33F48809673E390A151F0CCB0F2F551D89128F95B6B3697DFBABD98D4E176278B7034884EED380F5B0BC287DA7F28737A9096CB017928BC72B7CC603C1ED0B3C035FE49517F77EACF6209DDE29DC7495DCB29A8ED6ED86ADDA488B3D53685BABC734CD5BDBE2A9D4497F7B337A0B49C65496CF1977E356280 -MD = B2985C7F05723919A5DC9CF7C36AABB1E50CF33A6B2CD2E13FFF677599EE42F0 - -Len = 1938 -Msg = 1AEAF41B963F4372F9E9B283284F91E257A93A728E7DA3737990BF7F6E62F5A504034AE08E2A4B13A07B78A950BDC6C677D740E32673583E0E996440ECFF6F6F5E734FCCDF1F94398E8D837FDF99F8811319DFA90BA5F4910B757F9926DCEB0896B08AB66C874B5A272E0E590803B77F5D0189FFBFBEF81CD305F7A8749C4F6FAA00FEB58AD242D68DE4B100BB2C30512AC79A3168D25AD0AC4718DE8561DD01CE6F38262B835728A85853486357486978A311FF1009082D4C3FCB7ED3E759AF2E7434669CF569E1326CB269BE5F51E20F1591143D7503F64247BD9C36C65122C2702CBB4A9A097FCC0367C0BA13F607F06240 -MD = 000F1A90D02015E2229A993155C118C4A878173B10B3903A2F629BB65541DB6D - -Len = 1939 -Msg = 657A2AE32158D7A4F49CD42430779EA1403B434ECAE5229E8280AB3154F2787840F4E3797682B8194D95E0D2207D3C68E7F92CB9F1382C4C79D57E0D78F801F32E77CA71A5982E1D8077723B7D7A96576108DB019F9DD4F314313CA80EDDA39BFE9AA9CC60C9AC776CE720F625842C4EDC3CDFF27C90968B7D5B5F51389C4B7E43636882A531B033BB25AF7747E780AD316E71D4B95D90974185D00DE7A07EFD6B5D86CF06CC49D986CF3E70574A84EA183059C565DC8D1B2676ADE9983447423586C1486AA1C2E0C7958C27075842BBBBBA68025A58D35E85B3699D6CDF95758D088C74ECDB5980C7BFE1AD0F73E1DEDB8580 -MD = 66E2E8D72F628CC846B633D16EA6AE3A5A81DF3FCB66E49F370E1F8BB43D5CD6 - -Len = 1940 -Msg = F3B8DFDD776558056FA3FF838F1A97119A5D7A7D5B351F1BBDE608E59CB534AC068A86B37B41BEE9CE0E032948542F2125A89BF502612A813D83E3EE50559724EF21B0F25BECE0B0EC3A96D207C5C34505F0FC19484AEABA1129293530148C58379E00BA13FA7C241761ECCB19039224FBA9EC2EC1F7648AD0FDC6EF0ACDDE258F76F97D8049EF1E3885E835CC9A93F037763470179AA2905197AB76CEB0E3FCD46CD023EC166932CB65B1C11F08EA57AFC68D536F9164CEAEBD654C1170F8901C26041145DA94719274350C86EB5AC33FAC19B01E2D1B178C0AFAF80BBB4D6784CA00F5D7D58B0BC6D9DA5043AF55176886B0 -MD = 962BDC3FC270457E1D479B7389FE55A2B552893CD61B1ADFA09C07E098511D95 - -Len = 1941 -Msg = 3970E275ACB10C4632DFE4909D143EAAE1E2F39720B73B695E5C71613088D7872165C98A6ACBF09A746C05460F33EE8E00B1FA46ED219CE5C8FA8788297B9E3C6A96615970137839B03C352204CB21489921F774A16E3EBAAB9ABDF1A19CC6321DD6EFDD25C0253403548572BB4417663DA33EBAD92243E6B9E8C0F97B13B884126262409D2A20CC01AF3EC2F238CF51A1E3D7ECE9AC4A98C0446210DB4CC4993274494DD452D46BB66A3A528713480AED5AF3FBABF6BE979EF50ED443438F795A087D400282B6E0B5B52EC747DA0E2C5EDA9EB002426689B115A37CCDB46D6440830B9BDCAA59078F62BA0635360BC85EA388 -MD = F43A6892E684DEDED0D5C653EB13315C2129F5C686698206B610CD3BEE34E4E7 - -Len = 1942 -Msg = EEE6D0C949C72BFE8F83AC35A5DBCFB50181BA1BB3AD4F77E2636C68E1FB860A6AA0A0C21B6160A2453478C9C0769FEB0E7E6D122E67A7C78CB1ABFD0BCDD569ED8094FA1024E78913423150E0BA500615DEC54846F15F9E297E8F1C592AA7802F37E8F8A29892BADB5DE3E445946A88FD67A657A69B6B9098C6A6CB08286B04D541B88333E59CEB78615B0E4EBB54896E956682015FF77FBCCA79B1F68AD3FC82C9A56E5A68C00E4AA795C9C97EC7EE618D6E5D977B9EE1DC94E363F073D02FF9AE85554DBD7940441275C082B560CC13DEB402CD8692EA6C4A690321EF275862821558255E73BD8AF9309B735ECBD810C0A0 -MD = CCA23853CDE42378C3493B8AB9D25BAB7613FC92EEB6950ADB8260891A2706D8 - -Len = 1943 -Msg = E93187EA359EA34D538A88DEDF73F6DA1B62D445EA3C520AAB03D12B127123446DC72D1092EC3A1549E4BE4DC4BAF9D73511244D57A5D9218101353D3731D464510A74FAE679F346D9098DDCA12B9E3D23BBCF7A23617F326F72FF75F7BA6842D55D71A2220FD15F632225B66493220ADFD891339AC6C6D769008BFBF5A19E27D20627E16D5A445DD2C8DCC1AB54CF133C7109FB3FFCB6000AF08AB4A2C9161F883FC2A1FB7D0CBB5C748D6309660C1DA9E22ED9648E57346E02D1DD5D0105DA6413F4830A921869D869683E8D584175E65724B890CA53E7879F390C146CFD4E884BF681C58403944288AFA11B79ECA3F37F1E -MD = 803860F858C8064CA88A15C66420B9FAA14EFFC602B5C7762E8B0B29D010F480 - -Len = 1944 -Msg = 03D625488354DF30E3F875A68EDFCF340E8366A8E1AB67F9D5C5486A96829DFAC0578289082B2A62117E1CF418B43B90E0ADC881FC6AE8105C888E9ECD21AEA1C9AE1A4038DFD17378FED71D02AE492087D7CDCD98F746855227967CB1AB4714261EE3BEAD3F4DB118329D3EBEF4BC48A875C19BA763966DA0EBEA800E01B2F50B00E9DD4CACA6DCB314D00184EF71EA2391D760C950710DB4A70F9212FFC54861F9DC752CE18867B8AD0C48DF8466EF7231E7AC567F0EB55099E622EBB86CB237520190A61C66AD34F1F4E289CB3282AE3EAAC6152ED24D2C92BAE5A7658252A53C49B7B02DFE54FDB2E90074B6CF310AC661 -MD = 0F0D72BF8C0198459E45ECE9CC18E930CB86263ACCF1FC7A00BC857AC9F201AD - -Len = 1945 -Msg = 79734C970C947EA9B10A7909CD077AF990A1305F88F918FCEFA11266A5C6B6DEB5D3D3C1782F0EDCDD3C7BFD64B4B38C08F75BC13210261859B0D062C777AA1A8140DACAA59260781F27777799C462E76F59499B18D7978B717955BAFEF3476C626952B91F9EE67C2E8CFC0F61CAD2DB8BF1198EEE8DD4B74AE5D28A4617091A1461DE098F5E1CEA67B7E387BAADF0BC08D3F8CB150F388395BA926F2C4FFE923DE7218093FF709C43E300F0DB38E79C6C07BD1134902E768A76FAECEE6B3FFEFFC90F498E2BC78757852F6D2B4CF9B3EC44C185B770B39D17482C5A547C4B4EED24748AF0A54553392542EF58752ACB832B9000 -MD = 2F6DAFC822C4DA2E9BC74B2D6E0D22088C8D6F841729D9F6700497FEE6535FAE - -Len = 1946 -Msg = 471255C92FED4F68F468A69B5B71B02D688EDA01FB0F12227E8B84C10C80462126D821118F4882633284574456F49C7E1849C5044191748E0162FAF81F239409751BA227BE04E0D890CA74FC77B5C5887101EB09761B445C56530011E3518659C1521717A9273CCA06A7F287423E9DD5FA32DA7FF996EC5A629B4D908A4BAE72FCB3CFB4F9F27128EC9E566BA59E907E54E2FBB8243864ABFB6FEF98CCB4B715FCFED874AC30FE850273E53D879E3B41D5946011C60D6C18BED388E0CDBFD8B55D25533B7308C5A7F9B25D56602543BB74481E142127CEF2DE20287DFAF62375606557DB8365B81EEF89CE7E1B3D4DF3F1B01DC0 -MD = 2FFBEE3152719BC60C1A745B9A683974356317E6DADF403FBF4981F8F5F8CD3C - -Len = 1947 -Msg = F2A7F95A3286702B02DBA5DF8E6D9F76DBFBDB08A945A3CD202503158F7AD59D4A06F304CA6C1329523ACBCDF43B9419D612B0D1BFB9A764D0C1588C3A9302202FD730B85E38605119F9C0326C38EDDC6A126AF6388BBFE3BA486F4A5820974477259DCE99678EF608871DD08A6814001ED99CDEC13A87650F449DC7DA3F476BF19A5FB0D88AC65BE45E5A8B94CFB3408C371B9A4856099C1865047272F8252A69E0B4650E432084FB53E1E583BABDB8896EE9F7E037DC96C87787B5CC4F504F8C3E649139EB5CD2B4292EE5E5A31C7927DEB948CAF5F30CE7664702DE79537A46CE8C5EA95B39BA1A05870C487E781D9A549B20 -MD = 7A987ABA3089087D2D711BADBF4048EFB4691D046A2883B868339CB457E604C7 - -Len = 1948 -Msg = 11281730B07493309A2EF913FBACA2D4277B2A5D405925839553C7363B2DA90C60A6526AC86363CE6AF778A0CB7E4A1D9A7DD75E16A1DA94702EB8EB8382BBD0389D436D05B8EB303402290A43F240A999887C169B8726B0B02956751A6029C8C3BB2C07AD102B37A0C52CED9220B5B0FB1A7F985075C6D4C06500187092E09D8A9A1749262523196A42CA1046F01378550F60924084F6C9AB24DBCA521E7D6957411AB83B9FD856A1E08D9725D363F28B0CF032BDAED78D9121099366C7A48003092B3B94E97EF04512A9CA7B7968DBAF134EF08DB292658F624A54674FE7CB79F2BA47D90093C867F4F06D33144DF9E5BE1370 -MD = 9069F34181553A02D07D67FAE4581250DE86631302DD6DFA646EFB5601767738 - -Len = 1949 -Msg = E5073AF60BA51D98E8645F20A209416A2391A365A0B3A78A3601E4CD1130FCDC846B32622475A9B601AE33C8FA463D8D152C0846040A9A4BB0EBECA1B9258111E886996049F421133C7D21F2ADA0525A06EECEDBD5ED8FE310D34EF8C71F27C18AAAAC2EE1E38BB080851383DA7A684699F80C0A7BD51A0188311C12AD5A058CE5540ADFA3A425CA5D1C00EDBBE3A5695AD08258A796642220C5D8BF9144B351C3B5753E7EA77D46903A4733EE24B4989D797E2FC6A187BC0AB855CE71A650A13BF4B64BF5AA6DA142320E1367D37439E99E2FA95DEF311F596E682A01CAFBA051D515C31823A93B9C71970843568C379C073578 -MD = 1B7E5B8B8D24FE1BADEDA89CD5AFCA91BD5BFEB7D5B5E24091FD39748BE41B6D - -Len = 1950 -Msg = F5E87603D3DA08C7C37AD0FDDD62337B423B6FB0651236F818458FF022F7B9FF714E352E196C7DDA164708FE21ED7223CC0C4670E3BA27667ABE7027BB471562C83BDC247EC9313B9A7E5F5B17DBC3B39B258954814813C427A9EB3234975DC3D3536AC42FCAD7C18435FE32A5D5658DB28BE1E61451137C677FF36834188EB6A6631FA27B2F2292FA07386B3978462FA263EBEB85CD16F30A0835512693AAC397C55E401808B124B5C4D1427E4EAABD826D74824C036E857250FAF95BF5011FAA9D7EC93AA84033518AE0E2C283DB10129B43E9B33D47C6C7C8909D58C18EE95E19497E387ED9646826EA2958A7D4BD07029F14 -MD = 86FB2DA4B4885D300BCADFA6D37CF67FDC859BA8AEAEDE0951DC3F49A0686D60 - -Len = 1951 -Msg = 39696823C4BCC5F0D504B14D276F56B130AC9117288C81B6A8DB585A8CC436D300DCEA5C85118F594184128BE8D80AE307DAAF60E42418A34A626D4CABD960451656E60565B6519DC4857FA9D11D2EF1D5D162D95AD2C7C806218A00A7D8B71F0C6F2106173D95C77EBC8922A9C81816283504036697EE9915C39F844E2BE638D6591233A87995F98CF3433DD47D0A4613D6BA67B4EF77F855D31659C25C345CD6FC3ED635CC443622821977B46D56EB45062D4508BA1210F7A70FD01A2E03DFA5134167673A31ACC4A42ABCC1DC9AF7A409508F43D99163F604F3A32780EFCE330C03A1CC9BF5AC88092C914A23A27A96E5161E -MD = 1EDCC22D1FEFF34B4BE03038529243E789BF5E6003F01D0C9B3395B19C192EAC - -Len = 1952 -Msg = 2EDC282FFB90B97118DD03AAA03B145F363905E3CBD2D50ECD692B37BF000185C651D3E9726C690D3773EC1E48510E42B17742B0B0377E7DE6B8F55E00A8A4DB4740CEE6DB0830529DD19617501DC1E9359AA3BCF147E0A76B3AB70C4984C13E339E6806BB35E683AF8527093670859F3D8A0FC7D493BCBA6BB12B5F65E71E705CA5D6C948D66ED3D730B26DB395B3447737C26FAD089AA0AD0E306CB28BF0ACF106F89AF3745F0EC72D534968CCA543CD2CA50C94B1456743254E358C1317C07A07BF2B0ECA438A709367FAFC89A57239028FC5FECFD53B8EF958EF10EE0608B7F5CB9923AD97058EC067700CC746C127A61EE3 -MD = DD1D2A92B3F3F3902F064365838E1F5F3468730C343E2974E7A9ECFCD84AA6DB - -Len = 1953 -Msg = ABF669BCDE5C63620ABBF5E74E8C613BE25B9F7DB855D2485FA0EAD7D46FEF857A755DA6F1ABC1ECE8E83213591C6EF5CAB3C346DC317332EB35A0127F1E833A945BC260FBF9404ED8B4A75B2A2C9D8CD69661541873B3500847861C803AC25208FDA7E896DF7B586FD018EF021768F43AA5EA0E5861843AACE2847263813BCA7CF762E6BBE72468A688A0AF80E9A73DC11C74524A13C0E8B592EB8077F18AEE77D0F106617799187EA3512427126B59904A5CDE4AE6D20034B6DF59C21DAAAEE7BAA7D99B13C35B58BE23406CC1D276A65042E9E78BBF42DF8AA602DB2BE09852B8C19700CE0D7519948055EBACABBF24EBA16E80 -MD = 68D695C2F6837410ACAFE318CD6E1B9F44A84A79EC8639FB10CB07ADCFC699B9 - -Len = 1954 -Msg = 16410D74CB95F744EEBADF9BC50688811C4AC9131DC59AA3761DD2DAFA8A2C02E3E4021B613B3E971CB5ED40ECD2161B3AB9161D8E30F8A227F497E8721A88D67FB0712639823F824426FBC1FF08E27DCFD4474E54F9E6B4EBDD57D89BC3D5A847C55C2AA1002A0C0F653DD5971772650B4A9AF6B2358B5C5845531446AE4DF144EAAB797BE5D990E22B7DC582576C4FF8ACB3EED02B96948D252C66E8C28F043F9D176772AEF45FFCB61C85035ABE67D57E9F4EF7BAD93C39B4BE09682B158FC43A591EA7C06C456F6651D2C6562E1B6086E7A27B135EEE694E3D2AA07D13343E7BB2505E15FA8A486F114E1F5DB4D8D4D8145600 -MD = 67E7CF42879B9EEB4A1E498E224497610066042875BB8DF696EA8C5F6C0774C1 - -Len = 1955 -Msg = B9E9D8B68C875D73D858308A6605688E6FE70FD52893AAF1B7BDC413892E3FCF4A43AA4CCFD985E0E73EA2AB52545B2DF7170E70FD275649651A0FE095321E878087E256DD3D9A67CBAA1845E7384F704CAC79EC12256CE217027F27536E36F8CD4F12F862BF5AFA786861D27627BB3AC4460426CD2F1E847DE9C72B20607158189BF77F2D46F22CEA2E4436CD9FDFF7E296D6864F47045F4794DA08F0B02D370296E206C16FA311CEA6E2F6272BE995F81B291B70534EE6D8932B606219784145B50B2C67C67CFF06AAE6294FBF282780CCB522B61E9DC2C8572782FA3B90981D63280E477E6D920B6249181206136411D859C020 -MD = 8A29310E7A7D34DE0EF9DD60408B5DF1273491E779543D594776C7DD86C25E17 - -Len = 1956 -Msg = E71727BC500E230A97CF57873E425E5901107C83F1448440DA95F4018D51C486FE25C39EA3D361E199DA66198851532D3513A9F74236BC02F0647A292A57C33CCA61F4ACCB32890BC94894EFE36007E3506C1E89D495B39999529DBFD62ED78B8642E1A7CF4D478F955D0695CD506BD7368675100C35F12D679B6F99F9E7F57506F0BF13DF269141EF5E746D57FB445F3C2F3A95F7AA55378533165DDA3748F8E804C45088AD748CF2DF7E8E5ABFCD4A36B0656D7C84C231F3F38D7A50F3593BEDDEA2D8414C1EC538D243E86AB1E51015DF0F0C535F96FE3C63604CA0BFC30ED6EB8AB18FEEBE0B18FEFDCCF202BD322277461B80 -MD = C36DC295E2E526357CC8A6C7BA7A321A55E049A7D090D94A0966507FDFD87ECE - -Len = 1957 -Msg = 5EEC164C54FD4B1DF8E215DFEE8F22A9AC70FF7E96D92EFDAD389EEF1F0AA918DFB4EF1D714989AE6BA1DDF9D87DDC8D04981E6DB5C3AEB569E9122F1F6E608D44F4661FBE39BCB9CB9A6968F7670FFB67BFBCC2B328D3C315491E7AE9F8E28A501B28F58D9E6C261FA7CCA6E756001217F61D561EDF515667AEF88E6C7639E0073E7DA6FEC27AD73D8ECDC408B0448788289801CFF6F4322541FBBED19FD72D5C6BB2D3358940B40AA59E1753CC8278A479520BE1C567A480D62BC75AEC2B656DE8369E2A00D4C426DD556EFE3C4531C8E2E8020862EFCF01D525A04D7355A56EDA0D09EE21C3AFE10635E824B9895E9C723259F0 -MD = F09BFC8FDC52448D77505BADBA1CB7094F7C74F9F0447EA022B615E7E9B5A0F1 - -Len = 1958 -Msg = 948BCA040669ED34E540EFD1CD355103D23B4453AA59908627C6F3B21CD0F5B0E06E8C90CB4DAFFD958A2257BB2352A6F20341F6475368E17833DA438804740AB547142D3C62DC9EA8D335CDA93E2BC5938AF59F7A70222F2BE15A2F2341F92BB7A4BC92BA10E16EDCD7884201E44C87E74F54C4B210F40EC00C046A59AA165C88DFA6841571F86CA8A3EC493EA3B20781D09CBBD1BF3758FFE56FA23ADCB16CDA95129EB525CA86AFD9CEE8E0C76B3AC30E39AAE2953D7E06DFD566B2B530D8CE4C0844193775FA86804454BEE5E97E991E0CF5961F934B3BA2B34B731DA477AD033DF5D5BB944E811B4A9DDDE5AFD0971515CC40 -MD = 774EC5C589DBEA39CB31B0304156C4FD73511905BB0DE510932CDA9FE62E606D - -Len = 1959 -Msg = 2B344C1DFEA8F82F33004C08B3C41F31B584D250684DD642BFB736F6B47B6CB8A0694BE038469FFED59C97303CDC5B8C8628159C6D4A610849CBE034AC2B61D1CC3B70FB8E19A6E4408AA9040B0281F966AD20483F617F06F071C1885F37D0C539B551D0E8B85CC17024BF1EF07D98812795E623B426BAEB12E4406625392E10F598E257430B51A4CC1AA6EA1D9BE8DD00E826A956584BD56530405739BD8BCFFFA43A0B94E77456869E730CFB7C674F1BF78FC3B282C37E16BB45C1C6664B16322265FDC9B1F23410DC1BC83CDDB0A4100A24DBB82981CF81025761CA8E69E8A5D3FBBCD2E0BEDA902B6DF7E621BA1957CAC83E56 -MD = 24CD9C35EC1C8E672F01A3D19826AB29AB9CB8EC852577E093DE85D78A4AD7F6 - -Len = 1960 -Msg = 90B28A6AA1FE533915BCB8E81ED6CACDC10962B7FF82474F845EEB86977600CF70B07BA8E3796141EE340E3FCE842A38A50AFBE90301A3BDCC591F2E7D9DE53E495525560B908C892439990A2CA2679C5539FFDF636777AD9C1CDEF809CDA9E8DCDB451ABB9E9C17EFA4379ABD24B182BD981CAFC792640A183B61694301D04C5B3EAAD694A6BD4CC06EF5DA8FA23B4FA2A64559C5A68397930079D250C51BCF00E2B16A6C49171433B0AADFD80231276560B80458DD77089B7A1BBCC9E7E4B9F881EACD6C92C4318348A13F4914EB27115A1CFC5D16D7FD94954C3532EFACA2CAB025103B2D02C6FD71DA3A77F417D7932685888A -MD = 21BF20664CEC2CD2CEB1DFFC1D78893D5CA1A7DA88EB6BFD0C6EFCA6190C9E15 - -Len = 1961 -Msg = 1CCACD735B6D80BDDFD9F35303AFCE91279D5B500DFF2A3E43E0DF18BC47A47EF28F25097DB8D0D46A714F4C9E45819AA6B76D0CF93CD40C58EA79E84878C8DC3C8235F13DAF55E1B0FEB2A8ECBB6F58CC64E5D2150875E9732154F6FDF18494C92DAB65DBB8C607E91EA876A0E69DA35EEAA2F76A006D8C96C16C58E0EBC4FBF425A36BC1D10372E30EFC4AFEABBD8A41352F8905A8B206A7415F970381B50F555475856C0F74FB68F4B20F53C959C7D4F8F9C6C4442890BCA2485FE72F1130A496EBAF5D1BCE106B1CDA803C443D0069E1F9B00F2CA2DD2FFF9BC3B72970C27F7242E23E44A992D77777E544BAD9E3FC0E86498000 -MD = E592B4FAF6EE646BBE0073BE90AA42AC2FF297AEC27C595D1B48A04B5CA3E3AE - -Len = 1962 -Msg = D7F33625BF8D38000F44C468F593E88028F26DF18E25617735C7AC39B585C552D1CE84C84F75447F9F75A38115C0525D65D60786CFBDC9B11465BE38407948044BF24F6010C959FE222E86285FA829F118DBE44B331C7973BD32A5821A303078454A8C694BB36206A0EBD9186448451E65476164F4D8617DD55D52309738D7E3EF91BC21FD4D99B746CFE60236D44B53D17D7E28CB09275790184F86D71CF52063130DFBC615CE0EC7F7A2BF9E993D4C5137518079A29D75F198904DB796EE3C5F9814F4112DF210A9967CDB0571E353E5F7AA5B472B725B156BF43860F8C150A5A8F6A545AF9C3ED4F48BE4C65F961EB542795B4200 -MD = 7DFEF57950027BB14946093C201DE50282793818A0DD5F9DECC41B993C55945F - -Len = 1963 -Msg = 94174FF8C5D36489C7E6D98198D1C7AF45147D146FD3ACEA280A7E316396605E822ED71F82BBFCC51A235267C58CFEA72A69450287CE7F3F9B915AC11B18558890F711D3B6DEEEB362AD037B39A79C7D213FAD77DCE5D23BD1A335D178EA70636DB86988E6483A6D0D9957EFAA944822FAE8C1E70ED42BC6ABAD56E93876BAB5F3BD11511B51A44A6A44965E65A45D4334B6A44050C86318D1EFC235E443532582F6EE13CE5DA824CCE76F56287B5C6C3711EE99ED602FDCF397FC0B629DA4805AB7DFF1B503467C1732D77425C4E31549FE21FBF5FA67CEAA8EB9B8F44202C4CE0DC0CBDDAFEB38866BA57EF156371A809B21CE1D80 -MD = B1625556A3E6E5CF0254A10BCBDE1C822FB5BE11C5C2E770FF91A41C4CE63801 - -Len = 1964 -Msg = CD5532D4872E63E8DD65445D2DFF5E5F98F5AB898C51BF15F3B81BAEEF33FCAB207DD00CC4489D0C6C1E55582793A7766677EF55004D12E642F30960237F733B5C0039F2EB395671B006B694862C1ADFDBC21F7BCA7635933E58F8ED826EEA0340895CB0C9AB05D3E8F70CF561F27E794467C9CDF12AC6AAD70925F3F192140FCCEAF88A10528C39FCC14F5CBB3F8394A576FF0C2B98CFE390F7645C1DE0DDC02D3FF1831F7047143F001791F7C9753D8900F554AF61BE43A4553F02860B2EDCC4EACB5591B05235D299640654A5EE4A38B5DCE6447C655DF36C82602FB9383F04B1AA6FFB495F101B4BF9BC55607027A55BBA536F30 -MD = 7BAE739A96AFA20D183A1F516D539CBBF8700FC3AA7B2519B31478029B56B81B - -Len = 1965 -Msg = 6EA799C47249BA1831270FA6B7235587C4F04527EF854290E156DA1C494DE0E65A5F6AB9A257DBEA55717A3D0D127944585C5BAC713D35A6AF8C8FCD5B0529A8684F6AF238FBFBE31149734EDD251FD4AE4148073E73157F1F7CF6EAD5366B6AE389D20EE9F1AA425E46C509C9178F83EBB697AC71439A8B9664810499315DA0B01DA01752D78D6C0F111FE5E4ED772688C70EC6652C29916247C95127AEAD9F585FFAC7E2AFD753F8F8E7EEA44C93377FB945BA6817920A8D763D069E73B0FE1B7059B88C43C3DDBC1AB94BAC3A718AD48F72F2E6303527046BE49CD2BD452FFB3A1F26673FF6B8F5048AE41F9DDF49EF9522496408 -MD = 1F81CEBB620C8F6133BD45947E7C8CEC8C7FD095A3EE52858782EC8527D5A980 - -Len = 1966 -Msg = A1F22C756A6CB226E7FAB31F870A4E3721035F9F592F429D56141D9B73DD7A09BE3DF7AFF6DD16E29C01BBE00CBD4F4D681EDF5E2173B51F17F8A40F54E5D9F02CED20AA341FD48C203874D5EBE485554221A8C4E9C20B4070C688443A48D31F479B564071AC2F79CCBAADFA8C432B61BF9F767AC5BFDAB1E747A1D8ACB0761ABF58DD8768F1F2726C97ED5936B0629E3E1AA1FB581845179E5542F84523E3E71212E1B3B6843D9FA31A2B8C6FFF5A71B3E37D6F1F6A9A904A500BEA9F9650D0D6F6E9448FA83BCAB431D26212E057002884BC55E908F59A90275C5E3E53084260BA75C3955FB76DA67072C20477037BAC0159BFBAA4 -MD = 600115FFF20B0EC03E4B5953EE54A3D9591D0B22B2BD13365709566A2D829AF2 - -Len = 1967 -Msg = 81809338942312D6009885462990E428637F38E8E692E23635B052D285C393B1FE82421747432266CFAEFCC25233A4BD1F40B95D1244A73F48F9ED0BD418409A0EE45041FE4E800C1AC1A886FA26E91C3375FC9A443D4C4791BEDD8A562569A5EF11AD5E5FCBEF3CEB4C8D6D7CB62A5CB373E2FDC17074345A5E51DF0B363F70DD7A286685489101622FCA652622ADD70013C694E3E0167001175F10DB2EF0E442071ECFFA676DC3EB76D8CCADABB493EEB209967DF3A526CD606795D3B52A495ABAA26750D6805169F81BC840C7E7398BA977AF73AC0664384313747DA5C09C312EF2594F28F38B00A8FFF56C55231B8EAF0DCDA6F8 -MD = 67523ED38C39C0F7951D87FB0DE9A4D9FF5A4E8E637EBDAC668D38C70D2D38DE - -Len = 1968 -Msg = 2969447D175490F2AA9BB055014DBEF2E6854C95F8D60950BFE8C0BE8DE254C26B2D31B9E4DE9C68C9ADF49E4EE9B1C2850967F29F5D08738483B417BB96B2A56F0C8ACA632B552059C59AAC3F61F7B45C966B75F1D9931FF4E596406378CEE91AAA726A3A84C33F37E9CDBE626B5745A0B06064A8A8D56E53AAF102D23DD9DF0A3FDF7A638509A6761A33FA42FA8DDBD8E16159C93008B53765019C3F0E9F10B144CE2AC57F5D7297F9C9949E4FF68B70D339F87501CE8550B772F32C6DA8AD2CE2100A895D8B08FA1EEAD7C376B407709703C510B50F87E73E43F8E7348F87C3832A547EF2BBE5799ABEDCF5E1F372EA809233F006 -MD = 6472D7C530B548E4B47D2278D7172B421A0FB6398A2823DD2F2B26208AF8942E - -Len = 1969 -Msg = DBD3544D800AA1089CBB836C48569B2E763E156D6A8F09D6BC6744334EAF929455DC50F1EAFECC039EC10539DB8D8695A60FB242C96911FA4A3CE955BC7A46C4F057C58B93633BF80047D4450D664461C5D3D4DE011483710E847AB548BE8C9D70296BDE75EB478E34FFB1C90672435D4DA025C15EA940C8BA6C2C6E15FBC13244D706395EBE5DC90D48A9A4C9F0FF0269E7DD3B352CFD0AB10BB88C4C5CB8A822B31F1541486138DF7B212B522AE091FBEEA721E63EFA3000487B0A52BEA62F15ECC44A2BA2DC8814075CA990A7EC45CF73FF21E7A0B4ECD683368AA32032471DB5C80FD3EAED54757BB930A52AE0911940784B2D9080 -MD = 85B9EA2081FD048448E22767732F6B0F7C83CD406C9E71E27CD8C45ADA64F335 - -Len = 1970 -Msg = 0DCE440272E7BF0E8808D973FAB447897D8E2437FA6B38F5738B9BA24AEB92DF2AE7ED077BF290998AA8A53355AE2B54BE1834EB453380DAA81C8A9ACE210DF4D5D9A6F303C1CCB3CEE10AEB826AC172253869B56E95E488D5E315BE56BC46F7572CAE284B6636B67A23986F35D02D01E28A092899852CCCFA3AD3575FCBC7376BB2F6F7C76177C066ED0C1E656A21DD2B8AA057BE4417F09B81B94C17EE37120426FD2FC9C8A146C85CA6D6543EBFC658D408DF7D18F1987AEEC78E8CD011DBA6DFBAC87D9EE4756759E15A92A9177AE040F5A2C3E92FC508E4F3D623D84F8395C8BF68DA80EF9257E74E192277CB1DA02FE0F8662B80 -MD = BBFCADA17CD57385ADB21014A667AC8301728CB25500413B6C8AB7B43968F8DF - -Len = 1971 -Msg = A2F6C9FFA8253C61D6C8F78BE1237183E4B65C253EA14132A79DEAA81EF92F5A6C3D9F29B0F938E3EFF71161962A8ABA2FEE2BEBD3A02F8573F92525F5A98022C41D3D4984941E04D02040A8483F5743BFBDE3D622F64E53CEA89B5A237F1027F6D27A8B4046FD5366DB8F4CC056C23280B9AF8D7CF39E084E42762C4D3175D2B8CD9BC78229894CBA719201F4DA580034305AF981E57EAA123FF1444CF930AF1DE2EE6171BE5269C714BA85D15E6D69F42BC3448D993E82AF6C3372B0585CB51E39282CC5675677EC7F09E1890BD98C2618ADEB7C5BBAD4EB3FE58ECB44F8A4F8255E0A6129D739A757E79CCB39EE6748BBCAC21EBB20 -MD = C81AF75ADE43E296DAD8BA77A656C6A45F7A66EC98589885EC0C47D78B32AB68 - -Len = 1972 -Msg = 3B9779B86531629061CFAA92407403174AFC68A88CB78D3EB1CDE576BA91E9BCD160CA18C43C1C16F9ABC6C391C05704506710FCB8D0E2E42EBFE764A53E78721B1D2113AA21127BD90C263D4B4A8AA4FB2635D29EE4EB6FCC3CE26BB0B14926F0001CC3712CE5E18E21116029ABF3F61E72A7FC2E5FEDE35741E86CFE51444600302DB629893F0731BF6D2884AD972F36A53F9982669EF8E9792E7FE4FCD456C8DA6AD11A176BFBA5C0C6C0A822C37D085A610F9510F0560935961BE285E80002A9D178B9ED01127463B72000E61B1A146E78B815216114F777041CFAB127962D0B1159DC9B3236FDD03C2C401C842E99B9A433850EE0 -MD = A4C2501C5318159AD854F5DE7EFD1B8AD264A6220F542FF3756499F3F4C140E4 - -Len = 1973 -Msg = 4460F6EBE4C0F0C89A96962AAAF68A01064C41E45BC3B0C3073F09319F29EA541F1F43F27008DED6D1EF1F0386FEE37C05E09C68A51849C22891575FDD0ED0E632EF818A875EFDB7D132D6E8F16946BE22C6294DA34288ABAC37FE8CFF2E5BA5FC79E6D5FBA3418F6F0683F3BC4B8D1880C5B7A716593615ED64A1A84FB61B5B29FC773701E6B60D96F4CA628ACA5A52A490439FF6A29855EA58D7D118BD83451AF3685A216DFF00A8179237AF0DE8D847117A6E834AA00DFF30748F31643D774EC6647961E446D7AAEC1CA5C57FA205C3C66F407A4F629A7A2DB1ACBE20BAB9C41F6019CCC2E07CB96567291EF53878BCD000CD1BE3C0 -MD = 80F74A0AD29F4399AF8B647A64A842ED03AAF51AEB8A6F84B013BBAE42E729B6 - -Len = 1974 -Msg = 7765B5933AB981AD4263A6313B20E75F946BBA84B3DA7FDE2C108E1F45EC9443EB2159E4CFE6F94FA71A46E14F6A31E87CAB6A46877DDF8F8E19E62621D27B2FCB05FB817E9B325993D826D92CD1711A5DBA1315FC53784B0558873CBFB903447E2A24E0CD84A84678CB9CABC4189CB8FB2E1AA53E93DB4DEDF70CBDAA402336E5AEC36C5316D124DB57C4FD68B63CC46016DEF71D7D8D04E988F1B3731F0822AFC717A036A54CEB947244E208A21E4D61FEE25A5CA55E6F7DE52A95629F379CDED7C9D5EED4F44D215FA6E62BD55B390AE5503EF2666AA564DAA2A4122B64B99632DE6095EB1DB5B92BCA0AF12E041B7939B96B8D3734 -MD = 1A301D333E4AADD513AFBFB77F42BDA23FA48D1BE28D574713C1322EEDB7B3B2 - -Len = 1975 -Msg = 17D27BCFC84896AEE10DF3866AA3D8A18783644307467341B3D585A544ECBD50573710C72D2C2639545EF16BB6902505A556841E7141238E5546384DE52F1E3F56FA342AD0A3D6315BB0565E67DDFE47C9574078CF7AD385082E310B3E14CCF9C32D0F1CB69D3A19668288425287263A899687445E4B5A791186494422CD40ACDA3876E51F8BF77BDCC709864F60D15A73DCBA9DFE257A30CED49A76724643C5E8F8D75E5B34066116DA94EBEF91C52AAF508C8DF1EC5F982227C95F7BC0CE2BF0A712AD48F7E862C61FADE2289866650D311D4213857C4ABD6C2CFDC1C89C7C450951E3DA5557C0EACDB218C97958F600DC7B22746CC0 -MD = E9094D7D63CBFABA4AE0822D2150B83CE91F8420713932C674251C8F49DEAEF0 - -Len = 1976 -Msg = 721645633A44A2C78B19024EAECF58575AB23C27190833C26875DC0F0D50B46AEA9C343D82EA7D5B3E50EC700545C615DAEAEA64726A0F05607576DCD396D812B03FB6551C641087856D050B10E6A4D5577B82A98AFB89CEE8594C9DC19E79FEFF0382FCFD127F1B803A4B9946F4AC9A4378E1E6E041B1389A53E3450CD32D9D2941B0CBABDB50DA8EA2513145164C3AB6BCBD251C448D2D4B087AC57A59C2285D564F16DA4ED5E607ED979592146FFB0EF3F3DB308FB342DF5EB5924A48256FC763141A278814C82D6D6348577545870AE3A83C7230AC02A1540FE1798F7EF09E335A865A2AE0949B21E4F748FB8A51F44750E213A8FB -MD = 2AC7FF80EE36D500995C973B8746D8466715E6D8B0F554AACB5D2876D7F5B874 - -Len = 1977 -Msg = C8805073A9044F80741F09AF69CAADEF2A17B56E785F262B7BE09A27C1EA05A4D58D04FE84F513CA24E2F3F323B20FA5427F0D8D7143B424010EA901A02D5969D8DA81B99FDF67F3FFC7DAC9AF010C7EC6C454CA5512116CCBCDAA15DF47C4D55C58F9B10724D3616AEE9B3938484227718A458A9B33440E61A9569F1E99667BD26D7C70B689C1EB6F1C557F689BC58FFE274C21E4F88C9660321569A6ED4A8CCEDE6640B4BA4E8ED6968DDCD5CF3FF1EF6DE0F036CD0FC81B7DADAA4BC7FEE9C0AE62AA115512F876FDC8896EADAD48C9A6123D6D8755B812D19E77B1A40C5F973C4586E774BE02F0AA2C6F62B1617D00F0EDA15BEE6380 -MD = EA00558AEF726C2605077D6AEE03D76EDA930A53A62127DD82BBE174F45E1E2E - -Len = 1978 -Msg = 187F478A37386BAF26EABCC1A56AED42BFBE0FAE4D858405A66DD88637D1CAD7EC3E1F7DA226DAC75FC33686476A29B7427544069EF6844C1E9F5707F24B671918ACD172F352AFD2F30AD91289D57F20751D58E23E928B07CF76E6617CB251814D264BE2658059E0CCA41C08FFFBEA7803DCC6E125E5092D349EFB0260FF0BFF9CB8A4EB7D82B195C4FC17F77F5641AF9FEEA9ECFF4682856638D4F12105DBA8755009269F2083E0953F3FC877D180B253F8F5591E1944D13C83776AFD8C7AC861BD5F083A2078C65B51B4ED174B1F57428CA24D798C12E724911618C4E620A7388EFC719A647DE1586541FA690BC1E1F2F2131B4FDC0C40 -MD = 8F32E68D2CF3B2371BED9D6B9C7379375D9DCDBB7D40C60E3F18FE425A40FF48 - -Len = 1979 -Msg = 752534268E1492913DF547FE5A08FC558087006C000B2005E763093386C6BD4BD172873CEBE156F45BB4CB1DE99661B61870DD8C611B99DA07D15A6B2CE220E30B2DE3BB778BE30F30392769C84EAFA3697E04D9C8CECD1AD8065975A03D9984B3FF73AA757968F1E2F3C44E6E611713CE9FAE1849909F076A0BE17B80319515B58F4A27FBCEDF7DED27653655C05F89133596AC136630B3BD728988D833632ADED5834368856F1E77CB8B9BBC37D1CB5A989DD1009C8348C0F8FED009F62D3F37C2994824FA80BA8AB0AD3B484EF48979817BDD482064283F4E89A93AB3126405695EBFE166CF3070764B3126883A6C854901CD7F44DC60 -MD = C48246C64DEC56399D5DCFAD0409176254D641A3B833CE0F7B19E80390F382C8 - -Len = 1980 -Msg = AC1569ED914F50B464922215661963F99EEC3C048FA809B032B9EAA69AA7B138B5F049897B1A73AD8CA4734F1B6FD6DF0112983E29820E8FAEFA6D530AB1FF03DE9349181D9C235D14689EC5C30419EEA0D891A8A33F295333B02227BCEA4DA7381584353AD9AB5603E03E69B66D8AEAB20B15AE84C26DDCFCA9EE7DD14EB459784495EDA6D273136653FA98BD42BCA1A0A714A8A3DDAD33C7A6B1916838D4FC25F0524E992DAFCC15FF866CF2DF1613A0C3B81C1FA6BB5D34ECDEFFF540032338EA9D372ECB57692A3AF10B7592179B6D70DEF5281A804BCB83C6EC48D8938CEB66EC6F3696D5A729D130C3F94FED71BD4A4071EA86F950 -MD = EFDE175633ABD4A9D012DAD20A4CF72166E452944819F14C79C94614CB1884E1 - -Len = 1981 -Msg = 24EBF97325E94624ED9571F110D4F9C0D459D6B659B30000F47B52BACA0E7C8E41C8DD1D4FAAE2B0803B22F7C49354507011DBFB157A8D110BE9F8B056470EDED8BE8072601C6FE963584F3A32FF989335EADF05240B355EB4A59770F7F370E02346058C74DCEA0A7DDD4E2EBEA8CB9036B0859B04F1132625A081993BDC622D8CFFA64A7F003C46067C6B224161C56C6D68647124C3B92BD0A1CDD24A98E15462458EA4B8510C7A7027DA769317AA0B399A1D0447525E3697A18C3F4C91D2E4064FFE358A459A3E97DE7DBE8E78DFF5A277F4DE7C4FDDAAF8D1A492420C1D6C60665D4E72598ED24EBD2D695053532561A5810002911588 -MD = FE74A15D357CB6210BB6616A4DA9DF75EC5BEA5D1E771AAD650418A792368E50 - -Len = 1982 -Msg = F965E971E9A188AC8F57F2BA40A21C0739FA6AABE4FACDB1F5EB88A9093B42D1D4FB562335B5D10B10C0C6940A2CC0EEBDE1BDB840FC1256DE90CEF0E008B3F1BD27B7141DCA0CA42B579DB8629B7DA66E36D578906152AB3B22CB0ADF3C5544F9D8249BBBD51089E6C758349B8AE53D7C459E8DA42E7BD7C7AA6237C00DEFFA268C059E3EBC450760E658D104D7177DD45B3F3CB254E3FB1AA8D2B7DDD24B20A7727D34DF50FC5A103D9F2623D3A9488A4A8938739CEDADC30E0DF2BB00DE74E7E4105ADEF42FD83FB97B315AFAD9456795D492B02EE3F9FA942408F74D1D716931271A044CC25303BB04B4C057008E74D2BEBE20931FFC -MD = FBED87B478D2FAC5B98B66901F249B25A12CE6D69B140B0D8EBAC5A1F4596DA2 - -Len = 1983 -Msg = A3DFE4DDEB6F6CBC08CD03EDA2A386676E9E32DF1C093937377295A7FA10421449E7087C6FEDA907DEEB478CBDDA62BCF56CD9361386E607D486F887F77D9AAD16ED65EDEABBC5D2DB830A8E5059094C190E39DAAAE4C4BB9B5743A9218189EF5FA1CBC2A6E8FAC2878417D37E4B0ED6FC4794B6CA8A9D213452CC02E6DADCAEF439C940DF132CCEA86722563FF416D5FF13C38F34EDF3734A9E6E69304CAF7FFB959A2AF03D08ACC6B04A5E43FAACC9ACD2697F7E60DDDCD74948EE73171C751548A506A9319E0103DA0B8C97B35CE261647E92D2E10EFC9D57114B9C9EF8ADA583B084B8F7099520AEEF26548BC9C50F8A7DBB18FA2928 -MD = DE4BB57A937716DD5BDD32DBEC8566395E00007ABD3C3A40F1F32523086A698B - -Len = 1984 -Msg = 6B860D39725A14B498BB714574B4D37CA787404768F64C648B1751B353AC92BAC2C3A28EA909FDF0423336401A02E63EC24325300D823B6864BB701F9D7C7A1F8EC9D0AE3584AA6DD62EA1997CD831B4BABD9A4DA50932D4EFDA745C61E4130890E156AEE6113716DAF95764222A91187DB2EFFEA49D5D0596102D619BD26A616BBFDA8335505FBB0D90B4C180D1A2335B91538E1668F9F9642790B4E55F9CAB0FE2BDD2935D001EE6419ABAB5457880D0DBFF20ED8758F4C20FE759EFB33141CF0E892587FE8187E5FBC57786B7E8B089612C936DFC03D27EFBBE7C8673F1606BD51D5FF386F4A7AB68EDF59F385EB1291F117BFE717399 -MD = 9FF81D575F7BF0C4EF340B4279D56E16CE68821AFCDF2A69105D4F9CADADD3CF - -Len = 1985 -Msg = D32ED64B8AC893E8814F30BA3A421FE80F06FE8BB2599AE6977CF0387E07B7F6BD57AF3980F039921945522F75A1D9B1B1CADD6B666E6D19A9930847B3E7A1BCF942B8CBB25F6D63FD0C1A61365F64E645EC1957D1582CC75790460F92DEA77A3F53F4E695A1E712211BF187A379E04C40098BE74F5BF2DA7EE371E6C3B16B93D2A01A033EB41A3C5F834C4ACB817AD78BCF0D24B8FF876DF98ED9094A69FEDF58AAF100DC82B20CD81520411715FCB054018456C5BCD6EFF22ED949F9EE2C823FB2F22653118816CA66D7FCE9554401035B71939039B1E010A15DAA57A7F374025BEE3F9CF85A79CCF7751E4AFEFD4B1A8C71B6AAD3A40680 -MD = 00F1062CAC1708E49F6A30D543714BCA2937CE0E4FBC2C49D0E83AC498243209 - -Len = 1986 -Msg = CE81B8CDF42C400880AA4A46486ADB10D8E58DDFF5AB61856EC7417A93F1FB0B0C788D0BC3457BA0639078034F22DC1FA93635B0259C4DADC9A59C7A3B80CF7D5FF82C2C8029E27F2F0FD612BE4D7271D3045947E173C971D1FF3649A7CF97F5B8849ACBC34E86FAC4ACACC467786666E1D753FFB933DFEF1C214D229505BA51C5CA6705E9513AF7909BD7A4A43F035F1A78D383F663708669B62922FFD5EA59B41EB44A3EEC3D38092F74093455F1A54C4A73EDF6B23A74EAF0539518A74F174799128F6CDC7BD2BA69CD7B2E69E35E97B9424849605187C6B3F3F2D0A0AE5443378438BFC504C6FF354BAC02E073D31C5C8DF1AB31B553C0 -MD = 163292F36DF595C1191FCE41D700E879BF1A513ED957F32E4E454D9D7B201DCF - -Len = 1987 -Msg = 142C2824180B20EB38CB707804017AA76CBF53ECCF69E084A1B09EBB13ECC2B12B7D58EEDF06CE7446D231565B6A34C18E782C339039CA41CF94002FCD502270DB6ED60A2C7E2A06E4AD98EB37E94173C1CD531417F29A9188422727456F44E113E1611B363288D8ADBCEFC725CF0FFBA2BE5A91B0939FC0D1FF81CACE638B34390D2D5F0018E30D2C69780D715BCB484687D7D672F06DB11E557EBF9BDAE5CF982BA0C1257996805218672116D34CAD98328C6B62D2ED5C28E7A1B30DBCE0EFE498BBBFB8797271F1D8E8903D5FD9217435609E86FD3595762E824CD4C7DA5B1597C4251FF596FB267DF0C44863D3D24D72ED5997E5E59120 -MD = E6634480682005C5B7EC8E21AF83AFE3254BC963834AB56B6AE140E21CD9D0AD - -Len = 1988 -Msg = 329A07D707AA29AFC4D5E780B828DD5F183C0C481C6E12FE60CA6B188C233DF3973C832983BD59B474E9D39D0C54502D7DD983FB404C77DF6FA7FC349C8E74F18E7C2533346A0B505BB7508C7CD11687BEFC78D7A2EB6C253B99E427E0DE4FB7D2460BB900DDCF6B3528207A057F5BA40E89C810B35174FAA3A94373FE1CD2DDE4C8CA7274E0D33365597654C4F75E28F7FE03648A76B8D27F28B0AAF87331C65FDA4E1B0D26DE1849931134CE4BDD6F0FE898D05AFBB7F2C2D2D1F5C4E9A8D81A1476D04AC82225B7ABC2857B129CEBAEC02F343E2B8285729662872B8F29BF8667D9FDE69EEDEA464FB460D80134771FB375314E985FBF60 -MD = 00B950AE3B1261B7481C023F51B2D8EC765823FA64E01D77003B9B0EF5B0C3C5 - -Len = 1989 -Msg = 531375EE838C53F7A0F60D2EF68193AB311A57BB99DECBB5318FA03CEC28C4614CC301A76EC10A414464A128402549708EECC35F14D0F41972BD85F1B2BD0F49EC725D32738A745F63C59864EBFEF162A744136ECE8FD317D04B48EED993D1C2AF428FD65CDEAB6AA83827C3C5F1944FF39CB3FAAAAD89E7F69F154A1367AB04A2BB739D42CE4075309057CFD50B197B63988DD70CAAE8632D3602984664FE7113E6CEEDBCF46F61461A36E8DD555334D0272C1BD3D834B55B3BF3193191E458D72E8BC0CDED3F311A95388F1527F98A8515EB1FB77F298F03AC73D587AD866FEEAD91D17925533EEF29AEFB53F8DBE534DA4902F1A564EDC8 -MD = 81BF8EC8F34A690F1186F14933C08126A116CD90FBEB3BECA09677B184164795 - -Len = 1990 -Msg = 3077B114046798409B052A162823AE9CC4DB68F0C32E8E8A9F12B039C99B8C8D2100AEC68BC7AAD75F5AE414A8E458B2D10B430DF82A30178B66C7DCE52F1FAC05C8D28D511C39A3BDBDDCD43B46B68C7A591CD6ADF6F5AA9E5306BC308FC771CA43BF1B63B6CA9604A24F70B5A2ECC3C4772C5B583B6798F61352EF976DDC14FA9D12BFA3EDC1B70BC198837318E687670411D049476516AC35DCDEDEC5F77F36B5FB3F18607C13CDB7F9E0B413F5AC2C8DD8B6070BB84F40368F44C887E1B3D08F1EA5B52D82799F5BF18A0DA9A64DB60F6EAD631BBF93EADA405C7CB4D39E1129945E265B75A9322EFF74983470134A454B1AFF0F4529C0 -MD = 9C293B37A921722B7A74209A96D34A41A536F4F67E63F0BE1CBEF38432C22F56 - -Len = 1991 -Msg = DE175365B0EB7442D7AC52719CEEC2A930CAD9B9F9BEA109F0F78668CD568EE0C1D4D7A82D44D9D1DD2C01B8A3C74A4EDBC9E59FE6A646C496C8955F96B385284FDD2F7B2715C71FE0A062A3F890F2C03713A234E46C7AF287FEF559CE955FE33CEF3BF62C0A811B3E366782000CCE4781C94F1CE71601936CCAF21EE51622E7115CC769C1282E9A4930D7E4BB0FB324C5A8F6414AE1C443E61FB1910C1384B3848AF40B8A4EE96241CC132F0BE6603DA079E67AF04C234972613857FD5718E54D66D1B542CBD964EC074DF0F48C21509641ED11B0C4FF3F6950DEFF55526A0936D4DCDB28ECCB9D83BB9D68D93C3AB18B09AB8CEA1B6109D2 -MD = F3067ED65B0A11E2BF9A96882636A2B05D547F7AEFDFAA59470E5C7FC70ABB65 - -Len = 1992 -Msg = 6A01830AF3889A25183244DECB508BD01253D5B508AB490D3124AFBF42626B2E70894E9B562B288D0A2450CFACF14A0DDAE5C04716E5A0082C33981F6037D23D5E045EE1EF2283FB8B6378A914C5D9441627A722C282FF452E25A7EA608D69CEE4393A0725D17963D0342684F255496D8A18C2961145315130549311FC07F0312FB78E6077334F87EAA873BEE8AA95698996EB21375EB2B4EF53C14401207DEB4568398E5DD9A7CF97E8C9663E23334B46912F8344C19EFCF8C2BA6F04325F1A27E062B62A58D0766FC6DB4D2C6A1928604B0175D872D16B7908EBC041761187CC785526C2A3873FEAC3A642BB39F5351550AF9770C328AF7B -MD = 09EDC465D4FD91C5E86B292F041BCC17571E1F2E17D584DFF21DD7DD8D8BFF35 - -Len = 1993 -Msg = FAABF245E59C1E88C39FDB7ACB77B2B3F67FFF22CDCE4F109B321C5B720DF0E4C3995B01968676D4305C88CA3A539A9B740A97068AC91F966F2111C7AD7E1A32E947CAC73F1F5DB8CDB85374FAC8DDC0B964E506F042FC8C76D4273E6CC1C370189E60DDF920FE9895F4C2E6DE87B742D09BD90D0C6D792A0DBA942EA21D89C735F90BC71CCC32BF661AA35762EE8C4E5C354B8D72F9124134C02E15AF1E7BE14B8CD862FDFE7838CA75BA76D8CFCAA427B0D4D65068999B9195948E387EFB1596EAF8AFDCB4D953F2833C2569FB0C40252244A356DC044ECC03FAD63D1BD2D2FD9A683731A28C0D13254EC9BDB5EF09EE3A1AE3148A143EA080 -MD = 898C5A728CA311D708EF4D5CE98F5316482A40B336E17A80173FF5CDAAB92BD9 - -Len = 1994 -Msg = 41C9AB2D7A66C27D36633BBD90024BDD2A07F4D266AEDE26023FEE9207565467B4FC917C4712D5ABC56CE66F0020390E5A2BDF7C36821AA032078721A8EDB4CAF94D055A26C182D42796936A6A1DDF29F4383D169DA0FB442F899505FFEDE41C2110163E7ED694562A687EDDC54D5EF2E7EDFA91FC7D3F73FBA2D80D37A5F980435CBDE686408B3BD2E6D8D2449446F7C6C2B441965DA6D17779FC3F33DAEBF05E1060D378A21708DAD6520B1F8F53FBC65328C24B507B5E20DDB5E2C80766E794A1A71259AEA52DD1C885054E1D83ACC38010E2D26CEBDA306762762149648763328D341725644ACF60A09B2ADBB96002F01263572170188540 -MD = 9DF23BB5888517DF685AC79AEEAC583B8F100D2820C7DE8992ECF93E11B43882 - -Len = 1995 -Msg = A245516F0282C8B0E6F2EA8718D0ECCB66D9C1F90CCD26D793BF9DF3101C5D0913029BBBC09832E621D65527B3823C47708409464BFC59199221A3EFA28B413563137DD4A2EBBB5D62CE6ED865AC9F1D9A7696E891D1832FCEDA6DA96DBAD1F6DA4B52121ED3D4BB70FD7C9D46386ADC38821202B2B6F8D4562F5B10008E35BEA86B21991F9438B2D63F753BFD680FCB509A9A23087672C11317E44BED611A113CF7A5336B36C311992D9403A9E181BFE3CF48C0990FDC347B12FF6997C5C451E720396631BC26E43CBD69CFF6C77D8FBADFE738A0B91B7BC213A37314CE4D645A3CA98EF451165CB394A021ACCE94F268FFD2F95741B8883D00 -MD = 3EE55B64E13B30A2E5A9FED54644747E44B2974217F70F9655FAC4584C61D1BE - -Len = 1996 -Msg = 2F30C488FFDB8B60D41FFB45CDA988F0EB13DADB46DFB03654CF1BB662E9CFAAAF49830D2F011BF511E0437B2E55A0F56D7BB4BDBFA63896FB7DBF6741C3227CF9DB40FB4AEB4280A0BE09638F735F320B228B2CC65E88FA75339A948B7A1BA147532593DC85A793F723BF4EBAEEB9181366D9FA7DFC49C9F07B52E8F601B92B7F54A55D3393B6680FF65317DA41C0B0040E9206F65C3C183D8CB832DA4FCB465A731348ADADE1227F779D20788A096405A26CE76444E7D8713DDA48DDE0F56006D38E910CDFF2F1D0F20EF4F38D9B2BC9D1C31C7509D370E31E298892CE85D547ACCB4ECD36FB0BAA61935073CB2DA89B83A93D23F21B4D5280 -MD = C96DD58CAE7B2007F3B815677CE559C46425790A197990E5BB43A11151DC86D5 - -Len = 1997 -Msg = D60976242E138CB0311CF692E23FB29DCBED3AB53B9B9A5C810C8CC5EA22ACF5E5EAD41A541A66FD03DA085A088CB6BE50166B2C604777771F90ED0CCBD8F6C445BE01C650B655106D713CC18613F1EDA3C45FA92A68FBC24C660BA1F13440BBEB36E8B2813F2D85D82B5EF19163D0FE77B80A3E66B378D3F14936917A2390CBDD5AC367DF32E109704CA448F4B8F5F1937494976A7D721FB3098671DCD5615739E15A22E4D5D7CA1064DA010EC5E371EA286CFDDE523CF3EDDEF2BDB58DDFB021599B5DDEF9CB9DC83E5BCA43247FE5C31A9E1BE19D02C8F84F7816689D6E6F0444940300ABF38A70C9AFABEB54B5B926B3D90B5ED0C5AA3AB8 -MD = F500106BD32FE3D777835E97EBA3F9FF229CE0C98A82F76D68B97181820CAB12 - -Len = 1998 -Msg = 8A1B7485D535E846F7F57A9C668B202F71E36C4970CF9F1EB14B433148193B466A7DC82012AB7C5E97A9D0E622CFA4A9B846A5C7B621E89CFCABFE752169ACE355CCADB19243718937F55E66682C6538B0C66B94830D7B03DE0FBF63E4104DECDA39E9667727602C37A9B5ABE069569F6E3D0417842B96576FC9FF3B20ECE46A68BAF6B4EA8D6855E84A72D6DEA2CA13546F9447D229E83D185698BB5FB1C073570B0C94557B90C45BDCAE552E45313E99A4B94D422DE9DFC84494E2FD1E90CC922EAE9C49AADEA642638F44222F71CF1D63BD2E7164396FE1EEA7AA8DE59EE4CB35FEADA22C3B752F569F2E3B2BD14191E956318D708E9D0600 -MD = A83BC68026373F9E4764175E0DECA14E2DD36CD3F20E601A792539EA2C97A0AA - -Len = 1999 -Msg = BE48556570B10A62DF06BC43B6A034A221C26E455E28A1541AEA3042ECF9778BCA7F81AC9F7525E190124E359E7436D15C629FD388AF0F7EC42F4096C7C421E0733A716F78C86A1D77CC66683FF16B022685409C3E99240255BFA2660F3353D5B9F1704890C9156E5CA3A5ADB62952239D3B6D3E6C2EB7BAEFC4B5B385B3E7A41BBDA175B9D00F88CF061E78A921C90AA0AF22CFB5E0660981D071CD67800A0CEBA6D6732D9D3EA0CD821378B5BEA369BFB1D42280F4A81D44F6C254337CFFFAE8C69F49A444EA23A736451942B98439C03F13A52FFCA6A77F51E46D4A71E384CDD93A39C713293C10FD79C906FBB0EA5251A2E7B55905DE81C8 -MD = 93353589DE9D65085348CDCD00EF9D37F3EB9967B6043F624B494DDC31671A66 - -Len = 2000 -Msg = B3C5E74B69933C2533106C563B4CA20238F2B6E675E8681E34A389894785BDADE59652D4A73D80A5C85BD454FD1E9FFDAD1C3815F5038E9EF432AAC5C3C4FE840CC370CF86580A6011778BBEDAF511A51B56D1A2EB68394AA299E26DA9ADA6A2F39B9FAFF7FBA457689B9C1A577B2A1E505FDF75C7A0A64B1DF81B3A356001BF0DF4E02A1FC59F651C9D585EC6224BB279C6BEBA2966E8882D68376081B987468E7AED1EF90EBD090AE825795CDCA1B4F09A979C8DFC21A48D8A53CDBB26C4DB547FC06EFE2F9850EDD2685A4661CB4911F165D4B63EF25B87D0A96D3DFF6AB0758999AAD214D07BD4F133A6734FDE445FE474711B69A98F7E2B -MD = C6D86CC4CCEF3BB70BF7BFDDEC6A9A04A0DD0A68FE1BF51C14648CF506A03E98 - -Len = 2001 -Msg = BCB3D6F4A9BDBEB6222F317E94CAED0A102FC75E32C4127A8DBCE180166D4B034E6DF22C2B4A77636D6ACBB5CD1EDDBB280A97CED0E4C396723C9703DEE371BF2687F8CBE1D3A007B2C475EAFB030601F9034506412F0674230A6A6EB9DBDD08AD8D545C19FB0DA52506A488A789E5FC6B92799E5A8DB3D57D8985398F7E9C12A060CFA0DCD8A1E34E0A635055B616FA91C1985797E0FCA6566E03791D29D684691A39DD0181B1D584AD1C51004300FFC5DBD63D9494B2E0368776EB54624FA8BD1E8BB5145C76ECDF0D1183D67E7C7A0AF6621DC3E81637C86E160AC677851F294FE6730CE34AB488C447F665A9F59D356D7273A2675494A75380 -MD = 95E5E3F6299A0335C0BDEB3796BF7F51AED259922B55F4DFCE61F05AE3A35BE2 - -Len = 2002 -Msg = EEA3D4F70866CBB97B2FEB1F13E05791E52A8EDFC58B2339A97ED00070EE50F9EC377D8BCC8DF98DE2B99BB53345C13CAE6D6EB6E9CE0EEDFB59C0AA64DF00FF6B8AF3AF56CFEEB0DAD9AFA44564B11C3DD295618B07BCB13C6592B785B2E5B4698BC0EC8C6D57D602FE8FDCEFA619629CB52BB1079000FC478C92C24FC94E76B29D84BE2D489A79F16E42EAEE1D9842E9CC260BBEE9AE9A42A1170662E2617F72CC4B72A38B32642F7C47555532779FFB5B86FEB63E06F4C42E0849110ECE84D37B18A65C7156E23BFDB32B9756069DFCCABA8E3BC47E6F0FE8BBC7C2D9A4D2E071A595EEABF3E4CB6F637CAB25704E8D21379AFEB0BCC6483FC0 -MD = 4FADF9EC19C017BB740024376DE73FCF0F491593CC19731D2CF8C9A9669AA4E6 - -Len = 2003 -Msg = 07BD6D792691D1134F9DC46A34F930F1E073455F53A5EC48AA0113713A41238160C8E421097EF56EE05D0651DD91E6B77D3B7685A44BC480A1D0743305859EA10A24C4315DE8262842D79711A6B7B06D97E2D494229BD291E038A80A07DAFDE7E051411DF08E3BB812FC12F1AEBFDFDD0843B3075FC9431C4CFCA0A527BF7D4CF474783AB3675D4832B2DBB0E6255BA65D649FA0C52DACEDDA27E66FDB7E796DC6EC86EB06ED70F547634E82933A478427ABBDB73FE02BECE63D942C204F4F7067C990F6EBA66E3B80C4411FCE9333C3BD5783D222C1809742FE30DDA06C08CACF82D67ABBC903300D8B26A3F073C00AFA8D5DB5488FAE653E87C0 -MD = 1F399885F52DBDCA9862A517B809125079372CD0EDD61C262824C7F77ABD59B5 - -Len = 2004 -Msg = C87A40A7F50BD9E5D0470D3888727F55F650491B815BEFB245944C2023F5DCBFC061894E69225379C450999472FC415C8406A5CEBA2E1197FC3D611530A994F9EC73F7356E02439F343DEB16DD09599500D362C7BFF01C76002B437A7E86B45187FD8FBDAC88F8886995767B9EDA6ACA959E7B82C7193FF7E6644F36BD861C17E490CB14F0F7F9319DC502AEB8F30AEE58143E1536ADE6C3C6479C64617A3C04C13BD16DBE91AA3AB8768154B6A6E27D8C9B14A5A4562CB3D1B70E124ED38D09A1593EF6C1E10400ADE66FA267D604C16F990DE32F3CD34A85421F19189DBECF7C02BCE65BC094B554732C721CDC73AA39C3C4A887785D42C6C730 -MD = 53628429AD2D2CE447EDDDEE546392059CA29E5A1B4522B9C76966A27DE4E6CE - -Len = 2005 -Msg = 59897517159787EC93369C74AB7AE836A65F1F76421B8134EA32ABFDD66BCE4240723A8BAAF264CFFC4AF19F114780D4C11A8B978A6060D42239F3702CB8D69E03C0355239A7CCAB99F5F2E5B9B7C70A0CCCE87C215A27943430690D3F4971B696CA2FD552D362FA4C9B4923836BD2DFE678C0EFEB56C8E87223B609EED0768E75E3226735C3BCBCB399889286973DC2190EEDBC5AE2FD698E921395E7FFCA61DB46BE5187CD8F380E76DAF5625931162F4972517A6DCD875AAA46D2FB1C8EE156340156666D092FEC19C3891A4F3E375A9859C4E48ECC224E2B010173D59744FBEB0062E6F07994C725FF32F4525348238D9E3016A0D79A6F2278 -MD = 625A4A3520A8C5B5E66258875CFAA96B793025719C1FBA34B85F7D6C9EE39F7D - -Len = 2006 -Msg = 43898A8F7A09FE62ED0229A3102CC1436A2D662224278D3053A94B122045EBF2C164EC70B79389F72D81629F47133C98A2CC0AF6C935E640B39F1C197FA824DAD41FCC51362AD27AE80FDD0075988742A53058AB8DE4AF7EE577F35B9506EBA415F16B4533CDFE5A952218A6D76DDD16A4DEC24C7D9332A41B6372053D1419C37579BDA0C358EB984C1490E7146372FD336216D0A0CE9F282D6D9919406B4C97113ED412DEAB3737C3DE9C6F6BA813C1D7253047DEF24637528B6447126F0B2470DCAC0D693C72816BBF0F74762183030F7F5C9B5D11D6C90E7BB8F50499982709FEBF58E291B672D523089A02D112F7BAED00DDA8B4138BFE207C -MD = 033925886C2F22B5A38B9C31E2820B778BD991D82BE7D44DAF24CBA4FA315574 - -Len = 2007 -Msg = B0077DA24064BAE6404B2041DD10F3619079446B7BAFD1B3901CE4DF21FA9BC02145AC75F8DC975C74C4BBFB110DC171736C6EAA9EBEBC17757DC4AF3FC4B5B4CA1D6004D79B95E2DA6099903B3E08B74EDBDC745185E67C7878EE47025D11B446B533BF710429606B0F64332EE985E100FC4B5A0189F1632CB498168AA59FF99149E857B579AA617C0D4C90A642C25D0F314C3AEC6C52A7BFD25AE09541DAB3CF3B1B547A20EDC13D39ABB120E52FC19C2C969D171CB2805FDC2C2192B52494B37B97A35BFD17AD015BA5830DEF975E1BF7C910B45729F7BA97A3E94D4517622A9397432C79B297876562208A0F8BE1971B32DF82470E29541AD8 -MD = 6A4408393F760368C89AD56F9E4ACF0CDB008A80A320B3AFF04438FD28F274B0 - -Len = 2008 -Msg = 83AF34279CCB5430FEBEC07A81950D30F4B66F484826AFEE7456F0071A51E1BBC55570B5CC7EC6F9309C17BF5BEFDD7C6BA6E968CF218A2B34BD5CF927AB846E38A40BBD81759E9E33381016A755F699DF35D660007B5EADF292FEEFB735207EBF70B5BD17834F7BFA0E16CB219AD4AF524AB1EA37334AA66435E5D397FC0A065C411EBBCE32C240B90476D307CE802EC82C1C49BC1BEC48C0675EC2A6C6F3ED3E5B741D13437095707C565E10D8A20B8C20468FF9514FCF31B4249CD82DCEE58C0A2AF538B291A87E3390D737191A07484A5D3F3FB8C8F15CE056E5E5F8FEBE5E1FB59D6740980AA06CA8A0C20F5712B4CDE5D032E92AB89F0AE1 -MD = 1AFC9BA63EEA27603B3A7A5562E12B31E8FE9A96812B531E9D048385FB76D44F - -Len = 2009 -Msg = F38261A1E0C715F8BE26B6F39B82CED03A42B1920AE44F32AC447C5A224B7CF3AD428C1395678EDA9BAFB746EBC7035124B2BC38EB18CF23DA956493035DCC4BE8431AFA158AFC1B8BACC8F4C609F903C63B4B34FCF935AC9EB787ED4CBEFD465C220B18EBD03E634044DF8C76E51FAA484C050E5B1D6DE2A87C17D6C59FA10AA10D1A3D3F55937FF92804C7F99ACFF2549D9938BC255600ADB7CEB7D4F461B1B337A0CD2DB31AF31EB32718C623E51E2773E3143C433613E6B8971675B5F6FBD886EB52112976D3D3CF3551A522F264E08CD23A54D560FDBADE04ACA0B0B51025AFBFB6C387698E3D03558E978C1976E50EE472A114E277255FBD80 -MD = 60ED0DA10A63F3ADF686EE8FEEDECBB464F9EBC77DFE21C40446D0B7AABCE0D9 - -Len = 2010 -Msg = 0400F2747226C0098A84CD5B655AFF6374D3FCAED87289D590116712BBBE96F8ADE6B5BB9C58A3010CCD8AB0142C2750544B2AA7ED2AD5FF341D46D060C0095C3D1252ED17FE0560E7942DD9520861B3CDD5828B13886F88811F92281CD0D90EAEEE5664898A82178A86803F4B357F4497F5B433F13A69380F748E5C4FF58DCDB311869F74EAA70803CDE14FAC26A6F58C2B4C5ED5FF72F81930CFFBA834DD1696A78015A6A1300F5D1F0E557A07D19972FD133092CA07902E66D1B41369A986757875E33E0797A2724C38BE538EE4E43A49D711F816FA450A5D46286FB90A5D5F38CE0CFC8CBEEDF4FB164830E3FCBE059792E4A819FB9F3A903A40 -MD = 6E867E3C61830EBD6B39199117202B71A3D58B5E25A3C1291935818FA0966B72 - -Len = 2011 -Msg = 7978F60D35A8F4D678A3C3D9C9D4B348C151CC3665D67F3B391FF621CD2DAD46CADBADBFBE0B254F3F37194F20BDB05C1765F8B3B69C2EBEE5462918C2B92E22C2FC1959197805547E55B4527DFFBACFF0C7F2E91E05DBE570698350FC3BBA4A3685498F4D16E70FA79B427A1286C84BEBC91D19AF251CB553072929F0268282F052093306BCBCCFEB866AD419EB084198277A6F876DA551985499A6098155FED43EE6CB6EC6236D3D01778DD3822BBBA0A1D3A1870F9683B6FA81E1B78F8BB37E3EC126B34929012B99490E124DF37E1FC9D809C8A337358F9B03DB7B9ACCA3F5BD9DEEC8987E166D0F33CCE7E061A33852F5636B807F948273D3A0 -MD = BA8CE8BD5C8AE9911B908F327F6760996098FC2ECD6FEDDB4D31082C6AE33813 - -Len = 2012 -Msg = 521C82A5144B864024C414840BED6D9D038118F25D02D1A8B564B7C669C46A080466BA2FDA823652966A44620C6FDB666416892D427B76574A7BF2A33A22500E27AA6C00A655A0483C849681DE3B1DECBBE0FF7A17EF4092A4C9C64422A2E6810C0AAFD133DEEF9D1B8326B898E5641FFA338AB6A32698179F36B16C67707E1846E52105BF246FFBEB0341C92C4BE4E62B772AAAA84A91481C8E5C13B43330B66A27D9DEBD891989952EB41330B9AFC3C3A48DD35E8A62DC9777D5D3A83C478BF92A347C9DFDA5FF3295F093142BBA5DE4CEF213AA74FAE5AA2068BCE9AB181967944E379B959FE2AE8F5C22A21A5516F74EEC7B296D41C946864CC0 -MD = EDB74EAD69DCD94151B14786CE277D26A48CECF856A532AE100F0B24A58758CA - -Len = 2013 -Msg = D431DB95235C0763527A87EF5A698EA7DDC832FA8377FA56A661499E5464B9C6638A1896F826FA102B8CE891A1BCFB3540F1C9F26BAED42603BA3EBA6F24E493E629588FC08C6F5599123C2931465CD90081EA2BAA35EA39293CA49FF2B83B4BBAFA7B1677A7968C97D8325DD9A41113D9CABD2FFDF3D5709AB4C84F6AADA004F3768071C1184BD34629760E40BB17EBABE7A347DCAB9CEF57B44B2D010CC7FD13411E86157D0D839CCFAD0C4B5C17E33BD5D879584B77682C56E86AACCA13F348F5BBD296161B20B4C53D537A82CDCD212031AA2E91F27FF8B8E0641A6D6FF984ABF8020F58C83FCA4C06DF580ECA80480C105007E1BD1B404F4020 -MD = AEC6AB9C6D989A5EC700546E442801FEBF111E1FF798C38743A22C80A5C4E487 - -Len = 2014 -Msg = 17065477F68B70B0EC8D04713DDACA9B0009FA8065AEEF1490D6156CEFE776FEC243003D10DB512A4EBCCBD840B0E0F210B5DE02288DB6E14F96A46D3135629A30D932E5D8B3A6A657B3FD1A66FBD8A121CA0B531ABEE644C425C9F858998A17E22F8A9F0323A6113A1F0BBB25A9DD8F4710354E6D4D1101FC903155977F27C8F4F23B358049FE6E289BF713ABD332F1712F6D15A3A8485D0583FA6C046D154D4ED7CEC383F568350D64B28985863978390DFA8F176A9D7A915CAA34DBD70EDA3D773E4BB8CA2935664F7E87276AFB0621F180A40BBDE010A8CEAFBB5BF17FA564A21E568902B77679A3120595A89EB768537C90C524440CAC31B304 -MD = B0935DB2234F644632DD62B5E71B11257FEC09619B2608B0EFE2901E61F0412E - -Len = 2015 -Msg = 43F40589C133BD422DD57CA9EBF10AB028B7E9F0438C38569420688D0204B6BF99214D7929588122BCAA39CC3C6DB84598DE32A3868DB1BCC04EED36812E73333084FAA1CF535084F99BFCFBB0FE2DFDDF5F04CCF348DC1C7000210807DE593ECB24530E289808DA43BDD752484E32455014537347EECDF17CA6BF67084199DDE1A5E445C824BF65BD965423EF21EBDC9B6FC932B78F0BD68D54DFC5351816E0F6E7380F46086AE66D5475F022385B6802EEC5F2330F76D2FB17B7861372F9D0370D42C947D268882AB68FCAF473C543470F881EE4458048D782DC42A98FC810E56F1EBBD8DE11E9B230F753FF20DFF76C9593C5CA56684C43194C78 -MD = E7FFD1444FB142E88F54309A2FA26AD1E919F0C82E1BCB6F3B0622CFD051F56C - -Len = 2016 -Msg = A7ED84749CCC56BB1DFBA57119D279D412B8A986886D810F067AF349E8749E9EA746A60B03742636C464FC1EE233ACC52C1983914692B64309EDFDF29F1AB912EC3E8DA074D3F1D231511F5756F0B6EEAD3E89A6A88FE330A10FACE267BFFBFC3E3090C7FD9A850561F363AD75EA881E7244F80FF55802D5EF7A1A4E7B89FCFA80F16DF54D1B056EE637E6964B9E0FFD15B6196BDD7DB270C56B47251485348E49813B4EB9ED122A01B3EA45AD5E1A929DF61D5C0F3E77E1FDC356B63883A60E9CBB9FC3E00C2F32DBD469659883F690C6772E335F617BC33F161D6F6984252EE12E62B6000AC5231E0C9BC65BE223D8DFD94C5004A101AF9FD6C0FB -MD = 9B5E15531385F0D495FDBE686E3E02ECA42B9F1B1CE8837AD3B3E42E6198050A - -Len = 2017 -Msg = 7935E30C177572EA9DDB189E2EE00B99239E31E88A1D04D48D80A9FCF7FFFD2C006C09E9C377D6AD161A3F86909C9EEFAC16625271A12906E58105A69A8BDB8774FD5238DB266F41F0F0E6AABD635C489E937A63A5F297BB043A38D4DAD91D1CC94E516818F5D61FC46BBC529F3E3260702BF9364D6A23D39C1FB3DBB2CF21C19E4B42BE38BE5CDAD468C62EDEACD91D8811A773A0432D804E630C8403F181CA1AA8FAE62BC76F7EDC4C6F9B55CEAFAF4E8152D38C4D49CF73012DD0B51CA3BD8818729EA595E460D202BF25197F2D088F39959C8E6B07F2346B1CC149BE41206AD5D027A0A264C61074F7DCBFEDB9E82A9280D80207D105CE51233F80 -MD = DF9AF1D24F2D56F46C50691AD073C601652A45EDDD0A73787313E57D6B1B6231 - -Len = 2018 -Msg = FA6E5C7AB3D80FCB11F68B4575BD8C6D4FC9F754CE29AAEAF56AAB37AAA967A1023A228AAB4C67580B607A50662632A5A0E9259C8DAFA3EBDF14E8810CB9EFA5AF12611804BA687B0BF0F0CF1FC881657688D6A25E0B5DB7F6218BD9CE61A6982FAF06B5CF6F6C9DC85E8D74F0CEFBC4AFBF881F08491B885095BD3BF17BE844BD80E3A6510FE272C312837758F80CDACF3921EE01930929ED0B60CD2CA97276EAA2264C288106482CA521BEA53FA4B62CE26A7DF0BDAEB23C57C638E99255C727962BCB9FCB49F4661DFFE50B3B86CFA4C697E461DA1B1A790A4F7858FF59192A90965DE79A00BAC7362C4E3B09AA019959B3D96C44EFB22E4371DD00 -MD = C95DB972D0ED8E43883B38075117289B3786C8EE52E8528D5A1A695E09765718 - -Len = 2019 -Msg = 230BF4BDE34E022702183439EB2A7B99C763C09F738E92DAD945C2AEDEB9624AFFAEE3C2858AF2DA90E301A4E3B59E27C6926C5CD04C390018148373F65A3A9BF72E80EC38DA22B1CEA155541ACBD64CE01D62605C88C43D51459BFF591F7445EC651A2CE678446F921C9D45FA7B1AA2AA16A83E256F61AB8ACCB99C4369A0A6545211B4C3385CE3DDC0C9F5CA5D2B9A6F929FBA7CC3EAF0D6CC7F018EAD2013E99F7B482D58E148DE1A0086E7766B50FBE266D31CB77129194B4BC2C5865CE18A0779911725EC751EE5B809F5B401B4753E4FE841E18551E5E16F35C77470C61CC692C45F8C4476FF99C194C820A2C7F3A2C657C2BE97573878C38C20 -MD = E2DC5EA2C7A1FBD01C20926BF168D1EFBBAFED3213C210A46BFED9BBF49E8F45 - -Len = 2020 -Msg = 0367DD6457986EC8B94A722727C79DEF1EB26ED506310A88CFE4065B9BCDA02B95BCB8F5D4AA2AF1A0011290F302970D54BB0091B48FF90118AF051E65C00839EAB6FF8462EBA232C0E406A4573702DB72FE8D58B0C15AAFC079CCB5D5D0A702871EF3DDC46769D3EDFF0CE8E9AE9A0A15FC9F36153C9E5461748899308CCE2B5E8C97BB9F16C8505A34DEE5DD7DF47AECE9ACF4F13B2845DE7E48BC4326471ABC9F86D73FAD9C5E42C9AF89D0DF00971F39306C91F0B97102AE44749CE2111938C4E0BFAB15B68DD34DF8E54B52D8928E1804313C363E46A7DB7ED412C6FA918C1F7985320C412D457D3CAC140650999775CC2C9D9D2E918FA1B0BE00 -MD = 9E7AE9783E9E5EAA35A368F90C89359537DDF5B36B6314627A54CBF2C97B1D30 - -Len = 2021 -Msg = E8C1EC93AA28C61DAE66F7C29F9271464F045FA279D6601BBC838EFF3A5B53EA2299C128C00FB997FC9BD1E579951A0B2B4BDDD0D03BCD04B71651B7C74C8BF3C6194663CE07F68C37F13CF53E8E5CAD3C491EE25539BBF494C43017BBFA6645E49544DBE203E803FCC809E2C93A0EB191BBD3780BCF5E70491C1C5A18E659FE79E94FA2EDA8EFAA739625955B9EA7636EAB2E746AB571C7C9B40EA9D899506989525E54633D5186DA4F93AE6C7FF238A852BC2786F7EBA8C36968F26546191B983CD24FC3EABAA757DA7462E1C2253BECD08D4B3ADA75850F32C835D9DA083072BE453EFB5E514255BA72EC47AC344B944EC384428CE785FB30613BE0 -MD = 66B17AEA4FA260DCF03213E3F8F5E4AA554A80F83DDBBBB69F5ABDAC8825A69E - -Len = 2022 -Msg = 7AD52ECA2EC84E56B93ED49761733D65A8143382CF7D9995AEF6F3C8F72D24F52B2342743B08687CF416A16F00BA58CE218745A63DE2E07E671232109A14E3F5F085E60C967836C5F12DE97246A1762620DB570C52E3CEA7FE47EE53FF454DB3F610E72E35EE59E38D77519DA8D0533BC30C5B5B6380541238063BDCA3618C5FD8D2A140943DF297FC83611671FFE2C48E8BAA204C15A1A3F78B4FC9C66B4C259FDE8445D7F9160CEE1CEBD7810B543BDC152A887D53D0AF866E3535827C61282F34E968FD350608A38E5399B1F8B171097BC059E7685D01BBA86A1EF4FB748A2CB0D24193389EEF52942243D09903397480F5051B3D28C2FD6E066620 -MD = 73DC612CB3472D166468F452A8A45261AA785197860D738DFC944FF784EB8272 - -Len = 2023 -Msg = 895AA7BAED3164D54B1E76CA9891E3876B045A3588FFCD0AEC989A9A96CCAB03EF6056B252C698B59E6BB552F17C8996388A80FEB020BC253501EB8FD6C034A61D9251DFC06DC852B3A99161F65200D52B3E26531EA5FE1AE297BEC2653CEE2BC8A2293AD619DA5D853F561695AB52DC1411A88738B1E9608D7B7D86EDA2BCA385816BA58A72D07C93D2F31F2A24343E5A5D64FE6912F0E99AF0ADE0C5E83C57E50D671B4D9CB8111B9B5AAADC821783FA8D69ABF292E07106D85504CD7D11272F27FD51C216910A7DB2CE38372A58E3D688CEC8B76414368C929B50AC2BB068B2203C67035D1B52D69E52A6A5E4805F88F8F9072AFF5F6F98EDFD71F6 -MD = C609E90785686ED9C672489246278A6709D0F0961E4E20A3D54956CEE6743DA7 - -Len = 2024 -Msg = A6FE30DCFCDA1A329E82AB50E32B5F50EB25C873C5D2305860A835AECEE6264AA36A47429922C4B8B3AFD00DA16035830EDB897831C4E7B00F2C23FC0B15FDC30D85FB70C30C431C638E1A25B51CAF1D7E8B050B7F89BFB30F59F0F20FECFF3D639ABC4255B3868FC45DD81E47EB12AB40F2AAC735DF5D1DC1AD997CEFC4D836B854CEE9AC02900036F3867FE0D84AFFF37BDE3308C2206C62C4743375094108877C73B87B2546FE05EA137BEDFC06A2796274099A0D554DA8F7D7223A48CBF31B7DECAA1EBC8B145763E3673168C1B1B715C1CD99ECD3DDB238B06049885ECAD9347C2436DFF32C771F34A38587A44A82C5D3D137A03CAA27E66C8FF6 -MD = 216FC325F942EED08401527A8F41C088527C6479342622C907EA08FF3290F8C6 - -Len = 2025 -Msg = 51F8BDCACDA5A57DD68942F72CAD34BE06CCB06F9603359C80D7E5E39D2254FF3593226D0E068CCD06E54F0490CA6267CE2CB73CAC45552173BB980FE06C6DB076B97405088D6203492B73E40532C4A259B760504216A46BCF04B8251FDE04D8AA82354303C103163D166E2F79E9204FBD1F09B8ED474DE23BEA752F9D58C9B39A955B7B8B4BC610BB554B5B6D5220F0DF58FA3308D5BDAB635F8AEF9532309AE48EC70133788B93A14F155D3AC0EF7597E84E9881E49E9BF709F0AADB79E8CA5987B15FFBDC0F10B70E4034554952315E156B01A0AAAB6AE3584FE3F522FA5DF8F909A4C2F27AE26CA35C04198D77D1271E2CE12B92566F243037204380 -MD = 70FBCC7BF6DD9BF9B3D9F6617DC3E6AB26B7FF5ECDAF5438C205C3FDE3E19A0C - -Len = 2026 -Msg = 21E921EA42279D39789AE6DE121C4EE530FF4488638F8AC66C9C2AF97CFE8AB41BFBF2BF217946396743E1B6377BB29440CB73AB40921AA6D209134D9D583434751A8CACBAE380E8F222A07BA5B5DF1E1629C68550E1F3B9546BB816296DB08A8D8F1BA97FF3D8DCFEA8346ACC1AF1EFED1041BF60C65E3F99DA9E534ED13DC91937123B2F9C95C476102C16E436CE1F8505AD7E6986CD92BF59624C2D4140C3DFF9E824BEA580651B8B189EE21497E1B1835ACE948ED9E0C99CCCED5798F618B9680BD5E2ED3C37353B87C1DFD7219C2DCFF2FC6D08C4692450B6CF88B38936B8E79FCBD40949421B878371CD6E070C01B3C45AFA40D7558971362D7C80 -MD = AEE72923A76B411BF3B1978159E58AE19A3784AB9AA11C9BFCD235597B98838B - -Len = 2027 -Msg = 136B91AE480FEDE05560946E2498ECF3DD14A3A690621367BC96FAA7A7FD17E9877CC7680586DBA63210A50761005BE42BE609F0FDFDFC57E2E9CD7CB313A74A685B4381461BC636A158830FA668058F428B62A914A9ED8B8CB26A82062F91CC9119D303CD95A6B288AB9B5DE4829D340EF99CEFB84842840D60680B870E82513788E744FC1C779DBC6481E82B335203D20E6420273235B105072DFAC5B0BF5B40D4C5F42D7B74FE753924C80E68E049DFB5721037C4F23279C84B50697226D31F1B827BB33E0CF53E398AE128B20BF9BB77F8E379833B8813B8BD1897610A568033BCC1CC953F9D9CD20674D85260BBCBCEDDCD5295DCFB633C12F4E2C0 -MD = 8362D1B9ABCB02E46BBA72CF33C987D46DD69103B2D8E4073EB84BAFA361A334 - -Len = 2028 -Msg = 66507B499F6D8A15A968D9EF30289B4CFAB08ECBAEED472D58140D3C0726746155FA07D73B0374B8D1DADD60432252A4B4F891EC83122BACC96F6A7488B0702A05648488BD0B31950B21D1EFFE567A7A2F7E2D12499DD2D64ED98242B235D9452C35D6CE72D0AE4A57019966AA4C0802A68D20C001A58B0344DBF0D216497CD9414F5079058AA667E30E7D00278CC872542CBF5E81FDBABD321FB0CF877C3972A7EAE36ECC95801E879AB410C75FDF82FF8121214873ECBC4D1F20CC3E9EE2BCACE7659747BD65C37E6E3F209519C7CD189F023C89EF09D7F232243463169C92001818670FAD9059377ABC957C97B94ED20D2E71DB202C0C1036F0BB9510 -MD = 66907C8E6FB8C95FE234D4759E227CB3794B79240A0EB5AA6C241D9A96B9C43E - -Len = 2029 -Msg = 9FE62860A9C15D81A218CEFC0C50914B49F04A8A86CBD9DE7132CBD76EA878140267C917EA83BB930BE41268C01D63303682BAFE04F576DBC7C167953F9B90B9938CBE27F83BCD800F0F4602AA88BBA68FE3D8E31A3A8BBA76CC9CD30235B719E5838307CFC7B635517BDAA796E792B72DF8ECDC5A26B6D2949CC443800D12D705354D1CCDFE88E526AAC41C71B7E9A710659550DC7338FB97E774CFF9C44BAD6A31B5783745D503FDBEA6B34CF611022D20CD1B5BAA64E60D111E40989D0F50683BFC5F1CCA929667157977FF1101817DAC901C7E9FC3032ED7FF4DA36A9DC90F8B9C1D81B20B5D972A662975F4DEB7E2199A3FA2E300703FE38BDAAF38 -MD = 80D6BA360BC1F182EA1C2C86EE68D0F503BF33FF779FC926FEA6978FF71BCAE7 - -Len = 2030 -Msg = A91E640739831082E52FFBE1DA2BEE69E8DCCB8AC4175EF07EEE805087A53F164CCEE639EF5C510ABE9B204AD46376878301FA785B89B1AB924CB069E8F535933F61E469A2DB92F4BAD7BC6E9F550FF38ABD06CDCB421B4B60E64E00D3371DAD1F2B52DF5D0609BD653088AA201939A3324411B59070F7A4016439C97E27E0A7FFC463C8EB1896CCEFF358E1E3C9EB383CD6B8D8F27585280DA8C70E3D5809D08FFD605CDE24940AF1999802ADA4E8AA2CE9DFB8FDCFB877F4EFE1C6945A314BEAB88ADE3DC3F835A4C76ED46008A6D0688C83307E740AEA16D12B7BC56183CFF9B4374C12C53D4F364B0D688601624141B225988D75EE3647EB4EA22D74 -MD = 586A6F5E0BA0FB98D60D09706EBAA19AB3DAE82DE7528BCD3301E2142602C0C8 - -Len = 2031 -Msg = E5B97559FB95D8E558BA351B7F715DFBD2835417B500231EEF8C9AC1EA163A4EB890E6054F0B9CD4F843D249846A0E6BC3A1B0C88B0DBDA86A28F8E6EB30508D78E70917A17BAF35F98FF98B3BA3402DBA0A3111C1F0B62B931F5CCC5B179C9CC1F66CF687721A3551098F5B3DD7CD642F245398E2B36981405771E614422DDFCAC667449C39399DA06D2012B038C1AF106DB458BD4C3D67EC01B44FC473E1E98048816F70F17AA5FC347E0FC494C302334091D323F40A8C1894F610729EB7845DB749E40C7AC0BB37570F42434E64905BA3928AB359AF4F6BD2AAFE2A74DF01A4C8176840D7B069AD0AFFC8C403EF4C82BCE137E491F421149C172B2228 -MD = 7829A879ACC9BC60B5AD9C75213F1C6507AF73E7A67467F249130F02B4BF4B54 - -Len = 2032 -Msg = 83167FF53704C3AA19E9FB3303539759C46DD4091A52DDAE9AD86408B69335989E61414BC20AB4D01220E35241EFF5C9522B079FBA597674C8D716FE441E566110B6211531CECCF8FD06BC8E511D00785E57788ED9A1C5C73524F01830D2E1148C92D0EDC97113E3B7B5CD3049627ABDB8B39DD4D6890E0EE91993F92B03354A88F52251C546E64434D9C3D74544F23FB93E5A2D2F1FB15545B4E1367C97335B0291944C8B730AD3D4789273FA44FB98D78A36C3C3764ABEEAC7C569C1E43A352E5B770C3504F87090DEE075A1C4C85C0C39CF421BDCC615F9EFF6CB4FE6468004AECE5F30E1ECC6DB22AD9939BB2B0CCC96521DFBF4AE008B5B46BC006E -MD = 43184B9F2DB5B6DA5160BC255DBE19A0C94533B884809815B7B326D868589EDC - -Len = 2033 -Msg = 183E87351ABE6CDE83B3160C5E174B7F543F6D1C2AE1507171E532607490E527194E030E25D543C7856BCC3AAED1A0F6BD5EBAE7D569DB10FDC684DF99DF107A78BEC6B0682FF647DEB9429A8FCCF2C13EE69EC8E3A4BD85DFE2BC2F0D8FE4CAF2EAD4BF96890A21DB95609CE8626328DBA475F3D09F22126CF83646FEC3059DC735C12A6D0C0E2AF306C26C99EDA34FA3F5885606725718E2216352999A7F9C5F19219249311375E0EDE0707096B48F32F01FBF3A53FF8D4F5D7D950EB49A7FC1D2A1E8D4839630D854CBA801F9A354558B9866F7EB2F12ABA56F8CC3D60A5D151B0DBEFFAEBB6305C3716A0F939F9D3BF7971DE2AE9E49750BBD7C8AD300 -MD = FDF852714B9E7D7436E4F23A0751BE746A8E79556C8DABFB05FC473A02BAF1A3 - -Len = 2034 -Msg = F8FF3B3787516E0A7579734B74EF878E7C64C19103AE67A47B9BB72D884D1A233DB5FDEAC236D23C94CC5E0A50F80FA0354EBF950A25D22A5D077F0017D0250F5B0B43A6B6958A74D0EC2179441229F698023DF319C408ECFA062B70D5FAB0545E955BA6F77C3B848DD041A4C40877FAB1AA89CDE0699E7C98575C104D713E7265405109B56A034A91A9BABACCE8BF2B493E84AD20C0055EF281642F7FF49D5775C05AB80415102B94FE90CF920DCBEAED91DC4B0BEB57708DBBAE82329EDF2FC0980F47266893DCADA678B374B34BBF75E8716464A3BDAE28A6281501B503A17E4A6E87AD35BF0BEEF0C81EAF744C4BF02485C4438B41097AF72D070E9AC0 -MD = A11DE7B745AF73D6A06AC2E6AEC098C6BD4286CB8B01E1C78407334863289A62 - -Len = 2035 -Msg = 7EA3A713810E1A3CE414301D5B3E5698844F8DEC10729045C5299F07AC74C8A926BA6241CC4FAD0826B073A36CB9AABD7EE4763CFF17173957791F3FF615C897264D9A88A509F932D332BA3B95E5F3B4469AFA7183A67BA46F7B6D43B99A5F5B92823B9CF22F3657CBCFAA8A5FD0EFECC507702AB1B0D1DEDBEAAE326B49AB080188206024CE0F1324A5C9D10AC07ACDB9F60F008A345DA3A8DDA50CF90E364DBCD0845B031D0AB44BE1DE22E7F13F7C092B945055EBF8B17DD8E06D4F4D8D2883918B309376E07D6849927CFC0F99F32AF039C866E723D3A951A374AFD532B50EAE3BE6FD3634B95D184574CF0F5399352FE164D3BCAC75C3E07E800D59A0 -MD = C8345B39D12EEA0351D767BEC36177911792E1B83FA3C2D32EA26988CAA8115C - -Len = 2036 -Msg = 5F878802DA83E8C9822A0262D2C29E1520E3B8B21D01928610B2DD3940379A70B635E1028D236AF0A4F3E7D19F64BA5A286B61DEF259A8B2587B3673BA13533C8067427CA0252C39BFD6A41D70269BE40D35BA7B9B9AC38CE4B980168BCADA5149AA8B49363FC93FD12AD4FF4D89EE8FA87FFABCEFF8508E949EBE8AFDCE5FCBB55960C6BBD912D80481736A0B485F1911068D242596C223C5D6CDF4DFECC7292D24C8925588336AE40033ECB4A61761BC2518E7C51F14E62FDB67897EE6BF398430D87B8B1427C3FFDD43B85AF3B329456E169A02D4573484478DA4747B81056D0D51D63E5B13442FC16BB228C6E87632A9EE59D48EE7DC3E20090EA6CE90 -MD = BD4F3CB5D1F8B2BC446BFC46A611726970E16766E28F253131765D30DFF0D531 - -Len = 2037 -Msg = B652BCB949215CC82A08AA428F90CAA72755D785F102D112689205ECB97F68844B120FAE0F68F87AFB41BE7AFFE3946CDE47AFDD5F1A2AC8326D1C15976C610CF261F95D49D7F13DF9619D58B585446D0F572514C046AC5DB3AA8CD2BFBA41DC9332ECCD4C9DD946FBC60EA604E9E69319ECA5A3EF3910E446D57AC1543CA4DD29F2A42ED3F12B2F21B40911258DB642365F8D5F9737E3F39D77B8BC53CED9E3A2E0C0C8328F27428764E25CFA14FAA401A42B8C5EC1586DC1B4EA108D8AEC3CCC312738D8320F41917D413D3E5214DC46A7AD5EAB4E7326279CD5CEB30FA881535621E096925D18E62C71CBABEADD9DA58321F80C8F6777FB97C516426A18 -MD = F9D8CE964CEE86AF7B9062A6A674AF243551F95D6C0C8C157779154DDCD0AA58 - -Len = 2038 -Msg = 6546D6A5C2F0D01D65BB637E5FD0E07E8320380580E1145BC90FD193D43A615625BF84014832BC89F4D7B06151A6070D29BC8BDAFC7CA713350A1A690ACE8DDD8491C0CDD5625537DA096C76BF8B0D92F43F2EE0250B49F31B3FEE950A4BE5BA0C92A9865F13F933521F84D3F6A35679EE5A1AA7723143B0479CDB749EFDBD7ED0C4C4577A57EAB953AF4D4F51BDBC25D5152ABC17431F4A54EF54C09BD4559F398DEDE349CA00EF9896B67241CDE6568C2E227D1A9B476DD6CFAA213AF4DF680A10227E40AA3287AC52A3E1FC763A5800014E0E986EB22109654E18C65493E6194E1735C631A74F9C5EB2491FEF909983ABDB45C98E673C276A431E2AC418 -MD = 55F6BF5AB090EF170BAE7D2F39D8B10F8FA714554353D51D02F17A5A04BCECEC - -Len = 2039 -Msg = 032E441D08C89545C5961987E89BE2560F04BC3F020F798A83F403AE49A45F16B2D4BAAF899FAB28E85680A5B0354009827ADB04810FFA3E102CD50F3CBB5F13B38162EBBDD866F9AEC7CA8BCF702BD2026497B9F4AFF49507461C9658C6326815FE96922FB96977A79C3A0E81B7854312B8B5147F3B5D028C666F99D57899A68D63DD6C8261A0894636EFDF628338C4AB39B83F9AB66FF748C4FC41458BA8926ADF757A74F59603F61C5EA8C2F1C1B5D9A015F37E4443B50F20047405050B81969C1108EB01C09CEF25F081FC9885FF5623E76F741B811D03A9E05EA2D6DF1C735027D715DB3C8074ADC2ED16082A7A2C8D948275484220E682FE0D0E9A70 -MD = EBFD162EE4B2E0AA57F1A5EF5B0D2624196DAB9071B4F77F25040E4529A80816 - -Len = 2040 -Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 -MD = 348FB774ADC970A16B1105669442625E6ADAA8257A89EFFDB5A802F161B862EA - -Len = 2041 -Msg = 7163B9175ECF3A64D3713ECC73204470A0DC1B015B4DF7ACADDBC68D14DA8C923BB6FF08BB79C1CFA8E001B85139E0A9B18131FC34832C9058D9B8415FBC3DB4C75EB9D8CC025A6F5203BD7A1FAC956C737C11692EA194D18D80F63ED5A2ACB3BC8E3E235DEC9C43819E0001FE35AB6FC3FC25046CD079B32B0FA40816F69E0C47C05C3D7AA68863E8CB4197921DCFDE83BCFE3A8F243BAC68374FAAA6CE9A01438D7AED50CA231954CE9A59EDE88A408CF8114012F619003D6E192CB7CBB7AC3A9BF1712F943453D3AF925F2F1BBF10D6EC0094A7832BF3D0A52CF727E52EB2403FCF3AD7D4CDC8A86DE388840372C250A8011F27BC1B029EC3F39FC14B9180 -MD = 74986D58217054772223ACC7AE7F55D3DC044D0005238AF8C62CA92FC31052B9 - -Len = 2042 -Msg = 3DCEC0E888A6A238E2AFB6A02F6F270FC30B93C2CD4FFF9F6E9A0153D50FBA559080A282519C7B91396147B7279937805060E529F415150FD7A9E1950DEF27FB2DC0B201C73C2A834AE0CC073961B2CFB074E40DB425B0E6628389CC622D7B963DB1F7A35823CE80D40DA1112302EB90461EADA4005EF4D5DDA5C04BC7AAF3A9DED53AC54BC17E2E27967C7B828AEAFDC192DED6AE741044347BE7888B3B6DEF63A118830ABB1F6B6D5B2D28E5F7D5803E8507D4F6D06D85D90D1E250E6389CF63D182F4587E5C5526847A0C95E2EFFC3344E32BA29E56757BC0125148FF08B83553A8CDF0F68AECB514F06941199799C491E0C55C58D240560905B56C6CF800 -MD = 11B0BA5E49BE3C5581C84A64751272F0B54C1B9170BED46DAEF08CB6C186C6A4 - -Len = 2043 -Msg = 41355A235D1F809C3C5B921CE7FB9D517ECC1E7439FB304F2D1CF919DAA5DE13154FAD2BC8FD7F3EA3B026CEF34BCFF61B5D779CD8D2C76461FA3821D6343AD05A791BC915164543C32A74C85FB225DF22A0039D6F349C6E39545CBD490359EE5152D32F263BA5B6169223F6BA9E125AF53BAFBA95FDEEF5A068B6299871CA1BB743235076471144501E03C911701476152C218EBF1A734198655498EB6F82A1FDDBE4BB845B0DD7636943CE869812F9DB13E59055A7ECA774C60105E95A59E23A9156E23FB51AA9B7AA95BE82D8B375542D320A1989A85E6F9ABADF85CFCAB576C93E71A1E1367A2789F21DE5D4BFC0660DFEC110860DAA15F23FD3A4600620 -MD = 224E1626DDBAA48AE748E267F9F2A225FE32A8A7B17B4E19E5C7FCDA5271F6E0 - -Len = 2044 -Msg = CA0B483D9E27EE4DE097CC92AF14D4A1B096E7533E85AFF050C49798A09167C63CCC9E85BEE8FDBF3681547C687D71E24B4CF618410FE9DF0B0D161AD323E14385C661EA7DCA937F62ACD0E54173FB18C22DC0048B35470D81BE6F1790B8CE63CC5495821AA34211DCE1E681F95DAC61C960EA25D74FABCF97BC3CB800BE6DFB4325A608BA2C701756B31C179B6E0724B7DE0E95E9732865034AEE72C19617BE8AC5CC266633E949C733B38F4915C94964EF5EC2F5C5BD65E1446F2621A120376B10DAC06792625799E67BE6F474D4DEE4D4E84C8EA08F03FE4C95D8967C3C28E82606FE7390449C4C0EBFC002054C8228157D04D8B4346A1667EB173CF238B0 -MD = 73025029C2ACC3E37141C8A802D7401FA35B8857F1667487CCA67E49E9F9E733 - -Len = 2045 -Msg = EC545360EE77F181B55B942CC77E84B64A74241F8E02BB940560575964C5FA131C453BCB179B6547D317180BDA99D8EA69D4216B58E8C38BCABA42E2B1E23712C6558C6A1A14996955540A4D54A97364B1ED11BAB2B20E0DCA2827FE47EAC10E7BEB694ED6F48860D419F3C370F893F57D9858193389DAF69EAB130C0BCF00D639E3ACE5240E232D733D0A1AB4A805BB8367472DFEE0873762CED8006DB3EC84153A48088581C2BFEDF78FF9DCD628B2B9DB64FFA900B62EEC1F358E4ED5EA31CA719EFBF381B6AF5B366CBF2025099E30B39BF446C8CA123AC302FFCD163946306F5420E3C2E8D50F48169402EF2E1764228D30A4F14A3EEAD1C0A106667518 -MD = 21A4F9175B2FA204D254433D6FBAAE95B440A667A3B42F7E6D2096EC63D93838 - -Len = 2046 -Msg = 36CF74E3561474F90A2B62718C8740CE553A207334A1EDC7F95B702848595EC23285F826C989CD975C4390E24C485335B616BCBEBC16EB7C24E895F1A633D5E331DA67BD2A86B088BA6874BAAC74F08F5483D0702F0E41229C14A588BEBD592F86DADB5BA72A1E7FE310728B4234AEC7361AE460DB299D54235DBC92DC20DA9A9B3DD3FD7E68DABEE80C8D1272BC1D1C98093CAC93DBF7FAD2D448E2F1A7992256ECB537DC501756F66D6D7B4409C4C74CEB9355E8587136F67FEE9736667370EC924AF34DE22F75410C1251B344653F2535A163B7FB90ECD874FB0362670E2F9182EFDF0221B0F727BC63534E9F98F4AD713D6B9486F58221442273B9D1EE50 -MD = 0C2337DF0E8BEA0033934D0608E115E261AB6E11F8C7B8FB46930EA07F103908 - -Len = 2047 -Msg = 1F42ADD25C0A80A4C82AAE3A0E302ABF9261DCA7E7884FD869D96ED4CE88AAAA25304D2D79E1FA5CC1FA2C95899229BC87431AD06DA524F2140E70BD0536E9685EE7808F598D8A9FE15D40A72AEFF431239292C5F64BDB7F620E5D160B329DEB58CF6D5C0665A3DED61AE4ADBCA94DC2B7B02CDF3992FDF79B3D93E546D5823C3A630923064ED24C3D974C4602A49DF75E49CF7BD51EDC7382214CBA850C4D3D11B40A70B1D926E3755EC79693620C242AB0F23EA206BA337A7EDC5421D63126CB6C7094F6BC1CF9943796BE2A0D9EB74FC726AA0C0D3B3D39039DEAD39A7169F8C3E2365DD349E358BF08C717D2E436D65172A76ED5E1F1E694A75C19280B2A -MD = 69F65D8D5EB315315F044E675ACDF45F6604CC998E335C50EC5A381C3D525F22 diff --git a/node_modules/sha3/test/data/ShortMsgKAT_384.txt b/node_modules/sha3/test/data/ShortMsgKAT_384.txt deleted file mode 100755 index 689a8bf..0000000 --- a/node_modules/sha3/test/data/ShortMsgKAT_384.txt +++ /dev/null @@ -1,8195 +0,0 @@ -# ShortMsgKAT_384.txt -# Algorithm Name: Keccak -# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche) - -Len = 0 -Msg = 00 -MD = 2C23146A63A29ACF99E73B88F8C24EAA7DC60AA771780CCC006AFBFA8FE2479B2DD2B21362337441AC12B515911957FF - -Len = 1 -Msg = 00 -MD = 4C6D164043571A32E169A527CA3503EA391BF91F22287215DF75EA243D53A0D042BC66EFE2956D8606A24F39E255A081 - -Len = 2 -Msg = C0 -MD = C7058511440BE5D4F5688EF721000E91244AD6D10FEE477DCCB84E8B84DB897F51DB533E49964B18E5E362E5FD569E19 - -Len = 3 -Msg = C0 -MD = 3C297324D6F43BE6A5B784C25B559910B6F79EF3C74DB21575325CC9C917D935D8C3D6A9AA34F9FC65F1E9C39ABC83AB - -Len = 4 -Msg = 80 -MD = B43AF6CCF78FC5CAB63EB7CDA68FD89E95C506EEA63C131A82F9D9A1798002BB40D3B78473C3A66456034720BA8142E2 - -Len = 5 -Msg = 48 -MD = 6877F31B109EBC6DDAB14087739D7702F7E2AA2DD9D54B3B9C04749CB1ADEA194A52496DC78ADCEE84E705621F0564CC - -Len = 6 -Msg = 50 -MD = B7136D3EF3112A47C1C59C5FAB6A40C6ECD7CC89E400DC2EFAE388DEC1028985E138A2B2F54683A8814EF3C1BA28EA9C - -Len = 7 -Msg = 98 -MD = 748DE17DCCB6B3FBAA1C938F5A3167244C83683105D45D429F0B40B31D9317860529EA54BFDE1521423CEDA9DEBD9D73 - -Len = 8 -Msg = CC -MD = 1B84E62A46E5A201861754AF5DC95C4A1A69CAF4A796AE405680161E29572641F5FA1E8641D7958336EE7B11C58F73E9 - -Len = 9 -Msg = 9800 -MD = 3D368329F238F523317E7FA24C9B30603845942D3DA0BB09BD3BC99A702F2159E0504CEAAE888DE125FBA1F64F36DFB6 - -Len = 10 -Msg = 9D40 -MD = D5BA248B961632CF08CD446351C184AB0F070C5668A6C96FA3D0A18FAE8A215610797880E5EB2C45E9F5637D1D3E397E - -Len = 11 -Msg = AA80 -MD = 530A46AEE9512C334F64BD1DD24A3E993868389CC5F811D7034AF601E896E2B6CC003F6CF5D641CCEDB3E0EF221FB705 - -Len = 12 -Msg = 9830 -MD = 9C25B57E27123FCDE904EEC5931ACC330DA272C92D545795D04066BD9962F28EDCC2E0EBA52D7100C13D73439E2CB568 - -Len = 13 -Msg = 5030 -MD = C0BFE1527CA439FB70A82041521FDC1277AC2DB22FB844CB1300F6CCA147E1978A49D9392E4F6A277C9A68FB9C9F1CAB - -Len = 14 -Msg = 4D24 -MD = 548585D36717CE7B8AC7A7B1B2540312697CC98FD6E9FD3557ED27114A3CC1B1802D3512A3A63FA3E733ED274601C69E - -Len = 15 -Msg = CBDE -MD = A5F1B2C8F5A92A45E5622455B8A1FD1EF26310B180A9D7DB5A3D8413D8ABF140C70C1BDBD91DC5E609042CE88AD9CC9E - -Len = 16 -Msg = 41FB -MD = 495CCE2714CD72C8C53C3363D22C58B55960FE26BE0BF3BBC7A3316DD563AD1DB8410E75EEFEA655E39D4670EC0B1792 - -Len = 17 -Msg = 4FF400 -MD = A937B475A5FF181B40E09262EE6D84683F08E7C5F5050A732A462E0A285D5F963BB78D2A4E3A1668EB6A745A0DE6920C - -Len = 18 -Msg = FD0440 -MD = B9B89E3888005273A964553CB6F6104F02564C283D34E64D6B7EC8087A0B4A215B5B3D18753A1C9B0FDA33981A7D89E9 - -Len = 19 -Msg = 424D00 -MD = BB209F04AC4E406F4F852D83FC1BF419EA6D4C7D94054020DFAC35F16697FAE7A2A1A505167BDAF5E387E9279018A786 - -Len = 20 -Msg = 3FDEE0 -MD = C75BBEBCF97BD4F0397A0734BE0EBFE93F4F4D44EFC317EBB51A38636414DBAD650D2103A22FCF6453D3A851A44B8149 - -Len = 21 -Msg = 335768 -MD = BC2908471D9EBBCFE44387B99C7095DF1A902BA14E06F8AA6EA326478B5695A13DC6529F2E7F590A76A5FBCAC2A55F43 - -Len = 22 -Msg = 051E7C -MD = 74D653164A38906965CFFA347924BC01FAF8DBB1D2EA2303B3E742F818A9A320EF2BAD7451712BE364021A7629DEF7C9 - -Len = 23 -Msg = 717F8C -MD = A658A0FBC03B682D4B02FA7F62D61B80DEFDB2FA335526CD16EF9F8FE9DEF0ECC74BFAC46FC8739B5027178BD374651B - -Len = 24 -Msg = 1F877C -MD = B0665C345F45E6DE145B0190335EF5D5AA59E0B49FC1425D5EAE7355EA442284CB8A2152D565EBDF2810ECCAB15AF04F - -Len = 25 -Msg = EB35CF80 -MD = 6B1CD45FEF2D90B2362BC397D9E6FF27F287DF98D4428D19AAD96BC1D930E254E3745485F976050B790C6F8F0303DAEA - -Len = 26 -Msg = B406C480 -MD = AA7530AF6F63A1B13C9395A2C35308B77E191637FFD6DD6054026E9AD05EF478349C7EF5A13C8CD07F8DE788D0CDC850 - -Len = 27 -Msg = CEE88040 -MD = CC666BA708F83FED8F065F46457CF6D0B3D9F73438F322F85EA6A3566D087D292C3788E365FB4AA123F4936B83440209 - -Len = 28 -Msg = C584DB70 -MD = ECBD65EF447FB3DF60B041B53EB64CDE19D3B2B3C8DE04DFC514D6A8DF3390996217AD163769495C1D03BE8091348B67 - -Len = 29 -Msg = 53587BC8 -MD = 1CF5FE44300E88B44BC620F13E8269030FCBA1A5DC490CE1336465AD03AEABD331F15B657853D5E773E8F5C9BF93E7D2 - -Len = 30 -Msg = 69A305B0 -MD = 36808A9A3DDDB70E51ADF7C6D27C59583FB1C33E9827F33FF1671D3E767F37574AA4EA70684D2C25BA10E6ABDC0CAE38 - -Len = 31 -Msg = C9375ECE -MD = 959254829EB200A7ED0F8701D3BD60E452B8C175BF4B851219A92914CD6EA571DEA49B89A4339F9DD707BFE0687EF4ED - -Len = 32 -Msg = C1ECFDFC -MD = F1850B2ABB24F3FD683C701582789D9E92B6A45F9C345F9DAE7F7997C8C910E88003E592E59281CF92C92D6B51A1AFD1 - -Len = 33 -Msg = 8D73E8A280 -MD = 6C381B9488768084838A1C80D7486F26D0DD1F5E75F0063A314025F1D44FED08C5F5F81CCB5D6E7AE5556DDF3A4B5335 - -Len = 34 -Msg = 06F2522080 -MD = C3541CE36DCCA3535474A5C44C3F9284216D013306E0CA182EC834314378229BBA9DFB5ABBB81EF25ECC4B31F3D4C6D8 - -Len = 35 -Msg = 3EF6C36F20 -MD = 6BF089552F9516AC972794733146DE46D6B211624AD1EEC05537256D553A9D48D99CB2392D0CCE09DE92B13BE73AE8A3 - -Len = 36 -Msg = 0127A1D340 -MD = D42D2B4502CFD7A1FCEBE14B031CA9A00C95EB85CB713B779A9ABF302AE48796F0039FE0B864A72A44310DDCBDC70616 - -Len = 37 -Msg = 6A6AB6C210 -MD = 18B53BB34A8737EB1DAF87758DE07385F701EA253B10E4D2262EA68FDB6B921E75AF769050056039270EFBD8A501722A - -Len = 38 -Msg = AF3175E160 -MD = 45703EDEFA6AC0C410FD7644853251CA02A88223B408ADD378B33A5B48207AC7FAEF46E96ECBC19A31EA7E326FD808DA - -Len = 39 -Msg = B66609ED86 -MD = 0E367CAE59CEFF3F3AE6DE2D11DC854597BB8CBB331D3BCA03FD7149B93668F6997F9DB4B48FCAD99DD29FAF09BD75CC - -Len = 40 -Msg = 21F134AC57 -MD = 68D437327F158287C304BBAF36F782F497DA2C480A1FBB268682362218641F9070A014919AD7331C49BEEFCCB437FE9A - -Len = 41 -Msg = 3DC2AADFFC80 -MD = FFC924DF424502692B32D57650E1DB5425F0BD26D381D74B3FD2237A01DE522FAC5B0848A145D4A514110E0A8CA51B41 - -Len = 42 -Msg = 9202736D2240 -MD = 9F139345B6F463AACDEF0A5F26381A473F6FFCCBCA2A86ECB55F1AC9B206188469422C67F79F4B5D70C313BD511F60D6 - -Len = 43 -Msg = F219BD629820 -MD = 7BB77F86F790AD5A0FF44A17668422DA9AFD4651B53F0236D10B7FC937298E3CA326CED96AA6B53CB3FD1876146B46A6 - -Len = 44 -Msg = F3511EE2C4B0 -MD = 227416DC5BD4FFB96DC2C24078E4FE956C49DB45D26944F6F1D7F16B1E1BF6A0E14697D4613CD4F39273AE9C8C8E4BE3 - -Len = 45 -Msg = 3ECAB6BF7720 -MD = 495A6A7B29F29BA7EBF2283EF3FDE6F37D6AE34F548A69986494F393B56BE655F275C232B20E778D09E7680C2FAD58FA - -Len = 46 -Msg = CD62F688F498 -MD = 6E0BA20A741FA548379E144486EC93160A0464A0E8F1E2F64B69A446902A2912581C59EE9BB6846D8557D67163D9082F - -Len = 47 -Msg = C2CBAA33A9F8 -MD = 4CABCD60BAFD4064D48809D55B27F44BF7B88287EF32DC2133B98F42F1D2A66F3A0705FD712ACA8F9F12198B7AA03342 - -Len = 48 -Msg = C6F50BB74E29 -MD = 03566EC003FF55184F0C85BEEBC6D1ECF5E5D082D8D40137246F8FD42BCE097C09418845EF60286FDD894A00FD2D6589 - -Len = 49 -Msg = 79F1B4CCC62A00 -MD = A719EF014A88F63C100FDBEC7AC3F403ED2BA57879A05ADB66D5CFCE4CE628C6DD4DB995459256D7029D64306319083C - -Len = 50 -Msg = 90239D7EA2A5C0 -MD = D934DA46E8EE2C80C63325245C51BB1CA3841D9068969664781D8F733D046069F4C2E6CB798B7B05A5A771090FA8DD4B - -Len = 51 -Msg = 9AF4C2D144E340 -MD = 4090041C510F16FAAAE0082FAD78310919923D33BCAFEC044DDDF43304290D51245AFA12939CDA94C76365B31F49EB63 - -Len = 52 -Msg = A4F2613FA7AB70 -MD = 9E824186D57E92116CBE08424285131929F242AEC9E193BB96F455EFB32474E2404D613EB5FDC4C0A179BBD5CD7A771E - -Len = 53 -Msg = E863B85EE7B528 -MD = 49196F45BF6FE9ADF38EA5FEAA32921640470ADEB6F0C2723188B5A9C14C3B0CFD7E23FBA5E6284EA1736D8190170789 - -Len = 54 -Msg = 9F3D6D6A44B684 -MD = DD87A5F2D5B73664A29AF3B478645A890624CFD335D0C2C541DE7E76128E88855D901870F9459B5BEF74B2FAB60AD963 - -Len = 55 -Msg = 14B06DD54EB364 -MD = AC3FEFD530DEA12E39AF71F97B917BC5644F0E2ABA36417EC38CEDAA4884DA52F6AFEFBFD19DDE9003750CA9210C2022 - -Len = 56 -Msg = 119713CC83EEEF -MD = 790D700FA34D6A835BE311B639474780148A2F087AC2FA86E8A1A433EC7A04FCBFC5284A3E188B7D91C6D094EAFBEECB - -Len = 57 -Msg = 8569DF971E674E00 -MD = B7F916A4DB1A9CE1F161E65B055E4CDDA03E8DDD75402EC0E7DBD70D21FA1AEA548DB6876C8355826E5E103EAC53C0B2 - -Len = 58 -Msg = 42DA39AC5951FEC0 -MD = 5A22A58F84C68A39791CA831F3FC73E9FC6A9D8373CBC8C7D3FED28CFC848B05A9F50DB44F9E575FE568392512C4439F - -Len = 59 -Msg = 230688D359F31380 -MD = 1BC99A9E5CA465483280E3CA2C351DA3F08422F57C192868CFF7B6FF8D79031382D7CB45C1F24AB2CC1EAC23BD290216 - -Len = 60 -Msg = BA594E0FB9EBBD30 -MD = 67174EF3568CBC89AF1AACCB09E3430FA809BBD5007750C0B76E8D06337A47A4DA1F30A359F011C7BACAEAF87F67005F - -Len = 61 -Msg = 9D1BC347E3B05240 -MD = A393ABA63B2AF1BB7CA9AB6106483E77837937E1069D07AEE8014E3F717FAB1A9C4597977F2F65AE778A9371729CCB53 - -Len = 62 -Msg = 756FDE7AB6CB531C -MD = B579609441F8BD88F50A986C9D45F5F8C19A04AD24B8E1B2ADAC38BE07DBB5BE967AA4A604AD9D7AAF3AC82E7B8381EE - -Len = 63 -Msg = 669DAD29EA0D289E -MD = 546984D4C54011A1ADFC5B5307A54766D876E489E1D379BE8E45244507A1D7077B2C8835C6BE84344B6265554E80FF60 - -Len = 64 -Msg = 4A4F202484512526 -MD = 638E65758A297CB09DED1AC5B9E8F779802000AB791F67F33C60BE36443793ADCC8A4A58E98688157A41784F02A4BCB2 - -Len = 65 -Msg = C86CCB0A4116026080 -MD = 4F72E68C533566EFE69968E329E89A5FA11190EF7A1DE6D28EA2A81CA69621AB1D0A4F0D6B76348AA713FC559A1A2C75 - -Len = 66 -Msg = 7A556A043BD867FB00 -MD = 8034EA3BC2505F45127FD87AF150D9B57FE78E3D236363098152AA0B1C7C6656EE4ACF5C82F35DB221CA67CA778ECB40 - -Len = 67 -Msg = 91829C7B4031005880 -MD = 5046D1CCEC8FA6C536F9A921FC21B734A65527A27B60E22967BEFB16E549D99B0B9756DEB092E08691DD79F939C09C57 - -Len = 68 -Msg = 0462427C865798D260 -MD = 4169598368CDBE3AF5013B6DBFA9901BCD83DB95AF18A073BE5DCE191B4D89C6540389944AACA6089519B53329D32F0A - -Len = 69 -Msg = A51806364AFBD2E830 -MD = E08F646E397C8C31BA410EF6E8043DE541DF735997AC6B963E626284E3AEF8D412D2BB16CA62B7292EDB6258E180F212 - -Len = 70 -Msg = F8CB65B7FE6995F200 -MD = EAE2BC9BC2F718FBAB339D5411E66B52756DBDF3A4129FF375D7EA0DB1681B98EF9899531164F1983F95F3505E88D3D3 - -Len = 71 -Msg = 454C87F43DA37EDB04 -MD = 01E24F5069AA06F0D48B84254D21185F9074D84885D4613788ABED81A0D3941DE8F4B713E2E671197CE54F6F01B5D86E - -Len = 72 -Msg = 1F66AB4185ED9B6375 -MD = 308EC6F2EE3F6E01FB3AA06EB7C8CADD199354751B69FD4BA4D4671858F28BB45C94E712AD9D356FCB443067EF5ACA2D - -Len = 73 -Msg = 5D7C71C275D9F5613E00 -MD = 5ACD2786FC11A02A8F6B0D0C98BE85557EDEB53BE23AE4D5FAC84C98B8185003776EF3DAF24E448FD23B27FC6E1CA7B1 - -Len = 74 -Msg = 1A533E4BD100A83884C0 -MD = E612E0FF6971752305D781020C07895959AF72A6B61DCA6A4D2962F8F6F6659BC89DAA4FB782BFB19464CD7BCA5DEA39 - -Len = 75 -Msg = 7C8433BB4FD46EA17BE0 -MD = D3AEADEFD701C2A5CF77E5E0418B996A8F059B2A2FAC892A27242DEF04662758D6EB3EA23A9F19F486C20F1C0222ABD5 - -Len = 76 -Msg = 8CACC33C81B29F0E8830 -MD = 9656E7A0DD53E0F068C0C3DD6FCC4F51F0DC59A06BAF73264ABFA6D3662955128E7827631C807FF4DD789705CB09AB28 - -Len = 77 -Msg = 9CD0B4A48455A6716AC0 -MD = 9DFC9F1E2F5A14D5C4D4AA65A84D77CEB14CCF5ED2C5C0DF502BCBF4837ED694E035F24EDD44A92DDFD560913D9A2FB4 - -Len = 78 -Msg = 4DBF1B5FFD3D72D20F50 -MD = FDCEFAE850CEFEDD84992414949D7483096C6ED2E03AC841C7982EA9828228C0EC9D47225E6030666270BD1DC0531746 - -Len = 79 -Msg = BE31E2945E1BA17901C0 -MD = 3731694C8B139854723C62902B93CBE10F80E42D75610EA2A98E33CF7BF8B03633DDBD8F64966441ABAF8585BECE1DF5 - -Len = 80 -Msg = EED7422227613B6F53C9 -MD = A88F2FD112E5F11E775AA7858A3A5202E8FCD259F5D112BAA6F568240D2ECC047EAD88509E4B8A747D370751FFB2FDC0 - -Len = 81 -Msg = 77B56B460796582D1FEE00 -MD = 9BF8D18E0628F57802C9A6B5D711308A274D6C1F83907D1987F103C486389B7F34996F732507B32C6975F87001A89F3A - -Len = 82 -Msg = 5F085C1F91F2E5EB05C840 -MD = 48063E40D82C6ACD5119F6B9F02D8AB3D5B22EDFE574ACF717702EFA83560F91EA896C49E764FF69639FFF5FEAFE06E3 - -Len = 83 -Msg = E5E559373233E6EF933120 -MD = 1FBC23DA6F8817AE8A1EAB880CE921608F537D70BC04404A61D09D5D065EF61A93663BC32EA7F30E900C84CA3564A614 - -Len = 84 -Msg = 670C357239C46D9E96DD20 -MD = FAC59F0453275D2CE086B3477A301FF68EB6C5870381D7172E0E531C328DA1C05B4F82501A324B3AE613B503F81906D7 - -Len = 85 -Msg = 33BAF96B35241EB2243230 -MD = 09CB4576A423DD90C917C4C1B3FB5554E55E2EE38CB4CC686C6B20636B937C9A5529A0AE58F8D3358460465514FDC9FC - -Len = 86 -Msg = 7148A621D35D6D486BDA90 -MD = 0C744C7B37CADB5EA9543ADDD0DBDBC7784490C5BF298743D2C1E1EBECB516B6297A3EC718F95E263B791E5B52E73386 - -Len = 87 -Msg = 9D7146B5E9C8246BEA8C4E -MD = 64E8146A36A78F4253C424469E2CDB139B88E39561C44664577DB12073C63161D74141040D7C10583732F0E4E880AE63 - -Len = 88 -Msg = EAEED5CDFFD89DECE455F1 -MD = A22A31349D7816545BE31B80E992BDBB62A29480917CEABD0AF5F2FAFBF276D4C29B63A04910B830B8757C81E223B7F9 - -Len = 89 -Msg = CAD98AD0D9BF161229074280 -MD = 0E4E93B8D0D54E0E8F0E28F4136252CE97028ACE9C4C7663DF8527B2DF6BE0704B743DAD1A1E7EEC3C2908BEA8714B86 - -Len = 90 -Msg = 6B767F82890709DDF7A1EE80 -MD = 6947F208BFDA406E3E5B1D16CDFFD22E311B7940DBF1C26AAEA55FDB5128972B44576F0A4DD5D0C842CDFFF66B35CBF4 - -Len = 91 -Msg = 73697688CBBF28C51DDDDAE0 -MD = E5904CEBAD316CD227EF19C3E5B69E1A7098F63FBAEBA6BBF1B25441C078F2AC601E4F62FA4BBF7868797FC5CE27FEA9 - -Len = 92 -Msg = A3C1967A97E58B43453D3760 -MD = 12596F9ACB879A7AE4D7218F836CB49730B370BD8AAFC9EAC0E51109340AEE3269308724CE126887C5C1B58A77E20E9C - -Len = 93 -Msg = 03981280D89F7EC9845C29A0 -MD = 1A03B8B2768F0B876FFE11832754A6E7FD08303FFDD089A5A149995E256C1F4B46ACF24AC9280EB8EEB4CDEC71829419 - -Len = 94 -Msg = 0E42E6EFD4D3785EF0BB3A4C -MD = 2F1E9F4A7771C5507011B9F86BA21D10F0D28BE0D4199A49F9BF3E4DBB29DE4AB4B03DB99941D0FE85B6B7C941888C1D - -Len = 95 -Msg = 6CE6B3C077865CAB3D099B66 -MD = CD9B80A4CFED8E0B5D7D2110C72CC5695777EB40AE0B67B9E280A588CA13118683BE1E2BF8E06FAFE8D82CA7EB4B80C2 - -Len = 96 -Msg = 5BE43C90F22902E4FE8ED2D3 -MD = 36CA9CC329F9A00FAA5F4F21170A017742174D3CF03C084AEB759F6FA0390349E1B502E435CFFB0BCE4ED46C0012A65C - -Len = 97 -Msg = E94F8C8A909FFB8DF22C19FA80 -MD = FE42D951D617798F5464423565DD22D626413949899436CEFD279E7DCE261F6D0ADA9CFDDA5EC774726CD3D26B894039 - -Len = 98 -Msg = 004761F6028ADBDC4D5A8CA640 -MD = 053FEAA2C9AE9F266E06BB0B5AD64C525720A4245C6C78E095AFCBCA5341149EB4F09DBEB62180FC30ED58E8B100D8B5 - -Len = 99 -Msg = B1BA2223CC3AC042D06554EAC0 -MD = 49517ADCFA58E7B6A454EB3C05B64CAF73B829C619059AC00FCA54D35BE95ACF1B5240633E32A563902499C9121EC3AF - -Len = 100 -Msg = 746122438AD1B5B8989D64B320 -MD = 798C761D064EC4391C7815639A82A72E5BD5FFB8742CDB29026C0F3AEB27072496512288CACAC651C26E6C67F3B0A1A9 - -Len = 101 -Msg = 3DAD6E4B69AE8BD16D830213E0 -MD = DBC2A6DFCA8E1F2CE1039F7B93831C38BF2A9B26490B32867D4AD89C0679016F4B73887B1BD4D8A67FF32D5BC8E73393 - -Len = 102 -Msg = D441F54B918819F36B220B9608 -MD = 678E8DD5CB5B3F349D49DD4024C7B767ABDC59B3DF2BBAD0222BBE34084084C32BFAFC3A9BEF8C50650D86738B40D258 - -Len = 103 -Msg = F44CE7427B6042ED343F6D2194 -MD = 95357B164455A7219415DDCA59D91F5339449F6851D7BCBFB960CF8D3492D5976CA024F6DB181C233926263C62B4A949 - -Len = 104 -Msg = A746273228122F381C3B46E4F1 -MD = 3DA54976B291DF77F10BF95E9B7EF9FB2F88DE075DDF6650BA788590F4E2E3C830D3B7DFC0193656B0A185E3AAD9AA5A - -Len = 105 -Msg = B883CDD1742C224246784DB69080 -MD = A6945AC97805C3AEC02CF29FB1D2D244DE314FB3A70852405FC4D791CAA210F6C42FB3AA20A1756D8295E4CBB58370FD - -Len = 106 -Msg = 555FD729751EB2F8986B19578740 -MD = 3D03EA8C9BBD7F6F7F567A74889339D26E61929B74DF3BF4B184A8DA4533A9FCEB17B1D312DF06D94862777D2E4EE876 - -Len = 107 -Msg = 7A609524C0F706F629441B978AE0 -MD = 3520D9F524542F7581D15A3430CBF8EB54866B13A19A512DB6FF8125C8ED1E0BB1B1A90373B69812622B34A3E11B6C91 - -Len = 108 -Msg = AC79B374D401EFDB3232D0826C60 -MD = F274984ED1380EAB9F3ED09A1B201B353801356B2C48AEFBC6FF4E479D73131F0DF1930AED833D3112CB494C7648EB7B - -Len = 109 -Msg = D8FC20BD0025C7582B7946947918 -MD = D7EFA3CC92B5033836696E6EE3B0E1CF831026D2F06F9BA42A0F8D3BEB8B5C0FD26612CF53D178887E671A0F90A531B0 - -Len = 110 -Msg = 0ECB1FC3F81F3236FA7B91F7AACC -MD = 20330F66C39D4596C941F1D0F370FED99C910BC72ABB331769C02CD50578EEBB55B4EA447C2E3CB584A0FCF7732872FC - -Len = 111 -Msg = D5334CA10554C583F11D9F84A71E -MD = F97375E80CBE7ACD2814BD79D2ECDCC60CC5D99C9BD959B7613582C36DA86DC5365A8249F058A52BDC62F10D51E493B6 - -Len = 112 -Msg = 3C5871CD619C69A63B540EB5A625 -MD = D21A7CF252358A1159A55934456E67D9E1DA538D4E9F9F1ACE2FD75F3074B27AE2B356144BDA7BA0B1ECA1AA201B20DE - -Len = 113 -Msg = A999538B0C31D7339A217C1484C680 -MD = 0D4648DC34608AF88071CBE092C179084A18A5E2E6A52CC9F5C351B5FE9AD03930E74AFD7B9A0115E70669F056BAE97D - -Len = 114 -Msg = F4D4FEE364CE3CF439D0160EA7E780 -MD = 38C23635EB75A0F396BA9576BBEEC95B98192F1388420B51546846A67F3DD40A5BA00F9680860378981A6ABF2EF54D3D - -Len = 115 -Msg = 55A4FA6097E8753CCE38FB4E59D460 -MD = 53F00C8072CDFE24A1C0B589E37258968F83FA313B9404D2FD32CD8FB47F60B474FD1F3826C5F547B073799006B97DDE - -Len = 116 -Msg = FEE0239360210B6E3761E6059DAC10 -MD = E0C856F102EEA5008009B390533B5BCE0816F567CD9AE1E937C2BE1DE320B463998FF0604AF34A6DA6116CBFD640959F - -Len = 117 -Msg = 1750D5D521528582177DCDB046E008 -MD = 0E58FBE2966DB89AD9645DF53D3EAE350B7B9B3405A516B32FD3C07BECE457592F3CB278D09B4D006EC23A624FC2E496 - -Len = 118 -Msg = 68BF3921EF9DD0B6ABF732D9E508A4 -MD = 598CBBBDE6F3846B4CAB97BF7E1164DA2528D0C85A6EFDD5D76A1B5ACBC19F3F21F3FB3025303FF85BB86B5D0BC48650 - -Len = 119 -Msg = C26037F951B3CE27D56C0303432FEA -MD = 841E89ACE1AA26245DC2978457AC188D1CE67F385A984775AE3DAF2A75E08C1E52F5AD71850112F5F6B04B9559C624E8 - -Len = 120 -Msg = FA22874BCC068879E8EF11A69F0722 -MD = 8A0C6331429375F052960AFFF6D5FE33759F97145D60B262BEDE86D5254994558FC1800ADD09D6887C275F4DD3531CB0 - -Len = 121 -Msg = F3D384F6F8B0F7683C2875EAFC19D680 -MD = B0FA8556845A5858824EAECD1EAC68C7C00E2A3210393F57D0A436A8562684DC0278F49161F8145773522F125F0C64D5 - -Len = 122 -Msg = D8A9E01B7ABA9C15F27C650AA6D98040 -MD = 95EBFE9374530268772748B673BD853CE42545704E236285BE2FD882640D622E80176EFC46DCC1E4E9553F1CF95B7386 - -Len = 123 -Msg = 2CFF7186405B02024C4203A7FE7A11A0 -MD = 39181C5CF9303963A659518E742901F35821A2F6FF77E2D895CE5440352056E32E72F30F2F4B44EB447DB533306BADD1 - -Len = 124 -Msg = 87217854ED19AC6E8AEF3B39B97CD350 -MD = 3C27D6F77C66A1F3E4E1FD66210C0A1E966DAAAF93A4E75DB11DDA63622A6B8C97F0E700B1F60306BDB40141DF473809 - -Len = 125 -Msg = 441D8FC5478410033BEE2F3DA9FFFCB8 -MD = 15888726336666C8CD8B7D7B0FF8434A5B25E78BCD1B624B427AB52DBF3D249D386E72231972BFB612B0364E4C9019DF - -Len = 126 -Msg = 0341698E451A235FEC3A6BBE42C07B04 -MD = 65F490CF44DC3A5A42A917DDC5E94C8B6E627FD575DE0F955E5A195F1D8F4FFD3657A8F1843367200F58C3F316E40F1F - -Len = 127 -Msg = 2C288B527CE3F931B0C565BED2C62758 -MD = 0EA22532D70274D672BA3786FE818611331448D40E7B058010008C986DA6728B0831DD96E4BFAB31CB776298D385B159 - -Len = 128 -Msg = 52A608AB21CCDD8A4457A57EDE782176 -MD = 18422AC1D3A1E54BAD876883D2D6DD65F65C1D5F33A7125CC4C186405A12ED64BA96672EEDDA8C5A6331D28683F488EB - -Len = 129 -Msg = E35A1AC6054BA5FECE64AEB3CB97ACDE00 -MD = 176ECE73C77B6251C1093FDCB63C8A1F2E43C8EE99299698D4B13D98E8315172CA9EB673ECCB7551EF380C60C0E42976 - -Len = 130 -Msg = 34EE2C639DF9C71BA46E88058962D3C2C0 -MD = 02E11C10D34731653F92E76F58DA048A8D4BC26CC53B9F3CC6D44B1567CD46A6A59C48C136E843196F446F831A9FAD0D - -Len = 131 -Msg = 5EF1EC3AF3A823667B01CEB7069C3D6F20 -MD = 73EA025ADAD267D866EACBBEA393FE1135AE9FED42BF4E2776D9BB4559B55C5E8C618A94BA1EE808A5B7E76F46190933 - -Len = 132 -Msg = A4E76D43E7CC38C19ABF5B09F0E2104E80 -MD = BA0D711B91F2405061785C0B4B24C6B11352CE9A98B46170752F29238CC7B2DB23CBBA87F9667E345BC045C0C6B9E94E - -Len = 133 -Msg = F7E6911439AFDEB747AEE1DA0E64165B98 -MD = 97A1AB995E273C9E791CA38189251101807F4185C9B3A8E0A3600C52B99896848ADBB88E0ABC1033429185308A540E72 - -Len = 134 -Msg = 365C16113FEA84CFAA647B4B6BAD705F74 -MD = 60ADDD38D3D1A6EC5E2732FF973EC9A188812A4FD0C8A8F924E5761F773CD1B8E9BCAD11E7029230D33285C44E282841 - -Len = 135 -Msg = D783EE042795EA5E2FC9817DCC24CE1BF6 -MD = A7DED241BF24581B37DA5165AF3BAF775E8BB40632C3704361B72423A1B8A529D3DEC17F763034E8CA45E567EEF8386C - -Len = 136 -Msg = 82E192E4043DDCD12ECF52969D0F807EED -MD = 4A59DA05C6E035D59D93F559D4A130D3ED91C22EADA53FD679FB0B0F31398A6FF83A5A9739BFD4E95F57318FCCB816F0 - -Len = 137 -Msg = 7E3F13DB88EAA22EEFEC3AB47B7CC5AC8080 -MD = 9E66423FD66F951E93770597FD1204E430904313F935E27A0A4C8FDB2A13F271BF35E9FC1F5951242B405CDF99C73DB9 - -Len = 138 -Msg = EB673EAA409B4F98C581D8DA542EB58B1380 -MD = B279A3A5B5F42E8583A4D99D72E189FA9BF706AB764BE5CFE325D4F99380D5A5DF97276056D180BBFE9CC87F9A51DBF1 - -Len = 139 -Msg = 84D42DE0D62B7A480FFB939533283B7A4440 -MD = ABF073A4F628C6502E6F1E04E22B4E81EBCDDD1843839BD6A5D56E5845A1AB8E745C9C5408F9006E7EDE01D13E3C69BC - -Len = 140 -Msg = BABAD873529BE92E9BC49CC71964A554ECC0 -MD = 532C2EA68110466696FA3478BDE273138C25DF70527F563AB17D38369DF072D6B47F9ED88337A9CCF101731F662ED1A8 - -Len = 141 -Msg = DC3BB8370C04147834819A2845A79B5A20F0 -MD = 844A78C2EF0665E8F4134197F31C8A4A1926B7CA437359F4BFBE87DF8352934BC494A9B79E84EA7783BB27652F16BB2B - -Len = 142 -Msg = 8952BE55B2BCA64F32B5401A99A8392AE39C -MD = C0CF04B6CCEACE7B268CA25079CF3492E2737473D4C1D26CEF6F954F25000AB1258FB34D0809A09EFF95C5CA2F550D83 - -Len = 143 -Msg = A53B4420787D32433A0DFD5D09E5D8E7374C -MD = 86C33ADC92708A9C65AA0607CC60338262A00D089DAE52C72388D237B1DEE724AEAA9376538425422CF3A5A9E3A83D9E - -Len = 144 -Msg = 75683DCB556140C522543BB6E9098B21A21E -MD = 98E6BCCA5F2BB30C554700202E0604F7C86B4941F0345325100C83B1234C45856DFA761E70DCD972ECB1247AEAC29259 - -Len = 145 -Msg = 46A2262940F3D7D9AB6B1680A300674AAD2D80 -MD = 6F6866BD05682C215C1F83B5780F292EDC6017C3B3B7D4291DD6B572AD87E8E628CA0225B32FBE0309BF664E894AC165 - -Len = 146 -Msg = 86804F34609F9945125324B33E672E8F79F600 -MD = DCA7229953E7D9280A977742BB6DA96B0ECA2443E22413B5C1F17AAFA307CCBB9BFC57CF065E93B3AE9D48D3D3D840B5 - -Len = 147 -Msg = 7B2DC42D8B580D6CBD359C46B0321BE37429C0 -MD = 8F8EA51990E024596333BB906BC469F9E344546B828B945FC794E48E3BBCB609167C154B5257F463FD5D82C70B600264 - -Len = 148 -Msg = 0903A731D853AB15F958B8E40CED0B9FCB7110 -MD = 36A93D01B843AB24E7A17E300E836A91EB3BDCC68B446ACABFE0011E59B58F0E63976A630A971D3A020BDF4E42633B12 - -Len = 149 -Msg = 8E3C148CB528836E4DD538D903A3D5BE586A38 -MD = 29EC345608DF2B4ACAA6C95186C3A53C16CA56C3B33A8F53268F1E49323C1EE728667628BA3CA38BC13FB023F8AEA5E6 - -Len = 150 -Msg = 6EC0D6E14E4619ADD039F4A24F9FC4D0DAD3DC -MD = F7E4964871B85929AA41EDD0297B271B5F6EB9AC69E76251D10B6BFC00014C3967A2A8C4412E0FE89AE4FFD150DF803C - -Len = 151 -Msg = 12FECA3B2A8699FF59120DFB38BC87793F8AF4 -MD = 5B53F8D1D833CF42A9A3637FD620D47451D733E6D6274A5C0110C9517310A767E42E2ADDC5283C989479F1EDBAD7D515 - -Len = 152 -Msg = 06E4EFE45035E61FAAF4287B4D8D1F12CA97E5 -MD = D3C3D76B3D3926FD4CC4C05A087C2D76992998A5CD8C13FA3D233E0ECB2AD8B81BA4BE581E02BE91C7F82CCAC90013A0 - -Len = 153 -Msg = 8ACDD913E4C985859FEBD62F6EEB412230252680 -MD = B2AA6A85D55D4BC19F87AF6C0D15322C6F3958A68668C6322F50B9D95550B0E778E40257E24220440FB170DEF142EBF6 - -Len = 154 -Msg = 3487448A5103B1F7EB054C74FB1CCFD3E7B51A40 -MD = 5712A2A0ECC9F16AA5737F2E2519BC2BD372BCF4624C83181AC220DFA6AAF2C9346A04E3D3F5F891E2F6C14E300EECB0 - -Len = 155 -Msg = 21B898B65DE49038D0D359CA991356FDABD719E0 -MD = 61ED8CA1B05F03DFAF65B1D02A66B6AE08C1288ACF27ADE5A77F9DCB40A5F32EC8A053447AB307DC888B35C200591BF9 - -Len = 156 -Msg = E35DD4BEE303448271E4A68160A4152B30D4EC00 -MD = E8AE0376238A2A47AB89F2F1298B2DA56C2DB19A97018437EE3D43D6F7DE26E23D3E259CD94A275DE4EDA30D5614B907 - -Len = 157 -Msg = 8E2A8A60383170AA48152522610B8D5B547A0CC0 -MD = 1A0D63BF45EECD354ADDD632133A655AB8CF3031BBFECC3B9F5C341F69FE98A5FFD1321C39F9777DEB123E9BC32AC6B8 - -Len = 158 -Msg = F674C01755AD0D41FEA8EB4F984F9033E38C65F4 -MD = 467CEF6E5083CE230A889202EEC802AD522A774B0D7703BADC228480FDC4C5E277E9E70215CBE800067E0667561AC6A3 - -Len = 159 -Msg = DEE4696A6DA3B8A6137BF9573B91B40F288200C2 -MD = 9B02D914F2FAAA022A8C03BE6440A7207C0D2044B3855FF33A5305B661E08FCB15E7C4DD25A58BC45D174CF4D8813DAC - -Len = 160 -Msg = E26193989D06568FE688E75540AEA06747D9F851 -MD = 7C53DA060058183CA6204E77F0709AEBEF73557C8F5E45C195B7E9416E7261365D03B8A2D6C01A102655344E725475C4 - -Len = 161 -Msg = 7659DA517F96FAD5A0B1277F52FED01E4835313100 -MD = 00C6FBC721F4D34A1A81D89B5E2F32F2CDA361C83FB7A3FF43B46F0FF08082D2CBE2D458B0A41889D3D3F9C01DCD942D - -Len = 162 -Msg = 11F80B2028EE430ACC4E525FA85488E64C64A0EB00 -MD = 5DC015B9FD24A3830EE7CF806193482E6A9F03D106049F8AA217EF0613ACD7812A3366B35242133249AEC14EF13F1EE6 - -Len = 163 -Msg = F2F533845CA07407654214C0BF1C5693824E0496C0 -MD = C8A4AE7120BA7EF46039B9844E319E1D912E239E5D3D55731F3BB595ACFAAA4E8B0B59901309F93AAE39823C25E762E7 - -Len = 164 -Msg = DF9CA9E83AC80CF76F0C596F15C8CE5DE722AA9460 -MD = 88E35EC6E3E9268A90D2F020A972FAACC13ACF47593278A10F94E701951EA2871D8F112D3B09BD5B02C2CFA55C2B6B66 - -Len = 165 -Msg = 59D9E0612A067556CA31FCE628BC9ED8CBCF038198 -MD = 9BA5BF63EE3A90BBAFE5E38B7A300E1BF49B9AA1C2ADADA4C5E1770029503137521F2AAA78DDBF9D62C72732D522ADFF - -Len = 166 -Msg = AC3C4EF2B493AC819DC2DB7E25EBE4580115473C04 -MD = ECF4AA3C417626E24695D063E582D6B60BCA00F4BD6A09B29E7A21E9EAE5D2F0C19D1214DE66F082CC5514CDFD36183C - -Len = 167 -Msg = 91935544B8DA1D9A33120838D090AAA9508D7395EE -MD = 9658F520A1406E57A87A44A9E046A80E307700987238369854FC4456FEEDA6ECF45D0101E49D2CB5B45646F3F81EE662 - -Len = 168 -Msg = D8DC8FDEFBDCE9D44E4CBAFE78447BAE3B5436102A -MD = 2415C1D053CA207C17D99D02DBD177CD1AA7F00B0D0CA2CF30B4D2098EEA1A04A68E5B1C6DF2FB25ECE157C423EE8AB7 - -Len = 169 -Msg = 0AAAE7B9E64C5379E6C385712FBCA90088C5879DC600 -MD = C6D76EEFA1B5B778C7DC5DC1E1357094DFB4B915811528973FA446C345397AFA09690BDD1400F0130F1B73644D2AB6A9 - -Len = 170 -Msg = 89BFECFB6566E0FB46B71DED91D3C392B31D167BE680 -MD = 172D76B7DF974C27E5F2F43C691E82CC784E23753413E84B4D107A676241F0D50D6CC360CAF584FCB9B7F5714965A433 - -Len = 171 -Msg = AD723D09C67B09677286E46AE2AFF84ABCE35B621D60 -MD = BDC5C5B28E180F09A0D6DC945E9AAEA3E65DB133D53DCDCA6229C081F0B9BACB69B1088E7B7183F359BB47B01C27BB3A - -Len = 172 -Msg = 6037223B33346FEFC063E63E10D7BA78FF02C00A8A40 -MD = 896BB30C1BEAC15CC55CF146ECC3477E73EC66510B6F6BD091D77BAF7088E307BD6616F66709FD2330D5E4F2A17268A1 - -Len = 173 -Msg = 57E4329B428F70DE94A211479B2071BBB7E508F1D2E0 -MD = 4215D76A0E9932C2937EA1134D998BA95B30D42DC449F14EA4A64DF518100C77CA6630848EDA03507C8CD9B1AE82FC8E - -Len = 174 -Msg = B0FA56D8833B44F45FA2A5109AD4C2CAD819050DFF1C -MD = 69335FD4B16272988648292BB32BF88A81118AAFE16768EB6939F72E9DDD5BA07FAA4D489C74CADC020DD087E3D69661 - -Len = 175 -Msg = 4582F3EE0E0BFDC5CFA3FA7550E939BCF9C0B5EFD04C -MD = EB49B1E80A8EF2A48A7E5B7BD1F3F26DE3E9D5BAE1C436F0ADB2CCDED176DD0438F3318A39179527D585A5E789D4CEB2 - -Len = 176 -Msg = 57085FD7E14216AB102D8317B0CB338A786D5FC32D8F -MD = 90DA42B0C314445EAFD8656B26644ADDEDDC713EAB36289BFFC6ED4A85BE66A10F5ACD6B3C61E9C36A17C26260872DC8 - -Len = 177 -Msg = 88B929BF491A1497E86DDF6A4040B31270EF97D88E4D80 -MD = 17CA6620AA54B7213374EE9E6A9430019FFEA9902ABD0BA15F8BD62B9747030C66D8C7CA88F18B6D95EAFE1932ECEF77 - -Len = 178 -Msg = C5DCAD3AA886AA7D2336333D8D777EB15B143861A70AC0 -MD = 1ECFB3062D775D2C83300937E2940453495250647258D5242F636A447EB185FDD9DC00117866404DF01A125D900FB336 - -Len = 179 -Msg = 12F94C52AFB08898E37C2FB4B778E458F37C6858C1E720 -MD = 95E3287F298E20902E7749F696DAD8A55B675F03B599773553D20C0A18FEC59A3DCB7D6201937DB9AD23F9AB43B166E5 - -Len = 180 -Msg = CD911C2634643EFC060E2B641228BAB22C223B8B1186D0 -MD = 50C2A237B90561CBE2EAE71D0F991D821F27B13ED9B2DCD566626D51D8F540FF5282A359D18117F4C3AA3F1360FD6B4B - -Len = 181 -Msg = C194643A333C0D9CF125B6B729069530858BB4A916FE70 -MD = A8A6E93AED3C3ACB7AE7DEB8307667A6263E07D7347C36A39CF0DC0A8E04E1D6F01556BAA87F72C3B43F44F558984D1B - -Len = 182 -Msg = 093A095AD39D10B3DD25C571B44C612193056D1B112AD4 -MD = 0B3043057699E8DAD96F0FA39CCE6A3254455AE0B45E3A7DCBC51B73E7D353E1CB782F395EB1FED6B134A8C2F31ED01F - -Len = 183 -Msg = C95D9E47B11AFBB807B10CB90260A1A1263E9934EB181A -MD = 733B89471B07B742C0F1355E8D95C048B7B903B7B9E483C1003E003F2F7523FC033404F853C97B022C01212493D214BC - -Len = 184 -Msg = A05404DF5DBB57697E2C16FA29DEFAC8AB3560D6126FA0 -MD = EE209E98A75A67B09008202CAD380917EB1F92C5DB4E8F2C64900AF8C603D265CAB317BF7B8E2251E479F8818D3022CA - -Len = 185 -Msg = 4380398B1D3E170596F1CF7AAE1D32CD20B5684FF1D81D00 -MD = ECE5BF590410D47D2A90D1A44CE14E40EBEF318AE577C8195925600A479DA0F11D3262E52F9FE175DC3EA750656ED614 - -Len = 186 -Msg = E7EA48586E6665F113727B7C9EC7BAB64D3DBEA3FFF317C0 -MD = B104262ACB6D8457425280A0082709B096D3B861504F8F2490F3B42BBEA8FC41C515B425A16A8E6417C1D481BC5F2446 - -Len = 187 -Msg = 9DB8E92F7CB06389B57BDC2B510E30566EBAB9B72DDE5EE0 -MD = C4739B554C001FB6C4E2F605CD4031F15CE35F082E817053DD64FFAB43CF2F08055BBED2C89AE9AB0D3CE51F0C0B0273 - -Len = 188 -Msg = 9FDED6A700AEBB65BF26400F30F5862CE6B550F67681BEF0 -MD = 3CEA064B8CD5CF87FC2B21E06F5E10020531FA4BFE06E144DF74F3431254D02C818A539C61193487A1D60DD771F1662E - -Len = 189 -Msg = 893B3BCFA97A81076A579D81CC66EB540351DC3A241290B0 -MD = CA5E44C3D5E013BF1216DA4254EA8DA6F417AB393E89C389374081C643E31FB8CDF7787A151DFF3C0B3728E5DA835857 - -Len = 190 -Msg = 90725E6308171BFBB26B928FC0A6F1C3B32718B74A37A0C8 -MD = 350505C545B38750CA1650182D4553CDE8747515C1179BA469E730F0E7399C5BB6F87B382F410CA2C61C346685D38120 - -Len = 191 -Msg = C1A516E38C83393D9F049EDB1E50CDD2DE3CE448E5D676B4 -MD = 62FDEEF8A15CF57B532E81FA0EBBAD2759807CE2694462B03B6AE0B87B7760776D56D3602401047B62ED81957331463F - -Len = 192 -Msg = AECBB02759F7433D6FCB06963C74061CD83B5B3FFA6F13C6 -MD = 1198EFA57E1A7884DAC827E683255575510E1F92024A135144659BE87BBF0D063ED26C987647B923A091CF11680316FE - -Len = 193 -Msg = 90105B1F751AA0EE546B3EDAC10EF8ABE9CA71C0F0CDDC0800 -MD = DFB1D32FA05F2ABB41A480500B8301E4797847DE28B048A9B91A4772B2A037A6D92BED781177232F9071EC8A74CC2441 - -Len = 194 -Msg = E0CE59E9943CE116C7B745FC595B3C58129052321F67FB8840 -MD = E4E59D38BE6BDF76521763DE265B2B2B4422B731B40324214ACC934E1FE0BEDF381711C8578A8AE680941F3981ADCFC0 - -Len = 195 -Msg = 0502D3A22A7A0E6729EFC524FCC50BC7C62B35C12C537E70C0 -MD = 3B0AA3FE3ED5697D0B6670CC4E3CD6CC02EFA4C6BF25A7F8BDA1E31CB141EF6395746499AC0B00ADFE1B62C0BF2E6835 - -Len = 196 -Msg = 4D9BF0AD887F1F21023B749F3F9D2340C0288F009D39214600 -MD = 435F9D2C23DEE7618B02E1B80EDDF5FC8BCCCB84020EC4E44D59878DBA2456DD94C0B3ABEAC5A8B5BDC04657ABE8FC61 - -Len = 197 -Msg = ACC9748344B37FDDF81027547EC8D26B1C469531935B7A2AA0 -MD = E78217147573D2972A40B76AF799369926B28F47B1722086E3A46C83A387B5B7DC31950776460484F999F00A537FABBB - -Len = 198 -Msg = B704443E84AD25B0E73716EA414234BA929F2D927DC1E1B890 -MD = E7CEA593BC1E08BCF8E7A4462E131C654FD0230B674FA73D8ABEDEFBBF91311DE8DC09D1EF1820DF88EBBF8572DE5659 - -Len = 199 -Msg = E916DF6F4B5E9356DACD76B89F593B70C2B44B3EB1B5835ABA -MD = 73F745240022E668383EB95B3446F133C6FC695316EDF32E45E8726FA3E3D43E949595D50BDE2BB17A46FAD6F5C06F5D - -Len = 200 -Msg = AAFDC9243D3D4A096558A360CC27C8D862F0BE73DB5E88AA55 -MD = 0435E54C016C0791677DDBC6BADD55D146754296B31132B0B1C0B5CE4AEDB03AEAA9A2DC5157D7AF20B8E36D75E1CC00 - -Len = 201 -Msg = 396D32D8553DC0DDC72B415A684349AD9B1BA8E10D05970AC080 -MD = C36FD60A6FB660528A9EFB498B57452362687B828A5873D2CAD710D8E53CD861BC524DC8E7139F647D8922B858A2757C - -Len = 202 -Msg = 35DD0644FA89E942858FC0D9A614C1E5B711EF9F178C04840D40 -MD = E556E98EED842F41B67CA698799CB8989A169B77A5089B619E9F794942A02FB5AB111200F4C3E91E971F173659B68786 - -Len = 203 -Msg = E9617EF66F3BF56D461F2C20CD395778FB8AAE1B557A9FFE43A0 -MD = 774EA9CAFF61BD328A2972A0E7C8F430B1814CC18782461F33ECB1D15237E2A96CFF341E291BDDCBB2A0A20AE2CEF58A - -Len = 204 -Msg = 6123803C735CD7D81C5E95AC866919C0348D46D4FE04E5CA2DA0 -MD = 18E98757C3B4C788B16FAB7CF05FD4CA3BB5EABF6C7611BFA0443670099CC0D5AAB2890E47C2DA7D4C5DD576924602A0 - -Len = 205 -Msg = 982408A37B19F65DC9522146F2C44B62F2A09912C3BAB1047110 -MD = 2B59FC62192A758B9E427760DB4CBE17EF7EA10729BE3424DEBD61989E99427572146FC0EF07503CF9A0739D61F19E80 - -Len = 206 -Msg = 54EB64D8FB23A010586155CDF5C33B1D864D0F18CCA0C03BC97C -MD = CBEF4C1FC82000E79282BAAE669983C96F99A41C368BD67F4C94E3DECD5E4F508A2FCDF46041C71432BE4773041CF727 - -Len = 207 -Msg = DAE26BEF8C3A247D8881C8FDE00E6F0805147CE81DDD81B53B0A -MD = D0B9C94CD753AD508357C4EDDC592E467D8446B16E00B1949A780107B640B686F69C91D34ED1359BC468F85A129A32E8 - -Len = 208 -Msg = 7BC84867F6F9E9FDC3E1046CAE3A52C77ED485860EE260E30B15 -MD = 88D898ED7E6E54A683812B372F678A5FD73BCF3160A969FE4584651ADB3255F9ADCC8B85DCCA5C3BF8EBA3A1B69D9B90 - -Len = 209 -Msg = 9254E832A57DA5D35623BCB77EE4A376280FBA69225E388B34D280 -MD = 7CC372C4CCE8F873E4C07C5363B78047A2FB10B7B176E3749EE95A5C93B064E1D945398B7CC2E26D257AF5C146506F79 - -Len = 210 -Msg = 7F891B766CF192FE504687E1D56C843BB0921E1280B5E7287466C0 -MD = 8ED79A01CD62B327B21162EE809FB8B6AF2F4FFF94F3059745B3A49F1CD1FE7EAE6C79848F2A76A3E405B412BD2B49AF - -Len = 211 -Msg = 0B007253F2DC7DF79883A1C7128EBEBE35E0D902A5D3CDBF539460 -MD = F1D8AB9AC591B3480A19F9F0901604F08B39C816CD96FE39ECC742BB883CF5A3ACF08082A3A819FEBA971DF925E302C1 - -Len = 212 -Msg = D49B562EE6EB7311BA70A8E78F655A4B4853332C116D7DDF16A100 -MD = 3CB88A13ED990402D097AC69E89BB54C0F291130EA8A1D5251B4A720EA043C3A5C29E2E3571E10DA7AEDE9024E2A60B2 - -Len = 213 -Msg = 5B1D8934A654645972E4CA94DBCB2FE1AF9156853A2DC2D2B18DF0 -MD = BA313F4CE2BF30F3CBDE1ACB9668EE7C8A0901C818EE63356569A2EA344D2BEADA350651E44F9220B9832A640E659CF0 - -Len = 214 -Msg = 9484FF47AB375A83B5E0A83FDE85EC66509706C9181BABA42478F4 -MD = E8BA60D17D08A8484B64FCD343CC55046D35D0600257E6CA7056B83147A313779CCA660019867A109D3F4D8F4CE60FE8 - -Len = 215 -Msg = 939C03856BDD26D48A3DED1A121342742F5F833A2CDF39C266306E -MD = 1F2ECC77341F64CF90586A173B416D4F8B5DC4580820301919EC222539D1F2F6866FDF3C36EB980D947CF461BF6CE016 - -Len = 216 -Msg = FAC523575A99EC48279A7A459E98FF901918A475034327EFB55843 -MD = 7AC343A9369FA7BF45AFED43084DC1E275AB1B70034CFAACD4F3CB5E5E2201CFBD1CFFF83BAAD3897A4CB8A0DE5C35C4 - -Len = 217 -Msg = F891360CBAAFBC60E0CDC1CAA548329F6A80778ED08874FB85266A80 -MD = DEE3723607829C20AA633A374D933EA9D457C85563AF1FA1E90C9BC356821B3C88F048C7D69C2EFA8759848E2DB23E3A - -Len = 218 -Msg = 02CC21DBC82B94B3CFD25B0B5F99C45F14D8485A88E45DA3C6B9AF00 -MD = C186850FD7F9A2FB9EECA8E263B04FF59D9F20915C1675AC2EA9761A90B8C60D454AF5F9A9D9CD926B76582C0FE9810A - -Len = 219 -Msg = 42D3FD8720077B184CB3119815CCA28C0D76F259B5D764AE47F71120 -MD = 54A2F80A35B0130BD82F9C98EF662B34EB9418B8F81C07B93C079FEC4A54FD38B4879D276BEBCB7403B50D473C7449CF - -Len = 220 -Msg = EB9B5A62EE1BEF70A170B96DF0D7E8F974EA8B5997E22CFEFE0BA840 -MD = F2B6AAF6EDDDE039B28A91B3BBB4E8BC8CE9C02B6B538BB74521F883F0F00FDDF966B8D08A5C9B8BED1C4536A3A71E3A - -Len = 221 -Msg = 4A1369D63E894C71D6DECEAA47D797EF1DF4E8AEF56F76CE0FFF4B80 -MD = 933C15E34A6927CFA2484D5B9A9203D6DBBFD7FF8CDE7A3D6425B52755447233E47E119BCC7785855DEDAD400654113B - -Len = 222 -Msg = 4B9C5BB731732C0BC83B1ECC8139164D16E92EC105F66B78BEEB35D4 -MD = 87FE1EC2A76A421745444460D1DB7721F062BD047881F92EA379F8E9734E39E197200A2B31A4CA279E9284C39922E1AB - -Len = 223 -Msg = 68F41368B7B347819494CFF74E9D8E649BE4EBB287D9B4553248F52E -MD = 868A43C4DC6875680F3F1D8162D40F7FDCB48304FF9B851BC46B28DEC52317CA123587727F1724A6F03B8CB115E855BB - -Len = 224 -Msg = 0F8B2D8FCFD9D68CFFC17CCFB117709B53D26462A3F346FB7C79B85E -MD = 58877B8DD98C51339E4302ABE95CF57662CF05AA01938161CBFB5DDDA724517F0C002D54B54EEA7EBD64E209DAEB8F01 - -Len = 225 -Msg = AF4BE96D46A63B08104C3345CE0AB60EDC88B4104CFB74BBC0238C3A80 -MD = B816C13CD9B8353113E36201AA3D33BEDDB02DA5EC7F1C5073121A83AA9961ED6D0BF172574364281D270F667C01349E - -Len = 226 -Msg = FDD3B8E0423BCCBBAA7019DE3E5C7A49A7F5A192E2FB64011DBA892540 -MD = 9FEC47A4912158920930F06024BA467FB9BFF1B54AB64B952C0E1F264815058390CDFC6A7A69E3D5DE5E318979C4536E - -Len = 227 -Msg = 69DB49ED9D36946A357B2386FD5C652918762D8656F1EA3CA86D393B80 -MD = A368F95758828351E808169FB8155908ADA0F6F8D525F589F8118C9B93DD9C5BC0596B138418FE613065E1E35833E990 - -Len = 228 -Msg = 984557523A3444AB956E0C040B96C6D4E5F93D0F181606260BD7A731A0 -MD = AAF81E78D92E890E5D6F55682A48D2C069EB34A0490100D224DDAA8E8D8664B606D76102BC5210C4B4F1C5CAFCB41404 - -Len = 229 -Msg = 0C6D4DD90DD7F01CCC7EAE273D8502C9B307F9F913415E9207EE76BA00 -MD = BE16475F60B8DF627EA6AD953249580BFCAB4CC9C825E84C57F29C659A469CE4DC64DE72D71932A49B07754F24CC24AB - -Len = 230 -Msg = B42F11FE464CEEE0516A17B8B9AE5890FDE0B929007B568AB9F9A9B8B4 -MD = 0BEF68988AA02FBC1D3BE3E33C18763E2FD425895ADBBCF00B8BA51A9DC51CDC674581A9F146A239B4A3C19728FEB402 - -Len = 231 -Msg = 915BB70E3A5ACD0EC87D5570058A4CF47CAE5A56E552EC102E0F1E9ECA -MD = 7B65B346396D9D0F12A5FC3711440877EC7880601CE131C642F28EE7C337D04B84EEC51DFD1CDCE3C2C3C39DB3ECD67E - -Len = 232 -Msg = A963C3E895FF5A0BE4824400518D81412F875FA50521E26E85EAC90C04 -MD = 1CD638128718BE351385E7A156C3F0EE8B210D1565876F8ED46C227B930D188FE8CA27760FE189D3B136836561E9A0EE - -Len = 233 -Msg = 5A45392A407EB4671C94E2181362802E090D71BD19CF1B3E7CF08E999780 -MD = D43E015647E0CBABBF9AB680CFEAE7DAC6F370F6F85C8EA026555A0EB085D918685264ADE2E42D756A93A27FF556FD63 - -Len = 234 -Msg = FE51F40C4D7807E4ABB5DC347D97E2787F1B175BB0AD9584F8DBC494B200 -MD = 1A36B41AA97233609433970AF607A08F65EEAD227384A6D5A20A636CB42294709FC88FB7A8C4985D69357ED7A02D7A12 - -Len = 235 -Msg = 3FC7400AC8F98C0B419781292E3DBF605BA9DA9C7E7C3FA2FA625BE18B40 -MD = CD6E4DDD18887EAC3594ECF517220B214B23DA1229B0E8FBCE936696DC34DB11B8D14893FCB3552E26898DDD32ED4C1C - -Len = 236 -Msg = 313C7ED0191674C883C2E6A46CB162F9F1203EB8DA3CC0979CC46A6EED20 -MD = 60FF39077FA71CD8E358DF938BE576C8B0F5E3B662B53A6810F40F86EB8BA42270F38741ED3409FAC96E9A9EB29884CB - -Len = 237 -Msg = 7F9CAF49ED7EC9CA1693C0D5700965718F7D6C178B7CA4E577F07FE5CBD0 -MD = 8697FAAD0E11D2B22F84C4F02BCFF4F548AA648A9F11EEE1F2BB8D60DF275FAB95BD8474A4095062E062ADDAC86E97BD - -Len = 238 -Msg = 5FE7F0B783293004B9D834D71397512B9F807927383B88D996FB32B5D748 -MD = A30AE38FD9B58A00688CA22AD467FD950FC299132BE95EEEAF27EB2E39378125F0C7DF34FB18C64EDB1B03D4CF8D1B75 - -Len = 239 -Msg = B94B68ED7FD70E3C30854A2C690E3AB48452ED374786F893F2187FB8461E -MD = 2554515A0580A9B28742C1032BB79D6641089420D921BCBEBF0542741AAB4A4AFE140F0F7C186656C304EDC033768789 - -Len = 240 -Msg = 03A18688B10CC0EDF83ADF0A84808A9718383C4070C6C4F295098699AC2C -MD = B4DBDFD9922AFD1CE46FF1CB27C30E2AEAA967631A04001C7EF2B5EABD3C0678C0FF219BE7B9FA04CF83DD40BC1B33B6 - -Len = 241 -Msg = FF47DE5C77211D891494904695A30AABACD0CB707C358999599E28A4A2B300 -MD = CF37974D7EC4FC84A1A966F5BA689C513F7DC3E5CC906CA1B0E961D86594C85327EAF0118DDE7947500520DEBB3428B5 - -Len = 242 -Msg = E36648955EF0236283244693B5B9FE95C823F6D3E339DE3E1EF42F8E059A80 -MD = 21BF8297D5D32EEB0B3A024A2D55207F249034C26FB7DA8F76E3D8EC9B7DD877E4BF50F4519619D3B364059AC8DCF14B - -Len = 243 -Msg = 9EB5DDA4A42EC1617D3F5BB18369F73E4DAA180450769CC0CEB1B2AAF63800 -MD = B9306E32FCC68BFDBD57AB9A2783AEE10B0AD8E41E505139FD92C5445FA9CAD1EBA35132AB7A727330DA50E2D1FA92ED - -Len = 244 -Msg = 31AB94F53C25D46A0B436D689663878B757F1380C6796A20EA481CED41DC50 -MD = 44497533302FB1C9C8872950F9AEDEF6654DAAE09B398F0DFDD16AA27E358996B6EC8418D8865C36C791F57911E3AEB5 - -Len = 245 -Msg = 3A77FFCD08FFD1F9DBC4F3DAA172EAA998413E67E6DCFC0F8E502CD9DB9090 -MD = 7B0F81E42E32F6AD03E9D32AB098025D25195F763A79808213E24EB120583C3B56A490F7C820482077496D317BC0A1F0 - -Len = 246 -Msg = E07B79FF758BCBC30164AF289E10788EE1B893988AD243618E8478AA8E3BB0 -MD = 8529A3C4DEE4E23A710F1BE5F184E88E97E1A0FC1B915CED5E18A0A6AC4AD966147A67056BFB841AD1302B9F0820B7A6 - -Len = 247 -Msg = 9E4417A445A11ED1B9F8453ADEEE21E419BAC1C0FC7541C99DA00D53735020 -MD = 6A8FA11909E05542102CC039953838DAAD90216FE6B7496458CA5F604AC8B8A3766CC2510E1FEB3FB15CE7E711A0FA11 - -Len = 248 -Msg = 84FB51B517DF6C5ACCB5D022F8F28DA09B10232D42320FFC32DBECC3835B29 -MD = 503DCAA4ADDA5A9420B2E436DD62D9AB2E0254295C2982EF67FCE40F117A2400AB492F7BD5D133C6EC2232268BC27B42 - -Len = 249 -Msg = 064FA8C3A9904C17B6E284B7625BD70E8B54DAB53D538B66D0A52954F90E1100 -MD = 244F635CF8A6C0EE21989B31C28285334DB53734602B2AA556B89C75DCB5C636C57F2F56BBE0F864A238E496EDE459D4 - -Len = 250 -Msg = 0372CD1CE0B74CE05E717FC4B9A82CE1A888F4EF7B0027A5D6DC5F8D13936E40 -MD = 9FFD04AE63F7998FD5127A88D2B0C0A8EE9489B1D503100AD5EE8ECCA9871DF2AB2642D84F96F7E0710A490BA4A60F79 - -Len = 251 -Msg = C7BC6DF69FDBB01BA287A66B0DC82F453119B7ADB8AA0F7DF4D4D1BF5E0DBE20 -MD = 95EACBA08F17F91D39F2D7587E1E89859F891CCD1735519A98F87F27515B32D722D77499F632552676BA60999890F2BB - -Len = 252 -Msg = C6D8EE5CC53B4BF75956E31EFA8A4BE99D7AB651461FC44E9D16A691F6859D10 -MD = 988F2939C63762569AD80116E3E3F27204FFE60804C9B4806EFD74515148AF97EF4AB1A77CEBD2E298CFE0B589E9C03A - -Len = 253 -Msg = E2076C55D1BE257EC034FB68800508B12F91444C99BC1AA12575FC7D7A6A2088 -MD = EA27EE6E041A1BECE36B329A0E8AD40BF10F0242FB620D620F182313D8EFF444B306988C34E4BBF2FC76499ACE858791 - -Len = 254 -Msg = F667B870AA707996CABB9F7788C9357A7A6EA28B2A711DFCE10CC86FC6C6DDD0 -MD = 776F425390E4A1A387012FD36809DDF20AD7D1B0D6C9D2E5A91BAF55D5EB0C9BAA8F10F543F97460F170D40B5D5E4024 - -Len = 255 -Msg = 820AE9D30CACE62A961B6ACB37B86A72FD46D1E2E0F9574D3B963F387758FBB2 -MD = 2503489DC102088254649E38B9B5448C1DDDE82330D745404A47AFAEEF2B8A5552C3FF9282875EE9C2A549E0A666AA59 - -Len = 256 -Msg = 9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10 -MD = 64D11ADC77AF5C568F37E44EFAC5FD03C460391AA833ABEC4E464237A8937EEDD23EC513DD2A71D0329BEAA8BEF395C9 - -Len = 257 -Msg = D5AC1E30C10BC1CD15E27866FEFA48E33AEA2E319868F932A2B84C64663E73DD80 -MD = FD025EE2136DF000DF6141C8BC3E998EBD4444440B49F2BD904355B9B96550AC71194AE4C7A50349A38722CE55BB8223 - -Len = 258 -Msg = 4AB430957A6D231FD5B96442302A63812493F7EB505E7EDAF5D79F1DBF7D3E8280 -MD = F7DC6899C9FEEF326E6763033C333CCB026368B651231991850FAB080E8851917E630F5B4733A47A4C02863CFC1283F7 - -Len = 259 -Msg = B261358A122A159ADBA413F8CF0F2D02D7F9E05901F47A6C1ABA5F9F77FBD3AA20 -MD = EB6FAEB4C888A170DD1155939209F58CD439102308CAEF852C8BBF4E726C21B74390AAA6C699436369D6ED3FE6801C9F - -Len = 260 -Msg = C479243928CF52640DD0C74157A672EAC366D4A5BA0D4148EB2D09C25C4FDBBA10 -MD = C1351E253C9278B745CFC855C3C04BA4FF570777CCCC12D39E39EAFADF3841ADC8D59EC385297878FE416DBD0B022A96 - -Len = 261 -Msg = B3980A9DEF20DBE4D286B75DBEC249001E420EA4393B562B2B17DE15114869D820 -MD = 8BC6A86DD988EEC2D3E0AF27E97A9C57D3B597CB944E2192F580CEE778A06EAC356E810E0C4ECDBDC7301896797CA0D9 - -Len = 262 -Msg = 1BD985CDE3B3494404E1B4D16B2BED5172D095F8EA8C8F8C347B19B83BA2E92F98 -MD = AD7F591CC2B89FD1DACED46B987C35A3F80F2B280DBE4BB2878A84A3F438A2484BC38703C3C9905CEFF9E5B1DB071EA6 - -Len = 263 -Msg = 2B47DAAD44C64F2DAD4423AB3366D82770019669115714DB01AAD8141EAD2AF914 -MD = 251F166C4288F4FD6640D0D6001B26B15ED5501E0CD2048FBA757408604836DD678680059A25A1CD878EFFF6BE2E255E - -Len = 264 -Msg = DE8F1B3FAA4B7040ED4563C3B8E598253178E87E4D0DF75E4FF2F2DEDD5A0BE046 -MD = CF38764973F1EC1C34B5433AE75A3AAD1AAEF6AB197850C56C8617BCD6A882F6666883AC17B2DCCDBAA647075D0972B5 - -Len = 265 -Msg = A96D1AED0D267920DF19544968478BFD9ED476D500FBA307B9EE8CB02179629AF300 -MD = D6C726FFFA865A6359E9889BA3D8C960565360D23233D72BE1AACF468D92A52842125F605D836FB850C5B988B78A0F6F - -Len = 266 -Msg = C5DFDACB24DB60BC725FEEB11B15F88D1EEDD5D654E14B9D681AA533A094A9F8ED80 -MD = B64DC265E48C4ED686F36437A11642E8F42E3A241DB7058760E5713566E7E8C7CA0F3E22D765D5E1F8320E1AD2844951 - -Len = 267 -Msg = 9E1D99E9DBE5FA828FBE655788BC8B715EB75E71F225FB895BD4CA6D758D5C03A980 -MD = 15CAE2BFF7B808962780C5F603ADE52B39A37418308BA6BEEE637316178B3F58A96B6B24DB1EAAF4E223FCA118F6B7D6 - -Len = 268 -Msg = 87C9BD4514CABA10C9D867BDB49C8FFF5BD6BFB6FBB018A67E7D5374B31ABFD1AD40 -MD = F2AF29FCF4881D50CC0F0377D0E7D2E03060369772A46479AA3DA6F1579B3C349445535268F65AD1D851847896A20A31 - -Len = 269 -Msg = F9E1A6D9D6792B9F5C3ACDDD9EAAFF0370F7A217983152F48D23AC1CE87E3BCCC960 -MD = EC744D7F7C1B749D62BEA67696AE336A6A89C94B0B61AD1B908DE0202898E9CB361AE46FD783D368875407A4AB3AC5CF - -Len = 270 -Msg = 3F567A6078B6F952DF6E07681E04D178DC76F537B3696DE0640F0AEA78AD0B98118C -MD = 4CB5BDC10DD36A7E7581B0A6DC1C02D162D07048208B293D017164590C810382B806A36A54EEC88F3887083A492D7371 - -Len = 271 -Msg = EE6B41172C01654AB7C0CF20B7F36AB0703483E938AEB8CD18E6F9BCDB29FFB3BA90 -MD = E8020277D65C8FA126F74273581463B7E08E711CC032CDEE7C8BDAC57B7F901EAFBEF7E4DBBEB9E9B6AF076B16A69C39 - -Len = 272 -Msg = 62F154EC394D0BC757D045C798C8B87A00E0655D0481A7D2D9FB58D93AEDC676B5A0 -MD = 882BFF904BFF1031139503BF6E0274C7A3928C2D73BF474A65B97C22F65F32BE26AD1C5F7E4FA35D5B6253AA4076361A - -Len = 273 -Msg = 0AB446212263B276D8A86F20FB75AC94156E2C8D9B1C7DE35049D113AC96FD18DCE200 -MD = C076B30238A6E99EC7E07627178451E7F750C97CD99AC329EE4E4064CAA05765F74E82BFE60A8B4220407DBCF6460A72 - -Len = 274 -Msg = ECE9BD39477F2F9B4A8FEE98906D5526D0F994E5D8F6057F13A20DFEB0467C60FD4AC0 -MD = C15A002C365A08E01F9C90E5D4D8A15E88EEA0AB3190B8D54CF18BC91D2AA9AF373B243D5295BF7BAFC26951D72A00C6 - -Len = 275 -Msg = 0FDD7CD321A364E44EA135DECDA4910BDE8120C1FB23C63C795EB17DA82628D40FBAC0 -MD = 8A8240D5BE1A989FAE0F2F8B7A654DBB07ED08288EBC00AA2886407D1073B4CAE6D23B591A4FBE9BDE139C3B989CB9D5 - -Len = 276 -Msg = 54210A5886A04CBD1EFDEFE792DCC7C4085B3A2E582A5A4C0F5314B63216FED382C820 -MD = C01B3AA30A2501DC0999403FD70FBA357D3711D6583A270369EFCEF338CEC0E57AFC7AE8445E83B0E812783E7861B666 - -Len = 277 -Msg = E4EBF54BDC9F4B1B91A42C0822BFF0BB5613ECDFA1E0A01474BED6897D5A37CB1D7CF8 -MD = 6CAC184FE1792D50059CD40C21A4A2AD1473D3F09AEFF5081B10321B51C6DA3F3BA6DF0AFEC1CF49C34543C77165BB53 - -Len = 278 -Msg = D9C2020DB24BC84887F7DD078CC6C243029ADFF37C3D41A33C291E95837561FA13C948 -MD = FFC4F4C5F00C71767848443B6920553A1009060C5DF830D916A540D2326A747B1BC1C90C653047CD3DFC0BB8E6C1B494 - -Len = 279 -Msg = 21D2D64C53798DB8A118101B76FC39957D286137A838428042F13D5472AA42E41D38FA -MD = C61698333B0A6B7C40E9A86DBAE9B10E2FE9240E58B4A1C117A6C095CC4AE60CBE4278B66CF48A94F62BDAC489E223CC - -Len = 280 -Msg = B2DCFE9FF19E2B23CE7DA2A4207D3E5EC7C6112A8A22AEC9675A886378E14E5BFBAD4E -MD = 80448B7A76E0F0666048C02165A4FA8DFD250A227CCDD4471C3703D07762362DC1DF55FEC29E2A31FE70958374271DD7 - -Len = 281 -Msg = A40D0922D28BE97EB6C2C071269A0A11547F7D206D39D3C53229078220DAB6704FD0F100 -MD = F06BB968B95E2740E7B32FE77A1C29288DBD7B022DC9BDE89EA73B417DEF2874F3331B86CB22CD821BB221FDDF26CD1B - -Len = 282 -Msg = 57F929AEE5B4628EF6FE014E93BE6C509E0FD437B33C86625841AE12DC302E1599222140 -MD = 57930EFEE878D0ACF089325B9E930EAAE885E37EC7D9F25091BB3F7D53E9AB02728652D4283981607D6B120E1C7F8320 - -Len = 283 -Msg = F69533A9AB0CFDFBF2F5A5D990C52B0533F76A4427225FB6FD458F965655483096389AC0 -MD = 5D04A85E7129D5DF70FBBC4AC67FA5D9E2978AB98310A3796788621B3D06E5981D6A0468C21D00468A0DC7B7989913ED - -Len = 284 -Msg = 5322E6BCED609A2177C5FD2BC95DB4B7DE2F1884A8D710B41D473BD544AB3B0D8126CFD0 -MD = 6F6596CAC015E5C6485BC3B804A6BA99ABA14168D9AD0512EAC3B526C0B5C4391566109738930FAD68AE1B10B89333D5 - -Len = 285 -Msg = A599E2676154A6E3D1D091953F0399CCD63672AAB01334070020E5D4721DFD96DBC3C250 -MD = 3594941F2AD96901C8E46826A98B71927B19442DE3EEAC4318E7E2E4F32B3E581DA55DFC20C6ABE68689BFD3C9081EA1 - -Len = 286 -Msg = 6C22766FDE70CEFEADE46F7C9197724211216DBD0D89E2B0AE2273548CBE15C5473C4658 -MD = 3ADD62D819D4A2E045E866D135C3A49DA61D5261BBAB6BE233E92ADC9CB778E7699DFB80174E8DF6C3103E97126BF39D - -Len = 287 -Msg = D3D02C5BE255684FF0094A2A97741C6AC6BEB6FA68CE253CDCE6F315390512D8C9441566 -MD = 6B0A63561BC37160E8CCDB60F1573D593CFECE71EA0CF73FDDEE093282D9B4933F5E9C30C1A1DD88AFF14577AC90432B - -Len = 288 -Msg = 47F5697AC8C31409C0868827347A613A3562041C633CF1F1F86865A576E02835ED2C2492 -MD = 6268CD6B41F4C5123EC4D54D1E6943ABB32DBE7BFFB8EB95E4FCEE5C12D4647BE143C27F1281CDD275904920441508DA - -Len = 289 -Msg = F1AC7DE5E3616550BD56CC0C77FF8A375AB68D13DE2B722373F140F8ABD139EC88F44BD400 -MD = C77D1FED92D4B0E643B7ED981DF39E5C008980B3F01D3699EF9ED27B0D2F744D83673B39511BE8DED239C21D9BE44689 - -Len = 290 -Msg = 678527E5C580FA674AF530CCB276BE6E9F8003F428E3F47C533EC2BA518F1779DD78E5D380 -MD = 5874CC42245E68F142F535DE0B5E89AD25D5CAEF49CC9AD1F261AEB7D26998C2F786F6470636DA59DFF0536DFEF33BD1 - -Len = 291 -Msg = ABA2217B97DBC72869B04FB6B3BE2294F1795A3186E1DC73B4424918952D0C5314AA9B6FC0 -MD = 866681F49AA67E5B25310E932B49D291E0BE408B6405F090C12A51E10C2535F73350ED3DC76B8D6E98956FD9F03DA9C2 - -Len = 292 -Msg = 332E1B3FC86DB38A50EF54E186531E2562C586D502F93CD60703F2253EDC1513DD728572C0 -MD = 89F4AAACE4ADA794A74455A5CC05342FF617D85993893EB976F28FD1EF41D3DF8EC1E7E6B03D6EEDC4D0080AE6300F16 - -Len = 293 -Msg = BBD8DDFB18D02307F142BC0CD7589C205809D60BE0D947F1D4B640ABC80FE4EFA55CE3F940 -MD = 60726BAB835C619EBC736BC4A4FDE816539CCC0EAD5E9AE293573068B3935A4FA3657F82FAB1B34157865EA15C64BB32 - -Len = 294 -Msg = 405FBFFFDD6C1208747AC3220F509CC8702554F8E5C6D1E680963DA085483B87124BC3FDD4 -MD = 970021067A9C8FA9D79D8301E421C339A90745CBFD75DF8E80B52AD7ABD95CCE0E7C8729A0E3242422B84EA99CCD3B63 - -Len = 295 -Msg = 1C148D3B7B7425FC2AEF8D56A3DD47EB45CDAFE5B2F0560A7D3394FFE1F268D2FBE9B6AF20 -MD = D0F6139FEDBE7077D13B722936806BCB2C6269A2A50171CAF82657609D17F7D8ECBD869CB89CF0CC341EE7CA06B3506A - -Len = 296 -Msg = 512A6D292E67ECB2FE486BFE92660953A75484FF4C4F2ECA2B0AF0EDCDD4339C6B2EE4E542 -MD = C73D18DE07A65ACC7E2D8B2A51002AE28CBC4B0A6EE7F81A6B483F81A6DF8FF6B33F632A6E6312888CA714821C0B13DF - -Len = 297 -Msg = 227D677CF3CC4A9414B92D0469A682A990D6065003E8800AD230F8E1E985A524D795D3576580 -MD = F2772522E4ED81ED03A73A94C262563395CBC1CD4AC28D9ECC458DE36BE5CB5A450C18C0FAE02D4898B1290A264DAAA9 - -Len = 298 -Msg = A613BA9874384B4A8C9F3499E920D06C194FBFECEFBCA745454EBD9A9D396613511A72B78740 -MD = EC9991243F0245F21BDE338F28BF2DF8DA1637BBA98D581F9AFFA7BCE5E8DFED44AD2B7F9334FC27B25D637DA0A92223 - -Len = 299 -Msg = 1C5CFD28B933493A66DC9BF5CA3D9DA856919248E5920909C915BC8FCE40EF1E6E0B0C6969C0 -MD = F02D23809C37BFB9D375858400DBB4B5C518AC8C7E4A4A964B327EAA0CA7DBFEAE35654A8CEEB847D87B2D5F889D7506 - -Len = 300 -Msg = 204EB3CE02AB77FE6F3FFFFDA3F7A257B53B2A07E67505C7DBCCCB50832D4F9A2882B98BBF40 -MD = EFD5ECAF4BA1DCCC0166D782350A44C865C069AF29CE9C11926CEB75734AE7AEFD8FFBA3AB066B9A8A57AB8B2CAFED54 - -Len = 301 -Msg = 38BFDB67DE50E43150FA5CD4DB63798B5E62BBFF32FB6455DCB255F5C6AACF27B13D47716278 -MD = 4DBE36B83DB3339EFB00D953394B262D7D68190E4EA6AE8A7251913E54B85E86C52522DA34490BE150FB0AA676ECF865 - -Len = 302 -Msg = 0CF6117A1614A773BD4840F01FD2ECFC04AC73F07C5A94F98A9E3BFCB7985125D4A1BFC9D1E0 -MD = 47EFF5A8415419950FA49C980CD309543BC88F2FD642BF0A5AF0412C46EF2954B8B75DFFC9152C319E6A6AAA3112875E - -Len = 303 -Msg = 7462D66CB57E83172A87412759B5F9CDB8600388D1C3F90F8FC8A89E0F3C513769B9BC8FCB82 -MD = B0CC18BC74F1390A4BC4E6EAE8C704AA6F4E129C11E0CF6C53CB198D1C65190CA4EBF97E957DC5205366F7C88ABFDB62 - -Len = 304 -Msg = 973CF2B4DCF0BFA872B41194CB05BB4E16760A1840D8343301802576197EC19E2A1493D8F4FB -MD = 3A0BEA62F42F9CEEDB348F6E1613F00356ED9766A5C19F0C2EEB05C74DE69D3943E16CF72281FDD92715FA3D51515931 - -Len = 305 -Msg = 3C97ACA85A13A0106FD47D7C59D81C58F2E2C5C7F5C717A6033E6819A0EBE6081661AB141BBE00 -MD = 34CA690A8FF4EE4B8F1A36AA28DA63972218DB4E64CBFED7EE8B651EE449527254147BCDF4DD602FEC4F6CA9B02DFD26 - -Len = 306 -Msg = D18F5D56D451363967D4767E79BDA1A4A90DE871687084C922EDE4319A6716E4FFB5072D8D6980 -MD = 2AA417992BB3AB1E50A9020A03B3EB42F247B38E628DA9EB632BCD14E39330EB474B07044B12661A7D5E3F3D463E3EE3 - -Len = 307 -Msg = 557058858B0E5697FC9C4419E6C907A8B85F622519ACA056DD4E3704D8CBC35B91A5076D0D33C0 -MD = 191EBBC62CB44B6D85DABCD93B654E617513AC642A800EA4DAFCDCBE766E434721AAC4505128AB15104C55965BC53AC3 - -Len = 308 -Msg = 06B2CEC17D720757AD0B9F832AA958141091B25B0AB2B4920242CC3EE2BC438B04754FC84A4D40 -MD = B658A47575F1734D34241AE797B54D56202B12986613A6A29C0F92EF31C510CCED725B211B0AF7C34E915A5E45FCC43E - -Len = 309 -Msg = B98CF17F2C7EB0E739634CED318316AFDC815897E4316175DCD40DE242ECE3149920E2DA76D140 -MD = 57E4E724AEA5FEA54C528E8FD15ED2A134707BEA855BB1ABC9FA97D18A8CCD52926541BBD6D028F238B8BBBD5A98A15C - -Len = 310 -Msg = 9444C95EA6A36C1649F600A26586135A34F1E56633208C767F4265A9F0B47776E3CD5AA515B5FC -MD = 8559456CC14CAF2B33B68A49F2E64E821AD658BFF17D310D3DD6A6D37AAE67AE3EC609DD905BEDE37E9BE14050B21F6E - -Len = 311 -Msg = 9C30ADFA9CE9F25A6AFFCA7105DFBDBFA98A0E2F57719A645C5D867F5B7D5F8A0D821C605102DC -MD = AE0C8083C41909155B43B8953B38085919C72DB7EAF44AB3D94D9B30DCD95373F6D841A351FC1C44155C566A208D5F49 - -Len = 312 -Msg = 80BEEBCD2E3F8A9451D4499961C9731AE667CDC24EA020CE3B9AA4BBC0A7F79E30A934467DA4B0 -MD = 1092F63955F3DFEF1322CF9516F21540215552BC5709CCDA17AD276ECAA091A78451FE9925791B8A9191B5D42010156F - -Len = 313 -Msg = B82A59C86DAC0285610218EF2C068238C941F5BE67CA5A5CB471E195B3B93E984B65A6CADEAD3400 -MD = A982852456820D9F01F85F0FD35B2AE169430F44D456BC2CA062955AC059A5ED6B8C5CBF37570C83411733E4046E31EB - -Len = 314 -Msg = 8F4806F43BFDF940A0E0DE30168832AC32A3EA1456DFF574FABA15473FCD6F1DC7DA773277678940 -MD = 17D06E4516342E6AD3C2CE7C1173B8BFCDD1664CCD9227D78140A17A1D402CB246412C383F549343D69842ED935A74F8 - -Len = 315 -Msg = AC1264C9D5338FFDAB0FF7F5AAF487F7E046601056B15678180A54C0B1CEBABA915A4E77CA5241E0 -MD = 1C64056661B3A672FFE436A6C8A9730CF94ABB0E245922F094CB4CD9FB61076A71D43066F4BDEF791F3F8A1294B0EBA0 - -Len = 316 -Msg = 2CC2C66FC829514F585D9BE4BF8CC7E694323E42777A78C917D33538F6E53B5C7786062597424390 -MD = 9DFE9574F977C165E328A226E52D82B05D3E732A09300B55AE21AB5B8289D0D54634FCB1DD2D0417339E56A88C1EB9CC - -Len = 317 -Msg = 29BE069D897FFCA132F8CA5C1D2E34FD1D02603FEAEC338C768F9676FE581A03EE3399AD9CF180A8 -MD = 9C8FB8076BB52D2D3335E7F96EE521BF407DCE0FC1D0C675D998A21F1EA4D53F1856547C711E66F9C2601BB1565F213E - -Len = 318 -Msg = 991EB535DCC32C260C0D46DB6DDE353DADF0839FAA4903029B3B0D9B49A3E746D49D8EF3F8271A80 -MD = 3EC0F8FDB0B54D6293C689469CD83622B789C404C719D97033996CCAC0467385D9D8B5718507E0020847449542CA92E0 - -Len = 319 -Msg = CD10861F3A9632FFA513E08DD9BCBF6B2E7BA21CB46D55E724C7D3BE5B7C6145DE686CA9F9F6C20A -MD = 36C99801CAF90E16430C980DE48A57E49F66E360B2C6BFE043FB0C6FA20991196BFF210820DFE7A97730F6DC2D2553AB - -Len = 320 -Msg = 7ABAA12EC2A7347674E444140AE0FB659D08E1C66DECD8D6EAE925FA451D65F3C0308E29446B8ED3 -MD = 8CD022971D5769761B8E96B442444FA1850F1201AAB0AC9F6E8404E2B3EA1D936244EEDC7957C80B7FAE60B3F216C6A0 - -Len = 321 -Msg = 6AE52D5CFD459F254563F1AEDF7619AAEAC27C70B83CCF7AFE16DFB4E44AE45346CEF0994DD642D580 -MD = 549978F66B2A59FEF84620DFC52F8C817C49B35FFDAE466032EEF3CA3105C60DE2EE6B9CEA6833106A463EA25BBC7883 - -Len = 322 -Msg = 0D030F9A2E2A5EAB466D6FBEF14962AAFFAC30C866086F50DA454B9E6AA30A0DB5E620D272C9B577C0 -MD = 28807AE0B56C23A763BCB933106E3A961764A55BF23FA005EA7D9BAB849965F4D58878FE854F73F1BC808C42871C2A3D - -Len = 323 -Msg = 260B122E4E17495DAA1A9E004C5AA0EE759DB729EB269435EF9D229F41774D4C7ACEAF6352A5628F00 -MD = 74376D2DF607E9B4B47B18C896F078CB169B546E2BF739117008964B8550021A7F58769C2027DF66A0E318FF4DFAB154 - -Len = 324 -Msg = EA774E81D5A63B0C7894492C70A0960AEAB24E88FBCC765D5D2AB69F1D66852F715A4A1316DDCF12F0 -MD = C6077C3D33B88ED4A70D15E94797D923C90EE21D09AAC1FF5ADA06B964B657F03A72E5FB23E5E153604BC61485B36605 - -Len = 325 -Msg = 46020957F94AA4B4574527455E6E9DFCB571A073F066C7707D8FE4BAB714C99515782295ABD51E0628 -MD = 8273AB18ABFD72169D654013AA2CE5FC2134E6D01988839B2A46985417AB610D2B159BD4B4C7F9661CE421CD8A056D99 - -Len = 326 -Msg = C8C1BECD825C7F75CC12F31B1DC070B375768BE540D49F7D8475D83D64DD11891761AC99B1DE6AE2A8 -MD = 40E0E3938FD3C15CCB79B6895949C1D7F988857CFCCE2196943AB1DFDF82F7582BB1297F29F2E284FA4E6B794528663C - -Len = 327 -Msg = 4A5F9BCAD4914FBB2FE01FCEFBE7C7B5F061F3BBFC3289F2275CFAAB8F69312ED88C53FCACAB6B9B8A -MD = BEA238589B4C61E33A2AD1657EBD421F9A818CDAEDCB78287AC3B104E041DCF09A8FE8C51D4F276EC5D7DA80C20CEF40 - -Len = 328 -Msg = C88DEE9927679B8AF422ABCBACF283B904FF31E1CAC58C7819809F65D5807D46723B20F67BA610C2B7 -MD = B6575D53D353360521B20AA1F993F6E2B5A262D1F508789D5CE2469E9F3F33CCE8848DF690CCB0D676FB949EB171A7D7 - -Len = 329 -Msg = 6EBA5B65EA4C5EDE782C7178469530309F30A19D25F36C5CA9061320F2D541DF439F0A6646014F87D180 -MD = FEF3D2AE02A5E0168F9F7267F417A2B0E2641DCFF25004B52D2112839A5E6DBD41B12BBDB61FD3D81976DB657FB7C3AF - -Len = 330 -Msg = 756279C3F03DA783BF46BFE8E6FBECEC6BD372FAB35732CD8B1ED72C62C28DAE0EBA4FFC02245892E900 -MD = B2FC8AF2B17A83FA929A91DD9C2CD10C8D56EF3C1E798E8FD17B9B4482F37F8A73183DD78474C0278F192FD89750E13E - -Len = 331 -Msg = 2CCB8AB11969F71041A9F18F91B4A76341FA6DE184E9A9B2CA0A4951B128DEB705EA81E190E772235AA0 -MD = FB2CD4277E373ABAE8589208848B952DE8E5220CA1CE3EDBF572360B2C67B250940B8D4BA59B9FD897FD3765CA318199 - -Len = 332 -Msg = E6FD7544D317CFF635257BDD529C4A986611D254C7CE5200F5485928684F40E0DB046BDC4B2633AF6AE0 -MD = 9D6356E7C54E091FB1AB3C4D412D231E6064C0141D43A54B6EF0C302FEFE1A3BD007D1ED38B8EE2DACFD830C5D85235D - -Len = 333 -Msg = 0B2173D6DB9B9E03F799B6B59DEBCCE1FFEAA8CD118F22E3A5342C53D4D78A2109D7F1798AFE499F4E48 -MD = 0E65E4F13D7BC44E19E00EB875B6019A43705935A303FCB1A417BBEB1B48435887BADACD7338FE16F2F7D1A43035A128 - -Len = 334 -Msg = 29DA389850B6279E146BB9F948913C4C6595DF8317CAF71FC4836B29A963FBBB0F27776F111F7AA7E42C -MD = 88FD687EE2B608ADB45B2D9B61B1AC0322E02EE948E515CBE7D5B3B8015EAE3D3375191895E930C3F0B3EDD381D9EEEC - -Len = 335 -Msg = 9393D143C10AE0CA7636DA6CBB692146C86528A9F8C3724BA57C74A9E00FB3848A2473C221529A16374A -MD = F867684A49EFADB09F0BEA64F26397DA4D7050523EEEC80287E5B3569159157B3B2A63DCA3410C841BFDA2A4B9344E25 - -Len = 336 -Msg = 01E43FE350FCEC450EC9B102053E6B5D56E09896E0DDD9074FE138E6038210270C834CE6EADC2BB86BF6 -MD = 7358C6A0AE58EFA14F65B8E162F07EF2D0AD8DD2006A98293307B76B3BA9E71C308A6694F0B56DE8D59E58536C3513E8 - -Len = 337 -Msg = 7708476C99437E2FD9BE4754BBF89A08324C36D49B27D852034F1CC54BCFED95B4E0E11A7C909E8D128480 -MD = E89833D8160ABD9BA74E3596F2B2C146C0A9EEAD306DD8E874722EF47612FBF96E6F8C26FB340070C2C12E0664442BA8 - -Len = 338 -Msg = 12B37259E6C70B2FAC786F0E573A7A467DD9178B7D2EF0CF264E8E12ACCC3060C62A4971E0100BB93CD700 -MD = 596864CAB39E2D5832ADD408584D6BF8AB4F6F5E36A35CEE7FD04756EEB31B4A86E12B6033C809B68DE35CE6BD57E429 - -Len = 339 -Msg = A5A38B8A372C372049ED7D377535B6EF29AE7574986DC30D0A79D9D0B5DDA3103A9D85741B5D58BE366720 -MD = 34E915DD40FB2CF985BF97CDF10A5FA027CEF1EF299DEAFCB9A54EEF5832FAE0FE5DCD717323E2F116A0C459D72FF21A - -Len = 340 -Msg = 028A103A894572CFAAADBF89765D49F1E3ED6DA3F00A4A48E84545B11854D47C3FF0C936E7E897FA60E250 -MD = EB6FE2737A128394CB68D28C57DD2854DA6A68F24E3AD49E20B6CFC5F2B1C62EA642682ADE23362F51FDAD46B363B14E - -Len = 341 -Msg = BF3AF568D5BDBBE53AD42A2C7D419015A57E47663F0C73837CD483B190C09BFA9F120713E4E743D5394F20 -MD = 54AC12237375FE1A98084AA16B1F1453834EDE693A6DF4C21F2DCDFEE47E04243EC5C774650B2CFEFD53F4A5AD9F40D2 - -Len = 342 -Msg = 1540A10CFBFC8593F64F4949CFA61E01E577C30C987DC150BA15F6C39ACEBAEDD240B9BA78322D79863970 -MD = 6732CFE884250C3318D0F404EE53EE24F9F650155751D23BB16CBD18C2D06093223CD278E7B8A46A8D5EAC53D7938D82 - -Len = 343 -Msg = FE2DA1F667125A9EB370B832ED0C5161AFAC4BC7A03976CEEF8B89FFDFA61008CF4BA2649D190F2AA721DE -MD = 722E56BC8DD53285B8FCB24EB0B7B28E372EDBA4425115D89FAB28026B31A68BD3F291D6E979746266D9A26839D0615D - -Len = 344 -Msg = 337023370A48B62EE43546F17C4EF2BF8D7ECD1D49F90BAB604B839C2E6E5BD21540D29BA27AB8E309A4B7 -MD = 18030C2B5EA23B6C66BDAF180A41173394540215CA48FB3E758433FF9884EFB9E56D2922BA5320BA84BE36E6EFE6B89D - -Len = 345 -Msg = 1FEDC8DDAAC6856744AEFD7CBC018561054E6E3585CAB3F46710F6F8A997AB9D9EFC09FBFCEE9EA1CDFE4400 -MD = 9D0319BBFE2D04145CA9F12CE2EFDE7319E3EF7A48C7E7946BAE7369C552B0CC424173ADB6597F6743EDF8BEE4120D76 - -Len = 346 -Msg = 656D58E735A9AF7CBC79B31C648E200BDE86AEB02349D5FCA38C3C1E57D3BFDFBA46059244A808F528826480 -MD = 99074F0D5F35DCD33879F9F4D7F804246A6F92ED07C2F2E77D02A9BE40EFED8AD0EE732BF559C26280BF8EE9A7060D2B - -Len = 347 -Msg = 06E33F05EC6F55B818F18C7C20E1C7BD7370EE97DEC79F723EC80FF86EE286F379B5183C9CD6242BFC2D4BA0 -MD = E14B4DE4ABAB6E505131F9BA11ACC6706256C4073277357CE948BEE4AA8B44CFD67F3C811C34284B0964ED90BDE7F218 - -Len = 348 -Msg = 09B73DEF13C73B22E45263E5B9E5F4F291FB0132B24425A836A3BD6295DA7AAE2B4301805933F67CCC35B510 -MD = 8864741416499EB57F1E155C472C7D0041691BA95C24AFBC74C1A298053CC041B8E785839EE92CE946C5EE7DA0FCA402 - -Len = 349 -Msg = A2CC0259EBA6A30CF724502773D94178E67FDE7F510C5BF320791877752B815BE201437AE318CFF42BD12230 -MD = 27A08D7F2BD61C156BA3F756E365B7DFB72E88981697091A89DF2E1FFAA0EA76A4031496609434B32C6042DC9B2872B2 - -Len = 350 -Msg = 2C76974C31F633D26395D833037C6BA084B345CAFC3858303D552838BC9832017178D72C2468A9CC347D6C18 -MD = 64FF705E6DF412CE877CE6AD3452870C685645492FA8EC596971694F9EE8911952AE8ACF4C4F6F142DCD22625AB3E45C - -Len = 351 -Msg = E0F134DF7984DD0D183B8761DA86000C298E7B8AE7A7308EDA560F816C475AFF5C85ED74103B683C2867E0F0 -MD = 549EE7AC8D286AFA75D20F9E007B7D4A266A8DBD24AD94F51D271AABB91BDDDC22DDB196850B7AF01805E53A6F52D903 - -Len = 352 -Msg = 6892540F964C8C74BD2DB02C0AD884510CB38AFD4438AF31FC912756F3EFEC6B32B58EBC38FC2A6B913596A8 -MD = 6F9F9016AC3B6A5978A5DC8C7506C8B4D28742253BC542E79D95824417AA542991EEF7E2B9C58CDB0C93616AE9C1F88F - -Len = 353 -Msg = EB093452BC1B8B5C069C93383A6888CBDBDF54EA27EE2A6EA03866CAD6F8480DDF46010BCD29511FEB34E7A200 -MD = 2B4F8BED56B4A7716043D5E0760C536D8317D5C92579378DFFBF67C1C1B346781F1D70BC5FE9DE09199F9717D43E883B - -Len = 354 -Msg = 182124E36883F7209E73389F39F72B1840ABEC27A3F072F1687BF1A117E6A500AE98F62CF1512C62EF2ED00800 -MD = CB62E9C688704329511AABC51F78088C378C1806B631FDB49D5D3A0C71F8A75E5151741419862C294D3F26EAA402BD6F - -Len = 355 -Msg = 2CA783CB3D5E33AAE3DE058E16527161A84B7B53CEFBEEA929A60B146C92124FA69B61613FB1748832C2C1F060 -MD = 1F42E9868C7C39F9BCF79DF2BC31170C4728B87ADD7225365A590B18F6A8AB3EBE83792E79490F6D081C3D7564AB6F7D - -Len = 356 -Msg = 7E36947B12C82FA496D485EDD42A6F2C3C32894878DA04D92F1D462668448DE6ED6276D18C349DE0ED4732B500 -MD = FECF47C3A699E0B93A5DDDCE4CB9BF0590BEC44823D7CD56EEC3ECBEDD27CFC6A2DD9D1C681138516366652F8A9ED5BF - -Len = 357 -Msg = D6AD21DF91125357AD9F6B6D67E3FB441BB479EE5EFA53478E3DE2EE183B3E079432CEEC47043CFF7759D717C8 -MD = 3417D0616E9A09AAC4023A08C3E446F2677F8ACD0AF28B2D3F54940DB46723C585042AFAFEE442812E7DF5E6FFFA800B - -Len = 358 -Msg = 15463F7D27902F09F4BFDC40A704B38A6F9D5CB5C01EC8B9BE2C1DE8BD0D02A950141652B8C0E68A7A88C25F9C -MD = CDC0EF8D2EF0F539A65E17CD6C09C682F9FF65163A80E3212EAA0F05BF11565F67DAAE2CF850E0D6C879D1FD9F81F2D7 - -Len = 359 -Msg = C6608A516B83270FB53379002DD11F426C0CAABCEBB89F9F7D89DE9069F7A6EC76699B8503B8FEFF4418206CC2 -MD = 57100E081317CD0023F6F8A63AEB6BE7130F332DF8DC5667E9FFAAB9894F3E1097BA5DDC4AC885A359A253B57EB48EDA - -Len = 360 -Msg = F5961DFD2B1FFFFDA4FFBF30560C165BFEDAB8CE0BE525845DEB8DC61004B7DB38467205F5DCFB34A2ACFE96C0 -MD = 424421BB9399BD44AB76500273D7F1E1421A2BFDE1A1C130C0B3474409D8AE92B3E38539CFB09ED1D23C62BB32B9364B - -Len = 361 -Msg = 501C700F800129EBF944F9F60A87AF09AAB22CEB2507459EA596430594A0607E9CAFE92DCE870F251D9CCBA22500 -MD = D82513A3684278017F7D82E64D1050F5B413C3B76A8A6A6DB5CEBF76DFF3B06A23573965260425CD7C964B8F7B16A40E - -Len = 362 -Msg = 446594BFB8B97519D99B1EF9DBFFFF5DD75DD72F60E6788A8DE42F1BD917B450D76B165E97343353F4659268F840 -MD = 42F661911ABC07C14B066D8B73A1D5112512A9CC1F769A3042ABB85B691C3CC1D10A55FF1272E001E394321BA0923359 - -Len = 363 -Msg = E6E6686481E5A98343D81BE7CDBACB5DCBD7AE77ED892B4EFE2E55EE914B4C4D3F47C31D3BF02AB52733265EB280 -MD = CF061B59A9DBC776DA03B335514E3301E0CEE9803A43A27EA6E1083DAE125C0A24F28FE903B1612801941BC86628A870 - -Len = 364 -Msg = FD7D50DFA2F48B2D1C72E99336F88F389DF5A1F616F49B616ED4C51C05F6340085267910BA7137B36BF3E9190990 -MD = 01229E89D568E8BC967B8C4FDF3528CB0A257FA2316D03183BBC0FF5B1B3415EF21399B8642A9328BABF5DB1F691164B - -Len = 365 -Msg = 57D7B43D26E8BAD1FEEF7ADF6893ADE1554F3AA453CCB8EBE8ADBA7A8F9E64BDC8126882F3E8872EAE10EF8D9EA8 -MD = 1CA95678B0A3C4BA167ADC973109B4DEF1C4F41CD3EFCACB273F257931C95ABC975656799E447490544E80323445A80B - -Len = 366 -Msg = 56816DB5D0458EFB764D88C5101906337FDFA82082D67DBA964B35EACB019FBCC202EAFA9966A47656BB52E4E804 -MD = CB41429133E534C55778F03ABC6601F3E215E4DF93B92BD01321C6F8AB2DBCFDC0EFDC49B237FD7F67666B431AD98878 - -Len = 367 -Msg = 0780658D267A25094629F1822E2D430573D6D1CB3D057D66BE241278244ACB3EA4418E8B21D5138455A80BDC81A0 -MD = 7EF41136ED21EF401D99DEBB6A9B88A1BE4BEB592A332B4FCC1BBC62D37CEAFA29D90A977851AAA48DA0D9FB9284D586 - -Len = 368 -Msg = CA061A2EB6CEED8881CE2057172D869D73A1951E63D57261384B80CEB5451E77B06CF0F5A0EA15CA907EE1C27EBA -MD = D07A2CACEEA869274BAEECDA43B6020930EF383A897C72A7AC7FBD8FF5CEA7F8BE655844D9F9BD2B498880FA1527D94F - -Len = 369 -Msg = C6CF28AD22398E68491C6EC930B95AFEDBF6E44330BB8A9E46B2B7A77B35E3793E6F684E2103E3954BA173CEE7B180 -MD = 0C56089802C15F6D2CAE5A6302C69F37DF25CEA04A47FAB4295A3C063D66D688E550E0CB5024FF9272B1C3DD2A8DA0E1 - -Len = 370 -Msg = 245C8B218DADF2D694AF106BDFFDC34CB24D0D00EABF16F94D010AA3D53AFD1E3BA64B8CC419B2291D8BC84D0A8280 -MD = 554CD1CE05FE791B00153D4FA261ADD53569AB964ADAF99BF76F2F340C24818E6DB9919EDBC5ACE7464E8BCFE0D2CC6E - -Len = 371 -Msg = 6B3056B6F3768AFFE4952DF6E33D991044D92D8EFF9CB886C0516BA9B15827C69DD5C87A8DD7F3AE53A0928AF153C0 -MD = 77E1ED3F64A1FC8D02641EAF5AB2794DD76DE9A0A8CE33B63D046AF596F7ED3F4052BD0B6E316F4B5AF941C2EF0D5D6B - -Len = 372 -Msg = 7A0CB5B2759A5E0361CB2238B2BBC1306B3605D6EE6DA35B77E26EA7A80C9480C7D72C9C1F0876F2C850A8B9BF2460 -MD = 5EF5EC2D58BED353B69D055C50B3023165EDEEF6960932C7347D9A5808DAA589DAA0959B79E222FED2E286E0E3281121 - -Len = 373 -Msg = 3F589EC4DAAFA9125ADAD0DEA6C0CC6230ADEDFEE2C5C8483B9C05814452B977BA3E487DE46FDB42788DC076780250 -MD = 499C3EBD5B2CD6128AE2A87559923D2D1EB4DD5446169895DEFBF69BFFBFE3B96E8BDEF18979AC371AE3891FA4FEB062 - -Len = 374 -Msg = ED78EF2E98AA9AFD62EE9BB8A531B69D91EE5F8EE701BD97EEAC88C2B09A75056C03DA7F2438FFEDD03A47399A07A0 -MD = 6F86D5BDB57E80F7EBC2C3E39B37F84606584C2BAE3F50F4136A45054FA367AF46E87E5879DA060CF01ECA8C2A449A5E - -Len = 375 -Msg = 7193F965E130AA832EAB17149906EA78B4F2341085A5A1A124C1A9AA182118E5693FAFEDFD6FAC7AE4BBA79E907A4E -MD = DA45E50D0B69F9A7F9186ED36FACBED1FC03C9F2BE4C7C830EFD557C295A196FE9CA1A3380DE88A02A40D96F73F01F44 - -Len = 376 -Msg = 1743A77251D69242750C4F1140532CD3C33F9B5CCDF7514E8584D4A5F9FBD730BCF84D0D4726364B9BF95AB251D9BB -MD = 25D7AB5E930819CF5F59ACD2542691AD66481DA547EAA9C2ADD7C8EA69A475F416C430EA1DE840974E3236A62520911F - -Len = 377 -Msg = B01795726D8DA32E9C36F37E09479F4571DA850893CE76BB1510A4FFFF85DB3E2DC89E23917955D748A79612E3141D00 -MD = 06445087B988D8D89930D119CF4D6F820C53101A39ADF1FB7C3FEFF8AA65CA9E120B0D9B91CF820677F440D4B10F7F0A - -Len = 378 -Msg = 9BFAD4C6CBE6C8E010C1ED56D377A507FB745DD26767F67F5F84569BD28DF01F697149118B37826F0C064A96BF6F8440 -MD = 37F3E020092C8D3A3092D899E7C7CCB1CD42B9282A16190209634FA4B985E52BE03C991078EDE3BC0BEF03EE24209963 - -Len = 379 -Msg = 0B36E609EC9B746AC8007967F4445CB9BF020D4FB08D72C893E17CB7632CFA9B43C3C39947AA674B2FA47469EE512C80 -MD = 7C2E24E62F900BCB197C25697CB3D199FF1D6CF3F5EE9B057FBCA4AD35B0ED055A74B953839D7C51B02AFBD3BF5ECAF8 - -Len = 380 -Msg = 50BAAD7D4756E451D9734DBFCD6781FDF01E44FECC02B822F489FF7640A07320DE9E0CA2EF9452C146605E7A942C90F0 -MD = D8F3DD69EACCD0B41A19707D9A6D0DF667AD2C8CBCF46FDCECF74856D6C979566ABD550DB9966B78D0D3C8CA20071A5C - -Len = 381 -Msg = 868EDB30D33E50D2639082F69CD0C61BABAE09129A8AFE697307E95D3419D7B90ECAC04F3EFD627E285C04DEE318AAB8 -MD = 9973CCFD99CC74CCC583E5B3B0A13B0FE74BA2D87AAE456E3FB327D379BD2F0CF27E0E3936A9B2976E71AD454D30AD83 - -Len = 382 -Msg = 9C540C6D4043298DF4BC9EA0B789EFC43216C3CB20D1997C7BEFE94B677A03669C3D7EBD0D3D156D5431BCC1D4669CEC -MD = DDF229FA547A6346410CA2955AAA2DB58925CC4416131A846E47C4CCB298729D777287F35069EE3FBEA48E73F8D39579 - -Len = 383 -Msg = 80C9184EDB1C247FDF554231308F15D6C5F45ECF6D21E7D6BEB8EB841410B1146DEF2F9AA9C452EE60361CE6C67043E6 -MD = 47812DD31013FABF39F43E9B3C2EB52ED34EA629A5E541AD59A2D3271886FFB7364A550C001AD3AD2C9C3E3579C6D702 - -Len = 384 -Msg = D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9 -MD = 36A6BF2D4EB3CC6FB797914E734B2CA8702CA7CC6D539B4DDB233EFAFCF068712E845364A4A929D31A440C7DAF8B134C - -Len = 385 -Msg = F6D31F3C22A3D006881241A2D0F4138A2C3E683C8C75AFBFE1DACBBBB6976D51BB7598210B606411602B04C774023C5B80 -MD = 871633C4B2AB1B3AF1D8F6B7D06F015FCC34DE6962D16914640B7EFFE4656A116E2DBAFA7F59410191A2998B46BA7144 - -Len = 386 -Msg = 9E38E9FC2A49E920FDC0452A2CAB48D187952AD2AEF98D1070BB409E5E363A15F8A8D4E56716225478A9AE429F58E5A280 -MD = A43AB9B3B314D2DE497874BD22ED4E27B268160FA4627799B64914F4DEE265708B1DD7A7A222E42DAF482A43A1C0795E - -Len = 387 -Msg = 0C2B7646EF6BB85EA55D7CB3D15DDAB2F03F74DB6BB92859E5D06EBC364300174619490E907219D3664FC591B36B6FF900 -MD = D2C564B97D58D3E4EC099E4883A8ED29AF8E10D1458969D6BFDAA58FC61CFFC23A505F687F52EFA2C316E0D8CA787263 - -Len = 388 -Msg = F08C6B743F2BE9E64E55BF64219455FCA6ADEC2950599CF90F87D1CBE3E20EC9C2ED5C5688B8F6F68F07D2ECB7E9DC5CC0 -MD = 405AF115FBE1F42F184CFDA85474C81E76FE49D849BDC393144CA497A30E16E525DE2F9E7F05A98B4CD1E97EB8BF49AB - -Len = 389 -Msg = AE2BE2C31BA294971E252E26FBA821A90368507DA6FBEFBD213C3C2B20CBBA0E4759B61261B95A3715549E37126FED6ED8 -MD = 57FCBE44F6A945F18E5E9FE540B5698C216CC83A9F00324B258E07BB29F4269BCBF315456E4B5BE5447E962D5F08CCCB - -Len = 390 -Msg = 2D394EB3C3F1DC9A6BC8A88E6DA85849A89038B2DD26113BF503169D3EAC0079B56AAD799436A343A0EC5F53E5D9E94A40 -MD = F01251D6FF292C1297AF8BDDF247BA061E57B6054DE1224F260ECD0ACE93C5CDF55E63D17C1A33732D0FA2151AB72304 - -Len = 391 -Msg = 53C96678A5B5E16BD5E23C68078774D685E8506F90FE37DA9F5DAA027D8A92BF50A9802B12C724A30FBC1BCB665AC9FE36 -MD = 123BB85C2D2BCF8FD6F0AEC6D6843D3BE795DDBEFC98DD149270BCAE3F4E48EA0E20F8CE86398298E6761628D2863147 - -Len = 392 -Msg = BE9684BE70340860373C9C482BA517E899FC81BAAA12E5C6D7727975D1D41BA8BEF788CDB5CF4606C9C1C7F61AED59F97D -MD = B69D40A90207EDB20C0068F402008C0E64300B89A1B6AF7930708B263C790A087F3ADBB4C84295D23392E0692F35BDBC - -Len = 393 -Msg = B107511A7881EC739420A1F7FA56FE6DC9BC265D48FEAE99E8F6051EE7129F25F90C7D56A6B16F80733E174DCAE715000280 -MD = 2E17DC20891DEA46F2FA3A4F2129129EBCEDAAC209845FD65B22157E8A61600F7BF294DA737C79B39C077BA134BB494B - -Len = 394 -Msg = D7661A5026665CC9D5A9676E92BA21F430F044C8F4C61941C8F0C075D5E7C5CF0009B6471368222412A70F96C24D194118C0 -MD = FD0500CAC8A6C0D28077E99194B838DB498D043DD1EB955F3E2124D8A877F707FDBB36665C282CDC266A6388E6C34F26 - -Len = 395 -Msg = A0C5DEAC53C00561B7340D31106E4B61B6B8CDAF7950D5B9AFBA9BA0B8B7418DAE4680B460B1A288029712DDB946DEA0E640 -MD = 3BBFF690FE6AEA9FCA0194BD13FA6316012D069503F4D9FFC3C4A8F9DB74B3FF26FC1F883C9C925E2B6D92A3483C0347 - -Len = 396 -Msg = 06A82E6D3E0067A21BDF39EB89FBD0729618A0803DF3F362F81835622423CCF9177EF5BBACA40EBCC851D806594F502FEDB0 -MD = 603C16E02C8976453D42F740E3434ADE629D5367D4C44C606E0136E5CECCA315EA0B29E597CD95E92AD6229FDA6450D4 - -Len = 397 -Msg = B8284DBDDE2AD5DDB44D04251D9E9A6EF9702CBE564BB8722DFE0DA70A228F0AB8D0164F86772F65AB25FA3D029C892439F8 -MD = FADE8191212DA869E1CCB440E410434C83DE2E195A920D5C61E83E1D364381C7EE43F39178199093266F02D1DAE29FF3 - -Len = 398 -Msg = CFAF722B7986FF2C401957C8BB60F9777309C978520A21A692F47F6BD08C054F4A42A7C1E703153E3C61309F203E82C38C44 -MD = 4108D1C47EFD1E714FECCA343602DADEDE18B8708D84B82F5163D6EE4DD3B6ACB8C5374679E0EBF9977A081895096D92 - -Len = 399 -Msg = 9329A4CCEC09FB23008F0C59EF522D1B5D85B7FB3832AE3D6C3B15EB7847ABA6128036088E8E1722166A49565A93B7F11EA6 -MD = 77D6E23BD3075FB818FAF89E3AF431193EE66FBB7C424F68A92E9FF91C7DFC1D56897DE02A042392302A6B0EEC6B08A0 - -Len = 400 -Msg = 7E15D2B9EA74CA60F66C8DFAB377D9198B7B16DEB6A1BA0EA3C7EE2042F89D3786E779CF053C77785AA9E692F821F14A7F51 -MD = CDDB883B9EADC59D2894178B3BA6F61E5E11C2C415C89E554E20A17E4909F8D960F02AA80E1A5129AEEBF2CF975711A4 - -Len = 401 -Msg = 319ECAFB15FE7FAAD64C4BA7560FB257B2EE2C1E4AA49E8426612938B08D717F0120CE812FFC7F2D005713A1682BB1DDB98180 -MD = D916345F40548DEDA7FFCCD3A525943F862FC813C6EF41AD938ABE549C243C5DA9E637D5EB41BF707B5D2E95E9FC94AD - -Len = 402 -Msg = 47D9F1CAEE18C889A12A410DCC086C8D863901B89FA5869FF8FEC5A64B065659F57E7EA54D9911BA05E8A57DD222921C505240 -MD = 0028A37B0F5BCFA024FF27F82B0272B499260A38651E1903EFA6B408B1DC00F95E2ED0A7F4C21B3AF7BA51B018EFA70F - -Len = 403 -Msg = 74927E91B6F203D54E2E81EFFB4F14889B1958A64568C21053E3DC5A941E14C2077D9DFFC18611B9CF5646DFB6C27E0D304E20 -MD = 800F1EF547C39D1A57E567BC6AB11CB1158EB74602181C2A51ED1F28AD83A4D5272E3EDC8021853D27E882CE57EDAF31 - -Len = 404 -Msg = F6E46F9A7261261D239C74300F434D21475A03D2AEEBFB546F0C5AC6BC4EE97A197FAD9CC1B3C396C244F8F20F97632DC8EC30 -MD = D3166911C607C6B3D362486E15FFDE1863F0F207C27C38D026F09BD43C458D2D97192D1004E17AFEED026F72D7BD3911 - -Len = 405 -Msg = 429DE6D5EAB64B3353736AA20106409B58C0C956F4F751E24CA3D519B730308AFF43232262F1DAE6BE948E87F6C187BA725FB8 -MD = C4D0E73FA43A05128D5B5DF79C819DF9DD172776111C4B2C35A70D09C433415EF9238AEBAD404B0D160C7A1E0D2E54F2 - -Len = 406 -Msg = 429D066735761A1E5EA847E5EE3EFA5ABF2BE447E9D6E2715CF702F99FD2028AF3432ADD0D7F409E0A3DF144AF995B67B46A50 -MD = ECAEC7E01C58C100764DF68F2E1BAE41AD91C0096A3E4ADBF608357B8039898CD06365A996C73F6425E2EE4C307950A3 - -Len = 407 -Msg = 0A798F7C67743E076AEDB61F0BA84D657DA0DA2923AD4D66DEF4D5934C49991427CDBD0134772D97DB1ED1522BA9EB7F972B30 -MD = BCE77A44DB0C7A157FA10252304AEDA0DCC70037EAFADA7A13B813C1FF29BCBF5F8781427347668814F81E44118EF2FD - -Len = 408 -Msg = 9A219BE43713BD578015E9FDA66C0F2D83CAC563B776AB9F38F3E4F7EF229CB443304FBA401EFB2BDBD7ECE939102298651C86 -MD = FBE0056D65AF279EFF1573F169809A05B6A52112B662D07CDD2570BE5E198A28D1EA49CBEAF0C05E76A9F09BAF6D1F34 - -Len = 409 -Msg = 072B844D05C1141680E5A86AB9933E524A9C7FFB0006FD2CEBF48C420AB7890FF685BFDBA54E31571FAD5625C1F08467C9EEF300 -MD = 7994D7E8B4F774EE960758BFC45068B589941E1BEA37707C2F9E7AB9943367C1A1956B999FA039456FB4A9EBA1B65A64 - -Len = 410 -Msg = C6547E7A0D7954F0D14A531E99B6BA3B22B93194D472E669C926FB3BFEFDFC638418425B4F2C11C438A8903004922C9242A1BD00 -MD = 5D69AAE4AAEC6E4E7CA59C5B2603046615A9906BD07884F7CC681C17F8790863F76DDC9E4530F90ED0DDF38F73EEBE50 - -Len = 411 -Msg = 84844062ACFF2734EF26AAF41303D0E767527DF9C54781EEE27F84D0C3262094612C44A8104471ADBD7B9D2899AE4B751CAD1700 -MD = B2DB70E18C3041C01853C363D4DE164BCCF29F2D70839F4822B38DEE2AF67433FE788D3F0C9A0550D81DDD0D70F1AA74 - -Len = 412 -Msg = CE88E129B93E120B3F80720C43F187308A336418787D20EFFF630885E20948862BB0ECD3539E1D23D05223C988A2E5495A92A600 -MD = 6320F75E8BB0CD7B623729503644AAC7429B41E9CC75770638930EC08208BEE8C671685512E69CE6945057A4C20D85F1 - -Len = 413 -Msg = 4D4768585B090550A4289861A3EA955EE420D41A04B71199575120280DA1F0B9038AF3F35EFA1B8FDCE29F8F5F35DC6A803D49F0 -MD = 8329FE4863ECEF9FCAA53CB75BB901FCE98B57ECB63A99E583F73CAF78FBC3750C0C29062BD8DEBFB1F5AD9203C56D58 - -Len = 414 -Msg = 010FE46B5A0E37D07218028437F52F2FCF41063B6CDEF9433769D3AE35885599EACED0BD468E731C8A43986851545A7D200787F4 -MD = 92E1338377D200561E1BAD0B4B9322D002DFB07D839D32CD6E3987A180BA727F7EBB12FA6860FACCBEEEC956137F09F0 - -Len = 415 -Msg = 5A7586F07BFD09DDC140DCAC2D5F6822EB9868F8258DF4DE7D6811EB43C37624A727177EA10F28943083AF7603F954E5CE1BDA0C -MD = 79B58F5A0C08941A1A43964F4FE45AA4EB6CFB0E3E45EC6B44E79EF684A9476184438DB668FD2AC7B53F0A44B9F076B9 - -Len = 416 -Msg = C8F2B693BD0D75EF99CAEBDC22ADF4088A95A3542F637203E283BBC3268780E787D68D28CC3897452F6A22AA8573CCEBF245972A -MD = 26473DE684CF58D559C7C0CFD360A9AFFDF33900FD69A3A946581484B93EF6FE6FFAC461B4551E136BEAC64CC33A4C15 - -Len = 417 -Msg = 8C7FFA23F6AF3DF0385B9EBF9E14F6998354025123E95E92023A3885360ED163DA1F430A259F6C535A6E3975A3AA541FA536F34900 -MD = CFFF4EBE1986C3EEBC036CA3DE3D714390136FBAAE80A3DC9C3A4778840D7947167E5A8F56E02F7968D3A2A96E1E85D4 - -Len = 418 -Msg = A48E78686CEB99446507346AA71D0C7C5D97AF093895DCE569D8F69B16771696E429787C87946214985B0B6EE9301EC89746495640 -MD = 518B6F1E2814535B2546ECD496DC598F7C4D0F88C2147F3C6BDA072AD367E4D5385DBFE41CED24014551C8BA6D3C4555 - -Len = 419 -Msg = D13CADCDEF36059A4FC6EA141CF4460B93631519A40CE26ABAA635480687A7AA39D15CE827BDCE367C619AF46F838B3B1ED26DFD40 -MD = 65C5680A789EC4D368D6037E5A97A44837BF4D2FA71A20D85323A1712EE9E928ECF7A9B88A9BAFCEB4C5D907425108DE - -Len = 420 -Msg = 82275CE8689C8466DBDC50AE683961A5C5D4D3A348025498BEE894E8F0D6B9328D7005FABB85E13A48DF19BCDA503234AF7124C980 -MD = CE9DD87654978A2393A33CBDC957E2BCB2666883FD29A4D44EC372C8D1D0114BC50F4B5B11F7E51BC83CB34D5EA05029 - -Len = 421 -Msg = 4B6FE5B999B90B21DB0CF4B8DE1E4351F80D680C49D3F040869256F6371065FF35DAD6BA971698248931C769B95869855377DCCC88 -MD = 0803875401861C403E852EC14B32DDA9B0E41E36B98F942F86910FB6E348E5B2781634A960FE3198BEE5954DEF063E80 - -Len = 422 -Msg = 3CAFA3937071BB3055C96A364F9B1FA56266F47E03A1A28213166177495A59713C04B7475E1AC2573B979BE28EEEF0B651E195CD8C -MD = 887071BC26DA96535669CDC65AA6B7575708E4D8EBFA6BAF73FA84BB39AABA79905C503146F56A81FA584534B68D909A - -Len = 423 -Msg = 93302958B1CA9E71AA01CA51E8E6E370D7414FEF7288714EB71F2005CAD8E605C6D173A1617823DCA776AF99A98ECA41274AA1610E -MD = AE76E11C2B843D98C9469F9059AF9D5CBDEFD5430124CDD139152963E7A34D0E8BD5DD68682BDD57535219E0CBDA2900 - -Len = 424 -Msg = EC0F99711016C6A2A07AD80D16427506CE6F441059FD269442BAAA28C6CA037B22EEAC49D5D894C0BF66219F2C08E9D0E8AB21DE52 -MD = 462AD97BB0156A5DA3DD0E9E5BF06D31024FE43BB80C018F6858EE4332F2EB5A78ADA06CB55DDC172AD87F88E26D2451 - -Len = 425 -Msg = E6F4D535970FD7C9E4DD8BBB2D4B4257E68065391F4DEED3B4F7A7E4FD9E61C3D77394C673571F1AA4640D91AE3318DB62D77F237B80 -MD = 5D4BE997FD019740D12803E3720FE38639015AF8301139C710A93DEC857432F4E5881BF454345AB0CA38ECF020FF8D3A - -Len = 426 -Msg = AD7CF7E15D97E0AEE75B907BCB48C30ADA54CC6C9F1B3371C7AFC74E176E6A07B1D8624B135102E395AD98A31921EA81F121CBC85E80 -MD = 913AC0B555A899EBA8A458838283DB49E3F633D6B2EA954DB6A0527FD6DD9EFB412FEFE7F529D83F295816B8DA80AAFD - -Len = 427 -Msg = A9154D621C9B4BFE856394C8C47D5204EF218C54668713568F5C30BFA5980B24B63B4759EF05C16F5E4948BF91BEA979FF990A9EB520 -MD = 769B7AA29B1D7239E9EF8A1C2A0765BD870C241898971B488A057BCD5ADAD0F995AB4A3543121A3BF93E4937FFEDC1F9 - -Len = 428 -Msg = C020B6643B128F27BF4E654D131E6C41669FD6F5941BBE0102053FB0C7CE405574D44AFA98D9E9A41EEDC1B6E21FECFDBCAF89EE50F0 -MD = 66C25C0BD14DB0EEFB57C35EC0B06F5E3C16F0317649B67C6FEA58874069232C135C52F93A37AD5F568A1B9B91D8E6BA - -Len = 429 -Msg = 3D26CDFCE6E89B4D1A4DB097BFFA4FE505DCB18D0C191836F3978CE1685F7E7FC59F89D71FA443F0EB5A29092628B5ED778EA9D8E280 -MD = FEB52F24EBBC7920552278C9E962C8238604B9F7EF85A8957356E0FB854AB3530FC0FF9F5DF930C6AAFAF5E387D3E36C - -Len = 430 -Msg = 0BB08EA725002AE244064B3560D147027CED860FC32F289E08F5BB3E33DF133D2AD6962B8DB6BE7E050511D0743B66B5D2238B66DA6C -MD = EF77CC7E4531096F2850007582A3BB73A5622C96DDC3246E38B9CF49E55AA3D7184A72AA9AA730C626958A1CC40819A1 - -Len = 431 -Msg = 49FF7A3964CBB260C1A624EA3423BE62256253D1128B81E75C3E277B419C0FEDDE0CD4DBB5DF0DBAD5F16ADAFCFE09F2E642F5117DFC -MD = 66D1D5A4A86CCEB8A9F73D3B7CD34BF47F8118E131C3D30E9FE4EBB905916DCB171C86B9F4872F899C7AB8B8EC776126 - -Len = 432 -Msg = 0DC45181337CA32A8222FE7A3BF42FC9F89744259CFF653504D6051FE84B1A7FFD20CB47D4696CE212A686BB9BE9A8AB1C697B6D6A33 -MD = 9F890FA80A4C48B67181E89DBF15175CE48B21F9D09405218A8CE3C0759282780E142FC59851157D14509FCE79D1B17F - -Len = 433 -Msg = C9E5FE547A3E2A4F070F2EDF8915A1AE232DB0A6974D8BDF88D15C7FC828AB82E919B061312404128457AA460B055330E74A72250B4180 -MD = 840F582BBBEA1CAC455AC39C72AA95E77D7098B51BDA9EFCFBE2DB2B6F68D8E7A408EFEF557196D3310B225E0FBAEBCB - -Len = 434 -Msg = ECDFA7350DD9A1C79FC41FAD4276264510A4F53748BF58BD655D0E041D68D81A839D9D9126753759FB2C2EC92DC690759DB8972EB2EFC0 -MD = 55214FA638A46F329F1DC3A0257E0A6B452117F3FBA52AAF4C450536AF2E67A84EBB50800D4924BEA0365C8538AEF2DD - -Len = 435 -Msg = 60E9D7F0EAD1F704D626ADD35B269BC6BA9FA723D21D3FFD07BFF7BC2A7F253427C669468413D50DE4E087E6DFB40D3394180F4D885AC0 -MD = 35F307AA5B69F6B147F9858756C20EB14B437F746750391DE4B24F6A33772996D76C8B3BF5E9D00E67CF81EC4CF472C2 - -Len = 436 -Msg = 50D69429B80F785AFD10DC3C47AFCA11D66BA16F591AF56DBF5D283C427FAE7544D06A88F4F2DDC020A90E39231019364963C9D0271680 -MD = 542E57E2B11D3883EEB0CAC1B88826226D3D86DBF3D31CAFC24C34E53FD6385C4F422ED9A6B23F47464A49A4763E90E7 - -Len = 437 -Msg = E3D2906D5DCDEC5910F6C1B43BA414C0F6D8FFD992C2CF76B082AF565DEF8C00348739AEABE24879B1E49C50ED9CC281E25E47E0ED8460 -MD = 6944BAD8A205FBB318B11259E923BDC0F3B9157C99CB0646AE526B7C228574FE5FABE5DB5A94C192B2D3EBA0974A9274 - -Len = 438 -Msg = 352FC252E3EEE275D29AF0C2F5803C762259249E8BCBF9F293BFEAD094328454275D817F98F302F3E899A406C8D39211D0BFB7F36B80E0 -MD = 29BC90A12FE187D01626B3F36970F313979F54FE065CB5A8CFD6B161F6CFD4584D2B8FFC5333D67818536A9D0B37A833 - -Len = 439 -Msg = 6AFF359906DD15357A5262CEB17DD58FF51B74DCF55FF951260CF6A419282752E13B7CA0798612E3E1094202603A2E331792350FD4A10E -MD = 26A0DB8F6E8BFE3B76B6B584C2B47587F6FBDEA4FDD6803CFDCCD656F0F5391F535B8CA112DBB1E0924498F790AD2A8F - -Len = 440 -Msg = DE286BA4206E8B005714F80FB1CDFAEBDE91D29F84603E4A3EBC04686F99A46C9E880B96C574825582E8812A26E5A857FFC6579F63742F -MD = 2D9A3447D7723D837B8784FEAF03B8F9694CDE5FFB84C6A6628895A345BB8F3F5BA725416906DE063B1CEFB722C7E56A - -Len = 441 -Msg = 5C0DAFD24AC5712E9772017732C245E30BA569E247F82AFE4D05305375141482A8778D8C5F0D6C5B27BAB687568C04CC1D883466549CEB00 -MD = D0FB71645D10C0837FAAF45B1272D5BC40F0774D361DC9CE0D9D22C45468F4FD8A1C6831A5DB9CA3BAFE811162E7F7FE - -Len = 442 -Msg = 70CB8949582A95F73E1C00831431E1A7AA4372FDAA3DE4DD66B554539E8003DC6638A292E3C07BC09AD007590670D9DB9995F76CC6044100 -MD = 8AC9EE8F6BA76C815160CF5E0671B94004375C2987B564C9B5551C8E5AF051F1C84390FC6448A5C4A8B2044330845B58 - -Len = 443 -Msg = F1724864E3A8C9EF8F9FFF07224B295ACD1DF21D5CD318F0C8484642BECB45DC9FAE4E18459451DBE7C94524165BB323A363AEB34F12AE00 -MD = 6076DE1360A61739B5CF7D00ECC7369E17FD877C6DD477AAF30F944F03A9E2C4A17BE06F14DC5C66CDBD050956F2C84B - -Len = 444 -Msg = A5E2F570FF98F95601BCB7EBB0CE9D22FD5A9A0727F10594DAAE511395FE8D48472159B20EA94B81414CA50363A716EE0130881FA81DBC70 -MD = F36BF6A36A81077A519A066B22B4BE0DB2D3EF0061FA5B725960E8AC839AAC94C3DE29A9B220EBC400F641F519ED4C12 - -Len = 445 -Msg = 59C8DFC6BFFF8D1FC4ED4B362A0C73D1E2C47CE11FF4CFC3FAF74B69BDE0D70A7D44C91F21324E93A0562DD088351AF94B97C4CAD3D38D10 -MD = B982B0E0344D369B1AFD4099DE8A18E9C76D0D2B38D2AD607D3882C0EE0BD59409C01D6DF8096BF0DB53C1B10B4F289B - -Len = 446 -Msg = 456D25084E73FD7F8B4E9E0C5A28A3DF6BF72A95CFF996645C0D6989B7C36DAA989F6D570578838D276366101DECE16C188E2AB0D1CBB020 -MD = A10A926E60078599AD4E0C7E9920EB69A47DB89870351D446F714DAD33A55FE9374640CB9F3F5179239D73967F641636 - -Len = 447 -Msg = F6203A102927E1F775EE10391B2370C4133EA999EF76E822FB47B2C47372FC5A0B2F61C467FDA567621DE7FCD29559C8B479AFFEC131572A -MD = 46F8C48BF2A73CE2B5F26A615489C4EF2BED94C059ACA815F7A28537285615356B3C8A2F50C6A2197C7C22D152C5DB4B - -Len = 448 -Msg = EEBCC18057252CBF3F9C070F1A73213356D5D4BC19AC2A411EC8CDEEE7A571E2E20EAF61FD0C33A0FFEB297DDB77A97F0A415347DB66BCAF -MD = AF415063A5E25C6E55ECA7F9BD1CB0C71A7A059B569737036B339CA559CC9C7466FA239EA57CFB5FCC50944871C008FB - -Len = 449 -Msg = 1251A40134EAF29B0FCBBA4E9712AD63E95DF1473C561127B1BE2B64375804F7D54C442B0C89100E66BCFEB906013437E7EC5885C197756580 -MD = 8E36A9BD2B3DE41EEC37A789CC985481F3980A83E8F16E391F3BDA749B1B0CC198908C1A753D2A318BD55F4ED1E03408 - -Len = 450 -Msg = 71DC616856F90F79E04F31F16DFFAAE002EDC5725CA3FA59D2A468F69587D80CD90D1B488F86F481B4A00B447B26AD425E7AC7AD4D09774740 -MD = 64ADBCD5026116E4D12F4C6F204D3C15546A2D51E43378DBDB618550AA13CBD7F03139F43DB4CE19B0BEBC08210223F9 - -Len = 451 -Msg = 57AE1BF18725675EE13EC67FA5C4B6EC1911CE82F73C00F4BAD877D778EF22FE6EA93224262015A5DFCACAE3087807FF8895B72B5C530A3640 -MD = B6AA2DF0F67EA60FE7026A1ED3C338A541B1E9FE015DF167530F93BCC571F803983E9FBE0E1682A451850AEC30E8CA97 - -Len = 452 -Msg = 841AAE4092D3C3ECEAB075CB9EE06EA07AEEADD236767B1595FC7510888A87C4747C3CF4AC68E5093E069423CF98B767EA4098886E1CD64D80 -MD = DD3B043615E6C3EDE4937575A639CFDBFC70B3CA1F3C82D927D4CBF31762DF8E6B6B290A39EF0A53601E8952AB51A641 - -Len = 453 -Msg = 5D6A069F7980F35DB923E7D3DE2835F8878630BBC8751670EBA733FBBF614EBE3E0B03E860334E56499E43BEF8D6AC1C6C9C1588B1A56FAF00 -MD = 7EA328E032AD802056344146341F176E51F25068892962C554A65C56237F2E1862AA6168E8C7BB258A3960CD1113EDF9 - -Len = 454 -Msg = D2BC7F70B8ED9853C98C2E3017F97E8B1643C10959227D3D0D334A938F12C53EB3C1371608732A50CD5614768F804B98C9E587858A469B7DF8 -MD = DCF408372921DEFBCA8B9A7D44CA3E52AE497FEEA4D913AB2CDB9539D96B7BAF406EA6131A1B20393E54824CEDD266D8 - -Len = 455 -Msg = 55B1386C80FBECC7B54207EEAEF70069B1836378558309973FE2836322BEFD420AAAD73E399D1BCA063A590C3A82DF8708B1457B61A2C80352 -MD = ACBF3FAEBD8EB49BDFDE1802C0E9CDBF78EF2D5F914646CDCA5B39459F35AC9FD16CA4F70AF776CA0837F601D0E9A563 - -Len = 456 -Msg = 416B5CDC9FE951BD361BD7ABFC120A5054758EBA88FDD68FD84E39D3B09AC25497D36B43CBE7B85A6A3CEBDA8DB4E5549C3EE51BB6FCB6AC1E -MD = 6811EC07E6E85A289C881722AE84E6AEF01FD2761294C6ED9856D2F7EA1C71A89B2FCF4A9E56533360EA22317561EC05 - -Len = 457 -Msg = 9F15C32E77E8DDCDF9576D2A17AAFADB77A66A35B0CB244C6F6079A3F033B2B42AE723DA59302984BBCC7D25EC57714F79C7316C81762EE98F00 -MD = 9477E2095DB43CCAA42A76AAF88DB2EC8EE825423543DC1AEADCB243AC41022225E2CAB9975CD26E2EC77D85430B78D2 - -Len = 458 -Msg = 0C7D0C80FC9D6F36EA9F87C248D503A29761221BB58AF67327DC82CDB25883B5251D3F7F148F5EE32EC47AC70498CA7C6A2EE82B18918B381E00 -MD = 1BD6B6636908AA237DA637D86E04D1537D9AF378D8F95CD9539D8A7E8B79FE8B0D7C436F406A6879CF327BFFED4B9A58 - -Len = 459 -Msg = 1A057422EDB7E08FCD04AD53DFD7A8C123647A1032F5025DBC7C22916250FCACDF1B2B5DD0CE295EB5F424F541FF55BF6A8D777A571C0B508120 -MD = F65D37AE168247B0658B898CD7B9D5537FE79C7565120A26AE294E647BE3F0299CD19B56F6E6AF596461CBB60233817A - -Len = 460 -Msg = AC3EACDE274757E1AD019FC3B68250DFB627414EEDE1FEB4A4A313F50BCF18F84EE1466DE13E5AA62E72D8C28E5365873F36C3DF581A7BBACAE0 -MD = 07A8B5CF8202D0F519D3AFDBC5D5D54A111DC9323E2ACFAAF9C57AE2733C298C4554CF4AB477E6622970732C02859B7B - -Len = 461 -Msg = FF8748F7DD2AB2ECDC95EDA2E0189D55F012748DD9EB63B3E77802E215431A96D5F59F3A4C9E70F023C2F91C218E308EC8DAF7463082C15F7080 -MD = E13A3256D0188B28860E862A9642E02DED6B8F6F252C9D0A336700E72C087C1BD4B463E3A6F19AECE5C3641863B4EDD5 - -Len = 462 -Msg = DAAFF074211D1E547725C49C5709F0FC904D8944864B0350A1453DE2E56F188DD61534C4FAA59384436F6A6CD9702E1931E675DDB3BD6977B2F0 -MD = 48526B78A1C9C161A29F49C650A287A5E14CCFC8690CFAAC122154D53BD566CEED41E9D7B3939AD671D95B82FBB330AB - -Len = 463 -Msg = D191A654280C7618570DE0EC2E3BC1578E9EC81AC48022FFEE1224AECF2A67E572DF39C343E7B1B06E56417FE83233FC6CD40ABF2602BE6FF640 -MD = CF1DFCF6882C671851F7E914E19A4A347DABECE2F8BA5F5BA5FA1DBF042215BEBAC7B28570BF7B8AE00A4D238408D4D4 - -Len = 464 -Msg = 5C5FAF66F32E0F8311C32E8DA8284A4ED60891A5A7E50FB2956B3CBAA79FC66CA376460E100415401FC2B8518C64502F187EA14BFC9503759705 -MD = 7C90268E981A3C0FF19E14CE9830A1B9DA5FC183950875961582644462059DD2FADCFA68750D7D2F44DFCAB9FFCE5832 - -Len = 465 -Msg = 84D9ADC0C9097A66ECBA5BAC63BA2EAD6CC52D95BE23FAD7088234D87A3B6B6B956DCAAACCE94B98C9314C47F41BFB20D601B5F20CCEB86C4A3F00 -MD = 29F55E48B69E8A26C449C9B3555CB9491A3F74A9087E8AE7718808CEB5940D8630B3284A503906ACF2342885BCAAB2B4 - -Len = 466 -Msg = 2B90FDCE3B7D08812A3EE16E47ED849B134FB644A09ED63B274B09F38EFE46E5CB6C1E6F3F4C48CB23F8DF74D81E594C0C16100E1D446693AB9A00 -MD = ABAEE3FCE3C141122712DC9BDF69A39DCCDE42776C9DE8F01B7B059F6B81AFD4EDD12FCCF0691DD52F62202278D867CB - -Len = 467 -Msg = 883B4DDC623CBEE9365494693358E8DCF0E253B345C12A1270A4937730A04417B66D6E2A3A712560C6A07859EF56EEA6BE39CE1FAA2EA283FC8AE0 -MD = 814E0FFC5FF0CEA76A419F85A489DB6D1DC3E8D8AEB1CC3438423A92831059516A5A98B4F25FBB2DC322E72ED40A897C - -Len = 468 -Msg = E679CBB7F00A3902E805D1FE5DD015E7C4692ACD0BDC6BCE9B6C0CC31195E6D43DF50586F030691180543A54836687398FC51DFA57562980755140 -MD = 35D84CE5F7451EB89B4FA3E96475F09CED3028E6558BB78BD5B78665BF96EA0F466BB53F2B23DDCDEE298BB04984568A - -Len = 469 -Msg = 9E86F90FB087F12F7F9B7C6F526B5352EC2E6BA8A1E27202323BFACCD1A85D0DD6456AF7EB02DC01F9AC7800BAE5A55A011AC869EE8E9881714F80 -MD = 5D872FCDF4088377329C11E7CAD00D86218FDC228949EDFE50EA5347D4397FDBF221A8A73D75CD765A45CED611CE1276 - -Len = 470 -Msg = F24E07FEC11D49BE67326349510A57AB414774A1C56111B46D988B93AA29BB35E1C1BD47E80F8621C06E8A78D590B30181430BED12B27702168A24 -MD = DE365E1D48BDEB0291C65FC7C251AC8984938A0AC582B7C1899B73A1CF9258C313BB0313FCB7747C9B7A953594334FB9 - -Len = 471 -Msg = 5E391FC9253D20EE80CDEC7B9259C01CE479BB4C97A76CABF722B6DB2F105EEAB8B91C5A4CEEBD05C39138A0E9398290CF6C9C13C62AF335CB0A60 -MD = 4389A3FEEC7273ADB4408CF8EF8D3C4CDE3B43F09FC5F107976B1A0A8157772C81DF9CE6082A00AE55A447B3D3E37BAB - -Len = 472 -Msg = 7167E1E02BE1A7CA69D788666F823AE4EEF39271F3C26A5CF7CEE05BCA83161066DC2E217B330DF821103799DF6D74810EED363ADC4AB99F36046A -MD = 64E9AD357B58C6FA0D26D0D1F48C4AB057B9F80965AC38494E88F542BA41D6B798FC2DD88290F8DDE7948C19B5A1F260 - -Len = 473 -Msg = 031321978E471EAB14C2EE6E3EACCF57B203A9662C2343CD764A41FFDAAB43D5830D29A15E568767627A116D5B8F47D2363959DC6BA7B0BFF674C600 -MD = 9A879C15D1E28AC56D0279DB8249E21AE363036B578F57D37FE804F4334AA803C8996702EA3888A10F56B5642716EEE4 - -Len = 474 -Msg = 8A07ADE176B3DA0C6CD3C8B40A3CC8C6F0C214C660B885A7486B4E447677FBE0C62284F00A816E3B083D1A4F614C44A5F04E98255B5BA15849767D40 -MD = 4F6419DFF0C6C033F53AD3BA6167A68134E1401305ACE5FC105EC6B7733D7FD88304B4E492C199C07AB4B75C745808FB - -Len = 475 -Msg = 6C993A10F1EAC2D1BD759277077D7E3337822C428FC92EDFF444C58F106617BE61D23395F77AD6D0C43659CB29578E40BC0CCE1292C637236215BDA0 -MD = 83133800D773FC2F674AF2F1F25B95919C4F637EE9A7AF8FF4FA9AEC7F53247140A2F4E1872CB1AC43ADDAA0ED7B61BE - -Len = 476 -Msg = BDB3EBAD9FFAFE0EE4E4AC7FDF0A970BE38E8A915684EA15628EF03DAD5454FC353D9EB27A93C428C7A7ACDAC6A4C51E7C35D845782BF6B9AA74B3C0 -MD = E17AD97BBAE0D90635CB6AB812AA77DA1C30AE03F2DFA17852B0145DBD45C551F3ABF6FB421353720EE365813CACBA97 - -Len = 477 -Msg = 04C9968BDC58062E20D602B6BBA6596280EA44E4DFB4F11842F847436C68722B8CF82F9AD7A474B1257A73D3D3CF8CC7CCBDAB52DBF2C43D16A82038 -MD = BF33ABF2B9C7449EB92D802A24E78464D308EF84A37CDCA34C5FD4050445B3FB47568E9E4CAEBAB8FBCF9D520E4A8394 - -Len = 478 -Msg = 33FB9B9C1403340C038504CE1BA613725788CB765CE9D1A359F15BCDD2BB888A8D0FA370312048601E29536297738485160E1B0F3FEF938A285A2A74 -MD = 2D2A6B3093EAA3E61C7C253603C93EA142BA61D8EDEE4E6AD272B3D2BBFFD183651566595A86DEE92C9B2876877F6590 - -Len = 479 -Msg = A5B8774B9D957DB574F9D6BCD8B888E70E746F3EB240DFC9507B3983B8F2940B6625E36BEC3100C90FDB40182BEC5DD007276FD1281AB704792F8E16 -MD = 475C5E70F3B6C6428BD7A362DF6160662EA63053BA7758B48F442E40133C8D2A4D9C2D4184048C46150643E18F75D91E - -Len = 480 -Msg = 2FDA311DBBA27321C5329510FAE6948F03210B76D43E7448D1689A063877B6D14C4F6D0EAA96C150051371F7DD8A4119F7DA5C483CC3E6723C01FB7D -MD = 3D73B33F001387FD1E752068AF39454E476B8407038C772D94400458C93664EC5226AD1BD3A19A6D9A6FBD6E6A62695C - -Len = 481 -Msg = 72B72F086513EABF4CC313157CF04745B40E5A77A04206103005FC3EB7A77D1EAF81B6F9020A1BE6BF7AD8C0C2011D8AA8F18EFC0620B893B50EA03000 -MD = CF35D6E8B841B2A74FE85ED154B88722EBF41FCE07D76080C91E1BE2D83E9B3A9FD77ACB42F49D3323DE30996C5138AA - -Len = 482 -Msg = 7FD02685386254BBDF27B52E5CAE59FC7BAEE3AFD2ECA52B912738354245804D87D0303B6060D076F2F12DE3FD19F475AEC0FD410CC14794731806F640 -MD = C11CE3C28D11BFFADD67806C1A5EDC5BDF5F28FEABDCEE3A9D7BFD1DDA14914D6401EFCDD1FFD88D57ADBD7C7CA662D8 - -Len = 483 -Msg = 02DAA8B12F35FDAFE5AB24B236E00245256500D472EFF4904E954DD4397B9F49DC142DCCBB1C2B3B4D3AFCA3FCEC4EFAF9854B3054901A53A180168320 -MD = CFBEF5A1E708D19E51E33EE64FB411B00A88C63728B16DCD5EF0BE9C70207C07CB830E2836CC5846C386746693A67F63 - -Len = 484 -Msg = 260632DAC6BD8BC667679202D38C471383227D0715AFFABC37B6593544B3799C257DD168BE9B39576FCC583FFB5012629E60C44A51FD67BD432047E2E0 -MD = 3128168D3EC5C5C3D22860F7FD5B859960558AB20366AB2F34356AFC4EE66A0634719A7ED47E49E5F5FC0C9C89B66087 - -Len = 485 -Msg = E61BF690723D45257C7B2004E8CD05D876C8D792D94680D95CA2CD869FFFFF5ACF9D0B162455AFB6F19B8C60C97B2D8CEFD4F74AAC7034204DFDD7FA68 -MD = DB5C127B84EAF47844CB44B25B6909CCF46C7A272DC3F2FE1F430EE2F2D2CF1441358E0B2D1CABE200FE90F5F3A81D2E - -Len = 486 -Msg = CF719DD9A1256446A6220A91F975E26934E33C1CEBF2D5DFD7FCED270B7073D3E96F2215BCF2844E4A25FD506567BABF039BA9F622F935410ED3F6BD58 -MD = 5442A552650B777D6F5D05B0FD95EAC5FF0B425787080AB7F2FE1A45EE891D4B3729009929A0BBFE4A3BE21243DA969D - -Len = 487 -Msg = A6E86899DDE05DF1C81826047106FC6C258A4B6E347411CB66D28CA203DADC465548D1986C17E548465646CB95801A2EF4E6322EC13320FA551E2651C8 -MD = 5CFBEDF34103C746E3106BABE21D3B9A98A4A6F1E0D7A6361A47B43E128D79F078A163818C599D5E7FFBE53B5C2F92C3 - -Len = 488 -Msg = 95D1474A5AAB5D2422ACA6E481187833A6212BD2D0F91451A67DD786DFC91DFED51B35F47E1DEB8A8AB4B9CB67B70179CC26F553AE7B569969CE151B8D -MD = FC619CA9810CAAE3639B3FC661388C454167271E65ED0A2E5E8BC718AD21B9EDE895A658C946DC2FB15B33354DFE402A - -Len = 489 -Msg = 1090FD6C2652EFB04DAD880724CB7414743FCFB4F93CF8312CB0B463CC27FE18BE9F745C499925F8FB4C43C11BE87D17EBA1359FD2F9E5CC2C40A84E8A80 -MD = 55395A355FEE0F50F5CF54DCDC95288BBCAB242D06448880958ECB8957872D19B57D4BEB9999838903CF10D49C8B1F77 - -Len = 490 -Msg = 723BB81B01FAB9DAAF8F48B75557DBAA5103773C0DB24168BFA06886E6AFAC0EAF5A943669EFE84B0E3FF2BA6B681C4A16626D3A3DA58BF6D4781203E5C0 -MD = 60C58E23FF5C5A2B8B5BFEAF831A2745D2DDC2D4B6F2FC8AC42A4434A664FB26F0B99DBB9ECD2DF5DE8B203D8A0007E4 - -Len = 491 -Msg = 6091F9DFFCBD33C3852046578766797323339BEC2414C7DD044D60542C38DA9A5A6F8B385BB1BBCE2354CE744CED5FD673E7C9A4F50E6298994328A24CC0 -MD = B3120C26A44BCD385AB9A6E90E9D3CA18C36C5D9EF303B8B8DC510D567508D3BEF139BF8B1E1021EF2090EC2F107BD59 - -Len = 492 -Msg = F406EC84ABE14A45CA8F161EBE319125E83A19E4452AFD47DB3BE542501A405EA7DA19C317006C1FF9FF7E305C836881638A56C0427181809139C1D21900 -MD = 387ADF28C45FF51C3D767362505B08DBBF95E0E8EC87DC4790C7C5DEC01F98242B8C9188E181B577FE9530796C2FFFB7 - -Len = 493 -Msg = 1F3DDCAD0F956BA1A34322731FFB1E58C46C66A0E9E5D60CC08E62FBEB55E63061894C13B334D2FC0B9B8C0293228F2A4BE36FA91B96054756264697EC28 -MD = CF1369944C54B685113E6372ABFA9710E590DE900E83396847006C9A62FE005CFC66C957DDFA044D32979167FAF4CA26 - -Len = 494 -Msg = 3AFC3DBCB3FD9F4ED17D707AB37EE10590A8F3CE8F49E3C5A99077AA2BAD362F81D715B7132E62922A629FDD5A746C36FA97A7218146B55D559C8330497C -MD = 8FEF0CF4F629992CC970812F3805267E04AFA12482556FB3140C6DF77BF83B253FAE11860FD13D34449B0906ADAB4F01 - -Len = 495 -Msg = E4D811304A25E7AD7773FCAC8F028E60E4BAE3867EA81FD4B99FA53FC7991F34937D7278C146865F5BA10352CBF0FB8ACE858B42B0A7EFBAC0F62C6106F6 -MD = CA0E85257ABD3557F7226EF9980A88354311103C548AE2DFCA4C843D8131336918C82E199EFE5D6B64DCB92905756FFE - -Len = 496 -Msg = C71BD7941F41DF044A2927A8FF55B4B467C33D089F0988AA253D294ADDBDB32530C0D4208B10D9959823F0C0F0734684006DF79F7099870F6BF53211A88D -MD = 5843123A28F0B50C082023AC43B7299C4FE67302532DF4805BE6DEC3B84515B1C6C98F8A4E3D6CA826DA4A11300C3B9B - -Len = 497 -Msg = 061AE36ACF15BF6AAAE8A35A8196E13337FAAA50340FD70FF9F0CD02E53C3724E84C16EAFFFBC09D6EE55F3B344E6E37ACACF3B687B0F44CB06427A23B5400 -MD = 03DD34A822AF56949F4271C22DE2AC9699CB6F8077D97ACB22E5AE6C120990FEB6D9903E7B70032E77745C8D869235E9 - -Len = 498 -Msg = 98B5605377B6A50833F0561B7AED5FEADB5411A7851EBFC8F9156C82714F6A6A07ECF372E4591F91EA3F25AADFD47A2220B55EE2838BA02ED8ECFAF5FA8280 -MD = BB184AFD6E91FD5C96DF94727357CE0298FDC99738049DD6086302EBB32E5DF30DC76F06C4FC5EF68ADDB82D8841D52F - -Len = 499 -Msg = F4CC640571758CB1BB7D83B8D4FDC9BC8AE34EDDE4867D3ED464593F939C646E9725553DFC9346CE8A966225A716FE520EDCCB6F7CC064930E0A8D89DA76E0 -MD = F860597EA6671E13CBB1CBEACF8ECDCF9BCF5E1F83CADE938A8ABA974F7795AABC1E16AAA356434E2FA031C7F62DA103 - -Len = 500 -Msg = 67674ED72E45F150D25F661EBB7F60F21A6AB07EC53EEAE794906E0137959B034F495A1DF0E71D9934C28944C4693AD7BACFA66236157E37746A6D165BCF70 -MD = 88F3A9FB3B02361F1BDB5124BCB8810192FFB1D35C39A126BE12D1A8E13FC9EF3200B0D23CED40A79594849311BD4965 - -Len = 501 -Msg = 19513D84D7B9FC5D5C1C6E57404888C6D201B6D6D054D346EE000933FA7467E0E4A6AF3A065498B4055EA1AFFC9EF805C4D7161C58A9EADD68049B9FCDAC88 -MD = 56D34341164B84DD75325AD177A8B5180325A9F3E2E7B027C139FE95675985C573B565E1D27DC965BD64D09CD091B445 - -Len = 502 -Msg = A8D213B9586C9E81AF32CCB8E70E1E76FCE9EBC2FACF250F4DD0D826912932A3045B0BE6DA7839361FBDD8746B4855D08E99DD94B7196A77538269EC06E370 -MD = 68421EB9B0DEAF380EC7CC595134C0C937623C5B8691D0CD34A6888B6609F1B70B51C4953F6CBC4DD5CD299470385D43 - -Len = 503 -Msg = A1D82877A8B3C98D68FD9937CFDA320688798C2BFBAB2D55C078D853E3052D17F349BCE2F875756B442D26B54C13E119C0FB96C5DEA16A05208A53FCBFF950 -MD = 43B4C589BBCA7EA888F4ACB2AC1E544B556EA1A0313283164B2D197C128CB40824CE703F8D51ADE29041A2F4313F8FB2 - -Len = 504 -Msg = F57C64006D9EA761892E145C99DF1B24640883DA79D9ED5262859DCDA8C3C32E05B03D984F1AB4A230242AB6B78D368DC5AAA1E6D3498D53371E84B0C1D4BA -MD = 81EDF06E9B64F3016B1547535ABA4DB08760FD23E9580163192F663FF62106001006A1393CF20DE4656DBCB029FB6314 - -Len = 505 -Msg = 8473DC5382DE32957E3A15CA3D791C67D20CF9EFBE3E46407DCA5D02635AC86D2E0B22C76D7D080D362E82758914CC0AE2B89BD35F71D84492D9430742789C80 -MD = 750F425464FF49089A53376D2FEB15FC910B9A625031C93970FD057C3C35AB84265E3342A5D24322B3C7B00D38AB4459 - -Len = 506 -Msg = B9E3E2755ED1215381B24557EE14F8CD2687A071AEB3C74F421CFEA3CFF8A6EA0D4BDA2AD4BD8243CBA72B481CBD526E1EFA1D9FD432B987E81265824429BAC0 -MD = A7F83FDA7B6001203F2B2947DB07DE85A534C6A71853E8542ECD171275670A8022F0306EB1585356FA2D780A4BEFED0C - -Len = 507 -Msg = E8332535E9A2052467A10205C87000BFC6A68D73962E69E4E56F10BC79C633C52F4D0074D6077595B660072E10740DFA66BC1320469A3196E021E1327CC03AE0 -MD = 2EDFB78EB656B6FA19689158140F529F45146802230E5AB0AD09D0A79EAE28D3474C093F7005507719DE3B7EF7557E7D - -Len = 508 -Msg = 6B078FB58DCF9A52EB84BE6EEB7CA87DF711160DB96D1FEE6A289A299844DEADC99BA30FFDB77FFBE36B62DA8116D59512DB3813ECAE09459ECDC5599343A8A0 -MD = 38A69653797EE064D22971B65A64FD82BB032281A1F42B6AE56F7A06E991FA40ED8F9BDD6373F5032E7471074E3FA77B - -Len = 509 -Msg = 80EE82DECF5B9FD94A7A8F9866ECD1925715DEF457A43DF01AA1196101A91E1706A31868305AC282FDB8018D19930A07E229BDF92835BF544C585CA957031538 -MD = F1F0EF8CD4756091133A01044C886E8C119CE34E5911B1E2C240559262184BF9B4C7D3E4C53626894EE0771BF57359FA - -Len = 510 -Msg = 15E0FEEB0F7010B047634E909D4646454FA1F06D7DAE63E831191CAD21604FEC81FF4FE69E540169A752C82CAC9C167E15C431F29AAF752B57DE63BEB0319580 -MD = 0AC05A94D18C47D35104C71A96EFA3F69AF3EC7BC9F50A55903C00ADE48BF20296B3F274A6CE2314340F91C5F6ACEE9E - -Len = 511 -Msg = 538989EEFA891A2F2FDB195E6C75A36FFD9010B0D58419CB209EA58178284E38491A0A8549EECC27ED31C02E24DF4321DAE90E6867DA851898867D2993997300 -MD = 215B08C6E91005B1D034E06717DA8EADD6F6D34828F588F4C954AE276CB0972A9425326E20284ADD1744FAFAFF410F73 - -Len = 512 -Msg = E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7 -MD = 14AA679B0C11F9C363F549330261B45E1E90CE31F4A1B0CE5CB9EB81BD6079A3742D8602356C50985D0D3E540FDFDCFB - -Len = 513 -Msg = 559EE28FF19F91DFB5F12A4EA7823F7C6F6AFCFE31FAEFE1DBC810521C59CCAB4CE747B6A37E3E700C4DB3B243D2210D59FA18CCF344BDA10089ECAFBD2046D700 -MD = 26D2261B8119BB172B5DFF6D6CE0EA04768D31376453FB3660E59F2F0B4A74245F0B720FEAE2D54DA4769ADF48F6D072 - -Len = 514 -Msg = 3369763B630EC3D1F8DF47DA9804FB6AEE5831D5B5EED07A3B5FD8DE1B96F721825AAA698164F58CF1F3DAF8E7790947E8698E718CFE1808D571F4855BA312AC00 -MD = 63E57F3AC75CAAC58842F42CFBC1CDF617FB256584BD64F62FECD688B5D4874FAFE993944F706954EC38F27851168952 - -Len = 515 -Msg = 6CB17B2EA081DCB1B2AE30BD5DD5A1A9F845DAEADA0C0F76CDB3E45DD92F1516FEB193AE54E85678C16DDC174C1546985520E54F45CB1E03AF7C27A9A89FD16340 -MD = 40E4D70C329EC8273FE6AC7AD9D9D4E95848F149E98E448A785F74C3178441B0643B12A5D9683DEEB7B55EFCD6AF8301 - -Len = 516 -Msg = 2BFCEBE7E89132B9A809595E5F224712B4DC34164B8AAB486490291353D176C2CDBC967C325887288CCB7BFEBA29A4778B13FE78C97E2707EB5501096B700DE890 -MD = 269880885DB420EF5B30CC6567A5E1E3E8F40399DAC79E400046159FA7BD4A9E163FFAEB4BC3064019EA81DAA2BE1146 - -Len = 517 -Msg = A3E70F2D2137770818805804DDDFAF6C5D758AA50101B255B9731EDCDDCE604F9A336B4ECA8370FF56B96E8C2379E26B94BE3B5D659CA4550AC2CD50F25EFA26E8 -MD = 320DE18A7A0B783080F2BDFE33211824E60E1DF0AC67F685AF4D3C0603873F22FDAEBBE697C1DBF1BE87A47FC49FFCB5 - -Len = 518 -Msg = 2F1F2DAADA4BEF1649F2E6DCF226CC626183FA45FB9F8D561F5E12B96A7888A16D78DD177B0CD8B153E02768AA408A1166630F450394FEBF8B76CC08F6B545B0D4 -MD = 87A12815FA42742CD4CF872D904FDC51871CBD5D4CA954152543F9D64A11E90F1A4B6E90E542F370679809F678E32C5B - -Len = 519 -Msg = 010348951C308EA6CD8B9E0D3D70AC0469AD4B1A64B69873690041177D4F25FAD90BC94A719466079400AB2BFFE4A45AFA49DDAEE6962E3EFC615A4D6EF82C5966 -MD = 9988E97FDA183FAB66EAF0258AC1959244E9E6E0A8FA50B1449FA3DD8E7BEB0DEEE6608683E894721A40E91C891A20DB - -Len = 520 -Msg = 16E8B3D8F988E9BB04DE9C96F2627811C973CE4A5296B4772CA3EEFEB80A652BDF21F50DF79F32DB23F9F73D393B2D57D9A0297F7A2F2E79CFDA39FA393DF1AC00 -MD = E430CE80BCC61D87FDE0A278CFF54D730C03A03377F4AC10B93ED59C5880117ACB20F1705AEFD29BE033D2F202594655 - -Len = 521 -Msg = BE442CCD00200140AB3E88FC0398AD7DE7E4EE191A3261064D53922ED599DCC855AF4FC7C8910FF871046F486FBFA66080A8920EB2AB4AAC2AF2E28B0F7AD3499D00 -MD = F52E6367D8FC30C8B7982D7BEFB03C8A2D4A89414D87BB8EC813033CFD46089BE13BB0711B3D0FB6CB09A9EA5DB56480 - -Len = 522 -Msg = E3A99A6DF6DD46AC6426E66F8F3C0D5E106D2CDEEFD318D2B156D63D83F2ED89C6620A05D95EA0058F34DEB935797E33288626D18083449AA9C8A2A2AAFF573383C0 -MD = D982AB7E76117A8F93F7F6064EA3501F27813E541FBA4E73739549A49B95A73B2C8DDD8EE00D5212110DADA6C22E451B - -Len = 523 -Msg = 2F7AA4AC44632140E9225BA95CB9BB4DA26AD78222BB746D1D98D8B57FFCD00C2D5AC271487FEE2CC27A0D9C62F3B577DF3F8B88239E2BFF2934FCC2A047AEE5B9C0 -MD = 0A5DB78A7D00FD6722873BF2AA7E343FB52B8E1C87E6ED60B3560F550BF50F1B1B612A157C096F04C5B32CFA6048B800 - -Len = 524 -Msg = A1EC099A79B5A35A4223D4C881F0CB11414BC90FD2FFB4667F1DEA99858AFD889D6D1655A19E46FD629C6AB50A7B4C41C5B4E23C6ADE46CD1312720571A268E39B60 -MD = D05D19D60DEBFDCD61C121424384DC6B003BCFD8C2753FB01C32FDA8F6F0F15E752C9E9BFF5253D26214EA5C41B7E3E2 - -Len = 525 -Msg = 8E5973C1A658519BFA2D40C26CC3E73314A14019F7D8A2E66C1DC510547250BFFA12299557902CA95BA718CB6ADF2ED8D290ED7F390FFE44D11AE6E3D9C62400CA60 -MD = F195E56EDA6292704A7530F0C732A3262CEE3E762E90D6BAE5443534CFF7C62CB54333F5785A36985C5AFE2207F452D0 - -Len = 526 -Msg = E00A470BA681EFA0F966BE976F98C42036B34A116154E4B4E10A6CD5D14F001673D95C1E0FEAE1C0A5A9F80F8A1608AC3C9A908EB4CACFF8A5C8BFDF699A4312FD24 -MD = 679905F160A68331E044FF441E27E3498B8A0F80A4F2195836BE78F26ECBF193398B790624C1FEF2C459A5DA20A28614 - -Len = 527 -Msg = D923883110D5D4F4614C59A9189185ECCA7C5B99319022617382CE2C2C5E8699220F0B0CD0A43B474759BDF463DA0C5165D661DC838FC24D7C4341EBE9E190EC5AC6 -MD = D9EA5FF80EEB36AEAA649CA460B4B8CA07F34D5B61516A7A3637B459D501AD6A16B5F1894A17C126BCC14BB7E7081CBF - -Len = 528 -Msg = FC424EEB27C18A11C01F39C555D8B78A805B88DBA1DC2A42ED5E2C0EC737FF68B2456D80EB85E11714FA3F8EABFB906D3C17964CB4F5E76B29C1765DB03D91BE37FC -MD = C9F74AC47F9146F091DE6309357F3C2AF3A9C4474CC005AEFACE3C7A552B6127E34EC82C3AFCAACDD83E695CB86241E4 - -Len = 529 -Msg = CF1D9DA31D5673D04A9514C9C4940489A3A7D5F92F163B653F8325C1E63947E7E2AAFA97F18F61FDEBED5168FB69BEA9749C48DF8529A2D371FBB9B62A52D7CDC19400 -MD = 710A2CCA252EDEFDC79161A326789B40309DD9A3C698798D9649D044D58945F6853FE66CC99C2AA5E5E8D9AF7CD83ACC - -Len = 530 -Msg = DE0C2162926F18E7B7F04C967E4EABD01CCF78F36645A732782C638C8B67974FFB9309E12FDD140CD880360509B2112EB2C03BEC4FD03C2F658FDE72E524C861CFD400 -MD = BD3AB1F63D895EB2A5598CDCE2E47C6321CD3DB7C24A2C44A1158DE59E4E91BE0AFACB3CD785F8FAAEDC7E170EE476F7 - -Len = 531 -Msg = A05C7165CB93CC0F09CC1D9D1118E3CAA9AEC51EBD44D10897D0771FC5302AE55176FDDEA05FB01EE4956BA342ADC7BDD6A50D74505828D87EA49EC62273E32F976CE0 -MD = B5CC32240FD7B38F9BAD88F2E88EA4E3C077763C711B0015F2220CFF9B4E10EFDD550CC7FB18057DCE2D33B754E7C71B - -Len = 532 -Msg = 728AAD14235696C8974370D9238E80BD16A93D050C865DB08FA06C5E4D12EAF1415D59DA4F7CA16981481B10743AFDAC95BC8292CD837DE24692AB5E70488016140B30 -MD = A1EC9DA0A9B7B40EED8E8B4B40B611B16B43FC2C2255A5252434AFE576645A7B155C2CB5CB395B63CBDD1BF35305FD29 - -Len = 533 -Msg = 59E0177EAB8DD3EF68BDDF879D196D651E501F878C364B363BFE1F291546F6A9286161C569C7078C97DB9BA14011807B7FCF671E692CAF601FFB4C76F8E8289A280C70 -MD = 1972A2D3DD95E834AFB9DFFBDB962774C20F085BE376A4AF60663F96BD62C9D27F1CA95A353D4411956409BE4539BE7A - -Len = 534 -Msg = 2557EC19609AC2F7B3F80AAFCAD251AE9406E68638C6F34753BF051A89D19CFE4B13D03B4D4966EDF8565D18EED198E295209C93308CF7E83AA41DE4A1074D19F6D8B8 -MD = 1EE5AB868B48FA1C41553BE4D7EF46313DFB4A79DA24642B7C4319BC54A7E01A4FEB4F79A825EB84C2ABA564E7709846 - -Len = 535 -Msg = 0C6CAE1F4A2400C0E320993AAC01CD5007B32E10ACA1690EFE071ED9CB980DBDBA2B08B90A01026D2B6781E189B05E394AD5950152040A4E10C97BCCAC7B2C1A0A83A0 -MD = C485215C85277ADB77129943700342D0C6E02C7A55974177153596BBF78616E1FB1945636A0090C1512E7F5A605BE2E7 - -Len = 536 -Msg = ABE3472B54E72734BDBA7D9158736464251C4F21B33FBBC92D7FAC9A35C4E3322FF01D2380CBAA4EF8FB07D21A2128B7B9F5B6D9F34E13F39C7FFC2E72E47888599BA5 -MD = C42ECC8863077ABFF689413CE37B61F0436DDB62E56DE4E3333C26D95AEE9E9CBE1D8AAA6744C0DE6BA9CFF0FF01A6BF - -Len = 537 -Msg = 4470C0B4C5821BCF0B9EA25B6F7D90C9C50B063FF923CEF75638D73621B2F4F5B56D92DD720536357B000162DDF401FB5475C06C4C88F80C38EB8FDC8617F661037A3E80 -MD = E6208E2D42155CAFC3FB098D5AA8AD91C5D30081EAAF5C6ED1547029FD93A602117A9CE44D2517A9C14EF0510C31B7AA - -Len = 538 -Msg = D138F1008FDE534C233CA94A79C14FF6B3BAF4B365FD8176A0A58170314BD70AAC14E58561E8A9C47163741365A31801F5F4B6E32AA8E3F4439890CD30AA97FDB0A6CA00 -MD = F9CE13938E765C5D8B5207FB1B502AD7773372C175153FBE4A0B31F83C0C8897B0391F73D46B88C123AD6B759D5AD44B - -Len = 539 -Msg = B4578CF28E7891C9CC1CC79D0F4807DA6A5C37441ABD483B77C65E502A318A86AEA5581020CFE9E9E6A230DD0A529AE90E84086209E16779CD3DC0753713F830532C96A0 -MD = 5625EFAACF1EF38613E6455E5D45C04E9730E3C542DBC2820372BA9338E317342DD71D90F6BBE7D21C6085AADE392CF8 - -Len = 540 -Msg = E33A87CDDC83DF9E9DDA70693E20C31F13F7766F63BB97547B9676D9A6BC999DCC65EF9B486CEC34002A149E840C3D87864C90AA1489CB7FA9C4167E475CBA337E485A30 -MD = FBEAE8774552BFC6D31FECAD41BD1ADDA2A91027383F025681F4049F2AED274AC3B3676D56022F1DC20A4F9F4165284F - -Len = 541 -Msg = A1238AFE1839BBC600C8BA91C17BAE23E1146BBA2D76FDE1A9EF1FB7BDE3D2D9C7A3201E78F2800040ABF26D3606209C4D22FE53370DD03CC8B12ED95272A9A5E1557820 -MD = F56211C325F6686594A2926EFF5FD4AF850EC8C4DC2A8CDAAADAF1931FA17A6BE1D6FA8C6806CD71FC5598694172BCAD - -Len = 542 -Msg = 5489A48EBA7457530F8A2723352515FE794031E11CF5FA57128448F9709FA27CF20E3E379FF7D5724C0A55E3550656787EA45BDF7510F5216388320112AA692A8E33E704 -MD = 404D34A96B076C5011E31EFFBB8FA9EE91B1F279500E092A33E369A446F07033C1BD6B757E268CD59212EDB425CC752B - -Len = 543 -Msg = 2EB78EF630423B07F50CD987F31EF94142905400E5259BCC235A51027B153318352CE56562436588F6E332570F96E873AB189C1DB6264E91FF991401720D25F31FD4343A -MD = 2DAC41DCE6B4712B2A6AC9BD5CE747DF2A8C7CA6C0F2B4274574FC0A520C8BB06DE8CAE7E7AD5F1CDCFAAF16CB2AF3F2 - -Len = 544 -Msg = 36F9F0A65F2CA498D739B944D6EFF3DA5EBBA57E7D9C41598A2B0E4380F3CF4B479EC2348D015FFE6256273511154AFCF3B4B4BF09D6C4744FDD0F62D75079D440706B05 -MD = B15392718CBF4A7C7FAD1C15E7F26C446E79D54251404E646B4DCA3D42142ED5140D0D30BD836C7D513CE6F5E104D42D - -Len = 545 -Msg = 7FBFB37A08D050D584F6D58862373E1627DC81CD0F650A4980A783487FF3D3ECEC71909DACA59F13A47E2F7FEEA949A5D444587B5B9B483B5E5D25776047CD00237C619380 -MD = E64F45803BC91983E92E9128A9406C2CF3374103EB3EF0DF78C4E969621D33452FBE991D92B7683D5FF54DCF6F470CF2 - -Len = 546 -Msg = 3BD3EC7D914EC6461AAC5412025903B049E48584325F81AC822B7091E992A36B3401C7349170F7647D46715F440C5FC40608FC97D01447B65898906F5C4E61088AA7626340 -MD = D1640B442FB1D524050E8CB3BB9A3BABEFF6C48D5DAF96D81F899374BF3E28C54BB194F31B5CC009ED26424F47C3D7AF - -Len = 547 -Msg = 2516B94FED3FA3C8C8892F0EC0AA8F74D9295904810095BF4F88ABEBF93896A8F0256496182B76A9A1D37DB18D154E31D07D9A87C38712549365DCEFD2291A46520856F1A0 -MD = 76BAC4D0D27D69F48ED65BDC7E5B54613E5035D24C435649EE9B3EA4328A23E4F1F361C50726DD00B5C13C2624697C47 - -Len = 548 -Msg = 763AA494184999EBBC09D59178B44E0F24102A737CC43C62FED6B5F6B175531C00859FFA1AF9FF292283078A26A602BE4C43DC3F54C806927C401B905CD0D73E6B1A853B70 -MD = E7FC77FCB477707CDA568079D36D85DB58F82A8A472CC627DD16069DDAD5A6724F5CEB7D987E5BA80C0B13B3FAF8E5E5 - -Len = 549 -Msg = DFD617A8BA7BF6C2FD65A7D531EBF0DFF617926830D0FF1E146A03F103422648C645907F47ACCD66FB6E510CD3F69AE9D43A69EBDF6B32736F5C1394B2FC5D445EB3E72EF8 -MD = 501F5D877E07DAEC684C395504A8B64D54B7F6A77FB7D3C443E76226AF94DFECAEB727E924B6835B5C258CDBFB27FCE5 - -Len = 550 -Msg = D2321825C805E9BC50BB8138ED2102FEBBF4A48D39C468C576B055EBC4008FF8317E544BF78AF36E021A5E1809F5032D84C7769EAC4A59D346B64957D7B715AEDA82089C44 -MD = 68A0EA95C259334DE96A0BAE8CE75121696D0C190B76E8A70253972C00D40DDC3692BCEF994CEAFECDE709E9465A552D - -Len = 551 -Msg = 3D97DE13463FE4FBBCA43FA797A7594614DE028CFCB477033EEA9AA00FC7C7CC085B130639CF3AD64401EC1ADE15C7398BF115F4B33ACC6B9F2F20CCA6DB7F77828CCD633A -MD = 0852A15BD87881421E74B87206B0962FA5B7DCFFBF2B78320DC554C6CF50D4DC6E433637F4919AD22D98285EAE1AB613 - -Len = 552 -Msg = ABC87763CAE1CA98BD8C5B82CABA54AC83286F87E9610128AE4DE68AC95DF5E329C360717BD349F26B872528492CA7C94C2C1E1EF56B74DBB65C2AC351981FDB31D06C77A4 -MD = E03294C68EDF4E8826B699ABDDBEF75467C49CAB56E085E4B83A58B2D9BDFAC9D58B45AACC0EC0CE2D6D79686A41AC13 - -Len = 553 -Msg = 37603DA843EF88DB2515EEF27405CC61410C4E2DA79B6C8606FE93343EFECF6180729350408F382031F9322EAEDDB85899997DFF332D029FA2EEAE0050B2DCDD25198F0F7300 -MD = 705A43E2D7C031244C248F2D134787D6439F78FC701C7C98288C1F1AA1D70C56AF2AC2BBEE15B5D7D0862F049C7951B2 - -Len = 554 -Msg = 3248B698D97B6F9D9EF74359134F24A653A66A989FB1E6DEA74E4D13C1843EBCBE5B8AF1629C181A095E1B3F4C2F1B84552F006ADE5765BF3EBB8C1F6FC2E6D234E14B193AC0 -MD = 2AD4C0277C4E0CDF19E10CC193D65C5D9A37BBFF3DD6C4BF3F294C88CDC1BA9CC10C4002C6AB63D65FFA193012A7CC0B - -Len = 555 -Msg = 2680D25D09089F163BE9F8D1F5A08926B71FE579BD82A31CF3EB1039BDD5244D0D9F14649843AB97547F65B443C7F2337914C8A2395EAE93F0BF1C43D8C01EBFD58C955741C0 -MD = B1A1A935F47E89EC47C10C3A93F9426FEFA1DCB3D83AF54D698DDC303FD33220F37A506502DB77029B08568E164F8991 - -Len = 556 -Msg = EB31208EC2EB7695CA12D5DA41D70D247374D6877A4843E63A8812EF8518C0C2E0E224DDA708B88B9F958219E74CB5A7ADE195FAC3690DEBE41C0928C5DB54F8ECC6FF3248B0 -MD = C9FDD493DD0E2F88D30C07E02C03BCD3D807ADBB3DD60DEEFCE747AC7C5FA0C77B72416C10580CCF90F697CB6FEBF375 - -Len = 557 -Msg = 757324619B2F5A81EF4126DA2B22E556FBBCAEB03D2D71AC77F8F08792DD8576960293EF62ADE524CDA00FAAD2D0FF33C60C001B352C29AFCBF0DD995B5085E3833B55C0C6A0 -MD = 89C859D166E8029AFEA0AEC0532FCA5AD2902FA0A77225AA15F921FF39C407B004A7033E4F5FB127A415B988F3DD6C2F - -Len = 558 -Msg = 3F7727465659B9BC8379A1BCE9EA8636F07135ACFD75AE2AB86D96691B7797C10170E6EFFB1636608C18EF065872BDD8938567BD9E76F5ABEC4052C07221402C93401486C6B0 -MD = EB1F9F5D7ADA02EC9892B80D003753C72454550D87B68837F7864B483C9E7F9E0D093B9A71B826EE70E0B5D3535DB08E - -Len = 559 -Msg = D02655C3BFB9521DA291885C9E448526B25864570ED209E33CE2B65BA737A717022A95CE93A719166B0D8BC9EF7E4AFF721DFB1C1730B70D9ACBA858E4A4A9359152921EC73A -MD = 98AFF14AED4904FE4CA1CD7EB8F8C1EF5D54ACEAAC65E2F08DD546EA6891FEF6FB74151AFBDABCAE321D40ABECEAF6E5 - -Len = 560 -Msg = 94F7CA8E1A54234C6D53CC734BB3D3150C8BA8C5F880EAB8D25FED13793A9701EBE320509286FD8E422E931D99C98DA4DF7E70AE447BAB8CFFD92382D8A77760A259FC4FBD72 -MD = D5539D7AEFF9F74DC75B6E95EADE063BE419B15A4179CFD06D4FD2741E22B2A24395AAA1C0242C995EB5EA891347B4DB - -Len = 561 -Msg = CEFFB8673C1722594E925B0B9E7CFFE54861AFDAD2AE51528A507A25F26E19498EE305566788A05CDE16FD8F6C92F1049047F89CA1D46FEC489C745A12C79633F13C927DAE7380 -MD = E2F24EF6BD17D98029D33B457E264DC613D7F3F1B08746755F3AA940ACA42887D3C0893A4FCFDEA71E35CE7D186B23B1 - -Len = 562 -Msg = 9C46E4954EB8286850B9AF257EDA31286625F8E935137E6F582B2930F2167BA25DA85C2C4949100CB391B214A097615CB8A9E8611A9D9F94D54ABC3865E1F28529C4FDCB16C900 -MD = D1B761175500C386DBBA57EC2CCDFD8E4C977B63A1976CD0E17C12B729E11C9817A9C734B48231EC70655099635EE78A - -Len = 563 -Msg = A56641438A5264B3DEA5635B9C9F308CC1DB42C882ACA9B6839C08618BA6E2D771CED4450698E2AB0C1C489BD69EB1D0A79F90A2B9BCC28230CF151F827A4D6762342869AB4D00 -MD = 5B20094E0B1F7ABDB04CDA6E66A6113E1915FD59E9D9B4CF116E7AC28C4CCCA1CA6C67249D500CDF2AA50E1D0A26AD13 - -Len = 564 -Msg = C371B57FA3CBE85892E163BFA45D95F803686466FAB99259458ECC7FB465D25F2EF17189DAF7643468822AAE499FE5227986908032B68A8AFC299CB70339722652E6B8D7B75090 -MD = 4E7790EB013937DFEBF1E73FF424AEEB19C9BE8D7FB50BDA1E3C476A11735F59D20378D85F571AD16CF11D905DBDA7D7 - -Len = 565 -Msg = 114EAE7CE0CF58F7FB56676C4936BD7B018CEA5C1B19F08AC785CF9CA1F034607BD30B574925B3DB0BCA5CC9C0F3D4909064CE15B637D38691FBA467438B51F0E02D723E45D3C0 -MD = FA54C9963549A7D2DF1DD62BB506281A215C932F8C3E43C9404DD1D01FB420766C9F09F1EF963614F72F23A4987B4E48 - -Len = 566 -Msg = BFD7C3C1B5D442B4AA3DDC298B95FEFF68212C64233AAC2319C630B2E4916911C0CC01399D3FE2F699A70403652B3FCB77601E0BEBB9832B50E33ECAF033E4F7AF9565C1B25874 -MD = D3B741FFFD79F030D2D8505AD9A9B4438FFC14624634222DD8C9141E16DCA7EDB2AAC0E18D37450851677984A0C97277 - -Len = 567 -Msg = 02462D5F711B30301F0A39E0397651EF0FC444A701D8177A1E76BC77ADF9C461036EBDF678DD10C9C9F365457A07F885BE5660B4768D551281DB67EAA5283FB383A8702E637D40 -MD = 2E8106DD4257F48449F83C4469B93F9B03A13A0ED11183CDD670CD384E35CF1B373C73C55593831EA227EF1AFC00A826 - -Len = 568 -Msg = 13BD2811F6ED2B6F04FF3895ACEED7BEF8DCD45EB121791BC194A0F806206BFFC3B9281C2B308B1A729CE008119DD3066E9378ACDCC50A98A82E20738800B6CDDBE5FE9694AD6D -MD = B115A9968B054C934C396D8188BA0C33A23C7189CE88B1DE4A06CD319792D28647EAE1D88FB0B87443E46292A5C645E8 - -Len = 569 -Msg = 1AA7751BB1AB38921AA754162F00E8DA55DD9A5959FB1B316D6F622A6E7D27D6640D4B2D13FB70B30B87AF3D5AD06A1A7746AAD25979AFE91925D28E1B585ABAB56FFD6E41268880 -MD = 2F08B7E4A37A040E5DBC8B46324945CE4656F81E01B706E4C9A15F627B3147354B87D927EAA889B00CAE8BD5195C4734 - -Len = 570 -Msg = CC592E8F00C441202D834185DB8B5B9441E1AD1024573260393AF6D69269B6414D5E5C2BE374C9A9DAC4425693ABA78C729308AB3E7DA6CA43B91A717FF0FDEA4EAA7612F229C780 -MD = D77856A3350BF8F146996C523CAEDA3AB0E1492322C54C3D141E4D2068B34E762FCC6D7349B08244E626A492EB5C772D - -Len = 571 -Msg = 18057027D18CD129DFB5584F87C48D8ECE475A366F33C62736932F55CD9ADE656B6D7F27EC182DC565B5FC6E3E125D4A0C5904A3666CD79F611562755C66D87EE6038B10C1E44F80 -MD = 0850CA93EEF581D5A7A575A6A7C1DE276E6B99B11DE8D86E191F31120C7B37F09846114B46705D1C5D4368040B76A2EB - -Len = 572 -Msg = B3C5D348DA8B5AA4932E196713FD43A200B5095207CCEBF0F2F347A1C565C1F709231D8D7B3AE4E11EA4A71BF10C75FBF075D5C88E846D24C607D93A4992111D7AB637ACE577A700 -MD = FF296C36CA0B19BD2692DCD9BB7F0AF10CE27E2222B933F2E4C7C88EB8071F239D08F47AFB6BBF5609B7F5F17EAA7F5D - -Len = 573 -Msg = 77E244AAE547DA970AC2F73B0AFF4D870EDCCA2E0EE14B1F6F2A8702E4B482162B12F67BFCE1F087A7F240C9D0CC0706991E63800822B2F948BA553503AF630F4C182A1FDE676F60 -MD = EEF99BCD93186A965336AE2F498123DBF96B926D56200F9C37EBB7637F6E872FE0E469315E3F6F7B3C13A1FAA9C16FAA - -Len = 574 -Msg = D34964352D3F10A58861BCFD9E492E30FB3FBCBD1090532A83590EC4B56A52B2E9AFA17E9C2B803143AE63915754D4887CF98C5B8BB8A48AC5535EF72B75CDA7612931E71D9E9E6C -MD = 4316B7660F7C16B2ABAA6D48A8979B4347654131B18D78980248DAFA534ECE7B5A5F039B3E6D5841F198E37B21252EFB - -Len = 575 -Msg = 5610326DF88C0154A99B962BDAFDC56A0206232EB7C2B30C40469D8011AF8F176AEC5A416A992C71A9F94E03E4F7BA079E4AF5174B7B0CE06369156D45F9385384D07CA55D837D10 -MD = 6B3388524805AD382BCF1532F67F305A108BBF98F66A55F6B2CE6DFD7BB7CAF6A8FB32702A0CBF24C58A34FB9B920CA1 - -Len = 576 -Msg = 1EED9CBA179A009EC2EC5508773DD305477CA117E6D569E66B5F64C6BC64801CE25A8424CE4A26D575B8A6FB10EAD3FD1992EDDDEEC2EBE7150DC98F63ADC3237EF57B91397AA8A7 -MD = C8FAEF757E6D7B0AF46DA1E57C71ABB4AAF7CC91C5CDC33BA8A738172B95DE087EC4C92692CB40EE3787BCE3206FB7EA - -Len = 577 -Msg = E2A6C7C31424B9B1E391EC72D45A0758A41B7794E6161FE1B4EEEB2E9F345B45DB8B64097D0D2C09E3C3C5380822E62426DC169E94808B6E6802D27C067CF3A03BD1B2AD2B89483300 -MD = E30924170EB6E2FC6EB21E013DDD95F95195B7F1FD2EEF756B3966F4E13A0621D8CD9384B3342B10A9FC488AB206A792 - -Len = 578 -Msg = BFC9C513134AA3E5813C125CCF279F33FB95A36C540274ECAC1EEB43189B2A1299F6F76F4F381E3D33576AA4BDDED13148314779C5A84AFC52CBBB8B42346466D3ED126F0D4C466400 -MD = 09BF4436F327D8BDB2CB9B9AB0B5D6B55E43FED94335702F68AB57871E1D42A40B200E3DD92AD9121A3AEDFEBB636AB3 - -Len = 579 -Msg = 2A8E0C4A157E09AC3A83F7131C30599B3C8C8CB8D1FCABC4E9B606E265275C0680843CFDF1DF70AC5BAFD472F6A3AAEA93E2E51DDE78192D1D5313A79754926115AFA58B68D39DECA0 -MD = A8702CAF006A31A7395D23FC946655860E2DA230619B997CDE6C0DEB142D5AF242C5DD35D8EF891446607B44CB9A783A - -Len = 580 -Msg = 7F08ADFA726E42B95752387BD6248128D4E52706344AC7290314D9814356A121CB1EC7D7B018F0DB15457FBEEDEA5E1A1CCF627B164DF5A341B6E9AB23D6C79BFD9359578669B9C000 -MD = 9E3ABD699055B19B31EA3DCFB4DB504BB3820BA264E1A71E63FE6FCA8B081B4F66A5D590B4B5540F0F92DCCFBF31313D - -Len = 581 -Msg = D0885BFD63E133FFDBDDFBA5DDABE302CCB292AD79C6CF2C848485446178472C123001A6C06245B0E7725B6C278D556E9444A6624EE3A612C27A194C76CF8197B275EFDD3042FC8600 -MD = EAB4A10BE1F9537AD1C9D7E5346AFE1AF5302BB7A152A432529D224D4C63E395C36AA379E76E82D2F21B737E3B60D94C - -Len = 582 -Msg = DF98AAD16AB9EFA536176798654E6394668F576C9D6DEF29B6085FA29C9878966EFBE223E5F56D5BB69E8B27AC9B23F4D89A856EBA58EC5D20C7EAE6E58102BDD58C57EF843EB5D798 -MD = 86BE84021BF766F01558FFC9C437A429A422C18BA2116AECA315E29195BBF42D7D5FB0AB1F40030F64B9012ADFABBF22 - -Len = 583 -Msg = 9881E0C17927FB375634460158644EA6549E3F866FEB6923A99E3548108AA4E2420CB8C280991BAF535E28047EAE07832D543278459E21156F90B913C1FF926316CC813DF101007912 -MD = B3F9C444B0DDF359F01B50D0EF508E2551A361E8922A30BF73CB67628DAC29501D4F7C7F3A331F73BA522412FABE8981 - -Len = 584 -Msg = BA5B67B5EC3A3FFAE2C19DD8176A2EF75C0CD903725D45C9CB7009A900C0B0CA7A2967A95AE68269A6DBF8466C7B6844A1D608AC661F7EFF00538E323DB5F2C644B78B2D48DE1A08AA -MD = F4F21BB74593AA107DC195FF52A3F90816CCEAE8D3EB9D4577B28B49C339837A52700A62EB421E8CA1C87F456310F62C - -Len = 585 -Msg = F116DE7433D03DC10339E3661D06EBC8AD264DBACD05614B09119970AE3A85FA80D8DBB23403FE2874A967F66732C1711C455E6F299111F5B0FA378519D7F25CF945BCE7B8668203FB80 -MD = 630C1C1CA1DAF42A01822CF5209074F1508E0045DE89D6B8C4A35F8DABBCCD48D924F14DFC5DF39DA41279DF4A4E6BCA - -Len = 586 -Msg = CF33DD0DD4CDDB006109E02BA6CC6ACE8EA839DE2FC68A3357C1758EA1E2775E05019F12F2CAC5C2EF594D4F1DC26DE2F9543FEBA34E9F0475508EF848D6BEB4C26C2417BF1CC1419300 -MD = C8186D5853198DC57F7A35A1BED9D848BD2AF786AA158C5B392BEECFFBED18E42B411FD2AFB016836AD153E0CC2B18BD - -Len = 587 -Msg = E32A1614AB569B1E5A897DECCB8D55CAF82CDAE61D0EDF09BF1AF52163F1E63668C4AB8E8A0CAE4C82E0E187BF5260CB9D2112211EA7C12AD08758EB8AEAF3258BFA07081D3038ADB760 -MD = A9567B1E72A7BF2835A1534BFB4AFEEA31F1507A3E46E403269C9B157BA7D20894A0A3EEE9A5580BCD006336CA2DD2C8 - -Len = 588 -Msg = 870615E5FA42425D15D4DDB1920D99BA17844FCC6741BFDB1238B907B1071E241A1FE9D6122C40B640056786D516DB3C5495793EC6BB3309BB66D53D623FF4A28620E6613BD39B51EEA0 -MD = D505E47ABE399DDA8BE778F204409D1AE481CC88A82D442ED7C409F5440C06E7289A736B59C04B0FD4305489D243936A - -Len = 589 -Msg = 9B1FEFB7B55DE30D70525169271683A21320D0E01C38CD630A79F36B15D05CE96B622C586F48F4251C948546760EA88D470F5BCEA84CEDADE74A0FA68A001F68C6BB1EEF8BDB6630A400 -MD = 8D4B1261967252E8A8807E7CD2D9BB6DB383EF43FEDF2B483BE7A018A7B9EF2E4EC64E3AA04E5D0951C85EB8C98213D0 - -Len = 590 -Msg = 6BD0B9A20EE65C9C4E2B5ED2662D01876E76FD98283317C7941A6107D40F06EC88F6A3B235E073F7963F9D3DFD178226C6AE1C67FE00C2266FD608697EDADF07AB4F6C0303E82FBEA000 -MD = 39E90067077D1CC91D29127BA29516F0BF2AD79321CE348864C910EBC43886F0EB54DBB39BCE2DF8EDFC1A1885B569DF - -Len = 591 -Msg = 43DDEFA4D3868E5C6671FF04BE2969549E9728D876A800879D84363EA77121371DCE33832E6092945E44CD5D8EB33ECE8F459342BD47A0A1D0BF165028119EECF77C154194E9E41106EA -MD = 09E4AA3AB8D283615053F52656C2DAB553CD5991E564B1E23885B44FEF878F6939DE4459A5074B6A19E0F5CC3F104ECD - -Len = 592 -Msg = 0EFA26AC5673167DCACAB860932ED612F65FF49B80FA9AE65465E5542CB62075DF1C5AE54FBA4DB807BE25B070033EFA223BDD5B1D3C94C6E1909C02B620D4B1B3A6C9FED24D70749604 -MD = 83544511A07F6058D9FE5AAD7EA837A9E180D8BBB884C5650B798942983A605A514C21D8D63DB0E25AAE51D26F410BC5 - -Len = 593 -Msg = 89ED3A52A979EEC4BBD0191089043B7DD1475DB503E1B9CBBED58C46D81C9493F15A9832411C0B5455696B1142945CA022B4845299ED17B3EB276DB83DA3953433BEB873DFC1152DC59A00 -MD = 27DF5F2FC9D06105EEE2149DA6472DD6A0A60DFEE09C14A352DC202A2BD875A78BA30673071AE4619E91A726EC4BF0C7 - -Len = 594 -Msg = D6D1EF350BCF8029CC20400775A57090045D7D9FE4D51C52B4EFADE7E69FD952CDDB66FCEA59DDA899A6578B0E4C115305895B909241D4D1ABF2A4DCD97CAAE0E22563B7C6A61009C8F040 -MD = B37E1FCC623ED4ED4C29E9F2D42C0080B69AAE6487263B427278E64582ADF7A8AB24405ADF4E2DE589F0A7F62EF02EE9 - -Len = 595 -Msg = F535C15710C29512FEA5E1388C742D3D181C5F52EC4FB9EABCE691125317D7FC5C4098435C0FE6BC44323B8607A7CF9EE56DAEB7048939940DA2DA4AFC1CE8652AFF60C53F72198E2902E0 -MD = A304CF63B0B94F8782A58AA7F52D07082E71902C6BF0D0F5F11F6B012F6A116440E7F6D69FE4843C17DB1BCFFB9B8FC2 - -Len = 596 -Msg = 4606C6B2B2E9EB8AEF7D956640FAC17D6A2FCBC407B84D4B4C7D852B2121F08CED0AA8544EB2DBDC0AFABEA2CA0514C744637A745089E3B534EDB8E5D9E9EE7DEC904CCF7DF45365F8E020 -MD = 6EEB17E7F83BA85DB68F706C44D4BF7635071086E407E087BCBD5190C7958DE7CA001FDB495563999BC96A772E53FA53 - -Len = 597 -Msg = D7AA2C9A3EF05452042FF75509A59521200DC3A76B77F067AAFFE475D408E055768ED33FF1B95572942BE792868D390700E82D2217DA9EDCD561254325EC98B3F85A24063F25F51E149110 -MD = 67FC29A3C8C64435D39CC63B8B499984EC4467EC28166F56A632CC840E72544D9846A3F98FA400E6282D1FB4531F0788 - -Len = 598 -Msg = 6D812DBC3315206E516E52D4E810CB0D274DDB5586F192066645B6B7E7022F36787CFD6E98E553FCF15BF3F1C8C07856C4D9D44D9715ACD92DD02CD68B6C95A5322F8938F2654FEC102344 -MD = 2AE343D87E3242C74C41AD2DE23FC000AF55A636FA1AF88AEB868B9F6E907089895C505C6D5C09645F6BE8D086968BF7 - -Len = 599 -Msg = B22FD723C48AE0A1D2B6440775FE49A44720D30E36F1D8D07CB5C49A79BF432D62B95F1A13C6D51D35B6B8AF12517CCFBAFE0691567BC337338312AD24066DB73731CBE66F49C76ACA085E -MD = E89CA26098AD84F22F15CE5BF9DA670FD90643A1B905B681DE5D5CCC163BEFD4C195D2B3425F822D59EFFA0B2D3E0C1C - -Len = 600 -Msg = BBFD933D1FD7BF594AC7F435277DC17D8D5A5B8E4D13D96D2F64E771ABBD51A5A8AEA741BECCBDDB177BCEA05243EBD003CFDEAE877CCA4DA94605B67691919D8B033F77D384CA01593C1B -MD = 8ECD8459FB904D2EDDB14207659C2BF96EFBD3E4C8988736EC75088F1CC8115D3FFFC8CEDF1C01721469D27968A6856B - -Len = 601 -Msg = 0C86E4810BA7A10163172A8D718D80CF20F519C4191E8080B9FF3A6A21ECB913A14A05F04576BB95E38676296D708D74CD30CFF86D103EE2A79FCD6E39A09912D0CF7671580E0644DC74C600 -MD = A48652009A0F6E4E13E093D3C692602866A8855B3C25DBD08DC4F504106A37958641E8904F234E063699A0793D91525A - -Len = 602 -Msg = 869BEAC3E5B5A3FE99018564592A004B396DAC8DE9F47AC01B5870FEAC4C0371D7EA84D4AB8E199959B423FE069DE86273EC4A73DC3D28BA66FAF7E80A26AC6B3525E530C03A2E2E30992980 -MD = 5F1BE6BAE2EEF236A3886D0DB42EFC3A463E0FAC321DDC63101D4B0B42A6A62756659725A7D0DB99473E5D900CDCBD9F - -Len = 603 -Msg = CB2A977A3760DF60DDA2EC3A24865490299D27165F4497518B1F3471C1BD73E1FAFD2CE0DEF129B02BF6EC9C08D903C3A544F695FBDE5945C23975B0AC0CDD513810CAC6A998251BCB3E6DE0 -MD = BF9C2C1CBEDAC40ECCD5E36B68E38744B3E59BE8FA7C3C7430DEEB93AAD16308331871F2BE8BD2E12CA7555E9777194E - -Len = 604 -Msg = 389B167E0A47A88EFA81870A0E8D8D86365B57C7CC3D77E0120685FAB3DB28319348101E1453B56F671D7E92D50B7941AEB88E493A1E1D9D06894DB8CE83C6F57C218A9652A5302BFFBE32A0 -MD = E05BA932AC3D89EBC86834791302C3310D8870C8B0721CDCC2ECA0088BCD31B0B0AB646B121ECC09C8716BB82EFA3A85 - -Len = 605 -Msg = E5E15235A5E5787BA52BA4BF335C297D36A96B999F230942B6A8FF1DC4A64F9917C6D564E27EA229938BEA691F70F334011B8C03B778E616FBE1C220B1564F3519144FF35C73AE1E98C4DA28 -MD = CC65081633ACE4C3E8DC96F74C96C83DFC3DEC471E422CEFC9B1FB2C402126E8249A93FFE38459C62E6DC76F9496070C - -Len = 606 -Msg = 1A0F8F926C0C9D4E4CC4E1E5F130DE44EDB8544421AD3BFD80E28D092E2C878EBDDFC62F484BC30B3C93FABCC924A5B9D3A7FA227609D921BE26ECB46D112CBE5C5F91B22F54CAD85EBC2578 -MD = CCE9CC529B682FD7237557D7CC6811F99173F73D8F06AC57C7294C69FD5A3D78B9B2FC423C3364D9923516310FA8FD3B - -Len = 607 -Msg = 6299776218D85291AD65FC0E7782D3D03A6FB17BBD72F3C93A210BC49956E3AFD3BD048B49681300DB7676337271DFB46C22AD929DA6365442ED785671FCF2BD549832614270DE119B086EC0 -MD = 339ADE051BF85D350282F90E558E267B6CD00A324C097C2A5C29F779F5454BE9BAAD1841CEFE0D1618ADBD81685C03F3 - -Len = 608 -Msg = 90078999FD3C35B8AFBF4066CBDE335891365F0FC75C1286CDD88FA51FAB94F9B8DEF7C9AC582A5DBCD95817AFB7D1B48F63704E19C2BAA4DF347F48D4A6D603013C23F1E9611D595EBAC37C -MD = BE60246E27959DC8065C6D4DCAC93EB7F7146B49C759BF1DD5EBA46A3ECF074784A9DF18DEAB7A19AF7F6290CDACA87B - -Len = 609 -Msg = 32B722648C5D5A9558B328581F00BE0473ACCB994A92533904E7691A83C179D22A027CA97AE8FD09DD5503A307D23F03DD9979AEA237ADC9D76ACBADBB1C482D5FB3023AA194ACC84D4428C700 -MD = A6A08420B5BF049E193A0161DEF2CBCED0FAD004835687B99C6691014221091194E68BB816B8DBD15828CFF00A5E294A - -Len = 610 -Msg = 3C33B1AF42292D4BB3E86744DB23DFA39914FB81885A564A52ABCA01215D552F6CA3BF56F201086232DC24EDD0B7683EB0F59E9FA96AB1578F8AF44AF903AD496E11B4766CEF3460979CD83140 -MD = 2FC112DF6B2D72D3474C7067F767DE3870C57B792B197C161E01FBBF756C44CC8F4FB1C21A84EBFD24A61CFCA3CCC326 - -Len = 611 -Msg = 1A3051F42AB45179AD429B1616BFC686CBD15FF02D200FDAFB1F89A38CCFEB6EBF00B30179CF0BEF176A2D4CA63CAC0FDDE1A50BE122F408BACE72EEC6320F98AF6ACA4AFC79185B518FD8ECC0 -MD = EDC92ED5F22EAF3242786C45FC4547A4907412DC201922B6644062E2007D09C0D402226B7579CEB186F4931953D375E3 - -Len = 612 -Msg = CD041C63D5330432294D0926228B1EAF6D234BCA839CF4C9EC8C823415FC34450214AFD2E4975045E6E933E8BF9EAF52A998EA879A06954488E95D0A3359F601EA5401201DB5FD8B3B01EB86B0 -MD = 6C450AAA6987E8DDC0799F1AF92E8C43E605DB4AB683D3B41537765E17C63DFB210058818D79751BC0A2B3EB55EF1F07 - -Len = 613 -Msg = B88574119E0E2765562879FE7171DFAA8FDD492AE7F4D9DF4B858AFEFD95C55BBA259267878FCA3BDFA6B1BB23189BFD81207CCBC50482E830704FA2F3EF5362A0DDC6DACA3A74413E78F97868 -MD = 4E6B28730C89189226324CAE42211104DF23FF0CC04E8A765986FF3D8A6CA9B1120BBD660381FDE49A1579C725D1B359 - -Len = 614 -Msg = C2DC8467DDE39EE6896D915A7B4ED9F3D389FDE2D19D176857891AFE62E7FC6C3070AEAC3CFBB07BF32EA8978B689CA890A083644E54C4AB950DE65AC6270E2C8CACB766C8C494818BBEB09068 -MD = FDBCD47A7D9E8812ED9F1D83446E191228EE56EFA31A2217316ADE464FC5C23C75FD9CC524966221E4A8BF51DD6A93A9 - -Len = 615 -Msg = 03DC684CAF8ADF39F716F19E4E899E8CFD8CE1F75D01FE529A85A2B9736A00C7AE6D235E48C7CFF83B08A274E8A1F71142781A40132429808096A1E442EE6A3F76DFD5EDCE623DBAE00F7AC3F6 -MD = 78ADEC37ADCF2585D40A4B9B1BDFC67B0943D44D50541EE1B1C20A8E29F704713281629ACFDA9D52EC52229B31E2F5E3 - -Len = 616 -Msg = 64105ECA863515C20E7CFBAA0A0B8809046164F374D691CDBD6508AAABC1819F9AC84B52BAFC1B0FE7CDDBC554B608C01C8904C669D8DB316A0953A4C68ECE324EC5A49FFDB59A1BD6A292AA0E -MD = 9235BA18C55E2CBCA0FB1DA3BC8D0DFD848CA0E51DDC1020D4BECC0F138DA1087929FEC93AF16F5FB29C4A777DD91548 - -Len = 617 -Msg = 9A53A66C40C574D09FB5CC46D7BBBAF18D392FAD22FDA037E45AC895FE32A1B35691AB42E697E64F27239BCD0B3B9929FC4A2C8D730AC3DF39AEB066282E1F7B73984F0BBF2BE4EC40AE8B194280 -MD = CABD3E787E8F2D81B38E6C67180608AFDD32E929E60F2C10166543B769221DC9EB5B61515D57F40D1B6130AC767FC2DB - -Len = 618 -Msg = 2ACF3BA8177AF3BF39D6C75B4ADBFA997FD201D5C489260AFFFA0ABB9E4908417DE5B29B005AA277A82F8BC6153AB7AF6A9B418357F2DE6D9AC4D77713695706C99425DFD70586D29AF60863F0C0 -MD = 6E8FB2868763DA854BFA11D996F5BD9071446A8A42353B8BCD6D39EE386722E6872D7D28FEE6AD2F303E681C7443586F - -Len = 619 -Msg = 5C38BA82BFF584A77A0DA5635C2FC3B3E82E43A2BE5C338215735A06CB679228A5AE18853909E64561DD2F5600E5AC9C5456DBC9F6CD7B3EFC2F925BF4412B3B82148C2F3091B259283BEC309F80 -MD = 5A3EB1D5C38EA6CCB9E1AB0641D19347DCAE40C2D5501D54BB07D017D50809FAFE4DCF90C985FB8109E9192DF95845F0 - -Len = 620 -Msg = 9E75EB68CA9AC9FB4F4AEEC3805E3C4C15DA0DEFDC9678F5062509BE84B1BC0345E25E99C1D2B7E2399FEEFC39E84C3042FBC7CE27D702547D6648D560FAC8268114A96E079BF4721D53F92E16B0 -MD = 90D8CF1F56E91497EBB3A82590A2416006B218415DD701EC02DD712E7F85A2AD88D5929B528F568D90A9019D22E77E91 - -Len = 621 -Msg = D4565A61C040688B23AE1AD10FE5934D776ABEC6E718E91EFBABF51F2DF9AA572A5427048D98D1E7813AC854FB348081B0332052127FDCEA10D3F40FC924C07A4B41EA70342BCFA4CB79EC8B8020 -MD = 3E1592E147EC156C383DECF9DBFF4495313EFB74D2746C21300DA8E723A20890F416ED465B7A07A23AD5155DD159F5F7 - -Len = 622 -Msg = 83AC1F77EC3B31443B117F2936E1FBB7F5D635CD84E0178B16302D66D80923214FFBE32AD36CDE4E2B62CB7EA91DCA5F0DD9AAD99B50B984F00F5CF2C617BEF6BAD0605C2DE03641AB6AD3CACDEC -MD = 5C449AAA286F1268CC102097610FA386F797B2270800495EEDBB1BBE29677602E31AF414EAB9D6F0FF25AD6EFCDE2527 - -Len = 623 -Msg = D5F52D229676FA418C0F976AE854592C7AAB09267816B5589E10C60C6DB702D2C0590983AC0FCB70759C4A97D61F50B4F992666C4B4935B6409EB37BD4890B72BDFC46B3738DA166510F7F01C92A -MD = 8D2812B867A029C5441EC0A5E3B25DC785882B057E5157A3BDB3BF0EAB86BE02544BB8662FA833849528701CD54A061D - -Len = 624 -Msg = D4654BE288B9F3B711C2D02015978A8CC57471D5680A092AA534F7372C71CEAAB725A383C4FCF4D8DEAA57FCA3CE056F312961ECCF9B86F14981BA5BED6AB5B4498E1F6C82C6CAE6FC14845B3C8A -MD = 08739DD866C6216ADCA26D6121E5D81FDB1F7BCD4802C2B811D73C282277D4014B4936E5589F62279BB33075705795F8 - -Len = 625 -Msg = 588A1024CC2DF536C93ECB5EAAF9CAA4BBFAD79EEAFFB5B05468658C46F14BEFB47A2D97F29E462C71FBB64686F2E613AA04D6ABF053284D4BCA9CF6B57F0C8DD0B718423E24CA9347FE4F5CE41380 -MD = B46C3EBCC8CE7BB760F90FEA65D4AF180F9C4A36C92983150DB379E146A21E6C2871D8B0E5C9E135A374BC31492F3390 - -Len = 626 -Msg = A539AAF94509CFBC8459CE5A4E95CA3D6875B19AC3B119FBB08DCBE553BC83457308D3F413D4362A6E74C35492B1DFFA5D7185BFCA34E85B4B3EA30EC0108A3CA82E55305EF5CD71BEED761D1F5540 -MD = E11CE39C555E2272BA7587BCD19036F303EA1BC4E645A2F2B21C1F27D80D6CDE15FA9DFBAF4F8D4976AF5731ECD4989B - -Len = 627 -Msg = DD82F62080CB62E34FF4081376030A1306AE226BA181413E0CCE7BD1CBCF83EB09665F4F74176FEED3FA9619D391947F5169330409C3B06904E01E7B3502C88693605EDA211BF315D0106FA3968E00 -MD = 4B69D927B4F2A8960E68269295586AD2980B7A9F5EBA94064F58FF669DD230C43624AA865E9EF29A0C5500D6359ECD44 - -Len = 628 -Msg = 7DD4B776E7A5CEF671F43948269DDB104F0A5CC315F08FEEB0749D79F626F4E55F4213EC30ACC38B9F78E44716D858A785BD938E8FCF57F8FF2B5BA15407A79A69A83BD5DA69B379C64EA72CB9D5A0 -MD = 91A1C393A00FD52543ADC55A53A49B607CAE80C4920FF3011C88A768BEB9FA88732D4AE4C8B00BC4D6EED50DD7BF011F - -Len = 629 -Msg = 9AE70DC8965C2FCB43D79F2A2EEAD4C00A8C19D565EF8B125664633F3FA786F3BFA7DE1372FE84764314A480B8E04A71BB00A701795B1C7A96B7F22A3ED7E86DF8487979B6525A66A10C4C9B63AC50 -MD = 253877DCCEF9E0177703ABD3CBE18FAEE5C7B605CC859DE2794682D650C84F48674C047D9454A10723FC161BAA339554 - -Len = 630 -Msg = B21B8C40CF1390EA0392F145E9C7C4FB58B2CD2D8C812D0A2839BA2128A1088068B5F17B38324AEBCA2FF9AF59E8AF325948830FD73D1D8EC98AFDEF4D50CF95F712A0874976DA3C0F77202253356C -MD = 1672005F5D0E9002F9612A41489B710AAB2F9D4985B9CF1D901FEEC4C1AC6D00443166E324BAB47E29A9AB9E1AFE022F - -Len = 631 -Msg = D688AB44EB8723AA2B0F45736F3DF3B5C6D6B5C316E6C182FA8A45AB2D469D68F6C82C81C999B1D5BBFF731FBB65113FD70327182307C07FBB74F97BE8196C183B0C860881FE75DBD9B3166BBFFC24 -MD = 8BB7D0EB184F3920C74615582868DFD4470FBD50689058445ACC8816CFCDB759D67899BB0C59C5182AAA5AABB3F2D23E - -Len = 632 -Msg = 12D9394888305AC96E65F2BF0E1B18C29C90FE9D714DD59F651F52B88B3008C588435548066EA2FC4C101118C91F32556224A540DE6EFDDBCA296EF1FB00341F5B01FECFC146BDB251B3BDAD556CD2 -MD = D2A2E858A5DD85D62E6F51AF7E42352AC0D7A68A835431BCCA47557E3B5C3373F40D3BAF85AE416012C7C982B2325790 - -Len = 633 -Msg = 093FC95304175C45118A6EF8EAF0A58A9D45C6326D6259398D8C6C88567AC9B12C6CDB0B80974D3C104C389E3D721F528ED51B7D8B110FDD955EDF4E13B4883142BB23F7AFB99E5B899D92D5563A6480 -MD = A18192C7AA40B5F8380F5A3A95213AA53E380CE33A5E139AB26B0C5386A64BA3F02D35F69E61EB5717B183FE0EB2BD79 - -Len = 634 -Msg = 8AD86DCD3D4EEE9F1B28800E8E6E66B8FA0594C285B67765EBB4035F96AC4155A5F21A61DF4D25441B3265A411ABE9BB5D4ED7FE4D6037D49F2406560AF5E46483C8E1694ABE8A4CDCADED44FD8ED740 -MD = 86D201F821AFC19989AC0B429FD0417B10399EA1073B41317DE1431F9006A7F827B863A97BD1FDAF5AE908A34394D098 - -Len = 635 -Msg = F72D42FD9BE95CF4E1580CFC269747F172F3C17ECC0545DFDBA77C2E5C9DEFB98838C539DAFCD912F39D1D7C126C93BDB2F08293603533DF36430AD72EF419581B011B64224933D0A8BD9DA2A4AE9E00 -MD = 6C4E8C36885D70FAA51F800F5A466AB612ED051556CA8FA6C78F85939F6B9BDFC17E763B255F60FE19DCDC949C20C09B - -Len = 636 -Msg = 4FAD29DB36DD7FD0D7556D77D422DC0AD547CD156321A0C0A988662F3A9919C408ACF3049CDFC2F87309D553CC7B84F3B5ED89DCC6F1F707E0009C6D7E93B7F8089CD57AD9C2A4CEE97FAD6425C93420 -MD = 289E7418A2D082D7C2298A36BD535AADC9311D7AFB99B7EC8B54232792FF129783A452B364E30EBF365E41946DD541F0 - -Len = 637 -Msg = FA18047AF5A407B03BDE3FD0554363C2B95E36122B83FAFAF0E9EE933E6B8FC30344E34B7224F4A13A3FB3D1E15B4EFEA5AC8D8BC8DC3F59BDE305E7F337B77830674EB0DFE041F2B6F18F01CD59DC38 -MD = 875A0603179D52C8F028D3D6CABA95A57DA371E054FB4A62C946ECEB4DC83C511C29ED948D312004FB0E8FB545537CF1 - -Len = 638 -Msg = 37E3823B27C5A47D59F9A801CB773C72DC1B6C04621AAC60D7ACE9590D0A202B2308B07BF1AC28E6E015B873C95B0143CF6B83805D6BC9EE186E8A75404642D15901334E09D731C02BCA748A33C965FC -MD = ACEBE6247B08968E5769C6877CC6551FC2432CF0B9457F45A7B9B5F469B9E9BD4A2B6525B073051192A500A4EA821DFE - -Len = 639 -Msg = 99A25B5CDE96655B4F29BDE8A691DC8D0BF9AAAEBED84B55E8BB044CEAA98FFD72C6F0B98AC4222FEAB773F9175796047FAD484F18F33A72AEE87276957F3BCF5ABC256DE0E14157C4903174823657C2 -MD = CF76E6968D9172B152C9560BE67FEFE5C060BFBF11D3696CFEFFB2A3ACC2506272F1E0A3342B4A584AE3B247382DC018 - -Len = 640 -Msg = 871A0D7A5F36C3DA1DFCE57ACD8AB8487C274FAD336BC137EBD6FF4658B547C1DCFAB65F037AA58F35EF16AFF4ABE77BA61F65826F7BE681B5B6D5A1EA8085E2AE9CD5CF0991878A311B549A6D6AF230 -MD = 2990D7EA068A0307047B151D5DD6B1B2358A9EC8AD9B6B826CF1BEF399D488BD68D77DF8BE99F7DF7AF14AE0CE636379 - -Len = 641 -Msg = EE9AC0C239D9644C82660B488FA2598C3B288A01C84608EE555AC027C01FDBB614E18D5C1B3036E88115B5BD42B465526B92CB94776634377290333571F8D28518EA26F37DF8DE37ABE87DA2E55BD2DF80 -MD = 781022DE883657FB407FF1288D46FFC12AE63006E0247DA9F7786B5C624EA1A7F9B37A69EE1ED6141413B94FCE57B550 - -Len = 642 -Msg = 10D86540DCDEEF9B16EF516608D711500ED8F8E3F4122224993B3EFF37053DA602A9378889058954EF5B0BC3BF55DA2C88C881C583FEDAC724E1259E62CFC9EA973CE0F3FD2F9B92A19773A5312D493F00 -MD = 36E36CA2295A4FC402374FD45E5C6F6FAC09AAE5A628E8BAF269EF3485071201A4D927E02EBA3FCF34907DC9610C637B - -Len = 643 -Msg = ED84FA0338D35196086E1116FA0BC0B31790D4AECCAB9AB51B42AB8AF76A6E97B284ED9D0321E891AA6E42C906325C4CD3379188F4400DB8BB2FD7526896B3DDFC733E19AD2C8BD0269872DF02D8000A40 -MD = 899FFEFBBBA668883E6F68954673E4F312ACD40A05596EE2FBACE3B923A5A8011A76B0341A4ED7F0E2272ECC227D196B - -Len = 644 -Msg = 47A28CBEB8ECC3BE04B9112668271CC7A16C1015118CA72257EA0189D994914452FE7C5C66D83E10607DE3F144B04F9DF70003087237B55320AD925BC02BE3CD4BE9E9664A7C601DA89C1311565E03F430 -MD = 9F23E1DAF0A8AB3CC97BEDE0B496056CECC112927FA6BA07BA391238DF86C46C07976017934433565E07AFF83F05C58D - -Len = 645 -Msg = 4EF91000C81FCECDD34020116B25E51C00871C104BDE349969BDF56A5BA844B4B78D7CD167CACC46693E0EBE9F72FF4ED3F3B4F03D2CBD26E9C0FB2BC422F84F35F248F4AF366F952E2D98B8441DD13A80 -MD = 77E65C0462D80F655E10F2D9ACCFC249B9487801EE2A7A9BAFD9F0B4DA80DB4DC72F8E4E500CECEDEB8B052AF585617D - -Len = 646 -Msg = D8C5BA1029D56F569D9ECEFB0E4556298B474A8014FC1EBEAC8F4B61A1326CA2D40ECD50A5A15C9EAAA17253434601F548F4F380D843A53FFD2697A845DFF2E2237AC7ACD9056894E5E35E563CB02769A0 -MD = 3F5F2789A4B61FD0691729F04B27C68FFE6CB069830EBDF09E5E268E143FBE3D8D43A1753096E1EFEA0ED348ABD7BA3A - -Len = 647 -Msg = 3A974442BE9FBC1F4321AD311F3B7D26537CCF129655F16EBBE11D6271C9F30001E910CFFD71EBF57794C5E07A9BC228CC2E93B0BC56A17F6CB49EDDAF29DDC1F83E68EDD1A21B84AC5BA1FC5834022C08 -MD = BCEEFEB808126090B9492DAE737091359B11431F944C49C079A16A982E131EA3AD4B11C061858581296A1431D5702504 - -Len = 648 -Msg = E90B4FFEF4D457BC7711FF4AA72231CA25AF6B2E206F8BF859D8758B89A7CD36105DB2538D06DA83BAD5F663BA11A5F6F61F236FD5F8D53C5E89F183A3CEC615B50C7C681E773D109FF7491B5CC22296C5 -MD = 4B3087F800E4084D7F685737AC635DB459CF70C4FA863C711C1143CC10F0C4AB0A2370C099FB282F9C1CE5F015BF3F79 - -Len = 649 -Msg = 291A175AA79A73524CC5A8D1324E068AAA6E2A3CAA43AD44216BC1D94580A4E8997EDF665A8E2142D63FDB55C005AB6B1D81C695C1460BE418F0C2122B4FBA09CD381ADD1B8FE1C646FD03784E246437AE00 -MD = B2DB911C76EB84EAA3FEC2E3C39325293859F99E7798026A8FC181319ECB73CE2520806C33B112694D5049445CE5BF2C - -Len = 650 -Msg = ECA7ADB20C7BD746B39A1A1B4EF9C1F319403E601D6B282FFB2DC6C01A83E6C01A01BFC72AFEED867B5BDB8FDB2987105CDE36F38BBD7CBB6A185AF91CB3F3592FC20BE27B0C277D6D398C21530B333B6100 -MD = 0EA7A89DFEB3333399CEA9075921F925FC606DD1B9410F5B68682F780DB05FA2E46C92702A447205C721082EE52D4976 - -Len = 651 -Msg = 324C69CBCA2A5B8B42E1DFEFB2D7290D5871F3442CA554B5D34227F06A732DA857C4EA2BE0E8D86299A70BF0E754A06512D8C9ED4232339BF6E338B89CD7F18848B81CEFA8431ACC2E0941D3FBA7F17F8540 -MD = 75F8F6047F1227FE26FD5B461064197D7EE917FE1AD44F8AA0FC729A1214C0E229BB3F3F8112D9EEE568B1EC9AD58F47 - -Len = 652 -Msg = E34B1ED9CF859DF804A8F42B71E68C2DE6A3349EEB87B450D350BC2F79868748E71C44E8D4D41BD3A770E521DE7AA98C430910212E294AEEC65C0E7762C7CD9F03A2C61AFF873C28A9DB3EEAFB2C09E24F90 -MD = 394774B2DF771E815E69EC1F14E3672AC27D9EF73E662623DE34801D1EE9A6AD484C9092403C502505CD491D80705034 - -Len = 653 -Msg = B19701F0F71E36A61B27E9DEF9A7062719A497BFF82CCF01E076E8C08F94B1F6C67473DC909B192067BF6481B44A44FE77340C4EB7FEC31B2EA97A4341D09E31EFC00C48D11FE125DA151B6C7635094EEE30 -MD = AE8600C30E332A5590E4ACE8B003F37E3461DBACEAC5A798748C0EFE19DD8A41C0509460256E35CE9422F6D2E031FAB8 - -Len = 654 -Msg = C700B40AA21E2C2FB143377421FB0E5C4C665E529D8C6C6E5A4DCB0B388B5726926D41A9A336E6AD38CC3F239CC85DE38DC221A4ECD281B4E271D90BF24A1FE943A6A5A637C36B48424FE6079C1F2C2D7878 -MD = 42E078A2277050EE00D3AD8FC98DB56C5A0E82829D7B1C1B92F92E3DACCF315C8F6CF0491DCA1A614C96A7A31015C7E5 - -Len = 655 -Msg = F2224C30809A42D86701D95473C9DA3AAC8324D8D59AA8F75BF8E5A1420130BC971499725FFC56D1047F5987620492F383F477CDBF98EF01DB50F1FC0A7B3D9BD20C31ACFFBF60FB18E9962896B2E0431466 -MD = 428C219D35C8DF6540E8D17697C9480CB6B7A61FB78E428F98F6DD4D19A8D60EFF2E97EB1C915A5A3415E131F8A36FFD - -Len = 656 -Msg = E728DE62D75856500C4C77A428612CD804F30C3F10D36FB219C5CA0AA30726AB190E5F3F279E0733D77E7267C17BE27D21650A9A4D1E32F649627638DBADA9702C7CA303269ED14014B2F3CF8B894EAC8554 -MD = 5D347FDDB118FD7DB270898407979D2D1531D3FF6642EC4F22917EBBEDA6CEE0FB0DE11432EDDDFCBF0E2AB9CFA65804 - -Len = 657 -Msg = CEE8685B3D95B231028587AC25C7E1790A7EAE52A5BADDF63C44DBDAD15DED0EE60708BCF52594F2FFE21BCC6849558A06770559A409450E6C87917D447D53D321EFB737668072DBB86B4A57C2CD4E5B3EDE80 -MD = ACB3AA339791A69F764520E53059BC78EDF25647DEE5A976048663D8492175377B4C4779FC770D3CD50A2EB961B5E395 - -Len = 658 -Msg = 0B813C3BB65702538E6A0B953C9D272DD738817C86FB21A6DABAA13CA63E7F7A92F39036E08A68886EF8D495D6C2956125B4AF181B13BB41C89E83CC8B6E9CBA159CCB92C755E56CE1C3458DAC38718652C440 -MD = 749DFC35E45575BCAB95B45E451B1008F1122B929C072ACF39DB9F1A5647B783563E8E680BA881E3BC502DC8FA3E59DA - -Len = 659 -Msg = DDA54A9794F7FD0B7DBBA54A8341460FA46A067BA59EB7276D721F5182B59FA17F3DAB0015776D8BA29CF88BA64F6629B0FD0847FE2A86699CBB1EEB441AA17BC9070B432CCEA7B81060F742CCB4EBFE409260 -MD = 0F119522D7010CCF612EDE885F0C5B129117EF308C908573141ED03F549A87B2E7D124F41366066B5AAE46289279DDB9 - -Len = 660 -Msg = D71B21EDC24E6FAF788F909BF9015775BE75EF9FD9C179E9C9C8281813055A1627E1604C35BBD465FF7D30FBCE70ADCD6F17F11E786FA85996AE178532531A5BC68DEC364647D2F4453AA7881E232563283D20 -MD = 4A35535CD5B5396A563CFB51EFB4D40AFB42C7B397D8F71C34584E83980C5B41846DAA2BD521D90664F19BBC1B144C5E - -Len = 661 -Msg = FBFD53BCB158FA9DB2EAE0AA165B704ADA66AD28D5FAD0AAF4F075EBE04F295D5D4F69CC2936881FCDBEDDD48D48A6F3F0FDF1586382F9B97DE28CD225364D2EC0CF872AE691B76F10C7622B1409F1D4C1C648 -MD = C8B402F37F2E5EAE8E9C34084C84AEF100F870DA439D6A35FA8074D26A2E1A8F55A510C5858B733FF14F3035E4DCAB02 - -Len = 662 -Msg = 7E767921A14D35F1662B628F4A3F9E285F3F165316128AA84E06F032A0003A445B6C1816CAFFB61D7318D249C9179A27BA6F758103E9D82F3D1F7AE5726D485270AEA9BB40E9E11831D9DC4ABE6089FEAA6960 -MD = 638322BD6000951AECB96A5D2078FA0916C8366C2FAF11631DFA13688B5ADDEF48576D321C8FA6485F4D44B0B9EDB56D - -Len = 663 -Msg = 020B34BA7071093BA752B2913F9774C29204D00A137ECEF964F4B05DCCDE457837E0E724431F606E75E3C14B441E9F2C53C7504F5838C57400BA593BC59E74E4E923EF0CF44D734C07A20C2DECB1DCA82444AC -MD = 9881CBF9DE6887727DC11728264392A9DCEE1F8018DBB971CA4A79FEA982CE38E5DFD819C89B178242304C2906C5F6D9 - -Len = 664 -Msg = 6348F229E7B1DF3B770C77544E5166E081850FA1C6C88169DB74C76E42EB983FACB276AD6A0D1FA7B50D3E3B6FCD799EC97470920A7ABED47D288FF883E24CA21C7F8016B93BB9B9E078BDB9703D2B781B616E -MD = 954637B87FDCC484F2B61F7F42558068029F96099C1D6B9246585092EAE68924E5441B45027248A2728833169BFA5004 - -Len = 665 -Msg = 5332DDDD7949110448AADF3FF60CC30D6CA83E32C49FAFF9625C3B39E80BB94AB82D9288B85A5D4315DF92FB9A8D1F6643C2DA0FAD11F62411899714FF8688BBACF01915598C259F5301EEF92F9A2CD965D43A00 -MD = FACDEEEE7BE6AB20251258AE051C6F66097E0E513D23D04859ABD0217146D4751B76537B4C914E55B15650CAB71AC86F - -Len = 666 -Msg = A90A69E0B616278A1EA45ABFB27876514B9A94C1E1E24C4C22A47DB8569DF9FC64820C5A46E8762ABE56C095AAA1F5E97509F16BE71C437E8965BA7395CD82F6566B6B4CCD2595A9326151716A2041D97419CA80 -MD = 8928A55745BF168B38B8FC4D7F5202464E6D25F04D5BF98E9B20485B524B24881122D7221A1BF2F1077BBA984DC1DB22 - -Len = 667 -Msg = A8E6EA7B074CDFB1983B864345B26C1C51B6799399092F146E5A83F68544D139B4DCF355C18563D5924106AED6135E8789DDA606A264B9F6EF059E009BB6D9797F56B307CEACA7330B103FA36A066B07D5FAFF80 -MD = 32336D5F70F6DEABF96EF6E4675A490243667725E606BB7A55FC3F42F2DACB982A72CBB86D4E85709C9C4EA0E8D0387D - -Len = 668 -Msg = DE6F56BE8FD2622BF9A9D72E126BF9E6C709B7DE2DF49F025D3A54335ACEA3913491EE0A8FE4B511BAF9B0BDF907066E4E70B8165B5E7B173F9D8F491248379AC2E0139A2435EAE5B53AF8B9BF974E02E68B1530 -MD = B2F70AEA06C6FFC656158CF280FDD8C5D41E9C46AD9E17848E71DD5D67E8BE6B5A2E31384F13F1F363DE3D9A4F1CECD9 - -Len = 669 -Msg = 183111D07A16E338EDB2BED4EBFFE453C900976F33ACF6D521F014B98EC4BCDBB606AC70CB557CA17E0C02CE8395DB05611100B0A3DE4861FC0510CE734D2718E9A2C01940DBDBBA806BAD0B5BB3B13DF37C41F0 -MD = 26A3E1DDB6158904F8EC9EC00288ACDBB919068D88412A78C0D293BBD41DE9FE5BE537DE216419C71FB67F4C795083DA - -Len = 670 -Msg = 05CF7BC0F43F7DD750F7B238624157941F0C26F990D967C1A9A6B1713E090E790D574206DC47F2C61D570F1641A0C6F240269E9F1F1754E4AECC734BB7F55566135504A94B03F775860E4ABB0E7ED6ABDC275FA8 -MD = F80EE77D19402E5E907A419A431B153C3751FEF21EF52984274904D7454FD2656D00DD1CBC771073E87D5DB57A429FAE - -Len = 671 -Msg = 39FDF47FD4BA466DDCC6CACB1D4A1941A67AA2985B8832B79A194CC31AA9C308FDAE7A2393621C14836A4BD32A2D75C0A0F94D8F6DAD905565D8F437438D080628809212621BEC1051527B9CA217545BF35FBE8C -MD = A8E433E450A11C3B5FA1B804F9AEF5497D48538B2632C2773BDF9BF047F0871B34633CA2A83D85E788C8511142C1E395 - -Len = 672 -Msg = 4B127FDE5DE733A1680C2790363627E63AC8A3F1B4707D982CAEA258655D9BF18F89AFE54127482BA01E08845594B671306A025C9A5C5B6F93B0A39522DC877437BE5C2436CBF300CE7AB6747934FCFC30AEAAF6 -MD = 78726E91AC311F4D104706362B0314C243CD81644125881FBC03670210C89FB8E7BFF6C61FF68B234C3171F16B398F36 - -Len = 673 -Msg = C65513559AFE979CF98A11ED2BA28093FD980E4827D7AA88D4EC8509A0621B4DE6ACD0313E0DCD79CB791914D6BDA9E0DFDA44424FFBD29F0BA7824A37605AFF32A9AF813B38293174B929BD836B19108B206B5800 -MD = E231EADAB18369CEF5B10C1F0DAA7A55B8AD840ED1AFD2F086521ADD4B566F1117BE44A2500AFB95D1A00FE8371657C9 - -Len = 674 -Msg = 57EAD014B8ACC155958D62563E9F51F709D858379D699AF657C67DA30378AA7916AF2DFFA626EA24019F4ADEA5DD2F776FA49191673B08C804C2396292F82B9A36C90E5E0498370A221111EE58F7D2137B96D58740 -MD = 26FAAFDFBDEBEA7228601738B48FA508C15F7B998CCB27B126AA986825E636FF2E099463FFC48BA1DF5A1E4D327D92D8 - -Len = 675 -Msg = 815D4AD9D572A2DF8656281CAEE841AE46F8FD3AE24EE2FE148929C570CDB3E7D0B08FC26F42B5636A3ECE524355E6FE28F019F139839C2BBC79F18C765F8ECD7EB139DB97816EFB832A09534C07FA18DD68033960 -MD = 30265BAD6100CD1242A92170A7ED73350EB221F18551437F30D4C9CDDC07EACFAAF763D4CB36B46A289557FFE81D02D7 - -Len = 676 -Msg = 6D5BDBEC01986DCE1000A7EE1968BA9E6BEE72560C230F33F5DD758B593AA482CE01730B4234E7D9E8A211B9602BAE5C918971B816604BDFA382EA6593D27AAA40628358BFA92DDD44E84F4714FC41AF834761E4D0 -MD = CAA76F87E806E22748EC41313D6C80149A955978F373CF129FB8B4195B7925E6EF77754B974E8E84B0DD484D87E0CBD5 - -Len = 677 -Msg = 4BA150A5EBA308AD19F868282BD246A6DD84D7FEC4B2E5EC43918F946D61061B3D1D11973D22D7C9E7E5702E59C7414B034D2C53EF91729522C9CD82A9F9378FBB4856F1BD10898296CCE3B90CFFDCAB58945BF580 -MD = 151C9E08DD0B02BFB50CA2C5644507F28DE4948DB3CA25086A4B608FFD509A4575F0DCE70B4470D62B14B06BDA72C40C - -Len = 678 -Msg = 65666871ECE7F4087742945841BB624EF9D5C6400F4D78857810E704507195D6AD0B047EC823D29EA20967FE037BC4546BB2E4FF5B85EC7FC8AA8D1260BBC5C5ED5AF6789B81928DA011FE91A5017C8867391DF504 -MD = 7A9CDBF8C48F3C751008AE4F087324F42BECA22881B9ED078D1D93AD9DC6BCD2638E36F62C035D9F5F15D2A65F4A3C65 - -Len = 679 -Msg = 01D6257DF9FFF02334322A6CE3948C5C17A9C525D04B5778394B7690063407A9BE263E3C3CD8108457B2176854542FB2A1053578A9B3A36300630D2B3DD82DDEAACA7A10DA4C6B387AB7DA0B4897AC129822F0DE1C -MD = E351A782523BD5CE7C4789326B979A550BAE3EC422A54B8CFB335B1B4E8E2E6E6DA581BB49E04BDF0317FE4EA3CA9945 - -Len = 680 -Msg = 08461F006CFF4CC64B752C957287E5A0FAABC05C9BFF89D23FD902D324C79903B48FCB8F8F4B01F3E4DDB483593D25F000386698F5ADE7FAADE9615FDC50D32785EA51D49894E45BAA3DC707E224688C6408B68B11 -MD = 80763FB54688F122269430980AA3ABE09091020B8CFA6BDE0EDC2C63AED8B8BA097CDB79B8FC7F5117508FCA4864A14D - -Len = 681 -Msg = 46D226D1AE24FFD00A066EFB6D561AECB244806BF048E60330BE461C07793F8172BFA3D52F9A98BACFAB2CD39864FAADF72C8A7F94A977E1AC7597061638ACE3E21BA36CBD4007EF139E7DD8B620139DBB0AFFA81D80 -MD = F860FC410D5C0CB5EB489492B5A05C713AB07A2C66B16F9157D6D15E8D47EF8A12897A2C0F622E7E11230B5C2B26E8AF - -Len = 682 -Msg = BEC8AC7466698A548C1015FB4BE3450D86983940D0948A6B53D9024C51B356C3CAAA87E9A15A06873331C3B0E2023346E87EA14CD757FEEE5F77A4DA821087D36229A4C3BDD68C03FB27D0F80C6E3D7E9C8A036A9200 -MD = D76F9A09960B281D81679BB8CAABD5B7DCF00DB288FE7B2751DAB0D14AD60DC99B463FE41D99396F5B6AE9ED127718C2 - -Len = 683 -Msg = EE0C430A0ACA534E72BDB81416F8A84C376529637209779A74F82C0934825CFF164AB703513B26E4E64F2EB05D462B1A422B8423B52205075FF2E8FBD36FA82E343AC0B06A3CB2EFA7E509A7B0B04EC23C5C4AA20760 -MD = 1058DE6E1D5CD89918CF41C0C7CCB940779551471FBC973C2EA44F9B097E1FF57518D5F9E4D109FAE2C851515958611A - -Len = 684 -Msg = 5262C0E6A835DDC17CA500196D4B3F74F30BE0A85E70D0AB343AA33BA65B08E35EE2E05F2812D3420F8466A75E550CDAF47C77E3E6BA22D0DFDF0D55697DD9759695DCCC84353DD2B81AB0FE59CA3E9A6680A5C29EA0 -MD = FAF37F0B3A5ED381D4707970AEA3BF19F31A3CF8DCC6C8D50C074CCD551BA6D3BC5F06B94FD6949E72934FB7013B0F05 - -Len = 685 -Msg = 7692563421ECD26D31A2A48D509820C69B1CE339B689C0421DAA658E43F62618EDD77EB6FB8C8C876176A13A7DB1E6F5CCF458F17DC76C993208D722D942E1968033DCF445E369B6375D0D488930B1653C12EA1B33C8 -MD = AE9C905B9382EF4870EBF3E93FE4CA1C2552E7E4A6D7DC4382E4D0EADEE0C4EE2819F7A95949FDC57EBBA0B074654504 - -Len = 686 -Msg = B67F18A877D01C5FE24A5A81431CE673D6941FDE954FB92D593291D38E5BECE6EE5C6DB0BA571C5B11D96DF1D683CF14B560E3FF015DE782D2D23CA661B18FCBA123CFE4EFF13545CF10C20E8619C513826B8B017590 -MD = 0CF9E1F74A2C1D188445EE03DBF20CCE7173815A77CB30852A6EDC4C686759EF1B976A4116BBA495C116309A546584F1 - -Len = 687 -Msg = 3DF1EA02F3B72F7DF4C2B23BDB4A07F8B42CA5BB071039C7A5854B87D20CF522B6542E882B6A40C5CBF4410AC39F4D0259B7133E65E6D3931AF6547563603889968A5537429A5461693DE1E248EB01EF78B971143BCA -MD = EB9AC37B2A51F213E38F3F464C37E89D00C9FFEC8A1ED0A18A1EFFF2D46507FC38A0C565188E1D40E8DA171E972D9449 - -Len = 688 -Msg = 68C8F8849B120E6E0C9969A5866AF591A829B92F33CD9A4A3196957A148C49138E1E2F5C7619A6D5EDEBE995ACD81EC8BB9C7B9CFCA678D081EA9E25A75D39DB04E18D475920CE828B94E72241F24DB72546B352A0E4 -MD = 80447583262DED037DA88F3B98698BD8F7AED7D9BF4D99F8132EC3E7D16BB844ADAD188757CEB32B359C56E5007EA3E4 - -Len = 689 -Msg = 4C4B4D003C4341C9C120B0E717622C70F17AAF88F49DB5E4C10124EE6BB1A090EB3A638BC262FC4A761B0C6FAB9913ED105DE2FC6FCD4BB748B9270305A34994BF81E43A86F8A026FD6048285A4F93455A598D5C47B980 -MD = DD3E2BC7B697A0161EBF5481C709F711DEAD580EA64345D51E243A989EBB357BC369A18CBC373BF14F7928EF46B6B018 - -Len = 690 -Msg = 61A7A180B5122B174C0FD9B531C66FF1E273353D348DA58C345F78565DEB59A973566B89BBCA79F403ADEBA899E56FC9AB9885A9AB6ACB96A3920AB27C16FE424A93A21A72D6749756FC14C92EB08F078D6E21D0C0EEC0 -MD = 9C2E18B5AF75E29D60DAE54D181D032331FD774467631B695DD6B8B9579E9FCBBCB1980AA44087BF15CFEBDB74D0B279 - -Len = 691 -Msg = DF1081403952FF202893B5849BBFFFF74BBDD670C20EAD37A69C6A04291033FAEF0C94E4EC4201A2911A73E6367268A5F66E11561A6636A05CD2CDA8A065B2366B7DB0880F0E0B972CBDCCC70F3F4B13A93F63275C4120 -MD = 995B3E764AEBA5C683481573A5C2CF650EC4AEA25D7719C1C4A29EE66FFE4C57867135030D4B4DF0F55CBDB0A6606295 - -Len = 692 -Msg = CBD12C05EE3BE8484D9005E2B9F017F8E5EB0E7CF122A393B1C570C1ED9B4EE1C65CBCE0DFF77CB991E6F3F66D7B0EF45204894E5527C1AE655321D84CC2E94046F265EA726127628D15D4EDED37BB42D8E40B3EE6D430 -MD = 2DE00E5700F16D483A30F3D7953AB185359F17DEF1290620C07519A07AEBF797CF90319CF73D34C1F973FE2B0F4D7C3F - -Len = 693 -Msg = 659AF27FD1E6C59C9DA9318DA4E063707AF5204A963038B7E83242DCAB783F009CB034E39A82D26E1B2B6E84422281421687244DB5CE43A187FD96C39A59196AC2FD820FDB52BAB8DB579F87AEEF3EEBD0851952B70008 -MD = 1CA57B831AB6FD948953C53010B4376563E29CF6CD2E41605F1171FA0C619E6816B2474C145318C0E9FD5ADC28E10A7D - -Len = 694 -Msg = D32EE5CF0455CDB7459BEABEAB67AF3E385E6D7D576FC3F9A3545EA4C28C94AA4833AC1D477C084FC3DCBA799D7DB42260695D651CC299E51987D60F8256A8BAFAFE2A3E414C235A56946DDF9562DE66D80B375DA578C0 -MD = 2BCB88EA1B0A4852EC078D72019D41474C5F5A61D9008CC00B67B3AB1AB4F2AB1DD06109D63FDA7A6696B42640328E80 - -Len = 695 -Msg = 62683FAA989429CC513787CD401953E80F8C9C7D41634D1888A08A3242D8FB2BEC07E5E02C7D8D00C446F5F08BF846927B5409E6BCAFAE4ACF70F30383D6C29D062625870F6DDEFD1920179CAD59A2983F0E20E78F5440 -MD = 2D951E535B55EE12CBE58EE0043CF5E4AD279E9C90E6AC44FC80D50D738EB33A228373BFF155AA13BEE8EB28D64960A8 - -Len = 696 -Msg = B8D56472954E31FB54E28FCA743F84D8DC34891CB564C64B08F7B71636DEBD64CA1EDBDBA7FC5C3E40049CE982BBA8C7E0703034E331384695E9DE76B5104F2FBC4535ECBEEBC33BC27F29F18F6F27E8023B0FBB6F563C -MD = E5FB4AE5DDFB4CE8221DF4BE70240B76851E55FAE86BAF35BAD9E7179E24C95DA6F0F0695A8A5291A2394B92A6FF7B7C - -Len = 697 -Msg = 806CCD839B87C2A7C784F9AF9D5BF1F3CB663E39BE778FFC58865F953A837903542727FD51ACE8A276F9F5888F9B9FE1755B5D603284509D9099B310E01776281034FC57E91EC6781FCADEFE9B5E34C2D58ACA5636D7CC00 -MD = 5DF2E698ECF67BA4BD6A48771D591C02B773ED09BA424FC3B5C596AF282F585F565DA1FF5E5D378C503045094C03C119 - -Len = 698 -Msg = CA4D271BB220A5E1B6503C8E44AB9F3554D85F2BFF4C4F6A6ECE5C7E91FA10374AAF75D9FB45D4F0B442A3058FC1BAE39127C4C71146F5B2D4E87034EA34E67F822651A57D5D70F7A564FADD4143E940E971AE985E1D7240 -MD = 465D92DA00F7FBD003861A063E5F5B275A56547161497F203B5EC709726B35841B772A4324B219A4403A7601FD69CEAE - -Len = 699 -Msg = A2786A30089CF96D17574434B2E274B89CA8D7AD73C3FF491F50ED2965614288DC6B47B491B879857E384EEFE7149611E56DCAFA6498CAEEDFBA30C0CBC52269A3C6248587D77509E2019717E47DC27210A449E8EE0E9060 -MD = 1A2097CF186854F2FEED7D6DDDB85EA58E84AB803DDF7D7D8515D4A5F24FE264EC8130E20E0A17E52DA49E27E057D8F7 - -Len = 700 -Msg = 96FEBBB1DD01497E3E9EC768D864A48734DC7DCEFE567F84EE9309CB46B5056F6C730B1A6836912FFB473C0EB7BBB77BCD1483D1470910DE99328A43B2F0ABA0CD4BEAC2938937C2DC38C5E2822610814CF44DA89181E2A0 -MD = 4B2C0A0021A839FB57FD0928FCAD889BD826574A2803257F3FCD58E0E43FB2F6AF2C1A1C7E00249C5538872011357B4A - -Len = 701 -Msg = 871EE5187FED8FFC3049079417641B332F0B73B2665C60823BCA8BFDF0989CF312D36732EA456405A3E0EA72F770329DB44949DDF7596318D37D99C8E0F8F71E22534493708CD6521711100EE059C53D2C2753E1A920B6A8 -MD = 28B2F41A8321C31539B41B59D88A0E699655872499E86EE9E8B9CA540EA92DC529B3477FEF2469C978B35A5BB59B2516 - -Len = 702 -Msg = 12A6F918BC8A7E16920F4B4033F71ECDC3B5FF72894936BDC0A26BBF6FE66C594244FC37DCAF4CE0F24E75B12E486CF4C41FF97C8EF4E66825503B657787C284A6ABCEBB6B175623297DE98745A4A3C62A93682CAA4A8D58 -MD = 84268F1AE4971BFBEF9C18979922D691A1996C4DFE5C2B69FA5DE00E7A533DAF565135EFDAEE9491CDC02628F10C9AB4 - -Len = 703 -Msg = 44D3E60CCFF7355FBB2168287FF0A1CDA69AC68D0A7EFE45F3A81D3F095FC8EF2F29B028942CA304A1A6FF223E52BB10A335DE8395B324CE26D802F770E0B47BD6B6FFBC1D9FA0B15A851ECB0F7F62F3C6704A1B16CAC2E0 -MD = 9F8CA1FA83AA4CD76FDDA0C0D08FB27F2F032B0D56F994AC2DA1F498A01F15A61D74D34BD53D5CA96AFF6850EEB65CE6 - -Len = 704 -Msg = 0D58AC665FA84342E60CEFEE31B1A4EACDB092F122DFC68309077AED1F3E528F578859EE9E4CEFB4A728E946324927B675CD4F4AC84F64DB3DACFE850C1DD18744C74CECCD9FE4DC214085108F404EAB6D8F452B5442A47D -MD = CE6B07C0C7DA2FA1E6CA05DE0652FC9F1F452FC261E73E52457C72BF0D51BAC7D66160CFF16D6A03527982E7D4393507 - -Len = 705 -Msg = 01EFD67EF39BB09135E89B144997728AD2B318BB6321F421D7EC85BB38DD655FF2C565CB86FB427F4DD4EC69CDD079624FF6AD51438FC7264F86ABED42A93091C80771914884EFE67DF9A1A169A7806392A1E82D71BC748C00 -MD = 5FE0C1F8C2C82676A36F324C51570AD67F7A0BA896CA8B239FFA75B8235D89A2514ABF8A49E7815C43CEC0BB53579CCF - -Len = 706 -Msg = 1B8B523F851D64097271FF7F02DE002EB26AA338D93D760EF8BFA7B798CD5EA16BF3A32AA7261288CE542B07EA93E8FB48BB545BDAEFF58EA990CA44001A6000E33436BC10C28E5AF184CE442BA2F3954E6B7B1C15E4690680 -MD = 8C0802D948A9A0654CE47CD490FDE02D2085195505F6A97C2485D040CC4B5BBBC7C4D14470DE50F94B0B8C9D23D77B7E - -Len = 707 -Msg = CC579BB31BE1F113D7F436511B6B600889D1169F0A82C3777ECE9857B613AD5CF5DC8C621F95744F1A997F947CBBAB981F1BB910753B6658C11EAA2C3421D410E786C9727D34E79A8501123F1AE43A9ECB933D1256EF103EC0 -MD = BA259C7FC5442CDD5F3753E41B62B6AFA4915382B17282E372523CF87BBF3658C9C174B9ADFDE926331F92759BFAF0D9 - -Len = 708 -Msg = 23DBD6EA6FADE48BA4D2D596F4BD1608E38BC566812A5899041D2B8A867B20D0C6080E3EABF6208B7BA26E2243F270810A2ED2F2CF6A0AB9975FC3D0460F19CF0C8EA7842CC15A12AF2F31C7A97A19D5421C368AEA8CBCB1F0 -MD = E47BBB66843BFEECB222AFD8B64A5B82729745BA1394E68A6C5EA81250FA824AD01B405D557E7EB11581407EFEE6D820 - -Len = 709 -Msg = 33ACE56FDA97E4E458E135A93730AF474A233C9E468E4BA8D2D6144D3D86FAF619FFCE35463F136C3EFF4FE16F8D4F7B0BB3D6BBD80880A935E7FB55F310309EDB0134E3770BEBF81622C8CCD6CA04AB7C9D9BA40DC0C7BC90 -MD = 7B070EB48A658C6381EEE4967023C028577E91DBB7B7D580ACF2B13952A30EF56840B8C3E9A660A32B9179CC4EECBED5 - -Len = 710 -Msg = 37402934012C4CBCD189BE7AEE367F3C12B32B306980416AE5A20674DAF6BA41EEA9F09981D58DB2E38AA3DFA5173218E2DE374575BBD95FC039FDCA99ADFBCC30220492324189EBC2DBD5271A28CC8B8DB90D7D2651190810 -MD = 8BEB1BEF410B4ED22156915B581F07C5AA2149F11FFA9E77F7A16D49FBE4A8625529C605C8F5199E65F85E4468F0FFD0 - -Len = 711 -Msg = 44DA0511C6401815BCA95272F343C27F8A67B19EAED67169957F4B364059537A8F018D5C9DD478C0643F26D723EAEDE5BD2834751D291A0EA86BBF1C368FA2952D4ABE5B3F424B6D3F6C5A129817CD2F3FD6EBFC93F6B3F752 -MD = 2864CCA4BBBEC0D2080FE7051F75AB6DAEAEC2350FD929C84591239034F89A4AF27D493486210C529C4CC323EC8EA47F - -Len = 712 -Msg = 1755E2D2E5D1C1B0156456B539753FF416651D44698E87002DCF61DCFA2B4E72F264D9AD591DF1FDEE7B41B2EB00283C5AEBB3411323B672EAA145C5125185104F20F335804B02325B6DEA65603F349F4D5D8B782DD3469CCD -MD = FA76E05F8D2832DADFEBA0107A3137B7B9D4D19A77A1E78F8BBFECDA7EF46414C363453E8C4902C302A4E18CEA4BA157 - -Len = 713 -Msg = 5498F0A76D37803918FD6B15EE166DC9FF9731F1C5A50E058713E285132BC43F2CD5960444E234F8467953890F35459207C52E6F39F0102E4684A18AF3E95126D7437F8A4266FE304B484E73CE5FBF96D2CC4BC29EFD03383A80 -MD = 971E3CA2E7F46F07AD7C84130FA9FC236EB47691A3543486ED3772BFDA7B4A766DE628936027F4D939B4C878BB069E12 - -Len = 714 -Msg = C0E4A4D8BEE0E03415D5A2A3D11E83088F11F27BE91484A691A15D9C1450F82F295B2BF9BD80093987FD95033F9EA7334E3C832EBE019406B0B7B32F293ABC3AD98BF65459FE860E817B106AB4FD41A6DCDE128205DBC1AFCA80 -MD = B9C2CC0B50D1016AA5A8067E4DF7EBF29017E720CE9E6B66C3BC525CA80EE2C101D411497E6EDE2B8E40E8CF0D84934F - -Len = 715 -Msg = 2E99D58138061701615DFF1A8953E671548D6324CF19476D9CD33849043696E1540AAC3F44A011EE94423A2330B61C2FB2A1CE77FFC12392DB812F4F0BF8608223DCCF19019D80755A46902019DFD790D342DA79D5A84C009F60 -MD = F3E4C1D28860862AEC71692F52F05D4BCD6215DC4BA1E18D9B80AAA50799E2CE62F03B6BA8DBD4612D556304AEF06EA1 - -Len = 716 -Msg = 447355A1A902BDF51F3AEA5D6F904BDD7B958A269727A8F15B1520E15FDFA01DC8D23DA925F622210A587098033BD8AED48727CFC66BC11905410FA4623E8D8456F7CCBBE6582DB121AE2E7676461007E4E225905AA2D30A53D0 -MD = C5ACEB60FC11A28BA483B13DD7A135B6038FA7C3220E4B03146C7F0046B51ACD2888B7799198393BF7EA0846A06AF017 - -Len = 717 -Msg = 64B9BE2D9BD49866C57E320D7079476C1FB62FCE5E8196AC82A62782F693968539D331B8F46E8B76722B3DDCCDB3DB194873E02996CDEB199237F0CE4C377D46DE925E7EA0540337D03378EF3FEC8488F0728DB40CDA98C11988 -MD = 6A22657C469BF8BD61D50E7600E33DD720B5BE9FE55A72EAD3CFDB9E3BE9E95771409585970F43BCB48418AD44B0051B - -Len = 718 -Msg = 8408659B0998506DD15A6375D400D017CB1081CFC1322BFA61BC19E4278AA172199D091AE29F7BB5B0B9E01F3F9AA2F5ABFF8DA03709092A65074F965CF0A1253A1EEADE65A132AA5C17E4E880F1382709BBB3056C643A12A928 -MD = CF6EBC551E08DDFFA513DC58710B00EAD3CD1108CF90B4C01DC350955B0B5859A93EF583720BE5FDE575A55A188027F4 - -Len = 719 -Msg = 8E51395F9CBB75F8B98104508108016D275B6F769588DCCE2858E1D6995EFE7BD216B9835965FD90664CB4F2743EC5817B6820868D039190BCFD07E68B9C13A014FF2703DE6B081B86C55D72BCC22F4770FC7965D1E75AB9948E -MD = 103A79DCEAD7E3AA907C6482502C5F537B8B5B0D09B9C1EE5DAB8A31A95ED98A90DBD376E5DAB7249E2DF41575FE9D49 - -Len = 720 -Msg = B180DE1A611111EE7584BA2C4B020598CD574AC77E404E853D15A101C6F5A2E5C801D7D85DC95286A1804C870BB9F00FD4DCB03AA8328275158819DCAD7253F3E3D237AEAA7979268A5DB1C6CE08A9EC7C2579783C8AFC1F91A7 -MD = 1B43B70B6BBBC768C1F4B3CE241667ADB5246D29981723846168D2234E19A5130B1F576B4974C613639A449E61B2CA79 - -Len = 721 -Msg = 1CFC3DF19818EAA21C03FDE78CDA0C704EBCEE5866F71DD8E3B1B38C9B7354443A3174099928AB8589F5EAA4F030074D3185BEAE29B75A9B7B449106EEBB05E32B7A621962FBBA4C74162FFD111BFCA10DCFA4F909C7C1AD98E500 -MD = 4007F61622EE6E807B9438A94112F5354C896E76C97DCC74D1CE279FF89FFE280429E184DE17C8FBDCA9EA1D5B557EDB - -Len = 722 -Msg = 2202FE7CB2BD3C73A7FFC49EA7A459AD89B62257B842B189042EE58720D7734926FAF10293D1455B7C9A4718CDEF1910F54A3140CC70268A3138819526F173595487AF4603F31B4CF644B3C4FCE967A520143DCC7438B396AC04C0 -MD = 1394A4224C9ADE3DD4D2804703F871718DF912C78671D306EC3B1CEFACCA897EDEAA5D9C4671927C7FCFF924DAE1753F - -Len = 723 -Msg = 490671DB10124CC0462CE3AAB939A6873B6111DD47A0CF31DB0F188FFBB60CB1F5C29BF6A236895201B52ABB93988F3B5091B3F00524C7BC5B70DAB990529797FB08CABFA7C01ED302E3BDA464344478296D584EAC426C3862E260 -MD = 60224F864BDCF1BC761C958A1EB4EC456B6F2ACD472A1575BD20EFA705CB86E389666ED1FC525F82466D3124541376F7 - -Len = 724 -Msg = 5A2A63F0BDCC12F2E6FA0D3A7CC1230890489E03100CB2B5FBD196F3C5CC46611F1C0BB50217B5FF5BD0B00604FB3B408937068F23492F498980329ADCEEB3F3E7C5869DAA37EF56C77EC485BFE84D07C31926FFDC1998C391A3F0 -MD = 064B75FB47C78B965E4A9CFD226C8E18AE4A10D809DDD717270611B66717E90E50595FA667D8EB4FB91A1B6E823B50CA - -Len = 725 -Msg = 0CBF90E972B7FAA236A4EF379B189E96475488C0CDC8163C1501355F283FF2EF2A3359F2966F3E5DDF5B619E4C8AB2840FD93284BDC1018AC8532BE123CC7928D3B1B7BE9929A1BA3F7F59D4CFA6D8C0CC5BE7EDDF878A5EAB35D8 -MD = 4906A7D72089A6F4A80ED0F3D552ABC92C469BDD3D48368B701B33066FBBE92771C5C3292FB8FFFC71F859C5567F2D4D - -Len = 726 -Msg = 43B5CF0EB20A1782F17DD07E95BDA2AED072798E4DF4FD9B6655EB087EBA8549D68A2C61B08A6B26ECEA623DD5C7D7215F0F3C5E5C4F45BBD4B580A8BC2BBD8ABFB76366E18927D25A74FBD1896536C36028CAF12713544A753A98 -MD = 049E3DF5306CFEC162B212F4994AB18BFA6A10E806F19A43E116149D04144F94DFE8E328CB7236C7A1F402FC94F3473C - -Len = 727 -Msg = 0B1CB486FC934262E8DAADA5789855E2DF164FC5B5141336077B2C1589064ABD1BE8F92E455AE6AA2CE8F4F7ADC653B36F4AE3BF82134D639111BE7CC40EA02DE51AF9AD1F653E8EC56D60BD93CC4937D3256DE51CB5F1962F42B6 -MD = F2CB8F135F1467AF257A08686C36DA99E2C4C3D7DC132DB5CE995B27D6790D8E28B58AFB720A6A8E3BB58C6922243C5A - -Len = 728 -Msg = CF3583CBDFD4CBC17063B1E7D90B02F0E6E2EE05F99D77E24E560392535E47E05077157F96813544A17046914F9EFB64762A23CF7A49FE52A0A4C01C630CFE8727B81FB99A89FF7CC11DCA5173057E0417B8FE7A9EFBA6D95C555F -MD = 938252393A532D9E1F91D5C222E2DF2CC7AE102705BFB83FE30DCAEBCEA82BFF9BDA7CA67095439859146632494D3CE4 - -Len = 729 -Msg = 97BD1EF155DBFF92ED40EF57502EB5B11BB43D0525805EB66CE6CA6B2C4F27ECEB69E7196FA0AB9E097FCE104FD621CADD0CD24A660725DBD32D336BBC8054FA5F8E8631239D90CA428700C962F70304EABB7D21E7A1C86093756900 -MD = 15D7FE6A214516DF20AFB1222175A6DCDF9E3256C7FBD7519A2DEE38D7A8FE66438287BD4AD2628A6047AB06D4CA9B79 - -Len = 730 -Msg = 5020D3EF88B8A5154DC7CE9FFBD5E717DFA478990A5F54241E83C4B67F5BF0B486CCC4C441A75DCAB06B5F680E4CCBB4949AC79974B242113CAF54838F926F2674810F2258EE12826DF2B95961DEC901B59361877B3566A0385E6A00 -MD = FEA3DFBEFBA9EDA0EC3C0A84878A08755E1C98709BFA0646E5F59569AD07715A67FC68C8C5E2E17B4930DE35D01C3D4D - -Len = 731 -Msg = 420F2E0A79EDF6879787FC94F2099AE0C4A3D04BC8932274A8DDC95ACC8C7E1403659777027A8002881E4588B03B3DC6369B7AA32E4ED7624C30B10AC8E2F16DDE7561620D3EC186E0A8395A7F90E67A52931E779F8A8D6297EEC6A0 -MD = E28DF4A6590CED340C1D2AE28517C744BFDCCA9CDE1401165D3EBC60E27F112B14FB71722B2C4F517631DE6E7C163139 - -Len = 732 -Msg = 2FCE6B9232D11B2AFFCE835A8420C8F940390D5BB74E32A85432BD09286F1F5FCE5795225247491929D92169C9E7989AFF84B61D10597B651B875253FD07C098C513C8155652A7C98CB3958D2E8329FA43B7EB5685AE19D4F427C7A0 -MD = B4A87885CE838D1F5AEE5E45F4A83E5337C9845FEA65A234134163AADF3D4ABD831CAFF64BACC448988090C356678413 - -Len = 733 -Msg = 500A6E6A9AFB85255208BC8AC021AED541E93975BD9F83E0C7A5ACA7DBA0C6B92090B08543D888E8219EF073C959731637DC2C2AD8E425C7D85CB80FC319365DCE32B271EFD47148D2E89B39D55A820BF092C5E0739371F96F49CA70 -MD = B881A6277123DC92954847FB4A99B3478623C94594C006EF61017CA93AF7AD09D966E94EB73987E61575944D58511CA5 - -Len = 734 -Msg = E5C9075478B6D0EB732C668AF5C3F523D4FA1983C564FF060FF725164E9AB9A0C80AF83FF749A5BA3E12538F0AA89E596E8293DE963EF6B3D25D23A53CC11F852B41539A3897878741F29CDF04B7137EFB104A395122DC4F2D8DD884 -MD = 81DB4DD8F4D1F702A1BCC26DF260F4F168F513A02BB8381B8A671A227E4453001C012E110AB7CB830E5D641148D860B9 - -Len = 735 -Msg = 92D2A406FEBC4031759A4BD3A7449812DDAFBB1F814125EFB0680458242C24C60AC3CEEA9446CBD8B5829CDDA4F17D12D621416F8A84070EB70680F2EB3E54684D97066FC5697BE7C3F8284F896966CA6607DBEA21713A18582C2596 -MD = 8F7BD613A0D7EB7AEDB94C6AEF5197FE29648BEBD754AD9A919CFD549CD6A2AE6293ED8884DE9598160D3CAD88B0AC0F - -Len = 736 -Msg = 072FC02340EF99115BAD72F92C01E4C093B9599F6CFC45CB380EE686CB5EB019E806AB9BD55E634AB10AA62A9510CC0672CD3EDDB589C7DF2B67FCD3329F61B1A4441ECA87A33C8F55DA4FBBAD5CF2B2527B8E983BB31A2FADEC7523 -MD = 47633AD0C80AF26BF74D9598DBD5BCF77FC6BFF1BCA015A611D7B8240F597D8767FB8B0BF5C333156580AFEE121C299C - -Len = 737 -Msg = B2CD11B36C8EDA2E79452DDD5A6D84A5B30E32F0E7AD88CBD234CA5C6C8DA088E559889130A3CD3E7FC8C2EA2BBDA9A3AD0E099F87A54B0C1C772A8425D81263F15B280A3D26772EEA18C011D66314D98F0146DAE57B03CAC8084B4780 -MD = 2C4D088D8A903298E833949FB81FA96E2DF1213742C48F3EE98E5766BFEFD762F3455B110707F8CE1A96C1364F03E125 - -Len = 738 -Msg = 03E7746A3778D7AB8352C9B1B78FC83D9AFBED688AA1D8B1DF3DCDADF47C79D9C686074177C98FD35701E3CB967E2A34516BC1297D6F72FCF4164DBB286A646D30FA5C9C9984CE7B25BF7E76ED96268CD6B3F1C53592605D190DFEB200 -MD = 27C880B93D94341052A9C802BB6D37BECA91EA2576E6E13A37A2AEB7AF1370A8A7E953B5FC4E18561AFC86617730C40C - -Len = 739 -Msg = 81A038A15FD7D39F55041B3C436B2D2ABF168A589244AAC58AF8E3234657E0E9892344D87E57F8FF8535282CC3046ACFE21795F55F521E9720441BEC60D8948FB7F4086CA1CDF11A55E6F477B08E1FE9993F20B55533A05617EFB56780 -MD = EDC4671E1276AE0F248D4ACBF30A80C21F6618277CEECCCE11969E839D1B180584C330F65C049BC37AFB6A6EE78B5548 - -Len = 740 -Msg = A2D5A45983DBEA20C34211B395736AB2E93B185F2AB4A09C9BD1221D070E196B34B736682CCB9E5ECA84491EC2CE45DE770B79BF138FE18DAE6C1CDED27992557C939ECD5E99431F2D8EEE6DBF8FCDE40040522EB74058B32EA34DF4B0 -MD = A6B44FB7268628507E2C79A68214322C55A1DD91229BA5AFE1C7AD6D5051E156043D41562C13BA0DD14322CACCDAC0FE - -Len = 741 -Msg = BE4D1EB0174E7864361BF6E36D4B017E02DA05C498747457A01283F10889205877A53D588AA2A6515888D3DC411A6A12FC7DE5FF9FFA2487CBA37204F2116261361CF243F9A686251665345702EA29BF61F6467F353FB3958EF501C600 -MD = 643548EC1005BFDBB8738750EA932ADD15A7C8B6402F7093DBFD80E11A05E7DCF7B95661D13EB84E07353D08D4DB611A - -Len = 742 -Msg = 2034010759152F3222157B787FAF0688A0E9A470772FC1C41E608C0738085B00EFD92F0CE2AEB194556CA83C2EFF6CDD0510A7CE3739308B2D54A3668A799271E14721C33AA50359406825DD16D2F21983DB25BC195D7E2292F9B7E624 -MD = 5CC1FF46CEF6811907A1F6B93D9DD08E4B2D281660ED6CC2D325D25CEC0E056547D4262F25A56F19FDDD6FAC42CEC85E - -Len = 743 -Msg = 32A05FC349E5A290FA9B3CB6B1E692057992AD2AEA4767E30644AE845134A1024E5A68156B4FC368DB7187063C99C33896DA02A99FFA4F7D8A22B578DF030E8CE34EF5FC3661CBF56E86801C1BE531A67B4317DC6C6576C12A9167D0C6 -MD = BF56F82DF9E88A2736D56F019E4238E67EFE8DB703C0D8B2B3A02E59178F81F5EAB1C9F13B3CF62E500BBABF680AC98E - -Len = 744 -Msg = 76EECF956A52649F877528146DE33DF249CD800E21830F65E90F0F25CA9D6540FDE40603230ECA6760F1139C7F268DEBA2060631EEA92B1FFF05F93FD5572FBE29579ECD48BC3A8D6C2EB4A6B26E38D6C5FBF2C08044AEEA470A8F2F26 -MD = 04456322E1BF27785EDF3F596DB33E693AADF76D9D259352D97ACD561BC45236506FBA3530772242CB369A83A38CD749 - -Len = 745 -Msg = 1DCDC5D09B905D1F932BEEF9D3529ADCC20322937CA3576086DF22FA0DB226D4A2E49F41A21908C2B6F77055ABB72D7769174B35813586DFC1802047D801380350FA7EBBD158DEC6C82E93AEB06E8B18B6CD99FCC72E575E5BFA4AB32100 -MD = 8AD3E6D1BB0671390584E67032B17B4F3AB6126E05268D84769876D11E04155CC7FA67E3520C7524E8FF475DBF95F922 - -Len = 746 -Msg = EEACB938F6285732979F3CB7CAE9023A0F187CDDD0CDED771037ECCAD2DFDC9AABE803035AED9B42A164F1CA5E754C40F31BBA3A3E253958DF75CBDC16367565FF426D30FF4435E9013655BCB52CA1140345E712D8F7A4921B1E18B04300 -MD = 1B9CFAC933F9E37A50927E7D5032BBFD0EC22F477CD76A692E73A4DCE341D165D24231756C718F8D3732D2B9132731E0 - -Len = 747 -Msg = F5C107B8C6F4C0B86202A1E943B049A09FA770F010333DC67233A7754D437EAD8C183D1F8AE3A4D62045DD69F9E751E82FE078768B0314898FEBAFF3B228CC85DD7C7AE786004555698B930D288CAF17E97A3200E4069EBEF80059F32780 -MD = 02A319DA87AAF4AEB053F256890E72BDE0C570BEC783DF7A85B535C4DAC4B0D8A77858F2546CB6C76BA0CA4D91D8A104 - -Len = 748 -Msg = 2488C513A23128D2FB1694435F708E15C4DC0B2C2FE7B6AB060ACD0096E696F8D735B6557FEE0E518870AC2D4F62759C990F458DE19AAF1473288CC4252AE745651140790058F2ED53B30B35E556B865D331D1A0B4875809FFDF3250FB80 -MD = 43AABF1162756081A9809CC77EEFFA18E055EB0951D9A416294975952FA4767E56D63EB9982D6F3CC52B65CD4240D90C - -Len = 749 -Msg = 44DFB4D53F3F197A602B273046B4D37E78C2FAEE6B64EDB48A8EC18AC173D21D9B1140A1EF00A184E75DA7262CE9873ED99AB740BA75872A37BFE3179127ED0C301D26FF6C7EC76D80C691452D2B84B05341E1D93457C7B6623338621D30 -MD = AB0C571917EA110982F32F7F75955075537FE83E52130DEEDB37AFEC4A745949E636C6A6A0BC6F1B65663C0FE2241ECB - -Len = 750 -Msg = 798CE6CA7DC91C938FF9C3F3253DF0B57FD5D548B162562082A88AECB01F69FB68092CFE8E7921768636AE88C35FFFF093E0E380B28CF939750FAE3207198ECECB327F0CA80DB4B0026D2BF1B9E8C5B01DA7C761BB1DDB4ABE2CD9DF6C38 -MD = BC0860FEF4F666668CE7B5F96AAC55F7F6154F5CF6ECD9D6AE44A60C358A8CB476164B05B91A633D89BCF2F740F6E7E1 - -Len = 751 -Msg = 8177FAE4AD2299632B8CC7CA64A77777C4CB0770DA8AD86A73A1387F2A53B473EE373DB0FCB73163CFD6903EF5ABBA7464AD74D7E3342D0118C99635CFD2DF68349ECC0D2B3C56502178E33C52CE3D7EB486C5DC33FA1EE79915D232D78A -MD = E03929C1185FFDDA9C0B7A012FC39BBA7DCE25E751B261B1C3B526039A70BD696BD0B1F187AAF05C70C8D4A59EDEC1A9 - -Len = 752 -Msg = 7ADC0B6693E61C269F278E6944A5A2D8300981E40022F839AC644387BFAC9086650085C2CDC585FEA47B9D2E52D65A2B29A7DC370401EF5D60DD0D21F9E2B90FAE919319B14B8C5565B0423CEFB827D5F1203302A9D01523498A4DB10374 -MD = F8B1F2C317B9D1898C305DEC3C6C0AC45CFE7F995E944968206C1C1B2C92BD1D4FA392FFAA6094C6AFF95E47DC259EE9 - -Len = 753 -Msg = 6B6F9EAFA4DFBCC5968C0E9F2FD05418D0D14408DDD4F815D823DFDC3B86A6CC4CD7E251EDC6D1CD01F70ECDC0E10F57B6DDE2A299D964C64B3369041B8903B85FCBDC6F421320EE88C1963603E91C1EFDA49A9EBC6CD3BA5BDB56810BE400 -MD = 21ABB9C995C9B05E7F187990062A1046510182EB33DB2DBC654939A70C568CC2DC538DE4C449269C5D58091F01A5A99C - -Len = 754 -Msg = FCDF2D9025A965E76B1062BEBCC4263060C47FBF50B94D8E6543CC4C18D9D451B70AB93D5D33880F41AF4AA1EC9657B9041D12B5360FC2CA584886F5123751E5DC4950D8371DF9E47B28BCB548D23E0E0FD2398415B435E638BE561DA9B6C0 -MD = 5813AAAD0CA246027A559255D4E2131479AA95B9EFCFE81913A5FC1844D7FB1F1B73F67D76F52D108B3B0BAA3AA1C385 - -Len = 755 -Msg = 686E9C366F294D6CBD34198F99137212E06602B3946126EF61F129A751AD217C9B65BBB64777D0CB79B0287C111E2CDF7A230ADE611F3E686837D2CCD482D6EE8989547CFFEB22E9EA6486B8F5B801A43055AFF71BB31FED1722B561FB9B80 -MD = 5A2A3D5577EE83F01E5AD971567A823031D251EED70D54CE51D3675254E931D9E49CD980A6E768453C21A05BD2E747D7 - -Len = 756 -Msg = 8F3F248C4ECC21F82CD80EB4B9351EE7F1DA57CA05940F5A16AAF673320FD07337F2EF33D949A20B4F10F46FCD4BA11ACA937F485DA1F8340976BF5B8A0AF3E9E9A1357AC423B0A5D135DD22D46BA708EF929F87503BCCC210ED3CC07762F0 -MD = 0DFA12592A0CE4AA978F50CC9D3F1B993FC4B00E36BAB6920649C92D2C97F97D76D28EE302D3FB9402905B8B87511A0C - -Len = 757 -Msg = F81B17BB20E5EC27B38A136443DCC8361D0407F9A703C395C18210B5013EF565B79D2F211D3A57FD12FAE93E7AE049967CEB74ACC197187E7CBA48A3AA334F7CA54E1EFF502E10BD8CC0261B61BFEFC109FFCD980D94339E526F49CA8C1168 -MD = 94BB71FE7A2E41B4F7B52A961B65F91697AADD31C340CF607BCC71BA752C788188891C3C68CE8B96B8DD9F029C9C97A4 - -Len = 758 -Msg = 44BC65FEEB041D28F92DECC9CCED0C82EA96A625578D136F3433BBFA45D4560FD02C4137880A5A5340BA50B508664D2D2F28E9A1DEFB835DD11917B7CB1F99C0F68255461CFB3D5B63605A41F2E767A5312F22C2763AF9AC56DF84AD2B9360 -MD = ACC6469402E7F31B3778AB8F8ED751D170543FB3B904A2B498037F388DF19AB494FF057A62BE591902689F1CB5287C41 - -Len = 759 -Msg = AE840D40174167BB2263166491BCFC27D22277B34EE01988A1EAB70D588013FB67622EA09814065F4053B608661C5D1ACC9EDD2CC60FD1237A3FAF54752357D9A4BC668C22544BD278FBFA8137A70F2D749F00B64224D7F89AF7D21C658F28 -MD = 8F8FFE8BB8F16BCC1366F3538016EF9DEB2C05AB5DBE56E7E31E1DFB3814997A01BD09CAB2464469EF2BFA8B8B98ABA5 - -Len = 760 -Msg = E1FFFA9826CCE8B86BCCEFB8794E48C46CDF372013F782ECED1E378269B7BE2B7BF51374092261AE120E822BE685F2E7A83664BCFBE38FE8633F24E633FFE1988E1BC5ACF59A587079A57A910BDA60060E85B5F5B6F776F0529639D9CCE4BD -MD = 4F439197C66439BAF65618F826E299A329380B558A52B0711182580BDBADBABB13AD66D60FADDB9DED226F0B401AA8BE - -Len = 761 -Msg = AEE916551172614EF72AE01261F6A0A83A3CA96DE06100D037370B33F1E1C4A48C6E03FCDAA0EFB1855DE62251035568C2E143B5ED4A7BEADC8E3880F3EBAB6043718FE1716DA54857BE77B9665885BFD917FCF3B689EAA656EB4BCD40C3A000 -MD = 3D291C6AFA5624946DE661D96E56A71DAA0F25CB5F210566F929CFDB6AA00D2FB3A2DEB9B98AF7FD1CF37C7AEC5A7329 - -Len = 762 -Msg = B62D734A657549F5F0DD26152D7520393E93FA79120520AF6D18160EF699842894B298C965D1FF9CB4200F778F4DEBB7910B34049488974EAC2EEF9372DD4674CF91981C5DD04FE47878D82F7215A1DF00B5DEE6D657771F77FCFF4A0F0FB700 -MD = F01A2B2F68E87F79AA21490085BDB13871B744846B1B42A02B0D9DED6B21EC46BBBAFBFF25565CDFC5F07E210DC16639 - -Len = 763 -Msg = 607A7830E232CC6C8ADA43E6771A47D6D8F85533B09350591BEB1372A4968766D539D9720CD6FE0DFBE37B4B2B477DC120DC152B9662B9BE32403920B942D284F092D5C7FF6FC86E14ADF7605A0B356876212FFEA7313780112E469E587ED6A0 -MD = 91A5F02DE2713EBE26BEF58623991F69E5B226C77564296018485D24BDB6B35D795D106002CF9D70EB9E1E7B4ACD3C93 - -Len = 764 -Msg = F9BD410B5BDB01459653C9043E69479086CC7843259BAA5DF4E7F14BFEA9161EE11B149CE9977DB82F4666B2027E33FB5E2F2F298EF7E7D17E54957F63D5FFFCCE2203613D248F8D1C87C675530531677C1B2F2301640748F2770F2F9399DBE0 -MD = 827B580EC76318553EF994771F4FEA21DAE760A42809FFDACF8E7DEF8BCDFF2B89A77A815366F24A60BEED7C7B17EA0F - -Len = 765 -Msg = EA3C9C739E567B78C16751BCB07F497B3062483431236FF300EFFEE566E546610727D5EBEBB653A44616BB898D7396E9C8050F5D4569100EB64EC70DF3182A75A2F3108807E7CF8CF9CB46F8DF2DB20570BF49BE10A7CBA0201CDC68562C6598 -MD = EA696276CA4ACCD3D6E41D285A1282089EAD21E7E8415BCC243BF724B1C1C3D8B1661980D8AB2E9E389D5D2277DE41BE - -Len = 766 -Msg = D2FAB29E41C33D863B9D54D5289CAF08DD6A1807577A67C667E9A15B3E028D35D8FED331EA42491D09BB442900810A9188562E043BB07D445B8BCE72DF4FA79FB9883680CF619C1C33FF2FFCEB88652785C9B1DCD84DCC820971964740A7B694 -MD = 18D8FC5FDC5FA36929D0EF43F848E48F3EE69525A34A6F2592B13647D9A44BBD3B68BCED6597FCB0EACFBF229B8D0392 - -Len = 767 -Msg = 7D1D7760367AC57888886DB653E275894F5E77307FD0552F3C215DFBAEFB379DEA88D2F94BCEF14B31CEDEB8B721CE65B51055357AB8D56AD4F131B9ACAD1F71861312F5A4BC8F7DF6FAA913A40DF179B887CF946597709DCCFFA0EBD4675812 -MD = 6AEB51DCCD4D779FF8D82E6595425775490411C81608739ACFCC303B6CD77E60837C6F12F268C6337A250D587E8D854D - -Len = 768 -Msg = 69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600 -MD = 1C8B99BF6A3E80F0B8C67FA9BBF07D19C15D484CDE38F8FAADB748AE024A02E29FD2D7BDCE66D46C1A5239D7453FD3E3 - -Len = 769 -Msg = 2EA8CEC39A5FD5C5D1702E3414E3E1B2E7F995EEE85ED45C839D6F9700D0A98717105A653C1DD4A6BA203C37C2139A94A2BADF7D91B78EE47549A44DDECE61A7D57545D1AF181264D80C3E5F6048242DB8566C4B5A19B917A6E743376C80C5D900 -MD = 2D5F06B116F7CEE42816B4116980B1EE747A0BAED2BBF5AF3D4B3FFD14F26416366278FCBD02B562EFE72F0F508CB87F - -Len = 770 -Msg = 2F7BB5955EC214D7888D9905F242672DBA9AD7F069DCC7223BAE86D98E06963022BDA9BCFB4FB70E08A9D925259CB170116A232EED329E9ADAD7B2BA6265D228A5ACFD9217A26E3566C8911DAD49130E5B94AA76B63B2791B3F03DB1E223873D00 -MD = 9915B27D4C60DB293C0CA43392AE72C0E110441AFB31EFA1DAA052A4A8894E0D6378C7CA5779D1BA4AF9B366FADD6A1F - -Len = 771 -Msg = 9F17FEC7F006213F7CF73F749FADE644FB82FEDB4AD040D6215C2C37E231777A76ACF2B11322BB77C48DB77F7DC4FAD97D967990CB04414E3DD5F59F51492F84119CA604A258BC449AA334548100A4E820ED8E62A3168889D8D23464F1F34DC0E0 -MD = 5C641176D7E57D47024EE6149D713ED5DF27D76BA6A2C145C51746559A7465FB0A654D8D552BBC9F96ABA9E59FBC6F18 - -Len = 772 -Msg = 67B2619FAAF64FCD3EC0185032761437131683F4F75DAA2CB234F5C0E8014EF0CDAD47C93D3962052FA629CDC759BBA3EC8AB9CDF65D5C9B2EC6FA803DAF0A583FE1176768B81EADC4793E0CE47FF204C758B02DC21F9DEAB6267C2ACD5356D290 -MD = C884D619869B5D637DF0F75B72E00A8EEF151D4EBC917B6972226BAFB35A56FBE80DEC48ACB5293E74A745F61523E7D2 - -Len = 773 -Msg = ACA049B282819B944F1F6114F989DD133A8B777922A8D2D487F04776405C31DB13BBBDD2D2B7AD994B28903F9C3C74549B8AE0DDB89D20221B30006DE9A13728BC2A553C8363FDEBAEC392C4D9AE569ED57B52D8BC20F593D96D857B1EFEA18D10 -MD = 0DC549CF12186C75CEABC17929607B5966BB52EFF16A43E4A1C49B4C123707CD1275B9FE2EB3E3A057C11E4F894753C2 - -Len = 774 -Msg = 84D4E78D5A5CD08A94717D8AE14FE24E3670AF58851605DD337FD29482BA01BEFA38F954C9C5E021EEE41D1FA230C0AAA1BA306D6059ED113A9B9CCEB9F70D92A4B6886ECEB7E805D51E823BFA7A6B270199A0DAC2F6514EC6CC0DAC2E2D8CED10 -MD = 3A546E8A71701FE5C89359453F9F479C98DFE5A5533A4BCD19F92E308CE78C350486AFF625C0E6E56A2760C102F8478C - -Len = 775 -Msg = 43C5378EC8FB95C451DCE02DFFD1DD6EC6E73EC464AEB26D9BE6ACDCD10A246E12740D939D480D0F69FABB6216E3FBF6C53C723B6624EFD8A79E90BFEFA048AFEA723F54B0F72168EBD6B271F981B5395DEE468278C80B014EC0D483F3C037270A -MD = 45DA27A67BE54D22E1E4514758189D08A76F38F3B8824C58AE65F9BCFC2543AC3CD9458CDF6DE64A34427A739307C8D1 - -Len = 776 -Msg = 38A10A352CA5AEDFA8E19C64787D8E9C3A75DBF3B8674BFAB29B5DBFC15A63D10FAE66CD1A6E6D2452D557967EAAD89A4C98449787B0B3164CA5B717A93F24EB0B506CEB70CBBCB8D72B2A72993F909AAD92F044E0B5A2C9AC9CB16A0CA2F81F49 -MD = 46F87BC07849E95104E67CC3DC71BDC109C1102BFB1ACDFE2F6A23173B52BF836CE00CD7A5A5FFE7D3BB8FAB33DECEDF - -Len = 777 -Msg = ECD731D02EEDBE3A4B9FFD5FDA34CB343D655176C691D8E8FBABC6A15F73B8E168E2AD9C97361EAD1EBD3C3335C1FC683882B81DAF55D9D657DA01EBED9D06A52C5C938B1D970AEC5EFD5034CE61DC9F67074A2DA145C27B4329CFB0F8B489729880 -MD = A0A7EB87EF31ECEAA0F9D971A631F94C83086FE66EF78DABC623B37F5EACBB8BB8E5B63167DBA8F09E33381C538E9C23 - -Len = 778 -Msg = C9CD6851FC6B8031E039FB7BDD8F1A6D7EC7854272E2309DA9CBA90A00F1F90B5FD3AE6E394067E17BBB4BD60B7BC11C8F425C430303EFECE951F5BA99BF550D98897C3723D758764A3A9F1D0CB95CA20B0BB919F061BEE4F5ABA38DA0FD146E46C0 -MD = 4E820626F964AAD7965E069474B2B7691A3D73EAD62266C739AF9C31C957A18B3C31985251ABE309983236011B14AA0A - -Len = 779 -Msg = C48E7340EB22C6EA14ABF7890E781E355FB37A7C278443FC710E8C17B87D13FEC7153E8E68BAE3DD640F966E3EA2813B36B017DD1B3D8D5099C4CA1EAD1C9BF5D1B92214BA10E8E0D783CE1C364FFF56F137A03189E0E62EFFF2B3535C9749F1EE80 -MD = 3FCCFC6F843B3634EA191DA7F8EE64330C92EB72E82E8C7616DF86BC2B1E978D19089AD3C32EA03FCADE723B9FF91A98 - -Len = 780 -Msg = 01CE485175B07C55FC35363FEA239A26718D34DFC08E38E1391D4002C2B3F977A0074ECDA3AB485E6F3B0FE394BC64F187ED6A3B04A7B93EAE9876AEF77F01124ED2DD88956565669378C2CEE09D49728D3935F97698A6A3EF7C49E69104BA38F3B0 -MD = 3776445DC5EFDEEB57C355B9108724A544CC55BAF5C0D73641D04C7DB8A6320C8A30628A4E1B0D5893ED356512DA5B99 - -Len = 781 -Msg = 69D1FE474AE0892557398BA77643E7A7F0AB218374CBCE7A9D2E51B1B319EA39B1EED38378482CF5D3780F543A773D80C66783F11B793BA267F32F23ED16473B6488C4E1006916B686044247BF3777224D5F16233AFA837A9988E436AB5BE485ADC0 -MD = 29FDB179BEA32D45C4A60F1530571113B98C65BC53A0FA6748A37BD9857DDB2A4715AE1FCC73FAAAE3B010D3270CC820 - -Len = 782 -Msg = 79EF097DBFA16820E6A40454D428F3FB0B19047DD0AB46588F825ECC6344C53BDDACA3DF63E2FB087984BC58C22F2B61003CEE298C2B35EE788CD4C834A82DE93A04E8722826A645CC3EFD07F32B30C3CD59BC5C82CFF16B213A09CA24A53DA12E70 -MD = B14A4DB55AEEDA506128060BA01A135F23822C1DD2C439662DF7C4D5657F80A27637904F8C576E2599A8DF2841AE8DA9 - -Len = 783 -Msg = D03DD6E01CCF153ED2878C9D3DE4E0DE7D96D91A2CE3BFD7E77ED6652616EB87188C466D44E6DA9FDB2015DD896761B88033E0D98B960C322153B51548CF21EF26029556E7FC85D62783B676EE38FAEF56F156383CCD06915FAE4395B3403E50DB66 -MD = B7342A0E286EF5189F6F99CA3EFD74380D8B3C8918631AE37AEEA7DA35CFC706DB055956BCBAD0B191532D2AFD690EA7 - -Len = 784 -Msg = 6D8C6E449BC13634F115749C248C17CD148B72157A2C37BF8969EA83B4D6BA8C0EE2711C28EE11495F43049596520CE436004B026B6C1F7292B9C436B055CBB72D530D860D1276A1502A5140E3C3F54A93663E4D20EDEC32D284E25564F624955B52 -MD = FA12B9D070F697FD5391F3FC9C44056CEDA63F035D766655AA7D0A575ED55B15BA6BAF56300940B565E37A248E2DCAB8 - -Len = 785 -Msg = 6A15D2C891310B9D31EA4DE5ED861595938093F969102EC4E61F36688005876CAC6AA4DD19185E756AC6C75B1A77C46952D5147B52862DC108D8B690191DDFB93F9463BC95EA6054688AC748A519EFF46E0D6FFF33F312A9531B90E5B81D1EB9BC5400 -MD = 0BCEC29E8CBCC622AC39CAD32EF621EFC9ADCAC84ECB1051ED51E95C6417D7D991D43A1B164A2525392A686E45175C6F - -Len = 786 -Msg = 4799898B930C206FD677188EDFE87F53978DDFA62418695F83A764F096CF0C3E77EA9EC22552F4EC608B59DFAD49691B076181A15C9B18539A6A64443DBED8B575CCE0BCF1D01DCB3719CBFACAC94E36CD466D253F3192F74D0900667196BFFD8BFEC0 -MD = 53AAB61B397DE96E2A0380CC48BB5216CD1236A232570368702F744741F4383C903D851A4D23574083681AB11928150F - -Len = 787 -Msg = D00AF463BA4905312AC7C93AE0F5814D903C2CF3E4314A09D8083E8FF602ED65301BF032FFFA16E57CC1D39B78BE5F7F1B4E7D118EB4C9C60B2AA752377820F4B23F52AFB3DABA13C33E354F2AD791B98C0285B3289D017FD0B015E275F56452C64DE0 -MD = 95C85F1BB410BBC63BC1C7A0614CD07A665241B317F9F14999C9A3AFAA2D2C0465C1EB0808A03AC67BA8C4305EBBA0AB - -Len = 788 -Msg = 4BA02BD76E684B9DBF18AB2EC6A5CA2EAFDF25F5A7D4C90177DE0F93392983E680A71F03185136D6396A65F583837F84871CF564E62E7CEC42B58C8BA153952B28F7A9880D9D7B5FD8E1CBDF9CA005FD78D72BAAD574414E4128CA28730C29804C9CF0 -MD = 1A68DE57446B2F32C9480D80A3D6AF87C53756E85E10D7092D424CE37A9A49F440B47D5BEACD9D49B8A2A678DEC64458 - -Len = 789 -Msg = 4540739B329C3748092E2AAAD779D52393B8D97B42F784121F4C045A586BF21E33EC1A55AD2A16B398587A15297B9A8B5858572CBAA405275748ACA67FD75D5102466F5BB433A77C41F442120E1D3C95365C9A014B324B01A75D3182F88F9F89AB5B08 -MD = 9B790C740624E10FD2551B40E37721D7CD9FC79FC02B45B1519210AD6035C3BD4185D90F72038DE3B5D3304EC3C88DA5 - -Len = 790 -Msg = 19218B21018F5392D90433A5BB255292CE42EE74A3CB012B28EBF120F1BB35B3F0697B33043E90F4CA5649984EE1866AFA01457FB5F8A160AA54FB249E171436325AED03B959BECBBC8D6E323507470C147D7CF6D1CAEEA06218022444E01B5A2D54F8 -MD = 3D5A5E996BFA528EBC5179B7B51DF348D5F586D9AB436E33422E43E8CB94BA126B95210F75B6D75B4D9D5C8E8BAC6B7B - -Len = 791 -Msg = 29C1C9CF77BBF33FE3335014E7E88BA5EB777B55DF264589B44D05FC135E4C5170852968ADE4D911476D5C0D0D5E82506345A7B6A1A84EEAACDD49DE05487A6A861CF30AED0B86E320B73AA2E0BF6A67277662C0B7696E585E97F690DC51DD1F51E41A -MD = 334FCFA350F6820F308F55FEB200BAE1CD1698D2412F91FBE079D1888230830112C6C1A20E7F8C788F011D2C64A5DBF9 - -Len = 792 -Msg = 6EFCBCAF451C129DBE00B9CEF0C3749D3EE9D41C7BD500ADE40CDC65DEDBBBADB885A5B14B32A0C0D087825201E303288A733842FA7E599C0C514E078F05C821C7A4498B01C40032E9F1872A1C925FA17CE253E8935E4C3C71282242CB716B2089CCC1 -MD = 5304D6DB2730FB07B85348B0226B1A81A546BA1FE201ECCE1E552DBA6AFB84CCE7A6F954E3100AE1724B82CF1CBC4128 - -Len = 793 -Msg = EDE8BB44D6C9F552F8B2C14750B8D8419370145875D04CCB213E4BD41DA0ABA1CA36DECA9710BB6C846A7DB3E90AECD10492E8135A3289393AD1F8F30FE1EB3707FD966369F766D6331ED4DE80D8252C03D88F6101781E987185EC7E277BFEB7312B6F80 -MD = 165450E11F808E527E25ABF74F0ED70F3A4900E94B8A17A0353C6BFCC6323CD859EA4E14A253722543BAB77E6082F55C - -Len = 794 -Msg = CE727EA48D1188D5AE6308DE82ACE9B491A784153CF45690B8FD23A7FE9FA4F43186D423735D56BC9D6E4E69E7B203698AA2EAACFE42064EFAF1538434A4780F13D1AEACF78A5F84C60BFA2E8753C1E51A518B05ECBCBBD86FA27EF3B64838F5FF2235C0 -MD = FFB40354E930F9BE712AE6232963B8C938E3B5A9C11BB6D0EE6B7C459862CF60A1597E89591B7542CE55DB71B4D6DF71 - -Len = 795 -Msg = 3457335BA5117C3E7568CEF312C75EBE57BBD6EFE2C06E0D3457614F429A27A6216928507CB18C198CB9CDEE8BFF4B2EC62F29AA9F9DEF4A0AF45741CDFC3C5B96F10B8E2886AC4D24A6DDBC490E402031DAF68A742AEB7EC1C0426807A073C86C9EBA20 -MD = 5059291E4969C984AFB9D04849BA95C33325F6E00FF9E31560C41F188071BE5A077C372EAEBFA51F0E84F6F14442D1F5 - -Len = 796 -Msg = 886F0BBC8286AEFCE8684D589789A401EA5EC013B0F36CEB015860168458A68B66CE0917567D3401B6D3725F16089C9EF77978180B282D6C315B54A60D7E76EE1676C66C78367C2F3361EA0D7D88ECBCA4C4BB58381AEB2E5E061B6901C3684599B4B390 -MD = 640E1D483CB3FE7A9876010BA73F245DB6A5F189067786E3F914D3A7C8CB080AF22E940760D8A991DDD2CC3F5BD43D4E - -Len = 797 -Msg = 083CCE8161113669202D9028456FDDF2F9C911D06B732290F8C17F28675E71DFDAEBCAF0B0E2DFB89336B3B2AA6C21232949AB3567F10888437B8D895B4FD0E82D099C63B8578A51352215309900495A71BAC7B60FDA02318C381A984204532E031948F0 -MD = A9C2AC268DCF1F98C617E22397C4FEE947A1618D7D27C778958EB1415C5F92AED0FD6410F3A5F8A64D2E61A7826E257D - -Len = 798 -Msg = 57E254FFFEB91C9E6625991FC2AA3083D47BE7A967E187F72EF31EE024FFD7754FCDA48C584948BC4411B166326299D0FE63D2B11A0A5F9395C88F3DBEEEC5E130BBCEA280FDBE851C48BCDF49A56ED9BA9569C244A9F7665E1ACC7921DBD8AB0B9ECE64 -MD = 34BF06E109FCD0E1318776F86E628DD6C412E764AF7296DC1E556807779F761B06EA162BCA893DF1BDD9601FCF32A25C - -Len = 799 -Msg = 7425D92769338BB8EB433A25BC7CD734276B7735677AE2B95F5B485AF20D238C2EA6676ADE03BFCB54B4AEE8ADC461EE2DF2113987FE7BD3AECFE78EF6CFCC6FDB00C11CE655A2EE21AE4C9C0780D26999674A7C10FBC11780FB0D0C0E9166D34361595A -MD = 1ACFEC20936A47D1F24207A910F89644428F6D61AE63A5AD01B01CAE19D9E785D2C1E6B1774B944380DA01C0A740FBCD - -Len = 800 -Msg = 433C5303131624C0021D868A30825475E8D0BD3052A022180398F4CA4423B98214B6BEAAC21C8807A2C33F8C93BD42B092CC1B06CEDF3224D5ED1EC29784444F22E08A55AA58542B524B02CD3D5D5F6907AFE71C5D7462224A3F9D9E53E7E0846DCBB4CE -MD = 135114508DD63E279E709C26F7817C0482766CDE49132E3EDF2EEDD8996F4E3596D184100B384868249F1D8B8FDAA2C9 - -Len = 801 -Msg = A5E5E7F725AF8C544D93D2D409D6F82D3BF941D5F9783C279FC6156699A8D8D3133FDFBEA9FED5446315C33A18A93C006D2ACA4EBB4878FCC55970C477AA4E88D44094B0BFBF12C50CA62EDE8AF48AF3E96F78A96CC6DCD98480086DEC487DD003A4BEAF00 -MD = F12D414CC1A264392F95882A6788493CB82BCCDECD3816CE2ABFD933A98CBA80374C146BB6CC55D29B6B1EA656C224FF - -Len = 802 -Msg = DFD88A3F1A60E1B9A763B264CFF5CE6B34ADC92B3CCF29C6841D261D0DFF42415D10E3FCD96EA4BCA762BF5984B06F9DD2359538C6EA628D6B810DE79A6E572C18CD3F49DCE1CAC943E9500E19CA2E5B71142B9AC511F240BE6523A49A37282189D4A69800 -MD = 05F9395263E2F6B7078DE0CC489E97237996DCD7D5418B58F6E9B01140F534E8710A952A91B6D13E3E988044B806B789 - -Len = 803 -Msg = 33054CF806168A875E95D33E5B58622BD057A49373376322E9350EAC04F7424613A0C86802AEA9B8FD7BB93D41CEAEE53A94D0B66951FE0C7E93E75659A2987833765901F1A4A20A0EAC3F8AA4DC6BB075017812ED4E8CF883BD23AD17EB7DE6CC54B21E80 -MD = C803BCA9BF6BBE7D6645CD1A5E41F3984685332686E8780333D2D249A515931DC62D147ACACB12CE9DF08B23D485EE06 - -Len = 804 -Msg = 7E8EFC3504D6EFC19B36327F55DA196A13A082688FD85B63D0C48369149D6BFF4293D120A1CAEFE18AC17F046B4196DB0D6CB4CDE7739727BCB8880E652C60B2F48668FA3A40B1C94BB393E09E14CB1591343C943874CE4195251D930C772B9439386ACF60 -MD = D1013DDCCACF9E71F311E453A13C623130FEC4F19E35649778FB7B3E13E2A89AC5DF1F56A8086C24C184BAD7B8819AC5 - -Len = 805 -Msg = EEB67D90755792773D303BFD27895032E74F41AFF1B3C552A2F9707842AAD7745E31FCA6EA35FDD47EA99EB27A2B063B0268943E75E629073E77D7FEC8C2E8380FDD7ADBA292803B3E7BEF8D85B23B937BC2444AB69740497902A8767F19AB91C33EC65A58 -MD = F16F14C1C55C01955CFDD4489D1CFBEB55A32001B3E2AB9A316BE9351E2134B756F03BC57A2A85D4B4CFEC2E8304EE4A - -Len = 806 -Msg = 9C433E350E1BE986080C5757ED51FCB47EB31D70A9AB061236AAB0907C82C9CCEDFBA2EA62DA2C783CF5151683015EA75DD545E79BAD38DE99B287D25CE11C657D507D94435984A4276D8940F4EA571FFC9B550379F6148C720E4B9133D71EE120B8935A3C -MD = 5B83A7984F52054C6C8C0096121F2E836F69E2C299D8870D624275F5799520B690D707EE8366C3810A0DCC7C6A0BC29E - -Len = 807 -Msg = 769CB7E6B4DF1D6A4E50461EDF4DD06502F2EC543E85A3C64CA6B9FE378E71B1A461AEB8F12A16D4B113CC688BD3E142968DA6AD191EBD84C6FD77268E11FA83E1B5A8D61B5DEEA355E5BE623ECC5C4C5B11FA0B4951CBAF741A674065368F761594D0C77C -MD = 7F9779F41DF6AB0B61590885D71B110C7BCA533243ACEEEA8109F418278EF39CF0FAEEFB67E49AA876886B8978306BA7 - -Len = 808 -Msg = A873E0C67CA639026B6683008F7AA6324D4979550E9BCE064CA1E1FB97A30B147A24F3F666C0A72D71348EDE701CF2D17E2253C34D1EC3B647DBCEF2F879F4EB881C4830B791378C901EB725EA5C172316C6D606E0AF7DF4DF7F76E490CD30B2BADF45685F -MD = D560D54A2881ED47CC8C5AF9818FEEAF08B621B1AED4569D08807A0B61F902C1691D8B08FF75590FEAAED6E75F4C9E3F - -Len = 809 -Msg = 5972087DF84E1087BE6AF080329EF86D8823D4DFBCF32403E58F9F33F889C15FE13D36E327B78A61BA646D54933A7A7B7B55522FEB9C3748CBBCE5D9AD190A84A65CDE8FBC3195034D419F41B883AF393D39F566FEA0552119F0EBE6A36C80DED27C9E6EEF00 -MD = E698820102EDB4F69603E0081CD40DADBE77872B68BF220DC4C49695A98E2AD395F90157D983DDBD521274766B740614 - -Len = 810 -Msg = 6DB3F5D3691D10F0FBF2A40E56C0754593762446B21BF42C602790F3F0510D14464DD730D0648591119B425A94DC7474648127D39AD764698E5690D82357D3396DFEEF12A91F19EC62C6355A363563E08BA942A4BD06E2D05FA5C9037F3766304A640D01D800 -MD = 998B8C0A693B6E7288EDB3D9E30CB1264D78CF8E99C2609741FB776381E57F98448FA9FF72082650D3A0A60AD61D89FC - -Len = 811 -Msg = E5EC70D574A9AF9A358F33A15CC8C3830879D52939E6F95A695F76FAAABB988ED2A7BEF8974957C71090D3129E773B56DE379637DBA6BB29E8DC3F7116B67B690A056F2DDCE0A3C3FF65A7217D0F6EBA4BA9F5641EFB67EE88BDD80F0172086A60A9ED322960 -MD = 3779580DBFB3C5047F77985B90F853E271C5F36F3ADEEB700D1886B222A65D216B1E79EFA5D99BF0D09E9EB416677CB5 - -Len = 812 -Msg = EE5B52EF1C171ACEE68C2E3C4AB9BA08B91153DBA6C85CA817BC14E3484EB6B0E4D93766AAF37C3A571A52950EBE5DCBFBDFEDE238866EC6CF0B41FBD86518A07C360AD1BC4AEC074EF32083E9FD19B7F2C19ED5E7A0F162AFE1F1FD11C38F929C3D53BDBCF0 -MD = 4F8E8195940615BC15C245A0E62418263E4F21318D289A7D420DB19303450F03A1BB6B613AAF936C3392F07ED54217D0 - -Len = 813 -Msg = C27E137ADDECA1E45434891C08DE549E79A79D148E46B8A99727FED7C28CBA6662BB9C8DDFC9E631E410FBFA899B2FEA7DD27CB49DAEB1BC51C85F3FE220711ABB10836F97B6A2D0D27010719C002FE8BD88406E051506BD560E945AFAC765C8ECDC0E476ED0 -MD = 14989EE348405F81A720481109A57C7CD778C666E4A1B6269E25C9FB42438973B4E55D07022CC420CE17B0CAEB9904C3 - -Len = 814 -Msg = 1A4FF48A014B9B9B73ABF97D0D6C8043CC542ED70226C9A06439251E676B59DFB775688A6AC7BE695A4C768F4A635186C98F7D87D31333BC0FCC3562B41333AB41A1495C615689892008E50C46ECD6F0CA33672219F15F0F583248A5283B3EEE67A750E310C0 -MD = 5B0E6C870CE94D3FCEE560A0A8A0CB0D5D148BAB4BDFD25E51F481C0B4E0E5D3FDE89D69964CF03F2C02D5ABCA316270 - -Len = 815 -Msg = EBFE2BB16E038B5E58D23E44300E75911B153B031AE0EA461F3AEBF8DD9B4E4BE5703F18E8205293E2E0415AED09AC41E8A5937FCDA3796C2997143F5DFB6B585C7652F1ACCB8AB4B6123196628880670D5B07DD989E04474372E32FFE65CC7192C42D25B1F0 -MD = F82BDAE0B851ED61505C2C059786627DEE4CAB83DB59FC12D0D04B9E0E47B848FD0289FEA167BA6EC0AE2E9072C49AF3 - -Len = 816 -Msg = 006917B64F9DCDF1D2D87C8A6173B64F6587168E80FAA80F82D84F60301E561E312D9FBCE62F39A6FB476E01E925F26BCC91DE621449BE6504C504830AAE394096C8FC7694651051365D4EE9070101EC9B68086F2EA8F8AB7B811EA8AD934D5C9B62C60A4771 -MD = FE5F30A315584092A271FDBCF4347A24D14A1F98CADC88DF288C36CEA8F89E9020019933BCD4F5A7479E3E4A57644C49 - -Len = 817 -Msg = DAAF92F1DD17419CB8CFFC3B36436412E393C29822EACE765F18D5531BDB87BA878A816D73FA52842FF6A4590614E9B50C1FBA6CD3D538E8E07E1BB7967014D5E4906BB5CF070097D4B57FD44E705AE825A2AF35E265639E85C49323CAE2BECF48C13E400ECB80 -MD = 763DBC5BF66A974AF2E5A8708D7F109E2DB2CEA08482D3D4DB71BE1E815A5B02B6A95B54628692D248ACC74B6EE434A9 - -Len = 818 -Msg = B5655245E132143776E7DF7EECF7590B09EC823EECC6E2E3D3E4724C4CF7264094A7CF6EFE235AE4CA71C11A64D020FE13F472259AF9D0C8773CB0FCDAF86D2D602CFAF6690854CB8831730529950DF7E65D8EE9CC3B4C89CFECF054EF0D4BF8404D8F9B849AC0 -MD = 1619E8D520B76BD14FAC92D1D849D52DA32AD38AAB3D671DC6CF0C573B19CE6E3F5A26E67DB1C09ECAD452A3A3DB33CA - -Len = 819 -Msg = D4A9D0503F80C8A4BE00A5A1BF4139B846DD1784E9547D30EBC6241ACFDEEC1DAD4BE6D11A8AEEC157D59F61972414BDE06D17CF56274547201A5F90C9EA82B64E88D78850C7F968E15AC8A82BF08FF53328A3E15DE615A21C28A3D42436F84C55F234EF23CA20 -MD = 56CE7E088583EA8D818C1BB0B05707BCCCF7392FA31C0403AD22E1599A81D8E390181D14640E065FB4C0D43B9C9B7CFA - -Len = 820 -Msg = 61EFBDF5987F9C45CE71F21DE495E46DDEAD02E679ED9C83A0613BE3FCA8660145F47340FF300657271024C3E8BB7E27F31406EAACDAB3C5F299B66C101B0083EF230A7283E868337E8699EE3A5723C42BA488B0FCDFF172E819576C5993B496BD768276A113E0 -MD = 3023EF2BBAA46623E73B6B1A9314086FD9F7D39628A0D00447B1F7E8228CDDF3CBFDC3C9E329078E6ABE3CAFDA192995 - -Len = 821 -Msg = 6674A76DB4DB544DA1D6FF5D7A01ACD0BAA446911421C7BDB19F347DAC8145337FA2220A1760AAF88A5803A6C2502E796BA486600946B60F2171E7EEE138F9A93CF7EA8785496B078CF26FE15627240D528B205054AD68E6FEB7F5F0B0DBA570A86A44B88FE3A0 -MD = E841DCAD6A641312A2CB9D42278F45F29F0D406515C02617C0F29B1A5E0280E5B9B202DF8B020CE6FA8F6AB8031CC603 - -Len = 822 -Msg = D5CDD6DC483DD693792AB8599E31F7E678E2E3F50E9B09DA1D16537FE21B8700B47CFBEC2F2B31C83CF612594A3D847B2A0497D3C1A4E78A75CFE94B850F08580D799921A2A105B7280B07629845E2CAE0ACDD43E62C3CC76F2BE06F11C233B32C8CB32D2CAFD0 -MD = 6EA050F8BC524668E04C7D210D38E39EA1AC6217DEB6DA5E91260E1040923BAC7125AFB9C58521258577731C831F42E6 - -Len = 823 -Msg = 95430200EE2A59BA3D4FF5176E9328EEB792F57838631334BA0D95862CE2BA8550ADDE662EC5689D2932B6637ECA4268861BA868C5FB08DD016DF6E3F5E8F7BC86C063F0B471A94BB02C999C13D8A89F2DC536ADFDE9048E836674E781CA2F5247A23FD280CE30 -MD = A6F7A388B02B9269F86DEF1CC56C95A5E75C627764587FF0B5BC1229C8147753BDEE14FF187E3BE6E9565D473DD98C89 - -Len = 824 -Msg = F13C972C52CB3CC4A4DF28C97F2DF11CE089B815466BE88863243EB318C2ADB1A417CB1041308598541720197B9B1CB5BA2318BD5574D1DF2174AF14884149BA9B2F446D609DF240CE335599957B8EC80876D9A085AE084907BC5961B20BF5F6CA58D5DAB38ADB -MD = A4E5EE130FC105818CD1A0DE74F1085B9B4D93889C509DC3A208B5230D39D8F304BB403F72BF0CF5E02C4C4A0831F328 - -Len = 825 -Msg = 96EF70D6957AFED1EBF9C5E3E1CA33DCEE14589C8AD2C7819B401D8C93473A06D0CFED12D4155488DE13496426F7808C666927DBCC54CD58F82A9D7879541D6F66FCC0239E89DBA84C85AA34FFE93DB632AFE2B490E2794F95A8A6C14706759688696354AF9E4C80 -MD = 9D732A4792703BFDA8F2E4735191D0831456EC666317A8799C2AADCD4350B13848C021040B4C96C10E809A2792CE3303 - -Len = 826 -Msg = 22BAE2BE6335304E5F9779FA2FDF496D9636492A8B3E6B650420DAA6B45BE8B25A2F00045DB1364B1F69DF590EEF88E61EF2F2E11FF9903C9A484B0EFB2A65E2984710C71688A00A8C04AF9335A826FC0EDF197B3F3BE1AA4685BD39847A18B7F388C56D5CF749C0 -MD = 0D5A189C7A49D82537363275C7E349F56B597D4CFD6B50797CD50D4532626B19C50A9F7FDA891D9F1FAA89D37FFBA53D - -Len = 827 -Msg = D076043F4045A478C51530D457FC950916FAEAF555C2B28E8567394D0BB8A3C7D8A7225E6C0C94D39D03F0F50133ABBE6F009302153014025FB4B1F7B8EFCC9F4F9C3EAB0608DB41095AAD0D2B63037F3986DF71D6651946EE9F18DF52635BBD360F21E2555C5020 -MD = E005D56B729ADC2536776B871A9B66D11D182B9A02B9EEB811FC953839CF869AE55ED84B36DB2B94A47EDC440AD177EF - -Len = 828 -Msg = AFC0DFAD531BFAD5320903F56AF3D1C6A1A7EEB365004B5193F48B3F1B6364B502B3E767BBEC8D3C8CB1888BEF939745427AF225DB0B80227382E93478D80798D6F7CC79E1229126763B5595747708412E2A1065468967AF88E87CA44BF7C70CD94D6C0285D77D20 -MD = AE1FF5C6F4F37E026200CE09DB2931DF138D7A1D0C56D7B760A97A800AB4D146076DE8197418846703BF83C2BC57F282 - -Len = 829 -Msg = 38F33BD532B7A176B1BBD5440A6B6F34BA5EB710A4ED3B73195E79CB0D227258C97771B69CF8319D30F71A86B06A04D4F8F564044B25595FDDC559435426F6802FAC0A9B8EF02A66CD99E052320F3EFAC5E98F41DC62177FC5422C0C7CFFC845B61C93465BB61A08 -MD = 3AC05E71A1DF7205FB3CADA0291114D9A0D994B7CE8B8C5F93AC2873F9E5837A27EBA4C780CAC6730942C1BAB7535E2F - -Len = 830 -Msg = 4A1D225317981D38424F1CCC96F7D895EFD4DBF51A0B568BFDB33F81AAC34098EE0D1F8F5819885FCF53823851E2DCDDC4D42164E223DB7F0C8A25655E91D193D595D31808C1B11115BD5913548A2A7F7C954719A1EE305D67A59AB3EEE0BD1326D2C46FAB79FAA4 -MD = D4EBC8891A19ADC502E375458972C8AB3EC87D1FE0C9DE827A8A972FCA6F5978A05286121ACCD4B489095FA61FAFF9FB - -Len = 831 -Msg = 071E9535D8B487FBAC04DD0C720CF0902365F55279752F4A4AEA2DC849F6F596562DD874C2FBC90A0773CB9AFFD80BCDEB16673471B2A4EB40410CACA3D7DDDC57C727D3FB4D25DD147C77426DEF0A86BC0840307F6495493714BA9C0C3C1F4959016F1F81A5D466 -MD = 4742D16470F6D51DD37312EA89C6B71E992446CFF79081C36D3C070965CC651F670F4C1833A0F5A9B30362B7E87CD5CD - -Len = 832 -Msg = E35780EB9799AD4C77535D4DDB683CF33EF367715327CF4C4A58ED9CBDCDD486F669F80189D549A9364FA82A51A52654EC721BB3AAB95DCEB4A86A6AFA93826DB923517E928F33E3FBA850D45660EF83B9876ACCAFA2A9987A254B137C6E140A21691E1069413848 -MD = 9FB5700502E01926824F46E9F61894F9487DBCF8AE6217203C85606F975566539376D6239DB04AEF9BF48CA4F191A90B - -Len = 833 -Msg = CDF3B81753BBE183F089CA5B99AC4DA2944DD2CA4AD5502A5FB27D51FB4C5DD3A73337F3CCCD5F3EDAC73F23BC14677F8862E94A9C899607E9CDD242D399C9CF2CC17AADDCB2B1FA86691B82BB3F80B8F53BE95B3806BA1D61555ADA06C1F16AA011F99CF8EC913980 -MD = A4E39B855CD57E87C38DF68AD1A5804D3F2520DE1251B03D56A2E3E44DF19BB6CA2BF893998D301F32A0FD070562CD1B - -Len = 834 -Msg = 1719A08AE56DA8261AC8CC3B0E644425C1A4AEDBE7563BAF61591CA0462F4AA5D0D31CE15F9A616C8980017C0C886C80AB258958074ABFCACAC023E671D8509AC053F5AF9456C22D9A85BE4D1788DC12E7F14C076534BEEA7FA37921A4F1336B02721AD135B6E57C40 -MD = 4E01921D97D824C2C644889315595D544AEE74C63CF2FAF684DF9E5AF0CDF7D41DC303916CDD7327D85220FA342953F5 - -Len = 835 -Msg = E483D597CCF87190A723FCB835B7D58E051122D6641B5A2BF495BC121B50A1D087146DC722D08785DA3690C569CE1E4FB0C1241E501A4D3E438BD598E637275B08A3130F13789F01E1F0B87317BA3C70155E6770060C1058C73966D534B38D1D99AB40C39810428000 -MD = 352B6DDC91B0BF3588E3162414BD3B0997560F69DB5EFF3889749AF8408C67112D86EBE0B92878825ECD94FB6906BF23 - -Len = 836 -Msg = 6C9018345E122A389CEF69E5DB5FFEC001A5D9BD4ED6A05C82D236CF90A6D4FF1AB5DC991572097413D308272FA40EE4EE7BEA95F4EFDAAC6EE20EBFFED180C9A002F491CCC42490B1E51A284E309E326F43530A5C2745E82412C6A6C7AB8603E0F264F8B9941FD260 -MD = EF9B83F9BE30F51CA10D438B3E2660E7852120FE8239C1CA8D11DB34E55CF008C3646FBC8323DD7CDE227FD3FE32373C - -Len = 837 -Msg = F3160A912C1F7C08CEAB5E6C6E94C50FD124F3DD9C4D8034D27C80B39B7B9BF130F861D365AD61DFA407A8EF91AEBEDBE23E9DE96406FF0C6C312553FEDB125AFD59F7711210861A5A476B293F3CC355425CB949C2E833AE4A30DD9B4CE35EEAEF2FBDE4FD6D32B660 -MD = 72D36EB3A2E5846EBA50CF80C641AC96BB05A4198181786ED4D6E024629D74363C244507643F698A9069309A95EB9BE3 - -Len = 838 -Msg = 4BF1FAD35729900567FB4A3E0D5681C689CD0066EE0E97479A4A746F5E771517C42B6B827BFE16381CD52A985002160833BAC1AF81269F18821B0E6CD6C54AD33827BE5094BAFA6A08A67502714EF0101D5D91E8AA9AB81031AD2B6DF4963709DBC790ACB88A527698 -MD = B5EEE0D6226C523816966C64550EE2D7119FCB3123754ADC0BF17894B9C3C4705C02076C69D2B0224FF10A788AC34018 - -Len = 839 -Msg = 195361302C2F5B1B927CEE67B003E885A4E1D4FAFD7D13B02F5FB743608902060CCBCB200A57B374C8D220828DB36CCDADD6EE2AB33EE53B2002203D632B36B45E13778DACE865A715B375FC8CCA7FDBABCB5F1FAC8BC2B890D5A460583BDC5CFEF67A0BBF143D3918 -MD = DC52829160F445755222FD1704BBF71AE89C8AC4993619BAE81E437598DACF55689BE294FEEF0AFC013F4009C4AD57C2 - -Len = 840 -Msg = 64EC021C9585E01FFE6D31BB50D44C79B6993D72678163DB474947A053674619D158016ADB243F5C8D50AA92F50AB36E579FF2DABB780A2B529370DAA299207CFBCDD3A9A25006D19C4F1FE33E4B1EAEC315D8C6EE1E730623FD1941875B924EB57D6D0C2EDC4E78D6 -MD = F2E0FF6CF4801CFF2ECA1703E4E956C007A1F2709430F1F7A0A4FDD16A063522A4DFB6C41FA529C2E325F8CDD4F8DA96 - -Len = 841 -Msg = A9C9225032B1662ACA561F01B0CD87798649F98A7C3C71F716AF72E55838536563BD092AEC04323328C107EE20D704D0ADC7C0DA8FE6598218078DB1D0F00874BFA7048039416EF082B6925623FCEEB145919D75C27591952EB7B363F784258033AEC75D5F3A9D81CC00 -MD = 302B7E3C0EFB750064AF97D5B6162B4264F4531D47B426BB3CE80AD51ACAE452FCFBC1CC36C33AE1B243B2716EE2C0FC - -Len = 842 -Msg = 1713AF8638ACE90592AC2B3BD76514C19F032C734641D29131412FA04ACD5C80CAE7FF34675E7B26D38488C0A5A34F88C36903ABAC06A319F59559C52F409C83C92CC07CAE1E1957F1B54ECBFC52F5F38F4B03D9573F5E2F5A5C7470D7F1F0BB4D356F13C4D401580400 -MD = DE7724956AA3A1326441C6AEE04AB814BABC88C1C077EB6BCD54D668E18A07363EE0833EEC552138F74C2F687B26AF71 - -Len = 843 -Msg = F0B3C5E666BFCA1D234692223F77A6B80A0AF6C1E2456E8BFFE24147DC8BB7311386E21BE38FAC428447F89CE69BF5D399D4F10CFCC384B0643229D22AD5D1A96B5AF06743CBF8505C99171439E6F6305C28EC2D87473ED6181BD2FAB7C35610FA3D4B373D5683904EE0 -MD = 5FB0771CCA790E3FACF2124DDE0FB45DDC2C09542EF7B99BCC55A826AB6EA1AF7CA7EB7F60E0F370DDF8BF587B8EB589 - -Len = 844 -Msg = 51F0F520821988794FBA4A96C05CA8128955155F49F5B1D4609C8BEB3796E606E105873C4E1A9E1A1BBEA9C037BFA266748DE15EF59A3698068B2F64E448661E528299DA53F217527109628261FE236227CE792C93C27A86B742023A91E9F4EDC9C16AF3F9720BD6EB30 -MD = E7F123DD98999008817F464F81059D7E42B93953E22BBB76A0445F51F7296ADF09862FFE7EE31CE3340EE4BA27E0775D - -Len = 845 -Msg = 5A601FC60FF03D6849FCD88E8E124B8AC906EB9002B91465B98EEA0F1C638EC35989EF537DF63FCC37FC465C3AA0E409378786B21CD884CFAED67C00A4784DC7855FF0CBF4DC78A9FCA92EC641BC5EE01960E6FDDE2418FFEDC338581479B09680C1579A063E7D7344E8 -MD = 50C255C46BB87D07E4351507A72497ACD4BAEEBD8ED86E07D563066D71E178366B8D17DCFFE5923C6942C302C081483F - -Len = 846 -Msg = 51B98503D91D779B7661CD7D28851F2F5FBD10D3FF1ED31743A9FC4B6D65FAA01E7385E0DE50DD1B4BC392D09CBC2042DADF5A827B305CE513648A46B35C003D6EAE1524379BFA009FD0CFEC537A5BE2516A524A8309A65AD93AC83B83479F4BA700307A7A1C5295CA18 -MD = 6808416638506B99B21D65EB671537BFA1433E46882292F0D280167C08259055C1E20A5DDBA70FA48BFFF733F8396643 - -Len = 847 -Msg = 3DD565D9B8F291493D80301C50833F016FDCA70D35E6B66D8ED41AFD12B21AF8C675D487012EDC75A168124C9F7AFFEC4DD754A3B3050AF799D23E9322C328C61E131789DD7EECC47D0D973908A4B2706E3AAFA9CD9285470DD1877C164B12B9E45B7E8804D1C01CB866 -MD = 6511A92D8735AF7DD17FA715F0B8118B3578FE0A02E8DDD95F21E3F5F52170D714DF0F6E48EC28EFF1BAB6874EB52944 - -Len = 848 -Msg = 5954BAB512CF327D66B5D9F296180080402624AD7628506B555EEA8382562324CF452FBA4A2130DE3E165D11831A270D9CB97CE8C2D32A96F50D71600BB4CA268CF98E90D6496B0A6619A5A8C63DB6D8A0634DFC6C7EC8EA9C006B6C456F1B20CD19E781AF20454AC880 -MD = 62029D962D2E323688DC5851C549DA39EF49CB994D2D6C51C57B9BBAB375AA10BD0605208D9946EA472573880230DD2D - -Len = 849 -Msg = 8D22D0A3F113581C2C91A309747D3480D111FB0162796E06D48DAD005BD2275BB189B08A55FC56FDAC5D28BCE6F9EDCDC32EE464C1675C738AE8624CD20F7FA84A173329E3623DF7541835FECDB68416F665E4F5B4A357D74AB09EACD4EE6E3A301733536294A937FDCE80 -MD = 43F03296AB62F3EF42C6EAAA7DD1E0B4899E7ED731CBADD97B03E9091C7D80E6E471DCC15997D366A7A981C6E0AB724E - -Len = 850 -Msg = E7EA0B40D3BC92E9624256442D52F477AEBF8473F1742B50C80783548BA450FEBEEC40D7DC7D3BA8D2B03BD72CFE1E36FEAF85681D155C0F435195E7533BD6048FD0796C05F6BB7B539F9EA5F51C16C6AC74DD79C3842218565C4B46D85EC00FE324E8489FF25FF5DFAD00 -MD = 509D73FAC7CC96050516A1FFD76EF06193AE250B27E4BEEEEDE5967275925B72746393BEC23BB895C5BD4435A0C89E71 - -Len = 851 -Msg = 60A997F14924AF0BD818AAB8FB4FE112B298FD0D7556A4A118974E1612EDF6F479C5247F4BCF1E7ADD3D1D485317C668A1F627E0181F9E6ED35C4499A487783CEEC5F7AD330EA18989700C4A622F578A4A04FE0DF9ED9A7E45D7E5D79E5F26A68B0CB8D5E5D96CEA36EC00 -MD = 8EA60FDBB4088BF47FF681A99AF51DB28F94C83D3145450AF618351F1CC7892DC7EA3432066BCD53912BAF606DC481CD - -Len = 852 -Msg = 162EC5B24DDFA48F4AA65289645F89CE3991040461A4240C59397253C89765295B27B12E19D5C1CF9080B45AA7BCCC14A0A79B3D7C428F48397EB429E925B4FCE06782DFE2487C6B0F0480B8124A15F6301259AD8211C3D859B705357E8D23AA92EEE769149F5171A33C70 -MD = 9AE98006355F5D2C4BDE2B70A0D7529D31A7B96ABEB50E6B21FF7F2A3C7DAB7EAA5E43397885E6BE35A5BED277A4D83A - -Len = 853 -Msg = D9C4E4068DD2D247BCFCCAEA5734472961D5C916EEBC714CC0FEE54141CC5DA3435CF8D492FE3BA399ED175911A195FCDFD22EFB57FD9D7D401C445B29AB330211E3103399794B205EC65B9658F9E425972C214ACFB1F1B481CBE2F4CA561564DA47383772CC8A190A1090 -MD = 64F992E7775300BBF9864F48D46B508EAB6385A7E8C079819F8C320E2AEB0F9FF474EB10FB25629276D643102CABA138 - -Len = 854 -Msg = 574493FD995F2E299A0794B67AEFEC00A2015B0DA8E8FF1C1913457580BBF6812551A2F45821B5C864B065E9CF8CD6A4B2C7E11B64F7F572824014FDA485FD6235D30E9B7ADA48FAEC98F6AF9E5022E422037AC57EDC00EA528181E780863EF47E834E0F457FF410DFFCF4 -MD = E099303941D3F322A11D9895CD149E8FDC126E30FF189051E4C5AB9646244C35AAAD2A869AD0407E5FF259670F72F054 - -Len = 855 -Msg = 3AEAB6285D74E6AF887D78B6A22059B2238CEEF2482D961A9C36A032158A8262061336ED09FFB7ABBD3D49B8EF0851DD5DAEC4970D27F6A69BCA5117AAE0593AEAD6BC6615D11ED11B057DCE996D614FA80DE96EA704C132578E9F20550659A6E483B4893122FA3B224022 -MD = 6C5EC6C24998A64D52DEAB502B5EFA504639CC0AE7C808F32D18FD94D6DF9CFD785A2F3147FA9EB0055A9C415AC407A8 - -Len = 856 -Msg = 03D9F92B2C565709A568724A0AFF90F8F347F43B02338F94A03ED32E6F33666FF5802DA4C81BDCE0D0E86C04AFD4EDC2FC8B4141C2975B6F07639B1994C973D9A9AFCE3D9D365862003498513BFA166D2629E314D97441667B007414E739D7FEBF0FE3C32C17AA188A8683 -MD = 25E546F76EA9F98E03E3B2F4AB608185073658E7EDA0777BD5B047A59085C3C500916347D4F77E38E35159AF133ED638 - -Len = 857 -Msg = 11ED52B37CB6F8AFF28BFBBB49E4E346B84CB02B5DEA39CA1409C16C589664BABCE3C7AB4539626907269657249DEA708A63E1073AD1E2AF1804E43472399B6EE58992638254B581843924CAA9AA3C461D09241E76FED2C282E07E95039C9889DD6383E8B1C941D70B5D5280 -MD = 4FC3CB21AA0777BC43C3C3CE81B659D15B72EA8B83218AA038C27E85DE416394F72E2B4895EAAE75C77BC76F6477A4B4 - -Len = 858 -Msg = 716B179648AD3C2346DED9AAE6968D91088CE60038DA2898BDF5645EA6EFB342DC043F21ED12CB2503743B618600B92EA66543A0B676165A2C161876E5E74917D1CC8E6649C51B6C1DAAD6BB39CE9362C1043C6A2DB31C05C64CE78FD3A33CA595A534FA036E40A89712EC80 -MD = A595F57845AAB494B81A67B5BEC7659F548AC66700FD188D3E2DDD75EEBF6FB229B7F66EDC28BBFA5B2A75AF1481B0A9 - -Len = 859 -Msg = 9FE7597F6E6F36CF0880765DDA6B7B9DDFD35B1C1F06F08A234751DA553BE2E54CA9FAA02751F6F44C37A69F666D12D80ECAF508185831DACB5014CBD3F8097B2D84DDF808CE2286C8D5502C3740780D2593B037A24A9A5A27C347E85C6C985AA933DD204E47D33EEE294440 -MD = 735C55D2FF1CB782EE14FA8076926F47ABBC0FCE23D1036EDC4AFF700916E7FAB5ADE6700395B81119ED5E1619F610C8 - -Len = 860 -Msg = DD644126DE54607B612C2384A80B3B47F3E3278BBF40372D7DA4C53003A4F7D39E845A7EC6E6FCDFEDFAFA31C0B13F8988F48F2329C0533E16C9C84FF40C123C421BFF9D8CC1B5561F1BD89178360ABDA3B29CA3870523D18FCAC8FF4B462C3C0AACDDD7FFD183FDC2E65810 -MD = 8467F88EE77567E477D5538B09267F43B877A462D30E84783F06A087F52338DBB85AF7C7C37D068165C4AF47A6CE2F62 - -Len = 861 -Msg = D5836C5A1E008D30DE039FB99096EB19D3A679E32D33ABBF7F414F37A9B1B790AAB4625D50299487BFEED13AFECD7F6BA9995AFE7872151431A04E04D101085DB55A6703858F0A43226CBA7343076690B2B97D58F1B39226F5353073F53C4D2B9590AFB71034B2929340F528 -MD = F9A185BFBD485693D7DB71DF6A84FABF17EBB9A9D7244BE837A930D05C00052A63677DF460BA3BC9163C8652DF429C3F - -Len = 862 -Msg = 5AE530EA690D546A4B86ADA0775066C3C7C94A8F0503A0F1939EF21BDF7916CD3D63F154C91C401B9A0A875DC17927E2FC0CF66286C8A2B2139F573036CAF94B2DCC2B04598ED332975308B684330C8FBB7045690E25BAE8CF2015F9927C73C529FB699F60BB9D272BAD2340 -MD = 259AC964B5497F84BC654659BC5BE4E5D52BED74C363FC1C0E7E25EB1C1BF74D190AB18708598D6AF9262E8E2B7FF6D8 - -Len = 863 -Msg = B24C20ADA2E35BF97724BB745334D4DF9399F22CC3D7E249ED004AFA98F4E2CE79567AAF543EBEF35DAE9D4545185B88BE1D33E2AB5E5B5FFBFAF00BC96AB6F4BE5A6A3E12E173884461C5DB1E67A81686ECCD9B45D69371546A28C50DC3B2D21EB097D20C14A7EC4F8F8C38 -MD = 3B28C8E359D07C5F97E426062629354F2761691457A99FF84A74DEF7C1FFD50833DEEDF647FCECB382A8584989168B82 - -Len = 864 -Msg = F31E8B4F9E0621D531D22A380BE5D9ABD56FAEC53CBD39B1FAB230EA67184440E5B1D15457BD25F56204FA917FA48E669016CB48C1FFC1E1E45274B3B47379E00A43843CF8601A5551411EC12503E5AAC43D8676A1B2297EC7A0800DBFEE04292E937F21C005F17411473041 -MD = BEEFCEFF9E2D0825D60EA20E5271BF49C4AE3A5B54B56050988DD3DF5DB5EB4F1002EFBFBAED2FC72179DE44116976B2 - -Len = 865 -Msg = 6C089DC0C0746EB94EE1BDDD372CB9FCBBD340F858EC3379B1B43C0B9F48E9FD66FEF9AD9AD5F9FE34E8FC385F1F23DDC6D4C6E4DE2AA2EECFD328EEE188955A5D8A3BF87A885DE41FCE956520867C43A00E36D0B6943B470B52584F5740058D78031B46DEAEF6BC9B76D02880 -MD = 569976255B553BB13952EDA70C214CCB69D328F32A9B52E1C82F657114F5C14023A01769BC98338E52DDDCC1AC086B39 - -Len = 866 -Msg = 38EF1659BF482F6DCE756B7D3B7F96AA8FCC7C25A000C590CBAD9BE30F5BDDD941352621883D0E5135766E147578D3553A484BD407011653DB0105CF28DD825836ABE332C0E04D6E36981290B21695B213035F4A39A7230B93A1174FF7D6107145273A42177F9649D5096DC980 -MD = 5AFD77D9F4C88087B1F8C76D13A72F4C16190417F6FC7F94A52E66253CF76022641316542F6204725D126D347A04360E - -Len = 867 -Msg = 1ED4FFE25D9FA1F051658E44DCC5299DB496FCF0BF7B5A0533685BE2A96198C15259A21527C83951DD8AFA04F65978A7CA01CCD6DFC6953EF152B8B112980136BDD47C78B8E8FD660BE8CCF67D890173529061C722ED593478ED4D2EF7FC0787E2E259045259EAA8152576B520 -MD = 3FC1BCCA7F056A2EFC59AFE36B88A6CFB7C95912DB8092032D1787FAC95A1F85A302574B6EF8878CB0E84E469D32FDE4 - -Len = 868 -Msg = 4EDC5CDEBBAC7C80D4C9FDFF4D3482116A02FEA7E4311F6AC00E17383C6E4542D9F51AA753739D1250A955B37081BB573B0F06103300CDEC753C7EE544B36A735418EEF115BD4777871F887022893C4B51E54F90122BF9A06EE20448A7B75EB649A36D6E543765489B13A1EE20 -MD = 622CA400093AEA4AF7B780541C1A28CA337BBFECEFA3D76AEE5F06DC64B224F4E563798D9F5A35353D1C8DD83993BF28 - -Len = 869 -Msg = 98450F06D846FF0F6DAFB7FD5A9E902537527F31FA6CEA70B8F22880A9DD01F1EBDF20884D235B884F438CE98B5420F195EC0FC4631FEBA8964141F28EED890522DD31F93EDEE85F96B6DAF92A85BE48E959642E922299FDE360F25B5BA2BBDF1AF40A222D09EC045A5AF5C608 -MD = 99EA2C992EC5052C1D0EEA412D2139E5761758718965A0DB5C63C338D8429373B22126C047FBCCD13C57F09C676E8D0C - -Len = 870 -Msg = BD8C839CD9FF816E7D8706EB66F2FB60D3EA400394504AC21A3AB17DE594A26A7334A8F7A6AB5576EA8D78A6C69F1D9E3EA5B7AE20B2834C72FECB08423244FB7DB810CDAD3F041B54E12BCFA6678AEA075A366369525B195173665E78C0953EA46C4116D7EE9CEC0041A9BB0C -MD = F5A094C441D09FD8287365A150FAC458F658B97EAA8CAEB74752562CBCC9D0C93F6FFA2A26C3529523B2DD3452B9E312 - -Len = 871 -Msg = A4C6DB6224A23DB87F291FF0B0C6C2A7925224594E60E1FAD4D4EDBFFA35F5EDA3798029C3BCE4DB2A78AB04C4A408D5A542237DCC1330AF47F0546D35AF06B2977DCE2678814E30B45418B5E97C6041BBC13697692C347769905D5CF06877A1EDCE1D6AB4F10DC0FB4F314648 -MD = C1199C61DBD25E722EAAA19249A6AEE1A71E05A756EC99EF9393032FC3DFB9D44D74B6B9359E1DB9F965EE30B522B6F1 - -Len = 872 -Msg = 758EA3FEA738973DB0B8BE7E599BBEF4519373D6E6DCD7195EA885FC991D896762992759C2A09002912FB08E0CB5B76F49162AEB8CF87B172CF3AD190253DF612F77B1F0C532E3B5FC99C2D31F8F65011695A087A35EE4EEE5E334C369D8EE5D29F695815D866DA99DF3F79403 -MD = 7D18254D46A14D0383EC56AC9CA2FDA7885AE673468C9F3B45BA792C2C23C9FF82491E6AECA15D076AD3A3432CFA650C - -Len = 873 -Msg = E0473E8455316C13A301D697B9C17DE7D843F6203E669CF502F2E7260F0DC0717DF3AF7C64C3E28DA3A46C2DF401CD0049E5008D2FE32BE8060AEB272720585B8BBADB413547FC5EB59680CBDD68430B7937A5FBD3E83F9DC8D08CC928F48773A8166C4616C53B9CA0E8D56E0000 -MD = 9651815C4DBF9921CEABE8086BA72913AEF74C86F07772F7B22267C54A85EEC8B7C3DDB618D9210E1A5C693409269B2C - -Len = 874 -Msg = D9293EE8603E4D1977F7ED45626ED5498D7FE581F27BD0E62A8608CE5EDCB826D711830E50840D2E532EA5DB6E668563719B6FC8FB317C989C692C5C2964E5323D209FD600FD876941A0F8D6EFE5EED4EC8D011D6147B4E75E1062FE812A27A1D010B45E9FECFF24C55DCD5F8000 -MD = D06968F24688B85736229A61D3A09D87275EBAB4A352A21E5DA21665DFCE5F17EF81B3C2B00725220DD74A3DA7CB890F - -Len = 875 -Msg = 885AE9439FCF219F75F227AFAE8AE85183C863D2DE3AACC2D3633D90020B9DDE7CDF0E5AE202FC18987F265F782459712A43FE2C4D435E64E6DA7F813113F566E4EF1E445E36AE673A34733C383DC421F1B13D7561A65BC9AF5779B9E65DD51DC98AC6CFE1B7412B53AAE68FD480 -MD = C57930B30698A18617C32028B20CBBFFEF4E0C3F17C9F0DCFE66783DDE7C5E419BC72AB7BAD1606658857E13EC54CF84 - -Len = 876 -Msg = 94BA5F913C14061E96ECE9E552301D4A1ED6C43CCB8F86392A0D5C4574146BC1EDF34CADDCC197F8AFF61C1DE42B92CFE24908D88FF84952E6A60BB81392AA7110EBDFEE2D3627481BCA009769A4861E7840D83D316E612A01820D1483B07E393E9C75022DE3D2323F026B0E3840 -MD = 28D2A167E057139106067EA15B19EAD4883CF3ACA02B1DEAC3B77C9BEC1E6162330D66304E0DACB21E3757E082998441 - -Len = 877 -Msg = 899A55982CC299EE96744F2A374850A496D86A3386CDEB1633DB5607174A8EC31FC881DA9B8E2137F92625F33A69769DD830F358E64E76605CE0DB6DD547791DE9F2D64EEEA8146D18C59F81B9FC93D91BC05FB85AEF9F2456668EC7A9DA0A86F8B4D607226713741393F744DC60 -MD = AE7D3B2B56ED70F4D287E77C057512FD5EF62C1F5DBFD648B6EBA6D6E3E2F6DB09F1ED5BA22F59C9019B2B2743A9A788 - -Len = 878 -Msg = 85F6897B45BBF252A97CC12A6E3EC901A05AEAE252062C04551573B5078F8C973A709CE932310355881CD0469D10CCED841863E3AB1646831F298D0732984B15FA085F65B484A5B31B46B5549486F95ACFDDFBE9C4523EFCE83E7817E03824E906D6C72BB17C0E4159875782EBFC -MD = 5EC6D630925FB14DBB6506EC8B9132D1A2D5CF6008D77BF2CBDD011A777563D1F413ED624600D82C9CFDB4C5F6735600 - -Len = 879 -Msg = FA5F18A9255EACE5136C5FD603199E3438A45618547D99321FFD907EAA47ED4F16B8B4A5B40C878D6C9804BBA983F007AFA7CC98C6A274D07139927CA2ABAAB6B22F65921268E954CFFEFBB1DC2B0EC09F5FAA2EFE0ECC0638601A94A52E15CE4DD3F01C1DC7AE530710D779F908 -MD = FA511946CFB91C58AA7DFDC9BC9E88298E62B2C9FB4FEC7CBB8FF04796AC41210EFBF867497820CE81430489607E13F9 - -Len = 880 -Msg = 47C6E0C2B74948465921868804F0F7BD50DD323583DC784F998A93CD1CA4C6EF84D41DC81C2C40F34B5BEE6A93867B3BDBA0052C5F59E6F3657918C382E771D33109122CC8BB0E1E53C4E3D13B43CE44970F5E0C079D2AD7D7A3549CD75760C21BB15B447589E86E8D76B1E9CED2 -MD = 1E3E007CE37792D8A4423B797E876E89859590DEDD39711AD0F1DE2FD925F4320B44BD57DDC7050427943E3C957D4B6D - -Len = 881 -Msg = 9B7D4639E3400BDD19C7672BE23F354FEB221570BE8307942F52FCBD3045FD5A681AB50B226400AC6A213B6BCC0B5E9CB05614177F77BBE3F06CBB2E2F13C167478DB5779ECCB585E3E9391F3107DAAFDA2A6ABDBF91BCE6540960EE2F415D7599022B81405904038EAAA89E2D5F80 -MD = 2C9C0449254C971E60E3C09075A6CD7182809B92CCD078C71CBF8F57BCAA5D522F04296934FA66DA378A99DE3304BED2 - -Len = 882 -Msg = BA02BF87C61CB69491F6B5500A43499483C9D1DA8056F30D0199B8AA52AE2941FEDEF0E8AC94CF8C7D1E6F1603D75618BE563D3303573263BAF5BC706D6685FB8D08984A756BE3A981DBD96A3FE38CDFA0206CCFB6456CAE650C829EC3A2480E165B3C671C70A2EE16460698D82040 -MD = 29A4D637842C135313A2BBE9ED2BDF879510140684AF25D7618D12AA811F3114FE1FA7896A58FD3D484F5024DBD70671 - -Len = 883 -Msg = 6C54239533A5FBC9617060FBD3C76719EE224823624739482FAFB1F6D7A39C31036CC8EA64FF265054DA2DEAF00F90207A2DB4691C8AA623651A575D25424603C682AF9A8346E4F63E74956E160C1E55BB7118DAF1D1A9FB390F53446823502680F98D279F420F2D614C2218D5E000 -MD = 9378189E5E56598AF5757E71FE2D9565042A002CF8127F52E7CB76590DA0444FD8E865BF24D842A35BDB00BC4EEB4CDF - -Len = 884 -Msg = 492BB221C33A3D456C7B2A0C41C6145501451D247569F470A1F7637FFBBDA6FECAEAA43ACD76E24BBD607A55596C69060C360D519B7FE9EBE794769B7CEE6A5035265B069E641BF17CE887F0490C90D655F5FE91B95D46A1F5EB9138CBFD232DE94B3DF9944131D0C64C69E4652990 -MD = E964401C4D008F3E9C546EBEA46B47CEA2134813D07941B8DD5BAE7723CEA28DE2FB9F502AEAC715BC609615F9C09825 - -Len = 885 -Msg = 8F71E8CEAB8CAAC38430EC1E8011D9C81B73BBCF32D60A495CF8207876D5DE42526116A57352A7FD2A6F20EFE100FA4FE0575EFF13F205AE33D0C3345ED4D587BAD1CB2F6AE0A15EF6681D168FA473ECABA29EACBD10CD6C64702A4EEE21535E7CCCC0037EF1F4C0B6199C8F413D90 -MD = 35E6E82D79AAEAD061DB4BD98BA763D460706220F0B3FB53329DA166EC85562033BAEB07D22942BD672C8AA6596C83CD - -Len = 886 -Msg = 0D7BF755403AD46BE09C7DD8FEC713FBE9D96B9EE5D7AF7AB598FA6C4D5EA86C29DD6EE9C7A8103E6D572865019E6F0909F86FA2E59ECDC5B16678CAF64217282E2B474F40F53007F71D4ACBFFA230E1D2313CB44C812D71FAC6EB58A30097D4336BAFA8332FCA1EFCD6C48E9F9050 -MD = DEC011C18833D083BED33F749EEC1932D5332CC3B5C79594F81B89A22A7A55A3D5A52E71563D5E5ACEFB6A356665ABA2 - -Len = 887 -Msg = 5E13D7C65724A037F7DC646FD1815767F3A83C69C69052FF6624DAC438967A7257DEA3A269042F3ADD1CFE53B3D1A5AFB72702A90F60EC5E02B1EDBD7121532E2DCF37D82B96184B347F9D4BD57AB0E1E086406DBE941E0660B5B4C18221B9939F51A4D242E82FA2FF7CEDEF196EAC -MD = 4463ACCAE7D59E3CE842E93131DD474D328F88408319163000346494A1540AA686889ADB84C7C5E6ECF35210CBB18203 - -Len = 888 -Msg = F690A132AB46B28EDFA6479283D6444E371C6459108AFD9C35DBD235E0B6B6FF4C4EA58E7554BD002460433B2164CA51E868F7947D7D7A0D792E4ABF0BE5F450853CC40D85485B2B8857EA31B5EA6E4CCFA2F3A7EF3380066D7D8979FDAC618AAD3D7E886DEA4F005AE4AD05E5065F -MD = D1D263B5311B05C7B9F7783E3AFD9A2E75791CE0503ED820474B35340D2CC84B0270921BBD965722011AA30CE4352926 - -Len = 889 -Msg = 36069C92F2AA4915D08FC19E9818ED0DCF80157D3A8D6646ECF8B4A31ADC3036744FB8B70499E90C6C7E1D2C4BE35B81DBF5A386C7F69BB320A2450D17B56D641BC7BAAD77E5D55BB6E9ABE594E04A3676F056AE60082EF33D2A74380270F6116CB4C2DF973FA8747205553A8768DE80 -MD = 20DBBD9701FCEDA5093A26BF8036F7054D0F82B48D1A729305A47CB0CD4E211F1F0E1DD42732C95D3C2E5A13BCE94F00 - -Len = 890 -Msg = A1379F64FB9DA0EF3D4F819B898C30348E41E902552B60E437B513A87EE84C2EA0652ABCC2AA9D32428D76B569B3ED9B3D937C93A02C22F8FF0E4A3E09D9C8A22B2CEBA9F8E921760E103CB12AAE2B1196FCF2E5C45FBD0C381ACF5E6E4A8032D59EE9E09FC4ED561C5CECFBF43D1240 -MD = 5A8FE65A1B273396CF285C3125C6EC7F21CBF142EE58B512613CC600475AB182F935D5E55C6A3A87FC118CB4262357E9 - -Len = 891 -Msg = 9742A31BAF76E4E828011592CF2D4C9A94BC16A6856726F2B3340E1EC6787A99AC6832E6CDD32A92B92BF10F976EAED09CB9B538583421223CEE3F76182E9C5B8066BFD9FC924848C7F888BB42019471062BA2C82D1A904E94D90288487A32133CD51D04603588517305DF93697A5520 -MD = 6E0C6842BC79FE6EF034CD31AEE6EA40A1404E35DACD59C457585AFEBB8A0F3CF5518F16A63A468AAB49BD13F84BDE74 - -Len = 892 -Msg = DFD9ECAEA5316F067B49D5B04A229C55B8FFCDBD1BB7B4E92B546887A5584730F3BD4DCB1CF8AD362E2301F5970E917DC457EB1634729CC9CD3EA362C66E20F29DA5006CA5D7F70EC89FC75CE1470C5C20B21838B45EE461DA1F42C257C8CE940CA5CB0C3822047D10C875D6B41A1D40 -MD = 4930A988ACEC875B80E5A307DEE0E35715227FF07E5D5F92F4CB3984A908E9A67218377AF95419AA35606771EAA8E8C5 - -Len = 893 -Msg = 6AC7E1CFD4573ED4595189E12E5B963FB45C167BD56544CAEB461F6D03DB1084D14BE35233310F48FCA0F9D41DE619EF1E29C78FEE50B412DD4E74ECEC9FA6AD45D2D6BE7BA7D8D9381DC5060A2110334D84CA79235BCE5667B0D49BB4137E2E23970D40044104AB0890FAF8437CC2E8 -MD = 70D2AAAA1EF948E18A999331E4270464D10DAF1254396A5F79DED61E6A1C764DB5DBB85C5F01847A23FFC65D3641E5AE - -Len = 894 -Msg = 1257C5E3E177DEF4ACE316DFD5ABDDFD6BA7FCA241173927411F47DFE2E79FBC5139B775A912AAD0822B220C08521E0A25C8EE15D4F215B1663D92647A28AE0A2CE23F054E77456668AAB17DB63858B666A4638FADF6BCEAC8152E9BE239F0ED6AA404A1D1C2C55C14655D8E1B33A828 -MD = 4F5E7D0EE396995326329DA9FE33E476A3A6CD1DEF30BA62A83B52864DA4E84A94B34E57173B30BE528594F8AC551ACF - -Len = 895 -Msg = F2E39862B18601C5C4EA3B13745BE51AB578BE0049C2B01C6D9C2C283532FBCE5C5FE7BD77C36400944716F53F692465BA1C70B28F1203EA123165C3993E0A371E1284C74DD37EB53A0043ED84DDCDED882E233482433A3E0104E6517E277D3A2D2577CD28622CA177D8A41443AD8F94 -MD = C0547707EC37F06196C7F7B578ADB4CC8F10EFB0A1D4831C94D32D731B9F7E454DA7C3FB43A9AE58E90B9016ACD10F01 - -Len = 896 -Msg = 58D6A99BC6458824B256916770A8417040721CCCFD4B79EACD8B65A3767CE5BA7E74104C985AC56B8CC9AEBD16FEBD4CDA5ADB130B0FF2329CC8D611EB14DAC268A2F9E633C99DE33997FEA41C52A7C5E1317D5B5DAED35EBA7D5A60E45D1FA7EAABC35F5C2B0A0F2379231953322C4E -MD = E482B0C1B2057F1B6B897BDC230DCA2B48FFC0E4600AC40A44DCE03E99A8D1DF94908A9FEBA0405DA79569E75059F9CE - -Len = 897 -Msg = CB1BD5900398E5753E85BF405F77C3C344F7F1775B59E7F8ADD11882A5B27FEEE9011DB75A20388EFA2DDAE78A82C8E5EC9207C149D383BAF293C2F68CFA930A240599B662033C05C86DF576F53D0F04CD105544CD5695DA321B94EA57BEC41DC9CE192B1343B2E1AFD541FDDAE1B50200 -MD = 51145A4D32C43E111DB21DE07F30C7EC7BB05E5694BFF879EE08B952BB41A0C9CE8F674A204B308ECAD580B7BAC1DD99 - -Len = 898 -Msg = F35C7F97B4D789FFF4E7DBED0EA1B5B2935EA6889332084669255230DE67E35090B3640F3C6F375E98AEA92BF5B3618478FDA284B7DDCECF37259378DBC0BDC192F656F69F5066E91A2F9D285C5988D39BF8E163DDCAC828A927AEBF42B5F174321ED3B9A968655A942DC0CC37199041C0 -MD = 3F284BFB97A496544F415AFB782A180367E2EEA4225F0E4459AE2449252E6830EA4D1F59098567D51E6552762235C494 - -Len = 899 -Msg = CE5A6C17FAE7130BAA565CDB84F919E7E1C13027B50F0E103071C843388F2C51B51E4D330555F0D919499110D3FAB5EC8D307CDEFC7D15CFECBDE4A06A36E1278C9D9A3D8238D4982F135C2DCFC0B28D10796A4979F9B4CCC5A81B35C1259A7B072FD17B46D555CF7C3BCCDD801E4819E0 -MD = 9A3C02EFBA5A263A01FFC216A4C2AF70BA954894FEE7203FA2709F8F15EBF3935A025482CDD7F8AA55A554DAD76A792C - -Len = 900 -Msg = 3A7391401865505D3782C08C9291C87611598862E2632530B1AB50252D62EBBA310FD943A378AB3897DF53F424CED09986143C6A4B68B0818B9356343D9F6097407BFEE7FF15D41E73C50D4F8B38468BE9143F68741EC8C79A6F28D6B4439CB82A1E8FE59C8131123A07C4C5300FB19E60 -MD = EE1A96A83C581A9D346F968D99230DF7B1AFAB887E749E6B61E6C8EB7CAF1309B424F078581210BB7CB90F0A3C40D703 - -Len = 901 -Msg = 3DA31721130FB8F85A43C5B5656BAD56F0A0573CD32F3363E4E9E3B4A593A2AED2E184B2336844EC6C8E8D6F47002FD998A8BD63B2D405DD2BEDDCD2E4C0C0FAB13113147B381C2546BF513D6C2C0B3B860C170B680EC1A5B907D5043BFF1EED67EB35F6AFFDD0DCE5B17A5C1BFDC5CA38 -MD = 91AECD1A40F4BABE3AD81EC14780379390F3C54849615A8BE603A465DF4FFD47BB94D4793CD52D8208919CC27191DAD2 - -Len = 902 -Msg = E582A3A06EC79B463562CAE62212DC63C40A4E76A6C06C08CCC3FF442229F217B143A0AD650F16241A94A65956BED1C2D2B57AB2199E130EACF60A92D1E9E5FA03BFD78874EA655092F3C07A98F0A491874523660AD80128E7CCBF7E8012066F18E00DA1EC5ECF397A38C747A61DC5E7A4 -MD = D3A5C6CF873533E4D703A12AEF09F3981FE520589CB9E3C4753AF34881A7DC57BD5E303A100FF6DF081BB96C0778B237 - -Len = 903 -Msg = 215D67DD190F953146EC654EDC04B574C1D080D1FADDE7FE272E88B8BECEE0EE9272B903C0CE25DDA82C99B2CD8CC6FB0BC554D78173859375FC85AEBA208907FAFDDEA3CB89410E6A8780E5B5E270B124A9940DA148F41C3F18B9696A6FEC1DB8BB81165F104CE061BDE070A8F788FEE4 -MD = 3A8651FDF9883AE666D4751E362B5F044C7C46D500E2780F0D423F6AD12BA7BC4EA1C082CB982AB174471E69CDE772B1 - -Len = 904 -Msg = BEFAB574396D7F8B6705E2D5B58B2C1C820BB24E3F4BAE3E8FBCD36DBF734EE14E5D6AB972AEDD3540235466E825850EE4C512EA9795ABFD33F330D9FD7F79E62BBB63A6EA85DE15BEAEEA6F8D204A28956059E2632D11861DFB0E65BC07AC8A159388D5C3277E227286F65FF5E5B5AEC1 -MD = E54BC3B249DFF637001B58D13CBF64F453E01AD68A554CA994F71EC710216EF9769F1C8B463DC7B4A90A0CEACED41E3D - -Len = 905 -Msg = 4E5FD6C9C5E693E89062F8D79B7479ABA27CD93729E03179804BB8BCE53F270A6D0F29604835646619485414C538FBB4473067228A4593340E30165A7EBFA7F470CACBDB9CC192AB424D7B7926A5A96166FA56277DEF34ADE6C6A7C31240F86981E30BB3F2AAC492B1850016B1F5F3622A00 -MD = 1181247FBAF1ABDC6D406E22AB7D72F85FFB833E095BDC8CD2500FB0BC9435FDA83C0C2B1A7857CE44CA8E0AFD9A0C86 - -Len = 906 -Msg = 1DD8BA4977A97AF96F65FBF2BFD718E20C955313D9E08A8F3FB63B092ECA604C3D65C7B8AF97EBA322FCCB3CD0B091747DD1445DF3734A01611A2EA5CC6882CFEFC3FB78200A162744DD353A51F10EF43311B9F4340BDE9D57028ED8143A2DD7A765DF9DBA3446D8FDE72A601F0500E98440 -MD = 0D61EF12962237D2264A44F256FA83C955C4566434DADDBA5B2C8309F2772927318525D65011528BDB558FDF3F073CC5 - -Len = 907 -Msg = 94A8E87E831C5E5196512F3BFC03A72804F00A5F8B7814957E1109D7C6AE32149E5AB11D70C7AB52F5BB67C290AB1CAEA35CFD3490BCD8C48F96B7ED876D0D5357562E34B4871969BB3C667C11E67004D69232CF1FB054A2910A4A72DD158656A2C0FADAD10B708442128C0331C49032E940 -MD = 56B696AE8353D317B599C95ADE4B8319DB3CE5800FA029AD1A1395F765C884E584A907AE8B4ACF574862835D73DB7C3D - -Len = 908 -Msg = 15A42B05F9C3C1551DDBFB964D698040DFE50240CA07E7394DB47BC628A36A31880AAA7A1821BBEFBA965645C560046B296AE7CA6EC45A04E0A9741FFD88BE539E335AB26BBCE51F3958A4CC61FD3BE079B029731D9917802935330F68BE6358D7B8FC120570AFAA25B1FF54B7B0A788A7C0 -MD = 8B5CF5DC911C9E7678F06F32C81BE62AAE0D2711AB2FBC4AC0B4FC7C5EFA130C2398918DFB21B973A09DF7698112B2A9 - -Len = 909 -Msg = EBB1C5063C59E47C5D879549E8A5180D7E764D8BDAE5AA8E570ED50557DD19B601E488106018079AE3F1E787DE14FD12F985B38ED7A9A953FEE7975E47218BA610B5060EFC67637EDD9E6A051DAEC967BC86CCE55F417BD7CC7732BA636E55FB4831B117644ADA00C8BF5309BD7FBF42EF10 -MD = 9883174A6585F88C0C2BC4B32F16F11465C790DE600C3424E6629606941B4C0FF4A6978DBDECA9D0DFC55754B372B511 - -Len = 910 -Msg = 3C8BCFC309833426B1EF0BFD3E9083DC116F28F26FCF034A879F0EC0CD04BD0B2E2A32FEA71AE279D67313CB5293AC7E158D2EBCE4A73941924EA0785082B13AB58F71C620DAEEB7FAB6C85CDF2D40E0CB787767E8F2298553BA9C033F820AD312C12E90AAFBB3DCCF4D852F82FB3FC70664 -MD = 4B4FF48D8C8037640C02013D85C498F1D79E8852E4ED93E9A60C4ECC6DD69E98D182BDC453E8B4380E38316BC93DBA76 - -Len = 911 -Msg = F34B462EBF8A5D882AE3064B434506D605D2750EF56D33020BFB47859CAD2D26C902DD26906C3AD53A2FFE99C7C0D5A0EE1081657E0B5341511C3177B745847C55805B59837967763A5535E42547EA81168A71CBEEA4AACD0F6AFB06B2B9ADB7675F6763BD142ED87BD8570567AD64FFDA90 -MD = 5059EF7D44077970E7C87E94D3A129291A2BACCBB3ACB0F630C8D5BACB108C1F0F5331CAC0F2AB7060C178E286BA860D - -Len = 912 -Msg = 8E58144FA9179D686478622CE450C748260C95D1BA43B8F9B59ABECA8D93488DA73463EF40198B4D16FB0B0707201347E0506FF19D01BEA0F42B8AF9E71A1F1BD168781069D4D338FDEF00BF419FBB003031DF671F4A37979564F69282DE9C65407847DD0DA505AB1641C02DEA4F0D834986 -MD = 01DC4CED4693B36814443857931C5D3CEE8762FDA0220F8E9E63AB1EE9A7135ADE21C5AB3791821352FFBC322F3ED208 - -Len = 913 -Msg = B1E06AEE75FCCE86BCF194866D0779720F1DEC50586F29FD22C2B7CA37F19D257492EA0C05CFA98AB7B42D33A53B78E5CF62643F0CF02E934B9B70224E0952673B572463F25659FC015851C73E3F040AD60983CF4A048BB9F277EBB18F4936064D73371D7FAD0AB3D1EBB6E7035CDE458BCF80 -MD = 406C01D863ACA832534ACA2C3CD4F26EE640A62FFA0C847C58E8E51CE6C467C93751B499245799DABC132137516FFC43 - -Len = 914 -Msg = 7A8B81C5FE8BF2C12BC8E9E7A0894F837320ABCFF2972A9D7352DA7175AC7C5039D654EAC136A020334C956B49323918998580BD1F2987A342F905FDED93DF4CE76A91428F524AB656B24AEDE625884511484B707C3BB3C52E46428B44F8A87676BD73480DD3951E8E826EC14C24F52D48ED00 -MD = 5EC81E20B4C8CEBE2C84459409C6B6BCC8B297E3C7262C32A3FD56F781128F98128C1CB27E2670DCF1690F6F484F744F - -Len = 915 -Msg = FCC03C4AF57D9C21C777D2B4AE611DEE9F4653684AFB0AB0F98606D2CD2A43B24288B9C302BD296B702FFC8D88FDDFDAF830451CFA97407179E864C77416AF18F19617582317C70DB29834F585324B44333BC6076F3CEA3F3F5E124C7B259C482EB42BF5C85FEB3691A9CD5D227145A5DC6600 -MD = D5273B8667F2B3E9887B049BA309002B8842F41A0ED3F56BDDE7A64937D0FE15E0C8C47811779A7A5F18DA06A8E4EE8B - -Len = 916 -Msg = 96CCCA331611A6E0FDAF50A8E4C10967F1741C19EE95A11BB9D02A689971380DB8DADD0F8523C6A1D3F6F12875C3AFA0B6A8A1D961FBEE33FD48011DCB829036701FFF6B3084A19D7A21083FA8B08353C6EC5BE9584FD2D9CA6E63EE51DFDBC721740A43C0568F5A732AD5374C965B496B1480 -MD = E9BB19DCA776A13EC8525AAD04F9F147A1A80144284BA53731D9A354E8CE4D4B08B2B77282897A12C56EB372D2CB3776 - -Len = 917 -Msg = C6F7E76B2ED480FB33F7915128AC1383A275FBE15AE9C997907E11BEABB1E49C8C9BF783355CC3D8C9719AF1B0B94222956AAC2C19B0F68AD4CC2449412BF8CBAABB014D277AB446CFA90D0E3CFA1A1F22273D4AF4A8391DD3FA0FD75015F39C204CE592715A00036953401BECC68A983F8E50 -MD = 2E30BE197E7FAAAED3A9F764D261495BDC6AF0214D376E950474EFB2C727238265656CB82601FDCDB16D6BC97600E746 - -Len = 918 -Msg = 9ABFB3294448A7EF38BC194B4E61027CA0671CCFEF6AEBCC0A706F15958D777CE0FBB47F1FCC3E470E878A991D139D02F89D36A54053EC3E370BF45E1AAB3B58B25122584D4CFC4BACE5F7282F25F322107E8043DAB875E8707F94358C6ECDFD96CCC09803756814D098EE3C4A7A8BC2D44398 -MD = 9B8A90292A23C717250C60AFD7A8473482B93FEE703A2E899D28E5CCFE8EB71F17E1B30B3EA0C9686FB45C70AB427497 - -Len = 919 -Msg = 3EDA9C01C0BAC0A7DF3288EAEB878C44FE750F92EB7FC1AFFAA3DD1B492781D220E210F169B673EB469594C708C2A4297CCF1ABA5D2C438E9FBD91EFF1A0941564582AFA650F03ADFA4336AACFF855F49364D234842C907E7FCA80CDE686E545D5CE0CB43C0359E18155EB3079469ACDEDEE92 -MD = C3B8C9B367211EE247F98DE79B8DA56B360EBBC4ABE467500A805F0BF29C7B3AD92EA084745EB22A598AC0F47CD9A35D - -Len = 920 -Msg = B55C10EAE0EC684C16D13463F29291BF26C82E2FA0422A99C71DB4AF14DD9C7F33EDA52FD73D017CC0F2DBE734D831F0D820D06D5F89DACC485739144F8CFD4799223B1AFF9031A105CB6A029BA71E6E5867D85A554991C38DF3C9EF8C1E1E9A7630BE61CAABCA69280C399C1FB7A12D12AEFC -MD = 587C8104936BDD74700666663843746015906CF4C681C2A6FFDD07B732E9E7787B165E117DA340BCE4E27302BA288299 - -Len = 921 -Msg = 269180F685A910A96BABF3F6EE41D59E1A147773B610A81849ABA32B9B3F67D92CE4B575503C9CAE47F0B8D37BA66830952229BD64BD113B5055C1C4071BD749158188D343606C5DB34C3C1831087A0251868DE2F1689F358BC98832CD8C292806BF31A575895089B72004C037C8990CC845BA80 -MD = 5728619A644A5720587C7E1F163FA09444C41AAB80AF80BEC9A2CB41FD6DAADC3E9735FE8B5B14F89A07DC2315822EFE - -Len = 922 -Msg = FFFAC212A9A44997E7273F3B708F37B778AD53290AA2B523EB10181EAD0785918211FA5130C0BF333BB9EEAF35BCF8D3C210A041DFD8A43F9F045589218542B4FE2C63D340A968F0E21354D8C26C6B55A437E1C0208C1F53A2D32F13170AAB6978214F900C0FD6D7C589459C9506FD2385D376C0 -MD = 5090DBB5F264361AE15CF52DA6BF855AC6F3114DE3DA1998D87CDB0400566C2BF803CC1846BD9AA4F303D2059694759C - -Len = 923 -Msg = 3B80BB9F2BB7659C2F3B2FAB83E68033EF455E97C6831D484BDB52850EDAAB4F89EF8FC39ECB29971F7349E5EF2C4030CAF069C40F58AD755E2D013249FDFD2D41583569634E0126A3272676CCF6A3D7A7429327923590574077D3A21BD282836D198AC6AFA14FD4A5927E594A9753509C8F1100 -MD = 85195208AA5165CD08ABBBF7FAC7BCCF09AC0D28A229B1A54F5FD419CFCC945A99B73819B5D9E1A40960E9E38759FE16 - -Len = 924 -Msg = ECD96FDCD43F1456B19C563E7531854DDA6A724CA160717E5404B8056322F7036D50056BBE1538F5128B72C90862A7A4C6AD3E5548353D88B255F3149C4097B7B412F5B45B27DC9E7293831A61B20BFE0FF57E7299CCABDCCB32DE6B006422A0B7DCA9630F57D58A258CC32D28F39A9628337640 -MD = 4C47720A345F71C3262A374F8F5238D88D07A85B29CC03EE09B67B1BDE4FB88BE78FCAB9EAF3D09F61A765462F2AA5F8 - -Len = 925 -Msg = 2FC972D13E9ED60AD42189018D21F46A99E50E437101549A56FDF91C80A7F63B1CBDD3A1631502AD006DE0CCDE3F74E14BD189BAF6BB2CF936B619D9DDD644100E9603E3170AB7D0FA3B6D79AC15BFBF8FC1672B908E82EDCA7DFE5C7DA8B6A5004BBC1C1999164E95772DF1B5D5078EECBDB350 -MD = 6341ECA19FD4277250EF2A671FBF9662CC9D9E579984E57353FAE6D82DF9CC0FB13D5E20107D1BA7A94795373980CABB - -Len = 926 -Msg = 3DA3A0681FA83C46C47B8D2D8394EB3138C899956108F7C0534CB3CAECEC2527434B441CC79E580B260904D4C95D9D53FD45DEF4F23E90EB01EC7FACAD671DAFBA8D3E66EE650F0E7A029BE3FF2DEB340436D004E5910E65C28174155D8DA004059504F484CF757314D43426FF458303F1885940 -MD = E5F5EF21AD14971171D1B4C57690D6C555E3BB0FCE5146FBCC7DA455689B3BA83E984CC225E6F4AA15EB784BD9046186 - -Len = 927 -Msg = EBDB935B08BC0C4077D649A2516D0C035BBFB64D69B783BE8F12796E44707EB2F244CC27089AC2A07A7412486A7A18F895F1570DEBBB638A36597008ACDA55FD3D128406C9D46D7FA32F71B718E52EEE8AD83D6F5B5FD6C8078121073518FF83D582563FB4E95EBCC4A6A6100E030EEF9A82F616 -MD = 8C3F1E9FE5DF9A019234EA41B18FD2F73DED10A3CCE397EDD6FECB4E1D83E3D60477E1ED0BF1F8E03CB8053D090521A2 - -Len = 928 -Msg = 2EEEA693F585F4ED6F6F8865BBAE47A6908AECD7C429E4BEC4F0DE1D0CA0183FA201A0CB14A529B7D7AC0E6FF6607A3243EE9FB11BCF3E2304FE75FFCDDD6C5C2E2A4CD45F63C962D010645058D36571404A6D2B4F44755434D76998E83409C3205AA1615DB44057DB991231D2CB42624574F545 -MD = 51753384C8F9584BE3ED4526B9B29A97DC8A87D195D0155E7444950EEA55ABEC5C0D7814F1DFCE5CA4BF1D50EBC709AD - -Len = 929 -Msg = FB7BB870E78E7EBF63E1C4953C5948DBBD548CC952A4B6D4788E0D190B9ED9CE8702F2075CBC5DA62945F118819C5621FE22587F51461B91F7DCE4D86C076DCF945CE93764B01ECBDA86DEA3EF17EEAF0D5BB4233028388A70CC239D39A427941C77E19EE99C88BF12F9BD6E687B3A826240568100 -MD = 97D4183257184A677BD29FD6244541371DC270E162B87772A7CBAA5791F1E837C2A0596300A47FF910C8E5EFA7CAA4A8 - -Len = 930 -Msg = 04DA38CBBB45475B6B5EFF77AB65A7144AF92EAA062AD6AB8A84C714DCFCBFDD666443E08C1EA3D4DCD3BE730F7401760C6EB9EA600FA5CF1CBE5297F0D4F66671BEC146A58DE30E5547FE9DEFA9B96E95344FC8F32CFEAA4AE1D4A109964BA3AEA697FEB6B6BBB42AED1BB365E324DFF650764FC0 -MD = 7A9A23ADDA6C9EF7CD0387CB6F352724B724CEAEFC198A44EF57E723EC78289E7CC6DFD8BDACA418249791328C15D2F6 - -Len = 931 -Msg = FE876EA28A466698DD179787EA825DA434D02A0641099EA4CBED0641F15E3DFC2A37322A094269D4C590455C3EB8F019C8295D24A434FA4977FD078C691BB540C7CAD0B6E6284BBAAC1C8545CE00F71A494945AF86A4FE2AF46F11DE9C89EFDB17E62B9AAF4526BBB9663D4623FD589574529F7580 -MD = E4D02BE9481F3E45C23533D0E92BE6A2A9FC60E65EF29D976FE110B0B55BD90A3FA117D7C2429B28B166EF9A707957F5 - -Len = 932 -Msg = C4DDA8D7807FEF102A62B78CD4700A6BFAAC60D650A7F5AB6B377EF3936639EC67FDDDED1EBDBCD05ABF3EC0BE4980ED84E1FB536786CDF0954854FDB9F3DF27AFD5F350E4AA735FD9C32C790F6F424A1915CB115A37E6AEC3C257A974D6683E0CCE2926DFFBAFF8C0CAF094307733969CC6834520 -MD = 693E062284B4752A41DCB64B8D38BA4406E19F3E5BC76CA0D179B09F9A61F6F59402A6DE7D7BD6A7A104100C13088522 - -Len = 933 -Msg = 0E4D1948742EDD97D4AAFA0163292AF7899C469489A0DA98FC9AE4B6430EE112CC7F22C29904350A9C196C214C13C9117E8245676B3E5C7AB9D51120116B3CBC07026927CA0C33ED516796E98A0EF9865746DDE811C8B56EBE9BA469117D9BCCCC70204F1AAB358A703987EF8637BC85BE18A011A0 -MD = 338E9151C4003B93E4E9EFD5C3CD5F1055F99A20E4E705D10C89B58115B0F121D60D8D363E6BC167D6AD694182FC1A65 - -Len = 934 -Msg = 73E79155019FE478F8D817C3D5EF3D4F66D3BDB22ABFF76DE083A8E5CF1EF4F8E5C55917351BCE4AA707483D9302DB11DB21CC6CCCB4012B0980ECB76077CD0309775F7EC98BC40A27044BA830FF7ECD42825C7B7B28133BB732218234D9165372DC61261878776985D2C980C9868BD6521557AE3C -MD = A7D805EC95D2C8D4CD86B802F4B7D3466A1EF96642C67C6CCDF3ECB4AF91955E452619DB03EE4D44377B9ABB1860822B - -Len = 935 -Msg = CC47E530D64AC0381DEA486BCE637E3B631232A5B55165358A0F9C2069C1A3AAD14302F2AF25FC4F4F40D41F708760AB080861D8F92EE65C1927326FD095EC52E45B7F5D67D4B4987C43FE8FE61AD6E5476535564DCE408606AEC8E98618B174542B530238A51AD13EDA91AAB7C34DA7AD2F28E50E -MD = 218A07F4C250BA1787FC82F146E8B1E90BE0E039E0CF2802990159FA49B78E6EA4F8F05B5D226B3CECDC3A3FF72D5399 - -Len = 936 -Msg = DAB11DC0B047DB0420A585F56C42D93175562852428499F66A0DB811FCDDDAB2F7CDFFED1543E5FB72110B64686BC7B6887A538AD44C050F1E42631BC4EC8A9F2A047163D822A38989EE4AAB01B4C1F161B062D873B1CFA388FD301514F62224157B9BEF423C7783B7AAC8D30D65CD1BBA8D689C2D -MD = BD1E1E9AE80B7FA79ADBD47D7A28BA44F4874108CD9BE5D327CC93C6ED4DACF8A9E2A3491D4168BFFAE63FB2F1070DE7 - -Len = 937 -Msg = 0033695F13910B1E68323B64B7FEA6E291C07DE47C448174C72E53E69AC2B9281E6D6703BE904F601301A7A92012BDF1E7AC0E389DA9E420283FA96681B0495B250CF11CEB845903468DC2B34B825294596C86BA38A41B636E155B3CF55A986708DACD1034C62A0BB3449322AB57A2A97DBE9E93FC00 -MD = 3AAC27F712E9FADEC108A9B94A9489A4D9733BD6DAA07977368043409E2E5ECB4DA2975C3B8400445AA81796076FD0C6 - -Len = 938 -Msg = 77485C2226894283A91EE91E83192068DDAF49E99FED9838344ACC569348BE9D9ACDE7CF447C0BD84FFFA3559A16C5F61912E4ECEBFFAAB31B3F5B239C87FC3EDFCEA7303E1C57827E8B45BA3B4F357167FD749EA101B15EF913F838A6CE68E4792F276BBD2784554B84703376891D951321D0C8D600 -MD = 442BB2D6C8D2A53C4690965953AFEAD75C1EC32F59A086CCCFF77A97B3BD6C98FD1D5F158C54DF3D6ED5B881394E7536 - -Len = 939 -Msg = 6C95A9A1DEA097D15316AE7F5B4A6D2746C6C81D72093614C9AC25AD1FFA68996FEB8666D94F453E9E405D42BE6C9757A94BA777566F054DD6315DA3DD837E70FC939F7129D1D7D4DDC3A7D5FFDDC54B60BDDAF2622060E8C5E5830794DDA711E85C52B4BFFA5F716BE50BC978574D88C579F2E19CC0 -MD = ABF9DAA591F7E602F4481E8819D1FEB4DD9B7EE6F5CA4BADCD1880061FDEDD95DAE4A8F7B2E97879238A3CDC61EF819F - -Len = 940 -Msg = 4F62C87A0F5C45700E4A39D2EE331FCDF9A8C33E08E26CAE547306D1FB80DEA35A6E58E63839BDBFEFFFB1C35F80386EAE52CCCBCF61C835E9E6505DB798AF26D42575E021B96B3F0DF3405B817833F3FB4B89B941B8D88BF9D6E467A0863BE72D950BF006CA84E3DA31D71D562A9F0D8231C76CF5C0 -MD = DD4A15F65A6618B421FA83ED0076AAF2AE889247C554F83CF2B28C768BC75AEAFF04F50B2DBD90A7B51E8C666240F870 - -Len = 941 -Msg = 5136F1DEF48BF98D5FE05CD02C2309F994156D650FFE1583DA3ED50AA9B13BCB0DA8E83C68B8D331672110B25EA928F4D20D869E444B3194C044C09EFD66D966964A3FB446D6B0F027EEB79D50DAD6A5F0005B19FC68F140D768488C0D401B7FDDF8303E0FB8860A6847CD453797ACCE3C7C35ACAAE0 -MD = 9777D98510C583D21992A1A89F7B26970E7C92A457564823DB1D822CCC102CEED9003BBF2A1E476EA7409742A91E7C17 - -Len = 942 -Msg = 0F9EB1E210E28319D732BA71FBE8B3A99E337D3F4FC3FD4959F51AAA15C2E8D7DEB32EBC69A031057AED466181089FDABA63B3337EC0960A0EFA3F5B257446557B6C585C324F86034448D0419CB538E328877F669CE2A03B9B3A6E5DDA904666F1E20B0ECD674B84E1AE14AA2278F18565CF8E37BDBC -MD = 744AADC6AAF6BEE1FE80DE604EE1CB3CC835912B06608DA411B6BCFB812C7E17E4090839B190C5A903B40F06F6B6A7F1 - -Len = 943 -Msg = 7C9853BBA660650A5C27C4C948FD65A67150FB559C5863BE944AAD3F84E946777C93D3D9BE3AD41155A05197ED3DB7ADB0BB55A55C69DE9A5896A5C677EDBC8DC4F3C50E22BEA9ADA9D21E6408D19974B7760037EB6977BD118F6CECFE7DA5240082DDC2FC2304A407C0B6073B70315B3761246B9652 -MD = A67FEE20AAA763EDFF74684D7B9265F6EC82F9554672B2F0C6B84478772F560D9FF2C6625E11E1F20E86AD74DC6BD399 - -Len = 944 -Msg = 42E99A2F80AEE0E001279A2434F731E01D34A44B1A8101726921C0590C30F3120EB83059F325E894A5AC959DCA71CE2214799916424E859D27D789437B9D27240BF8C35ADBAFCECC322B48AA205B293962D858652ABACBD588BCF6CBC388D0993BD622F96ED54614C25B6A9AA527589EAAFFCF17DDF7 -MD = 6B7C1144FA984261377DBAACA78A03AE580B7F3A17D69BA0D56EE908DD9EC9F87EA30A7626ED7CCF25B53A6994E121E8 - -Len = 945 -Msg = A154F2565761BFFC5589EA8CF6CB9C29F4C632D1471FC80534F24749C908C23E56505BE40785612AF08F921AD19348D2D2453649198265249EFEEACCF4AA3E6DD60F4970942FD828E25FD2F88BDC2274C5C94B7DCC7431715B3C2428AE7A922213F6485502B4BD84F1522EBD8795C549AC800FD99C5E00 -MD = 133A3A1740DA8058E1D75872D71E4E70850C1116836EDE3AB88895E2518D6BD6092145386527309838362C18DDCA9207 - -Len = 946 -Msg = E7A82BA7364E23F5BC770F6C5D8C3B1A4E24B328943470700FCEDA84B8D316B716E2FED583D2324C17FF1E9EE07D72D42CF58FF159070479E6721E2031C9D7D94262033DF94CE492D6C64FEEBC7B3B1DC9F719D9681F51F25461D8693E7FAAEF05DECF1AE271858BA473577A372DD79FC9D1B0F69C46C0 -MD = A1D563A0FFA06735FBAF15B661087AE30F378A9A170D67167AC5B835B8161CA1885FA50152C7B5FF29611314D6BB5C2C - -Len = 947 -Msg = C3AAB6905BEA639451D49C444D9D470D2F033C7D92405C2672CDB78E724D4BB7ADAA0C0E5A57A4B78F4F0BBD5B542D06086CEB0A42F2A6CF4B43745EF870928BFD22579BE8B5753328111BCB996B58F10A8A6D6C04806FB089DB9CABEAF212C9830BDAC08FDBA87617AD69B858FA1D5337273AE8367320 -MD = F97337866467112A16D2B4CD28B0B689B54755E350B0F3FE1675D9DFBEAFFAD5A241A1CEB5A87BD62E38D4C5AA1533AF - -Len = 948 -Msg = EECFEAEEC17BC07F2EE0913E696D50C194C13B6A2738092E5BD5F30BFFD3BAE559F3E47191AAA333297475F113EFCB1B4A088471CD800934FADD0F5DCC9B1B67AC488B27B8A7D5408CEC9CDA91EBADA76C9AADA32986604E113790BAF3A4B433CD81ED3DDFB9DA9995E49BFC8B7A15D07B363AE8376F10 -MD = BE43AAC5727DBB4DF9FA4122AE0894B72F33862B54A01FD24926EA1EB81C3E70E7337D89750D10CDEF2F8A29C52BE392 - -Len = 949 -Msg = 04A5269B1ABA9E44557BE500D16D2C5C830C9AF49D33AC8B0566BCD699679630180B74EA9824A3E9538789397FB6CFAC8961BA7F0F7A5B0181E7072C53651CF91451DFFF3B7FE5C00B890EB13A984C11B78F801C9EA33FF9B2A52AC71907B92F028D767085A01F3234AA9B98283F684065B60457BD9880 -MD = 3DC3F7EE5E65D068573D59DD074604DC1D1317D1EF11E5D8357CB8106419ECFD7F2D8A3D83A31B27F22C1BE3C72B2905 - -Len = 950 -Msg = 68541BF2F087D4505570E2C5DBD2FC596D938E57CC74980F5EF52FB229F5CBEA92481E9F62E92891A7F333E6581E21354FFF2C5A43899FF6BAA2FBC2E737B350CB5586CD7D7A6634BF5DD9B6BF4DB0A99021D432A0D76F16C74D4514013A3C13A88C53927B91411C7718931445913AD4C71A7B710DB168 -MD = 761CF51FBAA41CE2FFE4AE6399460A90C8C175E9B700C3B63466339BAD5572C7717B184981DA8FFC5C016D3D03D6902D - -Len = 951 -Msg = 2BFC949736AA36D4938AFBC3C01B604A7EDEE1C6D17EF3798EBDB86F9CFDE9C033DDAB4175C8F346E00E7BACC20DF7A52F4F0DF2744FC5EB9377E64BF6AE52639F796B1C15ABBB47BF938FB3D6253834DD680EFE244E832F810D315870F5E73BDF53130AB9C4CD203D828D183C5A954BEC1EF434B21BE6 -MD = C09E4D030A9269A8F47B325BBF12FBC06BDD3FCADB6CE1C942A3A539D2998507074F0FAD13729541F8EDCFE51271365B - -Len = 952 -Msg = 3C9B46450C0F2CAE8E3823F8BDB4277F31B744CE2EB17054BDDC6DFF36AF7F49FB8A2320CC3BDF8E0A2EA29AD3A55DE1165D219ADEDDB5175253E2D1489E9B6FDD02E2C3D3A4B54D60E3A47334C37913C5695378A669E9B72DEC32AF5434F93F46176EBF044C4784467C700470D0C0B40C8A088C815816 -MD = 76414F3B9E4FF8D150280C8E44BC54056849B25351352D9D9E986B3ECB6EC050542709AFE01979D2EB97E51D41217E6E - -Len = 953 -Msg = 1E8E26C707DB4BB0F459F069840D28639F22CF740EC59D8F3BB840F7654642C2DB228259BCCB3532944D85D2F33BE1B401886E9FCF7101FBB4539CDA1E81529C160ACCA588E706749FFE70B20665FD4FD91BCA558E0D28DC03CF8469930CE8307519E8724373EAA2B6F22ECF04989078F91A2FE9A8E4A800 -MD = 383043B7A0CF4A765FC43323C6191EC769F309E659982109DE173F9E2A07E614B0E7630BB1B247601CD017488327D4F2 - -Len = 954 -Msg = BBCE8A5EE8C0EB938B8BA8D0E9390B12BBBE6178ED29EAACBF92869F72BC157AA4F20F150059CF228399079449AAF9893FCF65775E5CE706898C4FC89DEBC86447C64A2CFCD22DBD2F639F199C1956571FD1C34A11609201F520921B1489F58B51EFBCEABF3CDA1853A7A66D076162A9C2053051BCA78C40 -MD = 9595077A46CE54B0B80584FD0C2915686D6F21D65A8F4D58D2E187EEFDFF0A692564CED4CDBF2C3DCE73D3095BC73479 - -Len = 955 -Msg = 036E2807A1F1675D8F01F88F1A5C34D664F49BBFCFCB60892D24DF43CBD6566BB7DBF33D47D816DBF244B7912E6A72740508804D3FDB4575B67D97B202DB80AE9A2B88EF84E7C74C3FB6A1F0FBAB8E62D96F76855E43D0BA372457A21503BA621CB52FF039CAA32DB99EA39B466CEA191287FA069118F1C0 -MD = 126D67DFDDA86FB2D30991F8D9AB6D27A11B59A6F433682C10F5C9B94B5A44B6CF751CED5D829DB9C74C5012310A4282 - -Len = 956 -Msg = AEB50208D1F67BD48A95A3BB4454C9E4ACACF2C8935F2E48C06B1F73AD8C497FDB9F99E11BA78C12D83E93ED8BC34BF7BB27770F647BE727F0C92FBBAAB92DB31039EAA3416A8BD803470A531DE363254942F921AC597E949D95858FF42B6C7F385F90DCC8869A95B5E31466845347DCCA479B07D35822F0 -MD = FBB91CC81415D58DB1B668D72C8F4DF6F8A79A8490824CE01889A2654048442D47369BEF9E24E6B795B0452308D246EF - -Len = 957 -Msg = 5F69A5461117B8C2DE8048AEC04B2D0C7865A9107E3D90B7CCB3CB20B0E84FB7E162C75A766D7A1B9F6EF588581683B5CD125EA541CE47E6A78904D542C23F5184A64F073D931CC23690457AFD3538844914BA118A7D7C8A24F198CFBCC9675CFDFEC29F1E84658A0F8A344910FAA51E8D0719A9027E4298 -MD = D2A717EAA0CDDDFCD64480E6343BF657664D1C17D674949058BF0BA56F927FF748FF33BA2129289EE61FB4861B10D832 - -Len = 958 -Msg = 4116C941F3786516EF58063F0C226264F17037040C08817D86DA911C86B04DFAD0A64CD1BBF611EAA8C21AEFD71FBE41123090F71373B8BE43B1DBDB8758E63219CFBB7FC1F665834B8F5DB8FFEB5C8144E5ACDDB42AE73ED3848B933CB43E9CF7E2F77063D0BC5693FBC6775DDED5B57C0B70FFBDFE3AB0 -MD = FA720E5E47796A753EF4AE81802926B1D9DDF6B15D512F7E949FF9B02FBBE21C1F5031ACFFD8ACD12F70308FE0EC2BDF - -Len = 959 -Msg = CF191D62C44A107949F4D8E62C61069DD7771CD42D183B27314874EB19067EAC1919C849470B31B0DDB1D2886EFADBBD68D28B22B021F9A0F4890F02D7084EC08E3DDF0A14C0132FC8EDA62A786FA28F3092A517E525567F8EB512439431DBDDD4768FB7BFA596D8A04603481DD84740D296F8FEA8A52978 -MD = 92CDBC3DD7BCEF54E1250B48F33DCD80D46F521AF148F714D09B59F3B62010DA38344F61EC4A28C6B133FEA1F22CA613 - -Len = 960 -Msg = D1E654B77CB155F5C77971A64DF9E5D34C26A3CAD6C7F6B300D39DEB1910094691ADAA095BE4BA5D86690A976428635D5526F3E946F7DC3BD4DBC78999E653441187A81F9ADCD5A3C5F254BC8256B0158F54673DCC1232F6E918EBFC6C51CE67EAEB042D9F57EEC4BFE910E169AF78B3DE48D137DF4F2840 -MD = 92AC60E5DC492010A45F46AEF05F403F7569E1B4E2D0C909C871A783FC12457DE281AFF4C4CEE0207D20EAF546285070 - -Len = 961 -Msg = 9475609D6686B9DCA38EA5DE587DAD1F458D59F96BE790896A32B2AF82F897389BFED7572018883432007222720EAE42A654DFEEAEC1653D3464E28282D567E8E59CC6EC53FF6AB20052D2FB27FB8001313E75700F58D6339EA4C55DBAC4833DB7FA59E5512019DB87022F8BDE9A4366484C755B410A01AB00 -MD = 18B23D828CFDA671A04F3A6B513D398E5A82746C492459CC0A6D3347747C79AC201F0115709EF3463E3195B312A8B8D2 - -Len = 962 -Msg = 61BB6E84099A381FA591A31CBF684DD9B68B5F752A2246E78FB57C016F66E43102C5CA5B0F19A7F6AC5A20174A7180FB9FB2B6D2DC8E4CAAEDEEDCC6F4032054E8B698E613B545D75AE10C0A344B656C8FB759B5A615DD6DD3EEF8254BEAB7FF03430E8DD0BF8FAA19A9F469DA37D943E71DE3B477873FFB80 -MD = E604CE3F4A89AD886CD142063ADADE7BC9F439B9ABD23598B629A9BF3428D8DBC4BDA4C53BA9C82C7811F25B916026CF - -Len = 963 -Msg = DAC1487938375CDA49E04607C6B7A3CBC3AE585AA81B05F009353C52D4A0A9398E12F10E3EC433232C2FC21E46C614D085D1570BB70D107039C2D13A121B8BC45B0681A19D05D62CB582970B14E982F04BA4AB2B6C5EF3379FFF473592DAD92B61BE8E967A90F3E1D2962947B9FBF5DB7C48D8139ED85DF2C0 -MD = B06D67F6BCFF43E788C17A951E9281032052A2D588AB81F4EA154A8F274C20271BD5F1B2A4CE9A73969DA650DBFF8F27 - -Len = 964 -Msg = DCE3F8690BB3AA06BFCECBFFD4355049288C073272A503BB9B351D82062E9EE85E7BABAAF87AC25ECC2E3895F8CD1FBE2F9DCE21A4E9295BF1F8B0CB8DF98726B390D52AD21492CF442385959E226047BBE0A9B10D013E7AC9BB3D3BB89E262EBECC0AEA914D6375977C4E39E55063C73EEF6C8CB533D18AC0 -MD = D45A934E9EC3CABC1F1474F365D5C65C867E1AAED14BE9AF2365A7F96DFD6D4EE1A93FD99E0E8E56A31D30C0CE3C50D6 - -Len = 965 -Msg = 1BDF288A6AEAEE17B671269B70FF9FC51F7C6B27A8B492C134D37CC217C225EABAD8A904F555E19F78B51E579D77082569B6DC2DAF8C30516B40611781ABB58DB528FFE79336F34CD07E0EA394E6ED982F5992EB89FE8F693B0F51F177518A7B42C3794AB9C55A02846F1AB250480E81AA82BCB18C173A6030 -MD = 8FBD62A7A3DEB71B1F2C5217558F641FA9542C2ADE2482B05D62573AABE20EB76FF0B9A0C208C67B35E4CE28BAB9A6CF - -Len = 966 -Msg = 588FE175F9D58E6149FA78E460E72D2BBE43EC3EAE3ECD4E39B292B627B4BC24E87E410087317E1A9D0855440B56A036349C18FED313D01CD85B30B67973F7AE119154120C2A0EAA3174CC89D68A598347353DCF8AB4D2A5AF0E2B954CC0EDD3A5D3725D60A870351000A24E7B9EE126F54790C3649E0C509C -MD = 496EE9BB1E3D7FF6FF1C0F8C7AD19C3C4842FFCB1B556FFB45F015D0CAE048383DAA4C6E80A290BB2CA556B870E7C34B - -Len = 967 -Msg = A5175DC9A97A1104E5CD368A1F3529A291BEB228E2CE94DDD8AA413FB6E860A654C95C649F594445F5F681484DF635D244213C8211C01DBF382942C3F83A6A1252E138529341FB45C06CB08B47D34E305390927FF9811933938B35297E63F668D907FAF7CFCC2DC3253A4BF80283AEFCAC42C63FE20D8F097C -MD = 8CE70186C362B051AD0BA95230AF918CFC3959D75FC920A1CE99DC06C08A0C8765D52F6B95264CE33BD4C8C2CB03E04B - -Len = 968 -Msg = 626F68C18A69A6590159A9C46BE03D5965698F2DAC3DE779B878B3D9C421E0F21B955A16C715C1EC1E22CE3EB645B8B4F263F60660EA3028981EEBD6C8C3A367285B691C8EE56944A7CD1217997E1D9C21620B536BDBD5DE8925FF71DEC6FBC06624AB6B21E329813DE90D1E572DFB89A18120C3F606355D25 -MD = 8F99032CB49BB022EE5FB32446E1D39AA0FCD749741E4796979D4BEA5AB1B04D241592EC6058E54B8EC9EAB274EE632D - -Len = 969 -Msg = 8B7EC746D297783731F7FF197779A6C0E053A84D255D9B69CF811CE154510B7D829F46E2F8F1FCF3185DB1987C7A137FF644A05BC0FFE4795419AB82F43D2EE079335101C95950740F76A3324F935C84EF7A122665F37CC7040824771C3198C745B92FAE74133488A0417C5E13E1D8C64532160789B93DCA4800 -MD = A93E8E2E1555AEAA890ADB7911E6CB01AAD9851F6559E0F6E308E9CEC6CE31BA369D961941D35B38CED5602D92DA24CE - -Len = 970 -Msg = A94F24D5ABFF3CCC0B8D72C4A721E3ED82FC279648E6BA849CA895B0600A086241C7810DE204B25104E82A528CB2C43057CF3660551D04D9F737D58EC0DAEB7E3A4573EFE20C381D8E8C79B6868F6FF718E5D6CF0613256B651CF06A5E8B4E20C43D6B7E6BA050A1F9F60C56F47BBFD970C3CAEC91DFC13E7100 -MD = FF124B7C444BA1E137F2C0131A6A9997501C990B19151DF1EBB7ECED6406F802602F89F06DB242855B8ECAF3203F927E - -Len = 971 -Msg = B9BF29E393C058AF5C3BCF93FED768EAEACD6CA7227E9730A2E78FC6C8E8D944967F2B412FC8B9BA8E3DFF001AC96B1E04AC0F10CD5207B3DBE7A493BCF49C2719AE0D20CABD072D7752F10EEE993373737CBBB33062CCB6C27A6606DDD8B7B57887ED9BE9FDF615D513830134867D039BD191501A77650987E0 -MD = 0FD29625D2092136BD81DDEA3247C9A1C60410B27F3D00DCA59676FE4089D1A50016A514382C03F3AB1E3918DE84F119 - -Len = 972 -Msg = A4A5663566413E82C9FF0EF700F98298437A3186142E70862E19DEBF018BC209BBCF4B251A994A14E1A4F1C8B07FE4DF5AA10556391F3BDB6FAE11FC8EC2AD36EC31767C73EBB71BCF688F6122F0015FFB5B65FC9B70401F8B4118C8A98AEB287770029CD0BB29FC451E4F114EEDDA588684C4EC8D18E68E88B0 -MD = 9711DE9FE400E31A942303F9451CFC7F1179F05ACFDA52A4F51AA90208A7C0B72B011092CA9E23CA57D7CFB630457405 - -Len = 973 -Msg = 55DAED515EB96107C3C810648169BF65CB31CC423D10280C60F872855AF11088598254FE85EBA0C5776C787D314B5EF092209D354DCD84F85327A92C177AED949A6C2739022597119D1ED4808FE9FF2B1BC4FB2D902F79C6E6E5435A4F4737CEC79570834CD3BD4E9BF7F2A3F7E0D3DCD006AF83CD188D61A4E0 -MD = 094676110D08786D8B06005D1AEA401313ED054FF929E60362AD6C349DBE3D9A95CCA981E0BD19F3AEF84BEA31DA119C - -Len = 974 -Msg = 107FE24AB253AD1B0100BAA74056A3637FB2A4CF89B13F618F947268BFDE6268F964B43C87C99D908657E9BA033059432A4DEA8E1748F7043C73FAE823B74CC10214965EC2F1E021AFAC25D4A3928C90D88CE4B881DB75DB5137B0B890211B9F1F89E262CF062223FBDB7B7831A320439B27013C83B564DF9F2C -MD = 47B9AB3E7CA38B939D9FE50930D36C43DBDD2FD55403561D1642CD1E93F3A108139069510FBDC8074295FDA886D1F670 - -Len = 975 -Msg = F6202E868BFFD3E288A03F4D334B78B723CC20F86FEC6AEEAA06693E3C6BD631C42DCE3B999051BB23EAC7500E9D94EA968C7BB0D63011D9CE2A4A58954EAA2AD8DA5A275E39453CAC036227E4EA4EF0712252A5F11981A63EEEA45BD335D33140208CB20E7CB2B4870AD4DFFB5E0E8C06D7E822756782B5D2B0 -MD = B34F05EC44272F7172447C8308861B602A697B2979D9CB741E70192AE7FEAACFF9F0AF7FC2660B6FB3A2E8761B7F2FDA - -Len = 976 -Msg = 651A6FB3C4B80C7C68C6011675E6094EB56ABF5FC3057324EBC6477825061F9F27E7A94633ABD1FA598A746E4A577CAF524C52EC1788471F92B8C37F23795CA19D559D446CAB16CBCDCE90B79FA1026CEE77BF4AB1B503C5B94C2256AD75B3EAC6FD5DCB96ACA4B03A834BFB4E9AF988CECBF2AE597CB9097940 -MD = 8BB4F3CF0390A31D682213D22354DFE7D580C811682259872F2A29A08D373FD998F842334F64F81349364A930C82BAD4 - -Len = 977 -Msg = D92EC59AE7D2C38D0D6C4203EB551D29AE72AE152241E0D42D6DA610B3070A4DED3051A3A607CAEF6EF487402BB205C318AF4C22048F1E3C9AE33B087C2DCE7A40F7D61BBB6AB8C0BF8EB60CCAF24CA5222A72967AB74A99C2096B8E432CDFA0F38E6BD59DAD95E1B0A5932328A36B62897E872A20358D79988D00 -MD = 2C528411A46BB7C535A0B0320F9291B76ADF5603E4C2481ADAA63994F4B64AEBAB5380DB459ECA9F99F9ECC05F714C1B - -Len = 978 -Msg = BEB1651BC96984876B509D703934E82198129E9F6F07492C1F37A6C8F8A7AF06D474BB23388AA492F41F589A0488C94FFF4BB6C518172CDF1804EC417DE35C212A44B65C73D236882327228DCEAC23BB05796735AE4AF05A7D837824CF6E4DC429963C16B2145B29DBA1516B37ABDF0C0C4F917EADC2643BFDB580 -MD = 0168973A751EF5DAFB1E0994F10DE80B5BA21A60EAD61D80F0B2694A9E03BA9FB4202BEBA850BEED87E70AAF6BAA5A5C - -Len = 979 -Msg = B19714A2A02455CAAE27AE643E9725A143BA473B9A6A40E8557C23072F094404E0D22A4649264C064B9869AF35F01D9453F2B452AB469B7E794A60727B23C1DD83BDECFD8269DB59FEA168E524A9D7A9F700247C5965F8DF5A179FB667CCAFF1BB189D708E6D018DFB5B3CC16466B50B6E6244793887D637F60E00 -MD = FA6D1BD5E12D7DB6BF51D950DFE46E46AF9AEB0D8F4B7A0C0416229968CB97D6263C2027B11261DA33D55E8658D9DDA5 - -Len = 980 -Msg = 9DAAFFB294AE4DE0628718707F96B2714032CFC2B15B7091610EE876EFFFE498390F5625B33BAC592BDBCD5AC419F1C4133F346931BC2EB1A82A90AB5941FEE961529358F1A739894104CA8EBB3DEA22B492E81F2A8D7EBF7B208C2000F0DE664E7BC4B2792439AAEE2E796ED11D9DE254B583C5A1FAEF2BA01EE0 -MD = A0E3746A7C867C0551A9B568899C79585848B04E824A506ED9DF63563039FD16CDB6FAD140B3C0F0D02035A74B7FA9D2 - -Len = 981 -Msg = 29800F52B584B675C62B0B26053A303D82E8707329E83689FF63DE1A55874D2155305FB332E49E49C016731B4CB4407D28703FF3CC40116DC5AE81FB8080F0DD8E29298570273C0255CBBE85C6236984F0FD0021A4951BD979ACF8C092485AF7DFBE4B98EDC81DC92CB2C3AEC62DCA758F70288FF04EC2AA2427D8 -MD = 835141B03119461FB5D4B35F639EAE7CAA50ED32050F4F4CF3026FCA5E9975A087E28164B35BAC844EAAF83FC71483D5 - -Len = 982 -Msg = CDE6DFADC607435F1D98A2E6C907869B5272F9CC63B851BEAE6185E4E1C08456C612ADD38FAF4E089A0DD4D8C74FD2705805F87417744938A99038AFA6A708BCAC88EB7723747099781BC44B79C35C00F0E609EB8E5FA65B197B3A6CAA4A1941CB5B9999FFBCE1ACA410D1F9EFE7BE43CFF02FB35FE893345EC070 -MD = A8428A3890AC48ABD0C7EF6A427C1AF983D0F1E2A76F99DE770522200DFE5FFEFEBCA3D5466277D9CFBB87FB83175DD2 - -Len = 983 -Msg = DECE0DCDAD18A4A646CFDF248D5A68171B9968E65F145574E6DEA421E73569DA82A9B941CA3973A342EA5AE80588C73489D3F42F28D347BA2FE9D67E0E7326BC3857D21A4AA0B70CE596072AA7979159F016AD11C28B213BFC467D68FCA254FCA30B0089AB52BE070704273853498FA055C7085696AF13DA063F7A -MD = 077C82281A0EF05719D44C10ACEB7F6B311BFE358EC41C9F1DB5022164CC83F5FD45404D48808C8A0AAF8AFB82588AC3 - -Len = 984 -Msg = 8AAF072FCE8A2D96BC10B3C91C809EE93072FB205CA7F10ABD82ECD82CF040B1BC49EA13D1857815C0E99781DE3ADBB5443CE1C897E55188CEAF221AA9681638DE05AE1B322938F46BCE51543B57ECDB4C266272259D1798DE13BE90E10EFEC2D07484D9B21A3870E2AA9E06C21AA2D0C9CF420080A80A91DEE16F -MD = 0BB7DAC544569E6EB74ACAB01A846F74AD2A0F31D8FACEE4D09FA49C81B93BD83B4F129B96DA4C0EAF165FDE52EF295B - -Len = 985 -Msg = BF5EA928E0690803906D6B96FD0EB1B2791C097B2E89A833CFB31E39925898AA6AC461F68585C43A4CA02F1E2E2E0079BAE65F93FEE50F0338913B806CAD9BA941D8A089F219635B170905D3C6564B9D8F30923873CEF618D44DA784B659F0A070454D57BB93AFFA4BD4CF2B12266F5BFA32A8BD97420DB526D02600 -MD = 810E06CC7A2ECF6899FC3997BB22300D841CBD7870AAAE794D78CC7BF328DB664503B06F78B045291261089160B83F13 - -Len = 986 -Msg = 8739B52698115E947D96E0F4B41E488BF1233CDC7ACC1B44A18EB0FE4DF8A6EDB47B5483B9A1389174753441289E00205C4CF7A55FD4D2ACF5570686DC12123DC4CD26DB5C6DE03CEAD5207BEE94D63F280CF40D26EBB7206122F34D17ABDD570A4494DCB665D40BA8DBDC46650B4166D2613D628B3FD1BB6A60C9C0 -MD = E7F36AE7A36015B5D1BB161C5C42EBEBB969AC53A76915907537910B1E4626C929D7FBDEA7CCED363FB304EC555D8732 - -Len = 987 -Msg = D610C8FCCF7577909810F3C630784EFCD2FD11F4F5600774977A55CF141CB15254237645BCCB124420F4AB52268AE4E3D128FEA4AF96EA09220874F5ABE331AFDBA7282B3108F5633D00EC247F862ACE4FBCE38F91A02C21B03136AD7FBC105A3AC0A49B08637BA4039FC3EF1FD2A82AC756FDE1C753C628CADC8C80 -MD = 7E124BC21A1395329849836929B7E3C6638432288CF62426E4D111025F4CB887244B8E363FF86606D50CA12AFB0FB1BD - -Len = 988 -Msg = 075487E9BA7B7C40CE8107A554A8940D6B041920A9124366D88DC20E2F89622E8A98140CC1F23AD25C71E6261D3C31BD9BDDB9A8DF92581350ED66272507BF63A6B838AC8099C31FF7832423B1B7B066706F318E5AC45F04999C5A29587CD11A21D3A96EE4DF76D5B25D5E5A978A79B67398FF6C12700A5290A4E580 -MD = F585B5892F336499697523941BB8F57CDC797523890BB9FDC39FBE00D15FA325CC36DA41A192EDB50E125BBE749FC894 - -Len = 989 -Msg = 102B3D774615C1D8140E59F3FE9AF4DF5FF0165A61E5D574244ACDFCF8F20CD0EC99B5E4D8562C2927E47395D7649461A1FE98C845F0164BBBC1CE42309B4C7810A49A99A16FB123418AD4B88B012B5DF7216402491A63B67D55989498F15A94D4AA6C55964EE0F557509C19F1A6E3BB76926FB6BBB5ED7AD6E23B80 -MD = 7D98A2F4FAF07D104CD2EEA98D1E7821B92C966619D6CC86EA85417AFDE524BA9A925C82C0BB44A227AB66AB23910DAD - -Len = 990 -Msg = 2E67063E542E25159C357C82BD71E869E7A1F1C364D9C4932C015EB6954E2BF55F087AF672D91BC3061933C8E94C6E524DE8FA2D85B7BB9E0C9C50ECD078A9147F431CAF3AB207AEAF57A10C20016943084B0225238C6F8F36C5631D359E6D6BFD29440A404C9607981CC8DD2051002F049F58FD3D08390B8DDA62A0 -MD = CFA64DB18FB39A9D3B7D425306365D21F22EF3A1D38E0ED0DC6273866D00CFF98A3F7704E6F90D85E94DC026DF6F21B1 - -Len = 991 -Msg = 335674F14CD689A1D83B1BC3568CD0F1BE5A8024349E5A863C40F3FD2B4DD49F5F13823C4D2F38BF87D4BB30561B21D99294E82653B98495E8186194D636EA00D66FC39EE72ADF537ED3C9B46377DA722097753957932CDA5FF77F0F756585CA7D1C98F084E90E96C1F7425D7B486F1C9844EE3A554B0F8AD620FC7E -MD = 9D0641F86113C893671891D906B0E5B280491F554180310BE610DF523CDAC86D8DA171CA078A18B0014C0FF0B6E0CC9C - -Len = 992 -Msg = 53F918FD00B1701BD504F8CDEA803ACCA21AC18C564AB90C2A17DA592C7D69688F6580575395551E8CD33E0FEF08CA6ED4588D4D140B3E44C032355DF1C531564D7F4835753344345A6781E11CD5E095B73DF5F82C8AE3AD00877936896671E947CC52E2B29DCD463D90A0C9929128DA222B5A211450BBC0E02448E2 -MD = 10DD9348B2D95889EE613907824A10EFC708A101A67672FCA4C6539F5156C7DF805DBE666FCF4CC578F421AE3CF27122 - -Len = 993 -Msg = 891C926AD668CCD7BB7718C43C2E22A8E5C2D398B8287689326506EF244112D0A5E03B2199F85B01F10DA8C4AB881773BE0870323A0F1BEE0B340DE96BA0EEF086784B496572ECF67B31AFDEE367B808109609D8B997604C0DFCC54CBCB50297E6768B74A609536099B308D30CCB665DEF4033F12D48F7182AF000D900 -MD = 9CC601107D8A8A5CA99990F7950046C2EE2C67043086B10753754D1C7E03DEF83EA7E795F2053635456EF2098628802B - -Len = 994 -Msg = 0D5D9B2A4E8F4B3EC6B901A03AD1F0993E75BFAF629E94CCAE58470FA6411CD874CEF26955CB5ABDB3221BEB44996780E23962C7AD87A92509A98920F1A4486AA27387799AA3255F0BB56CFE17C11A6E9F8CB4FD4C40EE7A514D32F1231B63ED092310D99C2351DC50BC79439DE971F12C863B9EBFB555BA75CDB86B80 -MD = 1DD8BAFD8FE02FCFA54F8B61F8315F44C9E51A61147FFE47543ABF6FF539DAC9C9ED0C5B9BB88EC627881113F8D6170C - -Len = 995 -Msg = C41477734638902C6CD4EFBADC2B78AB296AB64643D08B54FB4328639781993EFCB34777C3642FFD7FE95E773E8F9DD849243C0B268A3C1C867EE6674A303E1E8AE048B1058827C48590B8398ACD53EDF8EB6B97B036ED20AB921B9ABD644384ECEFD985135FE185D69045CF33F5FE18B6193D5B87E330D553999E60C0 -MD = E5FB2C7C3588314BA2CA8E77372C5E381571324AD5A5D4AA83786E7EAA7A256F4532C3AE86245426512D8F8A42052125 - -Len = 996 -Msg = F8DCEEBC6E71E0654F2C0AD8ABC7C07194E32BCB1655C86AA04088A083A675A76D266CCE0823CE15B5C8C059B795B318DFD115E51181414F4FC1619C1DCCBE909ED9A8154ACD44BF14DEA59E13E02C8940A122AE36BDC86E088A1725113560B5F6F3E33DEDE2495538F6D49676E0BD590C721674D55BE3B138DB3BBD50 -MD = CD0CE363257BEF46CADD0035CCABBACEF31D779BE1193E368157934518A1835EA3764295D5BB4359BDB99DAC3A952468 - -Len = 997 -Msg = B5A120C542550C04AE93A55997D6AC48A3A3CDD159C3151882BEA757AB79CE25892B11C2A6FCACC19135DE170AF6DBECACD6B0172F1DFC9646DA56EA3623CD6179F2F023D06952505731E85F4295833819268FA43BF3B00E5418D355AF79D830400E250E5F04CCB7CBDFDC20CA1F1534AD8D0C0AF78A7048D8CDDAE280 -MD = 4C8A13EE55A8E7B9EEEC09154DCE3E2425DDF6C19EA7EB1B90B469B1F24188CF6E94A20D39254501A879F693AA2959CE - -Len = 998 -Msg = 29DBDC75C55797AF9D8EB7205B0BC8703B69308568C992E23FB33506F880857A02EC1D4B5149A0627CC898022F7C8F5429C5C7BCB0D6F8FE8802FEB85A5879CE613EDA128C473AEFBC11EB5ED774035A0A5ABEEACF72B4BB633389745C662FCF678C0691910110091EADC11912D09EAE4877E3B03A997A89261DEE46B0 -MD = A4D6C48F7CAB8973CF66708D01B36414295F84A3B69BD543E61921E3445FF5C02D14AE527E8033DE65886C1968B8F59F - -Len = 999 -Msg = EFC078BE55C0BFF648E9FD2DD9A33B283995B7C4BD5B0999E804EDA614EEE19D224108C5081CF84389165DC607B317711D5D6ECACD080D272B28C364A609138340D8F2681CE9116E5931CEBF9EC81781E19DA49AC394AB340B6543C377BFF08C08AD9EBF9455030644E5A18ACC73CDC64EC0DC58785885A12CCC08D570 -MD = 3D7AFE040CD5CF4A07C9A640E60DA87CDAF31F20FA755F1AFE119CF2212C0A0CD58CBD82994388FC611697658C72169F - -Len = 1000 -Msg = A64599B8A61B5CCEC9E67AED69447459C8DA3D1EC6C7C7C82A7428B9B584FA67E90F68E2C00FBBED4613666E5168DA4A16F395F7A3C3832B3B134BFC9CBAA95D2A0FE252F44AC6681EB6D40AB91C1D0282FED6701C57463D3C5F2BB8C6A7301FB4576AA3B5F15510DB8956FF77478C26A7C09BEA7B398CFC83503F538E -MD = 444B8A6F1EE118DE3FB3EC76B2FBAD9EF31916E1F99077DEFC51C2E59C8E6A3E207BA48E5EDD66C72B5BEBA67401D794 - -Len = 1001 -Msg = F8A80B5D707D5CB67837175D946F507B9FC4E58A809044BC4E61F4FB2D2B986E4169ED4708E6B2ED0C0C308148129AB65BE6DF0E9C62C115C003580B388D40F29AE4CB435F30C9891D595D72CFFE36FADC5E39FD5B2A423B528106FA717580FDDC65F0B405159BE436C049D22096E314059540D64362439FF04FF07BCE80 -MD = 711C4AB096E363A4C9180BA3C9D8CCE4060F4F6AEE98808AD3CEBDBD6ACB3101FB7BDF88043EB8C9E881A0DBF357500C - -Len = 1002 -Msg = 881397A6C422988B891645BAFAFEFF2EAF4897BC1ED598C693B14FE16F33A553B45BBC4C0FE5F6327460ABC45A35D70427A867DE78BC7BB27C087DCF0E0E416C71D8EF95CC3FEC40AE699470A354580BDA8EA4CD21CFEA433CD2AD7A87DA309C3A7CA82FC80EC318CB7DA213EBAC14D3E8937C07B6175769451699373580 -MD = E7DEC2028922B427278BBCE03287F821CB6E4EEFCC819CB6DB9CFFE39DCC0BFE291FFB4117E68F3515CD5D491425E525 - -Len = 1003 -Msg = 2CA31ECAE38ECCBDD176B36679ECC7914EDE98BD88D3426589EE92A0BC1CEA705712B3D7CD9DD823A56F22F506966FFE58A2B6E10130B47401A62F67687E4DA182DAAD13226F08784A7DD8C8E1C1005EBC8D631D6A906C1C3EF7846298A9B18826A23F7A88BF20FA80E583A12D3A5A675998D5B561CEC96B9072E4169040 -MD = 68A0CA895F4370D8F21582AD82F7E49F26336102AF833873D81220A653B43648D1639564EE48FE237FA59507C135C100 - -Len = 1004 -Msg = E352E6FC140B3A9CF77DD2313ED07C5BBEAD0B6DB80C38D9667036AF05BBAC2AA8E31B93A63C98A966E13356FA8E6FC312B84D8FDD72A29AFBA5429D67521F9E650C0D68501DA50274FBFB946365FC6F5136F855B973054B8FFDD9237E8A88E955CDBF7762E66DC371F00E0AC8F91FFF6572894D2C968393EAAE5B0B68A0 -MD = FB07FF07989D46DF2EBE5D0E9F35C076EB0EBC9CDB5D92DE397994EC8179C4A07F5FDB440D2C88C3E5D2147C15B6B5CF - -Len = 1005 -Msg = 6A8303912378CC2EFCD9B9A67FC21041FB19CE06D716B180FB308BE88B7F3B3B089C833378D9D97C8D0B2D35F68C48CC25A2202565F8FFBDF926B2E99F0E62C7E7A876C25A58219A46C639D0A8FD12474A6EEFB717A4343F301E5801A8F4011FA7391F8C37386A3209B0E29A8C2656D245E60906D2BB0671402018CBBDD8 -MD = 53968402C53907A4D451CF9E0DAAEA8198002450A96B885A1E7C282D3275CB0278303C95E5B80E80D2E981EBAAEA3702 - -Len = 1006 -Msg = 91B2A9D434D3EC751C5881B9F738D5F799B553D6E9D4B8F928C845D4113142FB6EB9BB3D10ED463D83782FDCE58389F2930FFB4AAE89D505AE1FE7370F45E2C4D52EE64BA7F1BAE453CE068B494880F83B8B06EAD4E41889F30EFF6780873E2DC880D1C0500E85B189143BC170231891699D1E42E80375EB48B8A64CB61C -MD = 0DEEEDD90139AD8860848B66AD8EFA2DDE9BB9ACB6D93284ECAD97B55CE4DBC568050B74C811661F8FEBE0714D4C9B4B - -Len = 1007 -Msg = DCBA43253DE673A87C700169DF961A6BB5DD1ACFBD29D882933E67CE38A28FCC270028FF5BA9F0CA3CB243FBFDA95955B065873D33C397969E0F6B6BED989B99C72A2C6732C2F4C9A50FF224EE7FEE4A35D008C89A08DD7A69BF0514F0B8418D0BA90BDB5DEC7237B4CC4756192B43587025C49D678213A77ABB8CCC6838 -MD = 9FA2576B9ABFA37A57E18A6F8593C7815BD343722042F6C7A6CB01654315C5C634408EC2C3BEB2C9CBA47CE557BA937C - -Len = 1008 -Msg = 0E3AB0E054739B00CDB6A87BD12CAE024B54CB5E550E6C425360C2E87E59401F5EC24EF0314855F0F56C47695D56A7FB1417693AF2A1ED5291F2FEE95F75EED54A1B1C2E81226FBFF6F63ADE584911C71967A8EB70933BC3F5D15BC91B5C2644D9516D3C3A8C154EE48E118BD1442C043C7A0DBA5AC5B1D5360AAE5B9065 -MD = F4D17C6299BAE7D0E6D15A550B311F30C1B038AEF56FE375F3B4BAE14F7EA427C5AA987EF93285975CE5F9E46A3E4C20 - -Len = 1009 -Msg = CBAF5193380537A7BE1DBF6FBADB77042397BB65E092DEB4CB80BE1B34F92C75F7F1665AFA86590CE2E72CC8B36FB7C0326E37C02D63E153CE92D8A7C8A0AE01B27B41338B21C0C5FBAF8F717D930A2259EAEF2A0151878630A4CBE4024F71C3287687333BB163B1A6AD90102796CC902FA5FDED9E8D036DED9F4FEC12D880 -MD = B02F5415A4D5B8C81D795132E5BE4D2F56E1044F29ED6BA5302D23713FA58D90969E0D200479AC62DCC6A1D1B63154CD - -Len = 1010 -Msg = 2BBEC642C07331548CEBAB8CAFC7A9678156C6D9E0F344D76B924D029B395B5C5C9289793D84C982EA84048DB0241F1A765F6A62BDC005CF6D2A3DA487A83841624D2C9BA17B9D682BB07ACDD98362D58C0956FE14EA33AB66AF46369AF0017E95EFAE72877FF0BAE5F971CC1ABA22FB0407C56A45A29F8CF8613B84C8ED00 -MD = B6910D2A48DEA56DF5FC54E27CD0E10C8BC607C3FA7EF0EF86817036EC3CF970A0EA049DC5C60180D3C1673C66EBC44E - -Len = 1011 -Msg = 4A51CD0024B4B64885B922480C07B0D8B5A0FB9333255262BF8D9D5184A2DA73FCCA3E41C9100551D7DE7E2C1EEEA23BEAF4C3D6DBEB9E776BA9FDFF1A12E2C0E1769A1A2504F9CF1D295015E0C302930865F873A81500974727D81B2885620CF3F6D84375E97AFED7CACEEECC4D973E99E398678807EA990ADE94BC6D3F00 -MD = 88543B929F1F57E3A300DF2342992AFABE9FCDB1BA7E8F7D18A7F21101BD58E1D84971A36A06D8EEFE5F3BCA7E570282 - -Len = 1012 -Msg = 42E9B6E6107B2AF444920DBC1CBB9CE206A544D8CE5BB35901428C12E417E1672663EC7AC0E880636ED2F6D314942BA1A5B8A130F5B27756721CAB6B07C210D4292D23B4295105259304659C3A2198F2805FC8E0DA23132E53776309BA28D98CAD0C50B8104FF35A67C609310EF324E20365E695A21AA751B60742EFE9C850 -MD = 3382C683E9EA1012447826D90BA8FD5EE7A2A7DDAC2A301F4F4979CF6E16FFE24DE824A3A1380EB7A4BA506C20CDFDFB - -Len = 1013 -Msg = C1D22289C5BD9E6E58CE5DFD1E04F8554E21C45DB29826C2CC00C2930FA6523B6300849B3CF3F687156EE70BDDBA13FC0B159901BA0706973B231F1B14DE4E5D6B0530675318F7C9D58319A21D674C56983AA8633956318AEABC4F81C4A67068965A0C32B822C541562E2B73F2F77C1812963C16BF862C1E56F908379A28E0 -MD = F9CAE61453D5058D667E2A1E63F9FCFE46661648A7F574DB70D92522AA9D88811DBA2328B737816E60E1A1D1EA8F2BC3 - -Len = 1014 -Msg = AC30B8A0576A71EDCF7ED976281063BB934E29B0DA7149CDEBBF8AE7243EBEA77E669D0D831E9995F56DF3B3474D88D721DFC91AF2BDA84DDA53B56C8B3CE6FCC0D4858ED135A3E549B8EA79B8B9CA41B5FAC6E326B75ED57EBB0096A54B2C13421EED8AFA38D9DC88F0CFB71ADD6561F564F28B3BE0CDA21D045081B74BC8 -MD = 0C398924FBA96EA424E7748BB88B22E24D7748B351814D0EF5119C36DC95FFA9FB127CBBE8665DC77DE4456FDDD05CD9 - -Len = 1015 -Msg = CA1CB2686F67E663F17744F498F8C7191CDBCEBCB4C39E67C1136FE707E59F1993E908FA5CB3C31ABC31046B896615096905062BDC4A8909A253D967DD9CB47BFBA1817CDF7870D3A39F5E2C058ACA26C88871D94E3C10DAE7E9659C3D8BA1732B97271F1B41812A89644F3DB0683DFDCAD82C28B3C238B73602857F5DAC3E -MD = 9311A342ED5285710D816895076B2E994CDBCE570DDC02F2D7AF01F15F825361CCBBDF4B1D1CA7BB2710183BB29D1D96 - -Len = 1016 -Msg = A62FC595B4096E6336E53FCDFC8D1CC175D71DAC9D750A6133D23199EAAC288207944CEA6B16D27631915B4619F743DA2E30A0C00BBDB1BBB35AB852EF3B9AEC6B0A8DCC6E9E1ABAA3AD62AC0A6C5DE765DE2C3711B769E3FDE44A74016FFF82AC46FA8F1797D3B2A726B696E3DEA5530439ACEE3A45C2A51BC32DD055650B -MD = 39F911E9CB2763C8911AC3153040E48F403ABFE373E14B709A476868D3AB5841D1088F8393DD728305BA341138365D27 - -Len = 1017 -Msg = F27A756754DF98BA50E2A4EE3A11535C80A2076191D08CF98015F232BE0599317EABE4168C8A4ADC9EEEEF6DF285B9B00BD5730EFA61CFB094024D5B4C20EF6F8CDC1DF6CB6F75389905BB40F662C2D4D293E61E59A6EC2186600531E17E9A4D58F785029E6603B09C4AAAD31F0191CA3FFCB943A976E508F15918BAA7416500 -MD = EC16D3132BB1450673ACAFBBA5E070257CD36A719045DEC929E06685A1AD4DF50374DD376718FA513D3F3A2540B61C78 - -Len = 1018 -Msg = DC3A0D1D54DE91AF722FABE877CC34147D356EBB79F45F18F7BFB2772F53167C712FB6D6CD8E51FA6DD3D3E78E49C2B6489FC38AB0311FFDB36A5AB6B658FD02A4710B8897324163E3B233FA7EDFD672F44E1AD4CEFE2EAB06C8D8421D05D4F300DD967215EEC4A8AD9AF47F04D2C99C0205D6B66415B6DF4B7EF60DE972FE40 -MD = A3B502D14CBB98D419F9C46E4CDBDCFA8CD130052D1956691E7C718718FB218D9B14FAB3BFFDCEA5CE7016576AB32253 - -Len = 1019 -Msg = B39C004D0A5DDF2AAC50BD18F447723AAF56CB3089D8619AF0A86904AFAACCE22AE12C376579F53B5E63B16A37E710ED86A24F7071D0AE6D4E697754896BA7D647B7E10A0D56E5EFF13C4D213F20F34E57D2EE99E0232518CFF32BFED139337FA4FB8E5AAEAE68A6671AE852724E0978BEFB518B97E2DDE76760739CC0869C00 -MD = 3015DDB944BB8587F814FFD6D44C5B4A37C3F03EF9997CB8C066F318CD73554A41B51DD1E27DB0CFD3294592D3B3DECF - -Len = 1020 -Msg = 25016111E052E9A09A597EE2AC0F5624C970A4E1A1411160E13D0D37F4F0013358A5DF1590D1215397BA8ED93463142D9194A0CAF5F6FB3C8BA2F7B151C764A873A6F1A529D38C77F1A993BC7E98D6FE7FBCC66E9F8C96AB7A17A728BA2FB01A017769E208802BB1BFD7E837709B408D3ACDA2CEF1127D4F8332F7933B664980 -MD = B7A6434245D27F913571662C0B75F57D57A5B8698C79321790DD41B1E5CAB056B5AE289FA07F01B44FC37C3157AB76BB - -Len = 1021 -Msg = 7E699CD10F06D8CC6CDAE2C97CB90DA76FC28E1349276390C7DC7388409B7AF6118F5F291559145E09A47C346B32C89DF8F6945C6C901875CDF143AB3BCF6F6CD122783900918079B193E18461567FABB6FD6B18266519C7E4CEFA79CA89558A5613B67A375AB603AA796F0F20A3D79E7F47ED84E996F23D9F3DAB645D30AD00 -MD = 32369BB9BCFC9272955D8039DFEFC6436FCB7DFF5DECEB9873FC924C9083AA988F2A2188837BBDCC2F3B47099C6EC7BF - -Len = 1022 -Msg = 7C5260CCCC53E47F31F2389A70B999403F90933FF1EBCDE519D5C13F98F5209BC1D3DBE907DF24AE4655F64DEAE48DA7F932805BBED5BD670CE1180A9CD095BFBE078316AFAC497D45DF3DEEA8BB092A8827C0E4C63F5AE2408465B22BCB793271207818220B5E9001B14FF788E992D5C70FE7EB19FD1AFAE93CF8D22EE33168 -MD = 5AB0BBA3AF76783FA788D880010192BF84740E0D0A6DF1E0E6592BB79E821E2374B44D707FA93CF7FB9D9373AF4CD948 - -Len = 1023 -Msg = 1B4BF91CE5B2317E526F4046E9CB668AECD040B0F445E74A57544BE2A4F8572C5BD363240474BE6E7285B1A094E0F938D927BAF67B26C648A4A2933EECA67B3610210B7D3ABC972A0A6E1698BF2FC8E53E50FF4458C2DC5D581F78CE93A7D5758B3779FE9C169282FBB5BB0FBB84253AF925D1599D63C1216232CDEAD5A6AA6C -MD = 3D39935CFDF5D2F3485C68535C4DFF9B7FC0E53C7E205D667253A22EF1C4DE0CF7A96473F8AA76A5E3FF0F0DD64DED3F - -Len = 1024 -Msg = 2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817 -MD = 3ADEB7EEECF9069F143A10151FD4506AEEF3A0EF94CA65D4448ACF1E892B8EBB0887631804DD64E153AD41FAE0127A85 - -Len = 1025 -Msg = 6EFE4CEA291F0EAB9A6240240558F1D65CB9570E0D0DF643146470CAD699F010D2E22AD80E1B5C0312B9615084CC515BDF63E5F4153D31D97322B6583D962FA5B2864A7E5759B6E5E5472A8EB058046170B9E6FE71D49143B2B095261A0FEE5254B5CC94AF47E54BC23AB122AF7662BAD4C908A80CCF380A64854FFF50E1600300 -MD = C096147F766FAB89708B9E739DC162E56AED41433A5AF1C1A848A30881815A3A60DE713E8E392107A45B668D9E2E8C04 - -Len = 1026 -Msg = CA5E7C549122799F037C32146F540EEF7F559847000F24429C6163D88BF3FB8D8A973675A565340B84317C49F6A998125F0A0E282F9F0750D167DE1B52C2F17BE54297910FEB779639436FA5A07B56456EED08C838296FDA8171854208C9DC9EC982A5AF9B407269E89DA2DEBD8F26020DD91232AAD4D78C1BE53D1E3261FC3380 -MD = 5DD6D57056BE36AA26FE491E59D91872D1761EB0C1DE52382CBCB0047A11CF29DA6BC6444A119F758EC2DE17AF35DF18 - -Len = 1027 -Msg = 7CB99BC76B5B91CFECC52A2D78F09B63364DCBC4055EAA2CE91714BAB67F00B832E8DE22E9CC577C1496B7A303606789429D1C13DF87773A36D03EB33AF1C7500B6124FF3E2097A79D601453A635294C5F5794625363AF403E49B8F7823704C3F4A1F33A44614CBDE133073FC692F7030F5B2564E509BB84CC65632FEE1F35D980 -MD = F4FD7072F0CC29D61CDEF244848C02B5DAC75B599C64B31F0CE44B0D1F2F430B9577B746C552F8CE04AF7D22345FAB78 - -Len = 1028 -Msg = DFDC85887AA85D70021BBEC37A88C783BE70256A977A14C11B5991ACD3BE5B8945ACCCEB2774E37B8161E105E30F3DC38E2A610EAE923ED300C56006E719F4BBC070E04BC14267612E0ABA5F08A1C7C5070DDC31E30E2B6ACA6289CB509B356B6D67A1BDC383A51E70F689B0CE6F333216AA76209FD23C51E65BA2D04829308610 -MD = AE6166300AC9BD5427151F9FD95973EB879E4767BCA6F2AB1074747F21FD83727318585CC06FE911F9C740E1C623C15C - -Len = 1029 -Msg = A4490E4E8AA88667CAAA47DE7E8B1CEC83B5C75D883465AC3FC2C875FC068C2857D295B17A64C91861C8D091E54BBC30CB67C27FF77758FF6C976EC39ACF03B0F16E53320A4BB00F3B43D9ECE4151CFCA00C5D0F010165AC8F78A31F6A25F978A5FA988351F7B14EED3D72AC36DC135E86B44A4591C25C7AF98D88032732F9EF60 -MD = 919E50D874999E4E25E4459E53B68F0B6E16296F3BD7E386081677E7D421CEA61193387606855C5D85B5F3C36BE62151 - -Len = 1030 -Msg = 254D2D7947E9A7079C88937766191C20706B2B550576C82ED60B25CB3D262A42E458AD0C900080BD9DE109E25A414644C9CD8AD52554F9519B46952185E04C2928BE22BC07665F04C02EFC5A4EA79A6FA631726BB98EB903AFB014EFDE7DD1261D024A377BC4DCFEEC04E3387F89BE8CD10CA73D1564666D2CBB439D3F9141E4A0 -MD = DA5AD75DE8D8465A2E7EE992A2C0769661CFAC89B25B7EC55B4F03F883C9A4D54ACFDC126B94494FB2948199F2537EE2 - -Len = 1031 -Msg = 78EE5BD77828543846085243397AC50664B2C96499765E491E3ECB95AC6A969B80FE3421A86D31FFE267DE151BA6FD7723CAF30D3EB7EE316B3891C24F8456934AE808DFDE484C421A8BFD3F60AAF2CD2D52B47A6F57875BFCC41A812E90D883448955BE552E351DDD41394124413321435188516FF1D9A461F282CFB835EBC862 -MD = E9EE1587560E0316C042C56722426E5D2BD131FA9AC2074FF55B9B27DBD2703DFCF3DD699FFD7836034E7345EDBEF458 - -Len = 1032 -Msg = 10DB509B2CDCABA6C062AE33BE48116A29EB18E390E1BBADA5CA0A2718AFBCD23431440106594893043CC7F2625281BF7DE2655880966A23705F0C5155C2F5CCA9F2C2142E96D0A2E763B70686CD421B5DB812DACED0C6D65035FDE558E94F26B3E6DDE5BD13980CC80292B723013BD033284584BFF27657871B0CF07A849F4AE2 -MD = 14830877DFAFE6F886A22DE7CE9A5FC74733A8FC27ECC523B6B4524E6312CBB22B51D7EB9DDAB37BA54BB2C0BFC32A6F - -Len = 1033 -Msg = 17934FEEFB19AF1D162F47DC010049B39C84AEBC5E11D43D9B46F843CF75F8128D7C655F10E7A815E9A6339D1B427268FE1D16B803E1F1C9FBA0C76DB007B520D821FAF833248F539A368ED17396DAE14C85009FAD853B158C1C48FB06006465367E3ED31437580E094E25452FF26DBAC133553D3BD22B7C1578E314BA047B799280 -MD = 418FB7AB604B8F9C9E99F3DBFD6748AA1BFAA1C658E00A9C40F9AC62B7CC6013892E0D6063B7BA40AC9420CAF070E181 - -Len = 1034 -Msg = F828FF08E8D707D43B3D19E6528A3E0692259A8BBCD079A4030EE0A43B095E7C508666123E7DAB54D93A71A3A67C8013EA2E20AE0629A62242FE190F7891BAB9234CBB7AAAE3AADE2E427224D7A018B0BA866AC05FF87A7B7391FFECEA5E94E66B62B63EF03E314F06F3BE2E54CA6339B6DAE797D17DCC78BE7144C54B670C5B8400 -MD = DFB631BE96F066013862FF951596ED501155DA7CFB5E9A18F5C42839CAFA338F24CF3898D1D277BC69789FBA8DBB7D4D - -Len = 1035 -Msg = 3CE70939498490AEBD7EB61AEB4216954AF123E90DC7EFEAC7BD364085BB7803B9C0AB20BA9EEF065B301B417FEF08B994BA4D2B52C75EDDBA92A57D3FBE962A5B519A0F3B1FA3ABB39EDCE126A124741842C8F745E33D1ED1B082AD01D86007EE431A8774981EEFA9286D1D256F75624A59C222AD70C012DCAF8E19A7ABBE27B0E0 -MD = 6E5DE6A6B68F48ACC537C8E57BCD827A46D0DEB175E7ECEAE5BE0D454A36B89B15AD2041FA473E66DF73B6EAFA355578 - -Len = 1036 -Msg = 0EC5838E1DD9C1E01BE54B20EA20A834D4573A4F4CEC151A40EC8D1D9F97FA536EFFC957AA86CC96616C4BC5BEA6F15820E9E1BA794674309ED6B90D40394D644D9A81220AA7A6EF9645ED760375A3EB3F515EF80E2ECC816809EE4E0ECA9A41482C1DD65964EC78B3566F8F5A9C7DD8746A66ADABACD2D827331CDB3CFCE2F94CD0 -MD = 1405E467771C3F6EBA875A005ADBE2AE97964D7B1CAC08A3A8A1D1FABBDA1509C0AD677E40F7962DA682B5689C90EBD6 - -Len = 1037 -Msg = FE5F59C765736017B6105040F249FC5B6957FBA1ED5E4A4F625C7F4B9EF7B6F2E24ABBC543B1CB53EC8B52DBA94450B13893320701FFACF1730073752FFF295DA40485F8B8DE9B3F7B1FEFB4C1E07564022A3DE7F102FCE0F37C6DD08220D1C39537DEFD9DDD87ABE6833C4727DC08E81E2DED23CADC3D52F28FAAD89C69BD66B998 -MD = 76DBA2280EBB9C0159D32CF99D318BF9C2DA7D872811DB3CA25FF3B634D51794D4E709C340C68D68F01588BF922E8DAC - -Len = 1038 -Msg = 964B2419D5D9D2840AA6FF56B88321D60320599B00852613C563A501FDE3C14CBF4591759FB6CB3BAD876FC0E39DFD4866B9978B65EF92ECDE9FECF3484BEC6A125D0ECFFB00ED074C2570CE913C8916EB3A7EDA6E9D70E133C0E61879CF2AFC0F4D2A3685A8CA979621D80100F6C0B2ABE9F9957D89724180AF98655CA7955D428C -MD = 68765CE4B964DB190E919F9F1C719AD783CE6A61E69EED647EB7FC18EBAD3A4D76160F34D20C37A405821CD3BCE91A5B - -Len = 1039 -Msg = 221BF8337CDD673D323A6DB530A225E621A573D5497B1841D27A96D32AFF8E499D1EE360CD8D356C907371A034709A9CE02E650426A0C5E9618FE41FFAE0A57FD2CEF4C47437557EAFF02CC2BA394303C336A464BC9241C8FC86C157B68E35B36B8BB301ED5F906207871ADB49E02EC8FE2BDF342D23C8327032DF70855FC6B1684A -MD = 699E1989E340CD35CF70646767691934FBEC28BD9E6368661500749977C71C59D1DFF30E98517D1C155EDFFDA5874828 - -Len = 1040 -Msg = 9334DE60C997BDA6086101A6314F64E4458F5FF9450C509DF006E8C547983C651CA97879175AABA0C539E82D05C1E02C480975CBB30118121061B1EBAC4F8D9A3781E2DB6B18042E01ECF9017A64A0E57447EC7FCBE6A7F82585F7403EE2223D52D37B4BF426428613D6B4257980972A0ACAB508A7620C1CB28EB4E9D30FC41361EC -MD = D109532BC4217326B3D25ED2D2F3F0D2482CC5BDD054218FA8BEDB91CD814F7FD683AA2AFCB8342CD34CE54D607E3DA0 - -Len = 1041 -Msg = 3D90A93AD2235F8BA283865E49711D1C3C990F5621C18A31B626421D431476F367B06B40C5867F416935FB556FC2F8628F7BF9AC3C28BD796C2A332B46CDC624A62A21D22AE6CBD931F5A9EBED57092DEF55879D7AC9D05AF4475C75CAFA2F2F3720A830114056FF13CF9B0CDFBA04CF358E2D6F0C1186A68C871ADC4DDCC70F476B80 -MD = 66A75230A55D70A5F7B612104D957066FF2C803FE4DC0AB9963B4A717D393745C02BE54862CC0F5B64C8A8CD69E0C9CA - -Len = 1042 -Msg = C8A7DD1E3C1C4B00E21E0709922D5A2EE2DB3EF4D8C772DCA8006C9E99577C2E5334A3AC65E696D0878F9E526C51518421B37204D37A571D0F71C193A7C426416F5D4ADF1614D6B50DD2F316AC427291CA41F369B20E823990D6C0B4F557281624776669533F9D01EA31D56AAC5D6390EED5D3A6FB055BE7E7ACC53D28C657D3B66040 -MD = 42F3A2832DC5093CFC45B99B8FAADC54C082C902019ABF0301EB46D543AEE9126027B7DE119F86A71CE5DD58BF56924A - -Len = 1043 -Msg = EF927430586D5B9B2774F1E92055A0BF6E683E0F0A68B3B6034F9E5B839BD0FCFD058E99C655B827318AD098DD2DE10DED60BC1B11A3A7AA1370EB898FA4505867A20236EF89EFAD3BE5A82EF39C785F24359B14B4B629008327E708F9A9830CC66356AC6F9D5E5D4EA6A733FD6CAF59F5796FBDEF70DE66B1A7C0AC56F12DBFB924A0 -MD = 8923DB849CE1A5A70DB3751ADD41BD91F5B299CD340A163D5990174ECE3347031B6923290450B3E632D100A15D9CD92A - -Len = 1044 -Msg = 8133BD79A1E1499D04B283B2AA1238CE2A50C1467248010ACA4FDF9D0046F6BB069DAB81EBC0F29DED2168FC8566E6C44EB222185C894D0FB582799A47F3A4F9147CF11A4359C5D4CAA8A00B60843BC04F08425073222E083D7897F8F760AA3640D09EFA0CA1127A536D19C09E7DC1C0E3409269FEA735E10329611772AE1A5FE87B60 -MD = 502DF1DF9DAB852E6757B7B86B89A7FA98C4BF97AFE5D56AD1BC6E086BF7C0E6A2210E48A31B165248514F20A5CD31EA - -Len = 1045 -Msg = 017103601A622CC6479298FC16091B08BEAE94B0C20380EDE796390CEF7957AC31AF910E0785768817FD68DC0BAFB27F15960B8FB417E792DBA5779DEBAA9DADA43EDA2522277233DA2F544E53394633F3BF92DE1E30CE5B3395BC941F5229F56C76FECC6026FDF5E4A95EB6CD3E90121CD16E4DFDC617058A51290A1EC2F663EF5E70 -MD = C33C29C7CBA63D2214F60D816B7494844AA31C341B3939FFDEA5F082AD6951058D9C3D5DD2EC10B99BFAC57F2B9805CE - -Len = 1046 -Msg = 9AEAC19F616A4DD3BECD72939B6F318651DBF59C6E04DDB52AA4923C4054F2B2F6A14AAE357CFC2C941DCE1B6E2D2766F29F401E7FE51EEE5D67504904B6600C2CE16B8D0BD3D2074FD00B516BCCA62C78246A5062DF3F7B19F47856F0779AF1A5FCE21CE60EEE6A3129EB592539C31982786F881744B16E0EB2357EE72A2BBCFEDA3C -MD = B8342671F796D4694EF4167CA557928F9EF6EB328BA0AA2C158DC9273CC39BB62C8D5A537F3383F07E38BC4529E94F3A - -Len = 1047 -Msg = 464ECE94E81ED3387EE92183B43B4BD70F06A9F2FFE3072075102001C3BB608DFEF3CEA25EA521D74C95BEC09E4D2EC0BF3F65BC0C8DCE25FBC9D7A90B31ADA562278A89C3113563ED449EE12124ACD1591D3D586476B5B27D3B64DBF27934EE8CF97FE1F6259A0D520844886B570551BB532397EAA46C317F63728A37AB22A94D98E2 -MD = F6B76BCB17F5CB20C0283579BD96420DDCE7B52FACA4D89DD4A1591CBE7BD8D2C8D57135C784D06D4BC70A9ADE809C46 - -Len = 1048 -Msg = E88AB086891693AA535CEB20E64C7AB97C7DD3548F3786339897A5F0C39031549CA870166E477743CCFBE016B4428D89738E426F5FFE81626137F17AECFF61B72DBEE2DC20961880CFE281DFAB5EE38B1921881450E16032DE5E4D55AD8D4FCA609721B0692BAC79BE5A06E177FE8C80C0C83519FB3347DE9F43D5561CB8107B9B5EDC -MD = DE64A37A7456638D3ACA1B895F4A88C26817177986A9F2F5B77B49CFF2C3E46BE2C49ABE89D741375DB87F4C898F6762 - -Len = 1049 -Msg = 21DDEEF5DEEDD0438878B962A1D8A389678E34170A9C7DF55A2B0555D23AB3BC604D219AF38CF4B53F825CFEAF5B6CBEAFE028F61260CD1730F5CF32E2D9AE09ED879D4157B52618D6978A7C30C4DFD42A9C51373C98F486797589E362E3D0B27A7D29EB2086549A69E1F4EA94E915A2A2B08C19ABA3DA21192121B39AC7159356836900 -MD = 351E9720A910D2EF9EFAA82748EAB784ACB053AC95C586EA259F2EA8C6BF58DF0FCAE4BED0D934B6F83B6ED8045770BB - -Len = 1050 -Msg = 6A57AB28E6B5AE23DC9B0B3D9DB281C25F2CAE1234A491C5429A367C46E237F33246E28BB822FD7F0C8FEE333FF8F810C5F25D8F1755E7E7B35954E1FB5D546AFB1573D6DE44C4C6E15AC43396AFC517B2BB23A134BFBEE7C4FE7DBC4E966F93A1A92DF5CC79032E37B35BB5AFAFA31A2BF03152D8668C6A669321B94A5B1399236955C0 -MD = 7F33DC921EB4711A6EF45AE329CE5C2779138E09448C1D3434FDB11F1751F26C27F574EEFC9D0F3B5BBE16A2CB580F8D - -Len = 1051 -Msg = 33DE2D5AE75E8F29C17C780363BA7A390AD99082C59C5131FD7EC40033D6BF32DDE1142D6079F2A3080A6CDB3F276C02C461882114DB8A6AEB5F91C0D66E189B2C956FAB3565E4FACDCA863859303557EBB538700CD5BDA9A40CD97150676CF8850A1AE1E7D349DA3E9F9A987E8FFB8A434E54A830833DDC96B9BE8E66D4B57E260B1D80 -MD = 4CDA197BCC0F3D19070B185E4317C687773D2B7F442C6BFE09FB2DCFC223BD05241A12791B2944ED52FC61BCA98EA734 - -Len = 1052 -Msg = F5A418ACA95D064DDB98A6E9F2782583280F70B7403D5973F622E50DAA6ADE937D9CD544BB8203092C5DBCAFDD426892E6B46EEB84940AD8E1D57D686EE51AB61D453672CDD90F4290F5FACF19FA52FC7DD277429CF978F174604EEE3E941F475EE25C5B839735F2087DA632724211DA3E5A9C551D5633FC0AE624FC93CBD09B85706100 -MD = 30EEE2DE4E597286F5E112CB7D37BA69CEAC5402D7844E86CAA639D77696EA7190F38746B961CCE5674B983B2699111F - -Len = 1053 -Msg = E7B4FC9419F04B5BCCA5FCBDEAA781B365FEC1453BBFBC96D48D8AA601433B22760055AFD7A200B6E3A5EC998B1DAC6448900D2C733701049A3AA90CDE4D673DA4E70C4A12340B5E88370ACCE0236D7F617240599E50F53D13D6C5DC461F8994C5CC90776305944DA2BE7F154FC18A1C1B5B31F4F3362D4DB7BED6248AD6E87831A99B30 -MD = 8292D297A8CA9E9E763F9E7FE2CAD1F3DBAE8F9A42CC7640D28D6E232160E98CEC73474AFF34B4D53AE973B100F0A480 - -Len = 1054 -Msg = 446DF0CE24DD985DA3A3947E6ABB50AFA23F2FDE99D3F9F59F1331B9814FD363FFC551CA46EA987D10F1BA25E8CCCF2A4F5DE02C51A08BCDAA8306140B32B06A9C0272CD217B95926215C1AB32AEDE04F6425C1BE94AAE51CA0923097C128483029B2EBF8CDF38380EBC72DAAA62AC6FACCD9E35DECD63CC28326BD0550F54FEB9904278 -MD = 77404393A3802C606FA0CE19884FC5933CC26D69EA610F166F2C94043256EA6C267A688425A5766478AC6142BACACA39 - -Len = 1055 -Msg = 3B176161456A7EFACB82F588B41E9512F3595948C9F54630A25568116CBFD2B92C4174E11BEB34AEB35C3E496728734D4CB2B6BF3FF8477D34802FB6BDA003D3F03691B1EC4ED55BB58C7539A16636C09C60E03FA0FE6AC5DA402E57F03005BB0854E80E941D6C5DBA3CF2414F4140ED5F996B108FA054A68A8DA5BB3ECDE20EB5FA1768 -MD = 8B1F5EEB0EA8CD870B9BC4909857DF53926E3EC2EDB687E0FA948C371BA9DA3B3489D356E42B86E50CDBB340C7FCEC95 - -Len = 1056 -Msg = FD19E01A83EB6EC810B94582CB8FBFA2FCB992B53684FB748D2264F020D3B960CB1D6B8C348C2B54A9FCEA72330C2AAA9A24ECDB00C436ABC702361A82BB8828B85369B8C72ECE0082FE06557163899C2A0EFA466C33C04343A839417057399A63A3929BE1EE4805D6CE3E5D0D0967FE9004696A5663F4CAC9179006A2CEB75542D75D68 -MD = 8D9743710C171CD399A0D712E9D53374ED8E0A97672A40294C74F0D503F0292D6F41D5CEA08FB3C623C4EBA56848770D - -Len = 1057 -Msg = FC4C32F6D00559A9BD84443E62CA62BD3F9AD791CCC43DFB58A562E73F9050196DE4D1AA15515B22560429F7C6BE74066F3F55F2BD77A9FA2E8072E5697A76A9AE7349C72FAFF8C549060DD7290F2C34B23970F0F5504B120B2442802BF2E75641B977728AFCF4D36485BF2D155B4DE9FB392B657D5EC5BC835A344899DA6D996663858900 -MD = 165E6F8E484B9DA2D660A27058131A0224F066D460D3A004B2D6CBF3C114F709DA04050C1D7DE686E6E2072B69558E98 - -Len = 1058 -Msg = 14CE9F192FDD23BBB8A407021CC2724E0DA6ED7234E06695E7693A2B02C1C043DE9833C273C0D1421369E73FC206FE3860D5B7F258301112DB5D85A5D2CCE3464CC6E4C45494A155477DC4A9BBBE5A34F4D8ED59371F74CB19809249BCD281226C0172E73C354923D25142712D307B3C4A68010117DB88EBDF7485B734FD1F7400F0607300 -MD = 9DD5D138908172B4E583D63B506F9E9CB2C81C5EC8736035702AFEF4C8F919C8E4D14A15141CDB46C763FB17AE25ABFC - -Len = 1059 -Msg = 280E16F8EAF76DD5CB1319E7A832E9C8C19665B90D57034947D3FDAAE11FF7C9C4063543AEE6131F1240F1454141C18A47AB997C9DEC0C2E603A2B781C8886A8A27B19F72D6BD1BD0290263510A9452AC3AE81BAC01C91A759C404AB3D28F5FF4D6F193E3B22F44E2E7107F6D5D019EBA4B016BFE0E2C337B5C3D4516CB5C8E17FBE13E8A0 -MD = 0E43CC93881062C5AB74CF67A434035BC5FAFA7842A469BE1B8BBCC45B3E3BC0FCAFB11FE0B69C97C4D56DC58B8F5261 - -Len = 1060 -Msg = 0EFA3A88C6CACC9734525F2F6772CC9A7B55D07B87A53CD89E2B630909A96124648FC5523E0CACAD477E2A903F2EEE62B700902BB571E1A55282FAC0269378DE49C210D3D3564017A8DB4684755C0F139C414EED8CEF6993CCB1D76E1983B6666F90B16F5ED2B9A53D3D0439F3F532BAA784648E14B674D33AE96A823ACA205F2B1FCD5D10 -MD = 58356DA670D3544C7CC7AAE8223E1F96A191251E53537D0F0437EE2DADF2B8D8F603B7755EC2B9D632376EA02ECDAC05 - -Len = 1061 -Msg = AE1BEA529E00EB3269266AC316C88D3300ED9EAA08805D71BECC8AD93C916763A1616946F7A90F4CBD99C3B9A2122DC65D7065A915334B680843A94EFB5BDC0ACD4F20B8B7575BACCC415272827CF359D81526CEDA8E1B8FFD030B2F4E5168ED8F4088961BF8AC8354703F3E6E427BD98D5FA0F60EED513B05E2A5DB569CB62FF1685C3088 -MD = 8F9A0D6228489DA335B1CA6630C1C63346693710DF7D7E2D372103A85864827B117C62488FDB30F6ECD131ED55C4C60F - -Len = 1062 -Msg = 6BEABE530BDDDB616E859A1C553D80F91A1015C9A0AFE1C16519B4C14FDE70CA20A05411BAD72CBAB6A125206B1F44ED8042F45581AAFF430DB140942C3FF3A6DF70B0AC32BFBBCDAC05D7B2C03DE2554334DF6BA3A921511FE7EAB8F7309D4FF3E81C550B0E0B33FCC638A3F80C21E01963781B588B93BE505D914549D33ACE1FF83FB010 -MD = 2295EC33C63E04543F3BD2FC1592A50A4A0F27026B533151251DEFF82F2F83D449944FD56557F1817678CE581D8CA822 - -Len = 1063 -Msg = 06BA6E79C6A8C0EAF1A1FB39FE0009BE2E7800A4692C1A01113BB666607D0EF90FDFCC0DF4F8A70491A28461669F2B8A45EF158C3B604ACC4EAF046674DC5FB38D941BE12E57BA96833A573140AEFF34ED4203DC4324AECCDD11F1F2B5B2DE5B77C0689040FE7607C67F1199D498285DC0A1B4D5B2CFF4F1E2EAC54CD09F26F608AE6B6598 -MD = 23959A961FB097C998800E286DD0BDB7D96F28B133462ECA58726D8B45E87D1020DA14C1D4103AA7DEBA69C73CAB2698 - -Len = 1064 -Msg = 59AE20B6F7E0B3C7A989AFB28324A40FCA25D8651CF1F46AE383EF6D8441587AA1C04C3E3BF88E8131CE6145CFB8973D961E8432B202FA5AF3E09D625FAAD825BC19DA9B5C6C20D02ABDA2FCC58B5BD3FE507BF201263F30543819510C12BC23E2DDB4F711D087A86EDB1B355313363A2DE996B891025E147036087401CCF3CA7815BF3C49 -MD = FAE998D1074E30F2EA0A8B9FE259FD2E2A36804995EBE7E3A5AD34865B1A3316675297FE8E33EEF8ADCC02BE8C4765BE - -Len = 1065 -Msg = 53C04FEA5FB71DC880D097A3AB90D549804DC48A73117B901C0CBC5C3EF590331569C074E0EE30354A94B34AF1FE4CB7A620C8E21A94027EFB0A04CBE18570D8B0C957E35782D46E5993FBE747AC158B1F0E4CF4012D57204C5226F578F0ABA56B517991C4309F3D1D1F7F9FA9A2CDF1E45C874AB297A0DD295BAFD951A6268117F2C258E080 -MD = F4AFBA7BAAD0BF5A223BCFECCB6E0E3CEDD545684ADEB18B146591F8E1AC2CFC34F9767CCB372E676A4C07B8C0101DD4 - -Len = 1066 -Msg = F8A6F6BD845C0831FEE2F05132462FD77F9252404468A658FFFC537C5A1965B69F2935EADC66C16FDF98B3B3D866A4D53EB0EADC7F1E639574532ECFCC1C67D16530821C8EFE9A28CCA527F35924C015B466C3749F72DFD84C82732B8986ECF7E7B2E4E5F31CB5347AAAA5E82171FFDD92647A7F823E4E2F8889F732B38CB072B14B5F13E740 -MD = 581E815290B189EA98B75ACBC59230820B91013B5C13B4BD3C79A55A37FBD0E0783FCE9436DDCB187E624EEF3E3A92E9 - -Len = 1067 -Msg = B7A4C88E4A3D7E7A38CDBE3BA7504290D21F255078537C3D7EFAC3B5AFC19F81A0C2BC2F2F4C3209DD7D2C30789EDD143C1641B274FCB8840D4D94B809F83AD303FA7C23BE570873FA615F20AB79E2B85C09AA80061D823D4D3BDF6C49937350888984A9825AD67C9D6DCF6B05B3F989419FF63697010633C1D397F7E4FBC7F28C816B9D26A0 -MD = BFF3605D90EA29FEB772DCDD35024D463C753D44EA1EDD5B08F927ED5375A813C0DAF2C7ECF6E51CB913A118C8EEFB1F - -Len = 1068 -Msg = 0915646912F9D65E80B4718E4597B3D33C8A634964A2FCCE96DC7871C2E3AEDCA6D83A78D57380241C9E6C4D010A594D31BE0CDDAD2403567F486CA5E7A2EC49358A87E0E311839BD0475F68BB6CB623967E21AD25216D985E841F2E248853FE45AF8001FD02DDF42C62B9AE6D58CCCC77DFA6C3652AEEBD3147835965A524F61F20DAB12DB0 -MD = 8C29F91CC3BD04175E6C07CC01BE2EC78DDD73D8576A85FF9F188481E01417CFE774329E6FDA6ADD0C752A69E6652B96 - -Len = 1069 -Msg = 00A9047B379AB468B988C672FBFDD7B66E06F2B33E3A1E35DCE0D57566E3430983237FFBB7C3B469CDF5239CD6B151EFB11B8AED6516723DC2AD77E448962C118A2B1E51502463678F86E47309158967A168D33461DEB278F7317333ADF3B9C1B8011A39BC5211CEE3826678FDEE96C1BCA6D7035B9CDBAF58A4A9148713E1C3306C03C7DB10 -MD = C58DDFC54E26FB54F1F3BDCD3AC4BF2C8D73D9B4BF72A36E7E745DE4D40F5C4FADC3451582EA7AFEAFD38B841E26F675 - -Len = 1070 -Msg = 409DBDFFB836B5B92DCDFF82825CB19043D26CB2BFC2C1961338B87647E7925DD322DA8A3611989F16DB1D5971DE0783FF6FE86D33E175EC55E4BD4F43DD8466CA3FB4A0468E4BFB571CD7E3C2A44D3356CD583EB63D9D9583345DC3773D9D257A1FAC8424AE528C3F8DB6C8383915F87EAF86488CF0435297B38A5341CC1560055149FAFF90 -MD = E508244FE6B198350E2B61B128E1F001F3B95B6CE905F263976A0B0BFFB7D84AC58C9D2BB291AB0722F937E164520B80 - -Len = 1071 -Msg = 53383978B3D3F0F99DECB33B9F183136D0928A2F4EABDC4937F40E021D7F28D49FCBC48F92DB74B3CDB14C243DFFF1FFDD6C2810BDFC08712BB006D5717D9B3B19B31A6B78A4BF6E4206A1E229C61813DFB5D38AF3D2C0A19F47FD813A8802CFA837F1AA88F20ACDBABCC3CD574C81BB69E26732D2E77B06366546B3E6DD75DB443E0A1B16CC -MD = 15DA053BA8E2F6DA102033B63B58639A9F826BD8FFC2BBE898F7B78C86B56E7DC8E50E20951FB903D65E66172C627F5F - -Len = 1072 -Msg = 77EE804B9F3295AB2362798B72B0A1B2D3291DCEB8139896355830F34B3B328561531F8079B79A6E9980705150866402FDC176C05897E359A6CB1A7AB067383EB497182A7E5AEF7038E4C96D133B2782917417E391535B5E1B51F47D8ED7E4D4025FE98DC87B9C1622614BFF3D1029E68E372DE719803857CA52067CDDAAD958951CB2068CC6 -MD = 0AA9CCC3C9CAE1603D3DA5E95F304ADB8FA575833929B09F7C1095D968BEA0471DFE8AAAD3AD11266DAAFF95F6667ABC - -Len = 1073 -Msg = CC4CEB09E892BA340EBD8839690C8C77B6276E33E1E87ECF9F3F475A36D22677258FB019DC08EE7670A685DD766213ADB7A55924D05FDCEF85A0B033ABB97BEBB9210D278EEB6837B4511FBE53BED7AA1880B1575EB1EB6999E0AA2723B50C76B9D72C384B78EB418F7456FFD61030ED761063FC5CD76A7BD16ABE1C050B7C20AB7AF6FCBA7B00 -MD = BD13F5BEA1F0066681E93B11436F5A763AA68AC9953CF8A51B8EF9B0820D056C7FA3F552B1AD90CF93483B6FE3ABF0A9 - -Len = 1074 -Msg = A171F7F0CC38AD3C6185BED8BB94EA42AC92CEDD458215264B8CF9D2BDE36D4BAFA2B885CD8EEE3BF0491318D84ABC1D15407080B7DD8F4652CFDC8CF1C709A8CA3F322C92954D798C01AA17D6B5C45B5039E2B66839184ED72770620015C06F54C53E6CD538CB7EFD987D5890C7FF013CE93240D34C68278B92AB9C73F771CD3B1DCD1B8C3380 -MD = 9C890D3264EC2F465EE683B8E4CC58CC12D9D99436483DB10A325FFEF463BE5F6B4DC23D5E37B0EE593AAE9D1ECF2488 - -Len = 1075 -Msg = 34A955BBACD0F8D9181E6D573290010DD36F46C16D5342DB7DBE9EA9049B9B14766F822B644A598DAD015FCEC1A2FAC8C4F2EE961E8A9E962655D05144F54B2525C7A7D98D1AF46952F782764C6AC9BFCFC9C0ADF3E12038C89BAA3DA273D58B406D82E1D263D417E75386E9DE11281DF4D96208FCA32B19D871A109A736FBC5C3F29FCCAD2DA0 -MD = 675F3E786C3810A524986B1A564DBC0E3918B37E7A1ED16934220FECBB1D5DF0D7C2077BE2279B9E404513B1858DE358 - -Len = 1076 -Msg = B9C7F790421747555F738A0F4F2BE81A693F440312A99F9A1835AD2427058B14E2202ABF9F12DDC25091A3D91BC80C03546E97789C667EEA433E9E1CF967F7A28AC1F8D81F6CF8A06FCE64DCAF549B77B374CEEEE63DAF77D0EF7BBEE45902051E14F85847B7F16F8C168A1A147ED0EAAAE34F4CAD779B8831301965AA3486DA726B1A7CD62DB0 -MD = 507250F2BCE59AF6E0625C435B5C049E4534C3FCAEF862560E9151270788AC140086E0B70970A506477CA2C21E611F97 - -Len = 1077 -Msg = 2E2F9F6F2F735C837CAF7ECDE1AE9F41C4BE21C15797F63528B2055889F0610450A5BB973EED188F9392C9DC7B4E73E65D18437DEF436E299D465FE7E437A11FC2F8311840233934D4596B1959546E34F5C37F0FA9316CD586744BEB8DA770AFEB0D8B1248F5FCB2F542E8F9B9F34EC1802B042D50783A3884115D08B6471EC383C25484DA37C8 -MD = 35FBEF1CD2B40180B6EEC57FBE241D6E269AAC00FD137AAEA20A4267BF1DDBE3E5DCC59353824A58305E14761C6FBD1B - -Len = 1078 -Msg = 01BF05739A0A3633131E869E79F3CFE2D4400F29786C04C4D04726E632CD9EED3AC89FE6A206896FAA447FDBB131E34B83B6713280DEF5167193634D68987B608A5C1046287E64EEE7EAEBA308F5137E0C188FC35AC15F264139C7B93F3E1597328B9D39F13D9A959632A9330D852D726D982AF6D00EFE996EF92410F85AD4A742681872C6FDC0 -MD = 8ACEDFA9B0811540C1CA26F5DC7ED054414E6A2C7E492A19C11905928FF6D182A54D34B7BEC9F86F20A5FD011684626D - -Len = 1079 -Msg = EC686F7C71E53D760FA840B3AB715D8C0BAD257072CC56EC259D1C240851D329BBD11F48993FD01A73B48DA16297D95F62D8E08A1A465FF6A5ABD63EC21037F68F14617BC1CF15B1F71B120C7C8D60CE32F5C610F00D306EAAD3991B442ABFE5ADD064046BBA9FB8F4F9A38D99037D80765DAB0342CA779B86B1E7E8C3D698CC3E5304318DCC28 -MD = FFE69C1425FA718E3E82533B8FDBDD19ADF36F624DE12B0DA81A35CC4DBA38CD4D5C30E644B954CDF5828B99EF1A26C6 - -Len = 1080 -Msg = B771D5CEF5D1A41A93D15643D7181D2A2EF0A8E84D91812F20ED21F147BEF732BF3A60EF4067C3734B85BC8CD471780F10DC9E8291B58339A677B960218F71E793F2797AEA349406512829065D37BB55EA796FA4F56FD8896B49B2CD19B43215AD967C712B24E5032D065232E02C127409D2ED4146B9D75D763D52DB98D949D3B0FED6A8052FBB -MD = 8FFDF6A4752D17D496F8ADEE7116BD2AF0A4B726BB3F4C5F85BE2C9DFC34055A509E4FE016930D9951A7212553E2E908 - -Len = 1081 -Msg = 4C727CE979CB8F2F98C2821E6797161CD3BED5806DE8B08087AB61D739A32B760604695C1DEDBC3538E987E52DE252A46D80C260B3560B2C71CA37172C6A7F6D581FB4E0B0BB06E4C9504BA6B3F172CAA2D5AA92022D2BE4AABC96CBA2F917B7519E397DD6EE35A122125FFE90AA846EFE38E774711AEC8D55A4045F927D433B42018F0F72E1A480 -MD = 134D833C77874646E367DF775CABDED5C3712DE6AB83E48184CB6A428C362EE10A91FECB574FDD2153F7222A07B88F8E - -Len = 1082 -Msg = D44FB8AF633D0DE91CBADA6BC655EA864A291E404A829BA9089851ED2513461B35BE92AD602018567A4A92BBE37D20E353832D7562618685072BFDEF93D287EE6D083CBE2406332701923B83452656B67483B772922ECDD4BAE3D5D5F0C8064E32A71098E628084DC9549773C2C078C04CA18CDBB981E7AF5791C0338E95A01224283F1D3FC94240 -MD = 1EA2CFC3119C9B6998D076246F1413273C667358335BABFC610C2A3FCBB8F80700978136938DB97F5D2B0C9D7E3B758F - -Len = 1083 -Msg = A676AE811E49EDACA42C55FF4305E2A12648C465B8FCE4828598D85B6F8821E7DC35731B21AE6A963CDB6CC3D35F1E30B165D42E5844B64475A9E75D6474D9A044BD46696D44929FC185AC54580165FC74BB855FF1CA1E31041B960E6E5AFA62B3E9E216EA004D3EDA3C893B5C2A091161314EDD55DDE464460152684C5154298E0FDEA58C692E40 -MD = 5E348B5D777886A4C72FF87AAAC081AFBD9678FCE2BDD6D375124C118C1A0B7BDD4C4D9816586EE906E03A5F85BD1CE9 - -Len = 1084 -Msg = 70A4730279D082EEBF6500E4E61AB4ACA585FC47EFB9CC68CDF701EB55C53A5B7FF42477756A16B6B727DDE9CD90AF741428018F9D0A6A219A1A4649521E7B0EE57F38B60D900ACA04552CE4ABB537034B017900182C6C639E8251BCC31D897BCB7804545A1201501244479EB92ADBFE6C29B738AE9F25C2CCF04A7064BCE438DA1E98FE7686E740 -MD = 87511F19FEA0F7F6F6C97A0103E33FDC67EA4DEE8F5F4FA517EA926DC2660BE120010FF0ABA1869005F98671A7472033 - -Len = 1085 -Msg = 7DE762652C7A3135A8B42A45E29C5C4E31791487B1777F151B29FD2CBC901EAB6864AF5788EBDAA54E5707B82D96150E47780C05CA59347B72864172F40C1E91B786E3891BBFA66D761A2ECB69873C28BABA3E1EC725E9346DF6A1F315B96DDEBC5F10F97CA0CD30D108AECC747628435BB93951FFAA0A965EE1A9A1943CA018F0133E9D946BC430 -MD = 85E7D06F15C31BEE83DCF8DAB5182CAB03C6ADF0DE34A8C2D264002F195A8727A442AC1594096ED067F486E658AF9E43 - -Len = 1086 -Msg = 549C452B52BF24CD363C8C6F832FADF5AE643E51BFD75D31968224ADEA8D8EE5CC9A4B7C6A8DA0EEDE2B0F0651A5E1889C4F03953155AA4F7EACC3F17A55A71984E36018E9D8150BA31A0317C14A457C754C72CCED34250B3CFCA8A330DE2F5A6829433615CFB4FD0E63921593D1B519399EC8BE42A32AD96CEFDDDE181ECDE193707F967E182684 -MD = 10B692B2B3948F523048CA79EE23CC9D181C40BE9F8C5242BEFC2B477CF29E0FDE589A41B2BE6258A544D02BA598E28A - -Len = 1087 -Msg = 323CB91D4292ED7F95C98DFD71074379D2CB19E8CC83186B241A62F495CB9B5562345F70DC9C6A06A10424869DCF9C6D100AF700ACEFA7EE011CA6E8C41AF13FF8C9D7BEF1526A8C601F69B7E51E1B8E761EC597C22C0476A74FA7ECCFBE0D2084B0482C46C0D9CB359307B6528A3C88AD5236B990EBDDCC762339D095B34DD503C7E27EEC0D0ADC -MD = FCF8CEC4363F68DB14D0EF8BC2E232EF27379195E893885F6FE93AA3C94E3E1792F1F90A58407EDFF56516FABE4E6DC2 - -Len = 1088 -Msg = B32D95B0B9AAD2A8816DE6D06D1F86008505BD8C14124F6E9A163B5A2ADE55F835D0EC3880EF50700D3B25E42CC0AF050CCD1BE5E555B23087E04D7BF9813622780C7313A1954F8740B6EE2D3F71F768DD417F520482BD3A08D4F222B4EE9DBD015447B33507DD50F3AB4247C5DE9A8ABD62A8DECEA01E3B87C8B927F5B08BEB37674C6F8E380C04 -MD = 278E83CFF1FF6CC4B3AC41F3879DA87AE63B535B43815E273687A4CC519855B452CB6AF0198BB9FD0F3E43739BC0CDD7 - -Len = 1089 -Msg = 5B11A12546F0ACB075C50D1B5345605D9A8542B87AF03EA106945D3BEC5EF7A9360B03187BD6BDD510576CB68E8B89649711C1586F58D406B44331609A4152C725BA290B4357C0DD33039306342E6640BBE5E27035E6118E13E1F47E74436053446175368A82647D433D693FDC5927DB2C5AB7B49274AD2E522C3FCD8603964246C1EBF4C78881E500 -MD = C7939C47FEA2D30BF4EDF2874C2E604B3AE561227AF412B0676017D53B3469FC61D0D262E1CB23E33F70AF5D735BAE5E - -Len = 1090 -Msg = 95E4E9445A009D7BA13582D798DA2BA2EE87D523FD11079D7D4D7415EC275578A6765100E195C662FA22491C91D929E5196525B061C7BEF28B5C7E007754A543BC7577B1A28002A12C8AECFF500488673EEBBAD04B5DC521A23A62C48E27587E40F96585998EDA108DB8536E4DE4F0F8F7ADAFFEAC348FB0ED7C272432BB3123E0463FCC23090AD2C0 -MD = 5D2A408C175D602AC73B5DB2A1A53A67B805E8F8F08838C1858D1D7C504EEDD6CCB6700DE7AFFD3149C032F6D957F8E3 - -Len = 1091 -Msg = 99890D0AF31A29F66EA71EDC5B22CA37A1E32281D75249797335D503350CA4D9393B88A493E519CAE8227CDBE43EA16C3034FB2F3BEFAE6A24955968C095F9AA8287ABEDFA012F339B38059B803F8A49CDFE0A44A1FDC0F5A95417F39D0A6A7250BE89421B9E6C6275961D2DCCA2CEEA8DDEB9F815E2E229730C98B81F899443DD11E26548A08F2D60 -MD = C9C29E3B81B466B3F04D8A320B5B9C19FC2B29B8DBEAD2749D8DCC936D11B1428D8B14D7C0E3A37FC0F1CED831338BBE - -Len = 1092 -Msg = 86D3A8756E45CAD9D351BA6D187A5FA35D0F898948E922F3DCF7D1D24C991791031EDFF0FEC7AE1B4B93406FB555CA782869900E7FA4BAC5ACC6D1333EC8819D8809004E544CFD2AE83C6E34854CD2D07C72F64D052259E138FD44204660317E73367D5B6E89E2B0AD53D1D5F00277625D8F8FB3D418501F76B127F9426688AA1D70ED3A3645950D40 -MD = 21AB24BFE072C8CC592D1DCC2C3228B9BEBBECBC52677139A324E43817C839034E50FC869C3E2474D608F34F111B33E2 - -Len = 1093 -Msg = A2554C66211476EF2B6527FA9810A152CAB5ED42AE8926D582F4B0BF358EA30AAAF75EDEA37F3C7E1C63A66514C5B244316B562EC47D7816D6D4AA209E5B3D718413B4A30A26FCD28D2CCCF4907DEE332A090975DBD481EC5A945E17C1F3D2751AEC0C7EC6F3EE61A8DF8DA4D41B1B8BEE408FFD1CA1475B9F7A04EAED705350DCB86010D0FA03FAB8 -MD = 5DF8F3CAC3CBB5E6ED3DF54A106AD30CAA34FBAF9E4BA6BFB830C8D35EBFB2C516F32030F761D0EA1E8AD996252E9FBD - -Len = 1094 -Msg = 8913BDBF67DAC137CA5E1C7FCEDFCD43680574F7AA64FD63E8FB7B672CB39E7B1989E44916FA2D44DB0108F56AD945405D6D736633EE06E82C36B255B4677437DE5F0FA61064F659CC2189B3BCE909268BBC3FE1E02885A755BD60501C611A09B6F101F119850206FCDB7D1E20E60185612ACFDA62B487D1DCB40994165DE81ADF43EC22D39DAA831C -MD = 2FDE25B5E068CE8DDA6E2C7AA6161D4DBCBC9B84D7BDFC24EED4E9742A3563EDC507CBBE4E6EBC999CA40CEAEB47D4F4 - -Len = 1095 -Msg = 2CDA1B5738756EE102A02BF1E2538A988D62894143D4E9F19CDBBE8F89D365E4BAEC3EAB665014E09FCB98751F1337CCC33852A1B062D20AD04E844D87DE82456412C8EC1D837BC75B2292831B80A7CFA0C2EC8B4C5238690BBD7F32F90FE4F2188947393EF43720E888F9D0AA6F22EE75FE03A96F28CB3AC08ACE6944BA59C81B926B9169DF7B1452 -MD = C8E3E14E7F63ED4A4D531780996B9FD2D539817E7B8735175903FA08719451C38A9E7FE6863378A35A60EB9C01F113B5 - -Len = 1096 -Msg = 04410E31082A47584B406F051398A6ABE74E4DA59BB6F85E6B49E8A1F7F2CA00DFBA5462C2CD2BFDE8B64FB21D70C083F11318B56A52D03B81CAC5EEC29EB31BD0078B6156786DA3D6D8C33098C5C47BB67AC64DB14165AF65B44544D806DDE5F487D5373C7F9792C299E9686B7E5821E7C8E2458315B996B5677D926DAC57B3F22DA873C601016A0D -MD = AA4B5A5FB94FE19578F33323BA1EEFC5B6ED70B34BC70193F386C99F73863611AF20581B4B1B3ED776DF9E235D3D4E45 - -Len = 1097 -Msg = 8F20862EB9CEEDD84B3F7E4E7387DE2DE46E141DB60C9E29C45EF6809107D79334E086129C757FD820EE5B3D0123C4C28B34B11C97ED178367D0CAE25DA80641C541973331B1FD3DAC8F5582B9D42ACE951F4916DD4F76C16D3FB877CDDD20B989CD67A109CE139DCE137BE25D03256273DE1526EDF611E29AE7CEAF881E64BB30935BD07B22DEF87880 -MD = 07764400839EC9BE90912E18B68FCA2F206C037CA53BBDBF64EA2A995AC734811C909E9CF8F2DB47CDBB6610E596C1C3 - -Len = 1098 -Msg = ECD1C8A48651172811A515025A25503A9AD8AB6203F05BA929E8DD58CBFC12ADA9C7B3BAA565367F757FCCBCD1A05C1BF394D9EB4477433E4F143B6B405A3EC913AA756921FC5AED376921F8676C1A467FA219F381F6CAA0246FA18B16A78CA55FBF58C7711663AD6129414F97F88AE25FBF53D1F55FF9C3CCC6601CAD7AFAFBA2E14F34A47007F809C0 -MD = 3659919EEC3F7D838D7B27A6C92B84B544B2C58B57817029086DE08B7FE79778B93BC6CEEED5C2BE11D00103727B4AD3 - -Len = 1099 -Msg = 091ACE177B650C3E607A71AD088652C65C8F3EF813144AAE6589EC92A7C511DC195470357171A23EA904A316CA405364C55EDA60A409C808609CFEE8BD2C8CF5D3607C37C77074A87F2235CFAE2222FEA82C5EB6B8C117D21CC8E29A7698FD9211118374F86F92DF1724D797210A66CE91254978B50259DE484DDD62F0EE6F5D5A5E8E00D549E90DE8E0 -MD = 34DABA3CD471FBFF94270AC336EE11ACC6A97F60F3A342E8A77FD310B7CB62FB6188BC447CABB6D6CCF6AD9D14F5B01D - -Len = 1100 -Msg = 534B61438B3CED888D051393506E80A2A71FC2B2BBA6099C8DDA2CA48C26563BF91B5F201420024A0865114F5749B496539E99D78D5E691D763454825740B6CDE5EA88513A09C3BFC65EBE2EE2C3F4D56AB1798559972D92520DB6BD79AB7BBCC416F22759183BD0FBBF16CB02EE5A5DB3A0015EEC399E8BA9A2949E1AFAD4203F427095952DEFDE4FC0 -MD = 02081D5E11B12192C16F7533446303EFCAAFF93BFEBD80B662F29784EB648CC7C65BF5C7DE0D43EE991544C2576E7DD4 - -Len = 1101 -Msg = 9485B10269346EFA89E972BD6912DD9A878E0682F548BA438B52DED37E374135CCCE076BD254F80B4E9253C479343AE53D7899578B61E6C01A1E1B50C26A1554EEC28783C45FF9EC90D013A7BDE8724B369E708BA547C270B0BEFACD16F4AA427C1B7AF937420C5ED61D3F7865A52065FEF7F803411BC2CEB33711E9E67ECCDC9D774FE532C850D934F8 -MD = 114072DA47EF48347CB0F655A5F52AF127E5D3F7D2FB66C89D123154F171798EC8A712FC7F011FE8DC5DA7ADE765AD1D - -Len = 1102 -Msg = 51853A418DD59D08475390A4AF946B850CA46A508A8385C782B5312304683D9D287ABC97099EABCBEAF589AF4EC9F509AEB4323FB600EFEDD49A1A6BFC802A4B11D5DB9C49CF0776A1E55406E5CE46ED022F1B7458CC3A1287A748D0FB574376382C34EB8346CE941B6C78639CDC4D10DD58B5A11E3F8FA4A4129FEA7BE28E0040985408905ACB7202B0 -MD = 216A69A50B81CA7D80FCA8014E6664AED5D1FBE9C218B481D807638D2FB254E24655DF5A63E5B5E5144582E1796DCD40 - -Len = 1103 -Msg = 02A2FC7D539DD0FFF7337A0C42C23C2F9B505AFDB06F38F1C8AD8EFBFE41467F4727D7ACEFB17668957D2B57BA67971EBEA22FF1D8933F8F2759708CF1F96622258EA221AB8A143A574B59C96FC5250548DE6A4CDEBA0ED4BF49D3CB62F2F1F0C5F8F05C4F8AA249B1F96003AF89DBDEC3C578E3B7D62A1AE591E67F3EB57243484124A2BF71626DFA7C -MD = 31C323A94543B1766BC95860AE0C73454C8F4D8857E717C535C41B375979D910B6441E52C475583B06915141535FE86E - -Len = 1104 -Msg = 8B81E9BADDE026F14D95C019977024C9E13DB7A5CD21F9E9FC491D716164BBACDC7060D882615D411438AEA056C340CDF977788F6E17D118DE55026855F93270472D1FD18B9E7E812BAE107E0DFDE7063301B71F6CFE4E225CAB3B232905A56E994F08EE2891BA922D49C3DAFEB75F7C69750CB67D822C96176C46BD8A29F1701373FB09A1A6E3C7158F -MD = 3174CF3754A6FE603631ECDA4895171A9DCF7AFB02EB72AE270A9E3EBF2A65A72C3436C233FD4F17F7FBAFBAC0680C63 - -Len = 1105 -Msg = D885277BA59CD5B0A510BC8F77CEB8658E407AE08A873ECB0D2487590905C55CBAFA1A108D4BFC4286235984B746F10C03AB15F7EDA75A6DC302622CD212C44434DD027328630BA5377CDA18C62F07FE62BCBAE8EFC3655FA772E604A08E2F6DE068896A67097187B75B507B3F5874F157DA74187F5FF868FC02AFF44AB720FB7FC84CBEA70CA0C32F6280 -MD = E1473D8AA2FDCAA85E6D9D5A4051D6DAF2F32E583F99B06A65A4D0DBB3354CD51BB38D3A943B881B2566C747D5EDD507 - -Len = 1106 -Msg = C9E4994C72FCB03CC6DD0B5AADECA313D1B99F7595C9E40BE56DA64E8BCD0F12C811E029AA414780F16F912DBB00E4B226B9A9DFEBE9298FC0EC157F466BCB4871FB2B2D7B847DF7DC9281C0DB2B16F140B547089B2454A72475A709B3A3FC8D968C367C6A14AEE8E2A1025259D850E999A8B994746BE4A79011946F3122A9B8097654224CFEDF13C47140 -MD = 2929D91ED0E74203F30D6FAABAE3A36F1CACBAB1ECE501A52D0CB7776D04336B7A0E189ABDD58E2EFC533D96DEB772F2 - -Len = 1107 -Msg = 18DE896CCAC5B0584C6605CF8DDC4BCA77E2F8207B3333482FBC02129BB8AB2763B17B3D3753654BFB5ED80294B4EC2F0A49DD0000FCC4B5BBBAD28922106180F1ED3EC72D73F278B613F965E5913ECD2BB25DB1765A76388593E9DEE66BFF75AD42D7266EE9E67E228323926C178FCB582E402BCCA3560B24C47F3D983316396D69FC1A7D1C250531A8A0 -MD = DC435D3C1E6D518EB16A9004B2C55A0C044D814CA42EDA60C0A961ABEEEB9E400C31A565E5A3EA40E966D456B878063E - -Len = 1108 -Msg = 10927E62CBA50DC5D92EF8B03649EEAA5932869AD735A22D0EEF2B2DB5DF6433308DE06723D75D2630C9A21AAC0129014DE427FB07BDA5FC28CED642B665C1D4930B49080E50C9D8B0D4C7279834B71AEBB69C57974E45C81130D9C4675DDE38446AB64B26CEFD8BE1666F2ED8B78AD30673AF75CF73DE5B1971AE038F379BC51920263E9F5F18EDC21C40 -MD = D8D816BEA3BB8B31A8A7C77AB672D629DAAEB4A64EE3E42F6280D326AF1C15E835855002872CF9C1C0A6E46D269B9F2A - -Len = 1109 -Msg = 3A58F6C016F9325FE3DB0E33919263A4155B673CA916DA362214638085FBDFB0572781B1A9CEEAE62FF993DA3B01E21383CA63A490F07D733381C6A58D83B84D812BA1E5B25694A3898F063A73EE6E542911303CB749B9B8B971538EB6112292128FCA1F209CFE49A98F532DBB1A4EBBA10330580FD73B33F31F93D799F2F4030C5CE0F0882A78F9681558 -MD = 41D8C17D70C17898D03CD77184CF7FB401F17FC5EB4FF0E5F7E43F8361495546AD56E4E868F019298421C1C1C648AB2A - -Len = 1110 -Msg = 2D17254047F202430E864B21F820FD944356E8FBEEE769616413DC789C21FF5EE290550338921737B0B73E45D14AE85337284BF8942950342E0C278B191E16AC07DF2F34E8E3BD19971EF6FA4743EB75754AAE1E34146DB5F7CF7A6083DD01D675BE3256AC7FCF1B3E518AF902699BF7C49BF153A5674E25BA8FB19B50E18E8631DFCB5274CC794BC39324 -MD = DE9C7C3C4DCA2FDFC9DA043E8C6741414CC1E428342B405FA7929AF60045E82296E82A808F4DF452BCFDFA3F3161703E - -Len = 1111 -Msg = B4CCFB77F6D11DD5E48E1A0535B8F9775122ADDDDB9049B072138381939643FA5D5117BEC65B5AB487F018574347E437C0F41ADA18AF6373DFD212C1EA732181C0F2C5B45462D40F299A212D212516E9089EFC243665CAA06921EECC653677D94B39E6FA325567BAB84A984052546E9A5C4ADE161F5DF6DF97F73C226F993948F63181FD8D4BD9192D084A -MD = A3B177FD092721DCDB95ED1A772DDDB18D09F278A0AC1EDC729BD5008A7B04F6675137DD7425EA103F62E9A190E861F0 - -Len = 1112 -Msg = FA6EED24DA6666A22208146B19A532C2EC9BA94F09F1DEF1E7FC13C399A48E41ACC2A589D099276296348F396253B57CB0E40291BD282773656B6E0D8BEA1CDA084A3738816A840485FCF3FB307F777FA5FEAC48695C2AF4769720258C77943FB4556C362D9CBA8BF103AEB9034BAA8EA8BFB9C4F8E6742CE0D52C49EA8E974F339612E830E9E7A9C29065 -MD = 354813D9823D2F02D75D13893A6ABDB44E9E99666533429CC6F7EB3FBA10BF9ECD4A18BB9D5188E6E8F91DFDDBE8409A - -Len = 1113 -Msg = CDBA5700B140CCFD21E0B8FDCF0E7B879292537BA1020B5A5AC12C1FA5CB09BB69E11F6FB2B8E18EA44CC21D31D30EADB150A4619E664333EA7195717EE311D94DAD45CDFCD9339790750A738548F17C4BEC9D0563C805BBE943BC2ADB95627D3984B34D2F8413A98E19090FA4497C8B2FD9E59DE706599DE09134EE1B9C58372BC87B6925B4E1208623F980 -MD = 8759B5CF85D8E8B1B2E63BF80A24C89C6F2F1FEC980DFACCDF1AFB6B3B04B2AD05BAE56637517E474129F27F372270F4 - -Len = 1114 -Msg = 8FC83D24635224EDA4A9CC82B63291A87E6CDBD4BBCA2497D9EB075784B2E749F5EBA53C80AA17ECF658D91A3908A564E6C2BF6363C3A7E2A508D471451559D4CC0775247695E6FB207D383F7906A0254800976818B6DC32F9488F4D907B4432807DBE607EEAAE9508532346013F4A9770110E200D72E47B0814623F810EB3BE968B8BDDA22F3C99B61CA3C0 -MD = 8FAECB24034934172593EFA89C308E7D05022AAF417331B7502B86666AC788FDB8866CAFB6AE4917C6072B7F0443E617 - -Len = 1115 -Msg = FDC09E81D5C6D2481A3C57A0828F8FBD17B4C4C288F043F5BCFD0C55024CFE291567EEDC2A82FC849E349DCE8C2821D3A7E1DDEEF9BDC90220E7EEC17C18F5557B4B2D64D342C45794FBAB47CC0E1610249DB940DAFD66C70551934C1AF804EDD9DC834ECD8F036280E513897009F0C619E815828FF0ECA3BCE5C30203B5E5F038ED364B1229DAFBA20278C0 -MD = EC1FDE48D9718A3FC01398338C3BCFEF7E7DF2AC2D6424052EBC6E91F85FAD2D66EA65FA85D9137BFA618AF892DCB4E9 - -Len = 1116 -Msg = 2B35EA4A2CFF637B951841A2DED38895D6D4CA4AFE8040EC61859A76432C5D3885B75B9D13228FC629A0E3F123DA446035B66853418B67D0EEE1BBB983B361083A078F02622FCEE37302C9DFC9085A1885F8454EE56F0A9EBEC38026A0638771B4AA6C09E461BEE69ED16677610B926709D7795A47C1B4D6E5F443BC9EA464D1F2077AD18074AFE30ED27280 -MD = 923587804A46D7780D4B1A476E56F3F4DBF9D6ABDAB0249DCCEDEB14BCDB1D8008C18299733F4C3B12E320EF43D5B698 - -Len = 1117 -Msg = DE1B928D0D48404C330ACEF3492378B2A5D9F4BC2EA16600446CB058634935F35D32471BF24C15072CCC54C6CF83A0DD5194B9EC140DC0EBE691464B0D730A4092CA0BF08A0098E800582C453E5518E704E998787F9E34C3D69CD0FC7DE2333784385B02B1480A5CC4C4DDDF2422509344DA2C7A8BE0C654133A7B2D2AF3D367569CDA35CA6000076F3870D8 -MD = F4B6A32D310C0E5ADBF7A8F6DE458D79310851D3EF67812D59624CEE7827D340646A030CF95FCEA2EEBEB2E4C411B92A - -Len = 1118 -Msg = CB0334F2129D291773071EB41BC3A7BC95D44A01D945B604507C2DB5488D30806B220CB03499450DC3F8D2EE936CBB93552189E624452827438311FC11753B8173133E7235501430CDD199E44030EE9FA6EF063734F4AF0CFCB36C1C0C0A127DB579D78640AFE5E7C7823775D689890F612FD4FEA4012E3C7AF289A24FE0F17072AE6B2FEDAEAC5712060174 -MD = 126A43104B39CF4F64CC126EF82E5FC9881EFD0302DD75D4A6F3B20F745E5DF0224B0454695C1499D0931ED7707723D1 - -Len = 1119 -Msg = 2D2E1CFF4DBE19D856447906D6E14E532E713E20F2CFD73AD76F580A8E617C1DDC1FF9EA781E8974EBBEB17ADE82CD57DB3B92512A2B8C13C4ACDBFD941F83CAD9F664AE321E2AE972422DB187D699933E348E52374C1D4714A13632BFEF26D168D27948F3241D3A0266F34014DE0BAA18BCEEE6C0E7AECDADAD53FD92FCC1406C0F30128F98FD549C6F8C2E -MD = 9F46A9C2C091E02D415216EC0717BC7A7A78E0A565150B8773449722E1B3BE0C9A05C02C1A86F9B69BA3591974AE94C8 - -Len = 1120 -Msg = 9BB4AF1B4F09C071CE3CAFA92E4EB73CE8A6F5D82A85733440368DEE4EB1CBC7B55AC150773B6FE47DBE036C45582ED67E23F4C74585DAB509DF1B83610564545642B2B1EC463E18048FC23477C6B2AA035594ECD33791AF6AF4CBC2A1166ABA8D628C57E707F0B0E8707CAF91CD44BDB915E0296E0190D56D33D8DDE10B5B60377838973C1D943C22ED335E -MD = E2EFDC5007E4C13F811043DB967A423DE02AF411B4A251A225CAD041E83BD4DD89D8B24198DA00096CFE2E1B3F5D1960 - -Len = 1121 -Msg = 355872C5BFF81DE902B8E9E82666A99FDFD866545F39AA8AEAE26EB3A3A7798BF7085A26FC83B42D0CA2541A589F7C4DF3C2637202281AE22A137C9CFB5B7F324AD1DE1962B388EE699B2164828DF997DE802FC6948D166D3E00C70CC78E522B7338926FBAC67153DC5CB219BF8E24743D7E38C2C00BC32006B43E113C2F5CBF2067E35C754601982751498900 -MD = 810C5C9CC9B6B0B7D955D6FCB2709F270C96D011EFE83787CED33BA5D2319AF18B82416C84CB217C851CA667C9791EAE - -Len = 1122 -Msg = EA3B98208EE7977FBF045230E52F8482F1A9CBD7F3469752114A1130B4D0CC72F5C2B52F4D316E94183B017BEE71536993AC43D66B40F60EA12005FAF2952BB4BD0202AEF3AD8B34DC8C200859327C65BE9C182A130E0D7AE0CBC4F6CA92D5F12075402A68247FC7F2BE557C93B9C689F4ACD825000D3FB630CCF9573577563090A1277C1B4C62CCE7088F2280 -MD = 67EC427F0F09319BCE9083BBBD3F2B883265CFFE9F74E9D186222E088E572D5EC25EC42A1D4AB7AEFE18DD7D7B1B3440 - -Len = 1123 -Msg = B85D2AE087D8E2BCD2DF5320091FE59F356962E278FE17031328B2B4BF413600A8F782DA6ED3FB8A06F3ABDC46CF7491A626FDE9DCFAB53DB60E35FFA444909482C2B68E622028B3F047728F19955181C1ECC1AA0B70B661548742AD62444D4F3A27E9FE7ADB5E4DE2C98D4E86D2FBAA0F6D41F913A718BA995B9B04A33AA5B2B5716EF1BBB9899BC2F2421960 -MD = 63EA7E2B398AD70218BC2022C6584D4014CD2FC652C2728002C53246D9A9FC9B8E4844FDE008F4D6D23AD1CA23BAAF30 - -Len = 1124 -Msg = F2198E064F7F0935554FD140CEC82B3438E615876B22F36C7B2CA852C4902F12958E4C5CFF290A69156E21E1DADE8BB06EB5BC9F0B7A2926722786944358283D1EF9ACE91C72B0574481DEEF365A33023C7DDA3E6016424EAF6B826370C400DCF24D03D4383C1A102506D9194746E5D74139E81E4EBCDAC6886114F5AD59882B0A9B0EB494BA4D98089EF032E0 -MD = 1B95B750F5727D8DC62D6BB1DE94FED5CEB830583C570CC0689FEEF026F2F3392489BB7C4AB897C24BAF5CE6AE763D0C - -Len = 1125 -Msg = 95A89F7A1CB4BDA4D383EF4FCFADDCB55950A7D340D49BD65A04744929252162E3FCB9F3568EEC982C08B2F2BA932B84092707353DD102B37AA081A76B73545DB577FC0E80F43908835E9FFD31E1A661B1B14F7309B461F972E8A4A6A18427F8C280AB441BA2C619AAD5FF9D67D3A9920E012B6FE6A473E7503DEFB29E34B85ADC06E7F807B3F39A7636280630 -MD = 919291A2CB63DCDD64DBE5F98E6B872B605BA1A6921294EA0DE07EF33694AAEF829C1ED9CBE0DC91377046AD4316106C - -Len = 1126 -Msg = D1273FCC09485AD18C279A7E332ED3490D058A0B5A8D03E22B6715A5455394F41059EEFDC3DCD7337FE7D82293751EDE700E017C7344F168605A9ACBFBAA68879D74DE31B8C1726C9117CE956EF7D4AD1CC4426A767BC799849A478B7F1E04F83722F5AD54CE2C5171735533CCECDE5740CAA2D0A3A8E0877CB87CA866C959E9FD5114D54E779D190D41ABBBE4 -MD = 9547D1E808C57C81CF1BFCE18DC03FF937A443EFBE839F85678206FB56F57CE8CA76DB7C39B02B615E60404CD5546DCC - -Len = 1127 -Msg = A88C9A85D29A2E99FDA4E4CCC67FFA1E87072F844B17D45AB076974AABED7DD8CFD4A32244A2D6C4312D5CABA2D73306333E62E6A121B4E4E924D0B31A303A51732709BC26087B18C46CD4A1101AF4F2A7E781E71D8ECC72CCA63F0D968CE958B79B16690AEBA169180D181A50ECF2149E318B200D3F40C893E599B0D749E1BF8A95DF4134192D79FF8D9CC95A -MD = 38A5B0589980ED62C4F2CA7C8266EF855FED1385515F5DDD8F34A52F769A467F1EE749D09BFAAB3221AC02FD62098542 - -Len = 1128 -Msg = 2167F02118CC62043E9091A647CADBED95611A521FE0D64E8518F16C808AB297725598AE296880A773607A798F7C3CFCE80D251EBEC6885015F9ABF7EAABAE46798F82CB5926DE5C23F44A3F9F9534B3C6F405B5364C2F8A8BDC5CA49C749BED8CE4BA48897062AE8424CA6DDE5F55C0E42A95D1E292CA54FB46A84FBC9CD87F2D0C9E7448DE3043AE22FDD229 -MD = E44C0856F0C245E002F914CF300E98C496E725A4DB561F2995AD9C8B97F341E15625B56B03D4D5880927B8574F5E5D74 - -Len = 1129 -Msg = E63DE4330EA9871CF723133AE8F2A04EE4B9A78AA044E500B8022E99A8ABF8070405DD291824CB5DA14B916B9E18028D9C76018B3C74BDC456D13A97FE4BE140FC940CCF0A648207A0472E4C8F60F6D235F1F097C2E5F48BAE57695115FF5707B5A7F4250A6CE8988DB9BED4596325DFF87E08DD2204FA1D28A17F6F7A20293156130D64680D176DA80734027E00 -MD = 8C00E0007B96E0A006C1DBEA0C7D02C401A1CE13128DCD9D22D29176E9FC3E45A6ADD14DDA07D3FD25DC87951AFD39F5 - -Len = 1130 -Msg = 3CD3193249FCA77C04CEF261CFF614FCC5B5BC7EBC9A99F6C88DF6C6232784BD03B0B119CEFFF2DE10C562998FFBC1F2E3D64ABE50F026CF1AACE2492CE19AF0A9C8F4BE6DEB1702A34B5792F1D79460E74A3825F3D3D46769E105CACB8556F16E61A60BB640F4918D0A0E689CE6E5B92977A53BF6C3A1AE2852C6F355049C797152B87367083387ACFF4EFABB40 -MD = 986B5397AA1D963C3A36C55DA5FA9BBC0261392C70A2EF28A6EE8E96A7518B90516AD374DB2DDC87868BE25DDE51F482 - -Len = 1131 -Msg = DB898DDB4201457E81D5ED2A739FA8A1491FDE99C5E22AE077C577ADF84253E7BB72745733EB89FCA405F78D80887CF055DE93F19E200E346547198E5AE4E0E1EE2F819DC12417EF8D0C352EEE351914450A8FCE74A3E242EF0535558A4254F9B0AB5025D65E59177F83F2FCD2B83B955F91711252FAB9F613CA2EC038588A68C201B777757AC9B71B5262A91CA0 -MD = 3A4A69617096A9AC0A0E29B9D5850C974495189C9140673FE49BD75CE732F1FB99701EBBECEE30FBC0A9BAF2CFCB8149 - -Len = 1132 -Msg = CB54ADB942A2CD04BE65D1499564188B4D1AC647CEED1CC5116498EE2421EBA700E63F8DA23DAEE3223B21096FE39A0C8DAF21E3AA8B07FE7FB58836D2E70348837B72412B9AC8B5EFBA5AACDBE685AE6F7594197AD7DD95F82CDB4D31FF37EA89422C27D0C89497A1593CD96B6160862E1559BD558620F1831B0EE428C25D1456B88B3CC613CE8F9A8794A3C390 -MD = 3FFBFE0E4D271A94FE2273680FCD252803DE3FF5C2ECF7B278F6BEDF51AAD74ED3659F75701BF10A921B0388C88F5012 - -Len = 1133 -Msg = 3889F0DB5E6B929D85BB0D1C26A06C1E87B6A1EEF7E65B90E51DC1195C94F58C19C1CD7717C4F276BBE8702179D4196793C4069D4D91CB3C7051962B9675E978B9CA5FF5C648E36DE672BC06040ECBC1C9F7D8FFA3D1CB9A0783F3682D0C4BA5705AED875B9F4528192BC30ACECA099F7FC7D9F8AE9161FF092D935B7F4C5343FEACA0D69BF8082B16CE95A415D8 -MD = 71DA5759797CBA59498AC34F5E013B6E1EAF64C889F90AADE6C4EF1AB33E6C77C04F5097C3DB41E4D8E25A3305BC90DE - -Len = 1134 -Msg = 05B41EAF294ADFD909A5D43A53F1A0F5ECE57CF2DB3EEF714EFE75A226290476DA995B35148DD1D09A18EC000D41ED59D1E5FDFF169504F771961732E7AE05877CBC301E02108A0F42C56D093F484EFB86436F06FC0C38FBD52F1BA418A0DA28B7D8D9B73C0532E7A86915797D121A9F0437AC230D2E887ED7BA55CDBC2ADB946C35A7A989848469E77BD45470E8 -MD = A6BF58DD74731E3CC2C9FE070BB32761D075FDBE83837A9B4B76296B668FC2AAC257B702CC3EE3FF08211857E23AFAD4 - -Len = 1135 -Msg = 9090328108C62427294439D9BD43C1D5E5A7E2604998129BDEDE9DA02352C84D5318735BB8B9E66EDD6254936552B7CBED1A86E48CC9CB92C136BC5282FD7195DE09A05ABBC7AE97AD3D9CEB7C2051B3446CC4C4CC2B7FCCACA3DE155F58821EE7AFCAA026C969518B4C6B411392C612416B15196FF9532E25CDA2AFD9925980D44E65FF878761D26A4159FCBCBE -MD = AEA0F259B8C9429E88C9B5F30CFF58D3CDD4F0A5ACC6A6CB053DA1373FB8871F5D2E3A9D3F1BC12091E8066F0D2731E2 - -Len = 1136 -Msg = 94B7FA0BC1C44E949B1D7617D31B4720CBE7CA57C6FA4F4094D4761567E389ECC64F6968E4064DF70DF836A47D0C713336B5028B35930D29EB7A7F9A5AF9AD5CF441745BAEC9BB014CEEFF5A41BA5C1CE085FEB980BAB9CF79F2158E03EF7E63E29C38D7816A84D4F71E0F548B7FC316085AE38A060FF9B8DEC36F91AD9EBC0A5B6C338CBB8F6659D342A24368CF -MD = 5D290C5DFF59A3A3DB8BC7320B8F64A4DBF67CA4F5DF9A07F235EDB6460345FC8971040481C9A5D0F09B62262B9ED9F8 - -Len = 1137 -Msg = 01A2142EB62A90EA4BDA88F7677EF008E33636A68FABF1C88624C4C99BFFC7A1E1FC32EC7005AA20A36227932AC2E0D21F56FE1B9E4532315968F46DFF3068EC334CDF3F78BE88BF68E0F387829BF9FBC09A1A2F7237BF199FE75C46E60348D768958DA3ABC3D16865A82232E2E75ABD1990EDD2F1109685AB61AFD92E1C63BA59514FFB1AD075696C7DA7273DE700 -MD = 76A19432C4BB8547B9A37C5B3EEFBB33C86D9FF42906299A88B87D626684EBAB19A6931D8A150A12E01027BD59EDCCDF - -Len = 1138 -Msg = 635B23C427214AEE08B4BFA141E1EF5FE2FDFD1C0A0BFD60CF0AE6B47D18ADA0BC2C24511BAB5ABEED7FEDB7BA4A1AB9801BFF5812263682FA6CF4CE4C9126FCA1F1708A54596C6C3D8B3F8C9915AA0E061F2455D8CBD8976BA96D9EB6A4BA8348F62B7718D15DE2AEEA8B805E72345D1D29E7E499EB7D4F615DDD20BE17BB8FC7188E3CCB59B42B8EF40ED0EE9F40 -MD = C2B265719AC74FAE575090BEE10D825099C3D30CE8F15AD2D86C8ABA93E9C8D454550AF7CDC3CECD0A57D30EC0DAF79B - -Len = 1139 -Msg = 35EA1F5687FDF343A7AFC05028A6F0DC3B3519069A260543C0CFE54968441731F69542683480CCF2A638FD8283E75FAAC5B9AA3C2264BE88701E8E71A58742F7C7DA7BDEC9213AB89B8568C339427ACA8D11497B01E8A2F68C2702BD95D3BA665C388B7AF0CFCB87E48BAA072C9FE708A7465A57200A85A21A66B0721CB49E93D8FEB62B0830F9136DA5E18462A400 -MD = EF4D5663239089235730C1DB2DA4DA97649EC4EEE59602EFA3841E4B83BFA52D91F64A8D9B62488C1E824AEF11423E9A - -Len = 1140 -Msg = 03C7B22BF3EA9840CAA63B4F1D042C816E79FC6A611ACE2BD8F4400ADCE54EAF6208DA56E54E5A1F64AED4F68F0BEBE288C98798014472D23028097B12809320C20A56AFCC83721974BA088759CFCC2B8BD78F4D14CBBA26F7C7FB4271E2389BE54E2D32261EADD992F4F96692A52F6662C9518A937A37C4F92A83337FB0071048E29C3CB0A197565263B37C20C900 -MD = A9CC1FE4B525BB6322672DB801AA6F0B4AD5CF8FF6550310169CA3F90C7803E56E665B7391A86457BC25AB9A3EFD6C2A - -Len = 1141 -Msg = E74F49AB1C5D5239EED54252D90AA7C0638184E8454E53B6676F7021E50AC7656368A5D1911CF9B26E6FBC17F67DDD5E7F765765192889290552BDEDF7DC3BBA7AD73976FD993944757CC458A3F608BC6EF7B1E15661ADEEB0065CA1C40A209C90CD230276A6F9E548E234339D5EECA2CFABDB1599D8F7CCF58CC772452D6ACEE4ABFCDF61B6B5DCC698387A339FA8 -MD = 4CBE97526A1EABD92753C97182250CDF47E49412E6F7049087361D36A6EAE08D18DEC8CEADB2BEBF65211035D969778C - -Len = 1142 -Msg = BD2F38B76FE144C9695BAE33AF7EDB0F76F0F25079D9236DDE3C5213E44E6B71B49878C55023F69E9760A625945706CF6FA262F294B93FAB898747DA5A05C0B06C73695F9B827132D163733F7B6E6EFFA16C35D7F2A0E344BDAFB18B0718C5744689FBFCB7A7DDE8EA83908F985C63D65DC26B971C43EFEBB4AC8B6C416231F680B4D88DD7A27FB4631922045E8F94 -MD = 7AF68CC9A897F4B717CC60D27889318746D2B2054402E7FD99F7C949843843DE48E859A890604A53297EC2E9539A5341 - -Len = 1143 -Msg = 21254C00B81AEB85763DA860D089F5757C5659E39F73B9127A5B3092A9B1FAD24C8CCB407BD0B6F6504C7E10F672855EF7311074866D8B95B38FFBE75AB22D67227DB8A36E262F396B5FF253947A276B1D9954E7F886EEC0AD6B8DED19734FC4A3A0F9374D3ABA9BCAB67B0646970394EAC1C7AAB16D5285BB44F721B8A5D9A52D91444196D1A3FA019857D7048B1C -MD = 6DDD65DDBCE6382CA4E71C6EC56FFD5E474CDBE57C783B2BEE710CF4E3BCC0E390B4679EBEEFF005BEBB340B34AD2289 - -Len = 1144 -Msg = EA40E83CB18B3A242C1ECC6CCD0B7853A439DAB2C569CFC6DC38A19F5C90ACBF76AEF9EA3742FF3B54EF7D36EB7CE4FF1C9AB3BC119CFF6BE93C03E208783335C0AB8137BE5B10CDC66FF3F89A1BDDC6A1EED74F504CBE7290690BB295A872B9E3FE2CEE9E6C67C41DB8EFD7D863CF10F840FE618E7936DA3DCA5CA6DF933F24F6954BA0801A1294CD8D7E66DFAFEC -MD = FE680250CAB1FBDB6AC8800DDC28E70100DF8DAAE38DA27004872AB05D40B15AE93EB44266E3014F0960038B28252C7B - -Len = 1145 -Msg = 03DFA64F87FD32347B4FBCDF6E9C93C8F24DD6FDF73C0714A1D3F2238950A0B17E17241281312FCFED19182066E8481BF02860BF3159373E812CC0723559E989B619E2EEAC2A98A7D671D09342B38485C544D7604EC34F5B3E9B75127F606BDC3FDAABBFA76C4485FE3153CCF0B8D3AF0082DC22C3DC3B50A1343792A2F75434C7ADA300F426B2E372E6F4D78482C000 -MD = A1E016049A9025FAC5C3AC0940B8F40EA266E9D1AA6E28F0A7CCD0DD95431613D37925877A5166DD7509CC2F8CB8BEE1 - -Len = 1146 -Msg = B7C48C1E18BFF9ADA3D2973DB9D7A9294F1AFC90C7A9BE72179E12A6D3EB74E71027718116582C133FA6254874BB2DFCA6801FDCD65BFFC6CA77AB064E78F9961FFE0A580E3444BE1E5F26EC81242D85F829577FFEB15DACB76E5982A6E7B3A7C57FDC71E70F7F9C2C60402E86E4C784727E57EC0B6FEEB386AEEB91055A16450D8B633DA0403A4FD6DB89949275C740 -MD = 5A295D0A6E4AD2DD7F9B6A1B5F0516C16CF7B4FDA811C8C3ACB2A5EA19C159ABACA49E46C9EF589BB4E92B3EAB1B6901 - -Len = 1147 -Msg = 856344695FFA7F9E71CCA31E66780E83E946374FEB320A3D0D4E944EE8AD38917B892B1E4842817E9B9572EAE8BE6340A1DDED6DDB8216944CD9D403E137F1B3CD53688043E145D6D5BBE9C6A5078958AC10A96F1FB9953983996D386AF3E368394F57A7BABE20A22A7D9F8F5AC665B996B34989CECAFA60A618743CB5970FB4167F6A46635090E32C381D9A8E68DBA0 -MD = 543E8FF4998CDB8D1C87D9AB416BBF54F7D3FDE4ACA8E214DF743B0B881731A40327C8FCBD96094C00C15C6E2DD20DA5 - -Len = 1148 -Msg = B037F0650E028765F25A5323E3D6DC8AC4E9ED37BC69F08B42B372328A99E38827E7BFFA32FE443D09657E3835FED992CD2AD84EC38C21FEFBF3E2F9E55690A2C176539E9E12ABF4A81AD6EA9E6DBF34AEF4AF2438805D9A5A6189A64317F81FCDFABEC47E963612CD565C792E4E619B7912C308A489C7C57875BB49D3418162DC8BBE776F351B71DBD7BE5DB781C300 -MD = B7B5B1BE88FB562F619ECD427E537395F8C9CE29FD3ADD1F8291929875F642D6FFD63F58F55127930283EFEDDA082B96 - -Len = 1149 -Msg = 26A1E2EB41FEF9EFAEE544083D4069AE01DAAF800A88A35F7C00CACBE5789F19891574FB25E19F15CE8DD52066F3030CE12B9438E6EB929BE14DE20F064AC1A8E8E1B76B99448B1DF719EFE5BE37039C5BB5399D17957C796B9EE91F6488FB4F2003ABDE0BDB297790BF4D252041583EA1AFE847C9CA7DA85A28BE30DC1BAEA372057D120228E0EF01C4EDDFB54F8740 -MD = 55C9BAACBFB92A4C3839B3387A9ECD81F01998DA93F8E7924A5D6FEC7AD0C9471C100004B0B7F5F5C8205C5A7F7C10A0 - -Len = 1150 -Msg = 44F98C05A2BDA1602DAE7E8BCCD93AF9F16F1A0F415DDA94D0037B2E2EDE5647F5BA095E1744828A51E1FD65C9BAC3811817F10E69CFD446DEAA9000092B508CCC9EEEC23F3B5E0BFB99A7262639A8B8CA8FC0F54A97DFF5CE43531ADE028F23BA5DD79DF7C23D4813B9E5D89BC1DEF8D8604FD6191CC370D3B55624C30203DC2A467693D9D0087AAB7E210D14459F94 -MD = EC5D7E924F47FF27B8CA8D790F8031917D00B584FE0E845C0F6809788112A015F47D74BF172C43C1C9F75252A928202C - -Len = 1151 -Msg = 47CE52119BFE9170B124036E93790352ECA551962985658BC3898D1D05919B7C62BD8809568C008DB20395B1317F4BBDF3AA2E982A3326C6E9ABFE5992EDD75583E9649636D9E642D1585806832B257A45D485E1B17B9264C9A2386660E18D7A4F7F2F862816DA8382AC9E4E0C3A599DC1D84ED57C69F7F172EBECEE7C48A7E810B13B3A3FBB5188070B05A7833047A4 -MD = 688809B64550C3C7E52F877BCC93763EC4F27472891DED142B09027B3D52455ABF4572FCFF3F8765986FBDDB1B1BD4BF - -Len = 1152 -Msg = 157D5B7E4507F66D9A267476D33831E7BB768D4D04CC3438DA12F9010263EA5FCAFBDE2579DB2F6B58F911D593D5F79FB05FE3596E3FA80FF2F761D1B0E57080055C118C53E53CDB63055261D7C9B2B39BD90ACC32520CBBDBDA2C4FD8856DBCEE173132A2679198DAF83007A9B5C51511AE49766C792A29520388444EBEFE28256FB33D4260439CBA73A9479EE00C63 -MD = 511B13E53FD353FA4D38EF0CF8F1AF30DA554828A5FD1C53EC41F73D9ACA6C54AC7972C933AF4A2FC7AB852CA63A1BA6 - -Len = 1153 -Msg = D17D32EB803ACA60E349E8389738023A0D053F8753F02DBF1B525252DF546AD52B8F5A1AA36DE05C14DF40EBC6BFBB3FB3743AFEE9ABF4CD29D2C4D707372923DC7989781277637627925044E0BB0B79D03B899CFC97B05E10481AE57A53351BA87955D956236837FFAF5AA3D8354F4C612422CA3FB4AF509A4ABC7F120A990072862FA1A8E0BFB64D9E119D691CB32B80 -MD = 5E04CEBA6B2DDB72FF92494D8D221CBF060FA2C37D6C6150FB5E865DD3453EDE9A009A8C5867C164D8911BACB80047D1 - -Len = 1154 -Msg = 18D8D02EA80EB2F461E55B0C55557EEF0468BBCB72B298DF8A760A7A70633D5402FA38E709B2FD800C5D5903A4E23DC5540A52517A6AE4C25A27AEE13C7F2D9F14AC488D926B24EDD63B9FF7B12F2773F22080C101BA2466797A5D258225F05D56803D9D3931B9947B6CAA2F637A979C3069344DB2D7F346FB3B0AD94577660121F2BC87B5E0D0F1D8D9C14680CE652800 -MD = 468BF16E886F07FF4397C9D437C31768D1CBA07120169F472F08E3C71C8239A75102B3C91F047A8FC957679908633F05 - -Len = 1155 -Msg = 11C02C0B259C1566EF6044F8592FDE9E60F3D53348C71A04C049E4F197C3506223D415CC18F867CA0A660324644A77C8503B129B9B7AD3035B1E7B26F4C0EE8AEF299304448B1546D35B1E7DA4A934D2F8D7AC91C67E2D61AB2A9DF72DAD133934E7CAF18C82823DAA4624CA2B79996773E20AA86AED4728CB40D3B912FE3E271603FCFA9D7A2846822DC33B8DF5DD75A0 -MD = D947A656390B6F71753CB315AEBED8D64C6813BA55C3091901111DAB0E2FFE0292913B86D508E307C1B9F4C771FE2955 - -Len = 1156 -Msg = 6503E5415EF398D9731CFBCCCFA3203C17580D31035D512F969F9CD9A8C17DBAAB8CCF7289F36EA81A312E0E2A087E196C3F6E82C37A58898BDB8CDC77C5A0E100B1DB136DCA7EDA83722333DEF9472C73F42017BAA45BFD76FA1DA558126EF57FE9ACE4B32763F1996CB578FD0A7E51FDCE9B4DDAE2FD761308F2558395DC247C7BB4A108166B4BE73A54F4A8DB5E11F0 -MD = A7476738DE252C606F43A085036FED34418A2969CA16E4043DFF343B92C706BBE7EACE3E2B1C12F83FB1A4A754D04B64 - -Len = 1157 -Msg = 2D04416E47394C0C28859633A9CF4B32B07D941141D2CEBF4ECDA5B00D91422F619800BE12CCB50BCEC630A4F8069AF9436CC63FF79B15F8B725935E4185701AF832BB99EC7AF362E831A986CDAD2796EA904A2B01466B2B94F17F2C6480556AA3A795C3CC57CCDBAE6ECC8221206D5065701036C8F95301E35069F682EEC1548C70B56474E314074BD869219EA9D4B570 -MD = D8E275C7AC8E1FCFCD3ED12CD1D3F7232BA6790D849E6AD4AEC4D522C5EA4F3890F2ECCE98EF77C9651B2805635150D9 - -Len = 1158 -Msg = 3C8A5A0334A2C9A8B4BC0C08A6C4FE0FCFCB4C95F09A966D2BCC432DFEB24517369C15B75FCB6D11C9143D22E5CB79FE0AF1081D9A5BB31B837CB33703014D908D83A61968F455F09AAF85AE01CA1EF1B8E0ED9D02BD2C47206A123E7B90F3A028D14F9E11B52BC705165CAE9B9A65F3A2228F3D5390076AF0B5EB53AD2AA6599DA678658D4E72E7E3025B59363F754EAC -MD = E0D83AB8577697F9D12DED0A5B56346570EB8789CB3A303842B961F213584EFD5CAF13F4DF42113F9281CCB424842958 - -Len = 1159 -Msg = 12B830C80CE922F2379641BB7FDD4E0442D3856B4BB064241836053C4CD11FCD2A79A83CD342DB812AE961267819063897E0317052E8EA1B7C93890C74D7EE6819EB9C9C7BEF48D29C62BA42C47058D3F5FAE90FD30F8C49DA48138D8490F3F347F8999AE34551A7C748E8612CAA1D7151F680CE993DD807235FE50A3CFE9DEF4006393E1B0D63F8533765525D3A35E93A -MD = B37533B44D73D8A2BD110A50FE08005029D64000D6BB4C1123D83DA40E9A667EAD32919D1A69BDBD778970B63981F630 - -Len = 1160 -Msg = 836B34B515476F613FE447A4E0C3F3B8F20910AC89A3977055C960D2D5D2B72BD8ACC715A9035321B86703A411DDE0466D58A59769672AA60AD587B8481DE4BBA552A1645779789501EC53D540B904821F32B0BD1855B04E4848F9F8CFE9EBD8911BE95781A759D7AD9724A7102DBE576776B7C632BC39B9B5E19057E226552A5994C1DBB3B5C7871A11F5537011044C53 -MD = 554CF00A9AAFE0DFC8D49EA03288B52AED43A5104E22B838E40FDE7358491B5774DF455CF2EC73C53A7B30627A142A41 - -Len = 1161 -Msg = B6D26954A6248D430EF24FFEE1945470C465009DB645AE80D9C96D0365081276C30A4B9962C898F126F94C20C64045F1EE8A3E92E053BC2A0E523E7C431A3E52048C37F4803308E8E87508108C5BC4268CBEE526F76E160EB143D6582F56F2CCEC95250F6E2DF32041F9378BA347CDA1EDFD1C20AF848F9763298CFF00ACAA53A390F44CB19CA2FC3F68CB1B002042E38D00 -MD = 3332C8AC994ECD7EAEFBE08469A534C81A66F6ECD566DF95B2BBB10A3DBF69FDB401AFB944B3935B6F0D7F036D6EA3D9 - -Len = 1162 -Msg = 8C4E31FA1C8CDBD79E5FBEF356B59E9380DE9322F1F38A94C373DE21449A309D194226ECAC4C2A3043104D30337C455CE77061156208DEF5BB7FA8ECC6B4B121247D4E9AB472BF38262995C0E46AE9BED99FF12405B900D9E37A3EDDDB06D0DD4A74BB19AEBFCD7EAE1CE2236488D73C58EDAB5F9834EA0C7FDBD90F1E8FDD8683023D28711AC96824D2424FB444C8365580 -MD = 3DB4D3C5180B2080671A32D702A756B60FF4FA1CF586D9D5D56A352FCF9A3043A024E1D83F6A3DFACBF4E084A584EBD2 - -Len = 1163 -Msg = 4414CA5B0EFAB33109A7280A70B8133D70C0697D4E7FCCDA751C7136191E40098A542BD8966E16837A0B3CD80BA313A2B027536E4C0016D258477E1FC40678C1A815AA1304BFBD5485F58BED84E094641C412B94975A800E595AB2D654ED93FD0E90AAC471FD243C4C8C4572FA62C89C795BA60D610AEC5C5FB5310346EE4EAD650B220F41B49E50CFA6DA45D510E181A0A0 -MD = 7693A6ED2DEE7661E8D972EB1460B8809E3D8B8B7F92676839EB6D72412E9BFA0984DF27D2C3A3CCC57A58FD964A600E - -Len = 1164 -Msg = B549E5BE6D307AC5371E9A361BD86B4C140E61F2FF38B6D17CB6079C14961D7F795D443D1CE3F3C9BAD4390B5DF5B793FBF8E618C42D66E194C4A2D7CE4C3B0977259BE8005FD30B9A3E861F363875A9DD176BDA1BD050FCD5993E1142A7C0EB2B5E8CB6B66CAC6CF0646B19EB3FB14C4D9FABAF48FB70EE777491D760951CFD736674875D579A1A615394E08EE8C331A430 -MD = 83E4CCCCDFF00F09DDD6033647CD090534730A7868D29A5A84128BC51D283DFAD585BBA9C1E127FA87AF5125BD131E99 - -Len = 1165 -Msg = 901816742594C8C7DF11FDF358E919E98DB6317A965426E43CCDB094214CA72FA5AB808C0BB8DBA1DE77CA3F5FBAD80EBC85AC437DF212099F4510544C7163BF214E42968114EB0F7BE50227B7A5F10BE46EB4DC1E55432C39438CBFEB922A5DE1E2070388998542ADCD095B9D94449EDC473F64C011B90EAE24B89C0DB7F4B55B8BC8154EA7E6D35BFC1E47770D5ED43D88 -MD = 3435A649265CDB3B881EDF501C437E859FBCAF0BE7457B8F9DA50B8E29F80677F7E72900899828FF629E4097870BBA54 - -Len = 1166 -Msg = 68F3CA7119C4F03DF39F854337F916C0D2874CE0D41FF1F357866781C76449C2C5D628C47CF8DD4D83D37F84F1159333602DBFDB899D620D2C593935C3F60E504C358CE2C4C7579522921EED2756A9C208FE1D91CFBBA72969B0191B619BF1D58D7B635D590F80825439E09B75A41DDEC0CA46A6A680D2A63DD93E8A50E49B7D19EC0BA6B545996499D79CAED4DD2AF35270 -MD = A49E0FB087106EE1F738E097D954BD411034914DFAC409D1D30B6D13F8100BA55EE0AEEB2ADF06AB4C1C307EBC3A3349 - -Len = 1167 -Msg = B9F9D504F5929F3BF59F2C3CD1EED63BA74BF1444D4CA4347C61F54B129520C0077C3D4A9885288D5D58B33EF84C89B8801CE6A11E4370E7B479E0EC60C5408B73758533243828F9A414F4D6280F66F84CAA1A05965C8E97199E2A192170188F6FBF55B7F129072C30E87FB726ACE803AF6DCA4ECA9069D550B427D7EAF6BA0EED9A296500C442CA4E97B013BDCF5CF4FFE8 -MD = 7A4E8B19F6532CA3729FFB0EB5BB7FCE011A9D2244A59792F83E8CE1DE186FCB89E6C2B164251ED76EB533491FA99126 - -Len = 1168 -Msg = CC7784A4912A7AB5AD3620AAB29BA87077CD3CB83636ADC9F3DC94F51EDF521B2161EF108F21A0A298557981C0E53CE6CED45BDF782C1EF200D29BAB81DD6460586964EDAB7CEBDBBEC75FD7925060F7DA2B853B2B089588FA0F8C16EC6498B14C55DCEE335CB3A91D698E4D393AB8E8EAC0825F8ADEBEEE196DF41205C011674E53426CAA453F8DE1CBB57932B0B741D4C6 -MD = C13C177E6453F78E81BC4EFEA7A10E9CA02273A6EB757497368539BF4AE1F1BBCBAE0FFF5DAD55EDCA61F474976CBF64 - -Len = 1169 -Msg = 7578F49DEC3E779736091AA8EC290A2F2A6AB4E7E02DD02E655748233401F0D4B07313ACE1D7760335D53AB539EEA95ED166839427DA6B40FF95705DD2F7B6F73BBA222D876218BA59CA6877CA198C044BDEA0EA0C67D49796CC326A237677D6732F3D1BDA0F411F7BEF6BD17E26CF8729EB89A23C25D93C9B4A688A21DF1ECF93A62757DE81A3DE44AD98292CB5CC3D662400 -MD = 86CFBB0AFBF6CBE991F63F81E797C75F687DC0E9ECE4AA3AE06B62B3B6F5708C530FF3EDB1154D4CA5C69406AFE44A34 - -Len = 1170 -Msg = EB14DE5434C648F26EDA4758903B2860FE1F57E40505A0CDF6BAF3B0CDEF2635017D42C42399AC686B0A23459C2F1D73613B389E7407BBA9D5F93038622B9ED5494123233B5AFE63565C847352B2C76EDCBBCE5A8DCB5AABDE305AD7C3A2F72EA4BDB7B71BFB1093D669B364E51ECC1DE046A6F6C6A5DB3FB791C390373717670E29C8DBB48A1A12EBE3CFC3CBD44CB1340180 -MD = 587609F1E055FF509D071EB12F96DB88BB4BE0727D1BA900E933B74FE0AAA9479496E869BD61717DFEC0F5D204F00110 - -Len = 1171 -Msg = AB7B466829094B1062BA045DA7100C355D3942C06675FB8E304277EB3DA4F6F4AC99FE0E69862363BDCB79C2593DA19B435D83879D61FB058C2DCB0AC9F3C489AC54D787937297E53A400C96543319F151BF1218A7249776B8A55B2DA79C4D659255AF260A7E63DCA829079554244B3CA82CFBEB4C19FB5BD6C69D97AF0F41854F418619706CC5E8F87A2B2E8D6C6AA7C8F800 -MD = 76FC4E753C57FA5B1F36A5B55ADD4DC49504F85A90B72E02D828D0504590B492A85742580CCD9415572A7A51BB66F25B - -Len = 1172 -Msg = 910BF093C0DED15736115D84AF3E44E8314B77C31D72BD72C4F4D0CD6C567ABEBB245C216A5DBD914AF09FCF09FF3CB1BF0D2F19BDE7B418891B02679A6EDB0D432E66D83B155E71A5F8FF881D54F03C568C501726176CA24E0CF3C80CBAE4FB55B2F8C8AD021C43D855072C4170E31D45AE6C2F1FA467C59D38DEF1948E9A3496DCA570DCF5BCE480C7B51D9233E7F928D920 -MD = 30D3FFD93F96F4DD9CDF31E748511F73404E28559746F8167329C9B312D2C7EC9BD5CE97E5FE694B43C06626D1B409CF - -Len = 1173 -Msg = 6C2317F5B39417E3ADA7C71CE7A8D69DDD1E25B607B86B8BE099111D64D6DC7C4A2B7D9CF60A33AD7650C21C702C968204F92CBC3D2BC18FA0EC8DF49F0F4B880E5C4E144498DF0DA067C7AF37EED9A6540885823BD984957B2A0EA87DF8264EB4BB17B26C68A9F9734BFA6FF6EEDC6C5C8A6BB036FD4D7791455AA5569CFE6E643745252450877B62E2116808CF1CFD882758 -MD = A3AB40B325089B39605A6D66E36BD00115D26B3A47BE1E6DD8FD4589C83C77AC68175598BF320EA5F1186C1C5972C8E2 - -Len = 1174 -Msg = 25D3A9228CC1232F8F65C1C95AF61637C115D4516464EBFA6795BF778C5BE311128F5F41D70465487A22C32D22F1D9BDCFFEA0547996207B913A6543516EE27694B7FA7FF182074E0C709339EC36781E3C91A724326FA5AB72F59032D4FAE15B6C4F512FC29EF0D078FF6010EABE0CA1F2B57E351FE5AE34C97AC09C81FAFAF251CB1D21F76C8C3FB16435C0B057C35F9E7B94 -MD = 059A527D4C9541520C053A8441B72E7E7177E4C1FB472CB1411DDBE873FDDD812CE2E56F4426122537A522792909281A - -Len = 1175 -Msg = 53DEB99B91DAF23B4467DBE3B98FE9579D1A1766A235585D7CF6D65C10C844C6EEC0D59C43BEC7B3117A5E42DD35EADC84439F884349AB94FECF403C1944F25BFACEC73FED352C49D1D6D4CAEE5F0F58BA1D4E27388E87E2EB9C0152D0705DC22EAD4A8EEF13C2160C9795ACD51FFB73979D5C21AAAD813F0A9E1A9E6E0B13F6F4E7E5314250620BA1B80953EA80F8E821AE9A -MD = 638D8F348C3B5495701925FB2F27A15C3D22C3A18D3A37BA095E694A39D8CCC53392CFF6ADEC900C013607B4D89EFD77 - -Len = 1176 -Msg = 7639B461FFF270B2455AC1D1AFCE782944AEA5E9087EB4A39EB96BB5C3BAAF0E868C8526D3404F9405E79E77BFAC5FFB89BF1957B523E17D341D7323C302EA7083872DD5E8705694ACDDA36D5A1B895AAA16ECA6104C82688532C8BFE1790B5DC9F4EC5FE95BAED37E1D287BE710431F1E5E8EE105BC42ED37D74B1E55984BF1C09FE6A1FA13EF3B96FAEAED6A2A1950A12153 -MD = C3E5DDF4572A386C99F998E68FCCC7F85867A73E13C2058C18391A922416FD352CA6B659BAD021E0D9A05789F59D3C67 - -Len = 1177 -Msg = 9AFEA0868A1A5BDFC88B78BD641243C8152D8F9D1601A32815DEF06CD9EDB6139B0E0821F742BC203B6C3E550B80948FDDA65FCDFD427BDAF90E6F94716EC99E7844B261CC6F1FE737195E0DEA72EDFF6BA96992D59747BE0AEEA610B7F0FFABF12B86C4E17E5F79501B9F29668F8B2D7505410981229B445BABF8A2A5D1BF38C9D0F3668C6893C5AA55E13B3BAAC6C49F47B100 -MD = F36B75B5C5FDD2CC4C44E70013A6B6687F78478B409EFF7556187E17674888B7483F83A5E1522E7C61ECD9E4C3F2B198 - -Len = 1178 -Msg = 5866E10C6B7ED7A1DCEB9362F737B4B2F51AD1747915CEA521DD190734DB6C58A69E9B807B6E91651A77FD1C018D1B9F237ACA44E861A8330D220A63EEDBC9ABACBE57B70850BC9E70EB95D3D2F611CE07603C394799997716D244FA8DB4B5B3E91178CF93A050D6F5AD5DEAEB039F4511593D533BE38A2B554B470A33C74D070B04592633D389FF6C7530577ECF0F572A31B280 -MD = 1B09294C8C64C400ECE31B80AE8FD8F43F8DB2BC121FFADEB68223BE76EB7FB3C3B0AA5F2336B6E6654D656D685B9926 - -Len = 1179 -Msg = DC5F38825ADF0C2ED13063D7A142494DE2FB8CFD78718CD87BEA1B17288D18FC6A914D6F2B6BDB7218DE003CBABD3F2B5C1248DCA7E221FC0B141203BD7C96AC3D6746155147363D5C75E4BB05D6AE03C0DC4B8CCEB689AF6CCEDBCA79F2FB901107C8F91CB146E57E79921097BCE553DEC9FA17AFC94F55CFEE76C4B9F8379B3E87857B874DEEEAA140F6DBF158CB5E42085360 -MD = 35376B557274F691873A78317A2ABA7075FA2ED58FF45B0257041EAF8703F9D5BC6A1BDC688FDD7D003F8D999C914235 - -Len = 1180 -Msg = 788BD86E95800633621BD3314977F9BFFD02E73D885AB580D1EF3DE480103FF2C449AD81B2CC15CAAF350D794E48DF3F64804B5DC5ACDA419EC34E95D50A6614EFCB4C6DA3267F26B75BFAC3C87CC0DC81C2683EAA9ECE7C3F5E7847ECF00FA1A9043AE5A90EE15F8B81083F38829933C8C75DF3F08075847F2B64F29B973BABB18592438F9A69E20BE11C084372895E91B837B0 -MD = 83CEBB847CF505C934168FF2CB23501CAFCA4CA401889414EC19397E281D9E2E6F3D4AF7EB472D64A2CA2B32C06EB5CC - -Len = 1181 -Msg = 375B857529A24EFE7A78B2CA46E1A4295912CD7B739AEB1CBDA7BEFC901EB4FFD8BED49F3366E4E8C0EA1EE938F60E17D2D0D05F5100F288415CAC3F7E82FD30689E2CC692BE02CB3E34CFF7D3DE7975042E3C5C3F8AE348FF3402A6107583E57C8E038D25668D76E43772FD92E227D5C1E8330A929D342CDF8DEBE1D314C88EAED559A13461772B73CF39093216C57679943FD8 -MD = E669490ADF8007467A3AA6B11DBD3D27D51ED17760D5A87F46615DA62336F952F97D71F05B566664C356DCF9E8C79ABC - -Len = 1182 -Msg = C40B66822F1F282D598F05CB2094EC4E69419FFDFE3833672A289B4ECF43EF408EF4862ABA90A81570E35E73EE4809E6A02CA9F6B14D96AC2C401045F2D5D86137051B4D3F5556961DBB96CB32CCFB38D215F826D00986037C6012EEA06B9FFD10170DF6E4E20D75A46C8F7A345B3C67917002276C73F717E4E61ED4329C3E03643E9D56FCB266498DC37A72A932F3A890FF1CB0 -MD = EA24FFF87DBB14CCDDC508C53A0D1A4E1D45A0B2B764D145C0DF2BD3511B73CB82522A99CA766CD5DEAC4B7F95DE47A3 - -Len = 1183 -Msg = 494342589E394B324577E17E59EC8EA27F4ABC8D0454EC70AF0BE40FECF638A278A290137220AE9F00A2CA70CACB85BDD4013823917DD9E4AC1B5E00521D3F385729AAAD85AEDE5B8BBCC9FD1F97AA614FA3176DB83D192CCF775BB5A3C51F9CC9E1E6639B3F58373BDF3F20CD2F7BF780336F4F5F12AC6F3AB01DD1A139D067FCFDEB184B291DE76C7D770D8EC122BFB4CF890C -MD = FC59DE007172218042178E3DA94445BFD11A42420D15890AD7C0F3059CE81892CE1F86D5A41CC1F9435D97A79A72B735 - -Len = 1184 -Msg = EB6513FC61B30CFBA58D4D7E80F94D14589090CF1D80B1DF2E68088DC6104959BA0D583D585E9578AB0AEC0CF36C48435EB52ED9AB4BBCE7A5ABE679C97AE2DBE35E8CC1D45B06DDA3CF418665C57CBEE4BBB47FA4CAF78F4EE656FEC237FE4EEBBAFA206E1EF2BD0EE4AE71BD0E9B2F54F91DAADF1FEBFD7032381D636B733DCB3BF76FB14E23AFF1F68ED3DBCF75C9B99C6F26 -MD = 157481D0A24BA9FAFA1800C9713E702976167FDDF52367A7932AA3CFF22F4A2E19A016C7BACBD97CEC3EA6B1E87CB3D3 - -Len = 1185 -Msg = 826DBB35FA1752054063522EBD05A746B5AEC31C1B27031080BF56A79BDAF998065B5DB044FD6AF4E14A3AD246CFED7AF104E8ED2B63A696489D610DEAF6128A742D669FAA149CAD862F467D73E53793C1C8D6237839F5677D5CD3FA78816B41E640C62F9D593E7B94595CBB1DCF3AEAA0CB05A88F890AFF71F30C8629FD3AE3348CC7338B1743B9E5768DBAA8BDBE6446E5DC4600 -MD = 26DEF9B84C21AD0599B8D8C55A0965BF56D477750D200391D24FCD637459FE778AA2F8A5B0F5CC12ADD462B1AAD0AB61 - -Len = 1186 -Msg = EA5C8DFB574F00CC9CD3DB9A5D499C2F722A35257347A4A80B4C141ED02DDD7CEA584E1608144B6D579029730244ABC25DDE51EF19772376D2607A13ED513BA3E43D6ED7A99553D23EF2E0171538FEC263EFE422AFF4B723BCD0B85E3FDB07E2DEA2CB66C8F4F4C6D9138914E6ADD822E276879A122F75C14575FC77A7117F05E274A029ACD74F8DFAEC843DB2581CD778702BF8C0 -MD = 883611F9571658CC6876A4636AED8C4C2FA5992F00A5447F5C6799C1641CD5EEE411D8A1319E9C6E81773BA4D5B36892 - -Len = 1187 -Msg = 2EB70DA0700DDF3821FE877474EE9F5B8A516C8818F18D57E2DD3F85E537B4C47CDFF4944220BE5084212290B9EFB10D7099A12AC41DEE0C6D7DBB2FE376DC8EBA1A845D5DA62634E7C3C15DC2DD6C6F44BA4B82B73D7B58ABD41A35D2AEFEE2263155A7B60CF2454FE240FAC4F8BB75A0829098793554CD2617CD7B02307848100EB5CCE098520C167F42FF4F32CEBA6AD91B45C0 -MD = 33C86B2960E467B4527FF6355FDF06E88256CC66C51341F973A7E1CEC9B8A68F750FF4BAA5CA5B5B23922E72A781D310 - -Len = 1188 -Msg = 1FB040B1196A11132472801DC17BAB0A09E0A85CB66DDC8F19415317B04A2B854E0C3F798AC6488C8FDB452C9A83E23FCFEC96C5CB99BD6D5FB53415B3A24CED6925B5092E75EC4A91809497C34E1634BD1F851DF04896869F105CAEA4B881FB1905113B67BDA4507CE676F45B65D89893E2C2FD9D883041A8F7AB576FC927A51C3BC97B18F87903E421A7D9A26CFB5C4BADE82DD0 -MD = 4E05D1DA4DFA624059AD1070CEE8D76A3E0860F36A1178269FC61E5A3A4B40CF8FEB950CB18997B94C8C598B8011A2F1 - -Len = 1189 -Msg = 0AC19F7A5B5B5587B57EB2A3DD742020D6F25DB96E18D88B96E264C6C7CD95C39056C62E262075A89C2E9C7F95B7DA28BDE2EFD0AB61E08CC24905D3758C07EE9E044E08891041B3EE94DEF1CCAC41E213CF637289E859DCA3563F38A410EAE04B0256464DB8AECD6AE02C2F0750E241F825B4BC3D2746CCC41FC709ABC5403E6B8AD975ABD5086EC452D7E4EA8BEDEDFAB8057C20 -MD = 9B703AC24A11F5AA1DF683D01CE9081A63376DF396BCC3C52E29340262722C97C1FB9E8AE9FB40DE14EF764510B7A901 - -Len = 1190 -Msg = E5DBE6EF5D7C8260E18896A8118B42B75BF6891D7B79E784213C7385FC06DD68637A4ADDFD25374AF0122C04FA01DEC789B6BA08347EB226F985437D6EB855DA96EAEA2714373ECC6BD02BA3C77DBE2A6CFAB6FE6738C6DDE04A8D7D107CFC0EE87DD66B850F70D2C676AF4EB9ACB0C771A2EB9495F86C21F8B59847A53F8637863D0D29D5015F0129CDBA4819755F1339840C15D4 -MD = F942F3B374788A9C03CA11278C230FA59B021CCA25A540DC97EC8372F7FCA81D9184D701616C79FE9E34263E7F92FD6F - -Len = 1191 -Msg = 59CF21660C207C793EC978C2D02834BA9BF79A9F6B47164193BB3C45F7195B78485EE73640CBA87D563627E6F08CE6D621EDDA03063CF51810B56B1E03E6601545F5BA3FC80AE74F055441DEE6AC31B02363E7624734D89259B52D69108C2839DFBF4E64553D09F5F5A4EDA85D7B69F9E668F78156B06EA4C0002F33495CBB464808DF0F48F07D4AF65573889E3C10CE188F7015FC -MD = 9F1335232141B6D981FF72E05515CAA777A43B0EF97B1A8ACE26A3FD76EB6761D7E1D2715931B5AFA324586D264135EB - -Len = 1192 -Msg = 1594D74BF5DDE444265D4C04DAD9721FF3E34CBF622DAF341FE16B96431F6C4DF1F760D34F296EB97D98D560AD5286FEC4DCE1724F20B54FD7DF51D4BF137ADD656C80546FB1BF516D62EE82BAA992910EF4CC18B70F3F8698276FCFB44E0EC546C2C39CFD8EE91034FF9303058B4252462F86C823EB15BF481E6B79CC3A02218595B3658E8B37382BD5048EAED5FD02C37944E73B -MD = BCDD36EE35C2C771852E27DB2CDDABC155AB43D28E6289F0ABA4F93E793C999F30836C7483FBEA5A73F4EEB5D8D32FE3 - -Len = 1193 -Msg = 880D1E3AD14193B4F50EEEF144EE2B95FD817D157521EA14512CDCE43B1E498C0F3DA6906B3152668B79E542732D3424AD8AA392FB1D951D88AFEF7BB419E9E6630F8543E089D44F8397E420A0EC1F439AC2B1353C4B811D752E3B9D47C2220FE490ED4B2E78F63E8B05758417AC89B62CE2776156AA316C07414BF840B61D2AC875C23D313354FDCF2AC13F48F18BE75804E42E2F80 -MD = 5E09221AC799F4E6D4B38091298219D6D82AC53EE2E2880F458728FA722E0AC318F673645050175E7F16094191101F9E - -Len = 1194 -Msg = 90486823C70519411AF34F204AC4138D7B6915C43D1A0910955E0DAABA761C55E1AD5F75B2A834DC90558B112BF80D24B9969DD22D1FAA4553F94AADFF5281214F3B41D2E8190F83C4B15B1545766B78C73DAAF920D06194456D3069DEAC4344C176753F5E6A7DB6955CA6837123DC12CD19D0D46DD3DEE721199AFD8CA7BE9D8A08A85E5E97F720A82C6BAE20A6666322820A466A00 -MD = 9B5A45AC43C8563459B069D4CD5722AB128925A39260F3F4F7902A48EA8CA93E939A16B813687230E104ED899BC000BF - -Len = 1195 -Msg = 1554706EED3D3C4BFF57E5ECE7E346FDBCBFEA1369C8819813AC26F9CBB9EFA54000343E9FC91A1751B4E5017397936F63229AE21FAAA04049E3EE32808B31EF53818C893D67248835D9A9BE4F7A72466423A1378666D95769203303F2933452E302DFCB870A642118B37BA723F88E28804AC1E39DC81FA98F6E2D150FBB5B05FD19F527F4B601918255BEDB7ECAAF71D83B5002EAA0 -MD = FCB3EC2244079789BEB17C2747F447353E7B07490E9CC9F9842FBD10C00DD62F2CB9EB4A1F9D7C6D4CE8960874D85C7C - -Len = 1196 -Msg = 700516F8246D73E28CB79EB2AC2F806A67DEBD5CBC438F9B58FB02B85E6667C3E96ACF02168F83CCA0AB4560FA6A31A10DCF638B2AAE4D0EB9DFEBA4EB723D574005659B72D3596BEA991809290C612D90BA4448A8D413E2B8B07F41E9AAB65761366D7A19C97E3ECA66496B16A5556989093937CB365B029FF0DECFF7C74E26810D7E00CB4EE35D965F19F70046FC5A062386C0E820 -MD = 5F3B165821D3D20A743AB68DA5FC21DEFE5FC90391C05C8D5F29F5A9102F52FEBD5A87DDB6F5B9DC2C90D245982A038C - -Len = 1197 -Msg = B3151A083EF4ED82D6FF662D632D3A15CE93EDE988CD7E31EF91E2944DAC669BBD8D4EDF28B07C0809A9D7965AC023E143A9D8B66C8442A51283F69E7684000B8C8CB3CA12891E3B8AD8CE342514F5671FFF3506D937D734505D1B7E4557CB69B83D76F15806C56E6696ADF027C497BD7E30C19B92E2F5E4536808917986E59FEA339DB1B19186495DEC650DB7B85EAE5925AAC57158 -MD = 23ABFAD1CF828ABE33C82705E6DBA1282B997DFF8D9295321B4685DB7384B33CA1E0C568FEC04BD82E4A92188322841B - -Len = 1198 -Msg = 2BE9BF5794E6A8EF2BA1EB5DA245610577FEDB653B12EAF68DB8FCD5AC2FC0495475912D5F5D83E81B51098F9A7FBE1E2B4B8D5370EB64FA98B73147C0DB53C74D508BF0BF96C0DF5C6F765C94E4DD1A00DE2D3F86A6A67B2EAFCC31E97A0B57A5D068E62C59D5CC2459DFF4B5F385E8D360918E8FE7C61E0B54369A7DAE211BAD3E0A6DE8D798399A45886D2A1F14433A20C46B640C -MD = 097148A76F2722850F404FC530E6F888CBC47B986ED2D865DBDA82D564B3BE28CD809605F9E408FD4554EBD25FA765B9 - -Len = 1199 -Msg = 513DBFF1209835CD5C01E7FF2A85F1CD70A37CEF3D61897F88C25B40D448D7F4A14DE631A2B44E366238CD1637DEA9EA0437B78693AF5F1E37ABD61BEB9A6F302FC0958976D7E35508D79052C6CB37CD0EFF35031DCEB6D9C0E6E8321B2A79BDF5C97F1AD9EC9EDC27C359B0396A3FF4A276A8C3B6526599C90CBEF761FFBB4722CA389597F69E9A67BCF5403649252A857B56BF6C12 -MD = 8C4DA7968F58F6F357FAA315297F88EF66C76FB5464937AEC77D11766ED673A578B30C420327487B8E70FD296CDB8586 - -Len = 1200 -Msg = 4CFA1278903026F66FEDD41374558BE1B585D03C5C55DAC94361DF286D4BD39C7CB8037ED3B267B07C346626449D0CC5B0DD2CF221F7E4C3449A4BE99985D2D5E67BFF2923357DDEAB5ABCB4619F3A3A57B2CF928A022EB27676C6CF805689004FCA4D41EA6C2D0A4789C7605F7BB838DD883B3AD3E6027E775BCF262881428099C7FFF95B14C095EA130E0B9938A5E22FC52650F591 -MD = FA7F66D37C1DC3E81BF55C443ABAD5CF79A3D9834F77A206291138AE31438B986737DC4599EC5D10F7F005D1833B7D2E - -Len = 1201 -Msg = 0409C9EB80912B2931EEEE3255E452201EFC972E6427EA1C9FD8DB51DECBDAD5145B0EF578EECD56ED3D9026F65705B30ECBDB27B32866ED5F6205E72899BD9FDC76A81F4613C4ACCEE9D0B19CCCAC6EC99C93A0F337BC2B9FFBA0EF5C2858CA503F5B4D2974AA0DEBB407F5E01D707DE7CBB96AB993672FDBE46C6DC462A1BD38B853B9038B45A9023D14585CD3F21F761A5329930000 -MD = 97D5B5E7A55077C4DCB29C6F9917BF3B1AB29C73C400424BE88230B3E40624C29AE02283F1C3E9EBD0A3E661450AEB31 - -Len = 1202 -Msg = E4C0456940913E4F1D513208BBFA725EABA66714F89D4830D0B1D3EC3EAD6944A533F661AF7F37145C5550EAF106A6E5EF75647EC078C48DAB5579A71C3F1394847B329951806F160EB4CCDBA77033F21665ED9A6CD872B207F83CF006F5DADBA8A2FF05CF7576648F87E32C3B3DECA8539F65CBF65663D761C3F6C03EA66C2F60FC18EF7C5200B173E9D136A16066A9022465AE02B440 -MD = 1D8A0EF0BD58A9E9FB11A15DCECD8417656CD742F0B00693C4385BA6CC5B2880D5F090646872984083BD631F8045771B - -Len = 1203 -Msg = CF2B1D3749F0FCFE15667C2180E01A3090C60387B864522F06C8C6754F2655359FBDB91AE7EDEA95009470FED761B30641DD3B98390EF85B4B8BCC927D63DFB80DB643534B65862AC148DCDC95162D707022510F9996689AAA1B4B50C6A8867A74B11D00B2517FC81D96E8D1BF24CF0ECA862CAC750059AA7BA1B81ACE44DA18287DE4D7AC0386917F3570BC2C4E3ACB6F233C85406EC0 -MD = F401948C8E3007E4D1E267F15B36F47AA560021135C9E36B7480CFB5C39CE33BC2F8936B25E738EC4CB73B891C1E29FB - -Len = 1204 -Msg = 78D24A6EC44983D0836B45520E6218A0B017F82547E8EE1EB61C8F9D6C5AA5A0ABB6B0635320B9DFD2EF8C4B3523AD4AEE16B24F17A069B6A477F2797FCEDC02AA9499E4EA579CEC79510288C11FABB4D1625EB84BBF4A20DD65C9D406E7309C3D897F83CCAE2BE9FAFF2E2303A86AB75E424425A339D2C6E2846D64BAFCB9905F84477132858D0C03F5F546F6D30D108253AC76B64880 -MD = 944A8BC18EE64B4ACE5558F05E157443DA41E06DAC19873291DC077FDBB855B72404DF60C78F804371A5F5E4FB895450 - -Len = 1205 -Msg = 8D1B3A5DD6AF7423E91EC02A68D19A902166B12968BA6A9B3C2C86CE746161B434DD2EC00607563061DC04EDA5646DD5AA49B1DA5CC7EA2BFA64E6832939EB1E70B61D2E0A44A519E9C6469E7F9C0C3C65A819F306273DBE1022946675E476A604FB08A1A0FD9DAB905134FAD2F26E732A69FCD7DB11A1ED353E24841C400B0A4AD734A8744B024735E8F98A9F7FF39A0006A1B3F1BF10 -MD = 981F95FAEC463346DE406B5B229A428A75901E302ED82404D2733ECF8E0FE83BAF19DD471ADF8A19CA12BB083236D666 - -Len = 1206 -Msg = 91544241F70505C5295091A16575C6E00E55CD65D205CADC8EFEDAB50398B8CB34BEC20FE7A5E4D31C79731405DAA46879B52200B8B2B114B22FAF7B7B9C3BA530D76BFC9EE733CEAF49E4A14DFF39872019FF7A1196D8333076BEF518B6410F764F60F413BE7969F56D85972B6C5B689E9400038211C3238ABDB2A32AF962EB2FC8E28355F594F091B5675BA0F6B042F83D6BE7876234 -MD = 622EC5B485EAC2DE6E78B0A6D19ABE85547605DE28079102D904BFF43ED97F5EF1E062A84C2211C6D5D031D0B9DF324D - -Len = 1207 -Msg = 56E0C89263D8B0EAFAD6AF1035860FC6C542B1B7B9B9B434D29A3A125307C85C882DE03ED68BBC937A6340970933C89271846416042640AA90F77C9C8F670FB4123D9B628799FEF18C87AB4F914B2419DACAB45D2E0FDC686D48171EBBF17CA4DC28A7548C0836B996F6C387631AA413117DEAE5A1D380B94DE2686E61476E230B2ACD642FECA0D769482E30170888981505E9FE8CD8BA -MD = B8485B1F81333B04B52D6D3ADDDE0FEECCD58165357924C95EED45E9FB74D0F50D3DA8BE778629FA943A5A2967A297E0 - -Len = 1208 -Msg = D3E65CB92CFA79662F6AF493D696A07CCF32AAADCCEFF06E73E8D9F6F909209E66715D6E978788C49EFB9087B170ECF3AA86D2D4D1A065AE0EFC8924F365D676B3CB9E2BEC918FD96D0B43DEE83727C9A93BF56CA2B2E59ADBA85696546A815067FC7A78039629D4948D157E7B0D826D1BF8E81237BAB7321312FDAA4D521744F988DB6FDF04549D0FDCA393D639C729AF716E9C8BBA48 -MD = 8F0E47ED680661F1ACE9EEEE855D935FDFC66B97C2E9A6FC7341F14D9327C8E72BCA3FA67E59804CEA41F09E1C4F8715 - -Len = 1209 -Msg = 558AA1969870FA3F59EE259B5797358ED42E6B3F7E7548FB4C7985461EA9E3A65BC021FC95626DD462FF2F99BB5A6A8E19AA27AEB184F41630E67D3265688857C61AC58B205406BFA6F02C6D6463C33598F824F0387C86797D8AA9EAB639B6A77B7076B52EB5398C8F31155A6A1BBDAF2DEA857C798E8F9B3168CCCAAAD4EA37C5AED9BD9E3B94042C94963C5064F572B163B6A8A6CFDE80 -MD = 586F886EA860673498807BC9350B314554AC8DA94451DDE81235B92C42F0567C920CD4B423598F96570A4756D4197DD5 - -Len = 1210 -Msg = B25A91F9A28E69447149BE857CE03282351517AF22F6512F7EE3B00B161125EE2673840D5765E9AAF2098732E7D9780C31452872AB6CDD658C5F2D8A7529D0E622394C26A03B11F45D15DB0FAFF43107B1B750B822E0433CA634354EF8782216ABB666D187BA1486CC3CC923F4A270300886B4CC3FE3E4507ACDC605EE440733F786852054662E43811CD1B77D97E6829C3D7AA9084F0CC0 -MD = 166F5503E30933026F3137A492BBBBCBBB9F39BAE60F61565497D742457FD1C250376FE4CF0D6F8F238184E3E99FE531 - -Len = 1211 -Msg = D5BC5EA66BFF1C5573168AB9E814082331157B8B885C9E4976088A7CCD342186CFD88499887DB0144A9743F13B5F4C402C18A6B060DD8DF0101E1C11482E109AFC78C0C6352F7D4AE47009A3DFD2AC5B3C6E08CD253D717253FB89F94E98DF386FB09333A1F4E3BE1792ECAC7C2CAB28B447ED0363A5EC84BC1E26A2AA7F3C5208E0C0015125155C63A4AF5787437D7CEF410CDB393A2FE0 -MD = 4F1D16EBFF13813399D1DE56DA2019DE4DB1C8E2F0EB594D768A5FB063BBBA6E267DF2A8F323E3EF0C2FBD8B8D58AABA - -Len = 1212 -Msg = 7B32C25404B828B7975B85A7F8E808CAA26E48DCE8E28C5CD0D98A29D3FB1E34D09914421C693BA70EEA3CB5C79F8842B8EB70DF6548B223B14680E31566C6C126F53EE77A0C5A4FE46A6DD6E81E1281E39F5CE580204702728509A3207AB6D316712D355125F8310026321D2E0E318B58C6E6E49CCDC867BD908803FF4AE066A9AF402FDEAA1006B100679A4F68145588C21E9D569C5B80 -MD = 9D893F521BDD618E20CF07F5522C7E64842FBD3C82517EF9A188B105E462CBB7FF4CFD6385C090AFDCC4757C19863FB2 - -Len = 1213 -Msg = FFD56A3A7BFBCBB58E076EC15B32FDC6515E6A3CC797671D8291C7F9905D5CBED34607D713D1FACCE5CF240F4B0CEE151A43CB96FF832686832E28FE24B603D95FFB82D757B2AC496C80FDDA8E5701DAC77F597DE05D9D74008652CC06E5A724B3D279A43CAB626EAFA8732B446CBB24C2A574EB6DB20C736678B65B71FD0BECA4004C0F6BF8E656E754CED34295FF3B2977DBF083301050 -MD = C9418671F12B03D6FC055B7A6B9BBF032220C3ACD8C0D9234B619DAC9E86750B881E8D13DCB869D91D77A5D929D622C6 - -Len = 1214 -Msg = C8ECC9C02A54BCD934F3AA9416D4C8539BFC445C20CA833678394503C6B87091B8B51185859DE712FD9CF8EF6DC4237811312F1BCB9276D88B256CABCF2BE94A04B91FFE528B3CE13E68748C16D9370A228ADC895832FAB7C425E3D75A6B1901DE47993CD484AAB82EA902C6332B5888BFBB60415F4A0B05748EA088212D8964228A5C1899CA4F8C8F21C1236FA118B68B5287AA0A9D8F04 -MD = AEE59BB6AC14EAA542A2C5FC1F3709F5961F8F6CD0339C5E8C7B0A6387BBEE7A24865522C738B59A4E88EEB097608E68 - -Len = 1215 -Msg = 625AF287E043C8F40C535BA8495B07A4F20310AD069F1C1A1698E2FC2682DE1294F7290C5BB7C4CA4397CFB9380ECDA6FAEAA39230513A145646BA120D95E816CCE3D13F5C9E6F667B2C17CA6D20E29DDEDBD74BB7051F3F61826A7554D537A26261D0B5759C615530D36139863811429ED257F8D85F30BCAF67D10B9C926C398DBEDDA79C0F7C858BC1C6FE4EF20DD3580A1419F4414834 -MD = B86997B84664AD2FA9FBA3393DB5A750DF60EBB2E64FF2F6440564799EFFEA3BB496F11CB1F684D70449F7A707B9B42E - -Len = 1216 -Msg = 842CC583504539622D7F71E7E31863A2B885C56A0BA62DB4C2A3F2FD12E79660DC7205CA29A0DC0A87DB4DC62EE47A41DB36B9DDB3293B9AC4BAAE7DF5C6E7201E17F717AB56E12CAD476BE49608AD2D50309E7D48D2D8DE4FA58AC3CFEAFEEE48C0A9EEC88498E3EFC51F54D300D828DDDCCB9D0B06DD021A29CF5CB5B2506915BEB8A11998B8B886E0F9B7A80E97D91A7D01270F9A7717 -MD = F105810E724C2C55162CF71721E3F59871F06010BC7F052AB282BFB6D4A3BF184B892BAF8FADD02070F64B9E036DC5F7 - -Len = 1217 -Msg = EE795C10211EA9D303C7C8333C6CDE90E606A65C1D5D73C4A26645EF592950FA96B2A666F360A3C56C3C00584DC2BCFAE83E35B738DBB63C65EE199D44EAE8D82654007F9387327378678A82B649EFC8E44EAB65DAD64F4087BBE76BB90060B161B9826B7AD0ADF81F503BBB964AF705F1376DFAE246DC5C4B4995BC2AFB4DC5E43FE44BDF5B66B949AC499E615BFB04A0DDAF25D6A0702300 -MD = 058CAE504654EE134C447513742F924D572C21B78DF93751BB6B82F7F9ED46A9AE1EE041C4FF199483715520CAAE87DE - -Len = 1218 -Msg = CFCE57319D4C68132C9491522458BAA42493219C4E61CEEE5248F6DF0A65CA2D82C846BAFA01628DEC4A07911F1C71C4DCE7AC66AD005A8D973D3E8D646C9EAA47FC8FBE0899FE69A43BC20DFDD262756B7A703DC6D1A271B544D7E8EF077C3EDDBD0784FAC5B7AA197F25E8A83E1A507D0A893E24FE2AD4EFAD28F65C8682EA423223ABA8E04E48EAE78BE0F70FF0F0C44749AA4972A4F1C0 -MD = 631EC3DCA129ED7A56012D82ED91AA521911B23CD99048749A45EACBA7AAF9ABD2C419D717B5F13AAAC5DBE9ACB83517 - -Len = 1219 -Msg = 91B24F53E90CDC482054BAD312C5126F80154C3AE92C1680A0807B2592EE95AF75C2105FE437C3F70F6B6B06F98AEAEA13E572FFD42024E748D1BEF6044A54D7D057303AAB3D5B940D2DEA3C405E667484334A628F94312086D72E3744A75EC43B645879D45917E7C587A27573B63BC2318E080767808BAD0286F1EF1B41192667037DAC968D784B09DD6342B31CAD52E936E65B8F3DC097A0 -MD = 2A8F47A9E4C8D2B6229E49DB463DFC2A4278E1B94FECEF4340F038A5EF2CB92465C0259FEFDC3A2FCA4CF799F4EC33E0 - -Len = 1220 -Msg = 77E951D75C4B0CAA1BD37CD917B05E25F17259FD831CA35166350425844422C59B85C34E40262A01EDA5EC99F4D0E1BA62D371284CFF46FD1ED5152C3AA612F279CF48095157FF8CD0A8951CA8C4B56DE177BC493FA3601976184D05F2D34CDCFC9F230DB5ACA5CAC3CCD60A05E67FE1FCD9D23930F1D4708697B2B226CAAA3E4B89C97EF142F17D56A2F417207BC51F4F30245624A1647900 -MD = 55F73B35B70E9D64040CA4796DEEE196BCF0355C131C4EF5A7EE20074F27C580DD718C5C0A818E5632E558B176D919DF - -Len = 1221 -Msg = 78E4FD46027326BB88D6C727711089A2A4643BE28267B6BC224EB4105B4BE07B73E28A2A97C02F17980F296B1494BFA51158D4DA1DAC27569B7598D8B11A10E040497A87E892EE035826CF948CDD957CF23EE17E88228849E00E8839B2D2DEA60C3E2CC0C7AFBA8EF335E9B8A0610EC25A452533D1F3AEF251166CA8D384E440EA616BC416706C0FF8D6613B89D62C6E5BAE80078A6E528168 -MD = 03FC4894250D1EB12A601E0C16A53043ED8E77843F61B44CB3933C76BFA8AEEDF148D343B3A089E433518D045C4F7952 - -Len = 1222 -Msg = 49A1E08F3F4B954DB2998AE9F6B6E48A5E0CF52CC402CBC34A5472A5FA7A5C16C2818EEA453408514394F390DD5889D58FA6AD8CAF373F48F58E7FDCD1A769BDC47B24D8500CF72488D93453ABB336A82D689F0B983600B80623AE818B00108A1CD4A615C9648E1A2D095DC544563E19071F7C4FA13E01379B67A723E58B6CC9620F2D93CF7D6B25F4346E3932E8322847610E718A41F3EAE4 -MD = 9F80F067801F8B0DF88A8404E0918D0C60AB82F53FAB621E8BAEE412FECD6B67F913A5C44DB595D1B83849CB8DC148F2 - -Len = 1223 -Msg = 54C62479E70B5E674958039D5B0A720C878A69C9197A905B0445C8241F256DD80F146545F4A97F8C3C3CA4D9AD5F27E2704A98822CBCAF9A1F3D32B8570406C9D9CE13ED2D78FDB5C2827A4BA9DE242AC09C26DB0AA135B06FC7506E3B9AB45958059F151919A99B3E36F7E4331D7620D6E720A9A20042128CF47EBC231372EB9A1B7C7C16B268F375447DE1F094836CB12C1EEF00100A14C8 -MD = BF9A548D872868DDEF71B630B04B73E3F45782A36028A5AD37ABB891012B0CB7000C887E44B22384C509F41103418133 - -Len = 1224 -Msg = 6C4B0A0719573E57248661E98FEBE326571F9A1CA813D3638531AE28B4860F23C3A3A8AC1C250034A660E2D71E16D3ACC4BF9CE215C6F15B1C0FC7E77D3D27157E66DA9CEEC9258F8F2BF9E02B4AC93793DD6E29E307EDE3695A0DF63CBDC0FC66FB770813EB149CA2A916911BEE4902C47C7802E69E405FE3C04CEB5522792A5503FA829F707272226621F7C488A7698C0D69AA561BE9F378 -MD = CBB0FCE4AF36D14B63BC72D37FB4028327843FB22EC033BFC068E7B081287E31E3451D8A1D97692B379FF9E6ACD40240 - -Len = 1225 -Msg = 0944B0500C2FD3F0ACD0B0623EDA2E763BD95483CA40A44015BC0689F840AA97873AAEF58FF7CA01B0BEBFA789D301D3BF25AF39D32F198AC941BFC93C2051E1F2A38389AA26C7B04CB76D7B23361232587F923E630F27DFC7AE0E9FA8ADF10FD7D022200FCEE5847148003CC7144119DB20D0E2AA6564F261CF78F1B9F79CFB3DC8A9867BBC7FF49D719F493686006F2060B93D8B3DF679F900 -MD = 01FE4FADA1868FE386F694CDD59F9B4C51EFFE88D7E66CD501BA239219900958D3ADB8BCED855918CDDDFF745EC4494D - -Len = 1226 -Msg = 07CE3EBDE3C2F23BC7CAA9D38E5312961A470F9375EC3DF44809853D47862A2332D0BC4F29B267CE3FDCA659720BDFB84713BE1B2F7387D679E3A8AC8A12837E8003E9EADEDFD3E29AEF2150594604F507CA276A9DC5EB3EE8EB74B511787EE2862AC0976588106273795CC6F41596ABA09B9C59382DAB0398E95F75193BE0B14A7E45C88CA9B8186C9B0F0485A4DD9B4FFC361EB28D34EC1E80 -MD = B5780308A21BCD05B6179AFAA7EB31582491CF11DC9DA98B42CC0B14FC86978E472EEB54EB5446E04EF3FCF9D15A6406 - -Len = 1227 -Msg = A12682794B203ADAAC278FF0FDDBA860CACEC00C1CE9A1D4577E3D7EEF99B291E306189DCDA797C45D643C1E9542AB0A16C9369286A1FDB6AC4D5C1C213973F95A468DF114BC7FAD9EF3118CBB8312E4685FB6B46ADF1AEA568AFC69BF805FA48B9D25064A98F3C2961ADEE697250FFA4FBBAC491D698CD46BEF3E7995E3416C405F75062D739631E901670BB3400BBCA014FD22700919780C20 -MD = 4708EC2253E27A270A575B65F1BE20C897F57274B272B5810E7A8332A51016DD64956435B1829FAB977216F431305E1E - -Len = 1228 -Msg = 6FE5239D775677E62348DC46DC379F70CA024DE4A4744D1D6070F6A90F26F1E1720D0A9FB31668E41C8CF350B7EFFA2DA0CD1DDDFC8203011A80CD325259FD47E8E2CE329284D54639C73F1AADA1E034F291505D672B979C94A08022EC15FE2241C687B8E2694B4F108A39E1DD672F9503E3A3A99B95DC87B8BF74A95B332201A916CBDEB8182D3D60E6E482FF04A3EA05DF548595D487CBCCA0 -MD = A79C73A79253F23D523B448C39A13D86C0384E493E1F39B7C7F3323FBC608ACB338B1A34A6FD78FC8A9020BDCD33F129 - -Len = 1229 -Msg = B063F65D94AEA4383850A817286586F22CE3EB09C7EDD293EE8146BB8B2706E0F1BEA7784B708D6CA004B28ED7BC4E3E432A76A4A644BEA920C6EBBDABE3333C083EB682878D7C07643FFEF6E50357DAC346B2106DBA30E1288A1886D01A7F3D2BC970ADC5AD33C5C86212544F692D4C56C83F448836D79B9882E7F85DB38AA3E07AD0399F0152A08A08B6EB4E5CDF21851C8A7C73065B068140 -MD = 3EAA4CE538534BE258EBEFEF587A86C54373E9EB74BF6294B32CB6F1CAE16110A1C1CD60F9120D3CB80A1D9A2796A5B1 - -Len = 1230 -Msg = 48A2ACD9C115E1AEC54BEE539F842ADC43170FF60E003272E9E471135514A50F855094BEEF742A175835BF1102B747BDEFB149EC234D81F2BECDC17C079ABF874C3CBC4741E6115F34831BCAA7D4D954EAEF78C04C640EDE7931B1AC63BF8F665CD4724886487FE13F68097583461B58E88EBBE815F141BFD3C7BAC974D462976234D3706884C663A9ABD6FF86C046281446AA07317F36CF7DAC -MD = FEFF46F397054A3BDE02453F5418DEA598FC29887F49B7C40050F03F30C093E37E4A834E4DDF74309C6A03FDD0887502 - -Len = 1231 -Msg = C6810F0B8436125C00646A67D9AD7F1689821E3B0F02BCB47A3DCD2DCC292CCA93170951FFA4BA6CD0A533C5889BE768CC82FAB0AA7433AD928073894D1EB21DA667F49020E3EECD26234FC5EA28665BACCBA515C40071CCE0C139281D8A5AE4D91482C259C15FAA9794E699880E9D48FA06C71968B2CD34448495AEF6C55506EC96E71E6326823C0EA399060043B0D5BA74AE64B6F14797199A -MD = 18FC58B750FDC6864687F662DA4AF85179824F19567D21B4A81515F3C9FD6B380E36CFEB9DD9273B3F643BAAD19B72D0 - -Len = 1232 -Msg = 51B7DBB7CE2FFEB427A91CCFE5218FD40F9E0B7E24756D4C47CD55606008BDC27D16400933906FD9F30EFFDD4880022D081155342AF3FB6CD53672AB7FB5B3A3BCBE47BE1FD3A2278CAE8A5FD61C1433F7D350675DD21803746CADCA574130F01200024C6340AB0CC2CF74F2234669F34E9009EF2EB94823D62B31407F4BA46F1A1EEC41641E84D77727B59E746B8A671BEF936F05BE820759FA -MD = 44E4F77C0D7BCA6AD57D334F974BDA8DE2E08E104F14A8713280CE73897A945DC23AD058533B85750D9DD9D2D7B5D1AF - -Len = 1233 -Msg = 5CEC4FED86E4B4355F1DB08D3BCF6C9E2BF3624935F49F69BFBF10FE95121BD62AE073AD191722DDE7F015C3C19F9D3AF6FFE2D767CF0A0EB9FDB244167182D7ED6831319D4984400EEA1DCA41CE0D27D85420A59C68C54EBDAA9AF331FD4B7C1B8C118C2BCB2D963643580240653522A1A1E42FD8D941C886FB3BD8877803FB959F2A851E9834192C4B93A64F2DF5E268EBC12CDF8E5C0EEE9200 -MD = 1EDDB6AD4D1C4389AD3483F4697E71CECAD91D4E1E23021728E40C2E2D66B540D3D72B2D920218B5C23174D3F5B467F2 - -Len = 1234 -Msg = F1A47FCAE4AF23100EAC7E8CB58A24A00E61B1E668E86EB3391FB1D369E5EEEC2759F39AAF9F2A10EBAE83970E75007F8625B3FC95B9D38E927D5AFC55186F3921E93727E4C38E1535ACCED7F697926AB2221D3B0873667F9DF870F4A6F376EE5E75C0A5DA919FD4EE923A488B7F6A20BE349A06DD19B4C7327ED57A7168129732A3BADAB7A3DF08A186E677838FF49B7E7BE57270F8FDD12EF4C0 -MD = 724A318C4F18091BF4684A43391D14395589DE96BC1EC060FADA2D065B8723A7229A7460CBFAD1F6A4437617D88E1583 - -Len = 1235 -Msg = 9C9BC5FF6E2A46A6DAE4D51E6FB46CBEBFB3E308F00F6BDA289E88FAC4CE4CB51ECB8C9685450226B8AB2B5E567BF49B3D04397AFA383A08185FA86F55DB6FB88ED8467A4BA95F69ACE83C955BAF5E616B1DFC73CE2EF6D5B696AEE81C9D742A8F9699704FAE2FD370740640A822FD2DFDE1C7E156D6D4B9E6AC6EA2F3546ABD60F0841BD49EAA8B8D26CEF0DF273171EC9F20D2E1FFFBE0E9EB00 -MD = 131F669A81B0F03980DCEE989FCD8C043EA575967CC3F7B4B544ADE6C02B25197028D351E0473E178A4079F4FC73B358 - -Len = 1236 -Msg = 6BC7AFFE4C66FA084508F7343E698EAE4A74EFE0A4E8FEB2F83AD82C01ABB999D07F6F3082480743D309841E4AC44BEDB69CBC6A082505BCA690BFE52BB67FD9D6CF5C37D981BF8CE5E6B0B7429B4518094DA9604BCC39775D63CB49E2B50C35D12D78C5717142710AA48C7DC4190B2D4C18FE53ED42B9DA9FA71E9700A9BE0B6041733E17313C00FC309655EF4476421E4061F59EB15A70C4FC40 -MD = 929BB8B0C94F3BDAD5BA38EB845661DCED0FA1F14EF9B1F6B338FA035647F4287916F73FA7968624170499ECA248566E - -Len = 1237 -Msg = 29354E6F76ACA48E55F1B5D3169F02B066277DCFCD00230340F400056852F7AA53DDB2B6329325643F40A5E7AFC06F66D7AE2B2A08F8F142A929D0D21AB8636BFB32528EB928966798EAD25140A6B3FA2DF9024125A013189FC79B43F2C4448BCEC44C6029EA4CD4F758F23515E4FB327367069BCF55515283087F32BAE0A8C5B8F577AF52FEF9E084453CA629DAED5A36454B0BAAFEF0C15CF7A0 -MD = 5B8B6C584892F306D211EA2E03DD72ADF1676A49B41E0B2B676549436F00B420CA56F3F7324374C5770411C453F336CD - -Len = 1238 -Msg = 626F397D0260EAB42C6EF7098A132C01F266B7BF8B931B7DC9B386801DD1F56271B0B45E1C36B7A69C29F53B05827944DECE0D4BF50084FE753A1C471F4C895905FBC35829196B9539A4C395F5F819D37A248AA3C1BC4F42BA4C3B09A5BE323BCDDB0A14E7AFFC2E2E039D69266515727001D97E585155B6B1C5A94B9A1CFBD9B762B38DAFBD956125B9A0FAF437241EDA5349C2D3266DDD1E796C -MD = F9CF6BDC74A09E4FCB2DF2AC4F9CDF45511E49637BC1C3441575F8569AA6BF91254C473BF8475337A1DA8627A906AAF2 - -Len = 1239 -Msg = C8356DFF2E7F57914AAB911BC03DD06FB3A90EC2D10CFD003A28FF8673230ED6B972FEBA869E4F7DBA1F07153582751FBD62D3B7D99236A09A5F0BA4252E35CDCBF87D6B36D40EFDF3EC5A5AFE70014717F2F730C1C4E516908387FECC704E2F17C8E88F58FB4B1D51A17CE63D45CDEC2AFC6F2CD645D63DE0C5D62AC280A75881B00E76E72C43D40840A91AF569398BDAB704ABD85F1DE2C10C76 -MD = 175049EEF08AFC882A3B9C63F3CA5E7980FFF6D959A083051AD2658D80B88836C5A3943812B18D563D8F3B857A8AD5FD - -Len = 1240 -Msg = 83599D93F5561E821BD01A472386BC2FF4EFBD4AED60D5821E84AAE74D8071029810F5E286F8F17651CD27DA07B1EB4382F754CD1C95268783AD09220F5502840370D494BEB17124220F6AFCE91EC8A0F55231F9652433E5CE3489B727716CF4AEBA7DCDA20CD29AA9A859201253F948DD94395ABA9E3852BD1D60DDA7AE5DC045B283DA006E1CBAD83CC13292A315DB5553305C628DD091146597 -MD = 6913184FAE1EF9FA2D57B1B7BD586D51DE9A5F387037266E7B4A83F4366498FF86C89934C05332A7E641149EF627FA34 - -Len = 1241 -Msg = DC77D6CC04036F3EADEC0A3F2DB83F877CF24A2AA319A804C018840956F50B3830B8900428BE0505AE0089466A22845952CF8F4192333ECA1F4243434012DC5B833DC514ADA93CCE39AF280C961746E3DE14E5B1AC280911C31498796728DF1CAAD96C4B0C9D907773AF7C86A6A5804B40AB86697FC4BE83E0CB386D14BB872A9276203256285902DB42B05F71050ABC71ADE1E06D37F4950CEF3B00 -MD = DE4C2D3BAC28530596B8F5576F834B4004AC01F15D204438B23729370EC719EA1B42CE790C07AB513FF1E18E4841C42B - -Len = 1242 -Msg = D57982D9B0D4B3D9B18117EC323DC1F654ADD71AB06440C77C49E05F110F82AB974B5C22637F6A1BFA579B78DA05A17D5CCDBC2EF464970414779448545EF2410EDBAB5D93FB8E85C6C15C4D5C4182E13A07C8B1CB016A41298E6D6512DB94606F8C843A1F611824BCBBB0461B161B0AE0D6D5B9B80720E10103FB5F2DAA3BC7A16CA73C36234F72C8A5F7441D86DAC1AC3436743C8CF817570C7640 -MD = F3DD1A2800B005531010E5AC21F990B13CB1C64C0105796D51FE5D01076AF7067876D8221871B22E22361EF0BF819DB0 - -Len = 1243 -Msg = 162F77C5AEB35AEF23D128AD0AC9685C204176A0893FD8BB45274B35C2D7C9CA4ED1773632C9B2720B751E73ADF5FCB331B9DC4517805457D1C22E59AB1FA4A26FFC5F4A22BA0B1B1D12A047FA81CEFBFEB9EF20300ADF43DFAA4CDC468F17E89179CDB442AB24A61BB693E6EAE09073FD410E7D0DC3553CD8B3EE4212EE3C9F90627A35217EE3A8B0505D688B574CD65B7198101ECC065E3991A520 -MD = E2CC90CAF10EE3EE52803DA7420C8CF95DDBC6B1EDD352746572EAB26D43223FFA909391F41E57B0938E623A120C4985 - -Len = 1244 -Msg = 099E4A3C983332023A43028E13F12E85DEEE45A88E8BBB4916729029F86BE3291475178DF24726684F3BCDD166E8214B9342FF80305707F72BDB86005116B9741A8D4F2AA953BAA0294A1759654D24C32C311D0D81F077B9086BBEE226A93E9B906553E32CED52BB92B427840421A5B711CEC2A2D07C1CFEDADE4DD8CE5509039816EB54B5210A45B088E4975E99544B22E2A59F43E767F33B5B05F0 -MD = 01A6C12689BABB5D0716587DA07C686E6A436646B7E58F57F47B90E3925586C3E1AA12355F02ED4C7E5400410152AB7E - -Len = 1245 -Msg = 7B9B005E94027DC151F29B0836D4F2E3716E11EC9E1B0875DA9581F3BFF5F412E22AE3D790281F547550BFA6EA2188A976CBCA567C5A5327DE7BDB4229D48C253B0650C3B518E5ABEFA5E1F7E079D38BF18F1A13500105F4D96C4A29002203D18047568FEA183ADBA3C1D06576AB73FE88CE704495204B7B31D40A0C6D09AA6CF65310DCA730A5488DDB0D5EBEB7583D75A75480C0B06C0EB1C48CB0 -MD = FEDC043D9C4BF5456B673ED6ECA0D7B65619E6F3F165D4228D65A8655FDDED3356E05DF1884592FEDA786C6D6530A1F6 - -Len = 1246 -Msg = 50FCF726597FCF26CDE79CD42D68C338E7E26299D0AE41EB2B87F417409F65C0FAEBDC4C95D52AD3777E774E8BF982C7DB1B3CC1B43BB1298463BFFD061A5DE2162DB8610C747D41E71BC4A49414205B56B1D86FBB81E74039DDA4FBD84316E2BBF7C9F2599D340A2E86CEE58BFEE5D34A684F1858822BEE5F73193DF8C46303D949FA8E962789699C15709C74D702FC96C5A3B82982370788A74BF4 -MD = 9BA61D55F8FD8573C375B8AC15B37A4FDE44898007458592DD8E393050AEFEB4AAE6442EFFEF1C1A5F80CAEFF8CCCD43 - -Len = 1247 -Msg = 6BBBF4930A96E1A18417FE5A539A36AA9A3F70E055E359091E5ACBCBDACED975DF2BD07B770899C1888EA4623E70CBC0D9CB398EA1FD9BC950F047EDFD478324DB645F7A90F81EA98E38E93A1326558EFA8813FDE52DD073998046A3AA2AE3CC39EECA6012DA5AA8CFF1A4F3E59068EC163C75EB56EEE8838E0E2E03FCA370E54F3ACA668DC5F77677645B7915A52C788EBCC9B731F91CD9A0990834 -MD = B9889AB94B68E46E711167AFC9FED4ECDE1AB06202973D95B70ADFFFE9DF1B60DAB66D465167B3E6E70436BB32891D81 - -Len = 1248 -Msg = 2BE9BF526C9D5A75D565DD11EF63B979D068659C7F026C08BEA4AF161D85A462D80E45040E91F4165C074C43AC661380311A8CBED59CC8E4C4518E80CD2C78AB1CABF66BFF83EAB3A80148550307310950D034A6286C93A1ECE8929E6385C5E3BB6EA8A7C0FB6D6332E320E71CC4EB462A2A62E2BFE08F0CCAD93E61BEDB5DD0B786A728AB666F07E0576D189C92BF9FB20DCA49AC2D3956D47385E2 -MD = F04FF5AAA68F2558586D2748587DEE3CF28BACAB5BE5F887D24A068311BA2D9E9BC0206C2706B9C109E7162E3ECB6346 - -Len = 1249 -Msg = E5C9D107E19D9BDB989AF870BE40F1B6FA06DB3DD70E741D2F03198DE02E58E2A37203A7E766A8B918836039A2503062AA3D4778D1EA931BDC6E76554FC965584E0497AE75627686E10E50DF6302C2458E087AD4E8F0ADF22538ABBAA431703349BCF5C026C30BAD0F42D93C64D2918167E161A3C8A1848ACE16F56CF5DD5B8E0796ED50805346ED9AB04038E91676C92BCCE7FA74FE258B6D01350C00 -MD = 8E775B5F0295D804B1B2ADAF8B126629E26BA3D82F6E3253DE0F02993DB1179B7D825F723931BC6A95AEBE26230B31CB - -Len = 1250 -Msg = D43686E59F554A3045CE43C0457D8EA84E70AF4F0C8133905C27C85648E6EDCCB1ADDB46AB7E5AF68B2EFD6C95BCBF9281DAECC1191A416CAB872001F347B66C5658F0567EC86D2CAC8EC531F32EBEB8D8CCAB863A30B574F575F227452BB4129C84C6050F693F0EAD880B552CEDB4673AF621AC9678AE17BFE2AA2C940CC54227662130E4ED37020409D308CCF72270F74DA075451339BFF8B27D60C0 -MD = A965FF303027C124B36D174DA00C78A905209D5EFCF210902C0760DAF9CB5D367FC3743D49BB224758306FA21A951AE6 - -Len = 1251 -Msg = 309D9918CD4DE7ABA6E69619B8C0FAC749D4B96B71A58739AD3E3379DB4E6323ED7A3AB5FB6C8BDE28A8D362A4DF86CF9C418688B06394211A87288F2D3BF7BD60013C0E1AA153B5B94A6E2AF9C3964A561336DD115C74AB25B2A63E4B17B521709A207F41EBA5E412A65FC8CBF1C49D1C927CD92482BF6C2D22BDDE6D8C21DF69A9222BFB4B5BC57E891BE4DFAA41D8B725F7590F5D6A07CD0C0E5220 -MD = C32093D5184F6BFD64E3B45076B87606DE0B22B3C7AF5BADAF497C02C5D706BA8659BD45195FF4C70179918928121CEC - -Len = 1252 -Msg = 556FB9FCEAF608496C7681F31E303E911CF23E3D436EBF7997FE695A567B190409ADDCABFAC6C044E9B3BEBCA670CC42809B930DEC67BDBBF264D13F15250196AD387E0E51A754D3377284B77BAFD740529503BECAFB2399AADA3E7394EE46A997CE3AFB26CC0E8A8D9D616E61B786109A14D1E9414AEAFC8F806553B86194680F4D17F97FF55E35D5894EBE177402BFE5BBD6185C5E05FB4EFED46C90 -MD = C9DC43F4CC76B426B5AC362FA92AF72DE8862EEFBB20694EB7B30B2B3F24E8DF84ABC9E44AEC4B693EE4E3D96386890C - -Len = 1253 -Msg = E1BB4075E498A327DF0160C8101EF6983BC938D67C47AC3F642A00655914C4A99D7CD0D0D70C81DBA014EC7C8A7350CCF30ECAA24F481E7064C8E9BC8CCF02AA5B93AFEC8DE3966662426C6AA20051CEAE8BC3D04B7801591FBBC6D41C1185C510BD153D51E9CF64F0458BD84E7344C4C5AAD4B2C05C8B9D9416EAEFBC91EA7686B5B5FCBBA9C913F4A06CE26D4F041686A6C800263BC4EE612607E6F8 -MD = 4C71D734067D8A73114A76B70D786BF052B3D548F733895B73377358F9CED6972BB2B211CA80002A3951ED1B57451072 - -Len = 1254 -Msg = 26E8F3698FD7145A13658E12E46B76144A404387E1FC39AF205532F3A04DCBB5C4C111B6B538B45B66B36E2FC683D2288EF30E5ECC3B557D4849E08008AEC60DCC565AF19C9418C5DBDD68D1727E8D08ACCDB5382F64DC0532B866A6F7CE4E2396FB4E2FC4720B0596DF649F7F9CCD88E95F4B75890945730C60F4FB5D5D6ACB54B463B7A817F241C1B3D09CAD036093588B69A07DE5928FFDBF3768F4 -MD = AF50B7CC2B080CC3781784248B8894FCBD4FAC5B35E3FDEA137C3C8C24BD8D55F62658BF06F0EE370EF6167E1DFF9F5C - -Len = 1255 -Msg = 8161F4946F076CBAD3E13E8ED4E287CE35F00DAC4E7870E3FBD1F3EEF3C380255FF4A858400B8D035C6BFC6C25D17AD0A5A8D625E1F8F6116A9C5D40CCE992806FD508DFEC50C4841E4D403B788A93BE86F8E3687A939FCC16CB6B826D4025FF572545945EABE4B144D10A669C4B47F368F11093E748C559142E2BA4B007321DCBE166EFFB5C36306FEDD98D98ED5A6F273D56724C8B611B802314EE94 -MD = FA25B5E40BEF7842062368356549FEC744A4776C837EFB5A7ACC7B3B1D15CEA02AA811266D365FAA6696028CAF4CD69B - -Len = 1256 -Msg = CA76D3A12595A817682617006848675547D3E8F50C2210F9AF906C0E7CE50B4460186FE70457A9E879E79FD4D1A688C70A347361C847BA0DD6AA52936EAF8E58A1BE2F5C1C704E20146D366AEB3853BED9DE9BEFE9569AC8AAEA37A9FB7139A1A1A7D5C748605A8DEFB297869EBEDD71D615A5DA23496D11E11ABBB126B206FA0A7797EE7DE117986012D0362DCEF775C2FE145ADA6BDA1CCB326BF644 -MD = D4B8CFB2FE5B63BB5BB678B98B465A2DFD23DFF498E778EE0535A5C077705AA2CA2F039832BAEA0F735609B3E4E18CF7 - -Len = 1257 -Msg = F0119C8BC95F23CCBAB4DEF542665D9BFE015AA4619ADE158F1D21FAC3C4F7E3D68E5EBD303F920B017DA561F6AA751235D55FFAF241CA8759E376B0AE60F04AC31A591E3DB1F58BF4850329BE199EE1D6A750792CC3B7839B66C06753ACE50786223E0DD16EAFF479B89BE123C1098D8E6D30607B1FB9792F6D86608FA26A1D9214BD619D614FF4EC326EDFC6BAF44A565061856A6A796C5CCFB021F980 -MD = 58081FA7AAD7536D87F6948D8D4D858078F70DDEB4CADB30355A45D62F804CC1E24967822111158609693A0CD7D15DAB - -Len = 1258 -Msg = 21A57777A8B0B5501280BC7717E54E6B0F8601B8362BD3ACD7C25798FE78A76515B10651F736CDEB08D9AC70C05D3E12BBEC98799C7EA021699D852B4C1EAD48B301BC6C269157422EFFF2B7749CF0D19E2D47F757E6A56BEC71DF86482EAD78E342944114D3D7BE2D381B01066FAE0FB328AF0530CF29A1C2479922BC5E82B7D1108570262E55555391B85A347CB186390D9476247080758013E0ACD080 -MD = 8A9BB1B98BE7D08EE08BBC37594B20EF33031EF9DBF8C8B2FCABAE8F40BD99698B3C16C2371E017D179B48EB0DF458A3 - -Len = 1259 -Msg = 0E7BE48BCB01238A181A4CE2D5F23BE4337E96DDB7CB9504250209886AA050BE6007E594E14E58B64ADE5B9FB8F90C7CCC9B5939B1CAF74174BBE6A554BD40148AE7CA525C4DDA1CF0CFC11812DFF12BE121E388794AE8AFD75615475E9D2C2267F0E332F298D17DB1D597A97DBEDFDC34594E00DC107839A3AF455C1CCA44597A53A314ACCBDEFCA82D123EE53D0B6663BF3395311593B0265F87131020 -MD = 68CEF9647ECA3C4290AF2BCEAED363DB43DB3D91F5442D069C18813F76676D35AF0399116AE2A1565CBF04C3001BB5D8 - -Len = 1260 -Msg = 6C38EFE88285521063F33FE108162D56EB5109EC0DA8AED88EF76AD7B88BF1361D135ECFE67CA1069FDFE1E0DD7A175C0DBDCBC3B3E55388AF3A866AB8ACC756927CAA142E2A4AD6805A616D1100B51E9B1B3AD04708BBFCFE27E4F8BBFAA823A57D127B6FF5359DA704F61F96BB882E6FE33C648D5855C725B092C4E4E0DAABCF6BABB56BE3450C73C3F07A2971E16E1954B6E1D17E92DC5795743FCEA0 -MD = A194862EA704A4EDCAEDE35D9C107B29FAD3A39ABE3A3CB6AA5B551F67714E47C6711791EF6781FCC313C66F2D15C7FE - -Len = 1261 -Msg = B8BC88E9B1A8DEBA56DD1E9B418D379AA11252E609ED52AB42A67458D87E3F2D60AF36595D8E33E317701CAE5CD58557C20617124068EC55A7096FE49480E625A51E987D73729FC4C531B7346ED8391AA3F0D6F8827ECECBD74C7BECF9373E692FFF01947CC11C92CB619244E0EF3562A96A17030414F44FCC35B2756A667C003C88CCD1AB31992FC659552DA1BCE4F1807B3745C349D3C96B38CA1C93C8 -MD = A8899779A36A9775AB5AD829099FF74D82FF044B228F604570ADBB5BC4280EA73A144A36D1ADC596AD2A8A6C6C460261 - -Len = 1262 -Msg = 3FD3693A5376B0943D4D99601D92B3C55CA7B3889E02431B7CBEBDB6D7D886BFE7B057819E14764FE39B828D233FE9FF6B7CA010965F8F8777A80393A0B86E61379C26DA68A304D6A47A5DE2C029561CDB4CDA5CB471A84BB7358D8EBCD50521C6693B138348388258A032DB48D067FC0BAAD8266D6A880ED1B8EC9C559C26E97C6C2037D5D51F753604039461E26D4683382BB2EFA5A13E734E2CE90B90 -MD = 354EAA8FBC86D91E3B4814DD5E463CF891BEEA9BA73783346D15DE48B6A3129A3D65BD6859DBDF16B7CEB4EC63992853 - -Len = 1263 -Msg = ADAA5A1187FD564FE9FBEAF43E48D41438B609CF80694F3E0872AFC1F172FD18E4D1FFD96B674B4A765A6D1A63827E0ABB708EC776B9458F5EE904501B096F625B7A47E7D6CDE2E19009C5C81DA80194BE8EC613F0E038F8E0D39A92851774729A25F00068660BD25CEF0E7F734056D5972AB36757FE45F55F2768DFA29038127269B46AC68079A26E0CB8C52815E22BB61E32E48A78FDA6A006557D580C -MD = 71972A6AEFFDE24B5BD5C858CFE255C750AE451CD818A97011B6C24A1F4BBA1504760B649FAE7FF5DA7E9128F0363314 - -Len = 1264 -Msg = F76B85DC67421025D64E93096D1D712B7BAF7FB001716F02D33B2160C2C882C310EF13A576B1C2D30EF8F78EF8D2F465007109AAD93F74CB9E7D7BEF7C9590E8AF3B267C89C15DB238138C45833C98CC4A471A7802723EF4C744A853CF80A0C2568DD4ED58A2C9644806F42104CEE53628E5BDF7B63B0B338E931E31B87C24B146C6D040605567CEEF5960DF9E022CB469D4C787F4CBA3C544A1AC91F95F -MD = 25B7237DA9D40DE047D41A30BD37155C0F108D7296B09079957D4EE31224A4BA256AF756D154878910C158E49186728B - -Len = 1265 -Msg = 91440F1C8F7CD08B2FA70D334BA56F12FA0AACA189346291DA0B69F58BF65869DB2CC98FF82D56B4F9EB9106D4CF20AAB00DAC3669DA29944DA8D9D23B797D8D2ACB22E5D0127473E8DDE2EAFF6BE3DAA7FF7FC7D9F8DEEFE2634D8F3071D196AEB24DC1D9CDDF4D865D794BF120CE78B20F06124B656BB7CC5172E87400C50E6C3249E8372240ABF5A8814B66C9C3FFEEF2B71BE2FD0183BBE6DABC95AB00 -MD = C39A32A97FBD80D52F294B31A0EC50FB7DB580B967AB7055BF39AD846E88E65772E051991BAEED8CA7123E69415DABE7 - -Len = 1266 -Msg = 8F66375F8723070CABEEDCAC50B0A986B133E4685F68FA60E36A61EA0042747029DB1E7672EFD41833674EA9D29E30BCAEBF74E23D7C715B9963F78489692C3EFBA4116CF30193E74926B1FF7A2C6465928EAB794496D46101F45D26BF1186FC66CE159AC50A3E2E379A7981DC6419F29F7E63FAC2751E696C97403BE37C6B01B34557DFEE5B68FFAF22071F0466576016334CFEB6CA53FC40BB1C5DAC9CC0 -MD = 1EC47554D5C727030FBD4AEC123001AEE1B928B95E77B0C8337445927A3C06765EF85070DBB6D339B5D0BDB3F15D4924 - -Len = 1267 -Msg = 0D030E023E6C3B59E25BAF6023F1CF3657C566FA66C0F8BCFCD04F3163AFF6C2DBA0661132FA477F3D32C514F53F8E89B316DE84AA55A4AB38C33084354944EA9AFFCB8727AED5675AFC52EE6201961C15B28B0CD38948AEEE51F6E17C172946BC1B51ADD5316C30703CDFDD7FF87A7612CD576E7FD4956C0283AD12E13A4FB548509526A13B6A867353AE959D4E70B31959097BA28E25FD04358EBC568640 -MD = BB2954C00E4C5E60150BFF9F20E652C22C7B3D20C44E6B10899863B7EB92D6A7096D5E4C1585F539197C06E0F635BC4B - -Len = 1268 -Msg = 99883206EEFD96B8ABCCEFD8872185AF185079F568314B0AAF55D2A5291A5B1AB29B9D25839A369F0260D55E29E2B60AE448393BFCBF18F8D091A8C1A0739F25EB2748C7A45BE8F88C9414745CF3C236A40BB1AEE8A85B53BD088684BF4E7DD1A9370C1BDEA575886295675A01D03FC06A7E01100F03436E5A3FC224DFDC6D9E8A00345AE14FCFBAEAF428A11AE4B4BE9B839B50CA80843435ADBB964A4F70 -MD = 79CAB1401688C1A1915030B87FAD8160435E0582E383FD0ED5448F95BCB237A0D7145F060C5A4790BC4C8772BA9B55CC - -Len = 1269 -Msg = A6B3EEC583A09261D745849CD236679E2F9795123478BF76245F5E61F00EF6FB32497499B967CD550126BE3D88B4BBDB55EDF14AB745654B70EEEFA79A26FF00B6BD86DF619D53F72DE374965F277BFD87CFFC9124CDBE422A2AEE0A784D705566B78239A66D321F4FCA6DC11DC553D26C7F57EE05A86166D4E073BFE54DC6525E83F739C70DD4CF4CD07000CB595DDFA749D9D1D5D3CFC0A4CA2F5ECC7528 -MD = 20AAF42B3DF58E2BC50212B81C4F534160BCFF7DC81B00A0D7259E5D7F734B4C268F4A65524B2C4837F5AE43294DA06D - -Len = 1270 -Msg = 817F2D641D62B9A54D78DA451D7743A234B424D1AA73D173306C0F66D78970A8BC13C87A9BB24071B0BD9F5B5512A7146C4EEE5BACE25AE3B9F25038592EEDC07B8CCF0FA262EC2B091C0CB15557E5A2C6F9AFB264662417E570C0CF37A770B963021A60E7D5CA2C5BBD8EA1E01C95408CFA335616F253A489F89DB1B49CCF1AC66AD4D7D4CCFEC6719F8C0B1CFDB40CAF5DB8BE02E32B516EE89682BB6ABC -MD = 7D8A1910BC8D45E7B3CD80E845F32154EA530244E8C31527FDC774CA8C68E74C6040F7FF81249F99ED72E9E50679FD3E - -Len = 1271 -Msg = 825BBFF42A57069513C6DE0DBD31CFB7C114E42F8011892F9C53E41DED542F88051A3219007B85C08DF9F83E13B4B836B83A0E39AB9DED55B4026B85A0789E166B27B94D64938F9997BABAF6DB2C0DB2C680FE7D094708F8A6309F4AF8CA4F835A09289A6BA63697D87C730BCC3794FA3CD5DE836E64E5C4DBFB024B9C230C6E3645559F38FB97026DFA542E04A5DD50876FD844E95AF2E3CD2C9C3F8551A4 -MD = B4E2F5A29A628FBC0ADC47034331B646701615A41B8398F2B1ECCFC3B4F56492D4C62ECF940A42F0220596E6ACB86A9A - -Len = 1272 -Msg = 25B8C9C032EA6BCD733FFC8718FBB2A503A4EA8F71DEA1176189F694304F0FF68E862A8197B839957549EF243A5279FC2646BD4C009B6D1EDEBF24738197ABB4C992F6B1DC9BA891F570879ACCD5A6B18691A93C7D0A8D38F95B639C1DAEB48C4C2F15CCF5B9D508F8333C32DE78781B41850F261B855C4BEBCC125A380C54D501C5D3BD07E6B52102116088E53D76583B0161E2A58D0778F091206AABD5A1 -MD = F41B2D02D321F4BA106F931EE27D3F74E8D397BACECB0A1FA90BF5C837ACEB2ED8F0FEFF07B7EBEA6A88D0CC54AE8E6A - -Len = 1273 -Msg = 53171F51D758037D43E75BC46D0160792E060C1F61A78922CC13BE9CA84FC9227404FFE6A3B054AFE5AF13D62DE8E6E5CF6A428B794CD6EEA56DE923DF662D54C8ECB3ABCC0E09A31A66B7ED02DC03D9B55AE44872D51A2A4F95756B9B611B87DB1757389F718BF0C413419C46BB9FBA8E7266FE2C438F8A4D8377F220B71C4C0CF3E7DBA8471CCD615BE0F49E97448BD2748FFCB47C46A508809E72F8CECF00 -MD = 0D428D7C3FF00EEDA851140275D31443B4C13E5104F781AE030604DC0A3857F100E05F49E1227908F741C70926AD0536 - -Len = 1274 -Msg = 8B766DA40380903F6A333AA1DD549144FCA246E2136252A5831859711F08BD02B449A1F85ADE21941C81CF5C70AE27DF71F797C3F3991BF7CBF64D5FE5E228E03A9BA275B6BA6B55C847D3E3EA01C011C2D623A712615D5804DAA36527174814C711623346A7B2E50A50C1D906AD2CD1345CC23E2A08161F027DEF1AF127A71A43D19C19034D99F3BFDB4579486E61134D84BAA14000A32E74B1CEA54969F480 -MD = 4C872077D7AED566731420E7CF4FCFEFF0B3DA802ACDB92045C68B84207ABC2BB43600AB7F01AB0A6843E31C76C88531 - -Len = 1275 -Msg = DEA895DDD527F9F680EB69D0881BC6308044D98E2A407C6ADC64DA9D8DE14494844063DF64F94EA19D94C7E5BBC528E3078E1900A92D2F8E44D15AB097C9974B10665D3235C4BB08D9E6C6DC5DCB281EE116A29B345DB2DAC736160E772D609E2F091B166F8A09078BE95656A4B6F17DA17DEA7A7D51CF41F318690E566F0501106FF3CE7EE0A0D2327202B23CE11D91F6BB5C873A41D3BE4AB4F6DD30D6D660 -MD = FC4CF8C11E3DF5C8984ECBA1DD94961807DCA0053B19264ECB09BA88404F22787CFABACC90FE8AECDB384EB9D0F9F344 - -Len = 1276 -Msg = C927E69503AE94F153360DC508B0E77682465E5B8365953A2C9626E2DCE4D875FAF1E3F3ADD70E34AA7EA6EA175D79A9E700D652BE8B7759707306D10FC33D1528D70D389E6ED9B8E0F8D478ACFE5BE223D4B791FED6AE65F363EDF4186FB088F69CDF394D74BF53AC465A3541432C41C7666B653858A7E6D06B0985C0F7B1176D1129DD1146357F847289A439E543E480F932B8602B3AFC754F540361A61370 -MD = 6E4510CD4D89080DCAE1E72F3F1EE7B357069FC61D9B63121DAA1B8DB5D5B1710FC174664CA4F9A7051F16CA53CEC5A5 - -Len = 1277 -Msg = 32419664499B391A213850C12E86F4FBA5B2BF3DADB0DC65D4EE9C9AD2710FC1419B4D4E9B85205E51BFD3CC0F6EA075C14DFCD1BD6800ED644FFB9EF737F1FAF9FB77E5621A5E15AF7F93D04E6D2DDABD71A032BE5BAFD0D0976D0DDB54DCBE79F192580BABEBF54F2EB6F421CE60BF939FCB8F237289A107B329C5F0426DE9C32303DAF98F3AF5F87C5A44EDD1083C6A2B8C045E8FD65B318304823C313400 -MD = 3BEBCD7958A9D06B69A69BD47AD93ECCBD2F3719DBE78FCCAC0C68B9FEA42C254E3BC9BDE84D0AA8987301A29B908CAF - -Len = 1278 -Msg = 470E65B3F6A5460C9704053896F3DC638C1D735F393855B28A4F5A76FC5A419563845B553EEB30E9057D777FD2751BD6D7863E7D881DA2C2698961396ABE2518A64CB8BAA1CAF73B8B5AFD9D42CF071973A9904511C81164D509F3CB7A4EDD89C7F79A6761E9CF2A600FED47EB4A225310544E0CA41B1D8C9649905324EE0BEE1A5AFB3F1B7D9A2CFCDC8B52CE611B10B088EFC0991DA73A7845964BC83EB794 -MD = 8D6E4A7D19849EFD7B83443F57F09B3E1C499857038AF2D727B467C7E177F36C1FE541BEB8DEE91F0D8F6720FEC83224 - -Len = 1279 -Msg = A4E9FA020BA2E03DB8678FB9F502FCE8E58EEC36CBAD94756E5566DEA5681EB48381C5DF545029B435F7208C69ECC279E993F56F808D59961C9822471A04F501EFABE78236B7D1D759F6D227F65CBBABA66C5B81FB88B6DF218BBA89024E4558719F005BCACC96FDCC4DBC2D4FA417DF849D96E3D0F4778FE2E20864DC058563527ACBC197BF04B692CE00CA4339A8B21745D3B54B88C22727287C63C68EAEFE -MD = 2220ED1B3B3DF3A53EDC65CED2D3D328D000FBD0C5692E002A1CA8DD6B48B2DF76C39A77A49DFDB0CE73A4F8EC9A7064 - -Len = 1280 -Msg = 21CFDC2A7CCB7F331B3D2EEFFF37E48AD9FA9C788C3F3C200E0173D99963E1CBCA93623B264E920394AE48BB4C3A5BB96FFBC8F0E53F30E22956ADABC2765F57FB761E147ECBF8567533DB6E50C8A1F894310A94EDF806DD8CA6A0E141C0FA7C9FAE6C6AE65F18C93A8529E6E5B553BF55F25BE2E80A9882BD37F145FECBEB3D447A3C4E46C21524CC55CDD62F521AB92A8BA72B897996C49BB273198B7B1C9E -MD = 9673A1A3535B8975CA0F512CDB0FDCDFB0179CE229E756AD70EAF1E5C3E1A4135E9FA7653EDBDCA4975AC18B17A662EB - -Len = 1281 -Msg = EFDFD54747AFC74789E3585D271BBFBFD2B45AB16DE6F960B8176F3E18358F106B148F585144020D6E055A35572EB7AEA1D4E8662340FD641758DF09DC5D7BD6058A2679076CF8AFD9440F4EEF8AB76AB23E2A9801EBD66190B742B0EDA0DB513E8B34133CAAD28D9A74E1B3F0A44622B5FECC6D88ADCB47BB590C8F2078270576FA8DEFAA7473AB7BE4DDFF9142DDA4701E2FBF30B0072BBD0E42DC761A5A1900 -MD = 0455BC1BDB0E0D5F1DAA9A6FD30F939D8BAD1C1DBCA611601C08ACD32B062E50880767FD7CADCF3D2DF7A6C84A23828C - -Len = 1282 -Msg = 835C2A951B9770857A5BC36CA40428294E8A7F3EE5953CF7D612349B7BF4C2CA54FDC48D22206E0564C9E42C5FEFB1D799BFCA4A90ADB6CDE24C4B5BF58230F85086EA86C5C7A3A58D2DF7BD7A50EE51812AB957F075D60316381C99D24121F24E3089190F5A64995A898D25DCAF6ED422AD5A11046C156FD2A9B3A901FFE9E86B3A434B9EF8E132D1CFAAA7DC0EB6BF36974FB02655D9FF7D2E6806FAD8F56240 -MD = 5130381147D31ED50DB871C6A7D33BD10D8158880C9CBD78DE18FD5004B61CDDEE45E63F7CC6468037AC1F68A5F5D3F8 - -Len = 1283 -Msg = 487BF06ACA4F8CCB9FBE64BED71AA95E8254DCCBCA59A391977CA1CB657D7772C8997A9513D46C6560A3B3208DFDEEF161F1791BBE78762669D6035654872DE662FB0E35507C3C47F1CD7C4FC48F429B610223932065724BC8127C938CFC687175E8753203C8DFAC4A45ACA459E6CFC1C42F9E686418F9803438875EE94A99AE0C73E65A4CDB070417A437734BC89A46B44A27F305CBB693299D5A80C8BD426900 -MD = 89D4ADA4B4BDFC658F9B40494A6C9C6BBB32A0E2C6FB14E7661A1443DFED1A3CCBBEE60872EE450DD0BC6F90619C2757 - -Len = 1284 -Msg = FDD4EA48CA09D3A4876ADAC2A22D6E016C6CA18A35ADE17DD52466242249EB8937B13129E6CC5CB7AF48307A892EF40B190BEC41523CF0E6EDC72215B7B33E6FBDAF475E0E2FA0E863E83727FD0256A0F943646286BECA53D8A1A0117E13D2D46376340873A608ACA2B3532A516B9CDFD23A78AF03BD47EBDBEE97AC9A536AFF8B494E1FC662E5E1A4DD64C284C16B510DCA8AEA7D74E5CBAC8BB61DB5A0DAEA10 -MD = 7DB593F8DC7AD27E512CE93D08D5DD02FDBA27B55315BB9505F12A3D4CC982378F55DA7B41D93F1CC2BC8DB11FC9B389 - -Len = 1285 -Msg = 97819B95462CDC009A37EF3C6A91169E111753FECD21364FFBF95987EA73825771740DF970A5E0C68015E819CB4670C752EADE35A1876638BAE3B7FA7A5441638F52B092CBB026A2C16B60FAEC950D41A35F2CA4EF4D6154FDC4EA58CC617E783EBEBCD55E72E05DED2D34D68EC80CD3A1AEBBD053331A8C9DA25028C0DCCC2B1FAC93B4740BA94B3B8F066EA9C666DF5F083BF864CE9E0E54CABF10A11D1EF050 -MD = 1E9E5452765E7FC8C658E1D64D3307B5ED7EF0C014919A14EA2C0011005A97B6A1C24B24101A061F7DE76992480CAD37 - -Len = 1286 -Msg = 597550EC49C64E81F38314DE7A825B56D0ED8B801394B4F6701100C3AB8BE122D124F7DACA5187DA9A1BB8AB905031CEDA2AC1F0B4644CE9CA283F65236D43E8709951B18C17D27CA45BA90B8EE84CEFE8E73EB209446D75DB554882A6DC0AC284B7A5093975F5B10409749BED474E92E19C7B479AB17B254BD9B9D3A35F0CC912CCE433BE6092A89CBC14C1F8D5EB76F370683039000D757FF5E06BA4A8820D20 -MD = 48E36553AACC7B2434A8D92C56769709DE79FE701445B790BC339686E8EC013CE9731174EA071F8C1E1CFDF9F686FCB1 - -Len = 1287 -Msg = E79F049F5F8FCABD20CF328EB4FFA20D4AD500FDEC6DCB9692CD294E1DC54513E789D4D76D6DD2B17542E131826A6AB20ECF7BFCE476334F6540307C99FC76CB85AD49442B36B25F0FC81279BB2AB0B27846BCB7E9038092EBC3F6E0011746ED397D8CE77B9CA67AAC8F01DCEA90352FCD8893C276BF9DBB76C78B5E217063CD8930314A5B96D0641D82182E2EA67E7FDE3DEC6C13B75DC65659B15E56E75B768E -MD = FE0BB5CB6CA05527960397720B76A9998001B205E20C3AF497123FE088A8D33099BDD826F85C49542F0A7E0BBA0CA769 - -Len = 1288 -Msg = 4E452BA42127DCC956EF4F8F35DD68CB225FB73B5BC7E1EC5A898BBA2931563E74FAFF3B67314F241EC49F4A7061E3BD0213AE826BAB380F1F14FAAB8B0EFDDD5FD1BB49373853A08F30553D5A55CCBBB8153DE4704F29CA2BDEEF0419468E05DD51557CCC80C0A96190BBCC4D77ECFF21C66BDF486459D427F986410F883A80A5BCC32C20F0478BB9A97A126FC5F95451E40F292A4614930D054C851ACD019CCF -MD = 32429CB1B5DAD663A0663E49033DB2290945019DF7E792CDFF3723EEDB88CD0603B3FAE0228A184F8EFFAC45112F453E - -Len = 1289 -Msg = 8AD7F2067E4BDC72F3C66DEAF459D1D15323EF79004735603069E1546806AA3783BD572E76EC472D215794537815ECE3213DE792C359B9EBD678CD22772C73708D3E9F83C3F6EC5681F96100365383AC1FD38BAB1A777F48F267EB877604DD8C3E9A27A4E42392858268E8215175ED1C9FA7F5FCD2887BE6658D804FEB5DAAC79C6DF26B90737C2CF48F3FBD0D6D87BF51C0925658BFBB91284C9158AA327BD66880 -MD = FB198D908D70EB58A02F191A32979AD0B47A3DB31D9BE9274AF6578EF9447F7E11C4598F96729698F58474366B45FBA0 - -Len = 1290 -Msg = 3C48158E1B2C890D8BAE91F9610D7E7CC3ADCF77FD18FED0F1C121D11234674C700B5545DE6CE4713B7C3FB79E20F11E3A709EFD942D9271B6FE0E5CB600D5ABDF178D27E37E9474EBDBCCBB3DE7C0F499E4E8CDC8FBB9D845A1E6DD89A0C28CEEE5CC74D5F90A041D4BAD61018DC1866543FFF1C09694F5717D2A2B876D397F7542D2A35776FFFFBC2B39A53AB06DF9E7B7E8C9F339495C8F31C5227B4DA8549540 -MD = 84A4199A6AAB3A320B67830824ED3CF939465531D3CCEF6D94F7B818DA6365AF16F7402A23664C6E1C24385CFDA2CB67 - -Len = 1291 -Msg = 4812A05C8906BD360455A99F2F968B8674591A55F7213CA7C5ED298E3B199D278BFBE27D29C2372B94648DFAC050CA869F875CD7779958FF3815402050ECF110AD4FB2FCA4622E13CDEF51F80526D8E3E7149E7A8E8874E0ED8B612585DE2C14546A2AF86B8CD892EC9D0C222B66E4037D417880FE07F25C8AC5E4BC02F3CF2DA743ED72EF243791E7927E3EF0DCA6258DE98A700AE53450D57EB86554494FEEBF80 -MD = E7888F1153B63F6DAC44E91EC55C66D9161CB502108BC0F210A1F17DEA03E4BFEBDFB5CEC7E04F0A68B40E4249B46073 - -Len = 1292 -Msg = 433DD44D7C672F2E15670086DB548C15B30B92219C8925685FFC5D97EB4EEAD9A76A613C382A399192CA8E6EBF31743E279C71BDB749190EC136268BC008856C03398AE0DA550E859F47169E88F950A597F0560336D7E5C58BFA20C0E0B57DE4B902C6ED1E99868E2A48FEA544DF47539B215E9E1DF268F0FCD4DE3215D1A8AC4C215D896B041FA24C0F8639AE2A6D67D1AD31BA0D1A1DBE783FECD3B49A1EB3C460 -MD = 8D234B21C4623063FAF09ACD4D773821295683B0ED30E465510740B46B7CA7B99B193C9DD7E017F4818D63F3108E4BD3 - -Len = 1293 -Msg = 3C2796DAE592507DC2AE56411DD6295B8517F0F009CEF9ED8C7D52024A4D6744916935ACACCE820A698E837B51C96D79501EE3662FE918F441CCAF82F00F6D0DAC0EC0F900E50A36BB93DEE19C319757D39B46866590F80D451681390199E030472968BC6616E657781EAE0F4B97EEC0995BC37BB7CC448A7FE441D05B70E86E5DA8C7854ABB45318C6DD83DD99A94CDA9F3B82B62F1962730E1CCE1F7386CF1B970 -MD = 8EC2A3829A278B42598A97D369EB204C94A8716B72693B3CF2D29FD5CD69BA35EE3B2A298DADF1D6DBF1B1F6D62A6DBD - -Len = 1294 -Msg = CAE6C210EEA071097DD53581E47239AF612213DB39225EC8C03D62D3F1BAE63D69B0826F9FDB540714A11D84E43786D4E1F984677E30280E4EA2878E424D86ECF3EAA986F08CC24145B333476877B0072660A3412CE92AF94A4150A98AD00D3008A8B78A00222530DD797E020EB259D25586B905FDBF7CFF103B972ACE04BE42B43CA538CB426515A7A6F86E27DB0D8D5D0E2F61B103D842D09928F4C56F59CBA0E8 -MD = 00BA29789A12EE4C4EA156BB85C103747BC974BF16837979944E0E9531A79CA64CD89A331F780035E4054E7E915B2FD1 - -Len = 1295 -Msg = 2022A89E86B267A920CF6E6BA856A8542B9DF1CF736F0A0B3ACCC09BFBED6F04870017261A29DA12E61FFBDD68F7D55D034CEC90A1A31AAA69149D185356BEFD2D592E8126462142AC330D83075AC661B46A73BF5FDF0595B3E311BE13140C4BD041E1713689A7FAF7F210B06710917BC79A0A739E04B09BD76BDFA9412E39050137D39025DEA5A1264DE08780A53C4130AA89BC024CF1DE63239EEAA8104527EE4C -MD = 94B028D1A0D48132DB3F22D8CB546B02130B511C17F11D8DBBE025449AD55C4AE01EA792B65A1E03D1AB8DC54292CFEE - -Len = 1296 -Msg = FA85671DF7DADF99A6FFEE97A3AB9991671F5629195049880497487867A6C446B60087FAC9A0F2FCC8E3B24E97E42345B93B5F7D3691829D3F8CCD4BB36411B85FC2328EB0C51CB3151F70860AD3246CE0623A8DC8B3C49F958F8690F8E3860E71EB2B1479A5CEA0B3F8BEFD87ACAF5362435EAECCB52F38617BC6C5C2C6E269EAD1FBD69E941D4AD2012DA2C5B21BCFBF98E4A77AB2AF1F3FDA3233F046D38F1DC8 -MD = E91DEEBCD72BA12E2215602B488DED203A1E211D6358CADC6F906FBD89CA928F541222CBD8FC9A20B573EF22FC178778 - -Len = 1297 -Msg = B11CF575F6678B0A418851761D3D2940DEC21E57314C0C8DCAF7CC51F3543C7EA3238F5BFB65C254F3D8F01C560CB9F5DFF6FD2D87FED5F2FB2C8A3DFFB2B7369709342F80BCCA077202151499F08FAAECEA4F6F07E85763FEEF5E062E4E6BA827AFFD278FBBA7F4FE90C748B582694E5A80D1561D5518343D0B1F88FDF6C61CD829D147D692AB9030F0712513259A5F73F37995B4CD923E815E95A9D2FE35E8293D00 -MD = 260CD81B003779A9B7782525F9C8FD6D525D809901F0B1BFA564737AC8E0E13F77340401DD30288011A9175046584F06 - -Len = 1298 -Msg = 6AD2B1B7D7D8F12D7ED616E464F7DEC1E64CDEBD637FF3DF232AF9ED5C810065F4CD00B1B75657F1089E185F3DB5F8F3467F685100697ED7667A7FB87871BCF8B936E05F99073CFF15A36CAF3BEBD22A9AF18113970B5B0777F643A56DDB5ECA4AD3E14E994C6D4D0CE43B8489C46097514339F12C4327EB8232E1BD929BDF1B798E71651D841EADC34817F2F6917DC5AC9D54BFB4A45E252BCD4039D71702F9AEE140 -MD = 2B04058145AA91BC4B2C9E6D1FC15D8A31562294F87B13C2FADB94B7FFD61DE7FEA3E4AAFD8AD29B8F7E43B13D7A25B3 - -Len = 1299 -Msg = 5662FA185A69C135AE9BF1BC3031A8EF17E3FD3595D78C768DC7318C43F2BF158DB5615BD5D87EE05475233C836CDB687AA09D63951EE5F2AF339B145DEE7C1F07A36784B469836C7B19C61BE08D64D996155E7B6B40D3DCB28E68A6C8BC0F5C8EA240A6AEAF719A061DEABDF819CCBEC87B31159716B193522F68AF57F7CC376A57FC926AB35E942F54D1F3843349071DD24E1D59C860ABA71CFE11C1462C8A954DA0 -MD = 3E1413018ECF1CFB85BB370CD139A2819A41DFAC290D842A161C3E42D307683BF9D97F66A5AC738B8E9881400FD9BF02 - -Len = 1300 -Msg = 7779B3E263816A8F9F86D7CEB0DE612784D0CFDF4C9A54E8D6F7959AF5297F46F0E7528B64D24A7647232F4A28998F57FCC61E9DD78A678EE8F0BC5E331E2640A98DCA85D4E2E498AF62508A7A2511EC20AAECFFA8D6F26659789FE36CD6D33568C0AD6086060985E3A8E992EABD83216AC1F5D267BCB805AEF0E359CB65E69730473FE00D5DC7758EEE979077DD67A2BE990B4E242C2790574B17FCC6440086A22A60 -MD = 08B4A9A795CADC47C4ADB23FBD623B7FB6B2F31D62CCB765DFB63FA46AF9CEBC5A0C1195D834743064627D22D4911673 - -Len = 1301 -Msg = 7FC8C0CC3D01FBE25FFF8C68B48A22805582D1697A4258874DD185CE20E3B1206AA69A83FED342ABF1ACC0BB480029D9C899A929E9A3E12072318CF2905FF97206A3F28409E309C2AF4529F212C9AA5030FE357E2D6C697FEC3763959DCCD61E295BE47CD76C4F1A9075E178C8D5ED01A3232422BD5AAF7DCEA80696367E5908EDEC837A7B25D600A9A8F9FE9507513CB8B1F283FF5FCF41A0AF18C7A121726C4EEEB8 -MD = D9BB87D9F5673AD2479CF7F75FE7D436A236DE340597C9C81E79B9181310C663B39640F71F8BF586D3590BEC95CB0081 - -Len = 1302 -Msg = 5F9C4BF48853C04ACD6E4DF5D3058623089C466CE9D8DB0F56E8DF97E6EED8A77D848BF7B3D5B7E561BD745424829328420387B2951BCED984D59764443C3A8DE197BD5CF090958277B6B609C2AF771FAD8053DC2CADA33FA3E177592F3E975B3114D5C87AB3734D7E9CF5A4668AF60CB84202949115DEE795BC195E54AA3B0073172EDAFF954D46858BE26A174D92AD5938870FF1D5612049508F5FEBCA5998714F7C -MD = 4DCBE32CB1E559BB216CD934C1F285D992CCE6BE0E0CF653443C78C300F039F4DB0B3311B838D7C1064624D8B439155B - -Len = 1303 -Msg = DFF4935452139DBF9E54D1BBDF61EDF88B12270DDA0E8AD766053B91B9343ECFBD793093D5FBA674DB77C92C42740E76C95CB72DE88F817C174E43A28EE12567E79462F3960FDF27B0B2D03A008C7C19943C7435338BC701E14ABBF8A783E505637425AD6139922DECA4524263ABED9D384EFD62A1A82C4788263A19A931A98AD9698DF7706128663629D67497C60489356FCBA61662D55A5831B7F1A64B49D479CA26 -MD = C0A3A86E59F1A0582D2306A2A6BA4CC6A6366281C5993AD630C236A2D224D8BD4352D46AC4DAFCE4BEA1B775FB4B56E9 - -Len = 1304 -Msg = E90847AE6797FBC0B6B36D6E588C0A743D725788CA50B6D792352EA8294F5BA654A15366B8E1B288D84F5178240827975A763BC45C7B0430E8A559DF4488505E009C63DA994F1403F407958203CEBB6E37D89C94A5EACF6039A327F6C4DBBC7A2A307D976AA39E41AF6537243FC218DFA6AB4DD817B6A397DF5CA69107A9198799ED248641B63B42CB4C29BFDD7975AC96EDFC274AC562D0474C60347A078CE4C25E88 -MD = 45290A24291E81CCB8D7840B6C4812AC98983D7BD3AFE46B427296AD636862B9E03ECF605B114CB47C0207267BC05958 - -Len = 1305 -Msg = 9471390C1E87C0B03050DEE02D4F9B4ECBBE43981BF41F7EED9B38E309999536E4C550CF4BB9CC80A585F546CC25726B7041BFDB5FCD1DF123236064A297C11862CA1B378BA81B52F179FAD165F1E3D9EB32C53D2BAA5C4EE1380B8E757E288EA55BA911A1F1EA72A2E7D1A3B92E284966D316F22D4D0065AAD3B1743D47533CE8B362E26286C70C61997B3E4560CE6FD84384DABE495216ABA7DE1013147FA81688C900 -MD = 76B7CDE3C7C250AD5CF6273E16491C822AC9DEC79294D48290FDBA3A32E08FFFC568EA175915DB00D43D2D7EF2534F8C - -Len = 1306 -Msg = 71ABD048E4D533B8C8DAA416C8ACBD4D70EA10EC8F0DFFDCD1244CACA21E8C1258ECCF53763DB6FDD1AD92A6968767E5A03BBADEC5CCE37762A2C6F7697F537BBD2651FE372A9900D957ED2F60BF62A8407F1AA5F18600C0575A3FC10CAB9B23ACB86ECF40E83D8E111FAE6B76F940FE8173071D8842981886E3FC86C4AD30654AA086C110562B50A2F7292409F91131A63E3617591A4AB8AD11512C0449A00E35FC2300 -MD = 340818757C10F6F7CC9CA3A1190DBC2FF44F16F2B1637B18BF6FE6BF267D44EFC668301847FC64AC3FA5784318D0DCCE - -Len = 1307 -Msg = 96B1EB63101ACB4E8D4B1F567AE85F344115D62A2BA9A3A75FF2B203446862B10296625C87ACF3D14BB1928B3FFF49E137B9458713C11950E0167586BCFF8FEAEC9E54B6DDAD31DEAA4B987A5BB5642CC224670B8F685D44A4E251A824295F6382A8C303FC85DCD5A55B6974F2DBAFB05A4A46C79A51407CDA912E5A09D4040ACD7DBDA7B0F1B57D733B26EDBC77B977420C3477D5E06B4A112FFE8E3C275C0D0C516D80 -MD = 3EF9B964209B7537E383494335A3618331813CBA68BF396D1AEC34B099B3598DA10F194DE4BB87E40C36F668C574CE2F - -Len = 1308 -Msg = 88DD2CB6A0A2FDA530FEBA6B06B37412BEBBB69BA3FA198052379BC6140395604ADF13345B3E313B04D2CDF8FB718E3BF36267C5E209EF98046C3812BFF94D1870B7BF302C004889452FD3C4A2CED2AEFC848878ABF70587200AC447F8E6C2C8BEA5C5CB72AB7BF4294208A7234C23DF5C963DC6F530BDCA1337A49B760508CFF20927FE64E68BF6A558464B1897AE65EB18C5091734BC8E1AFD63814F8990C58193FDA0 -MD = 486F468581D4F439DA33DB4DA2A14CE9EC97DEAF7D972733C6C5A590AFD658157EF6BF4D029C2E63613FE198F469DCD3 - -Len = 1309 -Msg = FA163114DB716206F3C7F7BE954FD93043A2D74484E53F510396F69CC74DF96D5A3A1BA46AE5D7B24529C655BDEC87274B94FC52A7857A6F3E888FBB20EE286EE717FECBACC5462DAE1FFFA610ABF9605F2D4494ABBE3B7F03A2CA857B9EDF686A2E9D28AC7B6F582E0E2AB5D32D986B7B39270B9D45EB9F34A443B3CC2E5A5EC2966DF1B6FED07FC9B1C357A84BF9D7F61F5B65C93B696234F953F8C074DD28DF4749C8 -MD = 5F52779A35FAE3CC179B8C9ED4266158F7E3067B51D30B873656526E375AD591D8E2DE1F52CD9472A9DFF451C0381169 - -Len = 1310 -Msg = 20C6506D220F6F7DC38280C9B74ED7EAF33462452729FE54F74C5A1D2F664A80C6D93BE893AD2F49A332D88E42D0367FA52A420FD2E78D039323AA19EEFD069C0FE3AEEB261FC7F6060B597BEF88DCF08F2441B74DF23DA1111117CBDF9D18F9EE0485EEB25E980944A0449F5C7CD7D3BE8E6A9CC44D435A4CE4512FB11FA594809C9CFD9B88E6020F5282D15AAF9968DB4A49DE99F6081E2953FB489D6A6D437F207D50 -MD = 87EB72817D93E5B354235F8A6DC0930DCBB743F5AB2466BE2A3D6FA2FB39B2C2E0254E183AC563F4C6458229F9C93DB3 - -Len = 1311 -Msg = A92F1321F39DB5C4DB733D4066E3E4B0E7D21CEC0BC7E2A056AF5EF322FC41B1F8E2ABA2AEE1D3989F2E4FDD42E03BB7FCD2575EE6A1C5A8CFE9C24ED165E3F71EBE9AE5998F12A058CBDFBBBEEFA10DA4822AF880C222707A72D47A376E95088EC09B1CACB895F75F425D04DC72D507CBFB7799784A1D0C2881AB675896442CA424B55F6577E856A1A3C960CBA3D455066AB5284A40ADDB1F3B9BE1A77CEC192B75D108 -MD = 99939FFF26EE2FF9D5881F960E988599D28DCC4731B87AE8A72DD322FABCAE7ECC8A136D7A789F1372F7CD09249677C3 - -Len = 1312 -Msg = F6D5C2B6C93954FC627602C00C4CA9A7D3ED12B27173F0B2C9B0E4A5939398A665E67E69D0B12FB7E4CEB253E8083D1CEB724AC07F009F094E42F2D6F2129489E846EAFF0700A8D4453EF453A3EDDC18F408C77A83275617FABC4EA3A2833AA73406C0E966276079D38E8E38539A70E194CC5513AAA457C699383FD1900B1E72BDFB835D1FD321B37BA80549B078A49EA08152869A918CA57F5B54ED71E4FD3AC5C06729 -MD = E6BB2FAF5ABB3EDAFFE9E47F62586409B443E4C698070D61FC082261053270ECDC2484AA0145C851031E3C99DEFF2389 - -Len = 1313 -Msg = 9961309EE2294A79F63F67E15FA0F9B64371A52A33857230E8353C3131458CB573CA7B42C62A945E44DDA553DDC4F830305FDB11B39F61F6DC7A77F45D8A78A1DE5E444871850DB3D77A5FA22664D003CF58CF270EA826D875DB95860A47E057E8E985C91BFC850B0FD10286D7EAFABF60D43591C1EF72200BCD620D9C823D2B571C79A0F735F7130C8EEB485F0AD15F3C3FCDE12B6F903568263820E09FC596A98E4CDD00 -MD = 139EFD76B6C7D335B79C9C68336F8FA9AADD6C1885D450100EE8BC36CCE58FDC426315C52794F40B8FAA0E703A010431 - -Len = 1314 -Msg = D7FA17AAC404782878C2D2699B8FBF799081144D736007CEB5D26AE1E8FBCC91FFB451FE0ACD54FA46FAD5015F6E054B5FDBB1156839B2ABAC25175E305E7A5B2290C095CE6DEBA98AE8FA42EF2A55570AC1F9D8AFBA87C7D164DAB421BE235EE4E20969C3601CB5F553B800308EA4F0AFB4F15B66F24AF0658FF64831E1AB34105ACA3150CF5A263EC55D0E6A7727BED78FA74FA5FEE2763C0E3DB49D7E529CAA85C52880 -MD = F69F13E25D27FFAD6287F89D9DCB3280E268D52A67613C217A15D55AB60E92FE82665511E5A70777FFE3491FC0CA0DB6 - -Len = 1315 -Msg = AC37BCD48E5439D0E943E371F5BC1898A4E012238AE77D9B58A3E0009992C4A133213FD26CCFD44E55126B853300E3C55585F1CB273E6A47374481AACE9609AB76D8F11C123A7CA069E74826B82E15304CD01958769BC1118EA86F911CEEFB9EBE136B2A07FBCE3B54D86A9D8FDA25CCF6B51181FD37DCCF5814EA3BE8A93459EED41FF29851518894536B3CD6D0FBF2346FBA2F9D832CF694E9BF4E901ACF66558972A2C0 -MD = 3DFB3662BB70E9536A376E36E948839E3FAB17EA023193B3198C648E91DDE0D0DD9EB17EBDC98B9CBE3B2D115F06538C - -Len = 1316 -Msg = DF7CE9796053F5F36763BA2245F6627DD1F55566D4131D5884E68E74AE069929F606FCD502614D0D2D426A3D462962E779B9A22426C97406ED169719AA2E81E47E68A361D8D0AD192A27262074E872D2ABAC6558795DF2DA248CCED42D2C81E90154E010416CF9A20F53F7CA80967D888B0935F5747ED74B10AEA4A3403033C7BB2819C65FB91FFA65CBA3165D38A0881BFC2EF576890AEF8A988FB0179C38545C357FE290 -MD = 8E3639C1D3BAA297B9769EA2C7FB231CB9A19F4B9502D503BFBD466D7D673F003090DC8231F40392DA2DEEA9E450D47D - -Len = 1317 -Msg = AE8640B2496BAB96E5B8011A948B207A656B1B78CD05DC6B7CF47119C742B5277837765B9250CA580788441441318E181960FB6C429FAA217C4937EB1B4DABA073A2655EB4DB6E7075E5E3BE85CEC13C5BC50CE7641CA251D617D47F86F10E8B3F6E84C17E0704BE08C6D3DA01CF21D492576E86AA1A0450FCCEA682966E00E5B460CC3FEE46075924CAA941636BB5B0759031F38C067429FBEF3956B05F911D8AE0405CC0 -MD = 9902D2717728E2725A58D08B96DB1C11358DD9429280EA0EA3555B2C09E3B48292CC23832706984099D1248B061365F9 - -Len = 1318 -Msg = E13B3481EC450F9C4E1BE94348D4A727EA03FF80FECBF0873BBEFAA88A0CF4AF1FCEA38BF55218710AD8C01703797D22AB1C957D4B6552BEC094267D40BB91EC5A6459A142089079369E125361193E166AA50205E66A5BC1723F3596B21388C50CBAD03FCAE9295C48493254087A5742741521E85E6E78B95F7CBB4DD7BFD49CD007A7E651151DA15EF8C6E1754B92919CC60EA7BE1B58B8D60A2A9584A47E626C598538E0 -MD = 9AD07C179B1C88BDADB2ABD29CB20A9EA66AD64EF7908B3AB8CB4187A98A1873AFECAE29DD895C0ADE54829C54A19951 - -Len = 1319 -Msg = 2F3F0FAECE6B161E84BD245332DD6458A97F266F7AAF6917FB4A5729DC5989B5A918C6DFAA698268F126383D190C4F13A40F765CC76F25E8705FFDF9EBC6BF8984DDC7E5D673F2DB437421A5EBA8360CEE5D213B407ADECCF16E694E962C672DC058965E188A5C30CD1C5AE278325BF0CF21CEA9F6857E982CCB54E68F6B754BE9372C9A9AFEF256B5F2B70A9F60204B0A9B2BFD4809F319B3695AA453A52F62E2DD2C6F54 -MD = CFE56A0292CD10C7E3B21DA4F3E5A17536A39F70838BF556E85601DD2B061814C51A912536B8A5AA44714607C852DC32 - -Len = 1320 -Msg = CF8562B1BED89892D67DDAAF3DEEB28246456E972326DBCDB5CF3FB289ACA01E68DA5D59896E3A6165358B071B304D6AB3D018944BE5049D5E0E2BB819ACF67A6006111089E6767132D72DD85BEDDCBB2D64496DB0CC92955AB4C6234F1EEA24F2D51483F2E209E4589BF9519FAC51B4D061E801125E605F8093BB6997BC163D551596FE4AB7CFAE8FB9A90F6980480CE0C229FD1675409BD788354DAF316240CFE0AF93EB -MD = 79B792B34DA4425BB0B4217ABE23E5DBE4E87D3940E2F7BA52CA146618580A62545C44B81E06620AF6E273499073E3A8 - -Len = 1321 -Msg = D8D4CA5DF5EFCBF2D65017ECB36C3BD473D607A30C25EE755924FD1E81E859F0311395E70099035BE27BEFEAB73CEFB3078BE02A61EDC1B01710D41EF113E710BB8C1BA51F5AF87FFEC0FC441515D06C165D076857C56597D01D80F73A700DC0797B609081EF2C71DF882AD6D35AAA4700C510621215CDA7BA2A2D73970556BCCAAC4D55BFED9F38C25645B98126CBB76D662E927A314C4378327941D1A8965FD1059E85A180 -MD = DF8B23E3E66B9F81ABD951FA0030D9B96F7E83DC4E8356FACCC793812D59E7C45DD2E55043D164DB4ADB5C7911A0E729 - -Len = 1322 -Msg = 10C81B77ED26F307D86E4B10EFFD230C8FEAA519695DAB1869346C89B9DA7BD33B5BCA5C0C43DDE500A8C02AF37A417C97AD0AFB6A07AD274F0D09234C74229B3FAF91A5658D2D2A35EDD6992B2E3B213E8336C0B1DD29211EA4B215C358F5810E025B3DF5AF083DED25A6BFDD39BD34B3D7356A17657D31BE1E03E3F562C8DD249116AF11B1CA8DF62A0198D21F855EBDF9209F10600C0B0AB655DC2CE8DE056C8D8FA9A200 -MD = 77439828EAF5299B3DE9ED4083AE81362A27C8B4E75D2287387AFDED0143EA88E7F34DEC19F491233A7D4E902AFD9FBA - -Len = 1323 -Msg = 38DF77114DAC70D214DE02A6253C53D03A44AAD53507C23A6CC64123A59D08511BCDC09505CEC62131C63D89B0A9C0F7071FCBF0A14EF340D0C33C93F37705B076AAAB9E4F590399547754F97B10C79C304907BA8D18D93D16F206198A2839FC265E3D942ADC8ED27D073910A2824424C3725409FD46064C426A0E7417B416E833A8A8FE57046EBA806AFE5AF13E756A6375EA6BDBEC8F5576B615622EA259CB161A878E50A0 -MD = FF55EF521BEAE1ED6E2626F7DABA89E9FD7B406A98BF70B3851A6BC1140CBD6EE28C043A45152ED636E4406C249ABDA2 - -Len = 1324 -Msg = 430F558E2C30BE5DE10C71F8CF89A448EFF3D6BB8DCD62D2A09DD0FC9171DECCD07C65E77A79147F1D8D75E646BE71379A7EB1A317078D3E70D4CE560BF24948CDDDE283C1F87D907332181404F327DC9CBDF037CD00759EE403AA72874D7B99FE298310AAA01CD3CB1AAD14A116E6E5B1AB95E48E67A73019704D59444BEAAE4DA1C1A432A57233D5B2A233E98ADA735B1AB5B0975C1DFC33C0A7C8AE18775DEC8169A814C0 -MD = F296A4480FC1E6937406A4A94E3FE34BA8A5F4E72F9A3523952545F644F48270AEDB089EC267EB3C9E3A4C3E21EA9C6A - -Len = 1325 -Msg = 213D28C42575EC3A807C614609DABAAF4C1CBD06C0FC14D4CB4FAEE17995404399731CBD6D2B3DED3F0FF8B603A7F139625E6193F269D825DE24E2E442AE02AE948C6B3D7E91C1FEB5210280985BD2E1D5D1E7ED1B63896D20A18F8E14250384131E3B1AA2B47A23078DE9EB65B735133992CAFB56B22549313C632B8FEF70BFA8610E5B5C82BDE68C88BD957FCA36B5151AC18B3C2030315C1A8049F6582A6C210115293728 -MD = 01A23A3E554918C3D50854B23202A90EB86CB0F577755AEA758F6DCD74F7FF38447CE8959B015E01A7E04FFF5F298444 - -Len = 1326 -Msg = 15EC4EB1CB742F14FFBAF11D1CA740F17864D55BA3AE39EFE5E43DD58B0A9A7345B9155F91714C9CF73DA71D59BE61E170CF62E15A5081C4D165693580FAE1401D6CB047D6F5ECFB38453E9906E9A8ECCD861579186EC2EFA503C54420673F2F3F49DF69FF76052B93B92F39F50235C83995B54CEE108F2A9327ADB4CA7098B53647A9E4EC5D4EE6EE042717FE82D505AB9BD3CAA78C4B576E8B37E38663CD20A467F091397C -MD = 8671806FB419174EB01053205120E23BD7F9F076185A7FE796695139F3B66B26C2CD247E0999D059AEF0C3FF17FA715A - -Len = 1327 -Msg = 65B08BEF40F0B21475DD76DD4928E3FF488CF3EF73F4E494A0D32D72F303910CAED04B767690E66972ED6C8B2878CFF3793459FA91A59F59EB7D75C50BF5E49A97455C9B0CD2F0C76B8DA25EDF988655C3BF92DC69E487A1750ADC615AD8DE7AC35D3BCF9F4A034B26D55AEFDA210B753C29101340975DFDA82BE82AA4BF4C9AF108FA4001242F4A412BDD2883F33A46BBEEDC449978B03134E7D7CA7CEF9649F03FE5C2CA6A -MD = F3CB288007CE198C221AD6511DBE0A12BF6E1E6A6A064C64D8945DB9E552945A4267ACE96ECB2680A70529D5A45D51EC - -Len = 1328 -Msg = 2ACE31ABB0A2E3267944D2F75E1559985DB7354C6E605F18DC8470423FCA30B7331D9B33C4A4326783D1CAAE1B4F07060EFF978E4746BF0C7E30CD61040BD5EC2746B29863EB7F103EBDA614C4291A805B6A4C8214230564A0557BC7102E0BD3ED23719252F7435D64D210EE2AAFC585BE903FA41E1968C50FD5D5367926DF7A05E3A42CF07E656FF92DE73B036CF8B19898C0CB34557C0C12C2D8B84E91181AF467BC75A9D1 -MD = 9FA1D0AC7C37831731B71C19AC9E81EA115083ACE6D94349CE89FDB79B3462A749D76FDC93892F2F16AB0F7E18CDB79C - -Len = 1329 -Msg = B13731617DC804E12B6D0208D197E1CA5A19206F697C7A77A36CD015F2A8332DCB4BABDCF4A5C63605E27AD0B57A03B423859ACC51D82A10AF5DBB8FD50909EDBCFB7D429B4F77933438B76CA9532BF10BD1F36B42612C662AAF299B8C9C88ED55E88A1FC780E6CCCB61594CC0B5D9905184AFDEFA5DF5DB1BE814312CD2EF6C89EAF002B0DBCD03814B71B6B1E581F51BDD7DEDA95733369F39849A9E8529F4104BA2B3438280 -MD = 97240C9EE171F1A05E0E03DBB0CFC753E29978D0CBF318396937663471A88B12247140F5C4E9C55628C99B07FF6528AB - -Len = 1330 -Msg = 01368F9B4FD19B850547FA39520B328FAB5371026EF643ABE0CA52A1FE3214AD838183533E5430E79C4E6F6079F576797449AF05761796FEB48C2BCA074D318B7F3281778016F0E204B2DB0488F1FC5FC1452590FE60D133886003CF16FD5544362EDC86CD6570F7C3A653E3DDAC125BE266E39E92BB65AF965BB8F59D1326BCCFFB71F952AC9B95B68A30586BC524073E98911F10E4CD0D0BB9E0C0830BA0944236A747353D00 -MD = 76C7A7F740D1F22CEB6F837D0167D9827F12920174E22C381B9B7F0C9163F1A5B30D06E1295FA80CBED9203809F44D25 - -Len = 1331 -Msg = A876C4B9EB23D6D1A0874DFFB3DB4A23094425DACA15775BCAE881E6B3425D116C959BAB6B04DA1A772532EF92EFD9709BB1DD4CB3FF4411882209D3F95D90952692AFA66F9183E8CD2533346D3E5118557CFFDE039D3BABC38647A7C1DD0BA04804EBD8EA3E905BF334FC5844C0E6DB853B4F693D4E087DF754FCBA1C5B2C234EEF82349006C5856AB7E6E8FD8ABA1A3E7E373A486F4BB710A507955A7590B887BB6EEAE01F40 -MD = 7D176955F26F9B93CB85930BA9DDB58BD6711EC6D30BDEED60DBC2793865B3B79C3122B1A28BB786561D2F95C16E4A86 - -Len = 1332 -Msg = 73461B72151939F14C3463B9133B21CA31FEEC81AB2E32D1BC0EE079609A0E27E903FAC07A733062C1495B35DD1EAA2D11FEBE2CC98F832DF67BA3BEA187C9084FD421EB179293B209BC142B35159AC5057EAADFDA530668C6A645B235E0ECF290BF3CA902FD27875F129EC1913C82A6E6D6CADC63FA672D540554703B25A8CF1B92948B310BEDB4CF3CE581C188661579401CF107B3FEFAC9B642076A589CE28868B3DBC78D00 -MD = C1F0522562FAE5B84C6127B5BC4039C8A225FD4F06341E0215FAABC540923B2F310644CB75B9694D550372457270F327 - -Len = 1333 -Msg = FDAA7C54912A9D81983FC765E53A5B99B5D478DA0EC137A942D7282D3C97FC674EE734CC9B3DECA4D482E33052D1D0E1F47327ECCE1129BDCA5DD9DE6C5722A54DE82E7F4B223219E6682AD353815A74862B03B2B852CD7A246433FEDF1E7F3C95E59A9FDB00080A4C7CB5473E5E8A9FC2784AFB8730F5B3ABE0EA489C501BDE120B9584D45074192A16BDDD8172545DB3BD993FDBD3D721F4B3E145594CD3410229427985BFD0 -MD = 0423D07493DF86F30CEEF8E684DD6636D9826B212AD5178400D55331D7173B7E89034579D82C0609C2509D6D607317DF - -Len = 1334 -Msg = 3FB8DB0394383660250C48371EAA971C4C2F5A3088F028E759FB9FF3775CE1D6BF7D3B114143B21B5C98C7A60D760784787420BE0B29A71663774D02CAB07895B14D18AF5F26B58D97C87AB6DFC5E6C5023880F2D181D868A4938761377F085C51134D383B19F10B9C2527E20EC3ED5603A5F8182EA3CC7A1204B331FCFB17D1E0D42819D18691451051B12F07C2E3FA908842DA0B7F72CDD0E31D7B80552526B36F20C90E4A6C -MD = EDDBF221C3852A69B8B633645BB159E8E3C8CF0549D3E3C136A006D10FF744372E07CB484C2735B766F07B08EAC41F08 - -Len = 1335 -Msg = 9135F850B5F1C12FC35D88D789F6C0C489F4E5D09C3FFCB4C0A21A6532ACE66D192B214E8E82F099F3CEF20930F1E8FBEA47933016457972BFF66AED7FD8295B01F1F2528CC98A04F1082033D8240749EAFF393E6247C03F51C8250717F10D4BAAB223C86F2189396B48036B0285FB38773915F8CB9AEEC5A0BD117967FC220534A23EC333C6CFDEBD66C526F10E91EA82CE0AA4039C6463278A10F9763528C5A1555213D4A2BE -MD = 68238A0786C1530DAC2DF73A6E0288683EE2E0683F57D0B4BC29945EE31E723538529A77F5FE20DAA110DA7AF68B3566 - -Len = 1336 -Msg = 0D8D09AED19F1013969CE5E7EB92F83A209AE76BE31C754844EA9116CEB39A22EBB6003017BBCF26555FA6624185187DB8F0CB3564B8B1C06BF685D47F3286EDA20B83358F599D2044BBF0583FAB8D78F854FE0A596183230C5EF8E54426750EAF2CC4E29D3BDD037E734D863C2BD9789B4C243096138F7672C232314EFFDFC6513427E2DA76916B5248933BE312EB5DDE4CF70804FB258AC5FB82D58D08177AC6F4756017FFF5 -MD = 187CDFDB3757D80010D1E53157A5CCB0FCC34998EFC6BB3CE2E60768F5EEAA590656B49C0E036A3F34C9EF25F3BE587A - -Len = 1337 -Msg = 39CFC640D96492FE5EE066C51815F22D0EC9069BDE5A1062E578B1FE19A045A4F77FC367B44CC052EA0092841AA1B2D36B5B4F5023F4139DC9D36C6A45E25CCF173DE83CAD177485E1DC089DAFB5FCE3F3103372675AB5D1D54D8AD9F91A9CCE0E55E14FF565ED156FEFCCF244E976ADCC41458D1C8F709F0D2BA20E836B532D5C2475BDBCE95CE32633C63CDE42A76AA032F2F4A01F6B66EF2B666C34B2EFFAEC5C85F880EE3600 -MD = 2261F81C4CEF608FD36CE1F8294B4C34B07DC55136B393B318FCBE7F741B59736A3A2734C7318351B1F1DC59C3D21FAB - -Len = 1338 -Msg = 6E126C93AC75E3C7320CCC9DF871C1E414D5A88C01A90BB739E84F7CD4053781C755DCBF96C9C69558F270972F2AE1622D5FC47D52DDD07161ED302D66363C50C7E8F2523B6F4ECA6C1CF71BFD3BB91D8EB83ABDDFA0C1E8CDCF4B2EB2A5949D3EBCBC6E9DA9918AD21F5EB1261C1CEAAB1ADD82034681460441D0E5380DDB02678915113D77F95EE3D42C3170E14A559399C3CB8941FC953EBB3E913A73789E5D298D6C840DA900 -MD = 512538892718BDE231A2795FB1CD0FE15A3A9511250365B0FBF9C20F3EF06E4AB3AE17BDF838C8EA5CA7B58ECA0D84D7 - -Len = 1339 -Msg = F55557FF8DE74819A835E310339E4487E743C20D60DB4162581B160AA9C1C5F45DD760A6FB350FA7C3540E718C25FE6E045478D57932C30E710F0EAABE473AC7E4C789DC2BCB10AF75A4B0DAB28352EA889C257848C885D5E25BACF44ACEA5613BE7C2F34B0E1C3E60B092E84393592761AC201AA63CC1327C9BCC590F0415FDF781D038CC23631977FE6FF968D63C0AAD3BA1678163C4705F46BE48AD84C418A10291E7048B0B40 -MD = 9C818417A030D08680AE06232473746BF244BD5C074CF9881F85FC5F30D22719EB98282AE940303792FEC139A4EA17A4 - -Len = 1340 -Msg = 58DFF83B67C6E67DDADE60ED6A0C268047FF37144EAA34FAF2FCE48AFA56B7733C0F4107AEED3695ACE8C4B55A59195E1E2FC93107C1147A38B1E48ECC1601001EC488491412FC5F23565FC7F51AF9B0DCCE5FE954E59309BDF99BE3959865BC9ACF18296F150BF157EAD0A3BBEFC43A50AEA865AC390DC0A69F813FA2D9A83A99695B918538DCB798F29D9FB909EDA9B06D83302B8E04773F911CB2641AE861D3D12FD49FDF7FA0 -MD = 13B4ED8EEFA48BB3AC854AD2FE930A444CEF76C7616C39F54E1DBBAEE12C1AFED5950029E9CBD786E147DC3232EC3E45 - -Len = 1341 -Msg = 3B5E3D1050E346FCB62F940EBAD635921CE417C934D3589691AF4EB303EE1B0268E19D3E7E77F3C053617ECDD8677AF9FFBD15D94013AEE8BD2096252A1B31014CAF1B75BF197566EC217B979166C43CDE5EE8D56732719CF0CAC6096AAAA54CD606BCF7279FC202304C1FEDBC58A77CBDD40FB058FDC95E6569B0B00C8ED5EF60E54816585F71829AFF637C75272C7A5E08B6B380A23B5CE11368BA6BE566283E4B78D043733810 -MD = A7C9A3190E44DA702492AFFC6C436AB1C57059337F2537B66C1B45140D326B7EA5ACC9A07E6BE3ABA643BA65B2962EEB - -Len = 1342 -Msg = 5D2333C4A14A60656AB7FAC56229020ED2CE882448E1FC052EC15468AC4B4BE980D042515EE3280D0F9A6A100E20ECBDB415BF52F620B85C94D2652304FBF053256A6CF5835C57652DFC7F999307E097417EF294CB3EA68BE9E55AB65B55D57E625CD1C4C43D6F6B2C391B8229CA1051D085D485729565BA2B4BC8EBFACA0A849A8CB5F8B6548AD1BD66E397E3AB812026210CE7A918A7F9E41B600D360A5DA1C4D9508733815F50 -MD = 64FC57F5658C1F2C7699AD3D722652AA9B25C543CF9B1CD182624E2E5A363DD34CFED76B81E6BAFF0FC3799BB99989E3 - -Len = 1343 -Msg = C2F40504BA614ADC304AFEE4C618E6CDC679B644D42829C105F1B0E4470334C566D580FEBC52E425A85DE9E341BA19BB42DFFE31B5096027E13334603896B76E3FFA4C9B40D9FBC4D0DD6BBAA824CA0B151FA56C1A6709928FB853804F0CEA2242B08159F046B28741766337E0957793617B0446E1468B279A037ED18305809EBDD74E36E7873C01B9363ECE9AAFA8E96B43E2AB289665234F8893707C491C6C3738E604C289BE92 -MD = F766750727D482DD88FDB0A4CD69356C7665B7FB163DCC42AAFC9F5064EEBCFC0094FDC5159A07BB93C5A11175978DA8 - -Len = 1344 -Msg = C3236B73DEB7662BF3F3DAA58F137B358BA610560EF7455785A9BEFDB035A066E90704F929BD9689CEF0CE3BDA5ACF4480BCEB8D09D10B098AD8500D9B6071DFC3A14AF6C77511D81E3AA8844986C3BEA6F469F9E02194C92868CD5F51646256798FF0424954C1434BDFED9FACB390B07D342E992936E0F88BFD0E884A0DDB679D0547CCDEC6384285A45429D115AC7D235A717242021D1DC35641F5F0A48E8445DBA58E6CB2C8EA -MD = 7043F54F390B6ABD0DFF06F266E0E7B3E41F8D2E8DD43F899AC456662447A823A567B1B0FB8C2DF24E5F6689060CDDB4 - -Len = 1345 -Msg = C3CB3CE5975C2DD22C8BB03A4E86271D01D07EA027B7557E6EBA98A5CA4B6E8CCCE18C02878C7479D92E546C2961CB99269E80E7A61BED7F1E0FD5ACE5DEC74B8D3F5F2CAA0717822E78EAF8BF1BBDE53913BF9814CA4103C3A98D559FAFF2CD503972075F3C04C8D9DBAB07F67DDC2B1BA43DB3A13EB6574C5E7B7042CC1C7F182BF8CA384CAF5704D3C16EBED4539A7DA4A396F8180EAC0186A99F910B8710EA081B5934B39A1080 -MD = 065A31DEB6C5AA61AF99248F75C86D89351E6C56494DEC7C0748952646F39CDEC6F0B9C0997DFE1FC184D4274BE97CDD - -Len = 1346 -Msg = F40E5F1455783F8572FE80D3153C87D5BC3CC1E32163424E57083619716ED21C5A055FF1E8E0B49F3B860E1704601ACFFCBCAA546A98F9B86709B74121753FDB16DF79D099136570DDA02948921F52D22CBE958248E0A2B9B6E409146C3DAC0002224DB6BCB40E86DAADD4E51F17ABCFAF21535171217D421E828546A5F1F648D4003431BA5C24A0A540FE1F31A7CCA19BFB5D17B943FE774BB3DB387C8B7352E7E1B2E43A423C6A00 -MD = 908C4117C0E5DB8B70B83D1B496AFA51A6FD8E99E872BB35DDB8E0BD3766460FDBEA224F1A5FB26F559255837AEB2012 - -Len = 1347 -Msg = 7D9D6BF2422DB04E8C9D0F8D2AFFC296A305021A82DD99B5A0CF36B7B94AB0BAFFA1683A5899FABEC74909636D1EF585F80DB9817E37D09667A4A4FE5833624548B24F87BDE66B66D758A4B49F208C75A5EF80DC5088BD05E3DD12DE637506D4E10D5E1D73179D577361C7B7C98B36DC16A7DA068F3430957FCEB669D3C0ABDF0D7DEF41F534ACB9B124DDAE7E57CC9915440C1B6D8996179E6D796C90D254A4EB8F0C4CAC1ACFF3C0 -MD = 2E2016432C2814A9E3DAE4EAB68339681B08D605299B46BDAE319E7309C77B5289EA97FA0C97D1BDC8112188AE39FB44 - -Len = 1348 -Msg = 07B8187B9A37B5ED72741E4A43724ABB1A14AE3D6A62B74E3C81A8B54C9B71EF81A2704FA5DFE752A2D7FAF9DA5D046AB6BE4F3E7F241D89D79A77CC6B46EF7442308566B4604431FB4B865781BFD4549C116160FCAC4FAD092ECD4C443DA5FDD5E2977D6C18714B1315B84B2778141710218B6DB4A21BB4D1F294907E3F1BFB6FE51E7A004DB8678BE9B799DBB14BB3A4D4190E7D33C69AA8EC772EE2A20133BF968DB96F2F8E1760 -MD = 4D29C3DEC8549DC33D92D96B5AB65DCB2B93A77A173BD99A0333FFD20D5D67FAAF1332EB1D9A9D34267C9164917187D7 - -Len = 1349 -Msg = 77206E0087B19C5F785F0FCA287AFBB804589648A52A4757614FC17B4B90BF68D3F4F103487F8B7FA7A31A6C6E888EF6EFD973766CD0D189C80E7B33277D22B6DB89108AD4B3851709B749F535ED18181AA564F05ACBADEB21BFAD4AF5FE1EF08DD72D26F4720586D153C8A6F2BC14881EB07FB0C6B88C004EFCB8A96317468F62BEF8B6532E6AB4F205400B33DA576E0694D4667BC66FAF8AEFBA644A820D548D3F90657398B96020 -MD = 27BCBDDA89C740001CD10BC29255F6056B18F067175963BA84FBC49449F00261953B8BD972C8C7A610213658BEDAD315 - -Len = 1350 -Msg = 96D0600089A412478237ADC295FFFE4D898DDD2EF945BDB7F2202905699E16C9F623A17F9525234A77A4C51BF594E8419D9A82419AD954A5FCBDA1E46185CB872F2CB729078C6E5EF7B99B8AC4BCA5F9FF58D9C22F128CE12E118661CD4BBB32166191E46348977284EF07FB9DEC83FE46794B2556FC74D0E8AFA9ED59C25C928F03A2D7CDA4DEE0180FA00B0C04EDE8879836D8A61BC0168226F1EE0CECEDE25C835A4253757CAE5C -MD = 9F8C5785027CC2185B9F2325624DA4282E92EF0AC320D9AECD5D8B092A13C64BF9B44B4372ADBC7A5F2C47C72FEF2030 - -Len = 1351 -Msg = A9FB6E614A0D60016E54F7F76379AB10662A8147E40C19DEE4303DCDA99E08ACB8CB14CF41A42541C52865A5106C8B1278CFFADBE74015E4AF6A21EFED08A57A0C8E71525D75FF08493398B7F1A45BF92E6BB571E05A01DF3004B5FA4DEDC71405EB302587A2001D82CE4AB6540552E6418ED617F1807018917FC9AA772FBD4BBEE3FC43BDE9113D7E33A6CEA09B2B8B6ACA762DE6F35E78F52E28EA131DEFF81C34AA51B24D8FB210 -MD = 15451E25C11A892CCD29D64449BFA8613A587D29D050CFF5E828E52782FFA538E8C88842FF1466EA7948884A6EF58A53 - -Len = 1352 -Msg = B39FEB8283EADC63E8184B51DF5AE3FD41AAC8A963BB0BE1CD08AA5867D8D910C669221E73243360646F6553D1CA05A84E8DC0DE05B6419EC349CA994480193D01C92525F3FB3DCEFB08AFC6D26947BDBBFD85193F53B50609C6140905C53A6686B58E53A319A57B962331EDE98149AF3DE3118A819DA4D76706A0424B4E1D2910B0ED26AF61D150EBCB46595D4266A0BD7F651BA47D0C7F179CA28545007D92E8419D48FDFBD744CE -MD = D0CE0259AAEEA5BAEFF52929423C3DA07A8C75195F86D733A718D1C46A1E40AAD404750C41D7A158E79F278830B4C07A - -Len = 1353 -Msg = 36FD2EF569A5A40207DEC3C593DCE23194D2DE040551345672589F374ACA38C0ABE149F4E38D53C1B24F02BB06DBD9FE3703012F0E5DD9FB836F38BDC62FB11B55EBEE418686155296A54077D71E05546188C6381D0277BB367D2C64EB1977F100B178AA2530E1219DBC0381BF52F1C81897AA2B7075FF775EF42FD948A5F751C8A2CBC0B5F591685B39039BC08FFC7246E9EF8EE8B65AFC11A3C59C25E9F020344CAE26BB62DFCEE600 -MD = 72BCAF2039CE3BF8C6C3C912DC8DB17A435612615D0A4789392F807524E3292C85005EA270ACD4AD6A1A4A4A8ECD982E - -Len = 1354 -Msg = A868924523128669E906EF130800AE8CD611A019CD74A3BBA69535EC017865BB576DBCA2530803D74EBDF9A280D0342F84B1D428E4E447635C0237D44C48190E595294B44283BED2141FFC8CE76B8D2C4CAA166B81AF988ADC13C28CFFABA21FC625EEFB2B70A6D3C0BAFC91B7F07CB4861B689A45CF70D0F61F37934A5D7018F206D1E327DBCE56F347CBE576F1218270DC49F7C1D63B76A21A354B3CEC87A1A57E8BB332BF39D6BE40 -MD = 565BE6E4ACC676659E5040EB7DDEDA5034430CC03848B353D6F3A8CBB2D36FD4C6DB0499ECD8793075B33B0E6124E066 - -Len = 1355 -Msg = CAEFDB135D53FA74983D99E6C0E003D451084699ED4AB28959A931ECDA5FA7E45D54D3345987DEA612F20DE812F699E9272EC5599C365D1BD948B0AD2C30BA9C61622C06814FFD397E34CD0D6079D88C5477648607BF33160AB1853EDD71547132A4C0BCB89463CFE0D579AD4D042BBC6DC2C8D529353E004786CF7FA457AAB6723A70B2BC51F71E7B472B5A7C0D90725CBBE355323BA4ED99CCC6703FF13853F686AE3381003DE704C0 -MD = 8F008F7AEA4A332FABD93A0373B9FE0E61060BA12D9D60FE953B2A349E542CB76F8CF61DFD0BAB1F7FA5E066F2A655E1 - -Len = 1356 -Msg = 49A49E75573AECAC91FE025544C29871E97348F0C26232E008BAE56EEB1D9522C98251A44CC8E34F081554E3156F41408965CB9315A1CA7A53D14193500D155EBDFD3CF93F7DBAB715C49D2AAB0C82D165E7A792B8A5DAD7C2C1DF57501D14E20CD6F3C207B07532F772A55756E237405BCA9FDD0E9E6307FBB2DAA3F8B0FB6B2BB0D350E933837A6E742AE9D242578ACA6084CEA26E3D046A0A7158ECF4E852785DB96F72D8B780DC20 -MD = 1A1023F9DA6EFF9DE69D482A0749821C0DB642A0C5646A942D5B3E96F11C0220B278CDA8F30180FA3674B27C5404CF3F - -Len = 1357 -Msg = 939A4A630A161EE6428D48E351FD28190F9CA3E99418855FE282FCFAF85D9B995EF83C934020FE4D7104D9E6191AA489CDD37F7002C9EBC3ADF792DBFFAA2EA7BE1A1F3D7C0616479376C7660BBA1DCA7633474F4101A68766CBCFBDC269E81305468C93D4FF6B01DE681A38C6351DF0C53DF8807374B2AAA487F93A37D2B8C319218EAA06DE9470D94EACFD3083BCD78D29A5B85B4653BE36F1A722DA6AFAA5C5609EEEA47BCD33C850 -MD = B96B4F57F6D217AB61CFE9F8939BEB8D37DE263277588A09FF938FA102BF2EC5145884B0E4417CD68057B7D7CE3CB3F3 - -Len = 1358 -Msg = 5309B29396779ADEC58AE82992BC55FF47213BD044F67070C5453201A83CA555C9A009FD7B372C50282E5947008D0E7FB125004148884EC2C88640C91372468B6EB8F884C983C83090282EEA7737D953DD2C6AF6A85FAAD6CF72A14512849961913F14EAD5F203A4AC7A5481AE2BB722C6F0427D61E6CEED47FB181CE29642C753282563A78BF6ABF1854D9B1686559439A073E2AC2FDE86BD9955721F9B69288A61F575BAC5450DFBF4 -MD = 64C238BAE3BFD1EFDE6B35973BDFB8EBE52C923E444AE694E47FEFD8695972850525695B39DB2B919C8DB427BE331964 - -Len = 1359 -Msg = 2E1AA86E98FDA5D02B5A87975A497001E6CBA9DAA3DFAB73247BA5711C94C920D746B35F91669F84B5B9D18938C2A670948BCE4050AE33615B1EDF6F4C4463C40A0DD16132A27D8DC2E061744FA443522FF8321A92C71B14B6A3B75846760FCFCC94580FC830E5BDE5C7C3B3BCAC45CA8A7B71D6313D181F6B3A02B66FD1C2C8790DD87A743F7A7A48958BA1BE4F57B2A07D6B314576D9607F4BBDB62C3258DAFD24D3167A3127D1C00E -MD = EAEF5F37AFAA2069F2CE10E3DFC8510C2B7A261BB110164B060B64108042DE4F0F0590F696A5A482E0E79B2A26DE688E - -Len = 1360 -Msg = A983D54F503803E8C7999F4EDBBE82E9084F422143A932DDDDC47A17B0B7564A7F37A99D0786E99476428D29E29D3C197A72BFAB1342C12A0FC4787FD7017D7A6174049EA43B5779169EF7472BDBBD941DCB82FC73AAC45A8A94C9F2BD3477F61FD3B796F02A1B8264A214C6FEA74B7051B226C722099EC7883A462B83B6AFDD4009248B8A237F605FE5A08FE7D8B45321421EBBA67BD70A0B00DDBF94BAAB7F359D5D1EEA105F28DCFB -MD = E4385A3BE011AF20FE4566C1CEBF4AA68270E42BE50AAAAE65F8F605E980B1D2736FB0E794330D764CA96BC68B8360BC - -Len = 1361 -Msg = 65A13FF28557E4982462A50B622D2B33D68CE803F2BD202F9F930AE5BE9026425F26C640992BA53AA014F7B0765DD49FD7C843A20D42A3135C2A16532B79CA414B65E9672AAEF56D20F72C63CA115153BF9E3EED2EAE0A03A3B054F4868FE8E9F83B4F9E4CE1A9CB87A88280780F8EFBDEAD6E3CDC1BD27000019D38DB3D4F4FD467B4F9CF2DFB4D46A1ED63EC518B72FA301ADA91746495D579FDB94D147C55FBE8A8E4F5A427E28E8700 -MD = BBC2E25961FA51F5317481616ADA82D58890EDDF4C3D58D9731E049673555B7421709FDFA77834A40870AEFCF09F834B - -Len = 1362 -Msg = 1045E853FA06432CC0C84304B661E0BF42E06D1212CE69CC6BE4BA28B6B7C4C62679B58A137C5B8CADC43F0E353A2F824457D0D9FE8FE017150DEE305F6346EAF01F9E220A4233F5674AFCF1C29F2EEB4B283D97E3695C007E62D453FAB2D192F16CF26FA7E048BE5EED75809688933D55EA478BEAAEDED1F7F07603ED77CC19B9557197848E606426D7B363ED592512D0488B95618940451D295D32A26E6C155D13BF3A17C65894F598C0 -MD = CB2F4A0F6D8CEAF9EB7000CAC69293C521618BAB9108989DED7D04BF269D6F35E49E5BA41C088B6C10A1F878D8A997B0 - -Len = 1363 -Msg = 3C10731D5A71E84653384B14B09D136B3B5A5C1F426B6C717521643912FE1346178CD03638F5FFF9584E3E4968E6D8BF2D0D00B893BE39A09F6EC23239053D5E5AA8D95BB999938CAAF66E12C4BE7D65DE0713DC352D9FF372D70BD9C00B3A0133B989449F4535B4FFEFDF5262C3A8D1DA90111853C0E10D4AD880E911880BD7C325804BA23F465916C273325800B04BD6F18C7885D7D2368A099A84367AAC420A865021BFD1A379E29680 -MD = 596D7C5E46F1EEE42FB6953EC9B5EBF8A8CAC1DAC01554C3C1104CE4B7267FC49DC5B9B8AE4E65A019AC694D7C591F9D - -Len = 1364 -Msg = E1D0B5DF1D9D66347907624DCE47F60B127CE791BBB92933E5E4A976509CFE339527540B602A8A73151B654D5B8ABE44D2BBC887CC78A08826D15A2FB8A1FD33DE8E7FC57FCC26C93E2B95F2D7C9322D4DC6C955B844063FC00508ABBCF85408880F73298211A7E7EA3179097E5B8113D3CB95C85F3BA015A87DCE752A0A5AC4E7D0C7B53014AA1ABA3921AA12A32689CF7DFFA5AD6CFC6EB68816AE3DDB5BF6FE77AA80A647995490A0D0 -MD = 56DDC647831B90B35591F887164CCC88A18D8165CC8E4A04E385226EF1A9D7255FDF038930ACD5DDCB197C5852177006 - -Len = 1365 -Msg = EB46065DA3891E567295BE6219759C53F3DD0A85BBE66C93292120E35C0ACB54AEFA0785791A0FD1BE185DE702A684554FE5037C74906332F0755C88A7D8D5281A793ABE36C9FE1B0AAA79C67DD80FD84C0A07D83F63D053980FCA4FC5E11C8157FD57CE84E939FFC574EE8274C8B2C3608A0FAA1FC8D980CE5526F9D1D73E65B1057560B62A69BBFDE5649A31A4FEA16DB8835251673E1A1CAA2542B248230A9F7C7DDBABFC4474B8CD20 -MD = 13492F59FF49D519400B788BD3E20BC4024E829CA9202B123FD7975118034484FAA586C2274E9309B42A14BA2990E5BB - -Len = 1366 -Msg = 97C3A9F14749A457F890C34FDA5EA43A7AB1CDEE0EA0355FDA7B0027D47072B25A8ECA77C5FF22CFD0AB66E443E33315D3303E06693227A05F56D45648430556307E0CAE518E64E173EF36DF0B3A18900A4DA6D31AB65D40EBD67CB027F2584B3CD266625358905C9C482B61E41F6F11FB749785161FFDA33079F21DB116E2C25C7773BB3A7EE85E23D940F95F3579B90DC088E407997393A5EF709D477BD7E5A682237D1C7E835076FD60 -MD = F49BEC8F4F9C7043CEABCAB0E7E0D531D671FF0AB5D753F7598A3C7D7501797C3EDE06B70CC77892E7A4D087EC6D4FCF - -Len = 1367 -Msg = 411BAE7879445A945453DD7EBBE35049A2537031F12F7A90C712E6D72C720E7B21E15D4523DC0A5EE090522A69D2786253136E5DEB20FE0D260A67ED509B88EE4444B86EADFCBB9D365CA16BB937065E17B6D6BE7697FB337E1047E91E211489615BD4BD85B5F90B6B44114D0871D9A0890CA0F9BD7960E927C5E6EF0E0651AB7C66E2D1BBE65DC29E8557C15DC5A15076C7AF08925F93C615FDB8A50F99C0FF427589619AB54960880226 -MD = 231B604F83F24EDEA057F363721E965CC3B31106563EFC87AC44EDC58B63A4C8D4861639E11CE0D3AF50814B8CA74BDF - -Len = 1368 -Msg = E4D1C1897A0A866CE564635B74222F9696BF2C7F640DD78D7E2ACA66E1B61C642BB03EA7536AAE597811E9BF4A7B453EDE31F97B46A5F0EF51A071A2B3918DF16B152519AE3776F9F1EDAB4C2A377C3292E96408359D3613844D5EB393000283D5AD3401A318B12FD1474B8612F2BB50FB6A8B9E023A54D7DDE28C43D6D8854C8D9D1155935C199811DBFC87E9E0072E90EB88681CC7529714F8FB8A2C9D88567ADFB974EE205A9BF7B848 -MD = C979F00656A09E68485CCF07FBBB9108B00C5FC11D41F5966FF086F26C7102478EC177EE6D78C623C375A9E6F761809A - -Len = 1369 -Msg = 85B3E18D46E358D5BE8A54559ECD1869416AFA911BB6D553040FF39BF7E0886FF7586EE57A4972A9C85ACA71C7D85E2391E2B168C71FEF71BCE1404DADA3C302861FE17A1199CA115A20F3A5F073A3C98FC65D36A03F02099A0B5E9D3993CACEB2636357DFCD05F849A71B8B765FBE0558033ECF0A4E8FC6678325804B5554DEDD02F5A50B88B81898E31C621557624B52CC3431E07B0B3281CB452B4D92C5F7D283795ADB9787E0C4D1EE00 -MD = 51097584AD3E2B76EB6CA175654480B796610DB94A9655391E281160E0348D0BA59A1E44AB0664254ABA30AE0BAF135C - -Len = 1370 -Msg = BDC1CFD804C90965C32F231EFD3483B12D81CF36497D0C5CE5AD10E9F1D6A47690123D86F5B7D92A35B13A4A19B6BECCB493841C5D78014D7F200DB2E6AB53EA9E9D0F32371E037E14F5E03359A5F5682577E47E08AB5BE223E6C34039D3BE6CEB345F2CE3C4BABF4AFB0CDB336D97CF06C6431C142FC05B50DC0700EA3ADACEC0F08078A5F7EB61F4C6A7015BDD1519389B4FAAB4F93051377B0A324FAFE3AB84F2BD31FBFBDD919BBE9CC0 -MD = C77537F3AD906564C88C75730090BE000A9F6DB29C38E35F4B742DC5B21CBADAA49C1FA2C91B0AC8A2716186F264808A - -Len = 1371 -Msg = 182CC05EA535B6507804ECABD9447E181E602C8B80AA08C4F594753F4CC8156DACCC95263AE798D21438E085A4C68E3B3E29E99B7B005CD6E7479D113B255804084123C3313DA10C6D205B384809B5600ED73EAD804B29CB2B39E478941C84C937D6DBE1B670E0AE4C40316431B1DC9E84728E079CD1C087823471F599A2B02EDB097CD17B251DC10AF677F0E9B6254F2F7BFEC1CF9A30F4E5790CB671AAAEBFFB6862D8E75195D2AEAE9E40 -MD = F4331D436240EFA8FD169C889E2247D15BB3BF33598ED57C68948377752A9B1267D10113C0B392427115F88EE0B99794 - -Len = 1372 -Msg = 6DB97D9CDC81366D8B1652EBA9608590A389871428F38725C8665F571E2F69B12D2268B6912D7AF51EF0C3B254ED335F3924675B2A6F83699705D3CD5DD8B2AF4A63DC44368DFD6F5D4E15696F4FCC71D6727ECCB83734AB9243A6C29C7184BE593D335222A2C1B15117C7FED7527B8D5ACF773DF6F61F34B79A225B66FF74BD1CF839C5D5DC28E08FEAC32A9C4959931D114AC39172A1F6EEFECFD0437D86309FC8538777A030980DB93610 -MD = 23A4FDD7304D033434AA7AF4652E1D8BB8056BA969F779C7B9BDAA557D835972BD067F058515642540477041810EAB0E - -Len = 1373 -Msg = B71EDC0731A448ED973F53998CC6988AE0B5FB1C8A7B75FBA3975C6AD65E2F003528D6B1BEBFB236BAE5D731766E97784EAC74EE93B432933F72A94B063BE3ADE93AC63CE35A78956F9FC00063EF6170B565EDA7A71294570F0CAB1E80B924EBD343AB451C96A093D9D8823B2CD2287C45298C800B1433F0C5496C1652008147D7F87B160F717E6F57BDE6A5974D46F25CD8CDD9202E90098487088461269E21E581F12529600E68D6715AD0 -MD = D6EC3B7BDAEB6711596643FF639F979BD67DE7331D66C76874ABAA9147E9C6231F5F368CCE04CD2217199D242F2CBA87 - -Len = 1374 -Msg = 64FAAB8A8E7D4548A733309F81FFCA40517CEE9EF4B134157940B0E52C8F071EC60F073BF95C1D5172999783B8DC13C7EA5FF5E487E04E681D307C89AC67185882A5DFA18593D3C6552490A06741814DD43C333D2E70BEA94D3DC2100FC67886B27378541EE26D8AC08D14BB1A0BE10963B031D821FCE5FAC64E267307F04EE942F5F2D4B5CF621C2BFFB6DCCD03A200A11CFBA6ED13E48E9DD9D9BFBA1851159BC9E8AC4A69D0A97DA1AE88 -MD = D8B26325DADF595683B0556E56D387614D45C7DBF8F76059A9A75C3812BF87A23472881805787456839ED904BF31CA4B - -Len = 1375 -Msg = E8E01A8CC8EA94EDC5E43E3B1E147DB402CE56040B87A3C4036D868AB599C4B10BF522DAE9D96551C29B2973EFD816310DD4EB56DBCA9E4F4BAF51989A9881A5C5635C4C0D6737D5C34C89C6A5F0B23D4CAE3A72FBC6C52E3B660BC9A169AA805580B804DB77027159CE5581C5479A070FB0781E059FD422F7D17C7BC14B8CCB600ED857E1C0951C9DBD9EFE72A65C2D937E9405025A251DD5C8BEF9EB191D89F035A660A4BBDDD74BFE8606 -MD = E2AB5059E010AB8068F3149FC92A5A95FE41820523D3A76FEE634980F772BA24ECAE85327D2A4019EFE1CCD4B2E4950D - -Len = 1376 -Msg = B10C59723E3DCADD6D75DF87D0A1580E73133A9B7D00CB95EC19F5547027323BE75158B11F80B6E142C6A78531886D9047B08E551E75E6261E79785366D7024BD7CD9CF322D9BE7D57FB661069F2481C7BB759CD71B4B36CA2BC2DF6D3A328FAEBDB995A9794A8D72155ED551A1F87C80BF6059B43FC764900B18A1C2441F7487743CF84E565F61F8DD2ECE6B6CCC9444049197AAAF53E926FBEE3BFCA8BE588EC77F29D211BE89DE18B15F6 -MD = 36139336110D1D6C27E4CC1F26F428EB8BDBCBA3AA9FFDCECF72009FB46BFAF9E3464C48BEFA4745BE36C697DD3BED8B - -Len = 1377 -Msg = 52C72BD51E24E67F69619F02DC7FDD64EF2ECC334E3F425CC96D9B634A0FE1346046D4F7E19A7075562BD22EA8B335AC3E1068F86254B43DFC388B702E77D90B73BB0EAF6F341E0CF78DA95C9D098911E7A93B691160CCD7615AB5F7BB356D5551326EEBBAA00D6CEC324BF08D46DD0092062840BB790C5D4145EA722B7840A06B4F814E0CA2243DBFB1D9F869A2711C691004FA56CE16CDF67886C6FD0C6280C4A0662DD7DA7215E9BFB3D480 -MD = 3EFE30DFE1C3ECD27A4B7AB3CA0A070D45C9F03F11FA1C1396ED4E3780E2A1C1D294020E7182C74B3696F44C42B44695 - -Len = 1378 -Msg = AFB597E82538398591806218893B1FA841954B165037B929D0B3524F9FE10D9F0427847F565141EB216E27FD2A74A7293D3C6EC0C6652F02E8F68F9CAA1C1711CACE6681E857EC6DE0C2F4ADE4965934A0C2CC54B2C3B5C8C2F4C8932FF2EF22860EF81776EA18DF6C3E03E9F61C845CB8971C63DD9D7DEF53CF4EB71BAC71890E08855A5134783A2268857C5098C30906118DDF44A60ABDB8289045F183936F65E5F036D92A5316B05DA64B00 -MD = A151163DE10D224E4C374EC49D19F24E3C4A2561F958C8E897AE9EAE7E535E2DFA02D907D672B4F15E2475359BBB9229 - -Len = 1379 -Msg = 791B9415322D15723051857ED74D2ED3C7C6576BA23E8AE8204FC05588C16C8FC70D6005ADBF7C96189CC8B0CFC2CFFCCC6623ACC59E5C7AA94130308FC98AA1768279DBBFEBE893511B10C23B93173D0E0D0045679F0DA7E3003034F01A7078D37A4D1061D48674BD924612E9433EE034D3EEC990DDE038FD2276CE680C933E6C987F20E3ECAF01012CAEAFBAEF8CECC41CB42897ABC51D9C4325507D22833F2ADB7132FC8C653357308E7880 -MD = 0F999F9B9BECC6B626AAA5362FE6ADFCF6E9BF5647F80D1B5BFC38A4C40B73B4EB428AF4CE4630ACA8504F0D8E93BE89 - -Len = 1380 -Msg = 2CAEF41468981905BE646B56CCD195134864FEC4EBB1D745D797E0F1C0248E7B56C2DBE73EA06F0BBE9033AE741635B947845D0DC4DEECEE855B4C7017E638468F20363B60273F6AA8EC3C5440E9D5D8CF6EEAC954B54D37343DABEFF6ECE1D4F9C85A5F79F7AB64C10B91CC6A9F5309FDC8C36C5704870537131E9918CC44FB308679EE283E729A097329AE4BCFDF8D6244EF97A7BFCFDEF00A6DE4B1B34A5EF2BC34DEB40C98F6AF8C7BD910 -MD = FBFBD2AD104F75AC595FF9CF26B946FA53B3F239CCC5B7941E90172B72DB15714B5ECC9DD1CAEFFD9E25A5E6D9C19BF1 - -Len = 1381 -Msg = CD157A1F0076499D06D822BBF48EBA19FE4D9EB7A0CAB55581EA89FBB362FC67FD4D58567C7AE04A55FC4CF821A28360911782838ABE0EE4BEB982382059F5E4E944338AE9BD974E9B4430B65FC8759D407166D6C4AB9EE23F430E7018988655BE974A8FF08E4B932858FAB8CD314804FAA12B51B17BEFFE6846B0D3F3A5A42A13D844846ED813405D3DCF7F06C51B995D6DACA4EA50C9A77A372E4D67C295B1362EC96F6DC442032D56FB1E68 -MD = A5856BA5A0DFDEF7F89088AA770AAE120EA23F14A309807A6C0DDD7364E98333AD4E97E4969FF471E171915CFAF0F872 - -Len = 1382 -Msg = C4E9236E259392165FFF38AF36A5797AD66D670D0CDD283409CE1B2DEDE1E3D2CDDD50003DCDEAF3602FCA089DF1749B5718CDB1303488DC3479FE9C6D08A9976EA90A207628FDCBE513793068A8D6B1DC7B2CDCE92BDA7C9E3AAC8EFC00A9230929B3B4752B1FF753E20A8F79DFC65FE433B4B2A4BBA4591B053CAF333F05E590DD9BB5191AFAA8B6AE12FBFC92736B5AF3DF31B3900C76A443B667394FE6AAFDC0045D4BC3AFFDF4822E565C -MD = 46E57B95FA80BEB92FC7ABEEAE0EEF148A94D3A7ADCA84DD86E1164794B38286A142F03C322B4150AF64B68F23D4B734 - -Len = 1383 -Msg = FF273A0DE1AEA7B291BB606A75DA03511A80372BF12777462BD2151B6807604CDDD0DA1912691FCC03143C43F3E01E8EAD912FA16A2C31AC1C09144ABF6A41F300254EE0DE5858AB6E9536FC6C03F6DBBF91CF2C1DE2604BFD662072299C6A1547F1C3433B91BEF6616B7CD723433842ADCF6F1D38D3B6E3B28F603C068F4CF1712F3A8A2B7C5778F167F835981665B1030EA8D2591C4C5EF22897BE6BA626853D0F180A899CA8377943829646 -MD = D1EC0FEDC0F30CD36FB5D712CDC022CA1FCC521A072D00ACE8D8253C3F67BCB5E27F030A6D8ABCC37B7A0B4615A59B8F - -Len = 1384 -Msg = DB11F609BABA7B0CA634926B1DD539C8CBADA24967D7ADD4D9876F77C2D80C0F4DCEFBD7121548373582705CCA2495BD2A43716FE64ED26D059CFB566B3364BD49EE0717BDD9810DD14D8FAD80DBBDC4CAFB37CC60FB0FE2A80FB4541B8CA9D59DCE457738A9D3D8F641AF8C3FD6DA162DC16FC01AAC527A4A0255B4D231C0BE50F44F0DB0B713AF03D968FE7F0F61ED0824C55C4B5265548FEBD6AAD5C5EEDF63EFE793489C39B8FD29D104CE -MD = CE3268B8EC923B3331EA2CF85132C0733CF8BF87DAA544F8EE386D5DE9FBD4D8AD94E00B705CA5B61A3C1790B650080C - -Len = 1385 -Msg = EA61FEE3D84881B73252C723EF892EE3D60A8C0E7110CC35D63AD57F0763804DC54C312A2AC900A3BC853544FE1B9E8FEA9919DD96C7C4CF2ACFF778A7F7D7178D60E7EFA92D2D4B799DF82B3211EEFEDA49A0E95EB20A7396295FC7C30DC364D74FD23C324F1F012839B51E972630AFD62589AD3B153CCD5B9BDE845312D62B2A62D6D0C133643AD6FFF829B2F4CDEE0A398484FE203A853EB509E1269CD5EE7E7FBEC1B0FEBB044AAA36016A80 -MD = F72191B674B726E1F1338B7845F0731639B980EC3C75F77D4E2E82443CD734BCB8E6D079C530C45DF2361FCE4444B637 - -Len = 1386 -Msg = F1586589214B8CD84E5D927FD50736234739505CAB71DF09B22A38518ED55A880BED800C9E631F6AD8E6CBD3A92412A53217E5B8CC92E75235FEE0B383C7D336918B029BB7187978F15271D48C7022A99A048F93570E358FB8BD973FAC8D68D635E5C49DEAE188F081A21B6D3A029417DE1066235E2DE8D52FA10F4F593686BF534337AC15500DF139C391EF3E4EA43B4A1530498BB6E90AD08C1B7E0878AB1AE94913B36185515B3FBF7CDFBF80 -MD = 88D7EEF9E06566378E996001A26A0F883630D12FE3E234CB0D83633E98C7C130E061DBF82B2587A77DCF9E1F1D5E7149 - -Len = 1387 -Msg = ED10EBF6ACDDEECA6F59FC92B58DED1903484E3760DF203E6553624144B1F2E092522E1144B79DE50E741780BCCE881B074CD9188A978428B1246111C894098A76CEFC4D7DDBDF92DC1D86BE09271F5A85D058DA63441B51AD5C10CC9E9262B0ADA8196AFD5C8B8B89D5C69FD4CFFFFB402ABA352236D582A16896B338A69B9571C79B53F3B0103267516998E4A709DB983462037DC23132E4611A4D829E3190CB58F0FE447BDC3AA224EC768C00 -MD = 1B47E1BB4F3AD0D12D064C4085D696F03E00BD09FB158575616F9835CEB37E3A784F58B244BFEEE8E2D92A22640B7EE1 - -Len = 1388 -Msg = 4EE2DBF84BDC18BF4069449BBC6FE90C089D53371B8414D74F40FE3D43FF5F61541C643E259A0DB2A34EB8E7DA502C92A3919F29C61FD3365E8D7F571FB862341A2B6AD9BF0A4F71413188C47C3D4DFF35026AB91E55D4B3B659EB721170E89FA87E076124BFE598C254F5D9B9B5E1B7CC96E45F11402729FF7F8E4071AEC38C8EB303E3B7889F7922B4C54B8A66B5131D712809A7C18245EA099401FEF20A89E5F5680807BA7AA320CA30250B30 -MD = B8F441F19E17F46EB66E83A9621AFB76514E8CF0281CB82458E1894F2F35C24C8FC3E93F5573E5C40956FC4CDC3A58C0 - -Len = 1389 -Msg = CFB1DB8692375D3784AD79DA62D9BC0C04365706936AA01B23FD2351BEFD1BAE7DAF96B50C6BB7E1FE2303C50E4634C0812E3F097E123F6955ABCFD8F5CC6E37F68286A2135A327C24766311F5E1595024677F5FB1B3E0D7204C3797729A6EE71826D89B8E96E3D31AB98BA6CA2F266C39F8710BF4C15F388306077153CC26F395806FEA930C34BCEC873A20DCC2F9CB2D77A9C3D4FA3B54B20FE1FC2AA89D5BBF0C881A5EF04FFD73D51F701A10 -MD = E3CDA3EC2FDAF2848AEA6A54AFB2B70DAE4278F958CD5EB7D9F1DDA6A310E8031E83F00D2CAC42483DB157172201FF32 - -Len = 1390 -Msg = 8686F3296230432C11D4C534409C7F6C9410C6F01791E137C456874DD6242AB34485785F08233C78010C5EFCFE3AF755B9EB61D0E311BCB971EDE86AD070069599D33FD628DD4C818C318462940AABF9577199120D7E3840C2BE07E5BDA2F12DB777BFF7251048ACE87FE6B18F33630C2D6A50CC9A6B05C2C85A7A9972147A447CC036733B49CC5722139A2B299BA81ABCFDB83544C7F711B602A7C8372B0436B304C303151A4BE6850F315C8608 -MD = 6AA1C85EE2755C0D6DA8950B1BF9AF08BC64314126FD179A872226930544A4A2EBD5C19F68CDCD624CA0A916BD2C05FE - -Len = 1391 -Msg = 16C331314AAD721AB955B9C268B2B40C7989E438D91ECF65EBDBD4ABBBAA69D77270FB48BA3CF63B249E78B58D9AF7A57E49E6883E1457188E20D1F8AA8A04A3ED5688E6E0AA4A0C011D02C04EA127D0F66908FEED9CA100E66C976DB5EDD08B832402644537E2ED1BAE1567418B11F017C026E473236B90EB1E171288AB04B945A494282A6FCBFB901A7E567AB31A89A30034F78AB6D8D199C4F03470CBE2BD8374C81866BCE9E91233E1BDAB52 -MD = 662CFD60044F11FB853D76FE59BF5EE8D1E98BCEE8D4F0C35C3E897FFDEB2B0FED5D7F6F99BA3CB89A19DD29874DFE48 - -Len = 1392 -Msg = BEBD4F1A84FC8B15E4452A54BD02D69E304B7F32616AADD90537937106AE4E28DE9D8AAB02D19BC3E2FDE1D651559E296453E4DBA94370A14DBBB2D1D4E2022302EE90E208321EFCD8528AD89E46DC839EA9DF618EA8394A6BFF308E7726BAE0C19BCD4BE52DA6258E2EF4E96AA21244429F49EF5CB486D7FF35CAC1BACB7E95711944BCCB2AB34700D42D1EB38B5D536B947348A458EDE3DC6BD6EC547B1B0CAE5B257BE36A7124E1060C170FFA -MD = DDC398879BD16FB681FAE1512E3A1AE7ED2362DAD8BEE0D12D2256B2D856282043DC0CBBC0F63197B75E9982A1DAA8AE - -Len = 1393 -Msg = 418FAB3A13197089C90621B9BFE43DC2096DC0A0F50461C17AE025BCFED1F8DE587F6AB515EE1987C6D96CCED7F80F9112ACF4B67BE67B0247414EAB033DCCD6028703BD346DBD61A478EC67C17C7DC586563997FD8AF3C9CCF7E5D66D25386FD7F056122C43788F502C14DFEFE435720A277DA4FB8456C237C2828A7442DC934B7D1B1D240562A5AA721BBA9A6E87ECEC6E55790D71B00BF1D8C27D56ACBC553C6136839046B1B111A0919EFCD600 -MD = 23B25A53985EE225F6F932AB31E420EA4514EB503552C97DBFFEBD56F502B0E7331FE5F6B840E2D222DB21E8C6F51EB9 - -Len = 1394 -Msg = 2AF8395D282C705DD7A2DC02E6F79DFADF23E7E7DA63FCC4E14D60FBBBFD723F5CB0C861AA79AF16C425E11D28FAF444C0C1A8A769152C92AA9E8B366A8553C596D68B0290F19F47A3F7D597CC04ED1A0AC32AA7560027633E8CF814208D6DF5972BB2F8752FEBF4B23BA23CB9CFC4D5908FF74FA49938966FCC9E95A31783CD9B60DF0590E8A74AD8176142C788C3AEED4DA04708E4F0665AD24C8A100E09ABF9D7CB5BE9A588F45FDAECBB81AAC0 -MD = AFB0FCC534AE90AD3F29F3FE54F016A412F5B689C490779B12CFDCB84F5923E9F4F9230E30F555F8AA50FA3F18E9C2AB - -Len = 1395 -Msg = 18975325469743A4A76EF7C718397A460A489DD0FB36D977D88FE12BD1BD5D1209362A1D116DF0E627F7C96187BFBB7DA8702349F246267D623BBE3C8B3BD69A74149D03DA66834D65AA7B4371842227D6D336456C39FB04CC61A2469C5C5C97F325B1A86D87A081599148E50448FD3ED41F21083B718E875B13CCB9070682A56F96DD27D60D13A15808A80422BCB26429B857B2DCEA20AD6B26B2B367B0F09482616152C180E84A907E8EB7A2D800 -MD = 036B83BF31AF1AAFB6F6035668841C48C45E5B06EBE5109EF5410678B7FA09E66EFC88314BD59BAA0FBAE2DB4D9E14FC - -Len = 1396 -Msg = EBA3F211DC5247D0EB7583D5A99C8A3A20DC6B82A392BEBAC86F083891E04FA0DB97A3B6A67062DAD957ADCE8F6168FEB5A9BDC8A708FF92970A66F930179C8DCC4FC33D39268C2347B2BC2D42FC27E64D4058FEE185B79547DA0EF0B07FDDFD88DED5A12EFF174C50D6978C3CF28C08403B6D48C36E15A244E3170E217C6E5F117E621214C327824C59176EEDAA2FC634FE9E05D514455C8BE239F15949D12367969DC6E5C9BB3E733DB09A68E2F0 -MD = 9E7CD437D4AD064FB258A1106A7B12177ED5A80B6B38C202049828E6B052C4C285C5A0D946C06313DA0C1997F31734A2 - -Len = 1397 -Msg = FC42CE9E24AACE4B51A0C3EAE31CD7E0832708318A2B07EBE636DA95FBED1A3195456FD4C465CF1E568CA6B5F015EACA47801FE50B739850CE728C25004D0D355C6405638437A6DC1A27CB10D4DE70597DE383E070C46E798E96191A326D4C6F42DD6F64BF8D2D3E87F5C892E195F2AD6ADF16D2865F2DFCF0759CD495925FCBC35D7F62F1BDBA3670FF0F3062F2975D6D82A532437EE3935A4DD1268BB280E2957BF171571105EB7E676546AFA438 -MD = 1A78E7B414D9B60BDB77A2C3B08E8B0864A9CEE69AD2C0089D71F200D7281EC23BBE00FBB88B8F78B5C8AE1FCF314DCD - -Len = 1398 -Msg = B2F147D74B33F101A11948F56B0B7E5FF2A1F30C5944B32ED076E09E18DF1B803CC368906E1BF021B9D3305E8B992594B2C461CB7E89383C7860D4DC1CBC4B503D5158C1D81CF752483E46C28AF0C8BC0A51A9E752AE436CF5D06A0C4CB15ADE6BE96AEA3365405FF63582ACA21CAC5F7B9BE377D264D599C410B8D01CCF332CE15D56F9FA7B79919DEA2359653E8D7F0E9FCCFCC48D1F9769B623EBE4E2E6973D792F790B63D969FD5290B93D5540 -MD = 69F7BBB8E1DD4A3DB01F441D47B29E780FB7F9AC86F4E8220A33F857F0973E679150BA057A2C82DE1F2A45D38A3D746F - -Len = 1399 -Msg = 440EFCD5D8D5CF760A5DCAEAD7B30F9E0BC1261044269AE4F9458311DADF289B5E8A8FDB1214B650F9BCCFEEB4D0B27295C4539D40392776667B8146CAAF5D8E7DE6AF353EBE6305635943A53DF4391C88D8360168D4190AD62FFB48F31FE986ECEC14554C2377E40F426D674626823575C1A40B15C54A706203A70F473CA441300CA70BFDB191050CFEA75961CC631768EB20AB21F1FD8CC5D64A5DDD885917D15E16ABF8B078A59B6D8096E76E1C -MD = 1AF260C05975B756B57C97971385FC075E7719EAB3A6FE9E947B676DE5A69CD560786F090C87575B4CB3246588BBC5D5 - -Len = 1400 -Msg = 5ACA56A03A13784BDC3289D9364F79E2A85C12276B49B92DB0ADAA4F206D5028F213F678C3510E111F9DC4C1C1F8B6ACB17A6413AA227607C515C62A733817BA5E762CC6748E7E0D6872C984D723C9BB3B117EB8963185300A80BFA65CDE495D70A46C44858605FCCBED086C2B45CEF963D33294DBE9706B13AF22F1B7C4CD5A001CFEC251FBA18E722C6E1C4B1166918B4F6F48A98B64B3C07FC86A6B17A6D0480AB79D4E6415B520F1C484D675B1 -MD = 350B4B2768020EAA95452B90414439A38BE03686131D45612C1B85FE06FD9196F27D221F4FF83251AA8E69AEF72F904D - -Len = 1401 -Msg = A1DD8A52168BFF3504304272CBF393FF2297B1DE115511B7071FAF15CECEA7C1D2E498C46E9BAEFCB0145D4FD220C38271E5AE6EDBC482D3214E3B6AABFA141BD981450B130E971BC0E12C0EE89DA62281BB9395C9935EFE474D8E6F6B99BABFA0E4A6538A90C51E6567E1C8AA7E8EE62E8AF6290E3B74295C023877B8909F00EB53755A62B089C0924382CDFA7DA75521056CB6D1C6D6FCEBCE124C7DCAC671D02BFA5E5A8A49A4B6880F33ADB88900 -MD = 56C6AD095CD945E506E93351114993B414D0949832F11E28609FB3C3078D69A295DBEC35AC462E4011F68DA82724DE4E - -Len = 1402 -Msg = AB6037D426290CD66B89DF7DDE674805C863F8101C2D76443B1BF25707B695B8174F0C942FF7D2F952339FCC936B2897E7BED9C02371A5DCE95D45DA60769F3DE0DFF5A42B962AC9AF1A1612DDEF9D2D586E7E3F090C1C34B9D621235A5CFE124BC4153A1F78DFA15261F7681237D7AA132E96300B9313CF456F0A04188166E3AD6D39858D16ABECF77244BAEF5C72AC491724C8603CE01570EA1ACEFDBBB50BD9BDCFF0BCEE8C1366B0A6B6A5ED2E80 -MD = 6A479B2AA46D79173D5ED29647DD4787C517515A3D767229C20801C7D1EA3284929AAFE6E9AF3F7E43CBD5839DAE1622 - -Len = 1403 -Msg = A3550EDC3CBFBF03416D72E2D0597D87BEFAD3D31F5B34C4FC50EC47E9CEA45E3565AE04D27EFE21DAC37660356B1CF75D3BBC522CE936A22F8219E0F27DA6BAF3D00D5793BBC2A9CF0960DEB3221844E2C18E37BA2176098C3656AAD8E69FEA5C76C4AC9EDC05F19B63D7D867A6C848899A42461EC6AB4687C0667C42C539698E755B6DDFAA6F4F316BD4A8F91DD173257A309E6B62A3090E6E5AB0DAAAAAD1B8F2DAC5D03FD2CBC3B804A951143160 -MD = A83AEC8EFBFBC7452590F0F293A931F68DE0E22A7D97219B48BE7993D5BE7186D89BAB014280F7EAA84DC1B332C4E191 - -Len = 1404 -Msg = 338673A0B843331C60FC9FF2EE15A4DFBACB8E77DBB541AAC44E2F6A9226355535E54FDEDE98A71D970F21E1B549AF75C7F91DDAC6693FD1AA4AAF970D3C2D88B4636DAF4153B3ACB92CF76529D9ED18D31EA1BCE1563F1F3A076F97C58A32583B137B9BED88D9A8DE9648E14462A7154226B949EDA577D3888F7C9CCA560FBB53808B32713BF62C95515D857CF630E3EAB52C50CBDE730B48951D165E14FDCCF9B5CFB9ED2169D9615002A6576CDD90 -MD = 26239D5F81BC7EB9ED7865ED99897F3B05EDCC9ED56E01E5357C7582E992B48A5914CF0BD55EEC8D0495F0C6DD6E339A - -Len = 1405 -Msg = 62C779F840173FA00C27DCB9171DA91E6A8E6CD65805AD17AC31435DEE8C50F5E3EBCC4A9A8DB116CDC602138914AF21BDBBB6A962BAF4C49FD73C1A55E2A3F4C44648E03E5201D6FC6D298BFC3D6716FC3A5C53989C53FE933BF16659BFCD46DD099790E2E617CFEDC88B7F5A48AA7BEE7AA5B910BB748BF089DD12339444EA9029A90554BBB75B5AEB36AA400C1082C1C92BD27F442EF0C93994FE3BBC4559B94DE6E3629A9498526212ED021C1980 -MD = D692BFADE32C277F02227564AB6ACE1D2725AD8E9E2B0CF340381663540C84BC45D751A5101174DB9EE4139C00B8AC61 - -Len = 1406 -Msg = 30F3656BC45520F876ED30757D6F6D6A3AB361C76C8E6C5F47CC7C81A4F0E25D8AFAFFBA6C40E831E6782A09B1EAA138D7933ADBB8C51D4E74B1504A8B40D7D54F70476AE16FABC3C64F71E9F9C8B62655DC2D8D082E0E045E133430378CB399A03E2AA0A6ED473987080CF2C5F8546A1F59680FC1A356A99801CB291EA68DEDECBF5178920F3077977B99BC704294092F4D0066CCFA76D38E6AD378D3A7D5FE1BE18C9F4589311AC6EB2242C812A7C0 -MD = 58F6867F29E51B2F71830F574813429A8A76D5E720705A2A6D55DADBF4B700397CF5B41276A4712E85E4D5C541CA3D12 - -Len = 1407 -Msg = 1FF51A1F8BDF6283E70E07F6BE761AC51B6731DF858232C78809E1526010464A70DBEAFCA5A165C9E1764A0E6C6EFB3E911D034E9BF99EFCBA863216C261A404B8B825E9E8098C226BB7D644CA4DCD219DBE957992A82D1950E7D2992FBA55C7C3812D61D51ECEC3A6ACF5F09F36E480F2FD99BEAD455897D32094A9017086E5B813CD39E2C46BCB31E89AD6C6BB10C58EC67D89E4FD4263923EFE969D89F561A745FAB1D1B81BD48DFBB27249C386CA -MD = B0BAFA09B31793AC56E91D8448B9C97BC832634F5136BED6A61319EF5CB7DC8069F438C36B415B4C6356607E76E28800 - -Len = 1408 -Msg = A5AAD0E4646A32C85CFCAC73F02FC5300F1982FABB2F2179E28303E447854094CDFC854310E5C0F60993CEFF54D84D6B46323D930ADB07C17599B35B505F09E784BCA5985E0172257797FB53649E2E9723EFD16865C31B5C3D5113B58BB0BFC8920FABDDA086D7537E66D709D050BD14D0C960873F156FAD5B3D3840CDFCDC9BE6AF519DB262A27F40896AB25CC39F96984D650611C0D5A3080D5B3A1BF186ABD42956588B3B58CD948970D298776060 -MD = 4CD1367112C40FB7E3919DF20697A4E1CDC55FD0F01BE3953B1998B5FCB473E76E9E75D5D82E2973B3DB89538554933B - -Len = 1409 -Msg = C0A3AF99262209CD3D272635B9DBA05E7A15EF5C0BA6326EC15C1C98704884C0962363F0B9B441C7188E3E2FB8F12DFECA0E17C89DAC0D58D7206FCDC50259990A305BCD1B748E8E00E9757094B5869294136E977F889D5A2760FCC03678C283289397848039FB9E7E1F45EC308198A4630B48FDD54D57697A190653B23251385C04DD77397E9C27428AA9202554A1C170C813A4FB4B9322BE237B406BA1D5EA2E8F1CA247A135A16AD8E28B6724855C80 -MD = 0BDF4738F3311A3B1A5933D5D2584999DD3DB98EA161C001EA29A9B03986DB4D4581C21516DF5FEE59A417F7B0061645 - -Len = 1410 -Msg = B0BC6D10B7393F90550D82BDB1B21ED87219D301CF90F738557E606680476EF33A181F939F67A65B40D6BE99E4715B7DC6C8A78F78D38C94D93AD4E342E25543A18381D3E7CC932D7578F3386C0ADD1C20188100AB99FF739D6E9961F86780089DE081F0FFE54C38682A1B4A320A2EE04B2EAFD2D8E63D691ACA60B35B49A3AED81110805FCDDA7819D6A19419F507BDE40C998B2095294714A51D32D46247DCC162D5B24F4B80B9C631DC7C542323F080 -MD = 1796969BF08F867F46F17B1EFE28FE5EEF60848AB80BCFF0EF8C816BC578873580DFCB8F0A1C0239E6F2222872B6FF13 - -Len = 1411 -Msg = EC886F18CC5512BDD6AC13D5B6711292FBCE5346EDF45A688F4130E5914E565EBBFB4EB6244759D0C061170C730A58DC4A05D9F7CE785EFD635AA625B47D6A5A2BD4FF4F12F3DEE95CFA066750C5EBFEE47D71B511184607EC6ECC71DAFA87CA7348612F02FF564E468B24216C9ACC6A9D0259627ABC4CD470B50FC4330D60643D1846E1B7594B01CBF63505EDC5938AFFB8A497BFEE43025BA7FB323EA46F2261F04ACF96E381DDE0E4AD3CD7D86238E0 -MD = 80E89041C813E6405FB276084830BEB26FFEFD0E093286832DFD588A37798361D0D6CC919C77135AFEA1710EF7376C6B - -Len = 1412 -Msg = 813E99662714AC60D61C1D7D7F7A5269D8902FCE95B7609224F8CC92F73EE92385A27E670D70EDFE5585023F22A0053BE490554AB97ACE2D0997D7BE77F61C9FC192C0237E5688FF34AB7CD441460A4EF6395AAA2C7F2799CDD143531961E6554A93459306874965426A3E1C5A075B91381DE55CA07D2A783557B953F3DAF67FCCDEE5C0D027D335D07615B75CE699F41EA0B53F5B1FFDB2CBF0116BA1531387E51FC65F9C829B2A504E794932BF5E3A90 -MD = CAE58F1834CBB07B0ED31C375614A7410E52B011580E9CC2C079947421B57A878F96C7842DD248BB56C8B86E7B621975 - -Len = 1413 -Msg = 60B651B269E159E5B8C5A1322917C61AC875B4F508F3534D2AB8545BEF7F12B8EEDD363DE66BAD766C86C102E491C29CF45FB7A114FA2BC7A4A95D61A96F8B159244FF088528F7B5B732FAB280EE2272BF4D4A97F167CD546941B8895B27E170DCF46CFD7E045810AFA47D16C8993AB09617C137DB70E84BAA445440F2DE8AD261BF74722DE32286BCB798393CE4F997B2B01759908854C4C45391EFF7BD4F1918F7B9E5DE12250A03CF09A81740C79738 -MD = 07E105B6DC33B31DB5A614BFFDF7F683B6E134D11DDD19004BFE54E2375DD7ADA37365009D6D4A7F0D51F92C6D98CBC9 - -Len = 1414 -Msg = B8E9A3D80161E08435E4993A2B3D8FAB8EE51DEB9431DB1A7719E24563D2D2DC4F8A4A3D32DB8E0A205090CFF3656BEACAD4B680D41709E5933943B49DF67803C9B0502637B15382A81F3EAA1A91240347BE0595064BCD480AFCEBA8F465EBEE3B2AC41010660453C1897366BBAA433F6A3E8CDF9901AB7A4D38C8772F8BF0A8E7E9D637A61CBD9766A4554B8759F7750CB586D2BE320A18BED8238DB5C02CC227F4311D02C3F12C0C7435C036CB43A0A0 -MD = 198E18896ED07E3E43AC5EF16ABF5E9B3600B1B8B74D6E5E2EB4919E60B12281048F69D6CBDCCDD103C713B78A4C066D - -Len = 1415 -Msg = 3A65D42C96E4AA1CD020DAA204E7EEA764F1CD551EB2B00EC645C12427D10360A140BC91EA1CAC2EDD405DD863DA17DF51ECCEAA3344E9B79575F6B86823384024DDF524217A90125754891E2C509AFD15E9D34C414100BCB5D9B5AF98E95B54252E7C82E7230C1249F4BC5E05CD8EF2CDE11474628185AFC3EA5BAF7081E4E84F0522976F9C9FDB293721DA2BBD90B955592953CAC9635877B70397434A08D15F8EA3EBDF62A28B0869781138CC56675C -MD = DBD03FF7979423F25FBD8C76D0480A9C59D2771E541340ADE22173BA6D4F672865D729A87E2EC72F4BEEE023E962A5C2 - -Len = 1416 -Msg = 06CBBE67E94A978203EAD6C057A1A5B098478B4B4CBEF5A97E93C8E42F5572713575FC2A884531D7622F8F879387A859A80F10EF02708CD8F7413AB385AFC357678B9578C0EBF641EF076A1A30F1F75379E9DCB2A885BDD295905EE80C0168A62A9597D10CF12DD2D8CEE46645C7E5A141F6E0E23AA482ABE5661C16E69EF1E28371E2E236C359BA4E92C25626A7B7FF13F6EA4AE906E1CFE163E91719B1F750A96CBDE5FBC953D9E576CD216AFC90323A -MD = 878AD52FA09FD4B6465083C9C9E6A2DDB81302E2DB0CAA934D03A196972ADDD4BB8FF869BF0069E970D6BAEB5BBA9B79 - -Len = 1417 -Msg = 630F25144D78BF5D608715AED30D38FCCB9D529181D7AF8C13840A910912DC83DD22AD509C733C04D362B13A8A61568AF79F78020B83039C4DD9F793299D46DF5CC5DFA6D1A43A0497432CDCA64885BF7F091149E07AA2564A3DD1BE08A8465A7DC71CC41044AEE1F193C9D27B12A7A1B986C869243A560FDED3812C5D17A1C8B8EF47CC0EABF9910A9C8EA0014526C211D954299ADBDFF445CDE4517C3D9613E52F35EB0BC4FF6B7D0322E47B36688E1A80 -MD = E9D333E5400F5E32E2ACBC7B8BE52900E24BF24CC23FBDD8E496E481E88F14CCA3BFA085012C9EC020D768B68ED967CF - -Len = 1418 -Msg = 81515F0C225B6CF2BE73CA43A2B453DD8BA9310A72969A11399CAA2CEEFFDD68B44B1EB2C6AD5C92B15901CC7293DA540B50849DD4587DA32BD2395DBFFC4573F677CCEDBFF15CA06A14E737AA607942E31BBB16F96BE637B6ED4EE8FAAFEFDFF57EE9473ED97BAA6D7D8ADCB9F5EA8DDDC8092BD695FA669DCF9090C7F61417CD583A935E000E9E7C70348BA48DB4368794222D613B909B439B6D630ACFF7CD5A00858C5195D675C824D4B7EA2E6018C400 -MD = CF0CC3D305220ACA9602C55776A28F177BF7B219CBD43DFBAC8704490614C5E6E81E257EC5E67909214E43C2EEEBDFC2 - -Len = 1419 -Msg = DDF22A40EC1A0B060063F956521F0D4F5C578554F845600C747C7DCCDDFAADFBD8ACDCC6B3C4730CD22A0356FC5FB59D3597C704924F99F143D57BF65BD009A8351F04C879D75AE6667A9BB4A91DDC1FC7F4BCB0FF420E410C70B9CEC1672AE831598FB482216822C394925AFB758DFCE484F3A4FD41E2D072EE15D7DAE46858FA595B6C6EC51DF9D56FB4DF693D512E8F9597809D7C4D4A43124E8DDB196E924366173952DCDD9A385B0895B8118BB24820 -MD = 23D6A39B1EA68D8C0578A72672B5B7D73A63B302341C1716F31C0D8FF21C4908262EFC53C00899E07BAD293911415A78 - -Len = 1420 -Msg = C0D30C478BC1B4F00073128BD8D67ED36109A807E8950278F99F30054E610AB8144AB0EA6CFB7AFD181BA4A6B08EFC900F52B418D649A864464C05B27BE7A1034EF537AB4132A4D39D20D6E7FE5C368FB281E16E624A3AE185A89BDFADFDE23E765654BF5DB95DD04BC8860EB03AF6CB2D44F26B75852FE6C1EBECCA1BA0E1DAA247FE2AE936A7A7389A0358AA52EAFD12735074342410BAC6D62665DE6F60F1E381DBB70D24E9DC0F9B39CDE4F48A592980 -MD = CD3070562DECCB0A8B29D05B9AEF12C88281E6DFE064EB75D3BA574F90C952F635FE691CA2AB32EB388C1E054A10665D - -Len = 1421 -Msg = B18568A3A8FEC3EF94AE11FC3F950E423446F6D598B31593C2EF3C85BAAA314E388446572B4A1DAF972C8F96ED05FBD30C2A7D9519F9F4D481691D6D80806BF5DD2A6B6BF4DFF749017F24AF44DD2802707637C9B94037DC75EDD16DAD00FC4BF273FAAD88577AE66E40D7BBA9DF1771E6EB4C8DFCA59F3F80DCBE713EAD814532E05E23D29E24E52530EAB98360799F69F34D84C4CD406F0694B07ACC57A6A5A3A5CB98F206FEAFB774B16EE8222B88FC40 -MD = 5CEC7C4677513F5066AC5A08535C3721886506EEBDC9297BB273240F1040ADD49519F3AE0C67FEEC8209D7CDC447D370 - -Len = 1422 -Msg = E3C6B699E534C149A2F343D2E1D626992AA5A59101788EBA6D878EFB946E281CF95752DB91169984282CD9BD610C217058AADA5369D7CA45EE4B240AB84E8F8FDE3EB18A88015DDFDA475C146E32E6047AF1365899DBFF520993D42BBF6520492F7E3A1005C2368E2C45BDEA46B2B7AF9F17783CD3BFDD346EAD18142B348180FA173618B7385E5561ACF1EE8E5A11B583A94444A8B8483A5316073890396B14697AB3EA2DB759AEFCA0D723E56B9C43C5E4 -MD = 87CF2E22B143263875672B3D1F04002C8A66A8CFF09E702F2483D46FAB5D619999D4D8527128E3ABA9C6F2DA32D131AB - -Len = 1423 -Msg = AAE187C91F8EC85BB6DE3F46E9E30D176C4E070818834DB8FABEEFED1F51557C6BF16EE80AE3A7465AFC513C1C0B92CC9E1E14C6C8D7A03375662117AD498ED2300799ED8B0BE37FF6A95D0D57BA4A9FEFB4BE43CC2B7C095D571986547F7825C83A1C6148891803847A7EFCEB5D78D835407D608CA8EA1E6FCEC4BB8BC26D700D04AD0C2306B148E00216421745478215917D3E5D5B17428C27A13566F4F87BDD020DE5A2B6FC4BEB0C0F73FAF72E5C868C -MD = 96DFF8BCA8835C26DB79386B0A64B339E262798FE6A122CE28F095E5D7091806F9813FEE4F42A3AB82D4F5DAFBC7E7D4 - -Len = 1424 -Msg = F1C528CF7739874707D4D8AD5B98F7C77169DE0B57188DF233B2DC8A5B31EDA5DB4291DD9F68E6BAD37B8D7F6C9C0044B3BF74BBC3D7D1798E138709B0D75E7C593D3CCCDC1B20C7174B4E692ADD820ACE262D45CCFAE2077E878796347168060A162ECCA8C38C1A88350BD63BB539134F700FD4ADDD5959E255337DAA06BC86358FABCBEFDFB5BC889783D843C08AADC6C4F6C36F65F156E851C9A0F917E4A367B5AD93D874812A1DE6A7B93CD53AD97232 -MD = 60071A7E2ECFAF3B5B2E84A677FB98E44BD3725ADDEEC5C37EC62052D57AF7B687A063FD39C8F6E86F79D97F246C757B - -Len = 1425 -Msg = 27FF5954E8891FCD89DABE745EB7CD5958DFF6D7E3E3D2CF97B2D0E2EE4CDAEFDA88C0758648BB079FDBABB329133F6634869421B535E48F989334E8A856ED39DCB05910D58DC95781F3C257B40BE661409C132EC32F608AE30D29C54A3654B1CFA4BDFA3D390C3C4A5E38F45A767BCB00FD0EAF9058609F1BB406C9CB74E407E5BDF239BA4E49436AC0372AF24085E06385798284F0DCE70945BC2527A8B1F120E052F2C07A4B053C157377563F3A90697580 -MD = 669E6B281264103EB121F4A6977C3FB016102A7098614DE720C3523511CB98C768A4CE8EF45AFFA05B6CF3EE400E070E - -Len = 1426 -Msg = 42F0737B6AEA5ACA87B2C457D174D642606D7453D0C9A4506340BF1E512BE60F14E69BB3DEDB5B104AF7EC2C9081C8298981FBFAF0BD0E60BA4434EEE1851D921B04BE4C9AA5EC34448912FF855B8FFC1B21CEFCAA953501E2A941C931FCBFBDC04FF3BB20C5FE4F44350C940B3EAD03B51A9D96C0A207872EC9A0400D9F0B9034A2F52973DC162666C42B2EB62C79C00BC037675BCDB8B89A088F5C9D71D794ABA89E73BA02D6897F782587CB3D48D4EA39C0 -MD = FA3D63C44762EA314CE56B1D7B852BAEB52EA6DBF7A8AC5B0CCC0013250BE23C28C80F4B7BF06F51EB7CFBD7C8AA9E2E - -Len = 1427 -Msg = 9FDB2A4D221AB91136D757429CB01EAB202E2F0CB45594D71089E64A3BFBC162CCF9E5D524B59E86FF0D4A17FCEA00527406F0EF14530340480330FD4C4EF48AB6C711A8426908207992697B270B6896F9100B821B763E2C8F0CF8AB5717835D8BC79130B33C48FF8B922E9B7E94C99B8BD361248211CF56D763363E9677161793541C04EB803377B8082D5655C3A3B407465CCCBB85A1F3A713EFD1F4D1430E25D6256FAB4E933F1A559D85F8B65A56749100 -MD = 0C8216F196CB6421E692011AE65C5CDDF6EAA30924426CAB85BA93674FDF5C07397C3FE339FB9CC50E26FBB090DA8AE8 - -Len = 1428 -Msg = 057A73197CCC3B7A68FC6723BD1C32AD3D5E01AA6B52DB53D546EF1F7623F428619D25E3D7AC1704D6B23AE2D8433FEE576A0139FA46FF0B2E13D4DD413812E7B767E822A4C3CC69DF40B45478D95C1199270A6D28894F99584C2025156540207A3493E239EC7E95E7938376D0BABB5EEBF41C461653F9752A6CD4B1521E9B1F1163F13E186F8B82434A4DA1D8FA0882AD016456F046C7175FA0A8834C8D5DE4AEF28C986B8B5EF5CE4581AC6B616AF6F509A0 -MD = 21C1E81E589812369B396F9FCB8C75D32E4AF33A255A8EB9BD524BE3E07DB551B7BFD66E89E9568712C092F59E20A233 - -Len = 1429 -Msg = FCB2CCDB7CB717152580A4D6FCB174C44B33153708EFD174F3AF31CA0A01C8DDF6C8F07E608EED84F450EEE51096F951446FDE340A9BA3AFB0C9E44E84208498A99D02C5959A37815516E140E3758B5E00EF67DBD9BDF8B3C6A01623D328F649620D85A757902EC780CA3BE2A54DA5A8929776DFD578C44A953FDDE6A6D35B6163510C22E02CBA7479D277F04883CBB83A05AEE5755342DEC6EC49DCB4CC44EE99AEE761EDE6CCF851FA3B23D3467D44487F00 -MD = F9FFE84EC9443D353FE85BB01C6576C9160AAB7EE345D964CFC7551C28B8E10EF14537903CFFE893D4B95A358AB6FF8E - -Len = 1430 -Msg = 710712BFEA5E62A9D7954D7B01F3F8674990BB1F59CC6D822C4EF08AC5A51DBE500359BCA2F2A74AAC4ADD615396A30AE28FEFC53EFAE850FE9536815035A8B8BC064F7D43B309CEA40A825C008F0E4A0F9BBBCCCFF4C4DAB40BCB4AEA16926DE6516C6793C19BEAD079358EBDF6C08D5AAF9EC4D4B600642843B904C0DEF4D3B865A80F0D47DCADA317E9C341EF8C791085ECB7724724E7D8779E9EF05B4B7F5F813D6D9A37EFF6D46AB0B01CFB402B247C14 -MD = 918AB828A247EA2ED40614EB43F5217FFDE63102242C2EADDBED0637FB05280ACBBE4A6E80E30DFB547DE7D62C2C465B - -Len = 1431 -Msg = 84E71B4DDDC7FF264CDB550A47ED25478E863E97CBAA6059F471A13693A5E96D4433185C3F7514EC6CECD03AB6564F23D716B2BAE4A13B251F7DBE1EB3CDB00CAAA677588AC611BB45293C550B647A3DBDDE55B20AE6BFF0E6F3A1E1B6B6BD34731EBD87019EC0FF5E396459C70577587FCD0E12443FDB66E7D9C0C9C757DF7F0569E7F4BBAA06435C7CD2A7530197BEDB0046DD51FE2262FA729C048A49EE357F2D135F9A9317C163997CA714B3F6F5C2CEA2 -MD = FC4991397BCBD293190332F830855336D2A073C82A74F69DE342A1410F7A27AADBB4E1F41F5DF1E004739427FA0AC393 - -Len = 1432 -Msg = 9D9F3A7ECD51B41F6572FD0D0881E30390DFB780991DAE7DB3B47619134718E6F987810E542619DFAA7B505C76B7350C6432D8BF1CFEBDF1069B90A35F0D04CBDF130B0DFC7875F4A4E62CDB8E525AADD7CE842520A482AC18F09442D78305FE85A74E39E760A4837482ED2F437DD13B2EC1042AFCF9DECDC3E877E50FF4106AD10A525230D11920324A81094DA31DEAB6476AA42F20C84843CFC1C58545EE80352BDD3740DD6A16792AE2D86F11641BB717C2 -MD = EB929023D66AC20F11BF68EBC43069D27F35077A68D21FAB30854FFE53CBD784D7B25776D9F266F106433751E6C38A68 - -Len = 1433 -Msg = DBB381C83C3DEEEA298B3675314561096DB1F8447B93ACD2588E66C568C111B9DDDE0E5B504A05C041D0DD293D46303D5DF2DF40AE977D85EB2DFBB2B572D41163808F3B227E2C5B262EFAE57C3FD8E379407C1F05085686388F731B0AF0E085ABF39BBB8A73785E34B4ED59A10C97112FDEA64AE17205CFBF8D40B31AC29C206E535D0EBE38BECEA633E47D2F5BC8B35CA5FA6F87C4E22E3789D797E0E3B6188FBA2ECDA83100D3360F73B5AB2D7305353D2D00 -MD = 0A85A7D3913274592DD9BD033DB81E8C26A599DF38DE9CA79AE349E028E778AB191D21C3B5A04506E0A33888D9705177 - -Len = 1434 -Msg = E0CD21C86AC23727E5E5DB80A53C5F827CB30453E30F603A4442E5B311E90C152A129F8221AD64D1F8FF54DE336F0A1F92CB9D62C7660100EABB8F850C035F2A88689F9AF69FD598FB7D1A8995727B99170AE840758E88C1DBFE5873EDF336F4E68457A0EC41A21C99EBE8CD10EA45A56B3870B710D4FBFB7CABA277291A3368DEEDDA83C18D1F71701E9EBB241497C689272E06C84AF1505675EB998D9B61D92CFEF5AF71F93BA6E69F004EB7FD70A7A949FC00 -MD = 94BBF83A5A805DFCBEEE48106FA96D5022CCBA061D5FBD8FC0381B6898F5BDB2E90B60FA8E3965935364D02C05EDD4C0 - -Len = 1435 -Msg = 33769F64E496F6B1F638DE77E3538A49912116ED9BB6DF2CB78291F05F95C274B971AB1AF1ADCCEB32477171C4415C0D7332D36BAB37EDAC0278DC8C392E906F7075280BFF6EE7817D49DBAD67966D36119D82BD49C19CE299EB7C64A00DD4BCFA921691BF064758E3010D5F2C7B5878E6E0B763D3113F3BD6E80155A4DF33137360F735145E907F1165C6739DBB58933C6483C962A7C3F139115FF428D61438A614909BA6BB233CF953A953FF4561C6F7015240 -MD = 0D2EEF36B533B98EB8179D99268BC277C89473970212EA153D379A5CDF4404734541B73E95CED0224B419D2261DF9E38 - -Len = 1436 -Msg = F3B541C39E2EC19FF5750EB4079E723F5E6BFAD3CE36CD9BB5B94C8BA520784F3651714D6ED955777FDD5A8FD543245B61C7E02B2C3CB70FD5691861F52D3EAFD3D278BA01C11B8A133F8C83C59E6D92359064543B418919000A1E80B908FD605766635B796696B57DBD8EB06C100AA2C1045D6C4881E2DA0038D7103A271F00F1AF4A048F246E8D8EF1509D9544FEC29E935E1FB12649FA7FEA43FFDFE84174A3ED17E4D802189127AD58B4D45781EF60CF2270 -MD = AF4AC7893E65CD10680CAA5473DB4DBA6C2864A571FFEF794B5569F747D81A785E89F1BB9241B3C58019B04A77022EAB - -Len = 1437 -Msg = 485F865DB14C353CBF0DA045E31DA2C6A0AB5D311EDFC6FAF819E524D55C3352D026370C5B9B0D3A764DBB76CD9B34BE367FA1A9BFB0AC617C94D47AECC92F3FE5F57B27B1E34F99B994470248BFAC53BB7D58B978FD048CFD8FB12A0EB30F163D7820973F3C08078F9C07D8AC1C2029D8639EDB51EFB60C461F7740E1252E42EEB6EB3466E0BEE310148059E352766A8D3ED0C08E2ACA6F5EA39680DFA2E691EF44ED4DBC92B27B28C22E666118AAD88E623A68 -MD = B6F30129B4C9FC044E031053ED06387B39FF725BDD726236B44BB2E3AEA0632A2A5B26F83979F39BF73358A30506F9EE - -Len = 1438 -Msg = 47B4E93B903E93CFDA571880ED0D0EB2B409D724A6A6D835CCE0C6554AE633B2A385263323EC852FA11D8212690F7078D8AC78218C72953C2FAEB4A5065A779B0E484248003A3FA72EE244EFC6D0A4B1D1CED8EC099492E13DEE522FA2DFD89D8904793A9E22C7272C77CEAF265C7DCA3FD08DFF17C038F7D72A513B415A083D5F5101D2982B342D75ACA0A7FFD8B00F59BA8C0D2B0AE6CA17EE763731E1A54BB071C21F63965F10FF8B50C4E4AE6EA311C15AB4 -MD = 79A604E01655D936DECF062556EE7836CA43A796093EC757872C9BE6CB7C77D257003EE123A7DE3127579C8B84B9092D - -Len = 1439 -Msg = 192D3A6963242323C642AC515B34F048904B933B7FC8C437EA751F8764B489BCB823E3658308B1D336A6A0BCEEF2E2ED8F27C2EF30C6F3C6F80FEEE59594B29983CEAA98AFBF04FBA3E6A9C9B2EB8A178076BCD838FE9658F7BEDC9275487A10C43CA8CF0D0278CE815D8D4FABBEA410E4857F45A5F1D593A49AEA704E3D5BEE8554CDB7ABC51AC584CC13F099CE3D1871C57032476951DD46E1C162D155B89BCAFBBFA867C2622ADF42321205E7F097DA3EEDA8 -MD = A7823C19DEC84D3AE514ABA3A2DBF4CAFD37BFEEF4249AC9E9CCE676222198E3143AAFFB271110B3BBE29EE12154E475 - -Len = 1440 -Msg = 5179888724819FBAD3AFA927D3577796660E6A81C52D98E9303261D5A4A83232F6F758934D50AA83FF9E20A5926DFEBAAC49529D006EB923C5AE5048ED544EC471ED7191EDF46363383824F915769B3E688094C682B02151E5EE01E510B431C8865AFF8B6B6F2F59CB6D129DA79E97C6D2B8FA6C6DA3F603199D2D1BCAB547682A81CD6CF65F6551121391D78BCC23B5BD0E922EC6D8BF97C952E84DD28AEF909ABA31EDB903B28FBFC33B7703CD996215A11238 -MD = 6A51975C9FFEE8B94135A3BDA954DFE14E6267DBC9253F0BB04515A6B7745AEC611B7B66AE57D3FD3770AED4F412EC84 - -Len = 1441 -Msg = CB28DC66F267394A3C1D2D1F0EB3BDD240EF9247529E8720395D64ADC644F5B57893658A6E57A34BA62F68E237283EA6831CA94A0FE337BC9B1D08A773133B968515FE7FDA3F851E108EE51D8FD01BE0A8C5B725D530B6425B7E9A988501982901932E899F89DC606D1ED8B1431E4C56015DE52EBFD8B09CD259FBB2D1B3A69C58B9684C66870F0D60B0FE0F75EF310177D512CF549256CB656EF3ACEE3B2EF6728806F74DE8F627C13B272E4E9885EC4DA7AD2F00 -MD = DA9ADDB90E30F7DF7D55851025AE6E531B082795AFAC294CECDF407D2B8457A59DCBFCC7E64FEE4DC5EFB02F62794D1E - -Len = 1442 -Msg = B2C51A76F1B06AEB1253AD6E8676DBBD29B8583ED2D3783268FEDEC3CC0CD4CAF9F12E6FE389294FC22A26C88E318E047D9A98BE25EE9B732F93D10FB57E8F3255F6A063DE245942664715C9A3BB9170587AAE67352E7E622369C2BB879B665A0B528FB1575EBEAA297425F6C7C4084E56C76BA7A08025CE545F0F4E9B32A331B950EB6CD55164200E35D04DEBBE5F16E62BA8624E93DA2FCF8AB5900A21EE87DF4514B3C5C93E5FEFDC24D56F9B691497256B2BC0 -MD = 7220EB30861606A14334ABD559F07730426DB2B0CBD5F143407D95DE9D07195A50C85E56835C188E56CB9874EEA16165 - -Len = 1443 -Msg = 36D5168F9586EF46911AEA6EF807874442C0DA3ECBFDA4106E0A71E921C511DD57904E9146E40EE1FF73B0A27C31CF06AB50B13D1DC8885932D37CF5290FF9D99C3D5E82700C569123564007D6DE15C34BFBB6CB76C7C86586156F668FF41E1DA02C7545E913F9FC9E68C3D8E029647FEAE1EDB069B8DF51A8185A50BA1FE44FC460F6CAD0A07CBBBAF5A09FDAB67158BC6D5DAEE6DE926D1C38B3AAAFB9A3EE43017ECA11165C9AB567E8A88EAB7B5DCA15ABF4C0 -MD = E28A55494F7C8A447CFCE6C59E58ABDF8E1143260821E595D08EC72433C5BC805AE8835024CEA00707947D34476A24E5 - -Len = 1444 -Msg = C7873F231D267158FFB7CD6451E1A0D8CD45C1F2226C44D875C30DF55660BDA0CEE25962DAC638D3473A088BD101B62EF078DB5C2B6F88DD2C76CAFEEE78615D1B36D0BB40569A486AFCE45A1C00E8B36148B865D415DD25D451CD4A84239B899A5D37F4E1FFD8A68072529872A890B6C339EB013F931B5810C6F65859BC1F8A3F7C9105FCD2AAFCB6A837C2715B4BED69C29CB21EDD6136C114C187A3DF169CC4BEFC1F6698E1928BC038AC8CFB1CF1C7F26EEC80 -MD = 6F72F655B0F93674CBF2A5CC5E3CDDC7622E1194FF2C079DCFC002A1C3652BF2214D2AF09754DF40747AA3BCB3058425 - -Len = 1445 -Msg = 597C27B64C8D275F6417DE1F56A9C78CAE747E024E8DEEC25B79C28045AA3A2A1416DC9976A000BF766DCE03023615D82DB887C2A8DBC758206CC4A645319A5A32AF70B3B1A5058209AF0564C8839C0D2D5A298539D6D0F5EAB212093AA116B074D1D66A785064AB5EAB3258D307D4CBB2C0B3EB97403B542EDCDA51AEE1077CF1E0187EB4CCA42744EA22F1CF0FBC6B96B112AF1B235A8D618491E19B4112DEDCC1B6F8C3722C8408CCC6D1DB3318054B2A376560 -MD = 5E4A7129E0FB33F64AD3E8B9B89A067DC4F4D716CFBCFD8576C0FAAE4779F282444CD410031E201F3F603A832CDBC9C5 - -Len = 1446 -Msg = 6AFD2AFB1B7217CB78DE5C9230502D0092D8D414E00D4D042C659A8DA687E1B09445D95F87B6A48901DBE3784C71D4C0A98724C05C80A52529A76C0EDA6549F9876219F1103A5C1432A4ADB76F5BDFFC30C46D9E22A2B141524F735369190E860AB33FAD9B34D17BA936AAE4059660A5C9006E5E6EF070142A0C3B6CDC550E5658360993A14665AA63B71495741F23076696BC799234AAB0AA598E53C9FCCDF14EE38060C11D4F799C9BC3B608189FA0BDDB006344 -MD = 34A8B86092BCB12D7540307CA4362F0EE8F5ED00CCF36D1F71746FF9DDC7718B96E97D8D7A9627AFB6FD567C48F46EF9 - -Len = 1447 -Msg = 0D7CCBEC6DEA7B571B4BA9D8E11FAF3CBCD363DEFBE8BDF97F99E149BF3BF004AEB600784100AF7AC53A1CCF43166FDCE8AA87EF6A9A7CE66110C72B8DBC940AA6487C9A0439446EC0C555B7DF3E0D219A21392B740461574693FB814C15A4068626D29DDFCE3215F0701511AB4B1CB96C544B8B25DD385F0E870F5A32B88AD31FD49FC5F25C9867E682DA5ED1707A6022A58349405E665563BFA17F815FB0B402FFE5AB89BAF3D758DB8B4291F65329C8C4CF950C -MD = 4AABC8F995A705EB2314E35D1BF09DC4EDBEE575FE841B8EDD0CDBACD494983ADC30A97551EBA06714FEA7761F6B4A8F - -Len = 1448 -Msg = 576EF3520D30B7A4899B8C0D5E359E45C5189ADD100E43BE429A02FB3DE5FF4F8FD0E79D9663ACCA72CD29C94582B19292A557C5B1315297D168FBB54E9E2ECD13809C2B5FCE998EDC6570545E1499DBE7FB74D47CD7F35823B212B05BF3F5A79CAA34224FDD670D335FCB106F5D92C3946F44D3AFCBAE2E41AC554D8E6759F332B76BE89A0324AA12C5482D1EA3EE89DED4936F3E3C080436F539FA137E74C6D3389BDF5A45074C47BC7B20B0948407A66D855E2F -MD = D2DC49C04553F09A8C3D7DB51DE890A71DBC10FE4E910C68BA5CA5DDB313D0A68375275C291B4DEB41F45E35A558BF77 - -Len = 1449 -Msg = 3564C4692887D8CB8067A9D799396CF83E3DDB7E32CC4FAB3C87D31222B668852BFBAA78E3D2ACDB5AD889361E31B9DFE0FBCFCA00CAEBF8D07A9ABFA3CA818D0EA41EED422BC2C7F0AF9EF15C6D53FCD781E20112F9E41BC8F1C9E1DB278A723FA1C2D5523AC38BC0D5A93D3306AC033E62848932B10394AD1040F235466B7ECD11F484A0C874BC84AB18175C7BDB4F816A3762AF418D64978823A450B8696A1F78B1ED66D649EEC8ACD35160C5885E11CFBE86CC00 -MD = 41EEBBE138E4716E1E75CF59F19C1F2B871A02C18DC43166CFDD31638905BC51C173E39EED6942550ADE9AB78F506448 - -Len = 1450 -Msg = 860296392D96C556086F61E4ED34E50C95B721A8B051544F6031AE174250979846DCC2E5811201CF7A16342976B7EDA6D2B3C4644FE8FA3398C05921C79CE3DD806264E80AC1EA1FC124FE51D573AD7823D2C7CEECF4F06C98CCE809B5C16313E04DC0B48A9410115B36DC5331F6C2BB7606ED2F7E6A0D575F8D0E93D996FE246D5BE00AC2A5155E47E87E73D568C990C44BEE93530073ABC1952EEE5904F41254FDF82030C4ECB46F497A695A43C87BB759AE1FE280 -MD = 624F5B536F196E15A7B2966F6D0468641E0FEF00E145EE9406B325303208AD956524DDCCEB10CF92F361C9FC13EB6896 - -Len = 1451 -Msg = 8A59028DB3B6F5C6073C6A778DAB8A9A3F64D3AE4F13DCDD25481DEE57D2DC82481C83CE4D43D8A173DF49A04303E980F28D2F4BD898BE8DA36F0E470DAE4752192F9923B46E5AC88D7C4D3DCB8C8D29E8135E0E0DC44952D45D7DF503BEF6E53FE9776F8E4BD69F238F4CDAB93F063FC4639F5B72B65B90FDC96421C5BF23B8B30D7F87DF53B74EC6ACF131701693CB6C744AF9DCFE4BB4831C854AF76FEBA6DEF37D4469041DCCCFEDC1504227EB60570A450A6C40 -MD = B3773A6719874DEA05719A839A9532893F6C732BBA1DE7D5813D72582989797A7BD3B5BC24FC90A2C1AAB6262B34DE03 - -Len = 1452 -Msg = 79E4BAAADC1878BFB1EB26C7D4B23178446845FF6AB3E45E571BF06FC28675A7AE0FE524FB99925CE7373ED9DE395B296603C9F53CBE738393776B9C5AE265965D26ACAE303C4DA1DC45F190B057B561B1F8B13A4C02D8CAD6E1DECDFD8825A64A40A78FCBA195759D596AC898A2B984B459ADF1FD7781B3BE50AADC6D7529C38DBCEB9016A8600D2940213C1DEC81F7BFF72E6D753D2FC540B50621B759F1430233E588BBBEDAD1E978AF4D78859F869BC25A587C60 -MD = D0F853DCB227880FFCD4D5AAFBFD4026EBC16877CF9C992B1BBF5BD02A05CB328F6DAA41D12BB8FB1BAFCD8E9BA7879D - -Len = 1453 -Msg = 0FE88DF0E99E878F8DFF574D6FEB68022CD544533B7D81B07ED92C67ED85A6E890D635E1801026E84B202551E7BCADAA869D9E00B1CE69C0EF2AF908248541E0BE5134B5CEEF8AE1A2B548FA0DF257477F7A0669DA6092C2D9894F00C299B1FE7EE480978D655F463942D159F0F6414E77DD5795E3AF080D060CB06C0765A7582058C47A9C8C1B2A255CC8655F8EDBA851413DAAE7EA4F4DBE6DC9AC91ADB6FD702A2F039B82E461EC29B3442915D4E12601A8515928 -MD = B12F32ECC9A3851CA3DEECF197487277D8C9315A339312033EBDED4AD59C5CBEBB82357724D51A8A005E84C769260CC8 - -Len = 1454 -Msg = 679A778BE6C04980258827BA7F375C1592BBD320C505431B9F83547E686CE1AC87DDF4954A481F3227D27ACE93CFDFE507A8131CCEDBE29578D3523DE3E0590C4D17204B2044DA755EDD8B2D429E0B9092A8429B89AB2A62E0E7519450A193EBFDC2C4FA695C90C07F29C016CFF238F777D6ADD5AB606E1CFDBEE92420A0D8F9A23D5F291F496571AC573E98D8FBA2C31BBF04C1218AB9B7ACA6FB3C6B0BBB0FA9B8EF9684AE3F77275D53EACDDCFC5DAC4220189940 -MD = 45110DC9108CA05AFBD6EE845AACC5D83EC87BA07D16BAEBBCBA8AC770C0D721C2CD6BD38BA26D5EAB2B61302A24D290 - -Len = 1455 -Msg = 69F739517865837781C3907381AFD544AD54E4B4E92E4F6A94E4508C592606548EC974CE57BD5EB500DB5D5DE19B6A5205C826EE7E805930BB01296F245F285264759C5D87C10CBF9FA8FB2BCA99EAE647E18E39D23CD916C7B8C709740D88DA333A7772ECB55BD639F19F25BF0F3CDCF1576A5C5B4EF558284D427C226DDA5828F2A638310243A42BB9A180C89DBC7533BDE057A6ADFA799D7C316B4949B49488FFBC760CA818F9E4B11A83FF144B91076C98691944 -MD = D696D42B3F467081CDD1D4395F5FA7C1F976F3A4D1F9DC5E8B7924B925A3A9EC85EA78C343811D5228533CCF996983A5 - -Len = 1456 -Msg = 0DF2152FA4F4357C8741529DD77E783925D3D76E95BAFA2B542A2C33F3D1D117D159CF473F82310356FEE4C90A9E505E70F8F24859656368BA09381FA245EB6C3D763F3093F0C89B972E66B53D59406D9F01AEA07F8B3B615CAC4EE4D05F542E7D0DAB45D67CCCCD3A606CCBEB31EA1FA7005BA07176E60DAB7D78F6810EF086F42F08E595F0EC217372B98970CC6321576D92CE38F7C397A403BADA1548D205C343AC09DECA86325373C3B76D9F32028FEA8EB32515 -MD = AAB5747D7DCC77BACDE81A58C37764F8F41E08F2413B40D4E6C792CEFE52E4E2A406338752D7AD1269E7D5284FCB7400 - -Len = 1457 -Msg = F8E43655B94493FA926E048EFA326945C953FFEA2316BF10C90D8B89FCEDC9E65E9A9BCAA73B5EF6B2AADF520D92094C9FABB9D4BA8E9498A1D0F91AC13CCAE05DA45ECF860606392BF868A0DC145F85D3E763DE868A65A9725C12F594D4645DA14C8C74B34BEC7AC206CB2CA3279F6CD594691F434C25D365A3CAF900908A45F051032FACA859544555FD9D09BA5AF7FF07CC309926086F92F1808D711F7EED88068EBC5E1704A3C2601F6B30DA0FA73C39264EBB8A00 -MD = CDCD35114EBB98B5913B5B23BA4E2F9D3CC88FFE8FE4D7A6C62F28EB75B40C80E0498805D8802EC3C52BD1C7B39A6E5C - -Len = 1458 -Msg = 05CC9F30A93EF36488B4CE5EF2C7C3996CF902620215CF9F06D63F02F5B4B33A41E6AD8BA5F86A91CC811F6BD5BD8634A90103D1DDC83E3F7FBF3259C85CB1D2BFC5499345A0F5A5A40DD26D7D85EF30C49402995300C7E5794590707162AE45194A916D304BBBA40ED09F9FF063EB0C9925F1743F968BD78EBFAFCCB67AB4E379065DB6C6F4AA5E933A9905A2328C5762819EA56B496A1834F017C387D5CAA70631113F3308ACF1AD2CC01B302E0BCDE3635CB699FA00 -MD = B6E48FF8F4590AE333F81433BB3A0136D36CF1D496927F66E9BE9543D4A5BEBDF1EAAAB69EEC65932CB4571F0E4BFABD - -Len = 1459 -Msg = 918872C3409496104D1F1CC94F168356BFCDB801DF3CE29D512E0F1FE736192EAF690EAA9DCD9216497A29F8AAD1F662BB38BE9D2D94B0CC25978FA5C2FA1E6A3F8F594BD354AD4DA9011F35C2A9B47FCFE20A83F5DC7C9750FFB60D24C7013923B09E4D8C8F299280BEA11781E2E5971872926728C2FF2CC2DC946D342E0B9C8B79576CD8F75E3AFBBABA4C3B2CC2CB21671A24F2190650D2AC23EDA04061440A31AAA50122C745D0FF9A3971BB1B3C698147DE9981E0 -MD = AC965477841FE4814EA019021700FBBA7880A898C3490228E4E608DE1DAE599F56C82D8BF3D8338B230F5B9AD16391EB - -Len = 1460 -Msg = 307310A8B3FC2728EEB4A10D9620098D24A8C5059A6EAA111E401689EBAA2B10DE5876F12042A1422EBC9B33F9C306C506F59FD76FF5BB194C278E41370226ACF7BFDBBC7E88C82D4D28AB26B669562F67EE3EE9A882B1CA390FEDDE8AC0B70EA2E29CCE4B9169A83835A72BDE1709BE8638BA00D05149977EABBCA5D0B70D0BC935F77F85458DE4CEA519A32E29EF01CCC760E7E549A347BC227C1B127E7D46F730C01394681D0E3B3300446EAB291207CAF424C679C0 -MD = 46CFF3B09271D2D0C334185AE84577BFCF305DD4F5D27BEE1844C38723CF478051046B2B93F73ACBF5A401341BE6C5E4 - -Len = 1461 -Msg = 29EE9AE317F88A0A03059E3AB719C6D6BD690C9F2A54751E329EB1ED700E5D2199F80D47E711F83A3FFF5D7E6FB1ECAC25E4E5BDD8CF81757F59AE3AAB01FBC3F8F4BC1EB9618601FD00E3BBB9AE6B7CE52AECD8C7D256CCD22FC7F097C70D637F39EB138AAAE3B826578273D47C12869413F9E3EFC920286CBC247D0395165BE7BA0AADFB40F431F0AE40122DAA6993F99E15FE3FA0B37D610CA794B60458205F85A1E8C5AC4B10B772A7E96256F87410C62E9CABFB20 -MD = DDF866D1EFFE46DF5D31E17EA82ACB70013D86A4672F27D32BBCDFFEEE41452A570EC465E3A970CEF2237A93275B7DAA - -Len = 1462 -Msg = D1E9441652727BAC2E45E25C2BB6AED06FF14EE8C4968183EA986B05B096D4000AE3AF0AD3E565B82D973B574C30E5D58946E987244520EEF1E0D76841235C1C7DA7AB073B86D0F185505A4491C19A963ACC10B166EA9F7AA164EB40989674AA882E9AFC4F58344D7C60B4784B831DEDE1C484FE5644E98EC02D3772F762565AA95B52A75D4A890E5AEBB607956F379F20EDB1EFB87B21163BD14858F8025426A26630AB5C43550658F04DEFD54ECAED3513AC077CE9FC -MD = 1BD5B3887570D2DE7DE858678EE7C165DD47DC0D81381A972BE340207E596CCB5E0F3BDC58F415CC3C8420C73CF6F77D - -Len = 1463 -Msg = A12F4FD666CB7D9226CFAAE60161177991EB2319316E8BCEEAC1EE41E2F44D6077E5837748B1DFEB545650429C4C76883408152A239F494742BEF1EBEEDE1C79617712C8F01BB17ECE00EA31BB14747B657E6C1EEB69A1EF5415E3A0C96EA2A3772417A2ED061C47F358C0225463002F280AE990F0B01FFF211B0CDB479E20F90F88D5C67D2A5708D655F6F05046E92F8CA0BC440E1164520D9B57D0E0F4048E8D0DF854B410B4207571561CF1B3BDE8293C46F6FD19DC -MD = 31BCE4EED24833E864A7B5E64BFF3B59359D635A9FCC4614017921C852916B389AECCFA091EE5B4AE38B0654E9B13B2C - -Len = 1464 -Msg = 3E15350D87D6EBB5C8AD99D42515CFE17980933C7A8F6B8BBBF0A63728CEFAAD2052623C0BD5931839112A48633FB3C2004E0749C87A41B26A8B48945539D1FF41A4B269462FD199BFECD45374756F55A9116E92093AC99451AEFB2AF9FD32D6D7F5FBC7F7A540D5097C096EBC3B3A721541DE073A1CC02F7FB0FB1B9327FB0B1218CA49C9487AB5396622A13AE546C97ABDEF6B56380DDA7012A8384091B6656D0AB272D363CEA78163FF765CDD13AB1738B940D16CAE -MD = 72B526D74CF9521E00D9D6BCDFC1FB1760C6ACDF2DD75171305DB45D38098FF23C5B8ED3C21DA73FFB8DF7217CE46DBB - -Len = 1465 -Msg = 55BC529569E0801CD498C8AF42B5461FBADD2C26EE7D32CBD5C682B62B41584B1E268A85E039693E4690815F116C315184450F0443F585EB53C4E101D02BA7DEE60C6FF63CE5F9FBC04FB8CC4564CE4BC2906B23917AB86DEC1E5BD443578E0DC7A3B4A0D06E0C6D3D869AC686EEB943232F44FB71206899A068F0D7503F052A765D509DF738B6C9EBA2F0A349FC7BA9BF6827AE8AD7959FA186054C31766DD4535873577F20EBCE2E6F1972357CEF9915320FBEAF253100 -MD = 1302E633E3C6AFBCEF8252F0000D5A5620B591D46D4ED23684F534D302EDC1DBD7D4A25FE6040693F56907AE78282DDF - -Len = 1466 -Msg = C29B2724C942166ACA51A1FD3DCC1BA857BAA82329022DD6B54AEF86AA4C60359B60B0C377C56A793807D645EDE0A20A8D0C1EF21B3BA7D4459609BE3DDF434F1ECE24ABA109F90E1CD2AEAFF4C924EE8252CE18E5B60CC598E8F6280B9681672FE0556D22FD2D7F264909F745545EA2D828512877C9B1BC12E0597DE7B10FE8A7C24841A09BEDFEFC7070FF1EFA61E7D602A7B6C1A3EED14B4D3CEE999CC484C455373412812D609183F8E2858A9FE56852111E17769B40 -MD = 71E2FCB8D1BB11BF8B19513BD9883F3085051C66D639E1D0416FD927F176A9FF84D78F2139D469FF2E16929EE2A75DD3 - -Len = 1467 -Msg = BBFEC968BF89177A453BC37ABDD7049F5B9E3FE88E090708E6807D8502A61443F2AC1D28E2CA0BDF925D55E869CD89CB9A647C2B17D5F561B462E2014D78DDAD9DF49E9AB6F41C76C0FAAAF7D6E11EEFF841112305756437DE2661E73936F7F1B497BB99293F1E04A89B70D41A045D37127F95C358A66813F8E894544E8D287EA0AA576F0D036AB3849D34443D77EA4E4DB8879F41921A103FA1390C001E179CE81D3C08EA23C0F3D3DA4ED4827B018FF5A6EC816EF890A0 -MD = 2FEA49119AB0BEA320D211C75FCCC21BBE972B9E9436BD157014E5B84C037A991CE8BF0F9652C29500D6F8B8B05D0BB9 - -Len = 1468 -Msg = 4F1873004061A5730EB73DA54F66A5E2769165B2AA9834188C124CDCFCC76863F252484FB91EA88D83F01A617578C828A39EDD28FBF9B150BDFA10195F229B6AEEBC4044F8E020135448C0C9AC6F218FD775864DD0D5276EDD9A2312F427D3BA76E993DC660764D1675188BA27F16C858952307203C2627F81B8CF39C617E9A1CBA0517F4EAE73B26C8B5793AAC96D51FF8383D24222937DBFE4489FAF8E2A1E2F2511E58860320E0328CA6853C862D3B9FCA83A9BD50450 -MD = 5239CD6362457F0B5349C630DEC51527F78A50AC77FDAA7B16B3D696C20B5A24C0179DCAD7361A68BB541AD03C40E8CF - -Len = 1469 -Msg = C15A364863123C42B27DC6B60BB754C1596396DA21BF66BB4E874C52619D122D065EAB67ED766710E17078E886BEDBF49DF81035EBF94DD8121962F221A2E68F9A6D0AB13B1CF2DA0919D9DEC33860D499F2DB1F3945972EE7634258B6921DA9C88FAE360E9907F7926942F3321B0A4E68893528149F5BB078F3A72D20896AA327D3BDD615D02337B1F1B60FC81B02BD68394D681B2EEED6E3F20E1E40C94BFDE855AD8B13536C4BC32364955BE2952EAB3A0C94A195BE80 -MD = 9CEBF48107795A22219A230FE6CE9C43FA68CCD7E3C62FCAF1C320F94A2EF70C7DD0023AE5971AA1188A5115418FDF43 - -Len = 1470 -Msg = DA29CC2E02E9904345DEE5618997310DBDDA21DD65E28CFACAF637837B9466B9791059277C197A33CAAF2AF7B88FDC143F16DD9CF976B5FD6C0390B18F8AF6C7B93000DC2CCB061D7B63C60055B840EE0ED935D455ECF9586CEB935B041E2C58BAE410651F5DA2BFB3CC23CAA30AA9038563747CB9E05764277BDC9D50330BFB96255071FCB22209E033A269A9537C5529CE2A9F3D332CB903C715512E611E4E984191A7EC7BBD4A68143C8AD136E7ECD5719DF0383AC218 -MD = 8C7C936064905CCEC90E128A4F8D9BA74C981ABE54C9916A1BE311ADA8E26A9BB02A15D926759A2AC73186CCDEF69D16 - -Len = 1471 -Msg = 94EA90EDA1D00D2F8299F99C7AB8F2C19D05452155A5117E07505A1EFEE1B1754B011174F1C41B72F0AC72AF62BA24172565B5AF8DBE62EFB6BAE9B746F3487A9F61557AADF0BE5A2C8F877A7D2E301FDF45DF9A50633F87C99C38102F4E011435F451278A17CED52764FF55BEAA3E7576457E81A685F1A03770CCDEE8C06C1158AFCCF0746D58DF1E85DB956B75DFD86B26CA9A936D0833BCC64356782F27D5E9F9C76898FAE7AE1AC44B07272AD64918BA3E5BCB272F02 -MD = 15ACB82D2615DCF59699FB9E6A0340A2C2D4D0FFE9657CA3C06DE6ACB7D207592E7077BA90150419F9CA7683AB22A138 - -Len = 1472 -Msg = C38D6B0B757CB552BE40940ECE0009EF3B0B59307C1451686F1A22702922800D58BCE7A636C1727EE547C01B214779E898FC0E560F8AE7F61BEF4D75EAA696B921FD6B735D171535E9EDD267C192B99880C87997711002009095D8A7A437E258104A41A505E5EF71E5613DDD2008195F0C574E6BA3FE40099CFA116E5F1A2FA8A6DA04BADCB4E2D5D0DE31FDC4800891C45781A0AAC7C907B56D631FCA5CE8B2CDE620D11D1777ED9FA603541DE794DDC5758FCD5FAD78C0 -MD = 800CFA48B4647F7783BCD41B2C0F7F7D4D0FAA72481A2A42C4E9C43C9F62E27ACB4DDB73E318061D396059AADE4145E2 - -Len = 1473 -Msg = 44A75B4C7422D2FC2879347615AC5EF30D1A10D6EA091C9F93748CA7BC5D48D8961BD5DF974BC9850BCF8F529C86237E1E836271EC0A4D6DBD9DF26A016B22A12571476FA219A9952B3711D19DF31A840BD3381B51E94F3212385DFFBE48162AE4AA4D5EF8B555B83EA5B37FFCF30E1C7982156B4438FA12E4D55D5066EDA3073D630942AAA5415524B2891B17020E7C71BB70EB24405CEA0A091D42E6DDD5E2FD3C2401E21F4EFC0FDD58E9D592D8DDD72C475A5026C99C00 -MD = FC2988B5581E7A6ED1B57B4105FCDD43FA8A0F205915902743CC2BFFFDD1F777020FB5FA7AAD872EB21CCDA82936E73A - -Len = 1474 -Msg = 09CFD94CC99BD82ED115021FB794B680352912BE0A8E28CE534E82D4AC283FD68585CE8BF121D1F1953F2FA98F38427525D186635CFB0AD88D5FE7FFCB4C469235139AC64DEE44C8B1361363F6FFBEEF11060FE26C516FDBC421752D0E4700F91237F38819AF9F4F35E519CF52FF4E7FEC87B9079B8ADD4B8F6C49828696122F279997631DB09047B88206E2DA672B1DEF24CC5C022D3845654A680273872D7E0E86685DC809B692335667E99D2D108AA9E0084BC9AE177780 -MD = 6371B6AB2E23FC7740FEC3447070A982421CC0F8E600D39939F11B3E5CEEA3C02B27B209D1642B6A19CEDE64107EF2DB - -Len = 1475 -Msg = D445328CDC413E194E2674C4861E4B02834DC69113CEE287E147902A8182E845C722D0B48BB4CCF68D69380F93DF2D783CDF63D1935DC118E4B209A6B2082CF88F4CD4AD6502C0F1CE94348DEE1D382C920450FD1668A1C4087877CDE362F4F8AD35EC122F63B8C93BBB06CB8D11C4305D38E783F3F536C9ECEF1455C294FA8175C910EF540E64E85D4E84216BCFF45725AC1AF6BC30F3005BE37C359F7CC0296D508A64B7D91F94B874A24FF602AD7908199C3BF08851CC20 -MD = 1CEFE877CD257814858DE56A188FAE299600E82D3FACAA8E4297DD577CF6CC6621DDA3CFFBB16B2D274FCAB52A27EEF8 - -Len = 1476 -Msg = AD7557DB28F9AC08D6F70EF4AF59606DE6431BF5CB1AEA43E34D3A6B2A33DE5B654A11D95CFA02E24E19E65BCC45BD78D0266F1AECE3E10B4E101BB4238847BD4F88D019DF1F03D089EF5E51797DA0F2A117977861BAE10AAC4977F4C0672057B535DEB34C6F99BDB94A7ABDB015CAFD017A27CB710C5CFC8EDCAE842930F10A35806F5E1A9D2398AB23DBECB14A50106720523A1BFE54E3D2188C672F177B993FE3574908789FDFCEC58CF811440E9060497C8281C5529340 -MD = 990765D2CF86004BB40B676394C91ABB5A78F104E6218CAAD4EC10B6DD49E4E1741C890DBD900699E18A132E191DEDF2 - -Len = 1477 -Msg = CFB596177B9CC328223225536EE388C73D740E80E777BFA3CB117F9044EC292EBF6BC61521C6A2E9D25A7737EA702AFFF5DC7A521EEDCBA633338FAF7E13F6B62A1957D8DF39748DD4A0CDFAFD9235294375C5041761C6C54714E23EC10249AEDEDF5FDD1D25ECCFE9C240C759E435F6C8662F5CC1DAA40DEF573ABDDEA0908A4D6B07CC148F4153E34D6D5965B24D3553EDFC34CAA0634A622B22CBAD494D5C2D0C908B17B5E7A3E785AF8F8B80808B1F0DF0EE838DEE3F00 -MD = 2D2AA302A801F02919552DC5A2CC5C55A85BF1DD1F6AD16BCBAE726F3DABA6DBE102DE9306DAA51A228BC59C83BFF5CE - -Len = 1478 -Msg = E93C98D933A5F2C8D34F02E9BDFA64694F79FF969897F7F71D776D16E518B4F91443D3799DD0C4BFC6582E080B6712BD93295922C6BDFA99BA209CE536489A25C4755264B053DB2A0948B98006648E00FEE6A3B1C644DDB775EB4B092838FFF335C92B7EEA8D51A44C563C969E9CC09042C6809AB5D09FA8208BA2BD78B7F6803DA6A92F145388CE4FDA96BFAE287121809BEBF7741EB0C7A27E7E7A445C4D448D8A98BBB6C1D31EB8183DD21078E6BF6DBC9653A2E2053890 -MD = 1F9F6C104410B9BD09E82ED09CAF4E0E613298503CCE508FB14E3AB1943D7BEF9E90A20B12B0820DC27A10A8A43E7449 - -Len = 1479 -Msg = 532FB4C8E6753AC952A1B707308830D930A10D7F4422F2FB54CD2FDE1B584BB75ABDD8017F2F2966633E4ED2BAB7DF21F7C6652645215B18DBCCCCC64B27139A68143CFF9930ABED16022164121F38D4D12E62308D898420BF00A59DC3A7F26F07C8AFEB4F8CEF3DB3C98B307787C495B60A83EBA8594658D6E5F4B13057523E38D177F20C715A7C0188C2B342CB26D7282C5FBB124C6CDD7A1122F63080B8FD2C671EE1E994A874D14C1B4325D06733E9FE962E06219DA988 -MD = 3BCDCADCE05B55FAEE69863CB210F32A4B23D55A830112E9802F0272D1B34D7990F1FD98DEB4AD9833057FF28A0F129B - -Len = 1480 -Msg = 8D2DE3F0B37A6385C90739805B170057F091CD0C7A0BC951540F26A5A75B3E694631BB64C7635EED316F51318E9D8DE13C70A2ABA04A14836855F35E480528B776D0A1E8A23B547C8B8D6A0D09B241D3BE9377160CCA4E6793D00A515DC2992CB7FC741DACA171431DA99CCE6F7789F129E2AC5CF65B40D703035CD2185BB936C82002DAF8CBC27A7A9E554B06196630446A6F0A14BA155ED26D95BD627B7205C072D02B60DB0FD7E49EA058C2E0BA202DAFF0DE91E845CF79 -MD = F782FF0DE7D5442D562CC500256EE4B5A00E885C8CD86009C53F337AE003854DE4B89794281A64375E3F696A415B95D2 - -Len = 1481 -Msg = CAD77B5AF3CD58692829171435B8C7B878D31D7A7DC56B0B89F6D13C75385AE8B268E309717C289F988ED5EC216703148CBD202FCBF9A07CECE0E9E87C108761CAE85DF513F1BBE31C6E9A2A4E9282BDD037491B65F70AD1CE54FCFE4CCBAF3FF59CF815FCA87352B7BD1BF1A61C32524AA4E8A41BAFE3B5DE8BC3E82EB3DD989B8D4FA36B023FBCE4456E6D253C70018DA40033F61821DFC937B0D2132E78B235903617E6511E3CB2AE00848D3B0ADA5AB00D04CB8539853500 -MD = 16D56F967A6E57DB08A2B78A3E03256C1CC383E1415D7F0ED72478EEEDA35A67D0E4C4A68D6DD172C2FF2F5242D51F72 - -Len = 1482 -Msg = 9FA55EAC5F6D56ED388E535C9BB95EE7129168D77438427E4CE012EE9DCEF6C489F72D660C6766152A15EBE3CD9CB32D143CA8A44D925BC8763B16CC8820C2C4312E1F01F691B3BA08A4DD9DBAD5594887A9129025DA743FAEADED8C593889E6B12D9EAED305917155761A62B64B5FDC250EBF7E172FA047A18B5E2FA3F65900A2E8B487305E296DF23260A08056B8FC092C997A82C0A0CB647A25D4EEAE8AF4C5F301DC630D43D41331C3C722C60F904CE8F1E59B54B8D40A00 -MD = 72B422C733C26FEB788BD46C99ABC6E1908A10D75646507785651AEFD08F18870CA856A81E73D22AE4AA76D54B90E81F - -Len = 1483 -Msg = E256110F06106A8DE854A108A4C6611E415D5E73948718DA023521B2E948CD898E6B2246D7905C6D183D8BFF98A43554F813E9D19E09757879ED5B29FAEFCAEDAF1FDC8CE2C4AEF6A5D26F35331C899895ACBCE4B234B222CD5E0E19CCF9FB4D75AC50153684C3F8647BD0067307A07ABCC75E8C15CF62B842378528EA95D34837A87F01ABDF385D507423BF9803179DAC1FB8278FD28CE90C7194296D0AD9432591C0C1AC2EDAD8DD5C07E395A05947B8235AC0434286ECD5E0 -MD = 5AC782699A979D1EF01E070753B828E4CBA25F5AD6AC6F6474A85B9F035EF24F40A4522B6964084D83BA96C82A01E1FA - -Len = 1484 -Msg = 54BCB9646D0C68565627D302A0FE16B1729E78A0528F96BFE95C130797F1A619C779267A13883D0CDC992CB0444B0FF694787EEFB42978BC483027BF22AD8F43B41B522B74776109D40297F61D104E6DEEE4C189552A2228FF97679E0889D6A76425DDDD08911B8C14B63803B76358B7B2B9FBF121208127E4E5EE2CC9A3E71CF29E17C735C29557F09B168E1818DA2215C96F2D4E08A1B09F996974CB8D40488E0A02B9287F4526DFB13529EB38B80761BF918D489C763AEB40 -MD = 7070DAB432F2826B7539194E1AD49B0B92DC1EDEADA361A5C8538D61D790EB0F1DFE09EE7966CFC6E435FD8FB4BCA62A - -Len = 1485 -Msg = 4BD43ED651E7BCFCFDCBA394595BBE757608C73A69B10A94B40DFA689EBB4629613602651D716DD360A98F1C942EE12E73236B4689BBEA3F98DD276255803F9F9A054E855E4C16EA37577D84366E227E3C66FCC646B8851393895A8C18960B1C6A9B3001B30F172C3B13DCDFE89E71A7D785B2E9C3D49C82F2A87625B5BC544A7DF12406D65D627AE666AB4E6D7CD133A92DF5E1B2AA31E146D9B3300EEDCDE1817A77182FD9F71AC45CD42C70CA5D6739164AE6146AEA860578 -MD = 52486C64DC353F80C268674E1A5101A182C5C2A6CCC326DECEDB134F10BF34C5DA128658CA38D6A2C4F573D7705C2D93 - -Len = 1486 -Msg = 719D1B312C421896259055DA2BCFFEED2AA86B319FCBE4370B8AD722952CD203B4AF18396F45D934C6513FF21A90A44A0EA7C5B931989F0BBAD559334E020FE6925C76BE4F6339D6C8EF64A6E7E011FAA3CA768F40BF561EE58AD5B9EFBD75E6FB51EE8DEB820F61E398837723D34B49EE251023929CCA4FA70078738E2A49F15918FC0B680F9E2C9F91145C68D35064639FAE4417E422FAF9E723E8278FCD8530484B4A41A193BE9426DB16AB839EE616F80512E59BA55CA304 -MD = 0F402F75DCD4E8D341810684D56158784EF4B2CEBA707620CF49AB63EC7BF9685A3501D350AB06A56F01AA4007BEB6C8 - -Len = 1487 -Msg = EA044B09C5EC1E6A714E329A63B70B1887A6085274EED2DCB8F4B56B2991D2768313A56F6733231804D3D283863A764843B59409A9BB53FAB192877190813F9DDB08A19ABC32DE2F1FA58FD38C002EA8BA8954182CFADB37E90170C2E0FE3CFDC614237A1E8F0D7C4679BB4BF794CBF3E22953A5EBF55C22C531A282CCDB0FE8B9ED6EF4D731B4B73495FE632C328B7682FFFEF79F5421D99D9E32947E290F24F76FB45D38BC2159F84FC2675D5F059B3A56B7F60B35FCE832E6 -MD = EFCC1DFE7A88434ADD80387039FC2C9A7A083006764FC6A39FB421F6E9858E4834F70F3048D98E0AFA28029F10EA7CC9 - -Len = 1488 -Msg = C464BBDAD275C50DCD983B65AD1019B9FF85A1E71C807F3204BB2C921DC31FBCD8C5FC45868AE9EF85B6C9B83BBA2A5A822201ED68586EC5EC27FB2857A5D1A2D09D09115F22DCC39FE61F5E1BA0FF6E8B4ACB4C6DA748BE7F3F0839739394FF7FA8E39F7F7E84A33C3866875C01BCB1263C9405D91908E9E0B50E7459FABB63D8C6BBB73D8E3483C099B55BC30FF092FF68B6ADEDFD477D63570C9F5515847F36E24BA0B705557130CEC57EBAD1D0B31A378E91894EE26E3A04 -MD = DE34506AD69085C6357D62B0B127CE66E25E8EC5FACA5BA898C75CA19E9AF24F02406716C61A71D62BDC28D718C125DF - -Len = 1489 -Msg = A3B6E919C29F0779F010018E9673A03EB7B45D635CABE817ADDE1024A39F14406956BB363A3C9E5D05CCFE04C98E26547EB5D044221B4A2EC10035187D7E29FEC3FE04E540C53FF0A5AAD283FF6DFDE44A4D66152F3A57341DF67554E504D4575B151A1C1B03883828E22997055CEC567979BB54784C80D57C17AE590B171A4A8E9C539E9B35FBB99369E35889A78F93A47298054C29D16C627A61228C3D489355158E4B3F39F7F515F93481D339F72FC8B3A5F71CE123212F6800 -MD = 437E2C4A720E0D03E097439A83275A4BF646D3BEDEA8E9FF56C4423C1CA713125E173F8CF6EA13784DBCE79AEE37CD80 - -Len = 1490 -Msg = 4EE4B06A4E24251F70866E9677E9D53BC176ECB513506058D0A77799B0817F2DD51A1FB6C092579435AFDD86D996EDFBC9A503C32FEEC9307755C83F6A39D057DA88CF3EEC01EF6609CF60D2149D61633AAF027A4AEAE25BC64C469AB4EBA304B8347D088466AECCC5B3D18CD3E24D3C6C95BFE2711E61D17805A92D05BBF8639A0BA9ADBA6D5394A09924415BF28F778679F1BF578549CD71A0AF3E57DC74DEB58B65792D3117C0835A03F0AFD622D8649696B92A8D2D343E7300 -MD = 9FDBB4C7366CFAF1022081EE1123C839A2EB2CD06D0FF8706E3140C5EC871427257059CF6CFBDD0911D6EEB31B48D6AD - -Len = 1491 -Msg = EA20C22288323559BF6E70257E5A591DA6AE97FDA9BF2D2AC91DA8CFF506B2DE939F49DBBF7C8F31DA22A7F54DD2C5898256EA9D7B6A509FF3B9E593747C4765E5F228C8156062DF6A15135DBF582B0789AD1F12565552DA81825708D215B012C3CF333D3568A26D6F5DF383E8A47730CA657333BB65534EBE04E4A6253728D5C31DF432F55F71EE5525E430586153C5D8E99B4C9AFAF7B4199990226F47A1F68461FFCF3215CBDA693485F3C155C559B47FB86FB176106258FB40 -MD = E611B1ABB3F95D3C7686AFA446B07508542E38214FE5CC25BEC3743B99CE94E86E1EC84CC9766189D168E6BAA828C3AB - -Len = 1492 -Msg = 441C41706EF18997EEF9B4990BC7B67273D9A90E99A64E161F0F79223A079EA8873500D722834DC7177A9063AFFC05E6B1C67B3AA10BB905E393E6C998DF7ED17EDF76096E4514D352EBB5E060911DA466D6BF26C9E540D10D5F0A0D5D7E0244B89CE207226112A782CC9D98B206EAEABF5C31A3F752C780A3FB57A46EE81E4F0F28A4D5A0ADB405FFD80B35CFA93EB2F6793EDA5BCF5F9E8D57362FF4C65ADA45064098F110EE799931B04C913A05E5C43BA6427FDF1502B546F0 -MD = AD1E20FF09C4F24CD3DC4FDF7B4268B3E80BFC353517C1554AEA0948B916FA5D198B93E716361738575BCBAD406993F0 - -Len = 1493 -Msg = D61ACEBBACCE0A1C2ECEBF549884696BF89A6FA017148D21ADE0BEAA038B417A0423B167D18286B3F5981F73E15760E7655C903EC27B41745EC22CB790681CE19857D34B249EE0FDE3C4F2211E6ABEC7CEB7FACDD8C23B1460E87EFBE81B4869851374DDDF3A79EC5A9020A185E6F87CC6F7BE11A6F8CBA0C4819F80E0875A9816116B9E77634CD06ED3CD88BC6B8846CC622B4769D20C9B19CE4C94B3CB2BF932864F9C472919280835692DE0DB831A0DF8A3884439ABCDD93AE0 -MD = 6D29E8503109240910279DD7952C8EF0650728FD0D2D1EF3F6851238C63FA195358AD6C97AF1FEF7959CD525448BF8EA - -Len = 1494 -Msg = B4A2C1ABB183856531A1D8D13D5419E2905427814E0D941428CCFD0805D96B9AAB2BAE33C09A5940823907A58B0672EBCA981E5302F8143D48F85C2988347750606E80AA2FC4AAF246D0066BFE85B1D43882AD048B373009E7B75DF4AF50C792FA3C22216112136C80FD303CE511E9A2D9B906CF0DD009171952BD062933F58A96150D3AC0551E77B69037A0DE0569C6181690FE780976758E10498DDD6A8AE269FF8BE65B6EC809C8F81DA31029798753F3BD53906B8B3441A448 -MD = 72ABFC2CBECE353B80C05540C302A6D44E5D0B037FD22F58C33EBC5CD56E0676CC062F186AAA80E63C85228D9670CF1B - -Len = 1495 -Msg = EDB075B34AD833E5481CA7E60C44A435F960F741B380AAB44DC0E7D36DFF686967B6B2CA190E972B02B574BBEED5B4DB6649094BD1E858599276591B2F9D8B4F09872CB8E2689D3263D363C185FE353D34E2B4D74536DA74F9A1EEEB5BC820462DAA02E08DE18666EE45DF1E3027C324757090DB9A428FD9616B77C7469D7D342FB3831D3C2ACAB9BCD3C29631445085AEE08EE985EEBDED841FB16EF45484E6EF05735CE8DE6CA10D71DF778251F993C5B59FD56E40C2F99A77B0 -MD = 90A76371C488BABBACCC1B479317384CFADF692B3397A2FADFEC4230523140BB1FC48ECF42B7222F8108E7D840EBF79F - -Len = 1496 -Msg = 8B8D68BB8A75732FE272815A68A1C9C5AA31B41DEDC8493E76525D1D013D33CEBD9E21A5BB95DB2616976A8C07FCF411F5F6BC6F7E0B57ACA78CC2790A6F9B898858AC9C79B165FF24E66677531E39F572BE5D81EB3264524181115F32780257BFB9AEEC6AF12AF28E587CAC068A1A2953B59AD680F4C245B2E3EC36F59940D37E1D3DB38E13EDB29B5C0F404F6FF87F80FC8BE7A225FF22FBB9C8B6B1D7330C57840D24BC75B06B80D30DAD6806544D510AF6C4785E823AC3E0B8 -MD = 6F4FEEDBA0ABB4DBF824302250E6B668CBFFDCA0B8C338236FE02A8779D8ACA391D8D116B2BC43D40E736096470A0BC0 - -Len = 1497 -Msg = 91D47B29F4A6397296F8FC30D7DEFEEFB9A0A29D56A31F0ED443996E66EA7B9CFC0122F8D942B8946F80C352C468DDD7F1FB261C3EEDB4274040BDFEBF60FE4F689FA7DE2D0B692F9E401BA17B810906535C4DAFDB004AD235798205BF9615E5B4FC385F6192BBDF4865C4E4B299B1494C27D98844F7179EB21A7CC464833BB5E6A0165DB54B9F9114EC8604F662B6B3E8A02E22AFBC170D66CD06A78C7831083119BCA3356079688837B1F2488A4E0A12D754166FBFB4FD81CB2F00 -MD = 91726A985C2FCC45FE9FF617043C7D8DABD68505CB3E57B9F8C254AD169299353610B156190E0DB78B2FA95218D6C37A - -Len = 1498 -Msg = F5CC4F8FA3793571B809F6CE2A3D500B4B435116AA90E04FD2A1F591DC94EA41699033076B30FE816769F0B59F37E72D2E476DE192CAAC4110C2A46635A05BDD8516C53BE98B505182CD4A75E6263972A2AED090FBBEF69F929422EE15737C23DF60B26797937A257383699FD13F3A85B41429CBBE83B6E2AD4F5D7C5D935A956A73E17330D822F7C869E7FAA76E4E8870D9E0A3B219CF145BE394D339782A927386F1FA2B1CAE28337126927501A43F6947B6FB80364D0B823DC500 -MD = E2A3AC4DB25C21E8BB80264CD1BBBE424DFBAF81CC1AE428FD3851F61D2CE733858615F915FC8476D7BAA85D1963FAA6 - -Len = 1499 -Msg = 5D712726889DF7831304D027671BEB451F1A32492A7170D7FEB2FA755AD8BB2E1CD6BBB5DB2BF4DE1588CC0225F674F10F8AB9846CE5370BFC99FAD1110D7CAA132B2FB08F371B4D067765ED91A8E23D385EB065D47530A394D588777B3CFC22D1BF8F68DB285B597FBA71D243A4C4AAC7B0D1376A468A364C16A25F1E4404620EB9E9D5357BBC30F529FD8F02EC09D959417E2D4B3E2980A20D8F633BE8B9F53FB8EB276DB34CC1BC10CAE1A6BE1ACCCD75F3775DB19EE52B361DC0 -MD = 71C0A3648A6D9824B5E1119889D62FF995DF95506BF182E07F48BB2A972B268283561862B3C97EC5491FAC796A49853F - -Len = 1500 -Msg = 1809F981B54AA5B37007A269F6CDE7144081B3E6538B3205B366DC7C85DEA9A1655B3CED86D8B9CBD892E3A06FE3A57736128D469FCDFE32FACF51517405FEDA833478A3114B365746762373B6DA9BEF0E8F08F0E8D7D4996B5AC19A48A61223ADA7F7D20BE3BBE9805784A47C04A8FAC94AC5552E75E3082CBB2757DDE0744FE97E08D403240896CE381B4E48AA5F45CF3F5B7F33D402DC6070CAF90D742799E861BB792C009C636D8D73EF0C1805EE47365EC0EFA6C2CD794CDB10 -MD = 1D4596FE7A622A073242321E9A6677C1E29E92C4C9AC4B4EFE17C0E0CCE8347572933BC04D9DDFCEAD879695BEAC30E3 - -Len = 1501 -Msg = 06ED3B343E6D7B3E85BE6CCC154FE33CB8F515DFBE0D90F0E707E957B06F89C0CDE0D7E767ECA5DC6F39AAAE3A5330FAA2674A63E76125E66D21C82482E3F51A3E08F17B4F2887BED5810408CC243D52D535AEC4CB63E8FB655FE331582CFD29793C16A2E502A715BF6F71CBC3719FAF0D0A1C74B1D222028C524CF3125C5ACFADE467952CFFEFFDF7AE7A439320959148DD5F21E6549F602C7E329B9E59465D5E14987F7FF101F725FF7AB15AF9F73848B058C61275A3B1FB0AA630 -MD = 22D341D4F123F0E6B8E94E25B2D6B1BEC6D1D3C5DC1F42677196DE6C9C4DF581E221ACCE503E44460074E1C4A12D25CB - -Len = 1502 -Msg = DDF19649A6FFA95A56CB8458A9DCE9BA51EE5FD82120952C38D7E0244EEC4710F2D2D67DB61079E7658D2DC9A69B14427E1AB52EC3E973BCF6041778D95EA4B6A172E8E7ECE8F245827AAE4D057708913FA32ABB973AEE71EEA0F3F62CC8B4A21B924C20AEAA00359A48100F8DB8E8DB10ACF3270681150E326EFE99739332B4FA7568344D73A0943606E4A6FFE49BDC1788301FCA269987F7F3AB43530A0089D5FFF1CE8F3389F6E1889309ADEFECF15B05CA13295BB554E8D2ED14 -MD = F1326AE291BD693B007CD31306C6FB168EF46D5A43D623DE2C7752DF43EA488EB9BE525327F6168FAE2280CD2FCB1ED3 - -Len = 1503 -Msg = 4E72712C6C4A26956F86B9EA99A334147AFE15580CEB51171AD5F95E654AAFCCEDFFD10E214F5C71B7AAB2147C4A48404088C22EED0F4BF517D414CE1D2BB04825FEC5E692A72283DF63FC947323ABB95FBF2AF489BD1E8F769405BCDE2D48B892473D8527374AEC620E0E81AE5220C1BF8C4266C8C657A681F7CCFFDD16EE545E20532D93FF70D4F5A47A5A168911EC5455BC4E78706D6436AF51F6939AC8D8598C0C43FE8E11912DDF8B342DAED02777F2D858B967FB80854CB054 -MD = 5F2C9DE1D2BD22A783F6E2B61FD02C852ADA8E932C3EC7F20CFC07F7B175506224A32D4777FC076330BCB1817E30CAFF - -Len = 1504 -Msg = 6B018710446F368E7421F1BC0CCF562D9C1843846BC8D98D1C9BF7D9D6FCB48BFC3BF83B36D44C4FA93430AF75CD190BDE36A7F92F867F58A803900DF8018150384D85D82132F123006AC2AEBA58E02A037FE6AFBD65ECA7C44977DD3DC74F48B6E7A1BFD5CC4DCF24E4D52E92BD4455848E4928B0EAC8B7476FE3CC03E862AA4DFF4470DBFED6DE48E410F25096487ECFC32A27277F3F5023B2725ADE461B1355889554A8836C9CF53BD767F5737D55184EEA1AB3F53EDD0976C485 -MD = A040CE1CBB996723CBCDBDFF7A6A5F69289737609534C5AF36F6C420A6ADFD570794079509D07E62566C58062D8186DB - -Len = 1505 -Msg = 21C9F4F5D4B2F235C5DB749C3174A603E5BF933C0C383FC4FA5832F7C110080497D8A93D3707DDA98042343A2FC52BD4D546A8806241E7C59E98D7ECD2CD3CB4497514FE12ACC0F124024906755F1D76C187349BECCCCEFEC2AFA2C68C50886121087C7FDD4E0E5BFEAB080AC98525900EF581C58A9D71880967F147E6E1D8CB94B9B1CA93EFD3AFCA6A365E44A0D1AF1759A5FBE089A3EF75B0049C09CFBA8D535B629F8FB672BA08B67B3AC7F6045E3116C98DE660D146141608C800 -MD = 4FF3997895F05B93054E565FB4FCCE825E7D6DE6AF11DDBD67953F2F6BC8151C3999285BC4D6339DE8F0387B6F76CE9A - -Len = 1506 -Msg = AD079FF788E9089DC1D3E82BAB818ED4CEB3B31F501A1A78E59EAFAA6C5898A42D4A766E775F364D9AF8E0E3378CA0C0B3E3CED670688D6271966F6EFF622A4E862C847A43E6A600F9EFA1EB9E6CC3EA624921185F6F8909E9D98C599ADB8EC63ECB752F5F86C4312E7A9F6679E6FE3F181B525F50A6313DB2DF33EAA70BBC0302EE9C7166DD84D2E91CD064F9CAC2D9102938E76D5D78130054D532078FD3BE22FAA84845CFCD91D919ECA680A67D1987E264EC091D81B3C5C66FC440 -MD = 2F0C47003D643283DE83188203E42B226C8C9EB5FABE09E87612F2D4FE0A1832B45EC689D8A86ED9B10890377908F30E - -Len = 1507 -Msg = 8837670BAFF97C556C9C46B55ABA348121CDBCD53A976EFBE084A1F635E37AD9B7CD3F510093010B74F663564F221A80E2582413E0334338525857EC20584D289870E51BEA927EB26C17B2B0EAC46863C7992D73C8395FC914C91C73B9B3A170A599D4C04706E314F8866292C663A8BC130C41209A92A92D6E8957428F1B0A03A36ABDCC1FA2F3CDE567A6F92ADC03496A2464B4B9F9E1634712BA3C291C4A5979A97D105B65D94FCABA9F717DF9B93C799E9B8ABBD7054B8E8AA5B640 -MD = 7BFDCC7F23971F8F40CF6877722A3D15059CA7B6A41F7D4023DA9CABE4F2266845260023A092583172C95E0C173E9FFB - -Len = 1508 -Msg = 5B41626C5658D205AC9F26DA1670435AD18AC4AED629C65F5DE44CCF1654B871E20FE5F0601108B7D3E6E1E773209D6DA0CE4D20D3865D57F7FA08B36B4278DC0CD5548EB1C8FAF0D3D04373A3FA5887796C3D18846A2A190AE553DACBFD712987CB18350CD4397E89DD7D176279181B762B4666471DBBB53BF8B9E53D604054B65E6AAE00CB588424FD867F745AC82191274939FA4CEECB109F3279649B0A9AB74A5B3DEF529D3C3E98B65E0E32E3568AC227322B67DA6DB28BA57BE0 -MD = 689E09461A7EB9BA0ACE1E274CFA919BF0D6ED096B889E614E5616DCDEC3713A3EB22A1E31662A7D511CAF212102AD19 - -Len = 1509 -Msg = 76C5DDB4AE2FB58B7851A9F87A8257CA9FA782F690D436EE0EA3AE1C649258FD7DFEFE8D638D1176869B02617FB10C679F37ECFBCD6D8FDFB46A30D068F371867B858BBE3CFAFFB030D30F92BCA496D702759908ACFE978A986B000BD0C2D91918CC1AF38BFE0EBD997017CF687F70D3ED17EF486BFF5449C8141FA64548A6C4F34E477B4FC0DC9CA09A6EB9EC0EF5EC119CF14B055240D9078BBBA339BB8713F0B4DB7B74CBE88EF81B8B2851E377C26672D36BB908B32D8DCFE33820 -MD = FF6047ED8A38D594F2D9B3E7A242D8C1873C923DA14C7626C2223F0D76D995867968D0890B8314ED11E21A89DD52232B - -Len = 1510 -Msg = 3231AA77DAFBC66F776E85C3121AC5B75EAFFE1E75E684E9E128332D857B397983FFA193A1982C966BDA623F065D7FB79F78794B7C70975F04BAE50C1E843E00222527B996E9407961E4EC08DC83851D2C6E4EFDD5F1B408AF0D9EB361E1E7CDEC6F3CEF0DA71DC0F4B165253F9AF8974039D1AE2B2FFECBAC3F366FBF999574A16B85277E74384B587005211CA3ECBAF1D8A6E2B4525D85DBB6E025A5A6A274D4AB5728BB9F0B60FF9E97598A3A322303FD228B487DEE554489750604 -MD = 829B5169D2E370E6B4E2E69EF944DEA955D5DCD94986C1D4CDB79094A3FF1055ECBE15420E8A995AE77E19325A784CB2 - -Len = 1511 -Msg = D40502C71D588EC7373853BEBB5B6C453EC1A10C11C0CBAA921723C5C43CA3FCAD59FE103A439421E0E1EAA81B927F7F90E2D9881A3ECF12BB041CD74FA925AC0F41800CDA6732720A94E1F64716EBB3DA6341FD33932EEB3A2C78148A4A241E54F3CA789C9E9CB798CDD048255E1CBDFAF9BB497428BF33D589FE2404966EA6ED025CF9D83974F82B0A0424DB9BD2E819EDFEF2CB75973BF5B819F1ACE8E0AE28A7FC82BC18A43B92FE9F86D1F9F3E09E5876DD33EC416357B036DD8A -MD = 671512148D972FD204C0EFF758781531E178FC8C0D205E3C520B2651B0003A8000524DC8BB56F039B1D75F6A8D92CFD1 - -Len = 1512 -Msg = C9534A24714BD4BE37C88A3DA1082EDA7CABD154C309D7BD670DCCD95AA535594463058A29F79031D6ECAA9F675D1211E9359BE82669A79C855EA8D89DD38C2C761DDD0EC0CE9E97597432E9A1BEAE062CDD71EDFDFD464119BE9E69D18A7A7FD7CE0E2106F0C8B0ABF4715E2CA48EF9F454DC203C96656653B727083513F8EFB86E49C513BB758B3B052FE21F1C05BB33C37129D6CC81F1AEF6ADC45B0E8827A830FE545CF57D0955802C117D23CCB55EA28F95C0D8C2F9C5A242B33F -MD = FF13C29C5E0D746CA27AEE38B6B49A13C1B3D70E62875443BCFC22A22E75031E60D68A917E3AE1D42D374D44CDC9F4C8 - -Len = 1513 -Msg = 164EC736064045386559CA629C733C82B4869BD8890BFAFF495CDF01D15EB92ABAFB515BF16374B33541646D671508B2CE2E4E686A1880A7833277AA51A69D5530339FA446CC614A423669B03B2305869A15FF83CDE64752F0515EDF5A9E48F8D032D13A73B7CCA40E5B2629CFEA0517223F39992BD3EE66F993EB52BE8FC70CBA3C401ECC4E7246CAF7F352CD581E4DCBF0C1A57EE47BE34F2F8D6B005C5898A9F1D0716AD7C2BCB028D939BF1259CC71EF3C21513139301B5A2E996280 -MD = 2C762FD1E1F11DB297A44D9E0FF94EFD408272F83C52CA72C074F41146B2BF1726E4E881B57D733E32F919518C429503 - -Len = 1514 -Msg = 93A3301751EBF08B69B4F632DAC659C973EA72B97AEA6745C3D256B4BEFE304391C4A8178B3E0D68AA32D935F10C455F2D2B419FD4041A0362E7F80E99C0F7EE35733AC1023664E80F97D3CC8A23226C1719D1CA3AA5D57FD37249340F280573D7D4F835CD2AE93429C26635322CC5B6127026CC7CCEDD13686D085292136ECEE97C4027A3625DA2B75B3970CADE67F5B804045C91F5C8C44004958EB6FEF772684B260164C15A55E98781898AA2453899E373EC0DBC940054D35A789400 -MD = 29CAF913220DC5A98DC49F3FAC20C2AD6CF6A8ECE9AC5C38512EB18630497E6758137A95C7487DCC4398433B073A851D - -Len = 1515 -Msg = 2F64B5FD5A770053A8DBF0244449755471C20AEF67A7B7F80119FBCE5F1C7684E491495D28A1C2BE005F7F973A851957BAC2E70B034E198B3E43D22B40ADA9925808BFCE4FFDB92C96D90A185209EB0C1073CE48282C7066CA26F06138E574CAD984C2F76AE1D17EB05E873F1FD5C767A4EB43C2ED184FF148D55A394F862F140431BD0D1D57190B5238C065270580066CEA65F6A13FF92AB663F7AF0EFA9102F008C1C017C9164D5EB01F345A45A1406885CC039D79421AADF30E038D80 -MD = D18C4966C8D758DD2247AF1C1801CCFA3EB7686BC97F5A22E8A4F9062472B22AC9947213F34343AB47455F77FAB8B290 - -Len = 1516 -Msg = C95EC3A4573DCDEB8ADD58F4529EEF16D9E31C2F9CE4DCA1781F22C9F9E74A47D3045526C7C053030079B462E6A38608697D6FCF7C0C2563C76449271F64B00025BE2DC445ED740C95D605CFB974769140477612080500A7FC64BDF267C8155AC9A068929485CFAF0A2C1EE2A8A005E993A4AD60C1FD2D6EB9AD6FB24945C807AA0A879B601AD735655121A119D87E14D0E3432EA6580137FACD27DB351ED3901F5C6330B7EE827BE2099904793FF3C6F3C88B2D684D10531432DCBBDFF0 -MD = 06C60C93A921400F0969013C75A7266C215FE8E587CB5B9C75F07A3630083663208C3D3940E30F86DE59764F6D0DB1D0 - -Len = 1517 -Msg = C1E2C87F7DA563CE3970CE5F1BB25EEE582DEEB4D95D5930064982B139CFBF0396DF7F4625B175AB5DB3170A42DCB97FF3588FFB9178A45D9B7B147B5361156393DE9581297BFC47A9EB4F4DED2C05119C97174FF0191C27C83546CA1F06DB74EF562A16D61330D2F3568A2F09659BE40D5CFFD1D8406711D90B51990AD575D1C34A8138A9ECD2F7468CD39DE4B9536ABC19CCA8EB729E5437DDEB86319B5A7412975DFF6EAD33ABD1F598061CAD24DC0810DFA064A3947A773A338C00E8 -MD = 1B4819B9D6B9B110D20CDA77A3E183FB2700A0B8F353163A6C6DA5CE050416902F6E517D0F09184905DDD1D3244FA79B - -Len = 1518 -Msg = 98F2A571C0545A06CA3830F8C73789AC2B5361BBB2B93AA1AC877781F827D3C207703FCE38031BC54189F87A43F10860D4B402DD65A4DF9B5AC88AF2B0B37F68BEA1086929E65DC2AFF2C2FD215D6C8374DE7A89C407F48C63B203896C353712BAD1AEC664BFD196F906952149E50600F831F05DF71301E0DEBE49591375956930D72D15550655E48A8080D651129C5D2FF92E80A3C13745E74397FCA228AF940A349B3E90F51CD58666F1BDA760B6A46F0558E140B6DFC4F5748C58BF4C -MD = 6F0177174720098772E30B43DDF94F6AC02FFC06432234EF1C77298B7EADC1133EBE26AAC8A1540ACD4D01F9149C275B - -Len = 1519 -Msg = 0A1CB542A7A25319117119DCBFFE09F7DCBFAB7B689182255A9A962E8CAE47736835CF659D7514E0DE2C68D319BDC2A220159B1FB090925AAA1660E1867461AE0FA3CFAECEEF44344D60C6803498DB0250E193482ED57871FA5393604B77A5B5C9A9299152F889407A1FC6D7309888F23FCD9955A43E3469FAA8B13676687C46DDB31D3547708AA814735735D39BA14CEA70E893DBAD172A244E51B5499D7607DC7D724F74ADC906A8C3909F643CFF39E5C3A41F12EBD18DC52E9BD4DFC0 -MD = F089706B7F75A7177453BBAD2D8655B3600854D4E023056508BDEB4F68676066D4C7AD7BD2BD313D9BAD614C092F6459 - -Len = 1520 -Msg = 07906C87297B867ABF4576E9F3CC7F82F22B154AFCBF293B9319F1B0584DA6A40C27B32E0B1B7F412C4F1B82480E70A9235B12EC27090A5A33175A2BB28D8ADC475CEFE33F7803F8CE27967217381F02E67A3B4F84A71F1C5228E0C2AD971373F6F672624FCEA8D1A9F85170FAD30FA0BBD25035C3B41A6175D467998BD1215F6F3866F53847F9CF68EF3E2FBB54BC994DE2302B829C5EEA68EC441FCBAFD7D16AE4FE9FFF98BF00E5BC2AD54DD91FF9FDA4DD77B6C754A91955D1FBAAD0 -MD = 3A4418A16896ADAB7C6DC783A0FC9F8D7E949937BE1D68B5EF02574B2B0C9BA902FB9C15ED64FC825D598AAFC1B26347 - -Len = 1521 -Msg = 047A906EB123927C5EBCBAD31211D731EAEAACDDC7CAE1A13D4068154D317BB7C010D5FCD6C4D800F3809D5083F8625BFA9AAB71E1687689F43FAC8675F51400DE5489CDC525421C8230B732EE5EAAF76B11B9BE4CC49C815FFA8B658CF0F18388C9D24202EA611E086D31BE4D1311E372E0115CC5E4ADBBC6E0B2C371410DA89196D8E447DA34E6B3787DA9B4293666FA6585A76FC2B130561790DD10C478A7E071F8EBFB933664F54ED398ADCD1FA35FAD11866DBE05DD8CFEC00549D700 -MD = AC558088068240F0B052D53CA401B8002F6858B7EEED311089F7F51339261C69BCE463A392AF87D72581AFF61ACC0358 - -Len = 1522 -Msg = 18059DD3D09C5F36814FE25AD96FC6B6BEEB0DB9ED79D6E8D1E252E2A43DDFDC9E156FD215BF8426F6C5EA127510BB99777349A0EB03B68D03CF8B9F10BBEDBA7482A86E1D8E054E60F9821083424000C215D13AFB47D3C33699F452AB7DA5E2C95685C7C87E4F465FE78A8E79C76ADDC3501C99C1734D09DA817EFCD4809CF57A105BC1253A6D2A4E23D2E431A426607CD1C61980CB26143F03EE50500503C63F0206BE5B238888A038B9EC34C24D5EB6E70DF31BED948F373B4F7E52B240 -MD = 2B2AEE8B93B7D0F73C0509F19C73FE96EB5FF0164741645951FFCACCEAC434BD7B8305DAEEE328503C3F10652EE89961 - -Len = 1523 -Msg = E31399BE5D40239F6B1925B165BB34573FD8FD179C082027792F94B67D2545630F0A680E85D2B835E31CAC2504ECDB49D191977D0E4AD69A76AFDE5FD7A4D70074E9B522008D3A5A1A6D60B722F84304395E2D7B7E29805FF653216833DF11C367448AE10E11D37091590D22EF1C97E16B3AC8CB900ADA0D357C9FA2944313D6B796E1C9995B07C03098E3777B7582A7091F0D03A611BC76622B8CBF80DC007574490DF0A5B93F25A1A6EA9CDD4515CD9CCCD46A56B116B7579E97F8F22180 -MD = A322B6B9EDBD45F0AECA3147918AA2F21C5AA77178DE12E6705D1F08FF59A975F24934A9AFAB48F6C7FAA47E054457F1 - -Len = 1524 -Msg = D66E3B30963A1D5F71160CEA74CC1E8C3CEFBA41D2CBF5D0E7DC3A97316E6B21A7D7C5ED1FC7FEFDB8B628BACCF0CED538FE6F6B18A8D1A9DE4D8E31448170F4CEA96CDC7A9F2FF0A18A4955C75C604DEB98AC158961D6891AD5FA867239781DA424CCC806E57AA77DB7BFC85AAA7EC720BCA36A6F0501E2D55D7BB16469C9E4018CA34317F5D1AD6DB2F0E410493BC8FBDF38C1B8ED1ADDB62C2F5B7592A8D8627CFE97F0FF180524845C8D6C5ACD823FA1D810FF8E228C531EE61BED5330 -MD = C49F5B7B7888C4A5DA2117109584FEE521BC711A623DDEACAE235DE8FA35992146A7F1430164172CC2268C04BD7651F5 - -Len = 1525 -Msg = 9274C08E458E1AF850826A75FB9A25F7328C6F427EC1B9231947306D864A8759E7D743F85EF79160F6ADAAFD829640C2E6C88892A21F0E52FE1746C57CFBF740D5674AA41F59A0135E66151B1FD654977A32C5DC744AAB2EE36D60A140FECF6BB5BC8A5BA8CE7CDCFA218F285B93C89B07E0349B6157241F7061901DC426BE93956089B38093513C792CDF73034989F8129B3232B540D5F8C86417194AD4AC481FD5465B7777952A4D3A784B0C10AF4A75C6FC09AC20973780B30110E28B98 -MD = 37ED090DD57D6E081046FD71CC00095BB41F838EFC9391DB755E8173664C8D91224711A57900CCFA0ED129E446A06CD8 - -Len = 1526 -Msg = 688D106A612E437C87E453D503FF3341FD0AC63A6C0AE190E5B7CB426F671DC919DE4A8A9FA6DE17B8D489DB16ABAFAE781A83A349A570BE5D5493D2882AE4FC881CB10BC97898BB67DEEC91C1A15F85FADF051B256F0A3098F539C84D51E42049011EEEB9BCF709146E76F0F491E1AF48EFD41EFB19406DDF842D25EB8DDEA67AD1AFDEB758F6A604938EB746680C5123080D5FF2B3CD2663A7AD7A7DD76BCBA59739B36ACA628C5454EA76496DB11A1538E00E632FDD41F386EA85C524B0 -MD = 4850E45BE838106126C0A6E50C4B8A15F44025B862C3EF04890858409E549F462FC408A2795F414DCED414C3854F62E5 - -Len = 1527 -Msg = 1D7E3221FD66FB9CDE83AAE60A4D78AB5A7A7CA08B829FFEC5D38D838F114B2115D29577C055188CF149F28C81F76D6800DE3A7E96BB808D13081914C9159441963F9833175B952E5B6BA09D62EF241AD19CA7942049E2575597B1A53365692BF46B211B6182D3C2321C15883A9D22FA8BFF917F26102F4E82331109B328DF7359836BFD008FE4F4AF0854EBB6BAE0561EC8BAEB054877F3BEDA6D8D402BA47270DBF6207A243F7ADFF17658E35D6F52186E4D79572B99D8812C67C41617C4 -MD = B23BCC35FD4A59C1A7F16C81DA6251E901D7B4E3C19489109952AF2D96792E3CAD795FA345E002F9546E28DAAF55D232 - -Len = 1528 -Msg = 588E94B9054ABC2189DF69B8BA34341B77CDD528E7860E5DEFCAA79B0C9A452AD4B82AA306BE84536EB7CEDCBE058D7B84A6AEF826B028B8A0271B69AC3605A9635EA9F5EA0AA700F3EB7835BC54611B922964300C953EFE7491E3677C2CEBE0822E956CD16433B02C68C4A23252C3F9E151A416B4963257B783E038F6B4D5C9F110F871652C7A649A7BCEDCBCCC6F2D0725BB903CC196BA76C76AA9F10A190B1D1168993BAA9FFC96A1655216773458BEC72B0E39C9F2C121378FEAB4E76A -MD = 17F84411E60F6BD856D09C0ACF314E7546466AB0C1616284D2240D22BCCC7240E5A2D656D35257AB49781BDABEF6FCF9 - -Len = 1529 -Msg = 7C7710BB2B7F643FA7A2DB758E18152AA812CA88461EFCE1177656AACA4F236555CFC69040EDF76686F30B233462AB67614FAFA20028DC0A42E6F362C8A978F12560DA7A2E4ED5CA37CC7D79F7A5E8DE92A6B9BA7D1E4ECE52E22A56904E39DEF32F2D03B7688AE1C3E499FFE9929D9577020465847E5B70710E7426A4F2552511F9DA9F8B7D0F7BE1EF17102E4562531F8259C07B52270DA01179BB320F7ACF3F5A6E22764DAC232EDAC5600D1C70FEAE0B011EC28D9D0B66A6CB860A5E9180 -MD = 7B3CDCF2AE78962D5A71A2AD62FF4D8D6E11A9BA94C5E733BD7EF87CA34B7CAA05F3AA0CF7321A082CE6B41E3ED1B802 - -Len = 1530 -Msg = 3BE11DD7FF78BB7C917005B235AC496BCA96A4317FDE079F6D358D95BB0352E9E89C29AA781203E5FD63DD2F685810386950E5946C0B9F0EB88877AF5175EE884E76935F5301DF59C79A06C5BFC6620C4D6FCEC86FEF9E518AB4146EFFE8813759D6415505D84B0EC66D58860D4D415FA36A28753F7C61A5B7845623322BD7743E079C82E6B9206398D665AC18C50FB073BE119AD5532A7164FB8FF8064D0D1706A2FB430E37AB478E4032CE110AA96B7963B636043EBB873F21FB106C5CC400 -MD = CD117B09CF8D053F608E3616D051A72FB9ECD673D01E974C2132899F8C5F997B9CD2CED3F9BA532EAAD0CA3BFA1BFCAE - -Len = 1531 -Msg = 50E7C9F830EBB80B5AC8B0A5B110483A97D5C549D343AEFF2259BE20E036CC1D80268C085B9C25317101E24E165C577D04E07887AD17A58E799C4C6758D8FBA836B4AF48D2CF31305A11FB92CBA4B23C4060F4A11BC2A1B8151AD547C6E9009DC1D46A38C633D956EF5CD75E1D697BC6D1251FB33A591AC4B138AB72C4D5551FB2C73BB5D946E16D7A9FEB18AE38BC58B2DF4254E650B8EE4AAC94D9444DCE18C2CF4D38A80278BB2E7FF0E167F252C54CE34589D93887BCD6371C73B99E69C0 -MD = 92FBDA553811A818E3ED0138B50E14BA3E699BB8BB7D9737AC40F71ADA5293C10084287340DFE9D996F07A7DE9603D8C - -Len = 1532 -Msg = 939685986E3BE870F1D7514A7AAAE50CD58EBAFF6EFB1FB64082D27AB939A40A568EAC0C1BBB33594E2471BB545FFB09A804176250C6E7DB8C11D0833EE70C09CFBB888116A7C8EB064BB52794425058AF707848DA63418A979231977D11FA509D7696C58FE3647029B7A85F9E6A682E195DE0D9F2AAD7E4F0DE6F22040B7A26720742AD89F34B09C8BFDA2072A0D43EA0AE4159B6178EF28A8A8FF9899679178B433BC78097924806B4DD854214D3EFA67F9C44DFAEFFD944E94E03C5728400 -MD = B028854C8064117F9B296D4CE35161BD25ABCF5ED2769AAB574F15788EB709FEB48B170D3B5778D43EBDE4EBF3C50424 - -Len = 1533 -Msg = 82EE3ADEAEDA69F4A21548A9CF4DBD79B6E6652782541C9B0F6F4C1589316E20E9EC5E6DA563449DA640E2656B5B790E1015BF59B647039625F3517EAE3D79279FBA90C40BE10C26D9D68C709893BA8EEE250C12E65391A66E452989E5CAB836B371975DD71821F23EBFC5367CE5FFC7B10FBD79A80B1865253810CAABB06DCAB11345FAD11F2A95590F4F35EB3D465BBECD174AAC660821DF9A71BDA01FA9C71D96E7AB191290A0A03EFA2EFEEB25C141F8CD8B4FAC6A075BCBB67E3B275C80 -MD = FF5229C43EA5C970BAEBAE8B254568C02A48939B8949A8A6172E0DD8B1670BB83B58487A535FD38C66A91CCE32189796 - -Len = 1534 -Msg = FFB1B0703490FEFC1C9FCB456E94CE7BA6366570A8B71D1B65B06468AC317461946ABC9B2330B959183BE534661975956C57DE13EAB4147E82C3CB72EF21524B35EF0254F934D966EE7A01861A3AFA9CA333251549859FCB105A36F16631E72DE0C9BB3D1051098F016E0864CEA78B4144DAC493C5088C2F212D29E115EBF3B6C7D382C25947950E9759BEF6407F8EF8F1F3BB9C65EA9111C3F4854732B8E8FD7F9C369D7DAAA5AA57B6061779ABE02C34419ED60159C8CCA33FE2831E5A3814 -MD = 5895C89496CA7CBBDF0C79020EC3DEA3195F60F1AA4E19C7FEA3F7F670B2585945B1DA52D4B0C295CEC0243B0378C3CB - -Len = 1535 -Msg = 2EDA3FAFE9381A10FFE89C83D818ED3E3F061F08A7928734842BB8B81D99019A342752418607DCE8E2EDEB229AE1D7E78111AF6B5C19FDF57BE5ED53F89BD7ADAD2265D25468529AA2A20C5FE4AF81ABF93FDDC23C37103F9795E13ABAAEB0B89AD0F7CBB5D65CE9D9C66CE49EC666920BED8A8E7CBE1343336BC82448594FA18502AA72B5FC509CC140F69453138BD07C00ED7B43992D04518416A863AB9793E527F31595E6E6E8A6D71582444006D2639A58181EA2B939B7AE1B2DDEACF3F0 -MD = 7113EE8F1D90D1F65F3B94755DE20293F8F039060404E7970207664CDEDB119545C22ACD6E8269C1D9410F7296696BB7 - -Len = 1536 -Msg = 08959A7E4BAAE874928813364071194E2939772F20DB7C3157078987C557C2A6D5ABE68D520EEF3DC491692E1E21BCD880ADEBF63BB4213B50897FA005256ED41B5690F78F52855C8D9168A4B666FCE2DA2B456D7A7E7C17AB5F2FB1EE90B79E698712E963715983FD07641AE4B4E9DC73203FAC1AE11FA1F8C7941FCC82EAB247ADDB56E2638447E9D609E610B60CE086656AAEBF1DA3C8A231D7D94E2FD0AFE46B391FF14A72EAEB3F44AD4DF85866DEF43D4781A0B3578BC996C87970B132 -MD = E577F79B0E05355B8F63EC1E639BC5A51A72BBB0ABAFE76D3133DEC4DA9BEF9A361F3E3C0ADB4C07E2757FE1D4790B9A - -Len = 1537 -Msg = 22BC0AE27FED148842D8DC7A4F75EDAFCEB1923BFFEC9837198C87BC5F982CEF077B6031316C06346D9A47240C5C3B719C8A13D178BB248724E79DDA498483EC4DF8114D007630A995F81CD17899B264E1B5878645842C1D918C4427E1F9216D79F1B9CB8C69393D0A4EBBE766F3ECE21AE05DF4F67F045C1CC10F713E4A035D2C4B427ADDE84327FE6B8DA75520692F094EBBAF83D4F2149B2E968FBAE7AAB189CC988B4EBC2E20259F5C24C985FD3DD451ED9F4ADC3532C792C3E404C75A3E00 -MD = 5E1CEEDB29F025CCB59A2BC51CFD2D350DE1D54D600C9FF7888F4D516D1D50A36C8561F34F4316D41ED2EC4026E747CE - -Len = 1538 -Msg = 13486FC0E375B8F22813F4066F9DC1695F945173CFACF57B9FB00518869EEF6AB5F50AF27DA2B72AEEC03014CB5E43E5FFF3EB6F1C912DC35C790962B834A5FA85BC123E09EC6D366CDD283ECB250CA85FB27F298A4719FDED869CEEE330C699D0AEE9A5626D9F6CA7D7891081738A5A897A1D3017AEFF03C74EBA000C53BE5AB121598CAAD58DAC265EF1ED5D365B25D13675FFEEA3B329210D9E3275CA305911075B44EE1B5F18572CB7CD15709957DF8FDFB0A05CE60DDA4A99C1797A0CA340 -MD = C698852C3198EF772800BB24F5E8051F5E32D8D87B8AC7AC222C327131DC6B6809FA2268F3B1713B05BCA1620F75B9C5 - -Len = 1539 -Msg = 4063E5DC8320BED3AA4B6F13EF74C24E98E28BB686EC8190B5DEE2CECF117A905795710BB201CA7BCD6E5EEBDB83D462370AC4311389EFF237934CAA55777A29F6B3F1297D4BA0D41BB0A62BC2CF97A6575B2DE8E7E9CA0489D4B9603D883F3576161763C53E2043DB33C34F6C898C975F5684CCAE891C27A5C81A72BA06994B6036BBF3B8646235B317C5CE02BE028FCD26AD04456C89E23DF63304158AC1D6E3206B94A4DC0C5978F3143BB98F7E0466E4A826C40CFCB88B72D56F0968D4EEA0 -MD = C8D5651F1D9EDF5A5BB834A08D6B4AFF879CAF9B7C3A9FFB3603DB996D40F7E4054A4AE1770FD3876322E7125BE5E642 - -Len = 1540 -Msg = 6A8DF103843D2D0485A3A89E41D83DD78A5310735F3788D4A69676CA4892190FC81B5F2B7AA11C68F00416383F13ECB8E299215C57A313A5EB4BF1A23B08C978C548151C515611A5CB0E75689A480A1119CEEF5EFD2043C1E7746A410396CA2873F6F0D949F35D6767E4986113061DCB15A5107B8E6D2AF4679DDE9E8EA8916076DD202D268C44114B26FA113E254A9512D73D6EEDF6A55BFFDF46BD330B354586191967C0B14FE5E3D29E8BB7B2602134E2EFCE6A1FB1797FC14D73A1AE5F8FB0 -MD = F8B2A14466558379AE923915F9D64AA9389081EABBAB09511DF99B3F4F3C4B508FAD1B96A156DA1272D4774BB49EAE6A - -Len = 1541 -Msg = 3CA201D57CA5785111782561451B1F8E3FBA9E6162D8DE78414F1F1C54C8E2A201958CA179D41EEECC204212BE77D90E73269AB485ED35CC96365887C076688E25E89F5854FCF9FDE708F6570BD8ECB12388D76354D6CE6944F2DB2B1499627FF5181119F60A0C864C3E3382CFA21901DA25B0E7DF7A1D944AD894E47CAC5895CDB75D547DE570396E6C1114B4B68702524D1CBC061D099B6926D9F2AAE4F8B54C5620319315381185795F3F0ADABFAFA6188C580A11527CAD352C20ABD9714280 -MD = 21239BDE7D9EAEFC3E199CE72FE4FB81E5354222F23ABFD2C09E5AE2D4B7FDB90FFD05B49147439D05DBEBB5D3CDE37C - -Len = 1542 -Msg = B20C646228BDA529104BE210123D5E51708EC173F76C372912124937BA09F9CEBCA094B382B78A567963BE62D958937BE084B82C10F31E03A5675529D8BE52E1EDAC3830C19F76AF099AD547EDBEA4698ED985A4F077C55CE029C512383C8CA6BC523A66DEA3ECFECC2F267F61C57D74ADEE7AC446903F7C90000BF0D2D84DCB240EAB650335979F93D67B5C206F1C8308EE90DDDBF8EFAA5EADA079379E3FAE3F414790F6F63A1AD54651164F6A9BBEA1606D84229AF9A9DB9826A51244FD804C -MD = 096B2D93733DA71C7D507CD2847663DB15E6716E4DCC73FF6083E6A7D295D6C8EF09CDA75F7964311F7AD3DA145B4499 - -Len = 1543 -Msg = 0F224183DD571D3B290DCD180DB3677C9A9B162D484C8244CF40D2DF67A249EC305B9094BC309FC182F3C12BDBE0562B8FC44EF0961A0FD03317BD2058D374D45BACD55303B1F8D5C59C7D5FE05479E5BC2CB2CDB5B447ADD45427932003BCE15F835AF3A9B94E1C4A7F492C0983D8D406C8428D67C023C6361578C9A6B5F0EAA9DAC2913D4CAD882C05C275B8A7EFC4BEF0C12E066AABEF350DDC8EE4451595379FBFE98C7D2EA9F6C770FDFFDE3852C818322927347B4CCA27EA059C8644D9A4 -MD = EF3D332F8F4A6534FA7A66C8CCF773DFCEDB311D3EFE3593E15C4E8B1FA5F236E8599BB0C481C6912569E0D5F1065270 - -Len = 1544 -Msg = CB2A234F45E2ECD5863895A451D389A369AAB99CFEF0D5C9FFCA1E6E63F763B5C14FB9B478313C8E8C0EFEB3AC9500CF5FD93791B789E67EAC12FD038E2547CC8E0FC9DB591F33A1E4907C64A922DDA23EC9827310B306098554A4A78F050262DB5B545B159E1FF1DCA6EB734B872343B842C57EAFCFDA8405EEDBB48EF32E99696D135979235C3A05364E371C2D76F1902F1D83146DF9495C0A6C57D7BF9EE77E80F9787AEE27BE1FE126CDC9EF893A4A7DCBBC367E40FE4E1EE90B42EA25AF01 -MD = F78106F10E6C1F1CA5190FE541345145EE25BC51D3C1CBAAA04C0DB2A3BA2584DDD30F3A889B94BBCB9573CD9417574C - -Len = 1545 -Msg = 094879F98FF555E949C7165606B1A9A17BF188B2CE0C904C89AE519373EF772AA8A08AC42FDFFD933F18EA8DFA598B5119D6F2FA75AA69B5E18951F4553448002BB547763E7699D458D04F893B065869ACD14F7C6A39CEEA6320A63158E7878B94AF3A3116A6150AA23B624395F1555BADCE532C69C256433BCDB2E74985E330CF408F00DE21F0A191C83E91FDE112598AE5B49916462A6636BEECC0372E7AAA0F70E8298EFFFD9E4FA943D2AB32B1936423AC4295BF143EDB174F5F1E40F52E6400 -MD = B55C19A97BEC87E95D4E1257B21E635E4F60A88C81D2E5E79DDC0D0DD81E271952D1F3CF7F22BF2F4A70E61996669957 - -Len = 1546 -Msg = F535558E373874104E154A503F82CBCAADD4617A38E9670CB3C012869DF16AF75DB0E9AC8866A48576A3EB212533E1064A60AC17AF43BF47A7D2464D93BF2261D0DA09A9F97D4FB5881CAE75B065E9F76967EB9E39A4770889423649B70CD15F1E091A8950C51F3AA29F66E99BC8C084627625899FAE82846CEF1979A94E29D9AA90C0C5E32A30BE520E7E7BB5EF0E9CB8CC5D2E9E7F41C37EBA0017C427417543744915A77B72DDC3161929ADBA0B992E9EC3B8626348DC889383D38060A8589DC0 -MD = 76D06CBD01C2FE63D0E0A10028A16F9B0C249BA2132A2C15C6CD859016F25E58F9CD3881E4FB2C5D125B0FD1DE1E5111 - -Len = 1547 -Msg = 4AFB68BB38DAF4C64A43D0892DE39CF0EE0B24499F434BE306967C933CECB3412F0DAA124E67FF1A58BB26C9FC9F91B6401317B84E0047D4B6E57D2F3D9C88459D1603B2748983A8C3B4CFE6E81EB9DBC299BA3927A3E1F76A5F54812EB9037189EAE3B19417B8F48CEB2C025F122DB62036FA4290B38DDB90A9687008A1B7D67DF503371785D1C7519FBE21B5B09C448FA69EE914355C95230D446CDBAA90DBDF354AF8C86E01DA389F02296A6B86153A078467B85885D276AD00216FF797B68C40 -MD = BBC5DB3F1157681C1A4734EF472D86301BCE286444801D6FDB69BEB183AA393CD90342535C4FFE34CE1AB510FF12E61F - -Len = 1548 -Msg = F0F4921AF9447384288AAAE217F8C827444426E8F5D06C61F7E6F02ECA806556C4A0AE6268E6A9C2AEC1A3081503BADAA999036760C234A66B6879ACDD9F59FE28EF3026310C1291007F0FB092D26F7E4B7B60C448E455A114D248CCDCF7CD295E3DA226E2FFE2C4F17E5B1EA6328A2A32DFE7D50083AA7516D90336179D3D6E10E77C131562834330233EA33E4B96C81570956BEE98946B2D2644FCAAF829A7299438DD80E22E81F944D0B295ACEB19608FEF6ABDB52A34C2422E18ECE9D8FA9A70 -MD = E6FC7548B74950779468C245C12319538B0DF2A9B976E099F147575C82E5AB5DA2C08CEEA18CD43AFA1B6480737410B4 - -Len = 1549 -Msg = 1E9E4FD505A9A5C29F41B86F0B4EF8F615209F7D231E08DE0636F4F1B01FA7DB51F1869C05591D5F0E5D758A1EFCFB32F4257805823E67C4D1F4C6A70D4AFB70C1C99E8E144922985400F778D676173278DE0B7540B667005B604EE77064C80F0B9A7BCD2317DEE692E2A7DB69BC4A1816675ABF2815AB732E187CF76BD7DC9D46B7258A6F6207C66F97E26CF154A700216A0BA6BF410AF4189633771F25EB8C38ACAFAF9B52AF64E29ADFC91EC48416BD51CB90FE6747F9706CC1FF347AA8969CA8 -MD = EADD7DD282F9CE337D50CEB8E26DEE2C49D0DBB51C4B850D6B931A5DF400188FC369AB0503EBE84338BFA1DD08D6D1D7 - -Len = 1550 -Msg = 1140A34A3BFBF1949E57F8209A253EB83F61FFBD9C0565433BE3ED949DE5E4C3197D6DBA2BAAB08A8E30FEECB6A48DDC96D5FC223A9E2A558C981018FE9EA08CE870ED81DD7D59AF73D4D5BA16B060CC82788558DE63FEB733241451527ECE313EFA7F05ADD1F3BD710069E0929B1ED4C01307C89655E07B0F89EAE1F701E9926FE6A1FF414E10FAB2FD0212C33F648BB3A3C9DA3AC60AB93A37F18C4B59888811B82349008A277415720D72EBD37C2A45B66094128F10D066D358E7EBC6E226B0A8 -MD = CC33748839D0F0E5C6C3538CC4A6E3D884C134B4EF31DEA2C1F1D97CA94720347E2D5EB341351C85FCE3AF5A4BF637CA - -Len = 1551 -Msg = 7A1BCC212431E90B8FD721E8D2CDF5B07EF8F8CB4B57DEBAF2A5032487B46F20F99C2951C769BC728C053B532F29420692220C958BB6783BDD83D36AE85761EC47C546B742EA51A041CBD7A8F57BEA69DF6DF348AB4272D7300AD9F263C7F8F7E631874B4CC40CA3FEEFA74D9F5AD720E6913F7A79BD94EBDA147C4830AB443C08D5986E045573DE8E65AEFC979FD84B25FA1C6F638AB86570CC5443DEB36D05A8B05A28D8A7F95B6510E956F2BFB9FB90A30BCD8C9725D1CF35CDA63DFB1E51AA46 -MD = 37697A2491FF7F2C14CD6E4E46F3FF7D537C3444E4785FC2CC5F0D3F75CFC3D707AEFBDAAEE6FBABF9D2D7B9E167D65E - -Len = 1552 -Msg = D16BEADF02AB1D4DC6F88B8C4554C51E866DF830B89C06E786A5F8757E8909310AF51C840EFE8D20B35331F4355D80F73295974653DDD620CDDE4730FB6C8D0D2DCB2B45D92D4FBDB567C0A3E86BD1A8A795AF26FBF29FC6C65941CDDB090FF7CD230AC5268AB4606FCCBA9EDED0A2B5D014EE0C34F0B2881AC036E24E151BE89EEB6CD9A7A790AFCCFF234D7CB11B99EBF58CD0C589F20BDAC4F9F0E28F75E3E04E5B3DEBCE607A496D848D67FA7B49132C71B878FD5557E082A18ECA1FBDA94D4B -MD = 6F42FAF87DA65516FC0CCA70A385F26EBDAA94DF64AA5E7A3119AC18C6214E3D0B61158FBD6C2487E0ABFB0C6C85EF87 - -Len = 1553 -Msg = A49A1590851397A7413ED265B02F89516A78D73558C36139B23BE5864E2C42170C24F08E3058C07CF8F07A41C1C161870D32AAAF5B11D08FA5682727B85B8D6AFE70000C95463DAD5E87FAE024881569BE2A543677F0BF62955E4836A2254D0047687AABD8D41E3842F37D5CADC4935E7C9526509FBF6DD4F4E69CBDDD2CC4439A0B0F772AC4EA3E14D560A85EA98B5929C54B33C0243F911AF5CE4A87A145763EF85A72B94BE5222459F49D330D1A58281383ADED89ABB3CE78A471364C2F9895E800 -MD = A58509EDF4A88B6AADFD6CA7DFB19F1A5B443836C560D32049626983950F634B8975A1ED9C51B9D40DFD77AF503CBE32 - -Len = 1554 -Msg = 037810EE77BCB2D3B7438AD56F145E4E936C170B5056FE2074D1D274C432856BDDE9568DFD9DE410207043632DC20D634159022A300D6CD82A6EFA4C0D7AB7E899D0979E5A445076FE31C898EC1F0F2A7A171417DCBD88F581C7ED7F61234C05A61CBBC7FB8B2EE4D656096042FC54F6A8DE6E472CE691165B9F3CA143E5021B606B9C1780F84FDE02255F75A9082A5685744C2059561444EED3271F6E6B287C36B729597A6755E257FC41FDD23AC9004C72B878B3199AC5EE1FEB36F94BFC0DF6A840 -MD = B2F9A9175B86963FE5EECFD733404A019D9B857009ED9E29A7C4ECFC5538FCA6E2BCDC890C3D827EABBE42E7F3F516F1 - -Len = 1555 -Msg = 71F4A1CDC25DA28537CF2C3DE9730490516C3989543132786A77CF8D6CC2668D0DDF4D78A057B4AC0CA61324A18172010D6659AE7FD66EDCA465B920390ACFC93AF248BCF8841452CF749256A709DDB58AE3A7F7410247C9746B31518AAF8FC960697379AA66CD7F777666CCE898C8A22FB5C34933960B98E1B599F4795A7C60706147A7C08DF34004449B94BEBE5AB258DF9E1D0FB1D5A9FBC22042D9316D3245BD80EF488084C00EDC7CFD47A445BA99479F7D904ACD1031A0186D70C0B0C2B93980 -MD = 1AD16A5CB939322469013A273E7EA359F7B71EBB2F92E9DD515E43CEDF0DF769335F89A0657C9E7D9582965E20D83188 - -Len = 1556 -Msg = A74842C1312297AF8D3C14B1717A71D2125AE4B27CB1F75FAE2BCE476BFB2038A514AC60F4484894885FBE3F28E9DA5C5BD9288D1F912B46EFD2FB928FFF70A6B3844E2953400303D5E270286D8ACDAEEDED6EF00DBE865DE3F6D5E54DC76B93C3412B999F39EA46E2B1A9969F1B09C8ED8E0DFD4F4E882BB29A0C1F2660EC4EDED872A7108A4FAC824623567B15D2B2EDAADCD5D7A8756405870CFE1C15F0C763CE4AB525A32207CAFFFE093BFBE7696D8A14571AFAA2F08FDCF55560ADA17A52BC00 -MD = BB19B0606C7A2F78EBC0CCB9986BB558D4827D7FD06270A64F4E3E6CAA065F7FC56ECE45B0ABCF2FE951814371040609 - -Len = 1557 -Msg = 0E9FA73B82BDE1AD7B2D37BD10CBFD89AAC53EEA32EB3C2DAE512B23756B9A696B19770A02B0BA0AEFB5142C8FC7314B16D8894D0426C7C0ADDD875170C0B709BFE52998656E22DDF7FFB697D457A1C07A290BA236C9F90B2D03BEB8FFBB23D750601BAE49A732ADC3C3CEE3029370E0B26FBD4317A2F23721B20CB760BF7D4DF04C30ED3A11213AE500F9085A7EC53095A99022D75E989F1C983D52F40112229D9BBA5D342D2638FC7535D8F540168293106E1B280CC4491E4AE551041EAADBE20878 -MD = C8E09AF49402F4F2B924F87C779254B14EA31AC879598CE3E1591A0CD3BEAC720244D6836D7A05E1B3B60D628DC0FA86 - -Len = 1558 -Msg = 7F725C787CF708E35CFD6DFE7F66D223C1048FEED331B3526C6360F846C0FAF23158CE2EBF2621140C5B4FE92AF12EA8448DF6821208D2C9A256D357E43566B5BDCA2F33CA9027063F557975B766F0ED1BE8626A17F28A94F41D4E6C51F0B8885C505D75506C6730CEEAEC765C4B0783A22782209740745DBB8172E89E92A29E136298240E7907BA38C893E21F23ABB2ED2D43A56AB9747555C9532AB47BFF6A56653B9097C05DAA6EDE9E262622987715BADF5BC25E9FBFE6E12B74F789367BFF8BF8 -MD = 7174F31915325DFF3E9AF8A6E431394B15F3157828A1BC3FF534622B828945005F469C21364062F1C7DFB9395F04C786 - -Len = 1559 -Msg = 185219625F19DC9F8E12AC7256DAEE6EEBA17AD72FF821E180A602098C22372C5E18D969B9059A882A22E10CE2512BF7A8C012E43A8BA8B61381C22BD1C5C4276722AAF3CC66C95F0450783D9150854CE0C21DC9F92D3C64AE6D1F379FEE822E886949040813534ABF765756B20B8586A2B73EA55A170B135A20BC3AFDD1D64E8D667CB5BDC815674F3BED646F890CBADCE08B475CD01CA656F8A6F87890271BB0AF3D98B51F3E98C91B641FE67E8F13AB1715768CCF01F34A61E4B61C9D559D0F1290 -MD = 8FE27FC7B3F111DB951F59C32A9088DFA28DB2C782138E2DBAE75DBD73A27148391928001FE92559DA60ACADABC5C858 - -Len = 1560 -Msg = 8F65F6BC59A85705016E2BAE7FE57980DE3127E5AB275F573D334F73F8603106EC3553016608EF2DD6E69B24BE0B7113BF6A760BA6E9CE1C48F9E186012CF96A1D4849D75DF5BB8315387FD78E9E153E76F8BA7EC6C8849810F59FB4BB9B004318210B37F1299526866F44059E017E22E96CBE418699D014C6EA01C9F0038B10299884DBEC3199BB05ADC94E955A1533219C1115FED0E5F21228B071F40DD57C4240D98D37B73E412FE0FA4703120D7C0C67972ED233E5DEB300A22605472FA3A3BA86 -MD = 82FC97EE34A8FCC276AE1C8130555CC2D339AA6CB34003488378855529F9EE3AF819EC104DD2DE300AB7DBC04B2B4017 - -Len = 1561 -Msg = F7F5B2062D7FE77A5C1CA6173B2C72268E83D68BAF6AA3F4692EB7587930F0338FE2A400369E6E414AED899068ED7AF8BF755A1E720F3176DAAE62E65BC8D91CBB1BA7409B4373B245D3655408D22B402FED1480A92D4EF3BAE5E6450E2D7846650C684E1B174FAB86F05A228969CBB3F7D11977A2E1F6EADFBC6A0531EADAD2970D62B63E69392BD0A55FC315F92BFC9C383579D390FC447780E429E5D28DB5116D9E7129FA5D61920D680C743986D7B4E21A9C54FA272066978D740BF35C572F418C80 -MD = CC03908A2A96ADBD23B333CEBF4AB054D59484BAA43D0C718AE5CFD86EC75CC9CAC5DCCE27BBB85B4B751D2D56D7A90E - -Len = 1562 -Msg = 89CC05BE42885C72B4A3E790F3E8E0401707A5B9EDC34893C4DFC8D9227F9B98480AFDFCB8521A1B2B7D19F9BD77712D3D7538EB74F9BA09A1910BB065A6A809CFA777C25DB447B6047CDE44FF96C1ED5D93784A2F4D261EE4DF2B083EA5EC3FC070832648A43A8836616AEC89909E89CB1BF034BE1C69E25E48369FC2EFC345F9A4AB91FA20EF0C96F81EE00F597A9B13E5FC1816F5025802A30F79055FC607B0E0F114DE264FA2E3F2EF9B488615BDDCF810F8944162C682BAF41642A6374D773FEC40 -MD = B986FFE057B3B8E56580E180EC5545B2A792B8C47B8A1ADFDB343E56CF3FFB08F9A6BA38E80D92DF654585708009798B - -Len = 1563 -Msg = 4F6927F8DE4BA416E9C4E063B80599F4DFF974600CC6EBEBA4709EC0945395EF99BD5B7D77471EF6C04F17F9AB7E1B91622A35E47148B7533331E9986220B9E4D08F254BE34D61A0074DDA157D3DDAC8F2DB4711BF5730F65097A0629B741353CD263FE173BF72D76A6849330604349E775626F49943AD74F583C060431AE9204060EAD1BAC426851D894AD41E52CBF0BD48E734C52547A618B10F6415E92C200795635A61C47AEDE65864AA48F17E3A7729D5AD883C2A6A924EA54266A384F6F92EACC0 -MD = 10147A06FA9A19F7C3C5EB997CA06852FBA13C05E059BF67221C049E52E421AB1723EAC90A88BF4BC0EEF88E6B0D9E5A - -Len = 1564 -Msg = 7A76F5CD6C47FBDF0B300E156ECF26155B385F4185B844DC560F413F2C2437D3F653D9E84070AD44B173BD568D0A41ABC009532C0B0EE41A7A35D45508E7CB582F761D2158297C15A8BEE1857515621B5446696FBBB7EECE96B3BE7F3B7F3B2E46A9A8328D0DC4C61AA56AB3B417A31B6D1D6A25BE3CDF31EC6B0084E90D2BE1CB2397B66E6E93E2EE0D5532CD1E4DE1C9A1EFF1CB5E6D4E037097931511716A25BF2AD382B16EF07DF13CB9A800CE8D7F1A0F664108147DB5729E64FBF6B55AD741E8D0 -MD = 0874D5E0DB25733B6E269A87D031962F164EB4289A4D5B6CCE7BAE5FB8D1602B2A679A84B7BC534623F84BDEE3B73A01 - -Len = 1565 -Msg = C3D691B57082AF833B84CB2956E41FA99D40314FC4D7655BA3C10851812161EAE38650CE8C37CCB8306B91C2F5B650C33E0B826E8EA97180FE7E5D8A2FD7C0F3264DB8465D68533CD7289A1C0682D30AF11A04C92A82FCCD569B5D432E83E57268C4A219C176285B25886DD032BDA105FBED64F6EB233F1EAF2CAC49CE7A3A7F72F0B07310677D680A3800DF2A164107A7581FDB77E24201BF84F0D6FC44FE7711CA9AB59308A8FD72DD2C551EC10D43FE42EA44EF96B5004352071FC212FFDD05F6C3D8 -MD = 6C00A212E9973372672E2F31B7B55A4981F9DB41CF8BCFAAEA86459050BA0797B636E116D013EBE32F8B94A99411817B - -Len = 1566 -Msg = F0E6E8CD841FF441FDCD2CB144A2DB21C2D41E7700634B3F8A93A02E979349CB1A6873B78965F5880B8782432D22E856EA2C78ECCF2BEEB4B02E43A3574139364200357144601774DEEF24BFFA5357D5336AF4A61F8B7144D9834576796C9B95697783861A51B35B79FE28EA9F04082A64A563EE52882D3811652FE95FCDA0AB4095BEA34BA55A05DF43AC7BC925D080F890E9C8E7C37CFEFAE2E075DFA5B14566D7452117C64E3CBFF151694B29A7C599339E119F6C48ABF398B3CAA65E21A2EA19BD58 -MD = 09637B7B6FF85FA1F123DD71E6DD103D1FBF138DAF76D0258357869B65EE7D20543BB475E849D1EF90E98AC29B96DC8B - -Len = 1567 -Msg = 2FA46DA3D6241ADC5773DE113EEDE19EC18F8E3F531EC13C59B1CF91E73FE39AE132390692669BC5BE14DAD8C88749D97B4122FC691990D353B0EE4A55A0BFC4462B9F7D876FB4A39197E887017835E54A26A4C98EF91F154185D47DB1A681F6F0183C8BE8756D10F511059619E8634C38B55955049B4E0BBC214517448D6BC33E2DC8FE8D3D286E1631E4580F07C2EEF5317642FDE6AA5A2BE4C55D25585FB9B303C24DAEE4EE0E623C0A4B621AF20314D74434264B7C6EDACA3358257EC39262BBB55E -MD = C6CE0A0561F6F47C815E860C948844AE5121018246F356D509E30B050E42D2DDEB6FCB1D7B2E0D03815C1139BB20E5F1 - -Len = 1568 -Msg = 84891E52E0D451813210C3FD635B39A03A6B7A7317B221A7ABC270DFA946C42669AACBBBDF801E1584F330E28C729847EA14152BD637B3D0F2B38B4BD5BF9C791C58806281103A3EABBAEDE5E711E539E6A8B2CF297CF351C078B4FA8F7F35CF61BEBF8814BF248A01D41E86C5715EA40C63F7375379A7EB1D78F27622FB468AB784AAABA4E534A6DFD1DF6FA15511341E725ED2E87F98737CCB7B6A6DFAE416477472B046BF1811187D151BFA9F7B2BF9ACDB23A3BE507CDF14CFDF517D2CB5FB9E4AB6 -MD = 75D140BE47E116211F4F668E05ADD36C83B3E481DF9F28064A41898335D97C805471214E29C0B849875845C9B8DE25E3 - -Len = 1569 -Msg = 1924D11C865F5258A151DC2CEEF6FFEBE86E13120A3DCD3ED6A1B790D1C653C8DD1AA2933EEE9BC3C7EB4BD42855E7C5E4CF073C09B179F2FE7DFE4F990B62ADF093739DC25607265D00DCEE57291047BD2B23000A843842566B4D28C5F022885BDC76FE0C3CB0368CB2DDA3A9D327E8D0BCB003668C53BFE1FA294496C5128B7C3B41EBEA639D070C11E4B2997E886C8693B6D1E17D7B5A63F752A74D2AAC2D8BD25D177B5E4A532B3069A6B71EA3ACED5B6D5EDF0DC723DB2E336CC8F5D4690D1477F580 -MD = 71510DA64E8E24D470BB4C01987E02F3BC3E4385885176EA5C71704B5F648A3D53EBD2687A2269800D18DE1A021978B6 - -Len = 1570 -Msg = E7935FC6CFA5B3087D0FBE6242ED76FFD17FCB91CB388CDA8507B6489032D6B8772BCD0FDF8AB47A353C3F5B42A09E1B8A81DA59295B48AC250506D3742CFB4F758069A89017AEF3B6CCC9FF79C4322971788CA874D0664CD5F5900C8A57B4551107F58674EB19081DF0175241850BDE8B1D28D3345FFC0B53146A6EC728F72A866162AB9A942B0DE6EDE0D35E56D1102B71C9E6DA261480AFE9AA032C910B7E9E5372510603CF888BADBF5E9E469F6A59049FFC8F05FA58CC4ADAF10FF6629286F0F85EC0 -MD = F061B8ECA1B26F7F9ADB5EDF6D9E2F27655C56C73B0DB0C7F0CF1147DD582CE2496122EE3A01772A9EF3C80A577A12A6 - -Len = 1571 -Msg = 14C24ED71ABA68FADFA20979A31A6F0E64C839AEE476B018FEE6F1E6C0829FBB764197BF0357A2C03EAB0E61E793F7185BD3F1863E8E5A3970A1E0AEE86D401D7FB079888E5CD442F56780FB05384DE328D00834C504751A28D0E1D028AD1455277BC662A3DFABF903DB129342659949F8363AA94E9ABADAA6C33956B410D4B914713A2DD59AAD28B66791A2942B3FEE58F011F8E8CB693D9D52481623F11E300BB51E808BC3AA346905EEDA2EB59CB469EB99A0B1F2D7DA56CE6167D5005DCB18DBE728E0 -MD = 9F21D91CCDE98993645E8EDE15870A2C927C60FC1B4317EBA42201A8836D9E406C6B3C8889B359CAD19E9924FB34A99F - -Len = 1572 -Msg = 94A31FF206DBE122709C56660F5FA690FE65273F918B44118D647BA94E81C8FD837AB68EF7A67CC9C3FDAE7F29883B31E786D0B4E90148CB146D11A68828BD4D3E16FFF6FC010E93F5FE04453C23DC6B4A995B1DB5D430E383B78F8D90D7754434F54E56808A7BE3EDF21DFDF2D824B94D7CDDDF652D1655A7E1806C436AB5BE6BCB673CEDF407AAF4CBA98A9335339B6F86BC11A08A08738827B29058DD6BE75A83D11D6E70285E062E7AA1E03D79098997C13E6CC45235EA37FE02BD0EF47F9E4C5028D0 -MD = B18F240EDB60BFBFA5E5DC5BEA6EA17297B5635742C55FCAC37AA4780DFED8625C6D1FB38995E0C5329BE6B431105064 - -Len = 1573 -Msg = AD30B3BE44B88B1011FA94DAF026E1F9B7CF834B972463E8BB77BE43F068127AE9BE0DB3D2B5B20118C50053239870571D9971721BB4AEB5F716FDE77ED2932E4AFBAC5C4E177CE68A0B849E91373CD2202A22085A775F09765AF9CDE7B359B8CAF4ED89B0AD46C856A40AC477641A2E793FBA446A2973F70C978F8C9116F9932BB39AA530DB1B4AF2E0EA9EB8AFF1225C275EC204A5FB091784E5D49814C5788CE7D409893B38AF270115DF681082EBCC051F2390C20B5A80EE74C213BA29499FC9255390 -MD = A713D43C67BD2A9AE869E869C50DD1BB64B4B239607B6B17D8B08B42DFAEBF223DFF1BC87E97D1DF6644A360CA3DAF70 - -Len = 1574 -Msg = 4C86FAB1AB85CB3D2D6394869241DCE2DEE5B3097373DC2584858C4B0D2A8494A802BDBE3C1BF08FF1DE84773FFE307A0432310B6B874AA55833BAC8B56FF7C0FADB831A00143C9BC17EE0E2547A90F95FF2C73F1E6BC8E3AB0745ED5814972AA247D72AFD7161C192981FA8B85DE7CDCAE3F023FFC4CC62E5257129D85F6E0D950D28C457512213A84BE7DF5AE54FBFE7964D3FDC009C70322FFA50782F443763730CB4CF49600FD4A3C831D580D1026E6EAA1801846EB2A8175F528DB9A09B1987AF148C -MD = 41417B6D15929AD97C2DF6217E403E5FDB1A5E639BC52A63F178AC6E5B2245E18B81CA36A923EE599331465869F4ADF7 - -Len = 1575 -Msg = F2E2E57FAE32B0A84C5D7B43174C74DAE20144A875A52ECFFD0BCEFFDA3B86E7200C1FE848A7A89D737204D199AFF82CAABC2723C7970618BEDB3FEEEED2CC172F5FFC0525ECFB7F6402407D85273A21DB19CCFF4FC5F1487EB5A87BFAD8E1C9D4832C1DE34D70ABAC87A68342AFF65881DD881876570C1404B4612345341266457243D5A03D7C01B4B34979C01F6EDDCA3EB662A79A73A0E12992424F8F461321466C8D481E2F90C31E8DF4A79F39F9F5E87A8CD12055B31AC6ECD4B81C975B7BC3F30048 -MD = CC50AE1BA58E3793B86CA3434AFAA49A298FC5056D2D273A32EC25B443A51B15B2E3546F42FB409C9BE0F5851BA5C33F - -Len = 1576 -Msg = FDD7A9433A3B4AFABD7A3A5E3457E56DEBF78E84B7A0B0CA0E8C6D53BD0C2DAE31B2700C6128334F43981BE3B213B1D7A118D59C7E6B6493A86F866A1635C12859CFB9AD17460A77B4522A5C1883C3D6ACC86E6162667EC414E9A104AA892053A2B1D72165A855BACD8FAF8034A5DD9B716F47A0818C09BB6BAF22AA503C06B4CA261F557761989D2AFBD88B6A678AD128AF68672107D0F1FC73C5CA740459297B3292B281E93BCEB761BDE7221C3A55708E5EC84472CDDCAA84ECF23723CC0991355C6280 -MD = 1A04CD93747CA583A58AB4A8C7C8C7A33F025EDE1B2DD080E5AF0C4DC63C8715E436DD57FF7F401DECEF813F330D6588 - -Len = 1577 -Msg = 90E5EC58E79320AE60ABE631E3073FDCE992CA5BA19A6E3F2272F6B0E9F9A9BCF70236C5FB0DB8DBFD980683DF4C176F07C27A944699A5AC7552C0D5D3824BD3E95E2DFB7D412FA0A8F5D2B73E0936F11E6B95FE8AB3FDB02A8ACCD1AC7867066318A3F60F244F79D01CCCB340BD4216B8C9222294187122133605EE25230DEE6262DE75506648BC6867A8C70FEB75B687661EB9C5D87C630BE06CED62AEB7A6C8B2A7DF23FF8A34E3BEED0CFD3B30A3ECEF1B59BA1C8988A46971686658FA110AE238330700 -MD = 10C594AAF9AD268244A35AB12058DF7885A40D196D86C7C51BD7B351B1A8B8DB5AA316F1AF527A0402F806BE0AE8A736 - -Len = 1578 -Msg = 7D10486481F81E0B593C849E54D047DB523A6F31E7B19FD80E747364F43CA2B1773DC9B62B004D855CC38330EE82DE4EDB37F07402A9301E40A6E135EE2DB0B8BFC493B69E4DEB2543E0241D8416467D8CAA0FDC73E6D6E177A0A18885946318416F0DF593BF680EF5D10ABE8E752EE3646DC6280DDBCB500548290D4E4826D685DE446037C25068A9424ED6D0C9B63EE650A42674B7E231F40761F7F367C043537E320B79C9D9071362A7E9F6E65AFD9BF4536D860AB58015715953718CDEB040240A731E40 -MD = 5FB41EB72DA55EC467B6EE68087069D63395F621D0D625FBE08A3587F699E1EA15D27049BD550FF95BFC518083B5DF0C - -Len = 1579 -Msg = CDCA251E2C752A3E724A0D32B65AA4B1D5C87DEBC1F87D802C6DEE8EDA523C10026985390DDA593ABD375E86FCA31950FB74FA6FAEF330225BE70C71D2492C95410E6B115BDF694DD5965C6D4FC5B585EA4DF25803C9FAC55FAC49EA732D736752BC8634A2871CAA788261E352A1C8B3A645D0E22BDF10D62C6756E656F9E78314BE069B2E1444B32273B8EC132A4DA2D10EA148EF8161D238B11A437F2983E26B7C8AE95210B393BB3E624D99FEF3C72FFD1B521B8B4D41B426E4F8055C0B50776EE059C6E0 -MD = 5CCBB6D3D56025A8E0940C83AF7E72C660AD1BF5447095C5D2C4284D43B7CADB9C627DD9DDDAF871CF9E32E49ABBEC6D - -Len = 1580 -Msg = BC114681C35F67BEF8C8CC81BBDF40B879EA33A05D034B38B6EEE163819DFFF9E15B0B9ED7A80D9FB9C9499AD2DAC94AD8CAB68B4871E3423CD35C67D710A37830478C344EB4439B0BA4ACE3554B682F6BA20209923932ACB9F743D8BD6A4938466531FC5AB43E6E8DAED4815F288C16D909402DB7ABCABF8B96F305BB7BBD1D73D86FE03012A9CDA5AC4577BBA3ED9375EB9566C12A0BFE08F4B8EBC663A8B0CDEA53D65802847C09A07E9D8E51BA7DA92F575D523F2D1418EB5D169CBA1901B7829339C4A0 -MD = 1415983AFABB2705D0FB4D4548AC8511990AB2DD9C233935C334E0975132483E4A8FC37EF459AB0CC3B16504142258F4 - -Len = 1581 -Msg = 5019CE0DD714A0C8B92017E26AF6BC433E101A4EA01D2E39BA4FBD467974C0831EB6F4E2639CDD8596EFCBEFC546C22C75D8F742C0C3439D49C199F9D4ECF9CCAF4D375BB8508FD8F7314473A1EC2E3B9A12386122773F8AD12E6C9319134FB1C8EE836C8CBA8B714FB1D0BF11190D1E9A2A80D7907160607F43FA0DE59E77850FDD32161F05A9C13C8C6BB0F5AA8D2F8A4FA1C38AF78C61A26B560F06FD813121BC133B54D88CF1033EA7069E98AE8D8A6E2F99B584AD8F56DB1ABC1590E8DE34ADDE195CC8 -MD = 4CDC1F9B178FF91661488B10EB5AAC3BCE88A53D2358A82D3B7167E891B1E801E787FFC932AD4510D71D3DFE1BE4FAED - -Len = 1582 -Msg = 2CC35AADA46B1AE9F81024B610740D81451D81426C6A02C00110687C39F45546E57793C5B31EBD9A1F52A14279A767C58816D77377873B91DC392888C467916C876391A5312BEF9C13898FCAC965CC7AC6B7209D757E40618EB94FE173A27A102679173E1A86ACACDDD181E1B0684F78EDCCD712229979A0A9BEBF55B27A8E74ACE453C77A681428D9C775C701BBAD9D3E4EB8EDC2BCCD09DA540F7AC232DF89E379229F47330668730E2E262695C6FE1F3E7E553125241734B1002EE7F6B39FD4695A686248 -MD = 62825C04FDA7754739DA3504FDCB6E68336FB2616FCC09AB60E8090E54D9D7194B6C82511C1811E4C410998C50232107 - -Len = 1583 -Msg = 1916F52B31159E1BD0C2F375057A01A15CF716B49160C7AF88BEAD7A1D91ABCBFC20595DF3BD0A36FF92F0E35495E12E9EB49FD9C38EEA08567CBF32074389843541090B742915BDCDBD0286F66A657FFAF248E64C15053A14D02ED841F268205716894BB36D13477F2045A57DC8CC51BE67FD50BA15757E18A71A7F529BFC8EBE84F8562645169CF4EA0DF921233287B7530553545839FD5DFED59DC7610D3A6ED7FC97B5CEAD9E17AEE9E5452572075E7656CD517E5E94E4A01FE66403E26A6F3DDAE8A504 -MD = 79A375B2B144E3D6B87E3A8A5473258FE9B5669E65CCC5D12B097A180C7CB653CCE35611A733999DFFD74CD004FE0B78 - -Len = 1584 -Msg = 70A40BFBEF92277A1AAD72F6B79D0177197C4EBD432668CFEC05D099ACCB651062B5DFF156C0B27336687A94B26679CFDD9DAF7AD204338DD9C4D14114033A5C225BD11F217B5F4732DA167EE3F939262D4043FC9CBA92303B7B5E96AEA12ADDA64859DF4B86E9EE0B58E39091E6B188B408AC94E1294A8911245EE361E60E601EFF58D1D37639F3753BEC80EBB4EFDE25817436076623FC65415FE51D1B0280366D12C554D86743F3C3B6572E400361A60726131441BA493A83FBE9AFDA90F7AF1AE717238D -MD = FB0626F2B189679DD998BC18F30DF82D0907B62AA77C8669E22B53860E3988503D884884163A561739254CA13929B69B - -Len = 1585 -Msg = 4A3FAD4471E41E86724FDB35F4D3B26BFF60DBAFC5D4BD351135C8A7478A3B07001CD9C20829D41471A146A3EFB8EE598612F921CD1E4CC4A47FCCDB8FF0F67F44680E3378A8AA64619A33CFB5A4378FE4079567813BFB481BDC595B307BC97D70493FD08E2DAA4D97D2AA64FD08192C11D0A41A8D26119B0E8EDE30EB80F4E8BC2B8B0794C393B6FC23DB16F46DD6BCE8E52388B8D014CF6EA40EF553CDFC33EEFCF4898436B60162B98D99B1EF472FB4C79301B56AD49BCD6659BAD899C81F49B81D67CD9200 -MD = 1ADBB13525FDCC578265EF77F99A00DD563AC356EAB926F92C8C62D070D42363ADF9E3CA49FB08CE7386ADD19B116902 - -Len = 1586 -Msg = A68AB5DEC5519049A81EC8B6EC950DF8A9D989B58B5C4C397B22801DC85A24266CB91ADE2E99F53B91B5AE3C23B7D7185B21BE6582048BC8A1570E828C5D46666DCE1DCE06921ADD366D9043BC797B3E6EDDA00782FB57C13ED2D2F555AACCF7840D01C6DD75FD3D700C3BB18A49A7D60A879FD4BAD06D68A7C5763ED677B0C5A248E3CBE476A674D31F8C7DD5521C4F652329D56D6DA138D50D3126BE315C1963F376B4AFED50EB2F16E645B86593FE7433FB6BDB40621EDCD2F41E8D6DB8A1031AA73D7C9180 -MD = 35A9FFE53FE66860395586B409885966EE1B051D2D01C21F42C9AD42FA9AB87416474F333B68AD4F9185F6116EE4A76E - -Len = 1587 -Msg = E99B30E55F72FBE081ED5AF28A0B464810B49F98AD1B41C14BB47CBB1EAFFF99BB30A753099FB3FDD7964B06C6340E0C96B7EA1B95E928823A5090AD6B668E3CA047BFC8C653673B193F892824971C4449B37922304BDD160465CB842D3F44AF50C742A7F71C2A08682360CAE493FB8384644F056B5D9B25E4B2799ABE70E905CF7B0E7DEBF82496009DDB054754A9560C18377EB64D1BBA169C353A443CD9D80E6A39801FEBB9BAE3549399982D8C3578591B198ABB8CF2720C33012E76319EDCF1BCF0FA7580 -MD = 617879A0B1E0B9F97D030DF5B881CC99AD8EB01D9B6B425597123A60E45F3F0235038B81A2852CE780119ABA20845BE2 - -Len = 1588 -Msg = 108B8CD3F79E74BC10D98D8A48A480A171ECFE1DCFC279D849AE49A01484A964070F0AC4400F85D8C0ACB88CCF5B6D41E7DFBD3FEF08865592C4052924DC0674A9FBD68A16FEBDE0CE7FB61C2F0D4AF7CF57DB925AFE0BA6109348F11BFD346ACD5A6A8674A8B6D6BA3229D4588E0419849A555B4121426F22C61B4978EEE4A22DA23D2A8E96BFBF5D5BFA4C2DBF3CE6FDE6433058E9738D1B3043134DCC1D00BF5860CF17115B8D6FB2AF35DE707F222520CEFE5001951BFE965DDB654B37B8B935F4BDA1D9F0 -MD = 5F903B4210248C935C932BED1B137280528143F3BF3DF2742EF0C0CDE18963E4A421680A5D0E4A45B6F8D811B3346AEC - -Len = 1589 -Msg = DE5BFAAE3D29D15E1B522121DD99D62671BD1CD310CFD04825B0A203BC8E4068C765FC005F916E218FBFB3DAFBE565AA27E3E26401D450CBAE7EDC8ED460431BB0CF3BE8471E2ED60342613FEB2E6685CDCD2DEF4053905565BF9447F36A1F4C1DB380E607D9B331B64AF73F9875540D8BBE1A2C6AAC1BBB8D7FEFC22A9136F5F9CC04001B621AD5569D341FBEA3F829D76ADEB99BB4C6A1AA0D70C22DA85B40D3ADC0EC31812CE3D40ACEFD27377E99F748EF930FB60AFD4A83C9810679806EE6B0DD9432F530 -MD = 5A6DC270DD16D8ECE6EDDF9CF9F1FBDD59FEB6917F721BCFDBCF68A8867990EFEF37F923CF02351F1C9914D4EC3A2B7A - -Len = 1590 -Msg = 04CFEB6AE07A84B6BE0A8FBCE81E3BC966D4CA35888C9F83E215FCA0280526ABA19081F862591B91C98D52DB46C9CB0ADF79F8E74B66C8C8F7D9BFCD2DBC6D37E25433F81417E84DE6A1E79CFF48A7AEA7898C722D4754110D9A151F9DB4E7A0E460C0BBD0A607E3F1B9820B878B3BA21820CB41E15B9BF6FC46FD0126064E0BE9BF60C0E6175291DDB35B53A39DB570EB1DF10CB6BC54D40BFCF2A84758C54EDD42A43658A87C2B6D6E7071D2D3170E2218AC0C9389888B2B9E25339C8D4E25D62B789BC1EF5C -MD = 2FF37321C540F34453F9AEDBDA5D55FDD263DB13CD5C099006A604F007F43A24484C843581DFF9C4FCF9DFB79099C438 - -Len = 1591 -Msg = 68C048F9095F71348C5534663C9E927ADFD3ECD4F99CB381AAC3266F66315193FD08523A905714D4E6B4BF72F605A68E164F6057538A3DBF89683B9665A047B018168E16A24990C61E1CFAC62CB3B888B4F2C5008F49452F1DD81B94288BFC94B89886B5DC23B55DD74A51C74A4D44DA267C9443340438FA3ECC220B9E5E81DDE7049337522473996E8FADB6AC0775D3D3C6ECC8FE20EFE92275071909229830024262C762C9DEEEC2DC646B220D5D5CFE6B09BA8790CCC10D01BD8E5178F5ECD92C6E5233274A -MD = DF6D37E074B72E6215962A320C7F406C2B829307FAA903B42F50DFD1018F8675CB599A84BBC51245BAE5DE1112423A06 - -Len = 1592 -Msg = 74356E449F4BF8644F77B14F4D67CB6BD9C1F5AE357621D5B8147E562B65C66585CAF2E491B48529A01A34D226D436959153815380D5689E30B35357CDAC6E08D3F2B0E88E200600D62BD9F5EAF488DF86A4470EA227006182E44809009868C4C280C43D7D64A5268FA719074960087B3A6ABC837882F882C837834535929389A12B2C78187E2EA07EF8B8EEF27DC85002C3AE35F1A50BEE6A1C48BA7E175F3316670B27983472AA6A61EED0A683A39EE323080620EA44A9F74411AE5CE99030528F9AB49C79F2 -MD = CC2EF9602F80D0734295C7C158EC366608CF60A423D0836644B60831A94E7EAF994C81F19174FD6CA75BB246BBCCA200 - -Len = 1593 -Msg = DDBDE9D6BA8A0889828CCEE9243EFF68E2C4D342E84273C9F4B4F6BAA3F2CF622354FFDC7EB6D31C9F55A341881FE7AD266B45B8CCACEA665C0ED227AD699051C020EC1C51834D0B7BDB69352B196CAB5C0C1648ED3A9BF9D77550A136EDCD294FFB41732E010CCA56BA0FFB20B3296F88C7D2A802F60AD7E39FD1F8AAE9F5B1B075BCBEA2CA6B3A79FE5BC2D13AF5BE022CEFDEB32E3659E2437F10BAD7210DCFBD21AE1B60E54862AF0B302FB596ECEE90783BC98798A31CFD9ABC07D2BE5B7379480BDCE1BF00 -MD = E155A0FA0D21811F2190ECE532F759986EE89187E180CFE2C7A1F3066971598D453DF912963023E87DAED062BB1ADACF - -Len = 1594 -Msg = FD76F5473E5DE24298193400A93C9ACD88CE44F855C1FF2980B0A40AE8418FB7119CA8FAB283221876EF54E7C3CE09AD70EB14C1B4A18A11FEA453DE45DFA5D16BF0071392224D15A7DCA73A10F2F0476F5300AE8BB88F706F22DEABFF0E6BCAEE981E4FDF7A028AD7B800A65A994EF73DC2F34166C92EAECE507DB3DA95264B36E29B30EC9D852172D5E227468E735EC8C43177ACD1C2EEC380A7FF6B44748580F5190EAB108C37517217757AABB265EF18CF97B3DDF7B2BAC1ED07105B8825C5F2B955F23A6900 -MD = 7C843EB135CD0FA6CFB126FB2632A608F003185C677DEE1A959E3E7C1667866309EE3C7044B2BB69FC96426D85EF2C0E - -Len = 1595 -Msg = B82326F747C89F4976951420E31FD1969A46153D0F58D43E8D795F89DF7863AA752CF3210123937C76772C03B8C824ECF3601C4BC469ED02804126192534568B662FE8BC5CDAD86EE7B6F9B0F2AA98D996A810316830833B2B4C153F0AC30646D4E02B34417930EF1A5BA15A0E640C092750DB48E79EA7BCCD9ED1A5E24B93B3AE53C6F6380817A5491EFC9A29D8C8211C45152CBB28E1B8DA29BA4E634097BEDC1DD3C46ACE8E920BEF9B41CEEDAE26EB1733664CEF70CE8B9B4CD8E5377FC498C7C64348FD7C60 -MD = 42BB7D462829B4D3E4D0D6D4A36E9B4CA0EC5A5F70F1D85DF1338CAF3B7864DD9D61A4D5E69615E2C380C0F409B0F894 - -Len = 1596 -Msg = A1C179F412135FB1CFEABCD4D97D1B9AC22DBA60C174A5E889A188D3FA23E31EED0DF9EC72A1B48FF965DB0282143E48F15EEC05B0502A34B9B1770F79B299E1088183F080FD4C390C069AA310408D3B9E39961EA9457A18FAD96687DCCD6F8E4C3CBFCC55537919CBF0816D563BFBE2D7B32727625F1FAAE1A7AE153A6C1AB45CB8F8915F66122CF0570BE115849A24901CA6CFCFD96FBA7290455452881CD09D143867A67313C9D4ADD919436149200C1A4D9ABFA84A66A935F2B6203D0125A9654A5EC16117D0 -MD = 17E98308A9D9F7FDC8A23E6A157CC2D584AEAF3A07A61DFE826637FCD1B9AD4D9E63C9B3EBB94BD2E014C06AF7761F8E - -Len = 1597 -Msg = 56585935F30E0C5DF323FCE4A4714E50186A1868342A2692302C0A93AA273B1C0E9F4DEF90117D0D20DAEFC40E7A3643DD5BC87BDE18F59E9AA7401309A18341AA687411269E2E847D6647274D05807536F39559839F3ABEB1D92939B8CD682DC2396EE27CB5A5FEEF2F3C66294119A4303F16E76C5A74303064941B2437212B73BDBC83E02ED998CC520E8EFA5D388E94D869F02D2E82992F37CBDB238001033CF481776D706759C29B1D69A1EB9EE1653D140BF47F9AB2E5774B60F14128DB0FDA416DB783D5D0 -MD = A8A45BEBFE92E9347001C949B920B250E9BA0B1E713EE4C6F6015696B5C75726B376623CE5511D1DA8650E6D71AA11F0 - -Len = 1598 -Msg = D3522A6A36034E5CB35A86D9AC147076015AC3FB2E268A7B2BD1961E7C50E847BE9690BDD655DA76641CF0A9ED6185AFD5904145392DFD0D7BD4EA7940AC6E0D49EFFF68A23D8278C1692CD4B08AB49E840FBDA309E8342FA77F38CF779885138ACE50D1BE596A36C959CC8741E607C453455E63BE1F15FFA3F1558A7D48C5F2B3781158117E5839BF4097F003D9B52B4AB21F099FF3464704F48C68505F1CCE098F071C5A6741918884A14B81D12E02A88F084299832CC51EC8D87DA25D5E4C4F6139B5C3F48DFC -MD = 9D082BFD4F042933C6CE3F637E81365C38354311CD3CF339F60B6708B0799FF7613A20A3D8616CE4EA8AAEDDDDC47468 - -Len = 1599 -Msg = 347858A3C88CA84AD4E03F46CFD4A20D0CFBD31B9EAF5E2A428D8050A1F53DA5D8D42730B8E9B5D10578760CA2667F99F0B73180A88E22E75B11A524E789AB5E9E7863348A6D26C337F55307DE45D6E18FE951E0EF65745A54826A6C4F141588B11F904F9477041FDBFB40F260B5F49910C0091894812F3E91786050A5136E944EBF60C57A3415BBD5DE0C4BF960E1983C6F0A36A10B5336A800893A2AF078E734A946A3E1105B6DD64A16C62379F72D7D808F14793FF6264F635262553C9312DE0F80C0A5D43ACE -MD = 0365CD82744F49ADF90D47A249AFADDF4F347A4F2A2B0C129963F70BCD78F4B8BF3A54E05204515122F1429BDAFA5C57 - -Len = 1600 -Msg = 8C3798E51BC68482D7337D3ABB75DC9FFE860714A9AD73551E120059860DDE24AB87327222B64CF774415A70F724CDF270DE3FE47DDA07B61C9EF2A3551F45A5584860248FABDE676E1CD75F6355AA3EAEABE3B51DC813D9FB2EAA4F0F1D9F834D7CAD9C7C695AE84B329385BC0BEF895B9F1EDF44A03D4B410CC23A79A6B62E4F346A5E8DD851C2857995DDBF5B2D717AEB847310E1F6A46AC3D26A7F9B44985AF656D2B7C9406E8A9E8F47DCB4EF6B83CAACF9AEFB6118BFCFF7E44BEF6937EBDDC89186839B77 -MD = B5A7160112E0825A7C03643BEB98B1FC2549B81F01C3C4271DFF99BE57D472A7FAD133808D7D2D414D6011E9A2E8DFEC - -Len = 1601 -Msg = 24E94DA7D1C92C690323242366867A5B805F81EC7C1132C024EDB5D0A09614DC67C068B0FEAFCB6DDEDA0A1C346F2238B0C6D6AB17A197B5170BE004275106E4CB9711745CBF1696B3BC7B764C693AF4F43B30DE3196A8B61A3FB5754EB7B99F5F9B65C8B2190B12CE038C0DEE4D3F95BFBBBBCB662EBA3BD42143A61415C728F736CB8350F5DB2351BE4BD6B8785F20209625AC2F56A789DA397C65F2E6BAB2F5C651F543CCFA554672FC46F9C6AB63887A2F7FD30B13BFE66155CD964ED7FF4937EE8626CECA4880 -MD = 064356E333B69C608A5ED14A8043207C88EF5D412ACB525D0E937EE14EE35782D2205A670990B1ADEFF0D9CE1F14B7A0 - -Len = 1602 -Msg = 70BCB8E40B6F1FC372AE4582872E2806F12270013A5DFC58B2591FF68CD1EBF89DD5F201E226C81A9EB7F4B391BB8E3469AE3311B3279BEEB191DE6067CA55AD661DE8DFE3B0D88BC9577EA5A3CAA8364CDB54C40ED345EEF3F46E8D8D69B35C0B9D9A881DE6FEEED0EBC814618D1F5A9A033F59B51773D4B91DE7D366DB28C71D8D08CBEFF882920ECD240026EBA6281BEC7A4AE692A77C830C4DF7606ED3161497EF547B6938DABAE45E01FD2D3B403AE9086F98B69FC377C6B0B353E62FDF7FAFAD48CEB91BDBC0 -MD = 492306A451CD174A0FC5185E0ABF63DEB75734D9D66085CC8FA911E2C745BB865128A5FF64EB7D2A57DD68E653722560 - -Len = 1603 -Msg = 67A2ACDFE159EAB1A5B7D9161BFEFC43392FCD250EB68E95BE7D309BC453507687DBC8E26EC6954BC8CA87D825D3E87B149676D717C05F8FD953CCB2B998F57D9D13ACA970DC073637D1F303D0CB12E6BF2E6E6561A09B3EA1CB6BA3217B43B73E679BB3F59FA227E7BFC6A785184D24516335FE9282E231DF0F28D36248E125D9A6DE1A3CB08FCE7955BC1984DDFF6502BCC100D952FFA62E69D664CB76B6B4D4D02993F92C5C3F2EE115C384C996154DAA3EB2914F0ED2826AFBEC2DE86594DA71ADA1A1F04D5F60 -MD = A34FED7B3BEBA4E3975111CB973CE60FFA23BA5D39B70058CC7DA4E6B71E1348518E545E467DF26B7C8FC04A0399B858 - -Len = 1604 -Msg = 92C85290E7533F339C3F8637748E6B756C4CE24D21C6E5F2CC29D5D5B0FE770473BE6D26398D22B88B67D5DC398F8EABB2747487A5635DCA0C18D95E3F522A1D0605AAE2F99743F591D31961278ADEB03481DBFE3FBA5ACC722127567EE9A60872890A976E656872FF9696BCDFF8120C49C337A44522507E98D30D96DAAE13197C8464EB2CEAF011C79F83ACFCE448B0C15BF5FA94AC0E6F61770DC55FA0D9AD3B708164BEF6665DF6EB51F3E493C8E7252F3562B464E94E849A12DC52AA19A0067FA41F090C607950 -MD = 01FBA63D42676FCDB70DE48E5EE492D764C8819BD7B63D80745AE1FEE1D0538FECF23C14508239B4988B0E50A0FC8B17 - -Len = 1605 -Msg = A8847BD4C5F54B7BF00F4D0669F7ACAA71BD0C69A12D53F998910C858BD69BB2A09D46346C04390E0FEC9F6547B04209209E1C0FFA41C497BAE7470B6D3228E081773454046B655D0910088FF7137A17869AA97992C0CBB34C513BA06420EC3C0610C0DCD1A21142A5A3BB50CC50A5109FF8D81796D015A8E99DD352C1E6908B19C1F55E617A04BFB699F98798DE1B456627CFEC2F2FE10BD880A4531B4EAC2867E782A8C9A1D564A5D6349B3E02C27B513D676FD9819FD28D37187C80406D1A377FD16C1D5511D288 -MD = B3542E96314B2AD653DEAFA2C1BBC764CFD7A5E99CEB14F0E2C041682B0110E50376A1AA8565D8AEBC9646779110812D - -Len = 1606 -Msg = 57B6CF67BE832C5FF9630C6C23F45EB662D91CCEF2313DBA0B3961FF63A1C95D2193511B3CF773A9E149701506DCDF66CF148682ACCD60CFE5261CA8482001A75AAFAC4452AAF3EAAC7B0C6F963AF736A8C07E175B06DD38B8AEF3491343C2C319713EEBD2063125D970660BCD813B25EF8E208AC96DBFE21D0106ABAEEFBA9EBEEFDF0AEAF41C011E6F91C0AE8D84B104E7C33CCCB863CA72FACF09D1B8FD0EB1BAC3A5B07D3004664B9AD568EC5A254F470CA99FDD5BA7270DA6ECD0983B5F3F1107BB6F8F4A9BE4 -MD = 499642F1EFFA6BC3C9F2969828B6A8FC45184DA0097D10A55369F8263061A6E813B75CAFD6F913FACD9A5879E51061C9 - -Len = 1607 -Msg = 773E8CD756FDA30FD5D91E11765CE2E07B9ADB1AA5D28E54690C42E2C88270522EF70BDC457E671A2F0BE72066FD6AB9AA4FADEE137A2C7B33890B7926AD69514ABF915B094E4602833A4C3EC2A294D4A86791637BECA3A2E49A6B1678C557EC667177F2C98BAD18137A8ECF7AE31ADE6645871AF70894DDA7D5039A1CAB5836D3F1FCE31FC4260609C5A85A3728D7E50D521CF196922FA72C6AEC3CE6A5EBD0C1C1ECF45CC8F2E4EC0B283B359F1E7CF62070888E9BA2EED005BD1E7B9E50A6CD7146361773610A76 -MD = 029B8FBE7D9FB48417A99C1353CEC02E768BB47B0B06FEE487C9CEF11A407F16B997D9F4EDD3AC2015F9D060BB868935 - -Len = 1608 -Msg = FA56BF730C4F8395875189C10C4FB251605757A8FECC31F9737E3C2503B02608E6731E85D7A38393C67DE516B85304824BFB135E33BF22B3A23B913BF6ACD2B7AB85198B8187B2BCD454D5E3318CACB32FD6261C31AE7F6C54EF6A7A2A4C9F3ECB81CE3555D4F0AD466DD4C108A90399D70041997C3B25345A9653F3C9A6711AB1B91D6A9D2216442DA2C973CBD685EE7643BFD77327A2F7AE9CB283620A08716DFB462E5C1D65432CA9D56A90E811443CD1ECB8F0DE179C9CB48BA4F6FEC360C66F252F6E64EDC96B -MD = E7B3118D7FCA9D294F596D820F468CD9027920777A41A706EDE877CBEB9517F223B268C5E805A374051822692E9AB44B - -Len = 1609 -Msg = 9FF8A2A4213E2CD5F76338232761F86130B1609DDBFECC9EE0712A7F3DEEAF36BFF36D0959DF5547713E072DF78E87BA6F9A0B27B55A15A48FDB21897DD5C76C1CD22266B7895DC06969098C9E4EA6B4E73287D50075ED84DD14535214ACE53CB9F8935CCC7DA8EB0B0A14A5655B19429B4C9CD842B4E1A3DFE980ED978236ED49E6C82526D18122583B61DD9A04E04372344BED009271C83CB352219A0E802D2ED016EC94BB799D69663CADC92EABA4E638A2781828AEB6BDABCEE600510BE61782CBD3F30361AE5E80 -MD = 5C9882D3246522D6E1ED14393F71E646FD0240EFC89A4554C285168C2903B2F5F13219F2713EAAE7B312F59505A1D36F - -Len = 1610 -Msg = 1AC32A48B8F354AB80580B77B6ECF9231CB9B5749DE765EEC1E7A3B8A751B6D7B3100520B27EF10D4ED1E9671D31721374BAE63FDF4014BE492E868FF08F159BCAAE359FDFEF88C66A5AC7A2A55DB0D93BE929234F7FFC8BD8D3FEC296DC2A588CF47AFEFC10FBD7E67E81CFAA1F61403E9AA25CA4D11314590B1D74828F90416288A2D10CBCA43057518EB7C583197C44F03ACEBB7A8E12F1880860335E54D30BAD54171DE4904E5BD3F22F91004A2A95467F24F8BE0D88681D79978D1948711EA3E49308225A3260C0 -MD = E3FB951054258A213371E772B0C3EB5E4AD6F6E895FBB5C4879EA1B72987062B6BAEEE234037EE757412286C89571473 - -Len = 1611 -Msg = F0AD4970D30ACA266FE736FD168F4A023FAD4E998BE61BFBF20587432CC318FD57748DD6792B973857381A095A8A1D234D6D98B89E44427ABD07A622298A28C888D1C6DEB24FF2B8E29029E7616B9D4E3769437B6AAF8028CD856A67AAD1E627E52C941B1DAC239C6555F9E8655A28E89AACBC8D830B1C5AAFE4A104D94C4E9A86BFA24FF74C08D341FAE30C705EA84C78784366EB37A43E3F7FBB671D0177B61FF5420214121C0BBD451BBE6BD32E5A6CBC2A4908F48601AC24935D8D861846039BC53A16C583019420 -MD = 6C3F853592E1C55441AAD4B3F32BAFA9304FDB433DC80BF81083AA01D9D819E79B49BD5AC2D0EF3D3DFDA1D17EFE7A17 - -Len = 1612 -Msg = 3BE987D46800EE451CC793FDA988C727092851357138E7C112FA5F611114320951A65BC45AB34E1887A73B7FDF932E6743CCEF3731737A5520C6F4B88437A8B4CFC89A78885C1D8612BDFF6F4EE5C0E5C36DE87863AF9E63803740E06D16C2EB5F44BE7161F0ADE58A94DD6584DE18C80CFB88022A50C1040369E8962B70D9160A847C4207B104C48803B1740E9D1E1F5F0F4FAC4202E6E98D2D5C09FECC2C382084FC63CC9D26AC8DCF307118E8D72CDE0FCF04067443A5A1A9A833912E041FA251A9647F2FE2BD9330 -MD = 68C7879271DFC9A6E3E0A09FF21517F717882989E45313D39FE59D1B6E3123A73C2B8FC5177E37717E5EEF03C40F1A3B - -Len = 1613 -Msg = A8FD1D5C15E4CAA7ED292CD3693F9418E46AC4C9635A1AECE4A8E0EFA9B76EC1E356F80A54A45C62FCEF3B782E2882115FEC648E89A58D47669131605AC558E14F43A2DAD745521F37676F4B2C491FDEEFD42C3CB6D9E313638D843C59702EE637BCD813303FC34CEDF0DC017F93595DF8636505E4E96FFDE3D369DCEBC9493E7AD0AAFD1D44FCC25121C4BDEA74C07EC0264D20973E526D5D9876B17D5050978DA6B39EBC530EE2112939804EE5DF60712778B66C917DDF3428FEB2E5B27BCFD69CDE6ABEC96B5CB500 -MD = 431E0B14A914862C40681F0E2366A757538CFD5543BAE7D7D9954BBB4B59993A76C63808C47B0242B6A379577C119B70 - -Len = 1614 -Msg = A46537443AB90410B94FE953B2D17D44BBD81E996022690F081EAE3AB7FFC9A9BFC419BFA66F88F3260C44D71E1D577BB9CA1C3A2977FAEB50C6B4F21117BA6976BF964DD5C2146286A35C608474E8D87A708C04DD0165655C4AF624C0CFCB88B844B18E4B14514D3A416C46BDB0A95D9D42301AF1EE9F82E6CAE0531A5C92FC6A1663B9C07BC16A982C08017C660E77CA1313ABD742CE18EA7B92C0944859AF6E2462C00BBB2399D33A86D2A10ADA9AFD3DF6CDCC001CFBEEC4A320A014EACF3C6819928F54C492A430 -MD = CFF7DF8BCFF4A66EBF733AD2F06103A790CB62A8C2C1114FB50531B5784B9653980B6DB7A9D32A5F076B8CB53E6FA450 - -Len = 1615 -Msg = 2FE16DBF1226D02C64CE853C981B1F6FE6953504EA690DE36D8E88915C979676306185132CCC2BA8F603AC355C8258044FFE942FD60B8CDF2E7D0C0B0C8FB37967AEE1F6327253C3AFF37FF0FF45C06C58141F389542582BA07C36AE59F173F83141C9144CBB9800B77661BBC0A16BCAF6273E1E476A72640256CA952F67C130F6E8F54B0BB5FEA837467C5507A0DFA256868F6868C1B0F98AA9DAFF35AF40BBC816DF280DA9A5896B722353857CADFD0793D2F17FF0DD6AEAF4D0E589D09A13C22A3C2C7623BC86DD30 -MD = BE27F276542BAE5F53C3B08E8C6601BE132DD5317C86417752CCB650DA988182FEFF2F4C9768A91BAEA15D1C565AB4FC - -Len = 1616 -Msg = B6134F9C3E91DD8000740D009DD806240811D51AB1546A974BCB18D344642BAA5CD5903AF84D58EC5BA17301D5EC0F10CCD0509CBB3FD3FFF9172D193AF0F782252FD1338C7244D40E0E42362275B22D01C4C3389F19DD69BDF958EBE28E31A4FFE2B5F18A87831CFB7095F58A87C9FA21DB72BA269379B2DC2384B3DA953C7925761FED324620ACEA435E52B424A7723F6A2357374157A34CD8252351C25A1B232826CEFE1BD3E70FFC15A31E7C0598219D7F00436294D11891B82497BC78AA5363892A2495DF8C1EEF -MD = C3FA6C9D0FF231198AECA80EA428AC4B32C481D390CE4A90D0F65FF7D58F696C1FAADA1673D7E2D161462C95C2E2A310 - -Len = 1617 -Msg = 9C931DFD9C4D8C101C8F629C7B12084CD414F91DAC571E93F843CB77FB6C073BE1227605078AAE37D880F31D660692455314C9E818AAC083F4C9533CC2F9DCE60229D1C4F3A6DFA50AC6DD4C5C7F2AF2BAD5BD7F308BD3618B40FD9495EFFF87FC338E55D6949BCC6DF902CE0EF1F496E2D8E63DC225AEB9D2FC7CA7FD081B86E54D87E441FA1A5251ABF4C004C691C684E0009DFD3FB7D6620126CB0D859DBB884AF8DA735CD51F89316F28E11FEDFF238C13D0DBCFFD4BDC55AAE2C0C20F6AA4C9CA620955A050B11D80 -MD = 67787CC818BD1BD81710C1BB6B1BB571F7BF4CD46D95BE71B47911E454132599C9684D95A3A9F0AF3D923A868B0CD775 - -Len = 1618 -Msg = FC9E543C76D384217780D7D47167AAC9826EAD5BD2FB0727A1BC37A15D31E45C75C2543976CD4F2C9C244DD358402934B37242C0210052F1344130E48D2D1605334F0F05592F1A2D9A40E0CA9F24821B51FDCBE2B9ACBC78D0CADB31448262D90147943550B913445E07AC1DB311DDC2CBF37AE39DBFEEB2353DB1C66C4D7448281CDEE230ED6075F5F8BB1BE7BB708337EB5ED98935F81912A86A6F727A611183945F4DB323E2374B70C6743961B84A9DA53E45397E3B8566CCB049C97B43704CA7CDD1BEE8543D82FF80 -MD = 81C6F135428BE1F6C2A65DB6F8ED781CFF6E57D37A02C2CCDBEBE2787DF22595644D072CD9455C25A95071E13CAE652F - -Len = 1619 -Msg = 69B28A0A8AFD90F5AAC6C3C3906D619C2AC2312C5B908306C75E0D1BA79551B4FEB1EC9331A463385397EE0BE08F5F7EE8F5CA73B849B35817F19A827E3628651D79112BD514291FEB570057ACACEF4B0B99500BEF10C7638A0517B3F2F69E0F76F6DD15C11E38CAEC38B02C1CA4EB53028E604058546FB1EC5647F8544ABA1382D63D6020374559C3DBB35CB11B80208E1C464BA71C35EAF87455CFCC5E820592CF4D094BE9222F027EEA87C9AD0FFE42E84EDE6B4F2C6706E78B81449918B5F83D7D72481E9D11603340 -MD = 2C1DC40E013DA00FD8E283EC860E3269F14B6516F9610E47F689EA61C5053304D9683E3A346FA1AE9EE36CE0FF59DD6A - -Len = 1620 -Msg = D616E9B17727CE826D28E5672AE1124235B8D3CCA505F931DB0E9FCB68AAC2324FD78D81F632DCCCE2E55654AAD4F4F1EE055147034F21F675E11833C2A85236EA23BAA44C3F8CCA4CE61C0CDB1EE635C361833CB20A16815942C637C67F3B5C0FA833D2717CA27FC339A66009BA76EB0CD1579312946FDAAB821D508859BC5AFC1C40042F2B61A0AD9B68357E216885113A052FED54D791BEA264C904C037321CE39EFBB8FB69DD700DBE53325BD8A71F6D832A7B7817F3DEAD7248EE86C698826BBFB58F6807F5E03AF0 -MD = BD9ACE73894CFF0E7C48A838D48D64838AAC3AAF9CD0F00B745D5AEBBB52BB8B3710E261883F87CF7281661FE3D35E7D - -Len = 1621 -Msg = 570A724BC4DB5A97944847CF9496A80699944D703300E06AEACD03BBA32BFA3D335C265DDAD711B00B0637DE34BE4920395028A4021F51E56B0300196EA2E6FA0F281205617826B76269346F725833EC2CBEF01E8CD10D506AE1421924A7118830194978E5D5FF48D64315940B740E149436D0C6665E1EDEBA26D2E898FE8B153CDD7AB4D542F4845F3836773D6528329D0338768CDD1A83F40FC7DF5601EB840C7CC60A3E1AC40DB4A2418058E5C0C4AD572CDAA8E5DF2D94CCF97C5E9DB945F7157602383A0709E785C0 -MD = EC0BEA7FC951E12D00879A91B8EF42AD830B41E5AEC0A47D6E0499405017D93145735A6B7ACAD76C519133611CACACD1 - -Len = 1622 -Msg = 705BB313E3151FA58E67D27A222063D89CC1F51B0F85AFBD286F7A2679DE97E85608283BCB05A722B4964FD00469DA851DB6478AD123D15BD7C345168644E655CE27B26BE4860226846316590FE4A928EB70EF137EDA87500A1D2B7C926CE24F129CF2C26108C13FFA54DD7440E7A072E86F892A7CECE5B32FFA64A8EACCC0894918BBE03356EFBBE1CDD0D8D2874D4F0CF2DE97B6FF136C82E52CA2DDFFC7C071B235FDF45EA75F882218AA447DB1774B524E491A71C8AD36EF7E237586B8EF8C9D1F51696FA87BB7BEA8 -MD = FD530DCFAF7F9BBF7078B6DF302BFDE54EB4180F81CA38BE73FE62452530DC969084AD60E6ACE841E7B0EDFD6155CF56 - -Len = 1623 -Msg = FB6A9DFFEAE4C1DDD12A0B91B6DF791491C66FA5F63C17AACA03E05A021A0FBDF6110AB4F613DC4A18C3529510ECCAB3487B52F29B21C721C36A9D8ABACF0391BE26628855F488A67EE544F5A8F4ED28496F7D2EEBF0A6293848914D5AB313DBCC97FE8D6557BC0B55428EE9F9286473E3CA7F419958C3A6834B46DCFCF7FB33B9D212B8499AF8F742F63680C8BD3E9ED47483A765E7A24BF8E025FBC6F22BF119DCCF0C8325DE3842D7A38A2D7814609DF157CBC468B90E5F994E3FA5ECAD60086584D7DE80222F19080E -MD = A8A0EF879BD65C5DBC3A242B002F07BB39003FE53478C475ECE273CE2DD114593E2AB64472AB17D8031D00552E2CC341 - -Len = 1624 -Msg = C941CDB9C28AB0A791F2E5C8E8BB52850626AA89205BEC3A7E22682313D198B1FA33FC7295381354858758AE6C8EC6FAC3245C6E454D16FA2F51C4166FAB51DF272858F2D603770C40987F64442D487AF49CD5C3991CE858EA2A60DAB6A65A34414965933973AC2457089E359160B7CDEDC42F29E10A91921785F6B7224EE0B349393CDCFF6151B50B377D609559923D0984CDA6000829B916AB6896693EF6A2199B3C22F7DC5500A15B8258420E314C222BC000BC4E5413E6DD82C993F8330F5C6D1BE4BC79F08A1A0A46 -MD = C4BD1157C093ACB27BD3BD7F444F836BFCBA0DAFE11675104C6437E5981442BE999C860DD6E1B75FAF6A553E907B61EE - -Len = 1625 -Msg = 4512826ACF04E03A179B4637CDDA71C13DE4A063A95616E213DD9BF6F738EFFCEB958D8C5FA812CD9F7E0DC1071642B327FF8FA5E30092DFD3422CD66F371AFC8F5771EB86734099F9E731F303300E49E2196371BC90359B2099241F772F9BCEEA3A994ADA8E8A9377D50400264CD6BA2C016C6DF662194962F394C684CD77D1896980B6269944196A29EA086B6D37D240A242273B7BE94FC2F9DCE896E68F2AA6DD7E02360D80F10819A0B7B3631F9214498465ED58191F33A002E85781E21C711E4239481C704366E15E00 -MD = 3D2ED655C0E256606C0D9D680A388CD6696D24376532ADF611397356AA1C303FC27F9C5B57CE9787BF32285713381ED7 - -Len = 1626 -Msg = 5F0A71F137E9E6C4A89323D63F4C64524A8C571FE3B461ACD6ADC6868BA280CF54209AD953F2B6C79D94EBF15440257B0FAD8DA1989528EB001637A9ED39B5335111B580091106D3578BAA32220763B87881BF1C04E6F735316B1DD60939ECC8FAA36723443835BEB11375A8D1777A1E67F8383D13DF4D4AC7EABED0639F6937FBD56BD4861A2619916E378AF371B26302978C98D29B2E0D5687FDA5C0042865B31C18CED3D93E6955F868BB2B1DA780FEFF91FCF8C2FF368A19B053A4924CB118D4446B061C57AF4DA86100 -MD = BF7D1CBD0108DB547F824FB17FFEA725DBDD32E0E96703F131905CD37171878BBC5DF5DBC75D4713D2E536F2BF811F9A - -Len = 1627 -Msg = B5508E04114A8AD105281386E03A926D5C1D30675AE728200DD66183ABC7CBADA4B04461905FB650ABE443C35A9CB1F02036DADBBE4AB835546DE4B073A169EABF7B65BB8A7A189469C5FEAFBA84EB212AC4032E2C0E98B440FFE7AB41315F6925C019080AEE16FE28797637790A9427723EEB09E9501FA7EF18D332BDD27E9A211501AF5D4EB85A08B29004031DE3A819FAA9F1FF60351BB24DB87A0C9148DA4F3D36A59F3A1234B0065169B7E04341FED4FA38A06DD11B2F48C5C717DF6412D7CB8C86306C1432A70C1300 -MD = CAF551F2F29EBAC22AE61B462DE14B88BB56A8A0314385B2A6FFC060FABD4637752BF367D7632DC4A47DCC56F0899A26 - -Len = 1628 -Msg = 460E5926CF79EAB6CDB5EBD255A787EC57EC030675F65C2CA6000B39C36B6CA62AADD1A9B6DDA1FF864C57D939A5AD53F463A4AB0E2839C9687B3695A2A78C9FF44A4A1822FD0CABA41196EE879F766FE11B7DC5E6E65BFAD3D3C3ED215C2D501771C16C483E57CB0D33FC1F8ED374A99E68AF15A412F85852ECACFB8F852A72EE683B9BD417F79AA217F6DD7A94A7BA87336A0588831E7A4028AA6418711B9E666573411DB81C2B3CA5B0243EB5DA495FEB870E0314D23AE7A667CBD3D6B5BC7CDE2574D09FB4FDA4581EF0 -MD = A4EB48EB3E46FB4F060B2D862E7250675773C77A902D987CCAA21CC4C8633629F4EAFEA6EC654A2EDC8D0B2E720A53C1 - -Len = 1629 -Msg = 13F4F5E8D19555A5E0636AEACF49EDB517612FC8CFAF02777FA81381D9F17FB9EBD3CD7B68C5BFE27C8FCBB83C28C4E9708EE72A5170CED985E4B27A68914D0625B03F9641F4E610B53B791CB9362AF625F1391840D0A375EF19FD8D038F4F7BCDF4A203E4B4CB3657C7254D183E3D88C171AFB511D043671E58CAC1ADBF03AF311C19AFEF2EDEEA14D53FD4DC7118506B0F6300CA176B2F891278894894AFE678A379DB28FA5E4DCCFB5E6A43D0A67797EC976FB6EFB312B1E8ADF73DEB9EA58BD2C153EF7CD20A8C48BD78 -MD = BA5602CEE4A2404C2B4DEBE53A4F7542CF7EBC7B17F35BB4F508C2C5BD30BBBCA4BF24B40465CBF240271475ACD58581 - -Len = 1630 -Msg = F8053BBDDEFEE95D05436D656F5CA1B71672EAE38D2E77071A086E1481D32EEA88336D78B6E75E7534B86168D317870B322C7733948FDE6EDD6A043B84EC6DD5D98FCDA0D5D2724E4A7CF497DD360ABBBEE936673953789BC7224F0585B655D20FC21E2064355A419194204C22C9E32B58714C62535CE5266EFBC885A8058A870AF26859A2BC09691B4B1701E267C92FFAE916792BEBC5EB31D1C3A89211DB21472CB045177E747496F0DE3BA5A7ADEC1905162593C9DF1E0AB50B00B2D3E85C9AB75EC875731B13474C9298 -MD = 9D9BA1676C143C97BDDC90F5CDAE4F297878C310913B0DDC96E36E763F15EF155E9A3722930B3F2A529272B9C3F27F2B - -Len = 1631 -Msg = 20F91E3E6BB637C2BA5B562FEFB1AADBEA72F6DDE874469E7453B74D5EC85E59F390CD317D5ABCA6EA15CA5B307F8517EF25328A2316E9CE32D9DB2609178F8B8DE2154F5EC37BAE069FA9A4BBAECEAD354D4BA3387F043085FAA6E5DB3BE7D0A257E1F46B8AE899BCB6932448B554265E8CCF7251710BAF133A4083F17279759E4AA27CCD1274B1B299DBAF19257C2DF5FD2F2060280D55F1B11B7EC362F894A459AA81D0AF2B3C43BD6D3767CBB6DB53B1DC54D4545638FC7977A7D81CCD1485B11F8D7309E200AD569474 -MD = 0FB30FCEB83F1969AF5D270E434C80AF17DDDBCA21D81A64204C2A07F447E5AE0A550A3CE2320CC9DD49CB46E303182B - -Len = 1632 -Msg = 4499EFFFAC4BCEA52747EFD1E4F20B73E48758BE915C88A1FFE5299B0B005837A46B2F20A9CB3C6E64A9E3C564A27C0F1C6AD1960373036EC5BFE1A8FC6A435C2185ED0F114C50E8B3E4C7ED96B06A036819C9463E864A58D6286F785E32A804443A56AF0B4DF6ABC57ED5C2B185DDEE8489EA080DEEEE66AA33C2E6DAB36251C402682B6824821F998C32163164298E1FAFD31BABBCFFB594C91888C6219079D907FDB438ED89529D6D96212FD55ABE20399DBEFD342248507436931CDEAD496EB6E4A80358ACC78647D043 -MD = D099F3C8052CAA2CF9751B1ED2D472C21FED667892BC1C417600A4C93EFFE88F1B17B36D37E4D26B9CD65ACB13A6DB6F - -Len = 1633 -Msg = CCBDCDBE422FEA72623873EBCA042A2F27EFEF40EF34289984B308672F89D8B9E0B9C3BEAE4972A892A4597D2970D402DFBE3429B6FB92D8B5556ACDD674EA060928F7A9A66A2613CB00AF3E464894EE32EAB35E9DB227747838B896AF8A9DB1151BB470E1535092944982BEF528BDBD00F444D02A220255898EE8940191C15476E167DCAE3365ACC671CA62BAE9FA5B6AA03BDD55D2E8F9BF76857A81658D01992E08A2F6418D2335BECE9E97D6906BC3C8D6F29D9C5749F4A57910BFAD25EB298C056DB574BF585C82EDCC80 -MD = 0DBB85C98C9417FED5D3E083608FD2B6B7BA28FD6D262621DAA3879C509848D8D9D56F3D98A5E7BDC40159DAAE182512 - -Len = 1634 -Msg = 1ADEF1C21E7469C34E78EA4D2D257FFE5622D172B2DA0E93EC6FEC7FC825158F7C7C2AD1E56D4309FE8461BDA8E06C5003A912BDECD3AE2824077F89845D2BC0D83199567CAC50D05F86B9FD42901C93952C85405A22CDBB584303A613356B53B739828865243D6AA729C4D9C10AD0DFE8B748BC2EF4303DEA69EAF396D6720E1F11995D2703CDE2AF6CD6E8AF7DA17067A3E38F6B231D199D32CE6AA71A0BEA2B815AE3F68B0BBE42979F46FC50EDC801A2C5CE8DBDAD0DE61E92BC8F8A8CDEF30F043BCE6F55D49065188780 -MD = 0573D6D731C817A0AD28E353213D688D4A5F9EFF919A9F7621F2BB2AD44FBE3E0F155CF26526B5C396EF01FF4F23613E - -Len = 1635 -Msg = F15F5FD8BE90D7DEDD1314869BD2039DC2F5908B908CF4741728AA8EE6F24D982658DD54772D6FB451CC4A2463EB47E06CC1D0D831F4890C68654ED11FF62932B5889729B861A629980AA86C9F8615DC9EA1502BC3AF35B918F0863E5022DA60AC88490D0C64929517B7EBD0CD8CF9FB82517E12C27F06D5A8250CDA267E53CE4CF7D3B26169197B38DFA2589C29E3005C2556F3E50E26CD4DD809DB873303A3DD2141008E851B3D4B7562E14BBEFE2A97D47EF29341324E551A3C13E08147D40FB6178BD98DB0BA5CA4640F80 -MD = 521BCCD2F7716B5F62F2FBA7A549A81D74F91BE0E77C072A095D7386D57B55391627ED9A5719828BA4CF55C620B5D73A - -Len = 1636 -Msg = 0C34D0BBBD2657D0C028A030BBD626F2E4427119D2281E6E75B0BD087C2E7FF0947C8AD5B17E151EB991A0D5C9000EB8454417850BCC869D87DB0BC38C04ACFD1B94773810681888B83EF92ED5E9EE671618DFE67A9CA62E5F6B840195FED233DF5E2CF2026CC89D7997AA3C870C061AA877DE2DA503503BA703C3658FB1B3A2B6C886C4855DDB6C779A3D9721340D41D556B7B5F91BF96F04B8BCC37DE2E0B666BE14F7E931DA6BA91B7DFBCD2E9E16CBDBC660A9A569A4360ECEC700873C8501AEF6C260C564AFAFFFB568D0 -MD = D066F4D8EA62F108432CACFEFF391236062C1D74160DE182B531552AD78FA11E0F270ECB0CB2B49973C87EE71AC69E8E - -Len = 1637 -Msg = EE248972CCC5FBF6536657A10F190E2DF0266662AC50680581ED4D5E3B7D074E950E47588CA113B307111A599D797E08814B4A166633607CA024D296A0733DABFEBBFAF43A7A98B16836DD0983C31B0F8B0335A50BA8C5EBD5CEC7D3562CB8851BEAF6677A9ECB951EBA7CD2D7433E6FA77469AC2ECAC93D88F42B9019D41E8F588BC6544512E5CA8BDD5E4DDD2428C73255A7582C4BE5788057067B530C2539F5B01671C146D28A99C1264C69B76A079B2FB3D3FE7E6ACF0679E7B7DA1ED7484A52CED5D104CE4224EB13F630 -MD = C004607395739547F3DF1FA581988FB294C6BC4C7C95850BC8109A311A9BA9C3FFD36A6218779B726409556AEBCFB4B2 - -Len = 1638 -Msg = E6391A7E201B049AAB723F633CBB384ABC9C7AEA14BDFB1466E06BA8060F066848A3CD53325F07A638D074B6CCE4837460E228F9978F5951563462BB40D8669831A75E815DDAD72089B98495C2C853E80BBD2EB59FC96EDAA227844AD127045AF51D72527139A935618175B98885E4FB71BB3480CCEA51F7E75CAA344CAE25C6194EF3BC77DE186369C97DB534D70C606D9E1013EEE2AF02413D9101FC4A61E3350E81A3528DF1E746FF5ECDB27DCFF89621D240ACFC80F074D7F83824E5842DC1F4ECFE74397E4C91AEF9F520 -MD = 4049BE18738352FB6E2461D572C179C4B902AF44282FD617774030E538193A8B505E30EA95D5A1DE5CE50AAE6A0E7BF9 - -Len = 1639 -Msg = 0BA293C65A0223662A04FF90E97F152B2BB999E3C46966030918CA341D6701E4C7A19AAED4ADA69CAF9C45BFB2CA35E813A7BC92C10DAB5C68F64C5B97923D5402BEBAEBC962C77E188A283672210FFBB62A92157A09AACFCAE39B8DE00BF70376EF3F504A5ABB488242BDF32E946C6BBE590472E4A9C05993BCD9F1DC6E52431FEE6F20AA9CBF952548482CBAD43043E8725CCDAB58D5F37C5307DF9B57C199C71613AA3C4CEF6C7D13677226B213E78A8E404607E5BC592E0E88DD48650C8CB2F6DE18B71DA2CDA994C79948 -MD = B6DEBB34263F9787F81D2AB78517278A932CEB2001F8C47F2CA8D4BB2C4E597D1115EF95EBEE2E84F52706776E4ACC07 - -Len = 1640 -Msg = EECBB8FDFA4DA62170FD06727F697D81F83F601FF61E478105D3CB7502F2C89BF3E8F56EDD469D049807A38882A7EEFBC85FC9A950952E9FA84B8AFEBD3CE782D4DA598002827B1EB98882EA1F0A8F7AA9CE013A6E9BC462FB66C8D4A18DA21401E1B93356EB12F3725B6DB1684F2300A98B9A119E5D27FF704AFFB618E12708E77E6E5F34139A5A41131FD1D6336C272A8FC37080F041C71341BEE6AB550CB4A20A6DDB6A8E0299F2B14BC730C54B8B1C1C487B494BDCCFD3A53535AB2F231590BF2C4062FD2AD58F906A2D0D -MD = 7A9FE13FE3318121BABB340A3B045DC89D1BE2D0EC05802C9254FEC39EFCDE163C514DCDBA3FF93F9B097486C2012385 - -Len = 1641 -Msg = 9D8A483570AB16908C17E63363E8B292F8EF6D5B7043BB17EDB7D0B9AE9393A2D13FAFD0909E50E437C3934C18ED11200301C61196C2340BD70D6891A74CE8C2A04F31BF653E9610C5A93E3203A6B188F36F3D753393FADAE2A01A0D4F5E51BEC7AC939194A15C707CEA4BA48ED4D3A85F333A69F33E63E7EC7156AEA49669DE0BB1E75B5CCA3A759CB039DB7A977A5C1F6450FE069D595F30E965B7BBF6184CCD3E2E4B44FEA466C517A1EE1E5B40AC7068EB0E62CF13AFED1AB13DE7F679BD19840770B3070FE7FBD453BE3A80 -MD = 6A74240555E599B70123DB97D69125DFCFF05881A7862B49136704C47D60FE4661C5E5CAE409B4A6ACBB77BEBD9FC594 - -Len = 1642 -Msg = 37B1027E4AD24931103547B93B8A36526E738388503D72B153CE7D867A3094B92CD0A6E35A35FAB85BBD2BD211153CC7D623EE0B756C4F6169A36289775F1F42257FD3E799B63004C5799E32B46973FBDDDC46E5E9E6049043E03E0CFD0B7F51F6C5A75B31E4A0F47A65EDEFFD37A830A742F7AC411033A12333BBA0BC3F0757A12DC2B38A5AC54505D8E2F7CFC4C04ECFCA80745C22F40F0A13EECD55A60E2DB5C292AB38E8626CBFF2A66C76BEA11CE36B7726F9E2F7EF9779EDB7282A883FECD8093E4A5523185365C8877980 -MD = 873FE16A7B9AF30E159F545441D0709D84C78B278A4E34C74DDF8B2F00B6D6CF0C60407A5DEF8F757E15A03D2CAB3795 - -Len = 1643 -Msg = CCD746C21AEE13D421F7B853F2E57D907150D9B317E55231B06FA13231A42B8661C0036D4C03727F48AD32C189F68DB5994611ACED2FF28FA1DDCECCB714C84B5D11621F0A7B59676922FE06914633FE0DAE5A72C3586D194C3971A5CA0B22FB1EDD7DB42C8B992949E642C481E1375B19EA92FF7EC3E7511BBA02A0D4CD66A3A57E854533AC3B46C8EBD47FEDBAA837618A9262FB03BF1B5AB140DC5F46F98E4A58B252EDF82AAD7E01FD0A89AB69244B4F7BBA5EC2CAA096ADCC674A5F0B3E55D8B4CD22F19B7100E034FE95C0 -MD = 97E9230DF898998D66C1EE7C01C2A79905FEAF482A4CA52514BDC1402239C5AF86C6159CFFAE3732B9BDDE69F35886ED - -Len = 1644 -Msg = EE5AB1EB81BD8A647E1225744B90BFA8A998FF3018202AB4DD9C4F2891FCDA96AE786FF6D6530B0723AC3C7E943762996A7DBDA33DFCB8B2CD33F53150A8FF6BAA16E0E0CF8122C4F4B6BBCF4A5DCC5BC47F1BF41A1799CDE31C9D814444E55892E513DC9AD6E885AA305B95C087494513E2D1CB65D5AD9D1932FD53AEDE0974C4190535730C4C58920735E175CF4BE06BA5B1942F535B8898F6DC211593A3AED8C7AE1C32FBEAAA3C7FB171C46B7753679567BDB829E6EC769FB0A1C2E9F88CE55882A6E52AA2763EFF719D9620 -MD = 4ED6EF4E8C0FBE6A8062AC4CE0B8E5C455D2C18E69359689A78B5C777FD7C0067C474AFC67B13936B3FF3F9C67946FCE - -Len = 1645 -Msg = B4E1CD73549230E9CA7AD60D99CF67C757B5A6C1105A39BBB4B92F3F11C7F1EAFDFAD71AD607BE795A60868C209711437A9D0B10F2FA3F0AEF49625197BA5014694C273740D76031BE3CEB6D2D959A7EA679B6DD2810AC4894780724E4714271E5C2957D20E55C384221791D1804BE9FCD656907342247EA85EB4D7982AF5B9AC6840FD60751DF25F5FA29B143A91FCB486013071619C8095548521665EA1098E7B2394B1161AEE4E1CB0438D080B95B4EA303E3FE8AA60C2E6FA5395E980E8B03FDCCA41D1C435A5C476C911840 -MD = 6B5E280AF5AD7BF811A814051ECFAD7216ABBD8F70CB46BC374E6A00795F69BA1AB98E83EF1516803257BDD7A417B29A - -Len = 1646 -Msg = 034D64592B99303F21D91AC35FF3B9A0A4A93EB886C4BB487B566170DE393F1E5CA82B704A6C029343B8BBCD674ECAEE1AEED2A6E21ADD8BF5219A37F8E1349C7A3F76839A3F39ADEE5CF4B9E91FCB68622ED5DCEF01F546C9B99A48456CA3FDBCC5013E47A4C345E54EA0FCC52FA14445B18F956B2C3A3B6C35FD9E72A60AA81D5E7E1CA0A54AC9B5F45B1A9E7ABC4D78D2452691EFD6ED268873CC94CEA342332832686E70703F88EFA1764221CD8884391607F8ED1FD5138ABF28D0FAF5904989C9D54D4BBCCA9C77374ED2EC -MD = 497FF5206056D79016C17EC3EB9206B65F8550029BA50129FC01AABA352C5D92A3EBD6B435FE65D63A86F81A6207CB26 - -Len = 1647 -Msg = A290D488AB0626BD0BBD35BE8933D6063AA4F878A966E33B73D42E40AF66D0B242E3A3BBF42F7F00DC933AA19DB48508A62349A1142F9A1AF638A8A6A459F096D83A03CF5E7BE4545EAA22819AA816010D35C6AE5AD5412FB14B526331A9445BD374DB0272303C71E92924A2CDDBD8186BBD193C2C0B83C08E041B393CA0A8A25DAE892F112634C43FF581D0510BEBEEDE0E95FA8A8F0E25302DBF77DD22CF1935DD09D2156015825CDF95175EDE8816305459A901072E4FD2E2BE191D5FE13BDDE04C535C6984BD9EBE2DCA7B12 -MD = 90675B5808042C76ADCC2C6B11CD65AD81804F5668830A6A7615CF9157DA8E9BCAE1B6DEB6A7B58845057B63C6C064B0 - -Len = 1648 -Msg = E64F3E4ACE5C8418D65FEC2BC5D2A303DD458034736E3B0DF719098BE7A206DEAF52D6BA82316CAF330EF852375188CDE2B39CC94AA449578A7E2A8E3F5A9D68E816B8D16889FBC0EBF0939D04F63033AE9AE2BDAB73B88C26D6BD25EE460EE1EF58FB0AFA92CC539F8C76D3D097E7A6A63EBB9B5887EDF3CF076028C5BBD5B9DB3211371AD3FE121D4E9BF44229F4E1ECF5A0F9F0EBA4D5CEB72878AB22C3F0EB5A625323AC66F7061F4A81FAC834471E0C59553F108475FE290D43E6A055AE3EE46FB67422F814A68C4BE3E8C9 -MD = 8AEEDE5D6E2F9F1C7A6644A8DA0F93574DF8CA33B2ED9D364615E1F9CF1A801315410733881CE0DAD2F6FB5A916A97E1 - -Len = 1649 -Msg = 88D11A550DA2A6C99D1A1E1ED5FC7D8F4CF3593658F13D30AD65CF6BF862611B87AFE11F22D46529E8BE7CC9D5834DFC3812D8F74AB895465C5273D7204C7D2D9A015BDC343AAC4432B8E97A9BD60FC496EE3C1AD18E0CBFF4745EBF9A8E5E917C4CFE68958A1DFF1B5E68FEFD553C72B5F3725054E44E38F94112CEEBA3128EB6049EBB77CD67014A9D316D218AF547B695866E7E058611E8237B185783729690FF9A1D97E99AF0EA84683BCAFB12496BCA91E3AD271EE225F8971AE8CEBACFDB18B8CA7EB67DBFD2A14684CD7580 -MD = AB9C5C068101189C97E7CCB222F83D81DC9479C01EB864FD5228369162379974736359E21C22B262803F0CAD0D799CC0 - -Len = 1650 -Msg = 8770ADC96669E667525D133761D4E914C2A4CB5ADF81DCC6129A88A496F5231FA960101F76F1B43036F76084B773E76E7566F489550FBCB0919013ABE142BEF449553051D2249DEA6C8ECA9ABEFBBD7A167D3C5641393B02848D3269DB8C13519B11087D6128BA9296B63B639FCD6132E5372A93C9E30AFBAC564526098A6DCA0ACDE2C659EFD9250D187864F82505B291683B83A686709D792BD785B8879DB4658381E84BB4855CF7D78A16B7BFDBDEAF352352FD34D1C204A8AD1C558E128B0788D7D27F6F508E7DFF2F46028A00 -MD = E38EE452E9C241BC47D77F8876B97852FCB929426B6207FBA92A3AB874AA3E96341777CD1AED055944825A1A4AE2BA4F - -Len = 1651 -Msg = C355A7E5BBC13F1F080B810FEA90CE4C034AA1E7C3C6B209FB87399FCBA4A344706EEDD97AF881610C64FFBF44AD0BF321CA5249CA6EA09EE34FC513DEB34D5B98C6ED7340ED0D292D967C60856FADBAE4318FA427B879FD6852CF5A871F9D6428AC10CB048F6737DE6847F2AAAA998021A26C0F85760E9AF6CC8A5428AA308FBED9BEF937BE4BEB24A9DAF6A4F8374991D6C7961D1EEC6FE123713F42D78713734ED8792A278368119C83C9999BF952B1B1F7FADBC8F29C6237F5246F17948902147E6659260D2120DDADE9266220 -MD = 253753AAD3FD6E98529F0FC45BCCC7266AA9EEE46CE40DC655F3EE03ADCFC8151ED01BB286199162316288FD67775179 - -Len = 1652 -Msg = 0EB9AC23DF20C16D5184AD7252974B6A436D0F3F63696E5C3BDF6CB0D413AE9A6AD4873ADFC7449715FDDA2FF70691DF23FE97A5B4B26865B4079420EFE15BC91D49EDE69824460D9C088BFBFFA099BCA0069BAA011B5D6A156DAB76EEA11FCA667511308A797798FD06722DBE91AD244C1783886303E1C97B9341EF1E15F5A0CF776E047EC051A5AC226DE0080E81AA35D14910036D920F62DEF9A28E66E0120CBC15A6DFEAA937CCE1529DB8847A4400CF89D5BD9D46AEA1E82A5DB785848D8CF5D7B85463256E56B67F3DB31B00 -MD = 5E0064CC6F259635ECE12CAB4A0C401D3A16D4594C523C25C1669A0887AE925A7A8A034DC8499D3D9F5C67557BE13951 - -Len = 1653 -Msg = 2123F23DB3299E66FF044A90F8668E0C935758B51E11A690F1F6B9A95335FD1A2A2F51B45747C2565CEA770C06E2C95A879B61399B9B86A0D44C557B9889A367416EFB6F3CB2F36D2FEEB487F93B33CF1587DE397CE5EBAA29DD808F503152562CF20F6B5E1CCB111A7E79831B2071AD69D69E8623AB3E7CC9445D30DA19521CCC7352F6FDC489427599A86A963DAFFF24483F256FAEC750C931AD732E8642355F73D901D4819CB922B92CB05D62C2899CCDB557EC15326B4B135E2957A548FE861F70052844AEC9CBFF7F57D64DA8 -MD = BD78D5E6E86ADFF404521416A4FC25B45AE1C3DBCCD7779DFDAF3E9FFA433468E0645059F354660B893C9CAC4317A904 - -Len = 1654 -Msg = 0AD619AC99A7F310B9D30C4AFE98149E59B6155B94C064CF2B9D2129F83A062499CDAB4BBB94312687FAC290410414064C5951973FB6E8ABD75975CA110B9885E2CFF19B89A33AB4C0BE0A7762F001A7732AF2CC5791C07730757524EF7BA7D5BC40AAA820E6DA3F16A5975CB3F68AE52E074433FDBFD831A5A625DB6DD7F3D2E08F51103F499D9457B95E28C6E003A0C29F39D0E5CDBA736E78E5F38643BCB5908779D6BCC711D2AEC62B9A7B24876A30D9D9BA65D032FAD16DD75229DD9DB6E87309AA897491D8AE19BF84CE0380 -MD = 651887D46DBCFAD2CD7F0DD9CCA12D4BF78988F7470C2C1B904AAF781AC5E3D108AE9C2B4795B652983A95F664F7ED3C - -Len = 1655 -Msg = DD5ACA2737DB9BFED4999C08898B23D933AC9C173387B1FDEF93BAF1224FA1F39BB22E3B2EA9C983B18ECEE377081BC56570B60733D686CDB0CB94642C91E34331E372E7FCC400A22DBE4A984871462184CC3276EAB7423616BFB827CBA65C5E7DF4E0A1E9F5139C2E87892C35C9A59A62D6E204264A0429FC33CE476716B4E0F059543E034A0B7E03A1EB15D4C497AB79D5C6B4A9B3AF26DDCF30CD5D7E398767E871DC823CFDD694C00C2F6256E28493777B09C51E2A2E285AA9C6FCBC80493C0A3F46FB3B13FD280C29967268A2 -MD = 19C14F485FDB8F5FA3D3D615041C49A4B69A78930E20868C7C8D0C7D7DBCC8051B3B82417F1E4AC6647FCDE80E534361 - -Len = 1656 -Msg = D2CB2D733033F9E91395312808383CC4F0CA974E87EC68400D52E96B3FA6984AC58D9AD0938DDE5A973008D818C49607D9DE2284E7618F1B8AED8372FBD52ED54557AF4220FAC09DFA8443011699B97D743F8F2B1AEF3537EBB45DCC9E13DFB438428EE190A4EFDB3CAEB7F3933117BF63ABDC7E57BEB4171C7E1AD260AB0587806C4D137B6316B50ABC9CCE0DFF3ACADA47BBB86BE777E617BBE578FF4519844DB360E0A96C6701290E76BB95D26F0F804C8A4F2717EAC4E7DE9F2CFF3BBC55A17E776C0D02856032A6CD10AD2838 -MD = 29E62D8C1B71F826544A0CBFCDD99CF8AA1C97E153063120D295EDF69E2ECB5A2783C66760D0F87BF944516824CCFCB1 - -Len = 1657 -Msg = 061446729772A1A26F7F9A87702EABC582071872B6AB1373A1B88EBB259F0EFDEB159E12792588061C011602F6C42B8392E15AFC582388AC0903628E64C1DBE4F2B86109683F28EDC22C12CBE5541683715D039FEFC23E91629E9E4A330C6D0A68276DC60FD72C6AB20B71B79D2888159F49D327693CB48B61DFF2DE0E74D8A452320F9A9835D2C28613D555346BBD78F5320896E87AE92BC3B00A1B1BE403022D81258AFE07437BE13D339FC4481E96856D5CB49C547776C9CA467D05C38B8CBCFD71C0D899645705584F6ADDCCF000 -MD = CF2A5194414FA3A698C7E599D03436CA84B8D8169E8844AADA7F041A511CF5D9AF0B78EB0331B724D6B735109B217C4A - -Len = 1658 -Msg = E2A4C02A8657C5D41445E9FA687E6F613278D5A8E9B6EBD5F76D817F1F5CCAC6C72278A70B96FAFDFE30ED00C27F20804FDCEF3882E3E47E3A36DA1708BD8059998BC367A1362F543CA8B9D224C6EE1C86E274B7B20D2CB64D6DA4ED53C751F7B561238AFB974D96ABC0878A386A7E28A9DFCE3C818E1B124ECA55BE07139CCF6C6020A4E4596A2EFCC7B84D271662FBC72074A16AE5EE37AAE4E5CBF19088A3C6C54A3D573B41889CE3D04459A0C466F0DD8E5CB3FD9C18211670CEF5F11DD406CFB922F14B7DB2F1F4B5C8C3D97240 -MD = D498C2079C67AECD8526CBA7434B1950988D28BA3594E777E1E03A2B7D8A22EC65DBC535F9EC8041FA55E5F5C7B0A8A1 - -Len = 1659 -Msg = A2871DF706DD5662C5E6ABBA84790DCC435B5D2EFAE1650DF11245EAAD20096CB90A216A0F36BBC3DA6497087B02C81270B7698E97C6047B5108DE235C97EBD599DB942844AA6B3E0737BFA5FC8EA09022F310378A8E8816E155E535F0C0E4D2ABCCDE37916D9527680860DB6745C2B1B245BBCBED0C2561656DEAAE921B8C82872E667936F49A6105FBEAB4AD46A5BC7BE0BE0303EE92EA250BBFCDC3A6A23D514C0D9CF8DEB91FCDD421CB6A4EA988B4F9E6DCD2566B6A4702E9CFC437AF87EE22A20E558B306A97E11ED0AF891300 -MD = F3859056E4E457DD2B960459A54D879190DA04460F76814FAB6C2525BB4B5947A1AE528464E243A9056791B665B534A5 - -Len = 1660 -Msg = D7F71FB30197E861BE59A77679FA5CD15239843842F4473EA9088FD6630A35949863D53DAD1E74093237CC822933387E7EE37A6D6190B72C52A08CF250954582357BE1E81317A6B65B247F21E0AD32BCFF600C5D671F8629C4946EE505C8CDEE4B8D6A7217556193538CF965FE9CAC3D44BC52898894CAFEAFD11F7ECCDDBFF518D6279D5DFC66C2D09D7DD23B0D3C3245167BD44C1089A1544DDB9EC1177290A2180B7606EEA44663D1589F1E9207B37B74DFB97D17F4D137B0719A09A6EF0C39F6CC0741D3A672005C707A09732120 -MD = 65545AF7911C905224300FCD3265E877CE5111B7FA1E8812B0391F7B6FB0D7A252AE718AF83A9C1AEE30EBB346932E9B - -Len = 1661 -Msg = FE7DC1A26BF9B564A32930CCC3E3F143EEC2E2C92A63D31025114D0C335949CFFEEE336489D1A830731343974B9DD1E7DD6C83659B238D7F2EF4C91DD38C382BF03D32A0C74E704CF382A8711AC31149F76A1EA5FCD0B89B064562CE0C6BC46B34861B21CAD36CFF2AD07CD249FC2327785191B4BA0CC61DF7428298F852C250324CFBAB818294C24C534097FCC5F9403266955B65C47123E3E0D8CBF6E8478A231523F9913F3F6C6BBC8050D116400CDBE68F431860DF7322CC813B48DB3E8F52D35409D1E95882BA54C5857DB67A50 -MD = 82966F08C9BFC0CD8DE9E42F3397FFA21AA11FD9A21D4DFA1D52FDDD501A7E185904244D5E149DD8E28A5809E04060C9 - -Len = 1662 -Msg = 872B77FB2DFF6AB011C7462CDC3B4892AFEFE4F6A786952DE02E49FE0C27FF89D81986E36F173D68B25D61F8D480BD3D06607545E618284EE0D4C2114BF7B00497D41BA41374709BE4FBF06A3F883701799B5FCC7382244C566F91C7398B13C06CAA5EB79F6914FD194CD18023D431F4A482AFF991B130ACDF7425009DE58A2049E577A6B19C68F14AE6AAA18492DD85FD6BAA91ECB346616819BD50B929298A7C0240812860C9ACABEBA7DDC13460F36C3ED6F068B200D0A3B8AF51ACBD07DC4CAF4EDCCFEC52A1D79F0465E12E74F0 -MD = 9A021EA1DC259A936055D934DDE30A03A272946BC16E979D369E32EB1C80CF68DC566F4CCB111E8A03D2692D04CF4135 - -Len = 1663 -Msg = A73BFE2AE3EC4855C30923FFD31C8258B4B34C739C869A97A13CA07930E60BE81A0F7893741CF2F2DCDC9272559CE61A07F8F750A0BEB50A604BC22A35046B46AC78377F82707FD436961291FB862F9BEAE56B4569009C486FC73B3FD36842A3074B88E8C6B5F8815703DEAAD29F1915213EF61AE55833F52BBF8DE07EEED341AC93F3622FFC24FF713D3B5FDEA439CCFDC8B41F7449238717249998E651E3E9C9AF2F0D56B9EFE2E2AE3E3B67CC8E70E4CDFF3BC301B5C8BF92089A2BBB925D0308543C8BAFF4782E9A415C17367E0C -MD = 7B4F2DDA891CDB54C9A388C57BCE44AB1F73E093280E9E2A64D59CF11AAA80C8832ABFABEE87CD38BDB3241F0E302B98 - -Len = 1664 -Msg = F2998955613DD414CC111DF5CE30A995BB792E260B0E37A5B1D942FE90171A4AC2F66D4928D7AD377F4D0554CBF4C523D21F6E5F379D6F4B028CDCB9B1758D3B39663242FF3CB6EDE6A36A6F05DB3BC41E0D861B384B6DEC58BB096D0A422FD542DF175E1BE1571FB52AE66F2D86A2F6824A8CFAACBAC4A7492AD0433EEB15454AF8F312B3B2A577750E3EFBD370E8A8CAC1582581971FBA3BA4BD0D76E718DACF8433D33A59D287F8CC92234E7A271041B526E389EFB0E40B6A18B3AAF658E82ED1C78631FD23B4C3EB27C3FAEC8685 -MD = EB2F1BF2D9EE857B189318DFAF49DC3FAD79501189AC9B5765DFB234EC4A62F0B0E34E7AC3F494D6F05C7BB86AE5CDA2 - -Len = 1665 -Msg = C3A6C9A38DE76C9A716E9861AC10D549F0C5EB678DC9FB2919018B5DC88E365F9F3C03DF1FD9DAC46728ECE38E97465A418F599EA0674680EE6D3BE167E1C6D7E0750228AD7FD8C7EA070AB9DD73D6138DC70AC4D9907235DDA108E379E81F7E00B1C9E2B7F16FE8DBA014853032A619166BDC2D488B3AE8615CCAB2C2A9E1A2D5A38753D9B2422CD91599F2D5D87F89D6449491EC7418F4DD39C53DCD9F1EF9F3448E75E8A73C33C32EBDC3A613BB5E5490540B1C74E48CF9AEE17BC3AC2BE50F80CDD0C69649336E5545E612DB2AA400 -MD = 0A88A8A0A4FA48621E640929AAC3DD195CD0867CB5F5CCD1B8C3E8C0E54E00E09ACB2E1F9B1831C80E0E6A259EC06754 - -Len = 1666 -Msg = 0CE9C0A8B363C6504DD16AF53CA1028AEE93444E0A82A1573DDEAF6B41B7450CCD5120A72621983ECABE5BABB8CF0F1D3CC9E67AD8309D71B0355C3F9D667D1412982A0379EC376DB3B8D44D01AB58F7A97552DB4B1A178FB3FA15E33DEDBA345D7BB475731EA53F20E8D6CA0895B33117446094823E1ACD7A5A5632AF20ECBF94ED42B62169867FA6B4E9D512B9A4B443B2AA6A5752EE68C63CB42E5FB2C022C60DDBDAFA25E8A2493CDE12586D17089E9AC4A9E9CCF0E7FAAA5252049CB1ABE8DADC9EA9F552DA996B780E7B90144040 -MD = F91F4DD07507E662E630C651388C29669D159CE0EE552FD745E572FE4699D8D923486E4348B6851BEBBE7372C901A421 - -Len = 1667 -Msg = 566EA91163B197DD99311CDA8083A3FEF200E9B5C84BE85A9F60D0AA73502EAD446FF757E4B37C026493573BBFE54F547FF6124E8F4C9478F68BE242664886695332185AADF0D68F38FCAC08AF2AE40F0AB98BDE182D4D597E6F1371B90D0FC4FB1EFC48804F528A2C6C4EBE47BE3FC4B74F0B795C422B4EA4211440299953714C51784D93329985537903ADCF14262514E2B576F916E2463712AE0B6DFC041B411BEC16FE050AE3018A28C6211AE20D65E053C5A68DB5AE09F0B5D2C22FFB9EC83D9BF7EBC54E66F0A01A2299416123A0 -MD = 18E07662D41F2521CA2393FF615F6A32C959D06D665545BAC324E49A91057F5B02C6AE82C6F974D7280969B83E121746 - -Len = 1668 -Msg = BC89FD708B4E589FDC763193633E4D86D65857FFD3F69BD8972DAE8B8B029C8CABDAEDD159B0D0EEEDBD8302C279A5EF5C379F1DE5CC7D8C0021221E04823E28BDCF6535940B0DB0E87F39731B8CC48B95608544ABD5E01E1E3BD4D24DCF20863D7EDC003DCD0FD458306D3C4CE67E93DC4EA2EF2B6F5A1EE908CA23E32984ED946E9EA2588E33776D926024FFC5FFF715BF87E424D05618D3A914C77CA954B8A80BC50624CCB8EA30E226DFB50BBB956F147AEF1BF0DFDA43A6114E5094E42E6B6F39B00BCBFBF2C600F2629C3FB66320 -MD = 9D8CAA4CFDB50910455B9C4A818B3D7774C76B441DEAEC966ECF237E59C947A25BACBAFDD60F1EE47E7058EB3D5FAABD - -Len = 1669 -Msg = B594C19EA19FBC4A9C7DD9DF4993CC7171ADD9B0E872BC211F60EB89D313CB5B5FBBDEB5D535AD20397550CA6534B859BA881D0713DEE6774471F57ADA476A511AE98414F07482F49F783F069D7DC5AAF42EFCCAE350A7320A4703254687258CB0B056558E2C6E31A2B336D1C36D770043DB799DA99CA06C38B93DB93F776891F2BF2BEFA70BF87C0E4C1383FFF4444DF05849D9F04699BDA9A95859BA5D038D42AD0EC4CE1AF15499230FBE9D12CC0998316266FB02ACEF9BC4FDFFC84E5A17FB2A605EE8F0239383A2DBB1E1A4087488 -MD = 4AC7A40603BE999F080486ECA8177E51BFE36D2F64622152483A52080DCCA1BB00E17584B61C00CF3A576EC5413A0422 - -Len = 1670 -Msg = 32366020205740D26523E6A91E2ADE18D6D7018535C132F17EF6AEDF034BD8D812739188436F1AC21E429C0798FB0435975D5555E34DC5F1B412647571D32B2180E53F45DD83BA97524DD38AFA67A6FD54E93BD33746D80E70B46D5045F2403CDF329DE154099DC721F6288191B9583793F0AF20774C730DDEF605A5B4C36A93B726D1CCBF9A2175E425A866326BE8BC1C3600F7C95200BC28F498CFD645757D8D90A2CDA7E6E15307F61075B78EB82016C0ED2DCB4F6903F71CDBEAA2DD273C4880B6EBCD601F1813478269D05D370D54 -MD = CD7C1F99E142CC61B2B16587B4977AEBE1FD67C69E0765B4FF06C1A67B797616157784C7B59F378953923975FCAB8C6E - -Len = 1671 -Msg = EA87C7C79D9C993C4EC01DCF55AD7CC433F8BC8101C9584455939A975EEAB6DC9C7DB7A00ED54CE15B473A26BA861C0E53394D762E2E72AC6A3930AB4E90E4D443C1B3E1CE337DEF21BCFBDA38D863D7330B33425A2251BA3D3A4935F5C1B62A2FA08F40983748131160F11853F05C1B65075FE224BC6289C31A7B93ED78C3C2428F14ED79CD0A2F7164979757251BCCC4A255F1E50DB5DB171CC05BAC9F893E9E86885392C66FC183232F7A3633F1D701575261B702769E161B8DA670D07B97DF1D9B36D24A28EBBEF639408789CDC39C -MD = FAA3A7F8624679FE8D27A02BB1A98F70484F6E63E687FAC84B2722CA9F8C5EA90701E015853BE1E84B1B535FB6B7E00D - -Len = 1672 -Msg = 447797E2899B72A356BA55BF4DF3ACCA6CDB1041EB477BD1834A9F9ACBC340A294D729F2F97DF3A610BE0FF15EDB9C6D5DB41644B9874360140FC64F52AA03F0286C8A640670067A84E017926A70438DB1BB361DEFEE7317021425F8821DEF26D1EFD77FC853B818545D055ADC9284796E583C76E6FE74C9AC2587AA46AA8F8804F2FEB5836CC4B3ABABAB8429A5783E17D5999F32242EB59EF30CD7ADABC16D72DBDB097623047C98989F88D14EAF02A7212BE16EC2D07981AAA99949DDF89ECD90333A77BC4E1988A82ABF7C7CAF3291 -MD = 2A9CF2FD012B025616478CEF6971B6F9E494A63AAB5F53310DDE70FC6ED27F1E2D7804AEB8D206F641A73E054DA620E6 - -Len = 1673 -Msg = 9ABA7C331CFD36242CABC3C6BA887C8CE4675F51FDCFCF49E706F6BC3C4215CE421D15B304F60CA6D19BBF8535D39F300BB415940FA23D8C788BA07970E0F1AA494AD3A6D988873E84B2E2E2A21D50751592C5FAF8EB1B30012B73B929C2734DF234F4FD7E0C2978B713A2B757812FF2D151D3C1C627E121F293F8DEA2DF2F9EE9A66E2859F635B615651736FACE4AC7E58D9B9A05A652FC0E6A9121B8D478FB04B5809E1994B3E3BC7E6A82D2A450071589AB46C6F5264838E425082B7D8BE92E49AA3632A2A54CDBB01360534080312600 -MD = AE3CFEEBFFDBB790FD8B3CD2C89748DA6F77E4B2984B79A890F710F62135D80449E21BEC8E2037A8DC6083A28A7F9D1F - -Len = 1674 -Msg = 477BBAAF6240F4FBF19012F55396AC5E1C9C21AC4710866E58811E4A721D1E1BA2F13AB04EBAF2DF5A0F29C0213F8C7D3CFE34CBDE94A17D2ED0322A298F43123FCCC9A05059B224751607464C8B60DAE1E67A17B18F4252C2F54A7AAF4B6A5B52A640BDA2F58A7F86F61870FA5B7C2DC183CE5B1965DF783C30F63223551EDD62D563208094392D2EBF9C6C938AFBD408E08AD0A87ECC926BD25E784EE4D4D3C3C935ACBE870D8A777D7CE6DBBC675E32409748FE1CC641E4EDEEBEC6FE242E3A88434F93FF9F4677FF8994EE6F07214C00 -MD = C3F5ABC082C57B3DE70F67536225B229DAC09805A364DA198712EA21AB5E61AD3E2502838369E84933B99C4C2AC15FF2 - -Len = 1675 -Msg = 96655F154EFCE33E6D9EB56C3471D5BC074E95358CAEC947B638FD63EBDC1B841A88FAEA4004D9E068341586D03437A3A3871255CCE036F4E7770B740A05B79016B9E94132DEBE7CE7BEA242ED7067927D4812F448E3B9AA9CECD01DE26AF84157AB79D3E50C83D1E821714A333D23279918C7C04BD999465B427919EFA9CC0A05936B42F3AEC5AF30874064A163D7E086977B32FA81DB19B6ABEB7DAF81512579885E9E8C257B58487231648BEDB6E33FF1021A97147BCD39EBCD4E2CA4228956DC674F61674175E16DF7AB56FCC518F280 -MD = E9008B73573129C711F6E4570676C95B47A511B280131CE05EF3E4FDF3ABA00747840DA38BDDEF85B984EF241E2976C1 - -Len = 1676 -Msg = 09FCAD77247BCDF3B8683ABDA5DFFD6B58C47C0C8D88A274CEE217B35C702B5C84F3DDF8C57B6947B6D04046C81CA0A4672D4780B9EB694AA4920FC0E01ECC56BD9E137892892AD2D31BCD491A23214825843897322BE5D33729AA22EDE7F21A115CD74DF0AE3CFE28BB610C26461BB2911420C7C4BA932626A9DEC6CD22A8889076949ECDC415F86DC788D73D733CDA4DA49D6F65E67E8F20BFDB825D8AFD898E5D0162EDCD536C2BC5F978A8AA128550DF987EFAFD0BD6799BBDD9EF8F3D04D534D5B5816C29EFCD43ED78F538AEC30850 -MD = 6CCA66305800A6CE1518FC30FE731A77F3F21B2D2EDDA9621A963216B4EE1A8C1F0960CCD626272EA8DCE8C7C42662BE - -Len = 1677 -Msg = AB8A10D700174B4B43C23BACE4393A55E0DB75135AA0AF3EE8A3A1F1102DEDCC427795DDA341DB51B2E26880B4240C904FF51FB0C78EDA9334017C07E56A5795ABA4DB246F3D477FA76F2B69568F09F6ABE8B0F5B2CF3D4B293EF76CB22A658278FDC4DCA98F3026E7D12417EB9928B9CE4A70F59B64E1DC834AC27D996E5763A867F354C50E73DC4244DC2FA350A7B6385DCCC8E9B427472759FDB7FB052156B10D34DAFFA4E71E60DA992E0C4E48FB3F91C6B2CD127E1D2B9EC6AECA04D54B1DCD9ECCB331D0EFAE15A2AF47950ABA4170 -MD = 158B54B48304FCD885C8D9FB0067600838C93385E042490A1EBDD28EE4AB0A872D7834AEE8DFF26BE9D26CE84B0E11EC - -Len = 1678 -Msg = 05DBB0DFC9C650216514DAB69119695C0A0F80EB7D678EF91C8D0CD8123C6DFA6A88287177D7D9797DD5F84134D0A96451CF96664B7374EDD453E8FB31A106334E957224A434F156F3E9A83B7A44E54666EFBF25685391EB9BF541E2F6ACCED20ECEE46CE60423A744F5F5B7104E1F96A8D0C5E66D58AC121F300F88A3D017BF5F79AB64382EFC524DE1129C3E2E456D7203235A4D11F040A2520AA517E73DBB1D580B283797612838708DA911B5C7FBD1D4B48D41F81C87C7863305663376FB80415B82B8038E1686AF5D826B74DF282C80 -MD = D1D7BA6FF4838F7E2D82032FFB2F468D36EE5DEA85AA7D51186AF716BABFF3F002BA72979CEDF420D6D9BC0655AD6F39 - -Len = 1679 -Msg = 987AA5D10B8C1CE8D2A389535A7EF6392D68D4EC80819864603CB92860768E81225E2B1606B83CA62E8047291B9DCA25393B776FAA0C4E3914DD0AFCAFC21392C43AB37058F028A6EF330E6A3B53E3ABAFFE2EF62D126712C00C855765A91C111A89FDBECC5D5ACFC676B566B32B0BA6DA12EFF945A8886448A610AAB9B66B2548DB32C5B8612588A8D0A02F1E0C83878296FB2ACA1A09C25D438F8F2EC7875A61B9022FBE7F1BB7D972B0ACBEE28259B42A09B4F26105F1D0CBA58C6066F12FC2ECD14F286DF4635A0B691416127E34DECC -MD = 9788A15F600B93DEDC347A2FAB4D0D237221BDA5304D612321A95014D3C1EFBD691A30A152A881643E5A6CD6B46EF3B5 - -Len = 1680 -Msg = 9F2C18ADE9B380C784E170FB763E9AA205F64303067EB1BCEA93DF5DAC4BF5A2E00B78195F808DF24FC76E26CB7BE31DC35F0844CDED1567BBA29858CFFC97FB29010331B01D6A3FB3159CC1B973D255DA9843E34A0A4061CABDB9ED37F241BFABB3C20D32743F4026B59A4CCC385A2301F83C0B0A190B0F2D01ACB8F0D41111E10F2F4E149379275599A52DC089B35FDD5234B0CFB7B6D8AEBD563CA1FA653C5C021DFD6F5920E6F18BFAFDBECBF0AB00281333ED50B9A999549C1C8F8C63D7626C48322E9791D5FF72294049BDE91E73F8 -MD = 5F8E2DE742036B6AC4A7D8987B47C4C7A1CCB7239E1B3EEFD1116D6392C79177D68C66221F31D0FAED9134429B89BEEA - -Len = 1681 -Msg = 2CF3288DF0C40A7AF765DF75268CC32B63098A1E42CC6941A795108BAFB6EBF09EBC92949F1E92AB140B8CAC7546A3B51C923524B1539D22697529358BEC7EA462E92E1CDCE8B7A3081997A0EC9CBED66BFE8334EF651DDCD8A69C577BFC10894E583F1F443BB88ECFF1719CF7DCA3F8E7348EB721038E97E090D138C2F42C2B0A19EBB63FFFC4966D6377D60C64042AB9BBBA423A215406E21901AE3C6339918288596A1064B56C328B3CB54C6327ECF5FD741717E1BCA1BAD8751AE21FC13EE04E4148E1B34F49FD3915868A981F5BDD6E80 -MD = 734B9088D2669D3684F7A0CD38643C8B39C26551F968616AF54BB6EADE9FA45023E6FA6E92B78DD8EC7A50B8C8553FA8 - -Len = 1682 -Msg = E406B68F1C75EE4C12E73229919DCB8C1EC3967E0AFCB0D349968BA95EDC915654851090E15793B67F675635A1EAAD6347904493E88DEE6395D295F93E223CB111D325D94F5A34E11C5C8773C26614D10F28CB07822D6875D7B76D8ACBC2F5EE2FB9F08B87CA1A006065768264D81046E8C6ED0BD2222F70A81074F5DEBB3E3EB5FD588874C7D89131EDD5C826C3F75A38AD60EA417CA26B5F4AAA3E95B1E2AF4081B5CC1CF16E54651111432C58A367F532A6E87096706774BB9FD2C11A75E6B706B53EF5D4EE562E22621B11F47FD2284E80 -MD = 3D8CF6A8EA9F9CC90D13617016FB2FFFC2762E09661ADB494DF82E4583F017555DF969F71A3259686F7137AAA2A64ED7 - -Len = 1683 -Msg = 6F551116863B6CA50D37C17BE7547CA8CBA1D34C93BDAF07BD94DD9D422099E2C896A73B5084181CD94F4325A16688A5D9392DD59C26C6A3619BB40FCD1BE58DDF8A94CEF25215077E734FB8CB52809CAD9A379608AD26FCF08856701FC5E1AFB2F9D5A042B745F0058546A1B28BC3354B11151AF38C52F058A41663C65E82EEFBBBEF366DFF01797DFCE4E291B1CFF9A1045F8B7F784DB6E2CBF7DC33B4F4CB0E4DD4F2C65E773B2EAD81C4899BE4056E45F840D473ECD394383C2CC8E0E5686C84130EDF8E6625AE51B3E1F07A0335474E00 -MD = 4790E1DD6965499405E7BAE00A9BDABEC359CD55AD4E4D004F5F26456FD9E2BE6715E00661C6733F6FDAD4BF51031B4D - -Len = 1684 -Msg = 77CE50C2A1AF8A234F2C50CF62806FBD5D0B856736129015DD361F6894AA9AB427A3151C2BF036953F857269C8C429BC7D715673B56FBC8B8953ED28885388569E15CA47E4FC31B3C4DB8FAF09AD46A7BAD593CAD9E1B5709531FA6F44DC70E03804BC4D0BF5D23A6D7C0C1B55F321FDCAC708879F212C0C917B72E33689635B80FA87C8A084A239BEB4B4B4CEBB40ED948ECE200D7003D4E3319B3A1589B62F5B34EB6D02071595CD26013EFD1CEA645454EC37DAD75A23E2A73A844364318F0D1437CC9B5BC159C3F00EAE2CBC3789C06780 -MD = 2A49B0336F8035049E99292DBE95D0423CA61C90B43DA969451BA58593B716C48D38B535C0D7B75902E66D526E916500 - -Len = 1685 -Msg = 3388AAC4F2F412000389A9D676060B736C2D67263BDFA6E63BE3D5660B5EE69A2D5E15F81EA0A967DD47E1AEE70B6F9445B5AEC1875F699D5C4821F97A543754EC6DE498B7B59B570F239937712FB462DB40008792DD0FDEFBBFF6F333C8879C3284C3ADC5D20D6888F01F2A91602931990C90101CC26FF86D29C547AB80C00E2B001262F7EA283B87C822DB2A07A52D9C622537D3318F9FB1EC88FDB779B47FB33493E0D165F945FE674621AA0A908001C84903995D0616BA5C6BDCEC171F6746EDDD8FC9B94261165C7DCEA64900661D9978 -MD = 3287653DC14B29A7F02A0AB3935564EDC895341A1C4A07544ED003E60686AADE8AC07FD56CEA7720B98FA35789493780 - -Len = 1686 -Msg = 2CA96922D63B06A48D96B05B502F4E296B91D73ED57617BBF68278D0DFC2FCFDD6BD20548E6E717675FAE637DB6B5238A08982EB783B19E508DD5E87EF4845ED933CBC8755FC645E2E84859ECA2708FC9329B36FDD0F7178839D2D10B610769F791972BD93A4BB292EBF55BECC9F8152CE72EF6A379229E7CB0993F5590F6BFCE875CD339804BEE0ACF5F354706BD79909443F0B512DC7DB4C1EE3C0C171EBC0CF1C1DDEBDB963F6F880AB8CF357A93C5F551F6246526121FBE40E10B68C3319A2FED010B4F02B34514A5E7E5CE84616F4A0D8 -MD = 483B2368D19A62AFB014E51FF7345436CB3A40C9ADEE0F535E35D7F92153D2F03C38255E1DEEF87468E2BA21B56BE406 - -Len = 1687 -Msg = 9DA1EACBA5D0F46160540A856F1E212405809F0574C7524291A3D20B4E7CC3CDF5022DE66FDB79888BEEC81D0EF338AAFFFFAB7C5F8A5DA403E6E41826864718EAAB9ABF1882DD8852BDD443E4F23C29D05BC8B44735ECF8884505351E3DA083557CFA8663D85203CED742232F7E150F24B55FCD5B7B2D1F2990FABABE62A8F85435809DDDAD0E268554FC6258809062A113AE1755E747730A969CECD37873C8F99049E8310F676BF352C41A122F2D8E75D58862AB6ED4E196F2202C862464B1A5F4F25BC03F6142DC6EBEC5C30C2BFCEDD57E -MD = 9EAD88D137356C7981D50D3391269D3C2D7F0325BCB12530D439C60D648B1CCC475807EA89D602ED1B646CC6DAF2BCF9 - -Len = 1688 -Msg = AE159F3FA33619002AE6BCCE8CBBDD7D28E5ED9D61534595C4C9F43C402A9BB31F3B301CBFD4A43CE4C24CD5C9849CC6259ECA90E2A79E01FFBAC07BA0E147FA42676A1D668570E0396387B5BCD599E8E66AAED1B8A191C5A47547F61373021FA6DEADCB55363D233C24440F2C73DBB519F7C9FA5A8962EFD5F6252C0407F190DFEFAD707F3C7007D69FF36B8489A5B6B7C557E79DD4F50C06511F599F56C896B35C917B63BA35C6FF8092BAF7D1658E77FC95D8A6A43EEB4C01F33F03877F92774BE89C1114DD531C011E53A34DC248A2F0E6 -MD = B0B1F4058417516A5C5A9683A5D72B489E6AD42273D591791D2CDA7360A4008E86C8899369946F7ABFE29BF92C9CA965 - -Len = 1689 -Msg = 0660E0A141302B50534D949C8925E6707EC8992E5A2C644C7022A94D19271743416868E874FF8DB9B83F7307703DBA2C0B1E4CC533A1ACFBC16F44B103BA7CFF0FA74C026059E8B87530A1E8561EBFDD94E07DAAC12DB30FB7DD888E1F09B75A22CA86CE821639C2D2F053ABD75D10AF6080427F0B9A676A04BE3A0E45ECCEF9C7D228B423519B8174B420E6CA812C74C79D77EFF70F95545AB0CDD4274A22BBC9A636043BFF1E1EC56C9839119BE62F2E0BE9AB3036BC0E90FF334B60BCF6173C81FAB7E5FD55F1A5984093D82F563FF09F0D80 -MD = 6E7EA9AF751BD9DD2A0566AC1FD7B5F8356FBBB758527CC15FD5824D42C62CE6C13526E8CD18B10B7434E2D53A1F4033 - -Len = 1690 -Msg = F4B026CB6D798171DC89A186B1E41EE8E349C26F69ECA4E3768AD90B1F1C6F067D7EC0FC0C0464483FBDD806574F5738E2ABE34086F569C8A91266F7F09596D77B993C3DC612AFCB346545F0185D645A8EB83D1CA3FF7DD6EB7F679BBBB8F2E52925622807DF47E7E02D3B6A9EFCA343984642F36AC9008C0CDF899F9905613082B39E83AE4390F78822579BE7BF2DA24DE753207D3F2A3645F147FC113545974B2C4C563752413649B7B6CDCD7C578DA209F45FCBFF681807B9F5EC6DC003DB7BF59B715E542587D9EC850543CA6B9729A54880 -MD = 97748572F2E4B322DBB68E495912C60783C48A9C0C4A98DDE5AA730441F18B03BD56307B480472D5FE6CEDBEFE77EB47 - -Len = 1691 -Msg = 83659B5B4040A75E046DFCDB2179EF7A7680053C1C86498C4D9FA39D6C0CF3648E0946DA8EF5630C6430E2DF4F194C591D1912B5DA03AECAF6C6A440C6F41F304F252D40414239EBED0FD994CFEBF0E95248D229A9583E8C66F980F5B2D509EEFDDB28BA8BA55716D809B9030A1A2ABD663467E8DECA0C8FCB6B44D1297AFB2FBD1B9F44F37DADF1D3DE4FE301F983ED8222C3C0BAAEAA5216A421A0065D6DE18810538B17D5FCF00A98BF46A9B103E353D0D33CFFA04288DB928C0ACF5E1C0A748A2072651E32915E0CC1E9D745D2A6551C2F40 -MD = 35E388B9F23E1E89FFE9E70D710F272B626AB9FB15C9E5DFFCE4A9ED78A3CCE149D2BC832573201D06D4EC77D887E41C - -Len = 1692 -Msg = 856F1B2F6C81E8A8C3C6532106EF4108B2FBA424BBCEFCC5F12D67387CE8FB8ED88C80B56A7AD4EB79E39FE779EE65BBA038DA0D7003BC16FE087DE0074ABF764F33D075C2F152415858B0E18B33C7120B27972B608838B5D8B4E303C569F84515ACD539BB53F583630F8D3BB28C935935D60B973120ED94A8678AB79800DBDF2D6463D26B587C630F725DB8C3F960E1BB597CF963EF543B3CC7A05FB81EDB7BBE6F893C631BB48310453E900F0CEDBF9EFE9FFEBC08BCDC198E46DB9156B4EEBC40F9977DF341647AE371BC4CCC06470A0AD690 -MD = E7F67344D03AA359A5431AF20A94FF5086A77D239FFB72DCC0D4778F06F666BCC00E0F2C7DAF08F4F604B74E368D371C - -Len = 1693 -Msg = 4AD3F42F008EF17C88465189BDA1A33E2DBB52A1ABAAC899388E50B54599F3C2C0B1D2FD28B9343E82F8B7C5BE7558C8D611572B6D55845433E2546BDF23F38FEF02455F8D5C979BF96E237A3F5E9ED2E05E1023CC12FC0B6ED4136638DAF8AE1AFAC247F4DA8E37051FF13DCFF2DDD5FD8142791F067DA654A58EB0FD27DFFFB53FEFF7331AE8CF2D03484CA5680BCA02141B1219D6F2AD8A42EDA113BC2A250D9C960D568CE448C8EFB5158267ABCECC8B972A6BAD7B4F5E8D278B45DF1E04173120EAD2591CC5298E28D2E60EEEB4938D1828 -MD = 006C4F89EFC0434DAA0ED78FBFD3355F60CDA2C19F2402F483A6E7224281F1E45AEF250785E8FFC6A89CE90869413E2C - -Len = 1694 -Msg = 450EC015C3BAFA6F1A17D87AE57F449A7B868276783D0E259B7B05CC733E43667FCE3561CE954AC0C3DB26E86B52A9587FFA1F6CE15523B048B341DE8C868F126A8E06CC49717D9655B46359A2CA802BF19F93218BDDFBF8E2713DAE7B59FF826EE72F83D35B5E2807C8DCB2B6DD84DB5268DD874BF92B2D7E64F86EB8286F04B9748E117DBA480FE66CF4D7C5B2635070E866AB6CEB2D2EFE231EE88448918D327110ABB5CF90B6E7F99596723639A295A209A5FD0DD6C6D5EFC660546885FC0CDE34F441A4892780006F29C0F3297CE30EC788 -MD = 0640FFC108EEF78DD1D1732A29F3045D1FF1A5FE4932E3B9C46C894072C99A40E5C9757BB412CAAED61BEB27903EF486 - -Len = 1695 -Msg = 82D4B43E3E055B976435EDE9BCD1F157601562B53688338BD2ABF33A8A602658254165B79514636A0D8541ED8983E0EE96E8E20148125981C7C9EF20C6ECCAC0A7A123066C3F1D9A2DFA3E16F515849BEA3F172E2C1C4D81972FD5FBF4ADD14FD27983DFC1C53E43E7ED296FFD496CAB119E939E3E3EFAB7A30546DAEAEB491C322E074DF3C0F4973CC20ADE3BAB5A4CDDECA7D6CE47B8CCB53070B62FB99BA28CC7EF69BB850A24C84562D72EAF152F915E544343233434E702B3F64CEA729BA16A3C11B359C900D30EE61DAB54E55005B30C16 -MD = 451F6B4F3C247DB0FD12831274CDE8C816098CE72021B2B48D636150328C216465CE9CC1A13D74F262281FD9B30798C7 - -Len = 1696 -Msg = 3B8E97C5FFC2D6A40FA7DE7FCEFC90F3B12C940E7AB415321E29EE692DFAC799B009C99DCDDB708FCE5A178C5C35EE2B8617143EDC4C40B4D313661F49ABDD93CEA79D117518805496FE6ACF292C4C2A1F76B403A97D7C399DAF85B46AD84E16246C67D6836757BDE336C290D5D401E6C1386AB32797AF6BB251E9B2D8FE754C47482B72E0B394EAB76916126FD68EA7D65EB93D59F5B4C5AC40F7C3B37E7F3694F29424C24AF8C8F0EF59CD9DBF1D28E0E10F799A6F78CAD1D45B9DB3D7DEE4A7059ABE99182714983B9C9D44D7F5643596D4F3 -MD = 9172AAD6C15B4DCD79BBD84FAD0601119D8B4E3AFED17B594FF38424157985EE27B65826B9905486E767E85AA031E07B - -Len = 1697 -Msg = 1BAC2D5646DE9AD40B20EB6C7B8EB53354B90BA0743658B3EE64F6B12F472CA0D3AA9F75A1E2AB1B08A6BCE8EBFAE3FB921B559C04D55BF8145735DE94A4F6EB5A4A82FF38D19E1BD5C8E84F1A4E0307C50DEDCEE7B493C7E0B7688AD9795BF2FEE617DF7EACE1BAB2BBB1A4D4CF2A363FCDD0F352B6AE39257F4BD0E3941B0714E28F8B46F89F0A238EC7DBDA51B4A18BD4B10693F3533F50148D6C30C1B46DE82D2BF5260B397CBD7F169EED2910D347B19BCE6ECFD5C4382A00F31BB88AF480BAD53CA75C32D0568C14A4DB3D4D50DA70A8EB00 -MD = CA7CB8F209C0A266B338BB64974A4FFC519010BC68BE19FF231EE09579EF45F35EF043B4192E4E01663AD5F5FC4D14FA - -Len = 1698 -Msg = 74E106832472376088777B910B6DE296F18678DEF09B672C268FB5844D9751E56CF5BFA6FA8BD1A5E1DAE84BC9A706696DFC1AD035B5F034D8A9BFC9175F3F6E351DD9625D0E46E3BD1829DB6B9E7E0E3A74A5BB5AF519946A86ED26EA21121AC7034DC6F56570EFA31C65EF26F53B21F8C1D922AE1E01AC42F5777BF7EF06C20869F60E2A8CC35E2476956C0BDE6BBEA9AB74E09881E2507560092A68582F8F2C5B050A6B06349A9F21BA72243BDC8CCE423DCCD9B3D1A83CB8108BD04EBECC4F11D6E4F66905A35C3DA1B1F430DE32338F5F0A80 -MD = CBD20BE2842DD1305C887EBA9F8942D2C689CB0FEE27CE392C67D9DB033F53A065647043F6BB7439650F34A209EBE310 - -Len = 1699 -Msg = EDDAC5821724B9E4F0EDDE899155DEC46B0DF63DDBE51E8911B2778BBAD4A32B09B3FAE2F40D27BB7F450F1DFEDA4A891273B02867DD680B0E0B0EEA70B79B81FA8EC0CF94E7D7CA7C1FF4CA53834760E0BD781032312DD5B609C30F37CFEF3B445250B67023C15581477ADF21F5BEA45A2CE4C94E0731832290167713A42CA5E08545E6EDE35BB9A9A58FDC4729862043EE68A51F4328B8DF73B320A436FC01C2BA93283782D506A7728A7C2D360F4922D9553BF9BC37AADCABE0134BAE04357F938621631AB25A457459BA1B7D43827A2726D720 -MD = 0749ED941BE40DC8D7A4C0E9C645DB13F6A00271AEDA535C3787DFC11B5203C189E534377F7009AC30D1ECE6AEC8AF3C - -Len = 1700 -Msg = 34B7D9773CA69D76B7EF15AD792A7353D76355E7DEC7F922186D04CD0FE70042FBCCA5821AC45B0395A99DC69F0F828204411E740219069DF078711B208572E7238251D953003B9380E72A39F3EA0C82C56DB020C38AE3824D2C209E644328EEBF40101437F823181DE665D734070171CBD6367A09786A2CA5B75A57A18C55687AC022B82E9D36C5E473F4D3C93AD137971DBF7DF1ED505BB156EE850EA4451C6A7AD4E6B85F47275473F01C2D8BECC4EDF5EC31A0DCBB4AC3366359F6D0DDC1A89409CDC624DC227F7CEF00B91BF1333932510610 -MD = 02EE4AE7409418FF3147A7BD968F7293B789839C255F03C3F73804CA33B9B315A148CDB1928CAB379057A189853C112E - -Len = 1701 -Msg = 25BF5D329447C8A7414999D32A955EF80D2B7AE38E1DFDADC0E82EB94B96AD8BDF99C24E742B0503E80CF897A6E81C2B613FA2E7CFD34F1500E2B5D028DC6294CF89947F16A4AA54C1C58F9272C17E76970ABF412629BAE4E88DA49DA0AFC676DB1F9AB23F7846EC6AA9DF28DC1E2654869C663A25C4A803529002CA250CDE571029EEA4365BBD2B16E353923DE5D8F4DA452C1110C51447128E55444B8643704B668598B7B42389C5A92AE193EEC1185CF7189B987E2EC23C1499582091D8930143573B03360D420C2E4F6EF5D4A710F4C62C75A8 -MD = F8A06F823BD2D8EBAEC17B1D2A1974229D9FABAE8BF2AC797F220D1AF8D93ACF56C5B20330ECE7E10BD453DD63D533F8 - -Len = 1702 -Msg = CE4F3CC47B14C9D6DFF5ABF17DF95B015F7CE226A4D4EF1B41AFDE76EFFDB7FAF342567D413BFBAD868C00AF20FE8F95CD7E12AEFDC6085C6AB2AFCD302C0AE10724AF383E8292E01BFC5F89E9420324989FC63817F7C967BDDBAE816AE7C7CDC27AAFE230479C1FDC33D64C98199DEC3347A6E5CD90034618A40CF87203287B9822E712B73A2AA32B5CA917BB756F1CC22D41F197354DC21368C65148A431C5E9285D9F8F2C9CB0352339BE6C46FD6D12228B2D562A648804015CDF03FBC8FE3C1B784FF8718865143BDF9883F3D2680E41C9BE64 -MD = 652F8E81BB59B1358F87ABD198A17E7565594C24D52E7B063D7F456C4836BB92FACEAF672E6A33F6382ABBF581E42750 - -Len = 1703 -Msg = D2D80B91FC1C69E71F6BD25E1FE274A83FAB06249F909780059C3778EFA9DDFF75D5AF3A52DDDC219A6F0E8AA796E9D65103D90CFEB032EDB567FE9ECA7E86B0D66D1D2F550F07C7364D323564C8F3C41124EF4FEF8981CF611BFAD99DEDDE8E64E5E6BF8D9872D41E03459DE9CA7EC4772E08A6469ED35ACD59FF428537721C07AAB8FB005E6F2B3E5F01E7349B3F20E79D7454A2DE51505FDA1698B5E54647313F2E839E7954B6ABBD32762BF9C57162561EA101650AE81AFD766C7AF1A7EF0A814D6032C59220CBE449765A4D34D59BD104EDB4 -MD = 291982A7E3E9105231C37AC2656AB3D7AF90696E90CFE779170DB87BC204B1318A296885EBCB0A5D3BCDC68524ACF03E - -Len = 1704 -Msg = 3434EC31B10FAFDBFEEC0DD6BD94E80F7BA9DCA19EF075F7EB017512AF66D6A4BCF7D16BA0819A1892A6372F9B35BCC7CA8155EE19E8428BC22D214856ED5FA9374C3C09BDE169602CC219679F65A1566FC7316F4CC3B631A18FB4449FA6AFA16A3DB2BC4212EFF539C67CF184680826535589C7111D73BFFCE431B4C40492E763D9279560AAA38EB2DC14A212D723F994A1FE656FF4DD14551CE4E7C621B2AA5604A10001B2878A897A28A08095C325E10A26D2FB1A75BFD64C250309BB55A44F23BBAC0D5516A1C687D3B41EF2FBBF9CC56D4739 -MD = BAFBB3321C4798548F5DD983EAC1E16E1F3EF2BA5C9D69A340F6CABC9C7FE9F1FD95A692B7387342304945674D9D2E4A - -Len = 1705 -Msg = 231AFF791AAC840DED19CF4D259A955CA2993A8E60727B451552E83F26A56506E6E635F43242946B2B1629E687A3162EE47AB6A32F7EDDF3BABE0D9E9F253842E81E092DAA9229FE770AA9E4189820DAFE92406F30874202461D10204A208AB90D5EB3582B636DE48D2DEBC543CA2023C0D12FC14F34E2F62112F9CD0B6295E2C1D37408018B424A79C319A048899A3EED77F8CDACE914037716C23E73E3C79B6D7BAD4F1EA0C19A60B0B7FA3C07D90A18B5FC9C0A6A8FB7CE62800871053E4EB1AEE0F3BB1928E9598CAC63BA44B5B54772E4DA8200 -MD = 908F3D1CA6ED00BFA8C10B50BD3E1EB45294F4A02B9168FA49427813170B9B0121DC90F6FDAAFF0B96FF3A4BF8232C97 - -Len = 1706 -Msg = 7AB9912186325DC1DF33C032BB1475A10B90AB8C15B2D26DCB2A178903178C31F6BC88B3BAB84AA16434E9302FACC0C463C99375BF2A05EE35D53FAF0E4BE126FF670F2A1783FE23B31D22BA224AA4E12F4B1068D1D837F1B0077A186C73F96D846345FFBBFCE48A21A6C51F0788FE52E4938B59F2EB1FBD0705DEB88C893151B61FE17E2EC29BAEA4889C14236ED992C5434358C0E3C3296A6315473DC8DB49754B68DFA97B2DB837E155DA5FF5E4241DFBEA2857F4A08865C9A8B6DC958906DDA95347E1E59BC1308F5B2FA0BC8BD8969465C28440 -MD = E7A84BF04982898C15ADF7BB21D7FC9EEDBF913DFC88945C1ED2DAD11217096B2285B359B2539ED55BA249B077360908 - -Len = 1707 -Msg = FB8C83012A74DE84888E3D41279319F93332F920493A71B81C6F217C699EBE842251DDB02625F3B5295A2EEE825F4B9087F42334847EE290CDC6B7B8B28E67ADB5EF6E4CCB455BF73876797DF7C39880BAFDE4B9E461770B0CF118C66703519DD42B6C488EBBF0135E22C35E31491C595ACC3DC8DC4C71E4B028E88F9552D2A9E3CD98F27C0D755212B04D35046ED8FA4F1F5E8534B6447615C78A823A9E7B4546FBBF4E29B51DB3C2A1ABB391A5F6F35CD424106ACB645590D20DF58FE8D564BE7496313216DB51BD3DEFC50840455CA48E7FED3BC0 -MD = 2BDCF3EA24B085AE643044232896125E46187DB12068F8728F0F5297379E9C5E13F51122DDE41AAE368A75951F18A581 - -Len = 1708 -Msg = 18BD2C8E4D1220A39AC90CDF0295F8A8BA1BCF49177752713A3C808AEF218F12C4F0FFC030572704FE1871ABC2588FCA54566DEDE0EDDD608CE7058F0CD6D63DA5060EFED342AAFB642FE01E377EBD9D6BEE63507E702D270773B4E10FA4C066D25E4AB5BF16FF4FF4407D6E5451C23548FA4FC0266EB5381A472376756ACA6A94AA02943B2DB286EAC1311C4A354D236A3924AFEFC1C82D2B2C1BFF7B10E25485006346B6E95ADAD69AD172BEAA1184E00E89870FCF53C23C2071B0529A9D09BC9CFE182A869EB793E2261FB0B667D52156F3628C50 -MD = 9A7CD47AB3521F8D9D11338CC9CF169A61C7871EF98C4F69B7849B551DE5CCF4741BF10289A3D83B4EBD41186BFF0BC9 - -Len = 1709 -Msg = 347D043DA6E918EAB702D86EAB0CF7960C0ECDE65988FFD03BAF9C0E020884257447C7EABE4D7FD9435E1419024400F22CC10D37B51D59BE721E7D8AC235C3E66989538A2D8DCC8738B214D1DB81D0ACE89DBE6119E8D7C81CBC510F2DEC5A809F5AF767C8E5ECA0EB2736563D85DC17824CAFC2F6AB039B0B49CB0F456ED52F4FB3AB4227B80B5E9F12F167097866551DC5921F04364EEEFC01C0C3BE14C03713547ADA71CA681B753B647F3DDB5C27C405C5FAA5F5A752EE27CD25957FC1134C1E442545D8B585631DD18F2F858B3CEF53F57BFEB8 -MD = C2A4C04AD5AFEE26F8D96C2395A6963C29158A97BDD091AE54DF090A6B5447173F5085B83C8B8AE11E081453E62248F0 - -Len = 1710 -Msg = 465A614C0AF40580A27871CD12DA42D1EBF9B7D9D4CB71B4F8E1A25EBC99CB36BFB99B8B8247BEEC9A10FD5F278226624F8C3C861D14C533F9BB0763DD5F394318F7BB67B4C763FF9891B7366B21B623B260F26AF524929C2E07733C9B8711EDF7C682214A1E740ED16301639947CB42F049AC40BCF3AD45D498442DE1BCD0702256116D2F24E6FF42049A84843AA71F923325878C7BB7C6AED482B103D56B1140EB673BB958B9363E3F71C693C542F8536A3D859326C987C27EE95B76B7E4C855E8E758B02C8AA443E6A1D88BFB1656F4332D070128 -MD = 80A4ADCF830C87DB2C83A249861BB45606278657B5A311102F789C7515AB7EFD8AE2268A1C934F761D09B2FAB111A40C - -Len = 1711 -Msg = 52D90524A8479E97249EF04DCBD00D0D53A500466FCC2E0CDE71ADEC409A11FD57D242103B77D9298A7D213445CA13C1B985A4149BF025AE47FA4D55C0DF836B607E9E8F9C0A1F73EAC9F67D2FAFC222D40047552FC1BF7B39BDDE7FB5B4D4E3D836AC9412BDE2E91C98DA15E2A08B33C446A2B1ABFF97960EBB426744806D712953AF4B293F1F79A1F2B5389EF77EC13FAD66ECF4DDD8F54BCFAE99032BAD76911ACD9A0BB0A4C4D787F33F364551D913BD9D6A91372CCCC9DFB652586C99F719B17586C0839C4E60654126E6CE46A3C672FFE0D528 -MD = B28DD8D78D0CEE99BB9B5BE872B37646091441D10F796AE6C1B128379EBD9AB5CBB580EB359638D9DA9C94D5FE9FDBF1 - -Len = 1712 -Msg = 7C7953D81C8D208FD1C97681D48F49DD003456DE60475B84070EF4847C333B74575B1FC8D2A186964485A3B8634FEAA3595AAA1A2F4595A7D6B6153563DEE31BBAC443C8A33EED6D5D956A980A68366C2527B550EE950250DFB691EACBD5D56AE14B970668BE174C89DF2FEA43AE52F13142639C884FD62A3683C0C3792F0F24AB1318BCB27E21F4737FAB62C77EA38BC8FD1CF41F7DAB64C13FEBE7152BF5BB7AB5A78F5346D43CC741CB6F72B7B8980F268B68BF62ABDFB1577A52438FE14B591498CC95F071228460C7C5D5CEB4A7BDE588E7F21C -MD = A055E0A9C4575CD4D7AD84A240176F21ED68F484A269E0C9EFFB6FA93746E31F64B0B90C513D2B57EC78E9E5BA3BA99C - -Len = 1713 -Msg = 54B61F11272B78B0FDC95FC10117A54D290E051D004A8C3EC2C95773CEEE8B18DD7B97B655C6498054C0C0A5DF34A0FD040C20C46D5AECA2094D4EC1E59B7558FC27E179110D058782FF3A2F627A91B606FF35BA0C1A2355D7388D6EFDFD97147698B633D4D2843F040BE31E483D3102B8418D8A8A2EC6FBEB1DDB291E04BC18F01D0EFE92E6F72F49D9D64D9408522FCD12E3BC8B6358CC9F0952DC0783E81FD11450D20CC37C6F526FACF9BA0C04464C45772D3537F0767F685C71D3659B88953C244A5F82B01E5B0C2B106621C70DCC3179FA9BF180 -MD = 1416C70429C63396D1DE2E5DA0659623B687609C7C0A8A5499621B2939EB96B6E8BB9EF7BF7F855E96D8A8A2A75256DD - -Len = 1714 -Msg = 1806F931E78B282F08D9B153982963BA7009198954F820F740CBDA4CCD4F74712A84968E741F67E81B0EDD71B53D016257B9021D491CAB64AF2953DF73E2720C275849356966734422670F4D385C2916E561BC89C432FA92A81EFC9FFECB2E59404066C346200514E79E46C4EE4E351DFA8BED90CAC2DEECADC4F7EE3AE381146C5C21EF3859CC9A231DEBC71E7E5DDBADFFA9E7DB7FB86B3682D7142ECCF06B8D78B50577CC03FB9EB0006BA63174871AC7CBA303B87EB9C69FFA31705AD943381338F46D3F216232411A936064DCBD4E3A0B38D82D40 -MD = 6F11984A5F282615014F2CB2745420CFA72A547A5242B108239ADFB233AA55C1ADAAAB99D2AD823A0839A9A9D8078713 - -Len = 1715 -Msg = 55A7A7B48849199F1BE5C9CA6252C1BBECA9E3D4B9A81A085D201191EAF2290556054C00904F2F854F7208AB29312EFD205F95D3CA4CC26ECFB02707AF4410A54031E7F7727D72A1B7B50A031D866674306511224B1057D9920177ADD762E391EDC1269F0D4FFEC5689F9C2EBD22167B708173830479C377BBA8FCA1792607273FB4214DFA3A5130963A45C96D65F0FB230AA1DB3683F9C58CED7F5555E757B1B596FB79B54A1E61D5245763DF724CED620DF2F048EC703988B3D1D307DF9CB6B1A78A344782FE6B0F9AF5F5C074AA4BE1D596512726C0 -MD = 9505445F37D39599876AD241CA99F7303B6BF6B3876C3F6AD3D228CFA0F4BE64FDE8BA8A108C8EC5165D31CBA2929FF8 - -Len = 1716 -Msg = D85126F4772B9166A15AE05551B00F3F0924D1F0EC65E9109F164C3C337CE978AF02477FF217EE571A17DF901A158F02FD8F79D64F09CA11A15B453480E08E46F49961C6CBC4C6FDA9706E094682BC8C64F1D74BCFBED70C389397CD76BDFB52A728484297EF974C0E524682C926697B2D33AADA7E749E930AA78731164E08C2EBDFBEA1BBA1DE7739212E14DABBA84B502C3F6550EA79022B7533B270BD6168731B7F72492A3937E12047FB4DD3D261EE6DA38AE01A4110E0E1FFB8E503E0269B1CFD43D2A4C1DD8D3189E5022A2188CDA4DD60C9D400 -MD = 4C776CAE0FF256667F7A5236E24E52753AD6A294104415CA64D520BAF641401FA8E793876FA99380102200C979FFDFDF - -Len = 1717 -Msg = 74573A14637C34B05ADDD60A85BF22DC7E818D04EB94DAC9DAD5EF2891AF122599438F08CE2297109A7AB161E163D9BEE71C366270B6BE4E8F92D4E716FAA3ACE866C049F4BFEF5E5CE5F6A5DDA0C877D17FE2B179599C80B75B2485DEE6B912C5720CB63C906AB77DF480FB9AA3A8CEA11D8B2C63D88DD3AD6ADB8311197E469818200B52C4ADDD51D13D6DF3F3810AED15890A7C1F9388EC296CC79905AC65E006DB0DB3207DF7674874D733AE5A50C5348A208D115E247F023766E1D9F3DBF3769EFA1F5CF950AA6DD903CC36FCFF08321D71D7B2C0 -MD = 6EA1BCFBDD93AC45CBB8901DE04C63576AA8384FB5AF2EB57630EC705014420CD2276B73A4E73BE02EBE334AA6577F6F - -Len = 1718 -Msg = AEB43BF2C27EC6A64D5A8FF892C67B282AE35FA1436323F0480689249AC3A552EA43AD8B983A4DA901A024403EB23CC3A07EDEEF1B0F836110305CAEEE070FE0254EBB70C17342599AF6ACACEA2392ED56526FA0DD9B5513309D0D6C9D5C222370144B531DC0897B80C0FAA16C050116B74BCE3D026BDF4C2AFABDC67381BA6663C47E509012B8EB097A86E5190BD32F8F8BC1B51F3CFCDEC3FA844358671B42F7F510ACEB9F3BF3C3449B47E7F64997EDD5B6E4F5B8A2241F4F8EDE88D0BABC7C10173F5C51C27144EA745D11EF876126D487E842E57C -MD = 41381D87E61F1F1D6ED991C5B42C4C4D3DDEF826F111906C9A3152A20A3D32CAC5ECB550090B5D98C17C4C66DF45C698 - -Len = 1719 -Msg = 4E6558C1D4F2C474AC32B623E7088FB80820E127A90D9E9BD584F81FE3BD701F5DF85C57248FB42E538CEF05A5139D4B6741D6EC47361EC47558037F7B3606C351382A0132EB52A42FA75E16F043B16126F3A12D50C5A28CDC7EEEABBF10C081C56163DAF2AADF5ED706D568E167A843DCAC64C56AE3DFF0017CF359115F22528B98AA209EAC24734870C186998FDF32CD12DA1B8C95BB103650D51FE3766397C23C202B40D146EE82CBD25BEEFD79CDF94B6E8C90638FC23856728607FD873A683402FB46DE44E746E1FAEFDAFC805170A72AACD03620 -MD = 4382E238A191CE473E0C9F6ADE73673894D418A78261B338FB47EA1EE885D6DD8986482639445BB34860D4434C21145B - -Len = 1720 -Msg = 7A6A4F4FDC59A1D223381AE5AF498D74B7252ECF59E389E49130C7EAEE626E7BD9897EFFD92017F4CCDE66B0440462CDEDFD352D8153E6A4C8D7A0812F701CC737B5178C2556F07111200EB627DBC299CAA792DFA58F35935299FA3A3519E9B03166DFFA159103FFA35E8577F7C0A86C6B46FE13DB8E2CDD9DCFBA85BDDDCCE0A7A8E155F81F712D8E9FE646153D3D22C811BD39F830433B2213DD46301941B59293FD0A33E2B63ADBD95239BC01315C46FDB678875B3C81E053A40F581CFBEC24A1404B1671A1B88A6D06120229518FB13A74CA0AC5AE -MD = 788D19AD68D1B26CB0078389B45FB18B3DA35A57A1EC914273158EAD43749BF1AB49B1A68D4831CE193F5852D20FD96C - -Len = 1721 -Msg = F50014B208EB74778C5E65F27F3B7AACD008D7702D56890C769A6A62E4A9BD9C2A9B7E62653B061AF29CC45E37A4E8160B21B5EDE780F0558E1A94F1F23FFD17ECC4BB543F0E278141ECBBE2D3E7D252E22BB87CF64346661B56BC725D90B655E3B4820ED7D1E055232FDD8B08FEB0DBA125C05C42633ED8E050A5D98E4047F64BA217395F9503983626F1E6E0E5768A049E94E7207E9CF9FEA593DEEC252CCCEC7DE21E9A1BE2347A5BC3A0D878C1778112B4F94B4123053B0E1BDE994B8444B7CDF1FEDA2A28FF8E3343501B58E9ECB7AE47354BCEEA80 -MD = FE2EE5B48814B19032EA489E3E053F3E7A4E2CBAB5603F7606BAEADC0B77E1199DAF48B7DE52935FDA2AD15465B9FF7F - -Len = 1722 -Msg = 63FF7ECF12ED74A2E1D9162ACDFDDAB310EF6AEF426E53B88FD29759A6B6D9B0CB28E22C67A1D294206EDE4780964E0C20E27F8221E15E2BF34A3A9F3B38E573AAEF778E6A490C4CAA18729E88395BC866DAF1B2B2D3391F59C8B9699C8E54BF0A758CF5C3A8B097D606B9A6A4B3792B27F132CEDD00E105F2B85D6307664FA39A14270DC402C308409A18695A93BAD45E071CC235CC1F84C418C91081B0554231466700D8A7FF1790C1DB9ED496AC0B38655154A3BD5C70FB9466CA20C69170C4EF3DC18323C36E5A0EFAFBFFB017944706F70D004C7240 -MD = ADC31BDAEE68E3ADE193B358CA6A530D5F4557F8C4F8783A9625072B2626B6CC85262237EB620CF1ED5D1C7264A5ABFD - -Len = 1723 -Msg = 3D02827ABA2E9C794A33E2A1ED946BB0437BC419CE5DCA92EC886531946C96A8D261C70D5422DF0D04221CF0AA4339694C560600E757D6539518B4347D341CCC5A57613A29DD31301C0C0055F1FFC44BB15622ACC47DB80BA50EEEF8226647F7D5F3FF8EA03A968CC6870157A8CADC9924BC9388A9748F7908423B344D915BC29011ACCDF57A04F4400B1C848B493AEB1BF9839865F44BFCD4D643B2FDA2E20B883D5A2368B137EE700D3E83D8E9FD01661E869E41410E686905BFFF2983B6C5930346A8452164972F23715DC9ABC673B0D41C92A65B89E0 -MD = FC13C994C19397A2D9775739C515D23687E87976ED8FC9503C116BD210DF280A0B03CCCA5823C2AE300BD2467351462A - -Len = 1724 -Msg = D6CE68E12CD933EB93A09F6DDB922855604613B4A76CE6F5D6C58991779720C91E652C70B380960ECB409AAD5761DEE4A3DB5C288EE7C13EA16E8FC7FD6BC6C9FCE77A4B236B99314E1745AD8C2425ADC0B4D8F746D8E972FF584131A4ECB2C4038C0BC0B0FAC7BF1249CBB58215EC07769F8BB2E78267D57B978E2BA09DAA70E022C1C57005F33D76718788AC81817033AA6A0BE89EBFD3DE3E5F8E743C1068D3663EE22D206273AAE6A2358101C3423F1DC99658B7916C581A1C39EA42CDDC180E7C8B136CB633CAC407004B503C4D0623FE3107B1FA50 -MD = F68C7401C73B635EA9999AB3D84CC554E72FA22A7A765D899F5AB6D77AF8526E2A58911E5D5D38A850F94085B0E69E0C - -Len = 1725 -Msg = D22AC23AF99096368C3C7992DE621B9DFF7A2B9EB697064E2DD184F7A4BD3DBDCB76DE8520F627BB7BF9DA2016BB04957BD202295F262DBF7B7008E10C5BB00D70D7615E7C1142C1E05BDC05EA51AE81D03414E28B0B61DD78BC8B5BCC06776F4006CB04AC5B0D417E557DB9166CACC5DF5A514C488FF47E42ABFCB87207FD5240459F2C6A723677A4DDB636EA83CC0A323D7609F0E03D800F7767E220C52D5FC828AF4FF003C7198485214F1CBD30A9757129F4FA1067F3DC896EADAF0DB3B78923D4945A90F731F5C1C1DC07666CD651D3BA6DF6E922F0 -MD = 27BA36B5F426CD672C99F5BB09B37E4F40DDB271BAAB01A1B0234E329F4969A862E02C38D498F81B2D71E1CA274AE6F3 - -Len = 1726 -Msg = 0D7B88F3C598B66455959C84D2636CA1C834B73D7F56A97AA07755EB99C4C8BC9016102A1A6A5B45ACD2879DF56F79A1CCB54CD9B1981A3EC9B6FAFFDAA8ADBC6F5E64A3E75594E0659294FCBEC07563D40088637E8771C36BAFE082FD938ADD0904564D89B9FC697EFBA9A0161C3A46014D77901F42FE1F27721115988CBCBFDF5A93C6217E32EA88EB18FD9E7C248F5C43593F03F194E4D3EFF5B85AB474A653E5FCA0D7FD955DF0784B2823DE88A80D83AC93F634A06601D3378CE6F318F63ED5B3F478E61468C348B83697EC9CC0271A99D23B0FE8B0 -MD = C9023EE3D1915B99F2307AD6FFFFC591B99E4899AC7779EFF41F06C50AAB4C67E1E691BF03D2E7B20BAFE6AECDA9CDB8 - -Len = 1727 -Msg = 6D058830F672327A9003386CF0E0EF22738E2027B4114991DC2C4BA6757A62BDB190E3414A4EE979F172BED470FD9D9B085F62D4D9D05621140ED834BC8FC25A8DE066846DB9DC7920B4FD201567C9B7255E41A4D724C87CB7C287FA4BE3D5DF6A1ABAB78F3C8386A33B5D9A03A26784E63999C8C7DC784F541912786E1DD524E2A9F0BB4B6EF87FB1CCA144EDE9B1576E45765589DFAAB5CDED2A025556404469E39E95C74DC5FD11A0FA7FFB21423298B5168C5CEDC34762C36BEB2A1B6BC90E691304B661C638AD7E0BBC2E7A6B3CC87443079D73D1B2 -MD = ACE4DF9A755F25B4AEFA1BE1CD3E1B86B2224E9BAF0DA96E4CE76DCD2E995327C17156AE1A0D7B01E74321C66FEA78B5 - -Len = 1728 -Msg = D9FAA14CEBE9B7DE551B6C0765409A33938562013B5E8E0E1E0A6418DF7399D0A6A771FB81C3CA9BD3BB8E2951B0BC792525A294EBD1083688806FE5E7F1E17FD4E3A41D00C89E8FCF4A363CAEDB1ACB558E3D562F1302B3D83BB886ED27B76033798131DAB05B4217381EAAA7BA15EC820BB5C13B516DD640EAEC5A27D05FDFCA0F35B3A5312146806B4C0275BCD0AAA3B2017F346975DB566F9B4D137F4EE10644C2A2DA66DEECA5342E236495C3C6280528BFD32E90AF4CD9BB908F34012B52B4BC56D48CC8A6B59BAB014988EABD12E1A0A1C2E170E7 -MD = 9C8A4F5BE01AD5AE0946EF7E9F5A82287B6344B966EE28BDEDFE4BD43D840D232054D5E216716EA4F80B457CBC110D1A - -Len = 1729 -Msg = B0AB1FC29576BDF5BCF22A14049DFF38A48B5CD9749C95E4733B18039606DEFD52A73B190C10B59EED4297384B928E6E60304F145F45B3BC4B72A68BCE4EB4F644CEB3E8739881EC43F36C7489AD32A207F3921034647DBA76DC0E41E1358ACD2A45B606BA8CB75472966D1E0A2AABEB880BD837F8317EC8550F326E712AED4EB4AD11CDB6F4FA597BA30954A09A1E386B7E335A45FF2110E6A365876C8BBE5C4475906D0D2400CDFE7FE4672BE6A5168748E11F73F155C3AEBDB3415BB0BDA5BC07F9C2687718B65F1C753A52D09B27F4724651BDF2D09F00 -MD = A3558B5DFD4CF845F550EA8E493B18175911C30AD0F64070B429C67B1090D8250FF566F86E0ADE227DAC1D5167C30097 - -Len = 1730 -Msg = 5EBA9547DA91D476A5B6E44447652756F86ED187590326EF32D18E4D05D05678339AA640B22E029E6C22FF5CBBAF154118F219E3A8EAC24135F2732362AEA3177321EE3DCAA7A94BAA5B04E69D83F0E99E1EDC58A93D0B0BEF8F3AE7DCC0B9CF5D2557D225567FB2C768C59BA8EC70F5C05E480232A64C6ACC0C561BC13BBD28A5BD0C2CE2C23491EFEF39ACD313A777FAD4BCADF0667C6CAD1B8BD8583690FED2F6CE17C33421944A8B3CC62806369D302621C11A66BEB642526308945E5FF32C37DFE81870C3987EA69BE829C83495CCF7D929BDA8A85240 -MD = 9D4A04F487735E0B66F7DD99160FA90DE7AED0C1E8C9F8422E9B25371CD0448C8DEEBC27948F1611609E0A46C1E6376C - -Len = 1731 -Msg = 7E2BC340635BA8777E065C7BE34A876EB20A8DF3170DAF70DEBC6CCD47C2EB126F5E3DCF692FDA19B751B3EA503199CBCE86177AFC261E0661CAED6884CA4C109DD2031CF69EC1EB24BCB73CA622DE18B43C01B1BBBF6B2A22FB4DD6D3B73BC1C2A8BB6085B7971F6909ADD9C5316184F5370889F5FEF6D27CEFC4291202A90620573B150EC3EE31262C455517FBA064AF031F74EDDFC05648AD7BE1DB52CEC623CDA6DE842676AFCA1AB318CACCC8FD137B65044C4EFA0B647CC2A0ED3D075DF0877D42116800546633A445C44F21079661EC7B46A5B80C20 -MD = 00B0C584402749A87BAF18D5AABAFEEE979FACDAE5D4436537368BE51BE3F52A00D7F4290FD9CA6548CC5C44277501F6 - -Len = 1732 -Msg = DA35B0DA3A478D7E4929262859168B4B717F5D1FCDBC249763B5C4FF33B7781822BF98CE97DCEF54AA4AC8B42A4FFAFB5FB934F29DEF33363C561B606FED6A0EC0C2A3FC746801B87333D18CEDA22D9B519DADC6004FAE5A3320E1CA91D9225C47CEDFF521A349CEC7BC34BAAD64FED23BED387833526E22245B35DF621F5DE0DF72588B95E98A442242826F3A38F19F4648606EA28B68B3044DA72831709DCF8E65BD6D047DD81DD83FDFA262757D668FEE6FD65527B01EDD0A6D14334503225BD15CC41EB1D5D6075282913C801B43438AC6EB752A018530 -MD = 40FF8AB07155DB647ACB343E2EE3FC3875BB993130F5BFEA40B0E096A18638079C6BAFEB078433F2EA083FB8A94C7403 - -Len = 1733 -Msg = 4F18D64F8FD0E7C23C75EB389D165A47BC97E57ACC4E415430C9C2A89E1A2A0EBF7B58DCEEC95CBF998D4373ABDF564272CECCAFAEA835026CB62DBCBD0CB9CB38BB21716EAEF0D4F288BA31F5269DAF12C9B50B21EE38B2A620FBD9499784B73A9CC8F6488DAC51545A680D07978A961A517181BAB99684FA2380ABEDD5090A446380995FCDAC7A9B8A45E49B3A88F7EE37DBC147521F902564BD83F7680D4E3F5A96C6BC9915E5E8A8D850B0C8F37B878623AE7EEE57D704FCF4163D4EBD2EA0D665C65F85CD049CD3C4F930C1A2B2C9F05F9F79690F2C90 -MD = 3F29E98B03D2124326B479C48CD030391DECA86A388416EDE388EFA3B1C6413DE0FCE48B3675F7E46BA61612AC89F36F - -Len = 1734 -Msg = D165744E9A601CE8B758FF58406FE6D3038A1FF50C98B9AB59D68A23A19048268775FC65142DE0080D954BA1C9ACD44203C1AEE14CF2595F3104393C0421631AF62C82CACFC9D08311523AE9D533A32E353800B73B9EF0F276F2E68846A2BC84276A1F6FED9A23D40B4B664C7922C609AC86DC2F55656CE92BC015C9BF1FA7AF4F1E42ECAA6EFE2B499DA3092D0D89D6961870D17FBA8753ADC69CD7BD3F6B194AAF4A2EC3CFD08E25491E63502921E7CC10A5587A71A9CA0F16B98196EA03C4A72BB443C80835B9A21C48586198064D12FDFFAE79726F93DC -MD = 0687D8721AED612D33F727F7E4CFEFBC55131093E61059201A117B8E36C4BA58ED22EB220BAFAC2B93FAF99FFF6FE38A - -Len = 1735 -Msg = 24DE7418E94F7355E13E5D931BBAA9D4D54F10343459F224C884F367C80ECAA3C80CB17BAE478FA79944AFAE0818CEBB614A7F2AFD8CCEF604A952A35351A95F0EFECF03641DD7B82B2CE046A3C6CB3AF281597A4E87F2E322863DFC1B61DC52793C6FDCD107C5AAB3B81F75ED2DA006569C7378AD3D418B9086152C58473660C61738D1C33BD74867F3F94D133E6708F34F8456CFF843C99258ADDD2B9DA18A6FDD87C9A530E2330C0BC6731AC9B8BEE51FE3CC3D81B07304002DAB6DB3A43BDF45CB19E03873682A1041ACB6423BB638DCEF04AED9F7DF1E -MD = 559F5F1BC4E6F2954573E032D88B5A3E688BA0D9448E5E616CCB2A1CD99E29F21381E1F07CBC801AE50BDAE758815171 - -Len = 1736 -Msg = 2D8427433D0C61F2D96CFE80CF1E932265A191365C3B61AAA3D6DCC039F6BA2AD52A6A8CC30FC10F705E6B7705105977FA496C1C708A277A124304F1FC40911E7441D1B5E77B951AAD7B01FD5DB1B377D165B05BBF898042E39660CAF8B279FE5229D1A8DB86C0999ED65E53D01CCBC4B43173CCF992B3A14586F6BA42F5FE30AFA8AE40C5DF29966F9346DA5F8B35F16A1DE3AB6DE0F477D8D8660918060E88B9B9E9CA6A4207033B87A812DBF5544D39E4882010F82B6CE005F8E8FF6FE3C3806BC2B73C2B83AFB704345629304F9F86358712E9FAE3CA3E -MD = A29BCB89FD2B89006782088BF9A4AB939EABAFF6F4EEFC31B01A66B73CDF0B977D945E051D7E9F02F19CF32AD4BEBA6C - -Len = 1737 -Msg = F38433CA26FAE8B01EAE24EC59EAB6FF4CE7909E1D73F3D8ED5AD663730391BC561D163FCC44CED801F7B48C4BBF0D578979BAF1E95ED5FA5506AE07DA805FC042074C3E1F6D34ECFC842B3C652746F1F2DF086494F0E0EFF56DB48AC1EC12DEA198FDDF5257EC18395C75AEFFFE8317FA9A7235EFF0C4418DA43E929B7E53DDD09607FF6F9A907F6DCE3EFE263A75183859EBB4682CCAEDE876FF9564CCBAE9817C088FF61381207A8B5276EF41645652B7C1FE9814C175C30587E2094CD44A3DF8A7EC240AFBD4ADA10AF53859CAF6EE3DDA2A79DD77CC7980 -MD = D0957ADBD6132C838A85513EE552BAE1955B2BCD0DF4A27E846A585880AF60CF7382A034D521DD1F2623E93E1ED582A3 - -Len = 1738 -Msg = E5D9B23AF789159A99ED98663E1543957FB105A093C2486B1ADC776581BC5AD9AD88282E0A256F0C0E0C1A60F1264A06EC528788C71AEB1A5BA87208E467E890C0E0AD964EC3FF1D8F4908F6C277A070F0EA921C69DD2CC720E2812F6FEC9565570441AFE65040D1CC591087C15CA804CA953A1BFD5410811FBC7E56BD2EB15AFEF1B7A1567E42871AF1D0E42DE6ADD8BEFA7DF866CB7D446CC5AF3677F68EBF9B9DCB95AA596097B98F8AB56F080620C10A0B28C34461BB7C948019BF650FB3E7B12E8CC7CADCD3CF78C77B6EF4953EBB28634BDFF4E11780C0 -MD = 744A4933B78EE420CA4904AE50CEA3B4C4DFD5E0522DE5904283D0D757904476FEE840889200AA3798AB7724357BCFCE - -Len = 1739 -Msg = 73CB144295AB9BF193DFF255E2BE770102DC59890854039AB39DB11ED6AC6AD8797144832578C21CAFE0EC25C0383CB0EC4648DA2B23BD4203006B511AD5362D3ED4543A279DDEC3FC0E17492894FEDFD052CEFFAE126395C3E6BB0DC9AB43772E3C130534A53E5F1D4B49DA36C47A22E99422A776844028BB0AD862D20C125F56DF6722D807229D27F18DC5B95841DD42EFAC25DAD229112B63F8A7BBAEC36DF280766F9301B319F4A2FEFBF6D5A7B17F620E38959F056E2F39E721636846EE8C66D93FBEA3D0AC06D23301C8CE46182B2DC7BE3EC2EA485180 -MD = 630E88184C06D1C508AE3F9D13B26D8C7AAC6D9F9B69BE91616CEDD2B8C22FC1968C62600D69995CAB097BF2B5931CEF - -Len = 1740 -Msg = 1F55FD989BE2EE0BAD7FA02D95355FC64C3BE8DC25C76EFE980CAF9FDD7DEFA19B5E591240441C634DAC479CA9103E78040F490510C0C8689D8E35CEC420BA1ABD97EBBE9B7ADF882E0AC256E55CF5F38F83588D49153EF53FE2F25A612676EE764D744047476C3747B40659039EB560A2892507F05FCBA688FBD004F680BE23AEBAADC9FF61973FE6728719C5E0E2B3AF19F540FAFC295D13F55BE06C6C93F489CA5A7294A66B1EC0757BAB1CE8C6EE8595B53BB927B65F02536742EC3A1C275CDBB09C2D7A4F612AD0C5CC00FE93EFACC74A4CB0C05C8F4DB0 -MD = 3B9F46E3A5B917A5682373410CC77AFFFE5D8197BE6F24BBE289AAD4C794B0F67E0737342C9105A98449153049527038 - -Len = 1741 -Msg = 0555AFF140369CD288EF4850691D9F5DB6431DADB004BCFF7408E47A0F5DCB4965C3694FC2A6C754452AA775DDC8CECB241EDF8643757E603843F27E885CCAC475A33CD968BAD907438DC37B209681291B6CF5E794A23967398A76D9925D76DE70D7E2B9D623E4126CB95A865EB7E17C2347245528ED9976EC8048C663D50C4E05D5BB8ACA77C98E1800EAADCF0ACEF06E68852DCF102A52829CF2B187EEB7DD00083114B5B913BACA3C5A2381F0FF7A35A5D40E691035EA8D9E0A74B7E17ABE2F848313F6364883D742D82DBCFA61A113CBAEC441E9A33ECD88 -MD = 0935E2153FBAE4AC48FF970169D92676F79F7A1CD689BE4C4A70C408F9102FE5083EE49738AF216CCEA1D7F6D6E56EA6 - -Len = 1742 -Msg = CBA6BF1318BBEF28CD3AF3CCD6FB4CC78AD723997E6FDDA09FB98751B061315BC28B6DE6BACE893911502BC21DE0D93C20DB7DBB32013EF22A3CFA699063FBCA483FA27D0EF2F98491B04E0873C4004D419046B112A0F253F5A9EADAB2EFBB59650E0EE8EF22AB26B00F4F8DF463BD5EDAC2B1EA58313C2BDC90C9837A30BFA7970FD3306E7493E769FC9E9E1E293BEDD78A152866954927C97625A6F6779698D497116AB7CF6621D3EAE5E7DB7F3726B35B36A6AE27343FD3C980E218D8A7D9427357219FAD1907256F682A993C6C5C7601DB1171DADB584CBC -MD = 7AEA7652C67CBAD0D32C816C2423BF34F541E8A8E79ACF7D61D3EAE28E5C06859FFCEF9F98D2A78F9B683EE5C533DB93 - -Len = 1743 -Msg = CC1E708654358899B253086A1FA3E7F41E1FF10C6E145476DE2D86B27F1260B12C470EDA91FEBBBD8421A036FE200EF55D76E77DAA2506337C413BCCBDEBA791825C0EFA5397FF77AC8625DD3BED03B7295C9BDE16DF5A2751C383655987427E6DB98507E9FA1D5683DFEA692881C91A89B3CC71A4F41F13AF6C4BF70F0B8839AAE0CC27A6F49FFC16D69C06132D5E2198C41139C219B11205DCE4BFE8775C23AB8DE0F5537C4727E60D72D8D24979AB46878B626629DB4A44F7D0480A530B59678320FAA6B6D5D01F54853134FA5634560547D3307ACACC3C5C -MD = 540F44C0D7BBFCC43599BAC2EB94CC5DC776D3676C4833E445CB127174465B4DF6AF120A27CB339F05A141D04053874B - -Len = 1744 -Msg = 5E19D97887FCAAC0387E22C6F803C34A3DACD2604172433F7A8A7A526CA4A2A1271ECFC5D5D7BE5AC0D85D921095350DFC65997D443C21C8094E0A3FEFD2961BCB94AED03291AE310CCDA75D8ACE4BC7D89E7D3E5D1650BDA5D668B8B50BFC8E608E184F4D3A9A2BADC4FF5F07E0C0BC8A9F2E0B2A26FD6D8C550008FAAAB75FD71AF2A424BEC9A7CD9D83FAD4C8E9319115656A8717D3B523A68FF8004258B9990ED362308461804BA3E3A7E92D8F2FFAE5C2FBA55BA5A3C27C0A2F71BD711D2FE1799C2ADB31B200035481E9EE5C4ADF2AB9C0FA50B23975CF -MD = 61D3B13728925646476D67C8D626D2ECE69D9B42503FA6A0DF2B24A5F2AB0FB7D74C2F1F7F04304C49AC94BD4E93FDA4 - -Len = 1745 -Msg = C880C4B995AD9D758482D3640E7219DBFE62180D012C37FC7C8427298ECACBC9FA5948C3B23C1F42EB6069A8850A075F709F88CAF61645B26BDF30C6BFD8BE91800BA8F1C63E162849309CADC88CC2E319E5550569A655A4B6419F88037D8FC6A3C4A4C35A3B21CFBC60910A9AF554EDDAC3982676301BE9069B7537F93C7134A0177A3517EA00A7756D9BD9F3B7D40C5985C14D39A8C58CA8420874D21EF372288CB153606E7E5E710B340F8F29854DCE08197BD1F127B47969A2B0EA20A3115D4F7CD1B48EEF6C3F6639607969C57E47BE42D4F2024D1B34E800 -MD = 04370F8D0D27AD7BA8CD8AC4EB213132BEC7F30C5CEC965A5949E5C439BD8FB4A37443011C27B1E49FD129E6278B89AA - -Len = 1746 -Msg = 697718B0CFF69EDE70B7C49FD40EB4778AF938B2412E2086630800CCBFB27645B86C854BD95B7A0105B5C8BDD3B4E9AD76C79961A8D18F6A634F36753692E1527A4D198EA39757BF8AAD72844D3135BE711C1C693E5D181313F98FE86B8B7177467942BDB3EBBEDC08B96F384D4266A48CBDCF3CDA17E7C77A4F419C87A83950DA70D7840E7D254A174D403AE9BEB731F72A211D0211F170220318C65154432D3A0C254A96A6CB614AF61AA3B3C312D5C2B47A1E766BC109B6CB98827D6A6661F8990AB73045BCF17AE31A90AB3B8C6A6D9C0B24B287AB16969600 -MD = AABC23B05BECF010AD6D60B27B6623A046EF5C81216EA9E3E71BC9418AC633E81D124A399D887192AEC25F6FF53F67EA - -Len = 1747 -Msg = 5710347D5FEE482797696CA7582540372408B58898D3D97515B7794EAACD5D8D88D838F817437E172BB7DFAF8E5A996D9EC028C4D6047B09721AD2EA28D348677DF40DB9722D2DCCE46F2D786C0A4F053CAAA4E2C71459D7653262CA7B6DADDF07A1F5A2A0CB52335CFBEE50BCCF01F6714224793C3C53F117DF0C6EDB849042A03526E74BA8A42680695DEA4A09C00920F83A680F539876D526F29C48EB76E2C32D5A5A2D1B9E412A789643A98433BA4E3C33973528502E95FD8389FD8A88A0FC570DC4DFC081E6D02D7756E299C32AFA9FF94A39D7B8AAFCA160 -MD = 79FFE429C4A396811F7A54C463A977BCEE630809A7F9D3AC85E68910C5CF517A4DF6925EF38032CAA2D37282935C49D8 - -Len = 1748 -Msg = 9A1D42B3E5E3C43C39EFD6E3816765D650B8AA14ACEBE53FBF4061CD0D3CD880C94A1B98D2A165F8EC0A5BD803EAE346F326788A9C83971C002B5A5DAEAA84A7824E0928C86FA9218A1317433CA520A6A4632CDE0CC7EE35C764624BEEC5192D03504BCCABDFFA8D0455864AFD50ECC78F0DCDC62BA98FECA4CB62349B4CDBABDF7158046B3CF8A4201D1FE31D5A40EDB8A0F2439384D00566651682FEA8778EECC2B02781BEA796C7BA0DAD376AC869313728A420D50B074289DEE922CF8864CF32C52C070848ACD58D670863E2016BCAAFD6E44635B838CB3E10 -MD = 5B9198FB8D9566557E3480C462B7DD42753F5EB3DB74B1E48DC2B3886118DE40013E485AD04E5734381E898ECD065B18 - -Len = 1749 -Msg = 44CC34DBF0516E0402BBDDF524D4B5CEA882F4E5408D86796056FCE392FE5AF771681419BD0BD4527010FC33F879AA9B2B95BC4A51BD7AEC455FF38403B8C15CA1C692C896889A5D734C382DE86F581CF34BC8C51DFB522EE032FCFB0B8136A40B123D3A6AB200D18E79FF5A11818C8249B66123B3D4AA48A3017D1B3936349FD8F1F9BDA1710CF0D23B407C2367C84F8A6FEC389E1093BA70E51602FA2E35043D1AB93B9941F6A83FF14DC25A023F550F853D7A0BB16D4991678E19340D30A7C11FFF8E1F6610222233C691A68EB45133D096CD254A2ECB51B5F0 -MD = C61F7498526BE062F16C50CAB9B98EC25E7D3E75CF08664674B9CEE69010BA9115DEF72BEDC2334410697A6654C1D79E - -Len = 1750 -Msg = D25B283D67DEF2DD143B65F00401876CB84122B5351C42590D9E23F87F3C222AAF9754B5CBB703BB4ACDFCE294BFBB03990D9D26786B603D6AF0C7AC0CC83C7DBC90FB3581EEAA4EE2326E4DD1C06ECEA4ED6D01CB941A40F6AF3441552614807B908F58A0EF5900B2705054C4B599F85D01EA04B3D2028BB9F225656BCCB4B0E8FA36FA4FF4A49AB646C271B2F579D6953C246DA236B189167F5C470439B3BFA95526BB654F724631434B1E040EA67F684A85B3B4F283E185297059603110A40404AB12D4650E662ABDA2BA870AC2C3A3D313815EAD2026A461A8 -MD = 1F07BED2FA6EB2577A450F21D2E08C59339BF1583D81E92F0E84165F65B6267DDCD42488044A9532D2CF604139F6C698 - -Len = 1751 -Msg = 067E8165EFCD31852B49536B78D91461A545C83E6BA5AF83F94E9419ED8AA4BCEAB4835005DA56BA953F4273C98B311FE4EDF3CC0560DF033E696B7C353B404D0BE599294B6301F1D473F5166C91A1741062A56E8378C0E0C0F1A64794C6A178B0BB821C025DC11A597EB1E5E676F8736661E864F42F5E84D1846251CDFA03C7B2D848FEC46CD75E9FE162C08C451642C9578D6828D8BF763F3113089BBC0786BEB3466EDF013AB675B6FD49DF4A9F1E837D53C3D011628B9F206FEF1D9F0669BE2E7A7873B4A68957EE7BA8B0DFC7F6E5093EAD29B3A3049FA3D8 -MD = 0BA615638A05256E53B5355CB053EB089D1BB13DAE6A5BAD0D717CEC4E8097972DB84045320DC93CDF0AA1ADB792A36D - -Len = 1752 -Msg = C8E976AB4638909387CE3B8D4E510C3230E5690E02C45093B1D297910ABC481E56EEA0F296F98379DFC9080AF69E73B2399D1C143BEE80AE1328162CE1BA7F6A8374679B20AACD380EB4E61382C99998704D62701AFA914F9A2705CDB065885F50D086C3EB5753700C387118BB142F3E6DA1E988DFB31AC75D7368931E45D1391A274B22F83CEB072F9BCABC0B216685BFD789F5023971024B1878A205442522F9EA7D8797A4102A3DF41703768251FD5E017C85D1200A464118AA35654E7CA39F3C375B8EF8CBE7534DBC64BC20BEFB417CF60EC92F63D9EE7397 -MD = 589AB9981D9ABD1D712D59C6863D850BB1D412D24A967D76CCE78FFC998F8C016DD4B115A1BC4DC49248AB5F758C215A - -Len = 1753 -Msg = B0BB9952B8C75305D9ED7F8C402A3414F7DD1353D72E2242E7F96157811488CFDF7E2DF7005090E703CBC7D1EADB690345CB685DEFC764D7E02DB36D196C5E068D06A103BA3B2D6E3C5B6DA7CB789DB167781DA22EECFC2174E2BDFB3AD0434F557EDED255D635ECAF3C8C145EDF64554807FB42E011F25D630FE7C5F1D7B7E582C9A94D10F58C2D5385660E68BAA49D188381AA31D6A5114B08A870735F5C4356F37C9F935609A8703216243C21C1C7E23DDEBE432B1B64266A4D831E2B6F2826955F35AB376D7890AFF04DF6CBC378632EFF128A2E3AD82F494200 -MD = A99D49BC3AE5D9D7A2A87066C5F01CF1503FD4D964DCD3B24FC4958C309C76E469F3F63301C6E31D32CD3731FC42C363 - -Len = 1754 -Msg = A579FA4FA6B6E09B5809B2EBD750D35A4CBAD3F28D70D808825B73D40BB3C0A749634C0FD7F86B988CCE10B6A54B9CD885C103BA8B019BB7F2D366B2E5478B5AF2AB94661C55EA6D7FB7F747ACCA8E7E34F8FA0CD7E9542B4C4D31D6BD4CF25413805DAB3C9F769D00F9F5F53D74F5B21CAAF8277965A8599E6946E59ECF286CB001CE26CCA3CA96D7F2B483E01492D90EFFE57A47FEDD201C9604FB5D870E7E2C213B298DEB828D1C6170E208A32E8E1D3376DB0033A86F2E4BC2CF2A87A7EE7065C19992FE938CCF4FF2F63C69535279774BDBE07D3161B3FED6C0 -MD = B53AC488C2E921C975BD27EF92A5801E6409F63FCC5564AEC4132AF0956D947C7BDEAC166101E9B92058B2D0C83FD567 - -Len = 1755 -Msg = F8D48AF2F89262E4E53EF211B891FEF6B999EC4F60EC1D803268526F7E0E11086E3DF232F4A0C4AE9D2CDBE93A2DF937E4AC673CB0174ABA62DAB5219CFB998590E6E986762943D99A5C3B9DAAB43AD333660793017BCD7F8060F85C338A658B27DF2AC36916F9EFC6CADB099779F0DC44803AE8A66F50413FECC75E60C9BF61ED54CAC360FE635588F112DDD2C02FE05A51BFB4639DC1CC970CD5B33DCEF967DE44FECF12F2D5362BD61D7069DA2D3FD0C00BA410CF1916635B1886220CA07D64E126A00C107A7771E251E00DD176146B93A6E23FA2F60FACFD7BA0 -MD = B6F9A602698534A781F100A08CD062357E4665DF45EE59C52846BCEE81E30926B020A67A28CCF6CA3F3EBD9F85654FB7 - -Len = 1756 -Msg = 7CA20C32E491F1501148E67EA2E7CD36AA5BC7A2F24818554FB7F74A1FC7943DCBA82725C451B13C4BC9E3A1B87F759724BFA5A3D82C0DE79DB7E2E4D112CA7BF9CD7392ED7BA92E9A44CF449ABE096C87E8556A817A400F75855953BD839257372EC32772D10A75BDD2242FDE9773C7B06551DE2F3F25C32BB1C9549E4A16FA45D629D28F21868229A4D22324EE27C207B0DDBF86B6802B9094DF8929AEEF904015D4D127CE3F7966BD0B35AE01F2B29A3A8C867CA3FF0980B812EF2081B43D63EA288B3D736EC8E53093DEAD12AEB3F8C9B1F32E494FCF166D65D0 -MD = 29AEAD375B3985B3B992C0CA9160ACECE1FC46ED54D6A109E08F640AD8E6A230E941CA1F6C89DE01AD71C006120437CB - -Len = 1757 -Msg = 3A1DB864D72DE4B6171388B5438A7D80C16B93A2C14A9592DF49A2420798FA25B969423BD3EDCD78508AA3268EE37CE5B94396570B819CFF3C8DF24FD57833CB3D0B12F615461205E9604243239968CF78B131E8F1B7DF444B91CD3B227ACA9C2E2BC288B7BCD23F9E5541FC9EC9B2C4ACB08D16BBAF409A99C5D94C6E635790E47427A967B30066826DAD10254CB6D7D59AC8E77020646B14E485EE2602B6DE382E4B7038CD5E68476CD337A77E687A8D60B3E74425E4A38F9FFC9B9F2B912863CC365D12E0AC1463786BDB7081BEE4980416CBCCE7F1A7EFC4EB20 -MD = 90C03124F22E14E7A507AEDEC160C3BE39C9B0917293AFAFDE12D407CABC7E2D183D9B91762595AFE21959524AE49E72 - -Len = 1758 -Msg = D9346257711A20A2CE70BBEE79A7C667E787691D9B1526DCE935F897A7B08F10F913D6C1EFB6E43E16D95A2993D945D911EF001D3EF9A902A1F42D0A72763C57FAEDA2AECA9B1D4B8BED766D058E8563365F83593EDABEFB8BF7EB896DA65DD3EF461E860C55390C0016F3B9535AA7B8743D73499D5B6E4174CAEE284F2F272CBD548FC81FECBBB2B8690AE55AE0B9CE920BE03424C94A4C8A6CCF96A11B484F170F5F4C0F834196AE5125E01555A85DB2E5CC88693E7D96E30DE1569E8C1AB74375DA3A5686E57639349A629D3415F19BA17D820BEADA8A115A6FF8 -MD = 7B52004017010BF2389EB68672E639ABCAFFD013D10368432B2797D8667EB43071E8EE5AB1FC361D300B2E7D9AA05D27 - -Len = 1759 -Msg = 200988CB395E9D56BD5DAAB00100EDC9D4F0BCCA0D080E16DB7A9C0CF0DC3E064CB74C37CAE7B44DC315394C5712257ABBCC89D1FD90013364EBD1A55AAF6C17AA0924697FF58F68DE9698DBE691FC85E8F3B95AEB65CBDB655C5E8DCD929E94BAC3389667A18D65DD9BC8D0EB481453964ECDCE89453260C48B57F8ED5A647987D0EF3E7E045AF257CA60DDCD05BFAC255218D74A101172AE2C4BE286F931EFE855C04F1E0B570E17B70733E2CBEF9F16D5F35242482C098873B24C4AFADE932D17FB0E2A139DCDB0BF98D4FFF5D7E83BAD7A4290CEF7B75CEDBED2 -MD = 0EE258D0C77BDAA8EB2E5999A90507DCC77868EAB1B155EDEB08766B84875DDACE9E7C557447093AD95E0296F1DAF185 - -Len = 1760 -Msg = 7145FA124B7429A1FC2231237A949BA7201BCC1822D3272DE005B682398196C25F7E5CC2F289FBF44415F699CB7FE6757791B1443410234AE061EDF623359E2B4E32C19BF88450432DD01CAA5EB16A1DC378F391CA5E3C4E5F356728BDDD4975DB7C890DA8BBC84CC73FF244394D0D48954978765E4A00B593F70F2CA082673A261ED88DBCEF1127728D8CD89BC2C597E9102CED6010F65FA75A14EBE467FA57CE3BD4948B6867D74A9DF5C0EC6F530CBF2EE61CE6F06BC8F2864DFF5583776B31DF8C7FFCB61428A56BF7BD37188B4A5123BBF338393AF46EDA85E6 -MD = B3CC7224A1DD208E739C5528239B8D335A129EE20E59102621180E6B51714E0D60078F4E7328726434AE41CA273515BA - -Len = 1761 -Msg = F83DFEB95ED2CE9382DC80FA8025D5C20014C597CD70382655A8B647328A656E7552FFB590BB9F4149168332ED4EDB0895FAF01B3C957610164A19B0C91FA0A8354498FAB810B835B7A6F46FBE555B2D120CBA7E86C347F3905882DE7D1897984D04CDC39121A7806EAF90419D242849F98FE519439B1EF88980C28F3481B63AA5434E05EAFA90C5A5A7BAFFE92A6B489689CF157E0587EDCFC4061F367482F4AC8D0374847BF2328F409C481A025D4998FDEA0C84F20BF6EEC3335582FFD8C5ED31EECC09216F55D559B3570E423BA35015E52A86BFDE90A7ED981D00 -MD = BD943EFDBBEE1006F7F53C8CE745DA5B83C0A9B3B673412C446326482D48E57029398D07F6D02A35131DDFBD82DF45A6 - -Len = 1762 -Msg = 7C2F7C86D647031A2D9465634783954FAE406A4CFED02B9951F64687F55FF5DA2D6DEFC329E5A6CBDE17DDAFC4D6AEFE552FD66829B1D3B218CA430994C475B0A74B64B1E60F25885F0A4DFFC8F6C5FB9CCFBE6B75246764F2B3A743F911113F6CCD42B3DE0E34EC7C50DF188B2771B96E1979947F2B53E8F2AEF409BFD97E4FC569E8067465E5D2AFB99FD05C4EC5FB6C033DE47CF0C4834D135537F4B8AE0CE96B2048B25D10550585891BA9171FEE557E1C0F03D589FBD77D446D1823BBD77494A93C749AECEAC1E35C80B645D9D935F61B2DBD575D94F415EAEA40 -MD = 8E050B0C39CF29871D360023098238030E31E99304CA010CF2C14AD0BB1C8B54BB686AFE351FDA9B47BA79B873640719 - -Len = 1763 -Msg = A900BC22D5490F6540345B762F5329FBB563BB48E9A443AEF9CFB0E4044E53F88832F3C660E9D057E236E9DAEB95FF496CA830231DC2A84FB5D8598E259DE4EA42D1E98DD7ACB604ACD9F758ED08DBB4A8B8CE7CA73427B77DF31B70AE9A08E2792FFF16008796E0D7C048E575E2972D71A6A07707B34CE92CCC9E1E7793D3C4BBE233A42AEDCE3F950254AE25588C65B313505A507E7819B4E8437351BEA586921D53F5C29A9FFBB16D34CF5826B33E8C620CBF5CE7F4D91AF9E04BB176FA56443D3B1F97036DA112E236304EBE8888BC4D14212FB65776A26D976DE0 -MD = 5057FED0D7C338427E829F170AD3521E7E8E8F9250BB569D3210BF92F2CB1AEE434594817BE962A1144BF95E77D13CDE - -Len = 1764 -Msg = A8B4422DDEFBF38A277C587515DD63322690FDE56E5D7EDE0BED671C862AE75EF5906F8091B8FD6FCE7B0A41DC98A09E9326AFF348B59A81D898FCB4F2204E6F3547B9F9F6B127BB66793997C93922A6E65835D33F59E094E055E84FB6334519A39F4D22B2A516268768442D56CBFFA087BB10487BA5CE886978C4141ADECFDD66392F4CE557CAB50B398A3EF252234ED711D0CCB3268B9658560B33C1E90CE47C7054B92DFA052BB941154C4C249A8EE2BC71D54884154D28ABACC62744B5D120AD291CBB93834557402CC01F9E0D80AD269485171F8577D878EF6D40 -MD = E74841E8CF2496AF95B1C298273E00DE38B04CC670E195C48C71C60944BAB956E01AF0D53941452BAFADC8D03B93EACC - -Len = 1765 -Msg = 0B8736AE4685DE67E038637B0F0E13DA2FC538406DE8B1CBD84E2B93AB3C566788B17345BF1F75AADFA74B9B57880DB3B7DCCFBF692E833FCD637C067C44BEA40A64A76C1349029FF550D0AC011904E91DCFA3569FB6BAC4862D0B1FB3DA23F88DC5EAA7491EDB68DD38A53997E3B40B2164AAA7D77E8ADEE5C48DDC40B4DDC99D95E810D9CA48E42169AF572174EBE5FF0FEC604C0914F695CAF83BA0F4307460D91623B107C110E847E6834324DB0E5A49A948594A0BA3557003A3E44B41262F6EECB7EA29EA272DF0D1F32FA2EAD1A03305639C8D4552E1A06D5520 -MD = 8A150E1AA2CD4D55503E049D1C701A23CB0E19B1400136366336C275CF60D4E335E71EF3B38E5B21049B7F139601599D - -Len = 1766 -Msg = 8472162B8C5D55A99F235168982A178A2F46BB53CE1FEC5E3FB51F62C11C2D7EB770F5BAE3B1D66B10789D28B5249209608D28BFC5D0092237411676DB9ECBF8109BD8AC577127481260BE41B5772EEC7AB7714FF05EFD0D9FD6A1318AFBA473982563E50B2A9B788DA93C434BE4A9286A2B6DECDE6B07AB4EF170CE5E49835CB67A9684B9BEBABC9FD3E91DDD6E36F7D712398C5DCCE633310F7853176926D687D2C0CEE030797C2A78625D92E85AA2F6EABD22142C2445617E54CC30ED9E3364C69EF8B5C8409F350ED954323BDAAE9001369DCE3861A4996D3D0D18 -MD = 169C681921AB4C159226F8E7C3A54AFD03146CC138E6631F1F138DDA6561FF8B647D6C2BF312FE442B124D825130C460 - -Len = 1767 -Msg = FBD1BAAB1A2164DE65B47C947571C963E46500CFE29C6E2D3C654EA66600F2540FACFD02C2E12E8207CB2A18830C2CBF1CE4E2187D5A1FFD830CB3AC60B8F1C108F632A232E92132F673264983F1682A89807774371DCAD3881F6DD21D00CECC9298285AF4393FE9870603C7E85478AE4C482E27164909B99FABBA5EC6E6C9674A16D0F4CF3D398BA2E94A0713BB15C10004554C88CBBDCC957ADE527C8AB091A23AB05320CC0EC3DD8AC7F88FAFF3C4F9F20B2A1875A50FBB7981469936BD59CCDCECFC3024B8295E120E1C5B9004F23EA1556A860709908955AB51A2 -MD = 7B3DE3DE6A45F6F5F7CD2EF452FDB3F3DC783C44AF3CE49CBBE5AE08694D9D46EDEB03231959F48BFB9AA3AC4EAD85C1 - -Len = 1768 -Msg = 7FDFADCC9D29BAD23AE038C6C65CDA1AEF757221B8872ED3D75FF8DF7DA0627D266E224E812C39F7983E4558BFD0A1F2BEF3FEB56BA09120EF762917B9C093867948547AEE98600D10D87B20106878A8D22C64378BF634F7F75900C03986B077B0BF8B740A82447B61B99FEE5376C5EB6680EC9E3088F0BDD0C56883413D60C1357D3C811950E5890E7600103C916341B80C743C6A852B7B4FB60C3BA21F3BC15B8382437A68454779CF3CD7F9F90CCC8EF28D0B706535B1E4108EB5627BB45D719CB046839AEE311CA1ABDC8319E050D67972CB35A6B1601B25DBF487 -MD = D33AD2A71C712A6F8AD9AC923966B4DB8C4818C79CC60F8275367D2452CFD2F5542FD1888D64C9E912B92A186842B000 - -Len = 1769 -Msg = 362A8F973645373B80C928F334FF23B7EE402C2464CE49A86EEC3BB5275BBA3793BFDE3B7981139E0C208F4A5E46D16C22E95FF3358072478898138DEA56910522CB6827F8A6733C8B401C65F1389ED4E06FCD5978348C33FC29BBA2858CA06116753F1DEBADDC89DA4F68E6A8510459BE5C5576EFCDACC4F0FE545BE377620F75C507E2D4F32098B30BBDA06D69919C9E313C1D402462A4AFCAC637F23B52D247D6BBAA483D3B350CF006169FA9D7A9E94C1B103AEE8F93ECAA91EE0EB8224B1CEB5F87B4C715DCB5BA9F534F09B8231E4C5F2C5D54922515799A83B600 -MD = 02C6F592D09231CBDBE46127A40F17DDA35FF12E291F7740CD4C4A9B68AD429D7E1C3D9C4AC72D1CB08E9CEB48AC199D - -Len = 1770 -Msg = 1CC22077B4338E60F383F43C1F64D73C8877BF0879F4EF0E1EF4355AA96F40CD5FA9FCD75CA20E7C52C072F6FF3C0E5132EC69C5339BD30CC2F0D6779DBB576C24BD4C54D64A745280A9FB83FBEE787713DE725475D697B2172D87A194E1EEA61014222C518A23F4D67C604C9742B0EFA8F82BDE5C2066540E8593CB8D3AE8CA62844E9E80CBBC01A70919E7551E4ABF9789DAB9A3C3F76412F72B0AAEF0EB78BD18D00817DF1278F19DFE9E4FDA40C73B029CA06EB9F7B6ECEE3CEBD92D51429976A8F93B75993503B4764599A1153598FFD267E102AFE4EA304B246B80 -MD = 61744CD07AF59A036CF6C8702070157BE1C4751FDE013488D46F508D15436ABFC7756D86DC0FE66077CE8B3272010A35 - -Len = 1771 -Msg = ED975907D6BB37C0DCABDAB298C7E9E174C9BE1EF386D1EB2ECB82FE0364DF8503E3568BCE47AE0873AED18F0B8CEDAFCBA27E2ED0892EBB31F49E26139A61C0FCEA7257F8D919622DD325F0908D27D7A80BE461B2129E462B8F84EFE42331DC2CC4C8E5AFBF339D5D1C0A087E444D6E432FEA224051ED58B4BCD839C41FAD6DDDBCDC3EF3B9DD65A91ADE9619C5BF90469C4D29AD631B9C3F7675BE22D4D1369384F34094C9EBB255C4FD19117278A727AEE9BE8A37991D1EF430952274446DFC2299497B4A32A18594C1BAA6E993906049B0DC9B70DF34F71C5F7CAB40 -MD = 8BF5813F1A8B7E49CE9B63809B7DE8E7C2B50F1DA92E105BC67BA558E71C1BEC81E332DA97AE11B115FD1231031762B6 - -Len = 1772 -Msg = E5C0FBEB6B9B24FC8D6AED56E9B813E0B335159619E32279D68CC1A60A32A905EE810F31D79C65F557BA5349E2076F5E86D3D0967BC67A1FF4D67E86643E79267B0547CA98C484D781F621545EC35830FB4710D87FA5ED6F6B0C7C3ACE434D71F6B00EAA423C37F2841DEFB2F3B76387ED86B94A7780A1E67458A5362B281A19EAE50BFAE97C9B116AF64E93086500978BAAC32C989DBE68D2BAE2EC86048A56DB8EF1C42C7B73EFA712E73CEFD9711F22573C00F03BBCF43CD46A8F08015A6450B68BD234482B8AD1F87C28F3629414740615D6A631ECF5AF486662C6B0 -MD = 16A9C294F3706FBA1D885FDEB5688B1B98CA4ED7282D11D52677D6906200BFEA8C26D49AEB99FB8C0F8BA1995700E787 - -Len = 1773 -Msg = FFB110826A187B8217E127508F7FCC8D047F91228778BC82D1CAC8EED4503159CDC07C9BC64BD7AB4D199B9D058DC48AC77868779458DF1B002FECF875782C9E305A682C233FF7B3428A3F23BB4A60DD32270238DE49D4973031814FF2D7EDFB88482951025A51358BAEDE5AB72968883E906B65ED277C934F802F1B372959A53E9DEA5FE96E2D17B2219A96FD02F8AB193C8B570A4D842DCA0786CE0D48A5208C2E0AD737163703CD1F8573FB910521C746E79F1EC6FEDA7503264E117D9D9F9AE784B83B8425E714EF0001F91096220644156A834F1EC08C2F1C035310 -MD = 5A03B18ECB1507938F53D52D933F9E86EB3AB81DA2F3C2465361A46310DB95AB73F860640D032B05B057065F103D8FEB - -Len = 1774 -Msg = 858FD6156E56C400E14D20C9797E5C3C77DA1FEDFD9F78A668223890E539A642C032D54BBC3DB3D0523DEC2B54484622FD1E552F3D13412D4C239072046C26B6C831B936E64C539712EE9C7913287E51E2701664E8ED5C3DA4BF399B8EF9E16DE5B8E20A07EC662AD3C85F93E87E06D1B1872EABDD98CC6DDC2261AF5EF3E1B308AAC3B1F6E5586988335A179DDF710CFD0E4404A0C737D5DFEEE0ECED5B622AC2C5C3ECB2121D56B7B2F556C79C116607577B340588485B89CBEBF2127F474EBF2C0D381450A5012963B1C94AC794D86AEC05E53420D9FBBD8E719E5974 -MD = CCD59B2C8609FF814EC98B29CD1BA82E14D8134CEDF407FEF680C9D7985AD97C836C1EB6FD34DD748C4567AE0B242822 - -Len = 1775 -Msg = B8A81A70EBAE566CBF2CDBACA0D32F504281A5F6199E2410009F3B0EEAE3E6F22DFDC976DCBE56DDCFF18560A5880827E13EEE8D3E8973008E7FA21FBC9BC617909648D30552923B304061FC0AC5DC4B9E9E0D6C7D6C0DFCF14A7871C88EF98D6354226F7665CDC7B26AE9D5C028BCC3394DEFFFB09C5191701EF82CD111EACBA9FF23D943A9D93879A0F4F094A4A0C3B6524F6BDA783A3A1B571FBDAA5CBC6A29616B86F0160361ABD99175FD24D79A87959B98AE7DC0C53FEDB2FC065A2D0086C4FEE596F8A047DFEC8C9A24353E60438E6868A695A66AE1D1E3425384 -MD = AD91E2AD4FF3AA2F8CBB5E4EFD5E990DB0B3E85E2F76F2914623E3CCBB8F7B4CBB1EA153D2BC5D43D25E3D615F47B226 - -Len = 1776 -Msg = 988638219FD3095421F826F56E4F09E356296B628C3CE6930C9F2E758FD1A80C8273F2F61E4DAAE65C4F110D3E7CA0965AC7D24E34C0DC4BA2D6FF0BF5BBE93B3585F354D7543CB542A1AA54674D375077F2D360A8F4D42F3DB131C3B7AB7306267BA107659864A90C8C909460A73621D1F5D9D3FD95BEB19B23DB1CB6C0D0FBA91D36891529B8BD8263CAA1BAB56A4AFFAED44962DF096D8D5B1EB845EF31188B3E10F1AF811A13F156BEB7A288AAE593EBD1471B624AA1A7C6ADF01E2200B3D72D88A3AED3100C88231E41EFC376906F0B580DC895F080FDA5741DB1CB -MD = C12D450A020CDE18C24323FB4E3FB23255714B1D4CBF29719F74DA5E6151FAE901DC21A6680AD159FFB2E7C0AAABDF5B - -Len = 1777 -Msg = 689E99F0F012A351D6D4C65C6E45F66F75133492B96CA3FBD2FAF9C7BD0A064B0272BC6FA6E06E0D6C9A40F952D3CAE3AAAE8D8E45B78B7DBC4AE55D55977B77855867A93BAF38D6C1EBB80C3FA2D64417412822C5EBB48E39C0BE2D1ECD8D7B32E9ABBCA89BFADDE5B690BE604E5D636D1E14D7CA3600D21555526D89479E0959D7476D25FEB82C9D07A51C3A7473D6DB944AC3E272DE038AEF2CED6FFC7925CBE5CB28808B0481C6B7CFA7FB98386B3E285D1C27C4CE95F043AB15D2599BC146A3213B49ABD62622E9B8F004142402BD6FDB22E12C78BD2A1F1A79867100 -MD = DAF6E6EAC6C71ED18D28A00559A8E789676B176A89B2C8FB1F8AEC342722D18373EDEC978A79086118EDF53DFBCDF671 - -Len = 1778 -Msg = B5EE16BAB537B6C45B4F6A4037CC7C7AECED7AB9BC6F64D5A84B0993EB079A49DB78521DA17F82B6573A1E1C17088CC249E3860A1C775DF37E3396A0DF546FF0580F7198385046F24A4449F62421397838D1839BCB0D1074FB0B130BAE7C6770D38B5349765DB7480EB42F3A644AB106DBEECE2AD154A849F65F8206DEF6CB74E8D18949CDED9DD965382829755700271DD8C2128B6FD4F73741D0EB611EC10767D8C362586DB58AB5952E8D40D739063B838DF5F26E719B777A370DD4B4598C3F0012F3907EA5445CD43EE622144B3E8A6F5E7A95288E58EA31D69F9EB200 -MD = 0C3381A1B89E8E6507D8E5C4B3B69D5C2288AB239BF885014D11AFFA1F1FA77BB54F8D7F3538360327703E35AF4FB84F - -Len = 1779 -Msg = 59E5284707E07BAC72F72F9C794598045B6CDC1B84D6868F41B9C3F56BF2B8B8066F3A4FFDE362D5F8C9165D0F4F2422DD961B510C1FF30F1522044719A7843C5E2E86462F34D011C90382294E1262BF9210EA74E6EC20A341E1A61FA695897D5FAEE35AA02879DD6E61C953DE7A948F4A6127412A905A7800BEE515957F63ADBAA6917C60DC47D2BE0B9E7D2BF5DA653B79096E266B8B0209AA5B47AA547F0009F4E3046D130D0CA7BB80FB3D08602EBC52AAF4326F9A3A090ECC10BA3E75887E899ACA9E7225591A1A9818C0F942E24296C4B92A94507F982B7806074220 -MD = 784F5CE49BB07BAA4BDA62AC0A3A0B4C1C94FC63FB7DCA6AE243DA314E45797FC57A8533DE9824CA85A65D516CC65E80 - -Len = 1780 -Msg = A826E94F52AD6F99EE16FB3C8176F742ED6128DF75F5946979DA9F3465D8EFEA205182FE62C0AED722922EFA0340AC02261E94B520A016CD0F9C5527663A4012E2A8CD1F5D5BE194693AF7B0FB56CC63BF67E98B3DC891B362FF58C0885F72945FAA606670F4FCE2D0EA0C58146FADD1AF2D722A8BE13812B875A4CA7776D548C52937CCA376B06A72260D353B39E85E64368C0185D154C91887B41CEA32CEA0F319E915F38CAEEABE01C47DF2961B28269B260E430DB9CCB8605F99D6A534B5DB5A079508E726135D73BB462EFC3AEFF8142FC389865DDF4662EB42D22D50 -MD = 4B4A2533C315AD7F8A9C870DBB76E2772648D74178344F91939E77B8296A876180644F503B35D9B80C726FE3F02CE566 - -Len = 1781 -Msg = 596FC0D7AF7728C870648A62AC2A4E20924CFDFF4127378AAA6A18FBA54C9D572E7E79039D4C449458A36DDCD5AED4FD463FB207BA99841BDB8C9BCB9AE8AE75E03536BA2A808A32A8C81194C11E8365996107CDF410D2E5CFFB2EC9E2297FED09154FECC91658B9386488767E6D9501E50876EE4373A2C65C7A5573F7F04A46B05B82ACC35151A66D610278DEE87389FD1CB125FAFFB00CE75F22F39AB08D13A8428C9C59C1BFB974759542EAB24DF016C5C231CF504A2624E138F6304E0F52CC6B3F40645EA0152C085250367C889B786FD3B8B25E1D6FB01DDA18694470 -MD = 5EC86D781F75D5E13F62B442345EAD7BE9D16A0DB13CE04DA63DF0CF6DF3BDE6DEF6A8E88529752D97612DD604049125 - -Len = 1782 -Msg = EFB3D29588D15242E8BA1350B47160927ACAA45EFC76A7F49C4A645493A0E481263CE4633E9BDB4E5F0AF7A9590ABF367EDCB427F8F4356A69856866CB677970E229D34E36796F78C75BA454217DFA3C68891588BFD38D0444C89734F58378E8748E1A641FE0912C8767CA3F2CCC9E8F4EAABFA09297A4633EDDFD420F0182BB916AE6B060A3C03D754D6AB223CA8914AAA0E357FE80A0BE4ED410C80DB9FCED2E57F46B5AB8BDA63423D8A0C03E113891EE6B5B7C0D336157DAA8AFE6A944F5A121F1944A37399B930CDF53F84E0C66A4B77A1261187686C8F7C2F16DECF8 -MD = 34977685FB146B198BDF25BFF6E27F3527459C1BAE3A36FE6B6397E483B49D6EA2CCD0DCC2629AC6933E7E094CB17644 - -Len = 1783 -Msg = B8E7A79771D4F282C163A1E2C72A0E9AA1B51C60BC857DA2925E30678F8AAFE7366FDA06CAE7B39F80C17136C990734EE58674AE4200F847C2AE1BAF8BE24FE7951CDB7573EF0F0173E9372C9DF3A5C0334E90636DA48C23460145D9BD486DEF39E4FA04DE9BEE953919FBCE96D9EF6C73A2D1DC5C5FE20378093A6535E6299585B8C63F2A080BF5FE5F11818824B206AA65AC4B358EB2093A6DBD656BC3D17498C56A36190F76D32FA130B203570EEC3A44AE20F76FB2514FA7B9A3104AE07F62DAA2FEF7387D46B9076A109FD2E0290D0DB3280DE6D72F0003AB3BE2C66C -MD = 1BB8DFD33F967D064B85BE21E7649DE749CE90452BDD6CEAFD72D225513A3B63D2F9BB0E5C1F2468A7A6A04743664248 - -Len = 1784 -Msg = 5AAB62756D307A669D146ABA988D9074C5A159B3DE85151A819B117CA1FF6597F6156E80FDD28C9C3176835164D37DA7DA11D94E09ADD770B68A6E081CD22CA0C004BFE7CD283BF43A588DA91F509B27A6584C474A4A2F3EE0F1F56447379240A5AB1FB77FDCA49B305F07BA86B62756FB9EFB4FC225C86845F026EA542076B91A0BC2CDD136E122C659BE259D98E5841DF4C2F60330D4D8CDEE7BF1A0A244524EECC68FF2AEF5BF0069C9E87A11C6E519DE1A4062A10C83837388F7EF58598A3846F49D499682B683C4A062B421594FAFBC1383C943BA83BDEF515EFCF10D -MD = E5B7A9B41FA0CEC3252FF95099523DC845C69B670D8DFEBA3E4AF6DEC659C4B2D4B04F5F7062209485A37C542CCBE7E6 - -Len = 1785 -Msg = DB5F9F96CE8C4916DAB039CB29B925B057044C126CD116712C4A91D5F0CC3CA08C1F27FCEAA7706D3F183A541210B5D0DA8FD7093CFE660C210B6BC06846FEBCBCDDB9BF68C34FF9AC1DBCF325CA6EE41552D7D28A0B200BD7509AC6147907557C3DA239F86A3A600BEAE2CB5078CAFA77D2479CFCDB13590B90B376044FA4F4C29D537CD5F537BAA1C0839EA3DA3C57120104A3F804641275F8C5940BDD4C81F18B12EAD0B37249CE33B3079622FAB25E174F9C72599B41BC536BBF9749B65B8A9A783907393C1D2BDC437E5B4DDB37E9FA1C81CBD7634AB31883878EA1DE80 -MD = 9F308D4072A472AD43C12C5CEFDF8E479376D86F02E60E41D786D43829FE719EC27B3C6F34967C68673E3FAD8171EE88 - -Len = 1786 -Msg = 109D1D580E527C36614A4743E2F8B92E13CE86CE212F70D9E08951297EF173298806274CCE4F3AA756F2A6BFA4873322BEF2D2A0C3131B1FE1AFF81874A2A715561310A9CC7D8338DEFE44A27500B5AFDAD4300160B507A2BC58CAEEB3683B9596D822011D0B01E3C314741F3948F9148679B822A55E55CA19901D41AF8195489DE0980A4E0DD892EA9420A60BF83B1203F317C2295CE73CE9FFE9E498A3335B8AC4683E0C17E18D9F7050528469B177F5A3FB4FFA1F88E6A0FAF60C8018DADE63A2D5F0FE8B970C5589ADC8BF706D9B574190963CAC5ADB827F60DB174A7680 -MD = D3B8960E92A8C9379394D928416AA69405895D217E07EF086E332A600EF581FC94432BDEDF5D2DCAE1E57DB520302B0E - -Len = 1787 -Msg = 22EAA6EC79BCBCB54AC77F96F50B5932D35ECAFDF8F1F52F680D29C57E8F6F5C5C456F772A1D2F398CAB6E8487225126EB71AC8E306ADA353FEC4B71AFC588FEA5BFB0318AF87E319C627BBE499A67057FEFC24DAD44E525194DE82081BBACD4911E2395DED81F97A381E13E23BA1CF3F6E58B9D297BAE7B3C3CD224C00F6D030B4658D19A69B0B5965BBDBBE8F8339418E8E28C0BE9D7C7CDC71990CBED39D45D0E423F8F410C306FFAF581A1D73F0737A33334463DCD18054F899EB79A89EC7A99249F06703323BF05952826A4C0932B820FEE9481EEA07A859AACD1991A60 -MD = AD48B4ED2BCF94BB5E91B4087CC60E17AB4E4B59F05235AA0A14119496C6267655946A6064BA9AF7D6D16BB44E399521 - -Len = 1788 -Msg = A398525B9304377B97BE57240B5E03932B0A798000EB2387BCCEC628D068B6DD5B4CA1D0FE037E325986A4669EAF2EA4888B6E6D36914AEF81B59F4B4B4C87EB452E88A38EE3FBE408594B5F9991E6A2529E80DBD2F5BC32F8C48EB5708754E8C2D7487EA8C741051DD38160041DB4D16D6E92E0C2158D854AA84832DB900790434C9C6D68C4F0D9BC53B008FAEE397A460A6D43E23AA404BF090D584104A597BBF4C5A9B5817EBD985651393EB0CE96C668045E089C2BF6F8472AD2F6BE0F9D4735428CE214CA1DA70CC4580B9D4EF42C9185DAF0BF5EBECB9EFF45B2C0A4E0 -MD = 18CF080F38F1A712388B542CB5CFA25F848F9D53927FB88DC1F72D093902AC1728BBF5B485A55DF1703E91DD43CB1B43 - -Len = 1789 -Msg = E6F462213A8E30F8E6C9D36CFA3D6DF08FFC26D96646DFEB1418C8A198FE4F2365E303671389EB7A4AABB4EE3B6C4E86C86198742F76CBFC45AC2153DDF5E672B8C1A8A753E83DFD25E1458ECEFBDB571BAB1D6C5DDD28A1B1184B27374F65C28B9E4529716A843031CCA409D9DDAF6B99FD0E2623FCB96E02D111B61CB16705C5726FEEB414AB259FF86C392E9C5F5AF40357A244EA0BBFE5E1F06510F40E8B09EE516FBAF1C5E3CC44F7755B10BE5DC9EA06F6A25E368BD1324AC64F8350D85DEF415AFF1C1148CE50EABABECF501126AF66C6FDFFB6953122C1AFDE846AB8 -MD = 199B057E64B9256E0E4EA4E9E83EC6A48DA0518C9233C37210D439FA50EA4BDEEF8D07087DC7797CF49450C37589EB60 - -Len = 1790 -Msg = 9B7474751EC3E0BC817A13FB0D8D98AAB5DA9ED6192BBCE3B8358A6B03DE907A7DA7F45868AFDC72A8C178CF893703C9D25B2E80979664868A0D725C4A29697275D51C94E203DBBB7D84768F733CBA856888EBA76958CE9D2EB687A0FAE48353183032CDD560514D01243AB6E0D6DA65A2FDDC9561366025D4BB1CB67FCAF66B11EF599EE7CC40C4F88238B8C24D75E8D23ABF217351935C4D85877059EAF01CE68425AD8979E6C8560CEE26F0613CB0B090BE7F74C1EE2950B134486F9F11E9C911FB7F07C957D1E150C29B938D01B813FE4E99008CA1AE70761AF1D1500D10 -MD = 7C56DD261D88279B4D6E867BF2F0F72C4FCBEB3EE12CFD9670790C268DEA22E54F5E1CDD49DFC534265AAE2D2B369188 - -Len = 1791 -Msg = 8130BEEACC213C8789815550C32C2548E750A2516FC174498BB346743379B651A3566F4116291C6C86FA0DD913E41670ED1BFFA3FD95BB8ABAE218FC16C27BF4DCA132ECBDB589E807BBE980B25373E59B3093DA9ECD4303311CD36E800E7029A953219AFBD18B7A68616EE0B372C81319F0238AA6260FD4D6044C04FC9AE7A82CEFF96D518F340928EFF34145817DB8A18E4EABD6401623318198A3B90FDA9F86D93EB14BD976F6E980331A2FD7F41AACC8ABD1559ACF38EEE6407E38EDA98420742F5FA197B577A5EA34A3D452BFA3E77F7C9CE1CA386AB7966C6CDCD0ACDA -MD = 073A6533B4A605468864F1F4FE53B32D063AA8FDB99B703A6484996FECF132F473A1112DE2236EB470CC9E34CC33033B - -Len = 1792 -Msg = 47B8216AA0FBB5D67966F2E82C17C07AA2D6327E96FCD83E3DE7333689F3EE79994A1BF45082C4D725ED8D41205CB5BCDF5C341F77FACB1DA46A5B9B2CBC49EADF786BCD881F371A95FA17DF73F606519AEA0FF79D5A11427B98EE7F13A5C00637E2854134691059839121FEA9ABE2CD1BCBBBF27C74CAF3678E05BFB1C949897EA01F56FFA4DAFBE8644611685C617A3206C7A7036E4AC816799F693DAFE7F19F303CE4EBA09D21E03610201BFC665B72400A547A1E00FA9B7AD8D84F84B34AEF118515E74DEF11B9188BD1E1F97D9A12C30132EC2806339BDADACDA2FD8B78 -MD = 5E2BA5382C357B5A1987BDAB9A2A0B053EB75EE770E1994E630F24015AB102E482A95A25B68F5DE99FE9748FA48FF696 - -Len = 1793 -Msg = 27D6EE9DBED93F4FF6F3A7BAF8B72C092329912F4A15AF0EEA52F9E322A084BBD9B406672D9BC94A4A492AA0845E9390F04330B8EC31F2EDCDD05221F4524EF7FDAEDCEE67CF2E44FA2D298431EBEC108750F1CE529319A50F8392400C722F5E53B6D53C63E16BA27A374E99715E9050FED4792682184A5F268DDB6D1625716C2CE8509F36D9AC9565D742759F658A90C1D20AC4E66BF75FAE130114D83EEAB638A4C77B3CAABC4F631B3271805ABFCCA43CE5445AF17CCF1DE7CEC30A5E3107EBED862AC949A163687E309C6F6ADCA442F707BE5957761647AEA187F10F88D080 -MD = F6A1720A2F64633155B6CC2CC071CC500057269B192A4BE3A5B79B0523963F8CF50BD7CEEB96340C0923012574A2AB0C - -Len = 1794 -Msg = C79C9FE2A1606723EC5D8337EF848D1AF1E7A1E856BF25D36464FA5FE65563A2AF9E66DB7D52BC3F2DAA1238CA2EB67AFD32349A70308751AAC7495DD1AE4683F8F47F8EB67BF0C09303763B14E7E56098B4EDAE326ACC8ECF2760071C8D5E953B1DFC4D078D2D1380F93B950D54986B586D61A908C9252ACAAC8423A5406A0DE1A0AC74B936C493D194EE413FBAFC96F3DDB4721F37BC451AE41B6DAE9A5C0A813DAC3062679B0B95388BE628E027948A99B34BFFA65B4DFBCACBF5F5B2A64BA7E0611A8302D18354E297CB3AC65740E060876440F96FACA71B655261A43E6BC0 -MD = A0C7A15FF62E3077CD4FBCEABB85EE5FD7608D6D97168DAA9E92D906BBC274611A52EF73A12C2CC2B76E1ADD0FE6F633 - -Len = 1795 -Msg = CDEDB7F4BE61E5253A46B965A08FE346C388C0F77680B3D402EFCB1013B83CB0F72C79BBB3461890F24634FC48F4A77B4035C2B28AA75AA9EF49FF390F4C3726121A1E4FDE6E97C2D72E51ECEBB76A9750E80A3D6D58A6F3D0709E8362AD005E10D5FF33B9953D45E2AF090654BE13B1D32950931601BF84B037BFAA2694CF26FD6C8833C0AF72FD78AF0C01B301FE9D9265F9B6AD3ADBC0DB1C7C4AC3E6F48709C1B4AB8777D6B5EC9FD7D409BD31900836ADEED56CCFA3985E868C6AA7EF2B8AF854CFF7AD2692EED15DCF83C4D948C8AB7A25F79A83D761C1EEA364059B4300 -MD = FFF39494428380399D61510D3C1341954EB7B41B5C04ED3E4956A670ED6EB6AB072C8D6CD67AC6B9A38419704716BD0D - -Len = 1796 -Msg = 8DDCCD9E22F2ADB324237FB5D57C093280ACD83B53DECA3B914651E8CAE649E2904DB8EB0105BD4E921975D71BD5342060765BA915CE51C0D65BFAE74B52543C32F923E86CAF8D7E2CB19D5D9E935CE33B32FD9CF2E5ADAE48BF1419FC83ADF8ED00D624B4C1001A840ABECE16CEDB785277A1AB6CB02335CD867240BCECD0C200C747E428EFBF82A49961AA30226B9ED910C4B4E8971C7D27B5E2115A7DA0C2D91E15CE6FF4FFAE854FDF4DD14AACBB0A562B03EDDE104CA3F7658A66B6D4DB8AD7428B58816DE25802EA871834AE1EE4CE9A80F5F12826438B663C279B143480 -MD = 6AA52799AFE87A6594F3072E76DADE68FD0B5FD2204BD742503C143CA33D344D24FD72754DDC4FDFDF3D4E8C099843E3 - -Len = 1797 -Msg = 48840249A35C396A5E9AB7C6CD2F0FF7EA3166BE9EFA96532F9E76E58B350595E7885C6E4C236B34FC66A14873F11EE0691DD3843BBE0F38A73638FC8BC689DC42C8A1C3951D94E538BB80FD94787FD58398A8FCA3D8BA0863CA8E6FCA51F01A3370D59A37308BD2334FB7315C74413A02F620F464C819F159C75D3E1017B7B768FFD9FF3B5A6A45C03376FC2E5E08398E23E67F80082C825A4635882D953AD6B8E34DD7236AEA73681AA53ACE2FACE0583B0CFE81C467F49F0E05F9EFEA53C826E18CFE9F4B288F1405485DC207649CAA7B93A4820F640D02C788854F49E76E48 -MD = 78E0185549964AC49A048B5B1271F126BAA9E6A9FFC3072D94ECFBCDAB769BC167132460552E585C1E53F59ED66C14B7 - -Len = 1798 -Msg = 0F1D284ADAAE48146EBAB918BD31203EDD82ED4204FF85D7B0389784222852CACA0D54E415520A5C033711EFEB6B9CFD7FD0B8F1C605C729224357362625FE976A58DDED74D028218AA9099C24A9DB1499BDD9FB89E3A14F89DD1A602E78FF4EC2A7FEE4DFDEB35E0A71E1CA7EAA0010C8EFD92881E420A22C92D12D697D4F3A36B30E2F7C1B054A9865684F855679E9F8B8BBF58E4075085FA2FD27CB57C5A8F6A9D86F081EBA58643956E1680337BC6B7C547B05C7183A1F40D569B15B0329ED82FD59511E930EAD1262AE3A15BB284DA0C99F42615C00899B80C1D645DBC6DC -MD = 9EFAE3504DCF318341ED3950E25F7F0E50D5A7A957E76E3753E3876D5A71400F16B1CAAA7395EC3A76E4F23A377BF84B - -Len = 1799 -Msg = 9C9827C405695B340C750EB7B48F70EF04742A95157782810B1E090EC8CF7F1757379ECE9877586ECBE00F25022F962F131402EB9C5FE4BDC739748D340A79A915D11F660471E9B2E833652E07CBA8B5AF1363094AA8086AEB8A46E01917B4A5DC9DFC0F5B93B7E8882FA2EA69BCA02EE516C6AC63C6121A623CD909A6043BC7CE50FD00B706D1D23736C8D9DFE34F9887CFB9E7CEC0FE45BD1FD1C21EAACBFBD3A55CEBFE2AC7D35994380277E178A77242E11CF73D2247E6CC5F2848EFB20FCB870DB1A86AB409716A7D146C10824575BBE183A2CEC05FE923E119DA578372C4 -MD = 6BA3903D7FB2A3D5A0DFF64BC6200845FEBB1AC791B05C5450AEBE76A79D992A725B7452EEF98155CBD9D5F1B3987256 - -Len = 1800 -Msg = 8CFF1F67FE53C098896D9136389BD8881816CCAB34862BB67A656E3D98896F3CE6FFD4DA73975809FCDF9666760D6E561C55238B205D8049C1CEDEEF374D1735DAA533147BFA960B2CCE4A4F254176BB4D1BD1E89654432B8DBE1A135C42115B394B024856A2A83DC85D6782BE4B444239567CCEC4B184D4548EAE3FF6A192F343292BA2E32A0F267F31CC26719EB85245D415FB897AC2DA433EE91A99424C9D7F1766A44171D1651001C38FC79294ACCC68CEB5665D36218454D3BA169AE058A831338C17743603F81EE173BFC0927464F9BD728DEE94C6AEAB7AAE6EE3A627E8 -MD = 0467C2B9F02AF8CEAF4F8FE88D1DE3EE03D78EC26EDEE0E34B6E7EE49AC357C35A9AE352FF4932D75E0617B8B0C61C80 - -Len = 1801 -Msg = 93E0C330DCB438B4B2B735F7AA4753EEE8123FCBEB25223F98A17F97BAA4221C22F3538F35AF743F5A17660E8E1FEAF0E6A6D17265FD591F44C194C2454BEAE9510014FA5D96EA632A889E059DB6932D327E4BE6A616186612C5724468FD0AD4F2CD1DCFE4E8A2E512815B79D89C2E9878DCF4B5DDD41678B6FB612BE2AC2075DFB3A7B1F9A00A540BE55D6B787FA38E02E084B06967AC8A2351790E88D8632663DD28B6E4CE6BF7A6638630362203974BE186671E76B17C4372399415A2D02F50E82FF4C65C3EA3434207C61035539779E6A91677D29AFE1F87C4C0339DAB2D1880 -MD = 26FF1F2AFC92F38C4BD76EF71B179B6B06BA0D2BBE346CC25C53CFB885AF43EB3DF68B35BD2169704EC27B36AF48A02C - -Len = 1802 -Msg = 0A12DA8B95783EFC78ACF14A765CBB96FD14E7FECAA12F3634AB8FBAA1735B938474E0E5BEF5B85D02CA9AD30F8285BF6D86A5CD8E8E31044A3C93E0831E29BF76BD2122621B3015F37A0C5CCE07F5FD6B16AE6670CD1135BB9BC1ED8DE5FFD8A8E25EFAA3DA1C7CDF7CF4E00713251A7493EB3B8CA59940B4B7831BA83C3C3DAC506086D0892132636F10ADE3EAF2BDC1C81FDBBA5358CA69F5298ADDCF82D4B7657549B059B5C028385A0C6596EFD8746C83032B4F4C57F84802EE8DE0B2E5CADDBA774494F78F9F194DE1097C83E2D05277CA4B5A55BD19EDB6D9CE5A6C5044C0 -MD = FAE1A2055B8CBF1E037E5CCC769428C766269A41FC19D9BC05230009E0D8B168720CC78B6208E80887C5A044B2E28BCF - -Len = 1803 -Msg = C085E32E69584DAF2D6EF0103E7281FE361715A51E68183D4271C7D8D84431758F42F74FC551CC5AF6907A896D107DB614FEC36C809173B3062004F9DC6E45142AEEB962D8BCB7CBC7E710A61AF23F7CC18393F2281C8CBBB5927BD09E52F6CCBCE7CBC2AA28104294978963376DD564418CB771B78A386DCBAFFBE05C06C814A156DF02DA4F252C00C8ABB25278F87E2704563136EC829C5F92C516A236C68CCB2C4F0611454FE04E1C9A4E85C6C8C52EDE60BD578C999643DB5D929F4102E84667CCC8EEB7B8C2FF2B8F4764D31E74BF2BA36D19D0EDF438E2C814B98C5D05F7E0 -MD = EC9CC18D23F30B4625FCC19F1ACA5E63304F31766FFC0469AEAEFA73D1B33412E33A1E40DC9FEEC4180581F915B55823 - -Len = 1804 -Msg = 5EE5BE16B15FA56AD14EE25205AE1879BBB0E025963270ABC462BD7CEC673390DA462D2737ABB4D926D7A15E3C5AAC86F076E6D7F7F10C86DD2E62CC856F814394403EC7D85C5326CA8902161C005CF1280F71974F2731F42C4F03B779DAF07610C4A34F1C4EB4044B77546D991EDEA239E6A6289E2B35E53B4F59A96D18FB55A2E2299D6CE0182CA4283444819E36EED59E9FC3AD186F14D66F60ADFB1596AD7AB29C65A350FFB00C58373ADE7787428468567BCB5B3CBFE781E2A69C365FDD5FFAEA902368BF2D6CC53A1A3401BA729E94F778B031BBECDD49DD8391634BDE4B50 -MD = D974DF52D824815C9D837FFD868BFB74509B9A7A78AB22119A82AD9EE5DC893E8E546065B8343B38F555027D5B2D0BF8 - -Len = 1805 -Msg = B173953CAF23954D0A0C59DDE1C74651A4ACB3D38148F5ACA07C2891A8086C8D5BC8B4B34C7F8BA4F63F313FDFE3C40F74EBE48BE5379B8441BE37F54A810F0809E5CB8742DA8A3BEFA52F749DD6C3296B777E4CC1D6B22810E21B72B7A00E169519627C6BDA77DC9559B87E64282C0045EA13F1FE62E53FB0BAFDAFB0B7C1A2B8105318CDC10A559C32206EA85A79CFDA54F363975B65F91DC2D42F0F02922768E9ECE2789F1FF71486F9B5D7F56104FCF5DEE191D666171222BF47F73E69904168EE565A634B970CE57032B6394BEF82E78A807805F4C39C5D64A29B7135584368 -MD = 93F6BA894A3BA04F993ACC4D7E21ED580A47C1791E652B45FC0A849C4A48936FE15BE841625BDC472612176D0800F471 - -Len = 1806 -Msg = 30D48650BBDA8EC79A0DD891FD707160A3C5E16CBE1207330F170A5850E8364C6019325A8FF4AFC809F144C118D7012D315B3F4622268FB5F6F350BB5D0048924FBB30A5390CC5DE60F264E183B90F2D38A1E499DD8CD4B06C3C57A70A612604D2F4E937ACB4E23F02C7FCFB73CC87684ED61C70A98A2B3BBE2181FA14879A36EC965229D73DC1E2743BDD285B12A75B924130D630CC2F02D917209AF4775E01B5446FF76D12A2108621D900D7495CBDCFAA64A781A3C33A6BD61653D61BD0DEE7781796404492099CF850B74F5FE86E0C385D5C314B5FD209E8FF990FD76BDE8F18 -MD = E1EE8F70D7447E5BC77B43EFBFAEDD83C0809C941344F17CAAEACBB770B64F6F301C426E74D9545A4846B530CB68811F - -Len = 1807 -Msg = 37FF7F5AC736908E07CE01969410B314A031372CB1D184FD683C2FC43A30678B2C3DDD92F040A89D5E3F1D5247DD9FAA9EFB501CFF4F40014EF6508DFC37D410AA679EA3D3D0545189408167C1CB6826F97615BC27FCBAC7DBE5547A721FB92181F037B4CBC63D4609D2001727BA88C7ED78F3B3A50E0EC4505DA4D9BBF6D3C5F854D90128C2106E8F1B4D81C33F67FF804B080EA79285904F4AA71B78F71A8B01E6E728DD55C294E86A0E1FEF0915C1AEA1523DF5B15AEC8874AEDF60CD8F2B26B746A3CAF4A9E60CED23861DD5444128187ACAD282F076C1AE01EC7883AD417BC4 -MD = 3511C2C8BC92AA2546C50F9B35DC5DB9A52AA11A524B729F34FD3B8169B56BD7CBBB8D300A79682387D6867FEDC163DA - -Len = 1808 -Msg = EACD07971CFF9B9939903F8C1D8CBB5D4DB1B548A85D04E037514A583604E787F32992BF2111B97AC5E8A938233552731321522AB5E8583561260B7D13EBEEF785B23A41FD8576A6DA764A8ED6D822D4957A545D5244756C18AA80E1AAD4D1F9C20D259DEE1711E2CC8FD013169FB7CC4CE38B362F8E0936AE9198B7E838DCEA4F7A5B9429BB3F6BBCF2DC92565E3676C1C5E6EB3DD2A0F86AA23EDD3D0891F197447692794B3DFA269611AD97F72B795602B4FDB198F3FD3EB41B415064256E345E8D8C51C555DC8A21904A9B0F1AD0EFFAB7786AAC2DA3B196507E9F33CA356427 -MD = 87F9ECB906C9D8AAFA8DC62AF858C99609A8E9590BA5BC91A89205DE44F06AE7976A9BE918AAFC9134DE9029117152A1 - -Len = 1809 -Msg = C3166574DCF055139638158B619D5E8A424330DE6518B1B452E359EB4AA5DC5EB051FF8A778305871482BF5AF417A5B9540B9DBDBF5B67FAFABE2B3BEAC0479E236ED078A5D514BE7DFA179667451609EC25C6F89A629A2C55258164ECB8374E91E75649D3713BA757CA92C7E744D4FF66B653679F77CFB3A007467E802701DA3D2DCBAB7E3CD9132061A79F50BBA74359EEF864ACEC727A11114687C35C5605B6B8587B9A57C2C0AF5FC9BB8547A0F5E3327174048576B0D970DF5CD54CEB67569361A1F81329AF65FA370AAFDC05453FCEBC9003FF8AFD9527D4D7EE619E35D2B780 -MD = 47B2A2BBD118F6810F14509D6078F882AB3F6F511FD7FC624A02D86BCFD8EFB64F732ABD2BF909F9A296D1B5678A863E - -Len = 1810 -Msg = 56CF4692BCFA741A977A5B7637842054E6DE09EB578CFF84F6E5F5A8CDF06F85E535B35C6E27BEF83228133B58981752B855CB789A8CF41ED956C3C8CED7AE8BA913F41E6A930ED8801C27FD28141EDF70D76AA99DF34E0A2B585A22CC66A60679640BA012668D5B0F1F6D14E160C6490F3B609CC1D34E7A819AA5A65DAE440C97CB68B6CC803D4FDD298C0927B42DE9F3BAE2DA2C9A455E1BFD8D6A004D594318557EB28C0659C1BE67F539C79F0E915834739B3C8EE6B1F4F2B3E7E708EFA4F952210701CA055425EC7726A585233145CB881187F2A3517D0C15CC788E49B13870C0 -MD = CC8A50A0C275CF613DA3100C0308A7D9D70019926C5D4D11F13FA4CFD558F528825FF15D37F040D50F6A799523D4C0EF - -Len = 1811 -Msg = 26276D9B2F77FA3C271F2751245817DBCF869BB0C43C5E64C10800A438C8B37463DA85AB4F64C267BD4E29CD36D53B27D41FD3049FB430C7BB5A975675424D277BECF1872F85A08FC6E86ECD21140876B233F5D29325B578662333DCB18B16394C5183FFA25FEB71FA74709EA089B7D70D6C9495D347288D69DE56CCBF1936F2E96F34B1895E275CA531081EB5719B8B58154A09A2F8ED0C8CED5C76BA3CFD8ECD799447706E8CF3B10F8FFB0AE3A653A6273478079815FF9DAAF2D14F0024AD43DB447B41B28C35C08B7A2405C82581000F3C317DEB6412159CFD4BDF201D0F1A13A0 -MD = A1A3FA2FE02B4609047F01A042431AD583A8BBAE80500DD6C08D84357CF304F422C5F35EEE07EFEF7E310560A795EFB6 - -Len = 1812 -Msg = B85BE89EB4D326C87509C30ACC237B17A04D9AB91C1F29949C19F300B7385A5C248AC36D3098EC7254CAF61ED0A9F0F9A6E05DF510A88D38E9BE6981746F43589AAEAEA8FA5311F57942597BD048222EF1F490D818D162092796863ADEE21E25521ACEFA7E757E02B42F4A2134E1D69929D5BEA7ED5C33798F6DB7C479B6D11D085C00A0B00F650ADF38B56FC8895739B5F7E5F475659F08F35244189622B0D9634F390FA84C5EF41162C6E330C04137F1F4EF16BBF76AAF1B99E5E3823242CFF278E8140F350E04F71571C7E94647A8446DDD6AB32FDD16D25ACCB7323FFE7D5857E0 -MD = 1B83F2297F24569AB7FF71428E4913637619FF958785820E61F320B4AE617FE054C9127280391D77FA5083711376F282 - -Len = 1813 -Msg = FBE6F14FF1D32FAFE0BFD62E3B16724B8193F83BD3A4F8ADFD89A3FBFF74D2BC5D2933A671C1B1ACD08E1EEC94C4824F6C591259E6A7418F39B6AE225C78B0DB5B95249DDFEAE8D61B3B8D97795CCAF47A19BBC4AAB6BD563CB82854D0E0BF63A60BE398546DB66893F1DF6751F3089EA3820541001878819A7522050A6F2C9C3C75474F5FFDA0CD119CF01CA322616178B3ADEDB432D8EFFAFF881E3FB08C5FF0149CCB1573B496EFDC20B38646740A0901875A7643857CBD49CF60935608ED6E1F72CA61FE6E48CA17BB060E34DDCCA119C7F257C2F66411DC3D679558F884706F28 -MD = DE5B758393BCE2E9056A9D91B7B666982B4BC514FC27E6807697262D0DB0E1E3ADB8FEDBAEA245C30A767B4845DC408D - -Len = 1814 -Msg = 383D6998DF151E192BDB63C6E79DF5BAA9D7D7A55D895377CD6A0C2BA9A4325F9279AD1777E4A63BC48BCD651750FC2391BA52C35B8C3F83413608277888863668A8E3915286D6724B394C872F672C39CBBB37B9F9117DF638A828B87D97D303580A7537EC381B31F5DDE578B0D577F4BFED8D222A4FA26FFF77785A0F0C44B21939A768BD1140E642256C9A0226A355F06BA02662704EA757E6FB9DAA9338B865A0325A158A4C17FC7D9C0028745BFF71B244CD8AB1DFA55D9F979450834E2E98E95961786253B07BACEDC6E1249FD0125445607091F5CDBEEFBBBC1776D43BD7DA7C -MD = C342B54C94CA3DEB44BD7A35B2A5349D7BC7C37BED88C8A8769935C8DC21443F86BEC7DDABB11C26097FA44FF0D159FD - -Len = 1815 -Msg = CCFA0CB8A230E9E9FF0C09FAD375CFAC5E815A4CE1EF6FB81B6E37BB199559C09DACDFA913DE0FCDD0B3628C09A9F488C846AF0D43DB7A4D2AA79445C7E6A6FA7143B0B62299C8BE6F04F9E34E8DD30C63E782B3D27D2EE4ED1CB75468A7BA4F66B061C3DF16587E208A6F3A2F260983941271C3CA7953EB4B7F0E8E4C8BE1827C652B1DBC48CEEA4FB39F0B0FD6BFDE38E273B75E6DF8509E5093A6C9E1DF9DB370C6E6F57970D718F8B934AD02D0E27C31282D1C90E9AFBBFCE8053A862587A3092FA400F6CC70C8D2C47678B40A4BCA21A1E881895717FE6A2962A332A89B7BF2FE -MD = 4B374C189BE17C3E5E257CFBC57057488240D41F05D7FF92978471F76F8856EBA32FCFFCC884980E74BA8CB8AC499608 - -Len = 1816 -Msg = 23AC4E9A42C6EF45C3336CE6DFC2FF7DE8884CD23DC912FEF0F7756C09D335C189F3AD3A23697ABDA851A81881A0C8CCAFC980AB2C702564C2BE15FE4C4B9F10DFB2248D0D0CB2E2887FD4598A1D4ACDA897944A2FFC580FF92719C95CF2AA42DC584674CB5A9BC5765B9D6DDF5789791D15F8DD925AA12BFFAFBCE60827B490BB7DF3DDA6F2A143C8BF96ABC903D83D59A791E2D62814A89B8080A28060568CF24A80AE61179FE84E0FFAD00388178CB6A617D37EFD54CC01970A4A41D1A8D3DDCE46EDBBA4AB7C90AD565398D376F431189CE8C1C33E132FEAE6A8CD17A61C630012 -MD = 510CB484B6D4B47A590F6211C7F33592246A2E05A1C69258B6CF9A24C1A3AFC2527841AE3FCD552E5103DD24743AC6B3 - -Len = 1817 -Msg = A77640D2D35F23FEF37D6F971F5AF60A63763E74ECABF3AB5393AB48793C0B8B25433B4ABF21CE1C5F22A8D2386FE9D7AB860E6331938283D2833A6D0390D29BBEEFB32C2805EDAFAB62F01B38899404A386DBA844B93EC6D70DDB3BB2543B41E3C32861769A27D020EACE26EAAB0AFE700D1771E77E71105812079E77B7454A9D9D3F449CBC4A68A0DB6E961932371B39318CADCD025B6F477B7CA85AA86FF6465669EB79647C850EB856B57E5B16AD90E5EC8C710B4C9F45BF02331A72968D86DD938091C4475CF88D31CCB41389CFEAFF34A7809B86D140B11FAC7DE185A40F88C180 -MD = D1FE14AB0CF5ECE1F1AC33E3460C7B6FB958739F7F142CC45E1ECB0BBABA16458E2395EE3AE4BA0A3A98E29F73DFC8D3 - -Len = 1818 -Msg = 53EC7B6F97B359A2263D6040F3260CA95752B7D291A962C47BB982B6774CE13ADAD766E030ED85C982F166B0AACF9BBD0F51BC0AC322FC6F65E46D591BF86CD7F152975EB03CA48F0075F0D06F1EC205B42BC0A6D25B111BC475515CB91F4D988B1FE94DD1D5721B8CEB73DE17978DA68768843D44D6B02032E9D51F1DF2CEA5FC1DFCDD0830EBFA03A145E0A794E7EAD3D2B322FDC1DD6C6F135CCA1E73DBDD42598BC0C78299C6EAE2DCD675538F96CA9643F70B094165786B98B96339DB327532B84D789CAEC650973BF105A35465B8BA69B44DC991EB66C2C29139537066FE846380 -MD = 010880F39BE88EBC245289C6CF78D332BD5CE5C5466C7AA08ADB3E63D3E37EEF5329A13CD36E5C14E1F95B2ACBE179C2 - -Len = 1819 -Msg = 9D4DF0D98116F5F8BDFBBF3FD3AE80B980EC6BB9AA27D05CCB8EBAB8D7E5792C62E5F2587703F74F51F9C94AFE7984E756A5910397827E0F3A86076E2794DA28499F301F251854A0FD444D3BF201BBB50C4761E61FFA99CD21F43DE1F6E059BDCFB7D0E216257B55EED61BF5172542D51F9AD264DCD1A89D473CA615BD6528FA5BF330E5EFF67B5C995741BBE1B3721B832003C17488FEF20FAAA29B57E27DB7B8C27792CC0A9D8BECBC0660F52EF67EE6BA3369B1B1681B84747CAA4BD730A6A1B246FBE0C14140E0A3406D55258B8F1C851B181112F21183F7450F93215790CF6BB160 -MD = DC5DBA8EAE819CBFBDE30587DC9C8D6F60F4319365BCB304A7DBB2FD955CAB388D85DDAD3F141DC9CE9185BF6EFCD1E1 - -Len = 1820 -Msg = F14B19040E8437EEBCCD46724A7A2461EDCBCE33184B017311FB3D5871A8D6A9FBA5B93100F28060ADE0A6D4B7CD5EA7C39E218174F1F8E237BB5D43B51F12176000EDA4D70A493B957657EEA9F742DBED3486CEF3901902BC4EF4A6BCE18A6EA2F27D7EB51D32E33E2CD928C5B1C31A5C1FCEE30BE01AC70CFAE540DE372CC176A1FAA63E354860971B595D2280387DE39FBB12E6399448121FD265FF47B5B95D84BBF871EE23080912A2C841EE86BF238D2533931BE9ED8C3B8B194D81A9C358DEF0BA28E01E3008C857DECCF0D1630789782D13A414849A292AFAEC50872A9B2767C0 -MD = 90E7174A22E49AB259A1C4A106BF6DD39534C4DFC7361D8B26C9E94263173A33554EE1F96D53E3B5B8B8901EC0A1E730 - -Len = 1821 -Msg = CA663A31D8D4362E485F1359CCBD0B021EC94269F501F50FA6C4FC6B9AEA3BF94BF8AF5EF88CD81355002BC33D1938B4B3F3ABEBF6A4E0F47E63D6F41780C9A9028D6A99FC1194097A8DA3DCF8CFBE40A11B1887C88822B69815FE28E2F90D4FC09229D0015F0587656BFED67CE889F375045883D86B0341A76E2E027CFC621A67A8CAE74209FD5BBF12212902F36A9101E02AF83B82A28FA99AEBC367CD46F2B648AA34F497F5421770D62CA47C0F6127CF3C82E77CFA398DA87DF2AA9C99516745ACD0041D45C426BE97EE0757911931FD9E7E58E26EFAF438B812FF2E52E6D17F3210 -MD = DAB4710A1BD03E2BE1A1EEE00773DC5E3B13F0BCB9BD0A537561BA7F7E0BD51B4BDDB790683CBD13806CB67685E388E2 - -Len = 1822 -Msg = 123F3665D10C6BE2668F87C7BA72F688E549B1A41D097F75496DE8AAAFECECF890D8EF3F4D130B0F4A9E0BF46B29AF25E7F0592F7EC179CE94151800E701AEAE9DE620D625D03B12EA8ECFCB37969493708BB85E536F5E16D37F0CD06EF861945492A828F345528407F457C02B3D60D3BCB4F49AEABDEA5392FC5CC94A97E7A7B41B1893EA99BB80D22D1346279717647ECF6AE2311561E834E5D112F3540CC880E9AA0F582C64667E8CB4AD6D5C04BE1557F6A0A56E2A371456499B8D84717E0510C11AB67CDB756783775F6B9EC11F5925981BB5D4DB7E35131679E55478DE329D3A68 -MD = 12CEF1C4485313B4065A742EFC11DC05A8FA31E64430784133F33134C9EA17DB866F36C9160F5A86954E800194644C87 - -Len = 1823 -Msg = 402643679D796742D356236A01DAA1AAADA71F66D90B79C1CC220FB33312650A938A948980B6D2B5DDEA9122547BCEFBF6D165E29C8656A5A3FE55FCE33CC96AD45B98CC34D6F81B54CA7205182D623F7A86E83043C2F4B58A8D129D713D5F41A5465C9B695B2100A6369D57C34B33E2578C313EDE53ADE7C2DE3A75095D1DE9BA629E2E3B90062908E691CD94B5D240E65837CE476E137ECE7B7818579AF7FC4B1E10513BEB176A1BD253EB80C22BA8C60C1A1C5EC316EBEA8828202024A543D289DFAFC4DBF1667416D4CA5AB8D6E42D0C1E9C9B2B40751D20ED4A4FF7E2F90784EC60 -MD = AD15CBE8C859BD43F75A9D10093CDDBA31F18CF44DA25CC97321B8E3DC698BCA13D227D5C81E95CE109C26C29F8FD906 - -Len = 1824 -Msg = 0172DF732282C9D488669C358E3492260CBE91C95CFBC1E3FEA6C4B0EC129B45F242ACE09F152FC6234E1BEE8AAB8CD56E8B486E1DCBA9C05407C2F95DA8D8F1C0AF78EE2ED82A3A79EC0CB0709396EE62AADB84F8A4EE8A7CCCA3C1EE84E302A09EA802204AFECF04097E67D0F8E8A9D2651126C0A598A37081E42D168B0AE8A71951C524259E4E2054E535B779679BDADE566FE55700858618E626B4A0FAF895BCCE9011504A49E05FD56127EAE3D1F8917AFB548ECADABDA1020111FEC9314C413498A360B08640549A22CB23C731ACE743252A8227A0D2689D4C6001606678DFB921 -MD = 03F3BB45FD70966AC5EFD9598C480ED677C86C7CF00B10261AE6790C5279A5E47386F3D31726D9CB619B92A79CCAE25C - -Len = 1825 -Msg = 26BD6C97E9E30DB3DB590A76835E02AA4BB89990A51C76F4F91B7A0B2AB6FE1C02AAA8863B4B3674F9DEA77050C6CB545AC5EAB25D1AAFC430528CCF416F1FA1A8EF34A3797E005877D37AAD7A0D849EB4A6CF080E0DF10EB2D33CAD7F5653CE49177DE297119961A3C6A9AF7557CB33BAC84441DB417B5342C2F92E8DFD1BCC93D2653BAB8870D1EDC19033E9CBFACFD107FAF39156F1B54B41F703B3168F018A81E2E1F4E99B75BC2C1E769E283F2FBA11DC253C6630375EF425D4BEEB51F572C060767C85BBE9588B296056008F095E1EA46F875CBE22C984B85B309930BEA70890E680 -MD = D9023A8A05827400B61D261F3EB6109D1E2ACC4246F029BD49C1140E3C79B19C2AF548B85F5AB33BE1BAD0A913627336 - -Len = 1826 -Msg = 5C834FEB24D7F670BEEB8B67568DC79253100E1BD7EF2C828D6CFC22039BF49F845C25546EDB592C398CA3F81CAD9D2750573822A72D60F23234B010C5D540E0A144CC05E85AD2B78EFFB7E01A538E8CD9F9E331DB6B88664D95846C32F8022AA774793DE2C28431B798B6601B10414F1BD4F5BF2E8D8D8A1468E7258EF6E2989E76814605CA6D26C2B43E3CE73674421EB27A4401324FD7B5C64C70826F67DBA8262D53FF8D6E7EF03DF2C2CFFF2D567A31603F839BC5375476383C051912885B39D652B3306CBEC139ECBDEAA32C0F3A5D628FA121D29F3D24EDBBAF501AEB0AC6A1DC40 -MD = 6B76DBDDFE58A5B68C85D4D6C55EEF614C8729FDFC54F94833C5BED0727AFE3C38919F69B62583E377EF024A1824E58A - -Len = 1827 -Msg = 89DD51714894F40D6736792CE595850AB69C8031ACC48B986FF0556DDBFB26EC1A8D28087023042AF29DAD8D026FF0A6A1A281EDCD5CBF708A9A8487F706897F9EC68282C01046145B8ECE4B47D062EB69E9DF4EF9B45F9A557E035F6332D987693D4387CC4B665476BF058E9B33CD20503E1FEA00B8A302338E5EB2676A3B1B4A4A25E4168EBECE4CD5ED2B84B00656795D2089FA8F92EBA0AF2A5C705091F781D49B24577197A3025A52CC7B6D01AC1A3B28E60CE8FDD9940D46624FC8A7AE159E54124490FFAAC2B5E6D8F2F0088FA17ECA432E0F701D87A444D289403B974F68F780C0 -MD = 1235149F04F3B80DACBB25D7DEE37345D21C706FEDA1CC1C81C412A95B07ECB294C84C361A7644F5960EA7022EE10A3D - -Len = 1828 -Msg = CDDD2E9A96131C7E3A1AECFA200B414908370D1406E2240F257228028F556DF1043E10DF7900063D19B239DE71926512FCA45FA43FDC2ED73C1D4B96C1D305C70ABC09296BC6B80079FB84A6E544ED27DE2BBF1B2799360264858C661F331CB5B01B355BE13AE25F0BC87178AFC650621235DA7AF715D8E4D8DBACF693CA0F8C59105E9B5F457B600BD8452F42571FE3CD658F9F3C55B652A627983A5A150BD8259316D39FB1EF768DF2C3316C249B776A912035F7BBCA1D77C1920BA72EEFCB80933359E0D785C5CBA4B40CAB791B08CDC58FCDDFD30623DC3D9B6D53C7FBAF2054C977D0 -MD = 6C8D7A79C656333E40A4D2EA056EFEF4FE024E3F0EBF56B29D4CD9FD7B3DEF835DBB03DE5E5732C02B01EE00D1F58FA8 - -Len = 1829 -Msg = 7598D75D07175436BA21F3CFC27DDA119096C793740DCAF11978B785150CEFE010CDBA27C4AFA5798F58D689E639D2B8CEECAE84EDE6599C00FCE4541A3E0F5B2B72C65EF0C576BC479325F761D8713161CCD4EA27302EA53CC4113EAFD94ADCE60CB8C4E3546538578EB28F2116B32E92961D5CD08012CB890B5EE0BD4D7DBD667B5D988E8566AFF6675F57433D40E6547D7280BDE4C5E44A4FF442C6C9AE8AA37D197B2416A6BED8422690A6D2091442E5E90F5E3EC5A7D7E89E4581189293C6CFCE1ECD667F792521752D0D785E7A767B55252F02E8A9A4342E084943A3FE1EE9366310 -MD = 1DD38144FE666870F506CC7B7D93766AE7771138953FD3B6F4987D05B46894EAC4C83D193E52AC32253E63C9151BE6BC - -Len = 1830 -Msg = 5663593146BD2856F9206D81F0F64E10905F69BF1DEE07B1EA4547E1644402FC338C5C92697859653A7F09456EA10A846A5B0940B547828C666521BA4339C93F6A1AD58A44E32F34B5C7E904D6778D1F529A0C5905E9D0E4385B3F08D096EDF0DFEA1EECCBB67BF8B935A8B4E182C36DC2D69F6090F1FB6D18E6883C9772452A4EA5130EB277B84782E190CF03FD4E7D88B050AD2AB22C9D31B34D6A6A202BBBFDA8F0B61C7B665D920654FDF79655CA37490A6442A69F8BB33EC128FBDF992A95FAB380E3CB8E6EEC89D41950F9F645FACA86489F5D24D2CE86E4D554685E62A7567D7A58 -MD = E25D8C358599A30C843971084E455E5C7E9E2AE07E9DEA89336E4D75AFA8F6E1DF1C2B0E707D1E2267B5DF3C70583E25 - -Len = 1831 -Msg = B38CE3DD3F6A1C6ADABE07481F8BC37378BFBFDE6562D5CAE1F65EC787A70FA381033C163F944FDA956DD2DE1CE94AF1B1726691B61CFB32116F2D5428BF128F3B673444D73CA3DFCC323DAE946C036A15BC1BC1799C42EB970DE6235B336B5F10AA568547E11D93E873DF1F318381327BF0993FF9302952EB86C258C461DA3DD7C649390BB0703A2EFD82F6DEC8B08C541C925EF75ACEE45BB11A4ADCB321B0463119A409CE65CB9EAE75AE8D5BFCAD3EA54BD5A960A522E740620D8A2B07E71BFA14B0003A50AE4DC73C50DA7C6F2C438AFC5E5B51E3608EEEC16B443A439D9C8FA2DB98 -MD = 9210A16E221765983FFC5C0F58DE2CD0F82B65A2D29C1AA38CB89CC161AEBDCDFACCA6B5CDF75238B82761EDC5B3A474 - -Len = 1832 -Msg = 3875B9240CF3E0A8B59C658540F26A701CF188496E2C2174788B126FD29402D6A75453BA0635284D08835F40051A2A9683DC92AFB9383719191231170379BA6F4ADC816FECBB0F9C446B785BF520796841E58878B73C58D3EBB097CE4761FDEABE15DE2F319DFBAF1742CDEB389559C788131A6793E193856661376C81CE9568DA19AA6925B47FFD77A43C7A0E758C37D69254909FF0FBD415EF8EB937BCD49F91468B49974C07DC819ABD67395DB0E05874FF83DDDAB895344ABD0E7111B2DF9E58D76D85AD98106B36295826BE04D435615595605E4B4BB824B33C4AFEB5E7BB0D19F909 -MD = 68A47C7D124E8AEA5CFEEF7A9D8CA7AA8DF6EEE6652DE3A385231F29BC4B983AEC8AF2A61329B64BB59A45B77A38E4DF - -Len = 1833 -Msg = 7AAF064B8FA13BB2955744B2E18F0AD1E799850D68236B45FB62A3AA11717936FE42E5722E30397A7474D3C551A290979DDA5127E51A27B7EADC7D7A2EB563B6882DE50D3391FB17D96B74AAA1A5EFA27B1B98FEEDA557385C0CFC69EC680D0EDA5D4104658BC9835B714968208091D1DE0FE4082DB62F6C10CA62757948A83BB507B0159168A39349EEF2AEDEFC85755FDC402C6B44AD1655D8A9AA4D6EC1BF026508B41DF0527333C96ECB91C2C626A23C18C9C61CC32320009B895F6F2C363197119F41EA858B23A377A548802A6147E852B5C8AA008711AA6CB78F1C6F2EC8BA270CAE00 -MD = 36B00D062F260BAD0310C15B9FBAD5FBB974809334CE057E454837EC18AADC59E74CF5DB80DF584A0F82D82750C394F7 - -Len = 1834 -Msg = ED1CC805A521D45C409965AA7A564CD5DCC0A27891008B296CEA8683BDAD85A9C35E6925AFAC9DCE2A7E33F47C5E6BF9D8EBC7ACF035BE05F38330DBA1770C58087412ECA4FC41FD0004BED47C31521F17DD592E5638272E3ADDFA237D3B497518502DD3130EFC9C9D77158228AA671B4105E07F8D6002043BC99E956F15DF49A9781C8209F68810698A6DD22DE1D5095283B0A97015F73E4707289D9C1236789E3D9E9EF6BF3B1FA5994AE21A51BB10E8DB3CA5879A7EFFD3E9FC01C81CEF0BBF332F44892E2A509E02EFA417B39B8046163CA49E4D310522AED1874184DEC4F2AFD9AEBC80 -MD = 1AEFE8787E5BE3CE865C799A9952DFF4EEA63B4298AFF0B5564F292798B7F739CDD6693CFD902D2EA60B56A652C3D9CC - -Len = 1835 -Msg = CF68D10756BD67D4BB27D278DBD54353FD1CFD416AF8957B66982247AAFC7F95AF90D0746150994EE72CBEC0F1AB55D3295D4EB59CAA48A49A6221ED63C17A436AF243EDAA4CFC0CFC8AEDB3395514DA8F92FD4696C0251D69B622509C7DF56740C9C3B938E044FA5FC0182A3EA9CCCD3843E5ECC75227ECF305F5063338AB7B73872C288DA65E7F04D7FCBC5BC14FEEF432ED780C55D2DFCABD65E6D95C8ACA350886C6514AA33574645B8ADA868FD7DF75F81A3AC75FDE093BEE15D8C9CD01AFD8731C1FB87F12E845FEA2FCFD5AD961D46C6A7BD033380A92D158F727DE24C8D6D7A4A140 -MD = 09A136D4A07DF05B391D68FF46AA8C5CF7C764E92B65E4E5AC2B5B03400694D42889497457A6BE47EAD510DA4CE98EB8 - -Len = 1836 -Msg = 06C383F828F6D58D1F99567DC5AAB7BBB7F8B9F0DC941CEB0938C0C1367DDEA5F03CEF432C4BACFF10E314E3B66EC473EA6D238D86BFB2DC83FB744E1B63618FC0B72380942AFD0919A3CE11F9F5F781402A14A00FAFD0C79CC516E74058963411E5D3C59B8D8C87AD916737F4C216B9B28F39FEDFECAA3657C1B284CA7AC897B85CF6FE72DF44E0629EA2C61D8E4C0FC1460002D7F1131339DEDD78CB8235767B64E7417B06E13577D02A94D9350EF66A5C12553E56B7840D0569D4E5A5928050C9A738F9ADB557671848C58A504F63146B946938935C76C28264F675F462C7D76E95FFC1B0 -MD = 228CF85B0D3354EF3605F92B487FD0E988045520B0F3D03D2C17413F41D0C67A4ECA784816253D9AC8502F97079FD563 - -Len = 1837 -Msg = 27C482CF399044DB05B251DCF9D8A788C0CC214DCF7451EDB9D2423A13BA32B6447D17825AE67ECB70EEA8B182B14FED66D2F1179B4ED66F53C56CE0C679598C09589A4B8FC1C3E42A0091FFFD4B4C464763FFFB1ABFB7DC49337C46C097027CF3BC5B14B34E590E17A2C4059E50971DF2DE66E2E714E5834BE769371DBD56107C30BAAE1438E02AD5F825A4B690D8477311871AAF7C5B4C540C0C3B296F724668862AC9144849BDF18FEAF17DF98246B5BA88C929C940EDC42EE9116F7656F1E2B40385F9B05DAB23243014FB122967B97B8CFDC369478866E57CC8D98949DE41D8835A1148 -MD = AD1FB708D444C4088AA3480566B31AF30A93B4544520B5B7D8845A109039285549A2B2629FE47A411E449E7C3B166BE9 - -Len = 1838 -Msg = 3F06A9590EBDD717DC6150AB4A4EA1904BCE033B78C8D437C013D78B6D147BCFD8557298E44E11A6E1C82986F626092F435278DF0212DAD2AEADC09CB84926C74441ABEA04E3F0095876BB4D6463A9448B775B082B5D7F0B3AF0DAEEB9786A3D404D16C2DE8DB319B34D496B5E03C30608A171FD180E7D32A0F496AD0903997183BCAA62A57FC6450098D480B7A3F8BB7329528A1D4358B2520828BB7C3DA65577406A4C241F39461C6F03D22C054A9E736F4ACBD6916B254C7145CF73347A024B418D8801236EC61C74955345F6BBA944D8C8135B594220C104C95FE85C9BD187505041176C -MD = CF16F5C9DA59270D8D1ACBFCEBAD110206AC86DD683836272790B1C4D6666462CE69B9C883B17392453DE8B64E137860 - -Len = 1839 -Msg = A8A9555BC035CA2CDA773CD7C01159FD6EE4CCF03C3E43C565CE85C88A842B14C765991FBB424F01B53F7157D413F5E7D3CBC0C9B084F6205E9815432C0B83B116E1714FCF9E20C07111C3C202EBE068D4D4B6B163E42D2922B9C36BD32BCC768C10489FCEFAF472D1E160FC7C5726A89F32E0632D15679972EAFCAA4C8AD48DB3C4DBC42FCA6B12B6979CB12C72F22BA5056A12AA99CECB65A3958AB8F66920818D6DB0FF34AA8BE45739BE1FE9C991819DBC896A078DB828641F5736858BDF0ABBB3CB786C49045028F8BE1C836E8E88DE775D93ED42914AF9C7AD38091A41485B155DBAF4 -MD = 8AE02FD8CB083EF45339370804C40340A08948607133195148717A9AB1C29EAB171A83A69233939CFBEA9D97ECC3605B - -Len = 1840 -Msg = 747CC1A59FEFBA94A9C75BA866C30DC5C1CB0C0F8E9361D98484956DD5D1A40F6184AFBE3DAC9F76028D1CAECCFBF69199C6CE2B4C092A3F4D2A56FE5A33A00757F4D7DEE5DFB0524311A97AE0668A47971B95766E2F6DD48C3F57841F91F04A00AD5EA70F2D479A2620DC5CD78EAAB3A3B011719B7E78D19DDF70D9423798AF77517EBC55392FCD01FC600D8D466B9E7A7A85BF33F9CC5419E9BD874DDFD60981150DDAF8D7FEBAA4374F0872A5628D318000311E2F5655365AD4D407C20E5C04DF17A222E7DEEC79C5AB1116D8572F91CD06E1CCC7CED53736FC867FD49ECEBE6BF8082E8A -MD = DD3BBA1B4F8493E0639151D9303835F492606E2DB3AF34FE65156A642794196D00A6C34A3A5FEA66202C3B5A79980A8A - -Len = 1841 -Msg = 133F3DC8F20A325DB666A5F7D9D66468C052553A9F32AD1394A2B8CB1B952872B6920B8E34EEC5A34CD64C019948CA219826CD8A5511D3458EDCCE0537E30594ED4CB6BA4253B793B9416A8634327C743D7BC81E601A09097647B3AE0A215939184AA82856FE0F8A6F03E844BC38208722756AE0AA8FEDC14D91DD46E2D367779BC302D4960E80FD8851AEB8629D6A6D10F5A85161C3CE21E83CDC91100B18B39F9CC5EC6B90B883877FEEA50A5FF5B7E2C66943102187BD71069022D7218367D10237119ADC218B261DB11B3B31C3DFB76D87E5569D397462CE9A888D047BA3924C2E3F955F00 -MD = A3E8AE2BEB2C8600D277AD90CDC2162614927B1A7D87C4CC3F1F2B99ABCEF7762DE0E818239A4E85470E119D3C198B02 - -Len = 1842 -Msg = 7691632F35A0F8EA7E14D97B4F782FB51902A0BA5188E09551E979496011C62AEE48687E1DD9895703205B8EAD514FE531D9C44D64B3DEDAB2BED907FB07EAE2511838B38F1184BDFF60FED005C5A520869030F76E15A7C3F890B5D35803F8FD348DE11ED20BC0EE231DC208DF079AB03B3923D765DD94EE48B0BF604AF1E8567BD31576D7C221C6EFDC8E17A02B914A0D442D81FD1576F840C511D1712D1089BF465E54A358BC1AEE706CCB539EE55BE1E9250A7B32EDC5821BFB41D6B8257BDF98CF5C83CD0266C65073EFA88BABCFFB23F0C50D64B1ADF4E841140BA8D178CC9CA3C6DC1900 -MD = CED09546DC3701163D7F2AF491948451966BDF2E016B273D29FC73E8FD848A6307F29283AC2B897C24091EB3273B8143 - -Len = 1843 -Msg = B1268A9996DE08A4B261958C314BE9FEF0A7234DA9EF1A84C330289FFD3D4C185DA8BE58560450F026DC2F71502F2A0E238BBC6772F51FA12E9059323ECF5DBDFE9DFB273719C63E68B1E799FF107F7DAB82EC9B60705DDB2CA9EAB37FB0E45DE36F58E4D3E6382CA5FFE8D16A57C27E8C34698D27DDBB3A28F6AB805C800CF7B6D7A38939F49DC33D2046EC0CBA8F47D96F8BFC17FF77039E5C6A32BDC9455A3F3D835E3F21B9D2116AC6F6729CA5EAA85EBF5B46EE23D2C55C4C447AE5AD7672E18DBF95E53AC1FF933611F2ECD728019688CFB266AE775445B036B364656286ACF50A12FA60 -MD = 261D9530C79BF21D68B346725E4131F0C0F43BF5E5A54D8365B6AAA8A9793347BEB22AC42FB9778544B3381F40884730 - -Len = 1844 -Msg = F6FA29C1E172DCF3238DE51B812EA3A94CBD505C5E8A7227E6A6A93E26275C9DA60A90A609D8F0DE42995870519B0A159B4042D44935A279976048C8F6636785DA95CB0FE908E7A915756BBD753CFCE8F7F72F2A42CB096D5D217F7C3084D7E45C6E54B333FFD1B35F95B748160FCE480F6E12033F6F368095ACE612766D49BB91871604C0F91EFF86AB0F0F943838823B104471C2F6229FD12C2B48F67CF7CABFA0D7BEEAFAD1D06B691D063D1C23D286F327A66A154AEE0308A44E05C94BCADF2103C2CFADD0EE48E3C793F3BB2CFC163190B573C489EE580D231F1D0ABE1B42DC9D1AE9D100 -MD = FA6CDE5C1347E37473FC23FC943CCEB0A2C86C73D46E76B294898B550765FC342445F755D2C13633DF2BF874AC9F913B - -Len = 1845 -Msg = 927D50017CC3FBC15A5F5430E4F5ED97872FCD5E8DB5295EB2FBE7D3137EF7FC454A499B09F733402AF972E13E4E24B42D5F7037550A80A4080051483B00CA5EC796D4DCA3ACC32509990ED14FF32EE4A38BEBEEC34EB49CA4882041A1FC72EE2207977DA9C0DFD9689EE039F5AA9FDD37BA789DDEE2E94E4B93E896F71699C46BA45C9AD29C6351318292AA3707BA47DC2AA1FFF1C112E18CCB0886D1BCF306A0D7599C810D02A9A1FB181615CDC818E36B219F83791F89C976B3673260579986BFB4FF99FF7089BFAEEB1345B4F49802B6CCEC7F4806DC6C93E77AEC16F6950C88417EC62070 -MD = B04661B7198B7A524F1EE04D053A9837C9E702A7C5F6EC89013F9AF728A7C9937F2A9DFFE62E55FA9956D2D72F923E53 - -Len = 1846 -Msg = 29BF8670CC82FAFD3FD81D1EAEC1B312C4F6F56D444275DCC396BBE88942E4D646920181235EDA860987824BD9D925187CCD864E602241759F17AAE0B3E4132D14808499425B93C5041E2A053BA742C1423CAD030FA29E28B96A52CF1468238E783640637C169F27F02990D1E243A2A6E967E038F1D455A39A47DCF28F7EC7151DA0ED58166AEE613C1C759E0CD99076CCF6B4B7A7775F207187AEB15E288E3DBA49024D56A91EC65812F7A113F0EDF2ED7F50013874A1320A2A86E67EB5B3FCD12AE0B0860ACCEDE9DFA7427914374956DFA2AD4619664F829B2C59038EF54A7AF0B94974C644 -MD = 50150F0B86FEF4521823C509DCAAEC60BE9547D65EC4A2040EA0D4FEDDFED5B400B7921044693AAB0C573245602EEC2C - -Len = 1847 -Msg = 2A4DDEDD34CAAC49ADA033A9695DD6A97722941E4B79F03F55B367EB6DEECF372CAF3D96E28125B4C43EEDCE9F2D22F407F250D5E7CC29FD24E800CFEFCA6DE46147F7BDC3AF25878C6D04BE42B50B47B767FE03779153AE14B88BF95465CADAE27FA15BE654DF88ABD6B4A275A3B51764D64F4D9A8A0DC1DC0320A1592ED2E867ED9F15E2EDF8DFC28110ED52749B5A7B5D4CB307A13E19694F2EFED47EE974568858D6DCA09DC936AAA24D7B8A16969EC54352BC495BD67963DDEDF57D5E7D8131CBA5DCAE5D08C663D35B05605638E6FB091F483817995268DAEC4004A3451711E5C66B3640 -MD = 26C5AD51DD5502FFB74533E941671A15677AB2DFA6D5C41B62867C7D0AE97EA08B4377CFA4DBCACFA63758BC0C0C71ED - -Len = 1848 -Msg = 57AF971FCCAEC97435DC2EC9EF0429BCEDC6B647729EA168858A6E49AC1071E706F4A5A645CA14E8C7746D65511620682C906C8B86EC901F3DDED4167B3F00B06CBFAC6AEE3728051B3E5FF10B4F9ED8BD0B8DA94303C833755B3CA3AEDDF0B54BC8D6632138B5D25BAB03D17B3458A9D782108006F5BB7DE75B5C0BA854B423D8BB801E701E99DC4FEAAD59BC1C7112453B04D33EA3635639FB802C73C2B71D58A56BBD671B18FE34ED2E3DCA38827D63FDB1D4FB3285405004B2B3E26081A8FF08CD6D2B08F8E7B7E90A2AB1ED7A41B1D0128522C2F8BFF56A7FE67969422CE839A9D4608F03 -MD = 50D3B02AC7B907B310C1C0105EB47F6DCF3AF0E473785DAA54D8037A9A3E74A5D1A41D811202F1E3C8A140173D92F60F - -Len = 1849 -Msg = C1783FB7FC7DB5B8EBF9A0357442BB99233369A73B0749F33C50136FCFE2479C2FC94ED87A6AA019EFAA119A2305668E116517BE31A4DF84C44B672918999C198CDFCC0AAEC695182AB1EFEFDDFB8EE2AE8C9FB981BFC69FC403C24ED7C17F564FAFCEA706AC3FC7DB4E3C08E2E488262E47EBDDE6461AFF5FBE876FB1EA5B764996B6B94CEDA388E6CE29724D6C9744A6EDFE1639138598FC5C579EED9A56FC5F68D8732DF2A4EF70FB272338BB096B16C6C12DD4B603DDE5CDD05C9686825F936EA6560D08788D35C6EF6AC44BE032F68029084B915BF007803A3B1F8E8D05C68DB8609C153480 -MD = E1612E006F3517FF6D02C0E968A5BF051DAD5F01C9B962BCAB95E263F03E239FBD9818081533336C74CA8A7BA671C139 - -Len = 1850 -Msg = 5FC6470564242C4BC6997B8D3CE0BE6BBF3C132A052FD3C78C6373B13031E576F6E7FEB36A848410E5E48228B0D6B18E0EB64423138A3425CDD50EBACA32D354442403B6D395CFA93E8B81C57FD074E8CC36698B5CB50932A8430AC24EB986DB1C9CE1F4CF2D71A79B4FBE65D393F0BE516C94EB471C256C6BE81A70E17081B5951F7C3CA5E84CC7270884F0A65A6B2BF8853914078C611BBF5A73FE89274ACA6DDCA94B970DE7CC88FF4911C825ADCBDABBD5CBE9A63644A2C15DF1935F4BA8A2AA5978149D5B8DD4B4D14EEE842DAE8BD5BA044B207C4795F872B4B219843C611A7E466F6BED40 -MD = ECF54A75E3F37A0F414267512EFAC1125380D20C8A8012E3AE4970C5C3B17C639ABDAA6A00DCD3B35CBDCF931B96CF81 - -Len = 1851 -Msg = 0D6CA1C8C4E025937AD2C62FB841FC6AC14DBD6208A418C01FADB43DEE62CE03D70ABF8614F3F773C7ADDA7DED6EC569DB516FA7408F73A628C68AB4ABBCC0DAF9CF1EA313A8EB0D8239F3726D20ACC285B617FB3F04EB20AC6E7F588144498E40E4668D54BC7692F84F7DF2B4C2099AF34F077F2B46829D43DC5037FB3B1B144CE110E7753CE6CEC76CC01D848EF0C169068218DA9AE4EAC53D845CAF91C206B8A46B6F869C6890A09BBEF06DC65F1F63FDF1EC33C5DDC2FEAD36A24ECECD795A7ABDD3BC4051EA2B748391CD7637F1859B7A027906C2D8D922E2F20C99E110BFC67593B58568E0 -MD = 0419E0C9EE00C773F1FAA030D438A4423D2D5A9F13282A0F860504E01F1195A7A4DBBDEC7D1F6FD5BAEC1531BA261FC1 - -Len = 1852 -Msg = 9D68E842C8636C149AF7ABC5AC9FB685B69C872BEDAEC8765608A2A27454E4F13AF557A300DAE256835BBF4EF9256F2C9B5FEF61C51FA573F9DF26F4672AD4F97B25969AB60BA6CC5DF2449456F54F2F1ED8B4A5DD455A38BAAAB1C57C8B870C7C62F07575337B3EBEB78D0671213B22201A1F96BD82413D854C28EA3D043C5EA8AFD23D3217E9EA53B099859D5096985CBE655588F3F2E5B3A4BD6D8A12E8E930AA3EDA60A5EB3FCFC200BFF2A413C8E7D0919CC2B79F343CF792666CF9C3EFF4AB199428974C3EE7B48D48284A486D586E07CFB21FBDDD2C75B9ED90C33120D9469C0ED84A7150 -MD = 0701CE56F702F0ECFEEBF4B4D0EFDAD679A1B1DCA13A8448144CFE11CBCA6FD3756821AC7027E07F7335E0A2C1828700 - -Len = 1853 -Msg = FC9FAA47BE421F49AD0BC84E7EE489268084C00592F45645A2CAFB817C7E33DD82005894FE333089EA8E5FE6DF3743A5A6C5CAFC3A86C3CBB4030BF743FFD944816A71EEF4FE45A357CD81A3E047C7CE8EC3B90E90AFA4BFC4FAA324A97D095A68EA070CCA14779E813733432A046F9393B08E614615A5C7B573A548349670F36F3DD69D3FA9F2228957CF4C81FF8F9A4BFB514B68D35F8E03A710577D6077C48D4B9947B1426BA5386F41D11DF6A560AFC4D5C030AB7C11E65BF2D5A2C7AACCFB05C1BE6CC7C9CE9A301CD4CBB7BA63A2BDC9FB2A71404B832C8FD2C9FA53DA520B4587EB80F610 -MD = 531DC2F8DB5922BDC683C7100657B82C4D4C423F5BE46B86F3188541E3AEAFF0B9FCAB3C9BF338A308DE395803211875 - -Len = 1854 -Msg = 30DFB1FF68E242E5C35344B6D5363F9BC0645FE35111DAB05357B0FD5F2AA4355D56D537D54A17B18DC56DEF90784ECAAF92CD67006C174BE4E232C773841E8ABA05B71D2A950568E2ADF766058744A6564D883DAFD123704DFAE1966E25A036ACB268B7547DE88534A5067411D55BEFDC0C9B98F27DA16977EDB972335D320B8954A0CD6F669AEB6764D271B6D2250F08B2DD17A537C6F6B46E1AA793C261C01056D081D48D939C70E8BD29B8697BDF8ED885D194C5874E329823457D85E0DAEE5589BCE1226B144D69544E790C8EAA77B3E771A5AE7A08E292D321304D5BD531B75E43E892EBBC -MD = EAB61B9567FCAF3A33062097286959F2658F25796C3A789EC2A6EEC7221F497F922F8932601F437305CE8549AA21FEF2 - -Len = 1855 -Msg = 8B8EE065F4F8E1E18C037F99F0657ADC659559676ABE160D0112EC4CDB58DAABFD58BC968CCF2BFCBF8CCF84670912515DBDEFD64ED0D35F7DAB9A21A7CE95EB0D285DD9DEF35C2825AE7C2999A6C099B5640D97979402E374C4B81E92302C24C33BF7FAC1660D04AE731250F6EA3CFF051606A5E0AF66EC669FB031310B278F673DA3B7DB78B521C0E81897D88C8C6EC7DE470C4F93C25350B381F5420CCBE2CCB56910919FFA1750D96738C3F80C2DE309889972616B31976A8E5D76CA26E111F2CCD34949BF3CAF5F682837EC02FF90981660CFFBE403C7619D2C38E764BC794463986B788AD2 -MD = 35F741A1C4540B7AC74D223918CEA32A573E8B24BACAE9D4A4ABFD7756CD2BF5882D47B7922FDA9CF7C7EEE2E32676F0 - -Len = 1856 -Msg = 04E16DEDC1227902BAAF332D3D08923601BDD64F573FAA1BB7201918CFE16B1E10151DAE875DA0C0D63C59C3DD050C4C6A874011B018421AFC4623AB0381831B2DA2A8BA42C96E4F70864AC44E106F94311051E74C77C1291BF5DB9539E69567BF6A11CF6932BBBAD33F8946BF5814C066D851633D1A513510039B349939BFD42B858C21827C8FF05F1D09B1B0765DC78A135B5CA4DFBA0801BCADDFA175623C8B647EACFB4444B85A44F73890607D06D507A4F8393658788669F6EF4DEB58D08C50CA0756D5E2F49D1A7AD73E0F0B3D3B5F090ACF622B1878C59133E4A848E05153592EA81C6FBF -MD = A6BBAE1FF8E00DCE34F640CEE2CDB5BCFE4382761BE36A940E50EEC12B5C2A02B2B6BE18A7C87A36FD2194C4D243EC38 - -Len = 1857 -Msg = 4426F07482D08D23BEFE266B3289AA606B8656403368843EF5275D93A735A1EA48D25293B2FEC242DFB58F7C387F0943B53E3BDF49F922B10A89CAB3D192010ABB2CCFBB758F7258895B3680083B9BE3E7EE79ADD241EB063CB2A63C0BA4278DC9CE078257B9B42AC4C6F7C6F5AF6B3328284F1DA4C04102A456CDECBA73DBE380C8BFD9AFD2F05DB7B558CB318E15C0C4E4FECED736145BF207356009D76F81F33F25459B74E079FCAC54145DFC2213AF55F7EFD34F5567A4F4A3F6D01503619808C7FC361D366643A4D2D04678DAC223832D35C83B759887C060AE300B1F630AC2B9BD442673A680 -MD = 98168AC8ADDE34F9DDA769F89DB4D5FC2AEF216729D8170FF15A6F853A2C4ED5E0BA79FBAB29697D7757ED3A84187837 - -Len = 1858 -Msg = 4743DAD3E151BF5E0B9090C79B76A7E425F65CEAC259F901234BD59BC01172BAFCA5D80C3A80841547CF424E52D53C66C73407B686FF44A72638CAF89A09FDEC13341DDD297795D256C3A3FC58D1925FD1029C55FA76C9AF2F277F42CAAFDE084E708D0C89DE48382D582FCF8343965EDC1552749245A9DD7DD2881FE904968AEC8012AAF2D6C52DA081682BF062D39B7DD137BF1DA53942E24E60388546D60C6E074D96D6330B3FC262D2D1053324861B4E9C482F4C4159FDF0BC739A39192BCA18D5C54F1E9748068D63E0A232C99F3504C3B211EC5C727049371D52515231DAB097C014786DE080 -MD = B88304447AE78222416D7146127956DB7B08027D01039E1CB02816B2C70C81B58BE681ACFCECB6F7EDFBB47D3DFAEFF1 - -Len = 1859 -Msg = 3C892301CE8E40088696DE300C1AF4BC362D52CEF0BDF4BE2CB7782D4538ACE3A69DA72C6D0A04FC416EB1A6F5F24AFFDC4AC3A8BC58574DC18A0FB4117D4B6083876067E18B62D0B0D35F537D7FE57E921F361FF598194B9F12DB83D24BA10D7976BA334EAB98EF5524EC074B0F4D663E8991D568142189A89FFAB0B6D851697366A2B935BEA15780C0929368E07E3DCBB7E421B58486F6850F20A9E1B499B549338EB0D32DF8362552ACC97AA388BB81BD64FBEAD0F89938613403C43149B79CFE391505673EBC19C01169E4A3BC90C33015896C3F9EC083F6C77C914E6C774B42BE8A6948AEA840 -MD = 7B2FC692C505A016A28260B7F207D4454E547313D5DDC37881611913ADDCF07A5F6DCC3AA484E522F5AF42C8CD123F53 - -Len = 1860 -Msg = E6991E70A7A1D85F9E99EAED812879054136F3A048D96156A4A0778E66CD23CBCB13197FF5FD92AE7F316AE045120BC5AC67DD4F887442F4DCCB77048BF2E5D7A1B4A17DA0F8D30A422EAADB498130CB1DB102CC68C43E70CFE883A58659549CF439317FEBB48048450D3C7D04756ED880E8760F48652FE46E41CB197A6938D5CD81D2BDB058F180097662CFF5727A3E7FD351803E97D4A2D54F2CE7F9EB76530F3D9C7B69540221C894F2164D1F98379CA174FC276E5D97B2BCE598976B7B7B658C3655461C9C15E62CEB380A35305A8B5978F44D86B5132F0EF5744AD0DC51F6D7E40BDFBE5F0380 -MD = E2FF6D511F483C9C376DC1FAE41284BEBF4D11CFBEE8A63C5D4B84233621955C26CE69C1BEE89746A867BDD41B0F6E97 - -Len = 1861 -Msg = AF52B30D7CB6ABA2053D0208FDB3924AC2C32B931B14629AF563527E2A4E8F069DE7E3EFD5E769371CC80D7FA106F202F90CB270105FFF33C345AE2E346237C5FCDC8AB91AB8E847660F215DF3E1B570874D9482C221A5F6B445652A4393315CD60A79B24AEAB8F0086DCBD09A0979CE4431A4BF2515C5274670AD8E3F4489B49DD0DF064EB00DDC33BB778014B53BB2E61A3421BD94754FBE5B9A7FBDED04329E65FAAD493F3B4922CD8115C86F116095B46BBDD84B39CD69E484E08D9CA1B5DCDD9EBC126877DD4D6ED4227DCB3320C56F6F1E4017053841859A3BFEAA77ED640259F99A51BEA460 -MD = A71F41702CB757FB58AB1B143C71FD27E090DD2B75D8E9C7D33F3A402EC0620F3EE0322F9896D5A6344024299E7DDE26 - -Len = 1862 -Msg = 42AA49F4A2E8B72F5621122E00B059647A8C6ACD8400BCAA1EC4BF95B5E3A093D32022C6016F42581C9C2C3DF81105B3EE9D53BA623333406B4319FF1FA71F7ED8046A6B2892F601A6AEF902BD7054E67437C23CD00A28ED3275F6163EE2CC714C4B31EADA0451E40E0A66DFF244595A10E200582D19D1B78DC70B2895DAFC390D2B9386E194CAE4429CAC6D98E224015645E2827E1C016AC54737CACCF071CBE8E91E601C5A926B847C60636BFAB114158679D0E451AF3F3A97D716F96D92B51FA5EC90165416DE5633B5B8BCAA6B45D599745EB31AE3BB98C6B19E6F789BA6E21EFF754B16A4C41C -MD = FA2AD3B148CE7AC25ED7B2DFFC42C1A71040B9ED26D6684B2AF2F87EAE367169A5D67798F7238F28D6727CA02D4DEF31 - -Len = 1863 -Msg = EEF6D5C6F1147E9A29D854F15E8C5BBB680BC09EBFF8BCDDB963CA5267C668E648B47024F3972C9BCE05E74753735BFB45C50461D900DE1BE6BBD5DA4626BA6548BC7A47A8FBDBE45508A5C03C6980731BDA8BAA557EF6AE6117707F153D91982E1CE06E89F28D576B7602C3AC7FE77C34AAA1D36572C58A8A9A39F20A608A9EEBD4108F664F66D454C78EF4883E1C8C37319EC69C88063812A5FB2BD23AE9B4E49DF8F34FF9FD244D40D6E1A4B454CC6ABB4716C75327E5C46AF21EC8B0E1B0520BB16E4638C1BF3C9A6F8445BCF3FC9329BC626223CFC97175FD0A16EB8730F7EE2C8CA5CBFF8D06 -MD = 944268C1351037AD31F0265B825EF7DB065E676AFE0DF525614963937766BF16E95454DD3A183BC2AFA13BF9B09E2065 - -Len = 1864 -Msg = 7C815C384EEE0F288ECE27CCED52A01603127B079C007378BC5D1E6C5E9E6D1C735723ACBBD5801AC49854B2B569D4472D33F40BBB8882956245C366DC3582D71696A97A4E19557E41E54DEE482A14229005F93AFD2C4A7D8614D10A97A9DFA07F7CD946FA45263063DDD29DB8F9E34DB60DAA32684F0072EA2A9426ECEBFA5239FB67F29C18CBAA2AF6ED4BF4283936823AC1790164FEC5457A9CBA7C767CA59392D94CAB7448F50EB34E9A93A80027471CE59736F099C886DEA1AB4CBA4D89F5FC7AE2F21CCD27F611ECA4626B2D08DC22382E92C1EFB2F6AFDC8FDC3D2172604F5035C46B8197D3 -MD = 7ED83EB659536B36061773073B148ED2117512372E49E0A3AEE48B96353EC936B32688B150C585944D2008F21366B531 - -Len = 1865 -Msg = 4DF4BBFC86C99AB997A02CC93519BA1B6D58CD568237DC930E71C4963F48F304AAEB102EADD5E93902C441368752098DC02CD9518B1FD3E26FFC1C34E6773866432E25F552E44356C2CAA4A1BF375B73E17561D28DDF85C8FE6EAFB3A17D51AA0D512BF106B4325F9BD0F47E532A6D9A7DAA2F90D8AC43426209191512FD59816F245495CC6FC14DF5826D34B2381A1812B3CA9C4C8324D7D66A4A76F7B483032BAFE76128C5853968B80152D21CDC2BE64BF2AA9439C178C264062AA61097DBB287DE1BCEA6AFFB08468D3751AD533B4357CAB562E0105A0F848052DF66DDF9E2B7C062558114019D80 -MD = A540E38BCF65C6D9D7A313A0A28CE1BC55AC1D91D405D713DB42C7A740E10B62F1349BE4B3E633ACB656F9F8D65C62A3 - -Len = 1866 -Msg = C1FD4A92ED91E80437F2492D1F0933D8B71AA1FA1457C8243EC5C1A4DDC1996F04A3AA922EF7571F50D11CD10155C20D198D4BE9846C4C46E5CB8F602241B7033E542E7C8BC4D03570B8D7DA6CAA74B104856CC97BE1510864D7566E76CD19E8182C496F94CA7E9A5A2329323B665F5BCF41A7BB5BD8D729A4876D7E9A76B7764B830FE75312A3F268DA28E476985257FABF2C04263E6A1D69E9F5C34E11CAE04CE015A731FB1B492F405A271D6899184C4AD3631FEBB554021C36DA8E2A5864BC3F8DB8461D0B7AC9AA94222119DBE9263E0A9CFB8E8B98F456C1EA717433B4BA8A509A5CC4631140C0 -MD = 12F057D6187568E5C387C321DED631EAF4FEDAA1E351DCA655C8B59CFE6D026FD039E22DA25E615522D1372DC39D3DA0 - -Len = 1867 -Msg = 25AE6A6AAF2D2E5E0E0F1AC428EA4A982A601334D7527E9A0B7D699EF19C0584C5332623D4A9418156978F763F6C142009A76C5DCCEA9FAD261C93D9BC851538202745BFA220EFA3872C60D28C5A45AC8F85011F95278A28D029D0947B6EB8AB359FB4366DE97A757EDE3536B2EB7F25026B5179F32324E03086D1687CD1F335874F2161FCB387300AE9C460F8BA20468AD070C64B94A8D8E9D38A5C1328983CD26000F77508AA430A49A5444BFE451C19A2ABD1DAB0492C80307B61240BC18F24B2CBE2DA5AC8FC85C9B2FF984D351AFC303A83F4E3170D02B8083EC2CBB7D671A9B2AEC95BD719D660 -MD = 61D55C2F2E0A07BF774DE1F7FB7C3A901DEC082F8BB458112B607DA5BF47473E87C628ACA756CF972E86EB0F0E70BB3C - -Len = 1868 -Msg = 4251F3233CFF0E056271F186FF88284C5E29990FFFCFAB44F9CFA2EEBE619B72C3681DE8AFA75739A6B9DCE88F4463AC03F1FE21139E45C968F72347A6DEEFE78863DCEE29E2309733A8B477AD67524A4317E47A40C2027992C057A934A9C09D3C4DFBA062F4F653626F2E65AEE5C08378E9B5FCF87D937F71320E5D8CB9A5CB89360A0D7BE1BA7628AC1B0253D8280D32F7C03942A26659768AD774D95AB91269DF18576DEC613260872C558534C80290ECDA296DF12F6407390D78E7A192FEB2F4CE67CECC90CE7DC62593B3610D8FABBBA4C1E468815DFA614767F3AC0BA72FB18899426D3D76D6A0 -MD = 415958E2265702D1330659D5DD759E4D344C9AB11D77233B561BAEDB24D63D0B2C0E8E0439857F9C455AE2C954703817 - -Len = 1869 -Msg = FEB6A3B8C8168406BAFA4C6C4D437B0E5ADA67BDCD5383E2217005A81092047263ED80F09D72EFF2F1B39282B94B2AE5A79D099BC8AD3F38E124644AC5825A37C22506048DF9AA75FFAC09EA24BB218E1F7730D354FCADD36E02122765AABAA7D56EADE503AE02113A52011A87AD7A113A717608BDE4F8F5A1DB524901B582EB2FC351612C13E604F425AA333C5C5229DCAB69F0E02821F2C00045BBE119975AA82043BD4AD5B8FCB57C3F766E7DB60770040419F4DA26846803E2413A356B607952049B8F5E7C694B0DFE703768AF3A8BCA7C5446C01C7A257D0D3476E5853DFB2BB329BDD12B14ED10 -MD = D28AFF4D23003D5FDAEA3D8EBDCFEE61A3157CE18372CDA933BB429E9E7E90CF383202800EC24E3D72EAAD2222142AB1 - -Len = 1870 -Msg = 07B0807CEBA5AB708AB70FAA26C57DC848357CE71F54B1BBB640F34C2392ADACBEF2779999ED9ED0BEDA61086E3F5C427F3FEFB6D9CA7AF1DA684CA977D69B755CF10B5DD9B5D229016329ED7A8C5BF65E86AD07672F6823897A700152907FC188A673F1F748BEF8EBAF740D08403A34FDC6EA6498B552766509387440B9E557C3BD2775691DC1DF4A70D867B8DAB848EE1272910CBBF2FE02B836A4F44B69A031C82D4E86758E67491DDDE0DCE19F0B30229213BE2C4EFE138D21B746D7B76A3E4370F46065736A06433AE27BCF475C1E6B99BE1414B2C74EFCC8C5F209B5EEF747BC491021A1B1AB7C -MD = B612EFE05D79FC3B72AAB3AC979F4B80FDB00237B298CAA4369A181C26BC29E1D500204787B0FB84E349355D9E1B9FFD - -Len = 1871 -Msg = 077EE43315D81DA192AD7FFDEA1F8846FCE8E6497BB577FE0D84A3B33CB09997606C10E735922DAB8CE9508BC5FC9216493DABFB6982C060C8658DD0FBD3820386B8CF69C299E478AF4B46F677DF77B10B4416F87A984ADA7BEA287E7241C18F1D373ABE08B69D2C3EF3191AE6D88B794A2CD49AF24DEB98C24E2F647F1C97D37AE5BCEC2EAFED490C9153722ED8B8D2A1DD116EC398E147C6A1C15098FDB40E34666DB897A460622DC22C5E0EF0A7CB3A44A7DF8CA1521FC03CBA3DA3055DD0EF57DF1951277FF196F310B091049219ED89B9FB9AAB1E8C803458B383F75F8B71E466BD6B379CC445B2 -MD = E31B88DEBA7B0E23BEE073B8D026B8344B9B83E8248CEFF5191CF7FB853DCAC9676A6ADCB4A04249ED4FC5DCE9BE8EE2 - -Len = 1872 -Msg = E29D505158DBDD937D9E3D2145658EE6F5992A2FC790F4F608D9CDB44A091D5B94B88E81FAC4FDF5C49442F13B911C55886469629551189EAFF62488F1A479B7DB11A1560E198DDCCCCF50159093425FF7F1CB8D1D1246D0978764087D6BAC257026B090EFAE8CEC5F22B6F21C59ACE1AC7386F5B8837CA6A12B6FBF5534DD0560EF05CA78104D3B943DDB220FEAEC89AA5E692A00F822A2AB9A2FE60350D75E7BE16FF2526DC643872502D01F42F188ABED0A6E9A6F5FD0D1CE7D5755C9FFA66B0AF0B20BD806F08E06156690D81AC811778CA3DAC2C249B96002017FCE93E507E3B953ACF99964B847 -MD = 2516E0015ED162073238996D5A03239087E01C2091F7B03637E6C89A758F565E45C908DE873E378CAA433BAF339D0552 - -Len = 1873 -Msg = 71DAB3D5E14975584855B425C41A4553606B8D758FF3D9897F173EBEE24BE2D269E0915FFEE407582B4FE64C1A1252D07AC56FF7D164441DA25CF75ED3BD15F582A41BF97B36101AB73D2495BF77F77277A52E41993DF8A6A889331AB48B4BFFBE5486671C673F618C7B758FEA417D358FE1A617A6F5A8BC3619E1A58A1B5B4A40AADF4E8DDD4CA6B557E777FB7EFB7E755F3E4E0DFB6E89A53380B4013BA9AD071C3E147417BB663867F65D478DEE59E71B0F753015DFF08207DC4A985754B0BD81BA2A9B66DAD4881FF73B82BD31CF62B2CAD3591EF3EC790711FCAA3897BDA87C2DA9E564BC30601D80 -MD = 7ABA91C14C42A638BF985D0A20B4EB1E824B341B0F22B142092E8AA34967B288EDC77ECE4772DCB7096B13261C037724 - -Len = 1874 -Msg = CBA489942ED9C4FA6742C4442AF01F4503857D1BF17107169319A95B03DB4DA89379875761C26E82ED2A87EA5B532DAF6C9E3E12E6CCF8ABCA098D6ACE16559C87EE70802AA6BCC24D322D3469D59EDCA58B485A8D761707B2AE6A17746F75089A4FC0AD748B5AFA77DA2D32F2DEBDB7E0204343B6F732A91CE97E6694EACD38DD31BC1FB319B5322391FC69F4E6EFCF87ED5D75FA43CEF00A7B64554D5022E41FD07A09E0B08C8721FACCFAB978CDEFA81368AA965F3018D40D1E3EA5A13C2EB45508EA71B9084F664970153A36FA115CB538FF98B082CB2674523876CDD60145234A23F1BC6E80D0B340 -MD = 5551B4CEC42FB572154E375FDDEDFA162E5A715535D04FE6F28FB62D6D5CA73048DCA39784BB15B8E0D69DF7EE9EBF42 - -Len = 1875 -Msg = 2A2084884877E8EF481192AAEFB04AE7E016905FD19EBFE4AC13480224472DA2AC2EE2C2A652C72B1EE84C090B89F015060CD8ED31A320EE8CDCF0652197C8290AEDE81EE0109FB4B5F33E96AAE6004099AF9FF74E0C0D3CC69B5E655C2E6E2E8AD884C184D96716FDB8482EF16028E08C9518F505F9FAFB22A5B988246F2F45C7E8C32A4CD5ECC7C8667C5249D294E691E3E7855EC547D18F5FDCDD062FCE2809873D53527EF72FF707CBC994AED439B2364C10E6346D52BC8037C6D82E73353518CFF35E62A453E5F68ECD5F13A2F0E55A783923B41D8FB53D0C853DFD40E5C7CC8914958D1394E76C60 -MD = 63CE34C6B53244BB434FAAF029DBBD0710F189E9DF957F44E5EB465CE8A930DE559583C98691B3DAC373B47943187A5F - -Len = 1876 -Msg = BC7AA0446C7B561CD3CA9FF43904F23C761B83F50AD0F489EBD9AA9C466771F1FC6C8C77D1C9C55929532DBC1456D0D4ED1E7E9FA1DC9AA6013B555C217D480DA0735997E8A2EF951D978936351C444CBA6A4CCAEBB3417616677143BE2F4B4DA61D1B8A385185F74581249B1212C7820AC6DBE0B3BA8081E259B78E672152513E357943B927E01EE4BCA4D903775E6E67195E105D9F513F679DF949D852ED2A77B96D14A967D76D34CD4B18F8C4970DDC95436EF8614ACD896817954D2CFB995AED03B3983A72FC67F3BD96949B1FCBFA6E26ED6CC2DECDD4EEC72787B868783A9B1758AFB2BAF1BBC010 -MD = 90832FB2B9DD3925F2746533D6E5E08C02BA31806AEF9B0C3F06DAD70C038AC8F958C989F093914A40076D7E622ACB21 - -Len = 1877 -Msg = E91BFE2738D209FE5A8D7DF18EED381E2119D4EC5C507E7C3776F4EB0389A67B0B4E1D62E71BF71C37F84B994624DE6CA18C2C5D50E1E279EE0989E526391E63063E55553DBCD3AA08DF0D10A2D24B121EAA009A57C949498F9B21D80D1A81BAE55BE5F902B035406AE16E1BF7EBC1E21B377D3EA4A78039C5B572F2187D4217181741EA9487EE2FC4B6295EB152EB66B62F83E38D1B090AAC2E82220CCC46F8E1C16EC2D772805C6ED31243C5C976DF1B25F4FA04794716D9E60C84C13FD17350930C2B9D01DD44A19E2783B4E2DB7701996DC612C4246AF2428EEA9CBA510B14C9AA6C71F66785A5B2A0 -MD = 3CCAA29612EBA23D846E8313A90AFC0F06973BE45480823D8577642A3C1C953D938DBC0D41D401D9D074FD5BA7177D40 - -Len = 1878 -Msg = B5B7B936D7040BBAF4F133DABA95410B59734A61C50659654B2C441C4D74FC5BA926701516457F66CDC65603DF61E3D0E44A928537E438880EF48E93C29B60BE180BCD6BB28C32B30B29B20812E138C554EC8824CCCE7E49A6B2746018098056539133DF334C92D03F3DB12F32316C15D236576F00392D4FDCB065B4C8ECB96A81C4492CD93DF4760212A7CA123F019FE2EC2F9FC56EEF3FB7F21991F31621C8082E2032BC45754546C016E449DAC7B70DCBDC63FABE31E7A806FD226C798F8B34CCDA13EDC088E6DE58CCD03379269F58E583A670C71F5F96683106967E56C29EED242645AEA259CA0D2C -MD = D4E3B620A0CCF57086241C05826EA232632AEFEFBBCA651689022BFC7F974487B7FCF4E8A8D977061D10FA0EE89C03AC - -Len = 1879 -Msg = 2D9FFFF282AED376A69AFA50A700619CA32967E6A057A851B111C5387FDDC31BC54300F7233EC3A19FB2BC9EA509FB1AA9F2A1EA05D9427CF751CCCB39B3418A3BA0F01D63BA626A7A21B88F8D8A6DF57F178160C829E88E6546A65E0EEF4DCB0E5AAC1391F2E7C4890B90B6C38BA1A5828CE4D80119866F3F33DE9C029C1A8E89E7152961CE5FCE9013534A91A2DB42B086E7B9C8C6589474489103CD0FF683ECE788D889C81C75C80394613E0CB66B6B6FE962E356E3EE9B159F1460B2D753E2992744C34489DCAFBB429E4E151CFDB1EC5D43CDFA44FEADD2C1CF25C097EF26C48113E5F75BBF950AE0 -MD = C6CAA9750B66B53C9D8C83B0740244D7A5426D6CEBA26A756DD07D06581992134EB7EE8644B53B2FE6D3CC83455091DA - -Len = 1880 -Msg = D85588696F576E65ECA0155F395F0CFACD83F36A99111ED5768DF2D116D2121E32357BA4F54EDE927F189F297D3A97FAD4E9A0F5B41D8D89DD7FE20156799C2B7B6BF9C957BA0D6763F5C3BC5129747BBB53652B49290CFF1C87E2CDF2C4B95D8AAEE09BC8FBFA6883E62D237885810491BFC101F1D8C636E3D0EDE838AD05C207A3DF4FAD76452979EB99F29AFAECEDD1C63B8D36CF378454A1BB67A741C77AC6B6B3F95F4F02B64DABC15438613EA49750DF42EE90101F115AA9ABB9FF64324DDE9DABBB01054E1BD6B4BCDC7930A44C2300D87CA78C06924D0323AD7887E46C90E8C4D100ACD9EED21E -MD = 6BAE42ADD06C6A20A05D845E7BF391F1EAB83E83A710A18527FC03646104E52A8B417CFF375753882081F31B6F2295EB - -Len = 1881 -Msg = 9B5DF8D7D727C54D2E19A7A525180CFCF88067B5C5205A0A41713EDDC19A6A0CB8DD7C1C1DE7E9F038CFB3A9D3853CA1D24C2D17D55B0310C2BC696191C2D7217177E00DD4354276FFAC3FD8FB2414E309937AE3BE9B94CC3D0904CCC966B70031FE4F589460B1E831FE46C579F802AF8210B48D15409FEFD6DA627DBAE0D17A0F9E95A1490EFD05D458CB4DED08BF6201E4139CAB7BE67514F5766D75AC28BE0BFE57AEBBDD81FB6A3C2A5E088AD72312480BDDDBC85CCFDFBEB13A6FCD0970AEF6F00AC922B8EFCE8AEA4635D15C63370E92F6DFBD2B8201600C81FC58CD57148CBC6FDF1D862B30211480 -MD = 49191BE6D668C1A97513C5EEBC68011616A819E987BEB7C6814E97A466D87FFA8CCAC59655C72BE057F4F5F8EFB6D1C8 - -Len = 1882 -Msg = 6D35A20EAB3E02B1974F66603A111EBC5D3A1BCA88226D2172215E57EFB59DCE76E78E55DDE1B7FFFE0F1F9194AA9A7C9A88AEF15ECA5577D5AE885F6C1E94B960B697D9210EE5E08801CD5727CB870C5CF62D2AC769D52527413210DB7DAB8679C1EF0AC288B4D20D401BBD503D02686F8324F7C441B9CBFE85BAA147E24E4B93286C9B24C6940C4391D0CAD11F75A5CF326AD6033BB160651F5B8F825D4F460BEB14C5680C6FE90AF460FDBA3EC45CE26BA68649B88D9AE0FA737B88A4DF28241D9DDA4F24C02B53FB1063D54CDA4780BB877A48206C20115147B3ECF238DC969E2B10EF0BA8B2CC2BA5C0 -MD = 50082387388E9705C0180D3FCA95D733752AB45E826E4C394497B2A1C9DEA1FC811CBBC40984983209BA9B51822859B1 - -Len = 1883 -Msg = AC0DFB4ACEF738945A21058C6B8E9728B5F5D8BEDC5A62C65064CEFB085C1BE69573CB7261165EFBB479AED2920235521FE64D09B5B68BC666B22014078F4E08072B854584D2F8BF910BEEBB018594CAAC5B5B734592831EEC4F954A33C506524301D28CCECC3D7D60C0BB37F25FB0286F0A3D24E5FFB04E2ED33F17557EE45C1CB50D821929AC534CAD695FAB1C12A5ABC44AD5818CD0F899D7023FC3D1C797CFBFD7E7AC6FFB79E367BE21DAB7E353DFA5C79B69638720BC914102B599F130052A1B81C373856CD017F647C0EE802F3600C5D52B4EEF5DCA52C82A4D0814428BE9E37443F9AC287D430E40 -MD = 7FFA39711D66DDF4B456222CE09E4C467C1DCCB4207388B35A6B8EADA97F4EFDE54C4F7B9B276CEDF5790FE35E33ADED - -Len = 1884 -Msg = AD54F5E5D76DD3B229155AD1F3D9063BC1C624A4E265BCF03EFC4475F3ACD9E85661F836E3A25FD2ED900AD6F43FABBEF7580D06D54315065B2AE6EA76FCBD28564382D0AEC2E61CEDE74F8C14A67E722E6177154AD1875D9939F9EDA3E3C7A84244D115B0907E4D0C9CC6E8FDB143A3444EC54584D4A909358A715ED0F43D108C44ACCDACC366CD5614D560F1F06A398F5DF4C6A00391EF89F97483B8FCC42C14E2D154F4E07C3F8A2D6026A5BA025CAF46AF2D374DC7E8B2301B0F500F43BCF1416C3FD87709A204AB342C2762471D28ECAD10C852D32DC053636465DF2265674855C72D70B306297F5290 -MD = 81A749FFF4D39FB7D7211FECF9E8A628F3A430F46DC4C4CE4751592AD4DAF92316868C0132ABF5BDDD53229FADB271CA - -Len = 1885 -Msg = 53D52F2032B1C46D95C57520FA0CF46EDC7BC6C0C33001D9627E7FD56932C7CAA7CB972083039C1E4060405D210FD60E546997D9D912444EF583455018FC3CFD51F9A4705BB9F6DA7F629A08B23F3ABE6EF27CD6CAC03349FA5062E9B9CECD5DD4EB64655705FA491C6AB62012E35231669512AD5DB1AD4185142C3504835E5B5CC4A18D9EC05DB517D5A05174097AC305137CFC30DE721F605DCBFA88465C1D693C69CC03EBEFAA36886BAF39DEC8ED6EDC49EA34E6768EA13D462C6F9827AB031FCDB0C514851A5F8754FB451E1EBE55CB69BCED93E7D05951152E8DDBB6F57B838CD1340C4C01BD33CF90 -MD = 7985DCFF1D91A5ACA951D73CEB1F9E54E54DE76BBA5617973ABAC7A8196D6246A93335FDB1C8DEC895BB67063F976BF3 - -Len = 1886 -Msg = 21FE58214464B868040194D4F73D5C23118ADAC415179F783E76ABFB26DCB8426821E42C350A5AB99E1ECB27BBFE87C35A5E30A1420DB9E82A29A7FD9AAF22768946DD8395DC015F6EC475BBCD8446C89A7D76B4F15B3ABC12DA9B8394402A4A336D4EED27AFD435EB72C91715E06F6687EB0355B89D9966D7CFCE736519F50CEB43E1FD4433ABD1DF3AB907C52434C15E02DF9CB91AF7A90FDBC0DBC59E5D3373D5CB0A2172B2FA74700DB3B7923CFEBBF84F0F51F63999CC4CDF2555F6314A2CAB5EC7FBCEAA7BA6B1FAE3EBC71D605E5F9C27DCA3ACE176DAC25523E511B0BBC52FE5F9C5F299C381D488 -MD = EBCEF605DA6ACA61675AE4C127156622F199C0DFC0084CD5594EC90D06CEF4FCAF35EC86D3F3754B62B7A95A2318E732 - -Len = 1887 -Msg = 0DD7BAA7F00F3B72BF6E9F5EAB0176819ECDA7AC23AA78241F3D885EE7D791200C0970280D7772805E2806846882E7FBD0B09062782AFE528C69AFB1898568B748906264965BD2730F93F3501EFFFAA2A972DC37EE3B15BA330190A1945DAF78E0C75E191082F604240A6302D23935B13222347EBFFC7C0CD9B47FD7EF152DB68FC15374F7A78BA6CFA1272173C34F73051202C3D5D964A07AE03A12025E39DDFD4A5E7B0B95B84E81DAE08A0038F5EC4457A251483C4867D7E3F2DE4373FEDB63FECB542A936E59DD71EBE077681D3BFC6BB6D624E04199937BE910A5FABC44626A6ED49864C0C4B7A9A1FC -MD = 3FD6A4B26EEA542A28F8A95CD94F53167DAAE71C504D498FF4F7EF8E15B4F28A9917CBE74796CB014EC7D16D4B2CE598 - -Len = 1888 -Msg = 3A12F8508B40C32C74492B66323375DCFE49184C78F73179F3314B79E63376B8AC683F5A51F1534BD729B02B04D002F55CBD8E8FC9B5EC1EA6BBE6A0D0E7431518E6BA45D124035F9D3DCE0A8BB7BF1430A9F657E0B4EA9F20EB20C786A58181A1E20A96F1628F8728A13BDF7A4B4B32FC8AA7054CC4881AE7FA19AFA65C6C3EE1B3ADE3192AF42054A8A911B8EC1826865D46D93F1E7C5E2B7813C92A506E53886F3D4701BB93D2A681AD109C845904BB861AF8AF0646B6E399B38B614051D34F6842563A0F37EC00CB3D865FC5D746C4987DE2A65071100883A2A9C7A2BFE1E2DD603D9EA24DC7C5FD06BE -MD = 14690DDB5A48FDF382DBC745AD0330C1486124F6AD2E5AE4A850E38C264F99AEAE6F156062AB1946DD07AFE1700A8294 - -Len = 1889 -Msg = 6EF15F1D7C11CCB07B7B3FCD92C8086B27C8BFD1728F6B4AFF7C29DA17D2B3E5A2181181BB4B11DA8BB2365368594A50CA9B07969753724F2BEBCF7D208A6CB02AD7C8A694C8F86B551BE9A68D98564A941090EF6E5E751CD39909F87BBC7B516F9A829E3AE277E287C3548A69EB1019D5BE3951C6F3583B1B82F09A339E8C236B178C3C9DE3E85F6CE38E8B6AE0D02C0B7BA75DD589887A834AA9EC1B3F50D3495C72DAFC0E67E5FF5CA36FAE7155230A1C54EF30EBC3508E775DFDBF6BAC06EE23B6EB8ACCF8FBE8CFD2A45CB268E11FA574B016FED1DB09458276F53D8AEA57B3AA046393719127F4A07700 -MD = BD968374276AE6EECC2137B6B2D70BDFE8D7ACD33B1A58C5AA9029B2C68ACED7D696E03475663DF47A6A54CEEF47DD2E - -Len = 1890 -Msg = 8F1FA4E6804B6EBEE7584B7B1E2F76CBBCCC1699BA68DE8B05ED2DE8F4ED2107340E4E1DA49DC7E72D96251A8EA551DF35410D4296250D71EE5FE4D8C396CFB48B2E5F2B184F7453E0D74FDCE51D99DC2A39E4AC291BF18BE2EF1D5A1A02DFDC9DC712D5A1A45544B1D45F279394F2316212BF7B5A0E7DF002E3ABDC57D91D7AEDC8EF95F0ED7F6E38EBCC7BDB7A254D6D50EBF8D4D63D27C8AD5F4DD843E4B7CB14A57349985A45A326DBE775AF9E97909A84AD9927E614A4A6D7EE825F84B5DE6695D1E9C651BB6EF57DEFD17E876D8CF2AF552C2B65C2446B177D76C02E0342DFEE23E4D7CC0B994A122080 -MD = 4061A35315A203B0BEE84A37A89D73352B7C522358DD801A727727739BB8804F77F2E7929E2AD2A2C530095255FB7A56 - -Len = 1891 -Msg = 86045C9767C27085DDCAF969CD015AB4B8FDD157E1993A98708376BD37ACEF1F9D057D5A1B25FB1AEB74C361EA478A37D1ADC261ABA42555AC512B81FF0E689E1C76830BD69F9BCE4447B452300216452099D059B8D67EB157D001A0416FC2701384A5F2DAABCBC94C7FCED505064C1F0494694F7007FBFC4D43323E4C8D719DAB37C0E2D73D3677B3283114C41F611DEE02390466A417F43734DB9FDD0842A102B88238B5426250CD92F98EC91C540EE24C3F5837BB8F058A08EAC3FEDF32E25BEF8972ECD1D9EAAC379E1939541CC8542303D75F1D807857E545989844DF52F3C44587CC21102541D987B9C0 -MD = C1BF5F15F74102B55116A654433767837212C4AE44BD2D71E65CF476E86180B635E8E08980374488D2949F0AA159B750 - -Len = 1892 -Msg = 7AD8A30BCE5DC62809ADCD37A2579DBBE2DDA653502892B72E2F9894DF9F4825606A13EE7AE4D0590F2F241C6614660E77DA5BD8D55D6C6F02B614E62B92087FCBD24B2E0CF746CCFB1C3C3B5B41058786AFAD296D6FCFE9B53E35404A7347720D1EACF3837B4949C6CD9317E18F8D2C3AA2326C4B848C44D524D140DD2555B4C6E96017DBEFBE3C473CCE502AD528636432FFCB4DE6F122EF2C9A05B6EBDFA1286EBBE42A131FBC54FAA8D060DD9574B363216189191AF074925D19D22B79FFD4B00DFAB9E6BA72F3EC0BB2AA1FFA170AE34FC413E5BC424D41C34AF4D991128FB3F5B05459A96AAFAB37C740 -MD = 53A6BE559FEBF1642A7F7277A3CDDA2DD58ECBCD5D97F0984FB6BE85BD63FB04A73262AB3F0AB56F36E3396494BBA002 - -Len = 1893 -Msg = 385AF75BE90E5622E14E98D775F6C880B790683A3369801A9DBBBC62D40467ED2B1F0DA3EEAB036373B8E374CAC3044D1D248F06B8C197D20419A2E8D4E7AE87E8EC56BCD165756475FA98FEF04CB81035552481D7262E5F2DD872C750C15EB1E02F4EFEA20890112B958717D16CBE93E8F2E33A83FF6DBC3E04BF9D89F03938526E1C277F86F12CDC1097CB13152585952A6ACEE5027206FC6FA3D72C8A3B3D065FEA75A4D1E2BE33F0E32A6628AE7541B0E81088CBDB7905140ED757E0A5A7798326AB0A26FDB85D9AFD35EB25817C6B2608A1F20A1FDB198CD3A72422C7512F2C744234826E1254AB8B7038 -MD = 9D535009A5E4061B2DFE2B18FDA961B9E3CCA0C6BE6206A3B749B73CCD0FDCA8500DF6FEBF963386A589A57219EFC1AA - -Len = 1894 -Msg = C5ED28E519062E99AAB7E01D6BBBC42FFA0CC6E304E8D489D8C854BB2E4E949EBCDAB329E147128AF11C75F92988AA1A42875CDE9AD9FA4861C03F4A66018B0496A06DC48E70E15E2A7E51E35AD6B4F15220C249BD40ADD5DCC9C58C844383BD436EE9803C87D48BE54974CFAAA19585587FB088E0F8580A851A7C7A2A5E5B2CAACCC09E9560298129972CD26FB603FC5E86425AF9659B93F3F6695A1AE7EED525F31C717FFA699ABA0ACAB0317D7DCB786FC1F238C0B3D826AF10BCDB372DAC68C219674E7E9F9212BA4EE0E2E156F1BB818D4887D9D195247108B4A131448D91046773A6F48FBD748FAB9F04 -MD = 509FA5E02BF716F38F7C0A53919E607993006CECB0D1E9BE77C1BCF17ED3E2E6F7B49D551C6F6DEEFC735C678291F24E - -Len = 1895 -Msg = B3303FCEFAA4765F0F8BF01AECC4ADF3BCE7CA9F5DBD9FB203EC0347C583A477FE8D7AA23756C47B2F8F76C1337305DCFD2AC0942546E04F30F1A4661F36EF4CC10A49905A2EA717D5E2AE1615330290B06E0C2DD6C55BF3B8FB06D49120D1B28B8EF5B7FCEADB97F2BA0BC64B458CB1E79934393CA7D4E03C7B3601367DFFA70B0AB51865389C817866F73E1279D97D762350737D9E16F6CD64A09391A956316D63BB611B580905A9670EEC91749CA1D1041324729F3E35248E183E6113E08EB6674B06AC41FA391762C8B0D1FD764D9828F314F80546EC300A26AF32ADB9F838214E457301F1805D2A1579D6 -MD = 876AB2656527317EDFE6B304DF5A219A6A85F9C5F181C85659CCD1A72C365C1580A6E383B763E6373A17AE3113C85927 - -Len = 1896 -Msg = 1861EDCE46FA5AD17E1FF1DEAE084DEC580F97D0A67885DFE834B9DFAC1AE076742CE9E267512CA51F6DF5A455AF0C5FD6ABF94ACEA103A3370C354485A7846FB84F3AC7C2904B5B2FBF227002CE512133BB7E1C4E50057BFD1E44DB33C7CDB969A99E284B184F50A14B068A1FC5009D9B298DBE92239572A7627AAC02ABE8F3E3B473417F36D4D2505D16B7577F4526C9D94A270A2DFE450D06DA8F6FA956879A0A55CFE99E742EA555EA477BA3E9B44CCD508C375423611AF92E55345DC215779B2D5119EBA49C71D49B9FE3F1569FA24E5CA3E332D042422A8B8158D3EC66A80012976F31FFDF305F0C9C5E -MD = 9DA6652BA890007A01126F0F65970ABF3474C7659C6C80B04DA2CA592EDF0F399601BC0DAD10A0DD6E316A286E2338EF - -Len = 1897 -Msg = 30464E409A3B937C485408A41CAA7CE8421BAF61D2B7DA168CFBB9405474ACDFFE48F5D8F4DF6A72BC4EE068439A25048045D51A8A47446785C005798FE8A89EC63AADBAD883DF27989B159D04459CB3FECF20E32B410A39785D2D03188B012576FE15E5D2E7BE31DBAD9B7697A08CC49E6EA4E53218BDF1BF3D2107DF74CC05923BE9DDFB75BD1692AAE1908CA32F4AFD9DA23DB66BC723619498E0697D3934518F06E2D0909B8571096942ADEF6E31B5E31D0853C36334F09F7AADA41D4D0AB49AF327DFBDDEADA12D7AF97E4D5D7989DB22E1F8EE44FE2E36646A6E1225C8625BBF9A63A6769F5C191FD11A80 -MD = 2BD647BA30A08D54DF358AD0914D91DA4EC920CF70DD92EF1FC2024C3E7E4345549A3F671ADA4062F82891E993576E2D - -Len = 1898 -Msg = D0D5DB1EE32912B390DBB8642F314AAAC36F58D46E98D508DE2007ECB63F487CFD2DD81930D003C60E7EE781FB987959A86128B754E813B933B91A714C8C2BD09C338C3F2170D3753EEC2FAA812F81C287276B85371F398EBB7CDCEB9C20528FE9DA86A1C19749173C62A1917CA1DD82D5036CD241A45D0FA5733C8986B9954C173CED51C40FA1A0A0B8134DA1ADA8019615FEE4BAB7253600513CB960DFD335D1AB376B921E4D47A1F5AD75F88C7575EE32A5B2BF175EA230995B3252632C1D4B7B3E4045A1EFC0C6EFF757B31CB1A29C80AF96DBFA4BCDECE8BAFDB2EDC6F0F85D6C97157019FDC7B3B5033380 -MD = 3A1907BB41B6D1C1862400A85B9E7EEE0EF1C061FA485FF8FD358DA9C53F1A944E04928308C13182D96B982C4435D2A9 - -Len = 1899 -Msg = C7865E96161416FBB9568C2667F7B69C2AAE38FEEF6E89FEE038199C889E72D1A0A7EC5E37181C2D6BA903D9A14D6C74EA1B009179BA298CA72BB9A6E9D5CEE1E2C03719D850D7703C692C83C58D57FA2EEE1AD28CED2CBBA6203F1FC16323A5352D08CCF63CD1E69DC35EFF1E07D1240EC099B956680EA8F7E907A42C8A5D7FF1C8CA85046113F337C9F5DC5F48DC2BB8CC548222274167E61262124E4483725E5E5CFCC8BE9AC6FD8CE4AC978855F9A63023187F4031CFDAF75D1E9AB2D500F7578770E1F08FD7515EEF064B6B0D2E1A6E37628BFE68CD33C54E5FFBFA0F2C3C129902F3DAD6C3EB2AFF4431C0 -MD = 5BDB80FF46E69651B819FACC871035AC8B2B017E284DE7116F9150AE622849119BA6C544305437EE64C4D9C6532C91ED - -Len = 1900 -Msg = 6A0D95FB7E1385C290FED05695D0F9E1BB07CC16A34E4BE0C6E9AFBC809465EC091FE41102C9DF99797B33DE52459A7CD266D5005F33F565CAB3C020CB9331AF08D5AEF45F59242FEDD25A933DFDE0FB6ED5537B0C0F132D58CE45ED874A91D1030CA3D6ABEF53F7EFCA6658941769B9447649C92E062C863FC8CCEDDF87984211225C4999592C6FE591F4A31D397D96884304CEE028EA830222B15BE306EC567E2A2397151DE8D1D670D80D0335D78C3475BC4D3AF25C3E3851600D2A9EEBA5CDCC48A438E5D023D8EBA08D1A6445912BACC65717962071D96AB499A5A36C950573D801F6066E9E0837363110C0 -MD = B137D228C36F0F9C7C335293A9D6E8F7C6F65E74AC6E39ABB46A3347DC800E7738C1B7DB1FAA19B58E47C0BDC6DA1287 - -Len = 1901 -Msg = AE7DBB62E7B9A47FDA5643A8221FCDEE971907867A43680CAAE6EE618EC365D998839AFDD3185E8F56DC5E57EC71090089B815FD2F2B6DCFA19B1EF25001714E6F9A3CB58D35C858E6912DA487FB806AE3A32A0AB50034AA7B3C063CC47FB7D207E961396ABD557627B0FC1C3EE14A84E6C94CB27BC74B6DF2DBF2C26E44CB031EF8AE82D04B11739E2CDAC18341C389DF1353C99D419B26D41B8B4F916E79A124FB16F30743B305A56674772B9AB9167C01C5745FA0598B2C5A63C43C27797E2B9D63F1B1D9527FD6A4997A5ACFC51B124750C59A356F70FF258A86BE32E4C08D4AC352642580368586B69CC720 -MD = B123E4F73FD295FA2C9C202223EDD1C65A7240ECC7CFFE474228765345BCC1715634FB85D6B14F64D38488656A8D051A - -Len = 1902 -Msg = 25B99AEF0E7C37266F10CDF83715CFD1803E0C3DAA8B8D4D44A49D3118588007449EBA78E6759B825195D53D7370E1E20A687B9245183605EE92C7231DA00D1F83DEF383FCA4D437F047E7A1AB23F3EA309D0E73CCF6260BDB9C151E3F3C0435C72E986035418E4DCE502A2F63751062D42DC0DDCCC92243253681EACD2B1224B5F82A8D875BAFB362F76EF7919F2A0A17B69E13095EA71F06990CFD70156733B0C42DBBA31A130F648D451300EFEC70DED0E1F850A0C06F6C2FF0E38C1C9316046451CB52A21F06E1301A071C5EB8EA23E39A18D1B7218BD2833ABB98F4BB0CDA30F4B49FDD2FFF493D7167DB3C -MD = 6F9D11E0D69557FC70B08732ACAD79FFABB223E5FA704D7CA03FFD396FFAB0CBCAF1A8787D9F1C5E2C59C79D62004112 - -Len = 1903 -Msg = 715E9D91D3D364B04ED7A446DF0CC4AD51A5D8B31DC0A90EB9BF6675F9052BF3360E3D5A7D9C373C94C9AA9F6B200450272F4B37EB9A5BAEBE95C86AD74BECF18ECACBF3C8B4D5AA32C15E0D1457451D664967B6AA4676C992DBC1CA6A6576BB1788C94E0C97E1A85402B8624B03791F896A85A4A4132B7FD7679E8786B8A66E0526E1FD0782CD14D1712173F0A96063D68242652F52F8ABBFE284E637C62BADF97372DDC7CB2700FE31001D094AB77378D205CDE474710530028CD598FAD893536B6752A542171F6FDBA6893D3AE06CB8221AA27C89570E463E6C31620CA976234479B15B8A6258D4779FC321C0 -MD = F2B3140F0524B9084252CC8BE42FA97018208981E4A9E47F6363C9C722CBBE6DE3DAEF72EC1C97E9BE64A496DD6B32A2 - -Len = 1904 -Msg = 08D0FFDE3A6E4EF65608EA672E4830C12943D7187CCFF08F4941CFC13E545F3B9C7AD5EEBBE2B01642B486CAF855C2C73F58C1E4E3391DA8E2D63D96E15FD84953AE5C231911B00AD6050CD7AAFDAAC9B0F663AE6AAB45519D0F5391A541707D479034E73A6AD805AE3598096AF078F1393301493D663DD71F83869CA27BA508B7E91E81E128C1716DC3ACFE3084B2201E04CF8006617EECF1B640474A5D45CFDE9F4D3EF92D6D055B909892194D8A8218DB6D8203A84261D200D71473D7488F3427416B6896C137D455F231071CACBC86E0415AB88AEC841D96B7B8AF41E05BB461A40645BF176601F1E760DE5F -MD = B94D578DE79A437BEAD951E9AEE912540D0139965CF0142F1FD403534959B75D11E0B2463201B10364B905CF9BAA57B3 - -Len = 1905 -Msg = D54EBC88B04A14EBB0AA1D59C3A4498FB560438B5884F6E6A744C78761AC06934138E03FDCA96CDFBFDCF94A2D51151C35D5D03ABD61FD7850B8309D65D3EC495DB487E6A7B6F50E6B30A58DB0FF64982A79409AAF49766E032F7893E0888EC71673858FB57224F9A3FC170B06B74E54E2F512F6188684937C070E5C21839AC032FE1150F48D229CB6853769DEFB8C1998B48E79A96EEA86993D215FF0152A30147761D8D45D5CC6B2B81A46F99B7EE7904F2C825AE1B454931A24E51F3B0D4618AE5D784C94BD747F08E5689108D7E2DD291EABA7AC562BA7C768219AFE2CF7325672F3F2237CCBFA743D184A9D00 -MD = 706ABC8137E705EA9BC7D1CE41105AD74CEB9CC6C1623FDE654D74EA8F31D92789677E6AA1F628E4E7F24D9AE7CB485B - -Len = 1906 -Msg = 1B9DBAE7FFD110EB2A4EC1C27A9C2C09F59DDF426A1D32D18766432B4D9EBE9D6FFDCE6140764930D5526D38CA45C2E4BED10B620F4B5F6B42B2B2B3F539A062DC36465483F660A3B0DD1FD5130156C31497F2BF2EE650716897B9D79A69018CEFCE1CCE2955A5EDE0EC457B8533D802316B5D4420B9D5BDC708E9B1F39E0E91722D9EF6A646DE2313C4AA88E71C46991E799A564A3F53CB245A91DC9E704104DD930F2EDD1A39DA491329C13D75FD6E71B076E1F5A1DCFEFFD1E2757FAB630F4C7A28874BE66287E733B462D45964889B42080C0DAD909D86D44CE5B16503B41246C827E00DDB13BB936185B15A40 -MD = AAE9799687988286C01D62A612BCB1ADD17E72210727E5E1772B949409A42ABC96B0C066F0FF249DBBC8EDAD191B6CEC - -Len = 1907 -Msg = 948B3189A832A89B77011CCC3A5BCB0BF9921458DD9E8B0DF900E7FD1BED31053A714C7BAB9018A94E5145768224724F0715F7F959629120FC5F2AE282FC16C029759FD38E109CBFCE44DE36469613FC3E75A0DFA599F4B74358CCDE5E0E75934675C8A65687B08FBB8B0914A8D2A7D26578C98E996A12E6AEE779DD5B12B6F1381BC3EFC84DCD86A1488B1289E296484141587F9C2DE5814AF5CE74197ED41D6E47974A1012F465446B8B568DF4CC56629F0C34A9FC9C4DB1F2139006D02A071243594BCE5BA792F0D5ADD297FD728DE29107E60A87E8F0E3E360FFDB10FD23BB8B8C5824F0534F3C202838BA7540 -MD = FE6016BB86A4E9D063490229D6793FE5D4A6F54390A819FD1A39EBA6D73C13FEDEAE4596E9AE3D61ABE1E5CAF6BE1AAA - -Len = 1908 -Msg = DD78EE486F318664E7A4D66B15E5ADFB15CA07955E290655CEEB942E5478871507B4EF5AC241EF683BDBD0611806DFE2DE432E04F1AA93E1608FD6A2B36BBB799611CC80B912E2FAFCE43FE688EE8ABD5EA5F04641B84E6D1C23C0742E64BFF7364BC1AB8B6D9C0FD89AB8EB4E1EEFBF7A17039891819092BDB39E493C8469A2ABB8F691E6BF40B45F98205C50292C7E860514460DEA5FD3A331342CBD70D7E8B2D5D6A94C341F27B00706C967A085DAB5E75A499E7B885AD3A3E3DB1F2B2DCC6F4AF700845F010E91BEB0594758EC13E345B41498E6D45BEF60879CC812349C395934ABB047BDE1E8129170525B60 -MD = 6B1C3DC5B3B6964D4EC3C433B34541E2B0BE89078EB3A4106F00BBB3F77B2DBACD67AEBD4D58EB7C78C15E5EF91E67E4 - -Len = 1909 -Msg = CEDFB16E8666009C16626B4828156C6B374059093ED1E6F9D9FA3F524EB7FFD030F21761426E5838448F3D43FA87366FDBC1FC58D75C9F4762CB34FEF1746991EB3E0BA6FD0BEB93F0EE5A3BBBA466B2A667C818AB4C8BB1699DE0BDCEE984E45972BBB737E33B271B8C52B612013980996990F8B4A8D63F499D121DEEA5AC2D98B3C86BB6D0D62948562502F18E0C8DECE3A86FC28E39EF39A2FEF225A406B7B0AEDF4B3949B894F1846FD656AA8DDC0FF1ABD33F54F0A74FC35A9C6C299A4F89A24098CF3966F070BADD4BED889F3E1DAB75870127CAC9106CECA696CC186DF678D2E392AB592DB003AFB2659E78 -MD = 0F2B0D0CFADD09CDDE766C04ABD78C60515E49B2CC7B422916BBC07C600463E8A2FC4F7FAB73FCA458D6B40A63F09E94 - -Len = 1910 -Msg = 88B7A04F09EBB5BA5AE5D406C00A42CD7A809FE193956CDD28EB763DCB771DF5CA02A0C3E963CC9D4ABEE25037E82A7BF776ACA0129216E80D2AABB7A61C84AB5A2E675F2DA118EB159E0495BE9B8361362B7D376D08BB2F407B65E69120A1009B55CC0A8425DFDA0422BC1E7005DC4E8EDF925B79DB2230447D7E0BED9111566A8DE861B6CD11AC5F4BC9F7701312BDCA9019C4D799D085396FF8A83522D7842FD8AC880AB792EAEA4C4DA5670A586D1B13B005B8D26B371264AED50AF8106FEF5FA9232FB4D780F7118667B31F219E0655C2CD0D9ADA7F4C0032E8A8C40AEEF8E710635EBD3288F81DA883C269C8 -MD = E9369570EEB4C7BDF4232640DAE054CC307A293277322F7EDFBF7E50916EF2691AF8559A5AB19AE23C5C9FE1B1DEB1C6 - -Len = 1911 -Msg = 60BCE2AB04FD3142DAEF5C0D8BD52DEB6C60195DDEADC37BB50B8D7AC49D0736B9C98AC3F426C5BD548AE17CE4CF25089ABE525AE70774D1F52C219097D9CC7E25EE0A9AFDD92E63C720E09DFE45BB8D83EB36CBC8379C361C6D4A31401FEAB4DDA2E867937E5A6E9E2190D2411E837A7317FBB46859F8A40E24B4079219A2AA3A94EE94376B92D4BB86F3BF79457C1F32083F3AC6330AA9E87F49FBB75958E205EBF0133539139A68CA8498D9BA099251635F804EF3711B72D65E8F0D7ACE7A135024FB8C15DA8D8B0194BA4E8BEDD18E593DDE80558E2B9E697D053BC6363A98CB273594C9A8EAF93238532E25CE -MD = 11FFF1AF0795F186A6775BF402011D8EE7D9273F6C495A5619FC30884C67D78E4C923CFA91D92F6329200631BE33827E - -Len = 1912 -Msg = D782ABB72A5BE3392757BE02D3E45BE6E2099D6F000D042C8A543F50ED6EBC055A7F133B0DD8E9BC348536EDCAAE2E12EC18E8837DF7A1B3C87EC46D50C241DEE820FD586197552DC20BEEA50F445A07A38F1768A39E2B2FF05DDDEDF751F1DEF612D2E4D810DAA3A0CC904516F9A43AF660315385178A529E51F8AAE141808C8BC5D7B60CAC26BB984AC1890D0436EF780426C547E94A7B08F01ACBFC4A3825EAE04F520A9016F2FB8BF5165ED12736FC71E36A49A73614739EAA3EC834069B1B40F1350C2B3AB885C02C640B9F7686ED5F99527E41CFCD796FE4C256C9173186C226169FF257954EBDA81C0E5F99 -MD = B85F56F69D3BE57A1C2AA553F90BC1B089E8F1C561881BE64630EA6BA4DD3BD5301512313A18C26DF3E97E056A59EDCF - -Len = 1913 -Msg = 1155C2A0961A8BAE0B6D7525BBD4F8C6462DDCE9F37A406B9207C3F103FD12D777784434C89C0230E64768A054160B530F0E9B0183B00964F9AD9286B0D3DB255CFFD3B68FE526C3761F72A45F842667C277B210F157F1C9EF5C9AC7F7A050C2D3D73C4D48E85E29842F9E951C07266AE96A24285D316D4F372C067B7480B663A59AA04FE75AA96AF5425E2D3BE0DB2525FD9348198465C7917856716A667503729940B2E7190281D58B3ABE3B96CE9EAD0BDEC79F7DBA5172989CD1A73CCB8B51B67214E19D0EF7ED4F2ED33A7D773862A4CB899F8DE45197B878866F8FFEF1ED73641A5BD58F7745EC17D84D42C980 -MD = 535F94B434BE3EC2AE2FF75D954350CB73C3F5BF06F799B6B44CCDEBC53BFF11D99E2978005A236FD94D37A28EF26AA7 - -Len = 1914 -Msg = 8821B2711521487594E20F09E0DABC97A5B5E29A37121BDF965F828D0972FE9386B28A37D47805308491811C8C1A4357895ED65C427E5AEFEA2926DBE7A909B8431D3B362A850A0810E6F30D7EB00C5A0FC8D933B088D8CC52932DC297B5CE2B644CF56D4DFDD59AB0760D5C11CC1A10275D4938EE0D2BD54AA9513D1B179587E77227703F0F6E66DA34CC1A0DD382B6213A6B313CC8C5CD75A956D027DA212DF965128933FCA4F7A2507C19E54EB6E915868C29A8188782998FE07E8CCB50FE433B3C2E66CD6D794A06E9E7D40AAE843D6700D1D4CC1D1C34AAAC811BF8489996F7FA81D6AA1954EEB441EE411CAFC0 -MD = FE3F6E45A378B0A3984B07BED8AA7728EB5B0EEB211B5BEC935B49B972595117F7CA5C73738E21CC3008EB200B0DE7D1 - -Len = 1915 -Msg = 5C6398D4A6AF6BDA6C973B04F9E7E8A2800370250D1B5E9FF3595CC651BB246E73B0BF208E47048415EB6FB3C09CE3ABCB7C996C06B40E18EC35427AA1E5CF64CBF6F0C07B02E98EAC25C141ABE224D3989C3A34FB6EE68934875A40BE3BA10ED0BA7DFCEDE81C6B7555F6E5C9D4B9E92436E478D1169D436134F618201027B8131575CB8F057EEBA566FB8A1680072D32E60A978693FAF9FCBF82DB37B91F174FE5E88D625F2017B61B5DB7290FC6583C3C933B1B0A745C30D780AF04CE6E777FB258AAD030B3F10EE1B4FDE47026332A49B9C9DC5586133C7F5D69A1EBB0E70B841F72FE1AEA8A7A3D39E3C9629320 -MD = 9BD37F9B602384C3DD6AABFA4DF591F90329961030FBE9F023AA840B0FD5DB41C96C7CB143DD531E0A1E486F97DB841D - -Len = 1916 -Msg = 893576B07D2B49F97BC412C47E1799E6C620124B69290F2C49EAE0739988CD48926A6EF536BD3B0C970A060426BB360FB5793C8371E61DD70C318A76FC993C77763963831659394322E579EFC766835F966B0CC188032C8B6856D02BB9FE5FD7C388914D72C2AA94331B4AA185DEC2B3270C6B1E5463DF02CC4C9ECCD42AD2934D4D1D821615F965348C0CAB875219A61C1E8C12F3343443A53A66699180153B0525F95D2E3A655278DBE91C09F102718A90B7D5A4ECD6D237CDB9B0154E373EC89B6C1C705275B999D8C9A1D2F1A8D075038DD4A98EE9E156715CCED4D859B4D56B41F8767FAAE886CF5E67223EED50 -MD = 53DB46FB0329C9653813690EC9E5E1FBDAC10E73F175799322EF057F8D2F3F9654DB5FF1FDA9D61EA51664B68C94BE45 - -Len = 1917 -Msg = C67B666E8F9A79D6B28AD45690009B68E78C65AC5B1D932B4CA91C320DFB4A5954E5E2994F9E52283229C62E91F030DDDA4FC3AE227A85BA7FBB96823EAFD70E8B98D299A40807451FA5778BD0F055B2D20FEC21FAB0D9A6D5AD2567A5974F399F28019F45964DDC7055A49676DA6E307E36A098C9BB2A01154BF7CF6D0981EE82C8EDB82FD36989795FD8638D7EFD1A9B96612AC7DE5CB00C29FF0280EBFE742D02C22D0DCB0702EC1246FFF5705C14462850E2F818A9FC8A596E5FD6C8BDC9B947BF76A5BE37C0727A8922A55D6BA20491FF4D6843EA0154DE71FD6EC129D38E2370124B5A26B47B247D1D7C3B1008 -MD = B6728DF0E100EC5F12533408ECD78F8411CF786A8BD772A527A9EDE8758F0D92400968D1EDB1B426E34ACAAAD1B47CE2 - -Len = 1918 -Msg = DA9269FAE1BA9E76EED4C864050ED952DAFC19882DFF9A3373228B31AE0190E601E36ADF1E791453A1153B48EF19D903772E062E47F6D887341A213AE96FCEC5CB9C2022A04A469C41D06DBC71CBB5C6BA2583574878B84B62E368BEA0E081E0304C7AB441399702536AA5A17BB13AE368DEBDFB83F560E65C74630DB48B146166E09F3AA31D8B10F10F4670EA60EDC1632CA8580A2345C04173F469B249319451893A198640AC2CB0A7E3472A17A19169C371D9991D2F859238C4F9EFBF980E05F26F3C9E172D36B8FE61D4337B4E1AECC4039A4103E7D2BAC1A7080F1932D8FA4FA0A2075C56B2F6BA83B63CE9D39C -MD = 06BA403DEC80FB3D00391E328541673A28732C5305B49F0FF533091E99AFF689D51E9CC0D08254CABFB99E162A66BA89 - -Len = 1919 -Msg = C8C9D74ACDB42DAFFBA0B1734BEB5C54778D7970F2226BD9C8EB24E3EC1AC11E982FA705F0479C049A9B6046E85A269A258C104CF442C8156D431960D021A533D73B709B8D212C221AE2D03EE7A6182117A823A9E3F3B4CCB43FA0DBD5B238241CCCCCF05CE5C62C3762237B6449779635D992D2FB730D2DD382B2E61CD5F23F680F848A4162D80010E87DCB4182F192395D73B93A2040C0FAA3E404AA1089E40E1B0B08A7F08036CC5E4CE1CE90F1C10DE4BCD4887564A6FFD7166639C79588B763F95101A32AFB77F727C45BFFAB4C6238C04E837E513E12A88C74B940EF933FF7547D08B8ADF32F8CAD5F61C38DEA -MD = 1A1188E20CB47AB21C2A3D0527016C3D2A803A9FFB88D5869B0962F26F1F9E2EB3D2977E1C29D83D1A2A3A258E5DECF3 - -Len = 1920 -Msg = 5FCE8109A358570E40983E1184E541833BB9091E280F258CFB144387B05D190E431CB19BAA67273BA0C58ABE91308E1844DCD0B3678BAA42F335F2FA05267A0240B3C718A5942B3B3E3BFA98A55C25A1466E8D7A603722CB2BBF03AFA54CD769A99F310735EE5A05DAE2C22D397BD95635F58C48A67F90E1B73AAFCD3F82117F0166657838691005B18DA6F341D6E90FC1CDB352B30FAE45D348294E501B63252DE14740F2B85AE5299DDEC3172DE8B6D0BA219A20A23BB5E10FF434D39DB3F583305E9F5C039D98569E377B75A70AB837D1DF269B8A4B566F40BB91B577455FD3C356C914FA06B9A7CE24C7317A172D -MD = 7D9508FB795811EA1442DB3ECB779CB0494736E7123B252CF88A9A0B50D57CF00B87A6C4FAC27F821CD55979D586AA39 - -Len = 1921 -Msg = E1CE71B61ED330EEFBB09C280FD34A878F0378A0BFE2A046516BDA084DE38083ADCCBF42A6820DA5D46F1AB062B1CA433BED4DEE26F3D7A094F90BFB8A56EAC4064CFD3D5E5DBEA334D2984D4BB148F582B7CB64C82970AB0C4A947E28646E2742C1C8BC1C636FAA3A21216C2228E644FEA74B8E7CDD3DD006757317E1E5D4F2A67DAAD8D868D8831E36EE6BBCD7DF34FB38DF51DB43E26EE8E6C493057841F3085A6E825C4DFC8AEAC9A5B311A6E235FEFBA6C8F8D3EFF658639DBD957510DD001D2D18151118949B80B6BEF15F9CAD579ED30C3B2C95DAE83EACBFB5EDAD3A42C03DC8C8C7A713152CB065F28B537100 -MD = 06CFACF43A1FC917B1246419C1B157A15DE2FC7934BA511412B41401824621EFB05CB71EDFEA8481FF005D8C73046FF5 - -Len = 1922 -Msg = 3BCBD35851DA712C8C509A0A03388C743587A1C36055670DD0B5DD3144DA20CE739E417E7F197E72B91790D3B49338E667EABA7DAA04BA6046BBF0F1763787681BB487D690239DE655DA3031B7DD39EE1FF9C550ED6EF15E742AA0DCBF56D6A05782783A003E5CBFC272D3F71BD641C54215E8A6966A252F8D17BD5B208F25D7F8F91F4754D9B16184B333D2ED695483F99CEDF5224C4BF1F0F44323A9B3F801735DF8B284C072B4D7C3BFC31CBE1DB3FA2FB45A595B9C9FC8D98D8429861DB1D0EE3EA484C61F86877EC61AFE5DCBDAA38818EF002A4A4EE8305FB1109D3CCD222EC5F3B2DCF951A1B39FEBF19517B7C0 -MD = 9F68F86E270EF5BD7B900EE39319999AB9012FB47C79F2DCED999DE60DC6CEBB986EDFF6876F08F63A2FE84991C1EBCE - -Len = 1923 -Msg = 6C48CD3CE2E401AF5C680E91EAB0A386B90520022F017BF60A5B04A1D52E6618CAE48C0CC3A2D7F16848F9A372E4D0067E73E1183370220D73549E9C510F02BE4044761F82B2D9B227E059D3ED089BAAAB8FF61F65E37495A19C630AED17D8F42C5D24C109AF39E528856654835D0CBB2C55904EBCC2B95506EA73D11A68EBDDF0841F14092F2A4249EB9048BF7E26D4F929A0C26D1A8EE98D3ED6BA5D7E0E45E3A7C59435A7740D1D6D6BB638ABE271554DE4F7E88730BAF804F454924D33AF28FEF287FC6F50199BCB2207DE7D1C962D2E9555160D22DBE3C32FBB7733A669F8783F6551E8E5769B6291AD00CEDCCD60 -MD = 7DB8A0F7B98319DCC4DA93D736B43C315D0F98871EF70FDABBDF5B7181515A8EACA8150A0115382E03ACE414E1AF3FCD - -Len = 1924 -Msg = C0F2D732005BCE3A7572AC90EC56AF2AA22B3349D2DBB534A4D88FC7C9493130E380ECF6B9244868F16DE465C08798D4D6E5087346C7AD26629C7075682DFA28D2FE387E99557A1C39A8AD790FE665B59EF80ED0ED784B30C4DD5645C9EC6510B358AEEC8AE20FBC8DBF0B2DBEA557CE15B223F33D9BB23E38927021DB61ABBD26DB50C4FCFB219EB7CD540BEC18D23F60748972C58F7F474EDD58384F1C3411D67ABC5B5810E95CD2648463992CB4EC6AC8EB63DDFF8BF6890A69B3249DAE5E7459A489A5B66D899ACC09525177E0DF731949AE98C327B942AA6789A6DA286C7285A791F0FB2D3EC42C2EABCADE008520 -MD = 496C0BCCEBCC1B4002C99A20EEA6C85FB6794340FC5905E59242ACAE11192A9B88B708C3B72F4D08B3CF88B3FB394C93 - -Len = 1925 -Msg = E851A3020ABB0B3BB3D4A4020FEBCE6F548F26EDB8CACE828658D444701AC43931402030EEF8814002254E64ACDFCE8DBA162431F032027A27AFA93F82F71946D97BAA83AB79703DB230367952819951C068FCD0E30736B9D69F87620DC3EADD25F31C6206D7BEB14D0841CE44DFB75E69346D96CD9FE9B9398852F71FE25B1CB25DD7B8A96128BA039374397EE4AD1B22789D6ECA2C1CE1F3A7E637E2C7E78EDC880DB188D7AC6886FA3576DF4957CC600CB66783D799E57B7C4BF7ECEA78A741589B2EDBBACBBB0489F3A66F14529BF20DAFCB831A885F7C35016B768E7F2434D68A941DD86599C7A1D412D4142035C8 -MD = 6F0AAAE9608A42CE1420DE67D6F9CB5F783A590095F9C2FB71DE99E7A6D60C6384B758C81EC05DA5F37C5E32C4EB2E21 - -Len = 1926 -Msg = B5D87282661F6A707A64532CA1FB72C7B80B47989810A15618A44CFB71F07D53B24D6D80C45EC2BDF485743C835F3C6B057DA0769F07462D1672A4AA6896B047B2010EF16C54ECC74C522FF44227F8409CB86F3C8BF488739DBF89F5B40477C48914764BB98E4A03561D74A5B3C11324987F0986C191B00BC5584EAA710CD7A9A1A44B108E8367FFC27B7F9AB82CDA038D38E36D4AABA71E3D844FD9D356AF4B8AE611BF842CE819582FE64EE26C5DABE4884519FD1BD8646A13ECB0D9B0B6F42C0B9632BE73B2C45A8912BCD70AE9F5D576AE77C9A1CACE95DD320BF9FD252BEC627C227AACE9CDAFBAE0748ACA750214 -MD = 45EE8220A2CF47309190E865A3534DB8616E6B3327426F0A566425584B3FCC012DC479A9FC045DCC306081B79BCE8232 - -Len = 1927 -Msg = EC432C662CFF134BCA2CC20ADBB5A8AE473BD56F229107C5F5C830E5CBC92DB0367677304E4AD2949E93DEF6B5DDCC6AC2783ACF8AD34A8F7F8CF3B8C79263AEB131ED8BEB2958A593868F5E8163216B363865693CCF7B730F36F948CED775D0FB1E6A76727845A1D25F140F3DB68F6D3CA9F6B4D2985831E3287DA61219530EF21BD82BBBE28089D1E68A4C3DAEAF574A5E91F15A68AEEA7836735ADA78A2C5731CF1129C94398DDC0C2B5AE53E8BFEBD81AE08BB2B91FDB36C770C36FC77807486F19AE716114F61B23202F7540BA27EE2F72658EE6F8E81F11BDA44921544E749EEAB9ECD5C7BF857F83945D3FF8F8E -MD = 11541713420C768FBA13C9F78D0D0DF11037BD29565CD1807FBE2436C8C03358A87ABC75497E38C41E4BC2BF70D680AF - -Len = 1928 -Msg = 6172F1971A6E1E4E6170AFBAD95D5FEC99BF69B24B674BC17DD78011615E502DE6F56B86B1A71D3F4348087218AC7B7D09302993BE272E4A591968AEF18A1262D665610D1070EE91CC8DA36E1F841A69A7A682C580E836941D21D909A3AFC1F0B963E1CA5AB193E124A1A53DF1C587470E5881FB54DAE1B0D840F0C8F9D1B04C645BA1041C7D8DBF22030A623AA15638B3D99A2C400FF76F3252079AF88D2B37F35EE66C1AD7801A28D3D388AC450B97D5F0F79E4541755356B3B1A5696B023F39AB7AB5F28DF4202936BC97393B93BC915CB159EA1BD7A0A414CB4B7A1AC3AF68F50D79F0C9C7314E750F7D02FAA58BFA -MD = AFD94B061F354B04D0718326D7E10A6B598CE31CC39C52D265D6CF04E4D9EE75CC200149367600312E7514A62F0F0964 - -Len = 1929 -Msg = F6D60894154B44006CADFBA9450BD0D46F297E634844235C322E7A06B2D1B335F69F4EEFB914B4674CBADD6AE48AFA1CD9BAFAF884417FEE5F36C54AF8C34B8AD179206BCB45BD858FE64A5E3884825E90EF29489DF07C69329CA1B4D8BB5E638ABB382D8255958057AAFBDEF0899A5E470FF7222DBAF9B66B1AACF9F407517870C45289A20BE83E673E96D0428B75C8C98A30A6FBB4D6441890ABC54C45529BC7E2C78F167D3D1DF034C360D101444798D0C9F1F65A3B7E3D9761EBB5826B81B749F716EB428D845C5D5B9F2BA8B263659B54FED4DAFDD2DE91DCBB0CABF7C70D827A37E0388EF87C90420CFE25167EE880 -MD = 643C7FFB5FF75955FE2B7DC946EBF302816ED9D169ABA31076D4CC41FD96DC7C4F9B5848C30A51B8CD4481EB8CF0C867 - -Len = 1930 -Msg = D01BEC496170470B95E81ECE9EA0A39FCC640FDEE3DA2E94582BBC0D51C7E5FCCF7C10728D0CDE4397DCA66CD95281A998B6F0025EC854A0697D54E09082F387FB3593871F12B6642FBB302BB9AC82BECCD1BEE69ADBB25A82CB11A42D0CA2F057052286746BD93F70B3774E1AE0FCFDE5D1E870F0A0CB380770C1E352F2E9CB8958496EDF7389F9B894D7AEB78D6FC1933FBE6CA5938660C5EA1054EFFF2F17F8C6C082A9E776B0FA244020A0729BE8BD5AD4D683E9FFA550CD928E773588385CA8501EB7F47AD60D98AAC1B518477C78DFDCC2A680D1F596273972528CE90A68A8AE4D9D3152AB436003D684CFB83C9500 -MD = E76251853756514D1C9DAA08548BB29363DBEFF9405FD56367AC43BD5D31BBC273F00CDC0DD69D6CD8B7859601297CD5 - -Len = 1931 -Msg = F83EF50679FA09197746549D69559A19D040EB7B625BB41CBE543257D605E3329B19B65DE3884B55B3EC22A899079DEE016EF3D8D2BDA07D85218E0D91D1A604B71F97E7C77FB0D4E685AE7FEDB7C36344DF1EDA1879139E0E723FE5AD4DF1EFB6BB56661591ABFB17C4C8DCBA76342D9547CC2B7F0B8EFE5C6704307538F1794497B01745FE00C24E83CEC5ABDDFD37422A898FA04F546F66529D66338E9C16D70C34FD4D5C4695BA79091F6EFC5504D79B078994CB12238D11B078F4AF709F3B7AFCA4345307921570791F755EDD739CF5CD846476FF5F3714F578DAED1451CB9F17BF8931FEA89D693275B7A0FD775AC0 -MD = 641E5BC0FE45B4FC87A0DB9679931153B68AEEC45EF7A48EC08CFF095FCBE22CB9DDB3432EDBAD7110E99F982990551F - -Len = 1932 -Msg = E397D0A65D8CB58DCA01E63AFB0E80D42DD48A722C042CD0248155DEB09E4520B20E2CFC093B1D19B60DAEFCDB7D5AC389531305570BDD10F7CEC6F2B7505E651880EC29022E954062E220626FFC2D0BFA30E4F27A8FC90110D72847562183A5AEF08623EF14EC1F760A11544A536342107675525276A97F07B84EF89A89BC6585DBF79C982203B26F1C73D5620D5A5AEA82DB45B87E2E2D096C70593E48301F7D13ECB5A6803A978E709754631F2CEBE81E0B24B00521AD7D1E749385944064E7B437C18C3B5EC81C40844D3EDD7703DE23BBC351EFE62035C20D6C4A0C051D06B88A51C0594CCA1923FB389BF63589AFF0 -MD = D2B73F23E3A13129D3693E70E87D92B089410C6926B105F243BD8C724BA66FF066F1BE61FFC9021CBC9B71DF32A20394 - -Len = 1933 -Msg = 41FECDC28FF9A09A9A50831800EBDC57E0BFA56A6BDC15D110EEAA608BEFF84B87AA7D18DBD19F4B9AB3104FAD569B49EDFE479E42ABD108A0B3B46EFAFBEE1C36A4C46545F26FCD830156FE3A2413689DA4453B28FACBCB6D77DE0C9EF7A19DAE60F9625A833A77A39A58A69F2EA4FDCAFECD7A6ED8A2DAED0B5D21E5A72F2D2FE57CBE170DB151919ABDB92266C5F3D36BDAA93FA9924E7010914D35FBEA35B54BCF1C9A2A60CC5C7874ED873EE98B0542A4E63A1A9D6735BFBC27D108003F0A960960C38EC286C560BCBA0FE2945D43B571BE0335D4E0ED7379047F35B2B026DC0A158E9387A04BF369E1DF6E414F27D0 -MD = 596123C4E51EB4AF4BA05DBF5030D17E75B3539D90245D5A8BC9E295D9B1FBF13CB48635F12693315AFA1160EBCFADE3 - -Len = 1934 -Msg = 7A869D4DF91F80B8A8B95AB98D919C84D51708E420A44BAC3CE15AE2865D209E4473A25093819173B75EC7D2D6760CF177301ABC5ECE66658BC64B0DC64B83E9B609CCF9C85F3A2EE13B48E1D79DF6D56F9D5FF5630ADCC4CEA8B9E9414717657F90511F3F6DCFB04533DA5B1989AC0637501C0B38C47FB0059B7C3A5E0843D51B7F3D50FCEDF32B7667D82696D457AEAF9885B332390863A0566CC1827B29C7FFB8B0E808625F41672EE698A892DDFBCA2FAA5912407C9EC646B23E8A3449D47DA8DD3DD116B6304D75667880F07D5A3E71A2A06B8E8781F9B49B845E9A778C422853F303E0FF3326FF14300ACE16BDA68C -MD = 5F1F542260D0835AE18848E81F82F4A66713CBECCA6E52A417720531F8FA2FF65CA9920F1DC5FEFAEB5C29467F8286E0 - -Len = 1935 -Msg = 7DB18BB52773D68C0D01A7D22F43EDE79401EEA2FBD6B8CAC5A27C095B17D757423CF06D69653DB9E8AB88B0BA9D7FF8FF9A7127D53B75816B0ED9E4D418DF5E670FCD67DD1129003B424307794B74E9C21A43CB77ADB1FD3F31980A7C4D955FDF54F9DEF230D560E0C7A0DCA0D8F4E50BA443E5BE91211A16D94CEA5D1D5988BD6C6B09E0E80CE4C84B55D3F9F5E584B30E2FD7C42DA1F07FD717A8E0F1AA80074C8E69990FBCB870022719C70B4210F3D538C3E1F96428E56522E9DEB3A33AAAFD71D06A16F69DA49A94FA15E13EE90BBA294E7A7D0FE376FF4B07596EEFB517074ABAB621DFA2F3F8099A167D2BD601B4 -MD = F06886836B47E2225FA4E7BEA50C40F8AEA7BA49718DFE35880D18D3CEE656CE42410960C62E0D76C96AA26A25B86AD7 - -Len = 1936 -Msg = 5668ECD99DFBE215C4118398AC9C9EAF1A1433FAB4CCDD3968064752B625EA944731F75D48A27D047D67547F14DD0FFAA55FA5E29F7AF0D161D85EAFC4F2029B717C918EAB9D304543290BDBA7158B68020C0BA4E079BC95B5BC0FC044A992B94B4CCD3BD66D0EABB5DBBAB904D62E00752C4E3B0091D773BCF4C14B4377DA3EFFF824B1CB2FA01B32D1E46C909E626ED2DAE920F4C7DBEB635BC754FACBD8D49BEBA3F23C1C41CCBFCD0EE0C114E69737F5597C0BF1D859F0C767E18002AE8E39C26261FFDE2920D3D0BAF0E906138696CFE5B7E32B600F45DF3AAA39932F3A7DF95B60FA8712A2271FCAF3911CE7B511B1 -MD = EC63CE9DD979FCD132244BE11A45DDB1D00FC8F80160B8CC456F5C5EB89E0C3F675B28B92DD9E6CEFAA5DA57B4908646 - -Len = 1937 -Msg = F1672F20DBF2C8F24A2683F43D202D70C7328A600DE10802AE491FC2EDBD56B29138807A423626679B0F191F4948B1606C547A310052F325871F837C0DAF5B43485E3799952F53073D6823D0B69133619826DC50632438C65E32D7C11D402496FECA7553D8A4B93EB669D2FDF87ECD69E1E24AF18A3D8976BB63E33F48809673E390A151F0CCB0F2F551D89128F95B6B3697DFBABD98D4E176278B7034884EED380F5B0BC287DA7F28737A9096CB017928BC72B7CC603C1ED0B3C035FE49517F77EACF6209DDE29DC7495DCB29A8ED6ED86ADDA488B3D53685BABC734CD5BDBE2A9D4497F7B337A0B49C65496CF1977E356280 -MD = D2BDBA7919CC9632F8036D6E2EE3EC3200FC68C5692BE2CB0B0F013E9C31F8A1F82D16A5235736E29D010386D095807D - -Len = 1938 -Msg = 1AEAF41B963F4372F9E9B283284F91E257A93A728E7DA3737990BF7F6E62F5A504034AE08E2A4B13A07B78A950BDC6C677D740E32673583E0E996440ECFF6F6F5E734FCCDF1F94398E8D837FDF99F8811319DFA90BA5F4910B757F9926DCEB0896B08AB66C874B5A272E0E590803B77F5D0189FFBFBEF81CD305F7A8749C4F6FAA00FEB58AD242D68DE4B100BB2C30512AC79A3168D25AD0AC4718DE8561DD01CE6F38262B835728A85853486357486978A311FF1009082D4C3FCB7ED3E759AF2E7434669CF569E1326CB269BE5F51E20F1591143D7503F64247BD9C36C65122C2702CBB4A9A097FCC0367C0BA13F607F06240 -MD = 9319B2C2A8BB5956840BD4D4649FFDBD467F12084ED60DE7D2827FE63FBEB719220F7DBEA9BBA4FEFCB0A6DEC3A48B67 - -Len = 1939 -Msg = 657A2AE32158D7A4F49CD42430779EA1403B434ECAE5229E8280AB3154F2787840F4E3797682B8194D95E0D2207D3C68E7F92CB9F1382C4C79D57E0D78F801F32E77CA71A5982E1D8077723B7D7A96576108DB019F9DD4F314313CA80EDDA39BFE9AA9CC60C9AC776CE720F625842C4EDC3CDFF27C90968B7D5B5F51389C4B7E43636882A531B033BB25AF7747E780AD316E71D4B95D90974185D00DE7A07EFD6B5D86CF06CC49D986CF3E70574A84EA183059C565DC8D1B2676ADE9983447423586C1486AA1C2E0C7958C27075842BBBBBA68025A58D35E85B3699D6CDF95758D088C74ECDB5980C7BFE1AD0F73E1DEDB8580 -MD = 27383AC3017E8245EC2E636AF1B15A6A1085092C6E53A81F658B7E8B8C1FE9287DAABC6076633F579ECA732CF57F2790 - -Len = 1940 -Msg = F3B8DFDD776558056FA3FF838F1A97119A5D7A7D5B351F1BBDE608E59CB534AC068A86B37B41BEE9CE0E032948542F2125A89BF502612A813D83E3EE50559724EF21B0F25BECE0B0EC3A96D207C5C34505F0FC19484AEABA1129293530148C58379E00BA13FA7C241761ECCB19039224FBA9EC2EC1F7648AD0FDC6EF0ACDDE258F76F97D8049EF1E3885E835CC9A93F037763470179AA2905197AB76CEB0E3FCD46CD023EC166932CB65B1C11F08EA57AFC68D536F9164CEAEBD654C1170F8901C26041145DA94719274350C86EB5AC33FAC19B01E2D1B178C0AFAF80BBB4D6784CA00F5D7D58B0BC6D9DA5043AF55176886B0 -MD = B5FDEE9C049749F971038A79471BDE9E056A27796075888DC3D9CC1B878E005A548120ED0327F978C7020BE65160BC6D - -Len = 1941 -Msg = 3970E275ACB10C4632DFE4909D143EAAE1E2F39720B73B695E5C71613088D7872165C98A6ACBF09A746C05460F33EE8E00B1FA46ED219CE5C8FA8788297B9E3C6A96615970137839B03C352204CB21489921F774A16E3EBAAB9ABDF1A19CC6321DD6EFDD25C0253403548572BB4417663DA33EBAD92243E6B9E8C0F97B13B884126262409D2A20CC01AF3EC2F238CF51A1E3D7ECE9AC4A98C0446210DB4CC4993274494DD452D46BB66A3A528713480AED5AF3FBABF6BE979EF50ED443438F795A087D400282B6E0B5B52EC747DA0E2C5EDA9EB002426689B115A37CCDB46D6440830B9BDCAA59078F62BA0635360BC85EA388 -MD = EA0E749F5324F5C17A37968DE0DDEC87796C47FFFCF954AFC4BA8B71F7F6642CD32DA91FACA73CBE3EBB85ED6044C7EA - -Len = 1942 -Msg = EEE6D0C949C72BFE8F83AC35A5DBCFB50181BA1BB3AD4F77E2636C68E1FB860A6AA0A0C21B6160A2453478C9C0769FEB0E7E6D122E67A7C78CB1ABFD0BCDD569ED8094FA1024E78913423150E0BA500615DEC54846F15F9E297E8F1C592AA7802F37E8F8A29892BADB5DE3E445946A88FD67A657A69B6B9098C6A6CB08286B04D541B88333E59CEB78615B0E4EBB54896E956682015FF77FBCCA79B1F68AD3FC82C9A56E5A68C00E4AA795C9C97EC7EE618D6E5D977B9EE1DC94E363F073D02FF9AE85554DBD7940441275C082B560CC13DEB402CD8692EA6C4A690321EF275862821558255E73BD8AF9309B735ECBD810C0A0 -MD = C3003C9A08C5662880878ABAB37F69912E428C9BCC8E07D9F2FD04DBAE9563173A10AEE7E57A8880813ED663898F8E48 - -Len = 1943 -Msg = E93187EA359EA34D538A88DEDF73F6DA1B62D445EA3C520AAB03D12B127123446DC72D1092EC3A1549E4BE4DC4BAF9D73511244D57A5D9218101353D3731D464510A74FAE679F346D9098DDCA12B9E3D23BBCF7A23617F326F72FF75F7BA6842D55D71A2220FD15F632225B66493220ADFD891339AC6C6D769008BFBF5A19E27D20627E16D5A445DD2C8DCC1AB54CF133C7109FB3FFCB6000AF08AB4A2C9161F883FC2A1FB7D0CBB5C748D6309660C1DA9E22ED9648E57346E02D1DD5D0105DA6413F4830A921869D869683E8D584175E65724B890CA53E7879F390C146CFD4E884BF681C58403944288AFA11B79ECA3F37F1E -MD = 2B7F4304DF878877D49633157D278A4C850AF170B5B0F57AB938B07CB44EB27C4D52149B8942F9899AE722679FFFA04B - -Len = 1944 -Msg = 03D625488354DF30E3F875A68EDFCF340E8366A8E1AB67F9D5C5486A96829DFAC0578289082B2A62117E1CF418B43B90E0ADC881FC6AE8105C888E9ECD21AEA1C9AE1A4038DFD17378FED71D02AE492087D7CDCD98F746855227967CB1AB4714261EE3BEAD3F4DB118329D3EBEF4BC48A875C19BA763966DA0EBEA800E01B2F50B00E9DD4CACA6DCB314D00184EF71EA2391D760C950710DB4A70F9212FFC54861F9DC752CE18867B8AD0C48DF8466EF7231E7AC567F0EB55099E622EBB86CB237520190A61C66AD34F1F4E289CB3282AE3EAAC6152ED24D2C92BAE5A7658252A53C49B7B02DFE54FDB2E90074B6CF310AC661 -MD = 86301FE98F3FFABB0CB0085AAA1EC61BCAD6171459A8623BB780EC32E46F52649946A421EBFC7DE90F0E74EC787A3E03 - -Len = 1945 -Msg = 79734C970C947EA9B10A7909CD077AF990A1305F88F918FCEFA11266A5C6B6DEB5D3D3C1782F0EDCDD3C7BFD64B4B38C08F75BC13210261859B0D062C777AA1A8140DACAA59260781F27777799C462E76F59499B18D7978B717955BAFEF3476C626952B91F9EE67C2E8CFC0F61CAD2DB8BF1198EEE8DD4B74AE5D28A4617091A1461DE098F5E1CEA67B7E387BAADF0BC08D3F8CB150F388395BA926F2C4FFE923DE7218093FF709C43E300F0DB38E79C6C07BD1134902E768A76FAECEE6B3FFEFFC90F498E2BC78757852F6D2B4CF9B3EC44C185B770B39D17482C5A547C4B4EED24748AF0A54553392542EF58752ACB832B9000 -MD = 2E6D64C4233BF78EC41EA437D2C58433DE789F48A5837B0F5DD3E9C6188902063A631773F4F01814CE6E991EBA6E5629 - -Len = 1946 -Msg = 471255C92FED4F68F468A69B5B71B02D688EDA01FB0F12227E8B84C10C80462126D821118F4882633284574456F49C7E1849C5044191748E0162FAF81F239409751BA227BE04E0D890CA74FC77B5C5887101EB09761B445C56530011E3518659C1521717A9273CCA06A7F287423E9DD5FA32DA7FF996EC5A629B4D908A4BAE72FCB3CFB4F9F27128EC9E566BA59E907E54E2FBB8243864ABFB6FEF98CCB4B715FCFED874AC30FE850273E53D879E3B41D5946011C60D6C18BED388E0CDBFD8B55D25533B7308C5A7F9B25D56602543BB74481E142127CEF2DE20287DFAF62375606557DB8365B81EEF89CE7E1B3D4DF3F1B01DC0 -MD = 5CED34804CFDADEAEAEA520513BE93CF5B54D98F73832780C98A5E83A5FA013F9B7E8F0F66B2ACEE68EAB5BF958E118C - -Len = 1947 -Msg = F2A7F95A3286702B02DBA5DF8E6D9F76DBFBDB08A945A3CD202503158F7AD59D4A06F304CA6C1329523ACBCDF43B9419D612B0D1BFB9A764D0C1588C3A9302202FD730B85E38605119F9C0326C38EDDC6A126AF6388BBFE3BA486F4A5820974477259DCE99678EF608871DD08A6814001ED99CDEC13A87650F449DC7DA3F476BF19A5FB0D88AC65BE45E5A8B94CFB3408C371B9A4856099C1865047272F8252A69E0B4650E432084FB53E1E583BABDB8896EE9F7E037DC96C87787B5CC4F504F8C3E649139EB5CD2B4292EE5E5A31C7927DEB948CAF5F30CE7664702DE79537A46CE8C5EA95B39BA1A05870C487E781D9A549B20 -MD = D627DCA880E14E88BED4E0165162C05C6FF526996E9DF3A398B6A05CE421184CAE26E7AE7F5B61B147BF06BAFF086530 - -Len = 1948 -Msg = 11281730B07493309A2EF913FBACA2D4277B2A5D405925839553C7363B2DA90C60A6526AC86363CE6AF778A0CB7E4A1D9A7DD75E16A1DA94702EB8EB8382BBD0389D436D05B8EB303402290A43F240A999887C169B8726B0B02956751A6029C8C3BB2C07AD102B37A0C52CED9220B5B0FB1A7F985075C6D4C06500187092E09D8A9A1749262523196A42CA1046F01378550F60924084F6C9AB24DBCA521E7D6957411AB83B9FD856A1E08D9725D363F28B0CF032BDAED78D9121099366C7A48003092B3B94E97EF04512A9CA7B7968DBAF134EF08DB292658F624A54674FE7CB79F2BA47D90093C867F4F06D33144DF9E5BE1370 -MD = 4C96186D7DC953B45B4AA5A2AEB19701FBB6E8251ABFB2E4C1D09238FF5CDBFDF3F70264940F5C34E24C6E79A7D0A5AC - -Len = 1949 -Msg = E5073AF60BA51D98E8645F20A209416A2391A365A0B3A78A3601E4CD1130FCDC846B32622475A9B601AE33C8FA463D8D152C0846040A9A4BB0EBECA1B9258111E886996049F421133C7D21F2ADA0525A06EECEDBD5ED8FE310D34EF8C71F27C18AAAAC2EE1E38BB080851383DA7A684699F80C0A7BD51A0188311C12AD5A058CE5540ADFA3A425CA5D1C00EDBBE3A5695AD08258A796642220C5D8BF9144B351C3B5753E7EA77D46903A4733EE24B4989D797E2FC6A187BC0AB855CE71A650A13BF4B64BF5AA6DA142320E1367D37439E99E2FA95DEF311F596E682A01CAFBA051D515C31823A93B9C71970843568C379C073578 -MD = C3EDCF846CF2C4759D95DC1B7E0A3C128B17EF129ECBA8CC9CBD2E8BC1D3356993D18E7EFAAF56BFB98EF59940B6E59C - -Len = 1950 -Msg = F5E87603D3DA08C7C37AD0FDDD62337B423B6FB0651236F818458FF022F7B9FF714E352E196C7DDA164708FE21ED7223CC0C4670E3BA27667ABE7027BB471562C83BDC247EC9313B9A7E5F5B17DBC3B39B258954814813C427A9EB3234975DC3D3536AC42FCAD7C18435FE32A5D5658DB28BE1E61451137C677FF36834188EB6A6631FA27B2F2292FA07386B3978462FA263EBEB85CD16F30A0835512693AAC397C55E401808B124B5C4D1427E4EAABD826D74824C036E857250FAF95BF5011FAA9D7EC93AA84033518AE0E2C283DB10129B43E9B33D47C6C7C8909D58C18EE95E19497E387ED9646826EA2958A7D4BD07029F14 -MD = 4E129785A25268D61CB5F5957A4896BEBD45512C5FA0C40415FE7B8AD99A96940B94C6DF5D4858038AB9F50BEABD811C - -Len = 1951 -Msg = 39696823C4BCC5F0D504B14D276F56B130AC9117288C81B6A8DB585A8CC436D300DCEA5C85118F594184128BE8D80AE307DAAF60E42418A34A626D4CABD960451656E60565B6519DC4857FA9D11D2EF1D5D162D95AD2C7C806218A00A7D8B71F0C6F2106173D95C77EBC8922A9C81816283504036697EE9915C39F844E2BE638D6591233A87995F98CF3433DD47D0A4613D6BA67B4EF77F855D31659C25C345CD6FC3ED635CC443622821977B46D56EB45062D4508BA1210F7A70FD01A2E03DFA5134167673A31ACC4A42ABCC1DC9AF7A409508F43D99163F604F3A32780EFCE330C03A1CC9BF5AC88092C914A23A27A96E5161E -MD = 2D477031ED69333D5AA043E4752D75D83103EB6E36E45F613B96B488C83D10A3D37EE1E50F2D7F0327CCB7A77B1BF00F - -Len = 1952 -Msg = 2EDC282FFB90B97118DD03AAA03B145F363905E3CBD2D50ECD692B37BF000185C651D3E9726C690D3773EC1E48510E42B17742B0B0377E7DE6B8F55E00A8A4DB4740CEE6DB0830529DD19617501DC1E9359AA3BCF147E0A76B3AB70C4984C13E339E6806BB35E683AF8527093670859F3D8A0FC7D493BCBA6BB12B5F65E71E705CA5D6C948D66ED3D730B26DB395B3447737C26FAD089AA0AD0E306CB28BF0ACF106F89AF3745F0EC72D534968CCA543CD2CA50C94B1456743254E358C1317C07A07BF2B0ECA438A709367FAFC89A57239028FC5FECFD53B8EF958EF10EE0608B7F5CB9923AD97058EC067700CC746C127A61EE3 -MD = DDF8D547BBA4F43D8864CAEF1B1BED77AA12E41F6886A5D8758C654B7EC1FA5B0E77BA4E7680C7830DA161E14CB1E65C - -Len = 1953 -Msg = ABF669BCDE5C63620ABBF5E74E8C613BE25B9F7DB855D2485FA0EAD7D46FEF857A755DA6F1ABC1ECE8E83213591C6EF5CAB3C346DC317332EB35A0127F1E833A945BC260FBF9404ED8B4A75B2A2C9D8CD69661541873B3500847861C803AC25208FDA7E896DF7B586FD018EF021768F43AA5EA0E5861843AACE2847263813BCA7CF762E6BBE72468A688A0AF80E9A73DC11C74524A13C0E8B592EB8077F18AEE77D0F106617799187EA3512427126B59904A5CDE4AE6D20034B6DF59C21DAAAEE7BAA7D99B13C35B58BE23406CC1D276A65042E9E78BBF42DF8AA602DB2BE09852B8C19700CE0D7519948055EBACABBF24EBA16E80 -MD = B59E71C9FA7D5FD6B00112AB013FBEA6B69D6674BB994F0E6AAFF2A1925C16456E0002785A4EB255C0678E53BB16F347 - -Len = 1954 -Msg = 16410D74CB95F744EEBADF9BC50688811C4AC9131DC59AA3761DD2DAFA8A2C02E3E4021B613B3E971CB5ED40ECD2161B3AB9161D8E30F8A227F497E8721A88D67FB0712639823F824426FBC1FF08E27DCFD4474E54F9E6B4EBDD57D89BC3D5A847C55C2AA1002A0C0F653DD5971772650B4A9AF6B2358B5C5845531446AE4DF144EAAB797BE5D990E22B7DC582576C4FF8ACB3EED02B96948D252C66E8C28F043F9D176772AEF45FFCB61C85035ABE67D57E9F4EF7BAD93C39B4BE09682B158FC43A591EA7C06C456F6651D2C6562E1B6086E7A27B135EEE694E3D2AA07D13343E7BB2505E15FA8A486F114E1F5DB4D8D4D8145600 -MD = 12265AC9B627D2030F350BDA33E6AB73A766134829C9D2737A83FCF35DA6D4D4F4A3711508FD3097133AE21C4FD668EA - -Len = 1955 -Msg = B9E9D8B68C875D73D858308A6605688E6FE70FD52893AAF1B7BDC413892E3FCF4A43AA4CCFD985E0E73EA2AB52545B2DF7170E70FD275649651A0FE095321E878087E256DD3D9A67CBAA1845E7384F704CAC79EC12256CE217027F27536E36F8CD4F12F862BF5AFA786861D27627BB3AC4460426CD2F1E847DE9C72B20607158189BF77F2D46F22CEA2E4436CD9FDFF7E296D6864F47045F4794DA08F0B02D370296E206C16FA311CEA6E2F6272BE995F81B291B70534EE6D8932B606219784145B50B2C67C67CFF06AAE6294FBF282780CCB522B61E9DC2C8572782FA3B90981D63280E477E6D920B6249181206136411D859C020 -MD = 7E8DB227282FADB1795E94526FA705B4DD1FE39E2A74C4DF548D78B61C2516F2A505FC2D84A66E85775C5576C3DE0004 - -Len = 1956 -Msg = E71727BC500E230A97CF57873E425E5901107C83F1448440DA95F4018D51C486FE25C39EA3D361E199DA66198851532D3513A9F74236BC02F0647A292A57C33CCA61F4ACCB32890BC94894EFE36007E3506C1E89D495B39999529DBFD62ED78B8642E1A7CF4D478F955D0695CD506BD7368675100C35F12D679B6F99F9E7F57506F0BF13DF269141EF5E746D57FB445F3C2F3A95F7AA55378533165DDA3748F8E804C45088AD748CF2DF7E8E5ABFCD4A36B0656D7C84C231F3F38D7A50F3593BEDDEA2D8414C1EC538D243E86AB1E51015DF0F0C535F96FE3C63604CA0BFC30ED6EB8AB18FEEBE0B18FEFDCCF202BD322277461B80 -MD = 9FED61D78412ABA2013C0C5A4F467CB2A4B6E95410EF82D308D76B8E75933A6706BB4E5D0E8EAD304D8522CB87D09363 - -Len = 1957 -Msg = 5EEC164C54FD4B1DF8E215DFEE8F22A9AC70FF7E96D92EFDAD389EEF1F0AA918DFB4EF1D714989AE6BA1DDF9D87DDC8D04981E6DB5C3AEB569E9122F1F6E608D44F4661FBE39BCB9CB9A6968F7670FFB67BFBCC2B328D3C315491E7AE9F8E28A501B28F58D9E6C261FA7CCA6E756001217F61D561EDF515667AEF88E6C7639E0073E7DA6FEC27AD73D8ECDC408B0448788289801CFF6F4322541FBBED19FD72D5C6BB2D3358940B40AA59E1753CC8278A479520BE1C567A480D62BC75AEC2B656DE8369E2A00D4C426DD556EFE3C4531C8E2E8020862EFCF01D525A04D7355A56EDA0D09EE21C3AFE10635E824B9895E9C723259F0 -MD = 5A29610399BEFF0BB20D10A3E8A9D3B3AC245F0EAE7D5DFA8F42DD55F7D32610CC8D01CCB3D0F61A61C3487EFD3A177A - -Len = 1958 -Msg = 948BCA040669ED34E540EFD1CD355103D23B4453AA59908627C6F3B21CD0F5B0E06E8C90CB4DAFFD958A2257BB2352A6F20341F6475368E17833DA438804740AB547142D3C62DC9EA8D335CDA93E2BC5938AF59F7A70222F2BE15A2F2341F92BB7A4BC92BA10E16EDCD7884201E44C87E74F54C4B210F40EC00C046A59AA165C88DFA6841571F86CA8A3EC493EA3B20781D09CBBD1BF3758FFE56FA23ADCB16CDA95129EB525CA86AFD9CEE8E0C76B3AC30E39AAE2953D7E06DFD566B2B530D8CE4C0844193775FA86804454BEE5E97E991E0CF5961F934B3BA2B34B731DA477AD033DF5D5BB944E811B4A9DDDE5AFD0971515CC40 -MD = D891A28AA4E4A63B681B6C68A793C9AE0DB80C754548846746F1134102E6CE8E735D1A965C672A45A34FD3BF6B2B8EA3 - -Len = 1959 -Msg = 2B344C1DFEA8F82F33004C08B3C41F31B584D250684DD642BFB736F6B47B6CB8A0694BE038469FFED59C97303CDC5B8C8628159C6D4A610849CBE034AC2B61D1CC3B70FB8E19A6E4408AA9040B0281F966AD20483F617F06F071C1885F37D0C539B551D0E8B85CC17024BF1EF07D98812795E623B426BAEB12E4406625392E10F598E257430B51A4CC1AA6EA1D9BE8DD00E826A956584BD56530405739BD8BCFFFA43A0B94E77456869E730CFB7C674F1BF78FC3B282C37E16BB45C1C6664B16322265FDC9B1F23410DC1BC83CDDB0A4100A24DBB82981CF81025761CA8E69E8A5D3FBBCD2E0BEDA902B6DF7E621BA1957CAC83E56 -MD = 9F7C750B2DCEFB9058D186DEE4A75F301163E8F776FA86AC204093BC36CAA3B577E22197979CBA8E4B4D1639A303F8C8 - -Len = 1960 -Msg = 90B28A6AA1FE533915BCB8E81ED6CACDC10962B7FF82474F845EEB86977600CF70B07BA8E3796141EE340E3FCE842A38A50AFBE90301A3BDCC591F2E7D9DE53E495525560B908C892439990A2CA2679C5539FFDF636777AD9C1CDEF809CDA9E8DCDB451ABB9E9C17EFA4379ABD24B182BD981CAFC792640A183B61694301D04C5B3EAAD694A6BD4CC06EF5DA8FA23B4FA2A64559C5A68397930079D250C51BCF00E2B16A6C49171433B0AADFD80231276560B80458DD77089B7A1BBCC9E7E4B9F881EACD6C92C4318348A13F4914EB27115A1CFC5D16D7FD94954C3532EFACA2CAB025103B2D02C6FD71DA3A77F417D7932685888A -MD = 72953FE4CA34E717E304DC77AFD9DEDE32A8467127B9F78BB0BE6191A7ECD051B7DAE091B1758907DDA3B1D25C0C5883 - -Len = 1961 -Msg = 1CCACD735B6D80BDDFD9F35303AFCE91279D5B500DFF2A3E43E0DF18BC47A47EF28F25097DB8D0D46A714F4C9E45819AA6B76D0CF93CD40C58EA79E84878C8DC3C8235F13DAF55E1B0FEB2A8ECBB6F58CC64E5D2150875E9732154F6FDF18494C92DAB65DBB8C607E91EA876A0E69DA35EEAA2F76A006D8C96C16C58E0EBC4FBF425A36BC1D10372E30EFC4AFEABBD8A41352F8905A8B206A7415F970381B50F555475856C0F74FB68F4B20F53C959C7D4F8F9C6C4442890BCA2485FE72F1130A496EBAF5D1BCE106B1CDA803C443D0069E1F9B00F2CA2DD2FFF9BC3B72970C27F7242E23E44A992D77777E544BAD9E3FC0E86498000 -MD = C40CA53ED8A87118E5DB148997BE2B6E9AA723052B0FE654D5AA31E545CBFEF0C960A9B038E73FBAD60EB9291C71B1B2 - -Len = 1962 -Msg = D7F33625BF8D38000F44C468F593E88028F26DF18E25617735C7AC39B585C552D1CE84C84F75447F9F75A38115C0525D65D60786CFBDC9B11465BE38407948044BF24F6010C959FE222E86285FA829F118DBE44B331C7973BD32A5821A303078454A8C694BB36206A0EBD9186448451E65476164F4D8617DD55D52309738D7E3EF91BC21FD4D99B746CFE60236D44B53D17D7E28CB09275790184F86D71CF52063130DFBC615CE0EC7F7A2BF9E993D4C5137518079A29D75F198904DB796EE3C5F9814F4112DF210A9967CDB0571E353E5F7AA5B472B725B156BF43860F8C150A5A8F6A545AF9C3ED4F48BE4C65F961EB542795B4200 -MD = 77EA801583EF40D54BDEE382D191C3E65848263936CAD943272C7BB5982497C8F3E191853771ABB98153173D357D32BF - -Len = 1963 -Msg = 94174FF8C5D36489C7E6D98198D1C7AF45147D146FD3ACEA280A7E316396605E822ED71F82BBFCC51A235267C58CFEA72A69450287CE7F3F9B915AC11B18558890F711D3B6DEEEB362AD037B39A79C7D213FAD77DCE5D23BD1A335D178EA70636DB86988E6483A6D0D9957EFAA944822FAE8C1E70ED42BC6ABAD56E93876BAB5F3BD11511B51A44A6A44965E65A45D4334B6A44050C86318D1EFC235E443532582F6EE13CE5DA824CCE76F56287B5C6C3711EE99ED602FDCF397FC0B629DA4805AB7DFF1B503467C1732D77425C4E31549FE21FBF5FA67CEAA8EB9B8F44202C4CE0DC0CBDDAFEB38866BA57EF156371A809B21CE1D80 -MD = 3544EC294BE28F4052B46C6BC7650AE985C7F744B1A0C9FBEDDA8E383F0404DFAABC2342367CC559AB2EAE6682700BFB - -Len = 1964 -Msg = CD5532D4872E63E8DD65445D2DFF5E5F98F5AB898C51BF15F3B81BAEEF33FCAB207DD00CC4489D0C6C1E55582793A7766677EF55004D12E642F30960237F733B5C0039F2EB395671B006B694862C1ADFDBC21F7BCA7635933E58F8ED826EEA0340895CB0C9AB05D3E8F70CF561F27E794467C9CDF12AC6AAD70925F3F192140FCCEAF88A10528C39FCC14F5CBB3F8394A576FF0C2B98CFE390F7645C1DE0DDC02D3FF1831F7047143F001791F7C9753D8900F554AF61BE43A4553F02860B2EDCC4EACB5591B05235D299640654A5EE4A38B5DCE6447C655DF36C82602FB9383F04B1AA6FFB495F101B4BF9BC55607027A55BBA536F30 -MD = 86938926F0536AFB942CF5EEA215F997D0452C9087327694B95CEE9D573B5F445CA0DFDCA14125CB3B35C6B406EA497D - -Len = 1965 -Msg = 6EA799C47249BA1831270FA6B7235587C4F04527EF854290E156DA1C494DE0E65A5F6AB9A257DBEA55717A3D0D127944585C5BAC713D35A6AF8C8FCD5B0529A8684F6AF238FBFBE31149734EDD251FD4AE4148073E73157F1F7CF6EAD5366B6AE389D20EE9F1AA425E46C509C9178F83EBB697AC71439A8B9664810499315DA0B01DA01752D78D6C0F111FE5E4ED772688C70EC6652C29916247C95127AEAD9F585FFAC7E2AFD753F8F8E7EEA44C93377FB945BA6817920A8D763D069E73B0FE1B7059B88C43C3DDBC1AB94BAC3A718AD48F72F2E6303527046BE49CD2BD452FFB3A1F26673FF6B8F5048AE41F9DDF49EF9522496408 -MD = 930D41822DC43ADE120879AC068DB75FA85EDC62FC553C419E335B5F2D3549CE449EB09BC7FCF5DE1894AD4242FD5BB3 - -Len = 1966 -Msg = A1F22C756A6CB226E7FAB31F870A4E3721035F9F592F429D56141D9B73DD7A09BE3DF7AFF6DD16E29C01BBE00CBD4F4D681EDF5E2173B51F17F8A40F54E5D9F02CED20AA341FD48C203874D5EBE485554221A8C4E9C20B4070C688443A48D31F479B564071AC2F79CCBAADFA8C432B61BF9F767AC5BFDAB1E747A1D8ACB0761ABF58DD8768F1F2726C97ED5936B0629E3E1AA1FB581845179E5542F84523E3E71212E1B3B6843D9FA31A2B8C6FFF5A71B3E37D6F1F6A9A904A500BEA9F9650D0D6F6E9448FA83BCAB431D26212E057002884BC55E908F59A90275C5E3E53084260BA75C3955FB76DA67072C20477037BAC0159BFBAA4 -MD = FA148DA708B7DD304BD9F504C97CF3D583462229AC06C5965E06C5FEC4FBDFF0593125CC067F0A24F54F27D7535584ED - -Len = 1967 -Msg = 81809338942312D6009885462990E428637F38E8E692E23635B052D285C393B1FE82421747432266CFAEFCC25233A4BD1F40B95D1244A73F48F9ED0BD418409A0EE45041FE4E800C1AC1A886FA26E91C3375FC9A443D4C4791BEDD8A562569A5EF11AD5E5FCBEF3CEB4C8D6D7CB62A5CB373E2FDC17074345A5E51DF0B363F70DD7A286685489101622FCA652622ADD70013C694E3E0167001175F10DB2EF0E442071ECFFA676DC3EB76D8CCADABB493EEB209967DF3A526CD606795D3B52A495ABAA26750D6805169F81BC840C7E7398BA977AF73AC0664384313747DA5C09C312EF2594F28F38B00A8FFF56C55231B8EAF0DCDA6F8 -MD = A326B32F577F9F19EAF02F4A2B66C7E446A6A97894E6C8ABD7BBE342F0DFA86E5B53D01C5BA7A03C174F546A62F5BFBE - -Len = 1968 -Msg = 2969447D175490F2AA9BB055014DBEF2E6854C95F8D60950BFE8C0BE8DE254C26B2D31B9E4DE9C68C9ADF49E4EE9B1C2850967F29F5D08738483B417BB96B2A56F0C8ACA632B552059C59AAC3F61F7B45C966B75F1D9931FF4E596406378CEE91AAA726A3A84C33F37E9CDBE626B5745A0B06064A8A8D56E53AAF102D23DD9DF0A3FDF7A638509A6761A33FA42FA8DDBD8E16159C93008B53765019C3F0E9F10B144CE2AC57F5D7297F9C9949E4FF68B70D339F87501CE8550B772F32C6DA8AD2CE2100A895D8B08FA1EEAD7C376B407709703C510B50F87E73E43F8E7348F87C3832A547EF2BBE5799ABEDCF5E1F372EA809233F006 -MD = F36A9EE455066E562FB675F399D9DCC6BCCF68FD1B0BA9F7DCC1EDFAC1F1E234CB67B5A0F770E55435F75F9EC84A9151 - -Len = 1969 -Msg = DBD3544D800AA1089CBB836C48569B2E763E156D6A8F09D6BC6744334EAF929455DC50F1EAFECC039EC10539DB8D8695A60FB242C96911FA4A3CE955BC7A46C4F057C58B93633BF80047D4450D664461C5D3D4DE011483710E847AB548BE8C9D70296BDE75EB478E34FFB1C90672435D4DA025C15EA940C8BA6C2C6E15FBC13244D706395EBE5DC90D48A9A4C9F0FF0269E7DD3B352CFD0AB10BB88C4C5CB8A822B31F1541486138DF7B212B522AE091FBEEA721E63EFA3000487B0A52BEA62F15ECC44A2BA2DC8814075CA990A7EC45CF73FF21E7A0B4ECD683368AA32032471DB5C80FD3EAED54757BB930A52AE0911940784B2D9080 -MD = 983F61C4F8D9A6CA5BA5FE1D44E226D4FD8078CE676EF2D22698F859EEA27E41C246476944CF8FF243A208111AEEB774 - -Len = 1970 -Msg = 0DCE440272E7BF0E8808D973FAB447897D8E2437FA6B38F5738B9BA24AEB92DF2AE7ED077BF290998AA8A53355AE2B54BE1834EB453380DAA81C8A9ACE210DF4D5D9A6F303C1CCB3CEE10AEB826AC172253869B56E95E488D5E315BE56BC46F7572CAE284B6636B67A23986F35D02D01E28A092899852CCCFA3AD3575FCBC7376BB2F6F7C76177C066ED0C1E656A21DD2B8AA057BE4417F09B81B94C17EE37120426FD2FC9C8A146C85CA6D6543EBFC658D408DF7D18F1987AEEC78E8CD011DBA6DFBAC87D9EE4756759E15A92A9177AE040F5A2C3E92FC508E4F3D623D84F8395C8BF68DA80EF9257E74E192277CB1DA02FE0F8662B80 -MD = F3C3C62171BF3206E46E62E85A4C2EDD895404F74CF67BEB59FA3C9EE8DD23A5D63B464A6F5BD719AA1BDF741302FDB8 - -Len = 1971 -Msg = A2F6C9FFA8253C61D6C8F78BE1237183E4B65C253EA14132A79DEAA81EF92F5A6C3D9F29B0F938E3EFF71161962A8ABA2FEE2BEBD3A02F8573F92525F5A98022C41D3D4984941E04D02040A8483F5743BFBDE3D622F64E53CEA89B5A237F1027F6D27A8B4046FD5366DB8F4CC056C23280B9AF8D7CF39E084E42762C4D3175D2B8CD9BC78229894CBA719201F4DA580034305AF981E57EAA123FF1444CF930AF1DE2EE6171BE5269C714BA85D15E6D69F42BC3448D993E82AF6C3372B0585CB51E39282CC5675677EC7F09E1890BD98C2618ADEB7C5BBAD4EB3FE58ECB44F8A4F8255E0A6129D739A757E79CCB39EE6748BBCAC21EBB20 -MD = 5097E671B2E37C22C5B873A3C697068D3A959DBC16900EA0D896C114BB66043A515A1CB050A4B86635DE98725A3A4E51 - -Len = 1972 -Msg = 3B9779B86531629061CFAA92407403174AFC68A88CB78D3EB1CDE576BA91E9BCD160CA18C43C1C16F9ABC6C391C05704506710FCB8D0E2E42EBFE764A53E78721B1D2113AA21127BD90C263D4B4A8AA4FB2635D29EE4EB6FCC3CE26BB0B14926F0001CC3712CE5E18E21116029ABF3F61E72A7FC2E5FEDE35741E86CFE51444600302DB629893F0731BF6D2884AD972F36A53F9982669EF8E9792E7FE4FCD456C8DA6AD11A176BFBA5C0C6C0A822C37D085A610F9510F0560935961BE285E80002A9D178B9ED01127463B72000E61B1A146E78B815216114F777041CFAB127962D0B1159DC9B3236FDD03C2C401C842E99B9A433850EE0 -MD = E3E57F9F11AAC85BB72C8BFB07AA5CE8B8988A6FCABAFB17E7489887663B3B39B20651B60EA96DEDD6659B149E4E8DAD - -Len = 1973 -Msg = 4460F6EBE4C0F0C89A96962AAAF68A01064C41E45BC3B0C3073F09319F29EA541F1F43F27008DED6D1EF1F0386FEE37C05E09C68A51849C22891575FDD0ED0E632EF818A875EFDB7D132D6E8F16946BE22C6294DA34288ABAC37FE8CFF2E5BA5FC79E6D5FBA3418F6F0683F3BC4B8D1880C5B7A716593615ED64A1A84FB61B5B29FC773701E6B60D96F4CA628ACA5A52A490439FF6A29855EA58D7D118BD83451AF3685A216DFF00A8179237AF0DE8D847117A6E834AA00DFF30748F31643D774EC6647961E446D7AAEC1CA5C57FA205C3C66F407A4F629A7A2DB1ACBE20BAB9C41F6019CCC2E07CB96567291EF53878BCD000CD1BE3C0 -MD = 0504F67B5833BCB50C61CA2518C25E24C4CA2DCC780CAD4121C22B9300AA445A84109F3B974ADF309B7B9903913004EC - -Len = 1974 -Msg = 7765B5933AB981AD4263A6313B20E75F946BBA84B3DA7FDE2C108E1F45EC9443EB2159E4CFE6F94FA71A46E14F6A31E87CAB6A46877DDF8F8E19E62621D27B2FCB05FB817E9B325993D826D92CD1711A5DBA1315FC53784B0558873CBFB903447E2A24E0CD84A84678CB9CABC4189CB8FB2E1AA53E93DB4DEDF70CBDAA402336E5AEC36C5316D124DB57C4FD68B63CC46016DEF71D7D8D04E988F1B3731F0822AFC717A036A54CEB947244E208A21E4D61FEE25A5CA55E6F7DE52A95629F379CDED7C9D5EED4F44D215FA6E62BD55B390AE5503EF2666AA564DAA2A4122B64B99632DE6095EB1DB5B92BCA0AF12E041B7939B96B8D3734 -MD = F493B5DC9E845958725091B64193C9451C98102A5CCFF2132C8EB3A28D510BA52544AA335B1B38CAEB3C839081C19EBA - -Len = 1975 -Msg = 17D27BCFC84896AEE10DF3866AA3D8A18783644307467341B3D585A544ECBD50573710C72D2C2639545EF16BB6902505A556841E7141238E5546384DE52F1E3F56FA342AD0A3D6315BB0565E67DDFE47C9574078CF7AD385082E310B3E14CCF9C32D0F1CB69D3A19668288425287263A899687445E4B5A791186494422CD40ACDA3876E51F8BF77BDCC709864F60D15A73DCBA9DFE257A30CED49A76724643C5E8F8D75E5B34066116DA94EBEF91C52AAF508C8DF1EC5F982227C95F7BC0CE2BF0A712AD48F7E862C61FADE2289866650D311D4213857C4ABD6C2CFDC1C89C7C450951E3DA5557C0EACDB218C97958F600DC7B22746CC0 -MD = B9D4ABDF89722CA6D5A1683B0E736A253A2FA453F8E1109DFA8C521A5B54B050BD2BAA0C2EA7E5F4B9507095AE24C94F - -Len = 1976 -Msg = 721645633A44A2C78B19024EAECF58575AB23C27190833C26875DC0F0D50B46AEA9C343D82EA7D5B3E50EC700545C615DAEAEA64726A0F05607576DCD396D812B03FB6551C641087856D050B10E6A4D5577B82A98AFB89CEE8594C9DC19E79FEFF0382FCFD127F1B803A4B9946F4AC9A4378E1E6E041B1389A53E3450CD32D9D2941B0CBABDB50DA8EA2513145164C3AB6BCBD251C448D2D4B087AC57A59C2285D564F16DA4ED5E607ED979592146FFB0EF3F3DB308FB342DF5EB5924A48256FC763141A278814C82D6D6348577545870AE3A83C7230AC02A1540FE1798F7EF09E335A865A2AE0949B21E4F748FB8A51F44750E213A8FB -MD = 37368F5A074DA0E5075845F76B1AC5858DF793EEF88A854C7DAFE3B90720707A145A5DCB0D9266C6148204CE693C5432 - -Len = 1977 -Msg = C8805073A9044F80741F09AF69CAADEF2A17B56E785F262B7BE09A27C1EA05A4D58D04FE84F513CA24E2F3F323B20FA5427F0D8D7143B424010EA901A02D5969D8DA81B99FDF67F3FFC7DAC9AF010C7EC6C454CA5512116CCBCDAA15DF47C4D55C58F9B10724D3616AEE9B3938484227718A458A9B33440E61A9569F1E99667BD26D7C70B689C1EB6F1C557F689BC58FFE274C21E4F88C9660321569A6ED4A8CCEDE6640B4BA4E8ED6968DDCD5CF3FF1EF6DE0F036CD0FC81B7DADAA4BC7FEE9C0AE62AA115512F876FDC8896EADAD48C9A6123D6D8755B812D19E77B1A40C5F973C4586E774BE02F0AA2C6F62B1617D00F0EDA15BEE6380 -MD = ABF786F463E34B1618EBD717877F9C874B4245B1E7710A381749D98BA449D270136DCAA375ECA03907AEF84749DE9CA7 - -Len = 1978 -Msg = 187F478A37386BAF26EABCC1A56AED42BFBE0FAE4D858405A66DD88637D1CAD7EC3E1F7DA226DAC75FC33686476A29B7427544069EF6844C1E9F5707F24B671918ACD172F352AFD2F30AD91289D57F20751D58E23E928B07CF76E6617CB251814D264BE2658059E0CCA41C08FFFBEA7803DCC6E125E5092D349EFB0260FF0BFF9CB8A4EB7D82B195C4FC17F77F5641AF9FEEA9ECFF4682856638D4F12105DBA8755009269F2083E0953F3FC877D180B253F8F5591E1944D13C83776AFD8C7AC861BD5F083A2078C65B51B4ED174B1F57428CA24D798C12E724911618C4E620A7388EFC719A647DE1586541FA690BC1E1F2F2131B4FDC0C40 -MD = 6F6030940A2FBE89E939F123DEADF64430F5A2F5BF7B467B6CDE6AE70EAEBAA7DDEE870428C9430434C55F500D3742EA - -Len = 1979 -Msg = 752534268E1492913DF547FE5A08FC558087006C000B2005E763093386C6BD4BD172873CEBE156F45BB4CB1DE99661B61870DD8C611B99DA07D15A6B2CE220E30B2DE3BB778BE30F30392769C84EAFA3697E04D9C8CECD1AD8065975A03D9984B3FF73AA757968F1E2F3C44E6E611713CE9FAE1849909F076A0BE17B80319515B58F4A27FBCEDF7DED27653655C05F89133596AC136630B3BD728988D833632ADED5834368856F1E77CB8B9BBC37D1CB5A989DD1009C8348C0F8FED009F62D3F37C2994824FA80BA8AB0AD3B484EF48979817BDD482064283F4E89A93AB3126405695EBFE166CF3070764B3126883A6C854901CD7F44DC60 -MD = 4D81E3BB853424B41D7184C879C9C36D9326D3DE29D03B371AA19FED24027AAF4D4FB7B8713D764962F7E2E6904966E1 - -Len = 1980 -Msg = AC1569ED914F50B464922215661963F99EEC3C048FA809B032B9EAA69AA7B138B5F049897B1A73AD8CA4734F1B6FD6DF0112983E29820E8FAEFA6D530AB1FF03DE9349181D9C235D14689EC5C30419EEA0D891A8A33F295333B02227BCEA4DA7381584353AD9AB5603E03E69B66D8AEAB20B15AE84C26DDCFCA9EE7DD14EB459784495EDA6D273136653FA98BD42BCA1A0A714A8A3DDAD33C7A6B1916838D4FC25F0524E992DAFCC15FF866CF2DF1613A0C3B81C1FA6BB5D34ECDEFFF540032338EA9D372ECB57692A3AF10B7592179B6D70DEF5281A804BCB83C6EC48D8938CEB66EC6F3696D5A729D130C3F94FED71BD4A4071EA86F950 -MD = 7031413AE2BA78CB495303D9FB562015C918BC6F1F681582CB00F0D8A350F7D9879EF8CDD236DDB7D5998CC1AAD2297D - -Len = 1981 -Msg = 24EBF97325E94624ED9571F110D4F9C0D459D6B659B30000F47B52BACA0E7C8E41C8DD1D4FAAE2B0803B22F7C49354507011DBFB157A8D110BE9F8B056470EDED8BE8072601C6FE963584F3A32FF989335EADF05240B355EB4A59770F7F370E02346058C74DCEA0A7DDD4E2EBEA8CB9036B0859B04F1132625A081993BDC622D8CFFA64A7F003C46067C6B224161C56C6D68647124C3B92BD0A1CDD24A98E15462458EA4B8510C7A7027DA769317AA0B399A1D0447525E3697A18C3F4C91D2E4064FFE358A459A3E97DE7DBE8E78DFF5A277F4DE7C4FDDAAF8D1A492420C1D6C60665D4E72598ED24EBD2D695053532561A5810002911588 -MD = DE3B938EBEE90AAD97FC7F4AFF3056ACB1B19A094ECBDF962C377A955EB4276D12DDFD6C20B03FD0094206DB75617B0D - -Len = 1982 -Msg = F965E971E9A188AC8F57F2BA40A21C0739FA6AABE4FACDB1F5EB88A9093B42D1D4FB562335B5D10B10C0C6940A2CC0EEBDE1BDB840FC1256DE90CEF0E008B3F1BD27B7141DCA0CA42B579DB8629B7DA66E36D578906152AB3B22CB0ADF3C5544F9D8249BBBD51089E6C758349B8AE53D7C459E8DA42E7BD7C7AA6237C00DEFFA268C059E3EBC450760E658D104D7177DD45B3F3CB254E3FB1AA8D2B7DDD24B20A7727D34DF50FC5A103D9F2623D3A9488A4A8938739CEDADC30E0DF2BB00DE74E7E4105ADEF42FD83FB97B315AFAD9456795D492B02EE3F9FA942408F74D1D716931271A044CC25303BB04B4C057008E74D2BEBE20931FFC -MD = A3F90939457A5F04B3DE9160B998B5C6CCB926A270EAC2584AE20FF6AD3B01ED88F3318D3E3FACAAD7A13233477E0541 - -Len = 1983 -Msg = A3DFE4DDEB6F6CBC08CD03EDA2A386676E9E32DF1C093937377295A7FA10421449E7087C6FEDA907DEEB478CBDDA62BCF56CD9361386E607D486F887F77D9AAD16ED65EDEABBC5D2DB830A8E5059094C190E39DAAAE4C4BB9B5743A9218189EF5FA1CBC2A6E8FAC2878417D37E4B0ED6FC4794B6CA8A9D213452CC02E6DADCAEF439C940DF132CCEA86722563FF416D5FF13C38F34EDF3734A9E6E69304CAF7FFB959A2AF03D08ACC6B04A5E43FAACC9ACD2697F7E60DDDCD74948EE73171C751548A506A9319E0103DA0B8C97B35CE261647E92D2E10EFC9D57114B9C9EF8ADA583B084B8F7099520AEEF26548BC9C50F8A7DBB18FA2928 -MD = 8192B2DC83B1C4E4D3A29C3F64770A2952BEEF91EBF2418C7E5F820DEC11AF2E873F8B81D482E5BB1A49FD8F885B247B - -Len = 1984 -Msg = 6B860D39725A14B498BB714574B4D37CA787404768F64C648B1751B353AC92BAC2C3A28EA909FDF0423336401A02E63EC24325300D823B6864BB701F9D7C7A1F8EC9D0AE3584AA6DD62EA1997CD831B4BABD9A4DA50932D4EFDA745C61E4130890E156AEE6113716DAF95764222A91187DB2EFFEA49D5D0596102D619BD26A616BBFDA8335505FBB0D90B4C180D1A2335B91538E1668F9F9642790B4E55F9CAB0FE2BDD2935D001EE6419ABAB5457880D0DBFF20ED8758F4C20FE759EFB33141CF0E892587FE8187E5FBC57786B7E8B089612C936DFC03D27EFBBE7C8673F1606BD51D5FF386F4A7AB68EDF59F385EB1291F117BFE717399 -MD = DAAC83B0C5C8F8FC3BCCD259C27D964673B4DCA790B4B63899E1B6C19CC291FE6F88376281E0FA320ADFADC82A8FF4EF - -Len = 1985 -Msg = D32ED64B8AC893E8814F30BA3A421FE80F06FE8BB2599AE6977CF0387E07B7F6BD57AF3980F039921945522F75A1D9B1B1CADD6B666E6D19A9930847B3E7A1BCF942B8CBB25F6D63FD0C1A61365F64E645EC1957D1582CC75790460F92DEA77A3F53F4E695A1E712211BF187A379E04C40098BE74F5BF2DA7EE371E6C3B16B93D2A01A033EB41A3C5F834C4ACB817AD78BCF0D24B8FF876DF98ED9094A69FEDF58AAF100DC82B20CD81520411715FCB054018456C5BCD6EFF22ED949F9EE2C823FB2F22653118816CA66D7FCE9554401035B71939039B1E010A15DAA57A7F374025BEE3F9CF85A79CCF7751E4AFEFD4B1A8C71B6AAD3A40680 -MD = B91EB5C9A556763464F8BE90E2F81C027D4BDD1EDAF196B15DDF7D04261214D9BF4AE2ED903F9123E32703DA1B074E6A - -Len = 1986 -Msg = CE81B8CDF42C400880AA4A46486ADB10D8E58DDFF5AB61856EC7417A93F1FB0B0C788D0BC3457BA0639078034F22DC1FA93635B0259C4DADC9A59C7A3B80CF7D5FF82C2C8029E27F2F0FD612BE4D7271D3045947E173C971D1FF3649A7CF97F5B8849ACBC34E86FAC4ACACC467786666E1D753FFB933DFEF1C214D229505BA51C5CA6705E9513AF7909BD7A4A43F035F1A78D383F663708669B62922FFD5EA59B41EB44A3EEC3D38092F74093455F1A54C4A73EDF6B23A74EAF0539518A74F174799128F6CDC7BD2BA69CD7B2E69E35E97B9424849605187C6B3F3F2D0A0AE5443378438BFC504C6FF354BAC02E073D31C5C8DF1AB31B553C0 -MD = 9D36FAE86D6B6D1F1CEAB8D4746CB1034394F3074330736446302D4CAF318F3EA8B35A7A954D70C76D68B08CB687F042 - -Len = 1987 -Msg = 142C2824180B20EB38CB707804017AA76CBF53ECCF69E084A1B09EBB13ECC2B12B7D58EEDF06CE7446D231565B6A34C18E782C339039CA41CF94002FCD502270DB6ED60A2C7E2A06E4AD98EB37E94173C1CD531417F29A9188422727456F44E113E1611B363288D8ADBCEFC725CF0FFBA2BE5A91B0939FC0D1FF81CACE638B34390D2D5F0018E30D2C69780D715BCB484687D7D672F06DB11E557EBF9BDAE5CF982BA0C1257996805218672116D34CAD98328C6B62D2ED5C28E7A1B30DBCE0EFE498BBBFB8797271F1D8E8903D5FD9217435609E86FD3595762E824CD4C7DA5B1597C4251FF596FB267DF0C44863D3D24D72ED5997E5E59120 -MD = 85D00188EE64A7FF74EFDB1A472DBBF2A629F41E309EBD6A4C4A3283775291DAE1F3B74453881E1651291D6FA82BDCCA - -Len = 1988 -Msg = 329A07D707AA29AFC4D5E780B828DD5F183C0C481C6E12FE60CA6B188C233DF3973C832983BD59B474E9D39D0C54502D7DD983FB404C77DF6FA7FC349C8E74F18E7C2533346A0B505BB7508C7CD11687BEFC78D7A2EB6C253B99E427E0DE4FB7D2460BB900DDCF6B3528207A057F5BA40E89C810B35174FAA3A94373FE1CD2DDE4C8CA7274E0D33365597654C4F75E28F7FE03648A76B8D27F28B0AAF87331C65FDA4E1B0D26DE1849931134CE4BDD6F0FE898D05AFBB7F2C2D2D1F5C4E9A8D81A1476D04AC82225B7ABC2857B129CEBAEC02F343E2B8285729662872B8F29BF8667D9FDE69EEDEA464FB460D80134771FB375314E985FBF60 -MD = 78E5EAF7A906B2152C6B5BEC0C17F11D2F9EB8692EEDD8E98BAA03D1CD4294A994E9004B99ED5895A50593A22B67413C - -Len = 1989 -Msg = 531375EE838C53F7A0F60D2EF68193AB311A57BB99DECBB5318FA03CEC28C4614CC301A76EC10A414464A128402549708EECC35F14D0F41972BD85F1B2BD0F49EC725D32738A745F63C59864EBFEF162A744136ECE8FD317D04B48EED993D1C2AF428FD65CDEAB6AA83827C3C5F1944FF39CB3FAAAAD89E7F69F154A1367AB04A2BB739D42CE4075309057CFD50B197B63988DD70CAAE8632D3602984664FE7113E6CEEDBCF46F61461A36E8DD555334D0272C1BD3D834B55B3BF3193191E458D72E8BC0CDED3F311A95388F1527F98A8515EB1FB77F298F03AC73D587AD866FEEAD91D17925533EEF29AEFB53F8DBE534DA4902F1A564EDC8 -MD = 17961BD2EF13AE5CE352431A2BDDD9D99326363C9A3898551C1B5533BA2A8D0CAF019875979396F63E3DAF7304EB0AEB - -Len = 1990 -Msg = 3077B114046798409B052A162823AE9CC4DB68F0C32E8E8A9F12B039C99B8C8D2100AEC68BC7AAD75F5AE414A8E458B2D10B430DF82A30178B66C7DCE52F1FAC05C8D28D511C39A3BDBDDCD43B46B68C7A591CD6ADF6F5AA9E5306BC308FC771CA43BF1B63B6CA9604A24F70B5A2ECC3C4772C5B583B6798F61352EF976DDC14FA9D12BFA3EDC1B70BC198837318E687670411D049476516AC35DCDEDEC5F77F36B5FB3F18607C13CDB7F9E0B413F5AC2C8DD8B6070BB84F40368F44C887E1B3D08F1EA5B52D82799F5BF18A0DA9A64DB60F6EAD631BBF93EADA405C7CB4D39E1129945E265B75A9322EFF74983470134A454B1AFF0F4529C0 -MD = CCD97E4CF29B3B6599E6D6E08AF612BE983980102E6C081D56D8E280FCC04210B4638854974F52D6CEBE98C8C0D66469 - -Len = 1991 -Msg = DE175365B0EB7442D7AC52719CEEC2A930CAD9B9F9BEA109F0F78668CD568EE0C1D4D7A82D44D9D1DD2C01B8A3C74A4EDBC9E59FE6A646C496C8955F96B385284FDD2F7B2715C71FE0A062A3F890F2C03713A234E46C7AF287FEF559CE955FE33CEF3BF62C0A811B3E366782000CCE4781C94F1CE71601936CCAF21EE51622E7115CC769C1282E9A4930D7E4BB0FB324C5A8F6414AE1C443E61FB1910C1384B3848AF40B8A4EE96241CC132F0BE6603DA079E67AF04C234972613857FD5718E54D66D1B542CBD964EC074DF0F48C21509641ED11B0C4FF3F6950DEFF55526A0936D4DCDB28ECCB9D83BB9D68D93C3AB18B09AB8CEA1B6109D2 -MD = 40E70F5CE9AA3288CDCE926B4A3087535216A0A71186FFA47BDDD3147F3487D782EC532FE9FC5B44AEC7156B79B5CBD0 - -Len = 1992 -Msg = 6A01830AF3889A25183244DECB508BD01253D5B508AB490D3124AFBF42626B2E70894E9B562B288D0A2450CFACF14A0DDAE5C04716E5A0082C33981F6037D23D5E045EE1EF2283FB8B6378A914C5D9441627A722C282FF452E25A7EA608D69CEE4393A0725D17963D0342684F255496D8A18C2961145315130549311FC07F0312FB78E6077334F87EAA873BEE8AA95698996EB21375EB2B4EF53C14401207DEB4568398E5DD9A7CF97E8C9663E23334B46912F8344C19EFCF8C2BA6F04325F1A27E062B62A58D0766FC6DB4D2C6A1928604B0175D872D16B7908EBC041761187CC785526C2A3873FEAC3A642BB39F5351550AF9770C328AF7B -MD = 357258FA6579867CC0089C8B3C93CE10677A5AD4DBEEE2A27CEA90317ACEBE7254505468875BCB334E0B6F70CFE59082 - -Len = 1993 -Msg = FAABF245E59C1E88C39FDB7ACB77B2B3F67FFF22CDCE4F109B321C5B720DF0E4C3995B01968676D4305C88CA3A539A9B740A97068AC91F966F2111C7AD7E1A32E947CAC73F1F5DB8CDB85374FAC8DDC0B964E506F042FC8C76D4273E6CC1C370189E60DDF920FE9895F4C2E6DE87B742D09BD90D0C6D792A0DBA942EA21D89C735F90BC71CCC32BF661AA35762EE8C4E5C354B8D72F9124134C02E15AF1E7BE14B8CD862FDFE7838CA75BA76D8CFCAA427B0D4D65068999B9195948E387EFB1596EAF8AFDCB4D953F2833C2569FB0C40252244A356DC044ECC03FAD63D1BD2D2FD9A683731A28C0D13254EC9BDB5EF09EE3A1AE3148A143EA080 -MD = 33ADAECCF3F225695B2EB95C0029E3F23EDE6AC324A622A043746FAF3F31BA0DEBED0EAEA39704CD64190A3F413C627F - -Len = 1994 -Msg = 41C9AB2D7A66C27D36633BBD90024BDD2A07F4D266AEDE26023FEE9207565467B4FC917C4712D5ABC56CE66F0020390E5A2BDF7C36821AA032078721A8EDB4CAF94D055A26C182D42796936A6A1DDF29F4383D169DA0FB442F899505FFEDE41C2110163E7ED694562A687EDDC54D5EF2E7EDFA91FC7D3F73FBA2D80D37A5F980435CBDE686408B3BD2E6D8D2449446F7C6C2B441965DA6D17779FC3F33DAEBF05E1060D378A21708DAD6520B1F8F53FBC65328C24B507B5E20DDB5E2C80766E794A1A71259AEA52DD1C885054E1D83ACC38010E2D26CEBDA306762762149648763328D341725644ACF60A09B2ADBB96002F01263572170188540 -MD = 6A809DC46F06DD4A34AF5F864AB764010A8800B6F9282E452FA3A67A1BFC286E8B0C69DCE2A5E03F9A4E941C58E42FF3 - -Len = 1995 -Msg = A245516F0282C8B0E6F2EA8718D0ECCB66D9C1F90CCD26D793BF9DF3101C5D0913029BBBC09832E621D65527B3823C47708409464BFC59199221A3EFA28B413563137DD4A2EBBB5D62CE6ED865AC9F1D9A7696E891D1832FCEDA6DA96DBAD1F6DA4B52121ED3D4BB70FD7C9D46386ADC38821202B2B6F8D4562F5B10008E35BEA86B21991F9438B2D63F753BFD680FCB509A9A23087672C11317E44BED611A113CF7A5336B36C311992D9403A9E181BFE3CF48C0990FDC347B12FF6997C5C451E720396631BC26E43CBD69CFF6C77D8FBADFE738A0B91B7BC213A37314CE4D645A3CA98EF451165CB394A021ACCE94F268FFD2F95741B8883D00 -MD = 844123B185D463DD84CE1271BE45193D1FCACC827C2B4043CFF0760FB42B7C0273083DA22372DD787DC64047940671AF - -Len = 1996 -Msg = 2F30C488FFDB8B60D41FFB45CDA988F0EB13DADB46DFB03654CF1BB662E9CFAAAF49830D2F011BF511E0437B2E55A0F56D7BB4BDBFA63896FB7DBF6741C3227CF9DB40FB4AEB4280A0BE09638F735F320B228B2CC65E88FA75339A948B7A1BA147532593DC85A793F723BF4EBAEEB9181366D9FA7DFC49C9F07B52E8F601B92B7F54A55D3393B6680FF65317DA41C0B0040E9206F65C3C183D8CB832DA4FCB465A731348ADADE1227F779D20788A096405A26CE76444E7D8713DDA48DDE0F56006D38E910CDFF2F1D0F20EF4F38D9B2BC9D1C31C7509D370E31E298892CE85D547ACCB4ECD36FB0BAA61935073CB2DA89B83A93D23F21B4D5280 -MD = 8B0B1F589AC6F2F6657C5D0AD584EE76D3933AAFC14909F884368BB1956D35A4E180434C4B679E92AA2FC2EB8285927B - -Len = 1997 -Msg = D60976242E138CB0311CF692E23FB29DCBED3AB53B9B9A5C810C8CC5EA22ACF5E5EAD41A541A66FD03DA085A088CB6BE50166B2C604777771F90ED0CCBD8F6C445BE01C650B655106D713CC18613F1EDA3C45FA92A68FBC24C660BA1F13440BBEB36E8B2813F2D85D82B5EF19163D0FE77B80A3E66B378D3F14936917A2390CBDD5AC367DF32E109704CA448F4B8F5F1937494976A7D721FB3098671DCD5615739E15A22E4D5D7CA1064DA010EC5E371EA286CFDDE523CF3EDDEF2BDB58DDFB021599B5DDEF9CB9DC83E5BCA43247FE5C31A9E1BE19D02C8F84F7816689D6E6F0444940300ABF38A70C9AFABEB54B5B926B3D90B5ED0C5AA3AB8 -MD = 9EDC94F5DEC0D48551C3F2913237B5D0307F8FF23613C56E82948AA1B9B0BC23F821ACA067CFC5DEF190D653413621DB - -Len = 1998 -Msg = 8A1B7485D535E846F7F57A9C668B202F71E36C4970CF9F1EB14B433148193B466A7DC82012AB7C5E97A9D0E622CFA4A9B846A5C7B621E89CFCABFE752169ACE355CCADB19243718937F55E66682C6538B0C66B94830D7B03DE0FBF63E4104DECDA39E9667727602C37A9B5ABE069569F6E3D0417842B96576FC9FF3B20ECE46A68BAF6B4EA8D6855E84A72D6DEA2CA13546F9447D229E83D185698BB5FB1C073570B0C94557B90C45BDCAE552E45313E99A4B94D422DE9DFC84494E2FD1E90CC922EAE9C49AADEA642638F44222F71CF1D63BD2E7164396FE1EEA7AA8DE59EE4CB35FEADA22C3B752F569F2E3B2BD14191E956318D708E9D0600 -MD = 4D4C7B3157E50134553D82674850A3E2EAE486EBD10F147C9A59DFC1C6DAC6657C0BEB77C107BAD13AEFCFD046D0AF16 - -Len = 1999 -Msg = BE48556570B10A62DF06BC43B6A034A221C26E455E28A1541AEA3042ECF9778BCA7F81AC9F7525E190124E359E7436D15C629FD388AF0F7EC42F4096C7C421E0733A716F78C86A1D77CC66683FF16B022685409C3E99240255BFA2660F3353D5B9F1704890C9156E5CA3A5ADB62952239D3B6D3E6C2EB7BAEFC4B5B385B3E7A41BBDA175B9D00F88CF061E78A921C90AA0AF22CFB5E0660981D071CD67800A0CEBA6D6732D9D3EA0CD821378B5BEA369BFB1D42280F4A81D44F6C254337CFFFAE8C69F49A444EA23A736451942B98439C03F13A52FFCA6A77F51E46D4A71E384CDD93A39C713293C10FD79C906FBB0EA5251A2E7B55905DE81C8 -MD = FF8538D3684794789D81991C899E1D065A3999AA6A9B96A2E6BBFE1749BCDA09CB3F36087A3C8D578562B85B15B7ECE3 - -Len = 2000 -Msg = B3C5E74B69933C2533106C563B4CA20238F2B6E675E8681E34A389894785BDADE59652D4A73D80A5C85BD454FD1E9FFDAD1C3815F5038E9EF432AAC5C3C4FE840CC370CF86580A6011778BBEDAF511A51B56D1A2EB68394AA299E26DA9ADA6A2F39B9FAFF7FBA457689B9C1A577B2A1E505FDF75C7A0A64B1DF81B3A356001BF0DF4E02A1FC59F651C9D585EC6224BB279C6BEBA2966E8882D68376081B987468E7AED1EF90EBD090AE825795CDCA1B4F09A979C8DFC21A48D8A53CDBB26C4DB547FC06EFE2F9850EDD2685A4661CB4911F165D4B63EF25B87D0A96D3DFF6AB0758999AAD214D07BD4F133A6734FDE445FE474711B69A98F7E2B -MD = 06E9F892A2716DE18DAC1B8946604473ADE060AFC8CB1287E389994076FF92B4BAE3D84854470ED061AE31A97B7D0DCF - -Len = 2001 -Msg = BCB3D6F4A9BDBEB6222F317E94CAED0A102FC75E32C4127A8DBCE180166D4B034E6DF22C2B4A77636D6ACBB5CD1EDDBB280A97CED0E4C396723C9703DEE371BF2687F8CBE1D3A007B2C475EAFB030601F9034506412F0674230A6A6EB9DBDD08AD8D545C19FB0DA52506A488A789E5FC6B92799E5A8DB3D57D8985398F7E9C12A060CFA0DCD8A1E34E0A635055B616FA91C1985797E0FCA6566E03791D29D684691A39DD0181B1D584AD1C51004300FFC5DBD63D9494B2E0368776EB54624FA8BD1E8BB5145C76ECDF0D1183D67E7C7A0AF6621DC3E81637C86E160AC677851F294FE6730CE34AB488C447F665A9F59D356D7273A2675494A75380 -MD = 26900266D2FA74392E1D7013185476400BC32AB8108A09AE2AE3A075E99DB7C7B70DA241EB046FC6B1FEC34B84A62745 - -Len = 2002 -Msg = EEA3D4F70866CBB97B2FEB1F13E05791E52A8EDFC58B2339A97ED00070EE50F9EC377D8BCC8DF98DE2B99BB53345C13CAE6D6EB6E9CE0EEDFB59C0AA64DF00FF6B8AF3AF56CFEEB0DAD9AFA44564B11C3DD295618B07BCB13C6592B785B2E5B4698BC0EC8C6D57D602FE8FDCEFA619629CB52BB1079000FC478C92C24FC94E76B29D84BE2D489A79F16E42EAEE1D9842E9CC260BBEE9AE9A42A1170662E2617F72CC4B72A38B32642F7C47555532779FFB5B86FEB63E06F4C42E0849110ECE84D37B18A65C7156E23BFDB32B9756069DFCCABA8E3BC47E6F0FE8BBC7C2D9A4D2E071A595EEABF3E4CB6F637CAB25704E8D21379AFEB0BCC6483FC0 -MD = 04C8527C5E741378E64E182335C79653BF97EA9C2183F23F159290BBCD49D5ED73C9A099CE8459FA2E48D06125BB2CB2 - -Len = 2003 -Msg = 07BD6D792691D1134F9DC46A34F930F1E073455F53A5EC48AA0113713A41238160C8E421097EF56EE05D0651DD91E6B77D3B7685A44BC480A1D0743305859EA10A24C4315DE8262842D79711A6B7B06D97E2D494229BD291E038A80A07DAFDE7E051411DF08E3BB812FC12F1AEBFDFDD0843B3075FC9431C4CFCA0A527BF7D4CF474783AB3675D4832B2DBB0E6255BA65D649FA0C52DACEDDA27E66FDB7E796DC6EC86EB06ED70F547634E82933A478427ABBDB73FE02BECE63D942C204F4F7067C990F6EBA66E3B80C4411FCE9333C3BD5783D222C1809742FE30DDA06C08CACF82D67ABBC903300D8B26A3F073C00AFA8D5DB5488FAE653E87C0 -MD = 11819F585166025E49064BAE19ED1F3758F92E5FAD8AD35CBC0F1F0113CC7E0830687B4E7E4F3AD341FD5C73A9759057 - -Len = 2004 -Msg = C87A40A7F50BD9E5D0470D3888727F55F650491B815BEFB245944C2023F5DCBFC061894E69225379C450999472FC415C8406A5CEBA2E1197FC3D611530A994F9EC73F7356E02439F343DEB16DD09599500D362C7BFF01C76002B437A7E86B45187FD8FBDAC88F8886995767B9EDA6ACA959E7B82C7193FF7E6644F36BD861C17E490CB14F0F7F9319DC502AEB8F30AEE58143E1536ADE6C3C6479C64617A3C04C13BD16DBE91AA3AB8768154B6A6E27D8C9B14A5A4562CB3D1B70E124ED38D09A1593EF6C1E10400ADE66FA267D604C16F990DE32F3CD34A85421F19189DBECF7C02BCE65BC094B554732C721CDC73AA39C3C4A887785D42C6C730 -MD = 0D0EE7FB7FC05963B6922D348840CFFC977E05F2C61E1798FCE5B413A580E9EA2B80DE2B01A6AA298633BE780E2C1A11 - -Len = 2005 -Msg = 59897517159787EC93369C74AB7AE836A65F1F76421B8134EA32ABFDD66BCE4240723A8BAAF264CFFC4AF19F114780D4C11A8B978A6060D42239F3702CB8D69E03C0355239A7CCAB99F5F2E5B9B7C70A0CCCE87C215A27943430690D3F4971B696CA2FD552D362FA4C9B4923836BD2DFE678C0EFEB56C8E87223B609EED0768E75E3226735C3BCBCB399889286973DC2190EEDBC5AE2FD698E921395E7FFCA61DB46BE5187CD8F380E76DAF5625931162F4972517A6DCD875AAA46D2FB1C8EE156340156666D092FEC19C3891A4F3E375A9859C4E48ECC224E2B010173D59744FBEB0062E6F07994C725FF32F4525348238D9E3016A0D79A6F2278 -MD = B7C1ABB0A293231D784A91586DF31F90F3BADDF8D1BBD2ACBA39FBD508090BA46CCACD9E78F64225CE279545915C049C - -Len = 2006 -Msg = 43898A8F7A09FE62ED0229A3102CC1436A2D662224278D3053A94B122045EBF2C164EC70B79389F72D81629F47133C98A2CC0AF6C935E640B39F1C197FA824DAD41FCC51362AD27AE80FDD0075988742A53058AB8DE4AF7EE577F35B9506EBA415F16B4533CDFE5A952218A6D76DDD16A4DEC24C7D9332A41B6372053D1419C37579BDA0C358EB984C1490E7146372FD336216D0A0CE9F282D6D9919406B4C97113ED412DEAB3737C3DE9C6F6BA813C1D7253047DEF24637528B6447126F0B2470DCAC0D693C72816BBF0F74762183030F7F5C9B5D11D6C90E7BB8F50499982709FEBF58E291B672D523089A02D112F7BAED00DDA8B4138BFE207C -MD = 2227A98347861445D685963C2C45EF107A8C04FAC1BEF4A1536C079C46BE0CA21C5A26C72E37D27549793B21B3860F41 - -Len = 2007 -Msg = B0077DA24064BAE6404B2041DD10F3619079446B7BAFD1B3901CE4DF21FA9BC02145AC75F8DC975C74C4BBFB110DC171736C6EAA9EBEBC17757DC4AF3FC4B5B4CA1D6004D79B95E2DA6099903B3E08B74EDBDC745185E67C7878EE47025D11B446B533BF710429606B0F64332EE985E100FC4B5A0189F1632CB498168AA59FF99149E857B579AA617C0D4C90A642C25D0F314C3AEC6C52A7BFD25AE09541DAB3CF3B1B547A20EDC13D39ABB120E52FC19C2C969D171CB2805FDC2C2192B52494B37B97A35BFD17AD015BA5830DEF975E1BF7C910B45729F7BA97A3E94D4517622A9397432C79B297876562208A0F8BE1971B32DF82470E29541AD8 -MD = 251333D23E285B4B106F7AB57FBF3B8B7BCEF93C930AA61C7822E1ECF54086294F99BE0F3E6680D27D4BF9D139A87CF0 - -Len = 2008 -Msg = 83AF34279CCB5430FEBEC07A81950D30F4B66F484826AFEE7456F0071A51E1BBC55570B5CC7EC6F9309C17BF5BEFDD7C6BA6E968CF218A2B34BD5CF927AB846E38A40BBD81759E9E33381016A755F699DF35D660007B5EADF292FEEFB735207EBF70B5BD17834F7BFA0E16CB219AD4AF524AB1EA37334AA66435E5D397FC0A065C411EBBCE32C240B90476D307CE802EC82C1C49BC1BEC48C0675EC2A6C6F3ED3E5B741D13437095707C565E10D8A20B8C20468FF9514FCF31B4249CD82DCEE58C0A2AF538B291A87E3390D737191A07484A5D3F3FB8C8F15CE056E5E5F8FEBE5E1FB59D6740980AA06CA8A0C20F5712B4CDE5D032E92AB89F0AE1 -MD = 64047790B1656E78953B981B1BBFAEAF9D2B1B8953AB0304791238393F3372C6373A1E087B57BE48806229DB73E1B1A4 - -Len = 2009 -Msg = F38261A1E0C715F8BE26B6F39B82CED03A42B1920AE44F32AC447C5A224B7CF3AD428C1395678EDA9BAFB746EBC7035124B2BC38EB18CF23DA956493035DCC4BE8431AFA158AFC1B8BACC8F4C609F903C63B4B34FCF935AC9EB787ED4CBEFD465C220B18EBD03E634044DF8C76E51FAA484C050E5B1D6DE2A87C17D6C59FA10AA10D1A3D3F55937FF92804C7F99ACFF2549D9938BC255600ADB7CEB7D4F461B1B337A0CD2DB31AF31EB32718C623E51E2773E3143C433613E6B8971675B5F6FBD886EB52112976D3D3CF3551A522F264E08CD23A54D560FDBADE04ACA0B0B51025AFBFB6C387698E3D03558E978C1976E50EE472A114E277255FBD80 -MD = D3E0AF24F3FDD5EC758D7FEBFB5043AD930D99550C09E838429DFD518A9F260880D862E6465E8A7FAC968C2EF837D2DA - -Len = 2010 -Msg = 0400F2747226C0098A84CD5B655AFF6374D3FCAED87289D590116712BBBE96F8ADE6B5BB9C58A3010CCD8AB0142C2750544B2AA7ED2AD5FF341D46D060C0095C3D1252ED17FE0560E7942DD9520861B3CDD5828B13886F88811F92281CD0D90EAEEE5664898A82178A86803F4B357F4497F5B433F13A69380F748E5C4FF58DCDB311869F74EAA70803CDE14FAC26A6F58C2B4C5ED5FF72F81930CFFBA834DD1696A78015A6A1300F5D1F0E557A07D19972FD133092CA07902E66D1B41369A986757875E33E0797A2724C38BE538EE4E43A49D711F816FA450A5D46286FB90A5D5F38CE0CFC8CBEEDF4FB164830E3FCBE059792E4A819FB9F3A903A40 -MD = 23FAFDC28D3CB94C6714E4FD9A1B7FBF5C8596A9C1E9BF394C4D8EB761AD721684F82B2CEF6802DCE039898F9802F049 - -Len = 2011 -Msg = 7978F60D35A8F4D678A3C3D9C9D4B348C151CC3665D67F3B391FF621CD2DAD46CADBADBFBE0B254F3F37194F20BDB05C1765F8B3B69C2EBEE5462918C2B92E22C2FC1959197805547E55B4527DFFBACFF0C7F2E91E05DBE570698350FC3BBA4A3685498F4D16E70FA79B427A1286C84BEBC91D19AF251CB553072929F0268282F052093306BCBCCFEB866AD419EB084198277A6F876DA551985499A6098155FED43EE6CB6EC6236D3D01778DD3822BBBA0A1D3A1870F9683B6FA81E1B78F8BB37E3EC126B34929012B99490E124DF37E1FC9D809C8A337358F9B03DB7B9ACCA3F5BD9DEEC8987E166D0F33CCE7E061A33852F5636B807F948273D3A0 -MD = 6610222941E6063F27F76A592BDA79023C3F57E59EED648280DF4E70B2F7AC451DB04671B8143E4301F00A9AA1625B50 - -Len = 2012 -Msg = 521C82A5144B864024C414840BED6D9D038118F25D02D1A8B564B7C669C46A080466BA2FDA823652966A44620C6FDB666416892D427B76574A7BF2A33A22500E27AA6C00A655A0483C849681DE3B1DECBBE0FF7A17EF4092A4C9C64422A2E6810C0AAFD133DEEF9D1B8326B898E5641FFA338AB6A32698179F36B16C67707E1846E52105BF246FFBEB0341C92C4BE4E62B772AAAA84A91481C8E5C13B43330B66A27D9DEBD891989952EB41330B9AFC3C3A48DD35E8A62DC9777D5D3A83C478BF92A347C9DFDA5FF3295F093142BBA5DE4CEF213AA74FAE5AA2068BCE9AB181967944E379B959FE2AE8F5C22A21A5516F74EEC7B296D41C946864CC0 -MD = 0FA6A7863FFEE894A37D6C345CD289456DACA5CE6C7F44BCE3B585CF047B7720AFDF6048BBC42F0B5CCDD9D24B5BAB41 - -Len = 2013 -Msg = D431DB95235C0763527A87EF5A698EA7DDC832FA8377FA56A661499E5464B9C6638A1896F826FA102B8CE891A1BCFB3540F1C9F26BAED42603BA3EBA6F24E493E629588FC08C6F5599123C2931465CD90081EA2BAA35EA39293CA49FF2B83B4BBAFA7B1677A7968C97D8325DD9A41113D9CABD2FFDF3D5709AB4C84F6AADA004F3768071C1184BD34629760E40BB17EBABE7A347DCAB9CEF57B44B2D010CC7FD13411E86157D0D839CCFAD0C4B5C17E33BD5D879584B77682C56E86AACCA13F348F5BBD296161B20B4C53D537A82CDCD212031AA2E91F27FF8B8E0641A6D6FF984ABF8020F58C83FCA4C06DF580ECA80480C105007E1BD1B404F4020 -MD = 17799293CA4B7C7BCFD39BF9B48A6BF0DBB51EE201338A6DFFFCA2EC451032A767888E37E435895C686FC99A796A81A8 - -Len = 2014 -Msg = 17065477F68B70B0EC8D04713DDACA9B0009FA8065AEEF1490D6156CEFE776FEC243003D10DB512A4EBCCBD840B0E0F210B5DE02288DB6E14F96A46D3135629A30D932E5D8B3A6A657B3FD1A66FBD8A121CA0B531ABEE644C425C9F858998A17E22F8A9F0323A6113A1F0BBB25A9DD8F4710354E6D4D1101FC903155977F27C8F4F23B358049FE6E289BF713ABD332F1712F6D15A3A8485D0583FA6C046D154D4ED7CEC383F568350D64B28985863978390DFA8F176A9D7A915CAA34DBD70EDA3D773E4BB8CA2935664F7E87276AFB0621F180A40BBDE010A8CEAFBB5BF17FA564A21E568902B77679A3120595A89EB768537C90C524440CAC31B304 -MD = 8564C3F6E506789518C9FA3C1CA9BEE569E08FCC2E57EEF249F47EE99051309DB1B9BB68D2CD430B8CB0501580B57986 - -Len = 2015 -Msg = 43F40589C133BD422DD57CA9EBF10AB028B7E9F0438C38569420688D0204B6BF99214D7929588122BCAA39CC3C6DB84598DE32A3868DB1BCC04EED36812E73333084FAA1CF535084F99BFCFBB0FE2DFDDF5F04CCF348DC1C7000210807DE593ECB24530E289808DA43BDD752484E32455014537347EECDF17CA6BF67084199DDE1A5E445C824BF65BD965423EF21EBDC9B6FC932B78F0BD68D54DFC5351816E0F6E7380F46086AE66D5475F022385B6802EEC5F2330F76D2FB17B7861372F9D0370D42C947D268882AB68FCAF473C543470F881EE4458048D782DC42A98FC810E56F1EBBD8DE11E9B230F753FF20DFF76C9593C5CA56684C43194C78 -MD = A55FA8F96D3884E9AE04AABA7998C8A7372F458686F5F79A94204EC66245754C3067CA0B70068F890333A09DCD56AD05 - -Len = 2016 -Msg = A7ED84749CCC56BB1DFBA57119D279D412B8A986886D810F067AF349E8749E9EA746A60B03742636C464FC1EE233ACC52C1983914692B64309EDFDF29F1AB912EC3E8DA074D3F1D231511F5756F0B6EEAD3E89A6A88FE330A10FACE267BFFBFC3E3090C7FD9A850561F363AD75EA881E7244F80FF55802D5EF7A1A4E7B89FCFA80F16DF54D1B056EE637E6964B9E0FFD15B6196BDD7DB270C56B47251485348E49813B4EB9ED122A01B3EA45AD5E1A929DF61D5C0F3E77E1FDC356B63883A60E9CBB9FC3E00C2F32DBD469659883F690C6772E335F617BC33F161D6F6984252EE12E62B6000AC5231E0C9BC65BE223D8DFD94C5004A101AF9FD6C0FB -MD = 9CA6F39087E6457E12C969D41C8BD66BDD6990CE23D355669E7606B9203D216811237955DF6739495D94F0C48CE02845 - -Len = 2017 -Msg = 7935E30C177572EA9DDB189E2EE00B99239E31E88A1D04D48D80A9FCF7FFFD2C006C09E9C377D6AD161A3F86909C9EEFAC16625271A12906E58105A69A8BDB8774FD5238DB266F41F0F0E6AABD635C489E937A63A5F297BB043A38D4DAD91D1CC94E516818F5D61FC46BBC529F3E3260702BF9364D6A23D39C1FB3DBB2CF21C19E4B42BE38BE5CDAD468C62EDEACD91D8811A773A0432D804E630C8403F181CA1AA8FAE62BC76F7EDC4C6F9B55CEAFAF4E8152D38C4D49CF73012DD0B51CA3BD8818729EA595E460D202BF25197F2D088F39959C8E6B07F2346B1CC149BE41206AD5D027A0A264C61074F7DCBFEDB9E82A9280D80207D105CE51233F80 -MD = 7D615458E4C6E06F8664CDAF69C234026E91E158B55E8BE246912E524D9CCE3A1EB238FA00E32D5693A07192D604F556 - -Len = 2018 -Msg = FA6E5C7AB3D80FCB11F68B4575BD8C6D4FC9F754CE29AAEAF56AAB37AAA967A1023A228AAB4C67580B607A50662632A5A0E9259C8DAFA3EBDF14E8810CB9EFA5AF12611804BA687B0BF0F0CF1FC881657688D6A25E0B5DB7F6218BD9CE61A6982FAF06B5CF6F6C9DC85E8D74F0CEFBC4AFBF881F08491B885095BD3BF17BE844BD80E3A6510FE272C312837758F80CDACF3921EE01930929ED0B60CD2CA97276EAA2264C288106482CA521BEA53FA4B62CE26A7DF0BDAEB23C57C638E99255C727962BCB9FCB49F4661DFFE50B3B86CFA4C697E461DA1B1A790A4F7858FF59192A90965DE79A00BAC7362C4E3B09AA019959B3D96C44EFB22E4371DD00 -MD = FFBAB381DFA9C3CE76D0CB61BF24AA7FE8ADC2AC733B67F270A1EE1D976623103B5E3D31B12529891D2351A42E2063FB - -Len = 2019 -Msg = 230BF4BDE34E022702183439EB2A7B99C763C09F738E92DAD945C2AEDEB9624AFFAEE3C2858AF2DA90E301A4E3B59E27C6926C5CD04C390018148373F65A3A9BF72E80EC38DA22B1CEA155541ACBD64CE01D62605C88C43D51459BFF591F7445EC651A2CE678446F921C9D45FA7B1AA2AA16A83E256F61AB8ACCB99C4369A0A6545211B4C3385CE3DDC0C9F5CA5D2B9A6F929FBA7CC3EAF0D6CC7F018EAD2013E99F7B482D58E148DE1A0086E7766B50FBE266D31CB77129194B4BC2C5865CE18A0779911725EC751EE5B809F5B401B4753E4FE841E18551E5E16F35C77470C61CC692C45F8C4476FF99C194C820A2C7F3A2C657C2BE97573878C38C20 -MD = 797644CC7304BDC442F8D2210B3417D8CB8E634A4D64465AED43E789A6FBFF0211078DBA12824631DF57041FD8B60C3E - -Len = 2020 -Msg = 0367DD6457986EC8B94A722727C79DEF1EB26ED506310A88CFE4065B9BCDA02B95BCB8F5D4AA2AF1A0011290F302970D54BB0091B48FF90118AF051E65C00839EAB6FF8462EBA232C0E406A4573702DB72FE8D58B0C15AAFC079CCB5D5D0A702871EF3DDC46769D3EDFF0CE8E9AE9A0A15FC9F36153C9E5461748899308CCE2B5E8C97BB9F16C8505A34DEE5DD7DF47AECE9ACF4F13B2845DE7E48BC4326471ABC9F86D73FAD9C5E42C9AF89D0DF00971F39306C91F0B97102AE44749CE2111938C4E0BFAB15B68DD34DF8E54B52D8928E1804313C363E46A7DB7ED412C6FA918C1F7985320C412D457D3CAC140650999775CC2C9D9D2E918FA1B0BE00 -MD = 73AB9BCF620B6226CE3AE24AE2B248CAAD43102EC94EC2B754C4C633D066D097DA730A3681934B12D16D95905A95B41D - -Len = 2021 -Msg = E8C1EC93AA28C61DAE66F7C29F9271464F045FA279D6601BBC838EFF3A5B53EA2299C128C00FB997FC9BD1E579951A0B2B4BDDD0D03BCD04B71651B7C74C8BF3C6194663CE07F68C37F13CF53E8E5CAD3C491EE25539BBF494C43017BBFA6645E49544DBE203E803FCC809E2C93A0EB191BBD3780BCF5E70491C1C5A18E659FE79E94FA2EDA8EFAA739625955B9EA7636EAB2E746AB571C7C9B40EA9D899506989525E54633D5186DA4F93AE6C7FF238A852BC2786F7EBA8C36968F26546191B983CD24FC3EABAA757DA7462E1C2253BECD08D4B3ADA75850F32C835D9DA083072BE453EFB5E514255BA72EC47AC344B944EC384428CE785FB30613BE0 -MD = D684AE8E0A3348D44754918B74085DD048788BD1BA780D12FA04C3792A75AA8A78111BF135D9B565771BB0B9B74C8CBB - -Len = 2022 -Msg = 7AD52ECA2EC84E56B93ED49761733D65A8143382CF7D9995AEF6F3C8F72D24F52B2342743B08687CF416A16F00BA58CE218745A63DE2E07E671232109A14E3F5F085E60C967836C5F12DE97246A1762620DB570C52E3CEA7FE47EE53FF454DB3F610E72E35EE59E38D77519DA8D0533BC30C5B5B6380541238063BDCA3618C5FD8D2A140943DF297FC83611671FFE2C48E8BAA204C15A1A3F78B4FC9C66B4C259FDE8445D7F9160CEE1CEBD7810B543BDC152A887D53D0AF866E3535827C61282F34E968FD350608A38E5399B1F8B171097BC059E7685D01BBA86A1EF4FB748A2CB0D24193389EEF52942243D09903397480F5051B3D28C2FD6E066620 -MD = 219C79F537A596CFC506AFC3701FF06BB32963A76CA2B806E36B46F8B05D7E80CF571A7A88F672B7CD55F6713551DCAE - -Len = 2023 -Msg = 895AA7BAED3164D54B1E76CA9891E3876B045A3588FFCD0AEC989A9A96CCAB03EF6056B252C698B59E6BB552F17C8996388A80FEB020BC253501EB8FD6C034A61D9251DFC06DC852B3A99161F65200D52B3E26531EA5FE1AE297BEC2653CEE2BC8A2293AD619DA5D853F561695AB52DC1411A88738B1E9608D7B7D86EDA2BCA385816BA58A72D07C93D2F31F2A24343E5A5D64FE6912F0E99AF0ADE0C5E83C57E50D671B4D9CB8111B9B5AAADC821783FA8D69ABF292E07106D85504CD7D11272F27FD51C216910A7DB2CE38372A58E3D688CEC8B76414368C929B50AC2BB068B2203C67035D1B52D69E52A6A5E4805F88F8F9072AFF5F6F98EDFD71F6 -MD = 00596BD8B514D86CF3482DF8F3831F93D1853E48363FB5F62E1F3FEAF6FAE0E03A5E7A51A51F2A3A0F0DF49934033E64 - -Len = 2024 -Msg = A6FE30DCFCDA1A329E82AB50E32B5F50EB25C873C5D2305860A835AECEE6264AA36A47429922C4B8B3AFD00DA16035830EDB897831C4E7B00F2C23FC0B15FDC30D85FB70C30C431C638E1A25B51CAF1D7E8B050B7F89BFB30F59F0F20FECFF3D639ABC4255B3868FC45DD81E47EB12AB40F2AAC735DF5D1DC1AD997CEFC4D836B854CEE9AC02900036F3867FE0D84AFFF37BDE3308C2206C62C4743375094108877C73B87B2546FE05EA137BEDFC06A2796274099A0D554DA8F7D7223A48CBF31B7DECAA1EBC8B145763E3673168C1B1B715C1CD99ECD3DDB238B06049885ECAD9347C2436DFF32C771F34A38587A44A82C5D3D137A03CAA27E66C8FF6 -MD = FE99F19C79A89080E2FF90981DDE91994542D4BCC1276A82D1A2E53850341B9AD5422CEAB81E69DAE5E91DC5FF60E1A3 - -Len = 2025 -Msg = 51F8BDCACDA5A57DD68942F72CAD34BE06CCB06F9603359C80D7E5E39D2254FF3593226D0E068CCD06E54F0490CA6267CE2CB73CAC45552173BB980FE06C6DB076B97405088D6203492B73E40532C4A259B760504216A46BCF04B8251FDE04D8AA82354303C103163D166E2F79E9204FBD1F09B8ED474DE23BEA752F9D58C9B39A955B7B8B4BC610BB554B5B6D5220F0DF58FA3308D5BDAB635F8AEF9532309AE48EC70133788B93A14F155D3AC0EF7597E84E9881E49E9BF709F0AADB79E8CA5987B15FFBDC0F10B70E4034554952315E156B01A0AAAB6AE3584FE3F522FA5DF8F909A4C2F27AE26CA35C04198D77D1271E2CE12B92566F243037204380 -MD = DE294C9A1C25D9DFFE0EFD02E94DC7BBD4BA00C201CD9C40C09AE2012983B2FE794EE030D20662F263637C564FDD7E94 - -Len = 2026 -Msg = 21E921EA42279D39789AE6DE121C4EE530FF4488638F8AC66C9C2AF97CFE8AB41BFBF2BF217946396743E1B6377BB29440CB73AB40921AA6D209134D9D583434751A8CACBAE380E8F222A07BA5B5DF1E1629C68550E1F3B9546BB816296DB08A8D8F1BA97FF3D8DCFEA8346ACC1AF1EFED1041BF60C65E3F99DA9E534ED13DC91937123B2F9C95C476102C16E436CE1F8505AD7E6986CD92BF59624C2D4140C3DFF9E824BEA580651B8B189EE21497E1B1835ACE948ED9E0C99CCCED5798F618B9680BD5E2ED3C37353B87C1DFD7219C2DCFF2FC6D08C4692450B6CF88B38936B8E79FCBD40949421B878371CD6E070C01B3C45AFA40D7558971362D7C80 -MD = B636DF6CE77FA5B7937362E44864532973F2F4282C1815AE4DCED58F786834A95C9854E13E25A7DAE58A777004C7BB96 - -Len = 2027 -Msg = 136B91AE480FEDE05560946E2498ECF3DD14A3A690621367BC96FAA7A7FD17E9877CC7680586DBA63210A50761005BE42BE609F0FDFDFC57E2E9CD7CB313A74A685B4381461BC636A158830FA668058F428B62A914A9ED8B8CB26A82062F91CC9119D303CD95A6B288AB9B5DE4829D340EF99CEFB84842840D60680B870E82513788E744FC1C779DBC6481E82B335203D20E6420273235B105072DFAC5B0BF5B40D4C5F42D7B74FE753924C80E68E049DFB5721037C4F23279C84B50697226D31F1B827BB33E0CF53E398AE128B20BF9BB77F8E379833B8813B8BD1897610A568033BCC1CC953F9D9CD20674D85260BBCBCEDDCD5295DCFB633C12F4E2C0 -MD = 84BC84191BD9B3D99B9C756CA58393030E0EDE6F1E170F2EA44FC7D72BDDAA3EFDBB3A20C66E698767F70269B2F0AD6C - -Len = 2028 -Msg = 66507B499F6D8A15A968D9EF30289B4CFAB08ECBAEED472D58140D3C0726746155FA07D73B0374B8D1DADD60432252A4B4F891EC83122BACC96F6A7488B0702A05648488BD0B31950B21D1EFFE567A7A2F7E2D12499DD2D64ED98242B235D9452C35D6CE72D0AE4A57019966AA4C0802A68D20C001A58B0344DBF0D216497CD9414F5079058AA667E30E7D00278CC872542CBF5E81FDBABD321FB0CF877C3972A7EAE36ECC95801E879AB410C75FDF82FF8121214873ECBC4D1F20CC3E9EE2BCACE7659747BD65C37E6E3F209519C7CD189F023C89EF09D7F232243463169C92001818670FAD9059377ABC957C97B94ED20D2E71DB202C0C1036F0BB9510 -MD = AC2A102EAFAB4E292CE58D6F4E2D8DAAC2F19B3A9B2280D6E8797378DB4D13DE4CDC656C9B906256BA575BFD8E9DCE62 - -Len = 2029 -Msg = 9FE62860A9C15D81A218CEFC0C50914B49F04A8A86CBD9DE7132CBD76EA878140267C917EA83BB930BE41268C01D63303682BAFE04F576DBC7C167953F9B90B9938CBE27F83BCD800F0F4602AA88BBA68FE3D8E31A3A8BBA76CC9CD30235B719E5838307CFC7B635517BDAA796E792B72DF8ECDC5A26B6D2949CC443800D12D705354D1CCDFE88E526AAC41C71B7E9A710659550DC7338FB97E774CFF9C44BAD6A31B5783745D503FDBEA6B34CF611022D20CD1B5BAA64E60D111E40989D0F50683BFC5F1CCA929667157977FF1101817DAC901C7E9FC3032ED7FF4DA36A9DC90F8B9C1D81B20B5D972A662975F4DEB7E2199A3FA2E300703FE38BDAAF38 -MD = 6CB98E129DCFA55304DD7B90AB728C70DECD4B520656C854141DBEC032492B6546AB6F40AAE3368EA8E693583D89CA6B - -Len = 2030 -Msg = A91E640739831082E52FFBE1DA2BEE69E8DCCB8AC4175EF07EEE805087A53F164CCEE639EF5C510ABE9B204AD46376878301FA785B89B1AB924CB069E8F535933F61E469A2DB92F4BAD7BC6E9F550FF38ABD06CDCB421B4B60E64E00D3371DAD1F2B52DF5D0609BD653088AA201939A3324411B59070F7A4016439C97E27E0A7FFC463C8EB1896CCEFF358E1E3C9EB383CD6B8D8F27585280DA8C70E3D5809D08FFD605CDE24940AF1999802ADA4E8AA2CE9DFB8FDCFB877F4EFE1C6945A314BEAB88ADE3DC3F835A4C76ED46008A6D0688C83307E740AEA16D12B7BC56183CFF9B4374C12C53D4F364B0D688601624141B225988D75EE3647EB4EA22D74 -MD = 2676E9EE58663486FE90C9FAC38252DECCDCE573E68CD18E1575886DE9FD09049AD2849FB2609116CD91A1D684E821CD - -Len = 2031 -Msg = E5B97559FB95D8E558BA351B7F715DFBD2835417B500231EEF8C9AC1EA163A4EB890E6054F0B9CD4F843D249846A0E6BC3A1B0C88B0DBDA86A28F8E6EB30508D78E70917A17BAF35F98FF98B3BA3402DBA0A3111C1F0B62B931F5CCC5B179C9CC1F66CF687721A3551098F5B3DD7CD642F245398E2B36981405771E614422DDFCAC667449C39399DA06D2012B038C1AF106DB458BD4C3D67EC01B44FC473E1E98048816F70F17AA5FC347E0FC494C302334091D323F40A8C1894F610729EB7845DB749E40C7AC0BB37570F42434E64905BA3928AB359AF4F6BD2AAFE2A74DF01A4C8176840D7B069AD0AFFC8C403EF4C82BCE137E491F421149C172B2228 -MD = B0052F0048EFBD794602514615C162CF57D7B1B5390A1926AA76A5D780D7871E3243E78D1752C44217AC6E6A2F712380 - -Len = 2032 -Msg = 83167FF53704C3AA19E9FB3303539759C46DD4091A52DDAE9AD86408B69335989E61414BC20AB4D01220E35241EFF5C9522B079FBA597674C8D716FE441E566110B6211531CECCF8FD06BC8E511D00785E57788ED9A1C5C73524F01830D2E1148C92D0EDC97113E3B7B5CD3049627ABDB8B39DD4D6890E0EE91993F92B03354A88F52251C546E64434D9C3D74544F23FB93E5A2D2F1FB15545B4E1367C97335B0291944C8B730AD3D4789273FA44FB98D78A36C3C3764ABEEAC7C569C1E43A352E5B770C3504F87090DEE075A1C4C85C0C39CF421BDCC615F9EFF6CB4FE6468004AECE5F30E1ECC6DB22AD9939BB2B0CCC96521DFBF4AE008B5B46BC006E -MD = 92E1D994FEA2FD500A4B7F5139119058A5B70EF6174E553F12FE7BCFCA24B00A28391E3761BDCBA3FD6B033C1286E28E - -Len = 2033 -Msg = 183E87351ABE6CDE83B3160C5E174B7F543F6D1C2AE1507171E532607490E527194E030E25D543C7856BCC3AAED1A0F6BD5EBAE7D569DB10FDC684DF99DF107A78BEC6B0682FF647DEB9429A8FCCF2C13EE69EC8E3A4BD85DFE2BC2F0D8FE4CAF2EAD4BF96890A21DB95609CE8626328DBA475F3D09F22126CF83646FEC3059DC735C12A6D0C0E2AF306C26C99EDA34FA3F5885606725718E2216352999A7F9C5F19219249311375E0EDE0707096B48F32F01FBF3A53FF8D4F5D7D950EB49A7FC1D2A1E8D4839630D854CBA801F9A354558B9866F7EB2F12ABA56F8CC3D60A5D151B0DBEFFAEBB6305C3716A0F939F9D3BF7971DE2AE9E49750BBD7C8AD300 -MD = 837CBE9D7B876EE758F16909FD76D53C864E992BFCD959CE45E6E17D6B7EDF5A12DD7B09A85201D313C99B8D94A61D3E - -Len = 2034 -Msg = F8FF3B3787516E0A7579734B74EF878E7C64C19103AE67A47B9BB72D884D1A233DB5FDEAC236D23C94CC5E0A50F80FA0354EBF950A25D22A5D077F0017D0250F5B0B43A6B6958A74D0EC2179441229F698023DF319C408ECFA062B70D5FAB0545E955BA6F77C3B848DD041A4C40877FAB1AA89CDE0699E7C98575C104D713E7265405109B56A034A91A9BABACCE8BF2B493E84AD20C0055EF281642F7FF49D5775C05AB80415102B94FE90CF920DCBEAED91DC4B0BEB57708DBBAE82329EDF2FC0980F47266893DCADA678B374B34BBF75E8716464A3BDAE28A6281501B503A17E4A6E87AD35BF0BEEF0C81EAF744C4BF02485C4438B41097AF72D070E9AC0 -MD = 629ACA8F76B73363D4E6600AA83713B1806A00F473C7B54BE1FB0A78874A961143D679EE753CF6692B3EBE38C76598DD - -Len = 2035 -Msg = 7EA3A713810E1A3CE414301D5B3E5698844F8DEC10729045C5299F07AC74C8A926BA6241CC4FAD0826B073A36CB9AABD7EE4763CFF17173957791F3FF615C897264D9A88A509F932D332BA3B95E5F3B4469AFA7183A67BA46F7B6D43B99A5F5B92823B9CF22F3657CBCFAA8A5FD0EFECC507702AB1B0D1DEDBEAAE326B49AB080188206024CE0F1324A5C9D10AC07ACDB9F60F008A345DA3A8DDA50CF90E364DBCD0845B031D0AB44BE1DE22E7F13F7C092B945055EBF8B17DD8E06D4F4D8D2883918B309376E07D6849927CFC0F99F32AF039C866E723D3A951A374AFD532B50EAE3BE6FD3634B95D184574CF0F5399352FE164D3BCAC75C3E07E800D59A0 -MD = F4240C0EE78575D35C314CB71D10A7519A1274F398F574BF7DB9EBBC6148CBF51FF78E14182A37DAFD23AAACE88B30DA - -Len = 2036 -Msg = 5F878802DA83E8C9822A0262D2C29E1520E3B8B21D01928610B2DD3940379A70B635E1028D236AF0A4F3E7D19F64BA5A286B61DEF259A8B2587B3673BA13533C8067427CA0252C39BFD6A41D70269BE40D35BA7B9B9AC38CE4B980168BCADA5149AA8B49363FC93FD12AD4FF4D89EE8FA87FFABCEFF8508E949EBE8AFDCE5FCBB55960C6BBD912D80481736A0B485F1911068D242596C223C5D6CDF4DFECC7292D24C8925588336AE40033ECB4A61761BC2518E7C51F14E62FDB67897EE6BF398430D87B8B1427C3FFDD43B85AF3B329456E169A02D4573484478DA4747B81056D0D51D63E5B13442FC16BB228C6E87632A9EE59D48EE7DC3E20090EA6CE90 -MD = BE8FBE75ACE9ABC0DFE779EE5AD60919A99D55C7BC2CEB5A1B6F1797D43860FADE0995CAAEA94655A6F629A7E0649EE6 - -Len = 2037 -Msg = B652BCB949215CC82A08AA428F90CAA72755D785F102D112689205ECB97F68844B120FAE0F68F87AFB41BE7AFFE3946CDE47AFDD5F1A2AC8326D1C15976C610CF261F95D49D7F13DF9619D58B585446D0F572514C046AC5DB3AA8CD2BFBA41DC9332ECCD4C9DD946FBC60EA604E9E69319ECA5A3EF3910E446D57AC1543CA4DD29F2A42ED3F12B2F21B40911258DB642365F8D5F9737E3F39D77B8BC53CED9E3A2E0C0C8328F27428764E25CFA14FAA401A42B8C5EC1586DC1B4EA108D8AEC3CCC312738D8320F41917D413D3E5214DC46A7AD5EAB4E7326279CD5CEB30FA881535621E096925D18E62C71CBABEADD9DA58321F80C8F6777FB97C516426A18 -MD = EF25A90BDBB9800AA7612B5FE4DEA07750776EC8116BC12753BB6E47C831C03E50C241A8DD3CDA088B38AB8B5485B36E - -Len = 2038 -Msg = 6546D6A5C2F0D01D65BB637E5FD0E07E8320380580E1145BC90FD193D43A615625BF84014832BC89F4D7B06151A6070D29BC8BDAFC7CA713350A1A690ACE8DDD8491C0CDD5625537DA096C76BF8B0D92F43F2EE0250B49F31B3FEE950A4BE5BA0C92A9865F13F933521F84D3F6A35679EE5A1AA7723143B0479CDB749EFDBD7ED0C4C4577A57EAB953AF4D4F51BDBC25D5152ABC17431F4A54EF54C09BD4559F398DEDE349CA00EF9896B67241CDE6568C2E227D1A9B476DD6CFAA213AF4DF680A10227E40AA3287AC52A3E1FC763A5800014E0E986EB22109654E18C65493E6194E1735C631A74F9C5EB2491FEF909983ABDB45C98E673C276A431E2AC418 -MD = A6A84E685D851F4771BE7F71424498EFEDC15FD6F08E4FC43EFEA0B3C23E175777C9E0E18F516B8503C200729F999CEA - -Len = 2039 -Msg = 032E441D08C89545C5961987E89BE2560F04BC3F020F798A83F403AE49A45F16B2D4BAAF899FAB28E85680A5B0354009827ADB04810FFA3E102CD50F3CBB5F13B38162EBBDD866F9AEC7CA8BCF702BD2026497B9F4AFF49507461C9658C6326815FE96922FB96977A79C3A0E81B7854312B8B5147F3B5D028C666F99D57899A68D63DD6C8261A0894636EFDF628338C4AB39B83F9AB66FF748C4FC41458BA8926ADF757A74F59603F61C5EA8C2F1C1B5D9A015F37E4443B50F20047405050B81969C1108EB01C09CEF25F081FC9885FF5623E76F741B811D03A9E05EA2D6DF1C735027D715DB3C8074ADC2ED16082A7A2C8D948275484220E682FE0D0E9A70 -MD = C394A4AE962F9A54634DE55F88A3E517979F115B6DD0BF3DC3D0BD8A8C33CF628DAB4ED3611CC7411C6D6363BF9EE171 - -Len = 2040 -Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 -MD = 6BFF1C8405A3FE594E360E3BCCEA1EBCD509310DC79B9E45C263783D7A5DD662C6789B18BD567DBDDA1554F5BEE6A860 - -Len = 2041 -Msg = 7163B9175ECF3A64D3713ECC73204470A0DC1B015B4DF7ACADDBC68D14DA8C923BB6FF08BB79C1CFA8E001B85139E0A9B18131FC34832C9058D9B8415FBC3DB4C75EB9D8CC025A6F5203BD7A1FAC956C737C11692EA194D18D80F63ED5A2ACB3BC8E3E235DEC9C43819E0001FE35AB6FC3FC25046CD079B32B0FA40816F69E0C47C05C3D7AA68863E8CB4197921DCFDE83BCFE3A8F243BAC68374FAAA6CE9A01438D7AED50CA231954CE9A59EDE88A408CF8114012F619003D6E192CB7CBB7AC3A9BF1712F943453D3AF925F2F1BBF10D6EC0094A7832BF3D0A52CF727E52EB2403FCF3AD7D4CDC8A86DE388840372C250A8011F27BC1B029EC3F39FC14B9180 -MD = 82667BD9F3DBE542D4E09C23CE567C1C904C80399259B9E865E2DA8A842FB77590A73E60CCCF42184E1B732A605B4957 - -Len = 2042 -Msg = 3DCEC0E888A6A238E2AFB6A02F6F270FC30B93C2CD4FFF9F6E9A0153D50FBA559080A282519C7B91396147B7279937805060E529F415150FD7A9E1950DEF27FB2DC0B201C73C2A834AE0CC073961B2CFB074E40DB425B0E6628389CC622D7B963DB1F7A35823CE80D40DA1112302EB90461EADA4005EF4D5DDA5C04BC7AAF3A9DED53AC54BC17E2E27967C7B828AEAFDC192DED6AE741044347BE7888B3B6DEF63A118830ABB1F6B6D5B2D28E5F7D5803E8507D4F6D06D85D90D1E250E6389CF63D182F4587E5C5526847A0C95E2EFFC3344E32BA29E56757BC0125148FF08B83553A8CDF0F68AECB514F06941199799C491E0C55C58D240560905B56C6CF800 -MD = 7C0F9D5068A99C4775579DCF7657D2922914E45E45570F204C7FDE3A53C9B08E09843B520A8BC4BFB229DB04CCE8DB91 - -Len = 2043 -Msg = 41355A235D1F809C3C5B921CE7FB9D517ECC1E7439FB304F2D1CF919DAA5DE13154FAD2BC8FD7F3EA3B026CEF34BCFF61B5D779CD8D2C76461FA3821D6343AD05A791BC915164543C32A74C85FB225DF22A0039D6F349C6E39545CBD490359EE5152D32F263BA5B6169223F6BA9E125AF53BAFBA95FDEEF5A068B6299871CA1BB743235076471144501E03C911701476152C218EBF1A734198655498EB6F82A1FDDBE4BB845B0DD7636943CE869812F9DB13E59055A7ECA774C60105E95A59E23A9156E23FB51AA9B7AA95BE82D8B375542D320A1989A85E6F9ABADF85CFCAB576C93E71A1E1367A2789F21DE5D4BFC0660DFEC110860DAA15F23FD3A4600620 -MD = 36CD023B749A6C7F94F613E390AA3E0D01D93385438D5492DEDEA8AB9598B0362A31B509D4221F1DF4F6AB3152179956 - -Len = 2044 -Msg = CA0B483D9E27EE4DE097CC92AF14D4A1B096E7533E85AFF050C49798A09167C63CCC9E85BEE8FDBF3681547C687D71E24B4CF618410FE9DF0B0D161AD323E14385C661EA7DCA937F62ACD0E54173FB18C22DC0048B35470D81BE6F1790B8CE63CC5495821AA34211DCE1E681F95DAC61C960EA25D74FABCF97BC3CB800BE6DFB4325A608BA2C701756B31C179B6E0724B7DE0E95E9732865034AEE72C19617BE8AC5CC266633E949C733B38F4915C94964EF5EC2F5C5BD65E1446F2621A120376B10DAC06792625799E67BE6F474D4DEE4D4E84C8EA08F03FE4C95D8967C3C28E82606FE7390449C4C0EBFC002054C8228157D04D8B4346A1667EB173CF238B0 -MD = 2AA3CEE6A463AB4FA2B4FFAA2C15213A0C47B639533FE1CD6DDE70D4CEB660EBD44652268A581817AF62D9B4A6759CCF - -Len = 2045 -Msg = EC545360EE77F181B55B942CC77E84B64A74241F8E02BB940560575964C5FA131C453BCB179B6547D317180BDA99D8EA69D4216B58E8C38BCABA42E2B1E23712C6558C6A1A14996955540A4D54A97364B1ED11BAB2B20E0DCA2827FE47EAC10E7BEB694ED6F48860D419F3C370F893F57D9858193389DAF69EAB130C0BCF00D639E3ACE5240E232D733D0A1AB4A805BB8367472DFEE0873762CED8006DB3EC84153A48088581C2BFEDF78FF9DCD628B2B9DB64FFA900B62EEC1F358E4ED5EA31CA719EFBF381B6AF5B366CBF2025099E30B39BF446C8CA123AC302FFCD163946306F5420E3C2E8D50F48169402EF2E1764228D30A4F14A3EEAD1C0A106667518 -MD = D9148E94EDB5D8591C8DA659DA7DD8D8DDED2540D07C8FCCE016C38AFB3DA035BAFBF2D1B9C5D5B7304B2F7652A1DBBF - -Len = 2046 -Msg = 36CF74E3561474F90A2B62718C8740CE553A207334A1EDC7F95B702848595EC23285F826C989CD975C4390E24C485335B616BCBEBC16EB7C24E895F1A633D5E331DA67BD2A86B088BA6874BAAC74F08F5483D0702F0E41229C14A588BEBD592F86DADB5BA72A1E7FE310728B4234AEC7361AE460DB299D54235DBC92DC20DA9A9B3DD3FD7E68DABEE80C8D1272BC1D1C98093CAC93DBF7FAD2D448E2F1A7992256ECB537DC501756F66D6D7B4409C4C74CEB9355E8587136F67FEE9736667370EC924AF34DE22F75410C1251B344653F2535A163B7FB90ECD874FB0362670E2F9182EFDF0221B0F727BC63534E9F98F4AD713D6B9486F58221442273B9D1EE50 -MD = 21ADE4003862CDA4042A68D6F0C22B3996830BC639235D28D94EEEA08D863A59F8008BF2750B51836AD9F65412E94F94 - -Len = 2047 -Msg = 1F42ADD25C0A80A4C82AAE3A0E302ABF9261DCA7E7884FD869D96ED4CE88AAAA25304D2D79E1FA5CC1FA2C95899229BC87431AD06DA524F2140E70BD0536E9685EE7808F598D8A9FE15D40A72AEFF431239292C5F64BDB7F620E5D160B329DEB58CF6D5C0665A3DED61AE4ADBCA94DC2B7B02CDF3992FDF79B3D93E546D5823C3A630923064ED24C3D974C4602A49DF75E49CF7BD51EDC7382214CBA850C4D3D11B40A70B1D926E3755EC79693620C242AB0F23EA206BA337A7EDC5421D63126CB6C7094F6BC1CF9943796BE2A0D9EB74FC726AA0C0D3B3D39039DEAD39A7169F8C3E2365DD349E358BF08C717D2E436D65172A76ED5E1F1E694A75C19280B2A -MD = 13F4B7621E012BB5C6C977576DDBDE2FF0CE434A9764DC9FCB49B23AAA92989AFCBC66A9EDDCB02EA38E4C51DF9B7C87 diff --git a/node_modules/sha3/test/data/ShortMsgKAT_512.txt b/node_modules/sha3/test/data/ShortMsgKAT_512.txt deleted file mode 100755 index 44b66f3..0000000 --- a/node_modules/sha3/test/data/ShortMsgKAT_512.txt +++ /dev/null @@ -1,8195 +0,0 @@ -# ShortMsgKAT_512.txt -# Algorithm Name: Keccak -# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche) - -Len = 0 -Msg = 00 -MD = 0EAB42DE4C3CEB9235FC91ACFFE746B29C29A8C366B7C60E4E67C466F36A4304C00FA9CAF9D87976BA469BCBE06713B435F091EF2769FB160CDAB33D3670680E - -Len = 1 -Msg = 00 -MD = 7D9025BB145A0814083E934BAA80EDE67322651DE52062BF9EB93623C37EFC74C62240CF8539107F9210C1E1126F79CBAEDA6B82B4A8CE6821589C403FA76B9A - -Len = 2 -Msg = C0 -MD = 0AE7DAC687C3525D5C2A6C4119EA3968D43DFE69C2407A44D3DE6B804D784530462440E4881FD42785E1CB69AF4F036D96D8FF1EE35D9B3FA4A2859F592FB2DC - -Len = 3 -Msg = C0 -MD = 5A844DE7D6B8BE77BEC55021C9BFA375C4B97D79633C7EA4E7E2BC4C64AC6349D3A0142AAA50C2118B1D94AF9A5B804AF94F259B2D06C3F4A4997AFB8F787F6B - -Len = 4 -Msg = 80 -MD = B9F236B9C7CA24FE356E9375B34831B0054D4AB5CFB9E326C9E411C1805B3ADB36E7D6CECCAC123F27638FAD3F34C48F8813A338CD53824D19BC14F6EAC218B6 - -Len = 5 -Msg = 48 -MD = 88CD5E4AB2B5CC16CF48E87B1EE3EE1FC5B1EA98142E02346429E5C8F18B570120A04040CDAB16643BFD70D31AB3FD6FC360955AB4F6A9494F4FDFAA9B6576B2 - -Len = 6 -Msg = 50 -MD = 5C69CFB002435D627390C62F2E7E74A688E537EA1DAC71D97F6D99BCCB64FDA7D45A8E6B9DAC199B78C4A3B59B04C8F1354B8D15B01DB520932F1544DFBF757B - -Len = 7 -Msg = 98 -MD = 90E09885B5F8B9192E8380522F96D6C1C6D407AA9B73CB07AD8B84C310F08ADAD507B63C2C041F00119062D63421FFB51E81D39DB17A022730A03D6FEECBCF0B - -Len = 8 -Msg = CC -MD = 8630C13CBD066EA74BBE7FE468FEC1DEE10EDC1254FB4C1B7C5FD69B646E44160B8CE01D05A0908CA790DFB080F4B513BC3B6225ECE7A810371441A5AC666EB9 - -Len = 9 -Msg = 9800 -MD = BB1BB51EAA5733F3788703E89C5ED2290FB69DBB9184B79484B0CAA3FC7B423B6C625DDCC447D3E38E90ED02F1D9A41D87AD4BC4BEF1E61EA07B40AD3027B065 - -Len = 10 -Msg = 9D40 -MD = 98A010E27C158551048CD5A129A41D0DDAAF88F80F4F055376E86604FAC5AA22D5237A2C72E72E85B801095F78E2980C4BF77CA7B976DFEDA05CA1A60B23DFAE - -Len = 11 -Msg = AA80 -MD = 55E7507AB43B7CC1C68E6BA5D343D48F2696BD318C16503DF133F1CAC09A3535419903D50370D82FB93F60A76D17F9B4EBA308C37AF850912986A3DA17E6E75C - -Len = 12 -Msg = 9830 -MD = E3063A882573859E32017A6CCFB57B987C6F6FEA20D549E333DEA845A7386B85A25B9E8333B3FDB4B54059E5777A46D327C4E468BD10165302BB31C2AF8611C1 - -Len = 13 -Msg = 5030 -MD = 4398A50AE4A6FADD7F5F8E6A7081F8009680957861F3B3A53D54B7F4CEA148B7EDBF9A1AC147A5DBAF7D4CD94A728C76A2398E8AA4CD5FD84CDB9867DD88F5A0 - -Len = 14 -Msg = 4D24 -MD = 6F4B8760DFC6562DE01B2B143A52ADC17BE4BA0E204384975C7CF57B7003318D3A7572A4168A399D0196BA5F7C7CC0A9D2BC9E60533F035EE2F9DDA8179BC87C - -Len = 15 -Msg = CBDE -MD = 0B8690ABB5CB59D642C70D133576E23239B2056C20DF86A3CB7E3FC19CF01C2E093EBB3D784280B9D76187B350C1D429CF2AD3E36110B58CE0C1D73D05FCFE59 - -Len = 16 -Msg = 41FB -MD = 551DA6236F8B96FCE9F97F1190E901324F0B45E06DBBB5CDB8355D6ED1DC34B3F0EAE7DCB68622FF232FA3CECE0D4616CDEB3931F93803662A28DF1CD535B731 - -Len = 17 -Msg = 4FF400 -MD = 0528A7C3B8D8CC33356F6939CF6B1F3735D1F2A79082AABB68B7BAF9DECEE1D294B4000A38D0D9633C12D0A79B029986769164B39A074A73868EDE1C76B67C3B - -Len = 18 -Msg = FD0440 -MD = E63FEC3C66851679AED870E79F9FBF1357193A15AEF7C1AC8539E364AF96EDB9E35BBF2584B5C58AF375923A2BEC13FD6AE3E9B0A65312A2DFFD85C56B81CE77 - -Len = 19 -Msg = 424D00 -MD = 80D1E59DCA8652A4A4D3AD1ED538ED51F96BB424821D442B2287C6860F4AEB061D61BDB0D2B93CA2A90F704C748739C3D631978C32AAC5B0BF761E5DF1C4723A - -Len = 20 -Msg = 3FDEE0 -MD = 5E101A1EB7E889DF3E87F59DCD4936D22032F99B2F7FC3BFAA21C0D7C5802C1444858EE021129C2F84085420434AC072F0033950FD1AD5F650D28EF78D40C453 - -Len = 21 -Msg = 335768 -MD = 63619316318E0C2EAF7A5BF4F05098845AD1FF57E3C6DC43B2F661A12FC4C86ED08F39C9B53CB4703E8D3A7F1738BA1E901A2A736E97FB94CF347471AD45B589 - -Len = 22 -Msg = 051E7C -MD = 0879FE1C91F39A3292AE8821A8FA436A0817FCCE04D36B27718CD9BDFBF0B35B3100233AB78160891DFD800BD48F5ED69290A22C630081BE4A23CA22C86AAF19 - -Len = 23 -Msg = 717F8C -MD = 74C5354A9033D668DCE7E77AA3514FC5DEEAC273796A3E8FF9AE88509D875CFCCDDAE2AE6621BAF9F2C42AF85A551A3A5ACE367FAA66985C9DF41B9D8CE4CADF - -Len = 24 -Msg = 1F877C -MD = EB7F2A98E00AF37D964F7D8C44C1FB6E114D8EE21A7B976AE736539EFDC1E3FE43BECEF5015171E6DA30168CAE99A82C53FA99042774EF982C01626A540F08C0 - -Len = 25 -Msg = EB35CF80 -MD = 65AFF5A084AB8DEFA66462AF43A484615E8A57D647F7C11207629CF33AF0F74510F67325E2DB82BED15F82E6AD6CB117751C8C24A8A512344F1E90D853047A7F - -Len = 26 -Msg = B406C480 -MD = 6010233523D0AE072D9C4D679EAF58A2B72BD7C9ED5FA24757C1AEEBC796A67DFC47CF40B1D92B0662F36470A2E20A17025F9B69A91F0013404AD98C4BA97759 - -Len = 27 -Msg = CEE88040 -MD = 662C4988BEBF656B1C3172C8AC2BCA4272C15ACE4EF6AFF5799F24024794AFD2F0C6171E0EABB2FA745A59B332D83809D288CBD7E534D686BCAA1F5F03DBF3DE - -Len = 28 -Msg = C584DB70 -MD = 88A012017C444FB01525D25CE726370273DB8D6E2F1CE840C845F692B2DB637AFCDE7B665793F9EA088D922FFC3475CCBCDC0DA9D8722D2863C614D1A29A4D5A - -Len = 29 -Msg = 53587BC8 -MD = 1C1277080E9B8E33743FE90B6C7F48520383CF27138538F99EE3102C4F0332CEBD446BE464660341234026FE3AAE6E22135CB8F9A3D4BA8045F0DF62C9C8F15B - -Len = 30 -Msg = 69A305B0 -MD = FBC3AAD0839B152256C44E61D24FE7ED33ACCCF94DC6ED2162F81C847731F8EF78EA9AB848222E9B0032B1A0FD4131D81C77C82F99254DE892793AE28D13E20E - -Len = 31 -Msg = C9375ECE -MD = 881FA997CCBE7AF73EC93AC192D96A6CCFE8CD4814EE2825D248DC4AC411FC9B32C5C031B1AE9773FF5CA9D480B6D4F73F9272C9224A6802F9AB77F98731A89D - -Len = 32 -Msg = C1ECFDFC -MD = 952D4C0A6F0EF5CE438C52E3EDD345EA00F91CF5DA8097C1168A16069E958FC05BAD90A0C5FB4DD9EC28E84B226B94A847D6BB89235692EF4C9712F0C7030FAE - -Len = 33 -Msg = 8D73E8A280 -MD = DAFBEAFA4034C7CA0CB3616309493C92F9D4A386E7BF3950A6BBCEEE9E2C6DAA64A105ABD2EAC31539B8CECCE07E572F6263BEE2D9716DBC664A6330C8593DB5 - -Len = 34 -Msg = 06F2522080 -MD = 42E83D86A46BBC79F8F0D0FE0CD66FA0B8B7F01BB2DBD67D29B60DD1C176D354AC0B21B38376453D867260F452CBFC4034E608426D5C03E6D97C53798BD6EFBE - -Len = 35 -Msg = 3EF6C36F20 -MD = 6E0A75D1B4D96664EEF8A1FFC9D086C67C9477494FA9BB1760121B72588F604931F4790EEE494C45E407209996020963BCAEBDFFBAA8DEB6C3A0A38848861A1B - -Len = 36 -Msg = 0127A1D340 -MD = A6DFD9AF0FCBAA17A81F0D7CE4C4B445FD17B41D65F8F383C3BD67EE1975988E111F21C42D81B05A7176BF6301611F5FC5CE51945B1CCC966A0E9DEB95634DDA - -Len = 37 -Msg = 6A6AB6C210 -MD = BB8BB7FEF46CCC2A01500091A1DEF056B6BBA4F76AC67E805F69EE2293C9A00584D37D621ACE8F5B9B8E2120CEA60D8C335A517097DD443C6FAAA5061F38394E - -Len = 38 -Msg = AF3175E160 -MD = 8BC73B4EA3B33277742686FAB0A3658B0B9916E4D1F97C5E67645622F81E940FA709D3A70E78BA97490F78BE15F442EAE83A0D48F78F305DF21DC4C223BF1697 - -Len = 39 -Msg = B66609ED86 -MD = EC5DF3541923F8F665C9711C4FCAA13F5822F62B10F27EFA903487B7EAD98A796BE85F001B143C25A8986999E792FDF4220952492BCA5FEAFDDF30C2962B8DA5 - -Len = 40 -Msg = 21F134AC57 -MD = 2E76D93AFFD62B92FC4F29CB83EFBE4BA21D88426AA7F075BFC20960EA258787898172E17045AF43AB1FE445532BE0185FBEA84D9BE788B05F14DBF4856A5254 - -Len = 41 -Msg = 3DC2AADFFC80 -MD = 0DBA3F750E3C2F725CC477D9CB63F4FE12076DA6F3F1FA8F3042C69D1E4EF6CFB040673846FEBDB28744E6C6E0105D78DF6109095E3AAA31FA1F93279C9CD912 - -Len = 42 -Msg = 9202736D2240 -MD = D53E12B614DFB8F42D3BD9A2A5544A99E4AB269E9AD636995FA1E440941570C77622254C1C863096FD68FF9DCFBEBF85E65593801714B2E4AC24B20FCB8A5408 - -Len = 43 -Msg = F219BD629820 -MD = 4054B513A17173083AEDE6E4CC629B0F17315885D04E134401D189019B6033AC0C8667DCBB200621F3D58BE99EA277161F706FC519971D807B7DAA62E5D5A795 - -Len = 44 -Msg = F3511EE2C4B0 -MD = 1C5EC67F5E1DDFAABC16DC78DCA9C33D3078DFA95275D61A6354DA8935699C4B4F5C768E879ED29F3AB91C84248635492A2BE6A64294B6622CE8B68DC4ADC215 - -Len = 45 -Msg = 3ECAB6BF7720 -MD = 85F15FA8F5559E7A235135E34E4DA4BB83B701C2B60C225EF9BA40B1F6B159A081CC06CF6E643CEE585A4234D9869F18B3CD3E14866C9C8C2AAFAC21C7BC220C - -Len = 46 -Msg = CD62F688F498 -MD = 6E1EEE3796FF169B6E6D4474337DBB9B445DA04A4FDAD95B5BFF7688A2827F8787F270BAA8EC5EEB7F638C62C42FA8CE711F7CC666A0B3EAC8DEAE230FD94D57 - -Len = 47 -Msg = C2CBAA33A9F8 -MD = 5387B52BC1DB2110AA1C9E1AE438CF98596B32061CD7DBE5EF3468B92E7482702D6C6A1AC01D657F07E50067F036C03B76A1B85AEE4D6DD57367312589C54EA1 - -Len = 48 -Msg = C6F50BB74E29 -MD = 40FA8074E1E509B206448FBE757D9494B9B51E8D6E674A67F53C11EF92E96C3EA08B95EBD4172B020010CD6CF29539A34D6BFA002A2042787AA8D879A0F5B54C - -Len = 49 -Msg = 79F1B4CCC62A00 -MD = 7C6C8573F5142730C74EF22725CAA16E713EA20F7DAB9D9BC5E1B7BC4638AC0BCAF4E6B589708CD74F1C3A998A2451E3E9BBDC8658590ACC58D173E82D1329AD - -Len = 50 -Msg = 90239D7EA2A5C0 -MD = 2C5D66FC635C953E8858DEC2DA86EAAA4AC72E7D81733BA5DECC68AE1E50AE25C23F386CEE4F095EF74FF4B4D29AF941CC7918D7EE3A97AA33F8FD431F47A14C - -Len = 51 -Msg = 9AF4C2D144E340 -MD = 0ED6F73C4757BEB87F5A004ECBCC122364B2CF379B7611D9F61F8FFBDA5B63E885DB3BC4853901D06D520BE69DC8FFCC1D34171D9F52679D3A37981358B8B1DF - -Len = 52 -Msg = A4F2613FA7AB70 -MD = F6A53010483B00C93222A6238FD56F75CA6231C9E171764FE8A66C2FDFC052BD2B979F673E9FBF6D3D3C2E4BF3538C6C973431EC4D98C5BE6925D0E51CF3D9DC - -Len = 53 -Msg = E863B85EE7B528 -MD = DB4C1AF9A7AEAF7CCFF23DD3E517962A094F2EB4CC4A9D80020804D343F68D4C2F4631D9E4B2101907DF4DD95D638E9EFCB7FE0EDA2F2688C3212F3ACA89BA2A - -Len = 54 -Msg = 9F3D6D6A44B684 -MD = 983EF4B8FCDD6B1331690AAC824F840BAB5BBD6AF813E017E6602A307FCD480DABFB560DEA322A17A4F7719D3E5BA558A238EB726DD8A29DA9FDA7E881CA9507 - -Len = 55 -Msg = 14B06DD54EB364 -MD = 166E0FB4811A644DCA7DEC87B83EA50A51121B25C4F811A1A40A3DB4B36254151A811E1A01DE7780C6A759CA05BB18615471997EF1C9F0C6CA1D155E7ADB0EB3 - -Len = 56 -Msg = 119713CC83EEEF -MD = D1116786A3C1EA46A8F22D82ABB4C5D06DC0691B2E747AC9726D0B290E6959F7B23428519A656B237695E56403855EC4C98DB0CF87F31B6CEABF2B9B8589B713 - -Len = 57 -Msg = 8569DF971E674E00 -MD = C0D322486B02890ECAB78FEA2DA37D01EB2F4C6370A374B5AB649EE9229D5378FB1B8FE98700E4A88C3CED2553B6EC340CFCD74139F97F2441D630D82DBE4FCB - -Len = 58 -Msg = 42DA39AC5951FEC0 -MD = 294E6E0F67926DFE38DC02593BAA0F3DB3F7C8BE6C87FE51DE2B876CDE0405551765CFBF88C22E892D94B3582DAB041731B369FC9C213E0157A80895C751E14A - -Len = 59 -Msg = 230688D359F31380 -MD = 704232C4190584D9EF6CE0284CD985CAAA857B3494330AC3353EF2E4950396A70241C5ED9B2FC60DB77111A18D65DC328911F894419F7756F8D3F58FE228C453 - -Len = 60 -Msg = BA594E0FB9EBBD30 -MD = 653C06F9C5EF0187FF09B7A045F5499CF5E37F7A33D8552A246211298586C3ED66C219ADEF9E14E38716D451C1C66198C58ED320C140371880B2934FA770759B - -Len = 61 -Msg = 9D1BC347E3B05240 -MD = 136F9117EF1E49177BFE92CEEB8C1177AE404DED0242D7CD81B545E518BE0BCDA273A9069ED7631600C4CD34D46D02C691853FCFC3646FE9F9F5785AD55EFC23 - -Len = 62 -Msg = 756FDE7AB6CB531C -MD = 29EAACF6EC17B487DA531EE47DECB94577B2460A1DBBFAA2F3C8A7E56F2A8C6FC36F43EA0E9E83BDD15FE157E483C55D83079A398C504C68C9A21A25591DEF9B - -Len = 63 -Msg = 669DAD29EA0D289E -MD = 95964670AA54B96CA130F56565DB830593208EDB416EA36066222F676EACADF601842EE62A0FCB2C973E5F7A40CA40BA9AC9CDDEF451E022507829A059880DCE - -Len = 64 -Msg = 4A4F202484512526 -MD = F326C7C126DDC277922760FEEF77C9BAB6FB5D3430F652593703D7C5E30135CD0B0575257509A624184330D6AB1F508A666391B5D4690426B4E05301891DF897 - -Len = 65 -Msg = C86CCB0A4116026080 -MD = 4C564EE6BDF33370CFA81F1565C519F1276931A335855DC3F00A5DF78826C86936F725A5587C888EAFF729355A1C897FC041909B99AAB2777DB35CC842A1D61F - -Len = 66 -Msg = 7A556A043BD867FB00 -MD = 688854A7151CB2098166234922372A6A81AB3B8543206DA28B9B3891AAC513262CB575F005DCBEC31DFC8192340A88A1640CFE0FBF20F3AC4A6D088D85A36E41 - -Len = 67 -Msg = 91829C7B4031005880 -MD = 6FA3BBDFFE1257B22773FEC30338BE6147A1613C7F1C56EC86140BFAA1C44BE64CF979B73BE5421747C7BF7684A38FE042EE0051939863EB79B5927D913A6F32 - -Len = 68 -Msg = 0462427C865798D260 -MD = 52CE421EA9C235FC91E8B0EE6F83AD74BDAF05E7257084745DAAE8BAFE13413F07FAEFE240CCAA362D7F0CB060CE63D5874C8836A7FBBA96F23EEE9FDC9CDF35 - -Len = 69 -Msg = A51806364AFBD2E830 -MD = 894E6E370E45BF887DF5AF19671D6CBCDEDE1A4711FFFAB1EA5E84F0CE6FF61AC9BF8CB1D0423EDA2281A0F3C4C29AF43E485AA34894DB5DE0DB2CA7E90991F4 - -Len = 70 -Msg = F8CB65B7FE6995F200 -MD = 7EC8C50A4D2453978B3FF6F115835E3B1C17942114438428F2F146F77CB44A9F5DF88E773685F53957EB1C9A4443AF539D0731FEB94E799A227604A8C760717C - -Len = 71 -Msg = 454C87F43DA37EDB04 -MD = 753721FB6278D9F1A714AB2291998A571614FCCB44FAE7AA0B434C038DA99B0E33AA387D8656C4531A217D18A6431CC63DFD16F373D82673E99CDAB639D29884 - -Len = 72 -Msg = 1F66AB4185ED9B6375 -MD = 1F5B8A6E8D94F5E2535D46842B9CED467C39C2DB323963D3F3D937E9DDA76FBC17072DDA2AB4771CD7A645145A2AEC1B5749BF9EFE0CDE006CC3EF8936438E0D - -Len = 73 -Msg = 5D7C71C275D9F5613E00 -MD = 1131B157BBA2DFB73E03F28B0F89ED86D827713965EA1CFB243B51EF3462FEE325FF92E69708A49DCA7E14A3D3EE2DD8DB997DC6EADB613CC8F923E2600EF5DF - -Len = 74 -Msg = 1A533E4BD100A83884C0 -MD = F68F852A9C5E8E4C7DC62F240C93107EDC39DD48EB5DA115D2F4E71F59EEE63E8461E50CCFD1101E8025725C5A74D9FA7DDEA846CC974B29EB568725B9D83BE8 - -Len = 75 -Msg = 7C8433BB4FD46EA17BE0 -MD = 6FEF2791248703065240BA421DC2F94A12C7197DA34B5E87E64DF966A6A8ED8C4748F7A61FB77FB00FCED1BA1702833EBE15E02FB90B72F95EFE22BBAE48D42D - -Len = 76 -Msg = 8CACC33C81B29F0E8830 -MD = 448069BA186A9CB0BF20430FE1F2752931E299A2C83D8C698ECC64B3A379B558F4880B9DB1A6F6D57B0712F1F08413F8992ADB3343FF6DD60BEE0B4D06AB68CA - -Len = 77 -Msg = 9CD0B4A48455A6716AC0 -MD = BC5EA6FB60AB8782E753E46BC6C3D07EBFDC0715C6B7AED2A16E84797781221E4C457B9BB8BA0BA8723D679E50B75259EC68DE36B8D295347CD49C22CF87C6C2 - -Len = 78 -Msg = 4DBF1B5FFD3D72D20F50 -MD = BA45CFF97F31606116A595A7838A24F99B2E4012CC05085022F5BF31BDE00608382BADB6FC8A8563FD5DB8EE86FF30AF6A16B472D5D27FC9976C004EEEB77E8E - -Len = 79 -Msg = BE31E2945E1BA17901C0 -MD = DF702B56B4FEAA35CA29A0803E2B3C9176F1D81A302C81EC3F41B27960039125C9EFB44254DDF2ED707388B11EBD0FA4F47AFACABB58B18B867FAFE70B18B679 - -Len = 80 -Msg = EED7422227613B6F53C9 -MD = 2AEEE7A720C030A820CD7BAA8570D72CB90B7A238C38C358676358A7AE9A5CF26635B2320D61C1284899E654F0BFDD0A3A9C343FFBD11838B57465E6C3AD3A57 - -Len = 81 -Msg = 77B56B460796582D1FEE00 -MD = D03EB59CCA24B2BAB70BEB2D820596A45B099CF661E3B3B1C43D2B030CC99F73AEC3088FFD77E1D35FFD3A76CD3340657802D0DF44DDAAE61AD8CAB79B5FC103 - -Len = 82 -Msg = 5F085C1F91F2E5EB05C840 -MD = 2F563FCC5C6728A9FAAEE794F1F7617CD9F2538EA67F0A51246CF4F9D14EC43329F92B2E8B330CF85D13F11C684FFF389D8DD0F9823F4A4ED8A7BD76A7A0B81B - -Len = 83 -Msg = E5E559373233E6EF933120 -MD = C691258A410DCFFFA145F9E699BA7F8D2317F31C0989AAF81D73292E508CFE9D9D5618FA3B997890CB00209691E73C142F550887549BA7583137DBB0F0EB5AD0 - -Len = 84 -Msg = 670C357239C46D9E96DD20 -MD = A40A97F18404AC988E6FCC674C21CADC1D540AA35B2EE6BCF3347042CBE744CB43C44684C8EAC951E0799B2950A9A2BE7D2357819C5F76DEC9DD6662051DA823 - -Len = 85 -Msg = 33BAF96B35241EB2243230 -MD = 268182625C81CD58390B6BAB1F586F8F39F726A5B58A7B3578AE750774906768410190941607AD87686D6EAF89BE806CBDF235F58C82193A2D2A68DC5864B10D - -Len = 86 -Msg = 7148A621D35D6D486BDA90 -MD = 29669082B2EF1AE78359476ABC4F0C0F17934D7A87D1DD787D51567ED09E1C056B0F5B4B756A65AFBE92F9D4C8B02BD76EFD77708F8B77CB37C33F90D31940C8 - -Len = 87 -Msg = 9D7146B5E9C8246BEA8C4E -MD = A24C0F96BBD48809CD80F4CC6816C82D1EB5E77A7359EB07F48491A4E059A1CE32B2030CA5B8B3198EEDC808AD59E577DF8E93C9CCD87CE5B33E0E918C9052B9 - -Len = 88 -Msg = EAEED5CDFFD89DECE455F1 -MD = 7B1C1BEF3B4DEB4B4812C81A6E7B3F2C66FA95157FA3B9D2959DC56B8ADD100170D3C8D1745FD230A31F89FA17889C4C58946B5D746E47B71ED0394B66D1BDB2 - -Len = 89 -Msg = CAD98AD0D9BF161229074280 -MD = 706C6B9EEB49CCDFE7BF873BCC51C2C1AB8D6F130EFC6B3C1BCF5FA47C04BE5592069678D1F89BE04130DC8CA3442A6FDA9F545F9052B749BA6CFE4E9569A9D1 - -Len = 90 -Msg = 6B767F82890709DDF7A1EE80 -MD = 6E7CF02C3962F1A854E9ADCB2590D6EFF001EE55F3C4CB5D5956F7D2C9B99D2F54D4E0640B0149B059A4DD97E82828DE9C35DB0630D0783481E5F6993520812D - -Len = 91 -Msg = 73697688CBBF28C51DDDDAE0 -MD = 4A01494471CF0B8B97E8E18B4C5F1B29215EB1C1747AA018CFCBCDA38A9D180BDE8D70008FE58A72E7FC27BA2D45BB04BA599B588AE06DCAC2CF75F5EABAADA7 - -Len = 92 -Msg = A3C1967A97E58B43453D3760 -MD = D0C6CE431F5FCBF4322774DABB2694D0A324EEA247302BAC639FC19801C5C1ECD740BCB55187EE6DA27AAF1ACCD8C1732EB7436661C43D5E1DBA8B961994C2E3 - -Len = 93 -Msg = 03981280D89F7EC9845C29A0 -MD = 3BA1685FE8089390E73A60B35A4732D4236E8DD78032A4D549741B9D2DE65C6B5EA1EC5F14779CD4665963FA3BDFF34BCD63C42D62853A9BDD20700BB0339E71 - -Len = 94 -Msg = 0E42E6EFD4D3785EF0BB3A4C -MD = 08443840120061130D4221BC3F9828228CFF0CFCEC342EB017CAF91C5BD79E10CAFFFDF07F0A4257539411FFC4AE370BCC5E56E7A3BDA735A60F661574E1AEDB - -Len = 95 -Msg = 6CE6B3C077865CAB3D099B66 -MD = 1BCABF0B83BBFC791FAE7C02095378F3979DCC080031E28A9D4B6B43CDFE60B6E3A554B65CD4FED09EF7EC0027957F9E09DA3E4A9C12B474FA5D6BE2FB69F91D - -Len = 96 -Msg = 5BE43C90F22902E4FE8ED2D3 -MD = EE41401AF509D6FC0944CD4A0BB29D2DCE0DCC862606E669E31381E5D6CECB463143645D696D14E40169CDC71C75686D6E8732B432092626421CC6CC196F80BF - -Len = 97 -Msg = E94F8C8A909FFB8DF22C19FA80 -MD = 40792E2E5A6AFD2F7AA46A91393AE1172724B6479174ED741B60518793593C283B5B107D1CED1BC1FFF18B5DD2E404984E33C7BAE6E39A6F271464B43D6D0050 - -Len = 98 -Msg = 004761F6028ADBDC4D5A8CA640 -MD = 7FA8C562AC7BFBBF6227A51444430C3D491A6EEA9AFD8E5D837CA13FC3BEAB2BBE96A0A352737A289D5851AFB3A1F332B0EAFA8F9B309D86F824A95D73C37DB3 - -Len = 99 -Msg = B1BA2223CC3AC042D06554EAC0 -MD = 23965E83B8E67DB85B78E0E83BE6BA1712BDD2DE18E52AC010D0911273202E8D8F27D07DBFFBD8738F9B596D531695EF24284A602D3F8C38E284E6F0C1661C06 - -Len = 100 -Msg = 746122438AD1B5B8989D64B320 -MD = 5C0674F9FF441B8FF1FE2B1ACF3CE915EAD3B3A413F2E3FABC71750891AFC8FED356C5CFA64ABF30F971512F60BB4E110E7AF095F81F2479BFDCB75688BE9412 - -Len = 101 -Msg = 3DAD6E4B69AE8BD16D830213E0 -MD = 181F854C5D53CE247ABF7695062E5466E592D917C1EA17346F794CC972F8F1CA94AEF4941759329D2AE2739579D387C42FA588F008C657B1F3F23263B52D7502 - -Len = 102 -Msg = D441F54B918819F36B220B9608 -MD = 64AB177A5444C4E77FEEF7DD51F0018CA61ECF9AEC55632F151A1FF92BFACDC20E4AFD838F37F86FD8A0CE86B62288772C688EE5C39FB48E5C7B4F73F951A345 - -Len = 103 -Msg = F44CE7427B6042ED343F6D2194 -MD = 0E08E94A28A5230E4170D7C78392317659C6599315F12357694D6E403159626BDD311AAF0697BAF1297385164EA8E2D2A3D1E5F4EA4ECD159A69989A88598A91 - -Len = 104 -Msg = A746273228122F381C3B46E4F1 -MD = 9B53B410B9F5DCE90A77244DB407A3D0F4898D112D0044A8F66AF933E26666DE63EBD2A4322D8FE525AB354CE9676B6A14D0CE6B3D24E6CD5832BEA0C5153CEF - -Len = 105 -Msg = B883CDD1742C224246784DB69080 -MD = 2205486AE671C2261799314A579D2DA5EC06BB4B382CB010348BE5795A8D4EDF4979DF195AA9931220C027D72A8E2430A13D14931E9D53E6B109EBD01E4A08F6 - -Len = 106 -Msg = 555FD729751EB2F8986B19578740 -MD = 9FD67CB7487784215256F13111C28261DC827A327E3D56284762C75E64834C7BDCC31A7EB410B6EA1B26DE9EF995816CFDF4134C0144CBF51883A083DB895CA5 - -Len = 107 -Msg = 7A609524C0F706F629441B978AE0 -MD = FBC44CE42B9DAE9A0EEC722AD173F92D907D8E9C1EFB52E0587C61807CB8180E7DD2B530283FE041467BCE27711BAE2CEF5E2C7D21C35728EF0B23732F534A67 - -Len = 108 -Msg = AC79B374D401EFDB3232D0826C60 -MD = 5D329610310EE9321F562F4F688FFA310D19DB80C63F5017360BA57E772E581B1E3288BED598F206A130C52EDCED4E29A980E0D59C683E3EB6C30568788372EE - -Len = 109 -Msg = D8FC20BD0025C7582B7946947918 -MD = FD0EEF2F473854DA1F5F077F916D770F72AAF0E636E49FDA52B79F390BC352A96AB2A4CF6620913DB8A17E9581437FC6ECD8E6CA791BE30A40F9F75C1A54EF3D - -Len = 110 -Msg = 0ECB1FC3F81F3236FA7B91F7AACC -MD = 86CD5620A43F7AACE8A44BE29310BF3C55783F9E657011C0356458733231A2B359FAED36785F08508E60A053F83AABE71905985F71B31B188F53AEB039404193 - -Len = 111 -Msg = D5334CA10554C583F11D9F84A71E -MD = 261DD335F262FC2A31261E101BD0767661EF760A81CDD3CF6E781C0F2585EF09122F16121735D3C68E7528B5335F8D6B04F93EDCD8D706E15D443D129172824F - -Len = 112 -Msg = 3C5871CD619C69A63B540EB5A625 -MD = 2B53FE6583FC24EE8A63801067E4D3BD6E6934EF16BC822FC3A69F4EE13A404D9A3CE2BB4A12C77382BFDE4D843F87FD06ED8AECC234A3A24CEDFE60BFC06933 - -Len = 113 -Msg = A999538B0C31D7339A217C1484C680 -MD = 412B62DD104FDE251F1FD53303655B0766BE0931B25A8B84DC8DC5B928A6E7AAAD18AB491C2F6FB3BBFE733738C053F8B1BB65146EBA60B673B42E6936AB4CC2 - -Len = 114 -Msg = F4D4FEE364CE3CF439D0160EA7E780 -MD = 5AC2D1DF3BEE211E8514FD75EE6179CF96CF6BE4641531DDE6DAC1EB3F96ACB8FB2200C39366A2FFE10FE6F81C31E8567958F8065ECEC16A0A18439A8F94BE9D - -Len = 115 -Msg = 55A4FA6097E8753CCE38FB4E59D460 -MD = EC00DB4098849DDA0A44E464EE12CE7511BAF433657CA68783BC7AA1DC1513D0C7922AAD94982099FDF43EA6D9C80C51D67DB236E85879BECD7D070941B00061 - -Len = 116 -Msg = FEE0239360210B6E3761E6059DAC10 -MD = A21C8E4D7DFFC2C24C0157B53FC3236D4BF47093655102608656AE64E4B2883156C1771F52D28E072898ED26031897204C2CA1E26A3F1B83240588A6B06D60CB - -Len = 117 -Msg = 1750D5D521528582177DCDB046E008 -MD = 5D30857C74F3821C3902B61F5EFF8E94F48361772C54FD62DADAF15303933AF109C058EB516B4EECF31164EFBC6D2E88C94AD9C06A41B43B57076DDDE9D36C42 - -Len = 118 -Msg = 68BF3921EF9DD0B6ABF732D9E508A4 -MD = 32BF5C32DD1145F72735546E57B0FC6EB168380EA654DEF4FD4306191B0CAF0135517DCC6103A30B4E839CBF0F4CA8418094EA3ADF5FD23515100B738CC2CC75 - -Len = 119 -Msg = C26037F951B3CE27D56C0303432FEA -MD = 84BB01D54CACBEB0408BC79AB893ACFCE0D6882171E8494E47B2FAC0FC6B9AA8A7812481D5986A5D65DF412DEBEEC99E3EBE47F6BDFCD7DDE403AA5543D90A11 - -Len = 120 -Msg = FA22874BCC068879E8EF11A69F0722 -MD = 80946CA68E8C16A9667CD8339D1C5B00F1E0D401D0ECC79458754794838F3AE2949A8CC5FE5584033BCA9C5BE62C7C08F402EF02F727CEFA43BBD374C2A67C52 - -Len = 121 -Msg = F3D384F6F8B0F7683C2875EAFC19D680 -MD = 384BB2779436EEDCBFCE6B091D23B27726168E57693445209E7ABF9E5EF221CAE043EBC4006B5E121033A9A92DF7722A5B728BD347CF1274E551833DB6D27D3F - -Len = 122 -Msg = D8A9E01B7ABA9C15F27C650AA6D98040 -MD = A6D60A7956D33E5F04C82E11BF68C155B980DC31814597D013AE28E1976857D5E21C00281C376C8B089970620D00771F6F86AD47BB93FC3C22C35810C16C2A1C - -Len = 123 -Msg = 2CFF7186405B02024C4203A7FE7A11A0 -MD = B77C58683C69ED4D4F20D673007E1D2479CA107A12EFEE648B8C36C3BEA8EAEC2277A4397AC294FF7BDC2F916A628D18EFA4E4992BC8DD9D68D3548CE1907C6F - -Len = 124 -Msg = 87217854ED19AC6E8AEF3B39B97CD350 -MD = 11D9CA7428848E099CA423799623729FA06E37DC4A420173C85CCDD3FF23FB9F0D54447BF72290A471A53B9C9294C8BFDBA421F7F08A37B6B3897B16EDB80C76 - -Len = 125 -Msg = 441D8FC5478410033BEE2F3DA9FFFCB8 -MD = 98BAACA8B524F5387DC68A01AD2636440498E7ACE5BB930A3966B47DE7A602476A2931DBC948436D541DC9BB263EA6064E4A79C336CDD04663C4E382E8EBB7F6 - -Len = 126 -Msg = 0341698E451A235FEC3A6BBE42C07B04 -MD = E7C437DA33AFAEE3D3576C1E502B03B4647B0FCAFD26B4D24508B846AAD1487FDFEDBCAF8E690BC055D945EFFBF8786BFCA8760314F65FAFCC942E6533AFF6B0 - -Len = 127 -Msg = 2C288B527CE3F931B0C565BED2C62758 -MD = FA3D9E4248515F20B508140383DB4B0EE771DE74523E495B01419D764D871FB47361E2DEDBE3255833451B59D52D0342086B029C899BCCA38D469F29AB0DF9F4 - -Len = 128 -Msg = 52A608AB21CCDD8A4457A57EDE782176 -MD = 4B39D3DA5BCDF4D9B769015995644311C14C435BF72B1009D6DD71B01A63B97CFB596418E8E42342D117E07471A8914314BA7B0E264DADF0CEA381868CBD43D1 - -Len = 129 -Msg = E35A1AC6054BA5FECE64AEB3CB97ACDE00 -MD = 23C92C76935850F95A2E7B81158B9C1AD1DD524468AFC04A63A57A575D52403FF2EB3EA6BC96463C6625D84240683F97A448F40200B05C974C2A574EB278B7BF - -Len = 130 -Msg = 34EE2C639DF9C71BA46E88058962D3C2C0 -MD = 7F83C1EBDD59216DD40E10AFBC68A1DB3D1100B9C64F538C2493E5E3B47F74B09F84339F1625EF0E2A55B9F353C45E054526B70628E4658B6856E818F6251A7E - -Len = 131 -Msg = 5EF1EC3AF3A823667B01CEB7069C3D6F20 -MD = D5AC1E9450F71C682A1800A35F69FDCFA20C6A6B0C57F131AEA476B6260FC88017E3E1BDB12566476263E017D12B4F8AAEE5DFDFD15211C2CD805B6957C40F67 - -Len = 132 -Msg = A4E76D43E7CC38C19ABF5B09F0E2104E80 -MD = 640A9E402B529381B9E4B35B2A1C4AD5490DE50C13CE6FB302817F4DC4DCE85987DCDAA0B3FC122657A015F11052B23BF0780D932929B8E10EFBCCBEB81CC116 - -Len = 133 -Msg = F7E6911439AFDEB747AEE1DA0E64165B98 -MD = 4A8D1F4877D0F3408B77482ABB05CF23519B7DFD779A9B276AFA88EF500BF2290D9EDBCAE93D9C0C3C43D0A5474BE66E54FAD0DECAC6034B21CD9A4EFBC1C04E - -Len = 134 -Msg = 365C16113FEA84CFAA647B4B6BAD705F74 -MD = 4650A8AC7A4EFE1757F800EC6E520EBAD7CC7E7B6960FC3E738901F3118B62D164F8BC85747B293FB47A8CDCA13459AB09A45C3C1C68A1F207BC86ED6C4EFD0D - -Len = 135 -Msg = D783EE042795EA5E2FC9817DCC24CE1BF6 -MD = B225E636B01E8A863027C1E4CCA5D842FC93D227B43ACC15C7B1F95E138E0D3FBCF952D21E47517AB6012B34A1A43BC70CB8095A780D1AA98AB4E6E757FD2955 - -Len = 136 -Msg = 82E192E4043DDCD12ECF52969D0F807EED -MD = C37C9DC2E20D8E2F0AE588D7D45A807CCFA000FC948AC42A8ED63BB14F318FC3D4B963F7305980E6A0FD2316B55B63142373B1A29002264855C716C5C9F17F4C - -Len = 137 -Msg = 7E3F13DB88EAA22EEFEC3AB47B7CC5AC8080 -MD = DF103AE3306E324AA54EDE35F06E14579C52FF33C96B3B329FD056669EAABFB135EC555863D476F9FDB009396C68E66E86232B6C2C9E3745EB1C878642047911 - -Len = 138 -Msg = EB673EAA409B4F98C581D8DA542EB58B1380 -MD = C2208C9152F9CB6A106BD402868DAFB2771966CB3159B1C406AA4023D54E57B3FD59E5C3133E98AD65C0CE255D4EB6FC4B742B55227B416397AAAF4769194C02 - -Len = 139 -Msg = 84D42DE0D62B7A480FFB939533283B7A4440 -MD = 58E708E970312BB6EFD0693E408720A4311DC919A61C6DD9E40BABC3CCB45DF4D803D36BEDB043C5535B695566B99A2C736C8C96027EAF3E0117F17CDA904646 - -Len = 140 -Msg = BABAD873529BE92E9BC49CC71964A554ECC0 -MD = 231A3F7ACE0D5B78A9E2D559E462B511D7C8FB573B3E7B6748AC7D09121D5740393A2ED2EC12E5A50EE1A46E280C76919A6C0C6126B3B3C7D4980218EB999127 - -Len = 141 -Msg = DC3BB8370C04147834819A2845A79B5A20F0 -MD = BDA46F84B5B7F6C5C2228433B505EEAC3097710DF150938936DE82D2CA2F857B286C41E408635142969631133AFFED4FE6EFF586E49C2A5387DFA14074608034 - -Len = 142 -Msg = 8952BE55B2BCA64F32B5401A99A8392AE39C -MD = 188993E9BB46E10739751AA7C279FF533CC8531DBFCA62BE5CE1197ECFA5F01C5D2F15CDAA8CAB0C2AD4C4D1FCB7CA551AFC9C1D1D017A3531C73B866791BE04 - -Len = 143 -Msg = A53B4420787D32433A0DFD5D09E5D8E7374C -MD = B44D50E87F4D7E131D7C6D0ADDA54A0D319177FB14E2CAFEE1DEC59A9C778C4DED0CC89C3F4E26A2189C66952D2770C12E23241AA95486A924254C37565BD4F6 - -Len = 144 -Msg = 75683DCB556140C522543BB6E9098B21A21E -MD = 9073C62555E6095F17DF71AD02BABB9100288633898489B21C906A3190875BAEACCC83BE80ABD11466FEC371BA2C4623D07F0131DEFAEC13A8C732A9F8417163 - -Len = 145 -Msg = 46A2262940F3D7D9AB6B1680A300674AAD2D80 -MD = 73775F30B8E5801546ADDE9244914FEE1096B2774E95D489A4BF82C4678C527F40808AA08D8AA4EC1BDBE552E7241997769AAC110266B447A58E8829DBC18DF3 - -Len = 146 -Msg = 86804F34609F9945125324B33E672E8F79F600 -MD = 90BC3117209775E38988907A8D263F660BEF64AF0F22FA37611F8A4C81CB1314DF2853F604166C5897CC497B2BC5F3481F585E54D52A0B48EB02E25AC1170C8C - -Len = 147 -Msg = 7B2DC42D8B580D6CBD359C46B0321BE37429C0 -MD = 1C153B87413D72E6490AC19C1D389E55D71C79320475A73A0799ED53C722D2AB7BCE176E3EC93809CDEDDCFA2E5A984DA8439DD18939BFD65500C5908CE0763A - -Len = 148 -Msg = 0903A731D853AB15F958B8E40CED0B9FCB7110 -MD = 70548F31E44E589FD7F69DE7C6238229E18975F3B7890C3B7CC258AEF31B5E52DC157AA8E36C812061138C26A348AFF0410BA321F290B49647A2A6853CF65AA0 - -Len = 149 -Msg = 8E3C148CB528836E4DD538D903A3D5BE586A38 -MD = EADACD0F0B9D38A6A37CE23FE07CDEBDE76EB0D3B14DF4428989A46958CEACED5A948545C8494BCB5C65DC2397FD92B7E5EFF8C170765A301510D0517489E319 - -Len = 150 -Msg = 6EC0D6E14E4619ADD039F4A24F9FC4D0DAD3DC -MD = 53E263B0DBEC46C41B4B9BFBB749A75D8A0097B10DC2ABD9A998F96AB03D5748391C5C4A3FC55CFB5812E8B1F97813571D99625EE610068332094111D0324748 - -Len = 151 -Msg = 12FECA3B2A8699FF59120DFB38BC87793F8AF4 -MD = 358B58139027F0BAFE1905D411E83ECA57DF5A97AF18E57C17B5AE34A18C73866F95AF844B1DFFCDE58141D5B2D14198CB40CA8BCCCED9B33A39202644C6A985 - -Len = 152 -Msg = 06E4EFE45035E61FAAF4287B4D8D1F12CA97E5 -MD = 23E9352856718E1E2D68A21D56D93117CED7628E984FF04ED8C0CB9B10539E4EDE284F94FA71BF4B83BBB493435FD6BE26EDDB09DEAC39680E6B05ACC87B8C4E - -Len = 153 -Msg = 8ACDD913E4C985859FEBD62F6EEB412230252680 -MD = 732F0ABF2E0A1E09149125B6E83A0C11076E02F8627333ECDD5A5D0E28FE1A2C2B5DB7318351F5D0A4D6327FC5792ACE554ADDDDF3301A884C28AE8876A27567 - -Len = 154 -Msg = 3487448A5103B1F7EB054C74FB1CCFD3E7B51A40 -MD = 0692BD2C2C44F1653FE0793BBA3D86B6F01BDFE499FA3046AE3AF8E154E877F2503712792D4DAE4A47DD00C6CCB8B65C8F0556618E4F9636A89F4F0CBE50938D - -Len = 155 -Msg = 21B898B65DE49038D0D359CA991356FDABD719E0 -MD = E65539E7540EEB2996F87B9518372BE71A5BF54C73600EFC3FF9185BA6BFD19BD5DABF6B50D0FD36793E0FBF766594DD3F9EEB014C3FDE66F34CC6461E32BF0E - -Len = 156 -Msg = E35DD4BEE303448271E4A68160A4152B30D4EC00 -MD = 092EADDAE07753112145E827934A2EF3BDF04ADA742506BC0AF7B6766F4C760CE9BB026DF4F4FB66210F72A6AFAA931F300AAFB8C90C9AA61DE92585167EF98B - -Len = 157 -Msg = 8E2A8A60383170AA48152522610B8D5B547A0CC0 -MD = C9275EDE6C8CF86A5D14EB4E5EBD5432B252774F128ABBB140207FF8CBD8D8D72F98550DD0A16E71E3628707D3D649C536F923A6BD8CD8AFD1441241F2A84D24 - -Len = 158 -Msg = F674C01755AD0D41FEA8EB4F984F9033E38C65F4 -MD = F35B03E9E2BB864D7B449C6ABED97FFB675B12C80507E3FFC450617EFEB939184DB063BFC18B5A1AAC01DE2E60CDF3AA0DEAD85BD44001576191A8846ADEE16E - -Len = 159 -Msg = DEE4696A6DA3B8A6137BF9573B91B40F288200C2 -MD = F76FF45FFDC5A84A3971DD30147F7065001A77C313C87E6CDE9BCDA63585D7F9AE7A12A15B57E25E557638A7649CA5B31E30DE815556C643D7EB9D060C56DD30 - -Len = 160 -Msg = E26193989D06568FE688E75540AEA06747D9F851 -MD = 909D753426B1DEE09FC474F18CF810D5D5AADBF8A09AF495BF6C22ACA0C673021BFC5D2AD94F50B24E1569E956694B21CF2CC8B4F3C7EE4CF195E4424CC415DD - -Len = 161 -Msg = 7659DA517F96FAD5A0B1277F52FED01E4835313100 -MD = 6AB9EB9A21B3965FA057C225E8C464D68BFB042B633A237A5FCD84F2DCCE152D49EB538D8E95967728FB7AC82EEEBC5DB239B109FDF4B497754DFA6A1F43FFC7 - -Len = 162 -Msg = 11F80B2028EE430ACC4E525FA85488E64C64A0EB00 -MD = 4C61CA097F3062B5845C4286F11B88DC0DAC580B63CA332CC7D6C29A6B693EF33F148DBC9D6D3C57225745ED9BB397B12109122211DEE69EF6921E336E8B33E5 - -Len = 163 -Msg = F2F533845CA07407654214C0BF1C5693824E0496C0 -MD = A56E7946121F72CF327D82861B9FDF68CB9CB3371284AC718E4C30683B6AD505A17F875FFC13DCBF9BDA104994F653451CD2D701F197FB7D81F5D9B69E84105F - -Len = 164 -Msg = DF9CA9E83AC80CF76F0C596F15C8CE5DE722AA9460 -MD = F1036E169B602B0BBDC9A8857D1BEA1C5D5CABD460F59A7F1BE397EC81538EA121AC7D90286EFF8E397FB45350214F34B43D1EB41BDD74669C5B821496543E5D - -Len = 165 -Msg = 59D9E0612A067556CA31FCE628BC9ED8CBCF038198 -MD = 3BBD1A87B9C79431A28C6B3869B82057E1DA7F0A5C0C470787C7D1916C50F9A8452A470073079B81D25B8FCFD6D71CB8C9365AFDB5ECE9500002FB389ACB3258 - -Len = 166 -Msg = AC3C4EF2B493AC819DC2DB7E25EBE4580115473C04 -MD = 4C3B1E3957B2FB8DD30C4D6414E408FD532F5A786F2E5E410607344D138DC46D0126CC29C8152E6E55B8C62501822C28D02F09D5A3741586FA5CDDE5F4FCEC29 - -Len = 167 -Msg = 91935544B8DA1D9A33120838D090AAA9508D7395EE -MD = 061DB763B4E3CE6F00E2184EBD3163BB399193EA098A4DE8B90B08C3EAB056430B53ACFF1A989EBE3D77CD91C2BE9DD4FBCFDA5C54FD47505A358EF9FAC9C876 - -Len = 168 -Msg = D8DC8FDEFBDCE9D44E4CBAFE78447BAE3B5436102A -MD = 046C6019FC4D628AE0DA7092F9910F269B853D3B57052039AD1375C665405F9FD79D57579F42C4FFF249BB85AE65113A9F4276CEDE73E9CCB0C24753935A006E - -Len = 169 -Msg = 0AAAE7B9E64C5379E6C385712FBCA90088C5879DC600 -MD = 38269A528CB63F73B56DEB384D2B960CB7C8BF0FDE536A8A25C70B7AA521ACB3D2BCEC5AEF40E4374CFADEEABBFC1350B851AF6CD35B359457753704D5A7630C - -Len = 170 -Msg = 89BFECFB6566E0FB46B71DED91D3C392B31D167BE680 -MD = B8EAA2B7B62DE343F833260D72DD5B0878988B79EAEF7F1762461A543C218D33B19E71424C79B58FD6BA1D8332C77B878097DB59D9CD306E7CC0D17925B8BAB9 - -Len = 171 -Msg = AD723D09C67B09677286E46AE2AFF84ABCE35B621D60 -MD = DDE82B2DEE6920537FF80D11CB672B673A5FF244D1848CEC83F275E22AEC7CA96C1093E7FABB0D48DFEB391F706DBE0D93A8DB3D03C1384A34C4E0746262EF28 - -Len = 172 -Msg = 6037223B33346FEFC063E63E10D7BA78FF02C00A8A40 -MD = 4712185003B3590E052D800575EA44747C89010E93FA1C23467CAB2AB961F3F3074D6BFBF881A41F862AEB0D5CA73F507657B0D13B8F8C33BC850A5B1F1FE65A - -Len = 173 -Msg = 57E4329B428F70DE94A211479B2071BBB7E508F1D2E0 -MD = 86444CCBD571AFB752D5AECBFCE46038EBB6B2467C27213D8229799422CC56CF3B91564102E74A49AEC4F75DD776249C37C655AAC2174ED100180B6CF7386815 - -Len = 174 -Msg = B0FA56D8833B44F45FA2A5109AD4C2CAD819050DFF1C -MD = C2BBD8AFDED5187A390FB5B2011FC15787F290540D1A05DC9F9C0467A7E36691914EEE1CB7C9144CA506E306D734B01A1BF8F8C4DA1087E79F866B6F0789AA0F - -Len = 175 -Msg = 4582F3EE0E0BFDC5CFA3FA7550E939BCF9C0B5EFD04C -MD = F5566675A7571C6015015F286CE64DEF0260F0F5A35A1F53C0D795EBA4276C15D62AA18D6B9BAE292DD284E5356772C42486F852A89417B1A261B8ACC40D6D29 - -Len = 176 -Msg = 57085FD7E14216AB102D8317B0CB338A786D5FC32D8F -MD = 51C909A6528949BADDAF1BA0B154EA9C33FDE5074359505B76D4B7ED54352DD893D40B142A5F802F378CBA7B8C3782ECF2A048542BE6C5936822214846A8D5E4 - -Len = 177 -Msg = 88B929BF491A1497E86DDF6A4040B31270EF97D88E4D80 -MD = FDAB9B6C42FE8B30F6EF1146EEFCB82E455B1422DACA624C0592BAB1D0E078179155C9AA30A58ECD48F4DAA9766EB384038B4C07A3DC47FE820F1C9F9F3656AC - -Len = 178 -Msg = C5DCAD3AA886AA7D2336333D8D777EB15B143861A70AC0 -MD = CBB6C3B1EEE731C625F06DEF39D968C7AC55B5B4B3F167408EBC5D40707283927D70CAAE928B8F322B9BF7595E58BC2C0D7FD06388A7E61FDC0CAA4CC6C0F28D - -Len = 179 -Msg = 12F94C52AFB08898E37C2FB4B778E458F37C6858C1E720 -MD = 8D79D8DC69C15751614804FE007B209CD18A2D5FBE1168A8D0E95E6C900310359989DC100097A0B9EB67B1E7458AC6812699930291D4952D3F6CA3DD5DA6E39A - -Len = 180 -Msg = CD911C2634643EFC060E2B641228BAB22C223B8B1186D0 -MD = AA6EC2FD1754DDA606B11CC54F9F249D9B2EC64E9C179B65EAC2BEFD3D52F50CB86CBF136BD9ECE6432C2D58BDFEB7B83ED7E3BFAF77445495808845A5127CC2 - -Len = 181 -Msg = C194643A333C0D9CF125B6B729069530858BB4A916FE70 -MD = 268A4F3EC42C55B028DF48533B24216ECE5316F2AC93F8115A743549518A15CBDE432017796AF606E59F8D438AB84841DA685591AD998F80E098FB59A69677B7 - -Len = 182 -Msg = 093A095AD39D10B3DD25C571B44C612193056D1B112AD4 -MD = D36D1316D3F5D78DF3052E20D3DE75AEB7C16C00F03F82AE7D6E547498C66E5F2303B647D81FDC36922CA6FC7A254B332B256E3BE6DBB43A9D8D0F5AFF4AC402 - -Len = 183 -Msg = C95D9E47B11AFBB807B10CB90260A1A1263E9934EB181A -MD = 567D21BF900CABA77203B09334865FA17404DD47F6A5D82F5CD5329D2A193881F20F8DA26D4F5AE5E73E14301BD49043636EBB74189889706624164BF30B9E37 - -Len = 184 -Msg = A05404DF5DBB57697E2C16FA29DEFAC8AB3560D6126FA0 -MD = EFC8917E1247742A2D4EC29AFEDDF1E6ECE377B3D8AC6E58C9851CE9C99BD599ADEBFED657BAACD1793FC91B04DF2957BF6F1888869286002DC4AD9AC7F76793 - -Len = 185 -Msg = 4380398B1D3E170596F1CF7AAE1D32CD20B5684FF1D81D00 -MD = 30D815F45CBB449E9C1997648B553F398BFA89458C0058591E2FEDB72BE09CD69B1895E361DAF864AB659C4B37C3820F05928812E3412F0A616AB7C8DCD46C61 - -Len = 186 -Msg = E7EA48586E6665F113727B7C9EC7BAB64D3DBEA3FFF317C0 -MD = 529395BACEAD505643BDCF0FDE825A4E77B8ECC3EC97015814BDD3362728E79E8033645B2003F9CD2EDCF937D1F6201761A642482A7F4FBD7CA4F9FD0E0E34A9 - -Len = 187 -Msg = 9DB8E92F7CB06389B57BDC2B510E30566EBAB9B72DDE5EE0 -MD = 1DBF369EB5D8969018F602979EF9F26364D23412D6933150225367FE517FE066443290A221D071A652546B78B04D18A428AE98A672A13DFD4309742755E3AD8C - -Len = 188 -Msg = 9FDED6A700AEBB65BF26400F30F5862CE6B550F67681BEF0 -MD = E098C1D40F80E0B40A39A88F43491AAC13D3C55CBDE72005264ACEA87B89EE77DBF60970D573598051579410D6CD793FC4D322BD3128C3B497CA5BA96BD888B7 - -Len = 189 -Msg = 893B3BCFA97A81076A579D81CC66EB540351DC3A241290B0 -MD = 003EF70C9905A704992C90A1AA78261D55606B0C8DD693CE81047E1BDB1D5FA54C94F4123CF4F47C875B52201F9D526FFDFDF5397B60902F5C49E90EF0BFD8C8 - -Len = 190 -Msg = 90725E6308171BFBB26B928FC0A6F1C3B32718B74A37A0C8 -MD = FAA9E99FA156130EA46F418BD547CD9249473E36F4249B43D8DFCFEC81DD6341B7CFB8E368794FA21E3117B9F1DED1D40E12828187DC838D8D96B8E5E3804DFF - -Len = 191 -Msg = C1A516E38C83393D9F049EDB1E50CDD2DE3CE448E5D676B4 -MD = D70B079D5C40D7A2A1E24E2DF6DBE30144144D356139E198F764E77F7516EA1695D549EAC430A7D822E141E15203D799A0048DD2BF5359F9EE5D62A1F088F272 - -Len = 192 -Msg = AECBB02759F7433D6FCB06963C74061CD83B5B3FFA6F13C6 -MD = FCEF88BCC7EF70D8C3973429AC5139155F9BA643B431013F1817ECD2FF3AB287880F9EA54DF7503CB3F73D7CF2B87D2E9BDBD203378FAE74CA4BD2667A4AA706 - -Len = 193 -Msg = 90105B1F751AA0EE546B3EDAC10EF8ABE9CA71C0F0CDDC0800 -MD = 85A9D2BE308B90287C49A8F77C7EA1E60EAF4028C155F96667E08E854FA92DA9A771211BA1FAC6374ECB6783CAD1BBAA2D2DC8AA0D5917399DE5F4F79799F45E - -Len = 194 -Msg = E0CE59E9943CE116C7B745FC595B3C58129052321F67FB8840 -MD = 7C00D5B175C7AE4D497CF0124B9A37CD2804CA07E00C9A93508C55A32A007BBBC50AF6FFB1249EDBE626C5CA3AA001E2A2ED27BC14290EE68332D342D376FE57 - -Len = 195 -Msg = 0502D3A22A7A0E6729EFC524FCC50BC7C62B35C12C537E70C0 -MD = 102EC361C0360B70F2279E7F53358960FA1F20F811F75338BFA95301CC03C84760CC8D8E6AA594256AAAE82523B2F766EAF214DB33F51753B37CE5CE8C2CEA06 - -Len = 196 -Msg = 4D9BF0AD887F1F21023B749F3F9D2340C0288F009D39214600 -MD = 87E2BAE8D513331B19F738E3F99040CFF0E516287AC87D039FA47133C549DB09D7B2D4FDD0C9B23D29C8DA911336D62C908E150F1E1E7A74476AA4FF5D02824D - -Len = 197 -Msg = ACC9748344B37FDDF81027547EC8D26B1C469531935B7A2AA0 -MD = 4C07B2C6628C9C8790D7C921157CCE3E4E0F66CD9D285A33E4ABD45C70C3F1556A9E37C59ED68B30734488CE4EE94F5DBDB0648139EE52CF481F23B00BACE078 - -Len = 198 -Msg = B704443E84AD25B0E73716EA414234BA929F2D927DC1E1B890 -MD = 694B041C6A49588B08C09881B60DCE2BEE376C302FBC0F60ABD141C90711179FB056783520AC35C286AB200715FD40638CE930A358F50940CAB5FADE7DBE2EAF - -Len = 199 -Msg = E916DF6F4B5E9356DACD76B89F593B70C2B44B3EB1B5835ABA -MD = 31936BEC534AE16C464D900985B297E8FB077594C5BA87A7FBC9D87A14CE74C2E50809FEB81E065F925330A39424922D66388BA82A45E0B9CE4DF6BE344DBA30 - -Len = 200 -Msg = AAFDC9243D3D4A096558A360CC27C8D862F0BE73DB5E88AA55 -MD = 470BDD8D709875C8E6F88591B97D6486C5F03B54BFC905757483E013F63A6C56984D4518D45C2D2298EADB44AF3A0C35A76B573D452F5747844D3AD8F84A2E85 - -Len = 201 -Msg = 396D32D8553DC0DDC72B415A684349AD9B1BA8E10D05970AC080 -MD = B7E34576D3C8A2984D7902E4E1D158CA6943ED50274E68A8E6EA46B6DCA3063DA04C7FD3512827FBB7AAD89DA218C378AC2ED63E9467659F7DD860CC9F191C00 - -Len = 202 -Msg = 35DD0644FA89E942858FC0D9A614C1E5B711EF9F178C04840D40 -MD = 2CC4F217A65F8913FE045927618D25453AB71212FF2BD29DEBE8899B70EF7413067D90B17F13BF6F0D0C8A153740637CC42E66C14D2B2DBECB5A68ECB6454F41 - -Len = 203 -Msg = E9617EF66F3BF56D461F2C20CD395778FB8AAE1B557A9FFE43A0 -MD = 3F62D3BBF7761FDAF1374F63B3F63EE29EBD47C6B904C1D611EC3E80E067C98D7A627F4F5B8CA9ADED628560AE946FDC19A82AC67B421B4BEBF87CB9F60BF515 - -Len = 204 -Msg = 6123803C735CD7D81C5E95AC866919C0348D46D4FE04E5CA2DA0 -MD = CBD48AF5C28989B8D650D1FE7BACF78226B6ED7C95EE346C42A175031E96FF9E43CEA11259A8EEE14DC4ABD759F02D8DB3D2665CE73E5CC70BE71E9E04E5C073 - -Len = 205 -Msg = 982408A37B19F65DC9522146F2C44B62F2A09912C3BAB1047110 -MD = 0D54E68F9B75757797C90131C0FB58D4D7EEEF9908BD8CC5580DD826325424B28B1236AF61A445D43D2D1C8BCADBDE44584412475E97D7E057CECFA33703B2ED - -Len = 206 -Msg = 54EB64D8FB23A010586155CDF5C33B1D864D0F18CCA0C03BC97C -MD = 302BED666C2A155212100B90843A7637DA4B01407B78C5A4BFA7E4CCBDD0A40A4B7010C797EE60968207632258F4DA963A2F7DB549656BA30D583AC84700A991 - -Len = 207 -Msg = DAE26BEF8C3A247D8881C8FDE00E6F0805147CE81DDD81B53B0A -MD = D20E54B7B1409F4EADD16450029DA022FDF165C103CA0751140785551A6DD52375AD3D4A3F1AB1F7D888A4CDD38DE37AB1FFC6900672C69B2AC229949819EDD9 - -Len = 208 -Msg = 7BC84867F6F9E9FDC3E1046CAE3A52C77ED485860EE260E30B15 -MD = 429FD438B390AD0224028975467EC228F9ADCDE71E1738005E3717C58F727AA2B7C61780BF0C5F8B766CC6D34551D87D22A130B8C215614204E607AA82FF8469 - -Len = 209 -Msg = 9254E832A57DA5D35623BCB77EE4A376280FBA69225E388B34D280 -MD = 5BE1DE3CB631A42AD2B21DB1C97B7086D5BCE6D42D03D13528837E0BAE4A3C960A75261C9E8C8BC6550B56397573466F46475EDE828CD6E9C31A59CB8EDC40BD - -Len = 210 -Msg = 7F891B766CF192FE504687E1D56C843BB0921E1280B5E7287466C0 -MD = FC10214798FA1561CBE65F992D1B00BEF467B797DA6480BC38F87002319DCC734A32598E045999C2A999B744A49A3D9E7B1B0696FBE48B45D7BFB90597C21EEB - -Len = 211 -Msg = 0B007253F2DC7DF79883A1C7128EBEBE35E0D902A5D3CDBF539460 -MD = 40ADBAB7EA83D074DCD0E437CD08D09344222DB2E0ECD77C3F6CCAE01EF23B68233BA6457E2A9243F12BC54CAC3E7AD588F60A2386615BECBD66C50C6E0E0D12 - -Len = 212 -Msg = D49B562EE6EB7311BA70A8E78F655A4B4853332C116D7DDF16A100 -MD = B2257F42071CE2D40F5321137F77747B801044732824765B783BD6E20001EA4280BD43E63532B4152A55DB0507DEC457A39489CA094B588AF2295E1AD6D1A73E - -Len = 213 -Msg = 5B1D8934A654645972E4CA94DBCB2FE1AF9156853A2DC2D2B18DF0 -MD = 144AA3CF01223E199AC188FC05ECF32776BD6D26090410AAA8E68476514B9CFE284D951A6EBD8398FFE0D66C0E6245011CA0E56DADA01B384CC8341B7B588F66 - -Len = 214 -Msg = 9484FF47AB375A83B5E0A83FDE85EC66509706C9181BABA42478F4 -MD = A80C1FD815B5A6356F13F1B53A37E15CBCA554EC540610F00DFEE27F0A509BFB2C569A58A085548F78CD0E7858FFEC7CBD33C76E94E8CB2D38AAD8306B611520 - -Len = 215 -Msg = 939C03856BDD26D48A3DED1A121342742F5F833A2CDF39C266306E -MD = B85F4360EE92112EA21C7F4D6B7CCE58EA8DD1DB2A1756A80F3A981445B700C4660E30E22EBBFE171D5B7FD6368618E27A7CA40A1EE7C89472E3017391492F64 - -Len = 216 -Msg = FAC523575A99EC48279A7A459E98FF901918A475034327EFB55843 -MD = 790A010AEB6F13E019A1DC35574B1219E74FF5DB6FBD8746733664FFDBCFE1CC6E8AB39117E3244C4FA3C0A962C9F50030AEF88E193E7E0D4C4747345F30CB54 - -Len = 217 -Msg = F891360CBAAFBC60E0CDC1CAA548329F6A80778ED08874FB85266A80 -MD = A5C66B582423B0366E7B28F25E7759778B44E3C0207BFBF72BD87F3E795DBA61A89F58F2A4EA6BBDDBB498674083C876F4549EDEA23299D2CE56EF3E6D967155 - -Len = 218 -Msg = 02CC21DBC82B94B3CFD25B0B5F99C45F14D8485A88E45DA3C6B9AF00 -MD = A278250374BAB5076300C9F8192D9314F4AECE18CA5491CD599DB2619712A7E0EBD0358AB74F73D5386C9029FB1E4E9DF3C1B6FD26AF2912B214593DA9A97BBA - -Len = 219 -Msg = 42D3FD8720077B184CB3119815CCA28C0D76F259B5D764AE47F71120 -MD = 67E58574E83215C5CB64481142FB75C31ED721775BA1E23248604ECAAA8D139C9B5BA7D4F774364133DC5C36C1A8F28AAF5450AB1CE1D457B3F2B2AF2F111845 - -Len = 220 -Msg = EB9B5A62EE1BEF70A170B96DF0D7E8F974EA8B5997E22CFEFE0BA840 -MD = A0220CA29A6AB607096677CE26FB04DFA8B2A26A4272C8569F86DF89345BDA6F531B9D0CCF7CF8FD7E173780ED3CE87E7C4135AA197A0ABDBBDE3E88A093DB7F - -Len = 221 -Msg = 4A1369D63E894C71D6DECEAA47D797EF1DF4E8AEF56F76CE0FFF4B80 -MD = ACF412E14D8995E15AA5F37015CFDEBB2D41E0A59ADE4828FC7F564886220C4673CDB647DD5287237FC7BA8A71D39D92351C437D5B755CCAC800595AA42114AE - -Len = 222 -Msg = 4B9C5BB731732C0BC83B1ECC8139164D16E92EC105F66B78BEEB35D4 -MD = E40E5D63FD239598514FB191194E9FB1679BDC22B2C9FF493E36B2C79986B7427C4BA13C5CC35BE55A02C43F34E5101AA771F61ECFD4EFE93F8F7099C8B33807 - -Len = 223 -Msg = 68F41368B7B347819494CFF74E9D8E649BE4EBB287D9B4553248F52E -MD = 7FA24615FB47A93D93593FEE136764FEE02D960A0FF8FCF66F969C4ABE8207C13083B62CF5854AE2914624EA825CBED252187FABD488C0E3299B43F0445CC28B - -Len = 224 -Msg = 0F8B2D8FCFD9D68CFFC17CCFB117709B53D26462A3F346FB7C79B85E -MD = AAF7A391600270F7B5A2A3BBC7474AC4154EBEAC03A790A57FDAD96CEA2D043C9FA5F6916790B92F8032D668ED9A07112DC5B2373EC816AABCA6F577CE60415E - -Len = 225 -Msg = AF4BE96D46A63B08104C3345CE0AB60EDC88B4104CFB74BBC0238C3A80 -MD = C06C777D78CCEC2ED78B7219A0AD5CE2DD162A9734426075908FBE324C216FBD0EE2AD3F5642DE61323AFE0FE9250A37FB5E6F2EDB3CFA0A144587A93BAF0ADE - -Len = 226 -Msg = FDD3B8E0423BCCBBAA7019DE3E5C7A49A7F5A192E2FB64011DBA892540 -MD = D94B5DA9373E40E07B5F5D39CD2932F2907E3B0CC85595F9AF37D8ACD2C2F928AC79C376FC1807891C548EC39975E44D40606E6B4C96FC2292A3BB9356955307 - -Len = 227 -Msg = 69DB49ED9D36946A357B2386FD5C652918762D8656F1EA3CA86D393B80 -MD = B23B94CF3799954F82B25CB87897AFE12060D2DF0B31750C7FFF6FC0511FC6404329B7BE358BBDC42739A75DAAE85A57C5C4D7B2F6E2DEF3DEE31AE72E6E9268 - -Len = 228 -Msg = 984557523A3444AB956E0C040B96C6D4E5F93D0F181606260BD7A731A0 -MD = 201945FB81CAADCCB4F234711DA9649FF0F2F22B51BC84E622B5430D289D38620EA590581DE1C1B407F159121A7154F33744566904A77051267D3909EE48082C - -Len = 229 -Msg = 0C6D4DD90DD7F01CCC7EAE273D8502C9B307F9F913415E9207EE76BA00 -MD = 3EDB5EA31D7B447D54C79E4AC09904CEED24F02895F856A36FD3A987AA57A9DC52F5214590321D2A947061B5D92B441D30295EA29D4167C77C969FDF16C0AA55 - -Len = 230 -Msg = B42F11FE464CEEE0516A17B8B9AE5890FDE0B929007B568AB9F9A9B8B4 -MD = AC1902235DDB7E00B5306C114529A4C934C531EBA943DBDDA614475E8A4D128D8BCD8AA4B5BD114D3A85BAA206362627D741FD4016985288FC95277B4C8499ED - -Len = 231 -Msg = 915BB70E3A5ACD0EC87D5570058A4CF47CAE5A56E552EC102E0F1E9ECA -MD = F28B8248BF9EB3ADE74B920B5A72064EAB5827BB41041A614C32A65FE8894978F18FDB7832D9CDA7D3634BCD15A0C48F214BDFB168871E9C2E1C09CA7C42706C - -Len = 232 -Msg = A963C3E895FF5A0BE4824400518D81412F875FA50521E26E85EAC90C04 -MD = 3E2880A974E50F98BD6CC0F9D769AF348CE3B7E8FA38CF0CA2DA5FD704C9C0E57D5500BEA3CB7477927F9C394AA3F9BBC01824350291B9A0A0CBF094BB37DA55 - -Len = 233 -Msg = 5A45392A407EB4671C94E2181362802E090D71BD19CF1B3E7CF08E999780 -MD = C03479511CBC57AA892C279B42FA42810E44B423DEC2CCF9975D89371B068FCF024E1736183A4EF6D0204ACC1718D8FBE25F3F8938B1C1923C0F1E7B01E22349 - -Len = 234 -Msg = FE51F40C4D7807E4ABB5DC347D97E2787F1B175BB0AD9584F8DBC494B200 -MD = A9662CD5BFE6211223968C43DC7D1F180AE049E8BFF5E9CE1E8F2779B0167866D78221E7BEE424D7585384BE01047F2995FE00235BAF1D2D13842E9EB788D6E3 - -Len = 235 -Msg = 3FC7400AC8F98C0B419781292E3DBF605BA9DA9C7E7C3FA2FA625BE18B40 -MD = 4569E74FAD26518D026158C6B63F943EBE9C80B949995B2C07734D22D65D613FBABEE1806524030EE9084E14B70FC285F7C00F9E8F8D1933D9F6C2085FB22B9B - -Len = 236 -Msg = 313C7ED0191674C883C2E6A46CB162F9F1203EB8DA3CC0979CC46A6EED20 -MD = 7B5E3A8E6DC0CC59EFB03B72110C9EADD43A9F06C548601DCBE3D4D07D7BD116550B257E1F70A464B52F0F23C51B4FEF0046F09871896C55B68FBF0986E29968 - -Len = 237 -Msg = 7F9CAF49ED7EC9CA1693C0D5700965718F7D6C178B7CA4E577F07FE5CBD0 -MD = 7DDE46BE9AF6CA1CA93966E561A4C40D13AC67318449D1A0CFB168009C21731C793E583B154319E775786FE6CD464BB6160171F24C57BA50C12AB8B73BD8CA8D - -Len = 238 -Msg = 5FE7F0B783293004B9D834D71397512B9F807927383B88D996FB32B5D748 -MD = 894C045E9FC6B942276245B33473BA862F90D8D1A4FB77263462FE7E071DBDF1E2A096E3012FD602A0539597C319B464CBA4ED0DE33AAABB1747A61CFE423D01 - -Len = 239 -Msg = B94B68ED7FD70E3C30854A2C690E3AB48452ED374786F893F2187FB8461E -MD = 0148732EE9416EFFD57310173FA92994373FD52B3B999C0C78918B3863C600CA62F950C50714C65473F1DC3323A1926CAC3A446EF3E2FF6C57C11BED117B6D15 - -Len = 240 -Msg = 03A18688B10CC0EDF83ADF0A84808A9718383C4070C6C4F295098699AC2C -MD = 48E55E0340F20466881A732AA88459AD4BCDEF364C3BD045AE099F953D89F15957AEF204265C3915BA42FE4235196BE3D0F564676227C3C0DEACFBAF68F9E717 - -Len = 241 -Msg = FF47DE5C77211D891494904695A30AABACD0CB707C358999599E28A4A2B300 -MD = AA5E57E04332824F5FA650066B0A62E8A9D8FCF11895A18A3E14CD86370400345AD2523FB343BB154351AFC363DC7A09554E06C7E4882DFFED4DEFD98D3529E3 - -Len = 242 -Msg = E36648955EF0236283244693B5B9FE95C823F6D3E339DE3E1EF42F8E059A80 -MD = AA9643B95AA948846604A7FDE47995B8F3873BEA279A54FFCA403630DC30086F994D2EAD56CCF18D6524974ADD239E5E959FDE1889BF1C401006B549601020AA - -Len = 243 -Msg = 9EB5DDA4A42EC1617D3F5BB18369F73E4DAA180450769CC0CEB1B2AAF63800 -MD = 010C0203D3977525DB5EBABDB4DCAE9DE19F997E008CA87D8A9759F645D1462A9A2F8D446B2C5A2A0228C78A328F052AC16FA8C9E52CBEEF81DD50CC986500CF - -Len = 244 -Msg = 31AB94F53C25D46A0B436D689663878B757F1380C6796A20EA481CED41DC50 -MD = E0BC6B9DB3C331FB5DE8B354E1B9151A72EA0137CFE8ADA800033D894A418E06863EEC4AB80104658F47C56EE6D80916D7D2C9FB19FBB3F75D181F3DE60F9176 - -Len = 245 -Msg = 3A77FFCD08FFD1F9DBC4F3DAA172EAA998413E67E6DCFC0F8E502CD9DB9090 -MD = 8B37D5A1346C670CE0FE0DA2E9798F89891CA8E51FE3AC04922D5AF76D57CCBA3EEFF7AFE45F0FD48A659F42C653448A64FE04E6DD1DC8D8C52E45F04B68C6BC - -Len = 246 -Msg = E07B79FF758BCBC30164AF289E10788EE1B893988AD243618E8478AA8E3BB0 -MD = DD19F986E062B3D71D1F7069E579EF1E3E1E4FEB8F4A8C74E281DBDB0D06CA33C19E70812F24B1DA498A3F1533EEA7C47F7E49003B0257362A838DB13CA03ACB - -Len = 247 -Msg = 9E4417A445A11ED1B9F8453ADEEE21E419BAC1C0FC7541C99DA00D53735020 -MD = 022C7E9D16CD262F32503C07E5F7BE99AFCD597BDA4C7DE5F6788ADA40B143B8702A9156E8224439B4BE40A166BD03F76094F75A164FFA08933ED2C481A657B0 - -Len = 248 -Msg = 84FB51B517DF6C5ACCB5D022F8F28DA09B10232D42320FFC32DBECC3835B29 -MD = 9D8098D8D6EDBBAA2BCFC6FB2F89C3EAC67FEC25CDFE75AA7BD570A648E8C8945FF2EC280F6DCF73386109155C5BBC444C707BB42EAB873F5F7476657B1BC1A8 - -Len = 249 -Msg = 064FA8C3A9904C17B6E284B7625BD70E8B54DAB53D538B66D0A52954F90E1100 -MD = FA142F2B72874A6723B9DA3DD4D6A315322000A0547D472133220C08133E4D2759C9C72B87D88FCDCC5FDDC5842BB28D8B93594F34EC218B5E51396BDC489C46 - -Len = 250 -Msg = 0372CD1CE0B74CE05E717FC4B9A82CE1A888F4EF7B0027A5D6DC5F8D13936E40 -MD = 1B7B34CE0BEE070330D266CC21716E196B0109FCBB9460F53800A65812A90D6749BDF47BC015B5526ED534B595A22CEDB229D69514F96E51EB325A6F831E374D - -Len = 251 -Msg = C7BC6DF69FDBB01BA287A66B0DC82F453119B7ADB8AA0F7DF4D4D1BF5E0DBE20 -MD = 5D4649C6704E3D5A68537C844BB9AEF5E3844200476CFB9DE380F92EC1E6876879FB44F48631EA2D48C8FEC70468B56C4B2EC144C2C54D6AF90501F2ADDA17D1 - -Len = 252 -Msg = C6D8EE5CC53B4BF75956E31EFA8A4BE99D7AB651461FC44E9D16A691F6859D10 -MD = 418939F1C0D3F51D2CF1CB8E192F6E775E917771BA9A936E860CB9040356731C4E967750665FB5219DAD53576CB17C83E5559224EE45C4B949BFCA95BF07F9A8 - -Len = 253 -Msg = E2076C55D1BE257EC034FB68800508B12F91444C99BC1AA12575FC7D7A6A2088 -MD = 023274021A5D3E1850E833DD1A7DFAD69BDD3355BBEEC9B67066B18BF9A138F11DCF6574E014CE24061C98BCD066F48C2713A90A85024DAAE5904B8F10CE924D - -Len = 254 -Msg = F667B870AA707996CABB9F7788C9357A7A6EA28B2A711DFCE10CC86FC6C6DDD0 -MD = 44F0C7D6878E276183B65480F68D703F961BB3EF9A9614FF3E73CDC0DD480121DCF873709CAC8CCC1DC8E2BBF982B63C485F89A67C2300B7BBE72A261575D126 - -Len = 255 -Msg = 820AE9D30CACE62A961B6ACB37B86A72FD46D1E2E0F9574D3B963F387758FBB2 -MD = BC585884798033B4606FC4A3366C0DDD15D6E0E9F9160CE081E1D73A616A607E7E37147E71D2C95D7582F381E56F2D4C446D95EC9A399FAFC4EC3A12F524ACA3 - -Len = 256 -Msg = 9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10 -MD = 1EAFEDCE7292BA73B80AE6151745F43AC95BFC9F31694D422473ABCA2E69D695CB6544DB65506078CB20DBE0762F84AA6AFD14A60AB597955BE73F3F5C50F7A8 - -Len = 257 -Msg = D5AC1E30C10BC1CD15E27866FEFA48E33AEA2E319868F932A2B84C64663E73DD80 -MD = BE1654215575FDA92111A0219DAD23708F5EDC9E92EF8C79C62013435803E1125FFE75A498D80703A562E28975B963EA74E8F7B0C53748997D0F43D60A93B2F7 - -Len = 258 -Msg = 4AB430957A6D231FD5B96442302A63812493F7EB505E7EDAF5D79F1DBF7D3E8280 -MD = 9A491C84D07791571442B1C5E0C7F5FE358FB58CBBB3654495694B70468E57705CDF3D07CE6D0EADD299E620ACBEA32F985D16D74FBAB7B9002C4A9F010A3184 - -Len = 259 -Msg = B261358A122A159ADBA413F8CF0F2D02D7F9E05901F47A6C1ABA5F9F77FBD3AA20 -MD = F2934B5679EEF6C31430BA0AB5BDCFC2E6CB43494E4D10898ADF0AD6F3B454EB783F50C88067D1D17C031FD4CD706A3C92C6AC8E0D730C9BA963A6CAD7F895F5 - -Len = 260 -Msg = C479243928CF52640DD0C74157A672EAC366D4A5BA0D4148EB2D09C25C4FDBBA10 -MD = 8336E5CE9803F0526A5B1107E6961D60690086C470279AB643E380E8290B56C85C28C05664AE9AA6F564FF5BE8009E03299B43EC021AD692444CDB412D989453 - -Len = 261 -Msg = B3980A9DEF20DBE4D286B75DBEC249001E420EA4393B562B2B17DE15114869D820 -MD = 03E90E67D45368D131C7D166C1FA2BD4A7DE0BA762390B34E28EC02BB783FA737FF7149429ABBF48E17A3012865621E996B53EF8A3399C59073FFA37E7BC96D6 - -Len = 262 -Msg = 1BD985CDE3B3494404E1B4D16B2BED5172D095F8EA8C8F8C347B19B83BA2E92F98 -MD = AB6F2653274BC19FCFDF214853EA769DFA3A12DA32B8371A9044F5464F8819A529972C6547D3F051EC295BB453E2D99BDDBC5FFC6069BFE2E09589E6CE804176 - -Len = 263 -Msg = 2B47DAAD44C64F2DAD4423AB3366D82770019669115714DB01AAD8141EAD2AF914 -MD = 6BA02ECD4433608E48FD11B61D2A575E7469E31F203360BA7F5259E6EDB08768E9FB6FAE822FC302A3062AD0D8B536429D9BB9788F1F8D02912D924F2C821CA0 - -Len = 264 -Msg = DE8F1B3FAA4B7040ED4563C3B8E598253178E87E4D0DF75E4FF2F2DEDD5A0BE046 -MD = 9A7688E31AAF40C15575FC58C6B39267AAD3722E696E518A9945CF7F7C0FEA84CB3CB2E9F0384A6B5DC671ADE7FB4D2B27011173F3EEEAF17CB451CF26542031 - -Len = 265 -Msg = A96D1AED0D267920DF19544968478BFD9ED476D500FBA307B9EE8CB02179629AF300 -MD = FC50D8F6FEFA25C33CE0587D808B056C917518E8D09EFB62663DDB347E6EF2FFCA2880D4B7AB9498806AE93B93583B9058E57564C002F6B9E9218034FA7387C3 - -Len = 266 -Msg = C5DFDACB24DB60BC725FEEB11B15F88D1EEDD5D654E14B9D681AA533A094A9F8ED80 -MD = 03D2A99158203600A26E8B366F5E14E33C14F67E5054AC56CDA868C4AD445A17D76136E3407E9AB51613F1496DCB119DC17777BFC453871A74830971924F679E - -Len = 267 -Msg = 9E1D99E9DBE5FA828FBE655788BC8B715EB75E71F225FB895BD4CA6D758D5C03A980 -MD = DF67DB6279D0B839E6E91268C280CB79DD8E709446ABFBFA98CB1981849134C0C70F3C7F6A09E8E8FBD6B78A1070B0414AF191B72946E14C188BC908BD815199 - -Len = 268 -Msg = 87C9BD4514CABA10C9D867BDB49C8FFF5BD6BFB6FBB018A67E7D5374B31ABFD1AD40 -MD = B854B6E6F5CAACFB5FCF8607FE7703233D385290CDEE239EF495697B1DC32AE0252203E2031102378B8F58D887368676A92E6343FEBB49A780DB7FE4A5DE5FCE - -Len = 269 -Msg = F9E1A6D9D6792B9F5C3ACDDD9EAAFF0370F7A217983152F48D23AC1CE87E3BCCC960 -MD = 59AC5B91E8D2636947222C008DAA102041A427B8AE9EC76CFB20361DD8E645AEC093BD78B76A1C11005DE4A46C8CC8E2021A0F24075F05C34308CD395C621355 - -Len = 270 -Msg = 3F567A6078B6F952DF6E07681E04D178DC76F537B3696DE0640F0AEA78AD0B98118C -MD = 93C651847B2A910F1010E30B0E3AEB9F7C24097E4E19AE14DB30BF0EF71E695975EF36E5679A45FF4009534163A6C53A7F34ACB3092A9B3EE98C2DCF758D856A - -Len = 271 -Msg = EE6B41172C01654AB7C0CF20B7F36AB0703483E938AEB8CD18E6F9BCDB29FFB3BA90 -MD = 40CD26484159A56CC3FBC4CAFC743C857667B3736B1E5935B16EB78E94964738C28D515CD8C9C56A06F752234F6CFDD9DDDF7476DBF3D6057EFBED56DD80CB88 - -Len = 272 -Msg = 62F154EC394D0BC757D045C798C8B87A00E0655D0481A7D2D9FB58D93AEDC676B5A0 -MD = ADA5CA5630660003C4D16149F235FAEB78132F7F773A631F820CC5C654B08EAB4206BB4EA1389D1CF74D3B60B86E484C90C817CDB5DD5DBF327163B4646F7213 - -Len = 273 -Msg = 0AB446212263B276D8A86F20FB75AC94156E2C8D9B1C7DE35049D113AC96FD18DCE200 -MD = 6BCEB7C0E5C8F24A542A3A2BDF5D7270B68EEEEC09D427807258EEE00B6D3E8A805BB5AD32D8EAB6FF438825D73152F47BCEC9E2024A2410D13ECF6CA6FC5C0E - -Len = 274 -Msg = ECE9BD39477F2F9B4A8FEE98906D5526D0F994E5D8F6057F13A20DFEB0467C60FD4AC0 -MD = 9CC2C1867235B84A875CCD6D1E2754227EF0093A8CC2BCA1EBBF9ED7E6FDA47F11D83F714282F939532DEF189EA67E6EABC30E76C72F56913C88B9BCD6482BB4 - -Len = 275 -Msg = 0FDD7CD321A364E44EA135DECDA4910BDE8120C1FB23C63C795EB17DA82628D40FBAC0 -MD = 503D13827002EF2EBBF05E4C17F71ED2C3EBDEBECBE29D402EDFB7DB18282BF05EDAD73B9A1FA37D8DDF2BF1ACB57C196A2970430137FED498558CBAC3540028 - -Len = 276 -Msg = 54210A5886A04CBD1EFDEFE792DCC7C4085B3A2E582A5A4C0F5314B63216FED382C820 -MD = 47E1B42D516A86D7BC2F4F9D37A1B7182112D2B243BB9CF2651C034A489EE9710FFB39B827C7B555C9E780BD4E181E9FEB461F961D49CA8C0041A36B8313A726 - -Len = 277 -Msg = E4EBF54BDC9F4B1B91A42C0822BFF0BB5613ECDFA1E0A01474BED6897D5A37CB1D7CF8 -MD = F933B2DEDB8AFE926383139FE16EEFF9587C179D837DE6ED73685F6415A1A8F34A5BDDFFBCFA396AE2E387C4482370E15837AC488462A28EB5992B2FB9DE4137 - -Len = 278 -Msg = D9C2020DB24BC84887F7DD078CC6C243029ADFF37C3D41A33C291E95837561FA13C948 -MD = 9C623A03EAE2B49C9717AD0E565BED21AA37C8BB8A58A6F9F093D9FB81859892065BB04156D7F3532337FA415134F0F13CFAF32D8860C99FF71F6F123B2554BD - -Len = 279 -Msg = 21D2D64C53798DB8A118101B76FC39957D286137A838428042F13D5472AA42E41D38FA -MD = EFA2B276108E03CBB4762CB8F100971CC0FD31FE58828521B7E6AEB0565371B6E6CF9D9604A2B7D3DF2F8017EE573B05388FD8DA19FF156F10916500CF6E9D91 - -Len = 280 -Msg = B2DCFE9FF19E2B23CE7DA2A4207D3E5EC7C6112A8A22AEC9675A886378E14E5BFBAD4E -MD = 71A0801D32587980B09963A0F547B8B6EE3BADE224671BF44F12E3DA4F21778BAC37FCC73EF45FEE1C96688BAF9020F487B1A16E3AC91B504845D6FBA879134F - -Len = 281 -Msg = A40D0922D28BE97EB6C2C071269A0A11547F7D206D39D3C53229078220DAB6704FD0F100 -MD = D3EA5DC2B7B9D1100CC5B5AE073BE649A95B09D1BBF25B81EA8AB60DD4784DC28E68294CDE09D6530D4F205E94B8B7649816762AAECA2B0D7DE3D6A8A8342B86 - -Len = 282 -Msg = 57F929AEE5B4628EF6FE014E93BE6C509E0FD437B33C86625841AE12DC302E1599222140 -MD = C98F6489F5FB36DAEC85434A76CF74C726EE5A6A02E0E45D427D9F3C5259168370FB20E7FA308DDDB264B559B22AC21B4FA1B1560BB432E30FF14EE02559CFDF - -Len = 283 -Msg = F69533A9AB0CFDFBF2F5A5D990C52B0533F76A4427225FB6FD458F965655483096389AC0 -MD = A3EBE9DAAD947EAB0207AE986C67A5BA4A44229B83F1929A7B9272531D9DF3E6F3392F5931565575FFBC65C616BFFB211E1A8B068C0A2D8FD4ED3B2F90041D81 - -Len = 284 -Msg = 5322E6BCED609A2177C5FD2BC95DB4B7DE2F1884A8D710B41D473BD544AB3B0D8126CFD0 -MD = 1D3C512F687DB1C1157CA9795D7EDD281A0266943C18B30D2DF77D4EDB90DC435D1E66DA89D881AE054AE7ED67A77FED7FA413B284A53B1F5FA0CF19C53B5A79 - -Len = 285 -Msg = A599E2676154A6E3D1D091953F0399CCD63672AAB01334070020E5D4721DFD96DBC3C250 -MD = F0113854F67056736307F2279AC0FD4EDB420E971C5750C4B6F19704D7463DBAD0C180C78C3ADEE3E4F9D18D7F9AED1C4178934730120E56385D255A4CF56E99 - -Len = 286 -Msg = 6C22766FDE70CEFEADE46F7C9197724211216DBD0D89E2B0AE2273548CBE15C5473C4658 -MD = 1A1CC0A6A32A551BDEBCB6C97439BB3B627E740743A802DB50803FF6781451DBC74E5036812B5C5132473038545A9FE230A3459AD0C8060BE197967105A0E0F0 - -Len = 287 -Msg = D3D02C5BE255684FF0094A2A97741C6AC6BEB6FA68CE253CDCE6F315390512D8C9441566 -MD = AF6026CB81C0C98E30456FD8503CB2E108D794A690CE18A16CE5023CD43C06706F0F8DF27DEC9396B199A6B64640A034ED3CAC53DDEAD15BDDC6EB864CC9B3B1 - -Len = 288 -Msg = 47F5697AC8C31409C0868827347A613A3562041C633CF1F1F86865A576E02835ED2C2492 -MD = EBA678B7A0E5669DC7FA5ECA5D5F19FE625E113E5028DA5EFB138923CD444757B06078E0BA064B36C72CA2187AB9DD31DDA6F24668F46C32F8EC21AC59AAFA24 - -Len = 289 -Msg = F1AC7DE5E3616550BD56CC0C77FF8A375AB68D13DE2B722373F140F8ABD139EC88F44BD400 -MD = 17EC22201F67E674AD5533DE2247F89D27F40ACCF8EACE6B837535218EF784265CB435AE50B46D17D4D24786960948BF97A1C587C9404CE1C839FEA14B1703B7 - -Len = 290 -Msg = 678527E5C580FA674AF530CCB276BE6E9F8003F428E3F47C533EC2BA518F1779DD78E5D380 -MD = 3975BCFD1631125703EE2A803B1879A59FB3431339F1625C4F4424816A7CA0DE386E35CB81AE4BB522FAA813D50C3ABCB67E527029B49F9D88D1F167B4FEEA6C - -Len = 291 -Msg = ABA2217B97DBC72869B04FB6B3BE2294F1795A3186E1DC73B4424918952D0C5314AA9B6FC0 -MD = 2F78E72AD86F3FF638973DCF7242AB890163A9C8BD143D496E16DCEA9A36EC87D855C18F928C78203710B257C64862A9E524A82C18118ACBC75F469FB396386A - -Len = 292 -Msg = 332E1B3FC86DB38A50EF54E186531E2562C586D502F93CD60703F2253EDC1513DD728572C0 -MD = 0CF4E2E00300EE2295249C6F488A11D0254E48A785E09C660A64F01A1E38E570481E183B89A57F65267C785E34BE7E4C00D33DD41D6F00CC9F5A920F4F4114D5 - -Len = 293 -Msg = BBD8DDFB18D02307F142BC0CD7589C205809D60BE0D947F1D4B640ABC80FE4EFA55CE3F940 -MD = 1C8EA2A715DF94DCD205A641E5D4F6D826964C99D31BC3B45E704424B8FCAD2F958A8299F60F5F1730D80795003D930EDF96CF8164D12AB8B9D0D08A21E61835 - -Len = 294 -Msg = 405FBFFFDD6C1208747AC3220F509CC8702554F8E5C6D1E680963DA085483B87124BC3FDD4 -MD = 8D6F47DD562904E9614BDF8EAE85F381F921DD91C84F208B642BE45CB3C8B98102BCD0E975EDA675D8C9B2F3AA90E24DE28140B45FD3295E673A6D703157F133 - -Len = 295 -Msg = 1C148D3B7B7425FC2AEF8D56A3DD47EB45CDAFE5B2F0560A7D3394FFE1F268D2FBE9B6AF20 -MD = 0DA73F88843448F18C55AA62FE83ADCF4E260009E22B4C344B5846709529BBA5F2A69170A4C7283EC2F124A9069EE59F9C2318CF613C0145057DFD9625F11830 - -Len = 296 -Msg = 512A6D292E67ECB2FE486BFE92660953A75484FF4C4F2ECA2B0AF0EDCDD4339C6B2EE4E542 -MD = 12DF92D889D7BA0DF05BCD02D9DE58C97F4813126967FF78BDF759C66C4CBE9DF68AB31A0256C776730BB25DEECF91F0997868AC8BB86DF7A0FC110CB0A4DE5D - -Len = 297 -Msg = 227D677CF3CC4A9414B92D0469A682A990D6065003E8800AD230F8E1E985A524D795D3576580 -MD = 82BA407BFB5D9C20E6B535533E62326736028100D95E9F8A4C85D7751E97D0F8BAE1F4446396D4D17BB5CFBD890E4A48D049C23A6CB42C4E836FFE28416916DC - -Len = 298 -Msg = A613BA9874384B4A8C9F3499E920D06C194FBFECEFBCA745454EBD9A9D396613511A72B78740 -MD = 5F8F8FD7121DE2C4226A258C2647EDCBB600B89AB97262ECDC38C3C94DFE050A573B2D44B519E71E249CEDD18F343FF42891C501E452B1D743D0A3F5632F6075 - -Len = 299 -Msg = 1C5CFD28B933493A66DC9BF5CA3D9DA856919248E5920909C915BC8FCE40EF1E6E0B0C6969C0 -MD = 7E1E89DF9AC0F72DC249676FBABD330FDD3AE235A248C844F6000AFB23D3727A78C2EDE199668BBDDDA0A6D5E113FB5BE3147369C4EB932CED35974578D0B2A5 - -Len = 300 -Msg = 204EB3CE02AB77FE6F3FFFFDA3F7A257B53B2A07E67505C7DBCCCB50832D4F9A2882B98BBF40 -MD = 1B87354A4ADB8DD54D7647FBF0A4C8D168101A1F7EF9966EED4D777ADD1623B30CFE695DDFD255538EF94FEB20588C04076BFDC7E2A106A20B721813ED4F2C2B - -Len = 301 -Msg = 38BFDB67DE50E43150FA5CD4DB63798B5E62BBFF32FB6455DCB255F5C6AACF27B13D47716278 -MD = 675F5C240C33EA2A5C6120A225A31AFCF9F0700E71A82C4C51CBE54187E547ECF3AFC8B238737B1B653170B06A23937A49D4CCC081558E887C706A2E702408B3 - -Len = 302 -Msg = 0CF6117A1614A773BD4840F01FD2ECFC04AC73F07C5A94F98A9E3BFCB7985125D4A1BFC9D1E0 -MD = F27CAC11E50BC3E30EE3D0C097CCBAE222A5CE0305BF53934196CEBB06A4989470BDEA888413B5C8C0293BAD74E76ABBF8EFAFD4C7138BA28310E4F3C5096DB2 - -Len = 303 -Msg = 7462D66CB57E83172A87412759B5F9CDB8600388D1C3F90F8FC8A89E0F3C513769B9BC8FCB82 -MD = 57E2C951FE3ACCD858A9409E28886F391F4AFA193A6C96584D755879531B9896741C786EA7F58C0BF80F4955F72D7F6FB68DA614FEC7E057A93949C1EFCAB8D9 - -Len = 304 -Msg = 973CF2B4DCF0BFA872B41194CB05BB4E16760A1840D8343301802576197EC19E2A1493D8F4FB -MD = B8C7CE2BE4CB32C140E75B75474248C1DD77D19B0CBCA31A3ECC2A35C532E4FA3ED4ABBCDA27AA68A9DDA06B245443E5903A65652A94ED3AF15065D3E7736E47 - -Len = 305 -Msg = 3C97ACA85A13A0106FD47D7C59D81C58F2E2C5C7F5C717A6033E6819A0EBE6081661AB141BBE00 -MD = 90C467EB0AFFBE3A46F9631D802D37704ABFFF5516089FBF351131972391F142EEA483B505A01709F1E8890D14F327AFDEB7555E03AE9C44CE725F05FF2DD07C - -Len = 306 -Msg = D18F5D56D451363967D4767E79BDA1A4A90DE871687084C922EDE4319A6716E4FFB5072D8D6980 -MD = 5C3A738CBDB2F765F2E74BD5B85D62D797EDBA1C1D211FC614FD46A7DF443A4215FD6CE2E9A5C8C2F1A7262E4031299071B730C6793F2165B09879C80F4BE785 - -Len = 307 -Msg = 557058858B0E5697FC9C4419E6C907A8B85F622519ACA056DD4E3704D8CBC35B91A5076D0D33C0 -MD = 1848A10D5CBFC3FBE5045302090B5445D9FF95523C1BB580A22234316ADD8CFEB35CDD7F943B0F9A1CFD7125CA14DEF062BB1C839EF7A938F84EFE011C9CD8EA - -Len = 308 -Msg = 06B2CEC17D720757AD0B9F832AA958141091B25B0AB2B4920242CC3EE2BC438B04754FC84A4D40 -MD = D7F8F99A87AC79F2C357F8ACBC448E8EE04757BAEBCCD3C819F446127544780661AE301EB8FF3C98280398FD37D31EB5E97130629B1021F13CCBC73E02D10E40 - -Len = 309 -Msg = B98CF17F2C7EB0E739634CED318316AFDC815897E4316175DCD40DE242ECE3149920E2DA76D140 -MD = 55E5B34D8CB17579282900C3DA250FFAD6CF5EDC9E60588555FB7ABAAE2B0BBA0433CFF5B5652619BD2123C05C8F168038B7CE68A8F475B7AD6D184FEFB45CFC - -Len = 310 -Msg = 9444C95EA6A36C1649F600A26586135A34F1E56633208C767F4265A9F0B47776E3CD5AA515B5FC -MD = BCB505816E9C42B1CE0D4143224E8DBAC43BB00992F5E7104582E2A2E05DD200AECDE03838599347663710FBE8A1FC28FC7B06B111B02C7FCB51DEED3914CB83 - -Len = 311 -Msg = 9C30ADFA9CE9F25A6AFFCA7105DFBDBFA98A0E2F57719A645C5D867F5B7D5F8A0D821C605102DC -MD = 7423487B5B54B31A63EA945CFC9AEF4FCC7EA162E78B30528FE52633CF2AB13849732EF085AEEC7A574001DC8F4AABB0498BF0AB54CF67AAAE9AE8E3AB6A2B1E - -Len = 312 -Msg = 80BEEBCD2E3F8A9451D4499961C9731AE667CDC24EA020CE3B9AA4BBC0A7F79E30A934467DA4B0 -MD = A0AE9DFB56831FE4A3223C501B697BD8243C471E8343ACFD37A6B587FEAC74571C23DEEBC9B94A540A02F1B1E2251E01229C9D58C4279F155D5566FB18E81295 - -Len = 313 -Msg = B82A59C86DAC0285610218EF2C068238C941F5BE67CA5A5CB471E195B3B93E984B65A6CADEAD3400 -MD = 3A57A6B0A916C9F0F73E623871C3A61E2BA62D320A86FA1B8664485794AF7A80DD98440133DFE0AEE15940DEB0BD29448C294AEABBA7C0D1EF35645480C2647E - -Len = 314 -Msg = 8F4806F43BFDF940A0E0DE30168832AC32A3EA1456DFF574FABA15473FCD6F1DC7DA773277678940 -MD = 3DA059C123DE2FE28F789748B7F73DCA396BC4770030308BC4098238A20CBFD132DF19228727A7810DB551AD8010434C684A9B36233D7803D41728DB809F1E47 - -Len = 315 -Msg = AC1264C9D5338FFDAB0FF7F5AAF487F7E046601056B15678180A54C0B1CEBABA915A4E77CA5241E0 -MD = CA604A051E3E8D58990A9A95521C92B81D3155709AF15C20C4DAF957AE85572F6B0328B8599A34F1D265639E0160307744E12C25255F4DEA50E7DA868A363CC5 - -Len = 316 -Msg = 2CC2C66FC829514F585D9BE4BF8CC7E694323E42777A78C917D33538F6E53B5C7786062597424390 -MD = C6F517ECAB47E209F9CE7FDDCD37DEDCB3A49E8663D3323ADE41BE204ECC193F0C0843F2AA8B019399DE31D572E55180EC384144EFB482ABC4B8617B4B096938 - -Len = 317 -Msg = 29BE069D897FFCA132F8CA5C1D2E34FD1D02603FEAEC338C768F9676FE581A03EE3399AD9CF180A8 -MD = CFD665CC4751C483E51BCC44F15E1B1A0752A6E38832D606F5B4F4971A3267D563A5D4BDCAB51C00159480D951A6726AE9F4E34B1A1909567650B64215D6070D - -Len = 318 -Msg = 991EB535DCC32C260C0D46DB6DDE353DADF0839FAA4903029B3B0D9B49A3E746D49D8EF3F8271A80 -MD = E483450EEFB68E136F9ACD4C24994E61F33929BD6C3960247D8563FB3E2BA8E4094CCCD8DB722A0298DDDDA2D962AF265616C72CC549B800BE71D8128C985A96 - -Len = 319 -Msg = CD10861F3A9632FFA513E08DD9BCBF6B2E7BA21CB46D55E724C7D3BE5B7C6145DE686CA9F9F6C20A -MD = D2280A3B39A393F5764665FD731EB345221FE6E2EDA97572C19B66CBA620397C2BC8B797F9AAD5A10474BF65FA694EB53D94B0F521F21A107DD0D26E52973B0D - -Len = 320 -Msg = 7ABAA12EC2A7347674E444140AE0FB659D08E1C66DECD8D6EAE925FA451D65F3C0308E29446B8ED3 -MD = 631E7847124A70FE6EB293A44A25C50600B5E7E975CA9FAB5AE64AB86C7E42C912DD6EC093F01A8DEBC6E1F5E487AF97DC3FD6C53002765050BE963FFCD4D989 - -Len = 321 -Msg = 6AE52D5CFD459F254563F1AEDF7619AAEAC27C70B83CCF7AFE16DFB4E44AE45346CEF0994DD642D580 -MD = BCBB0EC8600706C7C77A018BE585BBE91E31560EFEDDCC89D9CE0FE2EFEE06E2B0EDF9310553600EB15488ADF52A56EE974B387B60AE1D2768C0168A22AF792C - -Len = 322 -Msg = 0D030F9A2E2A5EAB466D6FBEF14962AAFFAC30C866086F50DA454B9E6AA30A0DB5E620D272C9B577C0 -MD = 72882792D17E5FD8CBD02AAA3919B8A879873E8EB93261B9536C8C1775B4D0EE377F61E4D269BF41470A1EE3A2AB54B3CD0A3EA9F100C963D8A50F83514D84E3 - -Len = 323 -Msg = 260B122E4E17495DAA1A9E004C5AA0EE759DB729EB269435EF9D229F41774D4C7ACEAF6352A5628F00 -MD = C2975D04C3CB599946FD0D884731D07479BE6DE3E3747DD7F53197DF6543AA06FA623D12BA0E6C70E073424D35F297E0F8C9FEAE3CBDA95311C1998B430EB7CF - -Len = 324 -Msg = EA774E81D5A63B0C7894492C70A0960AEAB24E88FBCC765D5D2AB69F1D66852F715A4A1316DDCF12F0 -MD = C4BBE94547938F6670C5A6527AEFF78B7D0CAB33C49C396B117B06C8C1A727F2B4D677B6A4114F9960AADF923FDA8D3A8F5AAEB1299904A358BCB85680F7DB0E - -Len = 325 -Msg = 46020957F94AA4B4574527455E6E9DFCB571A073F066C7707D8FE4BAB714C99515782295ABD51E0628 -MD = FF42310542B3529FA56C7234F4D4224002F8E100656613944075D73734E8DBF58E70C2469F24E2567A9A4798661CD8D27C5362BCAB473D7F9C4A24235156A904 - -Len = 326 -Msg = C8C1BECD825C7F75CC12F31B1DC070B375768BE540D49F7D8475D83D64DD11891761AC99B1DE6AE2A8 -MD = 37CCD3D4A5B3BFAADA93847F0300057D60C84B24A26BAF7B278F5199B4C520542B0AEFEAA7EAF340543A6759FF1DCB421DD419BE0AF5CF476699C0D7390E6D85 - -Len = 327 -Msg = 4A5F9BCAD4914FBB2FE01FCEFBE7C7B5F061F3BBFC3289F2275CFAAB8F69312ED88C53FCACAB6B9B8A -MD = B1CD700F7C4F63D41FD8E9CA30BA51F33EC51F54BA9B8DCBBA0C06CEFF9E23C65B0000D098FF4BD1D1AFAE1533F153DC2FD717E5394DBE161052EA4183B0190F - -Len = 328 -Msg = C88DEE9927679B8AF422ABCBACF283B904FF31E1CAC58C7819809F65D5807D46723B20F67BA610C2B7 -MD = B989263BB4E0424F95FDC9A49C83A3769FBF31DCEDDA7E005AB5F22F43D2718DEBD39085971F7EB7822C9FA0F67F776CEC4E35A9A8B8C835EF4E9EBDA1922E4D - -Len = 329 -Msg = 6EBA5B65EA4C5EDE782C7178469530309F30A19D25F36C5CA9061320F2D541DF439F0A6646014F87D180 -MD = 75135A6A6AD2B860CAB8B098C98DAA22852A2B83ED186E061F7EF921F48169E639C9493CAEA3560BECD59AE7E88C0035C86BFDEF763091DEA05B43D285AE4DCB - -Len = 330 -Msg = 756279C3F03DA783BF46BFE8E6FBECEC6BD372FAB35732CD8B1ED72C62C28DAE0EBA4FFC02245892E900 -MD = B7D46766C364B9BE7C89FAA1CEE353F70CBA90E563238B138E8926BF2F57F220BA205D9C89A5C8F97EF63BF5FEF13EB205126B6541396C55DED4A3EABE5D8ECB - -Len = 331 -Msg = 2CCB8AB11969F71041A9F18F91B4A76341FA6DE184E9A9B2CA0A4951B128DEB705EA81E190E772235AA0 -MD = B13A28BCB9DC6EF70D93538E14D0D26FDC5880289987CA577ECB1B4FBDDB482AB7C75F285ECD29E17421E1150B7EC5777349854620AD4831BFFE38240CBEE5CC - -Len = 332 -Msg = E6FD7544D317CFF635257BDD529C4A986611D254C7CE5200F5485928684F40E0DB046BDC4B2633AF6AE0 -MD = 739E231EB9CEBD6AFDB7D656121693005766F9A4AE3E567F73032301422E3996B27C1862A9AE6410C8CAA2626C2CD66C2175DB1A97B271C4F33945E97A8286D4 - -Len = 333 -Msg = 0B2173D6DB9B9E03F799B6B59DEBCCE1FFEAA8CD118F22E3A5342C53D4D78A2109D7F1798AFE499F4E48 -MD = 08277BF63DE3799B92BDFAC5F1370450AED47A10444281C7D6B06689CAD21EC9E188DFC8F194DD10BE62AE066E2B41ADB61905481918E9D0953C1B228FBA652F - -Len = 334 -Msg = 29DA389850B6279E146BB9F948913C4C6595DF8317CAF71FC4836B29A963FBBB0F27776F111F7AA7E42C -MD = B9A7036DADE8A467DE70E7FED1B34651971448871257781006D0B2F99F2828A60B15A6FA027F4FDADBADFFD95E862CCCF8F1BD9FAA168F22EAFCE49F882C2FC2 - -Len = 335 -Msg = 9393D143C10AE0CA7636DA6CBB692146C86528A9F8C3724BA57C74A9E00FB3848A2473C221529A16374A -MD = 9729BE2985271DC9BCBDFB343A92FA1A9E319EA79377A050D505920B0303B8F568A60C65C8A3E36D4FD1C25CD8EF1F28D6B665843515EFF98D63B5E0165F0E73 - -Len = 336 -Msg = 01E43FE350FCEC450EC9B102053E6B5D56E09896E0DDD9074FE138E6038210270C834CE6EADC2BB86BF6 -MD = FF6ADCB9E1546798D396DB78452DF1A375B65EE3D54FCC915A8CA3DA693E24931999B0FC8A4EB92F6FF85E42BB4CFD9CE7D7863EEE709C9EF37642B696174474 - -Len = 337 -Msg = 7708476C99437E2FD9BE4754BBF89A08324C36D49B27D852034F1CC54BCFED95B4E0E11A7C909E8D128480 -MD = A06ADB17454513317AFBB426483BB3716810039EBA12F35B3399AB83E9B3FBF9FB6A8B2C7D34749104A66E9BF327C46D340B30DBD84E1D579313EE13832D89EA - -Len = 338 -Msg = 12B37259E6C70B2FAC786F0E573A7A467DD9178B7D2EF0CF264E8E12ACCC3060C62A4971E0100BB93CD700 -MD = F7876AD7684EF949861DAF67AB787EB444A5C775C42B4202A8068B021D46B08947C46DD4A0198966A857A477FB865550C2A33F122B1BEE1E502FD17D13F46940 - -Len = 339 -Msg = A5A38B8A372C372049ED7D377535B6EF29AE7574986DC30D0A79D9D0B5DDA3103A9D85741B5D58BE366720 -MD = BB9E1905AF35FA21C2B2DC698923F02E0402B123CA038132B90FEE2E046FEC26C4E8BBA3FB30E7B8FAF44C782CD3F726F9649211CEEA47843D82D74FEE840E43 - -Len = 340 -Msg = 028A103A894572CFAAADBF89765D49F1E3ED6DA3F00A4A48E84545B11854D47C3FF0C936E7E897FA60E250 -MD = A0AE1EB1C308B538561A460C957B64C985908195E62CAEFD18FF97D9F2ADC063283C247758A1965166779B13BEC480480668B53C9974E3EAB66F02A30DB1F3F6 - -Len = 341 -Msg = BF3AF568D5BDBBE53AD42A2C7D419015A57E47663F0C73837CD483B190C09BFA9F120713E4E743D5394F20 -MD = A27DE41AF5127B1558657014D46D68536CCC0C0C08335E284474C782B174106F36E8B4890D7E72D79F6D0645C2B61FC2634BC0CA68CB6F31EF94A3EAF016EBEE - -Len = 342 -Msg = 1540A10CFBFC8593F64F4949CFA61E01E577C30C987DC150BA15F6C39ACEBAEDD240B9BA78322D79863970 -MD = 2BE89645C98A08DDD9BF64CB137D34C49207DDF7765BFE680B744DFD45BE712D5FBA13E2942E33B71E3E2408687B290AF5F5EFD0BEC251332EBC2E29F00AC3B8 - -Len = 343 -Msg = FE2DA1F667125A9EB370B832ED0C5161AFAC4BC7A03976CEEF8B89FFDFA61008CF4BA2649D190F2AA721DE -MD = 967D8F60539120F8D676B0B4CD9C70491AFADF8449811B8542223CEEEA8D47A0BA09797EBA9A971020720C31BD7D0F667C6AADAF157FE4DE876EF59046E2E3BD - -Len = 344 -Msg = 337023370A48B62EE43546F17C4EF2BF8D7ECD1D49F90BAB604B839C2E6E5BD21540D29BA27AB8E309A4B7 -MD = 1051B7FF77274B784E7FB7823E756F0C4355047E489775BBEDAA7CE5A75EFAC331492C016CE02EB2BE8BA2FE6B735B9A1484E73AC06DE573C5D0B4A58822A36A - -Len = 345 -Msg = 1FEDC8DDAAC6856744AEFD7CBC018561054E6E3585CAB3F46710F6F8A997AB9D9EFC09FBFCEE9EA1CDFE4400 -MD = D4331BF44B65C32DCDFC182B83850FDDAFB976D8FE510A33F7060036585B5F9A884388A05705C6E146C20F2EF251BDFA256837AA9CFAA7B11FCACC3CFCBCC493 - -Len = 346 -Msg = 656D58E735A9AF7CBC79B31C648E200BDE86AEB02349D5FCA38C3C1E57D3BFDFBA46059244A808F528826480 -MD = 7D84535C3384E9D416D61E4BC2F2A1579EEF4E52275488F5B135815F8228C347E857C7817B5A74E07E4C8AAF22326ED0A0700F504334CFE9FDD7BA0A6800AA9F - -Len = 347 -Msg = 06E33F05EC6F55B818F18C7C20E1C7BD7370EE97DEC79F723EC80FF86EE286F379B5183C9CD6242BFC2D4BA0 -MD = 64E00C0BD3AA3F9D69E7444C345AA8958807D6F6189B6B04B932FCCDC516A92C17C22E30E53CB1353F90E9E44A4074867ABBC8F23DA495CAE932BFE042A45078 - -Len = 348 -Msg = 09B73DEF13C73B22E45263E5B9E5F4F291FB0132B24425A836A3BD6295DA7AAE2B4301805933F67CCC35B510 -MD = 4B66F59D8EB597C853E7ABC20B644EBD3EBECB939745AFE6D424F3D431F8BD75F678AFDB1815C0332B6791B10937AB11A0A991CD58CDF8C3C79F3D673E908F01 - -Len = 349 -Msg = A2CC0259EBA6A30CF724502773D94178E67FDE7F510C5BF320791877752B815BE201437AE318CFF42BD12230 -MD = 1E1A9AD993187105D1B9B7FD3FB5DB87757EC47B12BC9E05D78D8E3CB4213F44E64ECFD34D95707C76F5BAC48E2FF8A3B9E2A5C2AA82663B462F64ADA00CADD0 - -Len = 350 -Msg = 2C76974C31F633D26395D833037C6BA084B345CAFC3858303D552838BC9832017178D72C2468A9CC347D6C18 -MD = 7749460F423EF7B438F3E3AA81D3179D2C7006F798E7AD08045679E17F9B77DC78FD1F7A4217C2E84FD6AB379A1FF59687765CF1C6F22068BD890F2254A9DCE8 - -Len = 351 -Msg = E0F134DF7984DD0D183B8761DA86000C298E7B8AE7A7308EDA560F816C475AFF5C85ED74103B683C2867E0F0 -MD = 4AA1D5EBEEC2F6BF5BD6E8FFC2241B496FE79CB2A7E6D79AE529D595684C03B92FBE09D8571E58FB8F486D300993FBFBE8566B29EB231EA1412067DADF24C77C - -Len = 352 -Msg = 6892540F964C8C74BD2DB02C0AD884510CB38AFD4438AF31FC912756F3EFEC6B32B58EBC38FC2A6B913596A8 -MD = 5639A2824297CA099ECF2A81EEF1753F6314CB663D860F05A39E3E801FF82060BBA10628E2C0D9E0A84DD05ED637FC0B65BA03BB66E46FB256F2A5B28D3F41D2 - -Len = 353 -Msg = EB093452BC1B8B5C069C93383A6888CBDBDF54EA27EE2A6EA03866CAD6F8480DDF46010BCD29511FEB34E7A200 -MD = C47F82520ACBCA795776F8875752018184FFF3BE699290ACD109147E444EBE1E1B20C71B62210266A3C48ADE8F9B31307683F2F55C783E679ED915B9AB18CC1D - -Len = 354 -Msg = 182124E36883F7209E73389F39F72B1840ABEC27A3F072F1687BF1A117E6A500AE98F62CF1512C62EF2ED00800 -MD = C1B9657BDC3C23C5DA561C8A333F15C6281DF4F11799E717C40FD47A5960C12AED444F27DFABBE69C105009273958FCFD104DF90BB87ADDDBB0D7277741CE238 - -Len = 355 -Msg = 2CA783CB3D5E33AAE3DE058E16527161A84B7B53CEFBEEA929A60B146C92124FA69B61613FB1748832C2C1F060 -MD = FF8517AAB5FFF6338D24077D533CD74580E9D70593D5F51187AC92EC37CF61E6DE611665E717499260B46EB6FA0C5886D53B453F938479D7C2A646E20D7D0EBA - -Len = 356 -Msg = 7E36947B12C82FA496D485EDD42A6F2C3C32894878DA04D92F1D462668448DE6ED6276D18C349DE0ED4732B500 -MD = E5A8480009F2D5A5D022E74FD5B07FEB3A0C4973370EB2D4ED8283FC7DDBE2575CA2CD7B9DA3FCA0295B88AC3A73F2765BE9AF9AD2C7F8070240C264C8DA130C - -Len = 357 -Msg = D6AD21DF91125357AD9F6B6D67E3FB441BB479EE5EFA53478E3DE2EE183B3E079432CEEC47043CFF7759D717C8 -MD = CDF52BDAFFA12821EFD5426C0068105FC2C03155ABBD65D19C6765779BE6A33060639DC7D719D4061E84F3781764497F83F150DD928D4F1172EC3EBA9ED5115E - -Len = 358 -Msg = 15463F7D27902F09F4BFDC40A704B38A6F9D5CB5C01EC8B9BE2C1DE8BD0D02A950141652B8C0E68A7A88C25F9C -MD = C1F28F3D1492C574D01C7AD72FD7B9745471EBF89AB527D2FEE6BCD17C2436C261D06362A492CB312B773B005152681678B2DFC54D22D26EA8A12DF8FACB8844 - -Len = 359 -Msg = C6608A516B83270FB53379002DD11F426C0CAABCEBB89F9F7D89DE9069F7A6EC76699B8503B8FEFF4418206CC2 -MD = 7DECAB43201312FDA56323F333F131FC3700D6A3D757A32DF5C27E9311120BBB035B322CA3776AC3C55B2F84FDF579B00DF601E60B50E35F5830F291CAF2B436 - -Len = 360 -Msg = F5961DFD2B1FFFFDA4FFBF30560C165BFEDAB8CE0BE525845DEB8DC61004B7DB38467205F5DCFB34A2ACFE96C0 -MD = 97F9D642507E6DD179D56F4B815E92D0D486826F273EC711B8F9CB76AFC79F900816FDBC13DD3A59FBECBA1F3B6953F879F27C8987B24C6FF8557A2C834076B9 - -Len = 361 -Msg = 501C700F800129EBF944F9F60A87AF09AAB22CEB2507459EA596430594A0607E9CAFE92DCE870F251D9CCBA22500 -MD = B9B0010730EB93E2239EED1BF53CE5E03BE9F27A1B51BABA329796E5CD95A76BB86E3660282EB5383C6892E31A11B8B9F976FAFA26631E97A73F2181BF84FDCE - -Len = 362 -Msg = 446594BFB8B97519D99B1EF9DBFFFF5DD75DD72F60E6788A8DE42F1BD917B450D76B165E97343353F4659268F840 -MD = D84865E7910A0A58B74E99B9F003026A3068B58314E3E12ED75828616B83A5F4F122CFD324A9C8472A5956045A3A834D92226F08B3C7DA016A9D9C57840B7A03 - -Len = 363 -Msg = E6E6686481E5A98343D81BE7CDBACB5DCBD7AE77ED892B4EFE2E55EE914B4C4D3F47C31D3BF02AB52733265EB280 -MD = 5D86B8A0FDBDE24A28CB9598AD579983886E001CB47C6AFEA745715B6EB880BA71D8FB59BE1459A53845C3DF029E66DEB87865585FC26BF6BE9C0A708054BACB - -Len = 364 -Msg = FD7D50DFA2F48B2D1C72E99336F88F389DF5A1F616F49B616ED4C51C05F6340085267910BA7137B36BF3E9190990 -MD = E8F62119E4A47D3E6BBF60449A09587E0A46ED07772761F62DE744026986330349E0CAE839EC76D9BE89BB7456336E69F4C5BD090C5B7322B30694576FD5579C - -Len = 365 -Msg = 57D7B43D26E8BAD1FEEF7ADF6893ADE1554F3AA453CCB8EBE8ADBA7A8F9E64BDC8126882F3E8872EAE10EF8D9EA8 -MD = 630E9CA0EDFBFC2F7B380AD0DCE1BF52221DD93BF4D1DD5926460747F02F2F71E12B36E6D0CDCD52BCBF8C716E6B860D573D700B5361FB3CEA2E0039F8D7A4EC - -Len = 366 -Msg = 56816DB5D0458EFB764D88C5101906337FDFA82082D67DBA964B35EACB019FBCC202EAFA9966A47656BB52E4E804 -MD = F24ECE0D3165AFA98FF52E66179120A77E88EC8805E1BD8D3ADDAAAE7F338FF78B0549A0B53A9C7558FF4895E9F952E9A56D282C80E81406CDDE0E751B87BB9A - -Len = 367 -Msg = 0780658D267A25094629F1822E2D430573D6D1CB3D057D66BE241278244ACB3EA4418E8B21D5138455A80BDC81A0 -MD = CB2CB7225B5E6614A0E904B47E73CB982FE11148D7132D7F06761BA3EFAA17EAB2618C2E5C287E4917D512F4C1B481833773933BBDE103192CFCBAC6BDB860DB - -Len = 368 -Msg = CA061A2EB6CEED8881CE2057172D869D73A1951E63D57261384B80CEB5451E77B06CF0F5A0EA15CA907EE1C27EBA -MD = AFEF2AF5A01B89BE190A0E6E796AA51F1F8C356772C6FC7731F08AAB8BD81AEE1287C70D564F4F169E37B07F28202A85F468281B4CDC1273CF61EB30E3BDCEE1 - -Len = 369 -Msg = C6CF28AD22398E68491C6EC930B95AFEDBF6E44330BB8A9E46B2B7A77B35E3793E6F684E2103E3954BA173CEE7B180 -MD = 7923F68E18F80D497F1077C4DA3D670178518E602F698FD57C2D45DA624DCC16E4E1DF2F590386D967AD56BC1FDF6BB13DAE81AE0142EAC8FC8846E7426D9E09 - -Len = 370 -Msg = 245C8B218DADF2D694AF106BDFFDC34CB24D0D00EABF16F94D010AA3D53AFD1E3BA64B8CC419B2291D8BC84D0A8280 -MD = D81A61398AA4B6800CA8C4B4158A898B4D548DC9A08578E830AAF91E6458F28C4A3828C479B82DD64C899F7A62C90005417B643A79E36BA50A0E761149788CC4 - -Len = 371 -Msg = 6B3056B6F3768AFFE4952DF6E33D991044D92D8EFF9CB886C0516BA9B15827C69DD5C87A8DD7F3AE53A0928AF153C0 -MD = 9716D9CE00F97CAF8EB92CD84AB6DEDEA2477AFAB3BBF36A75805F76B20CB82C2391B3549755E7BEA59423D79A1F2F4B72C79924693A763F188B4881C2FFBC3C - -Len = 372 -Msg = 7A0CB5B2759A5E0361CB2238B2BBC1306B3605D6EE6DA35B77E26EA7A80C9480C7D72C9C1F0876F2C850A8B9BF2460 -MD = 78C9BDF4C8E54CD2C6E1660612A34914929CF312A1A3A145EEA08CBB796402B9C5FA53973E600F987E5997F876D520C4EB065BD5CA705748ECD3352677B92A4C - -Len = 373 -Msg = 3F589EC4DAAFA9125ADAD0DEA6C0CC6230ADEDFEE2C5C8483B9C05814452B977BA3E487DE46FDB42788DC076780250 -MD = 2819DFDC7A0A92ED567796F2EAEBD64B584CDCD78BF8AB9E9B93B6CBE406A059F75F8E7AF0656DA5F5F337AEE6E5E4F1CD60EA5E106A11770E2B3AB3263F0846 - -Len = 374 -Msg = ED78EF2E98AA9AFD62EE9BB8A531B69D91EE5F8EE701BD97EEAC88C2B09A75056C03DA7F2438FFEDD03A47399A07A0 -MD = 0AE4EA506A31B44337433C7AE815B7D1978D58E77D4BB1B3506D0F6D5DC5C5C5092591D2BC0246CE3CD5AD07F169D8F69AF89432CC71CE9594A14E294DD21674 - -Len = 375 -Msg = 7193F965E130AA832EAB17149906EA78B4F2341085A5A1A124C1A9AA182118E5693FAFEDFD6FAC7AE4BBA79E907A4E -MD = 74E80B5C6C554435E475BADA4432E589C2A8A1AF76584113BFEFDFF0EE49CCFD0565EAEA7268FD430E02150DC50738431669A03510F72F0A355584E806B884E4 - -Len = 376 -Msg = 1743A77251D69242750C4F1140532CD3C33F9B5CCDF7514E8584D4A5F9FBD730BCF84D0D4726364B9BF95AB251D9BB -MD = F467CCA67C387FFC9F1B173A084C451095D01AD0BF3953AC103A76F0F1BC86167305A926A941A53417F1611A505AAA205BCFCCBFD343465DAD8A6C1E80609A9D - -Len = 377 -Msg = B01795726D8DA32E9C36F37E09479F4571DA850893CE76BB1510A4FFFF85DB3E2DC89E23917955D748A79612E3141D00 -MD = A228080F7409B1727C6D75B19F72FE8F4CC3AA343839E2ABD1A152C053076430E08FD820C633BD61ADB763344BD728D4ADDA6ACE1D1AE86728BD4789AC7E2C4B - -Len = 378 -Msg = 9BFAD4C6CBE6C8E010C1ED56D377A507FB745DD26767F67F5F84569BD28DF01F697149118B37826F0C064A96BF6F8440 -MD = 342208D0CE24A4C8555FCF00E8F9B8A8493741938DD7AE78880CBEBDAEFB68B7190BC16B53B660D0283003F9FB78B921C65EB5F21CBE02F8B07316FE375E5B6C - -Len = 379 -Msg = 0B36E609EC9B746AC8007967F4445CB9BF020D4FB08D72C893E17CB7632CFA9B43C3C39947AA674B2FA47469EE512C80 -MD = F2B9A7229537F3CEDA930EFD18A0352CA07E4D408F368C260351057FC0189EADA62C8269697E87E58B02C4CBB8C07326FE2742D552BB493F72867A8A91887B31 - -Len = 380 -Msg = 50BAAD7D4756E451D9734DBFCD6781FDF01E44FECC02B822F489FF7640A07320DE9E0CA2EF9452C146605E7A942C90F0 -MD = BF14CB22AA58A7A2247CD6E24306AEE64A1074681B27E1F6727219698707E5A6CFD52A464FCCAB73EAF2A1EF7F413F22AC3F13D34532135193F2E364653F6439 - -Len = 381 -Msg = 868EDB30D33E50D2639082F69CD0C61BABAE09129A8AFE697307E95D3419D7B90ECAC04F3EFD627E285C04DEE318AAB8 -MD = 41A5671CE569972A933B9078351D2225EF77998EFAF1DD1E4B16A154C4C34241784B3CB0D17271A2ECD97375066235105A5F3C24E8DB67D9E70D0784160366F9 - -Len = 382 -Msg = 9C540C6D4043298DF4BC9EA0B789EFC43216C3CB20D1997C7BEFE94B677A03669C3D7EBD0D3D156D5431BCC1D4669CEC -MD = A6D8F8F9053A0AB7E08DBD49561DD57246F5D196F140A976FB3DAF1581D9AFE2D24D0976FF072C21BE092C0EF5DA9320DAD8E95757A28BA48E8B30E54B01A9C1 - -Len = 383 -Msg = 80C9184EDB1C247FDF554231308F15D6C5F45ECF6D21E7D6BEB8EB841410B1146DEF2F9AA9C452EE60361CE6C67043E6 -MD = 9CB23E55ED90A27759F9C81A8A3B08F5E24C4029B1B340D863F18644799FE8FC007A12AB7F4651A2ADD4CC2129C53901602088DE7744863FA9D7FCBDA99E4DC4 - -Len = 384 -Msg = D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9 -MD = 4B389A2A0DF5E295EA9444F2739B5492F290C4467B0B4CDC1CC9ED2CEFA7A9E527E0627CDAF0BDA58F17D13F94AF7D2DEFF6FC5D53DD9157674475527FBB4F86 - -Len = 385 -Msg = F6D31F3C22A3D006881241A2D0F4138A2C3E683C8C75AFBFE1DACBBBB6976D51BB7598210B606411602B04C774023C5B80 -MD = E46FD4B3AE0EF5FC6F339DE060E2BC1304491CB8C8B36B58692CAA88235F47B9C7CF290E604B4AF7BD92784B403F92901B03892B2E5EA82D5C73AA98B71FACA3 - -Len = 386 -Msg = 9E38E9FC2A49E920FDC0452A2CAB48D187952AD2AEF98D1070BB409E5E363A15F8A8D4E56716225478A9AE429F58E5A280 -MD = A990449E1E08637FE0F8913D65A8FD81688218C109AE2C4E07FA908DFEF4924C002A7F91EEB8AAA4B75CFCF29B39245BD589E06DBC41EDBB7B83D12897DA8AF6 - -Len = 387 -Msg = 0C2B7646EF6BB85EA55D7CB3D15DDAB2F03F74DB6BB92859E5D06EBC364300174619490E907219D3664FC591B36B6FF900 -MD = C2826C66B23F35344FCDB65C513AE224BA955B82A049C5B684038D1E95154B2544AF5834E77030367CC624BDBE48975347834E6B35B61F2FFF99FFB99E32C0DC - -Len = 388 -Msg = F08C6B743F2BE9E64E55BF64219455FCA6ADEC2950599CF90F87D1CBE3E20EC9C2ED5C5688B8F6F68F07D2ECB7E9DC5CC0 -MD = 8444EE8C012F8E08A4D000E9123347892770E6C0436333DCCDB56AAAB68A9CEA79A4D12614091F50EFD7979ECBEA2617E1FBD3D6B6E3E55A4BA5A149BBEB955A - -Len = 389 -Msg = AE2BE2C31BA294971E252E26FBA821A90368507DA6FBEFBD213C3C2B20CBBA0E4759B61261B95A3715549E37126FED6ED8 -MD = 291EE81B280AF627A0CB4A1CD50110F97B91A93D61791F916393EB7EC0E0BF4A70F32D88BB2BA0BD638FE5591046B38542793E00AF18ECF0CC98701662C24F88 - -Len = 390 -Msg = 2D394EB3C3F1DC9A6BC8A88E6DA85849A89038B2DD26113BF503169D3EAC0079B56AAD799436A343A0EC5F53E5D9E94A40 -MD = 07340CE064EFF1E942E9536C9F99097AB0E5B7F2C1722CA2B9E488F97CEB03649543BDEDE0B2F23B1B3067779E18F0DD4FBF17CCEC9069D6B36CAD5A0EE45B99 - -Len = 391 -Msg = 53C96678A5B5E16BD5E23C68078774D685E8506F90FE37DA9F5DAA027D8A92BF50A9802B12C724A30FBC1BCB665AC9FE36 -MD = 591CBCDB4F5F969245FE9DC87299CE497BBABB6D3858F034FD5B94648F94BD723167BC97B9A1110EDA743FA6BA5FB16A5098FBD595056567D1BEBE9863F3F1B1 - -Len = 392 -Msg = BE9684BE70340860373C9C482BA517E899FC81BAAA12E5C6D7727975D1D41BA8BEF788CDB5CF4606C9C1C7F61AED59F97D -MD = 6590FFFB7311AB7DAB370FB518CCC19BAA9AF7C84179ADB002F8FACD3C44AF2830A84DF1E2C2402368CC36614A6EA22903063E57D00EC511A46A9A03FE3819F7 - -Len = 393 -Msg = B107511A7881EC739420A1F7FA56FE6DC9BC265D48FEAE99E8F6051EE7129F25F90C7D56A6B16F80733E174DCAE715000280 -MD = 69C44FE22F1A4D0B6758BDE512E86A992946106EABEE6CF7C27433E98C30D87EA3C2F5580B7B9537D9AD8CB25C398212C878A5599F8E41CD405DCE12D6DABC64 - -Len = 394 -Msg = D7661A5026665CC9D5A9676E92BA21F430F044C8F4C61941C8F0C075D5E7C5CF0009B6471368222412A70F96C24D194118C0 -MD = 5AAF8C15DF7AF946854DE1589FF5603F04097C95FA611EC7E483CCB42BE88B4B704F903456294EE65CA92457BF8D804FC7599E808378D11473DA082590234841 - -Len = 395 -Msg = A0C5DEAC53C00561B7340D31106E4B61B6B8CDAF7950D5B9AFBA9BA0B8B7418DAE4680B460B1A288029712DDB946DEA0E640 -MD = 74D874BE293B48AE998D8AC476C195C734F5A6955661AB7486D24A6ED6D6800FB715D9329802EA17EACE8E3CAC814ECA2BD6A7D95CDDD25534B8A655ABA150A7 - -Len = 396 -Msg = 06A82E6D3E0067A21BDF39EB89FBD0729618A0803DF3F362F81835622423CCF9177EF5BBACA40EBCC851D806594F502FEDB0 -MD = A4D0823B240109016A3B987B906B6C60ACE5785651620EA12C413F45D062D119A975803F32E5E60291415F23F653CB0C0EA2B8B7356A02D19ECA659C5233C386 - -Len = 397 -Msg = B8284DBDDE2AD5DDB44D04251D9E9A6EF9702CBE564BB8722DFE0DA70A228F0AB8D0164F86772F65AB25FA3D029C892439F8 -MD = 7516D10BB7FD8307E77CACD3F898452623F1D8259E395B75378C3B3DF80D89F5D3D69A0FE995C830A0D70F375EEAA1337B990D4119915FB3818F7F3BC4CDB2FD - -Len = 398 -Msg = CFAF722B7986FF2C401957C8BB60F9777309C978520A21A692F47F6BD08C054F4A42A7C1E703153E3C61309F203E82C38C44 -MD = 02B4E2DE135574C2C1535E112A20BBEC7954C4C56CCEEE50CD49B3ED98FB86F114A36C8451E6077434D5617F39FF6CF3FA5059085A5C1C68FC670521183027F7 - -Len = 399 -Msg = 9329A4CCEC09FB23008F0C59EF522D1B5D85B7FB3832AE3D6C3B15EB7847ABA6128036088E8E1722166A49565A93B7F11EA6 -MD = 86E943974BE28FAF8B37E60500B8D9C936846426357CEEBE27AFBA96348AE8FD8F227BD78E1B384179B70C967618ABEE02110433BEB371D29F764F07AAD300F5 - -Len = 400 -Msg = 7E15D2B9EA74CA60F66C8DFAB377D9198B7B16DEB6A1BA0EA3C7EE2042F89D3786E779CF053C77785AA9E692F821F14A7F51 -MD = 895796B2A0824C55F030D82E794925C38D8459F38CF848519F120FF6A9D5A03EBF006C3EA5021E8F3B3408FF12F01BCDDF7A085BA0A9A58944FEC1F554836DF8 - -Len = 401 -Msg = 319ECAFB15FE7FAAD64C4BA7560FB257B2EE2C1E4AA49E8426612938B08D717F0120CE812FFC7F2D005713A1682BB1DDB98180 -MD = A439EE80BF8E9B532A85F6C557750C96E5C629D585875B9988D15E6F969EB553DCA71D822FA2C2DBB2AD4774979BE941AD0CF760FBDA5DE69D7412F777FED1C9 - -Len = 402 -Msg = 47D9F1CAEE18C889A12A410DCC086C8D863901B89FA5869FF8FEC5A64B065659F57E7EA54D9911BA05E8A57DD222921C505240 -MD = 4845E42B5951C77E6746C6DA2C3B310D2B2F706489B90FBA0424F1757BA42E362A3CC96CB07EB15971470748F32ACA11549D1900422FFDBEF35A15D9DDF8855D - -Len = 403 -Msg = 74927E91B6F203D54E2E81EFFB4F14889B1958A64568C21053E3DC5A941E14C2077D9DFFC18611B9CF5646DFB6C27E0D304E20 -MD = 1346D0F0A79FE74E79AF35301CBF94AC45502A0923F87F89D0A730DED9808AAC7804B6C734B21DCFCC8DDA2645613C83913A0975FD88616CC1D91E5D01A4AD22 - -Len = 404 -Msg = F6E46F9A7261261D239C74300F434D21475A03D2AEEBFB546F0C5AC6BC4EE97A197FAD9CC1B3C396C244F8F20F97632DC8EC30 -MD = 72E42ED68D51F9B357C75551906A6D296065E9FC87957A41654B34E7AF8C4B27E703F124E5FAEBC8278EC887CB90C74CADBACB6EE201C2427508FBB4E83EFADC - -Len = 405 -Msg = 429DE6D5EAB64B3353736AA20106409B58C0C956F4F751E24CA3D519B730308AFF43232262F1DAE6BE948E87F6C187BA725FB8 -MD = FA88CE59E5E5371B3C15A9F82D855D0789FA47E3B5706B85234CF1D9D3034A2D47F092A5DB0FF2186FD4185E8305A0872CF1EB3B39B2FA078098419F7AB51FA9 - -Len = 406 -Msg = 429D066735761A1E5EA847E5EE3EFA5ABF2BE447E9D6E2715CF702F99FD2028AF3432ADD0D7F409E0A3DF144AF995B67B46A50 -MD = FCF99F3B2EC48FB409804346DDCE6F27193102D469D4A5DA062BE773392E7FA7EE16E66B18FB835B4D6E7070015769835102ED7E523B707D54C09B8164FD1FA7 - -Len = 407 -Msg = 0A798F7C67743E076AEDB61F0BA84D657DA0DA2923AD4D66DEF4D5934C49991427CDBD0134772D97DB1ED1522BA9EB7F972B30 -MD = 3B29646326385D34408B14FDF84D16F16828C6BFEDBBF2CFDC73BDA7CE4F1F7480F0EEC857108DF4030560C3FB02BA86F3242DE809CFBA588F2A26852BD8DAC7 - -Len = 408 -Msg = 9A219BE43713BD578015E9FDA66C0F2D83CAC563B776AB9F38F3E4F7EF229CB443304FBA401EFB2BDBD7ECE939102298651C86 -MD = E4BBD54BFB99D345471F8AB94271B4B748F5CE70C21C28AE6559E03EE7890A2C814043E624A6BD2944350756B37FA8208FC7473A67B310CEEBC17D965ED688B2 - -Len = 409 -Msg = 072B844D05C1141680E5A86AB9933E524A9C7FFB0006FD2CEBF48C420AB7890FF685BFDBA54E31571FAD5625C1F08467C9EEF300 -MD = B77E4CA2D6DC8DEE0DBC5F9E4EED1A7D0B5A9ABA54DD22B4399E82D051309614E097AE34CCBDDD1781C3E484F9D6819448F52E93D40A66FC15E168D9A210938B - -Len = 410 -Msg = C6547E7A0D7954F0D14A531E99B6BA3B22B93194D472E669C926FB3BFEFDFC638418425B4F2C11C438A8903004922C9242A1BD00 -MD = 4672801F843FDA5F614BC5E0E7D72AEB6467FB3AA9EDF3C270CCE2A1FC14A223E02244E4A2D016EDFE3A850C1FBDAFB07B815848626FE16211FD0419CDC057FE - -Len = 411 -Msg = 84844062ACFF2734EF26AAF41303D0E767527DF9C54781EEE27F84D0C3262094612C44A8104471ADBD7B9D2899AE4B751CAD1700 -MD = 282C4D79755E34E3B48FEBFD8D4F896DAC781FB53674F487D4FC95EE6EC369FC9FE091FF1149A43BB7B2B8C2343C1CE5DE48E59AFF9145D410EBFA011286633F - -Len = 412 -Msg = CE88E129B93E120B3F80720C43F187308A336418787D20EFFF630885E20948862BB0ECD3539E1D23D05223C988A2E5495A92A600 -MD = 95451577F01024249716AF3568E042F430C1BDA96CA835518CD8108B54262EC2F2C3C4EEC2A9D0125046A7E3571DE02BCFC37C71CD62570EE71DF1F4805B75CE - -Len = 413 -Msg = 4D4768585B090550A4289861A3EA955EE420D41A04B71199575120280DA1F0B9038AF3F35EFA1B8FDCE29F8F5F35DC6A803D49F0 -MD = 286332E3FAC3DF2D20F6CC9A6289C86B08137944A7ACC5569A9E4A9BE076C5777C3EF941BE63A858CE139612778840D9BBBD38D84D5DBF84F4F298AF418D6699 - -Len = 414 -Msg = 010FE46B5A0E37D07218028437F52F2FCF41063B6CDEF9433769D3AE35885599EACED0BD468E731C8A43986851545A7D200787F4 -MD = E9EC685147BA3D528AAF30A70A69F95AD3E161CB421124205DD063731764C717E2F80AE2DAA4473157C8994A7AF681DEE29843DD322F2180F04E8FC32B7124BC - -Len = 415 -Msg = 5A7586F07BFD09DDC140DCAC2D5F6822EB9868F8258DF4DE7D6811EB43C37624A727177EA10F28943083AF7603F954E5CE1BDA0C -MD = 55688422BDC8EB97FEBF490EE38D6B8879F97858C6FDFE240BB4614C0DB39DA780562EFA31E876A3646A2D4BEB02E6362F2EAB9C37B09C837F91756E2951E136 - -Len = 416 -Msg = C8F2B693BD0D75EF99CAEBDC22ADF4088A95A3542F637203E283BBC3268780E787D68D28CC3897452F6A22AA8573CCEBF245972A -MD = 80D862AD05428A299213E65B50310463FD22C505E693DD4719E0A120EEAA35C5FC1608A08D22E2CCDDECA49878BC26ABE55A3C9A546347439A942ED0C1A6A23E - -Len = 417 -Msg = 8C7FFA23F6AF3DF0385B9EBF9E14F6998354025123E95E92023A3885360ED163DA1F430A259F6C535A6E3975A3AA541FA536F34900 -MD = 894D19771D874263276B3F026083213795576889FD12ABB0707B5F0C0E1B47939B864C770E7BEDD75D7F24EE653E76EE33795260E3A6BD3A5237A7CBD422CEDC - -Len = 418 -Msg = A48E78686CEB99446507346AA71D0C7C5D97AF093895DCE569D8F69B16771696E429787C87946214985B0B6EE9301EC89746495640 -MD = 36C1B833057231F1CF4944F5FD0ED8EEDCA4D896BCF163681882A5897DDB3F0C9BDB26071B451B1E0815B4A25BAA0E3CB4E2D123AC926F692FAD9D2715312D9F - -Len = 419 -Msg = D13CADCDEF36059A4FC6EA141CF4460B93631519A40CE26ABAA635480687A7AA39D15CE827BDCE367C619AF46F838B3B1ED26DFD40 -MD = 7B01E222496A5EB547369F0EED9872E83AF35793D275ECF6099A4BC210438E6E649188DC4C6CA655E1DB5FF750969FD96971E35B19752BCBF6775F99656849BF - -Len = 420 -Msg = 82275CE8689C8466DBDC50AE683961A5C5D4D3A348025498BEE894E8F0D6B9328D7005FABB85E13A48DF19BCDA503234AF7124C980 -MD = 7BD66218A8539453B870EFF6CC0724B78FCA27B453A4B313EEF8C9DAA446953023781B74E655A2B61C7ACA3A3E86373807972DF687B33CAFEF2486AEDBA06BAF - -Len = 421 -Msg = 4B6FE5B999B90B21DB0CF4B8DE1E4351F80D680C49D3F040869256F6371065FF35DAD6BA971698248931C769B95869855377DCCC88 -MD = 431E240136EB7AC8B91B437094C5EEA099DFD898CB8426E935E5C97FB066B7AF1287E4336C6AE1028EA6375760F77EC74EC9465C568103A4B861B3D7F174B2AA - -Len = 422 -Msg = 3CAFA3937071BB3055C96A364F9B1FA56266F47E03A1A28213166177495A59713C04B7475E1AC2573B979BE28EEEF0B651E195CD8C -MD = 87E4E1965E184FE2DFA82503DBFFC6C56C5CE5DAB629278EB551DFA6C65E80D2E2778CF1C3798820D78981E4212B7335FDA7125C0C4EFCC3033C95E1937BB28D - -Len = 423 -Msg = 93302958B1CA9E71AA01CA51E8E6E370D7414FEF7288714EB71F2005CAD8E605C6D173A1617823DCA776AF99A98ECA41274AA1610E -MD = 28B7004848B61346B02F2214E95DF86D728BCC9386422C2727199868F539242E9A0037FD4A76AA3B26F468065C43B9ECEA3A7CBEDF52D68829859B2026DD43A7 - -Len = 424 -Msg = EC0F99711016C6A2A07AD80D16427506CE6F441059FD269442BAAA28C6CA037B22EEAC49D5D894C0BF66219F2C08E9D0E8AB21DE52 -MD = 021B3B392DECCB9075559F88C0C229026A2048CEF8EEB2D4F94803DCF2DA0A73E004D7F14E9FD662670B59229AB3883C340F4E3A8C42624CCB90BEC1156F95D4 - -Len = 425 -Msg = E6F4D535970FD7C9E4DD8BBB2D4B4257E68065391F4DEED3B4F7A7E4FD9E61C3D77394C673571F1AA4640D91AE3318DB62D77F237B80 -MD = 94C6D3E2991B691C080C64FEF7072696FE9A9380C046B9E8F5D33A28355000EFAA2E5FF32AB4BE4C7E572213298911C2DF0E0122A4DE3C8A8043C9CEA8F350D9 - -Len = 426 -Msg = AD7CF7E15D97E0AEE75B907BCB48C30ADA54CC6C9F1B3371C7AFC74E176E6A07B1D8624B135102E395AD98A31921EA81F121CBC85E80 -MD = C17F9A55964B9795CFDD1712826DFFB561110B712B8B16CCB131B03F5BEC5AB5097BB0C4EC89CC13CD2ACE0872F0151CB5DA2A96A6444295D331067A797DE835 - -Len = 427 -Msg = A9154D621C9B4BFE856394C8C47D5204EF218C54668713568F5C30BFA5980B24B63B4759EF05C16F5E4948BF91BEA979FF990A9EB520 -MD = 66598C9EC2A471EDA93E1E37D2323E9EAC8C8E818D007E21798556EB298D7658527410D46233FB0F18ACDDE3AE96F23DB077DCE3E930B7AA3AFB6E1E8BF9DF8E - -Len = 428 -Msg = C020B6643B128F27BF4E654D131E6C41669FD6F5941BBE0102053FB0C7CE405574D44AFA98D9E9A41EEDC1B6E21FECFDBCAF89EE50F0 -MD = 380DCD03400A3C3A9F88D8C1465726560622330BFC4E399279C38FC9C55F45007091BCFC72A99BF84D3A0F668FC2FC4933C6702CEC5C1844B0F70866BE268C13 - -Len = 429 -Msg = 3D26CDFCE6E89B4D1A4DB097BFFA4FE505DCB18D0C191836F3978CE1685F7E7FC59F89D71FA443F0EB5A29092628B5ED778EA9D8E280 -MD = 71FBCDA9CA1FFD05B205216D175A3438E5C1BDD681FEC34291DF449AD5F0F92E6159755DE71558A04CDFB19F08BD53732B0F7370A9192899BCC645182FE57166 - -Len = 430 -Msg = 0BB08EA725002AE244064B3560D147027CED860FC32F289E08F5BB3E33DF133D2AD6962B8DB6BE7E050511D0743B66B5D2238B66DA6C -MD = D2470578ED4CC2A0FAF665983E56004972422E46F2DF703745A99514E2D186B7D0A123DA4F5DDAB834BB521368E58D1722D81F9A0E3E1598BF1D903535453632 - -Len = 431 -Msg = 49FF7A3964CBB260C1A624EA3423BE62256253D1128B81E75C3E277B419C0FEDDE0CD4DBB5DF0DBAD5F16ADAFCFE09F2E642F5117DFC -MD = FDA76A10EA3B764BE6B578DCDCEF618235DC4A9C28829579CA4069B9BF9CEAAD49188EF67E3ECA994158F6CAC7E00CD2826982CA6C09632B44D96D9D3E0FADC1 - -Len = 432 -Msg = 0DC45181337CA32A8222FE7A3BF42FC9F89744259CFF653504D6051FE84B1A7FFD20CB47D4696CE212A686BB9BE9A8AB1C697B6D6A33 -MD = 97BF33A5254C8ACA27486428440B1034AAAFAC8B498ECB830C2581DC68518079B65FB0C595997693DDB8D68D9564EA98DC43CD287E2E018DB7DFAAAA205C547A - -Len = 433 -Msg = C9E5FE547A3E2A4F070F2EDF8915A1AE232DB0A6974D8BDF88D15C7FC828AB82E919B061312404128457AA460B055330E74A72250B4180 -MD = 2E71E320CD3DD136AB2C021BE58860B61D89B5FBB2C12102D985C0BF390EAE214BFEEDC414E4E8E6DC2F90AA0A4F1C855A3BCEB4BEAFE6A38B4641EEC0E75614 - -Len = 434 -Msg = ECDFA7350DD9A1C79FC41FAD4276264510A4F53748BF58BD655D0E041D68D81A839D9D9126753759FB2C2EC92DC690759DB8972EB2EFC0 -MD = 2BE177C76A51B804813475C2FD9ECC89AA949F4107BE32FF7F822534729115B8877C850CD34B63FC97E6124B5F18D9BDCCBE2027D50E1508B1E32A2A9C381E29 - -Len = 435 -Msg = 60E9D7F0EAD1F704D626ADD35B269BC6BA9FA723D21D3FFD07BFF7BC2A7F253427C669468413D50DE4E087E6DFB40D3394180F4D885AC0 -MD = 939C6892AD3AE60ECE67349B97BDA6D868D930F012989E8AE202E6E533A827A54D1C74830600F6998A782DF145E5B301F6C8C56B00F99DAA7FB0667557C07C5A - -Len = 436 -Msg = 50D69429B80F785AFD10DC3C47AFCA11D66BA16F591AF56DBF5D283C427FAE7544D06A88F4F2DDC020A90E39231019364963C9D0271680 -MD = 779D8CA850FF885BFDB8AEDC8D9B4BD073F6D9D25B142A9A59527679ED366DCC31777DA62A88B22129B6B4017D176946F012CC423CBE1C1E2AC0FAB1ABC549C7 - -Len = 437 -Msg = E3D2906D5DCDEC5910F6C1B43BA414C0F6D8FFD992C2CF76B082AF565DEF8C00348739AEABE24879B1E49C50ED9CC281E25E47E0ED8460 -MD = D93BAF08A83BB4CA804006E33F7D9FE215AB3409C4A3ED8173AABAE8ACEFFF6A06D2581C0BD58A34B02F31CC65457CF3025CC8C63355DFB78B90A290F6C75EB3 - -Len = 438 -Msg = 352FC252E3EEE275D29AF0C2F5803C762259249E8BCBF9F293BFEAD094328454275D817F98F302F3E899A406C8D39211D0BFB7F36B80E0 -MD = 28EC8A2419309977AE80E672D58DAF77889A4FCBB02BE81D8A37354F59A3B7B6451581F7706027218F3EE5C56B963C0046D5B181D3F0111FE7D70CEAD4E929CD - -Len = 439 -Msg = 6AFF359906DD15357A5262CEB17DD58FF51B74DCF55FF951260CF6A419282752E13B7CA0798612E3E1094202603A2E331792350FD4A10E -MD = 6BC5DE098B973E7238A0F9924F0C3E510699D2101F3C4B2A36A55D79DDDBE44048E41A6C46F18FEBC6736ADA567DFB9AF7A9CC9EE40696F657A32BCC2AF67E51 - -Len = 440 -Msg = DE286BA4206E8B005714F80FB1CDFAEBDE91D29F84603E4A3EBC04686F99A46C9E880B96C574825582E8812A26E5A857FFC6579F63742F -MD = C05FD9C3FA73F80956FF1C3B89160EB520CA640E201B3FE5E6E296220E81B59D530476010D3784CA08692B8C716A3BE982B37450A96D30A401D3BA3C390D9DE3 - -Len = 441 -Msg = 5C0DAFD24AC5712E9772017732C245E30BA569E247F82AFE4D05305375141482A8778D8C5F0D6C5B27BAB687568C04CC1D883466549CEB00 -MD = 8DBEF974AFC854698319D094F75B69A489EE8127699462752E2C8940618BC63461BBF5530BF0CD0A90132FE66224E476FF38A4235F013AB91AC6A90A27556DA5 - -Len = 442 -Msg = 70CB8949582A95F73E1C00831431E1A7AA4372FDAA3DE4DD66B554539E8003DC6638A292E3C07BC09AD007590670D9DB9995F76CC6044100 -MD = E62838A8A9DA8B42D9AE0FC9ACBF02BF9DDCA5DAAD8A98B63023277E97CED57CC9DAD806E5AE77EC50482125A76A8163F04DDEB5E54B460D629208CCB643F10C - -Len = 443 -Msg = F1724864E3A8C9EF8F9FFF07224B295ACD1DF21D5CD318F0C8484642BECB45DC9FAE4E18459451DBE7C94524165BB323A363AEB34F12AE00 -MD = 9C501506FA9CE9383469CA0524FF01E5A20165D446DAA397C3F26A8A5A778A7EF3D63AE651E2BA7C0F24B850869B39C7F36EC9A4C25D726E2A66BFE4182BE769 - -Len = 444 -Msg = A5E2F570FF98F95601BCB7EBB0CE9D22FD5A9A0727F10594DAAE511395FE8D48472159B20EA94B81414CA50363A716EE0130881FA81DBC70 -MD = 4AE79B9BF2F9E38FCFA5EB93DDED264EC51734A6CDED2040C9030E474C72C0C9D7A9335CCD8211D1547AEBCB780646B0C579D96188CBBE4C1E79641799018C7A - -Len = 445 -Msg = 59C8DFC6BFFF8D1FC4ED4B362A0C73D1E2C47CE11FF4CFC3FAF74B69BDE0D70A7D44C91F21324E93A0562DD088351AF94B97C4CAD3D38D10 -MD = 1D9D83E601DB3322772D282D5796B10BB89B86F3CE0DF7F3AFC4C7D5C3CD672C683687A0932C5FF673B2E850E18E8452E343C51B8DD12C6E0CA501375D85AE1D - -Len = 446 -Msg = 456D25084E73FD7F8B4E9E0C5A28A3DF6BF72A95CFF996645C0D6989B7C36DAA989F6D570578838D276366101DECE16C188E2AB0D1CBB020 -MD = 5E8342C95A030BCD7B2FC538C93A0D6952F86908C0802DB734137976E31600C4C78E0DD1B6D9763B01D1494DE4FBE619772784052EFB6B36D574C0428E51F872 - -Len = 447 -Msg = F6203A102927E1F775EE10391B2370C4133EA999EF76E822FB47B2C47372FC5A0B2F61C467FDA567621DE7FCD29559C8B479AFFEC131572A -MD = EBAE7542D041EA474F44E65B59106D6F6055AC93185ED24D67CB2822B256CA52FA13DEC67DC2079855C12FB7B0FC8E73E0601E8C004FEBDCE0DFF26F0D8C7635 - -Len = 448 -Msg = EEBCC18057252CBF3F9C070F1A73213356D5D4BC19AC2A411EC8CDEEE7A571E2E20EAF61FD0C33A0FFEB297DDB77A97F0A415347DB66BCAF -MD = B980E657C13726DBADB6570EA3A9E633869CADB798EB35C482697A04CB712F1C1E8C5D0BD67E43E52DA294E82D5E80A695A74A3D27C0C672ADCFE2C928859A6D - -Len = 449 -Msg = 1251A40134EAF29B0FCBBA4E9712AD63E95DF1473C561127B1BE2B64375804F7D54C442B0C89100E66BCFEB906013437E7EC5885C197756580 -MD = 1848786E05A7BDFD98FB782BF61918C106228C6DA14954F87B16243A12A1C9AA9D4403AE72E9C6BB8090CFA4F50F64CC786E0DE09D4D30AA82ACA813C52FF86B - -Len = 450 -Msg = 71DC616856F90F79E04F31F16DFFAAE002EDC5725CA3FA59D2A468F69587D80CD90D1B488F86F481B4A00B447B26AD425E7AC7AD4D09774740 -MD = F12D77B34147C669367BC44D75F45388C6631E8C0566E8732B35F7A810267F7CA12B98CFB066EC09957DA731E43D465866BC33AFF50ECD664483194720384983 - -Len = 451 -Msg = 57AE1BF18725675EE13EC67FA5C4B6EC1911CE82F73C00F4BAD877D778EF22FE6EA93224262015A5DFCACAE3087807FF8895B72B5C530A3640 -MD = 61AC765F1571196605FD4E0045B02DE5E7EA8E8D94C3FB8D0C227734AE78D12C9C3D3C377992C4B361A3F5FCAA15AD5F2A987319D6E76A9705FF59A5D87E95F0 - -Len = 452 -Msg = 841AAE4092D3C3ECEAB075CB9EE06EA07AEEADD236767B1595FC7510888A87C4747C3CF4AC68E5093E069423CF98B767EA4098886E1CD64D80 -MD = 15BC6253D47E1C8C36457AB30E61ADBBD84A786C17FB1E55946BA197751A451F9F43C26D15FE4B5B449B67D1720FE4A3197E8FA8F493BFE935A17E995F94C127 - -Len = 453 -Msg = 5D6A069F7980F35DB923E7D3DE2835F8878630BBC8751670EBA733FBBF614EBE3E0B03E860334E56499E43BEF8D6AC1C6C9C1588B1A56FAF00 -MD = 19C4B2FDB0EA90202C64A438C65755BA08B9AA0EE324C05C7A9608CB20DBA3FFD2505D7C81302380FB2BA5F7F5BF778800A65D6AF596DBB8F80839BDF223EB35 - -Len = 454 -Msg = D2BC7F70B8ED9853C98C2E3017F97E8B1643C10959227D3D0D334A938F12C53EB3C1371608732A50CD5614768F804B98C9E587858A469B7DF8 -MD = 3E32F60971BF08DA7CC569C4C60C51395A522583367E6BEB07A0BC10524CE1E0615B57028317ED7803026CB10B800BF4DE0988D5188F1BADCF28990E5AD30E90 - -Len = 455 -Msg = 55B1386C80FBECC7B54207EEAEF70069B1836378558309973FE2836322BEFD420AAAD73E399D1BCA063A590C3A82DF8708B1457B61A2C80352 -MD = F89F2ED174CD915C8595F5A0F7EB5B6DA1F7FFB8FA3E63096154D51397E291DBCF5978D76AB6497B989DE2229B80DA8A1017BAC666208F754281C98FC33EF0F9 - -Len = 456 -Msg = 416B5CDC9FE951BD361BD7ABFC120A5054758EBA88FDD68FD84E39D3B09AC25497D36B43CBE7B85A6A3CEBDA8DB4E5549C3EE51BB6FCB6AC1E -MD = 6ADFC561835FDDD70A9FEB57C513165D12AEB3283F0DD7774DD58852DA9E969ABDAF20DD44856FA60E11BDFA2DBB7E3347669FFF7A57A8D8D37431C2B309972D - -Len = 457 -Msg = 9F15C32E77E8DDCDF9576D2A17AAFADB77A66A35B0CB244C6F6079A3F033B2B42AE723DA59302984BBCC7D25EC57714F79C7316C81762EE98F00 -MD = ADE020D18463860A7D55F3FC1449EBAD1C93173025E104D98FD45EC6AFD8EBC2352C1CD2DB304B8B3A5D86E2472E954E54AEDB20091A4BE65CF1E03157CC3CCE - -Len = 458 -Msg = 0C7D0C80FC9D6F36EA9F87C248D503A29761221BB58AF67327DC82CDB25883B5251D3F7F148F5EE32EC47AC70498CA7C6A2EE82B18918B381E00 -MD = F0E66EF9D0190685F52CB3D099F21772F8DAC57F5662AE139E50BB36DB7F1C7A10639D741C4EA1FDE87D371FDFAC4B985F204F89F44F308E8D49DE7B82CB7B4E - -Len = 459 -Msg = 1A057422EDB7E08FCD04AD53DFD7A8C123647A1032F5025DBC7C22916250FCACDF1B2B5DD0CE295EB5F424F541FF55BF6A8D777A571C0B508120 -MD = 95EFF776B2F06919CFD6A86D1845E7C9B1088471757A2C6D30705E8DDB1A46ABBDD9B7C7E616DB15C3F19AE3E9A3852EB6B7645564C86A02C51C650140F4B43B - -Len = 460 -Msg = AC3EACDE274757E1AD019FC3B68250DFB627414EEDE1FEB4A4A313F50BCF18F84EE1466DE13E5AA62E72D8C28E5365873F36C3DF581A7BBACAE0 -MD = 46C95D8B247E204504CE8B29F85E9B7732766CAFEFB1AB302B023CE5B4F1689B50ED9E3B45BA5A5069ABAD82D563140874D245A734176A22EDBFE5811AA3B6B4 - -Len = 461 -Msg = FF8748F7DD2AB2ECDC95EDA2E0189D55F012748DD9EB63B3E77802E215431A96D5F59F3A4C9E70F023C2F91C218E308EC8DAF7463082C15F7080 -MD = 47370539E4D9854EE2A283CFA68C7C5D1ABDD88F7AD2126D2A4B9D45DEC287FC08539D97B01A708447881E200838880435196511EB7480CADC4BD8D6DC752692 - -Len = 462 -Msg = DAAFF074211D1E547725C49C5709F0FC904D8944864B0350A1453DE2E56F188DD61534C4FAA59384436F6A6CD9702E1931E675DDB3BD6977B2F0 -MD = 42449F20CB7A8558D934E644904AB6DF08C5DA7D52651BF40BDDB28C4563D243C5FDD810B9E38BC047F0B69894C5D07E8D5724521D4133347FFE83F581FFD869 - -Len = 463 -Msg = D191A654280C7618570DE0EC2E3BC1578E9EC81AC48022FFEE1224AECF2A67E572DF39C343E7B1B06E56417FE83233FC6CD40ABF2602BE6FF640 -MD = D8369A36FA5786FC0103463CA06C313142044812F8787767C204ACAC524DB7CFB23FFF1C87EEB23C18A05F6C398912C45913077D83F52D183B82A9759B2E3A2F - -Len = 464 -Msg = 5C5FAF66F32E0F8311C32E8DA8284A4ED60891A5A7E50FB2956B3CBAA79FC66CA376460E100415401FC2B8518C64502F187EA14BFC9503759705 -MD = 0E7459BDC857B949CC59A9C649B9625268BF9A11EA81EEEFA4ECDD410E2F6FD2C78289C01365F99034FF8FA8C115DDCEBEFA26A8D6468F5030E641745950061E - -Len = 465 -Msg = 84D9ADC0C9097A66ECBA5BAC63BA2EAD6CC52D95BE23FAD7088234D87A3B6B6B956DCAAACCE94B98C9314C47F41BFB20D601B5F20CCEB86C4A3F00 -MD = 6DE2D8187E0B8CAE096811D1C23E85BB4BCBAAB1E7AA46099794AF62DE0B95092241BDD2535AF06FD8DB22F1A0FA0E0FC69B0B38C0B2D625290C9AF72B54098E - -Len = 466 -Msg = 2B90FDCE3B7D08812A3EE16E47ED849B134FB644A09ED63B274B09F38EFE46E5CB6C1E6F3F4C48CB23F8DF74D81E594C0C16100E1D446693AB9A00 -MD = 636607BA06CDE5E8C4F5B165C4E0834BFC1AFFA1AC072DF5E8ADE1124C68FE3929CB1036DDDDC9F4F6E050AA83AA49432C8FD59293C89B926980646A0301751B - -Len = 467 -Msg = 883B4DDC623CBEE9365494693358E8DCF0E253B345C12A1270A4937730A04417B66D6E2A3A712560C6A07859EF56EEA6BE39CE1FAA2EA283FC8AE0 -MD = 9C276959FCC6171B614E462913A006E7987C33EA8BCDBFA4DEC8864BE4269194F7483244AF0B4835C0815938915CD90A44A9366324E443128A0DC6333AFFC9CF - -Len = 468 -Msg = E679CBB7F00A3902E805D1FE5DD015E7C4692ACD0BDC6BCE9B6C0CC31195E6D43DF50586F030691180543A54836687398FC51DFA57562980755140 -MD = C83EE4055CB56B8DDAA47B61E1946655AC9D32630960D4D59CE69DDA8F2E0D74411B5E52DE183A5DFC398990A274687C470E79F710388476EBF0DE2629A6D07C - -Len = 469 -Msg = 9E86F90FB087F12F7F9B7C6F526B5352EC2E6BA8A1E27202323BFACCD1A85D0DD6456AF7EB02DC01F9AC7800BAE5A55A011AC869EE8E9881714F80 -MD = 65F5D3A926FB51449F93C28E3C15A94128E0DFE51D816E1E5655FF41389A0BDAD85B1C8F3D1AFBE1B790614890CF0A717AAAF4B9DA4753B417A6962632492EA0 - -Len = 470 -Msg = F24E07FEC11D49BE67326349510A57AB414774A1C56111B46D988B93AA29BB35E1C1BD47E80F8621C06E8A78D590B30181430BED12B27702168A24 -MD = 2F1431AF0E0A9CE1D5A81B8DF1AC065958EE0D2C523E18E84DB014019D4CA4A415E8DBF881E5C997987A70E8C99A2E74A93604BB49F3AB145BF364436E0E8C23 - -Len = 471 -Msg = 5E391FC9253D20EE80CDEC7B9259C01CE479BB4C97A76CABF722B6DB2F105EEAB8B91C5A4CEEBD05C39138A0E9398290CF6C9C13C62AF335CB0A60 -MD = CB1ED3F21FBB1C7AED7CA54EB27D248CEFA9670E02B57B6366417D7CF152F73D063EA49AA74C23CACF4E4330EEF349FB89DA6E16A3A75E8E4F8FA068E2C9829B - -Len = 472 -Msg = 7167E1E02BE1A7CA69D788666F823AE4EEF39271F3C26A5CF7CEE05BCA83161066DC2E217B330DF821103799DF6D74810EED363ADC4AB99F36046A -MD = 2A8CE9DF40879B24DADF61C9131F694E5531ADE6B7AB071CA10ABDD3C2E4A22C868A52986A329F880137EE76109770927D2658E63EB486D880290AC0782CF5BF - -Len = 473 -Msg = 031321978E471EAB14C2EE6E3EACCF57B203A9662C2343CD764A41FFDAAB43D5830D29A15E568767627A116D5B8F47D2363959DC6BA7B0BFF674C600 -MD = 36275BEC1CAB19328E57C7FC9DE16AB36936D04B64443736011ED65ED6B7270CFB7A27D16E72C9311BB7F2857724C348FABFD64AD20B39DE436862847A1C018E - -Len = 474 -Msg = 8A07ADE176B3DA0C6CD3C8B40A3CC8C6F0C214C660B885A7486B4E447677FBE0C62284F00A816E3B083D1A4F614C44A5F04E98255B5BA15849767D40 -MD = 19E953E2B0D1449FD9C462F215CE35885E60CA22EF5FBA31780E17D1034227A707E8E75DA8522F8874BE81FBE8EE50DC1892A63C216B50E2438E7AA1DB5DE429 - -Len = 475 -Msg = 6C993A10F1EAC2D1BD759277077D7E3337822C428FC92EDFF444C58F106617BE61D23395F77AD6D0C43659CB29578E40BC0CCE1292C637236215BDA0 -MD = 1FDE3E347C67E62212B0518E0B8BF05EE76B6F26E8666E280DD3E6D7D09C0ED5DBE14E305BC8B71C65BF05D4FF53FDB6A1F1426E4DFC18381FBC8191AEE67A69 - -Len = 476 -Msg = BDB3EBAD9FFAFE0EE4E4AC7FDF0A970BE38E8A915684EA15628EF03DAD5454FC353D9EB27A93C428C7A7ACDAC6A4C51E7C35D845782BF6B9AA74B3C0 -MD = D1222A87505A62116120D3ABD4EBD930A39B37707BE05505CB7FA502DEDDC955BA041BB2830A0E6B1991468B758C1DC1775EF005074BF75422AC1D4658CF2120 - -Len = 477 -Msg = 04C9968BDC58062E20D602B6BBA6596280EA44E4DFB4F11842F847436C68722B8CF82F9AD7A474B1257A73D3D3CF8CC7CCBDAB52DBF2C43D16A82038 -MD = 1498E928008A9B2F7D7B058F71EF93103253469C429C1D05B0FD0EE5AC01A6D44DC0CC69F2CCFB0C9B95C10E536FBF5D2FD374A6646DEBF4520EF1B79517F078 - -Len = 478 -Msg = 33FB9B9C1403340C038504CE1BA613725788CB765CE9D1A359F15BCDD2BB888A8D0FA370312048601E29536297738485160E1B0F3FEF938A285A2A74 -MD = 752E6DE2EC6C69516627F5E550323D02AB6D0223847563900AE265E445A0590A445E424F5616732B5B86DC8D9A76BC220F60D774C8F2D4CBE2CF3AB2FBB9224D - -Len = 479 -Msg = A5B8774B9D957DB574F9D6BCD8B888E70E746F3EB240DFC9507B3983B8F2940B6625E36BEC3100C90FDB40182BEC5DD007276FD1281AB704792F8E16 -MD = 5C5FE10676C524A9506F6A8B468E64B117EBDFEF7096700D3DACEE4B7591F87233E0A5D457E964F7D83A092B29D6B7351F530EA53546D409EC6E34C567365AFA - -Len = 480 -Msg = 2FDA311DBBA27321C5329510FAE6948F03210B76D43E7448D1689A063877B6D14C4F6D0EAA96C150051371F7DD8A4119F7DA5C483CC3E6723C01FB7D -MD = A83CE5A6A58376D57DB4C58DA1B46C131FF1BF8FF2DE5E8617FB37E5098398EDB53F9888B8752A8AFF19178F2F6BD7A33FD36C59E4A631906280907FC1C5AB07 - -Len = 481 -Msg = 72B72F086513EABF4CC313157CF04745B40E5A77A04206103005FC3EB7A77D1EAF81B6F9020A1BE6BF7AD8C0C2011D8AA8F18EFC0620B893B50EA03000 -MD = 9A14C052A3F25B00F10D90535C4BD528C6681AB1EC28DB5C80325D15AC508625A33E609299399CF09E6EC70DF63E567E467C74445BC02C0D9BCFD828A9B0A1A4 - -Len = 482 -Msg = 7FD02685386254BBDF27B52E5CAE59FC7BAEE3AFD2ECA52B912738354245804D87D0303B6060D076F2F12DE3FD19F475AEC0FD410CC14794731806F640 -MD = D93EA4A0BBC429DC8B72FEC5D0DC9C643A2BF2EA4C129E777B4EA761F0586274E13C5767E4A1BBD152090C8D34A9BEF39DFC4CB1FB5CCF2A87E3C6F8E65301E8 - -Len = 483 -Msg = 02DAA8B12F35FDAFE5AB24B236E00245256500D472EFF4904E954DD4397B9F49DC142DCCBB1C2B3B4D3AFCA3FCEC4EFAF9854B3054901A53A180168320 -MD = FE816162A0F0736AE8DF87AF20A3AC7DC2F545568EC0852476124220CE14E183BD70D23404E25F8062504744951334AEAE6ABCD1677410FBD8F6B666697BEABB - -Len = 484 -Msg = 260632DAC6BD8BC667679202D38C471383227D0715AFFABC37B6593544B3799C257DD168BE9B39576FCC583FFB5012629E60C44A51FD67BD432047E2E0 -MD = 956A50B248B0E6177212B993D9666E5B6AFC13F5099EAA6F9B091D891D2727F0BE5FFB7139D0DC06F0C769CA95A8905D6671DA5D4FDB351EDEDDBCD0BF3D4C0A - -Len = 485 -Msg = E61BF690723D45257C7B2004E8CD05D876C8D792D94680D95CA2CD869FFFFF5ACF9D0B162455AFB6F19B8C60C97B2D8CEFD4F74AAC7034204DFDD7FA68 -MD = C5991F53C422CB2F6D1EF8F9D2F77565790C7D9AECF0B9F9FDD3A0E8838FC5706DC69FD19F06C9701DA1EC306C2622E49F8E6F4BABA58DCECA8592514EA0DCBD - -Len = 486 -Msg = CF719DD9A1256446A6220A91F975E26934E33C1CEBF2D5DFD7FCED270B7073D3E96F2215BCF2844E4A25FD506567BABF039BA9F622F935410ED3F6BD58 -MD = 11A0E32C4991C1D5D74CD0F702B6C56A5318DC18F11CC34FCE6B29EDD487E23500BF19A26A872D9F7269BC20815089FD60133569653C1B36AA33F95C5EF12A3C - -Len = 487 -Msg = A6E86899DDE05DF1C81826047106FC6C258A4B6E347411CB66D28CA203DADC465548D1986C17E548465646CB95801A2EF4E6322EC13320FA551E2651C8 -MD = A38DEA8E900898D75FA3045CAA62B9A28FCF705894C716C358E71E4DF5DFF08984D65C13AD126562B2E12FC1609B65C112E9FB9E6D656246605C6B8000127BEA - -Len = 488 -Msg = 95D1474A5AAB5D2422ACA6E481187833A6212BD2D0F91451A67DD786DFC91DFED51B35F47E1DEB8A8AB4B9CB67B70179CC26F553AE7B569969CE151B8D -MD = 9EBFCEA2DB1676EEE6B103119543C6049DEBD8FB8F1E01A5AB5B348E2919E14C8CFE8E542F2AB747B0FD4A4C3EEE4019BB046E24BFE2091FB9C65DCA527B71AD - -Len = 489 -Msg = 1090FD6C2652EFB04DAD880724CB7414743FCFB4F93CF8312CB0B463CC27FE18BE9F745C499925F8FB4C43C11BE87D17EBA1359FD2F9E5CC2C40A84E8A80 -MD = EF05BB4AE4844C0C928168E9F10B4F31F811A99583D6619D3AD5C3601969A267EDF968D1637DBEF47D907258A66241AD5D8E673ECEF9FE0712A5741C53655895 - -Len = 490 -Msg = 723BB81B01FAB9DAAF8F48B75557DBAA5103773C0DB24168BFA06886E6AFAC0EAF5A943669EFE84B0E3FF2BA6B681C4A16626D3A3DA58BF6D4781203E5C0 -MD = AEE8A5A84B0C208916B658C00DDD72265D0C3655A73351076E5BCE7A4102C8A3D65E28ADB5D11C110585B91FA7C70B18C22844468BC31D4C7CAED9401AA336D9 - -Len = 491 -Msg = 6091F9DFFCBD33C3852046578766797323339BEC2414C7DD044D60542C38DA9A5A6F8B385BB1BBCE2354CE744CED5FD673E7C9A4F50E6298994328A24CC0 -MD = 25EBB006D0A87533E860F2D7E8430A83EB21200201087F2E130F4D582FCD4489C269DE21C0FC1D8B11F5F07EABD90F93A34FED4352828510484B6685966F79B7 - -Len = 492 -Msg = F406EC84ABE14A45CA8F161EBE319125E83A19E4452AFD47DB3BE542501A405EA7DA19C317006C1FF9FF7E305C836881638A56C0427181809139C1D21900 -MD = 43D0CD96D96A5537CD652A73F5800B549E90219ACA177DBD1F18EB3C79D0225C7E0564C4472DD78CCF91BDF6C332C806AEAF670B4F7932E1D28467C7894010E1 - -Len = 493 -Msg = 1F3DDCAD0F956BA1A34322731FFB1E58C46C66A0E9E5D60CC08E62FBEB55E63061894C13B334D2FC0B9B8C0293228F2A4BE36FA91B96054756264697EC28 -MD = 5E4AECB9580FE9180B62FC42AF6F79B97B6C05AFF6C1E22062F4FE3AFC50E74B7FA406F4ECBD770174A28060F6D28FC6E182140AD801053A32BF3FE8EAAEE0FC - -Len = 494 -Msg = 3AFC3DBCB3FD9F4ED17D707AB37EE10590A8F3CE8F49E3C5A99077AA2BAD362F81D715B7132E62922A629FDD5A746C36FA97A7218146B55D559C8330497C -MD = BABCB989CC04F927EAAB2D8662B337DF8C2CFB23F89F5C6E6A53AC5D6FAB34FAFB771A77EEAC5B6AABF9CF8F028FAD0FCE7B37EB4370E272CA2B9BFB309D6141 - -Len = 495 -Msg = E4D811304A25E7AD7773FCAC8F028E60E4BAE3867EA81FD4B99FA53FC7991F34937D7278C146865F5BA10352CBF0FB8ACE858B42B0A7EFBAC0F62C6106F6 -MD = 518B9A24559C305D2BCEEB3EE8A13EF8DBDCAFBF4B19AFDC56958C00BA9E9DA68A7D09446E707DFD0FDA5FDF0F1199EC52FD1156235B817F4EA75459DA6668DC - -Len = 496 -Msg = C71BD7941F41DF044A2927A8FF55B4B467C33D089F0988AA253D294ADDBDB32530C0D4208B10D9959823F0C0F0734684006DF79F7099870F6BF53211A88D -MD = 97B08BE7653E9DF1B5AFA459EA750A3AC9BF3577BCC7E5344FC861184880926DEF354E4C65B20EC66C47B7AFFD3E7493958BAB0A90724D3D8DD9E1D561FA60C2 - -Len = 497 -Msg = 061AE36ACF15BF6AAAE8A35A8196E13337FAAA50340FD70FF9F0CD02E53C3724E84C16EAFFFBC09D6EE55F3B344E6E37ACACF3B687B0F44CB06427A23B5400 -MD = 14E1CF7DA296ACA44E0EB2FAE640A931F5E561FA2518286966239AA3FCD52C561B4C23AEFB1EAC65F7CBD983E093B4C0F06AF4C152A1ADE782867BFCBC39ADA6 - -Len = 498 -Msg = 98B5605377B6A50833F0561B7AED5FEADB5411A7851EBFC8F9156C82714F6A6A07ECF372E4591F91EA3F25AADFD47A2220B55EE2838BA02ED8ECFAF5FA8280 -MD = BA628E7A1D23850F996A9BA5792D1B734BFBC164C35B86CBD749E72337A8A08F2B90E5A4FD19DAD3FF6B89FAF24B141FE96F0811018EC100E8DC39C8650E6CE4 - -Len = 499 -Msg = F4CC640571758CB1BB7D83B8D4FDC9BC8AE34EDDE4867D3ED464593F939C646E9725553DFC9346CE8A966225A716FE520EDCCB6F7CC064930E0A8D89DA76E0 -MD = C60489C71A4CA27532910D5F43194EC9481BB41E1B8830E370C20E094AE0316C798B95F4DFF370BD002D4295F7E8DECB904C11330DA2578E55375DD792BB4C0F - -Len = 500 -Msg = 67674ED72E45F150D25F661EBB7F60F21A6AB07EC53EEAE794906E0137959B034F495A1DF0E71D9934C28944C4693AD7BACFA66236157E37746A6D165BCF70 -MD = 2C660DC46D91F86771AA9AF3D1CD1FAC7FB1AE3A850053DD8E50576E76DC3F16C1FCC85482E66F2F13EDA54F69417933EEB62C07EDEEFC63E1671F78C4D8C80E - -Len = 501 -Msg = 19513D84D7B9FC5D5C1C6E57404888C6D201B6D6D054D346EE000933FA7467E0E4A6AF3A065498B4055EA1AFFC9EF805C4D7161C58A9EADD68049B9FCDAC88 -MD = 39AFD1BAB914451E088C14CB55A55B1341890D87C45A4C16753DF96B33BA46BF289E0581F18632CBC52FA0820D6BCB100C2F684DF6324459C1F76506DBFAF64B - -Len = 502 -Msg = A8D213B9586C9E81AF32CCB8E70E1E76FCE9EBC2FACF250F4DD0D826912932A3045B0BE6DA7839361FBDD8746B4855D08E99DD94B7196A77538269EC06E370 -MD = AD9496744C54D6C9874FF0A0F900806FF095505A17974A8507A45D535C8721009C9484F4868FD849B4C4FCBB7D6D6AB0765F74B2E2C842BB8D4A2061E7849382 - -Len = 503 -Msg = A1D82877A8B3C98D68FD9937CFDA320688798C2BFBAB2D55C078D853E3052D17F349BCE2F875756B442D26B54C13E119C0FB96C5DEA16A05208A53FCBFF950 -MD = 471E4F9D48AACC93A2F45616B4484165C49EB010CABFAB8FFAB383C4271D47E3D42E46CCF994C9853925701609B78915BA78A9C86476FACAD382775596D8502F - -Len = 504 -Msg = F57C64006D9EA761892E145C99DF1B24640883DA79D9ED5262859DCDA8C3C32E05B03D984F1AB4A230242AB6B78D368DC5AAA1E6D3498D53371E84B0C1D4BA -MD = EF8AAF08159BBCB88EFAC49A33A5248B7ED0544960D8DD54D748A91C0D84C69F308BB54CB5EC97D3F81CDF76E68E0320815B93F2A00942F2168CBC18E8377708 - -Len = 505 -Msg = 8473DC5382DE32957E3A15CA3D791C67D20CF9EFBE3E46407DCA5D02635AC86D2E0B22C76D7D080D362E82758914CC0AE2B89BD35F71D84492D9430742789C80 -MD = AAA450FA7614A21DE6BB637DA6CB2482C4B7309AAAFF2A03F98893E6BBADF7999B2E7AC76C4B4363E0EE3A0E2C3A944BFFA8C8D859936B682EC911D4A4F5DB42 - -Len = 506 -Msg = B9E3E2755ED1215381B24557EE14F8CD2687A071AEB3C74F421CFEA3CFF8A6EA0D4BDA2AD4BD8243CBA72B481CBD526E1EFA1D9FD432B987E81265824429BAC0 -MD = E029B266051F4641FF8D6D8F4775F7863586CA2FF09A2CE5E0B58D46B79B7B0750DFB0924161E3111F984B8C0E0E92DDCA83ED6151B57DAF5BCB9CEC180CE788 - -Len = 507 -Msg = E8332535E9A2052467A10205C87000BFC6A68D73962E69E4E56F10BC79C633C52F4D0074D6077595B660072E10740DFA66BC1320469A3196E021E1327CC03AE0 -MD = 0213E136E309F3891365AA71E8DF7115B799F66CAE9CD8D90CC170BA4A5E00751DA41D942E302787D40F3556DBB501D7D320602FB98F148BA7EEA677A5BE8A03 - -Len = 508 -Msg = 6B078FB58DCF9A52EB84BE6EEB7CA87DF711160DB96D1FEE6A289A299844DEADC99BA30FFDB77FFBE36B62DA8116D59512DB3813ECAE09459ECDC5599343A8A0 -MD = CAD08AE19D0B379A4DD0AFCFD439D2B44CF8ADC0DCE0262957911FD5D0AB8C4F2682947CF13C13C1D755CF61DED71CEA1FBD6267EAADA1BBF9196553564A8E83 - -Len = 509 -Msg = 80EE82DECF5B9FD94A7A8F9866ECD1925715DEF457A43DF01AA1196101A91E1706A31868305AC282FDB8018D19930A07E229BDF92835BF544C585CA957031538 -MD = 1FCB41F9F627F7CBE7C6A9684D8CA9560FF99839E3E5ABA431584091F8FCEC89F68527E18270C37EFB96D8871673CD8F2962D4EECE8DD0365E9B91AC216EBA15 - -Len = 510 -Msg = 15E0FEEB0F7010B047634E909D4646454FA1F06D7DAE63E831191CAD21604FEC81FF4FE69E540169A752C82CAC9C167E15C431F29AAF752B57DE63BEB0319580 -MD = 2468180B58E8F9DC1D2D8D7E5F56FA6D7D86ACE04C472639625EC72A6E1961FC29585B16EC0603B72052B7F1366F20FEBAD82DC23CA4F44984E4E5ABC91DCC27 - -Len = 511 -Msg = 538989EEFA891A2F2FDB195E6C75A36FFD9010B0D58419CB209EA58178284E38491A0A8549EECC27ED31C02E24DF4321DAE90E6867DA851898867D2993997300 -MD = 3387FC294B7E18A22C069986FB39D25231AAF8F72E2BDB55550AE8EECE4B3CC09724F9A682743DF2B909C9D27C8BB48DB1C64D76CF40F893C8317ADAE27868D6 - -Len = 512 -Msg = E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7 -MD = C0A4D8DCA967772DBF6E5508C913E7BEBA1B749A2B1AC963D0676E6F1DCD4EBAA3F909EF87DD849882DC8253347A5F6520B5B9F510973F443976455F923CFCB9 - -Len = 513 -Msg = 559EE28FF19F91DFB5F12A4EA7823F7C6F6AFCFE31FAEFE1DBC810521C59CCAB4CE747B6A37E3E700C4DB3B243D2210D59FA18CCF344BDA10089ECAFBD2046D700 -MD = 6065E4DF8678DDBCC525C17C4605566687E0808285AE55EFE5F6A10C6E04173B7489382FF1266E00CB5716473F5F5DC023857DE7E2563669230E7F682F8B18C0 - -Len = 514 -Msg = 3369763B630EC3D1F8DF47DA9804FB6AEE5831D5B5EED07A3B5FD8DE1B96F721825AAA698164F58CF1F3DAF8E7790947E8698E718CFE1808D571F4855BA312AC00 -MD = B8B6BAC0929F22186E2B5647A1EE723012EB8601089CDFCBAC39D0D99BCAE1071038B17CF185693D73E6068FE203182C3598D7FC7AD34626F1BE9961869522E8 - -Len = 515 -Msg = 6CB17B2EA081DCB1B2AE30BD5DD5A1A9F845DAEADA0C0F76CDB3E45DD92F1516FEB193AE54E85678C16DDC174C1546985520E54F45CB1E03AF7C27A9A89FD16340 -MD = 818BAA0D111961E9F353620E8A827F3BE537E72683800262B949F6ED6A20B38261BEE44B68266717640C4A9CFF216444B6FF3FFE19E31B7F7380DD3FA6FCE655 - -Len = 516 -Msg = 2BFCEBE7E89132B9A809595E5F224712B4DC34164B8AAB486490291353D176C2CDBC967C325887288CCB7BFEBA29A4778B13FE78C97E2707EB5501096B700DE890 -MD = AC7C59DC3F48841C7C9D06F2FE62B7299F3A0B34DDAE368E69AD64279EB880388A587DCB5BC552FFB60C117E47CE6528F3342DF18E982B19DFB15527DAF17029 - -Len = 517 -Msg = A3E70F2D2137770818805804DDDFAF6C5D758AA50101B255B9731EDCDDCE604F9A336B4ECA8370FF56B96E8C2379E26B94BE3B5D659CA4550AC2CD50F25EFA26E8 -MD = 8EE7783D6270260AAA9209F55824FA3C9075565AC2950803841BA30B6A1830F0B78A6B1A284FBA3EF898A2C5CA657177866E576239849FEA6C237CC7CE9ADC2C - -Len = 518 -Msg = 2F1F2DAADA4BEF1649F2E6DCF226CC626183FA45FB9F8D561F5E12B96A7888A16D78DD177B0CD8B153E02768AA408A1166630F450394FEBF8B76CC08F6B545B0D4 -MD = FF6D450CEF05F6B94561A636AEFC00757F0CE21D243E898407864D0543C785E7CBB98FB5F1C092E1824C8600EA8BAFD1B7EE0746809E5901927899A381B472CF - -Len = 519 -Msg = 010348951C308EA6CD8B9E0D3D70AC0469AD4B1A64B69873690041177D4F25FAD90BC94A719466079400AB2BFFE4A45AFA49DDAEE6962E3EFC615A4D6EF82C5966 -MD = CEA44C5E647072207B759E9726B31F6F247874571D692D300800FE4F9B25AEF5178AF05F743606B3E4FA77DF62F7235A972941C1C2A409D788CCF457C0F88084 - -Len = 520 -Msg = 16E8B3D8F988E9BB04DE9C96F2627811C973CE4A5296B4772CA3EEFEB80A652BDF21F50DF79F32DB23F9F73D393B2D57D9A0297F7A2F2E79CFDA39FA393DF1AC00 -MD = CF03C946EB7022F60FB5439462AC22684E47EAACBFFE19B797760B4A24A5238BE9D90E17D40EA6FE7B2885CEF7DFB8BB489401CAA94F2DD6E04592E33E76B9D1 - -Len = 521 -Msg = BE442CCD00200140AB3E88FC0398AD7DE7E4EE191A3261064D53922ED599DCC855AF4FC7C8910FF871046F486FBFA66080A8920EB2AB4AAC2AF2E28B0F7AD3499D00 -MD = 1E7832060A7CD4B8A5F84D9CC14928C8C4F8E6E4E32D69E031A08ADD7F26C764BF199741B027C5DB10E10C4174FE99156279A1B2EABA2E5FAE7D3E47DE15D36F - -Len = 522 -Msg = E3A99A6DF6DD46AC6426E66F8F3C0D5E106D2CDEEFD318D2B156D63D83F2ED89C6620A05D95EA0058F34DEB935797E33288626D18083449AA9C8A2A2AAFF573383C0 -MD = 6526E1ACA1C5369FE4655B4126AD4CEE486B0834C29C4FE3E957826D43FC21338FDC45936221D346348046C81D08069E13CD61F89BDB2B45D2BB004532A314E2 - -Len = 523 -Msg = 2F7AA4AC44632140E9225BA95CB9BB4DA26AD78222BB746D1D98D8B57FFCD00C2D5AC271487FEE2CC27A0D9C62F3B577DF3F8B88239E2BFF2934FCC2A047AEE5B9C0 -MD = 111BA28E54F67DEF0431171E8F0E6A3905278A632B5540306789F855F9361CFD5B078F21906DEBAF57DE278E185F8EFB36A6BCA2C06EAB31CBD5731D668CCA27 - -Len = 524 -Msg = A1EC099A79B5A35A4223D4C881F0CB11414BC90FD2FFB4667F1DEA99858AFD889D6D1655A19E46FD629C6AB50A7B4C41C5B4E23C6ADE46CD1312720571A268E39B60 -MD = 04573B2452EE36B7D0B6CB76E6E867678254CB69AD325BD26549C87B458A28041BECE620F6E3DD94951F28AAA7D307C9CA53E3C7CB8FAB0A6A937D0247B6BF26 - -Len = 525 -Msg = 8E5973C1A658519BFA2D40C26CC3E73314A14019F7D8A2E66C1DC510547250BFFA12299557902CA95BA718CB6ADF2ED8D290ED7F390FFE44D11AE6E3D9C62400CA60 -MD = 7B06135AE2A87253473376FB02F951EB0B91BF0A65F385F1BE19437DF336B24B4AC497EB9C42EB35F52DAF9F2948F3A82E49A945C7B32568ACC3D131574629FD - -Len = 526 -Msg = E00A470BA681EFA0F966BE976F98C42036B34A116154E4B4E10A6CD5D14F001673D95C1E0FEAE1C0A5A9F80F8A1608AC3C9A908EB4CACFF8A5C8BFDF699A4312FD24 -MD = 8007EC26050EC8775323DE084DDCB183A46B5E59A1F0B6E6464B69C5082C52F99A16B51938972EFCBBFDE7955982EB9EF35DB542B7BA43CE0683A61ADD1A63A6 - -Len = 527 -Msg = D923883110D5D4F4614C59A9189185ECCA7C5B99319022617382CE2C2C5E8699220F0B0CD0A43B474759BDF463DA0C5165D661DC838FC24D7C4341EBE9E190EC5AC6 -MD = CC069D3A5281FEEB21D6CD40F1662B8E0127A15A50A08BD3537A4F29E396DAA21EDAD1DB298DE57809A0B93D058F6A5EEE9BCEB37439C75C7E006819D9B04482 - -Len = 528 -Msg = FC424EEB27C18A11C01F39C555D8B78A805B88DBA1DC2A42ED5E2C0EC737FF68B2456D80EB85E11714FA3F8EABFB906D3C17964CB4F5E76B29C1765DB03D91BE37FC -MD = 2C35F1A57A17CB29403A2B40FC307BDE10BA8F7FEC7B94E1E42EB4EEB952AAD00EC46A26646CD51DB0C6B238189D7D470E21C29BF8710423CB5602CAB75E29E7 - -Len = 529 -Msg = CF1D9DA31D5673D04A9514C9C4940489A3A7D5F92F163B653F8325C1E63947E7E2AAFA97F18F61FDEBED5168FB69BEA9749C48DF8529A2D371FBB9B62A52D7CDC19400 -MD = FD37122A7C1A5A5D8200A5ECCF020C90838E02A40B16F545AAB5C5DB5D8FD6982222BB4C372AF3261659CA65F870072DCF9C1D62E7AA126601C0DBCA90434937 - -Len = 530 -Msg = DE0C2162926F18E7B7F04C967E4EABD01CCF78F36645A732782C638C8B67974FFB9309E12FDD140CD880360509B2112EB2C03BEC4FD03C2F658FDE72E524C861CFD400 -MD = 6585214C53352E38B91C3F496BD9BE6A2BB3FA73399DC177C7DC424CA8903B13150875E736E07FC0705D467D738E1F9A60AF515CEAD1CE8E32E11E228FFEC3D0 - -Len = 531 -Msg = A05C7165CB93CC0F09CC1D9D1118E3CAA9AEC51EBD44D10897D0771FC5302AE55176FDDEA05FB01EE4956BA342ADC7BDD6A50D74505828D87EA49EC62273E32F976CE0 -MD = 8B4CFB89571979BEDFAE3B4D1D0471617220DB97777A79EA8279354795AB16F33AF893B74BE319B5B97BD33F70EC41B89B325B57747F547EF08B59FE7F8E6F40 - -Len = 532 -Msg = 728AAD14235696C8974370D9238E80BD16A93D050C865DB08FA06C5E4D12EAF1415D59DA4F7CA16981481B10743AFDAC95BC8292CD837DE24692AB5E70488016140B30 -MD = 1B7A5960FA4140D4AB12FBFD1F5F9EC370017E4FCD59E4F25B3B3352187D05CD64A2B3DF08E025E9B7751D33B0F37CE2A442586C39C85C020120D8C63E0A7D0B - -Len = 533 -Msg = 59E0177EAB8DD3EF68BDDF879D196D651E501F878C364B363BFE1F291546F6A9286161C569C7078C97DB9BA14011807B7FCF671E692CAF601FFB4C76F8E8289A280C70 -MD = 1C42432DAF3580460BA58BA89337B9EA77D8DE533DC76656E294003FDD1D133E4C5EA60BF60E83D6E1AA95CE57202ACD41CE1F3D9ABC1F383C6B0F5F27095293 - -Len = 534 -Msg = 2557EC19609AC2F7B3F80AAFCAD251AE9406E68638C6F34753BF051A89D19CFE4B13D03B4D4966EDF8565D18EED198E295209C93308CF7E83AA41DE4A1074D19F6D8B8 -MD = 87C648406FBD93447A5C2EDEC86C0F45120B70BE98214FE82A7ECDFA9C2690984EC0133E13A71045CBF39ACDD875CB9BBEE3335D9F3CB14164AF22A11C158CEF - -Len = 535 -Msg = 0C6CAE1F4A2400C0E320993AAC01CD5007B32E10ACA1690EFE071ED9CB980DBDBA2B08B90A01026D2B6781E189B05E394AD5950152040A4E10C97BCCAC7B2C1A0A83A0 -MD = 51D3700EADB539CA50CC928A8826169D3E5EA096E8FFB92620687F322D6F903416BB1F7C10ACBA5357CA6DDC7B24D882A32A8EE7BA71D36219CC3D0C6D378EBB - -Len = 536 -Msg = ABE3472B54E72734BDBA7D9158736464251C4F21B33FBBC92D7FAC9A35C4E3322FF01D2380CBAA4EF8FB07D21A2128B7B9F5B6D9F34E13F39C7FFC2E72E47888599BA5 -MD = 505E6E607C90C57BBE7CE52BB42DF3D90BC32DE554025730C84ED0F89A0132885D7A40FADFF7A4B01DE4D29735AEFE0E0469F4F172B62A0DABA889E152308FC4 - -Len = 537 -Msg = 4470C0B4C5821BCF0B9EA25B6F7D90C9C50B063FF923CEF75638D73621B2F4F5B56D92DD720536357B000162DDF401FB5475C06C4C88F80C38EB8FDC8617F661037A3E80 -MD = EDEE9EBD576AF8891C6010A902A74E1323A2D4434E0713ED596B7376A5EBF31BE917DDB6052C3C5800895CBD193253F440D811A121AE066D6D521F15631F029D - -Len = 538 -Msg = D138F1008FDE534C233CA94A79C14FF6B3BAF4B365FD8176A0A58170314BD70AAC14E58561E8A9C47163741365A31801F5F4B6E32AA8E3F4439890CD30AA97FDB0A6CA00 -MD = 65D417D8E2311F47BB6D0081F3D2EC39594A05E43BE3D376F0432526B8F99DD78400062D3C659F8D7BA25027E56050379D255B58A9B5BF5554C28737FAF41E66 - -Len = 539 -Msg = B4578CF28E7891C9CC1CC79D0F4807DA6A5C37441ABD483B77C65E502A318A86AEA5581020CFE9E9E6A230DD0A529AE90E84086209E16779CD3DC0753713F830532C96A0 -MD = 63D4863BF03217AFAF2F73A1D3A205628FFB95CD157AAC687C2D38C14D5867BE7968454B47F0D6A1F3AE51E2AC787750ED366056E78D8B7FA676D4487DD1C912 - -Len = 540 -Msg = E33A87CDDC83DF9E9DDA70693E20C31F13F7766F63BB97547B9676D9A6BC999DCC65EF9B486CEC34002A149E840C3D87864C90AA1489CB7FA9C4167E475CBA337E485A30 -MD = 36716AE781776844B9FE6A769626D0DF71546332D0C70B4EF6D631EA14DF56BECD6993C3A8F70E25636F93AA4EEC031CD1FE83AF31939C1E8F0E1706909C237E - -Len = 541 -Msg = A1238AFE1839BBC600C8BA91C17BAE23E1146BBA2D76FDE1A9EF1FB7BDE3D2D9C7A3201E78F2800040ABF26D3606209C4D22FE53370DD03CC8B12ED95272A9A5E1557820 -MD = 07339BE836B8B1CB21B9F0673532E9A6C77E25457206ABA84A9EE794322EB15BF084661B949AB7932E53C47299EE03A851A706FFC653068848A74EEA8EA29AE9 - -Len = 542 -Msg = 5489A48EBA7457530F8A2723352515FE794031E11CF5FA57128448F9709FA27CF20E3E379FF7D5724C0A55E3550656787EA45BDF7510F5216388320112AA692A8E33E704 -MD = BE455133C493B35EA0304729045AFAAFBBA50EF3FD889D47889D1F6930A41BDA1ECA809C9FF47B15EB6A3A082847BBCE457BEBDED17B4B40F30A6CB603C86ED5 - -Len = 543 -Msg = 2EB78EF630423B07F50CD987F31EF94142905400E5259BCC235A51027B153318352CE56562436588F6E332570F96E873AB189C1DB6264E91FF991401720D25F31FD4343A -MD = 81D541B80404F9080FF1087D24BE06381F08C624CC4C17916AA5A7C302E5E4C2159A971F5FEB39EB869AAA15C17C4164E76DCD0227A5E9D1FD2DF7A0B2D0042A - -Len = 544 -Msg = 36F9F0A65F2CA498D739B944D6EFF3DA5EBBA57E7D9C41598A2B0E4380F3CF4B479EC2348D015FFE6256273511154AFCF3B4B4BF09D6C4744FDD0F62D75079D440706B05 -MD = 7BE2C95413C589EC5AD69F8D80BFE9F26540D5C1832C7A49A31A8F5655D9CE8B47D97C69CCCD693C211904142A5403DA7AD09FBDB825698FE201988FCCCD2BB2 - -Len = 545 -Msg = 7FBFB37A08D050D584F6D58862373E1627DC81CD0F650A4980A783487FF3D3ECEC71909DACA59F13A47E2F7FEEA949A5D444587B5B9B483B5E5D25776047CD00237C619380 -MD = 173B195CFE566D7CF484B043D93F272965277B5BA7FB908337EF6AF8EF1C849D0E0ED2322B30931E2E5EA8D8995751497E2910260C9567C3791E9BF3AD988CB8 - -Len = 546 -Msg = 3BD3EC7D914EC6461AAC5412025903B049E48584325F81AC822B7091E992A36B3401C7349170F7647D46715F440C5FC40608FC97D01447B65898906F5C4E61088AA7626340 -MD = 9F4904056425E67AB183B355267DB9C08088154B3F0DBEC2C26C2277F7F12B6336CD588FA09CE66E4DA5B3959C09357B51B02045A97D5A514F399C6A67B37C7F - -Len = 547 -Msg = 2516B94FED3FA3C8C8892F0EC0AA8F74D9295904810095BF4F88ABEBF93896A8F0256496182B76A9A1D37DB18D154E31D07D9A87C38712549365DCEFD2291A46520856F1A0 -MD = F8E4A0910B4E0DB8D9BA9877B0A271D8A9D0EA7C89064B56B5320C2C1BB72F03E7599497AACF1426FDC848FDCFB90C0597934284ACE51BCB90374D20B6948798 - -Len = 548 -Msg = 763AA494184999EBBC09D59178B44E0F24102A737CC43C62FED6B5F6B175531C00859FFA1AF9FF292283078A26A602BE4C43DC3F54C806927C401B905CD0D73E6B1A853B70 -MD = A0A581B990EA52110C6B4DA37DE8759DD4EB3E27F75A99DFDF5EA450DD5EA4949B560793A490C6DDE12BE7882F8983AAE0BFE44AD77A47FE7D5C1397E391D0F0 - -Len = 549 -Msg = DFD617A8BA7BF6C2FD65A7D531EBF0DFF617926830D0FF1E146A03F103422648C645907F47ACCD66FB6E510CD3F69AE9D43A69EBDF6B32736F5C1394B2FC5D445EB3E72EF8 -MD = E9D3C2D1A5E95129199E35A2727A5D99579E5AB007F27DBEEC0AC166F23D32B407832DA9117FDF72B4CCEDFB07B55345457F67B2D79E17130A3F47461B975C56 - -Len = 550 -Msg = D2321825C805E9BC50BB8138ED2102FEBBF4A48D39C468C576B055EBC4008FF8317E544BF78AF36E021A5E1809F5032D84C7769EAC4A59D346B64957D7B715AEDA82089C44 -MD = DB2A6B21C2BAC308DAE36AC52256CC43F905477B323C8A30A29EAE89B09328D9AD9F74D1873FDC8DCB58164F87A3484E1268EE25CE6160BABF19B743159DCE83 - -Len = 551 -Msg = 3D97DE13463FE4FBBCA43FA797A7594614DE028CFCB477033EEA9AA00FC7C7CC085B130639CF3AD64401EC1ADE15C7398BF115F4B33ACC6B9F2F20CCA6DB7F77828CCD633A -MD = 6777D545BDC8B14AFD6D4572948246C3671C98467B69865AD9207A46CA30A97516DF416CE5695016477D5DBEC1432A1DC7C20002A5A468218622FBFBBB548E30 - -Len = 552 -Msg = ABC87763CAE1CA98BD8C5B82CABA54AC83286F87E9610128AE4DE68AC95DF5E329C360717BD349F26B872528492CA7C94C2C1E1EF56B74DBB65C2AC351981FDB31D06C77A4 -MD = 8AAC9201D76DF13424A32552F04390E499B6168711B70C875789DDAA9B115F8B8259A60D17835E2587F8901C3CA782DA9AFB28BA87B9FCBE05A47A42F48FCD48 - -Len = 553 -Msg = 37603DA843EF88DB2515EEF27405CC61410C4E2DA79B6C8606FE93343EFECF6180729350408F382031F9322EAEDDB85899997DFF332D029FA2EEAE0050B2DCDD25198F0F7300 -MD = AD3660A682071AB59A206CDBE44BF2A817FEEB840EA51D017AAEFEE31E9C7DE143EA14137C3C357046095102D5F238074FA799B7A863A80F295E1C84D5A9A6A4 - -Len = 554 -Msg = 3248B698D97B6F9D9EF74359134F24A653A66A989FB1E6DEA74E4D13C1843EBCBE5B8AF1629C181A095E1B3F4C2F1B84552F006ADE5765BF3EBB8C1F6FC2E6D234E14B193AC0 -MD = 61AB2FF2CFE0DBFB93E734BFB0DEECBF4E9F264767623CFA88B496B899A1C195D3B1B7D9828672A11765B8AEA3A2DDC98B1221131F84764BA9328EF1594CB236 - -Len = 555 -Msg = 2680D25D09089F163BE9F8D1F5A08926B71FE579BD82A31CF3EB1039BDD5244D0D9F14649843AB97547F65B443C7F2337914C8A2395EAE93F0BF1C43D8C01EBFD58C955741C0 -MD = 4991EAFF8D35AEC7A79170B79EF70C6416BAE2531CC09F30A9A552221D4D0960B8AAE5D3D2363EA6E55B086E88470EFC2038B06E16551833B4030660C6955132 - -Len = 556 -Msg = EB31208EC2EB7695CA12D5DA41D70D247374D6877A4843E63A8812EF8518C0C2E0E224DDA708B88B9F958219E74CB5A7ADE195FAC3690DEBE41C0928C5DB54F8ECC6FF3248B0 -MD = 82B61D29369F4B01B8485E7CCBC6AE5062C3DD1EECECB341887FC28786A01F0D1CCF6557EF564661DA4A24E4F71725656C22462CA4798BE10E86EE87225BA012 - -Len = 557 -Msg = 757324619B2F5A81EF4126DA2B22E556FBBCAEB03D2D71AC77F8F08792DD8576960293EF62ADE524CDA00FAAD2D0FF33C60C001B352C29AFCBF0DD995B5085E3833B55C0C6A0 -MD = 861C0E7F913E9E7E2719398195E4F06248A173BF53DBA38FC97D38F132353E6F571056D97315CBD91D6557ADD1138C3ED06B3A289855C0FF3A022B4724C0B58F - -Len = 558 -Msg = 3F7727465659B9BC8379A1BCE9EA8636F07135ACFD75AE2AB86D96691B7797C10170E6EFFB1636608C18EF065872BDD8938567BD9E76F5ABEC4052C07221402C93401486C6B0 -MD = 5E6E7A62CCDE30D994C19F5D95783E3465556FC0B8B4C98C2760F4816E3809FA3C3500A9E643EA33FBE276A1B4786E042F14D1E47A9C43D72D0FC41FBB2BF184 - -Len = 559 -Msg = D02655C3BFB9521DA291885C9E448526B25864570ED209E33CE2B65BA737A717022A95CE93A719166B0D8BC9EF7E4AFF721DFB1C1730B70D9ACBA858E4A4A9359152921EC73A -MD = 52B3FF4CF47D690AF3937B272C469D3A6807E023626B36AFF40CD7E304EFFB4F584CA591E2C492554D35291C2B4D18C335C97F22F215E441860D581D100F7166 - -Len = 560 -Msg = 94F7CA8E1A54234C6D53CC734BB3D3150C8BA8C5F880EAB8D25FED13793A9701EBE320509286FD8E422E931D99C98DA4DF7E70AE447BAB8CFFD92382D8A77760A259FC4FBD72 -MD = AA52587D84586317028FB7D3C20892E0288BFE2FEABD76D7F89155FFE9CCBF1A09FA0FFB0553E83F79AE58BD30A35FA54892B6ABA0093A012427DDAB71CDF819 - -Len = 561 -Msg = CEFFB8673C1722594E925B0B9E7CFFE54861AFDAD2AE51528A507A25F26E19498EE305566788A05CDE16FD8F6C92F1049047F89CA1D46FEC489C745A12C79633F13C927DAE7380 -MD = 332197C88B7E9602443263EE8E881A9A164EFFA564E46F6187DBDA4FB3C48BFFFA2D7EA23E151F658C85C4A670F22E244DD04CBAFF6E8CA4652D223885943FB2 - -Len = 562 -Msg = 9C46E4954EB8286850B9AF257EDA31286625F8E935137E6F582B2930F2167BA25DA85C2C4949100CB391B214A097615CB8A9E8611A9D9F94D54ABC3865E1F28529C4FDCB16C900 -MD = 36646F14D8591AD9B8FB51E884E24D7E664A51A3DCB5C5654B9C36EAA943822876BDFACBB2D602D98FD0B05C4D25FB01B6D5CBA44FA930FE55C1A1C5B1DA64B9 - -Len = 563 -Msg = A56641438A5264B3DEA5635B9C9F308CC1DB42C882ACA9B6839C08618BA6E2D771CED4450698E2AB0C1C489BD69EB1D0A79F90A2B9BCC28230CF151F827A4D6762342869AB4D00 -MD = EAF1C35F1A00859A813156151D8ADBA7F9D1D4D5394184DDC8AFAD0C55867454B49407A2D3B27E7935492F5D362C4C05E00E7B64E0E3B41064A660B4231CE007 - -Len = 564 -Msg = C371B57FA3CBE85892E163BFA45D95F803686466FAB99259458ECC7FB465D25F2EF17189DAF7643468822AAE499FE5227986908032B68A8AFC299CB70339722652E6B8D7B75090 -MD = AF588906F29F2E7AED838625791F087199AED8764AC74AC081A0011C8D7FBD73C25D1DC18CA7ED18B0F74CAB2FF199F8DE9B94A0BF51CFDB5DE9E4C08F8BE505 - -Len = 565 -Msg = 114EAE7CE0CF58F7FB56676C4936BD7B018CEA5C1B19F08AC785CF9CA1F034607BD30B574925B3DB0BCA5CC9C0F3D4909064CE15B637D38691FBA467438B51F0E02D723E45D3C0 -MD = 187F3A40DDBD9CE3B15D702DB957B7009F8599BE218E63B59677E4C44DF3C520EA79FFF503B402BC3E933CA4CEBE82B76F6530EBEAEA06D73D6CB200B444D9CF - -Len = 566 -Msg = BFD7C3C1B5D442B4AA3DDC298B95FEFF68212C64233AAC2319C630B2E4916911C0CC01399D3FE2F699A70403652B3FCB77601E0BEBB9832B50E33ECAF033E4F7AF9565C1B25874 -MD = 955E95D3C4DFA240E49E07AD5BF2F4C06A0BC86843C4A9F2C2AA8CF07183D3C719C995897D22E5C8205FB38096B293971F471B02687C030EA6D20A3352D511AD - -Len = 567 -Msg = 02462D5F711B30301F0A39E0397651EF0FC444A701D8177A1E76BC77ADF9C461036EBDF678DD10C9C9F365457A07F885BE5660B4768D551281DB67EAA5283FB383A8702E637D40 -MD = E82EAD9090E1020A9280BE2201896F614E2EBF183A76731EEBEB4F06405AD6A5088A5F93D9519DC62C6F7E39458B03549E81F1C4EEDDC6DB21C16910D1388D55 - -Len = 568 -Msg = 13BD2811F6ED2B6F04FF3895ACEED7BEF8DCD45EB121791BC194A0F806206BFFC3B9281C2B308B1A729CE008119DD3066E9378ACDCC50A98A82E20738800B6CDDBE5FE9694AD6D -MD = 48FC282F37A3E1FB5DF4D2DA1F7197EC899AE573CA08DF550E61EE847EEB1D24C074FF46BCAEE224EC7D8CEA4256154F0C4D434E682834F6D827BFBDF75112F5 - -Len = 569 -Msg = 1AA7751BB1AB38921AA754162F00E8DA55DD9A5959FB1B316D6F622A6E7D27D6640D4B2D13FB70B30B87AF3D5AD06A1A7746AAD25979AFE91925D28E1B585ABAB56FFD6E41268880 -MD = D0C47FAB16E7576065A8AAA4F1A1717972DADB8D1775A95C0290B7DE04093333E1AEFFE2A6EDC3F2F192173023276A3C5D81697D358AD980678AE46C6A99F5AF - -Len = 570 -Msg = CC592E8F00C441202D834185DB8B5B9441E1AD1024573260393AF6D69269B6414D5E5C2BE374C9A9DAC4425693ABA78C729308AB3E7DA6CA43B91A717FF0FDEA4EAA7612F229C780 -MD = C7FCC0A4EC8CE1ADAC6910DAC27A6FB794C89765D5D84B0084B12C4DF57793111431885596461AF894C5CA8D1D02667508DCAAE9D81FE59B25B1E24F7E1B6F1B - -Len = 571 -Msg = 18057027D18CD129DFB5584F87C48D8ECE475A366F33C62736932F55CD9ADE656B6D7F27EC182DC565B5FC6E3E125D4A0C5904A3666CD79F611562755C66D87EE6038B10C1E44F80 -MD = 7316F3329FDFFB6D3763B8FD6A79BF147CD7D2B27E242D4FBF5E4BB85EA9272979BCCAD9FB654D2E7824F2096474B9AC13B655DC31C4243F5B9AC85E32B0BF14 - -Len = 572 -Msg = B3C5D348DA8B5AA4932E196713FD43A200B5095207CCEBF0F2F347A1C565C1F709231D8D7B3AE4E11EA4A71BF10C75FBF075D5C88E846D24C607D93A4992111D7AB637ACE577A700 -MD = 180A6024CB6A42AC202C9F93265966DA6922AF88EE2808DE6DE2389FC6E564C5D97999C03111153622752C4D8CC4835752A40608B339E344FE4D6B57C0755B9F - -Len = 573 -Msg = 77E244AAE547DA970AC2F73B0AFF4D870EDCCA2E0EE14B1F6F2A8702E4B482162B12F67BFCE1F087A7F240C9D0CC0706991E63800822B2F948BA553503AF630F4C182A1FDE676F60 -MD = 20EEE65AAA3AA9B98E692C3442B4D11F0162D48E04DD28C0F88EE2D8CC9ACDB498C9EF4399CAA7AF5ABFD48B7D8D407B082535576E54A7EF7E0C30F0AE8610AE - -Len = 574 -Msg = D34964352D3F10A58861BCFD9E492E30FB3FBCBD1090532A83590EC4B56A52B2E9AFA17E9C2B803143AE63915754D4887CF98C5B8BB8A48AC5535EF72B75CDA7612931E71D9E9E6C -MD = 062E82AF267D2FA8298F87A65757DE9B4F5F169AF963F283CE3FED685FFB38D6D9BD035114BAAB17D8E4C76BE0AD219015A4C809FD3971518C32E39C01C7D1FA - -Len = 575 -Msg = 5610326DF88C0154A99B962BDAFDC56A0206232EB7C2B30C40469D8011AF8F176AEC5A416A992C71A9F94E03E4F7BA079E4AF5174B7B0CE06369156D45F9385384D07CA55D837D10 -MD = 0A6F6C6F6578AB42CDBAA5E009FEB97A3F9A49A40604B9785FB95202D186FFE5AC7EB37B4F69BDA7FAD5AE8701990436A3936A6D6B4779FC6F629125CD503D98 - -Len = 576 -Msg = 1EED9CBA179A009EC2EC5508773DD305477CA117E6D569E66B5F64C6BC64801CE25A8424CE4A26D575B8A6FB10EAD3FD1992EDDDEEC2EBE7150DC98F63ADC3237EF57B91397AA8A7 -MD = 6B4B0F126863552A6F40F45E295DC79B9BA2A88EA7C3B2F607AC1A8431A97844C2A7B664443FB23C05739DF5494FE9824DB80B7F3E67872142F17E2C5544E1EF - -Len = 577 -Msg = E2A6C7C31424B9B1E391EC72D45A0758A41B7794E6161FE1B4EEEB2E9F345B45DB8B64097D0D2C09E3C3C5380822E62426DC169E94808B6E6802D27C067CF3A03BD1B2AD2B89483300 -MD = 8464E27974B8097F4DF3BB54DE06D57195E89D8130BDC27C7AAAAFC086BA5526017DB97C49461CDB9650DBEE8AC96CA1B3A2A4208E7139E3231CFF2ECE9163EC - -Len = 578 -Msg = BFC9C513134AA3E5813C125CCF279F33FB95A36C540274ECAC1EEB43189B2A1299F6F76F4F381E3D33576AA4BDDED13148314779C5A84AFC52CBBB8B42346466D3ED126F0D4C466400 -MD = CDADA4FBFA9E7868A99EAF60460FE084359446174CB1B0D66B9504AF0B5E7958A9386CFF5BF532FF8310FD0ED0EA345E447289A0F1E61D8D5894455D6CD2FB55 - -Len = 579 -Msg = 2A8E0C4A157E09AC3A83F7131C30599B3C8C8CB8D1FCABC4E9B606E265275C0680843CFDF1DF70AC5BAFD472F6A3AAEA93E2E51DDE78192D1D5313A79754926115AFA58B68D39DECA0 -MD = 75C06473E4E6B8551AD316C5B0282039D76EDC783C81771D72917106A2460648E4A6075758D9D6ED20C77832D0F39D39BC8F303F21DC21C0A0241C483789EFAF - -Len = 580 -Msg = 7F08ADFA726E42B95752387BD6248128D4E52706344AC7290314D9814356A121CB1EC7D7B018F0DB15457FBEEDEA5E1A1CCF627B164DF5A341B6E9AB23D6C79BFD9359578669B9C000 -MD = 803EC421F5DC21BC6951D723053ADC8478D26F1CAA0EAF95A6AD68937E29458C948B8EEF9320C33B831E632D8B383F7443A0AE537ABCE4F106C2617EDF8C0F42 - -Len = 581 -Msg = D0885BFD63E133FFDBDDFBA5DDABE302CCB292AD79C6CF2C848485446178472C123001A6C06245B0E7725B6C278D556E9444A6624EE3A612C27A194C76CF8197B275EFDD3042FC8600 -MD = 4AA3D415EE8A918D4E1632BCB0DC8A9F5FD746CE7B5366A8A289BDC6913E3B24B208AEB6338C88568CA8BCCBE1D41AC8DED677C5EA38DA806A6851F10D53F45C - -Len = 582 -Msg = DF98AAD16AB9EFA536176798654E6394668F576C9D6DEF29B6085FA29C9878966EFBE223E5F56D5BB69E8B27AC9B23F4D89A856EBA58EC5D20C7EAE6E58102BDD58C57EF843EB5D798 -MD = F85283E48A513189AED3CB0F9C6BCF711258E61B51EBD83CB10C0BBD2DC0B665D839ED3CFE54DAEEFA2EEBE260F821EE55DE363C205B832DC98E04E92832D973 - -Len = 583 -Msg = 9881E0C17927FB375634460158644EA6549E3F866FEB6923A99E3548108AA4E2420CB8C280991BAF535E28047EAE07832D543278459E21156F90B913C1FF926316CC813DF101007912 -MD = 4CA694537A569CAA858C3CDC2A844B9422A6F36D59DEFEBEEE55A85807B68B114318F9C3A50ADF29B45BA63B264E022E26CE036B2695D5F3032FFB174DDCEB0C - -Len = 584 -Msg = BA5B67B5EC3A3FFAE2C19DD8176A2EF75C0CD903725D45C9CB7009A900C0B0CA7A2967A95AE68269A6DBF8466C7B6844A1D608AC661F7EFF00538E323DB5F2C644B78B2D48DE1A08AA -MD = 7EEC7B730056B1BD4F6FFC186FB45591E50CD93CF6E4FC958889F82D3F32C5C74D03A4BCF7D2754298F134698AF4559B0E29BAAA365CC00DB0D51D407179C56D - -Len = 585 -Msg = F116DE7433D03DC10339E3661D06EBC8AD264DBACD05614B09119970AE3A85FA80D8DBB23403FE2874A967F66732C1711C455E6F299111F5B0FA378519D7F25CF945BCE7B8668203FB80 -MD = 00D0C5F6A7C513872A430DE5AE481C0AB9DA2DEE06523C4219C12C84316CF488141B9F8AF0DF48C3C0723DB7623207629EA072A56650BE960F66FAFA91D77E06 - -Len = 586 -Msg = CF33DD0DD4CDDB006109E02BA6CC6ACE8EA839DE2FC68A3357C1758EA1E2775E05019F12F2CAC5C2EF594D4F1DC26DE2F9543FEBA34E9F0475508EF848D6BEB4C26C2417BF1CC1419300 -MD = 3E4B2C7F8880F410CC6CD1842244202DCFE65390D7135C17EF96E9BE99BED52A297325C9B85679D503EEB0A7B6B37F798BD7982913A9E8BC953609091C4C19E6 - -Len = 587 -Msg = E32A1614AB569B1E5A897DECCB8D55CAF82CDAE61D0EDF09BF1AF52163F1E63668C4AB8E8A0CAE4C82E0E187BF5260CB9D2112211EA7C12AD08758EB8AEAF3258BFA07081D3038ADB760 -MD = 258AC814C166F1FA78942BBB4ACE5EE1AE0DFA3ADB758E299E0EEFF35007E7757E23987BFBD39E98EC9494634EDDC3486D2A372DAA9869A556D47A8E3A443239 - -Len = 588 -Msg = 870615E5FA42425D15D4DDB1920D99BA17844FCC6741BFDB1238B907B1071E241A1FE9D6122C40B640056786D516DB3C5495793EC6BB3309BB66D53D623FF4A28620E6613BD39B51EEA0 -MD = DA3D047A67DC3AC01AAB9551D9D57725C9A24A7FB6BAB73A0E94D8F8D1706AE85956F4CC4F396B248BC29A3AB0FCFEB3563DBC37FB7E333E0FD8C373FA57D6F3 - -Len = 589 -Msg = 9B1FEFB7B55DE30D70525169271683A21320D0E01C38CD630A79F36B15D05CE96B622C586F48F4251C948546760EA88D470F5BCEA84CEDADE74A0FA68A001F68C6BB1EEF8BDB6630A400 -MD = 46B5DAF87D5FD5ECE9226E3FE8EDF496750120F1FE68A3FBCB13053D62934B6F1AA27457D9AA8E23B2D47D107A9296B6C1E953911EE738C8B9D29B86A339D5F3 - -Len = 590 -Msg = 6BD0B9A20EE65C9C4E2B5ED2662D01876E76FD98283317C7941A6107D40F06EC88F6A3B235E073F7963F9D3DFD178226C6AE1C67FE00C2266FD608697EDADF07AB4F6C0303E82FBEA000 -MD = 5233BC22ABB457CC4A7D110435E5C9C6E61E800967D5D0E148141166ABE5A4C8C76C030C5474C0A6AFAB3E1F922B10E71C52815AEA7945EFED611996E74316EE - -Len = 591 -Msg = 43DDEFA4D3868E5C6671FF04BE2969549E9728D876A800879D84363EA77121371DCE33832E6092945E44CD5D8EB33ECE8F459342BD47A0A1D0BF165028119EECF77C154194E9E41106EA -MD = 03F72A06FF69E0242CB4EBF8800FC009D35009C96221E9197D35BB78D2E063762F5AD1AD879787EA322DC4F3A32C13900A24972042FBD7B63C90DCAE48BBCEE7 - -Len = 592 -Msg = 0EFA26AC5673167DCACAB860932ED612F65FF49B80FA9AE65465E5542CB62075DF1C5AE54FBA4DB807BE25B070033EFA223BDD5B1D3C94C6E1909C02B620D4B1B3A6C9FED24D70749604 -MD = 79CB925ACA072EBB3B49A9D0E59BB07DD1C223C1F26C91768B929472C51B977F85C6CEEB54BCE89CF9FF6155D7FE8091540F1348CE9592A6403F92105477870E - -Len = 593 -Msg = 89ED3A52A979EEC4BBD0191089043B7DD1475DB503E1B9CBBED58C46D81C9493F15A9832411C0B5455696B1142945CA022B4845299ED17B3EB276DB83DA3953433BEB873DFC1152DC59A00 -MD = 27C16ED6827C5D41E934F9BA179C582486FB06F92D3EE1C5057242118BBB5430C65B716E1763AA09B0F3CC304722A582E0C55A4CC857036FC2ECC15856A40E03 - -Len = 594 -Msg = D6D1EF350BCF8029CC20400775A57090045D7D9FE4D51C52B4EFADE7E69FD952CDDB66FCEA59DDA899A6578B0E4C115305895B909241D4D1ABF2A4DCD97CAAE0E22563B7C6A61009C8F040 -MD = 00EA9DF84D44F859C8148DEC4680B8D3527AA2D3251F66486887F1929A2A6F52C286FD275FF394B42B0FC4A83D6578743EE033D95594AFE077DF6C51710590A5 - -Len = 595 -Msg = F535C15710C29512FEA5E1388C742D3D181C5F52EC4FB9EABCE691125317D7FC5C4098435C0FE6BC44323B8607A7CF9EE56DAEB7048939940DA2DA4AFC1CE8652AFF60C53F72198E2902E0 -MD = 41D6151CC893AA22FE3D9D11B026F6682DC00F09767EB7B3CC0A7F3C557A1FDC656B9DA38908B8200C1FAAE5179DE4823777391FBDBE5054309AED9CD4074168 - -Len = 596 -Msg = 4606C6B2B2E9EB8AEF7D956640FAC17D6A2FCBC407B84D4B4C7D852B2121F08CED0AA8544EB2DBDC0AFABEA2CA0514C744637A745089E3B534EDB8E5D9E9EE7DEC904CCF7DF45365F8E020 -MD = 79B9BD83C66381764C7BB64E5688EE674E562F799466DA728DF531583FFD09C093497725E3E1B77180FFDF0267338E398EAE2D1658BFCF054A735174C62C0CE0 - -Len = 597 -Msg = D7AA2C9A3EF05452042FF75509A59521200DC3A76B77F067AAFFE475D408E055768ED33FF1B95572942BE792868D390700E82D2217DA9EDCD561254325EC98B3F85A24063F25F51E149110 -MD = EC97434FD93A5D1F685DF24C515BE7ABE9955EDDEE08B0DA5CD5B18BBCF18E9EC24A03F9795D1C726FF3AD2981B0B72567AD39ECBEB828523E7FC76140081DD9 - -Len = 598 -Msg = 6D812DBC3315206E516E52D4E810CB0D274DDB5586F192066645B6B7E7022F36787CFD6E98E553FCF15BF3F1C8C07856C4D9D44D9715ACD92DD02CD68B6C95A5322F8938F2654FEC102344 -MD = AEB6162AD67BE5B411BEB3CB3369FA990F224118E9F2392BDAC898C067EDB3F38319829A6AF5B6D3E47CFEEA15D220256FB2720F57BB9BF4B8B21957AB71BBB5 - -Len = 599 -Msg = B22FD723C48AE0A1D2B6440775FE49A44720D30E36F1D8D07CB5C49A79BF432D62B95F1A13C6D51D35B6B8AF12517CCFBAFE0691567BC337338312AD24066DB73731CBE66F49C76ACA085E -MD = 19CD24C28574F84DF0AFEB893EC4D30314F8F0CC538E96F6C3146C053893C98A1743B9001ED5EBE185341BDFA8EFB24350D1FA9A4DDA3D589A49860DB821FEC2 - -Len = 600 -Msg = BBFD933D1FD7BF594AC7F435277DC17D8D5A5B8E4D13D96D2F64E771ABBD51A5A8AEA741BECCBDDB177BCEA05243EBD003CFDEAE877CCA4DA94605B67691919D8B033F77D384CA01593C1B -MD = B5D1ED8F039044BCFEF41E99B2F564F45991B329B503FC91FA29D2408512F8711E9DB66F8AE172164650545AE9E3DB32AA369EC47E81A77111276E6CA38E4D92 - -Len = 601 -Msg = 0C86E4810BA7A10163172A8D718D80CF20F519C4191E8080B9FF3A6A21ECB913A14A05F04576BB95E38676296D708D74CD30CFF86D103EE2A79FCD6E39A09912D0CF7671580E0644DC74C600 -MD = B8D4DA414995E16527D491E690DD05FEC9B6EC4303B78B0D3DB9CF8A41D9C4BD3CEC3258807CCFC417BE03B4E8C1CC086701BA474AAEA8FE1F12739A39C10520 - -Len = 602 -Msg = 869BEAC3E5B5A3FE99018564592A004B396DAC8DE9F47AC01B5870FEAC4C0371D7EA84D4AB8E199959B423FE069DE86273EC4A73DC3D28BA66FAF7E80A26AC6B3525E530C03A2E2E30992980 -MD = 89308336064035DB97BBAF7DCCED6696F369373614A47151919E3CBAF9107D6736A9416284E23A937270E257D9705FDF4E94C017227B2D78E679EAE79B2AF9AE - -Len = 603 -Msg = CB2A977A3760DF60DDA2EC3A24865490299D27165F4497518B1F3471C1BD73E1FAFD2CE0DEF129B02BF6EC9C08D903C3A544F695FBDE5945C23975B0AC0CDD513810CAC6A998251BCB3E6DE0 -MD = F0217403668E7A434D3FC87A492FA2BB62398F63219827AE25114FF36AE03C9F0DFC670F24E0F863F0AC07F86927CCE687B20A7FA4009334C61F86CB99C3CC42 - -Len = 604 -Msg = 389B167E0A47A88EFA81870A0E8D8D86365B57C7CC3D77E0120685FAB3DB28319348101E1453B56F671D7E92D50B7941AEB88E493A1E1D9D06894DB8CE83C6F57C218A9652A5302BFFBE32A0 -MD = 1111CD9BE7C4DCC4AF0FEDBF1EE6169DB1EE0AF54C03B3D2A571D3C0D1726BACCE0D1BFB53D0757F49D375B55551654E908377D87EEC098153E7B70AE85B1C36 - -Len = 605 -Msg = E5E15235A5E5787BA52BA4BF335C297D36A96B999F230942B6A8FF1DC4A64F9917C6D564E27EA229938BEA691F70F334011B8C03B778E616FBE1C220B1564F3519144FF35C73AE1E98C4DA28 -MD = EC7B39068B001480AB6E788D191E34DF2896BEFDDFB7EDD023E4238F8A162C2A0E7042CFB874A334C510143350CD9CF9C2357E0E47B52BDF5DBEAC4CBFAFC76C - -Len = 606 -Msg = 1A0F8F926C0C9D4E4CC4E1E5F130DE44EDB8544421AD3BFD80E28D092E2C878EBDDFC62F484BC30B3C93FABCC924A5B9D3A7FA227609D921BE26ECB46D112CBE5C5F91B22F54CAD85EBC2578 -MD = 9E8AA52D2F0EFC56CCE86B2B911B4C7B58CCDA82185E06E64612FC470EFB8ED9EAFC80FFEDCFEEF7104E5E085433AD5C875EFD546FB53DFB04EAD39D78068C58 - -Len = 607 -Msg = 6299776218D85291AD65FC0E7782D3D03A6FB17BBD72F3C93A210BC49956E3AFD3BD048B49681300DB7676337271DFB46C22AD929DA6365442ED785671FCF2BD549832614270DE119B086EC0 -MD = 3EEE9AA6D258C07449AF2C9199CAAC48B3091F58F965A074FBF32446C54B74AC7B0EF78D6770197E6D9D746D67ACA479560D49F0CB1AD8EED13014910F4F920D - -Len = 608 -Msg = 90078999FD3C35B8AFBF4066CBDE335891365F0FC75C1286CDD88FA51FAB94F9B8DEF7C9AC582A5DBCD95817AFB7D1B48F63704E19C2BAA4DF347F48D4A6D603013C23F1E9611D595EBAC37C -MD = 782C008A9EE3DDA0A182267185C995A2AF737BA8CB2F6179F2CDF52505F8D933E712FC4E56D10E175EC8CDD62DE6529CE1F078BFA0DC7A5284F8C565182F85D9 - -Len = 609 -Msg = 32B722648C5D5A9558B328581F00BE0473ACCB994A92533904E7691A83C179D22A027CA97AE8FD09DD5503A307D23F03DD9979AEA237ADC9D76ACBADBB1C482D5FB3023AA194ACC84D4428C700 -MD = 2758EC55CF20820B5BA6C5F08ACBB2683967DC84F5271601115F707E088E1022CA9EE822A2DBD157F5ABE14B215074D538EED6ED9E6BFCEA9561B98F61EA5C6B - -Len = 610 -Msg = 3C33B1AF42292D4BB3E86744DB23DFA39914FB81885A564A52ABCA01215D552F6CA3BF56F201086232DC24EDD0B7683EB0F59E9FA96AB1578F8AF44AF903AD496E11B4766CEF3460979CD83140 -MD = 5BD91B52DDD2B24DD7CE03D72346FB8BF34C47810BA17093151EEDAA6407E246C372061757A61D66F30B1A1AC0D8B085D1489D4564C9C2B5BBB0FB940A3667C9 - -Len = 611 -Msg = 1A3051F42AB45179AD429B1616BFC686CBD15FF02D200FDAFB1F89A38CCFEB6EBF00B30179CF0BEF176A2D4CA63CAC0FDDE1A50BE122F408BACE72EEC6320F98AF6ACA4AFC79185B518FD8ECC0 -MD = 1A11C9237CB072217B7BFCCFCC7BDC4DCF2F9F4AC0A04191FF08038D7CB749AC903C3598F7A62636DDC6392083C6E72C2518FA8D0216E9D7254B2A88291822F4 - -Len = 612 -Msg = CD041C63D5330432294D0926228B1EAF6D234BCA839CF4C9EC8C823415FC34450214AFD2E4975045E6E933E8BF9EAF52A998EA879A06954488E95D0A3359F601EA5401201DB5FD8B3B01EB86B0 -MD = D7949177B356D9D3ABCA908CF526AF1D7216F222DF39F3791247E8F1202088DDED24CBF7D97A67FBDCD3EE62F16D7D7F5B9E73BCCC6E5420C68D2717E21BAFF1 - -Len = 613 -Msg = B88574119E0E2765562879FE7171DFAA8FDD492AE7F4D9DF4B858AFEFD95C55BBA259267878FCA3BDFA6B1BB23189BFD81207CCBC50482E830704FA2F3EF5362A0DDC6DACA3A74413E78F97868 -MD = 5510D135A28156AFE09AFC6F464196347E1F0E432ECC7AC4E7E8D5F60E3A6399B836388A8FC4677693B327009A281B13B78A6976BE3C4EA37FC5B12F3EFDBA95 - -Len = 614 -Msg = C2DC8467DDE39EE6896D915A7B4ED9F3D389FDE2D19D176857891AFE62E7FC6C3070AEAC3CFBB07BF32EA8978B689CA890A083644E54C4AB950DE65AC6270E2C8CACB766C8C494818BBEB09068 -MD = E0711D00D032675955BD76B2394FB7038098FCC1BE034AEE0E96F6FA57E26C24C124A0F8EA8CC56DB6AADAB3C28BB07380EDFD77A61A4EC6433AE851D2C4F61A - -Len = 615 -Msg = 03DC684CAF8ADF39F716F19E4E899E8CFD8CE1F75D01FE529A85A2B9736A00C7AE6D235E48C7CFF83B08A274E8A1F71142781A40132429808096A1E442EE6A3F76DFD5EDCE623DBAE00F7AC3F6 -MD = 68AE9CFF964526BCC2A45ED5CAF43CBF22303BCDB0A479A5DB83F8B164312B76EC8B19D7B5E470A2BD5CB92D79D339A05A0C89C075154E71B458CC5B2B116278 - -Len = 616 -Msg = 64105ECA863515C20E7CFBAA0A0B8809046164F374D691CDBD6508AAABC1819F9AC84B52BAFC1B0FE7CDDBC554B608C01C8904C669D8DB316A0953A4C68ECE324EC5A49FFDB59A1BD6A292AA0E -MD = 91A0241EDA8CA597CBB0F703AB7DBAAF859CFF77B20401AD46230CE3B2BEEF6685775DE37576014D8DA1BA672D47AAD95FB53C590B650634CEBB43A175738569 - -Len = 617 -Msg = 9A53A66C40C574D09FB5CC46D7BBBAF18D392FAD22FDA037E45AC895FE32A1B35691AB42E697E64F27239BCD0B3B9929FC4A2C8D730AC3DF39AEB066282E1F7B73984F0BBF2BE4EC40AE8B194280 -MD = 326AAF36FC4D029166245436A7E13EB3E4FF7D9FFAF8CB5B94B05B2ADEC8EBF4377FE083DB5A699833EDE981DEBF2D17A66FC53636F042EE7B80CEF8102FA98F - -Len = 618 -Msg = 2ACF3BA8177AF3BF39D6C75B4ADBFA997FD201D5C489260AFFFA0ABB9E4908417DE5B29B005AA277A82F8BC6153AB7AF6A9B418357F2DE6D9AC4D77713695706C99425DFD70586D29AF60863F0C0 -MD = 6EFFA1801B20D577AE136A81823187A14EC5C14173A9143F6EFBB942660548C99F2C202EFEDCE377FE0A2758E07F743370B6A714C1FC6A2E75D53E068FB45F93 - -Len = 619 -Msg = 5C38BA82BFF584A77A0DA5635C2FC3B3E82E43A2BE5C338215735A06CB679228A5AE18853909E64561DD2F5600E5AC9C5456DBC9F6CD7B3EFC2F925BF4412B3B82148C2F3091B259283BEC309F80 -MD = 3C93B14906013B15BEAC667973E3B94854067AF2BAEE6C915636C9C8ACDFA8C0EA483BB7341F1943CAF89879A9B5011CE9D6F1FEE49E15E173F4517828343EE7 - -Len = 620 -Msg = 9E75EB68CA9AC9FB4F4AEEC3805E3C4C15DA0DEFDC9678F5062509BE84B1BC0345E25E99C1D2B7E2399FEEFC39E84C3042FBC7CE27D702547D6648D560FAC8268114A96E079BF4721D53F92E16B0 -MD = 081F7646FB087AD3564EB6AB2B09EFE07A84ED068A71F135088624EBF5E56CFEF456103C2968C900BECFB1B8901710AC83EE5F085D0EAD50EBF9D04EB9C61012 - -Len = 621 -Msg = D4565A61C040688B23AE1AD10FE5934D776ABEC6E718E91EFBABF51F2DF9AA572A5427048D98D1E7813AC854FB348081B0332052127FDCEA10D3F40FC924C07A4B41EA70342BCFA4CB79EC8B8020 -MD = B91F23DDC9841DB79E5D7EAA55A55F1BB156725501AFD7F116654A911CAFE528533D2CC6154DE854F037B897AC6A1A1C0142A90DD9A1D4C615076C6240868D9F - -Len = 622 -Msg = 83AC1F77EC3B31443B117F2936E1FBB7F5D635CD84E0178B16302D66D80923214FFBE32AD36CDE4E2B62CB7EA91DCA5F0DD9AAD99B50B984F00F5CF2C617BEF6BAD0605C2DE03641AB6AD3CACDEC -MD = E17BBBFF2940FA7F093F297C39B590A7CCBBDF59DF6F2A8B0888AB9AABECCFBCEF4AC6C070D0F8FDC3B0472DC2DC34478469B386163DAF84DF9F0FF172856D8D - -Len = 623 -Msg = D5F52D229676FA418C0F976AE854592C7AAB09267816B5589E10C60C6DB702D2C0590983AC0FCB70759C4A97D61F50B4F992666C4B4935B6409EB37BD4890B72BDFC46B3738DA166510F7F01C92A -MD = 2DD59BDE356E04BD2FEDE4CAE220FD3D9C324272F176055359194036D6CECBE3A33594A59B06FE32A5F7B4E642B8CAA3579293C81B50907EDD197C84C3CD4093 - -Len = 624 -Msg = D4654BE288B9F3B711C2D02015978A8CC57471D5680A092AA534F7372C71CEAAB725A383C4FCF4D8DEAA57FCA3CE056F312961ECCF9B86F14981BA5BED6AB5B4498E1F6C82C6CAE6FC14845B3C8A -MD = 00B02DBCB7A3BC117701F2F159FC4492923C437D3369833A9BD09E78E260D48D37168D36C49777B2E68E6FE9846106A6AB8768C3971FAB31FD922AACB87D1CAC - -Len = 625 -Msg = 588A1024CC2DF536C93ECB5EAAF9CAA4BBFAD79EEAFFB5B05468658C46F14BEFB47A2D97F29E462C71FBB64686F2E613AA04D6ABF053284D4BCA9CF6B57F0C8DD0B718423E24CA9347FE4F5CE41380 -MD = 3540AD05CEEB51878E00DDA7480E8F4445679A35BF0B1A59A9540CEA0C75467753214B0768FFD57B66B9C7BDFAA0E3CA520E68412B76151A55639C6F8A9C37C1 - -Len = 626 -Msg = A539AAF94509CFBC8459CE5A4E95CA3D6875B19AC3B119FBB08DCBE553BC83457308D3F413D4362A6E74C35492B1DFFA5D7185BFCA34E85B4B3EA30EC0108A3CA82E55305EF5CD71BEED761D1F5540 -MD = 947323265BC001A6A2B81744F3674983070CBADB95955594A3D80C2091DC227E8CBBC808909DC954824096E64CAFCF7301EDB1CA1D32CE9F774F282B6E77AD70 - -Len = 627 -Msg = DD82F62080CB62E34FF4081376030A1306AE226BA181413E0CCE7BD1CBCF83EB09665F4F74176FEED3FA9619D391947F5169330409C3B06904E01E7B3502C88693605EDA211BF315D0106FA3968E00 -MD = A521F464E62899ADF892093B245BA4C55B245FBE4E18F43A4E397674DE7CE395AE6F242B8FE36B1522D0099E2BA9CE8C194A21426E0C020B30A0A49E6D3FEFFC - -Len = 628 -Msg = 7DD4B776E7A5CEF671F43948269DDB104F0A5CC315F08FEEB0749D79F626F4E55F4213EC30ACC38B9F78E44716D858A785BD938E8FCF57F8FF2B5BA15407A79A69A83BD5DA69B379C64EA72CB9D5A0 -MD = 70466321FF7F238543D76911F3905038F3CBF7D2BDEB53F46135AB1AF109E81F129C870DAACFB0F19D71BB98E885C525BF9D3BC9F60EDA86A1A3C9C7C32DA40F - -Len = 629 -Msg = 9AE70DC8965C2FCB43D79F2A2EEAD4C00A8C19D565EF8B125664633F3FA786F3BFA7DE1372FE84764314A480B8E04A71BB00A701795B1C7A96B7F22A3ED7E86DF8487979B6525A66A10C4C9B63AC50 -MD = F8DCAB97949F76E22AE00FA7146BA54317A695A4EF86F24CF1AA10519AC4FD5B695F250E1BEAB40B8CF334FFE7B45417DD6A24CBAE459127E511C7C53C37907B - -Len = 630 -Msg = B21B8C40CF1390EA0392F145E9C7C4FB58B2CD2D8C812D0A2839BA2128A1088068B5F17B38324AEBCA2FF9AF59E8AF325948830FD73D1D8EC98AFDEF4D50CF95F712A0874976DA3C0F77202253356C -MD = 3494CA2AD2526713E64787284F3CD907FA28B0993CA9E5EEA1C8384AFD48447A5AED23407AE4E94BDE93002CFA23DA257DE5FA4945F805DCE91A53A5A0EF9355 - -Len = 631 -Msg = D688AB44EB8723AA2B0F45736F3DF3B5C6D6B5C316E6C182FA8A45AB2D469D68F6C82C81C999B1D5BBFF731FBB65113FD70327182307C07FBB74F97BE8196C183B0C860881FE75DBD9B3166BBFFC24 -MD = 0758C0F3BC280C90DD2254D7C7BD922AE9BF4C598A0850012784365999A0C5D870EABC78FC9A4D32AEF693EE9309967971053F6CBC6864F009ABC916CCE6BADF - -Len = 632 -Msg = 12D9394888305AC96E65F2BF0E1B18C29C90FE9D714DD59F651F52B88B3008C588435548066EA2FC4C101118C91F32556224A540DE6EFDDBCA296EF1FB00341F5B01FECFC146BDB251B3BDAD556CD2 -MD = 3DEDF819B357DFAB1C7092ABD872A1554DD0962E9944EEF9F7F8BCE830F2D74F1D9BA2B748BBC6EE0B7600BE8CB0FFCB79924D9F51CDB9B06BD6FD37F3050229 - -Len = 633 -Msg = 093FC95304175C45118A6EF8EAF0A58A9D45C6326D6259398D8C6C88567AC9B12C6CDB0B80974D3C104C389E3D721F528ED51B7D8B110FDD955EDF4E13B4883142BB23F7AFB99E5B899D92D5563A6480 -MD = 257CE412E0818D073FBF7240B8BA5757E22FAB4018FA88CC323B99F25737ADECEB1CBE07FEEB1DE1F78CE62170BA258E96B1F667E12932FDB9F97967C605140E - -Len = 634 -Msg = 8AD86DCD3D4EEE9F1B28800E8E6E66B8FA0594C285B67765EBB4035F96AC4155A5F21A61DF4D25441B3265A411ABE9BB5D4ED7FE4D6037D49F2406560AF5E46483C8E1694ABE8A4CDCADED44FD8ED740 -MD = 80D0DE0E70486B82BAD4C3D8815CC38EFB91818E11A0A06CBD16C336794D508F15042A364FDD990BDD065B31C521A58CFB02CAA7C48E600F1E949BBAFC7195FD - -Len = 635 -Msg = F72D42FD9BE95CF4E1580CFC269747F172F3C17ECC0545DFDBA77C2E5C9DEFB98838C539DAFCD912F39D1D7C126C93BDB2F08293603533DF36430AD72EF419581B011B64224933D0A8BD9DA2A4AE9E00 -MD = B2656D3673817F1D622EF5E2DA8476DF25AC025F4FD77ED0F67FF8529643681C82841D0C7732CA2223C8CE85854B316A6DC188611A43AA1652442D7D4F83484B - -Len = 636 -Msg = 4FAD29DB36DD7FD0D7556D77D422DC0AD547CD156321A0C0A988662F3A9919C408ACF3049CDFC2F87309D553CC7B84F3B5ED89DCC6F1F707E0009C6D7E93B7F8089CD57AD9C2A4CEE97FAD6425C93420 -MD = A90F347A27E174FD5A29C5DC809FF1ED2383AD3B5BF2CBDA97BE7DFE56C9274B105B19C7B9749C00BC7AE37E88979F7BB8401CD0BAEB3DE96501261A011C3C74 - -Len = 637 -Msg = FA18047AF5A407B03BDE3FD0554363C2B95E36122B83FAFAF0E9EE933E6B8FC30344E34B7224F4A13A3FB3D1E15B4EFEA5AC8D8BC8DC3F59BDE305E7F337B77830674EB0DFE041F2B6F18F01CD59DC38 -MD = 8C5B0E1B4AC27D7AF596FEA689221E0E9A21911AE5D2941E7790EADCA4CB15D35A9E36A1D4F005CD4D099B0297496EE8EB73D25B9FED22EFCB70385C06FC4847 - -Len = 638 -Msg = 37E3823B27C5A47D59F9A801CB773C72DC1B6C04621AAC60D7ACE9590D0A202B2308B07BF1AC28E6E015B873C95B0143CF6B83805D6BC9EE186E8A75404642D15901334E09D731C02BCA748A33C965FC -MD = 728C635FFCD3CFA2360409AD6B5827C0914E3FDF0DF884D82DE4722EB12A882F66C13FEF3A85BCE8B488730FB286446C52B3FF545EC7C6C4A62343D5AD494ABE - -Len = 639 -Msg = 99A25B5CDE96655B4F29BDE8A691DC8D0BF9AAAEBED84B55E8BB044CEAA98FFD72C6F0B98AC4222FEAB773F9175796047FAD484F18F33A72AEE87276957F3BCF5ABC256DE0E14157C4903174823657C2 -MD = D421F320CA894967329271B4A5DFDAE862E3F8C01FCA8215502EC98D1BC6CC96F647446AA7DABADB4A553501D05D08CA5EB1F0A893A395E21650E25D01967890 - -Len = 640 -Msg = 871A0D7A5F36C3DA1DFCE57ACD8AB8487C274FAD336BC137EBD6FF4658B547C1DCFAB65F037AA58F35EF16AFF4ABE77BA61F65826F7BE681B5B6D5A1EA8085E2AE9CD5CF0991878A311B549A6D6AF230 -MD = 5FBE194557B0426F96BA60712176DF073EAFE04F2A50515455412EA3D80C116758AD952598F48031612181D82A16EFE4668FFB3BCCE9563A772FE416FF6DB3B3 - -Len = 641 -Msg = EE9AC0C239D9644C82660B488FA2598C3B288A01C84608EE555AC027C01FDBB614E18D5C1B3036E88115B5BD42B465526B92CB94776634377290333571F8D28518EA26F37DF8DE37ABE87DA2E55BD2DF80 -MD = AA96B81E8F602EF4F9AA241EA00B8094CA32FFA19AD82C945C6AC50AEEC2D66C3EFD79FE9FB2D316593E2FA73ACD411AB68F9AADAADE3BE63BFED14515DCB62E - -Len = 642 -Msg = 10D86540DCDEEF9B16EF516608D711500ED8F8E3F4122224993B3EFF37053DA602A9378889058954EF5B0BC3BF55DA2C88C881C583FEDAC724E1259E62CFC9EA973CE0F3FD2F9B92A19773A5312D493F00 -MD = 6BA4F3EC14E8C867B58EF5A6472AF73D2FEF70C5A586BF481B46E3ECE2FA68A549A2B0FFD409AEB6D408660A9E900D27DBB5D1F6DF92CC01DB44648FE1AAB065 - -Len = 643 -Msg = ED84FA0338D35196086E1116FA0BC0B31790D4AECCAB9AB51B42AB8AF76A6E97B284ED9D0321E891AA6E42C906325C4CD3379188F4400DB8BB2FD7526896B3DDFC733E19AD2C8BD0269872DF02D8000A40 -MD = E5586DAEC9F8F5454219093D47D87C33415867BD6608CE9A9583B03CCD6FD1D9D64DD5F91F113C78AD108ECD582FBCE43785CF70BD86D8B6636AAC153F542866 - -Len = 644 -Msg = 47A28CBEB8ECC3BE04B9112668271CC7A16C1015118CA72257EA0189D994914452FE7C5C66D83E10607DE3F144B04F9DF70003087237B55320AD925BC02BE3CD4BE9E9664A7C601DA89C1311565E03F430 -MD = AF7A878200085511D15EB3FBAB55E56906A2CC5FD3367686A28324C9C21B50739497E51AD9D625AA02F34AFA66D734E91444EC8F31A06926D5B89B6D958CC660 - -Len = 645 -Msg = 4EF91000C81FCECDD34020116B25E51C00871C104BDE349969BDF56A5BA844B4B78D7CD167CACC46693E0EBE9F72FF4ED3F3B4F03D2CBD26E9C0FB2BC422F84F35F248F4AF366F952E2D98B8441DD13A80 -MD = 023907751EBF1E8839A759E221CAE66B707EB31654D50F59F94D212B95A847CF9E43921D2F6062A7DB6DE9A0E72D03BCDEDA6C564419366505C0E7FDA0D7E061 - -Len = 646 -Msg = D8C5BA1029D56F569D9ECEFB0E4556298B474A8014FC1EBEAC8F4B61A1326CA2D40ECD50A5A15C9EAAA17253434601F548F4F380D843A53FFD2697A845DFF2E2237AC7ACD9056894E5E35E563CB02769A0 -MD = F48CF10893DE1938D69330E8D9B056495A577B9F5F757B539E3AAC35D09C10BFD12422D4E09B2242876EF1A4E18A99162383F4DD9CA1CA93EC239D9759190AB0 - -Len = 647 -Msg = 3A974442BE9FBC1F4321AD311F3B7D26537CCF129655F16EBBE11D6271C9F30001E910CFFD71EBF57794C5E07A9BC228CC2E93B0BC56A17F6CB49EDDAF29DDC1F83E68EDD1A21B84AC5BA1FC5834022C08 -MD = 01CA0A2D4EA1C0C160395A491ECF020CA6403F7EBD559A148FD66FA423C8227E3DA32A8EE2D935E8185D37AFC421A29DA8193C644869B323375741917ED804C1 - -Len = 648 -Msg = E90B4FFEF4D457BC7711FF4AA72231CA25AF6B2E206F8BF859D8758B89A7CD36105DB2538D06DA83BAD5F663BA11A5F6F61F236FD5F8D53C5E89F183A3CEC615B50C7C681E773D109FF7491B5CC22296C5 -MD = 2E8AB1619859C11473DC7C474CE8B0AE44B1C38417816FD95B9E0614F31E51EBB1DD16D1CBB584C4EBD28AA99F4A68E09DFE3AD462487F2608124B7528293045 - -Len = 649 -Msg = 291A175AA79A73524CC5A8D1324E068AAA6E2A3CAA43AD44216BC1D94580A4E8997EDF665A8E2142D63FDB55C005AB6B1D81C695C1460BE418F0C2122B4FBA09CD381ADD1B8FE1C646FD03784E246437AE00 -MD = F4A0E4FBA868AD0F9DCEEB86E90853AF43A6F92BC4B06F93AB0F8496ACFE174641EAC66B77C590478591D0B9806B5956B42239C737577D23FD6798DA9740877B - -Len = 650 -Msg = ECA7ADB20C7BD746B39A1A1B4EF9C1F319403E601D6B282FFB2DC6C01A83E6C01A01BFC72AFEED867B5BDB8FDB2987105CDE36F38BBD7CBB6A185AF91CB3F3592FC20BE27B0C277D6D398C21530B333B6100 -MD = E4F1DC4831A524F9C4E35C6E3D2B602F66CD0818DC2265C4EDCAC1DF68D7DBD71F9EBA9E0103C8E9FD493D7F908AD49EDDB29602F727AFFDBCB475FDE3DCB18A - -Len = 651 -Msg = 324C69CBCA2A5B8B42E1DFEFB2D7290D5871F3442CA554B5D34227F06A732DA857C4EA2BE0E8D86299A70BF0E754A06512D8C9ED4232339BF6E338B89CD7F18848B81CEFA8431ACC2E0941D3FBA7F17F8540 -MD = 299CC49C8021E27B62AEAF3E4136753F20A0557AB261F08AB5EE4E0F97A42465BEA2CA4270DAB6DFC6C311469878D88EC9F5E32C07C002A6A4C6E4BA433EFD01 - -Len = 652 -Msg = E34B1ED9CF859DF804A8F42B71E68C2DE6A3349EEB87B450D350BC2F79868748E71C44E8D4D41BD3A770E521DE7AA98C430910212E294AEEC65C0E7762C7CD9F03A2C61AFF873C28A9DB3EEAFB2C09E24F90 -MD = 47920A5844A0F1AD809FEA190B1D7DF8444C32DABFD67AFFD12A1AC718BEA0E3C79E59767BAAF15FA594B73F8FF7F6BE88E5860CAADD45F9A0AAF99C7A420EAA - -Len = 653 -Msg = B19701F0F71E36A61B27E9DEF9A7062719A497BFF82CCF01E076E8C08F94B1F6C67473DC909B192067BF6481B44A44FE77340C4EB7FEC31B2EA97A4341D09E31EFC00C48D11FE125DA151B6C7635094EEE30 -MD = 9D49D78BF94491B592D2B02FCBD683F57B184BF749316F83D074210E512359D73962E1668CE5EA2E22097D2D317C612D12BA1C389C7A15BDA920253C28BA13A7 - -Len = 654 -Msg = C700B40AA21E2C2FB143377421FB0E5C4C665E529D8C6C6E5A4DCB0B388B5726926D41A9A336E6AD38CC3F239CC85DE38DC221A4ECD281B4E271D90BF24A1FE943A6A5A637C36B48424FE6079C1F2C2D7878 -MD = 053FDE37070BA53CA21556EC826D50833BCDB9B7C70471930DBE2078AD8644C71EEDF1E030002A076DECD62993BEE4BACB2EA57082B404C24BA572C3A4381668 - -Len = 655 -Msg = F2224C30809A42D86701D95473C9DA3AAC8324D8D59AA8F75BF8E5A1420130BC971499725FFC56D1047F5987620492F383F477CDBF98EF01DB50F1FC0A7B3D9BD20C31ACFFBF60FB18E9962896B2E0431466 -MD = E13F335B151E887C40A5615283D343BB9F545A57787D14838D701F979E1E39D77F53E9C46AFD29E9D862657FB25C50E2CCDA1B86E49E247F76B99FF0F20A1D77 - -Len = 656 -Msg = E728DE62D75856500C4C77A428612CD804F30C3F10D36FB219C5CA0AA30726AB190E5F3F279E0733D77E7267C17BE27D21650A9A4D1E32F649627638DBADA9702C7CA303269ED14014B2F3CF8B894EAC8554 -MD = DB2D182BDBAC6AC866537E24712332CAE74DC3D36168982E4453DD6E009658345255013BC0A54FCA17AEEDCC4BEB79BDEE192CFAB516D24591C8699F7C758179 - -Len = 657 -Msg = CEE8685B3D95B231028587AC25C7E1790A7EAE52A5BADDF63C44DBDAD15DED0EE60708BCF52594F2FFE21BCC6849558A06770559A409450E6C87917D447D53D321EFB737668072DBB86B4A57C2CD4E5B3EDE80 -MD = 0D68ED5B540016AF9C1B9C91DB1CEA60E047E29EE196CA9C263B34E80DF001003DBDF395010C328762E35FB55D29A88F75E3534FA06579B802542F9076623E7C - -Len = 658 -Msg = 0B813C3BB65702538E6A0B953C9D272DD738817C86FB21A6DABAA13CA63E7F7A92F39036E08A68886EF8D495D6C2956125B4AF181B13BB41C89E83CC8B6E9CBA159CCB92C755E56CE1C3458DAC38718652C440 -MD = 27318F87A02DE7D4B477F0A636007E875BCE696F1D6F0C3FFFD3E5D276C6C742B78E88616EF51DA7F90A0377217C9742140769A949EB95D843F27A993DDC8205 - -Len = 659 -Msg = DDA54A9794F7FD0B7DBBA54A8341460FA46A067BA59EB7276D721F5182B59FA17F3DAB0015776D8BA29CF88BA64F6629B0FD0847FE2A86699CBB1EEB441AA17BC9070B432CCEA7B81060F742CCB4EBFE409260 -MD = A146FE09DDC210BC733FA88597DCBDC4120094E6DFDE8E93A378919E5EF6D9C4AA6A548B4E207E832453B157ABC0F523419960B81603A4CFFDA8F2B1B0C4396D - -Len = 660 -Msg = D71B21EDC24E6FAF788F909BF9015775BE75EF9FD9C179E9C9C8281813055A1627E1604C35BBD465FF7D30FBCE70ADCD6F17F11E786FA85996AE178532531A5BC68DEC364647D2F4453AA7881E232563283D20 -MD = DA11EE73AEFE448D80604F64F48452FA36D996D5E83D3CEBF88B193F1BB6984619733867D00980C180FB94FECB139C9CA613EF20FCACECDFA899F621F06E6A0E - -Len = 661 -Msg = FBFD53BCB158FA9DB2EAE0AA165B704ADA66AD28D5FAD0AAF4F075EBE04F295D5D4F69CC2936881FCDBEDDD48D48A6F3F0FDF1586382F9B97DE28CD225364D2EC0CF872AE691B76F10C7622B1409F1D4C1C648 -MD = 7367CCA0EF24CB34063B67E10805F444AA0F81564431DF5C35B3DAC003719DCFFC76D066CA18F6195DFE18326C8546E3EA43AD2B0D5096F9FE7E84CDBBE738C3 - -Len = 662 -Msg = 7E767921A14D35F1662B628F4A3F9E285F3F165316128AA84E06F032A0003A445B6C1816CAFFB61D7318D249C9179A27BA6F758103E9D82F3D1F7AE5726D485270AEA9BB40E9E11831D9DC4ABE6089FEAA6960 -MD = 5AACDA706633579F4F809275B200FF103A0800EE05F7B9D9366622191C6241EA3E896C6F5783B85492F574074E57DF98F87D9BA9C0464905814D82621EE4C749 - -Len = 663 -Msg = 020B34BA7071093BA752B2913F9774C29204D00A137ECEF964F4B05DCCDE457837E0E724431F606E75E3C14B441E9F2C53C7504F5838C57400BA593BC59E74E4E923EF0CF44D734C07A20C2DECB1DCA82444AC -MD = B8D37AA8C0E2D2AD8FAB2D8AC3B9E5ED6129B26F564A2E7110C0D9FE0D478E5E93F3EB1989E08E2A0F396DE6972CE0F32DC2263520A3AC07FD79564903FB2AA4 - -Len = 664 -Msg = 6348F229E7B1DF3B770C77544E5166E081850FA1C6C88169DB74C76E42EB983FACB276AD6A0D1FA7B50D3E3B6FCD799EC97470920A7ABED47D288FF883E24CA21C7F8016B93BB9B9E078BDB9703D2B781B616E -MD = 90A2C05F7001D985B587A046B488BF4ED29D75CC03A745731B5B0CE51BB86387C4CE34018A6D906EB7BEB41A09AFE9FEDD99AACC41B4556F75229C8688C7FCA2 - -Len = 665 -Msg = 5332DDDD7949110448AADF3FF60CC30D6CA83E32C49FAFF9625C3B39E80BB94AB82D9288B85A5D4315DF92FB9A8D1F6643C2DA0FAD11F62411899714FF8688BBACF01915598C259F5301EEF92F9A2CD965D43A00 -MD = 104C4F6C022E8D0EF0E9178C97FC088471F3620AC384D59BE55DF4EF1F8DF03C5D7EF0623E8A8C0A6E9ACDBA29CA709DDCEDD68E6E682275304E7C09BEA654E4 - -Len = 666 -Msg = A90A69E0B616278A1EA45ABFB27876514B9A94C1E1E24C4C22A47DB8569DF9FC64820C5A46E8762ABE56C095AAA1F5E97509F16BE71C437E8965BA7395CD82F6566B6B4CCD2595A9326151716A2041D97419CA80 -MD = F4F896780B3DBE03E85F8C166C53C9D10C79EB3230F903D979E46664831693E5BAABAFB6B4051F98EA190A1AE4824CAB05C7489E48C9E3E40E3C13A21550DB18 - -Len = 667 -Msg = A8E6EA7B074CDFB1983B864345B26C1C51B6799399092F146E5A83F68544D139B4DCF355C18563D5924106AED6135E8789DDA606A264B9F6EF059E009BB6D9797F56B307CEACA7330B103FA36A066B07D5FAFF80 -MD = C52648E52907B4F36B3E3375390415FD9E69275F0003049438B482298306BB895D219167651DD889C9ECD2744645C8D78BA5D54BCD27C18138562F05AC710BAE - -Len = 668 -Msg = DE6F56BE8FD2622BF9A9D72E126BF9E6C709B7DE2DF49F025D3A54335ACEA3913491EE0A8FE4B511BAF9B0BDF907066E4E70B8165B5E7B173F9D8F491248379AC2E0139A2435EAE5B53AF8B9BF974E02E68B1530 -MD = 3B6970B07EA37EF717E5FC6F6A453B7FCB16E1C5615E6A10B4EA91F07ABDE5E75601AEFADFCA2970E594E7EDA6FE8D15E30F954BC625DBB5C7DBC1365C0540E2 - -Len = 669 -Msg = 183111D07A16E338EDB2BED4EBFFE453C900976F33ACF6D521F014B98EC4BCDBB606AC70CB557CA17E0C02CE8395DB05611100B0A3DE4861FC0510CE734D2718E9A2C01940DBDBBA806BAD0B5BB3B13DF37C41F0 -MD = 54A714CD1367506E53883F998054F2F3ACA7E903C7030C99E0C1FD0C770E9A6697D017216596D5018383984F249FAED5D69FBF6B1C8829A8A1304725BC757D9B - -Len = 670 -Msg = 05CF7BC0F43F7DD750F7B238624157941F0C26F990D967C1A9A6B1713E090E790D574206DC47F2C61D570F1641A0C6F240269E9F1F1754E4AECC734BB7F55566135504A94B03F775860E4ABB0E7ED6ABDC275FA8 -MD = 5C06860A7521D897C47F5C56EBC6684A11AC8F308B8D9981D0231B3C1ED5F2EC89929EABFFFDAEE5892B8C9D67F587088E1D5D00215F9C820B670D3E8F7D8787 - -Len = 671 -Msg = 39FDF47FD4BA466DDCC6CACB1D4A1941A67AA2985B8832B79A194CC31AA9C308FDAE7A2393621C14836A4BD32A2D75C0A0F94D8F6DAD905565D8F437438D080628809212621BEC1051527B9CA217545BF35FBE8C -MD = 1178BD41ACF2096704AB4B98C3DD24F27659A2F9A5CC7123FBCA9F1AE55C4531DEE2014F887C7096E9AE2AA5D4E7F2C00327F0ED603C6057AF3597B3B33161B9 - -Len = 672 -Msg = 4B127FDE5DE733A1680C2790363627E63AC8A3F1B4707D982CAEA258655D9BF18F89AFE54127482BA01E08845594B671306A025C9A5C5B6F93B0A39522DC877437BE5C2436CBF300CE7AB6747934FCFC30AEAAF6 -MD = EA3991C4A8A5F0146402DE4AE235054C78A48DCA340A7D4AD8753995F82347ECFC0054D64EB4F20ABC4F415C54701CBC61A7B239A7C221B833D9EA9F94B154E8 - -Len = 673 -Msg = C65513559AFE979CF98A11ED2BA28093FD980E4827D7AA88D4EC8509A0621B4DE6ACD0313E0DCD79CB791914D6BDA9E0DFDA44424FFBD29F0BA7824A37605AFF32A9AF813B38293174B929BD836B19108B206B5800 -MD = 0AD9521C2C3C1E15DB2266B2FED6E8D089E62599BDB957593B73AF99C01DC5D3E5F7EFCFECBA86413A403CD26C2AB33CB919F2F0B0F642DD5E74055C32E35355 - -Len = 674 -Msg = 57EAD014B8ACC155958D62563E9F51F709D858379D699AF657C67DA30378AA7916AF2DFFA626EA24019F4ADEA5DD2F776FA49191673B08C804C2396292F82B9A36C90E5E0498370A221111EE58F7D2137B96D58740 -MD = 85962932589BBAB9B5B025F0B8DBD87F903977A1FF456102DA170F8A75F05D9732C15F7C425D962810CC9FC6A030FDCCDDEC6658EBF6768BB5915EDFCCC71890 - -Len = 675 -Msg = 815D4AD9D572A2DF8656281CAEE841AE46F8FD3AE24EE2FE148929C570CDB3E7D0B08FC26F42B5636A3ECE524355E6FE28F019F139839C2BBC79F18C765F8ECD7EB139DB97816EFB832A09534C07FA18DD68033960 -MD = 2E0E08AF4D112850CD8BB8337B00AABFE2F4E4F2ADD329E8381D3695FD7B87D9F5062F0AEF16369E9CF0D59BF52D14D9F3D57A4C83EE9B71C8FD14F34D5BA6C0 - -Len = 676 -Msg = 6D5BDBEC01986DCE1000A7EE1968BA9E6BEE72560C230F33F5DD758B593AA482CE01730B4234E7D9E8A211B9602BAE5C918971B816604BDFA382EA6593D27AAA40628358BFA92DDD44E84F4714FC41AF834761E4D0 -MD = B561DC908497D6A756E485C0B9C0ECD3DAC18A23DC920CD231A1DA24036C806C2647E504B051128F67E4A52DF0C5825B7E9CDA5C8CF49236E20465410910735E - -Len = 677 -Msg = 4BA150A5EBA308AD19F868282BD246A6DD84D7FEC4B2E5EC43918F946D61061B3D1D11973D22D7C9E7E5702E59C7414B034D2C53EF91729522C9CD82A9F9378FBB4856F1BD10898296CCE3B90CFFDCAB58945BF580 -MD = AD8B2B350500E679C7B5F9DBA197004B5CD1A1DBD2B7127ECC5C0B1D2061C718BD772E8CD4055B68BD459929CFF046CB929273B65D69B6D8F9E40FB780FA98A7 - -Len = 678 -Msg = 65666871ECE7F4087742945841BB624EF9D5C6400F4D78857810E704507195D6AD0B047EC823D29EA20967FE037BC4546BB2E4FF5B85EC7FC8AA8D1260BBC5C5ED5AF6789B81928DA011FE91A5017C8867391DF504 -MD = 000346BF3EEB3AAE8F70647681A531A2AABF99253465A784CC7E3B4A7ACFDAAB4AE3EDDDBE85E778C124A52BF0D66B3F0B5A48B8074A612C410A4690AD9CEA8E - -Len = 679 -Msg = 01D6257DF9FFF02334322A6CE3948C5C17A9C525D04B5778394B7690063407A9BE263E3C3CD8108457B2176854542FB2A1053578A9B3A36300630D2B3DD82DDEAACA7A10DA4C6B387AB7DA0B4897AC129822F0DE1C -MD = 209E2DA00F2F953C9EF032306F7F3D5357A53E2013620DC2AB48D3872180E4F2B256F9389CBD3B64E020BB779D74481E55663A25D74A59FD98F86970D3D90359 - -Len = 680 -Msg = 08461F006CFF4CC64B752C957287E5A0FAABC05C9BFF89D23FD902D324C79903B48FCB8F8F4B01F3E4DDB483593D25F000386698F5ADE7FAADE9615FDC50D32785EA51D49894E45BAA3DC707E224688C6408B68B11 -MD = 1313023B753ED1727F13CC67A64B989A8BF6548324DF9854D8D5A963ED3D860257FE6522B9C6D6CB1BCADF322C985601BA36F7E67110192094AA8F9869A458A8 - -Len = 681 -Msg = 46D226D1AE24FFD00A066EFB6D561AECB244806BF048E60330BE461C07793F8172BFA3D52F9A98BACFAB2CD39864FAADF72C8A7F94A977E1AC7597061638ACE3E21BA36CBD4007EF139E7DD8B620139DBB0AFFA81D80 -MD = 561FB585EE935E588D6BFF0A27E350C50C67B94DB1EBA8DA103AE44EBC6D80FF5F9F241382B1EEF364706F57D9325301CDF09409A0BD8F8F6C4C8FDDA8BB6B7F - -Len = 682 -Msg = BEC8AC7466698A548C1015FB4BE3450D86983940D0948A6B53D9024C51B356C3CAAA87E9A15A06873331C3B0E2023346E87EA14CD757FEEE5F77A4DA821087D36229A4C3BDD68C03FB27D0F80C6E3D7E9C8A036A9200 -MD = FA29C0FB4425233D16C488C9490560EDAD8134F25F66AE1CF122C61D6E020CFF299482C6A40E4B4BEAAE263B07B4554E355865485B245BCB9F1211AC4A77A2DB - -Len = 683 -Msg = EE0C430A0ACA534E72BDB81416F8A84C376529637209779A74F82C0934825CFF164AB703513B26E4E64F2EB05D462B1A422B8423B52205075FF2E8FBD36FA82E343AC0B06A3CB2EFA7E509A7B0B04EC23C5C4AA20760 -MD = 6ED3716465B91376405B888BBBED6C18AFCE879CEEB2B7920E5E024CFB1D12005BA96DF24444A5878B621DE46F1E1EC09C845CDA6CDC41FE3693ED449BFE9FA7 - -Len = 684 -Msg = 5262C0E6A835DDC17CA500196D4B3F74F30BE0A85E70D0AB343AA33BA65B08E35EE2E05F2812D3420F8466A75E550CDAF47C77E3E6BA22D0DFDF0D55697DD9759695DCCC84353DD2B81AB0FE59CA3E9A6680A5C29EA0 -MD = 4B1C3853982D64B2B4D1D1D7335A24F921E9BE22ADF5BDB9CB9D967A109D8424FFAF190A8F8D7710674D97C239DC5BFD4750F88CC385FDFEF4C0D33543D0DD79 - -Len = 685 -Msg = 7692563421ECD26D31A2A48D509820C69B1CE339B689C0421DAA658E43F62618EDD77EB6FB8C8C876176A13A7DB1E6F5CCF458F17DC76C993208D722D942E1968033DCF445E369B6375D0D488930B1653C12EA1B33C8 -MD = 96B622A70A3B0E2B1E763E9E235AEA32A6977C2C98209EC7E50DB831E3CC8D2297CDE82F9D4E5FEEDD04ECB752BBDADF05FEF08B7453109324595B6D706C8223 - -Len = 686 -Msg = B67F18A877D01C5FE24A5A81431CE673D6941FDE954FB92D593291D38E5BECE6EE5C6DB0BA571C5B11D96DF1D683CF14B560E3FF015DE782D2D23CA661B18FCBA123CFE4EFF13545CF10C20E8619C513826B8B017590 -MD = 6BDAA876F45C14B2B0266B69E0EE88FB45DA5B2A4F5956D0F5DA906B6F863CD4821F9D0BDABB9A5F0B2DA8E02917041265E9827EF1CE9998892942602CA7C5A5 - -Len = 687 -Msg = 3DF1EA02F3B72F7DF4C2B23BDB4A07F8B42CA5BB071039C7A5854B87D20CF522B6542E882B6A40C5CBF4410AC39F4D0259B7133E65E6D3931AF6547563603889968A5537429A5461693DE1E248EB01EF78B971143BCA -MD = 2E28DE06F4B39DA844C3ABF48E3ED62E08AED942A94B8C0AF901DA959A0E27106D3B6B87B36C12D01CFB8391119287FC3F43AEC9EDCE7FB773F591B977DA0112 - -Len = 688 -Msg = 68C8F8849B120E6E0C9969A5866AF591A829B92F33CD9A4A3196957A148C49138E1E2F5C7619A6D5EDEBE995ACD81EC8BB9C7B9CFCA678D081EA9E25A75D39DB04E18D475920CE828B94E72241F24DB72546B352A0E4 -MD = 9BCA2A1A5546A11275BF42F0B48492868359C78D94785A0EE12DC1C3D70A8E97EB462148FAED1FFA4DAB0E91519BD36C0C5C5FE7CFCFF3E180680318E1FCF75B - -Len = 689 -Msg = 4C4B4D003C4341C9C120B0E717622C70F17AAF88F49DB5E4C10124EE6BB1A090EB3A638BC262FC4A761B0C6FAB9913ED105DE2FC6FCD4BB748B9270305A34994BF81E43A86F8A026FD6048285A4F93455A598D5C47B980 -MD = 8AF691A4D9500DC4E5F315850AABD62265D666AADE0EAFF04E52F9AA0222D3840E39D129F134F2CB938D86373C2078F767A0FF57C0E67FB37C3594C72995E408 - -Len = 690 -Msg = 61A7A180B5122B174C0FD9B531C66FF1E273353D348DA58C345F78565DEB59A973566B89BBCA79F403ADEBA899E56FC9AB9885A9AB6ACB96A3920AB27C16FE424A93A21A72D6749756FC14C92EB08F078D6E21D0C0EEC0 -MD = 8D2950AC4FCA8F24BFA58F273C6087ECF4264079DAD95ABA7A636F907B14F8685CD04692A1759A177F35CA68A83C20A03DFFF67435DEFCA7AB611D43E1FADA1D - -Len = 691 -Msg = DF1081403952FF202893B5849BBFFFF74BBDD670C20EAD37A69C6A04291033FAEF0C94E4EC4201A2911A73E6367268A5F66E11561A6636A05CD2CDA8A065B2366B7DB0880F0E0B972CBDCCC70F3F4B13A93F63275C4120 -MD = AF63FB8BE38CCD395028DFB7618C27A4D28E6784ECB5B1E23A7CB5D23296EBC36C5EF00AEACE622877C8126ED573C14D2E0979B299B09CFE785A664D412AFB22 - -Len = 692 -Msg = CBD12C05EE3BE8484D9005E2B9F017F8E5EB0E7CF122A393B1C570C1ED9B4EE1C65CBCE0DFF77CB991E6F3F66D7B0EF45204894E5527C1AE655321D84CC2E94046F265EA726127628D15D4EDED37BB42D8E40B3EE6D430 -MD = E851B4745D899F2F1DA7CEFAF49633420DC697B1788448F279EFD1078FF2B70DAD82624A5D18062E7EA2319252C742F577BAA69EED1F2D0C4DF59022DD025626 - -Len = 693 -Msg = 659AF27FD1E6C59C9DA9318DA4E063707AF5204A963038B7E83242DCAB783F009CB034E39A82D26E1B2B6E84422281421687244DB5CE43A187FD96C39A59196AC2FD820FDB52BAB8DB579F87AEEF3EEBD0851952B70008 -MD = 883694D95832ADD37A1E2DE476FE3262BC0966D21C416026044CEBA57CFEB88B83F7963A4D6FB275C6F19627998DF28FD0DF8ABFF8AA41B1429B387BEDA117FF - -Len = 694 -Msg = D32EE5CF0455CDB7459BEABEAB67AF3E385E6D7D576FC3F9A3545EA4C28C94AA4833AC1D477C084FC3DCBA799D7DB42260695D651CC299E51987D60F8256A8BAFAFE2A3E414C235A56946DDF9562DE66D80B375DA578C0 -MD = 903CA31BB6AC3A77155951F46FD6B73E95B3841B0AC007D49CB3D6DCD99D473A6AE4EF3F04A362240038E2DA6B6AE983B3951CD8F49D4EC2A3E119AA770615FB - -Len = 695 -Msg = 62683FAA989429CC513787CD401953E80F8C9C7D41634D1888A08A3242D8FB2BEC07E5E02C7D8D00C446F5F08BF846927B5409E6BCAFAE4ACF70F30383D6C29D062625870F6DDEFD1920179CAD59A2983F0E20E78F5440 -MD = B6560560759F5DC4036B9B4450FDAF06783CCFF4AA9EDD37B6A15CC4C915F5518FDD6EC90FC0DB1609CDFDC05F858E3E34D1F63A647E5F2A6043532151E0DC2B - -Len = 696 -Msg = B8D56472954E31FB54E28FCA743F84D8DC34891CB564C64B08F7B71636DEBD64CA1EDBDBA7FC5C3E40049CE982BBA8C7E0703034E331384695E9DE76B5104F2FBC4535ECBEEBC33BC27F29F18F6F27E8023B0FBB6F563C -MD = 8492F5E621E82FDBFF1976B1BEECFF7D137805B5736AB49216122A95396B863A0481212B6DABA8B05E29E287BB0E2F588F86407C84DBFB894E6ACFC6F6B2E571 - -Len = 697 -Msg = 806CCD839B87C2A7C784F9AF9D5BF1F3CB663E39BE778FFC58865F953A837903542727FD51ACE8A276F9F5888F9B9FE1755B5D603284509D9099B310E01776281034FC57E91EC6781FCADEFE9B5E34C2D58ACA5636D7CC00 -MD = 9196E8625FA31F10847764A5DAACD7B22AECC031663319A95BCB8780606F0BEC3FD7CC0C44D1D322A820850D739B1D1CDFA323BAF8D33F838C68DB26359F3A0C - -Len = 698 -Msg = CA4D271BB220A5E1B6503C8E44AB9F3554D85F2BFF4C4F6A6ECE5C7E91FA10374AAF75D9FB45D4F0B442A3058FC1BAE39127C4C71146F5B2D4E87034EA34E67F822651A57D5D70F7A564FADD4143E940E971AE985E1D7240 -MD = FE8D050DDA0ABF169C9CC41FC0344685A6EF05A2519F04C958E97E0C0B278094126789D55912A44AD1932E15A64FA7D281FB58C730A5A0EE123FE087E8720643 - -Len = 699 -Msg = A2786A30089CF96D17574434B2E274B89CA8D7AD73C3FF491F50ED2965614288DC6B47B491B879857E384EEFE7149611E56DCAFA6498CAEEDFBA30C0CBC52269A3C6248587D77509E2019717E47DC27210A449E8EE0E9060 -MD = 107195FC8946E80842766B06EB0C93F53DF7FBC45460C7C0A652C08D5770BC803191115312BCA3BF09945D626568B4880DFDC362D00C8040E0781D50BEF77449 - -Len = 700 -Msg = 96FEBBB1DD01497E3E9EC768D864A48734DC7DCEFE567F84EE9309CB46B5056F6C730B1A6836912FFB473C0EB7BBB77BCD1483D1470910DE99328A43B2F0ABA0CD4BEAC2938937C2DC38C5E2822610814CF44DA89181E2A0 -MD = 062DE45F1145E58E18A6055B7E148B08BFECC05E959FB04532FF3354E5C80ECBACBFB2C55141B3E48C4613BBB0D66BBFA6EB855B5B210DBE23274D194B8D26F4 - -Len = 701 -Msg = 871EE5187FED8FFC3049079417641B332F0B73B2665C60823BCA8BFDF0989CF312D36732EA456405A3E0EA72F770329DB44949DDF7596318D37D99C8E0F8F71E22534493708CD6521711100EE059C53D2C2753E1A920B6A8 -MD = FF175B3C5F54609DBD3D35CF23FC62262F22B9A1709DB5E8869AED381F6829048962F37CCCC683D8310DF9A4A1E09E371F8DC8DC950F2E70D25FAB775868A23B - -Len = 702 -Msg = 12A6F918BC8A7E16920F4B4033F71ECDC3B5FF72894936BDC0A26BBF6FE66C594244FC37DCAF4CE0F24E75B12E486CF4C41FF97C8EF4E66825503B657787C284A6ABCEBB6B175623297DE98745A4A3C62A93682CAA4A8D58 -MD = EC04E08592FE20AFA049F593D5D0903678E748FA39CCB720325124C8171EA35F1F6C01142E8FC811C85941C5FD0F4760B8930BBA2A4B7F5C0EA9B16BD480C134 - -Len = 703 -Msg = 44D3E60CCFF7355FBB2168287FF0A1CDA69AC68D0A7EFE45F3A81D3F095FC8EF2F29B028942CA304A1A6FF223E52BB10A335DE8395B324CE26D802F770E0B47BD6B6FFBC1D9FA0B15A851ECB0F7F62F3C6704A1B16CAC2E0 -MD = D816A09E37B05F790778D96CF3058760B7415E3056EDCABEE5AB621C4CB3850051AD9C16BC5C4971CDD4EBA6429BD6374E75DAAEFC18BD0BA7E9FD0640DB6552 - -Len = 704 -Msg = 0D58AC665FA84342E60CEFEE31B1A4EACDB092F122DFC68309077AED1F3E528F578859EE9E4CEFB4A728E946324927B675CD4F4AC84F64DB3DACFE850C1DD18744C74CECCD9FE4DC214085108F404EAB6D8F452B5442A47D -MD = EEBE4EC0FE3E0266527F4D9F57A017637EAB92377D82B15856A55A22B008DF67F27AA5AC04E1DEEEB2C819CE41DB07DBF6DCAF17A192A4371A1E92BADF1E6389 - -Len = 705 -Msg = 01EFD67EF39BB09135E89B144997728AD2B318BB6321F421D7EC85BB38DD655FF2C565CB86FB427F4DD4EC69CDD079624FF6AD51438FC7264F86ABED42A93091C80771914884EFE67DF9A1A169A7806392A1E82D71BC748C00 -MD = F408B0AC5BD725EDFCD783FC2D5E00A394F02FED53E91EBE90505DF111E92C2821D87E7FEDD048614A5BC6F11FB46E0B4EA036AF10C0A595563E09B5D6803518 - -Len = 706 -Msg = 1B8B523F851D64097271FF7F02DE002EB26AA338D93D760EF8BFA7B798CD5EA16BF3A32AA7261288CE542B07EA93E8FB48BB545BDAEFF58EA990CA44001A6000E33436BC10C28E5AF184CE442BA2F3954E6B7B1C15E4690680 -MD = CD1CA43BA077DA8BB74276C5EFF683CF271159DC506125E5E7984A61B6B31E8C6E92B8FBCA74B12474619CC36CB56181E060838CBD99C2CDB4FC45F083D09B07 - -Len = 707 -Msg = CC579BB31BE1F113D7F436511B6B600889D1169F0A82C3777ECE9857B613AD5CF5DC8C621F95744F1A997F947CBBAB981F1BB910753B6658C11EAA2C3421D410E786C9727D34E79A8501123F1AE43A9ECB933D1256EF103EC0 -MD = 55E7E5B84A52A59D09B7832E3F4A1DDB3F08DD4E589F6CF7C480F2CED38192401963ECE97BDBBB4BBEF26091EB0BDEAAC5D512324B18D9735E959C0632B3195E - -Len = 708 -Msg = 23DBD6EA6FADE48BA4D2D596F4BD1608E38BC566812A5899041D2B8A867B20D0C6080E3EABF6208B7BA26E2243F270810A2ED2F2CF6A0AB9975FC3D0460F19CF0C8EA7842CC15A12AF2F31C7A97A19D5421C368AEA8CBCB1F0 -MD = 6558B9453859836571594F2ACAD810035998781E2027192B5270DF23DBC6CD364188882070ADBBFF744D472D5E9A63337760E0794384924E073B85BA562DCF6D - -Len = 709 -Msg = 33ACE56FDA97E4E458E135A93730AF474A233C9E468E4BA8D2D6144D3D86FAF619FFCE35463F136C3EFF4FE16F8D4F7B0BB3D6BBD80880A935E7FB55F310309EDB0134E3770BEBF81622C8CCD6CA04AB7C9D9BA40DC0C7BC90 -MD = 81F4D7546FD74264D6A3E5D54D59E722DFBD17B5EBA33136F1CF5598B856EACC7DD4C785AD9BB107F7B79999344F8AB623DEE31D9E571763AB88F38761050D40 - -Len = 710 -Msg = 37402934012C4CBCD189BE7AEE367F3C12B32B306980416AE5A20674DAF6BA41EEA9F09981D58DB2E38AA3DFA5173218E2DE374575BBD95FC039FDCA99ADFBCC30220492324189EBC2DBD5271A28CC8B8DB90D7D2651190810 -MD = 33E8B7A7F5868714BD9F01BE7EEE852F4FCDCF4FF18924D9D19C5F9C311EC289022C436C52C535BEED9FA117CCF2097D4A0C48396803B577B254E58B6336C43A - -Len = 711 -Msg = 44DA0511C6401815BCA95272F343C27F8A67B19EAED67169957F4B364059537A8F018D5C9DD478C0643F26D723EAEDE5BD2834751D291A0EA86BBF1C368FA2952D4ABE5B3F424B6D3F6C5A129817CD2F3FD6EBFC93F6B3F752 -MD = 6E6A9A98B5A46B869083A9B93C18FB2793BD632F857678B4537415684C4FA2C1BA39DC2B13E2DEFF9BC8CB64DE8BA6E199A1A714F741EF9CA3B131012E8E6527 - -Len = 712 -Msg = 1755E2D2E5D1C1B0156456B539753FF416651D44698E87002DCF61DCFA2B4E72F264D9AD591DF1FDEE7B41B2EB00283C5AEBB3411323B672EAA145C5125185104F20F335804B02325B6DEA65603F349F4D5D8B782DD3469CCD -MD = 9E36E6291BC2296CB4BA71109CEDCC2A3F0B4F1AE5E5406DC4B3E594551D5C70E6F814D2C9B8413103EF07535886B4AC518AAF7AED64ABED7A5B0A26F7171425 - -Len = 713 -Msg = 5498F0A76D37803918FD6B15EE166DC9FF9731F1C5A50E058713E285132BC43F2CD5960444E234F8467953890F35459207C52E6F39F0102E4684A18AF3E95126D7437F8A4266FE304B484E73CE5FBF96D2CC4BC29EFD03383A80 -MD = 61C15CD99492A2D8B85C4BE0F40A91E9BC43FF046FAD9D7E396A40ECE5CBB3D6ED4657C2F66E8F235CC9ECB09E46ADD553D9AD73E767EE37F6E67F3A13316851 - -Len = 714 -Msg = C0E4A4D8BEE0E03415D5A2A3D11E83088F11F27BE91484A691A15D9C1450F82F295B2BF9BD80093987FD95033F9EA7334E3C832EBE019406B0B7B32F293ABC3AD98BF65459FE860E817B106AB4FD41A6DCDE128205DBC1AFCA80 -MD = 0AB5FA7BCEC87D59C3D19F310EC9B607CFCB2CF7121BE401F4B04CBBB3710DD8CFDFE3EA144E722CFBC8A2B6DBAF92BB35852E169164F4F7458FCACAF6CC68DB - -Len = 715 -Msg = 2E99D58138061701615DFF1A8953E671548D6324CF19476D9CD33849043696E1540AAC3F44A011EE94423A2330B61C2FB2A1CE77FFC12392DB812F4F0BF8608223DCCF19019D80755A46902019DFD790D342DA79D5A84C009F60 -MD = FD1E92EC9F0278F6EDA774302F473B7F0543EFB443D0E22A164D237C34DCC568372EFCEDDD21D0BE2A2DE92A3EA97525480AD260FD15DEBFE7EF8E98913AC502 - -Len = 716 -Msg = 447355A1A902BDF51F3AEA5D6F904BDD7B958A269727A8F15B1520E15FDFA01DC8D23DA925F622210A587098033BD8AED48727CFC66BC11905410FA4623E8D8456F7CCBBE6582DB121AE2E7676461007E4E225905AA2D30A53D0 -MD = D35AE878741FCBF614CAF14AAF548ED4E681A69F3B902B61486CC9776595882622A72EA43C25AAE9465D31E40856B63E421336ACF8A5FA3E24D93E8557F96F00 - -Len = 717 -Msg = 64B9BE2D9BD49866C57E320D7079476C1FB62FCE5E8196AC82A62782F693968539D331B8F46E8B76722B3DDCCDB3DB194873E02996CDEB199237F0CE4C377D46DE925E7EA0540337D03378EF3FEC8488F0728DB40CDA98C11988 -MD = C3A6AE1033C6F1BFB2A2AE3636DF08056A40DD490CD16CA9282B5D87F3975F1F766758ABCB8749F9365DC3CDDEDEC3788325DA406A174A5A8F5DE320C5F6F744 - -Len = 718 -Msg = 8408659B0998506DD15A6375D400D017CB1081CFC1322BFA61BC19E4278AA172199D091AE29F7BB5B0B9E01F3F9AA2F5ABFF8DA03709092A65074F965CF0A1253A1EEADE65A132AA5C17E4E880F1382709BBB3056C643A12A928 -MD = 0F0EFA3061A1E8BE310BA98E4D74CFEC1FE1DA5E1760873AE3ADBD03F6A8B960D1F3E6EBFF43737156E5B4FBE243898FFC446037FB6BE48602B69C3158C248DC - -Len = 719 -Msg = 8E51395F9CBB75F8B98104508108016D275B6F769588DCCE2858E1D6995EFE7BD216B9835965FD90664CB4F2743EC5817B6820868D039190BCFD07E68B9C13A014FF2703DE6B081B86C55D72BCC22F4770FC7965D1E75AB9948E -MD = 13D609453BB279DA87170CCAA474C6FD78F68A47655865571C3D0798C7DB6B6A379680883325872AFAEF7B47D56D0D64526206AD4A0EDD85341AEB3C0AF84B0B - -Len = 720 -Msg = B180DE1A611111EE7584BA2C4B020598CD574AC77E404E853D15A101C6F5A2E5C801D7D85DC95286A1804C870BB9F00FD4DCB03AA8328275158819DCAD7253F3E3D237AEAA7979268A5DB1C6CE08A9EC7C2579783C8AFC1F91A7 -MD = F1089483A00B2601BE9C16469A090EFC49FCB70E62AC0FFEA2D1E508083CD5D41DCF2DAAE1E0EAC217859E5FEADDCB782AC471C01D7266136185D37B568E9606 - -Len = 721 -Msg = 1CFC3DF19818EAA21C03FDE78CDA0C704EBCEE5866F71DD8E3B1B38C9B7354443A3174099928AB8589F5EAA4F030074D3185BEAE29B75A9B7B449106EEBB05E32B7A621962FBBA4C74162FFD111BFCA10DCFA4F909C7C1AD98E500 -MD = CC7544D8160C5A4CE749B3AA5261CDB7BD50917D10FACB75056B55013A63CA937D295232AD4C7436E8BF9CED12A934C9A8055BA03A45FBEA5D5F96B48E043E56 - -Len = 722 -Msg = 2202FE7CB2BD3C73A7FFC49EA7A459AD89B62257B842B189042EE58720D7734926FAF10293D1455B7C9A4718CDEF1910F54A3140CC70268A3138819526F173595487AF4603F31B4CF644B3C4FCE967A520143DCC7438B396AC04C0 -MD = 80C1DB9639C8DCAA96622CCB10BC6A1FB358F7F29A24F375BF2B9D2F864C89115F09A6C356D736449C78B58C9D990B41285500B6E9EF3DE5FFFCD3678FC471FE - -Len = 723 -Msg = 490671DB10124CC0462CE3AAB939A6873B6111DD47A0CF31DB0F188FFBB60CB1F5C29BF6A236895201B52ABB93988F3B5091B3F00524C7BC5B70DAB990529797FB08CABFA7C01ED302E3BDA464344478296D584EAC426C3862E260 -MD = 0AF038542915274408DAEBF1D26438619D16B3FFAC99120AF7D00C323E4F2AF30FFCF353D98EA05DC6BC32C5AF0499B0BA87AD5A287FFCE805DA8B4FAA8AF01E - -Len = 724 -Msg = 5A2A63F0BDCC12F2E6FA0D3A7CC1230890489E03100CB2B5FBD196F3C5CC46611F1C0BB50217B5FF5BD0B00604FB3B408937068F23492F498980329ADCEEB3F3E7C5869DAA37EF56C77EC485BFE84D07C31926FFDC1998C391A3F0 -MD = E95471AF70442FCE8348AD67D0EC499E911D1FDB68A7166D60EB9C1C4D2DA98F82924D00D5699010D4CB0CE78A138268C0F8EAF770F737DABAC87848208960BC - -Len = 725 -Msg = 0CBF90E972B7FAA236A4EF379B189E96475488C0CDC8163C1501355F283FF2EF2A3359F2966F3E5DDF5B619E4C8AB2840FD93284BDC1018AC8532BE123CC7928D3B1B7BE9929A1BA3F7F59D4CFA6D8C0CC5BE7EDDF878A5EAB35D8 -MD = 6BACEC3B7BC04305123E3B404CC8E1596E99BB39C3C0E08F0847B462A3EB2E78E4D93BD52C54F28B687AC459F2A2CCD7EAA1431E98FF34586BFB5B3CD9E158E2 - -Len = 726 -Msg = 43B5CF0EB20A1782F17DD07E95BDA2AED072798E4DF4FD9B6655EB087EBA8549D68A2C61B08A6B26ECEA623DD5C7D7215F0F3C5E5C4F45BBD4B580A8BC2BBD8ABFB76366E18927D25A74FBD1896536C36028CAF12713544A753A98 -MD = D0936020DE57F8126693008A3CE8C28B0C0F708094E9F503CA0E970ED548B84BC417DEB43013095B47C310AF6877676FBB35DC6FF4360D603683FD97B55D75B1 - -Len = 727 -Msg = 0B1CB486FC934262E8DAADA5789855E2DF164FC5B5141336077B2C1589064ABD1BE8F92E455AE6AA2CE8F4F7ADC653B36F4AE3BF82134D639111BE7CC40EA02DE51AF9AD1F653E8EC56D60BD93CC4937D3256DE51CB5F1962F42B6 -MD = 2BFFAE4D443E4EC31B36555F6B481D5D399B7DCE7E557E11D4C7178F5EA01499DF5FC4722431B046E623A9F0A80127455CE086907F3E119F91C3259DBBD8E5C4 - -Len = 728 -Msg = CF3583CBDFD4CBC17063B1E7D90B02F0E6E2EE05F99D77E24E560392535E47E05077157F96813544A17046914F9EFB64762A23CF7A49FE52A0A4C01C630CFE8727B81FB99A89FF7CC11DCA5173057E0417B8FE7A9EFBA6D95C555F -MD = D063EA794CFD2ED9248665A6084A7B99051C1051E41B7D9DCB1537A1C79CBA6DEB4D844C6A618E43C7CA020D16976999684FEB084616F707209F75C4BD584D86 - -Len = 729 -Msg = 97BD1EF155DBFF92ED40EF57502EB5B11BB43D0525805EB66CE6CA6B2C4F27ECEB69E7196FA0AB9E097FCE104FD621CADD0CD24A660725DBD32D336BBC8054FA5F8E8631239D90CA428700C962F70304EABB7D21E7A1C86093756900 -MD = 002935F6EBF5FCFB193785F42AF86A9E7D4ED697D9747073AE5FE68F4727AFF0D65F3ABC44F87A58E6583796848E2D191B7D6DFB4EC48BE390C0638B4978C23A - -Len = 730 -Msg = 5020D3EF88B8A5154DC7CE9FFBD5E717DFA478990A5F54241E83C4B67F5BF0B486CCC4C441A75DCAB06B5F680E4CCBB4949AC79974B242113CAF54838F926F2674810F2258EE12826DF2B95961DEC901B59361877B3566A0385E6A00 -MD = BA08038C0A07AB8B97318B482A746A80075EB0B2B84CC528E7B2DB1A5E984FF24A0E313FC8E53F57824866BEE393B3CE154A83097A4F751952027F8D80524550 - -Len = 731 -Msg = 420F2E0A79EDF6879787FC94F2099AE0C4A3D04BC8932274A8DDC95ACC8C7E1403659777027A8002881E4588B03B3DC6369B7AA32E4ED7624C30B10AC8E2F16DDE7561620D3EC186E0A8395A7F90E67A52931E779F8A8D6297EEC6A0 -MD = C358377354BF79501F28C509E62EA04F895C51EC501102776363C5B3D5866EBC63E84E5A481AA5D3FAD97EBFB1AF9FE698D940BFEEEF7750297C88E26E496789 - -Len = 732 -Msg = 2FCE6B9232D11B2AFFCE835A8420C8F940390D5BB74E32A85432BD09286F1F5FCE5795225247491929D92169C9E7989AFF84B61D10597B651B875253FD07C098C513C8155652A7C98CB3958D2E8329FA43B7EB5685AE19D4F427C7A0 -MD = 5F5B9347AF54D6BFD61AA57081F65EFBD8948841169EF8E90CC3F6341FB60623D460464803380D28EEF6EB10DD2377513D81EC6A6F8CEFAECA3C83E2A21F6BD4 - -Len = 733 -Msg = 500A6E6A9AFB85255208BC8AC021AED541E93975BD9F83E0C7A5ACA7DBA0C6B92090B08543D888E8219EF073C959731637DC2C2AD8E425C7D85CB80FC319365DCE32B271EFD47148D2E89B39D55A820BF092C5E0739371F96F49CA70 -MD = C421273D6E1C285F59D47B39486391A82F854EFDF25C48099458652824DE0451E3499447B91CCBCEDC0045D1A2DD8EA5866CE3C48E984C649BDB3FDB2C7A32B2 - -Len = 734 -Msg = E5C9075478B6D0EB732C668AF5C3F523D4FA1983C564FF060FF725164E9AB9A0C80AF83FF749A5BA3E12538F0AA89E596E8293DE963EF6B3D25D23A53CC11F852B41539A3897878741F29CDF04B7137EFB104A395122DC4F2D8DD884 -MD = CFDDED24E8923AEE42066871D80B7761067D3BC8E9C4E6335BAAFA973FEE0325E8094DF7CA96F8BBB5D13BDF4783332C7E9B1C52F25C8C109964B0AD2F2F6CE7 - -Len = 735 -Msg = 92D2A406FEBC4031759A4BD3A7449812DDAFBB1F814125EFB0680458242C24C60AC3CEEA9446CBD8B5829CDDA4F17D12D621416F8A84070EB70680F2EB3E54684D97066FC5697BE7C3F8284F896966CA6607DBEA21713A18582C2596 -MD = 681027B62E4A179DC69467397E9D943EE9EE95B4036EBA03BF4820A49F9A97E388198A5828D6F6D399F615632CBF19209B21E4A2A39F77DA878ADC7243DF32AB - -Len = 736 -Msg = 072FC02340EF99115BAD72F92C01E4C093B9599F6CFC45CB380EE686CB5EB019E806AB9BD55E634AB10AA62A9510CC0672CD3EDDB589C7DF2B67FCD3329F61B1A4441ECA87A33C8F55DA4FBBAD5CF2B2527B8E983BB31A2FADEC7523 -MD = 424A86D746C87C85DABD1DAE298A488E4CA2183DE692D1D01C4B7994EE5124F9004BEA84933C311CC38EA6F604A7769EE178E1EC160A9891C42C462A13A62286 - -Len = 737 -Msg = B2CD11B36C8EDA2E79452DDD5A6D84A5B30E32F0E7AD88CBD234CA5C6C8DA088E559889130A3CD3E7FC8C2EA2BBDA9A3AD0E099F87A54B0C1C772A8425D81263F15B280A3D26772EEA18C011D66314D98F0146DAE57B03CAC8084B4780 -MD = 384B0A1F2EE5BDD8F7F4CBA306660A0C4575312CAEB390F25D9771FD03E8A202CA62CB78BF802E6B450212B03AB064E6474C454817B78CDFC719B288383FD04F - -Len = 738 -Msg = 03E7746A3778D7AB8352C9B1B78FC83D9AFBED688AA1D8B1DF3DCDADF47C79D9C686074177C98FD35701E3CB967E2A34516BC1297D6F72FCF4164DBB286A646D30FA5C9C9984CE7B25BF7E76ED96268CD6B3F1C53592605D190DFEB200 -MD = 17628B0600F0FFA0149508B71AF94D56E6A1553F2BEEF2B118426669F221DAAF0F7E78F93E5AFCC7530D10ACEADCC4775CA1E823B485D9B86C8A8E40FD3C21AE - -Len = 739 -Msg = 81A038A15FD7D39F55041B3C436B2D2ABF168A589244AAC58AF8E3234657E0E9892344D87E57F8FF8535282CC3046ACFE21795F55F521E9720441BEC60D8948FB7F4086CA1CDF11A55E6F477B08E1FE9993F20B55533A05617EFB56780 -MD = 54A2F34DB86E2AADA518D901C3524657AC00356CC75FB486335F67814C4AC1D5DE6A993C84D3B1D4472EDC1CC3D0CD77A47AA93DDB89D09910B68996FEFF1885 - -Len = 740 -Msg = A2D5A45983DBEA20C34211B395736AB2E93B185F2AB4A09C9BD1221D070E196B34B736682CCB9E5ECA84491EC2CE45DE770B79BF138FE18DAE6C1CDED27992557C939ECD5E99431F2D8EEE6DBF8FCDE40040522EB74058B32EA34DF4B0 -MD = 5195A755495E5D6A4D66B4F3586F12D154A81A1B010D0D6CA86DF968CE9F561A16AE89D5A3737AFD1824BBB1393549C900B0109EA6EF7C79EC69164840A19AF0 - -Len = 741 -Msg = BE4D1EB0174E7864361BF6E36D4B017E02DA05C498747457A01283F10889205877A53D588AA2A6515888D3DC411A6A12FC7DE5FF9FFA2487CBA37204F2116261361CF243F9A686251665345702EA29BF61F6467F353FB3958EF501C600 -MD = 32FEEDD5D0DE2373897847E7281CFB52AADBB6954CF0E300E805655AE63D7C7EA556D6201596AE7BC164200BB4A734EF65B2ADB22DC943F8F7F217720FE79304 - -Len = 742 -Msg = 2034010759152F3222157B787FAF0688A0E9A470772FC1C41E608C0738085B00EFD92F0CE2AEB194556CA83C2EFF6CDD0510A7CE3739308B2D54A3668A799271E14721C33AA50359406825DD16D2F21983DB25BC195D7E2292F9B7E624 -MD = D6E067015DDE1EFD2189238F16DD5A8C50AEEB7C6B89FAD1193AE34B13613ECB0B22C7AEC44E1C80DC8BECF164F782D6AD8217CB7132C524E280162FF0B4F426 - -Len = 743 -Msg = 32A05FC349E5A290FA9B3CB6B1E692057992AD2AEA4767E30644AE845134A1024E5A68156B4FC368DB7187063C99C33896DA02A99FFA4F7D8A22B578DF030E8CE34EF5FC3661CBF56E86801C1BE531A67B4317DC6C6576C12A9167D0C6 -MD = 2F58EEDC790E5CCF4483EBD3D786C023B6BD3D93D595CC61EDA1C6474D0A2E93C90DD4B085918981EDF47467B1998D0FCADF48CF47AB233F9DAC8458482F2013 - -Len = 744 -Msg = 76EECF956A52649F877528146DE33DF249CD800E21830F65E90F0F25CA9D6540FDE40603230ECA6760F1139C7F268DEBA2060631EEA92B1FFF05F93FD5572FBE29579ECD48BC3A8D6C2EB4A6B26E38D6C5FBF2C08044AEEA470A8F2F26 -MD = A9403C26A96DE2C3D359EE29F3FD1C581154852D19AD12884B79E7082D2DA22EC83553BABA2BDFF2A2FA15947A8E6ACD5F5D113EC091BFD1962A0A10401D2C98 - -Len = 745 -Msg = 1DCDC5D09B905D1F932BEEF9D3529ADCC20322937CA3576086DF22FA0DB226D4A2E49F41A21908C2B6F77055ABB72D7769174B35813586DFC1802047D801380350FA7EBBD158DEC6C82E93AEB06E8B18B6CD99FCC72E575E5BFA4AB32100 -MD = C166272F8D3BE61858AC3BD385F218593A2F9A0EB51655AF7FF62E444CD866A961537572491B966E49770DC29C1006E1A7106E5A64415A8AE49979C80D626E69 - -Len = 746 -Msg = EEACB938F6285732979F3CB7CAE9023A0F187CDDD0CDED771037ECCAD2DFDC9AABE803035AED9B42A164F1CA5E754C40F31BBA3A3E253958DF75CBDC16367565FF426D30FF4435E9013655BCB52CA1140345E712D8F7A4921B1E18B04300 -MD = 51E59F4F86ED746481479B1FA1600DE858CB27FD545872EC540B8B49189A92293B7513A4CFC94B602FFD29862F12C395B624B34297287C2D494ECD1C0C1DAA1F - -Len = 747 -Msg = F5C107B8C6F4C0B86202A1E943B049A09FA770F010333DC67233A7754D437EAD8C183D1F8AE3A4D62045DD69F9E751E82FE078768B0314898FEBAFF3B228CC85DD7C7AE786004555698B930D288CAF17E97A3200E4069EBEF80059F32780 -MD = FD8DD6B6E672F296738288E3D8BFD15A6591DB0B2074864E6FBF194AA2C2CDFFA0C62B30BCFBF45DE3EBFA1289BCB9EA9A23C5534C44C96F5EE4BBDDFEE6D479 - -Len = 748 -Msg = 2488C513A23128D2FB1694435F708E15C4DC0B2C2FE7B6AB060ACD0096E696F8D735B6557FEE0E518870AC2D4F62759C990F458DE19AAF1473288CC4252AE745651140790058F2ED53B30B35E556B865D331D1A0B4875809FFDF3250FB80 -MD = F9382542B7876C001B51E320383728E49BC46B80ED412B651105D6F613A0F2E64247B49FCF8D17C4A02D5822F9E39D02011FDAFC798DF6FF8A2E7A6C758CD8A2 - -Len = 749 -Msg = 44DFB4D53F3F197A602B273046B4D37E78C2FAEE6B64EDB48A8EC18AC173D21D9B1140A1EF00A184E75DA7262CE9873ED99AB740BA75872A37BFE3179127ED0C301D26FF6C7EC76D80C691452D2B84B05341E1D93457C7B6623338621D30 -MD = B39E8CE0C2DCD9B2F3E0EC7EFEFCD9FC6926B8FF0913D2C13E1856C5DB937AD9AC00AEF0EFD3166BC7A853E6303191E7619F8F5DF027003CB05242666DD53A94 - -Len = 750 -Msg = 798CE6CA7DC91C938FF9C3F3253DF0B57FD5D548B162562082A88AECB01F69FB68092CFE8E7921768636AE88C35FFFF093E0E380B28CF939750FAE3207198ECECB327F0CA80DB4B0026D2BF1B9E8C5B01DA7C761BB1DDB4ABE2CD9DF6C38 -MD = 1ADEC0C7C3423C2A3547253669A621AEB4BF63AA3C4C890D388AACC6CFA10A15F2A80D8B79C813FB109921C944F9129F0AF105F881DCCA530A43B16C6F5D5A5C - -Len = 751 -Msg = 8177FAE4AD2299632B8CC7CA64A77777C4CB0770DA8AD86A73A1387F2A53B473EE373DB0FCB73163CFD6903EF5ABBA7464AD74D7E3342D0118C99635CFD2DF68349ECC0D2B3C56502178E33C52CE3D7EB486C5DC33FA1EE79915D232D78A -MD = C55A9A26E6BFBDA8A59B710B5C8158CD36F847BF7218B5E9DDD6D7C0CF5FFD6F321DE7B02ABD5B3D61F3EF4E8F8951B5F63FFE41E0E09F3D20A283BCB615571E - -Len = 752 -Msg = 7ADC0B6693E61C269F278E6944A5A2D8300981E40022F839AC644387BFAC9086650085C2CDC585FEA47B9D2E52D65A2B29A7DC370401EF5D60DD0D21F9E2B90FAE919319B14B8C5565B0423CEFB827D5F1203302A9D01523498A4DB10374 -MD = 3D23632EE4C2D4F4118A02A677B5A32427C72BA54899BA2E6CCD22EC3DEFE0FCB052E3F83D35786CEA2080EED148A0A94628E735202E6B2809994C5F5BDAFDD6 - -Len = 753 -Msg = 6B6F9EAFA4DFBCC5968C0E9F2FD05418D0D14408DDD4F815D823DFDC3B86A6CC4CD7E251EDC6D1CD01F70ECDC0E10F57B6DDE2A299D964C64B3369041B8903B85FCBDC6F421320EE88C1963603E91C1EFDA49A9EBC6CD3BA5BDB56810BE400 -MD = DE08AC3DC92C37C25D0918066CE936F08B83B2ED4528007298FA4A67327DC6E196D3CF915C056AB7E97BE630C08BAB16B7BEB14E4DE33842826DBE0A4F317F64 - -Len = 754 -Msg = FCDF2D9025A965E76B1062BEBCC4263060C47FBF50B94D8E6543CC4C18D9D451B70AB93D5D33880F41AF4AA1EC9657B9041D12B5360FC2CA584886F5123751E5DC4950D8371DF9E47B28BCB548D23E0E0FD2398415B435E638BE561DA9B6C0 -MD = 32150BA2DE66D285BB76FC06C5AD979F811361E843F011476F6F26EFD0D3910114B15E917793E711F32715E3D3086D286EDE4045C5C38A0B5DD8125322E6A4BD - -Len = 755 -Msg = 686E9C366F294D6CBD34198F99137212E06602B3946126EF61F129A751AD217C9B65BBB64777D0CB79B0287C111E2CDF7A230ADE611F3E686837D2CCD482D6EE8989547CFFEB22E9EA6486B8F5B801A43055AFF71BB31FED1722B561FB9B80 -MD = 6E5E2AB5A875EFE15B18736F26E8D4A9330E4725879FA06457E57CDFB6FCFD231A1C1F1055F52DD91284B27D19B180462F53BE58CBD76230AAFDE76510FF1FCF - -Len = 756 -Msg = 8F3F248C4ECC21F82CD80EB4B9351EE7F1DA57CA05940F5A16AAF673320FD07337F2EF33D949A20B4F10F46FCD4BA11ACA937F485DA1F8340976BF5B8A0AF3E9E9A1357AC423B0A5D135DD22D46BA708EF929F87503BCCC210ED3CC07762F0 -MD = 6B88CAD3B7BDD267378328ABA671E0821E5AA4FBEED2B83BB00AACFB848A23DC3E37E630192C369B84C850401EA4E04AE17A5CD2DB05B37DBF94D33DF8CAAE0F - -Len = 757 -Msg = F81B17BB20E5EC27B38A136443DCC8361D0407F9A703C395C18210B5013EF565B79D2F211D3A57FD12FAE93E7AE049967CEB74ACC197187E7CBA48A3AA334F7CA54E1EFF502E10BD8CC0261B61BFEFC109FFCD980D94339E526F49CA8C1168 -MD = 5A30AF6F4B194D6BACF062AE7A636C45B023A4B0375034F73A2E2AADAA3C398B76C31E8319873B46F4820161B4C534BABFB53A4528E8D2344554F139B5E71B64 - -Len = 758 -Msg = 44BC65FEEB041D28F92DECC9CCED0C82EA96A625578D136F3433BBFA45D4560FD02C4137880A5A5340BA50B508664D2D2F28E9A1DEFB835DD11917B7CB1F99C0F68255461CFB3D5B63605A41F2E767A5312F22C2763AF9AC56DF84AD2B9360 -MD = B043DE68DE20E0579F4296479330CD701B70291B3FC513CD0D2C16B41190895B77FB83785E77F0DB38CED03698B7F4C67FAEC7D4EB7A99E5BC31701F8DD3F777 - -Len = 759 -Msg = AE840D40174167BB2263166491BCFC27D22277B34EE01988A1EAB70D588013FB67622EA09814065F4053B608661C5D1ACC9EDD2CC60FD1237A3FAF54752357D9A4BC668C22544BD278FBFA8137A70F2D749F00B64224D7F89AF7D21C658F28 -MD = 97319F979AB53C282B3B53E131EA6488A8E6710978E2AFE8A328B8B54E428CD358E6661711153BC12FBD14C82E3ADA154E2F61389EB8C8007124678993711BA2 - -Len = 760 -Msg = E1FFFA9826CCE8B86BCCEFB8794E48C46CDF372013F782ECED1E378269B7BE2B7BF51374092261AE120E822BE685F2E7A83664BCFBE38FE8633F24E633FFE1988E1BC5ACF59A587079A57A910BDA60060E85B5F5B6F776F0529639D9CCE4BD -MD = D8FA886884CE577A7282DECEACF4786E7C68FC69B141137FF5DC7CB3C5F8ABC845716DD27397E8BD5CE245107A984A3F8B21F19F99ED40118621DC85303A30B4 - -Len = 761 -Msg = AEE916551172614EF72AE01261F6A0A83A3CA96DE06100D037370B33F1E1C4A48C6E03FCDAA0EFB1855DE62251035568C2E143B5ED4A7BEADC8E3880F3EBAB6043718FE1716DA54857BE77B9665885BFD917FCF3B689EAA656EB4BCD40C3A000 -MD = 59384A0CABFED9EF47EF74E245B0F4D06DF52530073FA2DA0932D22193C456500D7EEAA42B3584F8F1BEE8F1A7594A705A9D889A9B8951F6BAA58327AB50FBD0 - -Len = 762 -Msg = B62D734A657549F5F0DD26152D7520393E93FA79120520AF6D18160EF699842894B298C965D1FF9CB4200F778F4DEBB7910B34049488974EAC2EEF9372DD4674CF91981C5DD04FE47878D82F7215A1DF00B5DEE6D657771F77FCFF4A0F0FB700 -MD = 220A8D28EF5FC4E18ADAA85BD4AC0CD8325E21D09C06B9ABB9BE9B25FC6A86D3D86312B0C3490CB13A96048681577A5C2002144B7A0B42926713E9A001106BAA - -Len = 763 -Msg = 607A7830E232CC6C8ADA43E6771A47D6D8F85533B09350591BEB1372A4968766D539D9720CD6FE0DFBE37B4B2B477DC120DC152B9662B9BE32403920B942D284F092D5C7FF6FC86E14ADF7605A0B356876212FFEA7313780112E469E587ED6A0 -MD = EB27169215485DC835AD901F232AA51673BD0E98757C73D862E34CB45C9C501E911A9E36A8EC54684888BE40BB0E8199645C0A1420DD709F237187252CAB8E0D - -Len = 764 -Msg = F9BD410B5BDB01459653C9043E69479086CC7843259BAA5DF4E7F14BFEA9161EE11B149CE9977DB82F4666B2027E33FB5E2F2F298EF7E7D17E54957F63D5FFFCCE2203613D248F8D1C87C675530531677C1B2F2301640748F2770F2F9399DBE0 -MD = 8B686645FE6A983A41B1BAFECA217644AB65DF525C19DD8414C14A7622885DE67EC94ADAE247C919358055205723794EF20E9DA58F72C325414423C567C6A060 - -Len = 765 -Msg = EA3C9C739E567B78C16751BCB07F497B3062483431236FF300EFFEE566E546610727D5EBEBB653A44616BB898D7396E9C8050F5D4569100EB64EC70DF3182A75A2F3108807E7CF8CF9CB46F8DF2DB20570BF49BE10A7CBA0201CDC68562C6598 -MD = 60344CA091DA41746E197B072C1BDD991F67354AD7757F73F20C43851316B3F0567D518CA4374BBE29EAE762E9E07952D0C541AF28B595696386C83C3B0538D6 - -Len = 766 -Msg = D2FAB29E41C33D863B9D54D5289CAF08DD6A1807577A67C667E9A15B3E028D35D8FED331EA42491D09BB442900810A9188562E043BB07D445B8BCE72DF4FA79FB9883680CF619C1C33FF2FFCEB88652785C9B1DCD84DCC820971964740A7B694 -MD = ABFC2A2595234A2963267E21124A183A16833CF1D3CB0CCBD6C403E25D0D610C603379A98D192ACD3776DBA3CE46AE511B3030CFDC363BB17FB7845535378CB2 - -Len = 767 -Msg = 7D1D7760367AC57888886DB653E275894F5E77307FD0552F3C215DFBAEFB379DEA88D2F94BCEF14B31CEDEB8B721CE65B51055357AB8D56AD4F131B9ACAD1F71861312F5A4BC8F7DF6FAA913A40DF179B887CF946597709DCCFFA0EBD4675812 -MD = 01D1D05D9B9422DB6E9958DF1276C3A3CC26748809E132BF74FF0BC3BA42C30BABB05F27D031DB22983163065B8CAD60F6C4598F08E6C25CA6B333C47956F326 - -Len = 768 -Msg = 69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600 -MD = C768CD313602FABB2193F9EDBF667B4CDABD57D5FF60BDC22BA7BAD5319EA04E7CBEC5D4B4C4560AD52609FDD22750B618951796376ED41B2A8EAFFDD9927722 - -Len = 769 -Msg = 2EA8CEC39A5FD5C5D1702E3414E3E1B2E7F995EEE85ED45C839D6F9700D0A98717105A653C1DD4A6BA203C37C2139A94A2BADF7D91B78EE47549A44DDECE61A7D57545D1AF181264D80C3E5F6048242DB8566C4B5A19B917A6E743376C80C5D900 -MD = 8FF446A74EA4C961C21A017464B7B8785462D3A5D21A19A0390EED45B9921514B5737D57EBB378CA0AF7DA2BEEA2CB9F76C21D1BA53D151538D0091E608330BD - -Len = 770 -Msg = 2F7BB5955EC214D7888D9905F242672DBA9AD7F069DCC7223BAE86D98E06963022BDA9BCFB4FB70E08A9D925259CB170116A232EED329E9ADAD7B2BA6265D228A5ACFD9217A26E3566C8911DAD49130E5B94AA76B63B2791B3F03DB1E223873D00 -MD = 831B42058276C90234E915CEE399454D660534360DA7389D885660AA1B02187600193FA4D4DFBA0470526F1A7BB60CC77174DBE7C8A60E23FA33D0DBE6BAE6AF - -Len = 771 -Msg = 9F17FEC7F006213F7CF73F749FADE644FB82FEDB4AD040D6215C2C37E231777A76ACF2B11322BB77C48DB77F7DC4FAD97D967990CB04414E3DD5F59F51492F84119CA604A258BC449AA334548100A4E820ED8E62A3168889D8D23464F1F34DC0E0 -MD = 7A0CB309412A123231E40BEF3C1B079F50BF8F1EF5F7172FC730AE0AC0B1F80864652ADEF7328B26948E9336AE692B8C8C28AF18B1935301E01350751C7A5C3A - -Len = 772 -Msg = 67B2619FAAF64FCD3EC0185032761437131683F4F75DAA2CB234F5C0E8014EF0CDAD47C93D3962052FA629CDC759BBA3EC8AB9CDF65D5C9B2EC6FA803DAF0A583FE1176768B81EADC4793E0CE47FF204C758B02DC21F9DEAB6267C2ACD5356D290 -MD = C8EEE75CC0CAC0ACC506E11B2B6DC0443D4085D9CAAAED6AE260F3A0B97849F6244AA3C23ECFB5333F0CF392F9950F00A6E6EDF99E667106FE4150F553ABACE2 - -Len = 773 -Msg = ACA049B282819B944F1F6114F989DD133A8B777922A8D2D487F04776405C31DB13BBBDD2D2B7AD994B28903F9C3C74549B8AE0DDB89D20221B30006DE9A13728BC2A553C8363FDEBAEC392C4D9AE569ED57B52D8BC20F593D96D857B1EFEA18D10 -MD = E273A049765DD70F677DCF8C37BBCC1767B5C087760B97D82F7BE712FA45A33B7C6F160B7499D1B4C6C9B1AAE6E3B7B750E2DCB885234130CCC319E48B452AF0 - -Len = 774 -Msg = 84D4E78D5A5CD08A94717D8AE14FE24E3670AF58851605DD337FD29482BA01BEFA38F954C9C5E021EEE41D1FA230C0AAA1BA306D6059ED113A9B9CCEB9F70D92A4B6886ECEB7E805D51E823BFA7A6B270199A0DAC2F6514EC6CC0DAC2E2D8CED10 -MD = 295067F0F20F1A3D8B657B7DD66C0E037EF6606BB4CBC593D5A2B7D54F09DA80D7DCEA6415B8524C50C2480ACF521D5B092FEABE36392DDA6A9E324AA387FA7B - -Len = 775 -Msg = 43C5378EC8FB95C451DCE02DFFD1DD6EC6E73EC464AEB26D9BE6ACDCD10A246E12740D939D480D0F69FABB6216E3FBF6C53C723B6624EFD8A79E90BFEFA048AFEA723F54B0F72168EBD6B271F981B5395DEE468278C80B014EC0D483F3C037270A -MD = 89E9D710C2FC594892084830268E8E2D754040374D8A98C35D1662C6D36494D9D070C4E9AF0578EE02DF0C09F86519DEBA5E38350BB6FB5F68E7F4AAF9967622 - -Len = 776 -Msg = 38A10A352CA5AEDFA8E19C64787D8E9C3A75DBF3B8674BFAB29B5DBFC15A63D10FAE66CD1A6E6D2452D557967EAAD89A4C98449787B0B3164CA5B717A93F24EB0B506CEB70CBBCB8D72B2A72993F909AAD92F044E0B5A2C9AC9CB16A0CA2F81F49 -MD = 8562CE9399806623B2695712266AF3D4C14F77D2449143379246962C22398C813544A7DEE4C4847F09D3CBE437349B7FC6738AC97075B5DD9E2ADD6ECAA610F4 - -Len = 777 -Msg = ECD731D02EEDBE3A4B9FFD5FDA34CB343D655176C691D8E8FBABC6A15F73B8E168E2AD9C97361EAD1EBD3C3335C1FC683882B81DAF55D9D657DA01EBED9D06A52C5C938B1D970AEC5EFD5034CE61DC9F67074A2DA145C27B4329CFB0F8B489729880 -MD = A9C7B9D19B1AA888CA577F256A8311CF1A7B125EB32D63CC1533474CA29D885B2A41742535622F5F95E38E0866505B30EC0AA6DDD6669BA1FF81692E90FCAE67 - -Len = 778 -Msg = C9CD6851FC6B8031E039FB7BDD8F1A6D7EC7854272E2309DA9CBA90A00F1F90B5FD3AE6E394067E17BBB4BD60B7BC11C8F425C430303EFECE951F5BA99BF550D98897C3723D758764A3A9F1D0CB95CA20B0BB919F061BEE4F5ABA38DA0FD146E46C0 -MD = C95E724B468EDFEE62219D504A6C66E959D30CF7790972623A4B5A76B1D350CBFDEC622458D3A7A2661BBDF6BD3E8D84AE4D07F08C5E035D8B8AE773F4A568B2 - -Len = 779 -Msg = C48E7340EB22C6EA14ABF7890E781E355FB37A7C278443FC710E8C17B87D13FEC7153E8E68BAE3DD640F966E3EA2813B36B017DD1B3D8D5099C4CA1EAD1C9BF5D1B92214BA10E8E0D783CE1C364FFF56F137A03189E0E62EFFF2B3535C9749F1EE80 -MD = B5B8D767C5C81F61ACD7EC10A71B58BCE012E5085294A493196915A65620D9DA7642FDDA640F7D4C0FB7BE045AC5E57741F4C4DB7155402DC929CA27D26C5F0D - -Len = 780 -Msg = 01CE485175B07C55FC35363FEA239A26718D34DFC08E38E1391D4002C2B3F977A0074ECDA3AB485E6F3B0FE394BC64F187ED6A3B04A7B93EAE9876AEF77F01124ED2DD88956565669378C2CEE09D49728D3935F97698A6A3EF7C49E69104BA38F3B0 -MD = DD0D2CF8C2B39DF03029F882926995B32C1A69A66BAFF4B4D54CA96E1EEF0B8DEFBCC013CC375C767CBE008288CA409F524648648205C9AE7CA41F5ABF6A2B90 - -Len = 781 -Msg = 69D1FE474AE0892557398BA77643E7A7F0AB218374CBCE7A9D2E51B1B319EA39B1EED38378482CF5D3780F543A773D80C66783F11B793BA267F32F23ED16473B6488C4E1006916B686044247BF3777224D5F16233AFA837A9988E436AB5BE485ADC0 -MD = 1A8C0200EFBC0956B011F777C476A0268A74B2A33679AD981B7753064E6B08656C35A020E8D121CEE3A880C4F8A1C96E1BEA80FF9FBEFAD133ABC0865897F8BA - -Len = 782 -Msg = 79EF097DBFA16820E6A40454D428F3FB0B19047DD0AB46588F825ECC6344C53BDDACA3DF63E2FB087984BC58C22F2B61003CEE298C2B35EE788CD4C834A82DE93A04E8722826A645CC3EFD07F32B30C3CD59BC5C82CFF16B213A09CA24A53DA12E70 -MD = EBB9781B1FD5CCC71763A47BEBD38B32E064333D1177D067D40785A431E96F82B26802BDD1A50AEB42DD37540E17F62BD28485C0B2BD3EA7BE1644AB413AEB79 - -Len = 783 -Msg = D03DD6E01CCF153ED2878C9D3DE4E0DE7D96D91A2CE3BFD7E77ED6652616EB87188C466D44E6DA9FDB2015DD896761B88033E0D98B960C322153B51548CF21EF26029556E7FC85D62783B676EE38FAEF56F156383CCD06915FAE4395B3403E50DB66 -MD = 4311F56CEE8BAA8C4D464777661BFF115BEC28EA418CC919D40CAEE7397ADA61539E7330BEB14C672B313D97D35178225C9C4CE76AE8CA7B9483CB6295450DE6 - -Len = 784 -Msg = 6D8C6E449BC13634F115749C248C17CD148B72157A2C37BF8969EA83B4D6BA8C0EE2711C28EE11495F43049596520CE436004B026B6C1F7292B9C436B055CBB72D530D860D1276A1502A5140E3C3F54A93663E4D20EDEC32D284E25564F624955B52 -MD = 99ADE7B13E8E79AEA6ED01A25E10E401CD1D055884575EAB3E66B2294F03F8D5DBF72AB1AE39103189383EBFD2E43258510C124A894A793B206FAC752C035789 - -Len = 785 -Msg = 6A15D2C891310B9D31EA4DE5ED861595938093F969102EC4E61F36688005876CAC6AA4DD19185E756AC6C75B1A77C46952D5147B52862DC108D8B690191DDFB93F9463BC95EA6054688AC748A519EFF46E0D6FFF33F312A9531B90E5B81D1EB9BC5400 -MD = 2B8235E5BAF8A433F04C6E38FC7EF3B347547E7649DE7C663270A9A5BB2F85B1F57A64B7246A57F48C55053079ECA24820DFBA17DCFE524CAF50454641291276 - -Len = 786 -Msg = 4799898B930C206FD677188EDFE87F53978DDFA62418695F83A764F096CF0C3E77EA9EC22552F4EC608B59DFAD49691B076181A15C9B18539A6A64443DBED8B575CCE0BCF1D01DCB3719CBFACAC94E36CD466D253F3192F74D0900667196BFFD8BFEC0 -MD = 090BD0675C32B2C3449F6133993325A81810A2333C5967EE6A5FE3F13FB1E2BB62859FB4166A98FF976455E36B901D18BB545209BD9638AE9D2A269B07EEACB9 - -Len = 787 -Msg = D00AF463BA4905312AC7C93AE0F5814D903C2CF3E4314A09D8083E8FF602ED65301BF032FFFA16E57CC1D39B78BE5F7F1B4E7D118EB4C9C60B2AA752377820F4B23F52AFB3DABA13C33E354F2AD791B98C0285B3289D017FD0B015E275F56452C64DE0 -MD = 0F4B99726FCEED7DBA2A65A5E54B16A25ADD80EEB97B6E31CE05C8BE5DF78A517672A71698988EE3465D5AB0FE8DFB2B3B4427AFE38E102E089C5DB47901DBC7 - -Len = 788 -Msg = 4BA02BD76E684B9DBF18AB2EC6A5CA2EAFDF25F5A7D4C90177DE0F93392983E680A71F03185136D6396A65F583837F84871CF564E62E7CEC42B58C8BA153952B28F7A9880D9D7B5FD8E1CBDF9CA005FD78D72BAAD574414E4128CA28730C29804C9CF0 -MD = 9556F163DF642C744576152451ED3272F4B97CCB9DE27CF564D96DE887E7C730A4AB6AD0CA18F4827B5FAB2E82EED427F7777126315F96E8585AC9BE7831469C - -Len = 789 -Msg = 4540739B329C3748092E2AAAD779D52393B8D97B42F784121F4C045A586BF21E33EC1A55AD2A16B398587A15297B9A8B5858572CBAA405275748ACA67FD75D5102466F5BB433A77C41F442120E1D3C95365C9A014B324B01A75D3182F88F9F89AB5B08 -MD = 94F7F9D048075715E9F74CE2AF4AF1A2FBEDA257A86C34F044975835393AEED697E08F4E51A9C2A787EEEB2530AC97F1744FA98E4E688828619B910DAD911889 - -Len = 790 -Msg = 19218B21018F5392D90433A5BB255292CE42EE74A3CB012B28EBF120F1BB35B3F0697B33043E90F4CA5649984EE1866AFA01457FB5F8A160AA54FB249E171436325AED03B959BECBBC8D6E323507470C147D7CF6D1CAEEA06218022444E01B5A2D54F8 -MD = F6D84379B9EB161D5880A3CAD2F46E4C8D3FEDF7EDBC3AAFA05B11BB8CE46559BD8DBEA03FA230F2654D14541C8FF80FDB4A4F87D7F783F27B3A9AEE725A2393 - -Len = 791 -Msg = 29C1C9CF77BBF33FE3335014E7E88BA5EB777B55DF264589B44D05FC135E4C5170852968ADE4D911476D5C0D0D5E82506345A7B6A1A84EEAACDD49DE05487A6A861CF30AED0B86E320B73AA2E0BF6A67277662C0B7696E585E97F690DC51DD1F51E41A -MD = C367BBB60B780571F342EBBD68A0C72C3BB9A4A1EE270426EAD38C90F594B4AF560083E9B287AF35DED282A91BE2675F1516E7DBBD9ED0EFE2049D9F049865ED - -Len = 792 -Msg = 6EFCBCAF451C129DBE00B9CEF0C3749D3EE9D41C7BD500ADE40CDC65DEDBBBADB885A5B14B32A0C0D087825201E303288A733842FA7E599C0C514E078F05C821C7A4498B01C40032E9F1872A1C925FA17CE253E8935E4C3C71282242CB716B2089CCC1 -MD = D12831BA39DBCD41F56BC7FC071BDAABFB6E7572D08B2FDA3BDDFC6FA5662F4BDBFA431CA2E38B18172709072E50120DB6BE93E86CB4ACE3C11DD0E1F3F5C712 - -Len = 793 -Msg = EDE8BB44D6C9F552F8B2C14750B8D8419370145875D04CCB213E4BD41DA0ABA1CA36DECA9710BB6C846A7DB3E90AECD10492E8135A3289393AD1F8F30FE1EB3707FD966369F766D6331ED4DE80D8252C03D88F6101781E987185EC7E277BFEB7312B6F80 -MD = 20DAB9DD9D86843A09263E5B29BDEEB4E38713B0299EF400C923AFD76E1CE1AC700729126B0B0A9C8066D051FDE034E44FF64F80DD882D9A03992EFCF8785F4E - -Len = 794 -Msg = CE727EA48D1188D5AE6308DE82ACE9B491A784153CF45690B8FD23A7FE9FA4F43186D423735D56BC9D6E4E69E7B203698AA2EAACFE42064EFAF1538434A4780F13D1AEACF78A5F84C60BFA2E8753C1E51A518B05ECBCBBD86FA27EF3B64838F5FF2235C0 -MD = 5D22DE78A0FCD2D815BBB923DC93B7555EF74ADA91A35C62DA52C6F50EE322375A858C8525D4EC77D5B506DA157A8370F633C025C743C9413BFB38E55CE65184 - -Len = 795 -Msg = 3457335BA5117C3E7568CEF312C75EBE57BBD6EFE2C06E0D3457614F429A27A6216928507CB18C198CB9CDEE8BFF4B2EC62F29AA9F9DEF4A0AF45741CDFC3C5B96F10B8E2886AC4D24A6DDBC490E402031DAF68A742AEB7EC1C0426807A073C86C9EBA20 -MD = E7310C9E4EEF6B69F412DE2F877F7D80859FE446BCC37AFA2B8F724DAEC452676D5CD2D86015A436B02F67C1AD013EC23DE154547651143FDF869F6575A1AA8C - -Len = 796 -Msg = 886F0BBC8286AEFCE8684D589789A401EA5EC013B0F36CEB015860168458A68B66CE0917567D3401B6D3725F16089C9EF77978180B282D6C315B54A60D7E76EE1676C66C78367C2F3361EA0D7D88ECBCA4C4BB58381AEB2E5E061B6901C3684599B4B390 -MD = 93BED2F5B2FACD5298DF8B100C49CF1D7781F1E55F7D63555A10BAC40CCDA883F5DFAD4ABBA552AEECDBAB69BE2E9CD8BC9EE5E927ABFC1DF80C68E70E481397 - -Len = 797 -Msg = 083CCE8161113669202D9028456FDDF2F9C911D06B732290F8C17F28675E71DFDAEBCAF0B0E2DFB89336B3B2AA6C21232949AB3567F10888437B8D895B4FD0E82D099C63B8578A51352215309900495A71BAC7B60FDA02318C381A984204532E031948F0 -MD = E81F4CA8D8B72A04048AD2E7DE7B3553B77BE8483869866DCA63FD9E9E5D2C09A72325BACD33E7A11D5780063BA98D51E99A065BB53613EE82CF854F07257AC7 - -Len = 798 -Msg = 57E254FFFEB91C9E6625991FC2AA3083D47BE7A967E187F72EF31EE024FFD7754FCDA48C584948BC4411B166326299D0FE63D2B11A0A5F9395C88F3DBEEEC5E130BBCEA280FDBE851C48BCDF49A56ED9BA9569C244A9F7665E1ACC7921DBD8AB0B9ECE64 -MD = 2C60DC04B6EFC9541ED96F31A711B1E28E128107D13F2541102A8862CDD5CCBC17595872D40AC3CD3EBC07A03C2BDE7E79A0869B243B248DC0CEB7D3FD3EE1EE - -Len = 799 -Msg = 7425D92769338BB8EB433A25BC7CD734276B7735677AE2B95F5B485AF20D238C2EA6676ADE03BFCB54B4AEE8ADC461EE2DF2113987FE7BD3AECFE78EF6CFCC6FDB00C11CE655A2EE21AE4C9C0780D26999674A7C10FBC11780FB0D0C0E9166D34361595A -MD = F2A1D1351EF00BA9285774E1DB77DB94147F433511D134B6F6773D869E6F83E5C192FFEDBBC605B777318D84B5844ED4841931CBA4D4C80C3986903621F94FB9 - -Len = 800 -Msg = 433C5303131624C0021D868A30825475E8D0BD3052A022180398F4CA4423B98214B6BEAAC21C8807A2C33F8C93BD42B092CC1B06CEDF3224D5ED1EC29784444F22E08A55AA58542B524B02CD3D5D5F6907AFE71C5D7462224A3F9D9E53E7E0846DCBB4CE -MD = 527D28E341E6B14F4684ADB4B824C496C6482E51149565D3D17226828884306B51D6148A72622C2B75F5D3510B799D8BDC03EAEDE453676A6EC8FE03A1AD0EAB - -Len = 801 -Msg = A5E5E7F725AF8C544D93D2D409D6F82D3BF941D5F9783C279FC6156699A8D8D3133FDFBEA9FED5446315C33A18A93C006D2ACA4EBB4878FCC55970C477AA4E88D44094B0BFBF12C50CA62EDE8AF48AF3E96F78A96CC6DCD98480086DEC487DD003A4BEAF00 -MD = 63F72B1B88235B2EB561E8272E94B9E0388E5BBD6B46F727F5DDB2C67E991F1B72B3D2903D5CF8477FFD8C9B546061F2FC954CC498C5A4AD16BD7BBDDA9913EB - -Len = 802 -Msg = DFD88A3F1A60E1B9A763B264CFF5CE6B34ADC92B3CCF29C6841D261D0DFF42415D10E3FCD96EA4BCA762BF5984B06F9DD2359538C6EA628D6B810DE79A6E572C18CD3F49DCE1CAC943E9500E19CA2E5B71142B9AC511F240BE6523A49A37282189D4A69800 -MD = CF32E00CEDA57F7A18816EE39EACE75B60D472AF192CAA26740C3A6602B2AB31CAC272EB3F39B16989236B6A1DC003AD54B2E7EC487722FB4BE4FB9D2E9890BE - -Len = 803 -Msg = 33054CF806168A875E95D33E5B58622BD057A49373376322E9350EAC04F7424613A0C86802AEA9B8FD7BB93D41CEAEE53A94D0B66951FE0C7E93E75659A2987833765901F1A4A20A0EAC3F8AA4DC6BB075017812ED4E8CF883BD23AD17EB7DE6CC54B21E80 -MD = F8118DE48D71088B879F76828335611A4DA35F770DEC6664ECFBD2F86EC34C0782E5CA5DFD5DFE0B01FCD34AEE242EB55ACE8F71334F8564D58F31E990077FBB - -Len = 804 -Msg = 7E8EFC3504D6EFC19B36327F55DA196A13A082688FD85B63D0C48369149D6BFF4293D120A1CAEFE18AC17F046B4196DB0D6CB4CDE7739727BCB8880E652C60B2F48668FA3A40B1C94BB393E09E14CB1591343C943874CE4195251D930C772B9439386ACF60 -MD = 85D6AD07D4922DC6D1448198E9476F517CCD76C5750D8F37C96540ABEAB44E5B99370932B214A6D3FAE9AF7B8FC646F9E27FE1857FFCD1A5B4DDC6AA2EC61A2C - -Len = 805 -Msg = EEB67D90755792773D303BFD27895032E74F41AFF1B3C552A2F9707842AAD7745E31FCA6EA35FDD47EA99EB27A2B063B0268943E75E629073E77D7FEC8C2E8380FDD7ADBA292803B3E7BEF8D85B23B937BC2444AB69740497902A8767F19AB91C33EC65A58 -MD = F4FF32396112735D0B02ED2A50BC4EB9F71EDBF429E8E410CFD6C344E92ED37AB033C4788D92C30462EB5B50B034404CD08452F5F7300E8C3B426EFC02036F4D - -Len = 806 -Msg = 9C433E350E1BE986080C5757ED51FCB47EB31D70A9AB061236AAB0907C82C9CCEDFBA2EA62DA2C783CF5151683015EA75DD545E79BAD38DE99B287D25CE11C657D507D94435984A4276D8940F4EA571FFC9B550379F6148C720E4B9133D71EE120B8935A3C -MD = 61D49B3F656AF229A99E952910B83810C20ACBE720F74C86211EF017B4C1916081A48156AF9FE7D2B416D2C437239B7FE8A4EC29E39B691791E5FA0FC59315CB - -Len = 807 -Msg = 769CB7E6B4DF1D6A4E50461EDF4DD06502F2EC543E85A3C64CA6B9FE378E71B1A461AEB8F12A16D4B113CC688BD3E142968DA6AD191EBD84C6FD77268E11FA83E1B5A8D61B5DEEA355E5BE623ECC5C4C5B11FA0B4951CBAF741A674065368F761594D0C77C -MD = F6D01BB2CE5733A25D25F379BFF37E428918B983BA99FCD0D3E1763401FBB75B6133E2380FB21DA1BB38C67BA2F271D79B29611000ABBDF4974C24DF578ED178 - -Len = 808 -Msg = A873E0C67CA639026B6683008F7AA6324D4979550E9BCE064CA1E1FB97A30B147A24F3F666C0A72D71348EDE701CF2D17E2253C34D1EC3B647DBCEF2F879F4EB881C4830B791378C901EB725EA5C172316C6D606E0AF7DF4DF7F76E490CD30B2BADF45685F -MD = CACDCF8BF855040E9795C422069D8E37B6286066A2197A320BD934061F66995227BE6B85FD928B834D3CA45E1AC3844D9DC66D61581E7799CCFDE008639AB3DD - -Len = 809 -Msg = 5972087DF84E1087BE6AF080329EF86D8823D4DFBCF32403E58F9F33F889C15FE13D36E327B78A61BA646D54933A7A7B7B55522FEB9C3748CBBCE5D9AD190A84A65CDE8FBC3195034D419F41B883AF393D39F566FEA0552119F0EBE6A36C80DED27C9E6EEF00 -MD = 2F89BC351D76E99C4935F9A802F450E1D66309BC3099DDD8A9B4D81A72BDDDFC83E8119000E917843DD797B622DC3C97E873206C4A5356E5CAFFF7EEC7C551BC - -Len = 810 -Msg = 6DB3F5D3691D10F0FBF2A40E56C0754593762446B21BF42C602790F3F0510D14464DD730D0648591119B425A94DC7474648127D39AD764698E5690D82357D3396DFEEF12A91F19EC62C6355A363563E08BA942A4BD06E2D05FA5C9037F3766304A640D01D800 -MD = C48C20B2DC33AF97E8BF2BA8B7C621122E30D112A25278F38E68B2BC2E185FDD018822C8CC7FB4B7CA1CAEFA69AF9726BE53AE65886E9D13B207102C0D93A47E - -Len = 811 -Msg = E5EC70D574A9AF9A358F33A15CC8C3830879D52939E6F95A695F76FAAABB988ED2A7BEF8974957C71090D3129E773B56DE379637DBA6BB29E8DC3F7116B67B690A056F2DDCE0A3C3FF65A7217D0F6EBA4BA9F5641EFB67EE88BDD80F0172086A60A9ED322960 -MD = 681D4F14FD201724FD911096FC8192C244F3009D5EC412DBF8EEC9742A3C48E1BA6880F375A9E6BAE36F19E20521CBE157A00C7A27599829F41EBD0F1E6936C3 - -Len = 812 -Msg = EE5B52EF1C171ACEE68C2E3C4AB9BA08B91153DBA6C85CA817BC14E3484EB6B0E4D93766AAF37C3A571A52950EBE5DCBFBDFEDE238866EC6CF0B41FBD86518A07C360AD1BC4AEC074EF32083E9FD19B7F2C19ED5E7A0F162AFE1F1FD11C38F929C3D53BDBCF0 -MD = FCE5723AD71015611CE2E32244597B4BECA6BFC711AB6CFE3CD589FA386BCBB26E361D5DB557E7551E4CC298273D70E2CCDDDE97931758046D9549A370D74C06 - -Len = 813 -Msg = C27E137ADDECA1E45434891C08DE549E79A79D148E46B8A99727FED7C28CBA6662BB9C8DDFC9E631E410FBFA899B2FEA7DD27CB49DAEB1BC51C85F3FE220711ABB10836F97B6A2D0D27010719C002FE8BD88406E051506BD560E945AFAC765C8ECDC0E476ED0 -MD = C4E7AE1A75D1216DF8781C81BD4E5B84CF393AE37B44D0696AF6398FC5CA0D77E04D81B8CFD48177669598F8392C2B1F007C12DAF7B54D2038319EA9956FA4DB - -Len = 814 -Msg = 1A4FF48A014B9B9B73ABF97D0D6C8043CC542ED70226C9A06439251E676B59DFB775688A6AC7BE695A4C768F4A635186C98F7D87D31333BC0FCC3562B41333AB41A1495C615689892008E50C46ECD6F0CA33672219F15F0F583248A5283B3EEE67A750E310C0 -MD = 2BF30C7FE07E965EEF0A88725E842D4517F129A97ED5E4D20C6BFF48B7F3DD8E1AADC2D2085DB7B2BDC5205768F9427A0838A288842DEF0452C0B76D8A5857E0 - -Len = 815 -Msg = EBFE2BB16E038B5E58D23E44300E75911B153B031AE0EA461F3AEBF8DD9B4E4BE5703F18E8205293E2E0415AED09AC41E8A5937FCDA3796C2997143F5DFB6B585C7652F1ACCB8AB4B6123196628880670D5B07DD989E04474372E32FFE65CC7192C42D25B1F0 -MD = 7C0419C8F957E238C794907DF910F8B2ECCAF84600F7C1B99931BA1B9AF41C627052F28F89FCA52442F2523534A212AE820136A6BC5A861E0E6E1600C3AC2628 - -Len = 816 -Msg = 006917B64F9DCDF1D2D87C8A6173B64F6587168E80FAA80F82D84F60301E561E312D9FBCE62F39A6FB476E01E925F26BCC91DE621449BE6504C504830AAE394096C8FC7694651051365D4EE9070101EC9B68086F2EA8F8AB7B811EA8AD934D5C9B62C60A4771 -MD = F454A953501E191A12A80C7A5398F081CEF738E25D48B076A52F77FB09EF0BC2325116020BB06C2C585DA9F115BD9D8F13B50E8E1FB1664450FAE690B7783400 - -Len = 817 -Msg = DAAF92F1DD17419CB8CFFC3B36436412E393C29822EACE765F18D5531BDB87BA878A816D73FA52842FF6A4590614E9B50C1FBA6CD3D538E8E07E1BB7967014D5E4906BB5CF070097D4B57FD44E705AE825A2AF35E265639E85C49323CAE2BECF48C13E400ECB80 -MD = 0B0953747AA5BE93A933988718D5AE79B303BC491E4136CBCC5A610943292E31E4ECEA9E906422803C6AE3AC4866CF7D4A4BF4569D6258A7C2C26981167D05BE - -Len = 818 -Msg = B5655245E132143776E7DF7EECF7590B09EC823EECC6E2E3D3E4724C4CF7264094A7CF6EFE235AE4CA71C11A64D020FE13F472259AF9D0C8773CB0FCDAF86D2D602CFAF6690854CB8831730529950DF7E65D8EE9CC3B4C89CFECF054EF0D4BF8404D8F9B849AC0 -MD = 461B9C29A9C20231B294A699914D471E00B8DD98333914F7CF66F89DCF4EC677F0CCE07AE8A92033DD9A598F8658669182428E83B16E70584B3155C2D91152E1 - -Len = 819 -Msg = D4A9D0503F80C8A4BE00A5A1BF4139B846DD1784E9547D30EBC6241ACFDEEC1DAD4BE6D11A8AEEC157D59F61972414BDE06D17CF56274547201A5F90C9EA82B64E88D78850C7F968E15AC8A82BF08FF53328A3E15DE615A21C28A3D42436F84C55F234EF23CA20 -MD = A28E22A5B82583859AB542535E986F2CD7403B881F5F15614DD7EA0C49A3C7AC846F8AC5F69CC4BE34E72515DBE8B5589FED90BF3013D0D04556478B4981BBEA - -Len = 820 -Msg = 61EFBDF5987F9C45CE71F21DE495E46DDEAD02E679ED9C83A0613BE3FCA8660145F47340FF300657271024C3E8BB7E27F31406EAACDAB3C5F299B66C101B0083EF230A7283E868337E8699EE3A5723C42BA488B0FCDFF172E819576C5993B496BD768276A113E0 -MD = 89166009D40D729AFA0D83FBCB9A025D294DDBF363219B4F925C4B9271281C8AAA5DC822CA10476AF8076310E88EC50A905525DC62BA7838AF02E9A3E3DE09E7 - -Len = 821 -Msg = 6674A76DB4DB544DA1D6FF5D7A01ACD0BAA446911421C7BDB19F347DAC8145337FA2220A1760AAF88A5803A6C2502E796BA486600946B60F2171E7EEE138F9A93CF7EA8785496B078CF26FE15627240D528B205054AD68E6FEB7F5F0B0DBA570A86A44B88FE3A0 -MD = 15658B9A214E8ECC42132B594D580574EF87602111294B721A5326BF1FB3A8E9A7FCF23B38B92FF1A04D42B92AF2CA6CAEFAC73326551FF8A7751A302181BD5A - -Len = 822 -Msg = D5CDD6DC483DD693792AB8599E31F7E678E2E3F50E9B09DA1D16537FE21B8700B47CFBEC2F2B31C83CF612594A3D847B2A0497D3C1A4E78A75CFE94B850F08580D799921A2A105B7280B07629845E2CAE0ACDD43E62C3CC76F2BE06F11C233B32C8CB32D2CAFD0 -MD = CC64B1727E4F006815EAEAEDF6DCF8C1B41C727074AD739AE6133134E78C9403A1D8C7E1A5F3FA1F9897C23BEC4942A29308CD70EFF676450B66DEEF786A9ED6 - -Len = 823 -Msg = 95430200EE2A59BA3D4FF5176E9328EEB792F57838631334BA0D95862CE2BA8550ADDE662EC5689D2932B6637ECA4268861BA868C5FB08DD016DF6E3F5E8F7BC86C063F0B471A94BB02C999C13D8A89F2DC536ADFDE9048E836674E781CA2F5247A23FD280CE30 -MD = 6F14214A69DE3E4533ABD71F5BA613A024FC85A0120613F04B0F730863126FA4AC6F7654A930FDBD112C221490094AB40747F5B5B26703722301908FAA4E24F6 - -Len = 824 -Msg = F13C972C52CB3CC4A4DF28C97F2DF11CE089B815466BE88863243EB318C2ADB1A417CB1041308598541720197B9B1CB5BA2318BD5574D1DF2174AF14884149BA9B2F446D609DF240CE335599957B8EC80876D9A085AE084907BC5961B20BF5F6CA58D5DAB38ADB -MD = 5F968CC6ECF71C588A3C3BA68858BBFF96861F66C0733FD61FA91A479A49618DF22D9490219DF8008DC78840AE022C5D41AF2B890D0214E562DA8DF0CB3F8522 - -Len = 825 -Msg = 96EF70D6957AFED1EBF9C5E3E1CA33DCEE14589C8AD2C7819B401D8C93473A06D0CFED12D4155488DE13496426F7808C666927DBCC54CD58F82A9D7879541D6F66FCC0239E89DBA84C85AA34FFE93DB632AFE2B490E2794F95A8A6C14706759688696354AF9E4C80 -MD = 18D7BF6C414D1CB125359C12148E8C6F04B3D697B289F42F5BC7C2C2CEFC9EE0C7383138DB1851D4E31DA635A8B4B2FBD9DFDB8B3898C83254B2DF32FF1766CD - -Len = 826 -Msg = 22BAE2BE6335304E5F9779FA2FDF496D9636492A8B3E6B650420DAA6B45BE8B25A2F00045DB1364B1F69DF590EEF88E61EF2F2E11FF9903C9A484B0EFB2A65E2984710C71688A00A8C04AF9335A826FC0EDF197B3F3BE1AA4685BD39847A18B7F388C56D5CF749C0 -MD = 7F7FA88D91C0EC6CE9EEBF1B07A445DB975860FE514CAE44B3677B27C9941FD8C6BF732C3250E368C80097D6842520680AADB5C9487E6C4A7AC9F2D5C3F71A3D - -Len = 827 -Msg = D076043F4045A478C51530D457FC950916FAEAF555C2B28E8567394D0BB8A3C7D8A7225E6C0C94D39D03F0F50133ABBE6F009302153014025FB4B1F7B8EFCC9F4F9C3EAB0608DB41095AAD0D2B63037F3986DF71D6651946EE9F18DF52635BBD360F21E2555C5020 -MD = 6F7C66F73FE9C35DDB0995D2FD37CAB11BA3AEDF6AD98104DF78DB64017DA231CE0EA8D56A8EF75659EA2C6154EF13F1EFBC3E94EFAADAC7249D1D839BDAB994 - -Len = 828 -Msg = AFC0DFAD531BFAD5320903F56AF3D1C6A1A7EEB365004B5193F48B3F1B6364B502B3E767BBEC8D3C8CB1888BEF939745427AF225DB0B80227382E93478D80798D6F7CC79E1229126763B5595747708412E2A1065468967AF88E87CA44BF7C70CD94D6C0285D77D20 -MD = 5CFFB27AD3757E45894FEA0DAF0C13E3B4CA597565226B7821BBCAC7FC0F46C59B94299CFE30A65E308DE6BD018B1C7C6B26F87E30059352E6C3075D23452992 - -Len = 829 -Msg = 38F33BD532B7A176B1BBD5440A6B6F34BA5EB710A4ED3B73195E79CB0D227258C97771B69CF8319D30F71A86B06A04D4F8F564044B25595FDDC559435426F6802FAC0A9B8EF02A66CD99E052320F3EFAC5E98F41DC62177FC5422C0C7CFFC845B61C93465BB61A08 -MD = F07AEEC9C07F8EE1AE8352939FC41FFE04278FABAAC41EFB4008C28C5C48AE26134EC0D6AFB11C2A76337A960D4E6F048EAE5A4B2CCDC6886DE00A9E14C34438 - -Len = 830 -Msg = 4A1D225317981D38424F1CCC96F7D895EFD4DBF51A0B568BFDB33F81AAC34098EE0D1F8F5819885FCF53823851E2DCDDC4D42164E223DB7F0C8A25655E91D193D595D31808C1B11115BD5913548A2A7F7C954719A1EE305D67A59AB3EEE0BD1326D2C46FAB79FAA4 -MD = A27B5835CB7F07805A14FB29CBF1EE72A29FCF6F75C68248F0A71481811F65D94C8E58A0681E246C7411BDC2184CEC43CBFB62D10539B50AA023346E39A6ED4F - -Len = 831 -Msg = 071E9535D8B487FBAC04DD0C720CF0902365F55279752F4A4AEA2DC849F6F596562DD874C2FBC90A0773CB9AFFD80BCDEB16673471B2A4EB40410CACA3D7DDDC57C727D3FB4D25DD147C77426DEF0A86BC0840307F6495493714BA9C0C3C1F4959016F1F81A5D466 -MD = 623DF47A3D590EC0CE18B0BFD0C34C2B9A053B93776A0BBE0998D541B3AA81AC724DB770ECC079D0584872687581F055D91617A954B8A799E4F1F7E9FD7A7B36 - -Len = 832 -Msg = E35780EB9799AD4C77535D4DDB683CF33EF367715327CF4C4A58ED9CBDCDD486F669F80189D549A9364FA82A51A52654EC721BB3AAB95DCEB4A86A6AFA93826DB923517E928F33E3FBA850D45660EF83B9876ACCAFA2A9987A254B137C6E140A21691E1069413848 -MD = E7149461F9CD00B71C216C50041B3EDA9707D7360D4C21740C44C212256A31DA398FE09708E450EA4E2826B7EC20BEF76CD2FBD9D096AF6F77F84ABC2E4FB093 - -Len = 833 -Msg = CDF3B81753BBE183F089CA5B99AC4DA2944DD2CA4AD5502A5FB27D51FB4C5DD3A73337F3CCCD5F3EDAC73F23BC14677F8862E94A9C899607E9CDD242D399C9CF2CC17AADDCB2B1FA86691B82BB3F80B8F53BE95B3806BA1D61555ADA06C1F16AA011F99CF8EC913980 -MD = 35FE65AADF4C5FAC815A3B744DCF8E4017FEA579B4F58DB253C0D5A83C076CF40E6F807313FC7017DC8977E9B3E3318B4373E223FB5EECF47AD6853ED2144704 - -Len = 834 -Msg = 1719A08AE56DA8261AC8CC3B0E644425C1A4AEDBE7563BAF61591CA0462F4AA5D0D31CE15F9A616C8980017C0C886C80AB258958074ABFCACAC023E671D8509AC053F5AF9456C22D9A85BE4D1788DC12E7F14C076534BEEA7FA37921A4F1336B02721AD135B6E57C40 -MD = 674815A9E102A9DEAFCF541F8496DE128C0894491E8CC3AD3CB5350DEAD32EB99C8701E10950B92AD7A94AE95A11DFA1BE3F0FE2634F5BB2AE2131C3EDEB62F4 - -Len = 835 -Msg = E483D597CCF87190A723FCB835B7D58E051122D6641B5A2BF495BC121B50A1D087146DC722D08785DA3690C569CE1E4FB0C1241E501A4D3E438BD598E637275B08A3130F13789F01E1F0B87317BA3C70155E6770060C1058C73966D534B38D1D99AB40C39810428000 -MD = 450BE9B7A08DC1CF74E1CDCE8019EBA4D7D970420CAD9D542AD0B503F52AD280043D435A1285453F1CF6575CA65F157240E78FD21CBFDB64177395808DDD106B - -Len = 836 -Msg = 6C9018345E122A389CEF69E5DB5FFEC001A5D9BD4ED6A05C82D236CF90A6D4FF1AB5DC991572097413D308272FA40EE4EE7BEA95F4EFDAAC6EE20EBFFED180C9A002F491CCC42490B1E51A284E309E326F43530A5C2745E82412C6A6C7AB8603E0F264F8B9941FD260 -MD = 1A7848FB09ECAE7CB6CB11408F70DF62495E97926FAE0FF285E7AAC00EFA2A760C6A0B550514634021FF9FF3FF1515F995AA5D3AB019BAF7C5B2372679B9F6BA - -Len = 837 -Msg = F3160A912C1F7C08CEAB5E6C6E94C50FD124F3DD9C4D8034D27C80B39B7B9BF130F861D365AD61DFA407A8EF91AEBEDBE23E9DE96406FF0C6C312553FEDB125AFD59F7711210861A5A476B293F3CC355425CB949C2E833AE4A30DD9B4CE35EEAEF2FBDE4FD6D32B660 -MD = 3EC7D0A644BEF3123E2EA94A26500CCC28DE64AA508E5BCEBA3912DF9D53FBC4DC7D56B8D9C45875F3DCA095D35DCC4566A4B29CA1C148E7EE6EEE2505B7DDC0 - -Len = 838 -Msg = 4BF1FAD35729900567FB4A3E0D5681C689CD0066EE0E97479A4A746F5E771517C42B6B827BFE16381CD52A985002160833BAC1AF81269F18821B0E6CD6C54AD33827BE5094BAFA6A08A67502714EF0101D5D91E8AA9AB81031AD2B6DF4963709DBC790ACB88A527698 -MD = 13A7293D01C12BCC0EF26125731353F9B5951014327F6E46300C18A204FD20F5E1A219B825CB7FE08E5454C7412A4FD00E6B37D3F6D387538AED6BAEA628C83E - -Len = 839 -Msg = 195361302C2F5B1B927CEE67B003E885A4E1D4FAFD7D13B02F5FB743608902060CCBCB200A57B374C8D220828DB36CCDADD6EE2AB33EE53B2002203D632B36B45E13778DACE865A715B375FC8CCA7FDBABCB5F1FAC8BC2B890D5A460583BDC5CFEF67A0BBF143D3918 -MD = 06C6142C535C5A82244647E2C1DA4A644D7B9E37FE031BB160F018BC0A281E32E39E7E98B6F8F6458FBA84E2562A494C06C3010A56E99C4EE2340844B445A866 - -Len = 840 -Msg = 64EC021C9585E01FFE6D31BB50D44C79B6993D72678163DB474947A053674619D158016ADB243F5C8D50AA92F50AB36E579FF2DABB780A2B529370DAA299207CFBCDD3A9A25006D19C4F1FE33E4B1EAEC315D8C6EE1E730623FD1941875B924EB57D6D0C2EDC4E78D6 -MD = 77097413CAA5A2D38259D47EC078871FA09EE5614D4C14FEB7A95C921C0AAE93B8737A6DC89E57693BE8A0710206664B80B657A1079605A0FF9664BBCB0722D6 - -Len = 841 -Msg = A9C9225032B1662ACA561F01B0CD87798649F98A7C3C71F716AF72E55838536563BD092AEC04323328C107EE20D704D0ADC7C0DA8FE6598218078DB1D0F00874BFA7048039416EF082B6925623FCEEB145919D75C27591952EB7B363F784258033AEC75D5F3A9D81CC00 -MD = 74A80FA23C1E827EBE79634BB3679F796781CF611F6DFB9C30684D7E0BF91B7CEAD75063211AC5CF0780F463D5B43327A216F11EE65955BE4DF2A0F0DF040ABF - -Len = 842 -Msg = 1713AF8638ACE90592AC2B3BD76514C19F032C734641D29131412FA04ACD5C80CAE7FF34675E7B26D38488C0A5A34F88C36903ABAC06A319F59559C52F409C83C92CC07CAE1E1957F1B54ECBFC52F5F38F4B03D9573F5E2F5A5C7470D7F1F0BB4D356F13C4D401580400 -MD = 99B16CE27363AA9D6A166D05C05E675DC7B8A31310332C699BE3082F16AD050C09A44F5D4C55F34A965775AC3D5C5183665F7B240653D4DDE53898D31FF8F5BB - -Len = 843 -Msg = F0B3C5E666BFCA1D234692223F77A6B80A0AF6C1E2456E8BFFE24147DC8BB7311386E21BE38FAC428447F89CE69BF5D399D4F10CFCC384B0643229D22AD5D1A96B5AF06743CBF8505C99171439E6F6305C28EC2D87473ED6181BD2FAB7C35610FA3D4B373D5683904EE0 -MD = A365B86031EF9B228132D460043AD444CC1325F72503E8F819EE40DFABBAAE570DA5CBE1E15FC81A40AAFCD9E2A8811384707E183E6021DADA533C5159BA2046 - -Len = 844 -Msg = 51F0F520821988794FBA4A96C05CA8128955155F49F5B1D4609C8BEB3796E606E105873C4E1A9E1A1BBEA9C037BFA266748DE15EF59A3698068B2F64E448661E528299DA53F217527109628261FE236227CE792C93C27A86B742023A91E9F4EDC9C16AF3F9720BD6EB30 -MD = 9BE977EFC562631EF0D063AB0797C8D2B1756E197D3E93624A79AA41B857D89BC1AB02DFC1AECC38DEBB063D8200C660C2CC82C00AA1923A4CFFAE7D28645C20 - -Len = 845 -Msg = 5A601FC60FF03D6849FCD88E8E124B8AC906EB9002B91465B98EEA0F1C638EC35989EF537DF63FCC37FC465C3AA0E409378786B21CD884CFAED67C00A4784DC7855FF0CBF4DC78A9FCA92EC641BC5EE01960E6FDDE2418FFEDC338581479B09680C1579A063E7D7344E8 -MD = 06FAFDBC6EAB2E6766E09D1CAAFE1F48A3D3252F447E6EC8E95DB6E2964BE4B998CCF0036C4AC734B90E323E78033DE90BC30F37905ADE8217E771A89C02030C - -Len = 846 -Msg = 51B98503D91D779B7661CD7D28851F2F5FBD10D3FF1ED31743A9FC4B6D65FAA01E7385E0DE50DD1B4BC392D09CBC2042DADF5A827B305CE513648A46B35C003D6EAE1524379BFA009FD0CFEC537A5BE2516A524A8309A65AD93AC83B83479F4BA700307A7A1C5295CA18 -MD = 9D8A10639CC7F0E8B128C89FC514806964BEA4CF8524135AF05271360335469A95E44308F273238E7EE0DE06115A03D6D1743BCF366590F0104C27B0224E0D68 - -Len = 847 -Msg = 3DD565D9B8F291493D80301C50833F016FDCA70D35E6B66D8ED41AFD12B21AF8C675D487012EDC75A168124C9F7AFFEC4DD754A3B3050AF799D23E9322C328C61E131789DD7EECC47D0D973908A4B2706E3AAFA9CD9285470DD1877C164B12B9E45B7E8804D1C01CB866 -MD = 0DCEF9BC278A70727CB0A088865A5343763ABE25D86332D7303B1714005AC83D0A15FA6C50B4724F90B638953F7D16982073C12E99E7757AACD2BF89D3D0300B - -Len = 848 -Msg = 5954BAB512CF327D66B5D9F296180080402624AD7628506B555EEA8382562324CF452FBA4A2130DE3E165D11831A270D9CB97CE8C2D32A96F50D71600BB4CA268CF98E90D6496B0A6619A5A8C63DB6D8A0634DFC6C7EC8EA9C006B6C456F1B20CD19E781AF20454AC880 -MD = 55D8E5202360D7D5841419362F864CC900E11C582FD0CAB2FF5F1680F6CE927B5379E27A335EBAFE1286B9D4A172AB761A36EADE60F10468EAC4CEAFBF63C7CC - -Len = 849 -Msg = 8D22D0A3F113581C2C91A309747D3480D111FB0162796E06D48DAD005BD2275BB189B08A55FC56FDAC5D28BCE6F9EDCDC32EE464C1675C738AE8624CD20F7FA84A173329E3623DF7541835FECDB68416F665E4F5B4A357D74AB09EACD4EE6E3A301733536294A937FDCE80 -MD = D3042F5C7A142A0B5CBD66CC8714471633EC7F4FF0A95E13FD5F150ABF110A802147C3D712F00CF6997650BC316F5B1943D82EEBF77B4A3C3ADE24DC94433DBD - -Len = 850 -Msg = E7EA0B40D3BC92E9624256442D52F477AEBF8473F1742B50C80783548BA450FEBEEC40D7DC7D3BA8D2B03BD72CFE1E36FEAF85681D155C0F435195E7533BD6048FD0796C05F6BB7B539F9EA5F51C16C6AC74DD79C3842218565C4B46D85EC00FE324E8489FF25FF5DFAD00 -MD = F88507B62B41AC492960BF40A0F7F25F7191C67BE8487377D8ACC5B7FAA65284C2FC616C4CD8B091F4C5358D078F65072646EBAFCC89ABD46EEFF2C1CD7B7FC8 - -Len = 851 -Msg = 60A997F14924AF0BD818AAB8FB4FE112B298FD0D7556A4A118974E1612EDF6F479C5247F4BCF1E7ADD3D1D485317C668A1F627E0181F9E6ED35C4499A487783CEEC5F7AD330EA18989700C4A622F578A4A04FE0DF9ED9A7E45D7E5D79E5F26A68B0CB8D5E5D96CEA36EC00 -MD = 41541754E2828798FF487953C33F0DA8FB25DBEF10209EC62EBB3EC19BAF5B0E4454A4B11D382F07DC2C561D6CB5A04E4EE86A534E02E81AD4C30B6FBF0D0065 - -Len = 852 -Msg = 162EC5B24DDFA48F4AA65289645F89CE3991040461A4240C59397253C89765295B27B12E19D5C1CF9080B45AA7BCCC14A0A79B3D7C428F48397EB429E925B4FCE06782DFE2487C6B0F0480B8124A15F6301259AD8211C3D859B705357E8D23AA92EEE769149F5171A33C70 -MD = 96B820BF84380A75DE368229B88EC68D56589B69ACBCD46130F2D5050CA2B686CA218BAD369AB71175AB65A886CEB211A5D32954FF27D7EFFE5C92C853F13855 - -Len = 853 -Msg = D9C4E4068DD2D247BCFCCAEA5734472961D5C916EEBC714CC0FEE54141CC5DA3435CF8D492FE3BA399ED175911A195FCDFD22EFB57FD9D7D401C445B29AB330211E3103399794B205EC65B9658F9E425972C214ACFB1F1B481CBE2F4CA561564DA47383772CC8A190A1090 -MD = F795C6DD34F59F545CCDBB6F9012CD01BDE1AF732ABAF55771AE72AD821D18595C8712E28A70AD72C01C5746D0564F42C31C73A0003DC0B7A52B5688D7B144AA - -Len = 854 -Msg = 574493FD995F2E299A0794B67AEFEC00A2015B0DA8E8FF1C1913457580BBF6812551A2F45821B5C864B065E9CF8CD6A4B2C7E11B64F7F572824014FDA485FD6235D30E9B7ADA48FAEC98F6AF9E5022E422037AC57EDC00EA528181E780863EF47E834E0F457FF410DFFCF4 -MD = 93FAC97744666792823BE29F1F28BA17F988AF5943802AD5B8C0D13E98788A0DB1BBA9EC3D0408BA88C208A6388596CD04FC550E112CF1FF1DC3172E4DA97CAE - -Len = 855 -Msg = 3AEAB6285D74E6AF887D78B6A22059B2238CEEF2482D961A9C36A032158A8262061336ED09FFB7ABBD3D49B8EF0851DD5DAEC4970D27F6A69BCA5117AAE0593AEAD6BC6615D11ED11B057DCE996D614FA80DE96EA704C132578E9F20550659A6E483B4893122FA3B224022 -MD = 92F5CF9E8A54CB513A6C68C196AF53B368EA9E9F50210BE0EBA22E8F0B89B63967A5926382261774C7A14D79E8E9594A3D4C63FD5C98F35846ACF3A3DB0B6784 - -Len = 856 -Msg = 03D9F92B2C565709A568724A0AFF90F8F347F43B02338F94A03ED32E6F33666FF5802DA4C81BDCE0D0E86C04AFD4EDC2FC8B4141C2975B6F07639B1994C973D9A9AFCE3D9D365862003498513BFA166D2629E314D97441667B007414E739D7FEBF0FE3C32C17AA188A8683 -MD = EFFB03B497ADD6230A0ED99122EA868138644AB81E861491E526FAE37C39872CA731804A0004599849478A787BC7FCE21903ED551D7DB881D2A2C367B6168547 - -Len = 857 -Msg = 11ED52B37CB6F8AFF28BFBBB49E4E346B84CB02B5DEA39CA1409C16C589664BABCE3C7AB4539626907269657249DEA708A63E1073AD1E2AF1804E43472399B6EE58992638254B581843924CAA9AA3C461D09241E76FED2C282E07E95039C9889DD6383E8B1C941D70B5D5280 -MD = ECE4FA4C076ED1C887E0C32792A52FAE098897EB4ED6E96D39C697606C35F00B0EAEEDD5E49B945D6E30022E977A7AAAF1AAA45F52035D70019D7723438CAC2F - -Len = 858 -Msg = 716B179648AD3C2346DED9AAE6968D91088CE60038DA2898BDF5645EA6EFB342DC043F21ED12CB2503743B618600B92EA66543A0B676165A2C161876E5E74917D1CC8E6649C51B6C1DAAD6BB39CE9362C1043C6A2DB31C05C64CE78FD3A33CA595A534FA036E40A89712EC80 -MD = 955B944130AD02C026D664E08D8231DF5DADA7E34CB9A83DD49E872BB7845948F762D44949DDA3B6E1417BBC6C2ED2068635805BE78D5FCF3E045F8ED321D391 - -Len = 859 -Msg = 9FE7597F6E6F36CF0880765DDA6B7B9DDFD35B1C1F06F08A234751DA553BE2E54CA9FAA02751F6F44C37A69F666D12D80ECAF508185831DACB5014CBD3F8097B2D84DDF808CE2286C8D5502C3740780D2593B037A24A9A5A27C347E85C6C985AA933DD204E47D33EEE294440 -MD = 631904AB1E61278CAAE6FCB3B5040A61A2439E39EC8DC29AB69654E69533D6B611A12E3302C446CF307F6AE2C6000C74D66246B8AB7620496FE279ACFA70F26E - -Len = 860 -Msg = DD644126DE54607B612C2384A80B3B47F3E3278BBF40372D7DA4C53003A4F7D39E845A7EC6E6FCDFEDFAFA31C0B13F8988F48F2329C0533E16C9C84FF40C123C421BFF9D8CC1B5561F1BD89178360ABDA3B29CA3870523D18FCAC8FF4B462C3C0AACDDD7FFD183FDC2E65810 -MD = F62962EFBDA718A60467A48C858CC6BEA1FBE2E9797ABB84934FD957593796FE732A65D31CC69C21453A58E07BCEDF06D76600A6CD5F1F25091BCAE587B5B0DA - -Len = 861 -Msg = D5836C5A1E008D30DE039FB99096EB19D3A679E32D33ABBF7F414F37A9B1B790AAB4625D50299487BFEED13AFECD7F6BA9995AFE7872151431A04E04D101085DB55A6703858F0A43226CBA7343076690B2B97D58F1B39226F5353073F53C4D2B9590AFB71034B2929340F528 -MD = 136671D52E299466920A0AAFA94D7496D6D0A59FCD3096EF15849DF2E3A05E819BB84706A4BF18CD7547384CCED845DE329C2AB06467E2026B555F7E0F557787 - -Len = 862 -Msg = 5AE530EA690D546A4B86ADA0775066C3C7C94A8F0503A0F1939EF21BDF7916CD3D63F154C91C401B9A0A875DC17927E2FC0CF66286C8A2B2139F573036CAF94B2DCC2B04598ED332975308B684330C8FBB7045690E25BAE8CF2015F9927C73C529FB699F60BB9D272BAD2340 -MD = 5421FF8A03CA5AD2F6E4EF948F8E5AEBE69C41D30248CB11E88A5D2C8CAF993793868CEF92991E726EBEE8D2D162A413726689D5CD5142279E6D58511C8766C8 - -Len = 863 -Msg = B24C20ADA2E35BF97724BB745334D4DF9399F22CC3D7E249ED004AFA98F4E2CE79567AAF543EBEF35DAE9D4545185B88BE1D33E2AB5E5B5FFBFAF00BC96AB6F4BE5A6A3E12E173884461C5DB1E67A81686ECCD9B45D69371546A28C50DC3B2D21EB097D20C14A7EC4F8F8C38 -MD = 17F738FC401F2471EBFFE9D0C6444404183AEA54747689E08A888DFCF187BE4092F082023F31D92A186913BF2C1ED33828B95BD8A93582499C92CAA7235F6132 - -Len = 864 -Msg = F31E8B4F9E0621D531D22A380BE5D9ABD56FAEC53CBD39B1FAB230EA67184440E5B1D15457BD25F56204FA917FA48E669016CB48C1FFC1E1E45274B3B47379E00A43843CF8601A5551411EC12503E5AAC43D8676A1B2297EC7A0800DBFEE04292E937F21C005F17411473041 -MD = A2269A6EF2EA8F1CF8BC3394D27657B0DB996C55E7C47784C0B451202FC5279679D79E06F8DBAA9A63665FD0E914D13C6E056EA006DAAF4CB61D2629468E3D25 - -Len = 865 -Msg = 6C089DC0C0746EB94EE1BDDD372CB9FCBBD340F858EC3379B1B43C0B9F48E9FD66FEF9AD9AD5F9FE34E8FC385F1F23DDC6D4C6E4DE2AA2EECFD328EEE188955A5D8A3BF87A885DE41FCE956520867C43A00E36D0B6943B470B52584F5740058D78031B46DEAEF6BC9B76D02880 -MD = D4F0F4712D82925FB5942B6058733D05214CCE9D2811A0AE34E823551E3E7270FF7E59E82EA7D8FA94D23BC8D973797E3333291BF460B3907147793179DA978A - -Len = 866 -Msg = 38EF1659BF482F6DCE756B7D3B7F96AA8FCC7C25A000C590CBAD9BE30F5BDDD941352621883D0E5135766E147578D3553A484BD407011653DB0105CF28DD825836ABE332C0E04D6E36981290B21695B213035F4A39A7230B93A1174FF7D6107145273A42177F9649D5096DC980 -MD = E169A4856B2F552DAB252B36DB999ACF92E1C1EC8582563AEA9A553832CD8E5D5DD50E12659F2FCF646F3FA2AD63EBE3DBF873FE5426D83DC1276C517AAADD0A - -Len = 867 -Msg = 1ED4FFE25D9FA1F051658E44DCC5299DB496FCF0BF7B5A0533685BE2A96198C15259A21527C83951DD8AFA04F65978A7CA01CCD6DFC6953EF152B8B112980136BDD47C78B8E8FD660BE8CCF67D890173529061C722ED593478ED4D2EF7FC0787E2E259045259EAA8152576B520 -MD = 9B054CC3A4E430EEEA14DD101DED04B41E6777E7B25D75E097526EAFAB3C4267F2064FFD4596C403FE1D51FDB02C880F5A36BAC2659816B747C1C02B5ACC637F - -Len = 868 -Msg = 4EDC5CDEBBAC7C80D4C9FDFF4D3482116A02FEA7E4311F6AC00E17383C6E4542D9F51AA753739D1250A955B37081BB573B0F06103300CDEC753C7EE544B36A735418EEF115BD4777871F887022893C4B51E54F90122BF9A06EE20448A7B75EB649A36D6E543765489B13A1EE20 -MD = 6DC544B03483CB329B09768A16A2A06FAB1605ACF525273D85F12E407C4B219A7894AF74845592D8F8ECFAB127A6C0C14BA793D3C572A1C9CF2AE94A7459792A - -Len = 869 -Msg = 98450F06D846FF0F6DAFB7FD5A9E902537527F31FA6CEA70B8F22880A9DD01F1EBDF20884D235B884F438CE98B5420F195EC0FC4631FEBA8964141F28EED890522DD31F93EDEE85F96B6DAF92A85BE48E959642E922299FDE360F25B5BA2BBDF1AF40A222D09EC045A5AF5C608 -MD = 839A89C3AD716524E3EE923EE8BF81C010F777264346174FCA5BE5CB110D9BAD5F8A68EF3A8AB97F4B3333F95177FF086D19F1A80C8516A511099D617248E0A8 - -Len = 870 -Msg = BD8C839CD9FF816E7D8706EB66F2FB60D3EA400394504AC21A3AB17DE594A26A7334A8F7A6AB5576EA8D78A6C69F1D9E3EA5B7AE20B2834C72FECB08423244FB7DB810CDAD3F041B54E12BCFA6678AEA075A366369525B195173665E78C0953EA46C4116D7EE9CEC0041A9BB0C -MD = 639EB0DD0CE80200F6149A0136B20F0ABE2DB07E3F1BDCFA12002E7D2ADBFDF2618F817C5CB6A27AEB1C91EFF2324A1C36C0BE7531589CF51F218B340573815D - -Len = 871 -Msg = A4C6DB6224A23DB87F291FF0B0C6C2A7925224594E60E1FAD4D4EDBFFA35F5EDA3798029C3BCE4DB2A78AB04C4A408D5A542237DCC1330AF47F0546D35AF06B2977DCE2678814E30B45418B5E97C6041BBC13697692C347769905D5CF06877A1EDCE1D6AB4F10DC0FB4F314648 -MD = C37035D55D8983E50E18EC8B4932437E1ABA6FB47800D60AB9F85579D555106BAE0620133BE557FF0DF13D64E9065C00C5E9E7847C2FE85BA15998E713CE392D - -Len = 872 -Msg = 758EA3FEA738973DB0B8BE7E599BBEF4519373D6E6DCD7195EA885FC991D896762992759C2A09002912FB08E0CB5B76F49162AEB8CF87B172CF3AD190253DF612F77B1F0C532E3B5FC99C2D31F8F65011695A087A35EE4EEE5E334C369D8EE5D29F695815D866DA99DF3F79403 -MD = 5A2970D5EC346A8E4E1D5D1E57DC22F6875DDF1CE3626B49A91109E0DE991033E932F883B6A795016D5014E268304ABE2F7577505AAB00956911781F075D113A - -Len = 873 -Msg = E0473E8455316C13A301D697B9C17DE7D843F6203E669CF502F2E7260F0DC0717DF3AF7C64C3E28DA3A46C2DF401CD0049E5008D2FE32BE8060AEB272720585B8BBADB413547FC5EB59680CBDD68430B7937A5FBD3E83F9DC8D08CC928F48773A8166C4616C53B9CA0E8D56E0000 -MD = 8C21E723B5A4C545C997E18EDE9222F8FD3FE57AF0B33CEFE94565FDC78245F05A9E938802E502B5B99DE255D19A2F71D8CA200AFC6E7BEAE5A541607950DD34 - -Len = 874 -Msg = D9293EE8603E4D1977F7ED45626ED5498D7FE581F27BD0E62A8608CE5EDCB826D711830E50840D2E532EA5DB6E668563719B6FC8FB317C989C692C5C2964E5323D209FD600FD876941A0F8D6EFE5EED4EC8D011D6147B4E75E1062FE812A27A1D010B45E9FECFF24C55DCD5F8000 -MD = EEB4D20FBD12D2280E40D0EF8F55608D1138ECC1CB18719C46CF4F28932D835DD224275AB777687B6471FF0FA688931C17741D3A082E05583C004E3A21984FAF - -Len = 875 -Msg = 885AE9439FCF219F75F227AFAE8AE85183C863D2DE3AACC2D3633D90020B9DDE7CDF0E5AE202FC18987F265F782459712A43FE2C4D435E64E6DA7F813113F566E4EF1E445E36AE673A34733C383DC421F1B13D7561A65BC9AF5779B9E65DD51DC98AC6CFE1B7412B53AAE68FD480 -MD = 853941F27BCCC43C097FE68A9876601A14D5398B690A4C5B94CC1203C1DE565FE76D7A42764B63C5B8EBF57A33D3ED6B5B287B36602BF211C932E59A717C63B0 - -Len = 876 -Msg = 94BA5F913C14061E96ECE9E552301D4A1ED6C43CCB8F86392A0D5C4574146BC1EDF34CADDCC197F8AFF61C1DE42B92CFE24908D88FF84952E6A60BB81392AA7110EBDFEE2D3627481BCA009769A4861E7840D83D316E612A01820D1483B07E393E9C75022DE3D2323F026B0E3840 -MD = 7EFB3644F8746363A4D9A471C2DC32F6879907517902DC8EFBC03BDF728A01E97FD4E1F618E75A7CCDCB2579A053EA95767695EF51E7DE01449400A4789B4159 - -Len = 877 -Msg = 899A55982CC299EE96744F2A374850A496D86A3386CDEB1633DB5607174A8EC31FC881DA9B8E2137F92625F33A69769DD830F358E64E76605CE0DB6DD547791DE9F2D64EEEA8146D18C59F81B9FC93D91BC05FB85AEF9F2456668EC7A9DA0A86F8B4D607226713741393F744DC60 -MD = 07AFB5B46ADE59F8F8678338A4984DDB117669204D4EF224B0F1C1175593095197618198E81D2D59A678DC3A4EDB2207A15F1EF107BC3646D30B80F516C831A4 - -Len = 878 -Msg = 85F6897B45BBF252A97CC12A6E3EC901A05AEAE252062C04551573B5078F8C973A709CE932310355881CD0469D10CCED841863E3AB1646831F298D0732984B15FA085F65B484A5B31B46B5549486F95ACFDDFBE9C4523EFCE83E7817E03824E906D6C72BB17C0E4159875782EBFC -MD = B34EDCACDADC44B15F83AB40F2962D89BE316D071E1886BC65BDE435705599345A87BFAE3512406E861192BDFACB60C5C13B9A49B85DA6873A68204F3173CF85 - -Len = 879 -Msg = FA5F18A9255EACE5136C5FD603199E3438A45618547D99321FFD907EAA47ED4F16B8B4A5B40C878D6C9804BBA983F007AFA7CC98C6A274D07139927CA2ABAAB6B22F65921268E954CFFEFBB1DC2B0EC09F5FAA2EFE0ECC0638601A94A52E15CE4DD3F01C1DC7AE530710D779F908 -MD = 3BBDEA89FBB2944CE973633AAEE9B20ACF2A76BB90E28548FCA55E5551116AC281FDF7114A69758CF04A4130777B7B3062E83680A9756CF552349537AFD6D3AC - -Len = 880 -Msg = 47C6E0C2B74948465921868804F0F7BD50DD323583DC784F998A93CD1CA4C6EF84D41DC81C2C40F34B5BEE6A93867B3BDBA0052C5F59E6F3657918C382E771D33109122CC8BB0E1E53C4E3D13B43CE44970F5E0C079D2AD7D7A3549CD75760C21BB15B447589E86E8D76B1E9CED2 -MD = 2B4356A64DF31936B27F4530F076EE73E71E4E48ABDE04FF1F548E0727F4A5810B71874187FD96ED510D0D6886AF11960A0B3BAD1EE75DDA4CDC148E162EDAE9 - -Len = 881 -Msg = 9B7D4639E3400BDD19C7672BE23F354FEB221570BE8307942F52FCBD3045FD5A681AB50B226400AC6A213B6BCC0B5E9CB05614177F77BBE3F06CBB2E2F13C167478DB5779ECCB585E3E9391F3107DAAFDA2A6ABDBF91BCE6540960EE2F415D7599022B81405904038EAAA89E2D5F80 -MD = 45D2DD02B266BD0643D0861802C7E268E42A11B337B796E335BF84B2FE923B01A2BD1D726A45A22F646A8DC9CFD83BD733AD1929F79356742F2782C845D3C667 - -Len = 882 -Msg = BA02BF87C61CB69491F6B5500A43499483C9D1DA8056F30D0199B8AA52AE2941FEDEF0E8AC94CF8C7D1E6F1603D75618BE563D3303573263BAF5BC706D6685FB8D08984A756BE3A981DBD96A3FE38CDFA0206CCFB6456CAE650C829EC3A2480E165B3C671C70A2EE16460698D82040 -MD = 230A583B0E58CC0A41C68AD8F2CE123436343EE606532F18028EF16A75B864B6886B603C99CA32EEE061A1F35973FAFBD912ECBD6E5CDF9883489504CAB7331B - -Len = 883 -Msg = 6C54239533A5FBC9617060FBD3C76719EE224823624739482FAFB1F6D7A39C31036CC8EA64FF265054DA2DEAF00F90207A2DB4691C8AA623651A575D25424603C682AF9A8346E4F63E74956E160C1E55BB7118DAF1D1A9FB390F53446823502680F98D279F420F2D614C2218D5E000 -MD = 56AAD4FF39960A3E90D7A5D25B2329532B1CE5A8F15D2FC2D6DDE30ED0D25A8C0E558DE16AEFEF5BA0482378D9312F1E565228A0A7ED669DA9467189850B9529 - -Len = 884 -Msg = 492BB221C33A3D456C7B2A0C41C6145501451D247569F470A1F7637FFBBDA6FECAEAA43ACD76E24BBD607A55596C69060C360D519B7FE9EBE794769B7CEE6A5035265B069E641BF17CE887F0490C90D655F5FE91B95D46A1F5EB9138CBFD232DE94B3DF9944131D0C64C69E4652990 -MD = 2125CEF3A44950C296094B0F84363B3E2993BFAD84EA03B81F873C38ED61D587FE121549A2CFDFAB3563087346AAD1916C033E9C14547C109B9BF36D44985DE1 - -Len = 885 -Msg = 8F71E8CEAB8CAAC38430EC1E8011D9C81B73BBCF32D60A495CF8207876D5DE42526116A57352A7FD2A6F20EFE100FA4FE0575EFF13F205AE33D0C3345ED4D587BAD1CB2F6AE0A15EF6681D168FA473ECABA29EACBD10CD6C64702A4EEE21535E7CCCC0037EF1F4C0B6199C8F413D90 -MD = 56C32ADB68E1814CED9272009C33AEF9EBF142E80C01FD026792C4AC5A0E94FA47F9CF928C1AA61845138732A80E7D24EB9BDC048A7323388D8909F35A44FF34 - -Len = 886 -Msg = 0D7BF755403AD46BE09C7DD8FEC713FBE9D96B9EE5D7AF7AB598FA6C4D5EA86C29DD6EE9C7A8103E6D572865019E6F0909F86FA2E59ECDC5B16678CAF64217282E2B474F40F53007F71D4ACBFFA230E1D2313CB44C812D71FAC6EB58A30097D4336BAFA8332FCA1EFCD6C48E9F9050 -MD = EE05A6AA7C4A81D6F57E55325B255EB8776D18E5814BE00946C4ABAC51614F3C84AD11D6911621EA348641892C417D349836D6A4E266317F6B451EB2E335331E - -Len = 887 -Msg = 5E13D7C65724A037F7DC646FD1815767F3A83C69C69052FF6624DAC438967A7257DEA3A269042F3ADD1CFE53B3D1A5AFB72702A90F60EC5E02B1EDBD7121532E2DCF37D82B96184B347F9D4BD57AB0E1E086406DBE941E0660B5B4C18221B9939F51A4D242E82FA2FF7CEDEF196EAC -MD = 6202C73D673CC82A05DB3C579C9B711F1D8B3914AA422F36159049CC217133800FD34149846332774A975756EFEB24C4B7CBF1C5A006C24CCD47A3EFEEB18944 - -Len = 888 -Msg = F690A132AB46B28EDFA6479283D6444E371C6459108AFD9C35DBD235E0B6B6FF4C4EA58E7554BD002460433B2164CA51E868F7947D7D7A0D792E4ABF0BE5F450853CC40D85485B2B8857EA31B5EA6E4CCFA2F3A7EF3380066D7D8979FDAC618AAD3D7E886DEA4F005AE4AD05E5065F -MD = EDCB59984267BB00402A78F2CA345EF2494956172E10927EE63AFF23D0C834BCA50C47CDBFFD8995036307E9ED4B143E853450367D0E14AFC8490073653CD850 - -Len = 889 -Msg = 36069C92F2AA4915D08FC19E9818ED0DCF80157D3A8D6646ECF8B4A31ADC3036744FB8B70499E90C6C7E1D2C4BE35B81DBF5A386C7F69BB320A2450D17B56D641BC7BAAD77E5D55BB6E9ABE594E04A3676F056AE60082EF33D2A74380270F6116CB4C2DF973FA8747205553A8768DE80 -MD = 3AD4B58C1A2DE58EFC2487A4737E6155962CB9A2E6808962F72A6CA0267FD9700448B31259B305A6CA8D641028BC2AEDD9060F10EDE21BD22E9892AC67740A5B - -Len = 890 -Msg = A1379F64FB9DA0EF3D4F819B898C30348E41E902552B60E437B513A87EE84C2EA0652ABCC2AA9D32428D76B569B3ED9B3D937C93A02C22F8FF0E4A3E09D9C8A22B2CEBA9F8E921760E103CB12AAE2B1196FCF2E5C45FBD0C381ACF5E6E4A8032D59EE9E09FC4ED561C5CECFBF43D1240 -MD = ED1DEF756A71C24B1A355CEFCA6C26356AA9BAB4604740E717FD98C78F30590834C7C10CFF03596ED83DF1EA2C859F1D5338A4E1AF8097F9BCE0B07BF96F1012 - -Len = 891 -Msg = 9742A31BAF76E4E828011592CF2D4C9A94BC16A6856726F2B3340E1EC6787A99AC6832E6CDD32A92B92BF10F976EAED09CB9B538583421223CEE3F76182E9C5B8066BFD9FC924848C7F888BB42019471062BA2C82D1A904E94D90288487A32133CD51D04603588517305DF93697A5520 -MD = 64381616A035056C6500CA94C69B00A0925F74060C952A0497D88C00A65731B5CF26298AE1C06F42DF28A5637F4D857FDD4D4F0FDC7433D3F6151E1F14308079 - -Len = 892 -Msg = DFD9ECAEA5316F067B49D5B04A229C55B8FFCDBD1BB7B4E92B546887A5584730F3BD4DCB1CF8AD362E2301F5970E917DC457EB1634729CC9CD3EA362C66E20F29DA5006CA5D7F70EC89FC75CE1470C5C20B21838B45EE461DA1F42C257C8CE940CA5CB0C3822047D10C875D6B41A1D40 -MD = AAFBEECA89A02A87C5367A192F899A19937BFB86549047D045AE1DDBC0CBE750AD50732B6D58EE9C5BB4CDB0801DB4D997B86769A7E5797A73C635E4F9BF20B0 - -Len = 893 -Msg = 6AC7E1CFD4573ED4595189E12E5B963FB45C167BD56544CAEB461F6D03DB1084D14BE35233310F48FCA0F9D41DE619EF1E29C78FEE50B412DD4E74ECEC9FA6AD45D2D6BE7BA7D8D9381DC5060A2110334D84CA79235BCE5667B0D49BB4137E2E23970D40044104AB0890FAF8437CC2E8 -MD = 4BC59D37BD0D40E3AE2F2C8B7DBF1CD51D2CABD63CFC22FADD4D35CD15D4853137CE32A783BEBB9B910DC04D272747464E83D1E74B25D9F39F54EC18A9E61F1F - -Len = 894 -Msg = 1257C5E3E177DEF4ACE316DFD5ABDDFD6BA7FCA241173927411F47DFE2E79FBC5139B775A912AAD0822B220C08521E0A25C8EE15D4F215B1663D92647A28AE0A2CE23F054E77456668AAB17DB63858B666A4638FADF6BCEAC8152E9BE239F0ED6AA404A1D1C2C55C14655D8E1B33A828 -MD = 9D62891BC3C9111B5F0E1114E4EEA109E948C74ACAF2573F2A236D879B0112339DFA52C81AF6DF10346181012A2FC1CA9020AF2385FBAFAA421583DEA07825E6 - -Len = 895 -Msg = F2E39862B18601C5C4EA3B13745BE51AB578BE0049C2B01C6D9C2C283532FBCE5C5FE7BD77C36400944716F53F692465BA1C70B28F1203EA123165C3993E0A371E1284C74DD37EB53A0043ED84DDCDED882E233482433A3E0104E6517E277D3A2D2577CD28622CA177D8A41443AD8F94 -MD = 180097AFF22A88B42A945DC6E36AAD9545D852E92471C345C76FE11882007F89D6200E67571007E7D6B2D155622D120DAC24F80D02FA554A061928DD31483A27 - -Len = 896 -Msg = 58D6A99BC6458824B256916770A8417040721CCCFD4B79EACD8B65A3767CE5BA7E74104C985AC56B8CC9AEBD16FEBD4CDA5ADB130B0FF2329CC8D611EB14DAC268A2F9E633C99DE33997FEA41C52A7C5E1317D5B5DAED35EBA7D5A60E45D1FA7EAABC35F5C2B0A0F2379231953322C4E -MD = D0B453FBE709C69125DC8FE9E8AE9245211612970373B454F8656A755E8435B321DD3A980FA28719641747E254DC42C9BF012B4D6DBD7ED13020A83B44C504AA - -Len = 897 -Msg = CB1BD5900398E5753E85BF405F77C3C344F7F1775B59E7F8ADD11882A5B27FEEE9011DB75A20388EFA2DDAE78A82C8E5EC9207C149D383BAF293C2F68CFA930A240599B662033C05C86DF576F53D0F04CD105544CD5695DA321B94EA57BEC41DC9CE192B1343B2E1AFD541FDDAE1B50200 -MD = BDDF670E087C701373CC0636DE21E3EF53F14B2E8AC2FB6341174F4CC8CE58091C5BD66043C65EB4D213035C5039CF041846B914055A75D4BB0B8612780A79DC - -Len = 898 -Msg = F35C7F97B4D789FFF4E7DBED0EA1B5B2935EA6889332084669255230DE67E35090B3640F3C6F375E98AEA92BF5B3618478FDA284B7DDCECF37259378DBC0BDC192F656F69F5066E91A2F9D285C5988D39BF8E163DDCAC828A927AEBF42B5F174321ED3B9A968655A942DC0CC37199041C0 -MD = ECDCEDBE0C2CCC314272DE039A46C396EB4E15F606B1E665CFC2003408D54932B05992796801F14355FD609000B23E9283FF5CD867ABE10B68F2403583A23FA5 - -Len = 899 -Msg = CE5A6C17FAE7130BAA565CDB84F919E7E1C13027B50F0E103071C843388F2C51B51E4D330555F0D919499110D3FAB5EC8D307CDEFC7D15CFECBDE4A06A36E1278C9D9A3D8238D4982F135C2DCFC0B28D10796A4979F9B4CCC5A81B35C1259A7B072FD17B46D555CF7C3BCCDD801E4819E0 -MD = 5C82687499742918DACCA00243478C90B26156B66ABF69E8CFFA3AC80D4B709B6B223C4122C3401DFE3F8BBC1EEB37B72505FC0E5495480B2F09201515013372 - -Len = 900 -Msg = 3A7391401865505D3782C08C9291C87611598862E2632530B1AB50252D62EBBA310FD943A378AB3897DF53F424CED09986143C6A4B68B0818B9356343D9F6097407BFEE7FF15D41E73C50D4F8B38468BE9143F68741EC8C79A6F28D6B4439CB82A1E8FE59C8131123A07C4C5300FB19E60 -MD = 4F35F53E70E09DDA1DEC0A6ED115C5D0CD9A072B75A45D0BB3632D5EE51B57C971D20CFE7AA879688B6B1BB999AA365621D82B58E2E35A00ECDEC4069F9E5699 - -Len = 901 -Msg = 3DA31721130FB8F85A43C5B5656BAD56F0A0573CD32F3363E4E9E3B4A593A2AED2E184B2336844EC6C8E8D6F47002FD998A8BD63B2D405DD2BEDDCD2E4C0C0FAB13113147B381C2546BF513D6C2C0B3B860C170B680EC1A5B907D5043BFF1EED67EB35F6AFFDD0DCE5B17A5C1BFDC5CA38 -MD = 1CD807C1F7D6BEE8875ECB1014941805E58CCDDFA95BFE1D5A96D19CA9E7A03BE120895AB21A44BCADE6C2B8CAD54CF380C041A386018C1850D80C8DF7096A73 - -Len = 902 -Msg = E582A3A06EC79B463562CAE62212DC63C40A4E76A6C06C08CCC3FF442229F217B143A0AD650F16241A94A65956BED1C2D2B57AB2199E130EACF60A92D1E9E5FA03BFD78874EA655092F3C07A98F0A491874523660AD80128E7CCBF7E8012066F18E00DA1EC5ECF397A38C747A61DC5E7A4 -MD = 094449981B6137C4C08841FE5556511EE08677D50BE7919C8D1FCBE905D6451F542048A03ED641B084409A721DBA5673122A38B93D87A307407C0E7F4B427668 - -Len = 903 -Msg = 215D67DD190F953146EC654EDC04B574C1D080D1FADDE7FE272E88B8BECEE0EE9272B903C0CE25DDA82C99B2CD8CC6FB0BC554D78173859375FC85AEBA208907FAFDDEA3CB89410E6A8780E5B5E270B124A9940DA148F41C3F18B9696A6FEC1DB8BB81165F104CE061BDE070A8F788FEE4 -MD = 1F427A052B91C74EE1E0CD42AB597558FC778F3698EE74EDCBA9930701B875F2177E860A0AB77BF2EDA1E6978CDC87EF70E13907E930634CE22B6A9B32D729C2 - -Len = 904 -Msg = BEFAB574396D7F8B6705E2D5B58B2C1C820BB24E3F4BAE3E8FBCD36DBF734EE14E5D6AB972AEDD3540235466E825850EE4C512EA9795ABFD33F330D9FD7F79E62BBB63A6EA85DE15BEAEEA6F8D204A28956059E2632D11861DFB0E65BC07AC8A159388D5C3277E227286F65FF5E5B5AEC1 -MD = FE97C011E525110E03149FAC4179891AFCB6304E1CFD9D84CB7389755554EE723571D76B80B9333A695884192340B3FE022D4A233B7AA8E8C7686745CFE75E67 - -Len = 905 -Msg = 4E5FD6C9C5E693E89062F8D79B7479ABA27CD93729E03179804BB8BCE53F270A6D0F29604835646619485414C538FBB4473067228A4593340E30165A7EBFA7F470CACBDB9CC192AB424D7B7926A5A96166FA56277DEF34ADE6C6A7C31240F86981E30BB3F2AAC492B1850016B1F5F3622A00 -MD = DE4EA41FADE2531CB5CD793A8FA168A87E58AC4526FCEF7A42ED5B8356E7736636749B2813080097D9691BB6D0DE19BCD08127175486F4F2293BA9F8E700288B - -Len = 906 -Msg = 1DD8BA4977A97AF96F65FBF2BFD718E20C955313D9E08A8F3FB63B092ECA604C3D65C7B8AF97EBA322FCCB3CD0B091747DD1445DF3734A01611A2EA5CC6882CFEFC3FB78200A162744DD353A51F10EF43311B9F4340BDE9D57028ED8143A2DD7A765DF9DBA3446D8FDE72A601F0500E98440 -MD = 582CAF35936FED9D09B1E2B9FB32E4A493FBDD4B6BF27DA469E106BCE8BEFB62B0B3DCB6B2702984F56B1FD97FEC9D395C31B3677B43FE84256E898BE14E2EBD - -Len = 907 -Msg = 94A8E87E831C5E5196512F3BFC03A72804F00A5F8B7814957E1109D7C6AE32149E5AB11D70C7AB52F5BB67C290AB1CAEA35CFD3490BCD8C48F96B7ED876D0D5357562E34B4871969BB3C667C11E67004D69232CF1FB054A2910A4A72DD158656A2C0FADAD10B708442128C0331C49032E940 -MD = 8BCAA9F1629938B3F4ED057326726C5D55B7F2FFD0962318F31894053752B8F924546C293391CECAF6EEE7D9A6BDF96A89CCE378CE692B5C23293BAD3D809CAE - -Len = 908 -Msg = 15A42B05F9C3C1551DDBFB964D698040DFE50240CA07E7394DB47BC628A36A31880AAA7A1821BBEFBA965645C560046B296AE7CA6EC45A04E0A9741FFD88BE539E335AB26BBCE51F3958A4CC61FD3BE079B029731D9917802935330F68BE6358D7B8FC120570AFAA25B1FF54B7B0A788A7C0 -MD = 7016DDC1F9ED49A695AF3B9AE924D3E9A079A63EE0E1C1B5987B3ACFDBF0E5FF43B9D31B1CA668F2BC2BE7678DC147A4B75760848F55BE10F62F37858B21E93F - -Len = 909 -Msg = EBB1C5063C59E47C5D879549E8A5180D7E764D8BDAE5AA8E570ED50557DD19B601E488106018079AE3F1E787DE14FD12F985B38ED7A9A953FEE7975E47218BA610B5060EFC67637EDD9E6A051DAEC967BC86CCE55F417BD7CC7732BA636E55FB4831B117644ADA00C8BF5309BD7FBF42EF10 -MD = 8CB20CFBE66ABAB3921AAAB16745D960285064A24522CC7E0E603D228B712547CDC800A7AEE0F28D443D688F9963FB8D658FFB868B9B76657A864EF04455C5E4 - -Len = 910 -Msg = 3C8BCFC309833426B1EF0BFD3E9083DC116F28F26FCF034A879F0EC0CD04BD0B2E2A32FEA71AE279D67313CB5293AC7E158D2EBCE4A73941924EA0785082B13AB58F71C620DAEEB7FAB6C85CDF2D40E0CB787767E8F2298553BA9C033F820AD312C12E90AAFBB3DCCF4D852F82FB3FC70664 -MD = E71B2504975A66664CBF652E02B1563B2B341B65E6958A7124ED8932DE3840B43D86F571644020AE9C504518DCD0896CDBBB72EE783E50E50924AAEA703DF8CB - -Len = 911 -Msg = F34B462EBF8A5D882AE3064B434506D605D2750EF56D33020BFB47859CAD2D26C902DD26906C3AD53A2FFE99C7C0D5A0EE1081657E0B5341511C3177B745847C55805B59837967763A5535E42547EA81168A71CBEEA4AACD0F6AFB06B2B9ADB7675F6763BD142ED87BD8570567AD64FFDA90 -MD = 64B80BFC6A5AAABCBA7830FECC943E1037A7E9333CF1BD5CD9BBDB264F3DDEF89001AD6369CD7217B4FA3E563FA209F9D72ECC32C3429781394F0679F655C88D - -Len = 912 -Msg = 8E58144FA9179D686478622CE450C748260C95D1BA43B8F9B59ABECA8D93488DA73463EF40198B4D16FB0B0707201347E0506FF19D01BEA0F42B8AF9E71A1F1BD168781069D4D338FDEF00BF419FBB003031DF671F4A37979564F69282DE9C65407847DD0DA505AB1641C02DEA4F0D834986 -MD = 1BC4AC8D979CA62A7FC81C710CEDF65AF56C9B652EEC356AA92DA924D370FDEBDF076F91BA4FE1EC5CD78FC4C8885EA4304BA2E8E64944AB4BF4D1B3D7DEE745 - -Len = 913 -Msg = B1E06AEE75FCCE86BCF194866D0779720F1DEC50586F29FD22C2B7CA37F19D257492EA0C05CFA98AB7B42D33A53B78E5CF62643F0CF02E934B9B70224E0952673B572463F25659FC015851C73E3F040AD60983CF4A048BB9F277EBB18F4936064D73371D7FAD0AB3D1EBB6E7035CDE458BCF80 -MD = A26C0BB709297A9678F6C8BDD1649B96D039F709216DC444339FE6A758CD231424672887996B89FFC1F4C54DE084ABF1114E1E3C248A185EDCEFACDF20E25909 - -Len = 914 -Msg = 7A8B81C5FE8BF2C12BC8E9E7A0894F837320ABCFF2972A9D7352DA7175AC7C5039D654EAC136A020334C956B49323918998580BD1F2987A342F905FDED93DF4CE76A91428F524AB656B24AEDE625884511484B707C3BB3C52E46428B44F8A87676BD73480DD3951E8E826EC14C24F52D48ED00 -MD = 889FDCDC5C5DB799534606CFF4748E75E9D8601C8C02A81F9A56E42AFA31FB8517F8A00740A98308D7D9A022560D901F389C28AB6DFB0EE3FE2A44265F8853D3 - -Len = 915 -Msg = FCC03C4AF57D9C21C777D2B4AE611DEE9F4653684AFB0AB0F98606D2CD2A43B24288B9C302BD296B702FFC8D88FDDFDAF830451CFA97407179E864C77416AF18F19617582317C70DB29834F585324B44333BC6076F3CEA3F3F5E124C7B259C482EB42BF5C85FEB3691A9CD5D227145A5DC6600 -MD = 69E5F9F22D891993C274C4008E85D4C3DA5E7FDDFFC986E60E77E6B84DF3EFB27D517A77C1E508E329527C69B5B701FB9CEE47C2F544279F319D0CFFD9BFC54C - -Len = 916 -Msg = 96CCCA331611A6E0FDAF50A8E4C10967F1741C19EE95A11BB9D02A689971380DB8DADD0F8523C6A1D3F6F12875C3AFA0B6A8A1D961FBEE33FD48011DCB829036701FFF6B3084A19D7A21083FA8B08353C6EC5BE9584FD2D9CA6E63EE51DFDBC721740A43C0568F5A732AD5374C965B496B1480 -MD = E73CE2360009886824A5DA2B2CA6DC3F6BED63E7AB1AB45B69080ED76E7E16B138D467387B6AC0EA24096B1423AD3DBEE5FA1B6E65A1FE34472963483C7CD579 - -Len = 917 -Msg = C6F7E76B2ED480FB33F7915128AC1383A275FBE15AE9C997907E11BEABB1E49C8C9BF783355CC3D8C9719AF1B0B94222956AAC2C19B0F68AD4CC2449412BF8CBAABB014D277AB446CFA90D0E3CFA1A1F22273D4AF4A8391DD3FA0FD75015F39C204CE592715A00036953401BECC68A983F8E50 -MD = 37CB8A5487C8814C97F103595C89236E0D0C0840180D6565D144342A2EAB87CCA254E4C5F69646B678A1FF5DD847352F8F5A04F0B071A91544B4151369DAD03E - -Len = 918 -Msg = 9ABFB3294448A7EF38BC194B4E61027CA0671CCFEF6AEBCC0A706F15958D777CE0FBB47F1FCC3E470E878A991D139D02F89D36A54053EC3E370BF45E1AAB3B58B25122584D4CFC4BACE5F7282F25F322107E8043DAB875E8707F94358C6ECDFD96CCC09803756814D098EE3C4A7A8BC2D44398 -MD = 3D47B8A4DCAA1DD357A289A416F5B4130304FD328E2124E157E4A3B833941F632A7919F6C58780C6072E4E08A284D52091CC23AEFD91EB7D243DFC0E0D2D4557 - -Len = 919 -Msg = 3EDA9C01C0BAC0A7DF3288EAEB878C44FE750F92EB7FC1AFFAA3DD1B492781D220E210F169B673EB469594C708C2A4297CCF1ABA5D2C438E9FBD91EFF1A0941564582AFA650F03ADFA4336AACFF855F49364D234842C907E7FCA80CDE686E545D5CE0CB43C0359E18155EB3079469ACDEDEE92 -MD = 0A07E8A11573A24780E48B8C9F768281A67F578D3B073A2087F21F4E762274D73AF9F5E636AF901ED54EAA25A5F99971E322DFBDE95727F5996001B1C9AE934F - -Len = 920 -Msg = B55C10EAE0EC684C16D13463F29291BF26C82E2FA0422A99C71DB4AF14DD9C7F33EDA52FD73D017CC0F2DBE734D831F0D820D06D5F89DACC485739144F8CFD4799223B1AFF9031A105CB6A029BA71E6E5867D85A554991C38DF3C9EF8C1E1E9A7630BE61CAABCA69280C399C1FB7A12D12AEFC -MD = 76E970E9449D868067CD23B1A202CBDC99693FF6FA74BA644EC41CBF8FD139CB0F5D1106FCD6C871C315FF41C3EAF99C636288F0FCF6A40B480CB881D87E098F - -Len = 921 -Msg = 269180F685A910A96BABF3F6EE41D59E1A147773B610A81849ABA32B9B3F67D92CE4B575503C9CAE47F0B8D37BA66830952229BD64BD113B5055C1C4071BD749158188D343606C5DB34C3C1831087A0251868DE2F1689F358BC98832CD8C292806BF31A575895089B72004C037C8990CC845BA80 -MD = 8C0DCD4E88D74A430090EDE6312B43C12B603482055BF049A2C4C1DC6CAE2DD1D2A3614E476AAD680CCFBBC79FF3A31779349B34245C7D3CE05EC975EECA274F - -Len = 922 -Msg = FFFAC212A9A44997E7273F3B708F37B778AD53290AA2B523EB10181EAD0785918211FA5130C0BF333BB9EEAF35BCF8D3C210A041DFD8A43F9F045589218542B4FE2C63D340A968F0E21354D8C26C6B55A437E1C0208C1F53A2D32F13170AAB6978214F900C0FD6D7C589459C9506FD2385D376C0 -MD = 31C9E916A70C837D9C744B03B44493398BC37FD83E308AE83204538E7E3B5405B17957EA1AE8DBD8D140F3E56B79E30C6FDA118BA10C57225158070BEF730E8A - -Len = 923 -Msg = 3B80BB9F2BB7659C2F3B2FAB83E68033EF455E97C6831D484BDB52850EDAAB4F89EF8FC39ECB29971F7349E5EF2C4030CAF069C40F58AD755E2D013249FDFD2D41583569634E0126A3272676CCF6A3D7A7429327923590574077D3A21BD282836D198AC6AFA14FD4A5927E594A9753509C8F1100 -MD = A01837AA9257022025433241F72E7E5E27CC80FB8B68A6EB2413E499B89F5BAE5022CBA65A16C813502B540A827F2135E4AAA2D8755A327DA4129BCAF8EDE5A0 - -Len = 924 -Msg = ECD96FDCD43F1456B19C563E7531854DDA6A724CA160717E5404B8056322F7036D50056BBE1538F5128B72C90862A7A4C6AD3E5548353D88B255F3149C4097B7B412F5B45B27DC9E7293831A61B20BFE0FF57E7299CCABDCCB32DE6B006422A0B7DCA9630F57D58A258CC32D28F39A9628337640 -MD = BDA0C18F21DD77BBB2952D9AE45679FC159C4E88F8A922B1218AFD927F7ADF502F282CA436CCB38AED4FE94BFCF0530F5D35F09CDFF6AC06A3164B83E319DB01 - -Len = 925 -Msg = 2FC972D13E9ED60AD42189018D21F46A99E50E437101549A56FDF91C80A7F63B1CBDD3A1631502AD006DE0CCDE3F74E14BD189BAF6BB2CF936B619D9DDD644100E9603E3170AB7D0FA3B6D79AC15BFBF8FC1672B908E82EDCA7DFE5C7DA8B6A5004BBC1C1999164E95772DF1B5D5078EECBDB350 -MD = C765B94A25FD9D8787A6E816258E9B6EFF0CCB56821338B85AB6D334110B9FC76E2B94377D29DF66C2A5102F8C24FAB636193C385E6DBC0CF817B0496796ABB2 - -Len = 926 -Msg = 3DA3A0681FA83C46C47B8D2D8394EB3138C899956108F7C0534CB3CAECEC2527434B441CC79E580B260904D4C95D9D53FD45DEF4F23E90EB01EC7FACAD671DAFBA8D3E66EE650F0E7A029BE3FF2DEB340436D004E5910E65C28174155D8DA004059504F484CF757314D43426FF458303F1885940 -MD = 0EF8B7C443C65710C136141B83D8E8DA769DC7456D032223FE05B3A2F0FE19EEEB24E193DC4453271ED04BBA4E6A38A48D8E3AEDF3026EC99B3E198A1E44EC9B - -Len = 927 -Msg = EBDB935B08BC0C4077D649A2516D0C035BBFB64D69B783BE8F12796E44707EB2F244CC27089AC2A07A7412486A7A18F895F1570DEBBB638A36597008ACDA55FD3D128406C9D46D7FA32F71B718E52EEE8AD83D6F5B5FD6C8078121073518FF83D582563FB4E95EBCC4A6A6100E030EEF9A82F616 -MD = 40E1AF0F10A9F0509F4B4073AECD143ADBCEF91D2BF7927CDDBB53A5103BD4FDC891EBD678C827481D29B70F1841D58EC11E322DD2F8201F1983AED0A8F83A35 - -Len = 928 -Msg = 2EEEA693F585F4ED6F6F8865BBAE47A6908AECD7C429E4BEC4F0DE1D0CA0183FA201A0CB14A529B7D7AC0E6FF6607A3243EE9FB11BCF3E2304FE75FFCDDD6C5C2E2A4CD45F63C962D010645058D36571404A6D2B4F44755434D76998E83409C3205AA1615DB44057DB991231D2CB42624574F545 -MD = 871666B230C5AD75B96D63BE22870621C68FD0899655BA7DC0E0E5299915AF252C226DD7217601D3A6880D55EE5A20B10820E21C74F730EEA9D47FE26DEBE006 - -Len = 929 -Msg = FB7BB870E78E7EBF63E1C4953C5948DBBD548CC952A4B6D4788E0D190B9ED9CE8702F2075CBC5DA62945F118819C5621FE22587F51461B91F7DCE4D86C076DCF945CE93764B01ECBDA86DEA3EF17EEAF0D5BB4233028388A70CC239D39A427941C77E19EE99C88BF12F9BD6E687B3A826240568100 -MD = C9E592E9430C761CCF99BFC3E8C1752C776915E716E6174C612E23B0428512960F2DD3546B5A8C8B4B3BD6831EAE289D75A7FAECE086F1825BE21E3576CB7FD2 - -Len = 930 -Msg = 04DA38CBBB45475B6B5EFF77AB65A7144AF92EAA062AD6AB8A84C714DCFCBFDD666443E08C1EA3D4DCD3BE730F7401760C6EB9EA600FA5CF1CBE5297F0D4F66671BEC146A58DE30E5547FE9DEFA9B96E95344FC8F32CFEAA4AE1D4A109964BA3AEA697FEB6B6BBB42AED1BB365E324DFF650764FC0 -MD = D6DBE7C2920D5C1D04CCC8F67C50538030456C6ACA9EF29D4210C0811D182A2A3A37DA7D8018565FC4A9322D24DBFFB6905EAD9868A0700CFD6B542DC0B0F752 - -Len = 931 -Msg = FE876EA28A466698DD179787EA825DA434D02A0641099EA4CBED0641F15E3DFC2A37322A094269D4C590455C3EB8F019C8295D24A434FA4977FD078C691BB540C7CAD0B6E6284BBAAC1C8545CE00F71A494945AF86A4FE2AF46F11DE9C89EFDB17E62B9AAF4526BBB9663D4623FD589574529F7580 -MD = 8ED0919393B8D0C294D492E639890C4D47251AB710B380BA4733F04D84210DEC0C7BFD19425873E122D7FDF509721984E3732973E23AC7CA028B55D3594551C1 - -Len = 932 -Msg = C4DDA8D7807FEF102A62B78CD4700A6BFAAC60D650A7F5AB6B377EF3936639EC67FDDDED1EBDBCD05ABF3EC0BE4980ED84E1FB536786CDF0954854FDB9F3DF27AFD5F350E4AA735FD9C32C790F6F424A1915CB115A37E6AEC3C257A974D6683E0CCE2926DFFBAFF8C0CAF094307733969CC6834520 -MD = F5FBB356C40A67AADD06185A3246275FB398EFBC909049E361D17CF52FC68927AC192EE231324129E9EA09E7F74D8BD8D8C11B6BB17021A37832D3440DA44F98 - -Len = 933 -Msg = 0E4D1948742EDD97D4AAFA0163292AF7899C469489A0DA98FC9AE4B6430EE112CC7F22C29904350A9C196C214C13C9117E8245676B3E5C7AB9D51120116B3CBC07026927CA0C33ED516796E98A0EF9865746DDE811C8B56EBE9BA469117D9BCCCC70204F1AAB358A703987EF8637BC85BE18A011A0 -MD = 6EAE1DB40CA7B35BB0AB51AAC032ECA6AEFA67B58243AF23C30440E790531A5133EDDC21A063191EA3FC8091A48AD09E14D4F32B944C5EBF3CEDC06C4AFE1875 - -Len = 934 -Msg = 73E79155019FE478F8D817C3D5EF3D4F66D3BDB22ABFF76DE083A8E5CF1EF4F8E5C55917351BCE4AA707483D9302DB11DB21CC6CCCB4012B0980ECB76077CD0309775F7EC98BC40A27044BA830FF7ECD42825C7B7B28133BB732218234D9165372DC61261878776985D2C980C9868BD6521557AE3C -MD = 526969C2558787A8E8C28A24F248A070C7713173E7D5C8BF8E4C9E0EA8137FE59FE53BCE42965B7585A5D6426993F877C878DE5D6C7CB6DEA63CF3544CE2FA8D - -Len = 935 -Msg = CC47E530D64AC0381DEA486BCE637E3B631232A5B55165358A0F9C2069C1A3AAD14302F2AF25FC4F4F40D41F708760AB080861D8F92EE65C1927326FD095EC52E45B7F5D67D4B4987C43FE8FE61AD6E5476535564DCE408606AEC8E98618B174542B530238A51AD13EDA91AAB7C34DA7AD2F28E50E -MD = 9729ED6F7D8F678390406770EC49E8AA8622E781DB01F5F2040C953109F110CCF706759EF077201B4A8550DB0CE94175B1A6228DCF515B23F608312FFBB33EAB - -Len = 936 -Msg = DAB11DC0B047DB0420A585F56C42D93175562852428499F66A0DB811FCDDDAB2F7CDFFED1543E5FB72110B64686BC7B6887A538AD44C050F1E42631BC4EC8A9F2A047163D822A38989EE4AAB01B4C1F161B062D873B1CFA388FD301514F62224157B9BEF423C7783B7AAC8D30D65CD1BBA8D689C2D -MD = 7E3EF62552B28A2B18A71CEEF2DD8659C8BDF291385AD02FED353775E01594F27CC28CC78663E17CB8B39FD4EA48D494AD0BD7AEE9277EC9B21E46523812736E - -Len = 937 -Msg = 0033695F13910B1E68323B64B7FEA6E291C07DE47C448174C72E53E69AC2B9281E6D6703BE904F601301A7A92012BDF1E7AC0E389DA9E420283FA96681B0495B250CF11CEB845903468DC2B34B825294596C86BA38A41B636E155B3CF55A986708DACD1034C62A0BB3449322AB57A2A97DBE9E93FC00 -MD = 18BF63A81449BD099FA61001E0D96C7AE3187A308DDCDB6D6BFF905FAC149CC957390ACAD6226B86424DE1D2931724340ED4341571BC01CFD1E5BFF77ABF7A96 - -Len = 938 -Msg = 77485C2226894283A91EE91E83192068DDAF49E99FED9838344ACC569348BE9D9ACDE7CF447C0BD84FFFA3559A16C5F61912E4ECEBFFAAB31B3F5B239C87FC3EDFCEA7303E1C57827E8B45BA3B4F357167FD749EA101B15EF913F838A6CE68E4792F276BBD2784554B84703376891D951321D0C8D600 -MD = 44A42B967EB671025989B43112BD12B2CDC5E15EE89EE2B5A567A2AAF9BEF5238C9F8A2D4A6ECFC3A9B12094D62A50892D00CEC7D9383687250162721CC610C6 - -Len = 939 -Msg = 6C95A9A1DEA097D15316AE7F5B4A6D2746C6C81D72093614C9AC25AD1FFA68996FEB8666D94F453E9E405D42BE6C9757A94BA777566F054DD6315DA3DD837E70FC939F7129D1D7D4DDC3A7D5FFDDC54B60BDDAF2622060E8C5E5830794DDA711E85C52B4BFFA5F716BE50BC978574D88C579F2E19CC0 -MD = 9E9D1B7B8FEF644AFB29079A87CC73E531D8FD3940FD0AE1E481BF511FF8BB44A9FD1D9421DB1F95EB6EAAF215F550ED27BF1652EE9D9263007E363E398B50E0 - -Len = 940 -Msg = 4F62C87A0F5C45700E4A39D2EE331FCDF9A8C33E08E26CAE547306D1FB80DEA35A6E58E63839BDBFEFFFB1C35F80386EAE52CCCBCF61C835E9E6505DB798AF26D42575E021B96B3F0DF3405B817833F3FB4B89B941B8D88BF9D6E467A0863BE72D950BF006CA84E3DA31D71D562A9F0D8231C76CF5C0 -MD = D2853EABC32BEACEBD0E1435416979B07CE6F5E753F24D89BD934A417286D45F04022CD227435F563BCC4AFDB47FA86ED392ADB149FBA9DC5898A17E3D70F1A9 - -Len = 941 -Msg = 5136F1DEF48BF98D5FE05CD02C2309F994156D650FFE1583DA3ED50AA9B13BCB0DA8E83C68B8D331672110B25EA928F4D20D869E444B3194C044C09EFD66D966964A3FB446D6B0F027EEB79D50DAD6A5F0005B19FC68F140D768488C0D401B7FDDF8303E0FB8860A6847CD453797ACCE3C7C35ACAAE0 -MD = A24AAAE44B3A90FC9E6A77A0C712D7BABC49B90563000BEDDAF82515EF2F8634B24A8874267614C9FF0AA60E9BD33C3F97463D8FFB2CDD70951DDA02E6A256FB - -Len = 942 -Msg = 0F9EB1E210E28319D732BA71FBE8B3A99E337D3F4FC3FD4959F51AAA15C2E8D7DEB32EBC69A031057AED466181089FDABA63B3337EC0960A0EFA3F5B257446557B6C585C324F86034448D0419CB538E328877F669CE2A03B9B3A6E5DDA904666F1E20B0ECD674B84E1AE14AA2278F18565CF8E37BDBC -MD = B00BC9B3947499A566B9EA4F3DD7C6D1826CDFE24B1C14ADE2A9E3EC1ABEC790FA34D5D99FC7ADA052A18BA2E916A3E3F4C2F790738588C135ED41EC19633253 - -Len = 943 -Msg = 7C9853BBA660650A5C27C4C948FD65A67150FB559C5863BE944AAD3F84E946777C93D3D9BE3AD41155A05197ED3DB7ADB0BB55A55C69DE9A5896A5C677EDBC8DC4F3C50E22BEA9ADA9D21E6408D19974B7760037EB6977BD118F6CECFE7DA5240082DDC2FC2304A407C0B6073B70315B3761246B9652 -MD = 3E65C8F092C57D4F5484B8A17E822B0D34CDE3A23CE4A7CA100ED17DF6C619EC8B663AA754ACE19B6B0A9891DCA94903E6F527DA3DD9B492CD4DEC3B4939FBC5 - -Len = 944 -Msg = 42E99A2F80AEE0E001279A2434F731E01D34A44B1A8101726921C0590C30F3120EB83059F325E894A5AC959DCA71CE2214799916424E859D27D789437B9D27240BF8C35ADBAFCECC322B48AA205B293962D858652ABACBD588BCF6CBC388D0993BD622F96ED54614C25B6A9AA527589EAAFFCF17DDF7 -MD = 0B87F6EBAA293FF79C873820846C0FCC943E3A83BD8111931FF03FF3B0BF785C961CA84CF3FD40E0D831DBAEA595498FC12DA88CC507DE720A35C01D73FC9595 - -Len = 945 -Msg = A154F2565761BFFC5589EA8CF6CB9C29F4C632D1471FC80534F24749C908C23E56505BE40785612AF08F921AD19348D2D2453649198265249EFEEACCF4AA3E6DD60F4970942FD828E25FD2F88BDC2274C5C94B7DCC7431715B3C2428AE7A922213F6485502B4BD84F1522EBD8795C549AC800FD99C5E00 -MD = 0604129722089132BEB4FE9A75A80C42F4A68B4D08794B2442A71A68758BF52D15C49363BC29495579818725C51F7B6FF7E301EB8DC479E8D5DC148562158433 - -Len = 946 -Msg = E7A82BA7364E23F5BC770F6C5D8C3B1A4E24B328943470700FCEDA84B8D316B716E2FED583D2324C17FF1E9EE07D72D42CF58FF159070479E6721E2031C9D7D94262033DF94CE492D6C64FEEBC7B3B1DC9F719D9681F51F25461D8693E7FAAEF05DECF1AE271858BA473577A372DD79FC9D1B0F69C46C0 -MD = E2D511A293F19802E5C18E4D4721921917DA9475B7985C76701979893D5598B46E6D2252C1C0ED79EC49319365DC883E454B4C09990E2F722DAEC6BA9FD52755 - -Len = 947 -Msg = C3AAB6905BEA639451D49C444D9D470D2F033C7D92405C2672CDB78E724D4BB7ADAA0C0E5A57A4B78F4F0BBD5B542D06086CEB0A42F2A6CF4B43745EF870928BFD22579BE8B5753328111BCB996B58F10A8A6D6C04806FB089DB9CABEAF212C9830BDAC08FDBA87617AD69B858FA1D5337273AE8367320 -MD = EDEF0F306A7DA3D766934D978898900DD135A248760A52B87E832D29F8950E4C4D0F0A084F7D2CC9A3DEF929FB6BD9E9DEFEE4C5AE3050993A567AEE416457D5 - -Len = 948 -Msg = EECFEAEEC17BC07F2EE0913E696D50C194C13B6A2738092E5BD5F30BFFD3BAE559F3E47191AAA333297475F113EFCB1B4A088471CD800934FADD0F5DCC9B1B67AC488B27B8A7D5408CEC9CDA91EBADA76C9AADA32986604E113790BAF3A4B433CD81ED3DDFB9DA9995E49BFC8B7A15D07B363AE8376F10 -MD = 5C7B019CA0808963EDE2379ECA59DE725D2C8F7621302458944C481B778EC0B3AF0DB94444C210D2AB1479CEAF4FFA3FFCB9ED30BA48394A27F291AA46059802 - -Len = 949 -Msg = 04A5269B1ABA9E44557BE500D16D2C5C830C9AF49D33AC8B0566BCD699679630180B74EA9824A3E9538789397FB6CFAC8961BA7F0F7A5B0181E7072C53651CF91451DFFF3B7FE5C00B890EB13A984C11B78F801C9EA33FF9B2A52AC71907B92F028D767085A01F3234AA9B98283F684065B60457BD9880 -MD = 56EBA87672BA3AC96E8BA84FCC61F474AF73FAEC013D8BE4A83109D9265081751C9D5C87479F0EC5BB1D3E9F6FB4DBD7009470E44D4516AC37C685B462D23D0F - -Len = 950 -Msg = 68541BF2F087D4505570E2C5DBD2FC596D938E57CC74980F5EF52FB229F5CBEA92481E9F62E92891A7F333E6581E21354FFF2C5A43899FF6BAA2FBC2E737B350CB5586CD7D7A6634BF5DD9B6BF4DB0A99021D432A0D76F16C74D4514013A3C13A88C53927B91411C7718931445913AD4C71A7B710DB168 -MD = 34258377FDF16FB97F653299245F7DC9CD32010A36B227405E77C66458692A664BA6C469861926C6A5B42FA1225B84F3BF13AE831AA0B1DF1D2EA3DEA4447723 - -Len = 951 -Msg = 2BFC949736AA36D4938AFBC3C01B604A7EDEE1C6D17EF3798EBDB86F9CFDE9C033DDAB4175C8F346E00E7BACC20DF7A52F4F0DF2744FC5EB9377E64BF6AE52639F796B1C15ABBB47BF938FB3D6253834DD680EFE244E832F810D315870F5E73BDF53130AB9C4CD203D828D183C5A954BEC1EF434B21BE6 -MD = 39830F5A827F0D2927ABB3F4A5780B24CA593657599641B302711AA0BB8D0C56246787B7A5A62E56A8BF52BCBA469B760DE3D2C94CABE5112DE3F8AAC8AEB758 - -Len = 952 -Msg = 3C9B46450C0F2CAE8E3823F8BDB4277F31B744CE2EB17054BDDC6DFF36AF7F49FB8A2320CC3BDF8E0A2EA29AD3A55DE1165D219ADEDDB5175253E2D1489E9B6FDD02E2C3D3A4B54D60E3A47334C37913C5695378A669E9B72DEC32AF5434F93F46176EBF044C4784467C700470D0C0B40C8A088C815816 -MD = 681BABBD2E351501C285812E06F20940FD865516CF028B4787D1FFCCD0D537705E8E9B73C608D5A8DC4F08EEE0902AC12936DDB8C7B29228C6AAF8D0B909C30D - -Len = 953 -Msg = 1E8E26C707DB4BB0F459F069840D28639F22CF740EC59D8F3BB840F7654642C2DB228259BCCB3532944D85D2F33BE1B401886E9FCF7101FBB4539CDA1E81529C160ACCA588E706749FFE70B20665FD4FD91BCA558E0D28DC03CF8469930CE8307519E8724373EAA2B6F22ECF04989078F91A2FE9A8E4A800 -MD = E37096389E29570B7102EF45F5DE2A7BD1FF58BA2CC68DCA373FE5BECC0E5C9220362BDC79BD7B74B0483409E95CE9C58E6FCD06732B8D4CD4213AFB3AED9BE7 - -Len = 954 -Msg = BBCE8A5EE8C0EB938B8BA8D0E9390B12BBBE6178ED29EAACBF92869F72BC157AA4F20F150059CF228399079449AAF9893FCF65775E5CE706898C4FC89DEBC86447C64A2CFCD22DBD2F639F199C1956571FD1C34A11609201F520921B1489F58B51EFBCEABF3CDA1853A7A66D076162A9C2053051BCA78C40 -MD = 05157089E10F01F845D45F6629B6B6A86C4A15F67A21D932EFDE4468B79673471DC8F0E813DD565278004EF874AE789AD6EBBD89FB447EC55226683FE98A0147 - -Len = 955 -Msg = 036E2807A1F1675D8F01F88F1A5C34D664F49BBFCFCB60892D24DF43CBD6566BB7DBF33D47D816DBF244B7912E6A72740508804D3FDB4575B67D97B202DB80AE9A2B88EF84E7C74C3FB6A1F0FBAB8E62D96F76855E43D0BA372457A21503BA621CB52FF039CAA32DB99EA39B466CEA191287FA069118F1C0 -MD = D08973873B92A06E3F0660B1711FBAD8A8F9367565A2B9D1F8FAFEC75616F1DF03148E2C72B19F82A9DB87FAA0E59ADEFE43BD263B779FEA0BCECC47ADA42389 - -Len = 956 -Msg = AEB50208D1F67BD48A95A3BB4454C9E4ACACF2C8935F2E48C06B1F73AD8C497FDB9F99E11BA78C12D83E93ED8BC34BF7BB27770F647BE727F0C92FBBAAB92DB31039EAA3416A8BD803470A531DE363254942F921AC597E949D95858FF42B6C7F385F90DCC8869A95B5E31466845347DCCA479B07D35822F0 -MD = 2B95C6271F191B2F1FB168F908268EFD8DB4C9B0A193AEE5AE66011A91524BC50C9F411EBBFE03BABEBFA48487DB9F13F0BA1ED58FBAC9CBB0BB24A669FB171F - -Len = 957 -Msg = 5F69A5461117B8C2DE8048AEC04B2D0C7865A9107E3D90B7CCB3CB20B0E84FB7E162C75A766D7A1B9F6EF588581683B5CD125EA541CE47E6A78904D542C23F5184A64F073D931CC23690457AFD3538844914BA118A7D7C8A24F198CFBCC9675CFDFEC29F1E84658A0F8A344910FAA51E8D0719A9027E4298 -MD = F3A7D24732805A5A73AE9622C159B73C309CF3E8A70D4DDF73EB0AA8F442087235E267C58C5326F2646195D50323101E3C899A56491FF130ABEB1CDB747B78C0 - -Len = 958 -Msg = 4116C941F3786516EF58063F0C226264F17037040C08817D86DA911C86B04DFAD0A64CD1BBF611EAA8C21AEFD71FBE41123090F71373B8BE43B1DBDB8758E63219CFBB7FC1F665834B8F5DB8FFEB5C8144E5ACDDB42AE73ED3848B933CB43E9CF7E2F77063D0BC5693FBC6775DDED5B57C0B70FFBDFE3AB0 -MD = 65D9437F07F330A441FEE459F6CC5A268E7E211926C8AAB0A667F84ADA26C30DC357A46DA0900A1DBF209393F20EA36ADA8341A5C06D31926479F3E82CE213B2 - -Len = 959 -Msg = CF191D62C44A107949F4D8E62C61069DD7771CD42D183B27314874EB19067EAC1919C849470B31B0DDB1D2886EFADBBD68D28B22B021F9A0F4890F02D7084EC08E3DDF0A14C0132FC8EDA62A786FA28F3092A517E525567F8EB512439431DBDDD4768FB7BFA596D8A04603481DD84740D296F8FEA8A52978 -MD = 46F97A57F60CF026AE284AC3E8A1250715BB711977F64922E85C4BEFB5F1837A42A2FFE884B911DFC7A3025EECCCE2813547C51F52AF46B46CF671E2E99727CA - -Len = 960 -Msg = D1E654B77CB155F5C77971A64DF9E5D34C26A3CAD6C7F6B300D39DEB1910094691ADAA095BE4BA5D86690A976428635D5526F3E946F7DC3BD4DBC78999E653441187A81F9ADCD5A3C5F254BC8256B0158F54673DCC1232F6E918EBFC6C51CE67EAEB042D9F57EEC4BFE910E169AF78B3DE48D137DF4F2840 -MD = C46D2262F186421D07FD740F922306D99B1E3826F6A32486BE5A91DC298F177F50915E17EB4EA2E45494C501736CEFB0E22ACD989DA41AC7BB7BE56B04BFB5E1 - -Len = 961 -Msg = 9475609D6686B9DCA38EA5DE587DAD1F458D59F96BE790896A32B2AF82F897389BFED7572018883432007222720EAE42A654DFEEAEC1653D3464E28282D567E8E59CC6EC53FF6AB20052D2FB27FB8001313E75700F58D6339EA4C55DBAC4833DB7FA59E5512019DB87022F8BDE9A4366484C755B410A01AB00 -MD = 01AD6AAFF0D2BEE6BE153476B38B37C5F75E87660148EDA1776BD01D5FA3A9FD81A8F2E2E1C91F167E86E2EEF79BEA8F79F09C349BDC78C74A858DA37BE33059 - -Len = 962 -Msg = 61BB6E84099A381FA591A31CBF684DD9B68B5F752A2246E78FB57C016F66E43102C5CA5B0F19A7F6AC5A20174A7180FB9FB2B6D2DC8E4CAAEDEEDCC6F4032054E8B698E613B545D75AE10C0A344B656C8FB759B5A615DD6DD3EEF8254BEAB7FF03430E8DD0BF8FAA19A9F469DA37D943E71DE3B477873FFB80 -MD = 60EA92CC34F4E8280E65EA55B737B8F5D6B8099C64B9F19564F108F9541B79DD6C1B5E1EED9315D9FE586FB9D4B8C684001D1F42DD5599E0947A881612B22AA4 - -Len = 963 -Msg = DAC1487938375CDA49E04607C6B7A3CBC3AE585AA81B05F009353C52D4A0A9398E12F10E3EC433232C2FC21E46C614D085D1570BB70D107039C2D13A121B8BC45B0681A19D05D62CB582970B14E982F04BA4AB2B6C5EF3379FFF473592DAD92B61BE8E967A90F3E1D2962947B9FBF5DB7C48D8139ED85DF2C0 -MD = AA68FC3AC5C263C4CE611312FA16FD1E1831C08464E3A77672F93AF5DFFCE98A98C96DE7CFE62FA63FCCB24D2F4601F296162767FE5777426619D67B8BB2A232 - -Len = 964 -Msg = DCE3F8690BB3AA06BFCECBFFD4355049288C073272A503BB9B351D82062E9EE85E7BABAAF87AC25ECC2E3895F8CD1FBE2F9DCE21A4E9295BF1F8B0CB8DF98726B390D52AD21492CF442385959E226047BBE0A9B10D013E7AC9BB3D3BB89E262EBECC0AEA914D6375977C4E39E55063C73EEF6C8CB533D18AC0 -MD = C583FBB53586F3FFEADDA0F0463772726AF1C127850553685B8CE5915E57032AC13A9B541D2D52B85F39F4ED387A69704574E43A9200520928BEE8D381555B49 - -Len = 965 -Msg = 1BDF288A6AEAEE17B671269B70FF9FC51F7C6B27A8B492C134D37CC217C225EABAD8A904F555E19F78B51E579D77082569B6DC2DAF8C30516B40611781ABB58DB528FFE79336F34CD07E0EA394E6ED982F5992EB89FE8F693B0F51F177518A7B42C3794AB9C55A02846F1AB250480E81AA82BCB18C173A6030 -MD = 06FFB5E7AE445D9E62BB6FDAC6AC3DB1CB27361AC32F64B7B1987FBFBD358EF68AC39E9C4B487040A5550F21D03C74162A57501A36272CD18CF761E5B5082FE6 - -Len = 966 -Msg = 588FE175F9D58E6149FA78E460E72D2BBE43EC3EAE3ECD4E39B292B627B4BC24E87E410087317E1A9D0855440B56A036349C18FED313D01CD85B30B67973F7AE119154120C2A0EAA3174CC89D68A598347353DCF8AB4D2A5AF0E2B954CC0EDD3A5D3725D60A870351000A24E7B9EE126F54790C3649E0C509C -MD = AE25E58769E4BBE29E459B624F3467CC1593B8DB837FDE46EDAC44273183878AF57A7AC715FC8C8D3BFBA5B6475577D64C582887077B94BB459F5ADB94B07660 - -Len = 967 -Msg = A5175DC9A97A1104E5CD368A1F3529A291BEB228E2CE94DDD8AA413FB6E860A654C95C649F594445F5F681484DF635D244213C8211C01DBF382942C3F83A6A1252E138529341FB45C06CB08B47D34E305390927FF9811933938B35297E63F668D907FAF7CFCC2DC3253A4BF80283AEFCAC42C63FE20D8F097C -MD = 03067F62A9F9F7E0BA101E2B4C617EF6BB547B945F2F9B532DFC3B3211810703B2940C2ACA0B90ED962BA9BAAD39D9D6942D469239B6A7CBB7678B83FC81BBA8 - -Len = 968 -Msg = 626F68C18A69A6590159A9C46BE03D5965698F2DAC3DE779B878B3D9C421E0F21B955A16C715C1EC1E22CE3EB645B8B4F263F60660EA3028981EEBD6C8C3A367285B691C8EE56944A7CD1217997E1D9C21620B536BDBD5DE8925FF71DEC6FBC06624AB6B21E329813DE90D1E572DFB89A18120C3F606355D25 -MD = 0B3DBC770332823E686470D842104D3B3C1452F64F1BCC71C5F3FAD1C0D93F21EFBD48D73C7D4909227B06B06D54057A74E03C36D9C106EBA79411F1E6E1CFFE - -Len = 969 -Msg = 8B7EC746D297783731F7FF197779A6C0E053A84D255D9B69CF811CE154510B7D829F46E2F8F1FCF3185DB1987C7A137FF644A05BC0FFE4795419AB82F43D2EE079335101C95950740F76A3324F935C84EF7A122665F37CC7040824771C3198C745B92FAE74133488A0417C5E13E1D8C64532160789B93DCA4800 -MD = 4F00A8AD0016C326179757C5DE1394CCEE1990B98CE6B8768E38A0A83D7D32F017299DA4C505BEDDA3C32C9C78CF5011A845C43F22028C94B01C9FAC69527218 - -Len = 970 -Msg = A94F24D5ABFF3CCC0B8D72C4A721E3ED82FC279648E6BA849CA895B0600A086241C7810DE204B25104E82A528CB2C43057CF3660551D04D9F737D58EC0DAEB7E3A4573EFE20C381D8E8C79B6868F6FF718E5D6CF0613256B651CF06A5E8B4E20C43D6B7E6BA050A1F9F60C56F47BBFD970C3CAEC91DFC13E7100 -MD = F4A48EC4D0A7843061F9A90F7DDF7AC8F4803A4231CC1B132C2B8857D82D9D2B42B6BFF8D67958DFF8A8018EE15BEA2842471026810AC764633F1AB51343CAC9 - -Len = 971 -Msg = B9BF29E393C058AF5C3BCF93FED768EAEACD6CA7227E9730A2E78FC6C8E8D944967F2B412FC8B9BA8E3DFF001AC96B1E04AC0F10CD5207B3DBE7A493BCF49C2719AE0D20CABD072D7752F10EEE993373737CBBB33062CCB6C27A6606DDD8B7B57887ED9BE9FDF615D513830134867D039BD191501A77650987E0 -MD = EB9BAC73A0B4C23AADEBBDA4586BEEDB5E79201755F073A7A46844D7F87D02DE16ED30F8E60846AAD1491331C8F6CCC40E1D99C28141788E93D35A1067620863 - -Len = 972 -Msg = A4A5663566413E82C9FF0EF700F98298437A3186142E70862E19DEBF018BC209BBCF4B251A994A14E1A4F1C8B07FE4DF5AA10556391F3BDB6FAE11FC8EC2AD36EC31767C73EBB71BCF688F6122F0015FFB5B65FC9B70401F8B4118C8A98AEB287770029CD0BB29FC451E4F114EEDDA588684C4EC8D18E68E88B0 -MD = 89F82C087E21DEBF4986CA71578ED3001DA6E503383C943756F0BED4BF1BA7D53A31399ACAB6A71CB924BD1A103B1900D104951E053D40E7F346FE9BDE03AD76 - -Len = 973 -Msg = 55DAED515EB96107C3C810648169BF65CB31CC423D10280C60F872855AF11088598254FE85EBA0C5776C787D314B5EF092209D354DCD84F85327A92C177AED949A6C2739022597119D1ED4808FE9FF2B1BC4FB2D902F79C6E6E5435A4F4737CEC79570834CD3BD4E9BF7F2A3F7E0D3DCD006AF83CD188D61A4E0 -MD = 9ECBBCC425DFA5484A2C146AB6531A053A683A9BD7BD9D1AFAEE8E35C770D9B811E9E65A98DAF9CBD2086809AEB6CB6D60E0A1415F65F5924F1682956D6B1249 - -Len = 974 -Msg = 107FE24AB253AD1B0100BAA74056A3637FB2A4CF89B13F618F947268BFDE6268F964B43C87C99D908657E9BA033059432A4DEA8E1748F7043C73FAE823B74CC10214965EC2F1E021AFAC25D4A3928C90D88CE4B881DB75DB5137B0B890211B9F1F89E262CF062223FBDB7B7831A320439B27013C83B564DF9F2C -MD = 2702EDDA64B7ACBFDB4E69D1EB02A12C9269160673551A2BEE7F8D0D448366DE39F307FF4C8B53347687AF545336F942BED9D10BB2F16718E9ED8177F3562E35 - -Len = 975 -Msg = F6202E868BFFD3E288A03F4D334B78B723CC20F86FEC6AEEAA06693E3C6BD631C42DCE3B999051BB23EAC7500E9D94EA968C7BB0D63011D9CE2A4A58954EAA2AD8DA5A275E39453CAC036227E4EA4EF0712252A5F11981A63EEEA45BD335D33140208CB20E7CB2B4870AD4DFFB5E0E8C06D7E822756782B5D2B0 -MD = EDBCB8A6EFAA7315A04E0B2FBFF4207935A35D68106CFC6EF2A62E111F7B82F1A1C5AEF89451D8B24C0D845FE345FA3932727F0DCCCD021DFFEE032E238DE1A7 - -Len = 976 -Msg = 651A6FB3C4B80C7C68C6011675E6094EB56ABF5FC3057324EBC6477825061F9F27E7A94633ABD1FA598A746E4A577CAF524C52EC1788471F92B8C37F23795CA19D559D446CAB16CBCDCE90B79FA1026CEE77BF4AB1B503C5B94C2256AD75B3EAC6FD5DCB96ACA4B03A834BFB4E9AF988CECBF2AE597CB9097940 -MD = CA46276B0DC2EC4424BB7136EAE1AF207BD6E5CD833691C7D37B2CAEAF4F484B96A3476FC25FEB206AD37CF975383DD522CA0CC6200A3867FEE7F178D6953FEF - -Len = 977 -Msg = D92EC59AE7D2C38D0D6C4203EB551D29AE72AE152241E0D42D6DA610B3070A4DED3051A3A607CAEF6EF487402BB205C318AF4C22048F1E3C9AE33B087C2DCE7A40F7D61BBB6AB8C0BF8EB60CCAF24CA5222A72967AB74A99C2096B8E432CDFA0F38E6BD59DAD95E1B0A5932328A36B62897E872A20358D79988D00 -MD = B99B71C26D52F6BF7CD939A9E02606866E2E6F71A61D6DA99795F28A8E2AC004109BA1350216E1F45B07048E949A14D425BD021DA2BD266C500FFD5276EA4D81 - -Len = 978 -Msg = BEB1651BC96984876B509D703934E82198129E9F6F07492C1F37A6C8F8A7AF06D474BB23388AA492F41F589A0488C94FFF4BB6C518172CDF1804EC417DE35C212A44B65C73D236882327228DCEAC23BB05796735AE4AF05A7D837824CF6E4DC429963C16B2145B29DBA1516B37ABDF0C0C4F917EADC2643BFDB580 -MD = E006181E172A4E81A6C4632C1DD725002B529D87F4861587ECF3BBF780C7707CB0DF930DA4EB55550C77861D3A8F1F275118FEBB1256A9C63B8C5A35D20650FE - -Len = 979 -Msg = B19714A2A02455CAAE27AE643E9725A143BA473B9A6A40E8557C23072F094404E0D22A4649264C064B9869AF35F01D9453F2B452AB469B7E794A60727B23C1DD83BDECFD8269DB59FEA168E524A9D7A9F700247C5965F8DF5A179FB667CCAFF1BB189D708E6D018DFB5B3CC16466B50B6E6244793887D637F60E00 -MD = 28BFDDF453CE8A4B7A1D608D54D90145F9CB0F8AE2A4CB63526495218F1CAB8809976608285FF6CD0BE462C444CB90F169074F4611074630B421BA21230F50D3 - -Len = 980 -Msg = 9DAAFFB294AE4DE0628718707F96B2714032CFC2B15B7091610EE876EFFFE498390F5625B33BAC592BDBCD5AC419F1C4133F346931BC2EB1A82A90AB5941FEE961529358F1A739894104CA8EBB3DEA22B492E81F2A8D7EBF7B208C2000F0DE664E7BC4B2792439AAEE2E796ED11D9DE254B583C5A1FAEF2BA01EE0 -MD = FD9F1ECC86255C81F863EC3CD5214129981AB85CFDA410C2F124EED36E5FE45C047DBF4B71B618607ED0CF940AD57C3984A9345EB6F164E514AC260F4243435F - -Len = 981 -Msg = 29800F52B584B675C62B0B26053A303D82E8707329E83689FF63DE1A55874D2155305FB332E49E49C016731B4CB4407D28703FF3CC40116DC5AE81FB8080F0DD8E29298570273C0255CBBE85C6236984F0FD0021A4951BD979ACF8C092485AF7DFBE4B98EDC81DC92CB2C3AEC62DCA758F70288FF04EC2AA2427D8 -MD = 55ECD183B0290FCF41D71FB45A1FF10B6741534949076EA152C5C44ACF012252880964C27E6FC8D95B4A2D6CC921C016646D3393773D44359B7D3CD763C2F322 - -Len = 982 -Msg = CDE6DFADC607435F1D98A2E6C907869B5272F9CC63B851BEAE6185E4E1C08456C612ADD38FAF4E089A0DD4D8C74FD2705805F87417744938A99038AFA6A708BCAC88EB7723747099781BC44B79C35C00F0E609EB8E5FA65B197B3A6CAA4A1941CB5B9999FFBCE1ACA410D1F9EFE7BE43CFF02FB35FE893345EC070 -MD = 32517CC9B5C5099F90B7EFF47CD2ACDFD2B1C4E2199D8AA1D8D3DFA196C826799A128E8AA994A245299FD9EDB4298F11D79A3F1E3150D8E8A2EABB1ED7151F56 - -Len = 983 -Msg = DECE0DCDAD18A4A646CFDF248D5A68171B9968E65F145574E6DEA421E73569DA82A9B941CA3973A342EA5AE80588C73489D3F42F28D347BA2FE9D67E0E7326BC3857D21A4AA0B70CE596072AA7979159F016AD11C28B213BFC467D68FCA254FCA30B0089AB52BE070704273853498FA055C7085696AF13DA063F7A -MD = 20BB073CBC4276C426529834709CFB91553CA348AB2757801957D14AA578327BF36095FEC7341F51F80160B9C2E0B9ECE23C35806EEA6B6E0F2D0C30D3C52A06 - -Len = 984 -Msg = 8AAF072FCE8A2D96BC10B3C91C809EE93072FB205CA7F10ABD82ECD82CF040B1BC49EA13D1857815C0E99781DE3ADBB5443CE1C897E55188CEAF221AA9681638DE05AE1B322938F46BCE51543B57ECDB4C266272259D1798DE13BE90E10EFEC2D07484D9B21A3870E2AA9E06C21AA2D0C9CF420080A80A91DEE16F -MD = 815B44668BF3751A3392940FCA54C1E3E4EF5227B052332AFE6EB7A10AC8AD6438CE8A0277AA14BCC41590F6D6A10B6B1BABE6BB4F8D777EA576D634B0BE41C0 - -Len = 985 -Msg = BF5EA928E0690803906D6B96FD0EB1B2791C097B2E89A833CFB31E39925898AA6AC461F68585C43A4CA02F1E2E2E0079BAE65F93FEE50F0338913B806CAD9BA941D8A089F219635B170905D3C6564B9D8F30923873CEF618D44DA784B659F0A070454D57BB93AFFA4BD4CF2B12266F5BFA32A8BD97420DB526D02600 -MD = 93873C85C91D90665742AECF61A82CEAE89B6622F2D89523755E21F6794CA35143417D1121B433960B069885415B76FEF4262B3378254582372B1C0DA7DFCF88 - -Len = 986 -Msg = 8739B52698115E947D96E0F4B41E488BF1233CDC7ACC1B44A18EB0FE4DF8A6EDB47B5483B9A1389174753441289E00205C4CF7A55FD4D2ACF5570686DC12123DC4CD26DB5C6DE03CEAD5207BEE94D63F280CF40D26EBB7206122F34D17ABDD570A4494DCB665D40BA8DBDC46650B4166D2613D628B3FD1BB6A60C9C0 -MD = CF9F85D78F07357BF92B480CB8B28528B05996A5FAB164320CCAD9A53F1A281007603CE309B213F665954EBBD8643C800A41648810768861AA04FA6F3A9596B2 - -Len = 987 -Msg = D610C8FCCF7577909810F3C630784EFCD2FD11F4F5600774977A55CF141CB15254237645BCCB124420F4AB52268AE4E3D128FEA4AF96EA09220874F5ABE331AFDBA7282B3108F5633D00EC247F862ACE4FBCE38F91A02C21B03136AD7FBC105A3AC0A49B08637BA4039FC3EF1FD2A82AC756FDE1C753C628CADC8C80 -MD = 119204885389EDAAE29DE0480DD912CC069E870A0D0ECDC95CAECA7C4D5BB4663BD7ECC9AC607BCB48429BDAE0A365E467FAE2A5993D610187F09F1BFC0F8C01 - -Len = 988 -Msg = 075487E9BA7B7C40CE8107A554A8940D6B041920A9124366D88DC20E2F89622E8A98140CC1F23AD25C71E6261D3C31BD9BDDB9A8DF92581350ED66272507BF63A6B838AC8099C31FF7832423B1B7B066706F318E5AC45F04999C5A29587CD11A21D3A96EE4DF76D5B25D5E5A978A79B67398FF6C12700A5290A4E580 -MD = C8280D6F0E2787825BDA132E7A75E963C01EAB2328A2F501D147713E1285B738E5B846E609229C84CD6593112F2604E53833B915AEA125AB810F88313D723FB5 - -Len = 989 -Msg = 102B3D774615C1D8140E59F3FE9AF4DF5FF0165A61E5D574244ACDFCF8F20CD0EC99B5E4D8562C2927E47395D7649461A1FE98C845F0164BBBC1CE42309B4C7810A49A99A16FB123418AD4B88B012B5DF7216402491A63B67D55989498F15A94D4AA6C55964EE0F557509C19F1A6E3BB76926FB6BBB5ED7AD6E23B80 -MD = 4FCB4A50E14F3AB4FD1FB5F2CF8847D613A8CF241C91B6AD48ADC944605BA9DAC39B3F97C3DB39A5624A8228999DBBFD61F57C08D6ACFA40A9741365461D098A - -Len = 990 -Msg = 2E67063E542E25159C357C82BD71E869E7A1F1C364D9C4932C015EB6954E2BF55F087AF672D91BC3061933C8E94C6E524DE8FA2D85B7BB9E0C9C50ECD078A9147F431CAF3AB207AEAF57A10C20016943084B0225238C6F8F36C5631D359E6D6BFD29440A404C9607981CC8DD2051002F049F58FD3D08390B8DDA62A0 -MD = 0C35EDA3AE2D28398000A70466CE87AD8863D485271946BD71DB882529DB0F95117A7394625B5760EDBA26770AD5F52FACD5FBAFE1DDA80CF6166A88F78C9813 - -Len = 991 -Msg = 335674F14CD689A1D83B1BC3568CD0F1BE5A8024349E5A863C40F3FD2B4DD49F5F13823C4D2F38BF87D4BB30561B21D99294E82653B98495E8186194D636EA00D66FC39EE72ADF537ED3C9B46377DA722097753957932CDA5FF77F0F756585CA7D1C98F084E90E96C1F7425D7B486F1C9844EE3A554B0F8AD620FC7E -MD = 637A54F41AE0A8419947A45F1B6E2251B71589067D3533F07849018BDF155DB63C1F1B13AD2775B8F1B313DA5B4AE5023AF18026826920E07450C7D1504B72C9 - -Len = 992 -Msg = 53F918FD00B1701BD504F8CDEA803ACCA21AC18C564AB90C2A17DA592C7D69688F6580575395551E8CD33E0FEF08CA6ED4588D4D140B3E44C032355DF1C531564D7F4835753344345A6781E11CD5E095B73DF5F82C8AE3AD00877936896671E947CC52E2B29DCD463D90A0C9929128DA222B5A211450BBC0E02448E2 -MD = F47799A8547FC9C07D0F808029E7335607D72224BE286E118657BD13A2C51D0374426D9EEB7693BDE5EC6181574C1404DF29BF96941862BA1A0A9A5903319498 - -Len = 993 -Msg = 891C926AD668CCD7BB7718C43C2E22A8E5C2D398B8287689326506EF244112D0A5E03B2199F85B01F10DA8C4AB881773BE0870323A0F1BEE0B340DE96BA0EEF086784B496572ECF67B31AFDEE367B808109609D8B997604C0DFCC54CBCB50297E6768B74A609536099B308D30CCB665DEF4033F12D48F7182AF000D900 -MD = 6D70A82B1F37191AFEC6A897E28D86E97AB34616C8ED6BD2082477AD4289D3D22DDF9BC7F3080B7CE1897DA77D9114D26731C4CF9CCC54C7BC59AE5441F54605 - -Len = 994 -Msg = 0D5D9B2A4E8F4B3EC6B901A03AD1F0993E75BFAF629E94CCAE58470FA6411CD874CEF26955CB5ABDB3221BEB44996780E23962C7AD87A92509A98920F1A4486AA27387799AA3255F0BB56CFE17C11A6E9F8CB4FD4C40EE7A514D32F1231B63ED092310D99C2351DC50BC79439DE971F12C863B9EBFB555BA75CDB86B80 -MD = 802C9D12AAC84DA64B5799E4AD5C887DA3FD116A8682C685715E662A928574C97221EEF5E907174AF20D6BE91B823BBFDBF2C4BF5444E6BB555D8F3C441567A3 - -Len = 995 -Msg = C41477734638902C6CD4EFBADC2B78AB296AB64643D08B54FB4328639781993EFCB34777C3642FFD7FE95E773E8F9DD849243C0B268A3C1C867EE6674A303E1E8AE048B1058827C48590B8398ACD53EDF8EB6B97B036ED20AB921B9ABD644384ECEFD985135FE185D69045CF33F5FE18B6193D5B87E330D553999E60C0 -MD = 60861C7530016E69F05A7225BDA0E9353736229273EB7801CBA84D6F623C24D935BB7614976CBFD2E82F807C9B124E4E8C87869AFCAACC7582DBA907D7A5896A - -Len = 996 -Msg = F8DCEEBC6E71E0654F2C0AD8ABC7C07194E32BCB1655C86AA04088A083A675A76D266CCE0823CE15B5C8C059B795B318DFD115E51181414F4FC1619C1DCCBE909ED9A8154ACD44BF14DEA59E13E02C8940A122AE36BDC86E088A1725113560B5F6F3E33DEDE2495538F6D49676E0BD590C721674D55BE3B138DB3BBD50 -MD = BC315B083571F878744D85A1A6A7715CE06FC2D3AD52BCB1BDB32F67A9E2375915D0642B58258760977D595C100D4BBFCE2FBCCEBDFAD7C3485136D2DBD91775 - -Len = 997 -Msg = B5A120C542550C04AE93A55997D6AC48A3A3CDD159C3151882BEA757AB79CE25892B11C2A6FCACC19135DE170AF6DBECACD6B0172F1DFC9646DA56EA3623CD6179F2F023D06952505731E85F4295833819268FA43BF3B00E5418D355AF79D830400E250E5F04CCB7CBDFDC20CA1F1534AD8D0C0AF78A7048D8CDDAE280 -MD = 96B87724B6A6B97BC1DD2D0FC63275F26E7795B704232146387DB88D6687934CB532E59818FE8BB7ACD8368D5D32EC7A61519BBDCE4D21C7E299BF0F7C493719 - -Len = 998 -Msg = 29DBDC75C55797AF9D8EB7205B0BC8703B69308568C992E23FB33506F880857A02EC1D4B5149A0627CC898022F7C8F5429C5C7BCB0D6F8FE8802FEB85A5879CE613EDA128C473AEFBC11EB5ED774035A0A5ABEEACF72B4BB633389745C662FCF678C0691910110091EADC11912D09EAE4877E3B03A997A89261DEE46B0 -MD = 31603387001F0B667B6EFE12EF7BED3898037A97B47E69D4610C2F39C05AD5706C0A8B8F00FE401E55E51DC7D7E2369E1AE37F59CDA27D1E740F3CAA7F9A6E30 - -Len = 999 -Msg = EFC078BE55C0BFF648E9FD2DD9A33B283995B7C4BD5B0999E804EDA614EEE19D224108C5081CF84389165DC607B317711D5D6ECACD080D272B28C364A609138340D8F2681CE9116E5931CEBF9EC81781E19DA49AC394AB340B6543C377BFF08C08AD9EBF9455030644E5A18ACC73CDC64EC0DC58785885A12CCC08D570 -MD = 9CCC920A52DDA8F57DFFABAF5FFD7B09391299669BFB0A855D7C8EA4DCDD7D59B82658DFE5F18F977016937A1FFC96A2777D34B1B15836A5D853D8AA558E5E03 - -Len = 1000 -Msg = A64599B8A61B5CCEC9E67AED69447459C8DA3D1EC6C7C7C82A7428B9B584FA67E90F68E2C00FBBED4613666E5168DA4A16F395F7A3C3832B3B134BFC9CBAA95D2A0FE252F44AC6681EB6D40AB91C1D0282FED6701C57463D3C5F2BB8C6A7301FB4576AA3B5F15510DB8956FF77478C26A7C09BEA7B398CFC83503F538E -MD = 8A0AE12A9E797FB7BD46CBB910076A32873BFFCB9AD98B4FC37316AED681EC49C65ABBB9586405FF96CC80DA4BB8FA73BE1BA9E737595B2307CF369D61BAF59C - -Len = 1001 -Msg = F8A80B5D707D5CB67837175D946F507B9FC4E58A809044BC4E61F4FB2D2B986E4169ED4708E6B2ED0C0C308148129AB65BE6DF0E9C62C115C003580B388D40F29AE4CB435F30C9891D595D72CFFE36FADC5E39FD5B2A423B528106FA717580FDDC65F0B405159BE436C049D22096E314059540D64362439FF04FF07BCE80 -MD = 5FCF46C5E7AC0E15DCF51BA520BEA00FD57A682C74DD11899F0D4EF180D658B49B2E9C8DFF4F4EA31BAA138F39098E7A2C00F9F7F71DFB8832A519E605324493 - -Len = 1002 -Msg = 881397A6C422988B891645BAFAFEFF2EAF4897BC1ED598C693B14FE16F33A553B45BBC4C0FE5F6327460ABC45A35D70427A867DE78BC7BB27C087DCF0E0E416C71D8EF95CC3FEC40AE699470A354580BDA8EA4CD21CFEA433CD2AD7A87DA309C3A7CA82FC80EC318CB7DA213EBAC14D3E8937C07B6175769451699373580 -MD = 8D7FBA1EB04C8B67F73D9CE80A29A2AD5A9EB88551C78D49D7A83D6F7D6ADDFEF885D629066A074041FA55A507188646457ED319056ADE5D879946F5982BF23C - -Len = 1003 -Msg = 2CA31ECAE38ECCBDD176B36679ECC7914EDE98BD88D3426589EE92A0BC1CEA705712B3D7CD9DD823A56F22F506966FFE58A2B6E10130B47401A62F67687E4DA182DAAD13226F08784A7DD8C8E1C1005EBC8D631D6A906C1C3EF7846298A9B18826A23F7A88BF20FA80E583A12D3A5A675998D5B561CEC96B9072E4169040 -MD = CF03B0588BBB80DCE3E04B8DC70EC7BF9DE8439D1841BB8A251C0D46E4265B26EF0111EAB188A3DDE649D833FA07326A3BE2FF4C6DFAE9028B8E8C2C78C264E0 - -Len = 1004 -Msg = E352E6FC140B3A9CF77DD2313ED07C5BBEAD0B6DB80C38D9667036AF05BBAC2AA8E31B93A63C98A966E13356FA8E6FC312B84D8FDD72A29AFBA5429D67521F9E650C0D68501DA50274FBFB946365FC6F5136F855B973054B8FFDD9237E8A88E955CDBF7762E66DC371F00E0AC8F91FFF6572894D2C968393EAAE5B0B68A0 -MD = F3B745B72B9C62EC618EEA507091CA408A934979B980B2EC561A6099CC6E99E012FA597EE49B976B424D7894DDD56E70733FAFA619DC12DCE216AEFC43BF2A0A - -Len = 1005 -Msg = 6A8303912378CC2EFCD9B9A67FC21041FB19CE06D716B180FB308BE88B7F3B3B089C833378D9D97C8D0B2D35F68C48CC25A2202565F8FFBDF926B2E99F0E62C7E7A876C25A58219A46C639D0A8FD12474A6EEFB717A4343F301E5801A8F4011FA7391F8C37386A3209B0E29A8C2656D245E60906D2BB0671402018CBBDD8 -MD = 7EB9BBDC91C591C836802B0724F0A843B8576EEE01138603D1FA70933D8D21DD220208E3918C54BCC0B8A19E28D6631AB05381D60AEF02115E404A4FD7EB2417 - -Len = 1006 -Msg = 91B2A9D434D3EC751C5881B9F738D5F799B553D6E9D4B8F928C845D4113142FB6EB9BB3D10ED463D83782FDCE58389F2930FFB4AAE89D505AE1FE7370F45E2C4D52EE64BA7F1BAE453CE068B494880F83B8B06EAD4E41889F30EFF6780873E2DC880D1C0500E85B189143BC170231891699D1E42E80375EB48B8A64CB61C -MD = 9779B02C79CB63052854E4A2C0BB49CF986727C84A3D8ADA231F7F900AA9AE272CE56068347EAD0C6A227248CFB9D88461878BF2DFA9793CD13F3AB9FCB26C8B - -Len = 1007 -Msg = DCBA43253DE673A87C700169DF961A6BB5DD1ACFBD29D882933E67CE38A28FCC270028FF5BA9F0CA3CB243FBFDA95955B065873D33C397969E0F6B6BED989B99C72A2C6732C2F4C9A50FF224EE7FEE4A35D008C89A08DD7A69BF0514F0B8418D0BA90BDB5DEC7237B4CC4756192B43587025C49D678213A77ABB8CCC6838 -MD = 745E24147737B280EE789EAC259779B94B6CE8ED116BB37FB9FDF302625B58A429BCDC2880555C5D37D48A6F22D1E4FAFDBF71362534E9CCA722A18C70D0DA12 - -Len = 1008 -Msg = 0E3AB0E054739B00CDB6A87BD12CAE024B54CB5E550E6C425360C2E87E59401F5EC24EF0314855F0F56C47695D56A7FB1417693AF2A1ED5291F2FEE95F75EED54A1B1C2E81226FBFF6F63ADE584911C71967A8EB70933BC3F5D15BC91B5C2644D9516D3C3A8C154EE48E118BD1442C043C7A0DBA5AC5B1D5360AAE5B9065 -MD = A3C6D58872BAFDEDFDD50C0309089240D6977D4D3D59FB3F2BE133C57D2DFCFCC7C027296F74FE58B2A9A6CB7E5D70088934D051CBA57001FE27965CFA071A6F - -Len = 1009 -Msg = CBAF5193380537A7BE1DBF6FBADB77042397BB65E092DEB4CB80BE1B34F92C75F7F1665AFA86590CE2E72CC8B36FB7C0326E37C02D63E153CE92D8A7C8A0AE01B27B41338B21C0C5FBAF8F717D930A2259EAEF2A0151878630A4CBE4024F71C3287687333BB163B1A6AD90102796CC902FA5FDED9E8D036DED9F4FEC12D880 -MD = 7E1ABE715814016CC31B2D67006E476507F8F7536025A9C160B8C39C06CA829FAC59537CC7248C29B0E8D603042E15AE8E70A9C40FF57421C73AAAAE28325D58 - -Len = 1010 -Msg = 2BBEC642C07331548CEBAB8CAFC7A9678156C6D9E0F344D76B924D029B395B5C5C9289793D84C982EA84048DB0241F1A765F6A62BDC005CF6D2A3DA487A83841624D2C9BA17B9D682BB07ACDD98362D58C0956FE14EA33AB66AF46369AF0017E95EFAE72877FF0BAE5F971CC1ABA22FB0407C56A45A29F8CF8613B84C8ED00 -MD = 580340FA8146112FCE444D3C7F93191E9943E173EB54C001A98D22E4097BDA6A9D491A28744128B72F1D34C32FA40183CDD7E6F9984398834A0CBBF5383589AD - -Len = 1011 -Msg = 4A51CD0024B4B64885B922480C07B0D8B5A0FB9333255262BF8D9D5184A2DA73FCCA3E41C9100551D7DE7E2C1EEEA23BEAF4C3D6DBEB9E776BA9FDFF1A12E2C0E1769A1A2504F9CF1D295015E0C302930865F873A81500974727D81B2885620CF3F6D84375E97AFED7CACEEECC4D973E99E398678807EA990ADE94BC6D3F00 -MD = F3DFE0949C7062521E06950E573DF40AA2EBA844AE7DC2F8E5AE7DA11B0F0077BB45BC2F0107E60F95FEF870C5FD1958DA8DECB506463BB9B1C98B668602A8FC - -Len = 1012 -Msg = 42E9B6E6107B2AF444920DBC1CBB9CE206A544D8CE5BB35901428C12E417E1672663EC7AC0E880636ED2F6D314942BA1A5B8A130F5B27756721CAB6B07C210D4292D23B4295105259304659C3A2198F2805FC8E0DA23132E53776309BA28D98CAD0C50B8104FF35A67C609310EF324E20365E695A21AA751B60742EFE9C850 -MD = 1A47BBB387FB700937CF4527F3359BE4B33256A6D47FB2DBEC40325EFF663C60A4FA73109F41EE129690353581DFE026ACB1ADA066F05CD712D78D011AEA06C5 - -Len = 1013 -Msg = C1D22289C5BD9E6E58CE5DFD1E04F8554E21C45DB29826C2CC00C2930FA6523B6300849B3CF3F687156EE70BDDBA13FC0B159901BA0706973B231F1B14DE4E5D6B0530675318F7C9D58319A21D674C56983AA8633956318AEABC4F81C4A67068965A0C32B822C541562E2B73F2F77C1812963C16BF862C1E56F908379A28E0 -MD = 6A1469FF57A4381C9A61F539205A6DCF490A61BD6404862D1050DA40F8A9195A42A9D6A63AA8E8F3698DAA9451438A50073DFD45EF2E471D391D995B85D5B569 - -Len = 1014 -Msg = AC30B8A0576A71EDCF7ED976281063BB934E29B0DA7149CDEBBF8AE7243EBEA77E669D0D831E9995F56DF3B3474D88D721DFC91AF2BDA84DDA53B56C8B3CE6FCC0D4858ED135A3E549B8EA79B8B9CA41B5FAC6E326B75ED57EBB0096A54B2C13421EED8AFA38D9DC88F0CFB71ADD6561F564F28B3BE0CDA21D045081B74BC8 -MD = 87CF5EE114AEA5F5110E5F01D585CFA69A3EF9D71826DEDD4B2B63099E66C09A36E8BD3915186B4EB674E6FCBEEA617F7C21A5D4FBC927D767D913111AD2F0F8 - -Len = 1015 -Msg = CA1CB2686F67E663F17744F498F8C7191CDBCEBCB4C39E67C1136FE707E59F1993E908FA5CB3C31ABC31046B896615096905062BDC4A8909A253D967DD9CB47BFBA1817CDF7870D3A39F5E2C058ACA26C88871D94E3C10DAE7E9659C3D8BA1732B97271F1B41812A89644F3DB0683DFDCAD82C28B3C238B73602857F5DAC3E -MD = 7DB72B99EAA3675F1756352AC745AB7EE3781FFE5A9AE474BFC7480FABDE59A5A7F12B2C5E70DFC83B0F5D5B5676D29EC188ABC7C20368B66945523201FABEA0 - -Len = 1016 -Msg = A62FC595B4096E6336E53FCDFC8D1CC175D71DAC9D750A6133D23199EAAC288207944CEA6B16D27631915B4619F743DA2E30A0C00BBDB1BBB35AB852EF3B9AEC6B0A8DCC6E9E1ABAA3AD62AC0A6C5DE765DE2C3711B769E3FDE44A74016FFF82AC46FA8F1797D3B2A726B696E3DEA5530439ACEE3A45C2A51BC32DD055650B -MD = 11E0E521B55F02BEFC7207C06444FCC0C16DCF6F34962921B709A322F35E2193477B0DFA21F213F209705FF3958531A75D94346075FEB29A288B62E2315AE270 - -Len = 1017 -Msg = F27A756754DF98BA50E2A4EE3A11535C80A2076191D08CF98015F232BE0599317EABE4168C8A4ADC9EEEEF6DF285B9B00BD5730EFA61CFB094024D5B4C20EF6F8CDC1DF6CB6F75389905BB40F662C2D4D293E61E59A6EC2186600531E17E9A4D58F785029E6603B09C4AAAD31F0191CA3FFCB943A976E508F15918BAA7416500 -MD = F0C4778FC04643C17ECAC97EA31191AE2C58A697A31C860E6DA08FC40AA787F4C835F32EC218FA4EAB0EAA18760B332BFBBFB9535517D33F50645BF165DFA0F2 - -Len = 1018 -Msg = DC3A0D1D54DE91AF722FABE877CC34147D356EBB79F45F18F7BFB2772F53167C712FB6D6CD8E51FA6DD3D3E78E49C2B6489FC38AB0311FFDB36A5AB6B658FD02A4710B8897324163E3B233FA7EDFD672F44E1AD4CEFE2EAB06C8D8421D05D4F300DD967215EEC4A8AD9AF47F04D2C99C0205D6B66415B6DF4B7EF60DE972FE40 -MD = 19955F55A52DD427E6BD1E80F20F1DA548FA881F96BDB32A79931295797E287BC6DD60961AD92A1D1857FF32E93403FC7EBDF5EB2519BBE376AA053BC1CD6728 - -Len = 1019 -Msg = B39C004D0A5DDF2AAC50BD18F447723AAF56CB3089D8619AF0A86904AFAACCE22AE12C376579F53B5E63B16A37E710ED86A24F7071D0AE6D4E697754896BA7D647B7E10A0D56E5EFF13C4D213F20F34E57D2EE99E0232518CFF32BFED139337FA4FB8E5AAEAE68A6671AE852724E0978BEFB518B97E2DDE76760739CC0869C00 -MD = ACFA2229928DFC38F2BF2E168CB38FE214D7F3DC42668631FF62401FCAABBD7B599529532C3A43867537DABB0E545A33BDD956321244FA20BBB732CDBBDD3527 - -Len = 1020 -Msg = 25016111E052E9A09A597EE2AC0F5624C970A4E1A1411160E13D0D37F4F0013358A5DF1590D1215397BA8ED93463142D9194A0CAF5F6FB3C8BA2F7B151C764A873A6F1A529D38C77F1A993BC7E98D6FE7FBCC66E9F8C96AB7A17A728BA2FB01A017769E208802BB1BFD7E837709B408D3ACDA2CEF1127D4F8332F7933B664980 -MD = A181DABC3B46056B93EC4A51E9DD6AE752DE04383FE8C2DD1CFC8868E3C929C1B1644362874D60B819E42C0824606A43C10D6D83B107F54E5D40178864A6DFC1 - -Len = 1021 -Msg = 7E699CD10F06D8CC6CDAE2C97CB90DA76FC28E1349276390C7DC7388409B7AF6118F5F291559145E09A47C346B32C89DF8F6945C6C901875CDF143AB3BCF6F6CD122783900918079B193E18461567FABB6FD6B18266519C7E4CEFA79CA89558A5613B67A375AB603AA796F0F20A3D79E7F47ED84E996F23D9F3DAB645D30AD00 -MD = 530BFFF6C24C8D2620F4C8F809FFA9A83FD4F58BE71FAD43110F7AD564E8D778760476FD0296AFF9605B65C9B1FE2CAD7DCB77C51333779FBC1BBB050CA3F5EB - -Len = 1022 -Msg = 7C5260CCCC53E47F31F2389A70B999403F90933FF1EBCDE519D5C13F98F5209BC1D3DBE907DF24AE4655F64DEAE48DA7F932805BBED5BD670CE1180A9CD095BFBE078316AFAC497D45DF3DEEA8BB092A8827C0E4C63F5AE2408465B22BCB793271207818220B5E9001B14FF788E992D5C70FE7EB19FD1AFAE93CF8D22EE33168 -MD = 42954FD655918883E15A12960EC3EC4EA74B15E420F66AD1FFA8FDC38184A1E194C83198685E4CDD6CB4552E0EBF0C4AB97AA562A93E433AE76578FEB0B1A6EB - -Len = 1023 -Msg = 1B4BF91CE5B2317E526F4046E9CB668AECD040B0F445E74A57544BE2A4F8572C5BD363240474BE6E7285B1A094E0F938D927BAF67B26C648A4A2933EECA67B3610210B7D3ABC972A0A6E1698BF2FC8E53E50FF4458C2DC5D581F78CE93A7D5758B3779FE9C169282FBB5BB0FBB84253AF925D1599D63C1216232CDEAD5A6AA6C -MD = 246C246271B8EF19589389ED0FA630A71E320BF854838B023DCBD64FE5A8E02DFE7B3948BD516E935A2DD93EE8CCCF5046C85F2996F7CB366B36F8C6DA6D0496 - -Len = 1024 -Msg = 2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817 -MD = AEBBA57C8ED5AF6EC93F4AA45772FF5167B7EA88DFA71364F37D8FC5FDB7DC3B2C8331A08023F21D110B7D821E2DC7E860826235E7E6291912AC521384747354 - -Len = 1025 -Msg = 6EFE4CEA291F0EAB9A6240240558F1D65CB9570E0D0DF643146470CAD699F010D2E22AD80E1B5C0312B9615084CC515BDF63E5F4153D31D97322B6583D962FA5B2864A7E5759B6E5E5472A8EB058046170B9E6FE71D49143B2B095261A0FEE5254B5CC94AF47E54BC23AB122AF7662BAD4C908A80CCF380A64854FFF50E1600300 -MD = 21D1D9A7141F46629E15C03F92EADBA3646C43CEA8FA9571CCB3D87FD0E7184A2808996DEA0397D4F8D2102F58A08DFE011A07FCDA70EA91233E9219580DBB81 - -Len = 1026 -Msg = CA5E7C549122799F037C32146F540EEF7F559847000F24429C6163D88BF3FB8D8A973675A565340B84317C49F6A998125F0A0E282F9F0750D167DE1B52C2F17BE54297910FEB779639436FA5A07B56456EED08C838296FDA8171854208C9DC9EC982A5AF9B407269E89DA2DEBD8F26020DD91232AAD4D78C1BE53D1E3261FC3380 -MD = C8B07FA5AEB4485F392BA6841572EF6F2EB145B3DA4D54CAFD7151D4DBD806FC9353705ABBDE2624D1D958212812BC82CE0648566B560EE1F7456AD4B901C024 - -Len = 1027 -Msg = 7CB99BC76B5B91CFECC52A2D78F09B63364DCBC4055EAA2CE91714BAB67F00B832E8DE22E9CC577C1496B7A303606789429D1C13DF87773A36D03EB33AF1C7500B6124FF3E2097A79D601453A635294C5F5794625363AF403E49B8F7823704C3F4A1F33A44614CBDE133073FC692F7030F5B2564E509BB84CC65632FEE1F35D980 -MD = 531D44118ED99C06BA3CCE356E339A3A58B871AFEF9EF47FA3E907480439E23E2D1CF9ACA0A960AC714B730FBBF1A2EDA9317B8C708897718B2AAC19EE69E341 - -Len = 1028 -Msg = DFDC85887AA85D70021BBEC37A88C783BE70256A977A14C11B5991ACD3BE5B8945ACCCEB2774E37B8161E105E30F3DC38E2A610EAE923ED300C56006E719F4BBC070E04BC14267612E0ABA5F08A1C7C5070DDC31E30E2B6ACA6289CB509B356B6D67A1BDC383A51E70F689B0CE6F333216AA76209FD23C51E65BA2D04829308610 -MD = C3FE810E3EA16A8A60BAFA81265104448546560866480ECDD72228369B204C9516E6CB681126F66C4DCAF15D9259E553EDB869A7E90F500698D185BC092C550D - -Len = 1029 -Msg = A4490E4E8AA88667CAAA47DE7E8B1CEC83B5C75D883465AC3FC2C875FC068C2857D295B17A64C91861C8D091E54BBC30CB67C27FF77758FF6C976EC39ACF03B0F16E53320A4BB00F3B43D9ECE4151CFCA00C5D0F010165AC8F78A31F6A25F978A5FA988351F7B14EED3D72AC36DC135E86B44A4591C25C7AF98D88032732F9EF60 -MD = 1089D6D90A092698BFFF01444BE98FB8165312C5E0E756ED0FEB3823DDB0530B1A2B0B4BB8883344A61E93E8A6CBF651903CD5BC37C63498B5687C77C072E51B - -Len = 1030 -Msg = 254D2D7947E9A7079C88937766191C20706B2B550576C82ED60B25CB3D262A42E458AD0C900080BD9DE109E25A414644C9CD8AD52554F9519B46952185E04C2928BE22BC07665F04C02EFC5A4EA79A6FA631726BB98EB903AFB014EFDE7DD1261D024A377BC4DCFEEC04E3387F89BE8CD10CA73D1564666D2CBB439D3F9141E4A0 -MD = 3ACD32A244F23DED975C5C744343CCC86EE382804796ABDFB7BE59E4A0B13705DB215DE310DC97C56932ADA32737B119C26D2ABE474142F4D8EAF94B7696A905 - -Len = 1031 -Msg = 78EE5BD77828543846085243397AC50664B2C96499765E491E3ECB95AC6A969B80FE3421A86D31FFE267DE151BA6FD7723CAF30D3EB7EE316B3891C24F8456934AE808DFDE484C421A8BFD3F60AAF2CD2D52B47A6F57875BFCC41A812E90D883448955BE552E351DDD41394124413321435188516FF1D9A461F282CFB835EBC862 -MD = D1FBDDEF72BB0589B1107D1371F83642520D2B02AAD6B3CD2CA09BBB1BCC5A08AAC80639B5CBBAC189CF794F9C52FEE03F44D8F3875B18317F5F95EA5C082956 - -Len = 1032 -Msg = 10DB509B2CDCABA6C062AE33BE48116A29EB18E390E1BBADA5CA0A2718AFBCD23431440106594893043CC7F2625281BF7DE2655880966A23705F0C5155C2F5CCA9F2C2142E96D0A2E763B70686CD421B5DB812DACED0C6D65035FDE558E94F26B3E6DDE5BD13980CC80292B723013BD033284584BFF27657871B0CF07A849F4AE2 -MD = 2DF1E09540B53A17222DAB66275CEBECEB1F8A5DB26B0C41F955FA0549F3367E82299E0CD673958AF7DFA04D741AA63BA2C1AD351764DC9228D215F22C24CA58 - -Len = 1033 -Msg = 17934FEEFB19AF1D162F47DC010049B39C84AEBC5E11D43D9B46F843CF75F8128D7C655F10E7A815E9A6339D1B427268FE1D16B803E1F1C9FBA0C76DB007B520D821FAF833248F539A368ED17396DAE14C85009FAD853B158C1C48FB06006465367E3ED31437580E094E25452FF26DBAC133553D3BD22B7C1578E314BA047B799280 -MD = D12839FF8DADB84E9576BCB122A9223173D22DB9784E7CCCCA5BE57DF3F6F5174EC3F0CB43790E0C0E53C8AF8118C6EB295C85CC0D4E2615272EA88DA974F56C - -Len = 1034 -Msg = F828FF08E8D707D43B3D19E6528A3E0692259A8BBCD079A4030EE0A43B095E7C508666123E7DAB54D93A71A3A67C8013EA2E20AE0629A62242FE190F7891BAB9234CBB7AAAE3AADE2E427224D7A018B0BA866AC05FF87A7B7391FFECEA5E94E66B62B63EF03E314F06F3BE2E54CA6339B6DAE797D17DCC78BE7144C54B670C5B8400 -MD = 5C4E64B2C7F1A26445502FDC8B91107438FA524A411BBFC5FDAA3CD6EF2BCCE57558E9FF3EFBF53A052B9EA8A273FF5053FB5F5F75E0CCDFD369BA3E37F4D439 - -Len = 1035 -Msg = 3CE70939498490AEBD7EB61AEB4216954AF123E90DC7EFEAC7BD364085BB7803B9C0AB20BA9EEF065B301B417FEF08B994BA4D2B52C75EDDBA92A57D3FBE962A5B519A0F3B1FA3ABB39EDCE126A124741842C8F745E33D1ED1B082AD01D86007EE431A8774981EEFA9286D1D256F75624A59C222AD70C012DCAF8E19A7ABBE27B0E0 -MD = DE8BDE9F17A2AAA7504C6DD6E9B5EE25910FE0498B8E95563F0A139D4C41D937D4F528D23491E62DD16CD8637C591A8FD131E7A298B26F2B937A9B1E5582235D - -Len = 1036 -Msg = 0EC5838E1DD9C1E01BE54B20EA20A834D4573A4F4CEC151A40EC8D1D9F97FA536EFFC957AA86CC96616C4BC5BEA6F15820E9E1BA794674309ED6B90D40394D644D9A81220AA7A6EF9645ED760375A3EB3F515EF80E2ECC816809EE4E0ECA9A41482C1DD65964EC78B3566F8F5A9C7DD8746A66ADABACD2D827331CDB3CFCE2F94CD0 -MD = 601909D7EB4644D66DD71149927A7093266DCF1C0CBA52ABDF50C6B696EBCEFDCC16D429BAD21BE5A64EF2179BBDBBA7724AD5ED463677AFE2B5248180A7B9CD - -Len = 1037 -Msg = FE5F59C765736017B6105040F249FC5B6957FBA1ED5E4A4F625C7F4B9EF7B6F2E24ABBC543B1CB53EC8B52DBA94450B13893320701FFACF1730073752FFF295DA40485F8B8DE9B3F7B1FEFB4C1E07564022A3DE7F102FCE0F37C6DD08220D1C39537DEFD9DDD87ABE6833C4727DC08E81E2DED23CADC3D52F28FAAD89C69BD66B998 -MD = 8563AD288AF6AC8150F13346725FE283A737FFE3F51131882808CDB1FBCA82A3BE50EC01A320AFEAE111D10ED8622334F4F515A3646E96A009F65E237ACFF452 - -Len = 1038 -Msg = 964B2419D5D9D2840AA6FF56B88321D60320599B00852613C563A501FDE3C14CBF4591759FB6CB3BAD876FC0E39DFD4866B9978B65EF92ECDE9FECF3484BEC6A125D0ECFFB00ED074C2570CE913C8916EB3A7EDA6E9D70E133C0E61879CF2AFC0F4D2A3685A8CA979621D80100F6C0B2ABE9F9957D89724180AF98655CA7955D428C -MD = C9BA2B3F2F802474E60E31DE9E0846291ED48B9B66BEA1E08D06DFED0CD2852AB90C5F7BCC9E902FB2A4FA6771E0BA4A4628BE896CADF23141961ED4160DE49F - -Len = 1039 -Msg = 221BF8337CDD673D323A6DB530A225E621A573D5497B1841D27A96D32AFF8E499D1EE360CD8D356C907371A034709A9CE02E650426A0C5E9618FE41FFAE0A57FD2CEF4C47437557EAFF02CC2BA394303C336A464BC9241C8FC86C157B68E35B36B8BB301ED5F906207871ADB49E02EC8FE2BDF342D23C8327032DF70855FC6B1684A -MD = A41B55DCC56C8FDB472C7358EF81971B7985591C18BADFCF3411FD35ECCAD988CC20853E4B2F0D6D7B1FE23C150AFD7334DEB4576A46DD1B955B80444109467D - -Len = 1040 -Msg = 9334DE60C997BDA6086101A6314F64E4458F5FF9450C509DF006E8C547983C651CA97879175AABA0C539E82D05C1E02C480975CBB30118121061B1EBAC4F8D9A3781E2DB6B18042E01ECF9017A64A0E57447EC7FCBE6A7F82585F7403EE2223D52D37B4BF426428613D6B4257980972A0ACAB508A7620C1CB28EB4E9D30FC41361EC -MD = 8299CFCEA5F00C93A5EB8A84A13628A68B26796D53FB6A986C95B0B1C248920FB946D8AF98343D14EFC74A4611C53CCC27C5F14C7237AF28364346CA5CD70D1A - -Len = 1041 -Msg = 3D90A93AD2235F8BA283865E49711D1C3C990F5621C18A31B626421D431476F367B06B40C5867F416935FB556FC2F8628F7BF9AC3C28BD796C2A332B46CDC624A62A21D22AE6CBD931F5A9EBED57092DEF55879D7AC9D05AF4475C75CAFA2F2F3720A830114056FF13CF9B0CDFBA04CF358E2D6F0C1186A68C871ADC4DDCC70F476B80 -MD = 816D3C1D456238BD1C58FBCF86EFCB7AFA0FC42FAFEF892EF2CBFF03B21FC469CC57E6FAD1359E75DA824FBFE0DA8E8F8F1A269F4EF4C049114483777790E66D - -Len = 1042 -Msg = C8A7DD1E3C1C4B00E21E0709922D5A2EE2DB3EF4D8C772DCA8006C9E99577C2E5334A3AC65E696D0878F9E526C51518421B37204D37A571D0F71C193A7C426416F5D4ADF1614D6B50DD2F316AC427291CA41F369B20E823990D6C0B4F557281624776669533F9D01EA31D56AAC5D6390EED5D3A6FB055BE7E7ACC53D28C657D3B66040 -MD = 53727FBB2F026B1F4448100576F260834F860A43BFEB2E42DE750E48EC2DBCCD5B900F3A9DBA58D3F2E7ECB3DFF55143C3DD605D3F7FB39FC3FC3FCFFFAD8EFC - -Len = 1043 -Msg = EF927430586D5B9B2774F1E92055A0BF6E683E0F0A68B3B6034F9E5B839BD0FCFD058E99C655B827318AD098DD2DE10DED60BC1B11A3A7AA1370EB898FA4505867A20236EF89EFAD3BE5A82EF39C785F24359B14B4B629008327E708F9A9830CC66356AC6F9D5E5D4EA6A733FD6CAF59F5796FBDEF70DE66B1A7C0AC56F12DBFB924A0 -MD = E887E99541F118A15F2A13CBBA8C6653AC05A9CF83956477C40D0170EE8B7BBBDB97CC681794D0E51536100A6C0A8FE8785BDAA5A969F913B324ABD401AAA9FE - -Len = 1044 -Msg = 8133BD79A1E1499D04B283B2AA1238CE2A50C1467248010ACA4FDF9D0046F6BB069DAB81EBC0F29DED2168FC8566E6C44EB222185C894D0FB582799A47F3A4F9147CF11A4359C5D4CAA8A00B60843BC04F08425073222E083D7897F8F760AA3640D09EFA0CA1127A536D19C09E7DC1C0E3409269FEA735E10329611772AE1A5FE87B60 -MD = 967CACA2B1ED6540D103446BE02CB992BC5085D9BF3F2E4F4A9766E1C18F854125A59839BD119506B347239C4F6248178B2E7041B2D5B43AC47148FC3C10C7E2 - -Len = 1045 -Msg = 017103601A622CC6479298FC16091B08BEAE94B0C20380EDE796390CEF7957AC31AF910E0785768817FD68DC0BAFB27F15960B8FB417E792DBA5779DEBAA9DADA43EDA2522277233DA2F544E53394633F3BF92DE1E30CE5B3395BC941F5229F56C76FECC6026FDF5E4A95EB6CD3E90121CD16E4DFDC617058A51290A1EC2F663EF5E70 -MD = C369FD7328CF40C80CE0C7B402D1660DFEF868F640627660FA8F7CC1AF1D3C7A76613E1E3172D2AF43AAB759C4856F0FF914FE919AC8929B12424CD4D9F2B5BC - -Len = 1046 -Msg = 9AEAC19F616A4DD3BECD72939B6F318651DBF59C6E04DDB52AA4923C4054F2B2F6A14AAE357CFC2C941DCE1B6E2D2766F29F401E7FE51EEE5D67504904B6600C2CE16B8D0BD3D2074FD00B516BCCA62C78246A5062DF3F7B19F47856F0779AF1A5FCE21CE60EEE6A3129EB592539C31982786F881744B16E0EB2357EE72A2BBCFEDA3C -MD = C536C76216352338C174087CF39A2612EAB9D3FEDEF731571A5F4BC4BE71115154161A7FAD51ED307E598FB8954CA683CA74833DB23605C6D3BE8C8D526D84C9 - -Len = 1047 -Msg = 464ECE94E81ED3387EE92183B43B4BD70F06A9F2FFE3072075102001C3BB608DFEF3CEA25EA521D74C95BEC09E4D2EC0BF3F65BC0C8DCE25FBC9D7A90B31ADA562278A89C3113563ED449EE12124ACD1591D3D586476B5B27D3B64DBF27934EE8CF97FE1F6259A0D520844886B570551BB532397EAA46C317F63728A37AB22A94D98E2 -MD = 37D5B6DBEE46EFA2294748825CA75758AC90009C9D2B73491FEEDEA4CC14ABFA04108FC9321CD7F23CB406F566C0A7B64049DF68BF896E34FE69C178E2F21C8F - -Len = 1048 -Msg = E88AB086891693AA535CEB20E64C7AB97C7DD3548F3786339897A5F0C39031549CA870166E477743CCFBE016B4428D89738E426F5FFE81626137F17AECFF61B72DBEE2DC20961880CFE281DFAB5EE38B1921881450E16032DE5E4D55AD8D4FCA609721B0692BAC79BE5A06E177FE8C80C0C83519FB3347DE9F43D5561CB8107B9B5EDC -MD = AF57BEA357FCBA0579C4204C0F8DFF181BC8A473014BAE78DF76069DE478B2F2A390327A65BDD24BE926551C78F70B0D5F1C8F4B970997D557F06336A315A749 - -Len = 1049 -Msg = 21DDEEF5DEEDD0438878B962A1D8A389678E34170A9C7DF55A2B0555D23AB3BC604D219AF38CF4B53F825CFEAF5B6CBEAFE028F61260CD1730F5CF32E2D9AE09ED879D4157B52618D6978A7C30C4DFD42A9C51373C98F486797589E362E3D0B27A7D29EB2086549A69E1F4EA94E915A2A2B08C19ABA3DA21192121B39AC7159356836900 -MD = 2A10F29E7A509F66329F874C13BA3287015AFCE54A281D876AA7C0197379B85D480304963E5AD0E36424DA54B4BAAF581093B9FF50D29DA5908EF0BCB20DD7A4 - -Len = 1050 -Msg = 6A57AB28E6B5AE23DC9B0B3D9DB281C25F2CAE1234A491C5429A367C46E237F33246E28BB822FD7F0C8FEE333FF8F810C5F25D8F1755E7E7B35954E1FB5D546AFB1573D6DE44C4C6E15AC43396AFC517B2BB23A134BFBEE7C4FE7DBC4E966F93A1A92DF5CC79032E37B35BB5AFAFA31A2BF03152D8668C6A669321B94A5B1399236955C0 -MD = 6B3068D81E63B92483B3427B46118073A260A82A2879929490FD544E6B667B7DE9CD1FDC2ACA5F014F52C9E5CFE644C4360DD7B1347C3A25B645D6F9E9654676 - -Len = 1051 -Msg = 33DE2D5AE75E8F29C17C780363BA7A390AD99082C59C5131FD7EC40033D6BF32DDE1142D6079F2A3080A6CDB3F276C02C461882114DB8A6AEB5F91C0D66E189B2C956FAB3565E4FACDCA863859303557EBB538700CD5BDA9A40CD97150676CF8850A1AE1E7D349DA3E9F9A987E8FFB8A434E54A830833DDC96B9BE8E66D4B57E260B1D80 -MD = 7BE75D94BA96518610FDA4EFA6BCB673C6CD378C25FB083F3DFC00B15994C0EE7B5717BA9606C6288A67D1F5ADB55264DDE9BFC9AF6242CB0F0167B645161B3C - -Len = 1052 -Msg = F5A418ACA95D064DDB98A6E9F2782583280F70B7403D5973F622E50DAA6ADE937D9CD544BB8203092C5DBCAFDD426892E6B46EEB84940AD8E1D57D686EE51AB61D453672CDD90F4290F5FACF19FA52FC7DD277429CF978F174604EEE3E941F475EE25C5B839735F2087DA632724211DA3E5A9C551D5633FC0AE624FC93CBD09B85706100 -MD = C84F3D40022280AC634EDB364874DA7502F21563366DAC2E5CCB6D160FF63F2C93F001D34469C0CA26A58FC8B416BA8106DDCBB5499BB950E20A44340B04A9ED - -Len = 1053 -Msg = E7B4FC9419F04B5BCCA5FCBDEAA781B365FEC1453BBFBC96D48D8AA601433B22760055AFD7A200B6E3A5EC998B1DAC6448900D2C733701049A3AA90CDE4D673DA4E70C4A12340B5E88370ACCE0236D7F617240599E50F53D13D6C5DC461F8994C5CC90776305944DA2BE7F154FC18A1C1B5B31F4F3362D4DB7BED6248AD6E87831A99B30 -MD = 14550B253D9D0B145C9651EBAED0A2E7B9841C542D670B0656A91F92F342A8F6F7303D14191ED8BC2966C59C717C106E9C55019BAD62AF1164DEE9A8BF67108A - -Len = 1054 -Msg = 446DF0CE24DD985DA3A3947E6ABB50AFA23F2FDE99D3F9F59F1331B9814FD363FFC551CA46EA987D10F1BA25E8CCCF2A4F5DE02C51A08BCDAA8306140B32B06A9C0272CD217B95926215C1AB32AEDE04F6425C1BE94AAE51CA0923097C128483029B2EBF8CDF38380EBC72DAAA62AC6FACCD9E35DECD63CC28326BD0550F54FEB9904278 -MD = 1D60FA4E5ABE0E4985A21CBBED153F75CAEDBA618A8614D7A0DE5A70E67E116A3551EA7298E348FA6C28BC336C3C9BF49ECBD934D0DB6B52FDD308C8DF152563 - -Len = 1055 -Msg = 3B176161456A7EFACB82F588B41E9512F3595948C9F54630A25568116CBFD2B92C4174E11BEB34AEB35C3E496728734D4CB2B6BF3FF8477D34802FB6BDA003D3F03691B1EC4ED55BB58C7539A16636C09C60E03FA0FE6AC5DA402E57F03005BB0854E80E941D6C5DBA3CF2414F4140ED5F996B108FA054A68A8DA5BB3ECDE20EB5FA1768 -MD = BA75B038A4EB57E1724506A57F8BCB6FAE4B4297F54458C10AAF62961D32DE671276D1D5473DBBB65FE6443C918F60499862B7DB5523D29D37D2FC7F3D376017 - -Len = 1056 -Msg = FD19E01A83EB6EC810B94582CB8FBFA2FCB992B53684FB748D2264F020D3B960CB1D6B8C348C2B54A9FCEA72330C2AAA9A24ECDB00C436ABC702361A82BB8828B85369B8C72ECE0082FE06557163899C2A0EFA466C33C04343A839417057399A63A3929BE1EE4805D6CE3E5D0D0967FE9004696A5663F4CAC9179006A2CEB75542D75D68 -MD = B299E421061EF26C32BB4F50EE669D05FEB2CCBA3297289C30E6434057B3EA7F617BBBF7A5555328FC291F794987577F458350DF99AF3A5778300BE0BD80164F - -Len = 1057 -Msg = FC4C32F6D00559A9BD84443E62CA62BD3F9AD791CCC43DFB58A562E73F9050196DE4D1AA15515B22560429F7C6BE74066F3F55F2BD77A9FA2E8072E5697A76A9AE7349C72FAFF8C549060DD7290F2C34B23970F0F5504B120B2442802BF2E75641B977728AFCF4D36485BF2D155B4DE9FB392B657D5EC5BC835A344899DA6D996663858900 -MD = 686B20A6DF8C4F9FA71CB93FF6A19C0BB46D3E3BA43C72363A05257EFF19BEC0D43CD3393137B262B947D0B0F70EE9C515EC66C4CD57C76012CA347773E925AE - -Len = 1058 -Msg = 14CE9F192FDD23BBB8A407021CC2724E0DA6ED7234E06695E7693A2B02C1C043DE9833C273C0D1421369E73FC206FE3860D5B7F258301112DB5D85A5D2CCE3464CC6E4C45494A155477DC4A9BBBE5A34F4D8ED59371F74CB19809249BCD281226C0172E73C354923D25142712D307B3C4A68010117DB88EBDF7485B734FD1F7400F0607300 -MD = F4B3DFE021E94047947B8723B01DFD3DEC6D32053872C190085BC8FC23519C12AC180B7D990EC775558CB8888D7B285F9EFF46DD5B8DA6887C3D5B4FB07F06ED - -Len = 1059 -Msg = 280E16F8EAF76DD5CB1319E7A832E9C8C19665B90D57034947D3FDAAE11FF7C9C4063543AEE6131F1240F1454141C18A47AB997C9DEC0C2E603A2B781C8886A8A27B19F72D6BD1BD0290263510A9452AC3AE81BAC01C91A759C404AB3D28F5FF4D6F193E3B22F44E2E7107F6D5D019EBA4B016BFE0E2C337B5C3D4516CB5C8E17FBE13E8A0 -MD = 23501E9A75742F8EAA00B830B6A82A093E4385F8C8D4D4D704EFD91381A656FB2EB709CF729208E2810BF2137FB9314399C849707E422A38D47AFE27C8FC0BA2 - -Len = 1060 -Msg = 0EFA3A88C6CACC9734525F2F6772CC9A7B55D07B87A53CD89E2B630909A96124648FC5523E0CACAD477E2A903F2EEE62B700902BB571E1A55282FAC0269378DE49C210D3D3564017A8DB4684755C0F139C414EED8CEF6993CCB1D76E1983B6666F90B16F5ED2B9A53D3D0439F3F532BAA784648E14B674D33AE96A823ACA205F2B1FCD5D10 -MD = A485A01862E2A273E2396DA7AB2ED66DE6C95837A7CE64FE2A4F0B7163B07130671E8926A83066CA4FACDE78CCFF731136D1D8CF6F949AEB731696E4512C1558 - -Len = 1061 -Msg = AE1BEA529E00EB3269266AC316C88D3300ED9EAA08805D71BECC8AD93C916763A1616946F7A90F4CBD99C3B9A2122DC65D7065A915334B680843A94EFB5BDC0ACD4F20B8B7575BACCC415272827CF359D81526CEDA8E1B8FFD030B2F4E5168ED8F4088961BF8AC8354703F3E6E427BD98D5FA0F60EED513B05E2A5DB569CB62FF1685C3088 -MD = E882BEA1A7CD1A3A9AE225AB2B053A6DBB6BBAC784D156A0A6A4ECF8157061F87D77B0CA1B4B97FB83192AEBBD482AD69EC479A35F01E33E76CB5A486F52C536 - -Len = 1062 -Msg = 6BEABE530BDDDB616E859A1C553D80F91A1015C9A0AFE1C16519B4C14FDE70CA20A05411BAD72CBAB6A125206B1F44ED8042F45581AAFF430DB140942C3FF3A6DF70B0AC32BFBBCDAC05D7B2C03DE2554334DF6BA3A921511FE7EAB8F7309D4FF3E81C550B0E0B33FCC638A3F80C21E01963781B588B93BE505D914549D33ACE1FF83FB010 -MD = EF6346029D97E2A198997EBC8316A8AAD2667C4B1BC2569F1A7EC088D0B1C890288AADF1A1F63F4695223162169B0ABF364031917F20D81C7703C413033DD9EA - -Len = 1063 -Msg = 06BA6E79C6A8C0EAF1A1FB39FE0009BE2E7800A4692C1A01113BB666607D0EF90FDFCC0DF4F8A70491A28461669F2B8A45EF158C3B604ACC4EAF046674DC5FB38D941BE12E57BA96833A573140AEFF34ED4203DC4324AECCDD11F1F2B5B2DE5B77C0689040FE7607C67F1199D498285DC0A1B4D5B2CFF4F1E2EAC54CD09F26F608AE6B6598 -MD = C452C8C6D7F6A82A67889A858ED8F6998E3A7B5937D29CF91DBEB25984205094568CDBACCCA2097DDD61D0F7F3C586D04DC72A04E6BEEEA0C969F29CC903FAF4 - -Len = 1064 -Msg = 59AE20B6F7E0B3C7A989AFB28324A40FCA25D8651CF1F46AE383EF6D8441587AA1C04C3E3BF88E8131CE6145CFB8973D961E8432B202FA5AF3E09D625FAAD825BC19DA9B5C6C20D02ABDA2FCC58B5BD3FE507BF201263F30543819510C12BC23E2DDB4F711D087A86EDB1B355313363A2DE996B891025E147036087401CCF3CA7815BF3C49 -MD = CBDFB0D0E720F87259DD0D0B4E9C5319E7F88AAEF7F7AB2FA1CA639AFA0160822F96B3C357A4894CE53CD713FAB23AD052E8565FA3B3A523CB9CE39A6BD535CC - -Len = 1065 -Msg = 53C04FEA5FB71DC880D097A3AB90D549804DC48A73117B901C0CBC5C3EF590331569C074E0EE30354A94B34AF1FE4CB7A620C8E21A94027EFB0A04CBE18570D8B0C957E35782D46E5993FBE747AC158B1F0E4CF4012D57204C5226F578F0ABA56B517991C4309F3D1D1F7F9FA9A2CDF1E45C874AB297A0DD295BAFD951A6268117F2C258E080 -MD = 50DD9A81F1E6B4DFBD7A66F13EF67EE1B315B589A686155F33D67BE9236A48A5A13A5A7A5F20F84BC7592C47CD35401B177B42FBC8BC730F5CC9761B2FB6494A - -Len = 1066 -Msg = F8A6F6BD845C0831FEE2F05132462FD77F9252404468A658FFFC537C5A1965B69F2935EADC66C16FDF98B3B3D866A4D53EB0EADC7F1E639574532ECFCC1C67D16530821C8EFE9A28CCA527F35924C015B466C3749F72DFD84C82732B8986ECF7E7B2E4E5F31CB5347AAAA5E82171FFDD92647A7F823E4E2F8889F732B38CB072B14B5F13E740 -MD = 6A5C33BEFE0B7A6C8734753BC99CBA1BA0C9D4146C72A86535FAE7270C7C0BC303512261442A35DA65433AF05809B2DA472FC7B191BFFB9DACAE3CD4392252DC - -Len = 1067 -Msg = B7A4C88E4A3D7E7A38CDBE3BA7504290D21F255078537C3D7EFAC3B5AFC19F81A0C2BC2F2F4C3209DD7D2C30789EDD143C1641B274FCB8840D4D94B809F83AD303FA7C23BE570873FA615F20AB79E2B85C09AA80061D823D4D3BDF6C49937350888984A9825AD67C9D6DCF6B05B3F989419FF63697010633C1D397F7E4FBC7F28C816B9D26A0 -MD = 867F51775E084BCEE170E6CD9769B817F8F180DD1C88B82F38596AF057FC78452409EEFFDF4C7D910563D0B3ADCE074AEB620B167EDFD537A5DBE59DC1E81781 - -Len = 1068 -Msg = 0915646912F9D65E80B4718E4597B3D33C8A634964A2FCCE96DC7871C2E3AEDCA6D83A78D57380241C9E6C4D010A594D31BE0CDDAD2403567F486CA5E7A2EC49358A87E0E311839BD0475F68BB6CB623967E21AD25216D985E841F2E248853FE45AF8001FD02DDF42C62B9AE6D58CCCC77DFA6C3652AEEBD3147835965A524F61F20DAB12DB0 -MD = B75518DA56C7D6114ACD7DDA32402AB8ED06277018B60436B955569E231F4F4A12C457CF588A3FAE44C6DBAE08E655990CB6C8D29DD6211EFA81BCA28B2068CF - -Len = 1069 -Msg = 00A9047B379AB468B988C672FBFDD7B66E06F2B33E3A1E35DCE0D57566E3430983237FFBB7C3B469CDF5239CD6B151EFB11B8AED6516723DC2AD77E448962C118A2B1E51502463678F86E47309158967A168D33461DEB278F7317333ADF3B9C1B8011A39BC5211CEE3826678FDEE96C1BCA6D7035B9CDBAF58A4A9148713E1C3306C03C7DB10 -MD = 0DD98A1C2F61C7886F2DB25E37306FBA5303DD10DD977EF4CCFFA4297AF8C33EBD53398944FEDDCF3F4EFF7A521AF5F292A6306F0FE3389840496A3C0D900959 - -Len = 1070 -Msg = 409DBDFFB836B5B92DCDFF82825CB19043D26CB2BFC2C1961338B87647E7925DD322DA8A3611989F16DB1D5971DE0783FF6FE86D33E175EC55E4BD4F43DD8466CA3FB4A0468E4BFB571CD7E3C2A44D3356CD583EB63D9D9583345DC3773D9D257A1FAC8424AE528C3F8DB6C8383915F87EAF86488CF0435297B38A5341CC1560055149FAFF90 -MD = 73933F5D3AA3F312DAED6FFB7058F0970A03984A485774658FF8A4274C8369CC628BE8EB4E167C26852A27622C714B126ADB8D033EBDB1882160DDACB55AE4C9 - -Len = 1071 -Msg = 53383978B3D3F0F99DECB33B9F183136D0928A2F4EABDC4937F40E021D7F28D49FCBC48F92DB74B3CDB14C243DFFF1FFDD6C2810BDFC08712BB006D5717D9B3B19B31A6B78A4BF6E4206A1E229C61813DFB5D38AF3D2C0A19F47FD813A8802CFA837F1AA88F20ACDBABCC3CD574C81BB69E26732D2E77B06366546B3E6DD75DB443E0A1B16CC -MD = 2BF5E5149A8C4B3FDFC96741BD3034E3938ABE3C3AFAC7A5530BE9C5278372200F50C90C0A3483CA53DD5C7877DC53A4646AE1D289085240ED929F06D03D2BAC - -Len = 1072 -Msg = 77EE804B9F3295AB2362798B72B0A1B2D3291DCEB8139896355830F34B3B328561531F8079B79A6E9980705150866402FDC176C05897E359A6CB1A7AB067383EB497182A7E5AEF7038E4C96D133B2782917417E391535B5E1B51F47D8ED7E4D4025FE98DC87B9C1622614BFF3D1029E68E372DE719803857CA52067CDDAAD958951CB2068CC6 -MD = 059A181C83A22BFF0AA9BAA22D872BDF23CBE341032CF0BF57997A4A1924D24FBAE9DCA14B6D290692B6A6B6344CBE531734F58AD0224C6E39BD1E87F870AAD6 - -Len = 1073 -Msg = CC4CEB09E892BA340EBD8839690C8C77B6276E33E1E87ECF9F3F475A36D22677258FB019DC08EE7670A685DD766213ADB7A55924D05FDCEF85A0B033ABB97BEBB9210D278EEB6837B4511FBE53BED7AA1880B1575EB1EB6999E0AA2723B50C76B9D72C384B78EB418F7456FFD61030ED761063FC5CD76A7BD16ABE1C050B7C20AB7AF6FCBA7B00 -MD = 339224113DDDD1968B48E328561B2122FD0BF70715D896EFC4343B6419BC7C6532859899E36D614CEE6D053ED83BA53F3471454FC8569E2360BF7451500C4055 - -Len = 1074 -Msg = A171F7F0CC38AD3C6185BED8BB94EA42AC92CEDD458215264B8CF9D2BDE36D4BAFA2B885CD8EEE3BF0491318D84ABC1D15407080B7DD8F4652CFDC8CF1C709A8CA3F322C92954D798C01AA17D6B5C45B5039E2B66839184ED72770620015C06F54C53E6CD538CB7EFD987D5890C7FF013CE93240D34C68278B92AB9C73F771CD3B1DCD1B8C3380 -MD = 5B89496D8E98AF61188602E840C39DF7B6677851DDCF79C5384216DBC1E9FCE19D2EE0160A2023ADC251C2DD69E5670E046670FA11CDE1017C46EDEDB631E068 - -Len = 1075 -Msg = 34A955BBACD0F8D9181E6D573290010DD36F46C16D5342DB7DBE9EA9049B9B14766F822B644A598DAD015FCEC1A2FAC8C4F2EE961E8A9E962655D05144F54B2525C7A7D98D1AF46952F782764C6AC9BFCFC9C0ADF3E12038C89BAA3DA273D58B406D82E1D263D417E75386E9DE11281DF4D96208FCA32B19D871A109A736FBC5C3F29FCCAD2DA0 -MD = EB160117E23BA2D38F83E0C361F2B837B6C87C70281A693BAE9B8695AC435D2B15CE508193D4A5C340099BFC2F861F82F3E21AFB0E69DEC3801D7EE7FCCD70AD - -Len = 1076 -Msg = B9C7F790421747555F738A0F4F2BE81A693F440312A99F9A1835AD2427058B14E2202ABF9F12DDC25091A3D91BC80C03546E97789C667EEA433E9E1CF967F7A28AC1F8D81F6CF8A06FCE64DCAF549B77B374CEEEE63DAF77D0EF7BBEE45902051E14F85847B7F16F8C168A1A147ED0EAAAE34F4CAD779B8831301965AA3486DA726B1A7CD62DB0 -MD = 932334501F1EF87B62343F67AA7AC9DBF49974FFB77ADA894C2BA7C99589189C7DA23148BA717141068F6E5EF1AF27787A8D7FA7D4B0D73A31F87F6A8B756D9A - -Len = 1077 -Msg = 2E2F9F6F2F735C837CAF7ECDE1AE9F41C4BE21C15797F63528B2055889F0610450A5BB973EED188F9392C9DC7B4E73E65D18437DEF436E299D465FE7E437A11FC2F8311840233934D4596B1959546E34F5C37F0FA9316CD586744BEB8DA770AFEB0D8B1248F5FCB2F542E8F9B9F34EC1802B042D50783A3884115D08B6471EC383C25484DA37C8 -MD = D71BF947E641F4E53EC1E3DDC3E47FB1441DC84DA055DF611E847CE157B93F785ED40011007CD2E46722D476CC6E90D5AFB9588DE0A682692D802E7D674F69F2 - -Len = 1078 -Msg = 01BF05739A0A3633131E869E79F3CFE2D4400F29786C04C4D04726E632CD9EED3AC89FE6A206896FAA447FDBB131E34B83B6713280DEF5167193634D68987B608A5C1046287E64EEE7EAEBA308F5137E0C188FC35AC15F264139C7B93F3E1597328B9D39F13D9A959632A9330D852D726D982AF6D00EFE996EF92410F85AD4A742681872C6FDC0 -MD = 9FF1423DAB4296A1D2E6F2BA1954DB0B90D7B23BE76D95FEBCF0763729C4053CD6C9267EDEA3F1346C8EF3B47567E0DF4985624B9DBAFFB8A9238321E71ED50D - -Len = 1079 -Msg = EC686F7C71E53D760FA840B3AB715D8C0BAD257072CC56EC259D1C240851D329BBD11F48993FD01A73B48DA16297D95F62D8E08A1A465FF6A5ABD63EC21037F68F14617BC1CF15B1F71B120C7C8D60CE32F5C610F00D306EAAD3991B442ABFE5ADD064046BBA9FB8F4F9A38D99037D80765DAB0342CA779B86B1E7E8C3D698CC3E5304318DCC28 -MD = FA1CB6780D65E2D5980D89B62BA59937A1DBCA18FE7FD60292977B19968442D671E84E98305AAB4C1E07CFB95EE874C10BA24E1D923C84166475BCD995114383 - -Len = 1080 -Msg = B771D5CEF5D1A41A93D15643D7181D2A2EF0A8E84D91812F20ED21F147BEF732BF3A60EF4067C3734B85BC8CD471780F10DC9E8291B58339A677B960218F71E793F2797AEA349406512829065D37BB55EA796FA4F56FD8896B49B2CD19B43215AD967C712B24E5032D065232E02C127409D2ED4146B9D75D763D52DB98D949D3B0FED6A8052FBB -MD = 9EDEEB10EE1B7BB8F16A280D8CC3EDA5E909C554419DDC523B69ECEDF2ADF3B3C9BC66FEF365342471C458126F083A3B8E7C0C9D9D77E9F90196B71F9AADF492 - -Len = 1081 -Msg = 4C727CE979CB8F2F98C2821E6797161CD3BED5806DE8B08087AB61D739A32B760604695C1DEDBC3538E987E52DE252A46D80C260B3560B2C71CA37172C6A7F6D581FB4E0B0BB06E4C9504BA6B3F172CAA2D5AA92022D2BE4AABC96CBA2F917B7519E397DD6EE35A122125FFE90AA846EFE38E774711AEC8D55A4045F927D433B42018F0F72E1A480 -MD = 15AFF734933B3FE6C96291ED6701F3924328F3FF13F54BC6047A5A4F22FB84CE2B11138CA6E92A1E53B740E40FBD96F67FC9EE42D623BD3D23B97ECDFF25AA5A - -Len = 1082 -Msg = D44FB8AF633D0DE91CBADA6BC655EA864A291E404A829BA9089851ED2513461B35BE92AD602018567A4A92BBE37D20E353832D7562618685072BFDEF93D287EE6D083CBE2406332701923B83452656B67483B772922ECDD4BAE3D5D5F0C8064E32A71098E628084DC9549773C2C078C04CA18CDBB981E7AF5791C0338E95A01224283F1D3FC94240 -MD = EF1BB0E752C22996A22EBECF034979ECC7D77C58888DBB519073B73BE1EA8AD9356BBEE85CE198B7AE8F2214F082AE49A05705A31E38BE6D05AA74C9841D4C0C - -Len = 1083 -Msg = A676AE811E49EDACA42C55FF4305E2A12648C465B8FCE4828598D85B6F8821E7DC35731B21AE6A963CDB6CC3D35F1E30B165D42E5844B64475A9E75D6474D9A044BD46696D44929FC185AC54580165FC74BB855FF1CA1E31041B960E6E5AFA62B3E9E216EA004D3EDA3C893B5C2A091161314EDD55DDE464460152684C5154298E0FDEA58C692E40 -MD = 745F4D358C058E5855765831255691AB21903FEB5AFB76D85386B29D9788A42BA16977E560EBE0714653970C10A013F1B31BF43AE779DA1E5016BCC35396F9DF - -Len = 1084 -Msg = 70A4730279D082EEBF6500E4E61AB4ACA585FC47EFB9CC68CDF701EB55C53A5B7FF42477756A16B6B727DDE9CD90AF741428018F9D0A6A219A1A4649521E7B0EE57F38B60D900ACA04552CE4ABB537034B017900182C6C639E8251BCC31D897BCB7804545A1201501244479EB92ADBFE6C29B738AE9F25C2CCF04A7064BCE438DA1E98FE7686E740 -MD = 76394EC90162C664395F7C60CC6F4FA674E88046EB95E9EA84290665E0893E58AF15DCFFF9FBF23A73BA29BD09F77E5216803ED12E7F43480D155323742F46D4 - -Len = 1085 -Msg = 7DE762652C7A3135A8B42A45E29C5C4E31791487B1777F151B29FD2CBC901EAB6864AF5788EBDAA54E5707B82D96150E47780C05CA59347B72864172F40C1E91B786E3891BBFA66D761A2ECB69873C28BABA3E1EC725E9346DF6A1F315B96DDEBC5F10F97CA0CD30D108AECC747628435BB93951FFAA0A965EE1A9A1943CA018F0133E9D946BC430 -MD = 1DDE0FC7ABE91DF75C921691555C32CE45167F11867E26ADEC16D1AE7EFC2E47D5EC9482382DFBE0AA49AA1C11BE84FA6B9A5DC6B04140BADE681037398B4031 - -Len = 1086 -Msg = 549C452B52BF24CD363C8C6F832FADF5AE643E51BFD75D31968224ADEA8D8EE5CC9A4B7C6A8DA0EEDE2B0F0651A5E1889C4F03953155AA4F7EACC3F17A55A71984E36018E9D8150BA31A0317C14A457C754C72CCED34250B3CFCA8A330DE2F5A6829433615CFB4FD0E63921593D1B519399EC8BE42A32AD96CEFDDDE181ECDE193707F967E182684 -MD = E06F7AB2DD5B098CCD5770B916FAD80F2417686D42AB05FE501C5AC6941CCB195255A18B03F135826482460509A50016FB524792B0DE54D5BCC2911B1A7C61DF - -Len = 1087 -Msg = 323CB91D4292ED7F95C98DFD71074379D2CB19E8CC83186B241A62F495CB9B5562345F70DC9C6A06A10424869DCF9C6D100AF700ACEFA7EE011CA6E8C41AF13FF8C9D7BEF1526A8C601F69B7E51E1B8E761EC597C22C0476A74FA7ECCFBE0D2084B0482C46C0D9CB359307B6528A3C88AD5236B990EBDDCC762339D095B34DD503C7E27EEC0D0ADC -MD = DD7670E41B5E07CC285F0B0F2DD1358D9E0B1FF26E43E9FA51DF5DF6C49B085CA744163899611E59076AF306D5B844101222BAAFC0B940D0330F14AD5DB3CAB2 - -Len = 1088 -Msg = B32D95B0B9AAD2A8816DE6D06D1F86008505BD8C14124F6E9A163B5A2ADE55F835D0EC3880EF50700D3B25E42CC0AF050CCD1BE5E555B23087E04D7BF9813622780C7313A1954F8740B6EE2D3F71F768DD417F520482BD3A08D4F222B4EE9DBD015447B33507DD50F3AB4247C5DE9A8ABD62A8DECEA01E3B87C8B927F5B08BEB37674C6F8E380C04 -MD = A6054FFC3D81591BE964C4B004A3A21142365B59EE98B2873D488293F93A8D7154BF72100012C60D3C9418F6AF8EA66372CB4703F5F6381DE6D4B9B98CFF1E90 - -Len = 1089 -Msg = 5B11A12546F0ACB075C50D1B5345605D9A8542B87AF03EA106945D3BEC5EF7A9360B03187BD6BDD510576CB68E8B89649711C1586F58D406B44331609A4152C725BA290B4357C0DD33039306342E6640BBE5E27035E6118E13E1F47E74436053446175368A82647D433D693FDC5927DB2C5AB7B49274AD2E522C3FCD8603964246C1EBF4C78881E500 -MD = 92191558EFA0212BAF7051621377DB414C87A3689ACE05F1BA10DD7818122372F682F6607091A3AB84BB6530997FF1850F75CC07232B073B52D473BBF195A1C0 - -Len = 1090 -Msg = 95E4E9445A009D7BA13582D798DA2BA2EE87D523FD11079D7D4D7415EC275578A6765100E195C662FA22491C91D929E5196525B061C7BEF28B5C7E007754A543BC7577B1A28002A12C8AECFF500488673EEBBAD04B5DC521A23A62C48E27587E40F96585998EDA108DB8536E4DE4F0F8F7ADAFFEAC348FB0ED7C272432BB3123E0463FCC23090AD2C0 -MD = 5BA31597A9CEBB0EB27D711195FABC5093523CF5940E0779A423B37F82DBA5FA9B4E5F3971918BD2AE05B75482C22A1AE784EA40BA935CC025C0A77C30356491 - -Len = 1091 -Msg = 99890D0AF31A29F66EA71EDC5B22CA37A1E32281D75249797335D503350CA4D9393B88A493E519CAE8227CDBE43EA16C3034FB2F3BEFAE6A24955968C095F9AA8287ABEDFA012F339B38059B803F8A49CDFE0A44A1FDC0F5A95417F39D0A6A7250BE89421B9E6C6275961D2DCCA2CEEA8DDEB9F815E2E229730C98B81F899443DD11E26548A08F2D60 -MD = 01CC8DEAECD7B8B7441784415B7EB664B7948597FBF0B35ADDBED49B4127330BF000DF457B576430E30C016761625E5246D5EFB56597FDBBB0664B6AC9067A9D - -Len = 1092 -Msg = 86D3A8756E45CAD9D351BA6D187A5FA35D0F898948E922F3DCF7D1D24C991791031EDFF0FEC7AE1B4B93406FB555CA782869900E7FA4BAC5ACC6D1333EC8819D8809004E544CFD2AE83C6E34854CD2D07C72F64D052259E138FD44204660317E73367D5B6E89E2B0AD53D1D5F00277625D8F8FB3D418501F76B127F9426688AA1D70ED3A3645950D40 -MD = 7C17AE231EA6E2CD397A48ADD1FDB5A23C3A675F4E2108D65DB428269EB4C20BE6DA9B1BEE8A670169AD2F56380EBD100DE555783F77D4686FD2DE6AF03A14E0 - -Len = 1093 -Msg = A2554C66211476EF2B6527FA9810A152CAB5ED42AE8926D582F4B0BF358EA30AAAF75EDEA37F3C7E1C63A66514C5B244316B562EC47D7816D6D4AA209E5B3D718413B4A30A26FCD28D2CCCF4907DEE332A090975DBD481EC5A945E17C1F3D2751AEC0C7EC6F3EE61A8DF8DA4D41B1B8BEE408FFD1CA1475B9F7A04EAED705350DCB86010D0FA03FAB8 -MD = E23E3C2DFC32E9A5814D20734B15C08AD49FB9DC39EAE3075BB614C157D9F696A572DC37D87552EE92AEF2F798FBDAB41B7B096FE54C832885AEE99ECD1B2944 - -Len = 1094 -Msg = 8913BDBF67DAC137CA5E1C7FCEDFCD43680574F7AA64FD63E8FB7B672CB39E7B1989E44916FA2D44DB0108F56AD945405D6D736633EE06E82C36B255B4677437DE5F0FA61064F659CC2189B3BCE909268BBC3FE1E02885A755BD60501C611A09B6F101F119850206FCDB7D1E20E60185612ACFDA62B487D1DCB40994165DE81ADF43EC22D39DAA831C -MD = B586910082D3865E9AD729ADFD6EAB315788AF212127C8BFB3BB77D175C15735390799DAB80DE93FFB781CD23C4D2656F64A4BB496DCDCEF6228765EE4696D86 - -Len = 1095 -Msg = 2CDA1B5738756EE102A02BF1E2538A988D62894143D4E9F19CDBBE8F89D365E4BAEC3EAB665014E09FCB98751F1337CCC33852A1B062D20AD04E844D87DE82456412C8EC1D837BC75B2292831B80A7CFA0C2EC8B4C5238690BBD7F32F90FE4F2188947393EF43720E888F9D0AA6F22EE75FE03A96F28CB3AC08ACE6944BA59C81B926B9169DF7B1452 -MD = E6DFCD8EC3EB9E046F713C1465DE88144B08DC760DA45860CDA55AED9755574BFE81174CC27CD6987FB212E4D34025425ABCB6CAC86100F43801F4C184CF0E05 - -Len = 1096 -Msg = 04410E31082A47584B406F051398A6ABE74E4DA59BB6F85E6B49E8A1F7F2CA00DFBA5462C2CD2BFDE8B64FB21D70C083F11318B56A52D03B81CAC5EEC29EB31BD0078B6156786DA3D6D8C33098C5C47BB67AC64DB14165AF65B44544D806DDE5F487D5373C7F9792C299E9686B7E5821E7C8E2458315B996B5677D926DAC57B3F22DA873C601016A0D -MD = B0E54A12FDBA0738898F1BBF0BA81F81DE77648D8D14C20BDD5D90F300D382E069F5DBA7EEC6B23168B008B9F39C2B93FD742A5902A5E02728F57712D6A61D4E - -Len = 1097 -Msg = 8F20862EB9CEEDD84B3F7E4E7387DE2DE46E141DB60C9E29C45EF6809107D79334E086129C757FD820EE5B3D0123C4C28B34B11C97ED178367D0CAE25DA80641C541973331B1FD3DAC8F5582B9D42ACE951F4916DD4F76C16D3FB877CDDD20B989CD67A109CE139DCE137BE25D03256273DE1526EDF611E29AE7CEAF881E64BB30935BD07B22DEF87880 -MD = 6B9FBF18D168383E8EE9E51250E2208AC8CBE15FA30EC9B796D9A1A975611088E5D4C6EA3F4BD675AF22068FC277098580F09E79B0ABE5E29CB7EFD67CC27489 - -Len = 1098 -Msg = ECD1C8A48651172811A515025A25503A9AD8AB6203F05BA929E8DD58CBFC12ADA9C7B3BAA565367F757FCCBCD1A05C1BF394D9EB4477433E4F143B6B405A3EC913AA756921FC5AED376921F8676C1A467FA219F381F6CAA0246FA18B16A78CA55FBF58C7711663AD6129414F97F88AE25FBF53D1F55FF9C3CCC6601CAD7AFAFBA2E14F34A47007F809C0 -MD = 1FFE9381B7B161B7AD90FD1D79D99F7BD4F5B133F212F6E2EF4D01F0F2E12619A17F1CE52AAC0BD7D0820F1F9A4E735F36DCE433B0EEC2B6E6B9DE7CE754080B - -Len = 1099 -Msg = 091ACE177B650C3E607A71AD088652C65C8F3EF813144AAE6589EC92A7C511DC195470357171A23EA904A316CA405364C55EDA60A409C808609CFEE8BD2C8CF5D3607C37C77074A87F2235CFAE2222FEA82C5EB6B8C117D21CC8E29A7698FD9211118374F86F92DF1724D797210A66CE91254978B50259DE484DDD62F0EE6F5D5A5E8E00D549E90DE8E0 -MD = 5B60966D1E0568F1D48EFCCBE2AA04AABDE172B247FA1E0CA9744DED23003D749FCC1498E6EAE47A91D7321D7790728D9D582D565679F8E32611C80B472F596E - -Len = 1100 -Msg = 534B61438B3CED888D051393506E80A2A71FC2B2BBA6099C8DDA2CA48C26563BF91B5F201420024A0865114F5749B496539E99D78D5E691D763454825740B6CDE5EA88513A09C3BFC65EBE2EE2C3F4D56AB1798559972D92520DB6BD79AB7BBCC416F22759183BD0FBBF16CB02EE5A5DB3A0015EEC399E8BA9A2949E1AFAD4203F427095952DEFDE4FC0 -MD = 0BB191D8A59BEFDE86B775062DACAA400F03FC610DD8339C6A975BC1149027C94569C7C32F4C3850B466D79290E7EFEB4EAA5EBFB922D969633ACC295E6675D4 - -Len = 1101 -Msg = 9485B10269346EFA89E972BD6912DD9A878E0682F548BA438B52DED37E374135CCCE076BD254F80B4E9253C479343AE53D7899578B61E6C01A1E1B50C26A1554EEC28783C45FF9EC90D013A7BDE8724B369E708BA547C270B0BEFACD16F4AA427C1B7AF937420C5ED61D3F7865A52065FEF7F803411BC2CEB33711E9E67ECCDC9D774FE532C850D934F8 -MD = 5B909D41C412DCCF076502C00E6653B4583AAF1810C922A615A741F0F209E719EAB8FC789443090ACF7F3666ADCA8EFFD9D1E24E76B636BE10C6493DC9C6F847 - -Len = 1102 -Msg = 51853A418DD59D08475390A4AF946B850CA46A508A8385C782B5312304683D9D287ABC97099EABCBEAF589AF4EC9F509AEB4323FB600EFEDD49A1A6BFC802A4B11D5DB9C49CF0776A1E55406E5CE46ED022F1B7458CC3A1287A748D0FB574376382C34EB8346CE941B6C78639CDC4D10DD58B5A11E3F8FA4A4129FEA7BE28E0040985408905ACB7202B0 -MD = 2580FB42B59357255AFD20C01FBA5DE9DCE9FE41B3331BC259DB960D3748F7BE5FE310068A38E52DD73D4FCBB124C1E02029997834C4009617F233A3FB961997 - -Len = 1103 -Msg = 02A2FC7D539DD0FFF7337A0C42C23C2F9B505AFDB06F38F1C8AD8EFBFE41467F4727D7ACEFB17668957D2B57BA67971EBEA22FF1D8933F8F2759708CF1F96622258EA221AB8A143A574B59C96FC5250548DE6A4CDEBA0ED4BF49D3CB62F2F1F0C5F8F05C4F8AA249B1F96003AF89DBDEC3C578E3B7D62A1AE591E67F3EB57243484124A2BF71626DFA7C -MD = 20FE4651791FE5B187856F55883B62D92D5F9D8634E81DB67ED9A7D74292119B5B887DAC2720E5E142542799CCED4452806B7CE7E06916A8C95C917FB6AA0C52 - -Len = 1104 -Msg = 8B81E9BADDE026F14D95C019977024C9E13DB7A5CD21F9E9FC491D716164BBACDC7060D882615D411438AEA056C340CDF977788F6E17D118DE55026855F93270472D1FD18B9E7E812BAE107E0DFDE7063301B71F6CFE4E225CAB3B232905A56E994F08EE2891BA922D49C3DAFEB75F7C69750CB67D822C96176C46BD8A29F1701373FB09A1A6E3C7158F -MD = 3CE96077EB17C6A9C95A9A477748876C6451098DBEA2B3261E6D75B64A988E1C75D7EAC73BC2402AFC726543E2A5BDB76689C0931FF762818DD2D3FE57A50FA9 - -Len = 1105 -Msg = D885277BA59CD5B0A510BC8F77CEB8658E407AE08A873ECB0D2487590905C55CBAFA1A108D4BFC4286235984B746F10C03AB15F7EDA75A6DC302622CD212C44434DD027328630BA5377CDA18C62F07FE62BCBAE8EFC3655FA772E604A08E2F6DE068896A67097187B75B507B3F5874F157DA74187F5FF868FC02AFF44AB720FB7FC84CBEA70CA0C32F6280 -MD = A0FE35C08B367C3E614C6D4116D749966F402C9CD3F07A2BF0F7AD2AF051558EFF863A37237CD8B7D6338221335AA4AE0E5FE00D60379637854ADCCFED6376F3 - -Len = 1106 -Msg = C9E4994C72FCB03CC6DD0B5AADECA313D1B99F7595C9E40BE56DA64E8BCD0F12C811E029AA414780F16F912DBB00E4B226B9A9DFEBE9298FC0EC157F466BCB4871FB2B2D7B847DF7DC9281C0DB2B16F140B547089B2454A72475A709B3A3FC8D968C367C6A14AEE8E2A1025259D850E999A8B994746BE4A79011946F3122A9B8097654224CFEDF13C47140 -MD = 6B0C4FBF7F2A77A4E804811CEDC53BE52D17BAB00B2CBC584F3AD72FDBB501F7926E5731DFC9738F2B2F94FC05DE2E71AC5866F7706984708A558FF641BCAD1C - -Len = 1107 -Msg = 18DE896CCAC5B0584C6605CF8DDC4BCA77E2F8207B3333482FBC02129BB8AB2763B17B3D3753654BFB5ED80294B4EC2F0A49DD0000FCC4B5BBBAD28922106180F1ED3EC72D73F278B613F965E5913ECD2BB25DB1765A76388593E9DEE66BFF75AD42D7266EE9E67E228323926C178FCB582E402BCCA3560B24C47F3D983316396D69FC1A7D1C250531A8A0 -MD = B71FE680A106135F41F1D222138E3488998308A7419D70FD1736BF873CC51160C79D275B06EF2C93CCB72D3548F74B0710CAAD18FB4A344B21BE5621398DCB14 - -Len = 1108 -Msg = 10927E62CBA50DC5D92EF8B03649EEAA5932869AD735A22D0EEF2B2DB5DF6433308DE06723D75D2630C9A21AAC0129014DE427FB07BDA5FC28CED642B665C1D4930B49080E50C9D8B0D4C7279834B71AEBB69C57974E45C81130D9C4675DDE38446AB64B26CEFD8BE1666F2ED8B78AD30673AF75CF73DE5B1971AE038F379BC51920263E9F5F18EDC21C40 -MD = AD4CE14F9E16B26EA1782B3AB12560392813DC19E6B98A41BF7EAA4839A8BF81B6ED428FC82A59211A1E9B2C1706A67FBFB6E7619F5905559B1C9EE06D76B8B3 - -Len = 1109 -Msg = 3A58F6C016F9325FE3DB0E33919263A4155B673CA916DA362214638085FBDFB0572781B1A9CEEAE62FF993DA3B01E21383CA63A490F07D733381C6A58D83B84D812BA1E5B25694A3898F063A73EE6E542911303CB749B9B8B971538EB6112292128FCA1F209CFE49A98F532DBB1A4EBBA10330580FD73B33F31F93D799F2F4030C5CE0F0882A78F9681558 -MD = 4EC10635732678D36066CF593316792042BDF656C49012F61643792563226D4B523B15A53FAE54818D8850F9610C284367FD4FFDA237D304E3D34361BF9F4991 - -Len = 1110 -Msg = 2D17254047F202430E864B21F820FD944356E8FBEEE769616413DC789C21FF5EE290550338921737B0B73E45D14AE85337284BF8942950342E0C278B191E16AC07DF2F34E8E3BD19971EF6FA4743EB75754AAE1E34146DB5F7CF7A6083DD01D675BE3256AC7FCF1B3E518AF902699BF7C49BF153A5674E25BA8FB19B50E18E8631DFCB5274CC794BC39324 -MD = 33C5910CAA31F911B26D842AAD8C0A210C8CDFB02746E51C11466BAD88A62D3C604942B44667C89BDDEEB4936116225E601677D47CCD7E27F42A39BF928EB887 - -Len = 1111 -Msg = B4CCFB77F6D11DD5E48E1A0535B8F9775122ADDDDB9049B072138381939643FA5D5117BEC65B5AB487F018574347E437C0F41ADA18AF6373DFD212C1EA732181C0F2C5B45462D40F299A212D212516E9089EFC243665CAA06921EECC653677D94B39E6FA325567BAB84A984052546E9A5C4ADE161F5DF6DF97F73C226F993948F63181FD8D4BD9192D084A -MD = 3F82A734434DE23A4A2D04222AE66EA781B1A55F16B7EB10540DDE461A61E5B42A3083863F4DB3EBE887E13CDA2BB77EE27752C9979604A49532E67CE74F0586 - -Len = 1112 -Msg = FA6EED24DA6666A22208146B19A532C2EC9BA94F09F1DEF1E7FC13C399A48E41ACC2A589D099276296348F396253B57CB0E40291BD282773656B6E0D8BEA1CDA084A3738816A840485FCF3FB307F777FA5FEAC48695C2AF4769720258C77943FB4556C362D9CBA8BF103AEB9034BAA8EA8BFB9C4F8E6742CE0D52C49EA8E974F339612E830E9E7A9C29065 -MD = C9ACD6D98A349512B952D151ED501562F04EA4BB4B8965812510B9B842531A2B41A0108AC129CF9C9517BE790921DF64AD1DFC0B93DDBA3415EEBAF0DA72F6A0 - -Len = 1113 -Msg = CDBA5700B140CCFD21E0B8FDCF0E7B879292537BA1020B5A5AC12C1FA5CB09BB69E11F6FB2B8E18EA44CC21D31D30EADB150A4619E664333EA7195717EE311D94DAD45CDFCD9339790750A738548F17C4BEC9D0563C805BBE943BC2ADB95627D3984B34D2F8413A98E19090FA4497C8B2FD9E59DE706599DE09134EE1B9C58372BC87B6925B4E1208623F980 -MD = 976231D4E009BAED08113ED1B293D9A1CDB437EFAF560467813147F420847D4C7D36153A15086D27AB8C9A0F25403753FB2629809EA8560E8FFDA650EA3A15B9 - -Len = 1114 -Msg = 8FC83D24635224EDA4A9CC82B63291A87E6CDBD4BBCA2497D9EB075784B2E749F5EBA53C80AA17ECF658D91A3908A564E6C2BF6363C3A7E2A508D471451559D4CC0775247695E6FB207D383F7906A0254800976818B6DC32F9488F4D907B4432807DBE607EEAAE9508532346013F4A9770110E200D72E47B0814623F810EB3BE968B8BDDA22F3C99B61CA3C0 -MD = 2240F6B1B4F143699FAC2BCC305C8023D4D3619B41A6797638D2AB78413A6B95DF72B60633F542CD6C3A05B8EF8A580406750F76EBE3CF24CE4D7DB9CB523488 - -Len = 1115 -Msg = FDC09E81D5C6D2481A3C57A0828F8FBD17B4C4C288F043F5BCFD0C55024CFE291567EEDC2A82FC849E349DCE8C2821D3A7E1DDEEF9BDC90220E7EEC17C18F5557B4B2D64D342C45794FBAB47CC0E1610249DB940DAFD66C70551934C1AF804EDD9DC834ECD8F036280E513897009F0C619E815828FF0ECA3BCE5C30203B5E5F038ED364B1229DAFBA20278C0 -MD = B60D1617E6F9D9B236A4F696CFB5C061EF2B09C202F1F88B1591FD0F959130F2598CED1C6E0554107BC27B3318117F84FB91A17B7DD914B44855870A85F29C4B - -Len = 1116 -Msg = 2B35EA4A2CFF637B951841A2DED38895D6D4CA4AFE8040EC61859A76432C5D3885B75B9D13228FC629A0E3F123DA446035B66853418B67D0EEE1BBB983B361083A078F02622FCEE37302C9DFC9085A1885F8454EE56F0A9EBEC38026A0638771B4AA6C09E461BEE69ED16677610B926709D7795A47C1B4D6E5F443BC9EA464D1F2077AD18074AFE30ED27280 -MD = 19C88F825E99349ABA99BCCEDC4E309A0A476C9BCEADB637C81561C80081D17C53446393248773B13BD91DF2379C17C96FABDAAF4C383FD81900DEBCFC2C2BF7 - -Len = 1117 -Msg = DE1B928D0D48404C330ACEF3492378B2A5D9F4BC2EA16600446CB058634935F35D32471BF24C15072CCC54C6CF83A0DD5194B9EC140DC0EBE691464B0D730A4092CA0BF08A0098E800582C453E5518E704E998787F9E34C3D69CD0FC7DE2333784385B02B1480A5CC4C4DDDF2422509344DA2C7A8BE0C654133A7B2D2AF3D367569CDA35CA6000076F3870D8 -MD = 29A7AF34798916829986F2BDEFD19D8CA8336EC2F886C6E073A74051A2F9A102DA9A5C8BCF9EF680363D7670BBF175999512E537DEEEDD2850835A4286664F92 - -Len = 1118 -Msg = CB0334F2129D291773071EB41BC3A7BC95D44A01D945B604507C2DB5488D30806B220CB03499450DC3F8D2EE936CBB93552189E624452827438311FC11753B8173133E7235501430CDD199E44030EE9FA6EF063734F4AF0CFCB36C1C0C0A127DB579D78640AFE5E7C7823775D689890F612FD4FEA4012E3C7AF289A24FE0F17072AE6B2FEDAEAC5712060174 -MD = C85E46FDCA863AF268B2CCC892390E6B5A00875B7F96D36B67976D1E115D15572FAC7BCD032BA7833A36955472A1AE72008D1211F9096511BC340613B489D797 - -Len = 1119 -Msg = 2D2E1CFF4DBE19D856447906D6E14E532E713E20F2CFD73AD76F580A8E617C1DDC1FF9EA781E8974EBBEB17ADE82CD57DB3B92512A2B8C13C4ACDBFD941F83CAD9F664AE321E2AE972422DB187D699933E348E52374C1D4714A13632BFEF26D168D27948F3241D3A0266F34014DE0BAA18BCEEE6C0E7AECDADAD53FD92FCC1406C0F30128F98FD549C6F8C2E -MD = 9C2E4223097CB685A434FD20FA07FC74962FF77DAF7EED1C6CCCE6E3A291635030259A8927F6460C07EE6BBC27B20EFE7510F2D7CCD17414F038F9EAD888F26D - -Len = 1120 -Msg = 9BB4AF1B4F09C071CE3CAFA92E4EB73CE8A6F5D82A85733440368DEE4EB1CBC7B55AC150773B6FE47DBE036C45582ED67E23F4C74585DAB509DF1B83610564545642B2B1EC463E18048FC23477C6B2AA035594ECD33791AF6AF4CBC2A1166ABA8D628C57E707F0B0E8707CAF91CD44BDB915E0296E0190D56D33D8DDE10B5B60377838973C1D943C22ED335E -MD = 26B4E5C4FA85CB33359450E7F7158FB6A0739984565E9D9EBE6AD65B118296E9C1098C11541C871EB1B89853F1FA73AD8702EBF4FC9BE4D0AB057E4391DF964E - -Len = 1121 -Msg = 355872C5BFF81DE902B8E9E82666A99FDFD866545F39AA8AEAE26EB3A3A7798BF7085A26FC83B42D0CA2541A589F7C4DF3C2637202281AE22A137C9CFB5B7F324AD1DE1962B388EE699B2164828DF997DE802FC6948D166D3E00C70CC78E522B7338926FBAC67153DC5CB219BF8E24743D7E38C2C00BC32006B43E113C2F5CBF2067E35C754601982751498900 -MD = C1BD92FA675352A41557B020C3CF1803E450012949A6B4B13EDECFC0912F166535EDC97610D825172D9A783A93339E8ED372F0CFF9F2B94662B83919D04A7C2C - -Len = 1122 -Msg = EA3B98208EE7977FBF045230E52F8482F1A9CBD7F3469752114A1130B4D0CC72F5C2B52F4D316E94183B017BEE71536993AC43D66B40F60EA12005FAF2952BB4BD0202AEF3AD8B34DC8C200859327C65BE9C182A130E0D7AE0CBC4F6CA92D5F12075402A68247FC7F2BE557C93B9C689F4ACD825000D3FB630CCF9573577563090A1277C1B4C62CCE7088F2280 -MD = 4551E7CEF3A22646D2BD0F48A9D0144E153C939810DE7C58E30CF94DE1161B8F5F5836DB90223D6B23F99252F46DFF9D39C2B0C9DDBAF325C7DCBDD0B61363F3 - -Len = 1123 -Msg = B85D2AE087D8E2BCD2DF5320091FE59F356962E278FE17031328B2B4BF413600A8F782DA6ED3FB8A06F3ABDC46CF7491A626FDE9DCFAB53DB60E35FFA444909482C2B68E622028B3F047728F19955181C1ECC1AA0B70B661548742AD62444D4F3A27E9FE7ADB5E4DE2C98D4E86D2FBAA0F6D41F913A718BA995B9B04A33AA5B2B5716EF1BBB9899BC2F2421960 -MD = C4010FD2D6DCD23B83B60B0B513093988B488C19B8C6C5301673A557838D22BC31D361434D9445ED809B872D93380CE062B4FA941137260FB3FC14CBD38AEF95 - -Len = 1124 -Msg = F2198E064F7F0935554FD140CEC82B3438E615876B22F36C7B2CA852C4902F12958E4C5CFF290A69156E21E1DADE8BB06EB5BC9F0B7A2926722786944358283D1EF9ACE91C72B0574481DEEF365A33023C7DDA3E6016424EAF6B826370C400DCF24D03D4383C1A102506D9194746E5D74139E81E4EBCDAC6886114F5AD59882B0A9B0EB494BA4D98089EF032E0 -MD = EBE86E7C89D6C1EFDD9C2E312A93B8F99AEC8F7B97612397ECB900025A3A2ADDAE42767279B22291192C94F122D74B6670E02EA0E4A7BB840130EE8469FEBB2E - -Len = 1125 -Msg = 95A89F7A1CB4BDA4D383EF4FCFADDCB55950A7D340D49BD65A04744929252162E3FCB9F3568EEC982C08B2F2BA932B84092707353DD102B37AA081A76B73545DB577FC0E80F43908835E9FFD31E1A661B1B14F7309B461F972E8A4A6A18427F8C280AB441BA2C619AAD5FF9D67D3A9920E012B6FE6A473E7503DEFB29E34B85ADC06E7F807B3F39A7636280630 -MD = 51123B07764565E6A9EE6C5A9EF720998C35FE55DF622B601DAF3C6DD0741D768B3C5A36FCA15B71B8237503C26156061885EA0DF5EBB22086273506FE792D8B - -Len = 1126 -Msg = D1273FCC09485AD18C279A7E332ED3490D058A0B5A8D03E22B6715A5455394F41059EEFDC3DCD7337FE7D82293751EDE700E017C7344F168605A9ACBFBAA68879D74DE31B8C1726C9117CE956EF7D4AD1CC4426A767BC799849A478B7F1E04F83722F5AD54CE2C5171735533CCECDE5740CAA2D0A3A8E0877CB87CA866C959E9FD5114D54E779D190D41ABBBE4 -MD = CC82F5276090E76F9DA2E8304814C0D5644F17DD324B7F5297C284FF461BE2B58FE51874B1D6AF0D8C939199D24200E42D1D5F5A7021EB3A535D498D465EF5EF - -Len = 1127 -Msg = A88C9A85D29A2E99FDA4E4CCC67FFA1E87072F844B17D45AB076974AABED7DD8CFD4A32244A2D6C4312D5CABA2D73306333E62E6A121B4E4E924D0B31A303A51732709BC26087B18C46CD4A1101AF4F2A7E781E71D8ECC72CCA63F0D968CE958B79B16690AEBA169180D181A50ECF2149E318B200D3F40C893E599B0D749E1BF8A95DF4134192D79FF8D9CC95A -MD = 8D3F91E0B08418EABB7769C8AE4BC3848847FBED314D39C98A5AAE263938782645708CB4A7A8EC224E9C692EDC47FDA8012B1CE4B07B28B4D654500F6A632261 - -Len = 1128 -Msg = 2167F02118CC62043E9091A647CADBED95611A521FE0D64E8518F16C808AB297725598AE296880A773607A798F7C3CFCE80D251EBEC6885015F9ABF7EAABAE46798F82CB5926DE5C23F44A3F9F9534B3C6F405B5364C2F8A8BDC5CA49C749BED8CE4BA48897062AE8424CA6DDE5F55C0E42A95D1E292CA54FB46A84FBC9CD87F2D0C9E7448DE3043AE22FDD229 -MD = 913BBA5C0C13CC49D8310014CF5AF1B63BA3D5DB8A27699FCFC573688F0E826FB5A7B5D10D3A1DE693AA66E08C0915E7278F61B5FA30F1263B134F016F74841F - -Len = 1129 -Msg = E63DE4330EA9871CF723133AE8F2A04EE4B9A78AA044E500B8022E99A8ABF8070405DD291824CB5DA14B916B9E18028D9C76018B3C74BDC456D13A97FE4BE140FC940CCF0A648207A0472E4C8F60F6D235F1F097C2E5F48BAE57695115FF5707B5A7F4250A6CE8988DB9BED4596325DFF87E08DD2204FA1D28A17F6F7A20293156130D64680D176DA80734027E00 -MD = D439C7449AA393EE4671EF4D2DF782B5B21A48559CEFD0B173F911717FD5AE34586F4A0520783487F16311DC38775ACDCE8E7655B9E5D26AF7CD46D2E5180202 - -Len = 1130 -Msg = 3CD3193249FCA77C04CEF261CFF614FCC5B5BC7EBC9A99F6C88DF6C6232784BD03B0B119CEFFF2DE10C562998FFBC1F2E3D64ABE50F026CF1AACE2492CE19AF0A9C8F4BE6DEB1702A34B5792F1D79460E74A3825F3D3D46769E105CACB8556F16E61A60BB640F4918D0A0E689CE6E5B92977A53BF6C3A1AE2852C6F355049C797152B87367083387ACFF4EFABB40 -MD = 2DB9BFABD126482F96DE79965333853BDE8395CB134B9E4FCC771FE38FD559B1B983D6D9C6ED5E06ED5F8CF1F5E8237C20E9083A5717386C57A601AFFD097DAF - -Len = 1131 -Msg = DB898DDB4201457E81D5ED2A739FA8A1491FDE99C5E22AE077C577ADF84253E7BB72745733EB89FCA405F78D80887CF055DE93F19E200E346547198E5AE4E0E1EE2F819DC12417EF8D0C352EEE351914450A8FCE74A3E242EF0535558A4254F9B0AB5025D65E59177F83F2FCD2B83B955F91711252FAB9F613CA2EC038588A68C201B777757AC9B71B5262A91CA0 -MD = 20E49E98A1C779F6114023159A20A3D5FFA9C37BA6436082CE07B2A2ABA57CD38638BAC49A1F27942F15D114AEDEBB5DBE21FB44C59CA9A22890EC84C9F1E6F9 - -Len = 1132 -Msg = CB54ADB942A2CD04BE65D1499564188B4D1AC647CEED1CC5116498EE2421EBA700E63F8DA23DAEE3223B21096FE39A0C8DAF21E3AA8B07FE7FB58836D2E70348837B72412B9AC8B5EFBA5AACDBE685AE6F7594197AD7DD95F82CDB4D31FF37EA89422C27D0C89497A1593CD96B6160862E1559BD558620F1831B0EE428C25D1456B88B3CC613CE8F9A8794A3C390 -MD = 812AC335FB4B93165C94BD21C0C2CB7CD49881B8DF3552E5666A91720B6B524ADDEFE631D6CD596B0B5D0FB3A2A23BA9959D3B776E2E181DDC1E09489D083A1E - -Len = 1133 -Msg = 3889F0DB5E6B929D85BB0D1C26A06C1E87B6A1EEF7E65B90E51DC1195C94F58C19C1CD7717C4F276BBE8702179D4196793C4069D4D91CB3C7051962B9675E978B9CA5FF5C648E36DE672BC06040ECBC1C9F7D8FFA3D1CB9A0783F3682D0C4BA5705AED875B9F4528192BC30ACECA099F7FC7D9F8AE9161FF092D935B7F4C5343FEACA0D69BF8082B16CE95A415D8 -MD = F9F1E7BEC3C9B62202942C6F44FE00BE3CB6C5DDFBBCABF4FDABF73691AC36474A0CA211CBAFCCC884DA0E882E3F763CAFB1CEBDF612DD4F07D77B3150D1EF17 - -Len = 1134 -Msg = 05B41EAF294ADFD909A5D43A53F1A0F5ECE57CF2DB3EEF714EFE75A226290476DA995B35148DD1D09A18EC000D41ED59D1E5FDFF169504F771961732E7AE05877CBC301E02108A0F42C56D093F484EFB86436F06FC0C38FBD52F1BA418A0DA28B7D8D9B73C0532E7A86915797D121A9F0437AC230D2E887ED7BA55CDBC2ADB946C35A7A989848469E77BD45470E8 -MD = 1876EE3A6CF9DEAEB3389D69156D265C0EE3CC597DE15B23CD5FE4345815E2E0EE528150877F54E3C7BF7ECB7A371944548E95658F791A65523C893A211ED2E8 - -Len = 1135 -Msg = 9090328108C62427294439D9BD43C1D5E5A7E2604998129BDEDE9DA02352C84D5318735BB8B9E66EDD6254936552B7CBED1A86E48CC9CB92C136BC5282FD7195DE09A05ABBC7AE97AD3D9CEB7C2051B3446CC4C4CC2B7FCCACA3DE155F58821EE7AFCAA026C969518B4C6B411392C612416B15196FF9532E25CDA2AFD9925980D44E65FF878761D26A4159FCBCBE -MD = C81A376EB1D5F54E9C8A3A143B48DFDDC19E19AE322C621EAF4C79BF5562184C923FB837CE16788B2D10AEE277C8135EFFAB7E2C05FDF0BBABA701C03603E291 - -Len = 1136 -Msg = 94B7FA0BC1C44E949B1D7617D31B4720CBE7CA57C6FA4F4094D4761567E389ECC64F6968E4064DF70DF836A47D0C713336B5028B35930D29EB7A7F9A5AF9AD5CF441745BAEC9BB014CEEFF5A41BA5C1CE085FEB980BAB9CF79F2158E03EF7E63E29C38D7816A84D4F71E0F548B7FC316085AE38A060FF9B8DEC36F91AD9EBC0A5B6C338CBB8F6659D342A24368CF -MD = E5D53E81866283179012D9239340B0CBFB8D7AEBCE0C824DC6653A652BB1B54E0883991BE2C3E39AD111A7B24E95DAF6F7D9A379D884D64F9C2AFD645E1DB5E2 - -Len = 1137 -Msg = 01A2142EB62A90EA4BDA88F7677EF008E33636A68FABF1C88624C4C99BFFC7A1E1FC32EC7005AA20A36227932AC2E0D21F56FE1B9E4532315968F46DFF3068EC334CDF3F78BE88BF68E0F387829BF9FBC09A1A2F7237BF199FE75C46E60348D768958DA3ABC3D16865A82232E2E75ABD1990EDD2F1109685AB61AFD92E1C63BA59514FFB1AD075696C7DA7273DE700 -MD = 82E4D4F88C13491650AEDCECBABE108482580BB405AADD5D975A3C34473E6D641C4DDA5BC275238FC1D2710CF457928ABD6899FC6ECEE00C8191E6E0BA420DF6 - -Len = 1138 -Msg = 635B23C427214AEE08B4BFA141E1EF5FE2FDFD1C0A0BFD60CF0AE6B47D18ADA0BC2C24511BAB5ABEED7FEDB7BA4A1AB9801BFF5812263682FA6CF4CE4C9126FCA1F1708A54596C6C3D8B3F8C9915AA0E061F2455D8CBD8976BA96D9EB6A4BA8348F62B7718D15DE2AEEA8B805E72345D1D29E7E499EB7D4F615DDD20BE17BB8FC7188E3CCB59B42B8EF40ED0EE9F40 -MD = EB6CE816CBEC3FC9A5ED2333FF83D887AC9DBF6579705A003902280F306F751FAB8F4AFA1A5296FBC4E985EAC59568FF058D69DC00967EF16BA9B78180B5BD5F - -Len = 1139 -Msg = 35EA1F5687FDF343A7AFC05028A6F0DC3B3519069A260543C0CFE54968441731F69542683480CCF2A638FD8283E75FAAC5B9AA3C2264BE88701E8E71A58742F7C7DA7BDEC9213AB89B8568C339427ACA8D11497B01E8A2F68C2702BD95D3BA665C388B7AF0CFCB87E48BAA072C9FE708A7465A57200A85A21A66B0721CB49E93D8FEB62B0830F9136DA5E18462A400 -MD = 992E3ABFB27AFAA9DB4E71DA47F21CED3D7B0A305DECB563565E3BD776F10E227D7E6634C6ED1B5792DA664B2AA1518130DAE204133ABB4B6E6F2876BE012020 - -Len = 1140 -Msg = 03C7B22BF3EA9840CAA63B4F1D042C816E79FC6A611ACE2BD8F4400ADCE54EAF6208DA56E54E5A1F64AED4F68F0BEBE288C98798014472D23028097B12809320C20A56AFCC83721974BA088759CFCC2B8BD78F4D14CBBA26F7C7FB4271E2389BE54E2D32261EADD992F4F96692A52F6662C9518A937A37C4F92A83337FB0071048E29C3CB0A197565263B37C20C900 -MD = A16A138B9F3F18A75C3DA1F22660005F3D82B41F1AA49CB67B2EECA3ACD6075A179DB49826AECF62E5CB56CA3886E0F6C3443B402367A462CC56C35C6B9EC218 - -Len = 1141 -Msg = E74F49AB1C5D5239EED54252D90AA7C0638184E8454E53B6676F7021E50AC7656368A5D1911CF9B26E6FBC17F67DDD5E7F765765192889290552BDEDF7DC3BBA7AD73976FD993944757CC458A3F608BC6EF7B1E15661ADEEB0065CA1C40A209C90CD230276A6F9E548E234339D5EECA2CFABDB1599D8F7CCF58CC772452D6ACEE4ABFCDF61B6B5DCC698387A339FA8 -MD = E0D5291E728BB73E86E5CC890B52394ACD60161000A00864C830EB935D31349BCEA890A7B7304CD4A52D1EC675B40600553F83CBED0B877515C4107A1A01239B - -Len = 1142 -Msg = BD2F38B76FE144C9695BAE33AF7EDB0F76F0F25079D9236DDE3C5213E44E6B71B49878C55023F69E9760A625945706CF6FA262F294B93FAB898747DA5A05C0B06C73695F9B827132D163733F7B6E6EFFA16C35D7F2A0E344BDAFB18B0718C5744689FBFCB7A7DDE8EA83908F985C63D65DC26B971C43EFEBB4AC8B6C416231F680B4D88DD7A27FB4631922045E8F94 -MD = 16F04444D62C03EAB53DB5A35681BDEB700F8EC23B02360A74617EBDEDF99B1F350B6E404CB0AF46268B68DA7970768B5E47BB050EE21D184F587581C5249795 - -Len = 1143 -Msg = 21254C00B81AEB85763DA860D089F5757C5659E39F73B9127A5B3092A9B1FAD24C8CCB407BD0B6F6504C7E10F672855EF7311074866D8B95B38FFBE75AB22D67227DB8A36E262F396B5FF253947A276B1D9954E7F886EEC0AD6B8DED19734FC4A3A0F9374D3ABA9BCAB67B0646970394EAC1C7AAB16D5285BB44F721B8A5D9A52D91444196D1A3FA019857D7048B1C -MD = 98C20B18BD0E7EABEA2A601272FB82B83ACE105BACC62F4EFDE6347438C15B94678518FF9B41BB49CA115E1765BF917D647607165C7D3ED8BF643EDBF239BD69 - -Len = 1144 -Msg = EA40E83CB18B3A242C1ECC6CCD0B7853A439DAB2C569CFC6DC38A19F5C90ACBF76AEF9EA3742FF3B54EF7D36EB7CE4FF1C9AB3BC119CFF6BE93C03E208783335C0AB8137BE5B10CDC66FF3F89A1BDDC6A1EED74F504CBE7290690BB295A872B9E3FE2CEE9E6C67C41DB8EFD7D863CF10F840FE618E7936DA3DCA5CA6DF933F24F6954BA0801A1294CD8D7E66DFAFEC -MD = 5DA83B7E221933CD67FA2AF8C9934DB74CE822212C99E0EE01F5220B4FE1E9B0388E42E328A1D174E6368F5773853042543A9B493A94B625980B73DF3F3FCCBB - -Len = 1145 -Msg = 03DFA64F87FD32347B4FBCDF6E9C93C8F24DD6FDF73C0714A1D3F2238950A0B17E17241281312FCFED19182066E8481BF02860BF3159373E812CC0723559E989B619E2EEAC2A98A7D671D09342B38485C544D7604EC34F5B3E9B75127F606BDC3FDAABBFA76C4485FE3153CCF0B8D3AF0082DC22C3DC3B50A1343792A2F75434C7ADA300F426B2E372E6F4D78482C000 -MD = 16F2B67FC043D6EE04D5D404EA84EE96A4153D5AB478983FE69321DE745D901FA1419D77E0FE4AC4B0E467B0DB6A29821647D1CE8CFFAB28D52F576D39459527 - -Len = 1146 -Msg = B7C48C1E18BFF9ADA3D2973DB9D7A9294F1AFC90C7A9BE72179E12A6D3EB74E71027718116582C133FA6254874BB2DFCA6801FDCD65BFFC6CA77AB064E78F9961FFE0A580E3444BE1E5F26EC81242D85F829577FFEB15DACB76E5982A6E7B3A7C57FDC71E70F7F9C2C60402E86E4C784727E57EC0B6FEEB386AEEB91055A16450D8B633DA0403A4FD6DB89949275C740 -MD = BD599CA852685F16CAA32C8FDFD0B1ED183EE9D13ABCD3CDD915B9A5FF7E9E92EED41C68D3E08013D7E45310F641D2866D8F8301F8F2091725D3BCE569C48596 - -Len = 1147 -Msg = 856344695FFA7F9E71CCA31E66780E83E946374FEB320A3D0D4E944EE8AD38917B892B1E4842817E9B9572EAE8BE6340A1DDED6DDB8216944CD9D403E137F1B3CD53688043E145D6D5BBE9C6A5078958AC10A96F1FB9953983996D386AF3E368394F57A7BABE20A22A7D9F8F5AC665B996B34989CECAFA60A618743CB5970FB4167F6A46635090E32C381D9A8E68DBA0 -MD = CF2767A1488E5C6CDD028D6BEFD64B7D46E12BB65778A1C74A6B791708C9A902BFF10B79010A02E2DA2CE06739C51E87F26E451A77BA519EE1A1008556CEDAD3 - -Len = 1148 -Msg = B037F0650E028765F25A5323E3D6DC8AC4E9ED37BC69F08B42B372328A99E38827E7BFFA32FE443D09657E3835FED992CD2AD84EC38C21FEFBF3E2F9E55690A2C176539E9E12ABF4A81AD6EA9E6DBF34AEF4AF2438805D9A5A6189A64317F81FCDFABEC47E963612CD565C792E4E619B7912C308A489C7C57875BB49D3418162DC8BBE776F351B71DBD7BE5DB781C300 -MD = 34566C69FE9CB8966C26ADA126A6231D3E950BCD319C21E0F253D24D6AB1F656B4781D88151145061A0AC332CFE828D3478352A8301E8590F9961E527D8A2513 - -Len = 1149 -Msg = 26A1E2EB41FEF9EFAEE544083D4069AE01DAAF800A88A35F7C00CACBE5789F19891574FB25E19F15CE8DD52066F3030CE12B9438E6EB929BE14DE20F064AC1A8E8E1B76B99448B1DF719EFE5BE37039C5BB5399D17957C796B9EE91F6488FB4F2003ABDE0BDB297790BF4D252041583EA1AFE847C9CA7DA85A28BE30DC1BAEA372057D120228E0EF01C4EDDFB54F8740 -MD = 059DF1C6B35023B35821710A490B06BE9E4A38F172175E29BC295B1274BBCA76C85DF6172583EB13A17352049A9C030478A8DB9CCAB6A85FAFC3147E48E4D3A2 - -Len = 1150 -Msg = 44F98C05A2BDA1602DAE7E8BCCD93AF9F16F1A0F415DDA94D0037B2E2EDE5647F5BA095E1744828A51E1FD65C9BAC3811817F10E69CFD446DEAA9000092B508CCC9EEEC23F3B5E0BFB99A7262639A8B8CA8FC0F54A97DFF5CE43531ADE028F23BA5DD79DF7C23D4813B9E5D89BC1DEF8D8604FD6191CC370D3B55624C30203DC2A467693D9D0087AAB7E210D14459F94 -MD = 2502AAFBFED5FCBF83DB927167AAB5A99AD2FB43425388A3F8D1840045F7168F2D69C16299362C822B0677655DDACB064F6F825A2022D9B0B9F28CA42D39F324 - -Len = 1151 -Msg = 47CE52119BFE9170B124036E93790352ECA551962985658BC3898D1D05919B7C62BD8809568C008DB20395B1317F4BBDF3AA2E982A3326C6E9ABFE5992EDD75583E9649636D9E642D1585806832B257A45D485E1B17B9264C9A2386660E18D7A4F7F2F862816DA8382AC9E4E0C3A599DC1D84ED57C69F7F172EBECEE7C48A7E810B13B3A3FBB5188070B05A7833047A4 -MD = 019B1988738ECAA3056FEE1E670A291786007E9DDCDDB57ECC62C51582033F1CA5C4C41E4A8376F178AAAC38452AB2B23D1AA6436E6DE4B1C004E9317670C782 - -Len = 1152 -Msg = 157D5B7E4507F66D9A267476D33831E7BB768D4D04CC3438DA12F9010263EA5FCAFBDE2579DB2F6B58F911D593D5F79FB05FE3596E3FA80FF2F761D1B0E57080055C118C53E53CDB63055261D7C9B2B39BD90ACC32520CBBDBDA2C4FD8856DBCEE173132A2679198DAF83007A9B5C51511AE49766C792A29520388444EBEFE28256FB33D4260439CBA73A9479EE00C63 -MD = 72DE9184BEB5C6A37EA2C395734D0D5412991A57CFFCC13FF9B5FA0F2046EE87C61811FE8EF2470239D5066C220173DE5EBE41885ED8ACAE397FB395E6CA9AEE - -Len = 1153 -Msg = D17D32EB803ACA60E349E8389738023A0D053F8753F02DBF1B525252DF546AD52B8F5A1AA36DE05C14DF40EBC6BFBB3FB3743AFEE9ABF4CD29D2C4D707372923DC7989781277637627925044E0BB0B79D03B899CFC97B05E10481AE57A53351BA87955D956236837FFAF5AA3D8354F4C612422CA3FB4AF509A4ABC7F120A990072862FA1A8E0BFB64D9E119D691CB32B80 -MD = 7D202CB277E72EE97A6227AA48B93DB65F925EDD6308CBD44262DFB3FA20492504788D11B4F3B0A000AF64ED481EEB0CAE0BBAE529D9320E617CCD789D6CCFF1 - -Len = 1154 -Msg = 18D8D02EA80EB2F461E55B0C55557EEF0468BBCB72B298DF8A760A7A70633D5402FA38E709B2FD800C5D5903A4E23DC5540A52517A6AE4C25A27AEE13C7F2D9F14AC488D926B24EDD63B9FF7B12F2773F22080C101BA2466797A5D258225F05D56803D9D3931B9947B6CAA2F637A979C3069344DB2D7F346FB3B0AD94577660121F2BC87B5E0D0F1D8D9C14680CE652800 -MD = 94800A7F9FF856B9222DFFD13AB19E4012E0476C7266ACD827D50B6820568CBDBC2B397DFE8CCA632A0BE0CE57B7C070B716A158ED366DE6DA680B6D07D6FFDA - -Len = 1155 -Msg = 11C02C0B259C1566EF6044F8592FDE9E60F3D53348C71A04C049E4F197C3506223D415CC18F867CA0A660324644A77C8503B129B9B7AD3035B1E7B26F4C0EE8AEF299304448B1546D35B1E7DA4A934D2F8D7AC91C67E2D61AB2A9DF72DAD133934E7CAF18C82823DAA4624CA2B79996773E20AA86AED4728CB40D3B912FE3E271603FCFA9D7A2846822DC33B8DF5DD75A0 -MD = E1E12479527DFF762E0A627D6E1B008510A6EBCD3759881EE9C2B2B109B428C03D80A46217F0A07FC49D8418F125786490C1CB42E84F72C3BC0392E8DF582BFF - -Len = 1156 -Msg = 6503E5415EF398D9731CFBCCCFA3203C17580D31035D512F969F9CD9A8C17DBAAB8CCF7289F36EA81A312E0E2A087E196C3F6E82C37A58898BDB8CDC77C5A0E100B1DB136DCA7EDA83722333DEF9472C73F42017BAA45BFD76FA1DA558126EF57FE9ACE4B32763F1996CB578FD0A7E51FDCE9B4DDAE2FD761308F2558395DC247C7BB4A108166B4BE73A54F4A8DB5E11F0 -MD = 986ED1B5F6AEC6B23ED2E7A30A40B9E2D55EA16FF59152B27D45F7F1A5CB8F5FE7D5478FA9215E666445DCD00DBC40BDB52E32FCB533C0E365F7CAE3EBA9F971 - -Len = 1157 -Msg = 2D04416E47394C0C28859633A9CF4B32B07D941141D2CEBF4ECDA5B00D91422F619800BE12CCB50BCEC630A4F8069AF9436CC63FF79B15F8B725935E4185701AF832BB99EC7AF362E831A986CDAD2796EA904A2B01466B2B94F17F2C6480556AA3A795C3CC57CCDBAE6ECC8221206D5065701036C8F95301E35069F682EEC1548C70B56474E314074BD869219EA9D4B570 -MD = 7244D5BD4DD2CB4513B0A228D05A95CACE76D8C69F08649846BF82A0A869D565A890F6B4BD926BE4691AF29D1A0A3A62556419E938E56CE38BA4A9D815A62112 - -Len = 1158 -Msg = 3C8A5A0334A2C9A8B4BC0C08A6C4FE0FCFCB4C95F09A966D2BCC432DFEB24517369C15B75FCB6D11C9143D22E5CB79FE0AF1081D9A5BB31B837CB33703014D908D83A61968F455F09AAF85AE01CA1EF1B8E0ED9D02BD2C47206A123E7B90F3A028D14F9E11B52BC705165CAE9B9A65F3A2228F3D5390076AF0B5EB53AD2AA6599DA678658D4E72E7E3025B59363F754EAC -MD = 8092D9DFF9C8C6B25FB3460BA14348D649EFD12369586CC5AC5856B50770E608D7C9B45CDF146B937322DDFA813774B8BDDCA16C7A9144346261739923053017 - -Len = 1159 -Msg = 12B830C80CE922F2379641BB7FDD4E0442D3856B4BB064241836053C4CD11FCD2A79A83CD342DB812AE961267819063897E0317052E8EA1B7C93890C74D7EE6819EB9C9C7BEF48D29C62BA42C47058D3F5FAE90FD30F8C49DA48138D8490F3F347F8999AE34551A7C748E8612CAA1D7151F680CE993DD807235FE50A3CFE9DEF4006393E1B0D63F8533765525D3A35E93A -MD = BA257363419BCCCC9DC4FB9EB1B65CBE8CD55F10C65E4E23AF9CF2B938EE9CCF6FBBBCD626A943F27FCC302C8E0BD04515F5ECF6657E7EC16342A63E8E30A186 - -Len = 1160 -Msg = 836B34B515476F613FE447A4E0C3F3B8F20910AC89A3977055C960D2D5D2B72BD8ACC715A9035321B86703A411DDE0466D58A59769672AA60AD587B8481DE4BBA552A1645779789501EC53D540B904821F32B0BD1855B04E4848F9F8CFE9EBD8911BE95781A759D7AD9724A7102DBE576776B7C632BC39B9B5E19057E226552A5994C1DBB3B5C7871A11F5537011044C53 -MD = B678FA7655584970DEDBBC73A16D7840935B104D06DCB468DDD9814D6CF443FA6F9245824DBFF3AB5FFFEF24B29CB2978796F37E7B49B1682D59F79E3C169E81 - -Len = 1161 -Msg = B6D26954A6248D430EF24FFEE1945470C465009DB645AE80D9C96D0365081276C30A4B9962C898F126F94C20C64045F1EE8A3E92E053BC2A0E523E7C431A3E52048C37F4803308E8E87508108C5BC4268CBEE526F76E160EB143D6582F56F2CCEC95250F6E2DF32041F9378BA347CDA1EDFD1C20AF848F9763298CFF00ACAA53A390F44CB19CA2FC3F68CB1B002042E38D00 -MD = 0E0DFF4833401FF7EB72807367A22C3E036228BEBD05E44B04E7AC96A1E336C8A37B98FD3C4E053FEBD0791581A311DAE0A513CB64448517BF9954231357779D - -Len = 1162 -Msg = 8C4E31FA1C8CDBD79E5FBEF356B59E9380DE9322F1F38A94C373DE21449A309D194226ECAC4C2A3043104D30337C455CE77061156208DEF5BB7FA8ECC6B4B121247D4E9AB472BF38262995C0E46AE9BED99FF12405B900D9E37A3EDDDB06D0DD4A74BB19AEBFCD7EAE1CE2236488D73C58EDAB5F9834EA0C7FDBD90F1E8FDD8683023D28711AC96824D2424FB444C8365580 -MD = FEEDCF9F46EC5CAD4256A8C1D31055F0E5E9A616DF30281B708B7DAF6407FF53F66A94C5572E88322069F1D4A5767EC19F74420E18E597B204A1548A00DBF1AE - -Len = 1163 -Msg = 4414CA5B0EFAB33109A7280A70B8133D70C0697D4E7FCCDA751C7136191E40098A542BD8966E16837A0B3CD80BA313A2B027536E4C0016D258477E1FC40678C1A815AA1304BFBD5485F58BED84E094641C412B94975A800E595AB2D654ED93FD0E90AAC471FD243C4C8C4572FA62C89C795BA60D610AEC5C5FB5310346EE4EAD650B220F41B49E50CFA6DA45D510E181A0A0 -MD = 7E01EED8B14152F100D24F4E1F59F7517864004A086950015F9D2F5FAF2BF2DCC3123DDAEBB27AC1128C910AE9947271F86BE108A7916F4E9D640BA74438D023 - -Len = 1164 -Msg = B549E5BE6D307AC5371E9A361BD86B4C140E61F2FF38B6D17CB6079C14961D7F795D443D1CE3F3C9BAD4390B5DF5B793FBF8E618C42D66E194C4A2D7CE4C3B0977259BE8005FD30B9A3E861F363875A9DD176BDA1BD050FCD5993E1142A7C0EB2B5E8CB6B66CAC6CF0646B19EB3FB14C4D9FABAF48FB70EE777491D760951CFD736674875D579A1A615394E08EE8C331A430 -MD = 8D8FCCEF39664C8A2FD04FA15785BE0D2D3EB10C78E66FB1040582A03D5F0A1AAF617395767D1703912347E6C1024390E1BF300DD7927AB2E71AFDF849142A76 - -Len = 1165 -Msg = 901816742594C8C7DF11FDF358E919E98DB6317A965426E43CCDB094214CA72FA5AB808C0BB8DBA1DE77CA3F5FBAD80EBC85AC437DF212099F4510544C7163BF214E42968114EB0F7BE50227B7A5F10BE46EB4DC1E55432C39438CBFEB922A5DE1E2070388998542ADCD095B9D94449EDC473F64C011B90EAE24B89C0DB7F4B55B8BC8154EA7E6D35BFC1E47770D5ED43D88 -MD = C0410572083F5842815CDA82C0EB544BFFBD1A5484CE52AF5203230E05D7812619291E6EE755F5AAC793DE99DEFD720B1C6FC99E133E376D8E845FFEAB86A3C3 - -Len = 1166 -Msg = 68F3CA7119C4F03DF39F854337F916C0D2874CE0D41FF1F357866781C76449C2C5D628C47CF8DD4D83D37F84F1159333602DBFDB899D620D2C593935C3F60E504C358CE2C4C7579522921EED2756A9C208FE1D91CFBBA72969B0191B619BF1D58D7B635D590F80825439E09B75A41DDEC0CA46A6A680D2A63DD93E8A50E49B7D19EC0BA6B545996499D79CAED4DD2AF35270 -MD = D2E8A79401482AB7D4924305037CEE4DDA9E0C6B566EE442496AC6F8552343B3481DEE3F3B05F5CFEC931CC0C50352901B9AF50852632E24552B11AA95BD3CE9 - -Len = 1167 -Msg = B9F9D504F5929F3BF59F2C3CD1EED63BA74BF1444D4CA4347C61F54B129520C0077C3D4A9885288D5D58B33EF84C89B8801CE6A11E4370E7B479E0EC60C5408B73758533243828F9A414F4D6280F66F84CAA1A05965C8E97199E2A192170188F6FBF55B7F129072C30E87FB726ACE803AF6DCA4ECA9069D550B427D7EAF6BA0EED9A296500C442CA4E97B013BDCF5CF4FFE8 -MD = 20A740A223DA855B49830B8907728FBD168CCDA674503DC40F6BEB9DCF8C33220AFB0B95151CC29035FD8065B6AE170B6D87DE919FF9E6900DCCEAA7EA0A5A6C - -Len = 1168 -Msg = CC7784A4912A7AB5AD3620AAB29BA87077CD3CB83636ADC9F3DC94F51EDF521B2161EF108F21A0A298557981C0E53CE6CED45BDF782C1EF200D29BAB81DD6460586964EDAB7CEBDBBEC75FD7925060F7DA2B853B2B089588FA0F8C16EC6498B14C55DCEE335CB3A91D698E4D393AB8E8EAC0825F8ADEBEEE196DF41205C011674E53426CAA453F8DE1CBB57932B0B741D4C6 -MD = 66C64D5B0585DD8C40BECD456E4B0188061AE8059F03E79FE04C40925442BA93B052F52087B30BDBFD4816BBD148696D4FA6C61F216253D7AC178B39EC44C770 - -Len = 1169 -Msg = 7578F49DEC3E779736091AA8EC290A2F2A6AB4E7E02DD02E655748233401F0D4B07313ACE1D7760335D53AB539EEA95ED166839427DA6B40FF95705DD2F7B6F73BBA222D876218BA59CA6877CA198C044BDEA0EA0C67D49796CC326A237677D6732F3D1BDA0F411F7BEF6BD17E26CF8729EB89A23C25D93C9B4A688A21DF1ECF93A62757DE81A3DE44AD98292CB5CC3D662400 -MD = 4A847508FD0C2E3B15221F5A637AEB1F69688B65DCF1A9F1DBF0C080BADC1D47A9467FD6C47A6BAF530B7F3243BB6BF5EF58698B144B6AE6E1664F0C5D836A3E - -Len = 1170 -Msg = EB14DE5434C648F26EDA4758903B2860FE1F57E40505A0CDF6BAF3B0CDEF2635017D42C42399AC686B0A23459C2F1D73613B389E7407BBA9D5F93038622B9ED5494123233B5AFE63565C847352B2C76EDCBBCE5A8DCB5AABDE305AD7C3A2F72EA4BDB7B71BFB1093D669B364E51ECC1DE046A6F6C6A5DB3FB791C390373717670E29C8DBB48A1A12EBE3CFC3CBD44CB1340180 -MD = 67AB8DA1CDA2431BFECEFB0724D7A1BBE6978DBF528A7192441A90355D7A0CC2BC7268FF3FF7AB27E751DCA7017C4123611E0EB05314CDADD07C27AEAC787879 - -Len = 1171 -Msg = AB7B466829094B1062BA045DA7100C355D3942C06675FB8E304277EB3DA4F6F4AC99FE0E69862363BDCB79C2593DA19B435D83879D61FB058C2DCB0AC9F3C489AC54D787937297E53A400C96543319F151BF1218A7249776B8A55B2DA79C4D659255AF260A7E63DCA829079554244B3CA82CFBEB4C19FB5BD6C69D97AF0F41854F418619706CC5E8F87A2B2E8D6C6AA7C8F800 -MD = BF004312443538C18ED11806A68C817CE2B47253BF6606D9F861D61E26184D90B4436A41274E2842734B48298F55585DE4D5315C9A836E6FA10788F3252CC8E8 - -Len = 1172 -Msg = 910BF093C0DED15736115D84AF3E44E8314B77C31D72BD72C4F4D0CD6C567ABEBB245C216A5DBD914AF09FCF09FF3CB1BF0D2F19BDE7B418891B02679A6EDB0D432E66D83B155E71A5F8FF881D54F03C568C501726176CA24E0CF3C80CBAE4FB55B2F8C8AD021C43D855072C4170E31D45AE6C2F1FA467C59D38DEF1948E9A3496DCA570DCF5BCE480C7B51D9233E7F928D920 -MD = 179D19A66307F1892F0BD6C439556D5161AA70C5C14A3CE4BEA22B088DD87FCD9104F91D30BDE42F952536956810454A3C8A3F278281857065321013F9669F95 - -Len = 1173 -Msg = 6C2317F5B39417E3ADA7C71CE7A8D69DDD1E25B607B86B8BE099111D64D6DC7C4A2B7D9CF60A33AD7650C21C702C968204F92CBC3D2BC18FA0EC8DF49F0F4B880E5C4E144498DF0DA067C7AF37EED9A6540885823BD984957B2A0EA87DF8264EB4BB17B26C68A9F9734BFA6FF6EEDC6C5C8A6BB036FD4D7791455AA5569CFE6E643745252450877B62E2116808CF1CFD882758 -MD = 3A68F27746D5E0665594CF6E3B3160B40FA9F9A216984D58259CBBD73FEBE480D67EE997261177DE91FE46B6C66C78656BEEA6DDC7E70FB0F0008F8E639DDB02 - -Len = 1174 -Msg = 25D3A9228CC1232F8F65C1C95AF61637C115D4516464EBFA6795BF778C5BE311128F5F41D70465487A22C32D22F1D9BDCFFEA0547996207B913A6543516EE27694B7FA7FF182074E0C709339EC36781E3C91A724326FA5AB72F59032D4FAE15B6C4F512FC29EF0D078FF6010EABE0CA1F2B57E351FE5AE34C97AC09C81FAFAF251CB1D21F76C8C3FB16435C0B057C35F9E7B94 -MD = 8860E70FD504770A50346E004F63D27C21DCDDEBAF3E4CD06BD7CC77D75E434195F10501002A7252DEFE8B8DD9D643BDEF99F8CD0CB679B5310F97148BB94799 - -Len = 1175 -Msg = 53DEB99B91DAF23B4467DBE3B98FE9579D1A1766A235585D7CF6D65C10C844C6EEC0D59C43BEC7B3117A5E42DD35EADC84439F884349AB94FECF403C1944F25BFACEC73FED352C49D1D6D4CAEE5F0F58BA1D4E27388E87E2EB9C0152D0705DC22EAD4A8EEF13C2160C9795ACD51FFB73979D5C21AAAD813F0A9E1A9E6E0B13F6F4E7E5314250620BA1B80953EA80F8E821AE9A -MD = D11DA070225DD9804A108C9E1E11560D56DFA0EF4A70E756DF63CAFFF7042C4D011463FE76D44EF896F4F440FB7A136ED5C74F21A6C5242754DD7E76717FDF55 - -Len = 1176 -Msg = 7639B461FFF270B2455AC1D1AFCE782944AEA5E9087EB4A39EB96BB5C3BAAF0E868C8526D3404F9405E79E77BFAC5FFB89BF1957B523E17D341D7323C302EA7083872DD5E8705694ACDDA36D5A1B895AAA16ECA6104C82688532C8BFE1790B5DC9F4EC5FE95BAED37E1D287BE710431F1E5E8EE105BC42ED37D74B1E55984BF1C09FE6A1FA13EF3B96FAEAED6A2A1950A12153 -MD = A7BD506DB9C0509AD47413AF4B0E3948B47C18278F15F5B19FBB0B76E2C1C1F19DB9438528EB6D87B0B4A509567DB39F32641E2944365780914296CF3E48CECF - -Len = 1177 -Msg = 9AFEA0868A1A5BDFC88B78BD641243C8152D8F9D1601A32815DEF06CD9EDB6139B0E0821F742BC203B6C3E550B80948FDDA65FCDFD427BDAF90E6F94716EC99E7844B261CC6F1FE737195E0DEA72EDFF6BA96992D59747BE0AEEA610B7F0FFABF12B86C4E17E5F79501B9F29668F8B2D7505410981229B445BABF8A2A5D1BF38C9D0F3668C6893C5AA55E13B3BAAC6C49F47B100 -MD = C5689ACBBE517F6ECCF02B9F14B868EA53DA5426E7D1118BC03361581FFA7FF18C6CE2B1DF8236C8186DBE248614E1F5DDE0FB1B5994A07750BEFB9983427E29 - -Len = 1178 -Msg = 5866E10C6B7ED7A1DCEB9362F737B4B2F51AD1747915CEA521DD190734DB6C58A69E9B807B6E91651A77FD1C018D1B9F237ACA44E861A8330D220A63EEDBC9ABACBE57B70850BC9E70EB95D3D2F611CE07603C394799997716D244FA8DB4B5B3E91178CF93A050D6F5AD5DEAEB039F4511593D533BE38A2B554B470A33C74D070B04592633D389FF6C7530577ECF0F572A31B280 -MD = 7E06E453F3CDD46812728944B0FF3CC76D554C9F36B811A60320A2E971ED31AE7E54BB0F06BA740B5DE586DE96640A08179155E8B28D5C0BB528EDC56DD82764 - -Len = 1179 -Msg = DC5F38825ADF0C2ED13063D7A142494DE2FB8CFD78718CD87BEA1B17288D18FC6A914D6F2B6BDB7218DE003CBABD3F2B5C1248DCA7E221FC0B141203BD7C96AC3D6746155147363D5C75E4BB05D6AE03C0DC4B8CCEB689AF6CCEDBCA79F2FB901107C8F91CB146E57E79921097BCE553DEC9FA17AFC94F55CFEE76C4B9F8379B3E87857B874DEEEAA140F6DBF158CB5E42085360 -MD = 0945288F5C2D2E1CEB4F43ECE7ADB4CD5EF8BCD49BB03CA739727D809DC15257E8A1DBCA6A61DEF8723FAECA14449DCBE049D8219A909ABDF979B0644FF2D9BD - -Len = 1180 -Msg = 788BD86E95800633621BD3314977F9BFFD02E73D885AB580D1EF3DE480103FF2C449AD81B2CC15CAAF350D794E48DF3F64804B5DC5ACDA419EC34E95D50A6614EFCB4C6DA3267F26B75BFAC3C87CC0DC81C2683EAA9ECE7C3F5E7847ECF00FA1A9043AE5A90EE15F8B81083F38829933C8C75DF3F08075847F2B64F29B973BABB18592438F9A69E20BE11C084372895E91B837B0 -MD = F47B858E7F16B2E4D3F820B6D931578DBBEDB909C1847FB933EA72FAA1210E15386FD978D9904A769915B9B94C2BECFD053CC00F678508CCFD3970517494A4B7 - -Len = 1181 -Msg = 375B857529A24EFE7A78B2CA46E1A4295912CD7B739AEB1CBDA7BEFC901EB4FFD8BED49F3366E4E8C0EA1EE938F60E17D2D0D05F5100F288415CAC3F7E82FD30689E2CC692BE02CB3E34CFF7D3DE7975042E3C5C3F8AE348FF3402A6107583E57C8E038D25668D76E43772FD92E227D5C1E8330A929D342CDF8DEBE1D314C88EAED559A13461772B73CF39093216C57679943FD8 -MD = 0AB591D9C43BCB4835B234F4D4E94F7F569DDA7A6B500733595B095B91053435F20AC4D1DF29664AF50E9D4CD4DD1A72A4335C96634CA9528F01B29D251615F0 - -Len = 1182 -Msg = C40B66822F1F282D598F05CB2094EC4E69419FFDFE3833672A289B4ECF43EF408EF4862ABA90A81570E35E73EE4809E6A02CA9F6B14D96AC2C401045F2D5D86137051B4D3F5556961DBB96CB32CCFB38D215F826D00986037C6012EEA06B9FFD10170DF6E4E20D75A46C8F7A345B3C67917002276C73F717E4E61ED4329C3E03643E9D56FCB266498DC37A72A932F3A890FF1CB0 -MD = E57BDB7B1A03274688971554179A21D710F11618AF2B8D562EA358281B28EB7C76E1CA72843B8A373AC8752A964C00B40DCEB22BC63992BC0887D4BD6D2E1CBF - -Len = 1183 -Msg = 494342589E394B324577E17E59EC8EA27F4ABC8D0454EC70AF0BE40FECF638A278A290137220AE9F00A2CA70CACB85BDD4013823917DD9E4AC1B5E00521D3F385729AAAD85AEDE5B8BBCC9FD1F97AA614FA3176DB83D192CCF775BB5A3C51F9CC9E1E6639B3F58373BDF3F20CD2F7BF780336F4F5F12AC6F3AB01DD1A139D067FCFDEB184B291DE76C7D770D8EC122BFB4CF890C -MD = 5883853EEBDCD7241BC2F2F4BCD4B61609E365840EBAFAC50C796A955F1304917D8BF1E24EA026F87DA75D24B3FCD4114CF5D233E8C5E3A59403D74EE2EA4A5E - -Len = 1184 -Msg = EB6513FC61B30CFBA58D4D7E80F94D14589090CF1D80B1DF2E68088DC6104959BA0D583D585E9578AB0AEC0CF36C48435EB52ED9AB4BBCE7A5ABE679C97AE2DBE35E8CC1D45B06DDA3CF418665C57CBEE4BBB47FA4CAF78F4EE656FEC237FE4EEBBAFA206E1EF2BD0EE4AE71BD0E9B2F54F91DAADF1FEBFD7032381D636B733DCB3BF76FB14E23AFF1F68ED3DBCF75C9B99C6F26 -MD = 2E681F9DDBD7C77EAB0D225E2AD1F72256BE239DF25933BCD6CEDD757269B35E2A5352B3298A4CDA0542FF7D3ADD2B0CF42F10FBE05A67C8763D54A78A43AEA7 - -Len = 1185 -Msg = 826DBB35FA1752054063522EBD05A746B5AEC31C1B27031080BF56A79BDAF998065B5DB044FD6AF4E14A3AD246CFED7AF104E8ED2B63A696489D610DEAF6128A742D669FAA149CAD862F467D73E53793C1C8D6237839F5677D5CD3FA78816B41E640C62F9D593E7B94595CBB1DCF3AEAA0CB05A88F890AFF71F30C8629FD3AE3348CC7338B1743B9E5768DBAA8BDBE6446E5DC4600 -MD = EA01C076BF3C8BC0C250755E11FE572D42B611499287785355099C95381E0841BD3BD51862A20B2AD45175470F1F44A258AF1690770E69A398053C48E4AF694E - -Len = 1186 -Msg = EA5C8DFB574F00CC9CD3DB9A5D499C2F722A35257347A4A80B4C141ED02DDD7CEA584E1608144B6D579029730244ABC25DDE51EF19772376D2607A13ED513BA3E43D6ED7A99553D23EF2E0171538FEC263EFE422AFF4B723BCD0B85E3FDB07E2DEA2CB66C8F4F4C6D9138914E6ADD822E276879A122F75C14575FC77A7117F05E274A029ACD74F8DFAEC843DB2581CD778702BF8C0 -MD = 8013360D4ED79C4FC0E77CDEEF68B1804C18FF97137BE823817C4B3566AAA20BAF1141CDB4A13CE7F8781072B8D6664C0533AA0D631BED082C48F380CF0A026A - -Len = 1187 -Msg = 2EB70DA0700DDF3821FE877474EE9F5B8A516C8818F18D57E2DD3F85E537B4C47CDFF4944220BE5084212290B9EFB10D7099A12AC41DEE0C6D7DBB2FE376DC8EBA1A845D5DA62634E7C3C15DC2DD6C6F44BA4B82B73D7B58ABD41A35D2AEFEE2263155A7B60CF2454FE240FAC4F8BB75A0829098793554CD2617CD7B02307848100EB5CCE098520C167F42FF4F32CEBA6AD91B45C0 -MD = 3B119048F8074F394ECC5FD49278818F09872F632D3EADAE0D371EB11A30D1A111CB8EFDF2FEB9468E43BF5B65B4BFEF878CAC068BD2598DA49A1CCE93D439DE - -Len = 1188 -Msg = 1FB040B1196A11132472801DC17BAB0A09E0A85CB66DDC8F19415317B04A2B854E0C3F798AC6488C8FDB452C9A83E23FCFEC96C5CB99BD6D5FB53415B3A24CED6925B5092E75EC4A91809497C34E1634BD1F851DF04896869F105CAEA4B881FB1905113B67BDA4507CE676F45B65D89893E2C2FD9D883041A8F7AB576FC927A51C3BC97B18F87903E421A7D9A26CFB5C4BADE82DD0 -MD = BF9B55D0104D36B6625E11FB7EFB16A6C34762E473E9652ACD25480191D6773BB6EFC5FA5DB5D61FE9AAA877E55597EC104C6578FFB4434B7B77A11A31A8621E - -Len = 1189 -Msg = 0AC19F7A5B5B5587B57EB2A3DD742020D6F25DB96E18D88B96E264C6C7CD95C39056C62E262075A89C2E9C7F95B7DA28BDE2EFD0AB61E08CC24905D3758C07EE9E044E08891041B3EE94DEF1CCAC41E213CF637289E859DCA3563F38A410EAE04B0256464DB8AECD6AE02C2F0750E241F825B4BC3D2746CCC41FC709ABC5403E6B8AD975ABD5086EC452D7E4EA8BEDEDFAB8057C20 -MD = F85FCCE0FCCFF094C795A2C5D8A40D02300F643476906456619B2FCE52E242706E7B8363C8964A0388D3B8F2B6BF2A9012A91E27A5A165E99CEF94D405FCE660 - -Len = 1190 -Msg = E5DBE6EF5D7C8260E18896A8118B42B75BF6891D7B79E784213C7385FC06DD68637A4ADDFD25374AF0122C04FA01DEC789B6BA08347EB226F985437D6EB855DA96EAEA2714373ECC6BD02BA3C77DBE2A6CFAB6FE6738C6DDE04A8D7D107CFC0EE87DD66B850F70D2C676AF4EB9ACB0C771A2EB9495F86C21F8B59847A53F8637863D0D29D5015F0129CDBA4819755F1339840C15D4 -MD = 02918F1728F9EBF36ED036BBABCD1E8AE76935A14170F52EACDCE44B7986F3CA0C69DB2501AF3DF6308AD6900C437529183D459789F0390428211D8D607777D2 - -Len = 1191 -Msg = 59CF21660C207C793EC978C2D02834BA9BF79A9F6B47164193BB3C45F7195B78485EE73640CBA87D563627E6F08CE6D621EDDA03063CF51810B56B1E03E6601545F5BA3FC80AE74F055441DEE6AC31B02363E7624734D89259B52D69108C2839DFBF4E64553D09F5F5A4EDA85D7B69F9E668F78156B06EA4C0002F33495CBB464808DF0F48F07D4AF65573889E3C10CE188F7015FC -MD = A7B816B46EAF2103841E69F1D1B6FFB9A0392BE674E25F806A8FD7642D4BF53B23D92DA4A0AF751E3374993AB12BDA0034C22547242A34160B00530EBE7C5ADF - -Len = 1192 -Msg = 1594D74BF5DDE444265D4C04DAD9721FF3E34CBF622DAF341FE16B96431F6C4DF1F760D34F296EB97D98D560AD5286FEC4DCE1724F20B54FD7DF51D4BF137ADD656C80546FB1BF516D62EE82BAA992910EF4CC18B70F3F8698276FCFB44E0EC546C2C39CFD8EE91034FF9303058B4252462F86C823EB15BF481E6B79CC3A02218595B3658E8B37382BD5048EAED5FD02C37944E73B -MD = FD9BE24763F682043243525E5E0780534A82AD5E83B65EB4ACAF5353313A4CC7C5EEA9DA141DE570232CB4126287E5C77657CA8D6A16B5BE53F470343E722FD6 - -Len = 1193 -Msg = 880D1E3AD14193B4F50EEEF144EE2B95FD817D157521EA14512CDCE43B1E498C0F3DA6906B3152668B79E542732D3424AD8AA392FB1D951D88AFEF7BB419E9E6630F8543E089D44F8397E420A0EC1F439AC2B1353C4B811D752E3B9D47C2220FE490ED4B2E78F63E8B05758417AC89B62CE2776156AA316C07414BF840B61D2AC875C23D313354FDCF2AC13F48F18BE75804E42E2F80 -MD = 7FB20303F1ADBF2C16446CFBF7DEB3D694819F481EB61E4A37FCE5DEE4D140AEA5CE2EF2BF56BD8F5C7E7886AE2E70F839CDFD2677742D7D43B588402F9E81FA - -Len = 1194 -Msg = 90486823C70519411AF34F204AC4138D7B6915C43D1A0910955E0DAABA761C55E1AD5F75B2A834DC90558B112BF80D24B9969DD22D1FAA4553F94AADFF5281214F3B41D2E8190F83C4B15B1545766B78C73DAAF920D06194456D3069DEAC4344C176753F5E6A7DB6955CA6837123DC12CD19D0D46DD3DEE721199AFD8CA7BE9D8A08A85E5E97F720A82C6BAE20A6666322820A466A00 -MD = 5582668A0E38E1281AE7A176F1F200E6E990095AE6F779ED59B25B888FD81F5F9EFD953CF58B196D820F9C934EAE2F898C5904B997A16F8E366DB1F886573347 - -Len = 1195 -Msg = 1554706EED3D3C4BFF57E5ECE7E346FDBCBFEA1369C8819813AC26F9CBB9EFA54000343E9FC91A1751B4E5017397936F63229AE21FAAA04049E3EE32808B31EF53818C893D67248835D9A9BE4F7A72466423A1378666D95769203303F2933452E302DFCB870A642118B37BA723F88E28804AC1E39DC81FA98F6E2D150FBB5B05FD19F527F4B601918255BEDB7ECAAF71D83B5002EAA0 -MD = 6E9CACEE3D548ED683C2A11AC13FAC719E601839EE0F39E09FE12D363E0306A338252866EB6B6A3580CCC5B33C184BEED75C27A09F0CC0B9D4C94348181B7CC0 - -Len = 1196 -Msg = 700516F8246D73E28CB79EB2AC2F806A67DEBD5CBC438F9B58FB02B85E6667C3E96ACF02168F83CCA0AB4560FA6A31A10DCF638B2AAE4D0EB9DFEBA4EB723D574005659B72D3596BEA991809290C612D90BA4448A8D413E2B8B07F41E9AAB65761366D7A19C97E3ECA66496B16A5556989093937CB365B029FF0DECFF7C74E26810D7E00CB4EE35D965F19F70046FC5A062386C0E820 -MD = C695E92ADFF193DC5541C575B6ECC11588DDB9D8F10D39194E8AA682B2FCE349100D8CD1E8FC7744AA30ABF460883D0C4E3B3BC0C597E0CBFC59AAE0962FA639 - -Len = 1197 -Msg = B3151A083EF4ED82D6FF662D632D3A15CE93EDE988CD7E31EF91E2944DAC669BBD8D4EDF28B07C0809A9D7965AC023E143A9D8B66C8442A51283F69E7684000B8C8CB3CA12891E3B8AD8CE342514F5671FFF3506D937D734505D1B7E4557CB69B83D76F15806C56E6696ADF027C497BD7E30C19B92E2F5E4536808917986E59FEA339DB1B19186495DEC650DB7B85EAE5925AAC57158 -MD = 0906F31414D7B28B3F4287BE3F051EDBB0EED488342AC903DA55B05A7D21610A620FEED9C36D533580236D4400DD89E76C2816274471CA3F3C5082E02A651599 - -Len = 1198 -Msg = 2BE9BF5794E6A8EF2BA1EB5DA245610577FEDB653B12EAF68DB8FCD5AC2FC0495475912D5F5D83E81B51098F9A7FBE1E2B4B8D5370EB64FA98B73147C0DB53C74D508BF0BF96C0DF5C6F765C94E4DD1A00DE2D3F86A6A67B2EAFCC31E97A0B57A5D068E62C59D5CC2459DFF4B5F385E8D360918E8FE7C61E0B54369A7DAE211BAD3E0A6DE8D798399A45886D2A1F14433A20C46B640C -MD = 1DF6B95F48842CBBCA771286DE8DDD4349A44BE31578751B5E36DE8B3CADFD979A8C5C8C30A7062D6CED0354AC098E55E91A3D5647BB1F2DF4712D18BF02AE40 - -Len = 1199 -Msg = 513DBFF1209835CD5C01E7FF2A85F1CD70A37CEF3D61897F88C25B40D448D7F4A14DE631A2B44E366238CD1637DEA9EA0437B78693AF5F1E37ABD61BEB9A6F302FC0958976D7E35508D79052C6CB37CD0EFF35031DCEB6D9C0E6E8321B2A79BDF5C97F1AD9EC9EDC27C359B0396A3FF4A276A8C3B6526599C90CBEF761FFBB4722CA389597F69E9A67BCF5403649252A857B56BF6C12 -MD = F47BC82476C4D1CA25A027F4514983B66F5E45985D2CBD0B467E56371911D3B3E4EBC921EA50C1140E975E166C4A4F08D16D92712390118DAEE6EE39B38E196C - -Len = 1200 -Msg = 4CFA1278903026F66FEDD41374558BE1B585D03C5C55DAC94361DF286D4BD39C7CB8037ED3B267B07C346626449D0CC5B0DD2CF221F7E4C3449A4BE99985D2D5E67BFF2923357DDEAB5ABCB4619F3A3A57B2CF928A022EB27676C6CF805689004FCA4D41EA6C2D0A4789C7605F7BB838DD883B3AD3E6027E775BCF262881428099C7FFF95B14C095EA130E0B9938A5E22FC52650F591 -MD = 14EA33BB33FDF0426E0DFB12DE1C613BA97141454C8971BCCE25C6D87A6C2403CCFAD1E8A6C15754C3CC5AC1718B7F7F1EC003C1B98D70968C5DBB95540B4A17 - -Len = 1201 -Msg = 0409C9EB80912B2931EEEE3255E452201EFC972E6427EA1C9FD8DB51DECBDAD5145B0EF578EECD56ED3D9026F65705B30ECBDB27B32866ED5F6205E72899BD9FDC76A81F4613C4ACCEE9D0B19CCCAC6EC99C93A0F337BC2B9FFBA0EF5C2858CA503F5B4D2974AA0DEBB407F5E01D707DE7CBB96AB993672FDBE46C6DC462A1BD38B853B9038B45A9023D14585CD3F21F761A5329930000 -MD = 5BE74CACD903321FDB6BC8C0F7F3461C8D143C0EA348D27A8602381E73F61B01A6C71F7E25D95C373E2C0317E8FAEBE4E07941AC2D843F1932C71FE21A2DF2A9 - -Len = 1202 -Msg = E4C0456940913E4F1D513208BBFA725EABA66714F89D4830D0B1D3EC3EAD6944A533F661AF7F37145C5550EAF106A6E5EF75647EC078C48DAB5579A71C3F1394847B329951806F160EB4CCDBA77033F21665ED9A6CD872B207F83CF006F5DADBA8A2FF05CF7576648F87E32C3B3DECA8539F65CBF65663D761C3F6C03EA66C2F60FC18EF7C5200B173E9D136A16066A9022465AE02B440 -MD = 6F9FF7720C9BAEEFC18B200BC8D80038CBBB2E0266709F236FBE4B42A026AA9CEB98F7478E7A66B842694131C1DE2A414C58ACEFCD51477F436724C41F8EE29D - -Len = 1203 -Msg = CF2B1D3749F0FCFE15667C2180E01A3090C60387B864522F06C8C6754F2655359FBDB91AE7EDEA95009470FED761B30641DD3B98390EF85B4B8BCC927D63DFB80DB643534B65862AC148DCDC95162D707022510F9996689AAA1B4B50C6A8867A74B11D00B2517FC81D96E8D1BF24CF0ECA862CAC750059AA7BA1B81ACE44DA18287DE4D7AC0386917F3570BC2C4E3ACB6F233C85406EC0 -MD = 0CB43E59BE6540BCEBEE557C5C8DD525B357430D717D4064278E1F0E845083F4E3B54F25CC5C8740E0701AA4EA2C49C0196194E353BB9CF682FDD0E7A6B91349 - -Len = 1204 -Msg = 78D24A6EC44983D0836B45520E6218A0B017F82547E8EE1EB61C8F9D6C5AA5A0ABB6B0635320B9DFD2EF8C4B3523AD4AEE16B24F17A069B6A477F2797FCEDC02AA9499E4EA579CEC79510288C11FABB4D1625EB84BBF4A20DD65C9D406E7309C3D897F83CCAE2BE9FAFF2E2303A86AB75E424425A339D2C6E2846D64BAFCB9905F84477132858D0C03F5F546F6D30D108253AC76B64880 -MD = 96EED11B64534451A0CA96BD57CB30EB17AD37E1F4B6333D581E5C236EF340D12B61A765857AE921143B1ADA1469B357164D8BA1E45B28903F88B08A0664425E - -Len = 1205 -Msg = 8D1B3A5DD6AF7423E91EC02A68D19A902166B12968BA6A9B3C2C86CE746161B434DD2EC00607563061DC04EDA5646DD5AA49B1DA5CC7EA2BFA64E6832939EB1E70B61D2E0A44A519E9C6469E7F9C0C3C65A819F306273DBE1022946675E476A604FB08A1A0FD9DAB905134FAD2F26E732A69FCD7DB11A1ED353E24841C400B0A4AD734A8744B024735E8F98A9F7FF39A0006A1B3F1BF10 -MD = 821B7F0EF17C21981F4E04DD30867C4256986BF3CC49FE30525F404CE20D5A1E021BF5A10872F88B165FB59B5F5684824DA776F34A90EFD8B31A6728295EA66B - -Len = 1206 -Msg = 91544241F70505C5295091A16575C6E00E55CD65D205CADC8EFEDAB50398B8CB34BEC20FE7A5E4D31C79731405DAA46879B52200B8B2B114B22FAF7B7B9C3BA530D76BFC9EE733CEAF49E4A14DFF39872019FF7A1196D8333076BEF518B6410F764F60F413BE7969F56D85972B6C5B689E9400038211C3238ABDB2A32AF962EB2FC8E28355F594F091B5675BA0F6B042F83D6BE7876234 -MD = 795F116D74414E35FE423D72AA4CB7B33EB206D38350BE0AC74266A885C28E0BBE1E5E58156EF331E0892276977F1BE0D1BC899333E8D1FD00E3136CF1BD755C - -Len = 1207 -Msg = 56E0C89263D8B0EAFAD6AF1035860FC6C542B1B7B9B9B434D29A3A125307C85C882DE03ED68BBC937A6340970933C89271846416042640AA90F77C9C8F670FB4123D9B628799FEF18C87AB4F914B2419DACAB45D2E0FDC686D48171EBBF17CA4DC28A7548C0836B996F6C387631AA413117DEAE5A1D380B94DE2686E61476E230B2ACD642FECA0D769482E30170888981505E9FE8CD8BA -MD = 110C92A44AD11A6C0E1909BF7543275743922785913EEE3E0A86B5020A4FD2B1F1839A1BB45D3E106DA0651FEDFB89E86CD97D36170A23DCAED4A4BDD09B6DC3 - -Len = 1208 -Msg = D3E65CB92CFA79662F6AF493D696A07CCF32AAADCCEFF06E73E8D9F6F909209E66715D6E978788C49EFB9087B170ECF3AA86D2D4D1A065AE0EFC8924F365D676B3CB9E2BEC918FD96D0B43DEE83727C9A93BF56CA2B2E59ADBA85696546A815067FC7A78039629D4948D157E7B0D826D1BF8E81237BAB7321312FDAA4D521744F988DB6FDF04549D0FDCA393D639C729AF716E9C8BBA48 -MD = 3B4B395514E0CAB04FC9F9D6C358006CE06C93831E8948FB9BD2A863F3FA064E78EB57C76DD2D058D09AB3D105C28C2DACAEBD4A473F1FA023053CC15366082F - -Len = 1209 -Msg = 558AA1969870FA3F59EE259B5797358ED42E6B3F7E7548FB4C7985461EA9E3A65BC021FC95626DD462FF2F99BB5A6A8E19AA27AEB184F41630E67D3265688857C61AC58B205406BFA6F02C6D6463C33598F824F0387C86797D8AA9EAB639B6A77B7076B52EB5398C8F31155A6A1BBDAF2DEA857C798E8F9B3168CCCAAAD4EA37C5AED9BD9E3B94042C94963C5064F572B163B6A8A6CFDE80 -MD = CDB8EDEFF3C217BF9E900AB93B0E3777053293ED33F7EB1AE3D253F9D0737FC54F3B3C3EB0868115C78D39C99CF8F2356C5098711F6F42D1534A8A8BE5912896 - -Len = 1210 -Msg = B25A91F9A28E69447149BE857CE03282351517AF22F6512F7EE3B00B161125EE2673840D5765E9AAF2098732E7D9780C31452872AB6CDD658C5F2D8A7529D0E622394C26A03B11F45D15DB0FAFF43107B1B750B822E0433CA634354EF8782216ABB666D187BA1486CC3CC923F4A270300886B4CC3FE3E4507ACDC605EE440733F786852054662E43811CD1B77D97E6829C3D7AA9084F0CC0 -MD = 7EA5C3143A8FD788D290E12D48031CAE89341BA3FE3542595FCFF493BC933240C9363B755B133D98CF95323A766857CE5A1AB93B4FF62C7B75AD127E81E16495 - -Len = 1211 -Msg = D5BC5EA66BFF1C5573168AB9E814082331157B8B885C9E4976088A7CCD342186CFD88499887DB0144A9743F13B5F4C402C18A6B060DD8DF0101E1C11482E109AFC78C0C6352F7D4AE47009A3DFD2AC5B3C6E08CD253D717253FB89F94E98DF386FB09333A1F4E3BE1792ECAC7C2CAB28B447ED0363A5EC84BC1E26A2AA7F3C5208E0C0015125155C63A4AF5787437D7CEF410CDB393A2FE0 -MD = A36EA62E938D75BDC0CBF4CD1688D39AE10D72E237D34ABA2096048EED50341ADEE6076BE84B47507025CF6A39FAF63973550C373075B2DEA726D1611D71FFC4 - -Len = 1212 -Msg = 7B32C25404B828B7975B85A7F8E808CAA26E48DCE8E28C5CD0D98A29D3FB1E34D09914421C693BA70EEA3CB5C79F8842B8EB70DF6548B223B14680E31566C6C126F53EE77A0C5A4FE46A6DD6E81E1281E39F5CE580204702728509A3207AB6D316712D355125F8310026321D2E0E318B58C6E6E49CCDC867BD908803FF4AE066A9AF402FDEAA1006B100679A4F68145588C21E9D569C5B80 -MD = F04B7EBF07B76915FFB165B48C9974652D9851CC8A6AB71D94BE3F4EB4A5C26C9A52CF4E88E02A0A1455FAE24B68EC41BBC1B6839BA0E29A8AAA82C719256D1F - -Len = 1213 -Msg = FFD56A3A7BFBCBB58E076EC15B32FDC6515E6A3CC797671D8291C7F9905D5CBED34607D713D1FACCE5CF240F4B0CEE151A43CB96FF832686832E28FE24B603D95FFB82D757B2AC496C80FDDA8E5701DAC77F597DE05D9D74008652CC06E5A724B3D279A43CAB626EAFA8732B446CBB24C2A574EB6DB20C736678B65B71FD0BECA4004C0F6BF8E656E754CED34295FF3B2977DBF083301050 -MD = F87CFEBC91396C7E6C53887EE681736C6B6E0B43356E16811EEE44161E500090D279320BEF2184079C4FDE5F6243BF53651E0941C6612A1D0BACB25D204D1B9D - -Len = 1214 -Msg = C8ECC9C02A54BCD934F3AA9416D4C8539BFC445C20CA833678394503C6B87091B8B51185859DE712FD9CF8EF6DC4237811312F1BCB9276D88B256CABCF2BE94A04B91FFE528B3CE13E68748C16D9370A228ADC895832FAB7C425E3D75A6B1901DE47993CD484AAB82EA902C6332B5888BFBB60415F4A0B05748EA088212D8964228A5C1899CA4F8C8F21C1236FA118B68B5287AA0A9D8F04 -MD = C6EC7FDE0A11986F75E90FEF5867B1B7F53A05924B92F8A80E7F138A7BF4BEBAD41B00A5033C0CA509D9CE2186CCC11F752BB9B3E59B22CE9BAAAE938219171A - -Len = 1215 -Msg = 625AF287E043C8F40C535BA8495B07A4F20310AD069F1C1A1698E2FC2682DE1294F7290C5BB7C4CA4397CFB9380ECDA6FAEAA39230513A145646BA120D95E816CCE3D13F5C9E6F667B2C17CA6D20E29DDEDBD74BB7051F3F61826A7554D537A26261D0B5759C615530D36139863811429ED257F8D85F30BCAF67D10B9C926C398DBEDDA79C0F7C858BC1C6FE4EF20DD3580A1419F4414834 -MD = 923709160C203C2FE106FEAD501BBDC823800DC922D19766EB9160409D43723295B398F8F4BBDB081D8379AE96B1892FFF1BFE34A5489208C61DE3C29B8E0242 - -Len = 1216 -Msg = 842CC583504539622D7F71E7E31863A2B885C56A0BA62DB4C2A3F2FD12E79660DC7205CA29A0DC0A87DB4DC62EE47A41DB36B9DDB3293B9AC4BAAE7DF5C6E7201E17F717AB56E12CAD476BE49608AD2D50309E7D48D2D8DE4FA58AC3CFEAFEEE48C0A9EEC88498E3EFC51F54D300D828DDDCCB9D0B06DD021A29CF5CB5B2506915BEB8A11998B8B886E0F9B7A80E97D91A7D01270F9A7717 -MD = 2D7D28C4311E0424D71E7F9D267A2E048AA175455FCB724CF0B13DEBF448B59B0F28265B0F010F4E4F4065004904A7C2687A5A1B30AB593BC44F698DFF5DDE33 - -Len = 1217 -Msg = EE795C10211EA9D303C7C8333C6CDE90E606A65C1D5D73C4A26645EF592950FA96B2A666F360A3C56C3C00584DC2BCFAE83E35B738DBB63C65EE199D44EAE8D82654007F9387327378678A82B649EFC8E44EAB65DAD64F4087BBE76BB90060B161B9826B7AD0ADF81F503BBB964AF705F1376DFAE246DC5C4B4995BC2AFB4DC5E43FE44BDF5B66B949AC499E615BFB04A0DDAF25D6A0702300 -MD = 3CB8995D8828AACA226F2933C11E5245849E6750CF0C195B0B0F2D5D857A6BE1EF4967D1378E9A94963AC3CEF65DE1BCC13A18522948CC0CB3791AF0F5D15FF4 - -Len = 1218 -Msg = CFCE57319D4C68132C9491522458BAA42493219C4E61CEEE5248F6DF0A65CA2D82C846BAFA01628DEC4A07911F1C71C4DCE7AC66AD005A8D973D3E8D646C9EAA47FC8FBE0899FE69A43BC20DFDD262756B7A703DC6D1A271B544D7E8EF077C3EDDBD0784FAC5B7AA197F25E8A83E1A507D0A893E24FE2AD4EFAD28F65C8682EA423223ABA8E04E48EAE78BE0F70FF0F0C44749AA4972A4F1C0 -MD = 45CF78AC6CA36516F7A504F807CF8813A1DDBF21D1B4F23E3F38DFE4AA43B5DC4F978A842E369321EF6DDD93046E986F2D50550279830350FE02B00623EB02D4 - -Len = 1219 -Msg = 91B24F53E90CDC482054BAD312C5126F80154C3AE92C1680A0807B2592EE95AF75C2105FE437C3F70F6B6B06F98AEAEA13E572FFD42024E748D1BEF6044A54D7D057303AAB3D5B940D2DEA3C405E667484334A628F94312086D72E3744A75EC43B645879D45917E7C587A27573B63BC2318E080767808BAD0286F1EF1B41192667037DAC968D784B09DD6342B31CAD52E936E65B8F3DC097A0 -MD = E3E1605194E90BE30EBCD29A3D76A3D80BC1AEB184CD7777DB705F200C04F5B86BBA49D44414915C4EECFFF155514887C72FB4AA43CB58C878CBA79D74C66E82 - -Len = 1220 -Msg = 77E951D75C4B0CAA1BD37CD917B05E25F17259FD831CA35166350425844422C59B85C34E40262A01EDA5EC99F4D0E1BA62D371284CFF46FD1ED5152C3AA612F279CF48095157FF8CD0A8951CA8C4B56DE177BC493FA3601976184D05F2D34CDCFC9F230DB5ACA5CAC3CCD60A05E67FE1FCD9D23930F1D4708697B2B226CAAA3E4B89C97EF142F17D56A2F417207BC51F4F30245624A1647900 -MD = 6218AFA102269712DEEAA79D2D9E73809F7506751A62A45954F0520D25F4BF3AA92160E4097AF2A53752FEF02B8D26D5C6711CA903F161753CDC5C01E89B4A81 - -Len = 1221 -Msg = 78E4FD46027326BB88D6C727711089A2A4643BE28267B6BC224EB4105B4BE07B73E28A2A97C02F17980F296B1494BFA51158D4DA1DAC27569B7598D8B11A10E040497A87E892EE035826CF948CDD957CF23EE17E88228849E00E8839B2D2DEA60C3E2CC0C7AFBA8EF335E9B8A0610EC25A452533D1F3AEF251166CA8D384E440EA616BC416706C0FF8D6613B89D62C6E5BAE80078A6E528168 -MD = 36480215196A9F74D50FD779C3C55D195B7E9806A71C40A5989436048E04B4DCD83076C586085BAF68D8EBA9ADA450B0DAB1DE1965F5C4DE30585A21AE0980C7 - -Len = 1222 -Msg = 49A1E08F3F4B954DB2998AE9F6B6E48A5E0CF52CC402CBC34A5472A5FA7A5C16C2818EEA453408514394F390DD5889D58FA6AD8CAF373F48F58E7FDCD1A769BDC47B24D8500CF72488D93453ABB336A82D689F0B983600B80623AE818B00108A1CD4A615C9648E1A2D095DC544563E19071F7C4FA13E01379B67A723E58B6CC9620F2D93CF7D6B25F4346E3932E8322847610E718A41F3EAE4 -MD = 0F5D3341944A50027634A9346DBC7AD86D76878A1138989FAED52EB21DD0195E939FD62CA789F27485C88C6EBAAFD2AF9A1E3C76FE1F7763C6C4B95B5CA18E2E - -Len = 1223 -Msg = 54C62479E70B5E674958039D5B0A720C878A69C9197A905B0445C8241F256DD80F146545F4A97F8C3C3CA4D9AD5F27E2704A98822CBCAF9A1F3D32B8570406C9D9CE13ED2D78FDB5C2827A4BA9DE242AC09C26DB0AA135B06FC7506E3B9AB45958059F151919A99B3E36F7E4331D7620D6E720A9A20042128CF47EBC231372EB9A1B7C7C16B268F375447DE1F094836CB12C1EEF00100A14C8 -MD = 26A47BAD3508524BDFB2094E2DC8F51238FBC83CF260BF93D3625B53F7F0A87A6EB8F9A17948C85C2F8AF40B8A419B7250DBC7434E7072D5D92E74E44A7FFF47 - -Len = 1224 -Msg = 6C4B0A0719573E57248661E98FEBE326571F9A1CA813D3638531AE28B4860F23C3A3A8AC1C250034A660E2D71E16D3ACC4BF9CE215C6F15B1C0FC7E77D3D27157E66DA9CEEC9258F8F2BF9E02B4AC93793DD6E29E307EDE3695A0DF63CBDC0FC66FB770813EB149CA2A916911BEE4902C47C7802E69E405FE3C04CEB5522792A5503FA829F707272226621F7C488A7698C0D69AA561BE9F378 -MD = CB665EC69ABD75743C8713034E9E41736F8C1CE2C77A8518E50388C411E6284D9AADCD4D3BD5A9EB74672325E41E8A67ACF380D1E8A61684F0E501F5663A031D - -Len = 1225 -Msg = 0944B0500C2FD3F0ACD0B0623EDA2E763BD95483CA40A44015BC0689F840AA97873AAEF58FF7CA01B0BEBFA789D301D3BF25AF39D32F198AC941BFC93C2051E1F2A38389AA26C7B04CB76D7B23361232587F923E630F27DFC7AE0E9FA8ADF10FD7D022200FCEE5847148003CC7144119DB20D0E2AA6564F261CF78F1B9F79CFB3DC8A9867BBC7FF49D719F493686006F2060B93D8B3DF679F900 -MD = CD42787B3F6D31E4DB2930948A779C2C54DD74626C5296CE9ADF1DEB79332F86ABE3848E236F6F4402E5AC24F304D80A778CABE040EF3DA381ABC1991C1035BB - -Len = 1226 -Msg = 07CE3EBDE3C2F23BC7CAA9D38E5312961A470F9375EC3DF44809853D47862A2332D0BC4F29B267CE3FDCA659720BDFB84713BE1B2F7387D679E3A8AC8A12837E8003E9EADEDFD3E29AEF2150594604F507CA276A9DC5EB3EE8EB74B511787EE2862AC0976588106273795CC6F41596ABA09B9C59382DAB0398E95F75193BE0B14A7E45C88CA9B8186C9B0F0485A4DD9B4FFC361EB28D34EC1E80 -MD = 264F2B421ACF9324806E0C37C25DDB537A9E72FEDD2851BF47CBD5B1492A2A88983190C3F275336E9EAADAF7A4464AD2FE828BE776FBC92BAFE5D625A893E90D - -Len = 1227 -Msg = A12682794B203ADAAC278FF0FDDBA860CACEC00C1CE9A1D4577E3D7EEF99B291E306189DCDA797C45D643C1E9542AB0A16C9369286A1FDB6AC4D5C1C213973F95A468DF114BC7FAD9EF3118CBB8312E4685FB6B46ADF1AEA568AFC69BF805FA48B9D25064A98F3C2961ADEE697250FFA4FBBAC491D698CD46BEF3E7995E3416C405F75062D739631E901670BB3400BBCA014FD22700919780C20 -MD = F3690D0631F5D3F713ED3CF8B49B7DB967D087658CFF7B16BB1A27B4702861C8DFB2CA5925F99A2A7F6396592F70EED35A3A5645A89815DB58AE88EDECAD0A90 - -Len = 1228 -Msg = 6FE5239D775677E62348DC46DC379F70CA024DE4A4744D1D6070F6A90F26F1E1720D0A9FB31668E41C8CF350B7EFFA2DA0CD1DDDFC8203011A80CD325259FD47E8E2CE329284D54639C73F1AADA1E034F291505D672B979C94A08022EC15FE2241C687B8E2694B4F108A39E1DD672F9503E3A3A99B95DC87B8BF74A95B332201A916CBDEB8182D3D60E6E482FF04A3EA05DF548595D487CBCCA0 -MD = 034A0F591E5FA15F41A895813B03E35C89A85F4AEB19B780E9E4C57B2E8E3AAEDC098BA7D886813C6773AC8E6E78EF5CFFE03C1A43113869719124A1E8376561 - -Len = 1229 -Msg = B063F65D94AEA4383850A817286586F22CE3EB09C7EDD293EE8146BB8B2706E0F1BEA7784B708D6CA004B28ED7BC4E3E432A76A4A644BEA920C6EBBDABE3333C083EB682878D7C07643FFEF6E50357DAC346B2106DBA30E1288A1886D01A7F3D2BC970ADC5AD33C5C86212544F692D4C56C83F448836D79B9882E7F85DB38AA3E07AD0399F0152A08A08B6EB4E5CDF21851C8A7C73065B068140 -MD = F68E0CCBD0744BD31D19629F35DF8B4DD2BAD19449D2EF584F668C7CB81EB71388E0CAB4E8A6DB2FA24B722CAC212FD5B65D70177E0BA24A89D5403890CDF7BE - -Len = 1230 -Msg = 48A2ACD9C115E1AEC54BEE539F842ADC43170FF60E003272E9E471135514A50F855094BEEF742A175835BF1102B747BDEFB149EC234D81F2BECDC17C079ABF874C3CBC4741E6115F34831BCAA7D4D954EAEF78C04C640EDE7931B1AC63BF8F665CD4724886487FE13F68097583461B58E88EBBE815F141BFD3C7BAC974D462976234D3706884C663A9ABD6FF86C046281446AA07317F36CF7DAC -MD = 38C54B299AA63013835CBADDA10A0F2C3DDCAAD57F7356E96311785FAC66C052B0BBFE672DD85B54AD0691D1B1134644C428F6173F8D33708C8641087BA74750 - -Len = 1231 -Msg = C6810F0B8436125C00646A67D9AD7F1689821E3B0F02BCB47A3DCD2DCC292CCA93170951FFA4BA6CD0A533C5889BE768CC82FAB0AA7433AD928073894D1EB21DA667F49020E3EECD26234FC5EA28665BACCBA515C40071CCE0C139281D8A5AE4D91482C259C15FAA9794E699880E9D48FA06C71968B2CD34448495AEF6C55506EC96E71E6326823C0EA399060043B0D5BA74AE64B6F14797199A -MD = 588C5AA5B5D33B419301ADADD578410F82DE7D532A2927F44491ABBAEC287286D31A70F8C6BF9EBAF4726DB08DAF3F13D16F02B6A8912F7FBB7AF54F9D550F48 - -Len = 1232 -Msg = 51B7DBB7CE2FFEB427A91CCFE5218FD40F9E0B7E24756D4C47CD55606008BDC27D16400933906FD9F30EFFDD4880022D081155342AF3FB6CD53672AB7FB5B3A3BCBE47BE1FD3A2278CAE8A5FD61C1433F7D350675DD21803746CADCA574130F01200024C6340AB0CC2CF74F2234669F34E9009EF2EB94823D62B31407F4BA46F1A1EEC41641E84D77727B59E746B8A671BEF936F05BE820759FA -MD = 4515A104FC68094D244B234D9DC06A0243B71D419D29A95C46E3CBA6F51E121ABE049B34535DB3CCBF2AD68D83FC36331F615B3E33DEB39A3381DFBCB798FE4D - -Len = 1233 -Msg = 5CEC4FED86E4B4355F1DB08D3BCF6C9E2BF3624935F49F69BFBF10FE95121BD62AE073AD191722DDE7F015C3C19F9D3AF6FFE2D767CF0A0EB9FDB244167182D7ED6831319D4984400EEA1DCA41CE0D27D85420A59C68C54EBDAA9AF331FD4B7C1B8C118C2BCB2D963643580240653522A1A1E42FD8D941C886FB3BD8877803FB959F2A851E9834192C4B93A64F2DF5E268EBC12CDF8E5C0EEE9200 -MD = C9EB37F6DCB73ADDD038DFBC2DC2F3C305D7D3F797093C94C875E824B48541D773837BAC0BF510679A458D1C6CE5D8B3F3E46D0141055C97D30B63C6BFC744AF - -Len = 1234 -Msg = F1A47FCAE4AF23100EAC7E8CB58A24A00E61B1E668E86EB3391FB1D369E5EEEC2759F39AAF9F2A10EBAE83970E75007F8625B3FC95B9D38E927D5AFC55186F3921E93727E4C38E1535ACCED7F697926AB2221D3B0873667F9DF870F4A6F376EE5E75C0A5DA919FD4EE923A488B7F6A20BE349A06DD19B4C7327ED57A7168129732A3BADAB7A3DF08A186E677838FF49B7E7BE57270F8FDD12EF4C0 -MD = 78FD90BA17203B0C80F67379AEEEFC5D95396F2156B697406DBC641E9411C605A59FAD5D3B0527D68228D6F5F67E68FA0C82ECD7E4396B0B6117101F4DE81B59 - -Len = 1235 -Msg = 9C9BC5FF6E2A46A6DAE4D51E6FB46CBEBFB3E308F00F6BDA289E88FAC4CE4CB51ECB8C9685450226B8AB2B5E567BF49B3D04397AFA383A08185FA86F55DB6FB88ED8467A4BA95F69ACE83C955BAF5E616B1DFC73CE2EF6D5B696AEE81C9D742A8F9699704FAE2FD370740640A822FD2DFDE1C7E156D6D4B9E6AC6EA2F3546ABD60F0841BD49EAA8B8D26CEF0DF273171EC9F20D2E1FFFBE0E9EB00 -MD = E25195D7C2B94A7F3642434AA6283FD04E8F09561EC31EF972444FCF77A5A9BA8B83D39D9332C09CA4816A65AC12B64D06555CEDB68FC86B2DBB438A41EAE256 - -Len = 1236 -Msg = 6BC7AFFE4C66FA084508F7343E698EAE4A74EFE0A4E8FEB2F83AD82C01ABB999D07F6F3082480743D309841E4AC44BEDB69CBC6A082505BCA690BFE52BB67FD9D6CF5C37D981BF8CE5E6B0B7429B4518094DA9604BCC39775D63CB49E2B50C35D12D78C5717142710AA48C7DC4190B2D4C18FE53ED42B9DA9FA71E9700A9BE0B6041733E17313C00FC309655EF4476421E4061F59EB15A70C4FC40 -MD = 3CFCCC089F46E8E6EACF4AC13B6B623B6D88EFBC9F956C06B416CFF8ADB52CC1A48B941B08D8696972472AB306C103C5867C3F67F05C9DCCFD919C89F3BE4A3C - -Len = 1237 -Msg = 29354E6F76ACA48E55F1B5D3169F02B066277DCFCD00230340F400056852F7AA53DDB2B6329325643F40A5E7AFC06F66D7AE2B2A08F8F142A929D0D21AB8636BFB32528EB928966798EAD25140A6B3FA2DF9024125A013189FC79B43F2C4448BCEC44C6029EA4CD4F758F23515E4FB327367069BCF55515283087F32BAE0A8C5B8F577AF52FEF9E084453CA629DAED5A36454B0BAAFEF0C15CF7A0 -MD = 43DF99881E9C42D06D257B38A08264002A9B9A8C18003976C49B9D499F522DFF100B7B8005907AA198FFBC292401EF99690CC894D5C1E8667E65A18283EF33AD - -Len = 1238 -Msg = 626F397D0260EAB42C6EF7098A132C01F266B7BF8B931B7DC9B386801DD1F56271B0B45E1C36B7A69C29F53B05827944DECE0D4BF50084FE753A1C471F4C895905FBC35829196B9539A4C395F5F819D37A248AA3C1BC4F42BA4C3B09A5BE323BCDDB0A14E7AFFC2E2E039D69266515727001D97E585155B6B1C5A94B9A1CFBD9B762B38DAFBD956125B9A0FAF437241EDA5349C2D3266DDD1E796C -MD = E1F55823727C77A026C395F2F5CAA6EE9A6646DF58B56EEF8488AF3DA4CD96CB83FD972BB41BA898E3C961222F76099B832CA56B8910BAE566E4172A8E57E55E - -Len = 1239 -Msg = C8356DFF2E7F57914AAB911BC03DD06FB3A90EC2D10CFD003A28FF8673230ED6B972FEBA869E4F7DBA1F07153582751FBD62D3B7D99236A09A5F0BA4252E35CDCBF87D6B36D40EFDF3EC5A5AFE70014717F2F730C1C4E516908387FECC704E2F17C8E88F58FB4B1D51A17CE63D45CDEC2AFC6F2CD645D63DE0C5D62AC280A75881B00E76E72C43D40840A91AF569398BDAB704ABD85F1DE2C10C76 -MD = 7CB72C3BCA72C9F9C012E163E1BF97E465B7E04DB0F42D1D87B996C34AB4E423501608DDA8AF4E1E5A3BBC30A1BE12BD729C91D7D4B7695F50AAC360BD2DC775 - -Len = 1240 -Msg = 83599D93F5561E821BD01A472386BC2FF4EFBD4AED60D5821E84AAE74D8071029810F5E286F8F17651CD27DA07B1EB4382F754CD1C95268783AD09220F5502840370D494BEB17124220F6AFCE91EC8A0F55231F9652433E5CE3489B727716CF4AEBA7DCDA20CD29AA9A859201253F948DD94395ABA9E3852BD1D60DDA7AE5DC045B283DA006E1CBAD83CC13292A315DB5553305C628DD091146597 -MD = CEE3E60A49F7CAED9387F3EA699524C4CCAFD37C1A7E60D2F0AB037720649F108CCE8769F70B0C5D049359EEB821022F17C4B5F646B750E3070558EC127057F1 - -Len = 1241 -Msg = DC77D6CC04036F3EADEC0A3F2DB83F877CF24A2AA319A804C018840956F50B3830B8900428BE0505AE0089466A22845952CF8F4192333ECA1F4243434012DC5B833DC514ADA93CCE39AF280C961746E3DE14E5B1AC280911C31498796728DF1CAAD96C4B0C9D907773AF7C86A6A5804B40AB86697FC4BE83E0CB386D14BB872A9276203256285902DB42B05F71050ABC71ADE1E06D37F4950CEF3B00 -MD = CB85539060DF7660C7885369D180867F91CA31E675470BC93823C067E45351EECE5F965FD5735C6ED4B5A1DE1199BA5BA47AFFDBFFA1465978F6630E1F30D6BA - -Len = 1242 -Msg = D57982D9B0D4B3D9B18117EC323DC1F654ADD71AB06440C77C49E05F110F82AB974B5C22637F6A1BFA579B78DA05A17D5CCDBC2EF464970414779448545EF2410EDBAB5D93FB8E85C6C15C4D5C4182E13A07C8B1CB016A41298E6D6512DB94606F8C843A1F611824BCBBB0461B161B0AE0D6D5B9B80720E10103FB5F2DAA3BC7A16CA73C36234F72C8A5F7441D86DAC1AC3436743C8CF817570C7640 -MD = 863529BA56DB90B9409F38587E7038918DAA7B1D419335821A004FD99BEB8A2C9825D1663E7163E4966B9F704931491333E234DBFAC4D067D2ABEE01D3D9796E - -Len = 1243 -Msg = 162F77C5AEB35AEF23D128AD0AC9685C204176A0893FD8BB45274B35C2D7C9CA4ED1773632C9B2720B751E73ADF5FCB331B9DC4517805457D1C22E59AB1FA4A26FFC5F4A22BA0B1B1D12A047FA81CEFBFEB9EF20300ADF43DFAA4CDC468F17E89179CDB442AB24A61BB693E6EAE09073FD410E7D0DC3553CD8B3EE4212EE3C9F90627A35217EE3A8B0505D688B574CD65B7198101ECC065E3991A520 -MD = AAD2970603AF1691D1B0CDD0ABBCB700E3DB8E75A93CC24F8339BED324D9F12739E1926A52F187900F027A90DBFB2D6D439D35B616CEB8F27BB138CC4E8CC587 - -Len = 1244 -Msg = 099E4A3C983332023A43028E13F12E85DEEE45A88E8BBB4916729029F86BE3291475178DF24726684F3BCDD166E8214B9342FF80305707F72BDB86005116B9741A8D4F2AA953BAA0294A1759654D24C32C311D0D81F077B9086BBEE226A93E9B906553E32CED52BB92B427840421A5B711CEC2A2D07C1CFEDADE4DD8CE5509039816EB54B5210A45B088E4975E99544B22E2A59F43E767F33B5B05F0 -MD = 2F5E6A0EC0D402F81C2BDA411481B777C287E7A311FE9EB8BF59871161A1DAAD512DDEA363E8BB9705375A9887BE966AA2A34208290534505D272B8BB923AE67 - -Len = 1245 -Msg = 7B9B005E94027DC151F29B0836D4F2E3716E11EC9E1B0875DA9581F3BFF5F412E22AE3D790281F547550BFA6EA2188A976CBCA567C5A5327DE7BDB4229D48C253B0650C3B518E5ABEFA5E1F7E079D38BF18F1A13500105F4D96C4A29002203D18047568FEA183ADBA3C1D06576AB73FE88CE704495204B7B31D40A0C6D09AA6CF65310DCA730A5488DDB0D5EBEB7583D75A75480C0B06C0EB1C48CB0 -MD = 147FE09B0064E6C1FED52DC227577EA59F4E2215F80E39DB49BF1B45FA09965E5334CE2FB206D5A1932BAD5D1F81B2110235826F335923DB8F8536A8DA45EE35 - -Len = 1246 -Msg = 50FCF726597FCF26CDE79CD42D68C338E7E26299D0AE41EB2B87F417409F65C0FAEBDC4C95D52AD3777E774E8BF982C7DB1B3CC1B43BB1298463BFFD061A5DE2162DB8610C747D41E71BC4A49414205B56B1D86FBB81E74039DDA4FBD84316E2BBF7C9F2599D340A2E86CEE58BFEE5D34A684F1858822BEE5F73193DF8C46303D949FA8E962789699C15709C74D702FC96C5A3B82982370788A74BF4 -MD = C12AC1548618EF770A8FA64499A7251ED4B4E735B607976999D0628FCF3C97E8C6468D8BA397E016ADFF3AB93FBFE8604D1A1B74B23793832959703B7B8CEF86 - -Len = 1247 -Msg = 6BBBF4930A96E1A18417FE5A539A36AA9A3F70E055E359091E5ACBCBDACED975DF2BD07B770899C1888EA4623E70CBC0D9CB398EA1FD9BC950F047EDFD478324DB645F7A90F81EA98E38E93A1326558EFA8813FDE52DD073998046A3AA2AE3CC39EECA6012DA5AA8CFF1A4F3E59068EC163C75EB56EEE8838E0E2E03FCA370E54F3ACA668DC5F77677645B7915A52C788EBCC9B731F91CD9A0990834 -MD = A2D69B42ED914FFA6EEE94091EC2E3DF04B1C970382F74A7491E532811B133C7C64A2191C0259F5D0383B545B0861278FA99619E90246DD3CA916C384D5F3785 - -Len = 1248 -Msg = 2BE9BF526C9D5A75D565DD11EF63B979D068659C7F026C08BEA4AF161D85A462D80E45040E91F4165C074C43AC661380311A8CBED59CC8E4C4518E80CD2C78AB1CABF66BFF83EAB3A80148550307310950D034A6286C93A1ECE8929E6385C5E3BB6EA8A7C0FB6D6332E320E71CC4EB462A2A62E2BFE08F0CCAD93E61BEDB5DD0B786A728AB666F07E0576D189C92BF9FB20DCA49AC2D3956D47385E2 -MD = E6ED6F060906D1A772F47E83907507F88A151DE401ED79ACB56BE57C2596792DC0BC5A9DC1045E37C6A31DA1C36200214E4F5698AA2754EEB2CAECFC03BEC39D - -Len = 1249 -Msg = E5C9D107E19D9BDB989AF870BE40F1B6FA06DB3DD70E741D2F03198DE02E58E2A37203A7E766A8B918836039A2503062AA3D4778D1EA931BDC6E76554FC965584E0497AE75627686E10E50DF6302C2458E087AD4E8F0ADF22538ABBAA431703349BCF5C026C30BAD0F42D93C64D2918167E161A3C8A1848ACE16F56CF5DD5B8E0796ED50805346ED9AB04038E91676C92BCCE7FA74FE258B6D01350C00 -MD = D283A986B1105F699480AE06DF835AB6331349732510C718366A438D742F86BB9BD9F963448C83CF9BDBA6E0B63466AEC3BCFBE10974B148789ED10FA9A757FE - -Len = 1250 -Msg = D43686E59F554A3045CE43C0457D8EA84E70AF4F0C8133905C27C85648E6EDCCB1ADDB46AB7E5AF68B2EFD6C95BCBF9281DAECC1191A416CAB872001F347B66C5658F0567EC86D2CAC8EC531F32EBEB8D8CCAB863A30B574F575F227452BB4129C84C6050F693F0EAD880B552CEDB4673AF621AC9678AE17BFE2AA2C940CC54227662130E4ED37020409D308CCF72270F74DA075451339BFF8B27D60C0 -MD = 5398E58148A93B6651F70295F4346BF673692F790D5331912C2C51E5317B0EA03578C1D12CF9063F6D26446066FFC30D3EBC1F2DC444C27E9F48626EC07E4E72 - -Len = 1251 -Msg = 309D9918CD4DE7ABA6E69619B8C0FAC749D4B96B71A58739AD3E3379DB4E6323ED7A3AB5FB6C8BDE28A8D362A4DF86CF9C418688B06394211A87288F2D3BF7BD60013C0E1AA153B5B94A6E2AF9C3964A561336DD115C74AB25B2A63E4B17B521709A207F41EBA5E412A65FC8CBF1C49D1C927CD92482BF6C2D22BDDE6D8C21DF69A9222BFB4B5BC57E891BE4DFAA41D8B725F7590F5D6A07CD0C0E5220 -MD = E7327B13B93D2DF5879862D402EE7D559486349CE120DF9CA39E4B879C420514C03460BE527FFB03E361E0556A7AE61FC5BA2F0BF3366BD9C52267439E0AC07C - -Len = 1252 -Msg = 556FB9FCEAF608496C7681F31E303E911CF23E3D436EBF7997FE695A567B190409ADDCABFAC6C044E9B3BEBCA670CC42809B930DEC67BDBBF264D13F15250196AD387E0E51A754D3377284B77BAFD740529503BECAFB2399AADA3E7394EE46A997CE3AFB26CC0E8A8D9D616E61B786109A14D1E9414AEAFC8F806553B86194680F4D17F97FF55E35D5894EBE177402BFE5BBD6185C5E05FB4EFED46C90 -MD = F01DDC3178D8FFE3103D573E8337E51653177D6A98204DEB614D5646490801057FF55CDF975D3F3AEA292AFB4349471F780774C2531A5EBA1A73B6685BB665C2 - -Len = 1253 -Msg = E1BB4075E498A327DF0160C8101EF6983BC938D67C47AC3F642A00655914C4A99D7CD0D0D70C81DBA014EC7C8A7350CCF30ECAA24F481E7064C8E9BC8CCF02AA5B93AFEC8DE3966662426C6AA20051CEAE8BC3D04B7801591FBBC6D41C1185C510BD153D51E9CF64F0458BD84E7344C4C5AAD4B2C05C8B9D9416EAEFBC91EA7686B5B5FCBBA9C913F4A06CE26D4F041686A6C800263BC4EE612607E6F8 -MD = 67271D109FA582A5A0D01B32A949248439822F70A9434BF830645482B342E3B57254EB414278639C9694D32C775A962083C476437A005CFCF81DB2DE14021DC2 - -Len = 1254 -Msg = 26E8F3698FD7145A13658E12E46B76144A404387E1FC39AF205532F3A04DCBB5C4C111B6B538B45B66B36E2FC683D2288EF30E5ECC3B557D4849E08008AEC60DCC565AF19C9418C5DBDD68D1727E8D08ACCDB5382F64DC0532B866A6F7CE4E2396FB4E2FC4720B0596DF649F7F9CCD88E95F4B75890945730C60F4FB5D5D6ACB54B463B7A817F241C1B3D09CAD036093588B69A07DE5928FFDBF3768F4 -MD = 2022B8491AE0CB6D9922DDD0E2D371981BEE1A2E7A330C8DFF5E54A81BBC6BE53B4F144E21B57AED3AFBD1AE75B1AB516BC52CEED95857814D11E32C5D9FCA63 - -Len = 1255 -Msg = 8161F4946F076CBAD3E13E8ED4E287CE35F00DAC4E7870E3FBD1F3EEF3C380255FF4A858400B8D035C6BFC6C25D17AD0A5A8D625E1F8F6116A9C5D40CCE992806FD508DFEC50C4841E4D403B788A93BE86F8E3687A939FCC16CB6B826D4025FF572545945EABE4B144D10A669C4B47F368F11093E748C559142E2BA4B007321DCBE166EFFB5C36306FEDD98D98ED5A6F273D56724C8B611B802314EE94 -MD = 56B36286913F1BBE853026060AE0735DC69FD650916FAF21FB6773735F46C9649AAA60D20414888F1249FB9EF3631DC01A5314C4160552BA3DD0ABF8602E6313 - -Len = 1256 -Msg = CA76D3A12595A817682617006848675547D3E8F50C2210F9AF906C0E7CE50B4460186FE70457A9E879E79FD4D1A688C70A347361C847BA0DD6AA52936EAF8E58A1BE2F5C1C704E20146D366AEB3853BED9DE9BEFE9569AC8AAEA37A9FB7139A1A1A7D5C748605A8DEFB297869EBEDD71D615A5DA23496D11E11ABBB126B206FA0A7797EE7DE117986012D0362DCEF775C2FE145ADA6BDA1CCB326BF644 -MD = 9ED4EEE87F56AE2741E8E4D65623E4D1FA3AA111F64A85F66E99093BAED990FE1D788D6A4BE1A72A6615281EB45E1B6FB60AFEFDD93987F794084BDA962FAC7F - -Len = 1257 -Msg = F0119C8BC95F23CCBAB4DEF542665D9BFE015AA4619ADE158F1D21FAC3C4F7E3D68E5EBD303F920B017DA561F6AA751235D55FFAF241CA8759E376B0AE60F04AC31A591E3DB1F58BF4850329BE199EE1D6A750792CC3B7839B66C06753ACE50786223E0DD16EAFF479B89BE123C1098D8E6D30607B1FB9792F6D86608FA26A1D9214BD619D614FF4EC326EDFC6BAF44A565061856A6A796C5CCFB021F980 -MD = 03534173BC8BA9F5D425D146C4D98FBF5A026B82451EE2F110AF6C6FFF14632165E9CA3C968626FD514C9289970A1478DFAAE4F70626924F57C37FA1D749ADF5 - -Len = 1258 -Msg = 21A57777A8B0B5501280BC7717E54E6B0F8601B8362BD3ACD7C25798FE78A76515B10651F736CDEB08D9AC70C05D3E12BBEC98799C7EA021699D852B4C1EAD48B301BC6C269157422EFFF2B7749CF0D19E2D47F757E6A56BEC71DF86482EAD78E342944114D3D7BE2D381B01066FAE0FB328AF0530CF29A1C2479922BC5E82B7D1108570262E55555391B85A347CB186390D9476247080758013E0ACD080 -MD = 48D47F3F671B1261057B2446B6D332FC7171BC1297D62C07C12DDB2C1BB7D8D8CE30D4C1AA64E2A6BF64302CA0F3750E88C885D05A693DD1A7AC757DE0487312 - -Len = 1259 -Msg = 0E7BE48BCB01238A181A4CE2D5F23BE4337E96DDB7CB9504250209886AA050BE6007E594E14E58B64ADE5B9FB8F90C7CCC9B5939B1CAF74174BBE6A554BD40148AE7CA525C4DDA1CF0CFC11812DFF12BE121E388794AE8AFD75615475E9D2C2267F0E332F298D17DB1D597A97DBEDFDC34594E00DC107839A3AF455C1CCA44597A53A314ACCBDEFCA82D123EE53D0B6663BF3395311593B0265F87131020 -MD = AA25F6678C15FF2199711916BA971F5051D61414CB5CF8030A0D7396DF4E255BF4348BDBB75348B7BCEA4127C57282C379A3120E265462D6E3FD695E228A9FCE - -Len = 1260 -Msg = 6C38EFE88285521063F33FE108162D56EB5109EC0DA8AED88EF76AD7B88BF1361D135ECFE67CA1069FDFE1E0DD7A175C0DBDCBC3B3E55388AF3A866AB8ACC756927CAA142E2A4AD6805A616D1100B51E9B1B3AD04708BBFCFE27E4F8BBFAA823A57D127B6FF5359DA704F61F96BB882E6FE33C648D5855C725B092C4E4E0DAABCF6BABB56BE3450C73C3F07A2971E16E1954B6E1D17E92DC5795743FCEA0 -MD = 672F85190B4C23D2E028669030B54738AD98D355294B5F086B7C0CB88CDF7085ADADAFDCF0CF0150F420C2F42A5B94001E79C4A3D0AAFB991E3A8A47EA6ECB55 - -Len = 1261 -Msg = B8BC88E9B1A8DEBA56DD1E9B418D379AA11252E609ED52AB42A67458D87E3F2D60AF36595D8E33E317701CAE5CD58557C20617124068EC55A7096FE49480E625A51E987D73729FC4C531B7346ED8391AA3F0D6F8827ECECBD74C7BECF9373E692FFF01947CC11C92CB619244E0EF3562A96A17030414F44FCC35B2756A667C003C88CCD1AB31992FC659552DA1BCE4F1807B3745C349D3C96B38CA1C93C8 -MD = 03CF6599B6AB4B62FACB47CF5CCA18067388948F384442589CE5D1E2E20AB86D86A5345708D8A74BAFBEF5E7A070741F883C5D228AAF7DCD5069E218BAAA2231 - -Len = 1262 -Msg = 3FD3693A5376B0943D4D99601D92B3C55CA7B3889E02431B7CBEBDB6D7D886BFE7B057819E14764FE39B828D233FE9FF6B7CA010965F8F8777A80393A0B86E61379C26DA68A304D6A47A5DE2C029561CDB4CDA5CB471A84BB7358D8EBCD50521C6693B138348388258A032DB48D067FC0BAAD8266D6A880ED1B8EC9C559C26E97C6C2037D5D51F753604039461E26D4683382BB2EFA5A13E734E2CE90B90 -MD = 80C6C230A51DC16DB1206973D4001583BFE98028F8A08804A5B4925F735834FF683A88607F79B76314DF9B944A908847AF528F8FB30C2215B46208B66BE83A1B - -Len = 1263 -Msg = ADAA5A1187FD564FE9FBEAF43E48D41438B609CF80694F3E0872AFC1F172FD18E4D1FFD96B674B4A765A6D1A63827E0ABB708EC776B9458F5EE904501B096F625B7A47E7D6CDE2E19009C5C81DA80194BE8EC613F0E038F8E0D39A92851774729A25F00068660BD25CEF0E7F734056D5972AB36757FE45F55F2768DFA29038127269B46AC68079A26E0CB8C52815E22BB61E32E48A78FDA6A006557D580C -MD = 48B0ADBE8B7A4F97786B331E8F50BC68C12744260869727B0BE31280C29ED7D8F9CDA274D59D73C31E96964053A361C6334886004460C5A73481A4ED50C85EF6 - -Len = 1264 -Msg = F76B85DC67421025D64E93096D1D712B7BAF7FB001716F02D33B2160C2C882C310EF13A576B1C2D30EF8F78EF8D2F465007109AAD93F74CB9E7D7BEF7C9590E8AF3B267C89C15DB238138C45833C98CC4A471A7802723EF4C744A853CF80A0C2568DD4ED58A2C9644806F42104CEE53628E5BDF7B63B0B338E931E31B87C24B146C6D040605567CEEF5960DF9E022CB469D4C787F4CBA3C544A1AC91F95F -MD = 23139BDD84E9F43A6CC615F0F036199328D39807BEC9E786D4251B83B30800F9DBE8EDC0B910FCD9D9F204C2DDD4D3B92BC26A0CFAABE764BFB90A1444733CD0 - -Len = 1265 -Msg = 91440F1C8F7CD08B2FA70D334BA56F12FA0AACA189346291DA0B69F58BF65869DB2CC98FF82D56B4F9EB9106D4CF20AAB00DAC3669DA29944DA8D9D23B797D8D2ACB22E5D0127473E8DDE2EAFF6BE3DAA7FF7FC7D9F8DEEFE2634D8F3071D196AEB24DC1D9CDDF4D865D794BF120CE78B20F06124B656BB7CC5172E87400C50E6C3249E8372240ABF5A8814B66C9C3FFEEF2B71BE2FD0183BBE6DABC95AB00 -MD = 780807F32C139195EB332C2FCC42B074E390909517717A33A0F4BF7FE52EAADB0312E8DA22925E2D823CB13EF65927B9D4A3BB425A769F555E7AE6D1ACB0C083 - -Len = 1266 -Msg = 8F66375F8723070CABEEDCAC50B0A986B133E4685F68FA60E36A61EA0042747029DB1E7672EFD41833674EA9D29E30BCAEBF74E23D7C715B9963F78489692C3EFBA4116CF30193E74926B1FF7A2C6465928EAB794496D46101F45D26BF1186FC66CE159AC50A3E2E379A7981DC6419F29F7E63FAC2751E696C97403BE37C6B01B34557DFEE5B68FFAF22071F0466576016334CFEB6CA53FC40BB1C5DAC9CC0 -MD = EE04AC0D0D412B059C2EF489016FA7C3A4A51EB0321C212B44E3BCCA93FB2766623BA1D4AEABF3D8CABE78A7FDF8295CF4F2C8E67B8CAA18798A53998A23F779 - -Len = 1267 -Msg = 0D030E023E6C3B59E25BAF6023F1CF3657C566FA66C0F8BCFCD04F3163AFF6C2DBA0661132FA477F3D32C514F53F8E89B316DE84AA55A4AB38C33084354944EA9AFFCB8727AED5675AFC52EE6201961C15B28B0CD38948AEEE51F6E17C172946BC1B51ADD5316C30703CDFDD7FF87A7612CD576E7FD4956C0283AD12E13A4FB548509526A13B6A867353AE959D4E70B31959097BA28E25FD04358EBC568640 -MD = 454116D9D4D752B20F80CF3EF805BD36475517327EE4E595018EF06B273A8165E7D024FF1D5ED6A20351E8DBCE590D527CE44D0AE87C00D18D690EF80BF61700 - -Len = 1268 -Msg = 99883206EEFD96B8ABCCEFD8872185AF185079F568314B0AAF55D2A5291A5B1AB29B9D25839A369F0260D55E29E2B60AE448393BFCBF18F8D091A8C1A0739F25EB2748C7A45BE8F88C9414745CF3C236A40BB1AEE8A85B53BD088684BF4E7DD1A9370C1BDEA575886295675A01D03FC06A7E01100F03436E5A3FC224DFDC6D9E8A00345AE14FCFBAEAF428A11AE4B4BE9B839B50CA80843435ADBB964A4F70 -MD = D6C1B7CB12D0B54257F1A858CA6DC7B122E77E355638538B65557600913360B714E648A51493271D5CD79ACFB76B9F1E131094FFA7AA2A395D11BDDFE5BD6A84 - -Len = 1269 -Msg = A6B3EEC583A09261D745849CD236679E2F9795123478BF76245F5E61F00EF6FB32497499B967CD550126BE3D88B4BBDB55EDF14AB745654B70EEEFA79A26FF00B6BD86DF619D53F72DE374965F277BFD87CFFC9124CDBE422A2AEE0A784D705566B78239A66D321F4FCA6DC11DC553D26C7F57EE05A86166D4E073BFE54DC6525E83F739C70DD4CF4CD07000CB595DDFA749D9D1D5D3CFC0A4CA2F5ECC7528 -MD = F3CB9B197654120550C931EA1121101A10F0AB37480C5984F6C2C6670D753FEAD89A6169C570EF8CD1420E7003F7978ACD39657B934A3DCB2C0B22DE5B91084C - -Len = 1270 -Msg = 817F2D641D62B9A54D78DA451D7743A234B424D1AA73D173306C0F66D78970A8BC13C87A9BB24071B0BD9F5B5512A7146C4EEE5BACE25AE3B9F25038592EEDC07B8CCF0FA262EC2B091C0CB15557E5A2C6F9AFB264662417E570C0CF37A770B963021A60E7D5CA2C5BBD8EA1E01C95408CFA335616F253A489F89DB1B49CCF1AC66AD4D7D4CCFEC6719F8C0B1CFDB40CAF5DB8BE02E32B516EE89682BB6ABC -MD = 19D8737186B5CBA25DD874216B058757EB59E956F931C506801ABBDFCAA3D760BA85AB76DD7ABF321D151826E34D48D192139921D1A51BE00ED8B7CA10498F18 - -Len = 1271 -Msg = 825BBFF42A57069513C6DE0DBD31CFB7C114E42F8011892F9C53E41DED542F88051A3219007B85C08DF9F83E13B4B836B83A0E39AB9DED55B4026B85A0789E166B27B94D64938F9997BABAF6DB2C0DB2C680FE7D094708F8A6309F4AF8CA4F835A09289A6BA63697D87C730BCC3794FA3CD5DE836E64E5C4DBFB024B9C230C6E3645559F38FB97026DFA542E04A5DD50876FD844E95AF2E3CD2C9C3F8551A4 -MD = 86A17DA402356758BE584407A9EDC5C78AC16FF2927EA5C5101A2F92F692075BF67306C898032DC1E27C552F1D25C4572621884F64EBD29D66327B09C0D9DF22 - -Len = 1272 -Msg = 25B8C9C032EA6BCD733FFC8718FBB2A503A4EA8F71DEA1176189F694304F0FF68E862A8197B839957549EF243A5279FC2646BD4C009B6D1EDEBF24738197ABB4C992F6B1DC9BA891F570879ACCD5A6B18691A93C7D0A8D38F95B639C1DAEB48C4C2F15CCF5B9D508F8333C32DE78781B41850F261B855C4BEBCC125A380C54D501C5D3BD07E6B52102116088E53D76583B0161E2A58D0778F091206AABD5A1 -MD = EC69397000AED63CB7E86B4FB0BFD3DCEE8A6F6A1CFE01A324DA13484B73599FCD37AD392662D4C41D90BACA66BE4D6E3424EFD35D7FF4CB07CBDFBEBDDB7B50 - -Len = 1273 -Msg = 53171F51D758037D43E75BC46D0160792E060C1F61A78922CC13BE9CA84FC9227404FFE6A3B054AFE5AF13D62DE8E6E5CF6A428B794CD6EEA56DE923DF662D54C8ECB3ABCC0E09A31A66B7ED02DC03D9B55AE44872D51A2A4F95756B9B611B87DB1757389F718BF0C413419C46BB9FBA8E7266FE2C438F8A4D8377F220B71C4C0CF3E7DBA8471CCD615BE0F49E97448BD2748FFCB47C46A508809E72F8CECF00 -MD = 0A441ABD06558E6258EB9B10612F58A407CCBCF0AE0206569D0F3B85D7A977EF1C8B4D12743FAFC91C57D44EADF41A6A07F75E748D5285DD570CAFACA43C8E37 - -Len = 1274 -Msg = 8B766DA40380903F6A333AA1DD549144FCA246E2136252A5831859711F08BD02B449A1F85ADE21941C81CF5C70AE27DF71F797C3F3991BF7CBF64D5FE5E228E03A9BA275B6BA6B55C847D3E3EA01C011C2D623A712615D5804DAA36527174814C711623346A7B2E50A50C1D906AD2CD1345CC23E2A08161F027DEF1AF127A71A43D19C19034D99F3BFDB4579486E61134D84BAA14000A32E74B1CEA54969F480 -MD = 122F5C8B3115BFDACE06E6624AAEA5D6BFF7E089428A777E605D73AA5B06DE9D92531DD04423174DD64229A86576317F472D448290B36A75870BA018EFFF44CE - -Len = 1275 -Msg = DEA895DDD527F9F680EB69D0881BC6308044D98E2A407C6ADC64DA9D8DE14494844063DF64F94EA19D94C7E5BBC528E3078E1900A92D2F8E44D15AB097C9974B10665D3235C4BB08D9E6C6DC5DCB281EE116A29B345DB2DAC736160E772D609E2F091B166F8A09078BE95656A4B6F17DA17DEA7A7D51CF41F318690E566F0501106FF3CE7EE0A0D2327202B23CE11D91F6BB5C873A41D3BE4AB4F6DD30D6D660 -MD = 0395161437E51166B621BB10698A1E08A45C18A50488F367AC05FF023DB77ADBCCD8F07B4E1E44293639B95FD25C3F848EDC25B82BFF6A71139DED934159AE32 - -Len = 1276 -Msg = C927E69503AE94F153360DC508B0E77682465E5B8365953A2C9626E2DCE4D875FAF1E3F3ADD70E34AA7EA6EA175D79A9E700D652BE8B7759707306D10FC33D1528D70D389E6ED9B8E0F8D478ACFE5BE223D4B791FED6AE65F363EDF4186FB088F69CDF394D74BF53AC465A3541432C41C7666B653858A7E6D06B0985C0F7B1176D1129DD1146357F847289A439E543E480F932B8602B3AFC754F540361A61370 -MD = 4CDDC449465FD4DCF6A7A236070D6DB2B6D2A93F738388B93BE932C9BBA91A393520E7550693E845413A4491571C6F649C2D0081580AF9418D918E93A346DEDE - -Len = 1277 -Msg = 32419664499B391A213850C12E86F4FBA5B2BF3DADB0DC65D4EE9C9AD2710FC1419B4D4E9B85205E51BFD3CC0F6EA075C14DFCD1BD6800ED644FFB9EF737F1FAF9FB77E5621A5E15AF7F93D04E6D2DDABD71A032BE5BAFD0D0976D0DDB54DCBE79F192580BABEBF54F2EB6F421CE60BF939FCB8F237289A107B329C5F0426DE9C32303DAF98F3AF5F87C5A44EDD1083C6A2B8C045E8FD65B318304823C313400 -MD = 85FDEFB547D7692AF689C8A2BB69084C7367D741E596D73135B61CA9BE6224700618157ACD14B3C1E9B22697E9AFB80D3B07D3B98FEB59627120EE2C1340320D - -Len = 1278 -Msg = 470E65B3F6A5460C9704053896F3DC638C1D735F393855B28A4F5A76FC5A419563845B553EEB30E9057D777FD2751BD6D7863E7D881DA2C2698961396ABE2518A64CB8BAA1CAF73B8B5AFD9D42CF071973A9904511C81164D509F3CB7A4EDD89C7F79A6761E9CF2A600FED47EB4A225310544E0CA41B1D8C9649905324EE0BEE1A5AFB3F1B7D9A2CFCDC8B52CE611B10B088EFC0991DA73A7845964BC83EB794 -MD = 8ACD5E9143CE460ACF05F3EC2063F350562EA03993FE9A0B33299695914E9B4805DADDD7C3C066578AC4F37FAC004807D518DE0E777E5B764587B89A06D72328 - -Len = 1279 -Msg = A4E9FA020BA2E03DB8678FB9F502FCE8E58EEC36CBAD94756E5566DEA5681EB48381C5DF545029B435F7208C69ECC279E993F56F808D59961C9822471A04F501EFABE78236B7D1D759F6D227F65CBBABA66C5B81FB88B6DF218BBA89024E4558719F005BCACC96FDCC4DBC2D4FA417DF849D96E3D0F4778FE2E20864DC058563527ACBC197BF04B692CE00CA4339A8B21745D3B54B88C22727287C63C68EAEFE -MD = 8AC72A2C0DDCE71FCEF9668B16424A6F20B5E02071D6CD44D96F5F0A5FC31CFE25C8E6FFF3EAC797FD6DC1714B95F0CE269A7EB9F4CC499A6194011DB510C24A - -Len = 1280 -Msg = 21CFDC2A7CCB7F331B3D2EEFFF37E48AD9FA9C788C3F3C200E0173D99963E1CBCA93623B264E920394AE48BB4C3A5BB96FFBC8F0E53F30E22956ADABC2765F57FB761E147ECBF8567533DB6E50C8A1F894310A94EDF806DD8CA6A0E141C0FA7C9FAE6C6AE65F18C93A8529E6E5B553BF55F25BE2E80A9882BD37F145FECBEB3D447A3C4E46C21524CC55CDD62F521AB92A8BA72B897996C49BB273198B7B1C9E -MD = 2EA3EA00E6E9305CED0FC160E004265221306A2BE9613474126825AA3C3170AE07E5EA42F6B74F0B2C1BD2A6CD4D26EB1E04C67C9A4AFEFC1DD0CB57C2A9F4C7 - -Len = 1281 -Msg = EFDFD54747AFC74789E3585D271BBFBFD2B45AB16DE6F960B8176F3E18358F106B148F585144020D6E055A35572EB7AEA1D4E8662340FD641758DF09DC5D7BD6058A2679076CF8AFD9440F4EEF8AB76AB23E2A9801EBD66190B742B0EDA0DB513E8B34133CAAD28D9A74E1B3F0A44622B5FECC6D88ADCB47BB590C8F2078270576FA8DEFAA7473AB7BE4DDFF9142DDA4701E2FBF30B0072BBD0E42DC761A5A1900 -MD = 612E1719ECC0AEBB922B0CE2A057681BE154DE30D75A42119A4F85C1B3F93373B5F023DA63042C4A3A09781F19F776A2D29867782FFE763F6B85C4A5252593E4 - -Len = 1282 -Msg = 835C2A951B9770857A5BC36CA40428294E8A7F3EE5953CF7D612349B7BF4C2CA54FDC48D22206E0564C9E42C5FEFB1D799BFCA4A90ADB6CDE24C4B5BF58230F85086EA86C5C7A3A58D2DF7BD7A50EE51812AB957F075D60316381C99D24121F24E3089190F5A64995A898D25DCAF6ED422AD5A11046C156FD2A9B3A901FFE9E86B3A434B9EF8E132D1CFAAA7DC0EB6BF36974FB02655D9FF7D2E6806FAD8F56240 -MD = 5FFE3298D4BA294D54E1E62AA2E1F56D198624C78AD7172D58F6BAFFC2323471DF1F77268C6421EFCC662BC0E9903B50D45621BF0E15A105AE6A29DC7F5A0E1F - -Len = 1283 -Msg = 487BF06ACA4F8CCB9FBE64BED71AA95E8254DCCBCA59A391977CA1CB657D7772C8997A9513D46C6560A3B3208DFDEEF161F1791BBE78762669D6035654872DE662FB0E35507C3C47F1CD7C4FC48F429B610223932065724BC8127C938CFC687175E8753203C8DFAC4A45ACA459E6CFC1C42F9E686418F9803438875EE94A99AE0C73E65A4CDB070417A437734BC89A46B44A27F305CBB693299D5A80C8BD426900 -MD = 63232926BAD1939F3CE0FB9355642BAAD08271C630C194B75903245B80B1B8CF52A70223E1F0E05B16EE8105ABEC640401519CA6D4248CCA0946E01A9C4AF0EC - -Len = 1284 -Msg = FDD4EA48CA09D3A4876ADAC2A22D6E016C6CA18A35ADE17DD52466242249EB8937B13129E6CC5CB7AF48307A892EF40B190BEC41523CF0E6EDC72215B7B33E6FBDAF475E0E2FA0E863E83727FD0256A0F943646286BECA53D8A1A0117E13D2D46376340873A608ACA2B3532A516B9CDFD23A78AF03BD47EBDBEE97AC9A536AFF8B494E1FC662E5E1A4DD64C284C16B510DCA8AEA7D74E5CBAC8BB61DB5A0DAEA10 -MD = 9F7613400EBE8458E9F3F03D483E3816AA5958C42981762E8B434209328FAE2A5F33FCE7CB84DB1CCE3F37004A771E3E48B902A5660131517092720607C30AF1 - -Len = 1285 -Msg = 97819B95462CDC009A37EF3C6A91169E111753FECD21364FFBF95987EA73825771740DF970A5E0C68015E819CB4670C752EADE35A1876638BAE3B7FA7A5441638F52B092CBB026A2C16B60FAEC950D41A35F2CA4EF4D6154FDC4EA58CC617E783EBEBCD55E72E05DED2D34D68EC80CD3A1AEBBD053331A8C9DA25028C0DCCC2B1FAC93B4740BA94B3B8F066EA9C666DF5F083BF864CE9E0E54CABF10A11D1EF050 -MD = 45EEDBD88BAC103D6F96819DD59AF2AA656D3D7301B2263B19D4256D00802138BD4B0352AF0B0787A5E54F630F859582362EECEA0EED38BC8035468BFB3355BC - -Len = 1286 -Msg = 597550EC49C64E81F38314DE7A825B56D0ED8B801394B4F6701100C3AB8BE122D124F7DACA5187DA9A1BB8AB905031CEDA2AC1F0B4644CE9CA283F65236D43E8709951B18C17D27CA45BA90B8EE84CEFE8E73EB209446D75DB554882A6DC0AC284B7A5093975F5B10409749BED474E92E19C7B479AB17B254BD9B9D3A35F0CC912CCE433BE6092A89CBC14C1F8D5EB76F370683039000D757FF5E06BA4A8820D20 -MD = 209130E6D438F22DD38BC9135C4084FF2F24DB60B0EE6C0B274589EC7B932860A37C3FCE8DC5244BD6E18E2D94D4DB6B8CA8FCA29ABF8B41580A139BB7CD009D - -Len = 1287 -Msg = E79F049F5F8FCABD20CF328EB4FFA20D4AD500FDEC6DCB9692CD294E1DC54513E789D4D76D6DD2B17542E131826A6AB20ECF7BFCE476334F6540307C99FC76CB85AD49442B36B25F0FC81279BB2AB0B27846BCB7E9038092EBC3F6E0011746ED397D8CE77B9CA67AAC8F01DCEA90352FCD8893C276BF9DBB76C78B5E217063CD8930314A5B96D0641D82182E2EA67E7FDE3DEC6C13B75DC65659B15E56E75B768E -MD = 70AA575EC53F08A1D281ADD4790DF52630AA66D9C9657C308AD67ED156303358235B0DFFC5FAA668F1DF4F50A977C99EF9E75302DCA9D14C5D06273830D4B693 - -Len = 1288 -Msg = 4E452BA42127DCC956EF4F8F35DD68CB225FB73B5BC7E1EC5A898BBA2931563E74FAFF3B67314F241EC49F4A7061E3BD0213AE826BAB380F1F14FAAB8B0EFDDD5FD1BB49373853A08F30553D5A55CCBBB8153DE4704F29CA2BDEEF0419468E05DD51557CCC80C0A96190BBCC4D77ECFF21C66BDF486459D427F986410F883A80A5BCC32C20F0478BB9A97A126FC5F95451E40F292A4614930D054C851ACD019CCF -MD = 6A7ADDB28F4F2C23CF0C264579FBA5F892E010689F837B84D006D91402FBFE9BA44B9126F8B5DE1EC6BBE194A3E3854235056A09901D18E8D6F1727DD430212A - -Len = 1289 -Msg = 8AD7F2067E4BDC72F3C66DEAF459D1D15323EF79004735603069E1546806AA3783BD572E76EC472D215794537815ECE3213DE792C359B9EBD678CD22772C73708D3E9F83C3F6EC5681F96100365383AC1FD38BAB1A777F48F267EB877604DD8C3E9A27A4E42392858268E8215175ED1C9FA7F5FCD2887BE6658D804FEB5DAAC79C6DF26B90737C2CF48F3FBD0D6D87BF51C0925658BFBB91284C9158AA327BD66880 -MD = B5EFD420E647F1F84F6D191C6BF2B641FE38C8C86480C7FAD51751AC760EB57785A5907F267584160B4AD90B928539874D997BF21F9AF2FCF36055500F7DB314 - -Len = 1290 -Msg = 3C48158E1B2C890D8BAE91F9610D7E7CC3ADCF77FD18FED0F1C121D11234674C700B5545DE6CE4713B7C3FB79E20F11E3A709EFD942D9271B6FE0E5CB600D5ABDF178D27E37E9474EBDBCCBB3DE7C0F499E4E8CDC8FBB9D845A1E6DD89A0C28CEEE5CC74D5F90A041D4BAD61018DC1866543FFF1C09694F5717D2A2B876D397F7542D2A35776FFFFBC2B39A53AB06DF9E7B7E8C9F339495C8F31C5227B4DA8549540 -MD = 26DC721CFDC32C6B023F860AA7755638A2ED02B181E4AD410AD45F7FA2AB73040F3DDEEFB6954721303CA974F1B49291AAA5DBADA43884F858BC194EFFB41CD6 - -Len = 1291 -Msg = 4812A05C8906BD360455A99F2F968B8674591A55F7213CA7C5ED298E3B199D278BFBE27D29C2372B94648DFAC050CA869F875CD7779958FF3815402050ECF110AD4FB2FCA4622E13CDEF51F80526D8E3E7149E7A8E8874E0ED8B612585DE2C14546A2AF86B8CD892EC9D0C222B66E4037D417880FE07F25C8AC5E4BC02F3CF2DA743ED72EF243791E7927E3EF0DCA6258DE98A700AE53450D57EB86554494FEEBF80 -MD = 350C01A72818FA5E6167854DD068B873729FF1535111CDE51C6335ECBE1D0AB8CC9167A79B582551C210E0EE26804E14F9437CB04EFEB98D88FE25A365EEAA2F - -Len = 1292 -Msg = 433DD44D7C672F2E15670086DB548C15B30B92219C8925685FFC5D97EB4EEAD9A76A613C382A399192CA8E6EBF31743E279C71BDB749190EC136268BC008856C03398AE0DA550E859F47169E88F950A597F0560336D7E5C58BFA20C0E0B57DE4B902C6ED1E99868E2A48FEA544DF47539B215E9E1DF268F0FCD4DE3215D1A8AC4C215D896B041FA24C0F8639AE2A6D67D1AD31BA0D1A1DBE783FECD3B49A1EB3C460 -MD = 6D8395DF1A78B16001F4CC9927514A1C8E781BE187FA4BEC8C4C90969C17AE6BBDF84031FAB239AEEC375ACF7D25CCEB7BB98001C2BA399DF71EE261AB304CF3 - -Len = 1293 -Msg = 3C2796DAE592507DC2AE56411DD6295B8517F0F009CEF9ED8C7D52024A4D6744916935ACACCE820A698E837B51C96D79501EE3662FE918F441CCAF82F00F6D0DAC0EC0F900E50A36BB93DEE19C319757D39B46866590F80D451681390199E030472968BC6616E657781EAE0F4B97EEC0995BC37BB7CC448A7FE441D05B70E86E5DA8C7854ABB45318C6DD83DD99A94CDA9F3B82B62F1962730E1CCE1F7386CF1B970 -MD = 880861446553B8708ABD5614B3FB664A1F0194E2731FAEEC6DF445F30A8D9AEE46C28C0DB7852165B053889A6CDCA62696E7FE541EA38C84D123A5E7DB1AD28C - -Len = 1294 -Msg = CAE6C210EEA071097DD53581E47239AF612213DB39225EC8C03D62D3F1BAE63D69B0826F9FDB540714A11D84E43786D4E1F984677E30280E4EA2878E424D86ECF3EAA986F08CC24145B333476877B0072660A3412CE92AF94A4150A98AD00D3008A8B78A00222530DD797E020EB259D25586B905FDBF7CFF103B972ACE04BE42B43CA538CB426515A7A6F86E27DB0D8D5D0E2F61B103D842D09928F4C56F59CBA0E8 -MD = AAB01F77C27DDD30FBA83DB6211C1C243228BB64F8FFFADB53154A1083FFEF28D35E24CD83991894C2B35297E976E26FFA5495E72C03F3F870F1B7E8E759E449 - -Len = 1295 -Msg = 2022A89E86B267A920CF6E6BA856A8542B9DF1CF736F0A0B3ACCC09BFBED6F04870017261A29DA12E61FFBDD68F7D55D034CEC90A1A31AAA69149D185356BEFD2D592E8126462142AC330D83075AC661B46A73BF5FDF0595B3E311BE13140C4BD041E1713689A7FAF7F210B06710917BC79A0A739E04B09BD76BDFA9412E39050137D39025DEA5A1264DE08780A53C4130AA89BC024CF1DE63239EEAA8104527EE4C -MD = CD4B3F4C6ABE99CCCF2950B3FFFCC3B182963129BAB307617E90C8C3AA51E0FB4722D0F272A53933DA8E7D94BC88E1941DB906889603DD0E20E95A1D55D2BFCA - -Len = 1296 -Msg = FA85671DF7DADF99A6FFEE97A3AB9991671F5629195049880497487867A6C446B60087FAC9A0F2FCC8E3B24E97E42345B93B5F7D3691829D3F8CCD4BB36411B85FC2328EB0C51CB3151F70860AD3246CE0623A8DC8B3C49F958F8690F8E3860E71EB2B1479A5CEA0B3F8BEFD87ACAF5362435EAECCB52F38617BC6C5C2C6E269EAD1FBD69E941D4AD2012DA2C5B21BCFBF98E4A77AB2AF1F3FDA3233F046D38F1DC8 -MD = 2C0EE8A165BF88C44C8601C6372E522DA9ECF42544DCDC098698F50DF8E70EB7440CAB2953BB490CD2A5E0887BEEAE3482192DA95E5098D3B318F16FC08D1E1E - -Len = 1297 -Msg = B11CF575F6678B0A418851761D3D2940DEC21E57314C0C8DCAF7CC51F3543C7EA3238F5BFB65C254F3D8F01C560CB9F5DFF6FD2D87FED5F2FB2C8A3DFFB2B7369709342F80BCCA077202151499F08FAAECEA4F6F07E85763FEEF5E062E4E6BA827AFFD278FBBA7F4FE90C748B582694E5A80D1561D5518343D0B1F88FDF6C61CD829D147D692AB9030F0712513259A5F73F37995B4CD923E815E95A9D2FE35E8293D00 -MD = 317C0399552D85486791C22B4DB3D0A60D709A6D9D577506673AFA984D433B0771CD37A9A8A45DD0F2326D90CB48B9FF372316B2147E5F3CC1D4095206880A82 - -Len = 1298 -Msg = 6AD2B1B7D7D8F12D7ED616E464F7DEC1E64CDEBD637FF3DF232AF9ED5C810065F4CD00B1B75657F1089E185F3DB5F8F3467F685100697ED7667A7FB87871BCF8B936E05F99073CFF15A36CAF3BEBD22A9AF18113970B5B0777F643A56DDB5ECA4AD3E14E994C6D4D0CE43B8489C46097514339F12C4327EB8232E1BD929BDF1B798E71651D841EADC34817F2F6917DC5AC9D54BFB4A45E252BCD4039D71702F9AEE140 -MD = EDF5AA1C95ADF35A0E5AFE622BD559A7A2E6D3EA6C17A3C483A641E5143BC4DB182A3D0BC2DD2F55D4078243D9488D7D4B0BCFE0CF4564371AC3BDBB62707E40 - -Len = 1299 -Msg = 5662FA185A69C135AE9BF1BC3031A8EF17E3FD3595D78C768DC7318C43F2BF158DB5615BD5D87EE05475233C836CDB687AA09D63951EE5F2AF339B145DEE7C1F07A36784B469836C7B19C61BE08D64D996155E7B6B40D3DCB28E68A6C8BC0F5C8EA240A6AEAF719A061DEABDF819CCBEC87B31159716B193522F68AF57F7CC376A57FC926AB35E942F54D1F3843349071DD24E1D59C860ABA71CFE11C1462C8A954DA0 -MD = 38848B50BE9F3556679F61456BE355F904E18028DA2091FE4920ED2AB820286EB9070263CF7A70748DE85C425C0D7962F3831542AFA2A9CC666927D1FDA0095C - -Len = 1300 -Msg = 7779B3E263816A8F9F86D7CEB0DE612784D0CFDF4C9A54E8D6F7959AF5297F46F0E7528B64D24A7647232F4A28998F57FCC61E9DD78A678EE8F0BC5E331E2640A98DCA85D4E2E498AF62508A7A2511EC20AAECFFA8D6F26659789FE36CD6D33568C0AD6086060985E3A8E992EABD83216AC1F5D267BCB805AEF0E359CB65E69730473FE00D5DC7758EEE979077DD67A2BE990B4E242C2790574B17FCC6440086A22A60 -MD = FEAF0C3C6EB30F9CD1EC4A30183C8A0FEE0F3F55A8C2B2E9A180A4798B010FB190B8552D8B8BE0A50BAB214A53C19EEE0F36FD9E1B5A355F77376B9B4113F58E - -Len = 1301 -Msg = 7FC8C0CC3D01FBE25FFF8C68B48A22805582D1697A4258874DD185CE20E3B1206AA69A83FED342ABF1ACC0BB480029D9C899A929E9A3E12072318CF2905FF97206A3F28409E309C2AF4529F212C9AA5030FE357E2D6C697FEC3763959DCCD61E295BE47CD76C4F1A9075E178C8D5ED01A3232422BD5AAF7DCEA80696367E5908EDEC837A7B25D600A9A8F9FE9507513CB8B1F283FF5FCF41A0AF18C7A121726C4EEEB8 -MD = 6AF2063B07902E7431EF58B2AB2F13FE2CD55FC86AB4460509BF1C98E8E8DCA8BA8E63EA74783A5F42D2267D4E1F74A92D1690990F741299A4340FCB08F31434 - -Len = 1302 -Msg = 5F9C4BF48853C04ACD6E4DF5D3058623089C466CE9D8DB0F56E8DF97E6EED8A77D848BF7B3D5B7E561BD745424829328420387B2951BCED984D59764443C3A8DE197BD5CF090958277B6B609C2AF771FAD8053DC2CADA33FA3E177592F3E975B3114D5C87AB3734D7E9CF5A4668AF60CB84202949115DEE795BC195E54AA3B0073172EDAFF954D46858BE26A174D92AD5938870FF1D5612049508F5FEBCA5998714F7C -MD = 0804D6A39EEAD3CC8114051A8C05CE684B6FB44C50359E2BB2D24AE585F40B64E98CC15CDE5822FCC2E1363E0D655951866551658F003DCFB461AFC06CE8AE85 - -Len = 1303 -Msg = DFF4935452139DBF9E54D1BBDF61EDF88B12270DDA0E8AD766053B91B9343ECFBD793093D5FBA674DB77C92C42740E76C95CB72DE88F817C174E43A28EE12567E79462F3960FDF27B0B2D03A008C7C19943C7435338BC701E14ABBF8A783E505637425AD6139922DECA4524263ABED9D384EFD62A1A82C4788263A19A931A98AD9698DF7706128663629D67497C60489356FCBA61662D55A5831B7F1A64B49D479CA26 -MD = 4F9AF32B706F354533155B861B6A1BB622C60479F2D31B6105313E4639E9E38E6FF701E4D2D8D549E9E0652E112EE699BE4A03CF8B5767045DA7FCC199783850 - -Len = 1304 -Msg = E90847AE6797FBC0B6B36D6E588C0A743D725788CA50B6D792352EA8294F5BA654A15366B8E1B288D84F5178240827975A763BC45C7B0430E8A559DF4488505E009C63DA994F1403F407958203CEBB6E37D89C94A5EACF6039A327F6C4DBBC7A2A307D976AA39E41AF6537243FC218DFA6AB4DD817B6A397DF5CA69107A9198799ED248641B63B42CB4C29BFDD7975AC96EDFC274AC562D0474C60347A078CE4C25E88 -MD = DDD4FF117231ECA0445EADA7C7F1D84686520DAA70E160C87DBBB3FB32BB9E2F4CC53DB5413D4E88DE18A0118570318BD6D0E5264D779339AC6F4F4A95546A53 - -Len = 1305 -Msg = 9471390C1E87C0B03050DEE02D4F9B4ECBBE43981BF41F7EED9B38E309999536E4C550CF4BB9CC80A585F546CC25726B7041BFDB5FCD1DF123236064A297C11862CA1B378BA81B52F179FAD165F1E3D9EB32C53D2BAA5C4EE1380B8E757E288EA55BA911A1F1EA72A2E7D1A3B92E284966D316F22D4D0065AAD3B1743D47533CE8B362E26286C70C61997B3E4560CE6FD84384DABE495216ABA7DE1013147FA81688C900 -MD = F4FE2E905A8DE644FA48CD4F4058FE2ED046FD4DDD4260C19F476D35E432F7D3E5E0D8E54329B5D86DAF35DF88A5871C0CE17ED32F18160419FBF38745EA139E - -Len = 1306 -Msg = 71ABD048E4D533B8C8DAA416C8ACBD4D70EA10EC8F0DFFDCD1244CACA21E8C1258ECCF53763DB6FDD1AD92A6968767E5A03BBADEC5CCE37762A2C6F7697F537BBD2651FE372A9900D957ED2F60BF62A8407F1AA5F18600C0575A3FC10CAB9B23ACB86ECF40E83D8E111FAE6B76F940FE8173071D8842981886E3FC86C4AD30654AA086C110562B50A2F7292409F91131A63E3617591A4AB8AD11512C0449A00E35FC2300 -MD = 69DBB1F07932F9034757B2874EA4BCFE07A59E58D8EAB17392EA3849C8877B27754AA113D7DDC33CFCDEADD8523555F83AD1A877CEFD84302CA56DA692597CBF - -Len = 1307 -Msg = 96B1EB63101ACB4E8D4B1F567AE85F344115D62A2BA9A3A75FF2B203446862B10296625C87ACF3D14BB1928B3FFF49E137B9458713C11950E0167586BCFF8FEAEC9E54B6DDAD31DEAA4B987A5BB5642CC224670B8F685D44A4E251A824295F6382A8C303FC85DCD5A55B6974F2DBAFB05A4A46C79A51407CDA912E5A09D4040ACD7DBDA7B0F1B57D733B26EDBC77B977420C3477D5E06B4A112FFE8E3C275C0D0C516D80 -MD = C8FC76E09AFB9F0550797066A7D55AD63E4671109B434A74E6117F896C9A43FA7D2CD69B47B4E8488BE1E6BC5505B25C84DCF573DAC855ED0E28E63A5E7823C9 - -Len = 1308 -Msg = 88DD2CB6A0A2FDA530FEBA6B06B37412BEBBB69BA3FA198052379BC6140395604ADF13345B3E313B04D2CDF8FB718E3BF36267C5E209EF98046C3812BFF94D1870B7BF302C004889452FD3C4A2CED2AEFC848878ABF70587200AC447F8E6C2C8BEA5C5CB72AB7BF4294208A7234C23DF5C963DC6F530BDCA1337A49B760508CFF20927FE64E68BF6A558464B1897AE65EB18C5091734BC8E1AFD63814F8990C58193FDA0 -MD = 216A1DEFE969FD9E953AAEB0D66FD14164BA2D425713F4B3D1C65B21013380436D6DF0E1F2E5ECB691E48E5C2AC60D9AFC614DF9BE519E1B0BE8A9EEA0FBC546 - -Len = 1309 -Msg = FA163114DB716206F3C7F7BE954FD93043A2D74484E53F510396F69CC74DF96D5A3A1BA46AE5D7B24529C655BDEC87274B94FC52A7857A6F3E888FBB20EE286EE717FECBACC5462DAE1FFFA610ABF9605F2D4494ABBE3B7F03A2CA857B9EDF686A2E9D28AC7B6F582E0E2AB5D32D986B7B39270B9D45EB9F34A443B3CC2E5A5EC2966DF1B6FED07FC9B1C357A84BF9D7F61F5B65C93B696234F953F8C074DD28DF4749C8 -MD = 238E5EF3389AE72A61AD33AE42BDFFAE4BC2D9D7126D1007DA9103E9C74FEB08916EDF9392B0191E331F85456C5D4D73B7CFFC64D1E64CE33093FD2EEB396650 - -Len = 1310 -Msg = 20C6506D220F6F7DC38280C9B74ED7EAF33462452729FE54F74C5A1D2F664A80C6D93BE893AD2F49A332D88E42D0367FA52A420FD2E78D039323AA19EEFD069C0FE3AEEB261FC7F6060B597BEF88DCF08F2441B74DF23DA1111117CBDF9D18F9EE0485EEB25E980944A0449F5C7CD7D3BE8E6A9CC44D435A4CE4512FB11FA594809C9CFD9B88E6020F5282D15AAF9968DB4A49DE99F6081E2953FB489D6A6D437F207D50 -MD = 3627533C3EEAC52B476112502B2D7F7F35664A697915035F031C55A072636BA573BC6F7B08414215B21FA9C7298FBEA71D21221E98061A968DDA3FF2D7C9CE4B - -Len = 1311 -Msg = A92F1321F39DB5C4DB733D4066E3E4B0E7D21CEC0BC7E2A056AF5EF322FC41B1F8E2ABA2AEE1D3989F2E4FDD42E03BB7FCD2575EE6A1C5A8CFE9C24ED165E3F71EBE9AE5998F12A058CBDFBBBEEFA10DA4822AF880C222707A72D47A376E95088EC09B1CACB895F75F425D04DC72D507CBFB7799784A1D0C2881AB675896442CA424B55F6577E856A1A3C960CBA3D455066AB5284A40ADDB1F3B9BE1A77CEC192B75D108 -MD = 6EBDCB702EEDD1DA13967DD486F42F01CBE6C638A44E99012A3852CA94A89730175AF0EC4FACA13DFEEFDB282B5887706EC533F56715C198E28E7BFDF005CCF0 - -Len = 1312 -Msg = F6D5C2B6C93954FC627602C00C4CA9A7D3ED12B27173F0B2C9B0E4A5939398A665E67E69D0B12FB7E4CEB253E8083D1CEB724AC07F009F094E42F2D6F2129489E846EAFF0700A8D4453EF453A3EDDC18F408C77A83275617FABC4EA3A2833AA73406C0E966276079D38E8E38539A70E194CC5513AAA457C699383FD1900B1E72BDFB835D1FD321B37BA80549B078A49EA08152869A918CA57F5B54ED71E4FD3AC5C06729 -MD = A9744EFA42887DF292FC09DFEB885F1E801855DED09DC2F97CBFCBD019751878619DA1BC9573201C7CC050E2AA1D453E951366D81C188D329B3CB861C1D78F92 - -Len = 1313 -Msg = 9961309EE2294A79F63F67E15FA0F9B64371A52A33857230E8353C3131458CB573CA7B42C62A945E44DDA553DDC4F830305FDB11B39F61F6DC7A77F45D8A78A1DE5E444871850DB3D77A5FA22664D003CF58CF270EA826D875DB95860A47E057E8E985C91BFC850B0FD10286D7EAFABF60D43591C1EF72200BCD620D9C823D2B571C79A0F735F7130C8EEB485F0AD15F3C3FCDE12B6F903568263820E09FC596A98E4CDD00 -MD = 863561C0F2647FBAC4E03A3758567AF6E79C31742CCBBD764E941FFE54B0BEEA4739EEC18FA23414B26BB68F812792AD0045158818745737B673D31A31F6E3A8 - -Len = 1314 -Msg = D7FA17AAC404782878C2D2699B8FBF799081144D736007CEB5D26AE1E8FBCC91FFB451FE0ACD54FA46FAD5015F6E054B5FDBB1156839B2ABAC25175E305E7A5B2290C095CE6DEBA98AE8FA42EF2A55570AC1F9D8AFBA87C7D164DAB421BE235EE4E20969C3601CB5F553B800308EA4F0AFB4F15B66F24AF0658FF64831E1AB34105ACA3150CF5A263EC55D0E6A7727BED78FA74FA5FEE2763C0E3DB49D7E529CAA85C52880 -MD = 850DDA809C191F7CE23C4440D8F616204F8841EA00F4720FFAF0D06211FF4A729C077ECB26E3FEE5CFD1802A4592CDF631DFBFC741A4DFD71EC4DBC159098E00 - -Len = 1315 -Msg = AC37BCD48E5439D0E943E371F5BC1898A4E012238AE77D9B58A3E0009992C4A133213FD26CCFD44E55126B853300E3C55585F1CB273E6A47374481AACE9609AB76D8F11C123A7CA069E74826B82E15304CD01958769BC1118EA86F911CEEFB9EBE136B2A07FBCE3B54D86A9D8FDA25CCF6B51181FD37DCCF5814EA3BE8A93459EED41FF29851518894536B3CD6D0FBF2346FBA2F9D832CF694E9BF4E901ACF66558972A2C0 -MD = 1C55D2ED38E2CAFAE52D7C9219BEC5D94F8F819C3530E2E23642AE18D0747197066CD82BD58B3C675F77068EE803200CA69FE1714847670B24E666AC43B83ED9 - -Len = 1316 -Msg = DF7CE9796053F5F36763BA2245F6627DD1F55566D4131D5884E68E74AE069929F606FCD502614D0D2D426A3D462962E779B9A22426C97406ED169719AA2E81E47E68A361D8D0AD192A27262074E872D2ABAC6558795DF2DA248CCED42D2C81E90154E010416CF9A20F53F7CA80967D888B0935F5747ED74B10AEA4A3403033C7BB2819C65FB91FFA65CBA3165D38A0881BFC2EF576890AEF8A988FB0179C38545C357FE290 -MD = E4859A26F3D65A5B9D354B5C6549FD7360F24CEA5CCCEA1CD47B72FD7AA7034BE4C51175D3D22307521C434D55DF5995B038051AD8FDC3B5D65FC9FB1D01DF0B - -Len = 1317 -Msg = AE8640B2496BAB96E5B8011A948B207A656B1B78CD05DC6B7CF47119C742B5277837765B9250CA580788441441318E181960FB6C429FAA217C4937EB1B4DABA073A2655EB4DB6E7075E5E3BE85CEC13C5BC50CE7641CA251D617D47F86F10E8B3F6E84C17E0704BE08C6D3DA01CF21D492576E86AA1A0450FCCEA682966E00E5B460CC3FEE46075924CAA941636BB5B0759031F38C067429FBEF3956B05F911D8AE0405CC0 -MD = 941234740FDA5902FEEDDFF35EAA8E186C64887EEAE9C42531938E917D8A44B2D95AA1712B8B88B633E16FDAD282DDB85BB69B91701542BB6BA6DE3BAFBAFA58 - -Len = 1318 -Msg = E13B3481EC450F9C4E1BE94348D4A727EA03FF80FECBF0873BBEFAA88A0CF4AF1FCEA38BF55218710AD8C01703797D22AB1C957D4B6552BEC094267D40BB91EC5A6459A142089079369E125361193E166AA50205E66A5BC1723F3596B21388C50CBAD03FCAE9295C48493254087A5742741521E85E6E78B95F7CBB4DD7BFD49CD007A7E651151DA15EF8C6E1754B92919CC60EA7BE1B58B8D60A2A9584A47E626C598538E0 -MD = 56A7BC1A8CA088F647653D9269EDBF115613CD616C05382F7ADD3F6FC28E9985D4997B6BAA72C231FE78B457F1FF149B4D646621924C62894003C4BF13A02EEA - -Len = 1319 -Msg = 2F3F0FAECE6B161E84BD245332DD6458A97F266F7AAF6917FB4A5729DC5989B5A918C6DFAA698268F126383D190C4F13A40F765CC76F25E8705FFDF9EBC6BF8984DDC7E5D673F2DB437421A5EBA8360CEE5D213B407ADECCF16E694E962C672DC058965E188A5C30CD1C5AE278325BF0CF21CEA9F6857E982CCB54E68F6B754BE9372C9A9AFEF256B5F2B70A9F60204B0A9B2BFD4809F319B3695AA453A52F62E2DD2C6F54 -MD = 43EC60999CEEA07D4E1FF70D4C5816E40E28688EC0E70171C6A92343FB6010A02E7114AF6580B151C27A0FAD509EBCC95A8F53E7FB5B0DE0362C887FE94CC371 - -Len = 1320 -Msg = CF8562B1BED89892D67DDAAF3DEEB28246456E972326DBCDB5CF3FB289ACA01E68DA5D59896E3A6165358B071B304D6AB3D018944BE5049D5E0E2BB819ACF67A6006111089E6767132D72DD85BEDDCBB2D64496DB0CC92955AB4C6234F1EEA24F2D51483F2E209E4589BF9519FAC51B4D061E801125E605F8093BB6997BC163D551596FE4AB7CFAE8FB9A90F6980480CE0C229FD1675409BD788354DAF316240CFE0AF93EB -MD = 89CAE46246EFEDAD1147EB1868C23A6BE54F6BAC75F0C98A9AEFC6BF3CCB89AE012F2E88A9C838B55E57B232CB3C80BC3C2E9FB3FC9768C6226E93284E208BF2 - -Len = 1321 -Msg = D8D4CA5DF5EFCBF2D65017ECB36C3BD473D607A30C25EE755924FD1E81E859F0311395E70099035BE27BEFEAB73CEFB3078BE02A61EDC1B01710D41EF113E710BB8C1BA51F5AF87FFEC0FC441515D06C165D076857C56597D01D80F73A700DC0797B609081EF2C71DF882AD6D35AAA4700C510621215CDA7BA2A2D73970556BCCAAC4D55BFED9F38C25645B98126CBB76D662E927A314C4378327941D1A8965FD1059E85A180 -MD = 1B29F890B978C27A7EB98BDD875BDAAB50FA5CEC42767E76AFA5ABD6385891A0140B1D5AF949DB8F90048DC95ACE2719130F47205CB8459BEBF2A9F4B5DCF60E - -Len = 1322 -Msg = 10C81B77ED26F307D86E4B10EFFD230C8FEAA519695DAB1869346C89B9DA7BD33B5BCA5C0C43DDE500A8C02AF37A417C97AD0AFB6A07AD274F0D09234C74229B3FAF91A5658D2D2A35EDD6992B2E3B213E8336C0B1DD29211EA4B215C358F5810E025B3DF5AF083DED25A6BFDD39BD34B3D7356A17657D31BE1E03E3F562C8DD249116AF11B1CA8DF62A0198D21F855EBDF9209F10600C0B0AB655DC2CE8DE056C8D8FA9A200 -MD = 6DDCF232DCF80992844808EFFEE92B29E79F9305B18722DFB45CE085269F3DD3464FCB68969D09A1C3BA105ECFB0B888F578AA426B56B4F0EDCC9C3C3D5A25C2 - -Len = 1323 -Msg = 38DF77114DAC70D214DE02A6253C53D03A44AAD53507C23A6CC64123A59D08511BCDC09505CEC62131C63D89B0A9C0F7071FCBF0A14EF340D0C33C93F37705B076AAAB9E4F590399547754F97B10C79C304907BA8D18D93D16F206198A2839FC265E3D942ADC8ED27D073910A2824424C3725409FD46064C426A0E7417B416E833A8A8FE57046EBA806AFE5AF13E756A6375EA6BDBEC8F5576B615622EA259CB161A878E50A0 -MD = C6452DF8652B5B2A5E1AAE8F6BC0F093E5F8CEE054B788F69060DA518C26D57533CF2B713ECBEC957321AC1E69A672366BC9B2ADFA3E8A5BD8B86AF2B02A3B52 - -Len = 1324 -Msg = 430F558E2C30BE5DE10C71F8CF89A448EFF3D6BB8DCD62D2A09DD0FC9171DECCD07C65E77A79147F1D8D75E646BE71379A7EB1A317078D3E70D4CE560BF24948CDDDE283C1F87D907332181404F327DC9CBDF037CD00759EE403AA72874D7B99FE298310AAA01CD3CB1AAD14A116E6E5B1AB95E48E67A73019704D59444BEAAE4DA1C1A432A57233D5B2A233E98ADA735B1AB5B0975C1DFC33C0A7C8AE18775DEC8169A814C0 -MD = 4717025A27487F03895BED3D3FE2425A461226D40D1AAF77D33BB296E34812591E22FE6B076F12603A8CCCA8DED7AB3D3CC37B7E1D9BACB902D6F3BABE2B7563 - -Len = 1325 -Msg = 213D28C42575EC3A807C614609DABAAF4C1CBD06C0FC14D4CB4FAEE17995404399731CBD6D2B3DED3F0FF8B603A7F139625E6193F269D825DE24E2E442AE02AE948C6B3D7E91C1FEB5210280985BD2E1D5D1E7ED1B63896D20A18F8E14250384131E3B1AA2B47A23078DE9EB65B735133992CAFB56B22549313C632B8FEF70BFA8610E5B5C82BDE68C88BD957FCA36B5151AC18B3C2030315C1A8049F6582A6C210115293728 -MD = 26242917EE7FC376B5BAF5DF9AF600C7ABD94110E39E546CDB552B822480F4D5E54C120A25CEF8A9E7BCD51DA97F02E2939C156ACD1F4C7BA1A7B294114401A5 - -Len = 1326 -Msg = 15EC4EB1CB742F14FFBAF11D1CA740F17864D55BA3AE39EFE5E43DD58B0A9A7345B9155F91714C9CF73DA71D59BE61E170CF62E15A5081C4D165693580FAE1401D6CB047D6F5ECFB38453E9906E9A8ECCD861579186EC2EFA503C54420673F2F3F49DF69FF76052B93B92F39F50235C83995B54CEE108F2A9327ADB4CA7098B53647A9E4EC5D4EE6EE042717FE82D505AB9BD3CAA78C4B576E8B37E38663CD20A467F091397C -MD = BDA20A083C35A7B1D772D0816BBEAC7B1EE47AF7C5CA596635CF724E6DAE976C027C9922243CB9EE1A3FC351C42DFBD6937063267BA03C2E0B1D4C321921DD15 - -Len = 1327 -Msg = 65B08BEF40F0B21475DD76DD4928E3FF488CF3EF73F4E494A0D32D72F303910CAED04B767690E66972ED6C8B2878CFF3793459FA91A59F59EB7D75C50BF5E49A97455C9B0CD2F0C76B8DA25EDF988655C3BF92DC69E487A1750ADC615AD8DE7AC35D3BCF9F4A034B26D55AEFDA210B753C29101340975DFDA82BE82AA4BF4C9AF108FA4001242F4A412BDD2883F33A46BBEEDC449978B03134E7D7CA7CEF9649F03FE5C2CA6A -MD = 5CF04EEE312D7A4A32E1C7B51171DBDF5B9C204CA78C8BFF3AB0D08566D8B929CFB87B12E4A89EA8999C033B4D356E1B8A224505DDDAAAEF34DF4741803E3217 - -Len = 1328 -Msg = 2ACE31ABB0A2E3267944D2F75E1559985DB7354C6E605F18DC8470423FCA30B7331D9B33C4A4326783D1CAAE1B4F07060EFF978E4746BF0C7E30CD61040BD5EC2746B29863EB7F103EBDA614C4291A805B6A4C8214230564A0557BC7102E0BD3ED23719252F7435D64D210EE2AAFC585BE903FA41E1968C50FD5D5367926DF7A05E3A42CF07E656FF92DE73B036CF8B19898C0CB34557C0C12C2D8B84E91181AF467BC75A9D1 -MD = E80A63FAF248AE762D13887AFE8E1954F97327EDD9641CE563F4148F9796669827B3A12B06EBD710D4171B86E21BC13360A541845354E0F4934E6FBBD7ACBF2D - -Len = 1329 -Msg = B13731617DC804E12B6D0208D197E1CA5A19206F697C7A77A36CD015F2A8332DCB4BABDCF4A5C63605E27AD0B57A03B423859ACC51D82A10AF5DBB8FD50909EDBCFB7D429B4F77933438B76CA9532BF10BD1F36B42612C662AAF299B8C9C88ED55E88A1FC780E6CCCB61594CC0B5D9905184AFDEFA5DF5DB1BE814312CD2EF6C89EAF002B0DBCD03814B71B6B1E581F51BDD7DEDA95733369F39849A9E8529F4104BA2B3438280 -MD = F2F0D826A4F8BA4BC04221D995C19AFDD08F4D09F406F31F785D453B62CE4A16D6BDCFF79C6DE434C549EA50B1FE1FD97E1346D586AD9A753116B7FDFAF475F0 - -Len = 1330 -Msg = 01368F9B4FD19B850547FA39520B328FAB5371026EF643ABE0CA52A1FE3214AD838183533E5430E79C4E6F6079F576797449AF05761796FEB48C2BCA074D318B7F3281778016F0E204B2DB0488F1FC5FC1452590FE60D133886003CF16FD5544362EDC86CD6570F7C3A653E3DDAC125BE266E39E92BB65AF965BB8F59D1326BCCFFB71F952AC9B95B68A30586BC524073E98911F10E4CD0D0BB9E0C0830BA0944236A747353D00 -MD = 9F5A4E97E28EA4508026651D9E7B8D32D5FA0A979FED0CEB1C237A0F06A74004B1844197A3D3F35E28E848C1B3B266ABB33EB8B6CBFA689F9C3852998DD4EE2C - -Len = 1331 -Msg = A876C4B9EB23D6D1A0874DFFB3DB4A23094425DACA15775BCAE881E6B3425D116C959BAB6B04DA1A772532EF92EFD9709BB1DD4CB3FF4411882209D3F95D90952692AFA66F9183E8CD2533346D3E5118557CFFDE039D3BABC38647A7C1DD0BA04804EBD8EA3E905BF334FC5844C0E6DB853B4F693D4E087DF754FCBA1C5B2C234EEF82349006C5856AB7E6E8FD8ABA1A3E7E373A486F4BB710A507955A7590B887BB6EEAE01F40 -MD = F23860E309DB0777EF55BFB0B313E4BA849F4108847E91558784ECF3816A8376C015B5F82422121EA960C4C100C653DC456C2D2452AD4ED0846C5902729E0C2D - -Len = 1332 -Msg = 73461B72151939F14C3463B9133B21CA31FEEC81AB2E32D1BC0EE079609A0E27E903FAC07A733062C1495B35DD1EAA2D11FEBE2CC98F832DF67BA3BEA187C9084FD421EB179293B209BC142B35159AC5057EAADFDA530668C6A645B235E0ECF290BF3CA902FD27875F129EC1913C82A6E6D6CADC63FA672D540554703B25A8CF1B92948B310BEDB4CF3CE581C188661579401CF107B3FEFAC9B642076A589CE28868B3DBC78D00 -MD = 0A869DC895E951511D9B174208F738A847ACC872AEF14F597A3B5013DC5EDAAE6C3E112D92CDCAC31F63AE13DD75157D5B516C2A71185815D62172E562A264C4 - -Len = 1333 -Msg = FDAA7C54912A9D81983FC765E53A5B99B5D478DA0EC137A942D7282D3C97FC674EE734CC9B3DECA4D482E33052D1D0E1F47327ECCE1129BDCA5DD9DE6C5722A54DE82E7F4B223219E6682AD353815A74862B03B2B852CD7A246433FEDF1E7F3C95E59A9FDB00080A4C7CB5473E5E8A9FC2784AFB8730F5B3ABE0EA489C501BDE120B9584D45074192A16BDDD8172545DB3BD993FDBD3D721F4B3E145594CD3410229427985BFD0 -MD = 1B81D1B43F60C33B9A64DCD8C4A1C0D5075889A5E9C6902554B508C5838DE84F02845BB16802FC9CF9587FA00E03A11D746433D789EBFF07D6609E09438E30F7 - -Len = 1334 -Msg = 3FB8DB0394383660250C48371EAA971C4C2F5A3088F028E759FB9FF3775CE1D6BF7D3B114143B21B5C98C7A60D760784787420BE0B29A71663774D02CAB07895B14D18AF5F26B58D97C87AB6DFC5E6C5023880F2D181D868A4938761377F085C51134D383B19F10B9C2527E20EC3ED5603A5F8182EA3CC7A1204B331FCFB17D1E0D42819D18691451051B12F07C2E3FA908842DA0B7F72CDD0E31D7B80552526B36F20C90E4A6C -MD = CCE53A0C20B7BBF5C2D68C480D9ED5233ED3E22A12CF7C044C81D153201735DE356AD16D4305AA1E3D43D537AFF42FD5EBB56B69F73C2A6CC0FAE9FB0707AAE0 - -Len = 1335 -Msg = 9135F850B5F1C12FC35D88D789F6C0C489F4E5D09C3FFCB4C0A21A6532ACE66D192B214E8E82F099F3CEF20930F1E8FBEA47933016457972BFF66AED7FD8295B01F1F2528CC98A04F1082033D8240749EAFF393E6247C03F51C8250717F10D4BAAB223C86F2189396B48036B0285FB38773915F8CB9AEEC5A0BD117967FC220534A23EC333C6CFDEBD66C526F10E91EA82CE0AA4039C6463278A10F9763528C5A1555213D4A2BE -MD = 5D28075DDA62E91BAE62253016A48DC78C082712F6D04E656868EBF97850FAB50989F269C3EE4E7A0560BF8469FD7FAD18DF613E1BD5E3AC8A60AB6D08C49EB9 - -Len = 1336 -Msg = 0D8D09AED19F1013969CE5E7EB92F83A209AE76BE31C754844EA9116CEB39A22EBB6003017BBCF26555FA6624185187DB8F0CB3564B8B1C06BF685D47F3286EDA20B83358F599D2044BBF0583FAB8D78F854FE0A596183230C5EF8E54426750EAF2CC4E29D3BDD037E734D863C2BD9789B4C243096138F7672C232314EFFDFC6513427E2DA76916B5248933BE312EB5DDE4CF70804FB258AC5FB82D58D08177AC6F4756017FFF5 -MD = 09C10C4818A6821C170D6780D006F7E853E30FE2D9A4E96545673704EC0A1A3E356375715994E1AC1D8CB0E56DBDB2F77DC558ED228FB56EE62217E63455FD0B - -Len = 1337 -Msg = 39CFC640D96492FE5EE066C51815F22D0EC9069BDE5A1062E578B1FE19A045A4F77FC367B44CC052EA0092841AA1B2D36B5B4F5023F4139DC9D36C6A45E25CCF173DE83CAD177485E1DC089DAFB5FCE3F3103372675AB5D1D54D8AD9F91A9CCE0E55E14FF565ED156FEFCCF244E976ADCC41458D1C8F709F0D2BA20E836B532D5C2475BDBCE95CE32633C63CDE42A76AA032F2F4A01F6B66EF2B666C34B2EFFAEC5C85F880EE3600 -MD = 00BD9B3C6C2C8DFB50B9A5E7A4B019B2C04E101CBFC645AEE641D54DAA02B68C25BB323902CA9B85B1083C49750754B2A82905CA7311C70B8FE3466100E44331 - -Len = 1338 -Msg = 6E126C93AC75E3C7320CCC9DF871C1E414D5A88C01A90BB739E84F7CD4053781C755DCBF96C9C69558F270972F2AE1622D5FC47D52DDD07161ED302D66363C50C7E8F2523B6F4ECA6C1CF71BFD3BB91D8EB83ABDDFA0C1E8CDCF4B2EB2A5949D3EBCBC6E9DA9918AD21F5EB1261C1CEAAB1ADD82034681460441D0E5380DDB02678915113D77F95EE3D42C3170E14A559399C3CB8941FC953EBB3E913A73789E5D298D6C840DA900 -MD = 231CB89A20807E81E65B88E1E50D11CBB52F7A80B5D2635878AC6F683E44BF4230BF7F118DE8CA4BF0A64B3B27005A28CC7771E5EA434DBAC3A4920FA8F7A1A8 - -Len = 1339 -Msg = F55557FF8DE74819A835E310339E4487E743C20D60DB4162581B160AA9C1C5F45DD760A6FB350FA7C3540E718C25FE6E045478D57932C30E710F0EAABE473AC7E4C789DC2BCB10AF75A4B0DAB28352EA889C257848C885D5E25BACF44ACEA5613BE7C2F34B0E1C3E60B092E84393592761AC201AA63CC1327C9BCC590F0415FDF781D038CC23631977FE6FF968D63C0AAD3BA1678163C4705F46BE48AD84C418A10291E7048B0B40 -MD = 4184919E709285636605E82A802C979FADD8F6E976E5BA88CD9E4E2BC6D3451A1580C0CBAC80F0C82EBDA3DE645B8DC0C68776EE485EAE0488EA3CA80CC69643 - -Len = 1340 -Msg = 58DFF83B67C6E67DDADE60ED6A0C268047FF37144EAA34FAF2FCE48AFA56B7733C0F4107AEED3695ACE8C4B55A59195E1E2FC93107C1147A38B1E48ECC1601001EC488491412FC5F23565FC7F51AF9B0DCCE5FE954E59309BDF99BE3959865BC9ACF18296F150BF157EAD0A3BBEFC43A50AEA865AC390DC0A69F813FA2D9A83A99695B918538DCB798F29D9FB909EDA9B06D83302B8E04773F911CB2641AE861D3D12FD49FDF7FA0 -MD = E8B3E8606A76D2718ED0DACD62BFCCADFAC419576AB5CC15062B0275682CDA6B2EA31AC8781B834C5935D5D1BC9815C1E06EC62FC412677630CBC9E89B58572D - -Len = 1341 -Msg = 3B5E3D1050E346FCB62F940EBAD635921CE417C934D3589691AF4EB303EE1B0268E19D3E7E77F3C053617ECDD8677AF9FFBD15D94013AEE8BD2096252A1B31014CAF1B75BF197566EC217B979166C43CDE5EE8D56732719CF0CAC6096AAAA54CD606BCF7279FC202304C1FEDBC58A77CBDD40FB058FDC95E6569B0B00C8ED5EF60E54816585F71829AFF637C75272C7A5E08B6B380A23B5CE11368BA6BE566283E4B78D043733810 -MD = DDFC1999C64E7FB1837ABFBC7F3BF9CF2B168723E70CC3EC2316C03977F9EB7D6105B338C0CE0C9EC827E2685606530BE03069F0BD1B8D493EA4924C8D653404 - -Len = 1342 -Msg = 5D2333C4A14A60656AB7FAC56229020ED2CE882448E1FC052EC15468AC4B4BE980D042515EE3280D0F9A6A100E20ECBDB415BF52F620B85C94D2652304FBF053256A6CF5835C57652DFC7F999307E097417EF294CB3EA68BE9E55AB65B55D57E625CD1C4C43D6F6B2C391B8229CA1051D085D485729565BA2B4BC8EBFACA0A849A8CB5F8B6548AD1BD66E397E3AB812026210CE7A918A7F9E41B600D360A5DA1C4D9508733815F50 -MD = E426297322FB6FBF43B0E74717DCC3834E42579BF7189DE3C1F1C043A573A314DDA315B30AF168B04B860C559DB94904F03CB24F9BC43E71AEBD4C21E79957B2 - -Len = 1343 -Msg = C2F40504BA614ADC304AFEE4C618E6CDC679B644D42829C105F1B0E4470334C566D580FEBC52E425A85DE9E341BA19BB42DFFE31B5096027E13334603896B76E3FFA4C9B40D9FBC4D0DD6BBAA824CA0B151FA56C1A6709928FB853804F0CEA2242B08159F046B28741766337E0957793617B0446E1468B279A037ED18305809EBDD74E36E7873C01B9363ECE9AAFA8E96B43E2AB289665234F8893707C491C6C3738E604C289BE92 -MD = 0AC21D72F88E7155C5BB8342820B77496105F7721C59C9228DE74DABD05013CBA4B674FA8F9175E99FD6364B749A635053D3B7F349CE1CE457923CCABD065BB5 - -Len = 1344 -Msg = C3236B73DEB7662BF3F3DAA58F137B358BA610560EF7455785A9BEFDB035A066E90704F929BD9689CEF0CE3BDA5ACF4480BCEB8D09D10B098AD8500D9B6071DFC3A14AF6C77511D81E3AA8844986C3BEA6F469F9E02194C92868CD5F51646256798FF0424954C1434BDFED9FACB390B07D342E992936E0F88BFD0E884A0DDB679D0547CCDEC6384285A45429D115AC7D235A717242021D1DC35641F5F0A48E8445DBA58E6CB2C8EA -MD = D1CAB5979EB7F53C97DCA5D725D8B33008906D7759FD3EBB8401EE2FFF01DB895495A0A062D47F251BC3FC13988607C6798969D213C941EFC152E7DB1DA68E72 - -Len = 1345 -Msg = C3CB3CE5975C2DD22C8BB03A4E86271D01D07EA027B7557E6EBA98A5CA4B6E8CCCE18C02878C7479D92E546C2961CB99269E80E7A61BED7F1E0FD5ACE5DEC74B8D3F5F2CAA0717822E78EAF8BF1BBDE53913BF9814CA4103C3A98D559FAFF2CD503972075F3C04C8D9DBAB07F67DDC2B1BA43DB3A13EB6574C5E7B7042CC1C7F182BF8CA384CAF5704D3C16EBED4539A7DA4A396F8180EAC0186A99F910B8710EA081B5934B39A1080 -MD = 9A10B91308E1037DA41A882E08D6B2C5F2BD6E20645257542A6115433D79A3C4F777B044123C7990C22C6166CC5A83ADCE7A1E36DA83E1BD390A0777661C96FC - -Len = 1346 -Msg = F40E5F1455783F8572FE80D3153C87D5BC3CC1E32163424E57083619716ED21C5A055FF1E8E0B49F3B860E1704601ACFFCBCAA546A98F9B86709B74121753FDB16DF79D099136570DDA02948921F52D22CBE958248E0A2B9B6E409146C3DAC0002224DB6BCB40E86DAADD4E51F17ABCFAF21535171217D421E828546A5F1F648D4003431BA5C24A0A540FE1F31A7CCA19BFB5D17B943FE774BB3DB387C8B7352E7E1B2E43A423C6A00 -MD = 512EA7AE1C5A4BFA26414168B41FA41F4D90695F7924277E6DD46276EC658C36DFF871768B0968D93C6618BE5E17F2F2C474D2176217E25D16D6678636AB3F89 - -Len = 1347 -Msg = 7D9D6BF2422DB04E8C9D0F8D2AFFC296A305021A82DD99B5A0CF36B7B94AB0BAFFA1683A5899FABEC74909636D1EF585F80DB9817E37D09667A4A4FE5833624548B24F87BDE66B66D758A4B49F208C75A5EF80DC5088BD05E3DD12DE637506D4E10D5E1D73179D577361C7B7C98B36DC16A7DA068F3430957FCEB669D3C0ABDF0D7DEF41F534ACB9B124DDAE7E57CC9915440C1B6D8996179E6D796C90D254A4EB8F0C4CAC1ACFF3C0 -MD = 913E21CE421BD05CCEB3261A872749A8125D42C85135EE1F21AF7F21395F3A51D7F98ECAA9C866213DE7F63B45032020FD479571EC8086F7F0F94F6BC77BB03E - -Len = 1348 -Msg = 07B8187B9A37B5ED72741E4A43724ABB1A14AE3D6A62B74E3C81A8B54C9B71EF81A2704FA5DFE752A2D7FAF9DA5D046AB6BE4F3E7F241D89D79A77CC6B46EF7442308566B4604431FB4B865781BFD4549C116160FCAC4FAD092ECD4C443DA5FDD5E2977D6C18714B1315B84B2778141710218B6DB4A21BB4D1F294907E3F1BFB6FE51E7A004DB8678BE9B799DBB14BB3A4D4190E7D33C69AA8EC772EE2A20133BF968DB96F2F8E1760 -MD = 3C3A8AF8962AE740A75576A18C5ABC9ACA8D53731B50F37025813D2820007538F24CFD57BA9B2B0EC9B289BFA23A3512482C1B5A16E2E7D7A52576869744FEAA - -Len = 1349 -Msg = 77206E0087B19C5F785F0FCA287AFBB804589648A52A4757614FC17B4B90BF68D3F4F103487F8B7FA7A31A6C6E888EF6EFD973766CD0D189C80E7B33277D22B6DB89108AD4B3851709B749F535ED18181AA564F05ACBADEB21BFAD4AF5FE1EF08DD72D26F4720586D153C8A6F2BC14881EB07FB0C6B88C004EFCB8A96317468F62BEF8B6532E6AB4F205400B33DA576E0694D4667BC66FAF8AEFBA644A820D548D3F90657398B96020 -MD = 74538B1D474A00718ACDB51335EB2FB3C4629FF046177B4D1D2CBA022B5BFE7B1FE4150271B6D9CD7C45F862B4C0757FF4693BFF607713A51FFEC0B43B7C9646 - -Len = 1350 -Msg = 96D0600089A412478237ADC295FFFE4D898DDD2EF945BDB7F2202905699E16C9F623A17F9525234A77A4C51BF594E8419D9A82419AD954A5FCBDA1E46185CB872F2CB729078C6E5EF7B99B8AC4BCA5F9FF58D9C22F128CE12E118661CD4BBB32166191E46348977284EF07FB9DEC83FE46794B2556FC74D0E8AFA9ED59C25C928F03A2D7CDA4DEE0180FA00B0C04EDE8879836D8A61BC0168226F1EE0CECEDE25C835A4253757CAE5C -MD = D1FC37896B4FE5ACDB9CF76FCA23F12BCE453EF55E2BAA9221DCC40BE2D52762378BCB1CF2AA3B4539B67894748548834865942D243E6B377F85DF7C64D11E0B - -Len = 1351 -Msg = A9FB6E614A0D60016E54F7F76379AB10662A8147E40C19DEE4303DCDA99E08ACB8CB14CF41A42541C52865A5106C8B1278CFFADBE74015E4AF6A21EFED08A57A0C8E71525D75FF08493398B7F1A45BF92E6BB571E05A01DF3004B5FA4DEDC71405EB302587A2001D82CE4AB6540552E6418ED617F1807018917FC9AA772FBD4BBEE3FC43BDE9113D7E33A6CEA09B2B8B6ACA762DE6F35E78F52E28EA131DEFF81C34AA51B24D8FB210 -MD = 059E1E1750B2A5775537745293C9DF5D9092A94C92B0D5694971BEFD7AA37D443BE621A5D5A64A798EA082BA47199A87B09FC077E59C7F070E12E59815AB8241 - -Len = 1352 -Msg = B39FEB8283EADC63E8184B51DF5AE3FD41AAC8A963BB0BE1CD08AA5867D8D910C669221E73243360646F6553D1CA05A84E8DC0DE05B6419EC349CA994480193D01C92525F3FB3DCEFB08AFC6D26947BDBBFD85193F53B50609C6140905C53A6686B58E53A319A57B962331EDE98149AF3DE3118A819DA4D76706A0424B4E1D2910B0ED26AF61D150EBCB46595D4266A0BD7F651BA47D0C7F179CA28545007D92E8419D48FDFBD744CE -MD = 96AD163869AE2FFDB89B96F4DC700ECE27D1F4DAAFBC5FB81A8E9513C6EA5E2B6A8BCCF4E49A294AF326F872740661629AB780581155810E492424C24F8D1DD3 - -Len = 1353 -Msg = 36FD2EF569A5A40207DEC3C593DCE23194D2DE040551345672589F374ACA38C0ABE149F4E38D53C1B24F02BB06DBD9FE3703012F0E5DD9FB836F38BDC62FB11B55EBEE418686155296A54077D71E05546188C6381D0277BB367D2C64EB1977F100B178AA2530E1219DBC0381BF52F1C81897AA2B7075FF775EF42FD948A5F751C8A2CBC0B5F591685B39039BC08FFC7246E9EF8EE8B65AFC11A3C59C25E9F020344CAE26BB62DFCEE600 -MD = 215C67F2372415936C8295BB3073E08DF45679CC95266425162BEA5B23ABE0683D14FE092BCA41D3949DE716CC310EC1172239CD125F99B2298095035B8AE492 - -Len = 1354 -Msg = A868924523128669E906EF130800AE8CD611A019CD74A3BBA69535EC017865BB576DBCA2530803D74EBDF9A280D0342F84B1D428E4E447635C0237D44C48190E595294B44283BED2141FFC8CE76B8D2C4CAA166B81AF988ADC13C28CFFABA21FC625EEFB2B70A6D3C0BAFC91B7F07CB4861B689A45CF70D0F61F37934A5D7018F206D1E327DBCE56F347CBE576F1218270DC49F7C1D63B76A21A354B3CEC87A1A57E8BB332BF39D6BE40 -MD = BB62BD661248E4F6F6051A365FC6DE1B5A372936F7633BE7F184B4B70277FD5B97CEB59DA9115A98AE85A652F4729079D4FB4F82B96A7DDEAAE12982BA55D65F - -Len = 1355 -Msg = CAEFDB135D53FA74983D99E6C0E003D451084699ED4AB28959A931ECDA5FA7E45D54D3345987DEA612F20DE812F699E9272EC5599C365D1BD948B0AD2C30BA9C61622C06814FFD397E34CD0D6079D88C5477648607BF33160AB1853EDD71547132A4C0BCB89463CFE0D579AD4D042BBC6DC2C8D529353E004786CF7FA457AAB6723A70B2BC51F71E7B472B5A7C0D90725CBBE355323BA4ED99CCC6703FF13853F686AE3381003DE704C0 -MD = D56C3B62677BAECED152266126E08DD1CEFC6DC14E696ADB77B1ED76B7011714FEFE265F850443ED3B2A41A9D4CC741F609B44447F28BADC0F6C4F2DF8B72EE9 - -Len = 1356 -Msg = 49A49E75573AECAC91FE025544C29871E97348F0C26232E008BAE56EEB1D9522C98251A44CC8E34F081554E3156F41408965CB9315A1CA7A53D14193500D155EBDFD3CF93F7DBAB715C49D2AAB0C82D165E7A792B8A5DAD7C2C1DF57501D14E20CD6F3C207B07532F772A55756E237405BCA9FDD0E9E6307FBB2DAA3F8B0FB6B2BB0D350E933837A6E742AE9D242578ACA6084CEA26E3D046A0A7158ECF4E852785DB96F72D8B780DC20 -MD = E14D72DEDDECAD5AC8F563AE2E2E19C000A7AEFAB1E97D6449BFE1BD8717CBCACBB88EBA19B2E41ADC87FD0CDB3D6B19B54A320A2D604AB995DE887EDEA7E08F - -Len = 1357 -Msg = 939A4A630A161EE6428D48E351FD28190F9CA3E99418855FE282FCFAF85D9B995EF83C934020FE4D7104D9E6191AA489CDD37F7002C9EBC3ADF792DBFFAA2EA7BE1A1F3D7C0616479376C7660BBA1DCA7633474F4101A68766CBCFBDC269E81305468C93D4FF6B01DE681A38C6351DF0C53DF8807374B2AAA487F93A37D2B8C319218EAA06DE9470D94EACFD3083BCD78D29A5B85B4653BE36F1A722DA6AFAA5C5609EEEA47BCD33C850 -MD = F556FCDD21EE6515E1E46440A26745288893AB7257EA8BBA7053E949982D34CAA2E18B900006BD94D36702EF69D96E9F56BBC44B32078F337F7C02285F49F0DE - -Len = 1358 -Msg = 5309B29396779ADEC58AE82992BC55FF47213BD044F67070C5453201A83CA555C9A009FD7B372C50282E5947008D0E7FB125004148884EC2C88640C91372468B6EB8F884C983C83090282EEA7737D953DD2C6AF6A85FAAD6CF72A14512849961913F14EAD5F203A4AC7A5481AE2BB722C6F0427D61E6CEED47FB181CE29642C753282563A78BF6ABF1854D9B1686559439A073E2AC2FDE86BD9955721F9B69288A61F575BAC5450DFBF4 -MD = 34C3A1D3E518CC485492F4BE4614765923B600DF675ED1A0DB9369C9F4C50C4A1961A5D943AC8F1FD5A3E16452D15695A31E9C0DEFCF28B59006748FA88AE3F3 - -Len = 1359 -Msg = 2E1AA86E98FDA5D02B5A87975A497001E6CBA9DAA3DFAB73247BA5711C94C920D746B35F91669F84B5B9D18938C2A670948BCE4050AE33615B1EDF6F4C4463C40A0DD16132A27D8DC2E061744FA443522FF8321A92C71B14B6A3B75846760FCFCC94580FC830E5BDE5C7C3B3BCAC45CA8A7B71D6313D181F6B3A02B66FD1C2C8790DD87A743F7A7A48958BA1BE4F57B2A07D6B314576D9607F4BBDB62C3258DAFD24D3167A3127D1C00E -MD = 3EED0D1B5B98DBA8680AB2C82C38E82105A04FF30ACEA9FAFAD83279701894DBAB6D97B875ADF32797E59A2221E9245DAB52577C4FE405DE87394BC88CDE1E81 - -Len = 1360 -Msg = A983D54F503803E8C7999F4EDBBE82E9084F422143A932DDDDC47A17B0B7564A7F37A99D0786E99476428D29E29D3C197A72BFAB1342C12A0FC4787FD7017D7A6174049EA43B5779169EF7472BDBBD941DCB82FC73AAC45A8A94C9F2BD3477F61FD3B796F02A1B8264A214C6FEA74B7051B226C722099EC7883A462B83B6AFDD4009248B8A237F605FE5A08FE7D8B45321421EBBA67BD70A0B00DDBF94BAAB7F359D5D1EEA105F28DCFB -MD = FD2E7A6E11E5D00278099EAF403054D617ACAC5BD3D0A4908191782C89F9217A3F0118BC2B284FDBCE803F66B78DD795EB18DC16BA85E19CB6393DC56C06ECCA - -Len = 1361 -Msg = 65A13FF28557E4982462A50B622D2B33D68CE803F2BD202F9F930AE5BE9026425F26C640992BA53AA014F7B0765DD49FD7C843A20D42A3135C2A16532B79CA414B65E9672AAEF56D20F72C63CA115153BF9E3EED2EAE0A03A3B054F4868FE8E9F83B4F9E4CE1A9CB87A88280780F8EFBDEAD6E3CDC1BD27000019D38DB3D4F4FD467B4F9CF2DFB4D46A1ED63EC518B72FA301ADA91746495D579FDB94D147C55FBE8A8E4F5A427E28E8700 -MD = BA65AE4520CEFA91527AEC8D8AB60249FCCB00C4307C28617CCB1355E74B637A1C72EA0FBB753E5A7063295C29BC82CB60720B1CE71A481DF15D47B8615D2B8D - -Len = 1362 -Msg = 1045E853FA06432CC0C84304B661E0BF42E06D1212CE69CC6BE4BA28B6B7C4C62679B58A137C5B8CADC43F0E353A2F824457D0D9FE8FE017150DEE305F6346EAF01F9E220A4233F5674AFCF1C29F2EEB4B283D97E3695C007E62D453FAB2D192F16CF26FA7E048BE5EED75809688933D55EA478BEAAEDED1F7F07603ED77CC19B9557197848E606426D7B363ED592512D0488B95618940451D295D32A26E6C155D13BF3A17C65894F598C0 -MD = 1D6E127709CF8CD7ED0ED5F4E3E5EEC52DD53980B6F8EFAFF6EBDDCC21017F4F0A19B5F59E117470680DFE8272E9F7F4C10AF178D5315582D8D5737769CFAFC3 - -Len = 1363 -Msg = 3C10731D5A71E84653384B14B09D136B3B5A5C1F426B6C717521643912FE1346178CD03638F5FFF9584E3E4968E6D8BF2D0D00B893BE39A09F6EC23239053D5E5AA8D95BB999938CAAF66E12C4BE7D65DE0713DC352D9FF372D70BD9C00B3A0133B989449F4535B4FFEFDF5262C3A8D1DA90111853C0E10D4AD880E911880BD7C325804BA23F465916C273325800B04BD6F18C7885D7D2368A099A84367AAC420A865021BFD1A379E29680 -MD = D4B3C99B2C5DECDB39F739D3CAFCBA4F8ECCA2D7CDED1B276B3A27BE6D1AF6819B9B19CAB3D014FF3247E9E1F7C532DEBA15D6F316F254BB9F29332E88AF6E30 - -Len = 1364 -Msg = E1D0B5DF1D9D66347907624DCE47F60B127CE791BBB92933E5E4A976509CFE339527540B602A8A73151B654D5B8ABE44D2BBC887CC78A08826D15A2FB8A1FD33DE8E7FC57FCC26C93E2B95F2D7C9322D4DC6C955B844063FC00508ABBCF85408880F73298211A7E7EA3179097E5B8113D3CB95C85F3BA015A87DCE752A0A5AC4E7D0C7B53014AA1ABA3921AA12A32689CF7DFFA5AD6CFC6EB68816AE3DDB5BF6FE77AA80A647995490A0D0 -MD = C40CEA90C6788FF01965CA1AD18D9B2DFA7019AD4B4A6910E944D842A93A6EB8A049794C9B8B6CC7D719440D30C66C18E6C6AC5C2E760695696FE185D6493BBE - -Len = 1365 -Msg = EB46065DA3891E567295BE6219759C53F3DD0A85BBE66C93292120E35C0ACB54AEFA0785791A0FD1BE185DE702A684554FE5037C74906332F0755C88A7D8D5281A793ABE36C9FE1B0AAA79C67DD80FD84C0A07D83F63D053980FCA4FC5E11C8157FD57CE84E939FFC574EE8274C8B2C3608A0FAA1FC8D980CE5526F9D1D73E65B1057560B62A69BBFDE5649A31A4FEA16DB8835251673E1A1CAA2542B248230A9F7C7DDBABFC4474B8CD20 -MD = 0D6DDBB75FCD6B54FF803B10E57E26E470E6AA304E682F2ED5FA7F278399B7E5373CB4D411C901656713BF991107721B3C2AE930D3C4F9F5711A4C9D9BA1C14F - -Len = 1366 -Msg = 97C3A9F14749A457F890C34FDA5EA43A7AB1CDEE0EA0355FDA7B0027D47072B25A8ECA77C5FF22CFD0AB66E443E33315D3303E06693227A05F56D45648430556307E0CAE518E64E173EF36DF0B3A18900A4DA6D31AB65D40EBD67CB027F2584B3CD266625358905C9C482B61E41F6F11FB749785161FFDA33079F21DB116E2C25C7773BB3A7EE85E23D940F95F3579B90DC088E407997393A5EF709D477BD7E5A682237D1C7E835076FD60 -MD = 6501A9D681737F1C9C9D10F2041308D03127AAF485D4D708F9A275CF85EF2B8F26F47E11DF53668D93A4E75625D4E316F6E0DAAD8837B16D116827138283A8AD - -Len = 1367 -Msg = 411BAE7879445A945453DD7EBBE35049A2537031F12F7A90C712E6D72C720E7B21E15D4523DC0A5EE090522A69D2786253136E5DEB20FE0D260A67ED509B88EE4444B86EADFCBB9D365CA16BB937065E17B6D6BE7697FB337E1047E91E211489615BD4BD85B5F90B6B44114D0871D9A0890CA0F9BD7960E927C5E6EF0E0651AB7C66E2D1BBE65DC29E8557C15DC5A15076C7AF08925F93C615FDB8A50F99C0FF427589619AB54960880226 -MD = 9B4D021E2B6858E045FBF1DB7A61EFBA3ED16E6582DCFB22363296069DFCF2CC4D0D3EFD34FEE70F681EEE46ABEFCB84C19D005B1D641269EDAFB06997F46723 - -Len = 1368 -Msg = E4D1C1897A0A866CE564635B74222F9696BF2C7F640DD78D7E2ACA66E1B61C642BB03EA7536AAE597811E9BF4A7B453EDE31F97B46A5F0EF51A071A2B3918DF16B152519AE3776F9F1EDAB4C2A377C3292E96408359D3613844D5EB393000283D5AD3401A318B12FD1474B8612F2BB50FB6A8B9E023A54D7DDE28C43D6D8854C8D9D1155935C199811DBFC87E9E0072E90EB88681CC7529714F8FB8A2C9D88567ADFB974EE205A9BF7B848 -MD = AE53776D969A9B285641998A9F2C70CA71856C956A3C430A32A1E03A8E08D544F16511A27CFA59F6B8275A2357F8EFA6544B1CD0C00A9460F47954A146429E49 - -Len = 1369 -Msg = 85B3E18D46E358D5BE8A54559ECD1869416AFA911BB6D553040FF39BF7E0886FF7586EE57A4972A9C85ACA71C7D85E2391E2B168C71FEF71BCE1404DADA3C302861FE17A1199CA115A20F3A5F073A3C98FC65D36A03F02099A0B5E9D3993CACEB2636357DFCD05F849A71B8B765FBE0558033ECF0A4E8FC6678325804B5554DEDD02F5A50B88B81898E31C621557624B52CC3431E07B0B3281CB452B4D92C5F7D283795ADB9787E0C4D1EE00 -MD = A52B481B4C9CB7D20284D8831DF03B73BDE5933097B1D8C07D5A59948993A6EE9BDD5F32136D5ACDEC696D1DD194DF921467EDCF848CEB35AC7255AD21F9091E - -Len = 1370 -Msg = BDC1CFD804C90965C32F231EFD3483B12D81CF36497D0C5CE5AD10E9F1D6A47690123D86F5B7D92A35B13A4A19B6BECCB493841C5D78014D7F200DB2E6AB53EA9E9D0F32371E037E14F5E03359A5F5682577E47E08AB5BE223E6C34039D3BE6CEB345F2CE3C4BABF4AFB0CDB336D97CF06C6431C142FC05B50DC0700EA3ADACEC0F08078A5F7EB61F4C6A7015BDD1519389B4FAAB4F93051377B0A324FAFE3AB84F2BD31FBFBDD919BBE9CC0 -MD = 862A2F9492085A79C27C542DA21AAF41D71D7457A7624223D179150D485BF0A8CBE68775800447E73D451866A29B2BB80F1153F7C127E83B8B02372407CDFBFF - -Len = 1371 -Msg = 182CC05EA535B6507804ECABD9447E181E602C8B80AA08C4F594753F4CC8156DACCC95263AE798D21438E085A4C68E3B3E29E99B7B005CD6E7479D113B255804084123C3313DA10C6D205B384809B5600ED73EAD804B29CB2B39E478941C84C937D6DBE1B670E0AE4C40316431B1DC9E84728E079CD1C087823471F599A2B02EDB097CD17B251DC10AF677F0E9B6254F2F7BFEC1CF9A30F4E5790CB671AAAEBFFB6862D8E75195D2AEAE9E40 -MD = 773679A3325D5906F1653A79A8F4B988FCDD6ADA0E2D7F5AE5E19889CFC941DD4528651211BE2039BA51FE5EF945CDFF332EAD5DDADA91CBC8F3F4B7EB86EA9D - -Len = 1372 -Msg = 6DB97D9CDC81366D8B1652EBA9608590A389871428F38725C8665F571E2F69B12D2268B6912D7AF51EF0C3B254ED335F3924675B2A6F83699705D3CD5DD8B2AF4A63DC44368DFD6F5D4E15696F4FCC71D6727ECCB83734AB9243A6C29C7184BE593D335222A2C1B15117C7FED7527B8D5ACF773DF6F61F34B79A225B66FF74BD1CF839C5D5DC28E08FEAC32A9C4959931D114AC39172A1F6EEFECFD0437D86309FC8538777A030980DB93610 -MD = CEA5758CA3638372DF8C5C0A34A21DE9DCD2AF6E85EA5C70DE6BF071F3ADE6673198A2B661C4E0B2B5D8066B4B4E4D96400A8142FCE2541855F8EA21D87A11C5 - -Len = 1373 -Msg = B71EDC0731A448ED973F53998CC6988AE0B5FB1C8A7B75FBA3975C6AD65E2F003528D6B1BEBFB236BAE5D731766E97784EAC74EE93B432933F72A94B063BE3ADE93AC63CE35A78956F9FC00063EF6170B565EDA7A71294570F0CAB1E80B924EBD343AB451C96A093D9D8823B2CD2287C45298C800B1433F0C5496C1652008147D7F87B160F717E6F57BDE6A5974D46F25CD8CDD9202E90098487088461269E21E581F12529600E68D6715AD0 -MD = 610FBFA4266050450C2CEF2FE1CD8FDCD722B4B7F75178CF66ECC71084EF622B23A7F07F1C89FDC6BE0F38CE486FD8D53DB46F9E0C17D9F48144E359639E4AB0 - -Len = 1374 -Msg = 64FAAB8A8E7D4548A733309F81FFCA40517CEE9EF4B134157940B0E52C8F071EC60F073BF95C1D5172999783B8DC13C7EA5FF5E487E04E681D307C89AC67185882A5DFA18593D3C6552490A06741814DD43C333D2E70BEA94D3DC2100FC67886B27378541EE26D8AC08D14BB1A0BE10963B031D821FCE5FAC64E267307F04EE942F5F2D4B5CF621C2BFFB6DCCD03A200A11CFBA6ED13E48E9DD9D9BFBA1851159BC9E8AC4A69D0A97DA1AE88 -MD = A58E05E75775F99D1A8B4DD618BFBC56CFB2B7EE9D0DF075A74321CCF53B7E52F57B1FF88BF9640E8616E610EA05DF157C26CE7D998ECE2CA04CA6DEC7C44048 - -Len = 1375 -Msg = E8E01A8CC8EA94EDC5E43E3B1E147DB402CE56040B87A3C4036D868AB599C4B10BF522DAE9D96551C29B2973EFD816310DD4EB56DBCA9E4F4BAF51989A9881A5C5635C4C0D6737D5C34C89C6A5F0B23D4CAE3A72FBC6C52E3B660BC9A169AA805580B804DB77027159CE5581C5479A070FB0781E059FD422F7D17C7BC14B8CCB600ED857E1C0951C9DBD9EFE72A65C2D937E9405025A251DD5C8BEF9EB191D89F035A660A4BBDDD74BFE8606 -MD = 53DD51434F8B7EDFA33D7963B20005D2CE61CA33D8667CADB1858E1E88FA64BA6EB2A46F6780E686B17F94F084CCE67E8FE0AD817C7C823BAF740F115EE761C7 - -Len = 1376 -Msg = B10C59723E3DCADD6D75DF87D0A1580E73133A9B7D00CB95EC19F5547027323BE75158B11F80B6E142C6A78531886D9047B08E551E75E6261E79785366D7024BD7CD9CF322D9BE7D57FB661069F2481C7BB759CD71B4B36CA2BC2DF6D3A328FAEBDB995A9794A8D72155ED551A1F87C80BF6059B43FC764900B18A1C2441F7487743CF84E565F61F8DD2ECE6B6CCC9444049197AAAF53E926FBEE3BFCA8BE588EC77F29D211BE89DE18B15F6 -MD = D4748C8E17F4117BF2BF71557ABB559247552126C36192C5DF5C6C3E307D879B703C3FCD7099DDAB243E2F1D5AE5066990A7B38D3F2CD7FB115AA6D135E7261D - -Len = 1377 -Msg = 52C72BD51E24E67F69619F02DC7FDD64EF2ECC334E3F425CC96D9B634A0FE1346046D4F7E19A7075562BD22EA8B335AC3E1068F86254B43DFC388B702E77D90B73BB0EAF6F341E0CF78DA95C9D098911E7A93B691160CCD7615AB5F7BB356D5551326EEBBAA00D6CEC324BF08D46DD0092062840BB790C5D4145EA722B7840A06B4F814E0CA2243DBFB1D9F869A2711C691004FA56CE16CDF67886C6FD0C6280C4A0662DD7DA7215E9BFB3D480 -MD = 7EE33A4D6BD03A482BF1441B13A70203AFC19590AECDB318F334AE074E1AE927CB3FF7EE4A02AC7CD4E45B6BC8BC2DC5D6ED15CDAEBCE2AF3119C8C4880B4182 - -Len = 1378 -Msg = AFB597E82538398591806218893B1FA841954B165037B929D0B3524F9FE10D9F0427847F565141EB216E27FD2A74A7293D3C6EC0C6652F02E8F68F9CAA1C1711CACE6681E857EC6DE0C2F4ADE4965934A0C2CC54B2C3B5C8C2F4C8932FF2EF22860EF81776EA18DF6C3E03E9F61C845CB8971C63DD9D7DEF53CF4EB71BAC71890E08855A5134783A2268857C5098C30906118DDF44A60ABDB8289045F183936F65E5F036D92A5316B05DA64B00 -MD = 2FB0AFBFFE4FC7963F3B0A5F4257D6DAF797737D9F7B9DA4214C61E32C16444AAD8EBF6050D12A4C94BC650B20A4BD2D2C156E908A19CC56716F172D0DBCA9A0 - -Len = 1379 -Msg = 791B9415322D15723051857ED74D2ED3C7C6576BA23E8AE8204FC05588C16C8FC70D6005ADBF7C96189CC8B0CFC2CFFCCC6623ACC59E5C7AA94130308FC98AA1768279DBBFEBE893511B10C23B93173D0E0D0045679F0DA7E3003034F01A7078D37A4D1061D48674BD924612E9433EE034D3EEC990DDE038FD2276CE680C933E6C987F20E3ECAF01012CAEAFBAEF8CECC41CB42897ABC51D9C4325507D22833F2ADB7132FC8C653357308E7880 -MD = 42B924B04D22192BEAB31CEF77C02DB0369B0D80827866893FCF59C16D73F448887819BD9A1F0E4AA0E084C43760FF9D023C1C5F990E0AC096D0B7657F81702B - -Len = 1380 -Msg = 2CAEF41468981905BE646B56CCD195134864FEC4EBB1D745D797E0F1C0248E7B56C2DBE73EA06F0BBE9033AE741635B947845D0DC4DEECEE855B4C7017E638468F20363B60273F6AA8EC3C5440E9D5D8CF6EEAC954B54D37343DABEFF6ECE1D4F9C85A5F79F7AB64C10B91CC6A9F5309FDC8C36C5704870537131E9918CC44FB308679EE283E729A097329AE4BCFDF8D6244EF97A7BFCFDEF00A6DE4B1B34A5EF2BC34DEB40C98F6AF8C7BD910 -MD = 33D84D658EBBEE07EFDF7D51DC27222A26E39E7D87DF772CEF78E260DB8269C4B67C0B371D81C62B322C8D54185FD15DD24D60BBEFA3B435FD706D099CE9160A - -Len = 1381 -Msg = CD157A1F0076499D06D822BBF48EBA19FE4D9EB7A0CAB55581EA89FBB362FC67FD4D58567C7AE04A55FC4CF821A28360911782838ABE0EE4BEB982382059F5E4E944338AE9BD974E9B4430B65FC8759D407166D6C4AB9EE23F430E7018988655BE974A8FF08E4B932858FAB8CD314804FAA12B51B17BEFFE6846B0D3F3A5A42A13D844846ED813405D3DCF7F06C51B995D6DACA4EA50C9A77A372E4D67C295B1362EC96F6DC442032D56FB1E68 -MD = D24960DD14F5D42DCA2B9B2FCDBD9EC8C53C51463CC844ACDDB0613FBF1BBE164F14C630FD1CB3D95B74B56BD7B5D2413A128F815D979FAADB253B960CF070C8 - -Len = 1382 -Msg = C4E9236E259392165FFF38AF36A5797AD66D670D0CDD283409CE1B2DEDE1E3D2CDDD50003DCDEAF3602FCA089DF1749B5718CDB1303488DC3479FE9C6D08A9976EA90A207628FDCBE513793068A8D6B1DC7B2CDCE92BDA7C9E3AAC8EFC00A9230929B3B4752B1FF753E20A8F79DFC65FE433B4B2A4BBA4591B053CAF333F05E590DD9BB5191AFAA8B6AE12FBFC92736B5AF3DF31B3900C76A443B667394FE6AAFDC0045D4BC3AFFDF4822E565C -MD = F378E1B7E8B5E76B11D8E38B1F7211CC1442CC7F008D1F7184058B526F0AE852D26223C80EB39BADD4A19559FD7FE8359872DFF445768A8057702ECB0FC6DE8C - -Len = 1383 -Msg = FF273A0DE1AEA7B291BB606A75DA03511A80372BF12777462BD2151B6807604CDDD0DA1912691FCC03143C43F3E01E8EAD912FA16A2C31AC1C09144ABF6A41F300254EE0DE5858AB6E9536FC6C03F6DBBF91CF2C1DE2604BFD662072299C6A1547F1C3433B91BEF6616B7CD723433842ADCF6F1D38D3B6E3B28F603C068F4CF1712F3A8A2B7C5778F167F835981665B1030EA8D2591C4C5EF22897BE6BA626853D0F180A899CA8377943829646 -MD = 3CD0A5FCD5B8BD8564867F5FCF0720A77D2455FB519FFE6DF630FC3C76EBCDE3C0C56C4EF7BF49A1D14732BC6E8881E41E8BFAD565E18BB96885026E42E8C7CE - -Len = 1384 -Msg = DB11F609BABA7B0CA634926B1DD539C8CBADA24967D7ADD4D9876F77C2D80C0F4DCEFBD7121548373582705CCA2495BD2A43716FE64ED26D059CFB566B3364BD49EE0717BDD9810DD14D8FAD80DBBDC4CAFB37CC60FB0FE2A80FB4541B8CA9D59DCE457738A9D3D8F641AF8C3FD6DA162DC16FC01AAC527A4A0255B4D231C0BE50F44F0DB0B713AF03D968FE7F0F61ED0824C55C4B5265548FEBD6AAD5C5EEDF63EFE793489C39B8FD29D104CE -MD = D8FF0481A63890F0E5A536EBBA2F253FA2CFA19C0F353587AF4BDC3190E4F8F54D17D665E8B2011121D444BFADFFF3E192D97FA03B849D63F36DB20F4CF88A74 - -Len = 1385 -Msg = EA61FEE3D84881B73252C723EF892EE3D60A8C0E7110CC35D63AD57F0763804DC54C312A2AC900A3BC853544FE1B9E8FEA9919DD96C7C4CF2ACFF778A7F7D7178D60E7EFA92D2D4B799DF82B3211EEFEDA49A0E95EB20A7396295FC7C30DC364D74FD23C324F1F012839B51E972630AFD62589AD3B153CCD5B9BDE845312D62B2A62D6D0C133643AD6FFF829B2F4CDEE0A398484FE203A853EB509E1269CD5EE7E7FBEC1B0FEBB044AAA36016A80 -MD = 5CD152FD372E6CD868E1B049EBC8CD438188BF77CF0A39AE280EB03853E007560031E0078E39B2FB9A0ACC8A895553E19DFAA640B6247A665E2FABD586C19DBB - -Len = 1386 -Msg = F1586589214B8CD84E5D927FD50736234739505CAB71DF09B22A38518ED55A880BED800C9E631F6AD8E6CBD3A92412A53217E5B8CC92E75235FEE0B383C7D336918B029BB7187978F15271D48C7022A99A048F93570E358FB8BD973FAC8D68D635E5C49DEAE188F081A21B6D3A029417DE1066235E2DE8D52FA10F4F593686BF534337AC15500DF139C391EF3E4EA43B4A1530498BB6E90AD08C1B7E0878AB1AE94913B36185515B3FBF7CDFBF80 -MD = 76FBE77BDB9F3F6101B11482E6E47EED725BC45950F117BEE8BD3BE3FDE58DCD2C37ECCC906EC33F34E9C09E7DFA4FD940DD0903B0A9D9A21F8FA2703EE7A760 - -Len = 1387 -Msg = ED10EBF6ACDDEECA6F59FC92B58DED1903484E3760DF203E6553624144B1F2E092522E1144B79DE50E741780BCCE881B074CD9188A978428B1246111C894098A76CEFC4D7DDBDF92DC1D86BE09271F5A85D058DA63441B51AD5C10CC9E9262B0ADA8196AFD5C8B8B89D5C69FD4CFFFFB402ABA352236D582A16896B338A69B9571C79B53F3B0103267516998E4A709DB983462037DC23132E4611A4D829E3190CB58F0FE447BDC3AA224EC768C00 -MD = 6E89449AF772DC7E1D1876FF06EB8578C7274EF61282DB5B92D58195CE813A23F6C18832AC1D79C08B685723DDB0E4659834547352632C37AF2F4ABB10546D4C - -Len = 1388 -Msg = 4EE2DBF84BDC18BF4069449BBC6FE90C089D53371B8414D74F40FE3D43FF5F61541C643E259A0DB2A34EB8E7DA502C92A3919F29C61FD3365E8D7F571FB862341A2B6AD9BF0A4F71413188C47C3D4DFF35026AB91E55D4B3B659EB721170E89FA87E076124BFE598C254F5D9B9B5E1B7CC96E45F11402729FF7F8E4071AEC38C8EB303E3B7889F7922B4C54B8A66B5131D712809A7C18245EA099401FEF20A89E5F5680807BA7AA320CA30250B30 -MD = 569A7F6E9490BB2F4EE24A2A204DACAB89272644EA01897B3830CD0CEF5B5FE3261DDAC6BC64A103EEB33359BDDF15D00D0D146EB7464A009E99BE6C7CB15B62 - -Len = 1389 -Msg = CFB1DB8692375D3784AD79DA62D9BC0C04365706936AA01B23FD2351BEFD1BAE7DAF96B50C6BB7E1FE2303C50E4634C0812E3F097E123F6955ABCFD8F5CC6E37F68286A2135A327C24766311F5E1595024677F5FB1B3E0D7204C3797729A6EE71826D89B8E96E3D31AB98BA6CA2F266C39F8710BF4C15F388306077153CC26F395806FEA930C34BCEC873A20DCC2F9CB2D77A9C3D4FA3B54B20FE1FC2AA89D5BBF0C881A5EF04FFD73D51F701A10 -MD = 46A05F157D100A276C5871C8E66FE8593DAC2C1939329FE24ED4FCA2F3E270B2B17EA180421D786476EFAC121DAD2C940A217858797F4A2194F182B1BC8915DD - -Len = 1390 -Msg = 8686F3296230432C11D4C534409C7F6C9410C6F01791E137C456874DD6242AB34485785F08233C78010C5EFCFE3AF755B9EB61D0E311BCB971EDE86AD070069599D33FD628DD4C818C318462940AABF9577199120D7E3840C2BE07E5BDA2F12DB777BFF7251048ACE87FE6B18F33630C2D6A50CC9A6B05C2C85A7A9972147A447CC036733B49CC5722139A2B299BA81ABCFDB83544C7F711B602A7C8372B0436B304C303151A4BE6850F315C8608 -MD = 23DC13AF274F32FCE526E9AD7AD0AFE21E1498957FFB315356995D04AB1EB70A678CD6D5BB3897559EC88357D357A3C56FAAE58EE34283F4912813A512120A17 - -Len = 1391 -Msg = 16C331314AAD721AB955B9C268B2B40C7989E438D91ECF65EBDBD4ABBBAA69D77270FB48BA3CF63B249E78B58D9AF7A57E49E6883E1457188E20D1F8AA8A04A3ED5688E6E0AA4A0C011D02C04EA127D0F66908FEED9CA100E66C976DB5EDD08B832402644537E2ED1BAE1567418B11F017C026E473236B90EB1E171288AB04B945A494282A6FCBFB901A7E567AB31A89A30034F78AB6D8D199C4F03470CBE2BD8374C81866BCE9E91233E1BDAB52 -MD = 1E2201D3B90192AB77DE23F18D80A5485E19E4D8C9BDB882EA44EBAF3F8FFC175FC5EF0577B9063F8AC50420563868BA5E9AED336C8A1E7B9B58A244583EFFBB - -Len = 1392 -Msg = BEBD4F1A84FC8B15E4452A54BD02D69E304B7F32616AADD90537937106AE4E28DE9D8AAB02D19BC3E2FDE1D651559E296453E4DBA94370A14DBBB2D1D4E2022302EE90E208321EFCD8528AD89E46DC839EA9DF618EA8394A6BFF308E7726BAE0C19BCD4BE52DA6258E2EF4E96AA21244429F49EF5CB486D7FF35CAC1BACB7E95711944BCCB2AB34700D42D1EB38B5D536B947348A458EDE3DC6BD6EC547B1B0CAE5B257BE36A7124E1060C170FFA -MD = 52D771B5016C6B1B93D3BF6A13F718A7B4741D528798609308B54CEA6037862D923751FDDCE10580A7D6431BF208DF17C1B825F7C7401CCBD6D806B744241ACF - -Len = 1393 -Msg = 418FAB3A13197089C90621B9BFE43DC2096DC0A0F50461C17AE025BCFED1F8DE587F6AB515EE1987C6D96CCED7F80F9112ACF4B67BE67B0247414EAB033DCCD6028703BD346DBD61A478EC67C17C7DC586563997FD8AF3C9CCF7E5D66D25386FD7F056122C43788F502C14DFEFE435720A277DA4FB8456C237C2828A7442DC934B7D1B1D240562A5AA721BBA9A6E87ECEC6E55790D71B00BF1D8C27D56ACBC553C6136839046B1B111A0919EFCD600 -MD = 86EAFD30213905AB52B47F79296E2737BCCEC3FBD2BABD8B39194C1303BB322322DBBC684C4389D19EF74E8BEAACBE0A84CFDC0C535C638624EAA60CAF0E6A8F - -Len = 1394 -Msg = 2AF8395D282C705DD7A2DC02E6F79DFADF23E7E7DA63FCC4E14D60FBBBFD723F5CB0C861AA79AF16C425E11D28FAF444C0C1A8A769152C92AA9E8B366A8553C596D68B0290F19F47A3F7D597CC04ED1A0AC32AA7560027633E8CF814208D6DF5972BB2F8752FEBF4B23BA23CB9CFC4D5908FF74FA49938966FCC9E95A31783CD9B60DF0590E8A74AD8176142C788C3AEED4DA04708E4F0665AD24C8A100E09ABF9D7CB5BE9A588F45FDAECBB81AAC0 -MD = 3F0FE48BB793F993A7479F379206C448742393E69C4D537239D037C5430AC8A8CFEDE2099DCCDE85B05337AE722EEBA3AC19DA0CFBDDF5B29120E9CFEFC4E9DE - -Len = 1395 -Msg = 18975325469743A4A76EF7C718397A460A489DD0FB36D977D88FE12BD1BD5D1209362A1D116DF0E627F7C96187BFBB7DA8702349F246267D623BBE3C8B3BD69A74149D03DA66834D65AA7B4371842227D6D336456C39FB04CC61A2469C5C5C97F325B1A86D87A081599148E50448FD3ED41F21083B718E875B13CCB9070682A56F96DD27D60D13A15808A80422BCB26429B857B2DCEA20AD6B26B2B367B0F09482616152C180E84A907E8EB7A2D800 -MD = 820068A1791F45451579B71CDE63FF614250BFDC0E8F8CCCBB084DC636CAADF7E2E38400574CBC271A8AD6DFAFEB06B3035C01AE48A08E38E7417D593A9957C2 - -Len = 1396 -Msg = EBA3F211DC5247D0EB7583D5A99C8A3A20DC6B82A392BEBAC86F083891E04FA0DB97A3B6A67062DAD957ADCE8F6168FEB5A9BDC8A708FF92970A66F930179C8DCC4FC33D39268C2347B2BC2D42FC27E64D4058FEE185B79547DA0EF0B07FDDFD88DED5A12EFF174C50D6978C3CF28C08403B6D48C36E15A244E3170E217C6E5F117E621214C327824C59176EEDAA2FC634FE9E05D514455C8BE239F15949D12367969DC6E5C9BB3E733DB09A68E2F0 -MD = B740990EC85087202CA54C0E6C22CA54D9BBAA326A68F208F9AF40CB981A57F1475F28E4E06F53095A508BF52071BDEA80574FEE2754BB1714DDD8F718316928 - -Len = 1397 -Msg = FC42CE9E24AACE4B51A0C3EAE31CD7E0832708318A2B07EBE636DA95FBED1A3195456FD4C465CF1E568CA6B5F015EACA47801FE50B739850CE728C25004D0D355C6405638437A6DC1A27CB10D4DE70597DE383E070C46E798E96191A326D4C6F42DD6F64BF8D2D3E87F5C892E195F2AD6ADF16D2865F2DFCF0759CD495925FCBC35D7F62F1BDBA3670FF0F3062F2975D6D82A532437EE3935A4DD1268BB280E2957BF171571105EB7E676546AFA438 -MD = A6E055E708DBBB3A5799A753E3890E57C54AFC6DE36E43CF160A2162F61A5E6A2E2558450D1322D6BD02C8851A683E7B197A63EE9FB5CA3334A8766BB5953302 - -Len = 1398 -Msg = B2F147D74B33F101A11948F56B0B7E5FF2A1F30C5944B32ED076E09E18DF1B803CC368906E1BF021B9D3305E8B992594B2C461CB7E89383C7860D4DC1CBC4B503D5158C1D81CF752483E46C28AF0C8BC0A51A9E752AE436CF5D06A0C4CB15ADE6BE96AEA3365405FF63582ACA21CAC5F7B9BE377D264D599C410B8D01CCF332CE15D56F9FA7B79919DEA2359653E8D7F0E9FCCFCC48D1F9769B623EBE4E2E6973D792F790B63D969FD5290B93D5540 -MD = BF78127BF4DA9C72449EC4F2D8C9CA6F346BDCE59CB2309E4EF69F89D9C3850F5E5CEB11794E8B1457DDC9BC1C2373C5C6FA24146193F91A76F0ABB267F778C2 - -Len = 1399 -Msg = 440EFCD5D8D5CF760A5DCAEAD7B30F9E0BC1261044269AE4F9458311DADF289B5E8A8FDB1214B650F9BCCFEEB4D0B27295C4539D40392776667B8146CAAF5D8E7DE6AF353EBE6305635943A53DF4391C88D8360168D4190AD62FFB48F31FE986ECEC14554C2377E40F426D674626823575C1A40B15C54A706203A70F473CA441300CA70BFDB191050CFEA75961CC631768EB20AB21F1FD8CC5D64A5DDD885917D15E16ABF8B078A59B6D8096E76E1C -MD = 911F126B0A2F18E38E8A2A8A43C7FC92A7CEFD5A7ECF04D8B8787D37B7C116F6CCF309B15C53DF1E9C3F2FB463949780CC2A5AD6A71173ECD5E596500CA9AB0B - -Len = 1400 -Msg = 5ACA56A03A13784BDC3289D9364F79E2A85C12276B49B92DB0ADAA4F206D5028F213F678C3510E111F9DC4C1C1F8B6ACB17A6413AA227607C515C62A733817BA5E762CC6748E7E0D6872C984D723C9BB3B117EB8963185300A80BFA65CDE495D70A46C44858605FCCBED086C2B45CEF963D33294DBE9706B13AF22F1B7C4CD5A001CFEC251FBA18E722C6E1C4B1166918B4F6F48A98B64B3C07FC86A6B17A6D0480AB79D4E6415B520F1C484D675B1 -MD = 36D472A8AE13D1E70E1FD275117FFE34063BEFCCF6706FAB0816E1B81F7FE7F2DDB2A122F1F52C9950644659430F81BCEDAD5D833DF4814CF60AE6C542CC4478 - -Len = 1401 -Msg = A1DD8A52168BFF3504304272CBF393FF2297B1DE115511B7071FAF15CECEA7C1D2E498C46E9BAEFCB0145D4FD220C38271E5AE6EDBC482D3214E3B6AABFA141BD981450B130E971BC0E12C0EE89DA62281BB9395C9935EFE474D8E6F6B99BABFA0E4A6538A90C51E6567E1C8AA7E8EE62E8AF6290E3B74295C023877B8909F00EB53755A62B089C0924382CDFA7DA75521056CB6D1C6D6FCEBCE124C7DCAC671D02BFA5E5A8A49A4B6880F33ADB88900 -MD = 0D8153CD191F42FB0BDB60E3A566FA4A68BB290A51580D691B850A3A94EE51853E43BE760979B2B7E99FE385BC55E8EB4D3B1617013151800EFDB6AE044F13D9 - -Len = 1402 -Msg = AB6037D426290CD66B89DF7DDE674805C863F8101C2D76443B1BF25707B695B8174F0C942FF7D2F952339FCC936B2897E7BED9C02371A5DCE95D45DA60769F3DE0DFF5A42B962AC9AF1A1612DDEF9D2D586E7E3F090C1C34B9D621235A5CFE124BC4153A1F78DFA15261F7681237D7AA132E96300B9313CF456F0A04188166E3AD6D39858D16ABECF77244BAEF5C72AC491724C8603CE01570EA1ACEFDBBB50BD9BDCFF0BCEE8C1366B0A6B6A5ED2E80 -MD = 2536F30E17F0AF11EA93BE8F1F4E816523B19597FB4CB92429238E83EA5AEC323D97CC2F5D00B84167B9F357F2FA62DA8EA3A28EC366961C257986BE4A45E439 - -Len = 1403 -Msg = A3550EDC3CBFBF03416D72E2D0597D87BEFAD3D31F5B34C4FC50EC47E9CEA45E3565AE04D27EFE21DAC37660356B1CF75D3BBC522CE936A22F8219E0F27DA6BAF3D00D5793BBC2A9CF0960DEB3221844E2C18E37BA2176098C3656AAD8E69FEA5C76C4AC9EDC05F19B63D7D867A6C848899A42461EC6AB4687C0667C42C539698E755B6DDFAA6F4F316BD4A8F91DD173257A309E6B62A3090E6E5AB0DAAAAAD1B8F2DAC5D03FD2CBC3B804A951143160 -MD = E2D5D4D6E6DF054DA922E7F8C72E16BEDE710231C07DD3243CCD8A3C60EB49CDCA6CA057BDDAB83845821F0DA2B1742BF4FB17F579D14BA09DF5AC640C8251AB - -Len = 1404 -Msg = 338673A0B843331C60FC9FF2EE15A4DFBACB8E77DBB541AAC44E2F6A9226355535E54FDEDE98A71D970F21E1B549AF75C7F91DDAC6693FD1AA4AAF970D3C2D88B4636DAF4153B3ACB92CF76529D9ED18D31EA1BCE1563F1F3A076F97C58A32583B137B9BED88D9A8DE9648E14462A7154226B949EDA577D3888F7C9CCA560FBB53808B32713BF62C95515D857CF630E3EAB52C50CBDE730B48951D165E14FDCCF9B5CFB9ED2169D9615002A6576CDD90 -MD = 17465CF69C919E284062E109FDA51C2B4A4D58F43C9C6AAE007112F7290121F3C580DDD0D2473B691396E7372D2118506955C0AD3A09EF6E1B526E56D2340321 - -Len = 1405 -Msg = 62C779F840173FA00C27DCB9171DA91E6A8E6CD65805AD17AC31435DEE8C50F5E3EBCC4A9A8DB116CDC602138914AF21BDBBB6A962BAF4C49FD73C1A55E2A3F4C44648E03E5201D6FC6D298BFC3D6716FC3A5C53989C53FE933BF16659BFCD46DD099790E2E617CFEDC88B7F5A48AA7BEE7AA5B910BB748BF089DD12339444EA9029A90554BBB75B5AEB36AA400C1082C1C92BD27F442EF0C93994FE3BBC4559B94DE6E3629A9498526212ED021C1980 -MD = 2B0E339C1E8AFA6EB689DF61260213C7ACEBC557D7C87E157428C05B30F2820E7777DE0E8D89257A6E6859CB34D4F7DA791D30B1FA77FBF0BD113EFF2684EAF3 - -Len = 1406 -Msg = 30F3656BC45520F876ED30757D6F6D6A3AB361C76C8E6C5F47CC7C81A4F0E25D8AFAFFBA6C40E831E6782A09B1EAA138D7933ADBB8C51D4E74B1504A8B40D7D54F70476AE16FABC3C64F71E9F9C8B62655DC2D8D082E0E045E133430378CB399A03E2AA0A6ED473987080CF2C5F8546A1F59680FC1A356A99801CB291EA68DEDECBF5178920F3077977B99BC704294092F4D0066CCFA76D38E6AD378D3A7D5FE1BE18C9F4589311AC6EB2242C812A7C0 -MD = B4DA6E0500E35EDAF41B40CC1D18C922BBC5993D712502FA4C78C12788BCAA84D03F6B57A488E77BAA7AA2F45ECAE83168EF2F4C71041FE8E20002D4749A8F43 - -Len = 1407 -Msg = 1FF51A1F8BDF6283E70E07F6BE761AC51B6731DF858232C78809E1526010464A70DBEAFCA5A165C9E1764A0E6C6EFB3E911D034E9BF99EFCBA863216C261A404B8B825E9E8098C226BB7D644CA4DCD219DBE957992A82D1950E7D2992FBA55C7C3812D61D51ECEC3A6ACF5F09F36E480F2FD99BEAD455897D32094A9017086E5B813CD39E2C46BCB31E89AD6C6BB10C58EC67D89E4FD4263923EFE969D89F561A745FAB1D1B81BD48DFBB27249C386CA -MD = 6AF4138293EA84F81C7E42D3D0A795D3ED0DCBB1DB5E85C6763840B0317472C99CDD66CD88BEA845CA833CF785B0F1346367B986F12A53998E890A4F2F211B94 - -Len = 1408 -Msg = A5AAD0E4646A32C85CFCAC73F02FC5300F1982FABB2F2179E28303E447854094CDFC854310E5C0F60993CEFF54D84D6B46323D930ADB07C17599B35B505F09E784BCA5985E0172257797FB53649E2E9723EFD16865C31B5C3D5113B58BB0BFC8920FABDDA086D7537E66D709D050BD14D0C960873F156FAD5B3D3840CDFCDC9BE6AF519DB262A27F40896AB25CC39F96984D650611C0D5A3080D5B3A1BF186ABD42956588B3B58CD948970D298776060 -MD = E504AD7F33D65B8D3487B28805D478778C901C0AFF5F889AE95E2919B4F431A80116A8993469E822895F3C21A41D67AFDA93A5B29B6250F76335A76FE8919274 - -Len = 1409 -Msg = C0A3AF99262209CD3D272635B9DBA05E7A15EF5C0BA6326EC15C1C98704884C0962363F0B9B441C7188E3E2FB8F12DFECA0E17C89DAC0D58D7206FCDC50259990A305BCD1B748E8E00E9757094B5869294136E977F889D5A2760FCC03678C283289397848039FB9E7E1F45EC308198A4630B48FDD54D57697A190653B23251385C04DD77397E9C27428AA9202554A1C170C813A4FB4B9322BE237B406BA1D5EA2E8F1CA247A135A16AD8E28B6724855C80 -MD = 002DD670A754C8B075B26A612287AF5E9B76076F63327B88AB8EC1D9CA59D9C8F8CE7A4C7551C9095C72D4E233CE37A9F573675807C1BD6778C9ACCCDB63CC4E - -Len = 1410 -Msg = B0BC6D10B7393F90550D82BDB1B21ED87219D301CF90F738557E606680476EF33A181F939F67A65B40D6BE99E4715B7DC6C8A78F78D38C94D93AD4E342E25543A18381D3E7CC932D7578F3386C0ADD1C20188100AB99FF739D6E9961F86780089DE081F0FFE54C38682A1B4A320A2EE04B2EAFD2D8E63D691ACA60B35B49A3AED81110805FCDDA7819D6A19419F507BDE40C998B2095294714A51D32D46247DCC162D5B24F4B80B9C631DC7C542323F080 -MD = 595164D22F2ADCADB973422A53AA14FD8CDBEC9E71862BC0ADCAE3BAE119A813C3D8D0C2FAB66A60490B4586E120765A2EDA866AC419548BE3648824CFD06233 - -Len = 1411 -Msg = EC886F18CC5512BDD6AC13D5B6711292FBCE5346EDF45A688F4130E5914E565EBBFB4EB6244759D0C061170C730A58DC4A05D9F7CE785EFD635AA625B47D6A5A2BD4FF4F12F3DEE95CFA066750C5EBFEE47D71B511184607EC6ECC71DAFA87CA7348612F02FF564E468B24216C9ACC6A9D0259627ABC4CD470B50FC4330D60643D1846E1B7594B01CBF63505EDC5938AFFB8A497BFEE43025BA7FB323EA46F2261F04ACF96E381DDE0E4AD3CD7D86238E0 -MD = FBF9629039E3F1C3A9CA44B3E65EFAB7E723067D52B38775987FFB3D97783203D5533722F9664BD60C8763DDA3F8648042975D2ED141BF0149E566D9B068292E - -Len = 1412 -Msg = 813E99662714AC60D61C1D7D7F7A5269D8902FCE95B7609224F8CC92F73EE92385A27E670D70EDFE5585023F22A0053BE490554AB97ACE2D0997D7BE77F61C9FC192C0237E5688FF34AB7CD441460A4EF6395AAA2C7F2799CDD143531961E6554A93459306874965426A3E1C5A075B91381DE55CA07D2A783557B953F3DAF67FCCDEE5C0D027D335D07615B75CE699F41EA0B53F5B1FFDB2CBF0116BA1531387E51FC65F9C829B2A504E794932BF5E3A90 -MD = CB7B58FA33AD8386FBE1923D29192ED72F516A306F67171EEFB57FE81A05421AE721077CD7378EE60B9D2FA3DF1FE73BA877666F08276254E5046A75CCD823D8 - -Len = 1413 -Msg = 60B651B269E159E5B8C5A1322917C61AC875B4F508F3534D2AB8545BEF7F12B8EEDD363DE66BAD766C86C102E491C29CF45FB7A114FA2BC7A4A95D61A96F8B159244FF088528F7B5B732FAB280EE2272BF4D4A97F167CD546941B8895B27E170DCF46CFD7E045810AFA47D16C8993AB09617C137DB70E84BAA445440F2DE8AD261BF74722DE32286BCB798393CE4F997B2B01759908854C4C45391EFF7BD4F1918F7B9E5DE12250A03CF09A81740C79738 -MD = 6AC97331EADA9501EAA4250624F6BDFF43D8786526735969F3E9F3504F99233AECECABDD3E3BF69C23E491842BE51BE4EAF749A35E0343202B6F89715FF23EC6 - -Len = 1414 -Msg = B8E9A3D80161E08435E4993A2B3D8FAB8EE51DEB9431DB1A7719E24563D2D2DC4F8A4A3D32DB8E0A205090CFF3656BEACAD4B680D41709E5933943B49DF67803C9B0502637B15382A81F3EAA1A91240347BE0595064BCD480AFCEBA8F465EBEE3B2AC41010660453C1897366BBAA433F6A3E8CDF9901AB7A4D38C8772F8BF0A8E7E9D637A61CBD9766A4554B8759F7750CB586D2BE320A18BED8238DB5C02CC227F4311D02C3F12C0C7435C036CB43A0A0 -MD = D63A22272C2EF6E8B055AEC9F4AC5B368CB4D7D4B97EE094EB32E5442804116F699AC978BBF5D33E268F0F021FA2A66C98B34C5C80FF83045CE264EBB98E7903 - -Len = 1415 -Msg = 3A65D42C96E4AA1CD020DAA204E7EEA764F1CD551EB2B00EC645C12427D10360A140BC91EA1CAC2EDD405DD863DA17DF51ECCEAA3344E9B79575F6B86823384024DDF524217A90125754891E2C509AFD15E9D34C414100BCB5D9B5AF98E95B54252E7C82E7230C1249F4BC5E05CD8EF2CDE11474628185AFC3EA5BAF7081E4E84F0522976F9C9FDB293721DA2BBD90B955592953CAC9635877B70397434A08D15F8EA3EBDF62A28B0869781138CC56675C -MD = 095CCBF3B9F8497447D54F389A9F47F267AB9795B8C0EE31695F6EB4FCFE6FEAA8A3477B26447ABA6F82D860DA0F867A998B4C69473DAE57E5DCC8F4A3E39EFB - -Len = 1416 -Msg = 06CBBE67E94A978203EAD6C057A1A5B098478B4B4CBEF5A97E93C8E42F5572713575FC2A884531D7622F8F879387A859A80F10EF02708CD8F7413AB385AFC357678B9578C0EBF641EF076A1A30F1F75379E9DCB2A885BDD295905EE80C0168A62A9597D10CF12DD2D8CEE46645C7E5A141F6E0E23AA482ABE5661C16E69EF1E28371E2E236C359BA4E92C25626A7B7FF13F6EA4AE906E1CFE163E91719B1F750A96CBDE5FBC953D9E576CD216AFC90323A -MD = 1DCA53BE0A34114447D1C1443B92B69DFDED705956EAE60BBAB39178CCB11F526A302AAE83720652EF4C5DD450A3647DF7B77C4664717D935B4F5B20F206FEFE - -Len = 1417 -Msg = 630F25144D78BF5D608715AED30D38FCCB9D529181D7AF8C13840A910912DC83DD22AD509C733C04D362B13A8A61568AF79F78020B83039C4DD9F793299D46DF5CC5DFA6D1A43A0497432CDCA64885BF7F091149E07AA2564A3DD1BE08A8465A7DC71CC41044AEE1F193C9D27B12A7A1B986C869243A560FDED3812C5D17A1C8B8EF47CC0EABF9910A9C8EA0014526C211D954299ADBDFF445CDE4517C3D9613E52F35EB0BC4FF6B7D0322E47B36688E1A80 -MD = 12A95C6EC76573A083C8B4F73AC40484F00B32096491E8490DD02D9369D5297655226F2A2A1DE9FFEF4B23D2594FC161040CEDF916A618AC275F0E5633FDC6AB - -Len = 1418 -Msg = 81515F0C225B6CF2BE73CA43A2B453DD8BA9310A72969A11399CAA2CEEFFDD68B44B1EB2C6AD5C92B15901CC7293DA540B50849DD4587DA32BD2395DBFFC4573F677CCEDBFF15CA06A14E737AA607942E31BBB16F96BE637B6ED4EE8FAAFEFDFF57EE9473ED97BAA6D7D8ADCB9F5EA8DDDC8092BD695FA669DCF9090C7F61417CD583A935E000E9E7C70348BA48DB4368794222D613B909B439B6D630ACFF7CD5A00858C5195D675C824D4B7EA2E6018C400 -MD = DD1CAD79B3CC3949591D8FAFBACDFE9BBA85B9E1F193307FD842006AB2CCB5B43A5C29A7BE5A1667B6A4582C9CD2BE9DD49947D291F5A95B44F0137FCBF68F96 - -Len = 1419 -Msg = DDF22A40EC1A0B060063F956521F0D4F5C578554F845600C747C7DCCDDFAADFBD8ACDCC6B3C4730CD22A0356FC5FB59D3597C704924F99F143D57BF65BD009A8351F04C879D75AE6667A9BB4A91DDC1FC7F4BCB0FF420E410C70B9CEC1672AE831598FB482216822C394925AFB758DFCE484F3A4FD41E2D072EE15D7DAE46858FA595B6C6EC51DF9D56FB4DF693D512E8F9597809D7C4D4A43124E8DDB196E924366173952DCDD9A385B0895B8118BB24820 -MD = FB16AF3EE56702BA7F9A094CA3798F381EE2793FF4316BC07B1F39568E8F8C75363977A2929D52AE4D87117200384DDB2376A2595C8FAAFC46D1CE92D576F762 - -Len = 1420 -Msg = C0D30C478BC1B4F00073128BD8D67ED36109A807E8950278F99F30054E610AB8144AB0EA6CFB7AFD181BA4A6B08EFC900F52B418D649A864464C05B27BE7A1034EF537AB4132A4D39D20D6E7FE5C368FB281E16E624A3AE185A89BDFADFDE23E765654BF5DB95DD04BC8860EB03AF6CB2D44F26B75852FE6C1EBECCA1BA0E1DAA247FE2AE936A7A7389A0358AA52EAFD12735074342410BAC6D62665DE6F60F1E381DBB70D24E9DC0F9B39CDE4F48A592980 -MD = C18AF67C527036D37E81542FE02A482DFB504C72269EBA8B71B00B8963CAE82ED764101A25CB3B4A49E5C70E2AE5AF4FB1A7DB29E28C7F8A3BFAB1FC01887AB4 - -Len = 1421 -Msg = B18568A3A8FEC3EF94AE11FC3F950E423446F6D598B31593C2EF3C85BAAA314E388446572B4A1DAF972C8F96ED05FBD30C2A7D9519F9F4D481691D6D80806BF5DD2A6B6BF4DFF749017F24AF44DD2802707637C9B94037DC75EDD16DAD00FC4BF273FAAD88577AE66E40D7BBA9DF1771E6EB4C8DFCA59F3F80DCBE713EAD814532E05E23D29E24E52530EAB98360799F69F34D84C4CD406F0694B07ACC57A6A5A3A5CB98F206FEAFB774B16EE8222B88FC40 -MD = F54029501707C723579CFAE47CE6A55887F1BB726A3859DECE489D5F19A550C736D9DD4FD1865AEE7D956FEA61E472312D33BE3B38F1C31BCB221DA97F466F38 - -Len = 1422 -Msg = E3C6B699E534C149A2F343D2E1D626992AA5A59101788EBA6D878EFB946E281CF95752DB91169984282CD9BD610C217058AADA5369D7CA45EE4B240AB84E8F8FDE3EB18A88015DDFDA475C146E32E6047AF1365899DBFF520993D42BBF6520492F7E3A1005C2368E2C45BDEA46B2B7AF9F17783CD3BFDD346EAD18142B348180FA173618B7385E5561ACF1EE8E5A11B583A94444A8B8483A5316073890396B14697AB3EA2DB759AEFCA0D723E56B9C43C5E4 -MD = 4739766A94280CA701CBA518D9162B0073ABE2C8E2B350BE475EF66BF4BE7BEEEB3DB0B789159FFF150D5C06901FD43CE50D09BBEB09D4FE8D28F249E3163E26 - -Len = 1423 -Msg = AAE187C91F8EC85BB6DE3F46E9E30D176C4E070818834DB8FABEEFED1F51557C6BF16EE80AE3A7465AFC513C1C0B92CC9E1E14C6C8D7A03375662117AD498ED2300799ED8B0BE37FF6A95D0D57BA4A9FEFB4BE43CC2B7C095D571986547F7825C83A1C6148891803847A7EFCEB5D78D835407D608CA8EA1E6FCEC4BB8BC26D700D04AD0C2306B148E00216421745478215917D3E5D5B17428C27A13566F4F87BDD020DE5A2B6FC4BEB0C0F73FAF72E5C868C -MD = 48C1E16A68F033A0D4DCB010F8A4C6102E16CD40753D440C347DBD805E691C4B92F6B261BA95D4FF467A353850EA66F3ED3F7228DF0C6C418F1E90C9DA7E2FC2 - -Len = 1424 -Msg = F1C528CF7739874707D4D8AD5B98F7C77169DE0B57188DF233B2DC8A5B31EDA5DB4291DD9F68E6BAD37B8D7F6C9C0044B3BF74BBC3D7D1798E138709B0D75E7C593D3CCCDC1B20C7174B4E692ADD820ACE262D45CCFAE2077E878796347168060A162ECCA8C38C1A88350BD63BB539134F700FD4ADDD5959E255337DAA06BC86358FABCBEFDFB5BC889783D843C08AADC6C4F6C36F65F156E851C9A0F917E4A367B5AD93D874812A1DE6A7B93CD53AD97232 -MD = CB1B03B180E04021E0099050EB6B7EB9092C5BD5C445E9D31EE39C724F038E9F619A96D3A2812CA7F208FEB2D074C3F817262F7504705623E635B9F273E37A59 - -Len = 1425 -Msg = 27FF5954E8891FCD89DABE745EB7CD5958DFF6D7E3E3D2CF97B2D0E2EE4CDAEFDA88C0758648BB079FDBABB329133F6634869421B535E48F989334E8A856ED39DCB05910D58DC95781F3C257B40BE661409C132EC32F608AE30D29C54A3654B1CFA4BDFA3D390C3C4A5E38F45A767BCB00FD0EAF9058609F1BB406C9CB74E407E5BDF239BA4E49436AC0372AF24085E06385798284F0DCE70945BC2527A8B1F120E052F2C07A4B053C157377563F3A90697580 -MD = 619EF48DF297C35BA71E6F74660116FB93D8AF4FB5B906FD870610CB320E59A385EB259E45212B7B1A9AEBFAA7ECB8D38E60716A9B2552F1AB112FA5728DA0C2 - -Len = 1426 -Msg = 42F0737B6AEA5ACA87B2C457D174D642606D7453D0C9A4506340BF1E512BE60F14E69BB3DEDB5B104AF7EC2C9081C8298981FBFAF0BD0E60BA4434EEE1851D921B04BE4C9AA5EC34448912FF855B8FFC1B21CEFCAA953501E2A941C931FCBFBDC04FF3BB20C5FE4F44350C940B3EAD03B51A9D96C0A207872EC9A0400D9F0B9034A2F52973DC162666C42B2EB62C79C00BC037675BCDB8B89A088F5C9D71D794ABA89E73BA02D6897F782587CB3D48D4EA39C0 -MD = 06E0FC35EE770B4EFBC74184C330D59A642E81DA252391FD5114A8ED61260B57E94B88D0763E1593CB3C679C4262D54E237396B44C5CBB136706A5911ADC258F - -Len = 1427 -Msg = 9FDB2A4D221AB91136D757429CB01EAB202E2F0CB45594D71089E64A3BFBC162CCF9E5D524B59E86FF0D4A17FCEA00527406F0EF14530340480330FD4C4EF48AB6C711A8426908207992697B270B6896F9100B821B763E2C8F0CF8AB5717835D8BC79130B33C48FF8B922E9B7E94C99B8BD361248211CF56D763363E9677161793541C04EB803377B8082D5655C3A3B407465CCCBB85A1F3A713EFD1F4D1430E25D6256FAB4E933F1A559D85F8B65A56749100 -MD = 5AD314FF00CD08EE713D4F863AD14E2BB3CE278A1B9DD99F495A7CB1E730AE3B85FD9DD97275101507862A5CA289D6301B0CAD729AAFAFD6D4B2DEF98DE6991F - -Len = 1428 -Msg = 057A73197CCC3B7A68FC6723BD1C32AD3D5E01AA6B52DB53D546EF1F7623F428619D25E3D7AC1704D6B23AE2D8433FEE576A0139FA46FF0B2E13D4DD413812E7B767E822A4C3CC69DF40B45478D95C1199270A6D28894F99584C2025156540207A3493E239EC7E95E7938376D0BABB5EEBF41C461653F9752A6CD4B1521E9B1F1163F13E186F8B82434A4DA1D8FA0882AD016456F046C7175FA0A8834C8D5DE4AEF28C986B8B5EF5CE4581AC6B616AF6F509A0 -MD = 93C3E49F3D392FC2CCBEFA92EEAD45479AEFE2BBD730714B249BEC86301227072FCC4CE04F89D46E44EF5840DB418C2F6D344A8A1D7D2CB1224DC987E379F0D1 - -Len = 1429 -Msg = FCB2CCDB7CB717152580A4D6FCB174C44B33153708EFD174F3AF31CA0A01C8DDF6C8F07E608EED84F450EEE51096F951446FDE340A9BA3AFB0C9E44E84208498A99D02C5959A37815516E140E3758B5E00EF67DBD9BDF8B3C6A01623D328F649620D85A757902EC780CA3BE2A54DA5A8929776DFD578C44A953FDDE6A6D35B6163510C22E02CBA7479D277F04883CBB83A05AEE5755342DEC6EC49DCB4CC44EE99AEE761EDE6CCF851FA3B23D3467D44487F00 -MD = E6EE59B5B0E8B1657FADBE53145BCDB9D32FB984D73A3469AC29D63D4741A59EEC7EDACC53B673833ECBD286242869B29DCA68F2A8F657F2DF5F950CF767FD37 - -Len = 1430 -Msg = 710712BFEA5E62A9D7954D7B01F3F8674990BB1F59CC6D822C4EF08AC5A51DBE500359BCA2F2A74AAC4ADD615396A30AE28FEFC53EFAE850FE9536815035A8B8BC064F7D43B309CEA40A825C008F0E4A0F9BBBCCCFF4C4DAB40BCB4AEA16926DE6516C6793C19BEAD079358EBDF6C08D5AAF9EC4D4B600642843B904C0DEF4D3B865A80F0D47DCADA317E9C341EF8C791085ECB7724724E7D8779E9EF05B4B7F5F813D6D9A37EFF6D46AB0B01CFB402B247C14 -MD = 6172A81909B33CFA9859E605AD7CD6236A7D0FA9638ABD28891749CE326344615635B6284057C0C431846EEDEB3F8D9F04365BE95177297AE03F729AA405E354 - -Len = 1431 -Msg = 84E71B4DDDC7FF264CDB550A47ED25478E863E97CBAA6059F471A13693A5E96D4433185C3F7514EC6CECD03AB6564F23D716B2BAE4A13B251F7DBE1EB3CDB00CAAA677588AC611BB45293C550B647A3DBDDE55B20AE6BFF0E6F3A1E1B6B6BD34731EBD87019EC0FF5E396459C70577587FCD0E12443FDB66E7D9C0C9C757DF7F0569E7F4BBAA06435C7CD2A7530197BEDB0046DD51FE2262FA729C048A49EE357F2D135F9A9317C163997CA714B3F6F5C2CEA2 -MD = 6F1AFF9117070CC39E2A4A1356C44665A1639127A23DB215E5FB60B8BA5568790C788A9047EA1E15896EE9B1012E6AD60CCDD1FD8D71A394FFCB822ABF95C4F0 - -Len = 1432 -Msg = 9D9F3A7ECD51B41F6572FD0D0881E30390DFB780991DAE7DB3B47619134718E6F987810E542619DFAA7B505C76B7350C6432D8BF1CFEBDF1069B90A35F0D04CBDF130B0DFC7875F4A4E62CDB8E525AADD7CE842520A482AC18F09442D78305FE85A74E39E760A4837482ED2F437DD13B2EC1042AFCF9DECDC3E877E50FF4106AD10A525230D11920324A81094DA31DEAB6476AA42F20C84843CFC1C58545EE80352BDD3740DD6A16792AE2D86F11641BB717C2 -MD = F0482F098B93624BCDE1AAB58097198649A8DC84421826D1C1011AD41B948384C8ED5A97C64C134B38A0075812A35F9CE3CB200972C2ECDFC408714139B9BFF0 - -Len = 1433 -Msg = DBB381C83C3DEEEA298B3675314561096DB1F8447B93ACD2588E66C568C111B9DDDE0E5B504A05C041D0DD293D46303D5DF2DF40AE977D85EB2DFBB2B572D41163808F3B227E2C5B262EFAE57C3FD8E379407C1F05085686388F731B0AF0E085ABF39BBB8A73785E34B4ED59A10C97112FDEA64AE17205CFBF8D40B31AC29C206E535D0EBE38BECEA633E47D2F5BC8B35CA5FA6F87C4E22E3789D797E0E3B6188FBA2ECDA83100D3360F73B5AB2D7305353D2D00 -MD = 46375B0D5E9354ECC78C42494A2297EDC58A97ADD5CB28DDA81DA511A579E1C68FC08E44FB3B618FF48DBE8B8316DE3A967BF109330164E19A99291741FF0F11 - -Len = 1434 -Msg = E0CD21C86AC23727E5E5DB80A53C5F827CB30453E30F603A4442E5B311E90C152A129F8221AD64D1F8FF54DE336F0A1F92CB9D62C7660100EABB8F850C035F2A88689F9AF69FD598FB7D1A8995727B99170AE840758E88C1DBFE5873EDF336F4E68457A0EC41A21C99EBE8CD10EA45A56B3870B710D4FBFB7CABA277291A3368DEEDDA83C18D1F71701E9EBB241497C689272E06C84AF1505675EB998D9B61D92CFEF5AF71F93BA6E69F004EB7FD70A7A949FC00 -MD = C697490B102927640311CF3F2B82E36672B6476E864E729C91027BBF41B1B759FCBB5C0D4F0FF8CBB0762213BE60CBBB81E29BD33B8A8435A1871D2B74284A18 - -Len = 1435 -Msg = 33769F64E496F6B1F638DE77E3538A49912116ED9BB6DF2CB78291F05F95C274B971AB1AF1ADCCEB32477171C4415C0D7332D36BAB37EDAC0278DC8C392E906F7075280BFF6EE7817D49DBAD67966D36119D82BD49C19CE299EB7C64A00DD4BCFA921691BF064758E3010D5F2C7B5878E6E0B763D3113F3BD6E80155A4DF33137360F735145E907F1165C6739DBB58933C6483C962A7C3F139115FF428D61438A614909BA6BB233CF953A953FF4561C6F7015240 -MD = 8EBCC0252818E5891760777060423F342B7D09B3778A146F65F15ACD63D39ACF85AC2318781A7388C43F20F9998F084E82DFB9D3B390160D9840B24A4E30551F - -Len = 1436 -Msg = F3B541C39E2EC19FF5750EB4079E723F5E6BFAD3CE36CD9BB5B94C8BA520784F3651714D6ED955777FDD5A8FD543245B61C7E02B2C3CB70FD5691861F52D3EAFD3D278BA01C11B8A133F8C83C59E6D92359064543B418919000A1E80B908FD605766635B796696B57DBD8EB06C100AA2C1045D6C4881E2DA0038D7103A271F00F1AF4A048F246E8D8EF1509D9544FEC29E935E1FB12649FA7FEA43FFDFE84174A3ED17E4D802189127AD58B4D45781EF60CF2270 -MD = 398C277EF83D0B4D736D757C313BAA11CD5F76A94D481C2229421F5FBE11D44A4780C55048E7A7E3F4C5DF6A5BE541D5EC26CB6467648FE2AD04734D72700CC7 - -Len = 1437 -Msg = 485F865DB14C353CBF0DA045E31DA2C6A0AB5D311EDFC6FAF819E524D55C3352D026370C5B9B0D3A764DBB76CD9B34BE367FA1A9BFB0AC617C94D47AECC92F3FE5F57B27B1E34F99B994470248BFAC53BB7D58B978FD048CFD8FB12A0EB30F163D7820973F3C08078F9C07D8AC1C2029D8639EDB51EFB60C461F7740E1252E42EEB6EB3466E0BEE310148059E352766A8D3ED0C08E2ACA6F5EA39680DFA2E691EF44ED4DBC92B27B28C22E666118AAD88E623A68 -MD = C0FD1D61D630296FB15F12D1EB98CEE7041B115FBAFC19690B05A5F85BC0D06A97D6119162EEFE3B17085A1B734E2DE3313DC6030319C43E12B5481E19B1CAD1 - -Len = 1438 -Msg = 47B4E93B903E93CFDA571880ED0D0EB2B409D724A6A6D835CCE0C6554AE633B2A385263323EC852FA11D8212690F7078D8AC78218C72953C2FAEB4A5065A779B0E484248003A3FA72EE244EFC6D0A4B1D1CED8EC099492E13DEE522FA2DFD89D8904793A9E22C7272C77CEAF265C7DCA3FD08DFF17C038F7D72A513B415A083D5F5101D2982B342D75ACA0A7FFD8B00F59BA8C0D2B0AE6CA17EE763731E1A54BB071C21F63965F10FF8B50C4E4AE6EA311C15AB4 -MD = 6D8CC474387CADD9AD8B7F8C355C91D0D3CFC8AD014745CB34D01505D4E2E46779082B4E367AE597A37C9CF66DB512F29F1F669AB0631840905439B95D6C99BA - -Len = 1439 -Msg = 192D3A6963242323C642AC515B34F048904B933B7FC8C437EA751F8764B489BCB823E3658308B1D336A6A0BCEEF2E2ED8F27C2EF30C6F3C6F80FEEE59594B29983CEAA98AFBF04FBA3E6A9C9B2EB8A178076BCD838FE9658F7BEDC9275487A10C43CA8CF0D0278CE815D8D4FABBEA410E4857F45A5F1D593A49AEA704E3D5BEE8554CDB7ABC51AC584CC13F099CE3D1871C57032476951DD46E1C162D155B89BCAFBBFA867C2622ADF42321205E7F097DA3EEDA8 -MD = 7B8D063DD32035B2AA8EC1AB348E085FE089899379BC5580391A7845D3EEA043EEAB8F54B973F91B31300C7D6CE047FFF3EED33402A9B3192D80C2CC8BA98677 - -Len = 1440 -Msg = 5179888724819FBAD3AFA927D3577796660E6A81C52D98E9303261D5A4A83232F6F758934D50AA83FF9E20A5926DFEBAAC49529D006EB923C5AE5048ED544EC471ED7191EDF46363383824F915769B3E688094C682B02151E5EE01E510B431C8865AFF8B6B6F2F59CB6D129DA79E97C6D2B8FA6C6DA3F603199D2D1BCAB547682A81CD6CF65F6551121391D78BCC23B5BD0E922EC6D8BF97C952E84DD28AEF909ABA31EDB903B28FBFC33B7703CD996215A11238 -MD = A3188426CEA0C18CB638BCC45C4337C40BE41F6E03CD2D7C4FEE26025C5CA281CFBB3AD1554D45EDC2EB03E2EBE3DE02F57D36D5B6A88A3C61A6AAEDE62180D0 - -Len = 1441 -Msg = CB28DC66F267394A3C1D2D1F0EB3BDD240EF9247529E8720395D64ADC644F5B57893658A6E57A34BA62F68E237283EA6831CA94A0FE337BC9B1D08A773133B968515FE7FDA3F851E108EE51D8FD01BE0A8C5B725D530B6425B7E9A988501982901932E899F89DC606D1ED8B1431E4C56015DE52EBFD8B09CD259FBB2D1B3A69C58B9684C66870F0D60B0FE0F75EF310177D512CF549256CB656EF3ACEE3B2EF6728806F74DE8F627C13B272E4E9885EC4DA7AD2F00 -MD = 5823293B55D4F4226F87ED2669BBF71EC70D782CF3FFA1D2BB7D1CB9B9782463E96A4D53C6C1AEB2D3308D63D6411A8A3786BB6D7F73B60872CDCEA8D3E9794D - -Len = 1442 -Msg = B2C51A76F1B06AEB1253AD6E8676DBBD29B8583ED2D3783268FEDEC3CC0CD4CAF9F12E6FE389294FC22A26C88E318E047D9A98BE25EE9B732F93D10FB57E8F3255F6A063DE245942664715C9A3BB9170587AAE67352E7E622369C2BB879B665A0B528FB1575EBEAA297425F6C7C4084E56C76BA7A08025CE545F0F4E9B32A331B950EB6CD55164200E35D04DEBBE5F16E62BA8624E93DA2FCF8AB5900A21EE87DF4514B3C5C93E5FEFDC24D56F9B691497256B2BC0 -MD = A437A5BD6EDB272FF5132B4507BA04FE401CE319C7EEBB684F0115D147563AB4CD515E3E85095A6A49901454D6915A1AE8ED8CE692E24BF482C968E13EFC864C - -Len = 1443 -Msg = 36D5168F9586EF46911AEA6EF807874442C0DA3ECBFDA4106E0A71E921C511DD57904E9146E40EE1FF73B0A27C31CF06AB50B13D1DC8885932D37CF5290FF9D99C3D5E82700C569123564007D6DE15C34BFBB6CB76C7C86586156F668FF41E1DA02C7545E913F9FC9E68C3D8E029647FEAE1EDB069B8DF51A8185A50BA1FE44FC460F6CAD0A07CBBBAF5A09FDAB67158BC6D5DAEE6DE926D1C38B3AAAFB9A3EE43017ECA11165C9AB567E8A88EAB7B5DCA15ABF4C0 -MD = 73BF720631D08E06C8D1EFC12F5421637AF08DB4D32FBD48D0F1CC1C575DAEF4E829C08115DDB99D7971A32FEE51D41FC6FC9626C0FB0243A8E4E96EE2F135BD - -Len = 1444 -Msg = C7873F231D267158FFB7CD6451E1A0D8CD45C1F2226C44D875C30DF55660BDA0CEE25962DAC638D3473A088BD101B62EF078DB5C2B6F88DD2C76CAFEEE78615D1B36D0BB40569A486AFCE45A1C00E8B36148B865D415DD25D451CD4A84239B899A5D37F4E1FFD8A68072529872A890B6C339EB013F931B5810C6F65859BC1F8A3F7C9105FCD2AAFCB6A837C2715B4BED69C29CB21EDD6136C114C187A3DF169CC4BEFC1F6698E1928BC038AC8CFB1CF1C7F26EEC80 -MD = FF87B747E3BEA2CD23AD27667136D022EB73A9942ED1D6912269DBF69B846FC5A82AFBD9943AC1A138EBFCC6813E3E3AC4DF56C95F8EE7B36D7D3F9D8411CCDA - -Len = 1445 -Msg = 597C27B64C8D275F6417DE1F56A9C78CAE747E024E8DEEC25B79C28045AA3A2A1416DC9976A000BF766DCE03023615D82DB887C2A8DBC758206CC4A645319A5A32AF70B3B1A5058209AF0564C8839C0D2D5A298539D6D0F5EAB212093AA116B074D1D66A785064AB5EAB3258D307D4CBB2C0B3EB97403B542EDCDA51AEE1077CF1E0187EB4CCA42744EA22F1CF0FBC6B96B112AF1B235A8D618491E19B4112DEDCC1B6F8C3722C8408CCC6D1DB3318054B2A376560 -MD = C2C6ACB01EB0100AF212B0BA78FF25322A337D5F6A87B0DC17CC48AB16656354B73F9650D6261DA53A70475CC28D00CADE699C65E4A6B47AD94CA69F755E0ECF - -Len = 1446 -Msg = 6AFD2AFB1B7217CB78DE5C9230502D0092D8D414E00D4D042C659A8DA687E1B09445D95F87B6A48901DBE3784C71D4C0A98724C05C80A52529A76C0EDA6549F9876219F1103A5C1432A4ADB76F5BDFFC30C46D9E22A2B141524F735369190E860AB33FAD9B34D17BA936AAE4059660A5C9006E5E6EF070142A0C3B6CDC550E5658360993A14665AA63B71495741F23076696BC799234AAB0AA598E53C9FCCDF14EE38060C11D4F799C9BC3B608189FA0BDDB006344 -MD = 5588DF1103215D58F071BADC433746E660DEBD5C679DEBBF0EA20A01C175D173F0729566D96AA80E3DEE0AE4C77E0BBC973A8FE2D7E5B00BF62FF6165170C7EA - -Len = 1447 -Msg = 0D7CCBEC6DEA7B571B4BA9D8E11FAF3CBCD363DEFBE8BDF97F99E149BF3BF004AEB600784100AF7AC53A1CCF43166FDCE8AA87EF6A9A7CE66110C72B8DBC940AA6487C9A0439446EC0C555B7DF3E0D219A21392B740461574693FB814C15A4068626D29DDFCE3215F0701511AB4B1CB96C544B8B25DD385F0E870F5A32B88AD31FD49FC5F25C9867E682DA5ED1707A6022A58349405E665563BFA17F815FB0B402FFE5AB89BAF3D758DB8B4291F65329C8C4CF950C -MD = 9B902DF7D3B86B701D7644050E06CBFDE2DDE2396B406151F72B9A4AD7A2A4CA98B38AE4435976DD59401716291EC6F8376CCA3B13D5EFCE44AFEB7DC48BFDEA - -Len = 1448 -Msg = 576EF3520D30B7A4899B8C0D5E359E45C5189ADD100E43BE429A02FB3DE5FF4F8FD0E79D9663ACCA72CD29C94582B19292A557C5B1315297D168FBB54E9E2ECD13809C2B5FCE998EDC6570545E1499DBE7FB74D47CD7F35823B212B05BF3F5A79CAA34224FDD670D335FCB106F5D92C3946F44D3AFCBAE2E41AC554D8E6759F332B76BE89A0324AA12C5482D1EA3EE89DED4936F3E3C080436F539FA137E74C6D3389BDF5A45074C47BC7B20B0948407A66D855E2F -MD = 0B14693E6320668D64EBB3BF6EEB81AAFCDB7320ECDE80A245786D1B0A808A15C717DC8E8813BF64BF4AA57C29C33E913D6CE1879E52E1919FB83E4A208EDAA4 - -Len = 1449 -Msg = 3564C4692887D8CB8067A9D799396CF83E3DDB7E32CC4FAB3C87D31222B668852BFBAA78E3D2ACDB5AD889361E31B9DFE0FBCFCA00CAEBF8D07A9ABFA3CA818D0EA41EED422BC2C7F0AF9EF15C6D53FCD781E20112F9E41BC8F1C9E1DB278A723FA1C2D5523AC38BC0D5A93D3306AC033E62848932B10394AD1040F235466B7ECD11F484A0C874BC84AB18175C7BDB4F816A3762AF418D64978823A450B8696A1F78B1ED66D649EEC8ACD35160C5885E11CFBE86CC00 -MD = 86C21F293DE30BBAE9C75B98B50A020CEC1D9771F9EF2835AB6EDAF8837E41883C076779C3B848B8D14699A11CDC735A18BC12FA59E4757AF1E48E534AC43E9D - -Len = 1450 -Msg = 860296392D96C556086F61E4ED34E50C95B721A8B051544F6031AE174250979846DCC2E5811201CF7A16342976B7EDA6D2B3C4644FE8FA3398C05921C79CE3DD806264E80AC1EA1FC124FE51D573AD7823D2C7CEECF4F06C98CCE809B5C16313E04DC0B48A9410115B36DC5331F6C2BB7606ED2F7E6A0D575F8D0E93D996FE246D5BE00AC2A5155E47E87E73D568C990C44BEE93530073ABC1952EEE5904F41254FDF82030C4ECB46F497A695A43C87BB759AE1FE280 -MD = BD66D7D0433C04EE687F0F6D9FBEBEA3A8F8C2A2340DEE9AE9FBF94738275A68CEEF142D8BF6DD08363769C9C3155C09F973758D75229B70658A86692B24327F - -Len = 1451 -Msg = 8A59028DB3B6F5C6073C6A778DAB8A9A3F64D3AE4F13DCDD25481DEE57D2DC82481C83CE4D43D8A173DF49A04303E980F28D2F4BD898BE8DA36F0E470DAE4752192F9923B46E5AC88D7C4D3DCB8C8D29E8135E0E0DC44952D45D7DF503BEF6E53FE9776F8E4BD69F238F4CDAB93F063FC4639F5B72B65B90FDC96421C5BF23B8B30D7F87DF53B74EC6ACF131701693CB6C744AF9DCFE4BB4831C854AF76FEBA6DEF37D4469041DCCCFEDC1504227EB60570A450A6C40 -MD = 4AAA0EBB1B4EB163C392228E4E666A4F6D4155BED0367E702508B44480433E06693C5415FB27F59F4DE3F890A9EAC123B1205832943BF966D074776718D741D7 - -Len = 1452 -Msg = 79E4BAAADC1878BFB1EB26C7D4B23178446845FF6AB3E45E571BF06FC28675A7AE0FE524FB99925CE7373ED9DE395B296603C9F53CBE738393776B9C5AE265965D26ACAE303C4DA1DC45F190B057B561B1F8B13A4C02D8CAD6E1DECDFD8825A64A40A78FCBA195759D596AC898A2B984B459ADF1FD7781B3BE50AADC6D7529C38DBCEB9016A8600D2940213C1DEC81F7BFF72E6D753D2FC540B50621B759F1430233E588BBBEDAD1E978AF4D78859F869BC25A587C60 -MD = 4009DD8BE1978E62109A3D2D9429595BE9A2B91C1FCE6E17C1AD3A7A964EBFD157FE55BE7D59C2009F972F315EFEB19BC1CA715D2D615AA9F34ED44805282C88 - -Len = 1453 -Msg = 0FE88DF0E99E878F8DFF574D6FEB68022CD544533B7D81B07ED92C67ED85A6E890D635E1801026E84B202551E7BCADAA869D9E00B1CE69C0EF2AF908248541E0BE5134B5CEEF8AE1A2B548FA0DF257477F7A0669DA6092C2D9894F00C299B1FE7EE480978D655F463942D159F0F6414E77DD5795E3AF080D060CB06C0765A7582058C47A9C8C1B2A255CC8655F8EDBA851413DAAE7EA4F4DBE6DC9AC91ADB6FD702A2F039B82E461EC29B3442915D4E12601A8515928 -MD = 8A71BCF76F78FEA7A566E7B82241524C4DB585D431E1A4E7BCB50F4B8E86292E55569A256A9B135F3FE1E88727D54A210ECD823EA9FFBE063FD5C9EAE6CBFC12 - -Len = 1454 -Msg = 679A778BE6C04980258827BA7F375C1592BBD320C505431B9F83547E686CE1AC87DDF4954A481F3227D27ACE93CFDFE507A8131CCEDBE29578D3523DE3E0590C4D17204B2044DA755EDD8B2D429E0B9092A8429B89AB2A62E0E7519450A193EBFDC2C4FA695C90C07F29C016CFF238F777D6ADD5AB606E1CFDBEE92420A0D8F9A23D5F291F496571AC573E98D8FBA2C31BBF04C1218AB9B7ACA6FB3C6B0BBB0FA9B8EF9684AE3F77275D53EACDDCFC5DAC4220189940 -MD = 1BE3081CC3D46D40F67D724348564D68356A7800B3D131F60F9FE374278D8FB6FA7D05C7400F79C4252C4EDFDDB1D2C2519B4D4CEE8FEF2ED777FC60124BA026 - -Len = 1455 -Msg = 69F739517865837781C3907381AFD544AD54E4B4E92E4F6A94E4508C592606548EC974CE57BD5EB500DB5D5DE19B6A5205C826EE7E805930BB01296F245F285264759C5D87C10CBF9FA8FB2BCA99EAE647E18E39D23CD916C7B8C709740D88DA333A7772ECB55BD639F19F25BF0F3CDCF1576A5C5B4EF558284D427C226DDA5828F2A638310243A42BB9A180C89DBC7533BDE057A6ADFA799D7C316B4949B49488FFBC760CA818F9E4B11A83FF144B91076C98691944 -MD = 4C43207B4ED6D348A027160E3706D930962E3F27BBB788B3C36C40674E6085BDE148F74A155C9DDDEFAF4246ACED4BC90C15555D5325A8B99A248F7608B8CA3E - -Len = 1456 -Msg = 0DF2152FA4F4357C8741529DD77E783925D3D76E95BAFA2B542A2C33F3D1D117D159CF473F82310356FEE4C90A9E505E70F8F24859656368BA09381FA245EB6C3D763F3093F0C89B972E66B53D59406D9F01AEA07F8B3B615CAC4EE4D05F542E7D0DAB45D67CCCCD3A606CCBEB31EA1FA7005BA07176E60DAB7D78F6810EF086F42F08E595F0EC217372B98970CC6321576D92CE38F7C397A403BADA1548D205C343AC09DECA86325373C3B76D9F32028FEA8EB32515 -MD = A9ABC3F554C1E717935D28C28E7C26AA9DC5BD6D7B02ED7DC6AFE21A0EA027A8801AE076F2872D08635EE81420711862EDC4E448C85513289438B3C8BE456B5B - -Len = 1457 -Msg = F8E43655B94493FA926E048EFA326945C953FFEA2316BF10C90D8B89FCEDC9E65E9A9BCAA73B5EF6B2AADF520D92094C9FABB9D4BA8E9498A1D0F91AC13CCAE05DA45ECF860606392BF868A0DC145F85D3E763DE868A65A9725C12F594D4645DA14C8C74B34BEC7AC206CB2CA3279F6CD594691F434C25D365A3CAF900908A45F051032FACA859544555FD9D09BA5AF7FF07CC309926086F92F1808D711F7EED88068EBC5E1704A3C2601F6B30DA0FA73C39264EBB8A00 -MD = 74060295A83965E465623248A602158BFC8927C76ACBB865E45BCCC11AFB5706152F174033DE557C26AC770638839F3536F9492726CA4A76549992082C967653 - -Len = 1458 -Msg = 05CC9F30A93EF36488B4CE5EF2C7C3996CF902620215CF9F06D63F02F5B4B33A41E6AD8BA5F86A91CC811F6BD5BD8634A90103D1DDC83E3F7FBF3259C85CB1D2BFC5499345A0F5A5A40DD26D7D85EF30C49402995300C7E5794590707162AE45194A916D304BBBA40ED09F9FF063EB0C9925F1743F968BD78EBFAFCCB67AB4E379065DB6C6F4AA5E933A9905A2328C5762819EA56B496A1834F017C387D5CAA70631113F3308ACF1AD2CC01B302E0BCDE3635CB699FA00 -MD = B99CDBAFFE6EA22F16EA8DFEB672F2C55D01B87D583B3741591F5CC421E8930924211BF4D5B1A193DAE4494FB277F33CC37EC13A782935EB8ED84276894C212E - -Len = 1459 -Msg = 918872C3409496104D1F1CC94F168356BFCDB801DF3CE29D512E0F1FE736192EAF690EAA9DCD9216497A29F8AAD1F662BB38BE9D2D94B0CC25978FA5C2FA1E6A3F8F594BD354AD4DA9011F35C2A9B47FCFE20A83F5DC7C9750FFB60D24C7013923B09E4D8C8F299280BEA11781E2E5971872926728C2FF2CC2DC946D342E0B9C8B79576CD8F75E3AFBBABA4C3B2CC2CB21671A24F2190650D2AC23EDA04061440A31AAA50122C745D0FF9A3971BB1B3C698147DE9981E0 -MD = 371EC9BFD06EB720BE17552A500F0CBA60D244D86FF31B14FDE52C6360818CD6168918652C214FADCB8BFA5E6A9DA25245A872A25CD7026F5F89939159B4E012 - -Len = 1460 -Msg = 307310A8B3FC2728EEB4A10D9620098D24A8C5059A6EAA111E401689EBAA2B10DE5876F12042A1422EBC9B33F9C306C506F59FD76FF5BB194C278E41370226ACF7BFDBBC7E88C82D4D28AB26B669562F67EE3EE9A882B1CA390FEDDE8AC0B70EA2E29CCE4B9169A83835A72BDE1709BE8638BA00D05149977EABBCA5D0B70D0BC935F77F85458DE4CEA519A32E29EF01CCC760E7E549A347BC227C1B127E7D46F730C01394681D0E3B3300446EAB291207CAF424C679C0 -MD = 92D150BAD3CB6E71C71B9B65295C2A44266B68717734DB6D63B17EA217A312412176040789EB4087A43ADA1D724171F38AEAE90C4DA30A0B44BB94F063802CDC - -Len = 1461 -Msg = 29EE9AE317F88A0A03059E3AB719C6D6BD690C9F2A54751E329EB1ED700E5D2199F80D47E711F83A3FFF5D7E6FB1ECAC25E4E5BDD8CF81757F59AE3AAB01FBC3F8F4BC1EB9618601FD00E3BBB9AE6B7CE52AECD8C7D256CCD22FC7F097C70D637F39EB138AAAE3B826578273D47C12869413F9E3EFC920286CBC247D0395165BE7BA0AADFB40F431F0AE40122DAA6993F99E15FE3FA0B37D610CA794B60458205F85A1E8C5AC4B10B772A7E96256F87410C62E9CABFB20 -MD = 1D09F06948E3C5EA002B65D9EE293F6472C9D1361A9123C2344E6103674AE1B1A5C3C5476CC53924EB2FA51315E5F0FB0B9CD612360515B5C58B0D5F06C5F951 - -Len = 1462 -Msg = D1E9441652727BAC2E45E25C2BB6AED06FF14EE8C4968183EA986B05B096D4000AE3AF0AD3E565B82D973B574C30E5D58946E987244520EEF1E0D76841235C1C7DA7AB073B86D0F185505A4491C19A963ACC10B166EA9F7AA164EB40989674AA882E9AFC4F58344D7C60B4784B831DEDE1C484FE5644E98EC02D3772F762565AA95B52A75D4A890E5AEBB607956F379F20EDB1EFB87B21163BD14858F8025426A26630AB5C43550658F04DEFD54ECAED3513AC077CE9FC -MD = 945802DD9E0A6DD9033439F31AB5EDE6F06DB45925EDAFA1E0A104016996BE627D05B45B92E09AA4C69A6E82DFE1DE1024068CFDCA1289C7236C65EFE9603FB7 - -Len = 1463 -Msg = A12F4FD666CB7D9226CFAAE60161177991EB2319316E8BCEEAC1EE41E2F44D6077E5837748B1DFEB545650429C4C76883408152A239F494742BEF1EBEEDE1C79617712C8F01BB17ECE00EA31BB14747B657E6C1EEB69A1EF5415E3A0C96EA2A3772417A2ED061C47F358C0225463002F280AE990F0B01FFF211B0CDB479E20F90F88D5C67D2A5708D655F6F05046E92F8CA0BC440E1164520D9B57D0E0F4048E8D0DF854B410B4207571561CF1B3BDE8293C46F6FD19DC -MD = 053F44A087932CA66FAD5D667919F2E5B4AD7340B2C8091DE22A9A8484B2DE0D49088A1EA9985DE5D5FCD60CA9360354CD07F749FDB018E4DC205046A487CE7D - -Len = 1464 -Msg = 3E15350D87D6EBB5C8AD99D42515CFE17980933C7A8F6B8BBBF0A63728CEFAAD2052623C0BD5931839112A48633FB3C2004E0749C87A41B26A8B48945539D1FF41A4B269462FD199BFECD45374756F55A9116E92093AC99451AEFB2AF9FD32D6D7F5FBC7F7A540D5097C096EBC3B3A721541DE073A1CC02F7FB0FB1B9327FB0B1218CA49C9487AB5396622A13AE546C97ABDEF6B56380DDA7012A8384091B6656D0AB272D363CEA78163FF765CDD13AB1738B940D16CAE -MD = 04DD83D20F58E854D857F24720C50A4B5F83DBC8CABD460D379417CD4813772AA85591B90462F34DB3FAA4DCAE335FB1252BF41162E24975A0DBD308C41A4A6B - -Len = 1465 -Msg = 55BC529569E0801CD498C8AF42B5461FBADD2C26EE7D32CBD5C682B62B41584B1E268A85E039693E4690815F116C315184450F0443F585EB53C4E101D02BA7DEE60C6FF63CE5F9FBC04FB8CC4564CE4BC2906B23917AB86DEC1E5BD443578E0DC7A3B4A0D06E0C6D3D869AC686EEB943232F44FB71206899A068F0D7503F052A765D509DF738B6C9EBA2F0A349FC7BA9BF6827AE8AD7959FA186054C31766DD4535873577F20EBCE2E6F1972357CEF9915320FBEAF253100 -MD = 40B715D8F5A3EFB844F15CB9F887C9A9257CBCBB9F06EBF0EFDA91125780A6C7CC1AA5D96B8DDC5C57C858039E289065FB4EFCDB3E8F293AEE12A94BB49E8E05 - -Len = 1466 -Msg = C29B2724C942166ACA51A1FD3DCC1BA857BAA82329022DD6B54AEF86AA4C60359B60B0C377C56A793807D645EDE0A20A8D0C1EF21B3BA7D4459609BE3DDF434F1ECE24ABA109F90E1CD2AEAFF4C924EE8252CE18E5B60CC598E8F6280B9681672FE0556D22FD2D7F264909F745545EA2D828512877C9B1BC12E0597DE7B10FE8A7C24841A09BEDFEFC7070FF1EFA61E7D602A7B6C1A3EED14B4D3CEE999CC484C455373412812D609183F8E2858A9FE56852111E17769B40 -MD = D90AB0A78C8C73FF17DBE8A11F62EA5F72C220DAC971118AF9245323C1A0495FE2E679E23BA93AE0FD4DEE5CA4287C050608140231E37915A8E482642100525A - -Len = 1467 -Msg = BBFEC968BF89177A453BC37ABDD7049F5B9E3FE88E090708E6807D8502A61443F2AC1D28E2CA0BDF925D55E869CD89CB9A647C2B17D5F561B462E2014D78DDAD9DF49E9AB6F41C76C0FAAAF7D6E11EEFF841112305756437DE2661E73936F7F1B497BB99293F1E04A89B70D41A045D37127F95C358A66813F8E894544E8D287EA0AA576F0D036AB3849D34443D77EA4E4DB8879F41921A103FA1390C001E179CE81D3C08EA23C0F3D3DA4ED4827B018FF5A6EC816EF890A0 -MD = EBDC4680C6F82C17A585C82819331E4F4915D23601D8DF50707A522A44014FB817D3FC5871DFE2F6E9C1D2E4BB88239E6000C1E0E8FCC1C4510A1DAA62696B45 - -Len = 1468 -Msg = 4F1873004061A5730EB73DA54F66A5E2769165B2AA9834188C124CDCFCC76863F252484FB91EA88D83F01A617578C828A39EDD28FBF9B150BDFA10195F229B6AEEBC4044F8E020135448C0C9AC6F218FD775864DD0D5276EDD9A2312F427D3BA76E993DC660764D1675188BA27F16C858952307203C2627F81B8CF39C617E9A1CBA0517F4EAE73B26C8B5793AAC96D51FF8383D24222937DBFE4489FAF8E2A1E2F2511E58860320E0328CA6853C862D3B9FCA83A9BD50450 -MD = 32AE3655C605C35190340EC8A85B215C4A5DDC8104DB87020651E782A08948BC946843BA7903B09F5B4C1C99676A1FAE47065158B46533821E1F9F4F6E4C7404 - -Len = 1469 -Msg = C15A364863123C42B27DC6B60BB754C1596396DA21BF66BB4E874C52619D122D065EAB67ED766710E17078E886BEDBF49DF81035EBF94DD8121962F221A2E68F9A6D0AB13B1CF2DA0919D9DEC33860D499F2DB1F3945972EE7634258B6921DA9C88FAE360E9907F7926942F3321B0A4E68893528149F5BB078F3A72D20896AA327D3BDD615D02337B1F1B60FC81B02BD68394D681B2EEED6E3F20E1E40C94BFDE855AD8B13536C4BC32364955BE2952EAB3A0C94A195BE80 -MD = 269AB0BC1DEC0B1628714139C71FAE06FA6DB33368FEDD8C069C865EDC8614755165CAA474AB1E04DF348A22392FAC57E18DFA8BADEDDA9FACE9A90C7BC79C3A - -Len = 1470 -Msg = DA29CC2E02E9904345DEE5618997310DBDDA21DD65E28CFACAF637837B9466B9791059277C197A33CAAF2AF7B88FDC143F16DD9CF976B5FD6C0390B18F8AF6C7B93000DC2CCB061D7B63C60055B840EE0ED935D455ECF9586CEB935B041E2C58BAE410651F5DA2BFB3CC23CAA30AA9038563747CB9E05764277BDC9D50330BFB96255071FCB22209E033A269A9537C5529CE2A9F3D332CB903C715512E611E4E984191A7EC7BBD4A68143C8AD136E7ECD5719DF0383AC218 -MD = 0FC08764410602BEC04FDD1FC7D2909E05C62A2F054839832B988A629BBD1F51B1DADAD1251D1BFBAA4674D986EFE0A2961B2EAAE6709E85836A138E0C74B04C - -Len = 1471 -Msg = 94EA90EDA1D00D2F8299F99C7AB8F2C19D05452155A5117E07505A1EFEE1B1754B011174F1C41B72F0AC72AF62BA24172565B5AF8DBE62EFB6BAE9B746F3487A9F61557AADF0BE5A2C8F877A7D2E301FDF45DF9A50633F87C99C38102F4E011435F451278A17CED52764FF55BEAA3E7576457E81A685F1A03770CCDEE8C06C1158AFCCF0746D58DF1E85DB956B75DFD86B26CA9A936D0833BCC64356782F27D5E9F9C76898FAE7AE1AC44B07272AD64918BA3E5BCB272F02 -MD = 88534432B1A2982182BB9CE8DD51E7446091FF8E146D8CE97627F375C89A1EB89B5E5D6913AB2F06B7567D3BB2FA132904A9FFE7FFB9F6491D707ED4A145AE3A - -Len = 1472 -Msg = C38D6B0B757CB552BE40940ECE0009EF3B0B59307C1451686F1A22702922800D58BCE7A636C1727EE547C01B214779E898FC0E560F8AE7F61BEF4D75EAA696B921FD6B735D171535E9EDD267C192B99880C87997711002009095D8A7A437E258104A41A505E5EF71E5613DDD2008195F0C574E6BA3FE40099CFA116E5F1A2FA8A6DA04BADCB4E2D5D0DE31FDC4800891C45781A0AAC7C907B56D631FCA5CE8B2CDE620D11D1777ED9FA603541DE794DDC5758FCD5FAD78C0 -MD = CE76B25C928CB75C09C0674E8FCD22089654182CD3D84B85CC44B186A8B1A7CC1BB66F389DA6D744A24A7B02BF5C85542D1BA8EF0DB4A86D2FC394471B396519 - -Len = 1473 -Msg = 44A75B4C7422D2FC2879347615AC5EF30D1A10D6EA091C9F93748CA7BC5D48D8961BD5DF974BC9850BCF8F529C86237E1E836271EC0A4D6DBD9DF26A016B22A12571476FA219A9952B3711D19DF31A840BD3381B51E94F3212385DFFBE48162AE4AA4D5EF8B555B83EA5B37FFCF30E1C7982156B4438FA12E4D55D5066EDA3073D630942AAA5415524B2891B17020E7C71BB70EB24405CEA0A091D42E6DDD5E2FD3C2401E21F4EFC0FDD58E9D592D8DDD72C475A5026C99C00 -MD = 8097BB1A37D0DC755020FBCECF1F6EAF4CD722EC2F43840F65A0F0FBB60E20A1306655556481FAB46B2B255842160559AAC6E147948946165BB72CAA5D36720A - -Len = 1474 -Msg = 09CFD94CC99BD82ED115021FB794B680352912BE0A8E28CE534E82D4AC283FD68585CE8BF121D1F1953F2FA98F38427525D186635CFB0AD88D5FE7FFCB4C469235139AC64DEE44C8B1361363F6FFBEEF11060FE26C516FDBC421752D0E4700F91237F38819AF9F4F35E519CF52FF4E7FEC87B9079B8ADD4B8F6C49828696122F279997631DB09047B88206E2DA672B1DEF24CC5C022D3845654A680273872D7E0E86685DC809B692335667E99D2D108AA9E0084BC9AE177780 -MD = 500239DE9AAD00AE70D578B047C2CCC0C8CE5DF1FA5C29C8348DB804939A25CE8D6DA58BF37256D84FD6951CE68128C94A1002E281602EF5035BC59E8BC1BA03 - -Len = 1475 -Msg = D445328CDC413E194E2674C4861E4B02834DC69113CEE287E147902A8182E845C722D0B48BB4CCF68D69380F93DF2D783CDF63D1935DC118E4B209A6B2082CF88F4CD4AD6502C0F1CE94348DEE1D382C920450FD1668A1C4087877CDE362F4F8AD35EC122F63B8C93BBB06CB8D11C4305D38E783F3F536C9ECEF1455C294FA8175C910EF540E64E85D4E84216BCFF45725AC1AF6BC30F3005BE37C359F7CC0296D508A64B7D91F94B874A24FF602AD7908199C3BF08851CC20 -MD = 022AC08E6A8980FB29E9ED9206709C4E004EA995117F6AE3040A7F9562126315294A6DD73F3F564298E9BFDFCCB3A8D6C04ED1A04BC05D05CF2E2EFDCB38CD88 - -Len = 1476 -Msg = AD7557DB28F9AC08D6F70EF4AF59606DE6431BF5CB1AEA43E34D3A6B2A33DE5B654A11D95CFA02E24E19E65BCC45BD78D0266F1AECE3E10B4E101BB4238847BD4F88D019DF1F03D089EF5E51797DA0F2A117977861BAE10AAC4977F4C0672057B535DEB34C6F99BDB94A7ABDB015CAFD017A27CB710C5CFC8EDCAE842930F10A35806F5E1A9D2398AB23DBECB14A50106720523A1BFE54E3D2188C672F177B993FE3574908789FDFCEC58CF811440E9060497C8281C5529340 -MD = EEA48C46D6F7F8C4D7D0CD520F48A19B11E6B91211F061E20C2D2DC6C41294B1F90AD8EF337E38B02A9C6FC1BB6CDB743AE318E32DB6D614560A1D8C3C235A59 - -Len = 1477 -Msg = CFB596177B9CC328223225536EE388C73D740E80E777BFA3CB117F9044EC292EBF6BC61521C6A2E9D25A7737EA702AFFF5DC7A521EEDCBA633338FAF7E13F6B62A1957D8DF39748DD4A0CDFAFD9235294375C5041761C6C54714E23EC10249AEDEDF5FDD1D25ECCFE9C240C759E435F6C8662F5CC1DAA40DEF573ABDDEA0908A4D6B07CC148F4153E34D6D5965B24D3553EDFC34CAA0634A622B22CBAD494D5C2D0C908B17B5E7A3E785AF8F8B80808B1F0DF0EE838DEE3F00 -MD = 46CF50E9AC17B433C484487D36E23185CFB49F15A1506FA662E660815899F471756A4FCB3C0919CD2476F93EC2ACFE0B6676E3B825BD35222022415C98ADE3A3 - -Len = 1478 -Msg = E93C98D933A5F2C8D34F02E9BDFA64694F79FF969897F7F71D776D16E518B4F91443D3799DD0C4BFC6582E080B6712BD93295922C6BDFA99BA209CE536489A25C4755264B053DB2A0948B98006648E00FEE6A3B1C644DDB775EB4B092838FFF335C92B7EEA8D51A44C563C969E9CC09042C6809AB5D09FA8208BA2BD78B7F6803DA6A92F145388CE4FDA96BFAE287121809BEBF7741EB0C7A27E7E7A445C4D448D8A98BBB6C1D31EB8183DD21078E6BF6DBC9653A2E2053890 -MD = 3AC5860D4E6CF0968EB3BDA7665B62279BFEE20FA09A0E4EED28AAB4A970EA61371F65F0896F7FD35F0985C13F1142BD8064DB688A0B36F3522EA42F4A92C7C3 - -Len = 1479 -Msg = 532FB4C8E6753AC952A1B707308830D930A10D7F4422F2FB54CD2FDE1B584BB75ABDD8017F2F2966633E4ED2BAB7DF21F7C6652645215B18DBCCCCC64B27139A68143CFF9930ABED16022164121F38D4D12E62308D898420BF00A59DC3A7F26F07C8AFEB4F8CEF3DB3C98B307787C495B60A83EBA8594658D6E5F4B13057523E38D177F20C715A7C0188C2B342CB26D7282C5FBB124C6CDD7A1122F63080B8FD2C671EE1E994A874D14C1B4325D06733E9FE962E06219DA988 -MD = CBA57F6F58941CE02D0E84DFC36B741B21F06EA1296DC44E80779C6D96063271F8D1B53EDE457322039BF99896EE79548635ABC670123AFFA0ADD9DB65A2CEA7 - -Len = 1480 -Msg = 8D2DE3F0B37A6385C90739805B170057F091CD0C7A0BC951540F26A5A75B3E694631BB64C7635EED316F51318E9D8DE13C70A2ABA04A14836855F35E480528B776D0A1E8A23B547C8B8D6A0D09B241D3BE9377160CCA4E6793D00A515DC2992CB7FC741DACA171431DA99CCE6F7789F129E2AC5CF65B40D703035CD2185BB936C82002DAF8CBC27A7A9E554B06196630446A6F0A14BA155ED26D95BD627B7205C072D02B60DB0FD7E49EA058C2E0BA202DAFF0DE91E845CF79 -MD = 02D1671981C2E85D0455EE85F41B8E9C32B1C80221DD432B8BCB5FCEFE0996F32FE9FC3EEB3F1F557AE1632750B92D05239AF857C42D59A3DAEB9629E1158BEC - -Len = 1481 -Msg = CAD77B5AF3CD58692829171435B8C7B878D31D7A7DC56B0B89F6D13C75385AE8B268E309717C289F988ED5EC216703148CBD202FCBF9A07CECE0E9E87C108761CAE85DF513F1BBE31C6E9A2A4E9282BDD037491B65F70AD1CE54FCFE4CCBAF3FF59CF815FCA87352B7BD1BF1A61C32524AA4E8A41BAFE3B5DE8BC3E82EB3DD989B8D4FA36B023FBCE4456E6D253C70018DA40033F61821DFC937B0D2132E78B235903617E6511E3CB2AE00848D3B0ADA5AB00D04CB8539853500 -MD = 09EFC991DFDE3B9E1D43001487818EB49236FA3C63871C737C2DBAEF089B22FA75183D0D6C143D26F17B521B77AD94650AC49A203F7C5CE2A5AE0BA61E37FF16 - -Len = 1482 -Msg = 9FA55EAC5F6D56ED388E535C9BB95EE7129168D77438427E4CE012EE9DCEF6C489F72D660C6766152A15EBE3CD9CB32D143CA8A44D925BC8763B16CC8820C2C4312E1F01F691B3BA08A4DD9DBAD5594887A9129025DA743FAEADED8C593889E6B12D9EAED305917155761A62B64B5FDC250EBF7E172FA047A18B5E2FA3F65900A2E8B487305E296DF23260A08056B8FC092C997A82C0A0CB647A25D4EEAE8AF4C5F301DC630D43D41331C3C722C60F904CE8F1E59B54B8D40A00 -MD = E4E96E06C7139882FFF8D3B80E3222F3B7B8B41F80A9475A781617E53B0EDA9AC4FDCF210DC2832FC57DDCCB875DCA9EFC41D56D95F3DE1D9A7E3A18B8FED66E - -Len = 1483 -Msg = E256110F06106A8DE854A108A4C6611E415D5E73948718DA023521B2E948CD898E6B2246D7905C6D183D8BFF98A43554F813E9D19E09757879ED5B29FAEFCAEDAF1FDC8CE2C4AEF6A5D26F35331C899895ACBCE4B234B222CD5E0E19CCF9FB4D75AC50153684C3F8647BD0067307A07ABCC75E8C15CF62B842378528EA95D34837A87F01ABDF385D507423BF9803179DAC1FB8278FD28CE90C7194296D0AD9432591C0C1AC2EDAD8DD5C07E395A05947B8235AC0434286ECD5E0 -MD = A6DC8BFB8B7A74CD3E72C5675F9D71F54BA2D9A32FBBAEA987B83638C0D0AFA26C344343E5C992027F2929189A2421BFEA2D4111E08994C02009C3556F7C031B - -Len = 1484 -Msg = 54BCB9646D0C68565627D302A0FE16B1729E78A0528F96BFE95C130797F1A619C779267A13883D0CDC992CB0444B0FF694787EEFB42978BC483027BF22AD8F43B41B522B74776109D40297F61D104E6DEEE4C189552A2228FF97679E0889D6A76425DDDD08911B8C14B63803B76358B7B2B9FBF121208127E4E5EE2CC9A3E71CF29E17C735C29557F09B168E1818DA2215C96F2D4E08A1B09F996974CB8D40488E0A02B9287F4526DFB13529EB38B80761BF918D489C763AEB40 -MD = 9C76632B4E2AD3580BCED3C1A96E4B91D466BC3FA65187A777A45583FB3E6F9048A4480031376E026B6617AD64938D750BE98C60EA559D4DD3FDA87B3C5880B5 - -Len = 1485 -Msg = 4BD43ED651E7BCFCFDCBA394595BBE757608C73A69B10A94B40DFA689EBB4629613602651D716DD360A98F1C942EE12E73236B4689BBEA3F98DD276255803F9F9A054E855E4C16EA37577D84366E227E3C66FCC646B8851393895A8C18960B1C6A9B3001B30F172C3B13DCDFE89E71A7D785B2E9C3D49C82F2A87625B5BC544A7DF12406D65D627AE666AB4E6D7CD133A92DF5E1B2AA31E146D9B3300EEDCDE1817A77182FD9F71AC45CD42C70CA5D6739164AE6146AEA860578 -MD = 65E5327600B35CE4CE7FD47A112B81AB1C32F1D252DC7026AB726CCD21883B315F080DB8D2B989E3F694BB6AF703308259E59C16816C00A8377C535F14DB8A62 - -Len = 1486 -Msg = 719D1B312C421896259055DA2BCFFEED2AA86B319FCBE4370B8AD722952CD203B4AF18396F45D934C6513FF21A90A44A0EA7C5B931989F0BBAD559334E020FE6925C76BE4F6339D6C8EF64A6E7E011FAA3CA768F40BF561EE58AD5B9EFBD75E6FB51EE8DEB820F61E398837723D34B49EE251023929CCA4FA70078738E2A49F15918FC0B680F9E2C9F91145C68D35064639FAE4417E422FAF9E723E8278FCD8530484B4A41A193BE9426DB16AB839EE616F80512E59BA55CA304 -MD = 5BDE3AE51AF90A508AFA1C13F246C5CB4AE6CC8AD7F7F5B39D87AD348ECEF8B92CB3DC1A939AC595622FAA83B33DD01AB9E34A06D5C63B742474D990D1EA6AE0 - -Len = 1487 -Msg = EA044B09C5EC1E6A714E329A63B70B1887A6085274EED2DCB8F4B56B2991D2768313A56F6733231804D3D283863A764843B59409A9BB53FAB192877190813F9DDB08A19ABC32DE2F1FA58FD38C002EA8BA8954182CFADB37E90170C2E0FE3CFDC614237A1E8F0D7C4679BB4BF794CBF3E22953A5EBF55C22C531A282CCDB0FE8B9ED6EF4D731B4B73495FE632C328B7682FFFEF79F5421D99D9E32947E290F24F76FB45D38BC2159F84FC2675D5F059B3A56B7F60B35FCE832E6 -MD = 40E2E57EA34653BF8B4053F88C0CA75D7BD9B004FD7789A9713BAEB5BBBF3A3E8BAFD6F9FA5910D327FAEBB4F215EB81C04181714109D677C24B04A96800396B - -Len = 1488 -Msg = C464BBDAD275C50DCD983B65AD1019B9FF85A1E71C807F3204BB2C921DC31FBCD8C5FC45868AE9EF85B6C9B83BBA2A5A822201ED68586EC5EC27FB2857A5D1A2D09D09115F22DCC39FE61F5E1BA0FF6E8B4ACB4C6DA748BE7F3F0839739394FF7FA8E39F7F7E84A33C3866875C01BCB1263C9405D91908E9E0B50E7459FABB63D8C6BBB73D8E3483C099B55BC30FF092FF68B6ADEDFD477D63570C9F5515847F36E24BA0B705557130CEC57EBAD1D0B31A378E91894EE26E3A04 -MD = 6B8BC6211FE5001E07B7D20E0C49D314211E3893A39DA241B8839BB3A494F9A2FD8561009D22CCA1330A69362B386E715F1DBE6291DBEECFADF196DA47E53198 - -Len = 1489 -Msg = A3B6E919C29F0779F010018E9673A03EB7B45D635CABE817ADDE1024A39F14406956BB363A3C9E5D05CCFE04C98E26547EB5D044221B4A2EC10035187D7E29FEC3FE04E540C53FF0A5AAD283FF6DFDE44A4D66152F3A57341DF67554E504D4575B151A1C1B03883828E22997055CEC567979BB54784C80D57C17AE590B171A4A8E9C539E9B35FBB99369E35889A78F93A47298054C29D16C627A61228C3D489355158E4B3F39F7F515F93481D339F72FC8B3A5F71CE123212F6800 -MD = 8A172B9723C430EE04F538455685C942096BDA106AC9DCBF54AA181FA939F1CEFF5405275F5157A48B5F51DD39E4352082D4FB375A65D2596075ECC450F2248B - -Len = 1490 -Msg = 4EE4B06A4E24251F70866E9677E9D53BC176ECB513506058D0A77799B0817F2DD51A1FB6C092579435AFDD86D996EDFBC9A503C32FEEC9307755C83F6A39D057DA88CF3EEC01EF6609CF60D2149D61633AAF027A4AEAE25BC64C469AB4EBA304B8347D088466AECCC5B3D18CD3E24D3C6C95BFE2711E61D17805A92D05BBF8639A0BA9ADBA6D5394A09924415BF28F778679F1BF578549CD71A0AF3E57DC74DEB58B65792D3117C0835A03F0AFD622D8649696B92A8D2D343E7300 -MD = E242DD31C801F3A460C4E67A713EE24D38744DE92E316EF7519728B4B95252DAF94BEAD6C469B09F113E07FEE89E92E2C8EE20991CC75B9C041D56E14A41AF69 - -Len = 1491 -Msg = EA20C22288323559BF6E70257E5A591DA6AE97FDA9BF2D2AC91DA8CFF506B2DE939F49DBBF7C8F31DA22A7F54DD2C5898256EA9D7B6A509FF3B9E593747C4765E5F228C8156062DF6A15135DBF582B0789AD1F12565552DA81825708D215B012C3CF333D3568A26D6F5DF383E8A47730CA657333BB65534EBE04E4A6253728D5C31DF432F55F71EE5525E430586153C5D8E99B4C9AFAF7B4199990226F47A1F68461FFCF3215CBDA693485F3C155C559B47FB86FB176106258FB40 -MD = B328C1A433D92FC13439A9251E51AA2ABB3AD2CA97CCB600C4B987796BBD11C854E09118CDF0AE68C2079A1628503120B026BF319C9E1D715037A3BCF6BAAA25 - -Len = 1492 -Msg = 441C41706EF18997EEF9B4990BC7B67273D9A90E99A64E161F0F79223A079EA8873500D722834DC7177A9063AFFC05E6B1C67B3AA10BB905E393E6C998DF7ED17EDF76096E4514D352EBB5E060911DA466D6BF26C9E540D10D5F0A0D5D7E0244B89CE207226112A782CC9D98B206EAEABF5C31A3F752C780A3FB57A46EE81E4F0F28A4D5A0ADB405FFD80B35CFA93EB2F6793EDA5BCF5F9E8D57362FF4C65ADA45064098F110EE799931B04C913A05E5C43BA6427FDF1502B546F0 -MD = 5820C8806737B61900BEFC086628E2FCE126BCA65AE4291DB1103028AB5C0B3D30846E857927FD45BA4795C6CB3372BF425C5776AF698F2823854F2925C3FE02 - -Len = 1493 -Msg = D61ACEBBACCE0A1C2ECEBF549884696BF89A6FA017148D21ADE0BEAA038B417A0423B167D18286B3F5981F73E15760E7655C903EC27B41745EC22CB790681CE19857D34B249EE0FDE3C4F2211E6ABEC7CEB7FACDD8C23B1460E87EFBE81B4869851374DDDF3A79EC5A9020A185E6F87CC6F7BE11A6F8CBA0C4819F80E0875A9816116B9E77634CD06ED3CD88BC6B8846CC622B4769D20C9B19CE4C94B3CB2BF932864F9C472919280835692DE0DB831A0DF8A3884439ABCDD93AE0 -MD = 1E63A4E8DB135CD1F772D43BACFD5178D212437754A154257B6A02E666C6ADAF1730AE4878AAD383200AAB984C3777FA438981686A535F1A70C4BFD265DBA29C - -Len = 1494 -Msg = B4A2C1ABB183856531A1D8D13D5419E2905427814E0D941428CCFD0805D96B9AAB2BAE33C09A5940823907A58B0672EBCA981E5302F8143D48F85C2988347750606E80AA2FC4AAF246D0066BFE85B1D43882AD048B373009E7B75DF4AF50C792FA3C22216112136C80FD303CE511E9A2D9B906CF0DD009171952BD062933F58A96150D3AC0551E77B69037A0DE0569C6181690FE780976758E10498DDD6A8AE269FF8BE65B6EC809C8F81DA31029798753F3BD53906B8B3441A448 -MD = EADDB7854B9DC070F6309B023C1040DF487B4D064F1F21A8015124A943C5AAD0D1EB10B66DCD4961414EEC347525A880057ABABF88A98F4AE8C8244B70571B61 - -Len = 1495 -Msg = EDB075B34AD833E5481CA7E60C44A435F960F741B380AAB44DC0E7D36DFF686967B6B2CA190E972B02B574BBEED5B4DB6649094BD1E858599276591B2F9D8B4F09872CB8E2689D3263D363C185FE353D34E2B4D74536DA74F9A1EEEB5BC820462DAA02E08DE18666EE45DF1E3027C324757090DB9A428FD9616B77C7469D7D342FB3831D3C2ACAB9BCD3C29631445085AEE08EE985EEBDED841FB16EF45484E6EF05735CE8DE6CA10D71DF778251F993C5B59FD56E40C2F99A77B0 -MD = 77E6A0544E67699A5735CB71CB1005C205C109FFAD76E38AD7AD355238192F3941BDCEE43E0410823EF23759F2FF8D4476D0C557F885D6D5FB7F02007CD6B628 - -Len = 1496 -Msg = 8B8D68BB8A75732FE272815A68A1C9C5AA31B41DEDC8493E76525D1D013D33CEBD9E21A5BB95DB2616976A8C07FCF411F5F6BC6F7E0B57ACA78CC2790A6F9B898858AC9C79B165FF24E66677531E39F572BE5D81EB3264524181115F32780257BFB9AEEC6AF12AF28E587CAC068A1A2953B59AD680F4C245B2E3EC36F59940D37E1D3DB38E13EDB29B5C0F404F6FF87F80FC8BE7A225FF22FBB9C8B6B1D7330C57840D24BC75B06B80D30DAD6806544D510AF6C4785E823AC3E0B8 -MD = D00E919DAFFF3D5E51AD3A3046F5E59D64B69CBCDA223CB28BC370201D2C722BAE74DFE0086B0EB47BDCB62FABEE870C3340D46E55D8CFEDF2DD3CED8A8DB3F2 - -Len = 1497 -Msg = 91D47B29F4A6397296F8FC30D7DEFEEFB9A0A29D56A31F0ED443996E66EA7B9CFC0122F8D942B8946F80C352C468DDD7F1FB261C3EEDB4274040BDFEBF60FE4F689FA7DE2D0B692F9E401BA17B810906535C4DAFDB004AD235798205BF9615E5B4FC385F6192BBDF4865C4E4B299B1494C27D98844F7179EB21A7CC464833BB5E6A0165DB54B9F9114EC8604F662B6B3E8A02E22AFBC170D66CD06A78C7831083119BCA3356079688837B1F2488A4E0A12D754166FBFB4FD81CB2F00 -MD = 4C56E96A08D5F843B7260E8863625B2BC24E1139D1074FE54DFBDAC66D51F81DF558EDD63A7C913AF81DA1E0C2CE9A8C6E28BE841514AE4CB1363ECB4287144D - -Len = 1498 -Msg = F5CC4F8FA3793571B809F6CE2A3D500B4B435116AA90E04FD2A1F591DC94EA41699033076B30FE816769F0B59F37E72D2E476DE192CAAC4110C2A46635A05BDD8516C53BE98B505182CD4A75E6263972A2AED090FBBEF69F929422EE15737C23DF60B26797937A257383699FD13F3A85B41429CBBE83B6E2AD4F5D7C5D935A956A73E17330D822F7C869E7FAA76E4E8870D9E0A3B219CF145BE394D339782A927386F1FA2B1CAE28337126927501A43F6947B6FB80364D0B823DC500 -MD = 06197FA8678C6FF1D1DB872BF1B578B78F4CA65107048B3E428DC6FE0F95AC9DD1AE078E99E5517AE37495FBAE2DDCFD98E52FCD3001163629F9AF2A692C3BE7 - -Len = 1499 -Msg = 5D712726889DF7831304D027671BEB451F1A32492A7170D7FEB2FA755AD8BB2E1CD6BBB5DB2BF4DE1588CC0225F674F10F8AB9846CE5370BFC99FAD1110D7CAA132B2FB08F371B4D067765ED91A8E23D385EB065D47530A394D588777B3CFC22D1BF8F68DB285B597FBA71D243A4C4AAC7B0D1376A468A364C16A25F1E4404620EB9E9D5357BBC30F529FD8F02EC09D959417E2D4B3E2980A20D8F633BE8B9F53FB8EB276DB34CC1BC10CAE1A6BE1ACCCD75F3775DB19EE52B361DC0 -MD = 4DE530532506245DFD2ABE943A8A0F78A18B7403EF0FB00970C3BDB199728E9D942AD7FAA1718E5CF1E1526AED502A65D6BD9D03063E2DA1F568589A5D4BEA56 - -Len = 1500 -Msg = 1809F981B54AA5B37007A269F6CDE7144081B3E6538B3205B366DC7C85DEA9A1655B3CED86D8B9CBD892E3A06FE3A57736128D469FCDFE32FACF51517405FEDA833478A3114B365746762373B6DA9BEF0E8F08F0E8D7D4996B5AC19A48A61223ADA7F7D20BE3BBE9805784A47C04A8FAC94AC5552E75E3082CBB2757DDE0744FE97E08D403240896CE381B4E48AA5F45CF3F5B7F33D402DC6070CAF90D742799E861BB792C009C636D8D73EF0C1805EE47365EC0EFA6C2CD794CDB10 -MD = 61752BCA53BA4E7782D78230E0E6393D83F792E882F758EEFF633C50E4B11D9C93D4353C92C260A99E6E2261A8BA6FA6E70C1A11759BF26579B5B1EB50DD0EE5 - -Len = 1501 -Msg = 06ED3B343E6D7B3E85BE6CCC154FE33CB8F515DFBE0D90F0E707E957B06F89C0CDE0D7E767ECA5DC6F39AAAE3A5330FAA2674A63E76125E66D21C82482E3F51A3E08F17B4F2887BED5810408CC243D52D535AEC4CB63E8FB655FE331582CFD29793C16A2E502A715BF6F71CBC3719FAF0D0A1C74B1D222028C524CF3125C5ACFADE467952CFFEFFDF7AE7A439320959148DD5F21E6549F602C7E329B9E59465D5E14987F7FF101F725FF7AB15AF9F73848B058C61275A3B1FB0AA630 -MD = D2AB33589B5C9A28964BE918FB2FCEBBEEE8E2F1FA632DF4354A8418300569E381150F2AC691ECDE49C8A965EAD8E5E0E7C9F7B6ED5E5DDF0977FD871E22358B - -Len = 1502 -Msg = DDF19649A6FFA95A56CB8458A9DCE9BA51EE5FD82120952C38D7E0244EEC4710F2D2D67DB61079E7658D2DC9A69B14427E1AB52EC3E973BCF6041778D95EA4B6A172E8E7ECE8F245827AAE4D057708913FA32ABB973AEE71EEA0F3F62CC8B4A21B924C20AEAA00359A48100F8DB8E8DB10ACF3270681150E326EFE99739332B4FA7568344D73A0943606E4A6FFE49BDC1788301FCA269987F7F3AB43530A0089D5FFF1CE8F3389F6E1889309ADEFECF15B05CA13295BB554E8D2ED14 -MD = 0C7B9247C8F9A0F9DF69F9E0CB4BE46D4D3E6768775EC0F1F078B2CCC78F1BBB5420E4B406A71EBA18C6F1B2A01F866C13851D0AFE5B3FF1F5DDD6D013727294 - -Len = 1503 -Msg = 4E72712C6C4A26956F86B9EA99A334147AFE15580CEB51171AD5F95E654AAFCCEDFFD10E214F5C71B7AAB2147C4A48404088C22EED0F4BF517D414CE1D2BB04825FEC5E692A72283DF63FC947323ABB95FBF2AF489BD1E8F769405BCDE2D48B892473D8527374AEC620E0E81AE5220C1BF8C4266C8C657A681F7CCFFDD16EE545E20532D93FF70D4F5A47A5A168911EC5455BC4E78706D6436AF51F6939AC8D8598C0C43FE8E11912DDF8B342DAED02777F2D858B967FB80854CB054 -MD = EF75E55A3026514C8D27BE5D8BBC77567DDE6D491A997F36F2C0E56EEF9A3E583452941E4DC95462B71EC2315E46EB563A1AA2B142107BCCDD735681A82584A3 - -Len = 1504 -Msg = 6B018710446F368E7421F1BC0CCF562D9C1843846BC8D98D1C9BF7D9D6FCB48BFC3BF83B36D44C4FA93430AF75CD190BDE36A7F92F867F58A803900DF8018150384D85D82132F123006AC2AEBA58E02A037FE6AFBD65ECA7C44977DD3DC74F48B6E7A1BFD5CC4DCF24E4D52E92BD4455848E4928B0EAC8B7476FE3CC03E862AA4DFF4470DBFED6DE48E410F25096487ECFC32A27277F3F5023B2725ADE461B1355889554A8836C9CF53BD767F5737D55184EEA1AB3F53EDD0976C485 -MD = CF63F28F107A509A416F9A92C4E4DB4DBF00FB52C2E16D8BB9694E09F9142A904C34E1E960BD97B8CFB2C53E7660C79B841D1565CDAB83293234026A23A56D12 - -Len = 1505 -Msg = 21C9F4F5D4B2F235C5DB749C3174A603E5BF933C0C383FC4FA5832F7C110080497D8A93D3707DDA98042343A2FC52BD4D546A8806241E7C59E98D7ECD2CD3CB4497514FE12ACC0F124024906755F1D76C187349BECCCCEFEC2AFA2C68C50886121087C7FDD4E0E5BFEAB080AC98525900EF581C58A9D71880967F147E6E1D8CB94B9B1CA93EFD3AFCA6A365E44A0D1AF1759A5FBE089A3EF75B0049C09CFBA8D535B629F8FB672BA08B67B3AC7F6045E3116C98DE660D146141608C800 -MD = 69B5E79E34EA61B5DF62BBF671BEF3B515D9C1651C27CCCD274CA8FDE387C891D294D2E6A588543522C0D0E58F3D57ACD6D00A5203DE2B96DF5251CE3E42C9E4 - -Len = 1506 -Msg = AD079FF788E9089DC1D3E82BAB818ED4CEB3B31F501A1A78E59EAFAA6C5898A42D4A766E775F364D9AF8E0E3378CA0C0B3E3CED670688D6271966F6EFF622A4E862C847A43E6A600F9EFA1EB9E6CC3EA624921185F6F8909E9D98C599ADB8EC63ECB752F5F86C4312E7A9F6679E6FE3F181B525F50A6313DB2DF33EAA70BBC0302EE9C7166DD84D2E91CD064F9CAC2D9102938E76D5D78130054D532078FD3BE22FAA84845CFCD91D919ECA680A67D1987E264EC091D81B3C5C66FC440 -MD = 1F555ECEF326BC021E3759C5EE813C8F00BEF4A628802764DA6A100FA5D76EB90278A3169F61B4E8F55F27623ED3A9B5803AF4380CAC71001808743207882121 - -Len = 1507 -Msg = 8837670BAFF97C556C9C46B55ABA348121CDBCD53A976EFBE084A1F635E37AD9B7CD3F510093010B74F663564F221A80E2582413E0334338525857EC20584D289870E51BEA927EB26C17B2B0EAC46863C7992D73C8395FC914C91C73B9B3A170A599D4C04706E314F8866292C663A8BC130C41209A92A92D6E8957428F1B0A03A36ABDCC1FA2F3CDE567A6F92ADC03496A2464B4B9F9E1634712BA3C291C4A5979A97D105B65D94FCABA9F717DF9B93C799E9B8ABBD7054B8E8AA5B640 -MD = E043D6EFD74EBC006EDCDB883B1AF5D73F9EA2FB563D08B7D9D268B89047F44F84B705AA85029A30EB8827E3267CD8D91BDABF8C7BC069876DDBFEDA270415F5 - -Len = 1508 -Msg = 5B41626C5658D205AC9F26DA1670435AD18AC4AED629C65F5DE44CCF1654B871E20FE5F0601108B7D3E6E1E773209D6DA0CE4D20D3865D57F7FA08B36B4278DC0CD5548EB1C8FAF0D3D04373A3FA5887796C3D18846A2A190AE553DACBFD712987CB18350CD4397E89DD7D176279181B762B4666471DBBB53BF8B9E53D604054B65E6AAE00CB588424FD867F745AC82191274939FA4CEECB109F3279649B0A9AB74A5B3DEF529D3C3E98B65E0E32E3568AC227322B67DA6DB28BA57BE0 -MD = 51354C314463CA44E0DBA407E64E1AF42B8628A55C24BE5BDBAFF8818AE26C866FA4D934C8D7E3038F42A9315AC11B1A05C414C24437A9678F034EF5AA8DEA59 - -Len = 1509 -Msg = 76C5DDB4AE2FB58B7851A9F87A8257CA9FA782F690D436EE0EA3AE1C649258FD7DFEFE8D638D1176869B02617FB10C679F37ECFBCD6D8FDFB46A30D068F371867B858BBE3CFAFFB030D30F92BCA496D702759908ACFE978A986B000BD0C2D91918CC1AF38BFE0EBD997017CF687F70D3ED17EF486BFF5449C8141FA64548A6C4F34E477B4FC0DC9CA09A6EB9EC0EF5EC119CF14B055240D9078BBBA339BB8713F0B4DB7B74CBE88EF81B8B2851E377C26672D36BB908B32D8DCFE33820 -MD = 096EA56B5362C3027C514AC7F45228A7944F69084E6E34A43FFC1687919B7D6747049BB122308F45C5CC6C7F5B1018A3F4E1A347DBA512D9A9C59B3127C725AC - -Len = 1510 -Msg = 3231AA77DAFBC66F776E85C3121AC5B75EAFFE1E75E684E9E128332D857B397983FFA193A1982C966BDA623F065D7FB79F78794B7C70975F04BAE50C1E843E00222527B996E9407961E4EC08DC83851D2C6E4EFDD5F1B408AF0D9EB361E1E7CDEC6F3CEF0DA71DC0F4B165253F9AF8974039D1AE2B2FFECBAC3F366FBF999574A16B85277E74384B587005211CA3ECBAF1D8A6E2B4525D85DBB6E025A5A6A274D4AB5728BB9F0B60FF9E97598A3A322303FD228B487DEE554489750604 -MD = 975852616AF8FCED6A8D5AC076CA1F9C9C4921445B91FC4728523F19CCC6CCE181DA7DC6E8F13B3B144CF24A42766B222159EE5CE9C92A2527BD22EBDEA0E057 - -Len = 1511 -Msg = D40502C71D588EC7373853BEBB5B6C453EC1A10C11C0CBAA921723C5C43CA3FCAD59FE103A439421E0E1EAA81B927F7F90E2D9881A3ECF12BB041CD74FA925AC0F41800CDA6732720A94E1F64716EBB3DA6341FD33932EEB3A2C78148A4A241E54F3CA789C9E9CB798CDD048255E1CBDFAF9BB497428BF33D589FE2404966EA6ED025CF9D83974F82B0A0424DB9BD2E819EDFEF2CB75973BF5B819F1ACE8E0AE28A7FC82BC18A43B92FE9F86D1F9F3E09E5876DD33EC416357B036DD8A -MD = 43918A865B4F6AA4AA5B1419FAE0E3B3C47F80C936B1B014ABA735ADEF213BEA0A09DA23093102010FD94B24F3CE22AB3AD1CDF80E6FDF10EBA5726147713C8C - -Len = 1512 -Msg = C9534A24714BD4BE37C88A3DA1082EDA7CABD154C309D7BD670DCCD95AA535594463058A29F79031D6ECAA9F675D1211E9359BE82669A79C855EA8D89DD38C2C761DDD0EC0CE9E97597432E9A1BEAE062CDD71EDFDFD464119BE9E69D18A7A7FD7CE0E2106F0C8B0ABF4715E2CA48EF9F454DC203C96656653B727083513F8EFB86E49C513BB758B3B052FE21F1C05BB33C37129D6CC81F1AEF6ADC45B0E8827A830FE545CF57D0955802C117D23CCB55EA28F95C0D8C2F9C5A242B33F -MD = F21B8D45B6A857CE663C074C18CC54D914CDD5EB0D968E6153A5F70069345D205DDF4370EC473FC80B05F937D014C0A464582CB4A73B1B72041C5C99F576A41E - -Len = 1513 -Msg = 164EC736064045386559CA629C733C82B4869BD8890BFAFF495CDF01D15EB92ABAFB515BF16374B33541646D671508B2CE2E4E686A1880A7833277AA51A69D5530339FA446CC614A423669B03B2305869A15FF83CDE64752F0515EDF5A9E48F8D032D13A73B7CCA40E5B2629CFEA0517223F39992BD3EE66F993EB52BE8FC70CBA3C401ECC4E7246CAF7F352CD581E4DCBF0C1A57EE47BE34F2F8D6B005C5898A9F1D0716AD7C2BCB028D939BF1259CC71EF3C21513139301B5A2E996280 -MD = E78B01A6741D3CA64D1BA744B2C140611FDDC0620234A78D7248F919705D3931CA05A4E324610DE7D75F532E1431A884B6E0407B96EA586982D0D72F885AC754 - -Len = 1514 -Msg = 93A3301751EBF08B69B4F632DAC659C973EA72B97AEA6745C3D256B4BEFE304391C4A8178B3E0D68AA32D935F10C455F2D2B419FD4041A0362E7F80E99C0F7EE35733AC1023664E80F97D3CC8A23226C1719D1CA3AA5D57FD37249340F280573D7D4F835CD2AE93429C26635322CC5B6127026CC7CCEDD13686D085292136ECEE97C4027A3625DA2B75B3970CADE67F5B804045C91F5C8C44004958EB6FEF772684B260164C15A55E98781898AA2453899E373EC0DBC940054D35A789400 -MD = 17408ECB1C7C78FBDDCF3B3ACCA9B6BA8A68D3335538BF2978230C5415173A2EFA838B59E4ACC009014D69343FA3C7A75BE96A83D6B223C7BC825A71E2921B70 - -Len = 1515 -Msg = 2F64B5FD5A770053A8DBF0244449755471C20AEF67A7B7F80119FBCE5F1C7684E491495D28A1C2BE005F7F973A851957BAC2E70B034E198B3E43D22B40ADA9925808BFCE4FFDB92C96D90A185209EB0C1073CE48282C7066CA26F06138E574CAD984C2F76AE1D17EB05E873F1FD5C767A4EB43C2ED184FF148D55A394F862F140431BD0D1D57190B5238C065270580066CEA65F6A13FF92AB663F7AF0EFA9102F008C1C017C9164D5EB01F345A45A1406885CC039D79421AADF30E038D80 -MD = D6FD519620490C582D58050395F26806B0F9CB3BF874518AD23E3D03A440A8CF50CF185D65E25C089210762C5FC3CAEEB59DBD71B369B2708DF3C0618AF09B4D - -Len = 1516 -Msg = C95EC3A4573DCDEB8ADD58F4529EEF16D9E31C2F9CE4DCA1781F22C9F9E74A47D3045526C7C053030079B462E6A38608697D6FCF7C0C2563C76449271F64B00025BE2DC445ED740C95D605CFB974769140477612080500A7FC64BDF267C8155AC9A068929485CFAF0A2C1EE2A8A005E993A4AD60C1FD2D6EB9AD6FB24945C807AA0A879B601AD735655121A119D87E14D0E3432EA6580137FACD27DB351ED3901F5C6330B7EE827BE2099904793FF3C6F3C88B2D684D10531432DCBBDFF0 -MD = 8ECF902F48BD21C43169DEEDD84A7806A3FDAB7E6EB24D0798C1BE3ED922F251FD21B9372E8DA1706D4F20FA64DB2569F7AC4CD28E098BAF77B21C6C0ACDE100 - -Len = 1517 -Msg = C1E2C87F7DA563CE3970CE5F1BB25EEE582DEEB4D95D5930064982B139CFBF0396DF7F4625B175AB5DB3170A42DCB97FF3588FFB9178A45D9B7B147B5361156393DE9581297BFC47A9EB4F4DED2C05119C97174FF0191C27C83546CA1F06DB74EF562A16D61330D2F3568A2F09659BE40D5CFFD1D8406711D90B51990AD575D1C34A8138A9ECD2F7468CD39DE4B9536ABC19CCA8EB729E5437DDEB86319B5A7412975DFF6EAD33ABD1F598061CAD24DC0810DFA064A3947A773A338C00E8 -MD = 0171938F3AFC222E7BC2C57F03A0D0DAF4730EFF8DC3BD4BDD12A489887A3EA96B255D4B9BA74D45A0061473AD9B2E61A05EE594C93090EDCF21F2E0A66182F2 - -Len = 1518 -Msg = 98F2A571C0545A06CA3830F8C73789AC2B5361BBB2B93AA1AC877781F827D3C207703FCE38031BC54189F87A43F10860D4B402DD65A4DF9B5AC88AF2B0B37F68BEA1086929E65DC2AFF2C2FD215D6C8374DE7A89C407F48C63B203896C353712BAD1AEC664BFD196F906952149E50600F831F05DF71301E0DEBE49591375956930D72D15550655E48A8080D651129C5D2FF92E80A3C13745E74397FCA228AF940A349B3E90F51CD58666F1BDA760B6A46F0558E140B6DFC4F5748C58BF4C -MD = 29B7341449E46A580ECF849D79FEDF3C860E5991DFB3FCAFC353FD0FAFADFF4D80FAEDDD258C3B22ADC52C615A91AFBA41E75D83FE1FF1B2E4792E88F3B7D0AC - -Len = 1519 -Msg = 0A1CB542A7A25319117119DCBFFE09F7DCBFAB7B689182255A9A962E8CAE47736835CF659D7514E0DE2C68D319BDC2A220159B1FB090925AAA1660E1867461AE0FA3CFAECEEF44344D60C6803498DB0250E193482ED57871FA5393604B77A5B5C9A9299152F889407A1FC6D7309888F23FCD9955A43E3469FAA8B13676687C46DDB31D3547708AA814735735D39BA14CEA70E893DBAD172A244E51B5499D7607DC7D724F74ADC906A8C3909F643CFF39E5C3A41F12EBD18DC52E9BD4DFC0 -MD = 9FAB2B07DF63864697BA2D48C9E43B777E744BCC888D21D5C268B0FCE7AB1F58A0B20FD0939AEA976C3F97C9DA4A2A9BA0F5F2757A3427441EEA30D0EEDADAE8 - -Len = 1520 -Msg = 07906C87297B867ABF4576E9F3CC7F82F22B154AFCBF293B9319F1B0584DA6A40C27B32E0B1B7F412C4F1B82480E70A9235B12EC27090A5A33175A2BB28D8ADC475CEFE33F7803F8CE27967217381F02E67A3B4F84A71F1C5228E0C2AD971373F6F672624FCEA8D1A9F85170FAD30FA0BBD25035C3B41A6175D467998BD1215F6F3866F53847F9CF68EF3E2FBB54BC994DE2302B829C5EEA68EC441FCBAFD7D16AE4FE9FFF98BF00E5BC2AD54DD91FF9FDA4DD77B6C754A91955D1FBAAD0 -MD = 92287F42AB1A2123669C4D35F18257D3A536445F0E4D2C801E99F8529CD9E2A79205982C280C7A6CDDDEF24CE960EC6CA9A35F590AEEBC40448C389E915FC4E0 - -Len = 1521 -Msg = 047A906EB123927C5EBCBAD31211D731EAEAACDDC7CAE1A13D4068154D317BB7C010D5FCD6C4D800F3809D5083F8625BFA9AAB71E1687689F43FAC8675F51400DE5489CDC525421C8230B732EE5EAAF76B11B9BE4CC49C815FFA8B658CF0F18388C9D24202EA611E086D31BE4D1311E372E0115CC5E4ADBBC6E0B2C371410DA89196D8E447DA34E6B3787DA9B4293666FA6585A76FC2B130561790DD10C478A7E071F8EBFB933664F54ED398ADCD1FA35FAD11866DBE05DD8CFEC00549D700 -MD = 2E64D553246C18696BCCA823542DF0C50D6B027103BF11B8D1012C7FC76BAA721A02DA203F9D0806033A5B6BEC1DFC894EFAA397691116402D1C442F9897FBC9 - -Len = 1522 -Msg = 18059DD3D09C5F36814FE25AD96FC6B6BEEB0DB9ED79D6E8D1E252E2A43DDFDC9E156FD215BF8426F6C5EA127510BB99777349A0EB03B68D03CF8B9F10BBEDBA7482A86E1D8E054E60F9821083424000C215D13AFB47D3C33699F452AB7DA5E2C95685C7C87E4F465FE78A8E79C76ADDC3501C99C1734D09DA817EFCD4809CF57A105BC1253A6D2A4E23D2E431A426607CD1C61980CB26143F03EE50500503C63F0206BE5B238888A038B9EC34C24D5EB6E70DF31BED948F373B4F7E52B240 -MD = 3C56C541F3BEC61122EFA855F941C83E6C327E5292EC59DF0F375926AF8E2F427E566A81D89A12A89058F1BC37D2F605B21BBE00FB41556986F219D863B1D034 - -Len = 1523 -Msg = E31399BE5D40239F6B1925B165BB34573FD8FD179C082027792F94B67D2545630F0A680E85D2B835E31CAC2504ECDB49D191977D0E4AD69A76AFDE5FD7A4D70074E9B522008D3A5A1A6D60B722F84304395E2D7B7E29805FF653216833DF11C367448AE10E11D37091590D22EF1C97E16B3AC8CB900ADA0D357C9FA2944313D6B796E1C9995B07C03098E3777B7582A7091F0D03A611BC76622B8CBF80DC007574490DF0A5B93F25A1A6EA9CDD4515CD9CCCD46A56B116B7579E97F8F22180 -MD = 454A44410C7DC8B59A73527D97C7D81EDA0A3369EC598B609FFF74E8129C2B6E834C789F8B0358ADE47E58D911CF84E0A7E6A94EDAD51459FAB37CCA7C894096 - -Len = 1524 -Msg = D66E3B30963A1D5F71160CEA74CC1E8C3CEFBA41D2CBF5D0E7DC3A97316E6B21A7D7C5ED1FC7FEFDB8B628BACCF0CED538FE6F6B18A8D1A9DE4D8E31448170F4CEA96CDC7A9F2FF0A18A4955C75C604DEB98AC158961D6891AD5FA867239781DA424CCC806E57AA77DB7BFC85AAA7EC720BCA36A6F0501E2D55D7BB16469C9E4018CA34317F5D1AD6DB2F0E410493BC8FBDF38C1B8ED1ADDB62C2F5B7592A8D8627CFE97F0FF180524845C8D6C5ACD823FA1D810FF8E228C531EE61BED5330 -MD = 37E0F910FFE1211DADD71911C14ADEA4932688A5EB7621FB29DFDF0F10D82AA452BF3B158B5F5E20633DF3F9F4F2F9C6DB3941D0EB0DE8AAA51297CBC0CE4E3A - -Len = 1525 -Msg = 9274C08E458E1AF850826A75FB9A25F7328C6F427EC1B9231947306D864A8759E7D743F85EF79160F6ADAAFD829640C2E6C88892A21F0E52FE1746C57CFBF740D5674AA41F59A0135E66151B1FD654977A32C5DC744AAB2EE36D60A140FECF6BB5BC8A5BA8CE7CDCFA218F285B93C89B07E0349B6157241F7061901DC426BE93956089B38093513C792CDF73034989F8129B3232B540D5F8C86417194AD4AC481FD5465B7777952A4D3A784B0C10AF4A75C6FC09AC20973780B30110E28B98 -MD = 86F4CEBD25DD4B13BDAA05FE278EB54864CEF62A0592255678D2F580913355DB98A3658AEDB75A06B6BFE45763BE739701DDC2EA4D29F07396CFAF8AC10514FD - -Len = 1526 -Msg = 688D106A612E437C87E453D503FF3341FD0AC63A6C0AE190E5B7CB426F671DC919DE4A8A9FA6DE17B8D489DB16ABAFAE781A83A349A570BE5D5493D2882AE4FC881CB10BC97898BB67DEEC91C1A15F85FADF051B256F0A3098F539C84D51E42049011EEEB9BCF709146E76F0F491E1AF48EFD41EFB19406DDF842D25EB8DDEA67AD1AFDEB758F6A604938EB746680C5123080D5FF2B3CD2663A7AD7A7DD76BCBA59739B36ACA628C5454EA76496DB11A1538E00E632FDD41F386EA85C524B0 -MD = 8C8A6775672841F48A54EEBD9CF42E5E48A5D02CC1444B25D721C1654FD3036AA598778975A8DEEEE7A1EACF38450527A715C11EDECED909B6D27D879B37E423 - -Len = 1527 -Msg = 1D7E3221FD66FB9CDE83AAE60A4D78AB5A7A7CA08B829FFEC5D38D838F114B2115D29577C055188CF149F28C81F76D6800DE3A7E96BB808D13081914C9159441963F9833175B952E5B6BA09D62EF241AD19CA7942049E2575597B1A53365692BF46B211B6182D3C2321C15883A9D22FA8BFF917F26102F4E82331109B328DF7359836BFD008FE4F4AF0854EBB6BAE0561EC8BAEB054877F3BEDA6D8D402BA47270DBF6207A243F7ADFF17658E35D6F52186E4D79572B99D8812C67C41617C4 -MD = 313299CB8CB0BD14D24EC36837698FC23D88DD1C44A6578A2D52F515157C29F4955C3F494A92B5131335A5E1309061D54C4D27345143D22991811D031BFEBB19 - -Len = 1528 -Msg = 588E94B9054ABC2189DF69B8BA34341B77CDD528E7860E5DEFCAA79B0C9A452AD4B82AA306BE84536EB7CEDCBE058D7B84A6AEF826B028B8A0271B69AC3605A9635EA9F5EA0AA700F3EB7835BC54611B922964300C953EFE7491E3677C2CEBE0822E956CD16433B02C68C4A23252C3F9E151A416B4963257B783E038F6B4D5C9F110F871652C7A649A7BCEDCBCCC6F2D0725BB903CC196BA76C76AA9F10A190B1D1168993BAA9FFC96A1655216773458BEC72B0E39C9F2C121378FEAB4E76A -MD = 74A9D8F9F72908C7502D1C41212CD86CF4344721A6F02D390346F2BAEC6E6137421E6516C3235443BC2337B3A77630712A12F11B7BA24B2D7085499BA74BCB90 - -Len = 1529 -Msg = 7C7710BB2B7F643FA7A2DB758E18152AA812CA88461EFCE1177656AACA4F236555CFC69040EDF76686F30B233462AB67614FAFA20028DC0A42E6F362C8A978F12560DA7A2E4ED5CA37CC7D79F7A5E8DE92A6B9BA7D1E4ECE52E22A56904E39DEF32F2D03B7688AE1C3E499FFE9929D9577020465847E5B70710E7426A4F2552511F9DA9F8B7D0F7BE1EF17102E4562531F8259C07B52270DA01179BB320F7ACF3F5A6E22764DAC232EDAC5600D1C70FEAE0B011EC28D9D0B66A6CB860A5E9180 -MD = 8209D3440B91607539279BBFA3ED7F016D7E5B3DFC4E78F633942D1D4A2A27B5E63FC1A760D4F539DBB2E10BA819189509C7F5D3D0C0B3F38F4E0F436FBFB9B4 - -Len = 1530 -Msg = 3BE11DD7FF78BB7C917005B235AC496BCA96A4317FDE079F6D358D95BB0352E9E89C29AA781203E5FD63DD2F685810386950E5946C0B9F0EB88877AF5175EE884E76935F5301DF59C79A06C5BFC6620C4D6FCEC86FEF9E518AB4146EFFE8813759D6415505D84B0EC66D58860D4D415FA36A28753F7C61A5B7845623322BD7743E079C82E6B9206398D665AC18C50FB073BE119AD5532A7164FB8FF8064D0D1706A2FB430E37AB478E4032CE110AA96B7963B636043EBB873F21FB106C5CC400 -MD = 2A13C372A71DECC6765465BB1F38FD0900055E235B359E91D7BFD8020ED103022A3A4908232FEC0849046D0A5244EEF91B26206E9234AFA526B66F38B1682917 - -Len = 1531 -Msg = 50E7C9F830EBB80B5AC8B0A5B110483A97D5C549D343AEFF2259BE20E036CC1D80268C085B9C25317101E24E165C577D04E07887AD17A58E799C4C6758D8FBA836B4AF48D2CF31305A11FB92CBA4B23C4060F4A11BC2A1B8151AD547C6E9009DC1D46A38C633D956EF5CD75E1D697BC6D1251FB33A591AC4B138AB72C4D5551FB2C73BB5D946E16D7A9FEB18AE38BC58B2DF4254E650B8EE4AAC94D9444DCE18C2CF4D38A80278BB2E7FF0E167F252C54CE34589D93887BCD6371C73B99E69C0 -MD = 5A57157C811F3B67E2A17E49DBE5328955803575987E313CB0767C109AE1B133EC29352A81CAE8FD38E259E4059FE8E3A61EFFB6B1D461B10C8535BA8C0271C5 - -Len = 1532 -Msg = 939685986E3BE870F1D7514A7AAAE50CD58EBAFF6EFB1FB64082D27AB939A40A568EAC0C1BBB33594E2471BB545FFB09A804176250C6E7DB8C11D0833EE70C09CFBB888116A7C8EB064BB52794425058AF707848DA63418A979231977D11FA509D7696C58FE3647029B7A85F9E6A682E195DE0D9F2AAD7E4F0DE6F22040B7A26720742AD89F34B09C8BFDA2072A0D43EA0AE4159B6178EF28A8A8FF9899679178B433BC78097924806B4DD854214D3EFA67F9C44DFAEFFD944E94E03C5728400 -MD = 20021BF863553172DE5797034BBB37CC9114F5F35A507B861EB0075961DBAB8E68B74858547A1B8DEEE0ED213C7C8A8911B019E53A3A7F05252E309B3DD3FF7B - -Len = 1533 -Msg = 82EE3ADEAEDA69F4A21548A9CF4DBD79B6E6652782541C9B0F6F4C1589316E20E9EC5E6DA563449DA640E2656B5B790E1015BF59B647039625F3517EAE3D79279FBA90C40BE10C26D9D68C709893BA8EEE250C12E65391A66E452989E5CAB836B371975DD71821F23EBFC5367CE5FFC7B10FBD79A80B1865253810CAABB06DCAB11345FAD11F2A95590F4F35EB3D465BBECD174AAC660821DF9A71BDA01FA9C71D96E7AB191290A0A03EFA2EFEEB25C141F8CD8B4FAC6A075BCBB67E3B275C80 -MD = 1C892C203DC59B356214626536B60D04B113BC559D4B0AF16737C13956ED66EB597A6DC5553A86CDF2DF2872D4BD9BBED0931A8F75C733C65BCB0439EC0774A4 - -Len = 1534 -Msg = FFB1B0703490FEFC1C9FCB456E94CE7BA6366570A8B71D1B65B06468AC317461946ABC9B2330B959183BE534661975956C57DE13EAB4147E82C3CB72EF21524B35EF0254F934D966EE7A01861A3AFA9CA333251549859FCB105A36F16631E72DE0C9BB3D1051098F016E0864CEA78B4144DAC493C5088C2F212D29E115EBF3B6C7D382C25947950E9759BEF6407F8EF8F1F3BB9C65EA9111C3F4854732B8E8FD7F9C369D7DAAA5AA57B6061779ABE02C34419ED60159C8CCA33FE2831E5A3814 -MD = 13833F76BFEB8C58C11A5383AF88B62D966325288C9046F16E5096A945F2C481432E66C9FEBA91A8F58BE7BAD3CBC25AF1DFCA5FF89AFD420D87A6E654C81E19 - -Len = 1535 -Msg = 2EDA3FAFE9381A10FFE89C83D818ED3E3F061F08A7928734842BB8B81D99019A342752418607DCE8E2EDEB229AE1D7E78111AF6B5C19FDF57BE5ED53F89BD7ADAD2265D25468529AA2A20C5FE4AF81ABF93FDDC23C37103F9795E13ABAAEB0B89AD0F7CBB5D65CE9D9C66CE49EC666920BED8A8E7CBE1343336BC82448594FA18502AA72B5FC509CC140F69453138BD07C00ED7B43992D04518416A863AB9793E527F31595E6E6E8A6D71582444006D2639A58181EA2B939B7AE1B2DDEACF3F0 -MD = DDEF008DA61C1F4B782BFCAB353991AF6ED038B6AC455F3F6A6EDECCF2F9FD976441A253A7B0EC1F763FB6262BC91F01066EC33952BAA2C5938FF249657F5195 - -Len = 1536 -Msg = 08959A7E4BAAE874928813364071194E2939772F20DB7C3157078987C557C2A6D5ABE68D520EEF3DC491692E1E21BCD880ADEBF63BB4213B50897FA005256ED41B5690F78F52855C8D9168A4B666FCE2DA2B456D7A7E7C17AB5F2FB1EE90B79E698712E963715983FD07641AE4B4E9DC73203FAC1AE11FA1F8C7941FCC82EAB247ADDB56E2638447E9D609E610B60CE086656AAEBF1DA3C8A231D7D94E2FD0AFE46B391FF14A72EAEB3F44AD4DF85866DEF43D4781A0B3578BC996C87970B132 -MD = 7432861132E6894BB6AE5115398198317E12CC73C0C5DFC61CB189FF5AA9FB0D62224CBB1BFA8B105784405718E6F8E15E041DAD80D11AE507B33C15C6CAC824 - -Len = 1537 -Msg = 22BC0AE27FED148842D8DC7A4F75EDAFCEB1923BFFEC9837198C87BC5F982CEF077B6031316C06346D9A47240C5C3B719C8A13D178BB248724E79DDA498483EC4DF8114D007630A995F81CD17899B264E1B5878645842C1D918C4427E1F9216D79F1B9CB8C69393D0A4EBBE766F3ECE21AE05DF4F67F045C1CC10F713E4A035D2C4B427ADDE84327FE6B8DA75520692F094EBBAF83D4F2149B2E968FBAE7AAB189CC988B4EBC2E20259F5C24C985FD3DD451ED9F4ADC3532C792C3E404C75A3E00 -MD = 70332B813681B9F13D987EA8993DE07F5A66DB7F928C6E57A62C62681596E80F152527A8161D5CDA05F9432A32000FEEB7BBBB3EA1C1F403F185166128454AF9 - -Len = 1538 -Msg = 13486FC0E375B8F22813F4066F9DC1695F945173CFACF57B9FB00518869EEF6AB5F50AF27DA2B72AEEC03014CB5E43E5FFF3EB6F1C912DC35C790962B834A5FA85BC123E09EC6D366CDD283ECB250CA85FB27F298A4719FDED869CEEE330C699D0AEE9A5626D9F6CA7D7891081738A5A897A1D3017AEFF03C74EBA000C53BE5AB121598CAAD58DAC265EF1ED5D365B25D13675FFEEA3B329210D9E3275CA305911075B44EE1B5F18572CB7CD15709957DF8FDFB0A05CE60DDA4A99C1797A0CA340 -MD = 4BEEF54B53F2C16F49A2DD5F93F365773B82322B2CC93BEF0A38A7955461AC175D115BBB961D5800355447CC00308BC1306076C2B7E02F3DE065538611EA338F - -Len = 1539 -Msg = 4063E5DC8320BED3AA4B6F13EF74C24E98E28BB686EC8190B5DEE2CECF117A905795710BB201CA7BCD6E5EEBDB83D462370AC4311389EFF237934CAA55777A29F6B3F1297D4BA0D41BB0A62BC2CF97A6575B2DE8E7E9CA0489D4B9603D883F3576161763C53E2043DB33C34F6C898C975F5684CCAE891C27A5C81A72BA06994B6036BBF3B8646235B317C5CE02BE028FCD26AD04456C89E23DF63304158AC1D6E3206B94A4DC0C5978F3143BB98F7E0466E4A826C40CFCB88B72D56F0968D4EEA0 -MD = 81A492B16E8943D068E384A28C03D288443C73AC311E6C7A65F209446E70DBBCAD8730356F8B188028CA080E233469503DE4CE4CB5D8D9F80EA7ECA96CE3FA54 - -Len = 1540 -Msg = 6A8DF103843D2D0485A3A89E41D83DD78A5310735F3788D4A69676CA4892190FC81B5F2B7AA11C68F00416383F13ECB8E299215C57A313A5EB4BF1A23B08C978C548151C515611A5CB0E75689A480A1119CEEF5EFD2043C1E7746A410396CA2873F6F0D949F35D6767E4986113061DCB15A5107B8E6D2AF4679DDE9E8EA8916076DD202D268C44114B26FA113E254A9512D73D6EEDF6A55BFFDF46BD330B354586191967C0B14FE5E3D29E8BB7B2602134E2EFCE6A1FB1797FC14D73A1AE5F8FB0 -MD = 5A06D1B0E6FB284F26556F0E7AF08E05D0A29D996532CB87085A91E73D2DAB096223A4FE50B142AA107C27B253D25F90F0719AC7663E244EFC2B2B2A3255170C - -Len = 1541 -Msg = 3CA201D57CA5785111782561451B1F8E3FBA9E6162D8DE78414F1F1C54C8E2A201958CA179D41EEECC204212BE77D90E73269AB485ED35CC96365887C076688E25E89F5854FCF9FDE708F6570BD8ECB12388D76354D6CE6944F2DB2B1499627FF5181119F60A0C864C3E3382CFA21901DA25B0E7DF7A1D944AD894E47CAC5895CDB75D547DE570396E6C1114B4B68702524D1CBC061D099B6926D9F2AAE4F8B54C5620319315381185795F3F0ADABFAFA6188C580A11527CAD352C20ABD9714280 -MD = 41E9DCEB110DFB67D391449D24A1554FC4536F4CAACC1FE0DFCF3DD7520BE8FDC2B8CCBAD27B6615ACE5D9A394F100D09AA81B29EBAC56B01C5F5F00E315677D - -Len = 1542 -Msg = B20C646228BDA529104BE210123D5E51708EC173F76C372912124937BA09F9CEBCA094B382B78A567963BE62D958937BE084B82C10F31E03A5675529D8BE52E1EDAC3830C19F76AF099AD547EDBEA4698ED985A4F077C55CE029C512383C8CA6BC523A66DEA3ECFECC2F267F61C57D74ADEE7AC446903F7C90000BF0D2D84DCB240EAB650335979F93D67B5C206F1C8308EE90DDDBF8EFAA5EADA079379E3FAE3F414790F6F63A1AD54651164F6A9BBEA1606D84229AF9A9DB9826A51244FD804C -MD = 4D8E7CF1716BC3FA7C0E132B68900874F78F40281FEE1165FF3006D4812E24560D94C15388A2BBCA8FA7AD5C16D9BD2483271DCE85B690F115CCB0F7804BA13D - -Len = 1543 -Msg = 0F224183DD571D3B290DCD180DB3677C9A9B162D484C8244CF40D2DF67A249EC305B9094BC309FC182F3C12BDBE0562B8FC44EF0961A0FD03317BD2058D374D45BACD55303B1F8D5C59C7D5FE05479E5BC2CB2CDB5B447ADD45427932003BCE15F835AF3A9B94E1C4A7F492C0983D8D406C8428D67C023C6361578C9A6B5F0EAA9DAC2913D4CAD882C05C275B8A7EFC4BEF0C12E066AABEF350DDC8EE4451595379FBFE98C7D2EA9F6C770FDFFDE3852C818322927347B4CCA27EA059C8644D9A4 -MD = B9A0D9A9AA654CC471A4B6C5BE2CC4BA948C44FC77971D335AC2E1C1EFA19A2CA253F811B75FCE54B6D5F4439FDB7F72FC2ECCD21CDD307906ABFFFA27798781 - -Len = 1544 -Msg = CB2A234F45E2ECD5863895A451D389A369AAB99CFEF0D5C9FFCA1E6E63F763B5C14FB9B478313C8E8C0EFEB3AC9500CF5FD93791B789E67EAC12FD038E2547CC8E0FC9DB591F33A1E4907C64A922DDA23EC9827310B306098554A4A78F050262DB5B545B159E1FF1DCA6EB734B872343B842C57EAFCFDA8405EEDBB48EF32E99696D135979235C3A05364E371C2D76F1902F1D83146DF9495C0A6C57D7BF9EE77E80F9787AEE27BE1FE126CDC9EF893A4A7DCBBC367E40FE4E1EE90B42EA25AF01 -MD = 6AF4FF4C423051E3306ACE812E5CFA85532B73DEEF0DFE601D2630632389D0FAB2A109214D32508D2391775665B87A94D1DF29DB1214CB48DEC10DBD3D8CF591 - -Len = 1545 -Msg = 094879F98FF555E949C7165606B1A9A17BF188B2CE0C904C89AE519373EF772AA8A08AC42FDFFD933F18EA8DFA598B5119D6F2FA75AA69B5E18951F4553448002BB547763E7699D458D04F893B065869ACD14F7C6A39CEEA6320A63158E7878B94AF3A3116A6150AA23B624395F1555BADCE532C69C256433BCDB2E74985E330CF408F00DE21F0A191C83E91FDE112598AE5B49916462A6636BEECC0372E7AAA0F70E8298EFFFD9E4FA943D2AB32B1936423AC4295BF143EDB174F5F1E40F52E6400 -MD = 5B8E99990A041380229991189D5250CDC31EB42C6D81E073B100A6F5821686B8544BA4029558FB5E00CCB914E9C68C95CACD556A93E9D950862BC091F10A15F1 - -Len = 1546 -Msg = F535558E373874104E154A503F82CBCAADD4617A38E9670CB3C012869DF16AF75DB0E9AC8866A48576A3EB212533E1064A60AC17AF43BF47A7D2464D93BF2261D0DA09A9F97D4FB5881CAE75B065E9F76967EB9E39A4770889423649B70CD15F1E091A8950C51F3AA29F66E99BC8C084627625899FAE82846CEF1979A94E29D9AA90C0C5E32A30BE520E7E7BB5EF0E9CB8CC5D2E9E7F41C37EBA0017C427417543744915A77B72DDC3161929ADBA0B992E9EC3B8626348DC889383D38060A8589DC0 -MD = E0A5EFD86C6A4EC0CF32B6DF78B1B73B4BF531A0BA7DD37C2F557529214EC6F2E76ACEE7A7A85EB6224516FE4F755A9EDF836F9406401452418B71C4562CAB0E - -Len = 1547 -Msg = 4AFB68BB38DAF4C64A43D0892DE39CF0EE0B24499F434BE306967C933CECB3412F0DAA124E67FF1A58BB26C9FC9F91B6401317B84E0047D4B6E57D2F3D9C88459D1603B2748983A8C3B4CFE6E81EB9DBC299BA3927A3E1F76A5F54812EB9037189EAE3B19417B8F48CEB2C025F122DB62036FA4290B38DDB90A9687008A1B7D67DF503371785D1C7519FBE21B5B09C448FA69EE914355C95230D446CDBAA90DBDF354AF8C86E01DA389F02296A6B86153A078467B85885D276AD00216FF797B68C40 -MD = 347FE0D44D85865A1BEEA55673CEF3C35629D9FB7CAC25CA162E8B0D721A7D2866793A779492DA8459452D0F22F8EF6BC4E07962AC6D84E36C92E0B8C174D873 - -Len = 1548 -Msg = F0F4921AF9447384288AAAE217F8C827444426E8F5D06C61F7E6F02ECA806556C4A0AE6268E6A9C2AEC1A3081503BADAA999036760C234A66B6879ACDD9F59FE28EF3026310C1291007F0FB092D26F7E4B7B60C448E455A114D248CCDCF7CD295E3DA226E2FFE2C4F17E5B1EA6328A2A32DFE7D50083AA7516D90336179D3D6E10E77C131562834330233EA33E4B96C81570956BEE98946B2D2644FCAAF829A7299438DD80E22E81F944D0B295ACEB19608FEF6ABDB52A34C2422E18ECE9D8FA9A70 -MD = B574C6A120BA1238B946C43D608FE3BFB0D7B91AD0BDA706CFBEB0B119113759DC30A03245B9919B572728CCF0A18B7A0F1143EA0218BEC777BD7C7B2A3BE408 - -Len = 1549 -Msg = 1E9E4FD505A9A5C29F41B86F0B4EF8F615209F7D231E08DE0636F4F1B01FA7DB51F1869C05591D5F0E5D758A1EFCFB32F4257805823E67C4D1F4C6A70D4AFB70C1C99E8E144922985400F778D676173278DE0B7540B667005B604EE77064C80F0B9A7BCD2317DEE692E2A7DB69BC4A1816675ABF2815AB732E187CF76BD7DC9D46B7258A6F6207C66F97E26CF154A700216A0BA6BF410AF4189633771F25EB8C38ACAFAF9B52AF64E29ADFC91EC48416BD51CB90FE6747F9706CC1FF347AA8969CA8 -MD = 7E9A4EB5346A4EEFE93BAF5CDA7C86BE7D22DD2B94170CDA0326D6609BEBD58E180B84B68DF822389A482E256B81CCF62929673375A9C27B39C1248C9A30D231 - -Len = 1550 -Msg = 1140A34A3BFBF1949E57F8209A253EB83F61FFBD9C0565433BE3ED949DE5E4C3197D6DBA2BAAB08A8E30FEECB6A48DDC96D5FC223A9E2A558C981018FE9EA08CE870ED81DD7D59AF73D4D5BA16B060CC82788558DE63FEB733241451527ECE313EFA7F05ADD1F3BD710069E0929B1ED4C01307C89655E07B0F89EAE1F701E9926FE6A1FF414E10FAB2FD0212C33F648BB3A3C9DA3AC60AB93A37F18C4B59888811B82349008A277415720D72EBD37C2A45B66094128F10D066D358E7EBC6E226B0A8 -MD = 65BAF361574EE8CA433AE8378325F158F4F8EE542C0622837C3B87916DF528388341808A17A0A03D0294B7519F26F5ABC0FA5CD42325DD47368E32AF951EBB2D - -Len = 1551 -Msg = 7A1BCC212431E90B8FD721E8D2CDF5B07EF8F8CB4B57DEBAF2A5032487B46F20F99C2951C769BC728C053B532F29420692220C958BB6783BDD83D36AE85761EC47C546B742EA51A041CBD7A8F57BEA69DF6DF348AB4272D7300AD9F263C7F8F7E631874B4CC40CA3FEEFA74D9F5AD720E6913F7A79BD94EBDA147C4830AB443C08D5986E045573DE8E65AEFC979FD84B25FA1C6F638AB86570CC5443DEB36D05A8B05A28D8A7F95B6510E956F2BFB9FB90A30BCD8C9725D1CF35CDA63DFB1E51AA46 -MD = F40FAFB36DF2848B913159F98308FF0D5EF5272D88E4D9B21C2232873D143CCE9A8E04F73578C35888498FFDB9735FA7728249A2C0E7258CB2C48642CDAC0DAE - -Len = 1552 -Msg = D16BEADF02AB1D4DC6F88B8C4554C51E866DF830B89C06E786A5F8757E8909310AF51C840EFE8D20B35331F4355D80F73295974653DDD620CDDE4730FB6C8D0D2DCB2B45D92D4FBDB567C0A3E86BD1A8A795AF26FBF29FC6C65941CDDB090FF7CD230AC5268AB4606FCCBA9EDED0A2B5D014EE0C34F0B2881AC036E24E151BE89EEB6CD9A7A790AFCCFF234D7CB11B99EBF58CD0C589F20BDAC4F9F0E28F75E3E04E5B3DEBCE607A496D848D67FA7B49132C71B878FD5557E082A18ECA1FBDA94D4B -MD = 4648D263B608CF28CA65B28A361EBB00E0784C65AB1D55C46A785737B6C8D83DD52E3367D898921EA36DADA42D893800D0BFCF86554CDF5E7630D60A2E8EE29F - -Len = 1553 -Msg = A49A1590851397A7413ED265B02F89516A78D73558C36139B23BE5864E2C42170C24F08E3058C07CF8F07A41C1C161870D32AAAF5B11D08FA5682727B85B8D6AFE70000C95463DAD5E87FAE024881569BE2A543677F0BF62955E4836A2254D0047687AABD8D41E3842F37D5CADC4935E7C9526509FBF6DD4F4E69CBDDD2CC4439A0B0F772AC4EA3E14D560A85EA98B5929C54B33C0243F911AF5CE4A87A145763EF85A72B94BE5222459F49D330D1A58281383ADED89ABB3CE78A471364C2F9895E800 -MD = 2B6AA857FC0925B76DA89A1EBA9BE833B9C9E2A7A5F3972184DD98579AE8734EF6EC2F68E8A5FB8829ADA0A05716D0F8816E93D501F54B1173F57E91B021CE17 - -Len = 1554 -Msg = 037810EE77BCB2D3B7438AD56F145E4E936C170B5056FE2074D1D274C432856BDDE9568DFD9DE410207043632DC20D634159022A300D6CD82A6EFA4C0D7AB7E899D0979E5A445076FE31C898EC1F0F2A7A171417DCBD88F581C7ED7F61234C05A61CBBC7FB8B2EE4D656096042FC54F6A8DE6E472CE691165B9F3CA143E5021B606B9C1780F84FDE02255F75A9082A5685744C2059561444EED3271F6E6B287C36B729597A6755E257FC41FDD23AC9004C72B878B3199AC5EE1FEB36F94BFC0DF6A840 -MD = 905D12DE7FBCBABC5CBDBED21FE7170C86D1D9E7048E7A08E4B864D5C2DC742BEF6D2E4D7DEB9628FA30A1055F42B8EB23050340DB911841109B9F68AE5AB3E8 - -Len = 1555 -Msg = 71F4A1CDC25DA28537CF2C3DE9730490516C3989543132786A77CF8D6CC2668D0DDF4D78A057B4AC0CA61324A18172010D6659AE7FD66EDCA465B920390ACFC93AF248BCF8841452CF749256A709DDB58AE3A7F7410247C9746B31518AAF8FC960697379AA66CD7F777666CCE898C8A22FB5C34933960B98E1B599F4795A7C60706147A7C08DF34004449B94BEBE5AB258DF9E1D0FB1D5A9FBC22042D9316D3245BD80EF488084C00EDC7CFD47A445BA99479F7D904ACD1031A0186D70C0B0C2B93980 -MD = 05D2FC6DB795AF2406F3DF3513C3AF393818E901C45950B48AE74223D68D4745CF8E9EC712EE154533E14738D45D4DD9B1CCF63A64824F47147B527DC8B96964 - -Len = 1556 -Msg = A74842C1312297AF8D3C14B1717A71D2125AE4B27CB1F75FAE2BCE476BFB2038A514AC60F4484894885FBE3F28E9DA5C5BD9288D1F912B46EFD2FB928FFF70A6B3844E2953400303D5E270286D8ACDAEEDED6EF00DBE865DE3F6D5E54DC76B93C3412B999F39EA46E2B1A9969F1B09C8ED8E0DFD4F4E882BB29A0C1F2660EC4EDED872A7108A4FAC824623567B15D2B2EDAADCD5D7A8756405870CFE1C15F0C763CE4AB525A32207CAFFFE093BFBE7696D8A14571AFAA2F08FDCF55560ADA17A52BC00 -MD = 8E99C97F980EA6A6F1AF20368BC4C0329AFBFB9451741D07B9BEFAF180A2317F37A93C48DBFC3ECC563F710EA7E9D1BBB7A75610FC0005979A4E66EEDBA4D3B8 - -Len = 1557 -Msg = 0E9FA73B82BDE1AD7B2D37BD10CBFD89AAC53EEA32EB3C2DAE512B23756B9A696B19770A02B0BA0AEFB5142C8FC7314B16D8894D0426C7C0ADDD875170C0B709BFE52998656E22DDF7FFB697D457A1C07A290BA236C9F90B2D03BEB8FFBB23D750601BAE49A732ADC3C3CEE3029370E0B26FBD4317A2F23721B20CB760BF7D4DF04C30ED3A11213AE500F9085A7EC53095A99022D75E989F1C983D52F40112229D9BBA5D342D2638FC7535D8F540168293106E1B280CC4491E4AE551041EAADBE20878 -MD = E93A0ABCAEB788896BB8B60FE7B056869048265661FAF1CE2113239ED53E6683E0D369D6C9EB68F69715F5E19A9698B2DC1E0B9557879EE6AE77AFB7FAF37787 - -Len = 1558 -Msg = 7F725C787CF708E35CFD6DFE7F66D223C1048FEED331B3526C6360F846C0FAF23158CE2EBF2621140C5B4FE92AF12EA8448DF6821208D2C9A256D357E43566B5BDCA2F33CA9027063F557975B766F0ED1BE8626A17F28A94F41D4E6C51F0B8885C505D75506C6730CEEAEC765C4B0783A22782209740745DBB8172E89E92A29E136298240E7907BA38C893E21F23ABB2ED2D43A56AB9747555C9532AB47BFF6A56653B9097C05DAA6EDE9E262622987715BADF5BC25E9FBFE6E12B74F789367BFF8BF8 -MD = 81E8D0938D6A2DF53090FB2945F8CC273F919CC2B13EE5131989B0F81CAF7D9B3F589747DA72B7CE564487FC3DED9254620BEE85DA0D46FBCA422CB9C2061946 - -Len = 1559 -Msg = 185219625F19DC9F8E12AC7256DAEE6EEBA17AD72FF821E180A602098C22372C5E18D969B9059A882A22E10CE2512BF7A8C012E43A8BA8B61381C22BD1C5C4276722AAF3CC66C95F0450783D9150854CE0C21DC9F92D3C64AE6D1F379FEE822E886949040813534ABF765756B20B8586A2B73EA55A170B135A20BC3AFDD1D64E8D667CB5BDC815674F3BED646F890CBADCE08B475CD01CA656F8A6F87890271BB0AF3D98B51F3E98C91B641FE67E8F13AB1715768CCF01F34A61E4B61C9D559D0F1290 -MD = 16C1E555DFE3BAC32FB6C0AEB4687179A59FE2CFA55E59989434B2E6616DD412A99FD8F7B9CDDE1F36E98B3110C27B39925F0DE425B8CD5D6A155A04BF188232 - -Len = 1560 -Msg = 8F65F6BC59A85705016E2BAE7FE57980DE3127E5AB275F573D334F73F8603106EC3553016608EF2DD6E69B24BE0B7113BF6A760BA6E9CE1C48F9E186012CF96A1D4849D75DF5BB8315387FD78E9E153E76F8BA7EC6C8849810F59FB4BB9B004318210B37F1299526866F44059E017E22E96CBE418699D014C6EA01C9F0038B10299884DBEC3199BB05ADC94E955A1533219C1115FED0E5F21228B071F40DD57C4240D98D37B73E412FE0FA4703120D7C0C67972ED233E5DEB300A22605472FA3A3BA86 -MD = DBD3732440010595AB26F84EFEB07732227A7B7B52D6FF339C7FF1B6442249202AE33A0AEF5167F5B0474D74A5B50CDB033D6C5C72894A3686FE6ECB36E357F3 - -Len = 1561 -Msg = F7F5B2062D7FE77A5C1CA6173B2C72268E83D68BAF6AA3F4692EB7587930F0338FE2A400369E6E414AED899068ED7AF8BF755A1E720F3176DAAE62E65BC8D91CBB1BA7409B4373B245D3655408D22B402FED1480A92D4EF3BAE5E6450E2D7846650C684E1B174FAB86F05A228969CBB3F7D11977A2E1F6EADFBC6A0531EADAD2970D62B63E69392BD0A55FC315F92BFC9C383579D390FC447780E429E5D28DB5116D9E7129FA5D61920D680C743986D7B4E21A9C54FA272066978D740BF35C572F418C80 -MD = AE5135F9D816BBF9A6C430605B656C9EE1A70444715CC3F6BA2BA33580973DA961C13AB4C74C813190EFB2CCD778A08B01BD9903F36593D155F9A60472703AB0 - -Len = 1562 -Msg = 89CC05BE42885C72B4A3E790F3E8E0401707A5B9EDC34893C4DFC8D9227F9B98480AFDFCB8521A1B2B7D19F9BD77712D3D7538EB74F9BA09A1910BB065A6A809CFA777C25DB447B6047CDE44FF96C1ED5D93784A2F4D261EE4DF2B083EA5EC3FC070832648A43A8836616AEC89909E89CB1BF034BE1C69E25E48369FC2EFC345F9A4AB91FA20EF0C96F81EE00F597A9B13E5FC1816F5025802A30F79055FC607B0E0F114DE264FA2E3F2EF9B488615BDDCF810F8944162C682BAF41642A6374D773FEC40 -MD = C41126B877F2952F17B2B8BD3901829001CF7198CA1D94B11A6DF9B7F4805DF4A0DDC6FCAF8E94E2CF16523B3EE4D83ADB3C47A530A991635271E6C074062ABF - -Len = 1563 -Msg = 4F6927F8DE4BA416E9C4E063B80599F4DFF974600CC6EBEBA4709EC0945395EF99BD5B7D77471EF6C04F17F9AB7E1B91622A35E47148B7533331E9986220B9E4D08F254BE34D61A0074DDA157D3DDAC8F2DB4711BF5730F65097A0629B741353CD263FE173BF72D76A6849330604349E775626F49943AD74F583C060431AE9204060EAD1BAC426851D894AD41E52CBF0BD48E734C52547A618B10F6415E92C200795635A61C47AEDE65864AA48F17E3A7729D5AD883C2A6A924EA54266A384F6F92EACC0 -MD = F2D443050236B436C7DEC77AC33B6F7CD141BCFA60CC9684FB53A47FD0C1456DD7AFAC0CA7A39741BF4187C602ABD6C05B31BC58C203682B12AFE0F00B8AB85C - -Len = 1564 -Msg = 7A76F5CD6C47FBDF0B300E156ECF26155B385F4185B844DC560F413F2C2437D3F653D9E84070AD44B173BD568D0A41ABC009532C0B0EE41A7A35D45508E7CB582F761D2158297C15A8BEE1857515621B5446696FBBB7EECE96B3BE7F3B7F3B2E46A9A8328D0DC4C61AA56AB3B417A31B6D1D6A25BE3CDF31EC6B0084E90D2BE1CB2397B66E6E93E2EE0D5532CD1E4DE1C9A1EFF1CB5E6D4E037097931511716A25BF2AD382B16EF07DF13CB9A800CE8D7F1A0F664108147DB5729E64FBF6B55AD741E8D0 -MD = A7BD4C1E2871B41E9C8D12880F6C7432BB858EBEF008A63ED888B411CD3B8693E1476E6BD29DA34A19D670EEC2D6B926AB6254437854B07D2C25CC743E38BD49 - -Len = 1565 -Msg = C3D691B57082AF833B84CB2956E41FA99D40314FC4D7655BA3C10851812161EAE38650CE8C37CCB8306B91C2F5B650C33E0B826E8EA97180FE7E5D8A2FD7C0F3264DB8465D68533CD7289A1C0682D30AF11A04C92A82FCCD569B5D432E83E57268C4A219C176285B25886DD032BDA105FBED64F6EB233F1EAF2CAC49CE7A3A7F72F0B07310677D680A3800DF2A164107A7581FDB77E24201BF84F0D6FC44FE7711CA9AB59308A8FD72DD2C551EC10D43FE42EA44EF96B5004352071FC212FFDD05F6C3D8 -MD = E55EEF777CAEA4D9A2C905C1EF61EB8891BB1BB707AF45C5269C77B7DC5634F2D0A72A685368754ADA40696DB9D73E70153722EA16E55475FBB9680C7C346D79 - -Len = 1566 -Msg = F0E6E8CD841FF441FDCD2CB144A2DB21C2D41E7700634B3F8A93A02E979349CB1A6873B78965F5880B8782432D22E856EA2C78ECCF2BEEB4B02E43A3574139364200357144601774DEEF24BFFA5357D5336AF4A61F8B7144D9834576796C9B95697783861A51B35B79FE28EA9F04082A64A563EE52882D3811652FE95FCDA0AB4095BEA34BA55A05DF43AC7BC925D080F890E9C8E7C37CFEFAE2E075DFA5B14566D7452117C64E3CBFF151694B29A7C599339E119F6C48ABF398B3CAA65E21A2EA19BD58 -MD = 57B6893527023D11D9211A34BC13A94C59AE4E347BAB5B654CDEA446F8C53F4090F4F7C1F6FBD2A95C316589FBDEE87567FB547CC3F3E05C824F112B07362CA2 - -Len = 1567 -Msg = 2FA46DA3D6241ADC5773DE113EEDE19EC18F8E3F531EC13C59B1CF91E73FE39AE132390692669BC5BE14DAD8C88749D97B4122FC691990D353B0EE4A55A0BFC4462B9F7D876FB4A39197E887017835E54A26A4C98EF91F154185D47DB1A681F6F0183C8BE8756D10F511059619E8634C38B55955049B4E0BBC214517448D6BC33E2DC8FE8D3D286E1631E4580F07C2EEF5317642FDE6AA5A2BE4C55D25585FB9B303C24DAEE4EE0E623C0A4B621AF20314D74434264B7C6EDACA3358257EC39262BBB55E -MD = F7A3F92488EAE5F3E54415A92485EAF302BED8D2EA8979B19F5F553E9C115C8A06250B57035222B40DBD64114EBB443502AF430B9A82E002BB98668B49966112 - -Len = 1568 -Msg = 84891E52E0D451813210C3FD635B39A03A6B7A7317B221A7ABC270DFA946C42669AACBBBDF801E1584F330E28C729847EA14152BD637B3D0F2B38B4BD5BF9C791C58806281103A3EABBAEDE5E711E539E6A8B2CF297CF351C078B4FA8F7F35CF61BEBF8814BF248A01D41E86C5715EA40C63F7375379A7EB1D78F27622FB468AB784AAABA4E534A6DFD1DF6FA15511341E725ED2E87F98737CCB7B6A6DFAE416477472B046BF1811187D151BFA9F7B2BF9ACDB23A3BE507CDF14CFDF517D2CB5FB9E4AB6 -MD = C24D4054110889290CBC40B82AD8599229D8E86E4CE76BDDBBB6F5386223512C9D7E00973C706442B2C80EDD20904067AF8E4E681AECBFADC6AA15A2EBFE7DDD - -Len = 1569 -Msg = 1924D11C865F5258A151DC2CEEF6FFEBE86E13120A3DCD3ED6A1B790D1C653C8DD1AA2933EEE9BC3C7EB4BD42855E7C5E4CF073C09B179F2FE7DFE4F990B62ADF093739DC25607265D00DCEE57291047BD2B23000A843842566B4D28C5F022885BDC76FE0C3CB0368CB2DDA3A9D327E8D0BCB003668C53BFE1FA294496C5128B7C3B41EBEA639D070C11E4B2997E886C8693B6D1E17D7B5A63F752A74D2AAC2D8BD25D177B5E4A532B3069A6B71EA3ACED5B6D5EDF0DC723DB2E336CC8F5D4690D1477F580 -MD = 7D3998BAFC41A5A27CA016E5E56B4B1A9AF3DA1D531C280FCCD4D60BA72C974CE8ADE6EE874B6C1C6A2A0A26F8E2118DD971DF85378F385E52EB9D9DFD48287C - -Len = 1570 -Msg = E7935FC6CFA5B3087D0FBE6242ED76FFD17FCB91CB388CDA8507B6489032D6B8772BCD0FDF8AB47A353C3F5B42A09E1B8A81DA59295B48AC250506D3742CFB4F758069A89017AEF3B6CCC9FF79C4322971788CA874D0664CD5F5900C8A57B4551107F58674EB19081DF0175241850BDE8B1D28D3345FFC0B53146A6EC728F72A866162AB9A942B0DE6EDE0D35E56D1102B71C9E6DA261480AFE9AA032C910B7E9E5372510603CF888BADBF5E9E469F6A59049FFC8F05FA58CC4ADAF10FF6629286F0F85EC0 -MD = BDE7F8A47EAD2A4DB6B8B7BBF03D2A3A24BE1E4A0B1D6F6E17C2A7E93FE3CE13B9FDC626B3DBAFDFC7D2E204BA0F2E358CBC0DDC19EC8A37F856C4AFB592D2E9 - -Len = 1571 -Msg = 14C24ED71ABA68FADFA20979A31A6F0E64C839AEE476B018FEE6F1E6C0829FBB764197BF0357A2C03EAB0E61E793F7185BD3F1863E8E5A3970A1E0AEE86D401D7FB079888E5CD442F56780FB05384DE328D00834C504751A28D0E1D028AD1455277BC662A3DFABF903DB129342659949F8363AA94E9ABADAA6C33956B410D4B914713A2DD59AAD28B66791A2942B3FEE58F011F8E8CB693D9D52481623F11E300BB51E808BC3AA346905EEDA2EB59CB469EB99A0B1F2D7DA56CE6167D5005DCB18DBE728E0 -MD = E99737D828F3A5043FC84DEDD8BD50CC5EC8C66F54140B037BB1FC81B9E729F17B46F71CA56B3B565E44630694C6453ECEDB9CEBD3CF1E885EA29EBFE7A30019 - -Len = 1572 -Msg = 94A31FF206DBE122709C56660F5FA690FE65273F918B44118D647BA94E81C8FD837AB68EF7A67CC9C3FDAE7F29883B31E786D0B4E90148CB146D11A68828BD4D3E16FFF6FC010E93F5FE04453C23DC6B4A995B1DB5D430E383B78F8D90D7754434F54E56808A7BE3EDF21DFDF2D824B94D7CDDDF652D1655A7E1806C436AB5BE6BCB673CEDF407AAF4CBA98A9335339B6F86BC11A08A08738827B29058DD6BE75A83D11D6E70285E062E7AA1E03D79098997C13E6CC45235EA37FE02BD0EF47F9E4C5028D0 -MD = 3FFB96A290137FAF697808FBD632FFD43913306E84AC1BDA7CD0F2775020F86BADC89FC59B86FEB79E76467BE57D8D49E86784EE32E6C3B3FDFE52E438EAF0A9 - -Len = 1573 -Msg = AD30B3BE44B88B1011FA94DAF026E1F9B7CF834B972463E8BB77BE43F068127AE9BE0DB3D2B5B20118C50053239870571D9971721BB4AEB5F716FDE77ED2932E4AFBAC5C4E177CE68A0B849E91373CD2202A22085A775F09765AF9CDE7B359B8CAF4ED89B0AD46C856A40AC477641A2E793FBA446A2973F70C978F8C9116F9932BB39AA530DB1B4AF2E0EA9EB8AFF1225C275EC204A5FB091784E5D49814C5788CE7D409893B38AF270115DF681082EBCC051F2390C20B5A80EE74C213BA29499FC9255390 -MD = 078E340FE9083EC68FDEE912A6499FDE22A7549613634657852A7BAD1670FA4B0C02696DA21649AF388AC7426D159C99AFBC0C1A178BB5458D269162821682A1 - -Len = 1574 -Msg = 4C86FAB1AB85CB3D2D6394869241DCE2DEE5B3097373DC2584858C4B0D2A8494A802BDBE3C1BF08FF1DE84773FFE307A0432310B6B874AA55833BAC8B56FF7C0FADB831A00143C9BC17EE0E2547A90F95FF2C73F1E6BC8E3AB0745ED5814972AA247D72AFD7161C192981FA8B85DE7CDCAE3F023FFC4CC62E5257129D85F6E0D950D28C457512213A84BE7DF5AE54FBFE7964D3FDC009C70322FFA50782F443763730CB4CF49600FD4A3C831D580D1026E6EAA1801846EB2A8175F528DB9A09B1987AF148C -MD = 8B802581CE7AB1909F6680A6A4304CDBC494D4A0B51289B2D41676625B0ECDEE5A3A88CF12EF4A2909C277A4893B1BE75C45CB7E875EE5A3709982356159074A - -Len = 1575 -Msg = F2E2E57FAE32B0A84C5D7B43174C74DAE20144A875A52ECFFD0BCEFFDA3B86E7200C1FE848A7A89D737204D199AFF82CAABC2723C7970618BEDB3FEEEED2CC172F5FFC0525ECFB7F6402407D85273A21DB19CCFF4FC5F1487EB5A87BFAD8E1C9D4832C1DE34D70ABAC87A68342AFF65881DD881876570C1404B4612345341266457243D5A03D7C01B4B34979C01F6EDDCA3EB662A79A73A0E12992424F8F461321466C8D481E2F90C31E8DF4A79F39F9F5E87A8CD12055B31AC6ECD4B81C975B7BC3F30048 -MD = CB9EDA7C45E7E6E5AFB846805C436495EC43E705179801B1508DF7BD06F285F06F9A553BA320A51F2979DB5425E99F0CA9F94DB388804C15B535A1DFA01AEF10 - -Len = 1576 -Msg = FDD7A9433A3B4AFABD7A3A5E3457E56DEBF78E84B7A0B0CA0E8C6D53BD0C2DAE31B2700C6128334F43981BE3B213B1D7A118D59C7E6B6493A86F866A1635C12859CFB9AD17460A77B4522A5C1883C3D6ACC86E6162667EC414E9A104AA892053A2B1D72165A855BACD8FAF8034A5DD9B716F47A0818C09BB6BAF22AA503C06B4CA261F557761989D2AFBD88B6A678AD128AF68672107D0F1FC73C5CA740459297B3292B281E93BCEB761BDE7221C3A55708E5EC84472CDDCAA84ECF23723CC0991355C6280 -MD = 4A6404D278A0BA70488C18D7D1861CDE26FD57D66A9AFFE74F1E646E616003A52FE42520504AC4ACE5CA6665CF9155F44ECAA05D55F80FE9794ADE17871C5728 - -Len = 1577 -Msg = 90E5EC58E79320AE60ABE631E3073FDCE992CA5BA19A6E3F2272F6B0E9F9A9BCF70236C5FB0DB8DBFD980683DF4C176F07C27A944699A5AC7552C0D5D3824BD3E95E2DFB7D412FA0A8F5D2B73E0936F11E6B95FE8AB3FDB02A8ACCD1AC7867066318A3F60F244F79D01CCCB340BD4216B8C9222294187122133605EE25230DEE6262DE75506648BC6867A8C70FEB75B687661EB9C5D87C630BE06CED62AEB7A6C8B2A7DF23FF8A34E3BEED0CFD3B30A3ECEF1B59BA1C8988A46971686658FA110AE238330700 -MD = 0923F12B3954F55289059093102DB5FC0809D06AD0CFAC0DF2F8FE6B358ADF15EAE9083F3B1BB8E38F51F533CBAB25AA13CBAC38FB27EDF1051D800AA29397A5 - -Len = 1578 -Msg = 7D10486481F81E0B593C849E54D047DB523A6F31E7B19FD80E747364F43CA2B1773DC9B62B004D855CC38330EE82DE4EDB37F07402A9301E40A6E135EE2DB0B8BFC493B69E4DEB2543E0241D8416467D8CAA0FDC73E6D6E177A0A18885946318416F0DF593BF680EF5D10ABE8E752EE3646DC6280DDBCB500548290D4E4826D685DE446037C25068A9424ED6D0C9B63EE650A42674B7E231F40761F7F367C043537E320B79C9D9071362A7E9F6E65AFD9BF4536D860AB58015715953718CDEB040240A731E40 -MD = 3D118A1CEEB1AAE5D70CDFA11009FE5BAAC988D05681BC7375054CCEA416F15DD7A50A4F6EB65F6C9795BC38BD4D74032CD08A5074325F1D161F9758A1F24C22 - -Len = 1579 -Msg = CDCA251E2C752A3E724A0D32B65AA4B1D5C87DEBC1F87D802C6DEE8EDA523C10026985390DDA593ABD375E86FCA31950FB74FA6FAEF330225BE70C71D2492C95410E6B115BDF694DD5965C6D4FC5B585EA4DF25803C9FAC55FAC49EA732D736752BC8634A2871CAA788261E352A1C8B3A645D0E22BDF10D62C6756E656F9E78314BE069B2E1444B32273B8EC132A4DA2D10EA148EF8161D238B11A437F2983E26B7C8AE95210B393BB3E624D99FEF3C72FFD1B521B8B4D41B426E4F8055C0B50776EE059C6E0 -MD = 1B5EC050D48227E9D331A325616EBA76E7EE8F6B9448402A51B6AD8C7B6EB78DA6530DB210E79E24AFFDE3A57748DD53AB418D69DCE1F4FF3716756854C37915 - -Len = 1580 -Msg = BC114681C35F67BEF8C8CC81BBDF40B879EA33A05D034B38B6EEE163819DFFF9E15B0B9ED7A80D9FB9C9499AD2DAC94AD8CAB68B4871E3423CD35C67D710A37830478C344EB4439B0BA4ACE3554B682F6BA20209923932ACB9F743D8BD6A4938466531FC5AB43E6E8DAED4815F288C16D909402DB7ABCABF8B96F305BB7BBD1D73D86FE03012A9CDA5AC4577BBA3ED9375EB9566C12A0BFE08F4B8EBC663A8B0CDEA53D65802847C09A07E9D8E51BA7DA92F575D523F2D1418EB5D169CBA1901B7829339C4A0 -MD = 87852569C0E4C29E72D1E4E18C4F76CDF8A0D62CD4B779AB573D151613B9934B972F21346366DEED427C59E7F27B7D5BD81CB0697A3FABD26D5649D01AEE244B - -Len = 1581 -Msg = 5019CE0DD714A0C8B92017E26AF6BC433E101A4EA01D2E39BA4FBD467974C0831EB6F4E2639CDD8596EFCBEFC546C22C75D8F742C0C3439D49C199F9D4ECF9CCAF4D375BB8508FD8F7314473A1EC2E3B9A12386122773F8AD12E6C9319134FB1C8EE836C8CBA8B714FB1D0BF11190D1E9A2A80D7907160607F43FA0DE59E77850FDD32161F05A9C13C8C6BB0F5AA8D2F8A4FA1C38AF78C61A26B560F06FD813121BC133B54D88CF1033EA7069E98AE8D8A6E2F99B584AD8F56DB1ABC1590E8DE34ADDE195CC8 -MD = 23636648D6C629FBE5B15E33B30F8E967014019A171BF33FF4FF165E8EE8C31AEB72E918141C138131CFDC1706A853F89B483F13BFC450D841B4CEFA4CC26D4F - -Len = 1582 -Msg = 2CC35AADA46B1AE9F81024B610740D81451D81426C6A02C00110687C39F45546E57793C5B31EBD9A1F52A14279A767C58816D77377873B91DC392888C467916C876391A5312BEF9C13898FCAC965CC7AC6B7209D757E40618EB94FE173A27A102679173E1A86ACACDDD181E1B0684F78EDCCD712229979A0A9BEBF55B27A8E74ACE453C77A681428D9C775C701BBAD9D3E4EB8EDC2BCCD09DA540F7AC232DF89E379229F47330668730E2E262695C6FE1F3E7E553125241734B1002EE7F6B39FD4695A686248 -MD = D0C8ECEC5CD3A41E1225A1E270D984A42D28BC4726E1891563F2CF8F5F8C0B1B15114874446C3AA6059401245E67E93120464418AC2A3FE626EDAA92FCFCC357 - -Len = 1583 -Msg = 1916F52B31159E1BD0C2F375057A01A15CF716B49160C7AF88BEAD7A1D91ABCBFC20595DF3BD0A36FF92F0E35495E12E9EB49FD9C38EEA08567CBF32074389843541090B742915BDCDBD0286F66A657FFAF248E64C15053A14D02ED841F268205716894BB36D13477F2045A57DC8CC51BE67FD50BA15757E18A71A7F529BFC8EBE84F8562645169CF4EA0DF921233287B7530553545839FD5DFED59DC7610D3A6ED7FC97B5CEAD9E17AEE9E5452572075E7656CD517E5E94E4A01FE66403E26A6F3DDAE8A504 -MD = 26195756022DD4F60A83073CA73DC5FA0C0A28840229AE9376AD20F92B3C8B2B97CB635C78014BB2AFD31430A5600D858369B72BFA3C13DA7A350116F1E97359 - -Len = 1584 -Msg = 70A40BFBEF92277A1AAD72F6B79D0177197C4EBD432668CFEC05D099ACCB651062B5DFF156C0B27336687A94B26679CFDD9DAF7AD204338DD9C4D14114033A5C225BD11F217B5F4732DA167EE3F939262D4043FC9CBA92303B7B5E96AEA12ADDA64859DF4B86E9EE0B58E39091E6B188B408AC94E1294A8911245EE361E60E601EFF58D1D37639F3753BEC80EBB4EFDE25817436076623FC65415FE51D1B0280366D12C554D86743F3C3B6572E400361A60726131441BA493A83FBE9AFDA90F7AF1AE717238D -MD = FFFD1B1E31377DFF00B492295BCCC735733B021F47BB4AFBA6549EA6C1BA3832E8587099AD0CC216AF5899AC683EB7C246871E21C30FEEF9BCEEDFC78D0C966C - -Len = 1585 -Msg = 4A3FAD4471E41E86724FDB35F4D3B26BFF60DBAFC5D4BD351135C8A7478A3B07001CD9C20829D41471A146A3EFB8EE598612F921CD1E4CC4A47FCCDB8FF0F67F44680E3378A8AA64619A33CFB5A4378FE4079567813BFB481BDC595B307BC97D70493FD08E2DAA4D97D2AA64FD08192C11D0A41A8D26119B0E8EDE30EB80F4E8BC2B8B0794C393B6FC23DB16F46DD6BCE8E52388B8D014CF6EA40EF553CDFC33EEFCF4898436B60162B98D99B1EF472FB4C79301B56AD49BCD6659BAD899C81F49B81D67CD9200 -MD = D3CE56E015C20E130685A84A6D7C3D56DC1D1B1947DA6806D4C931291439D943822799E4B328946A2E9F85320DDBF8DC0C6B825D5D668358B6DDEE69CB489165 - -Len = 1586 -Msg = A68AB5DEC5519049A81EC8B6EC950DF8A9D989B58B5C4C397B22801DC85A24266CB91ADE2E99F53B91B5AE3C23B7D7185B21BE6582048BC8A1570E828C5D46666DCE1DCE06921ADD366D9043BC797B3E6EDDA00782FB57C13ED2D2F555AACCF7840D01C6DD75FD3D700C3BB18A49A7D60A879FD4BAD06D68A7C5763ED677B0C5A248E3CBE476A674D31F8C7DD5521C4F652329D56D6DA138D50D3126BE315C1963F376B4AFED50EB2F16E645B86593FE7433FB6BDB40621EDCD2F41E8D6DB8A1031AA73D7C9180 -MD = B3ADEB5D7033D6FCB232CC3B3833992B4CDEB4715B06F76B6891C1D77EA376088E30D2B75920F9DC4ACCCFA012FC77F9486C7A8120F7D6E6EE6B208A113C79D3 - -Len = 1587 -Msg = E99B30E55F72FBE081ED5AF28A0B464810B49F98AD1B41C14BB47CBB1EAFFF99BB30A753099FB3FDD7964B06C6340E0C96B7EA1B95E928823A5090AD6B668E3CA047BFC8C653673B193F892824971C4449B37922304BDD160465CB842D3F44AF50C742A7F71C2A08682360CAE493FB8384644F056B5D9B25E4B2799ABE70E905CF7B0E7DEBF82496009DDB054754A9560C18377EB64D1BBA169C353A443CD9D80E6A39801FEBB9BAE3549399982D8C3578591B198ABB8CF2720C33012E76319EDCF1BCF0FA7580 -MD = C4B545149539A1AD506A13849DF859AABB52A519D58D6A7019EBB44E53692D9E22B2FD907FD2451D2137AA1DA18537A1F7258011D7BAFFF7D0225E012EE788D8 - -Len = 1588 -Msg = 108B8CD3F79E74BC10D98D8A48A480A171ECFE1DCFC279D849AE49A01484A964070F0AC4400F85D8C0ACB88CCF5B6D41E7DFBD3FEF08865592C4052924DC0674A9FBD68A16FEBDE0CE7FB61C2F0D4AF7CF57DB925AFE0BA6109348F11BFD346ACD5A6A8674A8B6D6BA3229D4588E0419849A555B4121426F22C61B4978EEE4A22DA23D2A8E96BFBF5D5BFA4C2DBF3CE6FDE6433058E9738D1B3043134DCC1D00BF5860CF17115B8D6FB2AF35DE707F222520CEFE5001951BFE965DDB654B37B8B935F4BDA1D9F0 -MD = 18DEB63F540D2B589694DFAE3641727C300DC1943342C693549859E198B0D276DDE4B7A8A6FC0EAB2E2FDC845F3267B13E8F851525FDC762279A94FBCE4C5336 - -Len = 1589 -Msg = DE5BFAAE3D29D15E1B522121DD99D62671BD1CD310CFD04825B0A203BC8E4068C765FC005F916E218FBFB3DAFBE565AA27E3E26401D450CBAE7EDC8ED460431BB0CF3BE8471E2ED60342613FEB2E6685CDCD2DEF4053905565BF9447F36A1F4C1DB380E607D9B331B64AF73F9875540D8BBE1A2C6AAC1BBB8D7FEFC22A9136F5F9CC04001B621AD5569D341FBEA3F829D76ADEB99BB4C6A1AA0D70C22DA85B40D3ADC0EC31812CE3D40ACEFD27377E99F748EF930FB60AFD4A83C9810679806EE6B0DD9432F530 -MD = 0469BC6F500839CB1C75B5D68B3EB6F5C0E4BAE4A64D64045E10FCAE387103F9E28F608A94B832F537DDB9EFF311369DB16C95EC1E60E3830C73D4519B439B24 - -Len = 1590 -Msg = 04CFEB6AE07A84B6BE0A8FBCE81E3BC966D4CA35888C9F83E215FCA0280526ABA19081F862591B91C98D52DB46C9CB0ADF79F8E74B66C8C8F7D9BFCD2DBC6D37E25433F81417E84DE6A1E79CFF48A7AEA7898C722D4754110D9A151F9DB4E7A0E460C0BBD0A607E3F1B9820B878B3BA21820CB41E15B9BF6FC46FD0126064E0BE9BF60C0E6175291DDB35B53A39DB570EB1DF10CB6BC54D40BFCF2A84758C54EDD42A43658A87C2B6D6E7071D2D3170E2218AC0C9389888B2B9E25339C8D4E25D62B789BC1EF5C -MD = 4533801F0AE1ACD0EF3271DC40E17CC0F7CBE5D737D61EAB992BACD89BBB1674731453B7EB6FBEDC025DF24F4EEFB5638C642F233EEB6196077E3BAAA9847D4E - -Len = 1591 -Msg = 68C048F9095F71348C5534663C9E927ADFD3ECD4F99CB381AAC3266F66315193FD08523A905714D4E6B4BF72F605A68E164F6057538A3DBF89683B9665A047B018168E16A24990C61E1CFAC62CB3B888B4F2C5008F49452F1DD81B94288BFC94B89886B5DC23B55DD74A51C74A4D44DA267C9443340438FA3ECC220B9E5E81DDE7049337522473996E8FADB6AC0775D3D3C6ECC8FE20EFE92275071909229830024262C762C9DEEEC2DC646B220D5D5CFE6B09BA8790CCC10D01BD8E5178F5ECD92C6E5233274A -MD = A4AD3B693646C9ECD1E58537A106F9F480FB8A3473357C68CFEA2081E170B65A60F1BA9DA0FD892782FCD82C79D4EEB82D397450D6996BA557B211EE5C98950A - -Len = 1592 -Msg = 74356E449F4BF8644F77B14F4D67CB6BD9C1F5AE357621D5B8147E562B65C66585CAF2E491B48529A01A34D226D436959153815380D5689E30B35357CDAC6E08D3F2B0E88E200600D62BD9F5EAF488DF86A4470EA227006182E44809009868C4C280C43D7D64A5268FA719074960087B3A6ABC837882F882C837834535929389A12B2C78187E2EA07EF8B8EEF27DC85002C3AE35F1A50BEE6A1C48BA7E175F3316670B27983472AA6A61EED0A683A39EE323080620EA44A9F74411AE5CE99030528F9AB49C79F2 -MD = 33C8F40E1BD1EB1A3A70D2071D27460EF0F6B2D3ECE373743842D6B928F3771E4B7446A9ECFBBF552C064F6B26095401097581C38B95E9551119A1FDCB3D58E7 - -Len = 1593 -Msg = DDBDE9D6BA8A0889828CCEE9243EFF68E2C4D342E84273C9F4B4F6BAA3F2CF622354FFDC7EB6D31C9F55A341881FE7AD266B45B8CCACEA665C0ED227AD699051C020EC1C51834D0B7BDB69352B196CAB5C0C1648ED3A9BF9D77550A136EDCD294FFB41732E010CCA56BA0FFB20B3296F88C7D2A802F60AD7E39FD1F8AAE9F5B1B075BCBEA2CA6B3A79FE5BC2D13AF5BE022CEFDEB32E3659E2437F10BAD7210DCFBD21AE1B60E54862AF0B302FB596ECEE90783BC98798A31CFD9ABC07D2BE5B7379480BDCE1BF00 -MD = 2EFAA1A58958746B5F11E3FBB6B1E302F4500F3FABBD6467863EFEA16228216433831B68431FFC6B8FEB027A5041091325274D6A5184BFCF12A60241E4FA5EB1 - -Len = 1594 -Msg = FD76F5473E5DE24298193400A93C9ACD88CE44F855C1FF2980B0A40AE8418FB7119CA8FAB283221876EF54E7C3CE09AD70EB14C1B4A18A11FEA453DE45DFA5D16BF0071392224D15A7DCA73A10F2F0476F5300AE8BB88F706F22DEABFF0E6BCAEE981E4FDF7A028AD7B800A65A994EF73DC2F34166C92EAECE507DB3DA95264B36E29B30EC9D852172D5E227468E735EC8C43177ACD1C2EEC380A7FF6B44748580F5190EAB108C37517217757AABB265EF18CF97B3DDF7B2BAC1ED07105B8825C5F2B955F23A6900 -MD = 071470F522A1219515D390A95BC4EA9AB07B88500456074E67E4DB7A00619F04CDB4876A3ECC93E9B5576A3F894019B12BD2BACADADE390EB2F50E21C27A6D42 - -Len = 1595 -Msg = B82326F747C89F4976951420E31FD1969A46153D0F58D43E8D795F89DF7863AA752CF3210123937C76772C03B8C824ECF3601C4BC469ED02804126192534568B662FE8BC5CDAD86EE7B6F9B0F2AA98D996A810316830833B2B4C153F0AC30646D4E02B34417930EF1A5BA15A0E640C092750DB48E79EA7BCCD9ED1A5E24B93B3AE53C6F6380817A5491EFC9A29D8C8211C45152CBB28E1B8DA29BA4E634097BEDC1DD3C46ACE8E920BEF9B41CEEDAE26EB1733664CEF70CE8B9B4CD8E5377FC498C7C64348FD7C60 -MD = 3EA1CB5DD8883CD18AC48F3EE66A6EAF1BB024158B1E909B70CB0FDCF5FE91A44BBD759C3D02AE47C0256F2DF220373EE77F34257E21FA58D630C896BDA50840 - -Len = 1596 -Msg = A1C179F412135FB1CFEABCD4D97D1B9AC22DBA60C174A5E889A188D3FA23E31EED0DF9EC72A1B48FF965DB0282143E48F15EEC05B0502A34B9B1770F79B299E1088183F080FD4C390C069AA310408D3B9E39961EA9457A18FAD96687DCCD6F8E4C3CBFCC55537919CBF0816D563BFBE2D7B32727625F1FAAE1A7AE153A6C1AB45CB8F8915F66122CF0570BE115849A24901CA6CFCFD96FBA7290455452881CD09D143867A67313C9D4ADD919436149200C1A4D9ABFA84A66A935F2B6203D0125A9654A5EC16117D0 -MD = 115E16975F8ECD0C3277DD3B2C912B4DAD747169E097AD15D2643A452084654AB1D7A775DD23A5289315778E338A888894A1C9BFD4C81DB0E7EB5E03CA25B1B0 - -Len = 1597 -Msg = 56585935F30E0C5DF323FCE4A4714E50186A1868342A2692302C0A93AA273B1C0E9F4DEF90117D0D20DAEFC40E7A3643DD5BC87BDE18F59E9AA7401309A18341AA687411269E2E847D6647274D05807536F39559839F3ABEB1D92939B8CD682DC2396EE27CB5A5FEEF2F3C66294119A4303F16E76C5A74303064941B2437212B73BDBC83E02ED998CC520E8EFA5D388E94D869F02D2E82992F37CBDB238001033CF481776D706759C29B1D69A1EB9EE1653D140BF47F9AB2E5774B60F14128DB0FDA416DB783D5D0 -MD = FE6EE006B8354A9FEC6BAC920FAEC16166C0C401377F9931FAA05654D4549AA87219D5304340DD455F75CDB7897FC14DA521D96ADE6169D69171BC1EACB8C9C5 - -Len = 1598 -Msg = D3522A6A36034E5CB35A86D9AC147076015AC3FB2E268A7B2BD1961E7C50E847BE9690BDD655DA76641CF0A9ED6185AFD5904145392DFD0D7BD4EA7940AC6E0D49EFFF68A23D8278C1692CD4B08AB49E840FBDA309E8342FA77F38CF779885138ACE50D1BE596A36C959CC8741E607C453455E63BE1F15FFA3F1558A7D48C5F2B3781158117E5839BF4097F003D9B52B4AB21F099FF3464704F48C68505F1CCE098F071C5A6741918884A14B81D12E02A88F084299832CC51EC8D87DA25D5E4C4F6139B5C3F48DFC -MD = 3D40429C85C6F9F484D72883C5599BBA45B514984E4C9E67B9DD5FED24A3E4779AEDB4C8CBC37C07A3731D662EFB660E392D33EA7108E78D1FE806C63229BEFB - -Len = 1599 -Msg = 347858A3C88CA84AD4E03F46CFD4A20D0CFBD31B9EAF5E2A428D8050A1F53DA5D8D42730B8E9B5D10578760CA2667F99F0B73180A88E22E75B11A524E789AB5E9E7863348A6D26C337F55307DE45D6E18FE951E0EF65745A54826A6C4F141588B11F904F9477041FDBFB40F260B5F49910C0091894812F3E91786050A5136E944EBF60C57A3415BBD5DE0C4BF960E1983C6F0A36A10B5336A800893A2AF078E734A946A3E1105B6DD64A16C62379F72D7D808F14793FF6264F635262553C9312DE0F80C0A5D43ACE -MD = 851EC0F15C36B94DCBB37BA7E4FA61C846F18A0C18A18DF92934F4B3D861C4B817C2C022FB808015D77C6306FEBE8E2B4FA47C9E27A041064F02A54B4313DA1B - -Len = 1600 -Msg = 8C3798E51BC68482D7337D3ABB75DC9FFE860714A9AD73551E120059860DDE24AB87327222B64CF774415A70F724CDF270DE3FE47DDA07B61C9EF2A3551F45A5584860248FABDE676E1CD75F6355AA3EAEABE3B51DC813D9FB2EAA4F0F1D9F834D7CAD9C7C695AE84B329385BC0BEF895B9F1EDF44A03D4B410CC23A79A6B62E4F346A5E8DD851C2857995DDBF5B2D717AEB847310E1F6A46AC3D26A7F9B44985AF656D2B7C9406E8A9E8F47DCB4EF6B83CAACF9AEFB6118BFCFF7E44BEF6937EBDDC89186839B77 -MD = 2A11CB6921EA662A39DDEE7982E3CF5B317195661D5505AD04D11EE23E178ED65F3E06A7F096F4EAF1FF6A09239CF5A0A39DC9F4C92AF63FDF7211E1CF467653 - -Len = 1601 -Msg = 24E94DA7D1C92C690323242366867A5B805F81EC7C1132C024EDB5D0A09614DC67C068B0FEAFCB6DDEDA0A1C346F2238B0C6D6AB17A197B5170BE004275106E4CB9711745CBF1696B3BC7B764C693AF4F43B30DE3196A8B61A3FB5754EB7B99F5F9B65C8B2190B12CE038C0DEE4D3F95BFBBBBCB662EBA3BD42143A61415C728F736CB8350F5DB2351BE4BD6B8785F20209625AC2F56A789DA397C65F2E6BAB2F5C651F543CCFA554672FC46F9C6AB63887A2F7FD30B13BFE66155CD964ED7FF4937EE8626CECA4880 -MD = 0C8F406548F17EB39FA0F6DE2FAA18CBB34D6E622DB5ABA1C3DDD5229C4F606B850791C5592F239AE610288A554080BD4584228B778AE5031394DD1E90A3257C - -Len = 1602 -Msg = 70BCB8E40B6F1FC372AE4582872E2806F12270013A5DFC58B2591FF68CD1EBF89DD5F201E226C81A9EB7F4B391BB8E3469AE3311B3279BEEB191DE6067CA55AD661DE8DFE3B0D88BC9577EA5A3CAA8364CDB54C40ED345EEF3F46E8D8D69B35C0B9D9A881DE6FEEED0EBC814618D1F5A9A033F59B51773D4B91DE7D366DB28C71D8D08CBEFF882920ECD240026EBA6281BEC7A4AE692A77C830C4DF7606ED3161497EF547B6938DABAE45E01FD2D3B403AE9086F98B69FC377C6B0B353E62FDF7FAFAD48CEB91BDBC0 -MD = 1FD54CBA9B943965512B85912C8E963594F7AF586BF2A3AEBD28C97A26E89ED5B5C1BCED988998FD7537F2AD825D5C3C3EE07EDEF249D24F54675928E208508F - -Len = 1603 -Msg = 67A2ACDFE159EAB1A5B7D9161BFEFC43392FCD250EB68E95BE7D309BC453507687DBC8E26EC6954BC8CA87D825D3E87B149676D717C05F8FD953CCB2B998F57D9D13ACA970DC073637D1F303D0CB12E6BF2E6E6561A09B3EA1CB6BA3217B43B73E679BB3F59FA227E7BFC6A785184D24516335FE9282E231DF0F28D36248E125D9A6DE1A3CB08FCE7955BC1984DDFF6502BCC100D952FFA62E69D664CB76B6B4D4D02993F92C5C3F2EE115C384C996154DAA3EB2914F0ED2826AFBEC2DE86594DA71ADA1A1F04D5F60 -MD = AF2FA5322CBE1F2A610595CF810DDA08BADE737C9AD45B69C3ADD3155885586CE2A8AECF5AD1943A706EB31421213170A333DBCFE95FAA60D43B86026A11010D - -Len = 1604 -Msg = 92C85290E7533F339C3F8637748E6B756C4CE24D21C6E5F2CC29D5D5B0FE770473BE6D26398D22B88B67D5DC398F8EABB2747487A5635DCA0C18D95E3F522A1D0605AAE2F99743F591D31961278ADEB03481DBFE3FBA5ACC722127567EE9A60872890A976E656872FF9696BCDFF8120C49C337A44522507E98D30D96DAAE13197C8464EB2CEAF011C79F83ACFCE448B0C15BF5FA94AC0E6F61770DC55FA0D9AD3B708164BEF6665DF6EB51F3E493C8E7252F3562B464E94E849A12DC52AA19A0067FA41F090C607950 -MD = 2A9E60D1D744663F28C5E1DF8050A8A94C9016F3C0B66A9DDADDCF8C3DEE477B51C76B9FEA564DC8C488D73BA6BD8D8B49CE28A7D32B153F3EEE3F12D004FDF3 - -Len = 1605 -Msg = A8847BD4C5F54B7BF00F4D0669F7ACAA71BD0C69A12D53F998910C858BD69BB2A09D46346C04390E0FEC9F6547B04209209E1C0FFA41C497BAE7470B6D3228E081773454046B655D0910088FF7137A17869AA97992C0CBB34C513BA06420EC3C0610C0DCD1A21142A5A3BB50CC50A5109FF8D81796D015A8E99DD352C1E6908B19C1F55E617A04BFB699F98798DE1B456627CFEC2F2FE10BD880A4531B4EAC2867E782A8C9A1D564A5D6349B3E02C27B513D676FD9819FD28D37187C80406D1A377FD16C1D5511D288 -MD = F9965B856B9C34A1DDABBDABD2A8B3126C74ACB1544F0780AC99601B95A6F853E9E54825DFC37FB2AFBD8C6F3E332AC9EE33667B6FD850375FE2D0F90DD8AC77 - -Len = 1606 -Msg = 57B6CF67BE832C5FF9630C6C23F45EB662D91CCEF2313DBA0B3961FF63A1C95D2193511B3CF773A9E149701506DCDF66CF148682ACCD60CFE5261CA8482001A75AAFAC4452AAF3EAAC7B0C6F963AF736A8C07E175B06DD38B8AEF3491343C2C319713EEBD2063125D970660BCD813B25EF8E208AC96DBFE21D0106ABAEEFBA9EBEEFDF0AEAF41C011E6F91C0AE8D84B104E7C33CCCB863CA72FACF09D1B8FD0EB1BAC3A5B07D3004664B9AD568EC5A254F470CA99FDD5BA7270DA6ECD0983B5F3F1107BB6F8F4A9BE4 -MD = 167FF758C57862D07DFD433C5154BA6574FDC3CEE232F675BD7A824336CE8F0780B212AAD07A003EA5345E9897AC0737C42B41CE43C3033381DF3378EADE26F8 - -Len = 1607 -Msg = 773E8CD756FDA30FD5D91E11765CE2E07B9ADB1AA5D28E54690C42E2C88270522EF70BDC457E671A2F0BE72066FD6AB9AA4FADEE137A2C7B33890B7926AD69514ABF915B094E4602833A4C3EC2A294D4A86791637BECA3A2E49A6B1678C557EC667177F2C98BAD18137A8ECF7AE31ADE6645871AF70894DDA7D5039A1CAB5836D3F1FCE31FC4260609C5A85A3728D7E50D521CF196922FA72C6AEC3CE6A5EBD0C1C1ECF45CC8F2E4EC0B283B359F1E7CF62070888E9BA2EED005BD1E7B9E50A6CD7146361773610A76 -MD = B54819A4CDD332908BA9F9B0E92454C74749EDEC2EED4599088C58D64CEC5FD7E256DFAD41109F77995FD333CCB0549156A40C28220BC62FC144C05888CED245 - -Len = 1608 -Msg = FA56BF730C4F8395875189C10C4FB251605757A8FECC31F9737E3C2503B02608E6731E85D7A38393C67DE516B85304824BFB135E33BF22B3A23B913BF6ACD2B7AB85198B8187B2BCD454D5E3318CACB32FD6261C31AE7F6C54EF6A7A2A4C9F3ECB81CE3555D4F0AD466DD4C108A90399D70041997C3B25345A9653F3C9A6711AB1B91D6A9D2216442DA2C973CBD685EE7643BFD77327A2F7AE9CB283620A08716DFB462E5C1D65432CA9D56A90E811443CD1ECB8F0DE179C9CB48BA4F6FEC360C66F252F6E64EDC96B -MD = 9196BBBD194541FFEE7EDBAB970738BDD3AADBD6B73D1C85B580AFAC1232AE8077F743CE8B5B6F2B418B5134CCCD4F83645E8631885B14FBBCB909A9836C374C - -Len = 1609 -Msg = 9FF8A2A4213E2CD5F76338232761F86130B1609DDBFECC9EE0712A7F3DEEAF36BFF36D0959DF5547713E072DF78E87BA6F9A0B27B55A15A48FDB21897DD5C76C1CD22266B7895DC06969098C9E4EA6B4E73287D50075ED84DD14535214ACE53CB9F8935CCC7DA8EB0B0A14A5655B19429B4C9CD842B4E1A3DFE980ED978236ED49E6C82526D18122583B61DD9A04E04372344BED009271C83CB352219A0E802D2ED016EC94BB799D69663CADC92EABA4E638A2781828AEB6BDABCEE600510BE61782CBD3F30361AE5E80 -MD = EA3A7D56FE894059DF7F0F6CA1B37364C68D345CDC91DD3B596DD1905F9F098CC748F4A03392D9D7AAC1D52E19273C8BDCBD507ACA5DC8E410088BECDAA92B0E - -Len = 1610 -Msg = 1AC32A48B8F354AB80580B77B6ECF9231CB9B5749DE765EEC1E7A3B8A751B6D7B3100520B27EF10D4ED1E9671D31721374BAE63FDF4014BE492E868FF08F159BCAAE359FDFEF88C66A5AC7A2A55DB0D93BE929234F7FFC8BD8D3FEC296DC2A588CF47AFEFC10FBD7E67E81CFAA1F61403E9AA25CA4D11314590B1D74828F90416288A2D10CBCA43057518EB7C583197C44F03ACEBB7A8E12F1880860335E54D30BAD54171DE4904E5BD3F22F91004A2A95467F24F8BE0D88681D79978D1948711EA3E49308225A3260C0 -MD = AB5411BA605A3DC10377E6A4FF8F0F13F7E08E999176721547D60E6FD3A754451A9B607705E19C4C84CB5589B9FCCAFECBF9A10B07061439299062E444D33728 - -Len = 1611 -Msg = F0AD4970D30ACA266FE736FD168F4A023FAD4E998BE61BFBF20587432CC318FD57748DD6792B973857381A095A8A1D234D6D98B89E44427ABD07A622298A28C888D1C6DEB24FF2B8E29029E7616B9D4E3769437B6AAF8028CD856A67AAD1E627E52C941B1DAC239C6555F9E8655A28E89AACBC8D830B1C5AAFE4A104D94C4E9A86BFA24FF74C08D341FAE30C705EA84C78784366EB37A43E3F7FBB671D0177B61FF5420214121C0BBD451BBE6BD32E5A6CBC2A4908F48601AC24935D8D861846039BC53A16C583019420 -MD = 6E9130C55AB25951373574BB6CA1588CF86988CE24903FFC9037378675EDAF4370D20566FD28ABD776A0AD14C6607A7ED78931FB893CE53804FDD133C8CD0455 - -Len = 1612 -Msg = 3BE987D46800EE451CC793FDA988C727092851357138E7C112FA5F611114320951A65BC45AB34E1887A73B7FDF932E6743CCEF3731737A5520C6F4B88437A8B4CFC89A78885C1D8612BDFF6F4EE5C0E5C36DE87863AF9E63803740E06D16C2EB5F44BE7161F0ADE58A94DD6584DE18C80CFB88022A50C1040369E8962B70D9160A847C4207B104C48803B1740E9D1E1F5F0F4FAC4202E6E98D2D5C09FECC2C382084FC63CC9D26AC8DCF307118E8D72CDE0FCF04067443A5A1A9A833912E041FA251A9647F2FE2BD9330 -MD = 8459B053BD6FDF732F3F7E09442BCEB25E75B0C31E002F4CAAB1F6B6FBF1ADCA1D1BDAEFD156F47A96D20CA7BCC561795B527CE28EE7017BCA029D6664EE9AF8 - -Len = 1613 -Msg = A8FD1D5C15E4CAA7ED292CD3693F9418E46AC4C9635A1AECE4A8E0EFA9B76EC1E356F80A54A45C62FCEF3B782E2882115FEC648E89A58D47669131605AC558E14F43A2DAD745521F37676F4B2C491FDEEFD42C3CB6D9E313638D843C59702EE637BCD813303FC34CEDF0DC017F93595DF8636505E4E96FFDE3D369DCEBC9493E7AD0AAFD1D44FCC25121C4BDEA74C07EC0264D20973E526D5D9876B17D5050978DA6B39EBC530EE2112939804EE5DF60712778B66C917DDF3428FEB2E5B27BCFD69CDE6ABEC96B5CB500 -MD = A98239D33316B77D3F874DCB5F6096211002A1379CA9367786E765D36CB1B999EF21B24553C1206E943EF9D9517596582C3EEB7EDF5040E4267FCD9BFE42FBFF - -Len = 1614 -Msg = A46537443AB90410B94FE953B2D17D44BBD81E996022690F081EAE3AB7FFC9A9BFC419BFA66F88F3260C44D71E1D577BB9CA1C3A2977FAEB50C6B4F21117BA6976BF964DD5C2146286A35C608474E8D87A708C04DD0165655C4AF624C0CFCB88B844B18E4B14514D3A416C46BDB0A95D9D42301AF1EE9F82E6CAE0531A5C92FC6A1663B9C07BC16A982C08017C660E77CA1313ABD742CE18EA7B92C0944859AF6E2462C00BBB2399D33A86D2A10ADA9AFD3DF6CDCC001CFBEEC4A320A014EACF3C6819928F54C492A430 -MD = CB74BA5418E3D165D41A4AAEE70A18A449913915C27B787F9B0B47D4F09406F28FB16EAC0A3B9BF93FDFC1E2C9DFCC635F2E78D4FF5AEF393BD924AFB93284B5 - -Len = 1615 -Msg = 2FE16DBF1226D02C64CE853C981B1F6FE6953504EA690DE36D8E88915C979676306185132CCC2BA8F603AC355C8258044FFE942FD60B8CDF2E7D0C0B0C8FB37967AEE1F6327253C3AFF37FF0FF45C06C58141F389542582BA07C36AE59F173F83141C9144CBB9800B77661BBC0A16BCAF6273E1E476A72640256CA952F67C130F6E8F54B0BB5FEA837467C5507A0DFA256868F6868C1B0F98AA9DAFF35AF40BBC816DF280DA9A5896B722353857CADFD0793D2F17FF0DD6AEAF4D0E589D09A13C22A3C2C7623BC86DD30 -MD = 0C115E63DB3391375334AAA115D3F8B6FB7BA9AA74FA952FC5C1923384392F8EDDF5FE16DEE34D6D6F2018C635299EC3640E8CE1F2E6751583C734D311B96EFD - -Len = 1616 -Msg = B6134F9C3E91DD8000740D009DD806240811D51AB1546A974BCB18D344642BAA5CD5903AF84D58EC5BA17301D5EC0F10CCD0509CBB3FD3FFF9172D193AF0F782252FD1338C7244D40E0E42362275B22D01C4C3389F19DD69BDF958EBE28E31A4FFE2B5F18A87831CFB7095F58A87C9FA21DB72BA269379B2DC2384B3DA953C7925761FED324620ACEA435E52B424A7723F6A2357374157A34CD8252351C25A1B232826CEFE1BD3E70FFC15A31E7C0598219D7F00436294D11891B82497BC78AA5363892A2495DF8C1EEF -MD = 1959CAE3600F128F72E1821C337D841B14CBBFEF3A6D22286F18BDFC3EF63528C11BFFA841A6D2208AFEB5664D524DE83090AB0DB07CD47EF52F4D2EAA8454CE - -Len = 1617 -Msg = 9C931DFD9C4D8C101C8F629C7B12084CD414F91DAC571E93F843CB77FB6C073BE1227605078AAE37D880F31D660692455314C9E818AAC083F4C9533CC2F9DCE60229D1C4F3A6DFA50AC6DD4C5C7F2AF2BAD5BD7F308BD3618B40FD9495EFFF87FC338E55D6949BCC6DF902CE0EF1F496E2D8E63DC225AEB9D2FC7CA7FD081B86E54D87E441FA1A5251ABF4C004C691C684E0009DFD3FB7D6620126CB0D859DBB884AF8DA735CD51F89316F28E11FEDFF238C13D0DBCFFD4BDC55AAE2C0C20F6AA4C9CA620955A050B11D80 -MD = E1F397AE83BCE972B346DFD2949C542FFE144C1865246DBA3C4C0003E4D4245748C0CBA8653F4355607DE543E752F34676C771AEA88A8E686F0C6F2B845AC120 - -Len = 1618 -Msg = FC9E543C76D384217780D7D47167AAC9826EAD5BD2FB0727A1BC37A15D31E45C75C2543976CD4F2C9C244DD358402934B37242C0210052F1344130E48D2D1605334F0F05592F1A2D9A40E0CA9F24821B51FDCBE2B9ACBC78D0CADB31448262D90147943550B913445E07AC1DB311DDC2CBF37AE39DBFEEB2353DB1C66C4D7448281CDEE230ED6075F5F8BB1BE7BB708337EB5ED98935F81912A86A6F727A611183945F4DB323E2374B70C6743961B84A9DA53E45397E3B8566CCB049C97B43704CA7CDD1BEE8543D82FF80 -MD = 9CF4F39D5E8117DA836A1BC0888CA35AF622BAE82D6EFD00FE58AE496AFF363EF2AEF929C0F1838D2A88744F6B69A1039059920ACCCA9C7049DF68FECDD9234F - -Len = 1619 -Msg = 69B28A0A8AFD90F5AAC6C3C3906D619C2AC2312C5B908306C75E0D1BA79551B4FEB1EC9331A463385397EE0BE08F5F7EE8F5CA73B849B35817F19A827E3628651D79112BD514291FEB570057ACACEF4B0B99500BEF10C7638A0517B3F2F69E0F76F6DD15C11E38CAEC38B02C1CA4EB53028E604058546FB1EC5647F8544ABA1382D63D6020374559C3DBB35CB11B80208E1C464BA71C35EAF87455CFCC5E820592CF4D094BE9222F027EEA87C9AD0FFE42E84EDE6B4F2C6706E78B81449918B5F83D7D72481E9D11603340 -MD = 39A2CF46AAAA38808DCBFB2775DFA0F4EC8104075B85E86CEA35A66E12725AF1B004B1DCB163BE78C56C04EDFA86256D85F3449275F54438BA43FCE995E50A83 - -Len = 1620 -Msg = D616E9B17727CE826D28E5672AE1124235B8D3CCA505F931DB0E9FCB68AAC2324FD78D81F632DCCCE2E55654AAD4F4F1EE055147034F21F675E11833C2A85236EA23BAA44C3F8CCA4CE61C0CDB1EE635C361833CB20A16815942C637C67F3B5C0FA833D2717CA27FC339A66009BA76EB0CD1579312946FDAAB821D508859BC5AFC1C40042F2B61A0AD9B68357E216885113A052FED54D791BEA264C904C037321CE39EFBB8FB69DD700DBE53325BD8A71F6D832A7B7817F3DEAD7248EE86C698826BBFB58F6807F5E03AF0 -MD = 75D868D8CB3C4ADFF7C4884DA5EC49EC8D7548E70487A882D98C7393A1E99044AF1E9260F6EBE24CD155F7F2F53612ECB313AC7B68DD5490CBB7AED66AC75635 - -Len = 1621 -Msg = 570A724BC4DB5A97944847CF9496A80699944D703300E06AEACD03BBA32BFA3D335C265DDAD711B00B0637DE34BE4920395028A4021F51E56B0300196EA2E6FA0F281205617826B76269346F725833EC2CBEF01E8CD10D506AE1421924A7118830194978E5D5FF48D64315940B740E149436D0C6665E1EDEBA26D2E898FE8B153CDD7AB4D542F4845F3836773D6528329D0338768CDD1A83F40FC7DF5601EB840C7CC60A3E1AC40DB4A2418058E5C0C4AD572CDAA8E5DF2D94CCF97C5E9DB945F7157602383A0709E785C0 -MD = 6525F7A3CB2498DBCAB17E9E149FD6695DBCC4F48E9E52F4E599C4536D3664A11C339F14F75B58855326508F875A177C89D0ED2DC123F0D8C53C7F51D6527B29 - -Len = 1622 -Msg = 705BB313E3151FA58E67D27A222063D89CC1F51B0F85AFBD286F7A2679DE97E85608283BCB05A722B4964FD00469DA851DB6478AD123D15BD7C345168644E655CE27B26BE4860226846316590FE4A928EB70EF137EDA87500A1D2B7C926CE24F129CF2C26108C13FFA54DD7440E7A072E86F892A7CECE5B32FFA64A8EACCC0894918BBE03356EFBBE1CDD0D8D2874D4F0CF2DE97B6FF136C82E52CA2DDFFC7C071B235FDF45EA75F882218AA447DB1774B524E491A71C8AD36EF7E237586B8EF8C9D1F51696FA87BB7BEA8 -MD = 0065669EA73F2933B61B0A0654867D5BB1886868E662E2A4A3945C67F77BFA6E696EB626C7C84F0DC64DDD21F2043088D6E695E0A6B3A76586D8B4565970FA6A - -Len = 1623 -Msg = FB6A9DFFEAE4C1DDD12A0B91B6DF791491C66FA5F63C17AACA03E05A021A0FBDF6110AB4F613DC4A18C3529510ECCAB3487B52F29B21C721C36A9D8ABACF0391BE26628855F488A67EE544F5A8F4ED28496F7D2EEBF0A6293848914D5AB313DBCC97FE8D6557BC0B55428EE9F9286473E3CA7F419958C3A6834B46DCFCF7FB33B9D212B8499AF8F742F63680C8BD3E9ED47483A765E7A24BF8E025FBC6F22BF119DCCF0C8325DE3842D7A38A2D7814609DF157CBC468B90E5F994E3FA5ECAD60086584D7DE80222F19080E -MD = 53E126591EE61F9CADBD1D2033CAD68C9A3E5FAE843E9C048430C9F0DCAE79431F3B37F39D72C17BD61781949AFC7033D8A2729A961BE29087C79603E3D6B8E9 - -Len = 1624 -Msg = C941CDB9C28AB0A791F2E5C8E8BB52850626AA89205BEC3A7E22682313D198B1FA33FC7295381354858758AE6C8EC6FAC3245C6E454D16FA2F51C4166FAB51DF272858F2D603770C40987F64442D487AF49CD5C3991CE858EA2A60DAB6A65A34414965933973AC2457089E359160B7CDEDC42F29E10A91921785F6B7224EE0B349393CDCFF6151B50B377D609559923D0984CDA6000829B916AB6896693EF6A2199B3C22F7DC5500A15B8258420E314C222BC000BC4E5413E6DD82C993F8330F5C6D1BE4BC79F08A1A0A46 -MD = A913DDC5BB089C121FF093BE529225148DF787D48F4F61699EFF9FC2910282A898A81A38D66BE9B06428D6466A614CA822A872C1C2C4D503D434D3B1D6942102 - -Len = 1625 -Msg = 4512826ACF04E03A179B4637CDDA71C13DE4A063A95616E213DD9BF6F738EFFCEB958D8C5FA812CD9F7E0DC1071642B327FF8FA5E30092DFD3422CD66F371AFC8F5771EB86734099F9E731F303300E49E2196371BC90359B2099241F772F9BCEEA3A994ADA8E8A9377D50400264CD6BA2C016C6DF662194962F394C684CD77D1896980B6269944196A29EA086B6D37D240A242273B7BE94FC2F9DCE896E68F2AA6DD7E02360D80F10819A0B7B3631F9214498465ED58191F33A002E85781E21C711E4239481C704366E15E00 -MD = 9E9C486E302F7547ADC6945F215955B1C9172231902B8548E664D3304F3EACE41B799E2A460E857D956017FB02081CF320D1319DB4F4F301969A49666D4EB65D - -Len = 1626 -Msg = 5F0A71F137E9E6C4A89323D63F4C64524A8C571FE3B461ACD6ADC6868BA280CF54209AD953F2B6C79D94EBF15440257B0FAD8DA1989528EB001637A9ED39B5335111B580091106D3578BAA32220763B87881BF1C04E6F735316B1DD60939ECC8FAA36723443835BEB11375A8D1777A1E67F8383D13DF4D4AC7EABED0639F6937FBD56BD4861A2619916E378AF371B26302978C98D29B2E0D5687FDA5C0042865B31C18CED3D93E6955F868BB2B1DA780FEFF91FCF8C2FF368A19B053A4924CB118D4446B061C57AF4DA86100 -MD = E3EF17E92E7084B6D68E1C293066049CE23CD8C5E757B670A24B065A01AF55384D31EB356BBD677EB23C12EEF38DDEE2846E38F50C7677DEE33976E160B5435E - -Len = 1627 -Msg = B5508E04114A8AD105281386E03A926D5C1D30675AE728200DD66183ABC7CBADA4B04461905FB650ABE443C35A9CB1F02036DADBBE4AB835546DE4B073A169EABF7B65BB8A7A189469C5FEAFBA84EB212AC4032E2C0E98B440FFE7AB41315F6925C019080AEE16FE28797637790A9427723EEB09E9501FA7EF18D332BDD27E9A211501AF5D4EB85A08B29004031DE3A819FAA9F1FF60351BB24DB87A0C9148DA4F3D36A59F3A1234B0065169B7E04341FED4FA38A06DD11B2F48C5C717DF6412D7CB8C86306C1432A70C1300 -MD = AB98FA97FB09D4A88E2AEF32DEDBAF20F3C4C8AD087BCF51661AF2016AEFE4DE84F14F739DA45BC6DEF1A5AA6791D4124F46F1A3DAD2AC9B76AAD1A73C6DC653 - -Len = 1628 -Msg = 460E5926CF79EAB6CDB5EBD255A787EC57EC030675F65C2CA6000B39C36B6CA62AADD1A9B6DDA1FF864C57D939A5AD53F463A4AB0E2839C9687B3695A2A78C9FF44A4A1822FD0CABA41196EE879F766FE11B7DC5E6E65BFAD3D3C3ED215C2D501771C16C483E57CB0D33FC1F8ED374A99E68AF15A412F85852ECACFB8F852A72EE683B9BD417F79AA217F6DD7A94A7BA87336A0588831E7A4028AA6418711B9E666573411DB81C2B3CA5B0243EB5DA495FEB870E0314D23AE7A667CBD3D6B5BC7CDE2574D09FB4FDA4581EF0 -MD = BF168A7119519208B0B7F6047C24C4BD848C88539AC6190B62F52594D258F3B8FB941FB04FDB59F03B52F2871028AB205081C632C0C4B7D4D24384C3BC394FB5 - -Len = 1629 -Msg = 13F4F5E8D19555A5E0636AEACF49EDB517612FC8CFAF02777FA81381D9F17FB9EBD3CD7B68C5BFE27C8FCBB83C28C4E9708EE72A5170CED985E4B27A68914D0625B03F9641F4E610B53B791CB9362AF625F1391840D0A375EF19FD8D038F4F7BCDF4A203E4B4CB3657C7254D183E3D88C171AFB511D043671E58CAC1ADBF03AF311C19AFEF2EDEEA14D53FD4DC7118506B0F6300CA176B2F891278894894AFE678A379DB28FA5E4DCCFB5E6A43D0A67797EC976FB6EFB312B1E8ADF73DEB9EA58BD2C153EF7CD20A8C48BD78 -MD = 4C6852529E492DE221A0AF430E9CBB9EA12682FADB1526607FD2EDF700F54579648D14C665AD1F21439F638BA038FEF94EC98CA9E574636320AE9AF5AA0A1DBC - -Len = 1630 -Msg = F8053BBDDEFEE95D05436D656F5CA1B71672EAE38D2E77071A086E1481D32EEA88336D78B6E75E7534B86168D317870B322C7733948FDE6EDD6A043B84EC6DD5D98FCDA0D5D2724E4A7CF497DD360ABBBEE936673953789BC7224F0585B655D20FC21E2064355A419194204C22C9E32B58714C62535CE5266EFBC885A8058A870AF26859A2BC09691B4B1701E267C92FFAE916792BEBC5EB31D1C3A89211DB21472CB045177E747496F0DE3BA5A7ADEC1905162593C9DF1E0AB50B00B2D3E85C9AB75EC875731B13474C9298 -MD = 3EA38A110B93B41E8F3D84B3E184ACFF4ECAE65BDBD02989C893B709720DCA87B6370BD3B80A59F256BE61883D5180B0FABA90B58421B108E6D8C6DDDC56DD3C - -Len = 1631 -Msg = 20F91E3E6BB637C2BA5B562FEFB1AADBEA72F6DDE874469E7453B74D5EC85E59F390CD317D5ABCA6EA15CA5B307F8517EF25328A2316E9CE32D9DB2609178F8B8DE2154F5EC37BAE069FA9A4BBAECEAD354D4BA3387F043085FAA6E5DB3BE7D0A257E1F46B8AE899BCB6932448B554265E8CCF7251710BAF133A4083F17279759E4AA27CCD1274B1B299DBAF19257C2DF5FD2F2060280D55F1B11B7EC362F894A459AA81D0AF2B3C43BD6D3767CBB6DB53B1DC54D4545638FC7977A7D81CCD1485B11F8D7309E200AD569474 -MD = 05B46DB062976F062FB372497380BC4E07945462737C66C3B347C86361B882EE1A7A5C2CD8B77E8BA1ACA90043AEC10592C1CC727C8E6BEB992F5B0C9A203648 - -Len = 1632 -Msg = 4499EFFFAC4BCEA52747EFD1E4F20B73E48758BE915C88A1FFE5299B0B005837A46B2F20A9CB3C6E64A9E3C564A27C0F1C6AD1960373036EC5BFE1A8FC6A435C2185ED0F114C50E8B3E4C7ED96B06A036819C9463E864A58D6286F785E32A804443A56AF0B4DF6ABC57ED5C2B185DDEE8489EA080DEEEE66AA33C2E6DAB36251C402682B6824821F998C32163164298E1FAFD31BABBCFFB594C91888C6219079D907FDB438ED89529D6D96212FD55ABE20399DBEFD342248507436931CDEAD496EB6E4A80358ACC78647D043 -MD = F10B91564AD93D734743281949BACEF065A6432A455236F1BF798DE9AEC6CCAC9B8D373B07C5ACFBD676EF21E4A3A9E0F7C38E8756D177D0A5C283D520844B4D - -Len = 1633 -Msg = CCBDCDBE422FEA72623873EBCA042A2F27EFEF40EF34289984B308672F89D8B9E0B9C3BEAE4972A892A4597D2970D402DFBE3429B6FB92D8B5556ACDD674EA060928F7A9A66A2613CB00AF3E464894EE32EAB35E9DB227747838B896AF8A9DB1151BB470E1535092944982BEF528BDBD00F444D02A220255898EE8940191C15476E167DCAE3365ACC671CA62BAE9FA5B6AA03BDD55D2E8F9BF76857A81658D01992E08A2F6418D2335BECE9E97D6906BC3C8D6F29D9C5749F4A57910BFAD25EB298C056DB574BF585C82EDCC80 -MD = 94B16D56B129C4BEFFB7B39BB6F7E8F36CDBDAFD52F10132E91570B5A5052749A987B4F094559D8FE3A6E170B237AFDEDC19797E17BC12834FD79A2AE0934029 - -Len = 1634 -Msg = 1ADEF1C21E7469C34E78EA4D2D257FFE5622D172B2DA0E93EC6FEC7FC825158F7C7C2AD1E56D4309FE8461BDA8E06C5003A912BDECD3AE2824077F89845D2BC0D83199567CAC50D05F86B9FD42901C93952C85405A22CDBB584303A613356B53B739828865243D6AA729C4D9C10AD0DFE8B748BC2EF4303DEA69EAF396D6720E1F11995D2703CDE2AF6CD6E8AF7DA17067A3E38F6B231D199D32CE6AA71A0BEA2B815AE3F68B0BBE42979F46FC50EDC801A2C5CE8DBDAD0DE61E92BC8F8A8CDEF30F043BCE6F55D49065188780 -MD = 6551D94219B4CE34397C74FA5D588BDE9BA4890D3BDE2A52D48725FA8C8AE7B36FDDC82F11998B104A5E8254B28DCE9DBF6F03591205A4FED02CC4D38199A136 - -Len = 1635 -Msg = F15F5FD8BE90D7DEDD1314869BD2039DC2F5908B908CF4741728AA8EE6F24D982658DD54772D6FB451CC4A2463EB47E06CC1D0D831F4890C68654ED11FF62932B5889729B861A629980AA86C9F8615DC9EA1502BC3AF35B918F0863E5022DA60AC88490D0C64929517B7EBD0CD8CF9FB82517E12C27F06D5A8250CDA267E53CE4CF7D3B26169197B38DFA2589C29E3005C2556F3E50E26CD4DD809DB873303A3DD2141008E851B3D4B7562E14BBEFE2A97D47EF29341324E551A3C13E08147D40FB6178BD98DB0BA5CA4640F80 -MD = FB2D343A490AC97656E8CCFA5480CFBBCBEE6BCDB2ACE7B734AF5A41140E87690C78E073D837955637E1D51ECF05FADBA0E462B81226D8438F151047A999F310 - -Len = 1636 -Msg = 0C34D0BBBD2657D0C028A030BBD626F2E4427119D2281E6E75B0BD087C2E7FF0947C8AD5B17E151EB991A0D5C9000EB8454417850BCC869D87DB0BC38C04ACFD1B94773810681888B83EF92ED5E9EE671618DFE67A9CA62E5F6B840195FED233DF5E2CF2026CC89D7997AA3C870C061AA877DE2DA503503BA703C3658FB1B3A2B6C886C4855DDB6C779A3D9721340D41D556B7B5F91BF96F04B8BCC37DE2E0B666BE14F7E931DA6BA91B7DFBCD2E9E16CBDBC660A9A569A4360ECEC700873C8501AEF6C260C564AFAFFFB568D0 -MD = C206DF56F25F9423E91651490B0F9435C9BC72DB0255CA961BEC759FF581630E86C497E41383055E410AF69366AE0C26BA0AC7CEEAB4EDA6E26CA2D8BEA7C52F - -Len = 1637 -Msg = EE248972CCC5FBF6536657A10F190E2DF0266662AC50680581ED4D5E3B7D074E950E47588CA113B307111A599D797E08814B4A166633607CA024D296A0733DABFEBBFAF43A7A98B16836DD0983C31B0F8B0335A50BA8C5EBD5CEC7D3562CB8851BEAF6677A9ECB951EBA7CD2D7433E6FA77469AC2ECAC93D88F42B9019D41E8F588BC6544512E5CA8BDD5E4DDD2428C73255A7582C4BE5788057067B530C2539F5B01671C146D28A99C1264C69B76A079B2FB3D3FE7E6ACF0679E7B7DA1ED7484A52CED5D104CE4224EB13F630 -MD = 0376C5F1DD338E6C924F7DAD3254FD9C44EA143E97A031519CEBF4C591BBA26460FA425DEC86EB8AB5666ADFF49DEE199A11F22D4FCABFD06EED5500A2D4FEB1 - -Len = 1638 -Msg = E6391A7E201B049AAB723F633CBB384ABC9C7AEA14BDFB1466E06BA8060F066848A3CD53325F07A638D074B6CCE4837460E228F9978F5951563462BB40D8669831A75E815DDAD72089B98495C2C853E80BBD2EB59FC96EDAA227844AD127045AF51D72527139A935618175B98885E4FB71BB3480CCEA51F7E75CAA344CAE25C6194EF3BC77DE186369C97DB534D70C606D9E1013EEE2AF02413D9101FC4A61E3350E81A3528DF1E746FF5ECDB27DCFF89621D240ACFC80F074D7F83824E5842DC1F4ECFE74397E4C91AEF9F520 -MD = EEDA824E78E886E6DC8195DE460134F69DC6CEFCC1669CCAF60EBFF0425CFDC9ED8602C2B17D83CB5E3AFABC28E89174C5D811D0296BCE4CDB989CC9D20C84E8 - -Len = 1639 -Msg = 0BA293C65A0223662A04FF90E97F152B2BB999E3C46966030918CA341D6701E4C7A19AAED4ADA69CAF9C45BFB2CA35E813A7BC92C10DAB5C68F64C5B97923D5402BEBAEBC962C77E188A283672210FFBB62A92157A09AACFCAE39B8DE00BF70376EF3F504A5ABB488242BDF32E946C6BBE590472E4A9C05993BCD9F1DC6E52431FEE6F20AA9CBF952548482CBAD43043E8725CCDAB58D5F37C5307DF9B57C199C71613AA3C4CEF6C7D13677226B213E78A8E404607E5BC592E0E88DD48650C8CB2F6DE18B71DA2CDA994C79948 -MD = 997AE7E6F6147E754BF84B29AE90BB2A6BD5D6E1AAFDB4AF0E338753A994A5DF360F08CCBF31375C011BF03DED7FCA52E77BE7B57E950C2D61D089666687BC13 - -Len = 1640 -Msg = EECBB8FDFA4DA62170FD06727F697D81F83F601FF61E478105D3CB7502F2C89BF3E8F56EDD469D049807A38882A7EEFBC85FC9A950952E9FA84B8AFEBD3CE782D4DA598002827B1EB98882EA1F0A8F7AA9CE013A6E9BC462FB66C8D4A18DA21401E1B93356EB12F3725B6DB1684F2300A98B9A119E5D27FF704AFFB618E12708E77E6E5F34139A5A41131FD1D6336C272A8FC37080F041C71341BEE6AB550CB4A20A6DDB6A8E0299F2B14BC730C54B8B1C1C487B494BDCCFD3A53535AB2F231590BF2C4062FD2AD58F906A2D0D -MD = EF26A1BAF33D4DE047BDD2CE34736E042ECD33AA569FFC0CB81ECFA66E9F87DA8D025ECBA24BCB187E4201046FB99A02DFA6F1BF88EC2B88DE216CF759FAC41D - -Len = 1641 -Msg = 9D8A483570AB16908C17E63363E8B292F8EF6D5B7043BB17EDB7D0B9AE9393A2D13FAFD0909E50E437C3934C18ED11200301C61196C2340BD70D6891A74CE8C2A04F31BF653E9610C5A93E3203A6B188F36F3D753393FADAE2A01A0D4F5E51BEC7AC939194A15C707CEA4BA48ED4D3A85F333A69F33E63E7EC7156AEA49669DE0BB1E75B5CCA3A759CB039DB7A977A5C1F6450FE069D595F30E965B7BBF6184CCD3E2E4B44FEA466C517A1EE1E5B40AC7068EB0E62CF13AFED1AB13DE7F679BD19840770B3070FE7FBD453BE3A80 -MD = C9906B69F465453CD37C5B892ABFEFB88EC3FE0BC3B047C3C6E44563CF971F9D9679EBE64B54A091D007A40D28B62B2C1DBDD210A0A098008DEE599D98269CB9 - -Len = 1642 -Msg = 37B1027E4AD24931103547B93B8A36526E738388503D72B153CE7D867A3094B92CD0A6E35A35FAB85BBD2BD211153CC7D623EE0B756C4F6169A36289775F1F42257FD3E799B63004C5799E32B46973FBDDDC46E5E9E6049043E03E0CFD0B7F51F6C5A75B31E4A0F47A65EDEFFD37A830A742F7AC411033A12333BBA0BC3F0757A12DC2B38A5AC54505D8E2F7CFC4C04ECFCA80745C22F40F0A13EECD55A60E2DB5C292AB38E8626CBFF2A66C76BEA11CE36B7726F9E2F7EF9779EDB7282A883FECD8093E4A5523185365C8877980 -MD = 6FB58D18F133BBB89981EC0F8BC34C8C3DAABB392F01E949E9857F3CD08809BE811C052445EFA8902D8B0ED81F02675D1264868D8790630CE3461BF359D63CE1 - -Len = 1643 -Msg = CCD746C21AEE13D421F7B853F2E57D907150D9B317E55231B06FA13231A42B8661C0036D4C03727F48AD32C189F68DB5994611ACED2FF28FA1DDCECCB714C84B5D11621F0A7B59676922FE06914633FE0DAE5A72C3586D194C3971A5CA0B22FB1EDD7DB42C8B992949E642C481E1375B19EA92FF7EC3E7511BBA02A0D4CD66A3A57E854533AC3B46C8EBD47FEDBAA837618A9262FB03BF1B5AB140DC5F46F98E4A58B252EDF82AAD7E01FD0A89AB69244B4F7BBA5EC2CAA096ADCC674A5F0B3E55D8B4CD22F19B7100E034FE95C0 -MD = 248BAE6D48D398C2BEDA4453E258F5664096DC4DB48943BB3C1930D6611D86544E4BA7F4249E45E512202100148688F97FF51262C308FBA0460DFB62CF2644D4 - -Len = 1644 -Msg = EE5AB1EB81BD8A647E1225744B90BFA8A998FF3018202AB4DD9C4F2891FCDA96AE786FF6D6530B0723AC3C7E943762996A7DBDA33DFCB8B2CD33F53150A8FF6BAA16E0E0CF8122C4F4B6BBCF4A5DCC5BC47F1BF41A1799CDE31C9D814444E55892E513DC9AD6E885AA305B95C087494513E2D1CB65D5AD9D1932FD53AEDE0974C4190535730C4C58920735E175CF4BE06BA5B1942F535B8898F6DC211593A3AED8C7AE1C32FBEAAA3C7FB171C46B7753679567BDB829E6EC769FB0A1C2E9F88CE55882A6E52AA2763EFF719D9620 -MD = 8C917E54163DBCD1831E8E1F4FED12D31FDB9B40EA1BB2D463DE47EC63F8D99C7B1A98151A53CB75F469025EA0F62D1634A9CEE92FC26ED4B570B5AAF8603158 - -Len = 1645 -Msg = B4E1CD73549230E9CA7AD60D99CF67C757B5A6C1105A39BBB4B92F3F11C7F1EAFDFAD71AD607BE795A60868C209711437A9D0B10F2FA3F0AEF49625197BA5014694C273740D76031BE3CEB6D2D959A7EA679B6DD2810AC4894780724E4714271E5C2957D20E55C384221791D1804BE9FCD656907342247EA85EB4D7982AF5B9AC6840FD60751DF25F5FA29B143A91FCB486013071619C8095548521665EA1098E7B2394B1161AEE4E1CB0438D080B95B4EA303E3FE8AA60C2E6FA5395E980E8B03FDCCA41D1C435A5C476C911840 -MD = AD349E2A4B291C2E46BC9BC5E84B3DE4E8C5BDA5E4D05C1B61F683020B136AF08E04DB1F8CC20056833E55B428F974ADB56D2F5E9D5987D8081AD02449DA3E54 - -Len = 1646 -Msg = 034D64592B99303F21D91AC35FF3B9A0A4A93EB886C4BB487B566170DE393F1E5CA82B704A6C029343B8BBCD674ECAEE1AEED2A6E21ADD8BF5219A37F8E1349C7A3F76839A3F39ADEE5CF4B9E91FCB68622ED5DCEF01F546C9B99A48456CA3FDBCC5013E47A4C345E54EA0FCC52FA14445B18F956B2C3A3B6C35FD9E72A60AA81D5E7E1CA0A54AC9B5F45B1A9E7ABC4D78D2452691EFD6ED268873CC94CEA342332832686E70703F88EFA1764221CD8884391607F8ED1FD5138ABF28D0FAF5904989C9D54D4BBCCA9C77374ED2EC -MD = FCD231061E41DDFFA00B9510FD7E8CFB5387A94ED9895CD34AFF30556208FD10C489AAF04F5BFB466B86DFAB5BFCD05679377BD8E360CAA181BE4E732B9717FF - -Len = 1647 -Msg = A290D488AB0626BD0BBD35BE8933D6063AA4F878A966E33B73D42E40AF66D0B242E3A3BBF42F7F00DC933AA19DB48508A62349A1142F9A1AF638A8A6A459F096D83A03CF5E7BE4545EAA22819AA816010D35C6AE5AD5412FB14B526331A9445BD374DB0272303C71E92924A2CDDBD8186BBD193C2C0B83C08E041B393CA0A8A25DAE892F112634C43FF581D0510BEBEEDE0E95FA8A8F0E25302DBF77DD22CF1935DD09D2156015825CDF95175EDE8816305459A901072E4FD2E2BE191D5FE13BDDE04C535C6984BD9EBE2DCA7B12 -MD = 0C5E7BE35B8B6FA6EB9F35745B335F9EB56A5187157AC5E3F90607D01B9B741F2AC894E35919645479FA39AC1A8390148272B2CB7DF2B8D04B97DC82F843B0E5 - -Len = 1648 -Msg = E64F3E4ACE5C8418D65FEC2BC5D2A303DD458034736E3B0DF719098BE7A206DEAF52D6BA82316CAF330EF852375188CDE2B39CC94AA449578A7E2A8E3F5A9D68E816B8D16889FBC0EBF0939D04F63033AE9AE2BDAB73B88C26D6BD25EE460EE1EF58FB0AFA92CC539F8C76D3D097E7A6A63EBB9B5887EDF3CF076028C5BBD5B9DB3211371AD3FE121D4E9BF44229F4E1ECF5A0F9F0EBA4D5CEB72878AB22C3F0EB5A625323AC66F7061F4A81FAC834471E0C59553F108475FE290D43E6A055AE3EE46FB67422F814A68C4BE3E8C9 -MD = F8E079A6DC5A6A7E7F32FF7E8015D1B26D43B54F166F2111CFB2B1EB238CABEE58630EF845E0DB00DDF1D800AD67CE7B2B658B42118CC15C8EF3BC9FB252DB64 - -Len = 1649 -Msg = 88D11A550DA2A6C99D1A1E1ED5FC7D8F4CF3593658F13D30AD65CF6BF862611B87AFE11F22D46529E8BE7CC9D5834DFC3812D8F74AB895465C5273D7204C7D2D9A015BDC343AAC4432B8E97A9BD60FC496EE3C1AD18E0CBFF4745EBF9A8E5E917C4CFE68958A1DFF1B5E68FEFD553C72B5F3725054E44E38F94112CEEBA3128EB6049EBB77CD67014A9D316D218AF547B695866E7E058611E8237B185783729690FF9A1D97E99AF0EA84683BCAFB12496BCA91E3AD271EE225F8971AE8CEBACFDB18B8CA7EB67DBFD2A14684CD7580 -MD = 275025AC917261DF9CA6D6076784AD70E7BB72062921BABAC2BD9205ED1A373D1707C00382ECBED1DF52617A6142D6A62B18AA20D7B19EAF902218F306A706A6 - -Len = 1650 -Msg = 8770ADC96669E667525D133761D4E914C2A4CB5ADF81DCC6129A88A496F5231FA960101F76F1B43036F76084B773E76E7566F489550FBCB0919013ABE142BEF449553051D2249DEA6C8ECA9ABEFBBD7A167D3C5641393B02848D3269DB8C13519B11087D6128BA9296B63B639FCD6132E5372A93C9E30AFBAC564526098A6DCA0ACDE2C659EFD9250D187864F82505B291683B83A686709D792BD785B8879DB4658381E84BB4855CF7D78A16B7BFDBDEAF352352FD34D1C204A8AD1C558E128B0788D7D27F6F508E7DFF2F46028A00 -MD = BD81EC4E59992CEF2923020A305AB78F541AE9244CD4EA44AFBA8CAF6BE1E0E27FB3794F02042EF52415CB704A74D0F5E4EA7BF6B33A4D13B3884854EA6FFB57 - -Len = 1651 -Msg = C355A7E5BBC13F1F080B810FEA90CE4C034AA1E7C3C6B209FB87399FCBA4A344706EEDD97AF881610C64FFBF44AD0BF321CA5249CA6EA09EE34FC513DEB34D5B98C6ED7340ED0D292D967C60856FADBAE4318FA427B879FD6852CF5A871F9D6428AC10CB048F6737DE6847F2AAAA998021A26C0F85760E9AF6CC8A5428AA308FBED9BEF937BE4BEB24A9DAF6A4F8374991D6C7961D1EEC6FE123713F42D78713734ED8792A278368119C83C9999BF952B1B1F7FADBC8F29C6237F5246F17948902147E6659260D2120DDADE9266220 -MD = B27E4394544D7645F48E52FB83177EC55B9F451CA09C084D8D02E6E6177A721724E72211190721D35473E500835FD298DB50DEACDB365074258E5584110481CC - -Len = 1652 -Msg = 0EB9AC23DF20C16D5184AD7252974B6A436D0F3F63696E5C3BDF6CB0D413AE9A6AD4873ADFC7449715FDDA2FF70691DF23FE97A5B4B26865B4079420EFE15BC91D49EDE69824460D9C088BFBFFA099BCA0069BAA011B5D6A156DAB76EEA11FCA667511308A797798FD06722DBE91AD244C1783886303E1C97B9341EF1E15F5A0CF776E047EC051A5AC226DE0080E81AA35D14910036D920F62DEF9A28E66E0120CBC15A6DFEAA937CCE1529DB8847A4400CF89D5BD9D46AEA1E82A5DB785848D8CF5D7B85463256E56B67F3DB31B00 -MD = 31ED698C1E8A9271B3673EBC8EAC0C3C8B999904B47263CEA8B5473A61226ECE200D81B9C6D48A11863D69683B73966E9CB2D60D65617B1B0CCDF042E095B754 - -Len = 1653 -Msg = 2123F23DB3299E66FF044A90F8668E0C935758B51E11A690F1F6B9A95335FD1A2A2F51B45747C2565CEA770C06E2C95A879B61399B9B86A0D44C557B9889A367416EFB6F3CB2F36D2FEEB487F93B33CF1587DE397CE5EBAA29DD808F503152562CF20F6B5E1CCB111A7E79831B2071AD69D69E8623AB3E7CC9445D30DA19521CCC7352F6FDC489427599A86A963DAFFF24483F256FAEC750C931AD732E8642355F73D901D4819CB922B92CB05D62C2899CCDB557EC15326B4B135E2957A548FE861F70052844AEC9CBFF7F57D64DA8 -MD = 1258D77D55233910039B7765296C1E6317570AC90EB007D3A522C824C62C338B5CD98F64D1C88C60208D20D0D4E07464A818F368BADEEB12EFBD9226694F8842 - -Len = 1654 -Msg = 0AD619AC99A7F310B9D30C4AFE98149E59B6155B94C064CF2B9D2129F83A062499CDAB4BBB94312687FAC290410414064C5951973FB6E8ABD75975CA110B9885E2CFF19B89A33AB4C0BE0A7762F001A7732AF2CC5791C07730757524EF7BA7D5BC40AAA820E6DA3F16A5975CB3F68AE52E074433FDBFD831A5A625DB6DD7F3D2E08F51103F499D9457B95E28C6E003A0C29F39D0E5CDBA736E78E5F38643BCB5908779D6BCC711D2AEC62B9A7B24876A30D9D9BA65D032FAD16DD75229DD9DB6E87309AA897491D8AE19BF84CE0380 -MD = B9AA9C24914A359F15F64E0E63BE5BA133821DA0FD9D8C09684859E9CA2370E252486237FE4E9418BD180A3A30C3621C334943B2440293D4ADF73CBE86F9B9EC - -Len = 1655 -Msg = DD5ACA2737DB9BFED4999C08898B23D933AC9C173387B1FDEF93BAF1224FA1F39BB22E3B2EA9C983B18ECEE377081BC56570B60733D686CDB0CB94642C91E34331E372E7FCC400A22DBE4A984871462184CC3276EAB7423616BFB827CBA65C5E7DF4E0A1E9F5139C2E87892C35C9A59A62D6E204264A0429FC33CE476716B4E0F059543E034A0B7E03A1EB15D4C497AB79D5C6B4A9B3AF26DDCF30CD5D7E398767E871DC823CFDD694C00C2F6256E28493777B09C51E2A2E285AA9C6FCBC80493C0A3F46FB3B13FD280C29967268A2 -MD = AB73664C2FD904CED3EDC67B8829E067E5D21AB64C0D98CC62C1A99F1B25BF4420537D76F138D9F165684ADB021E9110AEFB3ACC66D62F3088B8C56E4D79C724 - -Len = 1656 -Msg = D2CB2D733033F9E91395312808383CC4F0CA974E87EC68400D52E96B3FA6984AC58D9AD0938DDE5A973008D818C49607D9DE2284E7618F1B8AED8372FBD52ED54557AF4220FAC09DFA8443011699B97D743F8F2B1AEF3537EBB45DCC9E13DFB438428EE190A4EFDB3CAEB7F3933117BF63ABDC7E57BEB4171C7E1AD260AB0587806C4D137B6316B50ABC9CCE0DFF3ACADA47BBB86BE777E617BBE578FF4519844DB360E0A96C6701290E76BB95D26F0F804C8A4F2717EAC4E7DE9F2CFF3BBC55A17E776C0D02856032A6CD10AD2838 -MD = A5BFAA52499A688D9C8D3DDC0BA06DECDF3829BE5D444ACFA412F4C6E863F4786BE9935805310734E4F0AFFE05558999807408E97E100FADD0C93FF160F8B11B - -Len = 1657 -Msg = 061446729772A1A26F7F9A87702EABC582071872B6AB1373A1B88EBB259F0EFDEB159E12792588061C011602F6C42B8392E15AFC582388AC0903628E64C1DBE4F2B86109683F28EDC22C12CBE5541683715D039FEFC23E91629E9E4A330C6D0A68276DC60FD72C6AB20B71B79D2888159F49D327693CB48B61DFF2DE0E74D8A452320F9A9835D2C28613D555346BBD78F5320896E87AE92BC3B00A1B1BE403022D81258AFE07437BE13D339FC4481E96856D5CB49C547776C9CA467D05C38B8CBCFD71C0D899645705584F6ADDCCF000 -MD = 8AB4B99BEE79877E1492F5B5E6B97B72A0F33ED49D807F57FAAE3418418B426E9CAF26E79F7DFD849A985C86B0DBCFCD9858A6EDB0750E77911CEC32F8A0017A - -Len = 1658 -Msg = E2A4C02A8657C5D41445E9FA687E6F613278D5A8E9B6EBD5F76D817F1F5CCAC6C72278A70B96FAFDFE30ED00C27F20804FDCEF3882E3E47E3A36DA1708BD8059998BC367A1362F543CA8B9D224C6EE1C86E274B7B20D2CB64D6DA4ED53C751F7B561238AFB974D96ABC0878A386A7E28A9DFCE3C818E1B124ECA55BE07139CCF6C6020A4E4596A2EFCC7B84D271662FBC72074A16AE5EE37AAE4E5CBF19088A3C6C54A3D573B41889CE3D04459A0C466F0DD8E5CB3FD9C18211670CEF5F11DD406CFB922F14B7DB2F1F4B5C8C3D97240 -MD = 5FB83AD78CBD7E82DBE7DD685405DD68E5F7F70C3C98301585C3389E80C2797ED56921D5BDB14D3CA677FBA6A68478E30619E09750C7424C22E47A67D492351D - -Len = 1659 -Msg = A2871DF706DD5662C5E6ABBA84790DCC435B5D2EFAE1650DF11245EAAD20096CB90A216A0F36BBC3DA6497087B02C81270B7698E97C6047B5108DE235C97EBD599DB942844AA6B3E0737BFA5FC8EA09022F310378A8E8816E155E535F0C0E4D2ABCCDE37916D9527680860DB6745C2B1B245BBCBED0C2561656DEAAE921B8C82872E667936F49A6105FBEAB4AD46A5BC7BE0BE0303EE92EA250BBFCDC3A6A23D514C0D9CF8DEB91FCDD421CB6A4EA988B4F9E6DCD2566B6A4702E9CFC437AF87EE22A20E558B306A97E11ED0AF891300 -MD = 130DB390BBAA071090D943FC2A3CB14A8E4829212BC4C9C694919E9DCD0E2D2EE3D60679A78A7597ABDD4BF4A789373D647D0FDF8E2F0C4DD8CDEFDEE87EB599 - -Len = 1660 -Msg = D7F71FB30197E861BE59A77679FA5CD15239843842F4473EA9088FD6630A35949863D53DAD1E74093237CC822933387E7EE37A6D6190B72C52A08CF250954582357BE1E81317A6B65B247F21E0AD32BCFF600C5D671F8629C4946EE505C8CDEE4B8D6A7217556193538CF965FE9CAC3D44BC52898894CAFEAFD11F7ECCDDBFF518D6279D5DFC66C2D09D7DD23B0D3C3245167BD44C1089A1544DDB9EC1177290A2180B7606EEA44663D1589F1E9207B37B74DFB97D17F4D137B0719A09A6EF0C39F6CC0741D3A672005C707A09732120 -MD = 4777E8C91243FCAF15CDEF9926447B232BFD2F63276954122AB39CF4DED6B3CB610952527D05C4144EED5D3FD4152DDE5F9C84D3E7D2988067485DBB74861867 - -Len = 1661 -Msg = FE7DC1A26BF9B564A32930CCC3E3F143EEC2E2C92A63D31025114D0C335949CFFEEE336489D1A830731343974B9DD1E7DD6C83659B238D7F2EF4C91DD38C382BF03D32A0C74E704CF382A8711AC31149F76A1EA5FCD0B89B064562CE0C6BC46B34861B21CAD36CFF2AD07CD249FC2327785191B4BA0CC61DF7428298F852C250324CFBAB818294C24C534097FCC5F9403266955B65C47123E3E0D8CBF6E8478A231523F9913F3F6C6BBC8050D116400CDBE68F431860DF7322CC813B48DB3E8F52D35409D1E95882BA54C5857DB67A50 -MD = 2E9CC02EA617302DF42A243DD8EB12A1C9408D173D7E97412D28241E6F4BFF67535CC9D4F73416B378F4057B2E1CE427BEBF36A7D754FC6D87A6DA5CC71C5877 - -Len = 1662 -Msg = 872B77FB2DFF6AB011C7462CDC3B4892AFEFE4F6A786952DE02E49FE0C27FF89D81986E36F173D68B25D61F8D480BD3D06607545E618284EE0D4C2114BF7B00497D41BA41374709BE4FBF06A3F883701799B5FCC7382244C566F91C7398B13C06CAA5EB79F6914FD194CD18023D431F4A482AFF991B130ACDF7425009DE58A2049E577A6B19C68F14AE6AAA18492DD85FD6BAA91ECB346616819BD50B929298A7C0240812860C9ACABEBA7DDC13460F36C3ED6F068B200D0A3B8AF51ACBD07DC4CAF4EDCCFEC52A1D79F0465E12E74F0 -MD = E0DF1BD4E74ED1F8FE928E4A264834B04B8D053F7E019CA2107F52D5D599D7D0D14B90AADA5EBB0CB9C47CE1A84471D169FD55639730C82C0677DAB52B732CA4 - -Len = 1663 -Msg = A73BFE2AE3EC4855C30923FFD31C8258B4B34C739C869A97A13CA07930E60BE81A0F7893741CF2F2DCDC9272559CE61A07F8F750A0BEB50A604BC22A35046B46AC78377F82707FD436961291FB862F9BEAE56B4569009C486FC73B3FD36842A3074B88E8C6B5F8815703DEAAD29F1915213EF61AE55833F52BBF8DE07EEED341AC93F3622FFC24FF713D3B5FDEA439CCFDC8B41F7449238717249998E651E3E9C9AF2F0D56B9EFE2E2AE3E3B67CC8E70E4CDFF3BC301B5C8BF92089A2BBB925D0308543C8BAFF4782E9A415C17367E0C -MD = 5AF3C338913E8E7F0F4543F1194987572297A9AA429442EBE77194A64FA90C1D1F18177AFDDCCFFCD8CDF24BDF457749868A0BEC7D8BDC7A3EBC0820A27225CA - -Len = 1664 -Msg = F2998955613DD414CC111DF5CE30A995BB792E260B0E37A5B1D942FE90171A4AC2F66D4928D7AD377F4D0554CBF4C523D21F6E5F379D6F4B028CDCB9B1758D3B39663242FF3CB6EDE6A36A6F05DB3BC41E0D861B384B6DEC58BB096D0A422FD542DF175E1BE1571FB52AE66F2D86A2F6824A8CFAACBAC4A7492AD0433EEB15454AF8F312B3B2A577750E3EFBD370E8A8CAC1582581971FBA3BA4BD0D76E718DACF8433D33A59D287F8CC92234E7A271041B526E389EFB0E40B6A18B3AAF658E82ED1C78631FD23B4C3EB27C3FAEC8685 -MD = CCEA9FCF1AD93270AC4690E96B875122C5B5EC20D2CC27079CBF893126C44E0208A8BFA139057D72BD2638059EC8DA8A720499AF9D4C117F86799D7515DFC6E0 - -Len = 1665 -Msg = C3A6C9A38DE76C9A716E9861AC10D549F0C5EB678DC9FB2919018B5DC88E365F9F3C03DF1FD9DAC46728ECE38E97465A418F599EA0674680EE6D3BE167E1C6D7E0750228AD7FD8C7EA070AB9DD73D6138DC70AC4D9907235DDA108E379E81F7E00B1C9E2B7F16FE8DBA014853032A619166BDC2D488B3AE8615CCAB2C2A9E1A2D5A38753D9B2422CD91599F2D5D87F89D6449491EC7418F4DD39C53DCD9F1EF9F3448E75E8A73C33C32EBDC3A613BB5E5490540B1C74E48CF9AEE17BC3AC2BE50F80CDD0C69649336E5545E612DB2AA400 -MD = 7DCCD15035C22F4798C4C46C3FAFDDB2406A24D77944007B8CE86F556EEBC7A64D44DB0DE398151B2D52682CEE170378825BA48B7498CA34C7638CF31B095092 - -Len = 1666 -Msg = 0CE9C0A8B363C6504DD16AF53CA1028AEE93444E0A82A1573DDEAF6B41B7450CCD5120A72621983ECABE5BABB8CF0F1D3CC9E67AD8309D71B0355C3F9D667D1412982A0379EC376DB3B8D44D01AB58F7A97552DB4B1A178FB3FA15E33DEDBA345D7BB475731EA53F20E8D6CA0895B33117446094823E1ACD7A5A5632AF20ECBF94ED42B62169867FA6B4E9D512B9A4B443B2AA6A5752EE68C63CB42E5FB2C022C60DDBDAFA25E8A2493CDE12586D17089E9AC4A9E9CCF0E7FAAA5252049CB1ABE8DADC9EA9F552DA996B780E7B90144040 -MD = 1DF95AA16300611B1CAF970998C764FA6539B64C44845B788E892950D77C527FA97E6FF090959DFA346435891F269C2C94B0B7D1066C7D3E1A6E2A972B721EB5 - -Len = 1667 -Msg = 566EA91163B197DD99311CDA8083A3FEF200E9B5C84BE85A9F60D0AA73502EAD446FF757E4B37C026493573BBFE54F547FF6124E8F4C9478F68BE242664886695332185AADF0D68F38FCAC08AF2AE40F0AB98BDE182D4D597E6F1371B90D0FC4FB1EFC48804F528A2C6C4EBE47BE3FC4B74F0B795C422B4EA4211440299953714C51784D93329985537903ADCF14262514E2B576F916E2463712AE0B6DFC041B411BEC16FE050AE3018A28C6211AE20D65E053C5A68DB5AE09F0B5D2C22FFB9EC83D9BF7EBC54E66F0A01A2299416123A0 -MD = 1E9B3FFD39DFD8F048B0C27A9FD837569214710016155262734DA84C5D2A5210E27AB8E5B57C38DFD9025A9F75F2D4F7A122FB8FC4C2C23DD2E8389EF9D67789 - -Len = 1668 -Msg = BC89FD708B4E589FDC763193633E4D86D65857FFD3F69BD8972DAE8B8B029C8CABDAEDD159B0D0EEEDBD8302C279A5EF5C379F1DE5CC7D8C0021221E04823E28BDCF6535940B0DB0E87F39731B8CC48B95608544ABD5E01E1E3BD4D24DCF20863D7EDC003DCD0FD458306D3C4CE67E93DC4EA2EF2B6F5A1EE908CA23E32984ED946E9EA2588E33776D926024FFC5FFF715BF87E424D05618D3A914C77CA954B8A80BC50624CCB8EA30E226DFB50BBB956F147AEF1BF0DFDA43A6114E5094E42E6B6F39B00BCBFBF2C600F2629C3FB66320 -MD = 4E48D0947F29769904B3506AA61D14FE628D1D46F57E0BFDF3E58002D4E96499C040AED3E26CEDB9CD28C46C676B0077C33FBC3A67835AC44BE8F01680F60793 - -Len = 1669 -Msg = B594C19EA19FBC4A9C7DD9DF4993CC7171ADD9B0E872BC211F60EB89D313CB5B5FBBDEB5D535AD20397550CA6534B859BA881D0713DEE6774471F57ADA476A511AE98414F07482F49F783F069D7DC5AAF42EFCCAE350A7320A4703254687258CB0B056558E2C6E31A2B336D1C36D770043DB799DA99CA06C38B93DB93F776891F2BF2BEFA70BF87C0E4C1383FFF4444DF05849D9F04699BDA9A95859BA5D038D42AD0EC4CE1AF15499230FBE9D12CC0998316266FB02ACEF9BC4FDFFC84E5A17FB2A605EE8F0239383A2DBB1E1A4087488 -MD = FC4DCDFA1BFE627949877F897A93DC21205FEEA80B55080FE073C0D6D45DA0A1D77695E0DBB5C482A12F402C4F29B5A19EDDFB8844593D2A9B8F6C4B1E26EB6C - -Len = 1670 -Msg = 32366020205740D26523E6A91E2ADE18D6D7018535C132F17EF6AEDF034BD8D812739188436F1AC21E429C0798FB0435975D5555E34DC5F1B412647571D32B2180E53F45DD83BA97524DD38AFA67A6FD54E93BD33746D80E70B46D5045F2403CDF329DE154099DC721F6288191B9583793F0AF20774C730DDEF605A5B4C36A93B726D1CCBF9A2175E425A866326BE8BC1C3600F7C95200BC28F498CFD645757D8D90A2CDA7E6E15307F61075B78EB82016C0ED2DCB4F6903F71CDBEAA2DD273C4880B6EBCD601F1813478269D05D370D54 -MD = 637DCB3E934E54E75F604F8A36EA19BC072502B6E5B726FFBF10420FB11A592E46BA2EFF15A83F9E51F3BA8833D69A0114C417F2371D04F3D94626DA667D4729 - -Len = 1671 -Msg = EA87C7C79D9C993C4EC01DCF55AD7CC433F8BC8101C9584455939A975EEAB6DC9C7DB7A00ED54CE15B473A26BA861C0E53394D762E2E72AC6A3930AB4E90E4D443C1B3E1CE337DEF21BCFBDA38D863D7330B33425A2251BA3D3A4935F5C1B62A2FA08F40983748131160F11853F05C1B65075FE224BC6289C31A7B93ED78C3C2428F14ED79CD0A2F7164979757251BCCC4A255F1E50DB5DB171CC05BAC9F893E9E86885392C66FC183232F7A3633F1D701575261B702769E161B8DA670D07B97DF1D9B36D24A28EBBEF639408789CDC39C -MD = 8ED3123CAEA43287FA6826319617CBE6FA1F9475A13BAC3772F6B9FD98BFB49AAFC61FFB32D39609B0C89D2599C1B77C9905AFF3AF8C29DDA4425D07650A64FB - -Len = 1672 -Msg = 447797E2899B72A356BA55BF4DF3ACCA6CDB1041EB477BD1834A9F9ACBC340A294D729F2F97DF3A610BE0FF15EDB9C6D5DB41644B9874360140FC64F52AA03F0286C8A640670067A84E017926A70438DB1BB361DEFEE7317021425F8821DEF26D1EFD77FC853B818545D055ADC9284796E583C76E6FE74C9AC2587AA46AA8F8804F2FEB5836CC4B3ABABAB8429A5783E17D5999F32242EB59EF30CD7ADABC16D72DBDB097623047C98989F88D14EAF02A7212BE16EC2D07981AAA99949DDF89ECD90333A77BC4E1988A82ABF7C7CAF3291 -MD = 2EFC5DFE028A35503A25BDF8B2164D86CA7496B7C5DED09C5D414B6977ADBB4A6988AB9939D1EC65F46BCC99C1DCD5F19E035D8D3DC387361200E4DA80C80671 - -Len = 1673 -Msg = 9ABA7C331CFD36242CABC3C6BA887C8CE4675F51FDCFCF49E706F6BC3C4215CE421D15B304F60CA6D19BBF8535D39F300BB415940FA23D8C788BA07970E0F1AA494AD3A6D988873E84B2E2E2A21D50751592C5FAF8EB1B30012B73B929C2734DF234F4FD7E0C2978B713A2B757812FF2D151D3C1C627E121F293F8DEA2DF2F9EE9A66E2859F635B615651736FACE4AC7E58D9B9A05A652FC0E6A9121B8D478FB04B5809E1994B3E3BC7E6A82D2A450071589AB46C6F5264838E425082B7D8BE92E49AA3632A2A54CDBB01360534080312600 -MD = 8E1D702B4B70D6078FBBE55A93D65C19FA76D9D3D39999D7B139606F8876A5CE7080A2F9A365176B7E4442D72CADABE20C2BF37A6D1123A75C745D2E575747E0 - -Len = 1674 -Msg = 477BBAAF6240F4FBF19012F55396AC5E1C9C21AC4710866E58811E4A721D1E1BA2F13AB04EBAF2DF5A0F29C0213F8C7D3CFE34CBDE94A17D2ED0322A298F43123FCCC9A05059B224751607464C8B60DAE1E67A17B18F4252C2F54A7AAF4B6A5B52A640BDA2F58A7F86F61870FA5B7C2DC183CE5B1965DF783C30F63223551EDD62D563208094392D2EBF9C6C938AFBD408E08AD0A87ECC926BD25E784EE4D4D3C3C935ACBE870D8A777D7CE6DBBC675E32409748FE1CC641E4EDEEBEC6FE242E3A88434F93FF9F4677FF8994EE6F07214C00 -MD = DC1C91A0FA9517CEB1A8C745A09111907E4B859A2CC855A7C7BB7FEEF81781EC40B838BE15BF14B292DC34A452EA1D1A04B94BC41D8DFA6F04EB0A3521863AD6 - -Len = 1675 -Msg = 96655F154EFCE33E6D9EB56C3471D5BC074E95358CAEC947B638FD63EBDC1B841A88FAEA4004D9E068341586D03437A3A3871255CCE036F4E7770B740A05B79016B9E94132DEBE7CE7BEA242ED7067927D4812F448E3B9AA9CECD01DE26AF84157AB79D3E50C83D1E821714A333D23279918C7C04BD999465B427919EFA9CC0A05936B42F3AEC5AF30874064A163D7E086977B32FA81DB19B6ABEB7DAF81512579885E9E8C257B58487231648BEDB6E33FF1021A97147BCD39EBCD4E2CA4228956DC674F61674175E16DF7AB56FCC518F280 -MD = D373A294C47345C031181602BC5E72AB4EA23119B20CF1892BC23826716A8DBDB06247419C855341354C41DFD94EC749218A396E9C6D18F7A9359AD420B1198B - -Len = 1676 -Msg = 09FCAD77247BCDF3B8683ABDA5DFFD6B58C47C0C8D88A274CEE217B35C702B5C84F3DDF8C57B6947B6D04046C81CA0A4672D4780B9EB694AA4920FC0E01ECC56BD9E137892892AD2D31BCD491A23214825843897322BE5D33729AA22EDE7F21A115CD74DF0AE3CFE28BB610C26461BB2911420C7C4BA932626A9DEC6CD22A8889076949ECDC415F86DC788D73D733CDA4DA49D6F65E67E8F20BFDB825D8AFD898E5D0162EDCD536C2BC5F978A8AA128550DF987EFAFD0BD6799BBDD9EF8F3D04D534D5B5816C29EFCD43ED78F538AEC30850 -MD = 5898B85F53F8076BB1EBF14E39A554C71D0D3DFD055EF3B061516B1B49E288309F03EC1821E5EE43BCBAC50B7AB4BC4B117CBF5B0AFE8E50662FC262503C65EC - -Len = 1677 -Msg = AB8A10D700174B4B43C23BACE4393A55E0DB75135AA0AF3EE8A3A1F1102DEDCC427795DDA341DB51B2E26880B4240C904FF51FB0C78EDA9334017C07E56A5795ABA4DB246F3D477FA76F2B69568F09F6ABE8B0F5B2CF3D4B293EF76CB22A658278FDC4DCA98F3026E7D12417EB9928B9CE4A70F59B64E1DC834AC27D996E5763A867F354C50E73DC4244DC2FA350A7B6385DCCC8E9B427472759FDB7FB052156B10D34DAFFA4E71E60DA992E0C4E48FB3F91C6B2CD127E1D2B9EC6AECA04D54B1DCD9ECCB331D0EFAE15A2AF47950ABA4170 -MD = 84C064ED123791C8A9E89D0919BA9A198AA46DCDA331758A380AA6F802B59DF73E12666FA1125B92A55C336F91FA77F83865E7FDC1590204B0C4A1BFDFA304B6 - -Len = 1678 -Msg = 05DBB0DFC9C650216514DAB69119695C0A0F80EB7D678EF91C8D0CD8123C6DFA6A88287177D7D9797DD5F84134D0A96451CF96664B7374EDD453E8FB31A106334E957224A434F156F3E9A83B7A44E54666EFBF25685391EB9BF541E2F6ACCED20ECEE46CE60423A744F5F5B7104E1F96A8D0C5E66D58AC121F300F88A3D017BF5F79AB64382EFC524DE1129C3E2E456D7203235A4D11F040A2520AA517E73DBB1D580B283797612838708DA911B5C7FBD1D4B48D41F81C87C7863305663376FB80415B82B8038E1686AF5D826B74DF282C80 -MD = 669C1095AA31759DF38DBFA1D2C10AC33543A6AEF26BE111EEAF056DECF92BB378053D7B1FFD88BDEA13D2E1D7B349D3712E55CDF082F1FE6109477821BA257D - -Len = 1679 -Msg = 987AA5D10B8C1CE8D2A389535A7EF6392D68D4EC80819864603CB92860768E81225E2B1606B83CA62E8047291B9DCA25393B776FAA0C4E3914DD0AFCAFC21392C43AB37058F028A6EF330E6A3B53E3ABAFFE2EF62D126712C00C855765A91C111A89FDBECC5D5ACFC676B566B32B0BA6DA12EFF945A8886448A610AAB9B66B2548DB32C5B8612588A8D0A02F1E0C83878296FB2ACA1A09C25D438F8F2EC7875A61B9022FBE7F1BB7D972B0ACBEE28259B42A09B4F26105F1D0CBA58C6066F12FC2ECD14F286DF4635A0B691416127E34DECC -MD = 158A0FAC12FEB3EFFB09D8A9F66C560BEA519169F0A6F64FA6D5B5C100463DB791CD9F789524A373B017598ED067FF1374F9971D588511F7B293978D15B3D55B - -Len = 1680 -Msg = 9F2C18ADE9B380C784E170FB763E9AA205F64303067EB1BCEA93DF5DAC4BF5A2E00B78195F808DF24FC76E26CB7BE31DC35F0844CDED1567BBA29858CFFC97FB29010331B01D6A3FB3159CC1B973D255DA9843E34A0A4061CABDB9ED37F241BFABB3C20D32743F4026B59A4CCC385A2301F83C0B0A190B0F2D01ACB8F0D41111E10F2F4E149379275599A52DC089B35FDD5234B0CFB7B6D8AEBD563CA1FA653C5C021DFD6F5920E6F18BFAFDBECBF0AB00281333ED50B9A999549C1C8F8C63D7626C48322E9791D5FF72294049BDE91E73F8 -MD = E80D7A934FDAF17DB8DBB1DC6C42E90E139211C2F599890C06B15D6248FDBE682D77D4E05F26D72852F7492BCE118CE7C36950BD2C50F9699BB47D89C3115377 - -Len = 1681 -Msg = 2CF3288DF0C40A7AF765DF75268CC32B63098A1E42CC6941A795108BAFB6EBF09EBC92949F1E92AB140B8CAC7546A3B51C923524B1539D22697529358BEC7EA462E92E1CDCE8B7A3081997A0EC9CBED66BFE8334EF651DDCD8A69C577BFC10894E583F1F443BB88ECFF1719CF7DCA3F8E7348EB721038E97E090D138C2F42C2B0A19EBB63FFFC4966D6377D60C64042AB9BBBA423A215406E21901AE3C6339918288596A1064B56C328B3CB54C6327ECF5FD741717E1BCA1BAD8751AE21FC13EE04E4148E1B34F49FD3915868A981F5BDD6E80 -MD = 0765AF383FC559350DA386B4DE4CAEEAFBDE43554713EB08EE3DEF9CDBBC43AAD5E4910C647E41FAA6E5E82679989D149E538A2ACB13626F204E17B53EF0681F - -Len = 1682 -Msg = E406B68F1C75EE4C12E73229919DCB8C1EC3967E0AFCB0D349968BA95EDC915654851090E15793B67F675635A1EAAD6347904493E88DEE6395D295F93E223CB111D325D94F5A34E11C5C8773C26614D10F28CB07822D6875D7B76D8ACBC2F5EE2FB9F08B87CA1A006065768264D81046E8C6ED0BD2222F70A81074F5DEBB3E3EB5FD588874C7D89131EDD5C826C3F75A38AD60EA417CA26B5F4AAA3E95B1E2AF4081B5CC1CF16E54651111432C58A367F532A6E87096706774BB9FD2C11A75E6B706B53EF5D4EE562E22621B11F47FD2284E80 -MD = F7F7E942656BDB148A2D728E5ABA9A6E6E16157BBA63B6CB2DEFFB2597BBED27A583C0F2847061E061E97420CC38090290E12E3271AE21A2BBD60DD35B088B9C - -Len = 1683 -Msg = 6F551116863B6CA50D37C17BE7547CA8CBA1D34C93BDAF07BD94DD9D422099E2C896A73B5084181CD94F4325A16688A5D9392DD59C26C6A3619BB40FCD1BE58DDF8A94CEF25215077E734FB8CB52809CAD9A379608AD26FCF08856701FC5E1AFB2F9D5A042B745F0058546A1B28BC3354B11151AF38C52F058A41663C65E82EEFBBBEF366DFF01797DFCE4E291B1CFF9A1045F8B7F784DB6E2CBF7DC33B4F4CB0E4DD4F2C65E773B2EAD81C4899BE4056E45F840D473ECD394383C2CC8E0E5686C84130EDF8E6625AE51B3E1F07A0335474E00 -MD = 838211421D8B49AC3C127CA02FB36F02C1D13EEA7830758AA40F96B3CB3C74DB504A0668238E8EA0621E6E9C24D86ACAE9F0CAF449970A513C1D32858CF442D4 - -Len = 1684 -Msg = 77CE50C2A1AF8A234F2C50CF62806FBD5D0B856736129015DD361F6894AA9AB427A3151C2BF036953F857269C8C429BC7D715673B56FBC8B8953ED28885388569E15CA47E4FC31B3C4DB8FAF09AD46A7BAD593CAD9E1B5709531FA6F44DC70E03804BC4D0BF5D23A6D7C0C1B55F321FDCAC708879F212C0C917B72E33689635B80FA87C8A084A239BEB4B4B4CEBB40ED948ECE200D7003D4E3319B3A1589B62F5B34EB6D02071595CD26013EFD1CEA645454EC37DAD75A23E2A73A844364318F0D1437CC9B5BC159C3F00EAE2CBC3789C06780 -MD = 451F4168922D25471BF3774B7EEA0849C7A1F0B66BE7E6C288E7212F5947EACE739948C67AC06FFE9CA4FB10DB6BE3ED625D0547FB99E80029DBA6B701B72E0D - -Len = 1685 -Msg = 3388AAC4F2F412000389A9D676060B736C2D67263BDFA6E63BE3D5660B5EE69A2D5E15F81EA0A967DD47E1AEE70B6F9445B5AEC1875F699D5C4821F97A543754EC6DE498B7B59B570F239937712FB462DB40008792DD0FDEFBBFF6F333C8879C3284C3ADC5D20D6888F01F2A91602931990C90101CC26FF86D29C547AB80C00E2B001262F7EA283B87C822DB2A07A52D9C622537D3318F9FB1EC88FDB779B47FB33493E0D165F945FE674621AA0A908001C84903995D0616BA5C6BDCEC171F6746EDDD8FC9B94261165C7DCEA64900661D9978 -MD = 35177C097298938CFB200103B231680B9CA9BA4F4529521077E633DA6341D5A8EAF152C7016EC60ACF78BD219658DB0A93BC6B5DC57D7A46BEF0F8BCD4A08B0C - -Len = 1686 -Msg = 2CA96922D63B06A48D96B05B502F4E296B91D73ED57617BBF68278D0DFC2FCFDD6BD20548E6E717675FAE637DB6B5238A08982EB783B19E508DD5E87EF4845ED933CBC8755FC645E2E84859ECA2708FC9329B36FDD0F7178839D2D10B610769F791972BD93A4BB292EBF55BECC9F8152CE72EF6A379229E7CB0993F5590F6BFCE875CD339804BEE0ACF5F354706BD79909443F0B512DC7DB4C1EE3C0C171EBC0CF1C1DDEBDB963F6F880AB8CF357A93C5F551F6246526121FBE40E10B68C3319A2FED010B4F02B34514A5E7E5CE84616F4A0D8 -MD = 333676E4A2870EB9B7452E0D0AE9559A6F61276F0897453ED41B937E1862A2C77FD0767ADD556D0C5E11317522B35E88888D892B7CA1C7FD83FBFB51EFD86D9B - -Len = 1687 -Msg = 9DA1EACBA5D0F46160540A856F1E212405809F0574C7524291A3D20B4E7CC3CDF5022DE66FDB79888BEEC81D0EF338AAFFFFAB7C5F8A5DA403E6E41826864718EAAB9ABF1882DD8852BDD443E4F23C29D05BC8B44735ECF8884505351E3DA083557CFA8663D85203CED742232F7E150F24B55FCD5B7B2D1F2990FABABE62A8F85435809DDDAD0E268554FC6258809062A113AE1755E747730A969CECD37873C8F99049E8310F676BF352C41A122F2D8E75D58862AB6ED4E196F2202C862464B1A5F4F25BC03F6142DC6EBEC5C30C2BFCEDD57E -MD = 20C765A913B67100CC0410CC3B1502FEE53A4592DD2B08241CD143AB143911E226E0D0886531F35CC86EF94DE02DC44E3B29F921FAE66FFD02A7AB9D839E65DD - -Len = 1688 -Msg = AE159F3FA33619002AE6BCCE8CBBDD7D28E5ED9D61534595C4C9F43C402A9BB31F3B301CBFD4A43CE4C24CD5C9849CC6259ECA90E2A79E01FFBAC07BA0E147FA42676A1D668570E0396387B5BCD599E8E66AAED1B8A191C5A47547F61373021FA6DEADCB55363D233C24440F2C73DBB519F7C9FA5A8962EFD5F6252C0407F190DFEFAD707F3C7007D69FF36B8489A5B6B7C557E79DD4F50C06511F599F56C896B35C917B63BA35C6FF8092BAF7D1658E77FC95D8A6A43EEB4C01F33F03877F92774BE89C1114DD531C011E53A34DC248A2F0E6 -MD = C414B29FD07720F46C351F5C80BE2094E95D13AD97BDD1F7C5207B695693CD5E1E0169B1AA2E271115BD5171FEC51D04B71E3E7CE1618FBFEB382F56F65F7EFF - -Len = 1689 -Msg = 0660E0A141302B50534D949C8925E6707EC8992E5A2C644C7022A94D19271743416868E874FF8DB9B83F7307703DBA2C0B1E4CC533A1ACFBC16F44B103BA7CFF0FA74C026059E8B87530A1E8561EBFDD94E07DAAC12DB30FB7DD888E1F09B75A22CA86CE821639C2D2F053ABD75D10AF6080427F0B9A676A04BE3A0E45ECCEF9C7D228B423519B8174B420E6CA812C74C79D77EFF70F95545AB0CDD4274A22BBC9A636043BFF1E1EC56C9839119BE62F2E0BE9AB3036BC0E90FF334B60BCF6173C81FAB7E5FD55F1A5984093D82F563FF09F0D80 -MD = 42BD4259234DDD908F1CD1790FA7CF7FCB98E7BE5437097BB22443EF04762066B5660342E6A14C39654871ACBBCC258D6B3D2964A041F677CB95D2E902601B9D - -Len = 1690 -Msg = F4B026CB6D798171DC89A186B1E41EE8E349C26F69ECA4E3768AD90B1F1C6F067D7EC0FC0C0464483FBDD806574F5738E2ABE34086F569C8A91266F7F09596D77B993C3DC612AFCB346545F0185D645A8EB83D1CA3FF7DD6EB7F679BBBB8F2E52925622807DF47E7E02D3B6A9EFCA343984642F36AC9008C0CDF899F9905613082B39E83AE4390F78822579BE7BF2DA24DE753207D3F2A3645F147FC113545974B2C4C563752413649B7B6CDCD7C578DA209F45FCBFF681807B9F5EC6DC003DB7BF59B715E542587D9EC850543CA6B9729A54880 -MD = D73F7FD3646CA2E505D1DCE038E67936689B7CE2D994FA97BD44A1A797AC6FF13307F333B7343C4018DCA630D2F84F281223C6B025F78AFE4A429425CCA10274 - -Len = 1691 -Msg = 83659B5B4040A75E046DFCDB2179EF7A7680053C1C86498C4D9FA39D6C0CF3648E0946DA8EF5630C6430E2DF4F194C591D1912B5DA03AECAF6C6A440C6F41F304F252D40414239EBED0FD994CFEBF0E95248D229A9583E8C66F980F5B2D509EEFDDB28BA8BA55716D809B9030A1A2ABD663467E8DECA0C8FCB6B44D1297AFB2FBD1B9F44F37DADF1D3DE4FE301F983ED8222C3C0BAAEAA5216A421A0065D6DE18810538B17D5FCF00A98BF46A9B103E353D0D33CFFA04288DB928C0ACF5E1C0A748A2072651E32915E0CC1E9D745D2A6551C2F40 -MD = 38D4C709D62FC3BA3453B2C999B2FEF780BE25A5AC93EDE2FB88D407A667C6599A8C3D21DF43B8A47C207D3602A989F470D982BA8A9808F4F5A7870717571830 - -Len = 1692 -Msg = 856F1B2F6C81E8A8C3C6532106EF4108B2FBA424BBCEFCC5F12D67387CE8FB8ED88C80B56A7AD4EB79E39FE779EE65BBA038DA0D7003BC16FE087DE0074ABF764F33D075C2F152415858B0E18B33C7120B27972B608838B5D8B4E303C569F84515ACD539BB53F583630F8D3BB28C935935D60B973120ED94A8678AB79800DBDF2D6463D26B587C630F725DB8C3F960E1BB597CF963EF543B3CC7A05FB81EDB7BBE6F893C631BB48310453E900F0CEDBF9EFE9FFEBC08BCDC198E46DB9156B4EEBC40F9977DF341647AE371BC4CCC06470A0AD690 -MD = 61B93368BBDA7C6AF3A51858EA9F5EFEE71B4DB2BBE55B6BA57A659D1D19D8068E6CA7A7A6E70FD7C2DAA91F1D287439E539F4BEBD41A9DD850D28EFA42A4BBF - -Len = 1693 -Msg = 4AD3F42F008EF17C88465189BDA1A33E2DBB52A1ABAAC899388E50B54599F3C2C0B1D2FD28B9343E82F8B7C5BE7558C8D611572B6D55845433E2546BDF23F38FEF02455F8D5C979BF96E237A3F5E9ED2E05E1023CC12FC0B6ED4136638DAF8AE1AFAC247F4DA8E37051FF13DCFF2DDD5FD8142791F067DA654A58EB0FD27DFFFB53FEFF7331AE8CF2D03484CA5680BCA02141B1219D6F2AD8A42EDA113BC2A250D9C960D568CE448C8EFB5158267ABCECC8B972A6BAD7B4F5E8D278B45DF1E04173120EAD2591CC5298E28D2E60EEEB4938D1828 -MD = FFBCCC4D8CD57751681BEBF63E371B76564471A04F1DAA252938CD11AC978692FC2D59DDC156995D42A58EC4E2169CDB73F62D4EF3F39EA72AEF8FDC54FC9168 - -Len = 1694 -Msg = 450EC015C3BAFA6F1A17D87AE57F449A7B868276783D0E259B7B05CC733E43667FCE3561CE954AC0C3DB26E86B52A9587FFA1F6CE15523B048B341DE8C868F126A8E06CC49717D9655B46359A2CA802BF19F93218BDDFBF8E2713DAE7B59FF826EE72F83D35B5E2807C8DCB2B6DD84DB5268DD874BF92B2D7E64F86EB8286F04B9748E117DBA480FE66CF4D7C5B2635070E866AB6CEB2D2EFE231EE88448918D327110ABB5CF90B6E7F99596723639A295A209A5FD0DD6C6D5EFC660546885FC0CDE34F441A4892780006F29C0F3297CE30EC788 -MD = A64E3269BB01418C1A91BF9ED0C04FE4A9DB7C08AFE46403E959FD60611D321E8CF2453A9D02D3979F1AB3DAFE4EE3FEBC7FBB6C921F39352A8931E5ED514C36 - -Len = 1695 -Msg = 82D4B43E3E055B976435EDE9BCD1F157601562B53688338BD2ABF33A8A602658254165B79514636A0D8541ED8983E0EE96E8E20148125981C7C9EF20C6ECCAC0A7A123066C3F1D9A2DFA3E16F515849BEA3F172E2C1C4D81972FD5FBF4ADD14FD27983DFC1C53E43E7ED296FFD496CAB119E939E3E3EFAB7A30546DAEAEB491C322E074DF3C0F4973CC20ADE3BAB5A4CDDECA7D6CE47B8CCB53070B62FB99BA28CC7EF69BB850A24C84562D72EAF152F915E544343233434E702B3F64CEA729BA16A3C11B359C900D30EE61DAB54E55005B30C16 -MD = 6A208A3E7A4892A405ADBB33214F19D97F7B67D42B9EEB06F71D5EDF32811D972DAEFF3F0A677CAC44620C5B7D03447B33D92D26494D4E9B21C5B3B6D1263DAD - -Len = 1696 -Msg = 3B8E97C5FFC2D6A40FA7DE7FCEFC90F3B12C940E7AB415321E29EE692DFAC799B009C99DCDDB708FCE5A178C5C35EE2B8617143EDC4C40B4D313661F49ABDD93CEA79D117518805496FE6ACF292C4C2A1F76B403A97D7C399DAF85B46AD84E16246C67D6836757BDE336C290D5D401E6C1386AB32797AF6BB251E9B2D8FE754C47482B72E0B394EAB76916126FD68EA7D65EB93D59F5B4C5AC40F7C3B37E7F3694F29424C24AF8C8F0EF59CD9DBF1D28E0E10F799A6F78CAD1D45B9DB3D7DEE4A7059ABE99182714983B9C9D44D7F5643596D4F3 -MD = A4679A4CBEE6292203BAFBA8913245F30E046ABA6C0937B407C00B73D17D8D696690EE25BA1B39DEB3DB93525A8FBCFD88173BA9C7A65B4406D0550BA9B6CC07 - -Len = 1697 -Msg = 1BAC2D5646DE9AD40B20EB6C7B8EB53354B90BA0743658B3EE64F6B12F472CA0D3AA9F75A1E2AB1B08A6BCE8EBFAE3FB921B559C04D55BF8145735DE94A4F6EB5A4A82FF38D19E1BD5C8E84F1A4E0307C50DEDCEE7B493C7E0B7688AD9795BF2FEE617DF7EACE1BAB2BBB1A4D4CF2A363FCDD0F352B6AE39257F4BD0E3941B0714E28F8B46F89F0A238EC7DBDA51B4A18BD4B10693F3533F50148D6C30C1B46DE82D2BF5260B397CBD7F169EED2910D347B19BCE6ECFD5C4382A00F31BB88AF480BAD53CA75C32D0568C14A4DB3D4D50DA70A8EB00 -MD = 25709C91EF629657AB35388A56E67632EDE449ECD4C80A4BB33393ACBCFDF39EAC5734FFA6756D894845FBA1188146CBE0F2EA3069A98291B45A3BBF09A58A95 - -Len = 1698 -Msg = 74E106832472376088777B910B6DE296F18678DEF09B672C268FB5844D9751E56CF5BFA6FA8BD1A5E1DAE84BC9A706696DFC1AD035B5F034D8A9BFC9175F3F6E351DD9625D0E46E3BD1829DB6B9E7E0E3A74A5BB5AF519946A86ED26EA21121AC7034DC6F56570EFA31C65EF26F53B21F8C1D922AE1E01AC42F5777BF7EF06C20869F60E2A8CC35E2476956C0BDE6BBEA9AB74E09881E2507560092A68582F8F2C5B050A6B06349A9F21BA72243BDC8CCE423DCCD9B3D1A83CB8108BD04EBECC4F11D6E4F66905A35C3DA1B1F430DE32338F5F0A80 -MD = 1398BD8BF6601930488D78FECDCBCB2176DFF61E1E6D1CC00EAFFFB4AD177FE8A0FB08D36C757539BE8E583B47B376111F95515A421B49F759CE7A9A88B01A1E - -Len = 1699 -Msg = EDDAC5821724B9E4F0EDDE899155DEC46B0DF63DDBE51E8911B2778BBAD4A32B09B3FAE2F40D27BB7F450F1DFEDA4A891273B02867DD680B0E0B0EEA70B79B81FA8EC0CF94E7D7CA7C1FF4CA53834760E0BD781032312DD5B609C30F37CFEF3B445250B67023C15581477ADF21F5BEA45A2CE4C94E0731832290167713A42CA5E08545E6EDE35BB9A9A58FDC4729862043EE68A51F4328B8DF73B320A436FC01C2BA93283782D506A7728A7C2D360F4922D9553BF9BC37AADCABE0134BAE04357F938621631AB25A457459BA1B7D43827A2726D720 -MD = CB96A269ACB91D43B6FEFAFBFB5AEB3EE59AFA97B3994F4AB93B217D16C4F0DD567F4E1B5A6B1315167C20814A8BB58D7B330E55D4F774444F7C67F76F301CD5 - -Len = 1700 -Msg = 34B7D9773CA69D76B7EF15AD792A7353D76355E7DEC7F922186D04CD0FE70042FBCCA5821AC45B0395A99DC69F0F828204411E740219069DF078711B208572E7238251D953003B9380E72A39F3EA0C82C56DB020C38AE3824D2C209E644328EEBF40101437F823181DE665D734070171CBD6367A09786A2CA5B75A57A18C55687AC022B82E9D36C5E473F4D3C93AD137971DBF7DF1ED505BB156EE850EA4451C6A7AD4E6B85F47275473F01C2D8BECC4EDF5EC31A0DCBB4AC3366359F6D0DDC1A89409CDC624DC227F7CEF00B91BF1333932510610 -MD = F5BAC82A6A49D3D40EE74111C40F1D963049BA789062F9B631219515E3A286874F6954F631ACD5A6A079147BB83BA85C5E51780CEA07E31C1D79F6567FC0BB85 - -Len = 1701 -Msg = 25BF5D329447C8A7414999D32A955EF80D2B7AE38E1DFDADC0E82EB94B96AD8BDF99C24E742B0503E80CF897A6E81C2B613FA2E7CFD34F1500E2B5D028DC6294CF89947F16A4AA54C1C58F9272C17E76970ABF412629BAE4E88DA49DA0AFC676DB1F9AB23F7846EC6AA9DF28DC1E2654869C663A25C4A803529002CA250CDE571029EEA4365BBD2B16E353923DE5D8F4DA452C1110C51447128E55444B8643704B668598B7B42389C5A92AE193EEC1185CF7189B987E2EC23C1499582091D8930143573B03360D420C2E4F6EF5D4A710F4C62C75A8 -MD = 37DB27BDF05F91E5030EAEC26C9934B33B2C2F4E97FB4A97AFF6B83B86912A3E847567A0788436566D2D0E3D3A64631F791B86F01ADACCB8A5F8DC6BD42C4C95 - -Len = 1702 -Msg = CE4F3CC47B14C9D6DFF5ABF17DF95B015F7CE226A4D4EF1B41AFDE76EFFDB7FAF342567D413BFBAD868C00AF20FE8F95CD7E12AEFDC6085C6AB2AFCD302C0AE10724AF383E8292E01BFC5F89E9420324989FC63817F7C967BDDBAE816AE7C7CDC27AAFE230479C1FDC33D64C98199DEC3347A6E5CD90034618A40CF87203287B9822E712B73A2AA32B5CA917BB756F1CC22D41F197354DC21368C65148A431C5E9285D9F8F2C9CB0352339BE6C46FD6D12228B2D562A648804015CDF03FBC8FE3C1B784FF8718865143BDF9883F3D2680E41C9BE64 -MD = 60384A459242E11E4AEA75C25CFA80E62007729D3F83F0FC2098B1C358732BB87188C3D5A5C08783EF363799DD6615771149570211E80C8CC22182ADC254B620 - -Len = 1703 -Msg = D2D80B91FC1C69E71F6BD25E1FE274A83FAB06249F909780059C3778EFA9DDFF75D5AF3A52DDDC219A6F0E8AA796E9D65103D90CFEB032EDB567FE9ECA7E86B0D66D1D2F550F07C7364D323564C8F3C41124EF4FEF8981CF611BFAD99DEDDE8E64E5E6BF8D9872D41E03459DE9CA7EC4772E08A6469ED35ACD59FF428537721C07AAB8FB005E6F2B3E5F01E7349B3F20E79D7454A2DE51505FDA1698B5E54647313F2E839E7954B6ABBD32762BF9C57162561EA101650AE81AFD766C7AF1A7EF0A814D6032C59220CBE449765A4D34D59BD104EDB4 -MD = FCD605B94EF22C2C7C255C287E5F88CDA7B9CEE2063EC3BEB98B2B1D16571EF2DC4B6C8F8D931E597D9774079DA1424322FB7FB21635DD6FBD67C28956C3121F - -Len = 1704 -Msg = 3434EC31B10FAFDBFEEC0DD6BD94E80F7BA9DCA19EF075F7EB017512AF66D6A4BCF7D16BA0819A1892A6372F9B35BCC7CA8155EE19E8428BC22D214856ED5FA9374C3C09BDE169602CC219679F65A1566FC7316F4CC3B631A18FB4449FA6AFA16A3DB2BC4212EFF539C67CF184680826535589C7111D73BFFCE431B4C40492E763D9279560AAA38EB2DC14A212D723F994A1FE656FF4DD14551CE4E7C621B2AA5604A10001B2878A897A28A08095C325E10A26D2FB1A75BFD64C250309BB55A44F23BBAC0D5516A1C687D3B41EF2FBBF9CC56D4739 -MD = 5F49D6594DA939987D1906294B33A037F63C79E078531DFA7E6CE67279D4D5DBEB650FF8690F23B63B7E9C48EA8791B80FDB34EF66DCF0CEFE45842ECFF4AD1D - -Len = 1705 -Msg = 231AFF791AAC840DED19CF4D259A955CA2993A8E60727B451552E83F26A56506E6E635F43242946B2B1629E687A3162EE47AB6A32F7EDDF3BABE0D9E9F253842E81E092DAA9229FE770AA9E4189820DAFE92406F30874202461D10204A208AB90D5EB3582B636DE48D2DEBC543CA2023C0D12FC14F34E2F62112F9CD0B6295E2C1D37408018B424A79C319A048899A3EED77F8CDACE914037716C23E73E3C79B6D7BAD4F1EA0C19A60B0B7FA3C07D90A18B5FC9C0A6A8FB7CE62800871053E4EB1AEE0F3BB1928E9598CAC63BA44B5B54772E4DA8200 -MD = 840C029A5225D7C5CD8058A7232836FB9B8078D39995852149196756C826C0ED25C9E4306A636A65B310BA7D34A82C57B242988F702916362B56D161DB348DDA - -Len = 1706 -Msg = 7AB9912186325DC1DF33C032BB1475A10B90AB8C15B2D26DCB2A178903178C31F6BC88B3BAB84AA16434E9302FACC0C463C99375BF2A05EE35D53FAF0E4BE126FF670F2A1783FE23B31D22BA224AA4E12F4B1068D1D837F1B0077A186C73F96D846345FFBBFCE48A21A6C51F0788FE52E4938B59F2EB1FBD0705DEB88C893151B61FE17E2EC29BAEA4889C14236ED992C5434358C0E3C3296A6315473DC8DB49754B68DFA97B2DB837E155DA5FF5E4241DFBEA2857F4A08865C9A8B6DC958906DDA95347E1E59BC1308F5B2FA0BC8BD8969465C28440 -MD = 69DDCA675BF950B63B567DF6A3B95A553E4925925322E133BE57A94554C7C47FBCD4C09FF5B9C23F941E36C54803E2911AB2E133ACEBA71620387A91D06111EA - -Len = 1707 -Msg = FB8C83012A74DE84888E3D41279319F93332F920493A71B81C6F217C699EBE842251DDB02625F3B5295A2EEE825F4B9087F42334847EE290CDC6B7B8B28E67ADB5EF6E4CCB455BF73876797DF7C39880BAFDE4B9E461770B0CF118C66703519DD42B6C488EBBF0135E22C35E31491C595ACC3DC8DC4C71E4B028E88F9552D2A9E3CD98F27C0D755212B04D35046ED8FA4F1F5E8534B6447615C78A823A9E7B4546FBBF4E29B51DB3C2A1ABB391A5F6F35CD424106ACB645590D20DF58FE8D564BE7496313216DB51BD3DEFC50840455CA48E7FED3BC0 -MD = D72115B4D192889711088828FED290DCE490AB5FE971F7E09A17C697EFC2F4DFC3808723EB53A0C9C23AC13FDD2387A1212EDD4766E10977CF799E97A4632031 - -Len = 1708 -Msg = 18BD2C8E4D1220A39AC90CDF0295F8A8BA1BCF49177752713A3C808AEF218F12C4F0FFC030572704FE1871ABC2588FCA54566DEDE0EDDD608CE7058F0CD6D63DA5060EFED342AAFB642FE01E377EBD9D6BEE63507E702D270773B4E10FA4C066D25E4AB5BF16FF4FF4407D6E5451C23548FA4FC0266EB5381A472376756ACA6A94AA02943B2DB286EAC1311C4A354D236A3924AFEFC1C82D2B2C1BFF7B10E25485006346B6E95ADAD69AD172BEAA1184E00E89870FCF53C23C2071B0529A9D09BC9CFE182A869EB793E2261FB0B667D52156F3628C50 -MD = A95EC1FEC2D9BF3DED68B612890C7691BADFB776C5C756C7ABE9A93F81096E8B120BBE741E1171C36D27F7726B2D511866C94629884A6371B863DDD7C1A334F2 - -Len = 1709 -Msg = 347D043DA6E918EAB702D86EAB0CF7960C0ECDE65988FFD03BAF9C0E020884257447C7EABE4D7FD9435E1419024400F22CC10D37B51D59BE721E7D8AC235C3E66989538A2D8DCC8738B214D1DB81D0ACE89DBE6119E8D7C81CBC510F2DEC5A809F5AF767C8E5ECA0EB2736563D85DC17824CAFC2F6AB039B0B49CB0F456ED52F4FB3AB4227B80B5E9F12F167097866551DC5921F04364EEEFC01C0C3BE14C03713547ADA71CA681B753B647F3DDB5C27C405C5FAA5F5A752EE27CD25957FC1134C1E442545D8B585631DD18F2F858B3CEF53F57BFEB8 -MD = 283F6B0AA9F9DC33718A44BC9AEF1A5A98864ADAF8F267B0A5606413D8531C06AC9CEC1EF7A2068C39AE6A6B636DA4D0E85E03C6786775E4E8A0427FA600C0B9 - -Len = 1710 -Msg = 465A614C0AF40580A27871CD12DA42D1EBF9B7D9D4CB71B4F8E1A25EBC99CB36BFB99B8B8247BEEC9A10FD5F278226624F8C3C861D14C533F9BB0763DD5F394318F7BB67B4C763FF9891B7366B21B623B260F26AF524929C2E07733C9B8711EDF7C682214A1E740ED16301639947CB42F049AC40BCF3AD45D498442DE1BCD0702256116D2F24E6FF42049A84843AA71F923325878C7BB7C6AED482B103D56B1140EB673BB958B9363E3F71C693C542F8536A3D859326C987C27EE95B76B7E4C855E8E758B02C8AA443E6A1D88BFB1656F4332D070128 -MD = AD4415AED7DD761A9BE091460C6102D16B314D4C2679E59DEBE0DDB17621E652EC2BC7BDF64F0FBEC3BCC39CEF162C4722DDCB22AF2B0625F7E8D2662D574382 - -Len = 1711 -Msg = 52D90524A8479E97249EF04DCBD00D0D53A500466FCC2E0CDE71ADEC409A11FD57D242103B77D9298A7D213445CA13C1B985A4149BF025AE47FA4D55C0DF836B607E9E8F9C0A1F73EAC9F67D2FAFC222D40047552FC1BF7B39BDDE7FB5B4D4E3D836AC9412BDE2E91C98DA15E2A08B33C446A2B1ABFF97960EBB426744806D712953AF4B293F1F79A1F2B5389EF77EC13FAD66ECF4DDD8F54BCFAE99032BAD76911ACD9A0BB0A4C4D787F33F364551D913BD9D6A91372CCCC9DFB652586C99F719B17586C0839C4E60654126E6CE46A3C672FFE0D528 -MD = C19587F4DC403236785C9114C4B2977F97154B1FF52B9A19AE0D1AE33773A759ED23E416589A90BC0AFE93298C26C84600878B93CCBB363FC9744FCEE929809F - -Len = 1712 -Msg = 7C7953D81C8D208FD1C97681D48F49DD003456DE60475B84070EF4847C333B74575B1FC8D2A186964485A3B8634FEAA3595AAA1A2F4595A7D6B6153563DEE31BBAC443C8A33EED6D5D956A980A68366C2527B550EE950250DFB691EACBD5D56AE14B970668BE174C89DF2FEA43AE52F13142639C884FD62A3683C0C3792F0F24AB1318BCB27E21F4737FAB62C77EA38BC8FD1CF41F7DAB64C13FEBE7152BF5BB7AB5A78F5346D43CC741CB6F72B7B8980F268B68BF62ABDFB1577A52438FE14B591498CC95F071228460C7C5D5CEB4A7BDE588E7F21C -MD = B77FB79669EA52C738E58A9EF3ED1501BBE7974478AFB5A8BED44549D6232FF8D7AA9EEEAF02F6755327951093243110D7BCFC0E51299DB793856B57A77E8420 - -Len = 1713 -Msg = 54B61F11272B78B0FDC95FC10117A54D290E051D004A8C3EC2C95773CEEE8B18DD7B97B655C6498054C0C0A5DF34A0FD040C20C46D5AECA2094D4EC1E59B7558FC27E179110D058782FF3A2F627A91B606FF35BA0C1A2355D7388D6EFDFD97147698B633D4D2843F040BE31E483D3102B8418D8A8A2EC6FBEB1DDB291E04BC18F01D0EFE92E6F72F49D9D64D9408522FCD12E3BC8B6358CC9F0952DC0783E81FD11450D20CC37C6F526FACF9BA0C04464C45772D3537F0767F685C71D3659B88953C244A5F82B01E5B0C2B106621C70DCC3179FA9BF180 -MD = 5BC01B897A74C264007260049D31460939BC908C0F18B7604F33DCA38F20C376162590BBF0883A38FC5B189B65FBFFBDBD7111FDE497180194DCC747521D7DA6 - -Len = 1714 -Msg = 1806F931E78B282F08D9B153982963BA7009198954F820F740CBDA4CCD4F74712A84968E741F67E81B0EDD71B53D016257B9021D491CAB64AF2953DF73E2720C275849356966734422670F4D385C2916E561BC89C432FA92A81EFC9FFECB2E59404066C346200514E79E46C4EE4E351DFA8BED90CAC2DEECADC4F7EE3AE381146C5C21EF3859CC9A231DEBC71E7E5DDBADFFA9E7DB7FB86B3682D7142ECCF06B8D78B50577CC03FB9EB0006BA63174871AC7CBA303B87EB9C69FFA31705AD943381338F46D3F216232411A936064DCBD4E3A0B38D82D40 -MD = 1DA68145767D69D5B23FFF982474C289CC3B94DF68CA73152A8A1CD3474AA8ED27CCB86E3F9A2093B38350B24345341B0183D54E4B5B8115CC0488EF0EDE29F2 - -Len = 1715 -Msg = 55A7A7B48849199F1BE5C9CA6252C1BBECA9E3D4B9A81A085D201191EAF2290556054C00904F2F854F7208AB29312EFD205F95D3CA4CC26ECFB02707AF4410A54031E7F7727D72A1B7B50A031D866674306511224B1057D9920177ADD762E391EDC1269F0D4FFEC5689F9C2EBD22167B708173830479C377BBA8FCA1792607273FB4214DFA3A5130963A45C96D65F0FB230AA1DB3683F9C58CED7F5555E757B1B596FB79B54A1E61D5245763DF724CED620DF2F048EC703988B3D1D307DF9CB6B1A78A344782FE6B0F9AF5F5C074AA4BE1D596512726C0 -MD = B1DE79FC685B0E435200B069E6EE3731CC57CBBDD7F72324228B2D58A5B0B177D54A7F5A84C23CB4586D5DA381AB147B044AF416D20CA7C6607F42C5981F4843 - -Len = 1716 -Msg = D85126F4772B9166A15AE05551B00F3F0924D1F0EC65E9109F164C3C337CE978AF02477FF217EE571A17DF901A158F02FD8F79D64F09CA11A15B453480E08E46F49961C6CBC4C6FDA9706E094682BC8C64F1D74BCFBED70C389397CD76BDFB52A728484297EF974C0E524682C926697B2D33AADA7E749E930AA78731164E08C2EBDFBEA1BBA1DE7739212E14DABBA84B502C3F6550EA79022B7533B270BD6168731B7F72492A3937E12047FB4DD3D261EE6DA38AE01A4110E0E1FFB8E503E0269B1CFD43D2A4C1DD8D3189E5022A2188CDA4DD60C9D400 -MD = 4FF699D5206B9E194F8BE8C24A7326944C7C9FAA4413584B26E1E0873CE07C32329998B78CA3EE52901020721BFB050CC3E16BF01328F9A335E0DF19815FB3F5 - -Len = 1717 -Msg = 74573A14637C34B05ADDD60A85BF22DC7E818D04EB94DAC9DAD5EF2891AF122599438F08CE2297109A7AB161E163D9BEE71C366270B6BE4E8F92D4E716FAA3ACE866C049F4BFEF5E5CE5F6A5DDA0C877D17FE2B179599C80B75B2485DEE6B912C5720CB63C906AB77DF480FB9AA3A8CEA11D8B2C63D88DD3AD6ADB8311197E469818200B52C4ADDD51D13D6DF3F3810AED15890A7C1F9388EC296CC79905AC65E006DB0DB3207DF7674874D733AE5A50C5348A208D115E247F023766E1D9F3DBF3769EFA1F5CF950AA6DD903CC36FCFF08321D71D7B2C0 -MD = 676F47DD4F4A444BBF289E593EE98082A6A39FFA5B1A92ED5BA294150AA8F4A110B93C76BD82DEAE123B32D72E84D784ECC01C850C0D2CC0E94D58D6BDAA2716 - -Len = 1718 -Msg = AEB43BF2C27EC6A64D5A8FF892C67B282AE35FA1436323F0480689249AC3A552EA43AD8B983A4DA901A024403EB23CC3A07EDEEF1B0F836110305CAEEE070FE0254EBB70C17342599AF6ACACEA2392ED56526FA0DD9B5513309D0D6C9D5C222370144B531DC0897B80C0FAA16C050116B74BCE3D026BDF4C2AFABDC67381BA6663C47E509012B8EB097A86E5190BD32F8F8BC1B51F3CFCDEC3FA844358671B42F7F510ACEB9F3BF3C3449B47E7F64997EDD5B6E4F5B8A2241F4F8EDE88D0BABC7C10173F5C51C27144EA745D11EF876126D487E842E57C -MD = 853034C93AF3AFB30E77308D40A143BD0B259AB157DB342817B9D107117649011BD4730F948FED67DBE287DF79CBE0A92681D92A99B793A7F5B7D98F20884263 - -Len = 1719 -Msg = 4E6558C1D4F2C474AC32B623E7088FB80820E127A90D9E9BD584F81FE3BD701F5DF85C57248FB42E538CEF05A5139D4B6741D6EC47361EC47558037F7B3606C351382A0132EB52A42FA75E16F043B16126F3A12D50C5A28CDC7EEEABBF10C081C56163DAF2AADF5ED706D568E167A843DCAC64C56AE3DFF0017CF359115F22528B98AA209EAC24734870C186998FDF32CD12DA1B8C95BB103650D51FE3766397C23C202B40D146EE82CBD25BEEFD79CDF94B6E8C90638FC23856728607FD873A683402FB46DE44E746E1FAEFDAFC805170A72AACD03620 -MD = 2DC551B126D9EB1C402BB7A6FA80BAF44A64AC9E05FC8E3F827D8F3DF2E60ACE01F939B15F5F57CE0C119C61635C4CE6ECC9D1C3B31D9186D35CAC6646B59A45 - -Len = 1720 -Msg = 7A6A4F4FDC59A1D223381AE5AF498D74B7252ECF59E389E49130C7EAEE626E7BD9897EFFD92017F4CCDE66B0440462CDEDFD352D8153E6A4C8D7A0812F701CC737B5178C2556F07111200EB627DBC299CAA792DFA58F35935299FA3A3519E9B03166DFFA159103FFA35E8577F7C0A86C6B46FE13DB8E2CDD9DCFBA85BDDDCCE0A7A8E155F81F712D8E9FE646153D3D22C811BD39F830433B2213DD46301941B59293FD0A33E2B63ADBD95239BC01315C46FDB678875B3C81E053A40F581CFBEC24A1404B1671A1B88A6D06120229518FB13A74CA0AC5AE -MD = CACA0FF43107F730A7FBE6869FBA5AF1E626C96303BE3BC95155164199C88922194511B24C48911186F647CA246427F2CE7BA747271CD8D7C5E1D127C21F1EAA - -Len = 1721 -Msg = F50014B208EB74778C5E65F27F3B7AACD008D7702D56890C769A6A62E4A9BD9C2A9B7E62653B061AF29CC45E37A4E8160B21B5EDE780F0558E1A94F1F23FFD17ECC4BB543F0E278141ECBBE2D3E7D252E22BB87CF64346661B56BC725D90B655E3B4820ED7D1E055232FDD8B08FEB0DBA125C05C42633ED8E050A5D98E4047F64BA217395F9503983626F1E6E0E5768A049E94E7207E9CF9FEA593DEEC252CCCEC7DE21E9A1BE2347A5BC3A0D878C1778112B4F94B4123053B0E1BDE994B8444B7CDF1FEDA2A28FF8E3343501B58E9ECB7AE47354BCEEA80 -MD = 03994D6D113B042C197919F607592A59B486F3DC611444D3975B31789B0062D30642F2B7F51AA6750F243C954836EFC775C9621FFBCD2D5411166F892B6F6F94 - -Len = 1722 -Msg = 63FF7ECF12ED74A2E1D9162ACDFDDAB310EF6AEF426E53B88FD29759A6B6D9B0CB28E22C67A1D294206EDE4780964E0C20E27F8221E15E2BF34A3A9F3B38E573AAEF778E6A490C4CAA18729E88395BC866DAF1B2B2D3391F59C8B9699C8E54BF0A758CF5C3A8B097D606B9A6A4B3792B27F132CEDD00E105F2B85D6307664FA39A14270DC402C308409A18695A93BAD45E071CC235CC1F84C418C91081B0554231466700D8A7FF1790C1DB9ED496AC0B38655154A3BD5C70FB9466CA20C69170C4EF3DC18323C36E5A0EFAFBFFB017944706F70D004C7240 -MD = 4C6CD0B722476FE15B7A65F5A83B504C03FFE3A64801690C09A4753115886F45B96941683FEFB4AB2B2CF1B25FECB649D74696C2AE85F1828DE72F28DD920355 - -Len = 1723 -Msg = 3D02827ABA2E9C794A33E2A1ED946BB0437BC419CE5DCA92EC886531946C96A8D261C70D5422DF0D04221CF0AA4339694C560600E757D6539518B4347D341CCC5A57613A29DD31301C0C0055F1FFC44BB15622ACC47DB80BA50EEEF8226647F7D5F3FF8EA03A968CC6870157A8CADC9924BC9388A9748F7908423B344D915BC29011ACCDF57A04F4400B1C848B493AEB1BF9839865F44BFCD4D643B2FDA2E20B883D5A2368B137EE700D3E83D8E9FD01661E869E41410E686905BFFF2983B6C5930346A8452164972F23715DC9ABC673B0D41C92A65B89E0 -MD = 84F54FAA92880D5B07F9057ABC57073E9DDE5AB4E5F70A8DF5E643754011097A728F95F8803AA58A6B7363123AFF570DAD54A60BB1A45FC2C58D86C56EDD58B5 - -Len = 1724 -Msg = D6CE68E12CD933EB93A09F6DDB922855604613B4A76CE6F5D6C58991779720C91E652C70B380960ECB409AAD5761DEE4A3DB5C288EE7C13EA16E8FC7FD6BC6C9FCE77A4B236B99314E1745AD8C2425ADC0B4D8F746D8E972FF584131A4ECB2C4038C0BC0B0FAC7BF1249CBB58215EC07769F8BB2E78267D57B978E2BA09DAA70E022C1C57005F33D76718788AC81817033AA6A0BE89EBFD3DE3E5F8E743C1068D3663EE22D206273AAE6A2358101C3423F1DC99658B7916C581A1C39EA42CDDC180E7C8B136CB633CAC407004B503C4D0623FE3107B1FA50 -MD = 344FA833608BD3FB117C9E33B2BCD042F108304FBBB62AC063604738191475CE5941CA9B44A5C96219D0CE6A606E2ABDB0EEBA3ACB17C5DB5001E8F7D0036BF0 - -Len = 1725 -Msg = D22AC23AF99096368C3C7992DE621B9DFF7A2B9EB697064E2DD184F7A4BD3DBDCB76DE8520F627BB7BF9DA2016BB04957BD202295F262DBF7B7008E10C5BB00D70D7615E7C1142C1E05BDC05EA51AE81D03414E28B0B61DD78BC8B5BCC06776F4006CB04AC5B0D417E557DB9166CACC5DF5A514C488FF47E42ABFCB87207FD5240459F2C6A723677A4DDB636EA83CC0A323D7609F0E03D800F7767E220C52D5FC828AF4FF003C7198485214F1CBD30A9757129F4FA1067F3DC896EADAF0DB3B78923D4945A90F731F5C1C1DC07666CD651D3BA6DF6E922F0 -MD = 4B2909407930FBC92177610EDFE37CB4FDB5500D8B1E3CABF0F6EEF13CD2A2481D7DD289EB58D3A2F7F98084167EE1F1039AF12BC954D4DEE57C7E91D0710C4B - -Len = 1726 -Msg = 0D7B88F3C598B66455959C84D2636CA1C834B73D7F56A97AA07755EB99C4C8BC9016102A1A6A5B45ACD2879DF56F79A1CCB54CD9B1981A3EC9B6FAFFDAA8ADBC6F5E64A3E75594E0659294FCBEC07563D40088637E8771C36BAFE082FD938ADD0904564D89B9FC697EFBA9A0161C3A46014D77901F42FE1F27721115988CBCBFDF5A93C6217E32EA88EB18FD9E7C248F5C43593F03F194E4D3EFF5B85AB474A653E5FCA0D7FD955DF0784B2823DE88A80D83AC93F634A06601D3378CE6F318F63ED5B3F478E61468C348B83697EC9CC0271A99D23B0FE8B0 -MD = D8E203902993A4E069B51E454F02464761BC2792ECCA070EF42D79980CA89F3466AE93092E23FEC4E60B83700C80D24799C1EE2BB81BD6BE97910C2CDB87A91A - -Len = 1727 -Msg = 6D058830F672327A9003386CF0E0EF22738E2027B4114991DC2C4BA6757A62BDB190E3414A4EE979F172BED470FD9D9B085F62D4D9D05621140ED834BC8FC25A8DE066846DB9DC7920B4FD201567C9B7255E41A4D724C87CB7C287FA4BE3D5DF6A1ABAB78F3C8386A33B5D9A03A26784E63999C8C7DC784F541912786E1DD524E2A9F0BB4B6EF87FB1CCA144EDE9B1576E45765589DFAAB5CDED2A025556404469E39E95C74DC5FD11A0FA7FFB21423298B5168C5CEDC34762C36BEB2A1B6BC90E691304B661C638AD7E0BBC2E7A6B3CC87443079D73D1B2 -MD = E0619488CB45DB52630690EF79D072FD894BA28975E759F03225AD748D2F5E8C1D27E0247788CC78879C288964F96029DF7C26CC9610B59A00C37796AC0888DB - -Len = 1728 -Msg = D9FAA14CEBE9B7DE551B6C0765409A33938562013B5E8E0E1E0A6418DF7399D0A6A771FB81C3CA9BD3BB8E2951B0BC792525A294EBD1083688806FE5E7F1E17FD4E3A41D00C89E8FCF4A363CAEDB1ACB558E3D562F1302B3D83BB886ED27B76033798131DAB05B4217381EAAA7BA15EC820BB5C13B516DD640EAEC5A27D05FDFCA0F35B3A5312146806B4C0275BCD0AAA3B2017F346975DB566F9B4D137F4EE10644C2A2DA66DEECA5342E236495C3C6280528BFD32E90AF4CD9BB908F34012B52B4BC56D48CC8A6B59BAB014988EABD12E1A0A1C2E170E7 -MD = E5106B2A0D49D6D1E13E3323232101CEA5DA71CAA24E70EFCAC57E0CCF156CDF4C2492B03CE0E13437018DAB76B9C989883BEA69E849F33BB937A397B84ADA6A - -Len = 1729 -Msg = B0AB1FC29576BDF5BCF22A14049DFF38A48B5CD9749C95E4733B18039606DEFD52A73B190C10B59EED4297384B928E6E60304F145F45B3BC4B72A68BCE4EB4F644CEB3E8739881EC43F36C7489AD32A207F3921034647DBA76DC0E41E1358ACD2A45B606BA8CB75472966D1E0A2AABEB880BD837F8317EC8550F326E712AED4EB4AD11CDB6F4FA597BA30954A09A1E386B7E335A45FF2110E6A365876C8BBE5C4475906D0D2400CDFE7FE4672BE6A5168748E11F73F155C3AEBDB3415BB0BDA5BC07F9C2687718B65F1C753A52D09B27F4724651BDF2D09F00 -MD = 595AC5121D3FBE0F2DEE79AEBBF79AF102546AA29D266C0D5BD98ABADA102072FEC768AB61E66657CB3620E1C7BC21E407C43B5B32741F44B09A5A8487C7A28C - -Len = 1730 -Msg = 5EBA9547DA91D476A5B6E44447652756F86ED187590326EF32D18E4D05D05678339AA640B22E029E6C22FF5CBBAF154118F219E3A8EAC24135F2732362AEA3177321EE3DCAA7A94BAA5B04E69D83F0E99E1EDC58A93D0B0BEF8F3AE7DCC0B9CF5D2557D225567FB2C768C59BA8EC70F5C05E480232A64C6ACC0C561BC13BBD28A5BD0C2CE2C23491EFEF39ACD313A777FAD4BCADF0667C6CAD1B8BD8583690FED2F6CE17C33421944A8B3CC62806369D302621C11A66BEB642526308945E5FF32C37DFE81870C3987EA69BE829C83495CCF7D929BDA8A85240 -MD = 21D0890C503EB99300BD0BDE40E2739B24BC6FCF0E344377F757F4F9BB9DA17E50DCF542BCFCEFD9BA26F39FA10B3CD1A21290ADD0A69D992B336D7C5D7272BD - -Len = 1731 -Msg = 7E2BC340635BA8777E065C7BE34A876EB20A8DF3170DAF70DEBC6CCD47C2EB126F5E3DCF692FDA19B751B3EA503199CBCE86177AFC261E0661CAED6884CA4C109DD2031CF69EC1EB24BCB73CA622DE18B43C01B1BBBF6B2A22FB4DD6D3B73BC1C2A8BB6085B7971F6909ADD9C5316184F5370889F5FEF6D27CEFC4291202A90620573B150EC3EE31262C455517FBA064AF031F74EDDFC05648AD7BE1DB52CEC623CDA6DE842676AFCA1AB318CACCC8FD137B65044C4EFA0B647CC2A0ED3D075DF0877D42116800546633A445C44F21079661EC7B46A5B80C20 -MD = 972D7D0CE609C8EEBA795C832922855F1DC321F743E0196F56077BF9FF46188C622DD25D57CEF3855DFBED1DF1E34F19BEC048B2D3C3F9CA9B8EABC5973E9FF3 - -Len = 1732 -Msg = DA35B0DA3A478D7E4929262859168B4B717F5D1FCDBC249763B5C4FF33B7781822BF98CE97DCEF54AA4AC8B42A4FFAFB5FB934F29DEF33363C561B606FED6A0EC0C2A3FC746801B87333D18CEDA22D9B519DADC6004FAE5A3320E1CA91D9225C47CEDFF521A349CEC7BC34BAAD64FED23BED387833526E22245B35DF621F5DE0DF72588B95E98A442242826F3A38F19F4648606EA28B68B3044DA72831709DCF8E65BD6D047DD81DD83FDFA262757D668FEE6FD65527B01EDD0A6D14334503225BD15CC41EB1D5D6075282913C801B43438AC6EB752A018530 -MD = 2394FCF6D00B0E77A179FBA95E4E1B43C25A00E2B5B41B5A291725C6865BDB3D34CD4C2BEAD1D73ACF35FF89AA852675F630BF69FA1BE3402F9FCB2AEDFA73BE - -Len = 1733 -Msg = 4F18D64F8FD0E7C23C75EB389D165A47BC97E57ACC4E415430C9C2A89E1A2A0EBF7B58DCEEC95CBF998D4373ABDF564272CECCAFAEA835026CB62DBCBD0CB9CB38BB21716EAEF0D4F288BA31F5269DAF12C9B50B21EE38B2A620FBD9499784B73A9CC8F6488DAC51545A680D07978A961A517181BAB99684FA2380ABEDD5090A446380995FCDAC7A9B8A45E49B3A88F7EE37DBC147521F902564BD83F7680D4E3F5A96C6BC9915E5E8A8D850B0C8F37B878623AE7EEE57D704FCF4163D4EBD2EA0D665C65F85CD049CD3C4F930C1A2B2C9F05F9F79690F2C90 -MD = 1701F84FA324D6433E81776F6DD1DDDB78CF327A09D43728CDCB51091BEC9499044A2C26FF07F3EA787E1453332A3BD429D2AA3BB64CBC19363C15C82940C2E0 - -Len = 1734 -Msg = D165744E9A601CE8B758FF58406FE6D3038A1FF50C98B9AB59D68A23A19048268775FC65142DE0080D954BA1C9ACD44203C1AEE14CF2595F3104393C0421631AF62C82CACFC9D08311523AE9D533A32E353800B73B9EF0F276F2E68846A2BC84276A1F6FED9A23D40B4B664C7922C609AC86DC2F55656CE92BC015C9BF1FA7AF4F1E42ECAA6EFE2B499DA3092D0D89D6961870D17FBA8753ADC69CD7BD3F6B194AAF4A2EC3CFD08E25491E63502921E7CC10A5587A71A9CA0F16B98196EA03C4A72BB443C80835B9A21C48586198064D12FDFFAE79726F93DC -MD = 32199E913372442058D6F946947DA32D4741BD4F50F7C609B3C10D224EAD6DCF020B36A57F0762B90889EDC0E6FBBEF2301EFA745FDEB4F5109F778E89A239CA - -Len = 1735 -Msg = 24DE7418E94F7355E13E5D931BBAA9D4D54F10343459F224C884F367C80ECAA3C80CB17BAE478FA79944AFAE0818CEBB614A7F2AFD8CCEF604A952A35351A95F0EFECF03641DD7B82B2CE046A3C6CB3AF281597A4E87F2E322863DFC1B61DC52793C6FDCD107C5AAB3B81F75ED2DA006569C7378AD3D418B9086152C58473660C61738D1C33BD74867F3F94D133E6708F34F8456CFF843C99258ADDD2B9DA18A6FDD87C9A530E2330C0BC6731AC9B8BEE51FE3CC3D81B07304002DAB6DB3A43BDF45CB19E03873682A1041ACB6423BB638DCEF04AED9F7DF1E -MD = A1A6E924523B8AB4AFA26C52FCDEB5B90EBBB90BC5A4F83EDB404A184A0D03D009A111A8260246CEA70312CE439ECCA43CC103DD3439A3C62412242687ECA8C1 - -Len = 1736 -Msg = 2D8427433D0C61F2D96CFE80CF1E932265A191365C3B61AAA3D6DCC039F6BA2AD52A6A8CC30FC10F705E6B7705105977FA496C1C708A277A124304F1FC40911E7441D1B5E77B951AAD7B01FD5DB1B377D165B05BBF898042E39660CAF8B279FE5229D1A8DB86C0999ED65E53D01CCBC4B43173CCF992B3A14586F6BA42F5FE30AFA8AE40C5DF29966F9346DA5F8B35F16A1DE3AB6DE0F477D8D8660918060E88B9B9E9CA6A4207033B87A812DBF5544D39E4882010F82B6CE005F8E8FF6FE3C3806BC2B73C2B83AFB704345629304F9F86358712E9FAE3CA3E -MD = FAEE462E4BCED12AD54D3757D644396ED9203037741661AEA32BCCADAE568C4BDC925EDA76610E964FBE3FB26B33BC0BC123DDF9B528715317CE5C92E00AC96F - -Len = 1737 -Msg = F38433CA26FAE8B01EAE24EC59EAB6FF4CE7909E1D73F3D8ED5AD663730391BC561D163FCC44CED801F7B48C4BBF0D578979BAF1E95ED5FA5506AE07DA805FC042074C3E1F6D34ECFC842B3C652746F1F2DF086494F0E0EFF56DB48AC1EC12DEA198FDDF5257EC18395C75AEFFFE8317FA9A7235EFF0C4418DA43E929B7E53DDD09607FF6F9A907F6DCE3EFE263A75183859EBB4682CCAEDE876FF9564CCBAE9817C088FF61381207A8B5276EF41645652B7C1FE9814C175C30587E2094CD44A3DF8A7EC240AFBD4ADA10AF53859CAF6EE3DDA2A79DD77CC7980 -MD = A2EF772E7EF7A35F88949950C0003EC7336D8BFE434DAEFE683D0B198790A111BBCB7A28C5991783646D1AEE1D00C97DF47B8FC7D9DE0D27996A941A6A9ECB32 - -Len = 1738 -Msg = E5D9B23AF789159A99ED98663E1543957FB105A093C2486B1ADC776581BC5AD9AD88282E0A256F0C0E0C1A60F1264A06EC528788C71AEB1A5BA87208E467E890C0E0AD964EC3FF1D8F4908F6C277A070F0EA921C69DD2CC720E2812F6FEC9565570441AFE65040D1CC591087C15CA804CA953A1BFD5410811FBC7E56BD2EB15AFEF1B7A1567E42871AF1D0E42DE6ADD8BEFA7DF866CB7D446CC5AF3677F68EBF9B9DCB95AA596097B98F8AB56F080620C10A0B28C34461BB7C948019BF650FB3E7B12E8CC7CADCD3CF78C77B6EF4953EBB28634BDFF4E11780C0 -MD = F69761B0C46E176616E73FA4A8AD356FFB7F38C2985469D3D45C8CF53943151AF1D2552D72420ED62493F2325F3624B0B3CBB6FB8885D17818389DF6BDC29D79 - -Len = 1739 -Msg = 73CB144295AB9BF193DFF255E2BE770102DC59890854039AB39DB11ED6AC6AD8797144832578C21CAFE0EC25C0383CB0EC4648DA2B23BD4203006B511AD5362D3ED4543A279DDEC3FC0E17492894FEDFD052CEFFAE126395C3E6BB0DC9AB43772E3C130534A53E5F1D4B49DA36C47A22E99422A776844028BB0AD862D20C125F56DF6722D807229D27F18DC5B95841DD42EFAC25DAD229112B63F8A7BBAEC36DF280766F9301B319F4A2FEFBF6D5A7B17F620E38959F056E2F39E721636846EE8C66D93FBEA3D0AC06D23301C8CE46182B2DC7BE3EC2EA485180 -MD = 9C948102EC965B19376E2F77DD36321E44076CF0A0163FDB3C7F8A352DE8014B46919A1CBB1F659B64599191E6D09F90233B92085F9A4954E909BD3AB63977A8 - -Len = 1740 -Msg = 1F55FD989BE2EE0BAD7FA02D95355FC64C3BE8DC25C76EFE980CAF9FDD7DEFA19B5E591240441C634DAC479CA9103E78040F490510C0C8689D8E35CEC420BA1ABD97EBBE9B7ADF882E0AC256E55CF5F38F83588D49153EF53FE2F25A612676EE764D744047476C3747B40659039EB560A2892507F05FCBA688FBD004F680BE23AEBAADC9FF61973FE6728719C5E0E2B3AF19F540FAFC295D13F55BE06C6C93F489CA5A7294A66B1EC0757BAB1CE8C6EE8595B53BB927B65F02536742EC3A1C275CDBB09C2D7A4F612AD0C5CC00FE93EFACC74A4CB0C05C8F4DB0 -MD = 1022FE15AB3D984F02214C508A8084A44BB0608DC86364FB200FAA8D263744138CF111B8E95ABAC686C0FCFA72296449EB36EE9455F6D10C8248F58395900FF3 - -Len = 1741 -Msg = 0555AFF140369CD288EF4850691D9F5DB6431DADB004BCFF7408E47A0F5DCB4965C3694FC2A6C754452AA775DDC8CECB241EDF8643757E603843F27E885CCAC475A33CD968BAD907438DC37B209681291B6CF5E794A23967398A76D9925D76DE70D7E2B9D623E4126CB95A865EB7E17C2347245528ED9976EC8048C663D50C4E05D5BB8ACA77C98E1800EAADCF0ACEF06E68852DCF102A52829CF2B187EEB7DD00083114B5B913BACA3C5A2381F0FF7A35A5D40E691035EA8D9E0A74B7E17ABE2F848313F6364883D742D82DBCFA61A113CBAEC441E9A33ECD88 -MD = F8CBF8ADAB99F7CB07CBCF503BC1A97E38A59F903CA1C04E7CF2F9214CDBCF962BE9D7925D09834AB73ED10C2E79DC0F55D102B675FA811F11423C331553FF0A - -Len = 1742 -Msg = CBA6BF1318BBEF28CD3AF3CCD6FB4CC78AD723997E6FDDA09FB98751B061315BC28B6DE6BACE893911502BC21DE0D93C20DB7DBB32013EF22A3CFA699063FBCA483FA27D0EF2F98491B04E0873C4004D419046B112A0F253F5A9EADAB2EFBB59650E0EE8EF22AB26B00F4F8DF463BD5EDAC2B1EA58313C2BDC90C9837A30BFA7970FD3306E7493E769FC9E9E1E293BEDD78A152866954927C97625A6F6779698D497116AB7CF6621D3EAE5E7DB7F3726B35B36A6AE27343FD3C980E218D8A7D9427357219FAD1907256F682A993C6C5C7601DB1171DADB584CBC -MD = 86C1D1ACAE7428C7507F20BF9A93A2E5EC28D951A12129CF00B7D198A2E14FF53D835CAB21C3F45D0754C79D3E41B2678830CDC436BE55E46EA8F739D588D150 - -Len = 1743 -Msg = CC1E708654358899B253086A1FA3E7F41E1FF10C6E145476DE2D86B27F1260B12C470EDA91FEBBBD8421A036FE200EF55D76E77DAA2506337C413BCCBDEBA791825C0EFA5397FF77AC8625DD3BED03B7295C9BDE16DF5A2751C383655987427E6DB98507E9FA1D5683DFEA692881C91A89B3CC71A4F41F13AF6C4BF70F0B8839AAE0CC27A6F49FFC16D69C06132D5E2198C41139C219B11205DCE4BFE8775C23AB8DE0F5537C4727E60D72D8D24979AB46878B626629DB4A44F7D0480A530B59678320FAA6B6D5D01F54853134FA5634560547D3307ACACC3C5C -MD = 0C63E6B6E250D5280DE69C61557AEF572B06ECEFF6C1A927D47737FD72C55A07273AA6839407599C74F2C33349D9CB85066638F03672288783DCD908EE1B9428 - -Len = 1744 -Msg = 5E19D97887FCAAC0387E22C6F803C34A3DACD2604172433F7A8A7A526CA4A2A1271ECFC5D5D7BE5AC0D85D921095350DFC65997D443C21C8094E0A3FEFD2961BCB94AED03291AE310CCDA75D8ACE4BC7D89E7D3E5D1650BDA5D668B8B50BFC8E608E184F4D3A9A2BADC4FF5F07E0C0BC8A9F2E0B2A26FD6D8C550008FAAAB75FD71AF2A424BEC9A7CD9D83FAD4C8E9319115656A8717D3B523A68FF8004258B9990ED362308461804BA3E3A7E92D8F2FFAE5C2FBA55BA5A3C27C0A2F71BD711D2FE1799C2ADB31B200035481E9EE5C4ADF2AB9C0FA50B23975CF -MD = FBE25B43E540104A3AADE897838C63511928AF5ADD4F952F1E6D4C39E70C923DF191FAA36F46B21F827D9B437996FF7206F73337CF20C6B0DB748A707455B420 - -Len = 1745 -Msg = C880C4B995AD9D758482D3640E7219DBFE62180D012C37FC7C8427298ECACBC9FA5948C3B23C1F42EB6069A8850A075F709F88CAF61645B26BDF30C6BFD8BE91800BA8F1C63E162849309CADC88CC2E319E5550569A655A4B6419F88037D8FC6A3C4A4C35A3B21CFBC60910A9AF554EDDAC3982676301BE9069B7537F93C7134A0177A3517EA00A7756D9BD9F3B7D40C5985C14D39A8C58CA8420874D21EF372288CB153606E7E5E710B340F8F29854DCE08197BD1F127B47969A2B0EA20A3115D4F7CD1B48EEF6C3F6639607969C57E47BE42D4F2024D1B34E800 -MD = 88E97AE41374B904C199BC99E4539ADA7C17A3F8963F4E67C2250CBD0357FBD235A781641A51969A83326968D5FCE674DDB3A51407A6F20309021A16657D67D0 - -Len = 1746 -Msg = 697718B0CFF69EDE70B7C49FD40EB4778AF938B2412E2086630800CCBFB27645B86C854BD95B7A0105B5C8BDD3B4E9AD76C79961A8D18F6A634F36753692E1527A4D198EA39757BF8AAD72844D3135BE711C1C693E5D181313F98FE86B8B7177467942BDB3EBBEDC08B96F384D4266A48CBDCF3CDA17E7C77A4F419C87A83950DA70D7840E7D254A174D403AE9BEB731F72A211D0211F170220318C65154432D3A0C254A96A6CB614AF61AA3B3C312D5C2B47A1E766BC109B6CB98827D6A6661F8990AB73045BCF17AE31A90AB3B8C6A6D9C0B24B287AB16969600 -MD = FAD0D2CEA4DC80DF7166908C4E8EF7A32EADA42C06E738722ECE2DCC82140100D059CE408C3C18E8CB7CA22F0D956F23F0B16467B6FB22D1823373528FC21C0C - -Len = 1747 -Msg = 5710347D5FEE482797696CA7582540372408B58898D3D97515B7794EAACD5D8D88D838F817437E172BB7DFAF8E5A996D9EC028C4D6047B09721AD2EA28D348677DF40DB9722D2DCCE46F2D786C0A4F053CAAA4E2C71459D7653262CA7B6DADDF07A1F5A2A0CB52335CFBEE50BCCF01F6714224793C3C53F117DF0C6EDB849042A03526E74BA8A42680695DEA4A09C00920F83A680F539876D526F29C48EB76E2C32D5A5A2D1B9E412A789643A98433BA4E3C33973528502E95FD8389FD8A88A0FC570DC4DFC081E6D02D7756E299C32AFA9FF94A39D7B8AAFCA160 -MD = D8C479844268CEEEDFCFF8648BECA176CBC6CAD64353F969859324727D2BD512ADD0F860A9B0BA92D3D3E67628B5575821C350F25FE3D359701BFC242F42D191 - -Len = 1748 -Msg = 9A1D42B3E5E3C43C39EFD6E3816765D650B8AA14ACEBE53FBF4061CD0D3CD880C94A1B98D2A165F8EC0A5BD803EAE346F326788A9C83971C002B5A5DAEAA84A7824E0928C86FA9218A1317433CA520A6A4632CDE0CC7EE35C764624BEEC5192D03504BCCABDFFA8D0455864AFD50ECC78F0DCDC62BA98FECA4CB62349B4CDBABDF7158046B3CF8A4201D1FE31D5A40EDB8A0F2439384D00566651682FEA8778EECC2B02781BEA796C7BA0DAD376AC869313728A420D50B074289DEE922CF8864CF32C52C070848ACD58D670863E2016BCAAFD6E44635B838CB3E10 -MD = 1C62969F9E7E878B2843906E76095E9D1DBD7B298161297325362D713890C1FFFAE30677AD785276E12E249F623B121063C9841E11E22D0BC5AEF9425877C440 - -Len = 1749 -Msg = 44CC34DBF0516E0402BBDDF524D4B5CEA882F4E5408D86796056FCE392FE5AF771681419BD0BD4527010FC33F879AA9B2B95BC4A51BD7AEC455FF38403B8C15CA1C692C896889A5D734C382DE86F581CF34BC8C51DFB522EE032FCFB0B8136A40B123D3A6AB200D18E79FF5A11818C8249B66123B3D4AA48A3017D1B3936349FD8F1F9BDA1710CF0D23B407C2367C84F8A6FEC389E1093BA70E51602FA2E35043D1AB93B9941F6A83FF14DC25A023F550F853D7A0BB16D4991678E19340D30A7C11FFF8E1F6610222233C691A68EB45133D096CD254A2ECB51B5F0 -MD = DB87817B7488C92396DDB5FACB0A9E96B4C686AC245E1E55FF0B78C8A6E4A6E254A223632E4B9EDBCE4362D01A91FE1591787747898CD49A511C818192F093DE - -Len = 1750 -Msg = D25B283D67DEF2DD143B65F00401876CB84122B5351C42590D9E23F87F3C222AAF9754B5CBB703BB4ACDFCE294BFBB03990D9D26786B603D6AF0C7AC0CC83C7DBC90FB3581EEAA4EE2326E4DD1C06ECEA4ED6D01CB941A40F6AF3441552614807B908F58A0EF5900B2705054C4B599F85D01EA04B3D2028BB9F225656BCCB4B0E8FA36FA4FF4A49AB646C271B2F579D6953C246DA236B189167F5C470439B3BFA95526BB654F724631434B1E040EA67F684A85B3B4F283E185297059603110A40404AB12D4650E662ABDA2BA870AC2C3A3D313815EAD2026A461A8 -MD = 0314A1919330125C9C084FB52054F98F7E5D561A6B24A4D0818502CEDBA20A0BAC14F50BACDA9809DBEA93F88B91F4DB3DF85FEC008FCF8EE6D45B5BEA4D4B6E - -Len = 1751 -Msg = 067E8165EFCD31852B49536B78D91461A545C83E6BA5AF83F94E9419ED8AA4BCEAB4835005DA56BA953F4273C98B311FE4EDF3CC0560DF033E696B7C353B404D0BE599294B6301F1D473F5166C91A1741062A56E8378C0E0C0F1A64794C6A178B0BB821C025DC11A597EB1E5E676F8736661E864F42F5E84D1846251CDFA03C7B2D848FEC46CD75E9FE162C08C451642C9578D6828D8BF763F3113089BBC0786BEB3466EDF013AB675B6FD49DF4A9F1E837D53C3D011628B9F206FEF1D9F0669BE2E7A7873B4A68957EE7BA8B0DFC7F6E5093EAD29B3A3049FA3D8 -MD = F37492E353B084BB2EA63880033556B2D368DECCD4979F08B4DE3478E8F756B3C19CE0F811CC53BE80D9230382E2A7B7626B33631700AEEA6B413749F3ADC6AD - -Len = 1752 -Msg = C8E976AB4638909387CE3B8D4E510C3230E5690E02C45093B1D297910ABC481E56EEA0F296F98379DFC9080AF69E73B2399D1C143BEE80AE1328162CE1BA7F6A8374679B20AACD380EB4E61382C99998704D62701AFA914F9A2705CDB065885F50D086C3EB5753700C387118BB142F3E6DA1E988DFB31AC75D7368931E45D1391A274B22F83CEB072F9BCABC0B216685BFD789F5023971024B1878A205442522F9EA7D8797A4102A3DF41703768251FD5E017C85D1200A464118AA35654E7CA39F3C375B8EF8CBE7534DBC64BC20BEFB417CF60EC92F63D9EE7397 -MD = 0A41A004573E0A983FE9C93BD57439A20C8F99B800A60D4A07117E8D9B25C0EE38BAB3CDB6FC9216B8E07F0CCDD028C418EF97B6D7E15DECDE7425497644E2E4 - -Len = 1753 -Msg = B0BB9952B8C75305D9ED7F8C402A3414F7DD1353D72E2242E7F96157811488CFDF7E2DF7005090E703CBC7D1EADB690345CB685DEFC764D7E02DB36D196C5E068D06A103BA3B2D6E3C5B6DA7CB789DB167781DA22EECFC2174E2BDFB3AD0434F557EDED255D635ECAF3C8C145EDF64554807FB42E011F25D630FE7C5F1D7B7E582C9A94D10F58C2D5385660E68BAA49D188381AA31D6A5114B08A870735F5C4356F37C9F935609A8703216243C21C1C7E23DDEBE432B1B64266A4D831E2B6F2826955F35AB376D7890AFF04DF6CBC378632EFF128A2E3AD82F494200 -MD = 78A7E7D0FC8093C943BF64229B712463BC3F220C53D7D2719B46C9F32455E1D0EA2D6AEBE75740709493DE42FC90911C5C9D2B4C80E1DD4B50AEF359D1898FB5 - -Len = 1754 -Msg = A579FA4FA6B6E09B5809B2EBD750D35A4CBAD3F28D70D808825B73D40BB3C0A749634C0FD7F86B988CCE10B6A54B9CD885C103BA8B019BB7F2D366B2E5478B5AF2AB94661C55EA6D7FB7F747ACCA8E7E34F8FA0CD7E9542B4C4D31D6BD4CF25413805DAB3C9F769D00F9F5F53D74F5B21CAAF8277965A8599E6946E59ECF286CB001CE26CCA3CA96D7F2B483E01492D90EFFE57A47FEDD201C9604FB5D870E7E2C213B298DEB828D1C6170E208A32E8E1D3376DB0033A86F2E4BC2CF2A87A7EE7065C19992FE938CCF4FF2F63C69535279774BDBE07D3161B3FED6C0 -MD = 583319221F49F893167DAB459F7F691BA1A1F3A11179A874B4ADE982F12DF4FFE1AEB7550D695F80C3A0BF68752FFCEDDA91F29D520529440631B47801CCC879 - -Len = 1755 -Msg = F8D48AF2F89262E4E53EF211B891FEF6B999EC4F60EC1D803268526F7E0E11086E3DF232F4A0C4AE9D2CDBE93A2DF937E4AC673CB0174ABA62DAB5219CFB998590E6E986762943D99A5C3B9DAAB43AD333660793017BCD7F8060F85C338A658B27DF2AC36916F9EFC6CADB099779F0DC44803AE8A66F50413FECC75E60C9BF61ED54CAC360FE635588F112DDD2C02FE05A51BFB4639DC1CC970CD5B33DCEF967DE44FECF12F2D5362BD61D7069DA2D3FD0C00BA410CF1916635B1886220CA07D64E126A00C107A7771E251E00DD176146B93A6E23FA2F60FACFD7BA0 -MD = 162D0D8BE03A1B310A5C50B117FBF0C8A3B54D8FD1DCA7DE34D8364A77AA68AFF088BAC3143ABDD7F2355633379B28169B61880EEDEF26F88FBBC77A2F8F3B94 - -Len = 1756 -Msg = 7CA20C32E491F1501148E67EA2E7CD36AA5BC7A2F24818554FB7F74A1FC7943DCBA82725C451B13C4BC9E3A1B87F759724BFA5A3D82C0DE79DB7E2E4D112CA7BF9CD7392ED7BA92E9A44CF449ABE096C87E8556A817A400F75855953BD839257372EC32772D10A75BDD2242FDE9773C7B06551DE2F3F25C32BB1C9549E4A16FA45D629D28F21868229A4D22324EE27C207B0DDBF86B6802B9094DF8929AEEF904015D4D127CE3F7966BD0B35AE01F2B29A3A8C867CA3FF0980B812EF2081B43D63EA288B3D736EC8E53093DEAD12AEB3F8C9B1F32E494FCF166D65D0 -MD = 1F9D1ED32087134B74BF26AF364AB08A3ABE9138927E96603C1FE6DCC9CB805494A48C69367D85D98144BF2BA94B620D5F8ED99393A656580207F611A3B28861 - -Len = 1757 -Msg = 3A1DB864D72DE4B6171388B5438A7D80C16B93A2C14A9592DF49A2420798FA25B969423BD3EDCD78508AA3268EE37CE5B94396570B819CFF3C8DF24FD57833CB3D0B12F615461205E9604243239968CF78B131E8F1B7DF444B91CD3B227ACA9C2E2BC288B7BCD23F9E5541FC9EC9B2C4ACB08D16BBAF409A99C5D94C6E635790E47427A967B30066826DAD10254CB6D7D59AC8E77020646B14E485EE2602B6DE382E4B7038CD5E68476CD337A77E687A8D60B3E74425E4A38F9FFC9B9F2B912863CC365D12E0AC1463786BDB7081BEE4980416CBCCE7F1A7EFC4EB20 -MD = CE4A05627CAE553E83B58F0A138B47E304AB13A7D261F451B748DD6D1DB73655BC24E7847B3A4146A08B75BFE7748877FC101D76AF18711130755B2BD9585804 - -Len = 1758 -Msg = D9346257711A20A2CE70BBEE79A7C667E787691D9B1526DCE935F897A7B08F10F913D6C1EFB6E43E16D95A2993D945D911EF001D3EF9A902A1F42D0A72763C57FAEDA2AECA9B1D4B8BED766D058E8563365F83593EDABEFB8BF7EB896DA65DD3EF461E860C55390C0016F3B9535AA7B8743D73499D5B6E4174CAEE284F2F272CBD548FC81FECBBB2B8690AE55AE0B9CE920BE03424C94A4C8A6CCF96A11B484F170F5F4C0F834196AE5125E01555A85DB2E5CC88693E7D96E30DE1569E8C1AB74375DA3A5686E57639349A629D3415F19BA17D820BEADA8A115A6FF8 -MD = E5AE36E539F2AA2B7C86BEA8D97FC51D23C565253424305F8BFC2713DF7A417FE04A315C5C46083AC3264A53ABC418E5677982135A17AD5B75691A7EF142FDA7 - -Len = 1759 -Msg = 200988CB395E9D56BD5DAAB00100EDC9D4F0BCCA0D080E16DB7A9C0CF0DC3E064CB74C37CAE7B44DC315394C5712257ABBCC89D1FD90013364EBD1A55AAF6C17AA0924697FF58F68DE9698DBE691FC85E8F3B95AEB65CBDB655C5E8DCD929E94BAC3389667A18D65DD9BC8D0EB481453964ECDCE89453260C48B57F8ED5A647987D0EF3E7E045AF257CA60DDCD05BFAC255218D74A101172AE2C4BE286F931EFE855C04F1E0B570E17B70733E2CBEF9F16D5F35242482C098873B24C4AFADE932D17FB0E2A139DCDB0BF98D4FFF5D7E83BAD7A4290CEF7B75CEDBED2 -MD = 009CD1F29747EB4C79B974FC517DEC8AD0F775645102A3E416946F78810DCE954AF294A8405B5118F59396F257FEF77178EC0F086DF05006251AF2512D7DDB05 - -Len = 1760 -Msg = 7145FA124B7429A1FC2231237A949BA7201BCC1822D3272DE005B682398196C25F7E5CC2F289FBF44415F699CB7FE6757791B1443410234AE061EDF623359E2B4E32C19BF88450432DD01CAA5EB16A1DC378F391CA5E3C4E5F356728BDDD4975DB7C890DA8BBC84CC73FF244394D0D48954978765E4A00B593F70F2CA082673A261ED88DBCEF1127728D8CD89BC2C597E9102CED6010F65FA75A14EBE467FA57CE3BD4948B6867D74A9DF5C0EC6F530CBF2EE61CE6F06BC8F2864DFF5583776B31DF8C7FFCB61428A56BF7BD37188B4A5123BBF338393AF46EDA85E6 -MD = FF081507F979F69C6743E42EE758858713B570CB48FF85EF0D728C4E1BB5456D035E498C05EA4CEBD820E134BB252AC76BA4949A4FAD76871A9972AE2FCCCEEA - -Len = 1761 -Msg = F83DFEB95ED2CE9382DC80FA8025D5C20014C597CD70382655A8B647328A656E7552FFB590BB9F4149168332ED4EDB0895FAF01B3C957610164A19B0C91FA0A8354498FAB810B835B7A6F46FBE555B2D120CBA7E86C347F3905882DE7D1897984D04CDC39121A7806EAF90419D242849F98FE519439B1EF88980C28F3481B63AA5434E05EAFA90C5A5A7BAFFE92A6B489689CF157E0587EDCFC4061F367482F4AC8D0374847BF2328F409C481A025D4998FDEA0C84F20BF6EEC3335582FFD8C5ED31EECC09216F55D559B3570E423BA35015E52A86BFDE90A7ED981D00 -MD = 5D5DCF4360490C9B6063E36410690610F64686AB0C97BDD8857721822A7B4CA296C42155867ED9EED10E67C35CE7344C082B090120FCBE23AE977E104DBDB15F - -Len = 1762 -Msg = 7C2F7C86D647031A2D9465634783954FAE406A4CFED02B9951F64687F55FF5DA2D6DEFC329E5A6CBDE17DDAFC4D6AEFE552FD66829B1D3B218CA430994C475B0A74B64B1E60F25885F0A4DFFC8F6C5FB9CCFBE6B75246764F2B3A743F911113F6CCD42B3DE0E34EC7C50DF188B2771B96E1979947F2B53E8F2AEF409BFD97E4FC569E8067465E5D2AFB99FD05C4EC5FB6C033DE47CF0C4834D135537F4B8AE0CE96B2048B25D10550585891BA9171FEE557E1C0F03D589FBD77D446D1823BBD77494A93C749AECEAC1E35C80B645D9D935F61B2DBD575D94F415EAEA40 -MD = F6EACC8B41B301164B5E0267FBB2E0D9DA8C94DB97DF746CD2FA051189A2A2A6F2711EF4C402D500D258AC0EE7B0622182EF4CEF691824118FD8B9AA41ED3E14 - -Len = 1763 -Msg = A900BC22D5490F6540345B762F5329FBB563BB48E9A443AEF9CFB0E4044E53F88832F3C660E9D057E236E9DAEB95FF496CA830231DC2A84FB5D8598E259DE4EA42D1E98DD7ACB604ACD9F758ED08DBB4A8B8CE7CA73427B77DF31B70AE9A08E2792FFF16008796E0D7C048E575E2972D71A6A07707B34CE92CCC9E1E7793D3C4BBE233A42AEDCE3F950254AE25588C65B313505A507E7819B4E8437351BEA586921D53F5C29A9FFBB16D34CF5826B33E8C620CBF5CE7F4D91AF9E04BB176FA56443D3B1F97036DA112E236304EBE8888BC4D14212FB65776A26D976DE0 -MD = 3D7305EB1B6DE8C9ACED43A199C5868ED36D799381BF121AFEA47F12D460E46B84CB4D3A5F2F200411AF74D1B80C81ED0A1804626B9E72B8EA774641A782977A - -Len = 1764 -Msg = A8B4422DDEFBF38A277C587515DD63322690FDE56E5D7EDE0BED671C862AE75EF5906F8091B8FD6FCE7B0A41DC98A09E9326AFF348B59A81D898FCB4F2204E6F3547B9F9F6B127BB66793997C93922A6E65835D33F59E094E055E84FB6334519A39F4D22B2A516268768442D56CBFFA087BB10487BA5CE886978C4141ADECFDD66392F4CE557CAB50B398A3EF252234ED711D0CCB3268B9658560B33C1E90CE47C7054B92DFA052BB941154C4C249A8EE2BC71D54884154D28ABACC62744B5D120AD291CBB93834557402CC01F9E0D80AD269485171F8577D878EF6D40 -MD = 23B69AD49F19BE68EB13D6C94F9492811C70F7D0839EA12F7CD05D5ACD864513EB9B0FE9A466743526FC6138BB566FB76068217B33336478CCC9BB4699F402A5 - -Len = 1765 -Msg = 0B8736AE4685DE67E038637B0F0E13DA2FC538406DE8B1CBD84E2B93AB3C566788B17345BF1F75AADFA74B9B57880DB3B7DCCFBF692E833FCD637C067C44BEA40A64A76C1349029FF550D0AC011904E91DCFA3569FB6BAC4862D0B1FB3DA23F88DC5EAA7491EDB68DD38A53997E3B40B2164AAA7D77E8ADEE5C48DDC40B4DDC99D95E810D9CA48E42169AF572174EBE5FF0FEC604C0914F695CAF83BA0F4307460D91623B107C110E847E6834324DB0E5A49A948594A0BA3557003A3E44B41262F6EECB7EA29EA272DF0D1F32FA2EAD1A03305639C8D4552E1A06D5520 -MD = F7EFBA706DA7E9B1A7278E209A22E3AFCC7DB97AB1C46B7E375AAF5CBD7E6C7D42390A49C7665FFC2E0CE33BEDBABB3841160A4FB27E914F7D5343EF4A9910E0 - -Len = 1766 -Msg = 8472162B8C5D55A99F235168982A178A2F46BB53CE1FEC5E3FB51F62C11C2D7EB770F5BAE3B1D66B10789D28B5249209608D28BFC5D0092237411676DB9ECBF8109BD8AC577127481260BE41B5772EEC7AB7714FF05EFD0D9FD6A1318AFBA473982563E50B2A9B788DA93C434BE4A9286A2B6DECDE6B07AB4EF170CE5E49835CB67A9684B9BEBABC9FD3E91DDD6E36F7D712398C5DCCE633310F7853176926D687D2C0CEE030797C2A78625D92E85AA2F6EABD22142C2445617E54CC30ED9E3364C69EF8B5C8409F350ED954323BDAAE9001369DCE3861A4996D3D0D18 -MD = 3A6D7D23E9D2C85CA34010F30D111B171472277A42872A169B85A4004E11F34607FB9FFC68F46085B803CB57F180839749C015290CADE98A7ADF6B652918A49B - -Len = 1767 -Msg = FBD1BAAB1A2164DE65B47C947571C963E46500CFE29C6E2D3C654EA66600F2540FACFD02C2E12E8207CB2A18830C2CBF1CE4E2187D5A1FFD830CB3AC60B8F1C108F632A232E92132F673264983F1682A89807774371DCAD3881F6DD21D00CECC9298285AF4393FE9870603C7E85478AE4C482E27164909B99FABBA5EC6E6C9674A16D0F4CF3D398BA2E94A0713BB15C10004554C88CBBDCC957ADE527C8AB091A23AB05320CC0EC3DD8AC7F88FAFF3C4F9F20B2A1875A50FBB7981469936BD59CCDCECFC3024B8295E120E1C5B9004F23EA1556A860709908955AB51A2 -MD = 8AAED929D4A4986239660A90A61DEB2E158C6D38A4EF1DA6B1AA313038B9A109CDCE02AF478D88BC4827C686AEDC37417B2DA577EBCE1965434495AA29236899 - -Len = 1768 -Msg = 7FDFADCC9D29BAD23AE038C6C65CDA1AEF757221B8872ED3D75FF8DF7DA0627D266E224E812C39F7983E4558BFD0A1F2BEF3FEB56BA09120EF762917B9C093867948547AEE98600D10D87B20106878A8D22C64378BF634F7F75900C03986B077B0BF8B740A82447B61B99FEE5376C5EB6680EC9E3088F0BDD0C56883413D60C1357D3C811950E5890E7600103C916341B80C743C6A852B7B4FB60C3BA21F3BC15B8382437A68454779CF3CD7F9F90CCC8EF28D0B706535B1E4108EB5627BB45D719CB046839AEE311CA1ABDC8319E050D67972CB35A6B1601B25DBF487 -MD = 03444AE8319EBD121E7707B9CDFD1FDFD52F3D6B3D4BCB2748AF421A3C8666C22D8C0D8A096767B1CD16A8D54738C5F67A6F9D48C90827BE71691A42BE87108B - -Len = 1769 -Msg = 362A8F973645373B80C928F334FF23B7EE402C2464CE49A86EEC3BB5275BBA3793BFDE3B7981139E0C208F4A5E46D16C22E95FF3358072478898138DEA56910522CB6827F8A6733C8B401C65F1389ED4E06FCD5978348C33FC29BBA2858CA06116753F1DEBADDC89DA4F68E6A8510459BE5C5576EFCDACC4F0FE545BE377620F75C507E2D4F32098B30BBDA06D69919C9E313C1D402462A4AFCAC637F23B52D247D6BBAA483D3B350CF006169FA9D7A9E94C1B103AEE8F93ECAA91EE0EB8224B1CEB5F87B4C715DCB5BA9F534F09B8231E4C5F2C5D54922515799A83B600 -MD = 492B28E146BE6A60E6CF123CD333AB7AE268CEB877BE4049A1AAB6690CFE34E254B85983D4E19F7FEAB89CC0FBE2824854476F204D7539DAFE64AC01083A724A - -Len = 1770 -Msg = 1CC22077B4338E60F383F43C1F64D73C8877BF0879F4EF0E1EF4355AA96F40CD5FA9FCD75CA20E7C52C072F6FF3C0E5132EC69C5339BD30CC2F0D6779DBB576C24BD4C54D64A745280A9FB83FBEE787713DE725475D697B2172D87A194E1EEA61014222C518A23F4D67C604C9742B0EFA8F82BDE5C2066540E8593CB8D3AE8CA62844E9E80CBBC01A70919E7551E4ABF9789DAB9A3C3F76412F72B0AAEF0EB78BD18D00817DF1278F19DFE9E4FDA40C73B029CA06EB9F7B6ECEE3CEBD92D51429976A8F93B75993503B4764599A1153598FFD267E102AFE4EA304B246B80 -MD = D60966F7E83D3BB8FAB4B90859489581F8AF1539DF476F01FD5148ED1A0B5E4228CBEBBBDF9D5C9F807511C222277154DD5EFA5C95C3E3325DE8E3F88FE16BC9 - -Len = 1771 -Msg = ED975907D6BB37C0DCABDAB298C7E9E174C9BE1EF386D1EB2ECB82FE0364DF8503E3568BCE47AE0873AED18F0B8CEDAFCBA27E2ED0892EBB31F49E26139A61C0FCEA7257F8D919622DD325F0908D27D7A80BE461B2129E462B8F84EFE42331DC2CC4C8E5AFBF339D5D1C0A087E444D6E432FEA224051ED58B4BCD839C41FAD6DDDBCDC3EF3B9DD65A91ADE9619C5BF90469C4D29AD631B9C3F7675BE22D4D1369384F34094C9EBB255C4FD19117278A727AEE9BE8A37991D1EF430952274446DFC2299497B4A32A18594C1BAA6E993906049B0DC9B70DF34F71C5F7CAB40 -MD = A1FD76345B98FE681DAE22CF10B8D995B6913FDA71199A07A75CFF8C0357A50240172618085B6E484388FF797DA7DCBA5C088189440E1869C51643902C93C01D - -Len = 1772 -Msg = E5C0FBEB6B9B24FC8D6AED56E9B813E0B335159619E32279D68CC1A60A32A905EE810F31D79C65F557BA5349E2076F5E86D3D0967BC67A1FF4D67E86643E79267B0547CA98C484D781F621545EC35830FB4710D87FA5ED6F6B0C7C3ACE434D71F6B00EAA423C37F2841DEFB2F3B76387ED86B94A7780A1E67458A5362B281A19EAE50BFAE97C9B116AF64E93086500978BAAC32C989DBE68D2BAE2EC86048A56DB8EF1C42C7B73EFA712E73CEFD9711F22573C00F03BBCF43CD46A8F08015A6450B68BD234482B8AD1F87C28F3629414740615D6A631ECF5AF486662C6B0 -MD = 577E567242090ACD5FFB0DA879D7D285D6D0EAC789EB5A807C9CDCDB9B41AA7F1D21E6AE7297621E6001B3A20CFBF42173F9CEB8748BC36E2681F26652D55876 - -Len = 1773 -Msg = FFB110826A187B8217E127508F7FCC8D047F91228778BC82D1CAC8EED4503159CDC07C9BC64BD7AB4D199B9D058DC48AC77868779458DF1B002FECF875782C9E305A682C233FF7B3428A3F23BB4A60DD32270238DE49D4973031814FF2D7EDFB88482951025A51358BAEDE5AB72968883E906B65ED277C934F802F1B372959A53E9DEA5FE96E2D17B2219A96FD02F8AB193C8B570A4D842DCA0786CE0D48A5208C2E0AD737163703CD1F8573FB910521C746E79F1EC6FEDA7503264E117D9D9F9AE784B83B8425E714EF0001F91096220644156A834F1EC08C2F1C035310 -MD = 091959D98DB93AAD7E80DA3CFCDE134DFAC5E3609BF176ED97046F824F60C661E2899C9CD0EC7DB2B5C75A6B8179B6201F46936E5453C5C82293D39B73FA68E5 - -Len = 1774 -Msg = 858FD6156E56C400E14D20C9797E5C3C77DA1FEDFD9F78A668223890E539A642C032D54BBC3DB3D0523DEC2B54484622FD1E552F3D13412D4C239072046C26B6C831B936E64C539712EE9C7913287E51E2701664E8ED5C3DA4BF399B8EF9E16DE5B8E20A07EC662AD3C85F93E87E06D1B1872EABDD98CC6DDC2261AF5EF3E1B308AAC3B1F6E5586988335A179DDF710CFD0E4404A0C737D5DFEEE0ECED5B622AC2C5C3ECB2121D56B7B2F556C79C116607577B340588485B89CBEBF2127F474EBF2C0D381450A5012963B1C94AC794D86AEC05E53420D9FBBD8E719E5974 -MD = CD58118C151E8D6D3D0664FC7ABF02E3D28211141203D3A2A6DB8F0403806FB3B69B6CDA8C03F38A7BAF431499792526E565D46363C94CF4AAAEA8FFC55616B6 - -Len = 1775 -Msg = B8A81A70EBAE566CBF2CDBACA0D32F504281A5F6199E2410009F3B0EEAE3E6F22DFDC976DCBE56DDCFF18560A5880827E13EEE8D3E8973008E7FA21FBC9BC617909648D30552923B304061FC0AC5DC4B9E9E0D6C7D6C0DFCF14A7871C88EF98D6354226F7665CDC7B26AE9D5C028BCC3394DEFFFB09C5191701EF82CD111EACBA9FF23D943A9D93879A0F4F094A4A0C3B6524F6BDA783A3A1B571FBDAA5CBC6A29616B86F0160361ABD99175FD24D79A87959B98AE7DC0C53FEDB2FC065A2D0086C4FEE596F8A047DFEC8C9A24353E60438E6868A695A66AE1D1E3425384 -MD = 13DFC4749C7B4A21EA390223249F4BE993B772A0F053B1EAB501DC1CD3E7C68D8084F0237B2A050A6986F8DDA1E7AE9E2DD23FC52FE003BEF08843CC186ED979 - -Len = 1776 -Msg = 988638219FD3095421F826F56E4F09E356296B628C3CE6930C9F2E758FD1A80C8273F2F61E4DAAE65C4F110D3E7CA0965AC7D24E34C0DC4BA2D6FF0BF5BBE93B3585F354D7543CB542A1AA54674D375077F2D360A8F4D42F3DB131C3B7AB7306267BA107659864A90C8C909460A73621D1F5D9D3FD95BEB19B23DB1CB6C0D0FBA91D36891529B8BD8263CAA1BAB56A4AFFAED44962DF096D8D5B1EB845EF31188B3E10F1AF811A13F156BEB7A288AAE593EBD1471B624AA1A7C6ADF01E2200B3D72D88A3AED3100C88231E41EFC376906F0B580DC895F080FDA5741DB1CB -MD = 5EE0A4459724037B7318815A80147C172D6C8F8874C9A0057706FB3E300FE936815F07672E6447B771DE699DFADF345C3BB5974CF019315FADD5534DFF6A079C - -Len = 1777 -Msg = 689E99F0F012A351D6D4C65C6E45F66F75133492B96CA3FBD2FAF9C7BD0A064B0272BC6FA6E06E0D6C9A40F952D3CAE3AAAE8D8E45B78B7DBC4AE55D55977B77855867A93BAF38D6C1EBB80C3FA2D64417412822C5EBB48E39C0BE2D1ECD8D7B32E9ABBCA89BFADDE5B690BE604E5D636D1E14D7CA3600D21555526D89479E0959D7476D25FEB82C9D07A51C3A7473D6DB944AC3E272DE038AEF2CED6FFC7925CBE5CB28808B0481C6B7CFA7FB98386B3E285D1C27C4CE95F043AB15D2599BC146A3213B49ABD62622E9B8F004142402BD6FDB22E12C78BD2A1F1A79867100 -MD = 6B80F3D5B96E8024EA4B9AE82691CE0B5ADB8A14B3B7550DFB758506064D4CA7D36D91E84FB106CEE4F50D1B5A62B274B183FC6B3FA7C02C32CB946BA26A98F4 - -Len = 1778 -Msg = B5EE16BAB537B6C45B4F6A4037CC7C7AECED7AB9BC6F64D5A84B0993EB079A49DB78521DA17F82B6573A1E1C17088CC249E3860A1C775DF37E3396A0DF546FF0580F7198385046F24A4449F62421397838D1839BCB0D1074FB0B130BAE7C6770D38B5349765DB7480EB42F3A644AB106DBEECE2AD154A849F65F8206DEF6CB74E8D18949CDED9DD965382829755700271DD8C2128B6FD4F73741D0EB611EC10767D8C362586DB58AB5952E8D40D739063B838DF5F26E719B777A370DD4B4598C3F0012F3907EA5445CD43EE622144B3E8A6F5E7A95288E58EA31D69F9EB200 -MD = 44C59CA89DD290C18A2503882F1E8C0EC49168390DB3A860623D418C60A70A4854C20E1DE88AD7E639E1FC237BC1724AF7A7CE95314F54F697A575C0556AFCCA - -Len = 1779 -Msg = 59E5284707E07BAC72F72F9C794598045B6CDC1B84D6868F41B9C3F56BF2B8B8066F3A4FFDE362D5F8C9165D0F4F2422DD961B510C1FF30F1522044719A7843C5E2E86462F34D011C90382294E1262BF9210EA74E6EC20A341E1A61FA695897D5FAEE35AA02879DD6E61C953DE7A948F4A6127412A905A7800BEE515957F63ADBAA6917C60DC47D2BE0B9E7D2BF5DA653B79096E266B8B0209AA5B47AA547F0009F4E3046D130D0CA7BB80FB3D08602EBC52AAF4326F9A3A090ECC10BA3E75887E899ACA9E7225591A1A9818C0F942E24296C4B92A94507F982B7806074220 -MD = 99C8CDE0A5271B58BD5C2A8B9E996F9965E0A2C0099FF4F6FF8C8B52A769B21274F9AA3EC3311F1BE0F4F3F36C75762E45588944A99B8CE08B2A6930A4764AA9 - -Len = 1780 -Msg = A826E94F52AD6F99EE16FB3C8176F742ED6128DF75F5946979DA9F3465D8EFEA205182FE62C0AED722922EFA0340AC02261E94B520A016CD0F9C5527663A4012E2A8CD1F5D5BE194693AF7B0FB56CC63BF67E98B3DC891B362FF58C0885F72945FAA606670F4FCE2D0EA0C58146FADD1AF2D722A8BE13812B875A4CA7776D548C52937CCA376B06A72260D353B39E85E64368C0185D154C91887B41CEA32CEA0F319E915F38CAEEABE01C47DF2961B28269B260E430DB9CCB8605F99D6A534B5DB5A079508E726135D73BB462EFC3AEFF8142FC389865DDF4662EB42D22D50 -MD = 9ADB18DC5EB1EB22AC4D7FA2BCA5805F5FA6FC955FAAECE54E9F581050087EFFD8BF6448466BA2AD2C6C119CD77898EAE2131754FAE3DB6A5693F5971052B8BF - -Len = 1781 -Msg = 596FC0D7AF7728C870648A62AC2A4E20924CFDFF4127378AAA6A18FBA54C9D572E7E79039D4C449458A36DDCD5AED4FD463FB207BA99841BDB8C9BCB9AE8AE75E03536BA2A808A32A8C81194C11E8365996107CDF410D2E5CFFB2EC9E2297FED09154FECC91658B9386488767E6D9501E50876EE4373A2C65C7A5573F7F04A46B05B82ACC35151A66D610278DEE87389FD1CB125FAFFB00CE75F22F39AB08D13A8428C9C59C1BFB974759542EAB24DF016C5C231CF504A2624E138F6304E0F52CC6B3F40645EA0152C085250367C889B786FD3B8B25E1D6FB01DDA18694470 -MD = 606D56331DF6ABEFFEE4D79DCFD61E53CAABE58090026E87C99F41B7DC17D90D9C2071AC1FD4EBE679EAF1144AA291432D1211369D8C9FCC60B2793B56C77C98 - -Len = 1782 -Msg = EFB3D29588D15242E8BA1350B47160927ACAA45EFC76A7F49C4A645493A0E481263CE4633E9BDB4E5F0AF7A9590ABF367EDCB427F8F4356A69856866CB677970E229D34E36796F78C75BA454217DFA3C68891588BFD38D0444C89734F58378E8748E1A641FE0912C8767CA3F2CCC9E8F4EAABFA09297A4633EDDFD420F0182BB916AE6B060A3C03D754D6AB223CA8914AAA0E357FE80A0BE4ED410C80DB9FCED2E57F46B5AB8BDA63423D8A0C03E113891EE6B5B7C0D336157DAA8AFE6A944F5A121F1944A37399B930CDF53F84E0C66A4B77A1261187686C8F7C2F16DECF8 -MD = 7136B184BA725429EBE8CB81FCFB8FA1E8035AE2CCF802DB35F730C05FC5C34E6B4493A4C0D54188B6FAD25A8C1A027B3832748698F194FFFD84E3E67316B85C - -Len = 1783 -Msg = B8E7A79771D4F282C163A1E2C72A0E9AA1B51C60BC857DA2925E30678F8AAFE7366FDA06CAE7B39F80C17136C990734EE58674AE4200F847C2AE1BAF8BE24FE7951CDB7573EF0F0173E9372C9DF3A5C0334E90636DA48C23460145D9BD486DEF39E4FA04DE9BEE953919FBCE96D9EF6C73A2D1DC5C5FE20378093A6535E6299585B8C63F2A080BF5FE5F11818824B206AA65AC4B358EB2093A6DBD656BC3D17498C56A36190F76D32FA130B203570EEC3A44AE20F76FB2514FA7B9A3104AE07F62DAA2FEF7387D46B9076A109FD2E0290D0DB3280DE6D72F0003AB3BE2C66C -MD = 31B1166092CF6AAE7396607D9A7A69C6AF1AEF9B235D7E485364410631A3E416EC395BBCE86B4D0A2E4D00E0F7B94E574B6ED8F593D6C1180B33EE7E9488DD2D - -Len = 1784 -Msg = 5AAB62756D307A669D146ABA988D9074C5A159B3DE85151A819B117CA1FF6597F6156E80FDD28C9C3176835164D37DA7DA11D94E09ADD770B68A6E081CD22CA0C004BFE7CD283BF43A588DA91F509B27A6584C474A4A2F3EE0F1F56447379240A5AB1FB77FDCA49B305F07BA86B62756FB9EFB4FC225C86845F026EA542076B91A0BC2CDD136E122C659BE259D98E5841DF4C2F60330D4D8CDEE7BF1A0A244524EECC68FF2AEF5BF0069C9E87A11C6E519DE1A4062A10C83837388F7EF58598A3846F49D499682B683C4A062B421594FAFBC1383C943BA83BDEF515EFCF10D -MD = 54085A2F9C327E5D8EE225EFF5BD2C2837E44E8057CF1691E6202050079D26851061C4DA8D88FC19237E5B658950E66866E92019D9E425E2416240A59D25A6CF - -Len = 1785 -Msg = DB5F9F96CE8C4916DAB039CB29B925B057044C126CD116712C4A91D5F0CC3CA08C1F27FCEAA7706D3F183A541210B5D0DA8FD7093CFE660C210B6BC06846FEBCBCDDB9BF68C34FF9AC1DBCF325CA6EE41552D7D28A0B200BD7509AC6147907557C3DA239F86A3A600BEAE2CB5078CAFA77D2479CFCDB13590B90B376044FA4F4C29D537CD5F537BAA1C0839EA3DA3C57120104A3F804641275F8C5940BDD4C81F18B12EAD0B37249CE33B3079622FAB25E174F9C72599B41BC536BBF9749B65B8A9A783907393C1D2BDC437E5B4DDB37E9FA1C81CBD7634AB31883878EA1DE80 -MD = 6ABB4D66EE8AF6C24597C0E9ED34BE4032EAD53A8D83DD1329DEF093235B4E40697DB43944B0635FE01CA5346BB1CC79B2E7558CDF16EC96AC628AB5F939D9DA - -Len = 1786 -Msg = 109D1D580E527C36614A4743E2F8B92E13CE86CE212F70D9E08951297EF173298806274CCE4F3AA756F2A6BFA4873322BEF2D2A0C3131B1FE1AFF81874A2A715561310A9CC7D8338DEFE44A27500B5AFDAD4300160B507A2BC58CAEEB3683B9596D822011D0B01E3C314741F3948F9148679B822A55E55CA19901D41AF8195489DE0980A4E0DD892EA9420A60BF83B1203F317C2295CE73CE9FFE9E498A3335B8AC4683E0C17E18D9F7050528469B177F5A3FB4FFA1F88E6A0FAF60C8018DADE63A2D5F0FE8B970C5589ADC8BF706D9B574190963CAC5ADB827F60DB174A7680 -MD = 9881EDCDB53A39E9C2AB8F0B840B1A2545189873E5E578F08C2F3A1C7638BC6B39104BAD7AE477B51151347E31F172965BF6163DBBF52C00A49C84444F3BF1AE - -Len = 1787 -Msg = 22EAA6EC79BCBCB54AC77F96F50B5932D35ECAFDF8F1F52F680D29C57E8F6F5C5C456F772A1D2F398CAB6E8487225126EB71AC8E306ADA353FEC4B71AFC588FEA5BFB0318AF87E319C627BBE499A67057FEFC24DAD44E525194DE82081BBACD4911E2395DED81F97A381E13E23BA1CF3F6E58B9D297BAE7B3C3CD224C00F6D030B4658D19A69B0B5965BBDBBE8F8339418E8E28C0BE9D7C7CDC71990CBED39D45D0E423F8F410C306FFAF581A1D73F0737A33334463DCD18054F899EB79A89EC7A99249F06703323BF05952826A4C0932B820FEE9481EEA07A859AACD1991A60 -MD = 0B0E49861C7DB031889F28EC5031010A2DF44EC2EC9CAA7A1A1A51ABE42B8180A44421A50BDAF36321DC91C189142D8671DC5615C89F585DB9ED974881AFF161 - -Len = 1788 -Msg = A398525B9304377B97BE57240B5E03932B0A798000EB2387BCCEC628D068B6DD5B4CA1D0FE037E325986A4669EAF2EA4888B6E6D36914AEF81B59F4B4B4C87EB452E88A38EE3FBE408594B5F9991E6A2529E80DBD2F5BC32F8C48EB5708754E8C2D7487EA8C741051DD38160041DB4D16D6E92E0C2158D854AA84832DB900790434C9C6D68C4F0D9BC53B008FAEE397A460A6D43E23AA404BF090D584104A597BBF4C5A9B5817EBD985651393EB0CE96C668045E089C2BF6F8472AD2F6BE0F9D4735428CE214CA1DA70CC4580B9D4EF42C9185DAF0BF5EBECB9EFF45B2C0A4E0 -MD = 233B720654F1C44157A0054514B27A1641219199D6EC422C71DA30C29360F91273B3CE78F0219BA8293FB7C9E59C6E616F663E62B0751E43808C298D00030A3F - -Len = 1789 -Msg = E6F462213A8E30F8E6C9D36CFA3D6DF08FFC26D96646DFEB1418C8A198FE4F2365E303671389EB7A4AABB4EE3B6C4E86C86198742F76CBFC45AC2153DDF5E672B8C1A8A753E83DFD25E1458ECEFBDB571BAB1D6C5DDD28A1B1184B27374F65C28B9E4529716A843031CCA409D9DDAF6B99FD0E2623FCB96E02D111B61CB16705C5726FEEB414AB259FF86C392E9C5F5AF40357A244EA0BBFE5E1F06510F40E8B09EE516FBAF1C5E3CC44F7755B10BE5DC9EA06F6A25E368BD1324AC64F8350D85DEF415AFF1C1148CE50EABABECF501126AF66C6FDFFB6953122C1AFDE846AB8 -MD = 97D35BC4A01A7C2D02DAAAD08AC398C6B47A52F80DD50E47AE03690D8E0E01A53ED4C871A46F88CF97608C6BEFDA80EA917A6E896802198E65B989D1050ADAF9 - -Len = 1790 -Msg = 9B7474751EC3E0BC817A13FB0D8D98AAB5DA9ED6192BBCE3B8358A6B03DE907A7DA7F45868AFDC72A8C178CF893703C9D25B2E80979664868A0D725C4A29697275D51C94E203DBBB7D84768F733CBA856888EBA76958CE9D2EB687A0FAE48353183032CDD560514D01243AB6E0D6DA65A2FDDC9561366025D4BB1CB67FCAF66B11EF599EE7CC40C4F88238B8C24D75E8D23ABF217351935C4D85877059EAF01CE68425AD8979E6C8560CEE26F0613CB0B090BE7F74C1EE2950B134486F9F11E9C911FB7F07C957D1E150C29B938D01B813FE4E99008CA1AE70761AF1D1500D10 -MD = 89849515D3C4CFE4F970E085BD1D55F35DCDEE9D1C89CAE8912226A6255FC17C84D6F5CB28A6327C6D105D214BAF669E86D70CE3370ED1834F762F5B0A7A9E67 - -Len = 1791 -Msg = 8130BEEACC213C8789815550C32C2548E750A2516FC174498BB346743379B651A3566F4116291C6C86FA0DD913E41670ED1BFFA3FD95BB8ABAE218FC16C27BF4DCA132ECBDB589E807BBE980B25373E59B3093DA9ECD4303311CD36E800E7029A953219AFBD18B7A68616EE0B372C81319F0238AA6260FD4D6044C04FC9AE7A82CEFF96D518F340928EFF34145817DB8A18E4EABD6401623318198A3B90FDA9F86D93EB14BD976F6E980331A2FD7F41AACC8ABD1559ACF38EEE6407E38EDA98420742F5FA197B577A5EA34A3D452BFA3E77F7C9CE1CA386AB7966C6CDCD0ACDA -MD = 3462538D602A96187ED980A62961AD5DC584EE86E9FF67F08324EFB58EB6730F6AF48059B2D27101CF240451AF9682BBE4B7CA15141CE1E937E4605274306A2D - -Len = 1792 -Msg = 47B8216AA0FBB5D67966F2E82C17C07AA2D6327E96FCD83E3DE7333689F3EE79994A1BF45082C4D725ED8D41205CB5BCDF5C341F77FACB1DA46A5B9B2CBC49EADF786BCD881F371A95FA17DF73F606519AEA0FF79D5A11427B98EE7F13A5C00637E2854134691059839121FEA9ABE2CD1BCBBBF27C74CAF3678E05BFB1C949897EA01F56FFA4DAFBE8644611685C617A3206C7A7036E4AC816799F693DAFE7F19F303CE4EBA09D21E03610201BFC665B72400A547A1E00FA9B7AD8D84F84B34AEF118515E74DEF11B9188BD1E1F97D9A12C30132EC2806339BDADACDA2FD8B78 -MD = 3EA49B6ABD39CDF04BCCD648FB7E1F8AE3DAE9D3E3A5EAB9CE29BE356DEFBBBEB1BB93AE40D31CC1F011DCC6C6AC85B102F2654E2DBBAC47333BCDB4758A1A28 - -Len = 1793 -Msg = 27D6EE9DBED93F4FF6F3A7BAF8B72C092329912F4A15AF0EEA52F9E322A084BBD9B406672D9BC94A4A492AA0845E9390F04330B8EC31F2EDCDD05221F4524EF7FDAEDCEE67CF2E44FA2D298431EBEC108750F1CE529319A50F8392400C722F5E53B6D53C63E16BA27A374E99715E9050FED4792682184A5F268DDB6D1625716C2CE8509F36D9AC9565D742759F658A90C1D20AC4E66BF75FAE130114D83EEAB638A4C77B3CAABC4F631B3271805ABFCCA43CE5445AF17CCF1DE7CEC30A5E3107EBED862AC949A163687E309C6F6ADCA442F707BE5957761647AEA187F10F88D080 -MD = DFAE4C6BD2FE4426230A128557FA9C949116A230072F1C116BCBC9B4546F53C764A83E01F8D93DA04E6FE2995EB36DA0A8A3EC10DC3788F950D8DEDE84A8EC38 - -Len = 1794 -Msg = C79C9FE2A1606723EC5D8337EF848D1AF1E7A1E856BF25D36464FA5FE65563A2AF9E66DB7D52BC3F2DAA1238CA2EB67AFD32349A70308751AAC7495DD1AE4683F8F47F8EB67BF0C09303763B14E7E56098B4EDAE326ACC8ECF2760071C8D5E953B1DFC4D078D2D1380F93B950D54986B586D61A908C9252ACAAC8423A5406A0DE1A0AC74B936C493D194EE413FBAFC96F3DDB4721F37BC451AE41B6DAE9A5C0A813DAC3062679B0B95388BE628E027948A99B34BFFA65B4DFBCACBF5F5B2A64BA7E0611A8302D18354E297CB3AC65740E060876440F96FACA71B655261A43E6BC0 -MD = E85929DF6391308ED200E03A98C0D14B4621B35B1CE24F4A2FAD7C42706F11459C4D8A0FFB0ED282968E78BA165601D5A5FF9E99510FD4D61DBD49CF0AEC733E - -Len = 1795 -Msg = CDEDB7F4BE61E5253A46B965A08FE346C388C0F77680B3D402EFCB1013B83CB0F72C79BBB3461890F24634FC48F4A77B4035C2B28AA75AA9EF49FF390F4C3726121A1E4FDE6E97C2D72E51ECEBB76A9750E80A3D6D58A6F3D0709E8362AD005E10D5FF33B9953D45E2AF090654BE13B1D32950931601BF84B037BFAA2694CF26FD6C8833C0AF72FD78AF0C01B301FE9D9265F9B6AD3ADBC0DB1C7C4AC3E6F48709C1B4AB8777D6B5EC9FD7D409BD31900836ADEED56CCFA3985E868C6AA7EF2B8AF854CFF7AD2692EED15DCF83C4D948C8AB7A25F79A83D761C1EEA364059B4300 -MD = 51F745733CB38D1575A3ACCD1A0DE39878B839567483F74104246446E5A2CC439A33A80E6C04FEE00FA7FD6A8960D9FF93B4CBD828E068A128133BCF30CBE4DD - -Len = 1796 -Msg = 8DDCCD9E22F2ADB324237FB5D57C093280ACD83B53DECA3B914651E8CAE649E2904DB8EB0105BD4E921975D71BD5342060765BA915CE51C0D65BFAE74B52543C32F923E86CAF8D7E2CB19D5D9E935CE33B32FD9CF2E5ADAE48BF1419FC83ADF8ED00D624B4C1001A840ABECE16CEDB785277A1AB6CB02335CD867240BCECD0C200C747E428EFBF82A49961AA30226B9ED910C4B4E8971C7D27B5E2115A7DA0C2D91E15CE6FF4FFAE854FDF4DD14AACBB0A562B03EDDE104CA3F7658A66B6D4DB8AD7428B58816DE25802EA871834AE1EE4CE9A80F5F12826438B663C279B143480 -MD = 2ED51A95BCDB43B3D61826F6F5D7E470D57F421CE623029599C1AFEB7D976F2C3FE8F985E4C4AA5B532458382BC3709E2AEF0C35953B4741D0A0EE2C11C800AF - -Len = 1797 -Msg = 48840249A35C396A5E9AB7C6CD2F0FF7EA3166BE9EFA96532F9E76E58B350595E7885C6E4C236B34FC66A14873F11EE0691DD3843BBE0F38A73638FC8BC689DC42C8A1C3951D94E538BB80FD94787FD58398A8FCA3D8BA0863CA8E6FCA51F01A3370D59A37308BD2334FB7315C74413A02F620F464C819F159C75D3E1017B7B768FFD9FF3B5A6A45C03376FC2E5E08398E23E67F80082C825A4635882D953AD6B8E34DD7236AEA73681AA53ACE2FACE0583B0CFE81C467F49F0E05F9EFEA53C826E18CFE9F4B288F1405485DC207649CAA7B93A4820F640D02C788854F49E76E48 -MD = 37A14BD3222D8655A04AD1F08BAC3ECC41D813522D8F180809B7C4D6728605457AD8C311D7F38EE4857D91E4A8A2A1FD17BE5E2EB9EF56E9761C44BBF9ACC772 - -Len = 1798 -Msg = 0F1D284ADAAE48146EBAB918BD31203EDD82ED4204FF85D7B0389784222852CACA0D54E415520A5C033711EFEB6B9CFD7FD0B8F1C605C729224357362625FE976A58DDED74D028218AA9099C24A9DB1499BDD9FB89E3A14F89DD1A602E78FF4EC2A7FEE4DFDEB35E0A71E1CA7EAA0010C8EFD92881E420A22C92D12D697D4F3A36B30E2F7C1B054A9865684F855679E9F8B8BBF58E4075085FA2FD27CB57C5A8F6A9D86F081EBA58643956E1680337BC6B7C547B05C7183A1F40D569B15B0329ED82FD59511E930EAD1262AE3A15BB284DA0C99F42615C00899B80C1D645DBC6DC -MD = A23E832407E5E8C828F87985DCA51BFB45DF44BBD6BCD8B63C9A4396D97E63A9A959935155AF940CED41F099216E340A51A2B0A98B8C1B8ACD97C61B665FCF44 - -Len = 1799 -Msg = 9C9827C405695B340C750EB7B48F70EF04742A95157782810B1E090EC8CF7F1757379ECE9877586ECBE00F25022F962F131402EB9C5FE4BDC739748D340A79A915D11F660471E9B2E833652E07CBA8B5AF1363094AA8086AEB8A46E01917B4A5DC9DFC0F5B93B7E8882FA2EA69BCA02EE516C6AC63C6121A623CD909A6043BC7CE50FD00B706D1D23736C8D9DFE34F9887CFB9E7CEC0FE45BD1FD1C21EAACBFBD3A55CEBFE2AC7D35994380277E178A77242E11CF73D2247E6CC5F2848EFB20FCB870DB1A86AB409716A7D146C10824575BBE183A2CEC05FE923E119DA578372C4 -MD = FA48B7767B7364D51E9D36EF3BFE005448AD08C2AFAE37D04AA947D17196BA4185E62AB7F2C713DFB341FBA4F537815759A739B5A8AD1290FCBE1B2CB9B1C3D0 - -Len = 1800 -Msg = 8CFF1F67FE53C098896D9136389BD8881816CCAB34862BB67A656E3D98896F3CE6FFD4DA73975809FCDF9666760D6E561C55238B205D8049C1CEDEEF374D1735DAA533147BFA960B2CCE4A4F254176BB4D1BD1E89654432B8DBE1A135C42115B394B024856A2A83DC85D6782BE4B444239567CCEC4B184D4548EAE3FF6A192F343292BA2E32A0F267F31CC26719EB85245D415FB897AC2DA433EE91A99424C9D7F1766A44171D1651001C38FC79294ACCC68CEB5665D36218454D3BA169AE058A831338C17743603F81EE173BFC0927464F9BD728DEE94C6AEAB7AAE6EE3A627E8 -MD = B3851790CA47575DBF988F82C3B501DC8390A8E8598698166167567A0332913CCC8868584DB4ACFB2C9DC0F0A6833292F4DCEDC47CF003217689BC2422B53B93 - -Len = 1801 -Msg = 93E0C330DCB438B4B2B735F7AA4753EEE8123FCBEB25223F98A17F97BAA4221C22F3538F35AF743F5A17660E8E1FEAF0E6A6D17265FD591F44C194C2454BEAE9510014FA5D96EA632A889E059DB6932D327E4BE6A616186612C5724468FD0AD4F2CD1DCFE4E8A2E512815B79D89C2E9878DCF4B5DDD41678B6FB612BE2AC2075DFB3A7B1F9A00A540BE55D6B787FA38E02E084B06967AC8A2351790E88D8632663DD28B6E4CE6BF7A6638630362203974BE186671E76B17C4372399415A2D02F50E82FF4C65C3EA3434207C61035539779E6A91677D29AFE1F87C4C0339DAB2D1880 -MD = FC0168E491CCE1A09341AB45C1F1CA57BF888B4FCD7E08306300D137B74A314BCECD075C773A5BF591F50751EBB9FD81E1D749CB5D1DC2EC41026D6A230393E2 - -Len = 1802 -Msg = 0A12DA8B95783EFC78ACF14A765CBB96FD14E7FECAA12F3634AB8FBAA1735B938474E0E5BEF5B85D02CA9AD30F8285BF6D86A5CD8E8E31044A3C93E0831E29BF76BD2122621B3015F37A0C5CCE07F5FD6B16AE6670CD1135BB9BC1ED8DE5FFD8A8E25EFAA3DA1C7CDF7CF4E00713251A7493EB3B8CA59940B4B7831BA83C3C3DAC506086D0892132636F10ADE3EAF2BDC1C81FDBBA5358CA69F5298ADDCF82D4B7657549B059B5C028385A0C6596EFD8746C83032B4F4C57F84802EE8DE0B2E5CADDBA774494F78F9F194DE1097C83E2D05277CA4B5A55BD19EDB6D9CE5A6C5044C0 -MD = A1488C3136525162083F05187AFEB0ED11104EC6DD2943D3120C9342EEDD9491007FBD77A1E37BCDCEF00F288242751ED05171CDEC1F8284AFCC63608C61618B - -Len = 1803 -Msg = C085E32E69584DAF2D6EF0103E7281FE361715A51E68183D4271C7D8D84431758F42F74FC551CC5AF6907A896D107DB614FEC36C809173B3062004F9DC6E45142AEEB962D8BCB7CBC7E710A61AF23F7CC18393F2281C8CBBB5927BD09E52F6CCBCE7CBC2AA28104294978963376DD564418CB771B78A386DCBAFFBE05C06C814A156DF02DA4F252C00C8ABB25278F87E2704563136EC829C5F92C516A236C68CCB2C4F0611454FE04E1C9A4E85C6C8C52EDE60BD578C999643DB5D929F4102E84667CCC8EEB7B8C2FF2B8F4764D31E74BF2BA36D19D0EDF438E2C814B98C5D05F7E0 -MD = 0592CBAF337A1FBBBBE89646F0BB542140133D71B3E99186FB2644FAACBA219CF6915CE4FE4217FBEC120D829B77E76FE00F36B83EC9762CFDE531A99D9E1325 - -Len = 1804 -Msg = 5EE5BE16B15FA56AD14EE25205AE1879BBB0E025963270ABC462BD7CEC673390DA462D2737ABB4D926D7A15E3C5AAC86F076E6D7F7F10C86DD2E62CC856F814394403EC7D85C5326CA8902161C005CF1280F71974F2731F42C4F03B779DAF07610C4A34F1C4EB4044B77546D991EDEA239E6A6289E2B35E53B4F59A96D18FB55A2E2299D6CE0182CA4283444819E36EED59E9FC3AD186F14D66F60ADFB1596AD7AB29C65A350FFB00C58373ADE7787428468567BCB5B3CBFE781E2A69C365FDD5FFAEA902368BF2D6CC53A1A3401BA729E94F778B031BBECDD49DD8391634BDE4B50 -MD = 14C55746382E945B1726B398227A6C42D80C4F8051C221C4D8D039E59423E41271A94F9F4F2CC52F6A5F781316D9540FEA9ED73E140DCECDB256E74E7BCBFB8A - -Len = 1805 -Msg = B173953CAF23954D0A0C59DDE1C74651A4ACB3D38148F5ACA07C2891A8086C8D5BC8B4B34C7F8BA4F63F313FDFE3C40F74EBE48BE5379B8441BE37F54A810F0809E5CB8742DA8A3BEFA52F749DD6C3296B777E4CC1D6B22810E21B72B7A00E169519627C6BDA77DC9559B87E64282C0045EA13F1FE62E53FB0BAFDAFB0B7C1A2B8105318CDC10A559C32206EA85A79CFDA54F363975B65F91DC2D42F0F02922768E9ECE2789F1FF71486F9B5D7F56104FCF5DEE191D666171222BF47F73E69904168EE565A634B970CE57032B6394BEF82E78A807805F4C39C5D64A29B7135584368 -MD = A9D4FC3EC17A22EBEF73789AC9C8CEDC952184674F817BBAB69680EB44ECF557C1A8040618953B9C24233E5C7CB1A3C4511D13F5BD5C0C6F9E9405F60506C0BA - -Len = 1806 -Msg = 30D48650BBDA8EC79A0DD891FD707160A3C5E16CBE1207330F170A5850E8364C6019325A8FF4AFC809F144C118D7012D315B3F4622268FB5F6F350BB5D0048924FBB30A5390CC5DE60F264E183B90F2D38A1E499DD8CD4B06C3C57A70A612604D2F4E937ACB4E23F02C7FCFB73CC87684ED61C70A98A2B3BBE2181FA14879A36EC965229D73DC1E2743BDD285B12A75B924130D630CC2F02D917209AF4775E01B5446FF76D12A2108621D900D7495CBDCFAA64A781A3C33A6BD61653D61BD0DEE7781796404492099CF850B74F5FE86E0C385D5C314B5FD209E8FF990FD76BDE8F18 -MD = F2D9A52823F4D09AF0DEBC726A8106D99F2A0BA212B4016AA534CA8E7845AD3A9E6B4C75212C11BE6D7A1DAD5BE7DB0A43E5261511FE2B443385701068707BAD - -Len = 1807 -Msg = 37FF7F5AC736908E07CE01969410B314A031372CB1D184FD683C2FC43A30678B2C3DDD92F040A89D5E3F1D5247DD9FAA9EFB501CFF4F40014EF6508DFC37D410AA679EA3D3D0545189408167C1CB6826F97615BC27FCBAC7DBE5547A721FB92181F037B4CBC63D4609D2001727BA88C7ED78F3B3A50E0EC4505DA4D9BBF6D3C5F854D90128C2106E8F1B4D81C33F67FF804B080EA79285904F4AA71B78F71A8B01E6E728DD55C294E86A0E1FEF0915C1AEA1523DF5B15AEC8874AEDF60CD8F2B26B746A3CAF4A9E60CED23861DD5444128187ACAD282F076C1AE01EC7883AD417BC4 -MD = A32D50586280775EE5E5265754ED8785858E4604695CEDB41C22F80E6495E444C264CF355DCC66B6DCD24DAF217912082C41B76F1C68E441BBE34AC2CDFA77C2 - -Len = 1808 -Msg = EACD07971CFF9B9939903F8C1D8CBB5D4DB1B548A85D04E037514A583604E787F32992BF2111B97AC5E8A938233552731321522AB5E8583561260B7D13EBEEF785B23A41FD8576A6DA764A8ED6D822D4957A545D5244756C18AA80E1AAD4D1F9C20D259DEE1711E2CC8FD013169FB7CC4CE38B362F8E0936AE9198B7E838DCEA4F7A5B9429BB3F6BBCF2DC92565E3676C1C5E6EB3DD2A0F86AA23EDD3D0891F197447692794B3DFA269611AD97F72B795602B4FDB198F3FD3EB41B415064256E345E8D8C51C555DC8A21904A9B0F1AD0EFFAB7786AAC2DA3B196507E9F33CA356427 -MD = A710CB26C632F289504CD0039BA6AB9B4D3524C52B286D466E2F8939F8684E3F18DCA298A2BA67EB710997B7BB10AE279438B9B4868D0ADB248F282BB440A130 - -Len = 1809 -Msg = C3166574DCF055139638158B619D5E8A424330DE6518B1B452E359EB4AA5DC5EB051FF8A778305871482BF5AF417A5B9540B9DBDBF5B67FAFABE2B3BEAC0479E236ED078A5D514BE7DFA179667451609EC25C6F89A629A2C55258164ECB8374E91E75649D3713BA757CA92C7E744D4FF66B653679F77CFB3A007467E802701DA3D2DCBAB7E3CD9132061A79F50BBA74359EEF864ACEC727A11114687C35C5605B6B8587B9A57C2C0AF5FC9BB8547A0F5E3327174048576B0D970DF5CD54CEB67569361A1F81329AF65FA370AAFDC05453FCEBC9003FF8AFD9527D4D7EE619E35D2B780 -MD = 3F0CBD8220A00B85977FFEA32F6F6FCEE326FB398F3524F2341C7B642BE8FAE6BA0B6BE3D4ABE74D517317ADCB891FE7C2F789968118EEDE29CE6709C0064C5B - -Len = 1810 -Msg = 56CF4692BCFA741A977A5B7637842054E6DE09EB578CFF84F6E5F5A8CDF06F85E535B35C6E27BEF83228133B58981752B855CB789A8CF41ED956C3C8CED7AE8BA913F41E6A930ED8801C27FD28141EDF70D76AA99DF34E0A2B585A22CC66A60679640BA012668D5B0F1F6D14E160C6490F3B609CC1D34E7A819AA5A65DAE440C97CB68B6CC803D4FDD298C0927B42DE9F3BAE2DA2C9A455E1BFD8D6A004D594318557EB28C0659C1BE67F539C79F0E915834739B3C8EE6B1F4F2B3E7E708EFA4F952210701CA055425EC7726A585233145CB881187F2A3517D0C15CC788E49B13870C0 -MD = BC7AD7B36BDC6F976177BF5EF21E7D555EF74F6C423D42310E6562AC1BD0FD2D74EC97673ABD725B1C02EDE3A93CE813A0105C7F1B6DEF69437F0EF2E96B9F60 - -Len = 1811 -Msg = 26276D9B2F77FA3C271F2751245817DBCF869BB0C43C5E64C10800A438C8B37463DA85AB4F64C267BD4E29CD36D53B27D41FD3049FB430C7BB5A975675424D277BECF1872F85A08FC6E86ECD21140876B233F5D29325B578662333DCB18B16394C5183FFA25FEB71FA74709EA089B7D70D6C9495D347288D69DE56CCBF1936F2E96F34B1895E275CA531081EB5719B8B58154A09A2F8ED0C8CED5C76BA3CFD8ECD799447706E8CF3B10F8FFB0AE3A653A6273478079815FF9DAAF2D14F0024AD43DB447B41B28C35C08B7A2405C82581000F3C317DEB6412159CFD4BDF201D0F1A13A0 -MD = D799D5F1DB64AF0AF53FD6083FCC6C0322EEE12CC82D1801E25A969572631CAF280FA1F7F256A4945F5C758545813F42BD349C0C5940A2AB285731A5B3870B05 - -Len = 1812 -Msg = B85BE89EB4D326C87509C30ACC237B17A04D9AB91C1F29949C19F300B7385A5C248AC36D3098EC7254CAF61ED0A9F0F9A6E05DF510A88D38E9BE6981746F43589AAEAEA8FA5311F57942597BD048222EF1F490D818D162092796863ADEE21E25521ACEFA7E757E02B42F4A2134E1D69929D5BEA7ED5C33798F6DB7C479B6D11D085C00A0B00F650ADF38B56FC8895739B5F7E5F475659F08F35244189622B0D9634F390FA84C5EF41162C6E330C04137F1F4EF16BBF76AAF1B99E5E3823242CFF278E8140F350E04F71571C7E94647A8446DDD6AB32FDD16D25ACCB7323FFE7D5857E0 -MD = 42F357E47D8C94C1EC8C6F45DA7982113FEDB41F754B682512F41FFD121F237FF7851EC1D3967FDEB8CA335238F6C347AA04D1EEED4473FA505DCF37E74A1171 - -Len = 1813 -Msg = FBE6F14FF1D32FAFE0BFD62E3B16724B8193F83BD3A4F8ADFD89A3FBFF74D2BC5D2933A671C1B1ACD08E1EEC94C4824F6C591259E6A7418F39B6AE225C78B0DB5B95249DDFEAE8D61B3B8D97795CCAF47A19BBC4AAB6BD563CB82854D0E0BF63A60BE398546DB66893F1DF6751F3089EA3820541001878819A7522050A6F2C9C3C75474F5FFDA0CD119CF01CA322616178B3ADEDB432D8EFFAFF881E3FB08C5FF0149CCB1573B496EFDC20B38646740A0901875A7643857CBD49CF60935608ED6E1F72CA61FE6E48CA17BB060E34DDCCA119C7F257C2F66411DC3D679558F884706F28 -MD = 2AAD7D3500587397E20E6C8B006CC2BDB3F832D44393691D6ADE96DCDD2CEDC9A6349206EEA8AE7AFC7FA2987214E1621B94E805D8EFB17B703BD98E465FE6BB - -Len = 1814 -Msg = 383D6998DF151E192BDB63C6E79DF5BAA9D7D7A55D895377CD6A0C2BA9A4325F9279AD1777E4A63BC48BCD651750FC2391BA52C35B8C3F83413608277888863668A8E3915286D6724B394C872F672C39CBBB37B9F9117DF638A828B87D97D303580A7537EC381B31F5DDE578B0D577F4BFED8D222A4FA26FFF77785A0F0C44B21939A768BD1140E642256C9A0226A355F06BA02662704EA757E6FB9DAA9338B865A0325A158A4C17FC7D9C0028745BFF71B244CD8AB1DFA55D9F979450834E2E98E95961786253B07BACEDC6E1249FD0125445607091F5CDBEEFBBBC1776D43BD7DA7C -MD = C8F96AC58FCA45CD147974851ECBFA721690A9D4BA5370E3BE38CC7DE539F6B3DA5BC681A1EFCF2964F3432FD42B05A604A3A7E94A2BEB710E5AD64D4BD491C8 - -Len = 1815 -Msg = CCFA0CB8A230E9E9FF0C09FAD375CFAC5E815A4CE1EF6FB81B6E37BB199559C09DACDFA913DE0FCDD0B3628C09A9F488C846AF0D43DB7A4D2AA79445C7E6A6FA7143B0B62299C8BE6F04F9E34E8DD30C63E782B3D27D2EE4ED1CB75468A7BA4F66B061C3DF16587E208A6F3A2F260983941271C3CA7953EB4B7F0E8E4C8BE1827C652B1DBC48CEEA4FB39F0B0FD6BFDE38E273B75E6DF8509E5093A6C9E1DF9DB370C6E6F57970D718F8B934AD02D0E27C31282D1C90E9AFBBFCE8053A862587A3092FA400F6CC70C8D2C47678B40A4BCA21A1E881895717FE6A2962A332A89B7BF2FE -MD = FECDF23D20E91593C1F898CAA0836D3F71512B3F612B3AF309CA64413DA9BBF4C03828AF25FC0B48451415BE6E52138789D9CCB5781087C3DA79E7F6F608017C - -Len = 1816 -Msg = 23AC4E9A42C6EF45C3336CE6DFC2FF7DE8884CD23DC912FEF0F7756C09D335C189F3AD3A23697ABDA851A81881A0C8CCAFC980AB2C702564C2BE15FE4C4B9F10DFB2248D0D0CB2E2887FD4598A1D4ACDA897944A2FFC580FF92719C95CF2AA42DC584674CB5A9BC5765B9D6DDF5789791D15F8DD925AA12BFFAFBCE60827B490BB7DF3DDA6F2A143C8BF96ABC903D83D59A791E2D62814A89B8080A28060568CF24A80AE61179FE84E0FFAD00388178CB6A617D37EFD54CC01970A4A41D1A8D3DDCE46EDBBA4AB7C90AD565398D376F431189CE8C1C33E132FEAE6A8CD17A61C630012 -MD = 8F677A8089052B47BE60C0BB7666E403A5DAA5E28A2B632F2E496C587F1FDCA0EE33D9E78DAA4EF575B13389748B8C24110053B0B96A082C06C3F80EBE8DE976 - -Len = 1817 -Msg = A77640D2D35F23FEF37D6F971F5AF60A63763E74ECABF3AB5393AB48793C0B8B25433B4ABF21CE1C5F22A8D2386FE9D7AB860E6331938283D2833A6D0390D29BBEEFB32C2805EDAFAB62F01B38899404A386DBA844B93EC6D70DDB3BB2543B41E3C32861769A27D020EACE26EAAB0AFE700D1771E77E71105812079E77B7454A9D9D3F449CBC4A68A0DB6E961932371B39318CADCD025B6F477B7CA85AA86FF6465669EB79647C850EB856B57E5B16AD90E5EC8C710B4C9F45BF02331A72968D86DD938091C4475CF88D31CCB41389CFEAFF34A7809B86D140B11FAC7DE185A40F88C180 -MD = 8FCB684DADA76D95F64C5F5ED30C13C151DFDBA110EB8DBDBE2E38D11E901FE1AA9CE35A88003022559A983F69818A0429A1A4DE9B7D3C148FDCABBF90D40AFC - -Len = 1818 -Msg = 53EC7B6F97B359A2263D6040F3260CA95752B7D291A962C47BB982B6774CE13ADAD766E030ED85C982F166B0AACF9BBD0F51BC0AC322FC6F65E46D591BF86CD7F152975EB03CA48F0075F0D06F1EC205B42BC0A6D25B111BC475515CB91F4D988B1FE94DD1D5721B8CEB73DE17978DA68768843D44D6B02032E9D51F1DF2CEA5FC1DFCDD0830EBFA03A145E0A794E7EAD3D2B322FDC1DD6C6F135CCA1E73DBDD42598BC0C78299C6EAE2DCD675538F96CA9643F70B094165786B98B96339DB327532B84D789CAEC650973BF105A35465B8BA69B44DC991EB66C2C29139537066FE846380 -MD = 7E07FFAF797E112AEC78C282980F5B04DA64D0DC6081A0022FC2F14EBE362FCE866F1EB7FEFBECFB9CE060B08BF3187F349C6E587263A9CBEBFA9CD6270F345D - -Len = 1819 -Msg = 9D4DF0D98116F5F8BDFBBF3FD3AE80B980EC6BB9AA27D05CCB8EBAB8D7E5792C62E5F2587703F74F51F9C94AFE7984E756A5910397827E0F3A86076E2794DA28499F301F251854A0FD444D3BF201BBB50C4761E61FFA99CD21F43DE1F6E059BDCFB7D0E216257B55EED61BF5172542D51F9AD264DCD1A89D473CA615BD6528FA5BF330E5EFF67B5C995741BBE1B3721B832003C17488FEF20FAAA29B57E27DB7B8C27792CC0A9D8BECBC0660F52EF67EE6BA3369B1B1681B84747CAA4BD730A6A1B246FBE0C14140E0A3406D55258B8F1C851B181112F21183F7450F93215790CF6BB160 -MD = 09711604F4CED58CAF27AAC95743FB27A8D163788C4EF6CD433E28EAEA0659B3759E38725F669288B00B207017930200E8D5D884E2818C5DAE1C28414C82EC1A - -Len = 1820 -Msg = F14B19040E8437EEBCCD46724A7A2461EDCBCE33184B017311FB3D5871A8D6A9FBA5B93100F28060ADE0A6D4B7CD5EA7C39E218174F1F8E237BB5D43B51F12176000EDA4D70A493B957657EEA9F742DBED3486CEF3901902BC4EF4A6BCE18A6EA2F27D7EB51D32E33E2CD928C5B1C31A5C1FCEE30BE01AC70CFAE540DE372CC176A1FAA63E354860971B595D2280387DE39FBB12E6399448121FD265FF47B5B95D84BBF871EE23080912A2C841EE86BF238D2533931BE9ED8C3B8B194D81A9C358DEF0BA28E01E3008C857DECCF0D1630789782D13A414849A292AFAEC50872A9B2767C0 -MD = 1ECAED5A51F19506D009A4F20AA0AB253698023A82D61EA1C6999C6370300D95627E3BBBFBC8183DBA573F84A7DCC3EDB4FD21A4295F5DBE62628EE148437816 - -Len = 1821 -Msg = CA663A31D8D4362E485F1359CCBD0B021EC94269F501F50FA6C4FC6B9AEA3BF94BF8AF5EF88CD81355002BC33D1938B4B3F3ABEBF6A4E0F47E63D6F41780C9A9028D6A99FC1194097A8DA3DCF8CFBE40A11B1887C88822B69815FE28E2F90D4FC09229D0015F0587656BFED67CE889F375045883D86B0341A76E2E027CFC621A67A8CAE74209FD5BBF12212902F36A9101E02AF83B82A28FA99AEBC367CD46F2B648AA34F497F5421770D62CA47C0F6127CF3C82E77CFA398DA87DF2AA9C99516745ACD0041D45C426BE97EE0757911931FD9E7E58E26EFAF438B812FF2E52E6D17F3210 -MD = DE55DD9A4362019806BE296ECEF3C2B9576A99DB53DC13F4D41B5D99A0C3A1ACE9FE984635CAFD186C4572CD1409BE36DF1C73706B4F6844213834150F447889 - -Len = 1822 -Msg = 123F3665D10C6BE2668F87C7BA72F688E549B1A41D097F75496DE8AAAFECECF890D8EF3F4D130B0F4A9E0BF46B29AF25E7F0592F7EC179CE94151800E701AEAE9DE620D625D03B12EA8ECFCB37969493708BB85E536F5E16D37F0CD06EF861945492A828F345528407F457C02B3D60D3BCB4F49AEABDEA5392FC5CC94A97E7A7B41B1893EA99BB80D22D1346279717647ECF6AE2311561E834E5D112F3540CC880E9AA0F582C64667E8CB4AD6D5C04BE1557F6A0A56E2A371456499B8D84717E0510C11AB67CDB756783775F6B9EC11F5925981BB5D4DB7E35131679E55478DE329D3A68 -MD = 583528B17403036123B02E37D80F986C679E2063668148D437E875FEE3C6DEDE2D1A8537514E5BF7503DB51DB7D0D51DD18A2573EB33BCBD342FC71A68D8B423 - -Len = 1823 -Msg = 402643679D796742D356236A01DAA1AAADA71F66D90B79C1CC220FB33312650A938A948980B6D2B5DDEA9122547BCEFBF6D165E29C8656A5A3FE55FCE33CC96AD45B98CC34D6F81B54CA7205182D623F7A86E83043C2F4B58A8D129D713D5F41A5465C9B695B2100A6369D57C34B33E2578C313EDE53ADE7C2DE3A75095D1DE9BA629E2E3B90062908E691CD94B5D240E65837CE476E137ECE7B7818579AF7FC4B1E10513BEB176A1BD253EB80C22BA8C60C1A1C5EC316EBEA8828202024A543D289DFAFC4DBF1667416D4CA5AB8D6E42D0C1E9C9B2B40751D20ED4A4FF7E2F90784EC60 -MD = A82047241FFB37708DB2E88D5B15F01879580B539A73756B6C4D3B3632B8D346E08C8C5E9D6A3D0C962D9BE69514ACC3CDFF20A3CA125E933E443C8B9A676179 - -Len = 1824 -Msg = 0172DF732282C9D488669C358E3492260CBE91C95CFBC1E3FEA6C4B0EC129B45F242ACE09F152FC6234E1BEE8AAB8CD56E8B486E1DCBA9C05407C2F95DA8D8F1C0AF78EE2ED82A3A79EC0CB0709396EE62AADB84F8A4EE8A7CCCA3C1EE84E302A09EA802204AFECF04097E67D0F8E8A9D2651126C0A598A37081E42D168B0AE8A71951C524259E4E2054E535B779679BDADE566FE55700858618E626B4A0FAF895BCCE9011504A49E05FD56127EAE3D1F8917AFB548ECADABDA1020111FEC9314C413498A360B08640549A22CB23C731ACE743252A8227A0D2689D4C6001606678DFB921 -MD = CE631E6F2C2DC5738C0FA958571773B58AF130B94824331419EE57E2691CE5F29DB3D8FE456CD1E7CDC07F6105FA1B6FD729C2B419008CCD889169C3385DB1B9 - -Len = 1825 -Msg = 26BD6C97E9E30DB3DB590A76835E02AA4BB89990A51C76F4F91B7A0B2AB6FE1C02AAA8863B4B3674F9DEA77050C6CB545AC5EAB25D1AAFC430528CCF416F1FA1A8EF34A3797E005877D37AAD7A0D849EB4A6CF080E0DF10EB2D33CAD7F5653CE49177DE297119961A3C6A9AF7557CB33BAC84441DB417B5342C2F92E8DFD1BCC93D2653BAB8870D1EDC19033E9CBFACFD107FAF39156F1B54B41F703B3168F018A81E2E1F4E99B75BC2C1E769E283F2FBA11DC253C6630375EF425D4BEEB51F572C060767C85BBE9588B296056008F095E1EA46F875CBE22C984B85B309930BEA70890E680 -MD = 8C60EB8E71AB05B872CAEFEF21C66509F5C1589940A611DE3749360BF8293FBCFBB478568EAD4C08DAA06B545EFBE1CB3FB3351CCC4F21B019349E7EC597EB4C - -Len = 1826 -Msg = 5C834FEB24D7F670BEEB8B67568DC79253100E1BD7EF2C828D6CFC22039BF49F845C25546EDB592C398CA3F81CAD9D2750573822A72D60F23234B010C5D540E0A144CC05E85AD2B78EFFB7E01A538E8CD9F9E331DB6B88664D95846C32F8022AA774793DE2C28431B798B6601B10414F1BD4F5BF2E8D8D8A1468E7258EF6E2989E76814605CA6D26C2B43E3CE73674421EB27A4401324FD7B5C64C70826F67DBA8262D53FF8D6E7EF03DF2C2CFFF2D567A31603F839BC5375476383C051912885B39D652B3306CBEC139ECBDEAA32C0F3A5D628FA121D29F3D24EDBBAF501AEB0AC6A1DC40 -MD = 199CDEECE91DBBC9DECEA2609B4317D08CC2D0E31712356CCF040F41882511AC7EF3375E72C690E7B191BA027301778C5BEE999CDF13E92FABABA71FD62FD12A - -Len = 1827 -Msg = 89DD51714894F40D6736792CE595850AB69C8031ACC48B986FF0556DDBFB26EC1A8D28087023042AF29DAD8D026FF0A6A1A281EDCD5CBF708A9A8487F706897F9EC68282C01046145B8ECE4B47D062EB69E9DF4EF9B45F9A557E035F6332D987693D4387CC4B665476BF058E9B33CD20503E1FEA00B8A302338E5EB2676A3B1B4A4A25E4168EBECE4CD5ED2B84B00656795D2089FA8F92EBA0AF2A5C705091F781D49B24577197A3025A52CC7B6D01AC1A3B28E60CE8FDD9940D46624FC8A7AE159E54124490FFAAC2B5E6D8F2F0088FA17ECA432E0F701D87A444D289403B974F68F780C0 -MD = 23632CDD87483F28A14438B3CCEE911F31A14B90B82182FBB54AD517434EF07E87DC540E37E3B84F6B5911DA9B6056172F61EB2E77A6BB665F14B1AD5567808E - -Len = 1828 -Msg = CDDD2E9A96131C7E3A1AECFA200B414908370D1406E2240F257228028F556DF1043E10DF7900063D19B239DE71926512FCA45FA43FDC2ED73C1D4B96C1D305C70ABC09296BC6B80079FB84A6E544ED27DE2BBF1B2799360264858C661F331CB5B01B355BE13AE25F0BC87178AFC650621235DA7AF715D8E4D8DBACF693CA0F8C59105E9B5F457B600BD8452F42571FE3CD658F9F3C55B652A627983A5A150BD8259316D39FB1EF768DF2C3316C249B776A912035F7BBCA1D77C1920BA72EEFCB80933359E0D785C5CBA4B40CAB791B08CDC58FCDDFD30623DC3D9B6D53C7FBAF2054C977D0 -MD = E19FF31DD39425A491A219EF7E62CDC4C77ABE5D431CEB6DDFC18CB9974839B2D7BAF5EF2E086ECE8D80C98088E38DC98CB77797CBAF9FAA6B119F9DA263792D - -Len = 1829 -Msg = 7598D75D07175436BA21F3CFC27DDA119096C793740DCAF11978B785150CEFE010CDBA27C4AFA5798F58D689E639D2B8CEECAE84EDE6599C00FCE4541A3E0F5B2B72C65EF0C576BC479325F761D8713161CCD4EA27302EA53CC4113EAFD94ADCE60CB8C4E3546538578EB28F2116B32E92961D5CD08012CB890B5EE0BD4D7DBD667B5D988E8566AFF6675F57433D40E6547D7280BDE4C5E44A4FF442C6C9AE8AA37D197B2416A6BED8422690A6D2091442E5E90F5E3EC5A7D7E89E4581189293C6CFCE1ECD667F792521752D0D785E7A767B55252F02E8A9A4342E084943A3FE1EE9366310 -MD = 21FC53AB091548DE9BA1575A357198294E8F93108207FB45C33A025307159F1FAF2EF7B0DC0F059FDEF0CC9E678F6F6994422D53EC50F1A783BCBB8FE0B69B31 - -Len = 1830 -Msg = 5663593146BD2856F9206D81F0F64E10905F69BF1DEE07B1EA4547E1644402FC338C5C92697859653A7F09456EA10A846A5B0940B547828C666521BA4339C93F6A1AD58A44E32F34B5C7E904D6778D1F529A0C5905E9D0E4385B3F08D096EDF0DFEA1EECCBB67BF8B935A8B4E182C36DC2D69F6090F1FB6D18E6883C9772452A4EA5130EB277B84782E190CF03FD4E7D88B050AD2AB22C9D31B34D6A6A202BBBFDA8F0B61C7B665D920654FDF79655CA37490A6442A69F8BB33EC128FBDF992A95FAB380E3CB8E6EEC89D41950F9F645FACA86489F5D24D2CE86E4D554685E62A7567D7A58 -MD = 12B53316A26EC12AF47562A02E0D35CDA1683CE4590FA3085FC743DE835A7FADE98B08858CCEAD0BFD1EB5C61FB32C2B3D195430FA54AF47796671B82778CF67 - -Len = 1831 -Msg = B38CE3DD3F6A1C6ADABE07481F8BC37378BFBFDE6562D5CAE1F65EC787A70FA381033C163F944FDA956DD2DE1CE94AF1B1726691B61CFB32116F2D5428BF128F3B673444D73CA3DFCC323DAE946C036A15BC1BC1799C42EB970DE6235B336B5F10AA568547E11D93E873DF1F318381327BF0993FF9302952EB86C258C461DA3DD7C649390BB0703A2EFD82F6DEC8B08C541C925EF75ACEE45BB11A4ADCB321B0463119A409CE65CB9EAE75AE8D5BFCAD3EA54BD5A960A522E740620D8A2B07E71BFA14B0003A50AE4DC73C50DA7C6F2C438AFC5E5B51E3608EEEC16B443A439D9C8FA2DB98 -MD = F750992AC3890C8C9528D643EA683E632CA036E92FD1E9996E8C4A62CB90F7A113E3C2039D640FEAD5F0852B14B81A6DDEEB0809F6788D7F07D8CBABAE739D43 - -Len = 1832 -Msg = 3875B9240CF3E0A8B59C658540F26A701CF188496E2C2174788B126FD29402D6A75453BA0635284D08835F40051A2A9683DC92AFB9383719191231170379BA6F4ADC816FECBB0F9C446B785BF520796841E58878B73C58D3EBB097CE4761FDEABE15DE2F319DFBAF1742CDEB389559C788131A6793E193856661376C81CE9568DA19AA6925B47FFD77A43C7A0E758C37D69254909FF0FBD415EF8EB937BCD49F91468B49974C07DC819ABD67395DB0E05874FF83DDDAB895344ABD0E7111B2DF9E58D76D85AD98106B36295826BE04D435615595605E4B4BB824B33C4AFEB5E7BB0D19F909 -MD = FFF677BB58909C158EA677BE704253505B106AF934F639ABFEC63BD0C63097AA4BF032FE924149DD991D335E1C44C0220E4D13CBC41B6A98FB5A05FAA3FE15B3 - -Len = 1833 -Msg = 7AAF064B8FA13BB2955744B2E18F0AD1E799850D68236B45FB62A3AA11717936FE42E5722E30397A7474D3C551A290979DDA5127E51A27B7EADC7D7A2EB563B6882DE50D3391FB17D96B74AAA1A5EFA27B1B98FEEDA557385C0CFC69EC680D0EDA5D4104658BC9835B714968208091D1DE0FE4082DB62F6C10CA62757948A83BB507B0159168A39349EEF2AEDEFC85755FDC402C6B44AD1655D8A9AA4D6EC1BF026508B41DF0527333C96ECB91C2C626A23C18C9C61CC32320009B895F6F2C363197119F41EA858B23A377A548802A6147E852B5C8AA008711AA6CB78F1C6F2EC8BA270CAE00 -MD = 385F967DF7FB6EB2B3F29DBED6CFB4BC48729AB81E1362B25D7F648ED962088B7C0BFDD611C4CAA599FBE4B7009AFCBFC01676D1563517911361C0D349EF02A3 - -Len = 1834 -Msg = ED1CC805A521D45C409965AA7A564CD5DCC0A27891008B296CEA8683BDAD85A9C35E6925AFAC9DCE2A7E33F47C5E6BF9D8EBC7ACF035BE05F38330DBA1770C58087412ECA4FC41FD0004BED47C31521F17DD592E5638272E3ADDFA237D3B497518502DD3130EFC9C9D77158228AA671B4105E07F8D6002043BC99E956F15DF49A9781C8209F68810698A6DD22DE1D5095283B0A97015F73E4707289D9C1236789E3D9E9EF6BF3B1FA5994AE21A51BB10E8DB3CA5879A7EFFD3E9FC01C81CEF0BBF332F44892E2A509E02EFA417B39B8046163CA49E4D310522AED1874184DEC4F2AFD9AEBC80 -MD = 1BB983B285909C84618FDBBE00A3FDE57E5E3DE21B55837AEAE2A3040407D269DBD15A4787FB716CF41F5BF586FB10B8C822A9D01AD5CB7BC539180408772197 - -Len = 1835 -Msg = CF68D10756BD67D4BB27D278DBD54353FD1CFD416AF8957B66982247AAFC7F95AF90D0746150994EE72CBEC0F1AB55D3295D4EB59CAA48A49A6221ED63C17A436AF243EDAA4CFC0CFC8AEDB3395514DA8F92FD4696C0251D69B622509C7DF56740C9C3B938E044FA5FC0182A3EA9CCCD3843E5ECC75227ECF305F5063338AB7B73872C288DA65E7F04D7FCBC5BC14FEEF432ED780C55D2DFCABD65E6D95C8ACA350886C6514AA33574645B8ADA868FD7DF75F81A3AC75FDE093BEE15D8C9CD01AFD8731C1FB87F12E845FEA2FCFD5AD961D46C6A7BD033380A92D158F727DE24C8D6D7A4A140 -MD = AEAE842CC10E179D398082F670EE3EFE172924D5B3E202A23884181425AADFBC9CF78DF0EC4A329C66AE66420E7F61C0AD17C3CF8EA72CE99588B6768F748660 - -Len = 1836 -Msg = 06C383F828F6D58D1F99567DC5AAB7BBB7F8B9F0DC941CEB0938C0C1367DDEA5F03CEF432C4BACFF10E314E3B66EC473EA6D238D86BFB2DC83FB744E1B63618FC0B72380942AFD0919A3CE11F9F5F781402A14A00FAFD0C79CC516E74058963411E5D3C59B8D8C87AD916737F4C216B9B28F39FEDFECAA3657C1B284CA7AC897B85CF6FE72DF44E0629EA2C61D8E4C0FC1460002D7F1131339DEDD78CB8235767B64E7417B06E13577D02A94D9350EF66A5C12553E56B7840D0569D4E5A5928050C9A738F9ADB557671848C58A504F63146B946938935C76C28264F675F462C7D76E95FFC1B0 -MD = 6435DDF9D5A6F0355840473D044DE0DC6DCF5C876B943E779B15D921EE8B636BF0339194F768ADA7EFFB77961ACA95596C0D57D4263F9354177E9250B68D0105 - -Len = 1837 -Msg = 27C482CF399044DB05B251DCF9D8A788C0CC214DCF7451EDB9D2423A13BA32B6447D17825AE67ECB70EEA8B182B14FED66D2F1179B4ED66F53C56CE0C679598C09589A4B8FC1C3E42A0091FFFD4B4C464763FFFB1ABFB7DC49337C46C097027CF3BC5B14B34E590E17A2C4059E50971DF2DE66E2E714E5834BE769371DBD56107C30BAAE1438E02AD5F825A4B690D8477311871AAF7C5B4C540C0C3B296F724668862AC9144849BDF18FEAF17DF98246B5BA88C929C940EDC42EE9116F7656F1E2B40385F9B05DAB23243014FB122967B97B8CFDC369478866E57CC8D98949DE41D8835A1148 -MD = 7E0184E0F9CD4B2C03F72295AC7DE294B903EB36A617372253E0C496056F72B4CD8036751671D7CC8E45886818354541D8B2BC7636602960CF2DFCF6A05DF725 - -Len = 1838 -Msg = 3F06A9590EBDD717DC6150AB4A4EA1904BCE033B78C8D437C013D78B6D147BCFD8557298E44E11A6E1C82986F626092F435278DF0212DAD2AEADC09CB84926C74441ABEA04E3F0095876BB4D6463A9448B775B082B5D7F0B3AF0DAEEB9786A3D404D16C2DE8DB319B34D496B5E03C30608A171FD180E7D32A0F496AD0903997183BCAA62A57FC6450098D480B7A3F8BB7329528A1D4358B2520828BB7C3DA65577406A4C241F39461C6F03D22C054A9E736F4ACBD6916B254C7145CF73347A024B418D8801236EC61C74955345F6BBA944D8C8135B594220C104C95FE85C9BD187505041176C -MD = 4E65D7591BBA89876E7E14B6DE3046CE5561D9F1880A07AC7003D4976CBBD0FCD6D8F2D421D3BD62D4E65AFC577239EC732763B6FBEB6A519EDD7C71F9413704 - -Len = 1839 -Msg = A8A9555BC035CA2CDA773CD7C01159FD6EE4CCF03C3E43C565CE85C88A842B14C765991FBB424F01B53F7157D413F5E7D3CBC0C9B084F6205E9815432C0B83B116E1714FCF9E20C07111C3C202EBE068D4D4B6B163E42D2922B9C36BD32BCC768C10489FCEFAF472D1E160FC7C5726A89F32E0632D15679972EAFCAA4C8AD48DB3C4DBC42FCA6B12B6979CB12C72F22BA5056A12AA99CECB65A3958AB8F66920818D6DB0FF34AA8BE45739BE1FE9C991819DBC896A078DB828641F5736858BDF0ABBB3CB786C49045028F8BE1C836E8E88DE775D93ED42914AF9C7AD38091A41485B155DBAF4 -MD = 07EADC4880D6480EE27824CAC264AE7111E8455533AC3530E172C1153E6943C133100BFE805BD15542BEF703EF4E8F731B55662DDAAC2FD974B3DD8AE473A7FA - -Len = 1840 -Msg = 747CC1A59FEFBA94A9C75BA866C30DC5C1CB0C0F8E9361D98484956DD5D1A40F6184AFBE3DAC9F76028D1CAECCFBF69199C6CE2B4C092A3F4D2A56FE5A33A00757F4D7DEE5DFB0524311A97AE0668A47971B95766E2F6DD48C3F57841F91F04A00AD5EA70F2D479A2620DC5CD78EAAB3A3B011719B7E78D19DDF70D9423798AF77517EBC55392FCD01FC600D8D466B9E7A7A85BF33F9CC5419E9BD874DDFD60981150DDAF8D7FEBAA4374F0872A5628D318000311E2F5655365AD4D407C20E5C04DF17A222E7DEEC79C5AB1116D8572F91CD06E1CCC7CED53736FC867FD49ECEBE6BF8082E8A -MD = 451EE587226C99989F5EC10050983B1FD661228A4AB48618F1D1173C94FAC39ECFD3C26C16653633B26097E31A0F2213B4F1153A57CB48A70D2AF1ADEB1BBC06 - -Len = 1841 -Msg = 133F3DC8F20A325DB666A5F7D9D66468C052553A9F32AD1394A2B8CB1B952872B6920B8E34EEC5A34CD64C019948CA219826CD8A5511D3458EDCCE0537E30594ED4CB6BA4253B793B9416A8634327C743D7BC81E601A09097647B3AE0A215939184AA82856FE0F8A6F03E844BC38208722756AE0AA8FEDC14D91DD46E2D367779BC302D4960E80FD8851AEB8629D6A6D10F5A85161C3CE21E83CDC91100B18B39F9CC5EC6B90B883877FEEA50A5FF5B7E2C66943102187BD71069022D7218367D10237119ADC218B261DB11B3B31C3DFB76D87E5569D397462CE9A888D047BA3924C2E3F955F00 -MD = 06545662974B688FA6F99E64C9DC606944B7954EF6B490D4F5AEBA12CA8AE0643D36D340A2D9E42D7CC425F31880257F4739CB35AE576C62A1749F0C27C4B0F3 - -Len = 1842 -Msg = 7691632F35A0F8EA7E14D97B4F782FB51902A0BA5188E09551E979496011C62AEE48687E1DD9895703205B8EAD514FE531D9C44D64B3DEDAB2BED907FB07EAE2511838B38F1184BDFF60FED005C5A520869030F76E15A7C3F890B5D35803F8FD348DE11ED20BC0EE231DC208DF079AB03B3923D765DD94EE48B0BF604AF1E8567BD31576D7C221C6EFDC8E17A02B914A0D442D81FD1576F840C511D1712D1089BF465E54A358BC1AEE706CCB539EE55BE1E9250A7B32EDC5821BFB41D6B8257BDF98CF5C83CD0266C65073EFA88BABCFFB23F0C50D64B1ADF4E841140BA8D178CC9CA3C6DC1900 -MD = 2C22FAD736AE86186943E1DA420E2E7F520547461ED8A4C18C27938B1DE324458AFCC23BCE76067A79F0D8E4148F91CD7BBCE517F4B8C7424A09798CB85697A6 - -Len = 1843 -Msg = B1268A9996DE08A4B261958C314BE9FEF0A7234DA9EF1A84C330289FFD3D4C185DA8BE58560450F026DC2F71502F2A0E238BBC6772F51FA12E9059323ECF5DBDFE9DFB273719C63E68B1E799FF107F7DAB82EC9B60705DDB2CA9EAB37FB0E45DE36F58E4D3E6382CA5FFE8D16A57C27E8C34698D27DDBB3A28F6AB805C800CF7B6D7A38939F49DC33D2046EC0CBA8F47D96F8BFC17FF77039E5C6A32BDC9455A3F3D835E3F21B9D2116AC6F6729CA5EAA85EBF5B46EE23D2C55C4C447AE5AD7672E18DBF95E53AC1FF933611F2ECD728019688CFB266AE775445B036B364656286ACF50A12FA60 -MD = 20D6844FE44E558672D1AA3E7EF46763B96DAE96951CD608A5BA05E57FFBA744BCC42AB09AAEB911FB8B937C9A9C1F300C82E4FC1541BE47539B6463B519C1B6 - -Len = 1844 -Msg = F6FA29C1E172DCF3238DE51B812EA3A94CBD505C5E8A7227E6A6A93E26275C9DA60A90A609D8F0DE42995870519B0A159B4042D44935A279976048C8F6636785DA95CB0FE908E7A915756BBD753CFCE8F7F72F2A42CB096D5D217F7C3084D7E45C6E54B333FFD1B35F95B748160FCE480F6E12033F6F368095ACE612766D49BB91871604C0F91EFF86AB0F0F943838823B104471C2F6229FD12C2B48F67CF7CABFA0D7BEEAFAD1D06B691D063D1C23D286F327A66A154AEE0308A44E05C94BCADF2103C2CFADD0EE48E3C793F3BB2CFC163190B573C489EE580D231F1D0ABE1B42DC9D1AE9D100 -MD = A2BD5380B5A13B79EA52F32D2B662549868FA6ED06A10F547488717072E1715C5FAFF5ED0EB26D1F00ADB18C2572320054C234559B7B1286D8F44658E910DF56 - -Len = 1845 -Msg = 927D50017CC3FBC15A5F5430E4F5ED97872FCD5E8DB5295EB2FBE7D3137EF7FC454A499B09F733402AF972E13E4E24B42D5F7037550A80A4080051483B00CA5EC796D4DCA3ACC32509990ED14FF32EE4A38BEBEEC34EB49CA4882041A1FC72EE2207977DA9C0DFD9689EE039F5AA9FDD37BA789DDEE2E94E4B93E896F71699C46BA45C9AD29C6351318292AA3707BA47DC2AA1FFF1C112E18CCB0886D1BCF306A0D7599C810D02A9A1FB181615CDC818E36B219F83791F89C976B3673260579986BFB4FF99FF7089BFAEEB1345B4F49802B6CCEC7F4806DC6C93E77AEC16F6950C88417EC62070 -MD = A138EB99F8CF326FDB015C6E1F920FCEFE3E2D52597753FB84C559EDAEB047CE42CC62802CCDFFAD831FCDAD924B91B3B158AF01BB7D3416934E04F5FCBB66FD - -Len = 1846 -Msg = 29BF8670CC82FAFD3FD81D1EAEC1B312C4F6F56D444275DCC396BBE88942E4D646920181235EDA860987824BD9D925187CCD864E602241759F17AAE0B3E4132D14808499425B93C5041E2A053BA742C1423CAD030FA29E28B96A52CF1468238E783640637C169F27F02990D1E243A2A6E967E038F1D455A39A47DCF28F7EC7151DA0ED58166AEE613C1C759E0CD99076CCF6B4B7A7775F207187AEB15E288E3DBA49024D56A91EC65812F7A113F0EDF2ED7F50013874A1320A2A86E67EB5B3FCD12AE0B0860ACCEDE9DFA7427914374956DFA2AD4619664F829B2C59038EF54A7AF0B94974C644 -MD = 4C4E2C9CC51CE77CB1F15B57EBDFCB01938829C93FF5421D8D3311155BCDEB693E61E5EC4A85374C3C5A4924C55EAE497AB579BB0A6B7C8ACE435A848DE243C2 - -Len = 1847 -Msg = 2A4DDEDD34CAAC49ADA033A9695DD6A97722941E4B79F03F55B367EB6DEECF372CAF3D96E28125B4C43EEDCE9F2D22F407F250D5E7CC29FD24E800CFEFCA6DE46147F7BDC3AF25878C6D04BE42B50B47B767FE03779153AE14B88BF95465CADAE27FA15BE654DF88ABD6B4A275A3B51764D64F4D9A8A0DC1DC0320A1592ED2E867ED9F15E2EDF8DFC28110ED52749B5A7B5D4CB307A13E19694F2EFED47EE974568858D6DCA09DC936AAA24D7B8A16969EC54352BC495BD67963DDEDF57D5E7D8131CBA5DCAE5D08C663D35B05605638E6FB091F483817995268DAEC4004A3451711E5C66B3640 -MD = 2A747D793A13F6B06840AB2057CCCBE27B16FBD3014C23226A7E01C4C6240925427BD907085DCF60DE634FC93E57A084D2E1835AC588FBD493246207B7EBC2CD - -Len = 1848 -Msg = 57AF971FCCAEC97435DC2EC9EF0429BCEDC6B647729EA168858A6E49AC1071E706F4A5A645CA14E8C7746D65511620682C906C8B86EC901F3DDED4167B3F00B06CBFAC6AEE3728051B3E5FF10B4F9ED8BD0B8DA94303C833755B3CA3AEDDF0B54BC8D6632138B5D25BAB03D17B3458A9D782108006F5BB7DE75B5C0BA854B423D8BB801E701E99DC4FEAAD59BC1C7112453B04D33EA3635639FB802C73C2B71D58A56BBD671B18FE34ED2E3DCA38827D63FDB1D4FB3285405004B2B3E26081A8FF08CD6D2B08F8E7B7E90A2AB1ED7A41B1D0128522C2F8BFF56A7FE67969422CE839A9D4608F03 -MD = F9D6AD8686125E71FE0856E806D68BA97EF123443938D28283387F33E3AC6E2A7DE042A3EE5F7994C1EECC5B6F22CBAE1349CAB2FB7A0A0125EC2320320858D4 - -Len = 1849 -Msg = C1783FB7FC7DB5B8EBF9A0357442BB99233369A73B0749F33C50136FCFE2479C2FC94ED87A6AA019EFAA119A2305668E116517BE31A4DF84C44B672918999C198CDFCC0AAEC695182AB1EFEFDDFB8EE2AE8C9FB981BFC69FC403C24ED7C17F564FAFCEA706AC3FC7DB4E3C08E2E488262E47EBDDE6461AFF5FBE876FB1EA5B764996B6B94CEDA388E6CE29724D6C9744A6EDFE1639138598FC5C579EED9A56FC5F68D8732DF2A4EF70FB272338BB096B16C6C12DD4B603DDE5CDD05C9686825F936EA6560D08788D35C6EF6AC44BE032F68029084B915BF007803A3B1F8E8D05C68DB8609C153480 -MD = 15E8C176CC16F04E5F2D4D412CC563B549F07648CF24BD6B84A65A2519D026CE1FEAD3B791BFCBE66DAEE00BAAD82781454A4BC23EEE9BB1950A3747F97D3E19 - -Len = 1850 -Msg = 5FC6470564242C4BC6997B8D3CE0BE6BBF3C132A052FD3C78C6373B13031E576F6E7FEB36A848410E5E48228B0D6B18E0EB64423138A3425CDD50EBACA32D354442403B6D395CFA93E8B81C57FD074E8CC36698B5CB50932A8430AC24EB986DB1C9CE1F4CF2D71A79B4FBE65D393F0BE516C94EB471C256C6BE81A70E17081B5951F7C3CA5E84CC7270884F0A65A6B2BF8853914078C611BBF5A73FE89274ACA6DDCA94B970DE7CC88FF4911C825ADCBDABBD5CBE9A63644A2C15DF1935F4BA8A2AA5978149D5B8DD4B4D14EEE842DAE8BD5BA044B207C4795F872B4B219843C611A7E466F6BED40 -MD = 7DC7B554F2DA01F8F4EE15459D6930CED2E438D4597BE35F5ADEAF488E8B2396A0A634458778A397C5F4935C03674CF4112FF85A0DF8712F065F8E9BD819FAFE - -Len = 1851 -Msg = 0D6CA1C8C4E025937AD2C62FB841FC6AC14DBD6208A418C01FADB43DEE62CE03D70ABF8614F3F773C7ADDA7DED6EC569DB516FA7408F73A628C68AB4ABBCC0DAF9CF1EA313A8EB0D8239F3726D20ACC285B617FB3F04EB20AC6E7F588144498E40E4668D54BC7692F84F7DF2B4C2099AF34F077F2B46829D43DC5037FB3B1B144CE110E7753CE6CEC76CC01D848EF0C169068218DA9AE4EAC53D845CAF91C206B8A46B6F869C6890A09BBEF06DC65F1F63FDF1EC33C5DDC2FEAD36A24ECECD795A7ABDD3BC4051EA2B748391CD7637F1859B7A027906C2D8D922E2F20C99E110BFC67593B58568E0 -MD = BE744AC939D0434962A9680A13EDB965C35FE2B32AE5EE7846FC337696A89011E89826D51DECCAE56DCEB7791CEFCDEDEA2AF1D547DA9D90B706C94C9BAF8FD3 - -Len = 1852 -Msg = 9D68E842C8636C149AF7ABC5AC9FB685B69C872BEDAEC8765608A2A27454E4F13AF557A300DAE256835BBF4EF9256F2C9B5FEF61C51FA573F9DF26F4672AD4F97B25969AB60BA6CC5DF2449456F54F2F1ED8B4A5DD455A38BAAAB1C57C8B870C7C62F07575337B3EBEB78D0671213B22201A1F96BD82413D854C28EA3D043C5EA8AFD23D3217E9EA53B099859D5096985CBE655588F3F2E5B3A4BD6D8A12E8E930AA3EDA60A5EB3FCFC200BFF2A413C8E7D0919CC2B79F343CF792666CF9C3EFF4AB199428974C3EE7B48D48284A486D586E07CFB21FBDDD2C75B9ED90C33120D9469C0ED84A7150 -MD = 252A0931850AC3476F7AD99DFD8B11680099EA5A4C6E84077EA8B0B8863187059FC4229DFF1DF79F15919D77CEC4C76AEAE2E6B5CB0A43DBCBB7502A7A0D5C78 - -Len = 1853 -Msg = FC9FAA47BE421F49AD0BC84E7EE489268084C00592F45645A2CAFB817C7E33DD82005894FE333089EA8E5FE6DF3743A5A6C5CAFC3A86C3CBB4030BF743FFD944816A71EEF4FE45A357CD81A3E047C7CE8EC3B90E90AFA4BFC4FAA324A97D095A68EA070CCA14779E813733432A046F9393B08E614615A5C7B573A548349670F36F3DD69D3FA9F2228957CF4C81FF8F9A4BFB514B68D35F8E03A710577D6077C48D4B9947B1426BA5386F41D11DF6A560AFC4D5C030AB7C11E65BF2D5A2C7AACCFB05C1BE6CC7C9CE9A301CD4CBB7BA63A2BDC9FB2A71404B832C8FD2C9FA53DA520B4587EB80F610 -MD = 1B491D202E40AD1612CA81427D94D18FA9A1C292F5CDEFB755D4041B6CB7160A4A6E318450E369770103617A377B7ABFE30C7F805A0A60A54EC62313D489A63B - -Len = 1854 -Msg = 30DFB1FF68E242E5C35344B6D5363F9BC0645FE35111DAB05357B0FD5F2AA4355D56D537D54A17B18DC56DEF90784ECAAF92CD67006C174BE4E232C773841E8ABA05B71D2A950568E2ADF766058744A6564D883DAFD123704DFAE1966E25A036ACB268B7547DE88534A5067411D55BEFDC0C9B98F27DA16977EDB972335D320B8954A0CD6F669AEB6764D271B6D2250F08B2DD17A537C6F6B46E1AA793C261C01056D081D48D939C70E8BD29B8697BDF8ED885D194C5874E329823457D85E0DAEE5589BCE1226B144D69544E790C8EAA77B3E771A5AE7A08E292D321304D5BD531B75E43E892EBBC -MD = E21CBD35ADB2814FAA6F0F72E974F9679E1CAACB35E6501BFB14DA21C2EFE4B180CBC370A92224C79584B31EB90EF90D8A047A2D8066C37B139B18BC9AE4E8DA - -Len = 1855 -Msg = 8B8EE065F4F8E1E18C037F99F0657ADC659559676ABE160D0112EC4CDB58DAABFD58BC968CCF2BFCBF8CCF84670912515DBDEFD64ED0D35F7DAB9A21A7CE95EB0D285DD9DEF35C2825AE7C2999A6C099B5640D97979402E374C4B81E92302C24C33BF7FAC1660D04AE731250F6EA3CFF051606A5E0AF66EC669FB031310B278F673DA3B7DB78B521C0E81897D88C8C6EC7DE470C4F93C25350B381F5420CCBE2CCB56910919FFA1750D96738C3F80C2DE309889972616B31976A8E5D76CA26E111F2CCD34949BF3CAF5F682837EC02FF90981660CFFBE403C7619D2C38E764BC794463986B788AD2 -MD = 49E55B86108FE276DAE8084B260403DAADB4D3CD4468A97B9508D6D1DB6370846B0848F44DD05B45707A2C4214C2E9A4986920D10FA7EDEB5009850DEF624123 - -Len = 1856 -Msg = 04E16DEDC1227902BAAF332D3D08923601BDD64F573FAA1BB7201918CFE16B1E10151DAE875DA0C0D63C59C3DD050C4C6A874011B018421AFC4623AB0381831B2DA2A8BA42C96E4F70864AC44E106F94311051E74C77C1291BF5DB9539E69567BF6A11CF6932BBBAD33F8946BF5814C066D851633D1A513510039B349939BFD42B858C21827C8FF05F1D09B1B0765DC78A135B5CA4DFBA0801BCADDFA175623C8B647EACFB4444B85A44F73890607D06D507A4F8393658788669F6EF4DEB58D08C50CA0756D5E2F49D1A7AD73E0F0B3D3B5F090ACF622B1878C59133E4A848E05153592EA81C6FBF -MD = F26F3268FD620FC476A49AAC3ED1580864934A2F6BA881ED8C8FB757AAAA64BCDF501E1913DE600BBEF6F12C949FEA8FD68C645086D5E30C9253588FFBD19BE5 - -Len = 1857 -Msg = 4426F07482D08D23BEFE266B3289AA606B8656403368843EF5275D93A735A1EA48D25293B2FEC242DFB58F7C387F0943B53E3BDF49F922B10A89CAB3D192010ABB2CCFBB758F7258895B3680083B9BE3E7EE79ADD241EB063CB2A63C0BA4278DC9CE078257B9B42AC4C6F7C6F5AF6B3328284F1DA4C04102A456CDECBA73DBE380C8BFD9AFD2F05DB7B558CB318E15C0C4E4FECED736145BF207356009D76F81F33F25459B74E079FCAC54145DFC2213AF55F7EFD34F5567A4F4A3F6D01503619808C7FC361D366643A4D2D04678DAC223832D35C83B759887C060AE300B1F630AC2B9BD442673A680 -MD = 261B813FA5D33D9C5204486630700D7DFB9F6F56B0ABADB57684B119C56C8815FA8CF2D51BFCAA07A5167B078C13E07B5A89BAE0A56080901A17BF18F62D5592 - -Len = 1858 -Msg = 4743DAD3E151BF5E0B9090C79B76A7E425F65CEAC259F901234BD59BC01172BAFCA5D80C3A80841547CF424E52D53C66C73407B686FF44A72638CAF89A09FDEC13341DDD297795D256C3A3FC58D1925FD1029C55FA76C9AF2F277F42CAAFDE084E708D0C89DE48382D582FCF8343965EDC1552749245A9DD7DD2881FE904968AEC8012AAF2D6C52DA081682BF062D39B7DD137BF1DA53942E24E60388546D60C6E074D96D6330B3FC262D2D1053324861B4E9C482F4C4159FDF0BC739A39192BCA18D5C54F1E9748068D63E0A232C99F3504C3B211EC5C727049371D52515231DAB097C014786DE080 -MD = C0F65561BF5D5783EC7ED8CE06F49B3AEB6DE5A8417AEB804BAC76EEF065979E89FE64AA180DA20252ADC162E2E067AEB98A6DD0794A33280B17267F189D3A70 - -Len = 1859 -Msg = 3C892301CE8E40088696DE300C1AF4BC362D52CEF0BDF4BE2CB7782D4538ACE3A69DA72C6D0A04FC416EB1A6F5F24AFFDC4AC3A8BC58574DC18A0FB4117D4B6083876067E18B62D0B0D35F537D7FE57E921F361FF598194B9F12DB83D24BA10D7976BA334EAB98EF5524EC074B0F4D663E8991D568142189A89FFAB0B6D851697366A2B935BEA15780C0929368E07E3DCBB7E421B58486F6850F20A9E1B499B549338EB0D32DF8362552ACC97AA388BB81BD64FBEAD0F89938613403C43149B79CFE391505673EBC19C01169E4A3BC90C33015896C3F9EC083F6C77C914E6C774B42BE8A6948AEA840 -MD = C0EDA7202F38C07CF21948863CBDA35D3FC225F9FDF3BB0D3FC16F4DEBA43553708CB20B01FCF4B6553F373E138E72ABE3CECF41444D46D785166B2D692C4388 - -Len = 1860 -Msg = E6991E70A7A1D85F9E99EAED812879054136F3A048D96156A4A0778E66CD23CBCB13197FF5FD92AE7F316AE045120BC5AC67DD4F887442F4DCCB77048BF2E5D7A1B4A17DA0F8D30A422EAADB498130CB1DB102CC68C43E70CFE883A58659549CF439317FEBB48048450D3C7D04756ED880E8760F48652FE46E41CB197A6938D5CD81D2BDB058F180097662CFF5727A3E7FD351803E97D4A2D54F2CE7F9EB76530F3D9C7B69540221C894F2164D1F98379CA174FC276E5D97B2BCE598976B7B7B658C3655461C9C15E62CEB380A35305A8B5978F44D86B5132F0EF5744AD0DC51F6D7E40BDFBE5F0380 -MD = E254C1204FACE0E40BF74EDAEA25207839E42070A90364F37EC48CB069010AE5A880AC719941AE437E2E879FE314F93ED5875AAE4FD362E35549116CA0B548C1 - -Len = 1861 -Msg = AF52B30D7CB6ABA2053D0208FDB3924AC2C32B931B14629AF563527E2A4E8F069DE7E3EFD5E769371CC80D7FA106F202F90CB270105FFF33C345AE2E346237C5FCDC8AB91AB8E847660F215DF3E1B570874D9482C221A5F6B445652A4393315CD60A79B24AEAB8F0086DCBD09A0979CE4431A4BF2515C5274670AD8E3F4489B49DD0DF064EB00DDC33BB778014B53BB2E61A3421BD94754FBE5B9A7FBDED04329E65FAAD493F3B4922CD8115C86F116095B46BBDD84B39CD69E484E08D9CA1B5DCDD9EBC126877DD4D6ED4227DCB3320C56F6F1E4017053841859A3BFEAA77ED640259F99A51BEA460 -MD = 09F6CAD134D8CAC4F1A1451FB92488D06131B8C138E8FE6A7A8583D6C94B2C3FBBCE560754E0810158BEC151C9430B02A2AF86F0D955DE94EC70EB96A2FDFFA2 - -Len = 1862 -Msg = 42AA49F4A2E8B72F5621122E00B059647A8C6ACD8400BCAA1EC4BF95B5E3A093D32022C6016F42581C9C2C3DF81105B3EE9D53BA623333406B4319FF1FA71F7ED8046A6B2892F601A6AEF902BD7054E67437C23CD00A28ED3275F6163EE2CC714C4B31EADA0451E40E0A66DFF244595A10E200582D19D1B78DC70B2895DAFC390D2B9386E194CAE4429CAC6D98E224015645E2827E1C016AC54737CACCF071CBE8E91E601C5A926B847C60636BFAB114158679D0E451AF3F3A97D716F96D92B51FA5EC90165416DE5633B5B8BCAA6B45D599745EB31AE3BB98C6B19E6F789BA6E21EFF754B16A4C41C -MD = BB966152604B4DAFBFDB59E41DD430E591B822B82CE08A0E90BA72BC9C29421668D768851402BBE6782B0C2494ECEEBD53336B21D03E849550E4DE90DFBCC34E - -Len = 1863 -Msg = EEF6D5C6F1147E9A29D854F15E8C5BBB680BC09EBFF8BCDDB963CA5267C668E648B47024F3972C9BCE05E74753735BFB45C50461D900DE1BE6BBD5DA4626BA6548BC7A47A8FBDBE45508A5C03C6980731BDA8BAA557EF6AE6117707F153D91982E1CE06E89F28D576B7602C3AC7FE77C34AAA1D36572C58A8A9A39F20A608A9EEBD4108F664F66D454C78EF4883E1C8C37319EC69C88063812A5FB2BD23AE9B4E49DF8F34FF9FD244D40D6E1A4B454CC6ABB4716C75327E5C46AF21EC8B0E1B0520BB16E4638C1BF3C9A6F8445BCF3FC9329BC626223CFC97175FD0A16EB8730F7EE2C8CA5CBFF8D06 -MD = E750ECBFEA0B9AD60E71E7323337A91E51EDC6518E22A06E6A504DCD6107B34AA3B7E0F4C4DDC65B58907EC395F319F4F59EB816FDE00EDB8DB7D30E89D0CB6F - -Len = 1864 -Msg = 7C815C384EEE0F288ECE27CCED52A01603127B079C007378BC5D1E6C5E9E6D1C735723ACBBD5801AC49854B2B569D4472D33F40BBB8882956245C366DC3582D71696A97A4E19557E41E54DEE482A14229005F93AFD2C4A7D8614D10A97A9DFA07F7CD946FA45263063DDD29DB8F9E34DB60DAA32684F0072EA2A9426ECEBFA5239FB67F29C18CBAA2AF6ED4BF4283936823AC1790164FEC5457A9CBA7C767CA59392D94CAB7448F50EB34E9A93A80027471CE59736F099C886DEA1AB4CBA4D89F5FC7AE2F21CCD27F611ECA4626B2D08DC22382E92C1EFB2F6AFDC8FDC3D2172604F5035C46B8197D3 -MD = 080845D6FD22A00B30FA01A4B4F81FDC7B46CA4C6A676AD5863A9DBF6611BA97F24FB59BB5BAC4E376B3B8B3357166782876B701273FF351BC8C5805532767D4 - -Len = 1865 -Msg = 4DF4BBFC86C99AB997A02CC93519BA1B6D58CD568237DC930E71C4963F48F304AAEB102EADD5E93902C441368752098DC02CD9518B1FD3E26FFC1C34E6773866432E25F552E44356C2CAA4A1BF375B73E17561D28DDF85C8FE6EAFB3A17D51AA0D512BF106B4325F9BD0F47E532A6D9A7DAA2F90D8AC43426209191512FD59816F245495CC6FC14DF5826D34B2381A1812B3CA9C4C8324D7D66A4A76F7B483032BAFE76128C5853968B80152D21CDC2BE64BF2AA9439C178C264062AA61097DBB287DE1BCEA6AFFB08468D3751AD533B4357CAB562E0105A0F848052DF66DDF9E2B7C062558114019D80 -MD = 603547FA4438AF35A1BE92F5C960DCA452C0136AA97A91BBAA8705B71791B5F1B1859ED3CADA59C238678A9B4910CC0DAF0B2E1EEF798614CC3D942B264E22B0 - -Len = 1866 -Msg = C1FD4A92ED91E80437F2492D1F0933D8B71AA1FA1457C8243EC5C1A4DDC1996F04A3AA922EF7571F50D11CD10155C20D198D4BE9846C4C46E5CB8F602241B7033E542E7C8BC4D03570B8D7DA6CAA74B104856CC97BE1510864D7566E76CD19E8182C496F94CA7E9A5A2329323B665F5BCF41A7BB5BD8D729A4876D7E9A76B7764B830FE75312A3F268DA28E476985257FABF2C04263E6A1D69E9F5C34E11CAE04CE015A731FB1B492F405A271D6899184C4AD3631FEBB554021C36DA8E2A5864BC3F8DB8461D0B7AC9AA94222119DBE9263E0A9CFB8E8B98F456C1EA717433B4BA8A509A5CC4631140C0 -MD = D476D02EF1088305E0F6CC6EFD931C5238F0326EDA8ECD0388C6D6824DDDBF5733DECFF435FF84AE0F15C54E98AC149E3294D658B1E350CC21A2185852387396 - -Len = 1867 -Msg = 25AE6A6AAF2D2E5E0E0F1AC428EA4A982A601334D7527E9A0B7D699EF19C0584C5332623D4A9418156978F763F6C142009A76C5DCCEA9FAD261C93D9BC851538202745BFA220EFA3872C60D28C5A45AC8F85011F95278A28D029D0947B6EB8AB359FB4366DE97A757EDE3536B2EB7F25026B5179F32324E03086D1687CD1F335874F2161FCB387300AE9C460F8BA20468AD070C64B94A8D8E9D38A5C1328983CD26000F77508AA430A49A5444BFE451C19A2ABD1DAB0492C80307B61240BC18F24B2CBE2DA5AC8FC85C9B2FF984D351AFC303A83F4E3170D02B8083EC2CBB7D671A9B2AEC95BD719D660 -MD = D446BBDCA30D5881A570E77F037485FF726868E930A973B846851E057AAFF2BFF601139A5738C1A28E83C7503FFB79B318F6E2CEDB23D7DD46A5043280806F7D - -Len = 1868 -Msg = 4251F3233CFF0E056271F186FF88284C5E29990FFFCFAB44F9CFA2EEBE619B72C3681DE8AFA75739A6B9DCE88F4463AC03F1FE21139E45C968F72347A6DEEFE78863DCEE29E2309733A8B477AD67524A4317E47A40C2027992C057A934A9C09D3C4DFBA062F4F653626F2E65AEE5C08378E9B5FCF87D937F71320E5D8CB9A5CB89360A0D7BE1BA7628AC1B0253D8280D32F7C03942A26659768AD774D95AB91269DF18576DEC613260872C558534C80290ECDA296DF12F6407390D78E7A192FEB2F4CE67CECC90CE7DC62593B3610D8FABBBA4C1E468815DFA614767F3AC0BA72FB18899426D3D76D6A0 -MD = D5172DBF2CCB321DBE7D6D8CC750D812C9084DEDB982304AE2F4EB1EEAD2A18967C048083BDD05DD51B7163C53175F897035F61B71C0E52DD5CE297515F6921B - -Len = 1869 -Msg = FEB6A3B8C8168406BAFA4C6C4D437B0E5ADA67BDCD5383E2217005A81092047263ED80F09D72EFF2F1B39282B94B2AE5A79D099BC8AD3F38E124644AC5825A37C22506048DF9AA75FFAC09EA24BB218E1F7730D354FCADD36E02122765AABAA7D56EADE503AE02113A52011A87AD7A113A717608BDE4F8F5A1DB524901B582EB2FC351612C13E604F425AA333C5C5229DCAB69F0E02821F2C00045BBE119975AA82043BD4AD5B8FCB57C3F766E7DB60770040419F4DA26846803E2413A356B607952049B8F5E7C694B0DFE703768AF3A8BCA7C5446C01C7A257D0D3476E5853DFB2BB329BDD12B14ED10 -MD = 09CE8FEBD04657E1DABEE85019D02AAC38831AACC24830C29A8F16C88635AEF2841B1CB78757C15200A46C2FB230905705A6A23DBEBD6E31B4815F93AF263C6D - -Len = 1870 -Msg = 07B0807CEBA5AB708AB70FAA26C57DC848357CE71F54B1BBB640F34C2392ADACBEF2779999ED9ED0BEDA61086E3F5C427F3FEFB6D9CA7AF1DA684CA977D69B755CF10B5DD9B5D229016329ED7A8C5BF65E86AD07672F6823897A700152907FC188A673F1F748BEF8EBAF740D08403A34FDC6EA6498B552766509387440B9E557C3BD2775691DC1DF4A70D867B8DAB848EE1272910CBBF2FE02B836A4F44B69A031C82D4E86758E67491DDDE0DCE19F0B30229213BE2C4EFE138D21B746D7B76A3E4370F46065736A06433AE27BCF475C1E6B99BE1414B2C74EFCC8C5F209B5EEF747BC491021A1B1AB7C -MD = 815EEA1CD1FDC8A361F8483CCCF7C40BC80D76C0950F72487DC720251FCBD5C693036F35782E8935D06E6AAC06EC639CE5C617FA96E67CA1DD258BEE7A487829 - -Len = 1871 -Msg = 077EE43315D81DA192AD7FFDEA1F8846FCE8E6497BB577FE0D84A3B33CB09997606C10E735922DAB8CE9508BC5FC9216493DABFB6982C060C8658DD0FBD3820386B8CF69C299E478AF4B46F677DF77B10B4416F87A984ADA7BEA287E7241C18F1D373ABE08B69D2C3EF3191AE6D88B794A2CD49AF24DEB98C24E2F647F1C97D37AE5BCEC2EAFED490C9153722ED8B8D2A1DD116EC398E147C6A1C15098FDB40E34666DB897A460622DC22C5E0EF0A7CB3A44A7DF8CA1521FC03CBA3DA3055DD0EF57DF1951277FF196F310B091049219ED89B9FB9AAB1E8C803458B383F75F8B71E466BD6B379CC445B2 -MD = CCD8300F7C9AEF83E6856AA88E1860F0D9FD0165627A9DF644D3FA12532A9C517FA6919075FAE19E977E28F2A43D8699D5453A553C713DACE983944EA5B04A9A - -Len = 1872 -Msg = E29D505158DBDD937D9E3D2145658EE6F5992A2FC790F4F608D9CDB44A091D5B94B88E81FAC4FDF5C49442F13B911C55886469629551189EAFF62488F1A479B7DB11A1560E198DDCCCCF50159093425FF7F1CB8D1D1246D0978764087D6BAC257026B090EFAE8CEC5F22B6F21C59ACE1AC7386F5B8837CA6A12B6FBF5534DD0560EF05CA78104D3B943DDB220FEAEC89AA5E692A00F822A2AB9A2FE60350D75E7BE16FF2526DC643872502D01F42F188ABED0A6E9A6F5FD0D1CE7D5755C9FFA66B0AF0B20BD806F08E06156690D81AC811778CA3DAC2C249B96002017FCE93E507E3B953ACF99964B847 -MD = 2678A8715FC7E538522DD7608D769508B63017D9EB6CC48F1CB07D14E741066936C8316BF3211E09F62611E140DDD14A07F97F9F372E99C084FFE289EB302BD8 - -Len = 1873 -Msg = 71DAB3D5E14975584855B425C41A4553606B8D758FF3D9897F173EBEE24BE2D269E0915FFEE407582B4FE64C1A1252D07AC56FF7D164441DA25CF75ED3BD15F582A41BF97B36101AB73D2495BF77F77277A52E41993DF8A6A889331AB48B4BFFBE5486671C673F618C7B758FEA417D358FE1A617A6F5A8BC3619E1A58A1B5B4A40AADF4E8DDD4CA6B557E777FB7EFB7E755F3E4E0DFB6E89A53380B4013BA9AD071C3E147417BB663867F65D478DEE59E71B0F753015DFF08207DC4A985754B0BD81BA2A9B66DAD4881FF73B82BD31CF62B2CAD3591EF3EC790711FCAA3897BDA87C2DA9E564BC30601D80 -MD = 03EF829F233BCE4061EB4BBFE01D5FCAFC30C5DACFEBC5205D8A39C3A34EE520C527B20DC6B2D3E1E17AB0CC24DF2736E7B50FC2E89D3456B41868C4152767DD - -Len = 1874 -Msg = CBA489942ED9C4FA6742C4442AF01F4503857D1BF17107169319A95B03DB4DA89379875761C26E82ED2A87EA5B532DAF6C9E3E12E6CCF8ABCA098D6ACE16559C87EE70802AA6BCC24D322D3469D59EDCA58B485A8D761707B2AE6A17746F75089A4FC0AD748B5AFA77DA2D32F2DEBDB7E0204343B6F732A91CE97E6694EACD38DD31BC1FB319B5322391FC69F4E6EFCF87ED5D75FA43CEF00A7B64554D5022E41FD07A09E0B08C8721FACCFAB978CDEFA81368AA965F3018D40D1E3EA5A13C2EB45508EA71B9084F664970153A36FA115CB538FF98B082CB2674523876CDD60145234A23F1BC6E80D0B340 -MD = 6805F53472999F1AF7025795D02879316FB2377C3F4AF4E093F2B7FD4740600FF3173DFAC6D6B7E7213181FCAD4C992D6342EE44B32972383FC8C43B741A7888 - -Len = 1875 -Msg = 2A2084884877E8EF481192AAEFB04AE7E016905FD19EBFE4AC13480224472DA2AC2EE2C2A652C72B1EE84C090B89F015060CD8ED31A320EE8CDCF0652197C8290AEDE81EE0109FB4B5F33E96AAE6004099AF9FF74E0C0D3CC69B5E655C2E6E2E8AD884C184D96716FDB8482EF16028E08C9518F505F9FAFB22A5B988246F2F45C7E8C32A4CD5ECC7C8667C5249D294E691E3E7855EC547D18F5FDCDD062FCE2809873D53527EF72FF707CBC994AED439B2364C10E6346D52BC8037C6D82E73353518CFF35E62A453E5F68ECD5F13A2F0E55A783923B41D8FB53D0C853DFD40E5C7CC8914958D1394E76C60 -MD = B6BD7664ACB18892FD66698EAE42C2C2755DEB219B7943C74DB1860B17CF78E243276B62FA1436F8217C1C58793245397638085F5ADFED9E9593C5124E77FE67 - -Len = 1876 -Msg = BC7AA0446C7B561CD3CA9FF43904F23C761B83F50AD0F489EBD9AA9C466771F1FC6C8C77D1C9C55929532DBC1456D0D4ED1E7E9FA1DC9AA6013B555C217D480DA0735997E8A2EF951D978936351C444CBA6A4CCAEBB3417616677143BE2F4B4DA61D1B8A385185F74581249B1212C7820AC6DBE0B3BA8081E259B78E672152513E357943B927E01EE4BCA4D903775E6E67195E105D9F513F679DF949D852ED2A77B96D14A967D76D34CD4B18F8C4970DDC95436EF8614ACD896817954D2CFB995AED03B3983A72FC67F3BD96949B1FCBFA6E26ED6CC2DECDD4EEC72787B868783A9B1758AFB2BAF1BBC010 -MD = 4A7746724A81E48BFA25CA02655145B2B29D0B58CF20DA823D679ADAEF68676CC9DC346D0C5C67D9FF611BBEF9290B1386DC7301907DFD991877E3FF46B17A1F - -Len = 1877 -Msg = E91BFE2738D209FE5A8D7DF18EED381E2119D4EC5C507E7C3776F4EB0389A67B0B4E1D62E71BF71C37F84B994624DE6CA18C2C5D50E1E279EE0989E526391E63063E55553DBCD3AA08DF0D10A2D24B121EAA009A57C949498F9B21D80D1A81BAE55BE5F902B035406AE16E1BF7EBC1E21B377D3EA4A78039C5B572F2187D4217181741EA9487EE2FC4B6295EB152EB66B62F83E38D1B090AAC2E82220CCC46F8E1C16EC2D772805C6ED31243C5C976DF1B25F4FA04794716D9E60C84C13FD17350930C2B9D01DD44A19E2783B4E2DB7701996DC612C4246AF2428EEA9CBA510B14C9AA6C71F66785A5B2A0 -MD = 6536E39171CCB81A744E3460D28EEBE28E686BB01F5B27C346FF04C235B575A7271D13C6A716DC73E290DBE8741A4AEC70C53E9A7BAD85FBE260958E8DB52659 - -Len = 1878 -Msg = B5B7B936D7040BBAF4F133DABA95410B59734A61C50659654B2C441C4D74FC5BA926701516457F66CDC65603DF61E3D0E44A928537E438880EF48E93C29B60BE180BCD6BB28C32B30B29B20812E138C554EC8824CCCE7E49A6B2746018098056539133DF334C92D03F3DB12F32316C15D236576F00392D4FDCB065B4C8ECB96A81C4492CD93DF4760212A7CA123F019FE2EC2F9FC56EEF3FB7F21991F31621C8082E2032BC45754546C016E449DAC7B70DCBDC63FABE31E7A806FD226C798F8B34CCDA13EDC088E6DE58CCD03379269F58E583A670C71F5F96683106967E56C29EED242645AEA259CA0D2C -MD = ADCD143B6040649B626C5FD16AB8C53B20EF1991D79A8B42112A0197435BEF3A9BE1430BAB862CF413B1D3C678B1855A2D5B4BA6769F4E3E715E414DD5BD16ED - -Len = 1879 -Msg = 2D9FFFF282AED376A69AFA50A700619CA32967E6A057A851B111C5387FDDC31BC54300F7233EC3A19FB2BC9EA509FB1AA9F2A1EA05D9427CF751CCCB39B3418A3BA0F01D63BA626A7A21B88F8D8A6DF57F178160C829E88E6546A65E0EEF4DCB0E5AAC1391F2E7C4890B90B6C38BA1A5828CE4D80119866F3F33DE9C029C1A8E89E7152961CE5FCE9013534A91A2DB42B086E7B9C8C6589474489103CD0FF683ECE788D889C81C75C80394613E0CB66B6B6FE962E356E3EE9B159F1460B2D753E2992744C34489DCAFBB429E4E151CFDB1EC5D43CDFA44FEADD2C1CF25C097EF26C48113E5F75BBF950AE0 -MD = 3D40C12E68F9062B97FEBB5E4075E5089D48D22B7386CE8E6C259609929DCC17C7FF27BBC35EC637AE0D5EB5D4E43941CED3FDFAE1710EE7DF2F4C057AB90C72 - -Len = 1880 -Msg = D85588696F576E65ECA0155F395F0CFACD83F36A99111ED5768DF2D116D2121E32357BA4F54EDE927F189F297D3A97FAD4E9A0F5B41D8D89DD7FE20156799C2B7B6BF9C957BA0D6763F5C3BC5129747BBB53652B49290CFF1C87E2CDF2C4B95D8AAEE09BC8FBFA6883E62D237885810491BFC101F1D8C636E3D0EDE838AD05C207A3DF4FAD76452979EB99F29AFAECEDD1C63B8D36CF378454A1BB67A741C77AC6B6B3F95F4F02B64DABC15438613EA49750DF42EE90101F115AA9ABB9FF64324DDE9DABBB01054E1BD6B4BCDC7930A44C2300D87CA78C06924D0323AD7887E46C90E8C4D100ACD9EED21E -MD = AA03EB09417435DA9E6E7803F3B6EAB66FAA3D59CC622950D61F9B962B69145AC2255CD752CB9607742092697B1A79D124817AE26421E61D1176764832ED354C - -Len = 1881 -Msg = 9B5DF8D7D727C54D2E19A7A525180CFCF88067B5C5205A0A41713EDDC19A6A0CB8DD7C1C1DE7E9F038CFB3A9D3853CA1D24C2D17D55B0310C2BC696191C2D7217177E00DD4354276FFAC3FD8FB2414E309937AE3BE9B94CC3D0904CCC966B70031FE4F589460B1E831FE46C579F802AF8210B48D15409FEFD6DA627DBAE0D17A0F9E95A1490EFD05D458CB4DED08BF6201E4139CAB7BE67514F5766D75AC28BE0BFE57AEBBDD81FB6A3C2A5E088AD72312480BDDDBC85CCFDFBEB13A6FCD0970AEF6F00AC922B8EFCE8AEA4635D15C63370E92F6DFBD2B8201600C81FC58CD57148CBC6FDF1D862B30211480 -MD = 3152831B68CE7C4D0B318AA51B3B5978CE4640F0979F89A476C1B7D56A996925F06AC516B0A22D4CC2836F63C73F9BEEC344A07B21A593696EFF4B9E1952E0CA - -Len = 1882 -Msg = 6D35A20EAB3E02B1974F66603A111EBC5D3A1BCA88226D2172215E57EFB59DCE76E78E55DDE1B7FFFE0F1F9194AA9A7C9A88AEF15ECA5577D5AE885F6C1E94B960B697D9210EE5E08801CD5727CB870C5CF62D2AC769D52527413210DB7DAB8679C1EF0AC288B4D20D401BBD503D02686F8324F7C441B9CBFE85BAA147E24E4B93286C9B24C6940C4391D0CAD11F75A5CF326AD6033BB160651F5B8F825D4F460BEB14C5680C6FE90AF460FDBA3EC45CE26BA68649B88D9AE0FA737B88A4DF28241D9DDA4F24C02B53FB1063D54CDA4780BB877A48206C20115147B3ECF238DC969E2B10EF0BA8B2CC2BA5C0 -MD = 550C77AA62F462C93E9062CA0800DDADCDAAF73EA78987F84B5405CD8E2FD171E35D96059EF8A94C8B98017EC2EB161C81945E41E6A0DDE1906D926F6EE9B48B - -Len = 1883 -Msg = AC0DFB4ACEF738945A21058C6B8E9728B5F5D8BEDC5A62C65064CEFB085C1BE69573CB7261165EFBB479AED2920235521FE64D09B5B68BC666B22014078F4E08072B854584D2F8BF910BEEBB018594CAAC5B5B734592831EEC4F954A33C506524301D28CCECC3D7D60C0BB37F25FB0286F0A3D24E5FFB04E2ED33F17557EE45C1CB50D821929AC534CAD695FAB1C12A5ABC44AD5818CD0F899D7023FC3D1C797CFBFD7E7AC6FFB79E367BE21DAB7E353DFA5C79B69638720BC914102B599F130052A1B81C373856CD017F647C0EE802F3600C5D52B4EEF5DCA52C82A4D0814428BE9E37443F9AC287D430E40 -MD = 4C8B636A8A3F58AB4A9F00E09A6ED92D219CCA2C1AFD1911D61AEDBF9EF4E355689FFFA9936FFF9175628753EFE915634EFFBA2F1F202DF2827D667CB9B2353F - -Len = 1884 -Msg = AD54F5E5D76DD3B229155AD1F3D9063BC1C624A4E265BCF03EFC4475F3ACD9E85661F836E3A25FD2ED900AD6F43FABBEF7580D06D54315065B2AE6EA76FCBD28564382D0AEC2E61CEDE74F8C14A67E722E6177154AD1875D9939F9EDA3E3C7A84244D115B0907E4D0C9CC6E8FDB143A3444EC54584D4A909358A715ED0F43D108C44ACCDACC366CD5614D560F1F06A398F5DF4C6A00391EF89F97483B8FCC42C14E2D154F4E07C3F8A2D6026A5BA025CAF46AF2D374DC7E8B2301B0F500F43BCF1416C3FD87709A204AB342C2762471D28ECAD10C852D32DC053636465DF2265674855C72D70B306297F5290 -MD = DB855F02C1EB602FC5C7208559C270144D5A24EEEC766F8318C3573524B928B79AAAA0A38A65FEA2117B6BF1F76346009999BCC98DAE3393BEB625272545C8C7 - -Len = 1885 -Msg = 53D52F2032B1C46D95C57520FA0CF46EDC7BC6C0C33001D9627E7FD56932C7CAA7CB972083039C1E4060405D210FD60E546997D9D912444EF583455018FC3CFD51F9A4705BB9F6DA7F629A08B23F3ABE6EF27CD6CAC03349FA5062E9B9CECD5DD4EB64655705FA491C6AB62012E35231669512AD5DB1AD4185142C3504835E5B5CC4A18D9EC05DB517D5A05174097AC305137CFC30DE721F605DCBFA88465C1D693C69CC03EBEFAA36886BAF39DEC8ED6EDC49EA34E6768EA13D462C6F9827AB031FCDB0C514851A5F8754FB451E1EBE55CB69BCED93E7D05951152E8DDBB6F57B838CD1340C4C01BD33CF90 -MD = BD22DACD42BEBF22AED715FE4379D171CE98F3E6D2DEC292F8B4A59C1932EB2AFEB9DB2413D154D0D5CBE42A5C501B826A9D713C47A9F4B2295BACE5FB111C1B - -Len = 1886 -Msg = 21FE58214464B868040194D4F73D5C23118ADAC415179F783E76ABFB26DCB8426821E42C350A5AB99E1ECB27BBFE87C35A5E30A1420DB9E82A29A7FD9AAF22768946DD8395DC015F6EC475BBCD8446C89A7D76B4F15B3ABC12DA9B8394402A4A336D4EED27AFD435EB72C91715E06F6687EB0355B89D9966D7CFCE736519F50CEB43E1FD4433ABD1DF3AB907C52434C15E02DF9CB91AF7A90FDBC0DBC59E5D3373D5CB0A2172B2FA74700DB3B7923CFEBBF84F0F51F63999CC4CDF2555F6314A2CAB5EC7FBCEAA7BA6B1FAE3EBC71D605E5F9C27DCA3ACE176DAC25523E511B0BBC52FE5F9C5F299C381D488 -MD = CF13960C3992064D7658993C696CA9DA1B2E41D25F4794C9DC1A8A76CC721C869F33FAEB228E9D26C09A76D93DE850D68B3C4CDB157721969B46CF18FD02C2A0 - -Len = 1887 -Msg = 0DD7BAA7F00F3B72BF6E9F5EAB0176819ECDA7AC23AA78241F3D885EE7D791200C0970280D7772805E2806846882E7FBD0B09062782AFE528C69AFB1898568B748906264965BD2730F93F3501EFFFAA2A972DC37EE3B15BA330190A1945DAF78E0C75E191082F604240A6302D23935B13222347EBFFC7C0CD9B47FD7EF152DB68FC15374F7A78BA6CFA1272173C34F73051202C3D5D964A07AE03A12025E39DDFD4A5E7B0B95B84E81DAE08A0038F5EC4457A251483C4867D7E3F2DE4373FEDB63FECB542A936E59DD71EBE077681D3BFC6BB6D624E04199937BE910A5FABC44626A6ED49864C0C4B7A9A1FC -MD = 1BC27A629B47A222AE9CD162EB1AC181F45221679AE7539E31D73828575007B86EAF1353E5FF995BBBFE1C4F0B6011A609F011027945EEBE06A219695B8EF6DE - -Len = 1888 -Msg = 3A12F8508B40C32C74492B66323375DCFE49184C78F73179F3314B79E63376B8AC683F5A51F1534BD729B02B04D002F55CBD8E8FC9B5EC1EA6BBE6A0D0E7431518E6BA45D124035F9D3DCE0A8BB7BF1430A9F657E0B4EA9F20EB20C786A58181A1E20A96F1628F8728A13BDF7A4B4B32FC8AA7054CC4881AE7FA19AFA65C6C3EE1B3ADE3192AF42054A8A911B8EC1826865D46D93F1E7C5E2B7813C92A506E53886F3D4701BB93D2A681AD109C845904BB861AF8AF0646B6E399B38B614051D34F6842563A0F37EC00CB3D865FC5D746C4987DE2A65071100883A2A9C7A2BFE1E2DD603D9EA24DC7C5FD06BE -MD = D3012F2FB56845B258D7598C0BBB2C97D53B602DEAE9326DC3678B2228454A1E29F28848ED140C70BE85CDEA9F99A8DC347DEABD46D362ED1AFB231146A0255D - -Len = 1889 -Msg = 6EF15F1D7C11CCB07B7B3FCD92C8086B27C8BFD1728F6B4AFF7C29DA17D2B3E5A2181181BB4B11DA8BB2365368594A50CA9B07969753724F2BEBCF7D208A6CB02AD7C8A694C8F86B551BE9A68D98564A941090EF6E5E751CD39909F87BBC7B516F9A829E3AE277E287C3548A69EB1019D5BE3951C6F3583B1B82F09A339E8C236B178C3C9DE3E85F6CE38E8B6AE0D02C0B7BA75DD589887A834AA9EC1B3F50D3495C72DAFC0E67E5FF5CA36FAE7155230A1C54EF30EBC3508E775DFDBF6BAC06EE23B6EB8ACCF8FBE8CFD2A45CB268E11FA574B016FED1DB09458276F53D8AEA57B3AA046393719127F4A07700 -MD = F77A9FAC081C21452E6F20ABB536F1603470F0235DDA65240F9E68E02EB7BB5F4A2983E0DB51CB55B4870C81D5042F942F14040E8825CAF8E01AA5332DF21B1B - -Len = 1890 -Msg = 8F1FA4E6804B6EBEE7584B7B1E2F76CBBCCC1699BA68DE8B05ED2DE8F4ED2107340E4E1DA49DC7E72D96251A8EA551DF35410D4296250D71EE5FE4D8C396CFB48B2E5F2B184F7453E0D74FDCE51D99DC2A39E4AC291BF18BE2EF1D5A1A02DFDC9DC712D5A1A45544B1D45F279394F2316212BF7B5A0E7DF002E3ABDC57D91D7AEDC8EF95F0ED7F6E38EBCC7BDB7A254D6D50EBF8D4D63D27C8AD5F4DD843E4B7CB14A57349985A45A326DBE775AF9E97909A84AD9927E614A4A6D7EE825F84B5DE6695D1E9C651BB6EF57DEFD17E876D8CF2AF552C2B65C2446B177D76C02E0342DFEE23E4D7CC0B994A122080 -MD = C263BDAA2E5FBB25B4041BC30EBB3ED91716D14C85FFE77DA33CA2745C865C67128961C991F42904FFD3BF11B302D9004EC0C95C1C0F41B3AE96D5ACAC989A6B - -Len = 1891 -Msg = 86045C9767C27085DDCAF969CD015AB4B8FDD157E1993A98708376BD37ACEF1F9D057D5A1B25FB1AEB74C361EA478A37D1ADC261ABA42555AC512B81FF0E689E1C76830BD69F9BCE4447B452300216452099D059B8D67EB157D001A0416FC2701384A5F2DAABCBC94C7FCED505064C1F0494694F7007FBFC4D43323E4C8D719DAB37C0E2D73D3677B3283114C41F611DEE02390466A417F43734DB9FDD0842A102B88238B5426250CD92F98EC91C540EE24C3F5837BB8F058A08EAC3FEDF32E25BEF8972ECD1D9EAAC379E1939541CC8542303D75F1D807857E545989844DF52F3C44587CC21102541D987B9C0 -MD = CDB3C429CA81CC2A3A3239B0F7623C6F336E163031717F374AA6FE982B86EE129383E513DF74CBFAD1BBC1FC9172623087264EC14577B9C14D81FE6CE11757E5 - -Len = 1892 -Msg = 7AD8A30BCE5DC62809ADCD37A2579DBBE2DDA653502892B72E2F9894DF9F4825606A13EE7AE4D0590F2F241C6614660E77DA5BD8D55D6C6F02B614E62B92087FCBD24B2E0CF746CCFB1C3C3B5B41058786AFAD296D6FCFE9B53E35404A7347720D1EACF3837B4949C6CD9317E18F8D2C3AA2326C4B848C44D524D140DD2555B4C6E96017DBEFBE3C473CCE502AD528636432FFCB4DE6F122EF2C9A05B6EBDFA1286EBBE42A131FBC54FAA8D060DD9574B363216189191AF074925D19D22B79FFD4B00DFAB9E6BA72F3EC0BB2AA1FFA170AE34FC413E5BC424D41C34AF4D991128FB3F5B05459A96AAFAB37C740 -MD = 8B281FAAFCE6BBEF8BFC5FFC6E1ECB8CE4EEDF01A8EF3E3DFA691CA0F19D76A8488C1F4431D12BBB17967DBBE172F41CB864B44A6D28868FC84C20F12226902F - -Len = 1893 -Msg = 385AF75BE90E5622E14E98D775F6C880B790683A3369801A9DBBBC62D40467ED2B1F0DA3EEAB036373B8E374CAC3044D1D248F06B8C197D20419A2E8D4E7AE87E8EC56BCD165756475FA98FEF04CB81035552481D7262E5F2DD872C750C15EB1E02F4EFEA20890112B958717D16CBE93E8F2E33A83FF6DBC3E04BF9D89F03938526E1C277F86F12CDC1097CB13152585952A6ACEE5027206FC6FA3D72C8A3B3D065FEA75A4D1E2BE33F0E32A6628AE7541B0E81088CBDB7905140ED757E0A5A7798326AB0A26FDB85D9AFD35EB25817C6B2608A1F20A1FDB198CD3A72422C7512F2C744234826E1254AB8B7038 -MD = D48D0543466CABF4F303B85293F0613B56080235DCE97DFE2646562E31C012BFF768E10C869292130DBED2E4602A082FEC4445541A158A4C1AD00A5D8B1632DB - -Len = 1894 -Msg = C5ED28E519062E99AAB7E01D6BBBC42FFA0CC6E304E8D489D8C854BB2E4E949EBCDAB329E147128AF11C75F92988AA1A42875CDE9AD9FA4861C03F4A66018B0496A06DC48E70E15E2A7E51E35AD6B4F15220C249BD40ADD5DCC9C58C844383BD436EE9803C87D48BE54974CFAAA19585587FB088E0F8580A851A7C7A2A5E5B2CAACCC09E9560298129972CD26FB603FC5E86425AF9659B93F3F6695A1AE7EED525F31C717FFA699ABA0ACAB0317D7DCB786FC1F238C0B3D826AF10BCDB372DAC68C219674E7E9F9212BA4EE0E2E156F1BB818D4887D9D195247108B4A131448D91046773A6F48FBD748FAB9F04 -MD = E8B61AD4D8E4462602BA883BCF06F5EBAD69F23F834C07CF75B40644E61FAD434A38FC0EB12275B812C3B1C567CBC03E4F6B44ADD4EEA3172B49CD9F947C3954 - -Len = 1895 -Msg = B3303FCEFAA4765F0F8BF01AECC4ADF3BCE7CA9F5DBD9FB203EC0347C583A477FE8D7AA23756C47B2F8F76C1337305DCFD2AC0942546E04F30F1A4661F36EF4CC10A49905A2EA717D5E2AE1615330290B06E0C2DD6C55BF3B8FB06D49120D1B28B8EF5B7FCEADB97F2BA0BC64B458CB1E79934393CA7D4E03C7B3601367DFFA70B0AB51865389C817866F73E1279D97D762350737D9E16F6CD64A09391A956316D63BB611B580905A9670EEC91749CA1D1041324729F3E35248E183E6113E08EB6674B06AC41FA391762C8B0D1FD764D9828F314F80546EC300A26AF32ADB9F838214E457301F1805D2A1579D6 -MD = D36A058BE3B3263516BC6ABDD5C3BC530D61A7BD8A65E1247D8AD1409C6165687DFB4667C1305ED15B98C6A7C08012186F0044B94B4B7C5885685195A6E145E3 - -Len = 1896 -Msg = 1861EDCE46FA5AD17E1FF1DEAE084DEC580F97D0A67885DFE834B9DFAC1AE076742CE9E267512CA51F6DF5A455AF0C5FD6ABF94ACEA103A3370C354485A7846FB84F3AC7C2904B5B2FBF227002CE512133BB7E1C4E50057BFD1E44DB33C7CDB969A99E284B184F50A14B068A1FC5009D9B298DBE92239572A7627AAC02ABE8F3E3B473417F36D4D2505D16B7577F4526C9D94A270A2DFE450D06DA8F6FA956879A0A55CFE99E742EA555EA477BA3E9B44CCD508C375423611AF92E55345DC215779B2D5119EBA49C71D49B9FE3F1569FA24E5CA3E332D042422A8B8158D3EC66A80012976F31FFDF305F0C9C5E -MD = B50C896F2CDF7F105DE751FF6CF664E592FAB752D652B06898B9B288052DF22F721AD87E702AF043E6B1E88929850CBD5698A9172C3932400B2538E401A6F081 - -Len = 1897 -Msg = 30464E409A3B937C485408A41CAA7CE8421BAF61D2B7DA168CFBB9405474ACDFFE48F5D8F4DF6A72BC4EE068439A25048045D51A8A47446785C005798FE8A89EC63AADBAD883DF27989B159D04459CB3FECF20E32B410A39785D2D03188B012576FE15E5D2E7BE31DBAD9B7697A08CC49E6EA4E53218BDF1BF3D2107DF74CC05923BE9DDFB75BD1692AAE1908CA32F4AFD9DA23DB66BC723619498E0697D3934518F06E2D0909B8571096942ADEF6E31B5E31D0853C36334F09F7AADA41D4D0AB49AF327DFBDDEADA12D7AF97E4D5D7989DB22E1F8EE44FE2E36646A6E1225C8625BBF9A63A6769F5C191FD11A80 -MD = 38860FC488CE83040DEC99F73434FC6A1804255EF32C63263FD6B4474EDB34EAF749BC9A7C967B15AA2A5183098CF8A2AC53FC2B3FB27455FD4FE8E4D70D0081 - -Len = 1898 -Msg = D0D5DB1EE32912B390DBB8642F314AAAC36F58D46E98D508DE2007ECB63F487CFD2DD81930D003C60E7EE781FB987959A86128B754E813B933B91A714C8C2BD09C338C3F2170D3753EEC2FAA812F81C287276B85371F398EBB7CDCEB9C20528FE9DA86A1C19749173C62A1917CA1DD82D5036CD241A45D0FA5733C8986B9954C173CED51C40FA1A0A0B8134DA1ADA8019615FEE4BAB7253600513CB960DFD335D1AB376B921E4D47A1F5AD75F88C7575EE32A5B2BF175EA230995B3252632C1D4B7B3E4045A1EFC0C6EFF757B31CB1A29C80AF96DBFA4BCDECE8BAFDB2EDC6F0F85D6C97157019FDC7B3B5033380 -MD = 61C1080456A9C56EA38960DEE92C62774E9CE57C8160314EC7D1CCC04E0BA13680B2971C28ADC9BFA397E56E4EFE27CB9A3763483ADDA4E4271B72DC913CA3C6 - -Len = 1899 -Msg = C7865E96161416FBB9568C2667F7B69C2AAE38FEEF6E89FEE038199C889E72D1A0A7EC5E37181C2D6BA903D9A14D6C74EA1B009179BA298CA72BB9A6E9D5CEE1E2C03719D850D7703C692C83C58D57FA2EEE1AD28CED2CBBA6203F1FC16323A5352D08CCF63CD1E69DC35EFF1E07D1240EC099B956680EA8F7E907A42C8A5D7FF1C8CA85046113F337C9F5DC5F48DC2BB8CC548222274167E61262124E4483725E5E5CFCC8BE9AC6FD8CE4AC978855F9A63023187F4031CFDAF75D1E9AB2D500F7578770E1F08FD7515EEF064B6B0D2E1A6E37628BFE68CD33C54E5FFBFA0F2C3C129902F3DAD6C3EB2AFF4431C0 -MD = 3BD810B25B09F52C252217DD685839042FEF3446D5BD3C49D9EC53A762A27B4E3CB7E5946A830346DB3B5450C8C84ED876FE29EAAFEF6F19BD16322332A027A4 - -Len = 1900 -Msg = 6A0D95FB7E1385C290FED05695D0F9E1BB07CC16A34E4BE0C6E9AFBC809465EC091FE41102C9DF99797B33DE52459A7CD266D5005F33F565CAB3C020CB9331AF08D5AEF45F59242FEDD25A933DFDE0FB6ED5537B0C0F132D58CE45ED874A91D1030CA3D6ABEF53F7EFCA6658941769B9447649C92E062C863FC8CCEDDF87984211225C4999592C6FE591F4A31D397D96884304CEE028EA830222B15BE306EC567E2A2397151DE8D1D670D80D0335D78C3475BC4D3AF25C3E3851600D2A9EEBA5CDCC48A438E5D023D8EBA08D1A6445912BACC65717962071D96AB499A5A36C950573D801F6066E9E0837363110C0 -MD = 79DAEAD23E7DD9462DBB4A7EBED4D9F8A0196C8EFD90D8DA57332B0A1D2D7A9C8ECDEA42532B7A1C021A170C96A5F9B1D729D4690557C72AFF6D89779E268464 - -Len = 1901 -Msg = AE7DBB62E7B9A47FDA5643A8221FCDEE971907867A43680CAAE6EE618EC365D998839AFDD3185E8F56DC5E57EC71090089B815FD2F2B6DCFA19B1EF25001714E6F9A3CB58D35C858E6912DA487FB806AE3A32A0AB50034AA7B3C063CC47FB7D207E961396ABD557627B0FC1C3EE14A84E6C94CB27BC74B6DF2DBF2C26E44CB031EF8AE82D04B11739E2CDAC18341C389DF1353C99D419B26D41B8B4F916E79A124FB16F30743B305A56674772B9AB9167C01C5745FA0598B2C5A63C43C27797E2B9D63F1B1D9527FD6A4997A5ACFC51B124750C59A356F70FF258A86BE32E4C08D4AC352642580368586B69CC720 -MD = FACB3D85F39778513B3E897C8A80B075ACF845AB89098528F1FF313AC09557186526ED36AA9170DB40B386B2AC058A69FF0674F49787A6CF657ECC49FB79C114 - -Len = 1902 -Msg = 25B99AEF0E7C37266F10CDF83715CFD1803E0C3DAA8B8D4D44A49D3118588007449EBA78E6759B825195D53D7370E1E20A687B9245183605EE92C7231DA00D1F83DEF383FCA4D437F047E7A1AB23F3EA309D0E73CCF6260BDB9C151E3F3C0435C72E986035418E4DCE502A2F63751062D42DC0DDCCC92243253681EACD2B1224B5F82A8D875BAFB362F76EF7919F2A0A17B69E13095EA71F06990CFD70156733B0C42DBBA31A130F648D451300EFEC70DED0E1F850A0C06F6C2FF0E38C1C9316046451CB52A21F06E1301A071C5EB8EA23E39A18D1B7218BD2833ABB98F4BB0CDA30F4B49FDD2FFF493D7167DB3C -MD = 16D8372D3B34736C795374ABEA711434C5D3BC96FF6D90B13665971197E964866AC40040621CD1F4C44BCEB68BD9E2DBBD81B28B3ADAFA40F28E60A82620ACC5 - -Len = 1903 -Msg = 715E9D91D3D364B04ED7A446DF0CC4AD51A5D8B31DC0A90EB9BF6675F9052BF3360E3D5A7D9C373C94C9AA9F6B200450272F4B37EB9A5BAEBE95C86AD74BECF18ECACBF3C8B4D5AA32C15E0D1457451D664967B6AA4676C992DBC1CA6A6576BB1788C94E0C97E1A85402B8624B03791F896A85A4A4132B7FD7679E8786B8A66E0526E1FD0782CD14D1712173F0A96063D68242652F52F8ABBFE284E637C62BADF97372DDC7CB2700FE31001D094AB77378D205CDE474710530028CD598FAD893536B6752A542171F6FDBA6893D3AE06CB8221AA27C89570E463E6C31620CA976234479B15B8A6258D4779FC321C0 -MD = D6C53C9BC7F6156DFF38C16C92E25C820F6393177C13D5700BB8AA5C7C75DE79FB3FE938259E75B93D89D9A50F07C73F2D46532A7722067BC972872F1FD7B8F7 - -Len = 1904 -Msg = 08D0FFDE3A6E4EF65608EA672E4830C12943D7187CCFF08F4941CFC13E545F3B9C7AD5EEBBE2B01642B486CAF855C2C73F58C1E4E3391DA8E2D63D96E15FD84953AE5C231911B00AD6050CD7AAFDAAC9B0F663AE6AAB45519D0F5391A541707D479034E73A6AD805AE3598096AF078F1393301493D663DD71F83869CA27BA508B7E91E81E128C1716DC3ACFE3084B2201E04CF8006617EECF1B640474A5D45CFDE9F4D3EF92D6D055B909892194D8A8218DB6D8203A84261D200D71473D7488F3427416B6896C137D455F231071CACBC86E0415AB88AEC841D96B7B8AF41E05BB461A40645BF176601F1E760DE5F -MD = A34A2F27C32F993A7E7007867733547481293C391255FFD0E5CCBE91E1CC749B13525AF6ADFA0C2D1D64BF87DD65B996ADA9111C5DF55BFF8A5742E54B8444F6 - -Len = 1905 -Msg = D54EBC88B04A14EBB0AA1D59C3A4498FB560438B5884F6E6A744C78761AC06934138E03FDCA96CDFBFDCF94A2D51151C35D5D03ABD61FD7850B8309D65D3EC495DB487E6A7B6F50E6B30A58DB0FF64982A79409AAF49766E032F7893E0888EC71673858FB57224F9A3FC170B06B74E54E2F512F6188684937C070E5C21839AC032FE1150F48D229CB6853769DEFB8C1998B48E79A96EEA86993D215FF0152A30147761D8D45D5CC6B2B81A46F99B7EE7904F2C825AE1B454931A24E51F3B0D4618AE5D784C94BD747F08E5689108D7E2DD291EABA7AC562BA7C768219AFE2CF7325672F3F2237CCBFA743D184A9D00 -MD = 767D49811DD154A53734DB068F735649F707E8E207502B1DB263169E019BCC7664DBDFA7F0CA18DF682E36C19D032D397E73485FED52259A4A6C55736645053F - -Len = 1906 -Msg = 1B9DBAE7FFD110EB2A4EC1C27A9C2C09F59DDF426A1D32D18766432B4D9EBE9D6FFDCE6140764930D5526D38CA45C2E4BED10B620F4B5F6B42B2B2B3F539A062DC36465483F660A3B0DD1FD5130156C31497F2BF2EE650716897B9D79A69018CEFCE1CCE2955A5EDE0EC457B8533D802316B5D4420B9D5BDC708E9B1F39E0E91722D9EF6A646DE2313C4AA88E71C46991E799A564A3F53CB245A91DC9E704104DD930F2EDD1A39DA491329C13D75FD6E71B076E1F5A1DCFEFFD1E2757FAB630F4C7A28874BE66287E733B462D45964889B42080C0DAD909D86D44CE5B16503B41246C827E00DDB13BB936185B15A40 -MD = 4F9FD8F7AB34B0CE42170BFE016081A3BBCB10D12498089843A3404A7F8CDFBE9785B39140288987CD5E8336D4F7A7075D9DD77B58CE751349655DFBF0911C98 - -Len = 1907 -Msg = 948B3189A832A89B77011CCC3A5BCB0BF9921458DD9E8B0DF900E7FD1BED31053A714C7BAB9018A94E5145768224724F0715F7F959629120FC5F2AE282FC16C029759FD38E109CBFCE44DE36469613FC3E75A0DFA599F4B74358CCDE5E0E75934675C8A65687B08FBB8B0914A8D2A7D26578C98E996A12E6AEE779DD5B12B6F1381BC3EFC84DCD86A1488B1289E296484141587F9C2DE5814AF5CE74197ED41D6E47974A1012F465446B8B568DF4CC56629F0C34A9FC9C4DB1F2139006D02A071243594BCE5BA792F0D5ADD297FD728DE29107E60A87E8F0E3E360FFDB10FD23BB8B8C5824F0534F3C202838BA7540 -MD = CA0CED9A30B1BD6A829C9A654F934DD4E2C875E4763EA527AF1C38582204B944004FE7B22AA6F79C71DA00CA12BCD6F9675A0CF25A66F0EC9BD7EFDFD8533474 - -Len = 1908 -Msg = DD78EE486F318664E7A4D66B15E5ADFB15CA07955E290655CEEB942E5478871507B4EF5AC241EF683BDBD0611806DFE2DE432E04F1AA93E1608FD6A2B36BBB799611CC80B912E2FAFCE43FE688EE8ABD5EA5F04641B84E6D1C23C0742E64BFF7364BC1AB8B6D9C0FD89AB8EB4E1EEFBF7A17039891819092BDB39E493C8469A2ABB8F691E6BF40B45F98205C50292C7E860514460DEA5FD3A331342CBD70D7E8B2D5D6A94C341F27B00706C967A085DAB5E75A499E7B885AD3A3E3DB1F2B2DCC6F4AF700845F010E91BEB0594758EC13E345B41498E6D45BEF60879CC812349C395934ABB047BDE1E8129170525B60 -MD = 542EB7111CD6377B7BA6882D849CBF92B23720268571D722A9D6B9682F1A04D915AD9EB9A8F1262E38B8D72603AD2F5C01CBA104409719AB7FF6FC165910C5C9 - -Len = 1909 -Msg = CEDFB16E8666009C16626B4828156C6B374059093ED1E6F9D9FA3F524EB7FFD030F21761426E5838448F3D43FA87366FDBC1FC58D75C9F4762CB34FEF1746991EB3E0BA6FD0BEB93F0EE5A3BBBA466B2A667C818AB4C8BB1699DE0BDCEE984E45972BBB737E33B271B8C52B612013980996990F8B4A8D63F499D121DEEA5AC2D98B3C86BB6D0D62948562502F18E0C8DECE3A86FC28E39EF39A2FEF225A406B7B0AEDF4B3949B894F1846FD656AA8DDC0FF1ABD33F54F0A74FC35A9C6C299A4F89A24098CF3966F070BADD4BED889F3E1DAB75870127CAC9106CECA696CC186DF678D2E392AB592DB003AFB2659E78 -MD = FF5501BE6EE3795445C38ECA6C2632DDB76001B3EE4A05F2738C8524C2B61884F9A197335A044537B0711F987CCCF4D1DA5DAB4140B5F138F6F380E4E1E6B15D - -Len = 1910 -Msg = 88B7A04F09EBB5BA5AE5D406C00A42CD7A809FE193956CDD28EB763DCB771DF5CA02A0C3E963CC9D4ABEE25037E82A7BF776ACA0129216E80D2AABB7A61C84AB5A2E675F2DA118EB159E0495BE9B8361362B7D376D08BB2F407B65E69120A1009B55CC0A8425DFDA0422BC1E7005DC4E8EDF925B79DB2230447D7E0BED9111566A8DE861B6CD11AC5F4BC9F7701312BDCA9019C4D799D085396FF8A83522D7842FD8AC880AB792EAEA4C4DA5670A586D1B13B005B8D26B371264AED50AF8106FEF5FA9232FB4D780F7118667B31F219E0655C2CD0D9ADA7F4C0032E8A8C40AEEF8E710635EBD3288F81DA883C269C8 -MD = 4CDF870E38B7AD91720ACA5F5D6493A8228BE890CBDD1B2CB63578F535BB5A203886BAB533CD3A8D9017D137829946AAF5CC9BA4E64E264095F97ED3F58A74BD - -Len = 1911 -Msg = 60BCE2AB04FD3142DAEF5C0D8BD52DEB6C60195DDEADC37BB50B8D7AC49D0736B9C98AC3F426C5BD548AE17CE4CF25089ABE525AE70774D1F52C219097D9CC7E25EE0A9AFDD92E63C720E09DFE45BB8D83EB36CBC8379C361C6D4A31401FEAB4DDA2E867937E5A6E9E2190D2411E837A7317FBB46859F8A40E24B4079219A2AA3A94EE94376B92D4BB86F3BF79457C1F32083F3AC6330AA9E87F49FBB75958E205EBF0133539139A68CA8498D9BA099251635F804EF3711B72D65E8F0D7ACE7A135024FB8C15DA8D8B0194BA4E8BEDD18E593DDE80558E2B9E697D053BC6363A98CB273594C9A8EAF93238532E25CE -MD = EA6E68E994D12C7216AE666FF831F4E5FB0ABEF4C0E0929791C5A374E3B9E255CEECE4985AA8EDAD767B9C00BE38F65724F2E29C6620896EA4D737E6786F2659 - -Len = 1912 -Msg = D782ABB72A5BE3392757BE02D3E45BE6E2099D6F000D042C8A543F50ED6EBC055A7F133B0DD8E9BC348536EDCAAE2E12EC18E8837DF7A1B3C87EC46D50C241DEE820FD586197552DC20BEEA50F445A07A38F1768A39E2B2FF05DDDEDF751F1DEF612D2E4D810DAA3A0CC904516F9A43AF660315385178A529E51F8AAE141808C8BC5D7B60CAC26BB984AC1890D0436EF780426C547E94A7B08F01ACBFC4A3825EAE04F520A9016F2FB8BF5165ED12736FC71E36A49A73614739EAA3EC834069B1B40F1350C2B3AB885C02C640B9F7686ED5F99527E41CFCD796FE4C256C9173186C226169FF257954EBDA81C0E5F99 -MD = DD5F4B167175D9566DCA6C5B1B54A33D02EFD02E25E23BB6FB02D878A4415E5E8682C209BEAC04E9882A272D01E8EB435CAA5BCD74FC825C6B9082D041DFF333 - -Len = 1913 -Msg = 1155C2A0961A8BAE0B6D7525BBD4F8C6462DDCE9F37A406B9207C3F103FD12D777784434C89C0230E64768A054160B530F0E9B0183B00964F9AD9286B0D3DB255CFFD3B68FE526C3761F72A45F842667C277B210F157F1C9EF5C9AC7F7A050C2D3D73C4D48E85E29842F9E951C07266AE96A24285D316D4F372C067B7480B663A59AA04FE75AA96AF5425E2D3BE0DB2525FD9348198465C7917856716A667503729940B2E7190281D58B3ABE3B96CE9EAD0BDEC79F7DBA5172989CD1A73CCB8B51B67214E19D0EF7ED4F2ED33A7D773862A4CB899F8DE45197B878866F8FFEF1ED73641A5BD58F7745EC17D84D42C980 -MD = EEAE70CC14EF975738D26B8E401DAEC77699DD68914378050139F1E26F1362BC527B564087622AB846AA7FE7B807B58B467BC53CA61F14E77FE001F201194693 - -Len = 1914 -Msg = 8821B2711521487594E20F09E0DABC97A5B5E29A37121BDF965F828D0972FE9386B28A37D47805308491811C8C1A4357895ED65C427E5AEFEA2926DBE7A909B8431D3B362A850A0810E6F30D7EB00C5A0FC8D933B088D8CC52932DC297B5CE2B644CF56D4DFDD59AB0760D5C11CC1A10275D4938EE0D2BD54AA9513D1B179587E77227703F0F6E66DA34CC1A0DD382B6213A6B313CC8C5CD75A956D027DA212DF965128933FCA4F7A2507C19E54EB6E915868C29A8188782998FE07E8CCB50FE433B3C2E66CD6D794A06E9E7D40AAE843D6700D1D4CC1D1C34AAAC811BF8489996F7FA81D6AA1954EEB441EE411CAFC0 -MD = F3118AA2E8BC999DB6FC7D778C398850715727BF55064E26E626A724E94AC23540D2031A357BAA95D8024A0D2F70E7BB4185AB625626770B9BA1F2436A0AFBAA - -Len = 1915 -Msg = 5C6398D4A6AF6BDA6C973B04F9E7E8A2800370250D1B5E9FF3595CC651BB246E73B0BF208E47048415EB6FB3C09CE3ABCB7C996C06B40E18EC35427AA1E5CF64CBF6F0C07B02E98EAC25C141ABE224D3989C3A34FB6EE68934875A40BE3BA10ED0BA7DFCEDE81C6B7555F6E5C9D4B9E92436E478D1169D436134F618201027B8131575CB8F057EEBA566FB8A1680072D32E60A978693FAF9FCBF82DB37B91F174FE5E88D625F2017B61B5DB7290FC6583C3C933B1B0A745C30D780AF04CE6E777FB258AAD030B3F10EE1B4FDE47026332A49B9C9DC5586133C7F5D69A1EBB0E70B841F72FE1AEA8A7A3D39E3C9629320 -MD = 833132EDAE7F992C57F5E3B674B20E40FD3992EC09D32B80C6D355016E7444BFD4CC12CE73F5DC108160EA001441AD9BBA73BECA50CF99DEDE994326ED1A2402 - -Len = 1916 -Msg = 893576B07D2B49F97BC412C47E1799E6C620124B69290F2C49EAE0739988CD48926A6EF536BD3B0C970A060426BB360FB5793C8371E61DD70C318A76FC993C77763963831659394322E579EFC766835F966B0CC188032C8B6856D02BB9FE5FD7C388914D72C2AA94331B4AA185DEC2B3270C6B1E5463DF02CC4C9ECCD42AD2934D4D1D821615F965348C0CAB875219A61C1E8C12F3343443A53A66699180153B0525F95D2E3A655278DBE91C09F102718A90B7D5A4ECD6D237CDB9B0154E373EC89B6C1C705275B999D8C9A1D2F1A8D075038DD4A98EE9E156715CCED4D859B4D56B41F8767FAAE886CF5E67223EED50 -MD = F1F767D60150490FEFCAF058FCC3DB24B2E3F215A850DE1009A5F45BD96CD621548DF62DDA36EEBBE91E7BFE3688C535AAF5148279E9EB99A2163B6B63EB8CBA - -Len = 1917 -Msg = C67B666E8F9A79D6B28AD45690009B68E78C65AC5B1D932B4CA91C320DFB4A5954E5E2994F9E52283229C62E91F030DDDA4FC3AE227A85BA7FBB96823EAFD70E8B98D299A40807451FA5778BD0F055B2D20FEC21FAB0D9A6D5AD2567A5974F399F28019F45964DDC7055A49676DA6E307E36A098C9BB2A01154BF7CF6D0981EE82C8EDB82FD36989795FD8638D7EFD1A9B96612AC7DE5CB00C29FF0280EBFE742D02C22D0DCB0702EC1246FFF5705C14462850E2F818A9FC8A596E5FD6C8BDC9B947BF76A5BE37C0727A8922A55D6BA20491FF4D6843EA0154DE71FD6EC129D38E2370124B5A26B47B247D1D7C3B1008 -MD = DAC4C20C8FF02FEA75246ADECB3C56997CC2D18F35EDD8B42E832DA605E79E55BAC7399DAF506680C45AE9DA92DD920CD1E7A9F908EDEB905163744247EDF8C3 - -Len = 1918 -Msg = DA9269FAE1BA9E76EED4C864050ED952DAFC19882DFF9A3373228B31AE0190E601E36ADF1E791453A1153B48EF19D903772E062E47F6D887341A213AE96FCEC5CB9C2022A04A469C41D06DBC71CBB5C6BA2583574878B84B62E368BEA0E081E0304C7AB441399702536AA5A17BB13AE368DEBDFB83F560E65C74630DB48B146166E09F3AA31D8B10F10F4670EA60EDC1632CA8580A2345C04173F469B249319451893A198640AC2CB0A7E3472A17A19169C371D9991D2F859238C4F9EFBF980E05F26F3C9E172D36B8FE61D4337B4E1AECC4039A4103E7D2BAC1A7080F1932D8FA4FA0A2075C56B2F6BA83B63CE9D39C -MD = BFFD6C881A2CC782AD268B8F8C296349089EC804EF8B4BDB661013D30D408116ACA050450ED5D32481767773BAC65511BF11CD02F89B8793A5F4CAAE5BE3647D - -Len = 1919 -Msg = C8C9D74ACDB42DAFFBA0B1734BEB5C54778D7970F2226BD9C8EB24E3EC1AC11E982FA705F0479C049A9B6046E85A269A258C104CF442C8156D431960D021A533D73B709B8D212C221AE2D03EE7A6182117A823A9E3F3B4CCB43FA0DBD5B238241CCCCCF05CE5C62C3762237B6449779635D992D2FB730D2DD382B2E61CD5F23F680F848A4162D80010E87DCB4182F192395D73B93A2040C0FAA3E404AA1089E40E1B0B08A7F08036CC5E4CE1CE90F1C10DE4BCD4887564A6FFD7166639C79588B763F95101A32AFB77F727C45BFFAB4C6238C04E837E513E12A88C74B940EF933FF7547D08B8ADF32F8CAD5F61C38DEA -MD = D98777F8D230E845A55F81689CFD94E60F986A57401698545722CDBFB21A352AE9133E4BA2BE1E53C26AFADF2571F129272367766A490442BB49AEA94CAC37F5 - -Len = 1920 -Msg = 5FCE8109A358570E40983E1184E541833BB9091E280F258CFB144387B05D190E431CB19BAA67273BA0C58ABE91308E1844DCD0B3678BAA42F335F2FA05267A0240B3C718A5942B3B3E3BFA98A55C25A1466E8D7A603722CB2BBF03AFA54CD769A99F310735EE5A05DAE2C22D397BD95635F58C48A67F90E1B73AAFCD3F82117F0166657838691005B18DA6F341D6E90FC1CDB352B30FAE45D348294E501B63252DE14740F2B85AE5299DDEC3172DE8B6D0BA219A20A23BB5E10FF434D39DB3F583305E9F5C039D98569E377B75A70AB837D1DF269B8A4B566F40BB91B577455FD3C356C914FA06B9A7CE24C7317A172D -MD = A43AE5DAD936697564AE1BD9B8624C5C31CC36607322AF40E253F10C285467AFD0D08252D2BAD76EFA52E4775C9C26761ABE38212855A80112FE02623FBF0A13 - -Len = 1921 -Msg = E1CE71B61ED330EEFBB09C280FD34A878F0378A0BFE2A046516BDA084DE38083ADCCBF42A6820DA5D46F1AB062B1CA433BED4DEE26F3D7A094F90BFB8A56EAC4064CFD3D5E5DBEA334D2984D4BB148F582B7CB64C82970AB0C4A947E28646E2742C1C8BC1C636FAA3A21216C2228E644FEA74B8E7CDD3DD006757317E1E5D4F2A67DAAD8D868D8831E36EE6BBCD7DF34FB38DF51DB43E26EE8E6C493057841F3085A6E825C4DFC8AEAC9A5B311A6E235FEFBA6C8F8D3EFF658639DBD957510DD001D2D18151118949B80B6BEF15F9CAD579ED30C3B2C95DAE83EACBFB5EDAD3A42C03DC8C8C7A713152CB065F28B537100 -MD = B2AC8B2753A3DF2D0E006AF0C9A0AAE60605E5566108C0BE4D1CAE1B0B9606196B9AF5B423ED99B474E32E781AB376399CBC1F23E8EEE0EEBCA6DC7637E0B3FE - -Len = 1922 -Msg = 3BCBD35851DA712C8C509A0A03388C743587A1C36055670DD0B5DD3144DA20CE739E417E7F197E72B91790D3B49338E667EABA7DAA04BA6046BBF0F1763787681BB487D690239DE655DA3031B7DD39EE1FF9C550ED6EF15E742AA0DCBF56D6A05782783A003E5CBFC272D3F71BD641C54215E8A6966A252F8D17BD5B208F25D7F8F91F4754D9B16184B333D2ED695483F99CEDF5224C4BF1F0F44323A9B3F801735DF8B284C072B4D7C3BFC31CBE1DB3FA2FB45A595B9C9FC8D98D8429861DB1D0EE3EA484C61F86877EC61AFE5DCBDAA38818EF002A4A4EE8305FB1109D3CCD222EC5F3B2DCF951A1B39FEBF19517B7C0 -MD = 07090FB6488708F4ED6C25B376FF9E6DD5CFEF950D803687CE5F3326A9B48072C778060F9CBCE22DB56975C97DE1233EA6AE5AB7A335CA8E6663129C014A67D0 - -Len = 1923 -Msg = 6C48CD3CE2E401AF5C680E91EAB0A386B90520022F017BF60A5B04A1D52E6618CAE48C0CC3A2D7F16848F9A372E4D0067E73E1183370220D73549E9C510F02BE4044761F82B2D9B227E059D3ED089BAAAB8FF61F65E37495A19C630AED17D8F42C5D24C109AF39E528856654835D0CBB2C55904EBCC2B95506EA73D11A68EBDDF0841F14092F2A4249EB9048BF7E26D4F929A0C26D1A8EE98D3ED6BA5D7E0E45E3A7C59435A7740D1D6D6BB638ABE271554DE4F7E88730BAF804F454924D33AF28FEF287FC6F50199BCB2207DE7D1C962D2E9555160D22DBE3C32FBB7733A669F8783F6551E8E5769B6291AD00CEDCCD60 -MD = ACE3DFC02E282F6F0E068A5F54E992F588CA60981C2452233C483E6BA1CC99C4011DC79A5951557CD8940594F7CDFE55B118930720CE2BF080F85EA99DCE695A - -Len = 1924 -Msg = C0F2D732005BCE3A7572AC90EC56AF2AA22B3349D2DBB534A4D88FC7C9493130E380ECF6B9244868F16DE465C08798D4D6E5087346C7AD26629C7075682DFA28D2FE387E99557A1C39A8AD790FE665B59EF80ED0ED784B30C4DD5645C9EC6510B358AEEC8AE20FBC8DBF0B2DBEA557CE15B223F33D9BB23E38927021DB61ABBD26DB50C4FCFB219EB7CD540BEC18D23F60748972C58F7F474EDD58384F1C3411D67ABC5B5810E95CD2648463992CB4EC6AC8EB63DDFF8BF6890A69B3249DAE5E7459A489A5B66D899ACC09525177E0DF731949AE98C327B942AA6789A6DA286C7285A791F0FB2D3EC42C2EABCADE008520 -MD = 9A6917C3CB32112B28E8F6EC2D66382C14AF4DBCA0C0A2CD9A0302F69CFC82CD8EFFEF340574A90340919EC15D0E51F58B5C5EBFEFA69EFBE0A8579013AB4B64 - -Len = 1925 -Msg = E851A3020ABB0B3BB3D4A4020FEBCE6F548F26EDB8CACE828658D444701AC43931402030EEF8814002254E64ACDFCE8DBA162431F032027A27AFA93F82F71946D97BAA83AB79703DB230367952819951C068FCD0E30736B9D69F87620DC3EADD25F31C6206D7BEB14D0841CE44DFB75E69346D96CD9FE9B9398852F71FE25B1CB25DD7B8A96128BA039374397EE4AD1B22789D6ECA2C1CE1F3A7E637E2C7E78EDC880DB188D7AC6886FA3576DF4957CC600CB66783D799E57B7C4BF7ECEA78A741589B2EDBBACBBB0489F3A66F14529BF20DAFCB831A885F7C35016B768E7F2434D68A941DD86599C7A1D412D4142035C8 -MD = FB3D2FD92E32E72AFF654A27883226952C7221BD162480D234568D11091211907ABAD7BD9A098232B755C191FBE237A59E7A3DEA15D165036EEFF2670FA03022 - -Len = 1926 -Msg = B5D87282661F6A707A64532CA1FB72C7B80B47989810A15618A44CFB71F07D53B24D6D80C45EC2BDF485743C835F3C6B057DA0769F07462D1672A4AA6896B047B2010EF16C54ECC74C522FF44227F8409CB86F3C8BF488739DBF89F5B40477C48914764BB98E4A03561D74A5B3C11324987F0986C191B00BC5584EAA710CD7A9A1A44B108E8367FFC27B7F9AB82CDA038D38E36D4AABA71E3D844FD9D356AF4B8AE611BF842CE819582FE64EE26C5DABE4884519FD1BD8646A13ECB0D9B0B6F42C0B9632BE73B2C45A8912BCD70AE9F5D576AE77C9A1CACE95DD320BF9FD252BEC627C227AACE9CDAFBAE0748ACA750214 -MD = 83C587A359D038C186418115EDE84131830CB95BF74E142C557C09CB1678A4D17482996A60A44658631AB9FC5855BB4ADB9822316B3E7CE7F0AB62B3FAAA405C - -Len = 1927 -Msg = EC432C662CFF134BCA2CC20ADBB5A8AE473BD56F229107C5F5C830E5CBC92DB0367677304E4AD2949E93DEF6B5DDCC6AC2783ACF8AD34A8F7F8CF3B8C79263AEB131ED8BEB2958A593868F5E8163216B363865693CCF7B730F36F948CED775D0FB1E6A76727845A1D25F140F3DB68F6D3CA9F6B4D2985831E3287DA61219530EF21BD82BBBE28089D1E68A4C3DAEAF574A5E91F15A68AEEA7836735ADA78A2C5731CF1129C94398DDC0C2B5AE53E8BFEBD81AE08BB2B91FDB36C770C36FC77807486F19AE716114F61B23202F7540BA27EE2F72658EE6F8E81F11BDA44921544E749EEAB9ECD5C7BF857F83945D3FF8F8E -MD = E38C92FFEAC9A33906D68B804B92B647A8894DAD24B42194831B8FD48508C2D6855D1B0862A5A71FD800458192EC0D5B995346BB5F839118770EB686A9F9DF85 - -Len = 1928 -Msg = 6172F1971A6E1E4E6170AFBAD95D5FEC99BF69B24B674BC17DD78011615E502DE6F56B86B1A71D3F4348087218AC7B7D09302993BE272E4A591968AEF18A1262D665610D1070EE91CC8DA36E1F841A69A7A682C580E836941D21D909A3AFC1F0B963E1CA5AB193E124A1A53DF1C587470E5881FB54DAE1B0D840F0C8F9D1B04C645BA1041C7D8DBF22030A623AA15638B3D99A2C400FF76F3252079AF88D2B37F35EE66C1AD7801A28D3D388AC450B97D5F0F79E4541755356B3B1A5696B023F39AB7AB5F28DF4202936BC97393B93BC915CB159EA1BD7A0A414CB4B7A1AC3AF68F50D79F0C9C7314E750F7D02FAA58BFA -MD = A5AC23D4A0D533CB9D8A68873F5CB749228458D43CE6BD0536C8733777B5E6E3F28FD36BFFE69002A0777BA74FEF22DE3FAC4C818B4842816C6094496F968555 - -Len = 1929 -Msg = F6D60894154B44006CADFBA9450BD0D46F297E634844235C322E7A06B2D1B335F69F4EEFB914B4674CBADD6AE48AFA1CD9BAFAF884417FEE5F36C54AF8C34B8AD179206BCB45BD858FE64A5E3884825E90EF29489DF07C69329CA1B4D8BB5E638ABB382D8255958057AAFBDEF0899A5E470FF7222DBAF9B66B1AACF9F407517870C45289A20BE83E673E96D0428B75C8C98A30A6FBB4D6441890ABC54C45529BC7E2C78F167D3D1DF034C360D101444798D0C9F1F65A3B7E3D9761EBB5826B81B749F716EB428D845C5D5B9F2BA8B263659B54FED4DAFDD2DE91DCBB0CABF7C70D827A37E0388EF87C90420CFE25167EE880 -MD = 1AA2883C05E463A6EA691F1BB4ED74C6AA650A7842A72B046A340268071DE394BA442CDEBD7DD3E2F1C48D57118A417FC37A0896AF48F3A162CBA29DD5430DBB - -Len = 1930 -Msg = D01BEC496170470B95E81ECE9EA0A39FCC640FDEE3DA2E94582BBC0D51C7E5FCCF7C10728D0CDE4397DCA66CD95281A998B6F0025EC854A0697D54E09082F387FB3593871F12B6642FBB302BB9AC82BECCD1BEE69ADBB25A82CB11A42D0CA2F057052286746BD93F70B3774E1AE0FCFDE5D1E870F0A0CB380770C1E352F2E9CB8958496EDF7389F9B894D7AEB78D6FC1933FBE6CA5938660C5EA1054EFFF2F17F8C6C082A9E776B0FA244020A0729BE8BD5AD4D683E9FFA550CD928E773588385CA8501EB7F47AD60D98AAC1B518477C78DFDCC2A680D1F596273972528CE90A68A8AE4D9D3152AB436003D684CFB83C9500 -MD = CF053E4220756DD5B8D3AF4BA9672ECA743D6234357DAA36C6D124D6402669F8D784D599260DA72B91FF2E0D615DAA4115121630B55ADA7C2AA1D95E6781D369 - -Len = 1931 -Msg = F83EF50679FA09197746549D69559A19D040EB7B625BB41CBE543257D605E3329B19B65DE3884B55B3EC22A899079DEE016EF3D8D2BDA07D85218E0D91D1A604B71F97E7C77FB0D4E685AE7FEDB7C36344DF1EDA1879139E0E723FE5AD4DF1EFB6BB56661591ABFB17C4C8DCBA76342D9547CC2B7F0B8EFE5C6704307538F1794497B01745FE00C24E83CEC5ABDDFD37422A898FA04F546F66529D66338E9C16D70C34FD4D5C4695BA79091F6EFC5504D79B078994CB12238D11B078F4AF709F3B7AFCA4345307921570791F755EDD739CF5CD846476FF5F3714F578DAED1451CB9F17BF8931FEA89D693275B7A0FD775AC0 -MD = DB59D0D773E6B6138CAB1AF566CCFC1B40584A95E10B04E2667EB7DFE0C5D7DDD0C806A0F4276E57A88CDE6F6516222CDDAAC046F78C81B5057F5D157845B317 - -Len = 1932 -Msg = E397D0A65D8CB58DCA01E63AFB0E80D42DD48A722C042CD0248155DEB09E4520B20E2CFC093B1D19B60DAEFCDB7D5AC389531305570BDD10F7CEC6F2B7505E651880EC29022E954062E220626FFC2D0BFA30E4F27A8FC90110D72847562183A5AEF08623EF14EC1F760A11544A536342107675525276A97F07B84EF89A89BC6585DBF79C982203B26F1C73D5620D5A5AEA82DB45B87E2E2D096C70593E48301F7D13ECB5A6803A978E709754631F2CEBE81E0B24B00521AD7D1E749385944064E7B437C18C3B5EC81C40844D3EDD7703DE23BBC351EFE62035C20D6C4A0C051D06B88A51C0594CCA1923FB389BF63589AFF0 -MD = 5D0044DF4E8B726E65B78DFA8ADDC36B3F88EDD64F1D8C53F97D624781A5CE8BC71AF4CC6ED9A09B9E7AA0A6AAAB8F3067671F43F944C80D4BF291F74B660E4C - -Len = 1933 -Msg = 41FECDC28FF9A09A9A50831800EBDC57E0BFA56A6BDC15D110EEAA608BEFF84B87AA7D18DBD19F4B9AB3104FAD569B49EDFE479E42ABD108A0B3B46EFAFBEE1C36A4C46545F26FCD830156FE3A2413689DA4453B28FACBCB6D77DE0C9EF7A19DAE60F9625A833A77A39A58A69F2EA4FDCAFECD7A6ED8A2DAED0B5D21E5A72F2D2FE57CBE170DB151919ABDB92266C5F3D36BDAA93FA9924E7010914D35FBEA35B54BCF1C9A2A60CC5C7874ED873EE98B0542A4E63A1A9D6735BFBC27D108003F0A960960C38EC286C560BCBA0FE2945D43B571BE0335D4E0ED7379047F35B2B026DC0A158E9387A04BF369E1DF6E414F27D0 -MD = F2CCDE13356905A35CC669CABB2301F435B998E813EA6268E4A31396795B0D063C19CBFCF7758D07B9C8D634EC8A3183F01A22AABEFC909D0E9FA5FB3CE11ADC - -Len = 1934 -Msg = 7A869D4DF91F80B8A8B95AB98D919C84D51708E420A44BAC3CE15AE2865D209E4473A25093819173B75EC7D2D6760CF177301ABC5ECE66658BC64B0DC64B83E9B609CCF9C85F3A2EE13B48E1D79DF6D56F9D5FF5630ADCC4CEA8B9E9414717657F90511F3F6DCFB04533DA5B1989AC0637501C0B38C47FB0059B7C3A5E0843D51B7F3D50FCEDF32B7667D82696D457AEAF9885B332390863A0566CC1827B29C7FFB8B0E808625F41672EE698A892DDFBCA2FAA5912407C9EC646B23E8A3449D47DA8DD3DD116B6304D75667880F07D5A3E71A2A06B8E8781F9B49B845E9A778C422853F303E0FF3326FF14300ACE16BDA68C -MD = 62CC55A188B37D21B162796F07C03B624044BEF9630FE0DEDB43A99F5677AF85B508A968A4E4B2161C4844F28FBC70C7478F4D94F69E02B6E4665498C211B10C - -Len = 1935 -Msg = 7DB18BB52773D68C0D01A7D22F43EDE79401EEA2FBD6B8CAC5A27C095B17D757423CF06D69653DB9E8AB88B0BA9D7FF8FF9A7127D53B75816B0ED9E4D418DF5E670FCD67DD1129003B424307794B74E9C21A43CB77ADB1FD3F31980A7C4D955FDF54F9DEF230D560E0C7A0DCA0D8F4E50BA443E5BE91211A16D94CEA5D1D5988BD6C6B09E0E80CE4C84B55D3F9F5E584B30E2FD7C42DA1F07FD717A8E0F1AA80074C8E69990FBCB870022719C70B4210F3D538C3E1F96428E56522E9DEB3A33AAAFD71D06A16F69DA49A94FA15E13EE90BBA294E7A7D0FE376FF4B07596EEFB517074ABAB621DFA2F3F8099A167D2BD601B4 -MD = 2BA961E0FAD3D8C4BD161AC0B47456B92AF5A1D4AEECBE7D4225A212258F0AD8CE8A4C4010C51660AEEB5251138BF7161681DBC0EE2C26F04E74A0DEA262F0ED - -Len = 1936 -Msg = 5668ECD99DFBE215C4118398AC9C9EAF1A1433FAB4CCDD3968064752B625EA944731F75D48A27D047D67547F14DD0FFAA55FA5E29F7AF0D161D85EAFC4F2029B717C918EAB9D304543290BDBA7158B68020C0BA4E079BC95B5BC0FC044A992B94B4CCD3BD66D0EABB5DBBAB904D62E00752C4E3B0091D773BCF4C14B4377DA3EFFF824B1CB2FA01B32D1E46C909E626ED2DAE920F4C7DBEB635BC754FACBD8D49BEBA3F23C1C41CCBFCD0EE0C114E69737F5597C0BF1D859F0C767E18002AE8E39C26261FFDE2920D3D0BAF0E906138696CFE5B7E32B600F45DF3AAA39932F3A7DF95B60FA8712A2271FCAF3911CE7B511B1 -MD = 07F3BCACF5F78816D515CEDF1CBBA4FFC58D83AA8687B0E7252FAAB43E7F59A7FF7415727ADDF9A22560ADB5755A2C6DF8C7E6DCACEB53106A714D807AAADBF3 - -Len = 1937 -Msg = F1672F20DBF2C8F24A2683F43D202D70C7328A600DE10802AE491FC2EDBD56B29138807A423626679B0F191F4948B1606C547A310052F325871F837C0DAF5B43485E3799952F53073D6823D0B69133619826DC50632438C65E32D7C11D402496FECA7553D8A4B93EB669D2FDF87ECD69E1E24AF18A3D8976BB63E33F48809673E390A151F0CCB0F2F551D89128F95B6B3697DFBABD98D4E176278B7034884EED380F5B0BC287DA7F28737A9096CB017928BC72B7CC603C1ED0B3C035FE49517F77EACF6209DDE29DC7495DCB29A8ED6ED86ADDA488B3D53685BABC734CD5BDBE2A9D4497F7B337A0B49C65496CF1977E356280 -MD = 72445B4FB3CAE3459045451761C973A6D1060F987688B9BDB2DF17051FDC16CB97018F2BAC2B476732369D564AE40731A42C7E2285CD7057CBAFCD376C636F4B - -Len = 1938 -Msg = 1AEAF41B963F4372F9E9B283284F91E257A93A728E7DA3737990BF7F6E62F5A504034AE08E2A4B13A07B78A950BDC6C677D740E32673583E0E996440ECFF6F6F5E734FCCDF1F94398E8D837FDF99F8811319DFA90BA5F4910B757F9926DCEB0896B08AB66C874B5A272E0E590803B77F5D0189FFBFBEF81CD305F7A8749C4F6FAA00FEB58AD242D68DE4B100BB2C30512AC79A3168D25AD0AC4718DE8561DD01CE6F38262B835728A85853486357486978A311FF1009082D4C3FCB7ED3E759AF2E7434669CF569E1326CB269BE5F51E20F1591143D7503F64247BD9C36C65122C2702CBB4A9A097FCC0367C0BA13F607F06240 -MD = 421422C9B6D9A533BCE7DEA7B8F705B48870ECCFEAABA47240BAA9383802AB2DB3DC88DB08FBADC74A55087FC1F573E44FEA971345773F231B467A3E0F3BA2F4 - -Len = 1939 -Msg = 657A2AE32158D7A4F49CD42430779EA1403B434ECAE5229E8280AB3154F2787840F4E3797682B8194D95E0D2207D3C68E7F92CB9F1382C4C79D57E0D78F801F32E77CA71A5982E1D8077723B7D7A96576108DB019F9DD4F314313CA80EDDA39BFE9AA9CC60C9AC776CE720F625842C4EDC3CDFF27C90968B7D5B5F51389C4B7E43636882A531B033BB25AF7747E780AD316E71D4B95D90974185D00DE7A07EFD6B5D86CF06CC49D986CF3E70574A84EA183059C565DC8D1B2676ADE9983447423586C1486AA1C2E0C7958C27075842BBBBBA68025A58D35E85B3699D6CDF95758D088C74ECDB5980C7BFE1AD0F73E1DEDB8580 -MD = D223B1EDA9136C0761929735D63B9EC3A65D67DAA78B19E0DCA6E4DDB1683589F5A5B03F98290CC2BDC74D823B023433BF6E35A418C1727D26D80B227B96A9E0 - -Len = 1940 -Msg = F3B8DFDD776558056FA3FF838F1A97119A5D7A7D5B351F1BBDE608E59CB534AC068A86B37B41BEE9CE0E032948542F2125A89BF502612A813D83E3EE50559724EF21B0F25BECE0B0EC3A96D207C5C34505F0FC19484AEABA1129293530148C58379E00BA13FA7C241761ECCB19039224FBA9EC2EC1F7648AD0FDC6EF0ACDDE258F76F97D8049EF1E3885E835CC9A93F037763470179AA2905197AB76CEB0E3FCD46CD023EC166932CB65B1C11F08EA57AFC68D536F9164CEAEBD654C1170F8901C26041145DA94719274350C86EB5AC33FAC19B01E2D1B178C0AFAF80BBB4D6784CA00F5D7D58B0BC6D9DA5043AF55176886B0 -MD = EC6C97A8890ED2DFA8F821BC8A4C37E4C6BF817A8321470D906108F4287612F182D33FC0F96AB51E85571303DAC1803636972F961A5358895F865ED8BB32F5BD - -Len = 1941 -Msg = 3970E275ACB10C4632DFE4909D143EAAE1E2F39720B73B695E5C71613088D7872165C98A6ACBF09A746C05460F33EE8E00B1FA46ED219CE5C8FA8788297B9E3C6A96615970137839B03C352204CB21489921F774A16E3EBAAB9ABDF1A19CC6321DD6EFDD25C0253403548572BB4417663DA33EBAD92243E6B9E8C0F97B13B884126262409D2A20CC01AF3EC2F238CF51A1E3D7ECE9AC4A98C0446210DB4CC4993274494DD452D46BB66A3A528713480AED5AF3FBABF6BE979EF50ED443438F795A087D400282B6E0B5B52EC747DA0E2C5EDA9EB002426689B115A37CCDB46D6440830B9BDCAA59078F62BA0635360BC85EA388 -MD = E363DC2F1FB83B8DC4331A8EB70B3FBC5CAFA97D0044DE763387829328E7E8B13819A8C29D4C29938C5B0C02593C6121DA9AE3DAA5CD929F88C7353EA784BACA - -Len = 1942 -Msg = EEE6D0C949C72BFE8F83AC35A5DBCFB50181BA1BB3AD4F77E2636C68E1FB860A6AA0A0C21B6160A2453478C9C0769FEB0E7E6D122E67A7C78CB1ABFD0BCDD569ED8094FA1024E78913423150E0BA500615DEC54846F15F9E297E8F1C592AA7802F37E8F8A29892BADB5DE3E445946A88FD67A657A69B6B9098C6A6CB08286B04D541B88333E59CEB78615B0E4EBB54896E956682015FF77FBCCA79B1F68AD3FC82C9A56E5A68C00E4AA795C9C97EC7EE618D6E5D977B9EE1DC94E363F073D02FF9AE85554DBD7940441275C082B560CC13DEB402CD8692EA6C4A690321EF275862821558255E73BD8AF9309B735ECBD810C0A0 -MD = F70C24822F61EFA829672CED774A40EB7169E2FD9960A63C2E58124B37658DFB48736E5469BAA79F580F7C8741E055F77D58697BA2D9831540EA9CE83DB29D7C - -Len = 1943 -Msg = E93187EA359EA34D538A88DEDF73F6DA1B62D445EA3C520AAB03D12B127123446DC72D1092EC3A1549E4BE4DC4BAF9D73511244D57A5D9218101353D3731D464510A74FAE679F346D9098DDCA12B9E3D23BBCF7A23617F326F72FF75F7BA6842D55D71A2220FD15F632225B66493220ADFD891339AC6C6D769008BFBF5A19E27D20627E16D5A445DD2C8DCC1AB54CF133C7109FB3FFCB6000AF08AB4A2C9161F883FC2A1FB7D0CBB5C748D6309660C1DA9E22ED9648E57346E02D1DD5D0105DA6413F4830A921869D869683E8D584175E65724B890CA53E7879F390C146CFD4E884BF681C58403944288AFA11B79ECA3F37F1E -MD = B67B9B59D55B9F806B2FFDD85B689D9DC599B3649058BF5950A1F2097326872C05BF250A599DF76D59F15BB1A68119AF52D21A04DEEFFD3E1BFDBC0E04815ED4 - -Len = 1944 -Msg = 03D625488354DF30E3F875A68EDFCF340E8366A8E1AB67F9D5C5486A96829DFAC0578289082B2A62117E1CF418B43B90E0ADC881FC6AE8105C888E9ECD21AEA1C9AE1A4038DFD17378FED71D02AE492087D7CDCD98F746855227967CB1AB4714261EE3BEAD3F4DB118329D3EBEF4BC48A875C19BA763966DA0EBEA800E01B2F50B00E9DD4CACA6DCB314D00184EF71EA2391D760C950710DB4A70F9212FFC54861F9DC752CE18867B8AD0C48DF8466EF7231E7AC567F0EB55099E622EBB86CB237520190A61C66AD34F1F4E289CB3282AE3EAAC6152ED24D2C92BAE5A7658252A53C49B7B02DFE54FDB2E90074B6CF310AC661 -MD = 13A592B73EDE487036C8816BD6FC6CDC04DC6133409A6EE990584160518F9EF573264CF04D38A3BA75D150F4F026F6DF8936E13C8F4F3ECC9ECBC43FDFC488A4 - -Len = 1945 -Msg = 79734C970C947EA9B10A7909CD077AF990A1305F88F918FCEFA11266A5C6B6DEB5D3D3C1782F0EDCDD3C7BFD64B4B38C08F75BC13210261859B0D062C777AA1A8140DACAA59260781F27777799C462E76F59499B18D7978B717955BAFEF3476C626952B91F9EE67C2E8CFC0F61CAD2DB8BF1198EEE8DD4B74AE5D28A4617091A1461DE098F5E1CEA67B7E387BAADF0BC08D3F8CB150F388395BA926F2C4FFE923DE7218093FF709C43E300F0DB38E79C6C07BD1134902E768A76FAECEE6B3FFEFFC90F498E2BC78757852F6D2B4CF9B3EC44C185B770B39D17482C5A547C4B4EED24748AF0A54553392542EF58752ACB832B9000 -MD = B98646F6581B0AEBDFF6635EF8DBB6387C14D6CE221BD5BDB5B00C56ABFAFD678CABDC6864D314D5EDA93C933CC5FF3B47DCED8FC703D18712B6986AC4CC431A - -Len = 1946 -Msg = 471255C92FED4F68F468A69B5B71B02D688EDA01FB0F12227E8B84C10C80462126D821118F4882633284574456F49C7E1849C5044191748E0162FAF81F239409751BA227BE04E0D890CA74FC77B5C5887101EB09761B445C56530011E3518659C1521717A9273CCA06A7F287423E9DD5FA32DA7FF996EC5A629B4D908A4BAE72FCB3CFB4F9F27128EC9E566BA59E907E54E2FBB8243864ABFB6FEF98CCB4B715FCFED874AC30FE850273E53D879E3B41D5946011C60D6C18BED388E0CDBFD8B55D25533B7308C5A7F9B25D56602543BB74481E142127CEF2DE20287DFAF62375606557DB8365B81EEF89CE7E1B3D4DF3F1B01DC0 -MD = 480E886D5C05EC365C15FF1DC20B99BFB871CCF2B5509B1B53D0AF9635B8F2E5DF5522E0F604E3444120E85CA12E8715E425751FD9F4862E36DD1639706287B5 - -Len = 1947 -Msg = F2A7F95A3286702B02DBA5DF8E6D9F76DBFBDB08A945A3CD202503158F7AD59D4A06F304CA6C1329523ACBCDF43B9419D612B0D1BFB9A764D0C1588C3A9302202FD730B85E38605119F9C0326C38EDDC6A126AF6388BBFE3BA486F4A5820974477259DCE99678EF608871DD08A6814001ED99CDEC13A87650F449DC7DA3F476BF19A5FB0D88AC65BE45E5A8B94CFB3408C371B9A4856099C1865047272F8252A69E0B4650E432084FB53E1E583BABDB8896EE9F7E037DC96C87787B5CC4F504F8C3E649139EB5CD2B4292EE5E5A31C7927DEB948CAF5F30CE7664702DE79537A46CE8C5EA95B39BA1A05870C487E781D9A549B20 -MD = B0A3556FA6899E7687D2DC27275BF53C79472A7CE5E49C50749FA01EA4D2F12C36806EBEC55D730AF83FAC29D81EC23C0983F7F29225ADF0290A004998152428 - -Len = 1948 -Msg = 11281730B07493309A2EF913FBACA2D4277B2A5D405925839553C7363B2DA90C60A6526AC86363CE6AF778A0CB7E4A1D9A7DD75E16A1DA94702EB8EB8382BBD0389D436D05B8EB303402290A43F240A999887C169B8726B0B02956751A6029C8C3BB2C07AD102B37A0C52CED9220B5B0FB1A7F985075C6D4C06500187092E09D8A9A1749262523196A42CA1046F01378550F60924084F6C9AB24DBCA521E7D6957411AB83B9FD856A1E08D9725D363F28B0CF032BDAED78D9121099366C7A48003092B3B94E97EF04512A9CA7B7968DBAF134EF08DB292658F624A54674FE7CB79F2BA47D90093C867F4F06D33144DF9E5BE1370 -MD = 7DB3D75B8A394C2CCE3EF1FE2D86B558D06496E285ADE89E9664C5258DD5B249BA14EF29856571CEAD040319F066258C255D9935E09EAEECCB0457CF4278CD84 - -Len = 1949 -Msg = E5073AF60BA51D98E8645F20A209416A2391A365A0B3A78A3601E4CD1130FCDC846B32622475A9B601AE33C8FA463D8D152C0846040A9A4BB0EBECA1B9258111E886996049F421133C7D21F2ADA0525A06EECEDBD5ED8FE310D34EF8C71F27C18AAAAC2EE1E38BB080851383DA7A684699F80C0A7BD51A0188311C12AD5A058CE5540ADFA3A425CA5D1C00EDBBE3A5695AD08258A796642220C5D8BF9144B351C3B5753E7EA77D46903A4733EE24B4989D797E2FC6A187BC0AB855CE71A650A13BF4B64BF5AA6DA142320E1367D37439E99E2FA95DEF311F596E682A01CAFBA051D515C31823A93B9C71970843568C379C073578 -MD = B8296A7C237AE10772141AC46C270D8B0847ADE6D4181E7CDCC6016C26C7C255D37A781C573AACC1C8361E4FACEFC60C6DC007A44B4DCC3CB25BD249C26768F3 - -Len = 1950 -Msg = F5E87603D3DA08C7C37AD0FDDD62337B423B6FB0651236F818458FF022F7B9FF714E352E196C7DDA164708FE21ED7223CC0C4670E3BA27667ABE7027BB471562C83BDC247EC9313B9A7E5F5B17DBC3B39B258954814813C427A9EB3234975DC3D3536AC42FCAD7C18435FE32A5D5658DB28BE1E61451137C677FF36834188EB6A6631FA27B2F2292FA07386B3978462FA263EBEB85CD16F30A0835512693AAC397C55E401808B124B5C4D1427E4EAABD826D74824C036E857250FAF95BF5011FAA9D7EC93AA84033518AE0E2C283DB10129B43E9B33D47C6C7C8909D58C18EE95E19497E387ED9646826EA2958A7D4BD07029F14 -MD = 05AE9455001AA5E1C7ED702A6FF57952DAF2F40D296A2375078E02D6A4C4F03C206E5B3384408A5F1BC45061F1B8C3158219D0DEFDFA3C1EFA4AA8CC420F36BD - -Len = 1951 -Msg = 39696823C4BCC5F0D504B14D276F56B130AC9117288C81B6A8DB585A8CC436D300DCEA5C85118F594184128BE8D80AE307DAAF60E42418A34A626D4CABD960451656E60565B6519DC4857FA9D11D2EF1D5D162D95AD2C7C806218A00A7D8B71F0C6F2106173D95C77EBC8922A9C81816283504036697EE9915C39F844E2BE638D6591233A87995F98CF3433DD47D0A4613D6BA67B4EF77F855D31659C25C345CD6FC3ED635CC443622821977B46D56EB45062D4508BA1210F7A70FD01A2E03DFA5134167673A31ACC4A42ABCC1DC9AF7A409508F43D99163F604F3A32780EFCE330C03A1CC9BF5AC88092C914A23A27A96E5161E -MD = E1A5A3986BCE97576D1A0CA28D5D01CA2FE76D9E3BFE8EDA80D5F23E516FE2DDF358B8C7182036667E1858747D9A78EB49A176410523881EEB35743E3DF1B6B5 - -Len = 1952 -Msg = 2EDC282FFB90B97118DD03AAA03B145F363905E3CBD2D50ECD692B37BF000185C651D3E9726C690D3773EC1E48510E42B17742B0B0377E7DE6B8F55E00A8A4DB4740CEE6DB0830529DD19617501DC1E9359AA3BCF147E0A76B3AB70C4984C13E339E6806BB35E683AF8527093670859F3D8A0FC7D493BCBA6BB12B5F65E71E705CA5D6C948D66ED3D730B26DB395B3447737C26FAD089AA0AD0E306CB28BF0ACF106F89AF3745F0EC72D534968CCA543CD2CA50C94B1456743254E358C1317C07A07BF2B0ECA438A709367FAFC89A57239028FC5FECFD53B8EF958EF10EE0608B7F5CB9923AD97058EC067700CC746C127A61EE3 -MD = C2FB590AB74E230B8FE159892F94DE04EF7ADAA02B918D4994F996538D257F5A80C9B3BE8F410170B0C5CAC3F507401220881C5E08D8BF0A13247170D39085BC - -Len = 1953 -Msg = ABF669BCDE5C63620ABBF5E74E8C613BE25B9F7DB855D2485FA0EAD7D46FEF857A755DA6F1ABC1ECE8E83213591C6EF5CAB3C346DC317332EB35A0127F1E833A945BC260FBF9404ED8B4A75B2A2C9D8CD69661541873B3500847861C803AC25208FDA7E896DF7B586FD018EF021768F43AA5EA0E5861843AACE2847263813BCA7CF762E6BBE72468A688A0AF80E9A73DC11C74524A13C0E8B592EB8077F18AEE77D0F106617799187EA3512427126B59904A5CDE4AE6D20034B6DF59C21DAAAEE7BAA7D99B13C35B58BE23406CC1D276A65042E9E78BBF42DF8AA602DB2BE09852B8C19700CE0D7519948055EBACABBF24EBA16E80 -MD = F9A81FB55A9F4479C4A955C043A6BD04588EAAF98087EC0D15B4463F34B94F4080B814EEA4B10A09FA45D3165D34D6B5B4D87C9BC18884B74CFE9A92AE677AC6 - -Len = 1954 -Msg = 16410D74CB95F744EEBADF9BC50688811C4AC9131DC59AA3761DD2DAFA8A2C02E3E4021B613B3E971CB5ED40ECD2161B3AB9161D8E30F8A227F497E8721A88D67FB0712639823F824426FBC1FF08E27DCFD4474E54F9E6B4EBDD57D89BC3D5A847C55C2AA1002A0C0F653DD5971772650B4A9AF6B2358B5C5845531446AE4DF144EAAB797BE5D990E22B7DC582576C4FF8ACB3EED02B96948D252C66E8C28F043F9D176772AEF45FFCB61C85035ABE67D57E9F4EF7BAD93C39B4BE09682B158FC43A591EA7C06C456F6651D2C6562E1B6086E7A27B135EEE694E3D2AA07D13343E7BB2505E15FA8A486F114E1F5DB4D8D4D8145600 -MD = 2368517F140222A3F19545955798E3FC28A3355E7FAF661BF1640A57A40449E7D11DCFD87BF03CA031BBDE3AC092DA6573F3906A0A49FD5B32E530311F29BA92 - -Len = 1955 -Msg = B9E9D8B68C875D73D858308A6605688E6FE70FD52893AAF1B7BDC413892E3FCF4A43AA4CCFD985E0E73EA2AB52545B2DF7170E70FD275649651A0FE095321E878087E256DD3D9A67CBAA1845E7384F704CAC79EC12256CE217027F27536E36F8CD4F12F862BF5AFA786861D27627BB3AC4460426CD2F1E847DE9C72B20607158189BF77F2D46F22CEA2E4436CD9FDFF7E296D6864F47045F4794DA08F0B02D370296E206C16FA311CEA6E2F6272BE995F81B291B70534EE6D8932B606219784145B50B2C67C67CFF06AAE6294FBF282780CCB522B61E9DC2C8572782FA3B90981D63280E477E6D920B6249181206136411D859C020 -MD = A565DD7FD8913C984F393109493B7A37B4D973F126C8F08C2DA3A8098C10F08C30D0CD760F5CD50495E5BB304D61DC3550790B39CC91C77F4F0A99EF09B1D9BE - -Len = 1956 -Msg = E71727BC500E230A97CF57873E425E5901107C83F1448440DA95F4018D51C486FE25C39EA3D361E199DA66198851532D3513A9F74236BC02F0647A292A57C33CCA61F4ACCB32890BC94894EFE36007E3506C1E89D495B39999529DBFD62ED78B8642E1A7CF4D478F955D0695CD506BD7368675100C35F12D679B6F99F9E7F57506F0BF13DF269141EF5E746D57FB445F3C2F3A95F7AA55378533165DDA3748F8E804C45088AD748CF2DF7E8E5ABFCD4A36B0656D7C84C231F3F38D7A50F3593BEDDEA2D8414C1EC538D243E86AB1E51015DF0F0C535F96FE3C63604CA0BFC30ED6EB8AB18FEEBE0B18FEFDCCF202BD322277461B80 -MD = E5177FAF915E74F26478CAD4EF2970351BD17EC159DC25693FED4DDF95A99FD4F8CA8A23AD5E5A71254A0E81CE7CFA05BB91213FB035B3591C1E7DE9FD20FBD7 - -Len = 1957 -Msg = 5EEC164C54FD4B1DF8E215DFEE8F22A9AC70FF7E96D92EFDAD389EEF1F0AA918DFB4EF1D714989AE6BA1DDF9D87DDC8D04981E6DB5C3AEB569E9122F1F6E608D44F4661FBE39BCB9CB9A6968F7670FFB67BFBCC2B328D3C315491E7AE9F8E28A501B28F58D9E6C261FA7CCA6E756001217F61D561EDF515667AEF88E6C7639E0073E7DA6FEC27AD73D8ECDC408B0448788289801CFF6F4322541FBBED19FD72D5C6BB2D3358940B40AA59E1753CC8278A479520BE1C567A480D62BC75AEC2B656DE8369E2A00D4C426DD556EFE3C4531C8E2E8020862EFCF01D525A04D7355A56EDA0D09EE21C3AFE10635E824B9895E9C723259F0 -MD = 550CBA2E3A32B603458CDE05ACBED977D557F4F17EF8E08302DAB5B48F8B58112F2CC8A653A0DDD20DA1DA8AFA4858DE51E5D780B8F15AAE97CB45FAD3433907 - -Len = 1958 -Msg = 948BCA040669ED34E540EFD1CD355103D23B4453AA59908627C6F3B21CD0F5B0E06E8C90CB4DAFFD958A2257BB2352A6F20341F6475368E17833DA438804740AB547142D3C62DC9EA8D335CDA93E2BC5938AF59F7A70222F2BE15A2F2341F92BB7A4BC92BA10E16EDCD7884201E44C87E74F54C4B210F40EC00C046A59AA165C88DFA6841571F86CA8A3EC493EA3B20781D09CBBD1BF3758FFE56FA23ADCB16CDA95129EB525CA86AFD9CEE8E0C76B3AC30E39AAE2953D7E06DFD566B2B530D8CE4C0844193775FA86804454BEE5E97E991E0CF5961F934B3BA2B34B731DA477AD033DF5D5BB944E811B4A9DDDE5AFD0971515CC40 -MD = 3E2AD56421831A6EFE59EC4BFAED5219CCD5CA304A63F1935485235C4AB04802D0569B8902DEA13784D884BAA5902D19E5A5908699AA577E528F1B640B433632 - -Len = 1959 -Msg = 2B344C1DFEA8F82F33004C08B3C41F31B584D250684DD642BFB736F6B47B6CB8A0694BE038469FFED59C97303CDC5B8C8628159C6D4A610849CBE034AC2B61D1CC3B70FB8E19A6E4408AA9040B0281F966AD20483F617F06F071C1885F37D0C539B551D0E8B85CC17024BF1EF07D98812795E623B426BAEB12E4406625392E10F598E257430B51A4CC1AA6EA1D9BE8DD00E826A956584BD56530405739BD8BCFFFA43A0B94E77456869E730CFB7C674F1BF78FC3B282C37E16BB45C1C6664B16322265FDC9B1F23410DC1BC83CDDB0A4100A24DBB82981CF81025761CA8E69E8A5D3FBBCD2E0BEDA902B6DF7E621BA1957CAC83E56 -MD = 6332D5A160D29F2A11785DB75BED10DBF457A926E3079DAB8FB26F43B200CF9A23E86048F2AF19AF017776DD3EF151D3A2587D42F73C60980747B6B30ACB8A05 - -Len = 1960 -Msg = 90B28A6AA1FE533915BCB8E81ED6CACDC10962B7FF82474F845EEB86977600CF70B07BA8E3796141EE340E3FCE842A38A50AFBE90301A3BDCC591F2E7D9DE53E495525560B908C892439990A2CA2679C5539FFDF636777AD9C1CDEF809CDA9E8DCDB451ABB9E9C17EFA4379ABD24B182BD981CAFC792640A183B61694301D04C5B3EAAD694A6BD4CC06EF5DA8FA23B4FA2A64559C5A68397930079D250C51BCF00E2B16A6C49171433B0AADFD80231276560B80458DD77089B7A1BBCC9E7E4B9F881EACD6C92C4318348A13F4914EB27115A1CFC5D16D7FD94954C3532EFACA2CAB025103B2D02C6FD71DA3A77F417D7932685888A -MD = 02951596A13A1A41188A4A1D6346F7EAFB60A2051EA67C63237D1A9B79EC4733F33ECEC223DEDD946B78387B6F2DF5E9AB6AF7DFBABAF80F4FCC94FA087275E8 - -Len = 1961 -Msg = 1CCACD735B6D80BDDFD9F35303AFCE91279D5B500DFF2A3E43E0DF18BC47A47EF28F25097DB8D0D46A714F4C9E45819AA6B76D0CF93CD40C58EA79E84878C8DC3C8235F13DAF55E1B0FEB2A8ECBB6F58CC64E5D2150875E9732154F6FDF18494C92DAB65DBB8C607E91EA876A0E69DA35EEAA2F76A006D8C96C16C58E0EBC4FBF425A36BC1D10372E30EFC4AFEABBD8A41352F8905A8B206A7415F970381B50F555475856C0F74FB68F4B20F53C959C7D4F8F9C6C4442890BCA2485FE72F1130A496EBAF5D1BCE106B1CDA803C443D0069E1F9B00F2CA2DD2FFF9BC3B72970C27F7242E23E44A992D77777E544BAD9E3FC0E86498000 -MD = A22E45114F51BC1C438AF3829189D149FAAD7ADB9A7F301712EBF6B926F642643FAAE8821804D5F187DC8610D53793341B4D29240030FB1970F3874E59005EBE - -Len = 1962 -Msg = D7F33625BF8D38000F44C468F593E88028F26DF18E25617735C7AC39B585C552D1CE84C84F75447F9F75A38115C0525D65D60786CFBDC9B11465BE38407948044BF24F6010C959FE222E86285FA829F118DBE44B331C7973BD32A5821A303078454A8C694BB36206A0EBD9186448451E65476164F4D8617DD55D52309738D7E3EF91BC21FD4D99B746CFE60236D44B53D17D7E28CB09275790184F86D71CF52063130DFBC615CE0EC7F7A2BF9E993D4C5137518079A29D75F198904DB796EE3C5F9814F4112DF210A9967CDB0571E353E5F7AA5B472B725B156BF43860F8C150A5A8F6A545AF9C3ED4F48BE4C65F961EB542795B4200 -MD = FEE4B4C788F35F98D5F15202CFD4E344D3A38336A24613F9531D84E001144F26FC188E33249DE4044407C59FB7BDE6C4272B483003158D5DB1CE7D968BE58C15 - -Len = 1963 -Msg = 94174FF8C5D36489C7E6D98198D1C7AF45147D146FD3ACEA280A7E316396605E822ED71F82BBFCC51A235267C58CFEA72A69450287CE7F3F9B915AC11B18558890F711D3B6DEEEB362AD037B39A79C7D213FAD77DCE5D23BD1A335D178EA70636DB86988E6483A6D0D9957EFAA944822FAE8C1E70ED42BC6ABAD56E93876BAB5F3BD11511B51A44A6A44965E65A45D4334B6A44050C86318D1EFC235E443532582F6EE13CE5DA824CCE76F56287B5C6C3711EE99ED602FDCF397FC0B629DA4805AB7DFF1B503467C1732D77425C4E31549FE21FBF5FA67CEAA8EB9B8F44202C4CE0DC0CBDDAFEB38866BA57EF156371A809B21CE1D80 -MD = D4EFB9B3A60BEF8EA79088901ABB38F43BF49798C97173DB3850C9A5A8F706090DDFF5875CAD06D316C10A87F554CDE3393B30F84015C8A5862A8D2906976E93 - -Len = 1964 -Msg = CD5532D4872E63E8DD65445D2DFF5E5F98F5AB898C51BF15F3B81BAEEF33FCAB207DD00CC4489D0C6C1E55582793A7766677EF55004D12E642F30960237F733B5C0039F2EB395671B006B694862C1ADFDBC21F7BCA7635933E58F8ED826EEA0340895CB0C9AB05D3E8F70CF561F27E794467C9CDF12AC6AAD70925F3F192140FCCEAF88A10528C39FCC14F5CBB3F8394A576FF0C2B98CFE390F7645C1DE0DDC02D3FF1831F7047143F001791F7C9753D8900F554AF61BE43A4553F02860B2EDCC4EACB5591B05235D299640654A5EE4A38B5DCE6447C655DF36C82602FB9383F04B1AA6FFB495F101B4BF9BC55607027A55BBA536F30 -MD = D77B5617D584D0EB95076128BA306A9CEFF19A573C2E4823FBEC6068401011F828CF81FF40B9D3F8B90795F39D21B05E4913D7262DD144EC9F2B2B8426A40EDB - -Len = 1965 -Msg = 6EA799C47249BA1831270FA6B7235587C4F04527EF854290E156DA1C494DE0E65A5F6AB9A257DBEA55717A3D0D127944585C5BAC713D35A6AF8C8FCD5B0529A8684F6AF238FBFBE31149734EDD251FD4AE4148073E73157F1F7CF6EAD5366B6AE389D20EE9F1AA425E46C509C9178F83EBB697AC71439A8B9664810499315DA0B01DA01752D78D6C0F111FE5E4ED772688C70EC6652C29916247C95127AEAD9F585FFAC7E2AFD753F8F8E7EEA44C93377FB945BA6817920A8D763D069E73B0FE1B7059B88C43C3DDBC1AB94BAC3A718AD48F72F2E6303527046BE49CD2BD452FFB3A1F26673FF6B8F5048AE41F9DDF49EF9522496408 -MD = 4816C30D142AE6418B8E060BB8984655022B7B2CF6DFB29E410E4E37FCE99B2BFD052A70B1F177714B9B6EDED780E141B0BE1DDA2ECCB3CC8B3B9E6B5321C62B - -Len = 1966 -Msg = A1F22C756A6CB226E7FAB31F870A4E3721035F9F592F429D56141D9B73DD7A09BE3DF7AFF6DD16E29C01BBE00CBD4F4D681EDF5E2173B51F17F8A40F54E5D9F02CED20AA341FD48C203874D5EBE485554221A8C4E9C20B4070C688443A48D31F479B564071AC2F79CCBAADFA8C432B61BF9F767AC5BFDAB1E747A1D8ACB0761ABF58DD8768F1F2726C97ED5936B0629E3E1AA1FB581845179E5542F84523E3E71212E1B3B6843D9FA31A2B8C6FFF5A71B3E37D6F1F6A9A904A500BEA9F9650D0D6F6E9448FA83BCAB431D26212E057002884BC55E908F59A90275C5E3E53084260BA75C3955FB76DA67072C20477037BAC0159BFBAA4 -MD = 3971E2F368096DCA3B79DA53AADC531B08582DF2162184DC5C9834379ACCAC9204E57FAF548AD23FB65B3E381D05D24CCE738EF854A2386E6330664F31AC6E92 - -Len = 1967 -Msg = 81809338942312D6009885462990E428637F38E8E692E23635B052D285C393B1FE82421747432266CFAEFCC25233A4BD1F40B95D1244A73F48F9ED0BD418409A0EE45041FE4E800C1AC1A886FA26E91C3375FC9A443D4C4791BEDD8A562569A5EF11AD5E5FCBEF3CEB4C8D6D7CB62A5CB373E2FDC17074345A5E51DF0B363F70DD7A286685489101622FCA652622ADD70013C694E3E0167001175F10DB2EF0E442071ECFFA676DC3EB76D8CCADABB493EEB209967DF3A526CD606795D3B52A495ABAA26750D6805169F81BC840C7E7398BA977AF73AC0664384313747DA5C09C312EF2594F28F38B00A8FFF56C55231B8EAF0DCDA6F8 -MD = 3FB16C09BB14773B511DA3B55AA552C2410A01AEE8AA0F5E90102DF20B694D0C8D56BA361759FA84B840D14B4B6C1B333915C675A6D824AD7FEAA1D702162004 - -Len = 1968 -Msg = 2969447D175490F2AA9BB055014DBEF2E6854C95F8D60950BFE8C0BE8DE254C26B2D31B9E4DE9C68C9ADF49E4EE9B1C2850967F29F5D08738483B417BB96B2A56F0C8ACA632B552059C59AAC3F61F7B45C966B75F1D9931FF4E596406378CEE91AAA726A3A84C33F37E9CDBE626B5745A0B06064A8A8D56E53AAF102D23DD9DF0A3FDF7A638509A6761A33FA42FA8DDBD8E16159C93008B53765019C3F0E9F10B144CE2AC57F5D7297F9C9949E4FF68B70D339F87501CE8550B772F32C6DA8AD2CE2100A895D8B08FA1EEAD7C376B407709703C510B50F87E73E43F8E7348F87C3832A547EF2BBE5799ABEDCF5E1F372EA809233F006 -MD = 5AA4E32F0EA3E853929BF64ACC9565A01300BC007063B939F6DBBE9CAE0545EA95FBCAC32575AA0727EE4D937071E6B3BE74E23FE76FD63EC05C7F7D8A407AF0 - -Len = 1969 -Msg = DBD3544D800AA1089CBB836C48569B2E763E156D6A8F09D6BC6744334EAF929455DC50F1EAFECC039EC10539DB8D8695A60FB242C96911FA4A3CE955BC7A46C4F057C58B93633BF80047D4450D664461C5D3D4DE011483710E847AB548BE8C9D70296BDE75EB478E34FFB1C90672435D4DA025C15EA940C8BA6C2C6E15FBC13244D706395EBE5DC90D48A9A4C9F0FF0269E7DD3B352CFD0AB10BB88C4C5CB8A822B31F1541486138DF7B212B522AE091FBEEA721E63EFA3000487B0A52BEA62F15ECC44A2BA2DC8814075CA990A7EC45CF73FF21E7A0B4ECD683368AA32032471DB5C80FD3EAED54757BB930A52AE0911940784B2D9080 -MD = BCF2DB51C3C326F0B971E4FA93F79ED5F26A5BF2B4634A44F7D954B5BBB5F48F8C2AC3958C548C4739DC1C2A1ECD7D708ACD6F85D23998B34B2D532CE8C1BF44 - -Len = 1970 -Msg = 0DCE440272E7BF0E8808D973FAB447897D8E2437FA6B38F5738B9BA24AEB92DF2AE7ED077BF290998AA8A53355AE2B54BE1834EB453380DAA81C8A9ACE210DF4D5D9A6F303C1CCB3CEE10AEB826AC172253869B56E95E488D5E315BE56BC46F7572CAE284B6636B67A23986F35D02D01E28A092899852CCCFA3AD3575FCBC7376BB2F6F7C76177C066ED0C1E656A21DD2B8AA057BE4417F09B81B94C17EE37120426FD2FC9C8A146C85CA6D6543EBFC658D408DF7D18F1987AEEC78E8CD011DBA6DFBAC87D9EE4756759E15A92A9177AE040F5A2C3E92FC508E4F3D623D84F8395C8BF68DA80EF9257E74E192277CB1DA02FE0F8662B80 -MD = 1D6E6AF057B8B129A3122290BB98DD52BF0F422634B946608A9A93E24FB89F0AAA5151B28BE4EFADC0E94E6D34F5A9821A2561D895072AB009F2A27B5B8EABC2 - -Len = 1971 -Msg = A2F6C9FFA8253C61D6C8F78BE1237183E4B65C253EA14132A79DEAA81EF92F5A6C3D9F29B0F938E3EFF71161962A8ABA2FEE2BEBD3A02F8573F92525F5A98022C41D3D4984941E04D02040A8483F5743BFBDE3D622F64E53CEA89B5A237F1027F6D27A8B4046FD5366DB8F4CC056C23280B9AF8D7CF39E084E42762C4D3175D2B8CD9BC78229894CBA719201F4DA580034305AF981E57EAA123FF1444CF930AF1DE2EE6171BE5269C714BA85D15E6D69F42BC3448D993E82AF6C3372B0585CB51E39282CC5675677EC7F09E1890BD98C2618ADEB7C5BBAD4EB3FE58ECB44F8A4F8255E0A6129D739A757E79CCB39EE6748BBCAC21EBB20 -MD = 67998174469A442DEFD199EAB680A8D948A85F81D1BAC5AA06C3C8FD7FA78220D05D07FFE18D566D8B6E7E7050BC357D12FC1EDC47FB886779134531C8558D4F - -Len = 1972 -Msg = 3B9779B86531629061CFAA92407403174AFC68A88CB78D3EB1CDE576BA91E9BCD160CA18C43C1C16F9ABC6C391C05704506710FCB8D0E2E42EBFE764A53E78721B1D2113AA21127BD90C263D4B4A8AA4FB2635D29EE4EB6FCC3CE26BB0B14926F0001CC3712CE5E18E21116029ABF3F61E72A7FC2E5FEDE35741E86CFE51444600302DB629893F0731BF6D2884AD972F36A53F9982669EF8E9792E7FE4FCD456C8DA6AD11A176BFBA5C0C6C0A822C37D085A610F9510F0560935961BE285E80002A9D178B9ED01127463B72000E61B1A146E78B815216114F777041CFAB127962D0B1159DC9B3236FDD03C2C401C842E99B9A433850EE0 -MD = 609E474F042CCABF5AA284A22CF2386B0B4A49C83DA73129236F24F227FBC8328842BD3A0E75007B64F4A16609078892525063B96938CB58039C0D726BF99A1A - -Len = 1973 -Msg = 4460F6EBE4C0F0C89A96962AAAF68A01064C41E45BC3B0C3073F09319F29EA541F1F43F27008DED6D1EF1F0386FEE37C05E09C68A51849C22891575FDD0ED0E632EF818A875EFDB7D132D6E8F16946BE22C6294DA34288ABAC37FE8CFF2E5BA5FC79E6D5FBA3418F6F0683F3BC4B8D1880C5B7A716593615ED64A1A84FB61B5B29FC773701E6B60D96F4CA628ACA5A52A490439FF6A29855EA58D7D118BD83451AF3685A216DFF00A8179237AF0DE8D847117A6E834AA00DFF30748F31643D774EC6647961E446D7AAEC1CA5C57FA205C3C66F407A4F629A7A2DB1ACBE20BAB9C41F6019CCC2E07CB96567291EF53878BCD000CD1BE3C0 -MD = CDF7AF0DAB7FFEBBB9123FC8ED56D1DEDFE57286960E4F57E5C044AF6851263EEBF0243D6F11EFF6560B34D9D44163F84239E2910124AA7A73BEA63F8CD8CAC6 - -Len = 1974 -Msg = 7765B5933AB981AD4263A6313B20E75F946BBA84B3DA7FDE2C108E1F45EC9443EB2159E4CFE6F94FA71A46E14F6A31E87CAB6A46877DDF8F8E19E62621D27B2FCB05FB817E9B325993D826D92CD1711A5DBA1315FC53784B0558873CBFB903447E2A24E0CD84A84678CB9CABC4189CB8FB2E1AA53E93DB4DEDF70CBDAA402336E5AEC36C5316D124DB57C4FD68B63CC46016DEF71D7D8D04E988F1B3731F0822AFC717A036A54CEB947244E208A21E4D61FEE25A5CA55E6F7DE52A95629F379CDED7C9D5EED4F44D215FA6E62BD55B390AE5503EF2666AA564DAA2A4122B64B99632DE6095EB1DB5B92BCA0AF12E041B7939B96B8D3734 -MD = 0EAACA5597FA196E3240781FD324CA82DC7453E938593EA9AC60A80DF9B633536DCBF9F345D9F49A9CF8F3F8F08F70DC7176CC02457DD5B156B289E2033EBF02 - -Len = 1975 -Msg = 17D27BCFC84896AEE10DF3866AA3D8A18783644307467341B3D585A544ECBD50573710C72D2C2639545EF16BB6902505A556841E7141238E5546384DE52F1E3F56FA342AD0A3D6315BB0565E67DDFE47C9574078CF7AD385082E310B3E14CCF9C32D0F1CB69D3A19668288425287263A899687445E4B5A791186494422CD40ACDA3876E51F8BF77BDCC709864F60D15A73DCBA9DFE257A30CED49A76724643C5E8F8D75E5B34066116DA94EBEF91C52AAF508C8DF1EC5F982227C95F7BC0CE2BF0A712AD48F7E862C61FADE2289866650D311D4213857C4ABD6C2CFDC1C89C7C450951E3DA5557C0EACDB218C97958F600DC7B22746CC0 -MD = 212262B0FA9A99138F3BFEC8097496AD0A1EF528583DE53629EB43163AE5CDBC4AB6B1CBE2E17B1D07010272B25A460F2CAC7AC638B831D8031FB388D78AD46A - -Len = 1976 -Msg = 721645633A44A2C78B19024EAECF58575AB23C27190833C26875DC0F0D50B46AEA9C343D82EA7D5B3E50EC700545C615DAEAEA64726A0F05607576DCD396D812B03FB6551C641087856D050B10E6A4D5577B82A98AFB89CEE8594C9DC19E79FEFF0382FCFD127F1B803A4B9946F4AC9A4378E1E6E041B1389A53E3450CD32D9D2941B0CBABDB50DA8EA2513145164C3AB6BCBD251C448D2D4B087AC57A59C2285D564F16DA4ED5E607ED979592146FFB0EF3F3DB308FB342DF5EB5924A48256FC763141A278814C82D6D6348577545870AE3A83C7230AC02A1540FE1798F7EF09E335A865A2AE0949B21E4F748FB8A51F44750E213A8FB -MD = 495B2AA2103159D9A937E9DD56B059ACA98A5E3CB7B59BB690DEDC00C692E9D7A18614A73D12E07634B209CC630D1818B09F1076A941FF80474493E3D42B9812 - -Len = 1977 -Msg = C8805073A9044F80741F09AF69CAADEF2A17B56E785F262B7BE09A27C1EA05A4D58D04FE84F513CA24E2F3F323B20FA5427F0D8D7143B424010EA901A02D5969D8DA81B99FDF67F3FFC7DAC9AF010C7EC6C454CA5512116CCBCDAA15DF47C4D55C58F9B10724D3616AEE9B3938484227718A458A9B33440E61A9569F1E99667BD26D7C70B689C1EB6F1C557F689BC58FFE274C21E4F88C9660321569A6ED4A8CCEDE6640B4BA4E8ED6968DDCD5CF3FF1EF6DE0F036CD0FC81B7DADAA4BC7FEE9C0AE62AA115512F876FDC8896EADAD48C9A6123D6D8755B812D19E77B1A40C5F973C4586E774BE02F0AA2C6F62B1617D00F0EDA15BEE6380 -MD = E0965ABEA6C8BD32454798BDFE3AE416C19F44BE54CF549D6790172F88D207FC32D8076476C411C9C0ABC71975FFE97749E04C767FC4FAC9C1D0C2AB489EF63C - -Len = 1978 -Msg = 187F478A37386BAF26EABCC1A56AED42BFBE0FAE4D858405A66DD88637D1CAD7EC3E1F7DA226DAC75FC33686476A29B7427544069EF6844C1E9F5707F24B671918ACD172F352AFD2F30AD91289D57F20751D58E23E928B07CF76E6617CB251814D264BE2658059E0CCA41C08FFFBEA7803DCC6E125E5092D349EFB0260FF0BFF9CB8A4EB7D82B195C4FC17F77F5641AF9FEEA9ECFF4682856638D4F12105DBA8755009269F2083E0953F3FC877D180B253F8F5591E1944D13C83776AFD8C7AC861BD5F083A2078C65B51B4ED174B1F57428CA24D798C12E724911618C4E620A7388EFC719A647DE1586541FA690BC1E1F2F2131B4FDC0C40 -MD = AF04322E717FB99C6697B00E7DFB1BA1C77EB1262990AC6C136DE33D54E913C255E1E28901622A13B15AA7E751A209A9EA13084DB2D9A94A4FC6C73FAAE9603F - -Len = 1979 -Msg = 752534268E1492913DF547FE5A08FC558087006C000B2005E763093386C6BD4BD172873CEBE156F45BB4CB1DE99661B61870DD8C611B99DA07D15A6B2CE220E30B2DE3BB778BE30F30392769C84EAFA3697E04D9C8CECD1AD8065975A03D9984B3FF73AA757968F1E2F3C44E6E611713CE9FAE1849909F076A0BE17B80319515B58F4A27FBCEDF7DED27653655C05F89133596AC136630B3BD728988D833632ADED5834368856F1E77CB8B9BBC37D1CB5A989DD1009C8348C0F8FED009F62D3F37C2994824FA80BA8AB0AD3B484EF48979817BDD482064283F4E89A93AB3126405695EBFE166CF3070764B3126883A6C854901CD7F44DC60 -MD = 87DBDD1D02037430BF62E5E690660538C6229F7171E85695EDE28C3CEF3736B0542E970DCF0459923D27BB4278AB0943D8ED0BF3DF025345574785A544B5913A - -Len = 1980 -Msg = AC1569ED914F50B464922215661963F99EEC3C048FA809B032B9EAA69AA7B138B5F049897B1A73AD8CA4734F1B6FD6DF0112983E29820E8FAEFA6D530AB1FF03DE9349181D9C235D14689EC5C30419EEA0D891A8A33F295333B02227BCEA4DA7381584353AD9AB5603E03E69B66D8AEAB20B15AE84C26DDCFCA9EE7DD14EB459784495EDA6D273136653FA98BD42BCA1A0A714A8A3DDAD33C7A6B1916838D4FC25F0524E992DAFCC15FF866CF2DF1613A0C3B81C1FA6BB5D34ECDEFFF540032338EA9D372ECB57692A3AF10B7592179B6D70DEF5281A804BCB83C6EC48D8938CEB66EC6F3696D5A729D130C3F94FED71BD4A4071EA86F950 -MD = E98582E381635248D17B98D3564BCB311828AC1E8F305A7858CC0A0343AE08A2E4E703AAA3618929F7C3565CBF92883E7E2C12C6F0305BF05E56988D45997392 - -Len = 1981 -Msg = 24EBF97325E94624ED9571F110D4F9C0D459D6B659B30000F47B52BACA0E7C8E41C8DD1D4FAAE2B0803B22F7C49354507011DBFB157A8D110BE9F8B056470EDED8BE8072601C6FE963584F3A32FF989335EADF05240B355EB4A59770F7F370E02346058C74DCEA0A7DDD4E2EBEA8CB9036B0859B04F1132625A081993BDC622D8CFFA64A7F003C46067C6B224161C56C6D68647124C3B92BD0A1CDD24A98E15462458EA4B8510C7A7027DA769317AA0B399A1D0447525E3697A18C3F4C91D2E4064FFE358A459A3E97DE7DBE8E78DFF5A277F4DE7C4FDDAAF8D1A492420C1D6C60665D4E72598ED24EBD2D695053532561A5810002911588 -MD = 1A8EC5F7D02E11941B53033DA2D6666006CE202CAB794D337C17FD6D2949F3AAD3383A58DF01EC61DD8B3A7CF4968A3912C50C665B8A374F680106E1C290DDC6 - -Len = 1982 -Msg = F965E971E9A188AC8F57F2BA40A21C0739FA6AABE4FACDB1F5EB88A9093B42D1D4FB562335B5D10B10C0C6940A2CC0EEBDE1BDB840FC1256DE90CEF0E008B3F1BD27B7141DCA0CA42B579DB8629B7DA66E36D578906152AB3B22CB0ADF3C5544F9D8249BBBD51089E6C758349B8AE53D7C459E8DA42E7BD7C7AA6237C00DEFFA268C059E3EBC450760E658D104D7177DD45B3F3CB254E3FB1AA8D2B7DDD24B20A7727D34DF50FC5A103D9F2623D3A9488A4A8938739CEDADC30E0DF2BB00DE74E7E4105ADEF42FD83FB97B315AFAD9456795D492B02EE3F9FA942408F74D1D716931271A044CC25303BB04B4C057008E74D2BEBE20931FFC -MD = FF20A40DECD03C83E54CB82561BE6DE99255E0AF9A0D4B4AE83254A312E605F50A4A7947A4FA1AF65939C938C488B168F6A3C70EBB26C7C297DA184BBFEAB948 - -Len = 1983 -Msg = A3DFE4DDEB6F6CBC08CD03EDA2A386676E9E32DF1C093937377295A7FA10421449E7087C6FEDA907DEEB478CBDDA62BCF56CD9361386E607D486F887F77D9AAD16ED65EDEABBC5D2DB830A8E5059094C190E39DAAAE4C4BB9B5743A9218189EF5FA1CBC2A6E8FAC2878417D37E4B0ED6FC4794B6CA8A9D213452CC02E6DADCAEF439C940DF132CCEA86722563FF416D5FF13C38F34EDF3734A9E6E69304CAF7FFB959A2AF03D08ACC6B04A5E43FAACC9ACD2697F7E60DDDCD74948EE73171C751548A506A9319E0103DA0B8C97B35CE261647E92D2E10EFC9D57114B9C9EF8ADA583B084B8F7099520AEEF26548BC9C50F8A7DBB18FA2928 -MD = BC85EA8C7484CC5546C7274757634E66E74ACC0AC3D7DA7BB4FA2EABF389122A975EAA0AA7197A811E976F198449AC28DDEDB392F7C8A6A9FBA63E266D6DBFAA - -Len = 1984 -Msg = 6B860D39725A14B498BB714574B4D37CA787404768F64C648B1751B353AC92BAC2C3A28EA909FDF0423336401A02E63EC24325300D823B6864BB701F9D7C7A1F8EC9D0AE3584AA6DD62EA1997CD831B4BABD9A4DA50932D4EFDA745C61E4130890E156AEE6113716DAF95764222A91187DB2EFFEA49D5D0596102D619BD26A616BBFDA8335505FBB0D90B4C180D1A2335B91538E1668F9F9642790B4E55F9CAB0FE2BDD2935D001EE6419ABAB5457880D0DBFF20ED8758F4C20FE759EFB33141CF0E892587FE8187E5FBC57786B7E8B089612C936DFC03D27EFBBE7C8673F1606BD51D5FF386F4A7AB68EDF59F385EB1291F117BFE717399 -MD = 217B5A985BED80008274470E254443238C5AEACBC7EE2289F0E63B7AFE6D0F395E2361FD6D9DC33B4F54F03FF56F6B264976161D80091788EE9D262F147A35FC - -Len = 1985 -Msg = D32ED64B8AC893E8814F30BA3A421FE80F06FE8BB2599AE6977CF0387E07B7F6BD57AF3980F039921945522F75A1D9B1B1CADD6B666E6D19A9930847B3E7A1BCF942B8CBB25F6D63FD0C1A61365F64E645EC1957D1582CC75790460F92DEA77A3F53F4E695A1E712211BF187A379E04C40098BE74F5BF2DA7EE371E6C3B16B93D2A01A033EB41A3C5F834C4ACB817AD78BCF0D24B8FF876DF98ED9094A69FEDF58AAF100DC82B20CD81520411715FCB054018456C5BCD6EFF22ED949F9EE2C823FB2F22653118816CA66D7FCE9554401035B71939039B1E010A15DAA57A7F374025BEE3F9CF85A79CCF7751E4AFEFD4B1A8C71B6AAD3A40680 -MD = 737B448FF32DEB6DE1F6E21312ED6B49F0D2EF9A6D2D84933D637AF8A5B543DFC6ED1FBF52DACA6B25100C55624A484B5758B518FF351508CC53EED679196AE6 - -Len = 1986 -Msg = CE81B8CDF42C400880AA4A46486ADB10D8E58DDFF5AB61856EC7417A93F1FB0B0C788D0BC3457BA0639078034F22DC1FA93635B0259C4DADC9A59C7A3B80CF7D5FF82C2C8029E27F2F0FD612BE4D7271D3045947E173C971D1FF3649A7CF97F5B8849ACBC34E86FAC4ACACC467786666E1D753FFB933DFEF1C214D229505BA51C5CA6705E9513AF7909BD7A4A43F035F1A78D383F663708669B62922FFD5EA59B41EB44A3EEC3D38092F74093455F1A54C4A73EDF6B23A74EAF0539518A74F174799128F6CDC7BD2BA69CD7B2E69E35E97B9424849605187C6B3F3F2D0A0AE5443378438BFC504C6FF354BAC02E073D31C5C8DF1AB31B553C0 -MD = FD145BCB4E02D9E3D8DDCBFDE55A69AD8243D76D33C03AFF8D739FED140FAD4A0260B1A625F73BB8A6B7470CF35DB789E5C58493494931858F3D8A64A4B3F664 - -Len = 1987 -Msg = 142C2824180B20EB38CB707804017AA76CBF53ECCF69E084A1B09EBB13ECC2B12B7D58EEDF06CE7446D231565B6A34C18E782C339039CA41CF94002FCD502270DB6ED60A2C7E2A06E4AD98EB37E94173C1CD531417F29A9188422727456F44E113E1611B363288D8ADBCEFC725CF0FFBA2BE5A91B0939FC0D1FF81CACE638B34390D2D5F0018E30D2C69780D715BCB484687D7D672F06DB11E557EBF9BDAE5CF982BA0C1257996805218672116D34CAD98328C6B62D2ED5C28E7A1B30DBCE0EFE498BBBFB8797271F1D8E8903D5FD9217435609E86FD3595762E824CD4C7DA5B1597C4251FF596FB267DF0C44863D3D24D72ED5997E5E59120 -MD = D82D68F6835BE687B43BFC9444ED21A7CFFD4BA86BC273F2CA8658337EEF7436A17D1803B9F8D260BE0969A71C8EF0D5FB4C9ACBEEAB1E618FAFAB8855E2BBCA - -Len = 1988 -Msg = 329A07D707AA29AFC4D5E780B828DD5F183C0C481C6E12FE60CA6B188C233DF3973C832983BD59B474E9D39D0C54502D7DD983FB404C77DF6FA7FC349C8E74F18E7C2533346A0B505BB7508C7CD11687BEFC78D7A2EB6C253B99E427E0DE4FB7D2460BB900DDCF6B3528207A057F5BA40E89C810B35174FAA3A94373FE1CD2DDE4C8CA7274E0D33365597654C4F75E28F7FE03648A76B8D27F28B0AAF87331C65FDA4E1B0D26DE1849931134CE4BDD6F0FE898D05AFBB7F2C2D2D1F5C4E9A8D81A1476D04AC82225B7ABC2857B129CEBAEC02F343E2B8285729662872B8F29BF8667D9FDE69EEDEA464FB460D80134771FB375314E985FBF60 -MD = 06B8655C98AC39FF3B4978B154E204A3CE0DBB73D671CF99581EB6E3368122939EED4A7FF0609685214A7800A4163EF21B698096C1C6272E34A6A506A5F351B4 - -Len = 1989 -Msg = 531375EE838C53F7A0F60D2EF68193AB311A57BB99DECBB5318FA03CEC28C4614CC301A76EC10A414464A128402549708EECC35F14D0F41972BD85F1B2BD0F49EC725D32738A745F63C59864EBFEF162A744136ECE8FD317D04B48EED993D1C2AF428FD65CDEAB6AA83827C3C5F1944FF39CB3FAAAAD89E7F69F154A1367AB04A2BB739D42CE4075309057CFD50B197B63988DD70CAAE8632D3602984664FE7113E6CEEDBCF46F61461A36E8DD555334D0272C1BD3D834B55B3BF3193191E458D72E8BC0CDED3F311A95388F1527F98A8515EB1FB77F298F03AC73D587AD866FEEAD91D17925533EEF29AEFB53F8DBE534DA4902F1A564EDC8 -MD = F069FA4B721755867744C6CEEE86E9866F03A21549390EFCA5B71304D122FDB2B86534125CC08F4A7793DC8BBDBBB085840E0D9A85DDAA1EB67721C81D62400C - -Len = 1990 -Msg = 3077B114046798409B052A162823AE9CC4DB68F0C32E8E8A9F12B039C99B8C8D2100AEC68BC7AAD75F5AE414A8E458B2D10B430DF82A30178B66C7DCE52F1FAC05C8D28D511C39A3BDBDDCD43B46B68C7A591CD6ADF6F5AA9E5306BC308FC771CA43BF1B63B6CA9604A24F70B5A2ECC3C4772C5B583B6798F61352EF976DDC14FA9D12BFA3EDC1B70BC198837318E687670411D049476516AC35DCDEDEC5F77F36B5FB3F18607C13CDB7F9E0B413F5AC2C8DD8B6070BB84F40368F44C887E1B3D08F1EA5B52D82799F5BF18A0DA9A64DB60F6EAD631BBF93EADA405C7CB4D39E1129945E265B75A9322EFF74983470134A454B1AFF0F4529C0 -MD = 2B8667D3A2FD0526D59849CF2E95035D33DEEB6F982C71E897D290BBF9E9D2A3736B3556D7C05D811CC0D04C7A6596D45DDB391D0C88B7784DD667678C8EE789 - -Len = 1991 -Msg = DE175365B0EB7442D7AC52719CEEC2A930CAD9B9F9BEA109F0F78668CD568EE0C1D4D7A82D44D9D1DD2C01B8A3C74A4EDBC9E59FE6A646C496C8955F96B385284FDD2F7B2715C71FE0A062A3F890F2C03713A234E46C7AF287FEF559CE955FE33CEF3BF62C0A811B3E366782000CCE4781C94F1CE71601936CCAF21EE51622E7115CC769C1282E9A4930D7E4BB0FB324C5A8F6414AE1C443E61FB1910C1384B3848AF40B8A4EE96241CC132F0BE6603DA079E67AF04C234972613857FD5718E54D66D1B542CBD964EC074DF0F48C21509641ED11B0C4FF3F6950DEFF55526A0936D4DCDB28ECCB9D83BB9D68D93C3AB18B09AB8CEA1B6109D2 -MD = AF44D26EBD975D2DBC5894E2C57D3D3618B711A2276CB9262B5237702FDC691112BB9961C1DD5D0ACEE68283C64008965A3FFABB30453B668960EDCDEA8FEE46 - -Len = 1992 -Msg = 6A01830AF3889A25183244DECB508BD01253D5B508AB490D3124AFBF42626B2E70894E9B562B288D0A2450CFACF14A0DDAE5C04716E5A0082C33981F6037D23D5E045EE1EF2283FB8B6378A914C5D9441627A722C282FF452E25A7EA608D69CEE4393A0725D17963D0342684F255496D8A18C2961145315130549311FC07F0312FB78E6077334F87EAA873BEE8AA95698996EB21375EB2B4EF53C14401207DEB4568398E5DD9A7CF97E8C9663E23334B46912F8344C19EFCF8C2BA6F04325F1A27E062B62A58D0766FC6DB4D2C6A1928604B0175D872D16B7908EBC041761187CC785526C2A3873FEAC3A642BB39F5351550AF9770C328AF7B -MD = 293C551E753BBA7F314DCB93A0FAD94F3F5DEE6ED45D765A708E6FD277601F03F6C905D7E1EAEAEC513CBBBD672B817F6D60FBF02C20167D7F4B7B84AFEEB3F6 - -Len = 1993 -Msg = FAABF245E59C1E88C39FDB7ACB77B2B3F67FFF22CDCE4F109B321C5B720DF0E4C3995B01968676D4305C88CA3A539A9B740A97068AC91F966F2111C7AD7E1A32E947CAC73F1F5DB8CDB85374FAC8DDC0B964E506F042FC8C76D4273E6CC1C370189E60DDF920FE9895F4C2E6DE87B742D09BD90D0C6D792A0DBA942EA21D89C735F90BC71CCC32BF661AA35762EE8C4E5C354B8D72F9124134C02E15AF1E7BE14B8CD862FDFE7838CA75BA76D8CFCAA427B0D4D65068999B9195948E387EFB1596EAF8AFDCB4D953F2833C2569FB0C40252244A356DC044ECC03FAD63D1BD2D2FD9A683731A28C0D13254EC9BDB5EF09EE3A1AE3148A143EA080 -MD = BC3DCAA3027008AA07A376E3C5774264601D9FA737EE33878BD487CB3434942198EA0CAF8A376D2ABDD214EAFDAE87C64870C165305B7173666D35E898C6DEF5 - -Len = 1994 -Msg = 41C9AB2D7A66C27D36633BBD90024BDD2A07F4D266AEDE26023FEE9207565467B4FC917C4712D5ABC56CE66F0020390E5A2BDF7C36821AA032078721A8EDB4CAF94D055A26C182D42796936A6A1DDF29F4383D169DA0FB442F899505FFEDE41C2110163E7ED694562A687EDDC54D5EF2E7EDFA91FC7D3F73FBA2D80D37A5F980435CBDE686408B3BD2E6D8D2449446F7C6C2B441965DA6D17779FC3F33DAEBF05E1060D378A21708DAD6520B1F8F53FBC65328C24B507B5E20DDB5E2C80766E794A1A71259AEA52DD1C885054E1D83ACC38010E2D26CEBDA306762762149648763328D341725644ACF60A09B2ADBB96002F01263572170188540 -MD = C596BF8F7BA020EA7508EEEDA3F3C202E56E7C2AC91C06D48E59F6E2E4B8FCA0EB21DA760EAABB4E04C18AD0FB75CC2F130ABB95E88C531B60AE8F00CBDFEC8B - -Len = 1995 -Msg = A245516F0282C8B0E6F2EA8718D0ECCB66D9C1F90CCD26D793BF9DF3101C5D0913029BBBC09832E621D65527B3823C47708409464BFC59199221A3EFA28B413563137DD4A2EBBB5D62CE6ED865AC9F1D9A7696E891D1832FCEDA6DA96DBAD1F6DA4B52121ED3D4BB70FD7C9D46386ADC38821202B2B6F8D4562F5B10008E35BEA86B21991F9438B2D63F753BFD680FCB509A9A23087672C11317E44BED611A113CF7A5336B36C311992D9403A9E181BFE3CF48C0990FDC347B12FF6997C5C451E720396631BC26E43CBD69CFF6C77D8FBADFE738A0B91B7BC213A37314CE4D645A3CA98EF451165CB394A021ACCE94F268FFD2F95741B8883D00 -MD = DA4673CDBBC13E6D9A19F2BB5DF38A6830BB3C2161DF83240C52EB9ABC2E2336EF86F338A0972DD1295F64A13E2FB49666785429B200154D337DC97170D0FAF9 - -Len = 1996 -Msg = 2F30C488FFDB8B60D41FFB45CDA988F0EB13DADB46DFB03654CF1BB662E9CFAAAF49830D2F011BF511E0437B2E55A0F56D7BB4BDBFA63896FB7DBF6741C3227CF9DB40FB4AEB4280A0BE09638F735F320B228B2CC65E88FA75339A948B7A1BA147532593DC85A793F723BF4EBAEEB9181366D9FA7DFC49C9F07B52E8F601B92B7F54A55D3393B6680FF65317DA41C0B0040E9206F65C3C183D8CB832DA4FCB465A731348ADADE1227F779D20788A096405A26CE76444E7D8713DDA48DDE0F56006D38E910CDFF2F1D0F20EF4F38D9B2BC9D1C31C7509D370E31E298892CE85D547ACCB4ECD36FB0BAA61935073CB2DA89B83A93D23F21B4D5280 -MD = 22AD4AD8C61A4E37DD01489B76B0888CDBF0E239B34688779C76723CDE5D9F30158267727DD72670080CAE449842C0E7891D4FD8393B6DB14880A944C646F11B - -Len = 1997 -Msg = D60976242E138CB0311CF692E23FB29DCBED3AB53B9B9A5C810C8CC5EA22ACF5E5EAD41A541A66FD03DA085A088CB6BE50166B2C604777771F90ED0CCBD8F6C445BE01C650B655106D713CC18613F1EDA3C45FA92A68FBC24C660BA1F13440BBEB36E8B2813F2D85D82B5EF19163D0FE77B80A3E66B378D3F14936917A2390CBDD5AC367DF32E109704CA448F4B8F5F1937494976A7D721FB3098671DCD5615739E15A22E4D5D7CA1064DA010EC5E371EA286CFDDE523CF3EDDEF2BDB58DDFB021599B5DDEF9CB9DC83E5BCA43247FE5C31A9E1BE19D02C8F84F7816689D6E6F0444940300ABF38A70C9AFABEB54B5B926B3D90B5ED0C5AA3AB8 -MD = 3AE87CDE7CA5618083A4B182B8FA1238646B347B1364B22AE9DB111A7B9018E90AAB20ACA506F9CA8CD2488E74ADBBAB8BAAC137A47CCD96238A939749CF75B1 - -Len = 1998 -Msg = 8A1B7485D535E846F7F57A9C668B202F71E36C4970CF9F1EB14B433148193B466A7DC82012AB7C5E97A9D0E622CFA4A9B846A5C7B621E89CFCABFE752169ACE355CCADB19243718937F55E66682C6538B0C66B94830D7B03DE0FBF63E4104DECDA39E9667727602C37A9B5ABE069569F6E3D0417842B96576FC9FF3B20ECE46A68BAF6B4EA8D6855E84A72D6DEA2CA13546F9447D229E83D185698BB5FB1C073570B0C94557B90C45BDCAE552E45313E99A4B94D422DE9DFC84494E2FD1E90CC922EAE9C49AADEA642638F44222F71CF1D63BD2E7164396FE1EEA7AA8DE59EE4CB35FEADA22C3B752F569F2E3B2BD14191E956318D708E9D0600 -MD = 25B5A8D7309D2E2A4BB2F538EBD8D56C2512F62A49967D71FB86A2070229F50B983551A67FE92B0F9474FA5E2DAA34052412391391400E343BAB91093749DE23 - -Len = 1999 -Msg = BE48556570B10A62DF06BC43B6A034A221C26E455E28A1541AEA3042ECF9778BCA7F81AC9F7525E190124E359E7436D15C629FD388AF0F7EC42F4096C7C421E0733A716F78C86A1D77CC66683FF16B022685409C3E99240255BFA2660F3353D5B9F1704890C9156E5CA3A5ADB62952239D3B6D3E6C2EB7BAEFC4B5B385B3E7A41BBDA175B9D00F88CF061E78A921C90AA0AF22CFB5E0660981D071CD67800A0CEBA6D6732D9D3EA0CD821378B5BEA369BFB1D42280F4A81D44F6C254337CFFFAE8C69F49A444EA23A736451942B98439C03F13A52FFCA6A77F51E46D4A71E384CDD93A39C713293C10FD79C906FBB0EA5251A2E7B55905DE81C8 -MD = 6B8EEE1E622787E4CAE768139EFF6F7E6E05E0B33AC5E7F8D53623C912D6297D4F34D35C8F1B496F61ABD5784A9B59FFDF6F222D53AFD9967074E92C81744111 - -Len = 2000 -Msg = B3C5E74B69933C2533106C563B4CA20238F2B6E675E8681E34A389894785BDADE59652D4A73D80A5C85BD454FD1E9FFDAD1C3815F5038E9EF432AAC5C3C4FE840CC370CF86580A6011778BBEDAF511A51B56D1A2EB68394AA299E26DA9ADA6A2F39B9FAFF7FBA457689B9C1A577B2A1E505FDF75C7A0A64B1DF81B3A356001BF0DF4E02A1FC59F651C9D585EC6224BB279C6BEBA2966E8882D68376081B987468E7AED1EF90EBD090AE825795CDCA1B4F09A979C8DFC21A48D8A53CDBB26C4DB547FC06EFE2F9850EDD2685A4661CB4911F165D4B63EF25B87D0A96D3DFF6AB0758999AAD214D07BD4F133A6734FDE445FE474711B69A98F7E2B -MD = 89FE6314A0246EFF3BFD07A95FE239BD5071467F53799175B226DAF6C3DB618CAD4CA1C1AF64BF5793F03254F560E6335BEAAA86BCB9E961F214B2AE97B47AF0 - -Len = 2001 -Msg = BCB3D6F4A9BDBEB6222F317E94CAED0A102FC75E32C4127A8DBCE180166D4B034E6DF22C2B4A77636D6ACBB5CD1EDDBB280A97CED0E4C396723C9703DEE371BF2687F8CBE1D3A007B2C475EAFB030601F9034506412F0674230A6A6EB9DBDD08AD8D545C19FB0DA52506A488A789E5FC6B92799E5A8DB3D57D8985398F7E9C12A060CFA0DCD8A1E34E0A635055B616FA91C1985797E0FCA6566E03791D29D684691A39DD0181B1D584AD1C51004300FFC5DBD63D9494B2E0368776EB54624FA8BD1E8BB5145C76ECDF0D1183D67E7C7A0AF6621DC3E81637C86E160AC677851F294FE6730CE34AB488C447F665A9F59D356D7273A2675494A75380 -MD = 6A0201514C052E79E024F3D745C86340E076F9ADDCF9BE1B63492183792C77E0C1737C77026A3BA38503D4286B31CD3200D94DAA0B3132E0303B419C937245CA - -Len = 2002 -Msg = EEA3D4F70866CBB97B2FEB1F13E05791E52A8EDFC58B2339A97ED00070EE50F9EC377D8BCC8DF98DE2B99BB53345C13CAE6D6EB6E9CE0EEDFB59C0AA64DF00FF6B8AF3AF56CFEEB0DAD9AFA44564B11C3DD295618B07BCB13C6592B785B2E5B4698BC0EC8C6D57D602FE8FDCEFA619629CB52BB1079000FC478C92C24FC94E76B29D84BE2D489A79F16E42EAEE1D9842E9CC260BBEE9AE9A42A1170662E2617F72CC4B72A38B32642F7C47555532779FFB5B86FEB63E06F4C42E0849110ECE84D37B18A65C7156E23BFDB32B9756069DFCCABA8E3BC47E6F0FE8BBC7C2D9A4D2E071A595EEABF3E4CB6F637CAB25704E8D21379AFEB0BCC6483FC0 -MD = 072C84A0265089D3E3BA315A49579EC6DFF3FB83A714024738D481B164AFC5C291B550BC380CD9CAA5E0A7AAEC6FBFD9FEB28FA4106CFE41B9126AEB78A0E445 - -Len = 2003 -Msg = 07BD6D792691D1134F9DC46A34F930F1E073455F53A5EC48AA0113713A41238160C8E421097EF56EE05D0651DD91E6B77D3B7685A44BC480A1D0743305859EA10A24C4315DE8262842D79711A6B7B06D97E2D494229BD291E038A80A07DAFDE7E051411DF08E3BB812FC12F1AEBFDFDD0843B3075FC9431C4CFCA0A527BF7D4CF474783AB3675D4832B2DBB0E6255BA65D649FA0C52DACEDDA27E66FDB7E796DC6EC86EB06ED70F547634E82933A478427ABBDB73FE02BECE63D942C204F4F7067C990F6EBA66E3B80C4411FCE9333C3BD5783D222C1809742FE30DDA06C08CACF82D67ABBC903300D8B26A3F073C00AFA8D5DB5488FAE653E87C0 -MD = 0A59B973A29B34095FD44FD83E40E07643105F2E1028178A86FAB1749E00B947ED0F8E723C3D08903B182323F1FE4F382FF9EE7B706F7F784576FB9CF98A862B - -Len = 2004 -Msg = C87A40A7F50BD9E5D0470D3888727F55F650491B815BEFB245944C2023F5DCBFC061894E69225379C450999472FC415C8406A5CEBA2E1197FC3D611530A994F9EC73F7356E02439F343DEB16DD09599500D362C7BFF01C76002B437A7E86B45187FD8FBDAC88F8886995767B9EDA6ACA959E7B82C7193FF7E6644F36BD861C17E490CB14F0F7F9319DC502AEB8F30AEE58143E1536ADE6C3C6479C64617A3C04C13BD16DBE91AA3AB8768154B6A6E27D8C9B14A5A4562CB3D1B70E124ED38D09A1593EF6C1E10400ADE66FA267D604C16F990DE32F3CD34A85421F19189DBECF7C02BCE65BC094B554732C721CDC73AA39C3C4A887785D42C6C730 -MD = 8D57ED4D58A2A6E309DD8286351A69F3798D5DD721AE52B0F6A76B2B88D005A004C9AD5B86F15F225542728B5DB3E81AEA789BB1AB500DA88EC39D9BAE15F791 - -Len = 2005 -Msg = 59897517159787EC93369C74AB7AE836A65F1F76421B8134EA32ABFDD66BCE4240723A8BAAF264CFFC4AF19F114780D4C11A8B978A6060D42239F3702CB8D69E03C0355239A7CCAB99F5F2E5B9B7C70A0CCCE87C215A27943430690D3F4971B696CA2FD552D362FA4C9B4923836BD2DFE678C0EFEB56C8E87223B609EED0768E75E3226735C3BCBCB399889286973DC2190EEDBC5AE2FD698E921395E7FFCA61DB46BE5187CD8F380E76DAF5625931162F4972517A6DCD875AAA46D2FB1C8EE156340156666D092FEC19C3891A4F3E375A9859C4E48ECC224E2B010173D59744FBEB0062E6F07994C725FF32F4525348238D9E3016A0D79A6F2278 -MD = FBAAAC075AE06830DA55B54CBF3570D058041185FCF3F3F502430544370A80B4221798BD3B089FC771250026C63BB5E61EBF3E8B844150D28F08CCF965878ECE - -Len = 2006 -Msg = 43898A8F7A09FE62ED0229A3102CC1436A2D662224278D3053A94B122045EBF2C164EC70B79389F72D81629F47133C98A2CC0AF6C935E640B39F1C197FA824DAD41FCC51362AD27AE80FDD0075988742A53058AB8DE4AF7EE577F35B9506EBA415F16B4533CDFE5A952218A6D76DDD16A4DEC24C7D9332A41B6372053D1419C37579BDA0C358EB984C1490E7146372FD336216D0A0CE9F282D6D9919406B4C97113ED412DEAB3737C3DE9C6F6BA813C1D7253047DEF24637528B6447126F0B2470DCAC0D693C72816BBF0F74762183030F7F5C9B5D11D6C90E7BB8F50499982709FEBF58E291B672D523089A02D112F7BAED00DDA8B4138BFE207C -MD = A1531855B527FE7FD98ADDABF9D3FF26F6D2AC70C634349E302A6559DA38AEDB4BA12A366ECD9B73CCE76E1A5F49BEC3EB48F55DBA00C3157B699996FE7F0B76 - -Len = 2007 -Msg = B0077DA24064BAE6404B2041DD10F3619079446B7BAFD1B3901CE4DF21FA9BC02145AC75F8DC975C74C4BBFB110DC171736C6EAA9EBEBC17757DC4AF3FC4B5B4CA1D6004D79B95E2DA6099903B3E08B74EDBDC745185E67C7878EE47025D11B446B533BF710429606B0F64332EE985E100FC4B5A0189F1632CB498168AA59FF99149E857B579AA617C0D4C90A642C25D0F314C3AEC6C52A7BFD25AE09541DAB3CF3B1B547A20EDC13D39ABB120E52FC19C2C969D171CB2805FDC2C2192B52494B37B97A35BFD17AD015BA5830DEF975E1BF7C910B45729F7BA97A3E94D4517622A9397432C79B297876562208A0F8BE1971B32DF82470E29541AD8 -MD = 455A7C3A370C3FDD879F736A0840BDA337A843C37167D73A82B53F914D5F08F329EA06384E024C1848BD445C01ECACD88C85AC38B370A25CCC30BA3B906188F8 - -Len = 2008 -Msg = 83AF34279CCB5430FEBEC07A81950D30F4B66F484826AFEE7456F0071A51E1BBC55570B5CC7EC6F9309C17BF5BEFDD7C6BA6E968CF218A2B34BD5CF927AB846E38A40BBD81759E9E33381016A755F699DF35D660007B5EADF292FEEFB735207EBF70B5BD17834F7BFA0E16CB219AD4AF524AB1EA37334AA66435E5D397FC0A065C411EBBCE32C240B90476D307CE802EC82C1C49BC1BEC48C0675EC2A6C6F3ED3E5B741D13437095707C565E10D8A20B8C20468FF9514FCF31B4249CD82DCEE58C0A2AF538B291A87E3390D737191A07484A5D3F3FB8C8F15CE056E5E5F8FEBE5E1FB59D6740980AA06CA8A0C20F5712B4CDE5D032E92AB89F0AE1 -MD = 7690F703E894EE22D4DFF55A7F8D5021D5F17B729F95A59C4D55CFB225C67BE105F2E7CDF56D140E566648E9E9C39BBED96F985A6DAE1F21D8BA500F7FD40EDF - -Len = 2009 -Msg = F38261A1E0C715F8BE26B6F39B82CED03A42B1920AE44F32AC447C5A224B7CF3AD428C1395678EDA9BAFB746EBC7035124B2BC38EB18CF23DA956493035DCC4BE8431AFA158AFC1B8BACC8F4C609F903C63B4B34FCF935AC9EB787ED4CBEFD465C220B18EBD03E634044DF8C76E51FAA484C050E5B1D6DE2A87C17D6C59FA10AA10D1A3D3F55937FF92804C7F99ACFF2549D9938BC255600ADB7CEB7D4F461B1B337A0CD2DB31AF31EB32718C623E51E2773E3143C433613E6B8971675B5F6FBD886EB52112976D3D3CF3551A522F264E08CD23A54D560FDBADE04ACA0B0B51025AFBFB6C387698E3D03558E978C1976E50EE472A114E277255FBD80 -MD = 68630D67B2812B1500DC7B081F70C3ABAB886CB7F1D7CDD592C2A7798EF853DA95A657A4843B15A4505C103CF4093AD6F9BF751770789318FD291E8EA30DDC0A - -Len = 2010 -Msg = 0400F2747226C0098A84CD5B655AFF6374D3FCAED87289D590116712BBBE96F8ADE6B5BB9C58A3010CCD8AB0142C2750544B2AA7ED2AD5FF341D46D060C0095C3D1252ED17FE0560E7942DD9520861B3CDD5828B13886F88811F92281CD0D90EAEEE5664898A82178A86803F4B357F4497F5B433F13A69380F748E5C4FF58DCDB311869F74EAA70803CDE14FAC26A6F58C2B4C5ED5FF72F81930CFFBA834DD1696A78015A6A1300F5D1F0E557A07D19972FD133092CA07902E66D1B41369A986757875E33E0797A2724C38BE538EE4E43A49D711F816FA450A5D46286FB90A5D5F38CE0CFC8CBEEDF4FB164830E3FCBE059792E4A819FB9F3A903A40 -MD = 35762CE2F8835F56BAA196BF721A3398DEF1DAFF0E901FA3E3E934B09BE742BB1A89FB52CF4A35B2A476BF81DC772F3F53A3BA30B9D9D837A4F5B2A05CC612AA - -Len = 2011 -Msg = 7978F60D35A8F4D678A3C3D9C9D4B348C151CC3665D67F3B391FF621CD2DAD46CADBADBFBE0B254F3F37194F20BDB05C1765F8B3B69C2EBEE5462918C2B92E22C2FC1959197805547E55B4527DFFBACFF0C7F2E91E05DBE570698350FC3BBA4A3685498F4D16E70FA79B427A1286C84BEBC91D19AF251CB553072929F0268282F052093306BCBCCFEB866AD419EB084198277A6F876DA551985499A6098155FED43EE6CB6EC6236D3D01778DD3822BBBA0A1D3A1870F9683B6FA81E1B78F8BB37E3EC126B34929012B99490E124DF37E1FC9D809C8A337358F9B03DB7B9ACCA3F5BD9DEEC8987E166D0F33CCE7E061A33852F5636B807F948273D3A0 -MD = CBED4AD351B70DC4927ECD1B268BD24EEA26B7BA0783A3C2E72436A9894AEFDF52C737C5FD2AEFD244CC2D2383116054E9EDE555AFB758FD20D651CCB28B5ED4 - -Len = 2012 -Msg = 521C82A5144B864024C414840BED6D9D038118F25D02D1A8B564B7C669C46A080466BA2FDA823652966A44620C6FDB666416892D427B76574A7BF2A33A22500E27AA6C00A655A0483C849681DE3B1DECBBE0FF7A17EF4092A4C9C64422A2E6810C0AAFD133DEEF9D1B8326B898E5641FFA338AB6A32698179F36B16C67707E1846E52105BF246FFBEB0341C92C4BE4E62B772AAAA84A91481C8E5C13B43330B66A27D9DEBD891989952EB41330B9AFC3C3A48DD35E8A62DC9777D5D3A83C478BF92A347C9DFDA5FF3295F093142BBA5DE4CEF213AA74FAE5AA2068BCE9AB181967944E379B959FE2AE8F5C22A21A5516F74EEC7B296D41C946864CC0 -MD = 9EBC3AAB245D600A706FD1177905B1762DFCE3957CFAD4FE60BB7691C863E12B161DBE6B1BEDBA5C1D6D58E491F4E64D521B4247DE5F7F2B4B7E13F8CAB34751 - -Len = 2013 -Msg = D431DB95235C0763527A87EF5A698EA7DDC832FA8377FA56A661499E5464B9C6638A1896F826FA102B8CE891A1BCFB3540F1C9F26BAED42603BA3EBA6F24E493E629588FC08C6F5599123C2931465CD90081EA2BAA35EA39293CA49FF2B83B4BBAFA7B1677A7968C97D8325DD9A41113D9CABD2FFDF3D5709AB4C84F6AADA004F3768071C1184BD34629760E40BB17EBABE7A347DCAB9CEF57B44B2D010CC7FD13411E86157D0D839CCFAD0C4B5C17E33BD5D879584B77682C56E86AACCA13F348F5BBD296161B20B4C53D537A82CDCD212031AA2E91F27FF8B8E0641A6D6FF984ABF8020F58C83FCA4C06DF580ECA80480C105007E1BD1B404F4020 -MD = 949A0C10955067AAFC6004F6B511899E2360FE8F2B7D2F65F15FFE4D1D5E3EDF494D8630DCC987EDA987C46BC724436E9D140367F1FF297582B863E48DA17286 - -Len = 2014 -Msg = 17065477F68B70B0EC8D04713DDACA9B0009FA8065AEEF1490D6156CEFE776FEC243003D10DB512A4EBCCBD840B0E0F210B5DE02288DB6E14F96A46D3135629A30D932E5D8B3A6A657B3FD1A66FBD8A121CA0B531ABEE644C425C9F858998A17E22F8A9F0323A6113A1F0BBB25A9DD8F4710354E6D4D1101FC903155977F27C8F4F23B358049FE6E289BF713ABD332F1712F6D15A3A8485D0583FA6C046D154D4ED7CEC383F568350D64B28985863978390DFA8F176A9D7A915CAA34DBD70EDA3D773E4BB8CA2935664F7E87276AFB0621F180A40BBDE010A8CEAFBB5BF17FA564A21E568902B77679A3120595A89EB768537C90C524440CAC31B304 -MD = 86CC42EB4149253ADD517A0A7808881524D60B935C492FC09F7EDA56CCEDE09D72CE4214AB4C11238F55198627F4A20DB8892082F834428140D484B649DA4145 - -Len = 2015 -Msg = 43F40589C133BD422DD57CA9EBF10AB028B7E9F0438C38569420688D0204B6BF99214D7929588122BCAA39CC3C6DB84598DE32A3868DB1BCC04EED36812E73333084FAA1CF535084F99BFCFBB0FE2DFDDF5F04CCF348DC1C7000210807DE593ECB24530E289808DA43BDD752484E32455014537347EECDF17CA6BF67084199DDE1A5E445C824BF65BD965423EF21EBDC9B6FC932B78F0BD68D54DFC5351816E0F6E7380F46086AE66D5475F022385B6802EEC5F2330F76D2FB17B7861372F9D0370D42C947D268882AB68FCAF473C543470F881EE4458048D782DC42A98FC810E56F1EBBD8DE11E9B230F753FF20DFF76C9593C5CA56684C43194C78 -MD = 83572D86A29BAD4F93C236F634CEDFE8A498A664A04F950204409DD689C8F77B3B37BCE465A1BE517FFBC0C64E7B0901981185FBB4FF9860E57C83AC85C69E57 - -Len = 2016 -Msg = A7ED84749CCC56BB1DFBA57119D279D412B8A986886D810F067AF349E8749E9EA746A60B03742636C464FC1EE233ACC52C1983914692B64309EDFDF29F1AB912EC3E8DA074D3F1D231511F5756F0B6EEAD3E89A6A88FE330A10FACE267BFFBFC3E3090C7FD9A850561F363AD75EA881E7244F80FF55802D5EF7A1A4E7B89FCFA80F16DF54D1B056EE637E6964B9E0FFD15B6196BDD7DB270C56B47251485348E49813B4EB9ED122A01B3EA45AD5E1A929DF61D5C0F3E77E1FDC356B63883A60E9CBB9FC3E00C2F32DBD469659883F690C6772E335F617BC33F161D6F6984252EE12E62B6000AC5231E0C9BC65BE223D8DFD94C5004A101AF9FD6C0FB -MD = 65E415C7958A47FCA9EED3846FD1283AFEB38E5130F57ECD99DCB21BEDDA856E3B5FB9F839E579C5EA386EACA8CDC0A9549EAAF6EC452DD6CB5212B709BF5C59 - -Len = 2017 -Msg = 7935E30C177572EA9DDB189E2EE00B99239E31E88A1D04D48D80A9FCF7FFFD2C006C09E9C377D6AD161A3F86909C9EEFAC16625271A12906E58105A69A8BDB8774FD5238DB266F41F0F0E6AABD635C489E937A63A5F297BB043A38D4DAD91D1CC94E516818F5D61FC46BBC529F3E3260702BF9364D6A23D39C1FB3DBB2CF21C19E4B42BE38BE5CDAD468C62EDEACD91D8811A773A0432D804E630C8403F181CA1AA8FAE62BC76F7EDC4C6F9B55CEAFAF4E8152D38C4D49CF73012DD0B51CA3BD8818729EA595E460D202BF25197F2D088F39959C8E6B07F2346B1CC149BE41206AD5D027A0A264C61074F7DCBFEDB9E82A9280D80207D105CE51233F80 -MD = D02AD9423B871F37C3A55455662D14326AF21BD2FBE514F2DE79CD1522E1ED8978E8FCE8343F205498984155301385AE08622FC2588C109581C2C57318883DB3 - -Len = 2018 -Msg = FA6E5C7AB3D80FCB11F68B4575BD8C6D4FC9F754CE29AAEAF56AAB37AAA967A1023A228AAB4C67580B607A50662632A5A0E9259C8DAFA3EBDF14E8810CB9EFA5AF12611804BA687B0BF0F0CF1FC881657688D6A25E0B5DB7F6218BD9CE61A6982FAF06B5CF6F6C9DC85E8D74F0CEFBC4AFBF881F08491B885095BD3BF17BE844BD80E3A6510FE272C312837758F80CDACF3921EE01930929ED0B60CD2CA97276EAA2264C288106482CA521BEA53FA4B62CE26A7DF0BDAEB23C57C638E99255C727962BCB9FCB49F4661DFFE50B3B86CFA4C697E461DA1B1A790A4F7858FF59192A90965DE79A00BAC7362C4E3B09AA019959B3D96C44EFB22E4371DD00 -MD = 9034E78C4880DD317C520149695F9ACB6F9E75844A3A72F5BDC846D45EB8C6BAEF428B41869C1B9C9B4D902AAB8661BBC0F1CDE488D5164AB6C18DE0F0277DE8 - -Len = 2019 -Msg = 230BF4BDE34E022702183439EB2A7B99C763C09F738E92DAD945C2AEDEB9624AFFAEE3C2858AF2DA90E301A4E3B59E27C6926C5CD04C390018148373F65A3A9BF72E80EC38DA22B1CEA155541ACBD64CE01D62605C88C43D51459BFF591F7445EC651A2CE678446F921C9D45FA7B1AA2AA16A83E256F61AB8ACCB99C4369A0A6545211B4C3385CE3DDC0C9F5CA5D2B9A6F929FBA7CC3EAF0D6CC7F018EAD2013E99F7B482D58E148DE1A0086E7766B50FBE266D31CB77129194B4BC2C5865CE18A0779911725EC751EE5B809F5B401B4753E4FE841E18551E5E16F35C77470C61CC692C45F8C4476FF99C194C820A2C7F3A2C657C2BE97573878C38C20 -MD = 6D0EF150E9DBB3F29FCCB6A7F12C22D23247859D22BB9786376367EB3DE1A77ACD9064D0D51F9ABBD08567A01A901151050D9B90274088C4C334866CA4282469 - -Len = 2020 -Msg = 0367DD6457986EC8B94A722727C79DEF1EB26ED506310A88CFE4065B9BCDA02B95BCB8F5D4AA2AF1A0011290F302970D54BB0091B48FF90118AF051E65C00839EAB6FF8462EBA232C0E406A4573702DB72FE8D58B0C15AAFC079CCB5D5D0A702871EF3DDC46769D3EDFF0CE8E9AE9A0A15FC9F36153C9E5461748899308CCE2B5E8C97BB9F16C8505A34DEE5DD7DF47AECE9ACF4F13B2845DE7E48BC4326471ABC9F86D73FAD9C5E42C9AF89D0DF00971F39306C91F0B97102AE44749CE2111938C4E0BFAB15B68DD34DF8E54B52D8928E1804313C363E46A7DB7ED412C6FA918C1F7985320C412D457D3CAC140650999775CC2C9D9D2E918FA1B0BE00 -MD = 134B91607D3D6940A40D8AA3C2D8017930D73A4B1408948016E0DD56F6E66B324CBA375D758CD1FE081EC7395DE4284DE392B76C03E82A36CFE5FA986E3033A0 - -Len = 2021 -Msg = E8C1EC93AA28C61DAE66F7C29F9271464F045FA279D6601BBC838EFF3A5B53EA2299C128C00FB997FC9BD1E579951A0B2B4BDDD0D03BCD04B71651B7C74C8BF3C6194663CE07F68C37F13CF53E8E5CAD3C491EE25539BBF494C43017BBFA6645E49544DBE203E803FCC809E2C93A0EB191BBD3780BCF5E70491C1C5A18E659FE79E94FA2EDA8EFAA739625955B9EA7636EAB2E746AB571C7C9B40EA9D899506989525E54633D5186DA4F93AE6C7FF238A852BC2786F7EBA8C36968F26546191B983CD24FC3EABAA757DA7462E1C2253BECD08D4B3ADA75850F32C835D9DA083072BE453EFB5E514255BA72EC47AC344B944EC384428CE785FB30613BE0 -MD = 477A795B9EFE8078A3F9A7682E0259312792C3FCE42821B2E5DDBDA493BE87A37ABE178650CD5C5234F14C3328C2F294F8D5B883CA5F305FAC2C92BF961D0681 - -Len = 2022 -Msg = 7AD52ECA2EC84E56B93ED49761733D65A8143382CF7D9995AEF6F3C8F72D24F52B2342743B08687CF416A16F00BA58CE218745A63DE2E07E671232109A14E3F5F085E60C967836C5F12DE97246A1762620DB570C52E3CEA7FE47EE53FF454DB3F610E72E35EE59E38D77519DA8D0533BC30C5B5B6380541238063BDCA3618C5FD8D2A140943DF297FC83611671FFE2C48E8BAA204C15A1A3F78B4FC9C66B4C259FDE8445D7F9160CEE1CEBD7810B543BDC152A887D53D0AF866E3535827C61282F34E968FD350608A38E5399B1F8B171097BC059E7685D01BBA86A1EF4FB748A2CB0D24193389EEF52942243D09903397480F5051B3D28C2FD6E066620 -MD = BF5D56B36CCCD9BD873D0CD6E89EAFAF0587D97A59952CEA90BB194CD3F17F32A80B1CE0673E932472548BCD33E3F8D134396B9D0B68A5531158E4766FC0E9A5 - -Len = 2023 -Msg = 895AA7BAED3164D54B1E76CA9891E3876B045A3588FFCD0AEC989A9A96CCAB03EF6056B252C698B59E6BB552F17C8996388A80FEB020BC253501EB8FD6C034A61D9251DFC06DC852B3A99161F65200D52B3E26531EA5FE1AE297BEC2653CEE2BC8A2293AD619DA5D853F561695AB52DC1411A88738B1E9608D7B7D86EDA2BCA385816BA58A72D07C93D2F31F2A24343E5A5D64FE6912F0E99AF0ADE0C5E83C57E50D671B4D9CB8111B9B5AAADC821783FA8D69ABF292E07106D85504CD7D11272F27FD51C216910A7DB2CE38372A58E3D688CEC8B76414368C929B50AC2BB068B2203C67035D1B52D69E52A6A5E4805F88F8F9072AFF5F6F98EDFD71F6 -MD = E6FC8F45719CD3EFF27EE994274729232BE9A9FDAA2E97D701B381EF996253762BBDF4731E837D047C728B3D0DF7872442B36672F90CCD663F9BCF4732ED967E - -Len = 2024 -Msg = A6FE30DCFCDA1A329E82AB50E32B5F50EB25C873C5D2305860A835AECEE6264AA36A47429922C4B8B3AFD00DA16035830EDB897831C4E7B00F2C23FC0B15FDC30D85FB70C30C431C638E1A25B51CAF1D7E8B050B7F89BFB30F59F0F20FECFF3D639ABC4255B3868FC45DD81E47EB12AB40F2AAC735DF5D1DC1AD997CEFC4D836B854CEE9AC02900036F3867FE0D84AFFF37BDE3308C2206C62C4743375094108877C73B87B2546FE05EA137BEDFC06A2796274099A0D554DA8F7D7223A48CBF31B7DECAA1EBC8B145763E3673168C1B1B715C1CD99ECD3DDB238B06049885ECAD9347C2436DFF32C771F34A38587A44A82C5D3D137A03CAA27E66C8FF6 -MD = D6542A2F0654B9B874A627D3D53764A65B1DF2C0CEC3BCD0B4B088FAA1095E54F1799757C4371F8D544E298D600E21E11B2F90D295712621231A09C58B05A704 - -Len = 2025 -Msg = 51F8BDCACDA5A57DD68942F72CAD34BE06CCB06F9603359C80D7E5E39D2254FF3593226D0E068CCD06E54F0490CA6267CE2CB73CAC45552173BB980FE06C6DB076B97405088D6203492B73E40532C4A259B760504216A46BCF04B8251FDE04D8AA82354303C103163D166E2F79E9204FBD1F09B8ED474DE23BEA752F9D58C9B39A955B7B8B4BC610BB554B5B6D5220F0DF58FA3308D5BDAB635F8AEF9532309AE48EC70133788B93A14F155D3AC0EF7597E84E9881E49E9BF709F0AADB79E8CA5987B15FFBDC0F10B70E4034554952315E156B01A0AAAB6AE3584FE3F522FA5DF8F909A4C2F27AE26CA35C04198D77D1271E2CE12B92566F243037204380 -MD = A42FA4892676DFBF1B8E3321015F9B843A920FB980763777F775A2EB4C2D31D2629554D2B13C3BC763DB9426FB3EA6582A760B55125BD4CDFE89C4A57D6CAC4B - -Len = 2026 -Msg = 21E921EA42279D39789AE6DE121C4EE530FF4488638F8AC66C9C2AF97CFE8AB41BFBF2BF217946396743E1B6377BB29440CB73AB40921AA6D209134D9D583434751A8CACBAE380E8F222A07BA5B5DF1E1629C68550E1F3B9546BB816296DB08A8D8F1BA97FF3D8DCFEA8346ACC1AF1EFED1041BF60C65E3F99DA9E534ED13DC91937123B2F9C95C476102C16E436CE1F8505AD7E6986CD92BF59624C2D4140C3DFF9E824BEA580651B8B189EE21497E1B1835ACE948ED9E0C99CCCED5798F618B9680BD5E2ED3C37353B87C1DFD7219C2DCFF2FC6D08C4692450B6CF88B38936B8E79FCBD40949421B878371CD6E070C01B3C45AFA40D7558971362D7C80 -MD = F7DC4079B97F032C41FB19F8EF0F27F857B5F0D8B062803E2DBF8974169B3888B35FB56DB2E6FA46D254FA35BBBA44CDBC4571E4C228E1EE882C21EA9AF729E7 - -Len = 2027 -Msg = 136B91AE480FEDE05560946E2498ECF3DD14A3A690621367BC96FAA7A7FD17E9877CC7680586DBA63210A50761005BE42BE609F0FDFDFC57E2E9CD7CB313A74A685B4381461BC636A158830FA668058F428B62A914A9ED8B8CB26A82062F91CC9119D303CD95A6B288AB9B5DE4829D340EF99CEFB84842840D60680B870E82513788E744FC1C779DBC6481E82B335203D20E6420273235B105072DFAC5B0BF5B40D4C5F42D7B74FE753924C80E68E049DFB5721037C4F23279C84B50697226D31F1B827BB33E0CF53E398AE128B20BF9BB77F8E379833B8813B8BD1897610A568033BCC1CC953F9D9CD20674D85260BBCBCEDDCD5295DCFB633C12F4E2C0 -MD = 6473A726A3E9A96259C81C31B021139DD44207E4BB336564D2C10112A1EFE3DC31D2753CF1DDD74694F7437B1F45099DE15F8D29891689743C8266CBF30EFB38 - -Len = 2028 -Msg = 66507B499F6D8A15A968D9EF30289B4CFAB08ECBAEED472D58140D3C0726746155FA07D73B0374B8D1DADD60432252A4B4F891EC83122BACC96F6A7488B0702A05648488BD0B31950B21D1EFFE567A7A2F7E2D12499DD2D64ED98242B235D9452C35D6CE72D0AE4A57019966AA4C0802A68D20C001A58B0344DBF0D216497CD9414F5079058AA667E30E7D00278CC872542CBF5E81FDBABD321FB0CF877C3972A7EAE36ECC95801E879AB410C75FDF82FF8121214873ECBC4D1F20CC3E9EE2BCACE7659747BD65C37E6E3F209519C7CD189F023C89EF09D7F232243463169C92001818670FAD9059377ABC957C97B94ED20D2E71DB202C0C1036F0BB9510 -MD = 6DAAB5B265C1CE39D4270EEA23D0F5BE28EC1C1304AF56D73893E4FD80618DC9B70DE97CDD731D6A96D064144090238C3ECC718B3E5F012022822B2B72AAAA57 - -Len = 2029 -Msg = 9FE62860A9C15D81A218CEFC0C50914B49F04A8A86CBD9DE7132CBD76EA878140267C917EA83BB930BE41268C01D63303682BAFE04F576DBC7C167953F9B90B9938CBE27F83BCD800F0F4602AA88BBA68FE3D8E31A3A8BBA76CC9CD30235B719E5838307CFC7B635517BDAA796E792B72DF8ECDC5A26B6D2949CC443800D12D705354D1CCDFE88E526AAC41C71B7E9A710659550DC7338FB97E774CFF9C44BAD6A31B5783745D503FDBEA6B34CF611022D20CD1B5BAA64E60D111E40989D0F50683BFC5F1CCA929667157977FF1101817DAC901C7E9FC3032ED7FF4DA36A9DC90F8B9C1D81B20B5D972A662975F4DEB7E2199A3FA2E300703FE38BDAAF38 -MD = 174BB2316FFCB79378E2CFC79BE5BAFC441E174A54666FC2C7FC87A91EDB1C6B32038460E52477BC7A647FA310807BC1909619B202348E73F945839200030483 - -Len = 2030 -Msg = A91E640739831082E52FFBE1DA2BEE69E8DCCB8AC4175EF07EEE805087A53F164CCEE639EF5C510ABE9B204AD46376878301FA785B89B1AB924CB069E8F535933F61E469A2DB92F4BAD7BC6E9F550FF38ABD06CDCB421B4B60E64E00D3371DAD1F2B52DF5D0609BD653088AA201939A3324411B59070F7A4016439C97E27E0A7FFC463C8EB1896CCEFF358E1E3C9EB383CD6B8D8F27585280DA8C70E3D5809D08FFD605CDE24940AF1999802ADA4E8AA2CE9DFB8FDCFB877F4EFE1C6945A314BEAB88ADE3DC3F835A4C76ED46008A6D0688C83307E740AEA16D12B7BC56183CFF9B4374C12C53D4F364B0D688601624141B225988D75EE3647EB4EA22D74 -MD = 537598F039D40B2297641541A36CBAA11766938C8F08755775B08864D1162776C267B81098693CEA25E2979306A4FD2A9DC7BE5B4B0F02BBA427386738719015 - -Len = 2031 -Msg = E5B97559FB95D8E558BA351B7F715DFBD2835417B500231EEF8C9AC1EA163A4EB890E6054F0B9CD4F843D249846A0E6BC3A1B0C88B0DBDA86A28F8E6EB30508D78E70917A17BAF35F98FF98B3BA3402DBA0A3111C1F0B62B931F5CCC5B179C9CC1F66CF687721A3551098F5B3DD7CD642F245398E2B36981405771E614422DDFCAC667449C39399DA06D2012B038C1AF106DB458BD4C3D67EC01B44FC473E1E98048816F70F17AA5FC347E0FC494C302334091D323F40A8C1894F610729EB7845DB749E40C7AC0BB37570F42434E64905BA3928AB359AF4F6BD2AAFE2A74DF01A4C8176840D7B069AD0AFFC8C403EF4C82BCE137E491F421149C172B2228 -MD = 56297E75453B87CA3EA439A84AB3F01A997EDF403FC7F5D75178F32FEE5723CFEA243AFA1E2AA68B1A87F18BA58144CC6A3B33FBA8579A8253B8754889A40693 - -Len = 2032 -Msg = 83167FF53704C3AA19E9FB3303539759C46DD4091A52DDAE9AD86408B69335989E61414BC20AB4D01220E35241EFF5C9522B079FBA597674C8D716FE441E566110B6211531CECCF8FD06BC8E511D00785E57788ED9A1C5C73524F01830D2E1148C92D0EDC97113E3B7B5CD3049627ABDB8B39DD4D6890E0EE91993F92B03354A88F52251C546E64434D9C3D74544F23FB93E5A2D2F1FB15545B4E1367C97335B0291944C8B730AD3D4789273FA44FB98D78A36C3C3764ABEEAC7C569C1E43A352E5B770C3504F87090DEE075A1C4C85C0C39CF421BDCC615F9EFF6CB4FE6468004AECE5F30E1ECC6DB22AD9939BB2B0CCC96521DFBF4AE008B5B46BC006E -MD = EC983E787628B94C87FFF8D57D2D058667D12F5AF458BCE79BB7844FB41D9C55920F593C8D8730EB8D54FF1D51CD8AD2F1C2A0F7D6B299A21266744E47D142B2 - -Len = 2033 -Msg = 183E87351ABE6CDE83B3160C5E174B7F543F6D1C2AE1507171E532607490E527194E030E25D543C7856BCC3AAED1A0F6BD5EBAE7D569DB10FDC684DF99DF107A78BEC6B0682FF647DEB9429A8FCCF2C13EE69EC8E3A4BD85DFE2BC2F0D8FE4CAF2EAD4BF96890A21DB95609CE8626328DBA475F3D09F22126CF83646FEC3059DC735C12A6D0C0E2AF306C26C99EDA34FA3F5885606725718E2216352999A7F9C5F19219249311375E0EDE0707096B48F32F01FBF3A53FF8D4F5D7D950EB49A7FC1D2A1E8D4839630D854CBA801F9A354558B9866F7EB2F12ABA56F8CC3D60A5D151B0DBEFFAEBB6305C3716A0F939F9D3BF7971DE2AE9E49750BBD7C8AD300 -MD = 8BAB9065DE6AEB540461BFCCA2130209D373808CEE34FECF1EF104CE284A4768816096A28E3E2DA319D5B10E3AD074BC6394690309560A663410286AD10273B7 - -Len = 2034 -Msg = F8FF3B3787516E0A7579734B74EF878E7C64C19103AE67A47B9BB72D884D1A233DB5FDEAC236D23C94CC5E0A50F80FA0354EBF950A25D22A5D077F0017D0250F5B0B43A6B6958A74D0EC2179441229F698023DF319C408ECFA062B70D5FAB0545E955BA6F77C3B848DD041A4C40877FAB1AA89CDE0699E7C98575C104D713E7265405109B56A034A91A9BABACCE8BF2B493E84AD20C0055EF281642F7FF49D5775C05AB80415102B94FE90CF920DCBEAED91DC4B0BEB57708DBBAE82329EDF2FC0980F47266893DCADA678B374B34BBF75E8716464A3BDAE28A6281501B503A17E4A6E87AD35BF0BEEF0C81EAF744C4BF02485C4438B41097AF72D070E9AC0 -MD = B2CFA9A9F69A746F1EC0D4FDAEBF07B85D02911390DA66A3F5FF30DC0D8F365ACF493D9D4FC66E4BE6C9FC0E1AA789CE2CF7720FB6670FFE62F458630D9EFD55 - -Len = 2035 -Msg = 7EA3A713810E1A3CE414301D5B3E5698844F8DEC10729045C5299F07AC74C8A926BA6241CC4FAD0826B073A36CB9AABD7EE4763CFF17173957791F3FF615C897264D9A88A509F932D332BA3B95E5F3B4469AFA7183A67BA46F7B6D43B99A5F5B92823B9CF22F3657CBCFAA8A5FD0EFECC507702AB1B0D1DEDBEAAE326B49AB080188206024CE0F1324A5C9D10AC07ACDB9F60F008A345DA3A8DDA50CF90E364DBCD0845B031D0AB44BE1DE22E7F13F7C092B945055EBF8B17DD8E06D4F4D8D2883918B309376E07D6849927CFC0F99F32AF039C866E723D3A951A374AFD532B50EAE3BE6FD3634B95D184574CF0F5399352FE164D3BCAC75C3E07E800D59A0 -MD = C2ADEAD5A40017807CA2328402D72E942BA70668B984C6F7CFEE5AB50AB23BF849611DBE99C1CBF8057C04DC474E49E0AF2DC75ADF1110EA733829E94971F6B9 - -Len = 2036 -Msg = 5F878802DA83E8C9822A0262D2C29E1520E3B8B21D01928610B2DD3940379A70B635E1028D236AF0A4F3E7D19F64BA5A286B61DEF259A8B2587B3673BA13533C8067427CA0252C39BFD6A41D70269BE40D35BA7B9B9AC38CE4B980168BCADA5149AA8B49363FC93FD12AD4FF4D89EE8FA87FFABCEFF8508E949EBE8AFDCE5FCBB55960C6BBD912D80481736A0B485F1911068D242596C223C5D6CDF4DFECC7292D24C8925588336AE40033ECB4A61761BC2518E7C51F14E62FDB67897EE6BF398430D87B8B1427C3FFDD43B85AF3B329456E169A02D4573484478DA4747B81056D0D51D63E5B13442FC16BB228C6E87632A9EE59D48EE7DC3E20090EA6CE90 -MD = 3D565FBEA33FF262E272F677F12888BC49866F5D68E5366E35470593F1C8FD7EC780954FBD74F3B558231C7C0665B182DAA0F47F32240EBA329029BA469D93D1 - -Len = 2037 -Msg = B652BCB949215CC82A08AA428F90CAA72755D785F102D112689205ECB97F68844B120FAE0F68F87AFB41BE7AFFE3946CDE47AFDD5F1A2AC8326D1C15976C610CF261F95D49D7F13DF9619D58B585446D0F572514C046AC5DB3AA8CD2BFBA41DC9332ECCD4C9DD946FBC60EA604E9E69319ECA5A3EF3910E446D57AC1543CA4DD29F2A42ED3F12B2F21B40911258DB642365F8D5F9737E3F39D77B8BC53CED9E3A2E0C0C8328F27428764E25CFA14FAA401A42B8C5EC1586DC1B4EA108D8AEC3CCC312738D8320F41917D413D3E5214DC46A7AD5EAB4E7326279CD5CEB30FA881535621E096925D18E62C71CBABEADD9DA58321F80C8F6777FB97C516426A18 -MD = F98366E169F19E8691201C03286004770B908FF69D3778B7F2C6C35D1FBA0039775D9BA8F94E47015BD766547BAD4EC8F151BF9A4FC262A9C56412CE9C301CDC - -Len = 2038 -Msg = 6546D6A5C2F0D01D65BB637E5FD0E07E8320380580E1145BC90FD193D43A615625BF84014832BC89F4D7B06151A6070D29BC8BDAFC7CA713350A1A690ACE8DDD8491C0CDD5625537DA096C76BF8B0D92F43F2EE0250B49F31B3FEE950A4BE5BA0C92A9865F13F933521F84D3F6A35679EE5A1AA7723143B0479CDB749EFDBD7ED0C4C4577A57EAB953AF4D4F51BDBC25D5152ABC17431F4A54EF54C09BD4559F398DEDE349CA00EF9896B67241CDE6568C2E227D1A9B476DD6CFAA213AF4DF680A10227E40AA3287AC52A3E1FC763A5800014E0E986EB22109654E18C65493E6194E1735C631A74F9C5EB2491FEF909983ABDB45C98E673C276A431E2AC418 -MD = 91B9BD22023AF7D197251891A3E610C268186B0C0B6D1A867F32F7E9C95FD279C2C80EBC773D81326A8697C12AE39BACF38126F7F1ED12016F1019B2A2E6F12B - -Len = 2039 -Msg = 032E441D08C89545C5961987E89BE2560F04BC3F020F798A83F403AE49A45F16B2D4BAAF899FAB28E85680A5B0354009827ADB04810FFA3E102CD50F3CBB5F13B38162EBBDD866F9AEC7CA8BCF702BD2026497B9F4AFF49507461C9658C6326815FE96922FB96977A79C3A0E81B7854312B8B5147F3B5D028C666F99D57899A68D63DD6C8261A0894636EFDF628338C4AB39B83F9AB66FF748C4FC41458BA8926ADF757A74F59603F61C5EA8C2F1C1B5D9A015F37E4443B50F20047405050B81969C1108EB01C09CEF25F081FC9885FF5623E76F741B811D03A9E05EA2D6DF1C735027D715DB3C8074ADC2ED16082A7A2C8D948275484220E682FE0D0E9A70 -MD = 2A6B58B39908A4E8C60F713D784B41878B11DEC79B579BD3A7A464B5A363682980646AD46032E4E249A2C7B77C53A037B120C2C5F557945C1C51369E93637064 - -Len = 2040 -Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 -MD = 81950E7096D31D4F22E3DB71CAC725BF59E81AF54C7CA9E6AEEE71C010FC5467466312A01AA5C137CFB140646941556796F612C9351268737C7E9A2B9631D1FA - -Len = 2041 -Msg = 7163B9175ECF3A64D3713ECC73204470A0DC1B015B4DF7ACADDBC68D14DA8C923BB6FF08BB79C1CFA8E001B85139E0A9B18131FC34832C9058D9B8415FBC3DB4C75EB9D8CC025A6F5203BD7A1FAC956C737C11692EA194D18D80F63ED5A2ACB3BC8E3E235DEC9C43819E0001FE35AB6FC3FC25046CD079B32B0FA40816F69E0C47C05C3D7AA68863E8CB4197921DCFDE83BCFE3A8F243BAC68374FAAA6CE9A01438D7AED50CA231954CE9A59EDE88A408CF8114012F619003D6E192CB7CBB7AC3A9BF1712F943453D3AF925F2F1BBF10D6EC0094A7832BF3D0A52CF727E52EB2403FCF3AD7D4CDC8A86DE388840372C250A8011F27BC1B029EC3F39FC14B9180 -MD = EE2415CC2DF35D51D965744E83443B3FBD8B19E835B14DCC8D0853A8CF51A215FE422B30E16681BB32EB2951E9A4A17B26AA1A222ED8B529F20096E87895615E - -Len = 2042 -Msg = 3DCEC0E888A6A238E2AFB6A02F6F270FC30B93C2CD4FFF9F6E9A0153D50FBA559080A282519C7B91396147B7279937805060E529F415150FD7A9E1950DEF27FB2DC0B201C73C2A834AE0CC073961B2CFB074E40DB425B0E6628389CC622D7B963DB1F7A35823CE80D40DA1112302EB90461EADA4005EF4D5DDA5C04BC7AAF3A9DED53AC54BC17E2E27967C7B828AEAFDC192DED6AE741044347BE7888B3B6DEF63A118830ABB1F6B6D5B2D28E5F7D5803E8507D4F6D06D85D90D1E250E6389CF63D182F4587E5C5526847A0C95E2EFFC3344E32BA29E56757BC0125148FF08B83553A8CDF0F68AECB514F06941199799C491E0C55C58D240560905B56C6CF800 -MD = 59A5A4E94AF37CFE4E7E79FABC7FDEAAE1EBB19C8D63CF1E72D76B88F6A8D57D62170877F7F11FDCA9C02181553A635333AD9842A7CB0661B342C7E3DFF05A85 - -Len = 2043 -Msg = 41355A235D1F809C3C5B921CE7FB9D517ECC1E7439FB304F2D1CF919DAA5DE13154FAD2BC8FD7F3EA3B026CEF34BCFF61B5D779CD8D2C76461FA3821D6343AD05A791BC915164543C32A74C85FB225DF22A0039D6F349C6E39545CBD490359EE5152D32F263BA5B6169223F6BA9E125AF53BAFBA95FDEEF5A068B6299871CA1BB743235076471144501E03C911701476152C218EBF1A734198655498EB6F82A1FDDBE4BB845B0DD7636943CE869812F9DB13E59055A7ECA774C60105E95A59E23A9156E23FB51AA9B7AA95BE82D8B375542D320A1989A85E6F9ABADF85CFCAB576C93E71A1E1367A2789F21DE5D4BFC0660DFEC110860DAA15F23FD3A4600620 -MD = 196365CF76D3047043BFA079B6FBB740BAE7DDD14CE81DDD36E433AFA66D758A9504EA7436DD43A0E05D6A04457F1AC0A6CBA182D1D22725FA36E184E9BE102C - -Len = 2044 -Msg = CA0B483D9E27EE4DE097CC92AF14D4A1B096E7533E85AFF050C49798A09167C63CCC9E85BEE8FDBF3681547C687D71E24B4CF618410FE9DF0B0D161AD323E14385C661EA7DCA937F62ACD0E54173FB18C22DC0048B35470D81BE6F1790B8CE63CC5495821AA34211DCE1E681F95DAC61C960EA25D74FABCF97BC3CB800BE6DFB4325A608BA2C701756B31C179B6E0724B7DE0E95E9732865034AEE72C19617BE8AC5CC266633E949C733B38F4915C94964EF5EC2F5C5BD65E1446F2621A120376B10DAC06792625799E67BE6F474D4DEE4D4E84C8EA08F03FE4C95D8967C3C28E82606FE7390449C4C0EBFC002054C8228157D04D8B4346A1667EB173CF238B0 -MD = F37D52CDBAD40DB463D7F4E7DE7ADD7EAA9386D6DB6F871CCB43CF70CFAAAACF047E1962F9F99849C490B2BE4ECA85792FBA178437C517499D39B12A3C8BC2CF - -Len = 2045 -Msg = EC545360EE77F181B55B942CC77E84B64A74241F8E02BB940560575964C5FA131C453BCB179B6547D317180BDA99D8EA69D4216B58E8C38BCABA42E2B1E23712C6558C6A1A14996955540A4D54A97364B1ED11BAB2B20E0DCA2827FE47EAC10E7BEB694ED6F48860D419F3C370F893F57D9858193389DAF69EAB130C0BCF00D639E3ACE5240E232D733D0A1AB4A805BB8367472DFEE0873762CED8006DB3EC84153A48088581C2BFEDF78FF9DCD628B2B9DB64FFA900B62EEC1F358E4ED5EA31CA719EFBF381B6AF5B366CBF2025099E30B39BF446C8CA123AC302FFCD163946306F5420E3C2E8D50F48169402EF2E1764228D30A4F14A3EEAD1C0A106667518 -MD = 8CC6F2528CA2B09DDDC69E2271741F1B769309607F298AC3466474175C2651B4E69B024ABF0F6D850F6DC353713955E08696ED22129A533DBA31804163C5F29B - -Len = 2046 -Msg = 36CF74E3561474F90A2B62718C8740CE553A207334A1EDC7F95B702848595EC23285F826C989CD975C4390E24C485335B616BCBEBC16EB7C24E895F1A633D5E331DA67BD2A86B088BA6874BAAC74F08F5483D0702F0E41229C14A588BEBD592F86DADB5BA72A1E7FE310728B4234AEC7361AE460DB299D54235DBC92DC20DA9A9B3DD3FD7E68DABEE80C8D1272BC1D1C98093CAC93DBF7FAD2D448E2F1A7992256ECB537DC501756F66D6D7B4409C4C74CEB9355E8587136F67FEE9736667370EC924AF34DE22F75410C1251B344653F2535A163B7FB90ECD874FB0362670E2F9182EFDF0221B0F727BC63534E9F98F4AD713D6B9486F58221442273B9D1EE50 -MD = 4D5AC7A3A34DF77DAAFD1299BB6AE85319E542262D80CA99FC2B24EA76DF9FE83C0B80F0399FEC1AC5A9B0231A9A66509C99396143887D369E2F46A4E7B88523 - -Len = 2047 -Msg = 1F42ADD25C0A80A4C82AAE3A0E302ABF9261DCA7E7884FD869D96ED4CE88AAAA25304D2D79E1FA5CC1FA2C95899229BC87431AD06DA524F2140E70BD0536E9685EE7808F598D8A9FE15D40A72AEFF431239292C5F64BDB7F620E5D160B329DEB58CF6D5C0665A3DED61AE4ADBCA94DC2B7B02CDF3992FDF79B3D93E546D5823C3A630923064ED24C3D974C4602A49DF75E49CF7BD51EDC7382214CBA850C4D3D11B40A70B1D926E3755EC79693620C242AB0F23EA206BA337A7EDC5421D63126CB6C7094F6BC1CF9943796BE2A0D9EB74FC726AA0C0D3B3D39039DEAD39A7169F8C3E2365DD349E358BF08C717D2E436D65172A76ED5E1F1E694A75C19280B2A -MD = F8BACD3EABCFB5E6CF78CB3F55065313E6BBFD206775B0939531D6D446D538FDD45D09312BB9A8344DAE6D61D224E6781809C649E924819AF82BB2E0D3AE3689 diff --git a/node_modules/sha3/test/generate_tests.py b/node_modules/sha3/test/generate_tests.py deleted file mode 100755 index 2f7557e..0000000 --- a/node_modules/sha3/test/generate_tests.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env python - -# This will generate a test suite. -# Based on code from python-sha3. - -def generate(): - FILES = [ - ('test/data/ShortMsgKAT_224.txt', 224), - ('test/data/ShortMsgKAT_256.txt', 256), - ('test/data/ShortMsgKAT_384.txt', 384), - ('test/data/ShortMsgKAT_512.txt', 512), - ('test/data/LongMsgKAT_224.txt', 224), - ] - - print """ -// This file generated by generate_tests.py - -var assert = require('assert'); -var SHA3 = require('./../build/Release/sha3'); -var inst; - -""" - - for path, hashlen in FILES: - contents = file(path).read().split('Len = ') - for test in contents: - lines = test.split('\n') - if lines and len(lines) and not lines[0].startswith('#'): - length = int(lines[0]) - if length % 8 == 0 and length != 0: - msg = lines[1].split(' = ')[-1].lower() - md = lines[2].split(' = ')[-1].lower() - name = path.split('/')[-1].split('.')[0] - - print """// %s %s - inst = new SHA3.SHA3Hash(%s); - inst.update(new Buffer(%r, 'hex')); - assert.equal(inst.digest('hex'), %r); - process.stdout.write("."); - -""" % (name, length, hashlen, msg, md) - - print 'process.stdout.write("\\n");' - -if __name__ == '__main__': - generate() diff --git a/node_modules/sha3/test/unit_tests.js b/node_modules/sha3/test/unit_tests.js deleted file mode 100644 index b03052c..0000000 --- a/node_modules/sha3/test/unit_tests.js +++ /dev/null @@ -1,121 +0,0 @@ -var assert = require('assert'); -var util = require('util'); -var SHA3 = require('../').SHA3Hash; - -describe('SHA3', function(){ - - describe('constructor', function(){ - it('allows no hash length to be specified', function(){ - assert.doesNotThrow(function(){ - new SHA3(); - }); - }); - - it('allows omitting the new keyword', function(){ - assert.doesNotThrow(function(){ - SHA3(); - }); - }); - - it('accepts a number to its constructor', function(){ - assert.doesNotThrow(function(){ - new SHA3(224); - new SHA3(256); - new SHA3(384); - new SHA3(512); - }); - }); - - it('throws an error with an integer hashlen of 0', function(){ - assert.throws(function(){ - new SHA3(0); - }, "Unsupported hash length"); - }); - - it('throws an error with an integer which is not a supported hash length', function(){ - assert.throws(function(){ - new SHA3(225); - }, "Unsupported hash length"); - }); - - it('throws an error with any non-positive integer value', function(){ - assert.throws(function(){ - new SHA3('hi'); - }, "Unsupported hash length"); - assert.throws(function(){ - new SHA3(null); - }, "Unsupported hash length"); - assert.throws(function(){ - new SHA3(-1); - }, "Unsupported hash length"); - }); - }); - - describe('#update()', function(){ - it('accepts a string as input', function(){ - var sha = new SHA3(224); - assert.doesNotThrow(function(){ - sha.update('some string value'); - }); - }); - - it('accepts a buffer as input', function(){ - var sha = new SHA3(224); - var buffer = new Buffer('aloha'); - assert.doesNotThrow(function(){ - sha.update(buffer); - }); - }); - - it('does not accept any other types', function(){ - var sha = new SHA3(224); - [1, 3.14, {}, []].forEach(function(arg){ - assert.throws(function(){ - sha.update(arg); - }, "Not a string or buffer"); - }); - }); - }); - - describe('#digest()', function(){ - it('supports hex encoding', function(){ - var result = "0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00" + - "fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e"; - assert.equal(result, new SHA3().digest('hex')); - }); - - it('supports binary encoding', function(){ - var binary = new SHA3().digest('binary'); - assert.ok(binary); - assert.ok(binary.length > 0); - }); - - it('defaults to binary encoding', function(){ - var binary = new SHA3().digest(); - assert.ok(binary); - assert.ok(binary.length > 0); - }); - - it('does not support any other encoding', function(){ - assert.throws(function(){ - new SHA3().digest('buffer'); - }, "Unsupported output encoding"); - }); - - it('incorporates the updates into the output', function(){ - var sha = new SHA3(224); - assert.equal('f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd', sha.digest('hex')); - sha.update('some value'); - assert.equal('c6e8a28b9c677c4f5a1098cbc07454cdf7ba7dc4ee600a4655bec0a6', sha.digest('hex')); - }); - }); - - describe('chaining', function(){ - it('can chain', function(){ - assert.equal( - '76a781712088f94b4f6ca4962f886cac1158bc2f79eabade5ff76d14', - SHA3(224).update('vlad').digest('hex') - ); - }) - }); -}); diff --git a/node_modules/shelljs/.npmignore b/node_modules/shelljs/.npmignore deleted file mode 100644 index 8b693ff..0000000 --- a/node_modules/shelljs/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -test/ -tmp/ -.documentup.json -.gitignore -.jshintrc -.lgtm -.travis.yml -appveyor.yml -RELEASE.md diff --git a/node_modules/shelljs/LICENSE b/node_modules/shelljs/LICENSE deleted file mode 100644 index 0f0f119..0000000 --- a/node_modules/shelljs/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2012, Artur Adib -All rights reserved. - -You may use this project under the terms of the New BSD license as follows: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/shelljs/MAINTAINERS b/node_modules/shelljs/MAINTAINERS deleted file mode 100644 index 3f94761..0000000 --- a/node_modules/shelljs/MAINTAINERS +++ /dev/null @@ -1,3 +0,0 @@ -Ari Porad (@ariporad) -Nate Fischer (@nfischer) -Artur Adib (@arturadib) diff --git a/node_modules/shelljs/README.md b/node_modules/shelljs/README.md deleted file mode 100644 index d6dcb63..0000000 --- a/node_modules/shelljs/README.md +++ /dev/null @@ -1,658 +0,0 @@ -# ShellJS - Unix shell commands for Node.js - -[![Join the chat at https://gitter.im/shelljs/shelljs](https://badges.gitter.im/shelljs/shelljs.svg)](https://gitter.im/shelljs/shelljs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![Build Status](https://travis-ci.org/shelljs/shelljs.svg?branch=master)](http://travis-ci.org/shelljs/shelljs) -[![Build status](https://ci.appveyor.com/api/projects/status/42txr0s3ux5wbumv/branch/master?svg=true)](https://ci.appveyor.com/project/shelljs/shelljs) - -ShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts! - -The project is [unit-tested](http://travis-ci.org/shelljs/shelljs) and battled-tested in projects like: - -+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader -+ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger -+ [JSHint](http://jshint.com) - Most popular JavaScript linter -+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers -+ [Yeoman](http://yeoman.io/) - Web application stack and development tool -+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation - -and [many more](https://npmjs.org/browse/depended/shelljs). - -If you have feedback, suggestions, or need help, feel free to post in our [issue tracker](https://github.com/shelljs/shelljs/issues). - -## Installing - -Via npm: - -```bash -$ npm install [-g] shelljs -``` - -If the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to -run ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder: - -```bash -$ shjs my_script -``` - -## Examples - -### JavaScript - -```javascript -require('shelljs/global'); - -if (!which('git')) { - echo('Sorry, this script requires git'); - exit(1); -} - -// Copy files to release dir -mkdir('-p', 'out/Release'); -cp('-R', 'stuff/*', 'out/Release'); - -// Replace macros in each .js file -cd('lib'); -ls('*.js').forEach(function(file) { - sed('-i', 'BUILD_VERSION', 'v0.1.2', file); - sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file); - sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file); -}); -cd('..'); - -// Run external tool synchronously -if (exec('git commit -am "Auto-commit"').code !== 0) { - echo('Error: Git commit failed'); - exit(1); -} -``` - -### CoffeeScript - -CoffeeScript is also supported automatically: - -```coffeescript -require 'shelljs/global' - -if not which 'git' - echo 'Sorry, this script requires git' - exit 1 - -# Copy files to release dir -mkdir '-p', 'out/Release' -cp '-R', 'stuff/*', 'out/Release' - -# Replace macros in each .js file -cd 'lib' -for file in ls '*.js' - sed '-i', 'BUILD_VERSION', 'v0.1.2', file - sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file - sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file -cd '..' - -# Run external tool synchronously -if (exec 'git commit -am "Auto-commit"').code != 0 - echo 'Error: Git commit failed' - exit 1 -``` - -## Global vs. Local - -The example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`. - -Example: - -```javascript -var shell = require('shelljs'); -shell.echo('hello world'); -``` - -## Make tool - -A convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. -In this case all shell objects are global, and command line arguments will cause the script to -execute only the corresponding function in the global `target` object. To avoid redundant calls, -target functions are executed only once per script. - -Example: - -```javascript -require('shelljs/make'); - -target.all = function() { - target.bundle(); - target.docs(); -}; - -target.bundle = function() { - cd(__dirname); - mkdir('-p', 'build'); - cd('src'); - cat('*.js').to('../build/output.js'); -}; - -target.docs = function() { - cd(__dirname); - mkdir('-p', 'docs'); - var files = ls('src/*.js'); - for(var i = 0; i < files.length; i++) { - var text = grep('//@', files[i]); // extract special comments - text = text.replace(/\/\/@/g, ''); // remove comment tags - text.toEnd('docs/my_docs.md'); - } -}; -``` - -To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`. - -You can also pass arguments to your targets by using the `--` separator. For example, to pass `arg1` and `arg2` to a target `bundle`, do `$ node make bundle -- arg1 arg2`: - -```javascript -require('shelljs/make'); - -target.bundle = function(argsArray) { - // argsArray = ['arg1', 'arg2'] - /* ... */ -} -``` - - - - - -## Command reference - - -All commands run synchronously, unless otherwise stated. - - -### cd([dir]) -Changes to directory `dir` for the duration of the script. Changes to home -directory if no argument is supplied. - - -### pwd() -Returns the current directory. - - -### ls([options,] [path, ...]) -### ls([options,] path_array) -Available options: - -+ `-R`: recursive -+ `-A`: all files (include files beginning with `.`, except for `.` and `..`) -+ `-d`: list directories themselves, not their contents -+ `-l`: list objects representing each file, each with fields containing `ls - -l` output fields. See - [fs.Stats](https://nodejs.org/api/fs.html#fs_class_fs_stats) - for more info - -Examples: - -```javascript -ls('projs/*.js'); -ls('-R', '/users/me', '/tmp'); -ls('-R', ['/users/me', '/tmp']); // same as above -ls('-l', 'file.txt'); // { name: 'file.txt', mode: 33188, nlink: 1, ...} -``` - -Returns array of files in the given path, or in current directory if no path provided. - - -### find(path [, path ...]) -### find(path_array) -Examples: - -```javascript -find('src', 'lib'); -find(['src', 'lib']); // same as above -find('.').filter(function(file) { return file.match(/\.js$/); }); -``` - -Returns array of all files (however deep) in the given paths. - -The main difference from `ls('-R', path)` is that the resulting file names -include the base directories, e.g. `lib/resources/file1` instead of just `file1`. - - -### cp([options,] source [, source ...], dest) -### cp([options,] source_array, dest) -Available options: - -+ `-f`: force (default behavior) -+ `-n`: no-clobber -+ `-r, -R`: recursive - -Examples: - -```javascript -cp('file1', 'dir1'); -cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp'); -cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above -``` - -Copies files. The wildcard `*` is accepted. - - -### rm([options,] file [, file ...]) -### rm([options,] file_array) -Available options: - -+ `-f`: force -+ `-r, -R`: recursive - -Examples: - -```javascript -rm('-rf', '/tmp/*'); -rm('some_file.txt', 'another_file.txt'); -rm(['some_file.txt', 'another_file.txt']); // same as above -``` - -Removes files. The wildcard `*` is accepted. - - -### mv([options ,] source [, source ...], dest') -### mv([options ,] source_array, dest') -Available options: - -+ `-f`: force (default behavior) -+ `-n`: no-clobber - -Examples: - -```javascript -mv('-n', 'file', 'dir/'); -mv('file1', 'file2', 'dir/'); -mv(['file1', 'file2'], 'dir/'); // same as above -``` - -Moves files. The wildcard `*` is accepted. - - -### mkdir([options,] dir [, dir ...]) -### mkdir([options,] dir_array) -Available options: - -+ `-p`: full path (will create intermediate dirs if necessary) - -Examples: - -```javascript -mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g'); -mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above -``` - -Creates directories. - - -### test(expression) -Available expression primaries: - -+ `'-b', 'path'`: true if path is a block device -+ `'-c', 'path'`: true if path is a character device -+ `'-d', 'path'`: true if path is a directory -+ `'-e', 'path'`: true if path exists -+ `'-f', 'path'`: true if path is a regular file -+ `'-L', 'path'`: true if path is a symbolic link -+ `'-p', 'path'`: true if path is a pipe (FIFO) -+ `'-S', 'path'`: true if path is a socket - -Examples: - -```javascript -if (test('-d', path)) { /* do something with dir */ }; -if (!test('-f', path)) continue; // skip if it's a regular file -``` - -Evaluates expression using the available primaries and returns corresponding value. - - -### cat(file [, file ...]) -### cat(file_array) - -Examples: - -```javascript -var str = cat('file*.txt'); -var str = cat('file1', 'file2'); -var str = cat(['file1', 'file2']); // same as above -``` - -Returns a string containing the given file, or a concatenated string -containing the files if more than one file is given (a new line character is -introduced between each file). Wildcard `*` accepted. - - -### 'string'.to(file) - -Examples: - -```javascript -cat('input.txt').to('output.txt'); -``` - -Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as -those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_ - - -### 'string'.toEnd(file) - -Examples: - -```javascript -cat('input.txt').toEnd('output.txt'); -``` - -Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as -those returned by `cat`, `grep`, etc). - - -### sed([options,] search_regex, replacement, file [, file ...]) -### sed([options,] search_regex, replacement, file_array) -Available options: - -+ `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_ - -Examples: - -```javascript -sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js'); -sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js'); -``` - -Reads an input string from `files` and performs a JavaScript `replace()` on the input -using the given search regex and replacement string or function. Returns the new string after replacement. - - -### grep([options,] regex_filter, file [, file ...]) -### grep([options,] regex_filter, file_array) -Available options: - -+ `-v`: Inverse the sense of the regex and print the lines not matching the criteria. - -Examples: - -```javascript -grep('-v', 'GLOBAL_VARIABLE', '*.js'); -grep('GLOBAL_VARIABLE', '*.js'); -``` - -Reads input string from given files and returns a string containing all lines of the -file that match the given `regex_filter`. Wildcard `*` accepted. - - -### which(command) - -Examples: - -```javascript -var nodeExec = which('node'); -``` - -Searches for `command` in the system's PATH. On Windows, this uses the -`PATHEXT` variable to append the extension if it's not already executable. -Returns string containing the absolute path to the command. - - -### echo(string [, string ...]) - -Examples: - -```javascript -echo('hello world'); -var str = echo('hello world'); -``` - -Prints string to stdout, and returns string with additional utility methods -like `.to()`. - - -### pushd([options,] [dir | '-N' | '+N']) - -Available options: - -+ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated. - -Arguments: - -+ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`. -+ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack. -+ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack. - -Examples: - -```javascript -// process.cwd() === '/usr' -pushd('/etc'); // Returns /etc /usr -pushd('+1'); // Returns /usr /etc -``` - -Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack. - -### popd([options,] ['-N' | '+N']) - -Available options: - -+ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated. - -Arguments: - -+ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero. -+ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero. - -Examples: - -```javascript -echo(process.cwd()); // '/usr' -pushd('/etc'); // '/etc /usr' -echo(process.cwd()); // '/etc' -popd(); // '/usr' -echo(process.cwd()); // '/usr' -``` - -When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack. - -### dirs([options | '+N' | '-N']) - -Available options: - -+ `-c`: Clears the directory stack by deleting all of the elements. - -Arguments: - -+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero. -+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero. - -Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified. - -See also: pushd, popd - - -### ln([options,] source, dest) -Available options: - -+ `-s`: symlink -+ `-f`: force - -Examples: - -```javascript -ln('file', 'newlink'); -ln('-sf', 'file', 'existing'); -``` - -Links source to dest. Use -f to force the link, should dest already exist. - - -### exit(code) -Exits the current process with the given exit code. - -### env['VAR_NAME'] -Object containing environment variables (both getter and setter). Shortcut to process.env. - -### exec(command [, options] [, callback]) -Available options (all `false` by default): - -+ `async`: Asynchronous execution. If a callback is provided, it will be set to - `true`, regardless of the passed value. -+ `silent`: Do not echo program output to console. -+ and any option available to NodeJS's - [child_process.exec()](https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback) - -Examples: - -```javascript -var version = exec('node --version', {silent:true}).stdout; - -var child = exec('some_long_running_process', {async:true}); -child.stdout.on('data', function(data) { - /* ... do something with data ... */ -}); - -exec('some_long_running_process', function(code, stdout, stderr) { - console.log('Exit code:', code); - console.log('Program output:', stdout); - console.log('Program stderr:', stderr); -}); -``` - -Executes the given `command` _synchronously_, unless otherwise specified. When in synchronous -mode returns the object `{ code:..., stdout:... , stderr:... }`, containing the program's -`stdout`, `stderr`, and its exit `code`. Otherwise returns the child process object, -and the `callback` gets the arguments `(code, stdout, stderr)`. - -**Note:** For long-lived processes, it's best to run `exec()` asynchronously as -the current synchronous implementation uses a lot of CPU. This should be getting -fixed soon. - - -### chmod(octal_mode || octal_string, file) -### chmod(symbolic_mode, file) - -Available options: - -+ `-v`: output a diagnostic for every file processed -+ `-c`: like verbose but report only when a change is made -+ `-R`: change files and directories recursively - -Examples: - -```javascript -chmod(755, '/Users/brandon'); -chmod('755', '/Users/brandon'); // same as above -chmod('u+x', '/Users/brandon'); -``` - -Alters the permissions of a file or directory by either specifying the -absolute permissions in octal form or expressing the changes in symbols. -This command tries to mimic the POSIX behavior as much as possible. -Notable exceptions: - -+ In symbolic modes, 'a-r' and '-r' are identical. No consideration is - given to the umask. -+ There is no "quiet" option since default behavior is to run silent. - - -### touch([options,] file) -Available options: - -+ `-a`: Change only the access time -+ `-c`: Do not create any files -+ `-m`: Change only the modification time -+ `-d DATE`: Parse DATE and use it instead of current time -+ `-r FILE`: Use FILE's times instead of current time - -Examples: - -```javascript -touch('source.js'); -touch('-c', '/path/to/some/dir/source.js'); -touch({ '-r': FILE }, '/path/to/some/dir/source.js'); -``` - -Update the access and modification times of each FILE to the current time. -A FILE argument that does not exist is created empty, unless -c is supplied. -This is a partial implementation of *[touch(1)](http://linux.die.net/man/1/touch)*. - - -### set(options) -Available options: - -+ `+/-e`: exit upon error (`config.fatal`) -+ `+/-v`: verbose: show all commands (`config.verbose`) - -Examples: - -```javascript -set('-e'); // exit upon first error -set('+e'); // this undoes a "set('-e')" -``` - -Sets global configuration variables - - -## Non-Unix commands - - -### tempdir() - -Examples: - -```javascript -var tmp = tempdir(); // "/tmp" for most *nix platforms -``` - -Searches and returns string containing a writeable, platform-dependent temporary directory. -Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir). - - -### error() -Tests if error occurred in the last command. Returns `null` if no error occurred, -otherwise returns string explaining the error - - -## Configuration - - -### config.silent -Example: - -```javascript -var sh = require('shelljs'); -var silentState = sh.config.silent; // save old silent state -sh.config.silent = true; -/* ... */ -sh.config.silent = silentState; // restore old silent state -``` - -Suppresses all command output if `true`, except for `echo()` calls. -Default is `false`. - -### config.fatal -Example: - -```javascript -require('shelljs/global'); -config.fatal = true; // or set('-e'); -cp('this_file_does_not_exist', '/dev/null'); // dies here -/* more commands... */ -``` - -If `true` the script will die on errors. Default is `false`. This is -analogous to Bash's `set -e` - -### config.verbose -Example: - -```javascript -config.verbose = true; // or set('-v'); -cd('dir/'); -ls('subdir/'); -``` - -Will print each command as follows: - -``` -cd dir/ -ls subdir/ -``` diff --git a/node_modules/shelljs/bin/shjs b/node_modules/shelljs/bin/shjs deleted file mode 100755 index aae3bc6..0000000 --- a/node_modules/shelljs/bin/shjs +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env node -require('../global'); - -if (process.argv.length < 3) { - console.log('ShellJS: missing argument (script name)'); - console.log(); - process.exit(1); -} - -var args, - scriptName = process.argv[2]; -env['NODE_PATH'] = __dirname + '/../..'; - -if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) { - if (test('-f', scriptName + '.js')) - scriptName += '.js'; - if (test('-f', scriptName + '.coffee')) - scriptName += '.coffee'; -} - -if (!test('-f', scriptName)) { - console.log('ShellJS: script not found ('+scriptName+')'); - console.log(); - process.exit(1); -} - -args = process.argv.slice(3); - -for (var i = 0, l = args.length; i < l; i++) { - if (args[i][0] !== "-"){ - args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words - } -} - -if (scriptName.match(/\.coffee$/)) { - // - // CoffeeScript - // - if (which('coffee')) { - exec('coffee "' + scriptName + '" ' + args.join(' '), function(code) { - process.exit(code); - }); - } else { - console.log('ShellJS: CoffeeScript interpreter not found'); - console.log(); - process.exit(1); - } -} else { - // - // JavaScript - // - exec('node "' + scriptName + '" ' + args.join(' '), function(code) { - process.exit(code); - }); -} diff --git a/node_modules/shelljs/global.js b/node_modules/shelljs/global.js deleted file mode 100644 index 97f0033..0000000 --- a/node_modules/shelljs/global.js +++ /dev/null @@ -1,3 +0,0 @@ -var shell = require('./shell.js'); -for (var cmd in shell) - global[cmd] = shell[cmd]; diff --git a/node_modules/shelljs/make.js b/node_modules/shelljs/make.js deleted file mode 100644 index a8438c8..0000000 --- a/node_modules/shelljs/make.js +++ /dev/null @@ -1,57 +0,0 @@ -require('./global'); - -global.config.fatal = true; -global.target = {}; - -var args = process.argv.slice(2), - targetArgs, - dashesLoc = args.indexOf('--'); - -// split args, everything after -- if only for targets -if (dashesLoc > -1) { - targetArgs = args.slice(dashesLoc + 1, args.length); - args = args.slice(0, dashesLoc); -} - -// This ensures we only execute the script targets after the entire script has -// been evaluated -setTimeout(function() { - var t; - - if (args.length === 1 && args[0] === '--help') { - console.log('Available targets:'); - for (t in global.target) - console.log(' ' + t); - return; - } - - // Wrap targets to prevent duplicate execution - for (t in global.target) { - (function(t, oldTarget){ - - // Wrap it - global.target[t] = function() { - if (!oldTarget.done){ - oldTarget.done = true; - oldTarget.result = oldTarget.apply(oldTarget, arguments); - } - return oldTarget.result; - }; - - })(t, global.target[t]); - } - - // Execute desired targets - if (args.length > 0) { - args.forEach(function(arg) { - if (arg in global.target) - global.target[arg](targetArgs); - else { - console.log('no such target: ' + arg); - } - }); - } else if ('all' in global.target) { - global.target.all(targetArgs); - } - -}, 0); diff --git a/node_modules/shelljs/package.json b/node_modules/shelljs/package.json deleted file mode 100644 index 8f47f81..0000000 --- a/node_modules/shelljs/package.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "_args": [ - [ - "shelljs@^0.6.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "shelljs@>=0.6.0 <0.7.0", - "_id": "shelljs@0.6.1", - "_inCache": true, - "_installable": true, - "_location": "/shelljs", - "_nodeVersion": "6.0.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/shelljs-0.6.1.tgz_1470519555022_0.9348916830495" - }, - "_npmUser": { - "email": "ntfschr@gmail.com", - "name": "nfischer" - }, - "_npmVersion": "3.5.2", - "_phantomChildren": {}, - "_requested": { - "name": "shelljs", - "raw": "shelljs@^0.6.0", - "rawSpec": "^0.6.0", - "scope": null, - "spec": ">=0.6.0 <0.7.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc" - ], - "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "_shasum": "ec6211bed1920442088fe0f70b2837232ed2c8a8", - "_shrinkwrap": null, - "_spec": "shelljs@^0.6.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "email": "arturadib@gmail.com", - "name": "Artur Adib" - }, - "bin": { - "shjs": "./bin/shjs" - }, - "bugs": { - "url": "https://github.com/shelljs/shelljs/issues" - }, - "contributors": [ - { - "email": "ari@ariporad.com", - "name": "Ari Porad", - "url": "http://ariporad.com/" - }, - { - "email": "ntfschr@gmail.com", - "name": "Nate Fischer" - } - ], - "dependencies": {}, - "description": "Portable Unix shell commands for Node.js", - "devDependencies": { - "coffee-script": "^1.10.0", - "jshint": "~2.1.11" - }, - "directories": {}, - "dist": { - "shasum": "ec6211bed1920442088fe0f70b2837232ed2c8a8", - "tarball": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "gitHead": "a5b9e2a64ffdf9f837d6ceb15d7f42221875542b", - "homepage": "http://github.com/shelljs/shelljs", - "keywords": [ - "unix", - "shell", - "makefile", - "make", - "jake", - "synchronous" - ], - "license": "BSD-3-Clause", - "main": "./shell.js", - "maintainers": [ - { - "email": "ari@ariporad.com", - "name": "ariporad" - }, - { - "email": "arturadib@gmail.com", - "name": "artur" - }, - { - "email": "ntfschr@gmail.com", - "name": "nfischer" - } - ], - "name": "shelljs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/shelljs/shelljs.git" - }, - "scripts": { - "test": "node scripts/run-tests" - }, - "version": "0.6.1" -} diff --git a/node_modules/shelljs/scripts/generate-docs.js b/node_modules/shelljs/scripts/generate-docs.js deleted file mode 100755 index 3a31a91..0000000 --- a/node_modules/shelljs/scripts/generate-docs.js +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env node -/* globals cat, cd, echo, grep, sed */ -require('../global'); - -echo('Appending docs to README.md'); - -cd(__dirname + '/..'); - -// Extract docs from shell.js -var docs = grep('//@', 'shell.js'); - -docs = docs.replace(/\/\/\@include (.+)/g, function(match, path) { - var file = path.match('.js$') ? path : path+'.js'; - return grep('//@', file); -}); - -// Remove '//@' -docs = docs.replace(/\/\/\@ ?/g, ''); - -// Wipe out the old docs -cat('README.md').replace(/## Command reference(.|\n)*/, '## Command reference').to('README.md'); - -// Append new docs to README -sed('-i', /## Command reference/, '## Command reference\n\n' + docs, 'README.md'); - -echo('All done.'); diff --git a/node_modules/shelljs/scripts/run-tests.js b/node_modules/shelljs/scripts/run-tests.js deleted file mode 100755 index e8e7ff2..0000000 --- a/node_modules/shelljs/scripts/run-tests.js +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env node -/* globals cd, echo, exec, exit, ls, pwd, test */ -require('../global'); -var common = require('../src/common'); - -var failed = false; - -// -// Lint -// -var JSHINT_BIN = 'node_modules/jshint/bin/jshint'; -cd(__dirname + '/..'); - -if (!test('-f', JSHINT_BIN)) { - echo('JSHint not found. Run `npm install` in the root dir first.'); - exit(1); -} - -var jsfiles = common.expand([pwd() + '/*.js', - pwd() + '/scripts/*.js', - pwd() + '/src/*.js', - pwd() + '/test/*.js' - ]).join(' '); -if (exec('node ' + pwd() + '/' + JSHINT_BIN + ' ' + jsfiles).code !== 0) { - failed = true; - echo('*** JSHINT FAILED! (return code != 0)'); - echo(); -} else { - echo('All JSHint tests passed'); - echo(); -} - -// -// Unit tests -// -cd(__dirname + '/../test'); -ls('*.js').forEach(function(file) { - echo('Running test:', file); - if (exec('node ' + file).code !== 123) { // 123 avoids false positives (e.g. premature exit) - failed = true; - echo('*** TEST FAILED! (missing exit code "123")'); - echo(); - } -}); - -if (failed) { - echo(); - echo('*******************************************************'); - echo('WARNING: Some tests did not pass!'); - echo('*******************************************************'); - exit(1); -} else { - echo(); - echo('All tests passed.'); -} diff --git a/node_modules/shelljs/shell.js b/node_modules/shelljs/shell.js deleted file mode 100644 index 93aff70..0000000 --- a/node_modules/shelljs/shell.js +++ /dev/null @@ -1,184 +0,0 @@ -// -// ShellJS -// Unix shell commands on top of Node's API -// -// Copyright (c) 2012 Artur Adib -// http://github.com/arturadib/shelljs -// - -var common = require('./src/common'); - - -//@ -//@ All commands run synchronously, unless otherwise stated. -//@ - -//@include ./src/cd -var _cd = require('./src/cd'); -exports.cd = common.wrap('cd', _cd); - -//@include ./src/pwd -var _pwd = require('./src/pwd'); -exports.pwd = common.wrap('pwd', _pwd); - -//@include ./src/ls -var _ls = require('./src/ls'); -exports.ls = common.wrap('ls', _ls); - -//@include ./src/find -var _find = require('./src/find'); -exports.find = common.wrap('find', _find); - -//@include ./src/cp -var _cp = require('./src/cp'); -exports.cp = common.wrap('cp', _cp); - -//@include ./src/rm -var _rm = require('./src/rm'); -exports.rm = common.wrap('rm', _rm); - -//@include ./src/mv -var _mv = require('./src/mv'); -exports.mv = common.wrap('mv', _mv); - -//@include ./src/mkdir -var _mkdir = require('./src/mkdir'); -exports.mkdir = common.wrap('mkdir', _mkdir); - -//@include ./src/test -var _test = require('./src/test'); -exports.test = common.wrap('test', _test); - -//@include ./src/cat -var _cat = require('./src/cat'); -exports.cat = common.wrap('cat', _cat); - -//@include ./src/to -var _to = require('./src/to'); -String.prototype.to = common.wrap('to', _to); - -//@include ./src/toEnd -var _toEnd = require('./src/toEnd'); -String.prototype.toEnd = common.wrap('toEnd', _toEnd); - -//@include ./src/sed -var _sed = require('./src/sed'); -exports.sed = common.wrap('sed', _sed); - -//@include ./src/grep -var _grep = require('./src/grep'); -exports.grep = common.wrap('grep', _grep); - -//@include ./src/which -var _which = require('./src/which'); -exports.which = common.wrap('which', _which); - -//@include ./src/echo -var _echo = require('./src/echo'); -exports.echo = _echo; // don't common.wrap() as it could parse '-options' - -//@include ./src/dirs -var _dirs = require('./src/dirs').dirs; -exports.dirs = common.wrap("dirs", _dirs); -var _pushd = require('./src/dirs').pushd; -exports.pushd = common.wrap('pushd', _pushd); -var _popd = require('./src/dirs').popd; -exports.popd = common.wrap("popd", _popd); - -//@include ./src/ln -var _ln = require('./src/ln'); -exports.ln = common.wrap('ln', _ln); - -//@ -//@ ### exit(code) -//@ Exits the current process with the given exit code. -exports.exit = process.exit; - -//@ -//@ ### env['VAR_NAME'] -//@ Object containing environment variables (both getter and setter). Shortcut to process.env. -exports.env = process.env; - -//@include ./src/exec -var _exec = require('./src/exec'); -exports.exec = common.wrap('exec', _exec, {notUnix:true}); - -//@include ./src/chmod -var _chmod = require('./src/chmod'); -exports.chmod = common.wrap('chmod', _chmod); - -//@include ./src/touch -var _touch = require('./src/touch'); -exports.touch = common.wrap('touch', _touch); - -//@include ./src/set -var _set = require('./src/set'); -exports.set = common.wrap('set', _set); - - -//@ -//@ ## Non-Unix commands -//@ - -//@include ./src/tempdir -var _tempDir = require('./src/tempdir'); -exports.tempdir = common.wrap('tempdir', _tempDir); - - -//@include ./src/error -var _error = require('./src/error'); -exports.error = _error; - - - -//@ -//@ ## Configuration -//@ - -exports.config = common.config; - -//@ -//@ ### config.silent -//@ Example: -//@ -//@ ```javascript -//@ var sh = require('shelljs'); -//@ var silentState = sh.config.silent; // save old silent state -//@ sh.config.silent = true; -//@ /* ... */ -//@ sh.config.silent = silentState; // restore old silent state -//@ ``` -//@ -//@ Suppresses all command output if `true`, except for `echo()` calls. -//@ Default is `false`. - -//@ -//@ ### config.fatal -//@ Example: -//@ -//@ ```javascript -//@ require('shelljs/global'); -//@ config.fatal = true; // or set('-e'); -//@ cp('this_file_does_not_exist', '/dev/null'); // dies here -//@ /* more commands... */ -//@ ``` -//@ -//@ If `true` the script will die on errors. Default is `false`. This is -//@ analogous to Bash's `set -e` - -//@ -//@ ### config.verbose -//@ Example: -//@ -//@ ```javascript -//@ config.verbose = true; // or set('-v'); -//@ cd('dir/'); -//@ ls('subdir/'); -//@ ``` -//@ -//@ Will print each command as follows: -//@ -//@ ``` -//@ cd dir/ -//@ ls subdir/ -//@ ``` diff --git a/node_modules/shelljs/src/cat.js b/node_modules/shelljs/src/cat.js deleted file mode 100644 index 5840b4e..0000000 --- a/node_modules/shelljs/src/cat.js +++ /dev/null @@ -1,40 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); - -//@ -//@ ### cat(file [, file ...]) -//@ ### cat(file_array) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ var str = cat('file*.txt'); -//@ var str = cat('file1', 'file2'); -//@ var str = cat(['file1', 'file2']); // same as above -//@ ``` -//@ -//@ Returns a string containing the given file, or a concatenated string -//@ containing the files if more than one file is given (a new line character is -//@ introduced between each file). Wildcard `*` accepted. -function _cat(options, files) { - var cat = ''; - - if (!files) - common.error('no paths given'); - - if (typeof files === 'string') - files = [].slice.call(arguments, 1); - // if it's array leave it as it is - - files = common.expand(files); - - files.forEach(function(file) { - if (!fs.existsSync(file)) - common.error('no such file or directory: ' + file); - - cat += fs.readFileSync(file, 'utf8'); - }); - - return common.ShellString(cat); -} -module.exports = _cat; diff --git a/node_modules/shelljs/src/cd.js b/node_modules/shelljs/src/cd.js deleted file mode 100644 index b7b9931..0000000 --- a/node_modules/shelljs/src/cd.js +++ /dev/null @@ -1,28 +0,0 @@ -var fs = require('fs'); -var common = require('./common'); - -//@ -//@ ### cd([dir]) -//@ Changes to directory `dir` for the duration of the script. Changes to home -//@ directory if no argument is supplied. -function _cd(options, dir) { - if (!dir) - dir = common.getUserHome(); - - if (dir === '-') { - if (!common.state.previousDir) - common.error('could not find previous directory'); - else - dir = common.state.previousDir; - } - - if (!fs.existsSync(dir)) - common.error('no such file or directory: ' + dir); - - if (!fs.statSync(dir).isDirectory()) - common.error('not a directory: ' + dir); - - common.state.previousDir = process.cwd(); - process.chdir(dir); -} -module.exports = _cd; diff --git a/node_modules/shelljs/src/chmod.js b/node_modules/shelljs/src/chmod.js deleted file mode 100644 index 6c6de10..0000000 --- a/node_modules/shelljs/src/chmod.js +++ /dev/null @@ -1,215 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); -var path = require('path'); - -var PERMS = (function (base) { - return { - OTHER_EXEC : base.EXEC, - OTHER_WRITE : base.WRITE, - OTHER_READ : base.READ, - - GROUP_EXEC : base.EXEC << 3, - GROUP_WRITE : base.WRITE << 3, - GROUP_READ : base.READ << 3, - - OWNER_EXEC : base.EXEC << 6, - OWNER_WRITE : base.WRITE << 6, - OWNER_READ : base.READ << 6, - - // Literal octal numbers are apparently not allowed in "strict" javascript. Using parseInt is - // the preferred way, else a jshint warning is thrown. - STICKY : parseInt('01000', 8), - SETGID : parseInt('02000', 8), - SETUID : parseInt('04000', 8), - - TYPE_MASK : parseInt('0770000', 8) - }; -})({ - EXEC : 1, - WRITE : 2, - READ : 4 -}); - -//@ -//@ ### chmod(octal_mode || octal_string, file) -//@ ### chmod(symbolic_mode, file) -//@ -//@ Available options: -//@ -//@ + `-v`: output a diagnostic for every file processed//@ -//@ + `-c`: like verbose but report only when a change is made//@ -//@ + `-R`: change files and directories recursively//@ -//@ -//@ Examples: -//@ -//@ ```javascript -//@ chmod(755, '/Users/brandon'); -//@ chmod('755', '/Users/brandon'); // same as above -//@ chmod('u+x', '/Users/brandon'); -//@ ``` -//@ -//@ Alters the permissions of a file or directory by either specifying the -//@ absolute permissions in octal form or expressing the changes in symbols. -//@ This command tries to mimic the POSIX behavior as much as possible. -//@ Notable exceptions: -//@ -//@ + In symbolic modes, 'a-r' and '-r' are identical. No consideration is -//@ given to the umask. -//@ + There is no "quiet" option since default behavior is to run silent. -function _chmod(options, mode, filePattern) { - if (!filePattern) { - if (options.length > 0 && options.charAt(0) === '-') { - // Special case where the specified file permissions started with - to subtract perms, which - // get picked up by the option parser as command flags. - // If we are down by one argument and options starts with -, shift everything over. - filePattern = mode; - mode = options; - options = ''; - } - else { - common.error('You must specify a file.'); - } - } - - options = common.parseOptions(options, { - 'R': 'recursive', - 'c': 'changes', - 'v': 'verbose' - }); - - if (typeof filePattern === 'string') { - filePattern = [ filePattern ]; - } - - var files; - - if (options.recursive) { - files = []; - common.expand(filePattern).forEach(function addFile(expandedFile) { - var stat = fs.lstatSync(expandedFile); - - if (!stat.isSymbolicLink()) { - files.push(expandedFile); - - if (stat.isDirectory()) { // intentionally does not follow symlinks. - fs.readdirSync(expandedFile).forEach(function (child) { - addFile(expandedFile + '/' + child); - }); - } - } - }); - } - else { - files = common.expand(filePattern); - } - - files.forEach(function innerChmod(file) { - file = path.resolve(file); - if (!fs.existsSync(file)) { - common.error('File not found: ' + file); - } - - // When recursing, don't follow symlinks. - if (options.recursive && fs.lstatSync(file).isSymbolicLink()) { - return; - } - - var stat = fs.statSync(file); - var isDir = stat.isDirectory(); - var perms = stat.mode; - var type = perms & PERMS.TYPE_MASK; - - var newPerms = perms; - - if (isNaN(parseInt(mode, 8))) { - // parse options - mode.split(',').forEach(function (symbolicMode) { - /*jshint regexdash:true */ - var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i; - var matches = pattern.exec(symbolicMode); - - if (matches) { - var applyTo = matches[1]; - var operator = matches[2]; - var change = matches[3]; - - var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === ''; - var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === ''; - var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === ''; - - var changeRead = change.indexOf('r') != -1; - var changeWrite = change.indexOf('w') != -1; - var changeExec = change.indexOf('x') != -1; - var changeExecDir = change.indexOf('X') != -1; - var changeSticky = change.indexOf('t') != -1; - var changeSetuid = change.indexOf('s') != -1; - - if (changeExecDir && isDir) - changeExec = true; - - var mask = 0; - if (changeOwner) { - mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0); - } - if (changeGroup) { - mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0); - } - if (changeOther) { - mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0); - } - - // Sticky bit is special - it's not tied to user, group or other. - if (changeSticky) { - mask |= PERMS.STICKY; - } - - switch (operator) { - case '+': - newPerms |= mask; - break; - - case '-': - newPerms &= ~mask; - break; - - case '=': - newPerms = type + mask; - - // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared. - if (fs.statSync(file).isDirectory()) { - newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms; - } - break; - } - - if (options.verbose) { - console.log(file + ' -> ' + newPerms.toString(8)); - } - - if (perms != newPerms) { - if (!options.verbose && options.changes) { - console.log(file + ' -> ' + newPerms.toString(8)); - } - fs.chmodSync(file, newPerms); - perms = newPerms; // for the next round of changes! - } - } - else { - common.error('Invalid symbolic mode change: ' + symbolicMode); - } - }); - } - else { - // they gave us a full number - newPerms = type + parseInt(mode, 8); - - // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared. - if (fs.statSync(file).isDirectory()) { - newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms; - } - - fs.chmodSync(file, newPerms); - } - }); -} -module.exports = _chmod; diff --git a/node_modules/shelljs/src/common.js b/node_modules/shelljs/src/common.js deleted file mode 100644 index 33198bd..0000000 --- a/node_modules/shelljs/src/common.js +++ /dev/null @@ -1,257 +0,0 @@ -var os = require('os'); -var fs = require('fs'); -var _ls = require('./ls'); - -// Module globals -var config = { - silent: false, - fatal: false, - verbose: false, -}; -exports.config = config; - -var state = { - error: null, - currentCmd: 'shell.js', - previousDir: null, - tempDir: null -}; -exports.state = state; - -var platform = os.type().match(/^Win/) ? 'win' : 'unix'; -exports.platform = platform; - -function log() { - if (!config.silent) - console.error.apply(console, arguments); -} -exports.log = log; - -// Shows error message. Throws unless _continue or config.fatal are true -function error(msg, _continue) { - if (state.error === null) - state.error = ''; - var log_entry = state.currentCmd + ': ' + msg; - if (state.error === '') - state.error = log_entry; - else - state.error += '\n' + log_entry; - - if (msg.length > 0) - log(log_entry); - - if (config.fatal) - process.exit(1); - - if (!_continue) - throw ''; -} -exports.error = error; - -// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings. -// For now, this is a dummy function to bookmark places we need such strings -function ShellString(str) { - return str; -} -exports.ShellString = ShellString; - -// Return the home directory in a platform-agnostic way, with consideration for -// older versions of node -function getUserHome() { - var result; - if (os.homedir) - result = os.homedir(); // node 3+ - else - result = process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME']; - return result; -} -exports.getUserHome = getUserHome; - -// Returns {'alice': true, 'bob': false} when passed a string and dictionary as follows: -// parseOptions('-a', {'a':'alice', 'b':'bob'}); -// Returns {'reference': 'string-value', 'bob': false} when passed two dictionaries of the form: -// parseOptions({'-r': 'string-value'}, {'r':'reference', 'b':'bob'}); -function parseOptions(opt, map) { - if (!map) - error('parseOptions() internal error: no map given'); - - // All options are false by default - var options = {}; - for (var letter in map) { - if (map[letter][0] !== '!') - options[map[letter]] = false; - } - - if (!opt) - return options; // defaults - - var optionName; - if (typeof opt === 'string') { - if (opt[0] !== '-') - return options; - - // e.g. chars = ['R', 'f'] - var chars = opt.slice(1).split(''); - - chars.forEach(function(c) { - if (c in map) { - optionName = map[c]; - if (optionName[0] === '!') - options[optionName.slice(1, optionName.length-1)] = false; - else - options[optionName] = true; - } else { - error('option not recognized: '+c); - } - }); - } else if (typeof opt === 'object') { - for (var key in opt) { - // key is a string of the form '-r', '-d', etc. - var c = key[1]; - if (c in map) { - optionName = map[c]; - options[optionName] = opt[key]; // assign the given value - } else { - error('option not recognized: '+c); - } - } - } else { - error('options must be strings or key-value pairs'); - } - return options; -} -exports.parseOptions = parseOptions; - -// Expands wildcards with matching (ie. existing) file names. -// For example: -// expand(['file*.js']) = ['file1.js', 'file2.js', ...] -// (if the files 'file1.js', 'file2.js', etc, exist in the current dir) -function expand(list) { - var expanded = []; - list.forEach(function(listEl) { - // Wildcard present on directory names ? - if(listEl.search(/\*[^\/]*\//) > -1 || listEl.search(/\*\*[^\/]*\//) > -1) { - var match = listEl.match(/^([^*]+\/|)(.*)/); - var root = match[1]; - var rest = match[2]; - var restRegex = rest.replace(/\*\*/g, ".*").replace(/\*/g, "[^\\/]*"); - restRegex = new RegExp(restRegex); - - _ls('-R', root).filter(function (e) { - return restRegex.test(e); - }).forEach(function(file) { - expanded.push(file); - }); - } - // Wildcard present on file names ? - else if (listEl.search(/\*/) > -1) { - _ls('', listEl).forEach(function(file) { - expanded.push(file); - }); - } else { - expanded.push(listEl); - } - }); - return expanded; -} -exports.expand = expand; - -// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e. -// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006 -function unlinkSync(file) { - try { - fs.unlinkSync(file); - } catch(e) { - // Try to override file permission - if (e.code === 'EPERM') { - fs.chmodSync(file, '0666'); - fs.unlinkSync(file); - } else { - throw e; - } - } -} -exports.unlinkSync = unlinkSync; - -// e.g. 'shelljs_a5f185d0443ca...' -function randomFileName() { - function randomHash(count) { - if (count === 1) - return parseInt(16*Math.random(), 10).toString(16); - else { - var hash = ''; - for (var i=0; i and/or '); - } else if (arguments.length > 3) { - sources = [].slice.call(arguments, 1, arguments.length - 1); - dest = arguments[arguments.length - 1]; - } else if (typeof sources === 'string') { - sources = [sources]; - } else if ('length' in sources) { - sources = sources; // no-op for array - } else { - common.error('invalid arguments'); - } - - var exists = fs.existsSync(dest), - stats = exists && fs.statSync(dest); - - // Dest is not existing dir, but multiple sources given - if ((!exists || !stats.isDirectory()) && sources.length > 1) - common.error('dest is not a directory (too many sources)'); - - // Dest is an existing file, but no -f given - if (exists && stats.isFile() && options.no_force) - common.error('dest file already exists: ' + dest); - - if (options.recursive) { - // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*" - // (see Github issue #15) - sources.forEach(function(src, i) { - if (src[src.length - 1] === '/') { - sources[i] += '*'; - // If src is a directory and dest doesn't exist, 'cp -r src dest' should copy src/* into dest - } else if (fs.statSync(src).isDirectory() && !exists) { - sources[i] += '/*'; - } - }); - - // Create dest - try { - fs.mkdirSync(dest, parseInt('0777', 8)); - } catch (e) { - // like Unix's cp, keep going even if we can't create dest dir - } - } - - sources = common.expand(sources); - - sources.forEach(function(src) { - if (!fs.existsSync(src)) { - common.error('no such file or directory: '+src, true); - return; // skip file - } - - // If here, src exists - if (fs.statSync(src).isDirectory()) { - if (!options.recursive) { - // Non-Recursive - common.log(src + ' is a directory (not copied)'); - } else { - // Recursive - // 'cp /a/source dest' should create 'source' in 'dest' - var newDest = path.join(dest, path.basename(src)), - checkDir = fs.statSync(src); - try { - fs.mkdirSync(newDest, checkDir.mode); - } catch (e) { - //if the directory already exists, that's okay - if (e.code !== 'EEXIST') { - common.error('dest file no such file or directory: ' + newDest, true); - throw e; - } - } - - cpdirSyncRecursive(src, newDest, {no_force: options.no_force}); - } - return; // done with dir - } - - // If here, src is a file - - // When copying to '/path/dir': - // thisDest = '/path/dir/file1' - var thisDest = dest; - if (fs.existsSync(dest) && fs.statSync(dest).isDirectory()) - thisDest = path.normalize(dest + '/' + path.basename(src)); - - if (fs.existsSync(thisDest) && options.no_force) { - common.error('dest file already exists: ' + thisDest, true); - return; // skip file - } - - copyFileSync(src, thisDest); - }); // forEach(src) -} -module.exports = _cp; diff --git a/node_modules/shelljs/src/dirs.js b/node_modules/shelljs/src/dirs.js deleted file mode 100644 index 58fae8b..0000000 --- a/node_modules/shelljs/src/dirs.js +++ /dev/null @@ -1,191 +0,0 @@ -var common = require('./common'); -var _cd = require('./cd'); -var path = require('path'); - -// Pushd/popd/dirs internals -var _dirStack = []; - -function _isStackIndex(index) { - return (/^[\-+]\d+$/).test(index); -} - -function _parseStackIndex(index) { - if (_isStackIndex(index)) { - if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd - return (/^-/).test(index) ? Number(index) - 1 : Number(index); - } else { - common.error(index + ': directory stack index out of range'); - } - } else { - common.error(index + ': invalid number'); - } -} - -function _actualDirStack() { - return [process.cwd()].concat(_dirStack); -} - -//@ -//@ ### pushd([options,] [dir | '-N' | '+N']) -//@ -//@ Available options: -//@ -//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated. -//@ -//@ Arguments: -//@ -//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`. -//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack. -//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack. -//@ -//@ Examples: -//@ -//@ ```javascript -//@ // process.cwd() === '/usr' -//@ pushd('/etc'); // Returns /etc /usr -//@ pushd('+1'); // Returns /usr /etc -//@ ``` -//@ -//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack. -function _pushd(options, dir) { - if (_isStackIndex(options)) { - dir = options; - options = ''; - } - - options = common.parseOptions(options, { - 'n' : 'no-cd' - }); - - var dirs = _actualDirStack(); - - if (dir === '+0') { - return dirs; // +0 is a noop - } else if (!dir) { - if (dirs.length > 1) { - dirs = dirs.splice(1, 1).concat(dirs); - } else { - return common.error('no other directory'); - } - } else if (_isStackIndex(dir)) { - var n = _parseStackIndex(dir); - dirs = dirs.slice(n).concat(dirs.slice(0, n)); - } else { - if (options['no-cd']) { - dirs.splice(1, 0, dir); - } else { - dirs.unshift(dir); - } - } - - if (options['no-cd']) { - dirs = dirs.slice(1); - } else { - dir = path.resolve(dirs.shift()); - _cd('', dir); - } - - _dirStack = dirs; - return _dirs(''); -} -exports.pushd = _pushd; - -//@ -//@ ### popd([options,] ['-N' | '+N']) -//@ -//@ Available options: -//@ -//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated. -//@ -//@ Arguments: -//@ -//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero. -//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero. -//@ -//@ Examples: -//@ -//@ ```javascript -//@ echo(process.cwd()); // '/usr' -//@ pushd('/etc'); // '/etc /usr' -//@ echo(process.cwd()); // '/etc' -//@ popd(); // '/usr' -//@ echo(process.cwd()); // '/usr' -//@ ``` -//@ -//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack. -function _popd(options, index) { - if (_isStackIndex(options)) { - index = options; - options = ''; - } - - options = common.parseOptions(options, { - 'n' : 'no-cd' - }); - - if (!_dirStack.length) { - return common.error('directory stack empty'); - } - - index = _parseStackIndex(index || '+0'); - - if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) { - index = index > 0 ? index - 1 : index; - _dirStack.splice(index, 1); - } else { - var dir = path.resolve(_dirStack.shift()); - _cd('', dir); - } - - return _dirs(''); -} -exports.popd = _popd; - -//@ -//@ ### dirs([options | '+N' | '-N']) -//@ -//@ Available options: -//@ -//@ + `-c`: Clears the directory stack by deleting all of the elements. -//@ -//@ Arguments: -//@ -//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero. -//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero. -//@ -//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified. -//@ -//@ See also: pushd, popd -function _dirs(options, index) { - if (_isStackIndex(options)) { - index = options; - options = ''; - } - - options = common.parseOptions(options, { - 'c' : 'clear' - }); - - if (options['clear']) { - _dirStack = []; - return _dirStack; - } - - var stack = _actualDirStack(); - - if (index) { - index = _parseStackIndex(index); - - if (index < 0) { - index = stack.length + index; - } - - common.log(stack[index]); - return stack[index]; - } - - common.log(stack.join(' ')); - - return stack; -} -exports.dirs = _dirs; diff --git a/node_modules/shelljs/src/echo.js b/node_modules/shelljs/src/echo.js deleted file mode 100644 index b574adc..0000000 --- a/node_modules/shelljs/src/echo.js +++ /dev/null @@ -1,20 +0,0 @@ -var common = require('./common'); - -//@ -//@ ### echo(string [, string ...]) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ echo('hello world'); -//@ var str = echo('hello world'); -//@ ``` -//@ -//@ Prints string to stdout, and returns string with additional utility methods -//@ like `.to()`. -function _echo() { - var messages = [].slice.call(arguments, 0); - console.log.apply(console, messages); - return common.ShellString(messages.join(' ')); -} -module.exports = _echo; diff --git a/node_modules/shelljs/src/error.js b/node_modules/shelljs/src/error.js deleted file mode 100644 index 112563d..0000000 --- a/node_modules/shelljs/src/error.js +++ /dev/null @@ -1,10 +0,0 @@ -var common = require('./common'); - -//@ -//@ ### error() -//@ Tests if error occurred in the last command. Returns `null` if no error occurred, -//@ otherwise returns string explaining the error -function error() { - return common.state.error; -} -module.exports = error; diff --git a/node_modules/shelljs/src/exec.js b/node_modules/shelljs/src/exec.js deleted file mode 100644 index 4174adb..0000000 --- a/node_modules/shelljs/src/exec.js +++ /dev/null @@ -1,249 +0,0 @@ -var common = require('./common'); -var _tempDir = require('./tempdir'); -var _pwd = require('./pwd'); -var path = require('path'); -var fs = require('fs'); -var child = require('child_process'); - -var DEFAULT_MAXBUFFER_SIZE = 20*1024*1024; - -// Hack to run child_process.exec() synchronously (sync avoids callback hell) -// Uses a custom wait loop that checks for a flag file, created when the child process is done. -// (Can't do a wait loop that checks for internal Node variables/messages as -// Node is single-threaded; callbacks and other internal state changes are done in the -// event loop). -function execSync(cmd, opts) { - var tempDir = _tempDir(); - var stdoutFile = path.resolve(tempDir+'/'+common.randomFileName()), - stderrFile = path.resolve(tempDir+'/'+common.randomFileName()), - codeFile = path.resolve(tempDir+'/'+common.randomFileName()), - scriptFile = path.resolve(tempDir+'/'+common.randomFileName()), - sleepFile = path.resolve(tempDir+'/'+common.randomFileName()); - - opts = common.extend({ - silent: common.config.silent, - cwd: _pwd(), - env: process.env, - maxBuffer: DEFAULT_MAXBUFFER_SIZE - }, opts); - - var previousStdoutContent = '', - previousStderrContent = ''; - // Echoes stdout and stderr changes from running process, if not silent - function updateStream(streamFile) { - if (opts.silent || !fs.existsSync(streamFile)) - return; - - var previousStreamContent, - proc_stream; - if (streamFile === stdoutFile) { - previousStreamContent = previousStdoutContent; - proc_stream = process.stdout; - } else { // assume stderr - previousStreamContent = previousStderrContent; - proc_stream = process.stderr; - } - - var streamContent = fs.readFileSync(streamFile, 'utf8'); - // No changes since last time? - if (streamContent.length <= previousStreamContent.length) - return; - - proc_stream.write(streamContent.substr(previousStreamContent.length)); - previousStreamContent = streamContent; - } - - function escape(str) { - return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0"); - } - - if (fs.existsSync(scriptFile)) common.unlinkSync(scriptFile); - if (fs.existsSync(stdoutFile)) common.unlinkSync(stdoutFile); - if (fs.existsSync(stderrFile)) common.unlinkSync(stderrFile); - if (fs.existsSync(codeFile)) common.unlinkSync(codeFile); - - var execCommand = '"'+process.execPath+'" '+scriptFile; - var script; - - if (typeof child.execSync === 'function') { - script = [ - "var child = require('child_process')", - " , fs = require('fs');", - "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: "+opts.maxBuffer+"}, function(err) {", - " fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');", - "});", - "var stdoutStream = fs.createWriteStream('"+escape(stdoutFile)+"');", - "var stderrStream = fs.createWriteStream('"+escape(stderrFile)+"');", - "childProcess.stdout.pipe(stdoutStream, {end: false});", - "childProcess.stderr.pipe(stderrStream, {end: false});", - "childProcess.stdout.pipe(process.stdout);", - "childProcess.stderr.pipe(process.stderr);", - "var stdoutEnded = false, stderrEnded = false;", - "function tryClosingStdout(){ if(stdoutEnded){ stdoutStream.end(); } }", - "function tryClosingStderr(){ if(stderrEnded){ stderrStream.end(); } }", - "childProcess.stdout.on('end', function(){ stdoutEnded = true; tryClosingStdout(); });", - "childProcess.stderr.on('end', function(){ stderrEnded = true; tryClosingStderr(); });" - ].join('\n'); - - fs.writeFileSync(scriptFile, script); - - if (opts.silent) { - opts.stdio = 'ignore'; - } else { - opts.stdio = [0, 1, 2]; - } - - // Welcome to the future - child.execSync(execCommand, opts); - } else { - cmd += ' > '+stdoutFile+' 2> '+stderrFile; // works on both win/unix - - script = [ - "var child = require('child_process')", - " , fs = require('fs');", - "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: "+opts.maxBuffer+"}, function(err) {", - " fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');", - "});" - ].join('\n'); - - fs.writeFileSync(scriptFile, script); - - child.exec(execCommand, opts); - - // The wait loop - // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage - // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing - // CPU usage, though apparently not so much on Windows) - while (!fs.existsSync(codeFile)) { updateStream(stdoutFile); fs.writeFileSync(sleepFile, 'a'); } - while (!fs.existsSync(stdoutFile)) { updateStream(stdoutFile); fs.writeFileSync(sleepFile, 'a'); } - while (!fs.existsSync(stderrFile)) { updateStream(stderrFile); fs.writeFileSync(sleepFile, 'a'); } - } - - // At this point codeFile exists, but it's not necessarily flushed yet. - // Keep reading it until it is. - var code = parseInt('', 10); - while (isNaN(code)) { - code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10); - } - - var stdout = fs.readFileSync(stdoutFile, 'utf8'); - var stderr = fs.readFileSync(stderrFile, 'utf8'); - - // No biggie if we can't erase the files now -- they're in a temp dir anyway - try { common.unlinkSync(scriptFile); } catch(e) {} - try { common.unlinkSync(stdoutFile); } catch(e) {} - try { common.unlinkSync(stderrFile); } catch(e) {} - try { common.unlinkSync(codeFile); } catch(e) {} - try { common.unlinkSync(sleepFile); } catch(e) {} - - // some shell return codes are defined as errors, per http://tldp.org/LDP/abs/html/exitcodes.html - if (code === 1 || code === 2 || code >= 126) { - common.error('', true); // unix/shell doesn't really give an error message after non-zero exit codes - } - // True if successful, false if not - var obj = { - code: code, - output: stdout, // deprecated - stdout: stdout, - stderr: stderr - }; - return obj; -} // execSync() - -// Wrapper around exec() to enable echoing output to console in real time -function execAsync(cmd, opts, callback) { - var stdout = ''; - var stderr = ''; - - opts = common.extend({ - silent: common.config.silent, - cwd: _pwd(), - env: process.env, - maxBuffer: DEFAULT_MAXBUFFER_SIZE - }, opts); - - var c = child.exec(cmd, opts, function(err) { - if (callback) - callback(err ? err.code : 0, stdout, stderr); - }); - - c.stdout.on('data', function(data) { - stdout += data; - if (!opts.silent) - process.stdout.write(data); - }); - - c.stderr.on('data', function(data) { - stderr += data; - if (!opts.silent) - process.stderr.write(data); - }); - - return c; -} - -//@ -//@ ### exec(command [, options] [, callback]) -//@ Available options (all `false` by default): -//@ -//@ + `async`: Asynchronous execution. If a callback is provided, it will be set to -//@ `true`, regardless of the passed value. -//@ + `silent`: Do not echo program output to console. -//@ + and any option available to NodeJS's -//@ [child_process.exec()](https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ var version = exec('node --version', {silent:true}).stdout; -//@ -//@ var child = exec('some_long_running_process', {async:true}); -//@ child.stdout.on('data', function(data) { -//@ /* ... do something with data ... */ -//@ }); -//@ -//@ exec('some_long_running_process', function(code, stdout, stderr) { -//@ console.log('Exit code:', code); -//@ console.log('Program output:', stdout); -//@ console.log('Program stderr:', stderr); -//@ }); -//@ ``` -//@ -//@ Executes the given `command` _synchronously_, unless otherwise specified. When in synchronous -//@ mode returns the object `{ code:..., stdout:... , stderr:... }`, containing the program's -//@ `stdout`, `stderr`, and its exit `code`. Otherwise returns the child process object, -//@ and the `callback` gets the arguments `(code, stdout, stderr)`. -//@ -//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as -//@ the current synchronous implementation uses a lot of CPU. This should be getting -//@ fixed soon. -function _exec(command, options, callback) { - if (!command) - common.error('must specify command'); - - // Callback is defined instead of options. - if (typeof options === 'function') { - callback = options; - options = { async: true }; - } - - // Callback is defined with options. - if (typeof options === 'object' && typeof callback === 'function') { - options.async = true; - } - - options = common.extend({ - silent: common.config.silent, - async: false - }, options); - - try { - if (options.async) - return execAsync(command, options, callback); - else - return execSync(command, options); - } catch (e) { - common.error('internal error'); - } -} -module.exports = _exec; diff --git a/node_modules/shelljs/src/find.js b/node_modules/shelljs/src/find.js deleted file mode 100644 index c96fb2f..0000000 --- a/node_modules/shelljs/src/find.js +++ /dev/null @@ -1,51 +0,0 @@ -var fs = require('fs'); -var common = require('./common'); -var _ls = require('./ls'); - -//@ -//@ ### find(path [, path ...]) -//@ ### find(path_array) -//@ Examples: -//@ -//@ ```javascript -//@ find('src', 'lib'); -//@ find(['src', 'lib']); // same as above -//@ find('.').filter(function(file) { return file.match(/\.js$/); }); -//@ ``` -//@ -//@ Returns array of all files (however deep) in the given paths. -//@ -//@ The main difference from `ls('-R', path)` is that the resulting file names -//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`. -function _find(options, paths) { - if (!paths) - common.error('no path specified'); - else if (typeof paths === 'object') - paths = paths; // assume array - else if (typeof paths === 'string') - paths = [].slice.call(arguments, 1); - - var list = []; - - function pushFile(file) { - if (common.platform === 'win') - file = file.replace(/\\/g, '/'); - list.push(file); - } - - // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs - // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory - - paths.forEach(function(file) { - pushFile(file); - - if (fs.statSync(file).isDirectory()) { - _ls('-RA', file+'/*').forEach(function(subfile) { - pushFile(subfile); - }); - } - }); - - return list; -} -module.exports = _find; diff --git a/node_modules/shelljs/src/grep.js b/node_modules/shelljs/src/grep.js deleted file mode 100644 index 78008ce..0000000 --- a/node_modules/shelljs/src/grep.js +++ /dev/null @@ -1,52 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); - -//@ -//@ ### grep([options,] regex_filter, file [, file ...]) -//@ ### grep([options,] regex_filter, file_array) -//@ Available options: -//@ -//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria. -//@ -//@ Examples: -//@ -//@ ```javascript -//@ grep('-v', 'GLOBAL_VARIABLE', '*.js'); -//@ grep('GLOBAL_VARIABLE', '*.js'); -//@ ``` -//@ -//@ Reads input string from given files and returns a string containing all lines of the -//@ file that match the given `regex_filter`. Wildcard `*` accepted. -function _grep(options, regex, files) { - options = common.parseOptions(options, { - 'v': 'inverse' - }); - - if (!files) - common.error('no paths given'); - - if (typeof files === 'string') - files = [].slice.call(arguments, 2); - // if it's array leave it as it is - - files = common.expand(files); - - var grep = ''; - files.forEach(function(file) { - if (!fs.existsSync(file)) { - common.error('no such file or directory: ' + file, true); - return; - } - - var contents = fs.readFileSync(file, 'utf8'), - lines = contents.split(/\r*\n/); - lines.forEach(function(line) { - var matched = line.match(regex); - if ((options.inverse && !matched) || (!options.inverse && matched)) - grep += line + '\n'; - }); - }); - - return common.ShellString(grep); -} -module.exports = _grep; diff --git a/node_modules/shelljs/src/ln.js b/node_modules/shelljs/src/ln.js deleted file mode 100644 index 878fda1..0000000 --- a/node_modules/shelljs/src/ln.js +++ /dev/null @@ -1,69 +0,0 @@ -var fs = require('fs'); -var path = require('path'); -var common = require('./common'); - -//@ -//@ ### ln([options,] source, dest) -//@ Available options: -//@ -//@ + `-s`: symlink -//@ + `-f`: force -//@ -//@ Examples: -//@ -//@ ```javascript -//@ ln('file', 'newlink'); -//@ ln('-sf', 'file', 'existing'); -//@ ``` -//@ -//@ Links source to dest. Use -f to force the link, should dest already exist. -function _ln(options, source, dest) { - options = common.parseOptions(options, { - 's': 'symlink', - 'f': 'force' - }); - - if (!source || !dest) { - common.error('Missing and/or '); - } - - source = String(source); - var sourcePath = path.normalize(source).replace(RegExp(path.sep + '$'), ''); - var isAbsolute = (path.resolve(source) === sourcePath); - dest = path.resolve(process.cwd(), String(dest)); - - if (fs.existsSync(dest)) { - if (!options.force) { - common.error('Destination file exists', true); - } - - fs.unlinkSync(dest); - } - - if (options.symlink) { - var isWindows = common.platform === 'win'; - var linkType = isWindows ? 'file' : null; - var resolvedSourcePath = isAbsolute ? sourcePath : path.resolve(process.cwd(), path.dirname(dest), source); - if (!fs.existsSync(resolvedSourcePath)) { - common.error('Source file does not exist', true); - } else if (isWindows && fs.statSync(resolvedSourcePath).isDirectory()) { - linkType = 'junction'; - } - - try { - fs.symlinkSync(linkType === 'junction' ? resolvedSourcePath: source, dest, linkType); - } catch (err) { - common.error(err.message); - } - } else { - if (!fs.existsSync(source)) { - common.error('Source file does not exist', true); - } - try { - fs.linkSync(source, dest); - } catch (err) { - common.error(err.message); - } - } -} -module.exports = _ln; diff --git a/node_modules/shelljs/src/ls.js b/node_modules/shelljs/src/ls.js deleted file mode 100644 index 6a54b3a..0000000 --- a/node_modules/shelljs/src/ls.js +++ /dev/null @@ -1,168 +0,0 @@ -var path = require('path'); -var fs = require('fs'); -var common = require('./common'); -var _cd = require('./cd'); -var _pwd = require('./pwd'); - -//@ -//@ ### ls([options,] [path, ...]) -//@ ### ls([options,] path_array) -//@ Available options: -//@ -//@ + `-R`: recursive -//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`) -//@ + `-d`: list directories themselves, not their contents -//@ + `-l`: list objects representing each file, each with fields containing `ls -//@ -l` output fields. See -//@ [fs.Stats](https://nodejs.org/api/fs.html#fs_class_fs_stats) -//@ for more info -//@ -//@ Examples: -//@ -//@ ```javascript -//@ ls('projs/*.js'); -//@ ls('-R', '/users/me', '/tmp'); -//@ ls('-R', ['/users/me', '/tmp']); // same as above -//@ ls('-l', 'file.txt'); // { name: 'file.txt', mode: 33188, nlink: 1, ...} -//@ ``` -//@ -//@ Returns array of files in the given path, or in current directory if no path provided. -function _ls(options, paths) { - options = common.parseOptions(options, { - 'R': 'recursive', - 'A': 'all', - 'a': 'all_deprecated', - 'd': 'directory', - 'l': 'long' - }); - - if (options.all_deprecated) { - // We won't support the -a option as it's hard to image why it's useful - // (it includes '.' and '..' in addition to '.*' files) - // For backwards compatibility we'll dump a deprecated message and proceed as before - common.log('ls: Option -a is deprecated. Use -A instead'); - options.all = true; - } - - if (!paths) - paths = ['.']; - else if (typeof paths === 'object') - paths = paths; // assume array - else if (typeof paths === 'string') - paths = [].slice.call(arguments, 1); - - var list = []; - - // Conditionally pushes file to list - returns true if pushed, false otherwise - // (e.g. prevents hidden files to be included unless explicitly told so) - function pushFile(file, query) { - var name = file.name || file; - // hidden file? - if (path.basename(name)[0] === '.') { - // not explicitly asking for hidden files? - if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1)) - return false; - } - - if (common.platform === 'win') - name = name.replace(/\\/g, '/'); - - if (file.name) { - file.name = name; - } else { - file = name; - } - list.push(file); - return true; - } - - paths.forEach(function(p) { - if (fs.existsSync(p)) { - var stats = ls_stat(p); - // Simple file? - if (stats.isFile()) { - if (options.long) { - pushFile(stats, p); - } else { - pushFile(p, p); - } - return; // continue - } - - // Simple dir? - if (options.directory) { - pushFile(p, p); - return; - } else if (stats.isDirectory()) { - // Iterate over p contents - fs.readdirSync(p).forEach(function(file) { - var orig_file = file; - if (options.long) - file = ls_stat(path.join(p, file)); - if (!pushFile(file, p)) - return; - - // Recursive? - if (options.recursive) { - var oldDir = _pwd(); - _cd('', p); - if (fs.statSync(orig_file).isDirectory()) - list = list.concat(_ls('-R'+(options.all?'A':''), orig_file+'/*')); - _cd('', oldDir); - } - }); - return; // continue - } - } - - // p does not exist - possible wildcard present - - var basename = path.basename(p); - var dirname = path.dirname(p); - // Wildcard present on an existing dir? (e.g. '/tmp/*.js') - if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) { - // Escape special regular expression chars - var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1'); - // Translates wildcard into regex - regexp = '^' + regexp.replace(/\*/g, '.*') + '$'; - // Iterate over directory contents - fs.readdirSync(dirname).forEach(function(file) { - if (file.match(new RegExp(regexp))) { - var file_path = path.join(dirname, file); - file_path = options.long ? ls_stat(file_path) : file_path; - if (file_path.name) - file_path.name = path.normalize(file_path.name); - else - file_path = path.normalize(file_path); - if (!pushFile(file_path, basename)) - return; - - // Recursive? - if (options.recursive) { - var pp = dirname + '/' + file; - if (fs.lstatSync(pp).isDirectory()) - list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*')); - } // recursive - } // if file matches - }); // forEach - return; - } - - common.error('no such file or directory: ' + p, true); - }); - - return list; -} -module.exports = _ls; - - -function ls_stat(path) { - var stats = fs.statSync(path); - // Note: this object will contain more information than .toString() returns - stats.name = path; - stats.toString = function() { - // Return a string resembling unix's `ls -l` format - return [this.mode, this.nlink, this.uid, this.gid, this.size, this.mtime, this.name].join(' '); - }; - return stats; -} diff --git a/node_modules/shelljs/src/mkdir.js b/node_modules/shelljs/src/mkdir.js deleted file mode 100644 index 8b4fd99..0000000 --- a/node_modules/shelljs/src/mkdir.js +++ /dev/null @@ -1,68 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); -var path = require('path'); - -// Recursively creates 'dir' -function mkdirSyncRecursive(dir) { - var baseDir = path.dirname(dir); - - // Base dir exists, no recursion necessary - if (fs.existsSync(baseDir)) { - fs.mkdirSync(dir, parseInt('0777', 8)); - return; - } - - // Base dir does not exist, go recursive - mkdirSyncRecursive(baseDir); - - // Base dir created, can create dir - fs.mkdirSync(dir, parseInt('0777', 8)); -} - -//@ -//@ ### mkdir([options,] dir [, dir ...]) -//@ ### mkdir([options,] dir_array) -//@ Available options: -//@ -//@ + `-p`: full path (will create intermediate dirs if necessary) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g'); -//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above -//@ ``` -//@ -//@ Creates directories. -function _mkdir(options, dirs) { - options = common.parseOptions(options, { - 'p': 'fullpath' - }); - if (!dirs) - common.error('no paths given'); - - if (typeof dirs === 'string') - dirs = [].slice.call(arguments, 1); - // if it's array leave it as it is - - dirs.forEach(function(dir) { - if (fs.existsSync(dir)) { - if (!options.fullpath) - common.error('path already exists: ' + dir, true); - return; // skip dir - } - - // Base dir does not exist, and no -p option given - var baseDir = path.dirname(dir); - if (!fs.existsSync(baseDir) && !options.fullpath) { - common.error('no such file or directory: ' + baseDir, true); - return; // skip dir - } - - if (options.fullpath) - mkdirSyncRecursive(dir); - else - fs.mkdirSync(dir, parseInt('0777', 8)); - }); -} // mkdir -module.exports = _mkdir; diff --git a/node_modules/shelljs/src/mv.js b/node_modules/shelljs/src/mv.js deleted file mode 100644 index 69cc03f..0000000 --- a/node_modules/shelljs/src/mv.js +++ /dev/null @@ -1,82 +0,0 @@ -var fs = require('fs'); -var path = require('path'); -var common = require('./common'); - -//@ -//@ ### mv([options ,] source [, source ...], dest') -//@ ### mv([options ,] source_array, dest') -//@ Available options: -//@ -//@ + `-f`: force (default behavior) -//@ + `-n`: no-clobber -//@ -//@ Examples: -//@ -//@ ```javascript -//@ mv('-n', 'file', 'dir/'); -//@ mv('file1', 'file2', 'dir/'); -//@ mv(['file1', 'file2'], 'dir/'); // same as above -//@ ``` -//@ -//@ Moves files. The wildcard `*` is accepted. -function _mv(options, sources, dest) { - options = common.parseOptions(options, { - 'f': '!no_force', - 'n': 'no_force' - }); - - // Get sources, dest - if (arguments.length < 3) { - common.error('missing and/or '); - } else if (arguments.length > 3) { - sources = [].slice.call(arguments, 1, arguments.length - 1); - dest = arguments[arguments.length - 1]; - } else if (typeof sources === 'string') { - sources = [sources]; - } else if ('length' in sources) { - sources = sources; // no-op for array - } else { - common.error('invalid arguments'); - } - - sources = common.expand(sources); - - var exists = fs.existsSync(dest), - stats = exists && fs.statSync(dest); - - // Dest is not existing dir, but multiple sources given - if ((!exists || !stats.isDirectory()) && sources.length > 1) - common.error('dest is not a directory (too many sources)'); - - // Dest is an existing file, but no -f given - if (exists && stats.isFile() && options.no_force) - common.error('dest file already exists: ' + dest); - - sources.forEach(function(src) { - if (!fs.existsSync(src)) { - common.error('no such file or directory: '+src, true); - return; // skip file - } - - // If here, src exists - - // When copying to '/path/dir': - // thisDest = '/path/dir/file1' - var thisDest = dest; - if (fs.existsSync(dest) && fs.statSync(dest).isDirectory()) - thisDest = path.normalize(dest + '/' + path.basename(src)); - - if (fs.existsSync(thisDest) && options.no_force) { - common.error('dest file already exists: ' + thisDest, true); - return; // skip file - } - - if (path.resolve(src) === path.dirname(path.resolve(thisDest))) { - common.error('cannot move to self: '+src, true); - return; // skip file - } - - fs.renameSync(src, thisDest); - }); // forEach(src) -} // mv -module.exports = _mv; diff --git a/node_modules/shelljs/src/popd.js b/node_modules/shelljs/src/popd.js deleted file mode 100644 index 11ea24f..0000000 --- a/node_modules/shelljs/src/popd.js +++ /dev/null @@ -1 +0,0 @@ -// see dirs.js \ No newline at end of file diff --git a/node_modules/shelljs/src/pushd.js b/node_modules/shelljs/src/pushd.js deleted file mode 100644 index 11ea24f..0000000 --- a/node_modules/shelljs/src/pushd.js +++ /dev/null @@ -1 +0,0 @@ -// see dirs.js \ No newline at end of file diff --git a/node_modules/shelljs/src/pwd.js b/node_modules/shelljs/src/pwd.js deleted file mode 100644 index 26cefe0..0000000 --- a/node_modules/shelljs/src/pwd.js +++ /dev/null @@ -1,11 +0,0 @@ -var path = require('path'); -var common = require('./common'); - -//@ -//@ ### pwd() -//@ Returns the current directory. -function _pwd() { - var pwd = path.resolve(process.cwd()); - return common.ShellString(pwd); -} -module.exports = _pwd; diff --git a/node_modules/shelljs/src/rm.js b/node_modules/shelljs/src/rm.js deleted file mode 100644 index cf2e95b..0000000 --- a/node_modules/shelljs/src/rm.js +++ /dev/null @@ -1,163 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); - -// Recursively removes 'dir' -// Adapted from https://github.com/ryanmcgrath/wrench-js -// -// Copyright (c) 2010 Ryan McGrath -// Copyright (c) 2012 Artur Adib -// -// Licensed under the MIT License -// http://www.opensource.org/licenses/mit-license.php -function rmdirSyncRecursive(dir, force) { - var files; - - files = fs.readdirSync(dir); - - // Loop through and delete everything in the sub-tree after checking it - for(var i = 0; i < files.length; i++) { - var file = dir + "/" + files[i], - currFile = fs.lstatSync(file); - - if(currFile.isDirectory()) { // Recursive function back to the beginning - rmdirSyncRecursive(file, force); - } - - else if(currFile.isSymbolicLink()) { // Unlink symlinks - if (force || isWriteable(file)) { - try { - common.unlinkSync(file); - } catch (e) { - common.error('could not remove file (code '+e.code+'): ' + file, true); - } - } - } - - else // Assume it's a file - perhaps a try/catch belongs here? - if (force || isWriteable(file)) { - try { - common.unlinkSync(file); - } catch (e) { - common.error('could not remove file (code '+e.code+'): ' + file, true); - } - } - } - - // Now that we know everything in the sub-tree has been deleted, we can delete the main directory. - // Huzzah for the shopkeep. - - var result; - try { - // Retry on windows, sometimes it takes a little time before all the files in the directory are gone - var start = Date.now(); - while (true) { - try { - result = fs.rmdirSync(dir); - if (fs.existsSync(dir)) throw { code: "EAGAIN" }; - break; - } catch(er) { - // In addition to error codes, also check if the directory still exists and loop again if true - if (process.platform === "win32" && (er.code === "ENOTEMPTY" || er.code === "EBUSY" || er.code === "EPERM" || er.code === "EAGAIN")) { - if (Date.now() - start > 1000) throw er; - } else if (er.code === "ENOENT") { - // Directory did not exist, deletion was successful - break; - } else { - throw er; - } - } - } - } catch(e) { - common.error('could not remove directory (code '+e.code+'): ' + dir, true); - } - - return result; -} // rmdirSyncRecursive - -// Hack to determine if file has write permissions for current user -// Avoids having to check user, group, etc, but it's probably slow -function isWriteable(file) { - var writePermission = true; - try { - var __fd = fs.openSync(file, 'a'); - fs.closeSync(__fd); - } catch(e) { - writePermission = false; - } - - return writePermission; -} - -//@ -//@ ### rm([options,] file [, file ...]) -//@ ### rm([options,] file_array) -//@ Available options: -//@ -//@ + `-f`: force -//@ + `-r, -R`: recursive -//@ -//@ Examples: -//@ -//@ ```javascript -//@ rm('-rf', '/tmp/*'); -//@ rm('some_file.txt', 'another_file.txt'); -//@ rm(['some_file.txt', 'another_file.txt']); // same as above -//@ ``` -//@ -//@ Removes files. The wildcard `*` is accepted. -function _rm(options, files) { - options = common.parseOptions(options, { - 'f': 'force', - 'r': 'recursive', - 'R': 'recursive' - }); - if (!files) - common.error('no paths given'); - - if (typeof files === 'string') - files = [].slice.call(arguments, 1); - // if it's array leave it as it is - - files = common.expand(files); - - files.forEach(function(file) { - if (!fs.existsSync(file)) { - // Path does not exist, no force flag given - if (!options.force) - common.error('no such file or directory: '+file, true); - - return; // skip file - } - - // If here, path exists - - var stats = fs.lstatSync(file); - if (stats.isFile() || stats.isSymbolicLink()) { - - // Do not check for file writing permissions - if (options.force) { - common.unlinkSync(file); - return; - } - - if (isWriteable(file)) - common.unlinkSync(file); - else - common.error('permission denied: '+file, true); - - return; - } // simple file - - // Path is an existing directory, but no -r flag given - if (stats.isDirectory() && !options.recursive) { - common.error('path is a directory', true); - return; // skip path - } - - // Recursively remove existing directory - if (stats.isDirectory() && options.recursive) { - rmdirSyncRecursive(file, options.force); - } - }); // forEach(file) -} // rm -module.exports = _rm; diff --git a/node_modules/shelljs/src/sed.js b/node_modules/shelljs/src/sed.js deleted file mode 100644 index baa385b..0000000 --- a/node_modules/shelljs/src/sed.js +++ /dev/null @@ -1,64 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); - -//@ -//@ ### sed([options,] search_regex, replacement, file [, file ...]) -//@ ### sed([options,] search_regex, replacement, file_array) -//@ Available options: -//@ -//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_ -//@ -//@ Examples: -//@ -//@ ```javascript -//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js'); -//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js'); -//@ ``` -//@ -//@ Reads an input string from `files` and performs a JavaScript `replace()` on the input -//@ using the given search regex and replacement string or function. Returns the new string after replacement. -function _sed(options, regex, replacement, files) { - options = common.parseOptions(options, { - 'i': 'inplace' - }); - - if (typeof replacement === 'string' || typeof replacement === 'function') - replacement = replacement; // no-op - else if (typeof replacement === 'number') - replacement = replacement.toString(); // fallback - else - common.error('invalid replacement string'); - - // Convert all search strings to RegExp - if (typeof regex === 'string') - regex = RegExp(regex); - - if (!files) - common.error('no files given'); - - if (typeof files === 'string') - files = [].slice.call(arguments, 3); - // if it's array leave it as it is - - files = common.expand(files); - - var sed = []; - files.forEach(function(file) { - if (!fs.existsSync(file)) { - common.error('no such file or directory: ' + file, true); - return; - } - - var result = fs.readFileSync(file, 'utf8').split('\n').map(function (line) { - return line.replace(regex, replacement); - }).join('\n'); - - sed.push(result); - - if (options.inplace) - fs.writeFileSync(file, result, 'utf8'); - }); - - return common.ShellString(sed.join('\n')); -} -module.exports = _sed; diff --git a/node_modules/shelljs/src/set.js b/node_modules/shelljs/src/set.js deleted file mode 100644 index 19e26d9..0000000 --- a/node_modules/shelljs/src/set.js +++ /dev/null @@ -1,49 +0,0 @@ -var common = require('./common'); - -//@ -//@ ### set(options) -//@ Available options: -//@ -//@ + `+/-e`: exit upon error (`config.fatal`) -//@ + `+/-v`: verbose: show all commands (`config.verbose`) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ set('-e'); // exit upon first error -//@ set('+e'); // this undoes a "set('-e')" -//@ ``` -//@ -//@ Sets global configuration variables -function _set(options) { - if (!options) { - var args = [].slice.call(arguments, 0); - if (args.length < 2) - common.error('must provide an argument'); - options = args[1]; - } - var negate = (options[0] === '+'); - if (negate) { - options = '-' + options.slice(1); // parseOptions needs a '-' prefix - } - options = common.parseOptions(options, { - 'e': 'fatal', - 'v': 'verbose' - }); - - var key; - if (negate) { - for (key in options) - options[key] = !options[key]; - } - - for (key in options) { - // Only change the global config if `negate` is false and the option is true - // or if `negate` is true and the option is false (aka negate !== option) - if (negate !== options[key]) { - common.config[key] = options[key]; - } - } - return; -} -module.exports = _set; diff --git a/node_modules/shelljs/src/tempdir.js b/node_modules/shelljs/src/tempdir.js deleted file mode 100644 index 79b949f..0000000 --- a/node_modules/shelljs/src/tempdir.js +++ /dev/null @@ -1,57 +0,0 @@ -var common = require('./common'); -var os = require('os'); -var fs = require('fs'); - -// Returns false if 'dir' is not a writeable directory, 'dir' otherwise -function writeableDir(dir) { - if (!dir || !fs.existsSync(dir)) - return false; - - if (!fs.statSync(dir).isDirectory()) - return false; - - var testFile = dir+'/'+common.randomFileName(); - try { - fs.writeFileSync(testFile, ' '); - common.unlinkSync(testFile); - return dir; - } catch (e) { - return false; - } -} - - -//@ -//@ ### tempdir() -//@ -//@ Examples: -//@ -//@ ```javascript -//@ var tmp = tempdir(); // "/tmp" for most *nix platforms -//@ ``` -//@ -//@ Searches and returns string containing a writeable, platform-dependent temporary directory. -//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir). -function _tempDir() { - var state = common.state; - if (state.tempDir) - return state.tempDir; // from cache - - state.tempDir = writeableDir(os.tmpdir && os.tmpdir()) || // node 0.10+ - writeableDir(os.tmpDir && os.tmpDir()) || // node 0.8+ - writeableDir(process.env['TMPDIR']) || - writeableDir(process.env['TEMP']) || - writeableDir(process.env['TMP']) || - writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS - writeableDir('C:\\TEMP') || // Windows - writeableDir('C:\\TMP') || // Windows - writeableDir('\\TEMP') || // Windows - writeableDir('\\TMP') || // Windows - writeableDir('/tmp') || - writeableDir('/var/tmp') || - writeableDir('/usr/tmp') || - writeableDir('.'); // last resort - - return state.tempDir; -} -module.exports = _tempDir; diff --git a/node_modules/shelljs/src/test.js b/node_modules/shelljs/src/test.js deleted file mode 100644 index 068a1ce..0000000 --- a/node_modules/shelljs/src/test.js +++ /dev/null @@ -1,85 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); - -//@ -//@ ### test(expression) -//@ Available expression primaries: -//@ -//@ + `'-b', 'path'`: true if path is a block device -//@ + `'-c', 'path'`: true if path is a character device -//@ + `'-d', 'path'`: true if path is a directory -//@ + `'-e', 'path'`: true if path exists -//@ + `'-f', 'path'`: true if path is a regular file -//@ + `'-L', 'path'`: true if path is a symbolic link -//@ + `'-p', 'path'`: true if path is a pipe (FIFO) -//@ + `'-S', 'path'`: true if path is a socket -//@ -//@ Examples: -//@ -//@ ```javascript -//@ if (test('-d', path)) { /* do something with dir */ }; -//@ if (!test('-f', path)) continue; // skip if it's a regular file -//@ ``` -//@ -//@ Evaluates expression using the available primaries and returns corresponding value. -function _test(options, path) { - if (!path) - common.error('no path given'); - - // hack - only works with unary primaries - options = common.parseOptions(options, { - 'b': 'block', - 'c': 'character', - 'd': 'directory', - 'e': 'exists', - 'f': 'file', - 'L': 'link', - 'p': 'pipe', - 'S': 'socket' - }); - - var canInterpret = false; - for (var key in options) - if (options[key] === true) { - canInterpret = true; - break; - } - - if (!canInterpret) - common.error('could not interpret expression'); - - if (options.link) { - try { - return fs.lstatSync(path).isSymbolicLink(); - } catch(e) { - return false; - } - } - - if (!fs.existsSync(path)) - return false; - - if (options.exists) - return true; - - var stats = fs.statSync(path); - - if (options.block) - return stats.isBlockDevice(); - - if (options.character) - return stats.isCharacterDevice(); - - if (options.directory) - return stats.isDirectory(); - - if (options.file) - return stats.isFile(); - - if (options.pipe) - return stats.isFIFO(); - - if (options.socket) - return stats.isSocket(); -} // test -module.exports = _test; diff --git a/node_modules/shelljs/src/to.js b/node_modules/shelljs/src/to.js deleted file mode 100644 index 65d6d54..0000000 --- a/node_modules/shelljs/src/to.js +++ /dev/null @@ -1,30 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); -var path = require('path'); - -//@ -//@ ### 'string'.to(file) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ cat('input.txt').to('output.txt'); -//@ ``` -//@ -//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as -//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_ -function _to(options, file) { - if (!file) - common.error('wrong arguments'); - - if (!fs.existsSync( path.dirname(file) )) - common.error('no such file or directory: ' + path.dirname(file)); - - try { - fs.writeFileSync(file, this.toString(), 'utf8'); - return this; - } catch(e) { - common.error('could not write to file (code '+e.code+'): '+file, true); - } -} -module.exports = _to; diff --git a/node_modules/shelljs/src/toEnd.js b/node_modules/shelljs/src/toEnd.js deleted file mode 100644 index bf29a65..0000000 --- a/node_modules/shelljs/src/toEnd.js +++ /dev/null @@ -1,30 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); -var path = require('path'); - -//@ -//@ ### 'string'.toEnd(file) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ cat('input.txt').toEnd('output.txt'); -//@ ``` -//@ -//@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as -//@ those returned by `cat`, `grep`, etc). -function _toEnd(options, file) { - if (!file) - common.error('wrong arguments'); - - if (!fs.existsSync( path.dirname(file) )) - common.error('no such file or directory: ' + path.dirname(file)); - - try { - fs.appendFileSync(file, this.toString(), 'utf8'); - return this; - } catch(e) { - common.error('could not append to file (code '+e.code+'): '+file, true); - } -} -module.exports = _toEnd; diff --git a/node_modules/shelljs/src/touch.js b/node_modules/shelljs/src/touch.js deleted file mode 100644 index bbc2c19..0000000 --- a/node_modules/shelljs/src/touch.js +++ /dev/null @@ -1,109 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); - -//@ -//@ ### touch([options,] file) -//@ Available options: -//@ -//@ + `-a`: Change only the access time -//@ + `-c`: Do not create any files -//@ + `-m`: Change only the modification time -//@ + `-d DATE`: Parse DATE and use it instead of current time -//@ + `-r FILE`: Use FILE's times instead of current time -//@ -//@ Examples: -//@ -//@ ```javascript -//@ touch('source.js'); -//@ touch('-c', '/path/to/some/dir/source.js'); -//@ touch({ '-r': FILE }, '/path/to/some/dir/source.js'); -//@ ``` -//@ -//@ Update the access and modification times of each FILE to the current time. -//@ A FILE argument that does not exist is created empty, unless -c is supplied. -//@ This is a partial implementation of *[touch(1)](http://linux.die.net/man/1/touch)*. -function _touch(opts, files) { - opts = common.parseOptions(opts, { - 'a': 'atime_only', - 'c': 'no_create', - 'd': 'date', - 'm': 'mtime_only', - 'r': 'reference', - }); - - if (!files) { - common.error('no paths given'); - } - - if (Array.isArray(files)) { - files.forEach(function(f) { - touchFile(opts, f); - }); - } else if (typeof files === 'string') { - touchFile(opts, files); - } else { - common.error('file arg should be a string file path or an Array of string file paths'); - } - -} - -function touchFile(opts, file) { - var stat = tryStatFile(file); - - if (stat && stat.isDirectory()) { - // don't error just exit - return; - } - - // if the file doesn't already exist and the user has specified --no-create then - // this script is finished - if (!stat && opts.no_create) { - return; - } - - // open the file and then close it. this will create it if it doesn't exist but will - // not truncate the file - fs.closeSync(fs.openSync(file, 'a')); - - // - // Set timestamps - // - - // setup some defaults - var now = new Date(); - var mtime = opts.date || now; - var atime = opts.date || now; - - // use reference file - if (opts.reference) { - var refStat = tryStatFile(opts.reference); - if (!refStat) { - common.error('failed to get attributess of ' + opts.reference); - } - mtime = refStat.mtime; - atime = refStat.atime; - } else if (opts.date) { - mtime = opts.date; - atime = opts.date; - } - - if (opts.atime_only && opts.mtime_only) { - // keep the new values of mtime and atime like GNU - } else if (opts.atime_only) { - mtime = stat.mtime; - } else if (opts.mtime_only) { - atime = stat.atime; - } - - fs.utimesSync(file, atime, mtime); -} - -module.exports = _touch; - -function tryStatFile(filePath) { - try { - return fs.statSync(filePath); - } catch (e) { - return null; - } -} diff --git a/node_modules/shelljs/src/which.js b/node_modules/shelljs/src/which.js deleted file mode 100644 index d17634e..0000000 --- a/node_modules/shelljs/src/which.js +++ /dev/null @@ -1,98 +0,0 @@ -var common = require('./common'); -var fs = require('fs'); -var path = require('path'); - -// XP's system default value for PATHEXT system variable, just in case it's not -// set on Windows. -var XP_DEFAULT_PATHEXT = '.com;.exe;.bat;.cmd;.vbs;.vbe;.js;.jse;.wsf;.wsh'; - -// Cross-platform method for splitting environment PATH variables -function splitPath(p) { - if (!p) - return []; - - if (common.platform === 'win') - return p.split(';'); - else - return p.split(':'); -} - -function checkPath(path) { - return fs.existsSync(path) && !fs.statSync(path).isDirectory(); -} - -//@ -//@ ### which(command) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ var nodeExec = which('node'); -//@ ``` -//@ -//@ Searches for `command` in the system's PATH. On Windows, this uses the -//@ `PATHEXT` variable to append the extension if it's not already executable. -//@ Returns string containing the absolute path to the command. -function _which(options, cmd) { - if (!cmd) - common.error('must specify command'); - - var pathEnv = process.env.path || process.env.Path || process.env.PATH, - pathArray = splitPath(pathEnv), - where = null; - - // No relative/absolute paths provided? - if (cmd.search(/\//) === -1) { - // Search for command in PATH - pathArray.forEach(function(dir) { - if (where) - return; // already found it - - var attempt = path.resolve(dir, cmd); - - if (common.platform === 'win') { - attempt = attempt.toUpperCase(); - - // In case the PATHEXT variable is somehow not set (e.g. - // child_process.spawn with an empty environment), use the XP default. - var pathExtEnv = process.env.PATHEXT || XP_DEFAULT_PATHEXT; - var pathExtArray = splitPath(pathExtEnv.toUpperCase()); - var i; - - // If the extension is already in PATHEXT, just return that. - for (i = 0; i < pathExtArray.length; i++) { - var ext = pathExtArray[i]; - if (attempt.slice(-ext.length) === ext && checkPath(attempt)) { - where = attempt; - return; - } - } - - // Cycle through the PATHEXT variable - var baseAttempt = attempt; - for (i = 0; i < pathExtArray.length; i++) { - attempt = baseAttempt + pathExtArray[i]; - if (checkPath(attempt)) { - where = attempt; - return; - } - } - } else { - // Assume it's Unix-like - if (checkPath(attempt)) { - where = attempt; - return; - } - } - }); - } - - // Command not found anywhere? - if (!checkPath(cmd) && !where) - return null; - - where = where || path.resolve(cmd); - - return common.ShellString(where); -} -module.exports = _which; diff --git a/node_modules/sntp/.npmignore b/node_modules/sntp/.npmignore deleted file mode 100644 index 77ba16c..0000000 --- a/node_modules/sntp/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/node_modules/sntp/.travis.yml b/node_modules/sntp/.travis.yml deleted file mode 100755 index 047f7e3..0000000 --- a/node_modules/sntp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/node_modules/sntp/LICENSE b/node_modules/sntp/LICENSE deleted file mode 100755 index b0d8774..0000000 --- a/node_modules/sntp/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2012-2014, Eran Hammer and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hueniverse/sntp/graphs/contributors diff --git a/node_modules/sntp/Makefile b/node_modules/sntp/Makefile deleted file mode 100755 index 417fd93..0000000 --- a/node_modules/sntp/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -test: - @node node_modules/lab/bin/lab -test-cov: - @node node_modules/lab/bin/lab -t 100 -m 3000 -test-cov-html: - @node node_modules/lab/bin/lab -r html -o coverage.html - -.PHONY: test test-cov test-cov-html - diff --git a/node_modules/sntp/README.md b/node_modules/sntp/README.md deleted file mode 100755 index 98a6e02..0000000 --- a/node_modules/sntp/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# sntp - -An SNTP v4 client (RFC4330) for node. Simpy connects to the NTP or SNTP server requested and returns the server time -along with the roundtrip duration and clock offset. To adjust the local time to the NTP time, add the returned `t` offset -to the local time. - -[![Build Status](https://secure.travis-ci.org/hueniverse/sntp.png)](http://travis-ci.org/hueniverse/sntp) - -# Usage - -```javascript -var Sntp = require('sntp'); - -// All options are optional - -var options = { - host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org - port: 123, // Defaults to 123 (NTP) - resolveReference: true, // Default to false (not resolving) - timeout: 1000 // Defaults to zero (no timeout) -}; - -// Request server time - -Sntp.time(options, function (err, time) { - - if (err) { - console.log('Failed: ' + err.message); - process.exit(1); - } - - console.log('Local clock is off by: ' + time.t + ' milliseconds'); - process.exit(0); -}); -``` - -If an application needs to maintain continuous time synchronization, the module provides a stateful method for -querying the current offset only when the last one is too old (defaults to daily). - -```javascript -// Request offset once - -Sntp.offset(function (err, offset) { - - console.log(offset); // New (served fresh) - - // Request offset again - - Sntp.offset(function (err, offset) { - - console.log(offset); // Identical (served from cache) - }); -}); -``` - -To set a background offset refresh, start the interval and use the provided now() method. If for any reason the -client fails to obtain an up-to-date offset, the current system clock is used. - -```javascript -var before = Sntp.now(); // System time without offset - -Sntp.start(function () { - - var now = Sntp.now(); // With offset - Sntp.stop(); -}); -``` - diff --git a/node_modules/sntp/examples/offset.js b/node_modules/sntp/examples/offset.js deleted file mode 100755 index 0303f6d..0000000 --- a/node_modules/sntp/examples/offset.js +++ /dev/null @@ -1,16 +0,0 @@ -var Sntp = require('../lib'); - -// Request offset once - -Sntp.offset(function (err, offset) { - - console.log(offset); // New (served fresh) - - // Request offset again - - Sntp.offset(function (err, offset) { - - console.log(offset); // Identical (served from cache) - }); -}); - diff --git a/node_modules/sntp/examples/time.js b/node_modules/sntp/examples/time.js deleted file mode 100755 index bd70d0e..0000000 --- a/node_modules/sntp/examples/time.js +++ /dev/null @@ -1,25 +0,0 @@ -var Sntp = require('../lib'); - -// All options are optional - -var options = { - host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org - port: 123, // Defaults to 123 (NTP) - resolveReference: true, // Default to false (not resolving) - timeout: 1000 // Defaults to zero (no timeout) -}; - -// Request server time - -Sntp.time(options, function (err, time) { - - if (err) { - console.log('Failed: ' + err.message); - process.exit(1); - } - - console.log(time); - console.log('Local clock is off by: ' + time.t + ' milliseconds'); - process.exit(0); -}); - diff --git a/node_modules/sntp/index.js b/node_modules/sntp/index.js deleted file mode 100755 index 4cc88b3..0000000 --- a/node_modules/sntp/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/sntp/lib/index.js b/node_modules/sntp/lib/index.js deleted file mode 100755 index e91718b..0000000 --- a/node_modules/sntp/lib/index.js +++ /dev/null @@ -1,412 +0,0 @@ -// Load modules - -var Dgram = require('dgram'); -var Dns = require('dns'); -var Hoek = require('hoek'); - - -// Declare internals - -var internals = {}; - - -exports.time = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - var settings = Hoek.clone(options); - settings.host = settings.host || 'pool.ntp.org'; - settings.port = settings.port || 123; - settings.resolveReference = settings.resolveReference || false; - - // Declare variables used by callback - - var timeoutId = 0; - var sent = 0; - - // Ensure callback is only called once - - var finish = function (err, result) { - - if (timeoutId) { - clearTimeout(timeoutId); - timeoutId = 0; - } - - socket.removeAllListeners(); - socket.once('error', internals.ignore); - socket.close(); - return callback(err, result); - }; - - finish = Hoek.once(finish); - - // Create UDP socket - - var socket = Dgram.createSocket('udp4'); - - socket.once('error', function (err) { - - return finish(err); - }); - - // Listen to incoming messages - - socket.on('message', function (buffer, rinfo) { - - var received = Date.now(); - - var message = new internals.NtpMessage(buffer); - if (!message.isValid) { - return finish(new Error('Invalid server response'), message); - } - - if (message.originateTimestamp !== sent) { - return finish(new Error('Wrong originate timestamp'), message); - } - - // Timestamp Name ID When Generated - // ------------------------------------------------------------ - // Originate Timestamp T1 time request sent by client - // Receive Timestamp T2 time request received by server - // Transmit Timestamp T3 time reply sent by server - // Destination Timestamp T4 time reply received by client - // - // The roundtrip delay d and system clock offset t are defined as: - // - // d = (T4 - T1) - (T3 - T2) t = ((T2 - T1) + (T3 - T4)) / 2 - - var T1 = message.originateTimestamp; - var T2 = message.receiveTimestamp; - var T3 = message.transmitTimestamp; - var T4 = received; - - message.d = (T4 - T1) - (T3 - T2); - message.t = ((T2 - T1) + (T3 - T4)) / 2; - message.receivedLocally = received; - - if (!settings.resolveReference || - message.stratum !== 'secondary') { - - return finish(null, message); - } - - // Resolve reference IP address - - Dns.reverse(message.referenceId, function (err, domains) { - - if (/* $lab:coverage:off$ */ !err /* $lab:coverage:on$ */) { - message.referenceHost = domains[0]; - } - - return finish(null, message); - }); - }); - - // Set timeout - - if (settings.timeout) { - timeoutId = setTimeout(function () { - - timeoutId = 0; - return finish(new Error('Timeout')); - }, settings.timeout); - } - - // Construct NTP message - - var message = new Buffer(48); - for (var i = 0; i < 48; i++) { // Zero message - message[i] = 0; - } - - message[0] = (0 << 6) + (4 << 3) + (3 << 0) // Set version number to 4 and Mode to 3 (client) - sent = Date.now(); - internals.fromMsecs(sent, message, 40); // Set transmit timestamp (returns as originate) - - // Send NTP request - - socket.send(message, 0, message.length, settings.port, settings.host, function (err, bytes) { - - if (err || - bytes !== 48) { - - return finish(err || new Error('Could not send entire message')); - } - }); -}; - - -internals.NtpMessage = function (buffer) { - - this.isValid = false; - - // Validate - - if (buffer.length !== 48) { - return; - } - - // Leap indicator - - var li = (buffer[0] >> 6); - switch (li) { - case 0: this.leapIndicator = 'no-warning'; break; - case 1: this.leapIndicator = 'last-minute-61'; break; - case 2: this.leapIndicator = 'last-minute-59'; break; - case 3: this.leapIndicator = 'alarm'; break; - } - - // Version - - var vn = ((buffer[0] & 0x38) >> 3); - this.version = vn; - - // Mode - - var mode = (buffer[0] & 0x7); - switch (mode) { - case 1: this.mode = 'symmetric-active'; break; - case 2: this.mode = 'symmetric-passive'; break; - case 3: this.mode = 'client'; break; - case 4: this.mode = 'server'; break; - case 5: this.mode = 'broadcast'; break; - case 0: - case 6: - case 7: this.mode = 'reserved'; break; - } - - // Stratum - - var stratum = buffer[1]; - if (stratum === 0) { - this.stratum = 'death'; - } - else if (stratum === 1) { - this.stratum = 'primary'; - } - else if (stratum <= 15) { - this.stratum = 'secondary'; - } - else { - this.stratum = 'reserved'; - } - - // Poll interval (msec) - - this.pollInterval = Math.round(Math.pow(2, buffer[2])) * 1000; - - // Precision (msecs) - - this.precision = Math.pow(2, buffer[3]) * 1000; - - // Root delay (msecs) - - var rootDelay = 256 * (256 * (256 * buffer[4] + buffer[5]) + buffer[6]) + buffer[7]; - this.rootDelay = 1000 * (rootDelay / 0x10000); - - // Root dispersion (msecs) - - this.rootDispersion = ((buffer[8] << 8) + buffer[9] + ((buffer[10] << 8) + buffer[11]) / Math.pow(2, 16)) * 1000; - - // Reference identifier - - this.referenceId = ''; - switch (this.stratum) { - case 'death': - case 'primary': - this.referenceId = String.fromCharCode(buffer[12]) + String.fromCharCode(buffer[13]) + String.fromCharCode(buffer[14]) + String.fromCharCode(buffer[15]); - break; - case 'secondary': - this.referenceId = '' + buffer[12] + '.' + buffer[13] + '.' + buffer[14] + '.' + buffer[15]; - break; - } - - // Reference timestamp - - this.referenceTimestamp = internals.toMsecs(buffer, 16); - - // Originate timestamp - - this.originateTimestamp = internals.toMsecs(buffer, 24); - - // Receive timestamp - - this.receiveTimestamp = internals.toMsecs(buffer, 32); - - // Transmit timestamp - - this.transmitTimestamp = internals.toMsecs(buffer, 40); - - // Validate - - if (this.version === 4 && - this.stratum !== 'reserved' && - this.mode === 'server' && - this.originateTimestamp && - this.receiveTimestamp && - this.transmitTimestamp) { - - this.isValid = true; - } - - return this; -}; - - -internals.toMsecs = function (buffer, offset) { - - var seconds = 0; - var fraction = 0; - - for (var i = 0; i < 4; ++i) { - seconds = (seconds * 256) + buffer[offset + i]; - } - - for (i = 4; i < 8; ++i) { - fraction = (fraction * 256) + buffer[offset + i]; - } - - return ((seconds - 2208988800 + (fraction / Math.pow(2, 32))) * 1000); -}; - - -internals.fromMsecs = function (ts, buffer, offset) { - - var seconds = Math.floor(ts / 1000) + 2208988800; - var fraction = Math.round((ts % 1000) / 1000 * Math.pow(2, 32)); - - buffer[offset + 0] = (seconds & 0xFF000000) >> 24; - buffer[offset + 1] = (seconds & 0x00FF0000) >> 16; - buffer[offset + 2] = (seconds & 0x0000FF00) >> 8; - buffer[offset + 3] = (seconds & 0x000000FF); - - buffer[offset + 4] = (fraction & 0xFF000000) >> 24; - buffer[offset + 5] = (fraction & 0x00FF0000) >> 16; - buffer[offset + 6] = (fraction & 0x0000FF00) >> 8; - buffer[offset + 7] = (fraction & 0x000000FF); -}; - - -// Offset singleton - -internals.last = { - offset: 0, - expires: 0, - host: '', - port: 0 -}; - - -exports.offset = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - var now = Date.now(); - var clockSyncRefresh = options.clockSyncRefresh || 24 * 60 * 60 * 1000; // Daily - - if (internals.last.offset && - internals.last.host === options.host && - internals.last.port === options.port && - now < internals.last.expires) { - - process.nextTick(function () { - - callback(null, internals.last.offset); - }); - - return; - } - - exports.time(options, function (err, time) { - - if (err) { - return callback(err, 0); - } - - internals.last = { - offset: Math.round(time.t), - expires: now + clockSyncRefresh, - host: options.host, - port: options.port - }; - - return callback(null, internals.last.offset); - }); -}; - - -// Now singleton - -internals.now = { - intervalId: 0 -}; - - -exports.start = function (options, callback) { - - if (arguments.length !== 2) { - callback = arguments[0]; - options = {}; - } - - if (internals.now.intervalId) { - process.nextTick(function () { - - callback(); - }); - - return; - } - - exports.offset(options, function (err, offset) { - - internals.now.intervalId = setInterval(function () { - - exports.offset(options, function () { }); - }, options.clockSyncRefresh || 24 * 60 * 60 * 1000); // Daily - - return callback(); - }); -}; - - -exports.stop = function () { - - if (!internals.now.intervalId) { - return; - } - - clearInterval(internals.now.intervalId); - internals.now.intervalId = 0; -}; - - -exports.isLive = function () { - - return !!internals.now.intervalId; -}; - - -exports.now = function () { - - var now = Date.now(); - if (!exports.isLive() || - now >= internals.last.expires) { - - return now; - } - - return now + internals.last.offset; -}; - - -internals.ignore = function () { - -}; diff --git a/node_modules/sntp/package.json b/node_modules/sntp/package.json deleted file mode 100644 index 8b2ca9c..0000000 --- a/node_modules/sntp/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "sntp@1.x.x", - "/Users/jbaylina/git/MVP/node_modules/hawk" - ] - ], - "_from": "sntp@>=1.0.0 <2.0.0", - "_id": "sntp@1.0.9", - "_inCache": true, - "_installable": true, - "_location": "/sntp", - "_npmUser": { - "email": "eran@hueniverse.com", - "name": "hueniverse" - }, - "_npmVersion": "1.4.23", - "_phantomChildren": {}, - "_requested": { - "name": "sntp", - "raw": "sntp@1.x.x", - "rawSpec": "1.x.x", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/hawk" - ], - "_resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "_shasum": "6541184cc90aeea6c6e7b35e2659082443c66198", - "_shrinkwrap": null, - "_spec": "sntp@1.x.x", - "_where": "/Users/jbaylina/git/MVP/node_modules/hawk", - "author": { - "email": "eran@hammer.io", - "name": "Eran Hammer", - "url": "http://hueniverse.com" - }, - "bugs": { - "url": "https://github.com/hueniverse/sntp/issues" - }, - "contributors": [], - "dependencies": { - "hoek": "2.x.x" - }, - "description": "SNTP Client", - "devDependencies": { - "lab": "4.x.x" - }, - "directories": {}, - "dist": { - "shasum": "6541184cc90aeea6c6e7b35e2659082443c66198", - "tarball": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" - }, - "engines": { - "node": ">=0.8.0" - }, - "gitHead": "ee2e35284f684609990681734d39010cd356d7da", - "homepage": "https://github.com/hueniverse/sntp", - "keywords": [ - "sntp", - "ntp", - "time" - ], - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/hueniverse/sntp/raw/master/LICENSE" - } - ], - "main": "index", - "maintainers": [ - { - "email": "eran@hueniverse.com", - "name": "hueniverse" - } - ], - "name": "sntp", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/hueniverse/sntp.git" - }, - "scripts": { - "test": "make test-cov" - }, - "version": "1.0.9" -} diff --git a/node_modules/sntp/test/index.js b/node_modules/sntp/test/index.js deleted file mode 100755 index f1d1cda..0000000 --- a/node_modules/sntp/test/index.js +++ /dev/null @@ -1,435 +0,0 @@ -// Load modules - -var Dns = require('dns'); -var Dgram = require('dgram'); -var Lab = require('lab'); -var Sntp = require('../lib'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var lab = exports.lab = Lab.script(); -var before = lab.before; -var after = lab.after; -var describe = lab.experiment; -var it = lab.test; -var expect = Lab.expect; - - -describe('SNTP', function () { - - describe('#time', function () { - - it('returns consistent result over multiple tries', function (done) { - - Sntp.time(function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - var t1 = time.t; - - Sntp.time(function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - var t2 = time.t; - expect(Math.abs(t1 - t2)).is.below(200); - done(); - }); - }); - }); - - it('resolves reference IP', function (done) { - - Sntp.time({ host: 'ntp.exnet.com', resolveReference: true }, function (err, time) { - - expect(err).to.not.exist; - expect(time).to.exist; - expect(time.referenceHost).to.exist; - done(); - }); - }); - - it('times out on no response', function (done) { - - Sntp.time({ port: 124, timeout: 100 }, function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Timeout'); - done(); - }); - }); - - it('errors on error event', { parallel: false }, function (done) { - - var orig = Dgram.createSocket; - Dgram.createSocket = function (type) { - - Dgram.createSocket = orig; - var socket = Dgram.createSocket(type); - setImmediate(function () { socket.emit('error', new Error('Fake')) }); - return socket; - }; - - Sntp.time(function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Fake'); - done(); - }); - }); - - it('errors on incorrect sent size', { parallel: false }, function (done) { - - var orig = Dgram.Socket.prototype.send; - Dgram.Socket.prototype.send = function (buf, offset, length, port, address, callback) { - - Dgram.Socket.prototype.send = orig; - return callback(null, 40); - }; - - Sntp.time(function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.equal('Could not send entire message'); - done(); - }); - }); - - it('times out on invalid host', function (done) { - - Sntp.time({ host: 'error', timeout: 10000 }, function (err, time) { - - expect(err).to.exist; - expect(time).to.not.exist; - expect(err.message).to.contain('getaddrinfo'); - done(); - }); - }); - - it('fails on bad response buffer size', function (done) { - - var server = Dgram.createSocket('udp4'); - server.on('message', function (message, remote) { - var message = new Buffer(10); - server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { - - server.close(); - }); - }); - - server.bind(49123); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - var messup = function (bytes) { - - var server = Dgram.createSocket('udp4'); - server.on('message', function (message, remote) { - - var message = new Buffer([ - 0x24, 0x01, 0x00, 0xe3, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x41, 0x43, 0x54, 0x53, - 0xd4, 0xa8, 0x2d, 0xc7, - 0x1c, 0x5d, 0x49, 0x1b, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x67, 0xef, 0x9d, 0xb2, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x71, 0xed, 0xb5, 0xfb, - 0xd4, 0xa8, 0x2d, 0xe6, - 0x71, 0xee, 0x6c, 0xc5 - ]); - - for (var i = 0, il = bytes.length; i < il; ++i) { - message[bytes[i][0]] = bytes[i][1]; - } - - server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { - - server.close(); - }); - }); - - server.bind(49123); - }; - - it('fails on bad version', function (done) { - - messup([[0, (0 << 6) + (3 << 3) + (4 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.version).to.equal(3); - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - it('fails on bad originateTimestamp', function (done) { - - messup([[24, 0x83], [25, 0xaa], [26, 0x7e], [27, 0x80], [28, 0], [29, 0], [30, 0], [31, 0]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - it('fails on bad receiveTimestamp', function (done) { - - messup([[32, 0x83], [33, 0xaa], [34, 0x7e], [35, 0x80], [36, 0], [37, 0], [38, 0], [39, 0]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Invalid server response'); - done(); - }); - }); - - it('fails on bad originate timestamp and alarm li', function (done) { - - messup([[0, (3 << 6) + (4 << 3) + (4 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(err.message).to.equal('Wrong originate timestamp'); - expect(time.leapIndicator).to.equal('alarm'); - done(); - }); - }); - - it('returns time with death stratum and last61 li', function (done) { - - messup([[0, (1 << 6) + (4 << 3) + (4 << 0)], [1, 0]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(time.stratum).to.equal('death'); - expect(time.leapIndicator).to.equal('last-minute-61'); - done(); - }); - }); - - it('returns time with reserved stratum and last59 li', function (done) { - - messup([[0, (2 << 6) + (4 << 3) + (4 << 0)], [1, 0x1f]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(time.stratum).to.equal('reserved'); - expect(time.leapIndicator).to.equal('last-minute-59'); - done(); - }); - }); - - it('fails on bad mode (symmetric-active)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (1 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('symmetric-active'); - done(); - }); - }); - - it('fails on bad mode (symmetric-passive)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (2 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('symmetric-passive'); - done(); - }); - }); - - it('fails on bad mode (client)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (3 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('client'); - done(); - }); - }); - - it('fails on bad mode (broadcast)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (5 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('broadcast'); - done(); - }); - }); - - it('fails on bad mode (reserved)', function (done) { - - messup([[0, (0 << 6) + (4 << 3) + (6 << 0)]]); - - Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { - - expect(err).to.exist; - expect(time.mode).to.equal('reserved'); - done(); - }); - }); - }); - - describe('#offset', function () { - - it('gets the current offset', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - done(); - }); - }); - - it('gets the current offset from cache', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - var offset1 = offset; - Sntp.offset({}, function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.equal(offset1); - done(); - }); - }); - }); - - it('gets the new offset on different server', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - var offset1 = offset; - Sntp.offset({ host: 'nist1-sj.ustiming.org' }, function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(offset1); - done(); - }); - }); - }); - - it('gets the new offset on different server', function (done) { - - Sntp.offset(function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(0); - var offset1 = offset; - Sntp.offset({ port: 123 }, function (err, offset) { - - expect(err).to.not.exist; - expect(offset).to.not.equal(offset1); - done(); - }); - }); - }); - - it('fails getting the current offset on invalid server', function (done) { - - Sntp.offset({ host: 'error' }, function (err, offset) { - - expect(err).to.exist; - expect(offset).to.equal(0); - done(); - }); - }); - }); - - describe('#now', function () { - - it('starts auto-sync, gets now, then stops', function (done) { - - Sntp.stop(); - - var before = Sntp.now(); - expect(before).to.equal(Date.now()); - - Sntp.start(function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - Sntp.stop(); - - done(); - }); - }); - - it('starts twice', function (done) { - - Sntp.start(function () { - - Sntp.start(function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - Sntp.stop(); - - done(); - }); - }); - }); - - it('starts auto-sync, gets now, waits, gets again after timeout', function (done) { - - Sntp.stop(); - - var before = Sntp.now(); - expect(before).to.equal(Date.now()); - - Sntp.start({ clockSyncRefresh: 100 }, function () { - - var now = Sntp.now(); - expect(now).to.not.equal(Date.now()); - expect(now).to.equal(Sntp.now()); - - setTimeout(function () { - - expect(Sntp.now()).to.not.equal(now); - Sntp.stop(); - done(); - }, 110); - }); - }); - }); -}); - diff --git a/node_modules/solc/LICENSE b/node_modules/solc/LICENSE deleted file mode 100644 index 853b46d..0000000 --- a/node_modules/solc/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/solc/README.md b/node_modules/solc/README.md deleted file mode 100644 index 381a18f..0000000 --- a/node_modules/solc/README.md +++ /dev/null @@ -1,132 +0,0 @@ -[![Build Status](https://travis-ci.org/ethereum/solc-js.svg?branch=master)](https://travis-ci.org/ethereum/solc-js) - -# solc-js -JavaScript bindings for the [Solidity compiler](https://github.com/ethereum/solidity). - -Uses the Emscripten compiled Solidity found in the [solc-bin repository](https://github.com/ethereum/solc-bin). - -## Node.js Usage - -To use the latest stable version of the Solidity compiler via Node.js you can install it via npm: - -```bash -npm install solc -``` - -### Usage on the Command-Line - -If this package is installed globally (`npm install -g solc`), a command-line tool called `solcjs` will be available. - -To see all the supported features, execute: - -```bash -solcjs --help -``` - -### Usage in Projects - -It can also be included and used in other projects: - -```javascript -var solc = require('solc'); -var input = 'contract x { function g() {} }'; -var output = solc.compile(input, 1); // 1 activates the optimiser -for (var contractName in output.contracts) { - // code and ABI that are needed by web3 - console.log(contractName + ': ' + output.contracts[contractName].bytecode); - console.log(contractName + '; ' + JSON.parse(output.contracts[contractName].interface)); -} -``` - -Starting from version 0.1.6, multiple files are supported with automatic import resolution by the compiler as follows: - -```javascript -var solc = require('solc'); -var input = { - 'lib.sol': 'library L { function f() returns (uint) { return 7; } }', - 'cont.sol': 'import "lib.sol"; contract x { function g() { L.f(); } }' -}; -var output = solc.compile({sources: input}, 1); -for (var contractName in output.contracts) - console.log(contractName + ': ' + output.contracts[contractName].bytecode); -``` - -Note that all input files that are imported have to be supplied, the compiler will not load any additional files on its own. - -Starting from version 0.2.1, a callback is supported to resolve missing imports as follows: - -```javascript -var solc = require('solc'); -var input = { - 'cont.sol': 'import "lib.sol"; contract x { function g() { L.f(); } }' -}; -function findImports(path) { - if (path === 'lib.sol') - return { contents: 'library L { function f() returns (uint) { return 7; } }' } - else - return { error: 'File not found' } -} -var output = solc.compile({sources: input}, 1, findImports); -for (var contractName in output.contracts) - console.log(contractName + ': ' + output.contracts[contractName].bytecode); -``` - -**Note:** -If you are using Electron, `nodeIntegration` is on for `BrowserWindow` by default. If it is on, Electron will provide a `require` method which will not behave as expected and this may cause calls, such as `require('solc')`, to fail. - -To turn off `nodeIntegration`, use the following: - -```javascript -new BrowserWindow({ - webPreferences: { - nodeIntegration: false - } -}); -``` - -### Using a Legacy Version - -In order to compile contracts using a specific version of Solidity, the `solc.useVersion` method is available. This returns a new `solc` object that uses a version of the compiler specified. **Note**: version strings must match the version substring of the files available in `/bin/soljson-*.js`. See below for an example. - -```javascript -var solc = require('solc'); -// by default the latest version is used -// ie: solc.useVersion('latest') - -// getting a legacy version -var solcV011 = solc.useVersion('v0.1.1-2015-08-04-6ff4cd6'); -var output = solcV011.compile('contract t { function g() {} }', 1); -``` - -If the version is not available locally, you can use `solc.loadRemoteVersion(version, callback)` to load it directly from GitHub. - -You can also load the "binary" manually and use `setupMethods` to create the familiar wrapper functions described above: -`var solc = solc.setupMethods(require("/my/local/soljson.js"))`. - -### Using the Latest Development Snapshot - -By default, the npm version is only created for releases. This prevents people from deploying contracts with non-release versions because they are less stable and harder to verify. If you would like to use the latest development snapshot (at your own risk!), you may use the following example code. - -```javascript -var solc = require('solc'); - -// getting the development snapshot -solc.loadRemoteVersion('latest', function(err, solcSnapshot) { - if (err) { - // An error was encountered, display and quit - } - var output = solcSnapshot.compile("contract t { function g() {} }", 1); -}); -``` - -### Linking Bytecode - -When using libraries, the resulting bytecode will contain placeholders for the real addresses of the referenced libraries. These have to be updated, via a process called linking, before deploying the contract. - -The `linkBytecode` method provides a simple helper for linking: - -```javascript -bytecode = solc.linkBytecode(bytecode, { 'MyLibrary': '0x123456...' }); -``` - -Note: in future versions of Solidity a more sophisticated linker architecture will be introduced. Once that changes, this method will still be usable for output created by old versions of Solidity. diff --git a/node_modules/solc/index.js b/node_modules/solc/index.js deleted file mode 100644 index 5925da6..0000000 --- a/node_modules/solc/index.js +++ /dev/null @@ -1,3 +0,0 @@ -var wrapper = require('./wrapper.js'); - -module.exports = wrapper(require('./soljson.js')); diff --git a/node_modules/solc/node_modules/yargs/CHANGELOG.md b/node_modules/solc/node_modules/yargs/CHANGELOG.md deleted file mode 100644 index c2f810b..0000000 --- a/node_modules/solc/node_modules/yargs/CHANGELOG.md +++ /dev/null @@ -1,653 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -## [4.8.1](https://github.com/yargs/yargs/compare/v4.8.0...v4.8.1) (2016-07-16) - - -### Bug Fixes - -* **commandDir:** make dir relative to caller instead of require.main.filename ([#548](https://github.com/yargs/yargs/issues/548)) ([3c2e479](https://github.com/yargs/yargs/commit/3c2e479)) -* add config lookup for .implies() ([#556](https://github.com/yargs/yargs/issues/556)) ([8d7585c](https://github.com/yargs/yargs/commit/8d7585c)) -* cache pkg lookups by path to avoid returning the wrong one ([#552](https://github.com/yargs/yargs/issues/552)) ([fea7e0b](https://github.com/yargs/yargs/commit/fea7e0b)) -* positional arguments were not being handled appropriately by parse() ([#559](https://github.com/yargs/yargs/issues/559)) ([063a866](https://github.com/yargs/yargs/commit/063a866)) -* pull in [@nexdrew](https://github.com/nexdrew)'s fixes to yargs-parser ([#560](https://github.com/yargs/yargs/issues/560)) ([c77c080](https://github.com/yargs/yargs/commit/c77c080)), closes [#560](https://github.com/yargs/yargs/issues/560) - - - - -# [4.8.0](https://github.com/yargs/yargs/compare/v4.7.1...v4.8.0) (2016-07-09) - - -### Bug Fixes - -* drop unused camelcase dependency fixes [#516](https://github.com/yargs/yargs/issues/516) ([#525](https://github.com/yargs/yargs/issues/525)) ([365fb9a](https://github.com/yargs/yargs/commit/365fb9a)), closes [#516](https://github.com/yargs/yargs/issues/516) [#525](https://github.com/yargs/yargs/issues/525) -* fake a tty in tests, so that we can use the new set-blocking ([#512](https://github.com/yargs/yargs/issues/512)) ([a54c742](https://github.com/yargs/yargs/commit/a54c742)) -* ignore invalid package.json during read-pkg-up ([#546](https://github.com/yargs/yargs/issues/546)) ([e058c87](https://github.com/yargs/yargs/commit/e058c87)) -* keep both zh and zh_CN until yargs[@5](https://github.com/5).x ([0f8faa7](https://github.com/yargs/yargs/commit/0f8faa7)) -* lazy-load package.json and cache. get rid of pkg-conf dependency. ([#544](https://github.com/yargs/yargs/issues/544)) ([2609b2e](https://github.com/yargs/yargs/commit/2609b2e)) -* we now respect the order of _ when applying commands ([#537](https://github.com/yargs/yargs/issues/537)) ([ed86b78](https://github.com/yargs/yargs/commit/ed86b78)) - - -### Features - -* add .commandDir(dir) to API to apply all command modules from a relative directory ([#494](https://github.com/yargs/yargs/issues/494)) ([b299dff](https://github.com/yargs/yargs/commit/b299dff)) -* **command:** derive missing command string from module filename ([#527](https://github.com/yargs/yargs/issues/527)) ([20d4b8a](https://github.com/yargs/yargs/commit/20d4b8a)) -* builder is now optional for a command module ([#545](https://github.com/yargs/yargs/issues/545)) ([8d6ad6e](https://github.com/yargs/yargs/commit/8d6ad6e)) - - - - -## [4.7.1](https://github.com/yargs/yargs/compare/v4.7.0...v4.7.1) (2016-05-15) - - -### Bug Fixes - -* switch to using `const` rather than `var` ([#499](https://github.com/yargs/yargs/pull/499)) -* make stdout flush on newer versions of Node.js ([#501](https://github.com/yargs/yargs/issues/501)) ([9f8c6f4](https://github.com/yargs/yargs/commit/9f8c6f4)) - - - - -# [4.7.0](https://github.com/yargs/yargs/compare/v4.6.0...v4.7.0) (2016-05-02) - - -### Bug Fixes - -* **pkgConf:** fix aliases issues in .pkgConf() ([#478](https://github.com/yargs/yargs/issues/478))([b900502](https://github.com/yargs/yargs/commit/b900502)) - - -### Features - -* **completion:** allow to get completions for any string, not just process.argv ([#470](https://github.com/yargs/yargs/issues/470))([74fcfbc](https://github.com/yargs/yargs/commit/74fcfbc)) -* **configuration:** Allow to directly pass a configuration object to .config() ([#480](https://github.com/yargs/yargs/issues/480))([e0a7e05](https://github.com/yargs/yargs/commit/e0a7e05)) -* **validation:** Add .skipValidation() method ([#471](https://github.com/yargs/yargs/issues/471))([d72badb](https://github.com/yargs/yargs/commit/d72badb)) - - - - -# [4.6.0](https://github.com/yargs/yargs/compare/v4.5.0...v4.6.0) (2016-04-11) - - -### Bug Fixes - -* **my brand!:** I agree with [@osher](https://github.com/osher) lightweight isn't a huge selling point of ours any longer, see [#468](https://github.com/yargs/yargs/issues/468) ([c46d7e1](https://github.com/yargs/yargs/commit/c46d7e1)) - -### Features - -* switch to standard-version for release management ([f70f801](https://github.com/yargs/yargs/commit/f70f801)) -* upgrade to version of yargs-parser that introduces some slick new features, great work [@elas7](https://github.com/elas7). update cliui, replace win-spawn, replace badge. ([#475](https://github.com/yargs/yargs/issues/475)) ([f915dd4](https://github.com/yargs/yargs/commit/f915dd4)) - - - - -# [4.5.0](https://github.com/yargs/yargs/compare/v4.4.0...v4.5.0) (2016-04-05) - - -### Bug Fixes - -* **windows:** handle $0 better on Windows platforms ([eb6e03f](https://github.com/yargs/yargs/commit/eb6e03f)) - -### Features - -* **commands:** implemented variadic positional arguments ([51d926e](https://github.com/yargs/yargs/commit/51d926e)) -* **completion:** completion now better handles aliases, and avoids duplicating keys. ([86416c8](https://github.com/yargs/yargs/commit/86416c8)) -* **config:** If invoking .config() without parameters, set a default option ([0413dd1](https://github.com/yargs/yargs/commit/0413dd1)) -* **conventional-changelog:** switching to using conventional-changelog for generating the changelog ([a2b5a2a](https://github.com/yargs/yargs/commit/a2b5a2a)) - - - -### v4.4.0 (2016/04/03 21:10 +07:00) - -- [#454](https://github.com/yargs/yargs/pull/454) fix demand() when second argument is an array (@elas7) -- [#452](https://github.com/yargs/yargs/pull/452) fix code example for `.help()` docs (@maxrimue) -- [#450](https://github.com/yargs/yargs/pull/450) fix for bash completion trailing space edge-case (@elas7) -- [#448](https://github.com/yargs/yargs/pull/448) allow a method to be passed to `showHelp`, rather than a log-level (@osher) -- [#446](https://github.com/yargs/yargs/pull/446) update yargs-parser, y18n, nyc, cliui, pkg-conf (@bcoe) -- [#436](https://github.com/yargs/yargs/pull/436) the rebase method is only used by tests, do not export it in two places (@elas7) -- [#428](https://github.com/yargs/yargs/pull/428) initial support for subcommands (@nexdrew) - -### v4.3.2 (2016/3/20 15:07 +07:00) - -- [#445](https://github.com/yargs/yargs/pull/445) strict mode was failing if no commands were registered (@nexdrew) -- [#443](https://github.com/yargs/yargs/pull/443) adds Italian translation \o/ (@madrisan) -- [#441](https://github.com/yargs/yargs/pull/441) remove duplicate keys from array options configuration (@elas7) -- [#437](https://github.com/yargs/yargs/pull/437) standardize tests for .command() (@lrlna) - -### v4.3.0 (2016/3/12 14:19 +07:00) - -- [#432](https://github.com/yargs/yargs/pull/432) non-singleton version of yargs (@bcoe) -- [#422, #425, #420] translations for number (@zkat, @rilut, @maxrimue, @watilde) -- [#414](https://github.com/yargs/yargs/pull/414) all command options can be defined in module now (@nexdrew) - -### v4.2.0 (2016/2/22 11:02 +07:00) - -- [#395](https://github.com/yargs/yargs/pull/395) do not reset groups if they contain - global keys (@novemberborn) -- [#393](https://github.com/yargs/yargs/pull/393) use sane default for usage strings (@nexdrew) -- [#392](https://github.com/yargs/yargs/pull/392) resetting wrap() was causing layout issues - with commands (@nexdrew) -- [#391](https://github.com/yargs/yargs/pull/391) commands were being added multiple times (@nexdrew) - -### v4.0.0 (2016/2/14 1:27 +07:00) - -- [#384](https://github.com/bcoe/yargs/pull/384) add new number type to yargs (@lrlna, @maxrimue) -- [#382](https://github.com/bcoe/yargs/pull/382) pass error as extra parameter to fail (@gajus) -- [#378](https://github.com/bcoe/yargs/pull/378) introduces the pkgConf feature, which tells - yargs to load default argument values from a key on a project's package.json (@bcoe) -- [#376](https://github.com/bcoe/yargs/pull/376) **breaking change**, make help() method signature - more consistent with other commands (@maxrimue) -- [#368](https://github.com/bcoe/yargs/pull/368) **breaking change**, overhaul to command handling API: - introducing named positional arguments, commands as modules, introduces the concept of global options (options that don't reset). (@nexdrew, @bcoe). -- [#364](https://github.com/bcoe/yargs/pull/364) add the slick new yargs website to the package.json (@iarna). -- [#357](https://github.com/bcoe/yargs/pull/357) .strict() now requires that a valid command is provided (@lrlna) -- [#356](https://github.com/bcoe/yargs/pull/356) pull the parsing bits of yargs into the separate module yargs-parser. Various parsing options can now be turned on and off using configuration (@bcoe). -- [#330](https://github.com/bcoe/yargs/pull/330) **breaking change**, fix inconsistencies with `.version()` API. (@maxrimue). - -### v3.32.0 (2016/1/14 10:13 +07:00) - -- [#344](https://github.com/bcoe/yargs/pull/344) yargs now has a code of conduct and contributor guidelines (@bcoe) -- [#341](https://github.com/bcoe/yargs/issues/341) Fix edge-case with camel-case arguments (@davibe) -- [#331](https://github.com/bcoe/yargs/pull/331) Handle parsing a raw argument string (@kellyselden) -- [#325](https://github.com/bcoe/yargs/pull/325) Tweaks to make tests pass again on Windows (@isaacs) -- [#321](https://github.com/bcoe/yargs/pull/321) Custom config parsing function (@bcoe) - -### v3.31.0 (2015/12/03 10:15 +07:00) - -- [#239](https://github.com/bcoe/yargs/pull/239) Pass argv to commands (@bcoe) -- [#308](https://github.com/bcoe/yargs/pull/308) Yargs now handles environment variables (@nexdrew) -- [#302](https://github.com/bcoe/yargs/pull/302) Add Indonesian translation (@rilut) -- [#300](https://github.com/bcoe/yargs/pull/300) Add Turkish translation (@feyzo) -- [#298](https://github.com/bcoe/yargs/pull/298) Add Norwegian Bokmål translation (@sindresorhus) -- [#297](https://github.com/bcoe/yargs/pull/297) Fix for layout of cjk characters (@disjukr) -- [#296](https://github.com/bcoe/yargs/pull/296) Add Korean translation (@disjukr) - -### v3.30.0 (2015/11/13 16:29 +07:00) - -- [#293](https://github.com/bcoe/yargs/pull/293) Polish language support (@kamilogorek) -- [#291](https://github.com/bcoe/yargs/pull/291) fix edge-cases with `.alias()` (@bcoe) -- [#289](https://github.com/bcoe/yargs/pull/289) group options in custom groups (@bcoe) - -### v3.29.0 (2015/10/16 21:51 +07:00) - -- [#282](https://github.com/bcoe/yargs/pull/282) completions now accept promises (@LinusU) -- [#281](https://github.com/bcoe/yargs/pull/281) fix parsing issues with dot notation (@bcoe) - -### v3.28.0 (2015/10/16 1:55 +07:00) - -- [#277](https://github.com/bcoe/yargs/pull/277) adds support for ansi escape codes (@bcoe) - -### v3.27.0 (2015/10/08 1:55 +00:00) - -- [#271](https://github.com/bcoe/yargs/pull/273) skips validation for help or version flags with exitProcess(false) (@tepez) -- [#273](https://github.com/bcoe/yargs/pull/273) implements single output for errors with exitProcess(false) (@nexdrew) -- [#269](https://github.com/bcoe/yargs/pull/269) verifies single output for errors with exitProcess(false) (@tepez) -- [#268](https://github.com/bcoe/yargs/pull/268) adds Chinese translation (@qiu8310) -- [#266](https://github.com/bcoe/yargs/pull/266) adds case for -- after -- in parser test (@geophree) - -### v3.26.0 (2015/09/25 2:14 +00:00) - -- [#263](https://github.com/bcoe/yargs/pull/263) document count() and option() object keys (@nexdrew) -- [#259](https://github.com/bcoe/yargs/pull/259) remove util in readme (@38elements) -- [#258](https://github.com/bcoe/yargs/pull/258) node v4 builds, update deps (@nexdrew) -- [#257](https://github.com/bcoe/yargs/pull/257) fix spelling errors (@dkoleary88) - -### v3.25.0 (2015/09/13 7:38 -07:00) - -- [#254](https://github.com/bcoe/yargs/pull/254) adds Japanese translation (@oti) -- [#253](https://github.com/bcoe/yargs/pull/253) fixes for tests on Windows (@bcoe) - -### v3.24.0 (2015/09/04 12:02 +00:00) - -- [#248](https://github.com/bcoe/yargs/pull/248) reinstate os-locale, no spawning (@nexdrew) -- [#249](https://github.com/bcoe/yargs/pull/249) use travis container-based infrastructure (@nexdrew) -- [#247](https://github.com/bcoe/yargs/pull/247) upgrade standard (@nexdrew) - -### v3.23.0 (2015/08/30 23:00 +00:00) - -- [#246](https://github.com/bcoe/yargs/pull/246) detect locale based only on environment variables (@bcoe) -- [#244](https://github.com/bcoe/yargs/pull/244) adds Windows CI testing (@bcoe) -- [#245](https://github.com/bcoe/yargs/pull/245) adds OSX CI testing (@bcoe, @nexdrew) - -### v3.22.0 (2015/08/28 22:26 +00:00) -- [#242](https://github.com/bcoe/yargs/pull/242) adds detectLocale config option (@bcoe) - -### v3.21.1 (2015/08/28 20:58 +00:00) -- [#240](https://github.com/bcoe/yargs/pull/240) hot-fix for Atom on Windows (@bcoe) - -### v3.21.0 (2015/08/21 21:20 +00:00) -- [#238](https://github.com/bcoe/yargs/pull/238) upgrade camelcase, window-size, chai, mocha (@nexdrew) -- [#237](https://github.com/bcoe/yargs/pull/237) adds defaultDescription to option() (@nexdrew) - -### v3.20.0 (2015/08/20 01:29 +00:00) -- [#231](https://github.com/bcoe/yargs/pull/231) Merge pull request #231 from bcoe/detect-locale (@sindresorhus) -- [#235](https://github.com/bcoe/yargs/pull/235) adds german translation to yargs (@maxrimue) - -### v3.19.0 (2015/08/14 05:12 +00:00) -- [#224](https://github.com/bcoe/yargs/pull/224) added Portuguese translation (@codemonkey3045) - -### v3.18.1 (2015/08/12 05:53 +00:00) - -- [#228](https://github.com/bcoe/yargs/pull/228) notes about embedding yargs in Electron (@etiktin) -- [#223](https://github.com/bcoe/yargs/pull/223) make booleans work in config files (@sgentle) - -### v3.18.0 (2015/08/06 20:05 +00:00) -- [#222](https://github.com/bcoe/yargs/pull/222) updates fr locale (@nexdrew) -- [#221](https://github.com/bcoe/yargs/pull/221) adds missing locale strings (@nexdrew) -- [#220](https://github.com/bcoe/yargs/pull/220) adds es locale (@zkat) - -### v3.17.1 (2015/08/02 19:35 +00:00) -- [#218](https://github.com/bcoe/yargs/pull/218) upgrades nyc (@bcoe) - -### v3.17.0 (2015/08/02 18:39 +00:00) -- [#217](https://github.com/bcoe/yargs/pull/217) sort methods in README.md (@nexdrew) -- [#215](https://github.com/bcoe/yargs/pull/215) adds fr locale (@LoicMahieu) - -### v3.16.0 (2015/07/30 04:35 +00:00) -- [#210](https://github.com/bcoe/yargs/pull/210) adds i18n support to yargs (@bcoe) -- [#209](https://github.com/bcoe/yargs/pull/209) adds choices type to yargs (@nexdrew) -- [#207](https://github.com/bcoe/yargs/pull/207) pretty new shields from shields.io (@SimenB) -- [#208](https://github.com/bcoe/yargs/pull/208) improvements to README.md (@nexdrew) -- [#205](https://github.com/bcoe/yargs/pull/205) faster build times on Travis (@ChristianMurphy) - -### v3.15.0 (2015/07/06 06:01 +00:00) -- [#197](https://github.com/bcoe/yargs/pull/197) tweaks to how errors bubble up from parser.js (@bcoe) -- [#193](https://github.com/bcoe/yargs/pull/193) upgraded nyc, reporting now happens by default (@bcoe) - -### v3.14.0 (2015/06/28 02:12 +00:00) - -- [#192](https://github.com/bcoe/yargs/pull/192) standard style nits (@bcoe) -- [#190](https://github.com/bcoe/yargs/pull/190) allow for hidden commands, e.g., - .completion('completion', false) (@tschaub) - -### v3.13.0 (2015/06/24 04:12 +00:00) - -- [#187](https://github.com/bcoe/yargs/pull/187) completion now behaves differently - if it is being run in the context of a command (@tschaub) -- [#186](https://github.com/bcoe/yargs/pull/186) if no matches are found for a completion - default to filename completion (@tschaub) - -### v3.12.0 (2015/06/19 03:23 +00:00) -- [#183](https://github.com/bcoe/yargs/pull/183) don't complete commands if they've already been completed (@tschaub) -- [#181](https://github.com/bcoe/yargs/pull/181) various fixes for completion. (@bcoe, @tschaub) -- [#182](https://github.com/bcoe/yargs/pull/182) you can now set a maximum # of of required arguments (@bcoe) - -### v3.11.0 (2015/06/15 05:15 +00:00) - -- [#173](https://github.com/bcoe/yargs/pull/173) update standard, window-size, chai (@bcoe) -- [#171](https://github.com/bcoe/yargs/pull/171) a description can now be set - when providing a config option. (@5c077yP) - -### v3.10.0 (2015/05/29 04:25 +00:00) - -- [#165](https://github.com/bcoe/yargs/pull/165) expose yargs.terminalWidth() thanks @ensonic (@bcoe) -- [#164](https://github.com/bcoe/yargs/pull/164) better array handling thanks @getify (@bcoe) - -### v3.9.1 (2015/05/20 05:14 +00:00) -- [b6662b6](https://github.com/bcoe/yargs/commit/b6662b6774cfeab4876f41ec5e2f67b7698f4e2f) clarify .config() docs (@linclark) -- [0291360](https://github.com/bcoe/yargs/commit/02913606285ce31ce81d7f12c48d8a3029776ec7) fixed tests, switched to nyc for coverage, fixed security issue, added Lin as collaborator (@bcoe) - -### v3.9.0 (2015/05/10 18:32 +00:00) -- [#157](https://github.com/bcoe/yargs/pull/157) Merge pull request #157 from bcoe/command-yargs. allows handling of command specific arguments. Thanks for the suggestion @ohjames (@bcoe) -- [#158](https://github.com/bcoe/yargs/pull/158) Merge pull request #158 from kemitchell/spdx-license. Update license format (@kemitchell) - -### v3.8.0 (2015/04/24 23:10 +00:00) -- [#154](https://github.com/bcoe/yargs/pull/154) showHelp's method signature was misleading fixes #153 (@bcoe) -- [#151](https://github.com/bcoe/yargs/pull/151) refactor yargs' table layout logic to use new helper library (@bcoe) -- [#150](https://github.com/bcoe/yargs/pull/150) Fix README example in argument requirements (@annonymouse) - -### v3.7.2 (2015/04/13 11:52 -07:00) - -* [679fbbf](https://github.com/bcoe/yargs/commit/679fbbf55904030ccee8a2635e8e5f46551ab2f0) updated yargs to use the [standard](https://github.com/feross/standard) style guide (agokjr) -* [22382ee](https://github.com/bcoe/yargs/commit/22382ee9f5b495bc2586c1758cd1091cec3647f9 various bug fixes for $0 (@nylen) - -### v3.7.1 (2015/04/10 11:06 -07:00) - -* [89e1992](https://github.com/bcoe/yargs/commit/89e1992a004ba73609b5f9ee6890c4060857aba4) detect iojs bin along with node bin. (@bcoe) -* [755509e](https://github.com/bcoe/yargs/commit/755509ea90041e5f7833bba3b8c5deffe56f0aab) improvements to example documentation in README.md (@rstacruz) -* [0d2dfc8](https://github.com/bcoe/yargs/commit/0d2dfc822a43418242908ad97ddd5291a1b35dc6) showHelp() no longer requires that .argv has been called (@bcoe) - -### v3.7.0 (2015/04/04 02:29 -07:00) - -* [56cbe2d](https://github.com/bcoe/yargs/commit/56cbe2ddd33dc176dcbf97ba40559864a9f114e4) make .requiresArg() work with type hints. (@bcoe). -* [2f5d562](https://github.com/bcoe/yargs/commit/2f5d5624f736741deeedf6a664d57bc4d857bdd0) serialize arrays and objects in usage strings. (@bcoe). -* [5126304](https://github.com/bcoe/yargs/commit/5126304dd18351fc28f10530616fdd9361e0af98) be more lenient about alias/primary key ordering in chaining API. (@bcoe) - -### v3.6.0 (2015/03/21 01:00 +00:00) -- [4e24e22](https://github.com/bcoe/yargs/commit/4e24e22e6a195e55ab943ede704a0231ac33b99c) support for .js configuration files. (@pirxpilot) - -### v3.5.4 (2015/03/12 05:56 +00:00) -- [c16cc08](https://github.com/bcoe/yargs/commit/c16cc085501155cf7fd853ccdf8584b05ab92b78) message for non-option arguments is now optional, thanks to (@raine) - -### v3.5.3 (2015/03/09 06:14 +00:00) -- [870b428](https://github.com/bcoe/yargs/commit/870b428cf515d560926ca392555b7ad57dba9e3d) completion script was missing in package.json (@bcoe) - -### v3.5.2 (2015/03/09 06:11 +00:00) -- [58a4b24](https://github.com/bcoe/yargs/commit/58a4b2473ebbb326713d522be53e32d3aabb08d2) parse was being called multiple times, resulting in strange behavior (@bcoe) - -### v3.5.1 (2015/03/09 04:55 +00:00) -- [4e588e0](https://github.com/bcoe/yargs/commit/4e588e055afbeb9336533095f051496e3977f515) accidentally left testing logic in (@bcoe) - -### v3.5.0 (2015/03/09 04:49 +00:00) -- [718bacd](https://github.com/bcoe/yargs/commit/718bacd81b9b44f786af76b2afe491fe06274f19) added support for bash completions see #4 (@bcoe) -- [a192882](https://github.com/bcoe/yargs/commit/a19288270fc431396c42af01125eeb4443664528) downgrade to mocha 2.1.0 until https://github.com/mochajs/mocha/issues/1585 can be sorted out (@bcoe) - -### v3.4.7 (2015/03/09 04:09 +00:00) -- [9845e5c](https://github.com/bcoe/yargs/commit/9845e5c1a9c684ba0be3f0bfb40e7b62ab49d9c8) the Argv singleton was not being updated when manually parsing arguments, fixes #114 (@bcoe) - -### v3.4.6 (2015/03/09 04:01 +00:00) -- [45b4c80](https://github.com/bcoe/yargs/commit/45b4c80b890d02770b0a94f326695a8a566e8fe9) set placeholders for all keys fixes #115 (@bcoe) - -### v3.4.5 (2015/03/01 20:31 +00:00) -- [a758e0b](https://github.com/bcoe/yargs/commit/a758e0b2556184f067cf3d9c4ef886d39817ebd2) fix for count consuming too many arguments (@bcoe) - -### v3.4.4 (2015/02/28 04:52 +00:00) -- [0476af7](https://github.com/bcoe/yargs/commit/0476af757966acf980d998b45108221d4888cfcb) added nargs feature, allowing you to specify the number of arguments after an option (@bcoe) -- [092477d](https://github.com/bcoe/yargs/commit/092477d7ab3efbf0ba11cede57f7d8cfc70b024f) updated README with full example of v3.0 API (@bcoe) - -### v3.3.3 (2015/02/28 04:23 +00:00) -- [0c4b769](https://github.com/bcoe/yargs/commit/0c4b769516cd8d93a7c4e5e675628ae0049aa9a8) remove string dependency, which conflicted with other libraries see #106 (@bcoe) - -### v3.3.2 (2015/02/28 04:11 +00:00) -- [2a98906](https://github.com/bcoe/yargs/commit/2a9890675821c0e7a12f146ce008b0562cb8ec9a) add $0 to epilog (@schnittstabil) - -### v3.3.1 (2015/02/24 03:28 +00:00) -- [ad485ce](https://github.com/bcoe/yargs/commit/ad485ce748ebdfce25b88ef9d6e83d97a2f68987) fix for applying defaults to camel-case args (@bcoe) - -### v3.3.0 (2015/02/24 00:49 +00:00) -- [8bfe36d](https://github.com/bcoe/yargs/commit/8bfe36d7fb0f93a799ea3f4c756a7467c320f8c0) fix and document restart() command, as a tool for building nested CLIs (@bcoe) - -### v3.2.1 (2015/02/22 05:45 +00:00) -- [49a6d18](https://github.com/bcoe/yargs/commit/49a6d1822a4ef9b1ea6f90cc366be60912628885) you can now provide a function that generates a default value (@bcoe) - -### v3.2.0 (2015/02/22 05:24 +00:00) -- [7a55886](https://github.com/bcoe/yargs/commit/7a55886c9343cf71a20744ca5cdd56d2ea7412d5) improvements to yargs two-column text layout (@bcoe) -- [b6ab513](https://github.com/bcoe/yargs/commit/b6ab5136a4c3fa6aa496f6b6360382e403183989) Tweak NPM version badge (@nylen) - -### v3.1.0 (2015/02/19 19:37 +00:00) -- [9bd2379](https://github.com/bcoe/yargs/commit/9bd237921cf1b61fd9f32c0e6d23f572fc225861) version now accepts a function, making it easy to load version #s from a package.json (@bcoe) - -### v3.0.4 (2015/02/14 01:40 +00:00) -- [0b7c19b](https://github.com/bcoe/yargs/commit/0b7c19beaecb747267ca4cc10e5cb2a8550bc4b7) various fixes for dot-notation handling (@bcoe) - -### v3.0.3 (2015/02/14 00:59 +00:00) -- [c3f35e9](https://github.com/bcoe/yargs/commit/c3f35e99bd5a0d278073fcadd95e2d778616cc17) make sure dot-notation is applied to aliases (@bcoe) - -### 3.0.2 (2015/02/13 16:50 +00:00) -- [74c8967](https://github.com/bcoe/yargs/commit/74c8967c340c204a0a7edf8a702b6f46c2705435) document epilog shorthand of epilogue. (@bcoe) -- [670110f](https://github.com/bcoe/yargs/commit/670110fc01bedc4831b6fec6afac54517d5a71bc) any non-truthy value now causes check to fail see #76 (@bcoe) -- [0d8f791](https://github.com/bcoe/yargs/commit/0d8f791a33c11ced4cd431ea8d3d3a337d456b56) finished implementing my wish-list of fetures for yargs 3.0. see #88 (@bcoe) -- [5768447](https://github.com/bcoe/yargs/commit/5768447447c4c8e8304f178846206ce86540f063) fix coverage. (@bcoe) -- [82e793f](https://github.com/bcoe/yargs/commit/82e793f3f61c41259eaacb67f0796aea2cf2aaa0) detect console width and perform word-wrapping. (@bcoe) -- [67476b3](https://github.com/bcoe/yargs/commit/67476b37eea07fee55f23f35b9e0c7d76682b86d) refactor two-column table layout so that we can use it for examples and usage (@bcoe) -- [4724cdf](https://github.com/bcoe/yargs/commit/4724cdfcc8e37ae1ca3dcce9d762f476e9ef4bb4) major refactor of index.js, in prep for 3.x release. (@bcoe) - -### v2.3.0 (2015/02/08 20:41 +00:00) -- [d824620](https://github.com/bcoe/yargs/commit/d824620493df4e63664af1fe320764dd1a9244e6) allow for undefined boolean defaults (@ashi009) - -### v2.2.0 (2015/02/08 20:07 +00:00) -- [d6edd98](https://github.com/bcoe/yargs/commit/d6edd9848826e7389ed1393858c45d03961365fd) in-prep for further refactoring, and a 3.x release I've shuffled some things around and gotten test-coverage to 100%. (@bcoe) - -### v2.1.2 (2015/02/08 06:05 +00:00) -- [d640745](https://github.com/bcoe/yargs/commit/d640745a7b9f8d476e0223879d056d18d9c265c4) switch to path.relative (@bcoe) -- [3bfd41f](https://github.com/bcoe/yargs/commit/3bfd41ff262a041f29d828b88936a79c63cad594) remove mocha.opts. (@bcoe) -- [47a2f35](https://github.com/bcoe/yargs/commit/47a2f357091db70903a402d6765501c1d63f15fe) document using .string('_') for string ids. see #56 (@bcoe) -- [#57](https://github.com/bcoe/yargs/pull/57) Merge pull request #57 from eush77/option-readme (@eush77) - -### v2.1.1 (2015/02/06 08:08 +00:00) -- [01c6c61](https://github.com/bcoe/yargs/commit/01c6c61d67b4ebf88f41f0b32a345ec67f0ac17d) fix for #71, 'newAliases' of undefined (@bcoe) - -### v2.1.0 (2015/02/06 07:59 +00:00) -- [6a1a3fa](https://github.com/bcoe/yargs/commit/6a1a3fa731958e26ccd56885f183dd8985cc828f) try to guess argument types, and apply sensible defaults see #73 (@bcoe) - -### v2.0.1 (2015/02/06 07:54 +00:00) -- [96a06b2](https://github.com/bcoe/yargs/commit/96a06b2650ff1d085a52b7328d8bba614c20cc12) Fix for strange behavior with --sort option, see #51 (@bcoe) - -### v2.0.0 (2015/02/06 07:45 +00:00) -- [0250517](https://github.com/bcoe/yargs/commit/0250517c9643e53f431b824e8ccfa54937414011) - [108fb84](https://github.com/bcoe/yargs/commit/108fb8409a3a63dcaf99d917fe4dfcfaa1de236d) fixed bug with boolean parsing, when bools separated by = see #66 (@bcoe) -- [a465a59](https://github.com/bcoe/yargs/commit/a465a5915f912715738de890982e4f8395958b10) Add `files` field to the package.json (@shinnn) -- [31043de](https://github.com/bcoe/yargs/commit/31043de7a38a17c4c97711f1099f5fb164334db3) fix for yargs.argv having the same keys added multiple times see #63 (@bcoe) -- [2d68c5b](https://github.com/bcoe/yargs/commit/2d68c5b91c976431001c4863ce47c9297850f1ad) Disable process.exit calls using .exitProcess(false) (@cianclarke) -- [45da9ec](https://github.com/bcoe/yargs/commit/45da9ec4c55a7bd394721bc6a1db0dabad7bc52a) Mention .option in README (@eush77) - -### v1.3.2 (2014/10/06 21:56 +00:00) -- [b8d3472](https://github.com/bcoe/yargs/commit/b8d34725482e5821a3cc809c0df71378f282f526) 1.3.2 (@chevex) - -### list (2014/08/30 18:41 +00:00) -- [fbc777f](https://github.com/bcoe/yargs/commit/fbc777f416eeefd37c84e44d27d7dfc7c1925721) Now that yargs is the successor to optimist, I'm changing the README language to be more universal. Pirate speak isn't very accessible to non-native speakers. (@chevex) -- [a54d068](https://github.com/bcoe/yargs/commit/a54d0682ae2efc2394d407ab171cc8a8bbd135ea) version output will not print extra newline (@boneskull) -- [1cef5d6](https://github.com/bcoe/yargs/commit/1cef5d62a9d6d61a3948a49574892e01932cc6ae) Added contributors section to package.json (@chrisn) -- [cc295c0](https://github.com/bcoe/yargs/commit/cc295c0a80a2de267e0155b60d315fc4b6f7c709) Added 'require' and 'required' as synonyms for 'demand' (@chrisn) -- [d0bf951](https://github.com/bcoe/yargs/commit/d0bf951d949066b6280101ed606593d079ee15c8) Updating minimist. (@chevex) -- [c15f8e7](https://github.com/bcoe/yargs/commit/c15f8e7f245b261e542cf205ce4f4313630cbdb4) Fix #31 (bad interaction between camelCase options and strict mode) (@nylen) -- [d991b9b](https://github.com/bcoe/yargs/commit/d991b9be687a68812dee1e3b185ba64b7778b82d) Added .help() and .version() methods (@chrisn) -- [e8c8aa4](https://github.com/bcoe/yargs/commit/e8c8aa46268379357cb11e9fc34b8c403037724b) Added .showHelpOnFail() method (@chrisn) -- [e855af4](https://github.com/bcoe/yargs/commit/e855af4a933ea966b5bbdd3c4c6397a4bac1a053) Allow boolean flag with .demand() (@chrisn) -- [14dbec2](https://github.com/bcoe/yargs/commit/14dbec24fb7380683198e2b20c4deb8423e64bea) Fixes issue #22. Arguments are no longer printed to the console when using .config. (@chevex) -- [bef74fc](https://github.com/bcoe/yargs/commit/bef74fcddc1544598a804f80d0a3728459f196bf) Informing users that Yargs is the official optimist successor. (@chevex) -- [#24](https://github.com/bcoe/yargs/pull/24) Merge pull request #24 from chrisn/strict (@chrisn) -- [889a2b2](https://github.com/bcoe/yargs/commit/889a2b28eb9768801b05163360a470d0fd6c8b79) Added requiresArg option, for options that require values (@chrisn) -- [eb16369](https://github.com/bcoe/yargs/commit/eb163692262be1fe80b992fd8803d5923c5a9b18) Added .strict() method, to report error if unknown arguments are given (@chrisn) -- [0471c3f](https://github.com/bcoe/yargs/commit/0471c3fd999e1ad4e6cded88b8aa02013b66d14f) Changed optimist to yargs in usage-options.js example (@chrisn) -- [5c88f74](https://github.com/bcoe/yargs/commit/5c88f74e3cf031b17c54b4b6606c83e485ff520e) Change optimist to yargs in examples (@chrisn) -- [66f12c8](https://github.com/bcoe/yargs/commit/66f12c82ba3c943e4de8ca862980e835da8ecb3a) Fix a couple of bad interactions between aliases and defaults (@nylen) -- [8fa1d80](https://github.com/bcoe/yargs/commit/8fa1d80f14b03eb1f2898863a61f1d1615bceb50) Document second argument of usage(message, opts) (@Gobie) -- [56e6528](https://github.com/bcoe/yargs/commit/56e6528cf674ff70d63083fb044ff240f608448e) For "--some-option", also set argv.someOption (@nylen) -- [ed5f6d3](https://github.com/bcoe/yargs/commit/ed5f6d33f57ad1086b11c91b51100f7c6c7fa8ee) Finished porting unit tests to Mocha. (@chevex) - -### v1.0.15 (2014/02/05 23:18 +00:00) -- [e2b1fc0](https://github.com/bcoe/yargs/commit/e2b1fc0c4a59cf532ae9b01b275e1ef57eeb64d2) 1.0.15 update to badges (@chevex) - -### v1.0.14 (2014/02/05 23:17 +00:00) -- [f33bbb0](https://github.com/bcoe/yargs/commit/f33bbb0f00fe18960f849cc8e15a7428a4cd59b8) Revert "Fixed issue which caused .demand function not to work correctly." (@chevex) - -### v1.0.13 (2014/02/05 22:13 +00:00) -- [6509e5e](https://github.com/bcoe/yargs/commit/6509e5e7dee6ef1a1f60eea104be0faa1a045075) Fixed issue which caused .demand function not to work correctly. (@chevex) - -### v1.0.12 (2013/12/13 00:09 +00:00) -- [05eb267](https://github.com/bcoe/yargs/commit/05eb26741c9ce446b33ff006e5d33221f53eaceb) 1.0.12 (@chevex) - -### v1.0.11 (2013/12/13 00:07 +00:00) -- [c1bde46](https://github.com/bcoe/yargs/commit/c1bde46e37318a68b87d17a50c130c861d6ce4a9) 1.0.11 (@chevex) - -### v1.0.10 (2013/12/12 23:57 +00:00) -- [dfebf81](https://github.com/bcoe/yargs/commit/dfebf8164c25c650701528ee581ca483a99dc21c) Fixed formatting in README (@chevex) - -### v1.0.9 (2013/12/12 23:47 +00:00) -- [0b4e34a](https://github.com/bcoe/yargs/commit/0b4e34af5e6d84a9dbb3bb6d02cd87588031c182) Update README.md (@chevex) - -### v1.0.8 (2013/12/06 16:36 +00:00) -- [#1](https://github.com/bcoe/yargs/pull/1) fix error caused by check() see #1 (@martinheidegger) - -### v1.0.7 (2013/11/24 18:01 +00:00) -- [a247d88](https://github.com/bcoe/yargs/commit/a247d88d6e46644cbb7303c18b1bb678fc132d72) Modified Pirate Joe image. (@chevex) - -### v1.0.6 (2013/11/23 19:21 +00:00) -- [d7f69e1](https://github.com/bcoe/yargs/commit/d7f69e1d34bc929736a8bdccdc724583e21b7eab) Updated Pirate Joe image. (@chevex) - -### v1.0.5 (2013/11/23 19:09 +00:00) -- [ece809c](https://github.com/bcoe/yargs/commit/ece809cf317cc659175e1d66d87f3ca68c2760be) Updated readme notice again. (@chevex) - -### v1.0.4 (2013/11/23 19:05 +00:00) -- [9e81e81](https://github.com/bcoe/yargs/commit/9e81e81654028f83ba86ffc3ac772a0476084e5e) Updated README with a notice about yargs being a fork of optimist and what that implies. (@chevex) - -### v1.0.3 (2013/11/23 17:43 +00:00) -- [65e7a78](https://github.com/bcoe/yargs/commit/65e7a782c86764944d63d084416aba9ee6019c5f) Changed some small wording in README.md. (@chevex) -- [459e20e](https://github.com/bcoe/yargs/commit/459e20e539b366b85128dd281ccd42221e96c7da) Fix a bug in the options function, when string and boolean options weren't applied to aliases. (@shockone) - -### v1.0.2 (2013/11/23 09:46 +00:00) -- [3d80ebe](https://github.com/bcoe/yargs/commit/3d80ebed866d3799224b6f7d596247186a3898a9) 1.0.2 (@chevex) - -### v1.0.1 (2013/11/23 09:39 +00:00) -- [f80ff36](https://github.com/bcoe/yargs/commit/f80ff3642d580d4b68bf9f5a94277481bd027142) Updated image. (@chevex) - -### v1.0.0 (2013/11/23 09:33 +00:00) -- [54e31d5](https://github.com/bcoe/yargs/commit/54e31d505f820b80af13644e460894b320bf25a3) Rebranded from optimist to yargs in the spirit of the fork :D (@chevex) -- [4ebb6c5](https://github.com/bcoe/yargs/commit/4ebb6c59f44787db7c24c5b8fe2680f01a23f498) Added documentation for demandCount(). (@chevex) -- [4561ce6](https://github.com/bcoe/yargs/commit/4561ce66dcffa95f49e8b4449b25b94cd68acb25) Simplified the error messages returned by .check(). (@chevex) -- [661c678](https://github.com/bcoe/yargs/commit/661c67886f479b16254a830b7e1db3be29e6b7a6) Fixed an issue with demand not accepting a zero value. (@chevex) -- [731dd3c](https://github.com/bcoe/yargs/commit/731dd3c37624790490bd6df4d5f1da8f4348279e) Add .fail(fn) so death isn't the only option. Should fix issue #39. (@chevex) -- [fa15417](https://github.com/bcoe/yargs/commit/fa15417ff9e70dace0d726627a5818654824c1d8) Added a few missing 'return self' (@chevex) -- [e655e4d](https://github.com/bcoe/yargs/commit/e655e4d99d1ae1d3695ef755d51c2de08d669761) Fix showing help in certain JS environments. (@chevex) -- [a746a31](https://github.com/bcoe/yargs/commit/a746a31cd47c87327028e6ea33762d6187ec5c87) Better string representation of default values. (@chevex) -- [6134619](https://github.com/bcoe/yargs/commit/6134619a7e90b911d5443230b644c5d447c1a68c) Implies: conditional demands (@chevex) -- [046b93b](https://github.com/bcoe/yargs/commit/046b93b5d40a27367af4cb29726e4d781d934639) Added support for JSON config files. (@chevex) -- [a677ec0](https://github.com/bcoe/yargs/commit/a677ec0a0ecccd99c75e571d03323f950688da03) Add .example(cmd, desc) feature. (@chevex) -- [1bd4375](https://github.com/bcoe/yargs/commit/1bd4375e11327ba1687d4bb6e5e9f3c30c1be2af) Added 'defaults' as alias to 'default' so as to avoid usage of a reserved keyword. (@chevex) -- [6b753c1](https://github.com/bcoe/yargs/commit/6b753c16ca09e723060e70b773b430323b29c45c) add .normalize(args..) support for normalizing paths (@chevex) -- [33d7d59](https://github.com/bcoe/yargs/commit/33d7d59341d364f03d3a25f0a55cb99004dbbe4b) Customize error messages with demand(key, msg) (@chevex) -- [647d37f](https://github.com/bcoe/yargs/commit/647d37f164c20f4bafbf67dd9db6cd6e2cd3b49f) Merge branch 'rewrite-duplicate-test' of github.com:isbadawi/node-optimist (@chevex) -- [9059d1a](https://github.com/bcoe/yargs/commit/9059d1ad5e8aea686c2a01c89a23efdf929fff2e) Pass aliases object to check functions for greater versatility. (@chevex) -- [623dc26](https://github.com/bcoe/yargs/commit/623dc26c7331abff2465ef8532e3418996d42fe6) Added ability to count boolean options and rolled minimist library back into project. (@chevex) -- [49f0dce](https://github.com/bcoe/yargs/commit/49f0dcef35de4db544c3966350d36eb5838703f6) Fixed small typo. (@chevex) -- [79ec980](https://github.com/bcoe/yargs/commit/79ec9806d9ca6eb0014cfa4b6d1849f4f004baf2) Removed dependency on wordwrap module. (@chevex) -- [ea14630](https://github.com/bcoe/yargs/commit/ea14630feddd69d1de99dd8c0e08948f4c91f00a) Merge branch 'master' of github.com:chbrown/node-optimist (@chevex) -- [2b75da2](https://github.com/bcoe/yargs/commit/2b75da2624061e0f4f3107d20303c06ec9054906) Merge branch 'master' of github.com:seanzhou1023/node-optimist (@chevex) -- [d9bda11](https://github.com/bcoe/yargs/commit/d9bda1116e26f3b40e833ca9ca19263afea53565) Merge branch 'patch-1' of github.com:thefourtheye/node-optimist (@chevex) -- [d6cc606](https://github.com/bcoe/yargs/commit/d6cc6064a4f1bea38a16a4430b8a1334832fbeff) Renamed README. (@chevex) -- [9498d3f](https://github.com/bcoe/yargs/commit/9498d3f59acfb5e102826503e681623c3a64b178) Renamed readme and added .gitignore. (@chevex) -- [bbd1fe3](https://github.com/bcoe/yargs/commit/bbd1fe37fefa366dde0fb3dc44d91fe8b28f57f5) Included examples for ```help``` and ```showHelp``` functions and fixed few formatting issues (@thefourtheye) -- [37fea04](https://github.com/bcoe/yargs/commit/37fea0470a5796a0294c1dcfff68d8041650e622) .alias({}) behaves differently based on mapping direction when generating descriptions (@chbrown) -- [855b20d](https://github.com/bcoe/yargs/commit/855b20d0be567ca121d06b30bea64001b74f3d6d) Documented function signatures are useful for dynamically typed languages. (@chbrown) - -### 0.6.0 (2013/06/25 08:48 +00:00) -- [d37bfe0](https://github.com/bcoe/yargs/commit/d37bfe05ae6d295a0ab481efe4881222412791f4) all tests passing using minimist (@substack) -- [76f1352](https://github.com/bcoe/yargs/commit/76f135270399d01f2bbc621e524a5966e5c422fd) all parse tests now passing (@substack) -- [a7b6754](https://github.com/bcoe/yargs/commit/a7b6754276c38d1565479a5685c3781aeb947816) using minimist, some tests passing (@substack) -- [6655688](https://github.com/bcoe/yargs/commit/66556882aa731cbbbe16cc4d42c85740a2e98099) Give credit where its due (@DeadAlready) -- [602a2a9](https://github.com/bcoe/yargs/commit/602a2a92a459f93704794ad51b115bbb08b535ce) v0.5.3 - Remove wordwrap as dependency (@DeadAlready) - -### 0.5.2 (2013/05/31 03:46 +00:00) -- [4497ca5](https://github.com/bcoe/yargs/commit/4497ca55e332760a37b866ec119ded347ca27a87) fixed the whitespace bug without breaking anything else (@substack) -- [5a3dd1a](https://github.com/bcoe/yargs/commit/5a3dd1a4e0211a38613c6e02f61328e1031953fa) failing test for whitespace arg (@substack) - -### 0.5.1 (2013/05/30 07:17 +00:00) -- [a20228f](https://github.com/bcoe/yargs/commit/a20228f62a454755dd07f628a7c5759113918327) fix parse() to work with functions before it (@substack) -- [b13bd4c](https://github.com/bcoe/yargs/commit/b13bd4cac856a9821d42fa173bdb58f089365a7d) failing test for parse() with modifiers (@substack) - -### 0.5.0 (2013/05/18 21:59 +00:00) -- [c474a64](https://github.com/bcoe/yargs/commit/c474a649231527915c222156e3b40806d365a87c) fixes for dash (@substack) - -### 0.4.0 (2013/04/13 19:03 +00:00) -- [dafe3e1](https://github.com/bcoe/yargs/commit/dafe3e18d7c6e7c2d68e06559df0e5cbea3adb14) failing short test (@substack) - -### 0.3.7 (2013/04/04 04:07 +00:00) -- [6c7a0ec](https://github.com/bcoe/yargs/commit/6c7a0ec94ce4199a505f0518b4d6635d4e47cc81) Fix for windows. On windows there is no _ in environment. (@hdf) - -### 0.3.6 (2013/04/04 04:04 +00:00) -- [e72346a](https://github.com/bcoe/yargs/commit/e72346a727b7267af5aa008b418db89970873f05) Add support for newlines in -a="" arguments (@danielbeardsley) -- [71e1fb5](https://github.com/bcoe/yargs/commit/71e1fb55ea9987110a669ac6ec12338cfff3821c) drop 0.4, add 0.8 to travis (@substack) - -### 0.3.5 (2012/10/10 11:09 +00:00) -- [ee692b3](https://github.com/bcoe/yargs/commit/ee692b37554c70a0bb16389a50a26b66745cbbea) Fix parsing booleans (@vojtajina) -- [5045122](https://github.com/bcoe/yargs/commit/5045122664c3f5b4805addf1be2148d5856f7ce8) set $0 properly in the tests (@substack) - -### 0.3.4 (2012/04/30 06:54 +00:00) -- [f28c0e6](https://github.com/bcoe/yargs/commit/f28c0e62ca94f6e0bb2e6d82fc3d91a55e69b903) bump for string "true" params (@substack) -- [8f44aeb](https://github.com/bcoe/yargs/commit/8f44aeb74121ddd689580e2bf74ef86a605e9bf2) Fix failing test for aliased booleans. (@coderarity) -- [b9f7b61](https://github.com/bcoe/yargs/commit/b9f7b613b1e68e11e6c23fbda9e555a517dcc976) Add failing test for short aliased booleans. (@coderarity) - -### 0.3.3 (2012/04/30 06:45 +00:00) -- [541bac8](https://github.com/bcoe/yargs/commit/541bac8dd787a5f1a5d28f6d8deb1627871705e7) Fixes #37. - -### 0.3.2 (2012/04/12 20:28 +00:00) -- [3a0f014](https://github.com/bcoe/yargs/commit/3a0f014c1451280ac1c9caa1f639d31675586eec) travis badge (@substack) -- [4fb60bf](https://github.com/bcoe/yargs/commit/4fb60bf17845f4ce3293f8ca49c9a1a7c736cfce) Fix boolean aliases. (@coderarity) -- [f14dda5](https://github.com/bcoe/yargs/commit/f14dda546efc4fe06ace04d36919bfbb7634f79b) Adjusted package.json to use tap (@jfhbrook) -- [88e5d32](https://github.com/bcoe/yargs/commit/88e5d32295be6e544c8d355ff84e355af38a1c74) test/usage.js no longer hangs (@jfhbrook) -- [e1e740c](https://github.com/bcoe/yargs/commit/e1e740c27082f3ce84deca2093d9db2ef735d0e5) two tests for combined boolean/alias opts parsing (@jfhbrook) - -### 0.3.1 (2011/12/31 08:44 +00:00) -- [d09b719](https://github.com/bcoe/yargs/commit/d09b71980ef711b6cf3918cd19beec8257e40e82) If "default" is set to false it was not passed on, fixed. (@wolframkriesing) - -### 0.3.0 (2011/12/09 06:03 +00:00) -- [6e74aa7](https://github.com/bcoe/yargs/commit/6e74aa7b46a65773e20c0cb68d2d336d4a0d553d) bump and documented dot notation (@substack) - -### 0.2.7 (2011/10/20 02:25 +00:00) -- [94adee2](https://github.com/bcoe/yargs/commit/94adee20e17b58d0836f80e8b9cdbe9813800916) argv._ can be told 'Hey! argv._! Don't be messing with my args.', and it WILL obey (@colinta) -- [c46fdd5](https://github.com/bcoe/yargs/commit/c46fdd56a05410ae4a1e724a4820c82e77ff5469) optimistic critter image (@substack) -- [5c95c73](https://github.com/bcoe/yargs/commit/5c95c73aedf4c7482bd423e10c545e86d7c8a125) alias options() to option() (@substack) -- [f7692ea](https://github.com/bcoe/yargs/commit/f7692ea8da342850af819367833abb685fde41d8) [fix] Fix for parsing boolean edge case (@indexzero) -- [d1f92d1](https://github.com/bcoe/yargs/commit/d1f92d1425bd7f356055e78621b30cdf9741a3c2) -- [b01bda8](https://github.com/bcoe/yargs/commit/b01bda8d86e455bbf74ce497864cb8ab5b9fb847) [fix test] Update to ensure optimist is aware of default booleans. Associated tests included (@indexzero) -- [aa753e7](https://github.com/bcoe/yargs/commit/aa753e7c54fb3a12f513769a0ff6d54aa0f63943) [dist test] Update devDependencies in package.json. Update test pathing to be more npm and require.paths future-proof (@indexzero) -- [7bfce2f](https://github.com/bcoe/yargs/commit/7bfce2f3b3c98e6539e7549d35fbabced7e9341e) s/sys/util/ (@substack) -- [d420a7a](https://github.com/bcoe/yargs/commit/d420a7a9c890d2cdb11acfaf3ea3f43bc3e39f41) update usage output (@substack) -- [cf86eed](https://github.com/bcoe/yargs/commit/cf86eede2e5fc7495b6ec15e6d137d9ac814f075) some sage readme protips about parsing rules (@substack) -- [5da9f7a](https://github.com/bcoe/yargs/commit/5da9f7a5c0e1758ec7c5801fb3e94d3f6e970513) documented all the methods finally (@substack) -- [8ca6879](https://github.com/bcoe/yargs/commit/8ca6879311224b25933642987300f6a29de5c21b) fenced syntax highlighting (@substack) -- [b72bacf](https://github.com/bcoe/yargs/commit/b72bacf1d02594778c1935405bc8137eb61761dc) right-alignment of wrapped extra params (@substack) -- [2b980bf](https://github.com/bcoe/yargs/commit/2b980bf2656b4ee8fc5134dc5f56a48855c35198) now with .wrap() (@substack) -- [d614f63](https://github.com/bcoe/yargs/commit/d614f639654057d1b7e35e3f5a306e88ec2ad1e4) don't show 'Options:' when there aren't any (@substack) -- [691eda3](https://github.com/bcoe/yargs/commit/691eda354df97b5a86168317abcbcaabdc08a0fb) failing test for multi-aliasing (@substack) -- [0826c9f](https://github.com/bcoe/yargs/commit/0826c9f462109feab2bc7a99346d22e72bf774b7) "Options:" > "options:" (@substack) -- [72f7490](https://github.com/bcoe/yargs/commit/72f749025d01b7f295738ed370a669d885fbada0) [minor] Update formatting for `.showHelp()` (@indexzero) -- [75aecce](https://github.com/bcoe/yargs/commit/75aeccea74329094072f95800e02c275e7d999aa) options works again, too lazy to write a proper test right now (@substack) -- [f742e54](https://github.com/bcoe/yargs/commit/f742e5439817c662dc3bd8734ddd6467e6018cfd) line_count_options example, which breaks (@substack) -- [4ca06b8](https://github.com/bcoe/yargs/commit/4ca06b8b4ea99b5d5714b315a2a8576bee6e5537) line count example (@substack) -- [eeb8423](https://github.com/bcoe/yargs/commit/eeb8423e0a5ecc9dc3eb1e6df9f3f8c1c88f920b) remove self.argv setting in boolean (@substack) -- [6903412](https://github.com/bcoe/yargs/commit/69034126804660af9cc20ea7f4457b50338ee3d7) removed camel case for now (@substack) -- [5a0d88b](https://github.com/bcoe/yargs/commit/5a0d88bf23e9fa79635dd034e2a1aa992acc83cd) remove dead longest checking code (@substack) -- [d782170](https://github.com/bcoe/yargs/commit/d782170babf7284b1aa34f5350df0dd49c373fa8) .help() too (@substack) -- [622ec17](https://github.com/bcoe/yargs/commit/622ec17379bb5374fdbb190404c82bc600975791) rm old help generator (@substack) -- [7c8baac](https://github.com/bcoe/yargs/commit/7c8baac4d66195e9f5158503ea9ebfb61153dab7) nub keys (@substack) -- [8197785](https://github.com/bcoe/yargs/commit/8197785ad4762465084485b041abd722f69bf344) generate help message based on the previous calls, todo: nub (@substack) -- [3ffbdc3](https://github.com/bcoe/yargs/commit/3ffbdc33c8f5e83d4ea2ac60575ce119570c7ede) stub out new showHelp, better checks (@substack) -- [d4e21f5](https://github.com/bcoe/yargs/commit/d4e21f56a4830f7de841900d3c79756fb9886184) let .options() take single options too (@substack) -- [3c4cf29](https://github.com/bcoe/yargs/commit/3c4cf2901a29bac119cca8e983028d8669230ec6) .options() is now heaps simpler (@substack) -- [89f0d04](https://github.com/bcoe/yargs/commit/89f0d043cbccd302f10ab30c2069e05d2bf817c9) defaults work again, all tests pass (@substack) -- [dd87333](https://github.com/bcoe/yargs/commit/dd8733365423006a6e4156372ebb55f98323af58) update test error messages, down to 2 failing tests (@substack) -- [53f7bc6](https://github.com/bcoe/yargs/commit/53f7bc626b9875f2abdfc5dd7a80bde7f14143a3) fix for bools doubling up, passes the parse test again, others fail (@substack) -- [2213e2d](https://github.com/bcoe/yargs/commit/2213e2ddc7263226fba717fb041dc3fde9bc2ee4) refactored for an argv getter, failing several tests (@substack) -- [d1e7379](https://github.com/bcoe/yargs/commit/d1e737970f15c6c006bebdd8917706827ff2f0f2) just rescan for now, alias test passes (@substack) -- [b2f8c99](https://github.com/bcoe/yargs/commit/b2f8c99cc477a8eb0fdf4cf178e1785b63185cfd) failing alias test (@substack) -- [d0c0174](https://github.com/bcoe/yargs/commit/d0c0174daa144bfb6dc7290fdc448c393c475e15) .alias() (@substack) -- [d85f431](https://github.com/bcoe/yargs/commit/d85f431ad7d07b058af3f2a57daa51495576c164) [api] Remove `.describe()` in favor of building upon the existing `.usage()` API (@indexzero) -- [edbd527](https://github.com/bcoe/yargs/commit/edbd5272a8e213e71acd802782135c7f9699913a) [doc api] Add `.describe()`, `.options()`, and `.showHelp()` methods along with example. (@indexzero) -- [be4902f](https://github.com/bcoe/yargs/commit/be4902ff0961ae8feb9093f2c0a4066463ded2cf) updates for coffee since it now does argv the node way (@substack) -- [e24cb23](https://github.com/bcoe/yargs/commit/e24cb23798ee64e53b60815e7fda78b87f42390c) more general coffeescript detection (@substack) -- [78ac753](https://github.com/bcoe/yargs/commit/78ac753e5d0ec32a96d39d893272afe989e42a4d) Don't trigger the CoffeeScript hack when running under node_g. (@papandreou) -- [bcfe973](https://github.com/bcoe/yargs/commit/bcfe9731d7f90d4632281b8a52e8d76eb0195ae6) .string() but failing test (@substack) -- [1987aca](https://github.com/bcoe/yargs/commit/1987aca28c7ba4e8796c07bbc547cb984804c826) test hex strings (@substack) -- [ef36db3](https://github.com/bcoe/yargs/commit/ef36db32259b0b0d62448dc907c760e5554fb7e7) more keywords (@substack) -- [cc53c56](https://github.com/bcoe/yargs/commit/cc53c56329960bed6ab077a79798e991711ba01d) Added camelCase function that converts --multi-word-option to camel case (so it becomes argv.multiWordOption). (@papandreou) -- [60b57da](https://github.com/bcoe/yargs/commit/60b57da36797716e5783a633c6d5c79099016d45) fixed boolean bug by rescanning (@substack) -- [dff6d07](https://github.com/bcoe/yargs/commit/dff6d078d97f8ac503c7d18dcc7b7a8c364c2883) boolean examples (@substack) -- [0e380b9](https://github.com/bcoe/yargs/commit/0e380b92c4ef4e3c8dac1da18b5c31d85b1d02c9) boolean() with passing test (@substack) -- [62644d4](https://github.com/bcoe/yargs/commit/62644d4bffbb8d1bbf0c2baf58a1d14a6359ef07) coffee compatibility with node regex for versions too (@substack) -- [430fafc](https://github.com/bcoe/yargs/commit/430fafcf1683d23774772826581acff84b456827) argv._ fixed by fixing the coffee detection (@substack) -- [343b8af](https://github.com/bcoe/yargs/commit/343b8afefd98af274ebe21b5a16b3a949ec5429f) whichNodeArgs test fails too (@substack) -- [63df2f3](https://github.com/bcoe/yargs/commit/63df2f371f31e63d7f1dec2cbf0022a5f08da9d2) replicated mnot's bug in whichNodeEmpty test (@substack) -- [35473a4](https://github.com/bcoe/yargs/commit/35473a4d93a45e5e7e512af8bb54ebb532997ae1) test for ./bin usage (@substack) -- [13df151](https://github.com/bcoe/yargs/commit/13df151e44228eed10e5441c7cd163e086c458a4) don't coerce booleans to numbers (@substack) -- [85f8007](https://github.com/bcoe/yargs/commit/85f8007e93b8be7124feea64b1f1916d8ba1894a) package bump for automatic number conversion (@substack) -- [8f17014](https://github.com/bcoe/yargs/commit/8f170141cded4ccc0c6d67a849c5bf996aa29643) updated readme and examples with new auto-numberification goodness (@substack) -- [73dc901](https://github.com/bcoe/yargs/commit/73dc9011ac968e39b55e19e916084a839391b506) auto number conversion works yay (@substack) -- [bcec56b](https://github.com/bcoe/yargs/commit/bcec56b3d031e018064cbb691539ccc4f28c14ad) failing test for not-implemented auto numification (@substack) -- [ebd2844](https://github.com/bcoe/yargs/commit/ebd2844d683feeac583df79af0e5124a7a7db04e) odd that eql doesn't check types careflly (@substack) -- [fd854b0](https://github.com/bcoe/yargs/commit/fd854b02e512ce854b76386d395672a7969c1bc4) package author + keywords (@substack) -- [656a1d5](https://github.com/bcoe/yargs/commit/656a1d5a1b7c0e49d72e80cb13f20671d56f76c6) updated readme with .default() stuff (@substack) -- [cd7f8c5](https://github.com/bcoe/yargs/commit/cd7f8c55f0b82b79b690d14c5f806851236998a1) passing tests for new .default() behavior (@substack) -- [932725e](https://github.com/bcoe/yargs/commit/932725e39ce65bc91a0385a5fab659a5fa976ac2) new default() thing for setting default key/values (@substack) -- [4e6c7ab](https://github.com/bcoe/yargs/commit/4e6c7aba6374ac9ebc6259ecf91f13af7bce40e3) test for coffee usage (@substack) -- [d54ffcc](https://github.com/bcoe/yargs/commit/d54ffccf2a5a905f51ed5108f7c647f35d64ae23) new --key value style with passing tests. NOTE: changes existing behavior (@substack) -- [ed2a2d5](https://github.com/bcoe/yargs/commit/ed2a2d5d828100ebeef6385c0fb88d146a5cfe9b) package bump for summatix's coffee script fix (@substack) -- [75a975e](https://github.com/bcoe/yargs/commit/75a975eed8430d28e2a79dc9e6d819ad545f4587) Added support for CoffeeScript (@summatix) -- [56b2b1d](https://github.com/bcoe/yargs/commit/56b2b1de8d11f8a2b91979d8ae2d6db02d8fe64d) test coverage for the falsy check() usage (@substack) -- [a4843a9](https://github.com/bcoe/yargs/commit/a4843a9f0e69ffb4afdf6a671d89eb6f218be35d) check bug fixed plus a handy string (@substack) -- [857bd2d](https://github.com/bcoe/yargs/commit/857bd2db933a5aaa9cfecba0ced2dc9b415f8111) tests for demandCount, back up to 100% coverage (@substack) -- [073b776](https://github.com/bcoe/yargs/commit/073b7768ebd781668ef05c13f9003aceca2f5c35) call demandCount from demand (@substack) -- [4bd4b7a](https://github.com/bcoe/yargs/commit/4bd4b7a085c8b6ce1d885a0f486cc9865cee2db1) add demandCount to check for the number of arguments in the _ list (@marshall) -- [b8689ac](https://github.com/bcoe/yargs/commit/b8689ac68dacf248119d242bba39a41cb0adfa07) Rebase checks. That will be its own module eventually. (@substack) -- [e688370](https://github.com/bcoe/yargs/commit/e688370b576f0aa733c3f46183df69e1b561668e) a $0 like in perl (@substack) -- [2e5e196](https://github.com/bcoe/yargs/commit/2e5e1960fc19afb21fb3293752316eaa8bcd3609) usage test hacking around process and console (@substack) -- [fcc3521](https://github.com/bcoe/yargs/commit/fcc352163fbec6a1dfe8caf47a0df39de24fe016) description pun (@substack) -- [87a1fe2](https://github.com/bcoe/yargs/commit/87a1fe29037ca2ca5fefda85141aaeb13e8ce761) mit/x11 license (@substack) -- [8d089d2](https://github.com/bcoe/yargs/commit/8d089d24cd687c0bde3640a96c09b78f884900dd) bool example is more consistent and also shows off short option grouping (@substack) -- [448d747](https://github.com/bcoe/yargs/commit/448d7473ac68e8e03d8befc9457b0d9e21725be0) start of the readme and examples (@substack) -- [da74dea](https://github.com/bcoe/yargs/commit/da74dea799a9b59dbf022cbb8001bfdb0d52eec9) more tests for long and short captures (@substack) -- [ab6387e](https://github.com/bcoe/yargs/commit/ab6387e6769ca4af82ca94c4c67c7319f0d9fcfa) silly bug in the tests with s/not/no/, all tests pass now (@substack) -- [102496a](https://github.com/bcoe/yargs/commit/102496a319e8e06f6550d828fc2f72992c7d9ecc) hack an instance for process.argv onto Argv so the export can be called to create an instance or used for argv, which is the most common case (@substack) -- [a01caeb](https://github.com/bcoe/yargs/commit/a01caeb532546d19f68f2b2b87f7036cfe1aaedd) divide example (@substack) -- [443da55](https://github.com/bcoe/yargs/commit/443da55736acbaf8ff8b04d1b9ce19ab016ddda2) start of the lib with a package.json (@substack) diff --git a/node_modules/solc/node_modules/yargs/LICENSE b/node_modules/solc/node_modules/yargs/LICENSE deleted file mode 100644 index 747ab11..0000000 --- a/node_modules/solc/node_modules/yargs/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) -Modified work Copyright 2014 Contributors (ben@npmjs.com) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/solc/node_modules/yargs/README.md b/node_modules/solc/node_modules/yargs/README.md deleted file mode 100644 index 34ccabd..0000000 --- a/node_modules/solc/node_modules/yargs/README.md +++ /dev/null @@ -1,1674 +0,0 @@ -yargs -======== - -Yargs be a node.js library fer hearties tryin' ter parse optstrings. - -With yargs, ye be havin' a map that leads straight to yer treasure! Treasure of course, being a simple option hash. - -[![Build Status][travis-image]][travis-url] -[![Dependency Status][gemnasium-image]][gemnasium-url] -[![Coverage Status][coveralls-image]][coveralls-url] -[![NPM version][npm-image]][npm-url] -[![Windows Tests][windows-image]][windows-url] -[![js-standard-style][standard-image]][standard-url] -[![standard-version][standard-version-image]][standard-version-url] - -> Yargs is the official successor to optimist. Please feel free to submit issues and pull requests. If you'd like to contribute and don't know where to start, have a look at [the issue list](https://github.com/yargs/yargs/issues) :) - -examples -======== - -With yargs, the options be just a hash! -------------------------------------------------------------------- - -plunder.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs').argv; - -if (argv.ships > 3 && argv.distance < 53.5) { - console.log('Plunder more riffiwobbles!'); -} else { - console.log('Retreat from the xupptumblers!'); -} -```` - -*** - - $ ./plunder.js --ships=4 --distance=22 - Plunder more riffiwobbles! - - $ ./plunder.js --ships 12 --distance 98.7 - Retreat from the xupptumblers! - -![Joe was one optimistic pirate.](http://i.imgur.com/4WFGVJ9.png) - -But don't walk the plank just yet! There be more! You can do short options: -------------------------------------------------- - -short.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs').argv; -console.log('(%d,%d)', argv.x, argv.y); -```` - -*** - - $ ./short.js -x 10 -y 21 - (10,21) - -And booleans, both long, short, and even grouped: ----------------------------------- - -bool.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs').argv; - -if (argv.s) { - process.stdout.write(argv.fr ? 'Le perroquet dit: ' : 'The parrot says: '); -} -console.log( - (argv.fr ? 'couac' : 'squawk') + (argv.p ? '!' : '') -); -```` - -*** - - $ ./bool.js -s - The parrot says: squawk - - $ ./bool.js -sp - The parrot says: squawk! - - $ ./bool.js -sp --fr - Le perroquet dit: couac! - -And non-hyphenated options too! Just use `argv._`! -------------------------------------------------- - -nonopt.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs').argv; -console.log('(%d,%d)', argv.x, argv.y); -console.log(argv._); -```` - -*** - - $ ./nonopt.js -x 6.82 -y 3.35 rum - (6.82,3.35) - [ 'rum' ] - - $ ./nonopt.js "me hearties" -x 0.54 yo -y 1.12 ho - (0.54,1.12) - [ 'me hearties', 'yo', 'ho' ] - -Yargs even counts your booleans! ----------------------------------------------------------------------- - -count.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .count('verbose') - .alias('v', 'verbose') - .argv; - -VERBOSE_LEVEL = argv.verbose; - -function WARN() { VERBOSE_LEVEL >= 0 && console.log.apply(console, arguments); } -function INFO() { VERBOSE_LEVEL >= 1 && console.log.apply(console, arguments); } -function DEBUG() { VERBOSE_LEVEL >= 2 && console.log.apply(console, arguments); } - -WARN("Showing only important stuff"); -INFO("Showing semi-important stuff too"); -DEBUG("Extra chatty mode"); -```` - -*** - $ node count.js - Showing only important stuff - - $ node count.js -v - Showing only important stuff - Showing semi-important stuff too - - $ node count.js -vv - Showing only important stuff - Showing semi-important stuff too - Extra chatty mode - - $ node count.js -v --verbose - Showing only important stuff - Showing semi-important stuff too - Extra chatty mode - -Tell users how to use yer options and make demands. -------------------------------------------------- - -area.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .usage('Usage: $0 -w [num] -h [num]') - .demand(['w','h']) - .argv; - -console.log("The area is:", argv.w * argv.h); -```` - -*** - - $ ./area.js -w 55 -h 11 - The area is: 605 - - $ node ./area.js -w 4.91 -w 2.51 - Usage: area.js -w [num] -h [num] - - Options: - -w [required] - -h [required] - - Missing required arguments: h - -After yer demands have been met, demand more! Ask for non-hyphenated arguments! ------------------------------------------ - -demand_count.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .demand(2) - .argv; -console.dir(argv); -```` - -*** - - $ ./demand_count.js a - - Not enough non-option arguments: got 1, need at least 2 - - $ ./demand_count.js a b - { _: [ 'a', 'b' ], '$0': 'demand_count.js' } - - $ ./demand_count.js a b c - { _: [ 'a', 'b', 'c' ], '$0': 'demand_count.js' } - -EVEN MORE SHIVER ME TIMBERS! ------------------- - -default_singles.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .default('x', 10) - .default('y', 10) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_singles.js -x 5 - 15 - -default_hash.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .default({ x : 10, y : 10 }) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_hash.js -y 7 - 17 - -And if you really want to get all descriptive about it... ---------------------------------------------------------- - -boolean_single.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .boolean('v') - .argv -; -console.dir(argv.v); -console.dir(argv._); -```` - -*** - - $ ./boolean_single.js -v "me hearties" yo ho - true - [ 'me hearties', 'yo', 'ho' ] - - -boolean_double.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .boolean(['x','y','z']) - .argv -; -console.dir([ argv.x, argv.y, argv.z ]); -console.dir(argv._); -```` - -*** - - $ ./boolean_double.js -x -z one two three - [ true, false, true ] - [ 'one', 'two', 'three' ] - -Yargs is here to help you... ---------------------------- - -Ye can describe parameters fer help messages and set aliases. Yargs figures -out how ter format a handy help string automatically. - -line_count.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .usage('Usage: $0 [options]') - .command('count', 'Count the lines in a file') - .demand(1) - .example('$0 count -f foo.js', 'count the lines in the given file') - .demand('f') - .alias('f', 'file') - .nargs('f', 1) - .describe('f', 'Load a file') - .help('h') - .alias('h', 'help') - .epilog('copyright 2015') - .argv; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines); -}); -```` - -*** - $ node line_count.js count - Usage: line_count.js [options] - - Commands: - count Count the lines in a file - - Options: - -f, --file Load a file [required] - -h, --help Show help [boolean] - - Examples: - line_count.js count -f foo.js count the lines in the given file - - copyright 2015 - - Missing required arguments: f - - $ node line_count.js count --file line_count.js - 26 - - $ node line_count.js count -f line_count.js - 26 - -methods -======= - -By itself, - -````javascript -require('yargs').argv -```` - -will use the `process.argv` array to construct the `argv` object. - -You can pass in the `process.argv` yourself: - -````javascript -require('yargs')([ '-x', '1', '-y', '2' ]).argv -```` - -or use `.parse()` to do the same thing: - -````javascript -require('yargs').parse([ '-x', '1', '-y', '2' ]) -```` - -The rest of these methods below come in just before the terminating `.argv`. - -.alias(key, alias) ------------------- - -Set key names as equivalent such that updates to a key will propagate to aliases -and vice-versa. - -Optionally `.alias()` can take an object that maps keys to aliases. -Each key of this object should be the canonical version of the option, and each -value should be a string or an array of strings. - -.argv ------ - -Get the arguments as a plain old object. - -Arguments without a corresponding flag show up in the `argv._` array. - -The script name or node command is available at `argv.$0` similarly to how `$0` -works in bash or perl. - -If `yargs` is executed in an environment that embeds node and there's no script name (e.g. -[Electron](http://electron.atom.io/) or [nw.js](http://nwjs.io/)), it will ignore the first parameter since it -expects it to be the script name. In order to override this behavior, use `.parse(process.argv.slice(1))` -instead of `.argv` and the first parameter won't be ignored. - -.array(key) ----------- - -Tell the parser to interpret `key` as an array. If `.array('foo')` is set, -`--foo foo bar` will be parsed as `['foo', 'bar']` rather than as `'foo'`. - -.boolean(key) -------------- - -Interpret `key` as a boolean. If a non-flag option follows `key` in -`process.argv`, that string won't get set as the value of `key`. - -`key` will default to `false`, unless a `default(key, undefined)` is -explicitly set. - -If `key` is an array, interpret all the elements as booleans. - -.check(fn) ----------- - -Check that certain conditions are met in the provided arguments. - -`fn` is called with two arguments, the parsed `argv` hash and an array of options and their aliases. - -If `fn` throws or returns a non-truthy value, show the thrown error, usage information, and -exit. - -.choices(key, choices) ----------------------- - -Limit valid values for `key` to a predefined set of `choices`, given as an array -or as an individual value. - -```js -var argv = require('yargs') - .alias('i', 'ingredient') - .describe('i', 'choose your sandwich ingredients') - .choices('i', ['peanut-butter', 'jelly', 'banana', 'pickles']) - .help('help') - .argv -``` - -If this method is called multiple times, all enumerated values will be merged -together. Choices are generally strings or numbers, and value matching is -case-sensitive. - -Optionally `.choices()` can take an object that maps multiple keys to their -choices. - -Choices can also be specified as `choices` in the object given to `option()`. - -```js -var argv = require('yargs') - .option('size', { - alias: 's', - describe: 'choose a size', - choices: ['xs', 's', 'm', 'l', 'xl'] - }) - .argv -``` - -.command(cmd, desc, [builder], [handler]) ------------------------------------------ -.command(cmd, desc, [module]) ------------------------------ -.command(module) ----------------- - -Document the commands exposed by your application. - -Use `desc` to provide a description for each command your application accepts (the -values stored in `argv._`). Set `desc` to `false` to create a hidden command. -Hidden commands don't show up in the help output and aren't available for -completion. - -Optionally, you can provide a `builder` object to give hints about the -options that your command accepts: - -```js -yargs.command('get', 'make a get HTTP request', { - url: { - alias: 'u', - default: 'http://yargs.js.org/' - } - }) - .help() - .argv -``` - -Note that commands will not automatically inherit configuration _or_ options -of their parent context. This means you'll have to re-apply configuration -if necessary, and make options global manually using the [global](#global) method. - -Additionally, the [`help`](#help) and [`version`](#version) -options (if used) **always** apply globally, just like the -[`.wrap()`](#wrap) configuration. - -`builder` can also be a function. This function is executed -with a `yargs` instance, and can be used to provide _advanced_ command specific help: - -```js -yargs.command('get', 'make a get HTTP request', function (yargs) { - return yargs.option('url', { - alias: 'u', - default: 'http://yargs.js.org/' - }) - }) - .help() - .argv -``` - -You can also provide a handler function, which will be executed with the -parsed `argv` object: - -```js -yargs - .command( - 'get', - 'make a get HTTP request', - function (yargs) { - return yargs.option('u', { - alias: 'url', - describe: 'the URL to make an HTTP request to' - }) - }, - function (argv) { - console.log(argv.url) - } - ) - .help() - .argv -``` - -### Positional Arguments - -Commands can accept _optional_ and _required_ positional arguments. Required -positional arguments take the form ``, and optional arguments -take the form `[bar]`. The parsed positional arguments will be populated in -`argv`: - -```js -yargs.command('get [proxy]', 'make a get HTTP request') - .help() - .argv -``` - -#### Variadic Positional Arguments - -The last positional argument can optionally accept an array of -values, by using the `..` operator: - -```js -yargs.command('download [files..]', 'download several files') - .help() - .argv -``` - -### Providing a Command Module - -For complicated commands you can pull the logic into a module. A module -simply needs to export: - -* `exports.command`: string that executes this command when given on the command line, may contain positional args -* `exports.describe`: string used as the description for the command in help text, use `false` for a hidden command -* `exports.builder`: object declaring the options the command accepts, or a function accepting and returning a yargs instance -* `exports.handler`: a function which will be passed the parsed argv. - -```js -// my-module.js -exports.command = 'get [proxy]' - -exports.describe = 'make a get HTTP request' - -exports.builder = { - banana: { - default: 'cool' - }, - batman: { - default: 'sad' - } -} - -exports.handler = function (argv) { - // do something with argv. -} -``` - -You then register the module like so: - -```js -yargs.command(require('my-module')) - .help() - .argv -``` - -Or if the module does not export `command` and `describe` (or if you just want to override them): - -```js -yargs.command('get [proxy]', 'make a get HTTP request', require('my-module')) - .help() - .argv -``` - -.commandDir(directory, [opts]) ------------------------------- - -Apply command modules from a directory relative to the module calling this method. - -This allows you to organize multiple commands into their own modules under a -single directory and apply all of them at once instead of calling -`.command(require('./dir/module'))` multiple times. - -By default, it ignores subdirectories. This is so you can use a directory -structure to represent your command hierarchy, where each command applies its -subcommands using this method in its builder function. See the example below. - -Note that yargs assumes all modules in the given directory are command modules -and will error if non-command modules are encountered. In this scenario, you -can either move your module to a different directory or use the `exclude` or -`visit` option to manually filter it out. More on that below. - -`directory` is a relative directory path as a string (required). - -`opts` is an options object (optional). The following options are valid: - -- `recurse`: boolean, default `false` - - Look for command modules in all subdirectories and apply them as a flattened - (non-hierarchical) list. - -- `extensions`: array of strings, default `['js']` - - The types of files to look for when requiring command modules. - -- `visit`: function - - A synchronous function called for each command module encountered. Accepts - `commandObject`, `pathToFile`, and `filename` as arguments. Returns - `commandObject` to include the command; any falsy value to exclude/skip it. - -- `include`: RegExp or function - - Whitelist certain modules. See [`require-directory` whitelisting](https://www.npmjs.com/package/require-directory#whitelisting) for details. - -- `exclude`: RegExp or function - - Blacklist certain modules. See [`require-directory` blacklisting](https://www.npmjs.com/package/require-directory#blacklisting) for details. - -### Example command hierarchy using `.commandDir()` - -Desired CLI: - -```sh -$ myapp --help -$ myapp init -$ myapp remote --help -$ myapp remote add base http://yargs.js.org -$ myapp remote prune base -$ myapp remote prune base fork whatever -``` - -Directory structure: - -``` -myapp/ -├─ cli.js -└─ cmds/ - ├─ init.js - ├─ remote.js - └─ remote_cmds/ - ├─ add.js - └─ prune.js -``` - -cli.js: - -```js -#!/usr/bin/env node -require('yargs') - .commandDir('cmds') - .demand(1) - .help() - .argv -``` - -cmds/init.js: - -```js -exports.command = 'init [dir]' -exports.desc = 'Create an empty repo' -exports.builder = { - dir: { - default: '.' - } -} -exports.handler = function (argv) { - console.log('init called for dir', argv.dir) -} -``` - -cmds/remote.js: - -```js -exports.command = 'remote ' -exports.desc = 'Manage set of tracked repos' -exports.builder = function (yargs) { - return yargs.commandDir('remote_cmds') -} -exports.handler = function (argv) {} -``` - -cmds/remote_cmds/add.js: - -```js -exports.command = 'add ' -exports.desc = 'Add remote named for repo at url ' -exports.builder = {} -exports.handler = function (argv) { - console.log('adding remote %s at url %s', argv.name, argv.url) -} -``` - -cmds/remote_cmds/prune.js: - -```js -exports.command = 'prune [names..]' -exports.desc = 'Delete tracked branches gone stale for remotes' -exports.builder = {} -exports.handler = function (argv) { - console.log('pruning remotes %s', [].concat(argv.name).concat(argv.names).join(', ')) -} -``` - -.completion([cmd], [description], [fn]) ---------------------------------------- - -Enable bash-completion shortcuts for commands and options. - -`cmd`: When present in `argv._`, will result in the `.bashrc` completion script -being outputted. To enable bash completions, concat the generated script to your -`.bashrc` or `.bash_profile`. - -`description`: Provide a description in your usage instructions for the command -that generates bash completion scripts. - -`fn`: Rather than relying on yargs' default completion functionality, which -shiver me timbers is pretty awesome, you can provide your own completion -method. - -If invoked without parameters, `.completion()` will make `completion` the command to output -the completion script. - -```js -var argv = require('yargs') - .completion('completion', function(current, argv) { - // 'current' is the current command being completed. - // 'argv' is the parsed arguments so far. - // simply return an array of completions. - return [ - 'foo', - 'bar' - ]; - }) - .argv; -``` - -You can also provide asynchronous completions. - -```js -var argv = require('yargs') - .completion('completion', function(current, argv, done) { - setTimeout(function() { - done([ - 'apple', - 'banana' - ]); - }, 500); - }) - .argv; -``` - -But wait, there's more! You can return an asynchronous promise. - -```js -var argv = require('yargs') - .completion('completion', function(current, argv, done) { - return new Promise(function (resolve, reject) { - setTimeout(function () { - resolve(['apple', 'banana']) - }, 10) - }) - }) - .argv; -``` - -.config([key], [description], [parseFn]) -------------------------------------------------------------- -.config(object) ---------------- - -Tells the parser that if the option specified by `key` is passed in, it -should be interpreted as a path to a JSON config file. The file is loaded -and parsed, and its properties are set as arguments. - -If invoked without parameters, `.config()` will make `--config` the option to pass the JSON config file. - -An optional `description` can be provided to customize the config (`key`) option -in the usage string. - -An optional `parseFn` can be used to provide a custom parser. The parsing -function must be synchronous, and should return an object containing -key value pairs or an error. - -```js -var argv = require('yargs') - .config('settings', function (configPath) { - return JSON.parse(fs.readFileSync(configPath, 'utf-8')) - }) - .argv -``` - -You can also pass an explicit configuration `object`, it will be parsed -and its properties will be set as arguments. - -```js -var argv = require('yargs') - .config({foo: 1, bar: 2}) - .argv -console.log(argv) -``` - -``` -$ node test.js -{ _: [], - foo: 1, - bar: 2, - '$0': 'test.js' } -``` - -.count(key) ------------- - -Interpret `key` as a boolean flag, but set its parsed value to the number of -flag occurrences rather than `true` or `false`. Default value is thus `0`. - -.default(key, value, [description]) ---------------------------------------------------------- -.defaults(key, value, [description]) ------------------------------------- - -**Note:** The `.defaults()` alias is deprecated. It will be -removed in the next major version. - -Set `argv[key]` to `value` if no option was specified in `process.argv`. - -Optionally `.default()` can take an object that maps keys to default values. - -But wait, there's more! The default value can be a `function` which returns -a value. The name of the function will be used in the usage string: - -```js -var argv = require('yargs') - .default('random', function randomValue() { - return Math.random() * 256; - }).argv; -``` - -Optionally, `description` can also be provided and will take precedence over -displaying the value in the usage instructions: - -```js -.default('timeout', 60000, '(one-minute)') -``` - -.demand(key, [msg | boolean]) ------------------------------- -.demand(count, [max], [msg]) ------------------------------- - -If `key` is a string, show the usage information and exit if `key` wasn't -specified in `process.argv`. - -If `key` is a number, demand at least as many non-option arguments, which show -up in `argv._`. A second number can also optionally be provided, which indicates -the maximum number of non-option arguments. - -If `key` is an array, demand each element. - -If a `msg` string is given, it will be printed when the argument is missing, -instead of the standard error message. This is especially helpful for the non-option arguments in `argv._`. - -If a `boolean` value is given, it controls whether the option is demanded; -this is useful when using `.options()` to specify command line parameters. - -A combination of `.demand(1)` and `.strict()` will allow you to require a user to pass at least one command: - -```js -var argv = require('yargs') - .command('install', 'tis a mighty fine package to install') - .demand(1) - .strict() - .argv -``` - -Similarly, you can require a command and arguments at the same time: - -```js -var argv = require('yargs') - .command('install', 'tis a mighty fine package to install') - .demand(1, ['w', 'm']) - .strict() - .argv -``` - -.describe(key, desc) --------------------- - -Describe a `key` for the generated usage information. - -Optionally `.describe()` can take an object that maps keys to descriptions. - -.detectLocale(boolean) ------------ - -Should yargs attempt to detect the os' locale? Defaults to `true`. - -.env([prefix]) --------------- - -Tell yargs to parse environment variables matching the given prefix and apply -them to argv as though they were command line arguments. - -Use the "__" separator in the environment variable to indicate nested options. -(e.g. prefix_nested__foo => nested.foo) - -If this method is called with no argument or with an empty string or with `true`, -then all env vars will be applied to argv. - -Program arguments are defined in this order of precedence: - -1. Command line args -2. Config file -3. Env var -4. Configured defaults - -```js -var argv = require('yargs') - .env('MY_PROGRAM') - .option('f', { - alias: 'fruit-thing', - default: 'apple' - }) - .argv -console.log(argv) -``` - -``` -$ node fruity.js -{ _: [], - f: 'apple', - 'fruit-thing': 'apple', - fruitThing: 'apple', - '$0': 'fruity.js' } -``` - -``` -$ MY_PROGRAM_FRUIT_THING=banana node fruity.js -{ _: [], - fruitThing: 'banana', - f: 'banana', - 'fruit-thing': 'banana', - '$0': 'fruity.js' } -``` - -``` -$ MY_PROGRAM_FRUIT_THING=banana node fruity.js -f cat -{ _: [], - f: 'cat', - 'fruit-thing': 'cat', - fruitThing: 'cat', - '$0': 'fruity.js' } -``` - -Env var parsing is disabled by default, but you can also explicitly disable it -by calling `.env(false)`, e.g. if you need to undo previous configuration. - -.epilog(str) ------------- -.epilogue(str) --------------- - -A message to print at the end of the usage instructions, e.g. - -```js -var argv = require('yargs') - .epilogue('for more information, find our manual at http://example.com'); -``` - -.example(cmd, desc) -------------------- - -Give some example invocations of your program. Inside `cmd`, the string -`$0` will get interpolated to the current script name or node command for the -present script similar to how `$0` works in bash or perl. -Examples will be printed out as part of the help message. - -.exitProcess(enable) ----------------------------------- - -By default, yargs exits the process when the user passes a help flag, uses the -`.version` functionality, or when validation fails. Calling -`.exitProcess(false)` disables this behavior, enabling further actions after -yargs have been validated. - -.fail(fn) ---------- - -Method to execute when a failure occurs, rather than printing the failure message. - -`fn` is called with the failure message that would have been printed and the -`Error` instance originally thrown, if any. - -```js -var argv = require('yargs') - .fail(function (msg, err) { - if (err) throw err // preserve stack - console.error('You broke it!') - console.error(msg) - process.exit(1) - }) - .argv -``` - -.getCompletion(args, done); ---------------------------- - -Allows to programmatically get completion choices for any line. - -`args`: An array of the words in the command line to complete. - -`done`: The callback to be called with the resulting completions. - -For example: - -```js -require('yargs') - .option('foobar', {}) - .option('foobaz', {}) - .completion() - .getCompletion(['./test.js', '--foo'], function (completions) { - console.log(completions) - }) -``` - -Outputs the same completion choices as `./test.js --foo`TAB: `--foobar` and `--foobaz` - -.global(globals) ------------- - -Indicate that an option (or group of options) should not be reset when a command -is executed, as an example: - -```js -var argv = require('yargs') - .option('a', { - alias: 'all', - default: true - }) - .option('n', { - alias: 'none', - default: true - }) - .command('foo', 'foo command', function (yargs) { - return yargs.option('b', { - alias: 'bar' - }) - }) - .help('help') - .global('a') - .argv -``` - -If the `foo` command is executed the `all` option will remain, but the `none` -option will have been eliminated. - -`help`, `version`, and `completion` options default to being global. - -.group(key(s), groupName) --------------------- - -Given a key, or an array of keys, places options under an alternative heading -when displaying usage instructions, e.g., - -```js -var yargs = require('yargs')(['--help']) - .help() - .group('batman', 'Heroes:') - .describe('batman', "world's greatest detective") - .wrap(null) - .argv -``` -*** - Heroes: - --batman world's greatest detective - - Options: - --help Show help [boolean] - -.help([option, [description]]) ------------------------------- - -Add an option (e.g. `--help`) that displays the usage string and exits the -process. If present, the `description` parameter customizes the description of -the help option in the usage string. - -If invoked without parameters, `.help()` will make `--help` the option to trigger -help output. - -Example: - -```js -var yargs = require("yargs")(['--help']) - .usage("$0 -operand1 number -operand2 number -operation [add|subtract]") - .help() - .argv -``` - -Later on, `argv` can be retrieved with `yargs.argv`. - -.implies(x, y) --------------- - -Given the key `x` is set, it is required that the key `y` is set. - -Optionally `.implies()` can accept an object specifying multiple implications. - -.locale() ---------- - -Return the locale that yargs is currently using. - -By default, yargs will auto-detect the operating system's locale so that -yargs-generated help content will display in the user's language. - -To override this behavior with a static locale, pass the desired locale as a -string to this method (see below). - -.locale(locale) ---------------- - -Override the auto-detected locale from the user's operating system with a static -locale. Note that the OS locale can be modified by setting/exporting the `LC_ALL` -environment variable. - -```js -var argv = require('yargs') - .usage('./$0 - follow ye instructions true') - .option('option', { - alias: 'o', - describe: "'tis a mighty fine option", - demand: true - }) - .command('run', "Arrr, ya best be knowin' what yer doin'") - .example('$0 run foo', "shiver me timbers, here's an example for ye") - .help('help') - .wrap(70) - .locale('pirate') - .argv -``` - -*** - -```shell -./test.js - follow ye instructions true - -Choose yer command: - run Arrr, ya best be knowin' what yer doin' - -Options for me hearties! - --option, -o 'tis a mighty fine option [requi-yar-ed] - --help Parlay this here code of conduct [boolean] - -Ex. marks the spot: - test.js run foo shiver me timbers, here's an example for ye - -Ye be havin' to set the followin' argument land lubber: option -``` - -Locales currently supported: - -* **de:** German. -* **en:** American English. -* **es:** Spanish. -* **fr:** French. -* **id:** Indonesian. -* **it:** Italian. -* **ja:** Japanese. -* **ko:** Korean. -* **nb:** Norwegian Bokmål. -* **pirate:** American Pirate. -* **pl:** Polish. -* **pt:** Portuguese. -* **pt_BR:** Brazilian Portuguese. -* **tr:** Turkish. -* **zh:** Chinese. - -To submit a new translation for yargs: - -1. use `./locales/en.json` as a starting point. -2. submit a pull request with the new locale file. - -*The [Microsoft Terminology Search](http://www.microsoft.com/Language/en-US/Search.aspx) can be useful for finding the correct terminology in your locale.* - -.nargs(key, count) ------------ - -The number of arguments that should be consumed after a key. This can be a -useful hint to prevent parsing ambiguity. For example: - -```js -var argv = require('yargs') - .nargs('token', 1) - .parse(['--token', '-my-token']); -``` - -parses as: - -`{ _: [], token: '-my-token', '$0': 'node test' }` - -Optionally `.nargs()` can take an object of `key`/`narg` pairs. - -.normalize(key) ---------------- - -The key provided represents a path and should have `path.normalize()` applied. - -.number(key) ------------- - -Tell the parser to always interpret `key` as a number. - -If `key` is an array, all elements will be parsed as numbers. - -If the option is given on the command line without a value, `argv` will be -populated with `undefined`. - -If the value given on the command line cannot be parsed as a number, `argv` will -be populated with `NaN`. - -Note that decimals, hexadecimals, and scientific notation are all accepted. - -```js -var argv = require('yargs') - .number('n') - .number(['width', 'height']) - .argv -``` - -.option(key, opt) ------------------ -.options(key, opt) ------------------- - -Instead of chaining together `.alias().demand().default().describe().string()`, you can specify -keys in `opt` for each of the chainable methods. - -For example: - -````javascript -var argv = require('yargs') - .option('f', { - alias: 'file', - demand: true, - default: '/etc/passwd', - describe: 'x marks the spot', - type: 'string' - }) - .argv -; -```` - -is the same as - -````javascript -var argv = require('yargs') - .alias('f', 'file') - .demand('f') - .default('f', '/etc/passwd') - .describe('f', 'x marks the spot') - .string('f') - .argv -; -```` - -Optionally `.options()` can take an object that maps keys to `opt` parameters. - -````javascript -var argv = require('yargs') - .options({ - 'f': { - alias: 'file', - demand: true, - default: '/etc/passwd', - describe: 'x marks the spot', - type: 'string' - } - }) - .argv -; -```` - -Valid `opt` keys include: - -- `alias`: string or array of strings, alias(es) for the canonical option key, see [`alias()`](#alias) -- `array`: boolean, interpret option as an array, see [`array()`](#array) -- `boolean`: boolean, interpret option as a boolean flag, see [`boolean()`](#boolean) -- `choices`: value or array of values, limit valid option arguments to a predefined set, see [`choices()`](#choices) -- `config`: boolean, interpret option as a path to a JSON config file, see [`config()`](#config) -- `configParser`: function, provide a custom config parsing function, see [`config()`](#config) -- `count`: boolean, interpret option as a count of boolean flags, see [`count()`](#count) -- `default`: value, set a default value for the option, see [`default()`](#default) -- `defaultDescription`: string, use this description for the default value in help content, see [`default()`](#default) -- `demand`/`require`/`required`: boolean or string, demand the option be given, with optional error message, see [`demand()`](#demand) -- `desc`/`describe`/`description`: string, the option description for help content, see [`describe()`](#describe) -- `global`: boolean, indicate that this key should not be [reset](#reset) when a command is invoked, see [`global()`](#global) -- `group`: string, when displaying usage instructions place the option under an alternative group heading, see [`group()`](#group) -- `nargs`: number, specify how many arguments should be consumed for the option, see [`nargs()`](#nargs) -- `normalize`: boolean, apply `path.normalize()` to the option, see [`normalize()`](#normalize) -- `number`: boolean, interpret option as a number, [`number()`](#number) -- `requiresArg`: boolean, require the option be specified with a value, see [`requiresArg()`](#requiresArg) -- `skipValidation`: boolean, skips validation if the option is present, see [`skipValidation()`](#skipValidation) -- `string`: boolean, interpret option as a string, see [`string()`](#string) -- `type`: one of the following strings - - `'array'`: synonymous for `array: true`, see [`array()`](#array) - - `'boolean'`: synonymous for `boolean: true`, see [`boolean()`](#boolean) - - `'count'`: synonymous for `count: true`, see [`count()`](#count) - - `'number'`: synonymous for `number: true`, see [`number()`](#number) - - `'string'`: synonymous for `string: true`, see [`string()`](#string) - -.parse(args) ------------- - -Parse `args` instead of `process.argv`. Returns the `argv` object. - -`args` may either be a pre-processed argv array, or a raw argument string. - -.pkgConf(key, [cwd]) ------------- - -Similar to [`config()`](#config), indicates that yargs should interpret the object from the specified key in package.json -as a configuration object. - -`cwd` can optionally be provided, the package.json will be read -from this location. - -.require(key, [msg | boolean]) ------------------------------- -.required(key, [msg | boolean]) ------------------------------- - -An alias for [`demand()`](#demand). See docs there. - -.requiresArg(key) ------------------ - -Specifies either a single option key (string), or an array of options that -must be followed by option values. If any option value is missing, show the -usage information and exit. - -The default behavior is to set the value of any key not followed by an -option value to `true`. - -.reset() --------- - -Reset the argument object built up so far. This is useful for -creating nested command line interfaces. Use [global](#global) -to specify keys that should not be reset. - -```js -var yargs = require('yargs') - .usage('$0 command') - .command('hello', 'hello command') - .command('world', 'world command') - .demand(1, 'must provide a valid command'), - argv = yargs.argv, - command = argv._[0]; - -if (command === 'hello') { - yargs.reset() - .usage('$0 hello') - .help('h') - .example('$0 hello', 'print the hello message!') - .argv - - console.log('hello!'); -} else if (command === 'world'){ - yargs.reset() - .usage('$0 world') - .help('h') - .example('$0 world', 'print the world message!') - .argv - - console.log('world!'); -} else { - yargs.showHelp(); -} -``` - -.showCompletionScript() ----------------------- - -Generate a bash completion script. Users of your application can install this -script in their `.bashrc`, and yargs will provide completion shortcuts for -commands and options. - -.showHelp(consoleLevel='error') ---------------------------- - -Print the usage data using the [`console`](https://nodejs.org/api/console.html) function `consoleLevel` for printing. - -Example: - -```js -var yargs = require("yargs") - .usage("$0 -operand1 number -operand2 number -operation [add|subtract]"); -yargs.showHelp(); //prints to stderr using console.error() -``` - -Or, to print the usage data to `stdout` instead, you can specify the use of `console.log`: - -```js -yargs.showHelp("log"); //prints to stdout using console.log() -``` - -Later on, `argv` can be retrieved with `yargs.argv`. - -.showHelpOnFail(enable, [message]) ----------------------------------- - -By default, yargs outputs a usage string if any error is detected. Use the -`.showHelpOnFail()` method to customize this behavior. If `enable` is `false`, -the usage string is not output. If the `message` parameter is present, this -message is output after the error message. - -line_count.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .usage('Count the lines in a file.\nUsage: $0 -f ') - .demand('f') - .alias('f', 'file') - .describe('f', 'Load a file') - .string('f') - .showHelpOnFail(false, 'Specify --help for available options') - .help('help') - .argv; - -// etc. -```` - -*** - -``` -$ node line_count.js -Missing argument value: f - -Specify --help for available options -``` - -.skipValidation(key) ------------------ - -Specifies either a single option key (string), or an array of options. -If any of the options is present, yargs validation is skipped. - -.strict() ---------- - -Any command-line argument given that is not demanded, or does not have a -corresponding description, will be reported as an error. - -.string(key) ------------- - -Tell the parser logic not to interpret `key` as a number or boolean. -This can be useful if you need to preserve leading zeros in an input. - -If `key` is an array, interpret all the elements as strings. - -`.string('_')` will result in non-hyphenated arguments being interpreted as strings, -regardless of whether they resemble numbers. - -.updateLocale(obj) ------------------- -.updateStrings(obj) ------------------- - -Override the default strings used by yargs with the key/value -pairs provided in `obj`: - -```js -var argv = require('yargs') - .command('run', 'the run command') - .help('help') - .updateStrings({ - 'Commands:': 'My Commands -->\n' - }) - .wrap(null) - .argv -``` - -*** - -```shell -My Commands --> - - run the run command - -Options: - --help Show help [boolean] -``` - -If you explicitly specify a `locale()`, you should do so *before* calling -`updateStrings()`. - -.usage(message, [opts]) ---------------------- - -Set a usage message to show which commands to use. Inside `message`, the string -`$0` will get interpolated to the current script name or node command for the -present script similar to how `$0` works in bash or perl. - -`opts` is optional and acts like calling `.options(opts)`. - -.version([option], [description], [version]) ----------------------------------------- - -Add an option (e.g. `--version`) that displays the version number (given by the -`version` parameter) and exits the process. - -If no arguments are passed to `version` (`.version()`), yargs will parse the `package.json` -of your module and use its `version` value. The default value of `option` is `--version`. - -You can provide a `function` for version, rather than a string. -This is useful if you want to use a version stored in a location other than package.json: - -```js -var argv = require('yargs') - .version(function() { - return require('../lib/version').version; - }) - .argv; -``` - -.wrap(columns) --------------- - -Format usage output to wrap at `columns` many columns. - -By default wrap will be set to `Math.min(80, windowWidth)`. Use `.wrap(null)` to -specify no column limit (no right-align). Use `.wrap(yargs.terminalWidth())` to -maximize the width of yargs' usage instructions. - -parsing tricks -============== - -stop parsing ------------- - -Use `--` to stop parsing flags and stuff the remainder into `argv._`. - - $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4 - { _: [ '-c', '3', '-d', '4' ], - a: 1, - b: 2, - '$0': 'examples/reflect.js' } - -negate fields -------------- - -If you want to explicitly set a field to false instead of just leaving it -undefined or to override a default you can do `--no-key`. - - $ node examples/reflect.js -a --no-b - { _: [], a: true, b: false, '$0': 'examples/reflect.js' } - -numbers -------- - -Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to -one. This way you can just `net.createConnection(argv.port)` and you can add -numbers out of `argv` with `+` without having that mean concatenation, -which is super frustrating. - -duplicates ----------- - -If you specify a flag multiple times it will get turned into an array containing -all the values in order. - - $ node examples/reflect.js -x 5 -x 8 -x 0 - { _: [], x: [ 5, 8, 0 ], '$0': 'examples/reflect.js' } - -dot notation ------------- - -When you use dots (`.`s) in argument names, an implicit object path is assumed. -This lets you organize arguments into nested objects. - - $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5 - { _: [], - foo: { bar: { baz: 33 }, quux: 5 }, - '$0': 'examples/reflect.js' } - -short numbers -------------- - -Short numeric `-n5` style arguments work too: - - $ node examples/reflect.js -n123 -m456 - { _: [], n: 123, m: 456, '$0': 'examples/reflect.js' } - -installation -============ - -With [npm](https://github.com/npm/npm), just do: - - npm install yargs - -or clone this project on github: - - git clone http://github.com/yargs/yargs.git - -To run the tests with npm, just do: - - npm test - -configuration -============= - -Using the `yargs` stanza in your `package.json` you can turn on and off -some of yargs' parsing features: - -```json -{ - "yargs": { - "short-option-groups": true, - "camel-case-expansion": true, - "dot-notation": true, - "parse-numbers": true, - "boolean-negation": true - } -} -``` - -See the [yargs-parser](https://github.com/yargs/yargs-parser#configuration) module -for detailed documentation of this feature. - -inspired by -=========== - -This module is loosely inspired by Perl's -[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm). - -[travis-url]: https://travis-ci.org/yargs/yargs -[travis-image]: https://img.shields.io/travis/yargs/yargs/master.svg -[gemnasium-url]: https://gemnasium.com/yargs/yargs -[gemnasium-image]: https://img.shields.io/gemnasium/yargs/yargs.svg -[coveralls-url]: https://coveralls.io/github/yargs/yargs -[coveralls-image]: https://img.shields.io/coveralls/yargs/yargs.svg -[npm-url]: https://www.npmjs.com/package/yargs -[npm-image]: https://img.shields.io/npm/v/yargs.svg -[windows-url]: https://ci.appveyor.com/project/bcoe/yargs-ljwvf -[windows-image]: https://img.shields.io/appveyor/ci/bcoe/yargs-ljwvf/master.svg?label=Windows%20Tests -[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg -[standard-url]: http://standardjs.com/ -[standard-version-image]: https://img.shields.io/badge/release-standard%20version-brightgreen.svg -[standard-version-url]: https://github.com/conventional-changelog/standard-version diff --git a/node_modules/solc/node_modules/yargs/completion.sh.hbs b/node_modules/solc/node_modules/yargs/completion.sh.hbs deleted file mode 100644 index 14445b8..0000000 --- a/node_modules/solc/node_modules/yargs/completion.sh.hbs +++ /dev/null @@ -1,28 +0,0 @@ -###-begin-{{app_name}}-completions-### -# -# yargs command completion script -# -# Installation: {{app_path}} completion >> ~/.bashrc -# or {{app_path}} completion >> ~/.bash_profile on OSX. -# -_yargs_completions() -{ - local cur_word args type_list - - cur_word="${COMP_WORDS[COMP_CWORD]}" - args=("${COMP_WORDS[@]}") - - # ask yargs to generate completions. - type_list=$({{app_path}} --get-yargs-completions "${args[@]}") - - COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) ) - - # if no match was found, fall back to filename completion - if [ ${#COMPREPLY[@]} -eq 0 ]; then - COMPREPLY=( $(compgen -f -- "${cur_word}" ) ) - fi - - return 0 -} -complete -F _yargs_completions {{app_name}} -###-end-{{app_name}}-completions-### diff --git a/node_modules/solc/node_modules/yargs/index.js b/node_modules/solc/node_modules/yargs/index.js deleted file mode 100644 index 37450cf..0000000 --- a/node_modules/solc/node_modules/yargs/index.js +++ /dev/null @@ -1,31 +0,0 @@ -// classic singleton yargs API, to use yargs -// without running as a singleton do: -// require('yargs/yargs')(process.argv.slice(2)) -const yargs = require('./yargs') - -Argv(process.argv.slice(2)) - -module.exports = Argv - -function Argv (processArgs, cwd) { - const argv = yargs(processArgs, cwd, require) - singletonify(argv) - return argv -} - -/* Hack an instance of Argv with process.argv into Argv - so people can do - require('yargs')(['--beeble=1','-z','zizzle']).argv - to parse a list of args and - require('yargs').argv - to get a parsed version of process.argv. -*/ -function singletonify (inst) { - Object.keys(inst).forEach(function (key) { - if (key === 'argv') { - Argv.__defineGetter__(key, inst.__lookupGetter__(key)) - } else { - Argv[key] = typeof inst[key] === 'function' ? inst[key].bind(inst) : inst[key] - } - }) -} diff --git a/node_modules/solc/node_modules/yargs/lib/command.js b/node_modules/solc/node_modules/yargs/lib/command.js deleted file mode 100644 index da3dff6..0000000 --- a/node_modules/solc/node_modules/yargs/lib/command.js +++ /dev/null @@ -1,196 +0,0 @@ -const path = require('path') -const inspect = require('util').inspect -const requireDirectory = require('require-directory') -const whichModule = require('which-module') - -// handles parsing positional arguments, -// and populating argv with said positional -// arguments. -module.exports = function (yargs, usage, validation) { - const self = {} - - var handlers = {} - self.addHandler = function (cmd, description, builder, handler) { - if (typeof cmd === 'object') { - const commandString = typeof cmd.command === 'string' ? cmd.command : moduleName(cmd) - self.addHandler(commandString, extractDesc(cmd), cmd.builder, cmd.handler) - return - } - - // allow a module to be provided instead of separate builder and handler - if (typeof builder === 'object' && builder.builder && typeof builder.handler === 'function') { - self.addHandler(cmd, description, builder.builder, builder.handler) - return - } - - if (description !== false) { - usage.command(cmd, description) - } - - // we should not register a handler if no - // builder is provided, e.g., user will - // handle command themselves with '_'. - var parsedCommand = parseCommand(cmd) - handlers[parsedCommand.cmd] = { - original: cmd, - handler: handler, - // TODO: default to a noop builder in - // yargs@5.x - builder: builder, - demanded: parsedCommand.demanded, - optional: parsedCommand.optional - } - } - - self.addDirectory = function (dir, context, req, callerFile, opts) { - opts = opts || {} - // disable recursion to support nested directories of subcommands - if (typeof opts.recurse !== 'boolean') opts.recurse = false - // exclude 'json', 'coffee' from require-directory defaults - if (!Array.isArray(opts.extensions)) opts.extensions = ['js'] - // allow consumer to define their own visitor function - const parentVisit = typeof opts.visit === 'function' ? opts.visit : function (o) { return o } - // call addHandler via visitor function - opts.visit = function (obj, joined, filename) { - const visited = parentVisit(obj, joined, filename) - // allow consumer to skip modules with their own visitor - if (visited) { - // check for cyclic reference - // each command file path should only be seen once per execution - if (~context.files.indexOf(joined)) return visited - // keep track of visited files in context.files - context.files.push(joined) - self.addHandler(visited) - } - return visited - } - requireDirectory({ require: req, filename: callerFile }, dir, opts) - } - - // lookup module object from require()d command and derive name - // if module was not require()d and no name given, throw error - function moduleName (obj) { - const mod = whichModule(obj) - if (!mod) throw new Error('No command name given for module: ' + inspect(obj)) - return commandFromFilename(mod.filename) - } - - // derive command name from filename - function commandFromFilename (filename) { - return path.basename(filename, path.extname(filename)) - } - - function extractDesc (obj) { - for (var keys = ['describe', 'description', 'desc'], i = 0, l = keys.length, test; i < l; i++) { - test = obj[keys[i]] - if (typeof test === 'string' || typeof test === 'boolean') return test - } - return false - } - - function parseCommand (cmd) { - var splitCommand = cmd.split(/\s/) - var bregex = /\.*[\][<>]/g - var parsedCommand = { - cmd: (splitCommand.shift()).replace(bregex, ''), - demanded: [], - optional: [] - } - splitCommand.forEach(function (cmd, i) { - var variadic = false - if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1) variadic = true - if (/^\[/.test(cmd)) { - parsedCommand.optional.push({ - cmd: cmd.replace(bregex, ''), - variadic: variadic - }) - } else { - parsedCommand.demanded.push({ - cmd: cmd.replace(bregex, ''), - variadic: variadic - }) - } - }) - return parsedCommand - } - - self.getCommands = function () { - return Object.keys(handlers) - } - - self.getCommandHandlers = function () { - return handlers - } - - self.runCommand = function (command, yargs, parsed) { - var argv = parsed.argv - var commandHandler = handlers[command] - var innerArgv = argv - var currentContext = yargs.getContext() - var parentCommands = currentContext.commands.slice() - currentContext.commands.push(command) - if (commandHandler.builder && typeof commandHandler.builder === 'function') { - // a function can be provided, which interacts which builds - // up a yargs chain and returns it. - innerArgv = commandHandler.builder(yargs.reset(parsed.aliases)) - // if the builder function did not yet parse argv with reset yargs - // and did not explicitly set a usage() string, then apply the - // original command string as usage() for consistent behavior with - // options object below - if (yargs.parsed === false && typeof yargs.getUsageInstance().getUsage() === 'undefined') { - yargs.usage('$0 ' + (parentCommands.length ? parentCommands.join(' ') + ' ' : '') + commandHandler.original) - } - innerArgv = innerArgv ? innerArgv.argv : argv - } else if (commandHandler.builder && typeof commandHandler.builder === 'object') { - // as a short hand, an object can instead be provided, specifying - // the options that a command takes. - innerArgv = yargs.reset(parsed.aliases) - innerArgv.usage('$0 ' + (parentCommands.length ? parentCommands.join(' ') + ' ' : '') + commandHandler.original) - Object.keys(commandHandler.builder).forEach(function (key) { - innerArgv.option(key, commandHandler.builder[key]) - }) - innerArgv = innerArgv.argv - } - - populatePositional(commandHandler, innerArgv, currentContext) - - if (commandHandler.handler) { - commandHandler.handler(innerArgv) - } - currentContext.commands.pop() - return innerArgv - } - - function populatePositional (commandHandler, argv, context) { - argv._ = argv._.slice(context.commands.length) // nuke the current commands - var demanded = commandHandler.demanded.slice(0) - var optional = commandHandler.optional.slice(0) - - validation.positionalCount(demanded.length, argv._.length) - - while (demanded.length) { - var demand = demanded.shift() - if (demand.variadic) argv[demand.cmd] = [] - if (!argv._.length) break - if (demand.variadic) argv[demand.cmd] = argv._.splice(0) - else argv[demand.cmd] = argv._.shift() - } - - while (optional.length) { - var maybe = optional.shift() - if (maybe.variadic) argv[maybe.cmd] = [] - if (!argv._.length) break - if (maybe.variadic) argv[maybe.cmd] = argv._.splice(0) - else argv[maybe.cmd] = argv._.shift() - } - - argv._ = context.commands.concat(argv._) - } - - self.reset = function () { - handlers = {} - return self - } - - return self -} diff --git a/node_modules/solc/node_modules/yargs/lib/completion.js b/node_modules/solc/node_modules/yargs/lib/completion.js deleted file mode 100644 index 93a936c..0000000 --- a/node_modules/solc/node_modules/yargs/lib/completion.js +++ /dev/null @@ -1,99 +0,0 @@ -const fs = require('fs') -const path = require('path') - -// add bash completions to your -// yargs-powered applications. -module.exports = function (yargs, usage, command) { - const self = { - completionKey: 'get-yargs-completions' - } - - // get a list of completion commands. - // 'args' is the array of strings from the line to be completed - self.getCompletion = function (args, done) { - const completions = [] - const current = args.length ? args[args.length - 1] : '' - const argv = yargs.parse(args, true) - const aliases = yargs.parsed.aliases - - // a custom completion function can be provided - // to completion(). - if (completionFunction) { - if (completionFunction.length < 3) { - var result = completionFunction(current, argv) - - // promise based completion function. - if (typeof result.then === 'function') { - return result.then(function (list) { - process.nextTick(function () { done(list) }) - }).catch(function (err) { - process.nextTick(function () { throw err }) - }) - } - - // synchronous completion function. - return done(result) - } else { - // asynchronous completion function - return completionFunction(current, argv, function (completions) { - done(completions) - }) - } - } - - var handlers = command.getCommandHandlers() - for (var i = 0, ii = args.length; i < ii; ++i) { - if (handlers[args[i]] && handlers[args[i]].builder) { - return handlers[args[i]].builder(yargs.reset()).argv - } - } - - if (!current.match(/^-/)) { - usage.getCommands().forEach(function (command) { - if (args.indexOf(command[0]) === -1) { - completions.push(command[0]) - } - }) - } - - if (current.match(/^-/)) { - Object.keys(yargs.getOptions().key).forEach(function (key) { - // If the key and its aliases aren't in 'args', add the key to 'completions' - var keyAndAliases = [key].concat(aliases[key] || []) - var notInArgs = keyAndAliases.every(function (val) { - return args.indexOf('--' + val) === -1 - }) - if (notInArgs) { - completions.push('--' + key) - } - }) - } - - done(completions) - } - - // generate the completion script to add to your .bashrc. - self.generateCompletionScript = function ($0) { - var script = fs.readFileSync( - path.resolve(__dirname, '../completion.sh.hbs'), - 'utf-8' - ) - var name = path.basename($0) - - // add ./to applications not yet installed as bin. - if ($0.match(/\.js$/)) $0 = './' + $0 - - script = script.replace(/{{app_name}}/g, name) - return script.replace(/{{app_path}}/g, $0) - } - - // register a function to perform your own custom - // completions., this function can be either - // synchrnous or asynchronous. - var completionFunction = null - self.registerFunction = function (fn) { - completionFunction = fn - } - - return self -} diff --git a/node_modules/solc/node_modules/yargs/lib/obj-filter.js b/node_modules/solc/node_modules/yargs/lib/obj-filter.js deleted file mode 100644 index 42cb996..0000000 --- a/node_modules/solc/node_modules/yargs/lib/obj-filter.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = function (original, filter) { - const obj = {} - filter = filter || function (k, v) { return true } - Object.keys(original || {}).forEach(function (key) { - if (filter(key, original[key])) { - obj[key] = original[key] - } - }) - return obj -} diff --git a/node_modules/solc/node_modules/yargs/lib/usage.js b/node_modules/solc/node_modules/yargs/lib/usage.js deleted file mode 100644 index 7c53aa5..0000000 --- a/node_modules/solc/node_modules/yargs/lib/usage.js +++ /dev/null @@ -1,408 +0,0 @@ -// this file handles outputting usage instructions, -// failures, etc. keeps logging in one place. -const cliui = require('cliui') -const decamelize = require('decamelize') -const stringWidth = require('string-width') -const wsize = require('window-size') -const objFilter = require('./obj-filter') -const setBlocking = require('set-blocking') - -module.exports = function (yargs, y18n) { - const __ = y18n.__ - const self = {} - - // methods for ouputting/building failure message. - var fails = [] - self.failFn = function (f) { - fails.push(f) - } - - var failMessage = null - var showHelpOnFail = true - self.showHelpOnFail = function (enabled, message) { - if (typeof enabled === 'string') { - message = enabled - enabled = true - } else if (typeof enabled === 'undefined') { - enabled = true - } - failMessage = message - showHelpOnFail = enabled - return self - } - - var failureOutput = false - self.fail = function (msg, err) { - if (fails.length) { - fails.forEach(function (f) { - f(msg, err) - }) - } else { - if (yargs.getExitProcess()) setBlocking(true) - - // don't output failure message more than once - if (!failureOutput) { - failureOutput = true - if (showHelpOnFail) yargs.showHelp('error') - if (msg) console.error(msg) - if (failMessage) { - if (msg) console.error('') - console.error(failMessage) - } - } - if (yargs.getExitProcess()) { - process.exit(1) - } else { - throw err || new Error(msg) - } - } - } - - // methods for ouputting/building help (usage) message. - var usage - self.usage = function (msg) { - usage = msg - } - self.getUsage = function () { - return usage - } - - var examples = [] - self.example = function (cmd, description) { - examples.push([cmd, description || '']) - } - - var commands = [] - self.command = function (cmd, description) { - commands.push([cmd, description || '']) - } - self.getCommands = function () { - return commands - } - - var descriptions = {} - self.describe = function (key, desc) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.describe(k, key[k]) - }) - } else { - descriptions[key] = desc - } - } - self.getDescriptions = function () { - return descriptions - } - - var epilog - self.epilog = function (msg) { - epilog = msg - } - - var wrap = windowWidth() - self.wrap = function (cols) { - wrap = cols - } - - var deferY18nLookupPrefix = '__yargsString__:' - self.deferY18nLookup = function (str) { - return deferY18nLookupPrefix + str - } - - var defaultGroup = 'Options:' - self.help = function () { - normalizeAliases() - - var demanded = yargs.getDemanded() - var groups = yargs.getGroups() - var options = yargs.getOptions() - var keys = Object.keys( - Object.keys(descriptions) - .concat(Object.keys(demanded)) - .concat(Object.keys(options.default)) - .reduce(function (acc, key) { - if (key !== '_') acc[key] = true - return acc - }, {}) - ) - var ui = cliui({ - width: wrap, - wrap: !!wrap - }) - - // the usage string. - if (usage) { - var u = usage.replace(/\$0/g, yargs.$0) - ui.div(u + '\n') - } - - // your application's commands, i.e., non-option - // arguments populated in '_'. - if (commands.length) { - ui.div(__('Commands:')) - - commands.forEach(function (command) { - ui.div( - {text: command[0], padding: [0, 2, 0, 2], width: maxWidth(commands) + 4}, - {text: command[1]} - ) - }) - - ui.div() - } - - // perform some cleanup on the keys array, making it - // only include top-level keys not their aliases. - var aliasKeys = (Object.keys(options.alias) || []) - .concat(Object.keys(yargs.parsed.newAliases) || []) - - keys = keys.filter(function (key) { - return !yargs.parsed.newAliases[key] && aliasKeys.every(function (alias) { - return (options.alias[alias] || []).indexOf(key) === -1 - }) - }) - - // populate 'Options:' group with any keys that have not - // explicitly had a group set. - if (!groups[defaultGroup]) groups[defaultGroup] = [] - addUngroupedKeys(keys, options.alias, groups) - - // display 'Options:' table along with any custom tables: - Object.keys(groups).forEach(function (groupName) { - if (!groups[groupName].length) return - - ui.div(__(groupName)) - - // if we've grouped the key 'f', but 'f' aliases 'foobar', - // normalizedKeys should contain only 'foobar'. - var normalizedKeys = groups[groupName].map(function (key) { - if (~aliasKeys.indexOf(key)) return key - for (var i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) { - if (~(options.alias[aliasKey] || []).indexOf(key)) return aliasKey - } - return key - }) - - // actually generate the switches string --foo, -f, --bar. - var switches = normalizedKeys.reduce(function (acc, key) { - acc[key] = [ key ].concat(options.alias[key] || []) - .map(function (sw) { - return (sw.length > 1 ? '--' : '-') + sw - }) - .join(', ') - - return acc - }, {}) - - normalizedKeys.forEach(function (key) { - var kswitch = switches[key] - var desc = descriptions[key] || '' - var type = null - - if (~desc.lastIndexOf(deferY18nLookupPrefix)) desc = __(desc.substring(deferY18nLookupPrefix.length)) - - if (~options.boolean.indexOf(key)) type = '[' + __('boolean') + ']' - if (~options.count.indexOf(key)) type = '[' + __('count') + ']' - if (~options.string.indexOf(key)) type = '[' + __('string') + ']' - if (~options.normalize.indexOf(key)) type = '[' + __('string') + ']' - if (~options.array.indexOf(key)) type = '[' + __('array') + ']' - if (~options.number.indexOf(key)) type = '[' + __('number') + ']' - - var extra = [ - type, - demanded[key] ? '[' + __('required') + ']' : null, - options.choices && options.choices[key] ? '[' + __('choices:') + ' ' + - self.stringifiedValues(options.choices[key]) + ']' : null, - defaultString(options.default[key], options.defaultDescription[key]) - ].filter(Boolean).join(' ') - - ui.span( - {text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches) + 4}, - desc - ) - - if (extra) ui.div({text: extra, padding: [0, 0, 0, 2], align: 'right'}) - else ui.div() - }) - - ui.div() - }) - - // describe some common use-cases for your application. - if (examples.length) { - ui.div(__('Examples:')) - - examples.forEach(function (example) { - example[0] = example[0].replace(/\$0/g, yargs.$0) - }) - - examples.forEach(function (example) { - ui.div( - {text: example[0], padding: [0, 2, 0, 2], width: maxWidth(examples) + 4}, - example[1] - ) - }) - - ui.div() - } - - // the usage string. - if (epilog) { - var e = epilog.replace(/\$0/g, yargs.$0) - ui.div(e + '\n') - } - - return ui.toString() - } - - // return the maximum width of a string - // in the left-hand column of a table. - function maxWidth (table) { - var width = 0 - - // table might be of the form [leftColumn], - // or {key: leftColumn}} - if (!Array.isArray(table)) { - table = Object.keys(table).map(function (key) { - return [table[key]] - }) - } - - table.forEach(function (v) { - width = Math.max(stringWidth(v[0]), width) - }) - - // if we've enabled 'wrap' we should limit - // the max-width of the left-column. - if (wrap) width = Math.min(width, parseInt(wrap * 0.5, 10)) - - return width - } - - // make sure any options set for aliases, - // are copied to the keys being aliased. - function normalizeAliases () { - var demanded = yargs.getDemanded() - var options = yargs.getOptions() - - ;(Object.keys(options.alias) || []).forEach(function (key) { - options.alias[key].forEach(function (alias) { - // copy descriptions. - if (descriptions[alias]) self.describe(key, descriptions[alias]) - // copy demanded. - if (demanded[alias]) yargs.demand(key, demanded[alias].msg) - // type messages. - if (~options.boolean.indexOf(alias)) yargs.boolean(key) - if (~options.count.indexOf(alias)) yargs.count(key) - if (~options.string.indexOf(alias)) yargs.string(key) - if (~options.normalize.indexOf(alias)) yargs.normalize(key) - if (~options.array.indexOf(alias)) yargs.array(key) - if (~options.number.indexOf(alias)) yargs.number(key) - }) - }) - } - - // given a set of keys, place any keys that are - // ungrouped under the 'Options:' grouping. - function addUngroupedKeys (keys, aliases, groups) { - var groupedKeys = [] - var toCheck = null - Object.keys(groups).forEach(function (group) { - groupedKeys = groupedKeys.concat(groups[group]) - }) - - keys.forEach(function (key) { - toCheck = [key].concat(aliases[key]) - if (!toCheck.some(function (k) { - return groupedKeys.indexOf(k) !== -1 - })) { - groups[defaultGroup].push(key) - } - }) - return groupedKeys - } - - self.showHelp = function (level) { - if (!level) level = 'error' - var emit = typeof level === 'function' ? level : console[ level ] - emit(self.help()) - } - - self.functionDescription = function (fn) { - var description = fn.name ? decamelize(fn.name, '-') : __('generated-value') - return ['(', description, ')'].join('') - } - - self.stringifiedValues = function (values, separator) { - var string = '' - var sep = separator || ', ' - var array = [].concat(values) - - if (!values || !array.length) return string - - array.forEach(function (value) { - if (string.length) string += sep - string += JSON.stringify(value) - }) - - return string - } - - // format the default-value-string displayed in - // the right-hand column. - function defaultString (value, defaultDescription) { - var string = '[' + __('default:') + ' ' - - if (value === undefined && !defaultDescription) return null - - if (defaultDescription) { - string += defaultDescription - } else { - switch (typeof value) { - case 'string': - string += JSON.stringify(value) - break - case 'object': - string += JSON.stringify(value) - break - default: - string += value - } - } - - return string + ']' - } - - // guess the width of the console window, max-width 80. - function windowWidth () { - return wsize.width ? Math.min(80, wsize.width) : null - } - - // logic for displaying application version. - var version = null - self.version = function (ver) { - version = ver - } - - self.showVersion = function () { - if (typeof version === 'function') console.log(version()) - else console.log(version) - } - - self.reset = function (globalLookup) { - // do not reset wrap here - fails = [] - failMessage = null - failureOutput = false - usage = undefined - epilog = undefined - examples = [] - commands = [] - descriptions = objFilter(descriptions, function (k, v) { - return globalLookup[k] - }) - return self - } - - return self -} diff --git a/node_modules/solc/node_modules/yargs/lib/validation.js b/node_modules/solc/node_modules/yargs/lib/validation.js deleted file mode 100644 index d9a3364..0000000 --- a/node_modules/solc/node_modules/yargs/lib/validation.js +++ /dev/null @@ -1,285 +0,0 @@ -const objFilter = require('./obj-filter') - -// validation-type-stuff, missing params, -// bad implications, custom checks. -module.exports = function (yargs, usage, y18n) { - const __ = y18n.__ - const __n = y18n.__n - const self = {} - - // validate appropriate # of non-option - // arguments were provided, i.e., '_'. - self.nonOptionCount = function (argv) { - const demanded = yargs.getDemanded() - const _s = argv._.length - - if (demanded._ && (_s < demanded._.count || _s > demanded._.max)) { - if (demanded._.msg !== undefined) { - usage.fail(demanded._.msg) - } else if (_s < demanded._.count) { - usage.fail( - __('Not enough non-option arguments: got %s, need at least %s', argv._.length, demanded._.count) - ) - } else { - usage.fail( - __('Too many non-option arguments: got %s, maximum of %s', argv._.length, demanded._.max) - ) - } - } - } - - // validate the appropriate # of - // positional arguments were provided: - self.positionalCount = function (required, observed) { - if (observed < required) { - usage.fail( - __('Not enough non-option arguments: got %s, need at least %s', observed, required) - ) - } - } - - // make sure that any args that require an - // value (--foo=bar), have a value. - self.missingArgumentValue = function (argv) { - const defaultValues = [true, false, ''] - const options = yargs.getOptions() - - if (options.requiresArg.length > 0) { - const missingRequiredArgs = [] - - options.requiresArg.forEach(function (key) { - const value = argv[key] - - // if a value is explicitly requested, - // flag argument as missing if it does not - // look like foo=bar was entered. - if (~defaultValues.indexOf(value) || - (Array.isArray(value) && !value.length)) { - missingRequiredArgs.push(key) - } - }) - - if (missingRequiredArgs.length > 0) { - usage.fail(__n( - 'Missing argument value: %s', - 'Missing argument values: %s', - missingRequiredArgs.length, - missingRequiredArgs.join(', ') - )) - } - } - } - - // make sure all the required arguments are present. - self.requiredArguments = function (argv) { - const demanded = yargs.getDemanded() - var missing = null - - Object.keys(demanded).forEach(function (key) { - if (!argv.hasOwnProperty(key)) { - missing = missing || {} - missing[key] = demanded[key] - } - }) - - if (missing) { - const customMsgs = [] - Object.keys(missing).forEach(function (key) { - const msg = missing[key].msg - if (msg && customMsgs.indexOf(msg) < 0) { - customMsgs.push(msg) - } - }) - - const customMsg = customMsgs.length ? '\n' + customMsgs.join('\n') : '' - - usage.fail(__n( - 'Missing required argument: %s', - 'Missing required arguments: %s', - Object.keys(missing).length, - Object.keys(missing).join(', ') + customMsg - )) - } - } - - // check for unknown arguments (strict-mode). - self.unknownArguments = function (argv, aliases) { - const aliasLookup = {} - const descriptions = usage.getDescriptions() - const demanded = yargs.getDemanded() - const commandKeys = yargs.getCommandInstance().getCommands() - const unknown = [] - const currentContext = yargs.getContext() - - Object.keys(aliases).forEach(function (key) { - aliases[key].forEach(function (alias) { - aliasLookup[alias] = key - }) - }) - - Object.keys(argv).forEach(function (key) { - if (key !== '$0' && key !== '_' && - !descriptions.hasOwnProperty(key) && - !demanded.hasOwnProperty(key) && - !aliasLookup.hasOwnProperty(key)) { - unknown.push(key) - } - }) - - if (commandKeys.length > 0) { - argv._.slice(currentContext.commands.length).forEach(function (key) { - if (commandKeys.indexOf(key) === -1) { - unknown.push(key) - } - }) - } - - if (unknown.length > 0) { - usage.fail(__n( - 'Unknown argument: %s', - 'Unknown arguments: %s', - unknown.length, - unknown.join(', ') - )) - } - } - - // validate arguments limited to enumerated choices - self.limitedChoices = function (argv) { - const options = yargs.getOptions() - const invalid = {} - - if (!Object.keys(options.choices).length) return - - Object.keys(argv).forEach(function (key) { - if (key !== '$0' && key !== '_' && - options.choices.hasOwnProperty(key)) { - [].concat(argv[key]).forEach(function (value) { - // TODO case-insensitive configurability - if (options.choices[key].indexOf(value) === -1) { - invalid[key] = (invalid[key] || []).concat(value) - } - }) - } - }) - - const invalidKeys = Object.keys(invalid) - - if (!invalidKeys.length) return - - var msg = __('Invalid values:') - invalidKeys.forEach(function (key) { - msg += '\n ' + __( - 'Argument: %s, Given: %s, Choices: %s', - key, - usage.stringifiedValues(invalid[key]), - usage.stringifiedValues(options.choices[key]) - ) - }) - usage.fail(msg) - } - - // custom checks, added using the `check` option on yargs. - var checks = [] - self.check = function (f) { - checks.push(f) - } - - self.customChecks = function (argv, aliases) { - checks.forEach(function (f) { - try { - const result = f(argv, aliases) - if (!result) { - usage.fail(__('Argument check failed: %s', f.toString())) - } else if (typeof result === 'string') { - usage.fail(result) - } - } catch (err) { - usage.fail(err.message ? err.message : err, err) - } - }) - } - - // check implications, argument foo implies => argument bar. - var implied = {} - self.implies = function (key, value) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.implies(k, key[k]) - }) - } else { - implied[key] = value - } - } - self.getImplied = function () { - return implied - } - - self.implications = function (argv) { - const implyFail = [] - - Object.keys(implied).forEach(function (key) { - var booleanNegation - if (yargs.getOptions().configuration['boolean-negation'] === false) { - booleanNegation = false - } else { - booleanNegation = true - } - var num - const origKey = key - var value = implied[key] - - // convert string '1' to number 1 - num = Number(key) - key = isNaN(num) ? key : num - - if (typeof key === 'number') { - // check length of argv._ - key = argv._.length >= key - } else if (key.match(/^--no-.+/) && booleanNegation) { - // check if key doesn't exist - key = key.match(/^--no-(.+)/)[1] - key = !argv[key] - } else { - // check if key exists - key = argv[key] - } - - num = Number(value) - value = isNaN(num) ? value : num - - if (typeof value === 'number') { - value = argv._.length >= value - } else if (value.match(/^--no-.+/) && booleanNegation) { - value = value.match(/^--no-(.+)/)[1] - value = !argv[value] - } else { - value = argv[value] - } - - if (key && !value) { - implyFail.push(origKey) - } - }) - - if (implyFail.length) { - var msg = __('Implications failed:') + '\n' - - implyFail.forEach(function (key) { - msg += (' ' + key + ' -> ' + implied[key]) - }) - - usage.fail(msg) - } - } - - self.reset = function (globalLookup) { - implied = objFilter(implied, function (k, v) { - return globalLookup[k] - }) - checks = [] - return self - } - - return self -} diff --git a/node_modules/solc/node_modules/yargs/locales/de.json b/node_modules/solc/node_modules/yargs/locales/de.json deleted file mode 100644 index 8586498..0000000 --- a/node_modules/solc/node_modules/yargs/locales/de.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Kommandos:", - "Options:": "Optionen:", - "Examples:": "Beispiele:", - "boolean": "boolean", - "count": "Zähler", - "string": "string", - "number": "Zahl", - "array": "array", - "required": "erforderlich", - "default:": "Standard:", - "choices:": "Möglichkeiten:", - "generated-value": "Generierter-Wert", - "Not enough non-option arguments: got %s, need at least %s": "Nicht genügend Argumente ohne Optionen: %s vorhanden, mindestens %s benötigt", - "Too many non-option arguments: got %s, maximum of %s": "Zu viele Argumente ohne Optionen: %s vorhanden, maximal %s erlaubt", - "Missing argument value: %s": { - "one": "Fehlender Argumentwert: %s", - "other": "Fehlende Argumentwerte: %s" - }, - "Missing required argument: %s": { - "one": "Fehlendes Argument: %s", - "other": "Fehlende Argumente: %s" - }, - "Unknown argument: %s": { - "one": "Unbekanntes Argument: %s", - "other": "Unbekannte Argumente: %s" - }, - "Invalid values:": "Unzulässige Werte:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeben: %s, Möglichkeiten: %s", - "Argument check failed: %s": "Argumente-Check fehlgeschlagen: %s", - "Implications failed:": "Implikationen fehlgeschlagen:", - "Not enough arguments following: %s": "Nicht genügend Argumente nach: %s", - "Invalid JSON config file: %s": "Fehlerhafte JSON-Config Datei: %s", - "Path to JSON config file": "Pfad zur JSON-Config Datei", - "Show help": "Hilfe anzeigen", - "Show version number": "Version anzeigen" -} diff --git a/node_modules/solc/node_modules/yargs/locales/en.json b/node_modules/solc/node_modules/yargs/locales/en.json deleted file mode 100644 index 0fab5cc..0000000 --- a/node_modules/solc/node_modules/yargs/locales/en.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Commands:", - "Options:": "Options:", - "Examples:": "Examples:", - "boolean": "boolean", - "count": "count", - "string": "string", - "number": "number", - "array": "array", - "required": "required", - "default:": "default:", - "choices:": "choices:", - "generated-value": "generated-value", - "Not enough non-option arguments: got %s, need at least %s": "Not enough non-option arguments: got %s, need at least %s", - "Too many non-option arguments: got %s, maximum of %s": "Too many non-option arguments: got %s, maximum of %s", - "Missing argument value: %s": { - "one": "Missing argument value: %s", - "other": "Missing argument values: %s" - }, - "Missing required argument: %s": { - "one": "Missing required argument: %s", - "other": "Missing required arguments: %s" - }, - "Unknown argument: %s": { - "one": "Unknown argument: %s", - "other": "Unknown arguments: %s" - }, - "Invalid values:": "Invalid values:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Given: %s, Choices: %s", - "Argument check failed: %s": "Argument check failed: %s", - "Implications failed:": "Implications failed:", - "Not enough arguments following: %s": "Not enough arguments following: %s", - "Invalid JSON config file: %s": "Invalid JSON config file: %s", - "Path to JSON config file": "Path to JSON config file", - "Show help": "Show help", - "Show version number": "Show version number" -} diff --git a/node_modules/solc/node_modules/yargs/locales/es.json b/node_modules/solc/node_modules/yargs/locales/es.json deleted file mode 100644 index 39c2522..0000000 --- a/node_modules/solc/node_modules/yargs/locales/es.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Comandos:", - "Options:": "Opciones:", - "Examples:": "Ejemplos:", - "boolean": "boolean", - "count": "cuenta", - "string": "cadena de caracteres", - "number": "número", - "array": "tabla", - "required": "requisito", - "default:": "defecto:", - "choices:": "selección:", - "generated-value": "valor-generado", - "Not enough non-option arguments: got %s, need at least %s": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s", - "Too many non-option arguments: got %s, maximum of %s": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s", - "Missing argument value: %s": { - "one": "Falta argumento: %s", - "other": "Faltan argumentos: %s" - }, - "Missing required argument: %s": { - "one": "Falta argumento requerido: %s", - "other": "Faltan argumentos requeridos: %s" - }, - "Unknown argument: %s": { - "one": "Argumento desconocido: %s", - "other": "Argumentos desconocidos: %s" - }, - "Invalid values:": "Valores inválidos:", - "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Recibido: %s, Selección: %s", - "Argument check failed: %s": "Verificación de argumento ha fracasado: %s", - "Implications failed:": "Implicaciones fracasadas:", - "Not enough arguments following: %s": "No hay suficientes argumentos después de: %s", - "Invalid JSON config file: %s": "Archivo de configuración JSON inválido: %s", - "Path to JSON config file": "Ruta al archivo de configuración JSON", - "Show help": "Muestra ayuda", - "Show version number": "Muestra número de versión" -} diff --git a/node_modules/solc/node_modules/yargs/locales/fr.json b/node_modules/solc/node_modules/yargs/locales/fr.json deleted file mode 100644 index 481f47e..0000000 --- a/node_modules/solc/node_modules/yargs/locales/fr.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Commandes:", - "Options:": "Options:", - "Examples:": "Exemples:", - "boolean": "booléen", - "count": "comptage", - "string": "chaine de caractère", - "number": "nombre", - "array": "tableau", - "required": "requis", - "default:": "défaut:", - "choices:": "choix:", - "generated-value": "valeur générée", - "Not enough non-option arguments: got %s, need at least %s": "Pas assez d'arguments non-option: reçu %s, besoin d'au moins %s", - "Too many non-option arguments: got %s, maximum of %s": "Trop d'arguments non-option: reçu %s, maximum %s", - "Missing argument value: %s": { - "one": "Argument manquant: %s", - "other": "Arguments manquants: %s" - }, - "Missing required argument: %s": { - "one": "Argument requis manquant: %s", - "other": "Arguments requis manquants: %s" - }, - "Unknown argument: %s": { - "one": "Argument inconnu: %s", - "other": "Arguments inconnus: %s" - }, - "Invalid values:": "Valeurs invalides:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Donné: %s, Choix: %s", - "Argument check failed: %s": "Echec de la vérification de l'argument: %s", - "Implications failed:": "Implications échouées:", - "Not enough arguments following: %s": "Pas assez d'arguments suivant: %s", - "Invalid JSON config file: %s": "Fichier de configuration JSON invalide: %s", - "Path to JSON config file": "Chemin du fichier de configuration JSON", - "Show help": "Affiche de l'aide", - "Show version number": "Affiche le numéro de version" -} diff --git a/node_modules/solc/node_modules/yargs/locales/id.json b/node_modules/solc/node_modules/yargs/locales/id.json deleted file mode 100644 index ea2ce5a..0000000 --- a/node_modules/solc/node_modules/yargs/locales/id.json +++ /dev/null @@ -1,38 +0,0 @@ - -{ - "Commands:": "Perintah:", - "Options:": "Pilihan:", - "Examples:": "Contoh:", - "boolean": "boolean", - "count": "jumlah", - "number": "nomor", - "string": "string", - "array": "larik", - "required": "diperlukan", - "default:": "bawaan:", - "choices:": "pilihan:", - "generated-value": "nilai-yang-dihasilkan", - "Not enough non-option arguments: got %s, need at least %s": "Argumen wajib kurang: hanya %s, minimal %s", - "Too many non-option arguments: got %s, maximum of %s": "Terlalu banyak argumen wajib: ada %s, maksimal %s", - "Missing argument value: %s": { - "one": "Kurang argumen: %s", - "other": "Kurang argumen: %s" - }, - "Missing required argument: %s": { - "one": "Kurang argumen wajib: %s", - "other": "Kurang argumen wajib: %s" - }, - "Unknown argument: %s": { - "one": "Argumen tak diketahui: %s", - "other": "Argumen tak diketahui: %s" - }, - "Invalid values:": "Nilai-nilai tidak valid:", - "Argument: %s, Given: %s, Choices: %s": "Argumen: %s, Diberikan: %s, Pilihan: %s", - "Argument check failed: %s": "Pemeriksaan argument gagal: %s", - "Implications failed:": "Implikasi gagal:", - "Not enough arguments following: %s": "Kurang argumen untuk: %s", - "Invalid JSON config file: %s": "Berkas konfigurasi JSON tidak valid: %s", - "Path to JSON config file": "Alamat berkas konfigurasi JSON", - "Show help": "Lihat bantuan", - "Show version number": "Lihat nomor versi" -} diff --git a/node_modules/solc/node_modules/yargs/locales/it.json b/node_modules/solc/node_modules/yargs/locales/it.json deleted file mode 100644 index bd9573a..0000000 --- a/node_modules/solc/node_modules/yargs/locales/it.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Comandi:", - "Options:": "Opzioni:", - "Examples:": "Esempi:", - "boolean": "booleano", - "count": "contatore", - "string": "stringa", - "number": "numero", - "array": "vettore", - "required": "richiesto", - "default:": "predefinito:", - "choices:": "scelte:", - "generated-value": "valore generato", - "Not enough non-option arguments: got %s, need at least %s": "Numero insufficiente di argomenti non opzione: inseriti %s, richiesti almeno %s", - "Too many non-option arguments: got %s, maximum of %s": "Troppi argomenti non opzione: inseriti %s, massimo possibile %s", - "Missing argument value: %s": { - "one": "Argomento mancante: %s", - "other": "Argomenti mancanti: %s" - }, - "Missing required argument: %s": { - "one": "Argomento richiesto mancante: %s", - "other": "Argomenti richiesti mancanti: %s" - }, - "Unknown argument: %s": { - "one": "Argomento sconosciuto: %s", - "other": "Argomenti sconosciuti: %s" - }, - "Invalid values:": "Valori non validi:", - "Argument: %s, Given: %s, Choices: %s": "Argomento: %s, Richiesto: %s, Scelte: %s", - "Argument check failed: %s": "Controllo dell'argomento fallito: %s", - "Implications failed:": "Argomenti impliciti non soddisfatti:", - "Not enough arguments following: %s": "Argomenti insufficienti dopo: %s", - "Invalid JSON config file: %s": "File di configurazione JSON non valido: %s", - "Path to JSON config file": "Percorso del file di configurazione JSON", - "Show help": "Mostra la schermata di aiuto", - "Show version number": "Mostra il numero di versione" -} diff --git a/node_modules/solc/node_modules/yargs/locales/ja.json b/node_modules/solc/node_modules/yargs/locales/ja.json deleted file mode 100644 index 899454c..0000000 --- a/node_modules/solc/node_modules/yargs/locales/ja.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "コマンド:", - "Options:": "オプション:", - "Examples:": "例:", - "boolean": "真偽", - "count": "カウント", - "string": "文字列", - "number": "数値", - "array": "配列", - "required": "必須", - "default:": "デフォルト:", - "choices:": "選択してください:", - "generated-value": "生成された値", - "Not enough non-option arguments: got %s, need at least %s": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:", - "Too many non-option arguments: got %s, maximum of %s": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:", - "Missing argument value: %s": { - "one": "引数が見つかりません: %s", - "other": "引数が見つかりません: %s" - }, - "Missing required argument: %s": { - "one": "必須の引数が見つかりません: %s", - "other": "必須の引数が見つかりません: %s" - }, - "Unknown argument: %s": { - "one": "未知の引数です: %s", - "other": "未知の引数です: %s" - }, - "Invalid values:": "不正な値です:", - "Argument: %s, Given: %s, Choices: %s": "引数は %s です。指定できるのは %s つです。選択してください: %s", - "Argument check failed: %s": "引数のチェックに失敗しました: %s", - "Implications failed:": "オプションの組み合わせで不正が生じました:", - "Not enough arguments following: %s": "次の引数が不足しています。: %s", - "Invalid JSON config file: %s": "JSONの設定ファイルが不正です: %s", - "Path to JSON config file": "JSONの設定ファイルまでのpath", - "Show help": "ヘルプを表示", - "Show version number": "バージョンを表示" -} diff --git a/node_modules/solc/node_modules/yargs/locales/ko.json b/node_modules/solc/node_modules/yargs/locales/ko.json deleted file mode 100644 index a70ec24..0000000 --- a/node_modules/solc/node_modules/yargs/locales/ko.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "명령:", - "Options:": "옵션:", - "Examples:": "예시:", - "boolean": "여부", - "count": "개수", - "string": "문자열", - "number": "숫자", - "array": "배열", - "required": "필수", - "default:": "기본:", - "choices:": "선택:", - "generated-value": "생성된 값", - "Not enough non-option arguments: got %s, need at least %s": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다", - "Too many non-option arguments: got %s, maximum of %s": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다", - "Missing argument value: %s": { - "one": "인자값을 받지 못했습니다: %s", - "other": "인자값들을 받지 못했습니다: %s" - }, - "Missing required argument: %s": { - "one": "필수 인자를 받지 못했습니다: %s", - "other": "필수 인자들을 받지 못했습니다: %s" - }, - "Unknown argument: %s": { - "one": "알 수 없는 인자입니다: %s", - "other": "알 수 없는 인자들입니다: %s" - }, - "Invalid values:": "잘못된 값입니다:", - "Argument: %s, Given: %s, Choices: %s": "인자: %s, 입력받은 값: %s, 선택지: %s", - "Argument check failed: %s": "유효하지 않은 인자입니다: %s", - "Implications failed:": "옵션의 조합이 잘못되었습니다:", - "Not enough arguments following: %s": "인자가 충분하게 주어지지 않았습니다: %s", - "Invalid JSON config file: %s": "유효하지 않은 JSON 설정파일입니다: %s", - "Path to JSON config file": "JSON 설정파일 경로", - "Show help": "도움말을 보여줍니다", - "Show version number": "버전 넘버를 보여줍니다" -} diff --git a/node_modules/solc/node_modules/yargs/locales/nb.json b/node_modules/solc/node_modules/yargs/locales/nb.json deleted file mode 100644 index fc607fb..0000000 --- a/node_modules/solc/node_modules/yargs/locales/nb.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Kommandoer:", - "Options:": "Alternativer:", - "Examples:": "Eksempler:", - "boolean": "boolsk", - "count": "antall", - "string": "streng", - "number": "nummer", - "array": "matrise", - "required": "obligatorisk", - "default:": "standard:", - "choices:": "valg:", - "generated-value": "generert-verdi", - "Not enough non-option arguments: got %s, need at least %s": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s", - "Too many non-option arguments: got %s, maximum of %s": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s", - "Missing argument value: %s": { - "one": "Mangler argument verdi: %s", - "other": "Mangler argument verdier: %s" - }, - "Missing required argument: %s": { - "one": "Mangler obligatorisk argument: %s", - "other": "Mangler obligatoriske argumenter: %s" - }, - "Unknown argument: %s": { - "one": "Ukjent argument: %s", - "other": "Ukjente argumenter: %s" - }, - "Invalid values:": "Ugyldige verdier:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gitt: %s, Valg: %s", - "Argument check failed: %s": "Argument sjekk mislyktes: %s", - "Implications failed:": "Konsekvensene mislyktes:", - "Not enough arguments following: %s": "Ikke nok følgende argumenter: %s", - "Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s", - "Path to JSON config file": "Bane til JSON konfigurasjonsfil", - "Show help": "Vis hjelp", - "Show version number": "Vis versjonsnummer" -} diff --git a/node_modules/solc/node_modules/yargs/locales/pirate.json b/node_modules/solc/node_modules/yargs/locales/pirate.json deleted file mode 100644 index 1f4e19e..0000000 --- a/node_modules/solc/node_modules/yargs/locales/pirate.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "Commands:": "Choose yer command:", - "Options:": "Options for me hearties!", - "Examples:": "Ex. marks the spot:", - "required": "requi-yar-ed", - "Missing required argument: %s": { - "one": "Ye be havin' to set the followin' argument land lubber: %s", - "other": "Ye be havin' to set the followin' arguments land lubber: %s" - }, - "Show help": "Parlay this here code of conduct", - "Show version number": "'Tis the version ye be askin' fer" -} diff --git a/node_modules/solc/node_modules/yargs/locales/pl.json b/node_modules/solc/node_modules/yargs/locales/pl.json deleted file mode 100644 index 5e48ac6..0000000 --- a/node_modules/solc/node_modules/yargs/locales/pl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Polecenia:", - "Options:": "Opcje:", - "Examples:": "Przykłady:", - "boolean": "boolean", - "count": "ilość", - "string": "ciąg znaków", - "number": "liczba", - "array": "tablica", - "required": "wymagany", - "default:": "domyślny:", - "choices:": "dostępne:", - "generated-value": "wygenerowana-wartość", - "Not enough non-option arguments: got %s, need at least %s": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s", - "Too many non-option arguments: got %s, maximum of %s": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s", - "Missing argument value: %s": { - "one": "Brak wartości dla argumentu: %s", - "other": "Brak wartości dla argumentów: %s" - }, - "Missing required argument: %s": { - "one": "Brak wymaganego argumentu: %s", - "other": "Brak wymaganych argumentów: %s" - }, - "Unknown argument: %s": { - "one": "Nieznany argument: %s", - "other": "Nieznane argumenty: %s" - }, - "Invalid values:": "Nieprawidłowe wartości:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Otrzymano: %s, Dostępne: %s", - "Argument check failed: %s": "Weryfikacja argumentów nie powiodła się: %s", - "Implications failed:": "Założenia nie zostały spełnione:", - "Not enough arguments following: %s": "Niewystarczająca ilość argumentów następujących po: %s", - "Invalid JSON config file: %s": "Nieprawidłowy plik konfiguracyjny JSON: %s", - "Path to JSON config file": "Ścieżka do pliku konfiguracyjnego JSON", - "Show help": "Pokaż pomoc", - "Show version number": "Pokaż numer wersji" -} diff --git a/node_modules/solc/node_modules/yargs/locales/pt.json b/node_modules/solc/node_modules/yargs/locales/pt.json deleted file mode 100644 index 0b9ea25..0000000 --- a/node_modules/solc/node_modules/yargs/locales/pt.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Comandos:", - "Options:": "Opções:", - "Examples:": "Exemplos:", - "boolean": "boolean", - "count": "contagem", - "string": "cadeia de caracteres", - "number": "número", - "array": "arranjo", - "required": "requerido", - "default:": "padrão:", - "choices:": "escolhas:", - "generated-value": "valor-gerado", - "Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s", - "Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos não opcionais: recebido %s, máximo de %s", - "Missing argument value: %s": { - "one": "Falta valor de argumento: %s", - "other": "Falta valores de argumento: %s" - }, - "Missing required argument: %s": { - "one": "Falta argumento obrigatório: %s", - "other": "Faltando argumentos obrigatórios: %s" - }, - "Unknown argument: %s": { - "one": "Argumento desconhecido: %s", - "other": "Argumentos desconhecidos: %s" - }, - "Invalid values:": "Valores inválidos:", - "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Escolhas: %s", - "Argument check failed: %s": "Verificação de argumento falhou: %s", - "Implications failed:": "Implicações falharam:", - "Not enough arguments following: %s": "Insuficientes argumentos a seguir: %s", - "Invalid JSON config file: %s": "Arquivo de configuração em JSON esta inválido: %s", - "Path to JSON config file": "Caminho para o arquivo de configuração em JSON", - "Show help": "Mostra ajuda", - "Show version number": "Mostra número de versão" -} diff --git a/node_modules/solc/node_modules/yargs/locales/pt_BR.json b/node_modules/solc/node_modules/yargs/locales/pt_BR.json deleted file mode 100644 index f0aec14..0000000 --- a/node_modules/solc/node_modules/yargs/locales/pt_BR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Comandos:", - "Options:": "Opções:", - "Examples:": "Exemplos:", - "boolean": "boolean", - "count": "contagem", - "string": "string", - "number": "número", - "array": "array", - "required": "obrigatório", - "default:": "padrão:", - "choices:": "opções:", - "generated-value": "valor-gerado", - "Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s", - "Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos: recebido %s, máximo de %s", - "Missing argument value: %s": { - "one": "Falta valor de argumento: %s", - "other": "Falta valores de argumento: %s" - }, - "Missing required argument: %s": { - "one": "Falta argumento obrigatório: %s", - "other": "Faltando argumentos obrigatórios: %s" - }, - "Unknown argument: %s": { - "one": "Argumento desconhecido: %s", - "other": "Argumentos desconhecidos: %s" - }, - "Invalid values:": "Valores inválidos:", - "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Opções: %s", - "Argument check failed: %s": "Verificação de argumento falhou: %s", - "Implications failed:": "Implicações falharam:", - "Not enough arguments following: %s": "Argumentos insuficientes a seguir: %s", - "Invalid JSON config file: %s": "Arquivo JSON de configuração inválido: %s", - "Path to JSON config file": "Caminho para o arquivo JSON de configuração", - "Show help": "Exibe ajuda", - "Show version number": "Exibe a versão" -} diff --git a/node_modules/solc/node_modules/yargs/locales/tr.json b/node_modules/solc/node_modules/yargs/locales/tr.json deleted file mode 100644 index 5b5c91b..0000000 --- a/node_modules/solc/node_modules/yargs/locales/tr.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "Komutlar:", - "Options:": "Seçenekler:", - "Examples:": "Örnekler:", - "boolean": "boolean", - "count": "sayı", - "string": "string", - "number": "numara", - "array": "array", - "required": "zorunlu", - "default:": "varsayılan:", - "choices:": "seçimler:", - "generated-value": "oluşturulan-değer", - "Not enough non-option arguments: got %s, need at least %s": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli", - "Too many non-option arguments: got %s, maximum of %s": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s", - "Missing argument value: %s": { - "one": "Eksik argüman değeri: %s", - "other": "Eksik argüman değerleri: %s" - }, - "Missing required argument: %s": { - "one": "Eksik zorunlu argüman: %s", - "other": "Eksik zorunlu argümanlar: %s" - }, - "Unknown argument: %s": { - "one": "Bilinmeyen argüman: %s", - "other": "Bilinmeyen argümanlar: %s" - }, - "Invalid values:": "Geçersiz değerler:", - "Argument: %s, Given: %s, Choices: %s": "Argüman: %s, Verilen: %s, Seçimler: %s", - "Argument check failed: %s": "Argüman kontrolü başarısız oldu: %s", - "Implications failed:": "Sonuçlar başarısız oldu:", - "Not enough arguments following: %s": "%s için yeterli argüman bulunamadı", - "Invalid JSON config file: %s": "Geçersiz JSON yapılandırma dosyası: %s", - "Path to JSON config file": "JSON yapılandırma dosya konumu", - "Show help": "Yardım detaylarını göster", - "Show version number": "Versiyon detaylarını göster" -} diff --git a/node_modules/solc/node_modules/yargs/locales/zh.json b/node_modules/solc/node_modules/yargs/locales/zh.json deleted file mode 100644 index b25c7b9..0000000 --- a/node_modules/solc/node_modules/yargs/locales/zh.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "命令:", - "Options:": "选项:", - "Examples:": "示例:", - "boolean": "布尔", - "count": "计数", - "string": "字符串", - "number": "数字", - "array": "数组", - "required": "必需", - "default:": "默认值:", - "choices:": "可选值:", - "generated-value": "生成的值", - "Not enough non-option arguments: got %s, need at least %s": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个", - "Too many non-option arguments: got %s, maximum of %s": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个", - "Missing argument value: %s": { - "one": "没有给此选项指定值:%s", - "other": "没有给这些选项指定值:%s" - }, - "Missing required argument: %s": { - "one": "缺少必须的选项:%s", - "other": "缺少这些必须的选项:%s" - }, - "Unknown argument: %s": { - "one": "无法识别的选项:%s", - "other": "无法识别这些选项:%s" - }, - "Invalid values:": "无效的选项值:", - "Argument: %s, Given: %s, Choices: %s": "选项名称: %s, 传入的值: %s, 可选的值:%s", - "Argument check failed: %s": "选项值验证失败:%s", - "Implications failed:": "缺少依赖的选项:", - "Not enough arguments following: %s": "没有提供足够的值给此选项:%s", - "Invalid JSON config file: %s": "无效的 JSON 配置文件:%s", - "Path to JSON config file": "JSON 配置文件的路径", - "Show help": "显示帮助信息", - "Show version number": "显示版本号" -} diff --git a/node_modules/solc/node_modules/yargs/locales/zh_CN.json b/node_modules/solc/node_modules/yargs/locales/zh_CN.json deleted file mode 100644 index b25c7b9..0000000 --- a/node_modules/solc/node_modules/yargs/locales/zh_CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "Commands:": "命令:", - "Options:": "选项:", - "Examples:": "示例:", - "boolean": "布尔", - "count": "计数", - "string": "字符串", - "number": "数字", - "array": "数组", - "required": "必需", - "default:": "默认值:", - "choices:": "可选值:", - "generated-value": "生成的值", - "Not enough non-option arguments: got %s, need at least %s": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个", - "Too many non-option arguments: got %s, maximum of %s": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个", - "Missing argument value: %s": { - "one": "没有给此选项指定值:%s", - "other": "没有给这些选项指定值:%s" - }, - "Missing required argument: %s": { - "one": "缺少必须的选项:%s", - "other": "缺少这些必须的选项:%s" - }, - "Unknown argument: %s": { - "one": "无法识别的选项:%s", - "other": "无法识别这些选项:%s" - }, - "Invalid values:": "无效的选项值:", - "Argument: %s, Given: %s, Choices: %s": "选项名称: %s, 传入的值: %s, 可选的值:%s", - "Argument check failed: %s": "选项值验证失败:%s", - "Implications failed:": "缺少依赖的选项:", - "Not enough arguments following: %s": "没有提供足够的值给此选项:%s", - "Invalid JSON config file: %s": "无效的 JSON 配置文件:%s", - "Path to JSON config file": "JSON 配置文件的路径", - "Show help": "显示帮助信息", - "Show version number": "显示版本号" -} diff --git a/node_modules/solc/node_modules/yargs/package.json b/node_modules/solc/node_modules/yargs/package.json deleted file mode 100644 index 3cb21fa..0000000 --- a/node_modules/solc/node_modules/yargs/package.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "_args": [ - [ - "yargs@^4.7.1", - "/Users/jbaylina/git/MVP/node_modules/solc" - ] - ], - "_from": "yargs@>=4.7.1 <5.0.0", - "_id": "yargs@4.8.1", - "_inCache": true, - "_installable": true, - "_location": "/solc/yargs", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/yargs-4.8.1.tgz_1468774517925_0.6020703467074782" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "yargs", - "raw": "yargs@^4.7.1", - "rawSpec": "^4.7.1", - "scope": null, - "spec": ">=4.7.1 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc" - ], - "_resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "_shasum": "c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0", - "_shrinkwrap": null, - "_spec": "yargs@^4.7.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc", - "bugs": { - "url": "https://github.com/yargs/yargs/issues" - }, - "dependencies": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - }, - "description": "yargs the modern, pirate-themed, successor to optimist.", - "devDependencies": { - "chai": "^3.4.1", - "chalk": "^1.1.3", - "coveralls": "^2.11.11", - "cpr": "^1.0.0", - "cross-spawn": "^4.0.0", - "es6-promise": "^3.0.2", - "hashish": "0.0.4", - "mocha": "^2.5.2", - "nyc": "^7.0.0", - "rimraf": "^2.5.0", - "standard": "^7.0.0", - "standard-version": "^2.2.1", - "which": "^1.2.9" - }, - "directories": {}, - "dist": { - "shasum": "c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0", - "tarball": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz" - }, - "engine": { - "node": ">=0.10" - }, - "files": [ - "index.js", - "yargs.js", - "lib", - "locales", - "completion.sh.hbs", - "LICENSE" - ], - "gitHead": "6adbe5574885c6ac7f7d42e80010b9f325c1bac3", - "homepage": "http://yargs.js.org/", - "keywords": [ - "argument", - "args", - "option", - "parser", - "parsing", - "cli", - "command" - ], - "license": "MIT", - "main": "./index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "alex.ford@codetunnel.com", - "name": "chevex" - }, - { - "email": "andrew@npmjs.com", - "name": "nexdrew" - }, - { - "email": "jnylen@gmail.com", - "name": "nylen" - } - ], - "name": "yargs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/yargs/yargs.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "pretest": "standard", - "test": "nyc --cache mocha --require ./test/before.js --timeout=8000 --check-leaks", - "version": "standard-version" - }, - "standard": { - "ignore": [ - "**/example/**" - ] - }, - "version": "4.8.1" -} diff --git a/node_modules/solc/node_modules/yargs/yargs.js b/node_modules/solc/node_modules/yargs/yargs.js deleted file mode 100644 index ed6fd56..0000000 --- a/node_modules/solc/node_modules/yargs/yargs.js +++ /dev/null @@ -1,778 +0,0 @@ -const assert = require('assert') -const assign = require('lodash.assign') -const Command = require('./lib/command') -const Completion = require('./lib/completion') -const Parser = require('yargs-parser') -const path = require('path') -const Usage = require('./lib/usage') -const Validation = require('./lib/validation') -const Y18n = require('y18n') -const requireMainFilename = require('require-main-filename') -const objFilter = require('./lib/obj-filter') -const setBlocking = require('set-blocking') - -var exports = module.exports = Yargs -function Yargs (processArgs, cwd, parentRequire) { - processArgs = processArgs || [] // handle calling yargs(). - - const self = {} - var command = null - var completion = null - var groups = {} - var preservedGroups = {} - var usage = null - var validation = null - - const y18n = Y18n({ - directory: path.resolve(__dirname, './locales'), - updateFiles: false - }) - - if (!cwd) cwd = process.cwd() - - self.$0 = process.argv - .slice(0, 2) - .map(function (x, i) { - // ignore the node bin, specify this in your - // bin file with #!/usr/bin/env node - if (i === 0 && /\b(node|iojs)(\.exe)?$/.test(x)) return - var b = rebase(cwd, x) - return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x - }) - .join(' ').trim() - - if (process.env._ !== undefined && process.argv[1] === process.env._) { - self.$0 = process.env._.replace( - path.dirname(process.execPath) + '/', '' - ) - } - - // use context object to keep track of resets, subcommand execution, etc - // submodules should modify and check the state of context as necessary - const context = { resets: -1, commands: [], files: [] } - self.getContext = function () { - return context - } - - // puts yargs back into an initial state. any keys - // that have been set to "global" will not be reset - // by this action. - var options - self.resetOptions = self.reset = function (aliases) { - context.resets++ - aliases = aliases || {} - options = options || {} - // put yargs back into an initial state, this - // logic is used to build a nested command - // hierarchy. - var tmpOptions = {} - tmpOptions.global = options.global ? options.global : [] - - // if a key has been set as a global, we - // do not want to reset it or its aliases. - var globalLookup = {} - tmpOptions.global.forEach(function (g) { - globalLookup[g] = true - ;(aliases[g] || []).forEach(function (a) { - globalLookup[a] = true - }) - }) - - // preserve groups containing global keys - preservedGroups = Object.keys(groups).reduce(function (acc, groupName) { - var keys = groups[groupName].filter(function (key) { - return key in globalLookup - }) - if (keys.length > 0) { - acc[groupName] = keys - } - return acc - }, {}) - // groups can now be reset - groups = {} - - var arrayOptions = [ - 'array', 'boolean', 'string', 'requiresArg', 'skipValidation', - 'count', 'normalize', 'number' - ] - - var objectOptions = [ - 'narg', 'key', 'alias', 'default', 'defaultDescription', - 'config', 'choices', 'demanded' - ] - - arrayOptions.forEach(function (k) { - tmpOptions[k] = (options[k] || []).filter(function (k) { - return globalLookup[k] - }) - }) - - objectOptions.forEach(function (k) { - tmpOptions[k] = objFilter(options[k], function (k, v) { - return globalLookup[k] - }) - }) - - tmpOptions.envPrefix = undefined - options = tmpOptions - - // if this is the first time being executed, create - // instances of all our helpers -- otherwise just reset. - usage = usage ? usage.reset(globalLookup) : Usage(self, y18n) - validation = validation ? validation.reset(globalLookup) : Validation(self, usage, y18n) - command = command ? command.reset() : Command(self, usage, validation) - if (!completion) completion = Completion(self, usage, command) - - exitProcess = true - strict = false - completionCommand = null - self.parsed = false - - return self - } - self.resetOptions() - - self.boolean = function (bools) { - options.boolean.push.apply(options.boolean, [].concat(bools)) - return self - } - - self.array = function (arrays) { - options.array.push.apply(options.array, [].concat(arrays)) - return self - } - - self.nargs = function (key, n) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.nargs(k, key[k]) - }) - } else { - options.narg[key] = n - } - return self - } - - self.number = function (numbers) { - options.number.push.apply(options.number, [].concat(numbers)) - return self - } - - self.choices = function (key, values) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.choices(k, key[k]) - }) - } else { - options.choices[key] = (options.choices[key] || []).concat(values) - } - return self - } - - self.normalize = function (strings) { - options.normalize.push.apply(options.normalize, [].concat(strings)) - return self - } - - self.config = function (key, msg, parseFn) { - // allow to pass a configuration object - if (typeof key === 'object') { - options.configObjects = (options.configObjects || []).concat(key) - return self - } - - // allow to provide a parsing function - if (typeof msg === 'function') { - parseFn = msg - msg = null - } - - key = key || 'config' - self.describe(key, msg || usage.deferY18nLookup('Path to JSON config file')) - ;(Array.isArray(key) ? key : [key]).forEach(function (k) { - options.config[k] = parseFn || true - }) - return self - } - - self.example = function (cmd, description) { - usage.example(cmd, description) - return self - } - - self.command = function (cmd, description, builder, handler) { - command.addHandler(cmd, description, builder, handler) - return self - } - - self.commandDir = function (dir, opts) { - const req = parentRequire || require - command.addDirectory(dir, self.getContext(), req, require('get-caller-file')(), opts) - return self - } - - self.string = function (strings) { - options.string.push.apply(options.string, [].concat(strings)) - return self - } - - // The 'defaults' alias is deprecated. It will be removed in the next major version. - self.default = self.defaults = function (key, value, defaultDescription) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.default(k, key[k]) - }) - } else { - if (defaultDescription) options.defaultDescription[key] = defaultDescription - if (typeof value === 'function') { - if (!options.defaultDescription[key]) options.defaultDescription[key] = usage.functionDescription(value) - value = value.call() - } - options.default[key] = value - } - return self - } - - self.alias = function (x, y) { - if (typeof x === 'object') { - Object.keys(x).forEach(function (key) { - self.alias(key, x[key]) - }) - } else { - options.alias[x] = (options.alias[x] || []).concat(y) - } - return self - } - - self.count = function (counts) { - options.count.push.apply(options.count, [].concat(counts)) - return self - } - - self.demand = self.required = self.require = function (keys, max, msg) { - // you can optionally provide a 'max' key, - // which will raise an exception if too many '_' - // options are provided. - - if (Array.isArray(max)) { - max.forEach(function (key) { - self.demand(key, msg) - }) - max = Infinity - } else if (typeof max !== 'number') { - msg = max - max = Infinity - } - - if (typeof keys === 'number') { - if (!options.demanded._) options.demanded._ = { count: 0, msg: null, max: max } - options.demanded._.count = keys - options.demanded._.msg = msg - } else if (Array.isArray(keys)) { - keys.forEach(function (key) { - self.demand(key, msg) - }) - } else { - if (typeof msg === 'string') { - options.demanded[keys] = { msg: msg } - } else if (msg === true || typeof msg === 'undefined') { - options.demanded[keys] = { msg: undefined } - } - } - - return self - } - - self.getDemanded = function () { - return options.demanded - } - - self.requiresArg = function (requiresArgs) { - options.requiresArg.push.apply(options.requiresArg, [].concat(requiresArgs)) - return self - } - - self.skipValidation = function (skipValidations) { - options.skipValidation.push.apply(options.skipValidation, [].concat(skipValidations)) - return self - } - - self.implies = function (key, value) { - validation.implies(key, value) - return self - } - - self.usage = function (msg, opts) { - if (!opts && typeof msg === 'object') { - opts = msg - msg = null - } - - usage.usage(msg) - - if (opts) self.options(opts) - - return self - } - - self.epilogue = self.epilog = function (msg) { - usage.epilog(msg) - return self - } - - self.fail = function (f) { - usage.failFn(f) - return self - } - - self.check = function (f) { - validation.check(f) - return self - } - - self.describe = function (key, desc) { - options.key[key] = true - usage.describe(key, desc) - return self - } - - self.global = function (globals) { - options.global.push.apply(options.global, [].concat(globals)) - return self - } - - self.pkgConf = function (key, path) { - var conf = null - - var obj = pkgUp(path) - - // If an object exists in the key, add it to options.configObjects - if (obj[key] && typeof obj[key] === 'object') { - conf = obj[key] - options.configObjects = (options.configObjects || []).concat(conf) - } - - return self - } - - var pkgs = {} - function pkgUp (path) { - var npath = path || '*' - if (pkgs[npath]) return pkgs[npath] - const readPkgUp = require('read-pkg-up') - - var obj = {} - try { - obj = readPkgUp.sync({ - cwd: path || requireMainFilename(parentRequire || require) - }) - } catch (noop) {} - - pkgs[npath] = obj.pkg || {} - return pkgs[npath] - } - - self.parse = function (args, shortCircuit) { - if (!shortCircuit) processArgs = args - return parseArgs(args, shortCircuit) - } - - self.option = self.options = function (key, opt) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.options(k, key[k]) - }) - } else { - assert(typeof opt === 'object', 'second argument to option must be an object') - - options.key[key] = true // track manually set keys. - - if (opt.alias) self.alias(key, opt.alias) - - var demand = opt.demand || opt.required || opt.require - - if (demand) { - self.demand(key, demand) - } if ('config' in opt) { - self.config(key, opt.configParser) - } if ('default' in opt) { - self.default(key, opt.default) - } if ('nargs' in opt) { - self.nargs(key, opt.nargs) - } if ('normalize' in opt) { - self.normalize(key) - } if ('choices' in opt) { - self.choices(key, opt.choices) - } if ('group' in opt) { - self.group(key, opt.group) - } if (opt.global) { - self.global(key) - } if (opt.boolean || opt.type === 'boolean') { - self.boolean(key) - if (opt.alias) self.boolean(opt.alias) - } if (opt.array || opt.type === 'array') { - self.array(key) - if (opt.alias) self.array(opt.alias) - } if (opt.number || opt.type === 'number') { - self.number(key) - if (opt.alias) self.number(opt.alias) - } if (opt.string || opt.type === 'string') { - self.string(key) - if (opt.alias) self.string(opt.alias) - } if (opt.count || opt.type === 'count') { - self.count(key) - } if (opt.defaultDescription) { - options.defaultDescription[key] = opt.defaultDescription - } if (opt.skipValidation) { - self.skipValidation(key) - } - - var desc = opt.describe || opt.description || opt.desc - if (desc) { - self.describe(key, desc) - } - - if (opt.requiresArg) { - self.requiresArg(key) - } - } - - return self - } - self.getOptions = function () { - return options - } - - self.group = function (opts, groupName) { - var existing = preservedGroups[groupName] || groups[groupName] - if (preservedGroups[groupName]) { - // the preserved group will be moved to the set of explicitly declared - // groups - delete preservedGroups[groupName] - } - - var seen = {} - groups[groupName] = (existing || []).concat(opts).filter(function (key) { - if (seen[key]) return false - return (seen[key] = true) - }) - return self - } - self.getGroups = function () { - // combine explicit and preserved groups. explicit groups should be first - return assign({}, groups, preservedGroups) - } - - // as long as options.envPrefix is not undefined, - // parser will apply env vars matching prefix to argv - self.env = function (prefix) { - if (prefix === false) options.envPrefix = undefined - else options.envPrefix = prefix || '' - return self - } - - self.wrap = function (cols) { - usage.wrap(cols) - return self - } - - var strict = false - self.strict = function () { - strict = true - return self - } - self.getStrict = function () { - return strict - } - - self.showHelp = function (level) { - if (!self.parsed) parseArgs(processArgs) // run parser, if it has not already been executed. - usage.showHelp(level) - return self - } - - var versionOpt = null - self.version = function (opt, msg, ver) { - if (arguments.length === 0) { - ver = guessVersion() - opt = 'version' - } else if (arguments.length === 1) { - ver = opt - opt = 'version' - } else if (arguments.length === 2) { - ver = msg - } - - versionOpt = opt - msg = msg || usage.deferY18nLookup('Show version number') - - usage.version(ver || undefined) - self.boolean(versionOpt) - self.global(versionOpt) - self.describe(versionOpt, msg) - return self - } - - function guessVersion () { - var obj = pkgUp() - - return obj.version || 'unknown' - } - - var helpOpt = null - self.addHelpOpt = self.help = function (opt, msg) { - opt = opt || 'help' - helpOpt = opt - self.boolean(opt) - self.global(opt) - self.describe(opt, msg || usage.deferY18nLookup('Show help')) - return self - } - - self.showHelpOnFail = function (enabled, message) { - usage.showHelpOnFail(enabled, message) - return self - } - - var exitProcess = true - self.exitProcess = function (enabled) { - if (typeof enabled !== 'boolean') { - enabled = true - } - exitProcess = enabled - return self - } - self.getExitProcess = function () { - return exitProcess - } - - var completionCommand = null - self.completion = function (cmd, desc, fn) { - // a function to execute when generating - // completions can be provided as the second - // or third argument to completion. - if (typeof desc === 'function') { - fn = desc - desc = null - } - - // register the completion command. - completionCommand = cmd || 'completion' - if (!desc && desc !== false) { - desc = 'generate bash completion script' - } - self.command(completionCommand, desc) - - // a function can be provided - if (fn) completion.registerFunction(fn) - - return self - } - - self.showCompletionScript = function ($0) { - $0 = $0 || self.$0 - console.log(completion.generateCompletionScript($0)) - return self - } - - self.getCompletion = function (args, done) { - completion.getCompletion(args, done) - } - - self.locale = function (locale) { - if (arguments.length === 0) { - guessLocale() - return y18n.getLocale() - } - detectLocale = false - y18n.setLocale(locale) - return self - } - - self.updateStrings = self.updateLocale = function (obj) { - detectLocale = false - y18n.updateLocale(obj) - return self - } - - var detectLocale = true - self.detectLocale = function (detect) { - detectLocale = detect - return self - } - self.getDetectLocale = function () { - return detectLocale - } - - self.getUsageInstance = function () { - return usage - } - - self.getValidationInstance = function () { - return validation - } - - self.getCommandInstance = function () { - return command - } - - self.terminalWidth = function () { - return require('window-size').width - } - - Object.defineProperty(self, 'argv', { - get: function () { - var args = null - - try { - args = parseArgs(processArgs) - } catch (err) { - usage.fail(err.message, err) - } - - return args - }, - enumerable: true - }) - - function parseArgs (args, shortCircuit) { - options.__ = y18n.__ - options.configuration = pkgUp(cwd)['yargs'] || {} - const parsed = Parser.detailed(args, options) - const argv = parsed.argv - var aliases = parsed.aliases - - argv.$0 = self.$0 - self.parsed = parsed - - guessLocale() // guess locale lazily, so that it can be turned off in chain. - - // while building up the argv object, there - // are two passes through the parser. If completion - // is being performed short-circuit on the first pass. - if (shortCircuit) { - return argv - } - - // if there's a handler associated with a - // command defer processing to it. - var handlerKeys = command.getCommands() - for (var i = 0, cmd; (cmd = argv._[i]) !== undefined; i++) { - if (~handlerKeys.indexOf(cmd) && cmd !== completionCommand) { - setPlaceholderKeys(argv) - return command.runCommand(cmd, self, parsed) - } - } - - // generate a completion script for adding to ~/.bashrc. - if (completionCommand && ~argv._.indexOf(completionCommand) && !argv[completion.completionKey]) { - if (exitProcess) setBlocking(true) - self.showCompletionScript() - if (exitProcess) { - process.exit(0) - } - } - - // we must run completions first, a user might - // want to complete the --help or --version option. - if (completion.completionKey in argv) { - if (exitProcess) setBlocking(true) - - // we allow for asynchronous completions, - // e.g., loading in a list of commands from an API. - var completionArgs = args.slice(args.indexOf('--' + completion.completionKey) + 1) - completion.getCompletion(completionArgs, function (completions) { - ;(completions || []).forEach(function (completion) { - console.log(completion) - }) - - if (exitProcess) { - process.exit(0) - } - }) - return - } - - var skipValidation = false - - // Handle 'help' and 'version' options - Object.keys(argv).forEach(function (key) { - if (key === helpOpt && argv[key]) { - if (exitProcess) setBlocking(true) - - skipValidation = true - self.showHelp('log') - if (exitProcess) { - process.exit(0) - } - } else if (key === versionOpt && argv[key]) { - if (exitProcess) setBlocking(true) - - skipValidation = true - usage.showVersion() - if (exitProcess) { - process.exit(0) - } - } - }) - - // Check if any of the options to skip validation were provided - if (!skipValidation && options.skipValidation.length > 0) { - skipValidation = Object.keys(argv).some(function (key) { - return options.skipValidation.indexOf(key) >= 0 - }) - } - - // If the help or version options where used and exitProcess is false, - // or if explicitly skipped, we won't run validations - if (!skipValidation) { - if (parsed.error) throw parsed.error - - // if we're executed via bash completion, don't - // bother with validation. - if (!argv[completion.completionKey]) { - validation.nonOptionCount(argv) - validation.missingArgumentValue(argv) - validation.requiredArguments(argv) - if (strict) validation.unknownArguments(argv, aliases) - validation.customChecks(argv, aliases) - validation.limitedChoices(argv) - validation.implications(argv) - } - } - - setPlaceholderKeys(argv) - - return argv - } - - function guessLocale () { - if (!detectLocale) return - - try { - const osLocale = require('os-locale') - self.locale(osLocale.sync({ spawn: false })) - } catch (err) { - // if we explode looking up locale just noop - // we'll keep using the default language 'en'. - } - } - - function setPlaceholderKeys (argv) { - Object.keys(options.key).forEach(function (key) { - // don't set placeholder keys for dot - // notation options 'foo.bar'. - if (~key.indexOf('.')) return - if (typeof argv[key] === 'undefined') argv[key] = undefined - }) - } - - return self -} - -// rebase an absolute path to a relative one with respect to a base directory -// exported for tests -exports.rebase = rebase -function rebase (base, dir) { - return path.relative(base, dir) -} diff --git a/node_modules/solc/package.json b/node_modules/solc/package.json deleted file mode 100644 index feee0ac..0000000 --- a/node_modules/solc/package.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "_args": [ - [ - "solc@^0.4.1", - "/Users/jbaylina/git/MVP/node_modules/ethconnector" - ] - ], - "_from": "solc@>=0.4.1 <0.5.0", - "_id": "solc@0.4.2", - "_inCache": true, - "_installable": true, - "_location": "/solc", - "_nodeVersion": "5.10.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/solc-0.4.2.tgz_1474128844806_0.6797309226822108" - }, - "_npmUser": { - "email": "c@ethdev.com", - "name": "chriseth" - }, - "_npmVersion": "3.8.3", - "_phantomChildren": { - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "lodash.assign": "4.2.0", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "window-size": "0.2.0", - "y18n": "3.2.1", - "yargs-parser": "2.4.1" - }, - "_requested": { - "name": "solc", - "raw": "solc@^0.4.1", - "rawSpec": "^0.4.1", - "scope": null, - "spec": ">=0.4.1 <0.5.0", - "type": "range" - }, - "_requiredBy": [ - "/ethconnector", - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/solc/-/solc-0.4.2.tgz", - "_shasum": "638cfe9adb16fc7b2205150071ccdfb6b7af2742", - "_shrinkwrap": null, - "_spec": "solc@^0.4.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethconnector", - "author": { - "name": "chriseth" - }, - "bin": { - "solcjs": "solcjs" - }, - "bugs": { - "url": "https://github.com/ethereum/solc-js/issues" - }, - "dependencies": { - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "yargs": "^4.7.1" - }, - "description": "Solidity compiler", - "devDependencies": { - "semistandard": "^8.0.0", - "tape": "^4.5.1", - "tape-spawn": "^1.4.2" - }, - "directories": {}, - "dist": { - "shasum": "638cfe9adb16fc7b2205150071ccdfb6b7af2742", - "tarball": "https://registry.npmjs.org/solc/-/solc-0.4.2.tgz" - }, - "files": [ - "index.js", - "solcjs", - "soljson.js", - "wrapper.js" - ], - "gitHead": "a6ed1adc666f55274d0824dd3b271f8d07c1ec15", - "homepage": "https://github.com/ethereum/solc-js#readme", - "keywords": [ - "ethereum", - "solidity", - "compiler" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "c@ethdev.com", - "name": "chriseth" - }, - { - "email": "d11e9@turkd.net", - "name": "d11e9" - } - ], - "name": "solc", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ethereum/solc-js.git" - }, - "scripts": { - "lint": "semistandard", - "prepublish": "./downloadCurrentVersion.js", - "test": "tape ./test/index.js" - }, - "semistandard": { - "ignore": [ - "soljson.js" - ] - }, - "version": "0.4.2" -} diff --git a/node_modules/solc/solcjs b/node_modules/solc/solcjs deleted file mode 100755 index eec74d6..0000000 --- a/node_modules/solc/solcjs +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env node - -var fs = require('fs'); -var path = require('path'); -var solc = require('./index.js'); -// FIXME: remove annoying exception catcher of Emscripten -// see https://github.com/chriseth/browser-solidity/issues/167 -process.removeAllListeners('uncaughtException'); - -var yargs = require('yargs') - .usage('Usage: $0 [options] [input_file...]') - .option('version', { - describe: 'Show version and exit.', - type: 'boolean' - }) - .option('optimize', { - describe: 'Enable bytecode optimizer.', - type: 'boolean' - }) - .option('bin', { - describe: 'Binary of the contracts in hex.', - type: 'boolean' - }) - .option('abi', { - describe: 'ABI of the contracts.', - type: 'boolean' - }) - .option('output-dir', { - alias: 'o', - describe: 'Output directory for the contracts.', - type: 'string' - }) - .global([ 'version', 'optimize' ]) - .version(function() { return solc.version(); }) - .showHelpOnFail(false, 'Specify --help for available options') - .help() - .demand(1, 'Must provide a file'); - -var argv = yargs.argv; -var files = argv._; -var destination = argv['output-dir'] || '.' - -function abort (msg) { - console.log(msg || 'Error occured'); - process.exit(1); -} - -if (!(argv.bin || argv.abi)) { - abort('Invalid option selected'); -} - -var sources = {}; - -for (var i = 0; i < files.length; i++) { - try { - sources[ files[i] ] = fs.readFileSync(files[i]).toString(); - } catch (e) { - abort('Error reading ' + files[i] + ': ' + e); - } -} - -var output = solc.compile({ sources: sources }, argv.optimize ? 1 : 0); - -for (var contractName in output.contracts) { - if (argv.bin) { - fs.writeFileSync(path.join(destination, contractName + '.bin'), output.contracts[contractName].bytecode); - } - - if (argv.abi) { - fs.writeFileSync(path.join(destination, contractName + '.abi'), output.contracts[contractName].interface); - } -} diff --git a/node_modules/solc/soljson.js b/node_modules/solc/soljson.js deleted file mode 100644 index 22cd424..0000000 --- a/node_modules/solc/soljson.js +++ /dev/null @@ -1,23 +0,0 @@ -var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){throw"NO_DYNAMIC_EXECUTION was set, cannot eval"}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],addFunction:(function(func){for(var i=0;i=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){abort("NO_DYNAMIC_EXECUTION was set, cannot eval - ccall/cwrap are not functional")}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module["stringToUTF16"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module["lengthBytesUTF16"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module["stringToUTF32"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}Module["lengthBytesUTF32"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function enlargeMemory(){var OLD_TOTAL_MEMORY=TOTAL_MEMORY;var LIMIT=Math.pow(2,31);if(DYNAMICTOP>=LIMIT)return false;while(TOTAL_MEMORY<=DYNAMICTOP){if(TOTAL_MEMORY=LIMIT)return false;try{if(ArrayBuffer.transfer){buffer=ArrayBuffer.transfer(buffer,TOTAL_MEMORY)}else{var oldHEAP8=HEAP8;buffer=new ArrayBuffer(TOTAL_MEMORY)}}catch(e){return false}var success=_emscripten_replace_memory(buffer);if(!success)return false;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer);if(!ArrayBuffer.transfer){HEAP8.set(oldHEAP8)}return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+333120;__ATINIT__.push({func:(function(){__GLOBAL__I_000101()})},{func:(function(){__GLOBAL__sub_I_ASTUtils_cpp()})},{func:(function(){__GLOBAL__sub_I_ExpressionCompiler_cpp()})},{func:(function(){__GLOBAL__sub_I_CompilerContext_cpp()})},{func:(function(){__GLOBAL__sub_I_Compiler_cpp()})},{func:(function(){__GLOBAL__sub_I_CompilerUtils_cpp()})},{func:(function(){__GLOBAL__sub_I_ContractCompiler_cpp()})},{func:(function(){__GLOBAL__sub_I_LValue_cpp()})},{func:(function(){__GLOBAL__sub_I_ArrayUtils_cpp()})},{func:(function(){__GLOBAL__sub_I_ASTPrinter_cpp()})},{func:(function(){__GLOBAL__sub_I_CompilerStack_cpp()})},{func:(function(){__GLOBAL__sub_I_ASTJsonConverter_cpp()})},{func:(function(){__GLOBAL__sub_I_Types_cpp()})},{func:(function(){__GLOBAL__sub_I_AST_cpp()})},{func:(function(){__GLOBAL__sub_I_SyntaxChecker_cpp()})},{func:(function(){__GLOBAL__sub_I_ConstantEvaluator_cpp()})},{func:(function(){__GLOBAL__sub_I_DeclarationContainer_cpp()})},{func:(function(){__GLOBAL__sub_I_Why3Translator_cpp()})},{func:(function(){__GLOBAL__sub_I_NameAndTypeResolver_cpp()})},{func:(function(){__GLOBAL__sub_I_GasEstimator_cpp()})},{func:(function(){__GLOBAL__sub_I_Exceptions_cpp()})},{func:(function(){__GLOBAL__sub_I_SourceReferenceFormatter_cpp()})},{func:(function(){__GLOBAL__sub_I_InterfaceHandler_cpp()})},{func:(function(){__GLOBAL__sub_I_Version_cpp()})},{func:(function(){__GLOBAL__sub_I_Scanner_cpp()})},{func:(function(){__GLOBAL__sub_I_DocStringParser_cpp()})},{func:(function(){__GLOBAL__sub_I_Parser_cpp()})},{func:(function(){__GLOBAL__sub_I_ParserBase_cpp()})},{func:(function(){__GLOBAL__sub_I_Token_cpp()})},{func:(function(){__GLOBAL__sub_I_AsmStack_cpp()})},{func:(function(){__GLOBAL__sub_I_AsmCodeGen_cpp()})},{func:(function(){__GLOBAL__sub_I_AsmParser_cpp()})},{func:(function(){__GLOBAL__sub_I_iostream_cpp()})},{func:(function(){___cxx_global_var_init_13_446()})},{func:(function(){___cxx_global_var_init_12()})},{func:(function(){___cxx_global_var_init_13()})},{func:(function(){__GLOBAL__sub_I_thread_cpp()})},{func:(function(){__GLOBAL__sub_I_future_cpp()})},{func:(function(){__GLOBAL__sub_I_random_device_cpp()})},{func:(function(){__GLOBAL__sub_I_operations_cpp()})},{func:(function(){__GLOBAL__sub_I_portability_cpp()})},{func:(function(){__GLOBAL__sub_I_error_code_cpp()})},{func:(function(){__GLOBAL__sub_I_CommonData_cpp()})},{func:(function(){__GLOBAL__sub_I_CommonIO_cpp()})},{func:(function(){__GLOBAL__sub_I_SHA3_cpp()})},{func:(function(){__GLOBAL__sub_I_json_value_cpp()})},{func:(function(){__GLOBAL__sub_I_CommonSubexpressionEliminator_cpp()})},{func:(function(){__GLOBAL__sub_I_SemanticInformation_cpp()})},{func:(function(){__GLOBAL__sub_I_ConstantOptimiser_cpp()})},{func:(function(){__GLOBAL__sub_I_jsonCompiler_cpp()})},{func:(function(){__GLOBAL__sub_I_GasMeter_cpp()})},{func:(function(){__GLOBAL__sub_I_LinkerObject_cpp()})},{func:(function(){__GLOBAL__sub_I_AssemblyItem_cpp()})},{func:(function(){__GLOBAL__sub_I_Assembly_cpp()})},{func:(function(){__GLOBAL__sub_I_ExpressionClasses_cpp()})},{func:(function(){__GLOBAL__sub_I_Instruction_cpp()})},{func:(function(){__GLOBAL__sub_I_PathGasMeter_cpp()})},{func:(function(){__GLOBAL__sub_I_KnownState_cpp()})},{func:(function(){__GLOBAL__sub_I_ControlFlowGraph_cpp()})},{func:(function(){__GLOBAL__sub_I_BlockDeduplicator_cpp()})},{func:(function(){__GLOBAL__sub_I_TypeChecker_cpp()})},{func:(function(){__GLOBAL__sub_I_DocStringAnalyser_cpp()})},{func:(function(){__GLOBAL__sub_I_ReferencesResolver_cpp()})},{func:(function(){__GLOBAL__sub_I_GlobalContext_cpp()})},{func:(function(){__GLOBAL__sub_I_SemVerHandler_cpp()})});allocate([204,186,0,0,8,23,3,0,28,187,0,0,247,22,3,0,0,0,0,0,2,0,0,0,232,34,0,0,3,236,255,255,8,0,0,0,3,232,255,255,28,187,0,0,225,22,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,28,187,0,0,27,23,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,28,187,0,0,58,23,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,244,186,0,0,66,25,3,0,248,68,0,0,0,0,0,0,244,186,0,0,136,25,3,0,184,68,0,0,0,0,0,0,204,186,0,0,223,25,3,0,204,186,0,0,3,26,3,0,28,187,0,0,202,25,3,0,0,0,0,0,2,0,0,0,152,0,0,0,0,0,0,0,160,0,0,0,2,4,0,0,204,186,0,0,55,27,3,0,28,187,0,0,232,26,3,0,0,0,0,0,2,0,0,0,96,0,0,0,2,0,0,0,200,0,0,0,3,224,255,255,204,186,0,0,200,27,3,0,244,186,0,0,94,27,3,0,240,0,0,0,0,0,0,0,204,186,0,0,147,28,3,0,244,186,0,0,9,28,3,0,8,1,0,0,0,0,0,0,204,186,0,0,234,28,3,0,244,186,0,0,180,28,3,0,32,1,0,0,0,0,0,0,204,186,0,0,3,30,3,0,244,186,0,0,27,29,3,0,56,1,0,0,0,0,0,0,204,186,0,0,157,30,3,0,204,186,0,0,1,32,3,0,244,186,0,0,46,31,3,0,88,1,0,0,0,0,0,0,204,186,0,0,118,32,3,0,28,187,0,0,170,33,3,0,0,0,0,0,1,0,0,0,152,1,0,0,2,4,0,0,204,186,0,0,13,34,3,0,204,186,0,0,204,33,3,0,244,186,0,0,116,34,3,0,80,35,0,0,0,0,0,0,28,187,0,0,146,34,3,0,0,0,0,0,2,0,0,0,208,1,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,236,34,3,0,0,0,0,0,2,0,0,0,240,1,0,0,2,0,0,0,8,0,0,0,2,28,0,0,244,186,0,0,51,35,3,0,160,1,0,0,0,0,0,0,28,187,0,0,148,35,3,0,0,0,0,0,2,0,0,0,32,2,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,233,35,3,0,0,0,0,0,2,0,0,0,64,2,0,0,2,0,0,0,8,0,0,0,2,28,0,0,244,186,0,0,43,36,3,0,80,2,0,0,0,0,0,0,244,186,0,0,64,36,3,0,160,1,0,0,0,0,0,0,244,186,0,0,198,36,3,0,8,1,0,0,0,0,0,0,244,186,0,0,2,37,3,0,120,1,0,0,0,0,0,0,28,187,0,0,223,37,3,0,0,0,0,0,2,0,0,0,160,2,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,63,38,3,0,0,0,0,0,2,0,0,0,192,2,0,0,2,0,0,0,8,0,0,0,2,28,0,0,244,186,0,0,140,38,3,0,80,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,236,39,3,0,8,1,0,0,0,0,0,0,28,187,0,0,74,40,3,0,0,0,0,0,2,0,0,0,16,3,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,136,40,3,0,0,0,0,0,2,0,0,0,8,0,0,0,2,0,0,0,240,34,0,0,2,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,49,41,3,0,8,1,0,0,0,0,0,0,28,187,0,0,139,41,3,0,0,0,0,0,2,0,0,0,112,3,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,197,41,3,0,0,0,0,0,2,0,0,0,8,0,0,0,2,0,0,0,184,34,0,0,2,20,0,0,244,186,0,0,236,41,3,0,160,3,0,0,0,0,0,0,244,186,0,0,27,42,3,0,152,0,0,0,0,0,0,0,28,187,0,0,179,42,3,0,0,0,0,0,2,0,0,0,208,3,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,17,43,3,0,0,0,0,0,2,0,0,0,160,1,0,0,2,0,0,0,8,0,0,0,2,28,0,0,0,0,0,0,0,0,0,0,244,186,0,0,138,43,3,0,160,3,0,0,0,0,0,0,244,186,0,0,190,47,3,0,160,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,32,47,3,0,8,1,0,0,0,0,0,0,244,186,0,0,105,47,3,0,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,235,48,3,0,48,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,27,49,3,0,160,3,0,0,0,0,0,0,244,186,0,0,101,49,3,0,160,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,187,0,0,28,50,3,0,0,0,0,0,2,0,0,0,224,4,0,0,2,0,0,0,200,0,0,0,3,224,255,255,28,187,0,0,92,50,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,244,186,0,0,132,50,3,0,240,0,0,0,0,0,0,0,244,186,0,0,181,50,3,0,8,1,0,0,0,0,0,0,28,187,0,0,161,51,3,0,0,0,0,0,2,0,0,0,56,5,0,0,2,0,0,0,200,0,0,0,3,224,255,255,28,187,0,0,218,51,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,244,186,0,0,245,51,3,0,184,68,0,0,0,0,0,0,244,186,0,0,36,52,3,0,248,68,0,0,0,0,0,0,244,186,0,0,87,52,3,0,200,68,0,0,0,0,0,0,1,0,0,0,0,0,0,0,130,128,0,0,0,0,0,0,138,128,0,0,0,0,0,128,0,128,0,128,0,0,0,128,139,128,0,0,0,0,0,0,1,0,0,128,0,0,0,0,129,128,0,128,0,0,0,128,9,128,0,0,0,0,0,128,138,0,0,0,0,0,0,0,136,0,0,0,0,0,0,0,9,128,0,128,0,0,0,0,10,0,0,128,0,0,0,0,139,128,0,128,0,0,0,0,139,0,0,0,0,0,0,128,137,128,0,0,0,0,0,128,3,128,0,0,0,0,0,128,2,128,0,0,0,0,0,128,128,0,0,0,0,0,0,128,10,128,0,0,0,0,0,0,10,0,0,128,0,0,0,128,129,128,0,128,0,0,0,128,128,128,0,0,0,0,0,128,1,0,0,128,0,0,0,0,8,128,0,128,0,0,0,128,244,186,0,0,135,52,3,0,80,6,0,0,0,0,0,0,204,186,0,0,143,56,3,0,244,186,0,0,171,56,3,0,104,6,0,0,0,0,0,0,204,186,0,0,194,56,3,0,244,186,0,0,214,56,3,0,200,68,0,0,0,0,0,0,0,0,0,0,0,0,0,128,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,128,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,255,244,186,0,0,28,57,3,0,232,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,7,63,3,0,176,6,0,0,0,0,0,0,244,186,0,0,243,62,3,0,176,6,0,0,0,0,0,0,204,186,0,0,215,63,3,0,244,186,0,0,195,63,3,0,0,7,0,0,0,0,0,0,244,186,0,0,230,63,3,0,0,7,0,0,0,0,0,0,204,186,0,0,29,64,3,0,244,186,0,0,252,63,3,0,40,7,0,0,0,0,0,0,204,186,0,0,51,64,3,0,244,186,0,0,81,64,3,0,64,7,0,0,0,0,0,0,28,187,0,0,70,69,3,0,0,0,0,0,2,0,0,0,120,7,0,0,2,0,0,0,200,0,0,0,3,224,255,255,28,187,0,0,141,69,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,28,187,0,0,186,69,3,0,0,0,0,0,2,0,0,0,176,7,0,0,2,0,0,0,200,0,0,0,3,216,255,255,28,187,0,0,4,70,3,0,0,0,0,0,1,0,0,0,200,7,0,0,3,220,255,255,28,187,0,0,38,70,3,0,0,0,0,0,1,0,0,0,224,7,0,0,3,224,255,255,28,187,0,0,69,70,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,187,0,0,99,70,3,0,0,0,0,0,2,0,0,0,48,8,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,184,70,3,0,0,0,0,0,2,0,0,0,64,35,0,0,2,0,0,0,8,0,0,0,2,8,0,0,28,187,0,0,250,70,3,0,0,0,0,0,2,0,0,0,112,8,0,0,2,0,0,0,200,0,0,0,3,216,255,255,28,187,0,0,72,71,3,0,0,0,0,0,1,0,0,0,200,7,0,0,3,220,255,255,28,187,0,0,110,71,3,0,0,0,0,0,2,0,0,0,200,7,0,0,2,0,0,0,200,0,0,0,3,220,255,255,244,186,0,0,181,71,3,0,232,34,0,0,0,0,0,0,244,186,0,0,21,72,3,0,208,8,0,0,0,0,0,0,204,186,0,0,209,71,3,0,204,186,0,0,141,72,3,0,244,186,0,0,175,72,3,0,248,8,0,0,0,0,0,0,244,186,0,0,201,72,3,0,248,8,0,0,0,0,0,0,204,186,0,0,115,73,3,0,244,186,0,0,154,73,3,0,248,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,28,187,0,0,28,76,3,0,0,0,0,0,2,0,0,0,216,9,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,115,76,3,0,0,0,0,0,2,0,0,0,112,35,0,0,2,0,0,0,8,0,0,0,2,8,0,0,0,0,0,0,0,0,0,0,244,186,0,0,108,80,3,0,208,67,0,0,0,0,0,0,28,187,0,0,73,81,3,0,0,0,0,0,2,0,0,0,224,7,0,0,2,0,0,0,200,0,0,0,3,224,255,255,244,186,0,0,186,82,3,0,40,69,0,0,0,0,0,0,28,187,0,0,255,82,3,0,0,0,0,0,2,0,0,0,96,10,0,0,2,0,0,0,200,0,0,0,3,224,255,255,28,187,0,0,71,83,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,0,0,0,0,0,0,0,0,244,186,0,0,212,84,3,0,152,10,0,0,0,0,0,0,204,186,0,0,193,84,3,0,204,186,0,0,44,85,3,0,244,186,0,0,114,85,3,0,152,10,0,0,0,0,0,0,204,186,0,0,95,85,3,0,244,186,0,0,221,85,3,0,152,10,0,0,0,0,0,0,204,186,0,0,202,85,3,0,244,186,0,0,72,86,3,0,152,10,0,0,0,0,0,0,204,186,0,0,53,86,3,0,244,186,0,0,179,86,3,0,152,10,0,0,0,0,0,0,204,186,0,0,160,86,3,0,244,186,0,0,30,87,3,0,152,10,0,0,0,0,0,0,204,186,0,0,11,87,3,0,244,186,0,0,137,87,3,0,152,10,0,0,0,0,0,0,204,186,0,0,118,87,3,0,244,186,0,0,244,87,3,0,152,10,0,0,0,0,0,0,204,186,0,0,225,87,3,0,244,186,0,0,95,88,3,0,152,10,0,0,0,0,0,0,204,186,0,0,76,88,3,0,244,186,0,0,62,90,3,0,136,11,0,0,0,0,0,0,244,186,0,0,183,88,3,0,128,11,0,0,0,0,0,0,204,186,0,0,115,89,3,0,204,186,0,0,51,91,3,0,244,186,0,0,191,92,3,0,136,11,0,0,0,0,0,0,244,186,0,0,4,92,3,0,128,11,0,0,0,0,0,0,244,186,0,0,111,94,3,0,136,11,0,0,0,0,0,0,244,186,0,0,179,93,3,0,128,11,0,0,0,0,0,0,244,186,0,0,36,96,3,0,136,11,0,0,0,0,0,0,244,186,0,0,100,95,3,0,128,11,0,0,0,0,0,0,244,186,0,0,214,97,3,0,136,11,0,0,0,0,0,0,244,186,0,0,29,97,3,0,128,11,0,0,0,0,0,0,244,186,0,0,219,98,3,0,152,10,0,0,0,0,0,0,204,186,0,0,200,98,3,0,244,186,0,0,70,99,3,0,152,10,0,0,0,0,0,0,204,186,0,0,51,99,3,0,244,186,0,0,177,99,3,0,152,10,0,0,0,0,0,0,204,186,0,0,158,99,3,0,244,186,0,0,28,100,3,0,152,10,0,0,0,0,0,0,204,186,0,0,9,100,3,0,244,186,0,0,135,100,3,0,152,10,0,0,0,0,0,0,204,186,0,0,116,100,3,0,244,186,0,0,242,100,3,0,152,10,0,0,0,0,0,0,204,186,0,0,223,100,3,0,244,186,0,0,93,101,3,0,152,10,0,0,0,0,0,0,204,186,0,0,74,101,3,0,244,186,0,0,200,101,3,0,152,10,0,0,0,0,0,0,204,186,0,0,181,101,3,0,244,186,0,0,51,102,3,0,152,10,0,0,0,0,0,0,204,186,0,0,32,102,3,0,244,186,0,0,158,102,3,0,152,10,0,0,0,0,0,0,204,186,0,0,139,102,3,0,244,186,0,0,9,103,3,0,152,10,0,0,0,0,0,0,204,186,0,0,246,102,3,0,244,186,0,0,116,103,3,0,152,10,0,0,0,0,0,0,204,186,0,0,97,103,3,0,244,186,0,0,223,103,3,0,152,10,0,0,0,0,0,0,204,186,0,0,204,103,3,0,244,186,0,0,74,104,3,0,152,10,0,0,0,0,0,0,204,186,0,0,55,104,3,0,244,186,0,0,181,104,3,0,152,10,0,0,0,0,0,0,204,186,0,0,162,104,3,0,244,186,0,0,32,105,3,0,152,10,0,0,0,0,0,0,204,186,0,0,13,105,3,0,244,186,0,0,139,105,3,0,152,10,0,0,0,0,0,0,204,186,0,0,120,105,3,0,244,186,0,0,246,105,3,0,152,10,0,0,0,0,0,0,204,186,0,0,227,105,3,0,244,186,0,0,97,106,3,0,152,10,0,0,0,0,0,0,204,186,0,0,78,106,3,0,244,186,0,0,204,106,3,0,152,10,0,0,0,0,0,0,204,186,0,0,185,106,3,0,244,186,0,0,55,107,3,0,152,10,0,0,0,0,0,0,204,186,0,0,36,107,3,0,244,186,0,0,162,107,3,0,152,10,0,0,0,0,0,0,204,186,0,0,143,107,3,0,244,186,0,0,13,108,3,0,152,10,0,0,0,0,0,0,204,186,0,0,250,107,3,0,244,186,0,0,120,108,3,0,152,10,0,0,0,0,0,0,204,186,0,0,101,108,3,0,244,186,0,0,227,108,3,0,152,10,0,0,0,0,0,0,204,186,0,0,208,108,3,0,244,186,0,0,78,109,3,0,152,10,0,0,0,0,0,0,204,186,0,0,59,109,3,0,244,186,0,0,185,109,3,0,152,10,0,0,0,0,0,0,204,186,0,0,166,109,3,0,244,186,0,0,152,112,3,0,152,10,0,0,0,0,0,0,204,186,0,0,17,110,3,0,244,186,0,0,3,113,3,0,152,10,0,0,0,0,0,0,204,186,0,0,240,112,3,0,244,186,0,0,110,113,3,0,152,10,0,0,0,0,0,0,204,186,0,0,91,113,3,0,244,186,0,0,217,113,3,0,152,10,0,0,0,0,0,0,204,186,0,0,198,113,3,0,244,186,0,0,68,114,3,0,152,10,0,0,0,0,0,0,204,186,0,0,49,114,3,0,244,186,0,0,175,114,3,0,152,10,0,0,0,0,0,0,204,186,0,0,156,114,3,0,244,186,0,0,26,115,3,0,152,10,0,0,0,0,0,0,204,186,0,0,7,115,3,0,244,186,0,0,133,115,3,0,152,10,0,0,0,0,0,0,204,186,0,0,114,115,3,0,244,186,0,0,240,115,3,0,152,10,0,0,0,0,0,0,204,186,0,0,221,115,3,0,244,186,0,0,91,116,3,0,152,10,0,0,0,0,0,0,204,186,0,0,72,116,3,0,244,186,0,0,198,116,3,0,152,10,0,0,0,0,0,0,204,186,0,0,179,116,3,0,244,186,0,0,48,117,3,0,152,10,0,0,0,0,0,0,204,186,0,0,30,117,3,0,244,186,0,0,153,117,3,0,152,10,0,0,0,0,0,0,204,186,0,0,135,117,3,0,244,186,0,0,55,120,3,0,152,10,0,0,0,0,0,0,204,186,0,0,240,117,3,0,28,187,0,0,158,119,3,0,0,0,0,0,2,0,0,0,8,16,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,244,119,3,0,0,0,0,0,2,0,0,0,80,35,0,0,2,0,0,0,8,0,0,0,2,8,0,0,244,186,0,0,160,120,3,0,152,10,0,0,0,0,0,0,204,186,0,0,142,120,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,9,121,3,0,152,10,0,0,0,0,0,0,204,186,0,0,247,120,3,0,244,186,0,0,114,121,3,0,152,10,0,0,0,0,0,0,204,186,0,0,96,121,3,0,244,186,0,0,219,121,3,0,152,10,0,0,0,0,0,0,204,186,0,0,201,121,3,0,244,186,0,0,68,122,3,0,152,10,0,0,0,0,0,0,204,186,0,0,50,122,3,0,244,186,0,0,173,122,3,0,152,10,0,0,0,0,0,0,204,186,0,0,155,122,3,0,244,186,0,0,22,123,3,0,152,10,0,0,0,0,0,0,204,186,0,0,4,123,3,0,244,186,0,0,109,123,3,0,208,67,0,0,0,0,0,0,244,186,0,0,25,124,3,0,16,17,0,0,0,0,0,0,204,186,0,0,208,123,3,0,204,186,0,0,68,125,3,0,244,186,0,0,224,129,3,0,208,67,0,0,0,0,0,0,244,186,0,0,71,133,3,0,208,67,0,0,0,0,0,0,244,186,0,0,245,133,3,0,80,17,0,0,0,0,0,0,204,186,0,0,195,133,3,0,204,186,0,0,92,134,3,0,28,187,0,0,127,134,3,0,0,0,0,0,2,0,0,0,16,0,0,0,2,0,0,0,200,0,0,0,3,228,255,255,28,187,0,0,184,134,3,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,28,187,0,0,23,170,3,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,244,186,0,0,15,167,3,0,104,20,0,0,0,0,0,0,204,186,0,0,92,160,3,0,244,186,0,0,125,160,3,0,208,67,0,0,0,0,0,0,244,186,0,0,208,160,3,0,208,67,0,0,0,0,0,0,244,186,0,0,29,161,3,0,208,67,0,0,0,0,0,0,244,186,0,0,105,161,3,0,208,67,0,0,0,0,0,0,244,186,0,0,185,161,3,0,208,67,0,0,0,0,0,0,244,186,0,0,6,162,3,0,208,67,0,0,0,0,0,0,244,186,0,0,120,162,3,0,208,67,0,0,0,0,0,0,244,186,0,0,14,164,3,0,72,18,0,0,0,0,0,0,204,186,0,0,196,162,3,0,204,186,0,0,215,164,3,0,28,187,0,0,88,165,3,0,0,0,0,0,2,0,0,0,144,17,0,0,2,0,0,0,200,0,0,0,3,224,255,255,244,186,0,0,251,165,3,0,136,18,0,0,0,0,0,0,204,186,0,0,185,165,3,0,204,186,0,0,155,166,3,0,244,186,0,0,44,167,3,0,208,67,0,0,0,0,0,0,244,186,0,0,125,167,3,0,240,0,0,0,0,0,0,0,244,186,0,0,222,167,3,0,8,1,0,0,0,0,0,0,244,186,0,0,213,168,3,0,240,0,0,0,0,0,0,0,244,186,0,0,36,169,3,0,8,1,0,0,0,0,0,0,244,186,0,0,206,169,3,0,208,67,0,0,0,0,0,0,28,187,0,0,51,170,3,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,187,0,0,217,170,3,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,244,186,0,0,42,175,3,0,72,18,0,0,0,0,0,0,204,186,0,0,227,174,3,0,244,186,0,0,250,175,3,0,208,67,0,0,0,0,0,0,244,186,0,0,74,176,3,0,208,67,0,0,0,0,0,0,244,186,0,0,155,176,3,0,208,67,0,0,0,0,0,0,244,186,0,0,231,176,3,0,208,67,0,0,0,0,0,0,244,186,0,0,144,178,3,0,168,17,0,0,0,0,0,0,244,186,0,0,186,178,3,0,208,67,0,0,0,0,0,0,244,186,0,0,31,179,3,0,208,67,0,0,0,0,0,0,244,186,0,0,124,179,3,0,208,67,0,0,0,0,0,0,28,187,0,0,132,180,3,0,0,0,0,0,1,0,0,0,16,0,0,0,0,0,0,0,28,187,0,0,161,180,3,0,0,0,0,0,1,0,0,0,0,20,0,0,0,0,0,0,204,186,0,0,187,189,3,0,244,186,0,0,67,191,3,0,208,67,0,0,0,0,0,0,28,187,0,0,188,193,3,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,28,187,0,0,90,195,3,0,0,0,0,0,2,0,0,0,48,0,0,0,2,0,0,0,200,0,0,0,3,224,255,255,28,187,0,0,152,195,3,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,28,187,0,0,216,197,3,0,0,0,0,0,1,0,0,0,152,0,0,0,0,0,0,0,244,186,0,0,240,197,3,0,168,17,0,0,0,0,0,0,244,186,0,0,16,198,3,0,104,20,0,0,0,0,0,0,244,186,0,0,44,198,3,0,104,20,0,0,0,0,0,0,244,186,0,0,77,198,3,0,168,17,0,0,0,0,0,0,28,187,0,0,110,198,3,0,0,0,0,0,2,0,0,0,168,17,0,0,2,0,0,0,216,23,0,0,2,40,0,0,244,186,0,0,146,198,3,0,104,20,0,0,0,0,0,0,244,186,0,0,184,198,3,0,104,20,0,0,0,0,0,0,244,186,0,0,219,198,3,0,168,17,0,0,0,0,0,0,244,186,0,0,253,198,3,0,168,17,0,0,0,0,0,0,244,186,0,0,23,199,3,0,104,20,0,0,0,0,0,0,28,187,0,0,54,199,3,0,0,0,0,0,3,0,0,0,184,23,0,0,2,0,0,0,216,23,0,0,2,68,0,0,224,23,0,0,2,76,0,0,244,186,0,0,90,199,3,0,168,17,0,0,0,0,0,0,28,187,0,0,127,199,3,0,0,0,0,0,2,0,0,0,184,23,0,0,2,0,0,0,216,23,0,0,2,68,0,0,244,186,0,0,163,199,3,0,104,20,0,0,0,0,0,0,28,187,0,0,199,199,3,0,0,0,0,0,2,0,0,0,184,23,0,0,2,0,0,0,216,23,0,0,2,68,0,0,244,186,0,0,232,199,3,0,104,20,0,0,0,0,0,0,244,186,0,0,1,200,3,0,184,21,0,0,0,0,0,0,244,186,0,0,37,200,3,0,184,21,0,0,0,0,0,0,244,186,0,0,74,200,3,0,184,21,0,0,0,0,0,0,244,186,0,0,98,200,3,0,184,21,0,0,0,0,0,0,28,187,0,0,129,200,3,0,0,0,0,0,2,0,0,0,104,20,0,0,2,0,0,0,216,23,0,0,2,24,0,0,244,186,0,0,155,200,3,0,8,22,0,0,0,0,0,0,244,186,0,0,187,200,3,0,8,22,0,0,0,0,0,0,244,186,0,0,209,200,3,0,8,22,0,0,0,0,0,0,244,186,0,0,247,200,3,0,8,22,0,0,0,0,0,0,244,186,0,0,20,201,3,0,232,23,0,0,0,0,0,0,244,186,0,0,52,201,3,0,232,23,0,0,0,0,0,0,244,186,0,0,82,201,3,0,8,22,0,0,0,0,0,0,244,186,0,0,107,201,3,0,8,22,0,0,0,0,0,0,244,186,0,0,129,201,3,0,8,22,0,0,0,0,0,0,244,186,0,0,152,201,3,0,8,22,0,0,0,0,0,0,244,186,0,0,174,201,3,0,8,22,0,0,0,0,0,0,244,186,0,0,220,201,3,0,8,22,0,0,0,0,0,0,244,186,0,0,1,202,3,0,104,20,0,0,0,0,0,0,244,186,0,0,29,202,3,0,232,22,0,0,0,0,0,0,244,186,0,0,58,202,3,0,232,22,0,0,0,0,0,0,244,186,0,0,86,202,3,0,232,22,0,0,0,0,0,0,244,186,0,0,119,202,3,0,232,22,0,0,0,0,0,0,244,186,0,0,151,202,3,0,232,22,0,0,0,0,0,0,244,186,0,0,184,202,3,0,232,22,0,0,0,0,0,0,244,186,0,0,214,202,3,0,232,22,0,0,0,0,0,0,244,186,0,0,245,202,3,0,232,22,0,0,0,0,0,0,244,186,0,0,19,203,3,0,232,22,0,0,0,0,0,0,244,186,0,0,48,203,3,0,248,23,0,0,0,0,0,0,244,186,0,0,76,203,3,0,248,23,0,0,0,0,0,0,244,186,0,0,122,203,3,0,248,23,0,0,0,0,0,0,28,187,0,0,95,207,3,0,0,0,0,0,2,0,0,0,168,17,0,0,2,0,0,0,200,24,0,0,2,40,0,0,204,186,0,0,95,205,3,0,204,186,0,0,55,205,3,0,244,186,0,0,19,205,3,0,8,22,0,0,0,0,0,0,244,186,0,0,240,204,3,0,232,22,0,0,0,0,0,0,244,186,0,0,123,205,3,0,24,24,0,0,0,0,0,0,244,186,0,0,161,205,3,0,40,24,0,0,0,0,0,0,204,186,0,0,199,205,3,0,244,186,0,0,230,205,3,0,24,24,0,0,0,0,0,0,244,186,0,0,14,206,3,0,24,24,0,0,0,0,0,0,244,186,0,0,57,206,3,0,24,24,0,0,0,0,0,0,244,186,0,0,135,206,3,0,120,24,0,0,0,0,0,0,204,186,0,0,97,206,3,0,28,187,0,0,191,206,3,0,0,0,0,0,2,0,0,0,40,24,0,0,2,0,0,0,112,24,0,0,2,4,0,0,244,186,0,0,228,206,3,0,120,24,0,0,0,0,0,0,244,186,0,0,6,207,3,0,120,24,0,0,0,0,0,0,244,186,0,0,48,207,3,0,40,24,0,0,0,0,0,0,204,186,0,0,132,207,3,0,244,186,0,0,163,207,3,0,224,24,0,0,0,0,0,0,244,186,0,0,210,207,3,0,40,24,0,0,0,0,0,0,28,187,0,0,246,207,3,0,0,0,0,0,2,0,0,0,40,24,0,0,2,0,0,0,112,24,0,0,2,4,0,0,28,187,0,0,33,208,3,0,0,0,0,0,2,0,0,0,40,24,0,0,2,0,0,0,112,24,0,0,2,4,0,0,244,186,0,0,79,208,3,0,208,67,0,0,0,0,0,0,28,187,0,0,160,208,3,0,0,0,0,0,2,0,0,0,40,24,0,0,2,0,0,0,112,24,0,0,2,4,0,0,244,186,0,0,206,208,3,0,40,24,0,0,0,0,0,0,28,187,0,0,249,208,3,0,0,0,0,0,2,0,0,0,96,25,0,0,2,0,0,0,112,24,0,0,2,16,0,0,244,186,0,0,39,209,3,0,208,67,0,0,0,0,0,0,244,186,0,0,118,209,3,0,40,24,0,0,0,0,0,0,244,186,0,0,152,209,3,0,40,24,0,0,0,0,0,0,244,186,0,0,190,209,3,0,168,0,0,0,0,0,0,0,244,186,0,0,219,209,3,0,168,0,0,0,0,0,0,0,244,186,0,0,251,209,3,0,168,0,0,0,0,0,0,0,244,186,0,0,31,210,3,0,168,0,0,0,0,0,0,0,244,186,0,0,66,210,3,0,168,0,0,0,0,0,0,0,244,186,0,0,98,210,3,0,168,0,0,0,0,0,0,0,244,186,0,0,128,210,3,0,168,0,0,0,0,0,0,0,244,186,0,0,159,210,3,0,32,26,0,0,0,0,0,0,244,186,0,0,185,210,3,0,32,26,0,0,0,0,0,0,244,186,0,0,213,210,3,0,168,0,0,0,0,0,0,0,244,186,0,0,238,210,3,0,168,0,0,0,0,0,0,0,244,186,0,0,8,211,3,0,168,0,0,0,0,0,0,0,244,186,0,0,38,211,3,0,168,0,0,0,0,0,0,0,244,186,0,0,67,211,3,0,168,0,0,0,0,0,0,0,244,186,0,0,92,211,3,0,168,0,0,0,0,0,0,0,244,186,0,0,122,211,3,0,168,0,0,0,0,0,0,0,244,186,0,0,150,211,3,0,168,0,0,0,0,0,0,0,244,186,0,0,176,211,3,0,168,0,0,0,0,0,0,0,28,187,0,0,3,230,3,0,0,0,0,0,2,0,0,0,0,27,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,87,230,3,0,0,0,0,0,2,0,0,0,96,35,0,0,2,0,0,0,8,0,0,0,2,8,0,0,244,186,0,0,183,230,3,0,16,35,0,0,0,0,0,0,244,186,0,0,85,231,3,0,168,0,0,0,0,0,0,0,244,186,0,0,126,231,3,0,208,67,0,0,0,0,0,0,244,186,0,0,178,233,3,0,208,67,0,0,0,0,0,0,244,186,0,0,8,234,3,0,208,67,0,0,0,0,0,0,244,186,0,0,95,234,3,0,208,67,0,0,0,0,0,0,244,186,0,0,68,235,3,0,184,17,0,0,0,0,0,0,28,187,0,0,1,238,3,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,244,186,0,0,33,238,3,0,184,17,0,0,0,0,0,0,244,186,0,0,199,245,3,0,24,28,0,0,0,0,0,0,244,186,0,0,230,245,3,0,24,28,0,0,0,0,0,0,244,186,0,0,2,246,3,0,24,28,0,0,0,0,0,0,244,186,0,0,31,246,3,0,24,28,0,0,0,0,0,0,244,186,0,0,72,246,3,0,24,28,0,0,0,0,0,0,244,186,0,0,108,246,3,0,24,28,0,0,0,0,0,0,204,186,0,0,130,252,3,0,28,187,0,0,16,253,3,0,0,0,0,0,2,0,0,0,72,0,0,0,2,0,0,0,200,0,0,0,3,224,255,255,28,187,0,0,87,253,3,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,244,186,0,0,33,6,4,0,72,18,0,0,0,0,0,0,204,186,0,0,70,4,4,0,244,186,0,0,219,9,4,0,208,8,0,0,0,0,0,0,204,186,0,0,142,9,4,0,244,186,0,0,104,28,4,0,72,18,0,0,0,0,0,0,204,186,0,0,146,26,4,0,28,187,0,0,181,29,4,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,187,0,0,138,51,4,0,0,0,0,0,1,0,0,0,184,17,0,0,0,0,0,0,28,187,0,0,96,68,4,0,0,0,0,0,1,0,0,0,16,0,0,0,3,236,255,255,244,186,0,0,198,66,4,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,187,0,0,66,67,4,0,0,0,0,0,2,0,0,0,216,28,0,0,2,0,0,0,200,0,0,0,3,224,255,255,244,186,0,0,152,67,4,0,8,1,0,0,0,0,0,0,244,186,0,0,187,71,4,0,208,67,0,0,0,0,0,0,244,186,0,0,196,72,4,0,96,29,0,0,0,0,0,0,204,186,0,0,7,72,4,0,204,186,0,0,59,73,4,0,244,186,0,0,131,73,4,0,208,67,0,0,0,0,0,0,244,186,0,0,213,73,4,0,208,67,0,0,0,0,0,0,244,186,0,0,169,76,4,0,160,29,0,0,0,0,0,0,204,186,0,0,205,75,4,0,204,186,0,0,174,77,4,0,244,186,0,0,199,78,4,0,192,29,0,0,0,0,0,0,204,186,0,0,235,77,4,0,204,186,0,0,201,79,4,0,244,186,0,0,223,80,4,0,160,29,0,0,0,0,0,0,204,186,0,0,3,80,4,0,244,186,0,0,192,82,4,0,192,29,0,0,0,0,0,0,204,186,0,0,228,81,4,0,244,186,0,0,194,83,4,0,184,17,0,0,0,0,0,0,244,186,0,0,85,84,4,0,32,30,0,0,0,0,0,0,204,186,0,0,228,83,4,0,204,186,0,0,239,84,4,0,244,186,0,0,41,85,4,0,184,17,0,0,0,0,0,0,244,186,0,0,220,85,4,0,160,29,0,0,0,0,0,0,204,186,0,0,67,85,4,0,244,186,0,0,59,87,4,0,192,29,0,0,0,0,0,0,204,186,0,0,162,86,4,0,244,186,0,0,246,93,4,0,208,67,0,0,0,0,0,0,244,186,0,0,134,101,4,0,208,67,0,0,0,0,0,0,244,186,0,0,218,101,4,0,208,67,0,0,0,0,0,0,244,186,0,0,37,102,4,0,208,67,0,0,0,0,0,0,244,186,0,0,118,102,4,0,208,67,0,0,0,0,0,0,244,186,0,0,198,102,4,0,208,67,0,0,0,0,0,0,244,186,0,0,208,103,4,0,208,67,0,0,0,0,0,0,244,186,0,0,220,104,4,0,208,67,0,0,0,0,0,0,244,186,0,0,48,105,4,0,208,67,0,0,0,0,0,0,244,186,0,0,129,105,4,0,208,67,0,0,0,0,0,0,244,186,0,0,211,105,4,0,208,67,0,0,0,0,0,0,244,186,0,0,52,106,4,0,208,67,0,0,0,0,0,0,244,186,0,0,140,106,4,0,208,67,0,0,0,0,0,0,244,186,0,0,228,106,4,0,208,67,0,0,0,0,0,0,244,186,0,0,69,107,4,0,208,67,0,0,0,0,0,0,244,186,0,0,152,107,4,0,208,67,0,0,0,0,0,0,244,186,0,0,233,107,4,0,208,67,0,0,0,0,0,0,244,186,0,0,60,108,4,0,208,67,0,0,0,0,0,0,244,186,0,0,140,108,4,0,208,67,0,0,0,0,0,0,244,186,0,0,229,108,4,0,208,67,0,0,0,0,0,0,244,186,0,0,46,109,4,0,208,67,0,0,0,0,0,0,244,186,0,0,120,109,4,0,208,67,0,0,0,0,0,0,244,186,0,0,193,109,4,0,208,67,0,0,0,0,0,0,244,186,0,0,13,110,4,0,208,67,0,0,0,0,0,0,244,186,0,0,88,110,4,0,208,67,0,0,0,0,0,0,244,186,0,0,87,111,4,0,208,67,0,0,0,0,0,0,244,186,0,0,166,111,4,0,208,67,0,0,0,0,0,0,244,186,0,0,253,111,4,0,208,67,0,0,0,0,0,0,244,186,0,0,74,112,4,0,208,67,0,0,0,0,0,0,244,186,0,0,147,112,4,0,208,67,0,0,0,0,0,0,244,186,0,0,229,112,4,0,208,67,0,0,0,0,0,0,244,186,0,0,60,113,4,0,208,67,0,0,0,0,0,0,244,186,0,0,148,113,4,0,208,67,0,0,0,0,0,0,244,186,0,0,234,113,4,0,208,67,0,0,0,0,0,0,244,186,0,0,62,114,4,0,208,67,0,0,0,0,0,0,244,186,0,0,204,114,4,0,208,8,0,0,0,0,0,0,204,186,0,0,149,114,4,0,244,186,0,0,55,115,4,0,208,67,0,0,0,0,0,0,244,186,0,0,138,115,4,0,208,67,0,0,0,0,0,0,244,186,0,0,223,115,4,0,208,67,0,0,0,0,0,0,244,186,0,0,54,116,4,0,208,67,0,0,0,0,0,0,244,186,0,0,143,116,4,0,208,67,0,0,0,0,0,0,244,186,0,0,222,116,4,0,208,67,0,0,0,0,0,0,244,186,0,0,53,117,4,0,208,67,0,0,0,0,0,0,244,186,0,0,137,117,4,0,208,67,0,0,0,0,0,0,244,186,0,0,221,117,4,0,208,67,0,0,0,0,0,0,244,186,0,0,69,128,4,0,152,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,74,129,4,0,168,33,0,0,0,0,0,0,28,187,0,0,96,128,4,0,0,0,0,0,2,0,0,0,136,33,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,187,128,4,0,0,0,0,0,2,0,0,0,64,33,0,0,2,0,0,0,8,0,0,0,2,12,0,0,244,186,0,0,127,129,4,0,184,33,0,0,0,0,0,0,244,186,0,0,251,129,4,0,200,33,0,0,0,0,0,0,244,186,0,0,119,130,4,0,216,33,0,0,0,0,0,0,204,186,0,0,243,130,4,0,244,186,0,0,51,131,4,0,208,67,0,0,0,0,0,0,244,186,0,0,180,134,4,0,72,18,0,0,0,0,0,0,204,186,0,0,8,134,4,0,0,0,0,0,0,0,0,0,244,186,0,0,132,138,4,0,208,67,0,0,0,0,0,0,28,187,0,0,215,139,4,0,0,0,0,0,2,0,0,0,64,34,0,0,2,0,0,0,200,0,0,0,3,244,255,255,28,187,0,0,40,140,4,0,0,0,0,0,2,0,0,0,96,34,0,0,2,0,0,0,8,0,0,0,2,4,0,0,244,186,0,0,102,140,4,0,232,34,0,0,0,0,0,0,204,186,0,0,155,141,4,0,204,186,0,0,109,141,4,0,204,186,0,0,61,141,4,0,204,186,0,0,14,141,4,0,204,186,0,0,167,135,4,0,204,186,0,0,233,140,4,0,204,186,0,0,202,140,4,0,204,186,0,0,169,140,4,0,204,186,0,0,108,136,4,0,244,186,0,0,186,141,4,0,232,34,0,0,0,0,0,0,244,186,0,0,199,141,4,0,184,34,0,0,0,0,0,0,244,186,0,0,224,141,4,0,184,34,0,0,0,0,0,0,204,186,0,0,245,141,4,0,244,186,0,0,2,142,4,0,232,34,0,0,0,0,0,0,244,186,0,0,37,142,4,0,232,34,0,0,0,0,0,0,244,186,0,0,20,142,4,0,0,35,0,0,0,0,0,0,244,186,0,0,53,142,4,0,0,35,0,0,0,0,0,0,244,186,0,0,74,142,4,0,0,35,0,0,0,0,0,0,244,186,0,0,91,142,4,0,0,35,0,0,0,0,0,0,244,186,0,0,124,142,4,0,232,34,0,0,0,0,0,0,244,186,0,0,108,142,4,0,80,35,0,0,0,0,0,0,244,186,0,0,142,142,4,0,80,35,0,0,0,0,0,0,244,186,0,0,161,142,4,0,80,35,0,0,0,0,0,0,204,186,0,0,181,142,4,0,244,186,0,0,194,142,4,0,232,34,0,0,0,0,0,0,244,186,0,0,206,142,4,0,232,34,0,0,0,0,0,0,244,186,0,0,221,142,4,0,144,35,0,0,0,0,0,0,244,186,0,0,254,142,4,0,184,35,0,0,0,0,0,0,244,186,0,0,68,143,4,0,184,35,0,0,0,0,0,0,244,186,0,0,32,143,4,0,216,35,0,0,0,0,0,0,244,186,0,0,102,143,4,0,184,35,0,0,0,0,0,0,92,186,0,0,142,143,4,0,96,187,0,0,144,143,4,0,0,0,0,0,8,36,0,0,96,187,0,0,147,143,4,0,1,0,0,0,8,36,0,0,92,186,0,0,151,143,4,0,96,187,0,0,154,143,4,0,0,0,0,0,48,36,0,0,96,187,0,0,158,143,4,0,1,0,0,0,48,36,0,0,92,186,0,0,163,143,4,0,96,187,0,0,165,143,4,0,0,0,0,0,88,36,0,0,96,187,0,0,168,143,4,0,1,0,0,0,88,36,0,0,92,186,0,0,172,143,4,0,96,187,0,0,174,143,4,0,0,0,0,0,128,36,0,0,96,187,0,0,177,143,4,0,1,0,0,0,128,36,0,0,92,186,0,0,181,143,4,0,96,187,0,0,183,143,4,0,0,0,0,0,168,36,0,0,96,187,0,0,186,143,4,0,1,0,0,0,168,36,0,0,92,186,0,0,190,143,4,0,96,187,0,0,192,143,4,0,0,0,0,0,208,36,0,0,96,187,0,0,195,143,4,0,1,0,0,0,208,36,0,0,92,186,0,0,199,143,4,0,96,187,0,0,201,143,4,0,0,0,0,0,248,36,0,0,96,187,0,0,204,143,4,0,1,0,0,0,248,36,0,0,92,186,0,0,208,143,4,0,96,187,0,0,210,143,4,0,0,0,0,0,32,37,0,0,96,187,0,0,213,143,4,0,1,0,0,0,32,37,0,0,92,186,0,0,217,143,4,0,96,187,0,0,219,143,4,0,0,0,0,0,72,37,0,0,96,187,0,0,222,143,4,0,1,0,0,0,72,37,0,0,92,186,0,0,226,143,4,0,96,187,0,0,228,143,4,0,0,0,0,0,112,37,0,0,96,187,0,0,231,143,4,0,1,0,0,0,112,37,0,0,92,186,0,0,235,143,4,0,96,187,0,0,237,143,4,0,0,0,0,0,152,37,0,0,96,187,0,0,240,143,4,0,1,0,0,0,152,37,0,0,92,186,0,0,244,143,4,0,96,187,0,0,246,143,4,0,0,0,0,0,192,37,0,0,96,187,0,0,249,143,4,0,1,0,0,0,192,37,0,0,92,186,0,0,253,143,4,0,96,187,0,0,255,143,4,0,0,0,0,0,232,37,0,0,96,187,0,0,2,144,4,0,1,0,0,0,232,37,0,0,92,186,0,0,6,144,4,0,96,187,0,0,8,144,4,0,0,0,0,0,16,38,0,0,96,187,0,0,11,144,4,0,1,0,0,0,16,38,0,0,92,186,0,0,15,144,4,0,96,187,0,0,17,144,4,0,0,0,0,0,56,38,0,0,96,187,0,0,20,144,4,0,1,0,0,0,56,38,0,0,92,186,0,0,24,144,4,0,96,187,0,0,27,144,4,0,0,0,0,0,96,38,0,0,96,187,0,0,31,144,4,0,1,0,0,0,96,38,0,0,92,186,0,0,36,144,4,0,96,187,0,0,38,144,4,0,0,0,0,0,136,38,0,0,96,187,0,0,41,144,4,0,1,0,0,0,136,38,0,0,92,186,0,0,45,144,4,0,96,187,0,0,47,144,4,0,0,0,0,0,176,38,0,0,96,187,0,0,50,144,4,0,1,0,0,0,176,38,0,0,92,186,0,0,54,144,4,0,96,187,0,0,56,144,4,0,0,0,0,0,216,38,0,0,96,187,0,0,59,144,4,0,1,0,0,0,216,38,0,0,92,186,0,0,63,144,4,0,96,187,0,0,66,144,4,0,0,0,0,0,0,39,0,0,96,187,0,0,70,144,4,0,1,0,0,0,0,39,0,0,92,186,0,0,75,144,4,0,96,187,0,0,78,144,4,0,0,0,0,0,40,39,0,0,96,187,0,0,82,144,4,0,1,0,0,0,40,39,0,0,244,186,0,0,87,144,4,0,184,35,0,0,0,0,0,0,244,186,0,0,121,144,4,0,184,35,0,0,0,0,0,0,244,186,0,0,158,144,4,0,184,35,0,0,0,0,0,0,244,186,0,0,191,144,4,0,200,35,0,0,0,0,0,0,244,186,0,0,228,144,4,0,200,35,0,0,0,0,0,0,244,186,0,0,10,145,4,0,216,35,0,0,0,0,0,0,0,0,0,64,251,33,249,63,0,0,0,0,45,68,116,62,0,0,0,128,152,70,248,60,0,0,0,96,81,204,120,59,0,0,0,128,131,27,240,57,0,0,0,64,32,37,122,56,0,0,0,128,34,130,227,54,0,0,0,0,29,243,105,53,205,59,127,102,158,160,230,63,135,1,235,115,20,161,231,63,219,160,42,66,229,172,232,63],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([144,240,163,130,145,196,233,63,173,211,90,153,159,232,234,63,156,82,133,221,155,25,236,63,135,164,251,220,24,88,237,63,218,144,164,162,175,164,238,63,0,0,0,0,0,0,240,63,15,137,249,108,88,181,240,63,123,81,125,60,184,114,241,63,56,98,117,110,122,56,242,63,21,183,49,10,254,6,243,63,34,52,18,76,166,222,243,63,39,42,54,213,218,191,244,63,41,84,72,221,7,171,245,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,64,0,0,0,0,0,0,24,64,0,0,0,0,0,0,56,64,0,0,0,0,0,0,94,64,0,0,0,0,0,128,134,64,0,0,0,0,0,176,179,64,0,0,0,0,0,176,227,64,0,0,0,0,0,38,22,65,0,0,0,0,128,175,75,65,0,0,0,0,168,8,131,65,0,0,0,0,252,140,188,65,0,0,0,192,140,50,247,65,0,0,0,40,59,76,52,66,0,0,128,117,119,7,115,66,0,0,128,117,119,7,179,66,0,0,216,236,238,55,244,66,0,0,115,202,236,190,54,67,0,144,104,48,185,2,123,67,0,90,65,190,179,225,192,67,32,198,181,233,59,40,6,68,108,240,89,97,82,119,78,68,158,164,193,67,81,234,21,66,87,76,245,117,112,252,35,66,26,182,138,129,50,161,32,66,26,38,232,34,181,176,16,66,232,161,165,179,193,127,246,65,63,243,211,245,24,116,213,65,42,95,185,123,12,171,173,65,152,204,93,249,118,248,125,65,76,244,128,80,233,241,69,65,235,135,135,31,66,182,6,65,4,216,88,8,172,135,191,64,82,59,188,123,96,90,106,64,5,39,246,31,147,13,4,64,0,0,0,0,0,0,0,0,0,0,0,0,168,8,131,65,0,0,0,128,105,189,156,65,0,0,0,176,166,253,161,65,0,0,0,112,113,24,153,65,0,0,0,144,182,238,133,65,0,0,0,224,113,113,105,65,0,0,0,0,123,31,68,65,0,0,0,0,188,208,21,65,0,0,0,0,128,231,223,64,0,0,0,0,0,20,158,64,0,0,0,0,0,128,80,64,0,0,0,0,0,0,240,63,22,86,231,158,175,3,210,60,155,43,161,134,155,132,6,61,130,118,73,104,194,37,60,61,17,234,45,129,153,151,113,61,149,100,121,225,127,253,165,61,187,189,215,217,223,124,219,61,149,214,38,232,11,46,17,62,58,140,48,226,142,121,69,62,72,175,188,154,242,215,122,62,141,237,181,160,247,198,176,62,241,104,227,136,181,248,228,62,45,67,28,235,226,54,26,63,252,169,241,210,77,98,80,63,123,20,174,71,225,122,132,63,154,153,153,153,153,153,185,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,36,64,0,0,0,0,0,0,89,64,0,0,0,0,0,64,143,64,0,0,0,0,0,136,195,64,0,0,0,0,0,106,248,64,0,0,0,0,128,132,46,65,0,0,0,0,208,18,99,65,0,0,0,0,132,215,151,65,0,0,0,0,101,205,205,65,0,0,0,32,95,160,2,66,0,0,0,232,118,72,55,66,0,0,0,162,148,26,109,66,0,0,64,229,156,48,162,66,0,0,144,30,196,188,214,66,0,0,52,38,245,107,12,67,93,61,127,102,158,160,230,63,0,0,0,0,0,136,57,61,68,23,117,250,82,176,230,63,0,0,0,0,0,0,216,60,254,217,11,117,18,192,230,63,0,0,0,0,0,120,40,189,191,118,212,221,220,207,230,63,0,0,0,0,0,192,30,61,41,26,101,60,178,223,230,63,0,0,0,0,0,0,216,188,227,58,89,152,146,239,230,63,0,0,0,0,0,0,188,188,134,147,81,249,125,255,230,63,0,0,0,0,0,216,47,189,163,45,244,102,116,15,231,63,0,0,0,0,0,136,44,189,195,95,236,232,117,31,231,63,0,0,0,0,0,192,19,61,5,207,234,134,130,47,231,63,0,0,0,0,0,48,56,189,82,129,165,72,154,63,231,63,0,0,0,0,0,192,0,189,252,204,215,53,189,79,231,63,0,0,0,0,0,136,47,61,241,103,66,86,235,95,231,63,0,0,0,0,0,224,3,61,72,109,171,177,36,112,231,63,0,0,0,0,0,208,39,189,56,93,222,79,105,128,231,63,0,0,0,0,0,0,221,188,0,29,172,56,185,144,231,63,0,0,0,0,0,0,227,60,120,1,235,115,20,161,231,63,0,0,0,0,0,0,237,188,96,208,118,9,123,177,231,63,0,0,0,0,0,64,32,61,51,193,48,1,237,193,231,63,0,0,0,0,0,0,160,60,54,134,255,98,106,210,231,63,0,0,0,0,0,144,38,189,59,78,207,54,243,226,231,63,0,0,0,0,0,224,2,189,232,195,145,132,135,243,231,63,0,0,0,0,0,88,36,189,78,27,62,84,39,4,232,63,0,0,0,0,0,0,51,61,26,7,209,173,210,20,232,63,0,0,0,0,0,0,15,61,126,205,76,153,137,37,232,63,0,0,0,0,0,192,33,189,208,66,185,30,76,54,232,63,0,0,0,0,0,208,41,61,181,202,35,70,26,71,232,63,0,0,0,0,0,16,71,61,188,91,159,23,244,87,232,63,0,0,0,0,0,96,34,61,175,145,68,155,217,104,232,63,0,0,0,0,0,196,50,189,149,163,49,217,202,121,232,63,0,0,0,0,0,0,35,189,184,101,138,217,199,138,232,63,0,0,0,0,0,128,42,189,0,88,120,164,208,155,232,63,0,0,0,0,0,0,237,188,35,162,42,66,229,172,232,63,0,0,0,0,0,40,51,61,250,25,214,186,5,190,232,63,0,0,0,0,0,180,66,61,131,67,181,22,50,207,232,63,0,0,0,0,0,208,46,189,76,102,8,94,106,224,232,63,0,0,0,0,0,80,32,189,7,120,21,153,174,241,232,63,0,0,0,0,0,40,40,61,14,44,40,208,254,2,233,63,0,0,0,0,0,176,28,189,150,255,145,11,91,20,233,63,0,0,0,0,0,224,5,189,249,47,170,83,195,37,233,63,0,0,0,0,0,64,245,60,74,198,205,176,55,55,233,63,0,0,0,0,0,32,23,61,174,152,95,43,184,72,233,63,0,0,0,0,0,0,9,189,203,82,200,203,68,90,233,63,0,0,0,0,0,104,37,61,33,111,118,154,221,107,233,63,0,0,0,0,0,208,54,189,42,78,222,159,130,125,233,63,0,0,0,0,0,0,1,189,163,35,122,228,51,143,233,63,0,0,0,0,0,0,45,61,4,6,202,112,241,160,233,63,0,0,0,0,0,164,56,189,137,255,83,77,187,178,233,63,0,0,0,0,0,92,53,61,91,241,163,130,145,196,233,63,0,0,0,0,0,184,38,61,197,184,75,25,116,214,233,63,0,0,0,0,0,0,236,188,142,35,227,25,99,232,233,63,0,0,0,0,0,208,23,61,2,243,7,141,94,250,233,63,0,0,0,0,0,64,22,61,77,229,93,123,102,12,234,63,0,0,0,0,0,0,245,188,246,184,142,237,122,30,234,63,0,0,0,0,0,224,9,61,39,46,74,236,155,48,234,63,0,0,0,0,0,216,42,61,93,10,70,128,201,66,234,63,0,0,0,0,0,240,26,189,155,37,62,178,3,85,234,63,0,0,0,0,0,96,11,61,19,98,244,138,74,103,234,63,0,0,0,0,0,136,56,61,167,179,48,19,158,121,234,63,0,0,0,0,0,32,17,61,141,46,193,83,254,139,234,63,0,0,0,0,0,192,6,61,210,252,121,85,107,158,234,63,0,0,0,0,0,184,41,189,184,111,53,33,229,176,234,63,0,0,0,0,0,112,43,61,129,243,211,191,107,195,234,63,0,0,0,0,0,0,217,60,128,39,60,58,255,213,234,63,0,0,0,0,0,0,228,60,163,210,90,153,159,232,234,63,0,0,0,0,0,144,44,189,103,243,34,230,76,251,234,63,0,0,0,0,0,80,22,61,144,183,141,41,7,14,235,63,0,0,0,0,0,212,47,61,169,137,154,108,206,32,235,63,0,0,0,0,0,112,18,61,75,26,79,184,162,51,235,63,0,0,0,0,0,71,77,61,231,71,183,21,132,70,235,63,0,0,0,0,0,56,56,189,58,89,229,141,114,89,235,63,0,0,0,0,0,0,152,60,106,197,241,41,110,108,235,63,0,0,0,0,0,208,10,61,80,94,251,242,118,127,235,63,0,0,0,0,0,128,222,60,178,73,39,242,140,146,235,63,0,0,0,0,0,192,4,189,3,6,161,48,176,165,235,63,0,0,0,0,0,112,13,189,102,111,154,183,224,184,235,63,0,0,0,0,0,144,13,61,255,193,75,144,30,204,235,63,0,0,0,0,0,160,2,61,111,161,243,195,105,223,235,63,0,0,0,0,0,120,31,189,184,29,215,91,194,242,235,63,0,0,0,0,0,160,16,189,233,178,65,97,40,6,236,63,0,0,0,0,0,64,17,189,224,82,133,221,155,25,236,63,0,0,0,0,0,224,11,61,238,100,250,217,28,45,236,63,0,0,0,0,0,64,9,189,47,208,255,95,171,64,236,63,0,0,0,0,0,208,14,189,21,253,250,120,71,84,236,63,0,0,0,0,0,102,57,61,203,208,87,46,241,103,236,63,0,0,0,0,0,16,26,189,182,193,136,137,168,123,236,63,0,0,0,0,128,69,88,189,51,231,6,148,109,143,236,63,0,0,0,0,0,72,26,189,223,196,81,87,64,163,236,63,0,0,0,0,0,0,203,60,148,144,239,220,32,183,236,63,0,0,0,0,0,64,1,61,137,22,109,46,15,203,236,63,0,0,0,0,0,32,240,60,18,196,93,85,11,223,236,63,0,0,0,0,0,96,243,60,59,171,91,91,21,243,236,63,0,0,0,0,0,144,6,189,188,137,7,74,45,7,237,63,0,0,0,0,0,160,9,61,250,200,8,43,83,27,237,63,0,0,0,0,0,224,21,189,133,138,13,8,135,47,237,63,0,0,0,0,0,40,29,61,3,162,202,234,200,67,237,63,0,0,0,0,0,160,1,61,145,164,251,220,24,88,237,63,0,0,0,0,0,0,223,60,161,230,98,232,118,108,237,63,0,0,0,0,0,160,3,189,78,131,201,22,227,128,237,63,0,0,0,0,0,216,12,189,144,96,255,113,93,149,237,63,0,0,0,0,0,192,244,60,174,50,219,3,230,169,237,63,0,0,0,0,0,144,255,60,37,131,58,214,124,190,237,63,0,0,0,0,0,128,233,60,69,180,1,243,33,211,237,63,0,0,0,0,0,32,245,188,191,5,28,100,213,231,237,63,0,0,0,0,0,112,29,189,236,154,123,51,151,252,237,63,0,0,0,0,0,20,22,189,94,125,25,107,103,17,238,63,0,0,0,0,0,72,11,61,231,163,245,20,70,38,238,63,0,0,0,0,0,206,64,61,92,238,22,59,51,59,238,63,0,0,0,0,0,104,12,61,180,63,139,231,46,80,238,63,0,0,0,0,0,48,9,189,104,109,103,36,57,101,238,63,0,0,0,0,0,0,229,188,68,76,199,251,81,122,238,63,0,0,0,0,0,248,7,189,38,183,205,119,121,143,238,63,0,0,0,0,0,112,243,188,232,144,164,162,175,164,238,63,0,0,0,0,0,208,229,60,228,202,124,134,244,185,238,63,0,0,0,0,0,26,22,61,13,104,142,45,72,207,238,63,0,0,0,0,0,80,245,60,20,133,24,162,170,228,238,63,0,0,0,0,0,64,198,60,19,90,97,238,27,250,238,63,0,0,0,0,0,128,238,188,6,65,182,28,156,15,239,63,0,0,0,0,0,136,250,188,99,185,107,55,43,37,239,63,0,0,0,0,0,144,44,189,117,114,221,72,201,58,239,63,0,0,0,0,0,0,170,60,36,69,110,91,118,80,239,63,0,0,0,0,0,240,244,188,253,68,136,121,50,102,239,63,0,0,0,0,0,128,202,60,56,190,156,173,253,123,239,63,0,0,0,0,0,188,250,60,130,60,36,2,216,145,239,63,0,0,0,0,0,96,212,188,142,144,158,129,193,167,239,63,0,0,0,0,0,12,11,189,17,213,146,54,186,189,239,63,0,0,0,0,0,224,192,188,148,113,143,43,194,211,239,63,0,0,0,0,128,222,16,189,238,35,42,107,217,233,239,63,0,0,0,0,0,67,238,60,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,190,188,90,250,26,11,240,63,0,0,0,0,0,64,179,188,3,51,251,169,61,22,240,63,0,0,0,0,0,23,18,189,130,2,59,20,104,33,240,63,0,0,0,0,0,64,186,60,108,128,119,62,154,44,240,63,0,0,0,0,0,152,239,60,202,187,17,46,212,55,240,63,0,0,0,0,0,64,199,188,137,127,110,232,21,67,240,63,0,0,0,0,0,48,216,60,103,84,246,114,95,78,240,63,0,0,0,0,0,63,26,189,90,133,21,211,176,89,240,63,0,0,0,0,0,132,2,189,149,31,60,14,10,101,240,63,0,0,0,0,0,96,241,60,26,247,221,41,107,112,240,63,0,0,0,0,0,36,21,61,45,168,114,43,212,123,240,63,0,0,0,0,0,160,233,188,208,155,117,24,69,135,240,63,0,0,0,0,0,64,230,60,200,7,102,246,189,146,240,63,0,0,0,0,0,120,0,189,131,243,198,202,62,158,240,63,0,0,0,0,0,0,152,188,48,57,31,155,199,169,240,63,0,0,0,0,0,160,255,60,252,136,249,108,88,181,240,63,0,0,0,0,0,200,250,188,138,108,228,69,241,192,240,63,0,0,0,0,0,192,217,60,22,72,114,43,146,204,240,63,0,0,0,0,0,32,5,61,216,93,57,35,59,216,240,63,0,0,0,0,0,208,250,188,243,209,211,50,236,227,240,63,0,0,0,0,0,172,27,61,166,169,223,95,165,239,240,63,0,0,0,0,0,232,4,189,240,210,254,175,102,251,240,63,0,0,0,0,0,48,13,189,75,35,215,40,48,7,241,63,0,0,0,0,0,80,241,60,91,91,18,208,1,19,241,63,0,0,0,0,0,0,236,60,249,42,94,171,219,30,241,63,0,0,0,0,0,188,22,61,213,49,108,192,189,42,241,63,0,0,0,0,0,64,232,60,125,4,242,20,168,54,241,63,0,0,0,0,0,208,14,189,233,45,169,174,154,66,241,63,0,0,0,0,0,224,232,60,56,49,79,147,149,78,241,63,0,0,0,0,0,64,235,60,113,142,165,200,152,90,241,63,0,0,0,0,0,48,5,61,223,195,113,84,164,102,241,63,0,0,0,0,0,56,3,61,17,82,125,60,184,114,241,63,0,0,0,0,0,212,40,61,159,187,149,134,212,126,241,63,0,0,0,0,0,208,5,189,147,141,140,56,249,138,241,63,0,0,0,0,0,136,28,189,102,93,55,88,38,151,241,63,0,0,0,0,0,240,17,61,167,203,111,235,91,163,241,63,0,0,0,0,0,72,16,61,227,135,19,248,153,175,241,63,0,0,0,0,0,57,71,189,84,93,4,132,224,187,241,63,0,0,0,0,0,228,36,61,67,28,40,149,47,200,241,63,0,0,0,0,0,32,10,189,178,185,104,49,135,212,241,63,0,0,0,0,0,128,227,60,49,64,180,94,231,224,241,63,0,0,0,0,0,192,234,60,56,217,252,34,80,237,241,63,0,0,0,0,0,144,1,61,247,205,56,132,193,249,241,63,0,0,0,0,0,120,27,189,143,141,98,136,59,6,242,63,0,0,0,0,0,148,45,61,30,168,120,53,190,18,242,63,0,0,0,0,0,0,216,60,65,221,125,145,73,31,242,63,0,0,0,0,0,52,43,61,35,19,121,162,221,43,242,63,0,0,0,0,0,248,25,61,231,97,117,110,122,56,242,63,0,0,0,0,0,200,25,189,39,20,130,251,31,69,242,63,0,0,0,0,0,48,2,61,2,166,178,79,206,81,242,63,0,0,0,0,0,72,19,189,176,206,30,113,133,94,242,63,0,0,0,0,0,112,18,61,22,125,226,101,69,107,242,63,0,0,0,0,0,208,17,61,15,224,29,52,14,120,242,63,0,0,0,0,0,238,49,61,62,99,245,225,223,132,242,63,0,0,0,0,0,192,20,189,48,187,145,117,186,145,242,63,0,0,0,0,0,216,19,189,9,223,31,245,157,158,242,63,0,0,0,0,0,176,8,61,155,14,209,102,138,171,242,63,0,0,0,0,0,124,34,189,58,218,218,208,127,184,242,63,0,0,0,0,0,52,42,61,249,26,119,57,126,197,242,63,0,0,0,0,0,128,16,189,217,2,228,166,133,210,242,63,0,0,0,0,0,208,14,189,121,21,100,31,150,223,242,63,0,0,0,0,0,32,244,188,207,46,62,169,175,236,242,63,0,0,0,0,0,152,36,189,34,136,189,74,210,249,242,63,0,0,0,0,0,48,22,189,37,182,49,10,254,6,243,63,0,0,0,0,0,54,50,189,11,165,238,237,50,20,243,63,0,0,0,0,128,223,112,189,184,215,76,252,112,33,243,63,0,0,0,0,0,72,34,189,162,233,168,59,184,46,243,63,0,0,0,0,0,152,37,189,102,23,100,178,8,60,243,63,0,0,0,0,0,208,30,61,39,250,227,102,98,73,243,63,0,0,0,0,0,0,220,188,15,159,146,95,197,86,243,63,0,0,0,0,0,216,48,189,185,136,222,162,49,100,243,63,0,0,0,0,0,200,34,61,57,170,58,55,167,113,243,63,0,0,0,0,0,96,32,61,254,116,30,35,38,127,243,63,0,0,0,0,0,96,22,189,56,216,5,109,174,140,243,63,0,0,0,0,0,224,10,189,195,62,113,27,64,154,243,63,0,0,0,0,0,114,68,189,32,160,229,52,219,167,243,63,0,0,0,0,0,32,8,61,149,110,236,191,127,181,243,63,0,0,0,0,0,128,62,61,242,168,19,195,45,195,243,63,0,0,0,0,0,128,239,60,34,225,237,68,229,208,243,63,0,0,0,0,0,160,23,189,187,52,18,76,166,222,243,63,0,0,0,0,0,48,38,61,204,78,28,223,112,236,243,63,0,0,0,0,0,166,72,189,140,126,172,4,69,250,243,63,0,0,0,0,0,220,60,189,187,160,103,195,34,8,244,63,0,0,0,0,0,184,37,61,149,46,247,33,10,22,244,63,0,0,0,0,0,192,30,61,70,70,9,39,251,35,244,63,0,0,0,0,0,96,19,189,32,169,80,217,245,49,244,63,0,0,0,0,0,152,35,61,235,185,132,63,250,63,244,63,0,0,0,0,0,0,250,60,25,137,97,96,8,78,244,63,0,0,0,0,0,192,246,188,1,210,167,66,32,92,244,63,0,0,0,0,0,192,11,189,22,0,29,237,65,106,244,63,0,0,0,0,0,128,18,189,38,51,139,102,109,120,244,63,0,0,0,0,0,224,48,61,0,60,193,181,162,134,244,63,0,0,0,0,0,64,45,189,4,175,146,225,225,148,244,63,0,0,0,0,0,32,12,61,114,211,215,240,42,163,244,63,0,0,0,0,0,80,30,189,1,184,109,234,125,177,244,63,0,0,0,0,0,128,7,61,225,41,54,213,218,191,244,63,0,0,0,0,0,128,19,189,50,193,23,184,65,206,244,63,0,0,0,0,0,128,0,61,219,221,253,153,178,220,244,63,0,0,0,0,0,112,44,61,150,171,216,129,45,235,244,63,0,0,0,0,0,224,28,189,2,45,157,118,178,249,244,63,0,0,0,0,0,32,25,61,193,49,69,127,65,8,245,63,0,0,0,0,0,192,8,189,42,102,207,162,218,22,245,63,0,0,0,0,0,0,250,188,234,81,63,232,125,37,245,63,0,0,0,0,0,8,74,61,218,78,157,86,43,52,245,63,0,0,0,0,0,216,38,189,26,172,246,244,226,66,245,63,0,0,0,0,0,68,50,189,219,148,93,202,164,81,245,63,0,0,0,0,0,60,72,61,107,17,233,221,112,96,245,63,0,0,0,0,0,176,36,61,222,41,181,54,71,111,245,63,0,0,0,0,0,90,65,61,14,196,226,219,39,126,245,63,0,0,0,0,0,224,41,189,111,199,151,212,18,141,245,63,0,0,0,0,0,8,35,189,76,11,255,39,8,156,245,63,0,0,0,0,0,236,77,61,39,84,72,221,7,171,245,63,0,0,0,0,0,0,196,188,244,122,168,251,17,186,245,63,0,0,0,0,0,8,48,61,11,70,89,138,38,201,245,63,0,0,0,0,0,200,38,189,63,142,153,144,69,216,245,63,0,0,0,0,0,154,70,61,225,32,173,21,111,231,245,63,0,0,0,0,0,64,27,189,202,235,220,32,163,246,245,63,0,0,0,0,0,112,23,61,184,220,118,185,225,5,246,63,0,0,0,0,0,248,38,61,21,247,205,230,42,21,246,63,0,0,0,0,0,0,1,61,49,85,58,176,126,36,246,63,0,0,0,0,0,208,21,189,181,41,25,29,221,51,246,63,0,0,0,0,0,208,18,189,19,195,204,52,70,67,246,63,0,0,0,0,0,128,234,188,250,142,188,254,185,82,246,63,0,0,0,0,0,96,40,189,151,51,85,130,56,98,246,63,0,0,0,0,0,254,113,61,142,50,8,199,193,113,246,63,0,0,0,0,0,32,55,189,126,169,76,212,85,129,246,63,0,0,0,0,0,128,230,60,113,148,158,177,244,144,246,63,0,0,0,0,0,120,41,189,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,34,174,40,215,152,47,138,66,205,101,239,35,145,68,55,113,47,59,77,236,207,251,192,181,188,219,137,129,165,219,181,233,56,181,72,243,91,194,86,57,25,208,5,182,241,17,241,89,155,79,25,175,164,130,63,146,24,129,109,218,213,94,28,171,66,2,3,163,152,170,7,216,190,111,112,69,1,91,131,18,140,178,228,78,190,133,49,36,226,180,255,213,195,125,12,85,111,137,123,242,116,93,190,114,177,150,22,59,254,177,222,128,53,18,199,37,167,6,220,155,148,38,105,207,116,241,155,193,210,74,241,158,193,105,155,228,227,37,79,56,134,71,190,239,181,213,140,139,198,157,193,15,101,156,172,119,204,161,12,36,117,2,43,89,111,44,233,45,131,228,166,110,170,132,116,74,212,251,65,189,220,169,176,92,181,83,17,131,218,136,249,118,171,223,102,238,82,81,62,152,16,50,180,45,109,198,49,168,63,33,251,152,200,39,3,176,228,14,239,190,199,127,89,191,194,143,168,61,243,11,224,198,37,167,10,147,71,145,167,213,111,130,3,224,81,99,202,6,112,110,14,10,103,41,41,20,252,47,210,70,133,10,183,39,38,201,38,92,56,33,27,46,237,42,196,90,252,109,44,77,223,179,149,157,19,13,56,83,222,99,175,139,84,115,10,101,168,178,119,60,187,10,106,118,230,174,237,71,46,201,194,129,59,53,130,20,133,44,114,146,100,3,241,76,161,232,191,162,1,48,66,188,75,102,26,168,145,151,248,208,112,139,75,194,48,190,84,6,163,81,108,199,24,82,239,214,25,232,146,209,16,169,101,85,36,6,153,214,42,32,113,87,133,53,14,244,184,209,187,50,112,160,106,16,200,208,210,184,22,193,164,25,83,171,65,81,8,108,55,30,153,235,142,223,76,119,72,39,168,72,155,225,181,188,176,52,99,90,201,197,179,12,28,57,203,138,65,227,74,170,216,78,115,227,99,119,79,202,156,91,163,184,178,214,243,111,46,104,252,178,239,93,238,130,143,116,96,47,23,67,111,99,165,120,114,171,240,161,20,120,200,132,236,57,100,26,8,2,199,140,40,30,99,35,250,255,190,144,233,189,130,222,235,108,80,164,21,121,198,178,247,163,249,190,43,83,114,227,242,120,113,198,156,97,38,234,206,62,39,202,7,194,192,33,199,184,134,209,30,235,224,205,214,125,218,234,120,209,110,238,127,79,125,245,186,111,23,114,170,103,240,6,166,152,200,162,197,125,99,10,174,13,249,190,4,152,63,17,27,71,28,19,53,11,113,27,132,125,4,35,245,119,219,40,147,36,199,64,123,171,202,50,188,190,201,21,10,190,158,60,76,13,16,156,196,103,29,67,182,66,62,203,190,212,197,76,42,126,101,252,156,41,127,89,236,250,214,58,171,111,203,95,23,88,71,74,140,25,68,108,211,125,7,132,146,237,65,64,14,124,74,70,57,152,118,64,214,97,16,109,110,166,146,64,126,155,195,184,252,159,145,64,129,144,55,252,150,178,101,64,89,89,139,144,101,56,54,64,143,135,232,14,158,6,97,64,155,7,234,66,134,231,112,64,255,250,182,58,3,60,99,64,9,24,57,68,179,80,45,64,134,170,225,111,3,225,37,190,75,226,192,247,246,255,177,191,116,128,164,174,178,69,3,192,20,78,185,76,74,247,53,192,69,26,10,66,34,10,77,192,15,216,146,168,172,114,63,192,109,2,39,233,22,211,119,190,66,30,94,73,98,255,177,191,67,168,36,138,57,54,247,191,243,167,175,237,243,138,30,192,3,99,36,197,230,98,38,192,15,231,143,175,129,222,9,192,81,103,169,7,51,34,93,64,56,105,89,80,125,243,173,64,95,176,182,110,187,210,227,64,189,169,159,143,15,129,252,64,220,73,44,79,119,65,231,64,222,197,152,12,129,96,78,64,100,40,126,92,2,109,144,64,96,29,190,143,248,90,183,64,56,250,118,250,184,204,194,64,100,232,11,199,29,204,162,64,0,0,0,0,0,0,0,0,50,253,255,255,255,255,177,191,121,167,79,180,208,41,32,192,99,232,25,123,2,17,112,192,252,202,77,205,110,106,163,192,61,100,204,54,11,133,180,192,204,149,228,71,177,24,169,189,198,251,154,230,255,255,177,191,191,107,12,249,112,163,16,192,131,23,125,90,47,235,80,192,99,204,66,103,179,179,116,192,215,139,163,40,239,166,117,192,166,67,227,191,34,97,72,64,179,78,84,134,131,45,134,64,99,252,77,228,75,240,172,64,40,106,199,215,108,60,185,64,192,177,79,217,170,168,163,64,15,244,28,32,235,167,98,192,237,122,192,247,150,93,62,64,64,75,209,228,145,213,112,64,34,191,179,34,69,102,138,64,20,194,92,156,124,151,139,64,101,19,0,14,83,149,106,64,49,41,179,248,106,62,21,192,130,203,222,106,3,205,50,62,66,8,141,14,238,191,178,63,245,156,20,97,252,192,10,64,221,174,45,150,152,79,69,64,31,253,94,226,219,89,101,64,224,33,250,129,124,215,100,64,219,107,247,84,59,49,132,62,52,62,136,62,197,190,178,63,156,119,39,231,151,248,255,63,229,111,249,170,191,253,44,64,74,220,251,41,142,170,63,64,180,75,129,113,177,64,48,64,188,57,91,54,213,120,100,64,99,5,107,78,88,162,191,64,63,140,211,84,82,102,1,65,67,43,165,131,218,131,40,65,61,11,222,40,107,166,41,65,197,48,149,44,109,253,20,193,67,21,94,251,179,177,84,64,206,192,33,218,160,59,160,64,109,30,89,123,210,103,210,64,114,35,224,151,227,181,235,64,160,84,122,31,24,145,225,64,9,198,219,190,87,234,180,192,0,0,0,0,0,0,0,0,44,254,255,255,255,191,178,63,214,52,179,91,82,137,39,64,37,24,48,21,99,109,129,64,109,244,24,62,153,77,193,64,102,21,144,14,212,18,226,64,217,140,204,41,143,61,180,61,76,176,114,209,255,191,178,63,211,61,149,185,176,87,23,64,233,136,135,10,146,227,96,64,129,196,200,157,249,12,144,64,166,227,198,83,233,23,159,64,156,6,52,161,73,101,65,64,95,167,241,7,51,12,117,64,35,213,55,80,124,91,144,64,233,49,46,163,125,214,139,64,83,237,46,124,109,242,89,64,220,236,213,138,189,111,53,64,213,44,249,20,147,82,95,64,217,219,162,213,216,8,109,64,169,132,24,218,122,107,93,64,146,81,78,244,177,186,32,64,221,158,173,167,33,252,41,62,123,209,33,91,245,255,189,63,138,173,94,232,188,118,15,64,41,209,166,157,72,143,65,64,55,24,44,77,133,195,86,64,229,62,168,142,143,71,72,64,244,68,85,246,212,233,124,62,131,13,118,190,66,255,189,63,192,174,143,249,183,242,2,64,100,169,113,127,55,124,40,64,226,142,127,23,168,177,49,64,254,193,116,165,73,75,20,64,172,108,101,142,69,141,92,64,79,39,77,150,220,133,172,64,127,187,197,151,134,11,226,64,187,23,143,178,44,212,247,64,45,11,122,105,17,21,222,64,61,99,175,168,234,163,77,64,1,103,6,27,54,251,142,64,251,182,6,87,68,233,180,64,21,187,165,184,176,164,190,64,81,94,111,3,48,128,151,64,0,0,0,0,0,0,0,0,206,252,255,255,255,255,189,63,206,127,127,53,157,122,42,64,144,165,46,101,212,192,121,64,204,50,165,163,125,69,174,64,221,130,39,195,122,234,190,64,125,202,225,218,103,6,173,61,67,0,193,226,255,255,189,63,227,21,99,110,4,54,27,64,237,2,38,69,185,19,91,64,73,214,82,208,22,45,128,64,183,12,126,187,184,133,128,64,228,103,211,204,35,213,71,64,62,238,49,192,235,14,133,64,154,124,142,68,78,104,170,64,166,84,29,166,186,171,181,64,75,223,212,13,122,188,157,64,31,49,10,41,112,230,96,192,255,100,174,120,138,136,61,64,186,28,130,219,104,159,111,64,247,160,73,206,5,172,135,64,41,192,212,72,37,27,135,64,212,216,62,60,94,126,99,64,107,232,27,231,134,214,19,192,79,200,143,211,169,207,53,190,84,237,174,81,235,63,186,191,255,217,2,51,194,112,18,192,218,22,93,194,113,236,76,192,95,213,24,71,211,135,108,192,246,27,92,95,185,102,107,192,210,38,198,68,38,241,135,190,16,176,72,145,142,62,186,191,218,78,187,105,132,4,6,192,127,144,104,193,226,169,51,192,170,74,16,222,163,41,69,192,82,110,207,57,54,95,53,192,229,205,91,222,166,44,100,64,25,132,216,208,98,145,190,64,152,94,183,176,154,87,0,65,25,156,134,114,83,246,37,65,92,173,25,119,210,87,36,65,24,170,165,14,105,249,17,193,178,17,90,255,178,81,84,64,57,248,123,231,49,31,159,64,41,206,100,13,31,15,209,64,151,209,186,170,109,87,232,64,75,54,124,207,4,75,219,64,4,160,255,252,46,111,178,192,0,0,0,0,0,0,0,0,243,253,255,255,255,63,186,191,247,121,103,162,145,69,48,192,118,181,228,83,208,188,135,192,21,116,248,64,231,36,199,192,106,156,208,101,208,166,231,192,152,160,161,26,67,250,182,189,239,127,89,203,255,63,186,191,75,173,3,202,230,28,32,192,176,185,167,108,109,245,102,192,79,115,49,105,198,116,149,192,157,167,253,136,227,104,164,192,0,0,0,0,0,0,0,0,244,186,0,0,227,243,4,0,0,35,0,0,0,0,0,0,244,186,0,0,250,243,4,0,200,67,0,0,0,0,0,0,244,186,0,0,22,244,4,0,24,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,146,245,4,0,192,68,0,0,0,0,0,0,244,186,0,0,209,245,4,0,192,68,0,0,0,0,0,0,244,186,0,0,233,245,4,0,184,68,0,0,0,0,0,0,244,186,0,0,2,246,4,0,184,68,0,0,0,0,0,0,204,186,0,0,27,246,4,0,28,187,0,0,52,246,4,0,0,0,0,0,1,0,0,0,200,67,0,0,0,0,0,0,244,186,0,0,82,246,4,0,232,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,208,246,4,0,80,35,0,0,0,0,0,0,204,186,0,0,231,246,4,0,244,186,0,0,0,247,4,0,16,68,0,0,0,0,0,0,244,186,0,0,23,247,4,0,24,68,0,0,0,0,0,0,244,186,0,0,58,247,4,0,24,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,186,0,0,190,247,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,186,0,0,250,250,4,0,244,186,0,0,15,251,4,0,0,68,0,0,0,0,0,0,204,186,0,0,41,251,4,0,244,186,0,0,59,251,4,0,144,68,0,0,0,0,0,0,244,186,0,0,101,251,4,0,144,68,0,0,0,0,0,0,204,186,0,0,143,251,4,0,204,186,0,0,192,251,4,0,28,187,0,0,241,251,4,0,0,0,0,0,1,0,0,0,152,68,0,0,3,244,255,255,28,187,0,0,32,252,4,0,0,0,0,0,1,0,0,0,168,68,0,0,3,244,255,255,28,187,0,0,79,252,4,0,0,0,0,0,1,0,0,0,152,68,0,0,3,244,255,255,28,187,0,0,126,252,4,0,0,0,0,0,1,0,0,0,168,68,0,0,3,244,255,255,28,187,0,0,173,252,4,0,3,0,0,0,2,0,0,0,200,68,0,0,2,0,0,0,248,68,0,0,2,8,0,0,244,186,0,0,221,252,4,0,24,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,186,0,0,94,253,4,0,200,67,0,0,0,0,0,0,28,187,0,0,116,253,4,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,192,77,0,0,2,0,0,0,28,187,0,0,134,253,4,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,200,77,0,0,2,0,0,0,28,187,0,0,168,253,4,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,200,77,0,0,2,0,0,0,28,187,0,0,203,253,4,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,200,77,0,0,2,0,0,0,244,186,0,0,238,253,4,0,176,69,0,0,0,0,0,0,244,186,0,0,16,254,4,0,208,69,0,0,0,0,0,0,244,186,0,0,50,254,4,0,176,69,0,0,0,0,0,0,244,186,0,0,85,254,4,0,208,69,0,0,0,0,0,0,28,187,0,0,148,254,4,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,200,77,0,0,2,0,0,0,244,186,0,0,120,254,4,0,48,70,0,0,0,0,0,0,244,186,0,0,182,254,4,0,176,69,0,0,0,0,0,0,244,186,0,0,211,254,4,0,208,69,0,0,0,0,0,0,244,186,0,0,240,254,4,0,48,70,0,0,0,0,0,0,244,186,0,0,17,255,4,0,48,70,0,0,0,0,0,0,244,186,0,0,50,255,4,0,176,69,0,0,0,0,0,0,244,186,0,0,84,255,4,0,176,69,0,0,0,0,0,0,244,186,0,0,118,255,4,0,208,69,0,0,0,0,0,0,244,186,0,0,152,255,4,0,208,69,0,0,0,0,0,0,244,186,0,0,186,255,4,0,48,70,0,0,0,0,0,0,244,186,0,0,220,255,4,0,208,69,0,0,0,0,0,0,244,186,0,0,255,255,4,0,176,69,0,0,0,0,0,0,244,186,0,0,34,0,5,0,96,69,0,0,0,0,0,0,244,186,0,0,84,0,5,0,96,69,0,0,0,0,0,0,244,186,0,0,56,0,5,0,32,71,0,0,0,0,0,0,244,186,0,0,132,0,5,0,96,69,0,0,0,0,0,0,244,186,0,0,104,0,5,0,64,71,0,0,0,0,0,0,28,187,0,0,152,0,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,192,77,0,0,2,0,0,0,244,186,0,0,170,0,5,0,96,71,0,0,0,0,0,0,244,186,0,0,196,0,5,0,112,69,0,0,0,0,0,0,244,186,0,0,222,0,5,0,96,69,0,0,0,0,0,0,244,186,0,0,243,0,5,0,96,69,0,0,0,0,0,0,244,186,0,0,8,1,5,0,160,71,0,0,0,0,0,0,244,186,0,0,37,1,5,0,176,71,0,0,0,0,0,0,28,187,0,0,66,1,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,208,77,0,0,0,0,0,0,28,187,0,0,134,1,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,232,77,0,0,0,0,0,0,28,187,0,0,202,1,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,0,78,0,0,0,0,0,0,28,187,0,0,14,2,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,24,78,0,0,0,0,0,0,28,187,0,0,82,2,5,0,0,0,0,0,3,0,0,0,96,69,0,0,2,0,0,0,48,78,0,0,2,0,0,0,56,78,0,0,0,8,0,0,28,187,0,0,151,2,5,0,0,0,0,0,3,0,0,0,96,69,0,0,2,0,0,0,48,78,0,0,2,0,0,0,64,78,0,0,0,8,0,0,28,187,0,0,220,2,5,0,0,0,0,0,2,0,0,0,96,72,0,0,2,0,0,0,72,78,0,0,0,12,0,0,28,187,0,0,41,3,5,0,0,0,0,0,2,0,0,0,136,72,0,0,2,0,0,0,88,78,0,0,0,12,0,0,28,187,0,0,118,3,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,104,78,0,0,0,8,0,0,28,187,0,0,187,3,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,104,78,0,0,0,8,0,0,244,186,0,0,0,4,5,0,240,72,0,0,0,0,0,0,244,186,0,0,77,4,5,0,16,73,0,0,0,0,0,0,28,187,0,0,154,4,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,112,78,0,0,2,0,0,0,28,187,0,0,182,4,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,112,78,0,0,2,0,0,0,28,187,0,0,210,4,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,112,78,0,0,2,0,0,0,28,187,0,0,238,4,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,112,78,0,0,2,0,0,0,244,186,0,0,10,5,5,0,80,73,0,0,0,0,0,0,244,186,0,0,45,5,5,0,112,73,0,0,0,0,0,0,244,186,0,0,80,5,5,0,144,73,0,0,0,0,0,0,244,186,0,0,115,5,5,0,176,73,0,0,0,0,0,0,28,187,0,0,150,5,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,120,78,0,0,0,0,0,0,28,187,0,0,220,5,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,128,78,0,0,0,0,0,0,28,187,0,0,34,6,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,136,78,0,0,0,0,0,0,28,187,0,0,104,6,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,144,78,0,0,0,0,0,0,28,187,0,0,174,6,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,152,78,0,0,2,0,0,0,28,187,0,0,195,6,5,0,0,0,0,0,2,0,0,0,96,69,0,0,2,0,0,0,152,78,0,0,2,0,0,0,244,186,0,0,216,6,5,0,144,74,0,0,0,0,0,0,244,186,0,0,245,6,5,0,176,74,0,0,0,0,0,0,244,186,0,0,18,7,5,0,144,69,0,0,0,0,0,0,244,186,0,0,60,7,5,0,48,70,0,0,0,0,0,0,244,186,0,0,102,7,5,0,176,69,0,0,0,0,0,0,244,186,0,0,145,7,5,0,208,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,186,0,0,153,13,5,0,204,186,0,0,130,13,5,0,28,187,0,0,108,13,5,0,0,0,0,0,1,0,0,0,176,78,0,0,0,0,0,0,28,187,0,0,61,13,5,0,0,0,0,0,1,0,0,0,176,78,0,0,0,0,0,0,28,187,0,0,39,13,5,0,0,0,0,0,1,0,0,0,168,78,0,0,0,0,0,0,28,187,0,0,248,12,5,0,0,0,0,0,1,0,0,0,168,78,0,0,0,0,0,0,204,186,0,0,229,12,5,0,204,186,0,0,195,12,5,0,204,186,0,0,161,12,5,0,244,186,0,0,129,12,5,0,160,78,0,0,0,0,0,0,244,186,0,0,76,12,5,0,160,78,0,0,0,0,0,0,204,186,0,0,55,12,5,0,204,186,0,0,34,12,5,0,204,186,0,0,9,12,5,0,204,186,0,0,240,11,5,0,204,186,0,0,215,11,5,0,204,186,0,0,190,11,5,0,204,186,0,0,166,11,5,0,204,186,0,0,108,12,5,0,204,186,0,0,14,13,5,0,204,186,0,0,83,13,5,0,244,186,0,0,174,13,5,0,144,71,0,0,0,0,0,0,244,186,0,0,203,13,5,0,128,71,0,0,0,0,0,0,244,186,0,0,232,13,5,0,80,35,0,0,0,0,0,0,244,186,0,0,230,20,5,0,184,68,0,0,0,0,0,0,244,186,0,0,253,20,5,0,200,68,0,0,0,0,0,0,244,186,0,0,18,21,5,0,248,68,0,0,0,0,0,0,244,186,0,0,39,21,5,0,40,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,120,0,0,0,42,0,0,0,43,0,0,0,200,255,255,255,200,255,255,255,120,0,0,0,44,0,0,0,45,0,0,0,76,79,0,0,132,79,0,0,152,79,0,0,96,79,0,0,56,0,0,0,0,0,0,0,248,68,0,0,46,0,0,0,47,0,0,0,200,255,255,255,200,255,255,255,248,68,0,0,48,0,0,0,49,0,0,0,0,0,0,0,136,0,0,0,50,0,0,0,51,0,0,0,42,0,0,0,42,0,0,0,42,0,0,0,42,0,0,0,42,0,0,0,43,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,42,0,0,0,44,0,0,0,43,0,0,0,0,0,0,0,168,0,0,0,42,0,0,0,44,0,0,0,45,0,0,0,42,0,0,0,43,0,0,0,46,0,0,0,47,0,0,0,48],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+10240);allocate([46,0,0,0,47,0,0,0,43,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,44,0,0,0,49,0,0,0,43,0,0,0,42,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,47,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,208,0,0,0,52,0,0,0,53,0,0,0,53,0,0,0,54,0,0,0,54,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,208,0,0,0,55,0,0,0,56,0,0,0,55,0,0,0,236,255,255,255,236,255,255,255,208,0,0,0,55,0,0,0,56,0,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,208,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,0,0,0,0,8,0,0,0,42,0,0,0,42,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,96,0,0,0,64,0,0,0,65,0,0,0,53,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,96,0,0,0,66,0,0,0,67,0,0,0,55,0,0,0,236,255,255,255,236,255,255,255,96,0,0,0,66,0,0,0,67,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,0,0,0,0,248,0,0,0,47,0,0,0,68,0,0,0,69,0,0,0,0,0,0,0,16,1,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,50,0,0,0,57,0,0,0,0,0,0,0,40,1,0,0,51,0,0,0,48,0,0,0,49,0,0,0,74,0,0,0,58,0,0,0,59,0,0,0,0,0,0,0,64,1,0,0,75,0,0,0,76,0,0,0,60,0,0,0,48,0,0,0,77,0,0,0,78,0,0,0,50,0,0,0,52,0,0,0,61,0,0,0,0,0,0,0,96,1,0,0,79,0,0,0,80,0,0,0,62,0,0,0,49,0,0,0,81,0,0,0,82,0,0,0,53,0,0,0,54,0,0,0,63,0,0,0,0,0,0,0,120,1,0,0,83,0,0,0,84,0,0,0,42,0,0,0,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,2,0,0,85,0,0,0,86,0,0,0,87,0,0,0,52,0,0,0,0,0,0,0,240,1,0,0,88,0,0,0,89,0,0,0,64,0,0,0,0,0,0,0,160,1,0,0,88,0,0,0,90,0,0,0,64,0,0,0,0,0,0,0,208,1,0,0,91,0,0,0,92,0,0,0,64,0,0,0,228,255,255,255,208,1,0,0,93,0,0,0,94,0,0,0,0,0,0,0,200,0,0,0,42,0,0,0,42,0,0,0,95,0,0,0,96,0,0,0,48,0,0,0,0,0,0,0,176,1,0,0,97,0,0,0,98,0,0,0,64,0,0,0,65,0,0,0,99,0,0,0,228,255,255,255,176,1,0,0,100,0,0,0,101,0,0,0,208,255,255,255,208,255,255,255,208,255,255,255,208,255,255,255,176,1,0,0,66,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,0,0,0,0,64,2,0,0,88,0,0,0,105,0,0,0,64,0,0,0,0,0,0,0,32,2,0,0,106,0,0,0,107,0,0,0,64,0,0,0,228,255,255,255,32,2,0,0,108,0,0,0,109,0,0,0,48,0,0,0,0,0,0,0,0,2,0,0,110,0,0,0,111,0,0,0,64,0,0,0,67,0,0,0,112,0,0,0,228,255,255,255,0,2,0,0,113,0,0,0,114,0,0,0,208,255,255,255,208,255,255,255,208,255,255,255,208,255,255,255,0,2,0,0,68,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,0,0,0,0,96,2,0,0,70,0,0,0,118,0,0,0,119,0,0,0,73,0,0,0,55,0,0,0,69,0,0,0,0,0,0,0,192,2,0,0,88,0,0,0,120,0,0,0,64,0,0,0,0,0,0,0,160,2,0,0,121,0,0,0,122,0,0,0,64,0,0,0,228,255,255,255,160,2,0,0,123,0,0,0,124,0,0,0,48,0,0,0,0,0,0,0,128,2,0,0,125,0,0,0,126,0,0,0,64,0,0,0,70,0,0,0,127,0,0,0,228,255,255,255,128,2,0,0,128,0,0,0,129,0,0,0,208,255,255,255,208,255,255,255,208,255,255,255,208,255,255,255,128,2,0,0,71,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,3,0,0,133,0,0,0,134,0,0,0,236,255,255,255,16,3,0,0,135,0,0,0,136,0,0,0,72,0,0,0,24,0,0,0,0,0,0,0,240,2,0,0,137,0,0,0,138,0,0,0,73,0,0,0,139,0,0,0,236,255,255,255,240,2,0,0,140,0,0,0,141,0,0,0,72,0,0,0,232,255,255,255,232,255,255,255,232,255,255,255,232,255,255,255,240,2,0,0,74,0,0,0,142,0,0,0,143,0,0,0,144,0,0,0,0,0,0,0,224,2,0,0,70,0,0,0,145,0,0,0,146,0,0,0,73,0,0,0,56,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,3,0,0,147,0,0,0,148,0,0,0,236,255,255,255,112,3,0,0,149,0,0,0,150,0,0,0,76,0,0,0,24,0,0,0,0,0,0,0,80,3,0,0,151,0,0,0,152,0,0,0,77,0,0,0,153,0,0,0,236,255,255,255,80,3,0,0,154,0,0,0,155,0,0,0,76,0,0,0,232,255,255,255,232,255,255,255,232,255,255,255,232,255,255,255,80,3,0,0,78,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,0,0,0,0,64,3,0,0,70,0,0,0,159,0,0,0,160,0,0,0,73,0,0,0,57,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,3,0,0,161,0,0,0,162,0,0,0,80,0,0,0,53,0,0,0,54,0,0,0,45,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,3,0,0,163,0,0,0,164,0,0,0,64,0,0,0,228,255,255,255,208,3,0,0,165,0,0,0,166,0,0,0,48,0,0,0,0,0,0,0,176,3,0,0,167,0,0,0,168,0,0,0,64,0,0,0,81,0,0,0,169,0,0,0,228,255,255,255,176,3,0,0,170,0,0,0,171,0,0,0,208,255,255,255,208,255,255,255,208,255,255,255,208,255,255,255,176,3,0,0,82,0,0,0,172,0,0,0,173,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,3,0,0,161,0,0,0,175,0,0,0,83,0,0,0,55,0,0,0,54,0,0,0,45,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,4,0,0,70,0,0,0,176,0,0,0,177,0,0,0,73,0,0,0,58,0,0,0,84,0,0,0,0,0,0,0,8,4,0,0,178,0,0,0,179,0,0,0,85,0,0,0,0,0,0,0,72,4,0,0,70,0,0,0,180,0,0,0,181,0,0,0,73,0,0,0,59,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,112,4,0,0,182,0,0,0,183,0,0,0,184,0,0,0,42,0,0,0,43,0,0,0,42,0,0,0,87,0,0,0,88,0,0,0,43,0,0,0,89,0,0,0,44,0,0,0,0,0,0,0,192,0,0,0,224,0,0,0,240,0,0,0,248,0,0,0,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,4,0,0,161,0,0,0,185,0,0,0,90,0,0,0,56,0,0,0,54,0,0,0,45,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0,144,4,0,0,161,0,0,0,186,0,0,0,91,0,0,0,57,0,0,0,58,0,0,0,45,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,4,0,0,187,0,0,0,188,0,0,0,92,0,0,0,16,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,252,255,255,255,224,4,0,0,189,0,0,0,190,0,0,0,93,0,0,0,236,255,255,255,236,255,255,255,224,4,0,0,189,0,0,0,190,0,0,0,0,0,0,0,248,4,0,0,50,0,0,0,191,0,0,0,192,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,4,0,0,193,0,0,0,194,0,0,0,92,0,0,0,94,0,0,0,195,0,0,0,16,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,252,255,255,255,192,4,0,0,196,0,0,0,197,0,0,0,93,0,0,0,236,255,255,255,236,255,255,255,192,4,0,0,196,0,0,0,197,0,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,192,4,0,0,95,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,0,0,0,0,8,5,0,0,70,0,0,0,201,0,0,0,202,0,0,0,73,0,0,0,60,0,0,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,248,68,0,0,46,0,0,0,47,0,0,0,152,255,255,255,152,255,255,255,248,68,0,0,48,0,0,0,49,0,0,0,104,0,0,0,0,0,0,0,96,5,0,0,203,0,0,0,204,0,0,0,152,255,255,255,152,255,255,255,96,5,0,0,205,0,0,0,206,0,0,0,48,91,0,0,8,91,0,0,28,91,0,0,68,91,0,0,20,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,5,0,0,207,0,0,0,208,0,0,0,97,0,0,0,16,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,252,255,255,255,56,5,0,0,209,0,0,0,210,0,0,0,98,0,0,0,236,255,255,255,236,255,255,255,56,5,0,0,209,0,0,0,210,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,5,0,0,211,0,0,0,212,0,0,0,97,0,0,0,99,0,0,0,213,0,0,0,16,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,252,255,255,255,24,5,0,0,214,0,0,0,215,0,0,0,98,0,0,0,236,255,255,255,236,255,255,255,24,5,0,0,214,0,0,0,215,0,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,24,5,0,0,100,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,0,0,0,0,80,5,0,0,219,0,0,0,220,0,0,0,51,0,0,0,47,0,0,0,43,0,0,0,44,0,0,0,101,0,0,0,43,0,0,0,43,0,0,0,102,0,0,0,45,0,0,0,61,0,0,0,44,0,0,0,62,0,0,0,108,0,0,0,0,0,0,0,200,68,0,0,221,0,0,0,222,0,0,0,148,255,255,255,148,255,255,255,200,68,0,0,223,0,0,0,224,0,0,0,108,0,0,0,0,0,0,0,112,5,0,0,225,0,0,0,226,0,0,0,148,255,255,255,148,255,255,255,112,5,0,0,227,0,0,0,228,0,0,0,104,93,0,0,64,93,0,0,84,93,0,0,124,93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,6,0,0,229,0,0,0,230,0,0,0,103,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,200,68,0,0,221,0,0,0,222,0,0,0,196,255,255,255,196,255,255,255,200,68,0,0,223,0,0,0,224,0,0,0,60,0,0,0,0,0,0,0,112,6,0,0,231,0,0,0,232,0,0,0,196,255,255,255,196,255,255,255,112,6,0,0,233,0,0,0,234,0,0,0,8,94,0,0,224,93,0,0,244,93,0,0,28,94,0,0,0,0,0,0,88,6,0,0,235,0,0,0,236,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,255,255,255,127,255,255,255,255,0,0,0,0,176,6,0,0,237,0,0,0,238,0,0,0,104,0,0,0,0,0,0,0,224,6,0,0,237,0,0,0,239,0,0,0,104,0,0,0,0,0,0,0,240,6,0,0,237,0,0,0,240,0,0,0,104,0,0,0,0,0,0,0,8,7,0,0,241,0,0,0,242,0,0,0,59,0,0,0,0,0,0,0,24,7,0,0,243,0,0,0,244,0,0,0,60,0,0,0,0,0,0,0,48,7,0,0,245,0,0,0,246,0,0,0,48,0,0,0,0,0,0,0,40,7,0,0,247,0,0,0,248,0,0,0,42,0,0,0,0,0,0,0,72,7,0,0,249,0,0,0,250,0,0,0,105,0,0,0,0,0,0,0,0,7,0,0,251,0,0,0,252,0,0,0,42,0,0,0,0,0,0,0,64,7,0,0,253,0,0,0,254,0,0,0,42,0,0,0,0,0,0,0,184,8,0,0,255,0,0,0,0,1,0,0,106,0,0,0,52,0,0,0,1,1,0,0,2,1,0,0,3,1,0,0,63,0,0,0,107,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,176,7,0,0,4,1,0,0,5,1,0,0,53,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,176,7,0,0,6,1,0,0,7,1,0,0,55,0,0,0,236,255,255,255,236,255,255,255,176,7,0,0,6,1,0,0,7,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,112,8,0,0,8,1,0,0,9,1,0,0,53,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,112,8,0,0,10,1,0,0,11,1,0,0,55,0,0,0,236,255,255,255,236,255,255,255,112,8,0,0,10,1,0,0,11,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,7,0,0,12,1,0,0,13,1,0,0,108,0,0,0,16,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,252,255,255,255,120,7,0,0,14,1,0,0,15,1,0,0,109,0,0,0,236,255,255,255,236,255,255,255,120,7,0,0,14,1,0,0,15,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,7,0,0,16,1,0,0,17,1,0,0,108,0,0,0,110,0,0,0,18,1,0,0,16,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,252,255,255,255,88,7,0,0,19,1,0,0,20,1,0,0,109,0,0,0,236,255,255,255,236,255,255,255,88,7,0,0,19,1,0,0,20,1,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,88,7,0,0,111,0,0,0,21,1,0,0,22,1,0,0,23,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,144,7,0,0,24,1,0,0,25,1,0,0,53,0,0,0,112,0,0,0,26,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,144,7,0,0,27,1,0,0,28,1,0,0,55,0,0,0,236,255,255,255,236,255,255,255,144,7,0,0,27,1,0,0,28,1,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,144,7,0,0,113,0,0,0,29,1,0,0,30,1,0,0,31,1,0,0,0,0,0,0,48,8,0,0,32,1,0,0,33,1,0,0,114,0,0,0,248,255,255,255,48,8,0,0,34,1,0,0,35,1,0,0,28,0,0,0,0,0,0,0,16,8,0,0,36,1,0,0,37,1,0,0,114,0,0,0,115,0,0,0,38,1,0,0,248,255,255,255,16,8,0,0,39,1,0,0,40,1,0,0,228,255,255,255,228,255,255,255,228,255,255,255,228,255,255,255,16,8,0,0,116,0,0,0,41,1,0,0,42,1,0,0,43,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,80,8,0,0,44,1,0,0,45,1,0,0,53,0,0,0,117,0,0,0,46,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,80,8,0,0,47,1,0,0,48,1,0,0,55,0,0,0,236,255,255,255,236,255,255,255,80,8,0,0,47,1,0,0,48,1,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,80,8,0,0,118,0,0,0,49,1,0,0,50,1,0,0,51,1,0,0,0,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,200,7,0,0,52,1,0,0,53,1,0,0,53,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,200,7,0,0,54,1,0,0,55,1,0,0,55,0,0,0,236,255,255,255,236,255,255,255,200,7,0,0,54,1,0,0,55,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,136,8,0,0,56,1,0,0,57,1,0,0,53,0,0,0,119,0,0,0,58,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,136,8,0,0,59,1,0,0,60,1,0,0,55,0,0,0,236,255,255,255,236,255,255,255,136,8,0,0,59,1,0,0,60,1,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,136,8,0,0,120,0,0,0,61,1,0,0,62,1,0,0,63,1,0,0,0,0,0,0,168,8,0,0,64,1,0,0,65,1,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,8,0,0,53,0,0,0,61,0,0,0,0,0,0,0,216,8,0,0,54,0,0,0,62,0,0,0,0,0,0,0,0,9,0,0,55,0,0,0,63,0,0,0,0,0,0,0,248,8,0,0,42,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,216,9,0,0,66,1,0,0,67,1,0,0,122,0,0,0,248,255,255,255,216,9,0,0,68,1,0,0,69,1,0,0,28,0,0,0,0,0,0,0,184,9,0,0,70,1,0,0,71,1,0,0,122,0,0,0,123,0,0,0,72,1,0,0,248,255,255,255,184,9,0,0,73,1,0,0,74,1,0,0,228,255,255,255,228,255,255,255,228,255,255,255,228,255,255,255,184,9,0,0,124,0,0,0,75,1,0,0,76,1,0,0,77,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,10,0,0,78,1,0,0,79,1,0,0,125,0,0,0,16,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,252,255,255,255,96,10,0,0,80,1,0,0,81,1,0,0,126,0,0,0,236,255,255,255,236,255,255,255,96,10,0,0,80,1,0,0,81,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,0,0,0,0,48,10,0,0,82,1,0,0,83,1,0,0,56,0,0,0,248,255,255,255,48,10,0,0,84,1,0,0,85,1,0,0,192,255,255,255,192,255,255,255,48,10,0,0,86,1,0,0,87,1,0,0,64,0,0,0,0,0,0,0,200,68,0,0,221,0,0,0,222,0,0,0,192,255,255,255,192,255,255,255,200,68,0,0,223,0,0,0,224,0,0,0,40,104,0,0,104,106,0,0,100,104,0,0,120,104,0,0,164,106,0,0,184,106,0,0,144,106,0,0,124,106,0,0,80,104,0,0,60,104,0,0,0,0,0,0,0,10,0,0,88,1,0,0,89,1,0,0,90,1,0,0,64,0,0,0,91,1,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,224,7,0,0,92,1,0,0,93,1,0,0,53,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,224,7,0,0,94,1,0,0,95,1,0,0,55,0,0,0,236,255,255,255,236,255,255,255,224,7,0,0,94,1,0,0,95,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,16,10,0,0,96,1,0,0,97,1,0,0,53,0,0,0,127,0,0,0,98,1,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,16,10,0,0,99,1,0,0,100,1,0,0,55,0,0,0,236,255,255,255,236,255,255,255,16,10,0,0,99,1,0,0,100,1,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,16,10,0,0,128,0,0,0,101,1,0,0,102,1,0,0,103,1,0,0,64,0,0,0,0,0,0,0,40,69,0,0,104,1,0,0,105,1,0,0,56,0,0,0,248,255,255,255,40,69,0,0,106,1,0,0,107,1,0,0,192,255,255,255,192,255,255,255,40,69,0,0,108,1,0,0,109,1,0,0,56,0,0,0,0,0,0,0,248,68,0,0,46,0,0,0,47,0,0,0,200,255,255,255,200,255,255,255,248,68,0,0,48,0,0,0,49,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,10,0,0,110,1,0,0,111,1,0,0,125,0,0,0,129,0,0,0,112,1,0,0,16,0,0,0,252,255,255,255,252,255,255,255,252,255,255,255,252,255,255,255,64,10,0,0,113,1,0,0,114,1,0,0,126,0,0,0,236,255,255,255,236,255,255,255,64,10,0,0,113,1,0,0,114,1,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,64,10,0,0,130,0,0,0,115,1,0,0,116,1,0,0,117,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,16,0,0,118,1,0,0,119,1,0,0,120,1,0,0,64,0,0,0,121,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,16,0,0,122,1,0,0,123,1,0,0,131,0,0,0,56,0,0,0,124,1,0,0,125,1,0,0,57,0,0,0,65,0,0,0,132,0,0,0,0,0,0,0,184,16,0,0,126,1,0,0,127,1,0,0,133,0,0,0,58,0,0,0,128,1,0,0,129,1,0,0,59,0,0,0,66,0,0,0,134,0,0,0,0,0,0,0,160,16,0,0,130,1,0,0,131,1,0,0,135,0,0,0,60,0,0,0,132,1,0,0,133,1,0,0,61,0,0,0,67,0,0,0,136,0,0,0,0,0,0,0,136,16,0,0,134,1,0,0,135,1,0,0,137,0,0,0,62,0,0,0,136,1,0,0,137,1,0,0,63,0,0,0,68,0,0,0,138,0,0,0,0,0,0,0,112,16,0,0,138,1,0,0,139,1,0,0,139,0,0,0,64,0,0,0,140,1,0,0,141,1,0,0,65,0,0,0,69,0,0,0,140,0,0,0,0,0,0,0,88,16,0,0,142,1,0,0,143,1,0,0,141,0,0,0,66,0,0,0,144,1,0,0,145,1,0,0,67,0,0,0,70,0,0,0,142,0,0,0,0,0,0,0,40,16,0,0,146,1,0,0,147,1,0,0,143,0,0,0,68,0,0,0,148,1,0,0,149,1,0,0,69,0,0,0,71,0,0,0,144,0,0,0,0,0,0,0,208,15,0,0,150,1,0,0,151,1,0,0,145,0,0,0,70,0,0,0,152,1,0,0,153,1,0,0,71,0,0,0,72,0,0,0,146,0,0,0,0,0,0,0,184,15,0,0,154,1,0,0,155,1,0,0,147,0,0,0,72,0,0,0,156,1,0,0,157,1,0,0,73,0,0,0,73,0,0,0,148,0,0,0,0,0,0,0,160,15,0,0,158,1,0,0,159,1,0,0,149,0,0,0,74,0,0,0,160,1,0,0,161,1,0,0,75,0,0,0,74,0,0,0,150,0,0,0,0,0,0,0,136,15,0,0,162,1,0,0,163,1,0,0,151,0,0,0,76,0,0,0,164,1,0,0,165,1,0,0,77,0,0,0,75,0,0,0,152,0,0,0,0,0,0,0,112,15,0,0,166,1,0,0,167,1,0,0,153,0,0,0,78,0,0,0,168,1,0,0,169,1,0,0,79,0,0,0,76,0,0,0,154,0,0,0,0,0,0,0,88,15,0,0,170,1,0,0,171,1,0,0,155,0,0,0,80,0,0,0,172,1,0,0,173,1,0,0,81,0,0,0,77,0,0,0,156,0,0,0,0,0,0,0,64,15,0,0,174,1,0,0,175,1,0,0,157,0,0,0,82,0,0,0,176,1,0,0,177,1,0,0,83,0,0,0,78,0,0,0,158,0,0,0,0,0,0,0,40,15,0,0,178,1,0,0,179,1,0,0,159,0,0,0,84,0,0,0,180,1,0,0,181,1,0,0,85,0,0,0,79,0,0,0,160,0,0,0,0,0,0,0,16,15,0,0,182,1,0,0,183,1,0,0,161,0,0,0,86,0,0,0,184,1,0,0,185,1,0,0,87,0,0,0,80,0,0,0,162,0,0,0,0,0,0,0,248,14,0,0,186,1,0,0,187,1,0,0,163,0,0,0,88,0,0,0,188,1,0,0,189,1,0,0,89,0,0,0,81,0,0,0,164,0,0,0,0,0,0,0,224,14,0,0,190,1,0,0,191,1,0,0,165,0,0,0,90,0,0,0,192,1,0,0,193,1,0,0,91,0,0,0,82,0,0,0,166,0,0,0,0,0,0,0,200,14,0,0,194,1,0,0,195,1,0,0,167,0,0,0,92,0,0,0,196,1,0,0,197,1,0,0,93,0,0,0,83,0,0,0,168,0,0,0,0,0,0,0,176,14,0,0,198,1,0,0,199,1,0,0,169,0,0,0,94,0,0,0,200,1,0,0,201,1,0,0,95,0,0,0,84,0,0,0,170,0,0,0,0,0,0,0,152,14,0,0,202,1,0,0,203,1,0,0,171,0,0,0,96,0,0,0,204,1,0,0,205,1,0,0,97,0,0,0,85,0,0,0,172,0,0,0,0,0,0,0,128,14,0,0,206,1,0,0,207,1,0,0,173,0,0,0,98,0,0,0,208,1,0,0,209,1,0,0,99,0,0,0,86,0,0,0,174,0,0,0,0,0,0,0,104,14,0,0,210,1,0,0,211,1,0,0,175,0,0,0,100,0,0,0,212,1,0,0,213,1,0,0,101,0,0,0,87,0,0,0,176,0,0,0,0,0,0,0,80,14,0,0,214,1,0,0,215,1,0,0,177,0,0,0,102,0,0,0,216,1,0,0,217,1,0,0,103,0,0,0,88,0,0,0,178,0,0,0,0,0,0,0,56,14,0,0,218,1,0,0,219,1,0,0,179,0,0,0,104,0,0,0,220,1,0,0,221,1,0,0,105,0,0,0,89,0,0,0,180,0,0,0,0,0,0,0,32,14,0,0,222,1,0,0,223,1,0,0,181,0,0,0,106,0,0,0,224,1,0,0,225,1,0,0,107,0,0,0,90,0,0,0,182,0,0,0,0,0,0,0,8,14,0,0,226,1,0,0,227,1,0,0,183,0,0,0,108,0,0,0,228,1,0,0,229,1,0,0,109,0,0,0,91,0,0,0,184,0,0,0,0,0,0,0,240,13,0,0,230,1,0,0,231,1,0,0,185,0,0,0,110,0,0,0,232,1,0,0,233,1,0,0,111,0,0,0,92,0,0,0,186,0,0,0,0,0,0,0,216,13,0,0,234,1,0,0,235,1,0,0,187,0,0,0,112,0,0,0,236,1,0,0,237,1,0,0,113,0,0,0,93,0,0,0,188,0,0,0,0,0,0,0,192,13,0,0,238,1,0,0,239,1,0,0,189,0,0,0,114,0,0,0,240,1,0,0,241,1,0,0,115,0,0,0,94,0,0,0,190,0,0,0,0,0,0,0,168,13,0,0,242,1,0,0,243,1,0,0,191,0,0,0,116,0,0,0,244,1,0,0,245,1,0,0,117,0,0,0,95,0,0,0,192,0,0,0,0,0,0,0,144,13,0,0,242,1,0,0,246,1,0,0,193,0,0,0,118,0,0,0,247,1,0,0,248,1,0,0,119,0,0,0,96,0,0,0,194,0,0,0,0,0,0,0,120,13,0,0,242,1,0,0,249,1,0,0,195,0,0,0,120,0,0,0,250,1,0,0,251,1,0,0,121,0,0,0,97,0,0,0,196,0,0,0,0,0,0,0,96,13,0,0,242,1,0,0,252,1,0,0,197,0,0,0,122,0,0,0,253,1,0,0,254,1,0,0,123,0,0,0,98,0,0,0,198,0,0,0,0,0,0,0,72,13,0,0,242,1,0,0,255,1,0,0,199,0,0,0,124,0,0,0,0,2,0,0,1,2,0,0,125,0,0,0,99,0,0,0,200,0,0,0,0,0,0,0,48,13,0,0,242,1,0,0,2,2,0,0,201,0,0,0,126,0,0,0,3,2,0,0,4,2,0,0,127,0,0,0,100,0,0,0,202,0,0,0,0,0,0,0,24,13,0,0,5,2,0,0,6,2,0,0,203,0,0,0,128,0,0,0,7,2,0,0,8,2,0,0,129,0,0,0,101,0,0,0,204,0,0,0,0,0,0,0,0,13,0,0,9,2,0,0,10,2,0,0,205,0,0,0,130,0,0,0,11,2,0,0,12,2,0,0,131,0,0,0,102,0,0,0,206,0,0,0,0,0,0,0,232,12,0,0,242,1,0,0,13,2,0,0,207,0,0,0,132,0,0,0,14,2,0,0,15,2,0,0,133,0,0,0,103,0,0,0,208,0,0,0,0,0,0,0,208,12,0,0,242,1,0,0,16,2,0,0,209,0,0,0,134,0,0,0,17,2,0,0,18,2,0,0,135,0,0,0,104,0,0,0,210,0,0,0,0,0,0,0,184,12,0,0,242,1,0,0,19,2,0,0,211,0,0,0,136,0,0,0,20,2,0,0,21,2,0,0,137,0,0,0,105,0,0,0,212,0,0,0,0,0,0,0,160,12,0,0,242,1,0,0,22,2,0,0,213,0,0,0,138,0,0,0,23,2,0,0,24,2,0,0,139,0,0,0,106,0,0,0,214,0,0,0,0,0,0,0,136,12,0,0,242,1,0,0,25,2,0,0,215,0,0,0,140,0,0,0,26,2,0,0,27,2,0,0,141,0,0,0,107,0,0,0,216,0,0,0,0,0,0,0,112,12,0,0,242,1,0,0,28,2,0,0,217,0,0,0,142,0,0,0,29,2,0,0,30,2,0,0,143,0,0,0,108,0,0,0,218,0,0,0,0,0,0,0,88,12,0,0,242,1,0,0,31,2,0,0,219,0,0,0,144,0,0,0,32,2,0,0,33,2,0,0,145,0,0,0,109,0,0,0,220,0,0,0,0,0,0,0,64,12,0,0,34,2,0,0,35,2,0,0,221,0,0,0,146,0,0,0,36,2,0,0,37,2,0,0,147,0,0,0,110,0,0,0,222,0,0,0,0,0,0,0,40,12,0,0,38,2,0,0,39,2,0,0,223,0,0,0,148,0,0,0,40,2,0,0,41,2,0,0,149,0,0,0,111,0,0,0,224,0,0,0,0,0,0,0,16,12,0,0,42,2,0,0,43,2,0,0,225,0,0,0,150,0,0,0,44,2,0,0,45,2,0,0,151,0,0,0,112,0,0,0,226,0,0,0,0,0,0,0,240,11,0,0,46,2,0,0,47,2,0,0,227,0,0,0,152,0,0,0,48,2,0,0,49,2,0,0,45,0,0,0,113,0,0,0,228,0,0,0,0,0,0,0,208,11,0,0,46,2,0,0,50,2,0,0,229,0,0,0,153,0,0,0,51,2,0,0,52,2,0,0,46,0,0,0,114,0,0,0,230,0,0,0,0,0,0,0,176,11,0,0,46,2,0,0,53,2,0,0,231,0,0,0,154,0,0,0,54,2,0,0,55,2,0,0,47,0,0,0,115,0,0,0,232,0,0,0,0,0,0,0,144,11,0,0,46,2,0,0,56,2,0,0,233,0,0,0,155,0,0,0,57,2,0,0,58,2,0,0,48,0,0,0,116,0,0,0,234,0,0,0,0,0,0,0,96,11,0,0,46,2,0,0,59,2,0,0,235,0,0,0,156,0,0,0,60,2,0,0,61,2,0,0,49,0,0,0,117,0,0,0,236,0,0,0,0,0,0,0,72,11,0,0,62,2,0,0,63,2,0,0,237,0,0,0,157,0,0,0,64,2,0,0,65,2,0,0,158,0,0,0,118,0,0,0,238,0,0,0,0,0,0,0,48,11,0,0,66,2,0,0,67,2,0,0,239,0,0,0,159,0,0,0,68,2,0,0,69,2,0,0,160,0,0,0,119,0,0,0,240,0,0,0,0,0,0,0,24,11,0,0,70,2,0,0,71,2,0,0,241,0,0,0,161,0,0,0,72,2,0,0,73,2,0,0,162,0,0,0,120,0,0,0,242,0,0,0,0,0,0,0,0,11,0,0,74,2,0,0,75,2,0,0,243,0,0,0,163,0,0,0,76,2,0,0,77,2,0,0,164,0,0,0,121,0,0,0,244,0,0,0,0,0,0,0,232,10,0,0,78,2,0,0,79,2,0,0,245,0,0,0,165,0,0,0,80,2,0,0,81,2,0,0,166,0,0,0,122,0,0,0,246,0,0,0,0,0,0,0,208,10,0,0,82,2,0,0,83,2,0,0,247,0,0,0,167,0,0,0,84,2,0,0,85,2,0,0,168,0,0,0,123,0,0,0,248,0,0,0,0,0,0,0,184,10,0,0,86,2,0,0,87,2,0,0,249,0,0,0,169,0,0,0,88,2,0,0,89,2,0,0,170,0,0,0,124,0,0,0,250,0,0,0,0,0,0,0,160,10,0,0,90,2,0,0,91,2,0,0,251,0,0,0,171,0,0,0,92,2,0,0,93,2,0,0,172,0,0,0,125,0,0,0,252,0,0,0,0,0,0,0,128,10,0,0,94,2,0,0,95,2,0,0,253,0,0,0,173,0,0,0,96,2,0,0,97,2,0,0,174,0,0,0,126,0,0,0,254,0,0,0,1,0,0,0,0,0,0,0,8,16,0,0,98,2,0,0,99,2,0,0,122,0,0,0,248,255,255,255,8,16,0,0,100,2,0,0,101,2,0,0,28,0,0,0,0,0,0,0,232,15,0,0,102,2,0,0,103,2,0,0,122,0,0,0,255,0,0,0,104,2,0,0,248,255,255,255,232,15,0,0,105,2,0,0,106,2,0,0,228,255,255,255,228,255,255,255,228,255,255,255,228,255,255,255,232,15,0,0,0,1,0,0,107,2,0,0,108,2,0,0,109,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,16,0,0,110,2,0,0,111,2,0,0,1,1,0,0,175,0,0,0,112,2,0,0,113,2,0,0,64,0,0,0,127,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,0,0,114,2,0,0,115,2,0,0,116,2,0,0,64,0,0,0,117,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,17,0,0,118,2,0,0,119,2,0,0,120,2,0,0,64,0,0,0,121,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,17,0,0,122,2,0,0,123,2,0,0,3,1,0,0,176,0,0,0,124,2,0,0,125,2,0,0,49,0,0,0,128,0,0,0,4,1,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+20480);allocate([61,0,0,0,55,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,36,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,17,0,0,126,2,0,0,127,2,0,0,55,0,0,0,5,1,0,0,128,2,0,0,240,255,255,255,240,255,255,255,88,17,0,0,129,2,0,0,130,2,0,0,220,255,255,255,220,255,255,255,220,255,255,255,220,255,255,255,88,17,0,0,6,1,0,0,131,2,0,0,132,2,0,0,133,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,17,0,0,129,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,133,0,0,0,134,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,139,0,0,0,140,0,0,0,141,0,0,0,142,0,0,0,143,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,150,0,0,0,151,0,0,0,152,0,0,0,153,0,0,0,154,0,0,0,155,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,159,0,0,0,160,0,0,0,161,0,0,0,162,0,0,0,163,0,0,0,164,0,0,0,165,0,0,0,166,0,0,0,167,0,0,0,168,0,0,0,169,0,0,0,170,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,181,0,0,0,182,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,205,0,0,0,206,0,0,0,207,0,0,0,208,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,213,0,0,0,214,0,0,0,215,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,219,0,0,0,220,0,0,0,173,0,0,0,221,0,0,0,0,0,0,0,224,18,0,0,134,2,0,0,135,2,0,0,136,2,0,0,64,0,0,0,137,2,0,0,36,0,0,0,0,0,0,0,20,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,138,2,0,0,139,2,0,0,53,0,0,0,16,0,0,0,236,255,255,255,0,0,0,0,236,255,255,255,236,255,255,255,48,0,0,0,140,2,0,0,141,2,0,0,55,0,0,0,220,255,255,255,220,255,255,255,48,0,0,0,140,2,0,0,141,2,0,0,16,0,0,0,236,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,20,0,0,0,20,0,0,0,20,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,0,0,0,0,192,18,0,0,222,0,0,0,142,2,0,0,143,2,0,0,0,0,0,0,160,18,0,0,223,0,0,0,144,2,0,0,145,2,0,0,0,0,0,0,144,18,0,0,146,2,0,0,147,2,0,0,148,2,0,0,64,0,0,0,149,2,0,0,0,0,0,0,112,18,0,0,150,2,0,0,151,2,0,0,7,1,0,0,224,0,0,0,152,2,0,0,153,2,0,0,65,0,0,0,174,0,0,0,8,1,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,144,17,0,0,154,2,0,0,155,2,0,0,53,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,144,17,0,0,156,2,0,0,157,2,0,0,55,0,0,0,236,255,255,255,236,255,255,255,144,17,0,0,156,2,0,0,157,2,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,0,0,0,0,48,18,0,0,158,2,0,0,159,2,0,0,9,1,0,0,225,0,0,0,160,2,0,0,161,2,0,0,42,0,0,0,175,0,0,0,10,1,0,0,0,0,0,0,32,18,0,0,162,2,0,0,163,2,0,0,164,2,0,0,64,0,0,0,165,2,0,0,0,0,0,0,16,18,0,0,166,2,0,0,167,2,0,0,168,2,0,0,64,0,0,0,169,2,0,0,0,0,0,0,240,17,0,0,170,2,0,0,171,2,0,0,172,2,0,0,64,0,0,0,173,2,0,0,0,0,0,0,224,17,0,0,174,2,0,0,175,2,0,0,176,2,0,0,64,0,0,0,177,2,0,0,0,0,0,0,192,17,0,0,178,2,0,0,179,2,0,0,180,2,0,0,64,0,0,0,181,2,0,0,0,0,0,0,208,17,0,0,182,2,0,0,183,2,0,0,184,2,0,0,64,0,0,0,185,2,0,0,0,0,0,0,0,18,0,0,186,2,0,0,187,2,0,0,188,2,0,0,64,0,0,0,189,2,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,80,18,0,0,190,2,0,0,191,2,0,0,53,0,0,0,11,1,0,0,192,2,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,80,18,0,0,193,2,0,0,194,2,0,0,55,0,0,0,236,255,255,255,236,255,255,255,80,18,0,0,193,2,0,0,194,2,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,80,18,0,0,12,1,0,0,195,2,0,0,196,2,0,0,197,2,0,0,0,0,0,0,176,18,0,0,70,0,0,0,198,2,0,0,199,2,0,0,73,0,0,0,176,0,0,0,13,1,0,0,0,0,0,0,208,18,0,0,70,0,0,0,200,2,0,0,201,2,0,0,73,0,0,0,177,0,0,0,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,18,0,0,129,0,0,0,130,0,0,0,131,0,0,0,178,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,180,0,0,0,181,0,0,0,182,0,0,0,142,0,0,0,183,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,150,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,154,0,0,0,187,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,188,0,0,0,160,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,165,0,0,0,193,0,0,0,167,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,233,0,0,0,197,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,19,0,0,129,0,0,0,130,0,0,0,131,0,0,0,198,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,199,0,0,0,181,0,0,0,141,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,201,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,202,0,0,0,150,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,154,0,0,0,203,0,0,0,156,0,0,0,204,0,0,0,158,0,0,0,188,0,0,0,160,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,165,0,0,0,193,0,0,0,167,0,0,0,194,0,0,0,195,0,0,0,205,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,234,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,235,0,0,0,236,0,0,0,237,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,233,0,0,0,173,0,0,0,221,0,0,0,0,0,0,0,128,19,0,0,202,2,0,0,203,2,0,0,204,2,0,0,64,0,0,0,205,2,0,0,0,0,0,0,112,19,0,0,206,2,0,0,207,2,0,0,208,2,0,0,64,0,0,0,209,2,0,0,0,0,0,0,96,19,0,0,210,2,0,0,211,2,0,0,212,2,0,0,64,0,0,0,213,2,0,0,0,0,0,0,80,19,0,0,214,2,0,0,215,2,0,0,216,2,0,0,64,0,0,0,217,2,0,0,0,0,0,0,56,19,0,0,158,2,0,0,218,2,0,0,15,1,0,0,238,0,0,0,219,2,0,0,220,2,0,0,43,0,0,0,206,0,0,0,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,19,0,0,221,2,0,0,222,2,0,0,223,2,0,0,64,0,0,0,224,2,0,0,0,0,0,0,176,19,0,0,225,2,0,0,226,2,0,0,227,2,0,0,64,0,0,0,228,2,0,0,0,0,0,0,160,19,0,0,229,2,0,0,230,2,0,0,231,2,0,0,64,0,0,0,232,2,0,0,0,0,0,0,168,17,0,0,233,2,0,0,234,2,0,0,42,0,0,0,42,0,0,0,17,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,42,0,0,0,21,1,0,0,0,0,0,0,144,19,0,0,235,2,0,0,236,2,0,0,239,0,0,0,240,0,0,0,17,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,241,0,0,0,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,19,0,0,237,2,0,0,238,2,0,0,55,0,0,0,240,255,255,255,240,255,255,255,208,19,0,0,239,2,0,0,240,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,19,0,0,207,0,0,0,208,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,213,0,0,0,214,0,0,0,215,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,219,0,0,0,220,0,0,0,221,0,0,0,222,0,0,0,223,0,0,0,224,0,0,0,225,0,0,0,226,0,0,0,227,0,0,0,228,0,0,0,229,0,0,0,230,0,0,0,231,0,0,0,232,0,0,0,233,0,0,0,234,0,0,0,235,0,0,0,236,0,0,0,237,0,0,0,238,0,0,0,239,0,0,0,240,0,0,0,241,0,0,0,242,0,0,0,243,0,0,0,244,0,0,0,245,0,0,0,246,0,0,0,247,0,0,0,248,0,0,0,249,0,0,0,250,0,0,0,242,0,0,0,243,0,0,0,244,0,0,0,245,0,0,0,246,0,0,0,247,0,0,0,248,0,0,0,249,0,0,0,250,0,0,0,251,0,0,0,252,0,0,0,253,0,0,0,254,0,0,0,255,0,0,0,0,1,0,0,1,1,0,0,2,1,0,0,3,1,0,0,4,1,0,0,5,1,0,0,6,1,0,0,7,1,0,0,8,1,0,0,9,1,0,0,10,1,0,0,11,1,0,0,12,1,0,0,13,1,0,0,14,1,0,0,15,1,0,0,16,1,0,0,17,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,21,1,0,0,22,1,0,0,23,1,0,0,24,1,0,0,25,1,0,0,26,1,0,0,27,1,0,0,28,1,0,0,29,1,0,0,251,0,0,0,30,1,0,0,0,0,0,0,8,20,0,0,88,1,0,0,241,2,0,0,242,2,0,0,252,0,0,0,243,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,20,0,0,129,0,0,0,130,0,0,0,131,0,0,0,198,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,199,0,0,0,181,0,0,0,141,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,150,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,154,0,0,0,187,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,188,0,0,0,160,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,165,0,0,0,193,0,0,0,167,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,31,1,0,0,32,1,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,33,1,0,0,173,0,0,0,221,0,0,0,36,0,0,0,0,0,0,0,20,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,138,2,0,0,139,2,0,0,53,0,0,0,16,0,0,0,236,255,255,255,0,0,0,0,236,255,255,255,236,255,255,255,48,0,0,0,140,2,0,0,141,2,0,0,55,0,0,0,220,255,255,255,220,255,255,255,48,0,0,0,140,2,0,0,141,2,0,0,16,0,0,0,236,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,20,0,0,0,20,0,0,0,20,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,56,0,0,0,36,0,0,0,0,0,0,0,20,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,48,20,0,0,244,2,0,0,245,2,0,0,53,0,0,0,22,1,0,0,246,2,0,0,16,0,0,0,236,255,255,255,0,0,0,0,236,255,255,255,236,255,255,255,48,20,0,0,247,2,0,0,248,2,0,0,55,0,0,0,220,255,255,255,220,255,255,255,48,20,0,0,247,2,0,0,248,2,0,0,200,255,255,255,200,255,255,255,200,255,255,255,200,255,255,255,48,20,0,0,23,1,0,0,249,2,0,0,250,2,0,0,251,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,20,0,0,253,0,0,0,254,0,0,0,131,0,0,0,198,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,199,0,0,0,181,0,0,0,255,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,0,1,0,0,184,0,0,0,1,1,0,0,2,1,0,0,3,1,0,0,187,0,0,0,4,1,0,0,157,0,0,0,158,0,0,0,188,0,0,0,160,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,165,0,0,0,193,0,0,0,167,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,171,0,0,0,172,0,0,0,34,1,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,35,1,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,36,1,0,0,37,1,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,233,0,0,0,173,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,20,0,0,252,2,0,0,253,2,0,0,42,0,0,0,42,0,0,0,17,1,0,0,0,0,0,0,144,20,0,0,254,2,0,0,255,2,0,0,38,1,0,0,39,1,0,0,24,1,0,0,0,0,0,0,160,20,0,0,0,3,0,0,1,3,0,0,40,1,0,0,41,1,0,0,17,1,0,0,0,0,0,0,176,20,0,0,2,3,0,0,3,3,0,0,42,1,0,0,43,1,0,0,25,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,44,1,0,0,21,1,0,0,0,0,0,0,192,20,0,0,4,3,0,0,5,3,0,0,45,1,0,0,46,1,0,0,26,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,47,1,0,0,21,1,0,0,0,0,0,0,224,20,0,0,6,3,0,0,7,3,0,0,48,1,0,0,49,1,0,0,17,1,0,0,0,0,0,0,240,20,0,0,8,3,0,0,9,3,0,0,50,1,0,0,51,1,0,0,17,1,0,0,0,0,0,0,0,21,0,0,10,3,0,0,11,3,0,0,52,1,0,0,53,1,0,0,27,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,54,1,0,0,21,1,0,0,0,0,0,0,128,20,0,0,12,3,0,0,13,3,0,0,55,1,0,0,56,1,0,0,28,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,57,1,0,0,21,1,0,0,0,0,0,0,16,21,0,0,233,2,0,0,14,3,0,0,58,1,0,0,59,1,0,0,17,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,60,1,0,0,21,1,0,0,0,0,0,0,32,21,0,0,15,3,0,0,16,3,0,0,61,1,0,0,62,1,0,0,17,1,0,0,0,0,0,0,48,21,0,0,17,3,0,0,18,3,0,0,63,1,0,0,64,1,0,0,29,1,0,0,30,1,0,0,19,1,0,0,31,1,0,0,65,1,0,0,21,1,0,0,0,0,0,0,88,21,0,0,19,3,0,0,20,3,0,0,66,1,0,0,67,1,0,0,32,1,0,0,18,1,0,0,33,1,0,0,34,1,0,0,68,1,0,0,35,1,0,0,0,0,0,0,104,21,0,0,21,3,0,0,22,3,0,0,69,1,0,0,70,1,0,0,36,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,71,1,0,0,21,1,0,0,0,0,0,0,136,21,0,0,23,3,0,0,24,3,0,0,72,1,0,0,73,1,0,0,17,1,0,0,0,0,0,0,152,21,0,0,25,3,0,0,26,3,0,0,74,1,0,0,75,1,0,0,37,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,76,1,0,0,21,1,0,0,0,0,0,0,184,21,0,0,252,2,0,0,27,3,0,0,77,1,0,0,78,1,0,0,38,1,0,0,0,0,0,0,200,21,0,0,252,2,0,0,28,3,0,0,79,1,0,0,80,1,0,0,38,1,0,0,0,0,0,0,216,21,0,0,29,3,0,0,30,3,0,0,81,1,0,0,82,1,0,0,39,1,0,0,0,0,0,0,232,21,0,0,31,3,0,0,32,3,0,0,83,1,0,0,84,1,0,0,38,1,0,0,0,0,0,0,248,21,0,0,33,3,0,0,34,3,0,0,85,1,0,0,86,1,0,0,38,1,0,0,0,0,0,0,8,22,0,0,35,3,0,0,36,3,0,0,42,0,0,0,42,0,0,0,40,1,0,0,0,0,0,0,40,22,0,0,37,3,0,0,38,3,0,0,87,1,0,0,88,1,0,0,41,1,0,0,0,0,0,0,56,22,0,0,39,3,0,0,40,3,0,0,89,1,0,0,90,1,0,0,40,1,0,0,0,0,0,0,72,22,0,0,35,3,0,0,41,3,0,0,91,1,0,0,92,1,0,0,40,1,0,0,0,0,0,0,88,22,0,0,42,3,0,0,43,3,0,0,93,1,0,0,94,1,0,0,40,1,0,0,0,0,0,0,104,22,0,0,44,3,0,0,45,3,0,0,95,1,0,0,96,1,0,0,40,1,0,0,0,0,0,0,120,22,0,0,46,3,0,0,47,3,0,0,97,1,0,0,98,1,0,0,40,1,0,0,0,0,0,0,136,22,0,0,35,3,0,0,48,3,0,0,99,1,0,0,100,1,0,0,40,1,0,0,0,0,0,0,152,22,0,0,35,3,0,0,49,3,0,0,101,1,0,0,102,1,0,0,40,1,0,0,0,0,0,0,168,22,0,0,50,3,0,0,51,3,0,0,103,1,0,0,104,1,0,0,42,1,0,0,0,0,0,0,184,22,0,0,35,3,0,0,52,3,0,0,105,1,0,0,106,1,0,0,40,1,0,0,0,0,0,0,200,22,0,0,53,3,0,0,54,3,0,0,107,1,0,0,108,1,0,0,43,1,0,0,0,0,0,0,216,22,0,0,55,3,0,0,56,3,0,0,109,1,0,0,110,1,0,0,40,1,0,0,0,0,0,0,232,22,0,0,252,2,0,0,57,3,0,0,42,0,0,0,42,0,0,0,44,1,0,0,0,0,0,0,248,22,0,0,58,3,0,0,59,3,0,0,111,1,0,0,112,1,0,0,44,1,0,0,0,0,0,0,8,23,0,0,60,3,0,0,61,3,0,0,113,1,0,0,114,1,0,0,44,1,0,0,0,0,0,0,24,23,0,0,62,3,0,0,63,3,0,0,115,1,0,0,116,1,0,0,44,1,0,0,0,0,0,0,40,23,0,0,64,3,0,0,65,3,0,0,117,1,0,0,118,1,0,0,44,1,0,0,0,0,0,0,56,23,0,0,66,3,0,0,67,3,0,0,119,1,0,0,120,1,0,0,45,1,0,0,0,0,0,0,72,23,0,0,68,3,0,0,69,3,0,0,121,1,0,0,122,1,0,0,46,1,0,0,0,0,0,0,88,23,0,0,70,3,0,0,71,3,0,0,123,1,0,0,124,1,0,0,44,1,0,0,0,0,0,0,104,23,0,0,72,3,0,0,73,3,0,0,125,1,0,0,126,1,0,0,47,1,0,0,0,0,0,0,120,23,0,0,74,3,0,0,75,3,0,0,127,1,0,0,128,1,0,0,44,1,0,0,0,0,0,0,136,23,0,0,76,3,0,0,77,3,0,0,129,1,0,0,130,1,0,0,48,1,0,0,0,0,0,0,152,23,0,0,252,2,0,0,78,3,0,0,131,1,0,0,132,1,0,0,44,1,0,0,0,0,0,0,168,23,0,0,79,3,0,0,80,3,0,0,133,1,0,0,134,1,0,0,44,1,0,0,0,0,0,0,40,24,0,0,81,3,0,0,82,3,0,0,0,0,0,0,176,25,0,0,83,3,0,0,84,3,0,0,0,0,0,0,160,25,0,0,85,3,0,0,86,3,0,0,0,0,0,0,144,25,0,0,87,3,0,0,88,3,0,0,89,3,0,0,64,0,0,0,90,3,0,0,0,0,0,0,112,25,0,0,91,3,0,0,92,3,0,0,240,255,255,255,112,25,0,0,93,3,0,0,94,3,0,0,0,0,0,0,224,24,0,0,95,3,0,0,96,3,0,0,0,0,0,0,96,25,0,0,97,3,0,0,98,3,0,0,0,0,0,0,64,25,0,0,99,3,0,0,100,3,0,0,252,255,255,255,64,25,0,0,101,3,0,0,102,3,0,0,0,0,0,0,48,25,0,0,103,3,0,0,104,3,0,0,105,3,0,0,64,0,0,0,106,3,0,0,0,0,0,0,16,25,0,0,107,3,0,0,108,3,0,0,252,255,255,255,16,25,0,0,109,3,0,0,110,3,0,0,0,0,0,0,240,24,0,0,111,3,0,0,112,3,0,0,252,255,255,255,240,24,0,0,113,3,0,0,114,3,0,0,0,0,0,0,208,24,0,0,95,3,0,0,115,3,0,0,0,0,0,0,184,24,0,0,116,3,0,0,117,3,0,0,0,0,0,0,120,24,0,0,118,3,0,0,119,3,0,0,252,255,255,255,120,24,0,0,120,3,0,0,121,3,0,0,0,0,0,0,168,24,0,0,122,3,0,0,123,3,0,0,252,255,255,255,168,24,0,0,124,3,0,0,125,3,0,0,0,0,0,0,152,24,0,0,118,3,0,0,126,3,0,0,252,255,255,255,152,24,0,0,127,3,0,0,128,3,0,0,0,0,0,0,96,24,0,0,129,3,0,0,130,3,0,0,252,255,255,255,96,24,0,0,131,3,0,0,132,3,0,0,0,0,0,0,24,24,0,0,133,3,0,0,134,3,0,0,0,0,0,0,80,24,0,0,133,3,0,0,135,3,0,0,0,0,0,0,64,24,0,0,136,3,0,0,137,3,0,0,0,0,0,0,48,24,0,0,133,3,0,0,138,3,0,0,0,0,0,0,8,24,0,0,139,3,0,0,140,3,0,0,0,0,0,0,184,23,0,0,141,3,0,0,142,3,0,0,42,0,0,0,42,0,0,0,17,1,0,0,18,1,0,0,19,1,0,0,20,1,0,0,42,0,0,0,21,1,0,0,0,0,0,0,112,24,0,0,143,3,0,0,144,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,25,0,0,49,1,0,0,5,1,0,0,6,1,0,0,66,0,0,0,50,0,0,0,7,1,0,0,47,0,0,0,8,1,0,0,46,0,0,0,47,0,0,0,43,0,0,0,50,1,0,0,49,0,0,0,50,0,0,0,51,1,0,0,52,0,0,0,44,0,0,0,49,0,0,0,43,0,0,0,67,0,0,0,44,0,0,0,45,0,0,0,135,1,0,0,46,0,0,0,68,0,0,0,69,0,0,0,0,0,0,0,208,25,0,0,52,1,0,0,9,1,0,0,10,1,0,0,70,0,0,0,51,0,0,0,11,1,0,0,47,0,0,0,12,1,0,0,46,0,0,0,47,0,0,0,43,0,0,0,53,1,0,0,49,0,0,0,50,0,0,0,54,1,0,0,52,0,0,0,44,0,0,0,49,0,0,0,43,0,0,0,71,0,0,0,44,0,0,0,45,0,0,0,136,1,0,0,46,0,0,0,72,0,0,0,47,0,0,0,0,0,0,0,240,25,0,0,55,1,0,0,13,1,0,0,45,0,0,0,42,0,0,0,52,0,0,0,14,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,43,0,0,0,48,0,0,0,56,1,0,0,57,1,0,0,51,0,0,0,58,1,0,0,137,1,0,0,49,0,0,0,43,0,0,0,73,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,47,0,0,0,0,0,0,0,0,26,0,0,59,1,0,0,15,1,0,0,16,1,0,0,74,0,0,0,53,0,0,0,17,1,0,0,47,0,0,0,18,1,0,0,46,0,0,0,47,0,0,0,43,0,0,0,60,1,0,0,49,0,0,0,50,0,0,0,61,1,0,0,52,0,0,0,44,0,0,0,49,0,0,0,43,0,0,0,75,0,0,0,44,0,0,0,45,0,0,0,138,1,0,0,46,0,0,0,76,0,0,0,77,0,0,0,0,0,0,0,112,26,0,0,62,1,0,0,44,0,0,0,45,0,0,0,42,0,0,0,43,0,0,0,19,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,139,1,0,0,48,0,0,0,63,1,0,0,64,1,0,0,51,0,0,0,65,1,0,0,44,0,0,0,49,0,0,0,43,0,0,0,78,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,79,0,0,0,0,0,0,0,160,26,0,0,66,1,0,0,44,0,0,0,45,0,0,0,42,0,0,0,54,0,0,0,20,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,140,1,0,0,48,0,0,0,67,1,0,0,68,1,0,0,51,0,0,0,69,1,0,0,44,0,0,0,49,0,0,0,43,0,0,0,80,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,47,0,0,0,0,0,0,0,224,25,0,0,70,1,0,0,21,1,0,0,22,1,0,0,81,0,0,0,55,0,0,0,23,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,43,0,0,0,48,0,0,0,71,1,0,0,72,1,0,0,51,0,0,0,52,0,0,0,141,1,0,0,49,0,0,0,43,0,0,0,82,0,0,0,44,0,0,0,83,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,47,0,0,0,0,0,0,0,208,26,0,0,73,1,0,0,44,0,0,0,45,0,0,0,84,0,0,0,56,0,0,0,46,0,0,0,47,0,0,0,24,1,0,0,46,0,0,0,47,0,0,0,43,0,0,0,74,1,0,0,49,0,0,0,50,0,0,0,75,1,0,0,52,0,0,0,44,0,0,0,49,0,0,0,43,0,0,0,85,0,0,0,44,0,0,0,86,0,0,0,142,1,0,0,46,0,0,0,87,0,0,0,47,0,0,0,0,0,0,0,32,26,0,0,42,0,0,0,44,0,0,0,45,0,0,0,88,0,0,0,57,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,76,1,0,0,47,0,0,0,43,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,143,1,0,0,25,1,0,0,43,0,0,0,42,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,47,0,0,0,42,0,0,0,0,0,0,0,48,26,0,0,77,1,0,0,26,1,0,0,27,1,0,0,88,0,0,0,57,0,0,0,28,1,0,0,47,0,0,0,29,1,0,0,76,1,0,0,78,1,0,0,144,1,0,0,48,0,0,0,49,0,0,0,79,1,0,0,51,0,0,0,80,1,0,0,143,1,0,0,25,1,0,0,43,0,0,0,89,0,0,0,90,0,0,0,45,0,0,0,145,1,0,0,146,1,0,0,91,0,0,0,92,0,0,0,58,0,0,0,0,0,0,0,16,26,0,0,81,1,0,0,30,1,0,0,31,1,0,0,93,0,0,0,43,0,0,0,32,1,0,0,47,0,0,0,33,1,0,0,46,0,0,0,47,0,0,0,43,0,0,0,82,1,0,0,49,0,0,0,83,1,0,0,84,1,0,0,52,0,0,0,44,0,0,0,49,0,0,0,43,0,0,0,94,0,0,0,95,0,0,0,45,0,0,0,147,1,0,0,46,0,0,0,96,0,0,0,97,0,0,0,0,0,0,0,64,26,0,0,85,1,0,0,34,1,0,0,45,0,0,0,88,0,0,0,57,0,0,0,35,1,0,0,47,0,0,0,36,1,0,0,76,1,0,0,47,0,0,0,148,1,0,0,48,0,0,0,49,0,0,0,86,1,0,0,51,0,0,0,52,0,0,0,143,1,0,0,25,1,0,0,43,0,0,0,98,0,0,0,99,0,0,0,45,0,0,0,149,1,0,0,46,0,0,0,100,0,0,0,101,0,0,0,59,0,0,0,0,0,0,0,80,26,0,0,87,1,0,0,44,0,0,0,37,1,0,0,102,0,0,0,43,0,0,0,38,1,0,0,47,0,0,0,39,1,0,0,46,0,0,0,47,0,0,0,43,0,0,0,88,1,0,0,49,0,0,0,89,1,0,0,90,1,0,0,52,0,0,0,44,0,0,0,49,0,0,0,43,0,0,0,103,0,0,0,104,0,0,0,45,0,0,0,150,1,0,0,46,0,0,0,105,0,0,0,47,0,0,0,0,0,0,0,96,26,0,0,91,1,0,0,40,1,0,0,45,0,0,0,42,0,0,0,60,0,0,0,41,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,151,1,0,0,48,0,0,0,92,1,0,0,93,1,0,0,51,0,0,0,94,1,0,0,152,1,0,0,49,0,0,0,106,0,0,0,107,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,47,0,0,0,0,0,0,0,128,26,0,0,95,1,0,0,44,0,0,0,45,0,0,0,42,0,0,0,43,0,0,0,42,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,43,0,0,0,48,0,0,0,49,0,0,0,96,1,0,0,51,0,0,0,52,0,0,0,44,0,0,0,49,0,0,0,43,0,0,0,108,0,0,0,109,0,0,0,45,0,0,0,153,1,0,0,46,0,0,0,110,0,0,0,47,0,0,0,0,0,0,0,144,26,0,0,97,1,0,0,44,0,0,0,45,0,0,0,42,0,0,0,61,0,0,0,43,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,154,1,0,0,48,0,0,0,98,1,0,0,99,1,0,0,51,0,0,0,100,1,0,0,44,0,0,0,49,0,0,0,43,0,0,0,111,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,112,0,0,0,0,0,0,0,176,26,0,0,101,1,0,0,44,0,0,0,45,0,0,0,42,0,0,0,62,0,0,0,44,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,43,0,0,0,48,0,0,0,102,1,0,0,103,1,0,0,51,0,0,0,104,1,0,0,44,0,0,0,49,0,0,0,43,0,0,0,113,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,114,0,0,0,0,0,0,0,192,26,0,0,105,1,0,0,44,0,0,0,45,0,0,0,42,0,0,0,63,0,0,0,45,1,0,0,47,0,0,0,48,0,0,0,46,0,0,0,47,0,0,0,43,0,0,0,48,0,0,0,106,1,0,0,107,1,0,0,51,0,0,0,108,1,0,0,44,0,0,0,49,0,0,0,43,0,0,0,115,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,46,0,0,0,46,0,0,0,116,0,0,0,1,0,0,0,0,0,0,0,112,27,0,0,145,3,0,0,146,3,0,0,147,3,0,0,64,0,0,0,148,3,0,0,0,0,0,0,64,27,0,0,149,3,0,0,150,3,0,0,151,3,0,0,64,0,0,0,152,3,0,0,0,0,0,0,48,27,0,0,109,1,0,0,46,1,0,0,47,1,0,0,42,0,0,0,43,0,0,0,46,0,0,0,47,0,0,0,48,1,0,0,46,0,0,0,47,0,0,0,43,0,0,0,48,0,0,0,110,1,0,0,111,1,0,0,112,1,0,0,113,1,0,0,44,0,0,0,49,0,0,0,43,0,0,0,117,0,0,0,44,0,0,0,45,0,0,0,45,0,0,0,155,1,0,0,46,0,0,0,47,0,0,0,0,0,0,0,0,27,0,0,153,3,0,0,154,3,0,0,122,0,0,0,248,255,255,255,0,27,0,0,155,3,0,0,156,3,0,0,28,0,0,0,0,0,0,0,224,26,0,0,157,3,0,0,158,3,0,0,122,0,0,0,114,1,0,0,159,3,0,0,248,255,255,255,224,26,0,0,160,3,0,0,161,3,0,0,228,255,255,255,228,255,255,255,228,255,255,255,228,255,255,255,224,26,0,0,115,1,0,0,162,3,0,0,163,3,0,0,164,3,0,0,0,0,0,0,32,27,0,0,165,3,0,0,166,3,0,0,114,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,202,154,59,0,0,0,0,80,27,0,0,167,3,0,0,168,3,0,0,169,3,0,0,64,0,0,0,170,3,0,0,0,0,0,0,96,27,0,0,171,3,0,0,172,3,0,0,173,3,0,0,64,0,0,0,174,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,27,0,0,49,1,0,0,50,1,0,0,51,1,0,0,52,1,0,0,53,1,0,0,54,1,0,0,55,1,0,0,56,1,0,0,57,1,0,0,58,1,0,0,59,1,0,0,60,1,0,0,61,1,0,0,62,1,0,0,63,1,0,0,64,1,0,0,65,1,0,0,66,1,0,0,67,1,0,0,68,1,0,0,69,1,0,0,70,1,0,0,71,1,0,0,72,1,0,0,73,1,0,0,74,1,0,0,75,1,0,0,76,1,0,0,77,1,0,0,78,1,0,0,79,1,0,0,80,1,0,0,81,1,0,0,82,1,0,0,83,1,0,0,84,1,0,0,85,1,0,0,86,1,0,0,87,1,0,0,88,1,0,0,89,1,0,0,90,1,0,0,91,1,0,0,92,1,0,0,156,1,0,0,157,1,0,0,158,1,0,0,159,1,0,0,160,1,0,0,161,1,0,0,162,1,0,0,163,1,0,0,164,1,0,0,165,1,0,0,166,1,0,0,167,1,0,0,168,1,0,0,169,1,0,0,170,1,0,0,171,1,0,0,172,1,0,0,173,1,0,0,174,1,0,0,175,1,0,0,176,1,0,0,177,1,0,0,178,1,0,0,179,1,0,0,180,1,0,0,181,1,0,0,182,1,0,0,183,1,0,0,184,1,0,0,185,1,0,0,186,1,0,0,187,1,0,0,188,1,0,0,189,1,0,0,190,1,0,0,191,1,0,0,192,1,0,0,193,1,0,0,194,1,0,0,195,1,0,0,196,1,0,0,197,1,0,0,198,1,0,0,199,1,0,0,173,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,27,0,0,129,0,0,0,130,0,0,0,131,0,0,0,198,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,199,0,0,0,181,0,0,0,141,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,150,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,154,0,0,0,187,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,188,0,0,0,160,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,165,0,0,0,193,0,0,0,167,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,233,0,0,0,93,1,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,27,0,0,129,0,0,0,94,1,0,0,95,1,0,0,96,1,0,0,97,1,0,0,98,1,0,0,135,0,0,0,99,1,0,0,100,1,0,0,101,1,0,0,102,1,0,0,103,1,0,0,104,1,0,0,105,1,0,0,106,1,0,0,107,1,0,0,108,1,0,0,109,1,0,0,110,1,0,0,111,1,0,0,112,1,0,0,113,1,0,0,114,1,0,0,115,1,0,0,116,1,0,0,117,1,0,0,118,1,0,0,119,1,0,0,120,1,0,0,121,1,0,0,122,1,0,0,123,1,0,0,124,1,0,0,125,1,0,0,126,1,0,0,127,1,0,0,128,1,0,0,129,1,0,0,130,1,0,0,131,1,0,0,132,1,0,0,133,1,0,0,134,1,0,0,135,1,0,0,177,0,0,0,200,1,0,0,201,1,0,0,202,1,0,0,203,1,0,0,227,0,0,0,204,1,0,0,205,1,0,0,206,1,0,0,207,1,0,0,208,1,0,0,209,1,0,0,210,1,0,0,211,1,0,0,212,1,0,0,213,1,0,0,214,1,0,0,215,1,0,0,216,1,0,0,217,1,0,0,218,1,0,0,219,1,0,0,220,1,0,0,221,1,0,0,222,1,0,0,223,1,0,0,224,1,0,0,225,1,0,0,226,1,0,0,227,1,0,0,228,1,0,0,229,1,0,0,230,1,0,0,231,1,0,0,232,1,0,0,233,1,0,0,234,1,0,0,235,1,0,0,236,1,0,0,237,1,0,0,238,1,0,0,239,1,0,0,240,1,0,0,241,1,0,0,173,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,27,0,0,116,1,0,0,118,0,0,0,64,0,0,0,119,0,0,0,0,0,0,0,200,27,0,0,117,1,0,0,120,0,0,0,65,0,0,0,121,0,0,0,0,0,0,0,216,27,0,0,118,1,0,0,122,0,0,0,66,0,0,0,123,0,0,0,0,0,0,0,232,27,0,0,119,1,0,0,124,0,0,0,67,0,0,0,125,0,0,0,0,0,0,0,248,27,0,0,120,1,0,0,126,0,0,0,68,0,0,0,127,0,0,0,0,0,0,0,8,28,0,0,121,1,0,0,128,0,0,0,69,0,0,0,129,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,175,3,0,0,176,3,0,0,53,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,72,0,0,0,177,3,0,0,178,3,0,0,55,0,0,0,236,255,255,255,236,255,255,255,72,0,0,0,177,3,0,0,178,3],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+30720);allocate([16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,28,0,0,120,1,0,0,42,0,0,0,42,0,0,0,42,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,32,28,0,0,179,3,0,0,180,3,0,0,53,0,0,0,122,1,0,0,181,3,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,32,28,0,0,182,3,0,0,183,3,0,0,55,0,0,0,236,255,255,255,236,255,255,255,32,28,0,0,182,3,0,0,183,3,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,32,28,0,0,123,1,0,0,184,3,0,0,185,3,0,0,186,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,28,0,0,129,0,0,0,130,0,0,0,131,0,0,0,198,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,136,1,0,0,137,1,0,0,141,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,138,1,0,0,139,1,0,0,140,1,0,0,141,1,0,0,142,1,0,0,143,1,0,0,144,1,0,0,145,1,0,0,146,1,0,0,147,1,0,0,148,1,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,165,0,0,0,193,0,0,0,167,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,233,0,0,0,173,0,0,0,221,0,0,0,0,0,0,0,88,28,0,0,158,2,0,0,187,3,0,0,124,1,0,0,242,1,0,0,188,3,0,0,189,3,0,0,44,0,0,0,149,1,0,0,125,1,0,0,0,0,0,0,112,28,0,0,255,0,0,0,190,3,0,0,126,1,0,0,243,1,0,0,191,3,0,0,192,3,0,0,193,3,0,0,150,1,0,0,127,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,28,0,0,158,2,0,0,194,3,0,0,128,1,0,0,244,1,0,0,195,3,0,0,196,3,0,0,45,0,0,0,151,1,0,0,129,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,28,0,0,129,0,0,0,130,0,0,0,131,0,0,0,198,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,199,0,0,0,181,0,0,0,141,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,150,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,154,0,0,0,187,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,188,0,0,0,160,0,0,0,152,1,0,0,153,1,0,0,154,1,0,0,155,1,0,0,156,1,0,0,157,1,0,0,158,1,0,0,159,1,0,0,160,1,0,0,196,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,245,1,0,0,232,0,0,0,246,1,0,0,173,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,28,0,0,161,1,0,0,130,0,0,0,131,0,0,0,162,1,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,163,1,0,0,181,0,0,0,141,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,164,1,0,0,150,0,0,0,165,1,0,0,166,1,0,0,186,0,0,0,154,0,0,0,187,0,0,0,156,0,0,0,167,1,0,0,168,1,0,0,169,1,0,0,170,1,0,0,189,0,0,0,171,1,0,0,172,1,0,0,173,1,0,0,174,1,0,0,175,1,0,0,167,0,0,0,176,1,0,0,177,1,0,0,178,1,0,0,171,0,0,0,179,1,0,0,177,0,0,0,178,0,0,0,179,0,0,0,247,1,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,248,1,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,249,1,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,233,0,0,0,180,1,0,0,221,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,216,28,0,0,197,3,0,0,198,3,0,0,53,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,216,28,0,0,199,3,0,0,200,3,0,0,55,0,0,0,236,255,255,255,236,255,255,255,216,28,0,0,199,3,0,0,200,3,0,0,0,0,0,0,240,28,0,0,250,1,0,0,201,3,0,0,202,3,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,60,0,0,0,61,0,0,0,55,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,62,0,0,0,63,0,0,0,53,0,0,0,240,255,255,255,240,255,255,255,16,0,0,0,62,0,0,0,63,0,0,0,40,0,0,0,20,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,8,29,0,0,203,3,0,0,204,3,0,0,53,0,0,0,130,1,0,0,205,3,0,0,16,0,0,0,252,255,255,255,0,0,0,0,252,255,255,255,252,255,255,255,8,29,0,0,206,3,0,0,207,3,0,0,55,0,0,0,236,255,255,255,236,255,255,255,8,29,0,0,206,3,0,0,207,3,0,0,216,255,255,255,216,255,255,255,216,255,255,255,216,255,255,255,8,29,0,0,131,1,0,0,208,3,0,0,209,3,0,0,210,3,0,0,0,0,0,0,40,29,0,0,70,0,0,0,211,3,0,0,212,3,0,0,73,0,0,0,181,1,0,0,132,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,29,0,0,213,3,0,0,214,3,0,0,215,3,0,0,64,0,0,0,216,3,0,0,0,0,0,0,104,29,0,0,217,3,0,0,218,3,0,0,219,3,0,0,64,0,0,0,220,3,0,0,0,0,0,0,72,29,0,0,221,3,0,0,222,3,0,0,133,1,0,0,251,1,0,0,223,3,0,0,224,3,0,0,252,1,0,0,182,1,0,0,134,1,0,0,0,0,0,0,56,29,0,0,225,3,0,0,226,3,0,0,227,3,0,0,64,0,0,0,228,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,30,0,0,229,3,0,0,230,3,0,0,135,1,0,0,253,1,0,0,231,3,0,0,232,3,0,0,183,1,0,0,184,1,0,0,136,1,0,0,0,0,0,0,56,30,0,0,233,3,0,0,234,3,0,0,137,1,0,0,254,1,0,0,235,3,0,0,236,3,0,0,130,0,0,0,185,1,0,0,138,1,0,0,0,0,0,0,40,30,0,0,129,0,0,0,130,0,0,0,131,0,0,0,198,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,199,0,0,0,181,0,0,0,141,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,150,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,154,0,0,0,187,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,188,0,0,0,160,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,165,0,0,0,193,0,0,0,167,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,233,0,0,0,186,1,0,0,255,1,0,0,0,0,0,0,8,30,0,0,237,3,0,0,238,3,0,0,139,1,0,0,0,2,0,0,239,3,0,0,240,3,0,0,1,2,0,0,187,1,0,0,140,1,0,0,0,0,0,0,248,29,0,0,129,0,0,0,130,0,0,0,131,0,0,0,198,0,0,0,133,0,0,0,179,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,199,0,0,0,181,0,0,0,141,0,0,0,142,0,0,0,200,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,150,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,154,0,0,0,187,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,188,0,0,0,160,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,165,0,0,0,193,0,0,0,167,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,171,0,0,0,172,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,226,0,0,0,227,0,0,0,183,0,0,0,184,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,228,0,0,0,206,0,0,0,207,0,0,0,229,0,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,230,0,0,0,214,0,0,0,231,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,232,0,0,0,233,0,0,0,188,1,0,0,2,2,0,0,0,0,0,0,224,29,0,0,229,3,0,0,241,3,0,0,141,1,0,0,3,2,0,0,242,3,0,0,243,3,0,0,189,1,0,0,190,1,0,0,142,1,0,0,0,0,0,0,200,29,0,0,233,3,0,0,244,3,0,0,143,1,0,0,4,2,0,0,245,3,0,0,246,3,0,0,131,0,0,0,191,1,0,0,144,1,0,0,0,0,0,0,168,29,0,0,229,3,0,0,247,3,0,0,145,1,0,0,5,2,0,0,248,3,0,0,249,3,0,0,192,1,0,0,193,1,0,0,146,1,0,0,0,0,0,0,136,29,0,0,233,3,0,0,250,3,0,0,147,1,0,0,6,2,0,0,251,3,0,0,252,3,0,0,132,0,0,0,194,1,0,0,148,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,92,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,30,0,0,253,3,0,0,254,3,0,0,255,3,0,0,64,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,33,0,0,1,4,0,0,2,4,0,0,3,4,0,0,64,0,0,0,4,4,0,0,0,0,0,0,16,33,0,0,5,4,0,0,6,4,0,0,7,4,0,0,64,0,0,0,8,4,0,0,0,0,0,0,0,33,0,0,9,4,0,0,10,4,0,0,11,4,0,0,64,0,0,0,12,4,0,0,0,0,0,0,208,32,0,0,13,4,0,0,14,4,0,0,15,4,0,0,64,0,0,0,16,4,0,0,0,0,0,0,152,32,0,0,255,0,0,0,17,4,0,0,149,1,0,0,7,2,0,0,18,4,0,0,19,4,0,0,20,4,0,0,195,1,0,0,150,1,0,0,0,0,0,0,136,32,0,0,21,4,0,0,22,4,0,0,23,4,0,0,64,0,0,0,24,4,0,0,0,0,0,0,8,32,0,0,25,4,0,0,26,4,0,0,27,4,0,0,64,0,0,0,28,4,0,0,0,0,0,0,248,31,0,0,29,4,0,0,30,4,0,0,31,4,0,0,64,0,0,0,32,4,0,0,0,0,0,0,120,31,0,0,33,4,0,0,34,4,0,0,35,4,0,0,64,0,0,0,36,4,0,0,0,0,0,0,88,31,0,0,37,4,0,0,38,4,0,0,39,4,0,0,64,0,0,0,40,4,0,0,0,0,0,0,56,31,0,0,41,4,0,0,42,4,0,0,43,4,0,0,64,0,0,0,44,4,0,0,0,0,0,0,8,31,0,0,45,4,0,0,46,4,0,0,47,4,0,0,64,0,0,0,48,4,0,0,0,0,0,0,216,30,0,0,49,4,0,0,50,4,0,0,51,4,0,0,64,0,0,0,52,4,0,0,0,0,0,0,200,30,0,0,53,4,0,0,54,4,0,0,55,4,0,0,64,0,0,0,56,4,0,0,0,0,0,0,152,30,0,0,57,4,0,0,58,4,0,0,59,4,0,0,64,0,0,0,60,4,0,0,0,0,0,0,120,30,0,0,61,4,0,0,62,4,0,0,63,4,0,0,64,0,0,0,64,4,0,0,0,0,0,0,136,30,0,0,65,4,0,0,66,4,0,0,67,4,0,0,64,0,0,0,68,4,0,0,0,0,0,0,168,30,0,0,69,4,0,0,70,4,0,0,71,4,0,0,64,0,0,0,72,4,0,0,0,0,0,0,184,30,0,0,73,4,0,0,74,4,0,0,75,4,0,0,64,0,0,0,76,4,0,0,0,0,0,0,232,30,0,0,77,4,0,0,78,4,0,0,79,4,0,0,64,0,0,0,80,4,0,0,0,0,0,0,248,30,0,0,81,4,0,0,82,4,0,0,83,4,0,0,64,0,0,0,84,4,0,0,0,0,0,0,24,31,0,0,85,4,0,0,86,4,0,0,87,4,0,0,64,0,0,0,88,4,0,0,0,0,0,0,40,31,0,0,89,4,0,0,90,4,0,0,91,4,0,0,64,0,0,0,92,4,0,0,0,0,0,0,72,31,0,0,93,4,0,0,94,4,0,0,95,4,0,0,64,0,0,0,96,4,0,0,0,0,0,0,104,31,0,0,97,4,0,0,98,4,0,0,99,4,0,0,64,0,0,0,100,4,0,0,0,0,0,0,136,31,0,0,101,4,0,0,102,4,0,0,103,4,0,0,64,0,0,0,104,4,0,0,0,0,0,0,152,31,0,0,105,4,0,0,106,4,0,0,107,4,0,0,64,0,0,0,108,4,0,0,0,0,0,0,168,31,0,0,109,4,0,0,110,4,0,0,111,4,0,0,64,0,0,0,112,4,0,0,0,0,0,0,184,31,0,0,113,4,0,0,114,4,0,0,115,4,0,0,64,0,0,0,116,4,0,0,0,0,0,0,200,31,0,0,117,4,0,0,118,4,0,0,119,4,0,0,64,0,0,0,120,4,0,0,0,0,0,0,216,31,0,0,121,4,0,0,122,4,0,0,123,4,0,0,64,0,0,0,124,4,0,0,0,0,0,0,232,31,0,0,125,4,0,0,126,4,0,0,127,4,0,0,64,0,0,0,128,4,0,0,0,0,0,0,24,32,0,0,129,4,0,0,130,4,0,0,131,4,0,0,64,0,0,0,132,4,0,0,0,0,0,0,40,32,0,0,133,4,0,0,134,4,0,0,135,4,0,0,64,0,0,0,136,4,0,0,0,0,0,0,56,32,0,0,137,4,0,0,138,4,0,0,139,4,0,0,64,0,0,0,140,4,0,0,0,0,0,0,72,32,0,0,141,4,0,0,142,4,0,0,143,4,0,0,64,0,0,0,144,4,0,0,0,0,0,0,88,32,0,0,145,4,0,0,146,4,0,0,147,4,0,0,64,0,0,0,148,4,0,0,0,0,0,0,104,32,0,0,149,4,0,0,150,4,0,0,151,4,0,0,64,0,0,0,152,4,0,0,0,0,0,0,120,32,0,0,153,4,0,0,154,4,0,0,155,4,0,0,64,0,0,0,156,4,0,0,0,0,0,0,176,32,0,0,157,4,0,0,158,4,0,0,159,4,0,0,64,0,0,0,160,4,0,0,0,0,0,0,192,32,0,0,161,4,0,0,162,4,0,0,163,4,0,0,64,0,0,0,164,4,0,0,0,0,0,0,224,32,0,0,165,4,0,0,166,4,0,0,167,4,0,0,64,0,0,0,168,4,0,0,0,0,0,0,240,32,0,0,169,4,0,0,170,4,0,0,171,4,0,0,64,0,0,0,172,4,0,0,0,0,0,0,48,33,0,0,173,4,0,0,174,4,0,0,175,4,0,0,64,0,0,0,176,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,123,4,0,251,123,4,0,2,124,4,0,9,124,4,0,16,124,4,0,23,124,4,0,30,124,4,0,37,124,4,0,43,124,4,0,53,124,4,0,60,124,4,0,72,124,4,0,78,124,4,0,85,124,4,0,97,124,4,0,110,124,4,0,123,124,4,0,133,124,4,0,143,124,4,0,153,124,4,0,163,124,4,0,173,124,4,0,183,124,4,0,193,124,4,0,203,124,4,0,209,124,4,0,212,124,4,0,216,124,4,0,222,124,4,0,229,124,4,0,236,124,4,0,240,124,4,0,244,124,4,0,248,124,4,0,252,124,4,0,0,125,4,0,4,125,4,0,8,125,4,0,12,125,4,0,16,125,4,0,22,125,4,0,31,125,4,0,40,125,4,0,52,125,4,0,68,125,4,0,87,125,4,0,91,125,4,0,98,125,4,0,52,11,5,0,102,125,4,0,109,125,4,0,119,125,4,0,122,125,4,0,131,125,4,0,137,125,4,0,143,125,4,0,152,125,4,0,161,125,4,0,169,125,4,0,172,125,4,0,177,125,4,0,182,125,4,0,188,125,4,0,197,125,4,0,201,125,4,0,210,125,4,0,214,125,4,0,217,125,4,0,225,125,4,0,234,125,4,0,241,125,4,0,244,125,4,0,252,125,4,0,4,126,4,0,11,126,4,0,20,126,4,0,24,126,4,0,32,126,4,0,39,126,4,0,46,126,4,0,54,126,4,0,61,126,4,0,69,126,4,0,77,126,4,0,84,126,4,0,90,126,4,0,96,126,4,0,100,126,4,0,106,126,4,0,113,126,4,0,122,126,4,0,132,126,4,0,141,126,4,0,151,126,4,0,161,126,4,0,169,126,4,0,176,126,4,0,184,126,4,0,192,126,4,0,196,126,4,0,201,126,4,0,207,126,4,0,212,126,4,0,219,126,4,0,227,126,4,0,232,126,4,0,238,126,4,0,245,126,4,0,250,126,4,0,0,127,4,0,7,127,4,0,16,127,4,0,26,127,4,0,35,127,4,0,47,127,4,0,59,127,4,0,72,127,4,0,79,127,4,0,93,127,4,0,108,127,4,0,119,127,4,0,128,127,4,0,134,127,4,0,139,127,4,0,145,127,4,0,151,127,4,0,154,127,4,0,161,127,4,0,171,127,4,0,175,127,4,0,181,127,4,0,184,127,4,0,189,127,4,0,201,127,4,0,208,127,4,0,215,127,4,0,219,127,4,0,224,127,4,0,231,127,4,0,236,127,4,0,244,127,4,0,247,123,4,0,76,148,4,0,239,147,4,0,150,213,4,0,152,213,4,0,255,127,4,0,1,128,4,0,3,128,4,0,5,128,4,0,243,242,4,0,7,128,4,0,9,128,4,0,204,152,4,0,83,153,4,0,20,153,4,0,201,152,4,0,38,153,4,0,141,153,4,0,12,128,4,0,90,153,4,0,42,153,4,0,45,153,4,0,15,153,4,0,135,153,4,0,231,152,4,0,78,153,4,0,103,148,4,0,81,153,4,0,18,153,4,0,122,148,4,0,35,153,4,0,138,153,4,0,17,128,4,0,96,242,4,0,98,242,4,0,244,8,5,0,193,216,4,0,133,153,4,0,21,128,4,0,23,153,4,0,62,153,4,0,134,148,4,0,136,148,4,0,32,153,4,0,26,153,4,0,65,153,4,0,30,149,4,0,93,153,4,0,48,153,4,0,30,122,4,0,37,122,4,0,47,122,4,0,50,122,4,0,59,122,4,0,65,122,4,0,74,122,4,0,83,122,4,0,92,122,4,0,100,122,4,0,103,122,4,0,108,122,4,0,113,122,4,0,119,122,4,0,128,122,4,0,132,122,4,0,141,122,4,0,145,122,4,0,148,122,4,0,156,122,4,0,165,122,4,0,172,122,4,0,175,122,4,0,183,122,4,0,191,122,4,0,198,122,4,0,207,122,4,0,211,122,4,0,219,122,4,0,226,122,4,0,233,122,4,0,6,136,4,0,241,122,4,0,249,122,4,0,1,123,4,0,186,153,4,0,8,123,4,0,14,123,4,0,18,123,4,0,24,123,4,0,28,123,4,0,34,123,4,0,41,123,4,0,47,123,4,0,55,123,4,0,63,123,4,0,69,123,4,0,74,123,4,0,80,123,4,0,6,154,4,0,86,123,4,0,91,123,4,0,13,136,4,0,97,123,4,0,104,123,4,0,1,154,4,0,112,123,4,0,118,123,4,0,24,128,4,0,29,128,4,0,35,128,4,0,42,128,4,0,51,128,4,0,0,0,0,0,125,123,4,0,22,10,5,0,27,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,123,4,0,139,123,4,0,145,123,4,0,150,123,4,0,156,123,4,0,162,123,4,0,165,123,4,0,172,123,4,0,182,123,4,0,186,123,4,0,192,123,4,0,195,123,4,0,200,123,4,0,212,123,4,0,219,123,4,0,226,123,4,0,230,123,4,0,235,123,4,0,242,123,4,0,61,128,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,33,0,0,177,4,0,0,178,4,0,0,151,1,0,0,0,0,0,0,136,33,0,0,179,4,0,0,180,4,0,0,151,1,0,0,244,255,255,255,136,33,0,0,181,4,0,0,182,4,0,0,32,0,0,0,0,0,0,0,104,33,0,0,183,4,0,0,184,4,0,0,151,1,0,0,152,1,0,0,185,4,0,0,244,255,255,255,104,33,0,0,186,4,0,0,187,4,0,0,224,255,255,255,224,255,255,255,224,255,255,255,224,255,255,255,104,33,0,0,153,1,0,0,188,4,0,0,189,4,0,0,190,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,33,0,0,191,4,0,0,192,4,0,0,193,4,0,0,64,0,0,0,194,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,33,0,0,158,2,0,0,195,4,0,0,154,1,0,0,8,2,0,0,196,4,0,0,197,4,0,0,46,0,0,0,196,1,0,0,155,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,34,0,0,64,1,0,0,198,4,0,0,156,1,0,0,0,0,0,0,16,34,0,0,88,1,0,0,199,4,0,0,200,4,0,0,197,1,0,0,201,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,34,0,0,202,4,0,0,203,4,0,0,156,1,0,0,252,255,255,255,64,34,0,0,204,4,0,0,205,4,0,0,24,0,0,0,0,0,0,0,32,34,0,0,206,4,0,0,207,4,0,0,156,1,0,0,157,1,0,0,208,4,0,0,252,255,255,255,32,34,0,0,209,4,0,0,210,4,0,0,232,255,255,255,232,255,255,255,232,255,255,255,232,255,255,255,32,34,0,0,158,1,0,0,211,4,0,0,212,4,0,0,213,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,44,0,0,0,0,0,0,0,184,34,0,0,214,4,0,0,215,4,0,0,76,0,0,0,0,0,0,0,200,34,0,0,214,4,0,0,216,4,0,0,159,1,0,0,0,0,0,0,216,34,0,0,214,4,0,0,217,4,0,0,160,1,0,0,0,0,0,0,0,0,0,0,232,34,0,0,64,1,0,0,218,4,0,0,121,0,0,0,0,0,0,0,240,34,0,0,64,1,0,0,219,4,0,0,72,0,0,0,0,0,0,0,0,35,0,0,165,3,0,0,220,4,0,0,114,0,0,0,0,0,0,0,80,35,0,0,221,4,0,0,222,4,0,0,122,0,0,0,0,0,0,0,16,35,0,0,165,3,0,0,223,4,0,0,114,0,0,0,0,0,0,0,32,35,0,0,165,3,0,0,224,4,0,0,114,0,0,0,0,0,0,0,48,35,0,0,165,3,0,0,225,4,0,0,114,0,0,0,0,0,0,0,64,35,0,0,165,3,0,0,226,4,0,0,114,0,0,0,0,0,0,0,96,35,0,0,221,4,0,0,227,4,0,0,122,0,0,0,0,0,0,0,112,35,0,0,221,4,0,0,228,4,0,0,122,0,0,0,0,0,0,0,128,35,0,0,221,4,0,0,229,4,0,0,122,0,0,0,0,0,0,0,152,35,0,0,177,4,0,0,230,4,0,0,161,1,0,0,0,0,0,0,168,35,0,0,231,4,0,0,232,4,0,0,162,1,0,0,0,0,0,0,144,35,0,0,233,4,0,0,234,4,0,0,0,0,0,0,184,35,0,0,235,4,0,0,236,4,0,0,237,4,0,0,238,4,0,0,42,0,0,0,0,0,0,0,248,35,0,0,235,4,0,0,239,4,0,0,237,4,0,0,238,4,0,0,50,0,0,0,0,0,0,0,80,39,0,0,235,4,0,0,240,4,0,0,237,4,0,0,238,4,0,0,51,0,0,0,0,0,0,0,96,39,0,0,235,4,0,0,241,4,0,0,237,4,0,0,238,4,0,0,52,0,0,0,0,0,0,0,112,39,0,0,235,4,0,0,242,4,0,0,237,4,0,0,238,4,0,0,53,0,0,0,0,0,0,0,200,35,0,0,235,4,0,0,243,4,0,0,237,4,0,0,238,4,0,0,54,0,0,0,44,0,0,0,42,0,0,0,70,0,0,0,0,0,0,0,128,39,0,0,235,4,0,0,244,4,0,0,237,4,0,0,238,4,0,0,54,0,0,0,45,0,0,0,43,0,0,0,71,0,0,0,0,0,0,0,144,39,0,0,235,4,0,0,245,4,0,0,237,4,0,0,238,4,0,0,54,0,0,0,46,0,0,0,44,0,0,0,72,0,0,0,0,0,0,0,216,35,0,0,235,4,0,0,246,4,0,0,237,4,0,0,238,4,0,0,55,0,0,0,0,0,0,0,232,35,0,0,235,4,0,0,247,4,0,0,237,4,0,0,238,4,0,0,56,0,0,0,0,0,0,0,160,39,0,0,235,4,0,0,248,4,0,0,237,4,0,0,238,4,0,0,55,0,0,0,0,0,0,0,0,0,0,0,10,156,4,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,221,0,0,52,221,0,0,164,221,0,0,164,221,0,0,20,222,0,0,20,222,0,0,2,0,0,192,3,0,0,192,4,0,0,192,5,0,0,192,6,0,0,192,7,0,0,192,8,0,0,192,9,0,0,192,10,0,0,192,11,0,0,192,12,0,0,192,13,0,0,192,14,0,0,192,15,0,0,192,16,0,0,192,17,0,0,192,18,0,0,192,19,0,0,192,20,0,0,192,21,0,0,192,22,0,0,192,23,0,0,192,24,0,0,192,25,0,0,192,26,0,0,192,27,0,0,192,28,0,0,192,29,0,0,192,30,0,0,192,31,0,0,192,0,0,0,179,1,0,0,195,2,0,0,195,3,0,0,195,4,0,0,195,5,0,0,195,6,0,0,195,7,0,0,195,8,0,0,195,9,0,0,195,10,0,0,195,11,0,0,195,12,0,0,195,13,0,0,211,14,0,0,195,15,0,0,195,0,0,12,187,1,0,12,195,2,0,12,195,3,0,12,195,4,0,12,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,6,0,0,0,131,249,162,0,68,78,110,0,252,41,21,0,209,87,39,0,221,52,245,0,98,219,192,0,60,153,149,0,65,144,67,0,99,81,254,0,187,222,171,0,183,97,197,0,58,110,36,0,210,77,66,0,73,6,224,0,9,234,46,0,28,146,209,0,235,29,254,0,41,177,28,0,232,62,167,0,245,53,130,0,68,187,46,0,156,233,132,0,180,38,112,0,65,126,95,0,214,145,57,0,83,131,57,0,156,244,57,0,139,95,132,0,40,249,189,0,248,31,59,0,222,255,151,0,15,152,5,0,17,47,239,0,10,90,139,0,109,31,109,0,207,126,54,0,9,203,39,0,70,79,183,0,158,102,63,0,45,234,95,0,186,39,117,0,229,235,199,0,61,123,241,0,247,57,7,0,146,82,138,0,251,107,234,0,31,177,95,0,8,93,141,0,48,3,86,0,123,252,70,0,240,171,107,0,32,188,207,0,54,244,154,0,227,169,29,0,94,97,145,0,8,27,230,0,133,153,101,0,160,20,95,0,141,64,104,0,128,216,255,0,39,115,77,0,6,6,49,0,202,86,21,0,201,168,115,0,123,226,96,0,107,140,192,0,149,191,214,51,189,55,134,53,172,197,39,55,23,183,209,56,111,18,131,58,10,215,35,60,205,204,204,61,0,0,128,63,0,0,32,65,0,0,200,66,0,0,122,68,0,64,28,70,0,80,195,71,0,36,116,73,128,150,24,75,220,249,0,0,212,17,3,0,220,243,0,0,32,0,0,0,9,0,0,0,10,0,0,0,13,0,0,0,11,0,0,0,12,0,0,0,133,0,0,0,0,32,0,0,1,32,0,0,2,32,0,0,3,32,0,0,4,32,0,0,5,32,0,0,6,32,0,0,8,32,0,0,9,32,0,0,10,32,0,0,40,32,0,0,41,32,0,0,95,32,0,0,0,48,0,0,0,0,0,0,243,242,4,0,200,7,5,0,200,7,5,0,200,7,5,0,200,7,5,0,200,7,5,0,200,7,5,0,200,7,5,0,200,7,5,0,200,7,5,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,16,0,0,0,16,0,0,16,16,0,0,16,16,0,0,0,0,16,0,0,0,16,0,16,0,16,0,16,0,16,0,0,16,16,0,0,16,16,0,16,16,16,0,16,16,16,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,0,32,0,0,0,32,0,0,32,32,0,0,32,32,0,0,0,0,32,0,0,0,32,0,32,0,32,0,32,0,32,0,0,32,32,0,0,32,32,0,32,32,32,0,32,32,32,0,0,0,0,0,0,0,0,0,64,0,0,0,64,0,0,0,0,64,0,0,0,64,0,0,64,64,0,0,64,64,0,0,0,0,64,0,0,0,64,0,64,0,64,0,64,0,64,0,0,64,64,0,0,64,64,0,64,64,64,0,64,64,64,0,0,0,0,0,0,0,0,0,128,0,0,0,128,0,0,0,0,128,0,0,0,128,0,0,128,128,0,0,128,128,0,0,0,0,128,0,0,0,128,0,128,0,128,0,128,0,128,0,0,128,128,0,0,128,128,0,128,128,128,0,128,128,128,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,2,0,0,0,0,2,0,0,2,2,0,0,0,0,2,0,2,0,2,0,0,2,2,0,2,2,2,0,0,0,0,2,2,0,0,2,0,2,0,2,2,2,0,2,0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,0,0,0,0,4,0,0,0,0,4,0,0,4,4,0,0,0,0,4,0,4,0,4,0,0,4,4,0,4,4,4,0,0,0,0,4,4,0,0,4,0,4,0,4,4,4,0,4,0,0,4,4,4,0,4,4,0,4,4,4,4,4,4,4,0,0,0,0,8,0,0,0,0,8,0,0,8,8,0,0,0,0,8,0,8,0,8,0,0,8,8,0,8,8,8,0,0,0,0,8,8,0,0,8,0,8,0,8,8,8,0,8,0,0,8,8,8,0,8,8,0,8,8,8,8,8,8,8,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,16,0,0,0,16,0,0,0,16,16,0,0,16,16,0,16,0,0,0,16,0,0,0,16,0,16,0,16,0,16,0,16,16,0,0,16,16,0,0,16,16,16,0,16,16,16,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,32,0,0,0,32,0,0,0,32,32,0,0,32,32,0,32,0,0,0,32,0,0,0,32,0,32,0,32,0,32,0,32,32,0,0,32,32,0,0,32,32,32,0,32,32,32,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,64,0,0,64,0,0,0,64,0,0,0,64,64,0,0,64,64,0,64,0,0,0,64,0,0,0,64,0,64,0,64,0,64,0,64,64,0,0,64,64,0,0,64,64,64,0,64,64,64,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,128,0,0,128,0,0,0,128,0,0,0,128,128,0,0,128,128,0,128,0,0,0,128,0,0,0,128,0,128,0,128,0,128,0,128,128,0,0,128,128,0,0,128,128,128,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,2,0,0,0,2,0,0,0,2,2,0,0,2,2,0,2,0,0,0,2,0,0,0,2,0,2,0,2,0,2,0,2,2,0,0,2,2,0,0,2,2,2,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,4,0,0,0,4,0,0,0,4,4,0,0,4,4,0,4,0,0,0,4,0,0,0,4,0,4,0,4,0,4,0,4,4,0,0,4,4,0,0,4,4,4,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,8,0,0,0,8,0,0,0,8,8,0,0,8,8,0,8,0,0,0,8,0,0,0,8,0,8,0,8,0,8,0,8,8,0,0,8,8,0,0,8,8,8,0,8,8,8,0,0,0,0,0,0,2,0,1,0,0,0,1,0,2,0,0,0,8,0,0,0,10,0,1,0,8,0,1,0,10,0,0,0,0,0,0,16,0,0,0,0,0,0,0,16,0,0,64,0,0,0,64,16,0,0,64,0,0,0,64,16,0,0,0,0,0,0,0,0,64,0,32,0,0,0,32,0,64,0,0,128,0,0,0,128,64,0,32,128,0,0,32,128,64,0,0,0,0,0,0,0,16,0,0,8,0,0,0,8,16,0,0,0,0,0,0,0,16,0,0,8,0,0,0,8,16,0,0,0,0,0,0,0,32,0,0,0,2,0,0,0,34,0,2,0,0,0,2,0,32,0,2,0,2,0,2,0,34,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,4,0,0,0,4,0,0,0,4,0,16,0,4,0,16,0,0,0,0,0,0,64,0,0,0,8],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+40960);allocate([72,0,0,0,0,0,0,0,64,0,0,0,8,0,0,0,72,0,0,0,0,0,0,0,0,64,0,0,128,0,0,0,128,64,0,8,0,0,0,8,0,64,0,8,128,0,0,8,128,64,0,0,0,0,0,16,0,0,0,0,64,0,0,16,64,0,0,0,0,4,0,16,0,4,0,0,64,4,0,16,64,4,0,0,1,0,0,16,1,0,0,0,65,0,0,16,65,0,0,0,1,4,0,16,1,4,0,0,65,4,0,16,65,4,0,0,0,0,0,0,0,128,0,2,0,0,0,2,0,128,0,0,2,0,0,0,2,128,0,2,2,0,0,2,2,128,0,0,0,32,0,0,0,160,0,2,0,32,0,2,0,160,0,0,2,32,0,0,2,160,0,2,2,32,0,2,2,160,0,0,0,0,0,0,32,0,0,4,0,0,0,4,32,0,0,0,4,0,0,0,36,0,0,4,4,0,0,4,36,0,0,0,0,0,0,0,32,0,0,4,0,0,0,4,32,0,0,0,4,0,0,0,36,0,0,4,4,0,0,4,36,0,0,0,0,0,0,0,0,1,0,8,0,0,0,8,0,1,0,128,0,0,0,128,0,1,0,136,0,0,0,136,0,1,0,0,0,0,0,0,0,1,0,8,0,0,0,8,0,1,0,128,0,0,0,128,0,1,0,136,0,0,0,136,0,1,0,0,0,0,0,0,0,0,0,128,0,0,0,128,0,0,0,0,32,0,0,0,32,0,0,128,32,0,0,128,32,0,0,1,0,0,0,1,0,0,0,129,0,0,0,129,0,0,0,1,32,0,0,1,32,0,0,129,32,0,0,129,32,0,0,0,0,0,0,16,0,0,0,0,0,128,0,16,0,128,0,0,0,1,0,16,0,1,0,0,0,129,0,16,0,129,0,0,2,0,0,16,2,0,0,0,2,128,0,16,2,128,0,0,2,1,0,16,2,1,0,0,2,129,0,16,2,129,0,0,0,0,0,0,4,0,0,0,16,0,0,0,20,0,0,0,0,8,0,0,4,8,0,0,16,8,0,0,20,8,0,32,0,0,0,32,4,0,0,32,16,0,0,32,20,0,0,32,0,8,0,32,4,8,0,32,16,8,0,32,20,8,0,0,0,0,0,0,1,0,0,0,0,4,0,0,1,4,0,0,0,0,0,0,1,0,0,0,0,4,0,0,1,4,0,64,0,0,0,64,1,0,0,64,0,4,0,64,1,4,0,64,0,0,0,64,1,0,0,64,0,4,0,64,1,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2,0,0,2,2,0,0,0,2,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2,0,0,2,2,0,0,0,2,0,0,2,2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2,0,0,2,2,0,0,0,2,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2,0,0,2,2,0,0,0,2,0,0,2,2,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,4,0,0,4,4,0,0,0,4,0,0,4,4,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,4,0,0,4,4,0,0,0,4,0,0,4,4,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,4,0,0,4,4,0,0,0,4,0,0,4,4,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,4,0,0,4,4,0,0,0,4,0,0,4,4,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,8,0,0,8,8,0,0,0,8,0,0,8,8,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,8,0,0,8,8,0,0,0,8,0,0,8,8,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,8,0,0,8,8,0,0,0,8,0,0,8,8,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,8,0,0,8,8,0,0,0,8,0,0,8,8,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,16,0,0,0,0,16,0,0,16,16,0,0,0,16,0,0,16,16,0,0,0,0,0,0,16,0,0,0,0,0,0,0,16,0,0,0,0,16,0,0,16,16,0,0,0,16,0,0,16,16,0,0,0,0,16,0,0,0,0,0,0,0,16,0,0,0,0,16,0,0,16,16,0,0,0,16,0,0,16,16,0,0,0,0,0,0,16,0,0,0,0,0,0,0,16,0,0,0,0,16,0,0,16,16,0,0,0,16,0,0,16,16,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,32,0,0,0,0,32,0,0,32,32,0,0,0,32,0,0,32,32,0,0,0,0,0,0,32,0,0,0,0,0,0,0,32,0,0,0,0,32,0,0,32,32,0,0,0,32,0,0,32,32,0,0,0,0,32,0,0,0,0,0,0,0,32,0,0,0,0,32,0,0,32,32,0,0,0,32,0,0,32,32,0,0,0,0,0,0,32,0,0,0,0,0,0,0,32,0,0,0,0,32,0,0,32,32,0,0,0,32,0,0,32,32,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,64,0,0,0,0,64,0,0,64,64,0,0,0,64,0,0,64,64,0,0,0,0,0,0,64,0,0,0,0,0,0,0,64,0,0,0,0,64,0,0,64,64,0,0,0,64,0,0,64,64,0,0,0,0,64,0,0,0,0,0,0,0,64,0,0,0,0,64,0,0,64,64,0,0,0,64,0,0,64,64,0,0,0,0,0,0,64,0,0,0,0,0,0,0,64,0,0,0,0,64,0,0,64,64,0,0,0,64,0,0,64,64,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128,0,0,0,0,128,0,0,128,128,0,0,0,128,0,0,128,128,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128,0,0,0,0,128,0,0,128,128,0,0,0,128,0,0,128,128,0,0,0,0,128,0,0,0,0,0,0,0,128,0,0,0,0,128,0,0,128,128,0,0,0,128,0,0,128,128,0,0,0,0,0,0,128,0,0,0,0,0,0,0,128,0,0,0,0,128,0,0,128,128,0,0,0,128,0,0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,2,0,0,0,2,0,0,2,2,0,0,2,2,0,0,0,2,0,0,0,2,0,0,2,2,0,0,2,2,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,2,0,0,0,2,0,0,2,2,0,0,2,2,0,0,0,2,0,0,0,2,0,0,2,2,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,4,0,0,0,4,0,0,4,4,0,0,4,4,0,0,0,4,0,0,0,4,0,0,4,4,0,0,4,4,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,4,0,0,0,4,0,0,4,4,0,0,4,4,0,0,0,4,0,0,0,4,0,0,4,4,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,0,8,0,0,0,8,0,0,8,8,0,0,8,8,0,0,0,8,0,0,0,8,0,0,8,8,0,0,8,8,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,0,8,0,0,0,8,0,0,8,8,0,0,8,8,0,0,0,8,0,0,0,8,0,0,8,8,0,0,8,8,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,16,0,0,0,16,0,0,16,16,0,0,16,16,0,0,0,16,0,0,0,16,0,0,16,16,0,0,16,16,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,16,0,0,0,16,0,0,16,16,0,0,16,16,0,0,0,16,0,0,0,16,0,0,16,16,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,0,32,0,0,0,32,0,0,32,32,0,0,32,32,0,0,0,32,0,0,0,32,0,0,32,32,0,0,32,32,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,0,32,0,0,0,32,0,0,32,32,0,0,32,32,0,0,0,32,0,0,0,32,0,0,32,32,0,0,32,32,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,64,0,0,0,0,64,0,0,0,64,0,0,64,64,0,0,64,64,0,0,0,64,0,0,0,64,0,0,64,64,0,0,64,64,0,0,0,0,0,0,0,0,64,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,64,0,0,0,0,64,0,0,0,64,0,0,64,64,0,0,64,64,0,0,0,64,0,0,0,64,0,0,64,64,0,0,64,64,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,128,0,0,0,0,128,0,0,0,128,0,0,128,128,0,0,128,128,0,0,0,128,0,0,0,128,0,0,128,128,0,0,128,128,0,0,0,0,0,0,0,0,128,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,128,0,0,0,0,128,0,0,0,128,0,0,128,128,0,0,128,128,0,0,0,128,0,0,0,128,0,0,128,128,0,0,128,128,0,0,0,130,128,0,0,0,0,0,0,128,0,0,2,130,128,0,2,128,128,0,2,130,0,0,2,0,0,0,0,128,0,0,0,2,0,0,0,130,128,0,2,130,128,0,0,2,0,0,2,2,128,0,2,128,128,0,0,0,128,0,2,0,0,0,2,2,0,0,0,2,128,0,0,2,128,0,0,130,0,0,0,130,0,0,0,128,128,0,0,128,128,0,2,2,128,0,2,128,0,0,2,0,128,0,2,0,128,0,2,128,0,0,0,0,0,0,2,2,0,0,2,130,0,0,0,0,128,0,0,128,0,0,2,130,128,0,2,0,0,0,0,128,128,0,0,130,128,0,0,0,128,0,0,0,128,0,0,2,0,0,2,128,128,0,0,128,0,0,0,130,0,0,2,0,128,0,0,2,0,0,2,0,0,0,2,2,128,0,2,130,0,0,2,130,128,0,2,128,0,0,0,128,128,0,2,2,128,0,2,0,128,0,2,2,0,0,2,130,0,0,0,130,128,0,2,2,0,0,0,2,128,0,0,2,128,0,0,0,0,0,2,128,0,0,0,130,0,0,0,0,0,0,2,128,128,0,16,64,8,64,0,64,0,64,0,64,0,0,16,64,8,0,0,0,8,0,16,0,0,0,16,0,8,64,16,64,0,64,16,0,0,64,16,64,8,64,0,64,8,64,0,0,0,64,0,64,0,64,0,0,8,0,16,0,0,0,16,0,8,64,0,64,8,0,16,0,8,0,16,64,0,64,0,0,0,0,0,0,0,64,0,64,0,0,16,64,8,0,0,0,8,64,16,0,8,0,16,0,0,64,0,0,0,0,0,64,8,0,16,64,0,0,0,64,8,64,0,0,8,64,16,64,0,0,0,0,0,0,16,64,8,0,16,0,8,64,0,0,8,0,16,64,0,64,0,0,8,64,0,64,8,64,0,64,0,0,0,0,8,64,0,64,0,64,16,0,0,0,16,64,8,64,16,64,8,0,16,0,0,0,0,64,0,0,0,0,0,64,16,64,0,0,0,64,8,64,0,0,8,0,16,0,0,64,16,0,8,0,16,64,0,64,16,0,0,64,16,0,8,0,0,64,8,0,0,0,0,0,0,64,0,64,16,64,0,0,0,0,0,64,16,0,8,64,16,64,8,64,0,64,8,0,4,1,0,0,0,1,1,4,0,0,0,0,4,0,1,4,0,1,0,4,0,0,0,0,4,1,1,0,0,1,0,4,4,0,1,0,4,0,0,4,4,0,0,4,0,0,1,0,4,1,1,4,4,0,1,0,0,0,1,4,4,1,0,0,0,0,0,4,4,0,0,0,0,1,1,4,0,1,0,0,0,1,1,0,0,0,1,4,4,0,1,4,4,1,1,0,4,1,0,4,0,1,1,0,0,0,1,0,4,1,0,4,4,0,0,0,4,1,1,4,0,1,0,0,0,0,0,4,0,1,1,4,0,0,0,4,4,0,1,0,4,1,0,0,0,0,1,0,0,1,1,4,0,1,0,4,0,0,0,0,0,1,0,0,4,0,1,0,4,1,1,4,0,1,0,4,4,0,0,4,0,1,0,0,0,0,0,0,4,0,1,4,4,1,0,4,0,0,1,0,0,0,0,4,4,1,1,4,4,0,0,0,4,1,1,0,0,1,1,0,4,0,0,4,0,0,1,4,4,1,0,4,4,1,0,0,0,0,1,4,4,1,1,0,4,0,0,0,4,0,1,4,0,1,1,0,0,16,64,128,64,16,0,128,64,16,0,128,64,0,0,0,64,16,64,0,64,0,64,128,0,0,64,128,0,16,0,128,0,0,0,0,0,16,64,0,0,16,64,0,64,16,64,128,64,0,0,128,0,0,0,0,64,0,64,0,0,0,64,128,0,0,0,128,0,16,0,0,0,0,64,0,0,16,64,128,64,0,0,0,0,0,64,0,0,16,0,128,64,16,0,0,64,0,64,128,0,0,0,128,64,16,0,0,64,0,64,0,0,16,0,0,64,16,64,0,64,16,64,128,64,0,0,128,64,0,64,0,0,0,64,128,0,16,64,0,64,16,64,128,64,0,0,128,0,0,0,0,0,0,0,0,0,16,64,0,64,16,0,0,64,0,64,0,64,0,64,128,0,0,0,128,0,16,64,128,64,16,0,128,64,16,0,128,64,0,0,0,64,16,64,128,64,0,0,128,0,0,0,128,0,16,0,0,0,0,64,128,0,16,0,128,64,16,64,0,64,0,64,128,0,16,0,128,64,16,0,0,0,0,64,0,0,16,64,128,64,0,0,0,0,0,64,0,0,16,0,0,64,16,64,0,128,0,0,0,128,0,4,1,0,0,4,1,128,0,0,33,0,0,4,0,128,0,0,0,0,0,0,32,0,0,4,1,128,0,4,32,0,0,4,0,128,0,0,1,128,0,4,32,128,0,0,33,0,0,4,33,128,0,4,0,0,0,0,32,0,0,0,1,0,0,4,32,0,0,4,32,0,0,0,0,128,0,0,32,128,0,4,33,128,0,4,33,128,0,0,1,0,0,4,33,128,0,0,32,0,0,0,0,0,0,0,33,128,0,4,1,0,0,0,1,0,0,0,33,128,0,4,0,0,0,4,0,128,0,0,33,128,0,0,0,0,0,0,1,0,0,0,32,0,0,4,1,128,0,0,33,128,0,4,32,128,0,0,1,0,0,0,32,0,0,4,33,128,0,4,1,128,0,4,32,128,0,0,0,0,0,0,1,0,0,4,33,128,0,4,33,128,0,4,0,0,0,0,33,128,0,4,33,0,0,4,1,0,0,0,0,0,0,4,32,0,0,0,33,128,0,4,0,128,0,0,1,128,0,0,32,0,0,4,0,0,0,0,0,0,0,4,32,128,0,4,1,128,0,0,32,8,0,0,16,0,0,32,16,0,32,0,0,8,32,32,16,0,0,32,16,8,0,0,0,8,32,32,16,0,0,32,0,0,32,0,16,8,32,32,0,0,0,32,0,8,0,0,16,8,0,32,0,0,32,0,16,0,0,0,16,8,32,0,0,0,0,0,0,8,0,32,0,8,32,0,16,0,32,0,0,0,32,32,0,8,32,0,16,8,0,0,0,8,0,32,16,8,0,32,16,0,0,0,0,8,32,32,0,0,32,32,16,8,32,0,0,0,32,32,0,0,32,32,16,0,0,0,16,0,32,0,16,8,0,0,0,8,0,32,16,0,32,32,0,8,32,32,16,0,0,32,0,8,32,0,0,8,0,0,16,0,0,32,0,0,32,0,16,0,0,0,16,8,32,0,0,8,0,0,16,8,32,32,16,0,32,32,0,0,0,32,16,8,32,32,0,0,32,32,16,0,0,0,0,8,0,32,16,8,0,0,0,0,32,0,0,0,0,32,16,8,32,32,0,0,32,0,0,8,0,32,0,8,32,0,16,0,0,0,0,0,32,32,16,0,0,0,16,8,0,32,0,8,32,0,16,0,0,16,0,1,0,16,2,1,4,0,2,0,0,0,0,0,4,0,0,1,4,0,2,1,4,16,0,0,4,16,2,1,4,16,2,0,0,16,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,2,1,0,16,2,1,4,0,0,0,4,0,2,1,4,16,0,1,0,16,0,0,4,0,2,1,0,0,2,0,0,16,2,0,4,16,2,1,0,16,0,0,0,16,2,0,4,0,0,1,4,0,0,1,4,16,2,0,4,16,0,1,0,0,0,0,0,0,2,0,4,16,0,0,0,0,2,0,4,16,0,0,0,16,0,1,4,0,2,1,4,0,2,1,0,16,2,1,0,16,2,1,0,0,0,1,0,16,0,0,0,0,2,0,4,0,2,0,0,16,0,0,4,16,2,1,4,0,0,1,4,16,0,0,4,16,2,1,4,0,0,1,0,0,2,1,4,16,2,0,0,16,2,0,4,16,0,0,0,0,0,1,0,0,0,1,4,16,2,0,0,0,0,1,4,16,0,0,0,16,2,0,4,0,0,1,0,0,2,0,4,0,2,0,4,0,0,1,0,16,0,32,8,0,8,0,8,0,0,0,0,2,0,32,8,2,8,0,0,0,8,32,8,0,8,32,0,0,0,0,0,0,8,32,0,2,0,0,0,2,8,32,8,2,8,0,8,2,0,0,8,2,8,32,8,2,0,0,8,0,0,32,0,0,0,0,0,2,8,32,0,0,8,0,8,0,8,32,8,0,0,0,8,2,0,32,0,2,0,32,0,2,8,0,8,2,8,32,8,0,0,0,0,0,0,0,0,0,0,32,0,2,8,32,0,0,8,0,8,0,8,32,8,2,0,0,0,2,0,32,8,2,0,0,0,2,0,0,8,2,8,0,8,0,0,32,0,0,0,32,0,2,8,0,8,0,0,32,8,2,0,0,8,0,8,32,0,0,0,32,0,0,8,0,0,2,8,32,0,2,8,0,0,0,8,0,0,2,0,32,8,0,8,0,0,0,0,32,8,2,8,32,0,2,0,32,0,0,8,0,0,2,8,0,8,0,8,32,8,0,8,0,0,0,0,32,8,2,8,0,8,2,0,0,8,2,0,32,8,0,0,32,8,0,0,32,0,2,0,0,0,0,8,0,8,2,8,0,0,0,0,0,0,0,64,0,0,64,0,0,0,64,64,0,64,0,0,0,64,0,64,0,64,64,0,0,64,64,64,64,0,0,0,64,0,0,64,64,0,64,0,64,0,64,64,64,64,0,0,64,64,0,64,64,64,64,0,64,64,64,64,0,0,0,0,0,0,0,16,0,0,16,0,0,0,16,16,0,16,0,0,0,16,0,16,0,16,16,0,0,16,16,16,16,0,0,0,16,0,0,16,16,0,16,0,16,0,16,16,16,16,0,0,16,16,0,16,16,16,16,0,16,16,16,16,0,0,0,0,0,0,0,4,0,0,4,0,0,0,4,4,0,4,0,0,0,4,0,4,0,4,4,0,0,4,4,4,4,0,0,0,4,0,0,4,4,0,4,0,4,0,4,4,4,4,0,0,4,4,0,4,4,4,4,0,4,4,4,4,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,128,0,0,128,0,0,0,128,128,0,128,0,0,0,128,0,128,0,128,128,0,0,128,128,128,128,0,0,0,128,0,0,128,128,0,128,0,128,0,128,128,128,128,0,0,128,128,0,128,128,128,128,0,128,128,128,128,0,0,0,0,0,0,0,32,0,0,32,0,0,0,32,32,0,32,0,0,0,32,0,32,0,32,32,0,0,32,32,32,32,0,0,0,32,0,0,32,32,0,32,0,32,0,32,32,32,32,0,0,32,32,0,32,32,32,32,0,32,32,32,32,0,0,0,0,0,0,0,8,0,0,8,0,0,0,8,8,0,8,0,0,0,8,0,8,0,8,8,0,0,8,8,8,8,0,0,0,8,0,0,8,8,0,8,0,8,0,8,8,8,8,0,0,8,8,0,8,8,8,8,0,8,8,8,8,0,0,0,0,0,0,0,2,0,0,2,0,0,0,2,2,0,2,0,0,0,2,0,2,0,2,2,0,0,2,2,2,2,0,0,0,2,0,0,2,2,0,2,0,2,0,2,2,2,2,0,0,2,2,0,2,2,2,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,255,255,255,216,255,255,255,220,255,255,255,254,255,255,255,236,255,255,255,226,255,255,255,247,255,255,255,234,255,255,255,230,255,255,255,242,255,255,255,251,255,255,255,244,255,255,255,240,255,255,255,0,0,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,0,0,0,0,0,0,0,31,0,0,0,3,0,0,0,0,0,0,0,136,222,0,0,5,0,0,0,0,0,0,0,0,0,0,0,163,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,0,0,0,59,0,0,0,216,232,4,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,163,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,59,0,0,0,208,232,4,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,163,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,59,0,0,0,200,228,4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,244,81,88,207,140,177,192,70,246,181,203,41,49,3,199,4,91,112,48,180,93,253,32,120,127,139,154,216,89,41,80,104,72,137,171,167,86,3,108,255,183,205,136,63,212,119,180,43,165,163,112,241,186,228,168,252,65,131,253,217,111,225,138,122,47,45,116,150,7,31,13,9,94,3,118,44,112,247,64,165,44,167,111,87,65,168,170,116,223,160,88,100,3,74,199,196,60,83,174,175,95,24,4,21,177,227,109,40,134,171,12,164,191,67,240,233,80,129,57,87,22,82,55,120,164,106,215,86,183,199,232,219,112,32,36,238,206,189,193,175,15,124,245,42,198,135,71,19,70,48,168,1,149,70,253,216,152,128,105,175,247,68,139,177,91,255,255,190,215,92,137,34,17,144,107,147,113,152,253,142,67,121,166,33,8,180,73,98,37,30,246,64,179,64,192,81,90,94,38,170,199,182,233,93,16,47,214,83,20,68,2,129,230,161,216,200,251,211,231,230,205,225,33,214,7,55,195,135,13,213,244,237,20,90,69,5,233,227,169,248,163,239,252,217,2,111,103,138,76,42,141,66,57,250,255,129,246,113,135,34,97,157,109,12,56,229,253,68,234,190,164,169,207,222,75,96,75,187,246,112,188,191,190,198,126,155,40,250,39,161,234,133,48,239,212,5,29,136,4,57,208,212,217,229,153,219,230,248,124,162,31,101,86,172,196,68,34,41,244,151,255,42,67,167,35,148,171,57,160,147,252,195,89,91,101,146,204,12,143,125,244,239,255,209,93,132,133,79,126,168,111,224,230,44,254,20,67,1,163,161,17,8,78,130,126,83,247,53,242,58,189,187,210,215,42,145,211,134,235,152,47,138,66,145,68,55,113,207,251,192,181,165,219,181,233,91,194,86,57,241,17,241,89,164,130,63,146,213,94,28,171,152,170,7,216,1,91,131,18,190,133,49,36,195,125,12,85,116,93,190,114,254,177,222,128,167,6,220,155,116,241,155,193,193,105,155,228,134,71,190,239,198,157,193,15,204,161,12,36,111,44,233,45,170,132,116,74,220,169,176,92,218,136,249,118,82,81,62,152,109,198,49,168,200,39,3,176,199,127,89,191,243,11,224,198,71,145,167,213,81,99,202,6,103,41,41,20,133,10,183,39,56,33,27,46,252,109,44,77,19,13,56,83,84,115,10,101,187,10,106,118,46,201,194,129,133,44,114,146,161,232,191,162,75,102,26,168,112,139,75,194,163,81,108,199,25,232,146,209,36,6,153,214,133,53,14,244,112,160,106,16,22,193,164,25,8,108,55,30,76,119,72,39,181,188,176,52,179,12,28,57,74,170,216,78,79,202,156,91,243,111,46,104,238,130,143,116,111,99,165,120,20,120,200,132,8,2,199,140,250,255,190,144,235,108,80,164,247,163,249,190,242,120,113,198,136,106,63,36,211,8,163,133,46,138,25,19,68,115,112,3,34,56,9,164,208,49,159,41,152,250,46,8,137,108,78,236,230,33,40,69,119,19,208,56,207,102,84,190,108,12,233,52,183,41,172,192,221,80,124,201,181,213,132,63,23,9,71,181,217,213,22,146,27,251,121,137,166,11,49,209,172,181,223,152,219,114,253,47,183,223,26,208,237,175,225,184,150,126,38,106,69,144,124,186,153,127,44,241,71,153,161,36,247,108,145,179,226,242,1,8,22,252,142,133,216,32,105,99,105,78,87,113,163,254,88,164,126,61,147,244,143,116,149,13,88,182,142,114,88,205,139,113,238,74,21,130,29,164,84,123,181,89,90,194,57,213,48,156,19,96,242,42,35,176,209,197,240,133,96,40,24,121,65,202,239,56,219,184,176,220,121,142,14,24,58,96,139,14,158,108,62,138,30,176,193,119,21,215,39,75,49,189,218,47,175,120,96,92,96,85,243,37,85,230,148,171,85,170,98,152,72,87,64,20,232,99,106,57,202,85,182,16,171,42,52,92,204,180,206,232,65,17,175,134,84,161,147,233,114,124,17,20,238,179,42,188,111,99,93,197,169,43,246,49,24,116,22,62,92,206,30,147,135,155,51,186,214,175,92,207,36,108,129,83,50,122,119,134,149,40,152,72,143,59,175,185,75,107,27,232,191,196,147,33,40,102,204,9,216,97,145,169,33,251,96,172,124,72,50,128,236,93,93,93,132,239,177,117,133,233,2,35,38,220,136,27,101,235,129,62,137,35,197,172,150,211,243,111,109,15,57,66,244,131,130,68,11,46,4,32,132,164,74,240,200,105,94,155,31,158,66,104,198,33,154,108,233,246,97,156,12,103,240,136,211,171,210,160,81,106,104,47,84,216,40,167,15,150,163,51,81,171,108,11,239,110,228,59,122,19,80,240,59,186,152,42,251,126,29,101,241,161,118,1,175,57,62,89,202,102,136,14,67,130,25,134,238,140,180,159,111,69,195,165,132,125,190,94,139,59,216,117,111,224,115,32,193,133,159,68,26,64,166,106,193,86,98,170,211,78,6,119,63,54,114,223,254,27,61,2,155,66,36,215,208,55,72,18,10,208,211,234,15,219,155,192,241,73,201,114,83,7,123,27,153,128,216,121,212,37,247,222,232,246,26,80,254,227,59,76,121,182,189,224,108,151,186,6,192,4,182,79,169,193,196,96,159,64,194,158,92,94,99,36,106,25,175,111,251,104,181,83,108,62,235,178,57,19,111,236,82,59,31,81,252,109,44,149,48,155,68,69,129,204,9,189,94,175,4,208,227,190,253,74,51,222,7,40,15,102,179,75,46,25,87,168,203,192,15,116,200,69,57,95,11,210,219,251,211,185,189,192,121,85,10,50,96,26,198,0,161,214,121,114,44,64,254,37,159,103,204,163,31,251,248,233,165,142,248,34,50,219,223,22,117,60,21,107,97,253,200,30,80,47,171,82,5,173,250,181,61,50,96,135,35,253,72,123,49,83,130,223,0,62,187,87,92,158,160,140,111,202,46,86,135,26,219,105,23,223,246,168,66,213,195,255,126,40,198,50,103,172,115,85,79,140,176,39,91,105,200,88,202,187,93,163,255,225,160,17,240,184,152,61,250,16,184,131,33,253,108,181,252,74,91,211,209,45,121,228,83,154,101,69,248,182,188,73,142,210,144,151,251,75,218,242,221,225,51,126,203,164,65,19,251,98,232,198,228,206,218,202,32,239,1,76,119,54,254,158,126,208,180,31,241,43,77,218,219,149,152,145,144,174,113,142,173,234,160,213,147,107,208,209,142,208,224,37,199,175,47,91,60,142,183,148,117,142,251,226,246,143,100,43,18,242,18,184,136,136,28,240,13,144,160,94,173,79,28,195,143,104,145,241,207,209,173,193,168,179,24,34,47,47,119,23,14,190,254,45,117,234,161,31,2,139,15,204,160,229,232,116,111,181,214,243,172,24,153,226,137,206,224,79,168,180,183,224,19,253,129,59,196,124,217,168,173,210,102,162,95,22,5,119,149,128,20,115,204,147,119,20,26,33,101,32,173,230,134,250,181,119,245,66,84,199,207,53,157,251,12,175,205,235,160,137,62,123,211,27,65,214,73,126,30,174,45,14,37,0,94,179,113,32,187,0,104,34,175,224,184,87,155,54,100,36,30,185,9,240,29,145,99,85,170,166,223,89,137,67,193,120,127,83,90,217,162,91,125,32,197,185,229,2,118,3,38,131,169,207,149,98,104,25,200,17,65,74,115,78,202,45,71,179,74,169,20,123,82,0,81,27,21,41,83,154,63,87,15,214,228,198,155,188,118,164,96,43,0,116,230,129,181,111,186,8,31,233,27,87,107,236,150,242,21,217,13,42,33,101,99,182,182,249,185,231,46,5,52,255,100,86,133,197,93,45,176,83,161,143,159,169,153,71,186,8,106,7,133,110,233,112,122,75,68,41,179,181,46,9,117,219,35,38,25,196,176,166,110,173,125,223,167,73,184,96,238,156,102,178,237,143,113,140,170,236,255,23,154,105,108,82,100,86,225,158,177,194,165,2,54,25,41,76,9,117,64,19,89,160,62,58,24,228,154,152,84,63,101,157,66,91,214,228,143,107,214,63,247,153,7,156,210,161,245,48,232,239,230,56,45,77,193,93,37,240,134,32,221,76,38,235,112,132,198,233,130,99,94,204,30,2,63,107,104,9,201,239,186,62,20,24,151,60,161,112,106,107,132,53,127,104,134,226,160,82,5,83,156,183,55,7,80,170,28,132,7,62,92,174,222,127,236,68,125,142,184,242,22,87,55,218,58,176,13,12,80,240,4,31,28,240,255,179,0,2,26,245,12,174,178,116,181,60,88,122,131,37,189,33,9,220,249,19,145,209,246,47,169,124,115,71,50,148,1,71,245,34,129,229,229,58,220,218,194,55,52,118,181,200,167,221,243,154,70,97,68,169,14,3,208,15,62,199,200,236,65,30,117,164,153,205,56,226,47,14,234,59,161,187,128,50,49,179,62,24,56,139,84,78,8,185,109,79,3,13,66,111,191,4,10,246,144,18,184,44,121,124,151,36,114,176,121,86,175,137,175,188,31,119,154,222,16,8,147,217,18,174,139,179,46,63,207,220,31,114,18,85,36,113,107,46,230,221,26,80,135,205,132,159,24,71,88,122,23,218,8,116,188,154,159,188,140,125,75,233,58,236,122,236,250,29,133,219,102,67,9,99,210,195,100,196,71,24,28,239,8,217,21,50,55,59,67,221,22,186,194,36,67,77,161,18,81,196,101,42,2,0,148,80,221,228,58,19,158,248,223,113,85,78,49,16,214,119,172,129,155,25,17,95,241,86,53,4,107,199,163,215,59,24,17,60,9,165,36,89,237,230,143,242,250,251,241,151,44,191,186,158,110,60,21,30,112,69,227,134,177,111,233,234,10,94,14,134,179,42,62,90,28,231,31,119,250,6,61,78,185,220,101,41,15,29,231,153,214,137,62,128,37,200,102,82,120,201,76,46,106,179,16,156,186,14,21,198,120,234,226,148,83,60,252,165,244,45,10,30,167,78,247,242,61,43,29,54,15,38,57,25,96,121,194,25,8,167,35,82,182,18,19,247,110,254,173,235,102,31,195,234,149,69,188,227,131,200,123,166,209,55,127,177,40,255,140,1,239,221,50,195,165,90,108,190,133,33,88,101,2,152,171,104,15,165,206,238,59,149,47,219,173,125,239,42,132,47,110,91,40,182,33,21,112,97,7,41,117,71,221,236,16,21,159,97,48,168,204,19,150,189,97,235,30,254,52,3,207,99,3,170,144,92,115,181,57,162,112,76,11,158,158,213,20,222,170,203,188,134,204,238,167,44,98,96,171,92,171,156,110,132,243,178,175,30,139,100,202,240,189,25,185,105,35,160,80,187,90,101,50,90,104,64,179,180,42,60,213,233,158,49,247,184,33,192,25,11,84,155,153,160,95,135,126,153,247,149,168,125,61,98,154,136,55,248,119,45,227,151,95,147,237,17,129,18,104,22,41,136,53,14,214,31,230,199,161,223,222,150,153,186,88,120,165,132,245,87,99,114,34,27,255,195,131,155,150,70,194,26,235,10,179,205,84,48,46,83,228,72,217,143,40,49,188,109,239,242,235,88,234,255,198,52,97,237,40,254,115,60,124,238,217,20,74,93,227,183,100,232,20,93,16,66,224,19,62,32,182,226,238,69,234,171,170,163,21,79,108,219,208,79,203,250,66,244,66,199,181,187,106,239,29,59,79,101,5,33,205,65,158,121,30,216,199,77,133,134,106,71,75,228,80,98,129,61,242,161,98,207,70,38,141,91,160,131,136,252,163,182,199,193,195,36,21,127,146,116,203,105,11,138,132,71,133,178,146,86,0,191,91,9,157,72,25,173,116,177,98,20,0,14,130,35,42,141,66,88,234,245,85,12,62,244,173,29,97,112,63,35,146,240,114,51,65,126,147,141,241,236,95,214,219,59,34,108,89,55,222,124,96,116,238,203,167,242,133,64,110,50,119,206,132,128,7,166,158,80,248,25,85,216,239,232,53,151,217,97,170,167,105,169,194,6,12,197,252,171,4,90,220,202,11,128,46,122,68,158,132,52,69,195,5,103,213,253,201,158,30,14,211,219,115,219,205,136,85,16,121,218,95,103,64,67,103,227,101,52,196,197,216,56,62,113,158,248,40,61,32,255,109,241,231,33,62,21,74,61,176,143,43,159,227,230,247,173,131,219,104,90,61,233,247,64,129,148,28,38,76,246,52,41,105,148,247,32,21,65,247,212,2,118,46,107,244,188,104,0,162,212,113,36,8,212,106,244,32,51,183,212,183,67,175,97,0,80,46,246,57,30,70,69,36,151,116,79,33,20,64,136,139,191,29,252,149,77,175,145,181,150,211,221,244,112,69,47,160,102,236,9,188,191,133,151,189,3,208,109,172,127,4,133,203,49,179,39,235,150,65,57,253,85,230,71,37,218,154,10,202,171,37,120,80,40,244,41,4,83,218,134,44,10,251,109,182,233,98,20,220,104,0,105,72,215,164,192,14,104,238,141,161,39,162,254,63,79,140,173,135,232,6,224,140,181,182,214,244,122,124,30,206,170,236,95,55,211,153,163,120,206,66,42,107,64,53,158,254,32,185,133,243,217,171,215,57,238,139,78,18,59,247,250,201,29,86,24,109,75,49,102,163,38,178,151,227,234,116,250,110,58,50,67,91,221,247,231,65,104,251,32,120,202,78,245,10,251,151,179,254,216,172,86,64,69,39,149,72,186,58,58,83,85,135,141,131,32,183,169,107,254,75,149,150,208,188,103,168,85,88,154,21,161,99,41,169,204,51,219,225,153,86,74,42,166,249,37,49,63,28,126,244,94,124,49,41,144,2,232,248,253,112,47,39,4,92,21,187,128,227,44,40,5,72,21,193,149,34,109,198,228,63,19,193,72,220,134,15,199,238,201,249,7,15,31,4,65,164,121,71,64,23,110,136,93,235,81,95,50,209,192,155,213,143,193,188,242,100,53,17,65,52,120,123,37,96,156,42,96,163,232,248,223,27,108,99,31,194,180,18,14,158,50,225,2,209,79,102,175,21,129,209,202,224,149,35,107,225,146,62,51,98,11,36,59,34,185,190,238,14,162,178,133,153,13,186,230,140,12,114,222,40,247,162,45,69,120,18,208,253,148,183,149,98,8,125,100,240,245,204,231,111,163,73,84,250,72,125,135,39,253,157,195,30,141,62,243,65,99,71,10,116,255,46,153,171,110,111,58,55,253,248,244,96,220,18,168,248,221,235,161,76,225,27,153,13,107,110,219,16,85,123,198,55,44,103,109,59,212,101,39,4,232,208,220,199,13,41,241,163,255,0,204,146,15,57,181,11,237,15,105,251,159,123,102,156,125,219,206,11,207,145,160,163,94,21,217,136,47,19,187,36,173,91,81,191,121,148,123,235,214,59,118,179,46,57,55,121,89,17,204,151,226,38,128,45,49,46,244,167,173,66,104,59,43,106,198,204,76,117,18,28,241,46,120,55,66,18,106,231,81,146,183,230,187,161,6,80,99,251,75,24,16,107,26,250,237,202,17,216,189,37,61,201,195,225,226,89,22,66,68,134,19,18,10,110,236,12,217,42,234,171,213,78,103,175,100,95,168,134,218,136,233,191,190,254,195,228,100,87,128,188,157,134,192,247,240,248,123,120,96,77,96,3,96,70,131,253,209,176,31,56,246,4,174,69,119,204,252,54,215,51,107,66,131,113,171,30,240,135,65,128,176,95,94,0,60,190,87,160,119,36,174,232,189,153,66,70,85,97,46,88,191,143,244,88,78,162,253,221,242,56,239,116,244,194,189,137,135,195,249,102,83,116,142,179,200,85,242,117,180,185,217,252,70,97,38,235,122,132,223,29,139,121,14,106,132,226,149,95,145,142,89,110,70,112,87,180,32,145,85,213,140,76,222,2,201,225,172,11,185,208,5,130,187,72,98,168,17,158,169,116,117,182,25,127,183,9,220,169,224,161,9,45,102,51,70,50,196,2,31,90,232,140,190,240,9,37,160,153,74,16,254,110,29,29,61,185,26,223,164,165,11,15,242,134,161,105,241,104,40,131,218,183,220,254,6,57,87,155,206,226,161,82,127,205,79,1,94,17,80,250,131,6,167,196,181,2,160,39,208,230,13,39,140,248,154,65,134,63,119,6,76,96,195,181,6,168,97,40,122,23,240,224,134,245,192,170,88,96,0,98,125,220,48,215,158,230,17,99,234,56,35,148,221,194,83,52,22,194,194,86,238,203,187,222,182,188,144,161,125,252,235,118,29,89,206,9,228,5,111,136,1,124,75,61,10,114,57,36,124,146,124,95,114,227,134,185,157,77,114,180,91,193,26,252,184,158,211,120,85,84,237,181,165,252,8,211,124,61,216,196,15,173,77,94,239,80,30,248,230,97,177,217,20,133,162,60,19,81,108,231,199,213,111,196,78,225,86,206,191,42,54,55,200,198,221,52,50,154,215,18,130,99,146,142,250,14,103,224,0,96,64,55,206,57,58,207,245,250,211,55,119,194,171,27,45,197,90,158,103,176,92,66,55,163,79,64,39,130,211,190,155,188,153,157,142,17,213,21,115,15,191,126,28,45,214,123,196,0,199,107,27,140,183,69,144,161,33,190,177,110,178,180,110,54,106,47,171,72,87,121,110,148,188,210,118,163,198,200,194,73,101,238,248,15,83,125,222,141,70,29,10,115,213,198,77,208,76,219,187,57,41,80,70,186,169,232,38,149,172,4,227,94,190,240,213,250,161,154,81,45,106,226,140,239,99,34,238,134,154,184,194,137,192,246,46,36,67,170,3,30,165,164,208,242,156,186,97,192,131,77,106,233,155,80,21,229,143,214,91,100,186,249,162,38,40,225,58,58,167,134,149,169,75,233,98,85,239,211,239,47,199,218,247,82,247,105,111,4,63,89,10,250,119,21,169,228,128,1,134,176,135,173,230,9,155,147,229,62,59,90,253,144,233,151,215,52,158,217,183,240,44,81,139,43,2,58,172,213,150,125,166,125,1,214,62,207,209,40,45,125,124,207,37,159,31,155,184,242,173,114,180,214,90,76,245,136,90,113,172,41,224,230,165,25,224,253,172,176,71,155,250,147,237,141,196,211,232,204,87,59,40,41,102,213,248,40,46,19,121,145,1,95,120,85,96,117,237,68,14,150,247,140,94,211,227,212,109,5,21,186,109,244,136,37,97,161,3,189,240,100,5,21,158,235,195,162,87,144,60,236,26,39,151,42,7,58,169,155,109,63,27,245,33,99,30,251,102,156,245,25,243,220,38,40,217,51,117,245,253,85,177,130,52,86,3,187,60,186,138,17,119,81,40,248,217,10,194,103,81,204,171,95,146,173,204,81,23,232,77,142,220,48,56,98,88,157,55,145,249,32,147,194,144,122,234,206,123,62,251,100,206,33,81,50,190,79,119,126,227,182,168,70,61,41,195,105,83,222,72,128,230,19,100,16,8,174,162,36,178,109,221,253,45,133,105,102,33,7,9,10,70,154,179,221,192,69,100,207,222,108,88,174,200,32,28,221,247,190,91,64,141,88,27,127,1,210,204,187,227,180,107,126,106,162,221,69,255,89,58,68,10,53,62,213,205,180,188,168,206,234,114,187,132,100,250,174,18,102,141,71,111,60,191,99,228,155,210,158,93,47,84,27,119,194,174,112,99,78,246,141,13,14,116,87,19,91,231,113,22,114,248,93,125,83,175,8,203,64,64,204,226,180,78,106,70,210,52,132,175,21,1,40,4,176,225,29,58,152,149,180,159,184,6,72,160,110,206,130,59,63,111,130,171,32,53,75,29,26,1,248,39,114,39,177,96,21,97,220,63,147,231,43,121,58,187,189,37,69,52,225,57,136,160,75,121,206,81,183,201,50,47,201,186,31,160,126,200,28,224,246,209,199,188,195,17,1,207,199,170,232,161,73,135,144,26,154,189,79,212,203,222,218,208,56,218,10,213,42,195,57,3,103,54,145,198,124,49,249,141,79,43,177,224,183,89,158,247,58,187,245,67,255,25,213,242,156,69,217,39,44,34,151,191,42,252,230,21,113,252,145,15,37],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+51201);allocate([21,148,155,97,147,229,250,235,156,182,206,89,100,168,194,209,168,186,18,94,7,193,182,12,106,5,227,101,80,210,16,66,164,3,203,14,110,236,224,59,219,152,22,190,160,152,76,100,233,120,50,50,149,31,159,223,146,211,224,43,52,160,211,30,242,113,137,65,116,10,27,140,52,163,75,32,113,190,197,216,50,118,195,141,159,53,223,46,47,153,155,71,111,11,230,29,241,227,15,84,218,76,229,145,216,218,30,207,121,98,206,111,126,62,205,102,177,24,22,5,29,44,253,197,210,143,132,153,34,251,246,87,243,35,245,35,118,50,166,49,53,168,147,2,205,204,86,98,129,240,172,181,235,117,90,151,54,22,110,204,115,210,136,146,98,150,222,208,73,185,129,27,144,80,76,20,86,198,113,189,199,198,230,10,20,122,50,6,208,225,69,154,123,242,195,253,83,170,201,0,15,168,98,226,191,37,187,246,210,189,53,5,105,18,113,34,2,4,178,124,207,203,182,43,156,118,205,192,62,17,83,211,227,64,22,96,189,171,56,240,173,71,37,156,32,56,186,118,206,70,247,197,161,175,119,96,96,117,32,78,254,203,133,216,141,232,138,176,249,170,122,126,170,249,76,92,194,72,25,140,138,251,2,228,106,195,1,249,225,235,214,105,248,212,144,160,222,92,166,45,37,9,63,159,230,8,194,50,97,78,183,91,226,119,206,227,223,143,87,230,114,195,58,104,112,114,79,66,110,97,101,108,111,104,101,83,114,101,100,68,121,114,99,116,98,117,111,37,0,0,0,0,0,0,0,116,0,0,0,148,242,4,0,110,0,0,0,150,242,4,0,114,0,0,0,152,242,4,0,102,0,0,0,154,242,4,0,97,0,0,0,156,242,4,0,101,0,0,0,158,242,4,0,119,0,0,0,160,242,4,0,87,0,0,0,173,242,4,0,115,0,0,0,187,242,4,0,83,0,0,0,199,242,4,0,100,0,0,0,212,242,4,0,68,0,0,0,224,242,4,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+61441);allocate([1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,42,11,66,152,97,168,67,227,219,130,68,237,179,94,68,108,147,207,66,236,125,171,65,153,148,250,66,199,70,104,67,215,91,235,66,144,213,5,65,13,225,79,49,171,255,239,61,231,181,123,64,69,122,12,66,42,28,182,66,124,60,66,66,168,78,231,51,22,250,239,61,192,149,23,64,188,225,67,65,65,141,141,65,77,90,162,64,44,106,228,66,229,46,100,69,53,92,16,71,102,161,190,71,139,168,240,70,85,31,109,66,177,217,119,68,35,74,167,69,134,37,245,69,128,1,188,68,0,0,0,0,0,0,240,61,234,212,83,65,163,6,206,67,237,43,114,69,214,83,247,69,63,51,104,45,255,255,239,61,35,176,217,64,202,157,216,66,183,104,1,68,198,45,4,68,55,101,33,67,23,139,244,69,214,188,2,72,156,178,47,73,148,190,34,73,72,203,143,200,84,68,236,65,71,251,124,67,46,96,61,68,42,217,56,68,242,242,27,67,55,180,158,192,0,0,0,0,0,0,210,189,141,44,130,193,131,230,61,196,58,39,57,198,131,54,61,199,50,137,63,180,117,244,209,189,35,36,48,192,22,79,157,193,31,77,41,194,178,249,170,193,148,108,15,66,202,193,180,67,115,51,149,68,230,255,140,68,184,148,45,67,45,195,177,65,240,52,8,67,50,60,135,67,26,224,25,67,154,133,106,65,27,8,47,177,184,255,143,189,149,45,26,192,82,186,175,193,18,81,104,194,101,149,251,193,183,152,190,179,18,251,143,189,204,177,185,191,159,87,244,192,54,23,51,193,13,244,78,192,152,17,233,66,235,155,111,69,219,149,30,71,124,8,228,71,186,11,58,71,8,4,115,66,19,104,131,68,196,215,186,69,200,101,22,70,238,96,22,69,0,0,0,0,0,0,144,189,134,78,1,193,20,136,128,195,118,83,27,197,90,40,164,197,138,197,72,173,255,255,143,189,136,27,133,192,123,89,135,194,155,157,165,195,121,55,173,195,22,9,67,66,28,108,49,68,95,130,103,69,103,227,201,69,87,69,29,69,89,63,21,195,184,236,242,65,143,172,134,67,41,50,83,68,229,187,92,68,152,170,84,67,88,243,169,192,27,104,150,49,112,255,149,61,227,7,86,64,197,124,42,66,223,206,42,67,228,187,38,67,219,137,33,52,42,246,149,61,191,196,255,63,253,237,103,65,113,84,253,65,140,5,130,65,170,198,35,67,194,18,253,69,147,50,11,72,212,30,68,73,89,51,77,73,105,235,167,200,160,141,165,66,7,221,1,69,148,62,147,70,29,175,93,71,193,136,12,71,190,82,167,197,0,0,0,0,0,0,150,61,147,74,60,65,25,107,11,68,202,108,10,70,160,150,16,71,121,236,161,45,255,255,149,61,134,189,186,64,144,28,7,67,205,103,128,68,75,191,248,68],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+63960);allocate([80,67,0,0,249,4,0,0,250,4,0,0,114,0,0,0,0,0,0,0,96,67,0,0,251,4,0,0,252,4,0,0,253,4,0,0,254,4,0,0,0,0,0,0,112,67,0,0,255,4,0,0,0,5,0,0,164,1,0,0,133,0,0,0,62,0,0,0,63,0,0,0,134],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+68652);allocate([136,67,0,0,1,5,0,0,2,5,0,0,9,2,0,0,64,0,0,0,47,0,0,0,73,0,0,0,165,1,0,0,166,1,0,0,65,0,0,0,167,1,0,0,168,1,0,0,198,1,0,0,66,0,0,0,199,1,0,0,0,0,0,0,152,67,0,0,1,5,0,0,3,5,0,0,10,2,0,0,64,0,0,0,47,0,0,0,73,0,0,0,169,1,0,0,166,1,0,0,65,0,0,0,170,1,0,0,171,1,0,0,200,1,0,0,67,0,0,0,201,1,0,0,0,0,0,0,168,67,0,0,4,5,0,0,5,5,0,0,11,2,0,0,42,0,0,0,48,0,0,0,74,0,0,0,172,1,0,0,43,0,0,0,43,0,0,0,173,1,0,0,45,0,0,0,202,1,0,0,68,0,0,0,203,1,0,0,0,0,0,0,184,67,0,0,4,5,0,0,6,5,0,0,12,2,0,0,42,0,0,0,48,0,0,0,74,0,0,0,42,0,0,0,43,0,0,0,43,0,0,0,174,1,0,0,175,1,0,0,204,1,0,0,44,0,0,0,205,1,0,0,0,0,0,0,200,67,0,0,88,1,0,0,7,5,0,0,42,0,0,0,0,0,0,0,208,67,0,0,88,1,0,0,8,5,0,0,42,0,0,0,64,0,0,0,42,0,0,0,0,0,0,0,232,67,0,0,9,5,0,0,10,5,0,0,176,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,68,0,0,255,4,0,0,11,5,0,0,42,0,0,0,133,0,0,0,62,0,0,0,63,0,0,0,42,0,0,0,0,0,0,0,0,68,0,0,12,5,0,0,13,5,0,0,122,0,0,0,0,0,0,0,24,68,0,0,255,4,0,0,14,5,0,0,42,0,0,0,133,0,0,0,62,0,0,0,63,0,0,0,135,0,0,0,0,0,0,0,40,68,0,0,255,4,0,0,15,5,0,0,177,1,0,0,133,0,0,0,62,0,0,0,63,0,0,0,136,0,0,0,0,0,0,0,56,68,0,0,255,4,0,0,16,5,0,0,178,1,0,0,137,0,0,0,62,0,0,0,63,0,0,0,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,68,0,0,17,5,0,0,18,5,0,0,42,0,0,0,42,0,0,0,42,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,5,0,0,0,7,0,0,0,11,0,0,0,13,0,0,0,17,0,0,0,19,0,0,0,23,0,0,0,29,0,0,0,31,0,0,0,37,0,0,0,41,0,0,0,43,0,0,0,47,0,0,0,53,0,0,0,59,0,0,0,61,0,0,0,67,0,0,0,71,0,0,0,73,0,0,0,79,0,0,0,83,0,0,0,89,0,0,0,97,0,0,0,101,0,0,0,103,0,0,0,107,0,0,0,109,0,0,0,113,0,0,0,127,0,0,0,131,0,0,0,137,0,0,0,139,0,0,0,149,0,0,0,151,0,0,0,157,0,0,0,163,0,0,0,167,0,0,0,173,0,0,0,179,0,0,0,181,0,0,0,191,0,0,0,193,0,0,0,197,0,0,0,199,0,0,0,211,0,0,0,1,0,0,0,11,0,0,0,13,0,0,0,17,0,0,0,19,0,0,0,23,0,0,0,29,0,0,0,31,0,0,0,37,0,0,0,41,0,0,0,43,0,0,0,47,0,0,0,53,0,0,0,59,0,0,0,61,0,0,0,67,0,0,0,71,0,0,0,73,0,0,0,79,0,0,0,83,0,0,0,89,0,0,0,97,0,0,0,101,0,0,0,103,0,0,0,107,0,0,0,109,0,0,0,113,0,0,0,121,0,0,0,127,0,0,0,131,0,0,0,137,0,0,0,139,0,0,0,143,0,0,0,149,0,0,0,151,0,0,0,157,0,0,0,163,0,0,0,167,0,0,0,169,0,0,0,173,0,0,0,179,0,0,0,181,0,0,0,187,0,0,0,191,0,0,0,193,0,0,0,197,0,0,0,199,0,0,0,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,37,0,0,0,100,0,0,0,0,0,0,0,37,0,0,0,117,0,0,0,0,0,0,0,37,0,0,0,108,0,0,0,100,0,0,0,0,0,0,0,37,0,0,0,108,0,0,0,117,0,0,0,0,0,0,0,37,0,0,0,108,0,0,0,108,0,0,0,100,0,0,0,0,0,0,0,37,0,0,0,108,0,0,0,108,0,0,0,117,0,0,0,0,0,0,0,37,0,0,0,102,0,0,0,0,0,0,0,37,0,0,0,76,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,68,0,0,19,5,0,0,20,5,0,0,0,0,0,0,152,68,0,0,21,5,0,0,22,5,0,0,0,0,0,0,168,68,0,0,23,5,0,0,24,5,0,0,0,0,0,0,184,68,0,0,4,5,0,0,25,5,0,0,42,0,0,0,42,0,0,0,48,0,0,0,74,0,0,0,42,0,0,0,43,0,0,0,43,0,0,0,173,1,0,0,45,0,0,0,202,1,0,0,44,0,0,0,205,1,0,0,0,0,0,0,192,68,0,0,1,5,0,0,26,5,0,0,13,2,0,0,64,0,0,0,47,0,0,0,73,0,0,0,169,1,0,0,166,1,0,0,65,0,0,0,167,1,0,0,168,1,0,0,198,1,0,0,67,0,0,0,201,1,0,0,8,0,0,0,0,0,0,0,200,68,0,0,221,0,0,0,222,0,0,0,248,255,255,255,248,255,255,255,200,68,0,0,223,0,0,0,224,0,0,0,224,23,1,0,244,23,1,0,8,0,0,0,0,0,0,0,224,68,0,0,27,5,0,0,28,5,0,0,248,255,255,255,248,255,255,255,224,68,0,0,29,5,0,0,30,5,0,0,16,24,1,0,36,24,1,0,4,0,0,0,0,0,0,0,248,68,0,0,46,0,0,0,47,0,0,0,252,255,255,255,252,255,255,255,248,68,0,0,48,0,0,0,49,0,0,0,64,24,1,0,84,24,1,0,4,0,0,0,0,0,0,0,16,69,0,0,31,5,0,0,32,5,0,0,252,255,255,255,252,255,255,255,16,69,0,0,33,5,0,0,34,5,0,0,112,24,1,0,132,24,1,0,12,0,0,0,0,0,0,0,40,69,0,0,104,1,0,0,105,1,0,0,4,0,0,0,248,255,255,255,40,69,0,0,106,1,0,0,107,1,0,0,244,255,255,255,244,255,255,255,40,69,0,0,108,1,0,0,109,1,0,0,160,24,1,0,144,25,1,0,164,25,1,0,184,25,1,0,204,25,1,0,200,24,1,0,180,24,1,0,0,0,0,0,128,68,0,0,35,5,0,0,36,5,0,0,122,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,64,0,0,0,128,0,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,64,0,0,176,0,0,0,74,0,0,0,4,1,0,0,1,0,0,0,2,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,144,68,0,0,37,5,0,0,38,5,0,0,12,0,0,0,0,0,0,0,200,68,0,0,221,0,0,0,222,0,0,0,244,255,255,255,244,255,255,255,200,68,0,0,223,0,0,0,224,0,0,0,4,0,0,0,0,0,0,0,248,68,0,0,46,0,0,0,47,0,0,0,252,255,255,255,252,255,255,255,248,68,0,0,48,0,0,0,49,0,0,0,0,0,0,0,72,69,0,0,255,4,0,0,39,5,0,0,179,1,0,0,133,0,0,0,62,0,0,0,63,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,71,0,0,40,5,0,0,41,5,0,0,184,0,0,0,46,0,0,0,75,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,71,0,0,42,5,0,0,43,5,0,0,184,0,0,0,47,0,0,0,76,0,0,0,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,71,0,0,44,5,0,0,45,5,0,0,184,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,46,5,0,0,47,5,0,0,184,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,72,0,0,48,5,0,0,49,5,0,0,184,0,0,0,48,0,0,0,49,0,0,0,64,0,0,0,50,0,0,0,65,0,0,0,42,0,0,0,43,0,0,0,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,72,0,0,50,5,0,0,51,5,0,0,184,0,0,0,52,0,0,0,53,0,0,0,66,0,0,0,54,0,0,0,67,0,0,0,44,0,0,0,45,0,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,72,0,0,52,5,0,0,53,5,0,0,184,0,0,0,180,1,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,44,0,0,0,248,255,255,255,96,72,0,0,181,1,0,0,182,1,0,0,183,1,0,0,184,1,0,0,185,1,0,0,186,1,0,0,187,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,72,0,0,54,5,0,0,55,5,0,0,184,0,0,0,188,1,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,45,0,0,0,248,255,255,255,136,72,0,0,189,1,0,0,190,1,0,0,191,1,0,0,192,1,0,0,193,1,0,0,194,1,0,0,195,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,72,0,0,56,5,0,0,57,5,0,0,184,0,0,0,196,1,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,44,0,0,0,197,1,0,0,198,1,0,0,199,1,0,0,200,1,0,0,201,1,0,0,202,1,0,0,203,1,0,0,248,255,255,255,176,72,0,0,204,1,0,0,205,1,0,0,206,1,0,0,207,1,0,0,208,1,0,0,209,1,0,0,210,1,0,0,0,0,0,0,208,72,0,0,58,5,0,0,59,5,0,0,184,0,0,0,211,1,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,45,0,0,0,212,1,0,0,213,1,0,0,214,1,0,0,215,1,0,0,216,1,0,0,217,1,0,0,218,1,0,0,248,255,255,255,208,72,0,0,219,1,0,0,220,1,0,0,221,1,0,0,222,1,0,0,223,1,0,0,224,1,0,0,225,1,0,0,0,0,0,0,240,72,0,0,60,5,0,0,61,5,0,0,184,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,73,0,0,62,5,0,0,63,5,0,0,184,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,73,0,0,64,5,0,0,65,5,0,0,184,0,0,0,42,0,0,0,0,0,0,0,64,73,0,0,66,5,0,0,67,5,0,0,184,0,0,0,43,0,0,0,0,0,0,0,80,73,0,0,68,5,0,0,69,5,0,0,184,0,0,0,226,1,0,0,227,1,0,0,14,2,0,0,15,2,0,0,16,2,0,0,17,2,0,0,228,1,0,0,18,2,0,0,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,73,0,0,70,5,0,0,71,5,0,0,184,0,0,0,229,1,0,0,230,1,0,0,20,2,0,0,21,2,0,0,22,2,0,0,23,2,0,0,231,1,0,0,24,2,0,0,25,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,73,0,0,72,5,0,0,73,5,0,0,184,0,0,0,232,1,0,0,233,1,0,0,26,2,0,0,27,2,0,0,28,2,0,0,29,2,0,0,234,1,0,0,30,2,0,0,31,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,73,0,0,74,5,0,0,75,5,0,0,184,0,0,0,235,1,0,0,236,1,0,0,32,2,0,0,33,2,0,0,34,2,0,0,35,2,0,0,237,1,0,0,36,2,0,0,37,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,73,0,0,76,5,0,0,77,5,0,0,184,0,0,0,238,1,0,0,239,1,0,0,38,2,0,0,39,2,0,0,40,2,0,0,41,2,0,0,240,1,0,0,42,2,0,0,43,2,0,0,0,0,0,0,224,73,0,0,78,5,0,0,79,5,0,0,184,0,0,0,241,1,0,0,242,1,0,0,44,2,0,0,45,2,0,0,46,2,0,0,47,2,0,0,243,1,0,0,48,2,0,0,49,2,0,0,0,0,0,0,240,73,0,0,80,5,0,0,81,5,0,0,184,0,0,0,244,1,0,0,245,1,0,0,50,2,0,0,51,2,0,0,52,2,0,0,53,2,0,0,246,1,0,0,54,2,0,0,55,2,0,0,0,0,0,0,0,74,0,0,82,5,0,0,83,5,0,0,184,0,0,0,247,1,0,0,248,1,0,0,56,2,0,0,57,2,0,0,58,2,0,0,59,2,0,0,249,1,0,0,60,2,0,0,61,2,0,0,0,0,0,0,16,74,0,0,84,5,0,0,85,5,0,0,184,0,0,0,44,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,74,0,0,86,5,0,0,87,5,0,0,184,0,0,0,46,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,74,0,0,88,5,0,0,89,5,0,0,184,0,0,0,42,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,74,0,0,90,5,0,0,91,5,0,0,184,0,0,0,43,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,74,0,0,92,5,0,0,93,5,0,0,184,0,0,0,71,0,0,0,49,0,0,0,62,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,74,0,0,94,5,0,0,95,5,0,0,184,0,0,0,72,0,0,0,50,0,0,0,63,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,74,0,0,96,5,0,0,97,5,0,0,184,0,0,0,71,0,0,0,49,0,0,0,62,2,0,0,0,0,0,0,224,74,0,0,98,5,0,0,99,5,0,0,184,0,0,0,72,0,0,0,50,0,0,0,63,2,0,0,0,0,0,0,240,74,0,0,100,5,0,0,101,5,0,0,184,0,0,0,46,0,0,0,47,0,0,0,56,0,0,0,250,1,0,0,251,1,0,0,57,0,0,0,252,1,0,0,0,0,0,0,0,75,0,0,102,5,0,0,103,5,0,0,184,0,0,0,48,0,0,0,49,0,0,0,58,0,0,0,253,1,0,0,254,1,0,0,43,0,0,0,255,1,0,0,0,0,0,0,16,75,0,0,104,5,0,0,105,5,0,0,184,0,0,0,50,0,0,0,51,0,0,0,59,0,0,0,0,2,0,0,1,2,0,0,60,0,0,0,2,2,0,0,0,0,0,0,32,75,0,0,106,5,0,0,107,5,0,0,184,0,0,0,52,0,0,0,53,0,0,0,61,0,0,0,3,2,0,0,4,2,0,0,62,0,0,0,5,2,0,0,0,0,0,0,8,0,0,0,1,0,0,0,16,0,0,0,2,0,0,0,4,0,0,0,32,0,0,0,63,0,0,0,0,0,0,0,16,71,0,0,108,5,0,0,109,5,0,0,184,0,0,0,0,0,0,0,0,0,0,0,48,71,0,0,110,5,0,0,111,5,0,0,184,0,0,0,63,0,0,0,77,0,0,0,69,0,0,0,0,0,0,0,80,71,0,0,112,5,0,0,113,5,0,0,184,0,0,0,64,0,0,0,78,0,0,0,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,71,0,0,114,5,0,0,115,5,0,0,184,0,0,0,206,1,0,0,73,0,0,0,207,1,0,0,74,0,0,0,208,1,0,0,47,0,0,0,75,0,0,0,65,0,0,0,0,0,0,0,128,71,0,0,116,5,0,0,117,5,0,0,184,0,0,0,209,1,0,0,76,0,0,0,210,1,0,0,77,0,0,0,208,1,0,0,47,0,0,0,75,0,0,0,65,0,0,0,0,0,0,0,144,71,0,0,118,5,0,0,119,5,0,0,184,0,0,0,78,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,211,1,0,0,79,0,0,0,212,1,0,0,80,0,0,0,213,1,0,0,51,0,0,0,81,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,70,0,0,182,0,0,0,120,5,0,0,184,0,0,0,48,0,0,0,49,0,0,0,58,0,0,0,253,1,0,0,254,1,0,0,43,0,0,0,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,71,0,0,121,5,0,0,122,5,0,0,184,0,0,0,6,2,0,0,7,2,0,0,64,2,0,0,65,2,0,0,66,2,0,0,0,0,0,0,176,71,0,0,123,5,0,0,124,5,0,0,184,0,0,0,8,2,0,0,9,2,0,0,67,2,0,0,68,2,0,0,69,2,0,0,0,0,0,0,192,71,0,0,121,5,0,0,125,5,0,0,184,0,0,0,6,2,0,0,7,2,0,0,64,2,0,0,65,2,0,0,66,2,0,0,0,0,0,0,208,71,0,0,123,5,0,0,126,5,0,0,184,0,0,0,8,2,0,0,9,2,0,0,67,2,0,0,68,2,0,0,69,2,0,0,0,0,0,0,96,69,0,0,127,5,0,0,128,5,0,0,184,0,0,0,0,0,0,0,112,69,0,0,127,5,0,0,129,5,0,0,184,0,0,0,82,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,214,1,0,0,83,0,0,0,215,1,0,0,84,0,0,0,216,1,0,0,55,0,0,0,85,0,0,0,67,0,0,0,0,0,0,0,144,69,0,0,127,5,0,0,130,5,0,0,184,0,0,0,46,0,0,0,47,0,0,0,56,0,0,0,250,1,0,0,251,1,0,0,57,0,0,0,252,1,0,0,0,0,0,0,176,69,0,0,127,5,0,0,131,5,0,0,184,0,0,0,50,0,0,0,51,0,0,0,59,0,0,0,0,2,0,0,1,2,0,0,60,0,0,0,2,2,0,0,0,0,0,0,208,69,0,0,127,5,0,0,132,5,0,0,184,0,0,0,52,0,0,0,53,0,0,0,61,0,0,0,3,2,0,0,4,2,0,0,62,0,0,0,5,2,0,0,0,0,0,0,240,69,0,0,127,5,0,0,133,5,0,0,184,0,0,0,50,0,0,0,51,0,0,0,59,0,0,0,0,2,0,0,1,2,0,0,60,0,0,0,2,2,0,0,0,0,0,0,0,70,0,0,127,5,0,0,134,5,0,0,184,0,0,0,52,0,0,0,53,0,0,0,61,0,0,0,3,2,0,0,4,2,0,0,62,0,0,0,5,2,0,0,0,0,0,0,16,70,0,0,127,5,0,0,135,5,0,0,184,0,0,0,50,0,0,0,51,0,0,0,59,0,0,0,0,2,0,0,1,2,0,0,60,0,0,0,2,2,0,0,0,0,0,0,32,70,0,0,127,5,0,0,136,5,0,0,184,0,0,0,52,0,0,0,53,0,0,0,61,0,0,0,3,2,0,0,4,2,0,0,62,0,0,0,5,2,0,0,0,0,0,0,80,70,0,0,182,0,0,0,137,5,0,0,184,0,0,0,54,0,0,0,55,0,0,0,68,0,0,0,10,2,0,0,11,2,0,0,69,0,0,0,12,2,0,0,0,0,0,0,96,70,0,0,127,5,0,0,138,5,0,0,184,0,0,0,56,0,0,0,57,0,0,0,70,0,0,0,13,2,0,0,14,2,0,0,71,0,0,0,15,2,0,0,0,0,0,0,112,70,0,0,127,5,0,0,139,5,0,0,184,0,0,0,58,0,0,0,59,0,0,0,72,0,0,0,16,2,0,0,17,2,0,0,73,0,0,0,18,2,0,0,0,0,0,0,128,70,0,0,182,0,0,0,140,5,0,0,184,0,0,0,60,0,0,0,61,0,0,0,74,0,0,0,19,2,0,0,20,2,0,0,75,0,0,0,21,2,0,0,0,0,0,0,144,70,0,0,182,0,0,0,141,5,0,0,184,0,0,0,62,0,0,0,63,0,0,0,76,0,0,0,22,2,0,0,23,2,0,0,77,0,0,0,24,2,0,0,0,0,0,0,160,70,0,0,127,5,0,0,142,5,0,0,184,0,0,0,64,0,0,0,65,0,0,0,78,0,0,0,25,2,0,0,26,2,0,0,79,0,0,0,27,2,0,0,0,0,0,0,176,70,0,0,127,5,0,0,143,5,0,0,184,0,0,0,66,0,0,0,67,0,0,0,80,0,0,0,28,2,0,0,29,2,0,0,81,0,0,0,30,2,0,0,0,0,0,0,192,70,0,0,127,5,0,0,144,5,0,0,184,0,0,0,68,0,0,0,69,0,0,0,82,0,0,0,31,2,0,0,32,2,0,0,83,0,0,0,33,2,0,0,0,0,0,0,208,70,0,0,127,5,0,0,145,5,0,0,184,0,0,0,70,0,0,0,71,0,0,0,84,0,0,0,34,2,0,0,35,2,0,0,85,0,0,0,36,2,0,0,0,0,0,0,224,70,0,0,182,0,0,0,146,5,0,0,184,0,0,0,72,0,0,0,73,0,0,0,86,0,0,0,37,2,0,0,38,2,0,0,87,0,0,0,39,2,0,0,0,0,0,0,240,70,0,0,127,5,0,0,147,5,0,0,184,0,0,0,74,0,0,0,75,0,0,0,88,0,0,0,40,2,0,0,41,2,0,0,89,0,0,0,42,2,0,0,0,0,0,0,0,71,0,0,127,5,0,0,148,5,0,0,184,0,0,0,76,0,0,0,77,0,0,0,90,0,0,0,43,2,0,0,44,2,0,0,91,0,0,0,45,2,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,37,0,0,0,89,0,0,0,45,0,0,0,37,0,0,0,109,0,0,0,45,0,0,0,37,0,0,0,100,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,40,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,114,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,102,0,0,0,97,0,0,0,108,0,0,0,115,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,110,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,114,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,117,0,0,0,114,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,114,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,99,0,0,0,104,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,105,0,0,0,108,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,101,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,121,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,117,0,0,0,115,0,0,0,116,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,116,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,111,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,77,0,0,0,0,0,0,0,80,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,97,0,0,0,32,0,0,0,37,0,0,0,98,0,0,0,32,0,0,0,37,0,0,0,100,0,0,0,32,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,78,0,0,118,5,0,0,149,5,0,0,184,0,0,0,78,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,211,1,0,0,79,0,0,0,212,1,0,0,80,0,0,0,213,1,0,0,51,0,0,0,81,0,0,0,66,0,0,0,0,0,0,0,200,78,0,0,116,5,0,0,150,5,0,0,184,0,0,0,209,1,0,0,76,0,0,0,210,1,0,0,77,0,0,0,208,1,0,0,47,0,0,0,75,0,0,0,65,0,0,0,0,0,0,0,216,78,0,0,151,5,0,0,152,5,0,0,122,0,0,0,50,18,5,0,65,0,0,0,52,18,5,0,66,0,0,0,54,18,5,0,67,0,0,0,56,18,5,0,68,0,0,0,58,18,5,0,69,0,0,0,60,18,5,0,70,0,0,0,62,18,5,0,71,0,0,0,64,18,5,0,72,0,0,0,66,18,5,0,73,0,0,0,68,18,5,0,74,0,0,0,70,18,5,0,75,0,0,0,72,18,5,0,76,0,0,0,74,18,5,0,77,0,0,0,76,18,5,0,78,0,0,0,78,18,5,0,0,0,0,0,82,18,5,0,79,0,0,0,84,18,5,0,80,0,0,0,86,18,5,0,81,0,0,0,88,18,5,0,82,0,0,0,90,18,5,0,83,0,0,0,92,18,5,0,84,0,0,0,94,18,5,0,85,0,0,0,96,18,5,0,86,0,0,0,98,18,5,0,87,0,0,0,100,18,5,0,88,0,0,0,102,18,5,0,89,0,0,0,104,18,5,0,90,0,0,0,199,143,4,0,97,0,0,0,106,18,5,0,7,0,0,0,112,18,5,0,38,0,0,0,122,18,5,0,39,0,0,0,133,18,5,0,42,0,0,0,163,143,4,0,98,0,0,0,142,18,5,0,92,0,0,0,152,18,5,0,8,0,0,0,181,143,4,0,99,0,0,0,162,18,5,0,13,0,0,0,178,18,5,0,94,0,0,0,189,18,5,0,94,0,0,0,207,18,5,0,58,0,0,0,213,18,5,0,44,0,0,0,219,18,5,0,64,0,0,0,45,144,4,0,100,0,0,0,233,18,5,0,36,0,0,0,54,144,4,0,101,0,0,0,245,18,5,0,56,0,0,0,251,18,5,0,61,0,0,0,7,19,5,0,33,0,0,0,36,144,4,0,102,0,0,0,24,19,5,0,53,0,0,0,29,19,5,0,12,0,0,0,39,19,5,0,52,0,0,0,44,19,5,0,46,0,0,0,54,19,5,0,103,0,0,0,56,19,5,0,96,0,0,0,69,19,5,0,62,0,0,0,190,143,4,0,104,0,0,0,87,19,5,0,45,0,0,0,94,19,5,0,45,0,0,0,226,143,4,0,105,0,0,0,235,143,4,0,106,0,0,0,107,19,5,0,107,0,0,0,244,143,4,0,108,0,0,0,109,19,5,0,123,0,0,0,120,19,5,0,123,0,0,0,139,19,5,0,40,0,0,0,156,19,5,0,91,0,0,0,176,19,5,0,60,0,0,0,191,19,5,0,95,0,0,0,253,143,4,0,109,0,0,0,200,19,5,0,110,0,0,0,202,19,5,0,10,0,0,0,210,19,5,0,57,0,0,0,215,19,5,0,35,0,0,0,227,19,5,0,111,0,0,0,229,19,5,0,49,0,0,0,233,19,5,0,112,0,0,0,235,19,5,0,37,0,0,0,248,19,5,0,46,0,0,0,255,19,5,0,43,0,0,0,9,20,5,0,113,0,0,0,11,20,5,0,63,0,0,0,25,20,5,0,34,0,0,0,40,20,5,0,114,0,0,0,42,20,5,0,92,0,0,0,58,20,5,0,125,0,0,0,70,20,5,0,125,0,0,0,90,20,5,0,41,0,0,0,108,20,5,0,93,0,0,0,208,143,4,0,115,0,0,0,129,20,5,0,59,0,0,0,139,20,5,0,55,0,0,0,145,20,5,0,54,0,0,0,149,20,5,0,47,0,0,0,155,20,5,0,47,0,0,0,31,18,5,0,32,0,0,0,217,143,4,0,116,0,0,0,163,20,5,0,9,0,0,0,167,20,5,0,51,0,0,0,173,20,5,0,126,0,0,0,179,20,5,0,50,0,0,0,183,20,5,0,117,0,0,0,185,20,5,0,95,0,0,0,142,143,4,0,118,0,0,0,196,20,5,0,124,0,0,0,210,20,5,0,11,0,0,0,172,143,4,0,119,0,0,0,6,144,4,0,120,0,0,0,15,144,4,0,121,0,0,0,223,20,5,0,122,0,0,0,225,20,5,0,48,0,0,0,233,17,5,0,0,12,0,0,239,17,5,0,0,4,0,0,245,17,5,0,1,0,0,0,251,17,5,0,2,0,0,0,45,144,4,0,0,8,0,0,1,18,5,0,0,8,0,0,7,18,5,0,4,12,0,0,13,18,5,0,0,2,0,0,19,18,5,0,0,64,0,0,25,18,5,0,4,0,0,0,208,143,4,0,0,32,0,0,31,18,5,0,0,32,0,0,37,18,5,0,0,1,0,0,172,143,4,0,128,0,0,0,43,18,5,0,0,16,0,0,0,0,0,0,232,78,0,0,153,5,0,0,154,5,0,0,42,0,0,0,42,0,0,0,51,0,0,0,79,0,0,0,42,0,0,0,43,0,0,0,43,0,0,0,46,2,0,0,45,0,0,0,217,1,0,0,44,0,0,0,218,1,0,0,56,0,0,0,0,0,0,0,248,78,0,0,155,5,0,0,156,5,0,0,200,255,255,255,200,255,255,255,248,78,0,0,157,5,0,0,158,5,0,0,156,55,1,0,112,56,1,0,132,56,1,0,176,55,1,0,52,0,0,0,0,0,0,0,8,79,0,0,159,5,0,0,160,5,0,0,204,255,255,255,204,255,255,255,8,79,0,0,161,5,0,0,162,5,0,0,212,55,1,0,152,56,1,0,172,56,1,0,232,55,1,0,60,0,0,0,0,0,0,0,24,79,0,0,163,5,0,0,164,5,0,0,52,0,0,0,248,255,255,255,24,79,0,0,165,5,0,0,166,5,0,0,196,255,255,255,196,255,255,255,24,79,0,0,167,5,0,0,168,5,0,0,12,56,1,0,192,56,1,0,252,56,1,0,16,57,1,0,36,57,1,0,56,57,1,0,232,56,1,0,212,56,1,0,52,56,1,0,32,56,1,0,56,0,0,0,0,0,0,0,200,68,0,0,221,0,0,0,222,0,0,0,200,255,255,255,200,255,255,255,200,68,0,0,223,0,0,0,224,0,0,0,52],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+69768);allocate([248,68,0,0,46,0,0,0,47,0,0,0,204,255,255,255,204,255,255,255,248,68,0,0,48,0,0,0,49,0,0,0,60,0,0,0,0,0,0,0,40,69,0,0,104,1,0,0,105,1,0,0,52,0,0,0,248,255,255,255,40,69,0,0,106,1,0,0,107,1,0,0,196,255,255,255,196,255,255,255,40,69,0,0,108,1,0,0,109,1,0,0,60,0,0,0,0,0,0,0,200,68,0,0,221,0,0,0,222,0,0,0,196,255,255,255,196,255,255,255,200,68,0,0,223,0,0,0,224,0,0,0,52,0,0,0,0,0,0,0,248,68,0,0,46,0,0,0,47,0,0,0,204,255,255,255,204,255,255,255,248,68,0,0,48,0,0,0,49,0,0,0,0,0,0,0,0,0,109,230,236,222,5,0,11,0,0,48,1,48,2,48,12,255,14,255,251,48,26,255,27,255,31,255,1,255,155,48,156,48,180,0,64,255,168,0,62,255,227,255,63,255,253,48,254,48,157,48,158,48,3,48,221,78,5,48,6,48,7,48,252,48,21,32,16,32,15,255,92,0,28,48,22,32,92,255,38,32,37,32,24,32,25,32,28,32,29,32,8,255,9,255,20,48,21,48,59,255,61,255,91,255,93,255,8,48,9,48,10,48,11,48,12,48,13,48,14,48,15,48,16,48,17,48,11,255,18,34,177,0,215,0,247,0,29,255,96,34,28,255,30,255,102,34,103,34,30,34,52,34,66,38,64,38,176,0,50,32,51,32,3,33,229,255,4,255,162,0,163,0,5,255,3,255,6,255,10,255,32,255,167,0,6,38,5,38,203,37,207,37,206,37,199,37,198,37,161,37,160,37,179,37,178,37,189,37,188,37,59,32,18,48,146,33,144,33,145,33,147,33,19,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,34,11,34,134,34,135,34,130,34,131,34,42,34,41,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,34,40,34,172,0,210,33,212,33,0,34,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,34,165,34,18,35,2,34,7,34,97,34,82,34,106,34,107,34,26,34,61,34,29,34,53,34,43,34,44,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,33,48,32,111,38,109,38,106,38,32,32,33,32,182,0,0,0,0,0,0,0,0,0,239,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,255,17,255,18,255,19,255,20,255,21,255,22,255,23,255,24,255,25,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,255,34,255,35,255,36,255,37,255,38,255,39,255,40,255,41,255,42,255,43,255,44,255,45,255,46,255,47,255,48,255,49,255,50,255,51,255,52,255,53,255,54,255,55,255,56,255,57,255,58,255,0,0,0,0,0,0,0,0,0,0,0,0,65,255,66,255,67,255,68,255,69,255,70,255,71,255,72,255,73,255,74,255,75,255,76,255,77,255,78,255,79,255,80,255,81,255,82,255,83,255,84,255,85,255,86,255,87,255,88,255,89,255,90,255,0,0,0,0,0,0,0,0,65,48,66,48,67,48,68,48,69,48,70,48,71,48,72,48,73,48,74,48,75,48,76,48,77,48,78,48,79,48,80,48,81,48,82,48,83,48,84,48,85,48,86,48,87,48,88,48,89,48,90,48,91,48,92,48,93,48,94,48,95,48,96,48,97,48,98,48,99,48,100,48,101,48,102,48,103,48,104,48,105,48,106,48,107,48,108,48,109,48,110,48,111,48,112,48,113,48,114,48,115,48,116,48,117,48,118,48,119,48,120,48,121,48,122,48,123,48,124,48,125,48,126,48,127,48,128,48,129,48,130,48,131,48,132,48,133,48,134,48,135,48,136,48,137,48,138,48,139,48,140,48,141,48,142,48,143,48,144,48,145,48,146,48,147,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,48,162,48,163,48,164,48,165,48,166,48,167,48,168,48,169,48,170,48,171,48,172,48,173,48,174,48,175,48,176,48,177,48,178,48,179,48,180,48,181,48,182,48,183,48,184,48,185,48,186,48,187,48,188,48,189,48,190,48,191,48,192,48,193,48,194,48,195,48,196,48,197,48,198,48,199,48,200,48,201,48,202,48,203,48,204,48,205,48,206,48,207,48,208,48,209,48,210,48,211,48,212,48,213,48,214,48,215,48,216,48,217,48,218,48,219,48,220,48,221,48,222,48,223,48,224,48,225,48,226,48,227,48,228,48,229,48,230,48,231,48,232,48,233,48,234,48,235,48,236,48,237,48,238,48,239,48,240,48,241,48,242,48,243,48,244,48,245,48,246,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154,3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,4,17,4,18,4,19,4,20,4,21,4,1,4,22,4,23,4,24,4,25,4,26,4,27,4,28,4,29,4,30,4,31,4,32,4,33,4,34,4,35,4,36,4,37,4,38,4,39,4,40,4,41,4,42,4,43,4,44,4,45,4,46,4,47,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,4,49,4,50,4,51,4,52,4,53,4,81,4,54,4,55,4,56,4,57,4,58,4,59,4,60,4,61,4,62,4,63,4,64,4,65,4,66,4,67,4,68,4,69,4,70,4,71,4,72,4,73,4,74,4,75,4,76,4,77,4,78,4,79,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,2,37,12,37,16,37,24,37,20,37,28,37,44,37,36,37,52,37,60,37,1,37,3,37,15,37,19,37,27,37,23,37,35,37,51,37,43,37,59,37,75,37,32,37,47,37,40,37,55,37,63,37,29,37,48,37,37,37,56,37,66,37],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+80012);allocate([156,78,22,85,3,90,63,150,192,84,27,97,40,99,246,89,34,144,117,132,28,131,80,122,170,96,225,99,37,110,237,101,102,132,166,130,245,155,147,104,39,87,161,101,113,98,155,91,208,89,123,134,244,152,98,125,190,125,142,155,22,98,159,124,183,136,137,91,181,94,9,99,151,102,72,104,199,149,141,151,79,103,229,78,10,79,77,79,157,79,73,80,242,86,55,89,212,89,1,90,9,92,223,96,15,97,112,97,19,102,5,105,186,112,79,117,112,117,251,121,173,125,239,125,195,128,14,132,99,136,2,139,85,144,122,144,59,83,149,78,165,78,223,87,178,128,193,144,239,120,0,78,241,88,162,110,56,144,50,122,40,131,139,130,47,156,65,81,112,83,189,84,225,84,224,86,251,89,21,95,242,152,235,109,228,128,45,133,98,150,112,150,160,150,251,151,11,84,243,83,135,91,207,112,189,127,194,143,232,150,111,83,92,157,186,122,17,78,147,120,252,129,38,110,24,86,4,85,29,107,26,133,59,156,229,89,169,83,102,109,220,116,143,149,66,86,145,78,75,144,242,150,79,131,12,153,225,83,182,85,48,91,113,95,32,102,243,102,4,104,56,108,243,108,41,109,91,116,200,118,78,122,52,152,241,130,91,136,96,138,237,146,178,109,171,117,202,118,197,153,166,96,1,139,138,141,178,149,142,105,173,83,134,81,18,87,48,88,68,89,180,91,246,94,40,96,169,99,244,99,191,108,20,111,142,112,20,113,89,113,213,113,63,115,1,126,118,130,209,130,151,133,96,144,91,146,27,157,105,88,188,101,90,108,37,117,249,81,46,89,101,89,128,95,220,95,188,98,250,101,42,106,39,107,180,107,139,115,193,127,86,137,44,157,14,157,196,158,161,92,150,108,123,131,4,81,75,92,182,97,198,129,118,104,97,114,89,78,250,79,120,83,105,96,41,110,79,122,243,151,11,78,22,83,238,78,85,79,61,79,161,79,115,79,160,82,239,83,9,86,15,89,193,90,182,91,225,91,209,121,135,102,156,103,182,103,76,107,179,108,107,112,194,115,141,121,190,121,60,122,135,123,177,130,219,130,4,131,119,131,239,131,211,131,102,135,178,138,41,86,168,140,230,143,78,144,30,151,138,134,196,79,232,92,17,98,89,114,59,117,229,129,189,130,254,134,192,140,197,150,19,153,213,153,203,78,26,79,227,137,222,86,74,88,202,88,251,94,235,95,42,96,148,96,98,96,208,97,18,98,208,98,57,101,65,155,102,102,176,104,119,109,112,112,76,117,134,118,117,125,165,130,249,135,139,149,142,150,157,140,241,81,190,82,22,89,179,84,179,91,22,93,104,97,130,105,175,109,141,120,203,132,87,136,114,138,167,147,184,154,108,109,168,153,217,134,163,87,255,103,206,134,14,146,131,82,135,86,4,84,211,94,225,98,185,100,60,104,56,104,187,107,114,115,186,120,107,122,154,137,210,137,107,141,3,143,237,144,163,149,148,150,105,151,102,91,179,92,125,105,77,152,78,152,155,99,32,123,43,106,127,106,182,104,13,156,95,111,114,82,157,85,112,96,236,98,59,109,7,110,209,110,91,132,16,137,68,143,20,78,57,156,246,83,27,105,58,106,132,151,42,104,92,81,195,122,178,132,220,145,140,147,91,86,40,157,34,104,5,131,49,132,165,124,8,82,197,130,230,116,126,78,131,79,160,81,210,91,10,82,216,82,231,82,251,93,154,85,42,88,230,89,140,91,152,91,219,91,114,94,121,94,163,96,31,97,99,97,190,97,219,99,98,101,209,103,83,104,250,104,62,107,83,107,87,108,34,111,151,111,69,111,176,116,24,117,227,118,11,119,255,122,161,123,33,124,233,125,54,127,240,127,157,128,102,130,158,131,179,137,204,138,171,140,132,144,81,148,147,149,145,149,162,149,101,150,211,151,40,153,24,130,56,78,43,84,184,92,204,93,169,115,76,118,60,119,169,92,235,127,11,141,193,150,17,152,84,152,88,152,1,79,14,79,113,83,156,85,104,86,250,87,71,89,9,91,196,91,144,92,12,94,126,94,204,95,238,99,58,103,215,101,226,101,31,103,203,104,196,104,95,106,48,94,197,107,23,108,125,108,127,117,72,121,99,91,0,122,0,125,189,95,143,137,24,138,180,140,119,141,204,142,29,143,226,152,14,154,60,155,128,78,125,80,0,81,147,89,156,91,47,98,128,98,236,100,58,107,160,114,145,117,71,121,169,127,251,135,188,138,112,139,172,99,202,131,160,151,9,84,3,84,171,85,84,104,88,106,112,138,39,120,117,103,205,158,116,83,162,91,26,129,80,134,6,144,24,78,69,78,199,78,17,79,202,83,56,84,174,91,19,95,37,96,81,101,61,103,66,108,114,108,227,108,120,112,3,116,118,122,174,122,8,123,26,125,254,124,102,125,231,101,91,114,187,83,69,92,232,93,210,98,224,98,25,99,32,110,90,134,49,138,221,141,248,146,1,111,166,121,90,155,168,78,171,78,172,78,155,79,160,79,209,80,71,81,246,122,113,81,246,81,84,83,33,83,127,83,235,83,172,85,131,88,225,92,55,95,74,95,47,96,80,96,109,96,31,99,89,101,75,106,193,108,194,114,237,114,239,119,248,128,5,129,8,130,78,133,247,144,225,147,255,151,87,153,90,154,240,78,221,81,45,92,129,102,109,105,64,92,242,102,117,105,137,115,80,104,129,124,197,80,228,82,71,87,254,93,38,147,164,101,35,107,61,107,52,116,129,121,189,121,75,123,202,125,185,130,204,131,127,136,95,137,57,139,209,143,209,145,31,84,128,146,93,78,54,80,229,83,58,83,215,114,150,115,233,119,230,130,175,142,198,153,200,153,210,153,119,81,26,97,94,134,176,85,122,122,118,80,211,91,71,144,133,150,50,78,219,106,231,145,81,92,72,92,152,99,159,122,147,108,116,151,97,143,170,122,138,113,136,150,130,124,23,104,112,126,81,104,108,147,242,82,27,84,171,133,19,138,164,127,205,142,225,144,102,83,136,136,65,121,194,79,190,80,17,82,68,81,83,85,45,87,234,115,139,87,81,89,98,95,132,95,117,96,118,97,103,97,169,97,178,99,58,100,108,101,111,102,66,104,19,110,102,117,61,122,251,124,76,125,153,125,75,126,107,127,14,131,74,131,205,134,8,138,99,138,102,139,253,142,26,152,143,157,184,130,206,143,232,155,135,82,31,98,131,100,192,111,153,150,65,104,145,80,32,107,122,108,84,111,116,122,80,125,64,136,35,138,8,103,246,78,57,80,38,80,101,80,124,81,56,82,99,82,167,85,15,87,5,88,204,90,250,94,178,97,248,97,243,98,114,99,28,105,41,106,125,114,172,114,46,115,20,120,111,120,121,125,12,119,169,128,139,137,25,139,226,140,210,142,99,144,117,147,122,150,85,152,19,154,120,158,67,81,159,83,179,83,123,94,38,95,27,110,144,110,132,115,254,115,67,125,55,130,0,138,250,138,80,150,78,78,11,80,228,83,124,84,250,86,209,89,100,91,241,93,171,94,39,95,56,98,69,101,175,103,86,110,208,114,202,124,180,136,161,128,225,128,240,131,78,134,135,138,232,141,55,146,199,150,103,152,19,159,148,78,146,78,13,79,72,83,73,84,62,84,47,90,140,95,161,95,159,96,167,104,142,106,90,116,129,120,158,138,164,138,119,139,144,145,94,78,201,155,164,78,124,79,175,79,25,80,22,80,73,81,108,81,159,82,185,82,254,82,154,83,227,83,17,84,14,84,137,85,81,87,162,87,125,89,84,91,93,91,143,91,229,93,231,93,247,93,120,94,131,94,154,94,183,94,24,95,82,96,76,97,151,98,216,98,167,99,59,101,2,102,67,102,244,102,109,103,33,104,151,104,203,105,95,108,42,109,105,109,47,110,157,110,50,117,135,118,108,120,63,122,224,124,5,125,24,125,94,125,177,125,21,128,3,128,175,128,177,128,84,129,143,129,42,130,82,131,76,136,97,136,27,139,162,140,252,140,202,144,117,145,113,146,63,120,252,146,164,149,77,150,5,152,153,153,216,154,59,157,91,82,171,82,247,83,8,84,213,88,247,98,224,111,106,140,95,143,185,158,75,81,59,82,74,84,253,86,64,122,119,145,96,157,210,158,68,115,9,111,112,129,17,117,253,95,218,96,168,154,219,114,188,143,100,107,3,152,202,78,240,86,100,87,190,88,90,90,104,96,199,97,15,102,6,102,57,104,177,104,247,109,213,117,58,125,110,130,66,155,155,78,80,79,201,83,6,85,111,93,230,93,238,93,251,103,153,108,115,116,2,120,80,138,150,147,223,136,80,87,167,94,43,99,181,80,172,80,141,81,0,103,201,84,94,88,187,89,176,91,105,95,77,98,161,99,61,104,115,107,8,110,125,112,199,145,128,114,21,120,38,120,109,121,142,101,48,125,220,131,193,136,9,143,155,150,100,82,40,87,80,103,106,127,161,140,180,81,66,87,42,150,58,88,138,105,180,128,178,84,14,93,252,87,149,120,250,157,92,79,74,82,139,84,62,100,40,102,20,103,245,103,132,122,86,123,34,125,47,147,92,104,173,155,57,123,25,83,138,81,55,82,223,91,246,98,174,100,230,100,45,103,186,107,169,133,209,150,144,118,214,155,76,99,6,147,171,155,191,118,82,102,9,78,152,80,194,83,113,92,232,96,146,100,99,101,95,104,230,113,202,115,35,117,151,123,130,126,149,134,131,139,219,140,120,145,16,153,172,101,171,102,139,107,213,78,212,78,58,79,127,79,58,82,248,83,242,83,227,85,219,86,235,88,203,89,201,89,255,89,80,91,77,92,2,94,43,94,215,95,29,96,7,99,47,101,92,91,175,101,189,101,232,101,157,103,98,107,123,107,15,108,69,115,73,121,193,121,248,124,25,125,43,125,162,128,2,129,243,129,150,137,94,138,105,138,102,138,140,138,238,138,199,140,220,140,204,150,252,152,111,107,139,78,60,79,141,79,80,81,87,91,250,91,72,97,1,99,66,102,33,107,203,110,187,108,62,114,189,116,212,117,193,120,58,121,12,128,51,128,234,129,148,132,158,143,80,108,127,158,15,95,88,139,43,157,250,122,248,142,141,91,235,150,3,78,241,83,247,87,49,89,201,90,164,91,137,96,127,110,6,111,190,117,234,140,159,91,0,133,224,123,114,80,244,103,157,130,97,92,74,133,30,126,14,130,153,81,4,92,104,99,102,141,156,101,110,113,62,121,23,125,5,128,29,139,202,142,110,144,199,134,170,144,31,80,250,82,58,92,83,103,124,112,53,114,76,145,200,145,43,147,229,130,194,91,49,95,249,96,59,78,214,83,136,91,75,98,49,103,138,107,233,114,224,115,46,122,107,129,163,141,82,145,150,153,18,81,215,83,106,84,255,91,136,99,57,106,172,125,0,151,218,86,206,83,104,84,151,91,49,92,222,93,238,79,1,97,254,98,50,109,192,121,203,121,66,125,77,126,210,127,237,129,31,130,144,132,70,136,114,137,144,139,116,142,47,143,49,144,75,145,108,145,198,150,156,145,192,78,79,79,69,81,65,83,147,95,14,98,212,103,65,108,11,110,99,115,38,126,205,145,131,146,212,83,25,89,191,91,209,109,93,121,46,126,155,124,126,88,159,113,250,81,83,136,240,143,202,79,251,92,37,102,172,119,227,122,28,130,255,153,198,81,170,95,236,101,111,105,137,107,243,109,150,110,100,111,254,118,20,125,225,93,117,144,135,145,6,152,230,81,29,82,64,98,145,102,217,102,26,110,182,94,210,125,114,127,248,102,175,133,247,133,248,138,169,82,217,83,115,89,143,94,144,95,85,96,228,146,100,150,183,80,31,81,221,82,32,83,71,83,236,83,232,84,70,85,49,85,23,86,104,89,190,89,60,90,181,91,6,92,15,92,17,92,26,92,132,94,138,94,224,94,112,95,127,98,132,98,219,98,140,99,119,99,7,102,12,102,45,102,118,102,126,103,162,104,31,106,53,106,188,108,136,109,9,110,88,110,60,113,38,113,103,113,199,117,1,119,93,120,1,121,101,121,240,121,224,122,17,123,167,124,57,125,150,128,214,131,139,132,73,133,93,136,243,136,31,138,60,138,84,138,115,138,97,140,222,140,164,145,102,146,126,147,24,148,156,150,152,151,10,78,8,78,30,78,87,78,151,81,112,82,206,87,52,88,204,88,34,91,56,94,197,96,254,100,97,103,86,103,68,109,182,114,115,117,99,122,184,132,114,139,184,145,32,147,49,86,244,87,254,152,237,98,13,105,150,107,237,113,84,126,119,128,114,130,230,137,223,152,85,135,177,143,59,92,56,79,225,79,181,79,7,85,32,90,221,91,233,91,195,95,78,97,47,99,176,101,75,102,238,104,155,105,120,109,241,109,51,117,185,117,31,119,94,121,230,121,51,125,227,129,175,130,170,133,170,137,58,138,171,142,155,143,50,144,221,145,7,151,186,78,193,78,3,82,117,88,236,88,11,92,26,117,61,92,78,129,10,138,197,143,99,150,109,151,37,123,207,138,8,152,98,145,243,86,168,83,23,144,57,84,130,87,37,94,168,99,52,108,138,112,97,119,139,124,224,127,112,136,66,144,84,145,16,147,24,147,143,150,94,116,196,154,7,93,105,93,112,101,162,103,168,141,219,150,110,99,73,103,25,105,197,131,23,152,192,150,254,136,132,111,122,100,248,91,22,78,44,112,93,117,47,102,196,81,54,82,226,82,211,89,129,95,39,96,16,98,63,101,116,101,31,102,116,102,242,104,22,104,99,107,5,110,114,114,31,117,219,118,190,124,86,128,240,88,253,136,127,137,160,138,147,138,203,138,29,144,146,145,82,151,89,151,137,101,14,122,6,129,187,150,45,94,220,96,26,98,165,101,20,102,144,103,243,119,77,122,77,124,62,126,10,129,172,140,100,141,225,141,95,142,169,120,7,82,217,98,165,99,66,100,152,98,45,138,131,122,192,123,172,138,234,150,118,125,12,130,73,135,217,78,72,81,67,83,96,83,163,91,2,92,22,92,221,93,38,98,71,98,176,100,19,104,52,104,201,108,69,109,23,109,211,103,92,111,78,113,125,113,203,101,127,122,173,123,218,125,74,126,168,127,122,129,27,130,57,130,166,133,110,138,206,140,245,141,120,144,119,144,173,146,145,146,131,149,174,155,77,82,132,85,56,111,54,113,104,81,133,121,85,126,179,129,206,124,76,86,81,88,168,92,170,99,254,102,253,102,90,105,217,114,143,117,142,117,14,121,86,121,223,121,151,124,32,125,68,125,7,134,52,138,59,150,97,144,32,159,231,80,117,82,204,83,226,83,9,80,170,85,238,88,79,89,61,114,139,91,100,92,29,83,227,96,243,96,92,99,131,99,63,99,187,99,205,100,233,101,249,102,227,93,205,105,253,105,21,111,229,113,137,78,233,117,248,118,147,122,223,124,207,125,156,125,97,128,73,131,88,131,108,132,188,132,251,133,197,136,112,141,1,144,109,144,151,147,28,151,18,154,207,80,151,88,142,97,211,129,53,133,8,141,32,144,195,79,116,80,71,82,115,83,111,96,73,99,95,103,44,110,179,141,31,144,215,79,94,92,202,140,207,101,154,125,82,83,150,136,118,81,195,99,88,91,107,91,10,92,13,100,81,103,92,144,214,78,26,89,42,89,112,108,81,138,62,85,21,88,165,89,240,96,83,98,193,103,53,130,85,105,64,150,196,153,40,154,83,79,6,88,254,91,16,128,177,92,47,94,133,95,32,96,75,97,52,98,255,102,240,108,222,110,206,128,127,129,212,130,139,136,184,140,0,144,46,144,138,150,219,158,219,155,227,78,240,83,39,89,44,123,141,145,76,152,249,157,221,110,39,112,83,83,68,85,133,91,88,98,158,98,211,98,162,108,239,111,34,116,23,138,56,148,193,111,254,138,56,131,231,81,248,134,234,83,233,83,70,79,84,144,176,143,106,89,49,129,253,93,234,122,191,143,218,104,55,140,248,114,72,156,61,106,176,138,57,78,88,83,6,86,102,87,197,98,162,99,230,101,78,107,225,109,91,110,173,112,237,119,239,122,170,123,187,125,61,128,198,128,203,134,149,138,91,147,227,86,199,88,62,95,173,101,150,102,128,106,181,107,55,117,199,138,36,80,229,119,48,87,27,95,101,96,122,102,96,108,244,117,26,122,110,127,244,129,24,135,69,144,179,153,201,123,92,117,249,122,81,123,196,132,16,144,233,121,146,122,54,131,225,90,64,119,45,78,242,78,153,91,224,95,189,98,60,102,241,103,232,108,107,134,119,136,59,138,78,145,243,146,208,153,23,106,38,112,42,115,231,130,87,132,175,140,1,78,70,81,203,81,139,85,245,91,22,94,51,94,129,94,20,95,53,95,107,95,180,95,242,97,17,99,162,102,29,103,110,111,82,114,58,117,58,119,116,128,57,129,120,129,118,135,191,138,220,138,133,141,243,141,154,146,119,149,2,152,229,156,197,82,87,99,244,118,21,103,136,108,205,115,195,140,174,147,115,150,37,109,156,88,14,105,204,105,253,143,154,147,219,117,26,144,90,88,2,104,180,99,251,105,67,79,44,111,216,103,187,143,38,133,180,125,84,147,63,105,112,111,106,87,247,88,44,91,44,125,42,114,10,84,227,145,180,157,173,78,78,79,92,80,117,80,67,82,158,140,72,84,36,88,154,91,29,94,149,94,173,94,247,94,31,95,140,96,181,98,58,99,208,99,175,104,64,108,135,120,142,121,11,122,224,125,71,130,2,138,230,138,68,142,19,144,184,144,45,145,216,145,14,159,229,108,88,100,226,100,117,101,244,110,132,118,27,123,105,144,209,147,186,110,242,84,185,95,164,100,77,143,237,143,68,146,120,81,107,88,41,89,85,92,151,94,251,109,143,126,28,117,188,140,226,142,91,152,185,112,29,79,191,107,177,111,48,117,251,150,78,81,16,84,53,88,87,88,172,89,96,92,146,95,151,101,92,103,33,110,123,118,223,131,237,140,20,144,253,144,77,147,37,120,58,120,170,82,166,94,31,87,116,89,18,96,18,80,90,81,172,81,205,81,0,82,16,85,84,88,88,88,87,89,149,91,246,92,139,93,188,96,149,98,45,100,113,103,67,104,188,104,223,104,215,118,216,109,111,110,155,109,111,112,200,113,83,95,216,117,119,121,73,123,84,123,82,123,214,124,113,125,48,82,99,132,105,133,228,133,14,138,4,139,70,140,15,142,3,144,15,144,25,148,118,150,45,152,48,154,216,149,205,80,213,82,12,84,2,88,14,92,167,97,158,100,30,109,179,119,229,122,244,128,4,132,83,144,133,146,224,92,7,157,63,83,151,95,179,95,156,109,121,114,99,119,191,121,228,123,210,107,236,114,173,138,3,104,97,106,248,81,129,122,52,105,74,92,246,156,235,130,197,91,73,145,30,112,120,86,111,92,199,96,102,101,140,108,90,140,65,144,19,152,81,84,199,102,13,146,72,89,163,144,133,81,77,78,234,81,153,133,14,139,88,112,122,99,75,147,98,105,180,153,4,126,119,117,87,83,96,105,223,142,227,150,93,108,140,78,60,92,16,95,233,143,2,83,209,140,137,128,121,134,255,94,229,101,115,78,101,81,130,89,63,92,238,151,251,78,138,89,205,95,141,138,225,111,176,121,98,121,231,91,113,132,43,115,177,113,116,94,245,95,123,99,154,100,195,113,152,124,67,78,252,94,75,78,220,87,162,86,169,96,195,111,13,125,253,128,51,129,191,129,178,143,151,137,164,134,244,93,138,98,173,100,135,137,119,103,226,108,62,109,54,116,52,120,70,90,117,127,173,130,172,153,243,79,195,94,221,98,146,99,87,101,111,103,195,118,76,114,204,128,186,128,41,143,77,145,13,80,249,87,146,90,133,104,115,105,100,113,253,114,183,140,242,88,224,140,106,150,25,144,127,135,228,121,231,119,41,132,47,79,101,82,90,83,205,98,207,103,202,108,125,118,148,123,149,124,54,130,132,133,235,143,221,102,32,111,6,114,27,126,171,131,193,153,166,158,253,81,177,123,114,120,184,123,135,128,72,123,232,106,97,94,140,128,81,117,96,117,107,81,98,146,140,110,122,118,151,145,234,154,16,79,112,127,156,98,79,123,165,149,233,156,122,86,89,88,228,134,188,150,52,79,36,82,74,83,205,83,219,83,6,94,44,100,145,101,127,103,62,108,78,108,72,114,175,114,237,115,84,117,65,126,44,130,233,133,169,140,196,123,198,145,105,113,18,152,239,152,61,99,105,102,106,117,228,118,208,120,67,133,238,134,42,83,81,83,38,84,131,89,135,94,124,95,178,96,73,98,121,98,171,98,144,101,212,107,204,108,178,117,174,118,145,120,216,121,203,125,119,127,165,128,171,136,185,138,187,140,127,144,94,151,219,152,11,106,56,124,153,80,62,92,174,95,135,103,216,107,53,116,9,119,142,127,59,159,202,103,23,122,57,83,139,117,237,154,102,95,157,129,241,131,152,128,60,95,197,95,98,117,70,123,60,144,103,104,235,89,155,90,16,125,126,118,44,139,245,79,106,95,25,106,55,108,2,111,226,116,104,121,104,136,85,138,121,140,223,94,207,99,197,117,210,121,215,130,40,147,242,146,156,132,237,134,45,156,193,84,108,95,140,101,92,109,21,112,167,140,211,140,59,152,79,101,246,116,13,78,216,78,224,87,43,89,102,90,204,91,168,81,3,94,156,94,22,96,118,98,119,101,167,101,110,102,110,109,54,114,38,123,80,129,154,129,153,130,92,139,160,140,230,140,116,141,28,150,68,150,174,79,171,100,102,107,30,130,97,132,106,133,232,144,1,92,83,105,168,152,122,132,87,133,15,79,111,82,169,95,69,94,13,103,143,121,121,129,7,137,134,137,245,109,23,95,85,98,184,108,207,78,105,114,146,155,6,82,59,84,116,86,179,88,164,97,110,98,26,113,110,89,137,124,222,124,27,125,240,150,135,101,94,128,25,78,117,79,117,81,64,88,99,94,115,94,10,95,196,103,38,78,61,133,137,149,91,150,115,124,1,152,251,80,193,88,86,118,167,120,37,82,165,119,17,133,134,123,79,80,9,89,71,114,199,123,232,125,186,143,212,143,77,144,191,79,201,82,41,90,1,95,173,151,221,79,23,130,234,146,3,87,85,99,105,107,43,117,220,136,20,143,66,122,223,82,147,88,85,97,10,98,174,102,205,107,63,124,233,131,35,80,248,79,5,83,70,84,49,88,73,89,157,91,240,92,239,92,41,93,150,94,177,98,103,99,62,101,185,101,11,103,213,108,225,108,249,112,50,120,43,126,222,128,179,130,12,132,236,132,2,135,18,137,42,138,74,140,166,144,210,146,253,152,243,156,108,157,79,78,161,78,141,80,86,82,74,87,168,89,61,94,216,95,217,95,63,98,180,102,27,103,208,103,210,104,146,81,33,125,170,128,168,129,0,139,140,140,191,140,126,146,50,150,32,84,44,152,23,83,213,80,92,83,168,88,178,100,52,103,103,114,102,119,70,122,230,145,195,82,161,108,134,107,0,88,76,94,84,89,44,103,251,127,225,81,198,118,105,100,232,120,84,155,187,158,203,87,185,89,39,102,154,103,206,107,233,84,217,105,85,94,156,129,149,103,170,155,254,103,82,156,93,104,166,78,227,79,200,83,185,98,43,103,171,108,196,143,173,79,109,126,191,158,7,78,98,97,128,110,43,111,19,133,115,84,42,103,69,155,243,93,149,123,172,92,198,91,28,135,74,110,209,132,20,122,8,129,153,89,141,124,17,108,32,119,217,82,34,89,33,113,95,114,219,119,39,151,97,157,11,105,127,90,24,90,165,81,13,84,125,84,14,102,223,118,247,143,152,146,244,156,234,89,93,114,197,110,77,81,201,104,191,125,236,125,98,151,186,158,120,100,33,106,2,131,132,89,95,91,219,107,27,115,242,118,178,125,23,128,153,132,50,81,40,103,217,158,238,118,98,103,255,82,5,153,36,92,59,98,126,124,176,140,79,85,182,96,11,125,128,149,1,83,95,78,182,81,28,89,58,114,54,128,206,145,37,95,226,119,132,83,121,95,4,125,172,133,51,138,141,142,86,151,243,103,174,133,83,148,9,97,8,97,185,108,82,118,237,138,56,143,47,85,81,79,42,81,199,82,203,83,165,91,125,94,160,96,130,97,214,99,9,103,218,103,103,110,140,109,54,115,55,115,49,117,80,121,213,136,152,138,74,144,145,144,245,144,196,150,141,135,21,89,136,78,89,79,14,78,137,138,63,143,16,152,173,80,124,94,150,89,185,91,184,94,218,99,250,99,193,100,220,102,74,105,216,105,11,109,182,110,148,113,40,117,175,122,138,127,0,128,73,132,201,132,129,137,33,139,10,142,101,144,125,150,10,153,126,97,145,98,50,107,131,108,116,109,204,127,252,127,192,109,133,127,186,135,248,136,101,103,177,131,60,152,247,150,27,109,97,125,61,132,106,145,113,78,117,83,80,93,4,107,235,111,205,133,45,134,167,137,41,82,15,84,101,92,78,103,168,104,6,116,131,116,226,117,207,136,225,136,204,145,226,150,120,150,139,95,135,115,203,122,78,132,160,99,101,117,137,82,65,109,156,110,9,116,89,117,107,120,146,124,134,150,220,122,141,159,182,79,110,97,197,101,92,134,134,78,174,78,218,80,33,78,204,81,238,91,153,101,129,104,188,109,31,115,66,118,173,119,28,122,231,124,111,130,210,138,124,144,207,145,117,150,24,152,155,82,209,125,43,80,152,83,151,103,203,109,208,113,51,116,232,129,42,143,163,150,87,156,159,158,96,116,65,88,153,109,47,125,94,152,228,78,54,79,139,79,183,81,177,82,186,93,28,96,178,115,60,121,211,130,52,146,183,150,246,150,10,151,151,158,98,159,166,102,116,107,23,82,163,82,200,112,194,136,201,94,75,96,144,97,35,111,73,113,62,124,244,125,111,128,238,132,35,144,44,147,66,84,111,155,211,106,137,112,194,140,239,141,50,151,180,82,65,90,202,94,4,95,23,103,124,105,148,105,106,109,15,111,98,114,252,114,237,123,1,128,126,128,75,135,206,144,109,81,147,158,132,121,139,128,50,147,214,138,45,80,140,84,113,138,106,107,196,140,7,129,209,96,160,103,242,157,153,78,152,78,16,156,107,138,193,133,104,133,0,105,126,110,151,120,85,129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,95,16,78,21,78,42,78,49,78,54,78,60,78,63,78,66,78,86,78,88,78,130,78,133,78,107,140,138,78,18,130,13,95,142,78,158,78,159,78,160,78,162,78,176,78,179,78,182,78,206,78,205,78,196,78,198,78,194,78,215,78,222,78,237,78,223,78,247,78,9,79,90,79,48,79,91,79,93,79,87,79,71,79,118,79,136,79,143,79,152,79,123,79,105,79,112,79,145,79,111,79,134,79,150,79,24,81,212,79,223,79,206,79,216,79,219,79,209,79,218,79,208,79,228,79,229,79,26,80,40,80,20,80,42,80,37,80,5,80,28,79,246,79,33,80,41,80,44,80,254,79,239,79,17,80,6,80,67,80,71,80,3,103,85,80,80,80,72,80,90,80,86,80,108,80,120,80,128,80,154,80,133,80,180,80,178,80,201,80,202,80,179,80,194,80,214,80,222,80,229,80,237,80,227,80,238,80,249,80,245,80,9,81,1,81,2,81,22,81,21,81,20,81,26,81,33,81,58,81,55,81,60,81,59,81,63,81,64,81,82,81,76,81,84,81,98,81,248,122,105,81,106,81,110,81,128,81,130,81,216,86,140,81,137,81,143,81,145,81,147,81,149,81,150,81,164,81,166,81,162,81,169,81,170,81,171,81,179,81,177,81,178,81,176,81,181,81,189,81,197,81,201,81,219,81,224,81,85,134,233,81,237,81,240,81,245,81,254,81,4,82,11,82,20,82,14,82,39,82,42,82,46,82,51,82,57,82,79,82,68,82,75,82,76,82,94,82,84,82,106,82,116,82,105,82,115,82,127,82,125,82,141,82,148,82,146,82,113,82,136,82,145,82,168,143,167,143,172,82,173,82,188,82,181,82,193,82,205,82,215,82,222,82,227,82,230,82,237,152,224,82,243,82,245,82,248,82,249,82,6,83,8,83,56,117,13,83,16,83,15,83,21,83,26,83,35,83,47,83,49,83,51,83,56,83,64,83,70,83,69,83,23,78,73,83,77,83,214,81,94,83,105,83,110,83,24,89,123,83,119,83,130,83,150,83,160,83,166,83,165,83,174,83,176,83,182,83,195,83,18,124,217,150,223,83,252,102,238,113,238,83,232,83,237,83,250,83,1,84,61,84,64,84,44,84,45,84,60,84,46,84,54,84,41,84,29,84,78,84,143,84,117,84,142,84,95,84,113,84,119,84,112,84,146,84,123,84,128,84,118,84,132,84,144,84,134,84,199,84,162,84,184,84,165,84,172,84,196,84,200,84,168,84,171,84,194,84,164,84,190,84,188,84,216,84,229,84,230,84,15,85,20,85,253,84,238,84,237,84,250,84,226,84,57,85,64,85,99,85,76,85,46,85,92,85,69,85,86,85,87,85,56,85,51,85,93,85,153,85,128,85,175,84,138,85,159,85,123,85,126,85,152,85,158,85,174,85,124,85,131,85,169,85,135,85,168,85,218,85,197,85,223,85,196,85,220,85,228,85,212,85,20,86,247,85,22,86,254,85,253,85,27,86,249,85,78,86,80,86,223,113,52,86,54,86,50,86,56,86,107,86,100,86,47,86,108,86,106,86,134,86,128,86,138,86,160,86,148,86,143,86,165,86,174,86,182,86,180,86,194,86,188,86,193,86,195,86,192,86,200,86,206,86,209,86,211,86,215,86,238,86,249,86,0,87,255,86,4,87,9,87,8,87,11,87,13,87,19,87,24,87,22,87,199,85,28,87,38,87,55,87,56,87,78,87,59,87,64,87,79,87,105,87,192,87,136,87,97,87,127,87,137,87,147,87,160,87,179,87,164,87,170,87,176,87,195,87,198,87,212,87,210,87,211,87,10,88,214,87,227,87,11,88,25,88,29,88,114,88,33,88,98,88,75,88,112,88,192,107,82,88,61,88,121,88,133,88,185,88,159,88,171,88,186,88,222,88,187,88,184,88,174,88,197,88,211,88,209,88,215,88,217,88,216,88,229,88,220,88,228,88,223,88,239,88,250,88,249,88,251,88,252,88,253,88,2,89,10,89,16,89,27,89,166,104,37,89,44,89,45,89,50,89,56,89,62,89,210,122,85,89,80,89,78,89,90,89,88,89,98,89,96,89,103,89,108,89,105,89,120,89,129,89,157,89,94,79,171,79,163,89,178,89,198,89,232,89,220,89,141,89,217,89,218,89,37,90,31,90,17,90,28,90,9,90,26,90,64,90,108,90,73,90,53,90,54,90,98,90,106,90,154,90,188,90,190,90,203,90,194,90,189,90,227,90,215,90,230,90,233,90,214,90,250,90,251,90,12,91,11,91,22,91,50,91,208,90,42,91,54,91,62,91,67,91,69,91,64,91,81,91,85,91,90,91,91,91,101,91,105,91,112,91,115,91,117,91,120,91,136,101,122,91,128,91,131,91,166,91,184,91,195,91,199,91,201,91,212,91,208,91,228,91,230,91,226,91,222,91,229,91,235,91,240,91,246,91,243,91,5,92,7,92,8,92,13,92,19,92,32,92,34,92,40,92,56,92,57,92,65,92,70,92,78,92,83,92,80,92,79,92,113,91,108,92,110,92,98,78,118,92,121,92,140,92,145,92,148,92,155,89,171,92,187,92,182,92,188,92,183,92,197,92,190,92,199,92,217,92,233,92,253,92,250,92,237,92,140,93,234,92,11,93,21,93,23,93,92,93,31,93,27,93,17,93,20,93,34,93,26,93,25,93,24,93,76,93,82,93,78,93,75,93,108,93,115,93,118,93,135,93,132,93,130,93,162,93,157,93,172,93,174,93,189,93,144,93,183,93,188,93,201,93,205,93,211,93,210,93,214,93,219,93,235,93,242,93,245,93,11,94,26,94,25,94,17,94,27,94,54,94,55,94,68,94,67,94,64,94,78,94,87,94,84,94,95,94,98,94,100,94,71,94,117,94,118,94,122,94,188,158,127,94,160,94,193,94,194,94,200,94,208,94,207,94,214,94,227,94,221,94,218,94,219,94,226,94,225,94,232,94,233,94,236,94,241,94,243,94,240,94,244,94,248,94,254,94,3,95,9,95,93,95,92,95,11,95,17,95,22,95,41,95,45,95,56,95,65,95,72,95,76,95,78,95,47,95,81,95,86,95,87,95,89,95,97,95,109,95,115,95,119,95,131,95,130,95,127,95,138,95,136,95,145,95,135,95,158,95,153,95,152,95,160,95,168,95,173,95,188,95,214,95,251,95,228,95,248,95,241,95,221,95,179,96,255,95,33,96,96,96,25,96,16,96,41,96,14,96,49,96,27,96,21,96,43,96,38,96,15,96,58,96,90,96,65,96,106,96,119,96,95,96,74,96,70,96,77,96,99,96,67,96,100,96,66,96,108,96,107,96,89,96,129,96,141,96,231,96,131,96,154,96,132,96,155,96,150,96,151,96,146,96,167,96,139,96,225,96,184,96,224,96,211,96,180,96,240,95,189,96,198,96,181,96,216,96,77,97,21,97,6,97,246,96,247,96,0,97,244,96,250,96,3,97,33,97,251,96,241,96,13,97,14,97,71,97,62,97,40,97,39,97,74,97,63,97,60,97,44,97,52,97,61,97,66,97,68,97,115,97,119,97,88,97,89,97,90,97,107,97,116,97,111,97,101,97,113,97,95,97,93,97,83,97,117,97,153,97,150,97,135,97,172,97,148,97,154,97,138,97,145,97,171,97,174,97,204,97,202,97,201,97,247,97,200,97,195,97,198,97,186,97,203,97,121,127,205,97,230,97,227,97,246,97,250,97,244,97,255,97,253,97,252,97,254,97,0,98,8,98,9,98,13,98,12,98,20,98,27,98,30,98,33,98,42,98,46,98,48,98,50,98,51,98,65,98,78,98,94,98,99,98,91,98,96,98,104,98,124,98,130,98,137,98,126,98,146,98,147,98,150,98,212,98,131,98,148,98,215,98,209,98,187,98,207,98,255,98,198,98,212,100,200,98,220,98,204,98,202,98,194,98,199,98,155,98,201,98,12,99,238,98,241,98,39,99,2,99,8,99,239,98,245,98,80,99,62,99,77,99,28,100,79,99,150,99,142,99,128,99,171,99,118,99,163,99,143,99,137,99,159,99,181,99,107,99,105,99,190,99,233,99,192,99,198,99,227,99,201,99,210,99,246,99,196,99,22,100,52,100,6,100,19,100,38,100,54,100,29,101,23,100,40,100,15,100,103,100,111,100,118,100,78,100,42,101,149,100,147,100,165,100,169,100,136,100,188,100,218,100,210,100,197,100,199,100,187,100,216,100,194,100,241,100,231,100,9,130,224,100,225,100,172,98,227,100,239,100,44,101,246,100,244,100,242,100,250,100,0,101,253,100,24,101,28,101,5,101,36,101,35,101,43,101,52,101,53,101,55,101,54,101,56,101,75,117,72,101,86,101,85,101,77,101,88,101,94,101,93,101,114,101,120,101,130,101,131,101,138,139,155,101,159,101,171,101,183,101,195,101,198,101,193,101,196,101,204,101,210,101,219,101,217,101,224,101,225,101,241,101,114,103,10,102,3,102,251,101,115,103,53,102,54,102,52,102,28,102,79,102,68,102,73,102,65,102,94,102,93,102,100,102,103,102,104,102,95,102,98,102,112,102,131,102,136,102,142,102,137,102,132,102,152,102,157,102,193,102,185,102,201,102,190,102,188,102,196,102,184,102,214,102,218,102,224,102,63,102,230,102,233,102,240,102,245,102,247,102,15,103,22,103,30,103,38,103,39,103,56,151,46,103,63,103,54,103,65,103,56,103,55,103,70,103,94,103,96,103,89,103,99,103,100,103,137,103,112,103,169,103,124,103,106,103,140,103,139,103,166,103,161,103,133,103,183,103,239,103,180,103,236,103,179,103,233,103,184,103,228,103,222,103,221,103,226,103,238,103,185,103,206,103,198,103,231,103,156,106,30,104,70,104,41,104,64,104,77,104,50,104,78,104,179,104,43,104,89,104,99,104,119,104,127,104,159,104,143,104,173,104,148,104,157,104,155,104,131,104,174,106,185,104,116,104,181,104,160,104,186,104,15,105,141,104,126,104,1,105,202,104,8,105,216,104,34,105,38,105,225,104,12,105,205,104,212,104,231,104,213,104,54,105,18,105,4,105,215,104,227,104,37,105,249,104,224,104,239,104,40,105,42,105,26,105,35,105,33,105,198,104,121,105,119,105,92,105,120,105,107,105,84,105,126,105,110,105,57,105,116,105,61,105,89,105,48,105,97,105,94,105,93,105,129,105,106,105,178,105,174,105,208,105,191,105,193,105,211,105,190,105,206,105,232,91,202,105,221,105,187,105,195,105,167,105,46,106,145,105,160,105,156,105,149,105,180,105,222,105,232,105,2,106,27,106,255,105,10,107,249,105,242,105,231,105,5,106,177,105,30,106,237,105,20,106,235,105,10,106,18,106,193,106,35,106,19,106,68,106,12,106,114,106,54,106,120,106,71,106,98,106,89,106,102,106,72,106,56,106,34,106,144,106,141,106,160,106,132,106,162,106,163,106,151,106,23,134,187,106,195,106,194,106,184,106,179,106,172,106,222,106,209,106,223,106,170,106,218,106,234,106,251,106,5,107,22,134,250,106,18,107,22,107,49,155,31,107,56,107,55,107,220,118,57,107,238,152,71,107,67,107,73,107,80,107,89,107,84,107,91,107,95,107,97,107,120,107,121,107,127,107,128,107,132,107,131,107,141,107,152,107,149,107,158,107,164,107,170,107,171,107,175,107,178,107,177,107,179,107,183,107,188,107,198,107,203,107,211,107,223,107,236,107,235,107,243,107,239,107,190,158,8,108,19,108,20,108,27,108,36,108,35,108,94,108,85,108,98,108,106,108,130,108,141,108,154,108,129,108,155,108,126,108,104,108,115,108,146,108,144,108,196,108,241,108,211,108,189,108,215,108,197,108,221,108,174,108,177,108,190,108,186,108,219,108,239,108,217,108,234,108,31,109,77,136,54,109,43,109,61,109,56,109,25,109,53,109,51,109,18,109,12,109,99,109,147,109,100,109,90,109,121,109,89,109,142,109,149,109,228,111,133,109,249,109,21,110,10,110,181,109,199,109,230,109,184,109,198,109,236,109,222,109,204,109,232,109,210,109,197,109,250,109,217,109,228,109,213,109,234,109,238,109,45,110,110,110,46,110,25,110,114,110,95,110,62,110,35,110,107,110,43,110,118,110,77,110,31,110,67,110,58,110,78,110,36,110,255,110,29,110,56,110,130,110,170,110,152,110,201,110,183,110,211,110,189,110,175,110,196,110,178,110,212,110,213,110,143,110,165,110,194,110,159,110,65,111,17,111,76,112,236,110,248,110,254,110,63,111,242,110,49,111,239,110,50,111,204,110,62,111,19,111,247,110,134,111,122,111,120,111,129,111,128,111,111,111,91,111,243,111,109,111,130,111,124,111,88,111,142,111,145,111,194,111,102,111,179,111,163,111,161,111,164,111,185,111,198,111,170,111,223,111,213,111,236,111,212,111,216,111,241,111,238,111,219,111,9,112,11,112,250,111,17,112,1,112,15,112,254,111,27,112,26,112,116,111,29,112,24,112,31,112,48,112,62,112,50,112,81,112,99,112,153,112,146,112,175,112,241,112,172,112,184,112,179,112,174,112,223,112,203,112,221,112,217,112,9,113,253,112,28,113,25,113,101,113,85,113,136,113,102,113,98,113,76,113,86,113,108,113,143,113,251,113,132,113,149,113,168,113,172,113,215,113,185,113,190,113,210,113,201,113,212,113,206,113,224,113,236,113,231,113,245,113,252,113,249,113,255,113,13,114,16,114,27,114,40,114,45,114,44,114,48,114,50,114,59,114,60,114,63,114,64,114,70,114,75,114,88,114,116,114,126,114,130,114,129,114,135,114,146,114,150,114,162,114,167,114,185,114,178,114,195,114,198,114,196,114,206,114,210,114,226,114,224,114,225,114,249,114,247,114,15,80,23,115,10,115,28,115,22,115,29,115,52,115,47,115,41,115,37,115,62,115,78,115,79,115,216,158,87,115,106,115,104,115,112,115,120,115,117,115,123,115,122,115,200,115,179,115,206,115,187,115,192,115,229,115,238,115,222,115,162,116,5,116,111,116,37,116,248,115,50,116,58,116,85,116,63,116,95,116,89,116,65,116,92,116,105,116,112,116,99,116,106,116,118,116,126,116,139,116,158,116,167,116,202,116,207,116,212,116,241,115,224,116,227,116,231,116,233,116,238,116,242,116,240,116,241,116,248,116,247,116,4,117,3,117,5,117,12,117,14,117,13,117,21,117,19,117,30,117,38,117,44,117,60,117,68,117,77,117,74,117,73,117,91,117,70,117,90,117,105,117,100,117,103,117,107,117,109,117,120,117,118,117,134,117,135,117,116,117,138,117,137,117,130,117,148,117,154,117,157,117,165,117,163,117,194,117,179,117,195,117,181,117,189,117,184,117,188,117,177,117,205,117,202,117,210,117,217,117,227,117,222,117,254,117,255,117,252,117,1,118,240,117,250,117,242,117,243,117,11,118,13,118,9,118,31,118,39,118,32,118,33,118,34,118,36,118,52,118,48,118,59,118,71,118,72,118,70,118,92,118,88,118,97,118,98,118,104,118,105,118,106,118,103,118,108,118,112,118,114,118,118,118,120,118,124,118,128,118,131,118,136,118,139,118,142,118,150,118,147,118,153,118,154,118,176,118,180,118,184,118,185,118,186,118,194,118,205,118,214,118,210,118,222,118,225,118,229,118,231,118,234,118,47,134,251,118,8,119,7,119,4,119,41,119,36,119,30,119,37,119,38,119,27,119,55,119,56,119,71,119,90,119,104,119,107,119,91,119,101,119,127,119,126,119,121,119,142,119,139,119,145,119,160,119,158,119,176,119,182,119,185,119,191,119,188,119,189,119,187,119,199,119,205,119,215,119,218,119,220,119,227,119,238,119,252,119,12,120,18,120,38,121,32,120,42,121,69,120,142,120,116,120,134,120,124,120,154,120,140,120,163,120,181,120,170,120,175,120,209,120,198,120,203,120,212,120,190,120,188,120,197,120,202,120,236,120,231,120,218,120,253,120,244,120,7,121,18,121,17,121,25,121,44,121,43,121,64,121,96,121,87,121,95,121,90,121,85,121,83,121,122,121,127,121,138,121,157,121,167,121,75,159,170,121,174,121,179,121,185,121,186,121,201,121,213,121,231,121,236,121,225,121,227,121,8,122,13,122,24,122,25,122,32,122,31,122,128,121,49,122,59,122,62,122,55,122,67,122,87,122,73,122,97,122,98,122,105,122,157,159,112,122,121,122,125,122,136,122,151,122,149,122,152,122,150,122,169,122,200,122,176,122,182,122,197,122,196,122,191,122,131,144,199,122,202,122,205,122,207,122,213,122,211,122,217,122,218,122,221,122,225,122,226,122,230,122,237,122,240,122,2,123,15,123,10,123,6,123,51,123,24,123,25,123,30,123,53,123,40,123,54,123,80,123,122,123,4,123,77,123,11,123,76,123,69,123,117,123,101,123,116,123,103,123,112,123,113,123,108,123,110,123,157,123,152,123,159,123,141,123,156,123,154,123,139,123,146,123,143,123,93,123,153,123,203,123,193,123,204,123,207,123,180,123,198,123,221,123,233,123,17,124,20,124,230,123,229,123,96,124,0,124,7,124,19,124,243,123,247,123,23,124,13,124,246,123,35,124,39,124,42,124,31,124,55,124,43,124,61,124,76,124,67,124,84,124,79,124,64,124,80,124,88,124,95,124,100,124,86,124,101,124,108,124,117,124,131,124,144,124,164,124,173,124,162,124,171,124,161,124,168,124,179,124,178,124,177,124,174,124,185,124,189,124,192,124,197,124,194,124,216,124,210,124,220,124,226,124,59,155,239,124,242,124,244,124,246,124,250,124,6,125,2,125,28,125,21,125,10,125,69,125,75,125,46,125,50,125,63,125,53,125,70,125,115,125,86,125,78,125,114,125,104,125,110,125,79,125,99,125,147,125,137,125,91,125,143,125,125,125,155,125,186,125,174,125,163,125,181,125,199,125,189,125,171,125,61,126,162,125,175,125,220,125,184,125,159,125,176,125,216,125,221,125,228,125,222,125,251,125,242,125,225,125,5,126,10,126,35,126,33,126,18,126,49,126,31,126,9,126,11,126,34,126,70,126,102,126,59,126,53,126,57,126,67,126,55,126,50,126,58,126,103,126,93,126,86,126,94,126,89,126,90,126,121,126,106,126,105,126,124,126,123,126,131,126,213,125,125,126,174,143,127,126,136,126,137,126,140,126,146,126,144,126,147,126,148,126,150,126,142,126,155,126,156,126,56,127,58,127,69,127,76,127,77,127,78,127,80,127,81,127,85,127,84,127,88,127,95,127,96,127,104,127,105,127,103,127,120,127,130,127,134,127,131,127,136,127,135,127,140,127,148,127,158,127,157,127,154,127,163,127,175,127,178,127,185,127,174,127,182,127,184,127,113,139,197,127,198,127,202,127,213,127,212,127,225,127,230,127,233,127,243,127,249,127,220,152],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+83018);allocate([6,128,4,128,11,128,18,128,24,128,25,128,28,128,33,128,40,128,63,128,59,128,74,128,70,128,82,128,88,128,90,128,95,128,98,128,104,128,115,128,114,128,112,128,118,128,121,128,125,128,127,128,132,128,134,128,133,128,155,128,147,128,154,128,173,128,144,81,172,128,219,128,229,128,217,128,221,128,196,128,218,128,214,128,9,129,239,128,241,128,27,129,41,129,35,129,47,129,75,129,139,150,70,129,62,129,83,129,81,129,252,128,113,129,110,129,101,129,102,129,116,129,131,129,136,129,138,129,128,129,130,129,160,129,149,129,164,129,163,129,95,129,147,129,169,129,176,129,181,129,190,129,184,129,189,129,192,129,194,129,186,129,201,129,205,129,209,129,217,129,216,129,200,129,218,129,223,129,224,129,231,129,250,129,251,129,254,129,1,130,2,130,5,130,7,130,10,130,13,130,16,130,22,130,41,130,43,130,56,130,51,130,64,130,89,130,88,130,93,130,90,130,95,130,100,130,98,130,104,130,106,130,107,130,46,130,113,130,119,130,120,130,126,130,141,130,146,130,171,130,159,130,187,130,172,130,225,130,227,130,223,130,210,130,244,130,243,130,250,130,147,131,3,131,251,130,249,130,222,130,6,131,220,130,9,131,217,130,53,131,52,131,22,131,50,131,49,131,64,131,57,131,80,131,69,131,47,131,43,131,23,131,24,131,133,131,154,131,170,131,159,131,162,131,150,131,35,131,142,131,135,131,138,131,124,131,181,131,115,131,117,131,160,131,137,131,168,131,244,131,19,132,235,131,206,131,253,131,3,132,216,131,11,132,193,131,247,131,7,132,224,131,242,131,13,132,34,132,32,132,189,131,56,132,6,133,251,131,109,132,42,132,60,132,90,133,132,132,119,132,107,132,173,132,110,132,130,132,105,132,70,132,44,132,111,132,121,132,53,132,202,132,98,132,185,132,191,132,159,132,217,132,205,132,187,132,218,132,208,132,193,132,198,132,214,132,161,132,33,133,255,132,244,132,23,133,24,133,44,133,31,133,21,133,20,133,252,132,64,133,99,133,88,133,72,133,65,133,2,134,75,133,85,133,128,133,164,133,136,133,145,133,138,133,168,133,109,133,148,133,155,133,234,133,135,133,156,133,119,133,126,133,144,133,201,133,186,133,207,133,185,133,208,133,213,133,221,133,229,133,220,133,249,133,10,134,19,134,11,134,254,133,250,133,6,134,34,134,26,134,48,134,63,134,77,134,85,78,84,134,95,134,103,134,113,134,147,134,163,134,169,134,170,134,139,134,140,134,182,134,175,134,196,134,198,134,176,134,201,134,35,136,171,134,212,134,222,134,233,134,236,134,223,134,219,134,239,134,18,135,6,135,8,135,0,135,3,135,251,134,17,135,9,135,13,135,249,134,10,135,52,135,63,135,55,135,59,135,37,135,41,135,26,135,96,135,95,135,120,135,76,135,78,135,116,135,87,135,104,135,110,135,89,135,83,135,99,135,106,135,5,136,162,135,159,135,130,135,175,135,203,135,189,135,192,135,208,135,214,150,171,135,196,135,179,135,199,135,198,135,187,135,239,135,242,135,224,135,15,136,13,136,254,135,246,135,247,135,14,136,210,135,17,136,22,136,21,136,34,136,33,136,49,136,54,136,57,136,39,136,59,136,68,136,66,136,82,136,89,136,94,136,98,136,107,136,129,136,126,136,158,136,117,136,125,136,181,136,114,136,130,136,151,136,146,136,174,136,153,136,162,136,141,136,164,136,176,136,191,136,177,136,195,136,196,136,212,136,216,136,217,136,221,136,249,136,2,137,252,136,244,136,232,136,242,136,4,137,12,137,10,137,19,137,67,137,30,137,37,137,42,137,43,137,65,137,68,137,59,137,54,137,56,137,76,137,29,137,96,137,94,137,102,137,100,137,109,137,106,137,111,137,116,137,119,137,126,137,131,137,136,137,138,137,147,137,152,137,161,137,169,137,166,137,172,137,175,137,178,137,186,137,189,137,191,137,192,137,218,137,220,137,221,137,231,137,244,137,248,137,3,138,22,138,16,138,12,138,27,138,29,138,37,138,54,138,65,138,91,138,82,138,70,138,72,138,124,138,109,138,108,138,98,138,133,138,130,138,132,138,168,138,161,138,145,138,165,138,166,138,154,138,163,138,196,138,205,138,194,138,218,138,235,138,243,138,231,138,228,138,241,138,20,139,224,138,226,138,247,138,222,138,219,138,12,139,7,139,26,139,225,138,22,139,16,139,23,139,32,139,51,139,171,151,38,139,43,139,62,139,40,139,65,139,76,139,79,139,78,139,73,139,86,139,91,139,90,139,107,139,95,139,108,139,111,139,116,139,125,139,128,139,140,139,142,139,146,139,147,139,150,139,153,139,154,139,58,140,65,140,63,140,72,140,76,140,78,140,80,140,85,140,98,140,108,140,120,140,122,140,130,140,137,140,133,140,138,140,141,140,142,140,148,140,124,140,152,140,29,98,173,140,170,140,189,140,178,140,179,140,174,140,182,140,200,140,193,140,228,140,227,140,218,140,253,140,250,140,251,140,4,141,5,141,10,141,7,141,15,141,13,141,16,141,78,159,19,141,205,140,20,141,22,141,103,141,109,141,113,141,115,141,129,141,153,141,194,141,190,141,186,141,207,141,218,141,214,141,204,141,219,141,203,141,234,141,235,141,223,141,227,141,252,141,8,142,9,142,255,141,29,142,30,142,16,142,31,142,66,142,53,142,48,142,52,142,74,142,71,142,73,142,76,142,80,142,72,142,89,142,100,142,96,142,42,142,99,142,85,142,118,142,114,142,124,142,129,142,135,142,133,142,132,142,139,142,138,142,147,142,145,142,148,142,153,142,170,142,161,142,172,142,176,142,198,142,177,142,190,142,197,142,200,142,203,142,219,142,227,142,252,142,251,142,235,142,254,142,10,143,5,143,21,143,18,143,25,143,19,143,28,143,31,143,27,143,12,143,38,143,51,143,59,143,57,143,69,143,66,143,62,143,76,143,73,143,70,143,78,143,87,143,92,143,98,143,99,143,100,143,156,143,159,143,163,143,173,143,175,143,183,143,218,143,229,143,226,143,234,143,239,143,135,144,244,143,5,144,249,143,250,143,17,144,21,144,33,144,13,144,30,144,22,144,11,144,39,144,54,144,53,144,57,144,248,143,79,144,80,144,81,144,82,144,14,144,73,144,62,144,86,144,88,144,94,144,104,144,111,144,118,144,168,150,114,144,130,144,125,144,129,144,128,144,138,144,137,144,143,144,168,144,175,144,177,144,181,144,226,144,228,144,72,98,219,144,2,145,18,145,25,145,50,145,48,145,74,145,86,145,88,145,99,145,101,145,105,145,115,145,114,145,139,145,137,145,130,145,162,145,171,145,175,145,170,145,181,145,180,145,186,145,192,145,193,145,201,145,203,145,208,145,214,145,223,145,225,145,219,145,252,145,245,145,246,145,30,146,255,145,20,146,44,146,21,146,17,146,94,146,87,146,69,146,73,146,100,146,72,146,149,146,63,146,75,146,80,146,156,146,150,146,147,146,155,146,90,146,207,146,185,146,183,146,233,146,15,147,250,146,68,147,46,147,25,147,34,147,26,147,35,147,58,147,53,147,59,147,92,147,96,147,124,147,110,147,86,147,176,147,172,147,173,147,148,147,185,147,214,147,215,147,232,147,229,147,216,147,195,147,221,147,208,147,200,147,228,147,26,148,20,148,19,148,3,148,7,148,16,148,54,148,43,148,53,148,33,148,58,148,65,148,82,148,68,148,91,148,96,148,98,148,94,148,106,148,41,146,112,148,117,148,119,148,125,148,90,148,124,148,126,148,129,148,127,148,130,149,135,149,138,149,148,149,150,149,152,149,153,149,160,149,168,149,167,149,173,149,188,149,187,149,185,149,190,149,202,149,246,111,195,149,205,149,204,149,213,149,212,149,214,149,220,149,225,149,229,149,226,149,33,150,40,150,46,150,47,150,66,150,76,150,79,150,75,150,119,150,92,150,94,150,93,150,95,150,102,150,114,150,108,150,141,150,152,150,149,150,151,150,170,150,167,150,177,150,178,150,176,150,180,150,182,150,184,150,185,150,206,150,203,150,201,150,205,150,77,137,220,150,13,151,213,150,249,150,4,151,6,151,8,151,19,151,14,151,17,151,15,151,22,151,25,151,36,151,42,151,48,151,57,151,61,151,62,151,68,151,70,151,72,151,66,151,73,151,92,151,96,151,100,151,102,151,104,151,210,82,107,151,113,151,121,151,133,151,124,151,129,151,122,151,134,151,139,151,143,151,144,151,156,151,168,151,166,151,163,151,179,151,180,151,195,151,198,151,200,151,203,151,220,151,237,151,79,159,242,151,223,122,246,151,245,151,15,152,12,152,56,152,36,152,33,152,55,152,61,152,70,152,79,152,75,152,107,152,111,152,112,152,113,152,116,152,115,152,170,152,175,152,177,152,182,152,196,152,195,152,198,152,233,152,235,152,3,153,9,153,18,153,20,153,24,153,33,153,29,153,30,153,36,153,32,153,44,153,46,153,61,153,62,153,66,153,73,153,69,153,80,153,75,153,81,153,82,153,76,153,85,153,151,153,152,153,165,153,173,153,174,153,188,153,223,153,219,153,221,153,216,153,209,153,237,153,238,153,241,153,242,153,251,153,248,153,1,154,15,154,5,154,226,153,25,154,43,154,55,154,69,154,66,154,64,154,67,154,62,154,85,154,77,154,91,154,87,154,95,154,98,154,101,154,100,154,105,154,107,154,106,154,173,154,176,154,188,154,192,154,207,154,209,154,211,154,212,154,222,154,223,154,226,154,227,154,230,154,239,154,235,154,238,154,244,154,241,154,247,154,251,154,6,155,24,155,26,155,31,155,34,155,35,155,37,155,39,155,40,155,41,155,42,155,46,155,47,155,50,155,68,155,67,155,79,155,77,155,78,155,81,155,88,155,116,155,147,155,131,155,145,155,150,155,151,155,159,155,160,155,168,155,180,155,192,155,202,155,185,155,198,155,207,155,209,155,210,155,227,155,226,155,228,155,212,155,225,155,58,156,242,155,241,155,240,155,21,156,20,156,9,156,19,156,12,156,6,156,8,156,18,156,10,156,4,156,46,156,27,156,37,156,36,156,33,156,48,156,71,156,50,156,70,156,62,156,90,156,96,156,103,156,118,156,120,156,231,156,236,156,240,156,9,157,8,157,235,156,3,157,6,157,42,157,38,157,175,157,35,157,31,157,68,157,21,157,18,157,65,157,63,157,62,157,70,157,72,157,93,157,94,157,100,157,81,157,80,157,89,157,114,157,137,157,135,157,171,157,111,157,122,157,154,157,164,157,169,157,178,157,196,157,193,157,187,157,184,157,186,157,198,157,207,157,194,157,217,157,211,157,248,157,230,157,237,157,239,157,253,157,26,158,27,158,30,158,117,158,121,158,125,158,129,158,136,158,139,158,140,158,146,158,149,158,145,158,157,158,165,158,169,158,184,158,170,158,173,158,97,151,204,158,206,158,207,158,208,158,212,158,220,158,222,158,221,158,224,158,229,158,232,158,239,158,244,158,246,158,247,158,249,158,251,158,252,158,253,158,7,159,8,159,183,118,21,159,33,159,44,159,62,159,74,159,82,159,84,159,99,159,95,159,96,159,97,159,102,159,103,159,108,159,106,159,119,159,114,159,118,159,149,159,156,159,160,159,47,88,199,105,89,144,100,116,220,81,153,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,78,4,78,5,78,6,78,15,78,18,78,23,78,31,78,32,78,33,78,35,78,38,78,41,78,46,78,47,78,49,78,51,78,53,78,55,78,60,78,64,78,65,78,66,78,68,78,70,78,74,78,81,78,85,78,87,78,90,78,91,78,98,78,99,78,100,78,101,78,103,78,104,78,106,78,107,78,108,78,109,78,110,78,111,78,114,78,116,78,117,78,118,78,119,78,120,78,121,78,122,78,123,78,124,78,125,78,127,78,128,78,129,78,130,78,131,78,132,78,133,78,135,78,138,78,144,78,150,78,151,78,153,78,156,78,157,78,158,78,163,78,170,78,175,78,176,78,177,78,180,78,182,78,183,78,184,78,185,78,188,78,189,78,190,78,200,78,204,78,207,78,208,78,210,78,218,78,219,78,220,78,224,78,226,78,230,78,231,78,233,78,237,78,238,78,239,78,241,78,244,78,248,78,249,78,250,78,252,78,254,78,0,79,2,79,3,79,4,79,5,79,6,79,7,79,8,79,11,79,12,79,18,79,19,79,20,79,21,79,22,79,28,79,29,79,33,79,35,79,40,79,41,79,44,79,45,79,46,79,49,79,51,79,53,79,55,79,57,79,59,79,62,79,63,79,64,79,65,79,66,79,68,79,69,79,71,79,72,79,73,79,74,79,75,79,76,79,82,79,84,79,86,79,97,79,98,79,102,79,104,79,106,79,107,79,109,79,110,79,113,79,114,79,117,79,119,79,120,79,121,79,122,79,125,79,128,79,129,79,130,79,133,79,134,79,135,79,138,79,140,79,142,79,144,79,146,79,147,79,149,79,150,79,152,79,153,79,154,79,156,79,158,79,159,79,161,79,162,79,164,79,171,79,173,79,176,79,177,79,178,79,179,79,180,79,182,79,183,79,184,79,185,79,186,79,187,79,188,79,189,79,190,79,192,79,193,79,194,79,198,79,199,79,200,79,201,79,203,79,204,79,205,79,210,79,211,79,212,79,213,79,214,79,217,79,219,79,224,79,226,79,228,79,229,79,231,79,235,79,236,79,240,79,242,79,244,79,245,79,246,79,247,79,249,79,251,79,252,79,253,79,255,79,0,80,1,80,2,80,3,80,4,80,5,80,6,80,7,80,8,80,9,80,10,80,11,80,14,80,16,80,17,80,19,80,21,80,22,80,23,80,27,80,29,80,30,80,32,80,34,80,35,80,36,80,39,80,43,80,47,80,48,80,49,80,50,80,51,80,52,80,53,80,54,80,55,80,56,80,57,80,59,80,61,80,63,80,64,80,65,80,66,80,68,80,69,80,70,80,73,80,74,80,75,80,77,80,80,80,81,80,82,80,83,80,84,80,86,80,87,80,88,80,89,80,91,80,93,80,94,80,95,80,96,80,97,80,98,80,99,80,100,80,102,80,103,80,104,80,105,80,106,80,107,80,109,80,110,80,111,80,112,80,113,80,114,80,115,80,116,80,117,80,120,80,121,80,122,80,124,80,125,80,129,80,130,80,131,80,132,80,134,80,135,80,137,80,138,80,139,80,140,80,142,80,143,80,144,80,145,80,146,80,147,80,148,80,149,80,150,80,151,80,152,80,153,80,154,80,155,80,156,80,157,80,158,80,159,80,160,80,161,80,162,80,164,80,166,80,170,80,171,80,173,80,174,80,175,80,176,80,177,80,179,80,180,80,181,80,182,80,183,80,184,80,185,80,188,80,189,80,190,80,191,80,192,80,193,80,194,80,195,80,196,80,197,80,198,80,199,80,200,80,201,80,202,80,203,80,204,80,205,80,206,80,208,80,209,80,210,80,211,80,212,80,213,80,215,80,216,80,217,80,219,80,220,80,221,80,222,80,223,80,224,80,225,80,226,80,227,80,228,80,229,80,232,80,233,80,234,80,235,80,239,80,240,80,241,80,242,80,244,80,246,80,247,80,248,80,249,80,250,80,252,80,253,80,254,80,255,80,0,81,1,81,2,81,3,81,4,81,5,81,8,81,9,81,10,81,12,81,13,81,14,81,15,81,16,81,17,81,19,81,20,81,21,81,22,81,23,81,24,81,25,81,26,81,27,81,28,81,29,81,30,81,31,81,32,81,34,81,35,81,36,81,37,81,38,81,39,81,40,81,41,81,42,81,43,81,44,81,45,81,46,81,47,81,48,81,49,81,50,81,51,81,52,81,53,81,54,81,55,81,56,81,57,81,58,81,59,81,60,81,61,81,62,81,66,81,71,81,74,81,76,81,78,81,79,81,80,81,82,81,83,81,87,81,88,81,89,81,91,81,93,81,94,81,95,81,96,81,97,81,99,81,100,81,102,81,103,81,105,81,106,81,111,81,114,81,122,81,126,81,127,81,131,81,132,81,134,81,135,81,138,81,139,81,142,81,143,81,144,81,145,81,147,81,148,81,152,81,154,81,157,81,158,81,159,81,161,81,163,81,166,81,167,81,168,81,169,81,170,81,173,81,174,81,180,81,184,81,185,81,186,81,190,81,191,81,193,81,194,81,195,81,197,81,200,81,202,81,205,81,206,81,208,81,210,81,211,81,212,81,213,81,214,81,215,81,216,81,217,81,218,81,220,81,222,81,223,81,226,81,227,81,229,81,230,81,231,81,232,81,233,81,234,81,236,81,238,81,241,81,242,81,244,81,247,81,254,81,4,82,5,82,9,82,11,82,12,82,15,82,16,82,19,82,20,82,21,82,28,82,30,82,31,82,33,82,34,82,35,82,37,82,38,82,39,82,42,82,44,82,47,82,49,82,50,82,52,82,53,82,60,82,62,82,68,82,69,82,70,82,71,82,72,82,73,82,75,82,78,82,79,82,82,82,83,82,85,82,87,82,88,82,89,82,90,82,91,82,93,82,95,82,96,82,98,82,99,82,100,82,102,82,104,82,107,82,108,82,109,82,110,82,112,82,113,82,115,82,116,82,117,82,118,82,119,82,120,82,121,82,122,82,123,82,124,82,126,82,128,82,131,82,132,82,133,82,134,82,135,82,137,82,138,82,139,82,140,82,141,82,142,82,143,82,145,82,146,82,148,82,149,82,150,82,151,82,152,82,153,82,154,82,156,82,164,82,165,82,166,82,167,82,174,82,175,82,176,82,180,82,181,82,182,82,183,82,184,82,185,82,186,82,187,82,188,82,189,82,192,82,193,82,194,82,196,82,197,82,198,82,200,82,202,82,204,82,205,82,206,82,207,82,209,82,211,82,212,82,213,82,215,82,217,82,218,82,219,82,220,82,221,82,222,82,224,82,225,82,226,82,227,82,229,82,230,82,231,82,232,82,233,82,234,82,235,82,236,82,237,82,238,82,239,82,241,82,242,82,243,82,244,82,245,82,246,82,247,82,248,82,251,82,252,82,253,82,1,83,2,83,3,83,4,83,7,83,9,83,10,83,11,83,12,83,14,83,17,83,18,83,19,83,20,83,24,83,27,83,28,83,30,83,31,83,34,83,36,83,37,83,39,83,40,83,41,83,43,83,44,83,45,83,47,83,48,83,49,83,50,83,51,83,52,83,53,83,54,83,55,83,56,83,60,83,61,83,64,83,66,83,68,83,70,83,75,83,76,83,77,83,80,83,84,83,88,83,89,83,91,83,93,83,101,83,104,83,106,83,108,83,109,83,114,83,118,83,121,83,123,83,124,83,125,83,126,83,128,83,129,83,131,83,135,83,136,83,138,83,142,83,143,83,144,83,145,83,146,83,147,83,148,83,150,83,151,83,153,83,155,83,156,83,158,83,160,83,161,83,164,83,167,83,170,83,171,83,172,83,173,83,175,83,176,83,177,83,178,83,179,83,180,83,181,83,183,83,184,83,185,83,186,83,188,83,189,83,190,83,192,83,195,83,196,83,197,83,198,83,199,83,206,83,207,83,208,83,210,83,211,83,213,83,218,83,220,83,221,83,222,83,225,83,226,83,231,83,244,83,250,83,254,83,255,83,0,84,2,84,5,84,7,84,11,84,20,84,24,84,25,84,26,84,28,84,34,84,36,84,37,84,42,84,48,84,51,84,54,84,55,84,58,84,61,84,63,84,65,84,66,84,68,84,69,84,71,84,73,84,76,84,77,84,78,84,79,84,81,84,90,84,93,84,94,84,95,84,96,84,97,84,99,84,101,84,103,84,105,84,106,84,107,84,108,84,109,84,110,84,111,84,112,84,116,84,121,84,122,84,126,84,127,84,129,84,131,84,133,84,135,84,136,84,137,84,138,84,141,84,145,84,147,84,151,84,152,84,156,84,158,84,159,84,160,84,161,84,162,84,165,84,174,84,176,84,178,84,181,84,182,84,183,84,185,84,186,84,188,84,190,84,195,84,197,84,202,84,203,84,214,84,216,84,219,84,224,84,225,84,226,84,227,84,228,84,235,84,236,84,239,84,240,84,241,84,244,84,245,84,246,84,247,84,248,84,249,84,251,84,254,84,0,85,2,85,3,85,4,85,5,85,8,85,10,85,11,85,12,85,13,85,14,85,18,85,19,85,21,85,22,85,23,85,24,85,25,85,26,85,28,85,29,85,30,85,31,85,33,85,37,85,38,85,40,85,41,85,43,85,45,85,50,85,52,85,53,85,54,85,56,85,57,85,58,85,59,85,61,85,64,85,66,85,69,85,71,85,72,85,75,85,76,85,77,85,78,85,79,85,81,85,82,85,83,85,84,85,87,85,88,85,89,85,90,85,91,85,93,85,94,85,95,85,96,85,98,85,99,85,104,85,105,85,107,85,111,85,112,85,113,85,114,85,115,85,116,85,121,85,122,85,125,85,127,85,133,85,134,85,140,85,141,85,142,85,144,85,146,85,147,85,149,85,150,85,151,85,154,85,155,85,158,85,160,85,161,85,162,85,163,85,164,85,165,85,166,85,168,85,169,85,170,85,171,85,172,85,173,85,174,85,175,85,176,85,178,85,180,85,182,85,184,85,186,85,188,85,191,85,192,85,193,85,194,85,195,85,198,85,199,85,200,85,202,85,203,85,206,85,207,85,208,85,213,85,215,85,216,85,217,85,218,85,219,85,222,85,224,85,226,85,231,85,233,85,237,85,238,85,240,85,241,85,244,85,246,85,248,85,249,85,250,85,251,85,252,85,255,85,2,86,3,86,4,86,5,86,6,86,7,86,10,86,11,86,13,86,16,86,17,86,18,86,19,86,20,86,21,86,22,86,23,86,25,86,26,86,28,86,29,86,32,86,33,86,34,86,37,86,38,86,40,86,41,86,42,86,43,86,46,86,47,86,48,86,51,86,53,86,55,86,56,86,58,86,60,86,61,86,62,86,64,86,65,86,66,86,67,86,68,86,69,86,70,86,71,86,72,86,73,86,74,86,75,86,79,86,80,86,81,86,82,86,83,86,85,86,86,86,90,86,91,86,93,86,94,86,95,86,96,86,97,86,99,86,101,86,102,86,103,86,109,86,110,86,111,86,112,86,114,86,115,86,116,86,117,86,119,86,120,86,121,86,122,86,125,86,126,86,127,86,128,86,129,86,130,86,131,86,132,86,135,86,136,86,137,86,138,86,139,86,140,86,141,86,144,86,145,86,146,86,148,86,149,86,150,86,151,86,152,86,153,86,154,86,155,86,156,86,157,86,158,86,159,86,160,86,161,86,162,86,164,86,165,86,166,86,167,86,168,86,169,86,170,86,171,86,172,86,173,86,174,86,176,86,177,86,178,86,179,86,180,86,181,86,182,86,184,86,185,86,186,86,187,86,189,86,190,86,191,86,192,86,193,86,194,86,195,86,196,86,197,86,198,86,199,86,200,86,201,86,203,86,204,86,205,86,206,86,207,86,208,86,209,86,210,86,211,86,213,86,214,86,216,86,217,86,220,86,227,86,229,86,230,86,231,86,232,86,233,86,234,86,236,86,238,86,239,86,242,86,243,86,246,86,247,86,248,86,251,86,252,86,0,87,1,87,2,87,5,87,7,87,11,87,12,87,13,87,14,87,15,87,16,87,17,87,18,87,19,87,20,87,21,87,22,87,23,87,24,87,25,87,26,87,27,87,29,87,30,87,32,87,33,87,34,87,36,87,37,87,38,87,39,87,43,87,49,87,50,87,52,87,53,87,54,87,55,87,56,87,60,87,61,87,63,87,65,87,67,87,68,87,69,87,70,87,72,87,73,87,75,87,82,87,83,87,84,87,85,87,86,87,88,87,89,87,98,87,99,87,101,87,103,87,108,87,110,87,112,87,113,87,114,87,116,87,117,87,120,87,121,87,122,87,125,87,126,87,127,87,128,87,129,87,135,87,136,87,137,87,138,87,141,87,142,87,143,87,144,87,145,87,148,87,149,87,150,87,151,87,152,87,153,87,154,87,156,87,157,87,158,87,159,87,165,87,168,87,170,87,172,87,175,87,176,87,177,87,179,87,181,87,182,87,183,87,185,87,186,87,187,87,188,87,189,87,190,87,191,87,192,87,193,87,196,87,197,87,198,87,199,87,200,87,201,87,202,87,204,87,205,87,208,87,209,87,211,87,214,87,215,87,219,87,220,87,222,87,225,87,226,87,227,87,229,87,230,87,231,87,232,87,233,87,234,87,235,87,236,87,238,87,240,87,241,87,242,87,243,87,245,87,246,87,247,87,251,87,252,87,254,87,255,87,1,88,3,88,4,88,5,88,8,88,9,88,10,88,12,88,14,88,15,88,16,88,18,88,19,88,20,88,22,88,23,88,24,88,26,88,27,88,28,88,29,88,31,88,34,88,35,88,37,88,38,88,39,88,40,88,41,88,43,88,44,88,45,88,46,88,47,88,49,88,50,88,51,88,52,88,54,88,55,88,56,88,57,88,58,88,59,88,60,88,61,88,62,88,63,88,64,88,65,88,66,88,67,88,69,88,70,88,71,88,72,88,73,88,74,88,75,88,78,88,79,88,80,88,82,88,83,88,85,88,86,88,87,88,89,88,90,88,91,88,92,88,93,88,95,88,96,88,97,88,98,88,99,88,100,88,102,88,103,88,104,88,105,88,106,88,109,88,110,88,111,88,112,88,113,88,114,88,115,88,116,88,117,88,118,88,119,88,120,88,121,88,122,88,123,88,124,88,125,88,127,88,130,88,132,88,134,88,135,88,136,88,138,88,139,88,140,88,141,88,142,88,143,88,144,88,145,88,148,88,149,88,150,88,151,88,152,88,155,88,156,88,157,88,160,88,161,88,162,88,163,88,164,88,165,88,166,88,167,88,170,88,171,88,172,88,173,88,174,88,175,88,176,88,177,88,178,88,179,88,180,88,181,88,182,88,183,88,184,88,185,88,186,88,187,88,189,88,190,88,191,88,192,88,194,88,195,88,196,88,198,88,199,88,200,88,201,88,202,88,203,88,204,88,205,88,206,88,207,88,208,88,210,88,211,88,212,88,214,88,215,88,216,88,217,88,218,88,219,88,220,88,221,88,222,88,223,88,224,88,225,88,226,88,227,88,229,88,230,88,231,88,232,88,233,88,234,88,237,88,239,88,241,88,242,88,244,88,245,88,247,88,248,88,250,88,251,88,252,88,253,88,254,88,255,88,0,89,1,89,3,89,5,89,6,89,8,89,9,89,10,89,11,89,12,89,14,89,16,89,17,89,18,89,19,89,23,89,24,89,27,89,29,89,30,89,32,89,33,89,34,89,35,89,38,89,40,89,44,89,48,89,50,89,51,89,53,89,54,89,59,89,61,89,62,89,63,89,64,89,67,89,69,89,70,89,74,89,76,89,77,89,80,89,82,89,83,89,89,89,91,89,92,89,93,89,94,89,95,89,97,89,99,89,100,89,102,89,103,89,104,89,105,89,106,89,107,89,108,89,109,89,110,89,111,89,112,89,113,89,114,89,117,89,119,89,122,89,123,89,124,89,126,89,127,89,128,89,133,89,137,89,139,89,140,89,142,89,143,89,144,89,145,89,148,89,149,89,152,89,154,89,155,89,156,89,157,89,159,89,160,89,161,89,162,89,166,89,167,89,172,89,173,89,176,89,177,89,179,89,180,89,181,89,182,89,183,89,184,89,186,89,188,89,189,89,191,89,192,89,193,89,194,89,195,89,196,89,197,89,199,89,200,89,201,89,204,89,205,89,206,89,207,89,213,89,214,89,217,89,219,89,222,89,223,89,224,89,225,89,226,89,228,89,230,89,231,89,233,89,234,89,235,89,237,89,238,89,239,89,240,89,241,89,242,89,243,89,244,89,245,89,246,89,247,89,248,89,250,89,252,89,253,89,254,89,0,90,2,90,10,90,11,90,13,90,14,90,15,90,16,90,18,90,20,90,21,90,22,90,23,90,25,90,26,90,27,90,29,90,30,90,33,90,34,90,36,90,38,90,39,90,40,90,42,90,43,90,44,90,45,90,46,90,47,90,48,90,51,90,53,90,55,90,56,90,57,90,58,90,59,90,61,90,62,90,63,90,65,90,66,90,67,90,68,90,69,90,71,90,72,90,75,90,76,90,77,90,78,90,79,90,80,90,81,90,82,90,83,90,84,90,86,90,87,90,88,90,89,90,91,90,92,90,93,90,94,90,95,90,96,90,97,90,99,90,100,90,101,90,102,90,104,90,105,90,107,90,108,90,109,90,110,90,111,90,112,90,113,90,114,90,115,90,120,90,121,90,123,90,124,90,125,90,126,90,128,90,129,90,130,90,131,90,132,90,133,90,134,90,135,90,136,90,137,90,138,90,139,90,140,90,141,90,142,90,143,90,144,90,145,90,147,90,148,90,149,90,150,90,151,90,152,90,153,90,156,90,157,90,158,90,159,90,160,90,161,90,162,90,163,90,164,90,165,90,166,90,167,90,168,90,169,90,171,90,172,90,173,90,174,90,175,90,176,90,177,90,180,90,182,90,183,90,185,90,186,90,187,90,188,90,189,90,191,90,192,90,195,90,196,90,197,90,198,90,199,90,200,90,202,90,203,90,205,90,206,90,207,90,208,90,209,90,211,90,213,90,215,90,217,90,218,90,219,90,221,90,222,90,223,90,226,90,228,90,229,90,231,90,232,90,234,90,236,90,237,90,238,90,239,90,240,90,242,90,243,90,244,90,245,90,246,90,247,90,248,90,249,90,250,90,251,90,252,90,253,90,254,90,255,90,0,91,1,91,2,91,3,91,4,91,5,91,6,91,7,91,8,91,10,91,11,91,12,91,13,91,14,91,15,91,16,91,17,91,18,91,19,91,20,91,21,91,24,91,25,91,26,91,27,91,28,91,29,91,30,91,31,91,32,91,33,91,34,91,35,91,36,91,37,91,38,91,39,91,40,91,41,91,42,91,43,91,44,91,45,91,46,91,47,91,48,91,49,91,51,91,53,91,54,91,56,91,57,91,58,91,59,91,60,91,61,91,62,91,63,91,65,91,66,91,67,91,68,91,69,91,70,91,71,91,72,91,73,91,74,91,75,91,76,91,77,91,78,91,79,91,82,91,86,91,94,91,96,91,97,91,103,91,104,91,107,91,109,91,110,91,111,91,114,91,116,91,118,91,119,91,120,91,121,91,123,91,124,91,126,91,127,91,130,91,134,91,138,91,141,91,142,91,144,91,145,91,146,91,148,91,150,91,159,91,167,91,168,91,169,91,172,91,173,91,174,91,175,91,177,91,178,91,183,91,186,91,187,91,188,91,192,91,193,91,195,91,200,91,201,91,202,91,203,91,205,91,206,91,207,91,209,91,212,91,213,91,214,91,215,91,216,91,217,91,218,91,219,91,220,91,224,91,226,91,227,91,230,91,231,91,233,91,234,91,235,91,236,91,237,91,239,91,241,91,242,91,243,91,244,91,245,91,246,91,247,91,253,91,254,91,0,92,2,92,3,92,5,92,7,92,8,92,11,92,12,92,13,92,14,92,16,92,18,92,19,92,23,92,25,92,27,92,30,92,31,92,32,92,33,92,35,92,38,92,40,92,41,92,42,92,43,92,45,92,46,92,47,92,48,92,50,92,51,92,53,92,54,92,55,92,67,92,68,92,70,92,71,92,76,92,77,92,82,92,83,92,84,92,86,92,87,92,88,92,90,92,91,92,92,92,93,92,95,92,98,92,100,92,103,92,104,92,105,92,106,92,107,92,108,92,109,92,112,92,114,92,115,92,116,92,117,92,118,92,119,92,120,92,123,92,124,92,125,92,126,92,128,92,131,92,132,92,133,92,134,92,135,92,137,92,138,92,139,92,142,92,143,92,146,92,147,92,149,92,157,92,158,92,159,92,160,92,161,92,164,92,165,92,166,92,167,92,168,92,170,92,174,92,175,92,176,92,178,92,180,92,182,92,185,92,186,92,187,92,188,92,190,92,192,92,194,92,195,92,197,92,198,92,199,92,200,92,201,92,202,92,204,92,205,92,206,92,207,92,208,92,209,92,211,92,212,92,213,92,214,92,215,92,216,92,218,92,219,92,220,92,221,92,222,92,223,92,224,92,226,92,227,92,231,92,233,92,235,92,236,92,238,92,239,92,241,92,242,92,243,92,244,92,245,92,246,92,247,92,248,92,249,92,250,92,252,92,253,92,254,92,255,92,0,93,1,93,4,93,5,93,8,93,9,93,10,93,11,93,12,93,13,93,15,93,16,93,17,93,18,93,19,93,21,93,23,93,24,93,25,93,26,93,28,93,29,93,31,93,32,93,33,93,34,93,35,93,37,93,40,93,42,93,43,93,44,93,47,93,48,93,49,93,50,93,51,93,53,93,54,93,55,93,56,93,57,93,58,93,59,93,60,93,63,93,64,93,65,93,66,93,67,93,68,93,69,93,70,93,72,93,73,93,77,93,78,93,79,93,80,93,81,93,82,93,83,93,84,93,85,93,86,93,87,93,89,93,90,93,92,93,94,93,95,93,96,93,97,93,98,93,99,93,100,93,101,93,102,93,103,93,104,93,106,93,109,93,110,93,112,93,113,93,114,93,115,93,117,93,118,93,119,93,120,93,121,93,122,93,123,93,124,93,125,93,126,93,127,93,128,93,129,93,131,93,132,93,133,93,134,93,135,93,136,93,137,93,138,93,139,93,140,93,141,93,142,93,143,93,144,93,145,93,146,93,147,93,148,93,149,93,150,93,151,93,152,93,154,93,155,93,156,93,158,93,159,93,160,93,161,93,162,93,163,93,164,93,165,93,166,93,167,93,168,93,169,93,170,93,171,93,172,93,173,93,174,93,175,93,176,93,177,93,178,93,179,93,180,93,181,93,182,93,184,93,185,93,186,93,187,93,188,93,189,93,190,93,191,93,192,93,193,93,194,93,195,93,196,93,198,93,199,93,200,93,201,93,202,93,203,93,204,93,206,93,207,93,208,93,209,93,210,93,211,93,212,93,213,93,214,93,215,93,216,93,217,93,218,93,220,93,223,93,224,93,227,93,228,93,234,93,236,93,237,93,240,93,245,93,246,93,248,93,249,93,250,93,251,93,252,93,255,93,0,94,4,94,7,94,9,94,10,94,11,94,13,94,14,94,18,94,19,94,23,94,30,94,31,94,32,94,33,94,34,94,35,94,36,94,37,94,40,94,41,94,42,94,43,94,44,94,47,94,48,94,50,94,51,94,52,94,53,94,54,94,57,94,58,94,62,94,63,94,64,94,65,94,67,94,70,94,71,94,72,94,73,94,74,94,75,94,77,94,78,94,79,94,80,94,81,94,82,94,83,94,86,94,87,94,88,94,89,94,90,94,92,94,93,94,95,94,96,94,99,94,100,94,101,94,102,94,103,94,104,94,105,94,106,94,107,94,108,94,109,94,110,94,111,94,112,94,113,94,117,94,119,94,121,94,126,94,129,94,130,94,131,94,133,94,136,94,137,94,140,94,141,94,142,94,146,94,152,94,155,94,157,94,161,94,162,94,163,94,164,94,168,94,169,94,170,94,171,94,172,94,174,94,175,94,176,94,177,94,178,94,180,94,186,94,187,94,188,94,189,94,191,94,192,94,193,94,194,94,195,94,196,94,197,94,198,94,199,94,200,94,203,94,204,94,205,94,206,94,207,94,208,94,212,94,213,94,215,94,216,94,217,94,218,94,220,94,221,94,222,94,223,94,224,94,225,94,226,94,227,94,228,94,229,94,230,94,231,94,233,94,235,94,236,94,237,94,238,94,239,94,240,94,241,94,242,94,243,94,245,94,248,94,249,94,251,94,252,94,253,94,5,95,6,95,7,95,9,95,12,95,13,95,14,95,16,95,18,95,20,95,22,95,25,95,26,95,28,95,29,95,30,95,33,95,34,95,35,95,36,95,40,95,43,95,44,95,46,95,48,95,50,95,51,95,52,95,53,95,54,95,55,95,56,95,59,95,61,95,62,95,63,95,65,95,66,95,67,95,68,95,69,95,70,95,71,95,72,95,73,95,74,95,75,95,76,95,77,95,78,95,79,95,81,95,84,95,89,95,90,95,91,95,92,95,94,95,95,95,96,95,99,95,101,95,103,95,104,95,107,95,110,95,111,95,114,95,116,95,117,95,118,95,120,95,122,95,125,95,126,95,127,95,131,95,134,95,141,95,142,95,143,95,145,95,147,95,148,95,150,95,154,95,155,95,157,95,158,95,159,95,160,95,162,95,163,95,164,95,165,95,166,95,167,95,169,95,171,95,172,95,175,95,176,95,177,95,178,95,179,95,180,95,182,95,184,95,185,95,186,95,187,95,190,95,191,95,192,95,193,95,194,95,199,95,200,95,202,95,203,95,206,95,211,95,212,95,213,95,218,95,219,95,220,95,222,95,223,95,226,95,227,95,229,95,230,95,232,95,233,95,236,95,239,95,240,95,242,95,243,95,244,95,246,95,247,95,249,95,250,95,252,95,7,96,8,96,9,96,11,96,12,96,16,96,17,96,19,96,23,96,24,96,26,96,30,96,31,96,34,96,35,96,36,96,44,96,45,96,46,96,48,96,49,96,50,96,51,96,52,96,54,96,55,96,56,96,57,96,58,96,61,96,62,96,64,96,68,96,69,96,70,96,71,96,72,96,73,96,74,96,76,96,78,96,79,96,81,96,83,96,84,96,86,96,87,96,88,96,91,96,92,96,94,96,95,96,96,96,97,96,101,96,102,96,110,96,113,96,114,96,116,96,117,96,119,96,126,96,128,96,129,96,130,96,133,96,134,96,135,96,136,96,138,96,139,96,142,96,143,96,144,96,145,96,147,96,149,96,151,96,152,96,153,96,156,96,158,96,161,96,162,96,164,96,165,96,167,96,169,96,170,96,174,96,176,96,179,96,181,96,182,96,183,96,185,96,186,96,189,96,190,96,191,96,192,96,193,96,194,96,195,96,196,96,199,96,200,96,201,96,204,96,205,96,206,96,207,96,208,96,210,96,211,96,212,96,214,96,215,96,217,96,219,96,222,96,225,96,226,96,227,96,228,96,229,96,234,96,241,96,242,96,245,96,247,96,248,96,251,96,252,96,253,96,254,96,255,96,2,97,3,97,4,97,5,97,7,97,10,97,11,97,12,97,16,97,17,97,18,97,19,97,20,97,22,97,23,97,24,97,25,97,27,97,28,97,29,97,30,97,33,97,34,97,37,97,40,97,41,97,42,97,44,97,45,97,46,97,47,97,48,97,49,97,50,97,51,97,52,97,53,97,54,97,55,97,56,97,57,97,58,97,59,97,60,97,61,97,62,97,64,97,65,97,66,97,67,97,68,97,69,97,70,97,71,97,73,97,75,97,77,97,79,97,80,97,82,97,83,97,84,97,86,97,87,97,88,97,89,97,90,97,91,97,92,97,94,97,95,97,96,97,97,97,99,97,100,97,101,97,102,97,105,97,106,97,107,97,108,97,109,97,110,97,111,97,113,97,114,97,115,97,116,97,118,97,120,97,121,97,122,97,123,97,124,97,125,97,126,97,127,97,128,97,129,97,130,97,131,97,132,97,133,97,134,97,135,97,136,97,137,97,138,97,140,97,141,97,143,97,144,97,145,97,146,97,147,97,149,97,150,97,151,97,152,97,153,97,154,97,155,97,156,97,158,97,159,97,160,97,161,97,162,97,163,97,164,97,165,97,166,97,170,97,171,97,173,97,174,97,175,97,176,97,177,97,178,97,179,97,180,97,181,97,182,97,184,97,185,97,186,97,187,97,188,97,189,97,191,97,192,97,193,97,195,97,196,97,197,97,198,97,199,97,201,97,204,97,205,97,206,97,207,97,208,97,211,97,213,97,214,97,215,97,216,97,217,97,218,97,219,97,220,97,221,97,222,97,223,97,224,97,225,97,226,97,227,97,228,97,229,97,231,97,232,97,233,97,234,97,235,97,236,97,237,97,238,97,239,97,240,97,241,97,242,97,243,97,244,97,246,97,247,97,248,97,249,97,250,97,251,97,252,97,253,97,254,97,0,98,1,98,2,98,3,98,4,98,5,98,7,98,9,98,19,98,20,98,25,98,28,98,29,98,30,98,32,98,35,98,38,98,39,98,40,98,41,98,43,98,45,98,47,98,48,98,49,98,50,98,53,98,54,98,56,98,57,98,58,98,59,98,60,98,66,98,68,98,69,98,70,98,74,98,79,98,80,98,85,98,86,98,87,98,89,98,90,98,92,98,93,98,94,98,95,98,96,98,97,98,98,98,100,98,101,98,104,98,113,98,114,98,116,98,117,98,119,98,120,98,122,98,123,98,125,98,129,98,130,98,131,98,133,98,134,98,135,98,136,98,139,98,140,98,141,98,142,98,143,98,144,98,148,98,153,98,156,98,157,98,158,98,163,98,166,98,167,98,169,98,170,98,173,98,174,98,175,98,176,98,178,98,179,98,180,98,182,98,183,98,184,98,186,98,190,98,192,98,193,98,195,98,203,98,207,98,209,98,213,98,221,98,222,98,224,98,225,98,228,98,234,98,235,98,240,98,242,98,245,98,248,98,249,98,250,98,251,98,0,99,3,99,4,99,5,99,6,99,10,99,11,99,12,99,13,99,15,99,16,99,18,99,19,99,20,99,21,99,23,99,24,99,25,99,28,99,38,99,39,99,41,99,44,99,45,99,46,99,48,99,49,99,51,99,52,99,53,99,54,99,55,99,56,99,59,99,60,99,62,99,63,99,64,99,65,99,68,99,71,99,72,99,74,99,81,99,82,99,83,99,84,99,86,99,87,99,88,99,89,99,90,99,91,99,92,99,93,99,96,99,100,99,101,99,102,99,104,99,106,99,107,99,108,99,111,99,112,99,114,99,115,99,116,99,117,99,120,99,121,99,124,99,125,99,126,99,127,99,129,99,131,99,132,99,133,99,134,99,139,99,141,99,145,99,147,99,148,99,149,99,151,99,153,99,154,99,155,99,156,99,157,99,158,99,159,99,161,99,164,99,166,99,171,99,175,99,177,99,178,99,181,99,182,99,185,99,187,99,189,99,191,99,192,99,193,99,194,99,195,99,197,99,199,99,200,99,202,99,203,99,204,99,209,99,211,99,212,99,213,99,215,99,216,99,217,99,218,99,219,99,220,99,221,99,223,99,226,99,228,99,229,99,230,99,231,99,232,99,235,99,236,99,238,99,239,99,240,99,241,99,243,99,245,99,247,99,249,99,250,99,251,99,252,99,254,99,3,100,4,100,6,100,7,100,8,100,9,100,10,100,13,100,14,100,17,100,18,100,21,100,22,100,23,100,24,100,25,100,26,100,29,100,31,100,34,100,35,100,36,100,37,100,39,100,40,100,41,100,43,100,46,100,47,100,48,100,49,100,50,100,51,100,53,100,54,100,55,100,56,100,57,100,59,100,60,100,62,100,64,100,66,100,67,100,73,100,75,100,76,100,77,100,78,100,79,100,80,100,81,100,83,100,85,100,86,100,87,100,89,100,90,100,91,100,92,100,93,100,95,100,96,100,97,100,98,100,99,100,100,100,101,100,102,100,104,100,106,100,107,100,108,100,110,100,111,100,112,100,113,100,114,100,115,100,116,100,117,100,118,100,119,100,123,100,124,100,125,100,126,100,127,100,128,100,129,100,131,100,134,100,136,100,137,100,138,100,139,100,140,100,141,100,142,100,143,100,144,100,147,100,148,100,151,100,152,100,154,100,155,100,156,100,157,100,159,100,160,100,161,100,162,100,163,100,165,100,166,100,167,100,168,100,170,100,171,100,175,100,177,100,178,100,179,100,180,100,182,100,185,100,187,100,189,100,190,100,191,100,193,100,195,100,196,100,198,100,199,100,200,100,201,100,202,100,203,100,204,100,207,100,209,100,211,100,212,100,213,100,214,100,217,100,218,100,219,100,220,100,221,100,223,100,224,100,225,100,227,100,229,100,231,100,232,100,233,100,234,100,235,100,236,100,237,100,238,100,239,100,240,100,241,100,242,100,243,100,244,100,245,100,246,100,247,100,248,100,249,100,250,100,251,100,252,100,253,100,254,100,255,100,1,101,2,101,3,101,4,101,5,101,6,101,7,101,8,101,10,101,11,101,12,101,13,101,14,101,15,101,16,101,17,101,19,101,20,101,21,101,22,101,23,101,25,101,26,101,27,101,28,101,29,101,30,101,31,101,32,101,33,101,34,101,35,101,36,101,38,101,39,101,40,101,41,101,42,101,44,101,45,101,48,101,49,101,50,101,51,101,55,101,58,101,60,101,61,101,64,101,65,101,66,101,67,101,68,101,70,101,71,101,74,101,75,101,77,101,78,101,80,101,82,101,83,101,84,101,87,101,88,101,90,101,92,101,95,101,96,101,97,101,100,101,101,101,103,101,104,101,105,101,106,101,109,101,110,101,111,101,113,101,115,101,117,101,118,101,120,101,121,101,122,101,123,101,124,101,125,101,126,101,127,101,128,101,129,101,130,101,131,101,132,101,133,101,134,101,136,101,137,101,138,101,141,101,142,101,143,101,146,101,148,101,149,101,150,101,152,101,154,101,157,101],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+93258);allocate([158,101,160,101,162,101,163,101,166,101,168,101,170,101,172,101,174,101,177,101,178,101,179,101,180,101,181,101,182,101,183,101,184,101,186,101,187,101,190,101,191,101,192,101,194,101,199,101,200,101,201,101,202,101,205,101,208,101,209,101,211,101,212,101,213,101,216,101,217,101,218,101,219,101,220,101,221,101,222,101,223,101,225,101,227,101,228,101,234,101,235,101,242,101,243,101,244,101,245,101,248,101,249,101,251,101,252,101,253,101,254,101,255,101,1,102,4,102,5,102,7,102,8,102,9,102,11,102,13,102,16,102,17,102,18,102,22,102,23,102,24,102,26,102,27,102,28,102,30,102,33,102,34,102,35,102,36,102,38,102,41,102,42,102,43,102,44,102,46,102,48,102,50,102,51,102,55,102,56,102,57,102,58,102,59,102,61,102,63,102,64,102,66,102,68,102,69,102,70,102,71,102,72,102,73,102,74,102,77,102,78,102,80,102,81,102,88,102,89,102,91,102,92,102,93,102,94,102,96,102,98,102,99,102,101,102,103,102,105,102,106,102,107,102,108,102,109,102,113,102,114,102,115,102,117,102,120,102,121,102,123,102,124,102,125,102,127,102,128,102,129,102,131,102,133,102,134,102,136,102,137,102,138,102,139,102,141,102,142,102,143,102,144,102,146,102,147,102,148,102,149,102,152,102,153,102,154,102,155,102,156,102,158,102,159,102,160,102,161,102,162,102,163,102,164,102,165,102,166,102,169,102,170,102,171,102,172,102,173,102,175,102,176,102,177,102,178,102,179,102,181,102,182,102,183,102,184,102,186,102,187,102,188,102,189,102,191,102,192,102,193,102,194,102,195,102,196,102,197,102,198,102,199,102,200,102,201,102,202,102,203,102,204,102,205,102,206,102,207,102,208,102,209,102,210,102,211,102,212,102,213,102,214,102,215,102,216,102,218,102,222,102,223,102,224,102,225,102,226,102,227,102,228,102,229,102,231,102,232,102,234,102,235,102,236,102,237,102,238,102,239,102,241,102,245,102,246,102,248,102,250,102,251,102,253,102,1,103,2,103,3,103,4,103,5,103,6,103,7,103,12,103,14,103,15,103,17,103,18,103,19,103,22,103,24,103,25,103,26,103,28,103,30,103,32,103,33,103,34,103,35,103,36,103,37,103,39,103,41,103,46,103,48,103,50,103,51,103,54,103,55,103,56,103,57,103,59,103,60,103,62,103,63,103,65,103,68,103,69,103,71,103,74,103,75,103,77,103,82,103,84,103,85,103,87,103,88,103,89,103,90,103,91,103,93,103,98,103,99,103,100,103,102,103,103,103,107,103,108,103,110,103,113,103,116,103,118,103,120,103,121,103,122,103,123,103,125,103,128,103,130,103,131,103,133,103,134,103,136,103,138,103,140,103,141,103,142,103,143,103,145,103,146,103,147,103,148,103,150,103,153,103,155,103,159,103,160,103,161,103,164,103,166,103,169,103,172,103,174,103,177,103,178,103,180,103,185,103,186,103,187,103,188,103,189,103,190,103,191,103,192,103,194,103,197,103,198,103,199,103,200,103,201,103,202,103,203,103,204,103,205,103,206,103,213,103,214,103,215,103,219,103,223,103,225,103,227,103,228,103,230,103,231,103,232,103,234,103,235,103,237,103,238,103,242,103,245,103,246,103,247,103,248,103,249,103,250,103,251,103,252,103,254,103,1,104,2,104,3,104,4,104,6,104,13,104,16,104,18,104,20,104,21,104,24,104,25,104,26,104,27,104,28,104,30,104,31,104,32,104,34,104,35,104,36,104,37,104,38,104,39,104,40,104,43,104,44,104,45,104,46,104,47,104,48,104,49,104,52,104,53,104,54,104,58,104,59,104,63,104,71,104,75,104,77,104,79,104,82,104,86,104,87,104,88,104,89,104,90,104,91,104,92,104,93,104,94,104,95,104,106,104,108,104,109,104,110,104,111,104,112,104,113,104,114,104,115,104,117,104,120,104,121,104,122,104,123,104,124,104,125,104,126,104,127,104,128,104,130,104,132,104,135,104,136,104,137,104,138,104,139,104,140,104,141,104,142,104,144,104,145,104,146,104,148,104,149,104,150,104,152,104,153,104,154,104,155,104,156,104,157,104,158,104,159,104,160,104,161,104,163,104,164,104,165,104,169,104,170,104,171,104,172,104,174,104,177,104,178,104,180,104,182,104,183,104,184,104,185,104,186,104,187,104,188,104,189,104,190,104,191,104,193,104,195,104,196,104,197,104,198,104,199,104,200,104,202,104,204,104,206,104,207,104,208,104,209,104,211,104,212,104,214,104,215,104,217,104,219,104,220,104,221,104,222,104,223,104,225,104,226,104,228,104,229,104,230,104,231,104,232,104,233,104,234,104,235,104,236,104,237,104,239,104,242,104,243,104,244,104,246,104,247,104,248,104,251,104,253,104,254,104,255,104,0,105,2,105,3,105,4,105,6,105,7,105,8,105,9,105,10,105,12,105,15,105,17,105,19,105,20,105,21,105,22,105,23,105,24,105,25,105,26,105,27,105,28,105,29,105,30,105,33,105,34,105,35,105,37,105,38,105,39,105,40,105,41,105,42,105,43,105,44,105,46,105,47,105,49,105,50,105,51,105,53,105,54,105,55,105,56,105,58,105,59,105,60,105,62,105,64,105,65,105,67,105,68,105,69,105,70,105,71,105,72,105,73,105,74,105,75,105,76,105,77,105,78,105,79,105,80,105,81,105,82,105,83,105,85,105,86,105,88,105,89,105,91,105,92,105,95,105,97,105,98,105,100,105,101,105,103,105,104,105,105,105,106,105,108,105,109,105,111,105,112,105,114,105,115,105,116,105,117,105,118,105,122,105,123,105,125,105,126,105,127,105,129,105,131,105,133,105,138,105,139,105,140,105,142,105,143,105,144,105,145,105,146,105,147,105,150,105,151,105,153,105,154,105,157,105,158,105,159,105,160,105,161,105,162,105,163,105,164,105,165,105,166,105,169,105,170,105,172,105,174,105,175,105,176,105,178,105,179,105,181,105,182,105,184,105,185,105,186,105,188,105,189,105,190,105,191,105,192,105,194,105,195,105,196,105,197,105,198,105,199,105,200,105,201,105,203,105,205,105,207,105,209,105,210,105,211,105,213,105,214,105,215,105,216,105,217,105,218,105,220,105,221,105,222,105,225,105,226,105,227,105,228,105,229,105,230,105,231,105,232,105,233,105,234,105,235,105,236,105,238,105,239,105,240,105,241,105,243,105,244,105,245,105,246,105,247,105,248,105,249,105,250,105,251,105,252,105,254,105,0,106,1,106,2,106,3,106,4,106,5,106,6,106,7,106,8,106,9,106,11,106,12,106,13,106,14,106,15,106,16,106,17,106,18,106,19,106,20,106,21,106,22,106,25,106,26,106,27,106,28,106,29,106,30,106,32,106,34,106,35,106,36,106,37,106,38,106,39,106,41,106,43,106,44,106,45,106,46,106,48,106,50,106,51,106,52,106,54,106,55,106,56,106,57,106,58,106,59,106,60,106,63,106,64,106,65,106,66,106,67,106,69,106,70,106,72,106,73,106,74,106,75,106,76,106,77,106,78,106,79,106,81,106,82,106,83,106,84,106,85,106,86,106,87,106,90,106,92,106,93,106,94,106,95,106,96,106,98,106,99,106,100,106,102,106,103,106,104,106,105,106,106,106,107,106,108,106,109,106,110,106,111,106,112,106,114,106,115,106,116,106,117,106,118,106,119,106,120,106,122,106,123,106,125,106,126,106,127,106,129,106,130,106,131,106,133,106,134,106,135,106,136,106,137,106,138,106,139,106,140,106,141,106,143,106,146,106,147,106,148,106,149,106,150,106,152,106,153,106,154,106,155,106,156,106,157,106,158,106,159,106,161,106,162,106,163,106,164,106,165,106,166,106,167,106,168,106,170,106,173,106,174,106,175,106,176,106,177,106,178,106,179,106,180,106,181,106,182,106,183,106,184,106,185,106,186,106,187,106,188,106,189,106,190,106,191,106,192,106,193,106,194,106,195,106,196,106,197,106,198,106,199,106,200,106,201,106,202,106,203,106,204,106,205,106,206,106,207,106,208,106,209,106,210,106,211,106,212,106,213,106,214,106,215,106,216,106,217,106,218,106,219,106,220,106,221,106,222,106,223,106,224,106,225,106,226,106,227,106,228,106,229,106,230,106,231,106,232,106,233,106,234,106,235,106,236,106,237,106,238,106,239,106,240,106,241,106,242,106,243,106,244,106,245,106,246,106,247,106,248,106,249,106,250,106,251,106,252,106,253,106,254,106,255,106,0,107,1,107,2,107,3,107,4,107,5,107,6,107,7,107,8,107,9,107,10,107,11,107,12,107,13,107,14,107,15,107,16,107,17,107,18,107,19,107,20,107,21,107,22,107,23,107,24,107,25,107,26,107,27,107,28,107,29,107,30,107,31,107,37,107,38,107,40,107,41,107,42,107,43,107,44,107,45,107,46,107,47,107,48,107,49,107,51,107,52,107,53,107,54,107,56,107,59,107,60,107,61,107,63,107,64,107,65,107,66,107,68,107,69,107,72,107,74,107,75,107,77,107,78,107,79,107,80,107,81,107,82,107,83,107,84,107,85,107,86,107,87,107,88,107,90,107,91,107,92,107,93,107,94,107,95,107,96,107,97,107,104,107,105,107,107,107,108,107,109,107,110,107,111,107,112,107,113,107,114,107,115,107,116,107,117,107,118,107,119,107,120,107,122,107,125,107,126,107,127,107,128,107,133,107,136,107,140,107,142,107,143,107,144,107,145,107,148,107,149,107,151,107,152,107,153,107,156,107,157,107,158,107,159,107,160,107,162,107,163,107,164,107,165,107,166,107,167,107,168,107,169,107,171,107,172,107,173,107,174,107,175,107,176,107,177,107,178,107,182,107,184,107,185,107,186,107,187,107,188,107,189,107,190,107,192,107,195,107,196,107,198,107,199,107,200,107,201,107,202,107,204,107,206,107,208,107,209,107,216,107,218,107,220,107,221,107,222,107,223,107,224,107,226,107,227,107,228,107,229,107,230,107,231,107,232,107,233,107,236,107,237,107,238,107,240,107,241,107,242,107,244,107,246,107,247,107,248,107,250,107,251,107,252,107,254,107,255,107,0,108,1,108,2,108,3,108,4,108,8,108,9,108,10,108,11,108,12,108,14,108,18,108,23,108,28,108,29,108,30,108,32,108,35,108,37,108,43,108,44,108,45,108,49,108,51,108,54,108,55,108,57,108,58,108,59,108,60,108,62,108,63,108,67,108,68,108,69,108,72,108,75,108,76,108,77,108,78,108,79,108,81,108,82,108,83,108,86,108,88,108,89,108,90,108,98,108,99,108,101,108,102,108,103,108,107,108,108,108,109,108,110,108,111,108,113,108,115,108,117,108,119,108,120,108,122,108,123,108,124,108,127,108,128,108,132,108,135,108,138,108,139,108,141,108,142,108,145,108,146,108,149,108,150,108,151,108,152,108,154,108,156,108,157,108,158,108,160,108,162,108,168,108,172,108,175,108,176,108,180,108,181,108,182,108,183,108,186,108,192,108,193,108,194,108,195,108,198,108,199,108,200,108,203,108,205,108,206,108,207,108,209,108,210,108,216,108,217,108,218,108,220,108,221,108,223,108,228,108,230,108,231,108,233,108,236,108,237,108,242,108,244,108,249,108,255,108,0,109,2,109,3,109,5,109,6,109,8,109,9,109,10,109,13,109,15,109,16,109,17,109,19,109,20,109,21,109,22,109,24,109,28,109,29,109,31,109,32,109,33,109,34,109,35,109,36,109,38,109,40,109,41,109,44,109,45,109,47,109,48,109,52,109,54,109,55,109,56,109,58,109,63,109,64,109,66,109,68,109,73,109,76,109,80,109,85,109,86,109,87,109,88,109,91,109,93,109,95,109,97,109,98,109,100,109,101,109,103,109,104,109,107,109,108,109,109,109,112,109,113,109,114,109,115,109,117,109,118,109,121,109,122,109,123,109,125,109,126,109,127,109,128,109,129,109,131,109,132,109,134,109,135,109,138,109,139,109,141,109,143,109,144,109,146,109,150,109,151,109,152,109,153,109,154,109,156,109,162,109,165,109,172,109,173,109,176,109,177,109,179,109,180,109,182,109,183,109,185,109,186,109,187,109,188,109,189,109,190,109,193,109,194,109,195,109,200,109,201,109,202,109,205,109,206,109,207,109,208,109,210,109,211,109,212,109,213,109,215,109,218,109,219,109,220,109,223,109,226,109,227,109,229,109,231,109,232,109,233,109,234,109,237,109,239,109,240,109,242,109,244,109,245,109,246,109,248,109,250,109,253,109,254,109,255,109,0,110,1,110,2,110,3,110,4,110,6,110,7,110,8,110,9,110,11,110,15,110,18,110,19,110,21,110,24,110,25,110,27,110,28,110,30,110,31,110,34,110,38,110,39,110,40,110,42,110,44,110,46,110,48,110,49,110,51,110,53,110,54,110,55,110,57,110,59,110,60,110,61,110,62,110,63,110,64,110,65,110,66,110,69,110,70,110,71,110,72,110,73,110,74,110,75,110,76,110,79,110,80,110,81,110,82,110,85,110,87,110,89,110,90,110,92,110,93,110,94,110,96,110,97,110,98,110,99,110,100,110,101,110,102,110,103,110,104,110,105,110,106,110,108,110,109,110,111,110,112,110,113,110,114,110,115,110,116,110,117,110,118,110,119,110,120,110,121,110,122,110,123,110,124,110,125,110,128,110,129,110,130,110,132,110,135,110,136,110,138,110,139,110,140,110,141,110,142,110,145,110,146,110,147,110,148,110,149,110,150,110,151,110,153,110,154,110,155,110,157,110,158,110,160,110,161,110,163,110,164,110,166,110,168,110,169,110,171,110,172,110,173,110,174,110,176,110,179,110,181,110,184,110,185,110,188,110,190,110,191,110,192,110,195,110,196,110,197,110,198,110,200,110,201,110,202,110,204,110,205,110,206,110,208,110,210,110,214,110,216,110,217,110,219,110,220,110,221,110,227,110,231,110,234,110,235,110,236,110,237,110,238,110,239,110,240,110,241,110,242,110,243,110,245,110,246,110,247,110,248,110,250,110,251,110,252,110,253,110,254,110,255,110,0,111,1,111,3,111,4,111,5,111,7,111,8,111,10,111,11,111,12,111,13,111,14,111,16,111,17,111,18,111,22,111,23,111,24,111,25,111,26,111,27,111,28,111,29,111,30,111,31,111,33,111,34,111,35,111,37,111,38,111,39,111,40,111,44,111,46,111,48,111,50,111,52,111,53,111,55,111,56,111,57,111,58,111,59,111,60,111,61,111,63,111,64,111,65,111,66,111,67,111,68,111,69,111,72,111,73,111,74,111,76,111,78,111,79,111,80,111,81,111,82,111,83,111,84,111,85,111,86,111,87,111,89,111,90,111,91,111,93,111,95,111,96,111,97,111,99,111,100,111,101,111,103,111,104,111,105,111,106,111,107,111,108,111,111,111,112,111,113,111,115,111,117,111,118,111,119,111,121,111,123,111,125,111,126,111,127,111,128,111,129,111,130,111,131,111,133,111,134,111,135,111,138,111,139,111,143,111,144,111,145,111,146,111,147,111,148,111,149,111,150,111,151,111,152,111,153,111,154,111,155,111,157,111,158,111,159,111,160,111,162,111,163,111,164,111,165,111,166,111,168,111,169,111,170,111,171,111,172,111,173,111,174,111,175,111,176,111,177,111,178,111,180,111,181,111,183,111,184,111,186,111,187,111,188,111,189,111,190,111,191,111,193,111,195,111,196,111,197,111,198,111,199,111,200,111,202,111,203,111,204,111,205,111,206,111,207,111,208,111,211,111,212,111,213,111,214,111,215,111,216,111,217,111,218,111,219,111,220,111,221,111,223,111,226,111,227,111,228,111,229,111,230,111,231,111,232,111,233,111,234,111,235,111,236,111,237,111,240,111,241,111,242,111,243,111,244,111,245,111,246,111,247,111,248,111,249,111,250,111,251,111,252,111,253,111,254,111,255,111,0,112,1,112,2,112,3,112,4,112,5,112,6,112,7,112,8,112,9,112,10,112,11,112,12,112,13,112,14,112,15,112,16,112,18,112,19,112,20,112,21,112,22,112,23,112,24,112,25,112,28,112,29,112,30,112,31,112,32,112,33,112,34,112,36,112,37,112,38,112,39,112,40,112,41,112,42,112,43,112,44,112,45,112,46,112,47,112,48,112,49,112,50,112,51,112,52,112,54,112,55,112,56,112,58,112,59,112,60,112,61,112,62,112,63,112,64,112,65,112,66,112,67,112,68,112,69,112,70,112,71,112,72,112,73,112,74,112,75,112,77,112,78,112,80,112,81,112,82,112,83,112,84,112,85,112,86,112,87,112,88,112,89,112,90,112,91,112,92,112,93,112,95,112,96,112,97,112,98,112,99,112,100,112,101,112,102,112,103,112,104,112,105,112,106,112,110,112,113,112,114,112,115,112,116,112,119,112,121,112,122,112,123,112,125,112,129,112,130,112,131,112,132,112,134,112,135,112,136,112,139,112,140,112,141,112,143,112,144,112,145,112,147,112,151,112,152,112,154,112,155,112,158,112,159,112,160,112,161,112,162,112,163,112,164,112,165,112,166,112,167,112,168,112,169,112,170,112,176,112,178,112,180,112,181,112,182,112,186,112,190,112,191,112,196,112,197,112,198,112,199,112,201,112,203,112,204,112,205,112,206,112,207,112,208,112,209,112,210,112,211,112,212,112,213,112,214,112,215,112,218,112,220,112,221,112,222,112,224,112,225,112,226,112,227,112,229,112,234,112,238,112,240,112,241,112,242,112,243,112,244,112,245,112,246,112,248,112,250,112,251,112,252,112,254,112,255,112,0,113,1,113,2,113,3,113,4,113,5,113,6,113,7,113,8,113,11,113,12,113,13,113,14,113,15,113,17,113,18,113,20,113,23,113,27,113,28,113,29,113,30,113,31,113,32,113,33,113,34,113,35,113,36,113,37,113,39,113,40,113,41,113,42,113,43,113,44,113,45,113,46,113,50,113,51,113,52,113,53,113,55,113,56,113,57,113,58,113,59,113,60,113,61,113,62,113,63,113,64,113,65,113,66,113,67,113,68,113,70,113,71,113,72,113,73,113,75,113,77,113,79,113,80,113,81,113,82,113,83,113,84,113,85,113,86,113,87,113,88,113,89,113,90,113,91,113,93,113,95,113,96,113,97,113,98,113,99,113,101,113,105,113,106,113,107,113,108,113,109,113,111,113,112,113,113,113,116,113,117,113,118,113,119,113,121,113,123,113,124,113,126,113,127,113,128,113,129,113,130,113,131,113,133,113,134,113,135,113,136,113,137,113,139,113,140,113,141,113,142,113,144,113,145,113,146,113,147,113,149,113,150,113,151,113,154,113,155,113,156,113,157,113,158,113,161,113,162,113,163,113,164,113,165,113,166,113,167,113,169,113,170,113,171,113,173,113,174,113,175,113,176,113,177,113,178,113,180,113,182,113,183,113,184,113,186,113,187,113,188,113,189,113,190,113,191,113,192,113,193,113,194,113,196,113,197,113,198,113,199,113,200,113,201,113,202,113,203,113,204,113,205,113,207,113,208,113,209,113,210,113,211,113,214,113,215,113,216,113,217,113,218,113,219,113,220,113,221,113,222,113,223,113,225,113,226,113,227,113,228,113,230,113,232,113,233,113,234,113,235,113,236,113,237,113,239,113,240,113,241,113,242,113,243,113,244,113,245,113,246,113,247,113,248,113,250,113,251,113,252,113,253,113,254,113,255,113,0,114,1,114,2,114,3,114,4,114,5,114,7,114,8,114,9,114,10,114,11,114,12,114,13,114,14,114,15,114,16,114,17,114,18,114,19,114,20,114,21,114,22,114,23,114,24,114,25,114,26,114,27,114,28,114,30,114,31,114,32,114,33,114,34,114,35,114,36,114,37,114,38,114,39,114,41,114,43,114,45,114,46,114,47,114,50,114,51,114,52,114,58,114,60,114,62,114,64,114,65,114,66,114,67,114,68,114,69,114,70,114,73,114,74,114,75,114,78,114,79,114,80,114,81,114,83,114,84,114,85,114,87,114,88,114,90,114,92,114,94,114,96,114,99,114,100,114,101,114,104,114,106,114,107,114,108,114,109,114,112,114,113,114,115,114,116,114,118,114,119,114,120,114,123,114,124,114,125,114,130,114,131,114,133,114,134,114,135,114,136,114,137,114,140,114,142,114,144,114,145,114,147,114,148,114,149,114,150,114,151,114,152,114,153,114,154,114,155,114,156,114,157,114,158,114,160,114,161,114,162,114,163,114,164,114,165,114,166,114,167,114,168,114,169,114,170,114,171,114,174,114,177,114,178,114,179,114,181,114,186,114,187,114,188,114,189,114,190,114,191,114,192,114,197,114,198,114,199,114,201,114,202,114,203,114,204,114,207,114,209,114,211,114,212,114,213,114,214,114,216,114,218,114,219,114,198,228,199,228,200,228,201,228,202,228,203,228,204,228,205,228,206,228,207,228,208,228,209,228,210,228,211,228,212,228,213,228,214,228,215,228,216,228,217,228,218,228,219,228,220,228,221,228,222,228,223,228,224,228,225,228,226,228,227,228,228,228,229,228,230,228,231,228,232,228,233,228,234,228,235,228,236,228,237,228,238,228,239,228,240,228,241,228,242,228,243,228,244,228,245,228,246,228,247,228,248,228,249,228,250,228,251,228,252,228,253,228,254,228,255,228,0,229,1,229,2,229,3,229,4,229,5,229,6,229,7,229,8,229,9,229,10,229,11,229,12,229,13,229,14,229,15,229,16,229,17,229,18,229,19,229,20,229,21,229,22,229,23,229,24,229,25,229,26,229,27,229,28,229,29,229,30,229,31,229,32,229,33,229,34,229,35,229,36,229,37,229,0,48,1,48,2,48,183,0,201,2,199,2,168,0,3,48,5,48,20,32,94,255,22,32,38,32,24,32,25,32,28,32,29,32,20,48,21,48,8,48,9,48,10,48,11,48,12,48,13,48,14,48,15,48,22,48,23,48,16,48,17,48,177,0,215,0,247,0,54,34,39,34,40,34,17,34,15,34,42,34,41,34,8,34,55,34,26,34,165,34,37,34,32,34,18,35,153,34,43,34,46,34,97,34,76,34,72,34,61,34,29,34,96,34,110,34,111,34,100,34,101,34,30,34,53,34,52,34,66,38,64,38,176,0,50,32,51,32,3,33,4,255,164,0,224,255,225,255,48,32,167,0,22,33,6,38,5,38,203,37,207,37,206,37,199,37,198,37,161,37,160,37,179,37,178,37,59,32,146,33,144,33,145,33,147,33,19,48,38,229,39,229,40,229,41,229,42,229,43,229,44,229,45,229,46,229,47,229,48,229,49,229,50,229,51,229,52,229,53,229,54,229,55,229,56,229,57,229,58,229,59,229,60,229,61,229,62,229,63,229,64,229,65,229,66,229,67,229,68,229,69,229,70,229,71,229,72,229,73,229,74,229,75,229,76,229,77,229,78,229,79,229,80,229,81,229,82,229,83,229,84,229,85,229,86,229,87,229,88,229,89,229,90,229,91,229,92,229,93,229,94,229,95,229,96,229,97,229,98,229,99,229,100,229,101,229,102,229,103,229,104,229,105,229,106,229,107,229,108,229,109,229,110,229,111,229,112,229,113,229,114,229,115,229,116,229,117,229,118,229,119,229,120,229,121,229,122,229,123,229,124,229,125,229,126,229,127,229,128,229,129,229,130,229,131,229,132,229,133,229,112,33,113,33,114,33,115,33,116,33,117,33,118,33,119,33,120,33,121,33,102,231,103,231,104,231,105,231,106,231,107,231,136,36,137,36,138,36,139,36,140,36,141,36,142,36,143,36,144,36,145,36,146,36,147,36,148,36,149,36,150,36,151,36,152,36,153,36,154,36,155,36,116,36,117,36,118,36,119,36,120,36,121,36,122,36,123,36,124,36,125,36,126,36,127,36,128,36,129,36,130,36,131,36,132,36,133,36,134,36,135,36,96,36,97,36,98,36,99,36,100,36,101,36,102,36,103,36,104,36,105,36,172,32,109,231,32,50,33,50,34,50,35,50,36,50,37,50,38,50,39,50,40,50,41,50,110,231,111,231,96,33,97,33,98,33,99,33,100,33,101,33,102,33,103,33,104,33,105,33,106,33,107,33,112,231,113,231,134,229,135,229,136,229,137,229,138,229,139,229,140,229,141,229,142,229,143,229,144,229,145,229,146,229,147,229,148,229,149,229,150,229,151,229,152,229,153,229,154,229,155,229,156,229,157,229,158,229,159,229,160,229,161,229,162,229,163,229,164,229,165,229,166,229,167,229,168,229,169,229,170,229,171,229,172,229,173,229,174,229,175,229,176,229,177,229,178,229,179,229,180,229,181,229,182,229,183,229,184,229,185,229,186,229,187,229,188,229,189,229,190,229,191,229,192,229,193,229,194,229,195,229,196,229,197,229,198,229,199,229,200,229,201,229,202,229,203,229,204,229,205,229,206,229,207,229,208,229,209,229,210,229,211,229,212,229,213,229,214,229,215,229,216,229,217,229,218,229,219,229,220,229,221,229,222,229,223,229,224,229,225,229,226,229,227,229,228,229,229,229,1,255,2,255,3,255,229,255,5,255,6,255,7,255,8,255,9,255,10,255,11,255,12,255,13,255,14,255,15,255,16,255,17,255,18,255,19,255,20,255,21,255,22,255,23,255,24,255,25,255,26,255,27,255,28,255,29,255,30,255,31,255,32,255,33,255,34,255,35,255,36,255,37,255,38,255,39,255,40,255,41,255,42,255,43,255,44,255,45,255,46,255,47,255,48,255,49,255,50,255,51,255,52,255,53,255,54,255,55,255,56,255,57,255,58,255,59,255,60,255,61,255,62,255,63,255,64,255,65,255,66,255,67,255,68,255,69,255,70,255,71,255,72,255,73,255,74,255,75,255,76,255,77,255,78,255,79,255,80,255,81,255,82,255,83,255,84,255,85,255,86,255,87,255,88,255,89,255,90,255,91,255,92,255,93,255,227,255,230,229,231,229,232,229,233,229,234,229,235,229,236,229,237,229,238,229,239,229,240,229,241,229,242,229,243,229,244,229,245,229,246,229,247,229,248,229,249,229,250,229,251,229,252,229,253,229,254,229,255,229,0,230,1,230,2,230,3,230,4,230,5,230,6,230,7,230,8,230,9,230,10,230,11,230,12,230,13,230,14,230,15,230,16,230,17,230,18,230,19,230,20,230,21,230,22,230,23,230,24,230,25,230,26,230,27,230,28,230,29,230,30,230,31,230,32,230,33,230,34,230,35,230,36,230,37,230,38,230,39,230,40,230,41,230,42,230,43,230,44,230,45,230,46,230,47,230,48,230,49,230,50,230,51,230,52,230,53,230,54,230,55,230,56,230,57,230,58,230,59,230,60,230,61,230,62,230,63,230,64,230,65,230,66,230,67,230,68,230,69,230,65,48,66,48,67,48,68,48,69,48,70,48,71,48,72,48,73,48,74,48,75,48,76,48,77,48,78,48,79,48,80,48,81,48,82,48,83,48,84,48,85,48,86,48,87,48,88,48,89,48,90,48,91,48,92,48,93,48,94,48,95,48,96,48,97,48,98,48,99,48,100,48,101,48,102,48,103,48,104,48,105,48,106,48,107,48,108,48,109,48,110,48,111,48,112,48,113,48,114,48,115,48,116,48,117,48,118,48,119,48,120,48,121,48,122,48,123,48,124,48,125,48,126,48,127,48,128,48,129,48,130,48,131,48,132,48,133,48,134,48,135,48,136,48,137,48,138,48,139,48,140,48,141,48,142,48,143,48,144,48,145,48,146,48,147,48,114,231,115,231,116,231,117,231,118,231,119,231,120,231,121,231,122,231,123,231,124,231,70,230,71,230,72,230,73,230,74,230,75,230,76,230,77,230,78,230,79,230,80,230,81,230,82,230,83,230,84,230,85,230,86,230,87,230,88,230,89,230,90,230,91,230,92,230,93,230,94,230,95,230,96,230,97,230,98,230,99,230,100,230,101,230,102,230,103,230,104,230,105,230,106,230,107,230,108,230,109,230,110,230,111,230,112,230,113,230,114,230,115,230,116,230,117,230,118,230,119,230,120,230,121,230,122,230,123,230,124,230,125,230,126,230,127,230,128,230,129,230,130,230,131,230,132,230,133,230,134,230,135,230,136,230,137,230,138,230,139,230,140,230,141,230,142,230,143,230,144,230,145,230,146,230,147,230,148,230,149,230,150,230,151,230,152,230,153,230,154,230,155,230,156,230,157,230,158,230,159,230,160,230,161,230,162,230,163,230,164,230,165,230,161,48,162,48,163,48,164,48,165,48,166,48,167,48,168,48,169,48,170,48,171,48,172,48,173,48,174,48,175,48,176,48,177,48,178,48,179,48,180,48,181,48,182,48,183,48,184,48,185,48,186,48,187,48,188,48,189,48,190,48,191,48,192,48,193,48,194,48,195,48,196,48,197,48,198,48,199,48,200,48,201,48,202,48,203,48,204,48,205,48,206,48,207,48,208,48,209,48,210,48,211,48,212,48,213,48,214,48,215,48,216,48,217,48,218,48,219,48,220,48,221,48,222,48,223,48,224,48,225,48,226,48,227,48,228,48,229,48,230,48,231,48,232,48,233,48,234,48,235,48,236,48,237,48,238,48,239,48,240,48,241,48,242,48,243,48,244,48,245,48,246,48,125,231,126,231,127,231,128,231,129,231,130,231,131,231,132,231,166,230,167,230,168,230,169,230,170,230,171,230,172,230,173,230,174,230,175,230,176,230,177,230,178,230,179,230,180,230,181,230,182,230,183,230,184,230,185,230,186,230,187,230,188,230,189,230,190,230,191,230,192,230,193,230,194,230,195,230,196,230,197,230,198,230,199,230,200,230,201,230,202,230,203,230,204,230,205,230,206,230,207,230,208,230,209,230,210,230,211,230,212,230,213,230,214,230,215,230,216,230,217,230,218,230,219,230,220,230,221,230,222,230,223,230,224,230,225,230,226,230,227,230,228,230,229,230,230,230,231,230,232,230,233,230,234,230,235,230,236,230,237,230,238,230,239,230,240,230,241,230,242,230,243,230,244,230,245,230,246,230,247,230,248,230,249,230,250,230,251,230,252,230,253,230,254,230,255,230,0,231,1,231,2,231,3,231,4,231,5,231,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154,3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,133,231,134,231,135,231,136,231,137,231,138,231,139,231,140,231,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,141,231,142,231,143,231,144,231,145,231,146,231,147,231,53,254,54,254,57,254,58,254,63,254,64,254,61,254,62,254,65,254,66,254,67,254,68,254,148,231,149,231,59,254,60,254,55,254,56,254,49,254,150,231,51,254,52,254,151,231,152,231,153,231,154,231,155,231,156,231,157,231,158,231,159,231,6,231,7,231,8,231,9,231,10,231,11,231,12,231,13,231,14,231,15,231,16,231,17,231,18,231,19,231,20,231,21,231,22,231,23,231,24,231,25,231,26,231,27,231,28,231,29,231,30,231,31,231,32,231,33,231,34,231,35,231,36,231,37,231,38,231,39,231,40,231,41,231,42,231,43,231,44,231,45,231,46,231,47,231,48,231,49,231,50,231,51,231,52,231,53,231,54,231,55,231,56,231,57,231,58,231,59,231,60,231,61,231,62,231,63,231,64,231,65,231,66,231,67,231,68,231,69,231,70,231,71,231,72,231,73,231,74,231,75,231,76,231,77,231,78,231,79,231,80,231,81,231,82,231,83,231,84,231,85,231,86,231,87,231,88,231,89,231,90,231,91,231,92,231,93,231,94,231,95,231,96,231,97,231,98,231,99,231,100,231,101,231,16,4,17,4,18,4,19,4,20,4,21,4,1,4,22,4,23,4,24,4,25,4,26,4,27,4,28,4,29,4,30,4,31,4,32,4,33,4,34,4,35,4,36,4,37,4,38,4,39,4,40,4,41,4,42,4,43,4,44,4,45,4,46,4,47,4,160,231,161,231,162,231,163,231,164,231,165,231,166,231,167,231,168,231,169,231,170,231,171,231,172,231,173,231,174,231,48,4,49,4,50,4,51,4,52,4,53,4,81,4,54,4,55,4,56,4,57,4,58,4,59,4,60,4,61,4,62,4,63,4,64,4,65,4,66,4,67,4,68,4,69,4,70,4,71,4,72,4,73,4,74,4,75,4,76,4,77,4,78,4,79,4,175,231,176,231,177,231,178,231,179,231,180,231,181,231,182,231,183,231,184,231,185,231,186,231,187,231,202,2,203,2,217,2,19,32,21,32,37,32,53,32,5,33,9,33,150,33,151,33,152,33,153,33,21,34,31,34,35,34,82,34,102,34,103,34,191,34,80,37,81,37,82,37,83,37,84,37,85,37,86,37,87,37,88,37,89,37,90,37,91,37,92,37,93,37,94,37,95,37,96,37,97,37,98,37,99,37,100,37,101,37,102,37,103,37,104,37,105,37,106,37,107,37,108,37,109,37,110,37,111,37,112,37,113,37,114,37,115,37,129,37,130,37,131,37,132,37,133,37,134,37,135,37,136,37,137,37,138,37,139,37,140,37,141,37,142,37,143,37,147,37,148,37,149,37,188,37,189,37,226,37,227,37,228,37,229,37,9,38,149,34,18,48,29,48,30,48,188,231,189,231,190,231,191,231,192,231,193,231,194,231,195,231,196,231,197,231,198,231,1,1,225,0,206,1,224,0,19,1,233,0,27,1,232,0,43,1,237,0,208,1,236,0,77,1,243,0,210,1,242,0,107,1,250,0,212,1,249,0,214,1,216,1,218,1,220,1,252,0,234,0,81,2,199,231,68,1,72,1,249,1,97,2,201,231,202,231,203,231,204,231,5,49,6,49,7,49,8,49,9,49,10,49,11,49,12,49,13,49,14,49,15,49,16,49,17,49,18,49,19,49,20,49,21,49,22,49,23,49,24,49,25,49,26,49,27,49,28,49,29,49,30,49,31,49,32,49,33,49,34,49,35,49,36,49,37,49,38,49,39,49,40,49,41,49,205,231,206,231,207,231,208,231,209,231,210,231,211,231,212,231,213,231,214,231,215,231,216,231,217,231,218,231,219,231,220,231,221,231,222,231,223,231,224,231,225,231,33,48,34,48,35,48,36,48,37,48,38,48,39,48,40,48,41,48,163,50,142,51,143,51,156,51,157,51,158,51,161,51,196,51,206,51,209,51,210,51,213,51,48,254,226,255,228,255,226,231,33,33,49,50,227,231,16,32,228,231,229,231,230,231,252,48,155,48,156,48,253,48,254,48,6,48,157,48,158,48,73,254,74,254,75,254,76,254,77,254,78,254,79,254,80,254,81,254,82,254,84,254,85,254,86,254,87,254,89,254,90,254,91,254,92,254,93,254,94,254,95,254,96,254,97,254,98,254,99,254,100,254,101,254,102,254,104,254,105,254,106,254,107,254,62,48,240,47,241,47,242,47,243,47,244,47,245,47,246,47,247,47,248,47,249,47,250,47,251,47,7,48,244,231,245,231,246,231,247,231,248,231,249,231,250,231,251,231,252,231,253,231,254,231,255,231,0,232,0,37,1,37,2,37,3,37,4,37,5,37,6,37,7,37,8,37,9,37,10,37,11,37,12,37,13,37,14,37,15,37,16,37,17,37,18,37,19,37,20,37,21,37,22,37,23,37,24,37,25,37,26,37,27,37,28,37,29,37,30,37,31,37,32,37,33,37,34,37,35,37,36,37,37,37,38,37,39,37,40,37,41,37,42,37,43,37,44,37,45,37,46,37,47,37,48,37,49,37,50,37,51,37,52,37,53,37,54,37,55,37,56,37,57,37,58,37,59,37,60,37,61,37,62,37,63,37,64,37,65,37,66,37,67,37,68,37,69,37,70,37,71,37,72,37,73,37,74,37,75,37,1,232,2,232,3,232,4,232,5,232,6,232,7,232,8,232,9,232,10,232,11,232,12,232,13,232,14,232,15,232,220,114,221,114,223,114,226,114,227,114,228,114,229,114,230,114,231,114,234,114,235,114,245,114,246,114,249,114,253,114,254,114,255,114,0,115,2,115,4,115,5,115,6,115,7,115,8,115,9,115,11,115,12,115,13,115,15,115,16,115,17,115,18,115,20,115,24,115,25,115,26,115,31,115,32,115,35,115,36,115,38,115,39,115,40,115,45,115,47,115,48,115,50,115,51,115,53,115,54,115,58,115,59,115,60,115,61,115,64,115,65,115,66,115,67,115,68,115,69,115,70,115,71,115,72,115,73,115,74,115,75,115,76,115,78,115,79,115,81,115,83,115,84,115,85,115,86,115,88,115,89,115,90,115,91,115,92,115,93,115,94,115,95,115,97,115,98,115,99,115,100,115,101,115,102,115,103,115,104,115,105,115,106,115,107,115,110,115,112,115,113,115,0,224,1,224,2,224,3,224,4,224,5,224,6,224,7,224,8,224,9,224,10,224,11,224,12,224,13,224,14,224,15,224,16,224,17,224,18,224,19,224,20,224,21,224,22,224,23,224,24,224,25,224,26,224,27,224,28,224,29,224,30,224,31,224,32,224,33,224,34,224,35,224,36,224,37,224,38,224,39,224,40,224,41,224,42,224,43,224,44,224,45,224,46,224,47,224,48,224,49,224,50,224,51,224,52,224,53,224,54,224,55,224,56,224,57,224,58,224,59,224,60,224,61,224,62,224,63,224,64,224,65,224,66,224,67,224,68,224,69,224,70,224,71,224,72,224,73,224,74,224,75,224,76,224,77,224,78,224,79,224,80,224,81,224,82,224,83,224,84,224,85,224,86,224,87,224,88,224,89,224,90,224,91,224,92,224,93,224,114,115,115,115,116,115,117,115,118,115,119,115,120,115,121,115,122,115,123,115,124,115,125,115,127,115,128,115,129,115,130,115,131,115,133,115,134,115,136,115,138,115,140,115,141,115,143,115,144,115,146,115,147,115,148,115,149,115,151,115,152,115,153,115,154,115,156,115,157,115,158,115,160,115,161,115,163,115,164,115,165,115,166,115,167,115,168,115,170,115,172,115,173,115,177,115,180,115,181,115,182,115,184,115,185,115,188,115,189,115,190,115,191,115,193,115,195,115,196,115,197,115,198,115,199,115,203,115,204,115,206,115,210,115,211,115,212,115,213,115,214,115,215,115,216,115,218,115,219,115,220,115,221,115,223,115,225,115,226,115,227,115,228,115,230,115,232,115,234,115,235,115,236,115,238,115,239,115,240,115,241,115,243,115,244,115,245,115,246,115,247,115,94,224,95,224,96,224,97,224,98,224,99,224,100,224,101,224,102,224,103,224,104,224,105,224,106,224,107,224,108,224,109,224,110,224,111,224,112,224,113,224,114,224,115,224,116,224,117,224,118,224,119,224,120,224,121,224,122,224,123,224,124,224,125,224,126,224,127,224,128,224,129,224,130,224,131,224,132,224,133,224,134,224,135,224,136,224,137,224,138,224,139,224,140,224,141,224,142,224,143,224,144,224,145,224,146,224,147,224,148,224,149,224,150,224,151,224,152,224,153,224,154,224,155,224,156,224,157,224,158,224,159,224,160,224,161,224,162,224,163,224,164,224,165,224,166,224,167,224,168,224,169,224,170,224,171,224,172,224,173,224,174,224,175,224,176,224,177,224,178,224,179,224,180,224,181,224,182,224,183,224,184,224,185,224,186,224,187,224,248,115,249,115,250,115,251,115,252,115,253,115,254,115,255,115,0,116,1,116,2,116,4,116,7,116,8,116,11,116,12,116,13,116,14,116,17,116,18,116,19,116,20,116,21,116,22,116,23,116,24,116,25,116,28,116,29,116,30,116,31,116,32,116,33,116,35,116,36,116,39,116,41,116,43,116,45,116,47,116,49,116,50,116,55,116,56,116,57,116,58,116,59,116,61,116,62,116,63,116,64,116,66,116,67,116,68,116,69,116,70,116,71,116,72,116,73,116,74,116,75,116,76,116,77,116,78,116,79,116,80,116,81,116,82,116,83,116,84,116,86,116,88,116,93,116,96,116,97,116,98,116,99,116,100,116,101,116,102,116,103,116,104,116,105,116,106,116,107,116,108,116,110,116,111,116,113,116,114,116,115,116,116,116,117,116,120,116,121,116,122,116,188,224,189,224,190,224,191,224,192,224,193,224,194,224,195,224,196,224,197,224,198,224,199,224,200,224,201,224,202,224,203,224,204,224,205,224,206,224,207,224,208,224,209,224,210,224,211,224,212,224,213,224,214,224,215,224,216,224,217,224,218,224,219,224,220,224,221,224,222,224,223,224,224,224,225,224,226,224,227,224,228,224,229,224,230,224,231,224,232,224,233,224,234,224,235,224,236,224,237,224,238,224,239,224,240,224,241,224,242,224,243,224,244,224,245,224,246,224,247,224,248,224,249,224,250,224,251,224,252,224,253,224,254,224,255,224,0,225,1,225,2,225,3,225,4,225,5,225,6,225,7,225,8,225,9,225,10,225,11,225,12,225,13,225,14,225,15,225,16,225,17,225,18,225,19,225,20,225,21,225,22,225,23,225,24,225,25,225,123,116,124,116,125,116,127,116,130,116,132,116,133,116,134,116,136,116,137,116,138,116,140,116,141,116,143,116,145,116,146,116,147,116,148,116,149,116,150,116,151,116,152,116,153,116,154,116,155,116,157,116,159,116,160,116,161,116,162,116,163,116,164,116,165,116,166,116,170,116,171,116,172,116,173,116,174,116,175,116,176,116,177,116,178,116,179,116,180,116,181,116,182,116,183,116,184,116,185,116,187,116,188,116,189,116,190,116,191,116,192,116,193,116,194,116,195,116,196,116,197,116,198,116,199,116,200,116,201,116,202,116,203,116,204,116,205,116,206,116,207,116,208,116,209,116,211,116,212,116,213,116,214,116,215,116,216,116,217,116,218,116,219,116,221,116,223,116,225,116,229,116,231,116,232,116,233,116,234,116,235,116,236,116,237,116,240,116,241,116,242,116,26,225,27,225,28,225,29,225,30,225,31,225,32,225,33,225,34,225,35,225,36,225,37,225,38,225,39,225,40,225,41,225,42,225,43,225,44,225,45,225,46,225,47,225,48,225,49,225,50,225,51,225,52,225,53,225,54,225,55,225,56,225,57,225,58,225,59,225,60,225,61,225,62,225,63,225,64,225,65,225,66,225,67,225,68,225,69,225,70,225,71,225,72,225,73,225,74,225,75,225,76,225,77,225,78,225,79,225,80,225,81,225,82,225,83,225,84,225,85,225,86,225,87,225,88,225,89,225,90,225,91,225,92,225,93,225,94,225,95,225,96,225,97,225,98,225,99,225,100,225,101,225,102,225,103,225,104,225,105,225,106,225,107,225,108,225,109,225,110,225,111,225,112,225,113,225,114,225,115,225,116,225,117,225,118,225,119,225,243,116,245,116,248,116,249,116,250,116,251,116,252,116,253,116,254,116,0,117,1,117,2,117,3,117,5,117,6,117,7,117,8,117,9,117,10,117,11,117,12,117,14,117,16,117,18,117,20,117,21,117,22,117,23,117,27,117,29,117,30,117,32,117,33,117,34,117,35,117,36,117,38,117,39,117,42,117,46,117,52,117,54,117,57,117,60,117,61,117,63,117,65,117,66,117,67,117,68,117,70,117,71,117,73,117,74,117,77,117,80,117,81,117,82,117,83,117,85,117,86,117,87,117,88,117,93,117,94,117,95,117,96,117,97,117,98,117,99,117,100,117,103,117,104,117,105,117,107,117,108,117,109,117,110,117,111,117,112,117,113,117,115,117,117,117,118,117,119,117,122,117,123,117,124,117,125,117,126,117,128,117,129,117,130,117,132,117,133,117,135,117,120,225,121,225,122,225,123,225,124,225,125,225,126,225,127,225,128,225,129,225,130,225,131,225,132,225,133,225,134,225,135,225,136,225,137,225,138,225,139,225,140,225,141,225,142,225,143,225,144,225,145,225,146,225,147,225,148,225,149,225,150,225,151,225,152,225,153,225,154,225,155,225,156,225,157,225,158,225,159,225,160,225,161,225,162,225,163,225,164,225,165,225,166,225,167,225,168,225,169,225,170,225,171,225,172,225,173,225,174,225,175,225,176,225,177,225,178,225,179,225,180,225,181,225,182,225,183,225,184,225,185,225,186,225,187,225,188,225,189,225,190,225,191,225,192,225,193,225,194,225,195,225,196,225,197,225,198,225,199,225,200,225,201,225,202,225,203,225,204,225,205,225,206,225,207,225,208,225,209,225,210,225,211,225,212,225,213,225,136,117,137,117,138,117,140,117,141,117,142,117,144,117,147,117,149,117,152,117,155,117,156,117,158,117,162,117,166,117,167,117,168,117,169,117,170,117,173,117,182,117,183,117,186,117,187,117,191,117,192,117,193,117,198,117,203,117,204,117,206,117,207,117,208,117,209,117,211,117,215,117,217,117,218,117,220,117,221,117,223,117,224,117,225,117,229,117,233,117,236,117,237,117,238,117,239,117,242,117,243,117,245,117,246,117,247,117,248,117,250,117,251,117,253,117,254,117,2,118,4,118,6,118,7,118,8,118,9,118,11,118,13,118,14,118,15,118,17,118,18,118,19,118,20,118,22,118,26,118,28,118,29,118,30,118,33,118,35,118,39,118,40,118,44,118,46,118,47,118,49,118,50,118,54,118,55,118,57,118,58,118,59,118,61,118,65,118,66,118,68,118,214,225,215,225,216,225,217,225,218,225,219,225,220,225,221,225,222,225,223,225,224,225,225,225,226,225,227,225,228,225,229,225,230,225,231,225,232,225,233,225,234,225,235,225,236,225,237,225,238,225,239,225,240,225,241,225,242,225,243,225,244,225,245,225,246,225,247,225,248,225,249,225,250,225,251,225],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+103498);allocate([252,225,253,225,254,225,255,225,0,226,1,226,2,226,3,226,4,226,5,226,6,226,7,226,8,226,9,226,10,226,11,226,12,226,13,226,14,226,15,226,16,226,17,226,18,226,19,226,20,226,21,226,22,226,23,226,24,226,25,226,26,226,27,226,28,226,29,226,30,226,31,226,32,226,33,226,34,226,35,226,36,226,37,226,38,226,39,226,40,226,41,226,42,226,43,226,44,226,45,226,46,226,47,226,48,226,49,226,50,226,51,226,69,118,70,118,71,118,72,118,73,118,74,118,75,118,78,118,79,118,80,118,81,118,82,118,83,118,85,118,87,118,88,118,89,118,90,118,91,118,93,118,95,118,96,118,97,118,98,118,100,118,101,118,102,118,103,118,104,118,105,118,106,118,108,118,109,118,110,118,112,118,113,118,114,118,115,118,116,118,117,118,118,118,119,118,121,118,122,118,124,118,127,118,128,118,129,118,131,118,133,118,137,118,138,118,140,118,141,118,143,118,144,118,146,118,148,118,149,118,151,118,152,118,154,118,155,118,156,118,157,118,158,118,159,118,160,118,161,118,162,118,163,118,165,118,166,118,167,118,168,118,169,118,170,118,171,118,172,118,173,118,175,118,176,118,179,118,181,118,182,118,183,118,184,118,185,118,186,118,187,118,188,118,189,118,190,118,192,118,193,118,195,118,74,85,63,150,195,87,40,99,206,84,9,85,192,84,145,118,76,118,60,133,238,119,126,130,141,120,49,114,152,150,141,151,40,108,137,91,250,79,9,99,151,102,184,92,250,128,72,104,174,128,2,102,206,118,249,81,86,101,172,113,241,127,132,136,178,80,101,89,202,97,179,111,173,130,76,99,82,98,237,83,39,84,6,123,107,81,164,117,244,93,212,98,203,141,118,151,138,98,25,128,93,87,56,151,98,127,56,114,125,118,207,103,126,118,70,100,112,79,37,141,220,98,23,122,145,101,237,115,44,100,115,98,44,130,129,152,127,103,72,114,110,98,204,98,52,79,227,116,74,83,158,82,202,126,166,144,46,94,134,104,156,105,128,129,209,126,210,104,197,120,140,134,81,149,141,80,36,140,222,130,222,128,5,83,18,137,101,82,196,118,199,118,201,118,203,118,204,118,211,118,213,118,217,118,218,118,220,118,221,118,222,118,224,118,225,118,226,118,227,118,228,118,230,118,231,118,232,118,233,118,234,118,235,118,236,118,237,118,240,118,243,118,245,118,246,118,247,118,250,118,251,118,253,118,255,118,0,119,2,119,3,119,5,119,6,119,10,119,12,119,14,119,15,119,16,119,17,119,18,119,19,119,20,119,21,119,22,119,23,119,24,119,27,119,28,119,29,119,30,119,33,119,35,119,36,119,37,119,39,119,42,119,43,119,44,119,46,119,48,119,49,119,50,119,51,119,52,119,57,119,59,119,61,119,62,119,63,119,66,119,68,119,69,119,70,119,72,119,73,119,74,119,75,119,76,119,77,119,78,119,79,119,82,119,83,119,84,119,85,119,86,119,87,119,88,119,89,119,92,119,132,133,249,150,221,79,33,88,113,153,157,91,177,98,165,98,180,102,121,140,141,156,6,114,111,103,145,120,178,96,81,83,23,83,136,143,204,128,29,141,161,148,13,80,200,114,7,89,235,96,25,113,171,136,84,89,239,130,44,103,40,123,41,93,247,126,45,117,245,108,102,142,248,143,60,144,59,159,212,107,25,145,20,123,124,95,167,120,214,132,61,133,213,107,217,107,214,107,1,94,135,94,249,117,237,149,93,101,10,95,197,95,159,143,193,88,194,129,127,144,91,150,173,151,185,143,22,127,44,141,65,98,191,79,216,83,94,83,168,143,169,143,171,143,77,144,7,104,106,95,152,129,104,136,214,156,139,97,43,82,42,118,108,95,140,101,210,111,232,110,190,91,72,100,117,81,176,81,196,103,25,78,201,121,124,153,179,112,93,119,94,119,95,119,96,119,100,119,103,119,105,119,106,119,109,119,110,119,111,119,112,119,113,119,114,119,115,119,116,119,117,119,118,119,119,119,120,119,122,119,123,119,124,119,129,119,130,119,131,119,134,119,135,119,136,119,137,119,138,119,139,119,143,119,144,119,147,119,148,119,149,119,150,119,151,119,152,119,153,119,154,119,155,119,156,119,157,119,158,119,161,119,163,119,164,119,166,119,168,119,171,119,173,119,174,119,175,119,177,119,178,119,180,119,182,119,183,119,184,119,185,119,186,119,188,119,190,119,192,119,193,119,194,119,195,119,196,119,197,119,198,119,199,119,200,119,201,119,202,119,203,119,204,119,206,119,207,119,208,119,209,119,210,119,211,119,212,119,213,119,214,119,216,119,217,119,218,119,221,119,222,119,223,119,224,119,225,119,228,119,197,117,118,94,187,115,224,131,173,100,232,98,181,148,226,108,90,83,195,82,15,100,194,148,148,123,47,79,27,94,54,130,22,129,138,129,36,110,202,108,115,154,85,99,92,83,250,84,101,136,224,87,13,78,3,94,101,107,63,124,232,144,22,96,230,100,28,115,193,136,80,103,77,98,34,141,108,119,41,142,199,145,105,95,220,131,33,133,16,153,194,83,149,134,139,107,237,96,232,96,127,112,205,130,49,130,211,78,167,108,207,133,205,100,217,124,253,105,249,102,73,131,149,83,86,123,167,79,140,81,75,109,66,92,109,142,210,99,201,83,44,131,54,131,229,103,180,120,61,100,223,91,148,92,238,93,231,139,198,98,244,103,122,140,0,100,186,99,73,135,139,153,23,140,32,127,242,148,167,78,16,150,164,152,12,102,22,115,230,119,232,119,234,119,239,119,240,119,241,119,242,119,244,119,245,119,247,119,249,119,250,119,251,119,252,119,3,120,4,120,5,120,6,120,7,120,8,120,10,120,11,120,14,120,15,120,16,120,19,120,21,120,25,120,27,120,30,120,32,120,33,120,34,120,36,120,40,120,42,120,43,120,46,120,47,120,49,120,50,120,51,120,53,120,54,120,61,120,63,120,65,120,66,120,67,120,68,120,70,120,72,120,73,120,74,120,75,120,77,120,79,120,81,120,83,120,84,120,88,120,89,120,90,120,91,120,92,120,94,120,95,120,96,120,97,120,98,120,99,120,100,120,101,120,102,120,103,120,104,120,105,120,111,120,112,120,113,120,114,120,115,120,116,120,117,120,118,120,120,120,121,120,122,120,123,120,125,120,126,120,127,120,128,120,129,120,130,120,131,120,58,87,29,92,56,94,127,149,127,80,160,128,130,83,94,101,69,117,49,85,33,80,133,141,132,98,158,148,29,103,50,86,110,111,226,93,53,84,146,112,102,143,111,98,164,100,163,99,123,95,136,111,244,144,227,129,176,143,24,92,104,102,241,95,137,108,72,150,129,141,108,136,145,100,240,121,206,87,89,106,16,98,72,84,88,78,11,122,233,96,132,111,218,139,127,98,30,144,139,154,228,121,3,84,244,117,1,99,25,83,96,108,223,143,27,95,112,154,59,128,127,159,136,79,58,92,100,141,197,127,165,101,189,112,69,81,178,81,107,134,7,93,160,91,189,98,108,145,116,117,12,142,32,122,1,97,121,123,199,78,248,126,133,119,17,78,237,129,29,82,250,81,113,106,168,83,135,142,4,149,207,150,193,110,100,150,90,105,132,120,133,120,134,120,136,120,138,120,139,120,143,120,144,120,146,120,148,120,149,120,150,120,153,120,157,120,158,120,160,120,162,120,164,120,166,120,168,120,169,120,170,120,171,120,172,120,173,120,174,120,175,120,181,120,182,120,183,120,184,120,186,120,187,120,188,120,189,120,191,120,192,120,194,120,195,120,196,120,198,120,199,120,200,120,204,120,205,120,206,120,207,120,209,120,210,120,211,120,214,120,215,120,216,120,218,120,219,120,220,120,221,120,222,120,223,120,224,120,225,120,226,120,227,120,228,120,229,120,230,120,231,120,233,120,234,120,235,120,237,120,238,120,239,120,240,120,241,120,243,120,245,120,246,120,248,120,249,120,251,120,252,120,253,120,254,120,255,120,0,121,2,121,3,121,4,121,6,121,7,121,8,121,9,121,10,121,11,121,12,121,64,120,168,80,215,119,16,100,230,137,4,89,227,99,221,93,127,122,61,105,32,79,57,130,152,85,50,78,174,117,151,122,98,94,138,94,239,149,27,82,57,84,138,112,118,99,36,149,130,87,37,102,63,105,135,145,7,85,243,109,175,126,34,136,51,98,240,126,181,117,40,131,193,120,204,150,158,143,72,97,247,116,205,139,100,107,58,82,80,141,33,107,106,128,113,132,241,86,6,83,206,78,27,78,209,81,151,124,139,145,7,124,195,79,127,142,225,123,156,122,103,100,20,93,172,80,6,129,1,118,185,124,236,109,224,127,81,103,88,91,248,91,203,120,174,100,19,100,170,99,43,99,25,149,45,100,190,143,84,123,41,118,83,98,39,89,70,84,121,107,163,80,52,98,38,94,134,107,227,78,55,141,139,136,133,95,46,144,13,121,14,121,15,121,16,121,17,121,18,121,20,121,21,121,22,121,23,121,24,121,25,121,26,121,27,121,28,121,29,121,31,121,32,121,33,121,34,121,35,121,37,121,38,121,39,121,40,121,41,121,42,121,43,121,44,121,45,121,46,121,47,121,48,121,49,121,50,121,51,121,53,121,54,121,55,121,56,121,57,121,61,121,63,121,66,121,67,121,68,121,69,121,71,121,74,121,75,121,76,121,77,121,78,121,79,121,80,121,81,121,82,121,84,121,85,121,88,121,89,121,97,121,99,121,100,121,102,121,105,121,106,121,107,121,108,121,110,121,112,121,113,121,114,121,115,121,116,121,117,121,118,121,121,121,123,121,124,121,125,121,126,121,127,121,130,121,131,121,134,121,135,121,136,121,137,121,139,121,140,121,141,121,142,121,144,121,145,121,146,121,32,96,61,128,197,98,57,78,85,83,248,144,184,99,198,128,230,101,46,108,70,79,238,96,225,109,222,139,57,95,203,134,83,95,33,99,90,81,97,131,99,104,0,82,99,99,72,142,18,80,155,92,119,121,252,91,48,82,59,122,188,96,83,144,215,118,183,95,151,95,132,118,108,142,111,112,123,118,73,123,170,119,243,81,147,144,36,88,78,79,244,110,234,143,76,101,27,123,196,114,164,109,223,127,225,90,181,98,149,94,48,87,130,132,44,123,29,94,31,95,18,144,20,127,160,152,130,99,199,110,152,120,185,112,120,81,91,151,171,87,53,117,67,79,56,117,151,94,230,96,96,89,192,109,191,107,137,120,252,83,213,150,203,81,1,82,137,99,10,84,147,148,3,140,204,141,57,114,159,120,118,135,237,143,13,140,224,83,147,121,148,121,149,121,150,121,151,121,152,121,153,121,155,121,156,121,157,121,158,121,159,121,160,121,161,121,162,121,163,121,164,121,165,121,166,121,168,121,169,121,170,121,171,121,172,121,173,121,174,121,175,121,176,121,177,121,178,121,180,121,181,121,182,121,183,121,184,121,188,121,191,121,194,121,196,121,197,121,199,121,200,121,202,121,204,121,206,121,207,121,208,121,211,121,212,121,214,121,215,121,217,121,218,121,219,121,220,121,221,121,222,121,224,121,225,121,226,121,229,121,232,121,234,121,236,121,238,121,241,121,242,121,243,121,244,121,245,121,246,121,247,121,249,121,250,121,252,121,254,121,255,121,1,122,4,122,5,122,7,122,8,122,9,122,10,122,12,122,15,122,16,122,17,122,18,122,19,122,21,122,22,122,24,122,25,122,27,122,28,122,1,78,239,118,238,83,137,148,118,152,14,159,45,149,154,91,162,139,34,78,28,78,172,81,99,132,194,97,168,82,11,104,151,79,107,96,187,81,30,109,92,81,150,98,151,101,97,150,70,140,23,144,216,117,253,144,99,119,210,107,138,114,236,114,251,139,53,88,121,119,76,141,92,103,64,149,154,128,166,94,33,110,146,89,239,122,237,119,59,149,181,107,173,101,14,127,6,88,81,81,31,150,249,91,169,88,40,84,114,142,102,101,127,152,228,86,157,148,254,118,65,144,135,99,198,84,26,89,58,89,155,87,178,142,53,103,250,141,53,130,65,82,240,96,21,88,254,134,232,92,69,158,196,79,157,152,185,139,37,90,118,96,132,83,124,98,79,144,2,145,127,153,105,96,12,128,63,81,51,128,20,92,117,153,49,109,140,78,29,122,31,122,33,122,34,122,36,122,37,122,38,122,39,122,40,122,41,122,42,122,43,122,44,122,45,122,46,122,47,122,48,122,49,122,50,122,52,122,53,122,54,122,56,122,58,122,62,122,64,122,65,122,66,122,67,122,68,122,69,122,71,122,72,122,73,122,74,122,75,122,76,122,77,122,78,122,79,122,80,122,82,122,83,122,84,122,85,122,86,122,88,122,89,122,90,122,91,122,92,122,93,122,94,122,95,122,96,122,97,122,98,122,99,122,100,122,101,122,102,122,103,122,104,122,105,122,106,122,107,122,108,122,109,122,110,122,111,122,113,122,114,122,115,122,117,122,123,122,124,122,125,122,126,122,130,122,133,122,135,122,137,122,138,122,139,122,140,122,142,122,143,122,144,122,147,122,148,122,153,122,154,122,155,122,158,122,161,122,162,122,48,141,209,83,90,127,79,123,16,79,79,78,0,150,213,108,208,115,233,133,6,94,106,117,251,127,10,106,254,119,146,148,65,126,225,81,230,112,205,83,212,143,3,131,41,141,175,114,109,153,219,108,74,87,179,130,185,101,170,128,63,98,50,150,168,89,255,78,191,139,186,126,62,101,242,131,94,151,97,85,222,152,165,128,42,83,253,139,32,84,186,128,159,94,184,108,57,141,172,130,90,145,41,84,27,108,6,82,183,126,95,87,26,113,126,108,137,124,75,89,253,78,255,95,36,97,170,124,48,78,1,92,171,103,2,135,240,92,11,149,206,152,175,117,253,112,34,144,175,81,29,127,189,139,73,89,228,81,91,79,38,84,43,89,119,101,164,128,117,91,118,98,194,98,144,143,69,94,31,108,38,123,15,79,216,79,13,103,163,122,164,122,167,122,169,122,170,122,171,122,174,122,175,122,176,122,177,122,178,122,180,122,181,122,182,122,183,122,184,122,185,122,186,122,187,122,188,122,189,122,190,122,192,122,193,122,194,122,195,122,196,122,197,122,198,122,199,122,200,122,201,122,202,122,204,122,205,122,206,122,207,122,208,122,209,122,210,122,211,122,212,122,213,122,215,122,216,122,218,122,219,122,220,122,221,122,225,122,226,122,228,122,231,122,232,122,233,122,234,122,235,122,236,122,238,122,240,122,241,122,242,122,243,122,244,122,245,122,246,122,247,122,248,122,251,122,252,122,254,122,0,123,1,123,2,123,5,123,7,123,9,123,12,123,13,123,14,123,16,123,18,123,19,123,22,123,23,123,24,123,26,123,28,123,29,123,31,123,33,123,34,123,35,123,39,123,41,123,45,123,110,109,170,109,143,121,177,136,23,95,43,117,154,98,133,143,239,79,220,145,167,101,47,129,81,129,156,94,80,129,116,141,111,82,134,137,75,141,13,89,133,80,216,78,28,150,54,114,121,129,31,141,204,91,163,139,68,150,135,89,26,127,144,84,118,86,14,86,229,139,57,101,130,105,153,148,214,118,137,110,114,94,24,117,70,103,209,103,255,122,157,128,118,141,31,97,198,121,98,101,99,141,136,81,26,82,162,148,56,127,155,128,178,126,151,92,47,110,96,103,217,123,139,118,216,154,143,129,148,127,213,124,30,100,80,149,63,122,74,84,229,84,76,107,1,100,8,98,61,158,243,128,153,117,114,82,105,151,91,132,60,104,228,134,1,150,148,150,236,148,42,78,4,84,217,126,57,104,223,141,21,128,244,102,154,94,185,127,47,123,48,123,50,123,52,123,53,123,54,123,55,123,57,123,59,123,61,123,63,123,64,123,65,123,66,123,67,123,68,123,70,123,72,123,74,123,77,123,78,123,83,123,85,123,87,123,89,123,92,123,94,123,95,123,97,123,99,123,100,123,101,123,102,123,103,123,104,123,105,123,106,123,107,123,108,123,109,123,111,123,112,123,115,123,116,123,118,123,120,123,122,123,124,123,125,123,127,123,129,123,130,123,131,123,132,123,134,123,135,123,136,123,137,123,138,123,139,123,140,123,142,123,143,123,145,123,146,123,147,123,150,123,152,123,153,123,154,123,155,123,158,123,159,123,160,123,163,123,164,123,165,123,174,123,175,123,176,123,178,123,179,123,181,123,182,123,183,123,185,123,186,123,187,123,188,123,189,123,190,123,191,123,192,123,194,123,195,123,196,123,194,87,63,128,151,104,229,93,59,101,159,82,109,96,154,159,155,79,172,142,108,81,171,91,19,95,233,93,94,108,241,98,33,141,113,81,169,148,254,82,159,108,223,130,215,114,162,87,132,103,45,141,31,89,156,143,199,131,149,84,141,123,48,79,189,108,100,91,209,89,19,159,228,83,202,134,168,154,55,140,161,128,69,101,126,152,250,86,199,150,46,82,220,116,80,82,225,91,2,99,2,137,86,78,208,98,42,96,250,104,115,81,152,91,160,81,194,137,161,123,134,153,80,127,239,96,76,112,47,141,73,81,127,94,27,144,112,116,196,137,45,87,69,120,82,95,159,159,250,149,104,143,60,155,225,139,120,118,66,104,220,103,234,141,53,141,61,82,138,143,218,110,205,104,5,149,237,144,253,86,156,103,249,136,199,143,200,84,197,123,200,123,201,123,202,123,203,123,205,123,206,123,207,123,208,123,210,123,212,123,213,123,214,123,215,123,216,123,219,123,220,123,222,123,223,123,224,123,226,123,227,123,228,123,231,123,232,123,233,123,235,123,236,123,237,123,239,123,240,123,242,123,243,123,244,123,245,123,246,123,248,123,249,123,250,123,251,123,253,123,255,123,0,124,1,124,2,124,3,124,4,124,5,124,6,124,8,124,9,124,10,124,13,124,14,124,16,124,17,124,18,124,19,124,20,124,21,124,23,124,24,124,25,124,26,124,27,124,28,124,29,124,30,124,32,124,33,124,34,124,35,124,36,124,37,124,40,124,41,124,43,124,44,124,45,124,46,124,47,124,48,124,49,124,50,124,51,124,52,124,53,124,54,124,55,124,57,124,58,124,59,124,60,124,61,124,62,124,66,124,184,154,105,91,119,109,38,108,165,78,179,91,135,154,99,145,168,97,175,144,233,151,43,84,181,109,210,91,253,81,138,85,85,127,240,127,188,100,77,99,241,101,190,97,141,96,10,113,87,108,73,108,47,89,109,103,42,130,213,88,142,86,106,140,235,107,221,144,125,89,23,128,247,83,105,109,117,84,157,85,119,131,207,131,56,104,190,121,140,84,85,79,8,84,210,118,137,140,2,150,179,108,184,109,107,141,16,137,100,158,58,141,63,86,209,158,213,117,136,95,224,114,104,96,252,84,168,78,42,106,97,136,82,96,112,143,196,84,216,112,121,134,63,158,42,109,143,91,24,95,162,126,137,85,175,79,52,115,60,84,154,83,25,80,14,84,124,84,78,78,253,95,90,116,246,88,107,132,225,128,116,135,208,114,202,124,86,110,67,124,68,124,69,124,70,124,71,124,72,124,73,124,74,124,75,124,76,124,78,124,79,124,80,124,81,124,82,124,83,124,84,124,85,124,86,124,87,124,88,124,89,124,90,124,91,124,92,124,93,124,94,124,95,124,96,124,97,124,98,124,99,124,100,124,101,124,102,124,103,124,104,124,105,124,106,124,107,124,108,124,109,124,110,124,111,124,112,124,113,124,114,124,117,124,118,124,119,124,120,124,121,124,122,124,126,124,127,124,128,124,129,124,130,124,131,124,132,124,133,124,134,124,135,124,136,124,138,124,139,124,140,124,141,124,142,124,143,124,144,124,147,124,148,124,150,124,153,124,154,124,155,124,160,124,161,124,163,124,166,124,167,124,168,124,169,124,171,124,172,124,173,124,175,124,176,124,180,124,181,124,182,124,183,124,184,124,186,124,187,124,39,95,78,134,44,85,164,98,146,78,170,108,55,98,177,130,215,84,78,83,62,115,209,110,59,117,18,82,22,83,221,139,208,105,138,95,0,96,238,109,79,87,34,107,175,115,83,104,216,143,19,127,98,99,163,96,36,85,234,117,98,140,21,113,163,109,166,91,123,94,82,131,76,97,196,158,250,120,87,135,39,124,135,118,240,81,246,96,76,113,67,102,76,94,77,96,14,140,112,112,37,99,137,143,189,95,98,96,212,134,222,86,193,107,148,96,103,97,73,83,224,96,102,102,63,141,253,121,26,79,233,112,71,108,179,139,242,139,216,126,100,131,15,102,90,90,66,155,81,109,247,109,65,140,59,109,25,79,107,112,183,131,22,98,209,96,13,151,39,141,120,121,251,81,62,87,250,87,58,103,120,117,61,122,239,121,149,123,191,124,192,124,194,124,195,124,196,124,198,124,201,124,203,124,206,124,207,124,208,124,209,124,210,124,211,124,212,124,216,124,218,124,219,124,221,124,222,124,225,124,226,124,227,124,228,124,229,124,230,124,231,124,233,124,234,124,235,124,236,124,237,124,238,124,240,124,241,124,242,124,243,124,244,124,245,124,246,124,247,124,249,124,250,124,252,124,253,124,254,124,255,124,0,125,1,125,2,125,3,125,4,125,5,125,6,125,7,125,8,125,9,125,11,125,12,125,13,125,14,125,15,125,16,125,17,125,18,125,19,125,20,125,21,125,22,125,23,125,24,125,25,125,26,125,27,125,28,125,29,125,30,125,31,125,33,125,35,125,36,125,37,125,38,125,40,125,41,125,42,125,44,125,45,125,46,125,48,125,49,125,50,125,51,125,52,125,53,125,54,125,140,128,101,153,249,143,192,111,165,139,33,158,236,89,233,126,9,127,9,84,129,103,216,104,145,143,77,124,198,150,202,83,37,96,190,117,114,108,115,83,201,90,167,126,36,99,224,81,10,129,241,93,223,132,128,98,128,81,99,91,14,79,109,121,66,82,184,96,78,109,196,91,194,91,161,139,176,139,226,101,204,95,69,150,147,89,231,126,170,126,9,86,183,103,57,89,115,79,182,91,160,82,90,131,138,152,62,141,50,117,190,148,71,80,60,122,247,78,182,103,126,154,193,90,124,107,209,118,90,87,22,92,58,123,244,149,78,113,124,81,169,128,112,130,120,89,4,127,39,131,192,104,236,103,177,120,119,120,227,98,97,99,128,123,237,79,106,82,207,81,80,131,219,105,116,146,245,141,49,141,193,137,46,149,173,123,246,78,55,125,56,125,57,125,58,125,59,125,60,125,61,125,62,125,63,125,64,125,65,125,66,125,67,125,68,125,69,125,70,125,71,125,72,125,73,125,74,125,75,125,76,125,77,125,78,125,79,125,80,125,81,125,82,125,83,125,84,125,85,125,86,125,87,125,88,125,89,125,90,125,91,125,92,125,93,125,94,125,95,125,96,125,97,125,98,125,99,125,100,125,101,125,102,125,103,125,104,125,105,125,106,125,107,125,108,125,109,125,111,125,112,125,113,125,114,125,115,125,116,125,117,125,118,125,120,125,121,125,122,125,123,125,124,125,125,125,126,125,127,125,128,125,129,125,130,125,131,125,132,125,133,125,134,125,135,125,136,125,137,125,138,125,139,125,140,125,141,125,142,125,143,125,144,125,145,125,146,125,147,125,148,125,149,125,150,125,151,125,152,125,101,80,48,130,81,82,111,153,16,110,133,110,167,109,250,94,245,80,220,89,6,92,70,109,95,108,134,117,139,132,104,104,86,89,178,139,32,83,113,145,77,150,73,133,18,105,1,121,38,113,246,128,164,78,202,144,71,109,132,154,7,90,188,86,5,100,240,148,235,119,165,79,26,129,225,114,210,137,122,153,52,127,222,126,127,82,89,101,117,145,127,143,131,143,235,83,150,122,237,99,165,99,134,118,248,121,87,136,54,150,42,98,171,82,130,130,84,104,112,103,119,99,107,119,237,122,1,109,211,126,227,137,208,89,18,98,201,133,165,130,76,117,31,80,203,78,165,117,235,139,74,92,254,93,75,123,164,101,209,145,202,78,37,109,95,137,39,125,38,149,197,78,40,140,219,143,115,151,75,102,129,121,209,143,236,112,120,109,153,125,154,125,155,125,156,125,157,125,158,125,159,125,160,125,161,125,162,125,163,125,164,125,165,125,167,125,168,125,169,125,170,125,171,125,172,125,173,125,175,125,176,125,177,125,178,125,179,125,180,125,181,125,182,125,183,125,184,125,185,125,186,125,187,125,188,125,189,125,190,125,191,125,192,125,193,125,194,125,195,125,196,125,197,125,198,125,199,125,200,125,201,125,202,125,203,125,204,125,205,125,206,125,207,125,208,125,209,125,210,125,211,125,212,125,213,125,214,125,215,125,216,125,217,125,218,125,219,125,220,125,221,125,222,125,223,125,224,125,225,125,226,125,227,125,228,125,229,125,230,125,231,125,232,125,233,125,234,125,235,125,236,125,237,125,238,125,239,125,240,125,241,125,242,125,243,125,244,125,245,125,246,125,247,125,248,125,249,125,250,125,61,92,178,82,70,131,98,81,14,131,91,119,118,102,184,156,172,78,202,96,190,124,179,124,207,126,149,78,102,139,111,102,136,152,89,151,131,88,108,101,92,149,132,95,201,117,86,151,223,122,222,122,192,81,175,112,152,122,234,99,118,122,160,126,150,115,237,151,69,78,120,112,93,78,82,145,169,83,81,101,231,101,252,129,5,130,142,84,49,92,154,117,160,151,216,98,217,114,189,117,69,92,121,154,202,131,64,92,128,84,233,119,62,78,174,108,90,128,210,98,110,99,232,93,119,81,221,141,30,142,47,149,241,79,229,83,231,96,172,112,103,82,80,99,67,158,31,90,38,80,55,119,119,83,226,126,133,100,43,101,137,98,152,99,20,80,53,114,201,137,179,81,192,139,221,126,71,87,204,131,167,148,155,81,27,84,251,92,251,125,252,125,253,125,254,125,255,125,0,126,1,126,2,126,3,126,4,126,5,126,6,126,7,126,8,126,9,126,10,126,11,126,12,126,13,126,14,126,15,126,16,126,17,126,18,126,19,126,20,126,21,126,22,126,23,126,24,126,25,126,26,126,27,126,28,126,29,126,30,126,31,126,32,126,33,126,34,126,35,126,36,126,37,126,38,126,39,126,40,126,41,126,42,126,43,126,44,126,45,126,46,126,47,126,48,126,49,126,50,126,51,126,52,126,53,126,54,126,55,126,56,126,57,126,58,126,60,126,61,126,62,126,63,126,64,126,66,126,67,126,68,126,69,126,70,126,72,126,73,126,74,126,75,126,76,126,77,126,78,126,79,126,80,126,81,126,82,126,83,126,84,126,85,126,86,126,87,126,88,126,89,126,90,126,91,126,92,126,93,126,202,79,227,122,90,109,225,144,143,154,128,85,150,84,97,83,175,84,0,95,233,99,119,105,239,81,104,97,10,82,42,88,216,82,78,87,13,120,11,119,183,94,119,97,224,124,91,98,151,98,162,78,149,112,3,128,247,98,228,112,96,151,119,87,219,130,239,103,245,104,213,120,151,152,209,121,243,88,179,84,239,83,52,110,75,81,59,82,162,91,254,139,175,128,67,85,166,87,115,96,81,87,45,84,122,122,80,96,84,91,167,99,160,98,227,83,99,98,199,91,175,103,237,84,159,122,230,130,119,145,147,94,228,136,56,89,174,87,14,99,232,141,239,128,87,87,119,123,169,79,235,95,189,91,62,107,33,83,80,123,194,114,70,104,255,119,54,119,247,101,181,81,143,78,212,118,191,92,165,122,117,132,78,89,65,155,128,80,94,126,95,126,96,126,97,126,98,126,99,126,100,126,101,126,102,126,103,126,104,126,105,126,106,126,107,126,108,126,109,126,110,126,111,126,112,126,113,126,114,126,115,126,116,126,117,126,118,126,119,126,120,126,121,126,122,126,123,126,124,126,125,126,126,126,127,126,128,126,129,126,131,126,132,126,133,126,134,126,135,126,136,126,137,126,138,126,139,126,140,126,141,126,142,126,143,126,144,126,145,126,146,126,147,126,148,126,149,126,150,126,151,126,152,126,153,126,154,126,156,126,157,126,158,126,174,126,180,126,187,126,188,126,214,126,228,126,236,126,249,126,10,127,16,127,30,127,55,127,57,127,59,127,60,127,61,127,62,127,63,127,64,127,65,127,67,127,70,127,71,127,72,127,73,127,74,127,75,127,76,127,77,127,78,127,79,127,82,127,83,127,136,153,39,97,131,110,100,87,6,102,70,99,240,86,236,98,105,98,211,94,20,150,131,87,201,98,135,85,33,135,74,129,163,143,102,85,177,131,101,103,86,141,221,132,106,90,15,104,230,98,238,123,17,150,112,81,156,111,48,140,253,99,200,137,210,97,6,127,194,112,229,110,5,116,148,105,252,114,202,94,206,144,23,103,106,109,94,99,179,82,98,114,1,128,108,79,229,89,106,145,217,112,157,109,210,82,80,78,247,150,109,149,126,133,202,120,47,125,33,81,146,87,194,100,139,128,123,124,234,108,241,104,94,105,183,81,152,83,168,104,129,114,206,158,241,123,248,114,187,121,19,111,6,116,78,103,204,145,164,156,60,121,137,131,84,131,15,84,23,104,61,78,137,83,177,82,62,120,134,83,41,82,136,80,139,79,208,79,86,127,89,127,91,127,92,127,93,127,94,127,96,127,99,127,100,127,101,127,102,127,103,127,107,127,108,127,109,127,111,127,112,127,115,127,117,127,118,127,119,127,120,127,122,127,123,127,124,127,125,127,127,127,128,127,130,127,131,127,132,127,133,127,134,127,135,127,136,127,137,127,139,127,141,127,143,127,144,127,145,127,146,127,147,127,149,127,150,127,151,127,152,127,153,127,155,127,156,127,160,127,162,127,163,127,165,127,166,127,168,127,169,127,170,127,171,127,172,127,173,127,174,127,177,127,179,127,180,127,181,127,182,127,183,127,186,127,187,127,190,127,192,127,194,127,195,127,196,127,198,127,199,127,200,127,201,127,203,127,205,127,207,127,208,127,209,127,210,127,211,127,214,127,215,127,217,127,218,127,219,127,220,127,221,127,222,127,226,127,227,127,226,117,203,122,146,124,165,108,182,150,155,82,131,116,233,84,233,79,84,128,178,131,222,143,112,149,201,94,28,96,159,109,24,94,91,101,56,129,254,148,75,96,188,112,195,126,174,124,201,81,129,104,177,124,111,130,36,78,134,143,207,145,126,102,174,78,5,140,169,100,74,128,218,80,151,117,206,113,229,91,189,143,102,111,134,78,130,100,99,149,214,94,153,101,23,82,194,136,200,112,163,82,14,115,51,116,151,103,247,120,22,151,52,78,187,144,222,156,203,109,219,81,65,141,29,84,206,98,178,115,241,131,246,150,132,159,195,148,54,79,154,127,204,81,117,112,117,150,173,92,134,152,230,83,228,78,156,110,9,116,180,105,107,120,143,153,89,117,24,82,36,118,65,109,243,103,109,81,153,159,75,128,153,84,60,123,191,122,228,127,231,127,232,127,234,127,235,127,236,127,237,127,239,127,242,127,244,127,245,127,246,127,247,127,248,127,249,127,250,127,253,127,254,127,255,127,2,128,7,128,8,128,9,128,10,128,14,128,15,128,17,128,19,128,26,128,27,128,29,128,30,128,31,128,33,128,35,128,36,128,43,128,44,128,45,128,46,128,47,128,48,128,50,128,52,128,57,128,58,128,60,128,62,128,64,128,65,128,68,128,69,128,71,128,72,128,73,128,78,128,79,128,80,128,81,128,83,128,85,128,86,128,87,128,89,128,91,128,92,128,93,128,94,128,95,128,96,128,97,128,98,128,99,128,100,128,101,128,102,128,103,128,104,128,107,128,108,128,109,128,110,128,111,128,112,128,114,128,115,128,116,128,117,128,118,128,119,128,120,128,121,128,122,128,123,128,124,128,125,128,134,150,132,87,226,98,71,150,124,105,4,90,2,100,211,123,15,111,75,150,166,130,98,83,133,152,144,94,137,112,179,99,100,83,79,134,129,156,147,158,140,120,50,151,239,141,66,141,127,158,94,111,132,121,85,95,70,150,46,98,116,154,21,84,221,148,163,79,197,101,101,92,97,92,21,127,81,134,47,108,139,95,135,115,228,110,255,126,230,92,27,99,106,91,230,110,117,83,113,78,160,99,101,117,161,98,110,143,38,79,209,78,166,108,182,126,186,139,29,132,186,135,87,127,59,144,35,149,169,123,161,154,248,136,61,132,27,109,134,154,220,126,136,89,187,158,155,115,1,120,130,134,108,154,130,154,27,86,23,84,203,87,112,78,166,158,86,83,200,143,9,129,146,119,146,153,238,134,225,110,19,133,252,102,98,97,43,111,126,128,129,128,130,128,133,128,136,128,138,128,141,128,142,128,143,128,144,128,145,128,146,128,148,128,149,128,151,128,153,128,158,128,163,128,166,128,167,128,168,128,172,128,176,128,179,128,181,128,182,128,184,128,185,128,187,128,197,128,199,128,200,128,201,128,202,128,203,128,207,128,208,128,209,128,210,128,211,128,212,128,213,128,216,128,223,128,224,128,226,128,227,128,230,128,238,128,245,128,247,128,249,128,251,128,254,128,255,128,0,129,1,129,3,129,4,129,5,129,7,129,8,129,11,129,12,129,21,129,23,129,25,129,27,129,28,129,29,129,31,129,32,129,33,129,34,129,35,129,36,129,37,129,38,129,39,129,40,129,41,129,42,129,43,129,45,129,46,129,48,129,51,129,52,129,53,129,55,129,57,129,58,129,59,129,60,129,61,129,63,129,41,140,146,130,43,131,242,118,19,108,217,95,189,131,43,115,5,131,26,149,219,107,219,119,198,148,111,83,2,131,146,81,61,94,140,140,56,141,72,78,171,115,154,103,133,104,118,145,9,151,100,113,161,108,9,119,146,90,65,149,207,107,142,127,39,102,208,91,185,89,154,90,232,149,247,149,236,78,12,132,153,132,172,106,223,118,48,149,27,115,166,104,95,91,47,119,154,145,97,151,220,124,247,143,28,140,37,95,115,124,216,121,197,137,204,108,28,135,198,91,66,94,201,104,32,119,245,126,149,81,77,81,201,82,41,90,5,127,98,151,215,130,207,99,132,119,208,133,210,121,58,110,153,94,153,89,17,133,109,112,17,108,191,98,191,118,79,101,175,96,253,149,14,102,159,135,35,158,237,148,13,84,125,84,44,140,120,100,64,129,65,129,66,129,67,129,68,129,69,129,71,129,73,129,77,129,78,129,79,129,82,129,86,129,87,129,88,129,91,129,92,129,93,129,94,129,95,129,97,129,98,129,99,129,100,129,102,129,104,129,106,129,107,129,108,129,111,129,114,129,115,129,117,129,118,129,119,129,120,129,129,129,131,129,132,129,133,129,134,129,135,129,137,129,139,129,140,129,141,129,142,129,144,129,146,129,147,129,148,129,149,129,150,129,151,129,153,129,154,129,158,129,159,129,160,129,161,129,162,129,164,129,165,129,167,129,169,129,171,129,172,129,173,129,174,129,175,129,176,129,177,129,178,129,180,129,181,129,182,129,183,129,184,129,185,129,188,129,189,129,190,129,191,129,196,129,197,129,199,129,200,129,201,129,203,129,205,129,206,129,207,129,208,129,209,129,210,129,211,129,121,100,17,134,33,106,156,129,232,120,105,100,84,155,185,98,43,103,171,131,168,88,216,158,171,108,32,111,222,91,76,150,11,140,95,114,208,103,199,98,97,114,169,78,198,89,205,107,147,88,174,102,85,94,223,82,85,97,40,103,238,118,102,119,103,114,70,122,255,98,234,84,80,84,160,148,163,144,28,90,179,126,22,108,67,78,118,89,16,128,72,89,87,83,55,117,190,150,202,86,32,99,17,129,124,96,249,149,214,109,98,84,129,153,133,81,233,90,253,128,174,89,19,151,42,80,229,108,60,92,223,98,96,79,63,83,123,129,6,144,186,110,43,133,200,98,116,94,190,120,181,100,123,99,245,95,24,90,127,145,31,158,63,92,79,99,66,128,125,91,110,85,74,149,77,149,133,109,168,96,224,103,222,114,221,81,129,91,212,129,213,129,214,129,215,129,216,129,217,129,218,129,219,129,220,129,221,129,222,129,223,129,224,129,225,129,226,129,228,129,229,129,230,129,232,129,233,129,235,129,238,129,239,129,240,129,241,129,242,129,245,129,246,129,247,129,248,129,249,129,250,129,253,129,255,129,3,130,7,130,8,130,9,130,10,130,11,130,14,130,15,130,17,130,19,130,21,130,22,130,23,130,24,130,25,130,26,130,29,130,32,130,36,130,37,130,38,130,39,130,41,130,46,130,50,130,58,130,60,130,61,130,63,130,64,130,65,130,66,130,67,130,69,130,70,130,72,130,74,130,76,130,77,130,78,130,80,130,81,130,82,130,83,130,84,130,85,130,86,130,87,130,89,130,91,130,92,130,93,130,94,130,96,130,97,130,98,130,99,130,100,130,101,130,102,130,103,130,105,130,231,98,222,108,91,114,109,98,174,148,189,126,19,129,83,109,156,81,4,95,116,89,170,82,18,96,115,89,150,102,80,134,159,117,42,99,230,97,239,124,250,139,230,84,39,107,37,158,180,107,213,133,85,84,118,80,164,108,106,85,180,141,44,114,21,94,21,96,54,116,205,98,146,99,76,114,152,95,67,110,62,109,0,101,88,111,216,118,208,120,252,118,84,117,36,82,219,83,83,78,158,94,193,101,42,128,214,128,155,98,134,84,40,82,174,112,141,136,209,141,225,108,120,84,218,128,249,87,244,136,84,141,106,150,77,145,105,79,155,108,183,85,198,118,48,120,168,98,249,112,142,111,109,95,236,132,218,104,124,120,247,123,168,129,11,103,79,158,103,99,176,120,111,87,18,120,57,151,121,98,171,98,136,82,53,116,215,107,106,130,107,130,108,130,109,130,113,130,117,130,118,130,119,130,120,130,123,130,124,130,128,130,129,130,131,130,133,130,134,130,135,130,137,130,140,130,144,130,147,130,148,130,149,130,150,130,154,130,155,130,158,130,160,130,162,130,163,130,167,130,178,130,181,130,182,130,186,130,187,130,188,130,191,130,192,130,194,130,195,130,197,130,198,130,201,130,208,130,214,130,217,130,218,130,221,130,226,130,231,130,232,130,233,130,234,130,236,130,237,130,238,130,240,130,242,130,243,130,245,130,246,130,248,130,250,130,252,130,253,130,254,130,255,130,0,131,10,131,11,131,13,131,16,131,18,131,19,131,22,131,24,131,25,131,29,131,30,131,31,131,32,131,33,131,34,131,35,131,36,131,37,131,38,131,41,131,42,131,46,131,48,131,50,131,55,131,59,131,61,131,100,85,62,129,178,117,174,118,57,83,222,117,251,80,65,92,108,139,199,123,79,80,71,114,151,154,216,152,2,111,226,116,104,121,135,100,165,119,252,98,145,152,43,141,193,84,88,128,82,78,106,87,249,130,13,132,115,94,237,81,246,116,196,139,79,92,97,87,252,108,135,152,70,90,52,120,68,155,235,143,149,124,86,82,81,98,250,148,198,78,134,131,97,132,233,131,178,132,212,87,52,103,3,87,110,102,102,109,49,140,221,102,17,112,31,103,58,107,22,104,26,98,187,89,3,78,196,81,6,111,210,103,143,108,118,81,203,104,71,89,103,107,102,117,14,93,16,129,80,159,215,101,72,121,65,121,145,154,119,141,130,92,94,78,1,79,47,84,81,89,12,120,104,86,20,108,196,143,3,95,125,108,227,108,171,139,144,99,62,131,63,131,65,131,66,131,68,131,69,131,72,131,74,131,75,131,76,131,77,131,78,131,83,131,85,131,86,131,87,131,88,131,89,131,93,131,98,131,112,131,113,131,114,131,115,131,116,131,117,131,118,131,121,131,122,131,126,131,127,131,128,131,129,131,130,131,131,131,132,131,135,131,136,131,138,131,139,131,140,131,141,131,143,131,144,131,145,131,148,131,149,131,150,131,151,131,153,131,154,131,157,131,159,131,161,131,162,131,163,131,164,131,165,131,166,131,167,131,172,131,173,131,174,131,175,131,181,131,187,131,190,131,191,131,194,131,195,131,196,131,198,131,200,131,201,131,203,131,205,131,206,131,208,131,209,131,210,131,211,131,213,131,215,131,217,131,218,131,219,131,222,131,226,131,227,131,228,131,230,131,231,131,232,131,235,131,236,131,237,131,112,96,61,109,117,114,102,98,142,148,197,148,67,83,193,143,126,123,223,78,38,140,126,78,212,158,177,148,179,148,77,82,92,111,99,144,69,109,52,140,17,88,76,93,32,107,73,107,170,103,91,84,84,129,140,127,153,88,55,133,58,95,162,98,71,106,57,149,114,101,132,96,101,104,167,119,84,78,168,79,231,93,152,151,172,100,216,127,237,92,207,79,141,122,7,82,4,131,20,78,47,96,131,122,166,148,181,79,178,78,230,121,52,116,228,82,185,130,210,100,189,121,221,91,129,108,82,151,123,143,34,108,62,80,127,83,5,110,206,100,116,102,48,108,197,96,119,152,247,139,134,94,60,116,119,122,203,121,24,78,177,144,3,116,66,108,218,86,75,145,197,108,139,141,58,83,198,134,242,102,175,142,72,92,113,154,32,110,238,131,239,131,243,131,244,131,245,131,246,131,247,131,250,131,251,131,252,131,254,131,255,131,0,132,2,132,5,132,7,132,8,132,9,132,10,132,16,132,18,132,19,132,20,132,21,132,22,132,23,132,25,132,26,132,27,132,30,132,31,132,32,132,33,132,34,132,35,132,41,132,42,132,43,132,44,132,45,132,46,132,47,132,48,132,50,132,51,132,52,132,53,132,54,132,55,132,57,132,58,132,59,132,62,132,63,132,64,132,65,132,66,132,67,132,68,132,69,132,71,132,72,132,73,132,74,132,75,132,76,132,77,132,78,132,79,132,80,132,82,132,83,132,84,132,85,132,86,132,88,132,93,132,94,132,95,132,96,132,98,132,100,132,101,132,102,132,103,132,104,132,106,132,110,132,111,132,112,132,114,132,116,132,119,132,121,132,123,132,124,132,214,83,54,90,139,159,163,141,187,83,8,87,167,152,67,103,155,145,201,108,104,81,202,117,243,98,172,114,56,82,157,82,58,127,148,112,56,118,116,83,74,158,183,105,110,120,192,150,217,136,164,127,54,113,195,113,137,81,211,103,228,116,228,88,24,101,183,86,169,139,118,153,112,98,213,126,249,96,237,112,236,88,193,78,186,78,205,95,231,151,251,78,164,139,3,82,138,89,171,126,84,98,205,78,229,101,14,98,56,131,201,132,99,131,141,135,148,113,182,110,185,91,210,126,151,81,201,99,212,103,137,128,57,131,21,136,18,81,122,91,130,89,177,143,115,78,93,108,101,81,37,137,111,143,46,150,74,133,94,116,16,149,240,149,166,109,229,130,49,95,146,100,18,109,40,132,110,129,195,156,94,88,91,141,9,78,193,83,125,132,126,132,127,132,128,132,129,132,131,132,132,132,133,132,134,132,138,132,141,132,143,132,144,132,145,132,146,132,147,132,148,132,149,132,150,132,152,132,154,132,155,132,157,132,158,132,159,132,160,132,162,132,163,132,164,132,165,132,166,132,167,132,168,132,169,132,170,132,171,132,172,132,173,132,174,132,176,132,177,132,179,132,181,132,182,132,183,132,187,132,188,132,190,132,192,132,194,132,195,132,197,132,198,132,199,132,200,132,203,132,204,132,206,132,207,132,210,132,212,132,213,132,215,132,216,132,217,132,218,132,219,132,220,132,222,132,225,132,226,132,228,132,231,132,232,132,233,132,234,132,235,132,237,132,238,132,239,132,241,132,242,132,243,132,244,132,245,132,246,132,247,132,248,132,249,132,250,132,251,132,253,132,254,132,0,133,1,133,2,133,30,79,99,101,81,104,211,85,39,78,20,100,154,154,107,98,194,90,95,116,114,130,169,109,238,104,231,80,142,131,2,120,64,103,57,82,153,108,177,126,187,80,101,85,94,113,91,123,82,102,202,115,235,130,73,103,113,92,32,82,125,113,107,136,234,149,85,150,197,100,97,141,179,129,132,85,85,108,71,98,46,127,146,88,36,79,70,85,79,141,76,102,10,78,26,92,243,136,162,104,78,99,13,122,231,112,141,130,250,82,246,151,17,92,232,84,181,144,205,126,98,89,74,141,199,134,12,130,13,130,102,141,68,100,4,92,81,97,137,109,62,121,190,139,55,120,51,117,123,84,56,79,171,142,241,109,32,90,197,126,94,121,136,108,161,91,118,90,26,117,190,128,78,97,23,110,240,88,31,117,37,117,114,114,71,83,243,126,3,133,4,133,5,133,6,133,7,133,8,133,9,133,10,133,11,133,13,133,14,133,15,133,16,133,18,133,20,133,21,133,22,133,24,133,25,133,27,133,28,133,29,133,30,133,32,133,34,133,35,133,36,133,37,133,38,133,39,133,40,133,41,133,42,133,45,133,46,133,47,133,48,133,49,133,50,133,51,133,52,133,53,133,54,133,62,133,63,133,64,133,65,133,66,133,68,133,69,133,70,133,71,133,75,133,76,133,77,133,78,133,79,133,80,133,81,133,82,133,83,133,84,133,85,133,87,133,88,133,90,133,91,133,92,133,93,133,95,133,96,133,97,133,98,133,99,133,101,133,102,133,103,133,105,133,106,133,107,133,108,133,109,133,110,133,111,133,112,133,113,133,115,133,117,133,118,133,119,133,120,133,124,133,125,133,127,133,128,133,129,133,1,119,219,118,105,82,220,128,35,87,8,94,49,89,238,114,189,101,127,110,215,139,56,92,113,134,65,83,243,119,254,98,246,101,192,78,223,152,128,134,158,91,198,139,242,83,226,119,127,79,78,92,118,154,203,89],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+113738);allocate([15,95,58,121,235,88,22,78,255,103,139,78,237,98,147,138,29,144,191,82,47,102,220,85,108,86,2,144,213,78,141,79,202,145,112,153,15,108,2,94,67,96,164,91,198,137,213,139,54,101,75,98,150,153,136,91,255,91,136,99,46,85,215,83,38,118,125,81,44,133,162,103,179,104,138,107,146,98,147,143,212,83,18,130,209,109,143,117,102,78,78,141,112,91,159,113,175,133,145,102,217,102,114,127,0,135,205,158,32,159,94,92,47,103,240,143,17,104,95,103,13,98,214,122,133,88,182,94,112,101,49,111,130,133,131,133,134,133,136,133,137,133,138,133,139,133,140,133,141,133,142,133,144,133,145,133,146,133,147,133,148,133,149,133,150,133,151,133,152,133,153,133,154,133,157,133,158,133,159,133,160,133,161,133,162,133,163,133,165,133,166,133,167,133,169,133,171,133,172,133,173,133,177,133,178,133,179,133,180,133,181,133,182,133,184,133,186,133,187,133,188,133,189,133,190,133,191,133,192,133,194,133,195,133,196,133,197,133,198,133,199,133,200,133,202,133,203,133,204,133,205,133,206,133,209,133,210,133,212,133,214,133,215,133,216,133,217,133,218,133,219,133,221,133,222,133,223,133,224,133,225,133,226,133,227,133,229,133,230,133,231,133,232,133,234,133,235,133,236,133,237,133,238,133,239,133,240,133,241,133,242,133,243,133,244,133,245,133,246,133,247,133,248,133,85,96,55,82,13,128,84,100,112,136,41,117,5,94,19,104,244,98,28,151,204,83,61,114,1,140,52,108,97,119,14,122,46,84,172,119,122,152,28,130,244,139,85,120,20,103,193,112,175,101,149,100,54,86,29,96,193,121,248,83,29,78,123,107,134,128,250,91,227,85,219,86,58,79,60,79,114,153,243,93,126,103,56,128,2,96,130,152,1,144,139,91,188,139,245,139,28,100,88,130,222,100,253,85,207,130,101,145,215,79,32,125,31,144,159,124,243,80,81,88,175,110,191,91,201,139,131,128,120,145,156,132,151,123,125,134,139,150,143,150,229,126,211,154,142,120,129,92,87,122,66,144,167,150,95,121,89,91,95,99,11,123,209,132,173,104,6,85,41,127,16,116,34,125,1,149,64,98,76,88,214,78,131,91,121,89,84,88,249,133,250,133,252,133,253,133,254,133,0,134,1,134,2,134,3,134,4,134,6,134,7,134,8,134,9,134,10,134,11,134,12,134,13,134,14,134,15,134,16,134,18,134,19,134,20,134,21,134,23,134,24,134,25,134,26,134,27,134,28,134,29,134,30,134,31,134,32,134,33,134,34,134,35,134,36,134,37,134,38,134,40,134,42,134,43,134,44,134,45,134,46,134,47,134,48,134,49,134,50,134,51,134,52,134,53,134,54,134,55,134,57,134,58,134,59,134,61,134,62,134,63,134,64,134,65,134,66,134,67,134,68,134,69,134,70,134,71,134,72,134,73,134,74,134,75,134,76,134,82,134,83,134,85,134,86,134,87,134,88,134,89,134,91,134,92,134,93,134,95,134,96,134,97,134,99,134,100,134,101,134,102,134,103,134,104,134,105,134,106,134,109,115,30,99,75,142,15,142,206,128,212,130,172,98,240,83,240,108,94,145,42,89,1,96,112,108,77,87,74,100,42,141,43,118,233,110,91,87,128,106,240,117,109,111,45,140,8,140,102,87,239,107,146,136,179,120,162,99,249,83,173,112,100,108,88,88,42,100,2,88,224,104,155,129,16,85,214,124,24,80,186,142,204,109,159,141,235,112,143,99,155,109,212,110,230,126,4,132,67,104,3,144,216,109,118,150,168,139,87,89,121,114,228,133,126,129,188,117,138,138,175,104,84,82,34,142,17,149,208,99,152,152,68,142,124,85,83,79,255,102,143,86,213,96,149,109,67,82,73,92,41,89,251,109,107,88,48,117,28,117,108,96,20,130,70,129,17,99,97,103,226,143,58,119,243,141,52,141,193,148,22,94,133,83,44,84,195,112,109,134,111,134,112,134,114,134,115,134,116,134,117,134,118,134,119,134,120,134,131,134,132,134,133,134,134,134,135,134,136,134,137,134,142,134,143,134,144,134,145,134,146,134,148,134,150,134,151,134,152,134,153,134,154,134,155,134,158,134,159,134,160,134,161,134,162,134,165,134,166,134,171,134,173,134,174,134,178,134,179,134,183,134,184,134,185,134,187,134,188,134,189,134,190,134,191,134,193,134,194,134,195,134,197,134,200,134,204,134,205,134,210,134,211,134,213,134,214,134,215,134,218,134,220,134,221,134,224,134,225,134,226,134,227,134,229,134,230,134,231,134,232,134,234,134,235,134,236,134,239,134,245,134,246,134,247,134,250,134,251,134,252,134,253,134,255,134,1,135,4,135,5,135,6,135,11,135,12,135,14,135,15,135,16,135,17,135,20,135,22,135,64,108,247,94,92,80,173,78,173,94,58,99,71,130,26,144,80,104,110,145,179,119,12,84,220,148,100,95,229,122,118,104,69,99,82,123,223,126,219,117,119,80,149,98,52,89,15,144,248,81,195,121,129,122,254,86,146,95,20,144,130,109,96,92,31,87,16,84,84,81,77,110,226,86,168,99,147,152,127,129,21,135,42,137,0,144,30,84,111,92,192,129,214,98,88,98,49,129,53,158,64,150,110,154,124,154,45,105,165,89,211,98,62,85,22,99,199,84,217,134,60,109,3,90,230,116,156,136,106,107,22,89,76,140,47,95,126,110,169,115,125,152,56,78,247,112,140,91,151,120,61,99,90,102,150,118,203,96,155,91,73,90,7,78,85,129,106,108,139,115,161,78,137,103,81,127,128,95,250,101,27,103,216,95,132,89,1,90,25,135,27,135,29,135,31,135,32,135,36,135,38,135,39,135,40,135,42,135,43,135,44,135,45,135,47,135,48,135,50,135,51,135,53,135,54,135,56,135,57,135,58,135,60,135,61,135,64,135,65,135,66,135,67,135,68,135,69,135,70,135,74,135,75,135,77,135,79,135,80,135,81,135,82,135,84,135,85,135,86,135,88,135,90,135,91,135,92,135,93,135,94,135,95,135,97,135,98,135,102,135,103,135,104,135,105,135,106,135,107,135,108,135,109,135,111,135,113,135,114,135,115,135,117,135,119,135,120,135,121,135,122,135,127,135,128,135,129,135,132,135,134,135,135,135,137,135,138,135,140,135,142,135,143,135,144,135,145,135,146,135,148,135,149,135,150,135,152,135,153,135,154,135,155,135,156,135,157,135,158,135,160,135,161,135,162,135,163,135,164,135,205,93,174,95,113,83,230,151,221,143,69,104,244,86,47,85,223,96,58,78,77,111,244,126,199,130,14,132,212,89,31,79,42,79,62,92,172,126,42,103,26,133,115,84,79,117,195,128,130,85,79,155,77,79,45,110,19,140,9,92,112,97,107,83,31,118,41,110,138,134,135,101,251,149,185,126,59,84,51,122,10,125,238,149,225,85,193,127,238,116,29,99,23,135,161,109,157,122,17,98,161,101,103,83,225,99,131,108,235,93,92,84,168,148,76,78,97,108,236,139,75,92,224,101,156,130,167,104,62,84,52,84,203,107,102,107,148,78,66,99,72,83,30,130,13,79,174,79,94,87,10,98,254,150,100,102,105,114,255,82,161,82,159,96,239,139,20,102,153,113,144,103,127,137,82,120,253,119,112,102,59,86,56,84,33,149,122,114,165,135,166,135,167,135,169,135,170,135,174,135,176,135,177,135,178,135,180,135,182,135,183,135,184,135,185,135,187,135,188,135,190,135,191,135,193,135,194,135,195,135,196,135,197,135,199,135,200,135,201,135,204,135,205,135,206,135,207,135,208,135,212,135,213,135,214,135,215,135,216,135,217,135,218,135,220,135,221,135,222,135,223,135,225,135,226,135,227,135,228,135,230,135,231,135,232,135,233,135,235,135,236,135,237,135,239,135,240,135,241,135,242,135,243,135,244,135,245,135,246,135,247,135,248,135,250,135,251,135,252,135,253,135,255,135,0,136,1,136,2,136,4,136,5,136,6,136,7,136,8,136,9,136,11,136,12,136,13,136,14,136,15,136,16,136,17,136,18,136,20,136,23,136,24,136,25,136,26,136,28,136,29,136,30,136,31,136,32,136,35,136,0,122,111,96,12,94,137,96,157,129,21,89,220,96,132,113,239,112,170,110,80,108,128,114,132,106,173,136,45,94,96,78,179,90,156,85,227,148,23,109,251,124,153,150,15,98,198,126,142,119,126,134,35,83,30,151,150,143,135,102,225,92,160,79,237,114,11,78,166,83,15,89,19,84,128,99,40,149,72,81,217,78,156,156,164,126,184,84,36,141,84,136,55,130,242,149,142,109,38,95,204,90,62,102,105,150,176,115,46,115,191,83,122,129,133,153,161,127,170,91,119,150,80,150,191,126,248,118,162,83,118,149,153,153,177,123,68,137,88,110,97,78,212,127,101,121,230,139,243,96,205,84,171,78,121,152,247,93,97,106,207,80,17,84,97,140,39,132,93,120,4,151,74,82,238,84,163,86,0,149,136,109,181,91,198,109,83,102,36,136,37,136,38,136,39,136,40,136,41,136,42,136,43,136,44,136,45,136,46,136,47,136,48,136,49,136,51,136,52,136,53,136,54,136,55,136,56,136,58,136,59,136,61,136,62,136,63,136,65,136,66,136,67,136,70,136,71,136,72,136,73,136,74,136,75,136,78,136,79,136,80,136,81,136,82,136,83,136,85,136,86,136,88,136,90,136,91,136,92,136,93,136,94,136,95,136,96,136,102,136,103,136,106,136,109,136,111,136,113,136,115,136,116,136,117,136,118,136,120,136,121,136,122,136,123,136,124,136,128,136,131,136,134,136,135,136,137,136,138,136,140,136,142,136,143,136,144,136,145,136,147,136,148,136,149,136,151,136,152,136,153,136,154,136,155,136,157,136,158,136,159,136,160,136,161,136,163,136,165,136,166,136,167,136,168,136,169,136,170,136,15,92,93,91,33,104,150,128,120,85,17,123,72,101,84,105,155,78,71,107,78,135,139,151,79,83,31,99,58,100,170,144,156,101,193,128,16,140,153,81,176,104,120,83,249,135,200,97,196,108,251,108,34,140,81,92,170,133,175,130,12,149,35,107,155,143,176,101,251,95,195,95,225,79,69,136,31,102,101,129,41,115,250,96,116,81,17,82,139,87,98,95,162,144,76,136,146,145,120,94,79,103,39,96,211,89,68,81,246,81,248,128,8,83,121,108,196,150,138,113,17,79,238,79,158,127,61,103,197,85,8,149,192,121,150,136,227,126,159,88,12,98,0,151,90,134,24,86,123,152,144,95,184,139,196,132,87,145,217,83,237,101,143,94,92,117,100,96,110,125,127,90,234,126,237,126,105,143,167,85,163,91,172,96,203,101,132,115,172,136,174,136,175,136,176,136,178,136,179,136,180,136,181,136,182,136,184,136,185,136,186,136,187,136,189,136,190,136,191,136,192,136,195,136,196,136,199,136,200,136,202,136,203,136,204,136,205,136,207,136,208,136,209,136,211,136,214,136,215,136,218,136,219,136,220,136,221,136,222,136,224,136,225,136,230,136,231,136,233,136,234,136,235,136,236,136,237,136,238,136,239,136,242,136,245,136,246,136,247,136,250,136,251,136,253,136,255,136,0,137,1,137,3,137,4,137,5,137,6,137,7,137,8,137,9,137,11,137,12,137,13,137,14,137,15,137,17,137,20,137,21,137,22,137,23,137,24,137,28,137,29,137,30,137,31,137,32,137,34,137,35,137,36,137,38,137,39,137,40,137,41,137,44,137,45,137,46,137,47,137,49,137,50,137,51,137,53,137,55,137,9,144,99,118,41,119,218,126,116,151,155,133,102,91,116,122,234,150,64,136,203,82,143,113,170,95,236,101,226,139,251,91,111,154,225,93,137,107,91,108,173,139,175,139,10,144,197,143,139,83,188,98,38,158,45,158,64,84,43,78,189,130,89,114,156,134,22,93,89,136,175,109,197,150,209,84,154,78,182,139,9,113,189,84,9,150,223,112,249,109,208,118,37,78,20,120,18,135,169,92,246,94,0,138,156,152,14,150,142,112,191,108,68,89,169,99,60,119,77,136,20,111,115,130,48,88,213,113,140,83,26,120,193,150,1,85,102,95,48,113,180,91,26,140,140,154,131,107,46,89,47,158,231,121,104,103,108,98,111,79,161,117,138,127,11,109,51,150,39,108,240,78,210,117,123,81,55,104,62,111,128,144,112,129,150,89,118,116,56,137,57,137,58,137,59,137,60,137,61,137,62,137,63,137,64,137,66,137,67,137,69,137,70,137,71,137,72,137,73,137,74,137,75,137,76,137,77,137,78,137,79,137,80,137,81,137,82,137,83,137,84,137,85,137,86,137,87,137,88,137,89,137,90,137,91,137,92,137,93,137,96,137,97,137,98,137,99,137,100,137,101,137,103,137,104,137,105,137,106,137,107,137,108,137,109,137,110,137,111,137,112,137,113,137,114,137,115,137,116,137,117,137,118,137,119,137,120,137,121,137,122,137,124,137,125,137,126,137,128,137,130,137,132,137,133,137,135,137,136,137,137,137,138,137,139,137,140,137,141,137,142,137,143,137,144,137,145,137,146,137,147,137,148,137,149,137,150,137,151,137,152,137,153,137,154,137,155,137,156,137,157,137,158,137,159,137,160,137,161,137,71,100,39,92,101,144,145,122,35,140,218,89,172,84,0,130,111,131,129,137,0,128,48,105,78,86,54,128,55,114,206,145,182,81,95,78,117,152,150,99,26,78,246,83,243,102,75,129,28,89,178,109,0,78,249,88,59,83,214,99,241,148,157,79,10,79,99,136,144,152,55,89,87,144,251,121,234,78,240,128,145,117,130,108,156,91,232,89,93,95,5,105,129,134,26,80,242,93,89,78,227,119,229,78,122,130,145,98,19,102,145,144,121,92,191,78,121,95,198,129,56,144,132,128,171,117,166,78,212,136,15,97,197,107,198,95,73,78,202,118,162,110,227,139,174,139,10,140,209,139,2,95,252,127,204,127,206,126,53,131,107,131,224,86,183,107,243,151,52,150,251,89,31,84,246,148,235,109,197,91,110,153,57,92,21,95,144,150,162,137,163,137,164,137,165,137,166,137,167,137,168,137,169,137,170,137,171,137,172,137,173,137,174,137,175,137,176,137,177,137,178,137,179,137,180,137,181,137,182,137,183,137,184,137,185,137,186,137,187,137,188,137,189,137,190,137,191,137,192,137,195,137,205,137,211,137,212,137,213,137,215,137,216,137,217,137,219,137,221,137,223,137,224,137,225,137,226,137,228,137,231,137,232,137,233,137,234,137,236,137,237,137,238,137,240,137,241,137,242,137,244,137,245,137,246,137,247,137,248,137,249,137,250,137,251,137,252,137,253,137,254,137,255,137,1,138,2,138,3,138,4,138,5,138,6,138,8,138,9,138,10,138,11,138,12,138,13,138,14,138,15,138,16,138,17,138,18,138,19,138,20,138,21,138,22,138,23,138,24,138,25,138,26,138,27,138,28,138,29,138,112,83,241,130,49,106,116,90,112,158,148,94,40,127,185,131,36,132,37,132,103,131,71,135,206,143,98,141,200,118,113,95,150,152,108,120,32,102,223,84,229,98,99,79,195,129,200,117,184,94,205,150,10,142,249,134,143,84,243,108,140,109,56,108,127,96,199,82,40,117,125,94,24,79,160,96,231,95,36,92,49,117,174,144,192,148,185,114,185,108,56,110,73,145,9,103,203,83,243,83,81,79,201,145,241,139,200,83,124,94,194,143,228,109,142,78,194,118,134,105,94,134,26,97,6,130,89,79,222,79,62,144,124,156,9,97,29,110,20,110,133,150,136,78,49,90,232,150,14,78,127,92,185,121,135,91,237,139,189,127,137,115,223,87,139,130,193,144,1,84,71,144,187,85,234,92,161,95,8,97,50,107,241,114,178,128,137,138,30,138,31,138,32,138,33,138,34,138,35,138,36,138,37,138,38,138,39,138,40,138,41,138,42,138,43,138,44,138,45,138,46,138,47,138,48,138,49,138,50,138,51,138,52,138,53,138,54,138,55,138,56,138,57,138,58,138,59,138,60,138,61,138,63,138,64,138,65,138,66,138,67,138,68,138,69,138,70,138,71,138,73,138,74,138,75,138,76,138,77,138,78,138,79,138,80,138,81,138,82,138,83,138,84,138,85,138,86,138,87,138,88,138,89,138,90,138,91,138,92,138,93,138,94,138,95,138,96,138,97,138,98,138,99,138,100,138,101,138,102,138,103,138,104,138,105,138,106,138,107,138,108,138,109,138,110,138,111,138,112,138,113,138,114,138,115,138,116,138,117,138,118,138,119,138,120,138,122,138,123,138,124,138,125,138,126,138,127,138,128,138,116,109,211,91,213,136,132,152,107,140,109,154,51,158,10,110,164,81,67,81,163,87,129,136,159,83,244,99,149,143,237,86,88,84,6,87,63,115,144,110,24,127,220,143,209,130,63,97,40,96,98,150,240,102,166,126,138,141,195,141,165,148,179,92,164,124,8,103,166,96,5,150,24,128,145,78,231,144,0,83,104,150,65,81,208,143,116,133,93,145,85,102,245,151,85,91,29,83,56,120,66,103,61,104,201,84,126,112,176,91,125,143,141,81,40,87,177,84,18,101,130,102,94,141,67,141,15,129,108,132,109,144,223,124,255,81,251,133,163,103,233,101,161,111,164,134,129,142,106,86,32,144,130,118,118,112,229,113,35,141,233,98,25,82,253,108,60,141,14,96,158,88,142,97,254,102,96,141,78,98,179,85,35,110,45,103,103,143,129,138,130,138,131,138,132,138,133,138,134,138,135,138,136,138,139,138,140,138,141,138,142,138,143,138,144,138,145,138,146,138,148,138,149,138,150,138,151,138,152,138,153,138,154,138,155,138,156,138,157,138,158,138,159,138,160,138,161,138,162,138,163,138,164,138,165,138,166,138,167,138,168,138,169,138,170,138,171,138,172,138,173,138,174,138,175,138,176,138,177,138,178,138,179,138,180,138,181,138,182,138,183,138,184,138,185,138,186,138,187,138,188,138,189,138,190,138,191,138,192,138,193,138,194,138,195,138,196,138,197,138,198,138,199,138,200,138,201,138,202,138,203,138,204,138,205,138,206,138,207,138,208,138,209,138,210,138,211,138,212,138,213,138,214,138,215,138,216,138,217,138,218,138,219,138,220,138,221,138,222,138,223,138,224,138,225,138,226,138,227,138,225,148,248,149,40,119,5,104,168,105,139,84,77,78,184,112,200,139,88,100,139,101,133,91,132,122,58,80,232,91,187,119,225,107,121,138,152,124,190,108,207,118,169,101,151,143,45,93,85,92,56,134,8,104,96,83,24,98,217,122,91,110,253,126,31,106,224,122,112,95,51,111,32,95,140,99,168,109,86,103,8,78,16,94,38,141,215,78,192,128,52,118,156,150,219,98,45,102,126,98,188,108,117,141,103,113,105,127,70,81,135,128,236,83,110,144,152,98,242,84,240,134,153,143,5,128,23,149,23,133,217,143,89,109,205,115,159,101,31,119,4,117,39,120,251,129,30,141,136,148,166,79,149,103,185,117,202,139,7,151,47,99,71,149,53,150,184,132,35,99,65,119,129,95,240,114,137,78,20,96,116,101,239,98,99,107,63,101,228,138,229,138,230,138,231,138,232,138,233,138,234,138,235,138,236,138,237,138,238,138,239,138,240,138,241,138,242,138,243,138,244,138,245,138,246,138,247,138,248,138,249,138,250,138,251,138,252,138,253,138,254,138,255,138,0,139,1,139,2,139,3,139,4,139,5,139,6,139,8,139,9,139,10,139,11,139,12,139,13,139,14,139,15,139,16,139,17,139,18,139,19,139,20,139,21,139,22,139,23,139,24,139,25,139,26,139,27,139,28,139,29,139,30,139,31,139,32,139,33,139,34,139,35,139,36,139,37,139,39,139,40,139,41,139,42,139,43,139,44,139,45,139,46,139,47,139,48,139,49,139,50,139,51,139,52,139,53,139,54,139,55,139,56,139,57,139,58,139,59,139,60,139,61,139,62,139,63,139,64,139,65,139,66,139,67,139,68,139,69,139,39,94,199,117,209,144,193,139,157,130,157,103,47,101,49,84,24,135,229,119,162,128,2,129,65,108,75,78,199,126,76,128,244,118,13,105,150,107,103,98,60,80,132,79,64,87,7,99,98,107,190,141,234,83,232,101,184,126,215,95,26,99,183,99,243,129,244,129,110,127,28,94,217,92,54,82,122,102,233,121,26,122,40,141,153,112,212,117,222,110,187,108,146,122,45,78,197,118,224,95,159,148,119,136,200,126,205,121,191,128,205,145,242,78,23,79,31,130,104,84,222,93,50,109,204,139,165,124,116,143,152,128,26,94,146,84,177,118,153,91,60,102,164,154,224,115,42,104,219,134,49,103,42,115,248,139,219,139,16,144,249,122,219,112,110,113,196,98,169,119,49,86,59,78,87,132,241,103,169,82,192,134,46,141,248,148,81,123,70,139,71,139,72,139,73,139,74,139,75,139,76,139,77,139,78,139,79,139,80,139,81,139,82,139,83,139,84,139,85,139,86,139,87,139,88,139,89,139,90,139,91,139,92,139,93,139,94,139,95,139,96,139,97,139,98,139,99,139,100,139,101,139,103,139,104,139,105,139,106,139,107,139,109,139,110,139,111,139,112,139,113,139,114,139,115,139,116,139,117,139,118,139,119,139,120,139,121,139,122,139,123,139,124,139,125,139,126,139,127,139,128,139,129,139,130,139,131,139,132,139,133,139,134,139,135,139,136,139,137,139,138,139,139,139,140,139,141,139,142,139,143,139,144,139,145,139,146,139,147,139,148,139,149,139,150,139,151,139,152,139,153,139,154,139,155,139,156,139,157,139,158,139,159,139,172,139,177,139,187,139,199,139,208,139,234,139,9,140,30,140,79,79,232,108,93,121,123,154,147,98,42,114,253,98,19,78,22,120,108,143,176,100,90,141,198,123,105,104,132,94,197,136,134,89,158,100,238,88,182,114,14,105,37,149,253,143,88,141,96,87,0,127,6,140,198,81,73,99,217,98,83,83,76,104,34,116,1,131,76,145,68,85,64,119,124,112,74,109,121,81,168,84,68,141,255,89,203,110,196,109,92,91,43,125,212,78,125,124,211,110,80,91,234,129,13,110,87,91,3,155,213,104,42,142,151,91,252,126,59,96,181,126,185,144,112,141,79,89,205,99,223,121,179,141,82,83,207,101,86,121,197,139,59,150,196,126,187,148,130,126,52,86,137,145,0,103,106,127,10,92,117,144,40,102,230,93,80,79,222,103,90,80,92,79,80,87,167,94,16,232,17,232,18,232,19,232,20,232,56,140,57,140,58,140,59,140,60,140,61,140,62,140,63,140,64,140,66,140,67,140,68,140,69,140,72,140,74,140,75,140,77,140,78,140,79,140,80,140,81,140,82,140,83,140,84,140,86,140,87,140,88,140,89,140,91,140,92,140,93,140,94,140,95,140,96,140,99,140,100,140,101,140,102,140,103,140,104,140,105,140,108,140,109,140,110,140,111,140,112,140,113,140,114,140,116,140,117,140,118,140,119,140,123,140,124,140,125,140,126,140,127,140,128,140,129,140,131,140,132,140,134,140,135,140,136,140,139,140,141,140,142,140,143,140,144,140,145,140,146,140,147,140,149,140,150,140,151,140,153,140,154,140,155,140,156,140,157,140,158,140,159,140,160,140,161,140,162,140,163,140,164,140,165,140,166,140,167,140,168,140,169,140,170,140,171,140,172,140,173,140,141,78,12,78,64,81,16,78,255,94,69,83,21,78,152,78,30,78,50,155,108,91,105,86,40,78,186,121,63,78,21,83,71,78,45,89,59,114,110,83,16,108,223,86,228,128,151,153,211,107,126,119,23,159,54,78,159,78,16,159,92,78,105,78,147,78,136,130,91,91,108,85,15,86,196,78,141,83,157,83,163,83,165,83,174,83,101,151,93,141,26,83,245,83,38,83,46,83,62,83,92,141,102,83,99,83,2,82,8,82,14,82,45,82,51,82,63,82,64,82,76,82,94,82,97,82,92,82,175,132,125,82,130,82,129,82,144,82,147,82,130,81,84,127,187,78,195,78,201,78,194,78,232,78,225,78,235,78,222,78,27,79,243,78,34,79,100,79,245,78,37,79,39,79,9,79,43,79,94,79,103,79,56,101,90,79,93,79,174,140,175,140,176,140,177,140,178,140,179,140,180,140,181,140,182,140,183,140,184,140,185,140,186,140,187,140,188,140,189,140,190,140,191,140,192,140,193,140,194,140,195,140,196,140,197,140,198,140,199,140,200,140,201,140,202,140,203,140,204,140,205,140,206,140,207,140,208,140,209,140,210,140,211,140,212,140,213,140,214,140,215,140,216,140,217,140,218,140,219,140,220,140,221,140,222,140,223,140,224,140,225,140,226,140,227,140,228,140,229,140,230,140,231,140,232,140,233,140,234,140,235,140,236,140,237,140,238,140,239,140,240,140,241,140,242,140,243,140,244,140,245,140,246,140,247,140,248,140,249,140,250,140,251,140,252,140,253,140,254,140,255,140,0,141,1,141,2,141,3,141,4,141,5,141,6,141,7,141,8,141,9,141,10,141,11,141,12,141,13,141,95,79,87,79,50,79,61,79,118,79,116,79,145,79,137,79,131,79,143,79,126,79,123,79,170,79,124,79,172,79,148,79,230,79,232,79,234,79,197,79,218,79,227,79,220,79,209,79,223,79,248,79,41,80,76,80,243,79,44,80,15,80,46,80,45,80,254,79,28,80,12,80,37,80,40,80,126,80,67,80,85,80,72,80,78,80,108,80,123,80,165,80,167,80,169,80,186,80,214,80,6,81,237,80,236,80,230,80,238,80,7,81,11,81,221,78,61,108,88,79,101,79,206,79,160,159,70,108,116,124,110,81,253,93,201,158,152,153,129,81,20,89,249,82,13,83,7,138,16,83,235,81,25,89,85,81,160,78,86,81,179,78,110,136,164,136,181,78,20,129,210,136,128,121,52,91,3,136,184,127,171,81,177,81,189,81,188,81,14,141,15,141,16,141,17,141,18,141,19,141,20,141,21,141,22,141,23,141,24,141,25,141,26,141,27,141,28,141,32,141,81,141,82,141,87,141,95,141,101,141,104,141,105,141,106,141,108,141,110,141,111,141,113,141,114,141,120,141,121,141,122,141,123,141,124,141,125,141,126,141,127,141,128,141,130,141,131,141,134,141,135,141,136,141,137,141,140,141,141,141,142,141,143,141,144,141,146,141,147,141,149,141,150,141,151,141,152,141,153,141,154,141,155,141,156,141,157,141,158,141,160,141,161,141,162,141,164,141,165,141,166,141,167,141,168,141,169,141,170,141,171,141,172,141,173,141,174,141,175,141,176,141,178,141,182,141,183,141,185,141,187,141,189,141,192,141,193,141,194,141,197,141,199,141,200,141,201,141,202,141,205,141,208,141,210,141,211,141,212,141,199,81,150,81,162,81,165,81,160,139,166,139,167,139,170,139,180,139,181,139,183,139,194,139,195,139,203,139,207,139,206,139,210,139,211,139,212,139,214,139,216,139,217,139,220,139,223,139,224,139,228,139,232,139,233,139,238,139,240,139,243,139,246,139,249,139,252,139,255,139,0,140,2,140,4,140,7,140,12,140,15,140,17,140,18,140,20,140,21,140,22,140,25,140,27,140,24,140,29,140,31,140,32,140,33,140,37,140,39,140,42,140,43,140,46,140,47,140,50,140,51,140,53,140,54,140,105,83,122,83,29,150,34,150,33,150,49,150,42,150,61,150,60,150,66,150,73,150,84,150,95,150,103,150,108,150,114,150,116,150,136,150,141,150,151,150,176,150,151,144,155,144,157,144,153,144,172,144,161,144,180,144,179,144,182,144,186,144,213,141,216,141,217,141,220,141,224,141,225,141,226,141,229,141,230,141,231,141,233,141,237,141,238,141,240,141,241,141,242,141,244,141,246,141,252,141,254,141,255,141,0,142,1,142,2,142,3,142,4,142,6,142,7,142,8,142,11,142,13,142,14,142,16,142,17,142,18,142,19,142,21,142,22,142,23,142,24,142,25,142,26,142,27,142,28,142,32,142,33,142,36,142,37,142,38,142,39,142,40,142,43,142,45,142,48,142,50,142,51,142,52,142,54,142,55,142,56,142,59,142,60,142,62,142,63,142,67,142,69,142,70,142,76,142,77,142,78,142,79,142,80,142,83,142,84,142,85,142,86,142,87,142,88,142,90,142,91,142,92,142,93,142,94,142,95,142,96,142,97,142,98,142,99,142,100,142,101,142,103,142,104,142,106,142,107,142,110,142,113,142,184,144,176,144,207,144,197,144,190,144,208,144,196,144,199,144,211,144,230,144,226,144,220,144,215,144,219,144,235,144,239,144,254,144,4,145,34,145,30,145,35,145,49,145,47,145,57,145,67,145,70,145,13,82,66,89,162,82,172,82,173,82,190,82,255,84,208,82,214,82,240,82,223,83,238,113,205,119,244,94,245,81,252,81,47,155,182,83,1,95,90,117,239,93,76,87,169,87,161,87,126,88,188,88,197,88,209,88,41,87,44,87,42,87,51,87,57,87,46,87,47,87,92,87,59,87,66,87,105,87,133,87,107,87,134,87,124,87,123,87,104,87,109,87,118,87,115,87,173,87,164,87,140,87,178,87,207,87,167,87,180,87,147,87,160,87,213,87,216,87,218,87,217,87,210,87,184,87,244,87,239,87,248,87,228,87,221,87,115,142,117,142,119,142,120,142,121,142,122,142,123,142,125,142,126,142,128,142,130,142,131,142,132,142,134,142,136,142,137,142,138,142,139,142,140,142,141,142,142,142,145,142,146,142,147,142,149,142,150,142,151,142,152,142,153,142,154,142,155,142,157,142,159,142,160,142,161,142,162,142,163,142,164,142,165,142,166,142,167,142,168,142,169,142,170,142,173,142,174,142,176,142,177,142,179,142,180,142,181,142,182,142,183,142,184,142,185,142,187,142,188,142,189,142,190,142,191,142,192,142,193,142,194,142,195,142,196,142,197,142,198,142,199,142,200,142,201,142,202,142,203,142,204,142,205,142,207,142,208,142,209,142,210,142,211,142,212,142,213,142,214,142,215,142,216,142,217,142,218,142,219,142,220,142,221,142,222,142,223,142,224,142,225,142,226,142,227,142,228,142,11,88,13,88,253,87,237,87,0,88,30,88,25,88,68,88,32,88,101,88,108,88,129,88,137,88,154,88,128,88,168,153,25,159,255,97,121,130,125,130,127,130,143,130,138,130,168,130,132,130,142,130,145,130,151,130,153,130,171,130,184,130,190,130,176,130,200,130,202,130,227,130,152,130,183,130,174,130,203,130,204,130,193,130,169,130,180,130,161,130,170,130,159,130,196,130,206,130,164,130,225,130,9,131,247,130,228,130,15,131,7,131,220,130,244,130,210,130,216,130,12,131,251,130,211,130,17,131,26,131,6,131,20,131,21,131,224,130,213,130,28,131,81,131,91,131,92,131,8,131,146,131,60,131,52,131,49,131,155,131,94,131,47,131,79,131,71,131,67,131,95,131,64,131,23,131,96,131,45,131,58,131,51,131,102,131,101,131,229,142,230,142,231,142,232,142,233,142,234,142,235,142,236,142,237,142,238,142,239,142,240,142,241,142,242,142,243,142,244,142,245,142,246,142,247,142,248,142,249,142,250,142,251,142,252,142,253,142,254,142,255,142,0,143,1,143,2,143,3,143,4,143,5,143,6,143,7,143,8,143,9,143,10,143,11,143,12,143,13,143,14,143,15,143,16,143,17,143,18,143,19,143,20,143,21,143,22,143,23,143,24,143,25,143,26,143,27,143,28,143,29,143,30,143,31,143,32,143,33,143,34,143,35,143,36,143,37,143,38,143,39,143,40,143,41,143,42,143,43,143,44,143,45,143,46,143,47,143,48,143,49,143,50,143,51,143,52,143,53,143,54,143,55,143,56,143,57,143,58,143,59,143,60,143,61,143,62,143,63,143,64,143,65,143,66,143,67,143,68,143,104,131,27,131,105,131,108,131,106,131,109,131,110,131,176,131,120,131,179,131,180,131,160,131,170,131,147,131,156,131,133,131,124,131,182,131,169,131,125,131,184,131,123,131,152,131,158,131,168,131,186,131,188,131,193,131,1,132,229,131,216,131,7,88,24,132,11,132,221,131,253,131,214,131,28,132,56,132,17,132,6,132,212,131,223,131,15,132,3,132,248,131,249,131,234,131,197,131,192,131,38,132,240,131,225,131,92,132,81,132,90,132,89,132,115,132,135,132,136,132,122,132,137,132,120,132,60,132,70,132,105,132,118,132,140,132,142,132,49,132,109,132,193,132,205,132,208,132,230,132,189,132,211,132,202,132,191,132,186,132,224,132,161,132,185,132,180,132,151,132,229,132,227,132,12,133,13,117,56,133,240,132,57,133,31,133,58,133,69,143,70,143,71,143,72,143,73,143,74,143,75,143,76,143,77,143,78,143,79,143,80,143,81,143,82,143,83,143,84,143,85,143,86,143,87,143,88,143,89,143,90,143,91,143,92,143,93,143,94,143,95,143,96,143,97,143,98,143,99,143,100,143,101,143,106,143,128,143,140,143,146,143,157,143,160,143,161,143,162,143,164,143,165,143,166,143,167,143,170,143,172,143,173,143,174,143,175,143,178,143,179,143,180,143,181,143,183,143,184,143,186,143,187,143,188,143,191,143,192,143,195,143,198,143,201,143,202,143,203,143,204,143,205,143,207,143,210,143,214,143,215,143,218,143,224,143,225,143,227,143,231,143,236,143,239,143,241,143,242,143,244,143,245,143,246,143,250,143,251,143,252,143,254,143,255,143,7,144,8,144,12,144,14,144,19,144,21,144,24,144,86,133,59,133,255,132,252,132,89,133,72,133,104,133,100,133,94,133,122,133,162,119,67,133,114,133,123,133,164,133,168,133,135,133,143,133,121,133,174,133,156,133,133,133,185,133,183,133,176,133,211,133,193,133,220,133,255,133,39,134,5,134,41,134,22,134,60,134,254,94,8,95,60,89,65,89,55,128,85,89,90,89,88,89,15,83,34,92,37,92,44,92,52,92,76,98,106,98,159,98,187,98,202,98,218,98,215,98,238,98,34,99,246,98,57,99,75,99,67,99,173,99,246,99,113,99,122,99,142,99,180,99,109,99,172,99,138,99,105,99,174,99,188,99,242,99,248,99,224,99,255,99,196,99,222,99,206,99,82,100,198,99,190,99,69,100,65,100,11,100,27,100,32,100,12,100,38,100,33,100,94,100,132,100,109,100,150,100,25,144,28,144,35,144,36,144,37,144,39,144,40,144,41,144,42,144,43,144,44,144,48,144,49,144,50,144,51,144,52,144,55,144,57,144,58,144,61,144,63,144,64,144,67,144,69,144,70,144,72,144,73,144,74,144,75,144,76,144,78,144,84,144,85,144,86,144,89,144,90,144,92,144,93,144,94,144,95,144,96,144,97,144,100,144,102,144,103,144,105,144,106,144,107,144,108,144,111,144,112,144,113,144,114,144,115,144,118,144,119,144,120,144,121,144,122,144,123,144,124,144,126,144,129,144,132,144,133,144,134,144,135,144,137,144,138,144,140,144,141,144,142,144,143,144,144,144,146,144,148,144,150,144,152,144,154,144,156,144,158,144,159,144,160,144,164,144,165,144,167,144,168,144,169,144,171,144,173,144,178,144,183,144,188,144,189,144,191,144,192,144,122,100,183,100,184,100,153,100,186,100,192,100,208,100,215,100,228,100,226,100,9,101,37,101,46,101,11,95,210,95,25,117,17,95,95,83,241,83,253,83,233,83,232,83,251,83,18,84,22,84,6,84,75,84,82,84,83,84,84,84,86,84,67,84,33,84,87,84,89,84,35,84,50,84,130,84,148,84,119,84,113,84,100,84,154,84,155,84,132,84,118,84,102,84,157,84,208,84,173,84,194,84,180,84,210,84,167,84,166,84,211,84,212,84,114,84,163,84,213,84,187,84,191,84,204,84,217,84,218,84,220,84,169,84,170,84,164,84,221,84,207,84,222,84,27,85,231,84,32,85,253,84,20,85,243,84,34,85,35,85,15,85,17,85,39,85,42,85,103,85,143,85,181,85,73,85,109,85,65,85,85,85,63,85,80,85,60,85,194,144,195,144,198,144,200,144,201,144,203,144,204,144,205,144,210,144,212,144,213,144,214,144,216,144,217,144,218,144,222,144,223,144,224,144,227,144,228,144,229,144,233,144,234,144,236,144,238,144,240,144,241,144,242,144,243,144,245,144,246,144,247,144,249,144,250,144,251,144,252,144,255,144,0,145,1,145,3,145,5,145,6,145,7,145,8,145,9,145,10,145,11,145,12,145,13,145,14,145,15,145,16,145,17,145,18,145,19,145,20,145,21,145,22,145,23,145,24,145,26,145,27,145,28,145,29,145,31,145,32,145,33,145,36,145,37,145,38,145,39,145,40,145,41,145,42,145,43,145,44,145,45,145,46,145,48,145,50,145,51,145,52,145,53,145,54,145,55,145,56,145,58,145,59,145,60,145,61,145,62,145,63,145,64,145,65,145,66,145,68,145,55,85,86,85,117,85,118,85,119,85,51,85,48,85,92,85,139,85,210,85,131,85,177,85,185,85,136,85,129,85,159,85,126,85,214,85,145,85,123,85,223,85,189,85,190,85,148,85,153,85,234,85,247,85,201,85,31,86,209,85,235,85,236,85,212,85,230,85,221,85,196,85,239,85,229,85,242,85,243,85,204,85,205,85,232,85,245,85,228,85,148,143,30,86,8,86,12,86,1,86,36,86,35,86,254,85,0,86,39,86,45,86,88,86,57,86,87,86,44,86,77,86,98,86,89,86,92,86,76,86,84,86,134,86,100,86,113,86,107,86,123,86,124,86,133,86,147,86,175,86,212,86,215,86,221,86,225,86,245,86,235,86,249,86,255,86,4,87,10,87,9,87,28,87,15,94,25,94,20,94,17,94,49,94,59,94,60,94,69,145,71,145,72,145,81,145,83,145,84,145,85,145,86,145,88,145,89,145,91,145,92,145,95,145,96,145,102,145,103,145,104,145,107,145,109,145,115,145,122,145,123,145,124,145,128,145,129,145,130,145,131,145,132,145,134,145,136,145,138,145,142,145,143,145,147,145,148,145,149,145,150,145,151,145,152,145,153,145,156,145,157,145,158,145,159,145,160,145,161,145,164,145,165,145,166,145,167,145,168,145,169,145,171,145,172,145,176,145,177,145,178,145,179,145,182,145,183,145,184,145,185,145,187,145,188,145,189,145,190,145,191,145,192,145,193,145,194,145,195,145,196,145,197,145,198,145,200,145,203,145,208,145,210,145,211,145,212,145,213,145,214,145,215,145,216,145,217,145,218,145,219,145,221,145,222,145,223,145,224,145,225,145,226,145,227,145,228,145,229,145,55,94,68,94,84,94,91,94,94,94,97,94,140,92,122,92,141,92,144,92,150,92,136,92,152,92,153,92,145,92,154,92,156,92,181,92,162,92,189,92,172,92,171,92,177,92,163,92,193,92,183,92,196,92,210,92,228,92,203,92,229,92,2,93,3,93,39,93,38,93,46,93,36,93,30,93,6,93,27,93,88,93,62,93,52,93,61,93,108,93,91,93,111,93,93,93,107,93,75,93,74,93,105,93,116,93,130,93,153,93,157,93,115,140,183,93,197,93,115,95,119,95,130,95,135,95,137,95,140,95,149,95,153,95,156,95,168,95,173,95,181,95,188,95,98,136,97,95,173,114,176,114,180,114,183,114,184,114,195,114,193,114,206,114,205,114,210,114,232,114,239,114,233,114,242,114,244,114,247,114,1,115,243,114,3,115,250,114,230,145,231,145,232,145,233,145,234,145,235,145,236,145,237,145,238,145,239,145,240,145,241,145,242,145,243,145,244,145,245,145,246,145,247,145,248,145,249,145,250,145,251,145,252,145,253,145,254,145,255,145,0,146,1,146,2,146,3,146,4,146,5,146,6,146,7,146,8,146,9,146,10,146,11,146,12,146,13,146,14,146,15,146,16,146,17,146,18,146,19,146,20,146,21,146,22,146,23,146,24,146,25,146,26,146,27,146,28,146,29,146,30,146,31,146,32,146,33,146,34,146,35,146,36,146,37,146,38,146,39,146,40,146,41,146,42,146,43,146,44,146,45,146,46,146,47,146,48,146,49,146,50,146,51,146,52,146,53,146,54,146,55,146,56,146,57,146,58,146,59,146,60,146,61,146,62,146,63,146,64,146,65,146,66,146,67,146,68,146,69,146,251,114,23,115,19,115,33,115,10,115,30,115,29,115,21,115,34,115,57,115,37,115,44,115,56,115,49,115,80,115,77,115,87,115,96,115,108,115,111,115,126,115,27,130,37,89,231,152,36,89,2,89,99,153,103,153,104,153,105,153,106,153,107,153,108,153,116,153,119,153,125,153,128,153,132,153,135,153,138,153,141,153,144,153,145,153,147,153,148,153,149,153,128,94,145,94,139,94,150,94,165,94,160,94,185,94,181,94,190,94,179,94,83,141,210,94,209,94,219,94,232,94,234,94,186,129,196,95,201,95,214,95,207,95,3,96,238,95,4,96,225,95,228,95,254,95,5,96,6,96,234,95,237,95,248,95,25,96,53,96,38,96,27,96,15,96,13,96,41,96,43,96,10,96,63,96,33,96,120,96,121,96,123,96,122,96,66,96,70,146,71,146,72,146,73,146,74,146,75,146,76,146,77,146,78,146,79,146,80,146,81,146,82,146,83,146,84,146,85,146,86,146,87,146,88,146,89,146,90,146,91,146,92,146,93,146,94,146,95,146,96,146,97,146,98,146,99,146,100,146,101,146,102,146,103,146,104,146,105,146,106,146,107,146,108,146,109,146,110,146,111,146,112,146,113,146,114,146,115,146,117,146,118,146,119,146,120,146,121,146,122,146,123,146,124,146,125,146,126,146,127,146,128,146,129,146,130,146,131,146,132,146,133,146,134,146,135,146,136,146,137,146,138,146,139,146,140,146,141,146,143,146,144,146,145,146,146,146,147,146,148,146,149,146,150,146,151,146,152,146,153,146,154,146,155,146,156,146,157,146,158,146,159,146,160,146,161,146,162,146,163,146,164,146,165,146,166,146,167,146,106,96,125,96,150,96,154,96,173,96,157,96,131,96,146,96,140,96,155,96,236,96,187,96,177,96,221,96,216,96,198,96,218,96,180,96,32,97,38,97,21,97,35,97,244,96,0,97,14,97,43,97,74,97,117,97,172,97,148,97,167,97,183,97,212,97,245,97,221,95,179,150,233,149,235,149,241,149,243,149,245,149,246,149,252,149,254,149,3,150,4,150,6,150,8,150,10,150,11,150,12,150,13,150,15,150,18,150,21,150,22,150,23,150,25,150,26,150,44,78,63,114,21,98,53,108,84,108,92,108,74,108,163,108,133,108,144,108,148,108,140,108,104,108,105,108,116,108,118,108,134,108,169,108,208,108,212,108,173,108,247,108,248,108,241,108,215,108,178,108,224,108,214,108,250,108,235,108,238,108,177,108,211,108,239,108,254,108,168,146,169,146,170,146,171,146,172,146,173,146,175,146,176,146,177,146,178,146,179,146,180,146,181,146,182,146,183,146,184,146,185,146,186,146,187,146,188,146,189,146,190,146,191,146,192,146,193,146,194,146,195,146,196,146,197,146,198,146,199,146,201,146,202,146,203,146,204,146,205,146,206,146,207,146,208,146,209,146,210,146,211,146,212,146,213,146,214,146,215,146,216,146,217,146,218,146,219,146,220,146,221,146,222,146,223,146,224,146,225,146,226,146,227,146,228,146,229,146,230,146,231,146,232,146,233,146,234,146,235,146,236,146,237,146,238,146,239,146,240,146,241,146,242,146,243,146,244,146,245,146,246,146,247,146,248,146,249,146,250,146,251,146,252,146,253,146,254,146,255,146,0,147,1,147,2,147,3,147,4,147,5,147,6,147,7,147,8,147,9,147,57,109,39,109,12,109,67,109,72,109,7,109,4,109,25,109,14,109,43,109,77,109,46,109,53,109,26,109,79,109,82,109,84,109,51,109,145,109,111,109,158,109,160,109,94,109,147,109,148,109,92,109,96,109,124,109,99,109,26,110,199,109,197,109,222,109,14,110,191,109,224,109,17,110,230,109,221,109,217,109,22,110,171,109,12,110,174,109,43,110,110,110,78,110,107,110,178,110,95,110,134,110,83,110,84,110,50,110,37,110,68,110,223,110,177,110,152,110,224,110,45,111,226,110,165,110,167,110,189,110,187,110,183,110,215,110,180,110,207,110,143,110,194,110,159,110,98,111,70,111,71,111,36,111,21,111,249,110,47,111,54,111,75,111,116,111,42,111,9,111,41,111,137,111,141,111,140,111,120,111,114,111,124,111,122,111,209,111,10,147,11,147,12,147,13,147,14,147,15,147,16,147,17,147,18,147,19,147,20,147,21,147,22,147,23,147,24,147,25,147,26,147,27,147,28,147,29,147,30,147,31,147,32,147,33,147,34,147,35,147,36,147,37,147,38,147,39,147,40,147,41,147,42,147,43,147,44,147,45,147,46,147,47,147,48,147,49,147,50,147,51,147,52,147,53,147,54,147,55,147,56,147,57,147,58,147,59,147,60,147,61,147,63,147,64,147,65,147,66,147,67,147,68,147,69,147,70,147,71,147,72,147,73,147,74,147,75,147,76,147,77,147,78,147,79,147,80,147,81,147,82,147,83,147,84,147,85,147,86,147,87,147,88,147,89,147,90,147,91,147,92,147,93,147,94,147,95,147,96,147,97,147,98,147,99,147,100,147,101,147,102,147,103,147,104,147,105,147,107,147,201,111,167,111,185,111,182,111,194,111,225,111,238,111,222,111,224,111,239,111,26,112,35,112,27,112,57,112,53,112,79,112,94,112,128,91],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+123978);allocate([132,91,149,91,147,91,165,91,184,91,47,117,158,154,52,100,228,91,238,91,48,137,240,91,71,142,7,139,182,143,211,143,213,143,229,143,238,143,228,143,233,143,230,143,243,143,232,143,5,144,4,144,11,144,38,144,17,144,13,144,22,144,33,144,53,144,54,144,45,144,47,144,68,144,81,144,82,144,80,144,104,144,88,144,98,144,91,144,185,102,116,144,125,144,130,144,136,144,131,144,139,144,80,95,87,95,86,95,88,95,59,92,171,84,80,92,89,92,113,91,99,92,102,92,188,127,42,95,41,95,45,95,116,130,60,95,59,155,110,92,129,89,131,89,141,89,169,89,170,89,163,89,108,147,109,147,110,147,111,147,112,147,113,147,114,147,115,147,116,147,117,147,118,147,119,147,120,147,121,147,122,147,123,147,124,147,125,147,126,147,127,147,128,147,129,147,130,147,131,147,132,147,133,147,134,147,135,147,136,147,137,147,138,147,139,147,140,147,141,147,142,147,144,147,145,147,146,147,147,147,148,147,149,147,150,147,151,147,152,147,153,147,154,147,155,147,156,147,157,147,158,147,159,147,160,147,161,147,162,147,163,147,164,147,165,147,166,147,167,147,168,147,169,147,170,147,171,147,172,147,173,147,174,147,175,147,176,147,177,147,178,147,179,147,180,147,181,147,182,147,183,147,184,147,185,147,186,147,187,147,188,147,189,147,190,147,191,147,192,147,193,147,194,147,195,147,196,147,197,147,198,147,199,147,200,147,201,147,203,147,204,147,205,147,151,89,202,89,171,89,158,89,164,89,210,89,178,89,175,89,215,89,190,89,5,90,6,90,221,89,8,90,227,89,216,89,249,89,12,90,9,90,50,90,52,90,17,90,35,90,19,90,64,90,103,90,74,90,85,90,60,90,98,90,117,90,236,128,170,90,155,90,119,90,122,90,190,90,235,90,178,90,210,90,212,90,184,90,224,90,227,90,241,90,214,90,230,90,216,90,220,90,9,91,23,91,22,91,50,91,55,91,64,91,21,92,28,92,90,91,101,91,115,91,81,91,83,91,98,91,117,154,119,154,120,154,122,154,127,154,125,154,128,154,129,154,133,154,136,154,138,154,144,154,146,154,147,154,150,154,152,154,155,154,156,154,157,154,159,154,160,154,162,154,163,154,165,154,167,154,159,126,161,126,163,126,165,126,168,126,169,126,206,147,207,147,208,147,209,147,210,147,211,147,212,147,213,147,215,147,216,147,217,147,218,147,219,147,220,147,221,147,222,147,223,147,224,147,225,147,226,147,227,147,228,147,229,147,230,147,231,147,232,147,233,147,234,147,235,147,236,147,237,147,238,147,239,147,240,147,241,147,242,147,243,147,244,147,245,147,246,147,247,147,248,147,249,147,250,147,251,147,252,147,253,147,254,147,255,147,0,148,1,148,2,148,3,148,4,148,5,148,6,148,7,148,8,148,9,148,10,148,11,148,12,148,13,148,14,148,15,148,16,148,17,148,18,148,19,148,20,148,21,148,22,148,23,148,24,148,25,148,26,148,27,148,28,148,29,148,30,148,31,148,32,148,33,148,34,148,35,148,36,148,37,148,38,148,39,148,40,148,41,148,42,148,43,148,44,148,45,148,46,148,173,126,176,126,190,126,192,126,193,126,194,126,201,126,203,126,204,126,208,126,212,126,215,126,219,126,224,126,225,126,232,126,235,126,238,126,239,126,241,126,242,126,13,127,246,126,250,126,251,126,254,126,1,127,2,127,3,127,7,127,8,127,11,127,12,127,15,127,17,127,18,127,23,127,25,127,28,127,27,127,31,127,33,127,34,127,35,127,36,127,37,127,38,127,39,127,42,127,43,127,44,127,45,127,47,127,48,127,49,127,50,127,51,127,53,127,122,94,127,117,219,93,62,117,149,144,142,115,145,115,174,115,162,115,159,115,207,115,194,115,209,115,183,115,179,115,192,115,201,115,200,115,229,115,217,115,124,152,10,116,233,115,231,115,222,115,186,115,242,115,15,116,42,116,91,116,38,116,37,116,40,116,48,116,46,116,44,116,47,148,48,148,49,148,50,148,51,148,52,148,53,148,54,148,55,148,56,148,57,148,58,148,59,148,60,148,61,148,63,148,64,148,65,148,66,148,67,148,68,148,69,148,70,148,71,148,72,148,73,148,74,148,75,148,76,148,77,148,78,148,79,148,80,148,81,148,82,148,83,148,84,148,85,148,86,148,87,148,88,148,89,148,90,148,91,148,92,148,93,148,94,148,95,148,96,148,97,148,98,148,99,148,100,148,101,148,102,148,103,148,104,148,105,148,106,148,108,148,109,148,110,148,111,148,112,148,113,148,114,148,115,148,116,148,117,148,118,148,119,148,120,148,121,148,122,148,123,148,124,148,125,148,126,148,127,148,128,148,129,148,130,148,131,148,132,148,145,148,150,148,152,148,199,148,207,148,211,148,212,148,218,148,230,148,251,148,28,149,32,149,27,116,26,116,65,116,92,116,87,116,85,116,89,116,119,116,109,116,126,116,156,116,142,116,128,116,129,116,135,116,139,116,158,116,168,116,169,116,144,116,167,116,210,116,186,116,234,151,235,151,236,151,76,103,83,103,94,103,72,103,105,103,165,103,135,103,106,103,115,103,152,103,167,103,117,103,168,103,158,103,173,103,139,103,119,103,124,103,240,103,9,104,216,103,10,104,233,103,176,103,12,104,217,103,181,103,218,103,179,103,221,103,0,104,195,103,184,103,226,103,14,104,193,103,253,103,50,104,51,104,96,104,97,104,78,104,98,104,68,104,100,104,131,104,29,104,85,104,102,104,65,104,103,104,64,104,62,104,74,104,73,104,41,104,181,104,143,104,116,104,119,104,147,104,107,104,194,104,110,105,252,104,31,105,32,105,249,104,39,149,51,149,61,149,67,149,72,149,75,149,85,149,90,149,96,149,110,149,116,149,117,149,119,149,120,149,121,149,122,149,123,149,124,149,125,149,126,149,128,149,129,149,130,149,131,149,132,149,133,149,134,149,135,149,136,149,137,149,138,149,139,149,140,149,141,149,142,149,143,149,144,149,145,149,146,149,147,149,148,149,149,149,150,149,151,149,152,149,153,149,154,149,155,149,156,149,157,149,158,149,159,149,160,149,161,149,162,149,163,149,164,149,165,149,166,149,167,149,168,149,169,149,170,149,171,149,172,149,173,149,174,149,175,149,176,149,177,149,178,149,179,149,180,149,181,149,182,149,183,149,184,149,185,149,186,149,187,149,188,149,189,149,190,149,191,149,192,149,193,149,194,149,195,149,196,149,197,149,198,149,199,149,200,149,201,149,202,149,203,149,36,105,240,104,11,105,1,105,87,105,227,104,16,105,113,105,57,105,96,105,66,105,93,105,132,105,107,105,128,105,152,105,120,105,52,105,204,105,135,105,136,105,206,105,137,105,102,105,99,105,121,105,155,105,167,105,187,105,171,105,173,105,212,105,177,105,193,105,202,105,223,105,149,105,224,105,141,105,255,105,47,106,237,105,23,106,24,106,101,106,242,105,68,106,62,106,160,106,80,106,91,106,53,106,142,106,121,106,61,106,40,106,88,106,124,106,145,106,144,106,169,106,151,106,171,106,55,115,82,115,129,107,130,107,135,107,132,107,146,107,147,107,141,107,154,107,155,107,161,107,170,107,107,143,109,143,113,143,114,143,115,143,117,143,118,143,120,143,119,143,121,143,122,143,124,143,126,143,129,143,130,143,132,143,135,143,139,143,204,149,205,149,206,149,207,149,208,149,209,149,210,149,211,149,212,149,213,149,214,149,215,149,216,149,217,149,218,149,219,149,220,149,221,149,222,149,223,149,224,149,225,149,226,149,227,149,228,149,229,149,230,149,231,149,236,149,255,149,7,150,19,150,24,150,27,150,30,150,32,150,35,150,36,150,37,150,38,150,39,150,40,150,41,150,43,150,44,150,45,150,47,150,48,150,55,150,56,150,57,150,58,150,62,150,65,150,67,150,74,150,78,150,79,150,81,150,82,150,83,150,86,150,87,150,88,150,89,150,90,150,92,150,93,150,94,150,96,150,99,150,101,150,102,150,107,150,109,150,110,150,111,150,112,150,113,150,115,150,120,150,121,150,122,150,123,150,124,150,125,150,126,150,127,150,128,150,129,150,130,150,131,150,132,150,135,150,137,150,138,150,141,143,142,143,143,143,152,143,154,143,206,142,11,98,23,98,27,98,31,98,34,98,33,98,37,98,36,98,44,98,231,129,239,116,244,116,255,116,15,117,17,117,19,117,52,101,238,101,239,101,240,101,10,102,25,102,114,103,3,102,21,102,0,102,133,112,247,102,29,102,52,102,49,102,54,102,53,102,6,128,95,102,84,102,65,102,79,102,86,102,97,102,87,102,119,102,132,102,140,102,167,102,157,102,190,102,219,102,220,102,230,102,233,102,50,141,51,141,54,141,59,141,61,141,64,141,69,141,70,141,72,141,73,141,71,141,77,141,85,141,89,141,199,137,202,137,203,137,204,137,206,137,207,137,208,137,209,137,110,114,159,114,93,114,102,114,111,114,126,114,127,114,132,114,139,114,141,114,143,114,146,114,8,99,50,99,176,99,140,150,142,150,145,150,146,150,147,150,149,150,150,150,154,150,155,150,157,150,158,150,159,150,160,150,161,150,162,150,163,150,164,150,165,150,166,150,168,150,169,150,170,150,171,150,172,150,173,150,174,150,175,150,177,150,178,150,180,150,181,150,183,150,184,150,186,150,187,150,191,150,194,150,195,150,200,150,202,150,203,150,208,150,209,150,211,150,212,150,214,150,215,150,216,150,217,150,218,150,219,150,220,150,221,150,222,150,223,150,225,150,226,150,227,150,228,150,229,150,230,150,231,150,235,150,236,150,237,150,238,150,240,150,241,150,242,150,244,150,245,150,248,150,250,150,251,150,252,150,253,150,255,150,2,151,3,151,5,151,10,151,11,151,12,151,16,151,17,151,18,151,20,151,21,151,23,151,24,151,25,151,26,151,27,151,29,151,31,151,32,151,63,100,216,100,4,128,234,107,243,107,253,107,245,107,249,107,5,108,7,108,6,108,13,108,21,108,24,108,25,108,26,108,33,108,41,108,36,108,42,108,50,108,53,101,85,101,107,101,77,114,82,114,86,114,48,114,98,134,22,82,159,128,156,128,147,128,188,128,10,103,189,128,177,128,171,128,173,128,180,128,183,128,231,128,232,128,233,128,234,128,219,128,194,128,196,128,217,128,205,128,215,128,16,103,221,128,235,128,241,128,244,128,237,128,13,129,14,129,242,128,252,128,21,103,18,129,90,140,54,129,30,129,44,129,24,129,50,129,72,129,76,129,83,129,116,129,89,129,90,129,113,129,96,129,105,129,124,129,125,129,109,129,103,129,77,88,181,90,136,129,130,129,145,129,213,110,163,129,170,129,204,129,38,103,202,129,187,129,33,151,34,151,35,151,36,151,37,151,38,151,39,151,40,151,41,151,43,151,44,151,46,151,47,151,49,151,51,151,52,151,53,151,54,151,55,151,58,151,59,151,60,151,61,151,63,151,64,151,65,151,66,151,67,151,68,151,69,151,70,151,71,151,72,151,73,151,74,151,75,151,76,151,77,151,78,151,79,151,80,151,81,151,84,151,85,151,87,151,88,151,90,151,92,151,93,151,95,151,99,151,100,151,102,151,103,151,104,151,106,151,107,151,108,151,109,151,110,151,111,151,112,151,113,151,114,151,117,151,119,151,120,151,121,151,122,151,123,151,125,151,126,151,127,151,128,151,129,151,130,151,131,151,132,151,134,151,135,151,136,151,137,151,138,151,140,151,142,151,143,151,144,151,147,151,149,151,150,151,151,151,153,151,154,151,155,151,156,151,157,151,193,129,166,129,36,107,55,107,57,107,67,107,70,107,89,107,209,152,210,152,211,152,213,152,217,152,218,152,179,107,64,95,194,107,243,137,144,101,81,159,147,101,188,101,198,101,196,101,195,101,204,101,206,101,210,101,214,101,128,112,156,112,150,112,157,112,187,112,192,112,183,112,171,112,177,112,232,112,202,112,16,113,19,113,22,113,47,113,49,113,115,113,92,113,104,113,69,113,114,113,74,113,120,113,122,113,152,113,179,113,181,113,168,113,160,113,224,113,212,113,231,113,249,113,29,114,40,114,108,112,24,113,102,113,185,113,62,98,61,98,67,98,72,98,73,98,59,121,64,121,70,121,73,121,91,121,92,121,83,121,90,121,98,121,87,121,96,121,111,121,103,121,122,121,133,121,138,121,154,121,167,121,179,121,209,95,208,95,158,151,159,151,161,151,162,151,164,151,165,151,166,151,167,151,168,151,169,151,170,151,172,151,174,151,176,151,177,151,179,151,181,151,182,151,183,151,184,151,185,151,186,151,187,151,188,151,189,151,190,151,191,151,192,151,193,151,194,151,195,151,196,151,197,151,198,151,199,151,200,151,201,151,202,151,203,151,204,151,205,151,206,151,207,151,208,151,209,151,210,151,211,151,212,151,213,151,214,151,215,151,216,151,217,151,218,151,219,151,220,151,221,151,222,151,223,151,224,151,225,151,226,151,227,151,228,151,229,151,232,151,238,151,239,151,240,151,241,151,242,151,244,151,247,151,248,151,249,151,250,151,251,151,252,151,253,151,254,151,255,151,0,152,1,152,2,152,3,152,4,152,5,152,6,152,7,152,8,152,9,152,10,152,11,152,12,152,13,152,14,152,60,96,93,96,90,96,103,96,65,96,89,96,99,96,171,96,6,97,13,97,93,97,169,97,157,97,203,97,209,97,6,98,128,128,127,128,147,108,246,108,252,109,246,119,248,119,0,120,9,120,23,120,24,120,17,120,171,101,45,120,28,120,29,120,57,120,58,120,59,120,31,120,60,120,37,120,44,120,35,120,41,120,78,120,109,120,86,120,87,120,38,120,80,120,71,120,76,120,106,120,155,120,147,120,154,120,135,120,156,120,161,120,163,120,178,120,185,120,165,120,212,120,217,120,201,120,236,120,242,120,5,121,244,120,19,121,36,121,30,121,52,121,155,159,249,158,251,158,252,158,241,118,4,119,13,119,249,118,7,119,8,119,26,119,34,119,25,119,45,119,38,119,53,119,56,119,80,119,81,119,71,119,67,119,90,119,104,119,15,152,16,152,17,152,18,152,19,152,20,152,21,152,22,152,23,152,24,152,25,152,26,152,27,152,28,152,29,152,30,152,31,152,32,152,33,152,34,152,35,152,36,152,37,152,38,152,39,152,40,152,41,152,42,152,43,152,44,152,45,152,46,152,47,152,48,152,49,152,50,152,51,152,52,152,53,152,54,152,55,152,56,152,57,152,58,152,59,152,60,152,61,152,62,152,63,152,64,152,65,152,66,152,67,152,68,152,69,152,70,152,71,152,72,152,73,152,74,152,75,152,76,152,77,152,78,152,79,152,80,152,81,152,82,152,83,152,84,152,85,152,86,152,87,152,88,152,89,152,90,152,91,152,92,152,93,152,94,152,95,152,96,152,97,152,98,152,99,152,100,152,101,152,102,152,103,152,104,152,105,152,106,152,107,152,108,152,109,152,110,152,98,119,101,119,127,119,141,119,125,119,128,119,140,119,145,119,159,119,160,119,176,119,181,119,189,119,58,117,64,117,78,117,75,117,72,117,91,117,114,117,121,117,131,117,88,127,97,127,95,127,72,138,104,127,116,127,113,127,121,127,129,127,126,127,205,118,229,118,50,136,133,148,134,148,135,148,139,148,138,148,140,148,141,148,143,148,144,148,148,148,151,148,149,148,154,148,155,148,156,148,163,148,164,148,171,148,170,148,173,148,172,148,175,148,176,148,178,148,180,148,182,148,183,148,184,148,185,148,186,148,188,148,189,148,191,148,196,148,200,148,201,148,202,148,203,148,204,148,205,148,206,148,208,148,209,148,210,148,213,148,214,148,215,148,217,148,216,148,219,148,222,148,223,148,224,148,226,148,228,148,229,148,231,148,232,148,234,148,111,152,112,152,113,152,114,152,115,152,116,152,139,152,142,152,146,152,149,152,153,152,163,152,168,152,169,152,170,152,171,152,172,152,173,152,174,152,175,152,176,152,177,152,178,152,179,152,180,152,181,152,182,152,183,152,184,152,185,152,186,152,187,152,188,152,189,152,190,152,191,152,192,152,193,152,194,152,195,152,196,152,197,152,198,152,199,152,200,152,201,152,202,152,203,152,204,152,205,152,207,152,208,152,212,152,214,152,215,152,219,152,220,152,221,152,224,152,225,152,226,152,227,152,228,152,229,152,230,152,233,152,234,152,235,152,236,152,237,152,238,152,239,152,240,152,241,152,242,152,243,152,244,152,245,152,246,152,247,152,248,152,249,152,250,152,251,152,252,152,253,152,254,152,255,152,0,153,1,153,2,153,3,153,4,153,5,153,6,153,7,153,233,148,235,148,238,148,239,148,243,148,244,148,245,148,247,148,249,148,252,148,253,148,255,148,3,149,2,149,6,149,7,149,9,149,10,149,13,149,14,149,15,149,18,149,19,149,20,149,21,149,22,149,24,149,27,149,29,149,30,149,31,149,34,149,42,149,43,149,41,149,44,149,49,149,50,149,52,149,54,149,55,149,56,149,60,149,62,149,63,149,66,149,53,149,68,149,69,149,70,149,73,149,76,149,78,149,79,149,82,149,83,149,84,149,86,149,87,149,88,149,89,149,91,149,94,149,95,149,93,149,97,149,98,149,100,149,101,149,102,149,103,149,104,149,105,149,106,149,107,149,108,149,111,149,113,149,114,149,115,149,58,149,231,119,236,119,201,150,213,121,237,121,227,121,235,121,6,122,71,93,3,122,2,122,30,122,20,122,8,153,9,153,10,153,11,153,12,153,14,153,15,153,17,153,18,153,19,153,20,153,21,153,22,153,23,153,24,153,25,153,26,153,27,153,28,153,29,153,30,153,31,153,32,153,33,153,34,153,35,153,36,153,37,153,38,153,39,153,40,153,41,153,42,153,43,153,44,153,45,153,47,153,48,153,49,153,50,153,51,153,52,153,53,153,54,153,55,153,56,153,57,153,58,153,59,153,60,153,61,153,62,153,63,153,64,153,65,153,66,153,67,153,68,153,69,153,70,153,71,153,72,153,73,153,74,153,75,153,76,153,77,153,78,153,79,153,80,153,81,153,82,153,83,153,86,153,87,153,88,153,89,153,90,153,91,153,92,153,93,153,94,153,95,153,96,153,97,153,98,153,100,153,102,153,115,153,120,153,121,153,123,153,126,153,130,153,131,153,137,153,57,122,55,122,81,122,207,158,165,153,112,122,136,118,142,118,147,118,153,118,164,118,222,116,224,116,44,117,32,158,34,158,40,158,41,158,42,158,43,158,44,158,50,158,49,158,54,158,56,158,55,158,57,158,58,158,62,158,65,158,66,158,68,158,70,158,71,158,72,158,73,158,75,158,76,158,78,158,81,158,85,158,87,158,90,158,91,158,92,158,94,158,99,158,102,158,103,158,104,158,105,158,106,158,107,158,108,158,113,158,109,158,115,158,146,117,148,117,150,117,160,117,157,117,172,117,163,117,179,117,180,117,184,117,196,117,177,117,176,117,195,117,194,117,214,117,205,117,227,117,232,117,230,117,228,117,235,117,231,117,3,118,241,117,252,117,255,117,16,118,0,118,5,118,12,118,23,118,10,118,37,118,24,118,21,118,25,118,140,153,142,153,154,153,155,153,156,153,157,153,158,153,159,153,160,153,161,153,162,153,163,153,164,153,166,153,167,153,169,153,170,153,171,153,172,153,173,153,174,153,175,153,176,153,177,153,178,153,179,153,180,153,181,153,182,153,183,153,184,153,185,153,186,153,187,153,188,153,189,153,190,153,191,153,192,153,193,153,194,153,195,153,196,153,197,153,198,153,199,153,200,153,201,153,202,153,203,153,204,153,205,153,206,153,207,153,208,153,209,153,210,153,211,153,212,153,213,153,214,153,215,153,216,153,217,153,218,153,219,153,220,153,221,153,222,153,223,153,224,153,225,153,226,153,227,153,228,153,229,153,230,153,231,153,232,153,233,153,234,153,235,153,236,153,237,153,238,153,239,153,240,153,241,153,242,153,243,153,244,153,245,153,246,153,247,153,248,153,249,153,27,118,60,118,34,118,32,118,64,118,45,118,48,118,63,118,53,118,67,118,62,118,51,118,77,118,94,118,84,118,92,118,86,118,107,118,111,118,202,127,230,122,120,122,121,122,128,122,134,122,136,122,149,122,166,122,160,122,172,122,168,122,173,122,179,122,100,136,105,136,114,136,125,136,127,136,130,136,162,136,198,136,183,136,188,136,201,136,226,136,206,136,227,136,229,136,241,136,26,137,252,136,232,136,254,136,240,136,33,137,25,137,19,137,27,137,10,137,52,137,43,137,54,137,65,137,102,137,123,137,139,117,229,128,178,118,180,118,220,119,18,128,20,128,22,128,28,128,32,128,34,128,37,128,38,128,39,128,41,128,40,128,49,128,11,128,53,128,67,128,70,128,77,128,82,128,105,128,113,128,131,137,120,152,128,152,131,152,250,153,251,153,252,153,253,153,254,153,255,153,0,154,1,154,2,154,3,154,4,154,5,154,6,154,7,154,8,154,9,154,10,154,11,154,12,154,13,154,14,154,15,154,16,154,17,154,18,154,19,154,20,154,21,154,22,154,23,154,24,154,25,154,26,154,27,154,28,154,29,154,30,154,31,154,32,154,33,154,34,154,35,154,36,154,37,154,38,154,39,154,40,154,41,154,42,154,43,154,44,154,45,154,46,154,47,154,48,154,49,154,50,154,51,154,52,154,53,154,54,154,55,154,56,154,57,154,58,154,59,154,60,154,61,154,62,154,63,154,64,154,65,154,66,154,67,154,68,154,69,154,70,154,71,154,72,154,73,154,74,154,75,154,76,154,77,154,78,154,79,154,80,154,81,154,82,154,83,154,84,154,85,154,86,154,87,154,88,154,89,154,137,152,140,152,141,152,143,152,148,152,154,152,155,152,158,152,159,152,161,152,162,152,165,152,166,152,77,134,84,134,108,134,110,134,127,134,122,134,124,134,123,134,168,134,141,134,139,134,172,134,157,134,167,134,163,134,170,134,147,134,169,134,182,134,196,134,181,134,206,134,176,134,186,134,177,134,175,134,201,134,207,134,180,134,233,134,241,134,242,134,237,134,243,134,208,134,19,135,222,134,244,134,223,134,216,134,209,134,3,135,7,135,248,134,8,135,10,135,13,135,9,135,35,135,59,135,30,135,37,135,46,135,26,135,62,135,72,135,52,135,49,135,41,135,55,135,63,135,130,135,34,135,125,135,126,135,123,135,96,135,112,135,76,135,110,135,139,135,83,135,99,135,124,135,100,135,89,135,101,135,147,135,175,135,168,135,210,135,90,154,91,154,92,154,93,154,94,154,95,154,96,154,97,154,98,154,99,154,100,154,101,154,102,154,103,154,104,154,105,154,106,154,107,154,114,154,131,154,137,154,141,154,142,154,148,154,149,154,153,154,166,154,169,154,170,154,171,154,172,154,173,154,174,154,175,154,178,154,179,154,180,154,181,154,185,154,187,154,189,154,190,154,191,154,195,154,196,154,198,154,199,154,200,154,201,154,202,154,205,154,206,154,207,154,208,154,210,154,212,154,213,154,214,154,215,154,217,154,218,154,219,154,220,154,221,154,222,154,224,154,226,154,227,154,228,154,229,154,231,154,232,154,233,154,234,154,236,154,238,154,240,154,241,154,242,154,243,154,244,154,245,154,246,154,247,154,248,154,250,154,252,154,253,154,254,154,255,154,0,155,1,155,2,155,4,155,5,155,6,155,198,135,136,135,133,135,173,135,151,135,131,135,171,135,229,135,172,135,181,135,179,135,203,135,211,135,189,135,209,135,192,135,202,135,219,135,234,135,224,135,238,135,22,136,19,136,254,135,10,136,27,136,33,136,57,136,60,136,54,127,66,127,68,127,69,127,16,130,250,122,253,122,8,123,3,123,4,123,21,123,10,123,43,123,15,123,71,123,56,123,42,123,25,123,46,123,49,123,32,123,37,123,36,123,51,123,62,123,30,123,88,123,90,123,69,123,117,123,76,123,93,123,96,123,110,123,123,123,98,123,114,123,113,123,144,123,166,123,167,123,184,123,172,123,157,123,168,123,133,123,170,123,156,123,162,123,171,123,180,123,209,123,193,123,204,123,221,123,218,123,229,123,230,123,234,123,12,124,254,123,252,123,15,124,22,124,11,124,7,155,9,155,10,155,11,155,12,155,13,155,14,155,16,155,17,155,18,155,20,155,21,155,22,155,23,155,24,155,25,155,26,155,27,155,28,155,29,155,30,155,32,155,33,155,34,155,36,155,37,155,38,155,39,155,40,155,41,155,42,155,43,155,44,155,45,155,46,155,48,155,49,155,51,155,52,155,53,155,54,155,55,155,56,155,57,155,58,155,61,155,62,155,63,155,64,155,70,155,74,155,75,155,76,155,78,155,80,155,82,155,83,155,85,155,86,155,87,155,88,155,89,155,90,155,91,155,92,155,93,155,94,155,95,155,96,155,97,155,98,155,99,155,100,155,101,155,102,155,103,155,104,155,105,155,106,155,107,155,108,155,109,155,110,155,111,155,112,155,113,155,114,155,115,155,116,155,117,155,118,155,119,155,120,155,121,155,122,155,123,155,31,124,42,124,38,124,56,124,65,124,64,124,254,129,1,130,2,130,4,130,236,129,68,136,33,130,34,130,35,130,45,130,47,130,40,130,43,130,56,130,59,130,51,130,52,130,62,130,68,130,73,130,75,130,79,130,90,130,95,130,104,130,126,136,133,136,136,136,216,136,223,136,94,137,157,127,159,127,167,127,175,127,176,127,178,127,124,124,73,101,145,124,157,124,156,124,158,124,162,124,178,124,188,124,189,124,193,124,199,124,204,124,205,124,200,124,197,124,215,124,232,124,110,130,168,102,191,127,206,127,213,127,229,127,225,127,230,127,233,127,238,127,243,127,248,124,119,125,166,125,174,125,71,126,155,126,184,158,180,158,115,141,132,141,148,141,145,141,177,141,103,141,109,141,71,140,73,140,74,145,80,145,78,145,79,145,100,145,124,155,125,155,126,155,127,155,128,155,129,155,130,155,131,155,132,155,133,155,134,155,135,155,136,155,137,155,138,155,139,155,140,155,141,155,142,155,143,155,144,155,145,155,146,155,147,155,148,155,149,155,150,155,151,155,152,155,153,155,154,155,155,155,156,155,157,155,158,155,159,155,160,155,161,155,162,155,163,155,164,155,165,155,166,155,167,155,168,155,169,155,170,155,171,155,172,155,173,155,174,155,175,155,176,155,177,155,178,155,179,155,180,155,181,155,182,155,183,155,184,155,185,155,186,155,187,155,188,155,189,155,190,155,191,155,192,155,193,155,194,155,195,155,196,155,197,155,198,155,199,155,200,155,201,155,202,155,203,155,204,155,205,155,206,155,207,155,208,155,209,155,210,155,211,155,212,155,213,155,214,155,215,155,216,155,217,155,218,155,219,155,98,145,97,145,112,145,105,145,111,145,125,145,126,145,114,145,116,145,121,145,140,145,133,145,144,145,141,145,145,145,162,145,163,145,170,145,173,145,174,145,175,145,181,145,180,145,186,145,85,140,126,158,184,141,235,141,5,142,89,142,105,142,181,141,191,141,188,141,186,141,196,141,214,141,215,141,218,141,222,141,206,141,207,141,219,141,198,141,236,141,247,141,248,141,227,141,249,141,251,141,228,141,9,142,253,141,20,142,29,142,31,142,44,142,46,142,35,142,47,142,58,142,64,142,57,142,53,142,61,142,49,142,73,142,65,142,66,142,81,142,82,142,74,142,112,142,118,142,124,142,111,142,116,142,133,142,143,142,148,142,144,142,156,142,158,142,120,140,130,140,138,140,133,140,152,140,148,140,155,101,214,137,222,137,218,137,220,137,220,155,221,155,222,155,223,155,224,155,225,155,226,155,227,155,228,155,229,155,230,155,231,155,232,155,233,155,234,155,235,155,236,155,237,155,238,155,239,155,240,155,241,155,242,155,243,155,244,155,245,155,246,155,247,155,248,155,249,155,250,155,251,155,252,155,253,155,254,155,255,155,0,156,1,156,2,156,3,156,4,156,5,156,6,156,7,156,8,156,9,156,10,156,11,156,12,156,13,156,14,156,15,156,16,156,17,156,18,156,19,156,20,156,21,156,22,156,23,156,24,156,25,156,26,156,27,156,28,156,29,156,30,156,31,156,32,156,33,156,34,156,35,156,36,156,37,156,38,156,39,156,40,156,41,156,42,156,43,156,44,156,45,156,46,156,47,156,48,156,49,156,50,156,51,156,52,156,53,156,54,156,55,156,56,156,57,156,58,156,59,156,229,137,235,137,239,137,62,138,38,139,83,151,233,150,243,150,239,150,6,151,1,151,8,151,15,151,14,151,42,151,45,151,48,151,62,151,128,159,131,159,133,159,134,159,135,159,136,159,137,159,138,159,140,159,254,158,11,159,13,159,185,150,188,150,189,150,206,150,210,150,191,119,224,150,142,146,174,146,200,146,62,147,106,147,202,147,143,147,62,148,107,148,127,156,130,156,133,156,134,156,135,156,136,156,35,122,139,156,142,156,144,156,145,156,146,156,148,156,149,156,154,156,155,156,158,156,159,156,160,156,161,156,162,156,163,156,165,156,166,156,167,156,168,156,169,156,171,156,173,156,174,156,176,156,177,156,178,156,179,156,180,156,181,156,182,156,183,156,186,156,187,156,188,156,189,156,196,156,197,156,198,156,199,156,202,156,203,156,60,156,61,156,62,156,63,156,64,156,65,156,66,156,67,156,68,156,69,156,70,156,71,156,72,156,73,156,74,156,75,156,76,156,77,156,78,156,79,156,80,156,81,156,82,156,83,156,84,156,85,156,86,156,87,156,88,156,89,156,90,156,91,156,92,156,93,156,94,156,95,156,96,156,97,156,98,156,99,156,100,156,101,156,102,156,103,156,104,156,105,156,106,156,107,156,108,156,109,156,110,156,111,156,112,156,113,156,114,156,115,156,116,156,117,156,118,156,119,156,120,156,121,156,122,156,123,156,125,156,126,156,128,156,131,156,132,156,137,156,138,156,140,156,143,156,147,156,150,156,151,156,152,156,153,156,157,156,170,156,172,156,175,156,185,156,190,156,191,156,192,156,193,156,194,156,200,156,201,156,209,156,210,156,218,156,219,156,224,156,225,156,204,156,205,156,206,156,207,156,208,156,211,156,212,156,213,156,215,156,216,156,217,156,220,156,221,156,223,156,226,156,124,151,133,151,145,151,146,151,148,151,175,151,171,151,163,151,178,151,180,151,177,154,176,154,183,154,88,158,182,154,186,154,188,154,193,154,192,154,197,154,194,154,203,154,204,154,209,154,69,155,67,155,71,155,73,155,72,155,77,155,81,155,232,152,13,153,46,153,85,153,84,153,223,154,225,154,230,154,239,154,235,154,251,154,237,154,249,154,8,155,15,155,19,155,31,155,35,155,189,158,190,158,59,126,130,158,135,158,136,158,139,158,146,158,214,147,157,158,159,158,219,158,220,158,221,158,224,158,223,158,226,158,233,158,231,158,229,158,234,158,239,158,34,159,44,159,47,159,57,159,55,159,61,159,62,159,68,159,227,156,228,156,229,156,230,156,231,156,232,156,233,156,234,156,235,156,236,156,237,156,238,156,239,156,240,156,241,156,242,156,243,156,244,156,245,156,246,156,247,156,248,156,249,156,250,156,251,156,252,156,253,156,254,156,255,156,0,157,1,157,2,157,3,157,4,157,5,157,6,157,7,157,8,157,9,157,10,157,11,157,12,157,13,157,14,157,15,157,16,157,17,157,18,157,19,157,20,157,21,157,22,157,23,157,24,157,25,157,26,157,27,157,28,157,29,157,30,157,31,157,32,157,33,157,34,157,35,157,36,157,37,157,38,157,39,157,40,157,41,157,42,157,43,157,44,157,45,157,46,157,47,157,48,157,49,157,50,157,51,157,52,157,53,157,54,157,55,157,56,157,57,157,58,157,59,157,60,157,61,157,62,157,63,157,64,157,65,157,66,157,52,226,53,226,54,226,55,226,56,226,57,226,58,226,59,226,60,226,61,226,62,226,63,226,64,226,65,226,66,226,67,226,68,226,69,226,70,226,71,226,72,226,73,226,74,226,75,226,76,226,77,226,78,226,79,226,80,226,81,226,82,226,83,226,84,226,85,226,86,226,87,226,88,226,89,226,90,226,91,226,92,226,93,226,94,226,95,226,96,226,97,226,98,226,99,226,100,226,101,226,102,226,103,226,104,226,105,226,106,226,107,226,108,226,109,226,110,226,111,226,112,226,113,226,114,226,115,226,116,226,117,226,118,226,119,226,120,226,121,226,122,226,123,226,124,226,125,226,126,226,127,226,128,226,129,226,130,226,131,226,132,226,133,226,134,226,135,226,136,226,137,226,138,226,139,226,140,226,141,226,142,226,143,226,144,226,145,226,67,157,68,157,69,157,70,157,71,157,72,157,73,157,74,157,75,157,76,157,77,157,78,157,79,157,80,157,81,157,82,157,83,157,84,157,85,157,86,157,87,157,88,157,89,157,90,157,91,157,92,157,93,157,94,157,95,157,96,157,97,157,98,157,99,157,100,157,101,157,102,157,103,157,104,157,105,157,106,157,107,157,108,157,109,157,110,157,111,157,112,157,113,157,114,157,115,157,116,157,117,157,118,157,119,157,120,157,121,157,122,157,123,157,124,157,125,157,126,157,127,157,128,157,129,157,130,157,131,157,132,157,133,157,134,157,135,157,136,157,137,157,138,157,139,157,140,157,141,157,142,157,143,157,144,157,145,157,146,157,147,157,148,157,149,157,150,157,151,157,152,157,153,157,154,157,155,157,156,157,157,157,158,157,159,157,160,157,161,157,162,157,146,226,147,226,148,226,149,226,150,226,151,226,152,226,153,226,154,226,155,226,156,226,157,226,158,226,159,226,160,226,161,226,162,226,163,226,164,226,165,226,166,226,167,226,168,226,169,226,170,226,171,226,172,226,173,226,174,226,175,226,176,226,177,226,178,226,179,226,180,226,181,226,182,226,183,226,184,226,185,226,186,226,187,226,188,226,189,226,190,226,191,226,192,226,193,226,194,226,195,226,196,226,197,226,198,226,199,226,200,226,201,226,202,226,203,226,204,226,205,226,206,226,207,226,208,226,209,226,210,226,211,226,212,226,213,226,214,226,215,226,216,226,217,226,218,226,219,226,220,226,221,226,222,226,223,226,224,226,225,226,226,226,227,226,228,226,229,226,230,226,231,226,232,226,233,226,234,226,235,226,236,226,237,226,238,226,239,226,163,157,164,157,165,157,166,157,167,157,168,157,169,157,170,157,171,157,172,157,173,157,174,157,175,157,176,157,177,157,178,157,179,157,180,157,181,157,182,157,183,157,184,157,185,157,186,157,187,157,188,157,189,157,190,157,191,157,192,157,193,157,194,157,195,157,196,157,197,157,198,157,199,157,200,157,201,157,202,157,203,157,204,157,205,157,206,157,207,157,208,157,209,157,210,157,211,157,212,157,213,157,214,157,215,157,216,157,217,157,218,157,219,157,220,157,221,157,222,157,223,157,224,157,225,157,226,157,227,157,228,157,229,157,230,157,231,157,232,157,233,157,234,157,235,157,236,157,237,157,238,157,239,157,240,157,241,157,242,157,243,157,244,157,245,157,246,157,247,157,248,157,249,157,250,157,251,157,252,157,253,157,254,157,255,157,0,158,1,158,2,158,240,226,241,226,242,226,243,226,244,226,245,226,246,226,247,226,248,226,249,226,250,226,251,226,252,226,253,226,254,226,255,226,0,227,1,227,2,227,3,227,4,227,5,227,6,227,7,227,8,227,9,227,10,227,11,227,12,227,13,227,14,227,15,227,16,227,17,227,18,227,19,227,20,227,21,227,22,227,23,227,24,227,25,227,26,227,27,227,28,227,29,227,30,227,31,227,32,227,33,227,34,227,35,227,36,227,37,227,38,227,39,227,40,227,41,227,42,227,43,227,44,227,45,227,46,227,47,227,48,227,49,227,50,227,51,227,52,227,53,227,54,227,55,227,56,227,57,227,58,227,59,227,60,227,61,227,62,227,63,227,64,227,65,227,66,227,67,227,68,227,69,227,70,227,71,227,72,227,73,227,74,227,75,227,76,227,77,227,3,158,4,158,5,158,6,158,7,158,8,158,9,158,10,158,11,158,12,158,13,158,14,158,15,158,16,158,17,158,18,158,19,158,20,158,21,158,22,158,23,158,24,158,25,158,26,158,27,158,28,158,29,158,30,158,36,158,39,158,46,158,48,158,52,158,59,158,60,158,64,158,77,158,80,158,82,158,83,158,84,158,86,158,89,158,93,158,95,158,96,158,97,158,98,158,101,158,110,158,111,158,114,158,116,158,117,158,118,158,119,158,120,158,121,158,122,158,123,158,124,158,125,158,128,158,129,158,131,158,132,158,133,158,134,158,137,158,138,158,140,158,141,158,142,158,143,158,144,158,145,158,148,158,149,158,150,158,151,158,152,158,153,158,154,158,155,158,156,158,158,158,160,158,161,158,162,158,163,158,164,158,165,158,167,158,168,158,169,158,170,158,78,227,79,227,80,227,81,227,82,227,83,227,84,227,85,227,86,227,87,227,88,227,89,227,90,227,91,227,92,227,93,227,94,227,95,227,96,227,97,227,98,227,99,227,100,227,101,227,102,227,103,227,104,227,105,227,106,227,107,227,108,227,109,227,110,227,111,227,112,227,113,227,114,227,115,227,116,227,117,227,118,227,119,227,120,227,121,227,122,227,123,227,124,227,125,227,126,227,127,227,128,227,129,227,130,227,131,227,132,227,133,227,134,227,135,227,136,227,137,227,138,227,139,227,140,227,141,227,142,227,143,227,144,227,145,227,146,227,147,227,148,227,149,227,150,227,151,227,152,227,153,227,154,227,155,227,156,227,157,227,158,227,159,227,160,227,161,227,162,227,163,227,164,227,165,227,166,227,167,227,168,227,169,227,170,227,171,227,171,158,172,158,173,158,174,158,175,158,176,158,177,158,178,158,179,158,181,158,182,158,183,158,185,158,186,158,188,158,191,158,192,158,193,158,194,158,195,158,197,158,198,158,199,158,200,158,202,158,203,158,204,158,208,158,210,158,211,158,213,158,214,158,215,158,217,158,218,158,222,158,225,158,227,158,228,158,230,158,232,158,235,158,236,158,237,158,238,158,240,158,241,158,242,158,243,158,244,158,245,158,246,158,247,158,248,158,250,158,253,158,255,158,0,159,1,159,2,159,3,159,4,159,5,159,6,159,7,159,8,159,9,159,10,159,12,159,15,159,17,159,18,159,20,159,21,159,22,159,24,159,26,159,27,159,28,159,29,159,30,159,31,159,33,159,35,159,36,159,37,159,38,159,39,159,40,159,41,159,42,159,43,159,45,159,46,159,48,159,49,159,172,227,173,227,174,227,175,227,176,227,177,227,178,227,179,227,180,227,181,227,182,227,183,227,184,227,185,227,186,227,187,227,188,227,189,227,190,227,191,227,192,227,193,227,194,227,195,227,196,227,197,227,198,227,199,227,200,227,201,227,202,227,203,227,204,227,205,227,206,227,207,227,208,227,209,227,210,227,211,227,212,227,213,227,214,227,215,227,216,227,217,227,218,227,219,227,220,227,221,227,222,227,223,227,224,227,225,227,226,227,227,227,228,227,229,227,230,227,231,227,232,227,233,227,234,227,235,227,236,227,237,227,238,227,239,227,240,227,241,227,242,227,243,227,244,227,245,227,246,227,247,227,248,227,249,227,250,227,251,227,252,227,253,227,254,227,255,227,0,228,1,228,2,228,3,228,4,228,5,228,6,228,7,228,8,228,9,228,50,159,51,159,52,159,53,159,54,159,56,159,58,159,60,159,63,159,64,159,65,159,66,159,67,159,69,159,70,159,71,159,72,159,73,159,74,159,75,159,76,159,77,159,78,159,79,159,82,159,83,159,84,159,85,159,86,159,87,159,88,159,89,159,90,159,91,159,92,159,93,159,94,159,95,159,96,159,97,159,98,159,99,159,100,159,101,159,102,159,103,159,104,159,105,159,106,159,107,159,108,159,109,159,110,159,111,159,112,159,113,159,114,159,115,159,116,159,117,159,118,159,119,159,120,159,121,159,122,159,123,159,124,159,125,159,126,159,129,159,130,159,141,159,142,159,143,159,144,159,145,159,146,159,147,159,148,159,149,159,150,159,151,159,152,159,156,159,157,159,158,159,161,159,162,159,163,159,164,159,165,159,44,249,121,249,149,249,231,249,241,249,10,228,11,228,12,228,13,228,14,228,15,228,16,228,17,228,18,228,19,228,20,228,21,228,22,228,23,228,24,228,25,228,26,228,27,228,28,228,29,228,30,228,31,228,32,228,33,228,34,228,35,228,36,228,37,228,38,228,39,228,40,228,41,228,42,228,43,228,44,228,45,228,46,228,47,228,48,228,49,228,50,228,51,228,52,228,53,228,54,228,55,228,56,228,57,228,58,228,59,228,60,228,61,228,62,228,63,228,64,228,65,228,66,228,67,228,68,228,69,228,70,228,71,228,72,228,73,228,74,228,75,228,76,228,77,228,78,228,79,228,80,228,81,228,82,228,83,228,84,228,85,228,86,228,87,228,88,228,89,228,90,228,91,228,92,228,93,228,94,228,95,228,96,228,97,228,98,228,99,228,100,228,101,228,102,228,103,228,12,250,13,250,14,250,15,250,17,250,19,250,20,250,24,250,31,250,32,250,33,250,35,250,36,250,39,250,40,250,41,250,129,46,22,232,23,232,24,232,132,46,115,52,71,52,136,46,139,46,30,232,158,53,26,54,14,54,140,46,151,46,110,57,24,57,38,232,207,57,223,57,115,58,208,57,43,232,44,232,78,59,110,60,224,60,167,46,49,232,50,232,170,46,86,64,95,65,174,46,55,67,179,46,182,46,183,46,59,232,177,67,172,67,187,46,221,67,214,68,97,70,76,70,67,232,35,71,41,71,124,71,141,71,202,46,71,73,122,73,125,73,130,73,131,73,133,73,134,73,159,73,155,73,183,73,182,73,84,232,85,232,163,76,159,76,160,76,161,76,119,76,162,76,19,77,20,77,21,77,22,77,23,77,24,77,25,77,174,77,100,232,104,228,105,228,106,228,107,228,108,228,109,228,110,228,111,228,112,228,113,228,114,228,115,228,116,228,117,228,118,228,119,228,120,228,121,228,122,228,123,228,124,228,125,228,126,228,127,228,128,228,129,228,130,228,131,228,132,228,133,228,134,228,135,228,136,228,137,228,138,228,139,228,140,228,141,228,142,228,143,228,144,228,145,228,146,228,147,228,148,228,149,228,150,228,151,228,152,228,153,228,154,228,155,228,156,228,157,228,158,228,159,228,160,228,161,228,162,228,163,228,164,228,165,228,166,228,167,228,168,228,169,228,170,228,171,228,172,228,173,228,174,228,175,228,176,228,177,228,178,228,179,228,180,228,181,228,182,228,183,228,184,228,185,228,186,228,187,228,188,228,189,228,190,228,191,228,192,228,193,228,194,228,195,228,196,228,197,228,240,67,50,76,3,70,166,69,120,69,103,114,119,77,179,69,177,124,226,76,197,124,149,59,54,71,68,71,71,76,64,76,191,66,23,54,82,115,139,110,210,112,87,76,81,163,79,71,218,69,133,76,108,124,7,77,164,74,161,70,35,107,37,114,84,90,99,26,6,62,97,63,77,102,251,86,0,0,149,125,29,89,185,139,244,61,52,151,239,123,219,91,94,29,164,90,37,54,176,158,209,90,183,91,252,92,110,103,147,133,69,153,97,116,157,116,117,56,83,29,158,54,33,96,236,62,222,88,245,58,252,122,151,159,97,65,13,137,234,49,138,10,94,50,10,67,132,132,150,159,47,148,48,73,19,134,150,88,74,151,24,146,208,121,50,122,96,102,41,106,157,136,76,116,197,123,130,103,44,122,79,82,70,144,230,52,196,115,185,93,198,116,199,159,179,87,47,73,76,84,49,65,142,54,24,88,114,122,101,123,143,139,174,70,136,110,129,65,153,93,174,123,188,36,200,159,193,36,201,36,204,36,201,159,4,133,187,53,180,64,202,159,225,68,255,173,193,98,110,112,203,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,49,193,49,194,49,195,49,196,49,12,1,197,49,209,0,205,0,198,49,199,49,203,0,232,31,200,49,202,0,201,49,202,49,203,49,204,49,14,1,205,49,206,49,0,1,193,0,205,1,192,0,18,1,201,0,26,1,200,0,76,1,211,0,209,1,210,0,0,220,190,30,4,220,192,30,202,0,1,1,225,0,206,1,224,0,81,2,19,1,233,0,27,1,232,0,43,1,237,0,208,1,236,0,77,1,243,0,210,1,242,0,107,1,250,0,212,1,249,0,214,1,216,1,218,1,220,1,252,0,8,220,191,30,12,220,193,30,234,0,97,2,218,35,219,35],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+134218);allocate([169,163,69,17,0,0,10,101,0,0,0,0,61,78,221,110,78,157,223,145,0,0,0,0,53,119,145,100,26,79,40,79,168,79,86,81,116,81,156,81,228,81,161,82,168,82,59,83,78,83,209,83,216,83,226,86,240,88,4,89,7,89,50,89,52,89,102,91,158,91,159,91,154,92,134,94,59,96,137,101,254,103,4,104,101,104,78,109,188,112,53,117,164,126,172,126,186,126,199,126,207,126,223,126,6,127,55,127,122,130,207,130,111,131,198,137,190,139,226,139,102,143,103,143,110,143,17,116,252,124,205,125,70,105,201,122,39,82,0,0,0,0,0,0,0,0,140,145,184,120,94,145,188,128,0,0,11,141,246,128,231,9,0,0,0,0,159,128,199,158,205,76,201,157,12,158,62,76,246,157,14,112,10,158,51,161,193,53,0,0,154,110,62,130,25,117,0,0,17,73,108,154,143,154,153,159,135,121,108,132,202,29,208,5,230,42,36,78,129,78,128,78,135,78,191,78,235,78,55,79,76,52,189,79,72,62,3,80,136,80,125,52,147,52,165,52,134,81,5,89,219,81,252,81,5,82,137,78,121,82,144,82,39,83,199,53,169,83,81,53,176,83,83,53,194,83,35,84,109,53,114,53,129,54,147,84,163,84,180,84,185,84,208,84,239,84,24,85,35,85,40,85,152,53,63,85,165,53,191,53,215,85,197,53,132,125,37,85,0,0,66,12,21,13,43,81,144,85,198,44,236,57,65,3,70,142,184,77,229,148,83,64,190,128,122,119,56,44,52,58,213,71,93,129,242,105,234,77,221,100,124,13,180,15,213,12,244,16,141,100,126,142,150,14,11,12,100,15,169,44,86,130,211,68,0,0,70,13,77,154,233,128,244,71,167,78,194,44,178,154,103,58,244,149,237,63,6,53,199,82,212,151,200,120,68,45,110,157,21,152,0,0,217,67,165,96,180,100,227,84,76,45,202,43,119,16,251,57,111,16,218,102,22,103,160,121,234,100,82,80,67,12,104,142,161,33,76,139,49,7,0,0,11,72,169,1,250,63,115,88,141,45,0,0,200,69,252,4,151,96,76,15,150,13,121,85,187,64,186,67,0,0,180,74,102,42,157,16,170,129,245,152,156,13,121,99,254,57,117,39,192,141,161,86,124,100,67,62,0,0,1,166,9,14,207,42,201,44,0,0,200,16,194,57,146,57,6,58,155,130,120,53,73,94,199,32,82,86,49,15,178,44,32,151,188,52,61,108,59,78,0,0,0,0,116,117,139,46,8,34,91,166,205,140,122,14,52,12,28,104,147,127,207,16,3,40,57,41,251,53,227,81,140,14,141,15,170,14,147,63,48,15,71,13,79,17,76,14,0,0,171,14,169,11,72,13,192,16,61,17,249,63,150,38,50,100,173,15,244,51,57,118,206,43,126,13,127,13,81,44,85,44,24,58,152,14,199,16,46,15,50,166,80,107,210,140,153,141,202,140,170,149,204,84,196,130,185,85,0,0,195,158,38,156,182,154,94,119,238,45,64,113,109,129,236,128,28,92,114,101,52,129,151,55,95,83,189,128,182,145,250,14,15,14,119,14,251,14,221,53,235,77,9,54,214,12,175,86,181,39,201,16,16,14,120,14,120,16,72,17,7,130,85,20,121,14,80,78,164,45,84,90,29,16,30,16,245,16,246,16,156,87,17,14,148,118,205,130,181,15,123,14,126,81,3,55,182,15,128,17,216,82,189,162,218,73,58,24,119,65,124,130,153,88,104,82,26,54,61,87,178,123,104,91,0,72,44,75,39,159,231,73,31,156,141,155,116,91,61,49,251,85,242,53,137,86,40,78,2,89,193,27,120,248,81,151,134,0,91,78,187,78,62,53,35,92,81,95,196,95,250,56,76,98,53,101,122,107,53,108,58,108,108,112,43,114,44,78,173,114,233,72,82,127,59,121,249,124,83,127,106,98,193,52,0,0,75,99,2,128,128,128,18,102,81,105,93,83,100,136,193,137,178,120,160,139,29,141,133,148,120,149,127,149,232,149,15,142,230,151,117,152,206,152,222,152,99,153,16,152,124,156,31,158,196,158,111,107,7,249,55,78,135,0,29,150,55,98,162,148,0,0,59,80,254,109,115,156,166,159,201,61,143,136,78,65,119,112,245,92,32,75,205,81,89,53,48,93,34,97,50,138,167,143,246,145,145,113,25,103,186,115,129,50,7,161,139,60,128,25,16,75,228,120,2,116,174,81,15,135,9,64,99,106,186,162,35,66,15,134,111,10,42,122,71,153,234,138,85,151,77,112,36,83,126,32,244,147,217,118,227,137,167,159,221,119,163,78,240,79,188,80,47,78,23,79,168,159,52,84,139,125,146,88,208,88,182,29,146,94,153,94,194,95,18,39,139,101,249,51,25,105,67,106,99,60,255,108,0,0,0,114,5,69,140,115,219,62,19,74,21,91,185,116,131,139,164,92,149,86,147,122,236,123,195,124,108,126,248,130,151,133,169,159,144,136,170,159,185,142,171,159,207,143,95,133,224,153,33,146,172,159,185,141,63,20,113,64,162,66,26,90,0,0,0,0,0,0,104,152,107,103,118,66,61,87,0,0,214,133,123,73,191,130,13,113,129,76,116,109,123,93,21,107,190,111,173,159,174,159,150,91,175,159,231,102,91,126,87,110,202,121,136,61,195,68,86,50,150,39,154,67,54,69,0,0,213,92,26,59,249,138,120,92,18,61,81,53,120,93,178,159,87,113,88,69,236,64,35,30,119,76,120,57,74,52,164,1,65,108,204,138,180,79,57,2,191,89,108,129,86,152,250,152,59,95,159,11,0,0,193,33,109,137,2,65,187,70,121,144,7,63,179,159,181,161,248,64,214,55,247,70,70,108,124,65,178,134,255,115,109,69,212,56,154,84,97,69,27,69,137,77,123,76,118,77,234,69,200,63,15,75,97,54,222,68,189,68,237,65,62,93,72,93,86,93,252,61,15,56,164,93,185,93,32,56,56,56,66,94,189,94,37,95,131,95,8,57,20,57,63,57,77,57,215,96,61,97,229,92,137,57,183,97,185,97,207,97,184,57,44,98,144,98,229,98,24,99,248,57,177,86,3,58,226,99,251,99,7,100,90,100,75,58,192,100,21,93,33,86,159,159,151,58,134,101,189,58,255,101,83,102,242,58,146,102,34,59,22,103,66,59,164,103,0,104,88,59,74,104,132,104,114,59,113,59,123,59,9,105,67,105,92,114,100,105,159,105,133,105,188,59,214,105,221,59,101,106,116,106,113,106,130,106,236,59,153,106,242,59,171,106,181,106,212,106,246,106,129,107,193,107,234,107,117,108,170,108,203,60,2,109,6,109,38,109,129,109,239,60,164,109,177,109,21,110,24,110,41,110,134,110,192,137,187,110,226,110,218,110,127,159,232,110,233,110,36,111,52,111,70,61,65,63,129,111,190,111,106,61,117,61,183,113,153,92,138,61,44,112,145,61,80,112,84,112,111,112,127,112,137,112,37,3,193,67,241,53,216,14,215,62,190,87,211,110,62,113,224,87,78,54,162,105,233,139,116,91,73,122,225,88,217,148,101,122,125,122,172,89,187,122,176,122,194,122,195,122,209,113,141,100,202,65,218,122,221,122,234,122,239,65,178,84,1,92,11,123,85,123,41,123,14,83,254,92,162,123,111,123,156,131,180,91,127,108,208,123,33,132,146,123,0,0,32,93,173,61,101,92,146,132,250,123,0,0,53,124,193,92,68,124,131,124,130,72,166,124,125,102,120,69,201,124,199,124,230,124,116,124,243,124,245,124,0,0,103,126,29,69,68,110,93,125,214,110,141,116,137,125,171,125,53,113,179,125,0,0,87,64,41,96,228,125,19,61,245,125,249,23,229,125,109,131,0,0,33,97,90,97,110,126,146,126,43,67,108,148,39,126,64,127,65,127,71,127,54,121,208,98,225,153,151,127,81,99,163,127,97,22,104,0,92,69,102,55,3,69,58,131,250,127,137,100,0,0,8,128,29,128,0,0,47,128,135,160,195,108,59,128,60,128,97,128,20,39,137,73,38,102,227,61,232,102,37,103,167,128,72,138,7,129,26,129,176,88,246,38,127,108,152,100,184,79,231,100,138,20,24,130,94,24,83,106,101,74,149,74,122,68,41,130,13,11,82,106,126,61,249,79,253,20,226,132,98,131,10,107,167,73,48,53,115,23,248,61,170,130,27,105,148,249,219,65,75,133,208,130,26,131,22,14,180,23,193,54,125,49,90,53,123,130,226,130,24,131,139,62,163,109,5,107,151,107,206,53,191,61,29,131,236,85,133,131,11,69,165,109,172,131,0,0,211,131,126,52,212,110,87,106,90,133,150,52,66,110,239,46,88,132,228,91,113,132,211,61,228,68,167,106,74,132,181,60,88,121,0,0,150,107,119,110,67,110,222,132,0,0,145,131,160,68,147,132,228,132,145,92,64,66,192,92,67,69,52,133,242,90,153,110,39,69,115,133,22,69,191,103,22,134,37,134,59,134,193,133,136,112,2,134,130,21,205,112,178,249,106,69,40,134,72,54,162,24,247,83,154,115,126,134,113,135,248,160,238,135,39,44,177,135,218,135,15,136,97,86,108,134,86,104,15,70,69,136,70,136,224,117,185,61,228,117,94,136,156,136,91,70,180,136,181,136,193,99,197,136,119,119,15,119,135,137,138,137,0,0,0,0,167,137,188,137,37,138,231,137,36,121,189,122,156,138,147,119,254,145,144,138,89,122,233,122,58,123,143,63,19,71,56,123,124,113,12,139,31,139,48,84,101,85,63,139,76,139,77,139,169,138,122,74,144,139,155,139,175,138,223,22,21,70,79,136,155,140,84,125,143,125,212,249,37,55,83,125,214,140,152,125,189,125,18,141,3,141,16,25,219,140,92,112,17,141,201,76,208,62,0,0,169,141,2,128,20,16,138,73,124,59,188,129,12,113,231,122,173,142,182,142,195,142,212,146,25,143,45,143,101,131,18,132,165,143,3,147,159,162,80,10,179,143,42,73,222,137,61,133,187,61,248,94,98,50,249,143,20,160,188,134,1,133,37,35,128,57,215,110,55,144,60,133,190,122,97,144,108,133,11,134,168,144,19,135,196,144,230,134,174,144,0,0,103,145,240,58,169,145,196,145,172,124,51,137,137,30,14,146,159,108,65,146,98,146,185,85,0,0,198,138,155,60,12,139,219,85,49,13,44,147,107,147,225,138,235,139,143,112,195,90,226,138,229,138,101,73,68,146,236,139,57,140,255,139,115,147,91,148,188,142,133,149,166,149,38,148,160,149,246,111,185,66,122,38,216,134,124,18,46,62,223,73,28,108,123,150,150,150,108,65,163,150,213,110,218,97,182,150,245,120,224,138,189,150,204,83,161,73,184,108,116,2,16,100,175,144,229,144,209,74,21,25,10,51,49,151,66,134,54,151,15,74,61,69,133,69,233,74,117,112,65,91,27,151,0,0,213,145,87,151,74,91,235,145,95,151,37,148,208,80,183,48,188,48,137,151,159,151,177,151,190,151,192,151,210,151,224,151,108,84,238,151,28,116,51,148,0,0,245,151,29,148,122,121,209,74,52,152,51,152,75,152,102,152,14,59,117,113,81,61,48,6,92,65,6,87,202,152,183,152,200,152,199,152,255,74,39,109,211,22,176,85,225,152,230,152,236,152,120,147,57,153,41,74,114,75,87,152,5,153,245,153,12,154,59,154,16,154,88,154,37,87,196,54,177,144,213,155,224,154,226,154,5,155,244,154,14,76,20,155,45,155,0,134,52,80,52,155,168,105,195,56,125,48,80,155,64,155,62,157,69,90,99,24,142,155,75,66,2,156,255,155,12,156,104,158,212,157,183,159,146,161,171,161,225,160,35,161,223,161,126,157,131,157,52,161,14,158,136,104,196,157,91,33,147,161,32,162,59,25,51,162,57,157,185,160,180,162,144,158,149,158,158,158,162,158,52,77,170,158,175,158,100,67,193,158,96,59,229,57,29,61,50,79,190,55,43,140,2,159,8,159,150,75,36,148,162,109,23,159,0,0,57,159,159,86,138,86,69,159,184,153,139,144,242,151,127,132,98,159,105,159,220,122,142,159,22,114,190,75,117,73,187,73,119,113,248,73,72,67,81,74,158,115,218,139,250,24,159,121,126,137,54,142,105,147,243,147,68,138,236,146,129,147,203,147,108,137,185,68,23,114,235,62,114,119,67,122,208,112,115,68,248,67,126,113,239,23,163,112,190,24,153,53,199,62,133,24,47,84,248,23,34,55,251,22,57,24,225,54,116,23,209,24,75,95,35,55,192,22,91,87,37,74,254,19,168,18,198,19,182,20,3,133,166,54,0,0,85,132,148,73,101,113,49,62,92,85,251,62,82,112,244,68,238,54,157,153,38,111,249,103,51,55,21,60,231,61,108,88,34,25,16,104,87,64,63,55,225,64,139,64,15,65,33,108,203,84,158,86,177,102,146,86,223,15,168,11,13,14,198,147,19,139,156,147,248,78,43,81,25,56,54,68,188,78,101,4,127,3,75,79,138,79,81,86,104,90,171,1,203,3,153,57,10,3,20,4,53,52,41,79,192,2,179,142,117,2,218,138,12,2,152,78,205,80,13,81,162,79,3,79,14,74,138,62,66,79,46,80,108,80,129,80,204,79,229,79,88,80,252,80,0,0,0,0,0,0,0,0,118,110,149,53,57,62,191,62,114,109,132,24,137,62,168,81,195,81,224,5,221,68,163,4,146,4,145,4,122,141,156,138,14,7,89,82,164,82,115,8,225,82,0,0,122,70,140,113,140,67,32,12,172,73,228,16,209,105,29,14,0,0,222,62,153,116,20,116,86,116,152,115,142,75,188,74,141,64,208,83,132,53,15,114,201,64,180,85,69,3,205,84,198,11,29,87,93,146,244,150,102,147,221,87,141,87,127,87,62,54,203,88,153,90,70,138,250,22,111,23,16,23,44,90,184,89,143,146,126,90,207,90,18,90,70,89,243,25,97,24,149,66,245,54,5,109,67,116,33,90,131,94,129,90,215,139,19,4,224,147,140,116,3,19,5,113,114,73,8,148,251,137,189,147,160,55,30,92,158,92,94,94,72,94,150,25,124,25,238,58,205,94,79,91,3,25,4,25,1,55,160,24,221,54,254,22,211,54,42,129,71,138,186,29,114,52,168,137,12,95,14,95,39,25,171,23,107,90,59,23,68,91,20,134,253,117,96,136,126,96,96,40,43,38,219,95,184,62,175,37,190,37,136,144,115,111,192,97,62,0,70,0,27,38,153,97,152,97,117,96,155,44,7,45,212,70,77,145,113,100,101,70,106,43,41,58,34,43,80,52,234,152,120,46,55,99,91,164,182,100,49,99,209,99,227,73,103,45,164,98,161,44,59,100,107,101,114,105,244,59,142,48,173,50,137,73,171,50,13,85,224,50,217,24,63,148,206,102,137,50,179,49,224,58,144,65,132,85,34,139,143,85,252,22,91,85,37,84,238,120,3,49,42,24,52,50,100,52,15,50,130,49,201,66,142,102,36,109,107,102,147,75,48,102,112,120,235,29,99,102,210,50,225,50,30,102,114,88,209,56,58,56,188,55,153,59,162,55,254,51,208,116,150,59,143,103,42,70,182,104,30,104,196,59,190,106,99,56,213,55,135,68,51,106,82,106,201,106,5,107,18,25,17,101,152,104,76,106,215,59,122,106,87,107,192,63,154,60,160,147,242,146,234,139,203,138,137,146,30,128,220,137,103,148,165,109,11,111,236,73,0,0,127,63,143,61,4,110,60,64,61,90,10,110,71,88,36,109,66,120,59,113,26,67,118,66,241,112,80,114,135,114,148,114,143,71,37,71,121,81,164,74,235,5,122,116,248,62,95,54,74,74,23,73,225,95,6,63,177,62,223,74,35,140,53,63,167,96,243,62,204,116,60,116,135,147,55,116,159,68,234,109,81,69,131,117,99,63,217,76,6,77,88,63,85,117,115,118,198,165,25,59,104,116,204,138,171,73,142,73,251,58,205,61,78,74,255,62,197,73,243,72,250,145,50,87,66,147,227,138,100,24,223,80,33,82,231,81,120,119,50,50,14,119,15,119,123,119,151,70,129,55,94,58,240,72,56,116,155,116,191,62,186,74,199,74,200,64,150,74,174,97,7,147,129,85,30,120,141,120,136,120,210,120,208,115,89,121,65,119,227,86,14,65,0,0,150,132,165,121,45,106,250,62,58,122,244,121,110,65,230,22,50,65,53,146,241,121,76,13,140,73,153,2,186,61,110,23,151,53,107,85,112,53,170,54,212,1,13,12,226,122,89,90,245,38,175,90,156,90,13,90,91,2,240,120,42,90,198,91,254,122,249,65,93,124,109,124,17,66,179,91,188,94,166,94,205,124,249,73,176,23,142,124,124,124,174,124,178,106,220,125,7,126,211,125,78,127,97,98,92,97,72,123,151,125,130,94,106,66,117,107,22,9,214,103,78,0,207,53,196,87,18,100,248,99,98,73,221,127,39,123,44,8,233,90,67,93,12,123,14,94,230,153,69,134,99,154,28,106,63,52,226,57,247,73,173,101,31,154,160,101,128,132,39,113,209,108,234,68,55,129,2,68,198,128,9,129,66,129,180,103,195,152,66,106,98,130,101,130,81,106,83,132,167,109,16,134,27,114,134,90,127,65,64,24,43,91,161,24,228,90,216,24,160,134,188,249,143,61,45,136,34,116,2,90,110,136,69,79,135,136,191,136,230,136,101,137,77,137,131,86,84,137,133,119,132,119,245,139,217,139,156,139,249,137,173,62,163,132,245,70,207,70,242,55,61,138,28,138,72,148,77,95,43,146,132,66,212,101,41,113,196,112,69,24,109,157,159,140,233,140,220,125,154,89,195,119,240,89,110,67,212,54,42,142,167,142,9,76,48,143,74,143,244,66,88,108,187,111,33,35,155,72,121,111,139,110,218,23,233,155,181,54,47,73,187,144,0,0,113,85,6,73,187,145,4,148,75,138,98,64,252,138,39,148,29,140,59,140,229,132,43,138,153,149,167,149,151,149,150,149,52,141,69,116,194,62,255,72,66,74,234,67,231,62,37,50,143,150,231,142,102,142,101,142,204,62,237,73,120,74,238,63,18,116,107,116,252,62,65,151,176,144,71,104,29,74,147,144,223,87,0,0,104,147,137,137,38,140,47,139,190,99,186,146,17,91,105,139,60,73,249,115,27,66,155,151,113,151,56,153,38,15,193,93,197,139,178,74,31,152,218,148,246,146,215,149,229,145,192,68,80,139,103,74,100,139,220,152,69,138,0,63,42,146,37,73,20,132,59,153,77,153,6,123,253,61,155,153,111,75,170,153,92,154,101,139,200,88,143,106,33,154,254,90,47,154,241,152,144,75,72,153,188,153,189,75,151,75,125,147,114,88,2,19,34,88,184,73,232,20,68,120,31,39,184,61,197,104,125,61,88,148,39,57,80,97,129,39,107,41,7,97,79,156,83,156,123,156,53,156,16,156,127,155,207,155,45,158,159,155,245,161,254,160,33,157,174,76,4,65,24,158,176,76,12,157,180,161,237,160,243,160,47,153,165,157,189,132,18,110,223,111,130,107,252,133,51,69,164,109,132,110,240,109,32,132,238,133,0,110,215,55,100,96,226,121,156,53,64,54,45,73,222,73,98,61,219,147,190,146,72,147,191,2,185,120,119,146,77,148,228,79,64,52,100,144,93,85,61,120,84,120,182,120,75,120,87,23,201,49,65,73,154,54,114,79,218,111,217,111,0,0,30,112,20,84,181,65,187,87,243,88,138,87,22,157,215,87,52,113,175,52,172,65,235,113,64,108,151,79,0,0,181,23,73,138,12,97,206,90,11,90,188,66,136,68,44,55,123,75,252,137,187,147,184,147,214,24,29,15,114,132,192,108,19,20,250,66,38,44,193,67,148,89,183,61,65,103,168,125,91,97,164,96,185,73,139,73,250,137,229,146,226,115,233,62,180,116,99,139,159,24,225,62,179,74,216,106,243,115,251,115,214,62,62,74,148,74,217,23,102,74,167,3,36,20,229,73,72,116,22,73,165,112,118,73,132,146,230,115,95,147,254,4,49,147,206,138,22,138,134,147,231,139,213,85,53,73,130,138,107,113,67,73,255,12,164,86,26,6,235,11,184,12,2,85,196,121,250,23,254,125,194,22,80,74,82,24,46,69,1,148,10,55,192,138,173,73,176,89,191,24,131,24,132,116,161,90,226,54,91,61,176,54,95,146,121,90,129,138,98,24,116,147,205,60,180,10,150,74,138,57,244,80,105,61,76,61,156,19,117,113,251,66,24,130,15,110,228,144,235,68,87,109,79,126,103,112,175,108,214,60,237,63,45,62,2,110,12,111,111,61,245,3,81,117,188,54,200,52,128,70,218,62,113,72,196,89,110,146,62,73,65,143,28,140,192,107,18,88,200,87,214,54,82,20,254,112,98,67,113,74,227,47,176,18,189,35,185,104,103,105,152,19,229,52,244,123,223,54,131,138,214,55,250,51,159,76,26,106,173,54,183,108,62,132,223,68,206,68,38,109,81,109,130,108,222,111,23,111,9,113,61,131,58,23,237,131,128,108,83,112,219,23,137,89,130,90,179,23,97,90,113,90,5,25,252,65,45,55,239,89,60,23,199,54,142,113,144,147,154,102,165,66,110,90,43,90,147,66,43,106,249,62,54,119,91,68,202,66,29,113,89,66,225,137,176,79,40,109,194,92,206,68,77,126,189,67,12,106,86,66,4,19,166,112,51,113,233,67,165,61,223,108,37,248,79,74,101,126,235,89,47,93,243,61,92,95,93,74,223,23,164,125,38,132,133,84,250,58,0,51,20,2,126,87,213,8,25,6,229,63,158,31,182,162,3,112,91,145,112,93,143,115,211,124,89,138,32,148,200,79,231,127,205,114,16,115,244,122,56,115,57,115,246,86,65,115,72,115,169,62,24,123,108,144,245,113,242,72,225,115,246,129,202,62,12,119,209,62,162,108,253,86,25,116,30,116,31,116,226,62,240,62,244,62,250,62,211,116,14,63,83,63,66,117,109,117,114,117,141,117,124,63,200,117,220,117,192,63,77,118,215,63,116,118,220,63,122,118,92,79,136,113,35,86,128,137,105,88,29,64,67,119,57,64,97,103,69,64,219,53,152,119,106,64,111,64,94,92,190,119,203,119,242,88,24,120,185,112,28,120,168,64,57,120,71,120,81,120,102,120,72,132,53,85,51,121,3,104,50,121,3,65,9,65,145,121,153,121,187,143,6,122,188,143,103,65,145,122,178,65,188,122,121,130,196,65,207,122,219,122,207,65,33,78,98,123,108,123,123,123,18,124,27,124,96,66,122,66,123,124,156,124,140,66,184,124,148,66,237,124,147,143,192,112,207,12,207,125,212,125,208,125,253,125,174,127,180,127,159,114,151,67,32,128,37,128,57,123,46,128,49,128,84,128,204,61,180,87,160,112,183,128,233,128,237,67,12,129,42,115,14,129,18,129,96,117,20,129,1,68,57,59,86,129,89,129,90,129,19,68,58,88,124,129,132,129,37,68,147,129,45,68,165,129,239,87,193,129,228,129,84,130,143,68,166,130,118,130,202,130,216,130,255,130,176,68,87,131,105,150,138,105,5,132,245,112,100,132,227,96,136,132,4,69,190,132,225,132,248,132,16,133,56,133,82,133,59,69,111,133,112,133,224,133,119,69,114,134,146,134,178,134,239,134,69,150,139,135,6,70,23,70,174,136,255,136,36,137,71,137,145,137,103,121,41,138,56,138,148,138,180,138,81,140,212,140,242,140,28,141,152,71,95,88,195,141,237,71,238,78,58,142,216,85,84,87,113,142,245,85,176,142,55,72,206,142,226,142,228,142,237,142,242,142,183,143,193,143,202,143,204,143,51,144,196,153,173,72,224,152,19,146,30,73,40,146,88,146,107,146,177,146,174,146,191,146,227,146,235,146,243,146,244,146,253,146,67,147,132,147,173,147,69,73,81,73,191,158,23,148,1,83,29,148,45,148,62,148,106,73,84,148,121,148,45,149,162,149,167,73,244,149,51,150,229,73,160,103,36,74,64,151,53,74,178,151,194,151,84,86,228,74,232,96,185,152,25,75,241,152,68,88,14,153,25,153,180,81,28,153,55,153,66,153,93,153,98,153,112,75,197,153,157,75,60,154,15,155,131,122,105,155,129,155,221,155,241,155,244,155,109,76,32,156,111,55,194,27,73,157,58,156,254,158,80,86,147,157,189,157,192,157,252,157,246,148,182,143,123,158,172,158,177,158,189,158,198,158,220,148,226,158,241,158,248,158,200,122,68,159,148,0,183,2,160,3,26,105,195,148,172,89,215,4,64,88,193,148,185,55,213,5,21,6,118,6,186,22,87,87,115,113,194,10,205,10,191,11,106,84,59,248,203,11,158,84,251,11,59,12,83,12,101,12,124,12,231,96,141,12,122,86,181,12,221,12,237,12,111,13,178,13,200,13,85,105,47,156,165,135,4,14,14,14,215,14,144,15,45,15,115,14,32,92,188,15,11,94,92,16,79,16,118,16,30,103,123,16,136,16,150,16,71,54,191,16,211,16,47,17,59,17,100,83,173,132,227,18,117,19,54,19,129,139,119,21,25,22,195,23,199,23,120,78,187,112,45,24,106,25,45,26,69,26,42,28,112,28,172,28,200,30,195,98,213,30,21,31,152,113,85,104,69,32,233,105,200,54,124,34,215,35,250,35,42,39,113,40,79,41,253,130,103,41,147,41,213,42,165,137,232,42,160,143,14,43,184,151,63,43,71,152,189,154,76,44,0,0,136,44,183,44,232,91,8,45,18,45,183,45,149,45,66,46,116,47,204,47,51,48,102,48,31,51,222,51,177,95,72,102,191,102,121,122,103,53,243,53,0,0,186,73,0,0,26,54,22,55,0,0,70,3,181,88,14,103,24,105,167,58,87,118,226,95,17,62,185,62,254,117,154,32,208,72,184,74,25,65,154,138,238,66,13,67,59,64,52,67,150,67,69,74,202,5,210,81,17,6,159,89,168,30,190,59,255,60,4,68,214,68,136,87,116,70,155,57,47,71,232,133,201,153,98,55,195,33,94,139,78,139,0,0,18,72,251,72,21,74,9,114,192,74,120,12,101,89,165,78,134,79,121,7,218,142,44,80,143,82,63,87,113,113,153,82,25,84,74,63,167,74,188,85,70,84,110,84,82,107,0,0,115,52,63,85,50,118,94,85,24,71,98,85,102,85,199,87,63,73,93,88,102,80,251,52,204,51,0,0,3,89,124,71,72,137,174,90,137,91,6,92,144,29,161,87,81,113,0,0,2,97,18,124,86,144,178,97,154,79,98,139,2,100,74,100,91,93,247,107,0,0,132,100,28,25,234,138,246,73,136,100,239,63,18,101,192,75,191,101,181,102,27,39,101,148,225,87,149,97,39,90,205,248,0,0,185,86,33,69,252,102,106,78,52,73,86,150,143,109,189,108,24,54,119,137,153,103,110,104,17,100,94,104,0,0,199,104,66,123,192,144,17,10,38,105,0,0,57,105,69,122,0,0,250,105,38,154,45,106,95,54,105,100,33,0,131,121,52,106,91,107,44,93,25,53,0,0,157,107,208,70,164,108,59,117,101,136,174,109,182,88,28,55,141,37,75,112,205,113,84,60,128,114,133,114,129,146,122,33,139,114,48,147,230,114,208,73,57,108,159,148,80,116,248,14,39,136,245,136,38,41,115,132,177,23,184,110,42,74,32,24,164,57,185,54,0,0,0,0,63,69,182,102,173,156,164,152,67,137,204,119,88,120,214,86,223,64,10,22,161,57,47,55,232,128,197,19,173,113,102,131,221,121,168,145,0,0,183,76,175,112,171,137,253,121,10,122,11,123,102,125,122,65,67,123,126,121,9,128,181,111,223,162,3,106,24,131,162,83,7,110,191,147,54,104,93,151,111,129,35,128,181,105,237,19,47,50,72,128,133,93,48,140,131,128,21,87,35,152,73,137,171,93,136,73,190,101,213,105,210,83,165,74,129,63,17,60,54,103,144,128,244,128,46,129,161,31,79,129,137,129,175,129,26,130,6,131,47,131,138,131,202,53,104,132,170,134,250,72,230,99,86,137,8,120,85,146,184,137,242,67,231,137,223,67,232,137,70,139,212,139,248,89,9,140,0,0,197,143,236,144,0,0,16,145,60,145,247,61,94,145,202,74,208,143,143,114,139,86,231,148,233,149,176,149,184,149,50,151,209,152,73,153,106,153,195,153,40,154,14,155,90,157,155,157,159,126,248,158,35,159,164,76,71,149,147,162,162,113,255,162,145,77,18,144,203,165,156,77,156,12,190,143,193,85,186,143,176,36,185,143,147,74,9,69,127,126,86,111,177,106,234,78,228,52,44,139,157,120,58,55,128,142,245,23,36,128,108,139,153,139,62,122,175,102,235,61,85,118,183,60,53,86,86,89,154,78,129,94,88,98,191,86,109,14,14,142,109,91,136,62,158,76,222,99,0,0,246,23,123,24,48,101,45,86,74,92,26,84,17,83,198,61,152,157,125,76,34,86,30,86,73,127,216,94,117,89,64,61,112,135,28,78,234,15,73,13,186,54,23,129,94,157,24,141,59,118,69,156,78,118,185,119,69,147,50,84,72,129,247,130,37,86,50,129,24,132,189,128,234,85,98,121,67,86,22,84,157,14,206,53,5,86,241,85,241,102,226,130,45,54,52,117,240,85,186,85,151,84,114,85,65,12,150,12,208,94,72,81,118,14,98,44,162,14,171,158,90,125,222,85,117,16,157,98,109,151,148,84,205,140,246,113,118,145,252,99,185,99,254,99,105,85,67,43,114,156,179,46,154,81,223,52,167,13,167,81,77,84,30,85,19,85,102,118,45,142,138,104,177,117,182,128,4,136,134,135,199,136,182,129,28,132,193,16,236,68,4,115,6,71,144,91,11,131,147,104,123,86,244,38,47,125,163,65,115,125,208,110,182,114,112,145,217,17,8,146,252,60,169,166,172,14,249,14,102,114,162,28,78,71,194,79,249,127,235,15,250,64,93,156,31,101,160,45,243,72,224,71,124,157,236,15,10,14,0,0,163,117,237,15,0,0,72,96,135,17,163,113,142,126,80,157,26,78,4,78,119,53,13,91,178,108,103,83,172,54,220,57,125,83,165,54,24,70,154,88,110,75,45,130,75,84,170,87,149,90,121,9,0,0,82,58,101,36,116,115,172,158,9,77,237,155,254,60,48,159,91,76,169,79,158,149,222,159,92,132,182,61,178,114,179,103,32,55,46,99,37,125,247,62,44,62,42,58,8,144,204,82,116,62,122,54,233,69,142,4,64,118,240,90,182,14,122,120,46,127,167,88,191,64,124,86,139,155,116,93,84,118,52,164,133,158,225,76,0,0,251,55,25,97,218,48,242,67,0,0,93,86,169,18,167,87,99,73,6,158,52,82,174,112,173,53,0,0,124,157,86,124,57,155,222,87,108,23,83,92,211,100,208,148,53,99,100,113,173,134,40,13,34,109,226,74,113,13,0,0,254,81,15,31,142,93,3,151,209,29,129,158,76,144,31,123,2,155,209,92,163,123,104,98,53,99,255,154,207,123,42,155,126,124,0,0,66,124,134,124,21,156,252,123,9,155,0,0,27,156,62,73,90,159,115,85,195,91,253,79,152,158,242,79,96,82,6,62,209,82,103,87,86,80,183,89,18,94,200,151,171,157,92,143,105,84,180,151,64,153,186,151,44,83,48,97,44,105,218,83,10,156,2,157,59,76,65,150,128,105,166,80,70,117,109,23,218,153,115,82,0,0,89,145,129,150,92,145,0,0,81,145,151,142,127,99,35,109,202,106,17,86,142,145,122,117,133,98,252,3,79,115,112,124,33,92,253,60,0,0,25,73,214,118,157,155,42,78,212,12,190,131,66,136,0,0,74,92,192,105,0,0,122,87,31,82,245,93,206,78,49,108,242,1,57,79,156,84,218,84,154,82,130,141,254,53,0,0,243,53,0,0,82,107,124,145,165,159,151,155,46,152,180,152,186,154,168,158,132,158,122,113,20,123,0,0,250,107,24,136,120,127,0,0,32,86,74,166,119,142,83,159,0,0,212,141,79,142,28,158,1,142,130,98,125,131,40,142,117,142,211,122,119,74,62,122,216,120,234,108,103,138,7,118,90,138,38,159,206,108,214,135,195,117,178,162,83,120,64,248,12,141,226,114,113,115,45,139,2,115,241,116,235,140,187,74,47,134,186,95,160,136,183,68,0,0,59,24,5,110,0,0,126,138,27,37,0,0,253,96,103,118,215,154,68,157,110,147,143,155,245,135,0,0,0,0,247,140,44,115,33,151,176,155,214,53,178,114,7,76,81,124,74,153,89,97,89,97,4,76,150,158,125,97,0,0,95,87,111,97,166,98,57,98,0,0,92,58,226,97,170,83,245,51,100,99,2,104,210,53,87,93,194,139,218,143,57,142,0,0,217,80,70,29,6,121,50,83,56,150,59,15,101,64,0,0,254,119,0,0,194,124,26,95,218,124,45,122,102,128,99,128,77,125,5,117,242,116,148,137,26,130,12,103,98,128,134,116,91,128,240,116,3,129,36,119,137,137,204,103,83,117,209,110,169,135,206,135,200,129,140,135,73,138,173,140,67,139,43,119,248,116,218,132,53,54,178,105,166,141,0,0,169,137,0,0,185,109,193,135,17,64,231,116,219,61,118,113,164,96,156,97,209,60,0,0,119,96,0,0,113,127,45,139,0,0,233,96,126,75,32,82,24,60,199,60,215,94,86,118,49,85,68,25,254,18,3,153,220,109,173,112,193,92,173,97,15,138,119,54,238,0,70,104,14,79,98,69,31,91,76,99,80,159,166,158,107,98,71,5,219,146,223,5,197,63,76,133,181,66,239,115,181,81,73,54,66,73,228,137,68,147,219,25,238,130,200,60,60,120,68,103,223,98,51,73,170,137,160,2,179,107,5,19,171,79,237,36,8,80,41,109,132,122,0,54,177,74,19,37,0,0,126,3,164,95,128,3,71,3,219,110,31,4,0,0,1,81,122,52,14,81,108,152,67,55,22,132,164,73,135,4,96,81,180,51,106,81,255,11,252,32,229,2,48,37,142,5,51,50,131,25,130,91,125,135,179,5,153,60,178,81,184,81,52,157,201,81,207,81,209,81,220,60,211,81,166,74,179,81,226,81,66,83,237,81,205,131,62,105,45,55,123,95,11,82,38,82,60,82,181,82,87,82,148,82,185,82,197,82,21,124,66,133,224,82,13,134,19,107,0,0,222,138,73,85,217,110,128,63,84,9,236,63,51,83,0,0,226,11,203,108,38,23,27,104,213,115,74,96,170,62,204,56,232,22,221,113,162,68,109,83,116,83,171,134,126,83,0,0,150,21,19,22,230,119,147,83,155,138,160,83,171,83,174,83,167,115,114,87,89,63,156,115,193,83,197,83,73,108,73,78,254,87,217,83,171,58,143,11,224,83,235,63,163,45,246,83,119,12,19,84,121,112,43,85,87,102,91,109,109,84,83,107,116,13,93,85,143,84,164,84,166,71,13,23,221,14,180,61,77,13,188,137,152,38,71,85,237,76,47,84,23,116,134,85,169,85,0,0,215,24,58,64,82,69,53,68,179,102,180,16,55,86,205,102,138,50,164,102,173,102,77,86,79,86,241,120,241,86,135,151,254,83,0,87,239,86,237,86,102,139,35,54,79,18,70,87,165,65,110,108,139,112,66,87,177,54,126,108,230,87,22,20,3,88,84,20,99,67,38,88,245,75,92,88,170,88,97,53,224,88,220,88,60,18,251,88,255,91,67,87,80,161,120,66,211,147,161,53,31,89,166,104,195,54,89,110,62,22,36,90,83,85,146,22,5,133,201,89,78,13,129,108,42,109,220,23,217,89,251,23,178,23,166,109,113,109,40,24,213,22,249,89,69,110,171,90,99,90,230,54,169,73,0,0,8,55,150,90,101,116,211,90,161,111,84,37,133,61,17,25,50,55,184,22,131,94,208,82,118,91,136,101,124,91,14,122,4,64,93,72,4,2,213,91,96,97,52,26,204,89,165,5,243,91,157,91,16,77,5,92,68,27,19,92,206,115,20,92,165,28,40,107,73,92,221,72,133,92,233,92,239,92,139,93,249,29,55,30,16,93,24,93,70,93,164,30,186,92,215,93,252,130,45,56,1,73,73,32,115,33,135,130,54,56,194,59,46,94,138,106,0,0,122,94,188,68,211,12,166,83,183,78,0,0,168,83,113,23,9,94,244,94,130,132,249,94,251,94,160,56,252,94,62,104,27,148,13,95,193,1,148,248,222,58,174,72,58,19,58,95,136,104,208,35,0,0,113,36,99,95,189,151,110,110,114,95,64,147,54,138,167,95,182,93,95,61,80,82,106,31,248,112,104,38,214,145,158,2,41,138,49,96,133,102,119,24,99,57,199,61,57,54,144,87,180,39,113,121,64,62,158,96,0,0,179,96,130,73,143,73,83,122,164,116,225,80,160,90,100,97,36,132,66,97,166,248,210,110,129,97,244,81,86,6,135,97,170,91,183,63,95,40,211,97,157,139,93,153,208,97,50,57,128,41,193,40,35,96,92,97,30,101,139,99,24,1,197,98,112,23,213,98,13,46,108,99,223,73,23,58,56,100,248,99,142,19,252,23,0,0,138,111,54,46,20,152,140,64,29,87,225,100,229,100,123,148,102,58,58,100,87,58,77,101,22,111,40,74,35,74,133,101,109,101,95,101,126,48,181,101,64,73,55,75,209,101,216,64,41,24,224,101,227,101,223,95,0,52,24,102,247,49,248,49,68,102,164,49,165,49,75,102,117,14,103,102,230,81,115,102,0,0,61,30,49,50,244,133,200,49,19,83,197,119,247,40,164,153,2,103,156,67,33,74,43,59,250,105,194,55,0,0,103,103,98,103,205,65,237,144,215,103,233,68,34,104,80,110,60,146,1,104,230,51,160,109,93,104,111,52,225,105,11,106,223,138,115,105,195,104,205,53,1,105,0,105,50,61,1,58,60,54,128,59,172,103,97,105,74,138,252,66,54,105,152,105,161,59,201,3,99,131,144,80,249,105,89,54,42,33,69,106,3,55,157,106,243,59,177,103,200,106,156,145,13,60,29,107,35,9,222,96,53,107,116,107,205,39,181,110,219,58,181,3,88,25,64,55,33,84,90,59,225,107,252,62,220,107,55,108,139,36,241,72,81,107,90,108,38,130,121,108,188,61,197,68,189,61,164,65,12,73,0,73,201,60,229,54,235,60,50,13,131,155,249,49,145,36,143,127,55,104,37,109,161,109,235,109,150,109,92,109,124,110,4,111,127,73,133,64,114,110,51,133,116,111,199,81,0,0,0,0,46,132,33,139,0,0,47,62,83,116,130,63,204,121,79,110,145,90,75,48,248,111,13,55,157,111,48,62,250,110,151,20,61,64,85,69,240,147,68,111,92,111,78,61,116,111,112,145,59,61,159,111,68,65,211,111,145,64,85,65,57,64,240,63,180,63,63,65,223,81,86,65,87,65,64,65,221,97,75,112,126,112,167,112,129,112,204,112,213,112,214,112,223,112,4,65,232,61,180,113,150,113,119,66,43,113,69,113,136,90,74,113,0,0,156,92,101,67,79,113,98,147,193,66,44,113,90,68,39,74,34,74,186,113,232,139,189,112,14,114,66,148,21,114,17,89,67,148,36,114,65,147,5,86,46,114,64,114,116,73,189,104,85,114,87,114,85,62,68,48,13,104,61,111,130,114,0,0,43,115,35,72,43,136,237,72,4,136,40,115,46,115,207,115,170,115,58,12,46,106,201,115,73,116,226,65,231,22,36,74,35,102,197,54,183,73,141,73,251,73,247,115,21,116,3,105,38,74,57,116,195,5,215,62,0,0,173,40,96,116,178,142,71,116,228,115,118,116,185,131,108,116,48,55,116,116,241,147,44,106,130,116,83,73,140,74,95,65,121,74,143,139,70,91,3,140,158,24,200,116,136,25,14,117,0,0,30,117,217,142,75,26,215,91,172,142,133,147,77,117,74,117,103,117,110,117,130,79,4,63,19,77,142,117,93,116,158,117,180,117,2,118,44,118,81,118,79,118,111,118,118,118,245,99,144,118,239,129,248,55,17,105,14,105,161,118,165,118,183,118,204,118,159,111,98,132,157,80,125,81,28,30,30,119,38,119,64,119,175,100,32,82,88,119,172,50,175,119,100,137,104,137,193,22,244,119,0,0,118,19,18,74,202,104,175,120,199,120,211,120,165,150,46,121,224,85,215,120,52,121,177,120,12,118,184,143,132,136,43,139,131,96,28,38,134,121,0,137,2,105,128,121,87,88,157,121,57,123,60,121,169,121,42,110,38,113,168,62,198,121,13,145,212,121,32,5,95,68,15,82,130,184,248,0,0,64,32,169,78,4,0,0,0,0,52,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,64,0,0,0,0,0,0,0,0,4,88,0,60,0,0,0,0,0,128,92,173,220,243,187,201,67,238,237,164,15,38,193,155,118,242,239,222,251,250,247,15,50,68,175,254,239,253,254,17,96,176,0,0,33,25,129,32,16,136,168,96,33,105,36,0,68,137,196,0,0,3,64,53,0,67,132,49,81,147,104,2,2,0,0,0,0,0,0,0,0,0,0,0,64,0,1,128,172,100,130,64,140,161,144,4,80,96,212,0,210,42,24,157,104,53,151,79,216,248,32,196,130,28,40,130,117,148,2,56,64,160,161,197,16,113,77,196,13,152,185,94,91,1,67,159,153,3,120,32,226,31,8,137,1,201,64,7,3,13,154,144,82,209,79,124,3,2,33,32,192,110,19,131,181,219,245,229,119,144,79,23,154,54,23,12,0,110,186,9,47,96,84,0,30,120,104,34,112,86,158,37,243,142,183,23,11,239,230,119,23,91,27,193,16,152,141,18,24,182,207,1,49,114,26,91,44,182,192,32,226,195,92,130,27,224,218,206,133,214,64,169,84,11,208,15,72,68,64,16,9,212,64,174,59,100,30,68,43,23,8,134,130,54,24,160,137,231,156,91,8,132,3,2,218,144,236,219,135,133,191,162,173,157,142,157,152,32,37,70,0,70,159,127,227,213,201,132,244,214,77,6,227,182,24,18,9,0,0,0,4,0,0,32,0,0,0,0,2,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,142,120,110,95,63,126,221,61,247,252,155,252,174,210,255,143,107,241,231,191,186,174,110,23,239,220,167,62,182,181,119,201,146,215,165,182,74,110,155,185,129,77,103,254,84,241,155,98,254,111,82,215,54,254,191,41,69,129,249,189,101,166,66,57,0,0,66,96,143,0,148,64,64,210,175,215,209,219,0,160,152,178,123,6,82,32,152,22,200,61,9,0,0,1,0,0,0,1,10,178,8,128,0,0,0,4,136,32,20,16,76,0,0,4,0,161,68,16,0,65,1,0,8,64,240,223,79,54,88,241,245,181,128,245,103,128,64,0,80,78,65,200,132,0,90,96,216,1,43,1,80,161,22,196,64,242,110,17,172,32,57,196,192,8,7,12,9,152,150,196,155,16,28,152,108,134,42,166,1,70,17,109,229,203,196,192,146,16,33,22,18,157,114,244,105,14,23,42,162,129,244,123,0,8,164,11,144,16,44,204,57,74,1,240,22,11,10,64,12,29,234,12,68,14,69,2,0,0,48,12,255,1,48,2,48,14,255,39,32,27,255,26,255,31,255,1,255,48,254,38,32,37,32,80,254,81,254,82,254,183,0,84,254,85,254,86,254,87,254,92,255,19,32,49,254,20,32,51,254,116,37,52,254,79,254,8,255,9,255,53,254,54,254,91,255,93,255,55,254,56,254,20,48,21,48,57,254,58,254,16,48,17,48,59,254,60,254,10,48,11,48,61,254,62,254,8,48,9,48,63,254,64,254,12,48,13,48,65,254,66,254,14,48,15,48,67,254,68,254,89,254,90,254,91,254,92,254,93,254,94,254,24,32,25,32,28,32,29,32,29,48,30,48,53,32,50,32,3,255,6,255,10,255,59,32,167,0,3,48,203,37,207,37,179,37,178,37,206,37,6,38,5,38,199,37,198,37,161,37,160,37,189,37,188,37,163,50,5,33,175,0,227,255,63,255,205,2,73,254,74,254,77,254,78,254,75,254,76,254,95,254,96,254,97,254,11,255,13,255,215,0,247,0,177,0,26,34,28,255,30,255,29,255,102,34,103,34,96,34,30,34,82,34,97,34,98,254,99,254,100,254,101,254,102,254,94,255,41,34,42,34,165,34,32,34,31,34,191,34,210,51,209,51,43,34,46,34,53,34,52,34,64,38,66,38,149,34,153,34,145,33,147,33,144,33,146,33,150,33,151,33,153,33,152,33,37,34,35,34,15,255,60,255,21,34,104,254,4,255,229,255,18,48,224,255,225,255,5,255,32,255,3,33,9,33,105,254,106,254,107,254,213,51,156,51,157,51,158,51,206,51,161,51,142,51,143,51,196,51,176,0,89,81,91,81,94,81,93,81,97,81,99,81,231,85,233,116,206,124,129,37,130,37,131,37,132,37,133,37,134,37,135,37,136,37,143,37,142,37,141,37,140,37,139,37,138,37,137,37,60,37,52,37,44,37,36,37,28,37,148,37,0,37,2,37,149,37,12,37,16,37,20,37,24,37,109,37,110,37,112,37,111,37,80,37,94,37,106,37,97,37,226,37,227,37,229,37,228,37,113,37,114,37,115,37,16,255,17,255,18,255,19,255,20,255,21,255,22,255,23,255,24,255,25,255,96,33,97,33,98,33,99,33,100,33,101,33,102,33,103,33,104,33,105,33,33,48,34,48,35,48,36,48,37,48,38,48,39,48,40,48],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+144498);allocate([41,48,65,83,68,83,69,83,33,255,34,255,35,255,36,255,37,255,38,255,39,255,40,255,41,255,42,255,43,255,44,255,45,255,46,255,47,255,48,255,49,255,50,255,51,255,52,255,53,255,54,255,55,255,56,255,57,255,58,255,65,255,66,255,67,255,68,255,69,255,70,255,71,255,72,255,73,255,74,255,75,255,76,255,77,255,78,255,79,255,80,255,81,255,82,255,83,255,84,255,85,255,86,255,87,255,88,255,89,255,90,255,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154,3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,5,49,6,49,7,49,8,49,9,49,10,49,11,49,12,49,13,49,14,49,15,49,16,49,17,49,18,49,19,49,20,49,21,49,22,49,23,49,24,49,25,49,26,49,27,49,28,49,29,49,30,49,31,49,32,49,33,49,34,49,35,49,36,49,37,49,38,49,39,49,40,49,41,49,217,2,201,2,202,2,199,2,203,2,0,36,1,36,2,36,3,36,4,36,5,36,6,36,7,36,8,36,9,36,10,36,11,36,12,36,13,36,14,36,15,36,16,36,17,36,18,36,19,36,20,36,21,36,22,36,23,36,24,36,25,36,26,36,27,36,28,36,29,36,30,36,31,36,33,36,172,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,89,78,1,78,3,78,67,78,93,78,134,78,140,78,186,78,63,81,101,81,107,81,224,81,0,82,1,82,155,82,21,83,65,83,92,83,200,83,9,78,11,78,8,78,10,78,43,78,56,78,225,81,69,78,72,78,95,78,94,78,142,78,161,78,64,81,3,82,250,82,67,83,201,83,227,83,31,87,235,88,21,89,39,89,115,89,80,91,81,91,83,91,248,91,15,92,34,92,56,92,113,92,221,93,229,93,241,93,242,93,243,93,254,93,114,94,254,94,11,95,19,95,77,98,17,78,16,78,13,78,45,78,48,78,57,78,75,78,57,92,136,78,145,78,149,78,146,78,148,78,162,78,193,78,192,78,195,78,198,78,199,78,205,78,202,78,203,78,196,78,67,81,65,81,103,81,109,81,110,81,108,81,151,81,246,81,6,82,7,82,8,82,251,82,254,82,255,82,22,83,57,83,72,83,71,83,69,83,94,83,132,83,203,83,202,83,205,83,236,88,41,89,43,89,42,89,45,89,84,91,17,92,36,92,58,92,111,92,244,93,123,94,255,94,20,95,21,95,195,95,8,98,54,98,75,98,78,98,47,101,135,101,151,101,164,101,185,101,229,101,240,102,8,103,40,103,32,107,98,107,121,107,203,107,212,107,219,107,15,108,52,108,107,112,42,114,54,114,59,114,71,114,89,114,91,114,172,114,139,115,25,78,22,78,21,78,20,78,24,78,59,78,77,78,79,78,78,78,229,78,216,78,212,78,213,78,214,78,215,78,227,78,228,78,217,78,222,78,69,81,68,81,137,81,138,81,172,81,249,81,250,81,248,81,10,82,160,82,159,82,5,83,6,83,23,83,29,83,223,78,74,83,73,83,97,83,96,83,111,83,110,83,187,83,239,83,228,83,243,83,236,83,238,83,233,83,232,83,252,83,248,83,245,83,235,83,230,83,234,83,242,83,241,83,240,83,229,83,237,83,251,83,219,86,218,86,22,89,46,89,49,89,116,89,118,89,85,91,131,91,60,92,232,93,231,93,230,93,2,94,3,94,115,94,124,94,1,95,24,95,23,95,197,95,10,98,83,98,84,98,82,98,81,98,165,101,230,101,46,103,44,103,42,103,43,103,45,103,99,107,205,107,17,108,16,108,56,108,65,108,64,108,62,108,175,114,132,115,137,115,220,116,230,116,24,117,31,117,40,117,41,117,48,117,49,117,50,117,51,117,139,117,125,118,174,118,191,118,238,118,219,119,226,119,243,119,58,121,190,121,116,122,203,122,30,78,31,78,82,78,83,78,105,78,153,78,164,78,166,78,165,78,255,78,9,79,25,79,10,79,21,79,13,79,16,79,17,79,15,79,242,78,246,78,251,78,240,78,243,78,253,78,1,79,11,79,73,81,71,81,70,81,72,81,104,81,113,81,141,81,176,81,23,82,17,82,18,82,14,82,22,82,163,82,8,83,33,83,32,83,112,83,113,83,9,84,15,84,12,84,10,84,16,84,1,84,11,84,4,84,17,84,13,84,8,84,3,84,14,84,6,84,18,84,224,86,222,86,221,86,51,87,48,87,40,87,45,87,44,87,47,87,41,87,25,89,26,89,55,89,56,89,132,89,120,89,131,89,125,89,121,89,130,89,129,89,87,91,88,91,135,91,136,91,133,91,137,91,250,91,22,92,121,92,222,93,6,94,118,94,116,94,15,95,27,95,217,95,214,95,14,98,12,98,13,98,16,98,99,98,91,98,88,98,54,101,233,101,232,101,236,101,237,101,242,102,243,102,9,103,61,103,52,103,49,103,53,103,33,107,100,107,123,107,22,108,93,108,87,108,89,108,95,108,96,108,80,108,85,108,97,108,91,108,77,108,78,108,112,112,95,114,93,114,126,118,249,122,115,124,248,124,54,127,138,127,189,127,1,128,3,128,12,128,18,128,51,128,127,128,137,128,139,128,140,128,227,129,234,129,243,129,252,129,12,130,27,130,31,130,110,130,114,130,126,130,107,134,64,136,76,136,99,136,127,137,33,150,50,78,168,78,77,79,79,79,71,79,87,79,94,79,52,79,91,79,85,79,48,79,80,79,81,79,61,79,58,79,56,79,67,79,84,79,60,79,70,79,99,79,92,79,96,79,47,79,78,79,54,79,89,79,93,79,72,79,90,79,76,81,75,81,77,81,117,81,182,81,183,81,37,82,36,82,41,82,42,82,40,82,171,82,169,82,170,82,172,82,35,83,115,83,117,83,29,84,45,84,30,84,62,84,38,84,78,84,39,84,70,84,67,84,51,84,72,84,66,84,27,84,41,84,74,84,57,84,59,84,56,84,46,84,53,84,54,84,32,84,60,84,64,84,49,84,43,84,31,84,44,84,234,86,240,86,228,86,235,86,74,87,81,87,64,87,77,87,71,87,78,87,62,87,80,87,79,87,59,87,239,88,62,89,157,89,146,89,168,89,158,89,163,89,153,89,150,89,141,89,164,89,147,89,138,89,165,89,93,91,92,91,90,91,91,91,140,91,139,91,143,91,44,92,64,92,65,92,63,92,62,92,144,92,145,92,148,92,140,92,235,93,12,94,143,94,135,94,138,94,247,94,4,95,31,95,100,95,98,95,119,95,121,95,216,95,204,95,215,95,205,95,241,95,235,95,248,95,234,95,18,98,17,98,132,98,151,98,150,98,128,98,118,98,137,98,109,98,138,98,124,98,126,98,121,98,115,98,146,98,111,98,152,98,110,98,149,98,147,98,145,98,134,98,57,101,59,101,56,101,241,101,244,102,95,103,78,103,79,103,80,103,81,103,92,103,86,103,94,103,73,103,70,103,96,103,83,103,87,103,101,107,207,107,66,108,94,108,153,108,129,108,136,108,137,108,133,108,155,108,106,108,122,108,144,108,112,108,140,108,104,108,150,108,146,108,125,108,131,108,114,108,126,108,116,108,134,108,118,108,141,108,148,108,152,108,130,108,118,112,124,112,125,112,120,112,98,114,97,114,96,114,196,114,194,114,150,115,44,117,43,117,55,117,56,117,130,118,239,118,227,119,193,121,192,121,191,121,118,122,251,124,85,127,150,128,147,128,157,128,152,128,155,128,154,128,178,128,111,130,146,130,139,130,141,130,139,137,210,137,0,138,55,140,70,140,85,140,157,140,100,141,112,141,179,141,171,142,202,142,155,143,176,143,194,143,198,143,197,143,196,143,225,93,145,144,162,144,170,144,166,144,163,144,73,145,198,145,204,145,50,150,46,150,49,150,42,150,44,150,38,78,86,78,115,78,139,78,155,78,158,78,171,78,172,78,111,79,157,79,141,79,115,79,127,79,108,79,155,79,139,79,134,79,131,79,112,79,117,79,136,79,105,79,123,79,150,79,126,79,143,79,145,79,122,79,84,81,82,81,85,81,105,81,119,81,118,81,120,81,189,81,253,81,59,82,56,82,55,82,58,82,48,82,46,82,54,82,65,82,190,82,187,82,82,83,84,83,83,83,81,83,102,83,119,83,120,83,121,83,214,83,212,83,215,83,115,84,117,84,150,84,120,84,149,84,128,84,123,84,119,84,132,84,146,84,134,84,124,84,144,84,113,84,118,84,140,84,154,84,98,84,104,84,139,84,125,84,142,84,250,86,131,87,119,87,106,87,105,87,97,87,102,87,100,87,124,87,28,89,73,89,71,89,72,89,68,89,84,89,190,89,187,89,212,89,185,89,174,89,209,89,198,89,208,89,205,89,203,89,211,89,202,89,175,89,179,89,210,89,197,89,95,91,100,91,99,91,151,91,154,91,152,91,156,91,153,91,155,91,26,92,72,92,69,92,70,92,183,92,161,92,184,92,169,92,171,92,177,92,179,92,24,94,26,94,22,94,21,94,27,94,17,94,120,94,154,94,151,94,156,94,149,94,150,94,246,94,38,95,39,95,41,95,128,95,129,95,127,95,124,95,221,95,224,95,253,95,245,95,255,95,15,96,20,96,47,96,53,96,22,96,42,96,21,96,33,96,39,96,41,96,43,96,27,96,22,98,21,98,63,98,62,98,64,98,127,98,201,98,204,98,196,98,191,98,194,98,185,98,210,98,219,98,171,98,211,98,212,98,203,98,200,98,168,98,189,98,188,98,208,98,217,98,199,98,205,98,181,98,218,98,177,98,216,98,214,98,215,98,198,98,172,98,206,98,62,101,167,101,188,101,250,101,20,102,19,102,12,102,6,102,2,102,14,102,0,102,15,102,21,102,10,102,7,102,13,103,11,103,109,103,139,103,149,103,113,103,156,103,115,103,119,103,135,103,157,103,151,103,111,103,112,103,127,103,137,103,126,103,144,103,117,103,154,103,147,103,124,103,106,103,114,103,35,107,102,107,103,107,127,107,19,108,27,108,227,108,232,108,243,108,177,108,204,108,229,108,179,108,189,108,190,108,188,108,226,108,171,108,213,108,211,108,184,108,196,108,185,108,193,108,174,108,215,108,197,108,241,108,191,108,187,108,225,108,219,108,202,108,172,108,239,108,220,108,214,108,224,108,149,112,142,112,146,112,138,112,153,112,44,114,45,114,56,114,72,114,103,114,105,114,192,114,206,114,217,114,215,114,208,114,169,115,168,115,159,115,171,115,165,115,61,117,157,117,153,117,154,117,132,118,194,118,242,118,244,118,229,119,253,119,62,121,64,121,65,121,201,121,200,121,122,122,121,122,250,122,254,124,84,127,140,127,139,127,5,128,186,128,165,128,162,128,177,128,161,128,171,128,169,128,180,128,170,128,175,128,229,129,254,129,13,130,179,130,157,130,153,130,173,130,189,130,159,130,185,130,177,130,172,130,165,130,175,130,184,130,163,130,176,130,190,130,183,130,78,134,113,134,29,82,104,136,203,142,206,143,212,143,209,143,181,144,184,144,177,144,182,144,199,145,209,145,119,149,128,149,28,150,64,150,63,150,59,150,68,150,66,150,185,150,232,150,82,151,94,151,159,78,173,78,174,78,225,79,181,79,175,79,191,79,224,79,209,79,207,79,221,79,195,79,182,79,216,79,223,79,202,79,215,79,174,79,208,79,196,79,194,79,218,79,206,79,222,79,183,79,87,81,146,81,145,81,160,81,78,82,67,82,74,82,77,82,76,82,75,82,71,82,199,82,201,82,195,82,193,82,13,83,87,83,123,83,154,83,219,83,172,84,192,84,168,84,206,84,201,84,184,84,166,84,179,84,199,84,194,84,189,84,170,84,193,84,196,84,200,84,175,84,171,84,177,84,187,84,169,84,167,84,191,84,255,86,130,87,139,87,160,87,163,87,162,87,206,87,174,87,147,87,85,89,81,89,79,89,78,89,80,89,220,89,216,89,255,89,227,89,232,89,3,90,229,89,234,89,218,89,230,89,1,90,251,89,105,91,163,91,166,91,164,91,162,91,165,91,1,92,78,92,79,92,77,92,75,92,217,92,210,92,247,93,29,94,37,94,31,94,125,94,160,94,166,94,250,94,8,95,45,95,101,95,136,95,133,95,138,95,139,95,135,95,140,95,137,95,18,96,29,96,32,96,37,96,14,96,40,96,77,96,112,96,104,96,98,96,70,96,67,96,108,96,107,96,106,96,100,96,65,98,220,98,22,99,9,99,252,98,237,98,1,99,238,98,253,98,7,99,241,98,247,98,239,98,236,98,254,98,244,98,17,99,2,99,63,101,69,101,171,101,189,101,226,101,37,102,45,102,32,102,39,102,47,102,31,102,40,102,49,102,36,102,247,102,255,103,211,103,241,103,212,103,208,103,236,103,182,103,175,103,245,103,233,103,239,103,196,103,209,103,180,103,218,103,229,103,184,103,207,103,222,103,243,103,176,103,217,103,226,103,221,103,210,103,106,107,131,107,134,107,181,107,210,107,215,107,31,108,201,108,11,109,50,109,42,109,65,109,37,109,12,109,49,109,30,109,23,109,59,109,61,109,62,109,54,109,27,109,245,108,57,109,39,109,56,109,41,109,46,109,53,109,14,109,43,109,171,112,186,112,179,112,172,112,175,112,173,112,184,112,174,112,164,112,48,114,114,114,111,114,116,114,233,114,224,114,225,114,183,115,202,115,187,115,178,115,205,115,192,115,179,115,26,117,45,117,79,117,76,117,78,117,75,117,171,117,164,117,165,117,162,117,163,117,120,118,134,118,135,118,136,118,200,118,198,118,195,118,197,118,1,119,249,118,248,118,9,119,11,119,254,118,252,118,7,119,220,119,2,120,20,120,12,120,13,120,70,121,73,121,72,121,71,121,185,121,186,121,209,121,210,121,203,121,127,122,129,122,255,122,253,122,125,124,2,125,5,125,0,125,9,125,7,125,4,125,6,125,56,127,142,127,191,127,4,128,16,128,13,128,17,128,54,128,214,128,229,128,218,128,195,128,196,128,204,128,225,128,219,128,206,128,222,128,228,128,221,128,244,129,34,130,231,130,3,131,5,131,227,130,219,130,230,130,4,131,229,130,2,131,9,131,210,130,215,130,241,130,1,131,220,130,212,130,209,130,222,130,211,130,223,130,239,130,6,131,80,134,121,134,123,134,122,134,77,136,107,136,129,137,212,137,8,138,2,138,3,138,158,140,160,140,116,141,115,141,180,141,205,142,204,142,240,143,230,143,226,143,234,143,229,143,237,143,235,143,228,143,232,143,202,144,206,144,193,144,195,144,75,145,74,145,205,145,130,149,80,150,75,150,76,150,77,150,98,151,105,151,203,151,237,151,243,151,1,152,168,152,219,152,223,152,150,153,153,153,88,78,179,78,12,80,13,80,35,80,239,79,38,80,37,80,248,79,41,80,22,80,6,80,60,80,31,80,26,80,18,80,17,80,250,79,0,80,20,80,40,80,241,79,33,80,11,80,25,80,24,80,243,79,238,79,45,80,42,80,254,79,43,80,9,80,124,81,164,81,165,81,162,81,205,81,204,81,198,81,203,81,86,82,92,82,84,82,91,82,93,82,42,83,127,83,159,83,157,83,223,83,232,84,16,85,1,85,55,85,252,84,229,84,242,84,6,85,250,84,20,85,233,84,237,84,225,84,9,85,238,84,234,84,230,84,39,85,7,85,253,84,15,85,3,87,4,87,194,87,212,87,203,87,195,87,9,88,15,89,87,89,88,89,90,89,17,90,24,90,28,90,31,90,27,90,19,90,236,89,32,90,35,90,41,90,37,90,12,90,9,90,107,91,88,92,176,91,179,91,182,91,180,91,174,91,181,91,185,91,184,91,4,92,81,92,85,92,80,92,237,92,253,92,251,92,234,92,232,92,240,92,246,92,1,93,244,92,238,93,45,94,43,94,171,94,173,94,167,94,49,95,146,95,145,95,144,95,89,96,99,96,101,96,80,96,85,96,109,96,105,96,111,96,132,96,159,96,154,96,141,96,148,96,140,96,133,96,150,96,71,98,243,98,8,99,255,98,78,99,62,99,47,99,85,99,66,99,70,99,79,99,73,99,58,99,80,99,61,99,42,99,43,99,40,99,77,99,76,99,72,101,73,101,153,101,193,101,197,101,66,102,73,102,79,102,67,102,82,102,76,102,69,102,65,102,248,102,20,103,21,103,23,103,33,104,56,104,72,104,70,104,83,104,57,104,66,104,84,104,41,104,179,104,23,104,76,104,81,104,61,104,244,103,80,104,64,104,60,104,67,104,42,104,69,104,19,104,24,104,65,104,138,107,137,107,183,107,35,108,39,108,40,108,38,108,36,108,240,108,106,109,149,109,136,109,135,109,102,109,120,109,119,109,89,109,147,109,108,109,137,109,110,109,90,109,116,109,105,109,140,109,138,109,121,109,133,109,101,109,148,109,202,112,216,112,228,112,217,112,200,112,207,112,57,114,121,114,252,114,249,114,253,114,248,114,247,114,134,115,237,115,9,116,238,115,224,115,234,115,222,115,84,117,93,117,92,117,90,117,89,117,190,117,197,117,199,117,178,117,179,117,189,117,188,117,185,117,194,117,184,117,139,118,176,118,202,118,205,118,206,118,41,119,31,119,32,119,40,119,233,119,48,120,39,120,56,120,29,120,52,120,55,120,37,120,45,120,32,120,31,120,50,120,85,121,80,121,96,121,95,121,86,121,94,121,93,121,87,121,90,121,228,121,227,121,231,121,223,121,230,121,233,121,216,121,132,122,136,122,217,122,6,123,17,123,137,124,33,125,23,125,11,125,10,125,32,125,34,125,20,125,16,125,21,125,26,125,28,125,13,125,25,125,27,125,58,127,95,127,148,127,197,127,193,127,6,128,24,128,21,128,25,128,23,128,61,128,63,128,241,128,2,129,240,128,5,129,237,128,244,128,6,129,248,128,243,128,8,129,253,128,10,129,252,128,239,128,237,129,236,129,0,130,16,130,42,130,43,130,40,130,44,130,187,130,43,131,82,131,84,131,74,131,56,131,80,131,73,131,53,131,52,131,79,131,50,131,57,131,54,131,23,131,64,131,49,131,40,131,67,131,84,134,138,134,170,134,147,134,164,134,169,134,140,134,163,134,156,134,112,136,119,136,129,136,130,136,125,136,121,136,24,138,16,138,14,138,12,138,21,138,10,138,23,138,19,138,22,138,15,138,17,138,72,140,122,140,121,140,161,140,162,140,119,141,172,142,210,142,212,142,207,142,177,143,1,144,6,144,247,143,0,144,250,143,244,143,3,144,253,143,5,144,248,143,149,144,225,144,221,144,226,144,82,145,77,145,76,145,216,145,221,145,215,145,220,145,217,145,131,149,98,150,99,150,97,150,91,150,93,150,100,150,88,150,94,150,187,150,226,152,172,153,168,154,216,154,37,155,50,155,60,155,126,78,122,80,125,80,92,80,71,80,67,80,76,80,90,80,73,80,101,80,118,80,78,80,85,80,117,80,116,80,119,80,79,80,15,80,111,80,109,80,92,81,149,81,240,81,106,82,111,82,210,82,217,82,216,82,213,82,16,83,15,83,25,83,63,83,64,83,62,83,195,83,252,102,70,85,106,85,102,85,68,85,94,85,97,85,67,85,74,85,49,85,86,85,79,85,85,85,47,85,100,85,56,85,46,85,92,85,44,85,99,85,51,85,65,85,87,85,8,87,11,87,9,87,223,87,5,88,10,88,6,88,224,87,228,87,250,87,2,88,53,88,247,87,249,87,32,89,98,89,54,90,65,90,73,90,102,90,106,90,64,90,60,90,98,90,90,90,70,90,74,90,112,91,199,91,197,91,196,91,194,91,191,91,198,91,9,92,8,92,7,92,96,92,92,92,93,92,7,93,6,93,14,93,27,93,22,93,34,93,17,93,41,93,20,93,25,93,36,93,39,93,23,93,226,93,56,94,54,94,51,94,55,94,183,94,184,94,182,94,181,94,190,94,53,95,55,95,87,95,108,95,105,95,107,95,151,95,153,95,158,95,152,95,161,95,160,95,156,95,127,96,163,96,137,96,160,96,168,96,203,96,180,96,230,96,189,96,197,96,187,96,181,96,220,96,188,96,216,96,213,96,198,96,223,96,184,96,218,96,199,96,26,98,27,98,72,98,160,99,167,99,114,99,150,99,162,99,165,99,119,99,103,99,152,99,170,99,113,99,169,99,137,99,131,99,155,99,107,99,168,99,132,99,136,99,153,99,161,99,172,99,146,99,143,99,128,99,123,99,105,99,104,99,122,99,93,101,86,101,81,101,89,101,87,101,95,85,79,101,88,101,85,101,84,101,156,101,155,101,172,101,207,101,203,101,204,101,206,101,93,102,90,102,100,102,104,102,102,102,94,102,249,102,215,82,27,103,129,104,175,104,162,104,147,104,181,104,127,104,118,104,177,104,167,104,151,104,176,104,131,104,196,104,173,104,134,104,133,104,148,104,157,104,168,104,159,104,161,104,130,104,50,107,186,107,235,107,236,107,43,108,142,109,188,109,243,109,217,109,178,109,225,109,204,109,228,109,251,109,250,109,5,110,199,109,203,109,175,109,209,109,174,109,222,109,249,109,184,109,247,109,245,109,197,109,210,109,26,110,181,109,218,109,235,109,216,109,234,109,241,109,238,109,232,109,198,109,196,109,170,109,236,109,191,109,230,109,249,112,9,113,10,113,253,112,239,112,61,114,125,114,129,114,28,115,27,115,22,115,19,115,25,115,135,115,5,116,10,116,3,116,6,116,254,115,13,116,224,116,246,116,247,116,28,117,34,117,101,117,102,117,98,117,112,117,143,117,212,117,213,117,181,117,202,117,205,117,142,118,212,118,210,118,219,118,55,119,62,119,60,119,54,119,56,119,58,119,107,120,67,120,78,120,101,121,104,121,109,121,251,121,146,122,149,122,32,123,40,123,27,123,44,123,38,123,25,123,30,123,46,123,146,124,151,124,149,124,70,125,67,125,113,125,46,125,57,125,60,125,64,125,48,125,51,125,68,125,47,125,66,125,50,125,49,125,61,127,158,127,154,127,204,127,206,127,210,127,28,128,74,128,70,128,47,129,22,129,35,129,43,129,41,129,48,129,36,129,2,130,53,130,55,130,54,130,57,130,142,131,158,131,152,131,120,131,162,131,150,131,189,131,171,131,146,131,138,131,147,131,137,131,160,131,119,131,123,131,124,131,134,131,167,131,85,134,106,95,199,134,192,134,182,134,196,134,181,134,198,134,203,134,177,134,175,134,201,134,83,136,158,136,136,136,171,136,146,136,150,136,141,136,139,136,147,137,143,137,42,138,29,138,35,138,37,138,49,138,45,138,31,138,27,138,34,138,73,140,90,140,169,140,172,140,171,140,168,140,170,140,167,140,103,141,102,141,190,141,186,141,219,142,223,142,25,144,13,144,26,144,23,144,35,144,31,144,29,144,16,144,21,144,30,144,32,144,15,144,34,144,22,144,27,144,20,144,232,144,237,144,253,144,87,145,206,145,245,145,230,145,227,145,231,145,237,145,233,145,137,149,106,150,117,150,115,150,120,150,112,150,116,150,118,150,119,150,108,150,192,150,234,150,233,150,224,122,223,122,2,152,3,152,90,155,229,156,117,158,127,158,165,158,187,158,162,80,141,80,133,80,153,80,145,80,128,80,150,80,152,80,154,80,0,103,241,81,114,82,116,82,117,82,105,82,222,82,221,82,219,82,90,83,165,83,123,85,128,85,167,85,124,85,138,85,157,85,152,85,130,85,156,85,170,85,148,85,135,85,139,85,131,85,179,85,174,85,159,85,62,85,178,85,154,85,187,85,172,85,177,85,126,85,137,85,171,85,153,85,13,87,47,88,42,88,52,88,36,88,48,88,49,88,33,88,29,88,32,88,249,88,250,88,96,89,119,90,154,90,127,90,146,90,155,90,167,90,115,91,113,91,210,91,204,91,211,91,208,91,10,92,11,92,49,92,76,93,80,93,52,93,71,93,253,93,69,94,61,94,64,94,67,94,126,94,202,94,193,94,194,94,196,94,60,95,109,95,169,95,170,95,168,95,209,96,225,96,178,96,182,96,224,96,28,97,35,97,250,96,21,97,240,96,251,96,244,96,104,97,241,96,14,97,246,96,9,97,0,97,18,97,31,98,73,98,163,99,140,99,207,99,192,99,233,99,201,99,198,99,205,99,210,99,227,99,208,99,225,99,214,99,237,99,238,99,118,99,244,99,234,99,219,99,82,100,218,99,249,99,94,101,102,101,98,101,99,101,145,101,144,101,175,101,110,102,112,102,116,102,118,102,111,102,145,102,122,102,126,102,119,102,254,102,255,102,31,103,29,103,250,104,213,104,224,104,216,104,215,104,5,105,223,104,245,104,238,104,231,104,249,104,210,104,242,104,227,104,203,104,205,104,13,105,18,105,14,105,201,104,218,104,110,105,251,104,62,107,58,107,61,107,152,107,150,107,188,107,239,107,46,108,47,108,44,108,47,110,56,110,84,110,33,110,50,110,103,110,74,110,32,110,37,110,35,110,27,110,91,110,88,110,36,110,86,110,110,110,45,110,38,110,111,110,52,110,77,110,58,110,44,110,67,110,29,110,62,110,203,110,137,110,25,110,78,110,99,110,68,110,114,110,105,110,95,110,25,113,26,113,38,113,48,113,33,113,54,113,110,113,28,113,76,114,132,114,128,114,54,115,37,115,52,115,41,115,58,116,42,116,51,116,34,116,37,116,53,116,54,116,52,116,47,116,27,116,38,116,40,116,37,117,38,117,107,117,106,117,226,117,219,117,227,117,217,117,216,117,222,117,224,117,123,118,124,118,150,118,147,118,180,118,220,118,79,119,237,119,93,120,108,120,111,120,13,122,8,122,11,122,5,122,0,122,152,122,151,122,150,122,229,122,227,122,73,123,86,123,70,123,80,123,82,123,84,123,77,123,75,123,79,123,81,123,159,124,165,124,94,125,80,125,104,125,85,125,43,125,110,125,114,125,97,125,102,125,98,125,112,125,115,125,132,85,212,127,213,127,11,128,82,128,133,128,85,129,84,129,75,129,81,129,78,129,57,129,70,129,62,129,76,129,83,129,116,129,18,130,28,130,233,131,3,132,248,131,13,132,224,131,197,131,11,132,193,131,239,131,241,131,244,131,87,132,10,132,240,131,12,132,204,131,253,131,242,131,202,131,56,132,14,132,4,132,220,131,7,132,212,131,223,131,91,134,223,134,217,134,237,134,212,134,219,134,228,134,208,134,222,134,87,136,193,136,194,136,177,136,131,137,150,137,59,138,96,138,85,138,94,138,60,138,65,138,84,138,91,138,80,138,70,138,52,138,58,138,54,138,86,138,97,140,130,140,175,140,188,140,179,140,189,140,193,140,187,140,192,140,180,140,183,140,182,140,191,140,184,140,138,141,133,141,129,141,206,141,221,141,203,141,218,141,209,141,204,141,219,141,198,141,251,142,248,142,252,142,156,143,46,144,53,144,49,144,56,144,50,144,54,144,2,145,245,144,9,145,254,144,99,145,101,145,207,145,20,146,21,146,35,146,9,146,30,146,13,146,16,146,7,146,17,146,148,149,143,149,139,149,145,149,147,149,146,149,142,149,138,150,142,150,139,150,125,150,133,150,134,150,141,150,114,150,132,150,193,150,197,150,196,150,198,150,199,150,239,150,242,150,204,151,5,152,6,152,8,152,231,152,234,152,239,152,233,152,242,152,237,152,174,153,173,153,195,158,205,158,209,158,130,78,173,80,181,80,178,80,179,80,197,80,190,80,172,80,183,80,187,80,175,80,199,80,127,82,119,82,125,82,223,82,230,82,228,82,226,82,227,82,47,83,223,85,232,85,211,85,230,85,206,85,220,85,199,85,209,85,227,85,228,85,239,85,218,85,225,85,197,85,198,85,229,85,201,85,18,87,19,87,94,88,81,88,88,88,87,88,90,88,84,88,107,88,76,88,109,88,74,88,98,88,82,88,75,88,103,89,193,90,201,90,204,90,190,90,189,90,188,90,179,90,194,90,178,90,105,93,111,93,76,94,121,94,201,94,200,94,18,95,89,95,172,95,174,95,26,97,15,97,72,97,31,97,243,96,27,97,249,96,1,97,8,97,78,97,76,97,68,97,77,97,62,97,52,97,39,97,13,97,6,97,55,97,33,98,34,98,19,100,62,100,30,100,42,100,45,100,61,100,44,100,15,100,28,100,20,100,13,100,54,100,22,100,23,100,6,100,108,101,159,101,176,101,151,102,137,102,135,102,136,102,150,102,132,102,152,102,141,102,3,103,148,105,109,105,90,105,119,105,96,105,84,105,117,105,48,105,130,105,74,105,104,105,107,105,94,105,83,105,121,105,134,105,93,105,99,105,91,105,71,107,114,107,192,107,191,107,211,107,253,107,162,110,175,110,211,110,182,110,194,110,144,110,157,110,199,110,197,110,165,110,152,110,188,110,186,110,171,110,209,110,150,110,156,110,196,110,212,110,170,110,167,110,180,110,78,113,89,113,105,113,100,113,73,113,103,113,92,113,108,113,102,113,76,113,101,113,94,113,70,113,104,113,86,113,58,114,82,114,55,115,69,115,63,115,62,115,111,116,90,116,85,116,95,116,94,116,65,116,63,116,89,116,91,116,92,116,118,117,120,117,0,118,240,117,1,118,242,117,241,117,250,117,255,117,244,117,243,117,222,118,223,118,91,119,107,119,102,119,94,119,99,119,121,119,106,119,108,119,92,119,101,119,104,119,98,119,238,119,142,120,176,120,151,120,152,120,140,120,137,120,124,120,145,120,147,120,127,120,122,121,127,121,129,121,44,132,189,121,28,122,26,122,32,122,20,122,31,122,30,122,159,122,160,122,119,123,192,123,96,123,110,123,103,123,177,124,179,124,181,124,147,125,121,125,145,125,129,125,143,125,91,125,110,127,105,127,106,127,114,127,169,127,168,127,164,127,86,128,88,128,134,128,132,128,113,129,112,129,120,129,101,129,110,129,115,129,107,129,121,129,122,129,102,129,5,130,71,130,130,132,119,132,61,132,49,132,117,132,102,132,107,132,73,132,108,132,91,132,60,132,53,132,97,132,99,132,105,132,109,132,70,132,94,134,92,134,95,134,249,134,19,135,8,135,7,135,0,135,254,134,251,134,2,135,3,135,6,135,10,135,89,136,223,136,212,136,217,136,220,136,216,136,221,136,225,136,202,136,213,136,210,136,156,137,227,137,107,138,114,138,115,138,102,138,105,138,112,138,135,138,124,138,99,138,160,138,113,138,133,138,109,138,98,138,110,138,108,138,121,138,123,138,62,138,104,138,98,140,138,140,137,140,202,140,199,140,200,140,196,140,178,140,195,140,194,140,197,140,225,141,223,141,232,141,239,141,243,141,250,141,234,141,228,141,230,141,178,142,3,143,9,143,254,142,10,143,159,143,178,143,75,144,74,144,83,144,66,144,84,144,60,144,85,144,80,144,71,144,79,144,78,144,77,144,81,144,62,144,65,144,18,145,23,145,108,145,106,145,105,145,201,145,55,146,87,146,56,146,61,146,64,146,62,146,91,146,75,146,100,146,81,146,52,146,73,146,77,146,69,146,57,146,63,146,90,146,152,149,152,150,148,150,149,150,205,150,203,150,201,150,202,150,247,150,251,150,249,150,246,150,86,151,116,151,118,151,16,152,17,152,19,152,10,152,18,152,12,152,252,152,244,152,253,152,254,152,179,153,177,153,180,153,225,154,233,156,130,158,14,159,19,159,32,159,231,80,238,80,229,80,214,80,237,80,218,80,213,80,207,80,209,80,241,80,206,80,233,80,98,81,243,81,131,82,130,82,49,83,173,83,254,85,0,86,27,86,23,86,253,85,20,86,6,86,9,86,13,86,14,86,247,85,22,86,31,86,8,86,16,86,246,85,24,87,22,87,117,88,126,88,131,88,147,88,138,88,121,88,133,88,125,88,253,88,37,89,34,89,36,89,106,89,105,89,225,90,230,90,233,90,215,90,214,90,216,90,227,90,117,91,222,91,231,91,225,91,229,91,230,91,232,91,226,91,228,91,223,91,13,92,98,92,132,93,135,93,91,94,99,94,85,94,87,94,84,94,211,94,214,94,10,95,70,95,112,95,185,95,71,97,63,97,75,97,119,97,98,97,99,97,95,97,90,97,88,97,117,97,42,98,135,100,88,100,84,100,164,100,120,100,95,100,122,100,81,100,103,100,52,100,109,100,123,100,114,101,161,101,215,101,214,101,162,102,168,102,157,102,156,105,168,105,149,105,193,105,174,105,211,105,203,105,155,105,183,105,187,105,171,105,180,105,208,105,205,105,173,105,204,105,166,105,195,105,163,105,73,107,76,107,51,108,51,111,20,111,254,110,19,111,244,110,41,111,62,111,32,111,44,111,15,111,2,111,34,111,255,110,239,110,6,111,49,111,56,111,50,111,35,111,21,111,43,111,47,111,136,111,42,111,236,110,1,111,242,110,204,110,247,110,148,113,153,113,125,113,138,113,132,113,146,113,62,114,146,114,150,114,68,115,80,115,100,116,99,116,106,116,112,116,109,116,4,117,145,117,39,118,13,118,11,118,9,118,19,118,225,118,227,118,132,119,125,119,127,119,97,119,193,120,159,120,167,120,179,120,169,120,163,120,142,121,143,121,141,121,46,122,49,122,170,122,169,122,237,122,239,122,161,123,149,123,139,123,117,123,151,123,157,123,148,123,143,123,184,123,135,123,132,123,185,124,189,124,190,124,187,125,176,125,156,125,189,125,190,125,160,125,202,125,180,125,178,125,177,125,186,125,162,125,191,125,181,125,184,125,173,125,210,125,199,125,172,125,112,127,224,127,225,127,223,127,94,128,90,128,135,128,80,129,128,129,143,129,136,129,138,129,127,129,130,129,231,129,250,129,7,130,20,130,30,130,75,130,201,132,191,132,198,132,196,132,153,132,158,132,178,132,156,132,203,132,184,132,192,132,211,132,144,132,188,132,209,132,202,132,63,135,28,135,59,135,34,135,37,135,52,135,24,135,85,135,55,135,41,135,243,136,2,137,244,136,249,136,248,136,253,136,232,136,26,137,239,136,166,138,140,138,158,138,163,138,141,138,161,138,147,138,164,138,170,138,165,138,168,138,152,138,145,138,154,138,167,138,106,140,141,140,140,140,211,140,209,140,210,140,107,141,153,141,149,141,252,141,20,143,18,143,21,143,19,143,163,143,96,144,88,144,92,144,99,144,89,144,94,144,98,144,93,144,91,144,25,145,24,145,30,145,117,145,120,145,119,145,116,145,120,146,128,146,133,146,152,146,150,146,123,146,147,146,156,146,168,146,124,146,145,146,161,149,168,149,169,149,163,149,165,149,164,149,153,150,156,150,155,150,204,150,210,150,0,151,124,151,133,151,246,151,23,152,24,152,175,152,177,152,3,153,5,153,12,153,9,153,193,153,175,154,176,154,230,154,65,155,66,155,244,156,246,156,243,156,188,158,59,159,74,159,4,81,0,81,251,80,245,80,249,80,2,81,8,81,9,81,5,81,220,81,135,82,136,82,137,82,141,82,138,82,240,82,178,83,46,86,59,86,57,86,50,86,63,86,52,86,41,86,83,86,78,86,87,86,116,86,54,86,47,86,48,86,128,88,159,88,158,88,179,88,156,88,174,88,169,88,166,88,109,89,9,91,251,90,11,91,245,90,12,91,8,91,238,91,236,91,233,91,235,91,100,92,101,92,157,93,148,93,98,94,95,94,97,94,226,94,218,94,223,94,221,94,227,94,224,94,72,95,113,95,183,95,181,95,118,97,103,97,110,97,93,97,85,97,130,97,124,97,112,97,107,97,126,97,167,97,144,97,171,97,142,97,172,97,154,97,164,97,148,97,174,97,46,98,105,100,111,100,121,100,158,100,178,100,136,100,144,100,176,100,165,100,147,100,149,100,169,100,146,100,174,100,173,100,171,100,154,100,172,100,153,100,162,100,179,100,117,101,119,101,120,101,174,102,171,102,180,102,177,102,35,106,31,106,232,105,1,106,30,106,25,106,253,105,33,106,19,106,10,106,243,105,2,106,5,106,237,105,17,106,80,107,78,107,164,107,197,107,198,107,63,111,124,111,132,111,81,111,102,111,84,111,134,111,109,111,91,111,120,111,110,111,142,111,122,111,112,111,100,111,151,111,88,111,213,110,111,111,96,111,95,111,159,113,172,113,177,113,168,113,86,114,155,114,78,115,87,115,105,116,139,116,131,116,126,116,128,116,127,117,32,118,41,118,31,118,36,118,38,118,33,118,34,118,154,118,186,118,228,118,142,119,135,119,140,119,145,119,139,119,203,120,197,120,186,120,202,120,190,120,213,120,188,120,208,120,63,122,60,122,64,122,61,122,55,122,59,122,175,122,174,122,173,123,177,123,196,123,180,123,198,123,199,123,193,123,160,123,204,123,202,124,224,125,244,125,239,125,251,125,216,125,236,125,221,125,232,125,227,125,218,125,222,125,233,125,158,125,217,125,242,125,249,125,117,127,119,127,175,127,233,127,38,128,155,129,156,129,157,129,160,129,154,129,152,129,23,133,61,133,26,133,238,132,44,133,45,133,19,133,17,133,35,133,33,133,20,133,236,132,37,133,255,132,6,133,130,135,116,135,118,135,96,135,102,135,120,135,104,135,89,135,87,135,76,135,83,135,91,136,93,136,16,137,7,137,18,137,19,137,21,137,10,137,188,138,210,138,199,138,196,138,149,138,203,138,248,138,178,138,201,138,194,138,191,138,176,138,214,138,205,138,182,138,185,138,219,138,76,140,78,140,108,140,224,140,222,140,230,140,228,140,236,140,237,140,226,140,227,140,220,140,234,140,225,140,109,141,159,141,163,141,43,142,16,142,29,142,34,142,15,142,41,142,31,142,33,142,30,142,186,142,29,143,27,143,31,143,41,143,38,143,42,143,28,143,30,143,37,143,105,144,110,144,104,144,109,144,119,144,48,145,45,145,39,145,49,145,135,145,137,145,139,145,131,145,197,146,187,146,183,146,234,146,172,146,228,146,193,146,179,146,188,146,210,146,199,146,240,146,178,146,173,149,177,149,4,151,6,151,7,151,9,151,96,151,141,151,139,151,143,151,33,152,43,152,28,152,179,152,10,153,19,153,18,153,24,153,221,153,208,153,223,153,219,153,209,153,213,153,210,153,217,153,183,154,238,154,239,154,39,155,69,155,68,155,119,155,111,155,6,157,9,157,3,157,169,158,190,158,206,158,168,88,82,159,18,81,24,81,20,81,16,81,21,81,128,81,170,81,221,81,145,82,147,82,243,82,89,86,107,86,121,86,105,86,100,86,120,86,106,86,104,86,101,86,113,86,111,86,108,86,98,86,118,86,193,88,190,88,199,88,197,88,110,89,29,91,52,91,120,91,240,91,14,92,74,95,178,97,145,97,169,97,138,97,205,97,182,97,190,97,202,97,200,97,48,98,197,100,193,100,203,100,187,100,188,100,218,100,196,100,199,100,194,100,205,100,191,100,210,100,212,100,190,100,116,101,198,102,201,102,185,102,196,102,199,102,184,102,61,106,56,106,58,106,89,106,107,106,88,106,57,106,68,106,98,106,97,106,75,106,71,106,53,106,95,106,72,106,89,107,119,107,5,108,194,111,177,111,161,111,195,111,164,111,193,111,167,111,179,111,192,111,185,111,182,111,166,111,160,111,180,111,190,113,201,113,208,113,210,113,200,113,213,113,185,113,206,113,217,113,220,113,195,113,196,113,104,115,156,116,163,116,152,116,159,116,158,116,226,116,12,117,13,117,52,118,56,118,58,118,231,118,229,118,160,119,158,119,159,119,165,119,232,120,218,120,236,120,231,120,166,121,77,122,78,122,70,122,76,122,75,122,186,122,217,123,17,124,201,123,228,123,219,123,225,123,233,123,230,123,213,124,214,124,10,126,17,126,8,126,27,126,35,126,30,126,29,126,9,126,16,126,121,127,178,127,240,127,241,127,238,127,40,128,179,129,169,129,168,129,251,129,8,130,88,130,89,130,74,133,89,133,72,133,104,133,105,133,67,133,73,133,109,133,106,133,94,133,131,135,159,135,158,135,162,135,141,135,97,136,42,137,50,137,37,137,43,137,33,137,170,137,166,137,230,138,250,138,235,138,241,138,0,139,220,138,231,138,238,138,254,138,1,139,2,139,247,138,237,138,243,138,246,138,252,138,107,140,109,140,147,140,244,140,68,142,49,142,52,142,66,142,57,142,53,142,59,143,47,143,56,143,51,143,168,143,166,143,117,144,116,144,120,144,114,144,124,144,122,144,52,145,146,145,32,147,54,147,248,146,51,147,47,147,34,147,252,146,43,147,4,147,26,147,16,147,38,147,33,147,21,147,46,147,25,147,187,149,167,150,168,150,170,150,213,150,14,151,17,151,22,151,13,151,19,151,15,151,91,151,92,151,102,151,152,151,48,152,56,152,59,152,55,152,45,152,57,152,36,152,16,153,40,153,30,153,27,153,33,153,26,153,237,153,226,153,241,153,184,154,188,154,251,154,237,154,40,155,145,155,21,157,35,157,38,157,40,157,18,157,27,157,216,158,212,158,141,159,156,159,42,81,31,81,33,81,50,81,245,82,142,86,128,86,144,86,133,86,135,86,143,86,213,88,211,88,209,88,206,88,48,91,42,91,36,91,122,91,55,92,104,92,188,93,186,93,189,93,184,93,107,94,76,95,189,95,201,97,194,97,199,97,230,97,203,97,50,98,52,98,206,100,202,100,216,100,224,100,240,100,230,100,236,100,241,100,226,100,237,100,130,101,131,101,217,102,214,102,128,106,148,106,132,106,162,106,156,106,219,106,163,106,126,106,151,106,144,106,160,106,92,107,174,107,218,107,8,108,216,111,241,111,223,111,224,111,219,111,228,111,235,111,239,111,128,111,236,111,225,111,233,111,213,111,238,111,240,111,231,113,223,113,238,113,230,113,229,113,237,113,236,113,244,113,224,113,53,114,70,114,112,115,114,115,169,116,176,116,166,116,168,116,70,118,66,118,76,118,234,118,179,119,170,119,176,119,172,119,167,119,173,119,239,119,247,120,250,120,244,120,239,120,1,121,167,121,170,121,87,122,191,122,7,124,13,124,254,123,247,123,12,124,224,123,224,124,220,124,222,124,226,124,223,124,217,124,221,124,46,126,62,126,70,126,55,126,50,126,67,126,43,126,61,126,49,126,69,126,65,126,52,126,57,126,72,126,53,126,63,126,47,126,68,127,243,127,252,127,113,128,114,128,112,128,111,128,115,128,198,129,195,129,186,129,194,129,192,129,191,129,189,129,201,129,190,129,232,129,9,130,113,130,170,133,132,133,126,133,156,133,145,133,148,133,175,133,155,133,135,133,168,133,138,133,103,134,192,135,209,135,179,135,210,135,198,135,171,135,187,135,186,135,200,135,203,135,59,137,54,137,68,137,56,137,61,137,172,137,14,139,23,139,25,139,27,139,10,139,32,139,29,139,4,139,16,139,65,140,63,140,115,140,250,140,253,140,252,140,248,140,251,140,168,141,73,142,75,142,72,142,74,142,68,143,62,143,66,143,69,143,63,143,127,144,125,144,132,144,129,144,130,144,128,144,57,145,163,145,158,145,156,145,77,147,130,147,40,147,117,147,74,147,101,147,75,147,24,147,126,147,108,147,91,147,112,147,90,147,84,147,202,149,203,149,204,149,200,149,198,149,177,150,184,150,214,150,28,151,30,151,160,151,211,151,70,152,182,152,53,153,1,154,255,153,174,155,171,155,170,155,173,155,59,157,63,157,139,158,207,158,222,158,220,158,221,158,219,158,62,159,75,159,226,83,149,86,174,86,217,88,216,88,56,91,93,95,227,97,51,98,244,100,242,100,254,100,6,101,250,100,251,100,247,100,183,101,220,102,38,103,179,106,172,106,195,106,187,106,184,106,194,106,174,106,175,106,95,107,120,107,175,107,9,112,11,112,254,111,6,112,250,111,17,112,15,112,251,113,252,113,254,113,248,113,119,115,117,115,167,116,191,116,21,117,86,118,88,118,82,118,189,119,191,119,187,119,188,119,14,121,174,121,97,122,98,122,96,122,196,122,197,122,43,124,39,124,42,124,30,124,35,124,33,124,231,124,84,126,85,126,94,126,90,126,97,126,82,126,89,126,72,127,249,127,251,127,119,128,118,128,205,129,207,129,10,130,207,133,169,133,205,133,208,133,201,133,176,133,186,133,185,133,166,133,239,135,236,135,242,135,224,135,134,137,178,137,244,137,40,139,57,139,44,139,43,139,80,140,5,141,89,142,99,142,102,142,100,142,95,142,85,142,192,142,73,143,77,143,135,144,131,144,136,144,171,145,172,145,208,145,148,147,138,147,150,147,162,147,179,147,174,147,172,147,176,147,152,147,154,147,151,147,212,149,214,149,208,149,213,149,226,150,220,150,217,150,219,150,222,150,36,151,163,151,166,151,173,151,249,151,77,152,79,152,76,152,78,152,83,152,186,152,62,153,63,153,61,153,46,153,165,153,14,154,193,154,3,155,6,155,79,155,78,155,77,155,202,155,201,155,253,155,200,155,192,155,81,157,93,157,96,157,224,158,21,159,44,159,51,81,165,86,222,88,223,88,226,88,245,91,144,159,236,94,242,97,247,97,246,97,245,97,0,101],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+154738);allocate([15,101,224,102,221,102,229,106,221,106,218,106,211,106,27,112,31,112,40,112,26,112,29,112,21,112,24,112,6,114,13,114,88,114,162,114,120,115,122,115,189,116,202,116,227,116,135,117,134,117,95,118,97,118,199,119,25,121,177,121,107,122,105,122,62,124,63,124,56,124,61,124,55,124,64,124,107,126,109,126,121,126,105,126,106,126,133,127,115,126,182,127,185,127,184,127,216,129,233,133,221,133,234,133,213,133,228,133,229,133,247,133,251,135,5,136,13,136,249,135,254,135,96,137,95,137,86,137,94,137,65,139,92,139,88,139,73,139,90,139,78,139,79,139,70,139,89,139,8,141,10,141,124,142,114,142,135,142,118,142,108,142,122,142,116,142,84,143,78,143,173,143,138,144,139,144,177,145,174,145,225,147,209,147,223,147,195,147,200,147,220,147,221,147,214,147,226,147,205,147,216,147,228,147,215,147,232,147,220,149,180,150,227,150,42,151,39,151,97,151,220,151,251,151,94,152,88,152,91,152,188,152,69,153,73,153,22,154,25,154,13,155,232,155,231,155,214,155,219,155,137,157,97,157,114,157,106,157,108,157,146,158,151,158,147,158,180,158,248,82,168,86,183,86,182,86,180,86,188,86,228,88,64,91,67,91,125,91,246,91,201,93,248,97,250,97,24,101,20,101,25,101,230,102,39,103,236,106,62,112,48,112,50,112,16,114,123,115,207,116,98,118,101,118,38,121,42,121,44,121,43,121,199,122,246,122,76,124,67,124,77,124,239,124,240,124,174,143,125,126,124,126,130,126,76,127,0,128,218,129,102,130,251,133,249,133,17,134,250,133,6,134,11,134,7,134,10,134,20,136,21,136,100,137,186,137,248,137,112,139,108,139,102,139,111,139,95,139,107,139,15,141,13,141,137,142,129,142,133,142,130,142,180,145,203,145,24,148,3,148,253,147,225,149,48,151,196,152,82,153,81,153,168,153,43,154,48,154,55,154,53,154,19,156,13,156,121,158,181,158,232,158,47,159,95,159,99,159,97,159,55,81,56,81,193,86,192,86,194,86,20,89,108,92,205,93,252,97,254,97,29,101,28,101,149,101,233,102,251,106,4,107,250,106,178,107,76,112,27,114,167,114,214,116,212,116,105,118,211,119,80,124,143,126,140,126,188,127,23,134,45,134,26,134,35,136,34,136,33,136,31,136,106,137,108,137,189,137,116,139,119,139,125,139,19,141,138,142,141,142,139,142,95,143,175,143,186,145,46,148,51,148,53,148,58,148,56,148,50,148,43,148,226,149,56,151,57,151,50,151,255,151,103,152,101,152,87,153,69,154,67,154,64,154,62,154,207,154,84,155,81,155,45,156,37,156,175,157,180,157,194,157,184,157,157,158,239,158,25,159,92,159,102,159,103,159,60,81,59,81,200,86,202,86,201,86,127,91,212,93,210,93,78,95,255,97,36,101,10,107,97,107,81,112,88,112,128,115,228,116,138,117,110,118,108,118,179,121,96,124,95,124,126,128,125,128,223,129,114,137,111,137,252,137,128,139,22,141,23,141,145,142,147,142,97,143,72,145,68,148,81,148,82,148,61,151,62,151,195,151,193,151,107,152,85,153,85,154,77,154,210,154,26,155,73,156,49,156,62,156,59,156,211,157,215,157,52,159,108,159,106,159,148,159,204,86,214,93,0,98,35,101,43,101,42,101,236,102,16,107,218,116,202,122,100,124,99,124,101,124,147,126,150,126,148,126,226,129,56,134,63,134,49,136,138,139,144,144,143,144,99,148,96,148,100,148,104,151,111,152,92,153,90,154,91,154,87,154,211,154,212,154,209,154,84,156,87,156,86,156,229,157,159,158,244,158,209,86,233,88,44,101,94,112,113,118,114,118,215,119,80,127,136,127,54,136,57,136,98,136,147,139,146,139,150,139,119,130,27,141,192,145,106,148,66,151,72,151,68,151,198,151,112,152,95,154,34,155,88,155,95,156,249,157,250,157,124,158,125,158,7,159,119,159,114,159,243,94,22,107,99,112,108,124,110,124,59,136,192,137,161,142,193,145,114,148,112,148,113,152,94,153,214,154,35,155,204,158,100,112,218,119,154,139,119,148,201,151,98,154,101,154,156,126,156,139,170,142,197,145,125,148,126,148,124,148,119,156,120,156,247,158,84,140,127,148,26,158,40,114,106,154,49,155,27,158,30,158,114,124,96,36,97,36,98,36,99,36,100,36,101,36,102,36,103,36,104,36,105,36,116,36,117,36,118,36,119,36,120,36,121,36,122,36,123,36,124,36,125,36,112,33,113,33,114,33,115,33,116,33,117,33,118,33,119,33,120,33,121,33,54,78,63,78,133,78,160,78,130,81,150,81,171,81,249,82,56,83,105,83,182,83,10,89,128,91,219,93,122,94,127,94,244,94,80,95,97,95,52,101,224,101,146,117,118,118,181,143,182,150,168,0,198,2,253,48,254,48,157,48,158,48,0,0,0,0,5,48,6,48,7,48,252,48,59,255,61,255,61,39,65,48,66,48,67,48,68,48,69,48,70,48,71,48,72,48,73,48,74,48,75,48,76,48,77,48,78,48,79,48,80,48,81,48,82,48,83,48,84,48,85,48,86,48,87,48,88,48,89,48,90,48,91,48,92,48,93,48,94,48,95,48,96,48,97,48,98,48,99,48,100,48,101,48,102,48,103,48,104,48,105,48,106,48,107,48,108,48,109,48,110,48,111,48,112,48,113,48,114,48,115,48,116,48,117,48,118,48,119,48,120,48,121,48,122,48,123,48,124,48,125,48,126,48,127,48,128,48,129,48,130,48,131,48,132,48,133,48,134,48,135,48,136,48,137,48,138,48,139,48,140,48,141,48,142,48,143,48,144,48,145,48,146,48,147,48,161,48,162,48,163,48,164,48,165,48,166,48,167,48,168,48,169,48,170,48,171,48,172,48,173,48,174,48,175,48,176,48,177,48,178,48,179,48,180,48,181,48,182,48,183,48,184,48,185,48,186,48,187,48,188,48,189,48,190,48,191,48,192,48,193,48,194,48,195,48,196,48,197,48,198,48,199,48,200,48,201,48,202,48,203,48,204,48,205,48,206,48,207,48,208,48,209,48,210,48,211,48,212,48,213,48,214,48,215,48,216,48,217,48,218,48,219,48,220,48,221,48,222,48,223,48,224,48,225,48,226,48,227,48,228,48,229,48,230,48,231,48,232,48,233,48,234,48,235,48,236,48,237,48,238,48,239,48,240,48,241,48,242,48,243,48,244,48,245,48,246,48,16,4,17,4,18,4,19,4,20,4,21,4,1,4,22,4,23,4,24,4,25,4,26,4,27,4,28,4,29,4,30,4,31,4,32,4,33,4,34,4,35,4,36,4,37,4,38,4,39,4,40,4,41,4,42,4,43,4,44,4,45,4,46,4,47,4,48,4,49,4,50,4,51,4,52,4,53,4,81,4,54,4,55,4,56,4,57,4,58,4,59,4,60,4,61,4,62,4,63,4,64,4,65,4,66,4,67,4,68,4,69,4,70,4,71,4,72,4,73,4,74,4,75,4,76,4,77,4,78,4,79,4,231,33,184,33,185,33,207,49,204,0,90,78,138,0,2,82,145,68,176,159,136,81,177,159,7,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,255,228,255,7,255,2,255,49,50,22,33,33,33,155,48,156,48,128,46,132,46,134,46,135,46,136,46,138,46,140,46,141,46,149,46,156,46,157,46,165,46,167,46,170,46,172,46,174,46,182,46,188,46,190,46,198,46,202,46,204,46,205,46,207,46,214,46,215,46,222,46,227,46,0,0,0,0,0,0,131,2,80,2,91,2,84,2,117,2,83,1,248,0,75,1,138,2,106,2,66,78,92,78,245,81,26,83,130,83,7,78,12,78,71,78,141,78,215,86,12,250,110,92,115,95,15,78,135,81,14,78,46,78,147,78,194,78,201,78,200,78,152,81,252,82,108,83,185,83,32,87,3,89,44,89,16,92,255,93,225,101,179,107,204,107,20,108,63,114,49,78,60,78,232,78,220,78,233,78,225,78,221,78,218,78,12,82,28,83,76,83,34,87,35,87,23,89,47,89,129,91,132,91,18,92,59,92,116,92,115,92,4,94,128,94,130,94,201,95,9,98,80,98,21,108,54,108,67,108,63,108,59,108,174,114,176,114,138,115,184,121,138,128,30,150,14,79,24,79,44,79,245,78,20,79,241,78,0,79,247,78,8,79,29,79,2,79,5,79,34,79,19,79,4,79,244,78,18,79,177,81,19,82,9,82,16,82,166,82,34,83,31,83,77,83,138,83,7,84,225,86,223,86,46,87,42,87,52,87,60,89,128,89,124,89,133,89,123,89,126,89,119,89,127,89,86,91,21,92,37,92,124,92,122,92,123,92,126,92,223,93,117,94,132,94,2,95,26,95,116,95,213,95,212,95,207,95,92,98,94,98,100,98,97,98,102,98,98,98,89,98,96,98,90,98,101,98,239,101,238,101,62,103,57,103,56,103,59,103,58,103,63,103,60,103,51,103,24,108,70,108,82,108,92,108,79,108,74,108,84,108,75,108,76,108,113,112,94,114,180,114,181,114,142,115,42,117,127,118,117,122,81,127,120,130,124,130,128,130,125,130,127,130,77,134,126,137,153,144,151,144,152,144,155,144,148,144,34,150,36,150,32,150,35,150,86,79,59,79,98,79,73,79,83,79,100,79,62,79,103,79,82,79,95,79,65,79,88,79,45,79,51,79,63,79,97,79,143,81,185,81,28,82,30,82,33,82,173,82,174,82,9,83,99,83,114,83,142,83,143,83,48,84,55,84,42,84,84,84,69,84,25,84,28,84,37,84,24,84,61,84,79,84,65,84,40,84,36,84,71,84,238,86,231,86,229,86,65,87,69,87,76,87,73,87,75,87,82,87,6,89,64,89,166,89,152,89,160,89,151,89,142,89,162,89,144,89,143,89,167,89,161,89,142,91,146,91,40,92,42,92,141,92,143,92,136,92,139,92,137,92,146,92,138,92,134,92,147,92,149,92,224,93,10,94,14,94,139,94,137,94,140,94,136,94,141,94,5,95,29,95,120,95,118,95,210,95,209,95,208,95,237,95,232,95,238,95,243,95,225,95,228,95,227,95,250,95,239,95,247,95,251,95,0,96,244,95,58,98,131,98,140,98,142,98,143,98,148,98,135,98,113,98,123,98,122,98,112,98,129,98,136,98,119,98,125,98,114,98,116,98,55,101,240,101,244,101,243,101,242,101,245,101,69,103,71,103,89,103,85,103,76,103,72,103,93,103,77,103,90,103,75,103,208,107,25,108,26,108,120,108,103,108,107,108,132,108,139,108,143,108,113,108,111,108,105,108,154,108,109,108,135,108,149,108,156,108,102,108,115,108,101,108,123,108,142,108,116,112,122,112,99,114,191,114,189,114,195,114,198,114,193,114,186,114,197,114,149,115,151,115,147,115,148,115,146,115,58,117,57,117,148,117,149,117,129,118,61,121,52,128,149,128,153,128,144,128,146,128,156,128,144,130,143,130,133,130,142,130,145,130,147,130,138,130,131,130,132,130,120,140,201,143,191,143,159,144,161,144,165,144,158,144,167,144,160,144,48,150,40,150,47,150,45,150,51,78,152,79,124,79,133,79,125,79,128,79,135,79,118,79,116,79,137,79,132,79,119,79,76,79,151,79,106,79,154,79,121,79,129,79,120,79,144,79,156,79,148,79,158,79,146,79,130,79,149,79,107,79,110,79,158,81,188,81,190,81,53,82,50,82,51,82,70,82,49,82,188,82,10,83,11,83,60,83,146,83,148,83,135,84,127,84,129,84,145,84,130,84,136,84,107,84,122,84,126,84,101,84,108,84,116,84,102,84,141,84,111,84,97,84,96,84,152,84,99,84,103,84,100,84,247,86,249,86,111,87,114,87,109,87,107,87,113,87,112,87,118,87,128,87,117,87,123,87,115,87,116,87,98,87,104,87,125,87,12,89,69,89,181,89,186,89,207,89,206,89,178,89,204,89,193,89,182,89,188,89,195,89,214,89,177,89,189,89,192,89,200,89,180,89,199,89,98,91,101,91,147,91,149,91,68,92,71,92,174,92,164,92,160,92,181,92,175,92,168,92,172,92,159,92,163,92,173,92,162,92,170,92,167,92,157,92,165,92,182,92,176,92,166,92,23,94,20,94,25,94,40,95,34,95,35,95,36,95,84,95,130,95,126,95,125,95,222,95,229,95,45,96,38,96,25,96,50,96,11,96,52,96,10,96,23,96,51,96,26,96,30,96,44,96,34,96,13,96,16,96,46,96,19,96,17,96,12,96,9,96,28,96,20,98,61,98,173,98,180,98,209,98,190,98,170,98,182,98,202,98,174,98,179,98,175,98,187,98,169,98,176,98,184,98,61,101,168,101,187,101,9,102,252,101,4,102,18,102,8,102,251,101,3,102,11,102,13,102,5,102,253,101,17,102,16,102,246,102,10,103,133,103,108,103,142,103,146,103,118,103,123,103,152,103,134,103,132,103,116,103,141,103,140,103,122,103,159,103,145,103,153,103,131,103,125,103,129,103,120,103,121,103,148,103,37,107,128,107,126,107,222,107,29,108,147,108,236,108,235,108,238,108,217,108,182,108,212,108,173,108,231,108,183,108,208,108,194,108,186,108,195,108,198,108,237,108,242,108,210,108,221,108,180,108,138,108,157,108,128,108,222,108,192,108,48,109,205,108,199,108,176,108,249,108,207,108,233,108,209,108,148,112,152,112,133,112,147,112,134,112,132,112,145,112,150,112,130,112,154,112,131,112,106,114,214,114,203,114,216,114,201,114,220,114,210,114,212,114,218,114,204,114,209,114,164,115,161,115,173,115,166,115,162,115,160,115,172,115,157,115,221,116,232,116,63,117,64,117,62,117,140,117,152,117,175,118,243,118,241,118,240,118,245,118,248,119,252,119,249,119,251,119,250,119,247,119,66,121,63,121,197,121,120,122,123,122,251,122,117,124,253,124,53,128,143,128,174,128,163,128,184,128,181,128,173,128,32,130,160,130,192,130,171,130,154,130,152,130,155,130,181,130,167,130,174,130,188,130,158,130,186,130,180,130,168,130,161,130,169,130,194,130,164,130,195,130,182,130,162,130,112,134,111,134,109,134,110,134,86,140,210,143,203,143,211,143,205,143,214,143,213,143,215,143,178,144,180,144,175,144,179,144,176,144,57,150,61,150,60,150,58,150,67,150,205,79,197,79,211,79,178,79,201,79,203,79,193,79,212,79,220,79,217,79,187,79,179,79,219,79,199,79,214,79,186,79,192,79,185,79,236,79,68,82,73,82,192,82,194,82,61,83,124,83,151,83,150,83,153,83,152,83,186,84,161,84,173,84,165,84,207,84,195,84,13,131,183,84,174,84,214,84,182,84,197,84,198,84,160,84,112,84,188,84,162,84,190,84,114,84,222,84,176,84,181,87,158,87,159,87,164,87,140,87,151,87,157,87,155,87,148,87,152,87,143,87,153,87,165,87,154,87,149,87,244,88,13,89,83,89,225,89,222,89,238,89,0,90,241,89,221,89,250,89,253,89,252,89,246,89,228,89,242,89,247,89,219,89,233,89,243,89,245,89,224,89,254,89,244,89,237,89,168,91,76,92,208,92,216,92,204,92,215,92,203,92,219,92,222,92,218,92,201,92,199,92,202,92,214,92,211,92,212,92,207,92,200,92,198,92,206,92,223,92,248,92,249,93,33,94,34,94,35,94,32,94,36,94,176,94,164,94,162,94,155,94,163,94,165,94,7,95,46,95,86,95,134,95,55,96,57,96,84,96,114,96,94,96,69,96,83,96,71,96,73,96,91,96,76,96,64,96,66,96,95,96,36,96,68,96,88,96,102,96,110,96,66,98,67,98,207,98,13,99,11,99,245,98,14,99,3,99,235,98,249,98,15,99,12,99,248,98,246,98,0,99,19,99,20,99,250,98,21,99,251,98,240,98,65,101,67,101,170,101,191,101,54,102,33,102,50,102,53,102,28,102,38,102,34,102,51,102,43,102,58,102,29,102,52,102,57,102,46,102,15,103,16,103,193,103,242,103,200,103,186,103,220,103,187,103,248,103,216,103,192,103,183,103,197,103,235,103,228,103,223,103,181,103,205,103,179,103,247,103,246,103,238,103,227,103,194,103,185,103,206,103,231,103,240,103,178,103,252,103,198,103,237,103,204,103,174,103,230,103,219,103,250,103,201,103,202,103,195,103,234,103,203,103,40,107,130,107,132,107,182,107,214,107,216,107,224,107,32,108,33,108,40,109,52,109,45,109,31,109,60,109,63,109,18,109,10,109,218,108,51,109,4,109,25,109,58,109,26,109,17,109,0,109,29,109,66,109,1,109,24,109,55,109,3,109,15,109,64,109,7,109,32,109,44,109,8,109,34,109,9,109,16,109,183,112,159,112,190,112,177,112,176,112,161,112,180,112,181,112,169,112,65,114,73,114,74,114,108,114,112,114,115,114,110,114,202,114,228,114,232,114,235,114,223,114,234,114,230,114,227,114,133,115,204,115,194,115,200,115,197,115,185,115,182,115,181,115,180,115,235,115,191,115,199,115,190,115,195,115,198,115,184,115,203,115,236,116,238,116,46,117,71,117,72,117,167,117,170,117,121,118,196,118,8,119,3,119,4,119,5,119,10,119,247,118,251,118,250,118,231,119,232,119,6,120,17,120,18,120,5,120,16,120,15,120,14,120,9,120,3,120,19,120,74,121,76,121,75,121,69,121,68,121,213,121,205,121,207,121,214,121,206,121,128,122,126,122,209,122,0,123,1,123,122,124,120,124,121,124,127,124,128,124,129,124,3,125,8,125,1,125,88,127,145,127,141,127,190,127,7,128,14,128,15,128,20,128,55,128,216,128,199,128,224,128,209,128,200,128,194,128,208,128,197,128,227,128,217,128,220,128,202,128,213,128,201,128,207,128,215,128,230,128,205,128,255,129,33,130,148,130,217,130,254,130,249,130,7,131,232,130,0,131,213,130,58,131,235,130,214,130,244,130,236,130,225,130,242,130,245,130,12,131,251,130,246,130,240,130,234,130,228,130,224,130,250,130,243,130,237,130,119,134,116,134,124,134,115,134,65,136,78,136,103,136,106,136,105,136,211,137,4,138,7,138,114,141,227,143,225,143,238,143,224,143,241,144,189,144,191,144,213,144,197,144,190,144,199,144,203,144,200,144,212,145,211,145,84,150,79,150,81,150,83,150,74,150,78,150,30,80,5,80,7,80,19,80,34,80,48,80,27,80,245,79,244,79,51,80,55,80,44,80,246,79,247,79,23,80,28,80,32,80,39,80,53,80,47,80,49,80,14,80,90,81,148,81,147,81,202,81,196,81,197,81,200,81,206,81,97,82,90,82,82,82,94,82,95,82,85,82,98,82,205,82,14,83,158,83,38,85,226,84,23,85,18,85,231,84,243,84,228,84,26,85,255,84,4,85,8,85,235,84,17,85,5,85,241,84,10,85,251,84,247,84,248,84,224,84,14,85,3,85,11,85,1,87,2,87,204,87,50,88,213,87,210,87,186,87,198,87,189,87,188,87,184,87,182,87,191,87,199,87,208,87,185,87,193,87,14,89,74,89,25,90,22,90,45,90,46,90,21,90,15,90,23,90,10,90,30,90,51,90,108,91,167,91,173,91,172,91,3,92,86,92,84,92,236,92,255,92,238,92,241,92,247,92,0,93,249,92,41,94,40,94,168,94,174,94,170,94,172,94,51,95,48,95,103,95,93,96,90,96,103,96,65,96,162,96,136,96,128,96,146,96,129,96,157,96,131,96,149,96,155,96,151,96,135,96,156,96,142,96,25,98,70,98,242,98,16,99,86,99,44,99,68,99,69,99,54,99,67,99,228,99,57,99,75,99,74,99,60,99,41,99,65,99,52,99,88,99,84,99,89,99,45,99,71,99,51,99,90,99,81,99,56,99,87,99,64,99,72,99,74,101,70,101,198,101,195,101,196,101,194,101,74,102,95,102,71,102,81,102,18,103,19,103,31,104,26,104,73,104,50,104,51,104,59,104,75,104,79,104,22,104,49,104,28,104,53,104,43,104,45,104,47,104,78,104,68,104,52,104,29,104,18,104,20,104,38,104,40,104,46,104,77,104,58,104,37,104,32,104,44,107,47,107,45,107,49,107,52,107,109,107,130,128,136,107,230,107,228,107,232,107,227,107,226,107,231,107,37,108,122,109,99,109,100,109,118,109,13,109,97,109,146,109,88,109,98,109,109,109,111,109,145,109,141,109,239,109,127,109,134,109,94,109,103,109,96,109,151,109,112,109,124,109,95,109,130,109,152,109,47,109,104,109,139,109,126,109,128,109,132,109,22,109,131,109,123,109,125,109,117,109,144,109,220,112,211,112,209,112,221,112,203,112,57,127,226,112,215,112,210,112,222,112,224,112,212,112,205,112,197,112,198,112,199,112,218,112,206,112,225,112,66,114,120,114,119,114,118,114,0,115,250,114,244,114,254,114,246,114,243,114,251,114,1,115,211,115,217,115,229,115,214,115,188,115,231,115,227,115,233,115,220,115,210,115,219,115,212,115,221,115,218,115,215,115,216,115,232,115,222,116,223,116,244,116,245,116,33,117,91,117,95,117,176,117,193,117,187,117,196,117,192,117,191,117,182,117,186,117,138,118,201,118,29,119,27,119,16,119,19,119,18,119,35,119,17,119,21,119,25,119,26,119,34,119,39,119,35,120,44,120,34,120,53,120,47,120,40,120,46,120,43,120,33,120,41,120,51,120,42,120,49,120,84,121,91,121,79,121,92,121,83,121,82,121,81,121,235,121,236,121,224,121,238,121,237,121,234,121,220,121,222,121,221,121,134,122,137,122,133,122,139,122,140,122,138,122,135,122,216,122,16,123,4,123,19,123,5,123,15,123,8,123,10,123,14,123,9,123,18,123,132,124,145,124,138,124,140,124,136,124,141,124,133,124,30,125,29,125,17,125,14,125,24,125,22,125,19,125,31,125,18,125,15,125,12,125,92,127,97,127,94,127,96,127,93,127,91,127,150,127,146,127,195,127,194,127,192,127,22,128,62,128,57,128,250,128,242,128,249,128,245,128,1,129,251,128,0,129,1,130,47,130,37,130,51,131,45,131,68,131,25,131,81,131,37,131,86,131,63,131,65,131,38,131,28,131,34,131,66,131,78,131,27,131,42,131,8,131,60,131,77,131,22,131,36,131,32,131,55,131,47,131,41,131,71,131,69,131,76,131,83,131,30,131,44,131,75,131,39,131,72,131,83,134,82,134,162,134,168,134,150,134,141,134,145,134,158,134,135,134,151,134,134,134,139,134,154,134,133,134,165,134,153,134,161,134,167,134,149,134,152,134,142,134,157,134,144,134,148,134,67,136,68,136,109,136,117,136,118,136,114,136,128,136,113,136,127,136,111,136,131,136,126,136,116,136,124,136,18,138,71,140,87,140,123,140,164,140,163,140,118,141,120,141,181,141,183,141,182,141,209,142,211,142,254,143,245,143,2,144,255,143,251,143,4,144,252,143,246,143,214,144,224,144,217,144,218,144,227,144,223,144,229,144,216,144,219,144,215,144,220,144,228,144,80,145,78,145,79,145,213,145,226,145,218,145,92,150,95,150,188,150,227,152,223,154,47,155,127,78,112,80,106,80,97,80,94,80,96,80,83,80,75,80,93,80,114,80,72,80,77,80,65,80,91,80,74,80,98,80,21,80,69,80,95,80,105,80,107,80,99,80,100,80,70,80,64,80,110,80,115,80,87,80,81,80,208,81,107,82,109,82,108,82,110,82,214,82,211,82,45,83,156,83,117,85,118,85,60,85,77,85,80,85,52,85,42,85,81,85,98,85,54,85,53,85,48,85,82,85,69,85,12,85,50,85,101,85,78,85,57,85,72,85,45,85,59,85,64,85,75,85,10,87,7,87,251,87,20,88,226,87,246,87,220,87,244,87,0,88,237,87,253,87,8,88,248,87,11,88,243,87,207,87,7,88,238,87,227,87,242,87,229,87,236,87,225,87,14,88,252,87,16,88,231,87,1,88,12,88,241,87,233,87,240,87,13,88,4,88,92,89,96,90,88,90,85,90,103,90,94,90,56,90,53,90,109,90,80,90,95,90,101,90,108,90,83,90,100,90,87,90,67,90,93,90,82,90,68,90,91,90,72,90,142,90,62,90,77,90,57,90,76,90,112,90,105,90,71,90,81,90,86,90,66,90,92,90,114,91,110,91,193,91,192,91,89,92,30,93,11,93,29,93,26,93,32,93,12,93,40,93,13,93,38,93,37,93,15,93,48,93,18,93,35,93,31,93,46,93,62,94,52,94,177,94,180,94,185,94,178,94,179,94,54,95,56,95,155,95,150,95,159,95,138,96,144,96,134,96,190,96,176,96,186,96,211,96,212,96,207,96,228,96,217,96,221,96,200,96,177,96,219,96,183,96,202,96,191,96,195,96,205,96,192,96,50,99,101,99,138,99,130,99,125,99,189,99,158,99,173,99,157,99,151,99,171,99,142,99,111,99,135,99,144,99,110,99,175,99,117,99,156,99,109,99,174,99,124,99,164,99,59,99,159,99,120,99,133,99,129,99,145,99,141,99,112,99,83,101,205,101,101,102,97,102,91,102,89,102,92,102,98,102,24,103,121,104,135,104,144,104,156,104,109,104,110,104,174,104,171,104,86,105,111,104,163,104,172,104,169,104,117,104,116,104,178,104,143,104,119,104,146,104,124,104,107,104,114,104,170,104,128,104,113,104,126,104,155,104,150,104,139,104,160,104,137,104,164,104,120,104,123,104,145,104,140,104,138,104,125,104,54,107,51,107,55,107,56,107,145,107,143,107,141,107,142,107,140,107,42,108,192,109,171,109,180,109,179,109,116,110,172,109,233,109,226,109,183,109,246,109,212,109,0,110,200,109,224,109,223,109,214,109,190,109,229,109,220,109,221,109,219,109,244,109,202,109,189,109,237,109,240,109,186,109,213,109,194,109,207,109,201,109,208,109,242,109,211,109,253,109,215,109,205,109,227,109,187,109,250,112,13,113,247,112,23,113,244,112,12,113,240,112,4,113,243,112,16,113,252,112,255,112,6,113,19,113,0,113,248,112,246,112,11,113,2,113,14,113,126,114,123,114,124,114,127,114,29,115,23,115,7,115,17,115,24,115,10,115,8,115,255,114,15,115,30,115,136,115,246,115,248,115,245,115,4,116,1,116,253,115,7,116,0,116,250,115,252,115,255,115,12,116,11,116,244,115,8,116,100,117,99,117,206,117,210,117,207,117,203,117,204,117,209,117,208,117,143,118,137,118,211,118,57,119,47,119,45,119,49,119,50,119,52,119,51,119,61,119,37,119,59,119,53,119,72,120,82,120,73,120,77,120,74,120,76,120,38,120,69,120,80,120,100,121,103,121,105,121,106,121,99,121,107,121,97,121,187,121,250,121,248,121,246,121,247,121,143,122,148,122,144,122,53,123,71,123,52,123,37,123,48,123,34,123,36,123,51,123,24,123,42,123,29,123,49,123,43,123,45,123,47,123,50,123,56,123,26,123,35,123,148,124,152,124,150,124,163,124,53,125,61,125,56,125,54,125,58,125,69,125,44,125,41,125,65,125,71,125,62,125,63,125,74,125,59,125,40,125,99,127,149,127,156,127,157,127,155,127,202,127,203,127,205,127,208,127,209,127,199,127,207,127,201,127,31,128,30,128,27,128,71,128,67,128,72,128,24,129,37,129,25,129,27,129,45,129,31,129,44,129,30,129,33,129,21,129,39,129,29,129,34,129,17,130,56,130,51,130,58,130,52,130,50,130,116,130,144,131,163,131,168,131,141,131,122,131,115,131,164,131,116,131,143,131,129,131,149,131,153,131,117,131,148,131,169,131,125,131,131,131,140,131,157,131,155,131,170,131,139,131,126,131,165,131,175,131,136,131,151,131,176,131,127,131,166,131,135,131,174,131,118,131,154,131,89,134,86,134,191,134,183,134,194,134,193,134,197,134,186,134,176,134,200,134,185,134,179,134,184,134,204,134,180,134,187,134,188,134,195,134,189,134,190,134,82,136,137,136,149,136,168,136,162,136,170,136,154,136,145,136,161,136,159,136,152,136,167,136,153,136,155,136,151,136,164,136,172,136,140,136,147,136,142,136,130,137,214,137,217,137,213,137,48,138,39,138,44,138,30,138,57,140,59,140,92,140,93,140,125,140,165,140,125,141,123,141,121,141,188,141,194,141,185,141,191,141,193,141,216,142,222,142,221,142,220,142,215,142,224,142,225,142,36,144,11,144,17,144,28,144,12,144,33,144,239,144,234,144,240,144,244,144,242,144,243,144,212,144,235,144,236,144,233,144,86,145,88,145,90,145,83,145,85,145,236,145,244,145,241,145,243,145,248,145,228,145,249,145,234,145,235,145,247,145,232,145,238,145,122,149,134,149,136,149,124,150,109,150,107,150,113,150,111,150,191,150,106,151,4,152,229,152,151,153,155,80,149,80,148,80,158,80,139,80,163,80,131,80,140,80,142,80,157,80,104,80,156,80,146,80,130,80,135,80,95,81,212,81,18,83,17,83,164,83,167,83,145,85,168,85,165,85,173,85,119,85,69,86,162,85,147,85,136,85,143,85,181,85,129,85,163,85,146,85,164,85,125,85,140,85,166,85,127,85,149,85,161,85,142,85,12,87,41,88,55,88,25,88,30,88,39,88,35,88,40,88,245,87,72,88,37,88,28,88,27,88,51,88,63,88,54,88,46,88,57,88,56,88,45,88,44,88,59,88,97,89,175,90,148,90,159,90,122,90,162,90,158,90,120,90,166,90,124,90,165,90,172,90,149,90,174,90,55,90,132,90,138,90,151,90,131,90,139,90,169,90,123,90,125,90,140,90,156,90,143,90,147,90,157,90,234,91,205,91,203,91,212,91,209,91,202,91,206,91,12,92,48,92,55,93,67,93,107,93,65,93,75,93,63,93,53,93,81,93,78,93,85,93,51,93,58,93,82,93,61,93,49,93,89,93,66,93,57,93,73,93,56,93,60,93,50,93,54,93,64,93,69,93,68,94,65,94,88,95,166,95,165,95,171,95,201,96,185,96,204,96,226,96,206,96,196,96,20,97,242,96,10,97,22,97,5,97,245,96,19,97,248,96,252,96,254,96,193,96,3,97,24,97,29,97,16,97,255,96,4,97,11,97,74,98,148,99,177,99,176,99,206,99,229,99,232,99,239,99,195,99,157,100,243,99,202,99,224,99,246,99,213,99,242,99,245,99,97,100,223,99,190,99,221,99,220,99,196,99,216,99,211,99,194,99,199,99,204,99,203,99,200,99,240,99,215,99,217,99,50,101,103,101,106,101,100,101,92,101,104,101,101,101,140,101,157,101,158,101,174,101,208,101,210,101,124,102,108,102,123,102,128,102,113,102,121,102,106,102,114,102,1,103,12,105,211,104,4,105,220,104,42,105,236,104,234,104,241,104,15,105,214,104,247,104,235,104,228,104,246,104,19,105,16,105,243,104,225,104,7,105,204,104,8,105,112,105,180,104,17,105,239,104,198,104,20,105,248,104,208,104,253,104,252,104,232,104,11,105,10,105,23,105,206,104,200,104,221,104,222,104,230,104,244,104,209,104,6,105,212,104,233,104,21,105,37,105,199,104,57,107,59,107,63,107,60,107,148,107,151,107,153,107,149,107,189,107,240,107,242,107,243,107,48,108,252,109,70,110,71,110,31,110,73,110,136,110,60,110,61,110,69,110,98,110,43,110,63,110,65,110,93,110,115,110,28,110,51,110,75,110,64,110,81,110,59,110,3,110,46,110,94,110,104,110,92,110,97,110,49,110,40,110,96,110,113,110,107,110,57,110,34,110,48,110,83,110,101,110,39,110,120,110,100,110,119,110,85,110,121,110,82,110,102,110,53,110,54,110,90,110,32,113,30,113,47,113,251,112,46,113,49,113,35,113,37,113,34,113,50,113,31,113,40,113,58,113,27,113,75,114,90,114,136,114,137,114,134,114,133,114,139,114,18,115,11,115,48,115,34,115,49,115,51,115,39,115,50,115,45,115,38,115,35,115,53,115,12,115,46,116,44,116,48,116,43,116,22,116,26,116,33,116,45,116,49,116,36,116,35,116,29,116,41,116,32,116,50,116,251,116,47,117,111,117,108,117,231,117,218,117,225,117,230,117,221,117,223,117,228,117,215,117,149,118,146,118,218,118,70,119,71,119,68,119,77,119,69,119,74,119,78,119,75,119,76,119,222,119,236,119,96,120,100,120,101,120,92,120,109,120,113,120,106,120,110,120,112,120,105,120,104,120,94,120,98,120,116,121,115,121,114,121,112,121,2,122,10,122,3,122,12,122,4,122,153,122,230,122,228,122,74,123,59,123,68,123,72,123,76,123,78,123,64,123,88,123,69,123,162,124,158,124,168,124,161,124,88,125,111,125,99,125,83,125,86,125,103,125,106,125,79,125,109,125,92,125,107,125,82,125,84,125,105,125,81,125,95,125,78,125,62,127,63,127,101,127,102,127,162,127,160,127,161,127,215,127,81,128,79,128,80,128,254,128,212,128,67,129,74,129,82,129,79,129,71,129,61,129,77,129,58,129,230,129,238,129,247,129,248,129,249,129,4,130,60,130,61,130,63,130,117,130,59,131,207,131,249,131,35,132,192,131,232,131,18,132,231,131,228,131,252,131,246,131,16,132,198,131,200,131,235,131,227,131,191,131,1,132,221,131,229,131,216,131,255,131,225,131,203,131,206,131,214,131,245,131,201,131,9,132,15,132,222,131,17,132,6,132,194,131,243,131,213,131,250,131,199,131,209,131,234,131,19,132,195,131,236,131,238,131,196,131,251,131,215,131,226,131,27,132,219,131,254,131,216,134,226,134,230,134,211,134,227,134,218,134,234,134,221,134,235,134,220,134,236,134,233,134,215,134,232,134,209,134,72,136,86,136,85,136,186,136,215,136,185,136,184,136,192,136,190,136,182,136,188,136,183,136,189,136,178,136,1,137,201,136,149,137,152,137,151,137,221,137,218,137,219,137,78,138,77,138,57,138,89,138,64,138,87,138,88,138,68,138,69,138,82,138,72,138,81,138,74,138,76,138,79,138,95,140,129,140,128,140,186,140,190,140,176,140,185,140,181,140,132,141,128,141,137,141,216,141,211,141,205,141,199,141,214,141,220,141,207,141,213,141,217,141,200,141,215,141,197,141,239,142,247,142,250,142,249,142,230,142,238,142,229,142,245,142,231,142,232,142,246,142,235,142,241,142,236,142,244,142,233,142,45,144,52,144,47,144,6,145,44,145,4,145,255,144,252,144,8,145,249,144,251,144,1,145,0,145,7,145,5,145,3,145,97,145,100,145,95,145,98,145,96,145,1,146,10,146,37,146,3,146,26,146,38,146,15,146,12,146,0,146,18,146,255,145,253,145,6,146,4,146,39,146,2,146,28,146,36,146,25,146,23,146,5,146,22,146,123,149,141,149,140,149,144,149,135,150,126,150,136,150,137,150,131,150,128,150,194,150,200,150,195,150,241,150,240,150,108,151,112,151,110,151,7,152,169,152,235,152,230,156,249,158,131,78,132,78,182,78,189,80,191,80,198,80,174,80,196,80,202,80,180,80,200,80,194,80,176,80,193,80,186,80,177,80,203,80,201,80,182,80,184,80,215,81,122,82,120,82,123,82,124,82,195,85,219,85,204,85,208,85,203,85,202,85,221,85,192,85,212,85,196,85,233,85,191,85,210,85,141,85,207,85,213,85,226,85,214,85,200,85,242,85,205,85,217,85,194,85,20,87,83,88,104,88,100,88,79,88,77,88,73,88,111,88,85,88,78,88,93,88,89,88,101,88,91,88,61,88,99,88,113,88,252,88,199,90,196,90,203,90,186,90,184,90,177,90,181,90,176,90,191,90,200,90,187,90,198,90,183,90,192,90,202,90,180,90,182,90,205,90,185,90,144,90,214,91,216,91,217,91,31,92,51,92,113,93,99,93,74,93,101,93,114,93,108,93,94,93,104,93,103,93,98,93,240,93,79,94,78,94,74,94,77,94,75,94,197,94,204,94,198,94,203,94,199,94,64,95,175,95,173,95,247,96,73,97,74,97,43,97,69,97,54,97,50,97,46,97,70,97,47,97,79,97,41,97,64,97,32,98,104,145,35,98,37,98,36,98,197,99,241,99,235,99,16,100,18,100,9,100,32,100,36,100,51,100,67,100,31,100,21,100,24,100,57,100,55,100,34,100,35,100,12,100,38,100,48,100,40,100,65,100,53,100,47,100,10,100,26,100,64,100,37,100,39,100,11,100,231,99,27,100,46,100,33,100,14,100,111,101,146,101,211,101,134,102,140,102,149,102,144,102,139,102,138,102,153,102,148,102,120,102,32,103,102,105,95,105,56,105,78,105,98,105,113,105,63,105,69,105,106,105,57,105,66,105,87,105,89,105,122,105,72,105,73,105,53,105,108,105,51,105,61,105,101,105,240,104,120,105,52,105,105,105,64,105,111,105,68,105,118,105,88,105,65,105,116,105,76,105,59,105,75,105,55,105,92,105,79,105,81,105,50,105,82,105,47,105,123,105,60,105,70,107,69,107,67,107,66,107,72,107,65,107,155,107,13,250,251,107,252,107,249,107,247,107,248,107,155,110,214,110,200,110,143,110,192,110,159,110,147,110,148,110,160,110,177,110,185,110,198,110,210,110,189,110,193,110,158,110,201,110,183,110,176,110,205,110,166,110,207,110,178,110,190,110,195,110,220,110,216,110,153,110,146,110,142,110,141,110,164,110,161,110,191,110,179,110,208,110,202,110,151,110,174,110,163,110,71,113,84,113,82,113,99,113,96,113,65,113,93,113,98,113,114,113,120,113,106,113,97,113,66,113,88,113,67,113,75,113,112,113,95,113,80,113,83,113,68,113,77,113,90,113,79,114,141,114,140,114,145,114,144,114,142,114,60,115,66,115,59,115,58,115,64,115,74,115,73,115,68,116,74,116,75,116,82,116,81,116,87,116,64,116,79,116,80,116,78,116,66,116,70,116,77,116,84,116,225,116,255,116,254,116,253,116,29,117,121,117,119,117,131,105,239,117,15,118,3,118,247,117,254,117,252,117,249,117,248,117,16,118,251,117,246,117,237,117,245,117,253,117,153,118,181,118,221,118,85,119,95,119,96,119,82,119,86,119,90,119,105,119,103,119,84,119,89,119,109,119,224,119,135,120,154,120,148,120,143,120,132,120,149,120,133,120,134,120,161,120,131,120,121,120,153,120,128,120,150,120,123,120,124,121,130,121,125,121,121,121,17,122,24,122,25,122,18,122,23,122,21,122,34,122,19,122,27,122,16,122,163,122,162,122,158,122,235,122,102,123,100,123,109,123,116,123,105,123,114,123,101,123,115,123,113,123,112,123,97,123,120,123,118,123,99,123,178,124,180,124,175,124,136,125,134,125,128,125,141,125,127,125,133,125,122,125,142,125,123,125,131,125,124,125,140,125,148,125,132,125,125,125,146,125,109,127,107,127,103,127,104,127,108,127,166,127,165,127,167,127,219,127,220,127,33,128,100,129,96,129,119,129,92,129,105,129,91,129,98,129,114,129,33,103,94,129,118,129,103,129,111,129,68,129,97,129,29,130,73,130,68,130,64,130,66,130,69,130,241,132,63,132,86,132,118,132,121,132,143,132,141,132,101,132,81,132,64,132,134,132,103,132,48,132,77,132,125,132,90,132,89,132,116,132,115,132,93,132,7,133,94,132,55,132,58,132,52,132,122,132,67,132,120,132,50,132,69,132,41,132,217,131,75,132,47,132,66,132,45,132,95,132,112,132,57,132,78,132,76,132,82,132,111,132,197,132,142,132,59,132,71,132,54,132,51,132,104,132,126,132,68,132,43,132,96,132,84,132,110,132,80,132,11,135,4,135,247,134,12,135,250,134,214,134,245,134,77,135,248,134,14,135,9,135,1,135,246,134,13,135,5,135,214,136,203,136,205,136,206,136,222,136,219,136,218,136,204,136,208,136,133,137,155,137,223,137,229,137,228,137,225,137,224,137,226,137,220,137,230,137,118,138,134,138,127,138,97,138,63,138,119,138,130,138,132,138,117,138,131,138,129,138,116,138,122,138,60,140,75,140,74,140,101,140,100,140,102,140,134,140,132,140,133,140,204,140,104,141,105,141,145,141,140,141,142,141,143,141,141,141,147,141,148,141,144,141,146,141,240,141,224,141,236,141,241,141,238,141,208,141,233,141,227,141,226,141,231,141,242,141,235,141,244,141,6,143,255,142,1,143,0,143,5,143,7,143,8,143,2,143,11,143,82,144,63,144,68,144,73,144,61,144,16,145,13,145,15,145,17,145,22,145,20,145,11,145,14,145,110,145,111,145,72,146,82,146,48,146,58,146,102,146,51,146,101,146,94,146,131,146,46,146,74,146,70,146,109,146,108,146,79,146,96,146,103,146,111,146,54,146,97,146,112,146,49,146,84,146,99,146,80,146,114,146,78,146,83,146,76,146,86,146,50,146,159,149,156,149,158,149,155,149,146,150,147,150,145,150,151,150,206,150,250,150,253,150,248,150,245,150,115,151,119,151,120,151,114,151,15,152,13,152,14,152,172,152,246,152,249,152,175,153,178,153,176,153,181,153,173,154,171,154,91,155,234,156,237,156,231,156,128,158,253,158,230,80,212,80,215,80,232,80,243,80,219,80,234,80,221,80,228,80,211,80,236,80,240,80,239,80,227,80,224,80,216,81,128,82,129,82,233,82,235,82,48,83,172,83,39,86,21,86,12,86,18,86,252,85,15,86,28,86,1,86,19,86,2,86,250,85,29,86,4,86,255,85,249,85,137,88,124,88,144,88,152,88,134,88,129,88,127,88,116,88,139,88,122,88,135,88,145,88,142,88,118,88,130,88,136,88,123,88,148,88,143,88,254,88,107,89,220,90,238,90,229,90,213,90,234,90,218,90,237,90,235,90,243,90,226,90,224,90,219,90,236,90,222,90,221,90,217,90,232,90,223,90,119,91,224,91,227,91,99,92,130,93,128,93,125,93,134,93,122,93,129,93,119,93,138,93,137,93,136,93,126,93,124,93,141,93,121,93,127,93,88,94,89,94,83,94,216,94,209,94,215,94,206,94,220,94,213,94,217,94,210,94,212,94,68,95,67,95,111,95,182,95,44,97,40,97,65,97,94,97,113,97,115,97,82,97,83,97,114,97,108,97,128,97,116,97,84,97,122,97,91,97,101,97,59,97,106,97,97,97,86,97,41,98,39,98,43,98,43,100,77,100,91,100,93,100,116,100,118,100,114,100,115,100,125,100,117,100,102,100,166,100,78,100,130,100,94,100,92,100,75,100,83,100,96,100,80,100,127,100,63,100,108,100,107,100,89,100,101,100,119,100,115,101,160,101,161,102,160,102,159,102,5,103,4,103,34,103,177,105,182,105,201,105,160,105,206,105,150,105,176,105,172,105,188,105,145,105,153,105,142,105,167,105,141,105,169,105,190,105,175,105,191,105,196,105,189,105,164,105,212,105,185,105,202,105,154,105,207,105,179,105,147,105,170,105,161,105,158,105,217,105,151,105,144,105,194,105,181,105,165,105,198,105,74,107,77,107,75,107,158,107,159,107,160,107,195,107,196,107,254,107,206,110,245,110,241,110,3,111,37,111,248,110,55,111,251,110,46,111,9,111,78,111,25,111,26,111,39,111,24,111,59,111,18,111,237,110,10,111,54,111,115,111,249,110,238,110,45,111,64,111,48,111,60,111,53,111,235,110,7,111,14,111,67,111,5,111,253,110,246,110,57,111,28,111,252,110,58,111,31,111,13,111,30,111,8,111,33,111,135,113,144,113,137,113,128,113,133,113,130,113,143,113,123,113,134,113,129,113,151,113,68,114,83,114,151,114,149,114,147,114,67,115,77,115,81,115,76,115,98,116,115,116,113,116,117,116,114,116,103,116,110,116,0,117,2,117,3,117,125,117,144,117,22,118,8,118,12,118,21,118,17,118,10,118,20,118,184,118,129,119,124,119,133,119,130,119,110,119,128,119,111,119,126,119,131,119,178,120,170,120,180,120,173,120,168,120,126,120,171,120,158,120,165,120,160,120,172,120,162,120,164,120,152,121,138,121,139,121,150,121,149,121,148,121,147,121,151,121,136,121,146,121,144,121,43,122,74,122,48,122,47,122,40,122,38,122,168,122,171,122,172,122,238,122,136,123,156,123,138,123,145,123,144,123,150,123,141,123,140,123,155,123,142,123,133,123,152,123,132,82,153,123,164,123,130,123,187,124,191,124,188,124,186,124,167,125,183,125,194,125,163,125,170,125,193,125,192,125,197,125,157,125,206,125,196,125,198,125,203,125,204,125,175,125,185,125,150,125,188,125,159,125,166,125,174,125,169,125,161,125,201,125,115,127,226,127,227,127,229,127,222,127,36,128,93,128,92,128,137,129,134,129,131,129,135,129,141,129,140,129,139,129,21,130,151,132,164,132,161,132,159,132,186,132,206,132,194,132,172,132,174,132,171,132,185,132,180,132,193,132,205,132,170,132,154,132,177,132,208,132,157,132,167,132,187,132,162,132,148,132,199,132,204,132,155,132,169,132,175,132,168,132,214,132,152,132,182,132,207,132,160,132,215,132,212,132,210,132,219,132,176,132,145,132,97,134,51,135,35,135,40,135,107,135,64,135,46,135,30,135,33,135,25,135,27,135,67,135,44,135,65,135,62,135,70,135,32,135,50,135,42,135,45,135,60,135,18,135,58,135,49,135,53,135,66,135],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+164978);allocate([38,135,39,135,56,135,36,135,26,135,48,135,17,135,247,136,231,136,241,136,242,136,250,136,254,136,238,136,252,136,246,136,251,136,240,136,236,136,235,136,157,137,161,137,159,137,158,137,233,137,235,137,232,137,171,138,153,138,139,138,146,138,143,138,150,138,61,140,104,140,105,140,213,140,207,140,215,140,150,141,9,142,2,142,255,141,13,142,253,141,10,142,3,142,7,142,6,142,5,142,254,141,0,142,4,142,16,143,17,143,14,143,13,143,35,145,28,145,32,145,34,145,31,145,29,145,26,145,36,145,33,145,27,145,122,145,114,145,121,145,115,145,165,146,164,146,118,146,155,146,122,146,160,146,148,146,170,146,141,146,166,146,154,146,171,146,121,146,151,146,127,146,163,146,238,146,142,146,130,146,149,146,162,146,125,146,136,146,161,146,138,146,134,146,140,146,153,146,167,146,126,146,135,146,169,146,157,146,139,146,45,146,158,150,161,150,255,150,88,151,125,151,122,151,126,151,131,151,128,151,130,151,123,151,132,151,129,151,127,151,206,151,205,151,22,152,173,152,174,152,2,153,0,153,7,153,157,153,156,153,195,153,185,153,187,153,186,153,194,153,189,153,199,153,177,154,227,154,231,154,62,155,63,155,96,155,97,155,95,155,241,156,242,156,245,156,167,158,255,80,3,81,48,81,248,80,6,81,7,81,246,80,254,80,11,81,12,81,253,80,10,81,139,82,140,82,241,82,239,82,72,86,66,86,76,86,53,86,65,86,74,86,73,86,70,86,88,86,90,86,64,86,51,86,61,86,44,86,62,86,56,86,42,86,58,86,26,87,171,88,157,88,177,88,160,88,163,88,175,88,172,88,165,88,161,88,255,88,255,90,244,90,253,90,247,90,246,90,3,91,248,90,2,91,249,90,1,91,7,91,5,91,15,91,103,92,153,93,151,93,159,93,146,93,162,93,147,93,149,93,160,93,156,93,161,93,154,93,158,93,105,94,93,94,96,94,92,94,243,125,219,94,222,94,225,94,73,95,178,95,139,97,131,97,121,97,177,97,176,97,162,97,137,97,155,97,147,97,175,97,173,97,159,97,146,97,170,97,161,97,141,97,102,97,179,97,45,98,110,100,112,100,150,100,160,100,133,100,151,100,156,100,143,100,139,100,138,100,140,100,163,100,159,100,104,100,177,100,152,100,118,101,122,101,121,101,123,101,178,101,179,101,181,102,176,102,169,102,178,102,183,102,170,102,175,102,0,106,6,106,23,106,229,105,248,105,21,106,241,105,228,105,32,106,255,105,236,105,226,105,27,106,29,106,254,105,39,106,242,105,238,105,20,106,247,105,231,105,64,106,8,106,230,105,251,105,13,106,252,105,235,105,9,106,4,106,24,106,37,106,15,106,246,105,38,106,7,106,244,105,22,106,81,107,165,107,163,107,162,107,166,107,1,108,0,108,255,107,2,108,65,111,38,111,126,111,135,111,198,111,146,111,141,111,137,111,140,111,98,111,79,111,133,111,90,111,150,111,118,111,108,111,130,111,85,111,114,111,82,111,80,111,87,111,148,111,147,111,93,111,0,111,97,111,107,111,125,111,103,111,144,111,83,111,139,111,105,111,127,111,149,111,99,111,119,111,106,111,123,111,178,113,175,113,155,113,176,113,160,113,154,113,169,113,181,113,157,113,165,113,158,113,164,113,161,113,170,113,156,113,167,113,179,113,152,114,154,114,88,115,82,115,94,115,95,115,96,115,93,115,91,115,97,115,90,115,89,115,98,115,135,116,137,116,138,116,134,116,129,116,125,116,133,116,136,116,124,116,121,116,8,117,7,117,126,117,37,118,30,118,25,118,29,118,28,118,35,118,26,118,40,118,27,118,156,118,157,118,158,118,155,118,141,119,143,119,137,119,136,119,205,120,187,120,207,120,204,120,209,120,206,120,212,120,200,120,195,120,196,120,201,120,154,121,161,121,160,121,156,121,162,121,155,121,118,107,57,122,178,122,180,122,179,122,183,123,203,123,190,123,172,123,206,123,175,123,185,123,202,123,181,123,197,124,200,124,204,124,203,124,247,125,219,125,234,125,231,125,215,125,225,125,3,126,250,125,230,125,246,125,241,125,240,125,238,125,223,125,118,127,172,127,176,127,173,127,237,127,235,127,234,127,236,127,230,127,232,127,100,128,103,128,163,129,159,129,158,129,149,129,162,129,153,129,151,129,22,130,79,130,83,130,82,130,80,130,78,130,81,130,36,133,59,133,15,133,0,133,41,133,14,133,9,133,13,133,31,133,10,133,39,133,28,133,251,132,43,133,250,132,8,133,12,133,244,132,42,133,242,132,21,133,247,132,235,132,243,132,252,132,18,133,234,132,233,132,22,133,254,132,40,133,29,133,46,133,2,133,253,132,30,133,246,132,49,133,38,133,231,132,232,132,240,132,239,132,249,132,24,133,32,133,48,133,11,133,25,133,47,133,98,134,86,135,99,135,100,135,119,135,225,135,115,135,88,135,84,135,91,135,82,135,97,135,90,135,81,135,94,135,109,135,106,135,80,135,78,135,95,135,93,135,111,135,108,135,122,135,110,135,92,135,101,135,79,135,123,135,117,135,98,135,103,135,105,135,90,136,5,137,12,137,20,137,11,137,23,137,24,137,25,137,6,137,22,137,17,137,14,137,9,137,162,137,164,137,163,137,237,137,240,137,236,137,207,138,198,138,184,138,211,138,209,138,212,138,213,138,187,138,215,138,190,138,192,138,197,138,216,138,195,138,186,138,189,138,217,138,62,140,77,140,143,140,229,140,223,140,217,140,232,140,218,140,221,140,231,140,160,141,156,141,161,141,155,141,32,142,35,142,37,142,36,142,46,142,21,142,27,142,22,142,17,142,25,142,38,142,39,142,20,142,18,142,24,142,19,142,28,142,23,142,26,142,44,143,36,143,24,143,26,143,32,143,35,143,22,143,23,143,115,144,112,144,111,144,103,144,107,144,47,145,43,145,41,145,42,145,50,145,38,145,46,145,133,145,134,145,138,145,129,145,130,145,132,145,128,145,208,146,195,146,196,146,192,146,217,146,182,146,207,146,241,146,223,146,216,146,233,146,215,146,221,146,204,146,239,146,194,146,232,146,202,146,200,146,206,146,230,146,205,146,213,146,201,146,224,146,222,146,231,146,209,146,211,146,181,146,225,146,198,146,180,146,124,149,172,149,171,149,174,149,176,149,164,150,162,150,211,150,5,151,8,151,2,151,90,151,138,151,142,151,136,151,208,151,207,151,30,152,29,152,38,152,41,152,40,152,32,152,27,152,39,152,178,152,8,153,250,152,17,153,20,153,22,153,23,153,21,153,220,153,205,153,207,153,211,153,212,153,206,153,201,153,214,153,216,153,203,153,215,153,204,153,179,154,236,154,235,154,243,154,242,154,241,154,70,155,67,155,103,155,116,155,113,155,102,155,118,155,117,155,112,155,104,155,100,155,108,155,252,156,250,156,253,156,255,156,247,156,7,157,0,157,249,156,251,156,8,157,5,157,4,157,131,158,211,158,15,159,16,159,28,81,19,81,23,81,26,81,17,81,222,81,52,83,225,83,112,86,96,86,110,86,115,86,102,86,99,86,109,86,114,86,94,86,119,86,28,87,27,87,200,88,189,88,201,88,191,88,186,88,194,88,188,88,198,88,23,91,25,91,27,91,33,91,20,91,19,91,16,91,22,91,40,91,26,91,32,91,30,91,239,91,172,93,177,93,169,93,167,93,181,93,176,93,174,93,170,93,168,93,178,93,173,93,175,93,180,93,103,94,104,94,102,94,111,94,233,94,231,94,230,94,232,94,229,94,75,95,188,95,157,97,168,97,150,97,197,97,180,97,198,97,193,97,204,97,186,97,191,97,184,97,140,97,215,100,214,100,208,100,207,100,201,100,189,100,137,100,195,100,219,100,243,100,217,100,51,101,127,101,124,101,162,101,200,102,190,102,192,102,202,102,203,102,207,102,189,102,187,102,186,102,204,102,35,103,52,106,102,106,73,106,103,106,50,106,104,106,62,106,93,106,109,106,118,106,91,106,81,106,40,106,90,106,59,106,63,106,65,106,106,106,100,106,80,106,79,106,84,106,111,106,105,106,96,106,60,106,94,106,86,106,85,106,77,106,78,106,70,106,85,107,84,107,86,107,167,107,170,107,171,107,200,107,199,107,4,108,3,108,6,108,173,111,203,111,163,111,199,111,188,111,206,111,200,111,94,111,196,111,189,111,158,111,202,111,168,111,4,112,165,111,174,111,186,111,172,111,170,111,207,111,191,111,184,111,162,111,201,111,171,111,205,111,175,111,178,111,176,111,197,113,194,113,191,113,184,113,214,113,192,113,193,113,203,113,212,113,202,113,199,113,207,113,189,113,216,113,188,113,198,113,218,113,219,113,157,114,158,114,105,115,102,115,103,115,108,115,101,115,107,115,106,115,127,116,154,116,160,116,148,116,146,116,149,116,161,116,11,117,128,117,47,118,45,118,49,118,61,118,51,118,60,118,53,118,50,118,48,118,187,118,230,118,154,119,157,119,161,119,156,119,155,119,162,119,163,119,149,119,153,119,151,119,221,120,233,120,229,120,234,120,222,120,227,120,219,120,225,120,226,120,237,120,223,120,224,120,164,121,68,122,72,122,71,122,182,122,184,122,181,122,177,122,183,122,222,123,227,123,231,123,221,123,213,123,229,123,218,123,232,123,249,123,212,123,234,123,226,123,220,123,235,123,216,123,223,123,210,124,212,124,215,124,208,124,209,124,18,126,33,126,23,126,12,126,31,126,32,126,19,126,14,126,28,126,21,126,26,126,34,126,11,126,15,126,22,126,13,126,20,126,37,126,36,126,67,127,123,127,124,127,122,127,177,127,239,127,42,128,41,128,108,128,177,129,166,129,174,129,185,129,181,129,171,129,176,129,172,129,180,129,178,129,183,129,167,129,242,129,85,130,86,130,87,130,86,133,69,133,107,133,77,133,83,133,97,133,88,133,64,133,70,133,100,133,65,133,98,133,68,133,81,133,71,133,99,133,62,133,91,133,113,133,78,133,110,133,117,133,85,133,103,133,96,133,140,133,102,133,93,133,84,133,101,133,108,133,99,134,101,134,100,134,155,135,143,135,151,135,147,135,146,135,136,135,129,135,150,135,152,135,121,135,135,135,163,135,133,135,144,135,145,135,157,135,132,135,148,135,156,135,154,135,137,135,30,137,38,137,48,137,45,137,46,137,39,137,49,137,34,137,41,137,35,137,47,137,44,137,31,137,241,137,224,138,226,138,242,138,244,138,245,138,221,138,20,139,228,138,223,138,240,138,200,138,222,138,225,138,232,138,255,138,239,138,251,138,145,140,146,140,144,140,245,140,238,140,241,140,240,140,243,140,108,141,110,141,165,141,167,141,51,142,62,142,56,142,64,142,69,142,54,142,60,142,61,142,65,142,48,142,63,142,189,142,54,143,46,143,53,143,50,143,57,143,55,143,52,143,118,144,121,144,123,144,134,144,250,144,51,145,53,145,54,145,147,145,144,145,145,145,141,145,143,145,39,147,30,147,8,147,31,147,6,147,15,147,122,147,56,147,60,147,27,147,35,147,18,147,1,147,70,147,45,147,14,147,13,147,203,146,29,147,250,146,37,147,19,147,249,146,247,146,52,147,2,147,36,147,255,146,41,147,57,147,53,147,42,147,20,147,12,147,11,147,254,146,9,147,0,147,251,146,22,147,188,149,205,149,190,149,185,149,186,149,182,149,191,149,181,149,189,149,169,150,212,150,11,151,18,151,16,151,153,151,151,151,148,151,240,151,248,151,53,152,47,152,50,152,36,153,31,153,39,153,41,153,158,153,238,153,236,153,229,153,228,153,240,153,227,153,234,153,233,153,231,153,185,154,191,154,180,154,187,154,246,154,250,154,249,154,247,154,51,155,128,155,133,155,135,155,124,155,126,155,123,155,130,155,147,155,146,155,144,155,122,155,149,155,125,155,136,155,37,157,23,157,32,157,30,157,20,157,41,157,29,157,24,157,34,157,16,157,25,157,31,157,136,158,134,158,135,158,174,158,173,158,213,158,214,158,250,158,18,159,61,159,38,81,37,81,34,81,36,81,32,81,41,81,244,82,147,86,140,86,141,86,134,86,132,86,131,86,126,86,130,86,127,86,129,86,214,88,212,88,207,88,210,88,45,91,37,91,50,91,35,91,44,91,39,91,38,91,47,91,46,91,123,91,241,91,242,91,183,93,108,94,106,94,190,95,187,95,195,97,181,97,188,97,231,97,224,97,229,97,228,97,232,97,222,97,239,100,233,100,227,100,235,100,228,100,232,100,129,101,128,101,182,101,218,101,210,102,141,106,150,106,129,106,165,106,137,106,159,106,155,106,161,106,158,106,135,106,147,106,142,106,149,106,131,106,168,106,164,106,145,106,127,106,166,106,154,106,133,106,140,106,146,106,91,107,173,107,9,108,204,111,169,111,244,111,212,111,227,111,220,111,237,111,231,111,230,111,222,111,242,111,221,111,226,111,232,111,225,113,241,113,232,113,242,113,228,113,240,113,226,113,115,115,110,115,111,115,151,116,178,116,171,116,144,116,170,116,173,116,177,116,165,116,175,116,16,117,17,117,18,117,15,117,132,117,67,118,72,118,73,118,71,118,164,118,233,118,181,119,171,119,178,119,183,119,182,119,180,119,177,119,168,119,240,119,243,120,253,120,2,121,251,120,252,120,242,120,5,121,249,120,254,120,4,121,171,121,168,121,92,122,91,122,86,122,88,122,84,122,90,122,190,122,192,122,193,122,5,124,15,124,242,123,0,124,255,123,251,123,14,124,244,123,11,124,243,123,2,124,9,124,3,124,1,124,248,123,253,123,6,124,240,123,241,123,16,124,10,124,232,124,45,126,60,126,66,126,51,126,72,152,56,126,42,126,73,126,64,126,71,126,41,126,76,126,48,126,59,126,54,126,68,126,58,126,69,127,127,127,126,127,125,127,244,127,242,127,44,128,187,129,196,129,204,129,202,129,197,129,199,129,188,129,233,129,91,130,90,130,92,130,131,133,128,133,143,133,167,133,149,133,160,133,139,133,163,133,123,133,164,133,154,133,158,133,119,133,124,133,137,133,161,133,122,133,120,133,87,133,142,133,150,133,134,133,141,133,153,133,157,133,129,133,162,133,130,133,136,133,133,133,121,133,118,133,152,133,144,133,159,133,104,134,190,135,170,135,173,135,197,135,176,135,172,135,185,135,181,135,188,135,174,135,201,135,195,135,194,135,204,135,183,135,175,135,196,135,202,135,180,135,182,135,191,135,184,135,189,135,222,135,178,135,53,137,51,137,60,137,62,137,65,137,82,137,55,137,66,137,173,137,175,137,174,137,242,137,243,137,30,139,24,139,22,139,17,139,5,139,11,139,34,139,15,139,18,139,21,139,7,139,13,139,8,139,6,139,28,139,19,139,26,139,79,140,112,140,114,140,113,140,111,140,149,140,148,140,249,140,111,141,78,142,77,142,83,142,80,142,76,142,71,142,67,143,64,143,133,144,126,144,56,145,154,145,162,145,155,145,153,145,159,145,161,145,157,145,160,145,161,147,131,147,175,147,100,147,86,147,71,147,124,147,88,147,92,147,118,147,73,147,80,147,81,147,96,147,109,147,143,147,76,147,106,147,121,147,87,147,85,147,82,147,79,147,113,147,119,147,123,147,97,147,94,147,99,147,103,147,128,147,78,147,89,147,199,149,192,149,201,149,195,149,197,149,183,149,174,150,176,150,172,150,32,151,31,151,24,151,29,151,25,151,154,151,161,151,156,151,158,151,157,151,213,151,212,151,241,151,65,152,68,152,74,152,73,152,69,152,67,152,37,153,43,153,44,153,42,153,51,153,50,153,47,153,45,153,49,153,48,153,152,153,163,153,161,153,2,154,250,153,244,153,247,153,249,153,248,153,246,153,251,153,253,153,254,153,252,153,3,154,190,154,254,154,253,154,1,155,252,154,72,155,154,155,168,155,158,155,155,155,166,155,161,155,165,155,164,155,134,155,162,155,160,155,175,155,51,157,65,157,103,157,54,157,46,157,47,157,49,157,56,157,48,157,69,157,66,157,67,157,62,157,55,157,64,157,61,157,245,127,45,157,138,158,137,158,141,158,176,158,200,158,218,158,251,158,255,158,36,159,35,159,34,159,84,159,160,159,49,81,45,81,46,81,152,86,156,86,151,86,154,86,157,86,153,86,112,89,60,91,105,92,106,92,192,93,109,94,110,94,216,97,223,97,237,97,238,97,241,97,234,97,240,97,235,97,214,97,233,97,255,100,4,101,253,100,248,100,1,101,3,101,252,100,148,101,219,101,218,102,219,102,216,102,197,106,185,106,189,106,225,106,198,106,186,106,182,106,183,106,199,106,180,106,173,106,94,107,201,107,11,108,7,112,12,112,13,112,1,112,5,112,20,112,14,112,255,111,0,112,251,111,38,112,252,111,247,111,10,112,1,114,255,113,249,113,3,114,253,113,118,115,184,116,192,116,181,116,193,116,190,116,182,116,187,116,194,116,20,117,19,117,92,118,100,118,89,118,80,118,83,118,87,118,90,118,166,118,189,118,236,118,194,119,186,119,255,120,12,121,19,121,20,121,9,121,16,121,18,121,17,121,173,121,172,121,95,122,28,124,41,124,25,124,32,124,31,124,45,124,29,124,38,124,40,124,34,124,37,124,48,124,92,126,80,126,86,126,99,126,88,126,98,126,95,126,81,126,96,126,87,126,83,126,181,127,179,127,247,127,248,127,117,128,209,129,210,129,208,129,95,130,94,130,180,133,198,133,192,133,195,133,194,133,179,133,181,133,189,133,199,133,196,133,191,133,203,133,206,133,200,133,197,133,177,133,182,133,210,133,36,134,184,133,183,133,190,133,105,134,231,135,230,135,226,135,219,135,235,135,234,135,229,135,223,135,243,135,228,135,212,135,220,135,211,135,237,135,216,135,227,135,164,135,215,135,217,135,1,136,244,135,232,135,221,135,83,137,75,137,79,137,76,137,70,137,80,137,81,137,73,137,42,139,39,139,35,139,51,139,48,139,53,139,71,139,47,139,60,139,62,139,49,139,37,139,55,139,38,139,54,139,46,139,36,139,59,139,61,139,58,139,66,140,117,140,153,140,152,140,151,140,254,140,4,141,2,141,0,141,92,142,98,142,96,142,87,142,86,142,94,142,101,142,103,142,91,142,90,142,97,142,93,142,105,142,84,142,70,143,71,143,72,143,75,143,40,145,58,145,59,145,62,145,168,145,165,145,167,145,175,145,170,145,181,147,140,147,146,147,183,147,155,147,157,147,137,147,167,147,142,147,170,147,158,147,166,147,149,147,136,147,153,147,159,147,141,147,177,147,145,147,178,147,164,147,168,147,180,147,163,147,165,147,210,149,211,149,209,149,179,150,215,150,218,150,194,93,223,150,216,150,221,150,35,151,34,151,37,151,172,151,174,151,168,151,171,151,164,151,170,151,162,151,165,151,215,151,217,151,214,151,216,151,250,151,80,152,81,152,82,152,184,152,65,153,60,153,58,153,15,154,11,154,9,154,13,154,4,154,17,154,10,154,5,154,7,154,6,154,192,154,220,154,8,155,4,155,5,155,41,155,53,155,74,155,76,155,75,155,199,155,198,155,195,155,191,155,193,155,181,155,184,155,211,155,182,155,196,155,185,155,189,155,92,157,83,157,79,157,74,157,91,157,75,157,89,157,86,157,76,157,87,157,82,157,84,157,95,157,88,157,90,157,142,158,140,158,223,158,1,159,0,159,22,159,37,159,43,159,42,159,41,159,40,159,76,159,85,159,52,81,53,81,150,82,247,82,180,83,171,86,173,86,166,86,167,86,170,86,172,86,218,88,221,88,219,88,18,89,61,91,62,91,63,91,195,93,112,94,191,95,251,97,7,101,16,101,13,101,9,101,12,101,14,101,132,101,222,101,221,101,222,102,231,106,224,106,204,106,209,106,217,106,203,106,223,106,220,106,208,106,235,106,207,106,205,106,222,106,96,107,176,107,12,108,25,112,39,112,32,112,22,112,43,112,33,112,34,112,35,112,41,112,23,112,36,112,28,112,42,112,12,114,10,114,7,114,2,114,5,114,165,114,166,114,164,114,163,114,161,114,203,116,197,116,183,116,195,116,22,117,96,118,201,119,202,119,196,119,241,119,29,121,27,121,33,121,28,121,23,121,30,121,176,121,103,122,104,122,51,124,60,124,57,124,44,124,59,124,236,124,234,124,118,126,117,126,120,126,112,126,119,126,111,126,122,126,114,126,116,126,104,126,75,127,74,127,131,127,134,127,183,127,253,127,254,127,120,128,215,129,213,129,100,130,97,130,99,130,235,133,241,133,237,133,217,133,225,133,232,133,218,133,215,133,236,133,242,133,248,133,216,133,223,133,227,133,220,133,209,133,240,133,230,133,239,133,222,133,226,133,0,136,250,135,3,136,246,135,247,135,9,136,12,136,11,136,6,136,252,135,8,136,255,135,10,136,2,136,98,137,90,137,91,137,87,137,97,137,92,137,88,137,93,137,89,137,136,137,183,137,182,137,246,137,80,139,72,139,74,139,64,139,83,139,86,139,84,139,75,139,85,139,81,139,66,139,82,139,87,139,67,140,119,140,118,140,154,140,6,141,7,141,9,141,172,141,170,141,173,141,171,141,109,142,120,142,115,142,106,142,111,142,123,142,194,142,82,143,81,143,79,143,80,143,83,143,180,143,64,145,63,145,176,145,173,145,222,147,199,147,207,147,194,147,218,147,208,147,249,147,236,147,204,147,217,147,169,147,230,147,202,147,212,147,238,147,227,147,213,147,196,147,206,147,192,147,210,147,231,147,125,149,218,149,219,149,225,150,41,151,43,151,44,151,40,151,38,151,179,151,183,151,182,151,221,151,222,151,223,151,92,152,89,152,93,152,87,152,191,152,189,152,187,152,190,152,72,153,71,153,67,153,166,153,167,153,26,154,21,154,37,154,29,154,36,154,27,154,34,154,32,154,39,154,35,154,30,154,28,154,20,154,194,154,11,155,10,155,14,155,12,155,55,155,234,155,235,155,224,155,222,155,228,155,230,155,226,155,240,155,212,155,215,155,236,155,220,155,217,155,229,155,213,155,225,155,218,155,119,157,129,157,138,157,132,157,136,157,113,157,128,157,120,157,134,157,139,157,140,157,125,157,107,157,116,157,117,157,112,157,105,157,133,157,115,157,123,157,130,157,111,157,121,157,127,157,135,157,104,157,148,158,145,158,192,158,252,158,45,159,64,159,65,159,77,159,86,159,87,159,88,159,55,83,178,86,181,86,179,86,227,88,69,91,198,93,199,93,238,94,239,94,192,95,193,95,249,97,23,101,22,101,21,101,19,101,223,101,232,102,227,102,228,102,243,106,240,106,234,106,232,106,249,106,241,106,238,106,239,106,60,112,53,112,47,112,55,112,52,112,49,112,66,112,56,112,63,112,58,112,57,112,64,112,59,112,51,112,65,112,19,114,20,114,168,114,125,115,124,115,186,116,171,118,170,118,190,118,237,118,204,119,206,119,207,119,205,119,242,119,37,121,35,121,39,121,40,121,36,121,41,121,178,121,110,122,108,122,109,122,247,122,73,124,72,124,74,124,71,124,69,124,238,124,123,126,126,126,129,126,128,126,186,127,255,127,121,128,219,129,217,129,11,130,104,130,105,130,34,134,255,133,1,134,254,133,27,134,0,134,246,133,4,134,9,134,5,134,12,134,253,133,25,136,16,136,17,136,23,136,19,136,22,136,99,137,102,137,185,137,247,137,96,139,106,139,93,139,104,139,99,139,101,139,103,139,109,139,174,141,134,142,136,142,132,142,89,143,86,143,87,143,85,143,88,143,90,143,141,144,67,145,65,145,183,145,181,145,178,145,179,145,11,148,19,148,251,147,32,148,15,148,20,148,254,147,21,148,16,148,40,148,25,148,13,148,245,147,0,148,247,147,7,148,14,148,22,148,18,148,250,147,9,148,248,147,10,148,255,147,252,147,12,148,246,147,17,148,6,148,222,149,224,149,223,149,46,151,47,151,185,151,187,151,253,151,254,151,96,152,98,152,99,152,95,152,193,152,194,152,80,153,78,153,89,153,76,153,75,153,83,153,50,154,52,154,49,154,44,154,42,154,54,154,41,154,46,154,56,154,45,154,199,154,202,154,198,154,16,155,18,155,17,155,11,156,8,156,247,155,5,156,18,156,248,155,64,156,7,156,14,156,6,156,23,156,20,156,9,156,159,157,153,157,164,157,157,157,146,157,152,157,144,157,155,157,160,157,148,157,156,157,170,157,151,157,161,157,154,157,162,157,168,157,158,157,163,157,191,157,169,157,150,157,166,157,167,157,153,158,155,158,154,158,229,158,228,158,231,158,230,158,48,159,46,159,91,159,96,159,94,159,93,159,89,159,145,159,58,81,57,81,152,82,151,82,195,86,189,86,190,86,72,91,71,91,203,93,207,93,241,94,253,97,27,101,2,107,252,106,3,107,248,106,0,107,67,112,68,112,74,112,72,112,73,112,69,112,70,112,29,114,26,114,25,114,126,115,23,117,106,118,208,119,45,121,49,121,47,121,84,124,83,124,242,124,138,126,135,126,136,126,139,126,134,126,141,126,77,127,187,127,48,128,221,129,24,134,42,134,38,134,31,134,35,134,28,134,25,134,39,134,46,134,33,134,32,134,41,134,30,134,37,134,41,136,29,136,27,136,32,136,36,136,28,136,43,136,74,136,109,137,105,137,110,137,107,137,250,137,121,139,120,139,69,139,122,139,123,139,16,141,20,141,175,141,142,142,140,142,94,143,91,143,93,143,70,145,68,145,69,145,185,145,63,148,59,148,54,148,41,148,61,148,60,148,48,148,57,148,42,148,55,148,44,148,64,148,49,148,229,149,228,149,227,149,53,151,58,151,191,151,225,151,100,152,201,152,198,152,192,152,88,153,86,153,57,154,61,154,70,154,68,154,66,154,65,154,58,154,63,154,205,154,21,155,23,155,24,155,22,155,58,155,82,155,43,156,29,156,28,156,44,156,35,156,40,156,41,156,36,156,33,156,183,157,182,157,188,157,193,157,199,157,202,157,207,157,190,157,197,157,195,157,187,157,181,157,206,157,185,157,186,157,172,157,200,157,177,157,173,157,204,157,179,157,205,157,178,157,122,158,156,158,235,158,238,158,237,158,27,159,24,159,26,159,49,159,78,159,101,159,100,159,146,159,185,78,198,86,197,86,203,86,113,89,75,91,76,91,213,93,209,93,242,94,33,101,32,101,38,101,34,101,11,107,8,107,9,107,13,108,85,112,86,112,87,112,82,112,30,114,31,114,169,114,127,115,216,116,213,116,217,116,215,116,109,118,173,118,53,121,180,121,112,122,113,122,87,124,92,124,89,124,91,124,90,124,244,124,241,124,145,126,79,127,135,127,222,129,107,130,52,134,53,134,51,134,44,134,50,134,54,134,44,136,40,136,38,136,42,136,37,136,113,137,191,137,190,137,251,137,126,139,132,139,130,139,134,139,133,139,127,139,21,141,149,142,148,142,154,142,146,142,144,142,150,142,151,142,96,143,98,143,71,145,76,148,80,148,74,148,75,148,79,148,71,148,69,148,72,148,73,148,70,148,63,151,227,151,106,152,105,152,203,152,84,153,91,153,78,154,83,154,84,154,76,154,79,154,72,154,74,154,73,154,82,154,80,154,208,154,25,155,43,155,59,155,86,155,85,155,70,156,72,156,63,156,68,156,57,156,51,156,65,156,60,156,55,156,52,156,50,156,61,156,54,156,219,157,210,157,222,157,218,157,203,157,208,157,220,157,209,157,223,157,233,157,217,157,216,157,214,157,245,157,213,157,221,157,182,158,240,158,53,159,51,159,50,159,66,159,107,159,149,159,162,159,61,81,153,82,232,88,231,88,114,89,77,91,216,93,47,136,79,95,1,98,3,98,4,98,41,101,37,101,150,101,235,102,17,107,18,107,15,107,202,107,91,112,90,112,34,114,130,115,129,115,131,115,112,118,212,119,103,124,102,124,149,126,108,130,58,134,64,134,57,134,60,134,49,134,59,134,62,134,48,136,50,136,46,136,51,136,118,137,116,137,115,137,254,137,140,139,142,139,139,139,136,139,69,140,25,141,152,142,100,143,99,143,188,145,98,148,85,148,93,148,87,148,94,148,196,151,197,151,0,152,86,154,89,154,30,155,31,155,32,155,82,156,88,156,80,156,74,156,77,156,75,156,85,156,89,156,76,156,78,156,251,157,247,157,239,157,227,157,235,157,248,157,228,157,246,157,225,157,238,157,230,157,242,157,240,157,226,157,236,157,244,157,243,157,232,157,237,157,194,158,208,158,242,158,243,158,6,159,28,159,56,159,55,159,54,159,67,159,79,159,113,159,112,159,110,159,111,159,211,86,205,86,78,91,109,92,45,101,237,102,238,102,19,107,95,112,97,112,93,112,96,112,35,114,219,116,229,116,213,119,56,121,183,121,182,121,106,124,151,126,137,127,109,130,67,134,56,136,55,136,53,136,75,136,148,139,149,139,158,142,159,142,160,142,157,142,190,145,189,145,194,145,107,148,104,148,105,148,229,150,70,151,67,151,71,151,199,151,229,151,94,154,213,154,89,155,99,156,103,156,102,156,98,156,94,156,96,156,2,158,254,157,7,158,3,158,6,158,5,158,0,158,1,158,9,158,255,157,253,157,4,158,160,158,30,159,70,159,116,159,117,159,118,159,212,86,46,101,184,101,24,107,25,107,23,107,26,107,98,112,38,114,170,114,216,119,217,119,57,121,105,124,107,124,246,124,154,126,152,126,155,126,153,126,224,129,225,129,70,134,71,134,72,134,121,137,122,137,124,137,123,137,255,137,152,139,153,139,165,142,164,142,163,142,110,148,109,148,111,148,113,148,115,148,73,151,114,152,95,153,104,156,110,156,109,156,11,158,13,158,16,158,15,158,18,158,17,158,161,158,245,158,9,159,71,159,120,159,123,159,122,159,121,159,30,87,102,112,111,124,60,136,178,141,166,142,195,145,116,148,120,148,118,148,117,148,96,154,116,156,115,156,113,156,117,156,20,158,19,158,246,158,10,159,164,159,104,112,101,112,247,124,106,134,62,136,61,136,63,136,158,139,156,140,169,142,201,142,75,151,115,152,116,152,204,152,97,153,171,153,100,154,102,154,103,154,36,155,21,158,23,158,72,159,7,98,30,107,39,114,76,134,168,142,130,148,128,148,129,148,105,154,104,154,46,155,25,158,41,114,75,134,159,139,131,148,121,156,183,158,117,118,107,154,122,156,29,158,105,112,106,112,164,158,126,159,73,159,152,159,129,120,185,146,207,136,187,88,82,96,167,124,250,90,84,37,102,37,87,37,96,37,108,37,99,37,90,37,105,37,93,37,82,37,100,37,85,37,94,37,106,37,97,37,88,37,103,37,91,37,83,37,101,37,86,37,95,37,107,37,98,37,89,37,104,37,92,37,81,37,80,37,109,37,110,37,112,37,111,37,147,37,0,48,1,48,2,48,183,0,37,32,38,32,168,0,3,48,173,0,21,32,37,34,60,255,60,34,24,32,25,32,28,32,29,32,20,48,21,48,8,48,9,48,10,48,11,48,12,48,13,48,14,48,15,48,16,48,17,48,177,0,215,0,247,0,96,34,100,34,101,34,30,34,52,34,176,0,50,32,51,32,3,33,43,33,224,255,225,255,229,255,66,38,64,38,32,34,165,34,18,35,2,34,7,34,97,34,82,34,167,0,59,32,6,38,5,38,203,37,207,37,206,37,199,37,198,37,161,37,160,37,179,37,178,37,189,37,188,37,146,33,144,33,145,33,147,33,148,33,19,48,106,34,107,34,26,34,61,34,29,34,53,34,43,34,44,34,8,34,11,34,134,34,135,34,130,34,131,34,42,34,41,34,39,34,40,34,226,255,210,33,212,33,0,34,3,34,180,0,94,255,199,2,216,2,221,2,218,2,217,2,184,0,219,2,161,0,191,0,208,2,46,34,17,34,15,34,164,0,9,33,48,32,193,37,192,37,183,37,182,37,100,38,96,38,97,38,101,38,103,38,99,38,153,34,200,37,163,37,208,37,209,37,146,37,164,37,165,37,168,37,167,37,166,37,169,37,104,38,15,38,14,38,28,38,30,38,182,0,32,32,33,32,149,33,151,33,153,33,150,33,152,33,109,38,105,38,106,38,108,38,127,50,28,50,22,33,199,51,34,33,194,51,216,51,33,33,172,32,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,255,2,255,3,255,4,255,5,255,6,255,7,255,8,255,9,255,10,255,11,255,12,255,13,255,14,255,15,255,16,255,17,255,18,255,19,255,20,255,21,255,22,255,23,255,24,255,25,255,26,255,27,255,28,255,29,255,30,255,31,255,32,255,33,255,34,255,35,255,36,255,37,255,38,255,39,255,40,255,41,255,42,255,43,255,44,255,45,255,46,255,47,255,48,255,49,255,50,255,51,255,52,255,53,255,54,255,55,255,56,255,57,255,58,255,59,255,230,255,61,255,62,255,63,255,64,255,65,255,66,255,67,255,68,255,69,255,70,255,71,255,72,255,73,255,74,255,75,255,76,255,77,255,78,255,79,255,80,255,81,255,82,255,83,255,84,255,85,255,86,255,87,255,88,255,89,255,90,255,91,255,92,255,93,255,227,255,49,49,50,49,51,49,52,49,53,49,54,49,55,49,56,49,57,49,58,49,59,49,60,49,61,49,62,49,63,49,64,49,65,49,66,49,67,49,68,49,69,49,70,49,71,49,72,49,73,49,74,49,75,49,76,49,77,49,78,49,79,49,80,49,81,49,82,49,83,49,84,49,85,49,86,49,87,49,88,49,89,49,90,49,91,49,92,49,93,49,94,49,95,49,96,49,97,49,98,49,99,49,100,49,101,49,102,49,103,49,104,49,105,49,106,49,107,49,108,49,109,49,110,49,111,49,112,49,113,49,114,49,115,49,116,49,117,49,118,49,119,49,120,49,121,49,122,49,123,49,124,49,125,49,126,49,127,49,128,49,129,49,130,49,131,49,132,49,133,49,134,49,135,49,136,49,137,49,138,49,139,49,140,49,141,49,142,49,112,33,113,33,114,33,115,33,116,33,117,33,118,33,119,33,120,33,121,33,0,0,0,0,0,0,0,0,0,0,96,33,97,33,98,33,99,33,100,33,101,33,102,33,103,33,104,33,105,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154,3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,0,0,0,0,0,0,0,0,0,0,0,0,0,37,2,37,12,37,16,37,24,37,20,37,28,37,44,37,36,37,52,37,60,37,1,37,3,37,15,37,19,37,27,37,23,37,35,37,51,37,43,37,59,37,75,37,32,37,47,37,40,37,55,37,63,37,29,37,48,37,37,37,56,37,66,37,18,37,17,37,26,37,25,37,22,37,21,37,14,37,13,37,30,37,31,37,33,37,34,37,38,37,39,37,41,37,42,37,45,37,46,37,49,37,50,37,53,37,54,37,57,37,58,37,61,37,62,37,64,37,65,37,67,37,68,37,69,37,70,37,71,37,72,37,73,37,74,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,149,51,150,51,151,51,19,33,152,51,196,51,163,51,164,51,165,51,166,51,153,51,154,51,155,51,156,51,157,51,158,51,159,51,160,51,161,51,162,51,202,51,141,51,142,51,143,51,207,51,136,51,137,51,200,51,167,51,168,51,176,51,177,51,178,51,179,51,180,51,181,51,182,51,183,51,184,51,185,51,128,51,129,51,130,51,131,51,132,51,186,51,187,51,188,51,189,51,190,51,191,51,144,51,145,51,146,51,147,51,148,51,38,33,192,51,193,51,138,51,139,51,140,51,214,51,197,51,173,51,174,51,175,51,219,51,169,51,170,51,171,51,172,51,221,51,208,51,211,51,195,51,201,51,220,51,198,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,198,0,208,0,170,0,38,1,0,0,50,1,0,0,63,1,65,1,216,0,82,1,186,0,222,0,102,1,74,1,0,0,96,50,97,50,98,50,99,50,100,50,101,50,102,50,103,50,104,50,105,50,106,50,107,50,108,50,109,50,110,50,111,50,112,50,113,50,114,50,115,50,116,50,117,50,118,50,119,50,120,50,121,50,122,50,123,50,208,36,209,36,210,36,211,36,212,36,213,36,214,36,215,36,216,36,217,36,218,36,219,36,220,36,221,36,222,36,223,36,224,36,225,36,226,36,227,36,228,36,229,36,230,36,231,36,232,36,233,36,96,36,97,36,98,36,99,36,100,36,101,36,102,36,103,36,104,36,105,36,106,36,107,36,108,36,109,36,110,36,189,0,83,33,84,33,188,0,190,0,91,33,92,33,93,33,94,33,230,0,17,1,240,0,39,1,49,1,51,1,56,1,64,1,66,1,248,0,83,1,223,0,254,0,103,1,75,1,73,1,0,50,1,50,2,50,3,50,4,50,5,50,6,50,7,50,8,50,9,50,10,50,11,50,12,50,13,50,14,50,15,50,16,50,17,50,18,50,19,50,20,50,21,50,22,50,23,50,24,50,25,50,26,50,27,50,156,36,157,36,158,36,159,36,160,36,161,36,162,36,163,36,164,36,165,36,166,36,167,36,168,36,169,36,170,36,171,36,172,36,173,36,174,36,175,36,176,36,177,36,178,36,179,36,180,36,181,36,116,36,117,36,118,36,119,36,120,36,121,36,122,36,123,36,124,36,125,36,126,36,127,36,128,36,129,36,130,36,185,0,178,0,179,0,116,32,127,32,129,32,130,32,131,32,132,32,65,48,66,48,67,48,68,48,69,48,70,48,71,48,72,48,73,48,74,48,75,48,76,48,77,48,78,48,79,48,80,48,81,48,82,48,83,48,84,48,85,48,86,48,87,48,88,48,89,48,90,48,91,48,92,48,93,48,94,48,95,48,96,48,97,48,98,48,99,48,100,48,101,48,102,48,103,48,104,48,105,48,106,48,107,48,108,48,109,48,110,48,111,48,112,48,113,48,114,48,115,48,116,48,117,48,118,48,119,48,120,48,121,48,122,48,123,48,124,48,125,48,126,48,127,48,128,48,129,48,130,48,131,48,132,48,133,48,134,48,135,48,136,48,137,48,138,48,139,48,140,48,141,48,142,48,143,48,144,48,145,48,146,48,147,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,48,162,48,163,48,164,48,165,48,166,48,167,48,168,48,169,48,170,48,171,48,172,48,173,48,174,48,175,48,176,48,177,48,178,48,179,48,180,48,181,48,182,48,183,48,184,48,185,48,186,48,187,48,188,48,189,48,190,48,191,48,192,48,193,48,194,48,195,48,196,48,197,48,198,48,199,48,200,48,201,48,202,48,203,48,204,48,205,48,206,48,207,48,208,48,209,48,210,48,211,48,212,48,213,48,214,48,215,48,216,48,217,48,218,48,219,48,220,48,221,48,222,48,223,48,224,48,225,48,226,48,227,48,228,48,229,48,230,48,231,48,232,48,233,48,234,48,235,48,236,48,237,48,238,48,239,48,240,48,241,48,242,48,243,48,244,48,245,48,246,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,4,17,4,18,4,19,4,20,4,21,4,1,4,22,4,23,4,24,4,25,4,26,4,27,4,28,4,29,4,30,4,31,4,32,4,33,4,34,4,35,4,36,4,37,4,38,4,39,4,40,4,41,4,42,4,43,4,44,4,45,4,46,4,47,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,4,49,4,50,4,51,4,52,4,53,4,81,4,54,4,55,4,56,4,57,4,58,4,59,4,60,4,61,4,62,4,63,4,64,4,65,4,66,4,67,4,68,4,69,4,70,4,71,4,72,4,73,4,74,4,75,4,76,4,77,4,78,4,79,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,1,172,4,172,7,172,8,172,9,172,10,172,16,172,17,172,18,172,19,172,20,172,21,172,22,172,23,172,25,172,26,172,27,172,28,172,29,172,32,172,36,172,44,172,45,172,47,172,48,172,49,172,56,172,57,172,60,172,64,172,75,172,77,172,84,172,88,172,92,172,112,172,113,172,116,172,119,172,120,172,122,172,128,172,129,172,131,172,132,172,133,172,134,172,137,172,138,172,139,172,140,172,144,172,148,172,156,172,157,172,159,172,160,172,161,172,168,172,169,172,170,172,172,172,175,172,176,172,184,172,185,172,187,172,188,172,189,172,193,172,196,172,200,172,204,172,213,172,215,172,224,172,225,172,228,172,231,172,232,172,234,172,236,172,239,172,240,172,241,172,243,172,245,172,246,172,252,172,253,172,0,173,4,173,6,173,12,173,13,173,15,173,17,173,24,173,28,173,32,173,41,173,44,173,45,173,52,173,53,173,56,173,60,173,68,173,69,173,71,173,73,173,80,173,84,173,88,173,97,173,99,173,108,173,109,173,112,173,115,173,116,173,117,173,118,173,123,173,124,173,125,173,127,173,129,173,130,173,136,173,137,173,140,173,144,173,156,173,157,173,164,173,183,173,192,173,193,173,196,173,200,173,208,173,209,173,211,173,220,173,224,173,228,173,248,173,249,173,252,173,255,173,0,174,1,174,8,174,9,174,11,174,13,174,20,174,48,174,49,174,52,174,55,174,56,174,58,174,64,174,65,174,67,174,69,174,70,174,74,174,76,174,77,174,78,174,80,174,84,174,86,174,92,174,93,174,95,174,96,174,97,174,101,174,104,174,105,174,108,174,112,174,120,174,121,174,123,174,124,174,125,174,132,174,133,174,140,174,188,174,189,174,190,174,192,174,196,174,204,174,205,174,207,174,208,174,209,174,216,174,217,174,220,174,232,174,235,174,237,174,244,174,248,174,252,174,7,175,8,175,13,175,16,175,44,175,45,175,48,175,50,175,52,175,60,175,61,175,63,175,65,175,66,175,67,175,72,175,73,175,80,175,92,175,93,175,100,175,101,175,121,175,128,175,132,175],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+175218);allocate([136,175,144,175,145,175,149,175,156,175,184,175,185,175,188,175,192,175,199,175,200,175,201,175,203,175,205,175,206,175,212,175,220,175,232,175,233,175,240,175,241,175,244,175,248,175,0,176,1,176,4,176,12,176,16,176,20,176,28,176,29,176,40,176,68,176,69,176,72,176,74,176,76,176,78,176,83,176,84,176,85,176,87,176,89,176,93,176,124,176,125,176,128,176,132,176,140,176,141,176,143,176,145,176,152,176,153,176,154,176,156,176,159,176,160,176,161,176,162,176,168,176,169,176,171,176,172,176,173,176,174,176,175,176,177,176,179,176,180,176,181,176,184,176,188,176,196,176,197,176,199,176,200,176,201,176,208,176,209,176,212,176,216,176,224,176,229,176,8,177,9,177,11,177,12,177,16,177,18,177,19,177,24,177,25,177,27,177,28,177,29,177,35,177,36,177,37,177,40,177,44,177,52,177,53,177,55,177,56,177,57,177,64,177,65,177,68,177,72,177,80,177,81,177,84,177,85,177,88,177,92,177,96,177,120,177,121,177,124,177,128,177,130,177,136,177,137,177,139,177,141,177,146,177,147,177,148,177,152,177,156,177,168,177,204,177,208,177,212,177,220,177,221,177,223,177,232,177,233,177,236,177,240,177,249,177,251,177,253,177,4,178,5,178,8,178,11,178,12,178,20,178,21,178,23,178,25,178,32,178,52,178,60,178,88,178,92,178,96,178,104,178,105,178,116,178,117,178,124,178,132,178,133,178,137,178,144,178,145,178,148,178,152,178,153,178,154,178,160,178,161,178,163,178,165,178,166,178,170,178,172,178,176,178,180,178,200,178,201,178,204,178,208,178,210,178,216,178,217,178,219,178,221,178,226,178,228,178,229,178,230,178,232,178,235,178,236,178,237,178,238,178,239,178,243,178,244,178,245,178,247,178,248,178,249,178,250,178,251,178,255,178,0,179,1,179,4,179,8,179,16,179,17,179,19,179,20,179,21,179,28,179,84,179,85,179,86,179,88,179,91,179,92,179,94,179,95,179,100,179,101,179,103,179,105,179,107,179,110,179,112,179,113,179,116,179,120,179,128,179,129,179,131,179,132,179,133,179,140,179,144,179,148,179,160,179,161,179,168,179,172,179,196,179,197,179,200,179,203,179,204,179,206,179,208,179,212,179,213,179,215,179,217,179,219,179,221,179,224,179,228,179,232,179,252,179,16,180,24,180,28,180,32,180,40,180,41,180,43,180,52,180,80,180,81,180,84,180,88,180,96,180,97,180,99,180,101,180,108,180,128,180,136,180,157,180,164,180,168,180,172,180,181,180,183,180,185,180,192,180,196,180,200,180,208,180,213,180,220,180,221,180,224,180,227,180,228,180,230,180,236,180,237,180,239,180,241,180,248,180,20,181,21,181,24,181,27,181,28,181,36,181,37,181,39,181,40,181,41,181,42,181,48,181,49,181,52,181,56,181,64,181,65,181,67,181,68,181,69,181,75,181,76,181,77,181,80,181,84,181,92,181,93,181,95,181,96,181,97,181,160,181,161,181,164,181,168,181,170,181,171,181,176,181,177,181,179,181,180,181,181,181,187,181,188,181,189,181,192,181,196,181,204,181,205,181,207,181,208,181,209,181,216,181,236,181,16,182,17,182,20,182,24,182,37,182,44,182,52,182,72,182,100,182,104,182,156,182,157,182,160,182,164,182,171,182,172,182,177,182,212,182,240,182,244,182,248,182,0,183,1,183,5,183,40,183,41,183,44,183,47,183,48,183,56,183,57,183,59,183,68,183,72,183,76,183,84,183,85,183,96,183,100,183,104,183,112,183,113,183,115,183,117,183,124,183,125,183,128,183,132,183,140,183,141,183,143,183,144,183,145,183,146,183,150,183,151,183,152,183,153,183,156,183,160,183,168,183,169,183,171,183,172,183,173,183,180,183,181,183,184,183,199,183,201,183,236,183,237,183,240,183,244,183,252,183,253,183,255,183,0,184,1,184,7,184,8,184,9,184,12,184,16,184,24,184,25,184,27,184,29,184,36,184,37,184,40,184,44,184,52,184,53,184,55,184,56,184,57,184,64,184,68,184,81,184,83,184,92,184,93,184,96,184,100,184,108,184,109,184,111,184,113,184,120,184,124,184,141,184,168,184,176,184,180,184,184,184,192,184,193,184,195,184,197,184,204,184,208,184,212,184,221,184,223,184,225,184,232,184,233,184,236,184,240,184,248,184,249,184,251,184,253,184,4,185,24,185,32,185,60,185,61,185,64,185,68,185,76,185,79,185,81,185,88,185,89,185,92,185,96,185,104,185,105,185,107,185,109,185,116,185,117,185,120,185,124,185,132,185,133,185,135,185,137,185,138,185,141,185,142,185,172,185,173,185,176,185,180,185,188,185,189,185,191,185,193,185,200,185,201,185,204,185,206,185,207,185,208,185,209,185,210,185,216,185,217,185,219,185,221,185,222,185,225,185,227,185,228,185,229,185,232,185,236,185,244,185,245,185,247,185,248,185,249,185,250,185,0,186,1,186,8,186,21,186,56,186,57,186,60,186,64,186,66,186,72,186,73,186,75,186,77,186,78,186,83,186,84,186,85,186,88,186,92,186,100,186,101,186,103,186,104,186,105,186,112,186,113,186,116,186,120,186,131,186,132,186,133,186,135,186,140,186,168,186,169,186,171,186,172,186,176,186,178,186,184,186,185,186,187,186,189,186,196,186,200,186,216,186,217,186,252,186,0,187,4,187,13,187,15,187,17,187,24,187,28,187,32,187,41,187,43,187,52,187,53,187,54,187,56,187,59,187,60,187,61,187,62,187,68,187,69,187,71,187,73,187,77,187,79,187,80,187,84,187,88,187,97,187,99,187,108,187,136,187,140,187,144,187,164,187,168,187,172,187,180,187,183,187,192,187,196,187,200,187,208,187,211,187,248,187,249,187,252,187,255,187,0,188,2,188,8,188,9,188,11,188,12,188,13,188,15,188,17,188,20,188,21,188,22,188,23,188,24,188,27,188,28,188,29,188,30,188,31,188,36,188,37,188,39,188,41,188,45,188,48,188,49,188,52,188,56,188,64,188,65,188,67,188,68,188,69,188,73,188,76,188,77,188,80,188,93,188,132,188,133,188,136,188,139,188,140,188,142,188,148,188,149,188,151,188,153,188,154,188,160,188,161,188,164,188,167,188,168,188,176,188,177,188,179,188,180,188,181,188,188,188,189,188,192,188,196,188,205,188,207,188,208,188,209,188,213,188,216,188,220,188,244,188,245,188,246,188,248,188,252,188,4,189,5,189,7,189,9,189,16,189,20,189,36,189,44,189,64,189,72,189,73,189,76,189,80,189,88,189,89,189,100,189,104,189,128,189,129,189,132,189,135,189,136,189,137,189,138,189,144,189,145,189,147,189,149,189,153,189,154,189,156,189,164,189,176,189,184,189,212,189,213,189,216,189,220,189,233,189,240,189,244,189,248,189,0,190,3,190,5,190,12,190,13,190,16,190,20,190,28,190,29,190,31,190,68,190,69,190,72,190,76,190,78,190,84,190,85,190,87,190,89,190,90,190,91,190,96,190,97,190,100,190,104,190,106,190,112,190,113,190,115,190,116,190,117,190,123,190,124,190,125,190,128,190,132,190,140,190,141,190,143,190,144,190,145,190,152,190,153,190,168,190,208,190,209,190,212,190,215,190,216,190,224,190,227,190,228,190,229,190,236,190,1,191,8,191,9,191,24,191,25,191,27,191,28,191,29,191,64,191,65,191,68,191,72,191,80,191,81,191,85,191,148,191,176,191,197,191,204,191,205,191,208,191,212,191,220,191,223,191,225,191,60,192,81,192,88,192,92,192,96,192,104,192,105,192,144,192,145,192,148,192,152,192,160,192,161,192,163,192,165,192,172,192,173,192,175,192,176,192,179,192,180,192,181,192,182,192,188,192,189,192,191,192,192,192,193,192,197,192,200,192,201,192,204,192,208,192,216,192,217,192,219,192,220,192,221,192,228,192,229,192,232,192,236,192,244,192,245,192,247,192,249,192,0,193,4,193,8,193,16,193,21,193,28,193,29,193,30,193,31,193,32,193,35,193,36,193,38,193,39,193,44,193,45,193,47,193,48,193,49,193,54,193,56,193,57,193,60,193,64,193,72,193,73,193,75,193,76,193,77,193,84,193,85,193,88,193,92,193,100,193,101,193,103,193,104,193,105,193,112,193,116,193,120,193,133,193,140,193,141,193,142,193,144,193,148,193,150,193,156,193,157,193,159,193,161,193,165,193,168,193,169,193,172,193,176,193,189,193,196,193,200,193,204,193,212,193,215,193,216,193,224,193,228,193,232,193,240,193,241,193,243,193,252,193,253,193,0,194,4,194,12,194,13,194,15,194,17,194,24,194,25,194,28,194,31,194,32,194,40,194,41,194,43,194,45,194,47,194,49,194,50,194,52,194,72,194,80,194,81,194,84,194,88,194,96,194,101,194,108,194,109,194,112,194,116,194,124,194,125,194,127,194,129,194,136,194,137,194,144,194,152,194,155,194,157,194,164,194,165,194,168,194,172,194,173,194,180,194,181,194,183,194,185,194,220,194,221,194,224,194,227,194,228,194,235,194,236,194,237,194,239,194,241,194,246,194,248,194,249,194,251,194,252,194,0,195,8,195,9,195,12,195,13,195,19,195,20,195,21,195,24,195,28,195,36,195,37,195,40,195,41,195,69,195,104,195,105,195,108,195,112,195,114,195,120,195,121,195,124,195,125,195,132,195,136,195,140,195,192,195,216,195,217,195,220,195,223,195,224,195,226,195,232,195,233,195,237,195,244,195,245,195,248,195,8,196,16,196,36,196,44,196,48,196,52,196,60,196,61,196,72,196,100,196,101,196,104,196,108,196,116,196,117,196,121,196,128,196,148,196,156,196,184,196,188,196,233,196,240,196,241,196,244,196,248,196,250,196,255,196,0,197,1,197,12,197,16,197,20,197,28,197,40,197,41,197,44,197,48,197,56,197,57,197,59,197,61,197,68,197,69,197,72,197,73,197,74,197,76,197,77,197,78,197,83,197,84,197,85,197,87,197,88,197,89,197,93,197,94,197,96,197,97,197,100,197,104,197,112,197,113,197,115,197,116,197,117,197,124,197,125,197,128,197,132,197,135,197,140,197,141,197,143,197,145,197,149,197,151,197,152,197,156,197,160,197,169,197,180,197,181,197,184,197,185,197,187,197,188,197,189,197,190,197,196,197,197,197,198,197,199,197,200,197,201,197,202,197,204,197,206,197,208,197,209,197,212,197,216,197,224,197,225,197,227,197,229,197,236,197,237,197,238,197,240,197,244,197,246,197,247,197,252,197,253,197,254,197,255,197,0,198,1,198,5,198,6,198,7,198,8,198,12,198,16,198,24,198,25,198,27,198,28,198,36,198,37,198,40,198,44,198,45,198,46,198,48,198,51,198,52,198,53,198,55,198,57,198,59,198,64,198,65,198,68,198,72,198,80,198,81,198,83,198,84,198,85,198,92,198,93,198,96,198,108,198,111,198,113,198,120,198,121,198,124,198,128,198,136,198,137,198,139,198,141,198,148,198,149,198,152,198,156,198,164,198,165,198,167,198,169,198,176,198,177,198,180,198,184,198,185,198,186,198,192,198,193,198,195,198,197,198,204,198,205,198,208,198,212,198,220,198,221,198,224,198,225,198,232,198,233,198,236,198,240,198,248,198,249,198,253,198,4,199,5,199,8,199,12,199,20,199,21,199,23,199,25,199,32,199,33,199,36,199,40,199,48,199,49,199,51,199,53,199,55,199,60,199,61,199,64,199,68,199,74,199,76,199,77,199,79,199,81,199,82,199,83,199,84,199,85,199,86,199,87,199,88,199,92,199,96,199,104,199,107,199,116,199,117,199,120,199,124,199,125,199,126,199,131,199,132,199,133,199,135,199,136,199,137,199,138,199,142,199,144,199,145,199,148,199,150,199,151,199,152,199,154,199,160,199,161,199,163,199,164,199,165,199,166,199,172,199,173,199,176,199,180,199,188,199,189,199,191,199,192,199,193,199,200,199,201,199,204,199,206,199,208,199,216,199,221,199,228,199,232,199,236,199,0,200,1,200,4,200,8,200,10,200,16,200,17,200,19,200,21,200,22,200,28,200,29,200,32,200,36,200,44,200,45,200,47,200,49,200,56,200,60,200,64,200,72,200,73,200,76,200,77,200,84,200,112,200,113,200,116,200,120,200,122,200,128,200,129,200,131,200,133,200,134,200,135,200,139,200,140,200,141,200,148,200,157,200,159,200,161,200,168,200,188,200,189,200,196,200,200,200,204,200,212,200,213,200,215,200,217,200,224,200,225,200,228,200,245,200,252,200,253,200,0,201,4,201,5,201,6,201,12,201,13,201,15,201,17,201,24,201,44,201,52,201,80,201,81,201,84,201,88,201,96,201,97,201,99,201,108,201,112,201,116,201,124,201,136,201,137,201,140,201,144,201,152,201,153,201,155,201,157,201,192,201,193,201,196,201,199,201,200,201,202,201,208,201,209,201,211,201,213,201,214,201,217,201,218,201,220,201,221,201,224,201,226,201,228,201,231,201,236,201,237,201,239,201,240,201,241,201,248,201,249,201,252,201,0,202,8,202,9,202,11,202,12,202,13,202,20,202,24,202,41,202,76,202,77,202,80,202,84,202,92,202,93,202,95,202,96,202,97,202,104,202,125,202,132,202,152,202,188,202,189,202,192,202,196,202,204,202,205,202,207,202,209,202,211,202,216,202,217,202,224,202,236,202,244,202,8,203,16,203,20,203,24,203,32,203,33,203,65,203,72,203,73,203,76,203,80,203,88,203,89,203,93,203,100,203,120,203,121,203,156,203,184,203,212,203,228,203,231,203,233,203,12,204,13,204,16,204,20,204,28,204,29,204,33,204,34,204,39,204,40,204,41,204,44,204,46,204,48,204,56,204,57,204,59,204,60,204,61,204,62,204,68,204,69,204,72,204,76,204,84,204,85,204,87,204,88,204,89,204,96,204,100,204,102,204,104,204,112,204,117,204,152,204,153,204,156,204,160,204,168,204,169,204,171,204,172,204,173,204,180,204,181,204,184,204,188,204,196,204,197,204,199,204,201,204,208,204,212,204,228,204,236,204,240,204,1,205,8,205,9,205,12,205,16,205,24,205,25,205,27,205,29,205,36,205,40,205,44,205,57,205,92,205,96,205,100,205,108,205,109,205,111,205,113,205,120,205,136,205,148,205,149,205,152,205,156,205,164,205,165,205,167,205,169,205,176,205,196,205,204,205,208,205,232,205,236,205,240,205,248,205,249,205,251,205,253,205,4,206,8,206,12,206,20,206,25,206,32,206,33,206,36,206,40,206,48,206,49,206,51,206,53,206,88,206,89,206,92,206,95,206,96,206,97,206,104,206,105,206,107,206,109,206,116,206,117,206,120,206,124,206,132,206,133,206,135,206,137,206,144,206,145,206,148,206,152,206,160,206,161,206,163,206,164,206,165,206,172,206,173,206,193,206,228,206,229,206,232,206,235,206,236,206,244,206,245,206,247,206,248,206,249,206,0,207,1,207,4,207,8,207,16,207,17,207,19,207,21,207,28,207,32,207,36,207,44,207,45,207,47,207,48,207,49,207,56,207,84,207,85,207,88,207,92,207,100,207,101,207,103,207,105,207,112,207,113,207,116,207,120,207,128,207,133,207,140,207,161,207,168,207,176,207,196,207,224,207,225,207,228,207,232,207,240,207,241,207,243,207,245,207,252,207,0,208,4,208,17,208,24,208,45,208,52,208,53,208,56,208,60,208,68,208,69,208,71,208,73,208,80,208,84,208,88,208,96,208,108,208,109,208,112,208,116,208,124,208,125,208,129,208,164,208,165,208,168,208,172,208,180,208,181,208,183,208,185,208,192,208,193,208,196,208,200,208,201,208,208,208,209,208,211,208,212,208,213,208,220,208,221,208,224,208,228,208,236,208,237,208,239,208,240,208,241,208,248,208,13,209,48,209,49,209,52,209,56,209,58,209,64,209,65,209,67,209,68,209,69,209,76,209,77,209,80,209,84,209,92,209,93,209,95,209,97,209,104,209,108,209,124,209,132,209,136,209,160,209,161,209,164,209,168,209,176,209,177,209,179,209,181,209,186,209,188,209,192,209,216,209,244,209,248,209,7,210,9,210,16,210,44,210,45,210,48,210,52,210,60,210,61,210,63,210,65,210,72,210,92,210,100,210,128,210,129,210,132,210,136,210,144,210,145,210,149,210,156,210,160,210,164,210,172,210,177,210,184,210,185,210,188,210,191,210,192,210,194,210,200,210,201,210,203,210,212,210,216,210,220,210,228,210,229,210,240,210,241,210,244,210,248,210,0,211,1,211,3,211,5,211,12,211,13,211,14,211,16,211,20,211,22,211,28,211,29,211,31,211,32,211,33,211,37,211,40,211,41,211,44,211,48,211,56,211,57,211,59,211,60,211,61,211,68,211,69,211,124,211,125,211,128,211,132,211,140,211,141,211,143,211,144,211,145,211,152,211,153,211,156,211,160,211,168,211,169,211,171,211,173,211,180,211,184,211,188,211,196,211,197,211,200,211,201,211,208,211,216,211,225,211,227,211,236,211,237,211,240,211,244,211,252,211,253,211,255,211,1,212,8,212,29,212,64,212,68,212,92,212,96,212,100,212,109,212,111,212,120,212,121,212,124,212,127,212,128,212,130,212,136,212,137,212,139,212,141,212,148,212,169,212,204,212,208,212,212,212,220,212,223,212,232,212,236,212,240,212,248,212,251,212,253,212,4,213,8,213,12,213,20,213,21,213,23,213,60,213,61,213,64,213,68,213,76,213,77,213,79,213,81,213,88,213,89,213,92,213,96,213,101,213,104,213,105,213,107,213,109,213,116,213,117,213,120,213,124,213,132,213,133,213,135,213,136,213,137,213,144,213,165,213,200,213,201,213,204,213,208,213,210,213,216,213,217,213,219,213,221,213,228,213,229,213,232,213,236,213,244,213,245,213,247,213,249,213,0,214,1,214,4,214,8,214,16,214,17,214,19,214,20,214,21,214,28,214,32,214,36,214,45,214,56,214,57,214,60,214,64,214,69,214,72,214,73,214,75,214,77,214,81,214,84,214,85,214,88,214,92,214,103,214,105,214,112,214,113,214,116,214,131,214,133,214,140,214,141,214,144,214,148,214,157,214,159,214,161,214,168,214,172,214,176,214,185,214,187,214,196,214,197,214,200,214,204,214,209,214,212,214,215,214,217,214,224,214,228,214,232,214,240,214,245,214,252,214,253,214,0,215,4,215,17,215,24,215,25,215,28,215,32,215,40,215,41,215,43,215,45,215,52,215,53,215,56,215,60,215,68,215,71,215,73,215,80,215,81,215,84,215,86,215,87,215,88,215,89,215,96,215,97,215,99,215,101,215,105,215,108,215,112,215,116,215,124,215,125,215,129,215,136,215,137,215,140,215,144,215,152,215,153,215,155,215,157,215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,79,115,79,71,80,249,80,160,82,239,83,117,84,229,84,9,86,193,90,182,91,135,102,182,103,183,103,239,103,76,107,194,115,194,117,60,122,219,130,4,131,87,136,136,136,54,138,200,140,207,141,251,142,230,143,213,153,59,82,116,83,4,84,106,96,100,97,188,107,207,115,26,129,186,137,210,137,163,149,131,79,10,82,190,88,120,89,230,89,114,94,121,94,199,97,192,99,70,103,236,103,127,104,151,111,78,118,11,119,245,120,8,122,255,122,33,124,157,128,110,130,113,130,235,138,147,149,107,78,157,85,247,102,52,110,163,120,237,122,91,132,16,137,78,135,168,151,216,82,78,87,42,88,76,93,31,97,190,97,33,98,98,101,209,103,68,106,27,110,24,117,179,117,227,118,176,119,58,125,175,144,81,148,82,148,149,159,35,83,172,92,50,117,219,128,64,146,152,149,91,82,8,88,220,89,161,92,23,93,183,94,58,95,74,95,119,97,95,108,122,117,134,117,224,124,115,125,177,125,140,127,84,129,33,130,145,133,65,137,27,139,252,146,77,150,71,156,203,78,247,78,11,80,241,81,79,88,55,97,62,97,104,97,57,101,234,105,17,111,165,117,134,118,214,118,135,123,165,130,203,132,0,249,167,147,139,149,128,85,162,91,81,87,1,249,179,124,185,127,181,145,40,80,187,83,69,92,232,93,210,98,110,99,218,100,231,100,32,110,172,112,91,121,221,141,30,142,2,249,125,144,69,146,248,146,126,78,246,78,101,80,254,93,250,94,6,97,87,105,113,129,84,134,71,142,117,147,43,154,94,78,145,80,112,103,64,104,9,81,141,82,146,82,162,106,188,119,16,146,212,158,171,82,47,96,242,143,72,80,169,97,237,99,202,100,60,104,132,106,192,111,136,129,161,137,148,150,5,88,125,114,172,114,4,117,121,125,109,126,169,128,139,137,116,139,99,144,81,157,137,98,122,108,84,111,80,125,58,127,35,138,124,81,74,97,157,123,25,139,87,146,140,147,172,78,211,79,30,80,190,80,6,81,193,82,205,82,127,83,112,87,131,88,154,94,145,95,118,97,172,97,206,100,108,101,111,102,187,102,244,102,151,104,135,109,133,112,241,112,159,116,165,116,202,116,217,117,108,120,236,120,223,122,246,122,69,125,147,125,21,128,63,128,27,129,150,131,102,139,21,143,21,144,225,147,3,152,56,152,90,154,232,155,194,79,83,85,58,88,81,89,99,91,70,92,184,96,18,98,66,104,176,104,232,104,170,110,76,117,120,118,206,120,61,122,251,124,107,126,124,126,8,138,161,138,63,140,142,150,196,157,228,83,233,83,74,84,113,84,250,86,209,89,100,91,59,92,171,94,247,98,55,101,69,101,114,101,160,102,175,103,193,105,189,108,252,117,144,118,126,119,63,122,148,127,3,128,161,128,143,129,230,130,253,130,240,131,193,133,49,136,180,136,165,138,3,249,156,143,46,147,199,150,103,152,216,154,19,159,237,84,155,101,242,102,143,104,64,122,55,140,96,157,240,86,100,87,17,93,6,102,177,104,205,104,254,110,40,116,158,136,228,155,104,108,4,249,168,154,155,79,108,81,113,81,159,82,84,91,229,93,80,96,109,96,241,98,167,99,59,101,217,115,122,122,163,134,162,140,143,151,50,78,225,91,8,98,156,103,220,116,209,121,211,131,135,138,178,138,232,141,78,144,75,147,70,152,211,94,232,105,255,133,237,144,5,249,160,81,152,91,236,91,99,97,250,104,62,107,76,112,47,116,216,116,161,123,80,127,197,131,192,137,171,140,220,149,40,153,46,82,93,96,236,98,2,144,138,79,73,81,33,83,217,88,227,94,224,102,56,109,154,112,194,114,214,115,80,123,241,128,91,148,102,83,155,99,107,127,86,78,128,80,74,88,222,88,42,96,39,97,208,98,208,105,65,155,143,91,24,125,177,128,95,143,164,78,209,80,172,84,172,85,12,91,160,93,231,93,42,101,78,101,33,104,75,106,225,114,142,118,239,119,94,125,249,127,160,129,78,133,223,134,3,143,78,143,202,144,3,153,85,154,171,155,24,78,69,78,93,78,199,78,241,79,119,81,254,82,64,83,227,83,229,83,142,84,20,86,117,87,162,87,199,91,135,93,208,94,252,97,216,98,81,101,184,103,233,103,203,105,80,107,198,107,236,107,66,108,157,110,120,112,215,114,150,115,3,116,191,119,233,119,118,122,127,125,9,128,252,129,5,130,10,130,223,130,98,136,51,139,252,140,192,142,17,144,177,144,100,146,182,146,210,153,69,154,233,156,215,157,156,159,11,87,64,92,202,131,160,151,171,151,180,158,27,84,152,122,164,127,217,136,205,142,225,144,0,88,72,92,152,99,159,122,174,91,19,95,121,122,174,122,142,130,172,142,38,80,56,82,248,82,119,83,8,87,243,98,114,99,10,107,195,109,55,119,165,83,87,115,104,133,118,142,213,149,58,103,195,106,112,111,109,138,204,142,75,153,6,249,119,102,120,107,180,140,60,155,7,249,235,83,45,87,78,89,198,99,251,105,234,115,69,120,186,122,197,122,254,124,117,132,143,137,115,141,53,144,168,149,251,82,71,87,71,117,96,123,204,131,30,146,8,249,88,106,75,81,75,82,135,82,31,98,216,104,117,105,153,150,197,80,164,82,228,82,195,97,164,101,57,104,255,105,126,116,75,123,185,130,235,131,178,137,57,139,209,143,73,153,9,249,202,78,151,89,210,100,17,102,142,106,52,116,129,121,189,121,169,130,126,136,127,136,95,137,10,249,38,147,11,79,202,83,37,96,113,98,114,108,26,125,102,125,152,78,98,81,220,119,175,128,1,79,14,79,118,81,128,81,220,85,104,86,59,87,250,87,252,87,20,89,71,89,147,89,196,91,144,92,14,93,241,93,126,94,204,95,128,98,215,101,227,101,30,103,31,103,94,103,203,104,196,104,95,106,58,107,35,108,125,108,130,108,199,109,152,115,38,116,42,116,130,116,163,116,120,117,127,117,129,120,239,120,65,121,71,121,72,121,122,121,149,123,0,125,186,125,136,127,6,128,45,128,140,128,24,138,79,139,72,140,119,141,33,147,36,147,226,152,81,153,14,154,15,154,101,154,146,158,202,125,118,79,9,84,238,98,84,104,209,145,171,85,58,81,11,249,12,249,28,90,230,97,13,249,207,98,255,98,14,249,15,249,16,249,17,249,18,249,19,249,163,144,20,249,21,249,22,249,23,249,24,249,254,138,25,249,26,249,27,249,28,249,150,102,29,249,86,113,30,249,31,249,227,150,32,249,79,99,122,99,87,83,33,249,143,103,96,105,115,110,34,249,55,117,35,249,36,249,37,249,13,125,38,249,39,249,114,136,202,86,24,90,40,249,41,249,42,249,43,249,44,249,67,78,45,249,103,81,72,89,240,103,16,128,46,249,115,89,116,94,154,100,202,121,245,95,108,96,200,98,123,99,231,91,215,91,170,82,47,249,116,89,41,95,18,96,48,249,49,249,50,249,89,116,51,249,52,249,53,249,54,249,55,249,56,249,209,153,57,249,58,249,59,249,60,249,61,249,62,249,63,249,64,249,65,249,66,249,67,249,195,111,68,249,69,249,191,129,178,143,241,96,70,249,71,249,102,129,72,249,73,249,63,92,74,249,75,249,76,249,77,249,78,249,79,249,80,249,81,249,233,90,37,138,123,103,16,125,82,249,83,249,84,249,85,249,86,249,87,249,253,128,88,249,89,249,60,92,229,108,63,83,186,110,26,89,54,131,57,78,182,78,70,79,174,85,24,87,199,88,86,95,183,101,230,101,128,106,181,107,77,110,237,119,239,122,30,124,222,125,203,134,146,136,50,145,91,147,187,100,190,111,122,115,184,117,84,144,86,85,77,87,186,97,212,100,199,102,225,109,91,110,109,111,185,111,240,117,67,128,189,129,65,133,131,137,199,138,90,139,31,147,147,108,83,117,84,123,15,142,93,144,16,85,2,88,88,88,98,94,7,98,158,100,224,104,118,117,214,124,179,135,232,158,227,78,136,87,110,87,39,89,13,92,177,92,54,94,133,95,52,98,225,100,179,115,250,129,139,136,184,140,138,150,219,158,133,91,183,95,179,96,18,80,0,82,48,82,22,87,53,88,87,88,14,92,96,92,246,92,139,93,166,94,146,95,188,96,17,99,137,99,23,100,67,104,249,104,194,106,216,109,33,110,212,110,228,111,254,113,220,118,121,119,177,121,59,122,4,132,169,137,237,140,243,141,72,142,3,144,20,144,83,144,253,144,77,147,118,150,220,151,210,107,6,112,88,114,162,114,104,115,99,119,191,121,228,123,155,126,128,139,169,88,199,96,102,101,253,101,190,102,140,108,30,113,201,113,90,140,19,152,109,78,129,122,221,78,172,81,205,81,213,82,12,84,167,97,113,103,80,104,223,104,30,109,124,111,188,117,179,119,229,122,244,128,99,132,133,146,92,81,151,101,92,103,147,103,216,117,199,122,115,131,90,249,70,140,23,144,45,152,111,92,192,129,154,130,65,144,111,144,13,146,151,95,157,93,89,106,200,113,123,118,73,123,228,133,4,139,39,145,48,154,135,85,246,97,91,249,105,118,133,127,63,134,186,135,248,136,143,144,92,249,27,109,217,112,222,115,97,125,61,132,93,249,106,145,241,153,94,249,130,78,117,83,4,107,18,107,62,112,27,114,45,134,30,158,76,82,163,143,80,93,229,100,44,101,22,107,235,111,67,124,156,126,205,133,100,137,189,137,201,98,216,129,31,136,202,94,23,103,106,109,252,114,5,116,111,116,130,135,222,144,134,79,13,93,160,95,10,132,183,81,160,99,101,117,174,78,6,80,105,81,201,81,129,104,17,106,174,124,177,124,231,124,111,130,210,138,27,143,207,145,182,79,55,81,245,82,66,84,236,94,110,97,62,98,197,101,218,106,254,111,42,121,220,133,35,136,173,149,98,154,106,154,151,158,206,158,155,82,198,102,119,107,29,112,43,121,98,143,66,151,144,97,0,98,35,101,35,111,73,113,137,116,244,125,111,128,238,132,38,143,35,144,74,147,189,81,23,82,163,82,12,109,200,112,194,136,201,94,130,101,174,107,194,111,62,124,117,115,228,78,54,79,249,86,95,249,186,92,186,93,28,96,178,115,45,123,154,127,206,127,70,128,30,144,52,146,246,150,72,151,24,152,97,159,139,79,167,111,174,121,180,145,183,150,222,82,96,249,136,100,196,100,211,106,94,111,24,112,16,114,231,118,1,128,6,134,92,134,239,141,5,143,50,151,111,155,250,157,117,158,140,120,127,121,160,125,201,131,4,147,127,158,147,158,214,138,223,88,4,95,39,103,39,112,207,116,96,124,126,128,33,81,40,112,98,114,202,120,194,140,218,140,244,140,247,150,134,78,218,80,238,91,214,94,153,101,206,113,66,118,173,119,74,128,252,132,124,144,39,155,141,159,216,88,65,90,98,92,19,106,218,109,15,111,59,118,47,125,55,126,30,133,56,137,228,147,75,150,137,82,210,101,243,103,180,105,65,109,156,110,15,112,9,116,96,116,89,117,36,118,107,120,44,139,94,152,109,81,46,98,120,150,150,79,43,80,25,93,234,109,184,125,42,143,139,95,68,97,23,104,97,249,134,150,210,82,139,128,220,81,204,81,94,105,28,122,190,125,241,131,117,150,218,79,41,82,152,83,15,84,14,85,101,92,167,96,78,103,168,104,108,109,129,114,248,114,6,116,131,116,98,249,226,117,108,124,121,127,184,127,137,131,207,136,225,136,204,145,208,145,226,150,201,155,29,84,126,111,208,113,152,116,250,133,170,142,163,150,87,156,159,158,151,103,203,109,51,116,232,129,22,151,44,120,203,122,32,123,146,124,105,100,106,116,242,117,188,120,232,120,172,153,84,155,187,158,222,91,85,94,32,111,156,129,171,131,136,144,7,78,77,83,41,90,210,93,78,95,98,97,61,99,105,102,252,102,255,110,43,111,99,112,158,119,44,132,19,133,59,136,19,143,69,153,59,156,28,85,185,98,43,103,171,108,9,131,106,137,122,151,161,78,132,89,216,95,217,95,27,103,178,125,84,127,146,130,43,131,189,131,30,143,153,144,203,87,185,89,146,90,208,91,39,102,154,103,133,104,207,107,100,113,117,127,183,140,227,140,129,144,69,155,8,129,138,140,76,150,64,154,165,158,95,91,19,108,27,115,242,118,223,118,12,132,170,81,147,137,77,81,149,81,201,82,201,104,148,108,4,119,32,119,191,125,236,125,98,151,181,158,197,110,17,133,165,81,13,84,125,84,14,102,157,102,39,105,159,110,191,118,145,119,23,131,194,132,159,135,105,145,152,146,244,156,130,136,174,79,146,81,223,82,198,89,61,94,85,97,120,100,121,100,174,102,208,103,33,106,205,107,219,107,95,114,97,114,65,116,56,119,219,119,23,128,188,130,5,131,0,139,40,139,140,140,40,103,144,108,103,114,238,118,102,119,70,122,169,157,127,107,146,108,34,89,38,103,153,132,111,83,147,88,153,89,223,94,207,99,52,102,115,103,58,110,43,115,215,122,215,130,40,147,217,82,235,93,174,97,203,97,10,98,199,98,171,100,224,101,89,105,102,107,203,107,33,113,247,115,93,117,70,126,30,130,2,131,106,133,163,138,191,140,39,151,97,157,168,88,216,158,17,80,14,82,59,84,79,85,135,101,118,108,10,125,11,125,94,128,138,134,128,149,239,150,255,82,149,108,105,114,115,84,154,90,62,92,75,93,76,95,174,95,42,103,182,104,99,105,60,110,68,110,9,119,115,124,142,127,135,133,14,139,247,143,97,151,244,158,183,92,182,96,13,97,171,97,79,101,251,101,252,101,17,108,239,108,159,115,201,115,225,125,148,149,198,91,28,135,16,139,93,82,90,83,205,98,15,100,178,100,52,103,56,106,202,108,192,115,158,116,148,123,149,124,27,126,138,129,54,130,132,133,235,143,249,150,193,153,52,79,74,83,205,83,219,83,204,98,44,100,0,101,145,101,195,105,238,108,88,111,237,115,84,117,34,118,228,118,252,118,208,120,251,120,44,121,70,125,44,130,224,135,212,143,18,152,239,152,195,82,212,98,165,100,36,110,81,111,124,118,203,141,177,145,98,146,238,154,67,155,35,80,141,80,74,87,168,89,40,92,71,94,119,95,63,98,62,101,185,101,193,101,9,102,139,103,156,105,194,110,197,120,33,125,170,128,128,129,43,130,179,130,161,132,140,134,42,138,23,139,166,144,50,150,144,159,13,80,243,79,99,249,249,87,152,95,220,98,146,99,111,103,67,110,25,113,195,118,204,128,218,128,244,136,245,136,25,137,224,140,41,143,77,145,106,150,47,79,112,79,27,94,207,103,34,104,125,118,126,118,68,155,97,94,10,106,105,113,212,113,106,117,100,249,65,126,67,133,233,133,220,152,16,79,79,123,112,127,165,149,225,81,6,94,181,104,62,108,78,108,219,108,175,114,196,123,3,131,213,108,58,116,251,80,136,82,193,88,216,100,151,106,167,116,86,118,167,120,23,134,226,149,57,151,101,249,94,83,1,95,138,139,168,143,175,143,138,144,37,82,165,119,73,156,8,159,25,78,2,80,117,81,91,92,119,94,30,102,58,102,196,103,197,104,179,112,1,117,197,117,201,121,221,122,39,143,32,153,8,154,221,79,33,88,49,88,246,91,110,102,101,107,17,109,122,110,125,111,228,115,43,117,233,131,220,136,19,137,92,139,20,143,15,79,213,80,16,83,92,83,147,91,169,95,13,103,143,121,121,129,47,131,20,133,7,137,134,137,57,143,59,143,165,153,18,156,44,103,118,78,248,79,73,89,1,92,239,92,240,92,103,99,210,104,253,112,162,113,43,116,43,126,236,132,2,135,34,144,210,146,243,156,13,78,216,78,239,79,133,80,86,82,111,82,38,84,144,84,224,87,43,89,102,90,90,91,117,91,204,91,156,94,102,249,118,98,119,101,167,101,110,109,165,110,54,114,38,123,63,124,54,127,80,129,81,129,154,129,64,130,153,130,169,131,3,138,160,140,230,140,251,140,116,141,186,141,232,144,220,145,28,150,68,150,217,153,231,156,23,83,6,82,41,84,116,86,179,88,84,89,110,89,255,95,164,97,110,98,16,102,126,108,26,113,198,118,137,124,222,124,27,125,172,130,193,140,240,150,103,249,91,79,23,95,127,95,194,98,41,93,11,103,218,104,124,120,67,126,108,157,21,78,153,80,21,83,42,83,81,83,131,89,98,90,135,94,178,96,138,97,73,98,121,98,144,101,135,103,167,105,212,107,214,107,215,107,216,107,184,108,104,249,53,116,250,117,18,120,145,120,213,121,216,121,131,124,203,125,225,127,165,128,62,129,194,129,242,131,26,135,232,136,185,138,108,139,187,140,25,145,94,151,219,152,59,159,172,86,42,91,108,95,140,101,179,106,175,107,92,109,241,111,21,112,93,114,173,115,167,140,211,140,59,152,145,97,55,108,88,128,1,154,77,78,139,78,155,78,213,78,58,79,60,79,127,79,223,79,255,80,242,83,248,83,6,85,227,85,219,86,235,88,98,89,17,90,235,91,250,91,4,92,243,93,43,94,153,95,29,96,104,99,156,101,175,101,246,103,251,103,173,104,123,107,153,108,215,108,35,110,9,112,69,115,2,120,62,121,64,121,96,121,193,121,233,123,23,125,114,125,134,128,13,130,142,131,209,132,199,134,223,136,80,138,94,138,29,139,220,140,102,141,173,143,170,144,252,152,223,153,157,158,74,82,105,249,20,103,106,249,152,80,42,82,113,92,99,101,85,108,202,115,35,117,157,117,151,123,156,132,120,145,48,151,119,78,146,100,186,107,94,113,169,133,9,78,107,249,73,103,238,104,23,110,159,130,24,133,107,136,247,99,129,111,18,146,175,152,10,78,183,80,207,80,31,81,70,85,170,85,23,86,64,91,25,92,224,92,56,94,138,94,160,94,194,94,243,96,81,104,97,106,88,110,61,114,64,114,192,114,248,118,101,121,177,123,212,127,243,136,244,137,115,138,97,140,222,140,28,151,94,88,189,116,253,140,199,85,108,249,97,122,34,125,114,130,114,114,31,117,37,117,109,249,25,123,133,88,251,88,188,93,143,94,182,94,144,95,85,96,146,98,127,99,77,101,145,102,217,102,248,102,22,104,242,104,128,114,94,116,110,123,110,125,214,125,114,127,229,128,18,130,175,133,127,137,147,138,29,144,228,146,205,158,32,159,21,89,109,89,45,94,220,96,20,102,115,102,144,103,80,108,197,109,95,111,243,119,169,120,198,132,203,145,43,147,217,78,202,80,72,81,132,85,11,91,163,91,71,98,126,101,203,101,50,110,125,113,1,116,68,116,135,116,191,116,108,118,170,121,218,125,85,126,168,127,122,129,179,129,57,130,26,134,236,135,117,138,227,141,120,144,145,146,37,148,77,153,174,155,104,83,81,92,84,105,196,108,41,109,43,110,12,130,155,133,59,137,45,138,170,138,234,150,103,159,97,82,185,102,178,107,150,126,254,135,13,141,131,149,93,150,29,101,137,109,238,113,110,249,206,87,211,89,172,91,39,96,250,96,16,98,31,102,95,102,41,115,249,115,219,118,1,119,108,123,86,128,114,128,101,129,160,138,146,145,22,78,226,82,114,107,23,109,5,122,57,123,48,125,111,249,176,140,236,83,47,86,81,88,181,91,15,92,17,92,226,93,64,98,131,99,20,100,45,102,179,104,188,108,136,109,175,110,31,112,164,112,210,113,38,117,143,117,142,117,25,118,17,123,224,123,43,124,32,125,57,125,44,133,109,133,7,134,52,138,13,144,97,144,181,144,183,146,246,151,55,154,215,79,108,92,95,103,145,109,159,124,140,126,22,139,22,141,31,144,107,91,253,93,13,100,192,132,92,144,225,152,135,115,139,91,154,96,126,103,222,109,31,138,166,138,1,144,12,152,55,82,112,249,81,112,142,120,150,147,112,136,215,145,238,79,215,83,253,85,218,86,130,87,253,88,194,90,136,91,171,92,192,92,37,94,1,97,13,98,75,98,136,99,28,100,54,101,120,101,57,106,138,107,52,108,25,109,49,111,231,113,233,114,120,115,7,116,178,116,38,118,97,119,192,121,87,122,234,122,185,124,143,125,172,125,97,126,158,127,41,129,49,131,144,132,218,132,234,133,150,136,176,138,144,139,56,143,66,144,131,144,108,145,150,146,185,146,139,150,167,150,168,150,214,150,0,151,8,152,150,153,211,154,26,155,212,83,126,88,25,89,112,91,191,91,209,109,90,111,159,113,33,116,185,116,133,128,253,131,225,93,135,95,170,95,66,96,236,101,18,104,111,105,83,106,137,107,53,109,243,109,227,115,254,118,172,119,77,123,20,125,35,129,28,130,64,131,244,132,99,133,98,138,196,138,135,145,30,147,6,152,180,153,12,98,83,136,240,143,101,146,7,93,39,93,105,93,95,116,157,129,104,135,213,111,254,98,210,127,54,137,114,137,30,78,88,78,231,80,221,82,71,83,127,98,7,102,105,126,5,136,94,150,141,79,25,83,54,86,203,89,164,90,56,92,78,92,77,92,2,94,17,95,67,96,189,101,47,102,66,102,190,103,244,103,28,115,226,119,58,121,197,127,148,132,205,132,150,137,102,138,105,138,225,138,85,140,122,140,244,87,212,91,15,95,111,96,237,98,13,105,150,107,92,110,132,113,210,123,85,135,88,139,254,142,223,152,254,152,56,79,129,79,225,79,123,84,32,90,184,91,60,97,176,101,104,102,252,113,51,117,94,121,51,125,78,129,227,129,152,131,170,133,206,133,3,135,10,138,171,142,155,143,113,249,197,143,49,89,164,91,230,91,137,96,233,91,11,92,195,95,129,108,114,249,241,109,11,112,26,117,175,130,246,138,192,78,65,83,115,249,217,150,15,108,158,78,196,79,82,81,94,85,37,90,232,92,17,98,89,114,189,130,170,131,254,134,89,136,29,138,63,150,197,150,19,153,9,157,93,157,10,88,179,92,189,93,68,94,225,96,21,97,225,99,2,106,37,110,2,145,84,147,78,152,16,156,119,159,137,91,184,92,9,99,79,102,72,104,60,119,193,150,141,151,84,152,159,155,161,101,1,139,203,142,188,149,53,85,169,92,214,93,181,94,151,102,76,118,244,131,199,149,211,88,188,98,206,114,40,157,240,78,46,89,15,96,59,102,131,107,231,121,38,157,147,83,192,84,195,87,22,93,27,97,214,102,175,109,141,120,126,130,152,150,68,151,132,83,124,98,150,99,178,109,10,126,75,129,77,152,251,106,76,127,175,157,26,158,95,78,59,80,182,81,28,89,249,96,246,99,48,105,58,114,54,128,116,249,206,145,49,95,117,249,118,249,4,125,229,130,111,132,187,132,229,133,141,142,119,249,111,79,120,249,121,249,228,88,67,91,89,96,218,99,24,101,109,101,152,102,122,249,74,105,35,106,11,109,1,112,108,113,210,117,13,118,179,121,112,122,123,249,138,127,124,249,68,137,125,249,147,139,192,145,125,150,126,249,10,153,4,87,161,95,188,101,1,111,0,118,166,121,158,138,173,153,90,155,108,159,4,81,182,97,145,98,141,106,198,129,67,80,48,88,102,95,9,113,0,138,250,138,124,91,22,134,250,79,60,81,180,86,68,89,169,99,249,109,170,93,109,105,134,81,136,78,89,79,127,249,128,249,129,249,130,89,130,249,131,249,95,107,93,108,132,249,181,116,22,121,133,249,7,130,69,130,57,131,63,143,93,143,134,249,24,153,135,249,136,249,137,249,166,78,138,249,223,87,121,95,19,102,139,249,140,249,171,117,121,126,111,139,141,249,6,144,91,154,165,86,39,88,248,89,31,90,180,91,142,249,246,94,143,249,144,249,80,99,59,99,145,249,61,105,135,108,191,108,142,109,147,109,245,109,20,111,146,249,223,112,54,113,89,113,147,249,195,113,213,113,148,249,79,120,111,120,149,249,117,123,227,125,150,249,47,126,151,249,77,136,223,142,152,249,153,249,154,249,91,146,155,249,246,156,156,249,157,249,158,249,133,96,133,109,159,249,177,113,160,249,161,249,177,149,173,83,162,249,163,249,164,249,211,103,165,249,142,112,48,113,48,116,118,130,210,130,166,249,187,149,229,154,125,158,196,102,167,249,193,113,73,132,168,249,169,249,75,88,170,249,171,249,184,93,113,95,172,249,32,102,142,102,121,105,174,105,56,108,243,108,54,110,65,111,218,111,27,112,47,112,80,113,223,113,112,115,173,249,91,116,174,249,212,116,200,118,78,122,147,126,175,249,176,249,241,130,96,138,206,143,177,249,72,147,178,249,25,151,179,249,180,249,66,78,42,80,181,249,8,82,225,83,243,102,109,108,202,111,10,115,127,119,98,122,174,130,221,133,2,134,182,249,212,136,99,138,125,139,107,140,183,249,179,146,184,249,19,151,16,152,148,78,13,79,201,79,178,80,72,83,62,84,51,84,218,85,98,88,186,88,103,89,27,90,228,91,159,96,185,249,202,97,86,101,255,101,100,102,167,104,90,108,179,111,207,112,172,113,82,115,125,123,8,135,164,138,50,156,7,159,75,92,131,108,68,115,137,115,58,146,171,110,101,116,31,118,105,122,21,126,10,134,64,81,197,88,193,100,238,116,21,117,112,118,193,127,149,144,205,150,84,153,38,110,230,116,169,122,170,122,229,129,217,134,120,135,27,138,73,90,140,91,155,91,161,104,0,105,99,109,169,115,19,116,44,116,151,120,233,125,235,127,24,129,85,129,158,131,76,140,46,150,17,152,240,102,128,95,250,101,137,103,106,108,139,115,45,80,3,90,106,107,238,119,22,89,108,93,205,93,37,115,79,117,186,249,187,249,229,80,249,81,47,88,45,89,150,89,218,89,229,91,188,249,189,249,162,93,215,98,22,100,147,100,254,100,190,249,220,102,191,249,72,106,192,249,255,113,100,116,193,249,136,122],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+185458);allocate([175,122,71,126,94,126,0,128,112,129,194,249,239,135,129,137,32,139,89,144,195,249,128,144,82,153,126,97,50,107,116,109,31,126,37,137,177,143,209,79,173,80,151,81,199,82,199,87,137,88,185,91,184,94,66,97,149,105,140,109,103,110,182,110,148,113,98,116,40,117,44,117,115,128,56,131,201,132,10,142,148,147,222,147,196,249,142,78,81,79,118,80,42,81,200,83,203,83,243,83,135,91,211,91,36,92,26,97,130,97,244,101,91,114,151,115,64,116,194,118,80,121,145,121,185,121,6,125,189,127,139,130,213,133,94,134,194,143,71,144,245,144,234,145,133,150,232,150,233,150,214,82,103,95,237,101,49,102,47,104,92,113,54,122,193,144,10,152,145,78,197,249,82,106,158,107,144,111,137,113,24,128,184,130,83,133,75,144,149,150,242,150,251,151,26,133,49,155,144,78,138,113,196,150,67,81,159,83,225,84,19,87,18,87,163,87,155,90,196,90,195,91,40,96,63,97,244,99,133,108,57,109,114,110,144,110,48,114,63,115,87,116,209,130,129,136,69,143,96,144,198,249,98,150,88,152,27,157,8,103,138,141,94,146,77,79,73,80,222,80,113,83,13,87,212,89,1,90,9,92,112,97,144,102,45,110,50,114,75,116,239,125,195,128,14,132,102,132,63,133,95,135,91,136,24,137,2,139,85,144,203,151,79,155,115,78,145,79,18,81,106,81,199,249,47,85,169,85,122,91,165,91,124,94,125,94,190,94,160,96,223,96,8,97,9,97,196,99,56,101,9,103,200,249,212,103,218,103,201,249,97,105,98,105,185,108,39,109,202,249,56,110,203,249,225,111,54,115,55,115,204,249,92,116,49,117,205,249,82,118,206,249,207,249,173,125,254,129,56,132,213,136,152,138,219,138,237,138,48,142,66,142,74,144,62,144,122,144,73,145,201,145,110,147,208,249,209,249,9,88,210,249,211,107,137,128,178,128,211,249,212,249,65,81,107,89,57,92,213,249,214,249,100,111,167,115,228,128,7,141,215,249,23,146,143,149,216,249,217,249,218,249,219,249,127,128,14,98,28,112,104,125,141,135,220,249,160,87,105,96,71,97,183,107,190,138,128,146,177,150,89,78,31,84,235,109,45,133,112,150,243,151,238,152,214,99,227,108,145,144,221,81,201,97,186,129,249,157,157,79,26,80,0,81,156,91,15,97,255,97,236,100,5,105,197,107,145,117,227,119,169,127,100,130,143,133,251,135,99,136,188,138,112,139,171,145,140,78,229,78,10,79,221,249,222,249,55,89,232,89,223,249,242,93,27,95,91,95,33,96,224,249,225,249,226,249,227,249,62,114,229,115,228,249,112,117,205,117,229,249,251,121,230,249,12,128,51,128,132,128,225,130,81,131,231,249,232,249,189,140,179,140,135,144,233,249,234,249,244,152,12,153,235,249,236,249,55,112,202,118,202,127,204,127,252,127,26,139,186,78,193,78,3,82,112,83,237,249,189,84,224,86,251,89,197,91,21,95,205,95,110,110,238,249,239,249,106,125,53,131,240,249,147,134,141,138,241,249,109,151,119,151,242,249,243,249,0,78,90,79,126,79,249,88,229,101,162,110,56,144,176,147,185,153,251,78,236,88,138,89,217,89,65,96,244,249,245,249,20,122,246,249,79,131,195,140,101,81,68,83,247,249,248,249,249,249,205,78,105,82,85,91,191,130,212,78,58,82,168,84,201,89,255,89,80,91,87,91,92,91,99,96,72,97,203,110,153,112,110,113,134,115,247,116,181,117,193,120,43,125,5,128,234,129,40,131,23,133,201,133,238,138,199,140,204,150,92,79,250,82,188,86,171,101,40,102,124,112,184,112,53,114,189,125,141,130,76,145,192,150,114,157,113,91,231,104,152,107,122,111,222,118,145,92,171,102,91,111,180,123,42,124,54,136,220,150,8,78,215,78,32,83,52,88,187,88,239,88,108,89,7,92,51,94,132,94,53,95,140,99,178,102,86,103,31,106,163,106,12,107,63,111,70,114,250,249,80,115,139,116,224,122,167,124,120,129,223,129,231,129,138,131,108,132,35,133,148,133,207,133,221,136,19,141,172,145,119,149,156,150,141,81,201,84,40,87,176,91,77,98,80,103,61,104,147,104,61,110,211,110,125,112,33,126,193,136,161,140,9,143,75,159,78,159,45,114,143,123,205,138,26,147,71,79,78,79,50,81,128,84,208,89,149,94,181,98,117,103,110,105,23,106,174,108,26,110,217,114,42,115,189,117,184,123,53,125,231,130,249,131,87,132,247,133,91,138,175,140,135,142,25,144,184,144,206,150,95,159,227,82,10,84,225,90,194,91,88,100,117,101,244,110,196,114,251,249,132,118,77,122,27,123,77,124,62,126,223,127,123,131,43,139,202,140,100,141,225,141,95,142,234,143,249,143,105,144,209,147,67,79,122,79,179,80,104,81,120,81,77,82,106,82,97,88,124,88,96,89,8,92,85,92,219,94,155,96,48,98,19,104,191,107,8,108,177,111,78,113,32,116,48,117,56,117,81,117,114,118,76,123,139,123,173,123,198,123,143,126,110,138,62,143,73,143,63,146,147,146,34,147,43,148,251,150,90,152,107,152,30,153,7,82,42,98,152,98,89,109,100,118,202,122,192,123,118,125,96,83,190,92,151,94,56,111,185,112,152,124,17,151,142,155,222,158,165,99,122,100,118,135,1,78,149,78,173,78,92,80,117,80,72,84,195,89,154,91,64,94,173,94,247,94,129,95,197,96,58,99,63,101,116,101,204,101,118,102,120,102,254,103,104,105,137,106,99,107,64,108,192,109,232,109,31,110,94,110,30,112,161,112,142,115,253,115,58,117,91,119,135,120,142,121,11,122,125,122,190,124,142,125,71,130,2,138,234,138,158,140,45,145,74,145,216,145,102,146,204,146,32,147,6,151,86,151,92,151,2,152,14,159,54,82,145,82,124,85,36,88,29,94,31,95,140,96,208,99,175,104,223,111,109,121,44,123,205,129,186,133,253,136,248,138,68,142,141,145,100,150,155,150,61,151,76,152,74,159,206,79,70,81,203,81,169,82,50,86,20,95,107,95,170,99,205,100,233,101,65,102,250,102,249,102,29,103,157,104,215,104,253,105,21,111,110,111,103,113,229,113,42,114,170,116,58,119,86,121,90,121,223,121,32,122,149,122,151,124,223,124,68,125,112,126,135,128,251,133,164,134,84,138,191,138,153,141,129,142,32,144,109,144,227,145,59,150,213,150,229,156,207,101,7,124,179,141,195,147,88,91,10,92,82,83,217,98,29,115,39,80,151,91,158,95,176,96,107,97,213,104,217,109,46,116,46,122,66,125,156,125,49,126,107,129,42,142,53,142,126,147,24,148,80,79,80,87,230,93,167,94,43,99,106,127,59,78,79,79,143,79,90,80,221,89,196,128,106,84,104,84,254,85,79,89,153,91,222,93,218,94,93,102,49,103,241,103,42,104,232,108,50,109,74,110,141,111,183,112,224,115,135,117,76,124,2,125,44,125,162,125,31,130,219,134,59,138,133,138,112,141,138,142,51,143,49,144,78,145,82,145,68,148,208,153,249,122,165,124,202,79,1,81,198,81,200,87,239,91,251,92,89,102,61,106,90,109,150,110,236,111,12,113,111,117,227,122,34,136,33,144,117,144,203,150,255,153,1,131,45,78,242,78,70,136,205,145,125,83,219,106,107,105,65,108,122,132,158,88,142,97,254,102,239,98,221,112,17,117,199,117,82,126,184,132,73,139,8,141,75,78,234,83,171,84,48,87,64,87,215,95,1,99,7,99,111,100,47,101,232,101,122,102,157,103,179,103,98,107,96,108,154,108,44,111,229,119,37,120,73,121,87,121,25,125,162,128,2,129,243,129,157,130,183,130,24,135,140,138,252,249,4,141,190,141,114,144,244,118,25,122,55,122,84,126,119,128,7,85,212,85,117,88,47,99,34,100,73,102,75,102,109,104,155,105,132,107,37,109,177,110,205,115,104,116,161,116,91,117,185,117,225,118,30,119,139,119,230,121,9,126,29,126,251,129,47,133,151,136,58,138,209,140,235,142,176,143,50,144,173,147,99,150,115,150,7,151,132,79,241,83,234,89,201,90,25,94,78,104,198,116,190,117,233,121,146,122,163,129,237,134,234,140,204,141,237,143,159,101,21,103,253,249,247,87,87,111,221,125,47,143,246,147,198,150,181,95,242,97,132,111,20,78,152,79,31,80,201,83,223,85,111,93,238,93,33,107,100,107,203,120,154,123,254,249,73,142,202,142,110,144,73,99,62,100,64,119,132,122,47,147,127,148,106,159,176,100,175,111,230,113,168,116,218,116,196,122,18,124,130,126,178,124,152,126,154,139,10,141,125,148,16,153,76,153,57,82,223,91,230,100,45,103,46,125,237,80,195,83,121,88,88,97,89,97,250,97,172,101,217,122,146,139,150,139,9,80,33,80,117,82,49,85,60,90,224,94,112,95,52,97,94,101,12,102,54,102,162,102,205,105,196,110,50,111,22,115,33,118,147,122,57,129,89,130,214,131,188,132,181,80,240,87,192,91,232,91,105,95,161,99,38,120,181,125,220,131,33,133,199,145,245,145,138,81,245,103,86,123,172,140,196,81,187,89,189,96,85,134,28,80,255,249,84,82,58,92,125,97,26,98,211,98,242,100,165,101,204,110,32,118,10,129,96,142,95,150,187,150,223,78,67,83,152,85,41,89,221,93,197,100,201,108,250,109,148,115,127,122,27,130,166,133,228,140,16,142,119,144,231,145,225,149,33,150,198,151,248,81,242,84,134,85,185,95,164,100,136,111,180,125,31,143,77,143,53,148,201,80,22,92,190,108,251,109,27,117,187,119,61,124,100,124,121,138,194,138,30,88,190,89,22,94,119,99,82,114,138,117,107,119,220,138,188,140,18,143,243,94,116,102,248,109,125,128,193,131,203,138,81,151,214,155,0,250,67,82,255,102,149,109,239,110,224,125,230,138,46,144,94,144,212,154,29,82,127,82,232,84,148,97,132,98,219,98,162,104,18,105,90,105,53,106,146,112,38,113,93,120,1,121,14,121,210,121,13,122,150,128,120,130,213,130,73,131,73,133,130,140,133,141,98,145,139,145,174,145,195,79,209,86,237,113,215,119,0,135,248,137,248,91,214,95,81,103,168,144,226,83,90,88,245,91,164,96,129,97,96,100,61,126,112,128,37,133,131,146,174,100,172,80,20,93,0,103,156,88,189,98,168,99,14,105,120,105,30,106,107,110,186,118,203,121,187,130,41,132,207,138,168,141,253,143,18,145,75,145,156,145,16,147,24,147,154,147,219,150,54,154,13,156,17,78,92,117,93,121,250,122,81,123,201,123,46,126,196,132,89,142,116,142,248,142,16,144,37,102,63,105,67,116,250,81,46,103,220,158,69,81,224,95,150,108,242,135,93,136,119,136,180,96,181,129,3,132,5,141,214,83,57,84,52,86,54,90,49,92,138,112,224,127,90,128,6,129,237,129,163,141,137,145,95,154,242,157,116,80,196,78,160,83,251,96,44,110,100,92,136,79,36,80,228,85,217,92,95,94,101,96,148,104,187,108,196,109,190,113,212,117,244,117,97,118,26,122,73,122,199,125,251,125,110,127,244,129,169,134,28,143,201,150,179,153,82,159,71,82,197,82,237,152,170,137,3,78,210,103,6,111,181,79,226,91,149,103,136,108,120,109,27,116,39,120,221,145,124,147,196,135,228,121,49,122,235,95,214,78,164,84,62,85,174,88,165,89,240,96,83,98,214,98,54,103,85,105,53,130,64,150,177,153,221,153,44,80,83,83,68,85,124,87,1,250,88,98,2,250,226,100,107,102,221,103,193,111,239,111,34,116,56,116,23,138,56,148,81,84,6,86,102,87,72,95,154,97,78,107,88,112,173,112,187,125,149,138,106,89,43,129,162,99,8,119,61,128,170,140,84,88,45,100,187,105,149,91,17,94,111,110,3,250,105,133,76,81,240,83,42,89,32,96,75,97,134,107,112,108,240,108,30,123,206,128,212,130,198,141,176,144,177,152,4,250,199,100,164,111,145,100,4,101,78,81,16,84,31,87,14,138,95,97,118,104,5,250,219,117,82,123,113,125,26,144,6,88,204,105,127,129,42,137,0,144,57,152,120,80,87,89,172,89,149,98,15,144,42,155,93,97,121,114,214,149,97,87,70,90,244,93,138,98,173,100,250,100,119,103,226,108,62,109,44,114,54,116,52,120,119,127,173,130,219,141,23,152,36,82,66,87,127,103,72,114,227,116,169,140,166,143,17,146,42,150,107,81,237,83,76,99,105,79,4,85,150,96,87,101,155,108,127,109,76,114,253,114,23,122,135,137,157,140,109,95,142,111,249,112,168,129,14,97,191,79,79,80,65,98,71,114,199,123,232,125,233,127,77,144,173,151,25,154,182,140,106,87,115,94,176,103,13,132,85,138,32,84,22,91,99,94,226,94,10,95,131,101,186,128,61,133,137,149,91,150,72,79,5,83,13,83,15,83,134,84,250,84,3,87,3,94,22,96,155,98,177,98,85,99,6,250,225,108,102,109,177,117,50,120,222,128,47,129,222,130,97,132,178,132,141,136,18,137,11,144,234,146,253,152,145,155,69,94,180,102,221,102,17,112,6,114,7,250,245,79,125,82,106,95,83,97,83,103,25,106,2,111,226,116,104,121,104,136,121,140,199,152,196,152,67,154,193,84,31,122,83,105,247,138,74,140,168,152,174,153,124,95,171,98,178,117,174,118,171,136,127,144,66,150,57,83,60,95,197,95,204,108,204,115,98,117,139,117,70,123,254,130,157,153,79,78,60,144,11,78,85,79,166,83,15,89,200,94,48,102,179,108,85,116,119,131,102,135,192,140,80,144,30,151,21,156,209,88,120,91,80,134,20,139,180,157,210,91,104,96,141,96,241,101,87,108,34,111,163,111,26,112,85,127,240,127,145,149,146,149,80,150,211,151,114,82,68,143,253,81,43,84,184,84,99,85,138,85,187,106,181,109,216,125,102,130,156,146,119,150,121,158,8,84,200,84,210,118,228,134,164,149,212,149,92,150,162,78,9,79,238,89,230,90,247,93,82,96,151,98,109,103,65,104,134,108,47,110,56,127,155,128,42,130,8,250,9,250,5,152,165,78,85,80,179,84,147,87,90,89,105,91,179,91,200,97,119,105,119,109,35,112,249,135,227,137,114,138,231,138,130,144,237,153,184,154,190,82,56,104,22,80,120,94,79,103,71,131,76,136,171,78,17,84,174,86,230,115,21,145,255,151,9,153,87,153,153,153,83,86,159,88,91,134,49,138,178,97,246,106,123,115,210,142,71,107,170,150,87,154,85,89,0,114,107,141,105,151,212,79,244,92,38,95,248,97,91,102,235,108,171,112,132,115,185,115,254,115,41,119,77,119,67,125,98,125,35,126,55,130,82,136,10,250,226,140,73,146,111,152,81,91,116,122,64,136,1,152,204,90,224,79,84,83,62,89,253,92,62,99,121,109,249,114,5,129,7,129,162,131,207,146,48,152,168,78,68,81,17,82,139,87,98,95,194,108,206,110,5,112,80,112,175,112,146,113,233,115,105,116,74,131,162,135,97,136,8,144,162,144,163,147,168,153,110,81,87,95,224,96,103,97,179,102,89,133,74,142,175,145,139,151,78,78,146,78,124,84,213,88,250,88,125,89,181,92,39,95,54,98,72,98,10,102,103,102,235,107,105,109,207,109,86,110,248,110,148,111,224,111,233,111,93,112,208,114,37,116,90,116,224,116,147,118,92,121,202,124,30,126,225,128,166,130,107,132,191,132,78,134,95,134,116,135,119,139,106,140,172,147,0,152,101,152,209,96,22,98,119,145,90,90,15,102,247,109,62,110,63,116,66,155,253,95,218,96,15,123,196,84,24,95,94,108,211,108,42,109,216,112,5,125,121,134,12,138,59,157,22,83,140,84,5,91,58,106,107,112,117,117,141,121,190,121,177,130,239,131,113,138,65,139,168,140,116,151,11,250,244,100,43,101,186,120,187,120,107,122,56,78,154,85,80,89,166,91,123,94,163,96,219,99,97,107,101,102,83,104,25,110,101,113,176,116,8,125,132,144,105,154,37,156,59,109,209,110,62,115,65,140,202,149,240,81,76,94,168,95,77,96,246,96,48,97,76,97,67,102,68,102,165,105,193,108,95,110,201,110,98,111,76,113,156,116,135,118,193,123,39,124,82,131,87,135,81,144,141,150,195,158,47,83,222,86,251,94,138,95,98,96,148,96,247,97,102,102,3,103,156,106,238,109,174,111,112,112,106,115,106,126,190,129,52,131,212,134,168,138,196,140,131,82,114,115,150,91,107,106,4,148,238,84,134,86,93,91,72,101,133,101,201,102,159,104,141,109,198,109,59,114,180,128,117,145,77,154,175,79,25,80,154,83,14,84,60,84,137,85,197,85,63,94,140,95,61,103,102,113,221,115,5,144,219,82,243,82,100,88,206,88,4,113,143,113,251,113,176,133,19,138,136,102,168,133,167,85,132,102,74,113,49,132,73,83,153,85,193,107,89,95,189,95,238,99,137,102,71,113,241,138,29,143,190,158,17,79,58,100,203,112,102,117,103,134,100,96,78,139,248,157,71,81,246,81,8,83,54,109,248,128,209,158,21,102,35,107,152,112,213,117,3,84,121,92,7,125,22,138,32,107,61,107,70,107,56,84,112,96,61,109,213,127,8,130,214,80,222,81,156,85,107,86,205,86,236,89,9,91,12,94,153,97,152,97,49,98,94,102,230,102,153,113,185,113,186,113,167,114,167,121,0,122,178,127,112,138,0,0,1,0,160,0,167,0,168,0,169,0,175,0,176,0,178,0,183,0,184,0,198,0,215,0,216,0,230,0,247,0,248,0,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,46,1,47,1,48,1,49,1,52,1,53,1,54,1,55,1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,74,1,75,1,76,1,77,1,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,107,1,108,1,109,1,110,1,111,1,112,1,113,1,114,1,115,1,116,1,117,1,118,1,119,1,120,1,121,1,122,1,123,1,124,1,125,1,126,1,146,1,160,1,161,1,175,1,176,1,24,2,25,2,26,2,27,2,198,2,199,2,216,2,217,2,219,2,220,2,221,2,0,3,1,3,3,3,9,3,35,3,122,3,132,3,133,3,134,3,136,3,137,3,138,3,140,3,142,3,143,3,144,3,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154,3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,170,3,171,3,172,3,173,3,174,3,175,3,176,3,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,194,3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,202,3,203,3,204,3,205,3,206,3,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,14,4,15,4,16,4,17,4,18,4,19,4,20,4,21,4,22,4,23,4,24,4,25,4,26,4,27,4,28,4,29,4,30,4,31,4,32,4,33,4,34,4,35,4,36,4,37,4,38,4,39,4,40,4,41,4,42,4,43,4,44,4,45,4,46,4,47,4,48,4,49,4,50,4,51,4,52,4,53,4,54,4,55,4,56,4,57,4,58,4,59,4,60,4,61,4,62,4,63,4,64,4,65,4,66,4,67,4,68,4,69,4,70,4,71,4,72,4,73,4,74,4,75,4,76,4,77,4,78,4,79,4,81,4,82,4,83,4,84,4,85,4,86,4,87,4,88,4,89,4,90,4,91,4,92,4,94,4,95,4,144,4,145,4,176,5,177,5,178,5,179,5,180,5,181,5,182,5,183,5,184,5,185,5,187,5,188,5,189,5,190,5,191,5,192,5,193,5,194,5,195,5,208,5,209,5,210,5,211,5,212,5,213,5,214,5,215,5,216,5,217,5,218,5,219,5,220,5,221,5,222,5,223,5,224,5,225,5,226,5,227,5,228,5,229,5,230,5,231,5,232,5,233,5,234,5,240,5,241,5,242,5,243,5,244,5,12,6,27,6,31,6,33,6,34,6,35,6,36,6,37,6,38,6,39,6,40,6,41,6,42,6,43,6,44,6,45,6,46,6,47,6,48,6,49,6,50,6,51,6,52,6,53,6,54,6,55,6,56,6,57,6,58,6,64,6,65,6,66,6,67,6,68,6,69,6,70,6,71,6,72,6,73,6,74,6,75,6,76,6,77,6,78,6,79,6,80,6,81,6,82,6,121,6,126,6,134,6,136,6,145,6,152,6,169,6,175,6,186,6,190,6,193,6,210,6,1,14,2,14,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,14,20,14,21,14,22,14,23,14,24,14,25,14,26,14,27,14,28,14,29,14,30,14,31,14,32,14,33,14,34,14,35,14,36,14,37,14,38,14,39,14,40,14,41,14,42,14,43,14,44,14,45,14,46,14,47,14,48,14,49,14,50,14,51,14,52,14,53,14,54,14,55,14,56,14,57,14,58,14,63,14,64,14,65,14,66,14,67,14,68,14,69,14,70,14,71,14,72,14,73,14,74,14,75,14,76,14,77,14,78,14,79,14,80,14,81,14,82,14,83,14,84,14,85,14,86,14,87,14,88,14,89,14,90,14,91,14,2,30,3,30,10,30,11,30,30,30,31,30,64,30,65,30,86,30,87,30,96,30,97,30,106,30,107,30,128,30,129,30,130,30,131,30,132,30,133,30,242,30,243,30,12,32,13,32,14,32,15,32,19,32,20,32,21,32,23,32,24,32,25,32,26,32,28,32,29,32,30,32,32,32,33,32,34,32,38,32,48,32,57,32,58,32,170,32,171,32,172,32,175,32,22,33,34,33,25,34,26,34,72,34,100,34,101,34,32,35,33,35,0,37,2,37,12,37,16,37,20,37,24,37,28,37,36,37,44,37,52,37,60,37,80,37,81,37,82,37,83,37,84,37,85,37,86,37,87,37,88,37,89,37,90,37,91,37,92,37,93,37,94,37,95,37,96,37,97,37,98,37,99,37,100,37,101,37,102,37,103,37,104,37,105,37,106,37,107,37,108,37,128,37,132,37,136,37,140,37,144,37,145,37,146,37,147,37,160,37,0,0,0,0,0,0,1,0,47,100,101,118,47,108,111,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,3,32,2,32,2,32,2,32,2,32,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,1,96,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,213,8,213,8,213,8,213,8,213,8,213,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,4,192,4,192,4,192,4,192,4,192,4,192,8,214,8,214,8,214,8,214,8,214,8,214,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,4,192,4,192,4,192,4,192,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,0,49,1,83,0,127,1,48,1,105,0,120,1,255,0,129,1,83,2,130,1,131,1,132,1,133,1,134,1,84,2,135,1,136,1,137,1,86,2,138,1,87,2,139,1,140,1,142,1,221,1,143,1,89,2,144,1,91,2,145,1,146,1,147,1,96,2,148,1,99,2,150,1,105,2,151,1,104,2,152,1,153,1,156,1,111,2,157,1,114,2,159,1,117,2,166,1,128,2,167,1,168,1,169,1,131,2,172,1,173,1,174,1,136,2,175,1,176,1,177,1,138,2,178,1,139,2,183,1,146,2,184,1,185,1,188,1,189,1,196,1,198,1,196,1,197,1,197,1,198,1,199,1,201,1,199,1,200,1,200,1,201,1,202,1,204,1,202,1,203,1,203,1,204,1,241,1,243,1,241,1,242,1,242,1,243,1,244,1,245,1,246,1,149,1,247,1,191,1,32,2,158,1,134,3,172,3,136,3,173,3,137,3,174,3,138,3,175,3,140,3,204,3,142,3,205,3,143,3,206,3,153,3,69,3,153,3,190,31,163,3,194,3,247,3,248,3,250,3,251,3,96,30,155,30,223,0,223,0,158,30,223,0,89,31,81,31,91,31,83,31,93,31,85,31,95,31,87,31,188,31,179,31,204,31,195,31,236,31,229,31,252,31,243,31,58,2,101,44,59,2,60,2,61,2,154,1,62,2,102,44,65,2,66,2,67,2,128,1,68,2,137,2,69,2,140,2,244,3,184,3,249,3,242,3,253,3,123,3,254,3,124,3,255,3,125,3,192,4,207,4,38,33,201,3,42,33,107,0,43,33,229,0,50,33,78,33,131,33,132,33,96,44,97,44,98,44,107,2,99,44,125,29,100,44,125,2,109,44,81,2,110,44,113,2,111,44,80,2,112,44,82,2,114,44,115,44,117,44,118,44,126,44,63,2,127,44,64,2,242,44,243,44,125,167,121,29,139,167,140,167,141,167,101,2,170,167,102,2,199,16,39,45,205,16,45,45,118,3,119,3,156,3,181,0,146,3,208,3,152,3,209,3,166,3,213,3,160,3,214,3,154,3,240,3,161,3,241,3,149,3,245,3,207,3,215,3,0,0,0,0,65,0,32,26,192,0,32,31,0,1,1,47,50,1,1,5,57,1,1,15,74,1,1,45,121,1,1,5,112,3,1,3,145,3,32,17,163,3,32,9,0,4,80,16,16,4,32,32,96,4,1,33,138,4,1,53,193,4,1,13,208,4,1,63,20,5,1,19,49,5,48,38,160,1,1,5,179,1,1,3,205,1,1,15,222,1,1,17,248,1,1,39,34,2,1,17,216,3,1,23,0,30,1,149,160,30,1,95,8,31,248,8,24,31,248,6,40,31,248,8,56,31,248,8,72,31,248,6,104,31,248,8,136,31,248,8,152,31,248,8,168,31,248,8,184,31,248,2,186,31,182,2,200,31,170,4,216,31,248,2,218,31,156,2,232,31,248,2,234,31,144,2,248,31,128,2,250,31,130,2,70,2,1,9,16,5,1,3,96,33,16,16,0,44,48,47,103,44,1,5,128,44,1,99,235,44,1,3,64,166,1,45,128,166,1,23,34,167,1,13,50,167,1,61,121,167,1,3,126,167,1,9,144,167,1,3,160,167,1,9,33,255,32,26,0,0,0,0,0,32,0,64,2,0,0,1,0,2,0,4,0,8,4,0,0,16,1,0,0,12,4,12,99,114,101,97,116,105,111,110,0,73,78,86,65,76,73,68,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,69,114,114,111,114,69,0,78,51,100,101,118,57,69,120,99,101,112,116,105,111,110,69,0,78,53,98,111,111,115,116,57,101,120,99,101,112,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,67,111,109,112,105,108,101,114,69,114,114,111,114,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,49,73,110,116,101,114,110,97,108,67,111,109,112,105,108,101,114,69,114,114,111,114,69,0,69,114,114,111,114,0,85,110,107,110,111,119,110,32,101,120,99,101,112,116,105,111,110,32,100,117,114,105,110,103,32,99,111,109,112,105,108,97,116,105,111,110,46,0,69,120,99,101,112,116,105,111,110,32,100,117,114,105,110,103,32,99,111,109,112,105,108,97,116,105,111,110,58,32,0,73,110,116,101,114,110,97,108,32,99,111,109,112,105,108,101,114,32,101,114,114,111,114,0,67,111,109,112,105,108,101,114,32,101,114,114,111,114,0,101,114,114,111,114,115,0,98,121,116,101,99,111,100,101,0,114,117,110,116,105,109,101,66,121,116,101,99,111,100,101,0,111,112,99,111,100,101,115,0,102,117,110,99,116,105,111,110,72,97,115,104,101,115,0,103,97,115,69,115,116,105,109,97,116,101,115,0,115,114,99,109,97,112,0,115,114,99,109,97,112,82,117,110,116,105,109,101,0,85,110,107,110,111,119,110,32,101,120,99,101,112,116,105,111,110,32,119,104,105,108,101,32,103,101,110,101,114,97,116,105,110,103,32,99,111,110,116,114,97,99,116,32,100,97,116,97,32,111,117,116,112,117,116,46,0,102,111,114,109,97,108,0,85,110,107,110,111,119,110,32,101,120,99,101,112,116,105,111,110,32,119,104,105,108,101,32,103,101,110,101,114,97,116,105,110,103,32,102,111,114,109,97,108,32,109,101,116,104,111,100,32,111,117,116,112,117,116,46,0,115,111,117,114,99,101,76,105,115,116,0,115,111,117,114,99,101,115,0,65,83,84,0,85,110,107,110,111,119,110,32,101,120,99,101,112,116,105,111,110,32,119,104,105,108,101,32,103,101,110,101,114,97,116,105,110,103,32,115,111,117,114,99,101,32,110,97,109,101,32,111,117,116,112,117,116,46,0,123,34,101,114,114,111,114,115,34,58,91,34,85,110,107,110,111,119,110,32,101,114,114,111,114,32,119,104,105,108,101,32,103,101,110,101,114,97,116,105,110,103,32,74,83,79,78,46,34,93,125,0,69,114,114,111,114,32,112,97,114,115,105,110,103,32,105,110,112,117,116,32,74,83,79,78,58,32,0,78,83,116,51,95,95,49,49,57,98,97,115,105,99,95,111,115,116,114,105,110,103,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,105,110,103,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,52,84,121,112,101,69,0,78,53,98,111,111,115,116,49,50,110,111,110,99,111,112,121,97,98,108,101,95,49,49,110,111,110,99,111,112,121,97,98,108,101,69,0,78,83,116,51,95,95,49,50,51,101,110,97,98,108,101,95,115,104,97,114,101,100,95,102,114,111,109,95,116,104,105,115,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,52,84,121,112,101,69,69,69,0,76,105,116,101,114,97,108,32,118,97,108,117,101,32,114,101,113,117,101,115,116,101,100,32,102,111,114,32,116,121,112,101,32,119,105,116,104,111,117,116,32,108,105,116,101,114,97,108,115,46,0,118,105,114,116,117,97,108,32,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,58,58,108,105,116,101,114,97,108,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,76,105,116,101,114,97,108,32,42,41,32,99,111,110,115,116,0,47,115,114,99,47,115,111,108,99,47,46,46,47,108,105,98,115,111,108,105,100,105,116,121,47,97,115,116,47,84,121,112,101,115,46,104,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,49,73,110,116,101,114,110,97,108,67,111,109,112,105,108,101,114,69,114,114,111,114,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,98,97,115,101,69,0,78,53,98,111,111,115,116,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,49,49,116,97,103,95,99,111,109,109,101,110,116,69,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,51,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,51,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,53,101,114,114,111,114,95,105,110,102,111,95,98,97,115,101,69,0,80,78,51,100,101,118,49,49,116,97,103,95,99,111,109,109,101,110,116,69,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,49,49,116,97,103,95,99,111,109,109,101,110,116,69,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,53,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,53,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,69,69,69,69,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,53,115,112,95,99,111,117,110,116,101,100,95,98,97,115,101,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,50,53,101,114,114,111,114,95,105,110,102,111,95,99,111,110,116,97,105,110,101,114,95,105,109,112,108,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,50,48,101,114,114,111,114,95,105,110,102,111,95,99,111,110,116,97,105,110,101,114,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,55,99,111,109,112,105,108,101,82,75,78,83,95,51,109,97,112,73,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,83,56,95,78,83,95,52,108,101,115,115,73,83,56,95,69,69,78,83,54,95,73,78,83,95,52,112,97,105,114,73,75,83,56,95,83,56,95,69,69,69,69,69,69,98,80,70,118,80,75,99,80,80,99,83,76,95,69,69,51,36,95,48,78,83,54,95,73,83,79,95,69,69,70,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,67,111,109,112,105,108,101,114,83,116,97,99,107,49,52,82,101,97,100,70,105,108,101,82,101,115,117,108,116,69,82,83,67,95,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,67,111,109,112,105,108,101,114,83,116,97,99,107,49,52,82,101,97,100,70,105,108,101,82,101,115,117,108,116,69,82,75,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,69,69,69,0,70,105,108,101,32,110,111,116,32,102,111,117,110,100,46,0,90,55,99,111,109,112,105,108,101,82,75,78,83,116,51,95,95,49,51,109,97,112,73,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,83,54,95,78,83,95,52,108,101,115,115,73,83,54,95,69,69,78,83,52,95,73,78,83,95,52,112,97,105,114,73,75,83,54,95,83,54,95,69,69,69,69,69,69,98,80,70,118,80,75,99,80,80,99,83,74,95,69,69,51,36,95,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,55,99,111,109,112,105,108,101,82,75,78,83,95,51,109,97,112,73,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,83,56,95,78,83,95,52,108,101,115,115,73,83,56,95,69,69,78,83,54,95,73,78,83,95,52,112,97,105,114,73,75,83,56,95,83,56,95,69,69,69,69,69,69,98,80,70,118,80,75,99,80,80,99,83,76,95,69,69,51,36,95,49,78,83,54,95,73,83,79,95,69,69,70,82,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,83,99,97,110,110,101,114,69,82,83,67,95,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,82,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,83,99,97,110,110,101,114,69,82,75,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,69,69,69,0,90,55,99,111,109,112,105,108,101,82,75,78,83,116,51,95,95,49,51,109,97,112,73,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,83,54,95,78,83,95,52,108,101,115,115,73,83,54,95,69,69,78,83,52,95,73,78,83,95,52,112,97,105,114,73,75,83,54,95,83,54,95,69,69,69,69,69,69,98,80,70,118,80,75,99,80,80,99,83,74,95,69,69,51,36,95,49,0,85,110,107,110,111,119,110,32,101,120,99,101,112,116,105,111,110,46,0,84,104,114,111,119,32,108,111,99,97,116,105,111,110,32,117,110,107,110,111,119,110,32,40,99,111,110,115,105,100,101,114,32,117,115,105,110,103,32,66,79,79,83,84,95,84,72,82,79,87,95,69,88,67,69,80,84,73,79,78,41,10,0,41,58,32,0,84,104,114,111,119,32,105,110,32,102,117,110,99,116,105,111,110,32,0,40,117,110,107,110,111,119,110,41,0,68,121,110,97,109,105,99,32,101,120,99,101,112,116,105,111,110,32,116,121,112,101,58,32,0,115,116,100,58,58,101,120,99,101,112,116,105,111,110,58,58,119,104,97,116,58,32,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,54,116,104,114,101,97,100,95,100,97,116,97,95,98,97,115,101,69,0,78,53,98,111,111,115,116,50,51,101,110,97,98,108,101,95,115,104,97,114,101,100,95,102,114,111,109,95,116,104,105,115,73,78,83,95,54,100,101,116,97,105,108,49,54,116,104,114,101,97,100,95,100,97,116,97,95,98,97,115,101,69,69,69,0,78,53,98,111,111,115,116,49,56,116,104,114,101,97,100,95,105,110,116,101,114,114,117,112,116,101,100,69,0,98,111,111,115,116,58,58,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,58,58,100,111,95,119,97,105,116,95,117,110,116,105,108,32,102,97,105,108,101,100,32,105,110,32,112,116,104,114,101,97,100,95,99,111,110,100,95,116,105,109,101,100,119,97,105,116,0,78,53,98,111,111,115,116,54,115,121,115,116,101,109,49,50,115,121,115,116,101,109,95,101,114,114,111,114,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,49,53,99,111,110,100,105,116,105,111,110,95,101,114,114,111,114,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,49,53,99,111,110,100,105,116,105,111,110,95,101,114,114,111,114,69,69,69,0,78,53,98,111,111,115,116,49,53,99,111,110,100,105,116,105,111,110,95,101,114,114,111,114,69,0,98,111,111,115,116,32,117,110,105,113,117,101,95,108,111,99,107,32,104,97,115,32,110,111,32,109,117,116,101,120,0,98,111,111,115,116,32,117,110,105,113,117,101,95,108,111,99,107,32,100,111,101,115,110,39,116,32,111,119,110,32,116,104,101,32,109,117,116,101,120,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,49,48,108,111,99,107,95,101,114,114,111,114,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,49,48,108,111,99,107,95,101,114,114,111,114,69,69,69,0,78,53,98,111,111,115,116,49,48,108,111,99,107,95,101,114,114,111,114,69,0,78,53,98,111,111,115,116,49,54,116,104,114,101,97,100,95,101,120,99,101,112,116,105,111,110,69,0,98,111,111,115,116,58,32,109,117,116,101,120,32,108,111,99,107,32,102,97,105,108,101,100,32,105,110,32,112,116,104],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+195698);allocate([114,101,97,100,95,109,117,116,101,120,95,108,111,99,107,0,98,111,111,115,116,58,58,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,58,58,119,97,105,116,32,102,97,105,108,101,100,32,105,110,32,112,116,104,114,101,97,100,95,99,111,110,100,95,119,97,105,116,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,48,95,49,54,116,104,114,101,97,100,95,100,97,116,97,95,98,97,115,101,69,69,69,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,50,54,101,120,116,101,114,110,97,108,108,121,95,108,97,117,110,99,104,101,100,95,116,104,114,101,97,100,69,0,98,111,111,115,116,58,58,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,58,58,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,40,41,32,99,111,110,115,116,114,117,99,116,111,114,32,102,97,105,108,101,100,32,105,110,32,112,116,104,114,101,97,100,95,109,117,116,101,120,95,105,110,105,116,0,98,111,111,115,116,58,58,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,58,58,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,40,41,32,99,111,110,115,116,114,117,99,116,111,114,32,102,97,105,108,101,100,32,105,110,32,112,116,104,114,101,97,100,95,99,111,110,100,95,105,110,105,116,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,50,49,116,104,114,101,97,100,95,114,101,115,111,117,114,99,101,95,101,114,114,111,114,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,50,49,116,104,114,101,97,100,95,114,101,115,111,117,114,99,101,95,101,114,114,111,114,69,69,69,0,78,53,98,111,111,115,116,50,49,116,104,114,101,97,100,95,114,101,115,111,117,114,99,101,95,101,114,114,111,114,69,0,98,111,111,115,116,58,58,32,109,117,116,101,120,32,99,111,110,115,116,114,117,99,116,111,114,32,102,97,105,108,101,100,32,105,110,32,112,116,104,114,101,97,100,95,109,117,116,101,120,95,105,110,105,116,0,98,111,111,115,116,32,117,110,105,113,117,101,95,108,111,99,107,32,111,119,110,115,32,97,108,114,101,97,100,121,32,116,104,101,32,109,117,116,101,120,0,98,111,111,115,116,58,32,109,117,116,101,120,32,117,110,108,111,99,107,32,102,97,105,108,101,100,32,105,110,32,112,116,104,114,101,97,100,95,109,117,116,101,120,95,117,110,108,111,99,107,0,98,111,111,115,116,58,58,101,120,99,101,112,116,105,111,110,95,112,116,114,32,98,111,111,115,116,58,58,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,58,58,103,101,116,95,115,116,97,116,105,99,95,101,120,99,101,112,116,105,111,110,95,111,98,106,101,99,116,40,41,32,91,69,120,99,101,112,116,105,111,110,32,61,32,98,111,111,115,116,58,58,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,58,58,98,97,100,95,101,120,99,101,112,116,105,111,110,95,93,0,46,47,98,111,111,115,116,47,101,120,99,101,112,116,105,111,110,47,100,101,116,97,105,108,47,101,120,99,101,112,116,105,111,110,95,112,116,114,46,104,112,112,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,50,95,49,52,98,97,100,95,101,120,99,101,112,116,105,111,110,95,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,52,98,97,100,95,101,120,99,101,112,116,105,111,110,95,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,52,98,97,100,95,101,120,99,101,112,116,105,111,110,95,69,0,98,111,111,115,116,58,58,101,120,99,101,112,116,105,111,110,95,112,116,114,32,98,111,111,115,116,58,58,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,58,58,103,101,116,95,115,116,97,116,105,99,95,101,120,99,101,112,116,105,111,110,95,111,98,106,101,99,116,40,41,32,91,69,120,99,101,112,116,105,111,110,32,61,32,98,111,111,115,116,58,58,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,58,58,98,97,100,95,97,108,108,111,99,95,93,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,50,95,49,48,98,97,100,95,97,108,108,111,99,95,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,48,98,97,100,95,97,108,108,111,99,95,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,98,97,100,95,97,108,108,111,99,95,69,0,78,53,98,111,111,115,116,49,51,116,104,114,101,97,100,95,100,101,116,97,105,108,50,49,102,117,116,117,114,101,95,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,78,53,98,111,111,115,116,54,115,121,115,116,101,109,49,52,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,0,99,97,110,110,111,116,32,111,112,101,110,0,99,111,117,108,100,32,110,111,116,32,99,108,111,115,101,0,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,0,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,0,98,111,111,115,116,58,58,114,97,110,100,111,109,95,100,101,118,105,99,101,58,32,0,32,114,97,110,100,111,109,45,110,117,109,98,101,114,32,112,115,101,117,100,111,45,100,101,118,105,99,101,32,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,54,115,121,115,116,101,109,49,50,115,121,115,116,101,109,95,101,114,114,111,114,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,54,115,121,115,116,101,109,49,50,115,121,115,116,101,109,95,101,114,114,111,114,69,69,69,0,111,107,0,112,97,114,116,105,97,108,0,101,114,114,111,114,0,110,111,99,111,110,118,0,117,110,107,110,111,119,110,32,101,114,114,111,114,0,99,111,100,101,99,118,116,0,78,49,50,95,71,76,79,66,65,76,95,95,78,95,49,49,55,99,111,100,101,99,118,116,95,101,114,114,111,114,95,99,97,116,69,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,97,110,111,110,105,99,97,108,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,115,116,97,116,117,115,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,114,101,97,100,95,115,121,109,108,105,110,107,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,111,112,121,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,111,112,121,95,100,105,114,101,99,116,111,114,121,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,111,112,121,95,102,105,108,101,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,114,101,97,116,101,95,115,121,109,108,105,110,107,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,114,101,97,116,101,95,100,105,114,101,99,116,111,114,105,101,115,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,114,101,97,116,101,95,100,105,114,101,99,116,111,114,121,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,114,101,97,116,101,95,100,105,114,101,99,116,111,114,121,95,115,121,109,108,105,110,107,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,114,101,97,116,101,95,104,97,114,100,95,108,105,110,107,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,99,117,114,114,101,110,116,95,112,97,116,104,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,101,113,117,105,118,97,108,101,110,116,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,102,105,108,101,95,115,105,122,101,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,104,97,114,100,95,108,105,110,107,95,99,111,117,110,116,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,105,115,95,101,109,112,116,121,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,108,97,115,116,95,119,114,105,116,101,95,116,105,109,101,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,112,101,114,109,105,115,115,105,111,110,115,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,114,101,109,111,118,101,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,114,101,109,111,118,101,95,97,108,108,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,114,101,110,97,109,101,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,114,101,115,105,122,101,95,102,105,108,101,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,115,112,97,99,101,0,84,77,80,68,73,82,0,84,77,80,0,84,69,77,80,0,84,69,77,80,68,73,82,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,116,101,109,112,95,100,105,114,101,99,116,111,114,121,95,112,97,116,104,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,100,105,114,101,99,116,111,114,121,95,105,116,101,114,97,116,111,114,58,58,99,111,110,115,116,114,117,99,116,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,100,105,114,101,99,116,111,114,121,95,105,116,101,114,97,116,111,114,58,58,111,112,101,114,97,116,111,114,43,43,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,48,102,105,108,101,115,121,115,116,101,109,54,100,101,116,97,105,108,49,49,100,105,114,95,105,116,114,95,105,109,112,69,69,69,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,48,102,105,108,101,115,121,115,116,101,109,49,54,102,105,108,101,115,121,115,116,101,109,95,101,114,114,111,114,53,109,95,105,109,112,69,69,69,0,58,32,34,0,44,32,34,0,78,53,98,111,111,115,116,49,48,102,105,108,101,115,121,115,116,101,109,49,54,102,105,108,101,115,121,115,116,101,109,95,101,114,114,111,114,69,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,112,97,116,104,32,99,111,100,101,99,118,116,32,116,111,32,115,116,114,105,110,103,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,112,97,116,104,32,99,111,100,101,99,118,116,32,116,111,32,119,115,116,114,105,110,103,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,60,62,58,34,47,92,124,0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,46,95,45,0,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,0,47,100,101,118,47,117,114,97,110,100,111,109,0,47,100,101,118,47,114,97,110,100,111,109,0,98,111,111,115,116,58,58,102,105,108,101,115,121,115,116,101,109,58,58,117,110,105,113,117,101,95,112,97,116,104,0,78,53,98,111,111,115,116,49,48,102,105,108,101,115,121,115,116,101,109,54,100,101,116,97,105,108,49,56,117,116,102,56,95,99,111,100,101,99,118,116,95,102,97,99,101,116,69,0,78,53,98,111,111,115,116,54,115,121,115,116,101,109,49,50,95,71,76,79,66,65,76,95,95,78,95,49,50,49,115,121,115,116,101,109,95,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,85,110,107,110,111,119,110,32,101,114,114,111,114,0,69,78,79,77,69,77,0,78,53,98,111,111,115,116,54,115,121,115,116,101,109,49,50,95,71,76,79,66,65,76,95,95,78,95,49,50,50,103,101,110,101,114,105,99,95,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,92,120,0,105,110,116,32,100,101,118,58,58,102,114,111,109,72,101,120,40,99,104,97,114,44,32,100,101,118,58,58,87,104,101,110,69,114,114,111,114,41,0,47,115,114,99,47,108,105,98,100,101,118,99,111,114,101,47,67,111,109,109,111,110,68,97,116,97,46,99,112,112,0,98,121,116,101,115,32,100,101,118,58,58,102,114,111,109,72,101,120,40,99,111,110,115,116,32,115,116,100,58,58,115,116,114,105,110,103,32,38,44,32,100,101,118,58,58,87,104,101,110,69,114,114,111,114,41,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,49,53,66,97,100,72,101,120,67,104,97,114,97,99,116,101,114,69,69,69,0,78,51,100,101,118,49,53,66,97,100,72,101,120,67,104,97,114,97,99,116,101,114,69,0,66,97,100,72,101,120,67,104,97,114,97,99,116,101,114,0,78,53,98,111,111,115,116,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,49,55,116,97,103,95,105,110,118,97,108,105,100,83,121,109,98,111,108,69,99,69,69,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,49,55,116,97,103,95,105,110,118,97,108,105,100,83,121,109,98,111,108,69,99,69,69,69,69,0,80,78,51,100,101,118,49,55,116,97,103,95,105,110,118,97,108,105,100,83,121,109,98,111,108,69,0,45,37,37,37,37,37,37,0,119,98,0,67,111,117,108,100,32,110,111,116,32,119,114,105,116,101,32,116,111,32,102,105,108,101,58,32,0,118,111,105,100,32,100,101,118,58,58,119,114,105,116,101,70,105,108,101,40,99,111,110,115,116,32,115,116,100,58,58,115,116,114,105,110,103,32,38,44,32,98,121,116,101,115,67,111,110,115,116,82,101,102,44,32,98,111,111,108,41,0,47,115,114,99,47,108,105,98,100,101,118,99,111,114,101,47,67,111,109,109,111,110,73,79,46,99,112,112,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,57,70,105,108,101,69,114,114,111,114,69,69,69,0,78,51,100,101,118,57,70,105,108,101,69,114,114,111,114,69,0,70,105,108,101,69,114,114,111,114,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,102,105,108,101,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,52,98,97,115,105,99,95,111,102,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,114,98,0,78,83,116,51,95,95,49,49,52,98,97,115,105,99,95,105,102,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,52,74,115,111,110,49,55,67,104,97,114,82,101,97,100,101,114,66,117,105,108,100,101,114,69,0,65,32,118,97,108,105,100,32,74,83,79,78,32,100,111,99,117,109,101,110,116,32,109,117,115,116,32,98,101,32,101,105,116,104,101,114,32,97,110,32,97,114,114,97,121,32,111,114,32,97,110,32,111,98,106,101,99,116,32,118,97,108,117,101,46,0,69,120,99,101,101,100,101,100,32,115,116,97,99,107,76,105,109,105,116,32,105,110,32,114,101,97,100,86,97,108,117,101,40,41,46,0,83,121,110,116,97,120,32,101,114,114,111,114,58,32,118,97,108,117,101,44,32,111,98,106,101,99,116,32,111,114,32,97,114,114,97,121,32,101,120,112,101,99,116,101,100,46,0,77,105,115,115,105,110,103,32,39,58,39,32,97,102,116,101,114,32,111,98,106,101,99,116,32,109,101,109,98,101,114,32,110,97,109,101,0,77,105,115,115,105,110,103,32,39,44,39,32,111,114,32,39,125,39,32,105,110,32,111,98,106,101,99,116,32,100,101,99,108,97,114,97,116,105,111,110,0,77,105,115,115,105,110,103,32,39,125,39,32,111,114,32,111,98,106,101,99,116,32,109,101,109,98,101,114,32,110,97,109,101,0,77,105,115,115,105,110,103,32,39,44,39,32,111,114,32,39,93,39,32,105,110,32,97,114,114,97,121,32,100,101,99,108,97,114,97,116,105,111,110,0,114,117,101,0,97,108,115,101,0,69,109,112,116,121,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,105,110,32,115,116,114,105,110,103,0,66,97,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,105,110,32,115,116,114,105,110,103,0,39,32,105,115,32,110,111,116,32,97,32,110,117,109,98,101,114,46,0,97,100,100,105,116,105,111,110,97,108,32,115,105,120,32,99,104,97,114,97,99,116,101,114,115,32,101,120,112,101,99,116,101,100,32,116,111,32,112,97,114,115,101,32,117,110,105,99,111,100,101,32,115,117,114,114,111,103,97,116,101,32,112,97,105,114,46,0,101,120,112,101,99,116,105,110,103,32,97,110,111,116,104,101,114,32,92,117,32,116,111,107,101,110,32,116,111,32,98,101,103,105,110,32,116,104,101,32,115,101,99,111,110,100,32,104,97,108,102,32,111,102,32,97,32,117,110,105,99,111,100,101,32,115,117,114,114,111,103,97,116,101,32,112,97,105,114,0,66,97,100,32,117,110,105,99,111,100,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,105,110,32,115,116,114,105,110,103,58,32,102,111,117,114,32,100,105,103,105,116,115,32,101,120,112,101,99,116,101,100,46,0,66,97,100,32,117,110,105,99,111,100,101,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,105,110,32,115,116,114,105,110,103,58,32,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,32,101,120,112,101,99,116,101,100,46,0,76,105,110,101,32,37,100,44,32,67,111,108,117,109,110,32,37,100,0,42,32,0,83,101,101,32,0,32,102,111,114,32,100,101,116,97,105,108,46,10,0,69,120,116,114,97,32,110,111,110,45,119,104,105,116,101,115,112,97,99,101,32,97,102,116,101,114,32,74,83,79,78,32,118,97,108,117,101,46,0,107,101,121,108,101,110,103,116,104,32,62,61,32,50,94,51,48,0,68,117,112,108,105,99,97,116,101,32,107,101,121,58,32,39,0,110,102,105,110,105,116,121,0,97,78,0,85,110,97,98,108,101,32,116,111,32,112,97,114,115,101,32,116,111,107,101,110,32,108,101,110,103,116,104,0,99,111,108,108,101,99,116,67,111,109,109,101,110,116,115,0,97,108,108,111,119,67,111,109,109,101,110,116,115,0,115,116,114,105,99,116,82,111,111,116,0,97,108,108,111,119,68,114,111,112,112,101,100,78,117,108,108,80,108,97,99,101,104,111,108,100,101,114,115,0,97,108,108,111,119,78,117,109,101,114,105,99,75,101,121,115,0,97,108,108,111,119,83,105,110,103,108,101,81,117,111,116,101,115,0,115,116,97,99,107,76,105,109,105,116,0,102,97,105,108,73,102,69,120,116,114,97,0,114,101,106,101,99,116,68,117,112,75,101,121,115,0,97,108,108,111,119,83,112,101,99,105,97,108,70,108,111,97,116,115,0,69,114,114,111,114,32,102,114,111,109,32,114,101,97,100,101,114,58,32,37,115,0,78,52,74,115,111,110,49,48,67,104,97,114,82,101,97,100,101,114,55,70,97,99,116,111,114,121,69,0,78,52,74,115,111,110,49,51,79,117,114,67,104,97,114,82,101,97,100,101,114,69,0,78,52,74,115,111,110,49,48,67,104,97,114,82,101,97,100,101,114,69,0,78,83,116,51,95,95,49,49,57,98,97,115,105,99,95,105,115,116,114,105,110,103,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,52,74,115,111,110,57,69,120,99,101,112,116,105,111,110,69,0,67,111,110,115,116,73,116,101,114,97,116,111,114,32,116,111,32,73,116,101,114,97,116,111,114,32,115,104,111,117,108,100,32,110,101,118,101,114,32,98,101,32,97,108,108,111,119,101,100,46,0,97,115,115,101,114,116,32,106,115,111,110,32,102,97,105,108,101,100,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,115,101,116,67,111,109,109,101,110,116,40,41,58,32,67,111,109,109,101,110,116,115,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,47,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,100,117,112,108,105,99,97,116,101,83,116,114,105,110,103,86,97,108,117,101,40,41,58,32,70,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,115,116,114,105,110,103,32,118,97,108,117,101,32,98,117,102,102,101,114,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,97,115,67,83,116,114,105,110,103,40,41,58,32,114,101,113,117,105,114,101,115,32,115,116,114,105,110,103,86,97,108,117,101,0,84,121,112,101,32,105,115,32,110,111,116,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,115,116,114,105,110,103,0,76,97,114,103,101,115,116,73,110,116,32,111,117,116,32,111,102,32,73,110,116,32,114,97,110,103,101,0,76,97,114,103,101,115,116,85,73,110,116,32,111,117,116,32,111,102,32,73,110,116,32,114,97,110,103,101,0,100,111,117,98,108,101,32,111,117,116,32,111,102,32,73,110,116,32,114,97,110,103,101,0,86,97,108,117,101,32,105,115,32,110,111,116,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,73,110,116,46,0,76,97,114,103,101,115,116,73,110,116,32,111,117,116,32,111,102,32,85,73,110,116,32,114,97,110,103,101,0,76,97,114,103,101,115,116,85,73,110,116,32,111,117,116,32,111,102,32,85,73,110,116,32,114,97,110,103,101,0,100,111,117,98,108,101,32,111,117,116,32,111,102,32,85,73,110,116,32,114,97,110,103,101,0,86,97,108,117,101,32,105,115,32,110,111,116,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,85,73,110,116,46,0,76,97,114,103,101,115,116,85,73,110,116,32,111,117,116,32,111,102,32,73,110,116,54,52,32,114,97,110,103,101,0,100,111,117,98,108,101,32,111,117,116,32,111,102,32,73,110,116,54,52,32,114,97,110,103,101,0,86,97,108,117,101,32,105,115,32,110,111,116,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,73,110,116,54,52,46,0,76,97,114,103,101,115,116,73,110,116,32,111,117,116,32,111,102,32,85,73,110,116,54,52,32,114,97,110,103,101,0,100,111,117,98,108,101,32,111,117,116,32,111,102,32,85,73,110,116,54,52,32,114,97,110,103,101,0,86,97,108,117,101,32,105,115,32,110,111,116,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,85,73,110,116,54,52,46,0,86,97,108,117,101,32,105,115,32,110,111,116,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,100,111,117,98,108,101,46,0,86,97,108,117,101,32,105,115,32,110,111,116,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,102,108,111,97,116,46,0,86,97,108,117,101,32,105,115,32,110,111,116,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,98,111,111,108,46,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,99,108,101,97,114,40,41,58,32,114,101,113,117,105,114,101,115,32,99,111,109,112,108,101,120,32,118,97,108,117,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,114,101,115,105,122,101,40,41,58,32,114,101,113,117,105,114,101,115,32,97,114,114,97,121,86,97,108,117,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,111,112,101,114,97,116,111,114,91,93,40,65,114,114,97,121,73,110,100,101,120,41,58,32,114,101,113,117,105,114,101,115,32,97,114,114,97,121,86,97,108,117,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,111,112,101,114,97,116,111,114,91,93,40,105,110,116,32,105,110,100,101,120,41,58,32,105,110,100,101,120,32,99,97,110,110,111,116,32,98,101,32,110,101,103,97,116,105,118,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,111,112,101,114,97,116,111,114,91,93,40,65,114,114,97,121,73,110,100,101,120,41,99,111,110,115,116,58,32,114,101,113,117,105,114,101,115,32,97,114,114,97,121,86,97,108,117,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,111,112,101,114,97,116,111,114,91,93,40,105,110,116,32,105,110,100,101,120,41,32,99,111,110,115,116,58,32,105,110,100,101,120,32,99,97,110,110,111,116,32,98,101,32,110,101,103,97,116,105,118,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,114,101,115,111,108,118,101,82,101,102,101,114,101,110,99,101,40,41,58,32,114,101,113,117,105,114,101,115,32,111,98,106,101,99,116,86,97,108,117,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,114,101,115,111,108,118,101,82,101,102,101,114,101,110,99,101,40,107,101,121,44,32,101,110,100,41,58,32,114,101,113,117,105,114,101,115,32,111,98,106,101,99,116,86,97,108,117,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,102,105,110,100,40,107,101,121,44,32,101,110,100,44,32,102,111,117,110,100,41,58,32,114,101,113,117,105,114,101,115,32,111,98,106,101,99,116,86,97,108,117,101,32,111,114,32,110,117,108,108,86,97,108,117,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,114,101,109,111,118,101,77,101,109,98,101,114,40,41,58,32,114,101,113,117,105,114,101,115,32,111,98,106,101,99,116,86,97,108,117,101,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,103,101,116,77,101,109,98,101,114,78,97,109,101,115,40,41,44,32,118,97,108,117,101,32,109,117,115,116,32,98,101,32,111,98,106,101,99,116,86,97,108,117,101,0,91,46,0,78,52,74,115,111,110,49,48,76,111,103,105,99,69,114,114,111,114,69,0,78,52,74,115,111,110,49,50,82,117,110,116,105,109,101,69,114,114,111,114,69,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,100,117,112,108,105,99,97,116,101,65,110,100,80,114,101,102,105,120,83,116,114,105,110,103,86,97,108,117,101,40,41,58,32,108,101,110,103,116,104,32,116,111,111,32,98,105,103,32,102,111,114,32,112,114,101,102,105,120,105,110,103,0,105,110,32,74,115,111,110,58,58,86,97,108,117,101,58,58,100,117,112,108,105,99,97,116,101,65,110,100,80,114,101,102,105,120,83,116,114,105,110,103,86,97,108,117,101,40,41,58,32,70,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,115,116,114,105,110,103,32,118,97,108,117,101,32,98,117,102,102,101,114,0,78,52,74,115,111,110,49,48,70,97,115,116,87,114,105,116,101,114,69,0,78,52,74,115,111,110,54,87,114,105,116,101,114,69,0,78,52,74,115,111,110,49,50,83,116,121,108,101,100,87,114,105,116,101,114,69,0,78,52,74,115,111,110,50,51,66,117,105,108,116,83,116,121,108,101,100,83,116,114,101,97,109,87,114,105,116,101,114,69,0,78,52,74,115,111,110,49,50,83,116,114,101,97,109,87,114,105,116,101,114,69,0,78,52,74,115,111,110,49,50,83,116,114,101,97,109,87,114,105,116,101,114,55,70,97,99,116,111,114,121,69,0,78,52,74,115,111,110,49,57,83,116,114,101,97,109,87,114,105,116,101,114,66,117,105,108,100,101,114,69,0,34,92,8,12,10,13,9,0,92,34,0,92,92,0,92,98,0,92,102,0,92,110,0,92,114,0,92,116,0,92,117,0,123,125,0,32,58,32,0,91,93,0,99,111,109,109,101,110,116,83,116,121,108,101,0,65,108,108,0,105,110,100,101,110,116,97,116,105,111,110,0,101,110,97,98,108,101,89,65,77,76,67,111,109,112,97,116,105,98,105,108,105,116,121,0,100,114,111,112,78,117,108,108,80,108,97,99,101,104,111,108,100,101,114,115,0,117,115,101,83,112,101,99,105,97,108,70,108,111,97,116,115,0,112,114,101,99,105,115,105,111,110,0,78,111,110,101,0,99,111,109,109,101,110,116,83,116,121,108,101,32,109,117,115,116,32,98,101,32,39,65,108,108,39,32,111,114,32,39,78,111,110,101,39,0,37,37,46,37,100,103,0,78,97,78,0,45,73,110,102,105,110,105,116,121,0,45,49,101,43,57,57,57,57,0,73,110,102,105,110,105,116,121,0,49,101,43,57,57,57,57,0,65,115,115,101,109,98,108,121,73,116,101,109,115,32,100,101,118,58,58,101,116,104,58,58,67,83,69,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,103,101,110,101,114,97,116,101,67,111,100,101,40,117,110,115,105,103,110,101,100,32,105,110,116,44,32,105,110,116,44,32,99,111,110,115,116,32,109,97,112,60,105,110,116,44,32,73,100,62,32,38,44,32,99,111,110,115,116,32,109,97,112,60,105,110,116,44,32,73,100,62,32,38,41,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,67,111,109,109,111,110,83,117,98,101,120,112,114,101,115,115,105,111,110,69,108,105,109,105,110,97,116,111,114,46,99,112,112,0,73,110,99,111,114,114,101,99,116,32,102,105,110,97,108,32,115,116,97,99,107,32,104,101,105,103,104,116,46,0,85,110,100,101,102,105,110,101,100,32,105,116,101,109,32,114,101,113,117,101,115,116,101,100,32,98,117,116,32,110,111,116,32,97,118,97,105,108,97,98,108,101,46,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,67,83,69,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,97,100,100,68,101,112,101,110,100,101,110,99,105,101,115,40,73,100,41,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,67,83,69,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,103,101,110,101,114,97,116,101,67,108,97,115,115,69,108,101,109,101,110,116,40,73,100,44,32,98,111,111,108,41,0,69,108,101,109,101,110,116,32,97,108,114,101,97,100,121,32,114,101,109,111,118,101,100,32,98,117,116,32,115,116,105,108,108,32,110,101,101,100,101,100,46,0,83,101,113,117,101,110,99,101,32,99,111,110,115,116,114,97,105,110,101,100,32,111,112,101,114,97,116,105,111,110,32,114,101,113,117,101,115,116,101,100,32,111,117,116,32,111,102,32,115,101,113,117,101,110,99,101,46,0,78,111,110,45,103,101,110,101,114,97,116,101,100,32,101,120,112,114,101,115,115,105,111,110,32,119,105,116,104,111,117,116,32,105,116,101,109,46,0,79,112,99,111,100,101,115,32,119,105,116,104,32,109,111,114,101,32,116,104,97,110,32,116,119,111,32,97,114,103,117,109,101,110,116,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,46,0,69,120,112,101,99,116,101,100,32,97,114,103,117,109,101,110,116,115,32,110,111,116,32,112,114,101,115,101,110,116,46,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,114,101,116,117,114,110,32,118,97,108,117,101,115,46,0,69,108,101,109,101,110,116,32,114,101,113,117,101,115,116,101,100,32,98,117,116,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,46,0,105,110,116,32,100,101,118,58,58,101,116,104,58,58,67,83,69,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,99,108,97,115,115,69,108,101,109,101,110,116,80,111,115,105,116,105,111,110,40,73,100,41,32,99,111,110,115,116,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,67,83,69,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,97,112,112,101,110,100,68,117,112,40,105,110,116,44,32,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,41,0,73,110,118,97,108,105,100,32,115,116,97,99,107,32,97,99,99,101,115,115,46,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,46,46,47,108,105,98,101,118,109,97,115,109,47,73,110,115,116,114,117,99,116,105,111,110,46,104,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,67,83,69,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,97,112,112,101,110,100,79,114,82,101,109,111,118,101,83,119,97,112,40,105,110,116,44,32,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,41,0,98,111,111,108,32,100,101,118,58,58,101,116,104,58,58,67,83,69,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,114,101,109,111,118,101,83,116,97,99,107,84,111,112,73,102,80,111,115,115,105,98,108,101,40,41,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,73,110,118,97,108,105,100,79,112,99,111,100,101,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,73,110,118,97,108,105,100,79,112,99,111,100,101,69,0,73,110,118,97,108,105,100,79,112,99,111,100,101,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,51,101,116,104,50,49,83,116,97,99,107,84,111,111,68,101,101,112,69,120,99,101,112,116,105,111,110,69,69,69,0,78,51,100,101,118,51,101,116,104,50,49,83,116,97,99,107,84,111,111,68,101,101,112,69,120,99,101,112,116,105,111,110,69,0,78,51,100,101,118,51,101,116,104,49,56,79,112,116,105,109,105,122,101,114,69,120,99,101,112,116,105,111,110,69,0,78,51,100,101,118,51,101,116,104,49,55,65,115,115,101,109,98,108,121,69,120,99,101,112,116,105,111,110,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,83,116,49,50,111,117,116,95,111,102,95,114,97,110,103,101,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,83,116,49,50,111,117,116,95,111,102,95,114,97,110,103,101,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,51,101,116,104,50,53,73,116,101,109,78,111,116,65,118,97,105,108,97,98,108,101,69,120,99,101,112,116,105,111,110,69,69,69,0,78,51,100,101,118,51,101,116,104,50,53,73,116,101,109,78,111,116,65,118,97,105,108,97,98,108,101,69,120,99,101,112,116,105,111,110,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,51,101,116,104,49,56,79,112,116,105,109,105,122,101,114,69,120,99,101,112,116,105,111,110,69,69,69,0,78,83,116,51,95,95,49,49,55,98,97,100,95,102,117,110,99,116,105,111,110,95,99,97,108,108,69,0,90,78,51,100,101,118,51,101,116,104,50,57,67,111,109,109,111,110,83,117,98,101,120,112,114,101,115,115,105,111,110,69,108,105,109,105,110,97,116,111,114,49,55,103,101,116,79,112,116,105,109,105,122,101,100,73,116,101,109,115,69,118,69,51,36,95,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,51,101,116,104,50,57,67,111,109,109,111,110,83,117,98,101,120,112,114,101,115,115,105,111,110,69,108,105,109,105,110,97,116,111,114,49,55,103,101,116,79,112,116,105,109,105,122,101,100,73,116,101,109,115,69,118,69,51,36,95,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,53,95,69,69,70,118,118,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,118,118,69,69,69,0,78,51,100,101,118,51,101,116,104,49,51,76,105,116,101,114,97,108,77,101,116,104,111,100,69,0,78,51,100,101,118,51,101,116,104,49,52,67,111,100,101,67,111,112,121,77,101,116,104,111,100,69,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,67,111,110,115,116,97,110,116,79,112,116,105,109,105,115,101,114,46,99,112,112,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,67,111,110,115,116,97,110,116,79,112,116,105,109,105,115,97,116,105,111,110,77,101,116,104,111,100,58,58,114,101,112,108,97,99,101,67,111,110,115,116,97,110,116,115,40,65,115,115,101,109,98,108,121,73,116,101,109,115,32,38,44,32,99,111,110,115,116,32,65,115,115,101,109,98,108,121,73,116,101,109,115,32,38,41,32,99,111,110,115,116,0,78,51,100,101,118,51,101,116,104,50,54,67,111,110,115,116,97,110,116,79,112,116,105,109,105,115,97,116,105,111,110,77,101,116,104,111,100,69,0,78,51,100,101,118,51,101,116,104,49,51,67,111,109,112,117,116,101,77,101,116,104,111,100,69,0,0,73,110,118,97,108,105,100,32,103,97,115,32,116,105,101,114,46,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,71,97,115,77,101,116,101,114,46,99,112,112,0,115,116,97,116,105,99,32,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,101,116,104,58,58,71,97,115,77,101,116,101,114,58,58,114,117,110,71,97,115,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,115,116,114,117,99,116,105,111,110,41,0,118,111,105,100,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,100,105,118,105,100,101,95,117,110,115,105,103,110,101,100,95,104,101,108,112,101,114,40,67,112,112,73,110,116,49,32,42,44,32,99,111,110,115,116,32,67,112,112,73,110,116,50,32,38,44,32,108,105,109,98,95,116,121,112,101,44,32,67,112,112,73,110,116,49,32,38,41,32,91,67,112,112,73,110,116,49,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,60,50,53,54,44,32,50,53,54,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,117,110,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,118,111,105,100,62,44,32,67,112,112,73,110,116,50,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,60,50,53,54,44,32,50,53,54,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,117,110,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,118,111,105,100,62,93,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,83,116,49,52,111,118,101,114,102,108,111,119,95,101,114,114,111,114,69,69,69,69,0,78,53,98,111,111,115,116],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+205938);allocate([49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,83,116,49,52,111,118,101,114,102,108,111,119,95,101,114,114,111,114,69,69,0,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,58,58,98,121,116,101,115,82,101,113,117,105,114,101,100,40,117,110,115,105,103,110,101,100,32,105,110,116,41,32,99,111,110,115,116,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,65,115,115,101,109,98,108,121,73,116,101,109,46,99,112,112,0,91,105,110,93,0,91,111,117,116,93,0,32,80,85,83,72,32,0,32,80,117,115,104,83,116,114,105,110,103,0,32,80,117,115,104,84,97,103,32,0,32,84,97,103,32,0,32,80,117,115,104,68,97,116,97,32,0,32,80,117,115,104,83,117,98,32,0,32,80,117,115,104,83,117,98,83,105,122,101,32,0,32,80,117,115,104,80,114,111,103,114,97,109,83,105,122,101,0,32,80,117,115,104,76,105,98,114,97,114,121,65,100,100,114,101,115,115,32,0,32,63,63,63,0,111,115,116,114,101,97,109,32,38,100,101,118,58,58,101,116,104,58,58,111,112,101,114,97,116,111,114,60,60,40,111,115,116,114,101,97,109,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,32,38,41,0,226,128,166,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,58,58,97,112,112,101,110,100,40,99,111,110,115,116,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,32,38,44,32,105,110,116,41,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,65,115,115,101,109,98,108,121,46,99,112,112,0,46,99,111,100,101,58,0,32,32,80,85,83,72,0,32,48,120,0,32,32,80,85,83,72,32,34,0,32,32,80,85,83,72,32,91,69,114,114,111,114,84,97,103,93,0,32,32,80,85,83,72,32,91,116,97,103,0,32,32,80,85,83,72,32,91,36,0,32,32,80,85,83,72,32,35,91,36,0,32,32,80,85,83,72,83,73,90,69,0,32,32,80,85,83,72,76,73,66,32,34,0,116,97,103,0,32,32,74,85,77,80,68,69,83,84,0,32,32,80,85,83,72,32,91,0,111,115,116,114,101,97,109,32,38,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,58,58,115,116,114,101,97,109,65,115,109,40,111,115,116,114,101,97,109,32,38,44,32,99,111,110,115,116,32,115,116,114,105,110,103,32,38,44,32,99,111,110,115,116,32,83,116,114,105,110,103,77,97,112,32,38,41,32,99,111,110,115,116,0,9,9,0,46,100,97,116,97,58,0,106,117,109,112,84,121,112,101,0,46,99,111,100,101,0,80,85,83,72,0,80,85,83,72,32,116,97,103,0,80,85,83,72,32,91,69,114,114,111,114,84,97,103,93,0,80,85,83,72,32,91,116,97,103,93,0,80,85,83,72,32,91,36,93,0,80,85,83,72,32,35,91,36,93,0,80,85,83,72,83,73,90,69,0,80,85,83,72,76,73,66,0,80,85,83,72,32,100,97,116,97,0,74,115,111,110,58,58,86,97,108,117,101,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,58,58,115,116,114,101,97,109,65,115,109,74,115,111,110,40,111,115,116,114,101,97,109,32,38,44,32,99,111,110,115,116,32,83,116,114,105,110,103,77,97,112,32,38,41,32,99,111,110,115,116,0,46,100,97,116,97,0,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,32,38,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,58,58,111,112,116,105,109,105,115,101,40,98,111,111,108,44,32,98,111,111,108,44,32,115,105,122,101,95,116,41,0,99,111,110,115,116,32,100,101,118,58,58,101,116,104,58,58,76,105,110,107,101,114,79,98,106,101,99,116,32,38,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,58,58,97,115,115,101,109,98,108,101,40,41,32,99,111,110,115,116,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,50,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,50,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,50,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,50,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,65,95,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,51,101,116,104,49,55,65,115,115,101,109,98,108,121,69,120,99,101,112,116,105,111,110,69,69,69,0,73,110,118,97,108,105,100,32,117,115,101,32,111,102,32,67,111,109,109,111,110,83,117,98,101,120,112,114,101,115,115,105,111,110,69,108,105,109,105,110,97,116,111,114,46,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,46,46,47,108,105,98,101,118,109,97,115,109,47,67,111,109,109,111,110,83,117,98,101,120,112,114,101,115,115,105,111,110,69,108,105,109,105,110,97,116,111,114,46,104,0,95,65,115,115,101,109,98,108,121,73,116,101,109,73,116,101,114,97,116,111,114,32,100,101,118,58,58,101,116,104,58,58,67,111,109,109,111,110,83,117,98,101,120,112,114,101,115,115,105,111,110,69,108,105,109,105,110,97,116,111,114,58,58,102,101,101,100,73,116,101,109,115,40,95,65,115,115,101,109,98,108,121,73,116,101,109,73,116,101,114,97,116,111,114,44,32,95,65,115,115,101,109,98,108,121,73,116,101,109,73,116,101,114,97,116,111,114,41,32,91,95,65,115,115,101,109,98,108,121,73,116,101,109,73,116,101,114,97,116,111,114,32,61,32,115,116,100,58,58,95,95,49,58,58,95,95,119,114,97,112,95,105,116,101,114,60,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,32,42,62,93,0,78,83,116,51,95,95,49,49,56,98,97,115,105,99,95,115,116,114,105,110,103,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,73,110,118,97,108,105,100,68,101,112,111,115,105,116,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,73,110,118,97,108,105,100,68,101,112,111,115,105,116,69,0,73,110,118,97,108,105,100,68,101,112,111,115,105,116,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,69,120,112,114,101,115,115,105,111,110,67,108,97,115,115,101,115,46,99,112,112,0,98,111,111,108,32,100,101,118,58,58,101,116,104,58,58,69,120,112,114,101,115,115,105,111,110,67,108,97,115,115,101,115,58,58,69,120,112,114,101,115,115,105,111,110,58,58,111,112,101,114,97,116,111,114,60,40,99,111,110,115,116,32,69,120,112,114,101,115,115,105,111,110,67,108,97,115,115,101,115,58,58,69,120,112,114,101,115,115,105,111,110,32,38,41,32,99,111,110,115,116,0,98,111,111,108,32,100,101,118,58,58,101,116,104,58,58,80,97,116,116,101,114,110,58,58,109,97,116,99,104,101,115,40,99,111,110,115,116,32,69,120,112,114,101,115,115,105,111,110,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,101,116,104,58,58,69,120,112,114,101,115,115,105,111,110,67,108,97,115,115,101,115,32,38,41,32,99,111,110,115,116,0,32,85,78,73,81,85,69,0,80,85,83,72,32,0,65,78,89,0,116,61,0,32,100,61,0,32,126,0,99,111,110,115,116,32,80,97,116,116,101,114,110,58,58,69,120,112,114,101,115,115,105,111,110,32,38,100,101,118,58,58,101,116,104,58,58,80,97,116,116,101,114,110,58,58,109,97,116,99,104,71,114,111,117,112,86,97,108,117,101,40,41,32,99,111,110,115,116,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,54,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,54,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,53,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,53,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,52,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,52,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,51,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,51,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,50,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,50,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,49,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,49,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,53,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,57,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,57,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,56,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,56,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,78,83,116,51,95,95,49,55,98,105,116,95,120,111,114,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,50,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,50,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,50,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,50,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,105,110,97,114,121,95,102,117,110,99,116,105,111,110,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,50,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,50,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,50,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,50,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,83,65,95,83,65,95,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,78,83,95,55,98,105,116,95,120,111,114,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,52,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,52,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,52,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,52,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,68,95,69,69,70,83,67,95,82,75,83,67,95,83,72,95,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,51,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,51,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,51,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,51,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,82,75,83,66,95,83,68,95,69,69,69,0,78,83,116,51,95,95,49,54,98,105,116,95,111,114,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,50,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,50,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,50,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,50,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,78,83,95,54,98,105,116,95,111,114,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,52,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,52,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,52,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,52,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,68,95,69,69,70,83,67,95,82,75,83,67,95,83,72,95,69,69,69,0,78,83,116,51,95,95,49,55,98,105,116,95,97,110,100,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,50,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,50,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,50,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,50,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,78,83,95,55,98,105,116,95,97,110,100,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,52,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,52,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,52,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,52,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,68,95,69,69,70,83,67,95,82,75,83,67,95,83,72,95,69,69,69,0,78,83,116,51,95,95,49,49,48,109,117,108,116,105,112,108,105,101,115,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,50,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,50,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,50,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,50,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,78,83,95,49,48,109,117,108,116,105,112,108,105,101,115,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,52,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,52,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,52,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,52,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,68,95,69,69,70,83,67,95,82,75,83,67,95,83,72,95,69,69,69,0,78,83,116,51,95,95,49,52,112,108,117,115,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,50,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,50,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,50,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,50,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,78,83,95,52,112,108,117,115,73,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,52,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,52,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,52,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,52,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,68,95,69,69,70,83,67,95,82,75,83,67,95,83,72,95,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,55,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,55,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,54,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,54,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,53,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,53,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,52,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,52,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,51,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,51,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,50,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,50,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,49,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,49,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,52,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,57,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,57,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,56,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,56,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,55,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,55,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,54,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,54,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,53,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,53,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,52,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,52,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,51,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,51,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,50,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,50,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,49,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,49,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,51,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,57,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,57,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,56,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,56,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,55,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,55,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,54,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,54,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,53,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,53,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,52,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,52,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,51,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,51,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,50,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,50,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,49,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,49,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,48,0,73,110,116,101,103,101,114,32,68,105,118,105,115,105,111,110,32,98,121,32,122,101,114,111,46,0,118,111,105,100,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,100,105,118,105,100,101,95,117,110,115,105,103,110,101,100,95,104,101,108,112,101,114,40,67,112,112,73,110,116,49,32,42,44,32,99,111,110,115,116,32,67,112,112,73,110,116,50,32,38,44,32,108,105,109,98,95,116,121,112,101,44,32,67,112,112,73,110,116,49,32,38,41,32,91,67,112,112,73,110,116,49,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,60,48,44,32,48,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,115,116,100,58,58,95,95,49,58,58,97,108,108,111,99,97,116,111,114,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,32,62,44,32,67,112,112,73,110,116,50,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,60,48,44,32,48,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,115,116,100,58,58,95,95,49,58,58,97,108,108,111,99,97,116,111,114,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,32,62,93,0,47,115,114,99,47,98,111,111,115,116,95,49,95,53,55,95,48,47,98,111,111,115,116,47,109,117,108,116,105,112,114,101,99,105,115,105,111,110,47,99,112,112,95,105,110,116,47,100,105,118,105,100,101,46,104,112,112,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,50,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,57,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,57,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,56,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,56,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,55,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,55,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,54,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,54,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,53,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,53,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,52,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,52,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,51,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,51,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,50,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,50,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,49,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+216178);allocate([117,108,101,115,67,49,69,118,69,52,36,95,49,49,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,52,36,95,49,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,57,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,57,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,56,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,56,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,55,0,112,111,119,109,32,114,101,113,117,105,114,101,115,32,97,32,112,111,115,105,116,105,118,101,32,101,120,112,111,110,101,110,116,46,0,118,111,105,100,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,100,101,102,97,117,108,116,95,111,112,115,58,58,99,104,101,99,107,95,115,105,103,110,95,111,102,95,98,97,99,107,101,110,100,40,99,111,110,115,116,32,66,97,99,107,101,110,100,32,38,44,32,99,111,110,115,116,32,109,112,108,58,58,116,114,117,101,95,41,32,91,66,97,99,107,101,110,100,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,60,48,44,32,48,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,115,116,100,58,58,95,95,49,58,58,97,108,108,111,99,97,116,111,114,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,32,62,93,0,47,115,114,99,47,98,111,111,115,116,95,49,95,53,55,95,48,47,98,111,111,115,116,47,109,117,108,116,105,112,114,101,99,105,115,105,111,110,47,100,101,116,97,105,108,47,105,110,116,101,103,101,114,95,111,112,115,46,104,112,112,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,83,116,49,51,114,117,110,116,105,109,101,95,101,114,114,111,114,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,83,116,49,51,114,117,110,116,105,109,101,95,101,114,114,111,114,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,55,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,54,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,54,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,53,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,53,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,52,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,52,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,51,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,51,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,50,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,50,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,49,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,49,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,53,82,117,108,101,115,67,49,69,118,69,51,36,95,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,70,78,51,100,101,118,51,101,116,104,55,80,97,116,116,101,114,110,69,118,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,51,101,116,104,49,50,65,115,115,101,109,98,108,121,73,116,101,109,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,60,73,78,86,65,76,73,68,95,73,78,83,84,82,85,67,84,73,79,78,58,32,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,100,105,115,97,115,115,101,109,98,108,101,69,82,75,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,104,78,83,49,95,57,97,108,108,111,99,97,116,111,114,73,104,69,69,69,69,69,51,36,95,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,100,105,115,97,115,115,101,109,98,108,101,69,82,75,78,83,95,54,118,101,99,116,111,114,73,104,78,83,95,57,97,108,108,111,99,97,116,111,114,73,104,69,69,69,69,69,51,36,95,48,78,83,53,95,73,83,65,95,69,69,70,118,78,83,51,95,49,49,73,110,115,116,114,117,99,116,105,111,110,69,82,75,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,69,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,69,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,69,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,69,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,118,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,73,110,115,116,114,117,99,116,105,111,110,69,82,75,78,53,98,111,111,115,116,49,52,109,117,108,116,105,112,114,101,99,105,115,105,111,110,54,110,117,109,98,101,114,73,78,83,54,95,56,98,97,99,107,101,110,100,115,49,53,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,73,76,106,50,53,54,69,76,106,50,53,54,69,76,78,83,54,95,49,54,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,69,48,69,76,78,83,54,95,49,56,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,69,48,69,118,69,69,76,78,83,54,95,50,54,101,120,112,114,101,115,115,105,111,110,95,116,101,109,112,108,97,116,101,95,111,112,116,105,111,110,69,48,69,69,69,69,69,69,0,83,84,79,80,0,65,68,68,0,83,85,66,0,77,85,76,0,68,73,86,0,83,68,73,86,0,77,79,68,0,83,77,79,68,0,69,88,80,0,78,79,84,0,76,84,0,71,84,0,83,76,84,0,83,71,84,0,69,81,0,73,83,90,69,82,79,0,65,78,68,0,79,82,0,88,79,82,0,66,89,84,69,0,65,68,68,77,79,68,0,77,85,76,77,79,68,0,83,73,71,78,69,88,84,69,78,68,0,83,72,65,51,0,65,68,68,82,69,83,83,0,66,65,76,65,78,67,69,0,79,82,73,71,73,78,0,67,65,76,76,69,82,0,67,65,76,76,86,65,76,85,69,0,67,65,76,76,68,65,84,65,76,79,65,68,0,67,65,76,76,68,65,84,65,83,73,90,69,0,67,65,76,76,68,65,84,65,67,79,80,89,0,67,79,68,69,83,73,90,69,0,67,79,68,69,67,79,80,89,0,71,65,83,80,82,73,67,69,0,69,88,84,67,79,68,69,83,73,90,69,0,69,88,84,67,79,68,69,67,79,80,89,0,66,76,79,67,75,72,65,83,72,0,67,79,73,78,66,65,83,69,0,84,73,77,69,83,84,65,77,80,0,78,85,77,66,69,82,0,68,73,70,70,73,67,85,76,84,89,0,71,65,83,76,73,77,73,84,0,80,79,80,0,77,76,79,65,68,0,77,83,84,79,82,69,0,77,83,84,79,82,69,56,0,83,76,79,65,68,0,83,83,84,79,82,69,0,74,85,77,80,0,74,85,77,80,73,0,80,67,0,77,83,73,90,69,0,71,65,83,0,74,85,77,80,68,69,83,84,0,80,85,83,72,49,0,80,85,83,72,50,0,80,85,83,72,51,0,80,85,83,72,52,0,80,85,83,72,53,0,80,85,83,72,54,0,80,85,83,72,55,0,80,85,83,72,56,0,80,85,83,72,57,0,80,85,83,72,49,48,0,80,85,83,72,49,49,0,80,85,83,72,49,50,0,80,85,83,72,49,51,0,80,85,83,72,49,52,0,80,85,83,72,49,53,0,80,85,83,72,49,54,0,80,85,83,72,49,55,0,80,85,83,72,49,56,0,80,85,83,72,49,57,0,80,85,83,72,50,48,0,80,85,83,72,50,49,0,80,85,83,72,50,50,0,80,85,83,72,50,51,0,80,85,83,72,50,52,0,80,85,83,72,50,53,0,80,85,83,72,50,54,0,80,85,83,72,50,55,0,80,85,83,72,50,56,0,80,85,83,72,50,57,0,80,85,83,72,51,48,0,80,85,83,72,51,49,0,80,85,83,72,51,50,0,68,85,80,49,0,68,85,80,50,0,68,85,80,51,0,68,85,80,52,0,68,85,80,53,0,68,85,80,54,0,68,85,80,55,0,68,85,80,56,0,68,85,80,57,0,68,85,80,49,48,0,68,85,80,49,49,0,68,85,80,49,50,0,68,85,80,49,51,0,68,85,80,49,52,0,68,85,80,49,53,0,68,85,80,49,54,0,83,87,65,80,49,0,83,87,65,80,50,0,83,87,65,80,51,0,83,87,65,80,52,0,83,87,65,80,53,0,83,87,65,80,54,0,83,87,65,80,55,0,83,87,65,80,56,0,83,87,65,80,57,0,83,87,65,80,49,48,0,83,87,65,80,49,49,0,83,87,65,80,49,50,0,83,87,65,80,49,51,0,83,87,65,80,49,52,0,83,87,65,80,49,53,0,83,87,65,80,49,54,0,76,79,71,48,0,76,79,71,49,0,76,79,71,50,0,76,79,71,51,0,76,79,71,52,0,67,82,69,65,84,69,0,67,65,76,76,0,67,65,76,76,67,79,68,69,0,82,69,84,85,82,78,0,68,69,76,69,71,65,84,69,67,65,76,76,0,83,85,73,67,73,68,69,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,80,97,116,104,71,97,115,77,101,116,101,114,46,99,112,112,0,71,97,115,77,101,116,101,114,58,58,71,97,115,67,111,110,115,117,109,112,116,105,111,110,32,100,101,118,58,58,101,116,104,58,58,80,97,116,104,71,97,115,77,101,116,101,114,58,58,104,97,110,100,108,101,81,117,101,117,101,73,116,101,109,40,41,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,51,101,116,104,49,48,75,110,111,119,110,83,116,97,116,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,61,61,61,32,83,116,97,116,101,32,61,61,61,0,83,116,97,99,107,32,104,101,105,103,104,116,58,32,0,69,113,117,105,118,97,108,101,110,99,101,32,99,108,97,115,115,101,115,58,32,0,83,116,97,99,107,58,32,0,83,116,111,114,97,103,101,58,32,0,32,32,0,77,101,109,111,114,121,58,32,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,75,110,111,119,110,83,116,97,116,101,46,99,112,112,0,75,110,111,119,110,83,116,97,116,101,58,58,83,116,111,114,101,79,112,101,114,97,116,105,111,110,32,100,101,118,58,58,101,116,104,58,58,75,110,111,119,110,83,116,97,116,101,58,58,102,101,101,100,73,116,101,109,40,99,111,110,115,116,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,32,38,44,32,98,111,111,108,41,0,83,119,97,112,32,111,110,32,115,97,109,101,32,115,116,97,99,107,32,101,108,101,109,101,110,116,115,46,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,75,110,111,119,110,83,116,97,116,101,58,58,115,119,97,112,83,116,97,99,107,69,108,101,109,101,110,116,115,40,105,110,116,44,32,105,110,116,44,32,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,41,0,98,105,109,97,112,60,62,58,32,105,110,118,97,108,105,100,32,107,101,121,0,32,110,111,32,105,116,101,109,0,32,117,110,107,110,111,119,110,32,0,64,0,84,97,103,32,110,117,109,98,101,114,32,116,111,111,32,108,97,114,103,101,46,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,67,111,110,116,114,111,108,70,108,111,119,71,114,97,112,104,46,99,112,112,0,100,101,118,58,58,101,116,104,58,58,66,108,111,99,107,73,100,58,58,66,108,111,99,107,73,100,40,99,111,110,115,116,32,117,50,53,54,32,38,41,0,79,117,116,32,111,102,32,98,108,111,99,107,32,73,68,115,46,0,100,101,118,58,58,101,116,104,58,58,66,108,111,99,107,73,100,32,100,101,118,58,58,101,116,104,58,58,67,111,110,116,114,111,108,70,108,111,119,71,114,97,112,104,58,58,103,101,110,101,114,97,116,101,78,101,119,73,100,40,41,0,83,117,99,99,101,115,115,111,114,32,98,108,111,99,107,32,110,111,116,32,102,111,117,110,100,46,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,67,111,110,116,114,111,108,70,108,111,119,71,114,97,112,104,58,58,114,101,115,111,108,118,101,78,101,120,116,76,105,110,107,115,40,41,0,83,117,99,99,101,115,115,111,114,32,97,108,114,101,97,100,121,32,104,97,115,32,112,114,101,100,101,99,101,115,115,111,114,46,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,67,111,110,116,114,111,108,70,108,111,119,71,114,97,112,104,58,58,115,101,116,80,114,101,118,76,105,110,107,115,40,41,0,76,97,115,116,32,112,117,115,104,101,100,32,116,97,103,32,110,111,116,32,97,116,32,101,110,100,32,111,102,32,112,117,115,104,101,100,32,108,105,115,116,46,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,67,111,110,116,114,111,108,70,108,111,119,71,114,97,112,104,58,58,103,97,116,104,101,114,75,110,111,119,108,101,100,103,101,40,41,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,51,101,116,104,49,55,69,120,112,114,101,115,115,105,111,110,67,108,97,115,115,101,115,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,47,115,114,99,47,108,105,98,101,118,109,97,115,109,47,46,46,47,108,105,98,101,118,109,97,115,109,47,65,115,115,101,109,98,108,121,73,116,101,109,46,104,0,90,78,51,100,101,118,51,101,116,104,49,55,66,108,111,99,107,68,101,100,117,112,108,105,99,97,116,111,114,49,49,100,101,100,117,112,108,105,99,97,116,101,69,118,69,51,36,95,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,51,101,116,104,49,55,66,108,111,99,107,68,101,100,117,112,108,105,99,97,116,111,114,49,49,100,101,100,117,112,108,105,99,97,116,101,69,118,69,51,36,95,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,53,95,69,69,70,98,106,106,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,98,106,106,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,57,69,120,99,101,112,116,105,111,110,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,84,121,112,101,67,104,101,99,107,101,114,69,0,84,121,112,101,32,114,101,113,117,101,115,116,101,100,32,98,117,116,32,110,111,116,32,112,114,101,115,101,110,116,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,110,97,108,121,115,105,115,47,84,121,112,101,67,104,101,99,107,101,114,46,99,112,112,0,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,116,121,112,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,41,32,99,111,110,115,116,0,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,116,121,112,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,41,32,99,111,110,115,116,0,78,111,110,45,101,109,112,116,121,32,34,114,101,116,117,114,110,115,34,32,100,105,114,101,99,116,105,118,101,32,102,111,114,32,99,111,110,115,116,114,117,99,116,111,114,46,0,67,111,110,115,116,114,117,99,116,111,114,32,99,97,110,110,111,116,32,98,101,32,100,101,102,105,110,101,100,32,97,115,32,99,111,110,115,116,97,110,116,46,0,67,111,110,115,116,114,117,99,116,111,114,32,109,117,115,116,32,98,101,32,112,117,98,108,105,99,32,111,114,32,105,110,116,101,114,110,97,108,46,0,79,110,108,121,32,111,110,101,32,102,97,108,108,98,97,99,107,32,102,117,110,99,116,105,111,110,32,105,115,32,97,108,108,111,119,101,100,46,0,76,105,98,114,97,114,105,101,115,32,99,97,110,110,111,116,32,104,97,118,101,32,102,97,108,108,98,97,99,107,32,102,117,110,99,116,105,111,110,115,46,0,70,97,108,108,98,97,99,107,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,100,101,99,108,97,114,101,100,32,99,111,110,115,116,97,110,116,46,0,70,97,108,108,98,97,99,107,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,116,97,107,101,32,112,97,114,97,109,101,116,101,114,115,46,0,70,97,108,108,98,97,99,107,32,102,117,110,99,116,105,111,110,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,118,97,108,117,101,115,46,0,70,117,110,99,116,105,111,110,32,115,105,103,110,97,116,117,114,101,32,104,97,115,104,32,99,111,108,108,105,115,105,111,110,32,102,111,114,32,0,65,110,111,116,104,101,114,32,100,101,99,108,97,114,97,116,105,111,110,32,105,115,32,104,101,114,101,58,0,77,111,114,101,32,116,104,97,110,32,111,110,101,32,99,111,110,115,116,114,117,99,116,111,114,32,100,101,102,105,110,101,100,46,0,70,117,110,99,116,105,111,110,32,119,105,116,104,32,115,97,109,101,32,110,97,109,101,32,97,110,100,32,97,114,103,117,109,101,110,116,115,32,100,101,102,105,110,101,100,32,116,119,105,99,101,46,0,79,116,104,101,114,32,100,101,99,108,97,114,97,116,105,111,110,32,105,115,32,104,101,114,101,58,0,79,118,101,114,114,105,100,101,32,99,104,97,110,103,101,115,32,102,117,110,99,116,105,111,110,32,116,111,32,109,111,100,105,102,105,101,114,46,0,79,118,101,114,114,105,100,101,32,99,104,97,110,103,101,115,32,101,120,116,101,110,100,101,100,32,102,117,110,99,116,105,111,110,32,115,105,103,110,97,116,117,114,101,46,0,79,118,101,114,114,105,100,101,32,99,104,97,110,103,101,115,32,109,111,100,105,102,105,101,114,32,115,105,103,110,97,116,117,114,101,46,0,79,118,101,114,114,105,100,101,32,99,104,97,110,103,101,115,32,109,111,100,105,102,105,101,114,32,116,111,32,102,117,110,99,116,105,111,110,46,0,82,101,100,101,99,108,97,114,105,110,103,32,97,110,32,97,108,114,101,97,100,121,32,105,109,112,108,101,109,101,110,116,101,100,32,102,117,110,99,116,105,111,110,32,97,115,32,97,98,115,116,114,97,99,116,0,68,101,99,108,97,114,97,116,105,111,110,32,110,111,116,32,115,116,111,114,101,100,46,0,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,100,101,114,101,102,101,114,101,110,99,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,100,101,110,116,105,102,105,101,114,32,38,41,32,99,111,110,115,116,0,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,100,101,114,101,102,101,114,101,110,99,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,85,115,101,114,68,101,102,105,110,101,100,84,121,112,101,78,97,109,101,32,38,41,32,99,111,110,115,116,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,99,104,101,99,107,67,111,110,116,114,97,99,116,65,98,115,116,114,97,99,116,67,111,110,115,116,114,117,99,116,111,114,115,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,0,70,117,110,99,116,105,111,110,32,111,118,101,114,108,111,97,100,32,99,108,97,115,104,32,100,117,114,105,110,103,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,101,120,116,101,114,110,97,108,32,116,121,112,101,115,32,102,111,114,32,97,114,103,117,109,101,110,116,115,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,99,104,101,99,107,76,105,98,114,97,114,121,82,101,113,117,105,114,101,109,101,110,116,115,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,0,76,105,98,114,97,114,121,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,116,111,32,105,110,104,101,114,105,116,46,0,76,105,98,114,97,114,121,32,99,97,110,110,111,116,32,104,97,118,101,32,110,111,110,45,99,111,110,115,116,97,110,116,32,115,116,97,116,101,32,118,97,114,105,97,98,108,101,115,0,66,97,115,101,32,99,111,110,116,114,97,99,116,32,110,111,116,32,97,118,97,105,108,97,98,108,101,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,101,110,100,86,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,104,101,114,105,116,97,110,99,101,83,112,101,99,105,102,105,101,114,32,38,41,0,76,105,98,114,97,114,105,101,115,32,99,97,110,110,111,116,32,98,101,32,105,110,104,101,114,105,116,101,100,32,102,114,111,109,46,0,87,114,111,110,103,32,97,114,103,117,109,101,110,116,32,99,111,117,110,116,32,102,111,114,32,99,111,110,115,116,114,117,99,116,111,114,32,99,97,108,108,58,32,0,32,97,114,103,117,109,101,110,116,115,32,103,105,118,101,110,32,98,117,116,32,101,120,112,101,99,116,101,100,32,0,73,110,118,97,108,105,100,32,116,121,112,101,32,102,111,114,32,97,114,103,117,109,101,110,116,32,105,110,32,99,111,110,115,116,114,117,99,116,111,114,32,99,97,108,108,46,32,73,110,118,97,108,105,100,32,105,109,112,108,105,99,105,116,32,99,111,110,118,101,114,115,105,111,110,32,102,114,111,109,32,0,76,105,98,114,97,114,121,32,110,97,109,101,32,101,120,112,101,99,116,101,100,46,0,84,121,112,101,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,32,105,110,32,115,116,114,117,99,116,46,0,76,105,98,114,97,114,121,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,98,101,32,112,97,121,97,98,108,101,46,0,73,110,116,101,114,110,97,108,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,98,101,32,112,97,121,97,98,108,101,46,0,70,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,98,101,32,99,111,110,115,116,97,110,116,32,97,110,100,32,112,97,121,97,98,108,101,32,97,116,32,116,104,101,32,115,97,109,101,32,116,105,109,101,46,0,84,121,112,101,32,105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,108,105,118,101,32,111,117,116,115,105,100,101,32,115,116,111,114,97,103,101,46,0,73,110,116,101,114,110,97,108,32,116,121,112,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,102,111,114,32,112,117,98,108,105,99,32,111,114,32,101,120,116,101,114,110,97,108,32,102,117,110,99,116,105,111,110,115,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,102,97,116,97,108,84,121,112,101,69,114,114,111,114,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,0,82,101,102,101,114,101,110,99,101,100,32,100,101,99,108,97,114,97,116,105,111,110,32,105,115,32,110,101,105,116,104,101,114,32,109,111,100,105,102,105,101,114,32,110,111,114,32,98,97,115,101,32,99,108,97,115,115,46,0,87,114,111,110,103,32,97,114,103,117,109,101,110,116,32,99,111,117,110,116,32,102,111,114,32,109,111,100,105,102,105,101,114,32,105,110,118,111,99,97,116,105,111,110,58,32,0,73,110,118,97,108,105,100,32,116,121,112,101,32,102,111,114,32,97,114,103,117,109,101,110,116,32,105,110,32,109,111,100,105,102,105,101,114,32,105,110,118,111,99,97,116,105,111,110,46,32,73,110,118,97,108,105,100,32,105,109,112,108,105,99,105,116,32,99,111,110,118,101,114,115,105,111,110,32,102,114,111,109,32,0,70,97,105,108,101,100,32,116,111,32,105,110,102,101,114,32,118,97,114,105,97,98,108,101,32,116,121,112,101,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,73,108,108,101,103,97,108,32,117,115,101,32,111,102,32,34,99,111,110,115,116,97,110,116,34,32,115,112,101,99,105,102,105,101,114,46,0,85,110,105,110,105,116,105,97,108,105,122,101,100,32,34,99,111,110,115,116,97,110,116,34,32,118,97,114,105,97,98,108,101,46,0,73,108,108,101,103,97,108,32,117,115,101,32,111,102,32,34,99,111,110,115,116,97,110,116,34,32,115,112,101,99,105,102,105,101,114,46,32,34,99,111,110,115,116,97,110,116,34,32,105,115,32,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,116,104,105,115,32,116,121,112,101,46,0,32,105,115,32,111,110,108,121,32,118,97,108,105,100,32,105,110,32,115,116,111,114,97,103,101,46,0,73,110,116,101,114,110,97,108,32,116,121,112,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,102,111,114,32,112,117,98,108,105,99,32,115,116,97,116,101,32,118,97,114,105,97,98,108,101,115,46,0,32,105,115,32,110,111,116,32,105,109,112,108,105,99,105,116,108,121,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,101,120,112,101,99,116,101,100,32,116,121,112,101,32,0,46,32,84,114,121,32,99,111,110,118,101,114,116,105,110,103,32,116,111,32,116,121,112,101,32,0,32,111,114,32,117,115,101,32,97,110,32,101,120,112,108,105,99,105,116,32,99,111,110,118,101,114,115,105,111,110,46,0,77,111,114,101,32,116,104,97,110,32,52,32,105,110,100,101,120,101,100,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,97,110,111,110,121,109,111,117,115,32,101,118,101,110,116,46,0,77,111,114,101,32,116,104,97,110,32,51,32,105,110,100,101,120,101,100,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,101,118,101,110,116,46,0,73,110,116,101,114,110,97,108,32,116,121,112,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,97,115,32,101,118,101,110,116,32,112,97,114,97,109,101,116,101,114,32,116,121,112,101,46,0,82,101,116,117,114,110,32,97,114,103,117,109,101,110,116,115,32,110,111,116,32,97,108,108,111,119,101,100,46,0,68,105,102,102,101,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,105,110,32,114,101,116,117,114,110,32,115,116,97,116,101,109,101,110,116,32,116,104,97,110,32,105,110,32,114,101,116,117,114,110,115,32,100,101,99,108,97,114,97,116,105,111,110,46,0,82,101,116,117,114,110,32,97,114,103,117,109,101,110,116,32,116,121,112,101,32,0,32,105,115,32,110,111,116,32,105,109,112,108,105,99,105,116,108,121,32,99,111,110,118,101,114,116,105,98,108,101,32,116,111,32,101,120,112,101,99,116,101,100,32,116,121,112,101,32,40,116,121,112,101,32,111,102,32,102,105,114,115,116,32,114,101,116,117,114,110,32,118,97,114,105,97,98,108,101,41,32,0,65,115,115,105,103,110,109,101,110,116,32,110,101,99,101,115,115,97,114,121,32,102,111,114,32,116,121,112,101,32,100,101,116,101,99,116,105,111,110,46,0,85,110,105,110,105,116,105,97,108,105,122,101,100,32,115,116,111,114,97,103,101,32,112,111,105,110,116,101,114,46,32,68,105,100,32,121,111,117,32,109,101,97,110,32,39,60,116,121,112,101,62,32,109,101,109,111,114,121,32,0,39,63,0,84,111,111,32,109,97,110,121,32,99,111,109,112,111,110,101,110,116,115,32,40,0,41,32,105,110,32,118,97,108,117,101,32,102,111,114,32,118,97,114,105,97,98,108,101,32,97,115,115,105,103,110,109,101,110,116,32,40,48,41,32,110,101,101,100,101,100,0,87,105,108,100,99,97,114,100,32,98,111,116,104,32,97,116,32,98,101,103,105,110,110,105,110,103,32,97,110,100,32,101,110,100,32,111,102,32,118,97,114,105,97,98,108,101,32,100,101,99,108,97,114,97,116,105,111,110,32,108,105,115,116,32,105,115,32,111,110,108,121,32,97,108,108,111,119,101,100,32,105,102,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,105,115,32,101,113,117,97,108,46,0,78,111,116,32,101,110,111,117,103,104,32,99,111,109,112,111,110,101,110,116,115,32,40,0,41,32,105,110,32,118,97,108,117,101,32,116,111,32,97,115,115,105,103,110,32,97,108,108,32,118,97,114,105,97,98,108,101,115,32,40,0,41,46,0,41,32,105,110,32,118,97,108,117,101,32,102,111,114,32,118,97,114,105,97,98,108,101,32,97,115,115,105,103,110,109,101,110,116,32,40,0,32,110,101,101,100,101,100,41,46,0,86,97,108,117,101,32,104,97,115,32,116,111,32,98,101,32,116,105,101,100,32,116,111,32,115,116,97,116,101,109,101,110,116,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,83,116,97,116,101,109,101,110,116,32,38,41,0,73,110,118,97,108,105,100,32,114,97,116,105,111,110,97,108,32,0,32,40,97,98,115,111,108,117,116,101,32,118,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,111,114,32,100,105,118,105,115,111,110,32,98,121,32,122,101,114,111,41,46,0,73,110,118,97,108,105,100,32,114,97,116,105,111,110,97,108,32,110,117,109,98,101,114,46,0,82,101,116,117,114,110,32,118,97,108,117,101,32,111,102,32,108,111,119,45,108,101,118,101,108,32,99,97,108,108,115,32,110,111,116,32,117,115,101,100,46,0,84,114,117,101,32,101,120,112,114,101,115,115,105,111,110,39,115,32,116,121,112,101,32,0,32,100,111,101,115,110,39,116,32,109,97,116,99,104,32,102,97,108,115,101,32,101,120,112,114,101,115,115,105,111,110,39,115,32,116,121,112,101,32,0,67,111,110,100,105,116,105,111,110,97,108,32,101,120,112,114,101,115,115,105,111,110,32,97,115,32,108,101,102,116,32,118,97,108,117,101,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,46,0,69,120,112,114,101,115,115,105,111,110,32,104,97,115,32,116,111,32,98,101,32,97,110,32,108,118,97,108,117,101,46,0,77,97,112,112,105,110,103,115,32,99,97,110,110,111,116,32,98,101,32,97,115,115,105,103,110,101,100,32,116,111,46,0,79,112,101,114,97,116,111,114,32,0,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,116,121,112,101,115,32,0,32,97,110,100,32,0,73,110,108,105,110,101,32,97,114,114,97,121,32,116,121,112,101,32,99,97,110,110,111,116,32,98,101,32,100,101,99,108,97,114,101,100,32,97,115,32,76,86,97,108,117,101,46,0,84,117,112,108,101,32,99,111,109,112,111,110,101,110,116,32,99,97,110,110,111,116,32,98,101,32,101,109,112,116,121,46,0,73,110,108,105,110,101,32,97,114,114,97,121,32,99,97,110,110,111,116,32,104,97,118,101,32,101,109,112,116,121,32,99,111,109,112,111,110,101,110,116,115,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,117,112,108,101,69,120,112,114,101,115,115,105,111,110,32,38,41,0,85,110,97,98,108,101,32,116,111,32,100,101,100,117,99,101,32,99,111,109,109,111,110,32,116,121,112,101,32,102,111,114,32,97,114,114,97,121,32,101,108,101,109,101,110,116,115,46,0,85,110,97,114,121,32,111,112,101,114,97,116,111,114,32,0,32,99,97,110,110,111,116,32,98,101,32,97,112,112,108,105,101,100,32,116,111,32,116,121,112,101,32,0,69,120,97,99,116,108,121,32,111,110,101,32,97,114,103,117,109,101,110,116,32,101,120,112,101,99,116,101,100,32,102,111,114,32,101,120,112,108,105,99,105,116,32,116,121,112,101,32,99,111,110,118,101,114,115,105,111,110,46,0,84,121,112,101,32,99,111,110,118,101,114,115,105,111,110,32,99,97,110,110,111,116,32,97,108,108,111,119,32,110,97,109,101,100,32,97,114,103,117,109,101,110,116,115,46,0,69,120,112,108,105,99,105,116,32,116,121,112,101,32,99,111,110,118,101,114,115,105,111,110,32,110,111,116,32,97,108,108,111,119,101,100,46,0,84,121,112,101,32,105,115,32,110,111,116,32,99,97,108,108,97,98,108,101,0,87,114,111,110,103,32,97,114,103,117,109,101,110,116,32,99,111,117,110,116,32,102,111,114,32,102,117,110,99,116,105,111,110,32,99,97,108,108,58,32,0,32,77,101,109,98,101,114,115,32,116,104,97,116,32,104,97,118,101,32,116,111,32,98,101,32,115,107,105,112,112,101,100,32,105,110,32,109,101,109,111,114,121,58,0,73,110,118,97,108,105,100,32,114,97,116,105,111,110,97,108,32,110,117,109,98,101,114,32,40,116,111,111,32,108,97,114,103,101,32,111,114,32,100,105,118,105,115,105,111,110,32,98,121,32,122,101,114,111,41,46,0,73,110,118,97,108,105,100,32,116,121,112,101,32,102,111,114,32,97,114,103,117,109,101,110,116,32,105,110,32,102,117,110,99,116,105,111,110,32,99,97,108,108,46,32,73,110,118,97,108,105,100,32,105,109,112,108,105,99,105,116,32,99,111,110,118,101,114,115,105,111,110,32,102,114,111,109,32,0,78,97,109,101,100,32,97,114,103,117,109,101,110,116,115,32,99,97,110,110,110,111,116,32,98,101,32,117,115,101,100,32,102,111,114,32,102,117,110,99,116,105,111,110,115,32,116,104,97,116,32,116,97,107,101,32,97,114,98,105,116,114,97,114,121,32,112,97,114,97,109,101,116,101,114,115,46,0,83,111,109,101,32,97,114,103,117,109,101,110,116,32,110,97,109,101,115,32,97,114,101,32,109,105,115,115,105,110,103,46,0,84,111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,46,0,68,117,112,108,105,99,97,116,101,32,110,97,109,101,100,32,97,114,103,117,109,101,110,116,46,0,78,97,109,101,100,32,97,114,103,117,109,101,110,116,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,102,117,110,99,116,105,111,110,32,100,101,99,108,97,114,97,116,105,111,110,46,0,84,121,112,101,32,110,97,109,101,32,110,111,116,32,114,101,115,111,108,118,101,100,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,101,110,100,86,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,101,119,69,120,112,114,101,115,115,105,111,110,32,38,41,0,73,100,101,110,116,105,102,105,101,114,32,105,115,32,110,111,116,32,97,32,99,111,110,116,114,97,99,116,46,0,84,114,121,105,110,103,32,116,111,32,99,114,101,97,116,101,32,97,110,32,105,110,115,116,97,110,99,101,32,111,102,32,97,110,32,97,98,115,116,114,97,99,116,32,99,111,110,116,114,97,99,116,46,0,76,105,110,101,97,114,105,122,101,100,32,98,97,115,101,32,99,111,110,116,114,97,99,116,115,32,110,111,116,32,121,101,116,32,97,118,97,105,108,97,98,108,101,46,0,67,105,114,99,117,108,97,114,32,114,101,102,101,114,101,110,99,101,32,102,111,114,32,99,111,110,116,114,97,99,116,32,99,114,101,97,116,105,111,110,32,40,99,97,110,110,111,116,32,99,114,101,97,116,101,32,105,110,115,116,97,110,99,101,32,111,102,32,100,101,114,105,118,101,100,32,111,114,32,115,97,109,101,32,99,111,110,116,114,97,99,116,41,46,0,84,121,112,101,32,99,97,110,110,111,116,32,108,105,118,101,32,111,117,116,115,105,100,101,32,115,116,111,114,97,103,101,46,0,76,101,110,103,116,104,32,104,97,115,32],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+226418);allocate([116,111,32,98,101,32,112,108,97,99,101,100,32,105,110,32,112,97,114,101,110,116,104,101,115,101,115,32,97,102,116,101,114,32,116,104,101,32,97,114,114,97,121,32,116,121,112,101,32,102,111,114,32,110,101,119,32,101,120,112,114,101,115,115,105,111,110,46,0,67,111,110,116,114,97,99,116,32,111,114,32,97,114,114,97,121,32,116,121,112,101,32,101,120,112,101,99,116,101,100,46,0,77,101,109,98,101,114,32,34,0,34,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,105,110,32,0,32,111,117,116,115,105,100,101,32,111,102,32,115,116,111,114,97,103,101,46,0,34,32,110,111,116,32,102,111,117,110,100,32,111,114,32,110,111,116,32,118,105,115,105,98,108,101,32,97,102,116,101,114,32,97,114,103,117,109,101,110,116,45,100,101,112,101,110,100,101,110,116,32,108,111,111,107,117,112,32,105,110,32,0,32,45,32,100,105,100,32,121,111,117,32,102,111,114,103,101,116,32,116,104,101,32,34,112,97,121,97,98,108,101,34,32,109,111,100,105,102,105,101,114,63,0,34,32,110,111,116,32,117,110,105,113,117,101,32,97,102,116,101,114,32,97,114,103,117,109,101,110,116,45,100,101,112,101,110,100,101,110,116,32,108,111,111,107,117,112,32,105,110,32,0,70,117,110,99,116,105,111,110,32,34,0,34,32,99,97,110,110,111,116,32,98,101,32,99,97,108,108,101,100,32,111,110,32,97,110,32,111,98,106,101,99,116,32,111,102,32,116,121,112,101,32,0,32,40,101,120,112,101,99,116,101,100,32,0,73,110,100,101,120,32,101,120,112,114,101,115,115,105,111,110,32,99,97,110,110,111,116,32,98,101,32,111,109,105,116,116,101,100,46,0,73,110,100,101,120,32,97,99,99,101,115,115,32,102,111,114,32,115,116,114,105,110,103,32,105,115,32,110,111,116,32,112,111,115,115,105,98,108,101,46,0,79,117,116,32,111,102,32,98,111,117,110,100,115,32,97,114,114,97,121,32,97,99,99,101,115,115,46,0,73,110,116,101,103,101,114,32,99,111,110,115,116,97,110,116,32,101,120,112,101,99,116,101,100,46,0,73,110,100,101,120,101,100,32,101,120,112,114,101,115,115,105,111,110,32,104,97,115,32,116,111,32,98,101,32,97,32,116,121,112,101,44,32,109,97,112,112,105,110,103,32,111,114,32,97,114,114,97,121,32,40,105,115,32,0,85,110,97,98,108,101,32,116,111,32,100,101,116,101,114,109,105,110,101,32,111,118,101,114,108,111,97,100,101,100,32,116,121,112,101,46,0,78,111,32,99,97,110,100,105,100,97,116,101,115,32,102,111,114,32,111,118,101,114,108,111,97,100,32,114,101,115,111,108,117,116,105,111,110,32,102,111,117,110,100,46,0,82,101,113,117,101,115,116,101,100,32,116,121,112,101,32,110,111,116,32,112,114,101,115,101,110,116,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,100,101,110,116,105,102,105,101,114,32,38,41,0,78,111,32,109,97,116,99,104,105,110,103,32,100,101,99,108,97,114,97,116,105,111,110,32,102,111,117,110,100,32,97,102,116,101,114,32,97,114,103,117,109,101,110,116,45,100,101,112,101,110,100,101,110,116,32,108,111,111,107,117,112,46,0,78,111,32,117,110,105,113,117,101,32,100,101,99,108,97,114,97,116,105,111,110,32,102,111,117,110,100,32,97,102,116,101,114,32,97,114,103,117,109,101,110,116,45,100,101,112,101,110,100,101,110,116,32,108,111,111,107,117,112,46,0,82,101,102,101,114,101,110,99,101,100,32,100,101,99,108,97,114,97,116,105,111,110,32,105,115,32,110,117,108,108,32,97,102,116,101,114,32,111,118,101,114,108,111,97,100,32,114,101,115,111,108,117,116,105,111,110,46,0,68,101,99,108,97,114,97,116,105,111,110,32,114,101,102,101,114,101,110,99,101,100,32,98,101,102,111,114,101,32,116,121,112,101,32,99,111,117,108,100,32,98,101,32,100,101,116,101,114,109,105,110,101,100,46,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,65,83,84,67,111,110,115,116,86,105,115,105,116,111,114,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,70,105,120,101,100,66,121,116,101,115,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,65,114,114,97,121,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,84,121,112,101,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,73,110,116,101,103,101,114,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,84,117,112,108,101,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,83,95,54,118,101,99,116,111,114,73,78,83,95,49,48,115,104,97,114,101,100,95,112,116,114,73,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,52,84,121,112,101,69,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,55,95,69,69,69,69,78,83,56,95,73,83,65,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,66,111,111,108,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,84,121,112,101,67,104,101,99,107,101,114,53,118,105,115,105,116,69,82,75,78,83,48,95,49,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,69,51,36,95,50,0,97,117,116,111,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,67,104,101,99,107,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,108,105,110,101,65,115,115,101,109,98,108,121,32,38,41,58,58,40,97,110,111,110,121,109,111,117,115,32,99,108,97,115,115,41,58,58,111,112,101,114,97,116,111,114,40,41,40,99,111,110,115,116,32,97,115,115,101,109,98,108,121,58,58,73,100,101,110,116,105,102,105,101,114,32,38,44,32,101,116,104,58,58,65,115,115,101,109,98,108,121,32,38,44,32,97,115,115,101,109,98,108,121,58,58,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,41,32,99,111,110,115,116,0,67,111,110,115,116,97,110,116,32,118,97,114,105,97,98,108,101,115,32,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,105,110,108,105,110,101,32,97,115,115,101,109,98,108,121,46,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,84,121,112,101,67,104,101,99,107,101,114,53,118,105,115,105,116,69,82,75,78,83,51,95,49,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,69,51,36,95,50,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,56,95,69,69,70,98,82,75,78,83,51,95,56,97,115,115,101,109,98,108,121,49,48,73,100,101,110,116,105,102,105,101,114,69,82,78,83,50,95,51,101,116,104,56,65,115,115,101,109,98,108,121,69,78,83,66,95,49,51,67,111,100,101,71,101,110,101,114,97,116,111,114,49,55,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,69,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,98,82,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,48,73,100,101,110,116,105,102,105,101,114,69,82,78,83,50,95,51,101,116,104,56,65,115,115,101,109,98,108,121,69,78,83,52,95,49,51,67,111,100,101,71,101,110,101,114,97,116,111,114,49,55,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,70,97,116,97,108,69,114,114,111,114,69,69,69,0,82,101,99,117,114,115,105,118,101,32,115,116,114,117,99,116,32,100,101,102,105,110,105,116,105,111,110,46,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,84,121,112,101,67,104,101,99,107,101,114,53,118,105,115,105,116,69,82,75,78,83,48,95,49,54,83,116,114,117,99,116,68,101,102,105,110,105,116,105,111,110,69,69,51,36,95,49,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,84,121,112,101,67,104,101,99,107,101,114,53,118,105,115,105,116,69,82,75,78,83,51,95,49,54,83,116,114,117,99,116,68,101,102,105,110,105,116,105,111,110,69,69,51,36,95,49,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,56,95,69,69,70,118,80,83,54,95,82,75,78,83,95,51,115,101,116,73,83,66,95,78,83,95,52,108,101,115,115,73,83,66,95,69,69,78,83,57,95,73,83,66,95,69,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,118,80,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,83,116,114,117,99,116,68,101,102,105,110,105,116,105,111,110,69,82,75,78,83,95,51,115,101,116,73,83,54,95,78,83,95,52,108,101,115,115,73,83,54,95,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,54,95,69,69,69,69,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,68,101,99,108,97,114,97,116,105,111,110,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,70,117,110,99,116,105,111,110,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,53,98,111,111,115,116,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,55,116,97,103,95,115,101,99,111,110,100,97,114,121,83,111,117,114,99,101,76,111,99,97,116,105,111,110,69,78,83,50,95,50,51,83,101,99,111,110,100,97,114,121,83,111,117,114,99,101,76,111,99,97,116,105,111,110,69,69,69,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,55,116,97,103,95,115,101,99,111,110,100,97,114,121,83,111,117,114,99,101,76,111,99,97,116,105,111,110,69,78,83,52,95,50,51,83,101,99,111,110,100,97,114,121,83,111,117,114,99,101,76,111,99,97,116,105,111,110,69,69,69,69,69,0,80,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,55,116,97,103,95,115,101,99,111,110,100,97,114,121,83,111,117,114,99,101,76,111,99,97,116,105,111,110,69,0,91,32,0,32,93,0,116,121,112,101,58,32,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,51,83,101,99,111,110,100,97,114,121,83,111,117,114,99,101,76,111,99,97,116,105,111,110,69,0,44,32,115,105,122,101,58,32,0,44,32,100,117,109,112,58,32,0,78,53,98,111,111,115,116,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,116,97,103,95,115,111,117,114,99,101,76,111,99,97,116,105,111,110,69,78,83,49,95,49,52,83,111,117,114,99,101,76,111,99,97,116,105,111,110,69,69,69,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,116,97,103,95,115,111,117,114,99,101,76,111,99,97,116,105,111,110,69,78,83,51,95,49,52,83,111,117,114,99,101,76,111,99,97,116,105,111,110,69,69,69,69,69,0,80,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,116,97,103,95,115,111,117,114,99,101,76,111,99,97,116,105,111,110,69,0,78,79,95,76,79,67,65,84,73,79,78,95,83,80,69,67,73,70,73,69,68,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,69,114,114,111,114,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,70,97,116,97,108,69,114,114,111,114,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,55,68,111,99,83,116,114,105,110,103,65,110,97,108,121,115,101,114,69,0,99,111,110,116,114,97,99,116,115,0,68,111,99,32,116,97,103,32,64,0,32,110,111,116,32,118,97,108,105,100,32,102,111,114,32,0,102,117,110,99,116,105,111,110,115,0,68,111,99,117,109,101,110,116,101,100,32,112,97,114,97,109,101,116,101,114,32,34,0,34,32,110,111,116,32,102,111,117,110,100,32,105,110,32,116,104,101,32,112,97,114,97,109,101,116,101,114,32,108,105,115,116,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,46,0,115,116,97,116,101,109,101,110,116,115,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,82,101,102,101,114,101,110,99,101,115,82,101,115,111,108,118,101,114,69,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,110,97,108,121,115,105,115,47,82,101,102,101,114,101,110,99,101,115,82,101,115,111,108,118,101,114,46,99,112,112,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,101,102,101,114,101,110,99,101,115,82,101,115,111,108,118,101,114,58,58,114,101,115,111,108,118,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,78,111,100,101,32,38,41,0,85,110,100,101,99,108,97,114,101,100,32,105,100,101,110,116,105,102,105,101,114,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,101,102,101,114,101,110,99,101,115,82,101,115,111,108,118,101,114,58,58,102,97,116,97,108,68,101,99,108,97,114,97,116,105,111,110,69,114,114,111,114,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,0,73,100,101,110,116,105,102,105,101,114,32,110,111,116,32,102,111,117,110,100,32,111,114,32,110,111,116,32,117,110,105,113,117,101,46,0,78,97,109,101,32,104,97,115,32,116,111,32,114,101,102,101,114,32,116,111,32,97,32,115,116,114,117,99,116,44,32,101,110,117,109,32,111,114,32,99,111,110,116,114,97,99,116,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,101,102,101,114,101,110,99,101,115,82,101,115,111,108,118,101,114,58,58,102,97,116,97,108,84,121,112,101,69,114,114,111,114,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,0,73,108,108,101,103,97,108,32,98,97,115,101,32,116,121,112,101,32,111,102,32,115,116,111,114,97,103,101,32,115,105,122,101,32,122,101,114,111,32,102,111,114,32,97,114,114,97,121,46,0,73,110,118,97,108,105,100,32,97,114,114,97,121,32,108,101,110,103,116,104,44,32,101,120,112,101,99,116,101,100,32,105,110,116,101,103,101,114,32,108,105,116,101,114,97,108,46,0,76,111,99,97,116,105,111,110,32,104,97,115,32,116,111,32,98,101,32,99,97,108,108,100,97,116,97,32,111,114,32,115,116,111,114,97,103,101,32,102,111,114,32,101,120,116,101,114,110,97,108,32,108,105,98,114,97,114,121,32,102,117,110,99,116,105,111,110,115,32,40,114,101,109,111,118,101,32,116,104,101,32,34,109,101,109,111,114,121,34,32,107,101,121,119,111,114,100,41,46,0,76,111,99,97,116,105,111,110,32,104,97,115,32,116,111,32,98,101,32,99,97,108,108,100,97,116,97,32,102,111,114,32,101,120,116,101,114,110,97,108,32,102,117,110,99,116,105,111,110,115,32,40,114,101,109,111,118,101,32,116,104,101,32,34,109,101,109,111,114,121,34,32,111,114,32,34,115,116,111,114,97,103,101,34,32,107,101,121,119,111,114,100,41,46,0,76,111,99,97,116,105,111,110,32,104,97,115,32,116,111,32,98,101,32,109,101,109,111,114,121,32,102,111,114,32,112,117,98,108,105,99,108,121,32,118,105,115,105,98,108,101,32,102,117,110,99,116,105,111,110,115,32,40,114,101,109,111,118,101,32,116,104,101,32,34,115,116,111,114,97,103,101,34,32,107,101,121,119,111,114,100,41,46,0,83,116,111,114,97,103,101,32,108,111,99,97,116,105,111,110,32,104,97,115,32,116,111,32,98,101,32,34,109,101,109,111,114,121,34,32,40,111,114,32,117,110,115,112,101,99,105,102,105,101,100,41,32,102,111,114,32,99,111,110,115,116,97,110,116,115,46,0,83,116,111,114,97,103,101,32,108,111,99,97,116,105,111,110,32,99,97,110,32,111,110,108,121,32,98,101,32,103,105,118,101,110,32,102,111,114,32,97,114,114,97,121,32,111,114,32,115,116,114,117,99,116,32,116,121,112,101,115,46,0,73,110,118,97,108,105,100,32,116,121,112,101,32,110,97,109,101,46,0,69,120,112,108,105,99,105,116,32,116,121,112,101,32,110,101,101,100,101,100,46,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,82,101,102,101,114,101,110,99,101,115,82,101,115,111,108,118,101,114,53,118,105,115,105,116,69,82,75,78,83,48,95,49,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,69,51,36,95,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,82,101,102,101,114,101,110,99,101,115,82,101,115,111,108,118,101,114,53,118,105,115,105,116,69,82,75,78,83,51,95,49,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,69,51,36,95,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,56,95,69,69,70,98,82,75,78,83,51,95,56,97,115,115,101,109,98,108,121,49,48,73,100,101,110,116,105,102,105,101,114,69,82,78,83,50,95,51,101,116,104,56,65,115,115,101,109,98,108,121,69,78,83,66,95,49,51,67,111,100,101,71,101,110,101,114,97,116,111,114,49,55,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,77,97,112,112,105,110,103,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,67,111,110,116,114,97,99,116,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,69,110,117,109,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,83,116,114,117,99,116,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,110,111,119,0,115,117,105,99,105,100,101,0,97,100,100,109,111,100,0,109,117,108,109,111,100,0,115,104,97,51,0,108,111,103,48,0,108,111,103,49,0,108,111,103,50,0,108,111,103,51,0,108,111,103,52,0,115,104,97,50,53,54,0,117,105,110,116,56,0,101,99,114,101,99,111,118,101,114,0,98,121,116,101,115,50,48,0,114,105,112,101,109,100,49,54,48,0,116,104,105,115,0,115,117,112,101,114,0,77,97,103,105,99,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,117,115,101,100,32,105,110,115,105,100,101,32,114,101,97,108,32,65,83,84,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,97,103,105,99,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,58,58,97,99,99,101,112,116,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,67,111,110,115,116,86,105,115,105,116,111,114,32,38,41,32,99,111,110,115,116,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,97,103,105,99,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,58,58,97,99,99,101,112,116,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,86,105,115,105,116,111,114,32,38,41,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,52,77,97,103,105,99,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,78,83,52,95,73,83,54,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,52,77,97,103,105,99,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,77,97,103,105,99,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,73,110,118,97,108,105,100,32,83,101,109,86,101,114,32,101,120,112,114,101,115,115,105,111,110,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,110,97,108,121,115,105,115,47,83,101,109,86,101,114,72,97,110,100,108,101,114,46,99,112,112,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,101,109,86,101,114,77,97,116,99,104,69,120,112,114,101,115,115,105,111,110,58,58,77,97,116,99,104,67,111,109,112,111,110,101,110,116,58,58,109,97,116,99,104,101,115,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,101,109,86,101,114,86,101,114,115,105,111,110,32,38,41,32,99,111,110,115,116,0,48,46,48,46,48,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,83,101,109,86,101,114,69,114,114,111,114,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,57,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,69,0,73,109,112,111,114,116,32,34,0,34,32,40,114,101,102,101,114,101,110,99,101,100,32,97,115,32,34,0,34,41,32,110,111,116,32,102,111,117,110,100,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,110,97,108,121,115,105,115,47,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,46,99,112,112,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,112,101,114,102,111,114,109,73,109,112,111,114,116,115,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,111,117,114,99,101,85,110,105,116,32,38,44,32,99,111,110,115,116,32,109,97,112,60,115,116,114,105,110,103,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,111,117,114,99,101,85,110,105,116,32,42,62,32,38,41,0,68,101,99,108,97,114,97,116,105,111,110,32,34,0,34,32,110,111,116,32,102,111,117,110,100,32,105,110,32,34,0,34,41,46,0,34,32,97,108,114,101,97,100,121,32,100,101,99,108,97,114,101,100,46,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,114,101,115,111,108,118,101,78,97,109,101,115,65,110,100,84,121,112,101,115,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,0,67,111,110,116,114,97,99,116,32,101,120,112,101,99,116,101,100,46,0,68,101,102,105,110,105,116,105,111,110,32,111,102,32,98,97,115,101,32,104,97,115,32,116,111,32,112,114,101,99,101,100,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,100,101,114,105,118,101,100,32,99,111,110,116,114,97,99,116,0,76,105,110,101,97,114,105,122,97,116,105,111,110,32,111,102,32,105,110,104,101,114,105,116,97,110,99,101,32,103,114,97,112,104,32,105,109,112,111,115,115,105,98,108,101,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,105,109,112,111,114,116,73,110,104,101,114,105,116,101,100,83,99,111,112,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,0,85,112,100,97,116,101,100,32,100,101,99,108,97,114,97,116,105,111,110,32,111,117,116,115,105,100,101,32,103,108,111,98,97,108,32,115,99,111,112,101,46,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,117,112,100,97,116,101,68,101,99,108,97,114,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,42,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,112,97,116,104,70,114,111,109,67,117,114,114,101,110,116,83,99,111,112,101,40,99,111,110,115,116,32,118,101,99,116,111,114,60,65,83,84,83,116,114,105,110,103,62,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,118,101,99,116,111,114,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,42,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,99,108,101,97,110,101,100,68,101,99,108,97,114,97,116,105,111,110,115,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,100,101,110,116,105,102,105,101,114,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,42,62,32,38,41,0,70,117,110,99,116,105,111,110,32,116,121,112,101,32,99,97,110,32,110,111,116,32,98,101,32,117,115,101,100,32,105,110,32,116,104,105,115,32,99,111,110,116,101,120,116,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,114,101,112,111,114,116,70,97,116,97,108,68,101,99,108,97,114,97,116,105,111,110,69,114,114,111,114,40,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,44,32,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,114,101,112,111,114,116,70,97,116,97,108,84,121,112,101,69,114,114,111,114,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,114,114,111,114,32,38,41,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,58,58,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,40,109,97,112,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,78,111,100,101,32,42,44,32,115,104,97,114,101,100,95,112,116,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,67,111,110,116,97,105,110,101,114,62,32,62,32,38,44,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,78,111,100,101,32,38,44,32,69,114,114,111,114,76,105,115,116,32,38,41,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,58,58,118,105,115,105,116,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,109,112,111,114,116,68,105,114,101,99,116,105,118,101,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,58,58,114,101,103,105,115,116,101,114,68,101,99,108,97,114,97,116,105,111,110,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,44,32,98,111,111,108,41,0,73,100,101,110,116,105,102,105,101,114,32,97,108,114,101,97,100,121,32,100,101,99,108,97,114,101,100,46,0,84,104,101,32,112,114,101,118,105,111,117,115,32,100,101,99,108,97,114,97,116,105,111,110,32,105,115,32,104,101,114,101,58,0,67,108,111,115,101,100,32,110,111,110,45,101,120,105,115,116,105,110,103,32,115,99,111,112,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,58,58,99,108,111,115,101,67,117,114,114,101,110,116,83,99,111,112,101,40,41,0,86,97,114,105,97,98,108,101,32,100,101,99,108,97,114,97,116,105,111,110,32,119,105,116,104,111,117,116,32,102,117,110,99,116,105,111,110,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,58,58,101,110,100,86,105,115,105,116,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,83,116,97,116,101,109,101,110,116,32,38,41,0,85,110,97,98,108,101,32,116,111,32,97,100,100,32,110,101,119,32,115,99,111,112,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,58,58,101,110,116,101,114,78,101,119,83,117,98,83,99,111,112,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,82,101,103,105,115,116,114,97,116,105,111,110,72,101,108,112,101,114,58,58,102,97,116,97,108,68,101,99,108,97,114,97,116,105,111,110,69,114,114,111,114,40,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,44,32,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,65,83,84,86,105,115,105,116,111,114,69,0,97,117,116,111,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,99,84,104,114,101,101,77,101,114,103,101,40,115,116,100,58,58,108,105,115,116,60,115,116,100,58,58,108,105,115,116,60,99,111,110,115,116,32,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,42,62,32,62,32,38,41,58,58,40,97,110,111,110,121,109,111,117,115,32,99,108,97,115,115,41,58,58,111,112,101,114,97,116,111,114,40,41,40,41,32,99,111,110,115,116,0,97,117,116,111,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,78,97,109,101,65,110,100,84,121,112,101,82,101,115,111,108,118,101,114,58,58,99,84,104,114,101,101,77,101,114,103,101,40,115,116,100,58,58,108,105,115,116,60,115,116,100,58,58,108,105,115,116,60,99,111,110,115,116,32,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,42,62,32,62,32,38,41,58,58,40,97,110,111,110,121,109,111,117,115,32,99,108,97,115,115,41,58,58,111,112,101,114,97,116,111,114,40,41,40,99,111,110,115,116,32,95,84,32,42,41,32,99,111,110,115,116,0,78,83,116,51,95,95,49,49,52,100,101,102,97,117,108,116,95,100,101,108,101,116,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,68,101,99,108,97,114,97,116,105,111,110,67,111,110,116,97,105,110,101,114,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,112,111,105,110,116,101,114,73,80,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,68,101,99,108,97,114,97,116,105,111,110,67,111,110,116,97,105,110,101,114,69,78,83,95,49,52,100,101,102,97,117,108,116,95,100,101,108,101,116,101,73,83,51,95,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,110,97,108,121,115,105,115,47,68,101,99,108,97,114,97,116,105,111,110,67,111,110,116,97,105,110,101,114,46,99,112,112,0,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,42,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,67,111,110,116,97,105,110,101,114,58,58,99,111,110,102,108,105,99,116,105,110,103,68,101,99,108,97,114,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,44,32,99,111,110,115,116,32,65,83,84,83,116,114,105,110,103,32,42,41,32,99,111,110,115,116,0,65,116,116,101,109,112,116,32,116,111,32,117,112,100,97,116,101,32,102,117,110,99,116,105,111,110,32,100,101,102,105,110,105,116,105,111,110,46,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,67,111,110,116,97,105,110,101,114,58,58,114,101,103,105,115,116,101,114,68,101,99,108,97,114,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,44,32,99,111,110,115,116,32,65,83,84,83,116,114,105,110,103,32,42,44,32,98,111,111,108,44,32,98,111,111,108,41,0,65,116,116,101,109,112,116,32,116,111,32,114,101,115,111,108,118,101,32,101,109,112,116,121,32,110,97,109,101,46,0,115,116,100,58,58,118,101,99,116,111,114,60,99,111,110,115,116,32,68,101,99,108,97,114,97,116,105,111,110,32,42,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,67,111,110,116,97,105,110,101,114,58,58,114,101,115,111,108,118,101,78,97,109,101,40,99,111,110,115,116,32,65,83,84,83,116,114,105,110,103,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,55,67,111,110,115,116,97,110,116,69,118,97,108,117,97,116,111,114,69,0,73,110,118,97,108,105,100,32,99,111,110,115,116,97,110,116,32,101,120,112,114,101,115,115,105,111,110,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,115,116,97,110,116,69,118,97,108,117,97,116,111,114,58,58,101,110,100,86,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,85,110,97,114,121,79,112,101,114,97,116,105,111,110,32,38,41,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,110,97,108,121,115,105,115,47,67,111,110,115,116,97,110,116,69,118,97,108,117,97,116,111,114,46,99,112,112,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,115,116,97,110,116,69,118,97,108,117,97,116,111,114,58,58,101,110,100,86,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,32,38,41,0,73,110,118,97,108,105,100,32,108,105,116,101,114,97,108,32,118,97,108,117,101,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,115,116,97,110,116,69,118,97,108,117,97,116,111,114,58,58,101,110,100,86,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,76,105,116,101,114,97,108,32,38,41,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,69,114,114,111,114,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,83,121,110,116,97,120,67,104,101,99,107,101,114,69,0,83,111,117,114,99,101,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,115,112,101,99,105,102,121,32,114,101,113,117,105,114,101,100,32,99,111,109,112,105,108,101,114,32,118,101,114,115,105,111,110,33,32,0,67,111,110,115,105,100,101,114,32,97,100,100,105,110,103,32,34,112,114,97,103,109,97,32,115,111,108,105,100,105,116,121,32,94,0,59,34,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,110,97,108,121,115,105,115,47,83,121,110,116,97,120,67,104,101,99,107,101,114,46,99,112,112,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,121,110,116,97,120,67,104,101,99,107,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+236658);allocate([100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,114,97,103,109,97,68,105,114,101,99,116,105,118,101,32,38,41,0,115,111,108,105,100,105,116,121,0,85,110,107,110,111,119,110,32,112,114,97,103,109,97,32,34,0,83,111,117,114,99,101,32,102,105,108,101,32,114,101,113,117,105,114,101,115,32,100,105,102,102,101,114,101,110,116,32,99,111,109,112,105,108,101,114,32,118,101,114,115,105,111,110,32,40,99,117,114,114,101,110,116,32,99,111,109,112,105,108,101,114,32,105,115,32,0,32,45,32,110,111,116,101,32,116,104,97,116,32,110,105,103,104,116,108,121,32,98,117,105,108,100,115,32,97,114,101,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,32,115,116,114,105,99,116,108,121,32,108,101,115,115,32,116,104,97,110,32,116,104,101,32,114,101,108,101,97,115,101,100,32,118,101,114,115,105,111,110,0,77,111,100,105,102,105,101,114,32,98,111,100,121,32,100,111,101,115,32,110,111,116,32,99,111,110,116,97,105,110,32,39,95,39,46,0,34,99,111,110,116,105,110,117,101,34,32,104,97,115,32,116,111,32,98,101,32,105,110,32,97,32,34,102,111,114,34,32,111,114,32,34,119,104,105,108,101,34,32,108,111,111,112,46,0,34,98,114,101,97,107,34,32,104,97,115,32,116,111,32,98,101,32,105,110,32,97,32,34,102,111,114,34,32,111,114,32,34,119,104,105,108,101,34,32,108,111,111,112,46,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,65,83,84,78,111,100,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,69,110,117,109,68,101,102,105,110,105,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,83,111,117,114,99,101,85,110,105,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,80,114,97,103,109,97,68,105,114,101,99,116,105,118,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,73,109,112,111,114,116,68,105,114,101,99,116,105,118,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,73,110,104,101,114,105,116,97,110,99,101,83,112,101,99,105,102,105,101,114,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,55,85,115,105,110,103,70,111,114,68,105,114,101,99,116,105,118,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,83,116,114,117,99,116,68,101,102,105,110,105,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,69,110,117,109,86,97,108,117,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,80,97,114,97,109,101,116,101,114,76,105,115,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,57,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,77,111,100,105,102,105,101,114,68,101,102,105,110,105,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,77,111,100,105,102,105,101,114,73,110,118,111,99,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,69,118,101,110,116,68,101,102,105,110,105,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,84,121,112,101,78,97,109,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,57,85,115,101,114,68,101,102,105,110,101,100,84,121,112,101,78,97,109,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,77,97,112,112,105,110,103,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,65,114,114,97,121,84,121,112,101,78,97,109,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,83,116,97,116,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,66,108,111,99,107,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,80,108,97,99,101,104,111,108,100,101,114,83,116,97,116,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,73,102,83,116,97,116,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,87,104,105,108,101,83,116,97,116,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,70,111,114,83,116,97,116,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,67,111,110,116,105,110,117,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,66,114,101,97,107,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,54,82,101,116,117,114,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,84,104,114,111,119,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,56,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,83,116,97,116,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,57,69,120,112,114,101,115,115,105,111,110,83,116,97,116,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,69,120,112,114,101,115,115,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,67,111,110,100,105,116,105,111,110,97,108,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,65,115,115,105,103,110,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,84,117,112,108,101,69,120,112,114,101,115,115,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,85,110,97,114,121,79,112,101,114,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,70,117,110,99,116,105,111,110,67,97,108,108,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,78,101,119,69,120,112,114,101,115,115,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,77,101,109,98,101,114,65,99,99,101,115,115,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,73,110,100,101,120,65,99,99,101,115,115,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,73,100,101,110,116,105,102,105,101,114,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,56,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,69,120,112,114,101,115,115,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,76,105,116,101,114,97,108,69,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,115,116,47,65,83,84,46,99,112,112,0,118,105,114,116,117,97,108,32,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,109,112,111,114,116,68,105,114,101,99,116,105,118,101,58,58,116,121,112,101,40,41,32,99,111,110,115,116,0,72,97,115,104,32,99,111,108,108,105,115,105,111,110,32,97,116,32,70,117,110,99,116,105,111,110,32,68,101,102,105,110,105,116,105,111,110,32,72,97,115,104,32,99,97,108,99,117,108,97,116,105,111,110,0,109,97,112,60,70,105,120,101,100,72,97,115,104,60,52,62,44,32,70,117,110,99,116,105,111,110,84,121,112,101,80,111,105,110,116,101,114,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,58,58,105,110,116,101,114,102,97,99,101,70,117,110,99,116,105,111,110,115,40,41,32,99,111,110,115,116,0,69,110,99,108,111,115,105,110,103,32,83,99,111,112,101,32,111,102,32,69,110,117,109,86,97,108,117,101,32,119,97,115,32,110,111,116,32,115,101,116,0,118,105,114,116,117,97,108,32,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,110,117,109,86,97,108,117,101,58,58,116,121,112,101,40,41,32,99,111,110,115,116,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,55,80,114,105,109,97,114,121,69,120,112,114,101,115,115,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,66,114,101,97,107,97,98,108,101,83,116,97,116,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,50,73,109,112,108,101,109,101,110,116,97,116,105,111,110,79,112,116,105,111,110,97,108,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,68,111,99,117,109,101,110,116,101,100,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,73,100,101,110,116,105,102,105,101,114,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,69,120,112,114,101,115,115,105,111,110,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,65,83,84,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,50,70,117,110,99,116,105,111,110,67,97,108,108,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,53,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,50,77,101,109,98,101,114,65,99,99,101,115,115,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,68,111,99,117,109,101,110,116,101,100,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,51,56,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,83,116,97,116,101,109,101,110,116,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,57,83,116,97,116,101,109,101,110,116,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,82,101,116,117,114,110,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,57,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,57,67,97,108,108,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,86,97,114,105,97,98,108,101,83,99,111,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,57,85,115,101,114,68,101,102,105,110,101,100,84,121,112,101,78,97,109,101,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,84,121,112,101,78,97,109,101,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,53,69,118,101,110,116,68,101,102,105,110,105,116,105,111,110,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,56,77,111,100,105,102,105,101,114,68,101,102,105,110,105,116,105,111,110,65,110,110,111,116,97,116,105,111,110,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,77,111,100,105,102,105,101,114,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,56,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,53,84,121,112,101,68,101,99,108,97,114,97,116,105,111,110,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,56,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,65,110,110,111,116,97,116,105,111,110,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,77,111,100,117,108,101,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,73,109,112,111,114,116,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,83,111,117,114,99,101,85,110,105,116,65,110,110,111,116,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,73,110,116,101,103,101,114,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,70,105,120,101,100,80,111,105,110,116,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,82,97,116,105,111,110,97,108,78,117,109,98,101,114,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,55,83,116,114,105,110,103,76,105,116,101,114,97,108,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,70,105,120,101,100,66,121,116,101,115,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,67,111,110,116,114,97,99,116,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,82,101,102,101,114,101,110,99,101,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,65,114,114,97,121,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,83,116,114,117,99,116,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,69,110,117,109,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,84,117,112,108,101,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,70,117,110,99,116,105,111,110,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,77,97,112,112,105,110,103,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,84,121,112,101,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,77,111,100,105,102,105,101,114,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,77,111,100,117,108,101,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,77,97,103,105,99,84,121,112,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,66,111,111,108,84,121,112,101,69,0,79,98,106,101,99,116,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,115,116,111,114,97,103,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,79,102,102,115,101,116,115,58,58,99,111,109,112,117,116,101,79,102,102,115,101,116,115,40,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,115,32,38,41,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,97,115,116,47,84,121,112,101,115,46,99,112,112,0,69,120,112,101,99,116,101,100,32,97,110,32,101,108,101,109,101,110,116,97,114,121,32,116,121,112,101,32,110,97,109,101,32,98,117,116,32,103,111,116,32,0,115,116,97,116,105,99,32,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,58,58,102,114,111,109,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,84,111,107,101,110,32,38,41,0,85,110,97,98,108,101,32,116,111,32,99,111,110,118,101,114,116,32,101,108,101,109,101,110,116,97,114,121,32,116,121,112,101,110,97,109,101,32,0,32,116,111,32,116,121,112,101,46,0,49,48,48,48,48,48,48,48,48,48,48,48,48,0,49,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0,49,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0,54,48,0,51,54,48,48,0,56,54,52,48,48,0,54,48,52,56,48,48,0,51,49,53,51,54,48,48,48,0,68,101,99,108,97,114,97,116,105,111,110,32,104,97,115,32,116,111,32,98,101,32,97,118,97,105,108,97,98,108,101,46,0,70,117,110,99,116,105,111,110,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,58,58,97,115,77,101,109,98,101,114,70,117,110,99,116,105,111,110,40,98,111,111,108,44,32,98,111,111,108,41,32,99,111,110,115,116,0,73,110,118,97,108,105,100,32,98,105,116,32,110,117,109,98,101,114,32,102,111,114,32,105,110,116,101,103,101,114,32,116,121,112,101,58,32,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,116,101,103,101,114,84,121,112,101,58,58,73,110,116,101,103,101,114,84,121,112,101,40,105,110,116,44,32,73,110,116,101,103,101,114,84,121,112,101,58,58,77,111,100,105,102,105,101,114,41,0,73,110,118,97,108,105,100,32,98,105,116,32,110,117,109,98,101,114,40,115,41,32,102,111,114,32,102,105,120,101,100,32,116,121,112,101,58,32,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,105,120,101,100,80,111,105,110,116,84,121,112,101,58,58,70,105,120,101,100,80,111,105,110,116,84,121,112,101,40,105,110,116,44,32,105,110,116,44,32,70,105,120,101,100,80,111,105,110,116,84,121,112,101,58,58,77,111,100,105,102,105,101,114,41,0,115,104,97,114,101,100,95,112,116,114,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,105,120,101,100,80,111,105,110,116,84,121,112,101,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,97,116,105,111,110,97,108,78,117,109,98,101,114,84,121,112,101,58,58,102,105,120,101,100,80,111,105,110,116,84,121,112,101,40,41,32,99,111,110,115,116,0,105,110,116,101,103,101,114,84,121,112,101,40,41,32,99,97,108,108,101,100,32,102,111,114,32,102,114,97,99,116,105,111,110,97,108,32,110,117,109,98,101,114,46,0,115,104,97,114,101,100,95,112,116,114,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,116,101,103,101,114,84,121,112,101,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,97,116,105,111,110,97,108,78,117,109,98,101,114,84,121,112,101,58,58,105,110,116,101,103,101,114,84,121,112,101,40,41,32,99,111,110,115,116,0,105,110,116,95,99,111,110,115,116,32,0,114,97,116,105,111,110,97,108,95,99,111,110,115,116,32,0,118,105,114,116,117,97,108,32,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,97,116,105,111,110,97,108,78,117,109,98,101,114,84,121,112,101,58,58,108,105,116,101,114,97,108,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,76,105,116,101,114,97,108,32,42,41,32,99,111,110,115,116,0,73,110,116,101,103,101,114,32,99,111,110,115,116,97,110,116,32,116,111,111,32,108,97,114,103,101,46,0,78,117,109,98,101,114,32,99,111,110,115,116,97,110,116,32,116,111,111,32,115,109,97,108,108,46,0,108,105,116,101,114,97,108,95,115,116,114,105,110,103,32,40,99,111,110,116,97,105,110,115,32,105,110,118,97,108,105,100,32,85,84,70,45,56,32,115,101,113,117,101,110,99,101,32,97,116,32,112,111,115,105,116,105,111,110,32,0,108,105,116,101,114,97,108,95,115,116,114,105,110,103,32,34,0,73,110,118,97,108,105,100,32,98,121,116,101,32,110,117,109,98,101,114,32,102,111,114,32,102,105,120,101,100,32,98,121,116,101,115,32,116,121,112,101,58,32,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,105,120,101,100,66,121,116,101,115,84,121,112,101,58,58,70,105,120,101,100,66,121,116,101,115,84,121,112,101,40,105,110,116,41,0,118,105,114,116,117,97,108,32,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,66,111,111,108,84,121,112,101,58,58,108,105,116,101,114,97,108,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,76,105,116,101,114,97,108,32,42,41,32,99,111,110,115,116,0,66,111,111,108,32,116,121,112,101,32,99,111,110,115,116,114,117,99,116,101,100,32,102,114,111,109,32,110,111,110,45,98,111,111,108,101,97,110,32,108,105,116,101,114,97,108,46,0,118,105,114,116,117,97,108,32,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,101,102,101,114,101,110,99,101,84,121,112,101,58,58,117,110,97,114,121,79,112,101,114,97,116,111,114,82,101,115,117,108,116,40,84,111,107,101,110,58,58,86,97,108,117,101,41,32,99,111,110,115,116,0,115,116,111,114,97,103,101,32,0,112,111,105,110,116,101,114,0,114,101,102,0,99,97,108,108,100,97,116,97,0,115,116,114,105,110,103,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,101,102,101,114,101,110,99,101,84,121,112,101,58,58,115,116,114,105,110,103,70,111,114,82,101,102,101,114,101,110,99,101,80,97,114,116,40,41,32,99,111,110,115,116,0,65,114,114,97,121,32,115,105,122,101,32,100,111,101,115,32,110,111,116,32,102,105,116,32,117,110,115,105,103,110,101,100,46,0,118,105,114,116,117,97,108,32,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,58,58,99,97,108,108,100,97,116,97,69,110,99,111,100,101,100,83,105,122,101,40,98,111,111,108,41,32,99,111,110,115,116,0,65,114,114,97,121,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,115,116,111,114,97,103,101,46,0,118,105,114,116,117,97,108,32,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,58,58,115,116,111,114,97,103,101,83,105,122,101,40,41,32,99,111,110,115,116,0,32,115,116,111,114,97,103,101,0,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,58,58,109,101,109,111,114,121,83,105,122,101,40,41,32,99,111,110,115,116,0,65,114,114,97,121,32,115,105,122,101,32,100,111,101,115,32,110,111,116,32,102,105,116,32,117,50,53,54,46,0,108,105,98,114,97,114,121,32,0,99,111,110,116,114,97,99,116,32,0,115,117,112,101,114,32,0,79,118,101,114,114,105,100,101,32,99,104,97,110,103,101,115,32,116,121,112,101,46,0,118,105,114,116,117,97,108,32,77,101,109,98,101,114,76,105,115,116,58,58,77,101,109,98,101,114,77,97,112,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,84,121,112,101,58,58,110,97,116,105,118,101,77,101,109,98,101,114,115,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,42,41,32,99,111,110,115,116,0,115,116,114,117,99,116,32,0,83,116,111,114,97,103,101,32,111,102,102,115,101,116,32,111,102,32,110,111,110,45,101,120,105,115,116,105,110,103,32,109,101,109,98,101,114,32,114,101,113,117,101,115,116,101,100,46,0,99,111,110,115,116,32,112,97,105,114,60,117,50,53,54,44,32,117,110,115,105,103,110,101,100,32,105,110,116,62,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,114,117,99,116,84,121,112,101,58,58,115,116,111,114,97,103,101,79,102,102,115,101,116,115,79,102,77,101,109,98,101,114,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,32,99,111,110,115,116,0,77,101,109,98,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,115,116,114,117,99,116,46,0,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,114,117,99,116,84,121,112,101,58,58,109,101,109,111,114,121,79,102,102,115,101,116,79,102,77,101,109,98,101,114,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,32,99,111,110,115,116,0,101,110,117,109,32,0,82,101,113,117,101,115,116,101,100,32,117,110,107,110,111,119,110,32,101,110,117,109,32,118,97,108,117,101,32,46,0,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,110,117,109,84,121,112,101,58,58,109,101,109,98,101,114,86,97,108,117,101,40,99,111,110,115,116,32,65,83,84,83,116,114,105,110,103,32,38,41,32,99,111,110,115,116,0,116,117,112,108,101,40,41,0,116,117,112,108,101,40,0,83,116,111,114,97,103,101,32,115,105,122,101,32,111,102,32,110,111,110,45,115,116,111,114,97,98,108,101,32,116,117,112,108,101,32,116,121,112,101,32,114,101,113,117,101,115,116,101,100,46,0,118,105,114,116,117,97,108,32,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,117,112,108,101,84,121,112,101,58,58,115,116,111,114,97,103,101,83,105,122,101,40,41,32,99,111,110,115,116,0,118,105,114,116,117,97,108,32,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,117,112,108,101,84,121,112,101,58,58,99,108,111,115,101,115,116,84,101,109,112,111,114,97,114,121,84,121,112,101,40,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,32,38,41,32,99,111,110,115,116,0,70,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,98,111,117,110,100,46,0,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,58,58,115,101,108,102,84,121,112,101,40,41,32,99,111,110,115,116,0,70,117,110,99,116,105,111,110,32,104,97,115,32,110,111,32,115,101,108,102,32,116,121,112,101,46,0,102,117,110,99,116,105,111,110,32,40,0,41,32,114,101,116,117,114,110,115,32,40,0,83,116,111,114,97,103,101,32,115,105,122,101,32,111,102,32,110,111,110,45,115,116,111,114,97,98,108,101,32,102,117,110,99,116,105,111,110,32,116,121,112,101,32,114,101,113,117,101,115,116,101,100,46,0,118,105,114,116,117,97,108,32,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,58,58,115,116,111,114,97,103,101,83,105,122,101,40,41,32,99,111,110,115,116,0,118,105,114,116,117,97,108,32,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,58,58,115,105,122,101,79,110,83,116,97,99,107,40,41,32,99,111,110,115,116,0,68,101,99,108,97,114,97,116,105,111,110,32,110,101,101,100,101,100,32,116,111,32,100,101,116,101,114,109,105,110,101,32,105,110,116,101,114,102,97,99,101,32,102,117,110,99,116,105,111,110,32,116,121,112,101,46,0,70,117,110,99,116,105,111,110,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,58,58,105,110,116,101,114,102,97,99,101,70,117,110,99,116,105,111,110,84,121,112,101,40,41,32,99,111,110,115,116,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,58,58,99,97,110,84,97,107,101,65,114,103,117,109,101,110,116,115,40,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,115,32,38,44,32,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,32,38,41,32,99,111,110,115,116,0,69,120,116,101,114,110,97,108,32,115,105,103,110,97,116,117,114,101,32,111,102,32,102,117,110,99,116,105,111,110,32,110,101,101,100,115,32,100,101,99,108,97,114,97,116,105,111,110,0,115,116,114,105,110,103,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,58,58,101,120,116,101,114,110,97,108,83,105,103,110,97,116,117,114,101,40,41,32,99,111,110,115,116,0,69,120,116,101,114,110,97,108,32,102,117,110,99,116,105,111,110,32,116,121,112,101,32,114,101,113,117,101,115,116,101,100,46,0,80,97,114,97,109,101,116,101,114,32,115,104,111,117,108,100,32,104,97,118,101,32,101,120,116,101,114,110,97,108,32,116,121,112,101,0,109,97,112,112,105,110,103,40,0,32,61,62,32,0,83,116,111,114,97,103,101,32,115,105,122,101,32,111,102,32,110,111,110,45,115,116,111,114,97,98,108,101,32,116,121,112,101,32,116,121,112,101,32,114,101,113,117,101,115,116,101,100,46,0,118,105,114,116,117,97,108,32,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,84,121,112,101,58,58,115,116,111,114,97,103,101,83,105,122,101,40,41,32,99,111,110,115,116,0,118,105,114,116,117,97,108,32,117,50,53,54,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,111,100,105,102,105,101,114,84,121,112,101,58,58,115,116,111,114,97,103,101,83,105,122,101,40,41,32,99,111,110,115,116,0,109,111,100,105,102,105,101,114,32,40,0,109,111,100,117,108,101,32,34,0,98,108,111,99,107,104,97,115,104,0,98,121,116,101,115,51,50,0,85,110,107,110,111,119,110,32,107,105,110,100,32,111,102,32,109,97,103,105,99,46,0,118,105,114,116,117,97,108,32,77,101,109,98,101,114,76,105,115,116,58,58,77,101,109,98,101,114,77,97,112,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,97,103,105,99,84,121,112,101,58,58,110,97,116,105,118,101,77,101,109,98,101,114,115,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,42,41,32,99,111,110,115,116,0,98,108,111,99,107,0,109,115,103,0,116,120,0,118,105,114,116,117,97,108,32,115,116,114,105,110,103,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,97,103,105,99,84,121,112,101,58,58,116,111,83,116,114,105,110,103,40,98,111,111,108,41,32,99,111,110,115,116,0,116,121,112,101,40,0,66,97,115,101,32,56,32,111,114,32,49,54,32,112,114,105,110,116,105,110,103,32,111,102,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,115,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,115,116,100,58,58,115,116,114,105,110,103,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,60,48,44,32,48,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,115,116,100,58,58,95,95,49,58,58,97,108,108,111,99,97,116,111,114,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,32,62,58,58,100,111,95,103,101,116,95,115,116,114,105,110,103,40,115,116,100,58,58,105,111,115,95,98,97,115,101,58,58,102,109,116,102,108,97,103,115,44,32,99,111,110,115,116,32,109,112,108,58,58,102,97,108,115,101,95,32,38,41,32,99,111,110,115,116,32,91,77,105,110,66,105,116,115,32,61,32,48,44,32,77,97,120,66,105,116,115,32,61,32,48,44,32,83,105,103,110,84,121,112,101,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,67,104,101,99,107,101,100,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,65,108,108,111,99,97,116,111,114,32,61,32,115,116,100,58,58,95,95,49,58,58,97,108,108,111,99,97,116,111,114,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,93,0,65,116,116,101,109,112,116,32,116,111,32,97,115,115,105,103,110,32,97,32,110,101,103,97,116,105,118,101,32,118,97,108,117,101,32,116,111,32,97,110,32,117,110,115,105,103,110,101,100,32,116,121,112,101,46,0,118,111,105,100,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,104,101,99,107,95,105,115,95,110,101,103,97,116,105,118,101,40,99,111,110,115,116,32,109,112,108,58,58,102,97,108,115,101,95,32,38,41,0,47,115,114,99,47,98,111,111,115,116,95,49,95,53,55,95,48,47,98,111,111,115,116,47,109,117,108,116,105,112,114,101,99,105,115,105,111,110,47,99,112,112,95,105,110,116,47,109,105,115,99,46,104,112,112,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,83,116,49,49,114,97,110,103,101,95,101,114,114,111,114,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,83,116,49,49,114,97,110,103,101,95,101,114,114,111,114,69,69,0,98,97,100,32,114,97,116,105,111,110,97,108,58,32,122,101,114,111,32,100,101,110,111,109,105,110,97,116,111,114,0,78,53,98,111,111,115,116,49,50,98,97,100,95,114,97,116,105,111,110,97,108,69,0,118,111,105,100,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,100,101,116,97,105,108,58,58,99,104,101,99,107,95,115,104,105,102,116,95,114,97,110,103,101,40,86,44,32,99,111,110,115,116,32,109,112,108,58,58,102,97,108,115,101,95,32,38,44,32,99,111,110,115,116,32,109,112,108,58,58,116,114,117,101,95,32,38,41,32,91,86,32,61,32,108,111,110,103,93,0,105,110,97,99,99,101,115,115,105,98,108,101,32,100,121,110,97,109,105,99,32,116,121,112,101,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,51,73,110,97,99,99,101,115,115,105,98,108,101,68,121,110,97,109,105,99,84,121,112,101,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,51,73,110,97,99,99,101,115,115,105,98,108,101,68,121,110,97,109,105,99,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,118,111,105,100,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,60,48,44,32,48,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,115,116,100,58,58,95,95,49,58,58,97,108,108,111,99,97,116,111,114,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,32,62,58,58,100,111,95,97,115,115,105,103,110,95,115,116,114,105,110,103,40,99,111,110,115,116,32,99,104,97,114,32,42,44,32,99,111,110,115,116,32,109,112,108,58,58,102,97,108,115,101,95,32,38,41,32,91,77,105,110,66,105,116,115,32,61,32,48,44,32,77,97,120,66,105,116,115,32,61,32,48,44,32,83,105,103,110,84,121,112,101,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,67,104,101,99,107,101,100,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,65,108,108,111,99,97,116,111,114,32,61,32,115,116,100,58,58,95,95,49,58,58,97,108,108,111,99,97,116,111,114,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,93,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,55,83,116,114,105,110,103,76,105,116,101,114,97,108,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,82,97,116,105,111,110,97,108,78,117,109,98,101,114,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,70,105,120,101,100,80,111,105,110,116,84,121,112,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,84,111,107,101,110,32,110,97,109,101,32,115,105,122,101,32,115,104,111,117,108,100,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,51,46,32,83,104,111,117,108,100,32,110,111,116,32,114,101,97,99,104,32,104,101,114,101,46,0,115,116,100,58,58,115,116,114,105,110,103,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,84,111,107,101,110,58,58,116,111,83,116,114,105,110,103,40,99,111,110,115,116,32,98,111,111,108,32,38,41,32,99,111,110,115,116,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,65,83,84,74,115,111,110,67,111,110,118,101,114,116,101,114,69,0,115,114,99,0,97,116,116,114,105,98,117,116,101,115,0,99,104,105,108,100,114,101,110,0,83,111,117,114,99,101,85,110,105,116,0,108,105,116,101,114,97,108,115,0,73,109,112,111,114,116,68,105,114,101,99,116,105,118,101,0,102,105,108,101,0,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,0,105,115,76,105,98,114,97,114,121,0,102,117,108,108,121,73,109,112,108,101,109,101,110,116,101,100,0,108,105,110,101,97,114,105,122,101,100,66,97,115,101,67,111,110,116,114,97,99,116,115,0,85,115,105,110,103,70,111,114,68,105,114,101,99,116,105,118,101,0,83,116,114,117,99,116,68,101,102,105,110,105,116,105,111,110,0,69,110,117,109,68,101,102,105,110,105,116,105,111,110,0,69,110,117,109,86,97,108,117,101,0,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,0,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,0,85,110,107,110,111,119,110,0,77,111,100,105,102,105,101,114,68,101,102,105,110,105,116,105,111,110,0,77,111,100,105,102,105,101,114,73,110,118,111,99,97,116],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+246898);allocate([105,111,110,0,69,118,101,110,116,68,101,102,105,110,105,116,105,111,110,0,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,0,85,115,101,114,68,101,102,105,110,101,100,84,121,112,101,78,97,109,101,0,86,97,114,105,97,98,108,101,68,101,102,105,110,105,116,105,111,110,83,116,97,116,101,109,101,110,116,0,65,115,115,105,103,110,109,101,110,116,0,111,112,101,114,97,116,111,114,0,85,110,97,114,121,79,112,101,114,97,116,105,111,110,0,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,0,116,121,112,101,95,99,111,110,118,101,114,115,105,111,110,0,77,101,109,98,101,114,65,99,99,101,115,115,0,109,101,109,98,101,114,95,110,97,109,101,0,69,108,101,109,101,110,116,97,114,121,84,121,112,101,110,97,109,101,69,120,112,114,101,115,115,105,111,110,0,76,105,116,101,114,97,108,0,116,111,107,101,110,0,104,101,120,118,97,108,117,101,0,115,117,98,100,101,110,111,109,105,110,97,116,105,111,110,0,85,110,101,118,101,110,32,106,115,111,110,32,110,111,100,101,115,32,115,116,97,99,107,46,32,73,110,116,101,114,110,97,108,32,101,114,114,111,114,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,115,111,108,105,100,105,116,121,47,97,115,116,47,65,83,84,74,115,111,110,67,111,110,118,101,114,116,101,114,46,104,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,74,115,111,110,67,111,110,118,101,114,116,101,114,58,58,103,111,85,112,40,41,0,48,120,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,76,111,99,97,116,105,111,110,70,105,110,100,101,114,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,65,83,84,80,114,105,110,116,101,114,69,0,80,114,97,103,109,97,68,105,114,101,99,116,105,118,101,0,32,32,32,71,97,115,32,99,111,115,116,115,58,32,0,91,63,63,63,93,0,32,32,32,83,111,117,114,99,101,58,32,0,73,109,112,111,114,116,68,105,114,101,99,116,105,118,101,32,34,0,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,34,0,73,110,104,101,114,105,116,97,110,99,101,83,112,101,99,105,102,105,101,114,0,83,116,114,117,99,116,68,101,102,105,110,105,116,105,111,110,32,34,0,69,110,117,109,68,101,102,105,110,105,116,105,111,110,32,34,0,69,110,117,109,86,97,108,117,101,32,34,0,80,97,114,97,109,101,116,101,114,76,105,115,116,0,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,32,34,0,32,45,32,112,117,98,108,105,99,0,32,45,32,99,111,110,115,116,0,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,34,0,32,32,32,84,121,112,101,58,32,0,32,32,32,84,121,112,101,32,117,110,107,110,111,119,110,46,0,77,111,100,105,102,105,101,114,68,101,102,105,110,105,116,105,111,110,32,34,0,77,111,100,105,102,105,101,114,73,110,118,111,99,97,116,105,111,110,32,34,0,69,118,101,110,116,68,101,102,105,110,105,116,105,111,110,32,34,0,84,121,112,101,78,97,109,101,0,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,32,0,85,115,101,114,68,101,102,105,110,101,100,84,121,112,101,78,97,109,101,32,34,0,65,114,114,97,121,84,121,112,101,78,97,109,101,0,73,110,108,105,110,101,65,115,115,101,109,98,108,121,0,66,108,111,99,107,0,80,108,97,99,101,104,111,108,100,101,114,83,116,97,116,101,109,101,110,116,0,73,102,83,116,97,116,101,109,101,110,116,0,87,104,105,108,101,83,116,97,116,101,109,101,110,116,0,70,111,114,83,116,97,116,101,109,101,110,116,0,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,83,116,97,116,101,109,101,110,116,0,69,120,112,114,101,115,115,105,111,110,83,116,97,116,101,109,101,110,116,0,32,32,32,84,121,112,101,32,117,110,107,110,111,119,110,46,10,0,65,115,115,105,103,110,109,101,110,116,32,117,115,105,110,103,32,111,112,101,114,97,116,111,114,32,0,84,117,112,108,101,69,120,112,114,101,115,115,105,111,110,0,85,110,97,114,121,79,112,101,114,97,116,105,111,110,32,40,0,112,114,101,102,105,120,0,112,111,115,116,102,105,120,0,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,32,117,115,105,110,103,32,111,112,101,114,97,116,111,114,32,0,70,117,110,99,116,105,111,110,67,97,108,108,0,78,101,119,69,120,112,114,101,115,115,105,111,110,0,77,101,109,98,101,114,65,99,99,101,115,115,32,116,111,32,109,101,109,98,101,114,32,0,73,110,100,101,120,65,99,99,101,115,115,0,73,100,101,110,116,105,102,105,101,114,32,0,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,69,120,112,114,101,115,115,105,111,110,32,0,91,110,111,32,116,111,107,101,110,93,0,76,105,116,101,114,97,108,44,32,116,111,107,101,110,58,32,0,32,118,97,108,117,101,58,32,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,65,114,114,97,121,85,116,105,108,115,46,99,112,112,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,85,116,105,108,115,58,58,99,111,112,121,65,114,114,97,121,84,111,83,116,111,114,97,103,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,32,38,41,32,99,111,110,115,116,0,66,121,116,101,32,111,102,102,115,101,116,32,102,111,114,32,97,114,114,97,121,32,97,115,32,98,97,115,101,32,116,121,112,101,46,0,66,121,116,101,32,111,102,102,115,101,116,32,102,111,114,32,100,105,114,101,99,116,32,99,111,112,121,46,0,67,111,112,121,105,110,103,32,111,102,32,116,121,112,101,32,0,32,116,111,32,115,116,111,114,97,103,101,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,85,116,105,108,115,58,58,105,110,99,114,101,109,101,110,116,66,121,116,101,79,102,102,115,101,116,40,117,110,115,105,103,110,101,100,32,105,110,116,44,32,117,110,115,105,103,110,101,100,32,105,110,116,44,32,117,110,115,105,103,110,101,100,32,105,110,116,41,32,99,111,110,115,116,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,85,116,105,108,115,58,58,99,108,101,97,114,83,116,111,114,97,103,101,76,111,111,112,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,41,32,99,111,110,115,116,0,78,101,115,116,101,100,32,100,121,110,97,109,105,99,32,97,114,114,97,121,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,104,101,114,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,85,116,105,108,115,58,58,99,111,112,121,65,114,114,97,121,84,111,77,101,109,111,114,121,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,85,116,105,108,115,58,58,97,99,99,101,115,115,73,110,100,101,120,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,85,116,105,108,115,58,58,99,108,101,97,114,65,114,114,97,121,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,32,38,41,32,99,111,110,115,116,0,73,110,118,97,108,105,100,32,115,116,111,114,97,103,101,32,115,105,122,101,32,102,111,114,32,110,111,110,45,118,97,108,117,101,32,116,121,112,101,46,0,73,110,118,97,108,105,100,32,115,116,111,114,97,103,101,32,115,105,122,101,32,102,111,114,32,116,121,112,101,46,0,73,110,118,97,108,105,100,32,115,105,122,101,32,102,111,114,32,118,97,108,117,101,32,116,121,112,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,85,116,105,108,115,58,58,99,108,101,97,114,68,121,110,97,109,105,99,65,114,114,97,121,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,32,38,41,32,99,111,110,115,116,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,85,116,105,108,115,58,58,114,101,115,105,122,101,68,121,110,97,109,105,99,65,114,114,97,121,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,32,38,41,32,99,111,110,115,116,0,50,0,51,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,58,58,97,100,106,117,115,116,68,101,112,111,115,105,116,40,105,110,116,41,0,65,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,0,32,91,102,117,110,99,61,0,44,32,108,105,110,101,61,0,44,32,102,105,108,101,61,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,83,116,97,99,107,86,97,114,105,97,98,108,101,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,77,101,109,111,114,121,73,116,101,109,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,83,116,111,114,97,103,101,73,116,101,109,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,51,83,116,111,114,97,103,101,66,121,116,101,65,114,114,97,121,69,108,101,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,83,116,111,114,97,103,101,65,114,114,97,121,76,101,110,103,116,104,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,84,117,112,108,101,79,98,106,101,99,116,69,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,97,99,107,86,97,114,105,97,98,108,101,58,58,114,101,116,114,105,101,118,101,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,76,86,97,108,117,101,46,99,112,112,0,83,105,122,101,32,97,110,100,32,115,116,97,99,107,32,112,111,115,32,109,105,115,109,97,116,99,104,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,97,99,107,86,97,114,105,97,98,108,101,58,58,115,116,111,114,101,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,101,109,111,114,121,73,116,101,109,58,58,115,116,111,114,101,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,73,110,118,97,108,105,100,32,110,111,110,45,112,97,100,100,101,100,32,116,121,112,101,46,0,67,111,110,118,101,114,115,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,97,115,115,105,103,110,109,101,110,116,32,116,111,32,109,101,109,111,114,121,46,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,73,116,101,109,58,58,83,116,111,114,97,103,101,73,116,101,109,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,41,0,73,110,118,97,108,105,100,32,115,116,111,114,97,103,101,32,115,105,122,101,46,0,73,110,118,97,108,105,100,32,115,116,111,114,97,103,101,32,114,101,102,32,115,105,122,101,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,73,116,101,109,58,58,114,101,116,114,105,101,118,101,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,73,110,118,97,108,105,100,32,115,116,111,114,97,103,101,32,98,121,116,101,115,32,115,105,122,101,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,73,116,101,109,58,58,115,116,111,114,101,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,87,114,111,110,103,32,116,121,112,101,32,99,111,110,118,101,114,115,97,116,105,111,110,32,102,111,114,32,97,115,115,105,103,110,109,101,110,116,46,0,83,116,114,117,99,116,32,97,115,115,105,103,110,109,101,110,116,32,119,105,116,104,32,99,111,110,118,101,114,115,105,111,110,46,0,83,116,114,117,99,116,115,32,105,110,32,99,97,108,108,100,97,116,97,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,85,110,101,120,112,101,99,116,101,100,32,115,111,117,114,99,101,32,115,105,122,101,46,0,73,110,118,97,108,105,100,32,110,111,110,45,118,97,108,117,101,32,116,121,112,101,32,102,111,114,32,97,115,115,105,103,110,109,101,110,116,46,0,67,108,101,97,114,105,110,103,32,111,102,32,117,110,115,117,112,112,111,114,116,101,100,32,116,121,112,101,32,114,101,113,117,101,115,116,101,100,58,32,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,73,116,101,109,58,58,115,101,116,84,111,90,101,114,111,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,65,114,114,97,121,76,101,110,103,116,104,58,58,83,116,111,114,97,103,101,65,114,114,97,121,76,101,110,103,116,104,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,32,38,41,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,117,112,108,101,79,98,106,101,99,116,58,58,114,101,116,114,105,101,118,101,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,117,112,108,101,79,98,106,101,99,116,58,58,115,116,111,114,101,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,54,76,86,97,108,117,101,69,0,82,101,113,117,101,115,116,101,100,32,109,101,109,98,101,114,32,116,121,112,101,32,98,121,32,110,111,110,45,117,110,105,113,117,101,32,110,97,109,101,46,0,84,121,112,101,80,111,105,110,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,101,109,98,101,114,76,105,115,116,58,58,109,101,109,98,101,114,84,121,112,101,40,99,111,110,115,116,32,115,116,100,58,58,115,116,114,105,110,103,32,38,41,32,99,111,110,115,116,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,67,111,109,112,105,108,101,114,69,114,114,111,114,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,69,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,46,99,112,112,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,70,117,110,99,116,105,111,110,83,101,108,101,99,116,111,114,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,0,67,111,109,112,105,108,101,100,32,116,104,101,32,119,114,111,110,103,32,102,117,110,99,116,105,111,110,63,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,77,105,115,115,105,110,103,70,117,110,99,116,105,111,110,115,40,41,0,115,105,122,101,95,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,112,97,99,107,73,110,116,111,67,111,110,116,114,97,99,116,67,114,101,97,116,111,114,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,32,38,41,0,115,105,122,101,95,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,99,111,109,112,105,108,101,67,108,111,110,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,44,32,99,111,110,115,116,32,109,97,112,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,42,44,32,99,111,110,115,116,32,101,116,104,58,58,65,115,115,101,109,98,108,121,32,42,62,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,73,110,105,116,65,110,100,67,111,110,115,116,114,117,99,116,111,114,67,111,100,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,0,48,120,99,97,102,101,99,97,102,101,99,97,102,101,99,97,102,101,99,97,102,101,99,97,102,101,99,97,102,101,99,97,102,101,99,97,102,101,99,97,102,101,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,66,97,115,101,67,111,110,115,116,114,117,99,116,111,114,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,67,97,108,108,100,97,116,97,85,110,112,97,99,107,101,114,40,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,115,32,38,44,32,98,111,111,108,41,0,78,101,115,116,101,100,32,109,101,109,111,114,121,32,97,114,114,97,121,115,32,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,32,104,101,114,101,46,0,85,110,107,110,111,119,110,32,100,121,110,97,109,105,99,97,108,108,121,32,115,105,122,101,100,32,116,121,112,101,58,32,0,67,111,109,112,105,108,101,114,32,118,105,115,105,116,32,116,111,32,110,111,110,45,115,116,97,116,101,32,118,97,114,105,97,98,108,101,32,100,101,99,108,97,114,97,116,105,111,110,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,77,111,100,105,102,105,101,114,79,114,70,117,110,99,116,105,111,110,67,111,100,101,40,41,0,67,111,100,101,32,103,101,110,101,114,97,116,105,111,110,32,102,111,114,32,105,110,108,105,110,101,32,97,115,115,101,109,98,108,121,32,119,105,116,104,32,101,114,114,111,114,115,32,114,101,113,117,101,115,116,101,100,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,108,105,110,101,65,115,115,101,109,98,108,121,32,38,41,0,73,110,118,97,108,105,100,32,114,101,116,117,114,110,32,112,97,114,97,109,101,116,101,114,115,32,112,111,105,110,116,101,114,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,101,116,117,114,110,32,38,41,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,83,116,97,116,101,109,101,110,116,32,38,41,0,73,32,115,101,110,115,101,32,97,32,100,105,115,116,117,114,98,97,110,99,101,32,105,110,32,116,104,101,32,115,116,97,99,107,46,0,118,111,105,100,32,83,116,97,99,107,72,101,105,103,104,116,67,104,101,99,107,101,114,58,58,99,104,101,99,107,40,41,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,53,118,105,115,105,116,69,82,75,78,83,48,95,49,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,69,51,36,95,48,0,97,117,116,111,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,108,105,110,101,65,115,115,101,109,98,108,121,32,38,41,58,58,40,97,110,111,110,121,109,111,117,115,32,99,108,97,115,115,41,58,58,111,112,101,114,97,116,111,114,40,41,40,99,111,110,115,116,32,97,115,115,101,109,98,108,121,58,58,73,100,101,110,116,105,102,105,101,114,32,38,44,32,101,116,104,58,58,65,115,115,101,109,98,108,121,32,38,44,32,97,115,115,101,109,98,108,121,58,58,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,41,32,99,111,110,115,116,0,84,121,112,101,32,111,102,32,100,101,99,108,97,114,97,116,105,111,110,32,114,101,113,117,105,114,101,100,32,98,117,116,32,110,111,116,32,121,101,116,32,100,101,116,101,114,109,105,110,101,100,46,0,73,110,118,97,108,105,100,32,118,97,114,105,97,98,108,101,32,116,121,112,101,46,0,73,110,116,114,97,45,115,108,111,116,32,111,102,102,101,115,116,32,97,115,115,117,109,101,100,32,116,111,32,98,101,32,122,101,114,111,46,0,73,110,118,97,108,105,100,32,100,101,99,108,97,114,97,116,105,111,110,32,116,121,112,101,46,0,67,97,110,32,111,110,108,121,32,97,115,115,105,103,110,32,116,111,32,115,116,97,99,107,32,118,97,114,105,97,98,108,101,115,32,105,110,32,105,110,108,105,110,101,32,97,115,115,101,109,98,108,121,46,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,67,111,110,116,114,97,99,116,67,111,109,112,105,108,101,114,53,118,105,115,105,116,69,82,75,78,83,51,95,49,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,69,51,36,95,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,56,95,69,69,70,98,82,75,78,83,51,95,56,97,115,115,101,109,98,108,121,49,48,73,100,101,110,116,105,102,105,101,114,69,82,78,83,50,95,51,101,116,104,56,65,115,115,101,109,98,108,121,69,78,83,66,95,49,51,67,111,100,101,71,101,110,101,114,97,116,111,114,49,55,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,69,69,69,69,0,85,110,101,120,112,101,99,116,101,100,32,99,111,110,116,101,110,116,32,102,111,117,110,100,32,119,104,105,108,101,32,112,97,114,115,105,110,103,32,99,104,97,114,97,99,116,101,114,32,115,116,114,105,110,103,46,0,118,111,105,100,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,98,97,99,107,101,110,100,115,58,58,99,112,112,95,105,110,116,95,98,97,99,107,101,110,100,60,50,53,54,44,32,50,53,54,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,117,110,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,118,111,105,100,62,58,58,100,111,95,97,115,115,105,103,110,95,115,116,114,105,110,103,40,99,111,110,115,116,32,99,104,97,114,32,42,44,32,99,111,110,115,116,32,109,112,108,58,58,102,97,108,115,101,95,32,38,41,32,91,77,105,110,66,105,116,115,32,61,32,50,53,54,44,32,77,97,120,66,105,116,115,32,61,32,50,53,54,44,32,83,105,103,110,84,121,112,101,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,101,103,101,114,95,116,121,112,101,58,58,117,110,115,105,103,110,101,100,95,109,97,103,110,105,116,117,100,101,44,32,67,104,101,99,107,101,100,32,61,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,99,112,112,95,105,110,116,95,99,104,101,99,107,95,116,121,112,101,58,58,117,110,99,104,101,99,107,101,100,44,32,65,108,108,111,99,97,116,111,114,32,61,32,118,111,105,100,93,0,47,115,114,99,47,98,111,111,115,116,95,49,95,53,55,95,48,47,98,111,111,115,116,47,109,117,108,116,105,112,114,101,99,105,115,105,111,110,47,99,112,112,95,105,110,116,46,104,112,112,0,85,110,101,120,112,101,99,116,101,100,32,99,104,97,114,97,99,116,101,114,32,101,110,99,111,117,110,116,101,114,101,100,32,105,110,32,105,110,112,117,116,46,0,109,95,100,101,112,111,115,105,116,32,62,61,32,48,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,101,118,109,97,115,109,47,65,115,115,101,109,98,108,121,46,104,0,118,111,105,100,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,58,58,115,101,116,68,101,112,111,115,105,116,40,105,110,116,41,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,49,52,76,111,99,97,116,105,111,110,83,101,116,116,101,114,67,49,69,82,83,49,95,82,75,78,83,48,95,55,65,83,84,78,111,100,101,69,69,85,108,118,69,95,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,49,52,76,111,99,97,116,105,111,110,83,101,116,116,101,114,67,49,69,82,83,52,95,82,75,78,83,51,95,55,65,83,84,78,111,100,101,69,69,85,108,118,69,95,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,65,95,69,69,70,118,118,69,69,69,0,85,110,97,98,108,101,32,116,111,32,115,116,97,116,105,99,97,108,108,121,32,108,111,97,100,32,100,121,110,97,109,105,99,32,116,121,112,101,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,67,111,109,112,105,108,101,114,85,116,105,108,115,46,99,112,112,0,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,108,111,97,100,70,114,111,109,77,101,109,111,114,121,40,117,110,115,105,103,110,101,100,32,105,110,116,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,98,111,111,108,44,32,98,111,111,108,41,0,83,116,97,116,105,99,32,109,101,109,111,114,121,32,108,111,97,100,32,111,102,32,109,111,114,101,32,116,104,97,110,32,51,50,32,98,121,116,101,115,32,114,101,113,117,101,115,116,101,100,46,0,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,108,111,97,100,70,114,111,109,77,101,109,111,114,121,72,101,108,112,101,114,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,98,111,111,108,44,32,98,111,111,108,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,108,111,97,100,70,114,111,109,77,101,109,111,114,121,68,121,110,97,109,105,99,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,98,111,111,108,44,32,98,111,111,108,44,32,98,111,111,108,41,0,77,101,109,111,114,121,32,115,116,111,114,101,32,111,102,32,109,111,114,101,32,116,104,97,110,32,51,50,32,98,121,116,101,115,32,114,101,113,117,101,115,116,101,100,46,0,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,112,114,101,112,97,114,101,77,101,109,111,114,121,83,116,111,114,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,98,111,111,108,41,32,99,111,110,115,116,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,115,116,111,114,101,73,110,77,101,109,111,114,121,68,121,110,97,109,105,99,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,98,111,111,108,41,0,77,101,109,111,114,121,32,115,116,111,114,101,32,111,102,32,116,121,112,101,115,32,119,105,116,104,32,115,116,97,99,107,32,115,105,122,101,32,33,61,32,49,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,101,110,99,111,100,101,84,111,77,101,109,111,114,121,40,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,115,32,38,44,32,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,115,32,38,44,32,98,111,111,108,44,32,98,111,111,108,44,32,98,111,111,108,41,0,69,110,99,111,100,105,110,103,32,116,121,112,101,32,34,0,34,32,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,46,0,69,120,116,101,114,110,97,108,97,98,108,101,32,116,121,112,101,32,101,120,112,101,99,116,101,100,46,0,85,110,107,110,111,119,110,32,100,121,110,97,109,105,99,32,116,121,112,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,99,111,112,121,84,111,83,116,97,99,107,84,111,112,40,117,110,115,105,103,110,101,100,32,105,110,116,44,32,117,110,115,105,103,110,101,100,32,105,110,116,41,0,67,97,110,32,110,111,116,32,115,104,105,102,116,32,98,121,32,97,32,110,101,103,97,116,105,118,101,32,118,97,108,117,101,46,0,118,111,105,100,32,98,111,111,115,116,58,58,109,117,108,116,105,112,114,101,99,105,115,105,111,110,58,58,100,101,116,97,105,108,58,58,99,104,101,99,107,95,115,104,105,102,116,95,114,97,110,103,101,40,86,44,32,99,111,110,115,116,32,109,112,108,58,58,102,97,108,115,101,95,32,38,44,32,99,111,110,115,116,32,109,112,108,58,58,116,114,117,101,95,32,38,41,32,91,86,32,61,32,105,110,116,93,0,47,115,114,99,47,98,111,111,115,116,95,49,95,53,55,95,48,47,98,111,111,115,116,47,109,117,108,116,105,112,114,101,99,105,115,105,111,110,47,100,101,116,97,105,108,47,110,117,109,98,101,114,95,98,97,115,101,46,104,112,112,0,73,110,118,97,108,105,100,32,116,121,112,101,32,99,111,110,118,101,114,115,105,111,110,32,114,101,113,117,101,115,116,101,100,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,99,111,110,118,101,114,116,84,121,112,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,98,111,111,108,41,0,73,110,118,97,108,105,100,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,70,105,120,101,100,66,121,116,101,115,84,121,112,101,32,114,101,113,117,101,115,116,101,100,46,0,73,110,118,97,108,105,100,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,70,105,120,101,100,77,120,78,84,121,112,101,32,114,101,113,117,101,115,116,101,100,46,0,73,110,118,97,108,105,100,32,99,111,110,118,101,114,115,105,111,110,32,102,114,111,109,32,115,116,114,105,110,103,32,108,105,116,101,114,97,108,32,116,111,32,0,32,114,101,113,117,101,115,116,101,100,46,0,73,110,118,97,108,105,100,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,115,116,111,114,97,103,101,32,116,121,112,101,46,0,73,110,118,97,108,105,100,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,99,97,108,108,100,97,116,97,32,116,121,112,101,46,0,73,110,118,97,108,105,100,32,116,121,112,101,32,99,111,110,118,101,114,115,105,111,110,32,0,32,116,111,32,0,77,101,109,98,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,116,97,114,103,101,116,32,116,121,112,101,46,0,73,110,118,97,108,105,100,32,116,121,112,101,32,99,111,110,118,101,114,115,105,111,110,32,116,97,114,103,101,116,32,108,111,99,97,116,105,111,110,32,67,97,108,108,68,97,116,97,46,0,73,110,118,97,108,105,100,32,99,111,110,118,101,114,115,105,111,110,32,102,111,114,32,98,111,111,108,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,112,117,115,104,90,101,114,111,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,41,0,82,101,113,117,101,115,116,101,100,32,105,110,105,116,105,97,108,105,115,97,116,105,111,110,32,102,111,114,32,117,110,107,110,111,119,110,32,116,121,112,101,58,32,0,86,97,114,105,97,98,108,101,32,115,105,122,101,32,97,110,100,32,112,111,115,105,116,105,111,110,32,109,105,115,109,97,116,99,104,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,109,111,118,101,84,111,83,116,97,99,107,86,97,114,105,97,98,108,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,114,111,116,97,116,101,83,116,97,99,107,68,111,119,110,40,117,110,115,105,103,110,101,100,32,105,110,116,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,85,116,105,108,115,58,58,114,111,116,97,116,101,83,116,97,99,107,85,112,40,117,110,115,105,103,110,101,100,32,105,110,116,41,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,67,111,109,112,105,108,101,114,46,99,112,112,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,58,58,99,111,109,112,105,108,101,67,111,110,116,114,97,99,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,44,32,99,111,110,115,116,32,115,116,100,58,58,109,97,112,60,99,111,110,115,116,32,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,42,44,32,99,111,110,115,116,32,101,116,104,58,58,65,115,115,101,109,98,108,121,32,42,62,32,38,41,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,46,99,112,112,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,97,100,100,86,97,114,105,97,98,108,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,44,32,117,110,115,105,103,110,101,100,32,105,110,116,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,114,101,109,111,118,101,86,97,114,105,97,98,108,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,67,111,109,112,105,108,101,100,32],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+257138);allocate([99,111,110,116,114,97,99,116,32,110,111,116,32,102,111,117,110,100,46,0,99,111,110,115,116,32,101,116,104,58,58,65,115,115,101,109,98,108,121,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,99,111,109,112,105,108,101,100,67,111,110,116,114,97,99,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,32,99,111,110,115,116,0,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,58,58,116,97,103,40,41,32,99,111,110,115,116,0,78,111,32,105,110,104,101,114,105,116,97,110,99,101,32,104,105,101,114,97,114,99,104,121,32,115,101,116,46,0,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,118,105,114,116,117,97,108,70,117,110,99,116,105,111,110,69,110,116,114,121,76,97,98,101,108,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,32,38,41,0,83,117,112,101,114,32,102,117,110,99,116,105,111,110,32,0,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,118,105,114,116,117,97,108,70,117,110,99,116,105,111,110,69,110,116,114,121,76,97,98,101,108,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,32,38,44,32,118,101,99,116,111,114,60,99,111,110,115,116,32,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,42,62,58,58,99,111,110,115,116,95,105,116,101,114,97,116,111,114,41,0,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,115,117,112,101,114,70,117,110,99,116,105,111,110,69,110,116,114,121,76,97,98,101,108,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,0,118,101,99,116,111,114,60,99,111,110,115,116,32,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,42,62,58,58,99,111,110,115,116,95,105,116,101,114,97,116,111,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,115,117,112,101,114,67,111,110,116,114,97,99,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,32,99,111,110,115,116,0,66,97,115,101,32,110,111,116,32,102,111,117,110,100,32,105,110,32,105,110,104,101,114,105,116,97,110,99,101,32,104,105,101,114,97,114,99,104,121,46,0,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,111,100,105,102,105,101,114,68,101,102,105,110,105,116,105,111,110,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,102,117,110,99,116,105,111,110,77,111,100,105,102,105,101,114,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,32,99,111,110,115,116,0,70,117,110,99,116,105,111,110,32,109,111,100,105,102,105,101,114,32,0,86,97,114,105,97,98,108,101,32,110,111,116,32,102,111,117,110,100,32,111,110,32,115,116,97,99,107,46,0,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,98,97,115,101,83,116,97,99,107,79,102,102,115,101,116,79,102,86,97,114,105,97,98,108,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,41,32,99,111,110,115,116,0,86,97,114,105,97,98,108,101,32,110,111,116,32,102,111,117,110,100,32,105,110,32,115,116,111,114,97,103,101,46,0,112,97,105,114,60,117,50,53,54,44,32,117,110,115,105,103,110,101,100,32,105,110,116,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,115,116,111,114,97,103,101,76,111,99,97,116,105,111,110,79,102,86,97,114,105,97,98,108,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,41,32,99,111,110,115,116,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,46,104,0,117,110,115,105,103,110,101,100,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,115,116,97,99,107,72,101,105,103,104,116,40,41,32,99,111,110,115,116,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,97,112,112,101,110,100,73,110,108,105,110,101,65,115,115,101,109,98,108,121,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,115,116,114,105,110,103,62,32,38,44,32,99,111,110,115,116,32,109,97,112,60,115,116,114,105,110,103,44,32,115,116,114,105,110,103,62,32,38,41,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,50,48,97,112,112,101,110,100,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,82,75,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,50,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,50,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,82,75,78,83,50,95,54,118,101,99,116,111,114,73,83,56,95,78,83,54,95,73,83,56,95,69,69,69,69,82,75,78,83,50,95,51,109,97,112,73,83,56,95,83,56,95,78,83,50,95,52,108,101,115,115,73,83,56,95,69,69,78,83,54,95,73,78,83,50,95,52,112,97,105,114,73,83,57,95,83,56,95,69,69,69,69,69,69,69,51,36,95,48,0,97,117,116,111,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,58,58,97,112,112,101,110,100,73,110,108,105,110,101,65,115,115,101,109,98,108,121,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,115,116,114,105,110,103,62,32,38,44,32,99,111,110,115,116,32,109,97,112,60,115,116,114,105,110,103,44,32,115,116,114,105,110,103,62,32,38,41,58,58,40,97,110,111,110,121,109,111,117,115,32,99,108,97,115,115,41,58,58,111,112,101,114,97,116,111,114,40,41,40,99,111,110,115,116,32,97,115,115,101,109,98,108,121,58,58,73,100,101,110,116,105,102,105,101,114,32,38,44,32,101,116,104,58,58,65,115,115,101,109,98,108,121,32,38,44,32,97,115,115,101,109,98,108,121,58,58,67,111,100,101,71,101,110,101,114,97,116,111,114,58,58,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,41,32,99,111,110,115,116,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,67,111,109,112,105,108,101,114,67,111,110,116,101,120,116,50,48,97,112,112,101,110,100,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,82,75,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,82,75,78,83,95,54,118,101,99,116,111,114,73,83,65,95,78,83,56,95,73,83,65,95,69,69,69,69,82,75,78,83,95,51,109,97,112,73,83,65,95,83,65,95,78,83,95,52,108,101,115,115,73,83,65,95,69,69,78,83,56,95,73,78,83,95,52,112,97,105,114,73,83,66,95,83,65,95,69,69,69,69,69,69,69,51,36,95,48,78,83,56,95,73,83,82,95,69,69,70,98,82,75,78,83,51,95,56,97,115,115,101,109,98,108,121,49,48,73,100,101,110,116,105,102,105,101,114,69,82,78,83,50,95,51,101,116,104,56,65,115,115,101,109,98,108,121,69,78,83,84,95,49,51,67,111,100,101,71,101,110,101,114,97,116,111,114,49,55,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,69,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,69,0,84,121,112,101,32,105,110,102,111,114,109,97,116,105,111,110,32,110,111,116,32,97,118,97,105,108,97,98,108,101,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,46,99,112,112,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,83,116,97,116,101,86,97,114,105,97,98,108,101,73,110,105,116,105,97,108,105,122,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,67,111,110,115,116,83,116,97,116,101,86,97,114,105,97,98,108,101,65,99,99,101,115,115,111,114,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,83,116,97,116,101,86,97,114,105,97,98,108,101,65,99,99,101,115,115,111,114,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,32,38,41,0,65,99,99,101,115,115,111,114,115,32,102,111,114,32,109,97,112,112,105,110,103,32,119,105,116,104,32,100,121,110,97,109,105,99,97,108,108,121,45,115,105,122,101,100,32,107,101,121,115,32,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,46,0,73,110,100,101,120,32,97,99,99,101,115,115,32,105,115,32,97,108,108,111,119,101,100,32,111,110,108,121,32,102,111,114,32,34,109,97,112,112,105,110,103,34,32,97,110,100,32,34,97,114,114,97,121,34,32,116,121,112,101,115,46,0,83,116,97,99,107,32,105,115,32,116,111,111,32,100,101,101,112,46,0,76,86,97,108,117,101,32,110,111,116,32,114,101,116,114,105,101,118,101,100,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,115,115,105,103,110,109,101,110,116,32,38,41,0,67,111,109,112,111,117,110,100,32,111,112,101,114,97,116,111,114,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,110,111,110,45,118,97,108,117,101,32,116,121,112,101,115,46,0,115,116,97,116,105,99,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,86,97,108,117,101,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,65,115,115,105,103,110,109,101,110,116,84,111,66,105,110,97,114,121,79,112,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,86,97,108,117,101,41,0,83,116,97,99,107,32,116,111,111,32,100,101,101,112,44,32,116,114,121,32,114,101,109,111,118,105,110,103,32,108,111,99,97,108,32,118,97,114,105,97,98,108,101,115,46,0,85,110,107,110,111,119,110,32,98,105,110,97,114,121,32,111,112,101,114,97,116,111,114,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,79,114,100,105,110,97,114,121,66,105,110,97,114,121,79,112,101,114,97,116,111,114,67,111,100,101,40,84,111,107,101,110,58,58,86,97,108,117,101,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,41,0,67,97,110,110,111,116,32,99,114,101,97,116,101,32,100,121,110,97,109,105,99,97,108,108,121,32,115,105,122,101,100,32,105,110,108,105,110,101,32,97,114,114,97,121,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,117,112,108,101,69,120,112,114,101,115,115,105,111,110,32,38,41,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,85,110,97,114,121,79,112,101,114,97,116,105,111,110,32,38,41,0,83,116,97,99,107,32,115,105,122,101,32,33,61,32,49,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,46,0,73,110,118,97,108,105,100,32,117,110,97,114,121,32,111,112,101,114,97,116,111,114,58,32,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,32,38,41,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,65,110,100,79,114,79,112,101,114,97,116,111,114,67,111,100,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,32,38,41,0,85,110,107,110,111,119,110,32,99,111,109,112,97,114,105,115,111,110,32,111,112,101,114,97,116,111,114,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,67,111,109,112,97,114,101,79,112,101,114,97,116,111,114,67,111,100,101,40,84,111,107,101,110,58,58,86,97,108,117,101,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,41,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,67,97,108,108,32,38,41,0,71,97,115,32,108,105,109,105,116,32,115,101,116,32,102,111,114,32,99,111,110,116,114,97,99,116,32,99,114,101,97,116,105,111,110,46,0,73,110,118,97,108,105,100,32,76,79,71,32,105,110,115,116,114,117,99,116,105,111,110,32,114,101,113,117,101,115,116,101,100,46,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,115,116,114,117,99,116,105,111,110,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,108,111,103,73,110,115,116,114,117,99,116,105,111,110,40,117,110,115,105,103,110,101,100,32,105,110,116,41,0,84,111,111,32,109,97,110,121,32,105,110,100,101,120,101,100,32,97,114,103,117,109,101,110,116,115,46,0,73,110,118,97,108,105,100,32,102,117,110,99,116,105,111,110,32,116,121,112,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,69,120,116,101,114,110,97,108,70,117,110,99,116,105,111,110,67,97,108,108,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,65,83,84,80,111,105,110,116,101,114,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,32,62,32,38,41,0,85,110,97,98,108,101,32,116,111,32,114,101,116,117,114,110,32,100,121,110,97,109,105,99,32,116,121,112,101,32,102,114,111,109,32,101,120,116,101,114,110,97,108,32,99,97,108,108,46,0,86,97,108,117,101,32,115,101,116,32,102,111,114,32,100,101,108,101,103,97,116,101,99,97,108,108,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,101,109,98,101,114,65,99,99,101,115,115,32,38,41,0,70,117,110,99,116,105,111,110,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,101,109,98,101,114,32,97,99,99,101,115,115,0,82,101,102,101,114,101,110,99,101,100,32,100,101,99,108,97,114,97,116,105,111,110,32,110,111,116,32,114,101,115,111,108,118,101,100,46,0,67,111,110,116,114,97,99,116,32,109,101,109,98,101,114,32,105,115,32,110,101,105,116,104,101,114,32,118,97,114,105,97,98,108,101,32,110,111,114,32,102,117,110,99,116,105,111,110,46,0,98,97,108,97,110,99,101,0,115,101,110,100,0,99,97,108,108,99,111,100,101,0,100,101,108,101,103,97,116,101,99,97,108,108,0,73,110,118,97,108,105,100,32,109,101,109,98,101,114,32,97,99,99,101,115,115,32,116,111,32,105,110,116,101,103,101,114,46,0,73,110,118,97,108,105,100,32,109,101,109,98,101,114,32,97,99,99,101,115,115,32,116,111,32,102,117,110,99,116,105,111,110,46,0,99,111,105,110,98,97,115,101,0,116,105,109,101,115,116,97,109,112,0,100,105,102,102,105,99,117,108,116,121,0,110,117,109,98,101,114,0,103,97,115,108,105,109,105,116,0,115,101,110,100,101,114,0,118,97,108,117,101,0,111,114,105,103,105,110,0,103,97,115,0,103,97,115,112,114,105,99,101,0,100,97,116,97,0,115,105,103,0,85,110,107,110,111,119,110,32,109,97,103,105,99,32,109,101,109,98,101,114,46,0,73,108,108,101,103,97,108,32,100,97,116,97,32,108,111,99,97,116,105,111,110,32,102,111,114,32,115,116,114,117,99,116,46,0,112,117,115,104,0,84,114,105,101,100,32,116,111,32,117,115,101,32,46,112,117,115,104,40,41,32,111,110,32,97,32,110,111,110,45,100,121,110,97,109,105,99,97,108,108,121,32,115,105,122,101,100,32,97,114,114,97,121,0,73,108,108,101,103,97,108,32,97,114,114,97,121,32,109,101,109,98,101,114,46,0,73,108,108,101,103,97,108,32,102,105,120,101,100,32,98,121,116,101,115,32,109,101,109,98,101,114,46,0,77,101,109,98,101,114,32,97,99,99,101,115,115,32,116,111,32,117,110,107,110,111,119,110,32,116,121,112,101,46,0,73,110,100,101,120,32,101,120,112,114,101,115,115,105,111,110,32,101,120,112,101,99,116,101,100,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,100,101,120,65,99,99,101,115,115,32,38,41,0,73,110,100,101,120,32,97,99,99,101,115,115,32,116,111,32,115,116,114,105,110,103,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,46,0,78,101,115,116,101,100,32,97,114,114,97,121,115,32,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,46,0,73,110,100,101,120,32,97,99,99,101,115,115,32,111,110,108,121,32,97,108,108,111,119,101,100,32,102,111,114,32,109,97,112,112,105,110,103,115,32,111,114,32,97,114,114,97,121,115,46,0,78,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,110,111,110,45,118,97,108,117,101,32,116,121,112,101,115,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,69,120,112,114,101,115,115,105,111,110,67,111,112,121,84,111,77,101,109,111,114,121,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,41,0,73,100,101,110,116,105,102,105,101,114,32,116,121,112,101,32,110,111,116,32,101,120,112,101,99,116,101,100,32,105,110,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,101,120,116,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,101,110,100,86,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,100,101,110,116,105,102,105,101,114,32,38,41,0,73,100,101,110,116,105,102,105,101,114,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,114,32,105,100,101,110,116,105,102,105,101,114,32,110,111,116,32,102,111,117,110,100,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,115,101,116,76,86,97,108,117,101,70,114,111,109,68,101,99,108,97,114,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,41,0,79,110,108,121,32,105,110,116,101,103,101,114,44,32,98,111,111,108,101,97,110,32,97,110,100,32,115,116,114,105,110,103,32,108,105,116,101,114,97,108,115,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,110,111,119,46,0,118,105,114,116,117,97,108,32,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,101,110,100,86,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,76,105,116,101,114,97,108,32,38,41,0,78,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,32,45,32,70,105,120,101,100,80,111,105,110,116,84,121,112,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,65,114,105,116,104,109,101,116,105,99,79,112,101,114,97,116,111,114,67,111,100,101,40,84,111,107,101,110,58,58,86,97,108,117,101,44,32,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,41,0,85,110,107,110,111,119,110,32,97,114,105,116,104,109,101,116,105,99,32,111,112,101,114,97,116,111,114,46,0,85,110,107,110,111,119,110,32,98,105,116,32,111,112,101,114,97,116,111,114,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,66,105,116,79,112,101,114,97,116,111,114,67,111,100,101,40,84,111,107,101,110,58,58,86,97,108,117,101,41,0,83,104,105,102,116,32,111,112,101,114,97,116,111,114,115,32,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,97,112,112,101,110,100,83,104,105,102,116,79,112,101,114,97,116,111,114,67,111,100,101,40,84,111,107,101,110,58,58,86,97,108,117,101,41,0,67,117,114,114,101,110,116,32,76,86,97,108,117,101,32,110,111,116,32,114,101,115,101,116,32,98,101,102,111,114,101,32,116,114,121,105,110,103,32,116,111,32,115,101,116,32,110,101,119,32,111,110,101,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,115,111,108,105,100,105,116,121,47,99,111,100,101,103,101,110,47,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,46,104,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,115,101,116,76,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,44,32,99,111,110,115,116,32,95,65,114,103,117,109,101,110,116,115,32,38,46,46,46,41,32,91,95,76,86,97,108,117,101,84,121,112,101,32,61,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,73,116,101,109,44,32,95,65,114,103,117,109,101,110,116,115,32,61,32,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,62,93,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,115,101,116,76,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,44,32,99,111,110,115,116,32,95,65,114,103,117,109,101,110,116,115,32,38,46,46,46,41,32,91,95,76,86,97,108,117,101,84,121,112,101,32,61,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,97,99,107,86,97,114,105,97,98,108,101,44,32,95,65,114,103,117,109,101,110,116,115,32,61,32,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,62,93,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,115,101,116,76,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,44,32,99,111,110,115,116,32,95,65,114,103,117,109,101,110,116,115,32,38,46,46,46,41,32,91,95,76,86,97,108,117,101,84,121,112,101,32,61,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,101,109,111,114,121,73,116,101,109,44,32,95,65,114,103,117,109,101,110,116,115,32,61,32,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,44,32,98,111,111,108,62,93,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,115,101,116,76,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,44,32,99,111,110,115,116,32,95,65,114,103,117,109,101,110,116,115,32,38,46,46,46,41,32,91,95,76,86,97,108,117,101,84,121,112,101,32,61,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,66,121,116,101,65,114,114,97,121,69,108,101,109,101,110,116,44,32,95,65,114,103,117,109,101,110,116,115,32,61,32,60,62,93,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,115,101,116,76,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,44,32,99,111,110,115,116,32,95,65,114,103,117,109,101,110,116,115,32,38,46,46,46,41,32,91,95,76,86,97,108,117,101,84,121,112,101,32,61,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,65,114,114,97,121,76,101,110,103,116,104,44,32,95,65,114,103,117,109,101,110,116,115,32,61,32,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,62,93,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,115,101,116,76,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,44,32,99,111,110,115,116,32,95,65,114,103,117,109,101,110,116,115,32,38,46,46,46,41,32,91,95,76,86,97,108,117,101,84,121,112,101,32,61,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,77,101,109,111,114,121,73,116,101,109,44,32,95,65,114,103,117,109,101,110,116,115,32,61,32,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,62,93,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,67,111,109,112,105,108,101,114,58,58,115,101,116,76,86,97,108,117,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,32,38,44,32,99,111,110,115,116,32,95,65,114,103,117,109,101,110,116,115,32,38,46,46,46,41,32,91,95,76,86,97,108,117,101,84,121,112,101,32,61,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,116,111,114,97,103,101,73,116,101,109,44,32,95,65,114,103,117,109,101,110,116,115,32,61,32,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,62,93,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,87,104,121,51,84,114,97,110,115,108,97,116,111,114,69,0,77,117,108,116,105,112,108,101,32,115,111,117,114,99,101,32,117,110,105,116,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,0,84,104,101,114,101,32,105,115,32,97,32,99,97,108,108,32,116,111,32,116,111,70,111,114,109,97,108,84,121,112,101,40,41,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,99,97,116,99,104,32,78,111,70,111,114,109,97,108,84,121,112,101,32,101,120,99,101,112,116,105,111,110,115,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,102,111,114,109,97,108,47,87,104,121,51,84,114,97,110,115,108,97,116,111,114,46,99,112,112,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,87,104,121,51,84,114,97,110,115,108,97,116,111,114,58,58,112,114,111,99,101,115,115,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,111,117,114,99,101,85,110,105,116,32,38,41,0,10,109,111,100,117,108,101,32,85,73,110,116,50,53,54,10,9,117,115,101,32,105,109,112,111,114,116,32,109,97,99,104,46,105,110,116,46,85,110,115,105,103,110,101,100,10,9,116,121,112,101,32,117,105,110,116,50,53,54,10,9,99,111,110,115,116,97,110,116,32,109,97,120,95,117,105,110,116,50,53,54,58,32,105,110,116,32,61,32,48,120,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,10,9,99,108,111,110,101,32,101,120,112,111,114,116,32,109,97,99,104,46,105,110,116,46,85,110,115,105,103,110,101,100,32,119,105,116,104,10,9,9,116,121,112,101,32,116,32,61,32,117,105,110,116,50,53,54,44,10,9,9,99,111,110,115,116,97,110,116,32,109,97,120,32,61,32,109,97,120,95,117,105,110,116,50,53,54,10,101,110,100,10,10,109,111,100,117,108,101,32,65,100,100,114,101,115,115,10,9,117,115,101,32,105,109,112,111,114,116,32,109,97,99,104,46,105,110,116,46,85,110,115,105,103,110,101,100,10,9,116,121,112,101,32,97,100,100,114,101,115,115,10,9,99,111,110,115,116,97,110,116,32,109,97,120,95,97,100,100,114,101,115,115,58,32,105,110,116,32,61,32,48,120,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,32,40,42,32,49,54,48,32,98,105,116,32,61,32,52,48,32,102,39,115,32,42,41,10,9,99,108,111,110,101,32,101,120,112,111,114,116,32,109,97,99,104,46,105,110,116,46,85,110,115,105,103,110,101,100,32,119,105,116,104,10,9,9,116,121,112,101,32,116,32,61,32,97,100,100,114,101,115,115,44,10,9,9,99,111,110,115,116,97,110,116,32,109,97,120,32,61,32,109,97,120,95,97,100,100,114,101,115,115,10,101,110,100,10,32,32,32,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,87,104,121,51,84,114,97,110,115,108,97,116,111,114,58,58,102,97,116,97,108,69,114,114,111,114,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,78,111,100,101,32,38,44,32,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,0,117,105,110,116,50,53,54,0,99,111,110,115,116,32,84,121,112,101,80,111,105,110,116,101,114,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,114,114,97,121,84,121,112,101,58,58,98,97,115,101,84,121,112,101,40,41,32,99,111,110,115,116,0,97,114,114,97,121,32,0,65,32,109,97,112,112,105,110,103,84,121,112,101,32,109,105,115,115,101,115,32,97,32,107,101,121,84,121,112,101,46,0,115,116,114,105,110,103,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,87,104,121,51,84,114,97,110,115,108,97,116,111,114,58,58,116,111,70,111,114,109,97,108,84,121,112,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,32,38,41,32,99,111,110,115,116,0,65,32,109,97,112,112,105,110,103,84,121,112,101,32,109,105,115,115,101,115,32,97,32,118,97,108,117,101,84,121,112,101,46,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,87,104,121,51,84,114,97,110,115,108,97,116,111,114,58,58,117,110,105,110,100,101,110,116,40,41,0,77,111,114,101,32,116,104,97,110,32,111,110,101,32,99,111,110,116,114,97,99,116,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,76,105,98,114,97,114,105,101,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,109,111,100,117,108,101,32,67,111,110,116,114,97,99,116,95,0,117,115,101,32,105,109,112,111,114,116,32,105,110,116,46,73,110,116,0,117,115,101,32,105,109,112,111,114,116,32,114,101,102,46,82,101,102,0,117,115,101,32,105,109,112,111,114,116,32,109,97,112,46,77,97,112,0,117,115,101,32,105,109,112,111,114,116,32,97,114,114,97,121,46,65,114,114,97,121,0,117,115,101,32,105,109,112,111,114,116,32,105,110,116,46,67,111,109,112,117,116,101,114,68,105,118,105,115,105,111,110,0,117,115,101,32,105,109,112,111,114,116,32,109,97,99,104,46,105,110,116,46,85,110,115,105,103,110,101,100,0,117,115,101,32,105,109,112,111,114,116,32,85,73,110,116,50,53,54,0,101,120,99,101,112,116,105,111,110,32,82,101,118,101,114,116,0,101,120,99,101,112,116,105,111,110,32,82,101,116,117,114,110,0,116,121,112,101,32,115,116,97,116,101,32,61,32,40,41,0,116,121,112,101,32,115,116,97,116,101,32,61,32,123,0,32,34,0,34,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,115,116,97,116,101,32,118,97,114,105,97,98,108,101,46,0,109,117,116,97,98,108,101,32,95,0,116,121,112,101,32,97,99,99,111,117,110,116,32,61,32,123,0,109,117,116,97,98,108,101,32,98,97,108,97,110,99,101,58,32,117,105,110,116,50,53,54,59,0,115,116,111,114,97,103,101,58,32,115,116,97,116,101,0,118,97,108,32,101,120,116,101,114,110,97,108,95,99,97,108,108,32,40,116,104,105,115,58,32,97,99,99,111,117,110,116,41,58,32,98,111,111,108,0,101,110,115,117,114,101,115,32,123,32,114,101,115,117,108,116,32,61,32,102,97,108,115,101,32,45,62,32,116,104,105,115,32,61,32,40,111,108,100,32,116,104,105,115,41,32,125,0,119,114,105,116,101,115,32,123,32,116,104,105,115,32,125,0,73,110,104,101,114,105,116,97,110,99,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,85,115,101,114,45,100,101,102,105,110,101,100,32,116,121,112,101,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,69,118,101,110,116,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,77,111,100,105,102,105,101,114,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,119,104,121,51,0,101,110,100,0,85,110,105,109,112,108,101,109,101,110,116,101,100,32,102,117,110,99,116,105,111,110,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,70,97,108,108,98,97,99,107,32,102,117,110,99,116,105,111,110,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,108,101,116,32,114,101,99,32,95,0,32,40,116,104,105,115,58,32,97,99,99,111,117,110,116,41,0,80,97,114,97,109,101,116,101,114,32,116,121,112,101,32,34,0,34,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,65,110,111,110,121,109,111,117,115,32,102,117,110,99,116,105,111,110,32,112,97,114,97,109,101,116,101,114,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,32,40,97,114,103,95,0,80,97,114,97,109,101,116,101,114,32,116,121,112,101,32,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,79,110,108,121,32,102,117,110,99,116,105,111,110,115,32,105,110,115,105,100,101,32,99,111,110,116,114,97,99,116,115,32,97,108,108,111,119,101,100,46,0,101,110,115,117,114,101,115,32,123,32,40,111,108,100,32,116,104,105,115,41,32,61,32,116,104,105,115,32,125,0,108,101,116,32,112,114,101,115,116,97,116,101,32,61,32,123,98,97,108,97,110,99,101,32,61,32,116,104,105,115,46,98,97,108,97,110,99,101,59,32,115,116,111,114,97,103,101,32,61,32,0,125,32,105,110,32,0,108,101,116,32,95,0,32,61,32,114,101,102,32,97,114,103,95,0,32,105,110,0,85,110,110,97,109,101,100,32,114,101,116,117,114,110,32,118,97,114,105,97,98,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,46,0,84,121,112,101,32,0,105,110,32,114,101,116,117,114,110,32,112,97,114,97,109,101,116,101,114,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,46,0,58,32,114,101,102,32,0,32,61,32,114,101,102,32,40,111,102,95,105,110,116,32,48,41,32,105,110,0,85,110,110,97,109,101,100,32,118,97,114,105,97,98,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+267378);allocate([111,114,116,101,100,46,0,105,110,32,118,97,114,105,97,98,108,101,32,100,101,99,108,97,114,97,116,105,111,110,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,46,0,114,97,105,115,101,32,82,101,116,117,114,110,0,119,105,116,104,32,82,101,116,117,114,110,32,45,62,32,40,0,33,95,0,41,32,124,0,32,32,32,32,32,82,101,118,101,114,116,32,45,62,32,116,104,105,115,46,98,97,108,97,110,99,101,32,60,45,32,112,114,101,115,116,97,116,101,46,98,97,108,97,110,99,101,59,32,0,116,104,105,115,46,115,116,111,114,97,103,101,46,95,0,32,60,45,32,112,114,101,115,116,97,116,101,46,115,116,111,114,97,103,101,46,95,0,59,32,0,32,61,32,116,104,105,115,46,115,116,111,114,97,103,101,46,95,0,98,101,103,105,110,0,105,102,32,0,32,116,104,101,110,0,119,104,105,108,101,32,0,100,111,110,101,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,87,104,121,51,84,114,97,110,115,108,97,116,111,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,82,101,116,117,114,110,32,38,41,0,68,105,114,101,99,116,108,121,32,114,101,116,117,114,110,105,110,103,32,116,117,112,108,101,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,32,82,97,116,104,101,114,32,97,115,115,105,103,110,32,116,111,32,114,101,116,117,114,110,32,118,97,114,105,97,98,108,101,46,0,98,101,103,105,110,32,95,0,32,58,61,32,0,59,32,114,97,105,115,101,32,82,101,116,117,114,110,32,101,110,100,0,114,97,105,115,101,32,82,101,118,101,114,116,0,77,117,108,116,105,112,108,101,32,118,97,114,105,97,98,108,101,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,67,111,109,112,111,117,110,100,32,97,115,115,105,103,110,109,101,110,116,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,32,60,45,32,0,79,110,108,121,32,116,117,112,108,101,115,32,119,105,116,104,32,101,120,97,99,116,108,121,32,111,110,101,32,99,111,109,112,111,110,101,110,116,32,115,117,112,112,111,114,116,101,100,46,0,84,121,112,101,32,34,0,34,32,115,117,112,112,111,114,116,101,100,32,105,110,32,117,110,97,114,121,32,111,112,101,114,97,116,105,111,110,46,0,40,110,111,116,32,0,79,112,101,114,97,116,111,114,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,87,104,121,51,84,114,97,110,115,108,97,116,111,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,32,38,41,0,70,114,97,99,116,105,111,110,97,108,32,110,117,109,98,101,114,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,40,111,102,95,105,110,116,32,0,32,38,38,32,0,32,124,124,32,0,32,108,111,114,32,0,32,108,120,111,114,32,0,32,108,97,110,100,32,0,32,43,32,0,32,45,32,0,32,42,32,0,32,47,32,0,32,109,111,100,32,0,32,61,32,0,32,60,62,32,0,32,60,32,0,32,62,32,0,32,60,61,32,0,32,62,61,32,0,79,110,108,121,32,111,114,100,105,110,97,114,121,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,115,117,112,112,111,114,116,101,100,46,0,40,111,102,95,105,110,116,32,40,109,111,100,32,40,73,110,116,46,40,0,41,32,40,116,111,95,105,110,116,32,0,41,41,32,40,116,111,95,105,110,116,32,0,41,41,41,0,70,117,110,99,116,105,111,110,32,99,97,108,108,115,32,119,105,116,104,32,110,97,109,101,100,32,97,114,103,117,109,101,110,116,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,32,115,116,97,116,101,0,108,101,116,32,97,109,111,117,110,116,32,61,32,48,32,105,110,32,0,105,102,32,97,109,111,117,110,116,32,60,61,32,116,104,105,115,46,98,97,108,97,110,99,101,32,116,104,101,110,0,108,101,116,32,98,97,108,97,110,99,101,95,112,114,101,99,97,108,108,32,61,32,116,104,105,115,46,98,97,108,97,110,99,101,32,105,110,0,116,104,105,115,46,98,97,108,97,110,99,101,32,60,45,32,116,104,105,115,46,98,97,108,97,110,99,101,32,45,32,97,109,111,117,110,116,59,0,105,102,32,110,111,116,32,40,101,120,116,101,114,110,97,108,95,99,97,108,108,32,116,104,105,115,41,32,116,104,101,110,32,98,101,103,105,110,32,116,104,105,115,46,98,97,108,97,110,99,101,32,61,32,98,97,108,97,110,99,101,95,112,114,101,99,97,108,108,59,32,102,97,108,115,101,32,101,110,100,32,101,108,115,101,32,116,114,117,101,0,101,108,115,101,32,102,97,108,115,101,0,108,101,116,32,97,109,111,117,110,116,32,61,32,0,118,105,114,116,117,97,108,32,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,87,104,121,51,84,114,97,110,115,108,97,116,111,114,58,58,118,105,115,105,116,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,67,97,108,108,32,38,41,0,32,105,110,32,0,79,110,108,121,32,105,110,116,101,114,110,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,115,32,115,117,112,112,111,114,116,101,100,46,0,108,101,110,103,116,104,0,46,108,101,110,103,116,104,0,99,97,108,108,0,77,101,109,98,101,114,32,97,99,99,101,115,115,58,32,79,110,108,121,32,99,97,108,108,32,97,110,100,32,97,114,114,97,121,32,108,101,110,103,116,104,32,115,117,112,112,111,114,116,101,100,46,0,73,110,100,101,120,32,97,99,99,101,115,115,32,111,110,108,121,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,97,114,114,97,121,115,46,0,65,115,115,105,103,110,109,101,110,116,32,116,111,32,97,114,114,97,121,32,101,108,101,109,101,110,116,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,91,116,111,95,105,110,116,32,0,116,104,105,115,46,115,116,111,114,97,103,101,46,0,33,40,0,78,111,116,32,115,117,112,112,111,114,116,101,100,46,0,40,33,95,0,40,116,104,105,115,46,115,116,111,114,97,103,101,46,95,0,67,111,100,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,102,111,114,109,97,108,32,118,101,114,105,102,105,99,97,116,105,111,110,46,0,78,53,98,111,111,115,116,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,116,97,103,95,110,111,70,111,114,109,97,108,84,121,112,101,70,114,111,109,69,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,52,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,52,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,87,104,121,51,84,114,97,110,115,108,97,116,111,114,49,50,78,111,70,111,114,109,97,108,84,121,112,101,69,69,69,0,78,53,98,111,111,115,116,54,100,101,116,97,105,108,49,55,115,112,95,99,111,117,110,116,101,100,95,105,109,112,108,95,112,73,78,83,95,49,48,101,114,114,111,114,95,105,110,102,111,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,116,97,103,95,110,111,70,111,114,109,97,108,84,121,112,101,70,114,111,109,69,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,54,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,54,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,69,69,69,69,0,80,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,116,97,103,95,110,111,70,111,114,109,97,108,84,121,112,101,70,114,111,109,69,0,93,32,61,32,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,87,104,121,51,84,114,97,110,115,108,97,116,111,114,49,50,78,111,70,111,114,109,97,108,84,121,112,101,69,0,80,97,114,115,101,114,32,114,101,116,117,114,110,101,100,32,110,117,108,108,32,98,117,116,32,100,105,100,32,110,111,116,32,114,101,112,111,114,116,32,101,114,114,111,114,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,105,110,116,101,114,102,97,99,101,47,67,111,109,112,105,108,101,114,83,116,97,99,107,46,99,112,112,0,98,111,111,108,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,112,97,114,115,101,40,41,0,70,105,108,101,32,110,111,116,32,115,117,112,112,108,105,101,100,32,105,110,105,116,105,97,108,108,121,46,0,83,111,117,114,99,101,32,34,0,34,32,110,111,116,32,102,111,117,110,100,58,32,0,76,105,98,114,97,114,121,32,34,0,34,32,100,101,99,108,97,114,101,100,32,116,119,105,99,101,32,40,119,105,108,108,32,99,114,101,97,116,101,32,97,109,98,105,103,117,105,116,105,101,115,32,100,117,114,105,110,103,32,108,105,110,107,105,110,103,41,46,0,84,104,101,32,111,116,104,101,114,32,100,101,99,108,97,114,97,116,105,111,110,32,105,115,32,104,101,114,101,58,0,80,97,114,115,105,110,103,32,119,97,115,32,110,111,116,32,115,117,99,99,101,115,115,102,117,108,46,0,118,101,99,116,111,114,60,115,116,114,105,110,103,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,99,111,110,116,114,97,99,116,78,97,109,101,115,40,41,32,99,111,110,115,116,0,78,111,32,99,111,109,112,105,108,101,100,32,99,111,110,116,114,97,99,116,115,32,102,111,117,110,100,46,0,99,111,110,115,116,32,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,67,111,110,116,114,97,99,116,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,99,111,110,116,114,97,99,116,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,32,99,111,110,115,116,0,67,111,110,116,114,97,99,116,32,0,32,110,111,116,32,102,111,117,110,100,46,0,67,111,110,116,114,97,99,116,32,110,111,116,32,102,117,108,108,121,32,105,109,112,108,101,109,101,110,116,101,100,0,99,111,110,115,116,32,115,116,114,105,110,103,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,109,101,116,97,100,97,116,97,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,44,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,111,99,117,109,101,110,116,97,116,105,111,110,84,121,112,101,41,32,99,111,110,115,116,0,73,108,108,101,103,97,108,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,116,121,112,101,46,0,71,105,118,101,110,32,115,111,117,114,99,101,32,102,105,108,101,32,110,111,116,32,102,111,117,110,100,46,0,99,111,110,115,116,32,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,83,111,117,114,99,101,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,115,111,117,114,99,101,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,32,99,111,110,115,116,0,46,46,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,67,111,109,112,105,108,101,114,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,67,111,109,112,105,108,101,114,83,116,97,99,107,49,52,114,101,115,111,108,118,101,73,109,112,111,114,116,115,69,118,69,51,36,95,49,0,97,117,116,111,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,114,101,115,111,108,118,101,73,109,112,111,114,116,115,40,41,58,58,40,97,110,111,110,121,109,111,117,115,32,99,108,97,115,115,41,58,58,111,112,101,114,97,116,111,114,40,41,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,109,112,105,108,101,114,83,116,97,99,107,58,58,83,111,117,114,99,101,32,42,41,32,99,111,110,115,116,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,67,111,109,112,105,108,101,114,83,116,97,99,107,49,52,114,101,115,111,108,118,101,73,109,112,111,114,116,115,69,118,69,51,36,95,49,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,53,95,69,69,70,118,80,75,78,83,52,95,54,83,111,117,114,99,101,69,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,118,80,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,67,111,109,112,105,108,101,114,83,116,97,99,107,54,83,111,117,114,99,101,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,71,108,111,98,97,108,67,111,110,116,101,120,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,83,99,97,110,110,101,114,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,105,110,116,101,114,102,97,99,101,47,71,97,115,69,115,116,105,109,97,116,111,114,46,99,112,112,0,115,116,97,116,105,99,32,71,97,115,69,115,116,105,109,97,116,111,114,58,58,65,83,84,71,97,115,67,111,110,115,117,109,112,116,105,111,110,83,101,108,102,65,99,99,117,109,117,108,97,116,101,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,71,97,115,69,115,116,105,109,97,116,111,114,58,58,115,116,114,117,99,116,117,114,97,108,69,115,116,105,109,97,116,105,111,110,40,99,111,110,115,116,32,65,115,115,101,109,98,108,121,73,116,101,109,115,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,78,111,100,101,32,42,62,32,38,41,0,115,116,97,116,105,99,32,109,97,112,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,78,111,100,101,32,42,44,32,71,97,115,77,101,116,101,114,58,58,71,97,115,67,111,110,115,117,109,112,116,105,111,110,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,71,97,115,69,115,116,105,109,97,116,111,114,58,58,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,40,99,111,110,115,116,32,65,83,84,71,97,115,67,111,110,115,117,109,112,116,105,111,110,83,101,108,102,65,99,99,117,109,117,108,97,116,101,100,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,83,84,78,111,100,101,32,42,62,32,38,41,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,69,82,75,78,83,116,51,95,95,49,51,109,97,112,73,80,75,78,83,48,95,55,65,83,84,78,111,100,101,69,78,83,50,95,53,97,114,114,97,121,73,78,83,95,51,101,116,104,56,71,97,115,77,101,116,101,114,49,52,71,97,115,67,111,110,115,117,109,112,116,105,111,110,69,76,106,50,69,69,69,78,83,50,95,52,108,101,115,115,73,83,54,95,69,69,78,83,50,95,57,97,108,108,111,99,97,116,111,114,73,78,83,50,95,52,112,97,105,114,73,75,83,54,95,83,66,95,69,69,69,69,69,69,82,75,78,83,50,95,54,118,101,99,116,111,114,73,83,54,95,78,83,69,95,73,83,54,95,69,69,69,69,69,51,36,95,53,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,69,82,75,78,83,95,51,109,97,112,73,80,75,78,83,51,95,55,65,83,84,78,111,100,101,69,78,83,95,53,97,114,114,97,121,73,78,83,50,95,51,101,116,104,56,71,97,115,77,101,116,101,114,49,52,71,97,115,67,111,110,115,117,109,112,116,105,111,110,69,76,106,50,69,69,69,78,83,95,52,108,101,115,115,73,83,56,95,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,78,83,95,52,112,97,105,114,73,75,83,56,95,83,68,95,69,69,69,69,69,69,82,75,78,83,95,54,118,101,99,116,111,114,73,83,56,95,78,83,71,95,73,83,56,95,69,69,69,69,69,51,36,95,53,78,83,71,95,73,83,84,95,69,69,70,118,82,83,55,95,83,86,95,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,118,82,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,65,83,84,78,111,100,101,69,83,54,95,69,69,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,69,82,75,78,83,116,51,95,95,49,51,109,97,112,73,80,75,78,83,48,95,55,65,83,84,78,111,100,101,69,78,83,50,95,53,97,114,114,97,121,73,78,83,95,51,101,116,104,56,71,97,115,77,101,116,101,114,49,52,71,97,115,67,111,110,115,117,109,112,116,105,111,110,69,76,106,50,69,69,69,78,83,50,95,52,108,101,115,115,73,83,54,95,69,69,78,83,50,95,57,97,108,108,111,99,97,116,111,114,73,78,83,50,95,52,112,97,105,114,73,75,83,54,95,83,66,95,69,69,69,69,69,69,82,75,78,83,50,95,54,118,101,99,116,111,114,73,83,54,95,78,83,69,95,73,83,54,95,69,69,69,69,69,51,36,95,52,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,69,82,75,78,83,95,51,109,97,112,73,80,75,78,83,51,95,55,65,83,84,78,111,100,101,69,78,83,95,53,97,114,114,97,121,73,78,83,50,95,51,101,116,104,56,71,97,115,77,101,116,101,114,49,52,71,97,115,67,111,110,115,117,109,112,116,105,111,110,69,76,106,50,69,69,69,78,83,95,52,108,101,115,115,73,83,56,95,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,78,83,95,52,112,97,105,114,73,75,83,56,95,83,68,95,69,69,69,69,69,69,82,75,78,83,95,54,118,101,99,116,111,114,73,83,56,95,78,83,71,95,73,83,56,95,69,69,69,69,69,51,36,95,52,78,83,71,95,73,83,84,95,69,69,70,98,82,83,55,95,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,98,82,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,65,83,84,78,111,100,101,69,69,69,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,69,82,75,78,83,116,51,95,95,49,51,109,97,112,73,80,75,78,83,48,95,55,65,83,84,78,111,100,101,69,78,83,50,95,53,97,114,114,97,121,73,78,83,95,51,101,116,104,56,71,97,115,77,101,116,101,114,49,52,71,97,115,67,111,110,115,117,109,112,116,105,111,110,69,76,106,50,69,69,69,78,83,50,95,52,108,101,115,115,73,83,54,95,69,69,78,83,50,95,57,97,108,108,111,99,97,116,111,114,73,78,83,50,95,52,112,97,105,114,73,75,83,54,95,83,66,95,69,69,69,69,69,69,82,75,78,83,50,95,54,118,101,99,116,111,114,73,83,54,95,78,83,69,95,73,83,54,95,69,69,69,69,69,51,36,95,51,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,69,82,75,78,83,95,51,109,97,112,73,80,75,78,83,51,95,55,65,83,84,78,111,100,101,69,78,83,95,53,97,114,114,97,121,73,78,83,50,95,51,101,116,104,56,71,97,115,77,101,116,101,114,49,52,71,97,115,67,111,110,115,117,109,112,116,105,111,110,69,76,106,50,69,69,69,78,83,95,52,108,101,115,115,73,83,56,95,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,78,83,95,52,112,97,105,114,73,75,83,56,95,83,68,95,69,69,69,69,69,69,82,75,78,83,95,54,118,101,99,116,111,114,73,83,56,95,78,83,71,95,73,83,56,95,69,69,69,69,69,51,36,95,51,78,83,71,95,73,83,84,95,69,69,70,118,82,83,55,95,83,86,95,69,69,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,69,82,75,78,83,116,51,95,95,49,51,109,97,112,73,80,75,78,83,48,95,55,65,83,84,78,111,100,101,69,78,83,50,95,53,97,114,114,97,121,73,78,83,95,51,101,116,104,56,71,97,115,77,101,116,101,114,49,52,71,97,115,67,111,110,115,117,109,112,116,105,111,110,69,76,106,50,69,69,69,78,83,50,95,52,108,101,115,115,73,83,54,95,69,69,78,83,50,95,57,97,108,108,111,99,97,116,111,114,73,78,83,50,95,52,112,97,105,114,73,75,83,54,95,83,66,95,69,69,69,69,69,69,82,75,78,83,50,95,54,118,101,99,116,111,114,73,83,54,95,78,83,69,95,73,83,54,95,69,69,69,69,69,51,36,95,50,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,98,114,101,97,107,84,111,83,116,97,116,101,109,101,110,116,76,101,118,101,108,69,82,75,78,83,95,51,109,97,112,73,80,75,78,83,51,95,55,65,83,84,78,111,100,101,69,78,83,95,53,97,114,114,97,121,73,78,83,50,95,51,101,116,104,56,71,97,115,77,101,116,101,114,49,52,71,97,115,67,111,110,115,117,109,112,116,105,111,110,69,76,106,50,69,69,69,78,83,95,52,108,101,115,115,73,83,56,95,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,78,83,95,52,112,97,105,114,73,75,83,56,95,83,68,95,69,69,69,69,69,69,82,75,78,83,95,54,118,101,99,116,111,114,73,83,56,95,78,83,71,95,73,83,56,95,69,69,69,69,69,51,36,95,50,78,83,71,95,73,83,84,95,69,69,70,98,82,83,55,95,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,83,105,109,112,108,101,65,83,84,86,105,115,105,116,111,114,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,102,105,110,101,115,116,78,111,100,101,115,65,116,76,111,99,97,116,105,111,110,69,82,75,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,80,75,78,83,48,95,55,65,83,84,78,111,100,101,69,78,83,50,95,57,97,108,108,111,99,97,116,111,114,73,83,54,95,69,69,69,69,69,51,36,95,54,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,49,102,105,110,101,115,116,78,111,100,101,115,65,116,76,111,99,97,116,105,111,110,69,82,75,78,83,95,54,118,101,99,116,111,114,73,80,75,78,83,51,95,55,65,83,84,78,111,100,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,56,95,69,69,69,69,69,51,36,95,54,78,83,57,95,73,83,69,95,69,69,70,118,82,83,55,95,69,69,69,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,98,97,115,101,73,70,118,82,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,65,83,84,78,111,100,101,69,69,69,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,65,83,84,82,101,100,117,99,101,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,48,115,116,114,117,99,116,117,114,97,108,69,115,116,105,109,97,116,105,111,110,69,82,75,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,78,83,95,51,101,116,104,49,50,65,115,115,101,109,98,108,121,73,116,101,109,69,78,83,50,95,57,97,108,108,111,99,97,116,111,114,73,83,53,95,69,69,69,69,82,75,78,83,51,95,73,80,75,78,83,48,95,55,65,83,84,78,111,100,101,69,78,83,54,95,73,83,68,95,69,69,69,69,69,51,36,95,49,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,48,115,116,114,117,99,116,117,114,97,108,69,115,116,105,109,97,116,105,111,110,69,82,75,78,83,95,54,118,101,99,116,111,114,73,78,83,50,95,51,101,116,104,49,50,65,115,115,101,109,98,108,121,73,116,101,109,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,55,95,69,69,69,69,82,75,78,83,53,95,73,80,75,78,83,51,95,55,65,83,84,78,111,100,101,69,78,83,56,95,73,83,70,95,69,69,69,69,69,51,36,95,49,78,83,56,95,73,83,75,95,69,69,70,118,82,83,69,95,83,77,95,69,69,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,48,115,116,114,117,99,116,117,114,97,108,69,115,116,105,109,97,116,105,111,110,69,82,75,78,83,116,51,95,95,49,54,118,101,99,116,111,114,73,78,83,95,51,101,116,104,49,50,65,115,115,101,109,98,108,121,73,116,101,109,69,78,83,50,95,57,97,108,108,111,99,97,116,111,114,73,83,53,95,69,69,69,69,82,75,78,83,51,95,73,80,75,78,83,48,95,55,65,83,84,78,111,100,101,69,78,83,54,95,73,83,68,95,69,69,69,69,69,51,36,95,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,71,97,115,69,115,116,105,109,97,116,111,114,50,48,115,116,114,117,99,116,117,114,97,108,69,115,116,105,109,97,116,105,111,110,69,82,75,78,83,95,54,118,101,99,116,111,114,73,78,83,50,95,51,101,116,104,49,50,65,115,115,101,109,98,108,121,73,116,101,109,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,55,95,69,69,69,69,82,75,78,83,53,95,73,80,75,78,83,51,95,55,65,83,84,78,111,100,101,69,78,83,56,95,73,83,70,95,69,69,69,69,69,51,36,95,48,78,83,56,95,73,83,75,95,69,69,70,98,82,83,69,95,69,69,69,0,68,101,99,108,97,114,97,116,105,111,110,32,69,114,114,111,114,0,68,111,99,115,116,114,105,110,103,32,80,97,114,115,105,110,103,32,69,114,114,111,114,0,80,97,114,115,101,114,32,69,114,114,111,114,0,83,121,110,116,97,120,32,69,114,114,111,114,0,84,121,112,101,32,69,114,114,111,114,0,87,104,121,51,32,84,114,97,110,115,108,97,116,111,114,32,69,114,114,111,114,0,87,97,114,110,105,110,103,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,105,110,116,101,114,102,97,99,101,47,69,120,99,101,112,116,105,111,110,115,46,99,112,112,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,114,114,111,114,58,58,69,114,114,111,114,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,114,114,111,114,58,58,84,121,112,101,41,0,94,10,0,83,112,97,110,110,105,110,103,32,109,117,108,116,105,112,108,101,32,108,105,110,101,115,46,10,0,85,110,107,110,111,119,110,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,116,121,112,101,0,115,116,97,116,105,99,32,115,116,114,105,110,103,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,116,101,114,102,97,99,101,72,97,110,100,108,101,114,58,58,100,111,99,117,109,101,110,116,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,44,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,111,99,117,109,101,110,116,97,116,105,111,110,84,121,112,101,41,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,105,110,116,101,114,102,97,99,101,47,73,110,116,101,114,102,97,99,101,72,97,110,100,108,101,114,46,99,112,112,0,109,101,116,104,111,100,115,0,82,101,113,117,101,115,116,101,100,32,100,101,99,108,97,114,97,116,105,111,110,32,102,114,111,109,32,97,32,70,117,110,99,116,105,111,110,84,121,112,101,32,116,104,97,116,32,104,97,115,32,110,111,110,101,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,115,111,108,105,100,105,116,121,47,97,115,116,47,84,121,112,101,115,46,104,0,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,101,99,108,97,114,97,116,105,111,110,32,38,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,70,117,110,99,116,105,111,110,84,121,112,101,58,58,100,101,99,108,97,114,97,116,105,111,110,40,41,32,99,111,110,115,116,0,97,117,116,104,111,114,0,116,105,116,108,101,0,100,101,118,0,100,101,116,97,105,108,115,0,112,97,114,97,109,115,0,110,97,109,101,0,105,110,112,117,116,115,0,111,117,116,112,117,116,115,0,99,111,110,115,116,114,117,99,116,111,114,0,115,116,97,116,105,99,32,115,116,114,105,110,103,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,116,101,114,102,97,99,101,72,97,110,100,108,101,114,58,58,97,98,105,73,110,116,101,114,102,97,99,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,0,102,97,108,108,98,97,99,107,0,78,97,109,101,115,32,97,110,100,32,116,121,112,101,115,32,118,101,99,116,111,114,32,115,105,122,101,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,0,97,117,116,111,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,116,101,114,102,97,99,101,72,97,110,100,108,101,114,58,58,97,98,105,73,110,116,101,114,102,97,99,101,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,32,38,41,58,58,40,97,110,111,110,121,109,111,117,115,32,99,108,97,115,115,41,58,58,111,112,101,114,97,116,111,114,40,41,40,99,111,110,115,116,32,118,101,99,116,111,114,60,115,116,114,105,110,103,62,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,115,116,114,105,110,103,62,32,38,41,32,99,111,110,115,116,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,105,110,116,101,114,102,97,99,101,47,86,101,114,115,105,111,110,46,99,112,112,0,98,121,116,101,115,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,98,105,110,97,114,121,86,101,114,115,105,111,110,40,41,0,99,111,109,109,105,116,46,0,48,46,52,46,50,0,97,117,116,111,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,98,105,110,97,114,121,86,101,114,115,105,111,110,40,41,58,58,40,97,110,111,110,121,109,111,117,115,32,99,108,97,115,115,41,58,58,111,112,101,114,97,116,111,114,40,41,40,41,32,99,111,110,115,116,0,99,111,109,109,105,116,46,97,102,54,97,102,98,48,52,46,109,111,100,46,69,109,115,99,114,105,112,116,101,110,46,99,108,97,110,103,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,112,97,114,115,105,110,103,47,83,99,97,110,110,101,114,46,99,112,112,0,99,104,97,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,67,104,97,114,83,116,114,101,97,109,58,58,114,111,108,108,98,97,99,107,40,115,105,122,101,95,116,41,0,84,111,107,101,110,58,58,86,97,108,117,101,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,99,97,110,110,101,114,58,58,115,99,97,110,78,117,109,98,101,114,40,99,104,97,114,41,0,39,101,39,47,39,69,39,32,109,117,115,116,32,98,101,32,115,99,97,110,110,101,100,32,97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,104,101,120,32,110,117,109,98,101,114,0,116,117,112,108,101,60,84,111,107,101,110,58,58,86,97,108,117,101,44,32,117,110,115,105,103,110,101,100,32,105,110,116,44,32,117,110,115,105,103,110,101,100,32,105,110,116,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,83,99,97,110,110,101,114,58,58,115,99,97,110,73,100,101,110,116,105,102,105,101,114,79,114,75,101,121,119,111,114,100,40,41,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,75,78,83,95,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,78,83,52,95,73,83,55,95,69,69,69,69,0,69,110,100,32,111,102,32,116,97,103,32,0,110,111,116,32,102,111,117,110,100,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,112,97,114,115,105,110,103,47,68,111,99,83,116,114,105,110,103,80,97,114,115,101,114,46,99,112,112,0,68,111,99,83,116,114,105,110,103,80,97,114,115,101,114,58,58,105,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,111,99,83,116,114,105,110,103,80,97,114,115,101,114,58,58,97,112,112,101,110,100,68,111,99,84,97,103,40,105,116,101,114,44,32,105,116,101,114,41,0,110,111,116,105,99,101,0,112,97,114,97,109,0,68,111,99,83,116,114,105,110,103,80,97,114,115,101,114,58,58,105,116,101,114,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,68,111,99,83,116,114,105,110,103,80,97,114,115,101,114,58,58,112,97,114,115,101,68,111,99,84,97,103,76,105,110,101,40,105,116,101,114,44,32,105,116,101,114,44,32,98,111,111,108,41,0,69,110,100,32,111,102,32,112,97,114,97,109,32,110,97,109,101,32,110,111,116,32,102,111,117,110,100,0,69,120,112,101,99,116,101,100,32,105,109,112,111,114,116,32,100,105,114,101,99,116,105,118,101,32,111,114,32,99,111,110,116,114,97,99,116,32,100,101,102,105,110,105,116,105,111,110,46,0,84,111,107,101,110,32,105,110,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,83,111,108,105,100,105,116,121,32,112,97,114,115,101,114,32,97,115,32,112,97,114,116,32,111,102,32,112,114,97,103,109,97,32,100,105,114,101,99,116,105,118,101,46,0,69,120,112,101,99,116,101,100,32,115,116,114,105,110,103,32,108,105,116,101,114,97,108,32,40,112,97,116,104,41,44,32,34,42,34,32,111,114,32,97,108,105,97,115,32,108,105,115,116,46,0,102,114,111,109,0,69,120,112,101,99,116,101,100,32,34,102,114,111,109,34,46,0,69,120,112,101,99,116,101,100,32,105,109,112,111,114,116,32,112,97,116,104,46,0,70,117,110,99,116,105,111,110,44,32,118,97,114,105,97,98,108,101,44,32,115,116,114,117,99,116,32,111,114,32,109,111,100,105,102,105,101,114,32,100,101,99,108,97,114,97,116,105,111,110,32,101,120,112,101,99,116,101,100,46,0,77,117,108,116,105,112,108,101,32,118,105,115,105,98,105,108,105,116,121,32,115,112,101,99,105,102,105,101,114,115,46,0,73,110,118,97,108,105,100,32,118,105,115,105,98,105,108,105,116,121,32,115,112,101,99,105,102,105,101,114,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,112,97,114,115,105,110,103,47,80,97,114,115,101,114,46,99,112,112,0,68,101,99,108,97,114,97,116,105,111,110,58,58,86,105,115,105,98,105,108,105,116,121,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,97,114,115,101,114,58,58,112,97,114,115,101,86,105,115,105,98,105,108,105,116,121,83,112,101,99,105,102,105,101,114,40,84,111,107,101,110,58,58,86,97,108,117,101,41,0,69,120,112,101,99,116,101,100,32,73,100,101,110,116,105,102,105,101,114,32,97,102,116,101,114,32,39,44,39,0,86,105,115,105,98,105,108,105,116,121,32,97,108,114,101,97,100,121,32,115,112,101,99,105,102,105,101,100,46,0,76,111,99,97,116,105,111,110,32,97,108,114,101,97,100,121,32,115,112,101,99,105,102,105,101,100,46,0,76,111,99,97,116,105,111,110,32,115,112,101,99,105,102,105,101,114,32,110,101,101,100,115,32,101,120,112,108,105,99,105,116,32,116,121,112,101,32,110,97,109,101,46,0,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,97,114,115,101,114,58,58,112,97,114,115,101,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,97,114,115,101,114,58,58,86,97,114,68,101,99,108,80,97,114,115,101,114,79,112,116,105,111,110,115,32,38,44,32,99,111,110,115,116,32,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,78,97,109,101,62,32,38,41,0,69,120,112,101,99,116,101,100,32,101,120,112,108,105,99,105,116,32,116,121,112,101,32,110,97,109,101,46,0,69,120,112,101,99,116,101,100,32,116,121,112,101,32,110,97,109,101,0,69,120,112,101,99,116,101,100,32,101,108,101,109,101,110,116,97,114,121,32,116,121,112,101,32,110,97,109,101,32,102,111,114,32,109,97,112,112,105,110,103,32,107,101,121,32,116,121,112,101,0,95,0,101,118,109,97,115,109,0,79,110,108,121,32,34,101,118,109,97,115,109,34,32,115,117,112,112,111,114,116,101,100,46,0,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,121,112,101,78,97,109,101,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,97,114,115,101,114,58,58,116,121,112,101,78,97,109,101,73,110,100,101,120,65,99,99,101,115,115,83,116,114,117,99,116,117,114,101,40,99,111,110,115,116,32,118,101,99,116,111,114,60,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,114,105,109,97,114,121,69,120,112,114,101,115,115,105,111,110,62,32,62,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,112,97,105,114,60,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,44,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,62,32,62,32,38,41,0,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,97,114,115,101,114,58,58,101,120,112,114,101,115,115,105,111,110,70,114,111,109,73,110,100,101,120,65,99,99,101,115,115,83,116,114,117,99,116,117,114,101,40,99,111,110,115,116,32,118,101,99,116,111,114,60,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,114,105,109],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+277618);allocate([97,114,121,69,120,112,114,101,115,115,105,111,110,62,32,62,32,38,44,32,99,111,110,115,116,32,118,101,99,116,111,114,60,112,97,105,114,60,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,44,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,62,32,62,32,38,41,0,115,116,97,116,105,99,32,105,110,116,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,112,114,101,99,101,100,101,110,99,101,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,86,97,108,117,101,41,0,69,120,112,101,99,116,101,100,32,101,120,112,114,101,115,115,105,111,110,32,40,105,110,108,105,110,101,32,97,114,114,97,121,32,101,108,101,109,101,110,116,115,32,99,97,110,110,111,116,32,98,101,32,111,109,105,116,116,101,100,41,46,0,69,120,112,101,99,116,101,100,32,112,114,105,109,97,114,121,32,101,120,112,114,101,115,115,105,111,110,46,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,84,117,112,108,101,69,120,112,114,101,115,115,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,76,105,116,101,114,97,108,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,70,117,110,99,116,105,111,110,67,97,108,108,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,73,110,100,101,120,65,99,99,101,115,115,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,78,101,119,69,120,112,114,101,115,115,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,115,111,108,105,100,105,116,121,47,97,115,116,47,65,83,84,46,104,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,85,110,97,114,121,79,112,101,114,97,116,105,111,110,58,58,85,110,97,114,121,79,112,101,114,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,84,111,107,101,110,58,58,86,97,108,117,101,44,32,99,111,110,115,116,32,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,32,38,44,32,98,111,111,108,41,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,85,110,97,114,121,79,112,101,114,97,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,58,58,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,99,111,110,115,116,32,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,32,38,44,32,84,111,107,101,110,58,58,86,97,108,117,101,44,32,99,111,110,115,116,32,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,32,38,41,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,66,105,110,97,114,121,79,112,101,114,97,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,77,101,109,98,101,114,65,99,99,101,115,115,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,65,114,114,97,121,84,121,112,101,78,97,109,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,56,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,83,116,97,116,101,109,101,110,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,57,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,57,69,120,112,114,101,115,115,105,111,110,83,116,97,116,101,109,101,110,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,56,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,69,120,112,114,101,115,115,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,73,110,108,105,110,101,65,115,115,101,109,98,108,121,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,50,70,111,114,83,116,97,116,101,109,101,110,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,87,104,105,108,101,83,116,97,116,101,109,101,110,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,73,102,83,116,97,116,101,109,101,110,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,80,108,97,99,101,104,111,108,100,101,114,83,116,97,116,101,109,101,110,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,84,104,114,111,119,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,54,82,101,116,117,114,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,66,114,101,97,107,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,67,111,110,116,105,110,117,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,55,77,97,112,112,105,110,103,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,49,67,111,110,100,105,116,105,111,110,97,108,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,65,115,115,105,103,110,109,101,110,116,58,58,65,115,115,105,103,110,109,101,110,116,40,99,111,110,115,116,32,100,101,118,58,58,83,111,117,114,99,101,76,111,99,97,116,105,111,110,32,38,44,32,99,111,110,115,116,32,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,32,38,44,32,84,111,107,101,110,58,58,86,97,108,117,101,44,32,99,111,110,115,116,32,65,83,84,80,111,105,110,116,101,114,60,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,120,112,114,101,115,115,105,111,110,62,32,38,41,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,65,115,115,105,103,110,109,101,110,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,57,69,110,117,109,86,97,108,117,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,53,66,108,111,99,107,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,51,80,97,114,97,109,101,116,101,114,76,105,115,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,77,111,100,105,102,105,101,114,73,110,118,111,99,97,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,57,85,115,101,114,68,101,102,105,110,101,100,84,121,112,101,78,97,109,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,55,85,115,105,110,103,70,111,114,68,105,114,101,99,116,105,118,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,69,118,101,110,116,68,101,102,105,110,105,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,77,111,100,105,102,105,101,114,68,101,102,105,110,105,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,54,80,97,114,115,101,114,50,51,112,97,114,115,101,77,111,100,105,102,105,101,114,68,101,102,105,110,105,116,105,111,110,69,118,69,51,36,95,48,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,51,100,101,118,56,115,111,108,105,100,105,116,121,54,80,97,114,115,101,114,50,51,112,97,114,115,101,77,111,100,105,102,105,101,114,68,101,102,105,110,105,116,105,111,110,69,118,69,51,36,95,48,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,53,95,69,69,70,118,118,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,52,69,110,117,109,68,101,102,105,110,105,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,54,83,116,114,117,99,116,68,101,102,105,110,105,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,70,117,110,99,116,105,111,110,68,101,102,105,110,105,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,50,48,73,110,104,101,114,105,116,97,110,99,101,83,112,101,99,105,102,105,101,114,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,73,100,101,110,116,105,102,105,101,114,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,56,67,111,110,116,114,97,99,116,68,101,102,105,110,105,116,105,111,110,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,73,109,112,111,114,116,68,105,114,101,99,116,105,118,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,53,80,114,97,103,109,97,68,105,114,101,99,116,105,118,101,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,49,48,83,111,117,114,99,101,85,110,105,116,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,51,95,69,69,69,69,0,69,120,112,101,99,116,101,100,32,116,111,107,101,110,32,0,115,116,97,116,105,99,32,99,111,110,115,116,32,99,104,97,114,32,42,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,110,97,109,101,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,86,97,108,117,101,41,0,32,103,111,116,32,114,101,115,101,114,118,101,100,32,107,101,121,119,111,114,100,32,39,0,39,0,32,103,111,116,32,39,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,80,97,114,115,101,114,66,97,115,101,58,58,102,97,116,97,108,80,97,114,115,101,114,69,114,114,111,114,40,99,111,110,115,116,32,115,116,114,105,110,103,32,38,41,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,112,97,114,115,105,110,103,47,80,97,114,115,101,114,66,97,115,101,46,99,112,112,0,69,120,112,101,99,116,101,100,32,97,115,115,105,103,110,109,101,110,116,32,111,112,101,114,97,116,111,114,44,32,32,103,111,116,32,39,0,69,120,112,101,99,116,101,100,32,105,100,101,110,116,105,102,105,101,114,44,32,103,111,116,32,39,0,0,0,0,0,0,0,0,0,0,0,3,0,2,2,2,2,2,2,2,2,2,2,2,2,1,4,5,8,9,10,11,11,11,12,12,13,13,13,14,6,6,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,84,84,84,84,84,84,75,75,75,84,84,84,84,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,84,84,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,112,97,114,115,105,110,103,47,84,111,107,101,110,46,99,112,112,0,118,111,105,100,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,69,108,101,109,101,110,116,97,114,121,84,121,112,101,78,97,109,101,84,111,107,101,110,58,58,97,115,115,101,114,116,68,101,116,97,105,108,115,40,84,111,107,101,110,58,58,86,97,108,117,101,44,32,99,111,110,115,116,32,117,110,115,105,103,110,101,100,32,105,110,116,32,38,44,32,99,111,110,115,116,32,117,110,115,105,103,110,101,100,32,105,110,116,32,38,41,0,84,104,101,114,101,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,97,32,115,101,99,111,110,100,32,115,105,122,101,32,97,114,103,117,109,101,110,116,32,116,111,32,116,121,112,101,32,98,121,116,101,115,77,46,0,78,111,32,101,108,101,109,101,110,116,97,114,121,32,116,121,112,101,32,98,121,116,101,115,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,115,111,108,105,100,105,116,121,47,112,97,114,115,105,110,103,47,84,111,107,101,110,46,104,0,115,116,97,116,105,99,32,99,111,110,115,116,32,99,104,97,114,32,42,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,116,111,83,116,114,105,110,103,40,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,84,111,107,101,110,58,58,86,97,108,117,101,41,0,84,104,101,114,101,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,97,32,115,101,99,111,110,100,32,115,105,122,101,32,97,114,103,117,109,101,110,116,32,116,111,32,116,121,112,101,32,0,78,111,32,101,108,101,109,101,110,116,97,114,121,32,116,121,112,101,32,0,100,101,108,101,116,101,0,97,110,111,110,121,109,111,117,115,0,97,115,0,97,115,115,101,109,98,108,121,0,98,114,101,97,107,0,99,111,110,115,116,97,110,116,0,99,111,110,116,105,110,117,101,0,99,111,110,116,114,97,99,116,0,100,101,102,97,117,108,116,0,100,111,0,101,108,115,101,0,101,110,117,109,0,101,118,101,110,116,0,101,120,116,101,114,110,97,108,0,102,111,114,0,102,117,110,99,116,105,111,110,0,104,101,120,0,105,102,0,105,110,100,101,120,101,100,0,105,110,116,101,114,110,97,108,0,105,109,112,111,114,116,0,105,115,0,108,105,98,114,97,114,121,0,109,97,112,112,105,110,103,0,109,101,109,111,114,121,0,109,111,100,105,102,105,101,114,0,110,101,119,0,112,97,121,97,98,108,101,0,112,117,98,108,105,99,0,112,114,97,103,109,97,0,112,114,105,118,97,116,101,0,114,101,116,117,114,110,115,0,115,116,111,114,97,103,101,0,115,116,114,117,99,116,0,117,115,105,110,103,0,118,97,114,0,119,104,105,108,101,0,119,101,105,0,115,122,97,98,111,0,102,105,110,110,101,121,0,101,116,104,101,114,0,115,101,99,111,110,100,115,0,109,105,110,117,116,101,115,0,104,111,117,114,115,0,100,97,121,115,0,119,101,101,107,115,0,121,101,97,114,115,0,117,105,110,116,0,98,121,116,101,115,0,115,116,114,105,110,103,0,97,100,100,114,101,115,115,0,102,105,120,101,100,0,117,102,105,120,101,100,0,110,117,108,108,0,97,98,115,116,114,97,99,116,0,97,102,116,101,114,0,99,97,115,101,0,99,97,116,99,104,0,102,105,110,97,108,0,105,110,0,105,110,108,105,110,101,0,105,110,116,101,114,102,97,99,101,0,108,101,116,0,109,97,116,99,104,0,111,102,0,112,117,114,101,0,114,101,108,111,99,97,116,97,98,108,101,0,115,116,97,116,105,99,0,115,119,105,116,99,104,0,116,114,121,0,116,121,112,101,0,116,121,112,101,111,102,0,118,105,101,119,0,69,79,83,0,76,80,97,114,101,110,0,82,80,97,114,101,110,0,76,66,114,97,99,107,0,82,66,114,97,99,107,0,76,66,114,97,99,101,0,82,66,114,97,99,101,0,67,111,108,111,110,0,83,101,109,105,99,111,108,111,110,0,80,101,114,105,111,100,0,67,111,110,100,105,116,105,111,110,97,108,0,65,114,114,111,119,0,65,115,115,105,103,110,0,65,115,115,105,103,110,66,105,116,79,114,0,65,115,115,105,103,110,66,105,116,88,111,114,0,65,115,115,105,103,110,66,105,116,65,110,100,0,65,115,115,105,103,110,83,104,108,0,65,115,115,105,103,110,83,97,114,0,65,115,115,105,103,110,83,104,114,0,65,115,115,105,103,110,65,100,100,0,65,115,115,105,103,110,83,117,98,0,65,115,115,105,103,110,77,117,108,0,65,115,115,105,103,110,68,105,118,0,65,115,115,105,103,110,77,111,100,0,67,111,109,109,97,0,79,114,0,65,110,100,0,66,105,116,79,114,0,66,105,116,88,111,114,0,66,105,116,65,110,100,0,83,72,76,0,83,65,82,0,83,72,82,0,65,100,100,0,83,117,98,0,77,117,108,0,68,105,118,0,77,111,100,0,69,120,112,0,69,113,117,97,108,0,78,111,116,69,113,117,97,108,0,76,101,115,115,84,104,97,110,0,71,114,101,97,116,101,114,84,104,97,110,0,76,101,115,115,84,104,97,110,79,114,69,113,117,97,108,0,71,114,101,97,116,101,114,84,104,97,110,79,114,69,113,117,97,108,0,78,111,116,0,66,105,116,78,111,116,0,73,110,99,0,68,101,108,101,116,101,0,65,110,111,110,121,109,111,117,115,0,65,115,0,65,115,115,101,109,98,108,121,0,66,114,101,97,107,0,67,111,110,115,116,0,67,111,110,116,105,110,117,101,0,67,111,110,116,114,97,99,116,0,68,101,102,97,117,108,116,0,68,111,0,69,108,115,101,0,69,110,117,109,0,69,118,101,110,116,0,69,120,116,101,114,110,97,108,0,70,111,114,0,70,117,110,99,116,105,111,110,0,72,101,120,0,73,102,0,73,110,100,101,120,101,100,0,73,110,116,101,114,110,97,108,0,73,109,112,111,114,116,0,73,115,0,76,105,98,114,97,114,121,0,77,97,112,112,105,110,103,0,77,101,109,111,114,121,0,77,111,100,105,102,105,101,114,0,78,101,119,0,80,97,121,97,98,108,101,0,80,117,98,108,105,99,0,80,114,97,103,109,97,0,80,114,105,118,97,116,101,0,82,101,116,117,114,110,0,82,101,116,117,114,110,115,0,83,116,111,114,97,103,101,0,83,116,114,117,99,116,0,84,104,114,111,119,0,85,115,105,110,103,0,86,97,114,0,87,104,105,108,101,0,83,117,98,87,101,105,0,83,117,98,83,122,97,98,111,0,83,117,98,70,105,110,110,101,121,0,83,117,98,69,116,104,101,114,0,83,117,98,83,101,99,111,110,100,0,83,117,98,77,105,110,117,116,101,0,83,117,98,72,111,117,114,0,83,117,98,68,97,121,0,83,117,98,87,101,101,107,0,83,117,98,89,101,97,114,0,73,110,116,0,85,73,110,116,0,66,121,116,101,115,0,66,121,116,101,0,83,116,114,105,110,103,0,65,100,100,114,101,115,115,0,66,111,111,108,0,70,105,120,101,100,0,85,70,105,120,101,100,0,73,110,116,77,0,85,73,110,116,77,0,66,121,116,101,115,77,0,70,105,120,101,100,77,120,78,0,85,70,105,120,101,100,77,120,78,0,84,121,112,101,115,69,110,100,0,78,117,108,108,76,105,116,101,114,97,108,0,84,114,117,101,76,105,116,101,114,97,108,0,70,97,108,115,101,76,105,116,101,114,97,108,0,78,117,109,98,101,114,0,83,116,114,105,110,103,76,105,116,101,114,97,108,0,67,111,109,109,101,110,116,76,105,116,101,114,97,108,0,73,100,101,110,116,105,102,105,101,114,0,65,98,115,116,114,97,99,116,0,65,102,116,101,114,0,67,97,115,101,0,67,97,116,99,104,0,70,105,110,97,108,0,73,110,0,73,110,108,105,110,101,0,73,110,116,101,114,102,97,99,101,0,76,101,116,0,77,97,116,99,104,0,79,102,0,80,117,114,101,0,82,101,108,111,99,97,116,97,98,108,101,0,83,116,97,116,105,99,0,83,119,105,116,99,104,0,84,114,121,0,84,121,112,101,0,84,121,112,101,79,102,0,86,105,101,119,0,73,108,108,101,103,97,108,0,87,104,105,116,101,115,112,97,99,101,0,123,0,125,0,58,0,59,0,63,0,61,62,0,62,62,62,61,0,62,62,62,0,42,42,0,105,110,116,77,0,117,105,110,116,77,0,98,121,116,101,115,77,0,102,105,120,101,100,77,120,78,0,117,102,105,120,101,100,77,120,78,0,73,76,76,69,71,65,76,0,78,53,98,111,111,115,116,49,54,98,97,100,95,108,101,120,105,99,97,108,95,99,97,115,116,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,49,54,98,97,100,95,108,101,120,105,99,97,108,95,99,97,115,116,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,49,54,98,97,100,95,108,101,120,105,99,97,108,95,99,97,115,116,69,69,69,0,98,97,100,32,108,101,120,105,99,97,108,32,99,97,115,116,58,32,115,111,117,114,99,101,32,116,121,112,101,32,118,97,108,117,101,32,99,111,117,108,100,32,110,111,116,32,98,101,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,116,97,114,103,101,116,0,78,53,98,111,111,115,116,49,52,105,116,101,114,97,116,111,114,95,114,97,110,103,101,73,78,83,116,51,95,95,49,49,49,95,95,119,114,97,112,95,105,116,101,114,73,80,75,99,69,69,69,69,0,78,53,98,111,111,115,116,50,49,105,116,101,114,97,116,111,114,95,114,97,110,103,101,95,100,101,116,97,105,108,49,57,105,116,101,114,97,116,111,114,95,114,97,110,103,101,95,98,97,115,101,73,78,83,116,51,95,95,49,49,49,95,95,119,114,97,112,95,105,116,101,114,73,80,75,99,69,69,78,83,95,57,105,116,101,114,97,116,111,114,115,50,55,114,97,110,100,111,109,95,97,99,99,101,115,115,95,116,114,97,118,101,114,115,97,108,95,116,97,103,69,69,69,0,78,53,98,111,111,115,116,50,49,105,116,101,114,97,116,111,114,95,114,97,110,103,101,95,100,101,116,97,105,108,49,57,105,116,101,114,97,116,111,114,95,114,97,110,103,101,95,98,97,115,101,73,78,83,116,51,95,95,49,49,49,95,95,119,114,97,112,95,105,116,101,114,73,80,75,99,69,69,78,83,95,57,105,116,101,114,97,116,111,114,115,50,55,98,105,100,105,114,101,99,116,105,111,110,97,108,95,116,114,97,118,101,114,115,97,108,95,116,97,103,69,69,69,0,78,53,98,111,111,115,116,50,49,105,116,101,114,97,116,111,114,95,114,97,110,103,101,95,100,101,116,97,105,108,49,57,105,116,101,114,97,116,111,114,95,114,97,110,103,101,95,98,97,115,101,73,78,83,116,51,95,95,49,49,49,95,95,119,114,97,112,95,105,116,101,114,73,80,75,99,69,69,78,83,95,57,105,116,101,114,97,116,111,114,115,50,55,105,110,99,114,101,109,101,110,116,97,98,108,101,95,116,114,97,118,101,114,115,97,108,95,116,97,103,69,69,69,0,78,53,98,111,111,115,116,50,49,105,116,101,114,97,116,111,114,95,114,97,110,103,101,95,100,101,116,97,105,108,49,56,105,116,101,114,97,116,111,114,95,114,97,110,103,101,95,116,97,103,69,0,45,45,67,79,68,69,71,69,78,45,45,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,101,109,112,108,97,99,101,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,53,66,108,111,99,107,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,52,95,69,69,69,69,0,69,120,112,101,99,116,101,100,32,105,110,115,116,114,117,99,116,105,111,110,40,115,41,32,116,111,32,100,101,112,111,115,105,116,32,0,32,105,116,101,109,40,115,41,32,116,111,32,116,104,101,32,115,116,97,99,107,44,32,98,117,116,32,100,105,100,32,100,101,112,111,115,105,116,32,0,32,105,116,101,109,40,115,41,46,0,86,97,114,105,97,98,108,101,32,105,110,97,99,99,101,115,115,105,98,108,101,44,32,116,111,111,32,100,101,101,112,32,105,110,115,105,100,101,32,115,116,97,99,107,32,40,0,73,110,118,97,108,105,100,32,68,85,80,32,105,110,115,116,114,117,99,116,105,111,110,32,114,101,113,117,101,115,116,101,100,46,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,101,118,109,97,115,109,47,73,110,115,116,114,117,99,116,105,111,110,46,104,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,115,116,114,117,99,116,105,111,110,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,100,117,112,73,110,115,116,114,117,99,116,105,111,110,40,117,110,115,105,103,110,101,100,32,105,110,116,41,0,47,115,114,99,47,108,105,98,115,111,108,105,100,105,116,121,47,46,46,47,108,105,98,101,118,109,97,115,109,47,65,115,115,101,109,98,108,121,73,116,101,109,46,104,0,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,32,100,101,118,58,58,101,116,104,58,58,65,115,115,101,109,98,108,121,73,116,101,109,58,58,112,117,115,104,84,97,103,40,41,32,99,111,110,115,116,0,73,100,101,110,116,105,102,105,101,114,32,110,111,116,32,102,111,117,110,100,32,111,114,32,110,111,116,32,117,110,105,113,117,101,0,73,110,118,97,108,105,100,32,83,87,65,80,32,105,110,115,116,114,117,99,116,105,111,110,32,114,101,113,117,101,115,116,101,100,46,0,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,73,110,115,116,114,117,99,116,105,111,110,32,100,101,118,58,58,115,111,108,105,100,105,116,121,58,58,115,119,97,112,73,110,115,116,114,117,99,116,105,111,110,40,117,110,115,105,103,110,101,100,32,105,110,116,41,0,73,100,101,110,116,105,102,105,101,114,32,34,0,34,32,110,111,116,32,102,111,117,110,100,44,32,110,111,116,32,117,110,105,113,117,101,32,111,114,32,110,111,116,32,108,118,97,108,117,101,46,0,109,97,112,58,58,97,116,58,32,32,107,101,121,32,110,111,116,32,102,111,117,110,100,0,83,116,114,105,110,103,32,108,105,116,101,114,97,108,32,116,111,111,32,108,111,110,103,32,40,0,32,62,32,51,50,41,0,90,78,49,51,67,111,100,101,84,114,97,110,115,102,111,114,109,67,49,69,82,49,52,71,101,110,101,114,97,116,111,114,83,116,97,116,101,82,75,78,83,116,51,95,95,49,56,102,117,110,99,116,105,111,110,73,70,98,82,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,48,73,100,101,110,116,105,102,105,101,114,69,82,78,83,52,95,51,101,116,104,56,65,115,115,101,109,98,108,121,69,78,83,54,95,49,51,67,111,100,101,71,101,110,101,114,97,116,111,114,49,55,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,69,69,69,69,69,85,108,83,57,95,83,67,95,83,69,95,69,95,0,78,83,116,51,95,95,49,49,48,95,95,102,117,110,99,116,105,111,110,54,95,95,102,117,110,99,73,90,78,49,51,67,111,100,101,84,114,97,110,115,102,111,114,109,67,49,69,82,49,52,71,101,110,101,114,97,116,111,114,83,116,97,116,101,82,75,78,83,95,56,102,117,110,99,116,105,111,110,73,70,98,82,75,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,48,73,100,101,110,116,105,102,105,101,114,69,82,78,83,54,95,51,101,116,104,56,65,115,115,101,109,98,108,121,69,78,83,56,95,49,51,67,111,100,101,71,101,110,101,114,97,116,111,114,49,55,73,100,101,110,116,105,102,105,101,114,67,111,110,116,101,120,116,69,69,69,69,69,85,108,83,66,95,83,69,95,83,71,95,69,95,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,76,95,69,69,83,72,95,69,69,0,76,97,98,101,108,32,0,32,100,101,99,108,97,114,101,100,32,116,119,105,99,101,46,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,48,73,100,101,110,116,105,102,105,101,114,69,0,76,97,98,101,108,32,110,97,109,101,32,47,32,118,97,114,105,97,98,108,101,32,110,97,109,101,32,109,117,115,116,32,112,114,101,99,101,100,101,32,34,58,34,46,0,115,101,108,102,100,101,115,116,114,117,99,116,0,114,101,116,117,114,110,0,98,121,116,101,0,73,110,115,116,114,117,99,116,105,111,110,32,0,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,116,104,105,115,32,99,111,110,116,101,120,116,46,0,69,120,112,101,99,116,101,100,32,101,108,101,109,101,110,116,97,114,121,32,105,110,108,105,110,101,32,97,115,115,101,109,98,108,121,32,111,112,101,114,97,116,105,111,110,46,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,49,73,110,115,116,114,117,99,116,105,111,110,69,0,65,115,115,101,109,98,108,121,32,105,110,115,116,114,117,99,116,105,111,110,32,114,101,113,117,105,114,101,100,32,105,110,32,102,114,111,110,116,32,111,102,32,34,40,34,41,0,68,85,80,105,32,105,110,115,116,114,117,99,116,105,111,110,115,32,110,111,116,32,97,108,108,111,119,101,100,32,102,111,114,32,102,117,110,99,116,105,111,110,97,108,32,110,111,116,97,116,105,111,110,0,83,87,65,80,105,32,105,110,115,116,114,117,99,116,105,111,110,115,32,110,111,116,32,97,108,108,111,119,101,100,32,102,111,114,32,102,117,110,99,116,105,111,110,97,108,32,110,111,116,97,116,105,111,110,0,69,120,112,101,99,116,101,100,32,99,111,109,109,97,32,40,0,32,101,120,112,101,99,116,115,32,0,32,97,114,103,117,109,101,110,116,115,41,0,69,120,112,101,99,116,101,100,32,39,41,39,32,40,0,78,83,116,51,95,95,49,49,52,100,101,102,97,117,108,116,95,100,101,108,101,116,101,73,78,53,98,111,111,115,116,55,118,97,114,105,97,110,116,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,49,73,110,115,116,114,117,99,116,105,111,110,69,78,83,53,95,55,76,105,116,101,114,97,108,69,78,83,53,95,53,76,97,98,101,108,69,78,83,53,95,49,48,65,115,115,105,103,110,109,101,110,116,69,78,83,53,95,49,48,73,100,101,110,116,105,102,105,101,114,69,78,83,53,95,50,48,70,117,110,99,116,105,111,110,97,108,65,115,115,105,103,110,109,101,110,116,69,78,83,53,95,50,49,70,117,110,99,116,105,111,110,97,108,73,110,115,116,114,117,99,116,105,111,110,69,78,83,53,95,49,57,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,69,78,83,53,95,53,66,108,111,99,107,69,78,83,49,95,54,100,101,116,97,105,108,55,118,97,114,105,97,110,116,53,118,111,105,100,95,69,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,69,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,115,104,97,114,101,100,95,112,116,114,95,112,111,105,110,116,101,114,73,80,78,53,98,111,111,115,116,55,118,97,114,105,97,110,116,73,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,49,73,110,115,116,114,117,99,116,105,111,110,69,78,83,53,95,55,76,105,116,101,114,97,108,69,78,83,53,95,53,76,97,98,101,108,69,78,83,53,95,49,48,65,115,115,105,103,110,109,101,110,116,69,78,83,53,95,49,48,73,100,101,110,116,105,102,105,101,114,69,78,83,53,95,50,48,70,117,110,99,116,105,111,110,97,108,65,115,115,105,103,110,109,101,110,116,69,78,83,53,95,50,49,70,117,110,99,116,105,111,110,97,108,73,110,115,116,114,117,99,116,105,111,110,69,78,83,53,95,49,57,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,69,78,83,53,95,53,66,108,111,99,107,69,78,83,49,95,54,100,101,116,97,105,108,55,118,97,114,105,97,110,116,53,118,111,105,100,95,69,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,83,72,95,69,69,78,83,95,49,52,100,101,102,97,117,108,116,95,100,101,108,101,116,101,73,83,73,95,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,83,73,95,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,48,99,108,111,110,101,95,105,109,112,108,73,78,83,48,95,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,55,98,97,100,95,103,101,116,69,69,69,69,69,0,78,53,98,111,111,115,116,49,54,101,120,99,101,112,116,105,111,110,95,100,101,116,97,105,108,49,57,101,114,114,111,114,95,105,110,102,111,95,105,110,106,101,99,116,111,114,73,78,83,95,55,98,97,100,95,103,101,116,69,69,69,0,78,53,98,111,111,115,116,55,98,97,100,95,103,101,116,69,0,98,111,111],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+287858);allocate([115,116,58,58,98,97,100,95,103,101,116,58,32,102,97,105,108,101,100,32,118,97,108,117,101,32,103,101,116,32,117,115,105,110,103,32,98,111,111,115,116,58,58,103,101,116,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,55,76,105,116,101,114,97,108,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,53,76,97,98,101,108,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,48,65,115,115,105,103,110,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,50,48,70,117,110,99,116,105,111,110,97,108,65,115,115,105,103,110,109,101,110,116,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,50,49,70,117,110,99,116,105,111,110,97,108,73,110,115,116,114,117,99,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,49,57,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,69,0,78,51,100,101,118,56,115,111,108,105,100,105,116,121,56,97,115,115,101,109,98,108,121,53,66,108,111,99,107,69,0,83,116,57,98,97,100,95,97,108,108,111,99,0,83,116,50,48,98,97,100,95,97,114,114,97,121,95,110,101,119,95,108,101,110,103,116,104,0,83,116,49,54,98,97,100,95,97,114,114,97,121,95,108,101,110,103,116,104,0,83,116,57,101,120,99,101,112,116,105,111,110,0,83,116,49,51,98,97,100,95,101,120,99,101,112,116,105,111,110,0,83,116,49,50,100,111,109,97,105,110,95,101,114,114,111,114,0,83,116,49,49,108,111,103,105,99,95,101,114,114,111,114,0,83,116,49,54,105,110,118,97,108,105,100,95,97,114,103,117,109,101,110,116,0,83,116,49,50,108,101,110,103,116,104,95,101,114,114,111,114,0,83,116,49,50,111,117,116,95,111,102,95,114,97,110,103,101,0,83,116,49,49,114,97,110,103,101,95,101,114,114,111,114,0,83,116,49,51,114,117,110,116,105,109,101,95,101,114,114,111,114,0,83,116,49,52,111,118,101,114,102,108,111,119,95,101,114,114,111,114,0,83,116,49,53,117,110,100,101,114,102,108,111,119,95,101,114,114,111,114,0,83,116,57,116,121,112,101,95,105,110,102,111,0,83,116,56,98,97,100,95,99,97,115,116,0,83,116,49,48,98,97,100,95,116,121,112,101,105,100,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,51,95,95,102,117,110,100,97,109,101,110,116,97,108,95,116,121,112,101,95,105,110,102,111,69,0,118,0,80,118,0,80,75,118,0,68,110,0,80,68,110,0,80,75,68,110,0,98,0,80,98,0,80,75,98,0,119,0,80,119,0,80,75,119,0,99,0,80,99,0,80,75,99,0,104,0,80,104,0,80,75,104,0,97,0,80,97,0,80,75,97,0,115,0,80,115,0,80,75,115,0,116,0,80,116,0,80,75,116,0,105,0,80,105,0,80,75,105,0,106,0,80,106,0,80,75,106,0,108,0,80,108,0,80,75,108,0,109,0,80,109,0,80,75,109,0,120,0,80,120,0,80,75,120,0,121,0,80,121,0,80,75,121,0,68,104,0,80,68,104,0,80,75,68,104,0,102,0,80,102,0,80,75,102,0,100,0,80,100,0,80,75,100,0,101,0,80,101,0,80,75,101,0,68,115,0,80,68,115,0,80,75,68,115,0,68,105,0,80,68,105,0,80,75,68,105,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,97,114,114,97,121,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,102,117,110,99,116,105,111,110,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,101,110,117,109,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,49,95,95,118,109,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,57,95,95,112,111,105,110,116,101,114,95,116,111,95,109,101,109,98,101,114,95,116,121,112,101,95,105,110,102,111,69,0,0,33,34,98,97,115,105,99,95,115,116,114,105,110,103,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,116,97,103,45,49,46,51,53,46,52,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,115,116,114,105,110,103,0,95,95,116,104,114,111,119,95,108,101,110,103,116,104,95,101,114,114,111,114,0,33,34,118,101,99,116,111,114,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,116,97,103,45,49,46,51,53,46,52,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,118,101,99,116,111,114,0,99,97,110,110,111,116,32,97,108,108,111,99,97,116,101,32,95,95,99,120,97,95,101,104,95,103,108,111,98,97,108,115,0,112,116,104,114,101,97,100,95,115,101,116,115,112,101,99,105,102,105,99,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,98,97,100,95,97,114,114,97,121,95,110,101,119,95,108,101,110,103,116,104,0,98,97,100,95,97,114,114,97,121,95,108,101,110,103,116,104,0,117,110,101,120,112,101,99,116,101,100,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,116,104,114,101,119,32,97,110,32,101,120,99,101,112,116,105,111,110,0,115,116,100,58,58,101,120,99,101,112,116,105,111,110,0,115,116,100,58,58,98,97,100,95,101,120,99,101,112,116,105,111,110,0,115,116,100,58,58,98,97,100,95,99,97,115,116,0,115,116,100,58,58,98,97,100,95,116,121,112,101,105,100,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,32,40,0,41,0,95,98,108,111,99,107,95,105,110,118,111,107,101,0,105,110,118,111,99,97,116,105,111,110,32,102,117,110,99,116,105,111,110,32,102,111,114,32,98,108,111,99,107,32,105,110,32,0,32,99,111,110,115,116,0,32,118,111,108,97,116,105,108,101,0,32,114,101,115,116,114,105,99,116,0,32,91,0,32,91,93,0,32,99,111,109,112,108,101,120,0,40,0,44,32,0,32,38,0,32,38,38,0,32,105,109,97,103,105,110,97,114,121,0,58,58,42,0,38,38,0,111,98,106,99,95,111,98,106,101,99,116,60,0,105,100,0,38,0,111,98,106,99,112,114,111,116,111,0,60,0,62,0,32,118,101,99,116,111,114,91,0,112,105,120,101,108,32,118,101,99,116,111,114,91,0,100,101,99,108,116,121,112,101,40,0,115,116,100,58,58,97,108,108,111,99,97,116,111,114,0,115,116,100,58,58,98,97,115,105,99,95,115,116,114,105,110,103,0,115,116,100,58,58,115,116,114,105,110,103,0,115,116,100,58,58,105,115,116,114,101,97,109,0,115,116,100,58,58,111,115,116,114,101,97,109,0,115,116,100,58,58,105,111,115,116,114,101,97,109,0,115,116,100,0,58,58,0,58,58,115,116,114,105,110,103,32,108,105,116,101,114,97,108,0,115,116,100,58,58,0,126,0,39,117,110,110,97,109,101,100,0,39,108,97,109,98,100,97,39,40,0,111,112,101,114,97,116,111,114,38,38,0,111,112,101,114,97,116,111,114,38,0,111,112,101,114,97,116,111,114,38,61,0,111,112,101,114,97,116,111,114,61,0,111,112,101,114,97,116,111,114,40,41,0,111,112,101,114,97,116,111,114,44,0,111,112,101,114,97,116,111,114,126,0,111,112,101,114,97,116,111,114,32,0,111,112,101,114,97,116,111,114,32,100,101,108,101,116,101,91,93,0,111,112,101,114,97,116,111,114,42,0,111,112,101,114,97,116,111,114,32,100,101,108,101,116,101,0,111,112,101,114,97,116,111,114,47,0,111,112,101,114,97,116,111,114,47,61,0,111,112,101,114,97,116,111,114,94,0,111,112,101,114,97,116,111,114,94,61,0,111,112,101,114,97,116,111,114,61,61,0,111,112,101,114,97,116,111,114,62,61,0,111,112,101,114,97,116,111,114,62,0,111,112,101,114,97,116,111,114,91,93,0,111,112,101,114,97,116,111,114,60,61,0,111,112,101,114,97,116,111,114,34,34,32,0,111,112,101,114,97,116,111,114,60,60,0,111,112,101,114,97,116,111,114,60,60,61,0,111,112,101,114,97,116,111,114,60,0,111,112,101,114,97,116,111,114,45,0,111,112,101,114,97,116,111,114,45,61,0,111,112,101,114,97,116,111,114,42,61,0,111,112,101,114,97,116,111,114,45,45,0,111,112,101,114,97,116,111,114,32,110,101,119,91,93,0,111,112,101,114,97,116,111,114,33,61,0,111,112,101,114,97,116,111,114,33,0,111,112,101,114,97,116,111,114,32,110,101,119,0,111,112,101,114,97,116,111,114,124,124,0,111,112,101,114,97,116,111,114,124,0,111,112,101,114,97,116,111,114,124,61,0,111,112,101,114,97,116,111,114,45,62,42,0,111,112,101,114,97,116,111,114,43,0,111,112,101,114,97,116,111,114,43,61,0,111,112,101,114,97,116,111,114,43,43,0,111,112,101,114,97,116,111,114,45,62,0,111,112,101,114,97,116,111,114,63,0,111,112,101,114,97,116,111,114,37,0,111,112,101,114,97,116,111,114,37,61,0,111,112,101,114,97,116,111,114,62,62,0,111,112,101,114,97,116,111,114,62,62,61,0,115,116,100,58,58,98,97,115,105,99,95,115,116,114,105,110,103,60,99,104,97,114,44,32,115,116,100,58,58,99,104,97,114,95,116,114,97,105,116,115,60,99,104,97,114,62,44,32,115,116,100,58,58,97,108,108,111,99,97,116,111,114,60,99,104,97,114,62,32,62,0,98,97,115,105,99,95,115,116,114,105,110,103,0,115,116,100,58,58,98,97,115,105,99,95,105,115,116,114,101,97,109,60,99,104,97,114,44,32,115,116,100,58,58,99,104,97,114,95,116,114,97,105,116,115,60,99,104,97,114,62,32,62,0,98,97,115,105,99,95,105,115,116,114,101,97,109,0,115,116,100,58,58,98,97,115,105,99,95,111,115,116,114,101,97,109,60,99,104,97,114,44,32,115,116,100,58,58,99,104,97,114,95,116,114,97,105,116,115,60,99,104,97,114,62,32,62,0,98,97,115,105,99,95,111,115,116,114,101,97,109,0,115,116,100,58,58,98,97,115,105,99,95,105,111,115,116,114,101,97,109,60,99,104,97,114,44,32,115,116,100,58,58,99,104,97,114,95,116,114,97,105,116,115,60,99,104,97,114,62,32,62,0,98,97,115,105,99,95,105,111,115,116,114,101,97,109,0,95,71,76,79,66,65,76,95,95,78,0,40,97,110,111,110,121,109,111,117,115,32,110,97,109,101,115,112,97,99,101,41,0,32,62,0,119,99,104,97,114,95,116,0,99,104,97,114,0,115,105,103,110,101,100,32,99,104,97,114,0,117,110,115,105,103,110,101,100,32,99,104,97,114,0,115,104,111,114,116,0,117,110,115,105,103,110,101,100,32,115,104,111,114,116,0,117,108,0,117,108,108,0,95,95,105,110,116,49,50,56,0,117,110,115,105,103,110,101,100,32,95,95,105,110,116,49,50,56,0,37,97,102,0,37,76,97,76,0,38,61,0,61,0,97,108,105,103,110,111,102,32,40,0,99,111,110,115,116,95,99,97,115,116,60,0,62,40,0,44,0,41,40,0,100,101,108,101,116,101,91,93,32,0,100,121,110,97,109,105,99,95,99,97,115,116,60,0,100,101,108,101,116,101,32,0,46,42,0,47,61,0,94,0,94,61,0,61,61,0,62,61,0,41,91,0,60,61,0,60,60,0,60,60,61,0,45,61,0,42,61,0,45,45,0,41,45,45,0,91,93,32,0,41,32,0,33,61,0,33,0,110,111,101,120,99,101,112,116,32,40,0,124,124,0,124,0,124,61,0,45,62,42,0,43,61,0,43,43,0,41,43,43,0,45,62,0,41,32,63,32,40,0,41,32,58,32,40,0,114,101,105,110,116,101,114,112,114,101,116,95,99,97,115,116,60,0,37,0,37,61,0,62,62,0,62,62,61,0,115,116,97,116,105,99,95,99,97,115,116,60,0,115,105,122,101,111,102,32,40,0,115,105,122,101,111,102,46,46,46,40,0,116,121,112,101,105,100,40,0,116,104,114,111,119,0,116,104,114,111,119,32,0,102,112,0,33,34,98,97,115,105,99,95,115,116,114,105,110,103,32,111,117,116,95,111,102,95,114,97,110,103,101,34,0,95,95,116,104,114,111,119,95,111,117,116,95,111,102,95,114,97,110,103,101,0,118,111,105,100,0,98,111,111,108,0,105,110,116,0,117,110,115,105,103,110,101,100,32,105,110,116,0,108,111,110,103,0,117,110,115,105,103,110,101,100,32,108,111,110,103,0,108,111,110,103,32,108,111,110,103,0,117,110,115,105,103,110,101,100,32,108,111,110,103,32,108,111,110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,108,111,110,103,32,100,111,117,98,108,101,0,95,95,102,108,111,97,116,49,50,56,0,46,46,46,0,100,101,99,105,109,97,108,54,52,0,100,101,99,105,109,97,108,49,50,56,0,100,101,99,105,109,97,108,51,50,0,100,101,99,105,109,97,108,49,54,0,99,104,97,114,51,50,95,116,0,99,104,97,114,49,54,95,116,0,97,117,116,111,0,115,116,100,58,58,110,117,108,108,112,116,114,95,116,0,118,116,97,98,108,101,32,102,111,114,32,0,86,84,84,32,102,111,114,32,0,116,121,112,101,105,110,102,111,32,102,111,114,32,0,116,121,112,101,105,110,102,111,32,110,97,109,101,32,102,111,114,32,0,99,111,118,97,114,105,97,110,116,32,114,101,116,117,114,110,32,116,104,117,110,107,32,116,111,32,0,99,111,110,115,116,114,117,99,116,105,111,110,32,118,116,97,98,108,101,32,102,111,114,32,0,45,105,110,45,0,118,105,114,116,117,97,108,32,116,104,117,110,107,32,116,111,32,0,110,111,110,45,118,105,114,116,117,97,108,32,116,104,117,110,107,32,116,111,32,0,103,117,97,114,100,32,118,97,114,105,97,98,108,101,32,102,111,114,32,0,114,101,102,101,114,101,110,99,101,32,116,101,109,112,111,114,97,114,121,32,102,111,114,32,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,117,110,101,120,112,101,99,116,101,100,0,97,108,110,117,109,0,97,108,112,104,97,0,98,108,97,110,107,0,99,110,116,114,108,0,100,105,103,105,116,0,103,114,97,112,104,0,108,111,119,101,114,0,112,114,105,110,116,0,112,117,110,99,116,0,115,112,97,99,101,0,117,112,112,101,114,0,120,100,105,103,105,116,0,18,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,17,34,35,36,17,37,38,39,40,41,42,43,44,17,45,46,47,16,16,48,16,16,16,16,16,16,16,49,50,51,16,52,53,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,54,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,55,17,17,17,17,56,17,57,58,59,60,61,62,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,63,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,64,65,17,66,67,68,69,70,71,72,73,16,16,16,74,75,76,77,78,16,16,16,79,80,16,16,16,16,81,16,16,16,16,16,16,16,16,16,17,17,17,82,83,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,84,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,85,16,16,16,16,86,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,87,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,88,89,90,91,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,92,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,254,255,255,7,254,255,255,7,0,0,0,0,0,4,32,4,255,255,127,255,255,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,195,255,3,0,31,80,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,223,60,64,215,255,255,251,255,255,255,255,255,255,255,255,255,191,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,254,255,255,255,127,2,254,255,255,255,255,0,0,0,0,0,255,191,182,0,255,255,255,7,7,0,0,0,255,7,255,255,255,255,255,255,255,254,255,195,255,255,255,255,255,255,255,255,255,255,255,255,239,31,254,225,255,159,0,0,255,255,255,255,255,255,0,224,255,255,255,255,255,255,255,255,255,255,255,255,3,0,255,255,255,255,255,7,48,4,255,255,255,252,255,31,0,0,255,255,255,1,0,0,0,0,0,0,0,0,253,31,0,0,0,0,0,0,240,3,255,127,255,255,255,255,255,255,255,239,255,223,225,255,207,255,254,254,238,159,249,255,255,253,197,227,159,89,128,176,207,255,3,0,238,135,249,255,255,253,109,195,135,25,2,94,192,255,63,0,238,191,251,255,255,253,237,227,191,27,1,0,207,255,0,0,238,159,249,255,255,253,237,227,159,25,192,176,207,255,2,0,236,199,61,214,24,199,255,195,199,29,129,0,192,255,0,0,238,223,253,255,255,253,239,227,223,29,96,3,207,255,0,0,236,223,253,255,255,253,239,227,223,29,96,64,207,255,6,0,236,223,253,255,255,255,255,231,223,93,128,0,207,255,0,252,236,255,127,252,255,255,251,47,127,128,95,255,0,0,12,0,254,255,255,255,255,127,255,7,63,32,255,3,0,0,0,0,150,37,240,254,174,236,255,59,95,32,255,243,0,0,0,0,1,0,0,0,255,3,0,0,255,254,255,255,255,31,254,255,3,255,255,254,255,255,255,31,0,0,0,0,0,0,0,0,255,255,255,255,255,255,127,249,255,3,255,255,231,193,255,255,127,64,255,51,255,255,255,255,191,32,255,255,255,255,255,247,255,255,255,255,255,255,255,255,255,61,127,61,255,255,255,255,255,61,255,255,255,255,61,127,61,255,127,255,255,255,255,255,255,255,61,255,255,255,255,255,255,255,255,135,0,0,0,0,255,255,0,0,255,255,255,255,255,255,255,255,255,255,31,0,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,159,255,255,254,255,255,7,255,255,255,255,255,255,255,255,255,199,1,0,255,223,15,0,255,255,15,0,255,255,15,0,255,223,13,0,255,255,255,255,255,255,207,255,255,1,128,16,255,3,0,0,0,0,255,3,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,7,255,255,255,255,255,255,255,255,63,0,255,255,255,31,255,15,255,1,192,255,255,255,255,63,31,0,255,255,255,255,255,15,255,255,255,3,255,3,0,0,0,0,255,255,255,15,255,255,255,255,255,255,255,127,254,255,31,0,255,3,255,3,128,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,239,255,239,15,255,3,0,0,0,0,255,255,255,255,255,243,255,255,255,255,255,255,191,255,3,0,255,255,255,255,255,255,63,0,255,227,255,255,255,255,255,63,0,0,0,0,0,0,0,0,0,0,0,0,0,222,111,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,255,255,63,63,255,255,255,255,63,63,255,170,255,255,255,63,255,255,255,255,255,255,223,95,220,31,207,15,255,31,220,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,128,0,0,255,31,0,0,0,0,0,0,0,0,0,0,0,0,132,252,47,62,80,189,255,243,224,67,0,0,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,255,255,255,255,255,255,3,0,0,255,255,255,255,255,127,255,255,255,255,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,120,12,0,255,255,255,255,191,32,255,255,255,255,255,255,255,128,0,0,255,255,127,0,127,127,127,127,127,127,127,127,255,255,255,255,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,0,0,0,254,3,62,31,254,255,255,255,255,255,255,255,255,255,127,224,254,255,255,255,255,255,255,255,255,255,255,247,224,255,255,255,255,63,254,255,255,255,255,255,255,255,255,255,255,127,0,0,255,255,255,7,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,0,0,0,0,0,0,0,0,255,255,255,255,255,63,255,31,255,255,255,15,0,0,255,255,255,255,255,127,240,143,255,255,255,128,255,255,255,255,255,255,255,255,255,255,0,0,0,0,128,255,252,255,255,255,255,255,255,255,255,255,255,255,255,121,15,0,255,7,0,0,0,0,0,0,0,0,0,255,187,247,255,255,255,0,0,0,255,255,255,255,255,255,15,0,255,255,255,255,255,255,255,255,15,0,255,3,0,0,252,8,255,255,255,255,255,7,255,255,255,255,7,0,255,255,255,31,255,255,255,255,255,255,247,255,0,128,255,3,0,0,0,0,255,255,255,255,255,255,127,0,255,63,255,3,255,255,127,4,255,255,255,255,255,255,255,127,5,0,0,56,255,255,60,0,126,126,126,0,127,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,7,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,255,127,248,255,255,255,255,255,15,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,0,0,0,127,0,248,224,255,253,127,95,219,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,0,0,248,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,255,255,255,255,255,255,255,255,252,255,255,255,255,255,255,0,0,0,0,0,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,0,0,255,3,254,255,255,7,254,255,255,7,192,255,255,255,255,255,255,255,255,255,255,127,252,252,252,28,0,0,0,0,255,239,255,255,127,255,255,183,255,63,255,63,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,7,0,0,0,0,0,0,0,0,255,255,255,255,255,255,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,31,255,255,255,255,255,255,1,0,0,0,0,0,255,255,255,127,0,0,255,255,255,7,0,0,0,0,0,0,255,255,255,63,255,255,255,255,15,255,62,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,3,0,0,0,0,0,0,0,0,0,0,63,253,255,255,255,255,191,145,255,255,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,63,0,255,255,255,3,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,192,0,0,0,0,0,0,0,0,111,240,239,254,255,255,15,0,0,0,0,0,255,255,255,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,63,0,255,255,63,0,255,255,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,63,0,0,0,192,255,0,0,252,255,255,255,255,255,255,1,0,0,255,255,255,1,255,3,255,255,255,255,255,255,199,255,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,30,0,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,63,0,255,3,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,31,0,255,255,255,255,255,127,0,0,248,255,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,223,255,255,255,255,255,255,255,255,223,100,222,255,235,239,255,255,255,255,255,255,255,191,231,223,223,255,255,255,123,95,252,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,255,255,253,255,255,247,255,255,255,247,255,255,223,255,255,255,223,255,255,127,255,255,255,127,255,255,255,253,255,255,255,253,255,255,247,207,255,255,255,255,255,255,239,255,255,255,150,254,247,10,132,234,150,170,150,247,247,94,255,251,255,15,238,251,255,15,0,0,0,0,0,0,0,0,116,111,117,112,112,101,114,0,116,111,108,111,119,101,114,0,16,16,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,16,16,32,16,16,16,33,34,35,36,37,38,39,16,16,40,16,16,16,16,16,16,16,16,16,16,16,41,42,16,16,43,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,44,16,45,46,47,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,49,16,16,50,51,16,52,16,16,16,16,16,16,16,16,53,16,16,16,16,16,54,55,16,16,16,16,56,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,57,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,58,59,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,255,191,182,0,0,0,0,0,0,0,31,0,255,7,0,0,0,0,0,248,255,255,0,0,1,0,0,0,0,0,0,0,0,0,0,0,192,191,159,61,0,0,0,128,2,0,0,0,255,255,255,7,0,0,0,0,0,0,0,0,0,0,192,255,1,0,0,0,0,0,0,248,15,0,0,0,192,251,239,62,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,255,255,127,7,0,0,0,0,0,0,20,254,33,254,0,12,0,0,0,2,0,0,0,0,0,0,16,30,32,0,0,12,0,0,0,6,0,0,0,0,0,0,16,134,57,2,0,0,0,35,0,6,0,0,0,0,0,0,16,190,33,0,0,12,0,0,0,2,0,0,0,0,0,0,144,30,32,64,0,12,0,0,0,4,0,0,0,0,0,0,0,1,32,0,0,0,0,0,0,0,0,0,0,0,0,0,192,193,61,96,0,12,0,0,0,0,0,0,0,0,0,0,144,64,48,0,0,12,0,0,0,0,0,0,0,0,0,0,0,30,32,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,4,92,0,0,0,0,0,0,0,0,0,0,0,242,7,128,127,0,0,0,0,0,0,0,0,0,0,0,0,242,27,0,63,0,0,0,0,0,0,0,0,0,3,0,0,160,2,0,0,0,0,0,0,254,127,223,224,255,254,255,255,255,31,64,0,0,0,0,0,0,0,0,0,0,0,0,224,253,102,0,0,0,195,1,0,30,0,100,32,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,28,0,0,0,12,0,0,0,12,0,0,0,0,0,0,0,176,63,64,254,15,32,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,1,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,0,0,0,0,0,0,64,127,229,31,248,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,208,23,4,0,0,0,0,248,15,0,3,0,0,0,60,11,0,0,0,0,0,0,64,163,3,0,0,0,0,0,0,240,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,255,253,33,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,127,0,0,240,0,248,0,0,0,124,0,0,0,0,0,0,31,252,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,247,63,0,0,0,128,0,0,0,0,0,0,0,0,0,0,3,0,68,8,0,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,255,255,3,0,0,0,0,0,192,63,0,0,128,255,3,0,0,0,0,0,7,0,0,0,0,0,200,19,0,0,0,0,0,0,0,0,0,0,0,0,0,126,102,0,8,16,0,0,0,0,0,0,0,0,0,0,0,0,157,193,2,0,0,0,0,48,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,33,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,110,240,0,0,0,0,0,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,255,127,0,0,0,0,0,0,0,3,0,0,0,0,0,120,38,0,0,0,0,0,0,0,0,7,0,0,0,128,239,31,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,3,248,255,231,15,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,19,16,16,16,16,16,16,16,16,16,16,20,21,22,23,24,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,25,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,26,16,16,16,16,27,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,16,16,16,29,30,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,31,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,251,255,255,255,255,255,255,255,255,255,255,15,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,255,15,255,255,255,255,255,255,255,127,254,255,255,255,255,255,255,255,255,255,127,254,255,255,255,255,255,255,255,255,255,255,255,255,224,255,255,255,255,63,254,255,255,255,255,255,255,255,255,255,255,127,255,255,255,255,255,7,255,255,255,255,15,0,255,255,255,255,255,127,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,255,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,255,127,248,255,255,255,255,255,15,0,0,255,3,0,0,255,255,255,255,247,255,127,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,255,255,255,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,255,255,255,255,255,7,255,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,16,16,34,35,16,36,37,38,39,40,41,42,43,16,44,45,46,17,47,48,17,17,49,17,17,17,50,51,52,53,54,55,56,57,17,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,58,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,59,16,60,61,62,63,64,65,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+298098);allocate([16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,66,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,67,16,16,68,16,69,70,71,16,72,16,73,16,16,16,16,74,75,76,77,16,16,78,16,79,80,16,16,16,16,81,16,16,16,16,16,16,16,16,16,16,16,16,16,82,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,83,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,84,85,86,87,16,16,88,89,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,90,16,91,92,93,94,95,96,97,98,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,254,255,0,252,1,0,0,248,1,0,0,120,0,0,0,0,255,251,223,251,0,0,128,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,252,255,224,175,255,255,255,255,255,255,255,255,255,255,223,255,255,255,255,255,32,64,176,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,0,134,254,255,255,255,0,64,73,0,0,0,0,0,24,0,223,255,0,200,0,0,0,0,0,0,0,1,0,60,0,0,0,0,0,0,0,0,0,0,0,0,16,224,1,30,0,96,255,191,0,0,0,0,0,0,255,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,207,3,0,0,0,3,0,32,255,127,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,0,0,16,0,32,30,0,48,0,1,0,0,0,0,0,0,0,0,16,0,32,0,0,0,0,252,15,0,0,0,0,0,0,0,16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,32,0,0,0,0,3,0,0,0,0,0,0,0,0,16,0,32,0,0,0,0,253,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,255,7,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,255,0,0,0,0,0,0,0,16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,63,2,0,0,0,0,0,0,0,0,0,4,0,0,0,0,16,0,0,0,0,0,0,128,0,128,192,223,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,254,255,255,255,0,252,255,255,0,0,0,0,0,0,0,0,252,0,0,0,0,0,0,192,255,223,255,7,0,0,0,0,0,0,0,0,0,0,128,6,0,252,0,0,24,62,0,0,128,191,0,204,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,96,255,255,255,31,0,0,255,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,1,0,0,24,0,0,0,0,0,0,0,0,0,56,0,0,0,0,16,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,254,127,47,0,0,255,3,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,196,255,255,255,255,0,0,0,192,0,0,0,0,0,0,0,0,1,0,224,159,0,0,0,0,127,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,0,0,252,255,255,255,31,0,0,0,0,0,12,0,0,0,0,0,0,64,0,12,240,0,0,0,0,0,0,192,248,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,255,0,255,255,255,33,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,127,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,3,224,0,224,0,224,0,96,128,248,255,255,255,252,255,255,255,255,255,127,31,252,241,127,255,127,0,0,255,255,255,3,0,0,255,255,255,255,1,0,123,3,208,193,175,66,0,12,31,188,255,255,0,0,0,0,0,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,255,255,255,127,0,0,0,255,7,0,0,255,255,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,252,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,135,3,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,127,255,15,0,0,0,0,0,0,0,0,255,255,255,251,255,255,255,255,255,255,255,255,255,255,15,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,255,15,30,255,255,255,1,252,193,224,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,0,255,255,255,255,15,0,0,0,255,255,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,127,0,0,0,0,0,0,192,0,224,0,0,0,0,0,0,0,0,0,0,0,128,15,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,255,255,127,0,3,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,8,0,0,0,15,255,3,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,16,192,0,0,255,255,3,7,0,0,0,0,0,248,0,0,0,0,8,128,0,0,0,0,0,0,0,0,0,0,8,0,255,63,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,128,11,0,0,0,0,0,0,0,128,2,0,0,192,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,255,255,255,3,127,0,255,255,255,255,247,255,127,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,254,255,0,252,1,0,0,248,1,0,0,248,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,127,0,48,135,255,255,255,255,255,143,255,0,0,0,0,0,0,224,255,255,7,255,15,0,0,0,0,0,0,255,255,255,255,255,63,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,143,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,255,0,255,1,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,0,255,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,63,252,255,63,0,0,0,3,0,0,0,0,0,0,254,3,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,7,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,255,255,255,255,127,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,0,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,127,0,255,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,8,0,0,0,8,0,0,32,0,0,0,32,0,0,128,0,0,0,128,0,0,0,2,0,0,0,2,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,255,255,255,255,255,15,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,127,254,127,254,255,254,255,0,0,0,0,255,7,255,255,255,127,255,255,255,255,255,255,255,15,255,255,255,255,255,7,0,0,0,0,0,0,0,0,192,255,255,255,7,0,255,255,255,255,255,7,255,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,1,0,191,255,255,255,255,255,255,255,255,31,255,255,15,0,255,255,255,255,223,7,0,0,255,255,1,0,255,255,255,255,255,255,255,127,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,30,255,255,255,255,255,255,255,63,15,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,255,255,255,255,255,255,255,255,225,255,0,0,0,0,0,0,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,46,85,84,70,45,56,0,80,79,83,73,88,0,117,116,102,56,0,0,200,119,99,104,97,114,116,0,0,198,117,99,115,50,0,117,99,115,50,98,101,0,0,196,117,99,115,50,108,101,0,0,197,117,116,102,49,54,0,117,116,102,49,54,98,101,0,0,194,117,116,102,49,54,108,101,0,0,193,117,99,115,52,0,117,99,115,52,98,101,0,117,116,102,51,50,0,117,116,102,51,50,98,101,0,0,192,117,99,115,52,108,101,0,117,116,102,51,50,108,101,0,0,195,97,115,99,105,105,0,117,115,97,115,99,105,105,0,105,115,111,54,52,54,0,105,115,111,54,52,54,117,115,0,0,199,101,117,99,106,112,0,0,208,115,104,105,102,116,106,105,115,0,115,106,105,115,0,0,209,103,98,49,56,48,51,48,0,0,216,103,98,107,0,0,217,103,98,50,51,49,50,0,0,218,98,105,103,53,0,98,105,103,102,105,118,101,0,99,112,57,53,48,0,98,105,103,53,104,107,115,99,115,0,0,224,101,117,99,107,114,0,107,115,99,53,54,48,49,0,107,115,120,49,48,48,49,0,99,112,57,52,57,0,0,232,105,115,111,56,56,53,57,49,0,108,97,116,105,110,49,0,0,128,105,115,111,56,56,53,57,50,0,0,32,0,84,0,137,18,0,32,1,6,0,0,152,65,134,26,127,0,48,72,32,0,88,32,201,18,0,36,17,198,35,0,156,81,198,26,128,80,66,136,32,90,0,0,192,4,0,16,113,1,0,29,0,112,2,0,41,0,0,192,7,33,48,1,5,0,0,88,1,0,0,94,208,1,128,29,0,0,128,6,0,91,0,0,0,5,0,20,129,1,0,30,0,128,2,0,42,0,0,0,8,34,52,17,5,0,0,92,1,0,0,95,212,1,192,29,0,0,144,70,36,105,115,111,56,56,53,57,51,0,0,32,0,212,0,9,0,0,4,48,3,0,0,244,64,70,11,63,0,16,64,32,0,216,0,0,0,0,0,64,3,0,0,248,80,134,11,64,0,16,128,32,0,0,0,64,0,0,108,144,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,188,0,0,0,43,0,0,0,0,0,200,33,6,0,0,0,0,64,0,0,112,160,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,192,0,0,0,44,0,0,0,0,0,204,49,70,36,105,115,111,56,56,53,57,52,0,0,32,0,84,48,4,23,0,220,96,4,0,0,152,49,66,12,108,0,48,8,0,0,88,32,73,23,0,224,112,196,35,0,156,65,130,12,109,72,65,200,20,17,0,0,0,0,0,0,0,192,14,29,0,112,2,0,37,0,0,64,14,33,56,65,69,16,0,0,0,0,0,0,224,1,0,0,0,184,1,7,0,18,0,0,0,0,0,0,0,0,15,30,0,128,2,0,38,0,0,128,14,34,60,81,133,16,0,0,0,0,0,0,228,1,0,0,0,188,17,71,36,105,115,111,56,56,53,57,53,0,0,32,0,136,51,14,57,229,152,115,14,58,233,168,179,14,59,237,0,224,206,59,240,196,35,207,60,244,212,99,207,61,248,228,163,207,62,252,244,227,207,63,0,5,36,208,64,4,21,100,208,65,8,37,164,208,66,12,53,228,208,67,16,69,36,209,68,20,85,100,209,69,24,101,164,209,70,28,117,228,209,71,32,133,36,210,72,36,149,100,210,73,40,165,164,210,74,44,181,228,210,75,53,194,20,147,76,51,209,84,147,77,55,225,148,147,78,59,13,192,83,79,105,115,111,56,56,53,57,54,0,0,32,0,4,16,64,0,0,4,16,64,0,1,4,16,64,0,115,1,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,0,93,1,4,16,64,93,1,216,117,23,94,121,233,181,23,95,125,249,245,23,96,129,9,54,24,97,133,25,118,24,98,137,41,182,24,99,141,57,246,88,0,1,4,16,64,0,144,69,38,217,100,148,85,102,217,101,152,101,166,217,102,156,117,230,217,103,160,133,38,90,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,105,115,111,56,56,53,57,55,0,0,32,0,144,88,34,0,51,210,8,0,0,0,0,160,9,0,0,0,16,128,136,0,0,0,0,0,155,112,210,9,0,158,124,2,10,0,161,0,32,202,40,164,148,98,202,41,168,164,162,202,42,172,180,226,202,43,176,196,34,203,44,180,212,18,128,45,183,224,146,139,46,187,240,210,139,47,191,0,19,140,48,195,16,83,140,49,199,32,147,140,50,203,48,211,140,51,207,64,19,141,52,211,80,83,141,53,215,96,147,141,54,219,112,211,141,55,223,128,19,78,0,105,115,111,56,56,53,57,56,0,0,32,0,4,0,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,192,136,83,81,85,149,85,87,97,149,149,86,91,113,213,149,87,95,129,21,150,88,99,145,85,150,89,103,161,149,150,90,107,177,213,86,0,1,120,248,97,0,105,115,111,56,56,53,57,57,0,0,80,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,64,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,80,6,0,105,115,111,56,56,53,57,49,48,0,0,32,0,84,48,66,12,57,220,16,4,0,70,132,96,6,27,131,0,0,135,20,0,88,64,130,12,58,224,32,4,0,71,136,112,70,27,132,136,24,199,20,17,0,0,0,0,0,0,0,192,14,29,0,112,2,0,37,0,0,0,0,0,56,65,5,0,0,0,0,128,27,0,224,1,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,15,30,0,128,2,0,38,0,0,0,0,0,60,81,5,0,0,0,0,192,27,0,228,1,0,0,0,0,0,192,16,105,115,111,56,56,53,57,49,49,0,116,105,115,54,50,48,0,0,32,0,188,6,91,108,178,205,70,91,109,182,221,134,91,110,186,237,198,91,111,190,253,6,92,112,194,13,71,92,113,198,29,135,92,114,202,45,199,92,115,206,61,7,93,116,210,77,71,93,117,214,93,135,93,118,218,109,199,93,119,222,125,7,94,120,226,141,71,94,121,230,157,135,94,0,1,4,16,64,122,234,173,199,94,123,238,189,7,95,124,242,205,71,95,125,246,221,135,95,126,250,237,199,95,127,254,253,7,96,128,2,14,72,96,129,1,4,16,64,0,105,115,111,56,56,53,57,49,51,0,0,32,0,160,8,0,0,0,164,8,0,0,13,0,192,5,0,0,0,0,192,2,0,0,0,0,0,39,2,0,0,0,16,0,208,5,0,0,0,0,128,3,21,236,16,193,5,0,0,112,194,8,29,0,240,71,9,49,4,145,131,17,102,48,225,4,0,84,0,0,0,0,120,40,1,6,28,0,4,50,8,0,22,240,32,1,6,0,0,128,2,9,30,0,0,136,9,50,8,161,195,17,103,52,241,4,0,85,0,0,0,0,121,44,17,70,28,0,8,66,72,137,105,115,111,56,56,53,57,49,52,0,0,32,0,24,120,32,0,27,112,128,32,0,20,2,96,97,130,26,2,0,128,31,10,46,248,2,12,12,54,8,128,131,21,62,120,33,132,27,98,152,97,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,128,132,0,0,0,0,0,0,0,192,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,0,0,0,0,0,0,0,192,132,0,0,0,0,0,0,0,208,7,0,105,115,111,56,56,53,57,49,53,0,108,97,116,105,110,57,0,0,36,51,2,96,6,0,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131,0,0,0,0,132,0,0,0,0,88,100,225,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,115,111,56,56,53,57,49,54,0,0,32,0,84,96,129,18,51,166,104,6,0,103,0,160,8,0,127,0,0,72,32,0,0,208,193,18,131,160,8,0,0,132,120,176,8,0,88,100,225,135,32,0,0,0,192,4,0,92,0,0,0,0,0,0,0,0,0,0,0,0,0,33,48,1,0,0,0,88,1,0,24,118,0,0,0,0,0,156,192,8,0,0,0,0,0,5,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,34,52,1,0,0,0,92,1,64,24,119,0,0,0,0,0,160,208,8,0,99,112,49,50,53,48,0,119,105,110,100,111,119,115,49,50,53,48,0,0,0,51,6,96,98,0,41,182,168,226,138,1,184,104,198,139,96,168,49,200,31,1,144,88,226,137,40,178,8,98,136,1,216,120,6,140,97,172,65,8,32,0,60,2,137,18,0,84,0,0,0,0,0,64,6,0,0,0,0,64,32,0,0,32,201,18,0,0,0,0,0,0,88,80,6,0,72,80,146,132,32,90,0,0,192,4,0,16,113,1,0,29,0,112,2,0,41,0,0,192,7,33,48,1,5,0,0,88,1,0,0,94,208,1,128,29,0,0,128,6,0,91,0,0,0,5,0,20,129,1,0,30,0,128,2,0,42,0,0,0,8,34,52,17,5,0,0,92,1,0,0,95,212,1,192,29,0,0,144,70,36,99,112,49,50,53,49,0,119,105,110,100,111,119,115,49,50,53,49,0,0,0,227,144,99,162,76,41,182,168,226,138,51,186,168,206,139,235,180,195,206,59,49,145,88,226,137,40,178,8,98,136,1,216,136,19,140,57,237,164,83,79,0,184,195,83,58,0,248,4,0,0,226,0,80,14,0,0,0,0,0,58,0,0,112,78,77,63,1,0,0,0,48,213,56,19,0,55,153,67,147,77,240,196,35,207,60,244,212,99,207,61,248,228,163,207,62,252,244,227,207,63,0,5,36,208,64,4,21,100,208,65,8,37,164,208,66,12,53,228,208,67,16,69,36,209,68,20,85,100,209,69,24,101,164,209,70,28,117,228,209,71,32,133,36,210,72,36,149,100,210,73,40,165,164,210,74,44,181,228,210,75,99,112,49,50,53,50,0,119,105,110,100,111,119,115,49,50,53,50,0,0,0,51,6,96,98,33,41,182,168,226,138,142,184,104,198,139,88,4,48,72,0,1,144,88,226,137,40,178,8,98,136,147,216,120,6,140,89,4,64,136,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,112,49,50,53,51,0,119,105,110,100,111,119,115,49,50,53,51,0,0,0,51,6,96,98,33,41,182,168,226,138,1,184,24,192,139,1,4,16,64,0,1,144,88,226,137,40,178,8,98,136,1,216,24,0,140,1,4,16,64,0,0,112,210,9,0,0,0,0,0,0,0,0,16,0,0,0,0,0,128,136,0,0,0,0,0,155,0,0,0,0,158,124,2,10,0,161,0,32,202,40,164,148,98,202,41,168,164,162,202,42,172,180,226,202,43,176,196,34,203,44,180,212,18,128,45,183,224,146,139,46,187,240,210,139,47,191,0,19,140,48,195,16,83,140,49,199,32,147,140,50,203,48,211,140,51,207,64,19,141,52,211,80,83,141,53,215,96,147,141,54,219,112,211,141,55,223,128,19,78,0,99,112,49,50,53,52,0,119,105,110,100,111,119,115,49,50,53,52,0,0,0,51,6,96,98,33,41,182,168,226,138,142,184,104,198,139,88,4,16,64,0,1,144,88,226,137,40,178,8,98,136,147,216,120,6,140,89,4,16,128,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,64,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,80,6,0,99,112,49,50,53,53,0,119,105,110,100,111,119,115,49,50,53,53,0,0,0,51,6,96,98,33,41,182,168,226,138,142,184,24,192,139,1,4,16,64,0,1,144,88,226,137,40,178,8,98,136,147,216,24,0,140,1,4,16,64,0,0,0,0,0,0,49,2,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,64,5,37,212,80,68,21,101,212,81,72,37,21,128,82,75,49,213,148,83,79,65,21,149,84,110,189,5,87,92,114,5,16,64,0,1,4,16,64,0,83,81,85,149,85,87,97,149,149,86,91,113,213,149,87,95,129,21,150,88,99,145,85,150,89,103,161,149,150,90,107,177,213,86,0,1,120,248,97,0,99,112,49,50,53,54,0,119,105,110,100,111,119,115,49,50,53,54,0,0,0,51,146,102,98,33,41,182,168,226,138,142,184,56,218,139,88,148,134,154,105,170,145,88,226,137,40,178,8,98,136,169,217,120,26,140,89,112,216,225,106,0,204,5,0,0,0,0,0,0,0,0,0,192,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,23,0,0,0,0,64,93,173,217,117,23,94,121,233,181,23,95,125,249,245,23,96,129,9,54,24,97,133,25,118,24,98,137,41,182,24,0,140,53,230,216,99,144,69,38,217,100,0,80,6,64,101,150,93,134,25,0,0,0,0,0,0,153,105,6,0,0,155,113,214,153,103,0,124,6,26,0,161,1,32,26,0,0,120,248,161,107,99,112,49,50,53,55,0,119,105,110,100,111,119,115,49,50,53,55,0,0,0,51,6,96,98,0,41,182,168,226,138,1,184,24,192,139,1,16,240,136,2,1,144,88,226,137,40,178,8,98,136,1,216,24,0,140,1,24,32,73,0,0,4,0,0,0,0,4,0,0,0,13,0,192,5,0,0,0,0,192,2,0,0,0,0,0,0,0,0,0,0,16,0,208,5,0,0,0,0,128,3,21,236,16,193,5,0,0,112,194,8,29,0,240,71,9,49,4,145,131,17,102,48,225,4,0,84,0,0,0,0,120,40,1,6,28,0,4,50,8,0,22,240,32,1,6,0,0,128,2,9,30,0,0,136,9,50,8,161,195,17,103,52,241,4,0,85,0,0,0,0,121,44,17,70,28,0,8,66,72,36,99,112,49,50,53,56,0,119,105,110,100,111,119,115,49,50,53,56,0,0,0,51,6,96,98,33,41,182,168,226,138,142,184,24,192,139,88,4,16,64,0,1,144,88,226,137,40,178,8,98,136,147,216,24,0,140,89,4,16,128,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,4,0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,33,0,128,9,0,0,24,2,0,0,0,0,0,0,0,0,32,114,9,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,150,0,0,0,0,34,0,144,9,0,0,28,2,0,0,0,0,0,0,0,0,36,34,35,0,107,111,105,56,114,0,0,0,62,254,8,100,144,66,14,73,100,145,70,30,137,164,153,103,162,153,166,154,107,178,217,38,143,110,222,136,99,142,58,238,40,64,143,7,32,144,192,3,73,42,185,36,76,76,54,233,228,147,80,70,41,229,148,84,86,105,229,149,88,102,169,165,56,91,114,217,165,151,95,130,25,166,152,99,146,89,102,1,46,65,20,145,73,20,85,68,210,68,37,97,148,145,70,27,113,212,145,71,31,189,4,82,72,34,141,100,145,68,44,173,116,17,74,45,165,116,146,74,14,193,19,143,65,244,212,67,208,60,5,225,147,143,62,251,240,211,143,63,255,60,4,80,64,2,13,100,143,60,12,45,116,15,66,13,37,116,144,66,107,111,105,56,117,0,0,0,62,254,8,100,144,66,14,73,100,145,70,30,137,164,153,103,162,153,166,154,107,178,217,38,143,110,222,136,99,142,58,238,40,64,143,7,32,144,192,3,73,42,185,36,76,51,53,89,147,77,80,70,41,229,148,84,254,100,229,149,88,102,169,165,56,229,112,121,14,58,95,130,25,166,152,99,250,84,102,1,46,65,20,145,73,20,85,68,210,68,37,97,148,145,70,27,113,212,145,71,31,189,4,82,72,34,141,100,145,68,44,173,116,17,74,45,165,116,146,74,14,193,19,143,65,244,212,67,208,60,5,225,147,143,62,251,240,211,143,63,255,60,4,80,64,2,13,100,143,60,12,45,116,15,66,13,37,116,144,66,0,8,4,4,8,4,4,8,2,4,0,195,138,204,132,195,138,204,140,195,170,204,132,195,170,204,140,0,94,91,121,89,93,0,94,91,110,78,93,0,121,101,115,0,110,111,0,83,117,110,0,77,111,110,0,84,117,101,0,87,101,100,0,84,104,117,0,70,114,105,0,83,97,116,0,83,117,110,100,97,121,0,77,111,110,100,97,121,0,84,117,101,115,100,97,121,0,87,101,100,110,101,115,100,97,121,0,84,104,117,114,115,100,97,121,0,70,114,105,100,97,121,0,83,97,116,117,114,100,97,121,0,74,97,110,0,70,101,98,0,77,97,114,0,65,112,114,0,77,97,121,0,74,117,110,0,74,117,108,0,65,117,103,0,83,101,112,0,79,99,116,0,78,111,118,0,68,101,99,0,74,97,110,117,97,114,121,0,70,101,98,114,117,97,114,121,0,77,97,114,99,104,0,65,112,114,105,108,0,77,97,121,0,74,117,110,101,0,74,117,108,121,0,65,117,103,117,115,116,0,83,101,112,116,101,109,98,101,114,0,79,99,116,111,98,101,114,0,78,111,118,101,109,98,101,114,0,68,101,99,101,109,98,101,114,0,65,77,0,80,77,0,37,97,32,37,98,32,37,101,32,37,84,32,37,89,0,37,109,47,37,100,47,37,121,0,37,72,58,37,77,58,37,83,0,37,73,58,37,77,58,37,83,32,37,112,0,0,0,37,109,47,37,100,47,37,121,0,48,49,50,51,52,53,54,55,56,57,0,37,97,32,37,98,32,37,101,32,37,84,32,37,89,0,37,72,58,37,77,58,37,83,0,46,0,0,109,101,115,115,97,103,101,115,0,85,84,70,45,56,0,85,110,107,110,111,119,110,32,115,105,103,110,97,108,0,72,97,110,103,117,112,0,73,110,116,101,114,114,117,112,116,0,81,117,105,116,0,73,108,108,101,103,97,108,32,105,110,115,116,114,117,99,116,105,111,110,0,84,114,97,99,101,47,98,114,101,97,107,112,111,105,110,116,32,116,114,97,112,0,65,98,111,114,116,101,100,0,66,117,115,32,101,114,114,111,114,0,65,114,105,116,104,109,101,116,105,99,32,101,120,99,101,112,116,105,111,110,0,75,105,108,108,101,100,0,85,115,101,114,32,100,101,102,105,110,101,100,32,115,105,103,110,97,108,32,49,0,83,101,103,109,101,110,116,97,116,105,111,110,32,102,97,117,108,116,0,85,115,101,114,32,100,101,102,105,110,101,100,32,115,105,103,110,97,108,32,50,0,66,114,111,107,101,110,32,112,105,112,101,0,65,108,97,114,109,32,99,108,111,99,107,0,84,101,114,109,105,110,97,116,101,100,0,83,116,97,99,107,32,102,97,117,108,116,0,67,104,105,108,100,32,112,114,111,99,101,115,115,32,115,116,97,116,117,115,0,67,111,110,116,105,110,117,101,100,0,83,116,111,112,112,101,100,32,40,115,105,103,110,97,108,41,0,83,116,111,112,112,101,100,0,83,116,111,112,112,101,100,32,40,116,116,121,32,105,110,112,117,116,41,0,83,116,111,112,112,101,100,32,40,116,116,121,32,111,117,116,112,117,116,41,0,85,114,103,101,110,116,32,73,47,79,32,99,111,110,100,105,116,105,111,110,0,67,80,85,32,116,105,109,101,32,108,105,109,105,116,32,101,120,99,101,101,100,101,100,0,70,105,108,101,32,115,105,122,101,32,108,105,109,105,116,32,101,120,99,101,101,100,101,100,0,86,105,114,116,117,97,108,32,116,105,109,101,114,32,101,120,112,105,114,101,100,0,80,114,111,102,105,108,105,110,103,32,116,105,109,101,114,32,101,120,112,105,114,101,100,0,87,105,110,100,111,119,32,99,104,97,110,103,101,100,0,73,47,79,32,112,111,115,115,105,98,108,101,0,80,111,119,101,114,32,102,97,105,108,117,114,101,0,66,97,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,84,51,50,0,82,84,51,51,0,82,84,51,52,0,82,84,51,53,0,82,84,51,54,0,82,84,51,55,0,82,84,51,56,0,82,84,51,57,0,82,84,52,48,0,82,84,52,49,0,82,84,52,50,0,82,84,52,51,0,82,84,52,52,0,82,84,52,53,0,82,84,52,54,0,82,84,52,55,0,82,84,52,56,0,82,84,52,57,0,82,84,53,48,0,82,84,53,49,0,82,84,53,50,0,82,84,53,51,0,82,84,53,52,0,82,84,53,53,0,82,84,53,54,0,82,84,53,55,0,82,84,53,56,0,82,84,53,57,0,82,84,54,48,0,82,84,54,49,0,82,84,54,50,0,82,84,54,51,0,82,84,54,52,0,50,62,47,100,101,118,47,110,117,108,108,0,101,118,97,108,32,34,112,114,105,110,116,102,32,37,115,92,92,92,92,48,32,120,32,36,49,32,36,50,34,0,80,87,68,0,37,42,91,94,10,93,37,42,91,10,93,0,32,37,110,37,42,115,37,110,32,37,110,37,42,115,37,110,32,37,110,37,42,115,37,110,32,37,110,37,42,115,37,110,32,37,100,32,37,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,115,9,37,115,9,37,115,9,37,115,9,37,100,9,37,100,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,98,32,37,101,32,37,84,0,91,0,93,0,60,37,100,62,37,115,32,37,115,37,115,37,46,48,100,37,115,58,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,100,101,118,47,112,116,109,120,0,47,100,101,118,47,112,116,115,47,37,100,0,58,32,105,108,108,101,103,97,108,32,111,112,116,105,111,110,58,32,0,58,32,111,112,116,105,111,110,32,114,101,113,117,105,114,101,115,32,97,110,32,97,114,103,117,109,101,110,116,58,32,0,37,46,42,102,0,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0,37,46,42,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,46,42,103,0,72,111,115,116,32,110,111,116,32,102,111,117,110,100,0,84,114,121,32,97,103,97,105,110,0,78,111,110,45,114,101,99,111,118,101,114,97,98,108,101,32,101,114,114,111,114,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,0,85,110,107,110,111,119,110,32,101,114,114,111,114,0,0,0,0,0,0,0,37,46,50,88,0,58,37,46,50,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,112,114,111,99,47,110,101,116,47,105,102,95,105,110,101,116,54,0,114,98,101,0,37,120,32,37,120,32,37,120,32,37,120,32,37,115,0,37,115,37,115,37,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,46,37,100,46,37,100,46,37,100,0,37,120,58,37,120,58,37,120,58,37,120,58,37,120,58,37,120,58,37,120,58,37,120,0,37,120,58,37,120,58,37,120,58,37,120,58,37,120,58,37,120,58,37,100,46,37,100,46,37,100,46,37,100,0,58,48,0,47,101,116,99,47,114,101,115,111,108,118,46,99,111,110,102,0,110,97,109,101,115,101,114,118,101,114,0,0,0,0,0,0,0,0,0,0,0,255,255,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,0,105,112,54,46,97,114,112,97,0,37,100,46,37,100,46,37,100,46,37,100,46,105,110,45,97,100,100,114,46,97,114,112,97,0,116,99,112,0,117,100,112,0,78,111,32,101,114,114,111,114,0,78,111,32,109,97,116,99,104,0,73,110,118,97,108,105,100,32,114,101,103,101,120,112,0,85,110,107,110,111,119,110,32,99,111,108,108,97,116,105,110,103,32,101,108,101,109,101,110,116,0,85,110,107,110,111,119,110,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,110,97,109,101,0,84,114,97,105,108,105,110,103,32,98,97,99,107,115,108,97,115,104,0,73,110,118,97,108,105,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,0,77,105,115,115,105,110,103,32,39,93,39,0,77,105,115,115,105,110,103,32,39,41,39,0,77,105,115,115,105,110,103,32,39,125,39,0,73,110,118,97,108,105,100,32,99,111,110,116,101,110,116,115,32,111,102,32,123,125,0,73,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,114,97,110,103,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,112,101,116,105,116,105,111,110,32,110,111,116,32,112,114,101,99,101,100,101,100,32,98,121,32,118,97,108,105,100,32,101,120,112,114,101,115,115,105,111,110,0,0,85,110,107,110,111,119,110,32,101,114,114,111,114,0,37,115,0,47,0,119,43,0,104,104,0,104,0,0,0,0,0,108,0,0,76,0,0,108,108,0,37,46,42,115,37,46,48,100,37,115,37,99,37,37,108,108,110,0,37,42,0,115,104,0,45,99,0,47,98,105,110,47,115,104,0,114,119,97,0,116,101,109,112,0,37,115,47,37,115,45,37,100,45,37,100,45,37,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,116,109,112,0,47,116,109,112,47,116,37,120,45,37,120,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+308338);allocate([78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,36,50,97,36,48,48,36,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,117,0,56,98,32,208,193,210,207,204,216,0,86,85,114,80,109,88,68,54,113,47,110,86,83,83,112,55,112,78,68,104,67,82,57,48,55,49,73,102,73,82,101,0,85,0,105,49,68,55,48,57,118,102,97,109,117,108,105,109,108,71,99,113,48,113,113,51,85,118,117,85,97,115,118,69,97,0,85,0,255,163,51,52,255,255,255,163,51,52,53,0,88,121,48,49,64,35,1,2,128,127,255,13,10,129,9,32,33,0,36,53,36,114,111,117,110,100,115,61,49,50,51,52,36,97,98,99,48,49,50,51,52,53,54,55,56,57,36,0,36,53,36,114,111,117,110,100,115,61,49,50,51,52,36,97,98,99,48,49,50,51,52,53,54,55,56,57,36,51,86,102,68,106,80,116,48,53,86,72,70,110,52,55,67,47,111,106,70,90,54,75,82,80,89,114,79,106,106,49,108,76,98,72,46,100,107,70,51,98,90,54,0,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,95,48,46,46,46,47,57,90,122,0,128,120,0,128,255,128,1,32,127,129,128,128,13,10,255,127,32,129,32,116,101,115,116,0,95,48,46,46,46,47,57,90,122,88,55,105,83,74,78,100,50,49,115,85,0,128,120,50,50,47,119,75,53,50,90,75,71,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,121,48,49,64,35,1,2,128,127,255,13,10,129,9,32,33,0,36,54,36,114,111,117,110,100,115,61,49,50,51,52,36,97,98,99,48,49,50,51,52,53,54,55,56,57,36,0,36,54,36,114,111,117,110,100,115,61,49,50,51,52,36,97,98,99,48,49,50,51,52,53,54,55,56,57,36,66,67,112,116,56,122,76,114,99,47,82,99,121,117,88,109,67,68,79,69,49,65,76,113,77,88,66,50,77,72,54,110,49,103,56,57,49,72,104,70,106,56,46,119,55,76,120,71,118,46,70,84,107,113,113,54,86,120,99,47,107,109,51,89,48,106,69,48,106,50,52,106,89,53,80,73,118,47,111,79,117,54,114,101,103,49,0,88,121,48,49,64,35,1,2,128,127,255,13,10,129,9,32,33,0,36,49,36,97,98,99,100,48,49,50,51,36,0,36,49,36,97,98,99,100,48,49,50,51,36,57,81,99,103,56,68,121,118,105,101,107,86,51,116,68,71,77,90,121,110,74,49,0,76,79,71,78,65,77,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,100,101,118,47,116,116,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,112,114,111,99,47,115,101,108,102,47,102,100,47,0,105,110,102,105,110,105,116,121,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,4,7,3,6,5,0,88,88,88,88,88,88,0,47,100,101,118,47,115,104,109,47],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+318578);allocate([36,49,36,0,0,6,12,1,7,13,2,8,14,3,9,15,4,10,5,36,54,36,0,36,54,36,37,115,37,46,42,115,36,0,0,21,42,22,43,1,44,2,23,3,24,45,25,46,4,47,5,26,6,27,48,28,49,7,50,8,29,9,30,51,31,52,10,53,11,32,12,33,54,34,55,13,56,14,35,15,36,57,37,58,16,59,17,38,18,39,60,40,61,19,62,20,41,36,53,36,0,114,111,117,110,100,115,61,0,114,111,117,110,100,115,61,37,117,36,0,36,53,36,37,115,37,46,42,115,36,0,0,10,20,21,1,11,12,22,2,3,13,23,24,4,14,15,25,5,6,16,26,27,7,17,18,28,8,9,19,29,46,47,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,0,64,64,64,64,64,64,64,64,64,64,64,64,64,64,0,1,54,55,56,57,58,59,60,61,62,63,64,64,64,64,64,64,64,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,64,64,64,64,64,64,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,64,64,64,64,64,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,0,46,47,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,10,10,0,0,0,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,37,46,42,115,0,35,0,43,0,45,0,32,0,48,0,76,0,0,106,76,76,76,0,106,0,0,0,0,0,106,106,0,0,0,0,106,0,0,106,37,37,37,115,37,115,37,115,37,115,37,115,42,46,42,37,99,37,99,0,9,0,10,0,13,0,12,0,7,0,27,0,91,91,58,97,108,110,117,109,58,93,95,93,0,91,94,91,58,97,108,110,117,109,58,93,95,93,0,91,91,58,115,112,97,99,101,58,93,93,0,91,94,91,58,115,112,97,99,101,58,93,93,0,91,91,58,100,105,103,105,116,58,93,93,0,91,94,91,58,100,105,103,105,116,58,93,93,0,37,42,46,42,102,0,46,0,109,97,120,32,115,121,115,116,101,109,32,98,121,116,101,115,32,61,32,37,49,48,108,117,10,0,115,121,115,116,101,109,32,98,121,116,101,115,32,32,32,32,32,61,32,37,49,48,108,117,10,0,105,110,32,117,115,101,32,98,121,116,101,115,32,32,32,32,32,61,32,37,49,48,108,117,10,0,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,58,58,119,97,105,116,58,32,109,117,116,101,120,32,110,111,116,32,108,111,99,107,101,100,0,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,32,119,97,105,116,32,102,97,105,108,101,100,0,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,58,58,116,105,109,101,100,32,119,97,105,116,58,32,109,117,116,101,120,32,110,111,116,32,108,111,99,107,101,100,0,99,111,110,100,105,116,105,111,110,95,118,97,114,105,97,98,108,101,32,116,105,109,101,100,95,119,97,105,116,32,102,97,105,108,101,100,0,78,83,116,51,95,95,49,49,50,102,117,116,117,114,101,95,101,114,114,111,114,69,0,78,83,116,51,95,95,49,49,55,95,95,97,115,115,111,99,95,115,117,98,95,115,116,97,116,101,69,0,78,83,116,51,95,95,49,50,51,95,95,102,117,116,117,114,101,95,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,102,117,116,117,114,101,0,84,104,101,32,97,115,115,111,99,105,97,116,101,100,32,112,114,111,109,105,115,101,32,104,97,115,32,98,101,101,110,32,100,101,115,116,114,117,99,116,101,100,32,112,114,105,111,114,32,116,111,32,116,104,101,32,97,115,115,111,99,105,97,116,101,100,32,115,116,97,116,101,32,98,101,99,111,109,105,110,103,32,114,101,97,100,121,46,0,84,104,101,32,102,117,116,117,114,101,32,104,97,115,32,97,108,114,101,97,100,121,32,98,101,101,110,32,114,101,116,114,105,101,118,101,100,32,102,114,111,109,32,116,104,101,32,112,114,111,109,105,115,101,32,111,114,32,112,97,99,107,97,103,101,100,95,116,97,115,107,46,0,84,104,101,32,115,116,97,116,101,32,111,102,32,116,104,101,32,112,114,111,109,105,115,101,32,104,97,115,32,97,108,114,101,97,100,121,32,98,101,101,110,32,115,101,116,46,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,32,111,110,32,97,110,32,111,98,106,101,99,116,32,119,105,116,104,111,117,116,32,97,110,32,97,115,115,111,99,105,97,116,101,100,32,115,116,97,116,101,46,0,117,110,115,112,101,99,105,102,105,101,100,32,102,117,116,117,114,101,95,101,114,114,99,32,118,97,108,117,101,10,0,117,110,105,113,117,101,95,108,111,99,107,58,58,117,110,108,111,99,107,58,32,110,111,116,32,108,111,99,107,101,100,0,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,119,69,69,0,117,110,115,117,112,112,111,114,116,101,100,32,108,111,99,97,108,101,32,102,111,114,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,99,69,69,0,0,78,83,116,51,95,95,49,49,52,95,95,115,104,97,114,101,100,95,99,111,117,110,116,69,0,78,83,116,51,95,95,49,49,57,95,95,115,104,97,114,101,100,95,119,101,97,107,95,99,111,117,110,116,69,0,78,83,116,51,95,95,49,49,50,98,97,100,95,119,101,97,107,95,112,116,114,69,0,98,97,100,95,119,101,97,107,95,112,116,114,0,114,97,110,100,111,109,95,100,101,118,105,99,101,32,102,97,105,108,101,100,32,116,111,32,111,112,101,110,32,0,114,97,110,100,111,109,95,100,101,118,105,99,101,32,103,111,116,32,69,79,70,0,114,97,110,100,111,109,95,100,101,118,105,99,101,32,103,111,116,32,97,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,0,78,83,116,51,95,95,49,49,50,115,121,115,116,101,109,95,101,114,114,111,114,69,0,78,83,116,51,95,95,49,49,52,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,78,83,116,51,95,95,49,49,50,95,95,100,111,95,109,101,115,115,97,103,101,69,0,78,83,116,51,95,95,49,50,52,95,95,103,101,110,101,114,105,99,95,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,78,83,116,51,95,95,49,50,51,95,95,115,121,115,116,101,109,95,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,103,101,110,101,114,105,99,0,117,110,115,112,101,99,105,102,105,101,100,32,103,101,110,101,114,105,99,95,99,97,116,101,103,111,114,121,32,101,114,114,111,114,0,115,121,115,116,101,109,0,117,110,115,112,101,99,105,102,105,101,100,32,115,121,115,116,101,109,95,99,97,116,101,103,111,114,121,32,101,114,114,111,114,0,58,32,0,0,0,0,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,56,95,95,99,95,110,111,100,101,69,0,105,116,101,114,97,116,111,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,100,101,98,117,103,32,100,97,116,97,98,97,115,101,46,0,100,101,98,117,103,32,109,111,100,101,32,105,110,116,101,114,110,97,108,32,108,111,103,105,99,32,101,114,114,111,114,32,95,95,99,95,110,111,100,101,58,58,95,95,114,101,109,111,118,101,0,100,101,98,117,103,32,109,111,100,101,32,105,110,116,101,114,110,97,108,32,108,111,103,105,99,32,101,114,114,111,114,32,95,95,102,105,110,100,95,99,32,65,0,100,101,98,117,103,32,109,111,100,101,32,105,110,116,101,114,110,97,108,32,108,111,103,105,99,32,101,114,114,111,114,32,95,95,102,105,110,100,95,99,32,66,0,100,101,98,117,103,32,109,111,100,101,32,105,110,116,101,114,110,97,108,32,108,111,103,105,99,32,101,114,114,111,114,32,115,119,97,112,32,65,0,100,101,98,117,103,32,109,111,100,101,32,105,110,116,101,114,110,97,108,32,108,111,103,105,99,32,101,114,114,111,114,32,115,119,97,112,32,66,0,100,101,98,117,103,32,109,111,100,101,32,105,110,116,101,114,110,97,108,32,108,111,103,105,99,32,101,114,114,111,114,32,115,119,97,112,32,67,0,100,101,98,117,103,32,109,111,100,101,32,105,110,116,101,114,110,97,108,32,108,111,103,105,99,32,101,114,114,111,114,32,115,119,97,112,32,68,0,95,95,110,101,120,116,95,112,114,105,109,101,32,111,118,101,114,102,108,111,119,0,0,0,0,109,117,116,101,120,32,108,111,99,107,32,102,97,105,108,101,100,0,101,99,32,61,61,32,48,0,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,116,97,103,45,49,46,51,53,46,52,47,115,121,115,116,101,109,47,108,105,98,47,108,105,98,99,120,120,47,109,117,116,101,120,46,99,112,112,0,117,110,108,111,99,107,0,114,101,99,117,114,115,105,118,101,95,109,117,116,101,120,32,99,111,110,115,116,114,117,99,116,111,114,32,102,97,105,108,101,100,0,101,32,61,61,32,48,0,126,114,101,99,117,114,115,105,118,101,95,109,117,116,101,120,0,114,101,99,117,114,115,105,118,101,95,109,117,116,101,120,32,108,111,99,107,32,102,97,105,108,101,100,0,114,101,99,117,114,115,105,118,101,95,116,105,109,101,100,95,109,117,116,101,120,32,108,111,99,107,32,108,105,109,105,116,32,114,101,97,99,104,101,100,0,115,116,111,105,0,115,116,111,108,0,115,116,111,117,108,0,115,116,111,108,108,0,115,116,111,117,108,108,0,115,116,111,102,0,115,116,111,100,0,115,116,111,108,100,0,37,100,0,37,117,0,37,108,100,0,37,108,117,0,37,108,108,100,0,37,108,108,117,0,37,102,0,58,32,110,111,32,99,111,110,118,101,114,115,105,111,110,0,58,32,111,117,116,32,111,102,32,114,97,110,103,101,0,116,104,114,101,97,100,58,58,106,111,105,110,32,102,97,105,108,101,100,0,116,104,114,101,97,100,58,58,100,101,116,97,99,104,32,102,97,105,108,101,100,0,95,95,116,104,114,101,97,100,95,115,112,101,99,105,102,105,99,95,112,116,114,32,99,111,110,115,116,114,117,99,116,105,111,110,32,102,97,105,108,101,100,0,0,1,99,108,111,99,107,95,103,101,116,116,105,109,101,40,67,76,79,67,75,95,77,79,78,79,84,79,78,73,67,41,32,102,97,105,108,101,100,0,83,116,49,54,110,101,115,116,101,100,95,101,120,99,101,112,116,105,111,110,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,55,102,97,105,108,117,114,101,69,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,52,98,97,115,105,99,95,105,111,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,57,95,95,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,69,0,105,111,115,95,98,97,115,101,58,58,99,108,101,97,114,0,105,111,115,116,114,101,97,109,0,117,110,115,112,101,99,105,102,105,101,100,32,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,32,101,114,114,111,114,0,1,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,65,66,67,68,69,70,120,88,43,45,112,80,105,73,110,78,0,0,1,0,1,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,102,97,99,101,116,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,119,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,99,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,115,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,105,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,54,95,95,110,97,114,114,111,119,95,116,111,95,117,116,102,56,73,76,106,49,54,69,69,69,0,78,83,116,51,95,95,49,49,54,95,95,110,97,114,114,111,119,95,116,111,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,49,55,95,95,119,105,100,101,110,95,102,114,111,109,95,117,116,102,56,73,76,106,49,54,69,69,69,0,78,83,116,51,95,95,49,49,55,95,95,119,105,100,101,110,95,102,114,111,109,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,49,52,95,95,99,111,100,101,99,118,116,95,117,116,102,56,73,119,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,119,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,52,95,95,99,111,100,101,99,118,116,95,117,116,102,56,73,68,115,69,69,0,78,83,116,51,95,95,49,49,52,95,95,99,111,100,101,99,118,116,95,117,116,102,56,73,68,105,69,69,0,78,83,116,51,95,95,49,49,53,95,95,99,111,100,101,99,118,116,95,117,116,102,49,54,73,119,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,53,95,95,99,111,100,101,99,118,116,95,117,116,102,49,54,73,119,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,53,95,95,99,111,100,101,99,118,116,95,117,116,102,49,54,73,68,115,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,53,95,95,99,111,100,101,99,118,116,95,117,116,102,49,54,73,68,115,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,53,95,95,99,111,100,101,99,118,116,95,117,116,102,49,54,73,68,105,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,53,95,95,99,111,100,101,99,118,116,95,117,116,102,49,54,73,68,105,76,98,49,69,69,69,0,78,83,116,51,95,95,49,50,48,95,95,99,111,100,101,99,118,116,95,117,116,102,56,95,117,116,102,49,54,73,119,69,69,0,78,83,116,51,95,95,49,50,48,95,95,99,111,100,101,99,118,116,95,117,116,102,56,95,117,116,102,49,54,73,68,105,69,69,0,78,83,116,51,95,95,49,50,48,95,95,99,111,100,101,99,118,116,95,117,116,102,56,95,117,116,102,49,54,73,68,115,69,69,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,95,95,105,109,112,69,0,78,83,116,51,95,95,49,49,52,99,111,108,108,97,116,101,95,98,121,110,97,109,101,73,99,69,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,99,69,69,0,78,83,116,51,95,95,49,49,52,99,111,108,108,97,116,101,95,98,121,110,97,109,101,73,119,69,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,119,69,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,99,69,69,0,78,83,116,51,95,95,49,49,50,99,116,121,112,101,95,98,121,110,97,109,101,73,99,69,69,0,78,83,116,51,95,95,49,49,50,99,116,121,112,101,95,98,121,110,97,109,101,73,119,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,119,69,69,0,78,83,116,51,95,95,49,49,53,110,117,109,112,117,110,99,116,95,98,121,110,97,109,101,73,99,69,69,0,78,83,116,51,95,95,49,49,53,110,117,109,112,117,110,99,116,95,98,121,110,97,109,101,73,119,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,53,116,105,109,101,95,103,101,116,95,98,121,110,97,109,101,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,53,116,105,109,101,95,103,101,116,95,98,121,110,97,109,101,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,53,116,105,109,101,95,112,117,116,95,98,121,110,97,109,101,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,53,116,105,109,101,95,112,117,116,95,98,121,110,97,109,101,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,55,109,111,110,101,121,112,117,110,99,116,95,98,121,110,97,109,101,73,99,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,55,109,111,110,101,121,112,117,110,99,116,95,98,121,110,97,109,101,73,99,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,55,109,111,110,101,121,112,117,110,99,116,95,98,121,110,97,109,101,73,119,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,55,109,111,110,101,121,112,117,110,99,116,95,98,121,110,97,109,101,73,119,76,98,49,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,99,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,119,69,69,0,78,83,116,51,95,95,49,49,53,109,101,115,115,97,103,101,115,95,98,121,110,97,109,101,73,99,69,69,0,78,83,116,51,95,95,49,49,53,109,101,115,115,97,103,101,115,95,98,121,110,97,109,101,73,119,69,69,0,78,83,116,51,95,95,49,49,52,99,111,100,101,99,118,116,95,98,121,110,97,109,101,73,99,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,52,99,111,100,101,99,118,116,95,98,121,110,97,109,101,73,119,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,52,99,111,100,101,99,118,116,95,98,121,110,97,109,101,73,68,115,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,52,99,111,100,101,99,118,116,95,98,121,110,97,109,101,73,68,105,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,37,112,0,37,0,0,0,0,0,108,108,0,0,37,112,0,0,0,0,37,72,58,37,77,58,37,83,37,109,47,37,100,47,37,121,37,89,45,37,109,45,37,100,37,73,58,37,77,58,37,83,32,37,112,37,72,58,37,77,37,72,58,37,77,58,37,83,116,105,109,101,95,112,117,116,95,98,121,110,97,109,101,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,108,111,99,97,108,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,109,111,110,101,121,112,117,110,99,116,95,98,121,110,97,109,101,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,40,41,0,48,49,50,51,52,53,54,55,56,57,0,37,76,102,0,109,111,110,101,121,95,103,101,116,32,101,114,114,111,114,0,48,49,50,51,52,53,54,55,56,57,0,37,46,48,76,102,0,99,111,100,101,99,118,116,95,98,121,110,97,109,101,60,119,99,104,97,114,95,116,44,32,99,104,97,114,44,32,109,98,115,116,97,116,101,95,116,62,58,58,99,111,100,101,99,118,116,95,98,121,110,97,109,101,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,118,101,99,116,111,114,0,42,0,108,111,99,97,108,101,32,99,111,110,115,116,114,117,99,116,101,100,32,119,105,116,104,32,110,117,108,108,0,99,111,108,108,97,116,101,95,98,121,110,97,109,101,60,99,104,97,114,62,58,58,99,111,108,108,97,116,101,95,98,121,110,97,109,101,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,99,111,108,108,97,116,101,95,98,121,110,97,109,101,60,119,99,104,97,114,95,116,62,58,58,99,111,108,108,97,116,101,95,98,121,110,97,109,101,40,115,105,122,101,95,116,32,114,101,102,115,41,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,99,116,121,112,101,95,98,121,110,97,109,101,60,99,104,97,114,62,58,58,99,116,121,112,101,95,98,121,110,97,109,101,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,99,116,121,112,101,95,98,121,110,97,109,101,60,119,99,104,97,114,95,116,62,58,58,99,116,121,112,101,95,98,121,110,97,109,101,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,116,114,117,101,0,102,97,108,115,101,0,110,117,109,112,117,110,99,116,95,98,121,110,97,109,101,60,99,104,97,114,62,58,58,110,117,109,112,117,110,99,116,95,98,121,110,97,109,101,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,83,117,110,100,97,121,0,77,111,110,100,97,121,0,84,117,101,115,100,97,121,0,87,101,100,110,101,115,100,97,121,0,84,104,117,114,115,100,97,121,0,70,114,105,100,97,121,0,83,97,116,117,114,100,97,121,0,83,117,110,0,77,111,110,0,84,117,101,0,87,101,100,0,84,104,117,0,70,114,105,0,83,97,116,0,74,97,110,117,97,114,121,0,70,101,98,114,117,97,114,121,0,77,97,114,99,104,0,65,112,114,105,108,0,77,97,121,0,74,117,110,101,0,74,117,108,121,0,65,117,103,117,115,116,0,83,101,112,116,101,109,98,101,114,0,79,99,116,111,98,101,114,0,78,111,118,101,109,98,101,114,0,68,101,99,101,109,98,101,114,0,74,97,110,0,70,101,98,0,77,97,114,0,65,112,114,0,74,117,110,0,74,117,108,0,65,117,103,0,83,101,112,0,79,99,116,0,78,111,118,0,68,101,99,0,65,77,0,80,77,0,37,109,47,37,100,47,37,121,0,37,72,58,37,77,58,37,83,0,37,97,32,37,98,32,37,100,32,37,72,58,37,77,58,37,83,32,37,89,0,37,73,58,37,77,58,37,83,32,37,112,0,116,105,109,101,95,103,101,116,95,98,121,110,97,109,101,32,102,97,105,108,101,100,32,116,111,32,99,111,110,115,116,114,117,99,116,32,102,111,114,32,0,37,65,0,37,97,0,37,66,0,37,98,0,78,83,116,51,95,95,49,49,51,109,101,115,115,97,103,101,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,95,95,116,105,109,101,95,112,117,116,69,0,78,83,116,51,95,95,49,49,56,95,95,116,105,109,101,95,103,101,116,95,115,116,111,114,97,103,101,73,119,69,69,0,78,83,116,51,95,95,49,49,48,95,95,116,105,109,101,95,103,101,116,69,0,78,83,116,51,95,95,49,49,56,95,95,116,105,109,101,95,103,101,116,95,115,116,111,114,97,103,101,73,99,69,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,119,69,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,99,69,69,0,78,83,116,51,95,95,49,57,116,105,109,101,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,112,117,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,103,101,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,50,99,111,100,101,99,118,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,99,116,121,112,101,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,53,95,95,116,105,109,101,95,103,101,116,95,116,101,109,112,73,119,69,69,0,78,83,116,51,95,95,49,49,53,95,95,116,105,109,101,95,103,101,116,95,116,101,109,112,73,99,69,69,0,78,83,116,51,95,95,49,49,49,114,101,103,101,120,95,101,114,114,111,114,69,0,85,110,107,110,111,119,110,32,101,114,114,111,114,32,116,121,112,101,0,65,110,32,101,109,112,116,121,32,114,101,103,101,120,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,116,104,101,32,80,79,83,73,88,32,103,114,97,109,109,97,114,46,0,65,110,32,105,110,118,97,108,105,100,32,114,101,103,101,120,32,103,114,97,109,109,97,114,32,104,97,115,32,98,101,101,110,32,114,101,113,117,101,115,116,101,100,46,0,84,104,101,114,101,32,119,97,115,32,105,110,115,117,102,102,105,99,105,101,110,116,32,109,101,109,111,114,121,32,116,111,32,100,101,116,101,114,109,105,110,101,32,119,104,101,116,104,101,114,32,116,104,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,99,111,117,108,100,32,109,97,116,99,104,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,99,104,97,114,97,99,116,101,114,32,115,101,113,117,101,110,99,101,46,0,84,104,101,32,99,111,109,112,108,101,120,105,116,121,32,111,102,32,97,110,32,97,116,116,101,109,112,116,101,100,32,109,97,116,99,104,32,97,103,97,105,110,115,116,32,97,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,101,120,99,101,101,100,101,100,32,97,32,112,114,101,45,115,101,116,32,108,101,118,101,108,46,0,79,110,101,32,111,102,32,42,63,43,123,32,119,97,115,32,110,111,116,32,112,114,101,99,101,100,101,100,32,98,121,32,97,32,118,97,108,105,100,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,46,0,84,104,101,114,101,32,119,97,115,32,105,110,115,117,102,102,105,99,105,101,110,116,32,109,101,109,111,114,121,32,116,111,32,99,111,110,118,101,114,116,32,116,104,101,32,101,120,112,114,101,115,115,105,111,110,32,105,110,116,111,32,97,32,102,105,110,105,116,101,32,115,116,97,116,101,32,109,97,99,104,105,110,101,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,97,110,32,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,114,97,110,103,101,44,32,115,117,99,104,32,97,115,32,91,98,45,97,93,32,105,110,32,109,111,115,116,32,101,110,99,111,100,105,110,103,115,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,97,110,32,105,110,118,97,108,105,100,32,114,97,110,103,101,32,105,110,32,97,32,123,125,32,101,120,112,114,101,115,115,105,111,110,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,109,105,115,109,97,116,99,104,101,100,32,123,32,97,110,100,32,125,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,109,105,115,109,97,116,99,104,101,100,32,40,32,97,110,100,32,41,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,109,105,115,109,97,116,99,104,101,100,32,91,32,97,110,100,32,93,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,97,110,32,105,110,118,97,108,105,100,32,98,97,99,107,32,114,101,102,101,114,101,110,99,101,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,97,110,32,105,110,118,97,108,105,100,32,101,115,99,97,112,101,100,32,99,104,97,114,97,99,116,101,114,44,32,111,114,32,97,32,116,114,97,105,108,105,110,103,32,101,115,99,97,112,101,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,97,110,32,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,110,97,109,101,46,0,84,104,101,32,101,120,112,114,101,115,115,105,111,110,32,99,111,110,116,97,105,110,101,100,32,97,110,32,105,110,118,97,108,105,100,32,99,111,108,108,97,116,105,110,103,32,101,108,101,109,101,110,116,32,110,97,109,101,46,0,97,108,110,117,109,0,97,108,112,104,97,0,98,108,97,110,107,0,99,110,116,114,108,0,100,105,103,105,116,0,103,114,97,112,104,0,108,111,119,101,114,0,112,114,105,110,116,0,112,117,110,99,116,0,115,112,97,99,101,0,117,112,112,101,114,0,120,100,105,103,105,116,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,78,85,76,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,97,108,101,114,116,0,97,109,112,101,114,115,97,110,100,0,97,112,111,115,116,114,111,112,104,101,0,97,115,116,101,114,105,115,107,0,98,97,99,107,115,108,97,115,104,0,98,97,99,107,115,112,97,99,101,0,99,97,114,114,105,97,103,101,45,114,101,116,117,114,110,0,99,105,114,99,117,109,102,108,101,120,0,99,105,114,99,117,109,102,108,101,120,45,97,99,99,101,110,116,0,99,111,108,111,110,0,99,111,109,109,97,0,99,111,109,109,101,114,99,105,97,108,45,97,116,0,100,111,108,108,97,114,45,115,105,103,110,0,101,105,103,104,116,0,101,113,117,97,108,115,45,115,105,103,110,0,101,120,99,108,97,109,97,116,105,111,110,45,109,97,114,107,0,102,105,118,101,0,102,111,114,109,45,102,101,101,100,0,102,111,117,114,0,102,117,108,108,45,115,116,111,112,0,103,0,103,114,97,118,101,45,97,99,99,101,110,116,0,103,114,101,97,116,101,114,45,116,104,97,110,45,115,105,103,110,0,104,121,112,104,101,110,0,104,121,112,104,101,110,45,109,105,110,117,115,0,107,0,108,101,102,116,45,98,114,97,99,101,0,108,101,102,116,45,99,117,114,108,121,45,98,114,97,99,107,101,116,0,108,101,102,116,45,112,97,114,101,110,116,104,101,115,105,115,0,108,101,102,116,45,115,113,117,97,114,101,45,98,114,97,99,107,101,116,0,108,101,115,115,45,116,104,97,110,45,115,105,103,110,0,108,111,119,45,108,105,110,101,0,110,0,110,101,119,108,105,110,101,0,110,105,110,101,0,110,117,109,98,101,114,45,115,105,103,110,0,111,0,111,110,101,0,112,0,112,101,114,99,101,110,116,45,115,105,103,110,0,112,101,114,105,111,100,0,112,108,117,115,45,115,105,103,110,0,113,0,113,117,101,115,116,105,111,110,45,109,97,114,107,0,113,117,111,116,97,116,105,111,110,45,109,97,114,107,0,114,0,114,101,118,101,114,115,101,45,115,111,108,105,100,117,115,0,114,105,103,104,116,45,98,114,97,99,101,0,114,105,103,104,116,45,99,117,114,108,121,45,98,114,97,99,107,101,116,0,114,105,103,104,116,45,112,97,114,101,110,116,104,101,115,105,115,0,114,105,103,104,116,45,115,113,117,97,114,101,45,98,114,97,99,107,101,116,0,115,101,109,105,99,111,108,111,110,0,115,101,118,101,110,0,115,105,120,0,115,108,97,115,104,0,115,111,108,105,100,117,115,0,116,97,98,0,116,104,114,101,101,0,116,105,108,100,101,0,116,119,111,0,117,0,117,110,100,101,114,115,99,111,114,101,0,118,101,114,116,105,99,97,108,45,108,105,110,101,0,118,101,114,116,105,99],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+322768);allocate([97,108,45,116,97,98,0,122,0,122,101,114,111,0,78,83,116,51,95,95,49,49,50,115,116,114,115,116,114,101,97,109,98,117,102,69,0,78,83,116,51,95,95,49,49,48,105,115,116,114,115,116,114,101,97,109,69,0,78,83,116,51,95,95,49,49,48,111,115,116,114,115,116,114,101,97,109,69,0,78,83,116,51,95,95,49,57,115,116,114,115,116,114,101,97,109,69,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+333008);var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.buffer.byteLength:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&146)>>1}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:(function(flags){flags&=~32768;flags&=~524288;if(flags in NODEFS.flagsToPermissionStringMap){return NODEFS.flagsToPermissionStringMap[flags]}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsToPermissionString(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;var nbuffer=new Buffer(length);var res;try{res=fs.readSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(res>0){for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var _stdin=allocate(1,"i32*",ALLOC_STATIC);var _stdout=allocate(1,"i32*",ALLOC_STATIC);var _stderr=allocate(1,"i32*",ALLOC_STATIC);var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if((flags&2097155)!==0||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}var mounts=FS.getMounts(FS.root.mount);var completed=0;function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=mounts.length){callback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdev:(function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){if(err===ERRNO_CODES.EISDIR)err=ERRNO_CODES.EPERM;throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module["printErr"]("read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream}),close:(function(stream){if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)}),munmap:(function(stream){return 0}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret}),writeFile:(function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";opts.encoding=opts.encoding||"utf8";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var stream=FS.open(path,opts.flags,opts.mode);if(opts.encoding==="utf8"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,0,opts.canOwn)}else if(opts.encoding==="binary"){FS.write(stream,data,0,data.length,0,opts.canOwn)}FS.close(stream)}),cwd:(function(){return FS.currentPath}),chdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path}),createDefaultDirectories:(function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")}),createDefaultDevices:(function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:(function(){return 0}),write:(function(stream,buffer,offset,length,pos){return length})});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto!=="undefined"){var randomBuffer=new Uint8Array(1);random_device=(function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]})}else if(ENVIRONMENT_IS_NODE){random_device=(function(){return require("crypto").randomBytes(1)[0]})}else{random_device=(function(){return Math.random()*256|0})}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")}),createSpecialDirectories:(function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:(function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:(function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:(function(){return stream.path})}};ret.parent=ret;return ret})};return node})},{},"/proc/self/fd")}),createStandardStreams:(function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");assert(stdin.fd===0,"invalid handle for stdin ("+stdin.fd+")");var stdout=FS.open("/dev/stdout","w");assert(stdout.fd===1,"invalid handle for stdout ("+stdout.fd+")");var stderr=FS.open("/dev/stderr","w");assert(stderr.fd===2,"invalid handle for stderr ("+stderr.fd+")")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=(function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}});this.setErrno(errno);this.message=ERRNO_MESSAGES[errno]};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}}),init:(function(input,output,error){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperty(lazyArray,"length",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})});Object.defineProperty(lazyArray,"chunkSize",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperty(node,"usedBytes",{get:(function(){return this.contents.length})});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);ret=ret.slice(0,Math.max(0,bufsize));writeStringToMemory(ret,buf,true);return ret.length}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall77(which,varargs){SYSCALLS.varargs=varargs;try{var who=SYSCALLS.get(),usage=SYSCALLS.get();_memset(usage,0,136);HEAP32[usage>>2]=1;HEAP32[usage+4>>2]=2;HEAP32[usage+8>>2]=3;HEAP32[usage+12>>2]=4;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var Sockets={BUFFER_SIZE:10240,MAX_BUFFER_SIZE:10485760,nextFd:1,fds:{},nextport:1,maxport:65535,peer:null,connections:{},portmap:{},localAddr:4261412874,addrPool:[33554442,50331658,67108874,83886090,100663306,117440522,134217738,150994954,167772170,184549386,201326602,218103818,234881034]};function __inet_pton4_raw(str){var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0}var _htons=undefined;function __inet_pton6_raw(str){var words;var w,offset,z,i;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.indexOf("::")===0){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=parseInt(words[words.length-4])+parseInt(words[words.length-3])*256;words[words.length-3]=parseInt(words[words.length-2])+parseInt(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255)}var _ntohs=undefined;function __inet_ntop6_raw(ints){var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=__inet_ntop4_raw(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=__inet_pton6_raw(addr);HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);HEAP32[sa+4>>2]=0;HEAP32[sa+24>>2]=0;break;default:return{errno:ERRNO_CODES.EAFNOSUPPORT}}return{}}function _getaddrinfo(node,service,hint,out){var addrs=[];var canon=null;var addr=0;var port=0;var flags=0;var family=0;var type=0;var proto=0;var ai,last;function allocaddrinfo(family,type,proto,canon,addr,port){var sa,salen,ai;var res;salen=family===10?28:16;addr=family===10?__inet_ntop6_raw(addr):__inet_ntop4_raw(addr);sa=_malloc(salen);res=__write_sockaddr(sa,family,addr,port);assert(!res.errno);ai=_malloc(32);HEAP32[ai+4>>2]=family;HEAP32[ai+8>>2]=type;HEAP32[ai+12>>2]=proto;if(canon){HEAP32[ai+24>>2]=canon}HEAP32[ai+20>>2]=sa;if(family===10){HEAP32[ai+16>>2]=28}else{HEAP32[ai+16>>2]=16}HEAP32[ai+28>>2]=0;return ai}if(hint){flags=HEAP32[hint>>2];family=HEAP32[hint+4>>2];type=HEAP32[hint+8>>2];proto=HEAP32[hint+12>>2]}if(type&&!proto){proto=type===2?17:6}if(!type&&proto){type=proto===17?2:1}if(proto===0){proto=6}if(type===0){type=1}if(!node&&!service){return-2}if(flags&~(1|2|4|1024|8|16|32)){return-1}if(hint!==0&&HEAP32[hint>>2]&2&&!node){return-1}if(flags&32){return-2}if(type!==0&&type!==1&&type!==2){return-7}if(family!==0&&family!==2&&family!==10){return-6}if(service){service=Pointer_stringify(service);port=parseInt(service,10);if(isNaN(port)){if(flags&1024){return-2}return-8}}if(!node){if(family===0){family=2}if((flags&1)===0){if(family===2){addr=_htonl(2130706433)}else{addr=[0,0,0,1]}}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAP32[out>>2]=ai;return 0}node=Pointer_stringify(node);addr=__inet_pton4_raw(node);if(addr!==null){if(family===0||family===2){family=2}else if(family===10&&flags&8){addr=[0,0,_htonl(65535),addr];family=10}else{return-2}}else{addr=__inet_pton6_raw(node);if(addr!==null){if(family===0||family===10){family=10}else{return-2}}}if(addr!=null){ai=allocaddrinfo(family,type,proto,node,addr,port);HEAP32[out>>2]=ai;return 0}if(flags&4){return-2}node=DNS.lookup_name(node);addr=__inet_pton4_raw(node);if(family===0){family=2}else if(family===10){addr=[0,0,_htonl(65535),addr]}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAP32[out>>2]=ai;return 0}var _UItoF=true;var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0){if(info.destructor){Runtime.dynCall("vi",info.destructor,[ptr])}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___cxa_decrement_exception_refcount(ptr){EXCEPTIONS.decRef(EXCEPTIONS.deAdjust(ptr))}var _UItoD=true;function _posix_spawn(){Module["printErr"]("missing function: posix_spawn");abort(-1)}function _pthread_mutex_lock(){}function ___cxa_increment_exception_refcount(ptr){EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr))}function ___syscall193(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),zero=SYSCALLS.getZero(),length=SYSCALLS.get64();FS.truncate(path,length);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall192(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get(),prot=SYSCALLS.get(),flags=SYSCALLS.get(),fd=SYSCALLS.get(),off=SYSCALLS.get();off<<=12;var ptr;var allocated=false;if(fd===-1){ptr=_malloc(len);if(!ptr)return-ERRNO_CODES.ENOMEM;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-ERRNO_CODES.EBADF;var res=FS.mmap(info,HEAPU8,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,flags:flags};return ptr}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _kill(pid,sig){___setErrNo(ERRNO_CODES.EPERM);return-1}function _free(){}Module["_free"]=_free;function ___cxa_free_exception(ptr){try{return _free(ptr)}catch(e){}}function ___cxa_end_catch(){if(___cxa_end_catch.rethrown){___cxa_end_catch.rethrown=false;return}asm["setThrew"](0);var ptr=EXCEPTIONS.caught.pop();if(ptr){EXCEPTIONS.decRef(EXCEPTIONS.deAdjust(ptr));EXCEPTIONS.last=0}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall196(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall202(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall199(){return ___syscall202.apply(null,arguments)}function ___syscall198(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),owner=SYSCALLS.get(),group=SYSCALLS.get();FS.chown(path,owner,group);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _DtoILow=true;var EmterpreterAsync=undefined;function ___syscall118(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall296(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),mode=SYSCALLS.get();path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doMkdir(path,mode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);Runtime.stackRestore(ret)}function _posix_spawn_file_actions_init(){Module["printErr"]("missing function: posix_spawn_file_actions_init");abort(-1)}function ___syscall295(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();path=SYSCALLS.calculateAt(dirfd,path);return FS.open(path,flags,mode).fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall298(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),owner=SYSCALLS.get(),group=SYSCALLS.get(),flags=SYSCALLS.get();assert(flags===0);path=SYSCALLS.calculateAt(dirfd,path);FS.chown(path,owner,group);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall299(which,varargs){SYSCALLS.varargs=varargs;try{abort("futimesat is obsolete")}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall114(which,varargs){SYSCALLS.varargs=varargs;try{abort("cannot wait on child processes")}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_mutex_init(){}function ___syscall218(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.ENOSYS}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall219(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall51(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.ENOSYS}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_mutex_trylock(){return 0}function ___syscall211(which,varargs){SYSCALLS.varargs=varargs;try{var ruid=SYSCALLS.get(),euid=SYSCALLS.get(),suid=SYSCALLS.get();HEAP32[ruid>>2]=0;HEAP32[euid>>2]=0;HEAP32[suid>>2]=0;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21506:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};function ___syscall57(which,varargs){SYSCALLS.varargs=varargs;try{var pid=SYSCALLS.get(),pgid=SYSCALLS.get();if(pid&&pid!==PROCINFO.pid)return-ERRNO_CODES.ESRCH;if(pgid&&pgid!==PROCINFO.pgid)return-ERRNO_CODES.EPERM;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___cxa_current_primary_exception(){var ret=EXCEPTIONS.caught[EXCEPTIONS.caught.length-1]||0;if(ret)EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ret));return ret}function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}function ___syscall39(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),mode=SYSCALLS.get();return SYSCALLS.doMkdir(path,mode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall38(which,varargs){SYSCALLS.varargs=varargs;try{var old_path=SYSCALLS.getStr(),new_path=SYSCALLS.getStr();FS.rename(old_path,new_path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var PTHREAD_SPECIFIC={};function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function ___muldc3(){Module["printErr"]("missing function: __muldc3");abort(-1)}function ___syscall33(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),amode=SYSCALLS.get();return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall("vi",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}function ___syscall36(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall34(which,varargs){SYSCALLS.varargs=varargs;try{var inc=SYSCALLS.get();return-ERRNO_CODES.EPERM}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;function _utime(path,times){var time;if(times){var offset=4;time=HEAP32[times+offset>>2];time*=1e3}else{time=Date.now()}path=Pointer_stringify(path);try{FS.utime(path,time,time);return 0}catch(e){FS.handleFSError(e);return-1}}function _execl(){___setErrNo(ERRNO_CODES.ENOEXEC);return-1}function ___syscall191(which,varargs){SYSCALLS.varargs=varargs;try{var resource=SYSCALLS.get(),rlim=SYSCALLS.get();HEAP32[rlim>>2]=-1;HEAP32[rlim+4>>2]=-1;HEAP32[rlim+8>>2]=-1;HEAP32[rlim+12>>2]=-1;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___block_all_sigs(){Module["printErr"]("missing function: __block_all_sigs");abort(-1)}Module["_memmove"]=_memmove;function ___cxa_guard_abort(){}function _pthread_setcancelstate(){return 0}var _emscripten_preinvoke=true;function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(ptr));throw ptr}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(asm["setTempRet0"](0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(asm["setTempRet0"](0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(asm["setTempRet0"](typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(asm["setTempRet0"](throwntype),thrown)|0}function ___gxx_personality_v0(){}function _wait(stat_loc){___setErrNo(ERRNO_CODES.ECHILD);return-1}function _waitpid(){return _wait.apply(null,arguments)}function _pthread_cond_wait(){return 0}function ___cxa_rethrow(){___cxa_end_catch.rethrown=true;var ptr=EXCEPTIONS.caught.pop();EXCEPTIONS.last=ptr;throw ptr}function ___syscall207(which,varargs){SYSCALLS.varargs=varargs;try{var fd=SYSCALLS.get(),owner=SYSCALLS.get(),group=SYSCALLS.get();FS.fchown(fd,owner,group);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall168(which,varargs){SYSCALLS.varargs=varargs;try{var fds=SYSCALLS.get(),nfds=SYSCALLS.get(),timeout=SYSCALLS.get();var nonzero=0;for(var i=0;i>2];var events=HEAP16[pollfd+4>>1];var mask=32;var stream=FS.getStream(fd);if(stream){mask=SYSCALLS.DEFAULT_POLLMASK;if(stream.stream_ops.poll){mask=stream.stream_ops.poll(stream)}}mask&=events|8|16;if(mask)nonzero++;HEAP16[pollfd+6>>1]=mask}return nonzero}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall200(){return ___syscall202.apply(null,arguments)}function ___syscall214(which,varargs){SYSCALLS.varargs=varargs;try{var uid=SYSCALLS.get();if(uid!==0)return-ERRNO_CODES.EPERM;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall203(){return ___syscall214.apply(null,arguments)}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall209(){return ___syscall211.apply(null,arguments)}function ___syscall40(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.rmdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall194(which,varargs){SYSCALLS.varargs=varargs;try{var fd=SYSCALLS.get(),zero=SYSCALLS.getZero(),length=SYSCALLS.get64();FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_get_now(){if(!_emscripten_get_now.actual){if(ENVIRONMENT_IS_NODE){_emscripten_get_now.actual=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now.actual=dateNow}else if(typeof self==="object"&&self["performance"]&&typeof self["performance"]["now"]==="function"){_emscripten_get_now.actual=function _emscripten_get_now_actual(){return self["performance"]["now"]()}}else if(typeof performance==="object"&&typeof performance["now"]==="function"){_emscripten_get_now.actual=function _emscripten_get_now_actual(){return performance["now"]()}}else{_emscripten_get_now.actual=Date.now}}return _emscripten_get_now.actual()}function _emscripten_get_now_is_monotonic(){return ENVIRONMENT_IS_NODE||typeof dateNow!=="undefined"||(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if(clk_id===1&&_emscripten_get_now_is_monotonic()){now=_emscripten_get_now()}else{___setErrNo(ERRNO_CODES.EINVAL);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function _endgrent(){Module["printErr"]("missing function: endgrent");abort(-1)}function _setgrent(){Module["printErr"]("missing function: setgrent");abort(-1)}function ___syscall20(which,varargs){SYSCALLS.varargs=varargs;try{return PROCINFO.pid}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["_memset"]=_memset;var _BDtoILow=true;var _logf=Math_log;function _pthread_cond_signal(){}function ___restore_sigs(){Module["printErr"]("missing function: __restore_sigs");abort(-1)}function ___lock(){}function _pthread_mutexattr_init(){}function ___syscall300(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),buf=SYSCALLS.get(),flags=SYSCALLS.get();var nofollow=flags&256;flags=flags&~256;assert(!flags,flags);path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall204(){return ___syscall214.apply(null,arguments)}function _inet_addr(ptr){var addr=__inet_pton4_raw(Pointer_stringify(ptr));if(addr===null){return-1}return addr}function ___syscall272(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){setTimeout(Browser.mainLoop.runner,value)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(!window["setImmediate"]){var setImmediates=[];var emscriptenMainLoopMessageId="__emcc";function Browser_setImmediate_messageHandler(event){if(event.source===window&&event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}}window.addEventListener("message",Browser_setImmediate_messageHandler,true);window["setImmediate"]=function Browser_emulated_setImmediate(func){setImmediates.push(func);window.postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){window["setImmediate"](Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method==="timeout"&&Module.ctx){Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter((function(){if(typeof arg!=="undefined"){Runtime.dynCall("vi",func,[arg])}else{Runtime.dynCall("v",func)}}));if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var canvas=Module["canvas"];function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(function(){});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor="black"}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.cancelFullScreen=document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["webkitCancelFullScreen"]||document["msExitFullscreen"]||document["exitFullscreen"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullScreenChange,false);document.addEventListener("mozfullscreenchange",fullScreenChange,false);document.addEventListener("webkitfullscreenchange",fullScreenChange,false);document.addEventListener("MSFullscreenChange",fullScreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer["requestFullScreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullScreen"]?(function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module["noExitRuntime"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module["noExitRuntime"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)}),getMovementX:(function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0}),getMovementY:(function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency("al "+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}}));if(!noRunDep)addRunDependency("al "+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>0]){HEAP8[variable>>0]=1;return 1}return 0}var _floorf=Math_floor;var _atan2=Math_atan2;function ___cxa_begin_catch(ptr){__ZSt18uncaught_exceptionv.uncaught_exception--;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr}var _sinf=Math_sin;function __read_sockaddr(sa,salen){var family=HEAP16[sa>>1];var port=_ntohs(HEAP16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:ERRNO_CODES.EINVAL}}addr=HEAP32[sa+4>>2];addr=__inet_ntop4_raw(addr);break;case 10:if(salen!==28){return{errno:ERRNO_CODES.EINVAL}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=__inet_ntop6_raw(addr);break;default:return{errno:ERRNO_CODES.EAFNOSUPPORT}}return{family:family,addr:addr,port:port}}function _getnameinfo(sa,salen,node,nodelen,serv,servlen,flags){var info=__read_sockaddr(sa,salen);if(info.errno){return-6}var port=info.port;var addr=info.addr;if(node&&nodelen){var lookup;if(flags&1||!(lookup=DNS.lookup_addr(addr))){if(flags&8){return-2}}else{addr=lookup}if(addr.length>=nodelen){return-12}writeStringToMemory(addr,node)}if(serv&&servlen){port=""+port;if(port.length>servlen){return-12}writeStringToMemory(port,serv)}return 0}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall4(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.write(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall297(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),mode=SYSCALLS.get(),dev=SYSCALLS.get();path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doMknod(path,mode,dev)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall9(which,varargs){SYSCALLS.varargs=varargs;try{var oldpath=SYSCALLS.get(),newpath=SYSCALLS.get();return-ERRNO_CODES.EMLINK}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _cos=Math_cos;function ___cxa_call_unexpected(exception){Module.printErr("Unexpected exception thrown, this is not properly supported - aborting");ABORT=true;throw exception}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(Runtime.stackSave());return self.LLVM_SAVEDSTACKS.length-1}function ___syscall(){Module["printErr"]("missing function: __syscall");abort(-1)}function ___syscall42(){return ___syscall51.apply(null,arguments)}function ___syscall148(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall308(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.ENOSYS}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall265(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function ___syscall142(which,varargs){SYSCALLS.varargs=varargs;try{var nfds=SYSCALLS.get(),readfds=SYSCALLS.get(),writefds=SYSCALLS.get(),exceptfds=SYSCALLS.get(),timeout=SYSCALLS.get();assert(nfds<=64,"nfds must be less than or equal to 64");assert(!exceptfds,"exceptfds not supported");var total=0;var srcReadLow=readfds?HEAP32[readfds>>2]:0,srcReadHigh=readfds?HEAP32[readfds+4>>2]:0;var srcWriteLow=writefds?HEAP32[writefds>>2]:0,srcWriteHigh=writefds?HEAP32[writefds+4>>2]:0;var srcExceptLow=exceptfds?HEAP32[exceptfds>>2]:0,srcExceptHigh=exceptfds?HEAP32[exceptfds+4>>2]:0;var dstReadLow=0,dstReadHigh=0;var dstWriteLow=0,dstWriteHigh=0;var dstExceptLow=0,dstExceptHigh=0;var allLow=(readfds?HEAP32[readfds>>2]:0)|(writefds?HEAP32[writefds>>2]:0)|(exceptfds?HEAP32[exceptfds>>2]:0);var allHigh=(readfds?HEAP32[readfds+4>>2]:0)|(writefds?HEAP32[writefds+4>>2]:0)|(exceptfds?HEAP32[exceptfds+4>>2]:0);function check(fd,low,high,val){return fd<32?low&val:high&val}for(var fd=0;fd>2]=dstReadLow;HEAP32[readfds+4>>2]=dstReadHigh}if(writefds){HEAP32[writefds>>2]=dstWriteLow;HEAP32[writefds+4>>2]=dstWriteHigh}if(exceptfds){HEAP32[exceptfds>>2]=dstExceptLow;HEAP32[exceptfds+4>>2]=dstExceptHigh}return total}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall305(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),buf=SYSCALLS.get(),bufsize=SYSCALLS.get();path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doReadlink(path,buf,bufsize)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall306(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),mode=SYSCALLS.get(),flags=SYSCALLS.get();assert(flags===0);path=SYSCALLS.calculateAt(dirfd,path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall268(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),size=SYSCALLS.get(),buf=SYSCALLS.get();assert(size===64);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall147(which,varargs){SYSCALLS.varargs=varargs;try{var pid=SYSCALLS.get();if(pid&&pid!==PROCINFO.pid)return-ERRNO_CODES.ESRCH;return PROCINFO.sid}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall144(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get(),flags=SYSCALLS.get();var info=SYSCALLS.mappings[addr];if(!info)return 0;SYSCALLS.doMsync(addr,FS.getStream(info.fd),len,info.flags);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var ___tm_timezone=allocate(intArrayFromString("GMT"),"i8",ALLOC_STATIC);function _gmtime_r(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();HEAP32[tmPtr+36>>2]=0;HEAP32[tmPtr+32>>2]=0;var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+40>>2]=___tm_timezone;return tmPtr}Module["_i64Subtract"]=_i64Subtract;var _fabsf=Math_abs;Module["_i64Add"]=_i64Add;var _cosf=Math_cos;function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr}function _pthread_join(){}var _FtoIHigh=true;var _fabsl=Math_abs;var _emscripten_landingpad=true;function ___syscall1(which,varargs){SYSCALLS.varargs=varargs;try{var status=SYSCALLS.get();Module["exit"](status);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _llvm_eh_typeid_for(type){return type}function _pthread_create(){return 11}var _sqrtf=Math_sqrt;var _log=Math_log;var _emscripten_postinvoke=true;function ___syscall205(which,varargs){SYSCALLS.varargs=varargs;try{var size=SYSCALLS.get(),list=SYSCALLS.get();if(size<1)return-ERRNO_CODES.EINVAL;HEAP32[list>>2]=0;return 1}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function ___syscall302(which,varargs){SYSCALLS.varargs=varargs;try{var olddirfd=SYSCALLS.get(),oldpath=SYSCALLS.getStr(),newdirfd=SYSCALLS.get(),newpath=SYSCALLS.getStr();oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_cond_init(){}function ___syscall94(which,varargs){SYSCALLS.varargs=varargs;try{var fd=SYSCALLS.get(),mode=SYSCALLS.get();FS.fchmod(fd,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall97(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.EPERM}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall96(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall91(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get();var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);SYSCALLS.doMsync(addr,stream,len,info.flags);FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall153(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall150(){return ___syscall153.apply(null,arguments)}function ___syscall152(){return ___syscall153.apply(null,arguments)}function ___syscall151(){return ___syscall153.apply(null,arguments)}function _pthread_cond_timedwait(){return 0}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _posix_spawn_file_actions_destroy(){Module["printErr"]("missing function: posix_spawn_file_actions_destroy");abort(-1)}function _fork(){___setErrNo(ERRNO_CODES.EAGAIN);return-1}Module["_bitshift64Lshr"]=_bitshift64Lshr;var _BDtoIHigh=true;function _sched_yield(){return 0}function _pthread_cond_broadcast(){return 0}var _environ=allocate(1,"i32*",ALLOC_STATIC);var ___environ=_environ;function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C";ENV["_"]=Module["thisProgram"];poolPtr=allocate(TOTAL_ENV_SIZE,"i8",ALLOC_STATIC);envPtr=allocate(MAX_ENV_VALUES*4,"i8*",ALLOC_STATIC);HEAP32[envPtr>>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]==="string"){var line=key+"="+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocate(intArrayFromString(ENV[name]),"i8",ALLOC_NORMAL);return _getenv.ret}function ___syscall212(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),owner=SYSCALLS.get(),group=SYSCALLS.get();FS.chown(path,owner,group);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _pthread_mutex_unlock(){}function __Exit(){Module["printErr"]("missing function: _Exit");abort(-1)}var _llvm_pow_f64=Math_pow;function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}function _pthread_mutexattr_settype(){}function ___syscall29(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.EINTR}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _tanf=Math_tan;function ___syscall163(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.ENOMEM}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _BItoD=true;function _pthread_mutex_destroy(){}function ___syscall85(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get(),bufsize=SYSCALLS.get();return SYSCALLS.doReadlink(path,buf,bufsize)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall3(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.read(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall121(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.EPERM}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall122(which,varargs){SYSCALLS.varargs=varargs;try{var buf=SYSCALLS.get();if(!buf)return-ERRNO_CODES.EFAULT;var layout={"sysname":0,"nodename":65,"domainname":325,"machine":260,"version":195,"release":130,"__size__":390};function copyString(element,value){var offset=layout[element];writeAsciiToMemory(value,buf+offset)}copyString("sysname","Emscripten");copyString("nodename","emscripten");copyString("release","1.0");copyString("version","#1");copyString("machine","x86-JS");return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["_llvm_bswap_i32"]=_llvm_bswap_i32;function ___syscall125(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall83(which,varargs){SYSCALLS.varargs=varargs;try{var target=SYSCALLS.getStr(),linkpath=SYSCALLS.getStr();FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___cxa_guard_release(){}function ___syscall269(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),size=SYSCALLS.get(),buf=SYSCALLS.get();return ___syscall([268,0,size,buf],0)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall320(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),times=SYSCALLS.get(),flags=SYSCALLS.get();assert(flags===0);path=SYSCALLS.calculateAt(dirfd,path);var seconds=HEAP32[times>>2];var nanoseconds=HEAP32[times+4>>2];var atime=seconds*1e3+nanoseconds/(1e3*1e3);times+=8;seconds=HEAP32[times>>2];nanoseconds=HEAP32[times+4>>2];var mtime=seconds*1e3+nanoseconds/(1e3*1e3);FS.utime(path,atime,mtime);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _expf=Math_exp;function ___syscall324(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),mode=SYSCALLS.get(),offset=SYSCALLS.get64(),len=SYSCALLS.get64();assert(mode===0);FS.allocate(stream,offset,len);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall64(which,varargs){SYSCALLS.varargs=varargs;try{return PROCINFO.ppid}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall65(which,varargs){SYSCALLS.varargs=varargs;try{return PROCINFO.pgid}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall66(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall60(which,varargs){SYSCALLS.varargs=varargs;try{var mask=SYSCALLS.get();var old=SYSCALLS.umask;SYSCALLS.umask=mask;return old}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___assert_fail(condition,filename,line,func){ABORT=true;throw"Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"]+" at "+stackTrace()}function ___syscall63(which,varargs){SYSCALLS.varargs=varargs;try{var old=SYSCALLS.getStreamFromFD(),suggestFD=SYSCALLS.get();if(old.fd===suggestFD)return suggestFD;return SYSCALLS.doDup(old.path,old.flags,suggestFD)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _SItoD=true;var _SItoF=true;function ___syscall75(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___wait(){Module["printErr"]("missing function: __wait");abort(-1)}var _DtoIHigh=true;function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]);return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?Pointer_stringify(tm_zone):""};var pattern=Pointer_stringify(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":(function(date){return WEEKDAYS[date.tm_wday].substring(0,3)}),"%A":(function(date){return WEEKDAYS[date.tm_wday]}),"%b":(function(date){return MONTHS[date.tm_mon].substring(0,3)}),"%B":(function(date){return MONTHS[date.tm_mon]}),"%C":(function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)}),"%d":(function(date){return leadingNulls(date.tm_mday,2)}),"%e":(function(date){return leadingSomething(date.tm_mday,2," ")}),"%g":(function(date){return getWeekBasedYear(date).toString().substring(2)}),"%G":(function(date){return getWeekBasedYear(date)}),"%H":(function(date){return leadingNulls(date.tm_hour,2)}),"%I":(function(date){return leadingNulls(date.tm_hour<13?date.tm_hour:date.tm_hour-12,2)}),"%j":(function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)}),"%m":(function(date){return leadingNulls(date.tm_mon+1,2)}),"%M":(function(date){return leadingNulls(date.tm_min,2)}),"%n":(function(){return"\n"}),"%p":(function(date){if(date.tm_hour>0&&date.tm_hour<13){return"AM"}else{return"PM"}}),"%S":(function(date){return leadingNulls(date.tm_sec,2)}),"%t":(function(){return"\t"}),"%u":(function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()||7}),"%U":(function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"}),"%V":(function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)}),"%Z":(function(date){return date.tm_zone}),"%%":(function(){return"%"})};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function ___syscall334(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get(),offset=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt,offset)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){Module["abort"]()}function _pthread_cond_destroy(){}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Runtime.dynCall("v",func);_pthread_once.seen[ptr]=1}var _tan=Math_tan;function ___syscall41(which,varargs){SYSCALLS.varargs=varargs;try{var old=SYSCALLS.getStreamFromFD();return FS.open(old.path,old.flags,0).fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _emscripten_resume=true;function ___unlock(){}function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var _fabs=Math_abs;var _floor=Math_floor;function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _posix_spawn_file_actions_adddup2(){Module["printErr"]("missing function: posix_spawn_file_actions_adddup2");abort(-1)}var _sqrt=Math_sqrt;function ___syscall133(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.chdir(stream.path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall132(which,varargs){SYSCALLS.varargs=varargs;try{var pid=SYSCALLS.get();if(pid&&pid!==PROCINFO.pid)return-ERRNO_CODES.ESRCH;return PROCINFO.pgid}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall331(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.ENOSYS}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall330(which,varargs){SYSCALLS.varargs=varargs;try{var old=SYSCALLS.getStreamFromFD(),suggestFD=SYSCALLS.get(),flags=SYSCALLS.get();assert(!flags);if(old.fd===suggestFD)return-ERRNO_CODES.EINVAL;return SYSCALLS.doDup(old.path,old.flags,suggestFD)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall333(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get(),offset=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt,offset)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _malloc(bytes){var ptr=Runtime.dynamicAlloc(bytes+8);return ptr+8&4294967288}Module["_malloc"]=_malloc;function ___cxa_allocate_exception(size){return _malloc(size)}var _sin=Math_sin;function ___cxa_pure_virtual(){ABORT=true;throw"Pure virtual function called!"}function ___cxa_rethrow_primary_exception(ptr){if(!ptr)return;EXCEPTIONS.caught.push(ptr);___cxa_rethrow()}var _exp=Math_exp;function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function ___clock_gettime(){return _clock_gettime.apply(null,arguments)}function ___syscall304(which,varargs){SYSCALLS.varargs=varargs;try{var target=SYSCALLS.get(),newdirfd=SYSCALLS.get(),linkpath=SYSCALLS.get();linkpath=SYSCALLS.calculateAt(newdirfd,linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall183(which,varargs){SYSCALLS.varargs=varargs;try{var buf=SYSCALLS.get(),size=SYSCALLS.get();if(size===0)return-ERRNO_CODES.EINVAL;var cwd=FS.cwd();if(size_sysconf(3)){___setErrNo(ERRNO_CODES.EINVAL);return-1}else{___setErrNo(ERRNO_CODES.EPERM);return-1}}function _llvm_fma_f64(){Module["printErr"]("missing function: llvm_fma_f64");abort(-1)}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall307(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),amode=SYSCALLS.get(),flags=SYSCALLS.get();assert(flags===0);path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___mulsc3(){Module["printErr"]("missing function: __mulsc3");abort(-1)}Module["_bitshift64Shl"]=_bitshift64Shl;function _setitimer(){throw"setitimer() is not implemented yet"}var SOCKFS={mount:(function(mount){Module["websocket"]=Module["websocket"]&&"object"===typeof Module["websocket"]?Module["websocket"]:{};Module["websocket"]._callbacks={};Module["websocket"]["on"]=(function(event,callback){if("function"===typeof callback){this._callbacks[event]=callback}return this});Module["websocket"].emit=(function(event,param){if("function"===typeof this._callbacks[event]){this._callbacks[event].call(this,param)}});return FS.createNode(null,"/",16384|511,0)}),createSocket:(function(family,type,protocol){var streaming=type==1;if(protocol){assert(streaming==(protocol==6))}var sock={family:family,type:type,protocol:protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node:node,flags:FS.modeStringToFlags("r+"),seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock}),getSocket:(function(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock}),stream_ops:{poll:(function(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)}),ioctl:(function(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)}),read:(function(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length}),write:(function(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)}),close:(function(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)})},nextname:(function(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return"socket["+SOCKFS.nextname.current++ +"]"}),websocket_sock_ops:{createPeer:(function(sock,addr,port){var ws;if(typeof addr==="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var runtimeConfig=Module["websocket"]&&"object"===typeof Module["websocket"];var url="ws:#".replace("#","//");if(runtimeConfig){if("string"===typeof Module["websocket"]["url"]){url=Module["websocket"]["url"]}}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}var subProtocols="binary";if(runtimeConfig){if("string"===typeof Module["websocket"]["subprotocol"]){subProtocols=Module["websocket"]["subprotocol"]}}subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);var opts=ENVIRONMENT_IS_NODE?{"protocol":subProtocols.toString()}:subProtocols;var WebSocket=ENVIRONMENT_IS_NODE?require("ws"):window["WebSocket"];ws=new WebSocket(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH)}}var peer={addr:addr,port:port,socket:ws,dgram_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!=="undefined"){peer.dgram_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer}),getPeer:(function(sock,addr,port){return sock.peers[addr+":"+port]}),addPeer:(function(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer}),removePeer:(function(sock,peer){delete sock.peers[peer.addr+":"+peer.port]}),handlePeerEvents:(function(sock,peer){var first=true;var handleOpen=(function(){Module["websocket"].emit("open",sock.stream.fd);try{var queued=peer.dgram_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.dgram_send_queue.shift()}}catch(e){peer.socket.close()}});function handleMessage(data){assert(typeof data!=="string"&&data.byteLength!==undefined);data=new Uint8Array(data);var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data:data});Module["websocket"].emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",(function(data,flags){if(!flags.binary){return}handleMessage((new Uint8Array(data)).buffer)}));peer.socket.on("close",(function(){Module["websocket"].emit("close",sock.stream.fd)}));peer.socket.on("error",(function(error){sock.error=ERRNO_CODES.ECONNREFUSED;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}))}else{peer.socket.onopen=handleOpen;peer.socket.onclose=(function(){Module["websocket"].emit("close",sock.stream.fd)});peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=(function(error){sock.error=ERRNO_CODES.ECONNREFUSED;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}}),poll:(function(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=16}return mask}),ioctl:(function(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;default:return ERRNO_CODES.EINVAL}}),close:(function(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}var peers=Object.keys(sock.peers);for(var i=0;i>2]=sock.error;HEAP32[optlen>>2]=4;sock.error=null;return 0}}return-ERRNO_CODES.ENOPROTOOPT};case 16:{var sock=SYSCALLS.getSocketFromFD(),message=SYSCALLS.get(),flags=SYSCALLS.get();var iov=HEAP32[message+8>>2];var num=HEAP32[message+12>>2];var addr,port;var name=HEAP32[message>>2];var namelen=HEAP32[message+4>>2];if(name){var info=__read_sockaddr(name,namelen);if(info.errno)return-info.errno;port=info.port;addr=DNS.lookup_addr(info.addr)||info.addr}var total=0;for(var i=0;i>2]}var view=new Uint8Array(total);var offset=0;for(var i=0;i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];for(var j=0;j>0]}}return sock.sock_ops.sendmsg(sock,view,0,total,addr,port)};case 17:{var sock=SYSCALLS.getSocketFromFD(),message=SYSCALLS.get(),flags=SYSCALLS.get();var iov=HEAP32[message+8>>2];var num=HEAP32[message+12>>2];var total=0;for(var i=0;i>2]}var msg=sock.sock_ops.recvmsg(sock,total);if(!msg)return 0;var name=HEAP32[message>>2];if(name){var res=__write_sockaddr(name,sock.family,DNS.lookup_name(msg.addr),msg.port);assert(!res.errno)}var bytesRead=0;var bytesRemaining=msg.buffer.byteLength;for(var i=0;bytesRemaining>0&&i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];if(!iovlen){continue}var length=Math.min(iovlen,bytesRemaining);var buf=msg.buffer.subarray(bytesRead,bytesRead+length);HEAPU8.set(buf,iovbase+bytesRead);bytesRead+=length;bytesRemaining-=length}return bytesRead};default:abort("unsupported socketcall syscall "+call)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function ___syscall301(which,varargs){SYSCALLS.varargs=varargs;try{var dirfd=SYSCALLS.get(),path=SYSCALLS.getStr(),flags=SYSCALLS.get();assert(flags===0);path=SYSCALLS.calculateAt(dirfd,path);FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall340(which,varargs){SYSCALLS.varargs=varargs;try{var pid=SYSCALLS.get(),resource=SYSCALLS.get(),new_limit=SYSCALLS.get(),old_limit=SYSCALLS.get();if(old_limit){HEAP32[old_limit>>2]=-1;HEAP32[old_limit+4>>2]=-1;HEAP32[old_limit+8>>2]=-1;HEAP32[old_limit+12>>2]=-1}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_mutexattr_destroy(){}function _getgrent(){Module["printErr"]("missing function: getgrent");abort(-1)}function _llvm_trap(){abort("trap!")}var _FtoILow=true;function _pthread_self(){return 0}function _pthread_attr_getdetachstate(){Module["printErr"]("missing function: pthread_attr_getdetachstate");abort(-1)}function ___syscall303(which,varargs){SYSCALLS.varargs=varargs;try{return-ERRNO_CODES.EMLINK}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _llvm_nacl_atomic_cmpxchg_i32=undefined;function ___syscall220(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),dirp=SYSCALLS.get(),count=SYSCALLS.get();if(!stream.getdents){stream.getdents=FS.readdir(stream.path)}var pos=0;while(stream.getdents.length>0&&pos+268>2]=id;HEAP32[dirp+pos+4>>2]=stream.position;HEAP16[dirp+pos+8>>1]=268;HEAP8[dirp+pos+10>>0]=type;for(var i=0;i>0]=name.charCodeAt(i)}HEAP8[dirp+pos+(11+i)>>0]=0;pos+=268}return pos}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};___buildEnvironment(ENV);__ATINIT__.push((function(){SOCKFS.root=FS.mount(SOCKFS,{},null)}));STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE2147483648)return false;i=new a(newBuffer);j=new b(newBuffer);k=new c(newBuffer);l=new d(newBuffer);m=new e(newBuffer);n=new f(newBuffer);o=new g(newBuffer);p=new h(newBuffer);buffer=newBuffer;return true} -// EMSCRIPTEN_START_FUNCS -function og(a){a=a|0;var b=0;b=r;r=r+a|0;r=r+15&-16;return b|0}function pg(){return r|0}function qg(a){a=a|0;r=a}function rg(a,b){a=a|0;b=b|0;r=a;s=b}function sg(a,b){a=a|0;b=b|0;if(!x){x=a;y=b}}function tg(a){a=a|0;i[t>>0]=i[a>>0];i[t+1>>0]=i[a+1>>0];i[t+2>>0]=i[a+2>>0];i[t+3>>0]=i[a+3>>0]}function ug(a){a=a|0;i[t>>0]=i[a>>0];i[t+1>>0]=i[a+1>>0];i[t+2>>0]=i[a+2>>0];i[t+3>>0]=i[a+3>>0];i[t+4>>0]=i[a+4>>0];i[t+5>>0]=i[a+5>>0];i[t+6>>0]=i[a+6>>0];i[t+7>>0]=i[a+7>>0]}function vg(a){a=a|0;M=a}function wg(){return M|0}function xg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;e=r;r=r+160|0;f=e+136|0;g=e;h=g+56|0;i=g+4|0;k[g>>2]=20356;k[h>>2]=20376;x=0;xa(582,g+56|0,i|0);j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j;mab(h);Sc(m|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=20300;k[g+56>>2]=20320;x=0;va(1449,i|0);j=x;x=0;do if(!(j&1)){k[i>>2]=20392;n=g+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(583,i|0,f|0);o=x;x=0;if(o&1){o=Hc()|0;p=M;K2a(f);K2a(n);obb(i);q=p;s=o;break}K2a(f);x=0;nb(80,g|0,b|0,c|0,d|0);o=x;x=0;if(o&1){t=Hc()|0;u=M;k[g>>2]=20300;k[h>>2]=20320;k[i>>2]=20392;K2a(n);obb(i);mab(h);Sc(t|0)}x=0;xa(584,a|0,i|0);o=x;x=0;if(o&1){t=Hc()|0;u=M;k[g>>2]=20300;k[h>>2]=20320;k[i>>2]=20392;K2a(n);obb(i);mab(h);Sc(t|0)}else{k[g>>2]=20300;k[h>>2]=20320;k[i>>2]=20392;K2a(n);obb(i);mab(h);r=e;return}}else{n=Hc()|0;q=M;s=n}while(0);l=q;m=s;mab(h);Sc(m|0)}function yg(a){a=a|0;var b=0,c=0;k[a>>2]=20300;b=a+56|0;k[b>>2]=20320;c=a+4|0;k[c>>2]=20392;K2a(a+36|0);obb(c);mab(b);return}function zg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+80|0;d=c+56|0;e=c+44|0;f=c;g=c+32|0;h=c+24|0;iu(a,7);x=0;xa(585,d|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;i=M;j=b;xu(a);Sc(j|0)}b=k[d>>2]|0;l=d+4|0;if((b|0)==(l|0)){m=k[l>>2]|0;Yg(d,m);r=c;return}n=h+4|0;o=b;while(1){x=0;xa(586,e|0,k[o+20>>2]|0);b=x;x=0;if(b&1){p=6;break}x=0;b=Ta(475,a|0,e|0)|0;q=x;x=0;if(q&1){p=17;break}k[h>>2]=o+16;k[n>>2]=4;x=0;nb(81,g|0,h|0,2,0);q=x;x=0;if(q&1){p=17;break}x=0;xa(587,f|0,g|0);q=x;x=0;if(q&1){p=18;break}x=0;Ta(476,b|0,f|0)|0;b=x;x=0;if(b&1){p=19;break}xu(f);K2a(g);K2a(e);b=k[o+4>>2]|0;if(!b){q=o;while(1){s=k[q+8>>2]|0;if((k[s>>2]|0)==(q|0)){t=s;break}else q=s}}else{q=b;while(1){s=k[q>>2]|0;if(!s){t=q;break}else q=s}}if((t|0)==(l|0)){p=4;break}else o=t}if((p|0)==4){m=k[l>>2]|0;Yg(d,m);r=c;return}else if((p|0)==6){c=Hc()|0;u=M;v=c}else if((p|0)==17){c=Hc()|0;w=M;y=c;p=21}else if((p|0)==18){c=Hc()|0;z=M;A=c;p=20}else if((p|0)==19){c=Hc()|0;m=M;xu(f);z=m;A=c;p=20}if((p|0)==20){K2a(g);w=z;y=A;p=21}if((p|0)==21){K2a(e);u=w;v=y}Yg(d,k[l>>2]|0);i=u;j=v;xu(a);Sc(j|0)}function Ag(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=r;r=r+176|0;f=e+152|0;g=e+16|0;h=e;j=g+56|0;l=g+4|0;k[g>>2]=20356;k[j>>2]=20376;x=0;xa(582,g+56|0,l|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;o=m;mab(j);Sc(o|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=20300;k[g+56>>2]=20320;x=0;va(1449,l|0);m=x;x=0;do if(m&1){p=Hc()|0;q=M;s=p}else{k[l>>2]=20392;p=g+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(583,l|0,f|0);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(f);K2a(p);obb(l);q=u;s=t;break}K2a(f);t=k[b>>2]|0;u=k[b+4>>2]|0;v=t+u|0;a:do if(!u)w=11;else{y=t;z=0;while(1){A=i[y>>0]|0;B=g+(k[(k[g>>2]|0)+-12>>2]|0)+4|0;k[B>>2]=k[B>>2]&-75|8;k[g+(k[(k[g>>2]|0)+-12>>2]|0)+76>>2]=48;k[g+(k[(k[g>>2]|0)+-12>>2]|0)+12>>2]=(z|0)!=0?2:c;x=0;Ta(477,g|0,A&255|0)|0;A=x;x=0;if(A&1)break;y=y+1|0;if((y|0)==(v|0)){w=11;break a}else z=z+1|0}z=Hc()|0;C=z;D=M}while(0);do if((w|0)==11){x=0;if((d|0)!=1){Fi(a,l);v=x;x=0;if(!(v&1)){k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);r=e;return}v=Hc()|0;E=M;F=v;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(F|0)}Fi(h,l);v=x;x=0;if(v&1){v=Hc()|0;C=v;D=M;break}x=0;v=Fa(86,h|0,0,257534)|0;t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(h);E=u;F=t;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(F|0)}else{k[a>>2]=k[v>>2];k[a+4>>2]=k[v+4>>2];k[a+8>>2]=k[v+8>>2];k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;K2a(h);k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);r=e;return}}while(0);E=D;F=C;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(F|0)}while(0);n=q;o=s;mab(j);Sc(o|0)}function Bg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+48|0;d=c;do if(!(i[b+40>>0]|0)){e=d;k[e>>2]=-1;k[e+4>>2]=-1;k[d+32>>2]=2;e=k[b+32>>2]|0;do if((e|0)==2){f=2;while(1){if((f|0)<=0)break;f=f+-1|0;g=k[b+(f<<2)>>2]|0;h=k[d+(f<<2)>>2]|0;if((g|0)!=(h|0)){j=g;l=h;m=8;break}}if((m|0)==8?j>>>0>l>>>0:0){m=9;break}f=k[b>>2]|0;if(e>>>0>1){n=f;o=k[b+4>>2]|0}else{n=f;o=0}}else if(e>>>0>2)m=9;else{n=k[b>>2]|0;o=0}while(0);if((m|0)==9)break;nu(a,n,o);r=c;return}while(0);iu(a,0);r=c;return}function Cg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0;d=r;r=r+800|0;e=d+552|0;f=d+408|0;g=d+780|0;h=d+360|0;j=d+528|0;l=d+504|0;m=d+456|0;n=d+384|0;o=d+336|0;p=d+756|0;q=d+768|0;s=d+288|0;t=d+192|0;u=d+168|0;v=d+120|0;w=d+628|0;y=d+96|0;z=d+312|0;A=d+616|0;B=d+752|0;C=d+240|0;D=d+48|0;E=d+664|0;F=d+652|0;G=d+640|0;H=d+604|0;I=d+592|0;J=d+24|0;K=d;iu(a,7);x=0;L=Ta(478,b|0,c|0)|0;N=x;x=0;a:do if(!(N&1)){if(!L){x=0;O=Ta(479,b|0,c|0)|0;P=x;x=0;if(P&1)break;if(!O){r=d;return}}x=0;O=Ta(478,b|0,c|0)|0;P=x;x=0;if(!(P&1)){b:do if(O){x=0;fb(140,g|0,329672,0);P=x;x=0;if(P&1)break a;x=0;fb(141,f|0,O|0,g|0);P=x;x=0;if(P&1){P=Hc()|0;Q=M;K2a(g);R=P;S=Q;xu(a);Sc(R|0)}K2a(g);x=0;Q=Ta(480,b|0,c|0)|0;P=x;x=0;if(P&1)break a;P=(k[Q+4>>2]|0)-(k[Q>>2]|0)|0;x=0;xa(588,h|0,6);Q=x;x=0;if(Q&1)break a;x=0;Q=Ta(481,h|0,0)|0;T=x;x=0;c:do if(!(T&1)){do if(!(i[f+40>>0]|0)){U=e;k[U>>2]=-1;k[U+4>>2]=-1;k[e+32>>2]=2;U=k[f+32>>2]|0;do if((U|0)!=2)if(U>>>0>2)V=21;else{W=k[f>>2]|0;X=0;V=24}else{Y=2;while(1){if((Y|0)<=0)break;Y=Y+-1|0;Z=k[f+(Y<<2)>>2]|0;_=k[e+(Y<<2)>>2]|0;if((Z|0)!=(_|0)){$=Z;aa=_;V=20;break}}if((V|0)==20?$>>>0>aa>>>0:0){V=21;break}W=k[f>>2]|0;X=k[f+4>>2]|0;V=24}while(0);if((V|0)==21){V=22;break}else if((V|0)==24){x=0;fb(142,j|0,W|0,X|0);U=x;x=0;if(U&1){V=49;break c}else break}}else V=22;while(0);if((V|0)==22?(x=0,xa(588,j|0,0),U=x,x=0,U&1):0){V=49;break}x=0;Ta(476,Q|0,j|0)|0;U=x;x=0;if(U&1){U=Hc()|0;Y=M;xu(j);ba=U;ca=Y;break}xu(j);x=0;Y=Ta(481,h|0,1)|0;U=x;x=0;if(!(U&1)){k[e>>2]=0;U=e+32|0;k[U>>2]=1;_=Qyb(P|0,0,200,0)|0;Z=M;k[e>>2]=_;if(!((Z|0)==0&0==0)?(_=k[U>>2]|0,da=_+1|0,ea=da>>>0>8?8:da,k[U>>2]=ea,ea>>>0>_>>>0):0)k[e+(_<<2)>>2]=Z;Z=(k[U>>2]|0)+-1|0;d:do if(Z){_=Z;do{if(k[e+(_<<2)>>2]|0)break d;k[U>>2]=_;_=_+-1|0}while((_|0)!=0)}while(0);fa=m;ga=e;ha=fa+40|0;do{k[fa>>2]=k[ga>>2];fa=fa+4|0;ga=ga+4|0}while((fa|0)<(ha|0));i[m+40>>0]=0;U=e;k[U>>2]=-1;k[U+4>>2]=-1;k[e+32>>2]=2;U=k[m+32>>2]|0;do if((U|0)!=2)if(U>>>0>2)V=40;else{ia=k[m>>2]|0;ja=0;V=42}else{Z=2;while(1){if((Z|0)<=0)break;Z=Z+-1|0;_=k[m+(Z<<2)>>2]|0;ea=k[e+(Z<<2)>>2]|0;if((_|0)!=(ea|0)){ka=_;la=ea;V=39;break}}if((V|0)==39?ka>>>0>la>>>0:0){V=40;break}ia=k[m>>2]|0;ja=k[m+4>>2]|0;V=42}while(0);if((V|0)==40){x=0;xa(588,l|0,0);U=x;x=0;if(U&1){V=49;break}}else if((V|0)==42?(x=0,fb(142,l|0,ia|0,ja|0),U=x,x=0,U&1):0){V=49;break}x=0;Ta(476,Y|0,l|0)|0;U=x;x=0;if(U&1){U=Hc()|0;Z=M;xu(l);ba=U;ca=Z;break}xu(l);x=0;Z=Ta(482,a|0,202448)|0;U=x;x=0;if(!(U&1)){x=0;xa(589,n|0,h|0);U=x;x=0;if(U&1){V=49;break}x=0;Ta(476,Z|0,n|0)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;U=M;xu(n);ba=Z;ca=U;break}else{xu(n);xu(h);break b}}else V=49}else V=49}else V=49;while(0);if((V|0)==49){P=Hc()|0;ba=P;ca=M}xu(h);R=ba;S=ca;xu(a);Sc(R|0)}while(0);x=0;O=Ta(479,b|0,c|0)|0;P=x;x=0;if(!(P&1)){if(!O){r=d;return}x=0;P=Ta(483,b|0,c|0)|0;Q=x;x=0;if(!(Q&1)?(x=0,xa(588,o|0,7),Q=x,x=0,!(Q&1)):0){x=0;xa(585,p|0,P|0);Q=x;x=0;e:do if(!(Q&1)){T=k[p>>2]|0;U=p+4|0;f:do if((T|0)!=(U|0)){Z=t+40|0;ea=e+32|0;_=t+32|0;da=t+4|0;ma=T;g:while(1){na=k[ma+20>>2]|0;oa=k[ma+24>>2]|0;pa=(oa|0)==0;if(!pa)h0a(oa);x=0;xa(586,q|0,na|0);na=x;x=0;if(na&1){qa=oa;ra=pa;V=87;break}x=0;na=Ta(475,o|0,q|0)|0;sa=x;x=0;if(sa&1){ta=oa;ua=pa;V=88;break}x=0;fb(141,t|0,O|0,q|0);sa=x;x=0;if(sa&1){ta=oa;ua=pa;V=88;break}do if(!(i[Z>>0]|0)){sa=e;k[sa>>2]=-1;k[sa+4>>2]=-1;k[ea>>2]=2;sa=k[_>>2]|0;do if((sa|0)==2){va=2;while(1){if((va|0)<=0)break;va=va+-1|0;wa=k[t+(va<<2)>>2]|0;ya=k[e+(va<<2)>>2]|0;if((wa|0)!=(ya|0)){za=wa;Aa=ya;V=74;break}}if((V|0)==74?(V=0,za>>>0>Aa>>>0):0){V=75;break}Ca=k[t>>2]|0;Da=k[da>>2]|0;V=78}else{if(sa>>>0>2){V=75;break}Ca=k[t>>2]|0;Da=0;V=78}while(0);if((V|0)==75){V=0;V=76;break}else if((V|0)==78){V=0;x=0;fb(142,s|0,Ca|0,Da|0);sa=x;x=0;if(sa&1){ta=oa;ua=pa;V=88;break g}else break}}else V=76;while(0);if((V|0)==76?(V=0,x=0,xa(588,s|0,0),sa=x,x=0,sa&1):0){ta=oa;ua=pa;V=88;break}x=0;Ta(476,na|0,s|0)|0;sa=x;x=0;if(sa&1){Ea=oa;Ga=pa;V=89;break}xu(s);K2a(q);if(!pa)j0a(oa);sa=k[ma+4>>2]|0;if(!sa){va=ma;while(1){ya=k[va+8>>2]|0;if((k[ya>>2]|0)==(va|0)){Ha=ya;break}else va=ya}}else{va=sa;while(1){oa=k[va>>2]|0;if(!oa){Ha=va;break}else va=oa}}if((Ha|0)==(U|0))break f;else ma=Ha}if((V|0)==87){ma=Hc()|0;Ia=ma;Ja=M;Ka=qa;La=ra}else if((V|0)==88){ma=Hc()|0;Ma=ma;Na=M;Oa=ua;Pa=ta;V=90}else if((V|0)==89){ma=Hc()|0;da=M;xu(s);Ma=ma;Na=da;Oa=Ga;Pa=Ea;V=90}if((V|0)==90){K2a(q);Ia=Ma;Ja=Na;Ka=Pa;La=Oa}if(!La)j0a(Ka);Yg(p,k[U>>2]|0);Qa=Ia;Ra=Ja;break e}while(0);Yg(p,k[U>>2]|0);x=0;T=Ba(559,P|0)|0;da=x;x=0;if(!(da&1)){h:do if(T){x=0;da=Ta(482,o|0,329672)|0;ma=x;x=0;if(ma&1){V=62;break e}x=0;fb(140,w|0,202457,7);ma=x;x=0;if(ma&1){V=62;break e}x=0;fb(141,v|0,O|0,w|0);ma=x;x=0;i:do if(!(ma&1)){do if(!(i[v+40>>0]|0)){_=e;k[_>>2]=-1;k[_+4>>2]=-1;k[e+32>>2]=2;_=k[v+32>>2]|0;do if((_|0)==2){ea=2;while(1){if((ea|0)<=0)break;ea=ea+-1|0;Z=k[v+(ea<<2)>>2]|0;Y=k[e+(ea<<2)>>2]|0;if((Z|0)!=(Y|0)){Sa=Z;Ua=Y;V=105;break}}if((V|0)==105?Sa>>>0>Ua>>>0:0){V=106;break}Va=k[v>>2]|0;Wa=k[v+4>>2]|0;V=109}else{if(_>>>0>2){V=106;break}Va=k[v>>2]|0;Wa=0;V=109}while(0);if((V|0)==106){V=107;break}else if((V|0)==109){x=0;fb(142,u|0,Va|0,Wa|0);_=x;x=0;if(_&1){V=112;break i}else break}}else V=107;while(0);if((V|0)==107?(x=0,xa(588,u|0,0),_=x,x=0,_&1):0){V=112;break}x=0;Ta(476,da|0,u|0)|0;_=x;x=0;if(_&1){_=Hc()|0;ea=M;xu(u);Xa=_;Ya=ea;break}else{xu(u);K2a(w);break h}}else V=112;while(0);if((V|0)==112){da=Hc()|0;Xa=da;Ya=M}K2a(w);Qa=Xa;Ra=Ya;break e}while(0);x=0;T=Ta(482,a|0,293495)|0;U=x;x=0;if(!(U&1)?(x=0,xa(589,y|0,o|0),U=x,x=0,!(U&1)):0){x=0;Ta(476,T|0,y|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;xu(y);Qa=T;Ra=U;break}xu(y);x=0;xa(588,z|0,7);U=x;x=0;if(!(U&1)){x=0;xa(590,A|0,P+60|0);U=x;x=0;j:do if(U&1)V=129;else{T=k[A>>2]|0;da=A+4|0;ma=k[da>>2]|0;do if((T|0)==(ma|0))Za=T;else{ea=C+32|0;_=C+40|0;Y=G+4|0;Z=e+32|0;va=C+4|0;sa=H+8|0;oa=H+1|0;pa=H+4|0;na=D+40|0;ya=T;k:while(1){wa=k[ya>>2]|0;x=0;_a=Ba(k[(k[wa>>2]|0)+28>>2]|0,wa|0)|0;wa=x;x=0;if(wa&1){V=133;break}do if(!_a){wa=k[ya>>2]|0;if(i[wa+77>>0]|0)break;x=0;$a=Fa(87,b|0,c|0,wa|0)|0;wa=x;x=0;if(wa&1){V=133;break k}k[B>>2]=$a;k[C>>2]=0;k[ea>>2]=1;i[_>>0]=1;if(!$a)ab=1;else{x=0;nb(82,D|0,O|0,B|0,k[ya>>2]|0);$a=x;x=0;if($a&1){V=133;break k}fa=C;ga=D;ha=fa+36|0;do{k[fa>>2]=k[ga>>2];fa=fa+4|0;ga=ga+4|0}while((fa|0)<(ha|0));$a=i[na>>0]|0;i[_>>0]=$a;ab=$a}x=0;fb(143,E|0,k[ya>>2]|0,1);$a=x;x=0;if($a&1){V=133;break k}$a=k[(k[ya>>2]|0)+24>>2]|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;wa=i[$a>>0]|0;bb=(wa&1)==0;cb=bb?(wa&255)>>>1:k[$a+4>>2]|0;x=0;nb(83,F|0,(bb?$a+1|0:k[$a+8>>2]|0)|0,cb|0,cb+1|0);cb=x;x=0;if(cb&1){V=144;break k}x=0;Fa(88,F|0,300108,1)|0;cb=x;x=0;if(cb&1){V=144;break k}x=0;xa(591,G|0,E|0);cb=x;x=0;if(cb&1){V=145;break k}cb=k[G>>2]|0;if((cb|0)!=(k[Y>>2]|0)){$a=cb;do{cb=k[$a>>2]|0;x=0;fb(k[(k[cb>>2]|0)+76>>2]|0,I|0,cb|0,0);cb=x;x=0;if(cb&1){V=150;break k}$a=$a+8|0;x=0;cb=Ta(484,I|0,(($a|0)==(k[Y>>2]|0)?329672:301287)|0)|0;bb=x;x=0;if(bb&1){V=153;break k};k[H>>2]=k[cb>>2];k[H+4>>2]=k[cb+4>>2];k[H+8>>2]=k[cb+8>>2];k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;cb=i[H>>0]|0;bb=(cb&1)==0;x=0;Fa(88,F|0,(bb?oa:k[sa>>2]|0)|0,(bb?(cb&255)>>>1:k[pa>>2]|0)|0)|0;cb=x;x=0;if(cb&1){V=154;break k}K2a(H);K2a(I)}while(($a|0)!=(k[Y>>2]|0))}x=0;Ta(484,F|0,300015)|0;$a=x;x=0;if($a&1){V=151;break k}x=0;$a=Ta(475,z|0,F|0)|0;cb=x;x=0;if(cb&1){V=151;break k}do if(!(ab<<24>>24)){cb=e;k[cb>>2]=-1;k[cb+4>>2]=-1;k[Z>>2]=2;cb=k[ea>>2]|0;do if((cb|0)==2){bb=2;while(1){if((bb|0)<=0)break;bb=bb+-1|0;wa=k[C+(bb<<2)>>2]|0;db=k[e+(bb<<2)>>2]|0;if((wa|0)!=(db|0)){eb=wa;gb=db;V=163;break}}if((V|0)==163?(V=0,eb>>>0>gb>>>0):0){V=164;break}hb=k[C>>2]|0;ib=k[va>>2]|0;V=167}else{if(cb>>>0>2){V=164;break}hb=k[C>>2]|0;ib=0;V=167}while(0);if((V|0)==164){V=0;V=165;break}else if((V|0)==167){V=0;x=0;fb(142,J|0,hb|0,ib|0);cb=x;x=0;if(cb&1){V=151;break k}else break}}else V=165;while(0);if((V|0)==165?(V=0,x=0,xa(588,J|0,0),cb=x,x=0,cb&1):0){V=151;break k}x=0;Ta(476,$a|0,J|0)|0;cb=x;x=0;if(cb&1){V=178;break k}xu(J);cb=k[G>>2]|0;if(cb){bb=k[Y>>2]|0;if((bb|0)==(cb|0))jb=cb;else{db=bb;while(1){bb=db+-8|0;k[Y>>2]=bb;wa=k[db+-4>>2]|0;if(!wa)kb=bb;else{j0a(wa);kb=k[Y>>2]|0}if((kb|0)==(cb|0))break;else db=kb}jb=k[G>>2]|0}OBa(jb)}K2a(F);Dg(E)}while(0);ya=ya+4|0;if((ya|0)==(ma|0)){V=122;break}}if((V|0)==122){Za=k[A>>2]|0;break}else if((V|0)==133){ya=Hc()|0;lb=ya;mb=M}else if((V|0)==144){ya=Hc()|0;va=M;K2a(F);ob=ya;pb=va;V=187}else if((V|0)==145){va=Hc()|0;qb=va;rb=M;V=186}else if((V|0)==150){va=Hc()|0;sb=va;tb=M;V=152}else if((V|0)==151){va=Hc()|0;sb=va;tb=M;V=152}else if((V|0)==153){va=Hc()|0;ub=va;vb=M;V=155}else if((V|0)==154){va=Hc()|0;ya=M;K2a(H);ub=va;vb=ya;V=155}else if((V|0)==178){ya=Hc()|0;va=M;xu(J);wb=ya;xb=va;V=179}if((V|0)==152){wb=sb;xb=tb;V=179}else if((V|0)==155){K2a(I);wb=ub;xb=vb;V=179}do if((V|0)==179){va=k[G>>2]|0;if(!va){qb=wb;rb=xb;V=186;break}ya=k[Y>>2]|0;if((ya|0)==(va|0))yb=va;else{ea=ya;while(1){ya=ea+-8|0;k[Y>>2]=ya;Z=k[ea+-4>>2]|0;if(!Z)zb=ya;else{j0a(Z);zb=k[Y>>2]|0}if((zb|0)==(va|0))break;else ea=zb}yb=k[G>>2]|0}OBa(yb);qb=wb;rb=xb;V=186}while(0);if((V|0)==186){K2a(F);ob=qb;pb=rb;V=187}if((V|0)==187){Dg(E);lb=ob;mb=pb}Y=k[A>>2]|0;if(!Y){Ab=lb;Bb=mb;break j}ea=k[da>>2]|0;if((ea|0)!=(Y|0))k[da>>2]=ea+(~((ea+-4-Y|0)>>>2)<<2);OBa(Y);Ab=lb;Bb=mb;break j}while(0);ma=Za;if(Za){T=k[da>>2]|0;if((T|0)!=(Za|0))k[da>>2]=T+(~((T+-4-ma|0)>>>2)<<2);OBa(Za)}x=0;ma=Ta(482,a|0,293532)|0;T=x;x=0;if(T&1){V=129;break}x=0;xa(589,K|0,z|0);T=x;x=0;if(T&1){V=129;break}x=0;Ta(476,ma|0,K|0)|0;ma=x;x=0;if(ma&1){ma=Hc()|0;T=M;xu(K);Ab=ma;Bb=T;break}xu(K);xu(z);xu(o);r=d;return}while(0);if((V|0)==129){U=Hc()|0;Ab=U;Bb=M}xu(z);Qa=Ab;Ra=Bb}else V=62}else V=62}else V=62}else V=62;while(0);if((V|0)==62){O=Hc()|0;Qa=O;Ra=M}xu(o);R=Qa;S=Ra;xu(a);Sc(R|0)}}}}while(0);Ra=Hc()|0;R=Ra;S=M;xu(a);Sc(R|0)}function Dg(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;k[a>>2]=37588;b=a+60|0;c=k[b>>2]|0;if(c){d=a+64|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-12|0;k[d>>2]=e;K2a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f)}f=a+48|0;b=k[f>>2]|0;if(b){c=a+52|0;g=k[c>>2]|0;if((g|0)==(b|0))h=b;else{d=g;do{g=d+-12|0;k[c>>2]=g;K2a(g);d=k[c>>2]|0}while((d|0)!=(b|0));h=k[f>>2]|0}OBa(h)}h=a+36|0;f=k[h>>2]|0;if(f){b=a+40|0;d=k[b>>2]|0;if((d|0)==(f|0))i=f;else{c=d;while(1){d=c+-8|0;k[b>>2]=d;g=k[c+-4>>2]|0;if(!g)j=d;else{j0a(g);j=k[b>>2]|0}if((j|0)==(f|0))break;else c=j}i=k[h>>2]|0}OBa(i)}i=a+24|0;h=k[i>>2]|0;if(h){j=a+28|0;c=k[j>>2]|0;if((c|0)==(h|0))l=h;else{f=c;while(1){c=f+-8|0;k[j>>2]=c;b=k[f+-4>>2]|0;if(!b)m=c;else{j0a(b);m=k[j>>2]|0}if((m|0)==(h|0))break;else f=m}l=k[i>>2]|0}OBa(l)}k[a>>2]=20456;xh(a+12|0,k[a+16>>2]|0);l=k[a+8>>2]|0;if(!l)return;k0a(l);return}function Eg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0;e=r;r=r+1552|0;f=e+1096|0;g=e+1544|0;h=e+1072|0;i=e+1048|0;j=e+1e3|0;l=e+888|0;m=e+1024|0;n=e+1532|0;o=e+1520|0;p=e+840|0;q=e+816|0;s=e+768|0;t=e+1356|0;u=e+1344|0;v=e+744|0;w=e+1332|0;y=e+1320|0;z=e+720|0;A=e+696|0;B=e+1308|0;C=e+1296|0;D=e+672|0;E=e+648|0;F=e+1284|0;G=e+624|0;H=e+600|0;I=e+576|0;J=e+1272|0;K=e+864|0;L=e+552|0;N=e+528|0;O=e+1260|0;P=e+504|0;Q=e+1248|0;R=e+480|0;S=e+1236|0;T=e+456|0;U=e+432|0;V=e+408|0;W=e+1224|0;X=e+384|0;Y=e+1212|0;Z=e+1384|0;_=e+360|0;$=e+1200|0;aa=e+336|0;ba=e+312|0;ca=e+1368|0;da=e+288|0;ea=e+792|0;fa=e+264|0;ga=e+1188|0;ha=e+1176|0;ia=e+240|0;ja=e+216|0;ka=e+192|0;la=e+168|0;ma=e+1164|0;na=e+144|0;oa=e+120|0;qa=e+1152|0;ra=e+96|0;sa=e+24|0;ta=e+1140|0;ua=e;wa=e+1120|0;iu(h,7);x=0;xa(588,i|0,6);ya=x;x=0;if(ya&1){ya=Hc()|0;za=M;Aa=ya;xu(h);Sc(Aa|0)}ya=j+16|0;k[ya>>2]=0;if(d){Ca=f+16|0;k[Ca>>2]=f;k[f>>2]=21132;k[f+4>>2]=d;Gi(f,j);d=k[Ca>>2]|0;if((d|0)!=(f|0)){if(d)Sf[k[(k[d>>2]|0)+20>>2]&2047](d)}else Sf[k[(k[d>>2]|0)+16>>2]&2047](d)}x=0;xa(592,l|0,j|0);d=x;x=0;if(d&1){d=Hc()|0;Da=M;Ea=d}else{d=k[b>>2]|0;Ca=b+4|0;a:do if((d|0)==(Ca|0))Ga=19;else{Ha=d;while(1){x=0;db(56,l|0,Ha+16|0,Ha+28|0,0)|0;Ia=x;x=0;if(Ia&1)break;Ia=k[Ha+4>>2]|0;if(!Ia){Ja=Ha;while(1){Ka=k[Ja+8>>2]|0;if((k[Ka>>2]|0)==(Ja|0)){Ma=Ka;break}else Ja=Ka}}else{Ja=Ia;while(1){Ka=k[Ja>>2]|0;if(!Ka){Ma=Ja;break}else Ja=Ka}}if((Ma|0)==(Ca|0)){Ga=19;break a}else Ha=Ma}Ha=Hc(48,72,96,16,0)|0;Na=Ha;Oa=M;Ga=24}while(0);b:do if((Ga|0)==19){x=0;Ma=Fa(89,l|0,c|0,200)|0;d=x;x=0;if(d&1){d=Hc(48,72,96,16,0)|0;Na=d;Oa=M;Ga=24;break}d=k[l+96>>2]|0;Ha=k[l+100>>2]|0;if((d|0)!=(Ha|0)){Ja=l;Ia=p+16|0;Ka=p+4|0;Pa=d;while(1){d=k[Pa>>2]|0;Qa=k[Pa+4>>2]|0;if(!Qa){Ra=d;Sa=0}else{h0a(Qa);Ra=k[Pa>>2]|0;Sa=Qa}Qa=k[(k[Ra>>2]|0)+-20>>2]|0;Ua=(k[d+4>>2]|0)==6;x=0;fb(140,o|0,(Ua?284771:202593)|0,(Ua?7:5)|0);Ua=x;x=0;if(Ua&1){Va=Sa;Ga=38;break}k[Ia>>2]=p;k[p>>2]=21176;k[Ka>>2]=Ja;x=0;nb(84,n|0,Ra+Qa|0,o|0,p|0);Qa=x;x=0;if(Qa&1){Wa=Sa;Ga=39;break}x=0;xa(587,m|0,n|0);Qa=x;x=0;if(Qa&1){Xa=Sa;Ga=40;break}x=0;Ta(485,i|0,m|0)|0;Qa=x;x=0;if(Qa&1){Ya=Sa;Ga=41;break}xu(m);K2a(n);Qa=k[Ia>>2]|0;if((Qa|0)!=(p|0)){if(Qa)Sf[k[(k[Qa>>2]|0)+20>>2]&2047](Qa)}else Sf[k[(k[p>>2]|0)+16>>2]&2047](p);K2a(o);if(Sa)j0a(Sa);Pa=Pa+8|0;if((Pa|0)==(Ha|0)){Za=Ma;Ga=59;break b}}if((Ga|0)==38){Ha=Hc(48,72,96,16,0)|0;_a=Ha;$a=M;ab=Va}else if((Ga|0)==39){Ha=Hc(48,72,96,16,0)|0;bb=Ha;cb=M;eb=Wa;Ga=43}else if((Ga|0)==40){Ha=Hc(48,72,96,16,0)|0;gb=Ha;ib=M;jb=Xa;Ga=42}else if((Ga|0)==41){Ha=Hc(48,72,96,16,0)|0;Pa=M;xu(m);gb=Ha;ib=Pa;jb=Ya;Ga=42}if((Ga|0)==42){K2a(n);bb=gb;cb=ib;eb=jb;Ga=43}if((Ga|0)==43){Pa=k[Ia>>2]|0;if((Pa|0)!=(p|0)){if(Pa)Sf[k[(k[Pa>>2]|0)+20>>2]&2047](Pa)}else Sf[k[(k[p>>2]|0)+16>>2]&2047](p);K2a(o);_a=bb;$a=cb;ab=eb}if(!ab){kb=_a;lb=$a;Ga=50}else{j0a(ab);kb=_a;lb=$a;Ga=50}}else{Za=Ma;Ga=59}}while(0);if((Ga|0)==24){kb=Na;lb=Oa;Ga=50}c:do if((Ga|0)==50){if((lb|0)==(hf(48)|0)){Oa=me(kb|0)|0;Na=k[(k[Oa>>2]|0)+-20>>2]|0;$a=G+16|0;k[$a>>2]=G;k[G>>2]=21176;k[G+4>>2]=l;x=0;nb(84,F|0,Oa+Na|0,Oa+8|0,G|0);Oa=x;x=0;if(Oa&1){Oa=Hc()|0;mb=Oa;ob=M}else{x=0;xa(587,E|0,F|0);Oa=x;x=0;do if(!(Oa&1)){x=0;Ta(485,i|0,E|0)|0;Na=x;x=0;if(Na&1){Na=Hc()|0;_a=M;xu(E);pb=Na;qb=_a;break}xu(E);K2a(F);_a=k[$a>>2]|0;if((_a|0)!=(G|0)){if(_a)Sf[k[(k[_a>>2]|0)+20>>2]&2047](_a)}else Sf[k[(k[G>>2]|0)+16>>2]&2047](G);x=0;hb(45);_a=x;x=0;if(_a&1){Ga=96;break c}else{Za=0;Ga=59;break c}}else{_a=Hc()|0;pb=_a;qb=M}while(0);K2a(F);mb=pb;ob=qb}Oa=k[$a>>2]|0;if((Oa|0)!=(G|0)){if(Oa)Sf[k[(k[Oa>>2]|0)+20>>2]&2047](Oa)}else Sf[k[(k[Oa>>2]|0)+16>>2]&2047](Oa);x=0;hb(45);Oa=x;x=0;if(!(Oa&1)){rb=ob;sb=mb;break}tb=Hc(0)|0;ub=M;Fg(tb)}if((lb|0)==(hf(72)|0)){Oa=me(kb|0)|0;Ma=k[(k[Oa>>2]|0)+-20>>2]|0;x=0;fb(140,C|0,202692,14);Ia=x;x=0;if(Ia&1){Ia=Hc()|0;vb=Ia;wb=M}else{Ia=D+16|0;k[Ia>>2]=D;k[D>>2]=21176;k[D+4>>2]=l;x=0;nb(84,B|0,Oa+Ma|0,C|0,D|0);Ma=x;x=0;if(Ma&1){Ma=Hc()|0;xb=Ma;yb=M}else{x=0;xa(587,A|0,B|0);Ma=x;x=0;do if(!(Ma&1)){x=0;Ta(485,i|0,A|0)|0;Oa=x;x=0;if(Oa&1){Oa=Hc()|0;_a=M;xu(A);zb=Oa;Ab=_a;break}xu(A);K2a(B);_a=k[Ia>>2]|0;if((_a|0)!=(D|0)){if(_a)Sf[k[(k[_a>>2]|0)+20>>2]&2047](_a)}else Sf[k[(k[D>>2]|0)+16>>2]&2047](D);K2a(C);x=0;hb(45);_a=x;x=0;if(_a&1){Ga=96;break c}else{Za=0;Ga=59;break c}}else{_a=Hc()|0;zb=_a;Ab=M}while(0);K2a(B);xb=zb;yb=Ab}Ma=k[Ia>>2]|0;if((Ma|0)!=(D|0)){if(Ma)Sf[k[(k[Ma>>2]|0)+20>>2]&2047](Ma)}else Sf[k[(k[Ma>>2]|0)+16>>2]&2047](Ma);K2a(C);vb=xb;wb=yb}x=0;hb(45);Ma=x;x=0;if(!(Ma&1)){rb=wb;sb=vb;break}tb=Hc(0)|0;ub=M;Fg(tb)}if((lb|0)==(hf(96)|0)){Ma=me(kb|0)|0;$a=k[(k[Ma>>2]|0)+-20>>2]|0;x=0;fb(140,y|0,202668,23);_a=x;x=0;if(_a&1){_a=Hc()|0;Bb=_a;Cb=M}else{_a=z+16|0;k[_a>>2]=z;k[z>>2]=21176;k[z+4>>2]=l;x=0;nb(84,w|0,Ma+$a|0,y|0,z|0);$a=x;x=0;if($a&1){$a=Hc()|0;Db=$a;Eb=M}else{x=0;xa(587,v|0,w|0);$a=x;x=0;do if(!($a&1)){x=0;Ta(485,i|0,v|0)|0;Ma=x;x=0;if(Ma&1){Ma=Hc()|0;Oa=M;xu(v);Fb=Ma;Gb=Oa;break}xu(v);K2a(w);Oa=k[_a>>2]|0;if((Oa|0)!=(z|0)){if(Oa)Sf[k[(k[Oa>>2]|0)+20>>2]&2047](Oa)}else Sf[k[(k[z>>2]|0)+16>>2]&2047](z);K2a(y);x=0;hb(45);Oa=x;x=0;if(Oa&1){Ga=96;break c}else{Za=0;Ga=59;break c}}else{Oa=Hc()|0;Fb=Oa;Gb=M}while(0);K2a(w);Db=Fb;Eb=Gb}$a=k[_a>>2]|0;if(($a|0)!=(z|0)){if($a)Sf[k[(k[$a>>2]|0)+20>>2]&2047]($a)}else Sf[k[(k[$a>>2]|0)+16>>2]&2047]($a);K2a(y);Bb=Db;Cb=Eb}x=0;hb(45);$a=x;x=0;if(!($a&1)){rb=Cb;sb=Bb;break}tb=Hc(0)|0;ub=M;Fg(tb)}else{$a=(lb|0)==(hf(16)|0);Ia=me(kb|0)|0;if(!$a){x=0;xa(593,q|0,202599);$a=x;x=0;do if(!($a&1)){x=0;Ta(485,i|0,q|0)|0;Oa=x;x=0;if(!(Oa&1)){xu(q);x=0;hb(45);Oa=x;x=0;if(Oa&1){Ga=96;break c}else{Za=0;Ga=59;break c}}else{Oa=Hc()|0;Ma=M;xu(q);Hb=Oa;Ib=Ma;break}}else{Ma=Hc()|0;Hb=Ma;Ib=M}while(0);x=0;hb(45);$a=x;x=0;if(!($a&1)){rb=Ib;sb=Hb;break}tb=Hc(0)|0;ub=M;Fg(tb)}$a=k[Ia>>2]|0;x=0;pa(45,u|0,Ia+(k[$a+-24>>2]|0)|0,Ia+(k[$a+-20>>2]|0)|0,1,1);$a=x;x=0;if($a&1){$a=Hc()|0;Jb=$a;Kb=M}else{x=0;$a=Fa(86,u|0,0,202637)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Lb=_a;Mb=M}else{k[t>>2]=k[$a>>2];k[t+4>>2]=k[$a+4>>2];k[t+8>>2]=k[$a+8>>2];k[$a>>2]=0;k[$a+4>>2]=0;k[$a+8>>2]=0;x=0;xa(587,s|0,t|0);$a=x;x=0;do if(!($a&1)){x=0;Ta(485,i|0,s|0)|0;_a=x;x=0;if(!(_a&1)){xu(s);K2a(t);K2a(u);x=0;hb(45);_a=x;x=0;if(_a&1){Ga=96;break c}else{Za=0;Ga=59;break c}}else{_a=Hc()|0;Ma=M;xu(s);Nb=_a;Ob=Ma;break}}else{Ma=Hc()|0;Nb=Ma;Ob=M}while(0);K2a(t);Lb=Nb;Mb=Ob}K2a(u);Jb=Lb;Kb=Mb}x=0;hb(45);$a=x;x=0;if(!($a&1)){rb=Kb;sb=Jb;break}tb=Hc(0)|0;ub=M;Fg(tb)}}while(0);d:do if((Ga|0)==59){x=0;Jb=Ba(560,i|0)|0;Kb=x;x=0;if(Kb&1)Ga=96;else{do if(Jb){x=0;Kb=Ta(482,h|0,202707)|0;Mb=x;x=0;if(Mb&1){Ga=96;break d}x=0;xa(589,H|0,i|0);Mb=x;x=0;if(Mb&1){Ga=96;break d}x=0;Ta(476,Kb|0,H|0)|0;Kb=x;x=0;if(Kb&1){Kb=Hc()|0;Mb=M;xu(H);rb=Mb;sb=Kb;break d}else{xu(H);break}}while(0);e:do if(Za){x=0;Jb=Ta(482,h|0,240214)|0;Kb=x;x=0;f:do if(!(Kb&1)?(x=0,xa(588,I|0,7),Mb=x,x=0,!(Mb&1)):0){x=0;Ta(476,Jb|0,I|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc(0)|0;xu(I);Pb=Mb;Ga=251;break}xu(I);x=0;xa(594,J|0,l|0);Mb=x;x=0;if(!(Mb&1)){Mb=k[J>>2]|0;Lb=J+4|0;u=k[Lb>>2]|0;g:do if((Mb|0)==(u|0))Qb=Mb;else{Ob=Z+56|0;Nb=Z+4|0;t=Z+56|0;s=Z+56|0;Hb=Z+128|0;Ib=Z+132|0;q=Z+36|0;kb=Z+52|0;lb=$+4|0;Bb=$+8|0;Cb=$+4|0;Eb=Cb;Db=Mb;h:while(1){x=0;xa(588,K|0,7);y=x;x=0;if(y&1){Ga=217;break}x=0;y=Ta(482,K|0,293804)|0;z=x;x=0;if(z&1){Ga=218;break}x=0;z=Ta(486,l|0,Db|0)|0;Gb=x;x=0;if(Gb&1){Ga=218;break}x=0;xa(587,L|0,z|0);z=x;x=0;if(z&1){Ga=218;break}x=0;Ta(476,y|0,L|0)|0;y=x;x=0;if(y&1){Ga=220;break}xu(L);x=0;y=Ta(482,K|0,202714)|0;z=x;x=0;if(z&1){Ga=218;break}x=0;z=Ta(487,l|0,Db|0)|0;Gb=x;x=0;if(Gb&1){Ga=218;break}x=0;xa(595,O|0,z|0);z=x;x=0;if(z&1){Ga=218;break}x=0;xa(587,N|0,O|0);z=x;x=0;if(z&1){Ga=221;break}x=0;Ta(476,y|0,N|0)|0;y=x;x=0;if(y&1){Ga=222;break}xu(N);K2a(O);x=0;y=Ta(482,K|0,202723)|0;z=x;x=0;if(z&1){Ga=218;break}x=0;z=Ta(480,l|0,Db|0)|0;Gb=x;x=0;if(Gb&1){Ga=218;break}x=0;xa(595,Q|0,z|0);z=x;x=0;if(z&1){Ga=218;break}x=0;xa(587,P|0,Q|0);z=x;x=0;if(z&1){Ga=224;break}x=0;Ta(476,y|0,P|0)|0;y=x;x=0;if(y&1){Ga=225;break}xu(P);K2a(Q);x=0;y=Ta(482,K|0,202739)|0;z=x;x=0;if(z&1){Ga=218;break}x=0;z=Ta(487,l|0,Db|0)|0;Gb=x;x=0;if(Gb&1){Ga=218;break}x=0;xa(596,S|0,z|0);z=x;x=0;if(z&1){Ga=218;break}x=0;xa(587,R|0,S|0);z=x;x=0;if(z&1){Ga=227;break}x=0;Ta(476,y|0,R|0)|0;y=x;x=0;if(y&1){Ga=228;break}xu(R);K2a(S);x=0;y=Ta(482,K|0,202747)|0;z=x;x=0;if(z&1){Ga=218;break}x=0;z=Ta(483,l|0,Db|0)|0;Gb=x;x=0;if(Gb&1){Ga=218;break}x=0;xa(597,T|0,z|0);z=x;x=0;if(z&1){Ga=218;break}x=0;Ta(476,y|0,T|0)|0;y=x;x=0;if(y&1){Ga=230;break}xu(T);x=0;y=Ta(482,K|0,202762)|0;z=x;x=0;if(z&1){Ga=218;break}x=0;fb(144,U|0,l|0,Db|0);z=x;x=0;if(z&1){Ga=218;break}x=0;Ta(476,y|0,U|0)|0;y=x;x=0;if(y&1){Ga=231;break}xu(U);x=0;y=Ta(488,l|0,Db|0)|0;z=x;x=0;if(z&1){Ga=218;break}x=0;z=Ta(482,K|0,202775)|0;Gb=x;x=0;if(Gb&1){Ga=218;break}x=0;if(!y){q2a(W,329672,0);Gb=x;x=0;if(Gb&1){Ga=218;break}}else{n2a(W,y);y=x;x=0;if(y&1){Ga=218;break}}x=0;xa(587,V|0,W|0);y=x;x=0;if(y&1){Ga=232;break}x=0;Ta(476,z|0,V|0)|0;z=x;x=0;if(z&1){Ga=233;break}xu(V);K2a(W);x=0;z=Ta(489,l|0,Db|0)|0;y=x;x=0;if(y&1){Ga=218;break}x=0;y=Ta(482,K|0,202782)|0;Gb=x;x=0;if(Gb&1){Ga=218;break}x=0;if(!z){q2a(Y,329672,0);Gb=x;x=0;if(Gb&1){Ga=218;break}}else{n2a(Y,z);z=x;x=0;if(z&1){Ga=218;break}}x=0;xa(587,X|0,Y|0);z=x;x=0;if(z&1){Ga=235;break}x=0;Ta(476,y|0,X|0)|0;y=x;x=0;if(y&1){Ga=236;break}xu(X);K2a(Y);k[Z>>2]=20356;k[Ob>>2]=20376;x=0;xa(582,t|0,Nb|0);y=x;x=0;if(y&1){Ga=197;break}k[Hb>>2]=0;k[Ib>>2]=-1;k[Z>>2]=20300;k[s>>2]=20320;x=0;va(1449,Nb|0);y=x;x=0;if(y&1){Ga=198;break}k[Nb>>2]=20392;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[kb>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(583,Nb|0,f|0);y=x;x=0;if(y&1){Ga=196;break}K2a(f);x=0;y=Ta(482,K|0,293426)|0;z=x;x=0;if(z&1){Ga=238;break}k[lb>>2]=0;k[Bb>>2]=0;k[$>>2]=Cb;z=k[b>>2]|0;if((z|0)!=(Ca|0)){Gb=z;Fb=z;while(1){k[g>>2]=Eb;x=0;k[f>>2]=k[g>>2];Fa(90,$|0,f|0,Gb+16|0)|0;z=x;x=0;if(z&1){Ga=209;break h}z=k[Fb+4>>2]|0;if(!z){w=Fb;while(1){v=k[w+8>>2]|0;if((k[v>>2]|0)==(w|0)){Rb=v;break}else w=v}}else{w=z;while(1){v=k[w>>2]|0;if(!v){Rb=w;break}else w=v}}if((Rb|0)==(Ca|0))break;else{Gb=Rb;Fb=Rb}}}x=0;La(52,_|0,l|0,Z|0,Db|0,$|0,1);Fb=x;x=0;if(Fb&1){Ga=240;break}x=0;Ta(476,y|0,_|0)|0;Fb=x;x=0;if(Fb&1){Ga=241;break}xu(_);xi($,k[Cb>>2]|0);x=0;Fb=Ta(482,h|0,240214)|0;Gb=x;x=0;if(Gb&1){Ga=238;break}x=0;Gb=Ta(475,Fb|0,Db|0)|0;Fb=x;x=0;if(Fb&1){Ga=238;break}x=0;xa(589,aa|0,K|0);Fb=x;x=0;if(Fb&1){Ga=238;break}x=0;Ta(476,Gb|0,aa|0)|0;Gb=x;x=0;if(Gb&1){Ga=243;break}xu(aa);k[Z>>2]=20300;k[Ob>>2]=20320;k[Nb>>2]=20392;K2a(q);obb(Nb);mab(Ob);xu(K);Db=Db+12|0;if((Db|0)==(u|0)){Ga=144;break}}switch(Ga|0){case 144:{Qb=k[J>>2]|0;break g;break}case 196:{Db=Hc(0)|0;K2a(f);K2a(q);obb(Nb);Sb=Db;Ga=199;break}case 197:{Tb=Hc(0)|0;Ga=200;break}case 198:{Sb=Hc(0)|0;Ga=199;break}case 209:{Db=Hc(0)|0;xi($,k[Cb>>2]|0);Ub=Db;Ga=239;break}case 217:{Vb=Hc(0)|0;break}case 218:{Wb=Hc(0)|0;Ga=219;break}case 220:{Db=Hc(0)|0;xu(L);Xb=Db;Ga=245;break}case 221:{Yb=Hc(0)|0;Ga=223;break}case 222:{Db=Hc(0)|0;xu(N);Yb=Db;Ga=223;break}case 224:{Zb=Hc(0)|0;Ga=226;break}case 225:{Db=Hc(0)|0;xu(P);Zb=Db;Ga=226;break}case 227:{_b=Hc(0)|0;Ga=229;break}case 228:{Db=Hc(0)|0;xu(R);_b=Db;Ga=229;break}case 230:{Db=Hc(0)|0;xu(T);Xb=Db;Ga=245;break}case 231:{Db=Hc(0)|0;xu(U);Xb=Db;Ga=245;break}case 232:{$b=Hc(0)|0;Ga=234;break}case 233:{Db=Hc(0)|0;xu(V);$b=Db;Ga=234;break}case 235:{ac=Hc(0)|0;Ga=237;break}case 236:{Db=Hc(0)|0;xu(X);ac=Db;Ga=237;break}case 238:{Ub=Hc(0)|0;Ga=239;break}case 240:{bc=Hc(0)|0;Ga=242;break}case 241:{Db=Hc(0)|0;xu(_);bc=Db;Ga=242;break}case 243:{Db=Hc(0)|0;xu(aa);cc=Db;Ga=244;break}}if((Ga|0)==199){Tb=Sb;Ga=200}else if((Ga|0)==223){K2a(O);Xb=Yb;Ga=245}else if((Ga|0)==226){K2a(Q);Xb=Zb;Ga=245}else if((Ga|0)==229){K2a(S);Xb=_b;Ga=245}else if((Ga|0)==234){K2a(W);Xb=$b;Ga=245}else if((Ga|0)==237){K2a(Y);Xb=ac;Ga=245}else if((Ga|0)==239){cc=Ub;Ga=244}else if((Ga|0)==242){xi($,k[Cb>>2]|0);cc=bc;Ga=244}if((Ga|0)==200){mab(Ob);Wb=Tb;Ga=219}else if((Ga|0)==244){k[Z>>2]=20300;k[Ob>>2]=20320;k[Nb>>2]=20392;K2a(q);obb(Nb);mab(Ob);Xb=cc;Ga=245}if((Ga|0)==219){Xb=Wb;Ga=245}if((Ga|0)==245){xu(K);Vb=Xb}Db=k[J>>2]|0;if(!Db){Pb=Vb;Ga=251;break f}Eb=k[Lb>>2]|0;if((Eb|0)==(Db|0))dc=Db;else{Bb=Eb;do{Eb=Bb+-12|0;k[Lb>>2]=Eb;K2a(Eb);Bb=k[Lb>>2]|0}while((Bb|0)!=(Db|0));dc=k[J>>2]|0}OBa(dc);Pb=Vb;Ga=251;break f}while(0);if(Qb){u=k[Lb>>2]|0;if((u|0)==(Qb|0))ec=Qb;else{Mb=u;do{u=Mb+-12|0;k[Lb>>2]=u;K2a(u);Mb=k[Lb>>2]|0}while((Mb|0)!=(Qb|0));ec=k[J>>2]|0}OBa(ec)}}else Ga=150}else Ga=150;while(0);if((Ga|0)==150){Jb=Hc(0)|0;Pb=Jb;Ga=251}i:do if((Ga|0)==251){me(Pb|0)|0;x=0;Jb=Ta(482,h|0,202707)|0;Kb=x;x=0;do if(!(Kb&1)?(x=0,xa(593,ba|0,202796),Mb=x,x=0,!(Mb&1)):0){x=0;Ta(485,Jb|0,ba|0)|0;Mb=x;x=0;if(!(Mb&1)){xu(ba);x=0;hb(45);Mb=x;x=0;if(Mb&1){Ga=96;break d}else break i}else{Mb=Hc()|0;Lb=M;xu(ba);fc=Lb;gc=Mb;break}}else Ga=262;while(0);if((Ga|0)==262){Jb=Hc()|0;fc=M;gc=Jb}x=0;hb(45);Jb=x;x=0;if(!(Jb&1)){rb=fc;sb=gc;break d}tb=Hc(0)|0;ub=M;Fg(tb)}while(0);k[ca>>2]=0;Jb=ca+4|0;k[Jb>>2]=0;k[ca+8>>2]=0;x=0;Kb=Ta(490,l|0,ca|0)|0;Mb=x;x=0;j:do if(!(Mb&1)){do if(Kb){x=0;Lb=Ta(482,h|0,202853)|0;u=x;x=0;if(u&1){Ga=265;break j}x=0;u=Ta(482,Lb|0,277102)|0;Lb=x;x=0;if(Lb&1){Ga=265;break j}x=0;xa(587,da|0,l+84|0);Lb=x;x=0;if(Lb&1){Ga=265;break j}x=0;Ta(476,u|0,da|0)|0;u=x;x=0;if(u&1){u=Hc(0)|0;xu(da);hc=u;Ga=307;break j}else{xu(da);break}}while(0);u=k[ca>>2]|0;k:do if((u|0)==(k[Jb>>2]|0))ic=u;else{x=0;xa(588,ea|0,6);Lb=x;x=0;if(Lb&1){Ga=265;break j}Lb=k[ca>>2]|0;Db=k[Jb>>2]|0;l:do if((Lb|0)==(Db|0))Ga=271;else{Bb=l;Ob=ia+16|0;Nb=ia+4|0;q=Lb;while(1){Cb=k[q>>2]|0;Eb=k[(k[Cb>>2]|0)+-20>>2]|0;lb=(k[Cb+4>>2]|0)==6;x=0;fb(140,ha|0,(lb?284771:202593)|0,(lb?7:5)|0);lb=x;x=0;if(lb&1){Ga=281;break}k[Ob>>2]=ia;k[ia>>2]=21176;k[Nb>>2]=Bb;x=0;nb(84,ga|0,Cb+Eb|0,ha|0,ia|0);Eb=x;x=0;if(Eb&1){Ga=284;break}x=0;xa(587,fa|0,ga|0);Eb=x;x=0;if(Eb&1){Ga=285;break}x=0;Ta(485,ea|0,fa|0)|0;Eb=x;x=0;if(Eb&1){Ga=286;break}xu(fa);K2a(ga);Eb=k[Ob>>2]|0;do if((Eb|0)==(ia|0))Sf[k[(k[ia>>2]|0)+16>>2]&2047](ia);else{if(!Eb)break;Sf[k[(k[Eb>>2]|0)+20>>2]&2047](Eb)}while(0);K2a(ha);q=q+8|0;if((q|0)==(Db|0)){Ga=271;break l}}if((Ga|0)==281){q=Hc(0)|0;jc=q;Ga=283;break}else if((Ga|0)==284){q=Hc(0)|0;kc=q}else if((Ga|0)==285){q=Hc(0)|0;lc=q;Ga=287}else if((Ga|0)==286){q=Hc(0)|0;xu(fa);lc=q;Ga=287}if((Ga|0)==287){K2a(ga);kc=lc}q=k[Ob>>2]|0;do if((q|0)==(ia|0))Sf[k[(k[ia>>2]|0)+16>>2]&2047](ia);else{if(!q)break;Sf[k[(k[q>>2]|0)+20>>2]&2047](q)}while(0);K2a(ha);mc=kc}while(0);m:do if((Ga|0)==271){x=0;Db=Ta(482,h|0,202853)|0;Lb=x;x=0;do if(!(Lb&1)){x=0;q=Ta(482,Db|0,202707)|0;Ob=x;x=0;if(Ob&1)break;x=0;xa(589,ja|0,ea|0);Ob=x;x=0;if(Ob&1)break;x=0;Ta(476,q|0,ja|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;xu(ja);mc=q;break m}else{xu(ja);xu(ea);ic=k[ca>>2]|0;break k}}while(0);Db=Hc(0)|0;jc=Db;Ga=283}while(0);if((Ga|0)==283)mc=jc;xu(ea);hc=mc;Ga=307;break j}while(0);if(ic){u=k[Jb>>2]|0;if((u|0)==(ic|0))nc=ic;else{Db=u;while(1){u=Db+-8|0;k[Jb>>2]=u;Lb=k[Db+-4>>2]|0;if(!Lb)oc=u;else{j0a(Lb);oc=k[Jb>>2]|0}if((oc|0)==(ic|0))break;else Db=oc}nc=k[ca>>2]|0}OBa(nc)}}else Ga=265;while(0);if((Ga|0)==265){Kb=Hc(0)|0;hc=Kb;Ga=307}n:do if((Ga|0)==307){Kb=k[ca>>2]|0;if(Kb){Mb=k[Jb>>2]|0;if((Mb|0)==(Kb|0))pc=Kb;else{Db=Mb;while(1){Mb=Db+-8|0;k[Jb>>2]=Mb;Lb=k[Db+-4>>2]|0;if(!Lb)qc=Mb;else{j0a(Lb);qc=k[Jb>>2]|0}if((qc|0)==(Kb|0))break;else Db=qc}pc=k[ca>>2]|0}OBa(pc)}me(hc|0)|0;x=0;Db=Ta(482,h|0,202707)|0;Kb=x;x=0;do if(!(Kb&1)?(x=0,xa(593,ka|0,202860),Lb=x,x=0,!(Lb&1)):0){x=0;Ta(485,Db|0,ka|0)|0;Lb=x;x=0;if(!(Lb&1)){xu(ka);x=0;hb(45);Lb=x;x=0;if(Lb&1){Ga=96;break d}else break n}else{Lb=Hc()|0;Mb=M;xu(ka);rc=Mb;sc=Lb;break}}else Ga=330;while(0);if((Ga|0)==330){Db=Hc()|0;rc=M;sc=Db}x=0;hb(45);Db=x;x=0;if(!(Db&1)){rb=rc;sb=sc;break d}tb=Hc(0)|0;ub=M;Fg(tb)}while(0);x=0;Jb=Ta(482,h|0,202917)|0;Db=x;x=0;o:do if(!(Db&1)?(x=0,xa(588,la|0,6),Kb=x,x=0,!(Kb&1)):0){x=0;Ta(476,Jb|0,la|0)|0;Kb=x;x=0;if(Kb&1){Kb=Hc(0)|0;xu(la);tc=Kb;break}xu(la);x=0;xa(598,ma|0,l|0);Kb=x;x=0;if(!(Kb&1)){Kb=k[ma>>2]|0;Lb=ma+4|0;Mb=k[Lb>>2]|0;do if((Kb|0)==(Mb|0))uc=Kb;else{u=Kb;while(1){x=0;q=Ta(482,h|0,202917)|0;Ob=x;x=0;if(Ob&1){Ga=339;break}x=0;xa(587,na|0,u|0);Ob=x;x=0;if(Ob&1){Ga=339;break}x=0;Ta(485,q|0,na|0)|0;q=x;x=0;if(q&1){Ga=340;break}xu(na);u=u+12|0;if((u|0)==(Mb|0)){Ga=323;break}}if((Ga|0)==323){uc=k[ma>>2]|0;break}else if((Ga|0)==339){u=Hc(0)|0;vc=u}else if((Ga|0)==340){u=Hc(0)|0;xu(na);vc=u}u=k[ma>>2]|0;if(!u){tc=vc;break o}q=k[Lb>>2]|0;if((q|0)==(u|0))wc=u;else{Ob=q;do{q=Ob+-12|0;k[Lb>>2]=q;K2a(q);Ob=k[Lb>>2]|0}while((Ob|0)!=(u|0));wc=k[ma>>2]|0}OBa(wc);tc=vc;break o}while(0);if(uc){Mb=k[Lb>>2]|0;if((Mb|0)==(uc|0))xc=uc;else{Kb=Mb;do{Mb=Kb+-12|0;k[Lb>>2]=Mb;K2a(Mb);Kb=k[Lb>>2]|0}while((Kb|0)!=(uc|0));xc=k[ma>>2]|0}OBa(xc)}x=0;Kb=Ta(482,h|0,202928)|0;Lb=x;x=0;if(!(Lb&1)){x=0;xa(588,oa|0,7);Lb=x;x=0;if(Lb&1){Ga=333;break}x=0;Ta(476,Kb|0,oa|0)|0;Kb=x;x=0;if(Kb&1){Kb=Hc(0)|0;xu(oa);tc=Kb;break}xu(oa);x=0;xa(598,qa|0,l|0);Kb=x;x=0;if(Kb&1){Ga=333;break}Kb=k[qa>>2]|0;Lb=qa+4|0;Mb=k[Lb>>2]|0;do if((Kb|0)==(Mb|0))yc=Kb;else{u=sa+60|0;Ob=sa+64|0;q=sa+32|0;Bb=sa+8|0;Nb=ta+4|0;y=Kb;while(1){x=0;Eb=Ta(482,h|0,202928)|0;Cb=x;x=0;if(Cb&1){Ga=368;break}x=0;Cb=Ta(475,Eb|0,y|0)|0;Eb=x;x=0;if(Eb&1){Ga=368;break}x=0;Eb=Ta(482,Cb|0,202936)|0;Cb=x;x=0;if(Cb&1){Ga=368;break}x=0;Cb=Ta(491,l|0,y|0)|0;lb=x;x=0;if(lb&1){Ga=368;break}x=0;xa(599,ta|0,l|0);lb=x;x=0;if(lb&1){Ga=368;break}x=0;fb(145,sa|0,Cb|0,ta|0);Cb=x;x=0;if(Cb&1){Ga=369;break}x=0;Cb=Ba(561,sa|0)|0;lb=x;x=0;if(lb&1){Ga=370;break}x=0;xa(589,ra|0,Cb|0);Cb=x;x=0;if(Cb&1){Ga=370;break}x=0;Ta(476,Eb|0,ra|0)|0;Eb=x;x=0;if(Eb&1){Ga=371;break}xu(ra);k[sa>>2]=39584;zi(u,k[Ob>>2]|0);yi(q);xu(Bb);zi(ta,k[Nb>>2]|0);y=y+12|0;if((y|0)==(Mb|0)){Ga=351;break}}if((Ga|0)==351){yc=k[qa>>2]|0;break}else if((Ga|0)==368){y=Hc(0)|0;zc=y}else if((Ga|0)==369){y=Hc(0)|0;Ac=y;Ga=373}else if((Ga|0)==370){y=Hc(0)|0;Bc=y;Ga=372}else if((Ga|0)==371){y=Hc(0)|0;xu(ra);Bc=y;Ga=372}if((Ga|0)==372){k[sa>>2]=39584;zi(u,k[Ob>>2]|0);yi(q);xu(Bb);Ac=Bc;Ga=373}if((Ga|0)==373){zi(ta,k[Nb>>2]|0);zc=Ac}y=k[qa>>2]|0;if(!y){tc=zc;break o}Eb=k[Lb>>2]|0;if((Eb|0)==(y|0))Cc=y;else{Cb=Eb;do{Eb=Cb+-12|0;k[Lb>>2]=Eb;K2a(Eb);Cb=k[Lb>>2]|0}while((Cb|0)!=(y|0));Cc=k[qa>>2]|0}OBa(Cc);tc=zc;break o}while(0);if(!yc)break e;Mb=k[Lb>>2]|0;if((Mb|0)==(yc|0))Dc=yc;else{Kb=Mb;do{Mb=Kb+-12|0;k[Lb>>2]=Mb;K2a(Mb);Kb=k[Lb>>2]|0}while((Kb|0)!=(yc|0));Dc=k[qa>>2]|0}OBa(Dc);break e}else Ga=333}else Ga=333}else Ga=333;while(0);if((Ga|0)==333){Jb=Hc(0)|0;tc=Jb}me(tc|0)|0;x=0;Jb=Ta(482,h|0,202707)|0;Db=x;x=0;do if(!(Db&1)?(x=0,xa(593,ua|0,202940),Kb=x,x=0,!(Kb&1)):0){x=0;Ta(485,Jb|0,ua|0)|0;Kb=x;x=0;if(!(Kb&1)){xu(ua);x=0;hb(45);Kb=x;x=0;if(Kb&1){Ga=96;break d}else break e}else{Kb=Hc()|0;Lb=M;xu(ua);Ec=Lb;Fc=Kb;break}}else Ga=383;while(0);if((Ga|0)==383){Jb=Hc()|0;Ec=M;Fc=Jb}x=0;hb(45);Jb=x;x=0;if(!(Jb&1)){rb=Ec;sb=Fc;break d}tb=Hc(0)|0;ub=M;Fg(tb)}while(0);x=0;va(1450,wa|0);Jb=x;x=0;do if(!(Jb&1)){x=0;fb(59,a|0,wa|0,h|0);Db=x;x=0;if(Db&1){Db=Hc(0)|0;k[wa>>2]=24224;K2a(wa+4|0);Gc=Db;Ga=391;break}else{k[wa>>2]=24224;K2a(wa+4|0);break}}else{Db=Hc(0)|0;Gc=Db;Ga=391}while(0);do if((Ga|0)==391){me(Gc|0)|0;x=0;fb(140,a|0,202995,51);Jb=x;x=0;if(!(Jb&1)){x=0;hb(45);Jb=x;x=0;if(Jb&1){Ga=96;break d}else break}Jb=Hc()|0;Db=M;x=0;hb(45);Kb=x;x=0;if(!(Kb&1)){rb=Db;sb=Jb;break d}tb=Hc(0)|0;ub=M;Fg(tb)}while(0);Gg(l);Jb=k[ya>>2]|0;if((Jb|0)==(j|0)){Sf[k[(k[j>>2]|0)+16>>2]&2047](j);xu(i);xu(h);r=e;return}if(!Jb){xu(i);xu(h);r=e;return}Sf[k[(k[Jb>>2]|0)+20>>2]&2047](Jb);xu(i);xu(h);r=e;return}}while(0);if((Ga|0)==96){Ga=Hc()|0;rb=M;sb=Ga}Gg(l);Da=rb;Ea=sb}sb=k[ya>>2]|0;if((sb|0)!=(j|0)){if(sb)Sf[k[(k[sb>>2]|0)+20>>2]&2047](sb)}else Sf[k[(k[sb>>2]|0)+16>>2]&2047](sb);xu(i);za=Da;Aa=Ea;xu(h);Sc(Aa|0)}function Fg(a){a=a|0;me(a|0)|0;fCa()}function Gg(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=a+96|0;c=k[b>>2]|0;if(c){d=a+100|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}K2a(a+84|0);Ai(a+72|0,k[a+76>>2]|0);f=k[a+60>>2]|0;b=f;if(f){i=a+64|0;g=k[i>>2]|0;if((g|0)!=(f|0))k[i>>2]=g+(~((g+-4-b|0)>>>2)<<2);OBa(f)}f=k[a+56>>2]|0;if(f)j0a(f);Di(a+40|0,k[a+44>>2]|0);f=a+24|0;b=k[f>>2]|0;if(b){g=a+28|0;i=k[g>>2]|0;if((i|0)==(b|0))j=b;else{c=i;do{i=c+-36|0;k[g>>2]=i;K2a(c+-12|0);K2a(c+-24|0);K2a(i);c=k[g>>2]|0}while((c|0)!=(b|0));j=k[f>>2]|0}OBa(j)}j=k[a+16>>2]|0;if((j|0)==(a|0)){Sf[k[(k[j>>2]|0)+16>>2]&2047](j);return}if(!j)return;Sf[k[(k[j>>2]|0)+20>>2]&2047](j);return}function Hg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;e=r;r=r+336|0;f=e+224|0;g=e+120|0;h=e+96|0;j=e+48|0;l=e+200|0;m=e+188|0;n=e+72|0;o=e;p=e+168|0;q=e+212|0;s=e+24|0;t=e+156|0;u=e+144|0;fr(f);x=0;xa(588,g|0,0);v=x;x=0;if(v&1){v=Hc()|0;w=v;y=M}else{x=0;v=db(57,f|0,b|0,g|0,0)|0;b=x;x=0;a:do if(b&1)z=17;else{b:do if(v){k[q+4>>2]=0;k[q+8>>2]=0;A=q+4|0;k[q>>2]=A;x=0;B=Ta(482,g|0,202928)|0;C=x;x=0;if(!(C&1)?(x=0,xa(589,s|0,B|0),B=x,x=0,!(B&1)):0){x=0;B=Ba(562,s|0)|0;C=x;x=0;c:do if(!(C&1)){if(B){x=0;xa(601,t|0,s|0);D=x;x=0;if(D&1){z=43;break}D=k[t>>2]|0;E=t+4|0;F=k[E>>2]|0;do if((D|0)!=(F|0)){G=D;while(1){x=0;H=Ta(492,q|0,G|0)|0;I=x;x=0;if(I&1){z=53;break}x=0;I=Ta(475,s|0,G|0)|0;J=x;x=0;if(J&1){z=53;break}x=0;xa(602,u|0,I|0);I=x;x=0;if(I&1){z=53;break}if(!(i[H>>0]&1)){i[H+1>>0]=0;i[H>>0]=0}else{i[k[H+8>>2]>>0]=0;k[H+4>>2]=0}x=0;xa(603,H|0,0);I=x;x=0;if(I&1){z=51;break};k[H>>2]=k[u>>2];k[H+4>>2]=k[u+4>>2];k[H+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;K2a(u);G=G+12|0;if((G|0)==(F|0)){z=36;break}}if((z|0)==36){K=k[t>>2]|0;break}else if((z|0)==51){G=Hc(0)|0;Fg(G)}else if((z|0)==53){G=Hc()|0;H=M;I=k[t>>2]|0;if(!I){L=G;N=H;break c}J=k[E>>2]|0;if((J|0)==(I|0))O=I;else{P=J;do{J=P+-12|0;k[E>>2]=J;K2a(J);P=k[E>>2]|0}while((P|0)!=(I|0));O=k[t>>2]|0}OBa(O);L=G;N=H;break c}}else K=D;while(0);if(K){D=k[E>>2]|0;if((D|0)==(K|0))Q=K;else{F=D;do{D=F+-12|0;k[E>>2]=D;K2a(D);F=k[E>>2]|0}while((F|0)!=(K|0));Q=k[t>>2]|0}OBa(Q)}}x=0;nb(85,a|0,q|0,c|0,d|0);F=x;x=0;if(!(F&1)){xu(s);xi(q,k[A>>2]|0);break b}else z=43}else z=43;while(0);if((z|0)==43){B=Hc()|0;L=B;N=M}xu(s);R=L;S=N}else{B=Hc()|0;R=B;S=M}xi(q,k[A>>2]|0);T=R;U=S;break a}else{x=0;xa(588,h|0,6);B=x;x=0;if(B&1){z=17;break a}x=0;xa(600,m|0,f|0);B=x;x=0;d:do if(B&1)z=18;else{x=0;C=Fa(86,m|0,0,203047)|0;F=x;x=0;if(F&1){F=Hc()|0;V=F;W=M}else{k[l>>2]=k[C>>2];k[l+4>>2]=k[C+4>>2];k[l+8>>2]=k[C+8>>2];k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;x=0;xa(587,j|0,l|0);C=x;x=0;do if(C&1){F=Hc()|0;X=F;Y=M}else{x=0;Ta(485,h|0,j|0)|0;F=x;x=0;if(F&1){F=Hc()|0;E=M;xu(j);X=F;Y=E;break}xu(j);K2a(l);K2a(m);x=0;xa(588,n|0,7);E=x;x=0;if(E&1){z=18;break d}x=0;E=Ta(482,n|0,202707)|0;F=x;x=0;do if(!(F&1)?(x=0,xa(589,o|0,h|0),D=x,x=0,!(D&1)):0){x=0;Ta(476,E|0,o|0)|0;D=x;x=0;if(D&1){D=Hc()|0;I=M;xu(o);Z=D;_=I;break}xu(o);x=0;va(1450,p|0);I=x;x=0;if(!(I&1)){x=0;fb(59,a|0,p|0,n|0);I=x;x=0;if(I&1){I=Hc()|0;D=M;k[p>>2]=24224;K2a(p+4|0);Z=I;_=D;break}else{k[p>>2]=24224;K2a(p+4|0);xu(n);xu(h);break b}}else z=24}else z=24;while(0);if((z|0)==24){E=Hc()|0;Z=E;_=M}xu(n);$=Z;aa=_;break d}while(0);K2a(l);V=X;W=Y}K2a(m);$=V;aa=W}while(0);if((z|0)==18){B=Hc()|0;$=B;aa=M}xu(h);T=$;U=aa;break a}while(0);xu(g);K2a(f+80|0);K2a(f+48|0);B=f+28|0;A=k[B>>2]|0;C=f+40|0;E=k[C>>2]|0;F=A+(((E>>>0)/146|0)<<2)|0;H=f+32|0;if((k[H>>2]|0)==(A|0)){ba=0;ca=f+44|0;da=0}else{G=f+44|0;D=(k[G>>2]|0)+E|0;ba=(k[A+(((D>>>0)/146|0)<<2)>>2]|0)+(((D>>>0)%146|0)*28|0)|0;ca=G;da=(k[F>>2]|0)+(((E>>>0)%146|0)*28|0)|0}E=da;G=F;e:while(1){F=E;do{D=F;if((D|0)==(ba|0))break e;K2a(D+12|0);F=D+28|0}while((F-(k[G>>2]|0)|0)!=4088);F=G+4|0;E=k[F>>2]|0;G=F}k[ca>>2]=0;G=k[H>>2]|0;E=k[B>>2]|0;F=G-E>>2;D=E;if(F>>>0>2){A=E;do{OBa(k[A>>2]|0);E=(k[B>>2]|0)+4|0;k[B>>2]=E;I=k[H>>2]|0;A=E;P=I-A>>2}while(P>>>0>2);ea=I;fa=P;ga=E}else{ea=G;fa=F;ga=D}A=ea;switch(fa|0){case 1:{k[C>>2]=73;break}case 2:{k[C>>2]=146;break}default:{}}if((ga|0)!=(A|0)){E=ga;do{OBa(k[E>>2]|0);E=E+4|0}while((E|0)!=(A|0));A=k[B>>2]|0;E=k[H>>2]|0;if((E|0)!=(A|0))k[H>>2]=E+(~((E+-4-A|0)>>>2)<<2)}A=k[f+24>>2]|0;if(!A){yi(f);r=e;return}OBa(A);yi(f);r=e;return}while(0);if((z|0)==17){z=Hc()|0;T=z;U=M}xu(g);w=T;y=U}K2a(f+80|0);K2a(f+48|0);U=f+28|0;y=k[U>>2]|0;T=f+40|0;g=k[T>>2]|0;z=y+(((g>>>0)/146|0)<<2)|0;e=f+32|0;if((k[e>>2]|0)==(y|0)){ha=0;ia=f+44|0;ja=0}else{ga=f+44|0;fa=(k[ga>>2]|0)+g|0;ha=(k[y+(((fa>>>0)/146|0)<<2)>>2]|0)+(((fa>>>0)%146|0)*28|0)|0;ia=ga;ja=(k[z>>2]|0)+(((g>>>0)%146|0)*28|0)|0}g=ja;ja=z;f:while(1){z=g;do{ga=z;if((ga|0)==(ha|0))break f;K2a(ga+12|0);z=ga+28|0}while((z-(k[ja>>2]|0)|0)!=4088);z=ja+4|0;g=k[z>>2]|0;ja=z}k[ia>>2]=0;ia=k[e>>2]|0;ja=k[U>>2]|0;g=ia-ja>>2;ha=ja;if(g>>>0>2){z=ja;do{OBa(k[z>>2]|0);ja=(k[U>>2]|0)+4|0;k[U>>2]=ja;H=k[e>>2]|0;z=ja;B=H-z>>2}while(B>>>0>2);ka=H;la=B;ma=ja}else{ka=ia;la=g;ma=ha}ha=ka;switch(la|0){case 1:{k[T>>2]=73;break}case 2:{k[T>>2]=146;break}default:{}}if((ma|0)!=(ha|0)){T=ma;do{OBa(k[T>>2]|0);T=T+4|0}while((T|0)!=(ha|0));ha=k[U>>2]|0;U=k[e>>2]|0;if((U|0)!=(ha|0))k[e>>2]=U+(~((U+-4-ha|0)>>>2)<<2)}ha=k[f+24>>2]|0;if(!ha){yi(f);Sc(w|0)}OBa(ha);yi(f);Sc(w|0)}function Ig(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=bj(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(40)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}b=f+28|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function Jg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+32|0;e=d+24|0;f=d+12|0;g=d;h=f+4|0;k[h>>2]=0;i=f+8|0;k[i>>2]=0;j=f+4|0;k[f>>2]=j;x=0;fb(140,g|0,329672,0);l=x;x=0;do if(!(l&1)){m=bj(f,e,g)|0;n=k[m>>2]|0;if(!n){x=0;o=Ba(563,40)|0;p=x;x=0;if(!(p&1)){p=o+16|0;k[p>>2]=k[g>>2];k[p+4>>2]=k[g+4>>2];k[p+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;p=o+28|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;p=k[e>>2]|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=p;k[m>>2]=o;p=k[k[f>>2]>>2]|0;if(!p)q=o;else{k[f>>2]=p;q=k[m>>2]|0}ui(k[h>>2]|0,q);k[i>>2]=(k[i>>2]|0)+1;s=o;t=7}}else{s=n;t=7}if((t|0)==7?(x=0,Ta(493,s+28|0,b|0)|0,n=x,x=0,!(n&1)):0){K2a(g);x=0;nb(85,a|0,f|0,c|0,0);n=x;x=0;if(n&1)break;xi(f,k[j>>2]|0);r=d;return}n=Hc()|0;o=M;K2a(g);u=o;v=n;w=k[j>>2]|0;xi(f,w);Sc(v|0)}while(0);g=Hc()|0;u=M;v=g;w=k[j>>2]|0;xi(f,w);Sc(v|0)}function Kg(){return ((i[44396]&1)==0?44397:k[11101]|0)|0}function Lg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+32|0;d=c+12|0;e=c;q2a(e,a,RLa(a)|0);x=0;fb(146,d|0,e|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(e);Sc(b|0)}if(!(i[20276]&1)){i[20277]=0;i[20276]=0}else{i[k[5071]>>0]=0;k[5070]=0}x=0;xa(603,20276,0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{k[5069]=k[d>>2];k[5070]=k[d+4>>2];k[5071]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);K2a(e);r=c;return ((i[20276]&1)==0?20277:k[5071]|0)|0}return 0}function Mg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+32|0;d=c+12|0;e=c;q2a(e,a,RLa(a)|0);x=0;nb(86,d|0,e|0,b|0,0);b=x;x=0;if(b&1){b=Hc()|0;K2a(e);Sc(b|0)}if(!(i[20276]&1)){i[20277]=0;i[20276]=0}else{i[k[5071]>>0]=0;k[5070]=0}x=0;xa(603,20276,0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{k[5069]=k[d>>2];k[5070]=k[d+4>>2];k[5071]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);K2a(e);r=c;return ((i[20276]&1)==0?20277:k[5071]|0)|0}return 0}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d+12|0;f=d;q2a(f,a,RLa(a)|0);x=0;nb(86,e|0,f|0,b|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;K2a(f);Sc(c|0)}if(!(i[20276]&1)){i[20277]=0;i[20276]=0}else{i[k[5071]>>0]=0;k[5070]=0}x=0;xa(603,20276,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else{k[5069]=k[e>>2];k[5070]=k[e+4>>2];k[5071]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);K2a(f);r=d;return ((i[20276]&1)==0?20277:k[5071]|0)|0}return 0}function Og(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=20300;a=b+56|0;k[a>>2]=20320;c=b+4|0;k[c>>2]=20392;K2a(b+36|0);obb(c);mab(a);return}function Pg(a){a=a|0;var b=0,c=0;k[a>>2]=20300;b=a+56|0;k[b>>2]=20320;c=a+4|0;k[c>>2]=20392;K2a(a+36|0);obb(c);mab(b);OBa(a);return}function Qg(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=20300;a=b+56|0;k[a>>2]=20320;c=b+4|0;k[c>>2]=20392;K2a(b+36|0);obb(c);mab(a);OBa(b);return}function Rg(a){a=a|0;k[a>>2]=20392;K2a(a+32|0);obb(a);return}function Sg(a){a=a|0;k[a>>2]=20392;K2a(a+32|0);obb(a);OBa(a);return}function Tg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=b+44|0;h=k[g>>2]|0;j=b+24|0;l=k[j>>2]|0;m=l;if(h>>>0>>0){k[g>>2]=l;n=m}else n=h;h=f&24;if(!h){g=a;k[g>>2]=0;k[g+4>>2]=0;g=a+8|0;k[g>>2]=-1;k[g+4>>2]=-1;return}if((e|0)==1&(h|0)==24){h=a;k[h>>2]=0;k[h+4>>2]=0;h=a+8|0;k[h>>2]=-1;k[h+4>>2]=-1;return}a:do switch(e|0){case 0:{o=0;p=0;break}case 1:{if(!(f&8)){h=m-(k[b+20>>2]|0)|0;o=h;p=((h|0)<0)<<31>>31;break a}else{h=(k[b+12>>2]|0)-(k[b+8>>2]|0)|0;o=h;p=((h|0)<0)<<31>>31;break a}break}case 2:{h=b+32|0;if(!(i[h>>0]&1))q=h+1|0;else q=k[b+40>>2]|0;h=n-q|0;o=h;p=((h|0)<0)<<31>>31;break}default:{h=a;k[h>>2]=0;k[h+4>>2]=0;h=a+8|0;k[h>>2]=-1;k[h+4>>2]=-1;return}}while(0);q=Hyb(o|0,p|0,c|0,d|0)|0;d=M;if((d|0)>=0){c=b+32|0;if(!(i[c>>0]&1))r=c+1|0;else r=k[b+40>>2]|0;c=n-r|0;r=((c|0)<0)<<31>>31;if(!((r|0)<(d|0)|(r|0)==(d|0)&c>>>0>>0)){c=f&8;if(!((q|0)==0&(d|0)==0)){if((c|0)!=0?(k[b+12>>2]|0)==0:0){r=a;k[r>>2]=0;k[r+4>>2]=0;r=a+8|0;k[r>>2]=-1;k[r+4>>2]=-1;return}if((f&16|0)!=0&(l|0)==0){l=a;k[l>>2]=0;k[l+4>>2]=0;l=a+8|0;k[l>>2]=-1;k[l+4>>2]=-1;return}}if(c){k[b+12>>2]=(k[b+8>>2]|0)+q;k[b+16>>2]=n}if(f&16)k[j>>2]=(k[b+20>>2]|0)+q;b=a;k[b>>2]=0;k[b+4>>2]=0;b=a+8|0;k[b>>2]=q;k[b+4>>2]=d;return}}d=a;k[d>>2]=0;k[d+4>>2]=0;d=a+8|0;k[d>>2]=-1;k[d+4>>2]=-1;return}function Ug(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=c+8|0;_f[k[(k[b>>2]|0)+16>>2]&127](a,b,k[e>>2]|0,k[e+4>>2]|0,0,d);return}function Vg(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+44|0;c=k[b>>2]|0;d=k[a+24>>2]|0;if(c>>>0>>0){k[b>>2]=d;e=d}else e=c;if(!(k[a+48>>2]&8)){f=-1;return f|0}c=a+16|0;d=k[c>>2]|0;b=k[a+12>>2]|0;if(d>>>0>>0){k[c>>2]=e;g=e}else g=d;if(b>>>0>=g>>>0){f=-1;return f|0}f=l[b>>0]|0;return f|0}function Wg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=a+44|0;d=k[c>>2]|0;e=k[a+24>>2]|0;if(d>>>0>>0){k[c>>2]=e;f=e}else f=d;d=f;f=a+8|0;e=k[f>>2]|0;c=a+12|0;g=k[c>>2]|0;h=e;if(e>>>0>=g>>>0){j=-1;return j|0}if((b|0)==-1){k[f>>2]=e;k[c>>2]=g+-1;k[a+16>>2]=d;j=0;return j|0}if(!(k[a+48>>2]&16)){e=b&255;l=g+-1|0;if(e<<24>>24==(i[l>>0]|0)){m=e;n=l}else{j=-1;return j|0}}else{m=b&255;n=g+-1|0}k[f>>2]=h;k[c>>2]=n;k[a+16>>2]=d;i[n>>0]=m;j=b;return j|0}function Xg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+16|0;d=c;if((b|0)==-1){e=0;r=c;return e|0}f=a+12|0;g=a+8|0;h=(k[f>>2]|0)-(k[g>>2]|0)|0;j=a+24|0;l=k[j>>2]|0;m=a+28|0;n=k[m>>2]|0;do if((l|0)==(n|0)){o=a+48|0;if(!(k[o>>2]&16)){e=-1;r=c;return e|0}p=a+20|0;q=k[p>>2]|0;s=l-q|0;t=a+44|0;u=(k[t>>2]|0)-q|0;q=a+32|0;x=0;xa(605,q|0,0);v=x;x=0;if(!(v&1)){if(!(i[q>>0]&1))w=10;else w=(k[q>>2]&-2)+-1|0;x=0;fb(147,q|0,w|0,0);v=x;x=0;if(!(v&1)){v=i[q>>0]|0;if(!(v&1)){y=q+1|0;z=(v&255)>>>1}else{y=k[a+40>>2]|0;z=k[a+36>>2]|0}v=y+z|0;k[p>>2]=y;k[m>>2]=v;p=y+s|0;k[j>>2]=p;s=y+u|0;k[t>>2]=s;A=t;B=o;C=t;D=p;E=s;F=v;break}}v=Hc(0)|0;me(v|0)|0;ge();e=-1;r=c;return e|0}else{v=a+44|0;A=v;B=a+48|0;C=v;D=l;E=k[v>>2]|0;F=n}while(0);n=D+1|0;k[d>>2]=n;l=k[(n>>>0>>0?C:d)>>2]|0;k[A>>2]=l;if(k[B>>2]&8){B=a+32|0;if(!(i[B>>0]&1))G=B+1|0;else G=k[a+40>>2]|0;k[g>>2]=G;k[f>>2]=G+h;k[a+16>>2]=l}if((D|0)==(F|0)){e=cg[k[(k[a>>2]|0)+52>>2]&1023](a,b&255)|0;r=c;return e|0}else{k[j>>2]=n;i[D>>0]=b;e=b&255;r=c;return e|0}return 0}function Yg(a,b){a=a|0;b=b|0;if(!b)return;Yg(a,k[b>>2]|0);Yg(a,k[b+4>>2]|0);a=k[b+24>>2]|0;if(a)j0a(a);OBa(b);return}function Zg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=k[b>>2]|0;g=k[b+4>>2]|0;if((f|0)==(g|0)){r=c;return}b=a+8|0;h=f;a:while(1){f=k[h>>2]|0;do if(f){i=iDa(f,5224,5424,0)|0;k[d>>2]=i;j=i;if(i){i=k[e>>2]|0;if((i|0)==(k[b>>2]|0)){x=0;xa(606,a|0,d|0);l=x;x=0;if(l&1)break a;else break}else{k[i>>2]=j;k[e>>2]=(k[e>>2]|0)+4;break}}}else k[d>>2]=0;while(0);h=h+8|0;if((h|0)==(g|0)){m=3;break}}if((m|0)==3){r=c;return}c=Hc()|0;m=k[a>>2]|0;if(!m)Sc(c|0);a=k[e>>2]|0;if((a|0)!=(m|0))k[e>>2]=a+(~((a+-4-m|0)>>>2)<<2);OBa(m);Sc(c|0)}function _g(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function $g(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+20>>2]&1023](a,b)|0}function ah(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+4>>2]&1023](a,b)|0}function bh(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=0;k[a+4>>2]=0;return}function ch(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;if((c+-39|0)>>>0>=6){k[a>>2]=0;k[a+4>>2]=0;r=e;return}k[f>>2]=k[b+4>>2];c=f+4|0;g=k[b+8>>2]|0;if(!g){k[c>>2]=0;h=Rd(4)|0;k[h>>2]=70084;Gf(h|0,17384,1289)}b=l0a(g)|0;k[c>>2]=b;if(!b){h=Rd(4)|0;k[h>>2]=70084;Gf(h|0,17384,1289)}x=0;fb(148,a|0,f|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;f=k[c>>2]|0;if(!f)Sc(d|0);j0a(f);Sc(d|0)}else{d=k[c>>2]|0;if(!d){r=e;return}j0a(d);r=e;return}}function dh(a,b){a=a|0;b=b|0;var c=0;c=Vf[k[k[a>>2]>>2]&1023](a)|0;return (c|0)==(Vf[k[k[b>>2]>>2]&1023](b)|0)|0}function eh(a,b){a=a|0;b=b|0;return (cg[k[(k[a>>2]|0)+20>>2]&1023](a,b)|0)^1|0}function fh(a,b){a=a|0;b=b|0;return 0}function gh(a){a=a|0;return cg[k[(k[a>>2]|0)+28>>2]&1023](a,1)|0}function hh(a){a=a|0;return 0}function ih(a,b){a=a|0;b=b|0;k[a>>2]=1;k[a+32>>2]=1;return}function jh(a){a=a|0;return 32}function kh(a){a=a|0;return 1}function lh(a){a=a|0;return 1}function mh(a){a=a|0;return 0}function nh(a){a=a|0;return 1}function oh(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function ph(a,b){a=a|0;b=b|0;return 0}function qh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[c>>2]|0;if(cg[k[(k[d>>2]|0)+68>>2]&1023](d,0)|0){Tf[k[(k[b>>2]|0)+64>>2]&2047](a,b);return}k[a>>2]=k[c>>2];b=k[c+4>>2]|0;k[a+4>>2]=b;if(!b)return;h0a(b);return}function rh(a,b,c){a=a|0;b=b|0;c=c|0;jg[k[(k[b>>2]|0)+76>>2]&511](a,b,1);return}function sh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+96|0;b=c+72|0;a=c+32|0;d=c+16|0;e=c;c=a;f=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(f|0));c=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;h=g+-4|0;i=g+16|0;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;K2a(b);k[a+4>>2]=20924;k[a>>2]=20888;k[c>>2]=20948;x=0;fb(140,e|0,203323,50);b=x;x=0;if(b&1){b=Hc()|0;l=M;m=b}else{k[d>>2]=21048;b=d+4|0;x=0;xa(604,b|0,e|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,a|0,d|0)|0;a=x;x=0;if(!(a&1)){x=0;nb(87,n|0,203374,203459,242);x=0}n=Hc()|0;a=M;k[d>>2]=21048;K2a(b);o=a;p=n}K2a(e);l=o;m=p}k[g>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[c>>2]=20796;c=k[f>>2]|0;if(!c)Sc(m|0);x=0;j=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!j)Sc(m|0);k[f>>2]=0;Sc(m|0)}function th(a,b){a=a|0;b=b|0;k[a>>2]=0;k[a+4>>2]=0;return}function uh(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+88>>2]&2047](a,b);return}function vh(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=0;k[a+4>>2]=0;return}function wh(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}function xh(a,b){a=a|0;b=b|0;if(!b)return;else{xh(a,k[b>>2]|0);xh(a,k[b+4>>2]|0);yh(b+16|0);OBa(b);return}}function yh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+4|0;a=k[b>>2]|0;k[b>>2]=0;if(!a)return;b=a+12|0;c=k[b>>2]|0;k[b>>2]=0;if(c){zh(c+40|0,k[c+44>>2]|0);OBa(c)}c=k[a>>2]|0;if(c){b=a+4|0;d=k[b>>2]|0;if((d|0)==(c|0))e=c;else{f=d;do{d=f+-24|0;k[b>>2]=d;g=k[f+-8>>2]|0;if(g)j0a(g);K2a(d);f=k[b>>2]|0}while((f|0)!=(c|0));e=k[a>>2]|0}OBa(e)}OBa(a);return}function zh(a,b){a=a|0;b=b|0;if(!b)return;else{zh(a,k[b>>2]|0);zh(a,k[b+4>>2]|0);OBa(b);return}}function Ah(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=20980;j=e+-4|0;k[j>>2]=21008;a=e+16|0;k[a>>2]=21032;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=20924;k[f>>2]=20888;k[h>>2]=20948;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1451,f|0);x=0;d=Hc()|0;k[e>>2]=20980;k[j>>2]=21008;k[a>>2]=21032;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function Bh(a){a=a|0;k[a>>2]=21048;K2a(a+4|0);return}function Ch(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=20980;k[b+-4>>2]=21008;k[b+16>>2]=21032;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Dh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=20980;h=g+-4|0;k[h>>2]=21008;n=g+16|0;k[n>>2]=21032;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=20924;k[c>>2]=20888;k[f>>2]=20948;x=0;xa(607,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,208,52);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=20980;k[h>>2]=21008;k[n>>2]=21032;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function Eh(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=20728;k[b+-4>>2]=20756;k[b+16>>2]=20780;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Fh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=20728;h=g+-4|0;k[h>>2]=20756;i=g+16|0;k[i>>2]=20780;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=20636;k[a>>2]=20592;k[a+20>>2]=20660;k[a+40>>2]=20688;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=20728;k[h>>2]=20756;k[i>>2]=20780;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Gh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=k[b+4>>2]|0;do if(c){x=0;d=Ba(k[(k[c>>2]|0)+20>>2]|0,c|0)|0;e=x;x=0;if(e&1){e=Hc()|0;f=e;g=M;Sc(f|0)}if(d){x=0;va(k[(k[d>>2]|0)+12>>2]|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;h=M;x=0;Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;i=x;x=0;if(!(i&1)){j=e;l=h;m=d;break}h=Hc(0)|0;Fg(h)}else{x=0;Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;h=x;x=0;if(!(h&1)){n=d;o=10;break}d=Hc(0)|0;Fg(d)}}else{n=0;o=10}}else{n=0;o=10}while(0);a:do if((o|0)==10){k[a+12>>2]=k[b+12>>2];k[a+16>>2]=k[b+16>>2];k[a+8>>2]=k[b+8>>2];c=a+4|0;d=k[c>>2]|0;do if(d){x=0;h=Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;e=x;x=0;if(e&1){e=Hc()|0;i=M;if(!n){f=e;g=i}else{j=e;l=i;m=n;break a}Sc(f|0)}else{if(!h)break;k[c>>2]=0;break}}while(0);k[c>>2]=n;if(!n)return;x=0;va(k[(k[n>>2]|0)+12>>2]|0,n|0);d=x;x=0;if(d&1){d=Hc()|0;j=d;l=M;m=n;break}x=0;Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else return}while(0);x=0;Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;m=x;x=0;if(m&1){m=Hc(0)|0;Fg(m)}else{f=j;g=l;Sc(f|0)}}function Hh(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=20980;k[b+-4>>2]=21008;k[b+16>>2]=21032;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Ih(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+(k[(k[a>>2]|0)+-16>>2]|0)|0;a=b+4|0;c=i[a>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[b+8>>2]|0;if(!e){f=kCa(b+(k[(k[b>>2]|0)+-20>>2]|0)|0)|0;return f|0}if(d){f=a+1|0;return f|0}else{f=k[b+12>>2]|0;return f|0}return 0}function Jh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+4|0;c=i[b>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+8>>2]|0;if(!e){f=kCa(a+(k[(k[a>>2]|0)+-20>>2]|0)|0)|0;return f|0}if(d){f=b+1|0;return f|0}else{f=k[a+12>>2]|0;return f|0}return 0}function Kh(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=20980;k[a+-4>>2]=21008;k[a+16>>2]=21032;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Lh(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=20980;k[a+-4>>2]=21008;k[a+16>>2]=21032;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Mh(a){a=a|0;var b=0,c=0;k[a>>2]=20828;k[a+16>>2]=20852;K2a(a+4|0);k[a+16>>2]=20796;b=a+20|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Nh(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=20828;k[a+16>>2]=20852;K2a(a+4|0);k[a+16>>2]=20796;b=a+20|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Oh(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=20828;a=b+16|0;k[a>>2]=20852;K2a(b+4|0);k[a>>2]=20796;a=b+20|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Ph(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=20828;a=b+16|0;k[a>>2]=20852;K2a(b+4|0);k[a>>2]=20796;a=b+20|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Qh(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=20728;k[b+-4>>2]=20756;k[b+16>>2]=20780;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Rh(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(150,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function Sh(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(609,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,208,52)}function Th(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=20728;k[a+-4>>2]=20756;k[a+16>>2]=20780;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Uh(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=20728;k[a+-4>>2]=20756;k[a+16>>2]=20780;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Vh(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(150,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function Wh(a){a=a|0;Sh(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Xh(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=20728;k[a+-4>>2]=20756;k[a+16>>2]=20780;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Yh(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=20728;k[a+-4>>2]=20756;k[a+16>>2]=20780;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Zh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=20728;h=g+-4|0;k[h>>2]=20756;i=g+16|0;k[i>>2]=20780;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=20636;k[a>>2]=20592;k[a+20>>2]=20660;k[a+40>>2]=20688;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=20728;k[h>>2]=20756;k[i>>2]=20780;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function _h(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=20728;k[h+-4>>2]=20756;k[h+16>>2]=20780;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=20636;k[a>>2]=20592;k[d>>2]=20660;k[a+40>>2]=20688;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function $h(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function ai(a,b){a=a|0;b=b|0;ci(a,b);return}function bi(a){a=a|0;k[a>>2]=21048;K2a(a+4|0);OBa(a);return}function ci(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+80|0;d=c+64|0;e=c+60|0;f=c+48|0;g=c+36|0;h=c+24|0;j=c+12|0;l=c;q2a(j,203764,20);k[e>>2]=(i[j>>0]&1)==0?j+1|0:k[j+8>>2]|0;x=0;k[d>>2]=k[e>>2];Fa(91,j|0,d|0,91)|0;d=x;x=0;if(d&1){d=Hc()|0;m=M;n=d;K2a(j);Sc(n|0)};k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;d=Ta(484,h|0,279643)|0;e=x;x=0;if(e&1){e=Hc()|0;o=M;p=e}else{k[g>>2]=k[d>>2];k[g+4>>2]=k[d+4>>2];k[g+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(610,l|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;q=M;s=b}else{b=i[l>>0]|0;d=(b&1)==0;x=0;e=Fa(88,g|0,(d?l+1|0:k[l+8>>2]|0)|0,(d?(b&255)>>>1:k[l+4>>2]|0)|0)|0;b=x;x=0;do if(!(b&1)){k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(605,f|0,10);d=x;x=0;if(d&1){d=Hc()|0;t=M;K2a(f);u=t;v=d;break}else{k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);K2a(l);K2a(g);K2a(h);K2a(j);r=c;return}}else{d=Hc()|0;u=M;v=d}while(0);K2a(l);q=u;s=v}K2a(g);o=q;p=s}K2a(h);m=o;n=p;K2a(j);Sc(n|0)}function di(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+160|0;d=c+136|0;e=c;f=e+56|0;g=e+4|0;k[e>>2]=20356;k[f>>2]=20376;x=0;xa(582,e+56|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;j=M;l=h;mab(f);Sc(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,g|0);h=x;x=0;do if(!(h&1)){k[g>>2]=20392;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,g|0,d|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(d);K2a(m);obb(g);p=o;q=n;break}K2a(d);n=i[b>>0]|0;o=(n&1)==0;x=0;Fa(92,e|0,(o?b+1|0:k[b+8>>2]|0)|0,(o?(n&255)>>>1:k[b+4>>2]|0)|0)|0;n=x;x=0;if(n&1){s=Hc()|0;t=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);Sc(s|0)}x=0;xa(584,a|0,g|0);n=x;x=0;if(n&1){s=Hc()|0;t=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);Sc(s|0)}else{k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);r=c;return}}else{m=Hc()|0;p=M;q=m}while(0);j=p;l=q;mab(f);Sc(l|0)}function ei(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;d=r;r=r+16|0;e=d+12|0;f=d;g=d+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a}else{do if(i[f>>0]|0){j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[g>>2]=k[j+24>>2];o=k[j+4>>2]|0;p=b+c|0;q=j+76|0;s=k[q>>2]|0;do if((s|0)==-1){x=0;t=Ba(564,j|0)|0;u=x;x=0;if(u&1)v=13;else{k[e>>2]=t;x=0;t=Ta(495,e|0,74148)|0;u=x;x=0;if(!(u&1)?(x=0,u=Ta(k[(k[t>>2]|0)+28>>2]|0,t|0,32)|0,t=x,x=0,!(t&1)):0){$pb(e);t=u<<24>>24;k[q>>2]=t;w=t;v=9;break}t=Hc(0)|0;$pb(e);y=t}}else{w=s;v=9}while(0);if((v|0)==9){x=0;k[e>>2]=k[g>>2];s=za(80,e|0,b|0,((o&176|0)==32?p:b)|0,p|0,j|0,w&255|0)|0;q=x;x=0;if(!(q&1)){if(s)break;s=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,s|0,k[s+16>>2]|5|0);s=x;x=0;if(!(s&1))break;else v=13}else v=13}if((v|0)==13){s=Hc(0)|0;y=s}Yeb(f);l=y;m=a;n=a;break a}while(0);Yeb(f);r=d;return a|0}while(0);me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);n=x;x=0;if(!(n&1)){ge();r=d;return a|0}a=Hc()|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(a|0);return 0}function fi(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;g=r;r=r+16|0;h=g;j=k[a>>2]|0;if(!j){l=0;r=g;return l|0}m=d;d=b;n=m-d|0;o=e+12|0;e=k[o>>2]|0;p=(e|0)>(n|0)?e-n|0:0;n=c;e=n-d|0;if((e|0)>0?(Xf[k[(k[j>>2]|0)+48>>2]&255](j,b,e)|0)!=(e|0):0){k[a>>2]=0;l=0;r=g;return l|0}do if((p|0)>0){D2a(h,p,f);x=0;e=Fa(k[(k[j>>2]|0)+48>>2]|0,j|0,((i[h>>0]&1)==0?h+1|0:k[h+8>>2]|0)|0,p|0)|0;b=x;x=0;if(b&1){b=Hc()|0;K2a(h);Sc(b|0)}if((e|0)==(p|0)){K2a(h);break}k[a>>2]=0;K2a(h);l=0;r=g;return l|0}while(0);h=m-n|0;if((h|0)>0?(Xf[k[(k[j>>2]|0)+48>>2]&255](j,c,h)|0)!=(h|0):0){k[a>>2]=0;l=0;r=g;return l|0}k[o>>2]=0;l=j;r=g;return l|0}function gi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;x=0;a=Ba(563,16)|0;d=x;x=0;if(d&1){d=Hc(0)|0;me(d|0)|0;if(b)Sf[k[(k[b>>2]|0)+8>>2]&2047](b);x=0;hb(46);x=0;d=Hc()|0;x=0;hb(45);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}k[a+4>>2]=1;k[a+8>>2]=1;k[a>>2]=21068;k[a+12>>2]=b;b=k[c>>2]|0;k[c>>2]=a;if(!b)return;a=b+4|0;c=k[a>>2]|0;k[a>>2]=c+-1;if((c|0)!=1)return;x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);c=x;x=0;if(c&1){f=Hc(0)|0;g=M;Fg(f)}c=b+8|0;a=k[c>>2]|0;k[c>>2]=a+-1;if((a|0)!=1)return;x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){f=Hc(0)|0;g=M;Fg(f)}else return}function hi(a){a=a|0;OBa(a);return}function ii(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Sf[k[(k[b>>2]|0)+8>>2]&2047](b);return}function ji(a){a=a|0;if(!a)return;Sf[k[(k[a>>2]|0)+4>>2]&2047](a);return}function ki(a,b){a=a|0;b=b|0;return 0}function li(a){a=a|0;return 0}function mi(a){a=a|0;return}function ni(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+176|0;d=c;e=c+24|0;f=c+160|0;g=c+12|0;a:do if(!b){h=a+16|0;j=h;l=h}else{h=e+56|0;m=e+4|0;k[e>>2]=20356;k[h>>2]=20376;x=0;xa(582,e+56|0,m|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n;mab(h);Sc(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,m|0);n=x;x=0;do if(n&1){q=Hc()|0;s=M;t=q}else{k[m>>2]=20392;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,m|0,d|0);u=x;x=0;if(u&1){u=Hc()|0;v=M;K2a(d);K2a(q);obb(m);s=v;t=u;break}K2a(d);u=RLa(b)|0;x=0;Fa(92,e|0,b|0,u|0)|0;u=x;x=0;b:do if(!(u&1)){v=k[a+4>>2]|0;w=a+8|0;c:do if((v|0)!=(w|0)){y=f+8|0;z=f+1|0;A=f+4|0;B=v;while(1){C=k[B+20>>2]|0;x=0;xa(k[k[C>>2]>>2]|0,f|0,C|0);C=x;x=0;if(C&1){D=15;break}C=i[f>>0]|0;E=(C&1)==0;x=0;Fa(92,e|0,(E?z:k[y>>2]|0)|0,(E?(C&255)>>>1:k[A>>2]|0)|0)|0;C=x;x=0;if(C&1)break;K2a(f);C=k[B+4>>2]|0;if(!C){E=B;while(1){F=k[E+8>>2]|0;if((k[F>>2]|0)==(E|0)){G=F;break}else E=F}}else{E=C;while(1){F=k[E>>2]|0;if(!F){G=E;break}else E=F}}if((G|0)==(w|0))break c;else B=G}if((D|0)==15){B=Hc()|0;H=B;I=M;break b}B=Hc()|0;A=M;K2a(f);J=B;K=A;k[e>>2]=20300;k[h>>2]=20320;k[m>>2]=20392;K2a(q);obb(m);mab(h);Sc(J|0)}while(0);x=0;xa(584,g|0,m|0);w=x;x=0;if(!(w&1)){w=a+16|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];k[g>>2]=k[w>>2];k[g+4>>2]=k[w+4>>2];k[g+8>>2]=k[w+8>>2];k[w>>2]=k[d>>2];k[w+4>>2]=k[d+4>>2];k[w+8>>2]=k[d+8>>2];K2a(g);k[e>>2]=20300;k[h>>2]=20320;k[m>>2]=20392;K2a(q);obb(m);mab(h);j=w;l=w;break a}else D=16}else D=16;while(0);if((D|0)==16){u=Hc()|0;H=u;I=M}J=H;K=I;k[e>>2]=20300;k[h>>2]=20320;k[m>>2]=20392;K2a(q);obb(m);mab(h);Sc(J|0)}while(0);o=s;p=t;mab(h);Sc(p|0)}while(0);if(!(i[j>>0]&1)){L=l+1|0;r=c;return L|0}else{L=k[a+24>>2]|0;r=c;return L|0}return 0}function oi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=b+8|0;b=k[d>>2]|0;if(b){e=k[(k[c>>2]|0)+4>>2]|0;c=d;f=b;a:while(1){b=f;while(1){if((k[(k[b+16>>2]|0)+4>>2]|0)>>>0>=e>>>0){g=b;break}b=k[b+4>>2]|0;if(!b){h=c;break a}}f=k[g>>2]|0;if(!f){h=g;break}else c=g}if((h|0)!=(d|0)?e>>>0>=(k[(k[h+16>>2]|0)+4>>2]|0)>>>0:0)i=h;else j=9}else j=9;if((j|0)==9)i=d;if((d|0)==(i|0)){k[a>>2]=0;k[a+4>>2]=0;return}k[a>>2]=k[i+20>>2];d=k[i+24>>2]|0;k[a+4>>2]=d;if(!d)return;a=d+4|0;k[a>>2]=(k[a>>2]|0)+1;return}function pi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=ti(a+4|0,c)|0;c=k[b>>2]|0;e=k[b+4>>2]|0;if(e){b=e+4|0;k[b>>2]=(k[b>>2]|0)+1}k[d>>2]=c;c=d+4|0;d=k[c>>2]|0;k[c>>2]=e;if((d|0)!=0?(e=d+4|0,c=k[e>>2]|0,k[e>>2]=c+-1,(c|0)==1):0){x=0;va(k[(k[d>>2]|0)+8>>2]|0,d|0);c=x;x=0;if(c&1){f=Hc(0)|0;g=M;Fg(f)}c=d+8|0;e=k[c>>2]|0;k[c>>2]=e+-1;if((e|0)==1?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){f=Hc(0)|0;g=M;Fg(f)}}f=a+16|0;if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0;return}else{i[k[a+24>>2]>>0]=0;k[a+20>>2]=0;return}}function qi(a){a=a|0;var b=0;b=a+28|0;k[b>>2]=(k[b>>2]|0)+1;return}function ri(a){a=a|0;var b=0,c=0,d=0;b=a+28|0;c=(k[b>>2]|0)+-1|0;k[b>>2]=c;if(c){d=0;return d|0}k[a>>2]=21100;K2a(a+16|0);vi(a+4|0,k[a+8>>2]|0);OBa(a);d=1;return d|0}function si(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=r;r=r+16|0;c=b+12|0;d=b+8|0;e=b+4|0;f=b;x=0;g=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;i=h;j=M;Sc(i|0)}k[g>>2]=21100;h=g+4|0;l=g+8|0;k[l>>2]=0;k[g+12>>2]=0;k[h>>2]=l;l=g+16|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[g+28>>2]=1;l=a+4|0;if((h|0)==(l|0)){r=b;return g|0}k[e>>2]=k[l>>2];k[f>>2]=a+8;x=0;k[d>>2]=k[e>>2];k[c>>2]=k[f>>2];fb(152,h|0,d|0,c|0);c=x;x=0;if(!(c&1)){r=b;return g|0}b=Hc()|0;c=M;x=0;Ba(k[(k[g>>2]|0)+16>>2]|0,g|0)|0;g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else{i=b;j=c;Sc(i|0)}return 0}function ti(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=k[(k[b>>2]|0)+4>>2]|0;h=f;while(1){i=k[(k[h+16>>2]|0)+4>>2]|0;if(g>>>0>>0){j=k[h>>2]|0;if(!j){l=h;m=h;n=5;break}else o=j}else{if(i>>>0>=g>>>0){p=h;n=10;break}i=h+4|0;j=k[i>>2]|0;if(!j){q=i;s=h;n=9;break}else o=j}h=o}if((n|0)==5){k[d>>2]=m;t=l;u=m;break}else if((n|0)==9){k[d>>2]=s;t=q;u=s;break}else if((n|0)==10){k[d>>2]=p;v=d;w=p;x=p;n=12;break}}else{k[d>>2]=e;v=e;w=f;x=e;n=12}while(0);if((n|0)==12)if(!w){t=v;u=x}else{y=w;z=y+20|0;r=c;return z|0}w=KBa(28)|0;k[w+16>>2]=k[b>>2];k[w+20>>2]=0;k[w+24>>2]=0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=u;k[t>>2]=w;u=k[k[a>>2]>>2]|0;if(!u)A=w;else{k[a>>2]=u;A=k[t>>2]|0}ui(k[a+4>>2]|0,A);A=a+8|0;k[A>>2]=(k[A>>2]|0)+1;y=w;z=y+20|0;r=c;return z|0}function ui(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;c=(b|0)==(a|0);i[b+12>>0]=c&1;if(c)return;else d=b;while(1){b=k[d+8>>2]|0;c=b+12|0;if(i[c>>0]|0){e=37;break}f=b+8|0;g=d;d=k[f>>2]|0;h=k[d>>2]|0;if((h|0)==(b|0)){j=k[d+4>>2]|0;if(!j){l=g;m=b;n=f;o=f;p=d;q=d;e=8;break}r=j+12|0;if(i[r>>0]|0){l=g;m=b;n=f;o=f;p=d;q=d;e=8;break}i[c>>0]=1;i[d+12>>0]=(d|0)==(a|0)&1;i[r>>0]=1}else{if(!h){s=g;t=f;u=b;v=f;w=d;x=d;e=24;break}r=h+12|0;if(i[r>>0]|0){s=g;t=f;u=b;v=f;w=d;x=d;e=24;break}i[c>>0]=1;i[d+12>>0]=(d|0)==(a|0)&1;i[r>>0]=1}if((d|0)==(a|0)){e=37;break}}if((e|0)==8){if((k[m>>2]|0)==(l|0)){y=m;z=q}else{q=m+4|0;l=k[q>>2]|0;a=k[l>>2]|0;k[q>>2]=a;if(!a)A=p;else{k[a+8>>2]=m;A=k[n>>2]|0}a=l+8|0;k[a>>2]=A;A=k[o>>2]|0;if((k[A>>2]|0)==(m|0))k[A>>2]=l;else k[A+4>>2]=l;k[l>>2]=m;k[n>>2]=l;y=l;z=k[a>>2]|0}i[y+12>>0]=1;i[z+12>>0]=0;y=k[z>>2]|0;a=y+4|0;l=k[a>>2]|0;k[z>>2]=l;if(l)k[l+8>>2]=z;l=z+8|0;k[y+8>>2]=k[l>>2];n=k[l>>2]|0;if((k[n>>2]|0)==(z|0))k[n>>2]=y;else k[n+4>>2]=y;k[a>>2]=z;k[l>>2]=y;return}else if((e|0)==24){if((k[u>>2]|0)==(s|0)){s=k[u>>2]|0;y=s+4|0;l=k[y>>2]|0;k[u>>2]=l;if(!l)B=w;else{k[l+8>>2]=u;B=k[t>>2]|0}l=s+8|0;k[l>>2]=B;B=k[v>>2]|0;if((k[B>>2]|0)==(u|0))k[B>>2]=s;else k[B+4>>2]=s;k[y>>2]=u;k[t>>2]=s;C=s;D=k[l>>2]|0}else{C=u;D=x}i[C+12>>0]=1;i[D+12>>0]=0;C=D+4|0;x=k[C>>2]|0;u=k[x>>2]|0;k[C>>2]=u;if(u)k[u+8>>2]=D;u=D+8|0;k[x+8>>2]=k[u>>2];C=k[u>>2]|0;if((k[C>>2]|0)==(D|0))k[C>>2]=x;else k[C+4>>2]=x;k[x>>2]=D;k[u>>2]=x;return}else if((e|0)==37)return}function vi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!b)return;vi(a,k[b>>2]|0);vi(a,k[b+4>>2]|0);a=k[b+24>>2]|0;if((a|0)!=0?(c=a+4|0,d=k[c>>2]|0,k[c>>2]=d+-1,(d|0)==1):0){x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);d=x;x=0;if(d&1){e=Hc(0)|0;f=M;Fg(e)}d=a+8|0;c=k[d>>2]|0;k[d>>2]=c+-1;if((c|0)==1?(x=0,va(k[(k[a>>2]|0)+12>>2]|0,a|0),a=x,x=0,a&1):0){e=Hc(0)|0;f=M;Fg(e)}}OBa(b);return}function wi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;d=a+8|0;a:do if((k[d>>2]|0)!=0?(e=k[a>>2]|0,f=a+4|0,k[a>>2]=f,k[(k[f>>2]|0)+8>>2]=0,k[f>>2]=0,k[d>>2]=0,g=k[e+4>>2]|0,h=(g|0)==0?e:g,(h|0)!=0):0){g=a+4|0;e=k[b>>2]|0;i=h;while(1){if((e|0)==(k[c>>2]|0)){j=i;l=5;break}k[i+16>>2]=k[e+16>>2];h=k[e+20>>2]|0;m=k[e+24>>2]|0;if(m){n=m+4|0;k[n>>2]=(k[n>>2]|0)+1}k[i+20>>2]=h;h=i+24|0;n=k[h>>2]|0;k[h>>2]=m;if((n|0)!=0?(m=n+4|0,h=k[m>>2]|0,k[m>>2]=h+-1,(h|0)==1):0){x=0;va(k[(k[n>>2]|0)+8>>2]|0,n|0);h=x;x=0;if(h&1){l=13;break}h=n+8|0;m=k[h>>2]|0;k[h>>2]=m+-1;if((m|0)==1?(x=0,va(k[(k[n>>2]|0)+12>>2]|0,n|0),n=x,x=0,n&1):0){l=13;break}}n=i+8|0;m=k[n>>2]|0;do if(m){h=k[m>>2]|0;if((h|0)==(i|0)){k[m>>2]=0;o=k[m+4>>2]|0;if(!o){p=m;break}else q=o;while(1){o=k[q>>2]|0;if(o){q=o;continue}o=k[q+4>>2]|0;if(!o){r=q;break}else q=o}p=r;break}else{k[m+4>>2]=0;if(!h){p=m;break}else s=h;while(1){o=k[s>>2]|0;if(o){s=o;continue}o=k[s+4>>2]|0;if(!o){t=s;break}else s=o}p=t;break}}else p=0;while(0);m=k[f>>2]|0;do if(m){h=k[(k[i+16>>2]|0)+4>>2]|0;o=m;while(1){if(h>>>0<(k[(k[o+16>>2]|0)+4>>2]|0)>>>0){u=k[o>>2]|0;if(!u){v=o;w=o;l=28;break}else y=u}else{u=o+4|0;z=k[u>>2]|0;if(!z){A=u;B=o;l=31;break}else y=z}o=y}if((l|0)==28){l=0;C=v;D=w;break}else if((l|0)==31){l=0;C=A;D=B;break}}else{C=f;D=f}while(0);k[i>>2]=0;k[i+4>>2]=0;k[n>>2]=D;k[C>>2]=i;m=k[k[a>>2]>>2]|0;if(!m)E=i;else{k[a>>2]=m;E=k[C>>2]|0}ui(k[g>>2]|0,E);k[d>>2]=(k[d>>2]|0)+1;m=k[b>>2]|0;o=k[m+4>>2]|0;if(!o){h=m;while(1){m=k[h+8>>2]|0;if((k[m>>2]|0)==(h|0)){F=m;break}else h=m}}else{h=o;while(1){n=k[h>>2]|0;if(!n){F=h;break}else h=n}}k[b>>2]=F;if(!p)break a;else{e=F;i=p}}if((l|0)==5){i=k[j+8>>2]|0;if(!i)G=j;else{e=i;while(1){i=k[e+8>>2]|0;if(!i){H=e;break}else e=i}G=H}vi(a,G);break}else if((l|0)==13){e=Hc(0)|0;Fg(e)}}while(0);G=k[b>>2]|0;if((G|0)==(k[c>>2]|0))return;H=a+4|0;j=a+4|0;p=G;while(1){G=p+16|0;F=k[H>>2]|0;do if(F){E=k[G>>2]|0;C=k[E+4>>2]|0;D=E;E=F;while(1){if(C>>>0<(k[(k[E+16>>2]|0)+4>>2]|0)>>>0){B=k[E>>2]|0;if(!B){I=E;J=E;l=47;break}else K=B}else{B=E+4|0;A=k[B>>2]|0;if(!A){L=B;M=E;l=50;break}else K=A}E=K}if((l|0)==47){l=0;N=I;O=D;P=J;break}else if((l|0)==50){l=0;N=L;O=D;P=M;break}}else{N=H;O=k[G>>2]|0;P=H}while(0);G=KBa(28)|0;k[G+16>>2]=O;k[G+20>>2]=k[p+20>>2];F=k[p+24>>2]|0;k[G+24>>2]=F;if(F){E=F+4|0;k[E>>2]=(k[E>>2]|0)+1}k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=P;k[N>>2]=G;E=k[k[a>>2]>>2]|0;if(!E)Q=G;else{k[a>>2]=E;Q=k[N>>2]|0}ui(k[j>>2]|0,Q);k[d>>2]=(k[d>>2]|0)+1;E=k[b>>2]|0;G=k[E+4>>2]|0;if(!G){F=E;while(1){E=k[F+8>>2]|0;if((k[E>>2]|0)==(F|0)){R=E;break}else F=E}}else{F=G;while(1){E=k[F>>2]|0;if(!E){R=F;break}else F=E}}k[b>>2]=R;if((R|0)==(k[c>>2]|0))break;else p=R}return}function xi(a,b){a=a|0;b=b|0;if(!b)return;else{xi(a,k[b>>2]|0);xi(a,k[b+4>>2]|0);K2a(b+28|0);K2a(b+16|0);OBa(b);return}}function yi(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=a+4|0;c=k[b>>2]|0;d=a+16|0;e=k[d>>2]|0;f=c+(e>>>10<<2)|0;g=a+8|0;h=k[g>>2]|0;i=h;j=c;if((h|0)==(c|0)){l=0;m=a+20|0;n=0}else{h=a+20|0;o=(k[h>>2]|0)+e|0;l=(k[c+(o>>>10<<2)>>2]|0)+((o&1023)<<2)|0;m=h;n=(k[f>>2]|0)+((e&1023)<<2)|0}e=n;n=f;a:while(1){f=e;do{h=f;if((h|0)==(l|0))break a;f=h+4|0}while((f-(k[n>>2]|0)|0)!=4096);f=n+4|0;e=k[f>>2]|0;n=f}k[m>>2]=0;m=i-j>>2;if(m>>>0>2){j=c;do{OBa(k[j>>2]|0);j=(k[b>>2]|0)+4|0;k[b>>2]=j;c=(k[g>>2]|0)-j>>2}while(c>>>0>2);p=c}else p=m;switch(p|0){case 1:{k[d>>2]=512;break}case 2:{k[d>>2]=1024;break}default:{}}d=k[b>>2]|0;p=k[g>>2]|0;if((d|0)!=(p|0)){m=d;do{OBa(k[m>>2]|0);m=m+4|0}while((m|0)!=(p|0));p=k[b>>2]|0;b=k[g>>2]|0;if((b|0)!=(p|0))k[g>>2]=b+(~((b+-4-p|0)>>>2)<<2)}p=k[a>>2]|0;if(!p)return;OBa(p);return}function zi(a,b){a=a|0;b=b|0;if(!b)return;else{zi(a,k[b>>2]|0);zi(a,k[b+4>>2]|0);K2a(b+16|0);OBa(b);return}}function Ai(a,b){a=a|0;b=b|0;if(!b)return;else{Ai(a,k[b>>2]|0);Ai(a,k[b+4>>2]|0);Bi(b+28|0);K2a(b+16|0);OBa(b);return}}function Bi(a){a=a|0;var b=0,c=0;b=a+100|0;c=k[b>>2]|0;k[b>>2]=0;if(c){K2a(c);OBa(c)}c=a+96|0;b=k[c>>2]|0;k[c>>2]=0;if(b){K2a(b);OBa(b)}b=a+92|0;c=k[b>>2]|0;k[b>>2]=0;if(c){K2a(c);OBa(c)}c=a+88|0;b=k[c>>2]|0;k[c>>2]=0;if(b){K2a(b);OBa(b)}b=a+84|0;c=k[b>>2]|0;k[b>>2]=0;if(c){K2a(c);OBa(c)}Ci(a+72|0,k[a+76>>2]|0);c=k[a+60>>2]|0;if(c){b=a+64|0;if((k[b>>2]|0)!=(c|0))k[b>>2]=c;OBa(c)}Ci(a+48|0,k[a+52>>2]|0);c=k[a+36>>2]|0;if(c){b=a+40|0;if((k[b>>2]|0)!=(c|0))k[b>>2]=c;OBa(c)}Ci(a+24|0,k[a+28>>2]|0);c=k[a+12>>2]|0;if(c){b=a+16|0;if((k[b>>2]|0)!=(c|0))k[b>>2]=c;OBa(c)}c=k[a+8>>2]|0;if(!c)return;j0a(c);return}function Ci(a,b){a=a|0;b=b|0;if(!b)return;else{Ci(a,k[b>>2]|0);Ci(a,k[b+4>>2]|0);K2a(b+20|0);OBa(b);return}}function Di(a,b){a=a|0;b=b|0;if(!b)return;Di(a,k[b>>2]|0);Di(a,k[b+4>>2]|0);a=k[b+40>>2]|0;if(a)j0a(a);a=k[b+32>>2]|0;if(a)j0a(a);K2a(b+16|0);OBa(b);return}function Ei(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+32|0;M2a(c,b)|0;b=a+44|0;k[b>>2]=0;d=a+48|0;e=k[d>>2]|0;if(e&8){f=i[c>>0]|0;if(!(f&1)){g=((f&255)>>>1)+(c+1)|0;k[b>>2]=g;h=g;j=c+1|0;l=c+1|0}else{g=k[a+40>>2]|0;f=g+(k[a+36>>2]|0)|0;k[b>>2]=f;h=f;j=g;l=g}k[a+8>>2]=j;k[a+12>>2]=l;k[a+16>>2]=h}if(!(e&16))return;e=i[c>>0]|0;if(!(e&1)){h=(e&255)>>>1;k[b>>2]=c+1+h;m=10;n=h}else{h=k[a+36>>2]|0;k[b>>2]=(k[a+40>>2]|0)+h;m=(k[c>>2]&-2)+-1|0;n=h}q3a(c,m,0);m=i[c>>0]|0;if(!(m&1)){o=c+1|0;p=(m&255)>>>1;q=c+1|0}else{c=k[a+40>>2]|0;o=c;p=k[a+36>>2]|0;q=c}c=a+24|0;k[c>>2]=q;k[a+20>>2]=q;k[a+28>>2]=o+p;if(!(k[d>>2]&3))return;k[c>>2]=q+n;return}function Fi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=k[b+48>>2]|0;if(c&16){d=b+44|0;e=k[d>>2]|0;f=k[b+24>>2]|0;if(e>>>0>>0){k[d>>2]=f;g=f}else g=e;e=k[b+20>>2]|0;f=g-e|0;if(f>>>0<=4294967279)if(f>>>0<11){i[a>>0]=f<<1;h=a+1|0}else j=8;else{GBa(a);j=8}if((j|0)==8){d=f+16&-16;l=KBa(d)|0;k[a+8>>2]=l;k[a>>2]=d|1;k[a+4>>2]=f;h=l}if((e|0)==(g|0))m=h;else{l=e;e=h;while(1){i[e>>0]=i[l>>0]|0;l=l+1|0;if((l|0)==(g|0))break;else e=e+1|0}m=h+f|0}i[m>>0]=0;return}if(!(c&8)){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}c=k[b+8>>2]|0;m=k[b+16>>2]|0;b=m-c|0;if(b>>>0<=4294967279)if(b>>>0<11){i[a>>0]=b<<1;n=a+1|0}else j=18;else{GBa(a);j=18}if((j|0)==18){j=b+16&-16;f=KBa(j)|0;k[a+8>>2]=f;k[a>>2]=j|1;k[a+4>>2]=b;n=f}if((c|0)==(m|0))o=n;else{f=c;c=n;while(1){i[c>>0]=i[f>>0]|0;f=f+1|0;if((f|0)==(m|0))break;else c=c+1|0}o=n+b|0}i[o>>0]=0;return}function Gi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;e=a+16|0;f=k[e>>2]|0;g=f;h=b+16|0;i=k[h>>2]|0;j=(i|0)==(b|0);if((f|0)!=(a|0)){if(!j){k[e>>2]=i;k[h>>2]=g;r=c;return}x=0;xa(k[(k[b>>2]|0)+12>>2]|0,b|0,a|0);g=x;x=0;if(g&1){l=Hc(0)|0;m=M;Fg(l)}g=k[h>>2]|0;Sf[k[(k[g>>2]|0)+16>>2]&2047](g);k[h>>2]=k[e>>2];k[e>>2]=a;r=c;return}if(!j){x=0;xa(k[(k[f>>2]|0)+12>>2]|0,f|0,b|0);j=x;x=0;if(j&1){l=Hc(0)|0;m=M;Fg(l)}j=k[e>>2]|0;Sf[k[(k[j>>2]|0)+16>>2]&2047](j);j=b+16|0;k[e>>2]=k[j>>2];k[j>>2]=b;r=c;return}x=0;xa(k[(k[f>>2]|0)+12>>2]|0,f|0,d|0);j=x;x=0;if(j&1){l=Hc(0)|0;m=M;Fg(l)}j=k[e>>2]|0;Sf[k[(k[j>>2]|0)+16>>2]&2047](j);k[e>>2]=0;j=k[h>>2]|0;x=0;xa(k[(k[j>>2]|0)+12>>2]|0,j|0,f|0);f=x;x=0;if(f&1){l=Hc(0)|0;m=M;Fg(l)}f=k[h>>2]|0;Sf[k[(k[f>>2]|0)+16>>2]&2047](f);k[h>>2]=0;k[e>>2]=a;x=0;xa(k[(k[d>>2]|0)+12>>2]|0,d|0,i|0);i=x;x=0;if(i&1){l=Hc(0)|0;m=M;Fg(l)}Sf[k[(k[d>>2]|0)+16>>2]&2047](d);k[h>>2]=b;r=c;return}function Hi(a){a=a|0;OBa(a);return}function Ii(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=21132;k[b+4>>2]=k[a+4>>2];return b|0}function Ji(a,b){a=a|0;b=b|0;k[b>>2]=21132;k[b+4>>2]=k[a+4>>2];return}function Ki(a){a=a|0;return}function Li(a){a=a|0;OBa(a);return}function Mi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+32|0;e=d+28|0;f=d+24|0;g=d+12|0;h=d;j=k[b+4>>2]|0;k[e>>2]=0;k[f>>2]=0;jg[j&511]((i[c>>0]&1)==0?c+1|0:k[c+8>>2]|0,e,f);c=a+4|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;i[a>>0]=1;j=k[e>>2]|0;do if(!((j|0)!=0|(k[f>>2]|0)!=0)){i[a>>0]=0;x=0;Ta(496,c|0,204429)|0;b=x;x=0;if(b&1){l=Hc()|0;m=M;K2a(c);Sc(l|0)}else{n=k[e>>2]|0;break}}else n=j;while(0);do if(n){i[a>>0]=1;j=RLa(n)|0;x=0;fb(140,g|0,n|0,j|0);j=x;x=0;if(j&1){l=Hc()|0;m=M;K2a(c);Sc(l|0)}if(!(i[c>>0]&1)){i[c+1>>0]=0;i[c>>0]=0}else{i[k[a+12>>2]>>0]=0;k[a+8>>2]=0}x=0;xa(603,c|0,0);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else{k[c>>2]=k[g>>2];k[c+4>>2]=k[g+4>>2];k[c+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);yYa(k[e>>2]|0);break}}while(0);e=k[f>>2]|0;if(!e){r=d;return}i[a>>0]=0;g=RLa(e)|0;x=0;fb(140,h|0,e|0,g|0);g=x;x=0;if(g&1){l=Hc()|0;m=M;K2a(c);Sc(l|0)}if(!(i[c>>0]&1)){i[c+1>>0]=0;i[c>>0]=0}else{i[k[a+12>>2]>>0]=0;k[a+8>>2]=0}x=0;xa(603,c|0,0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)};k[c>>2]=k[h>>2];k[c+4>>2]=k[h+4>>2];k[c+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;K2a(h);yYa(k[f>>2]|0);r=d;return}function Ni(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==204445?a+4|0:0)|0}function Oi(a){a=a|0;return 336}function Pi(a){a=a|0;return}function Qi(a){a=a|0;return}function Ri(a){a=a|0;OBa(a);return}function Si(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=21176;k[b+4>>2]=k[a+4>>2];return b|0}function Ti(a,b){a=a|0;b=b|0;k[b>>2]=21176;k[b+4>>2]=k[a+4>>2];return}function Ui(a){a=a|0;return}function Vi(a){a=a|0;OBa(a);return}function Wi(a,b){a=a|0;b=b|0;return Gpa(k[a+4>>2]|0,b)|0}function Xi(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==204918?a+4|0:0)|0}function Yi(a){a=a|0;return 368}function Zi(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;f=r;r=r+192|0;g=f+172|0;h=f+186|0;j=f+185|0;l=f+184|0;m=f+24|0;n=f+160|0;o=f+12|0;p=f;q=(b|0)!=0;s=(c|0)!=0;if(!(q|s)){q2a(a,205063,18);r=f;return}if(!q)if(!c)t=0;else t=iDa(c,8936,8,-2)|0;else t=b;if(!s)if(!t){u=0;v=1;w=0}else{y=iDa(t,8,8936,-2)|0;z=9}else{y=c;z=9}if((z|0)==9)if((y|0)!=0&d){d=Vf[k[(k[y>>2]|0)+8>>2]&1023](y)|0;if(t){c=t+4|0;s=k[c>>2]|0;if(!s){x=0;b=Ba(563,32)|0;q=x;x=0;if(q&1)z=14;else{k[b>>2]=21100;q=b+8|0;k[q>>2]=0;k[b+12>>2]=0;k[b+4>>2]=q;q=b+16|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[c>>2]=b;k[b+28>>2]=1;A=b;z=15}}else{A=s;z=15}if((z|0)==15){x=0;s=Ta(k[k[A>>2]>>2]|0,A|0,0)|0;A=x;x=0;if(A&1)z=14;else B=s}if((z|0)==14){s=Hc(0)|0;me(s|0)|0;ge();B=0}if((B|0)==(d|0)){q2a(a,d,RLa(d)|0);r=f;return}else{u=y;v=0;w=d}}else{u=y;v=0;w=d}}else{u=y;v=1;w=0}y=m+56|0;d=m+4|0;k[m>>2]=20356;k[y>>2]=20376;x=0;xa(582,m+56|0,d|0);B=x;x=0;if(B&1){B=Hc()|0;C=M;D=B;mab(y);Sc(D|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=20300;k[m+56>>2]=20320;x=0;va(1449,d|0);B=x;x=0;do if(B&1){s=Hc()|0;E=M;F=s}else{k[d>>2]=20392;s=m+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[m+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;xa(583,d|0,g|0);A=x;x=0;if(A&1){A=Hc()|0;b=M;K2a(g);K2a(s);obb(d);E=b;F=A;break}K2a(g);A=(t|0)!=0;b=e^1;do if(!(b|A^1)){c=k[t+12>>2]|0;q=(c|0)!=0;G=t+16|0;H=t+8|0;if(!(q|(k[G>>2]|0)!=-1|(k[H>>2]|0)!=0)){x=0;Fa(92,m|0,205082,62)|0;I=x;x=0;if(I&1)break;else{z=42;break}}if(q){q=RLa(c)|0;x=0;Fa(92,m|0,c|0,q|0)|0;q=x;x=0;if(q&1)break;if((k[G>>2]|0)!=-1){i[l>>0]=40;x=0;q=Fa(92,m|0,l|0,1)|0;c=x;x=0;if(c&1)break;x=0;c=Ta(477,q|0,k[G>>2]|0)|0;G=x;x=0;if(G&1)break;x=0;Fa(92,c|0,205145,3)|0;c=x;x=0;if(c&1)break}}x=0;Fa(92,m|0,205149,18)|0;c=x;x=0;if(!(c&1)){c=k[H>>2]|0;if(!c){x=0;Fa(92,m|0,205168,9)|0;H=x;x=0;if(H&1)break}else{H=RLa(c)|0;x=0;Fa(92,m|0,c|0,H|0)|0;H=x;x=0;if(H&1)break}i[j>>0]=10;x=0;Fa(92,m|0,j|0,1)|0;H=x;x=0;if(!(H&1))z=42}}else z=42;while(0);a:do if((z|0)==42){b:do if(e){x=0;fb(140,n|0,205178,24);H=x;x=0;if(H&1)break a;H=i[n>>0]|0;c=(H&1)==0;x=0;G=Fa(92,m|0,(c?n+1|0:k[n+8>>2]|0)|0,(c?(H&255)>>>1:k[n+4>>2]|0)|0)|0;H=x;x=0;c:do if(!(H&1)){do if(!A)if(!u){x=0;hb(47);x=0;z=54;break c}else{J=u;break}else J=t;while(0);c=k[(k[(k[J>>2]|0)+-4>>2]|0)+4>>2]|0;q=RLa(c)|0;x=0;fb(140,o|0,c|0,q|0);q=x;x=0;if(!(q&1)){q=i[o>>0]|0;c=(q&1)==0;x=0;I=Fa(92,G|0,(c?o+1|0:k[o+8>>2]|0)|0,(c?(q&255)>>>1:k[o+4>>2]|0)|0)|0;q=x;x=0;if(!(q&1)?(i[h>>0]=10,x=0,Fa(92,I|0,h|0,1)|0,I=x,x=0,!(I&1)):0){K2a(o);K2a(n);break b}I=Hc()|0;q=M;K2a(o);K=I;L=q}else z=54}else z=54;while(0);if((z|0)==54){G=Hc()|0;K=G;L=M}K2a(n);N=K;O=L;k[m>>2]=20300;k[y>>2]=20320;k[d>>2]=20392;K2a(s);obb(d);mab(y);Sc(N|0)}while(0);if(!(v|b)){x=0;G=Fa(92,m|0,205203,22)|0;H=x;x=0;if(H&1)break;H=RLa(w)|0;x=0;q=Fa(92,G|0,w|0,H|0)|0;H=x;x=0;if(H&1)break;i[g>>0]=10;x=0;Fa(92,q|0,g|0,1)|0;q=x;x=0;if(q&1)break}do if(A){x=0;xa(584,p|0,d|0);q=x;x=0;if(q&1)break a;q=(i[p>>0]&1)==0?p+1|0:k[p+8>>2]|0;H=t+4|0;G=k[H>>2]|0;if(!G){x=0;I=Ba(563,32)|0;c=x;x=0;if(!(c&1)){k[I>>2]=21100;c=I+8|0;k[c>>2]=0;k[I+12>>2]=0;k[I+4>>2]=c;c=I+16|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[H>>2]=I;k[I+28>>2]=1;P=I;z=69}}else{P=G;z=69}if((z|0)==69?(x=0,G=Ta(k[k[P>>2]>>2]|0,P|0,q|0)|0,q=x,x=0,!(q&1)):0){K2a(p);if(!G){z=74;break}if(!(i[G>>0]|0)){z=74;break}q=RLa(G)|0;x=0;fb(140,a|0,G|0,q|0);q=x;x=0;if(q&1)break a;else break}q=Hc(0)|0;me(q|0)|0;x=0;hb(45);q=x;x=0;if(!(q&1)){K2a(p);z=74;break}q=Hc()|0;G=M;K2a(p);N=q;O=G;k[m>>2]=20300;k[y>>2]=20320;k[d>>2]=20392;K2a(s);obb(d);mab(y);Sc(N|0)}else z=74;while(0);if((z|0)==74?(x=0,xa(584,a|0,d|0),G=x,x=0,G&1):0)break;k[m>>2]=20300;k[y>>2]=20320;k[d>>2]=20392;K2a(s);obb(d);mab(y);r=f;return}while(0);A=Hc()|0;N=A;O=M;k[m>>2]=20300;k[y>>2]=20320;k[d>>2]=20392;K2a(s);obb(d);mab(y);Sc(N|0)}while(0);C=E;D=F;mab(y);Sc(D|0)}function _i(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(40)|0;i=h+16|0;x=0;xa(604,i|0,c|0);j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j;OBa(h);Sc(m|0)}x=0;xa(604,h+28|0,c+12|0);c=x;x=0;if(c&1){c=Hc()|0;j=M;K2a(i);l=j;m=c;OBa(h);Sc(m|0)}k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=$i(a,e,f,i)|0;i=k[g>>2]|0;if(!i){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)n=h;else{k[a>>2]=e;n=k[g>>2]|0}ui(k[a+4>>2]|0,n);n=a+8|0;k[n>>2]=(k[n>>2]|0)+1;o=h;r=d;return o|0}else{if((i|0)==(h|0)){o=i;r=d;return o|0}K2a(h+28|0);K2a(h+16|0);OBa(h);o=i;r=d;return o|0}return 0}function $i(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=f+16|0,h=i[d>>0]|0,j=(h&1)==0,l=j?(h&255)>>>1:k[d+4>>2]|0,h=i[g>>0]|0,m=(h&1)==0,n=m?(h&255)>>>1:k[f+20>>2]|0,h=j?d+1|0:k[d+8>>2]|0,j=m?g+1|0:k[f+24>>2]|0,g=n>>>0>>0,m=ZLa(h,j,g?n:l)|0,o=l>>>0>>0,(((m|0)==0?(o?-2147483648:0):m)|0)>=0):0){m=ZLa(j,h,o?l:n)|0;if((((m|0)==0?(g?-2147483648:0):m)|0)>=0){k[c>>2]=b;p=c;return p|0}m=f+4|0;g=k[m>>2]|0;n=(g|0)==0;if(n){o=f;while(1){j=k[o+8>>2]|0;if((k[j>>2]|0)==(o|0)){q=j;break}else o=j}}else{o=g;while(1){g=k[o>>2]|0;if(!g){q=o;break}else o=g}}if((q|0)!=(e|0)?(e=q+16|0,o=i[e>>0]|0,g=(o&1)==0,j=g?(o&255)>>>1:k[q+20>>2]|0,o=ZLa(h,g?e+1|0:k[q+24>>2]|0,j>>>0>>0?j:l)|0,(((o|0)==0?(l>>>0>>0?-2147483648:0):o)|0)>=0):0){p=aj(a,c,d)|0;return p|0}if(n){k[c>>2]=f;p=m;return p|0}else{k[c>>2]=q;p=q;return p|0}}if((f|0)!=(k[a>>2]|0)){q=k[f>>2]|0;if(!q){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0))m=n;else{r=n;break}}}else{m=q;while(1){q=k[m+4>>2]|0;if(!q){r=m;break}else m=q}}m=r+16|0;q=i[m>>0]|0;n=(q&1)==0;o=n?(q&255)>>>1:k[r+20>>2]|0;q=i[d>>0]|0;j=(q&1)==0;l=j?(q&255)>>>1:k[d+4>>2]|0;q=ZLa(n?m+1|0:k[r+24>>2]|0,j?d+1|0:k[d+8>>2]|0,l>>>0>>0?l:o)|0;if((((q|0)==0?(o>>>0>>0?-2147483648:0):q)|0)<0)s=r;else{p=aj(a,c,d)|0;return p|0}}else s=b;if(!(k[f>>2]|0)){k[c>>2]=f;p=f;return p|0}else{f=s;k[c>>2]=f;p=f+4|0;return p|0}return 0}function aj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function bj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function cj(){k[5066]=0;k[5067]=0;k[5068]=0;k[5069]=0;k[5070]=0;k[5071]=0;return}function dj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;b=r;r=r+16|0;c=b;k[a>>2]=21220;d=a+260|0;e=k[d>>2]|0;f=a+264|0;g=k[f>>2]|0;a:do if((e|0)!=(g|0)){h=e;while(1){x=0;va(1453,k[h+4>>2]|0);j=x;x=0;if(j&1){l=12;break}j=k[h>>2]|0;x=0;Ba(565,j|0)|0;m=x;x=0;if(m&1){l=12;break}x=0;Ba(566,j+28|0)|0;m=x;x=0;if(m&1){n=j;break}x=0;Ba(567,j|0)|0;j=x;x=0;if(j&1){l=12;break}h=h+8|0;if((h|0)==(g|0)){l=2;break a}}if((l|0)==12){h=Hc()|0;o=M;p=h;l=13;break}h=Hc()|0;j=M;x=0;Ba(567,n|0)|0;m=x;x=0;if(m&1){m=Hc(0)|0;Fg(m)}else{o=j;p=h;l=13}}else l=2;while(0);b:do if((l|0)==2){n=a+272|0;g=k[n>>2]|0;e=a+276|0;h=k[e>>2]|0;do if((g|0)!=(h|0)){j=c+4|0;m=g;while(1){q=k[m>>2]|0;k[c>>2]=q+32;i[j>>0]=0;x=0;va(1454,c|0);s=x;x=0;if(s&1){l=11;break}x=0;xa(613,q|0,c|0);q=x;x=0;if(q&1){l=40;break}if((i[j>>0]|0)!=0?(x=0,va(1453,k[c>>2]|0),q=x,x=0,q&1):0){l=11;break}m=m+8|0;if((m|0)==(h|0)){l=24;break}}if((l|0)==11){m=Hc()|0;o=M;p=m;l=13;break b}else if((l|0)==24){t=k[n>>2]|0;break}else if((l|0)==40){m=Hc()|0;q=M;if(!(i[j>>0]|0)){o=q;p=m;l=13;break b}x=0;va(1453,k[c>>2]|0);s=x;x=0;if(!(s&1)){o=q;p=m;l=13;break b}m=Hc(0)|0;Fg(m)}}else t=g;while(0);if(t){g=k[e>>2]|0;do if((g|0)!=(t|0)){h=g;while(1){k[e>>2]=h+-8;m=k[h+-4>>2]|0;if((m|0)!=0?(q=m+4|0,s=k[q>>2]|0,k[q>>2]=s+-1,(s|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);s=x;x=0;if(s&1){l=33;break}s=m+8|0;q=k[s>>2]|0;k[s>>2]=q+-1;if((q|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){l=33;break}}h=k[e>>2]|0;if((h|0)==(t|0)){l=34;break}}if((l|0)==33){h=Hc()|0;vc(h|0)}else if((l|0)==34){u=k[n>>2]|0;break}}else u=t;while(0);OBa(u)}n=k[d>>2]|0;e=n;if(n){g=k[f>>2]|0;if((g|0)!=(n|0))k[f>>2]=g+(~((g+-8-e|0)>>>3)<<3);OBa(n)}Wj(a+240|0,k[a+244>>2]|0);n=a+156|0;while(1){x=0;e=Ba(568,n|0)|0;g=x;x=0;if(g&1){l=80;break}if((e|0)!=4){l=51;break}}do if((l|0)==51){n=a+184|0;do{x=0;e=Ba(569,n|0)|0;g=x;x=0;if(g&1){l=79;break}}while((e|0)==4);if((l|0)==79){n=Hc()|0;v=n;w=M;break}n=a+128|0;do{x=0;e=Ba(568,n|0)|0;g=x;x=0;if(g&1){l=88;break}}while((e|0)==4);if((l|0)==88){n=Hc()|0;y=M;z=n;l=95;break b}n=a+52|0;while(1){x=0;e=Ba(568,n|0)|0;g=x;x=0;if(g&1){l=93;break}if((e|0)!=4){l=60;break}}do if((l|0)==60){n=a+80|0;do{x=0;e=Ba(569,n|0)|0;g=x;x=0;if(g&1){l=92;break}}while((e|0)==4);if((l|0)==92){n=Hc()|0;A=n;B=M;break}n=a+24|0;do{x=0;e=Ba(568,n|0)|0;g=x;x=0;if(g&1){l=101;break}}while((e|0)==4);if((l|0)==101){n=Hc()|0;C=M;D=n;l=106;break b}n=k[a+16>>2]|0;do if((n|0)!=0?(e=n+4|0,g=k[e>>2]|0,k[e>>2]=g+-1,(g|0)==1):0){x=0;va(k[(k[n>>2]|0)+8>>2]|0,n|0);g=x;x=0;if(!(g&1)){g=n+8|0;e=k[g>>2]|0;k[g>>2]=e+-1;if((e|0)!=1)break;x=0;va(k[(k[n>>2]|0)+12>>2]|0,n|0);e=x;x=0;if(!(e&1))break}e=Hc()|0;E=M;F=e;l=111;break b}while(0);n=k[a+8>>2]|0;if(!n){r=b;return}e=n+8|0;g=k[e>>2]|0;k[e>>2]=g+-1;if((g|0)!=1){r=b;return}Sf[k[(k[n>>2]|0)+12>>2]&2047](n);r=b;return}else if((l|0)==93){n=Hc()|0;A=n;B=M}while(0);G=B;H=A;l=102;break b}else if((l|0)==80){n=Hc()|0;v=n;w=M}while(0);I=w;J=v;l=89}while(0);c:do if((l|0)==13){v=a+272|0;w=k[v>>2]|0;if(w){A=a+276|0;B=k[A>>2]|0;do if((B|0)!=(w|0)){b=B;while(1){k[A>>2]=b+-8;u=k[b+-4>>2]|0;if((u|0)!=0?(t=u+4|0,c=k[t>>2]|0,k[t>>2]=c+-1,(c|0)==1):0){x=0;va(k[(k[u>>2]|0)+8>>2]|0,u|0);c=x;x=0;if(c&1){l=21;break}c=u+8|0;t=k[c>>2]|0;k[c>>2]=t+-1;if((t|0)==1?(x=0,va(k[(k[u>>2]|0)+12>>2]|0,u|0),u=x,x=0,u&1):0){l=21;break}}b=k[A>>2]|0;if((b|0)==(w|0)){l=22;break}}if((l|0)==21){b=Hc()|0;vc(b|0)}else if((l|0)==22){K=k[v>>2]|0;break}}else K=w;while(0);OBa(K)}w=k[d>>2]|0;v=w;if(w){A=k[f>>2]|0;if((A|0)!=(w|0))k[f>>2]=A+(~((A+-8-v|0)>>>3)<<3);OBa(w)}Wj(a+240|0,k[a+244>>2]|0);w=a+156|0;do{x=0;v=Ba(568,w|0)|0;A=x;x=0;if(A&1){l=120;break}}while((v|0)==4);if((l|0)==120){w=Hc(0)|0;L=w;Fg(L)}w=a+184|0;while(1){x=0;v=Ba(569,w|0)|0;A=x;x=0;if(A&1)break;if((v|0)!=4){I=o;J=p;l=89;break c}}w=Hc(0)|0;L=w;Fg(L)}while(0);d:do if((l|0)==89){p=a+128|0;while(1){x=0;o=Ba(568,p|0)|0;f=x;x=0;if(f&1)break;if((o|0)!=4){y=I;z=J;l=95;break d}}p=Hc(0)|0;L=p;Fg(L)}while(0);e:do if((l|0)==95){J=a+52|0;do{x=0;I=Ba(568,J|0)|0;p=x;x=0;if(p&1){l=117;break}}while((I|0)==4);if((l|0)==117){J=Hc(0)|0;L=J;Fg(L)}J=a+80|0;while(1){x=0;I=Ba(569,J|0)|0;p=x;x=0;if(p&1)break;if((I|0)!=4){G=y;H=z;l=102;break e}}J=Hc(0)|0;L=J;Fg(L)}while(0);f:do if((l|0)==102){z=a+24|0;while(1){x=0;y=Ba(568,z|0)|0;J=x;x=0;if(J&1)break;if((y|0)!=4){C=G;D=H;l=106;break f}}z=Hc(0)|0;L=z;Fg(L)}while(0);if((l|0)==106){H=k[a+16>>2]|0;if((H|0)!=0?(G=H+4|0,z=k[G>>2]|0,k[G>>2]=z+-1,(z|0)==1):0){x=0;va(k[(k[H>>2]|0)+8>>2]|0,H|0);z=x;x=0;if(!(z&1)){z=H+8|0;G=k[z>>2]|0;k[z>>2]=G+-1;if(!((G|0)==1?(x=0,va(k[(k[H>>2]|0)+12>>2]|0,H|0),H=x,x=0,H&1):0)){E=C;F=D;l=111}}}else{E=C;F=D;l=111}}if((l|0)==111){l=k[a+8>>2]|0;if(!l)Sc(F|0);a=l+8|0;D=k[a>>2]|0;k[a>>2]=D+-1;if((D|0)!=1)Sc(F|0);x=0;va(k[(k[l>>2]|0)+12>>2]|0,l|0);l=x;x=0;if(!(l&1))Sc(F|0)}F=Hc(0)|0;L=F;Fg(L)}function ej(a){a=a|0;var b=0;x=0;va(83,a|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(a);Sc(b|0)}else{OBa(a);return}}function fj(){var a=0,b=0,c=0;if(!(mm(21252)|0)){a=k[5314]|0;b=Ne(a|0)|0;return b|0}x=0;Ta(497,21256,1455)|0;c=x;x=0;if(!(c&1)){nm(21252);a=k[5314]|0;b=Ne(a|0)|0;return b|0}b=Hc(0)|0;me(b|0)|0;x=0;va(1456,21252);b=x;x=0;if(!(b&1)){x=0;hb(46);x=0}b=Hc()|0;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else Sc(b|0);return 0}function gj(a){a=a|0;var b=0,c=0;if(!(mm(21252)|0)){b=k[5314]|0;Ef(b|0,a|0)|0;return}x=0;Ta(497,21256,1455)|0;c=x;x=0;if(!(c&1)){nm(21252);b=k[5314]|0;Ef(b|0,a|0)|0;return}a=Hc(0)|0;me(a|0)|0;x=0;va(1456,21252);a=x;x=0;if(!(a&1)){x=0;hb(46);x=0}a=Hc()|0;x=0;hb(45);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else Sc(a|0)}function hj(){var a=0,b=0;a=KBa(288)|0;x=0;va(1457,a|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(a);Sc(b|0)}else{k[a>>2]=21268;i[a+284>>0]=0;Zj(a+12|0,a);gj(a);return a|0}return 0}function ij(){var a=0,b=0,c=0;a=fj()|0;if(a){b=a;return b|0}a=KBa(288)|0;x=0;va(1457,a|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}k[a>>2]=21268;i[a+284>>0]=0;Zj(a+12|0,a);gj(a);b=a;return b|0}function jj(a){a=a|0;k[a>>2]=0;k[a+4>>2]=0;return}function kj(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;c=k[a+4>>2]|0;if(c){d=c+4|0;k[d>>2]=(k[d>>2]|0)+1}k[b+12>>2]=b;d=b+16|0;b=k[d>>2]|0;k[d>>2]=c;if(((b|0)!=0?(c=b+4|0,d=k[c>>2]|0,k[c>>2]=d+-1,(d|0)==1):0)?(Sf[k[(k[b>>2]|0)+8>>2]&2047](b),d=b+8|0,c=k[d>>2]|0,k[d>>2]=c+-1,(c|0)==1):0)Sf[k[(k[b>>2]|0)+12>>2]&2047](b);b=k[a>>2]|0;if(!(Ud(b+20|0,0,570,b|0)|0)){e=1;return e|0}b=k[a>>2]|0;k[b+12>>2]=0;a=b+16|0;b=k[a>>2]|0;k[a>>2]=0;if(!b){e=0;return e|0}a=b+4|0;c=k[a>>2]|0;k[a>>2]=c+-1;if((c|0)!=1){e=0;return e|0}Sf[k[(k[b>>2]|0)+8>>2]&2047](b);c=b+8|0;a=k[c>>2]|0;k[c>>2]=a+-1;if((a|0)!=1){e=0;return e|0}Sf[k[(k[b>>2]|0)+12>>2]&2047](b);e=0;return e|0}function lj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+16|0;d=c;e=k[a>>2]|0;f=k[a+4>>2]|0;if(f){g=f+4|0;k[g>>2]=(k[g>>2]|0)+1}k[e+12>>2]=e;g=e+16|0;e=k[g>>2]|0;k[g>>2]=f;if(((e|0)!=0?(f=e+4|0,g=k[f>>2]|0,k[f>>2]=g+-1,(g|0)==1):0)?(Sf[k[(k[e>>2]|0)+8>>2]&2047](e),g=e+8|0,f=k[g>>2]|0,k[g>>2]=f+-1,(f|0)==1):0)Sf[k[(k[e>>2]|0)+12>>2]&2047](e);e=k[a>>2]|0;if(Ud(e+20|0,b|0,570,e|0)|0){e=k[a>>2]|0;k[e+12>>2]=0;f=e+16|0;e=k[f>>2]|0;k[f>>2]=0;if(!e){h=0;r=c;return h|0}f=e+4|0;g=k[f>>2]|0;k[f>>2]=g+-1;if((g|0)!=1){h=0;r=c;return h|0}Sf[k[(k[e>>2]|0)+8>>2]&2047](e);g=e+8|0;f=k[g>>2]|0;k[g>>2]=f+-1;if((f|0)!=1){h=0;r=c;return h|0}Sf[k[(k[e>>2]|0)+12>>2]&2047](e);h=0;r=c;return h|0}if(!(ac(b|0,d|0)|0))if((k[d>>2]|0)==1){d=k[a>>2]|0;k[a>>2]=0;b=a+4|0;e=k[b>>2]|0;k[b>>2]=0;if((d|0)!=0?(b=d+233|0,(i[b>>0]|0)==0):0){i[b>>0]=1;i[d+234>>0]=1}if(((e|0)!=0?(d=e+4|0,b=k[d>>2]|0,k[d>>2]=b+-1,(b|0)==1):0)?(Sf[k[(k[e>>2]|0)+8>>2]&2047](e),b=e+8|0,d=k[b>>2]|0,k[b>>2]=d+-1,(d|0)==1):0){Sf[k[(k[e>>2]|0)+12>>2]&2047](e);j=1}else j=1}else j=1;else{e=k[a>>2]|0;k[e+12>>2]=0;a=e+16|0;e=k[a>>2]|0;k[a>>2]=0;if(((e|0)!=0?(a=e+4|0,d=k[a>>2]|0,k[a>>2]=d+-1,(d|0)==1):0)?(Sf[k[(k[e>>2]|0)+8>>2]&2047](e),d=e+8|0,a=k[d>>2]|0,k[d>>2]=a+-1,(a|0)==1):0){Sf[k[(k[e>>2]|0)+12>>2]&2047](e);j=0}else j=0}h=j;r=c;return h|0}function mj(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b>>2];c=k[b+4>>2]|0;k[a+4>>2]=c;if(!c)return;a=c+4|0;k[a>>2]=(k[a>>2]|0)+1;return}function nj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;b=r;r=r+16|0;c=b+8|0;d=b;e=k[a>>2]|0;f=k[a+4>>2]|0;g=(f|0)==0;if(!g){h=f+4|0;k[h>>2]=(k[h>>2]|0)+1}a:do if(e){h=e+24|0;k[c>>2]=h;j=c+4|0;i[j>>0]=0;x=0;va(1454,c|0);l=x;x=0;b:do if(!(l&1)){m=e+232|0;n=e+52|0;while(1){if(i[m>>0]|0){o=13;break}x=0;xa(614,n|0,c|0);p=x;x=0;if(p&1){o=10;break}}c:do if((o|0)==10){m=Hc()|0;q=m;s=M}else if((o|0)==13){m=e+233|0;p=(i[m>>0]|0)==0;d:do if(p)i[m>>0]=1;else{t=e+234|0;do{if(i[t>>0]|0)break d;x=0;xa(614,n|0,c|0);u=x;x=0}while(!(u&1));t=Hc()|0;q=t;s=M;break c}while(0);if((i[j>>0]|0)!=0?(x=0,va(1453,k[c>>2]|0),m=x,x=0,m&1):0){o=8;break b}e:do if(p){k[d>>2]=0;x=0;Ta(498,k[e+20>>2]|0,d|0)|0;m=x;x=0;if(m&1){o=8;break b}x=0;va(1458,h|0);m=x;x=0;if(m&1){o=8;break b}i[e+234>>0]=1;m=e+52|0;x=0;Ba(565,m|0)|0;t=x;x=0;do if(!(t&1)){x=0;Ba(566,e+80|0)|0;u=x;x=0;if(u&1){u=Hc()|0;v=M;x=0;Ba(567,m|0)|0;w=x;x=0;if(!(w&1)){y=v;z=u;break}u=Hc(0)|0;Fg(u)}x=0;Ba(567,m|0)|0;u=x;x=0;if(!(u&1)){x=0;va(1453,h|0);u=x;x=0;if(u&1){o=8;break b}break e}else o=30}else o=30;while(0);if((o|0)==30){m=Hc()|0;y=M;z=m}x=0;va(1453,h|0);m=x;x=0;if(!(m&1)){A=y;B=z;break b}C=Hc(0)|0;D=M;Fg(C)}while(0);if((k[a>>2]|0)!=(e|0)){E=1;break a}k[a>>2]=0;p=a+4|0;m=k[p>>2]|0;k[p>>2]=0;if(!m){E=1;break a}p=m+4|0;t=k[p>>2]|0;k[p>>2]=t+-1;if((t|0)!=1){E=1;break a}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);t=x;x=0;if(t&1){o=8;break b}t=m+8|0;p=k[t>>2]|0;k[t>>2]=p+-1;if((p|0)!=1){E=1;break a}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){o=8;break b}else{E=1;break a}}while(0);if((i[j>>0]|0)!=0?(x=0,va(1453,k[c>>2]|0),n=x,x=0,n&1):0){C=Hc(0)|0;D=M;Fg(C)}else{A=s;B=q}}else o=8;while(0);if((o|0)==8){j=Hc()|0;A=M;B=j}if(g)Sc(B|0);j=f+4|0;h=k[j>>2]|0;k[j>>2]=h+-1;if((h|0)!=1)Sc(B|0);x=0;va(k[(k[f>>2]|0)+8>>2]|0,f|0);h=x;x=0;if(h&1){C=Hc(0)|0;D=M;Fg(C)}h=f+8|0;j=k[h>>2]|0;k[h>>2]=j+-1;if((j|0)!=1)Sc(B|0);x=0;va(k[(k[f>>2]|0)+12>>2]|0,f|0);j=x;x=0;if(j&1){C=Hc(0)|0;D=M;Fg(C)}else Sc(B|0)}else E=0;while(0);if(g){r=b;return E|0}g=f+4|0;B=k[g>>2]|0;k[g>>2]=B+-1;if((B|0)!=1){r=b;return E|0}Sf[k[(k[f>>2]|0)+8>>2]&2047](f);B=f+8|0;g=k[B>>2]|0;k[B>>2]=g+-1;if((g|0)!=1){r=b;return E|0}Sf[k[(k[f>>2]|0)+12>>2]&2047](f);r=b;return E|0}function oj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=r;r=r+16|0;e=d+8|0;f=d;g=k[a>>2]|0;h=k[a+4>>2]|0;j=(h|0)==0;if(!j){l=h+4|0;k[l>>2]=(k[l>>2]|0)+1}a:do if(g){l=g+24|0;k[e>>2]=l;m=e+4|0;i[m>>0]=0;x=0;va(1454,e|0);n=x;x=0;b:do if(n&1)o=10;else{p=g+232|0;q=g+52|0;while(1){if(i[p>>0]|0){o=15;break}x=0;s=Fa(93,q|0,e|0,b|0)|0;t=x;x=0;if(t&1){o=12;break}if(!s){o=9;break}}c:do if((o|0)==9){i[c>>0]=0;u=1;v=0}else if((o|0)==12){p=Hc()|0;w=p;y=M;o=13}else if((o|0)==15){p=g+233|0;s=i[p>>0]|0;d:do if(s<<24>>24==1){t=g+234|0;do{if(i[t>>0]|0)break d;x=0;xa(614,q|0,e|0);z=x;x=0}while(!(z&1));t=Hc()|0;w=t;y=M;o=13;break c}else i[p>>0]=1;while(0);u=0;v=s<<24>>24!=1}while(0);if((o|0)==13){if(!(i[m>>0]|0)){A=y;B=w;break}x=0;va(1453,k[e>>2]|0);q=x;x=0;if(!(q&1)){A=y;B=w;break}C=Hc(0)|0;D=M;Fg(C)}if((i[m>>0]|0)!=0?(x=0,va(1453,k[e>>2]|0),q=x,x=0,q&1):0){o=10;break}if(u){E=1;break a}e:do if(v){k[f>>2]=0;x=0;Ta(498,k[g+20>>2]|0,f|0)|0;q=x;x=0;if(q&1){o=10;break b}x=0;va(1458,l|0);q=x;x=0;if(q&1){o=10;break b}i[g+234>>0]=1;q=g+52|0;x=0;Ba(565,q|0)|0;p=x;x=0;do if(!(p&1)){x=0;Ba(566,g+80|0)|0;t=x;x=0;if(t&1){t=Hc()|0;z=M;x=0;Ba(567,q|0)|0;F=x;x=0;if(!(F&1)){G=z;H=t;break}t=Hc(0)|0;Fg(t)}x=0;Ba(567,q|0)|0;t=x;x=0;if(!(t&1)){x=0;va(1453,l|0);t=x;x=0;if(t&1){o=10;break b}break e}else o=34}else o=34;while(0);if((o|0)==34){q=Hc()|0;G=M;H=q}x=0;va(1453,l|0);q=x;x=0;if(!(q&1)){A=G;B=H;break b}C=Hc(0)|0;D=M;Fg(C)}while(0);if(((k[a>>2]|0)==(g|0)?(k[a>>2]=0,q=a+4|0,p=k[q>>2]|0,k[q>>2]=0,(p|0)!=0):0)?(q=p+4|0,s=k[q>>2]|0,k[q>>2]=s+-1,(s|0)==1):0){x=0;va(k[(k[p>>2]|0)+8>>2]|0,p|0);s=x;x=0;if(s&1){o=10;break}s=p+8|0;q=k[s>>2]|0;k[s>>2]=q+-1;if((q|0)==1?(x=0,va(k[(k[p>>2]|0)+12>>2]|0,p|0),p=x,x=0,p&1):0){o=10;break}}i[c>>0]=1;E=1;break a}while(0);if((o|0)==10){l=Hc()|0;A=M;B=l}if(j)Sc(B|0);l=h+4|0;m=k[l>>2]|0;k[l>>2]=m+-1;if((m|0)!=1)Sc(B|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);m=x;x=0;if(m&1){C=Hc(0)|0;D=M;Fg(C)}m=h+8|0;l=k[m>>2]|0;k[m>>2]=l+-1;if((l|0)!=1)Sc(B|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);l=x;x=0;if(l&1){C=Hc(0)|0;D=M;Fg(C)}else Sc(B|0)}else E=0;while(0);if(j){r=d;return E|0}j=h+4|0;B=k[j>>2]|0;k[j>>2]=B+-1;if((B|0)!=1){r=d;return E|0}Sf[k[(k[h>>2]|0)+8>>2]&2047](h);B=h+8|0;j=k[B>>2]|0;k[B>>2]=j+-1;if((j|0)!=1){r=d;return E|0}Sf[k[(k[h>>2]|0)+12>>2]&2047](h);r=d;return E|0}function pj(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;c=k[a+4>>2]|0;if(!c){d=(b|0)!=0;return d|0}a=c+4|0;k[a>>2]=(k[a>>2]|0)+1;e=(b|0)!=0;b=k[a>>2]|0;k[a>>2]=b+-1;if((b|0)!=1){d=e;return d|0}Sf[k[(k[c>>2]|0)+8>>2]&2047](c);b=c+8|0;a=k[b>>2]|0;k[b>>2]=a+-1;if((a|0)!=1){d=e;return d|0}Sf[k[(k[c>>2]|0)+12>>2]&2047](c);d=e;return d|0}function qj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=k[a>>2]|0;k[a>>2]=0;c=a+4|0;a=k[c>>2]|0;k[c>>2]=0;a:do if(b){c=b+24|0;x=0;va(1458,c|0);d=x;x=0;b:do if(!(d&1)){e=b+233|0;do if(!(i[e>>0]|0)){x=0;Ba(571,k[b+20>>2]|0)|0;f=x;x=0;if(!(f&1)){i[e>>0]=1;i[b+234>>0]=1;break}f=Hc()|0;g=M;x=0;va(1453,c|0);h=x;x=0;if(!(h&1)){j=g;l=f;break b}m=Hc(0)|0;n=M;Fg(m)}while(0);x=0;va(1453,c|0);e=x;x=0;if(!(e&1))break a;else o=6}else o=6;while(0);if((o|0)==6){c=Hc()|0;j=M;l=c}c=a;if(!a)Sc(l|0);d=c+4|0;e=k[d>>2]|0;k[d>>2]=e+-1;if((e|0)!=1)Sc(l|0);e=a;x=0;va(k[(k[e>>2]|0)+8>>2]|0,c|0);d=x;x=0;if(d&1){m=Hc(0)|0;n=M;Fg(m)}d=c+8|0;f=k[d>>2]|0;k[d>>2]=f+-1;if((f|0)!=1)Sc(l|0);x=0;va(k[(k[e>>2]|0)+12>>2]|0,c|0);c=x;x=0;if(c&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(l|0)}while(0);l=a;if(!a)return;m=l+4|0;n=k[m>>2]|0;k[m>>2]=n+-1;if((n|0)!=1)return;n=a;Sf[k[(k[n>>2]|0)+8>>2]&2047](l);a=l+8|0;m=k[a>>2]|0;k[a>>2]=m+-1;if((m|0)!=1)return;Sf[k[(k[n>>2]|0)+12>>2]&2047](l);return}function rj(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;c=Qyb(b|0,((b|0)<0)<<31>>31|0,1e9,0)|0;b=k[a+4>>2]|0;d=Hyb(c|0,M|0,b|0,((b|0)<0)<<31>>31|0)|0;b=M;if(!((b|0)>-1|(b|0)==-1&d>>>0>4294967295))return;Xc(a|0,0)|0;return}function sj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;Gb(0,c|0)|0;f=k[a>>2]|0;g=Qyb(f|0,((f|0)<0)<<31>>31|0,1e9,0)|0;h=a+4|0;i=k[h>>2]|0;j=Hyb(g|0,M|0,i|0,((i|0)<0)<<31>>31|0)|0;g=M;l=k[c>>2]|0;m=Qyb(l|0,((l|0)<0)<<31>>31|0,1e9,0)|0;n=c+4|0;o=k[n>>2]|0;p=Hyb(m|0,M|0,o|0,((o|0)<0)<<31>>31|0)|0;m=M;if(!((g|0)>(m|0)|(g|0)==(m|0)&j>>>0>p>>>0)){r=b;return}p=d+4|0;j=e+4|0;m=f;f=i;i=l;l=o;o=0;while(1){g=Gyb(m|0,((m|0)<0)<<31>>31|0,i|0,((i|0)<0)<<31>>31|0)|0;q=Qyb(g|0,M|0,1e9,0)|0;g=M;s=Gyb(f|0,((f|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;t=Hyb(s|0,M|0,q|0,g|0)|0;g=M;q=Oyb(t|0,g|0,1e9,0)|0;k[d>>2]=q;s=Qyb(q|0,M|0,-1e9,-1)|0;q=Hyb(t|0,g|0,s|0,M|0)|0;k[p>>2]=q;Xc(d|0,0)|0;Gb(0,e|0)|0;q=k[e>>2]|0;s=Qyb(q|0,((q|0)<0)<<31>>31|0,1e9,0)|0;q=k[j>>2]|0;g=Hyb(s|0,M|0,q|0,((q|0)<0)<<31>>31|0)|0;q=M;s=k[a>>2]|0;t=Qyb(s|0,((s|0)<0)<<31>>31|0,1e9,0)|0;u=k[h>>2]|0;v=Hyb(t|0,M|0,u|0,((u|0)<0)<<31>>31|0)|0;t=M;w=o+1|0;if(!(((q|0)<(t|0)|(q|0)==(t|0)&g>>>0>>0)&(w|0)<5))break;m=s;f=u;i=k[c>>2]|0;l=k[n>>2]|0;o=w}r=b;return}function tj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;f=fj()|0;if(!f){g=k[a>>2]|0;h=Qyb(g|0,((g|0)<0)<<31>>31|0,1e9,0)|0;g=k[a+4>>2]|0;j=Hyb(h|0,M|0,g|0,((g|0)<0)<<31>>31|0)|0;g=M;if(!((g|0)>-1|(g|0)==-1&j>>>0>4294967295)){r=b;return}Xc(a|0,0)|0;r=b;return}k[e>>2]=f+128;j=e+4|0;i[j>>0]=0;Uj(e);g=f+156|0;f=a+4|0;h=d+4|0;l=c+4|0;while(1){x=0;Ta(499,0,d|0)|0;m=x;x=0;if(m&1)break;m=k[a>>2]|0;n=k[f>>2]|0;o=k[d>>2]|0;p=k[h>>2]|0;q=Hyb(o|0,((o|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;m=Qyb(q|0,M|0,1e9,0)|0;q=M;o=Hyb(p|0,((p|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;n=Hyb(o|0,M|0,m|0,q|0)|0;q=M;m=Oyb(n|0,q|0,1e9,0)|0;k[c>>2]=m;o=Qyb(m|0,M|0,-1e9,-1)|0;m=Hyb(n|0,q|0,o|0,M|0)|0;k[l>>2]=m;x=0;m=Fa(93,g|0,e|0,c|0)|0;o=x;x=0;if(o&1)break;if(!m){s=8;break}}if((s|0)==8){if(i[j>>0]|0)Tj(k[e>>2]|0);r=b;return}b=Hc()|0;if(!(i[j>>0]|0))Sc(b|0);x=0;va(1453,k[e>>2]|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(b|0)}function uj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;d=fj()|0;if(!d){sj(a);r=b;return}k[c>>2]=d+128;e=c+4|0;i[e>>0]=0;Uj(c);f=d+156|0;while(1){x=0;d=Fa(93,f|0,c|0,a|0)|0;g=x;x=0;if(g&1)break;if(!d){h=7;break}}if((h|0)==7){if(i[e>>0]|0)Tj(k[c>>2]|0);r=b;return}b=Hc()|0;if(!(i[e>>0]|0))Sc(b|0);x=0;va(1453,k[c>>2]|0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else Sc(b|0)}function vj(){Ld()|0;return}function wj(){var a=0;a=Pb(84)|0;return ((a|0)>0?a:0)|0}function xj(){var a=0;a=Pb(84)|0;return ((a|0)>0?a:0)|0}function yj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;b=k[a>>2]|0;c=k[a+4>>2]|0;a=(c|0)==0;if(!a){d=c+4|0;k[d>>2]=(k[d>>2]|0)+1}a:do if(b){d=b+24|0;x=0;va(1458,d|0);e=x;x=0;b:do if(!(e&1)){i[b+285>>0]=1;f=b+256|0;c:do if(k[f>>2]|0){g=k[b+252>>2]|0;x=0;Ba(565,g|0)|0;h=x;x=0;do if(!(h&1)){x=0;Ba(566,k[f>>2]|0)|0;j=x;x=0;if(!(j&1)){x=0;Ba(567,g|0)|0;j=x;x=0;if(j&1){l=10;break}else break c}j=Hc()|0;m=M;x=0;Ba(567,g|0)|0;n=x;x=0;if(n&1){o=Hc(0)|0;p=M;Fg(o)}else{q=m;r=j}}else l=10;while(0);if((l|0)==10){g=Hc()|0;q=M;r=g}x=0;va(1453,d|0);g=x;x=0;if(!(g&1)){s=q;t=r;break b}o=Hc(0)|0;p=M;Fg(o)}while(0);x=0;va(1453,d|0);f=x;x=0;if(!(f&1))break a;else l=9}else l=9;while(0);if((l|0)==9){d=Hc()|0;s=M;t=d}if(a)Sc(t|0);d=c+4|0;e=k[d>>2]|0;k[d>>2]=e+-1;if((e|0)!=1)Sc(t|0);x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);e=x;x=0;if(e&1){o=Hc(0)|0;p=M;Fg(o)}e=c+8|0;d=k[e>>2]|0;k[e>>2]=d+-1;if((d|0)!=1)Sc(t|0);x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);d=x;x=0;if(d&1){o=Hc(0)|0;p=M;Fg(o)}else Sc(t|0)}while(0);if(a)return;a=c+4|0;t=k[a>>2]|0;k[a>>2]=t+-1;if((t|0)!=1)return;Sf[k[(k[c>>2]|0)+8>>2]&2047](c);t=c+8|0;a=k[t>>2]|0;k[t>>2]=a+-1;if((a|0)!=1)return;Sf[k[(k[c>>2]|0)+12>>2]&2047](c);return}function zj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0;b=k[a>>2]|0;c=k[a+4>>2]|0;a=(c|0)==0;if(!a){d=c+4|0;k[d>>2]=(k[d>>2]|0)+1}do if(b){d=b+24|0;x=0;va(1458,d|0);e=x;x=0;if(!(e&1)?(e=i[b+285>>0]|0,x=0,va(1453,d|0),d=x,x=0,!(d&1)):0){f=e<<24>>24!=0;break}e=Hc()|0;if(a)Sc(e|0);d=c+4|0;g=k[d>>2]|0;k[d>>2]=g+-1;if((g|0)!=1)Sc(e|0);x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);g=x;x=0;if(g&1){h=Hc(0)|0;j=M;Fg(h)}g=c+8|0;d=k[g>>2]|0;k[g>>2]=d+-1;if((d|0)!=1)Sc(e|0);x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);d=x;x=0;if(d&1){h=Hc(0)|0;j=M;Fg(h)}else Sc(e|0)}else f=0;while(0);if(a)return f|0;a=c+4|0;h=k[a>>2]|0;k[a>>2]=h+-1;if((h|0)!=1)return f|0;Sf[k[(k[c>>2]|0)+8>>2]&2047](c);h=c+8|0;a=k[h>>2]|0;k[h>>2]=a+-1;if((a|0)!=1)return f|0;Sf[k[(k[c>>2]|0)+12>>2]&2047](c);return f|0}function Aj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=k[a>>2]|0;c=k[a+4>>2]|0;a=(c|0)==0;if(!a){d=c+4|0;k[d>>2]=(k[d>>2]|0)+1}do if(b){d=b+24|0;x=0;va(1458,d|0);e=x;x=0;if(!(e&1)?(e=k[b+20>>2]|0,x=0,va(1453,d|0),d=x,x=0,!(d&1)):0){f=e;break}e=Hc()|0;if(a)Sc(e|0);d=c+4|0;g=k[d>>2]|0;k[d>>2]=g+-1;if((g|0)!=1)Sc(e|0);x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);g=x;x=0;if(g&1){h=Hc(0)|0;i=M;Fg(h)}g=c+8|0;d=k[g>>2]|0;k[g>>2]=d+-1;if((d|0)!=1)Sc(e|0);x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);d=x;x=0;if(d&1){h=Hc(0)|0;i=M;Fg(h)}else Sc(e|0)}else f=0;while(0);if(a)return f|0;a=c+4|0;h=k[a>>2]|0;k[a>>2]=h+-1;if((h|0)!=1)return f|0;Sf[k[(k[c>>2]|0)+8>>2]&2047](c);h=c+8|0;a=k[h>>2]|0;k[h>>2]=a+-1;if((a|0)!=1)return f|0;Sf[k[(k[c>>2]|0)+12>>2]&2047](c);return f|0}function Bj(){var a=0,b=0,c=0;a=fj()|0;if(!a)return;if(!(i[a+284>>0]|0))return;b=a+24|0;ak(b);c=a+285|0;if(!(i[c>>0]|0)){Tj(b);return}i[c>>0]=0;c=Rd(1)|0;x=0;fb(149,c|0,400,0);x=0;c=Hc()|0;x=0;va(1453,b|0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else Sc(c|0)}function Cj(){var a=0,b=0;a=fj()|0;if(!a){b=0;return b|0}b=(i[a+284>>0]|0)!=0;return b|0}function Dj(){var a=0,b=0,c=0,d=0;a=fj()|0;if(!a){b=0;return b|0}c=a+24|0;ak(c);d=(i[a+285>>0]|0)!=0;Tj(c);b=d;return b|0}function Ej(a){a=a|0;var b=0,c=0;b=fj()|0;if(!b){i[a>>0]=0;return}c=i[b+284>>0]|0;i[a>>0]=c;if(!(c<<24>>24))return;c=(fj()|0)+284|0;i[c>>0]=0;return}function Fj(a){a=a|0;var b=0;if(!(fj()|0))return;b=i[a>>0]|0;a=(fj()|0)+284|0;i[a>>0]=b;return}function Gj(a,b){a=a|0;b=b|0;if(!(i[b>>0]|0))return;b=(fj()|0)+284|0;i[b>>0]=1;return}function Hj(a){a=a|0;if(!(fj()|0))return;a=(fj()|0)+284|0;i[a>>0]=0;return}function Ij(a){a=a|0;var b=0,c=0,d=0,e=0;b=a;a=fj()|0;do if(!a){c=KBa(288)|0;x=0;va(1457,c|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(c);Sc(d|0)}else{k[c>>2]=21268;i[c+284>>0]=0;Zj(c+12|0,c);gj(c);e=c;break}}else e=a;while(0);a=e+236|0;e=KBa(8)|0;c=k[a>>2]|0;k[e>>2]=b;k[e+4>>2]=c;k[a>>2]=e;return}function Jj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=fj()|0;if(!b)return 0;c=b+244|0;b=k[c>>2]|0;if(!b)return 0;else{d=c;e=b}a:while(1){b=e;while(1){if((k[b+16>>2]|0)>>>0>=a>>>0){f=b;break}b=k[b+4>>2]|0;if(!b){g=d;break a}}e=k[f>>2]|0;if(!e){g=f;break}else d=f}if((g|0)==(c|0))return 0;else return ((k[g+16>>2]|0)>>>0<=a>>>0?g+20|0:0)|0;return 0}function Kj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=fj()|0;if(!b){c=0;return c|0}d=b+244|0;b=k[d>>2]|0;if(!b){c=0;return c|0}else{e=d;f=b}a:while(1){b=f;while(1){if((k[b+16>>2]|0)>>>0>=a>>>0){g=b;break}b=k[b+4>>2]|0;if(!b){h=e;break a}}f=k[g>>2]|0;if(!f){h=g;break}else e=g}if((h|0)==(d|0)){c=0;return c|0}if((k[h+16>>2]|0)>>>0>a>>>0){c=0;return c|0}c=k[h+28>>2]|0;return c|0}function Lj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=r;r=r+32|0;e=d+16|0;f=d;g=fj()|0;do if(!g){h=KBa(288)|0;x=0;va(1457,h|0);j=x;x=0;if(j&1){j=Hc()|0;OBa(h);Sc(j|0)}else{k[h>>2]=21268;i[h+284>>0]=0;Zj(h+12|0,h);gj(h);l=h;break}}else l=g;while(0);g=k[b>>2]|0;h=k[b+4>>2]|0;b=(h|0)==0;if(!b){j=h+4|0;k[j>>2]=(k[j>>2]|0)+1;k[j>>2]=(k[j>>2]|0)+1;k[j>>2]=(k[j>>2]|0)+1;k[j>>2]=(k[j>>2]|0)+1}k[f>>2]=a;k[f+4>>2]=g;g=f+8|0;k[g>>2]=h;if(!b){a=h+4|0;k[a>>2]=(k[a>>2]|0)+1}k[f+12>>2]=c;x=0;fb(153,e|0,l+240|0,f|0);f=x;x=0;a:do if(f&1){l=Hc()|0;e=M;c=k[g>>2]|0;if((c|0)!=0?(a=c+4|0,j=k[a>>2]|0,k[a>>2]=j+-1,(j|0)==1):0){x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);j=x;x=0;if(j&1){m=Hc(0)|0;n=M;Fg(m)}j=c+8|0;a=k[j>>2]|0;k[j>>2]=a+-1;if((a|0)==1?(x=0,va(k[(k[c>>2]|0)+12>>2]|0,c|0),c=x,x=0,c&1):0){m=Hc(0)|0;n=M;Fg(m)}else{o=e;p=l;q=42}}else{o=e;p=l;q=42}}else{l=k[g>>2]|0;do if((l|0)!=0?(e=l+4|0,c=k[e>>2]|0,k[e>>2]=c+-1,(c|0)==1):0){x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);c=x;x=0;if(!(c&1)){c=l+8|0;e=k[c>>2]|0;k[c>>2]=e+-1;if((e|0)!=1)break;x=0;va(k[(k[l>>2]|0)+12>>2]|0,l|0);e=x;x=0;if(!(e&1))break}e=Hc()|0;o=M;p=e;q=42;break a}while(0);if(b){r=d;return}l=h+4|0;e=k[l>>2]|0;k[l>>2]=e+-1;do if((e|0)==1){x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);c=x;x=0;if(!(c&1)){c=h+8|0;a=k[c>>2]|0;k[c>>2]=a+-1;if((a|0)!=1)break;x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);a=x;x=0;if(!(a&1))break}a=Hc()|0;s=M;t=a;u=l;q=47;break a}while(0);e=k[l>>2]|0;k[l>>2]=e+-1;do if((e|0)==1){x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);a=x;x=0;if(!(a&1)){a=h+8|0;c=k[a>>2]|0;k[a>>2]=c+-1;if((c|0)!=1)break;x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);c=x;x=0;if(!(c&1))break}c=Hc()|0;v=M;w=c;y=l;q=51;break a}while(0);e=k[l>>2]|0;k[l>>2]=e+-1;do if((e|0)==1){x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);c=x;x=0;if(!(c&1)){c=h+8|0;a=k[c>>2]|0;k[c>>2]=a+-1;if((a|0)!=1)break;x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);a=x;x=0;if(!(a&1))break}a=Hc()|0;z=M;A=a;B=l;break a}while(0);e=k[l>>2]|0;k[l>>2]=e+-1;if((e|0)!=1){r=d;return}Sf[k[(k[h>>2]|0)+8>>2]&2047](h);e=h+8|0;a=k[e>>2]|0;k[e>>2]=a+-1;if((a|0)!=1){r=d;return}Sf[k[(k[h>>2]|0)+12>>2]&2047](h);r=d;return}while(0);if((q|0)==42){if(b){C=p;D=o;Sc(C|0)}b=h+4|0;d=k[b>>2]|0;k[b>>2]=d+-1;if((d|0)==1){x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);d=x;x=0;if(d&1){E=Hc(0)|0;F=M;Fg(E)}d=h+8|0;g=k[d>>2]|0;k[d>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[h>>2]|0)+12>>2]|0,h|0),g=x,x=0,g&1):0){E=Hc(0)|0;F=M;Fg(E)}else{s=o;t=p;u=b;q=47}}else{s=o;t=p;u=b;q=47}}if((q|0)==47){b=k[u>>2]|0;k[u>>2]=b+-1;if((b|0)==1){x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);b=x;x=0;if(b&1){E=Hc(0)|0;F=M;Fg(E)}b=h+8|0;p=k[b>>2]|0;k[b>>2]=p+-1;if((p|0)==1?(x=0,va(k[(k[h>>2]|0)+12>>2]|0,h|0),p=x,x=0,p&1):0){E=Hc(0)|0;F=M;Fg(E)}else{v=s;w=t;y=u;q=51}}else{v=s;w=t;y=u;q=51}}if((q|0)==51){q=k[y>>2]|0;k[y>>2]=q+-1;if((q|0)==1){x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);q=x;x=0;if(q&1){E=Hc(0)|0;F=M;Fg(E)}q=h+8|0;u=k[q>>2]|0;k[q>>2]=u+-1;if((u|0)==1?(x=0,va(k[(k[h>>2]|0)+12>>2]|0,h|0),u=x,x=0,u&1):0){E=Hc(0)|0;F=M;Fg(E)}else{z=v;A=w;B=y}}else{z=v;A=w;B=y}}y=k[B>>2]|0;k[B>>2]=y+-1;if((y|0)!=1){C=A;D=z;Sc(C|0)}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);y=x;x=0;if(y&1){E=Hc(0)|0;F=M;Fg(E)}y=h+8|0;B=k[y>>2]|0;k[y>>2]=B+-1;if((B|0)!=1){C=A;D=z;Sc(C|0)}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){E=Hc(0)|0;F=M;Fg(E)}else{C=A;D=z;Sc(C|0)}}function Mj(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=fj()|0;if(!a){r=b;return}dk(a+240|0,c)|0;r=b;return}function Nj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;e=r;r=r+16|0;f=e+8|0;g=e;h=fj()|0;if((h|0)!=0?(i=h+244|0,h=k[i>>2]|0,(h|0)!=0):0){j=i;l=h;a:while(1){h=l;while(1){if((k[h+16>>2]|0)>>>0>=a>>>0){m=h;break}h=k[h+4>>2]|0;if(!h){n=j;break a}}l=k[m>>2]|0;if(!l){n=m;break}else j=m}if((n|0)!=(i|0)?(i=n+20|0,(k[n+16>>2]|0)>>>0<=a>>>0):0){if((d?(d=k[i>>2]|0,(d|0)!=0):0)?(m=k[n+28>>2]|0,(m|0)!=0):0)Tf[k[(k[d>>2]|0)+8>>2]&2047](d,m);m=k[b>>2]|0;d=m;if(!((c|0)!=0|(m|0)!=0)){k[f>>2]=a;m=fj()|0;if(m)dk(m+240|0,f)|0;r=e;return}f=k[b+4>>2]|0;if(f){m=f+4|0;k[m>>2]=(k[m>>2]|0)+1}k[i>>2]=d;d=n+24|0;i=k[d>>2]|0;k[d>>2]=f;if(((i|0)!=0?(f=i+4|0,d=k[f>>2]|0,k[f>>2]=d+-1,(d|0)==1):0)?(Sf[k[(k[i>>2]|0)+8>>2]&2047](i),d=i+8|0,f=k[d>>2]|0,k[d>>2]=f+-1,(f|0)==1):0)Sf[k[(k[i>>2]|0)+12>>2]&2047](i);k[n+28>>2]=c;r=e;return}}n=k[b>>2]|0;if(!((c|0)!=0|(n|0)!=0)){r=e;return}k[g>>2]=n;n=g+4|0;i=k[b+4>>2]|0;k[n>>2]=i;if(i){b=i+4|0;k[b>>2]=(k[b>>2]|0)+1}x=0;fb(154,a|0,g|0,c|0);c=x;x=0;if(!(c&1)){c=k[n>>2]|0;if(!c){r=e;return}g=c+4|0;a=k[g>>2]|0;k[g>>2]=a+-1;if((a|0)!=1){r=e;return}Sf[k[(k[c>>2]|0)+8>>2]&2047](c);a=c+8|0;g=k[a>>2]|0;k[a>>2]=g+-1;if((g|0)!=1){r=e;return}Sf[k[(k[c>>2]|0)+12>>2]&2047](c);r=e;return}e=Hc()|0;c=k[n>>2]|0;if(!c)Sc(e|0);n=c+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1)Sc(e|0);x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);g=x;x=0;if(g&1){o=Hc(0)|0;p=M;Fg(o)}g=c+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1)Sc(e|0);x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);c=x;x=0;if(c&1){o=Hc(0)|0;p=M;Fg(o)}else Sc(e|0)}function Oj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=fj()|0;if(!c)return;d=k[(k[c>>2]|0)+12>>2]|0;e=k[b>>2]|0;k[b>>2]=0;i[b+4>>0]=0;jg[d&511](c,a,e);return}function Pj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b;d=fj()|0;if(!d){r=b;return}k[c>>2]=k[a>>2];e=c+4|0;f=k[a+4>>2]|0;k[e>>2]=f;if(f){a=f+4|0;k[a>>2]=(k[a>>2]|0)+1}a=d+276|0;f=k[a>>2]|0;if((f|0)==(k[d+280>>2]|0)){x=0;xa(615,d+272|0,c|0);d=x;x=0;if(d&1){d=Hc()|0;g=k[e>>2]|0;if(!g)Sc(d|0);h=g+4|0;i=k[h>>2]|0;k[h>>2]=i+-1;if((i|0)!=1)Sc(d|0);x=0;va(k[(k[g>>2]|0)+8>>2]|0,g|0);i=x;x=0;if(i&1){j=Hc(0)|0;l=M;Fg(j)}i=g+8|0;h=k[i>>2]|0;k[i>>2]=h+-1;if((h|0)!=1)Sc(d|0);x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);g=x;x=0;if(g&1){j=Hc(0)|0;l=M;Fg(j)}else Sc(d|0)}}else{k[f>>2]=k[c>>2];c=k[e>>2]|0;k[f+4>>2]=c;if(!c)m=f;else{f=c+4|0;k[f>>2]=(k[f>>2]|0)+1;m=k[a>>2]|0}k[a>>2]=m+8}m=k[e>>2]|0;if(!m){r=b;return}e=m+4|0;a=k[e>>2]|0;k[e>>2]=a+-1;if((a|0)!=1){r=b;return}Sf[k[(k[m>>2]|0)+8>>2]&2047](m);a=m+8|0;e=k[a>>2]|0;k[a>>2]=e+-1;if((e|0)!=1){r=b;return}Sf[k[(k[m>>2]|0)+12>>2]&2047](m);r=b;return}function Qj(){var a=0;if(i[816]|0)return;Tl(21236);a=816;k[a>>2]=1;k[a+4>>2]=0;return}function Rj(){var a=0;if(i[720]|0)return;yl(21244);a=720;k[a>>2]=1;k[a+4>>2]=0;return}function Sj(){var a=0;a=gp()|0;k[5445]=a;a=gp()|0;k[5446]=a;a=hp()|0;k[5447]=a;return}function Tj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+32|0;c=b;a:while(1){d=rf(a|0)|0;switch(d|0){case 4:break;case 0:{e=6;break a;break}default:{f=d;break a}}}if((e|0)==6){r=b;return}b=hp()|0;H0a(c,206604);k[c+8>>2]=f;k[c+12>>2]=b;b=c+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[c>>2]=21476;x=0;va(1459,c|0);x=0;f=Hc()|0;k[c>>2]=21312;x=0;va(1460,b|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(c);vc(b|0)}else{qCa(c);Sc(f|0)}}function Uj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+64|0;c=b+28|0;d=b;e=k[a>>2]|0;if(!e){f=hp()|0;H0a(c,205645);k[c+8>>2]=1;k[c+12>>2]=f;f=c+16|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[c>>2]=21476;x=0;va(1459,c|0);x=0;g=Hc()|0;h=M;k[c>>2]=21312;x=0;va(1460,f|0);f=x;x=0;if(f&1){f=Hc()|0;qCa(c);vc(f|0)}qCa(c);j=h;l=g;Sc(l|0)}g=a+4|0;if(!(i[g>>0]|0)){ak(e);i[g>>0]=1;r=b;return}b=hp()|0;H0a(d,206563);k[d+8>>2]=35;k[d+12>>2]=b;b=d+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[d>>2]=21476;x=0;va(1459,d|0);x=0;g=Hc()|0;e=M;k[d>>2]=21312;x=0;va(1460,b|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(d);vc(b|0)}qCa(d);j=e;l=g;Sc(l|0)}function Vj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;i[a+20>>0]=1;b=a+60|0;td(b|0)|0;x=0;Ba(566,a+88|0)|0;c=x;x=0;if(c&1){c=Hc()|0;x=0;Ba(567,b|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(c|0)}rf(b|0)|0;b=a+136|0;c=k[a+140>>2]|0;a=c;if((a|0)==(b|0))return;else{e=a;f=c}while(1){c=k[e+8>>2]|0;td(c|0)|0;x=0;Ba(566,c+28|0)|0;a=x;x=0;if(a&1){g=c;break}rf(c|0)|0;f=k[f+4>>2]|0;e=f;if((e|0)==(b|0)){h=6;break}}if((h|0)==6)return;h=Hc()|0;x=0;Ba(567,g|0)|0;g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(h|0)}function Wj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!b)return;Wj(a,k[b>>2]|0);Wj(a,k[b+4>>2]|0);a=k[b+24>>2]|0;if((a|0)!=0?(c=a+4|0,d=k[c>>2]|0,k[c>>2]=d+-1,(d|0)==1):0){x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);d=x;x=0;if(d&1){e=Hc()|0;f=M;vc(e|0)}d=a+8|0;c=k[d>>2]|0;k[d>>2]=c+-1;if((c|0)==1?(x=0,va(k[(k[a>>2]|0)+12>>2]|0,a|0),a=x,x=0,a&1):0){e=Hc()|0;f=M;vc(e|0)}}OBa(b);return}function Xj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!a)return;b=a+236|0;c=a+240|0;d=a+248|0;e=a+244|0;a:while(1){f=k[b>>2]|0;g=(f|0)==0;if(!(k[d>>2]|0))if(g)break;else{h=f;i=6}else if(!g){h=f;i=6}if((i|0)==6)while(1){i=0;k[b>>2]=k[h+4>>2];f=k[h>>2]|0;if((f|0)!=0?(Sf[k[(k[f>>2]|0)+8>>2]&2047](f),f=k[h>>2]|0,(f|0)!=0):0)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);OBa(h);h=k[b>>2]|0;if(!h)break;else i=6}f=k[c>>2]|0;g=f;if((g|0)==(e|0))continue;else{j=f;l=g}while(1){g=j;f=k[g+4>>2]|0;if(!f){m=g;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=f;while(1){n=k[m>>2]|0;if(!n){o=m;break}else m=n}}m=o;f=k[l+20>>2]|0;if((f|0)!=0?(n=k[l+28>>2]|0,(n|0)!=0):0)Tf[k[(k[f>>2]|0)+8>>2]&2047](f,n);n=k[l+4>>2]|0;if(!n){f=g;while(1){p=k[f+8>>2]|0;if((k[p>>2]|0)==(f|0)){q=p;break}else f=p}}else{f=n;while(1){p=k[f>>2]|0;if(!p){q=f;break}else f=p}}if((k[c>>2]|0)==(l|0))k[c>>2]=q;k[d>>2]=(k[d>>2]|0)+-1;hk(k[e>>2]|0,g);f=k[l+24>>2]|0;if(((f|0)!=0?(n=f+4|0,p=k[n>>2]|0,k[n>>2]=p+-1,(p|0)==1):0)?(Sf[k[(k[f>>2]|0)+8>>2]&2047](f),p=f+8|0,n=k[p>>2]|0,k[p>>2]=n+-1,(n|0)==1):0)Sf[k[(k[f>>2]|0)+12>>2]&2047](f);OBa(j);if((o|0)==(e|0))continue a;else{j=m;l=o}}}k[a+12>>2]=0;o=a+16|0;a=k[o>>2]|0;k[o>>2]=0;if(!a)return;o=a+4|0;l=k[o>>2]|0;k[o>>2]=l+-1;if((l|0)!=1)return;Sf[k[(k[a>>2]|0)+8>>2]&2047](a);l=a+8|0;o=k[l>>2]|0;k[l>>2]=o+-1;if((o|0)!=1)return;Sf[k[(k[a>>2]|0)+12>>2]&2047](a);return}function Yj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;k[a+4>>2]=0;b=a+8|0;k[b>>2]=0;k[a>>2]=21220;k[a+12>>2]=0;c=a+16|0;k[c>>2]=0;k[a+20>>2]=0;d=a+24|0;x=0;va(1461,d|0);e=x;x=0;a:do if(e&1){f=Hc()|0;g=M;h=f}else{f=a+52|0;x=0;va(1462,f|0);j=x;x=0;b:do if(j&1){l=Hc()|0;m=M;n=l}else{l=a+128|0;x=0;va(1461,l|0);o=x;x=0;c:do if(o&1){p=Hc()|0;q=M;r=p}else{x=0;va(1462,a+156|0);p=x;x=0;if(!(p&1)){i[a+232>>0]=0;i[a+233>>0]=0;i[a+234>>0]=0;k[a+236>>2]=0;k[a+244>>2]=0;k[a+248>>2]=0;k[a+240>>2]=a+244;p=a+252|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;k[p+20>>2]=0;k[p+24>>2]=0;k[p+28>>2]=0;i[a+284>>0]=1;i[a+285>>0]=0;return}p=Hc()|0;s=M;while(1){x=0;t=Ba(568,l|0)|0;u=x;x=0;if(u&1)break;if((t|0)!=4){q=s;r=p;break c}}p=Hc(0)|0;v=p;Fg(v)}while(0);do{x=0;l=Ba(568,f|0)|0;o=x;x=0;if(o&1){w=32;break}}while((l|0)==4);if((w|0)==32){l=Hc(0)|0;v=l;Fg(v)}l=a+80|0;while(1){x=0;o=Ba(569,l|0)|0;p=x;x=0;if(p&1)break;if((o|0)!=4){m=q;n=r;break b}}l=Hc(0)|0;v=l;Fg(v)}while(0);while(1){x=0;f=Ba(568,d|0)|0;j=x;x=0;if(j&1)break;if((f|0)!=4){g=m;h=n;break a}}f=Hc(0)|0;v=f;Fg(v)}while(0);n=k[c>>2]|0;if((n|0)!=0?(c=n+4|0,m=k[c>>2]|0,k[c>>2]=m+-1,(m|0)==1):0){x=0;va(k[(k[n>>2]|0)+8>>2]|0,n|0);m=x;x=0;if(!(m&1)){m=n+8|0;c=k[m>>2]|0;k[m>>2]=c+-1;if(!((c|0)==1?(x=0,va(k[(k[n>>2]|0)+12>>2]|0,n|0),n=x,x=0,n&1):0))w=26}}else w=26;if((w|0)==26){w=k[b>>2]|0;if(!w)Sc(h|0);b=w+8|0;n=k[b>>2]|0;k[b>>2]=n+-1;if((n|0)!=1)Sc(h|0);x=0;va(k[(k[w>>2]|0)+12>>2]|0,w|0);w=x;x=0;if(!(w&1))Sc(h|0)}h=Hc(0)|0;v=h;Fg(v)}function Zj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;k[d>>2]=b;e=d+4|0;k[e>>2]=0;x=0;fb(155,d|0,b|0,e|0);b=x;x=0;if(!(b&1)){b=k[d>>2]|0;k[d>>2]=k[a>>2];k[a>>2]=b;b=a+4|0;a=k[b>>2]|0;k[b>>2]=k[e>>2];k[e>>2]=a;b=a;if(!a){r=c;return}d=b+4|0;f=k[d>>2]|0;k[d>>2]=f+-1;if((f|0)!=1){r=c;return}f=a;Sf[k[(k[f>>2]|0)+8>>2]&2047](b);a=b+8|0;d=k[a>>2]|0;k[a>>2]=d+-1;if((d|0)!=1){r=c;return}Sf[k[(k[f>>2]|0)+12>>2]&2047](b);r=c;return}c=Hc()|0;b=k[e>>2]|0;if(!b)Sc(c|0);e=b+4|0;f=k[e>>2]|0;k[e>>2]=f+-1;if((f|0)!=1)Sc(c|0);x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);f=x;x=0;if(f&1){g=Hc(0)|0;h=M;Fg(g)}f=b+8|0;e=k[f>>2]|0;k[f>>2]=e+-1;if((e|0)!=1)Sc(c|0);x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){g=Hc(0)|0;h=M;Fg(g)}else Sc(c|0)}function _j(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=k[a+12>>2]|0;c=k[a+16>>2]|0;a=(c|0)==0;if(!a){d=c+4|0;k[d>>2]=(k[d>>2]|0)+1}k[b+12>>2]=0;d=b+16|0;e=k[d>>2]|0;k[d>>2]=0;if((e|0)!=0?(d=e+4|0,f=k[d>>2]|0,k[d>>2]=f+-1,(f|0)==1):0){x=0;va(k[(k[e>>2]|0)+8>>2]|0,e|0);f=x;x=0;if(!(f&1)){f=e+8|0;d=k[f>>2]|0;k[f>>2]=d+-1;if((d|0)==1?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0)g=10;else g=8}else g=10}else g=8;a:do if((g|0)==8){x=0;va(1463,b|0);e=x;x=0;if(!(e&1)){x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);e=x;x=0;if(e&1){e=Hc(400)|0;d=M;if((d|0)!=(hf(400)|0)){h=e;j=d;break}me(e|0)|0;x=0;hb(45);e=x;x=0;if(e&1){g=10;break}}x=0;va(1455,b|0);e=x;x=0;if((!(e&1)?(x=0,va(1463,0),e=x,x=0,!(e&1)):0)?(e=b+24|0,x=0,va(1458,e|0),d=x,x=0,!(d&1)):0){i[b+232>>0]=1;d=b+52|0;x=0;Ba(565,d|0)|0;f=x;x=0;do if(!(f&1)){x=0;Ba(566,b+80|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;x=0;Ba(567,d|0)|0;n=x;x=0;if(!(n&1)){o=m;p=l;break}l=Hc(0)|0;Fg(l)}x=0;Ba(567,d|0)|0;l=x;x=0;if(!(l&1)){x=0;va(1453,e|0);l=x;x=0;if(l&1){g=10;break a}if(a)return 0;l=c+4|0;m=k[l>>2]|0;k[l>>2]=m+-1;if((m|0)!=1)return 0;Sf[k[(k[c>>2]|0)+8>>2]&2047](c);m=c+8|0;l=k[m>>2]|0;k[m>>2]=l+-1;if((l|0)!=1)return 0;Sf[k[(k[c>>2]|0)+12>>2]&2047](c);return 0}else g=22}else g=22;while(0);if((g|0)==22){d=Hc()|0;o=M;p=d}x=0;va(1453,e|0);d=x;x=0;if(d&1){q=Hc(0)|0;r=M;Fg(q)}else{h=p;j=o}}else g=10}else g=10}while(0);if((g|0)==10){g=Hc()|0;h=g;j=M}if(a)Sc(h|0);a=c+4|0;j=k[a>>2]|0;k[a>>2]=j+-1;if((j|0)!=1)Sc(h|0);x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);j=x;x=0;if(j&1){q=Hc(0)|0;r=M;Fg(q)}j=c+8|0;a=k[j>>2]|0;k[j>>2]=a+-1;if((a|0)!=1)Sc(h|0);x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);c=x;x=0;if(c&1){q=Hc(0)|0;r=M;Fg(q)}else Sc(h|0);return 0}function $j(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+48|0;d=c+28|0;e=c;f=a+28|0;x=0;fb(156,d|0,a|0,f|0);g=x;x=0;a:do if(!(g&1)){x=0;va(1464,b|0);h=x;x=0;do if(h&1){j=Hc()|0;l=0;m=j;n=M}else{while(1){x=0;j=Ta(500,f|0,a|0)|0;o=x;x=0;if(o&1){p=12;break}if((j|0)!=4){q=j;break}}if((p|0)==12){j=Hc()|0;l=b;m=j;n=M;break}j=i[d+8>>0]|0;x=0;Ba(567,k[d+4>>2]|0)|0;o=x;x=0;if(o&1){s=b;p=11;break a}if(j<<24>>24){j=k[d>>2]|0;o=j+24|0;x=0;va(1458,o|0);t=x;x=0;if(t&1){s=b;p=11;break a}k[j+252>>2]=0;k[j+256>>2]=0;x=0;va(1453,o|0);o=x;x=0;if(o&1){s=b;p=11;break a}}Uj(b);Bj();if(!q){r=c;return}o=hp()|0;H0a(e,205962);k[e+8>>2]=q;k[e+12>>2]=o;o=e+16|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[e>>2]=21292;x=0;va(1465,e|0);x=0;j=Hc()|0;t=M;k[e>>2]=21312;x=0;va(1460,o|0);o=x;x=0;if(o&1){o=Hc()|0;qCa(e);vc(o|0)}qCa(e);u=t;v=j;Sc(v|0)}while(0);h=i[d+8>>0]|0;x=0;Ba(567,k[d+4>>2]|0)|0;j=x;x=0;if(j&1){w=Hc(0)|0;y=M;Fg(w)}if(h<<24>>24){h=k[d>>2]|0;j=h+24|0;x=0;va(1458,j|0);t=x;x=0;if(t&1){w=Hc(0)|0;y=M;Fg(w)}k[h+252>>2]=0;k[h+256>>2]=0;x=0;va(1453,j|0);j=x;x=0;if(j&1){w=Hc(0)|0;y=M;Fg(w)}else{z=n;A=m;B=l}}else{z=n;A=m;B=l}}else{s=0;p=11}while(0);if((p|0)==11){p=Hc()|0;z=M;A=p;B=s}if(!B){u=z;v=A;Sc(v|0)}x=0;va(1454,B|0);B=x;x=0;if(B&1){w=Hc(0)|0;y=M;Fg(w)}else{u=z;v=A;Sc(v|0)}}function ak(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+32|0;c=b;a:while(1){d=td(a|0)|0;switch(d|0){case 4:break;case 0:{e=6;break a;break}default:{f=d;break a}}}if((e|0)==6){r=b;return}b=hp()|0;H0a(c,205915);k[c+8>>2]=f;k[c+12>>2]=b;b=c+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[c>>2]=21476;x=0;va(1459,c|0);x=0;f=Hc()|0;k[c>>2]=21312;x=0;va(1460,b|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(c);vc(b|0)}else{qCa(c);Sc(f|0)}}function bk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=r;r=r+48|0;e=d+28|0;f=d;g=a+28|0;x=0;fb(156,e|0,a|0,g|0);h=x;x=0;a:do if(!(h&1)){x=0;va(1464,b|0);j=x;x=0;if(!(j&1)){x=0;j=Fa(94,g|0,a|0,c|0)|0;l=x;x=0;if(l&1)m=b;else{l=i[e+8>>0]|0;x=0;Ba(567,k[e+4>>2]|0)|0;n=x;x=0;if(n&1){o=b;p=10;break}if(l<<24>>24){l=k[e>>2]|0;n=l+24|0;x=0;va(1458,n|0);q=x;x=0;if(q&1){o=b;p=10;break}k[l+252>>2]=0;k[l+256>>2]=0;x=0;va(1453,n|0);n=x;x=0;if(n&1){o=b;p=10;break}}x=0;hb(48);n=x;x=0;if(n&1){o=b;p=10;break}switch(j|0){case 0:{s=1;Uj(b);r=d;return s|0}case 110:{s=0;Uj(b);r=d;return s|0}default:{x=0;n=$a(42)|0;l=x;x=0;if(l&1){o=b;p=10;break a}x=0;xa(616,f|0,205354);l=x;x=0;if(l&1){o=b;p=10;break a}k[f+8>>2]=j;k[f+12>>2]=n;n=f+16|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[f>>2]=21292;x=0;va(1465,f|0);x=0;j=Hc()|0;l=M;k[f>>2]=21312;x=0;va(1460,n|0);n=x;x=0;if(n&1){n=Hc()|0;qCa(f);vc(n|0)}else{qCa(f);t=j;u=l;v=b;break a}}}}}else m=0;l=Hc()|0;j=M;n=i[e+8>>0]|0;x=0;Ba(567,k[e+4>>2]|0)|0;q=x;x=0;if(q&1){w=Hc(0)|0;y=M;Fg(w)}if(n<<24>>24){n=k[e>>2]|0;q=n+24|0;x=0;va(1458,q|0);z=x;x=0;if(z&1){w=Hc(0)|0;y=M;Fg(w)}k[n+252>>2]=0;k[n+256>>2]=0;x=0;va(1453,q|0);q=x;x=0;if(q&1){w=Hc(0)|0;y=M;Fg(w)}else{A=j;B=l;C=m;p=22}}else{A=j;B=l;C=m;p=22}}else{o=0;p=10}while(0);if((p|0)==10){m=Hc()|0;A=M;B=m;C=o;p=22}if((p|0)==22)if(!C){D=B;E=A;Sc(D|0)}else{t=B;u=A;v=C}x=0;va(1454,v|0);v=x;x=0;if(v&1){w=Hc(0)|0;y=M;Fg(w)}else{D=t;E=u;Sc(D|0)}return 0}function ck(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+16|0;e=d;f=b+4|0;g=k[f>>2]|0;do if(g){h=k[c>>2]|0;j=g;while(1){l=k[j+16>>2]|0;if(h>>>0>>0){m=k[j>>2]|0;if(!m){n=j;o=j;p=5;break}else q=m}else{if(l>>>0>=h>>>0){s=j;p=10;break}l=j+4|0;m=k[l>>2]|0;if(!m){t=l;u=j;p=9;break}else q=m}j=q}if((p|0)==5){k[e>>2]=o;v=n;w=o;break}else if((p|0)==9){k[e>>2]=u;v=t;w=u;break}else if((p|0)==10){k[e>>2]=s;v=e;w=s;break}}else{k[e>>2]=f;v=f;w=f}while(0);f=k[v>>2]|0;if(f){x=0;y=f;z=y;k[a>>2]=z;A=a+4|0;i[A>>0]=x;r=d;return}f=KBa(32)|0;k[f+16>>2]=k[c>>2];k[f+20>>2]=k[c+4>>2];s=k[c+8>>2]|0;k[f+24>>2]=s;if(!s)B=w;else{w=s+4|0;k[w>>2]=(k[w>>2]|0)+1;B=k[e>>2]|0}k[f+28>>2]=k[c+12>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=B;k[v>>2]=f;B=k[k[b>>2]>>2]|0;if(!B)C=f;else{k[b>>2]=B;C=k[v>>2]|0}ui(k[b+4>>2]|0,C);C=b+8|0;k[C>>2]=(k[C>>2]|0)+1;x=1;y=f;z=y;k[a>>2]=z;A=a+4|0;i[A>>0]=x;r=d;return}function dk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=a+4|0;d=k[c>>2]|0;if(!d){e=0;return e|0}f=k[b>>2]|0;b=c;g=d;a:while(1){h=g;while(1){if((k[h+16>>2]|0)>>>0>=f>>>0){i=h;break}h=k[h+4>>2]|0;if(!h){j=b;break a}}g=k[i>>2]|0;if(!g){j=i;break}else b=i}if((j|0)==(c|0)){e=0;return e|0}if((j|0)==(c|0)?1:f>>>0<(k[j+16>>2]|0)>>>0){e=0;return e|0}f=k[j+4>>2]|0;if(!f){c=j;while(1){i=k[c+8>>2]|0;if((k[i>>2]|0)==(c|0)){l=i;break}else c=i}}else{c=f;while(1){f=k[c>>2]|0;if(!f){l=c;break}else c=f}}if((k[a>>2]|0)==(j|0))k[a>>2]=l;l=a+8|0;k[l>>2]=(k[l>>2]|0)+-1;hk(d,j);d=k[j+24>>2]|0;if(((d|0)!=0?(l=d+4|0,a=k[l>>2]|0,k[l>>2]=a+-1,(a|0)==1):0)?(Sf[k[(k[d>>2]|0)+8>>2]&2047](d),a=d+8|0,l=k[a>>2]|0,k[a>>2]=l+-1,(l|0)==1):0)Sf[k[(k[d>>2]|0)+12>>2]&2047](d);OBa(j);e=1;return e|0}function ek(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=k[b+4>>2]|0;k[m+(n<<3)+4>>2]=l;if(!l){t=o;u=d}else{d=l+4|0;k[d>>2]=(k[d>>2]|0)+1;t=k[c>>2]|0;u=k[a>>2]|0}d=q+8|0;if((t|0)==(u|0)){v=r;w=t;y=t}else{l=t;t=q;q=r;while(1){r=l;l=l+-8|0;k[t+-8>>2]=k[l>>2];o=k[r+-4>>2]|0;k[t+-4>>2]=o;if(o){r=o+4|0;k[r>>2]=(k[r>>2]|0)+1}t=q+-8|0;r=t;if((l|0)==(u|0)){z=r;break}else q=r}v=z;w=k[a>>2]|0;y=k[c>>2]|0}k[a>>2]=v;k[c>>2]=d;k[g>>2]=p;p=w;a:do if((y|0)!=(p|0)){g=y;while(1){d=k[g+-4>>2]|0;g=g+-8|0;if((d|0)!=0?(c=d+4|0,v=k[c>>2]|0,k[c>>2]=v+-1,(v|0)==1):0){x=0;va(k[(k[d>>2]|0)+8>>2]|0,d|0);v=x;x=0;if(v&1){s=22;break}v=d+8|0;c=k[v>>2]|0;k[v>>2]=c+-1;if((c|0)==1?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){s=22;break}}if((g|0)==(p|0))break a}if((s|0)==22){g=Hc()|0;vc(g|0)}}while(0);if(!w)return;OBa(w);return}function fk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;k[e>>2]=b;k[e+4>>2]=c;c=a+264|0;b=k[c>>2]|0;if((b|0)==(k[a+268>>2]|0)){gk(a+260|0,e);r=d;return}else{a=e;e=k[a+4>>2]|0;f=b;k[f>>2]=k[a>>2];k[f+4>>2]=e;k[c>>2]=(k[c>>2]|0)+8;r=d;return}}function gk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>3>>>0<268435455){h=g>>2;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>3;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=536870911;o=e;p=e-f>>3;q=6}if((q|0)==6){i=n;j=KBa(n<<3)|0;l=p;m=o}o=j+(l<<3)|0;l=b;b=k[l+4>>2]|0;p=o;k[p>>2]=k[l>>2];k[p+4>>2]=b;b=m-f|0;m=o+(0-(b>>3)<<3)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+8;k[d>>2]=j+(i<<3);if(!f)return;OBa(f);return}function hk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;c=k[b>>2]|0;if(c){d=k[b+4>>2]|0;if(!d){e=b;f=c}else{c=d;while(1){d=k[c>>2]|0;if(!d){e=c;f=0;break}else c=d}}}else{e=b;f=0}c=e+4|0;d=k[((f|0)==0?c:e)>>2]|0;f=(d|0)==0;g=e+8|0;if(!f)k[d+8>>2]=k[g>>2];h=k[g>>2]|0;j=k[h>>2]|0;if((j|0)==(e|0)){k[h>>2]=d;if((e|0)==(a|0)){l=d;m=0}else{l=a;m=k[h+4>>2]|0}}else{k[h+4>>2]=d;l=a;m=j}j=e+12|0;a=(i[j>>0]|0)==0;if((e|0)==(b|0))n=l;else{h=b+8|0;o=k[h>>2]|0;k[g>>2]=o;g=o;if((k[k[h>>2]>>2]|0)==(b|0))k[g>>2]=e;else k[g+4>>2]=e;g=k[b>>2]|0;k[e>>2]=g;k[g+8>>2]=e;g=k[b+4>>2]|0;k[c>>2]=g;if(g)k[g+8>>2]=e;i[j>>0]=i[b+12>>0]|0;n=(l|0)==(b|0)?e:l}if(a|(n|0)==0)return;if(f){p=n;q=m}else{i[d+12>>0]=1;return}while(1){d=k[q+8>>2]|0;m=q+12|0;n=(i[m>>0]|0)!=0;if((k[d>>2]|0)==(q|0)){if(n){r=p;s=q}else{i[m>>0]=1;i[d+12>>0]=0;f=k[d>>2]|0;a=f+4|0;l=k[a>>2]|0;k[d>>2]=l;if(l)k[l+8>>2]=d;l=d+8|0;k[f+8>>2]=k[l>>2];e=k[l>>2]|0;if((k[e>>2]|0)==(d|0))k[e>>2]=f;else k[e+4>>2]=f;k[a>>2]=d;k[l>>2]=f;f=k[q+4>>2]|0;r=(p|0)==(f|0)?q:p;s=k[f>>2]|0}t=k[s>>2]|0;u=(t|0)==0;if(!u?(i[t+12>>0]|0)==0:0){v=t;w=s;x=66;break}f=k[s+4>>2]|0;if((f|0)!=0?(i[f+12>>0]|0)==0:0){x=65;break}i[s+12>>0]=0;f=k[s+8>>2]|0;l=f+12|0;if((f|0)==(r|0)|(i[l>>0]|0)==0){y=l;x=62;break}l=k[f+8>>2]|0;z=r;A=(k[l>>2]|0)==(f|0)?l+4|0:l}else{if(n){B=p;C=q}else{i[m>>0]=1;i[d+12>>0]=0;m=d+4|0;n=k[m>>2]|0;l=k[n>>2]|0;k[m>>2]=l;if(l)k[l+8>>2]=d;l=d+8|0;k[n+8>>2]=k[l>>2];m=k[l>>2]|0;if((k[m>>2]|0)==(d|0))k[m>>2]=n;else k[m+4>>2]=n;k[n>>2]=d;k[l>>2]=n;n=k[q>>2]|0;B=(p|0)==(n|0)?q:p;C=k[n+4>>2]|0}n=k[C>>2]|0;if((n|0)!=0?(i[n+12>>0]|0)==0:0){D=C;E=n;F=C;x=36;break}l=k[C+4>>2]|0;if((l|0)!=0?(i[l+12>>0]|0)==0:0){G=n;H=C;I=l;J=C;x=37;break}i[C+12>>0]=0;l=k[C+8>>2]|0;if((l|0)==(B|0)){K=B;x=34;break}if(!(i[l+12>>0]|0)){K=l;x=34;break}n=k[l+8>>2]|0;z=B;A=(k[n>>2]|0)==(l|0)?n+4|0:n}p=z;q=k[A>>2]|0}if((x|0)==34){i[K+12>>0]=1;return}else if((x|0)==36){K=k[F+4>>2]|0;if(!K){L=D;M=E;N=F;x=38}else{G=E;H=D;I=K;J=F;x=37}}else if((x|0)==62){i[y>>0]=1;return}else if((x|0)==65)if(u){O=s;x=67}else{v=t;w=s;x=66}if((x|0)==37)if(!(i[I+12>>0]|0)){P=I;Q=J;x=44}else{L=H;M=G;N=J;x=38}else if((x|0)==66)if(!(i[v+12>>0]|0)){R=v;S=w;x=73}else{O=w;x=67}if((x|0)==38){i[M+12>>0]=1;i[N+12>>0]=0;w=M+4|0;v=k[w>>2]|0;k[L>>2]=v;if(v)k[v+8>>2]=N;v=N+8|0;k[M+8>>2]=k[v>>2];L=k[v>>2]|0;if((k[L>>2]|0)==(N|0))k[L>>2]=M;else k[L+4>>2]=M;k[w>>2]=N;k[v>>2]=M;P=N;Q=M;x=44}else if((x|0)==67){M=O+4|0;N=k[M>>2]|0;i[N+12>>0]=1;i[O+12>>0]=0;v=k[N>>2]|0;k[M>>2]=v;if(v)k[v+8>>2]=O;v=O+8|0;k[N+8>>2]=k[v>>2];M=k[v>>2]|0;if((k[M>>2]|0)==(O|0))k[M>>2]=N;else k[M+4>>2]=N;k[N>>2]=O;k[v>>2]=N;R=O;S=N;x=73}if((x|0)==44){N=k[Q+8>>2]|0;O=N+12|0;i[Q+12>>0]=i[O>>0]|0;i[O>>0]=1;i[P+12>>0]=1;P=N+4|0;O=k[P>>2]|0;Q=k[O>>2]|0;k[P>>2]=Q;if(Q)k[Q+8>>2]=N;Q=N+8|0;k[O+8>>2]=k[Q>>2];P=k[Q>>2]|0;if((k[P>>2]|0)==(N|0))k[P>>2]=O;else k[P+4>>2]=O;k[O>>2]=N;k[Q>>2]=O;return}else if((x|0)==73){x=k[S+8>>2]|0;O=x+12|0;i[S+12>>0]=i[O>>0]|0;i[O>>0]=1;i[R+12>>0]=1;R=k[x>>2]|0;O=R+4|0;S=k[O>>2]|0;k[x>>2]=S;if(S)k[S+8>>2]=x;S=x+8|0;k[R+8>>2]=k[S>>2];Q=k[S>>2]|0;if((k[Q>>2]|0)==(x|0))k[Q>>2]=R;else k[Q+4>>2]=R;k[O>>2]=x;k[S>>2]=R;return}}function ik(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=fj()|0;k[a>>2]=d;e=a+4|0;k[e>>2]=b;f=a+8|0;if(d){g=i[d+284>>0]|0;i[f>>0]=g;if(g<<24>>24){g=d+24|0;ak(g);d=k[a>>2]|0;a=d+285|0;if(!(i[a>>0]|0)){k[d+252>>2]=b;k[d+256>>2]=c;x=0;Ba(565,k[e>>2]|0)|0;e=x;x=0;if(!(e&1)){Tj(g);return}}else{i[a>>0]=0;a=Rd(1)|0;x=0;fb(149,a|0,400,0);x=0}a=Hc()|0;x=0;va(1453,g|0);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(a|0)}}else i[f>>0]=0;td(b|0)|0;return}function jk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+64|0;c=b+28|0;d=b;e=k[a>>2]|0;if(!e){f=hp()|0;H0a(c,205645);k[c+8>>2]=1;k[c+12>>2]=f;f=c+16|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[c>>2]=21476;x=0;va(1459,c|0);x=0;g=Hc()|0;h=M;k[c>>2]=21312;x=0;va(1460,f|0);f=x;x=0;if(f&1){f=Hc()|0;qCa(c);vc(f|0)}qCa(c);j=h;l=g;Sc(l|0)}g=a+4|0;if(i[g>>0]|0){Tj(e);i[g>>0]=0;r=b;return}b=hp()|0;H0a(d,205676);k[d+8>>2]=1;k[d+12>>2]=b;b=d+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[d>>2]=21476;x=0;va(1459,d|0);x=0;g=Hc()|0;e=M;k[d>>2]=21312;x=0;va(1460,b|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(d);vc(b|0)}qCa(d);j=e;l=g;Sc(l|0)}function kk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;b=r;r=r+48|0;c=b;b=Rd(52)|0;I0a(c,a);k[c>>2]=21312;d=a+8|0;e=k[d+4>>2]|0;f=c+8|0;k[f>>2]=k[d>>2];k[f+4>>2]=e;e=c+16|0;x=0;xa(604,e|0,a+16|0);a=x;x=0;if(!(a&1)){a=c+28|0;f=c+32|0;k[f>>2]=0;k[c+36>>2]=0;k[c+40>>2]=0;k[c+44>>2]=-1;k[c>>2]=21332;k[a>>2]=21352;d=b+48|0;k[d>>2]=21368;x=0;xa(617,b|0,c|0);g=x;x=0;do if(!(g&1)){k[b>>2]=21396;h=b+28|0;k[h>>2]=21424;k[d>>2]=21452;x=0;xa(608,h|0,c+28|0);i=x;x=0;if(!(i&1)){x=0;fb(149,b|0,432,97);x=0;i=Hc()|0;j=0;l=M;m=i;break}i=Hc()|0;n=M;k[h>>2]=20796;h=b+32|0;o=k[h>>2]|0;if(o){x=0;p=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;o=x;x=0;if(o&1){o=Hc()|0;vc(o|0)}if(p)k[h>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);h=x;x=0;if(h&1){h=Hc()|0;qCa(b);vc(h|0)}else{qCa(b);q=n;s=i;t=13;break}}else{i=Hc()|0;q=M;s=i;t=13}while(0);if((t|0)==13){j=1;l=q;m=s}k[a>>2]=20796;a=k[f>>2]|0;if(a){x=0;s=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(s)k[f>>2]=0}k[c>>2]=21312;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc()|0;qCa(c);vc(e|0)}qCa(c);if(j){u=l;v=m}else{w=l;y=m;Sc(y|0)}}else{m=Hc()|0;l=M;qCa(c);u=l;v=m}Fc(b|0);w=u;y=v;Sc(y|0)}function lk(a){a=a|0;var b=0;k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function mk(a){a=a|0;var b=0;k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function nk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+16|0;c=b;d=a+16|0;e=i[d>>0]|0;if(!(e&1))f=(e&255)>>>1;else f=k[a+20>>2]|0;a:do if(!f){g=sCa(a)|0;x=0;Ta(496,d|0,g|0)|0;g=x;x=0;do if(!(g&1)){h=i[d>>0]|0;if(!(h&1))j=(h&255)>>>1;else j=k[a+20>>2]|0;if((j|0)!=0?(x=0,Ta(484,d|0,325552)|0,h=x,x=0,h&1):0){l=11;break}h=k[a+12>>2]|0;x=0;fb(k[(k[h>>2]|0)+12>>2]|0,c|0,h|0,k[a+8>>2]|0);h=x;x=0;if(!(h&1)){h=i[c>>0]|0;m=(h&1)==0;x=0;Fa(88,d|0,(m?c+1|0:k[c+8>>2]|0)|0,(m?(h&255)>>>1:k[c+4>>2]|0)|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;x=0;va(1460,c|0);m=x;x=0;if(!(m&1)){n=h;break}h=Hc(0)|0;Fg(h)}else{x=0;va(1460,c|0);h=x;x=0;if(h&1){l=11;break}o=i[d>>0]|0;break a}}else l=11}else l=11;while(0);if((l|0)==11){g=Hc(0)|0;n=g}me(n|0)|0;g=sCa(a)|0;x=0;hb(45);h=x;x=0;if(h&1){h=Hc()|0;vc(h|0)}else{p=g;r=b;return p|0}}else o=e;while(0);if(!(o&1)){p=d+1|0;r=b;return p|0}else{p=k[a+24>>2]|0;r=b;return p|0}return 0}function ok(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;I0a(a,b);k[a>>2]=21312;c=b+8|0;d=k[c+4>>2]|0;e=a+8|0;k[e>>2]=k[c>>2];k[e+4>>2]=d;d=a+16|0;x=0;xa(604,d|0,b+16|0);e=x;x=0;if(e&1){e=Hc()|0;qCa(a);Sc(e|0)}k[a>>2]=21292;e=a+28|0;k[e>>2]=20796;c=k[b+32>>2]|0;k[a+32>>2]=c;if(!c){f=a+36|0;g=b+36|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[a>>2]=21332;k[e>>2]=21352;return}x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);c=x;x=0;if(!(c&1)){f=a+36|0;g=b+36|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[a>>2]=21332;k[e>>2]=21352;return}e=Hc()|0;k[a>>2]=21312;x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(a);vc(d|0)}else{qCa(a);Sc(e|0)}}function pk(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function qk(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function rk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=KBa(52)|0;c=b+48|0;k[c>>2]=21368;x=0;xa(617,b|0,a|0);d=x;x=0;if(d&1){d=Hc()|0;e=M;f=d;OBa(b);Sc(f|0)}k[b>>2]=21396;d=b+28|0;k[d>>2]=21424;k[c>>2]=21452;x=0;xa(608,d|0,a+28|0);a=x;x=0;if(!(a&1))return b+(k[(k[b>>2]|0)+-12>>2]|0)|0;a=Hc()|0;c=M;k[d>>2]=20796;d=b+32|0;g=k[d>>2]|0;if(g){x=0;h=Ba(k[(k[g>>2]|0)+16>>2]|0,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;vc(g|0)}if(h)k[d>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(b);vc(d|0)}qCa(b);e=c;f=a;OBa(b);Sc(f|0);return 0}function sk(a){a=a|0;var b=0,c=0;b=Rd(52)|0;c=b+48|0;k[c>>2]=21368;x=0;xa(617,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else{k[b>>2]=21396;k[b+28>>2]=21424;k[c>>2]=21452;Gf(b|0,432,97)}}function tk(a){a=a|0;var b=0,c=0,d=0;b=a+-28|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function uk(a){a=a|0;qk(a+-28|0);return}function vk(a){a=a|0;return rk(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0}function wk(a){a=a|0;sk(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function xk(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function yk(a){a=a|0;qk(a+(k[(k[a>>2]|0)+-20>>2]|0)|0);return}function zk(a){a=a|0;return}function Ak(a){a=a|0;OBa(a);return}function Bk(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function Ck(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function Dk(a){a=a|0;var b=0,c=0,d=0;b=a+-28|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function Ek(a){a=a|0;Ck(a+-28|0);return}function Fk(a){a=a|0;var b=0;k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function Gk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;b=r;r=r+48|0;c=b;b=Rd(52)|0;I0a(c,a);k[c>>2]=21312;d=a+8|0;e=k[d+4>>2]|0;f=c+8|0;k[f>>2]=k[d>>2];k[f+4>>2]=e;e=c+16|0;x=0;xa(604,e|0,a+16|0);a=x;x=0;if(!(a&1)){a=c+28|0;f=c+32|0;k[f>>2]=0;k[c+36>>2]=0;k[c+40>>2]=0;k[c+44>>2]=-1;k[c>>2]=21496;k[a>>2]=21516;d=b+48|0;k[d>>2]=21368;x=0;xa(618,b|0,c|0);g=x;x=0;do if(!(g&1)){k[b>>2]=21536;h=b+28|0;k[h>>2]=21564;k[d>>2]=21592;x=0;xa(608,h|0,c+28|0);i=x;x=0;if(!(i&1)){x=0;fb(149,b|0,512,110);x=0;i=Hc()|0;j=0;l=M;m=i;break}i=Hc()|0;n=M;k[h>>2]=20796;h=b+32|0;o=k[h>>2]|0;if(o){x=0;p=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;o=x;x=0;if(o&1){o=Hc()|0;vc(o|0)}if(p)k[h>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);h=x;x=0;if(h&1){h=Hc()|0;qCa(b);vc(h|0)}else{qCa(b);q=n;s=i;t=13;break}}else{i=Hc()|0;q=M;s=i;t=13}while(0);if((t|0)==13){j=1;l=q;m=s}k[a>>2]=20796;a=k[f>>2]|0;if(a){x=0;s=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(s)k[f>>2]=0}k[c>>2]=21312;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc()|0;qCa(c);vc(e|0)}qCa(c);if(j){u=l;v=m}else{w=l;y=m;Sc(y|0)}}else{m=Hc()|0;l=M;qCa(c);u=l;v=m}Fc(b|0);w=u;y=v;Sc(y|0)}function Hk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;I0a(a,b);k[a>>2]=21312;c=b+8|0;d=k[c+4>>2]|0;e=a+8|0;k[e>>2]=k[c>>2];k[e+4>>2]=d;d=a+16|0;x=0;xa(604,d|0,b+16|0);e=x;x=0;if(e&1){e=Hc()|0;qCa(a);Sc(e|0)}k[a>>2]=21476;e=a+28|0;k[e>>2]=20796;c=k[b+32>>2]|0;k[a+32>>2]=c;if(!c){f=a+36|0;g=b+36|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[a>>2]=21496;k[e>>2]=21516;return}x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);c=x;x=0;if(!(c&1)){f=a+36|0;g=b+36|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[a>>2]=21496;k[e>>2]=21516;return}e=Hc()|0;k[a>>2]=21312;x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(a);vc(d|0)}else{qCa(a);Sc(e|0)}}function Ik(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function Jk(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function Kk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=KBa(52)|0;c=b+48|0;k[c>>2]=21368;x=0;xa(618,b|0,a|0);d=x;x=0;if(d&1){d=Hc()|0;e=M;f=d;OBa(b);Sc(f|0)}k[b>>2]=21536;d=b+28|0;k[d>>2]=21564;k[c>>2]=21592;x=0;xa(608,d|0,a+28|0);a=x;x=0;if(!(a&1))return b+(k[(k[b>>2]|0)+-12>>2]|0)|0;a=Hc()|0;c=M;k[d>>2]=20796;d=b+32|0;g=k[d>>2]|0;if(g){x=0;h=Ba(k[(k[g>>2]|0)+16>>2]|0,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;vc(g|0)}if(h)k[d>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(b);vc(d|0)}qCa(b);e=c;f=a;OBa(b);Sc(f|0);return 0}function Lk(a){a=a|0;var b=0,c=0;b=Rd(52)|0;c=b+48|0;k[c>>2]=21368;x=0;xa(618,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else{k[b>>2]=21536;k[b+28>>2]=21564;k[c>>2]=21592;Gf(b|0,512,110)}}function Mk(a){a=a|0;var b=0,c=0,d=0;b=a+-28|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function Nk(a){a=a|0;Jk(a+-28|0);return}function Ok(a){a=a|0;return Kk(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0}function Pk(a){a=a|0;Lk(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Qk(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function Rk(a){a=a|0;Jk(a+(k[(k[a>>2]|0)+-20>>2]|0)|0);return}function Sk(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function Tk(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function Uk(a){a=a|0;var b=0,c=0,d=0;b=a+-28|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function Vk(a){a=a|0;Tk(a+-28|0);return}function Wk(a){a=a|0;var b=0;k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function Xk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;x=0;d=Ba(563,16)|0;e=x;x=0;if(e&1){e=Hc(0)|0;me(e|0)|0;if(!((b|0)!=0?(x=0,va(k[(k[b>>2]|0)+4>>2]|0,b|0),e=x,x=0,e&1):0)){x=0;hb(46);x=0}e=Hc()|0;x=0;hb(45);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(e|0)}k[d+4>>2]=1;k[d+8>>2]=1;k[d>>2]=21616;k[d+12>>2]=b;e=k[c>>2]|0;k[c>>2]=d;if(((e|0)!=0?(d=e+4|0,c=k[d>>2]|0,k[d>>2]=c+-1,(c|0)==1):0)?(Sf[k[(k[e>>2]|0)+8>>2]&2047](e),c=e+8|0,d=k[c>>2]|0,k[c>>2]=d+-1,(d|0)==1):0)Sf[k[(k[e>>2]|0)+12>>2]&2047](e);if(!b)return;Yk(b+4|0,a,b);return}function Yk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+4|0;e=k[d>>2]|0;if((e|0)!=0?(k[e+4>>2]|0)!=0:0)return;f=k[b+4>>2]|0;b=(f|0)==0;if(b)g=e;else{e=f+4|0;k[e>>2]=(k[e>>2]|0)+1;g=k[d>>2]|0}k[a>>2]=c;if((f|0)!=(g|0)){if(b)h=g;else{g=f+8|0;k[g>>2]=(k[g>>2]|0)+1;h=k[d>>2]|0}if(((h|0)!=0?(g=h+8|0,c=k[g>>2]|0,k[g>>2]=c+-1,(c|0)==1):0)?(x=0,va(k[(k[h>>2]|0)+12>>2]|0,h|0),h=x,x=0,h&1):0){h=Hc()|0;if(b)Sc(h|0);c=f+4|0;g=k[c>>2]|0;k[c>>2]=g+-1;if((g|0)!=1)Sc(h|0);x=0;va(k[(k[f>>2]|0)+8>>2]|0,f|0);g=x;x=0;if(g&1){i=Hc(0)|0;j=M;Fg(i)}g=f+8|0;c=k[g>>2]|0;k[g>>2]=c+-1;if((c|0)!=1)Sc(h|0);x=0;va(k[(k[f>>2]|0)+12>>2]|0,f|0);c=x;x=0;if(c&1){i=Hc(0)|0;j=M;Fg(i)}else Sc(h|0)}k[d>>2]=f}if(b)return;b=f+4|0;d=k[b>>2]|0;k[b>>2]=d+-1;if((d|0)!=1)return;Sf[k[(k[f>>2]|0)+8>>2]&2047](f);d=f+8|0;b=k[d>>2]|0;k[d>>2]=b+-1;if((b|0)!=1)return;Sf[k[(k[f>>2]|0)+12>>2]&2047](f);return}function Zk(a){a=a|0;OBa(a);return}function _k(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Sf[k[(k[b>>2]|0)+4>>2]&2047](b);return}function $k(a,b){a=a|0;b=b|0;return 0}function al(a){a=a|0;return 0}function bl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=21268;b=k[a+260>>2]|0;c=a+264|0;d=k[c>>2]|0;if((d|0)!=(b|0))k[c>>2]=d+(~((d+-8-b|0)>>>3)<<3);b=k[a+272>>2]|0;d=a+276|0;c=k[d>>2]|0;if((c|0)==(b|0)){dj(a);return}else e=c;while(1){k[d>>2]=e+-8;c=k[e+-4>>2]|0;if((c|0)!=0?(f=c+4|0,g=k[f>>2]|0,k[f>>2]=g+-1,(g|0)==1):0){x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);g=x;x=0;if(g&1){h=10;break}g=c+8|0;f=k[g>>2]|0;k[g>>2]=f+-1;if((f|0)==1?(x=0,va(k[(k[c>>2]|0)+12>>2]|0,c|0),c=x,x=0,c&1):0){h=10;break}}e=k[d>>2]|0;if((e|0)==(b|0)){h=11;break}}if((h|0)==10){b=Hc()|0;vc(b|0)}else if((h|0)==11){dj(a);return}}function cl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=21268;b=k[a+260>>2]|0;c=a+264|0;d=k[c>>2]|0;if((d|0)!=(b|0))k[c>>2]=d+(~((d+-8-b|0)>>>3)<<3);b=k[a+272>>2]|0;d=a+276|0;c=k[d>>2]|0;a:do if((c|0)!=(b|0)){e=c;while(1){k[d>>2]=e+-8;f=k[e+-4>>2]|0;if((f|0)!=0?(g=f+4|0,h=k[g>>2]|0,k[g>>2]=h+-1,(h|0)==1):0){x=0;va(k[(k[f>>2]|0)+8>>2]|0,f|0);h=x;x=0;if(h&1){i=10;break}h=f+8|0;g=k[h>>2]|0;k[h>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[f>>2]|0)+12>>2]|0,f|0),f=x,x=0,f&1):0){i=10;break}}e=k[d>>2]|0;if((e|0)==(b|0))break a}if((i|0)==10){e=Hc()|0;vc(e|0)}}while(0);x=0;va(83,a|0);i=x;x=0;if(i&1){i=Hc()|0;OBa(a);Sc(i|0)}else{OBa(a);return}}function dl(a){a=a|0;return}function el(a,b,c){a=a|0;b=b|0;c=c|0;return}function fl(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+32|0;c=b;d=Lf(a|0,0)|0;if(!d){r=b;return}b=hp()|0;H0a(c,206508);k[c+8>>2]=d;k[c+12>>2]=b;b=c+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[c>>2]=21648;x=0;va(1466,c|0);x=0;d=Hc()|0;k[c>>2]=21312;x=0;va(1460,b|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(c);vc(b|0)}else{qCa(c);Sc(d|0)}}function gl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=r;r=r+64|0;c=b+28|0;d=b;e=Lf(a|0,0)|0;if(e){f=hp()|0;H0a(c,206126);k[c+8>>2]=e;k[c+12>>2]=f;f=c+16|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[c>>2]=21648;x=0;va(1466,c|0);x=0;e=Hc()|0;g=M;k[c>>2]=21312;x=0;va(1460,f|0);f=x;x=0;if(f&1){f=Hc()|0;qCa(c);vc(f|0)}qCa(c);h=e;i=g;Sc(h|0)}g=Jc(a+28|0,0)|0;if(!g){r=b;return}of(a|0)|0;a=hp()|0;H0a(d,206215);k[d+8>>2]=g;k[d+12>>2]=a;a=d+16|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[d>>2]=21648;x=0;va(1466,d|0);x=0;g=Hc()|0;b=M;k[d>>2]=21312;x=0;va(1460,a|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(d);vc(a|0)}qCa(d);h=g;i=b;Sc(h|0)}function hl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;b=r;r=r+48|0;c=b;b=Rd(52)|0;I0a(c,a);k[c>>2]=21312;d=a+8|0;e=k[d+4>>2]|0;f=c+8|0;k[f>>2]=k[d>>2];k[f+4>>2]=e;e=c+16|0;x=0;xa(604,e|0,a+16|0);a=x;x=0;if(!(a&1)){a=c+28|0;f=c+32|0;k[f>>2]=0;k[c+36>>2]=0;k[c+40>>2]=0;k[c+44>>2]=-1;k[c>>2]=21668;k[a>>2]=21688;d=b+48|0;k[d>>2]=21368;x=0;xa(619,b|0,c|0);g=x;x=0;do if(!(g&1)){k[b>>2]=21708;h=b+28|0;k[h>>2]=21736;k[d>>2]=21764;x=0;xa(608,h|0,c+28|0);i=x;x=0;if(!(i&1)){x=0;fb(149,b|0,640,125);x=0;i=Hc()|0;j=0;l=M;m=i;break}i=Hc()|0;n=M;k[h>>2]=20796;h=b+32|0;o=k[h>>2]|0;if(o){x=0;p=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;o=x;x=0;if(o&1){o=Hc()|0;vc(o|0)}if(p)k[h>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);h=x;x=0;if(h&1){h=Hc()|0;qCa(b);vc(h|0)}else{qCa(b);q=n;s=i;t=13;break}}else{i=Hc()|0;q=M;s=i;t=13}while(0);if((t|0)==13){j=1;l=q;m=s}k[a>>2]=20796;a=k[f>>2]|0;if(a){x=0;s=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(s)k[f>>2]=0}k[c>>2]=21312;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc()|0;qCa(c);vc(e|0)}qCa(c);if(j){u=l;v=m}else{w=l;y=m;Sc(y|0)}}else{m=Hc()|0;l=M;qCa(c);u=l;v=m}Fc(b|0);w=u;y=v;Sc(y|0)}function il(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;I0a(a,b);k[a>>2]=21312;c=b+8|0;d=k[c+4>>2]|0;e=a+8|0;k[e>>2]=k[c>>2];k[e+4>>2]=d;d=a+16|0;x=0;xa(604,d|0,b+16|0);e=x;x=0;if(e&1){e=Hc()|0;qCa(a);Sc(e|0)}k[a>>2]=21648;e=a+28|0;k[e>>2]=20796;c=k[b+32>>2]|0;k[a+32>>2]=c;if(!c){f=a+36|0;g=b+36|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[a>>2]=21668;k[e>>2]=21688;return}x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);c=x;x=0;if(!(c&1)){f=a+36|0;g=b+36|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[a>>2]=21668;k[e>>2]=21688;return}e=Hc()|0;k[a>>2]=21312;x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(a);vc(d|0)}else{qCa(a);Sc(e|0)}}function jl(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function kl(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function ll(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=KBa(52)|0;c=b+48|0;k[c>>2]=21368;x=0;xa(619,b|0,a|0);d=x;x=0;if(d&1){d=Hc()|0;e=M;f=d;OBa(b);Sc(f|0)}k[b>>2]=21708;d=b+28|0;k[d>>2]=21736;k[c>>2]=21764;x=0;xa(608,d|0,a+28|0);a=x;x=0;if(!(a&1))return b+(k[(k[b>>2]|0)+-12>>2]|0)|0;a=Hc()|0;c=M;k[d>>2]=20796;d=b+32|0;g=k[d>>2]|0;if(g){x=0;h=Ba(k[(k[g>>2]|0)+16>>2]|0,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;vc(g|0)}if(h)k[d>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(b);vc(d|0)}qCa(b);e=c;f=a;OBa(b);Sc(f|0);return 0}function ml(a){a=a|0;var b=0,c=0;b=Rd(52)|0;c=b+48|0;k[c>>2]=21368;x=0;xa(619,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else{k[b>>2]=21708;k[b+28>>2]=21736;k[c>>2]=21764;Gf(b|0,640,125)}}function nl(a){a=a|0;var b=0,c=0,d=0;b=a+-28|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function ol(a){a=a|0;kl(a+-28|0);return}function pl(a){a=a|0;return ll(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0}function ql(a){a=a|0;ml(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function rl(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function sl(a){a=a|0;kl(a+(k[(k[a>>2]|0)+-20>>2]|0)|0);return}function tl(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function ul(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function vl(a){a=a|0;var b=0,c=0,d=0;b=a+-28|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function wl(a){a=a|0;ul(a+-28|0);return}function xl(a){a=a|0;var b=0;k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function yl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;b=r;r=r+64|0;c=b+32|0;d=b;e=c+4|0;k[e>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=-1;k[c>>2]=21800;k[c+20>>2]=21816;x=0;xa(620,d|0,c|0);f=x;x=0;a:do if(f&1){g=Hc()|0;h=M;j=g}else{g=d+8|0;k[g>>2]=206655;k[d+12>>2]=206785;k[d+16>>2]=128;b:do if((i[728]|0)==0?(Bb(728)|0)!=0:0){x=0;l=Ba(563,28)|0;m=x;x=0;do if(m&1)n=29;else{o=l+24|0;k[o>>2]=21368;k[l>>2]=20796;p=k[d+4>>2]|0;k[l+4>>2]=p;if((p|0)!=0?(x=0,va(k[(k[p>>2]|0)+12>>2]|0,p|0),p=x,x=0,p&1):0){p=Hc()|0;q=M;OBa(l);s=q;t=p;break}p=l+8|0;k[p>>2]=k[g>>2];k[p+4>>2]=k[g+4>>2];k[p+8>>2]=k[g+8>>2];k[l>>2]=21840;k[l+20>>2]=21864;k[o>>2]=21896;x=0;p=Ba(563,16)|0;q=x;x=0;if(q&1){q=Hc(0)|0;me(q|0)|0;Sf[k[(k[l>>2]|0)+4>>2]&2047](l);x=0;hb(46);x=0;q=Hc()|0;u=M;x=0;hb(45);v=x;x=0;if(!(v&1)){w=u;y=q;n=30;break}q=Hc(0)|0;Fg(q)}q=p+4|0;k[q>>2]=1;u=p+8|0;k[u>>2]=1;k[p>>2]=21920;k[p+12>>2]=l;k[5486]=o;k[5487]=p;k[q>>2]=(k[q>>2]|0)+1;o=k[q>>2]|0;k[q>>2]=o+-1;if((o|0)==1){x=0;va(k[(k[p>>2]|0)+8>>2]|0,p|0);o=x;x=0;if(o&1){n=29;break}o=k[u>>2]|0;k[u>>2]=o+-1;if((o|0)==1?(x=0,va(k[(k[p>>2]|0)+12>>2]|0,p|0),p=x,x=0,p&1):0){n=29;break}}Kc(728);break b}while(0);if((n|0)==29){l=Hc()|0;w=M;y=l;n=30}if((n|0)==30){s=w;t=y}Cd(728);iCa(d+20|0);k[d>>2]=20796;l=d+4|0;m=k[l>>2]|0;if(!m){h=s;j=t;break a}x=0;p=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;m=x;x=0;if(m&1){m=Hc()|0;vc(m|0)}if(!p){h=s;j=t;break a}k[l>>2]=0;h=s;j=t;break a}while(0);k[a>>2]=k[5486];g=k[5487]|0;k[a+4>>2]=g;if(g){l=g+4|0;k[l>>2]=(k[l>>2]|0)+1}iCa(d+20|0);k[d>>2]=20796;l=d+4|0;g=k[l>>2]|0;if(g){x=0;p=Ba(k[(k[g>>2]|0)+16>>2]|0,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;vc(g|0)}if(p)k[l>>2]=0}iCa(c+20|0);k[c>>2]=20796;l=k[e>>2]|0;if(!l){r=b;return}x=0;p=Ba(k[(k[l>>2]|0)+16>>2]|0,l|0)|0;l=x;x=0;if(l&1){l=Hc()|0;vc(l|0)}if(!p){r=b;return}k[e>>2]=0;r=b;return}while(0);iCa(c+20|0);k[c>>2]=20796;c=k[e>>2]|0;if(!c)Sc(j|0);x=0;b=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(!b)Sc(j|0);k[e>>2]=0;Sc(j|0)}function zl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=a+24|0;k[c>>2]=21368;k[a>>2]=20796;d=k[b+4>>2]|0;k[a+4>>2]=d;if((d|0)!=0?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){d=Hc()|0;e=M;f=d;Sc(f|0)}d=a+8|0;g=b+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];k[a>>2]=21840;k[a+20>>2]=21864;k[c>>2]=21896;x=0;xa(608,a|0,b|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;c=M;iCa(a+20|0);k[a>>2]=20796;g=a+4|0;a=k[g>>2]|0;if(!a){e=c;f=b;Sc(f|0)}x=0;d=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(!d){e=c;f=b;Sc(f|0)}k[g>>2]=0;e=c;f=b;Sc(f|0)}function Al(a){a=a|0;OBa(a);return}function Bl(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Sf[k[(k[b>>2]|0)+4>>2]&2047](b);return}function Cl(a,b){a=a|0;b=b|0;return 0}function Dl(a){a=a|0;return 0}function El(a){a=a|0;var b=0,c=0;iCa(a+20|0);k[a>>2]=20796;b=a+4|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(!c)return;k[b>>2]=0;return}function Fl(a){a=a|0;var b=0;iCa(a+20|0);k[a>>2]=20796;b=k[a+4>>2]|0;if(!b){OBa(a);return}x=0;Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}else{OBa(a);return}}function Gl(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(28)|0;x=0;i[c>>0]=i[b>>0]|0;fb(157,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-12>>2]|0)|0}return 0}function Hl(a){a=a|0;var b=0,c=0,d=0,e=0;b=Rd(28)|0;c=b+24|0;k[c>>2]=21368;k[b>>2]=20796;d=k[a+4>>2]|0;k[b+4>>2]=d;if((d|0)!=0?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){d=Hc()|0;Fc(b|0);Sc(d|0)}d=b+8|0;e=a+8|0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];k[d+8>>2]=k[e+8>>2];k[b>>2]=21840;k[b+20>>2]=21864;k[c>>2]=21896;Gf(b|0,752,137)}function Il(a){a=a|0;var b=0,c=0;b=a+-20|0;iCa(b+20|0);k[b>>2]=20796;a=b+4|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}if(!c)return;k[a>>2]=0;return}function Jl(a){a=a|0;var b=0;b=a+-20|0;iCa(b+20|0);k[b>>2]=20796;a=k[b+4>>2]|0;if(!a){OBa(b);return}x=0;Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}else{OBa(b);return}}function Kl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(28)|0;c=a+24|0;k[c>>2]=21368;k[a>>2]=20796;d=a+4|0;e=k[b+4>>2]|0;k[d>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;OBa(a);Sc(g|0)}e=a+8|0;h=b+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+20|0;k[a>>2]=21840;k[h>>2]=21864;k[c>>2]=21896;x=0;xa(608,a|0,b|0);b=x;x=0;if(!(b&1))return a+(k[(k[a>>2]|0)+-12>>2]|0)|0;b=Hc()|0;c=M;iCa(h);k[a>>2]=20796;h=k[d>>2]|0;if(!h){f=c;g=b;OBa(a);Sc(g|0)}x=0;Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc()|0;vc(h|0)}else{f=c;g=b;OBa(a);Sc(g|0)}return 0}function Ll(a){a=a|0;Hl(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Ml(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;iCa(b+20|0);k[b>>2]=20796;a=b+4|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}if(!c)return;k[a>>2]=0;return}function Nl(a){a=a|0;var b=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;iCa(b+20|0);k[b>>2]=20796;a=k[b+4>>2]|0;if(!a){OBa(b);return}x=0;Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}else{OBa(b);return}}function Ol(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;c=a+24|0;k[c>>2]=21368;k[a>>2]=20796;d=k[b+4>>2]|0;k[a+4>>2]=d;if((d|0)!=0?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){d=Hc()|0;e=M;f=d;Sc(f|0)}d=a+8|0;g=b+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];k[a>>2]=21840;k[a+20>>2]=21864;k[c>>2]=21896;x=0;xa(608,a|0,b|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;c=M;iCa(a+20|0);k[a>>2]=20796;g=a+4|0;a=k[g>>2]|0;if(!a){e=c;f=b;Sc(f|0)}x=0;d=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(!d){e=c;f=b;Sc(f|0)}k[g>>2]=0;e=c;f=b;Sc(f|0)}function Pl(a){a=a|0;var b=0,c=0;iCa(a+20|0);k[a>>2]=20796;b=a+4|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(!c)return;k[b>>2]=0;return}function Ql(a){a=a|0;var b=0;iCa(a+20|0);k[a>>2]=20796;b=k[a+4>>2]|0;if(!b){OBa(a);return}x=0;Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}else{OBa(a);return}}function Rl(a){a=a|0;var b=0,c=0;b=a+-20|0;iCa(b+20|0);k[b>>2]=20796;a=b+4|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}if(!c)return;k[a>>2]=0;return}function Sl(a){a=a|0;var b=0;b=a+-20|0;iCa(b+20|0);k[b>>2]=20796;a=k[b+4>>2]|0;if(!a){OBa(b);return}x=0;Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}else{OBa(b);return}}function Tl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+64|0;c=b+32|0;d=b;k[c>>2]=20796;e=c+4|0;k[e>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=-1;f=c+20|0;SBa(f);k[c>>2]=21960;k[c+20>>2]=21976;x=0;xa(621,d|0,c|0);g=x;x=0;a:do if(g&1){h=Hc()|0;j=M;l=h}else{h=d+8|0;k[h>>2]=207027;k[d+12>>2]=206785;k[d+16>>2]=128;b:do if((i[824]|0)==0?(Bb(824)|0)!=0:0){x=0;m=Ba(563,28)|0;n=x;x=0;do if(n&1)o=29;else{p=m+24|0;k[p>>2]=21368;k[m>>2]=20796;q=k[d+4>>2]|0;k[m+4>>2]=q;if((q|0)!=0?(x=0,va(k[(k[q>>2]|0)+12>>2]|0,q|0),q=x,x=0,q&1):0){q=Hc()|0;s=M;OBa(m);t=s;u=q;break}q=m+8|0;k[q>>2]=k[h>>2];k[q+4>>2]=k[h+4>>2];k[q+8>>2]=k[h+8>>2];k[m>>2]=22e3;k[m+20>>2]=22024;k[p>>2]=22056;x=0;q=Ba(563,16)|0;s=x;x=0;if(s&1){s=Hc(0)|0;me(s|0)|0;Sf[k[(k[m>>2]|0)+4>>2]&2047](m);x=0;hb(46);x=0;s=Hc()|0;v=M;x=0;hb(45);w=x;x=0;if(!(w&1)){y=v;z=s;o=30;break}s=Hc(0)|0;Fg(s)}s=q+4|0;k[s>>2]=1;v=q+8|0;k[v>>2]=1;k[q>>2]=22080;k[q+12>>2]=m;k[5526]=p;k[5527]=q;k[s>>2]=(k[s>>2]|0)+1;p=k[s>>2]|0;k[s>>2]=p+-1;if((p|0)==1){x=0;va(k[(k[q>>2]|0)+8>>2]|0,q|0);p=x;x=0;if(p&1){o=29;break}p=k[v>>2]|0;k[v>>2]=p+-1;if((p|0)==1?(x=0,va(k[(k[q>>2]|0)+12>>2]|0,q|0),q=x,x=0,q&1):0){o=29;break}}Kc(824);break b}while(0);if((o|0)==29){m=Hc()|0;y=M;z=m;o=30}if((o|0)==30){t=y;u=z}Cd(824);TBa(d+20|0);k[d>>2]=20796;m=d+4|0;n=k[m>>2]|0;if(!n){j=t;l=u;break a}x=0;q=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc()|0;vc(n|0)}if(!q){j=t;l=u;break a}k[m>>2]=0;j=t;l=u;break a}while(0);k[a>>2]=k[5526];h=k[5527]|0;k[a+4>>2]=h;if(h){m=h+4|0;k[m>>2]=(k[m>>2]|0)+1}TBa(d+20|0);k[d>>2]=20796;m=d+4|0;h=k[m>>2]|0;if(h){x=0;q=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc()|0;vc(h|0)}if(q)k[m>>2]=0}TBa(f);k[c>>2]=20796;m=k[e>>2]|0;if(!m){r=b;return}x=0;q=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;m=x;x=0;if(m&1){m=Hc()|0;vc(m|0)}if(!q){r=b;return}k[e>>2]=0;r=b;return}while(0);TBa(f);k[c>>2]=20796;c=k[e>>2]|0;if(!c)Sc(l|0);x=0;f=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(!f)Sc(l|0);k[e>>2]=0;Sc(l|0)}function Ul(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=a+24|0;k[c>>2]=21368;k[a>>2]=20796;d=k[b+4>>2]|0;k[a+4>>2]=d;if((d|0)!=0?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){d=Hc()|0;e=M;f=d;Sc(f|0)}d=a+8|0;g=b+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];k[a>>2]=22e3;k[a+20>>2]=22024;k[c>>2]=22056;x=0;xa(608,a|0,b|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;c=M;TBa(a+20|0);k[a>>2]=20796;g=a+4|0;a=k[g>>2]|0;if(!a){e=c;f=b;Sc(f|0)}x=0;d=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(!d){e=c;f=b;Sc(f|0)}k[g>>2]=0;e=c;f=b;Sc(f|0)}function Vl(a){a=a|0;OBa(a);return}function Wl(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Sf[k[(k[b>>2]|0)+4>>2]&2047](b);return}function Xl(a,b){a=a|0;b=b|0;return 0}function Yl(a){a=a|0;return 0}function Zl(a){a=a|0;var b=0,c=0;TBa(a+20|0);k[a>>2]=20796;b=a+4|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(!c)return;k[b>>2]=0;return}function _l(a){a=a|0;var b=0;TBa(a+20|0);k[a>>2]=20796;b=k[a+4>>2]|0;if(!b){OBa(a);return}x=0;Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}else{OBa(a);return}}function $l(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(28)|0;x=0;i[c>>0]=i[b>>0]|0;fb(158,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-12>>2]|0)|0}return 0}function am(a){a=a|0;var b=0,c=0,d=0,e=0;b=Rd(28)|0;c=b+24|0;k[c>>2]=21368;k[b>>2]=20796;d=k[a+4>>2]|0;k[b+4>>2]=d;if((d|0)!=0?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){d=Hc()|0;Fc(b|0);Sc(d|0)}d=b+8|0;e=a+8|0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];k[d+8>>2]=k[e+8>>2];k[b>>2]=22e3;k[b+20>>2]=22024;k[c>>2]=22056;Gf(b|0,848,151)}function bm(a){a=a|0;var b=0,c=0;b=a+-20|0;TBa(b+20|0);k[b>>2]=20796;a=b+4|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}if(!c)return;k[a>>2]=0;return}function cm(a){a=a|0;var b=0;b=a+-20|0;TBa(b+20|0);k[b>>2]=20796;a=k[b+4>>2]|0;if(!a){OBa(b);return}x=0;Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}else{OBa(b);return}}function dm(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(28)|0;c=a+24|0;k[c>>2]=21368;k[a>>2]=20796;d=a+4|0;e=k[b+4>>2]|0;k[d>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;OBa(a);Sc(g|0)}e=a+8|0;h=b+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+20|0;k[a>>2]=22e3;k[h>>2]=22024;k[c>>2]=22056;x=0;xa(608,a|0,b|0);b=x;x=0;if(!(b&1))return a+(k[(k[a>>2]|0)+-12>>2]|0)|0;b=Hc()|0;c=M;TBa(h);k[a>>2]=20796;h=k[d>>2]|0;if(!h){f=c;g=b;OBa(a);Sc(g|0)}x=0;Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc()|0;vc(h|0)}else{f=c;g=b;OBa(a);Sc(g|0)}return 0}function em(a){a=a|0;am(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function fm(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;TBa(b+20|0);k[b>>2]=20796;a=b+4|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}if(!c)return;k[a>>2]=0;return}function gm(a){a=a|0;var b=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;TBa(b+20|0);k[b>>2]=20796;a=k[b+4>>2]|0;if(!a){OBa(b);return}x=0;Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}else{OBa(b);return}}function hm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;c=a+24|0;k[c>>2]=21368;k[a>>2]=20796;d=k[b+4>>2]|0;k[a+4>>2]=d;if((d|0)!=0?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){d=Hc()|0;e=M;f=d;Sc(f|0)}d=a+8|0;g=b+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];k[a>>2]=22e3;k[a+20>>2]=22024;k[c>>2]=22056;x=0;xa(608,a|0,b|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;c=M;TBa(a+20|0);k[a>>2]=20796;g=a+4|0;a=k[g>>2]|0;if(!a){e=c;f=b;Sc(f|0)}x=0;d=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(!d){e=c;f=b;Sc(f|0)}k[g>>2]=0;e=c;f=b;Sc(f|0)}function im(a){a=a|0;var b=0,c=0;TBa(a+20|0);k[a>>2]=20796;b=a+4|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(!c)return;k[b>>2]=0;return}function jm(a){a=a|0;var b=0;TBa(a+20|0);k[a>>2]=20796;b=k[a+4>>2]|0;if(!b){OBa(a);return}x=0;Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}else{OBa(a);return}}function km(a){a=a|0;var b=0,c=0;b=a+-20|0;TBa(b+20|0);k[b>>2]=20796;a=b+4|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;vc(b|0)}if(!c)return;k[a>>2]=0;return}function lm(a){a=a|0;var b=0;b=a+-20|0;TBa(b+20|0);k[b>>2]=20796;a=k[b+4>>2]|0;if(!a){OBa(b);return}x=0;Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}else{OBa(b);return}}function mm(a){a=a|0;var b=0,c=0,d=0,e=0;if((k[a>>2]|0)==2){b=0;return b|0}td(22112)|0;if((k[a>>2]|0)==2){rf(22112)|0;b=0;return b|0}do{c=k[a>>2]|0;if(!c)k[a>>2]=1;if(!c){d=1;e=8;break}if((c|0)==2){d=0;e=8;break}x=0;Ta(500,22140,22112)|0;c=x;x=0}while(!(c&1));if((e|0)==8){rf(22112)|0;b=d;return b|0}b=Hc()|0;x=0;Ba(567,22112)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(b|0);return 0}function nm(a){a=a|0;td(22112)|0;k[a>>2]=2;rf(22112)|0;ze(22140)|0;return}function om(a){a=a|0;td(22112)|0;k[a>>2]=0;rf(22112)|0;ze(22140)|0;return}function pm(a){a=a|0;return 324664}function qm(a,b,c){a=a|0;b=b|0;c=c|0;switch(c|0){case 1:{q2a(a,324671,88);return}case 2:{q2a(a,324760,72);return}case 3:{q2a(a,324833,46);return}case 4:{q2a(a,324880,65);return}default:{q2a(a,324946,30);return}}}function rm(){return 22188}function sm(){var a=0;a=gp()|0;k[5557]=a;a=gp()|0;k[5558]=a;a=hp()|0;k[5559]=a;k[5547]=22200;return}function tm(a){a=a|0;return}function um(a){a=a|0;OBa(a);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=c;k[a+4>>2]=b;return}function wm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;jg[k[(k[a>>2]|0)+16>>2]&511](e,a,b);if((k[e+4>>2]|0)!=(k[c+4>>2]|0)){f=0;r=d;return f|0}f=(k[e>>2]|0)==(k[c>>2]|0);r=d;return f|0}function xm(a,b,c){a=a|0;b=b|0;c=c|0;return ((k[b>>2]|0)==(c|0)?(k[b+4>>2]|0)==(a|0):0)|0}function ym(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b;d=b+4|0;x=0;e=Ba(563,16)|0;f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f;Sc(h|0)}x=0;fb(140,d|0,209075,12);f=x;x=0;if(!(f&1)){x=0;xa(604,e|0,d|0);f=x;x=0;if(!(f&1)){x=0;f=Fa(95,((i[d>>0]&1)==0?d+1|0:k[d+8>>2]|0)|0,0,c|0)|0;c=x;x=0;do if(!(c&1)){k[e+12>>2]=f;if((f|0)<0?(x=0,xa(622,e|0,207420),j=x,x=0,j&1):0)break;x=0;va(1460,d|0);j=x;x=0;if(!(j&1)){k[a>>2]=e;r=b;return}j=Hc()|0;g=M;h=j;Sc(h|0)}while(0);b=Hc()|0;a=M;x=0;va(1460,e|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else{l=a;m=b}}else{b=Hc()|0;l=M;m=b}x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else{n=l;o=m}}else{m=Hc()|0;n=M;o=m}OBa(e);g=n;h=o;Sc(h|0)}function zm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+16|0;x=0;d=Ba(563,16)|0;e=x;x=0;if(e&1){e=Hc()|0;f=M;g=e;Sc(g|0)}x=0;xa(604,d|0,b|0);e=x;x=0;if(!(e&1)){x=0;e=Fa(95,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,0,c|0)|0;b=x;x=0;if(!(b&1)){k[d+12>>2]=e;if((e|0)>=0){k[a>>2]=d;r=c;return}x=0;xa(622,d|0,207420);e=x;x=0;if(!(e&1)){k[a>>2]=d;r=c;return}}c=Hc()|0;a=M;x=0;va(1460,d|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else{h=a;j=c}}else{c=Hc()|0;h=M;j=c}OBa(d);f=h;g=j;Sc(g|0)}function Am(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=k[a>>2]|0;if(!b)return;x=0;a=Ba(572,k[b+12>>2]|0)|0;c=x;x=0;do if(!(c&1)){if((a|0)<0?(x=0,xa(622,b|0,207432),d=x,x=0,d&1):0)break;x=0;va(1460,b|0);d=x;x=0;if(d&1){d=Hc()|0;e=M;f=d;OBa(b);Sc(f|0)}else{OBa(b);return}}while(0);a=Hc()|0;c=M;x=0;va(1460,b|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else{e=c;f=a;OBa(b);Sc(f|0)}}function Bm(a){a=a|0;return 10.0}function Cm(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;d=k[a>>2]|0;switch(IUa(k[d+12>>2]|0,c,4)|0){case -1:{Em(d,207448);break}case 4:{r=b;return k[c>>2]|0}default:{c=HSa()|0;k[c>>2]=0;Em(d,207468)}}return 0}function Dm(){var a=0;a=gp()|0;k[5590]=a;a=gp()|0;k[5591]=a;a=hp()|0;k[5592]=a;return}function Em(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+80|0;d=c+48|0;e=c+36|0;f=c+24|0;g=c+12|0;h=c;c=HSa()|0;j=k[c>>2]|0;c=hp()|0;q2a(h,207486,22);k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;l=i[h>>0]|0;m=(l&1)==0;n=m?(l&255)>>>1:k[h+4>>2]|0;l=RLa(b)|0;x=0;nb(83,g|0,(m?h+1|0:k[h+8>>2]|0)|0,n|0,n+l|0);n=x;x=0;if(!(n&1)?(x=0,Fa(88,g|0,b|0,l|0)|0,l=x,x=0,!(l&1)):0){k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;l=i[g>>0]|0;b=(l&1)==0;n=b?(l&255)>>>1:k[g+4>>2]|0;x=0;nb(83,f|0,(b?g+1|0:k[g+8>>2]|0)|0,n|0,n+29|0);n=x;x=0;if(!(n&1)?(x=0,Fa(88,f|0,207509,29)|0,n=x,x=0,!(n&1)):0){x=0;fb(159,e|0,f|0,a|0);a=x;x=0;if(!(a&1)){x=0;xa(623,d|0,e|0);a=x;x=0;do if(!(a&1)){k[d>>2]=21312;k[d+8>>2]=j;k[d+12>>2]=c;n=d+16|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;va(1467,d|0);x=0;b=Hc()|0;l=M;k[d>>2]=21312;x=0;va(1460,n|0);n=x;x=0;if(n&1){n=Hc()|0;qCa(d);vc(n|0)}else{qCa(d);o=l;p=b;break}}else{b=Hc()|0;o=M;p=b}while(0);x=0;va(1460,e|0);e=x;x=0;if(e&1){q=Hc(0)|0;s=M;Fg(q)}else{t=o;u=p}}else{p=Hc()|0;t=M;u=p}x=0;va(1460,f|0);p=x;x=0;if(p&1){q=Hc(0)|0;s=M;Fg(q)}else{v=t;w=u}}else y=7;do if((y|0)==7){u=Hc()|0;t=M;x=0;va(1460,f|0);p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)}else{v=t;w=u;break}}while(0);x=0;va(1460,g|0);f=x;x=0;if(f&1){q=Hc(0)|0;s=M;Fg(q)}else{z=v;A=w}}else y=3;do if((y|0)==3){w=Hc()|0;v=M;x=0;va(1460,g|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else{z=v;A=w;break}}while(0);x=0;va(1460,h|0);h=x;x=0;if(h&1){q=Hc(0)|0;s=M;Fg(q)}else Sc(A|0)}function Fm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=i[c>>0]|0;g=(d&1)==0?(d&255)>>>1:k[c+4>>2]|0;x=0;nb(83,a|0,(e?b+1|0:k[b+8>>2]|0)|0,f|0,g+f|0);f=x;x=0;if(!(f&1)?(x=0,Fa(88,a|0,((i[c>>0]&1)==0?c+1|0:k[c+8>>2]|0)|0,g|0)|0,g=x,x=0,!(g&1)):0)return;g=Hc()|0;x=0;va(1460,a|0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else Sc(g|0)}function Gm(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;b=r;r=r+48|0;c=b;b=Rd(52)|0;I0a(c,a);k[c>>2]=21312;d=a+8|0;e=k[d+4>>2]|0;f=c+8|0;k[f>>2]=k[d>>2];k[f+4>>2]=e;e=c+16|0;x=0;xa(604,e|0,a+16|0);a=x;x=0;if(!(a&1)){a=c+28|0;f=c+32|0;k[f>>2]=0;k[c+36>>2]=0;k[c+40>>2]=0;k[c+44>>2]=-1;k[c>>2]=22248;k[a>>2]=22268;d=b+48|0;k[d>>2]=21368;x=0;xa(624,b|0,c|0);g=x;x=0;do if(!(g&1)){k[b>>2]=22288;h=b+28|0;k[h>>2]=22316;k[d>>2]=22344;x=0;xa(608,h|0,c+28|0);i=x;x=0;if(!(i&1)){x=0;fb(149,b|0,944,167);x=0;i=Hc()|0;j=0;l=M;m=i;break}i=Hc()|0;n=M;k[h>>2]=20796;h=b+32|0;o=k[h>>2]|0;if(o){x=0;p=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;o=x;x=0;if(o&1){o=Hc()|0;vc(o|0)}if(p)k[h>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);h=x;x=0;if(h&1){h=Hc()|0;qCa(b);vc(h|0)}else{qCa(b);q=n;s=i;t=13;break}}else{i=Hc()|0;q=M;s=i;t=13}while(0);if((t|0)==13){j=1;l=q;m=s}k[a>>2]=20796;a=k[f>>2]|0;if(a){x=0;s=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc()|0;vc(a|0)}if(s)k[f>>2]=0}k[c>>2]=21312;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc()|0;qCa(c);vc(e|0)}qCa(c);if(j){u=l;v=m}else{w=l;y=m;Sc(y|0)}}else{m=Hc()|0;l=M;qCa(c);u=l;v=m}Fc(b|0);w=u;y=v;Sc(y|0)}function Hm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;I0a(a,b);k[a>>2]=21312;c=b+8|0;d=k[c+4>>2]|0;e=a+8|0;k[e>>2]=k[c>>2];k[e+4>>2]=d;d=a+16|0;x=0;xa(604,d|0,b+16|0);e=x;x=0;if(e&1){e=Hc()|0;qCa(a);Sc(e|0)}e=a+28|0;k[e>>2]=20796;c=k[b+32>>2]|0;k[a+32>>2]=c;if(!c){f=a+36|0;g=b+36|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[a>>2]=22248;k[e>>2]=22268;return}x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);c=x;x=0;if(!(c&1)){f=a+36|0;g=b+36|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[a>>2]=22248;k[e>>2]=22268;return}e=Hc()|0;k[a>>2]=21312;x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(a);vc(d|0)}else{qCa(a);Sc(e|0)}}function Im(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function Jm(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function Km(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=KBa(52)|0;c=b+48|0;k[c>>2]=21368;x=0;xa(624,b|0,a|0);d=x;x=0;if(d&1){d=Hc()|0;e=M;f=d;OBa(b);Sc(f|0)}k[b>>2]=22288;d=b+28|0;k[d>>2]=22316;k[c>>2]=22344;x=0;xa(608,d|0,a+28|0);a=x;x=0;if(!(a&1))return b+(k[(k[b>>2]|0)+-12>>2]|0)|0;a=Hc()|0;c=M;k[d>>2]=20796;d=b+32|0;g=k[d>>2]|0;if(g){x=0;h=Ba(k[(k[g>>2]|0)+16>>2]|0,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;vc(g|0)}if(h)k[d>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(b);vc(d|0)}qCa(b);e=c;f=a;OBa(b);Sc(f|0);return 0}function Lm(a){a=a|0;var b=0,c=0;b=Rd(52)|0;c=b+48|0;k[c>>2]=21368;x=0;xa(624,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else{k[b>>2]=22288;k[b+28>>2]=22316;k[c>>2]=22344;Gf(b|0,944,167)}}function Mm(a){a=a|0;var b=0,c=0,d=0;b=a+-28|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function Nm(a){a=a|0;Jm(a+-28|0);return}function Om(a){a=a|0;return Km(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0}function Pm(a){a=a|0;Lm(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Qm(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function Rm(a){a=a|0;Jm(a+(k[(k[a>>2]|0)+-20>>2]|0)|0);return}function Sm(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function Tm(a){a=a|0;var b=0,c=0,d=0;k[a+28>>2]=20796;b=a+32|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[b>>2]=0}k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);OBa(a);return}}function Um(a){a=a|0;var b=0,c=0,d=0;b=a+-28|0;k[b+28>>2]=20796;a=b+32|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;vc(c|0)}if(d)k[a>>2]=0}k[b>>2]=21312;x=0;va(1460,b+16|0);a=x;x=0;if(a&1){a=Hc()|0;qCa(b);vc(a|0)}else{qCa(b);return}}function Vm(a){a=a|0;Tm(a+-28|0);return}function Wm(){if((i[1008]|0)==0?(Bb(1008)|0)!=0:0){k[5602]=22380;Kc(1008)}return 22408}function Xm(a){a=a|0;OBa(a);return}function Ym(a){a=a|0;return 207746}function Zm(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;switch(c|0){case 0:{x=0;Ta(496,a|0,207708)|0;c=x;x=0;if(!(c&1))return;break}case 1:{x=0;Ta(496,a|0,207711)|0;c=x;x=0;if(!(c&1))return;break}case 2:{x=0;Ta(496,a|0,207719)|0;c=x;x=0;if(!(c&1))return;break}case 3:{x=0;Ta(496,a|0,207725)|0;c=x;x=0;if(!(c&1))return;break}default:{x=0;Ta(496,a|0,207732)|0;c=x;x=0;if(!(c&1))return}}c=Hc()|0;x=0;va(1460,a|0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else Sc(c|0)}function _m(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;d=r;r=r+192|0;e=d+168|0;f=d+156|0;g=d+144|0;h=d+132|0;j=d+120|0;l=d+96|0;m=d+108|0;n=d+84|0;o=d+72|0;p=d+60|0;q=d+48|0;s=d+36|0;t=d+24|0;u=d+12|0;v=d;xo(e,c);w=i[e>>0]|0;y=(((w&1)==0?(w&255)>>>1:k[e+4>>2]|0)|0)==0;K2a(e);do if(y){nn(m,0);x=0;fb(160,l|0,c|0,m|0);w=x;x=0;if(!(w&1)){K2a(m);break}w=Hc()|0;z=M;x=0;va(1460,m|0);A=x;x=0;if(A&1){B=Hc(0)|0;C=M;Fg(B)}else{D=z;E=w;Sc(E|0)}}else n2a(l,c);while(0);x=0;xa(625,n|0,b|0);c=x;x=0;a:do if(!(c&1)){x=0;xa(625,o|0,l|0);m=x;x=0;b:do if(!(m&1)){x=0;xa(626,p|0,b|0);y=x;x=0;do if(!(y&1)){w=i[b>>0]|0;c:do if(!(((w&1)==0?(w&255)>>>1:k[b+4>>2]|0)|0)){x=0;xa(604,a|0,l|0);z=x;x=0;if(z&1)F=14;else F=74}else{z=i[n>>0]|0;A=i[p>>0]|0;G=(((A&1)==0?(A&255)>>>1:k[p+4>>2]|0)|0)==0;if(!(((z&1)==0?(z&255)>>>1:k[n+4>>2]|0)|0)){if(G){x=0;xa(604,e|0,l|0);z=x;x=0;if(z&1){F=14;break}x=0;z=Ta(501,e|0,b|0)|0;A=x;x=0;if(!(A&1)?(x=0,xa(604,a|0,z|0),z=x,x=0,!(z&1)):0){x=0;va(1460,e|0);z=x;x=0;if(z&1){F=14;break}F=74;break}z=Hc()|0;A=M;x=0;va(1460,e|0);H=x;x=0;if(!(H&1)){I=A;J=z;F=15;break}z=Hc(0)|0;Fg(z)}z=i[o>>0]|0;if(!(((z&1)==0?(z&255)>>>1:k[o+4>>2]|0)|0)){x=0;xa(604,a|0,b|0);z=x;x=0;if(z&1){F=14;break}else{F=74;break}}x=0;xa(604,f|0,o|0);z=x;x=0;if(z&1){F=14;break}x=0;z=Ta(501,f|0,b|0)|0;A=x;x=0;if(!(A&1)?(x=0,xa(604,a|0,z|0),z=x,x=0,!(z&1)):0){x=0;va(1460,f|0);z=x;x=0;if(z&1){F=14;break}F=74;break}z=Hc()|0;A=M;x=0;va(1460,f|0);H=x;x=0;if(!(H&1)){I=A;J=z;F=15;break}z=Hc(0)|0;Fg(z)}if(!G){x=0;xa(604,a|0,b|0);G=x;x=0;if(G&1){F=14;break}else{F=74;break}}x=0;xa(626,t|0,l|0);G=x;x=0;if(!(G&1)){x=0;xa(604,j|0,n|0);G=x;x=0;d:do if(!(G&1)){x=0;z=Ta(501,j|0,t|0)|0;A=x;x=0;if(!(A&1)?(x=0,xa(604,s|0,z|0),z=x,x=0,!(z&1)):0){x=0;va(1460,j|0);z=x;x=0;if(z&1){F=44;break}x=0;xa(627,u|0,l|0);z=x;x=0;e:do if(z&1)F=46;else{x=0;xa(604,h|0,s|0);A=x;x=0;f:do if(A&1)F=47;else{x=0;H=Ta(501,h|0,u|0)|0;K=x;x=0;do if(!(K&1)){x=0;xa(604,q|0,H|0);L=x;x=0;if(L&1)break;x=0;va(1460,h|0);L=x;x=0;if(L&1){F=47;break f}x=0;xa(627,v|0,b|0);L=x;x=0;g:do if(L&1)F=49;else{x=0;xa(604,g|0,q|0);N=x;x=0;h:do if(N&1)F=50;else{x=0;O=Ta(501,g|0,v|0)|0;P=x;x=0;do if(!(P&1)){x=0;xa(604,a|0,O|0);Q=x;x=0;if(Q&1)break;x=0;va(1460,g|0);Q=x;x=0;if(Q&1){F=50;break h}x=0;va(1460,v|0);Q=x;x=0;if(Q&1){F=49;break g}x=0;va(1460,q|0);Q=x;x=0;if(Q&1){F=47;break f}x=0;va(1460,u|0);Q=x;x=0;if(Q&1){F=46;break e}x=0;va(1460,s|0);Q=x;x=0;if(Q&1){F=44;break d}x=0;va(1460,t|0);Q=x;x=0;if(Q&1){F=14;break c}else{F=74;break c}}while(0);O=Hc()|0;P=M;x=0;va(1460,g|0);Q=x;x=0;if(!(Q&1)){R=P;S=O;break}O=Hc(0)|0;Fg(O)}while(0);if((F|0)==50){N=Hc()|0;R=M;S=N}x=0;va(1460,v|0);N=x;x=0;if(!(N&1)){T=R;U=S;break}B=Hc(0)|0;C=M;Fg(B)}while(0);if((F|0)==49){L=Hc()|0;T=M;U=L}x=0;va(1460,q|0);L=x;x=0;if(!(L&1)){V=T;W=U;break f}B=Hc(0)|0;C=M;Fg(B)}while(0);H=Hc()|0;K=M;x=0;va(1460,h|0);L=x;x=0;if(!(L&1)){X=K;Y=H;F=48;break}H=Hc(0)|0;Fg(H)}while(0);if((F|0)==47){A=Hc()|0;X=M;Y=A;F=48}if((F|0)==48){V=X;W=Y}x=0;va(1460,u|0);A=x;x=0;if(!(A&1)){Z=V;_=W;break}B=Hc(0)|0;C=M;Fg(B)}while(0);if((F|0)==46){z=Hc()|0;Z=M;_=z}x=0;va(1460,s|0);z=x;x=0;if(!(z&1)){$=Z;aa=_;break}B=Hc(0)|0;C=M;Fg(B)}z=Hc()|0;A=M;x=0;va(1460,j|0);H=x;x=0;if(H&1){H=Hc(0)|0;Fg(H)}else{ba=A;ca=z;F=45}}else F=44;while(0);if((F|0)==44){G=Hc()|0;ba=M;ca=G;F=45}if((F|0)==45){$=ba;aa=ca}x=0;va(1460,t|0);G=x;x=0;if(G&1){B=Hc(0)|0;C=M;Fg(B)}else{da=$;ea=aa}}else F=14}while(0);if((F|0)==14){w=Hc()|0;I=M;J=w;F=15}else if((F|0)==74){x=0;va(1460,p|0);w=x;x=0;if(w&1){F=13;break}x=0;va(1460,o|0);w=x;x=0;if(w&1){F=12;break b}x=0;va(1460,n|0);w=x;x=0;if(w&1){F=11;break a}K2a(l);r=d;return}if((F|0)==15){da=I;ea=J}x=0;va(1460,p|0);w=x;x=0;if(w&1){B=Hc(0)|0;C=M;Fg(B)}else{fa=da;ga=ea}}else F=13;while(0);if((F|0)==13){y=Hc()|0;fa=M;ga=y}x=0;va(1460,o|0);y=x;x=0;if(y&1){B=Hc(0)|0;C=M;Fg(B)}else{ha=fa;ia=ga}}else F=12;while(0);if((F|0)==12){m=Hc()|0;ha=M;ia=m}x=0;va(1460,n|0);m=x;x=0;if(m&1){B=Hc(0)|0;C=M;Fg(B)}else{ja=ha;ka=ia}}else F=11;while(0);if((F|0)==11){F=Hc()|0;ja=M;ka=F}x=0;va(1460,l|0);l=x;x=0;if(l&1){B=Hc(0)|0;C=M;Fg(B)}else{D=ja;E=ka;Sc(E|0)}}function $m(){return 0}function an(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0;e=r;r=r+288|0;f=e+268|0;g=e+192|0;h=e+168|0;j=e+144|0;l=e+120|0;m=e+180|0;n=e+160|0;o=e+132|0;p=e;q=e+100|0;s=e+56|0;t=e+48|0;u=e+88|0;v=e+28|0;w=e+76|0;y=e+8|0;xo(f,b);z=i[f>>0]|0;A=(((z&1)==0?(z&255)>>>1:k[f+4>>2]|0)|0)==0;K2a(f);if(A)_m(h,b,c);else n2a(h,b);x=0;xa(628,j|0,h|0);b=x;x=0;a:do if(!(b&1)){k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;$a(42)|0;c=x;x=0;b:do if(c&1)B=20;else{c:do if(!(vTa((i[h>>0]&1)==0?h+1|0:k[h+8>>2]|0,g)|0)){x=0;$a(42)|0;A=x;x=0;if(A&1){B=20;break b}B=11}else{A=HSa()|0;z=k[A>>2]|0;x=0;C=$a(42)|0;D=x;x=0;if(D&1){B=20;break b}D=C;switch(k[A>>2]|0){case 2:case 20:break;default:{if(!z){B=11;break c}if(d){k[d>>2]=z;k[d+4>>2]=D;x=0;xa(604,a|0,l|0);A=x;x=0;if(A&1){B=20;break b}else{E=l;break c}}A=Rd(36)|0;x=0;fb(140,o|0,207790,28);C=x;x=0;do if(!(C&1)){k[p>>2]=z;k[p+4>>2]=D;x=0;k[f>>2]=k[p>>2];k[f+4>>2]=k[p+4>>2];nb(88,A|0,o|0,h|0,f|0);F=x;x=0;if(F&1)G=1;else{x=0;fb(149,A|0,1032,178);x=0;G=0}F=Hc()|0;H=M;x=0;va(1460,o|0);I=x;x=0;if(!(I&1))if(G){J=H;K=F;break}else{L=F;N=H;B=134;break b}else{O=Hc(0)|0;P=M;Fg(O)}}else{H=Hc()|0;J=M;K=H}while(0);Fc(A|0);L=K;N=J;B=134;break b}}if(d){x=0;D=$a(43)|0;z=x;x=0;if(z&1){B=20;break b}k[d>>2]=2;k[d+4>>2]=D;x=0;xa(604,a|0,l|0);D=x;x=0;if(D&1){B=20;break b}else{E=l;break}}D=Rd(36)|0;x=0;fb(140,m|0,207790,28);z=x;x=0;do if(!(z&1)){x=0;C=$a(43)|0;H=x;x=0;if(!(H&1)?(k[n>>2]=2,k[n+4>>2]=C,x=0,k[f>>2]=k[n>>2],k[f+4>>2]=k[n+4>>2],nb(88,D|0,m|0,h|0,f|0),C=x,x=0,!(C&1)):0){x=0;fb(149,D|0,1032,178);x=0;Q=0}else Q=1;C=Hc()|0;H=M;x=0;va(1460,m|0);F=x;x=0;if(!(F&1))if(Q){R=C;S=H;break}else{L=C;N=H;B=134;break b}else{O=Hc(0)|0;P=M;Fg(O)}}else{H=Hc()|0;R=H;S=M}while(0);Fc(D|0);L=R;N=S;B=134;break b}while(0);d:do if((B|0)==11){z=l+1|0;A=q+12|0;H=s+12|0;C=q+16|0;F=s+16|0;I=(d|0)!=0;T=f+4|0;U=y+12|0;V=y+16|0;W=v+12|0;X=v+16|0;Y=l+8|0;Z=l+4|0;e:while(1){if(!(i[l>>0]&1)){i[z>>0]=0;i[l>>0]=0}else{i[k[Y>>2]>>0]=0;k[Z>>2]=0}x=0;xa(629,q|0,h|0);_=x;x=0;if(_&1){B=19;break}f:do if(I){g:while(1){x=0;xa(630,s|0,h|0);_=x;x=0;if(_&1){B=63;break e}if((k[A>>2]|0)==(k[H>>2]|0))$=(k[C>>2]|0)!=(k[F>>2]|0);else $=1;x=0;va(1460,s|0);_=x;x=0;if(_&1){B=63;break e}if(!$){aa=4;ba=0;break f}x=0;_=$a(44)|0;ca=x;x=0;if(ca&1){B=63;break e}x=0;ca=Ta(502,q|0,_|0)|0;_=x;x=0;if(_&1){B=63;break e}do if(ca){x=0;_=$a(45)|0;da=x;x=0;if(da&1){B=63;break e}x=0;da=Ta(502,q|0,_|0)|0;_=x;x=0;if(_&1){B=63;break e}x=0;if(!da){da=mo(l,j)|0;_=x;x=0;if(_&1){B=63;break e}if(!da)break;x=0;Ba(573,l|0)|0;da=x;x=0;if(da&1){B=63;break e}else break}jo(l,q)|0;da=x;x=0;if(da&1){B=63;break e}x=0;fb(161,t|0,l|0,d|0);da=x;x=0;if(da&1){B=63;break e}if(k[d>>2]|0)break g;if((k[t>>2]|0)==4){B=85;break f}}while(0);x=0;va(1468,q|0);ca=x;x=0;if(ca&1){B=63;break e}}k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;aa=1;ba=0}else while(1){x=0;xa(630,s|0,h|0);ca=x;x=0;if(ca&1){B=69;break e}if((k[A>>2]|0)==(k[H>>2]|0))ea=(k[C>>2]|0)!=(k[F>>2]|0);else ea=1;x=0;va(1460,s|0);ca=x;x=0;if(ca&1){B=69;break e}if(!ea){aa=4;ba=0;break f}x=0;ca=$a(44)|0;da=x;x=0;if(da&1){B=69;break e}x=0;da=Ta(502,q|0,ca|0)|0;ca=x;x=0;if(ca&1){B=69;break e}do if(da){x=0;ca=$a(45)|0;_=x;x=0;if(_&1){B=69;break e}x=0;_=Ta(502,q|0,ca|0)|0;ca=x;x=0;if(ca&1){B=69;break e}x=0;if(!_){_=mo(l,j)|0;ca=x;x=0;if(ca&1){B=69;break e}if(!_)break;x=0;Ba(573,l|0)|0;_=x;x=0;if(_&1){B=69;break e}else break}else{jo(l,q)|0;_=x;x=0;if(_&1){B=69;break e}x=0;fb(161,t|0,l|0,0);_=x;x=0;if(_&1){B=69;break e}if((k[t>>2]|0)==4){B=85;break f}else break}}while(0);x=0;va(1468,q|0);da=x;x=0;if(da&1){B=69;break e}}while(0);if((B|0)==85){B=0;x=0;fb(162,u|0,l|0,d|0);da=x;x=0;if(da&1){B=70;break}if(I?(k[d>>2]|0)!=0:0){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;fa=1;ga=0}else B=92;do if((B|0)==92){B=0;x=0;Ba(573,l|0)|0;da=x;x=0;if(da&1){B=90;break e}x=0;xa(626,f|0,u|0);da=x;x=0;if(da&1){B=90;break e}da=i[f>>0]|0;_=k[T>>2]|0;x=0;va(1460,f|0);ca=x;x=0;if(ca&1){B=90;break e}if(((da&1)==0?(da&255)>>>1:_)|0){x=0;va(1468,q|0);_=x;x=0;if(_&1){B=90;break e}while(1){x=0;xa(630,v|0,h|0);_=x;x=0;if(_&1){B=89;break e}if((k[A>>2]|0)==(k[W>>2]|0))ha=(k[C>>2]|0)!=(k[X>>2]|0);else ha=1;x=0;va(1460,v|0);_=x;x=0;if(_&1){B=89;break e}x=0;if(!ha)break;jo(u,q)|0;_=x;x=0;if(_&1){B=89;break e}x=0;va(1468,q|0);_=x;x=0;if(_&1){B=89;break e}}M2a(h,u)|0;_=x;x=0;if(_&1){B=90;break e}else{fa=4;ga=1;break}}x=0;xa(604,w|0,l|0);_=x;x=0;if(_&1){B=90;break e}x=0;Ta(501,w|0,u|0)|0;_=x;x=0;if(_&1){B=119;break e}x=0;va(1468,q|0);_=x;x=0;if(_&1){B=119;break e}while(1){x=0;xa(630,y|0,h|0);_=x;x=0;if(_&1){B=118;break e}if((k[A>>2]|0)==(k[U>>2]|0))ia=(k[C>>2]|0)!=(k[V>>2]|0);else ia=1;x=0;va(1460,y|0);_=x;x=0;if(_&1){B=118;break e}x=0;if(!ia)break;jo(w,q)|0;_=x;x=0;if(_&1){B=118;break e}x=0;va(1468,q|0);_=x;x=0;if(_&1){B=118;break e}}M2a(h,w)|0;_=x;x=0;if(_&1){B=119;break e}x=0;va(1460,w|0);_=x;x=0;if(_&1){B=90;break e}fa=4;ga=1}while(0);x=0;va(1460,u|0);_=x;x=0;if(_&1){B=70;break}aa=fa;ba=ga}x=0;va(1460,q|0);_=x;x=0;if(_&1){B=19;break}if((aa|0)!=4){E=l;break d}if(!(ba&1)){B=128;break}}if((B|0)==19){V=Hc()|0;ja=V;ka=M;B=21;break b}else if((B|0)==63){V=Hc()|0;la=V;ma=M;B=71}else if((B|0)==69){V=Hc()|0;la=V;ma=M;B=71}else if((B|0)==70){V=Hc()|0;la=V;ma=M;B=71}else if((B|0)==89){V=Hc()|0;na=V;oa=M;B=91}else if((B|0)==90){V=Hc()|0;na=V;oa=M;B=91}else if((B|0)==118){V=Hc()|0;pa=V;qa=M;B=120}else if((B|0)==119){V=Hc()|0;pa=V;qa=M;B=120}else if((B|0)==128){if(d){k[d>>2]=0;x=0;V=$a(42)|0;C=x;x=0;if(C&1){B=20;break b}k[d+4>>2]=V}x=0;xa(604,a|0,l|0);V=x;x=0;if(V&1){B=20;break b}else{E=l;break}}if((B|0)==71){ra=la;sa=ma}else if((B|0)==91){ta=na;ua=oa;B=123}else if((B|0)==120){x=0;va(1460,w|0);V=x;x=0;if(V&1){O=Hc(0)|0;P=M;Fg(O)}else{ta=pa;ua=qa;B=123}}if((B|0)==123){x=0;va(1460,u|0);V=x;x=0;if(V&1){O=Hc(0)|0;P=M;Fg(O)}else{ra=ta;sa=ua}}x=0;va(1460,q|0);V=x;x=0;if(!(V&1)){L=ra;N=sa;B=134;break b}O=Hc(0)|0;P=M;Fg(O)}while(0);x=0;va(1460,E|0);V=x;x=0;if(V&1){V=Hc()|0;wa=V;ya=M;break}x=0;va(1460,j|0);V=x;x=0;if(V&1){B=17;break a}K2a(h);r=e;return}while(0);if((B|0)==20){c=Hc()|0;ja=c;ka=M;B=21}if((B|0)==21){L=ja;N=ka;B=134}if((B|0)==134){x=0;va(1460,l|0);c=x;x=0;if(c&1){O=Hc(0)|0;P=M;Fg(O)}else{wa=L;ya=N}}x=0;va(1460,j|0);c=x;x=0;if(c&1){O=Hc(0)|0;P=M;Fg(O)}else{za=wa;Aa=ya}}else B=17;while(0);if((B|0)==17){B=Hc()|0;za=B;Aa=M}x=0;va(1460,h|0);h=x;x=0;if(h&1){O=Hc(0)|0;P=M;Fg(O)}else Sc(za|0)}function bn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+112|0;e=d+96|0;f=d+20|0;g=d+8|0;h=d;j=(c|0)!=0;if(gTa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,f)|0){l=HSa()|0;if(j){m=k[l>>2]|0;n=hp()|0;k[c>>2]=m;k[c+4>>2]=n}switch(k[l>>2]|0){case 20:case 2:{k[a>>2]=1;k[a+4>>2]=0;r=d;return}default:{}}if(c){k[a>>2]=0;k[a+4>>2]=65535;r=d;return}n=Rd(36)|0;x=0;fb(140,g|0,207819,25);m=x;x=0;if(!(m&1)){m=k[l>>2]|0;x=0;l=$a(42)|0;o=x;x=0;if(!(o&1)?(k[h>>2]=m,k[h+4>>2]=l,x=0,k[e>>2]=k[h>>2],k[e+4>>2]=k[h+4>>2],nb(88,n|0,g|0,b|0,e|0),e=x,x=0,!(e&1)):0){x=0;fb(149,n|0,1032,178);x=0;p=0}else p=1;e=Hc()|0;b=M;x=0;va(1460,g|0);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}if(p){q=b;s=e}else{t=b;u=e;Sc(u|0)}}else{e=Hc()|0;q=M;s=e}Fc(n|0);t=q;u=s;Sc(u|0)}if(j){k[c>>2]=0;j=hp()|0;k[c+4>>2]=j}j=k[f+12>>2]|0;f=j&61440;a:do if((f|0)<24576){if((f|0)<8192){switch(f|0){case 4096:break;default:break a}k[a>>2]=7;k[a+4>>2]=j&4095;r=d;return}if((f|0)<16384){switch(f|0){case 8192:break;default:break a}k[a>>2]=6;k[a+4>>2]=j&4095;r=d;return}else{switch(f|0){case 16384:break;default:break a}k[a>>2]=3;k[a+4>>2]=j&4095;r=d;return}}else if((f|0)<40960)if((f|0)<32768){switch(f|0){case 24576:break;default:break a}k[a>>2]=5;k[a+4>>2]=j&4095;r=d;return}else{switch(f|0){case 32768:break;default:break a}k[a>>2]=2;k[a+4>>2]=j&4095;r=d;return}else if((f|0)<49152){switch(f|0){case 40960:break;default:break a}k[a>>2]=4;k[a+4>>2]=j&4095;r=d;return}else{switch(f|0){case 49152:break;default:break a}k[a>>2]=8;k[a+4>>2]=j&4095;r=d;return}while(0);k[a>>2]=10;k[a+4>>2]=65535;r=d;return}function cn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=r;r=r+32|0;e=d+24|0;f=d+8|0;g=d;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;h=b+8|0;j=b+1|0;l=64;while(1){x=0;m=Ba(574,l|0)|0;n=x;x=0;if(n&1){o=9;break}n=fUa((i[b>>0]&1)==0?j:k[h>>2]|0,m,l)|0;if((n|0)==-1){p=m;o=4;break}if((n|0)!=(l|0)){q=m;s=n;o=18;break}QBa(m);l=l<<1}a:do if((o|0)==4){if(c){l=HSa()|0;h=k[l>>2]|0;x=0;l=$a(42)|0;j=x;x=0;if(j&1){t=p;o=10;break}k[c>>2]=h;k[c+4>>2]=l;u=p;QBa(u);r=d;return}l=Rd(36)|0;x=0;fb(140,f|0,207845,31);h=x;x=0;do if(!(h&1)){j=HSa()|0;m=k[j>>2]|0;x=0;j=$a(42)|0;n=x;x=0;if(!(n&1)?(k[g>>2]=m,k[g+4>>2]=j,x=0,k[e>>2]=k[g>>2],k[e+4>>2]=k[g+4>>2],nb(88,l|0,f|0,b|0,e|0),j=x,x=0,!(j&1)):0){x=0;fb(149,l|0,1032,178);x=0;v=0}else v=1;j=Hc()|0;m=M;x=0;va(1460,f|0);n=x;x=0;if(!(n&1))if(v){w=m;y=j;break}else{z=m;A=j;B=p;o=23;break a}else{C=Hc(0)|0;D=M;Fg(C)}}else{j=Hc()|0;w=M;y=j}while(0);Fc(l|0);z=w;A=y;B=p;o=23}else if((o|0)==9){h=Hc()|0;E=M;F=h}else if((o|0)==18){x=0;Fa(96,a|0,q|0,q+s|0)|0;h=x;x=0;if(!(h&1)){if(!c){u=q;QBa(u);r=d;return}k[c>>2]=0;x=0;h=$a(42)|0;j=x;x=0;if(!(j&1)){k[c+4>>2]=h;u=q;QBa(u);r=d;return}else{t=q;o=10}}else{t=q;o=10}}while(0);if((o|0)==10){q=Hc()|0;z=M;A=q;B=t;o=23}if((o|0)==23){QBa(B);E=z;F=A}x=0;va(1460,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else Sc(F|0)}function dn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+48|0;e=d+28|0;f=d;g=d+16|0;h=d+8|0;bn(f,a,c);i=(c|0)==0;if(!i?(k[c>>2]|0)!=0:0){r=d;return}switch(k[f>>2]|0){case 4:{cn(e,a,c);if((k[c>>2]|0)==0?(x=0,fb(163,e|0,b|0,c|0),f=x,x=0,f&1):0){f=Hc()|0;x=0;va(1460,e|0);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(f|0)}K2a(e);r=d;return}case 3:{en(a,b,c);r=d;return}case 2:{fn(a,b,0,c);r=d;return}default:{if(!i){i=hp()|0;k[c>>2]=38;k[c+4>>2]=i;r=d;return}d=Rd(36)|0;x=0;fb(140,g|0,207877,23);i=x;x=0;if(!(i&1)){x=0;i=$a(42)|0;c=x;x=0;if(!(c&1)?(k[h>>2]=38,k[h+4>>2]=i,x=0,k[e>>2]=k[h>>2],k[e+4>>2]=k[h+4>>2],pa(46,d|0,g|0,a|0,b|0,e|0),e=x,x=0,!(e&1)):0){x=0;fb(149,d|0,1032,178);x=0;l=0}else l=1;e=Hc()|0;b=M;x=0;va(1460,g|0);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}if(l){m=b;n=e}else{o=b;p=e;Sc(p|0)}}else{e=Hc()|0;m=M;n=e}Fc(d|0);o=m;p=n;Sc(p|0)}}}function en(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+96|0;e=d+12|0;f=d;if(!(vTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,e)|0))g=(hTa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,k[e+12>>2]|0)|0)!=0;else g=1;q2a(f,207901,33);x=0;pa(47,g|0,a|0,b|0,c|0,f|0);c=x;x=0;if(!(c&1)){K2a(f);r=d;return}d=Hc()|0;x=0;va(1460,f|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(d|0)}function fn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;e=r;r=r+128|0;f=e+8|0;g=e;h=e+48|0;j=e+36|0;l=e+24|0;m=e+12|0;n=(i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0;q2a(j,n,RLa(n)|0);n=(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0;o=RLa(n)|0;x=0;fb(140,l|0,n|0,o|0);o=x;x=0;a:do if(!(o&1)){n=(c|0)==0;x=0;p=Ba(574,32768)|0;q=x;x=0;b:do if(q&1)s=30;else{t=j+8|0;u=j+1|0;x=0;v=Fa(95,((i[j>>0]&1)==0?u:k[t>>2]|0)|0,0,g|0)|0;w=x;x=0;c:do if(w&1)s=22;else{if((v|0)<0)y=0;else{do if(!(vTa((i[j>>0]&1)==0?u:k[t>>2]|0,h)|0)){z=(i[l>>0]&1)==0?l+1|0:k[l+8>>2]|0;x=0;k[f>>2]=k[h+12>>2];A=Fa(95,z|0,(n?705:577)|0,f|0)|0;z=x;x=0;if(z&1){s=22;break c}if((A|0)<0){z=HSa()|0;B=k[z>>2]|0;x=0;Ba(572,v|0)|0;C=x;x=0;if(C&1){s=22;break c}k[z>>2]=B;D=0;break}d:while(1){x=0;B=Fa(97,v|0,p|0,32768)|0;z=x;x=0;if(z&1){s=21;break}if((B|0)>0)E=0;else{F=B;s=16;break}while(1){x=0;z=Fa(98,A|0,p+E|0,B-E|0)|0;C=x;x=0;if(C&1){s=20;break d}if((z|0)<0){F=z;s=16;break d}C=z+E|0;if((C|0)<(B|0))E=C;else continue d}}if((s|0)==16){x=0;B=Ba(572,v|0)|0;C=x;x=0;if(C&1){s=22;break c}x=0;C=Ba(572,A|0)|0;z=x;x=0;if(z&1){s=22;break c}D=(B|F|C|0)>-1;break}else if((s|0)==20){C=Hc()|0;G=C;H=M;break c}else if((s|0)==21){C=Hc()|0;G=C;H=M;break c}}else{x=0;Ba(572,v|0)|0;C=x;x=0;if(C&1){s=22;break c}else D=0}while(0);y=D}QBa(p);x=0;fb(140,m|0,207935,28);C=x;x=0;if(C&1){s=30;break b}x=0;pa(47,y^1|0,a|0,b|0,d|0,m|0);C=x;x=0;if(C&1){C=Hc()|0;B=M;x=0;va(1460,m|0);z=x;x=0;if(!(z&1)){I=B;J=C;break b}K=Hc(0)|0;L=M;Fg(K)}x=0;va(1460,m|0);C=x;x=0;if(C&1){s=30;break b}x=0;va(1460,l|0);C=x;x=0;if(C&1){s=29;break a}K2a(j);r=e;return}while(0);if((s|0)==22){v=Hc()|0;G=v;H=M}QBa(p);N=H;O=G;s=31}while(0);if((s|0)==30){p=Hc()|0;N=M;O=p;s=31}if((s|0)==31){I=N;J=O}x=0;va(1460,l|0);p=x;x=0;if(p&1){K=Hc(0)|0;L=M;Fg(K)}else{P=I;Q=J}}else s=29;while(0);if((s|0)==29){s=Hc()|0;P=M;Q=s}x=0;va(1460,j|0);j=x;x=0;if(j&1){K=Hc(0)|0;L=M;Fg(K)}else Sc(Q|0)}function gn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;cn(e,a,c);if((c|0)!=0?(k[c>>2]|0)!=0:0){K2a(e);r=d;return}x=0;fb(163,e|0,b|0,c|0);c=x;x=0;if(!(c&1)){K2a(e);r=d;return}d=Hc()|0;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}function hn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;f=(qUa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0)!=0;q2a(e,207964,33);x=0;pa(47,f|0,a|0,b|0,c|0,e|0);c=x;x=0;if(!(c&1)){K2a(e);r=d;return}d=Hc()|0;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}function jn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+128|0;d=c+40|0;e=c+8|0;f=c+16|0;g=c+28|0;h=c;k[e>>2]=0;j=e+4|0;l=hp()|0;k[j>>2]=l;if(!(vTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,d)|0)){k[e>>2]=0;l=hp()|0;k[j>>2]=l;if((k[d+12>>2]&61440|0)==16384){if(!b){m=0;r=c;return m|0}k[b>>2]=0;l=hp()|0;k[b+4>>2]=l;m=0;r=c;return m|0}}else{l=HSa()|0;n=k[l>>2]|0;l=hp()|0;k[e>>2]=n;k[j>>2]=l}zo(f,a);l=i[f>>0]|0;n=(l&1)==0;a:do if(!((n?(l&255)>>>1:k[f+4>>2]|0)|0))o=25;else{b:do if(!(vTa(n?f+1|0:k[f+8>>2]|0,d)|0)){k[e>>2]=0;x=0;p=$a(42)|0;q=x;x=0;if(q&1){o=19;break a}k[j>>2]=p}else{p=HSa()|0;q=k[p>>2]|0;x=0;s=$a(42)|0;t=x;x=0;if(t&1){o=19;break a}k[e>>2]=q;k[j>>2]=s;switch(k[p>>2]|0){case 2:case 20:break;default:break b}x=0;Ta(503,f|0,e|0)|0;p=x;x=0;if(p&1){o=19;break a}if(!(k[e>>2]|0)){o=25;break a}if(b){p=e;s=k[p+4>>2]|0;q=b;k[q>>2]=k[p>>2];k[q+4>>2]=s;u=0;o=26;break a}s=Rd(36)|0;x=0;fb(140,g|0,207998,37);q=x;x=0;do if(!(q&1)){p=e;t=k[p+4>>2]|0;v=h;k[v>>2]=k[p>>2];k[v+4>>2]=t;x=0;k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];nb(88,s|0,g|0,f|0,d|0);t=x;x=0;if(t&1)w=1;else{x=0;fb(149,s|0,1032,178);x=0;w=0}t=Hc()|0;v=M;x=0;va(1460,g|0);p=x;x=0;if(!(p&1))if(w){y=v;z=t;break}else{A=v;B=t;break a}else{C=Hc(0)|0;D=M;Fg(C)}}else{t=Hc()|0;y=M;z=t}while(0);Fc(s|0);A=y;B=z;break a}while(0);o=25}while(0);if((o|0)==25){x=0;z=Ta(504,a|0,b|0)|0;b=x;x=0;if(b&1)o=19;else{u=z;o=26}}if((o|0)==19){z=Hc()|0;A=M;B=z}else if((o|0)==26){K2a(f);m=u;r=c;return m|0}x=0;va(1460,f|0);f=x;x=0;if(f&1){C=Hc(0)|0;D=M;Fg(C)}else Sc(B|0);return 0}function kn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+96|0;d=c+20|0;e=c+8|0;f=c;g=a+8|0;h=a+1|0;if(!(hTa((i[a>>0]&1)==0?h:k[g>>2]|0,511)|0)){if(!b){j=1;r=c;return j|0}k[b>>2]=0;l=hp()|0;k[b+4>>2]=l;j=1;r=c;return j|0}l=HSa()|0;m=k[l>>2]|0;hp()|0;if(((m|0)==17?(l=(vTa((i[a>>0]&1)==0?h:k[g>>2]|0,d)|0)==0,hp()|0,l):0)?(k[d+12>>2]&61440|0)==16384:0){if(!b){j=0;r=c;return j|0}k[b>>2]=0;l=hp()|0;k[b+4>>2]=l;j=0;r=c;return j|0}if(b){l=hp()|0;k[b>>2]=m;k[b+4>>2]=l;j=0;r=c;return j|0}j=Rd(36)|0;x=0;fb(140,e|0,208036,35);c=x;x=0;if(!(c&1)){x=0;c=$a(42)|0;l=x;x=0;if(!(l&1)?(k[f>>2]=m,k[f+4>>2]=c,x=0,k[d>>2]=k[f>>2],k[d+4>>2]=k[f+4>>2],nb(88,j|0,e|0,a|0,d|0),d=x,x=0,!(d&1)):0){x=0;fb(149,j|0,1032,178);x=0;n=0}else n=1;d=Hc()|0;a=M;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(n){o=a;p=d}else{q=a;s=d;Sc(s|0)}}else{d=Hc()|0;o=M;p=d}Fc(j|0);q=o;s=p;Sc(s|0);return 0}function ln(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;f=(qUa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0)!=0;q2a(e,208072,43);x=0;pa(47,f|0,a|0,b|0,c|0,e|0);c=x;x=0;if(!(c&1)){K2a(e);r=d;return}d=Hc()|0;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}function mn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;f=(cUa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0)!=0;q2a(e,208116,35);x=0;pa(47,f|0,a|0,b|0,c|0,e|0);c=x;x=0;if(!(c&1)){K2a(e);r=d;return}d=Hc()|0;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}function nn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;c=r;r=r+32|0;d=c+24|0;e=c+16|0;f=c;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;g=(b|0)==0;h=b+4|0;a:do if(g){i=128;while(1){x=0;j=Ba(574,i|0)|0;l=x;x=0;if(l&1){m=9;break}x=0;l=Ta(505,j|0,i|0)|0;n=x;x=0;if(n&1){o=j;m=10;break}if(l){p=j;m=32;break a}l=HSa()|0;n=k[l>>2]|0;x=0;fb(140,f|0,208152,31);q=x;x=0;if(q&1){o=j;m=10;break}if((n|0)!=34){s=j;t=l;m=17;break}x=0;va(1460,f|0);l=x;x=0;if(l&1){o=j;m=10;break}QBa(j);i=i<<1}if((m|0)==9){i=Hc()|0;u=i;v=M;m=26;break}else if((m|0)==10){i=Hc()|0;w=o;y=i;z=M;m=29;break}else if((m|0)==17){i=Rd(36)|0;j=k[t>>2]|0;x=0;l=$a(42)|0;n=x;x=0;if(!(n&1)?(k[e>>2]=j,k[e+4>>2]=l,x=0,k[d>>2]=k[e>>2],k[d+4>>2]=k[e+4>>2],fb(164,i|0,f|0,d|0),l=x,x=0,!(l&1)):0){x=0;fb(149,i|0,1032,178);x=0;l=Hc()|0;A=s;B=M;C=l;m=31;break}l=Hc()|0;j=M;Fc(i|0);A=s;B=j;C=l;m=31;break}}else{l=128;while(1){x=0;j=Ba(574,l|0)|0;i=x;x=0;if(i&1){m=25;break}x=0;i=Ta(505,j|0,l|0)|0;n=x;x=0;if(n&1){D=j;m=27;break}if(i){p=j;m=32;break a}i=HSa()|0;n=k[i>>2]|0;x=0;fb(140,f|0,208152,31);q=x;x=0;if(q&1){D=j;m=27;break}q=(n|0)!=34;if(!q){k[b>>2]=0;x=0;n=$a(42)|0;E=x;x=0;if(E&1){F=j;m=30;break}else G=n}else{n=k[i>>2]|0;x=0;i=$a(42)|0;E=x;x=0;if(E&1){F=j;m=30;break}k[b>>2]=n;G=i}k[h>>2]=G;x=0;va(1460,f|0);i=x;x=0;if(i&1){D=j;m=27;break}if(q){H=j;m=38;break}QBa(j);l=l<<1}if((m|0)==25){l=Hc()|0;u=l;v=M;m=26;break}else if((m|0)==27){l=Hc()|0;w=D;y=l;z=M;m=29;break}else if((m|0)==30){l=Hc()|0;A=F;B=M;C=l;m=31;break}else if((m|0)==38){QBa(H);r=c;return}}while(0);if((m|0)==26){I=v;J=u}else if((m|0)==31){x=0;va(1460,f|0);f=x;x=0;if(f&1){K=Hc(0)|0;L=M;Fg(K)}else{N=B;O=C;P=A;m=37}}else if((m|0)==32){x=0;Ta(496,a|0,p|0)|0;A=x;x=0;if(!(A&1)){if(g){H=p;QBa(H);r=c;return}k[b>>2]=0;x=0;b=$a(42)|0;g=x;x=0;if(!(g&1)){k[h>>2]=b;H=p;QBa(H);r=c;return}}c=Hc()|0;w=p;y=c;z=M;m=29}if((m|0)==29){N=z;O=y;P=w;m=37}if((m|0)==37){QBa(P);I=N;J=O}x=0;va(1460,a|0);a=x;x=0;if(a&1){K=Hc(0)|0;L=M;Fg(K)}else Sc(J|0)}function on(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=(KUa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0)|0)!=0;q2a(d,208152,31);x=0;db(58,e|0,a|0,b|0,d|0)|0;b=x;x=0;if(!(b&1)){K2a(d);r=c;return}c=Hc()|0;x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(c|0)}function pn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+176|0;e=d+88|0;f=d+12|0;g=d;h=vTa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,e)|0;j=vTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,f)|0;if(j|h){q2a(g,208184,29);x=0;pa(47,(h|0)!=0&(j|0)!=0|0,a|0,b|0,c|0,g|0);c=x;x=0;if(!(c&1)){K2a(g);l=0;r=d;return l|0}c=Hc()|0;x=0;va(1460,g|0);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(c|0)}if((k[f>>2]|0)!=(k[e>>2]|0)){l=0;r=d;return l|0}if((k[f+72>>2]|0)!=(k[e+72>>2]|0)){l=0;r=d;return l|0}if((k[f+36>>2]|0)!=(k[e+36>>2]|0)){l=0;r=d;return l|0}l=(k[f+56>>2]|0)==(k[e+56>>2]|0);r=d;return l|0}function qn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+128|0;d=c+112|0;e=c;f=c+32|0;g=c+20|0;h=c+8|0;j=(vTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,f)|0)!=0;q2a(g,208214,28);x=0;l=db(58,j|0,a|0,b|0,g|0)|0;j=x;x=0;if(j&1){j=Hc()|0;m=M;x=0;va(1460,g|0);n=x;x=0;if(n&1){o=Hc(0)|0;p=M;Fg(o)}else{q=m;s=j;Sc(s|0)}}K2a(g);if(l){t=-1;u=-1;M=t;r=c;return u|0}l=(k[f+12>>2]&61440|0)==32768;g=hp()|0;q2a(h,208214,28);j=(b|0)==0;do if(!l){if(!j){k[b>>2]=1;k[b+4>>2]=g;K2a(h);t=-1;u=-1;M=t;r=c;return u|0}m=Rd(36)|0;k[e>>2]=1;k[e+4>>2]=g;x=0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];nb(88,m|0,h|0,a|0,d|0);n=x;x=0;if(n&1){n=Hc()|0;v=M;Fc(m|0);w=v;y=n;break}else{x=0;fb(149,m|0,1032,178);x=0;z=13;break}}else{if(!j){k[b>>2]=0;x=0;m=$a(42)|0;n=x;x=0;if(n&1){z=13;break}k[b+4>>2]=m}K2a(h);m=k[f+36>>2]|0;t=((m|0)<0)<<31>>31;u=m;M=t;r=c;return u|0}while(0);if((z|0)==13){z=Hc()|0;w=M;y=z}x=0;va(1460,h|0);h=x;x=0;if(h&1){o=Hc(0)|0;p=M;Fg(o)}else{q=w;s=y;Sc(s|0)}return 0}function rn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+96|0;d=c+12|0;e=c;f=(vTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,d)|0)!=0;q2a(e,208243,34);x=0;g=db(58,f|0,a|0,b|0,e|0)|0;b=x;x=0;if(!(b&1)){b=g?0:k[d+16>>2]|0;K2a(e);M=g?0:0;r=c;return b|0}b=Hc()|0;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(b|0);return 0}function sn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;if((i[1048]|0)==0?(Bb(1048)|0)!=0:0){k[5603]=0;k[5604]=0;k[5605]=0;Kc(1048)}e=i[22412]|0;if(((e&1)==0?(e&255)>>>1:k[5604]|0)|0){if(!b){n2a(a,22412);r=c;return}k[b>>2]=0;e=hp()|0;k[b+4>>2]=e;n2a(a,22412);r=c;return}nn(d,b);x=0;Ta(493,22412,d|0)|0;b=x;x=0;if(!(b&1)){K2a(d);n2a(a,22412);r=c;return}c=Hc()|0;x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(c|0)}function tn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+96|0;d=c+88|0;e=c+12|0;f=c;g=(vTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,e)|0)!=0;q2a(f,208278,27);x=0;h=db(58,g|0,a|0,b|0,f|0)|0;b=x;x=0;if(b&1){b=Hc()|0;x=0;va(1460,f|0);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(b|0)}K2a(f);if(h){j=0;r=c;return j|0}if((k[e+12>>2]&61440|0)!=16384){j=(k[e+36>>2]|0)==0;r=c;return j|0}Un(d,a);a=(k[d>>2]|0)==0;e=k[d+4>>2]|0;if(((e|0)!=0?(d=e+4|0,h=k[d>>2]|0,k[d>>2]=h+-1,(h|0)==1):0)?(Sf[k[(k[e>>2]|0)+8>>2]&2047](e),h=e+8|0,d=k[h>>2]|0,k[h>>2]=d+-1,(d|0)==1):0)Sf[k[(k[e>>2]|0)+12>>2]&2047](e);j=a;r=c;return j|0}function un(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+96|0;d=c+12|0;e=c;f=(vTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,d)|0)!=0;q2a(e,208306,34);x=0;g=db(58,f|0,a|0,b|0,e|0)|0;b=x;x=0;if(!(b&1)){K2a(e);r=c;return (g?-1:k[d+56>>2]|0)|0}d=Hc()|0;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0);return 0}function vn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+112|0;e=d+32|0;f=d+12|0;g=d+24|0;h=d;j=a+8|0;l=a+1|0;m=(vTa((i[a>>0]&1)==0?l:k[j>>2]|0,e)|0)!=0;q2a(f,208306,34);x=0;n=db(58,m|0,a|0,c|0,f|0)|0;m=x;x=0;if(m&1){m=Hc()|0;o=M;x=0;va(1460,f|0);p=x;x=0;if(p&1){q=Hc(0)|0;s=M;Fg(q)}else{t=o;u=m;Sc(u|0)}}K2a(f);if(n){r=d;return}k[g>>2]=k[e+48>>2];k[g+4>>2]=b;b=(Qb(((i[a>>0]&1)==0?l:k[j>>2]|0)|0,g|0)|0)!=0;q2a(h,208306,34);x=0;db(58,b|0,a|0,c|0,h|0)|0;c=x;x=0;if(!(c&1)){K2a(h);r=d;return}d=Hc()|0;c=M;x=0;va(1460,h|0);h=x;x=0;if(h&1){q=Hc(0)|0;s=M;Fg(q)}else{t=c;u=d;Sc(u|0)}}function wn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+128|0;e=d+40|0;f=d+28|0;g=d;h=d+16|0;j=d+8|0;l=(b&4096|0)==0;if((b&12288|0)==12288){r=d;return}hp()|0;if(!(b&16384)){a:do if(!(vTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,e)|0)){m=hp()|0;n=k[e+12>>2]|0;o=n&61440;if((o|0)<24576){if((o|0)<8192){switch(o|0){case 4096:break;default:{p=m;q=0;s=65535;break a}}p=m;q=0;s=n&4095;break}if((o|0)<16384){switch(o|0){case 8192:break;default:{p=m;q=0;s=65535;break a}}p=m;q=0;s=n&4095;break}else{switch(o|0){case 16384:break;default:{p=m;q=0;s=65535;break a}}p=m;q=0;s=n&4095;break}}else{if((o|0)<32768){switch(o|0){case 24576:break;default:{p=m;q=0;s=65535;break a}}p=m;q=0;s=n&4095;break}if((o|0)<49152){switch(o|0){case 32768:break;default:{p=m;q=0;s=65535;break a}}p=m;q=0;s=n&4095;break}else{switch(o|0){case 49152:break;default:{p=m;q=0;s=65535;break a}}p=m;q=0;s=n&4095;break}}}else{n=HSa()|0;m=k[n>>2]|0;o=hp()|0;switch(k[n>>2]|0){case 2:case 20:{p=o;q=m;s=0;break a;break}default:{}}p=o;q=m;s=65535}while(0);t=q;u=p;v=s}else{b:do if(!(gTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,e)|0)){s=hp()|0;p=k[e+12>>2]|0;q=p&61440;if((q|0)<24576){if((q|0)<8192){switch(q|0){case 4096:break;default:{w=s;y=0;z=65535;break b}}w=s;y=0;z=p&4095;break}if((q|0)<16384){switch(q|0){case 8192:break;default:{w=s;y=0;z=65535;break b}}w=s;y=0;z=p&4095;break}else{switch(q|0){case 16384:break;default:{w=s;y=0;z=65535;break b}}w=s;y=0;z=p&4095;break}}if((q|0)<40960)if((q|0)<32768){switch(q|0){case 24576:break;default:{w=s;y=0;z=65535;break b}}w=s;y=0;z=p&4095;break}else{switch(q|0){case 32768:break;default:{w=s;y=0;z=65535;break b}}w=s;y=0;z=p&4095;break}else if((q|0)<49152){switch(q|0){case 40960:break;default:{w=s;y=0;z=65535;break b}}w=s;y=0;z=p&4095;break}else{switch(q|0){case 49152:break;default:{w=s;y=0;z=65535;break b}}w=s;y=0;z=p&4095;break}}else{p=HSa()|0;s=k[p>>2]|0;q=hp()|0;switch(k[p>>2]|0){case 20:case 2:{w=q;y=s;z=0;break b;break}default:{}}w=q;y=s;z=65535}while(0);t=y;u=w;v=z}if(t){if(c){k[c>>2]=t;k[c+4>>2]=u;r=d;return}z=Rd(36)|0;x=0;fb(140,f|0,208341,30);w=x;x=0;if(!(w&1)){k[g>>2]=t;k[g+4>>2]=u;x=0;k[e>>2]=k[g>>2];k[e+4>>2]=k[g+4>>2];nb(88,z|0,f|0,a|0,e|0);g=x;x=0;if(g&1)A=1;else{x=0;fb(149,z|0,1032,178);x=0;A=0}g=Hc()|0;u=M;x=0;va(1460,f|0);f=x;x=0;if(f&1){B=Hc(0)|0;C=M;Fg(B)}if(A){D=u;E=g}else{F=u;G=g;Sc(G|0)}}else{g=Hc()|0;D=M;E=g}Fc(z|0);F=D;G=E;Sc(G|0)}if(l)if(!(b&8192))H=b;else H=v&~b;else H=v|b;if(!(zTa(-100,(i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,k[5606]&H,H>>>6&256)|0)){r=d;return}if(c){H=HSa()|0;b=k[H>>2]|0;H=gp()|0;k[c>>2]=b;k[c+4>>2]=H;r=d;return}d=Rd(36)|0;x=0;fb(140,h|0,208341,30);H=x;x=0;if(!(H&1)){H=HSa()|0;c=k[H>>2]|0;x=0;H=$a(43)|0;b=x;x=0;if(!(b&1)?(k[j>>2]=c,k[j+4>>2]=H,x=0,k[e>>2]=k[j>>2],k[e+4>>2]=k[j+4>>2],nb(88,d|0,h|0,a|0,e|0),e=x,x=0,!(e&1)):0){x=0;fb(149,d|0,1032,178);x=0;I=0}else I=1;e=Hc()|0;a=M;x=0;va(1460,h|0);h=x;x=0;if(h&1){B=Hc(0)|0;C=M;Fg(B)}if(I){J=a;K=e}else{F=a;G=e;Sc(G|0)}}else{e=Hc()|0;J=M;K=e}Fc(d|0);F=J;G=K;Sc(G|0)}function xn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+96|0;d=c+20|0;e=c;f=c+8|0;hp()|0;a:do if(!(gTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,d)|0)){g=hp()|0;h=k[d+12>>2]&61440;b:do if((h|0)<24576){if((h|0)<8192){switch(h|0){case 4096:break;default:break b}j=7;l=0;m=g;break a}if((h|0)<16384){switch(h|0){case 8192:break;default:break b}j=6;l=0;m=g;break a}else{switch(h|0){case 16384:break;default:break b}j=3;l=0;m=g;break a}}else{if((h|0)<40960){if((h|0)>=32768)switch(h|0){case 32768:{j=2;l=0;m=g;break a;break}default:break b}switch(h|0){case 24576:break;default:break b}j=5;l=0;m=g;break a}if((h|0)<49152){switch(h|0){case 40960:break;default:break b}j=4;l=0;m=g;break a}else{switch(h|0){case 49152:break;default:break b}j=8;l=0;m=g;break a}}while(0);j=10;l=0;m=g}else{h=HSa()|0;n=k[h>>2]|0;o=hp()|0;switch(k[h>>2]|0){case 20:case 2:{j=1;l=n;m=o;break a;break}default:{}}j=0;l=n;m=o}while(0);q2a(f,208372,25);o=(b|0)==0;do if(!j){if(!o){k[b>>2]=l;k[b+4>>2]=m;K2a(f);p=0;r=c;return p|0}n=Rd(36)|0;k[e>>2]=l;k[e+4>>2]=m;x=0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];nb(88,n|0,f|0,a|0,d|0);h=x;x=0;if(h&1){h=Hc()|0;q=M;Fc(n|0);s=q;t=h;break}else{x=0;fb(149,n|0,1032,178);x=0;u=21;break}}else{if(!o){k[b>>2]=0;x=0;n=$a(42)|0;h=x;x=0;if(h&1){u=21;break}k[b+4>>2]=n}K2a(f);p=Vn(a,j,b)|0;r=c;return p|0}while(0);if((u|0)==21){u=Hc()|0;s=M;t=u}x=0;va(1460,f|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(t|0);return 0}function yn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+96|0;d=c+20|0;e=c;f=c+8|0;hp()|0;a:do if(!(gTa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,d)|0)){g=hp()|0;h=k[d+12>>2]&61440;b:do if((h|0)<24576){if((h|0)<8192){switch(h|0){case 4096:break;default:break b}j=7;l=0;m=g;break a}if((h|0)<16384){switch(h|0){case 8192:break;default:break b}j=6;l=0;m=g;break a}else{switch(h|0){case 16384:break;default:break b}j=3;l=0;m=g;break a}}else{if((h|0)<40960){if((h|0)>=32768)switch(h|0){case 32768:{j=2;l=0;m=g;break a;break}default:break b}switch(h|0){case 24576:break;default:break b}j=5;l=0;m=g;break a}if((h|0)<49152){switch(h|0){case 40960:break;default:break b}j=4;l=0;m=g;break a}else{switch(h|0){case 49152:break;default:break b}j=8;l=0;m=g;break a}}while(0);j=10;l=0;m=g}else{h=HSa()|0;n=k[h>>2]|0;o=hp()|0;switch(k[h>>2]|0){case 20:case 2:{j=1;l=n;m=o;break a;break}default:{}}j=0;l=n;m=o}while(0);o=(j|0)==0;q2a(f,208398,29);n=(b|0)==0;do if(o){if(!n){k[b>>2]=l;k[b+4>>2]=m;p=21;break}h=Rd(36)|0;k[e>>2]=l;k[e+4>>2]=m;x=0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];nb(88,h|0,f|0,a|0,d|0);q=x;x=0;if(q&1){q=Hc()|0;s=M;Fc(h|0);t=s;u=q;break}else{x=0;fb(149,h|0,1032,178);x=0;p=22;break}}else if(!n){k[b>>2]=0;x=0;h=$a(42)|0;q=x;x=0;if(q&1)p=22;else{k[b+4>>2]=h;p=21}}else p=21;while(0);if((p|0)==21){K2a(f);if(!(j>>>0>1&(o^1))){v=0;w=0;M=v;r=c;return w|0}o=Wn(a,j,b)|0;v=M;w=o;M=v;r=c;return w|0}else if((p|0)==22){p=Hc()|0;t=M;u=p}x=0;va(1460,f|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(u|0);return 0}function zn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;f=(AQa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0)!=0;q2a(e,208428,25);x=0;pa(47,f|0,a|0,b|0,c|0,e|0);c=x;x=0;if(!(c&1)){K2a(e);r=d;return}d=Hc()|0;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}function An(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;c=r;r=r+16|0;e=c;f=(sUa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0,b)|0)!=0;q2a(e,208454,30);x=0;db(58,f|0,a|0,d|0,e|0)|0;d=x;x=0;if(!(d&1)){K2a(e);r=c;return}c=Hc()|0;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(c|0)}function Bn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+96|0;e=d+16|0;f=d;g=(dTa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,e)|0)!=0;q2a(f,208485,24);x=0;h=db(58,g|0,b|0,c|0,f|0)|0;c=x;x=0;if(c&1){c=Hc()|0;x=0;va(1460,f|0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else Sc(c|0)}else{K2a(f);if(h){j=0;l=0;m=0;n=0;o=0;p=0}else{h=k[e+4>>2]|0;f=Qyb(h|0,0,k[e+8>>2]|0,0)|0;c=M;b=Qyb(h|0,0,k[e+12>>2]|0,0)|0;g=M;q=Qyb(h|0,0,k[e+16>>2]|0,0)|0;j=q;l=M;m=b;n=g;o=f;p=c}c=a+16|0;k[c>>2]=j;k[c+4>>2]=l;l=a+8|0;k[l>>2]=m;k[l+4>>2]=n;n=a;k[n>>2]=o;k[n+4>>2]=p;r=d;return}}function Cn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+112|0;e=d+96|0;f=d+20|0;g=d+8|0;h=d;j=(c|0)!=0;if(vTa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,f)|0){l=HSa()|0;if(j){m=k[l>>2]|0;n=hp()|0;k[c>>2]=m;k[c+4>>2]=n}switch(k[l>>2]|0){case 2:case 20:{k[a>>2]=1;k[a+4>>2]=0;r=d;return}default:{}}if(c){k[a>>2]=0;k[a+4>>2]=65535;r=d;return}n=Rd(36)|0;x=0;fb(140,g|0,207819,25);m=x;x=0;if(!(m&1)){m=k[l>>2]|0;x=0;l=$a(42)|0;o=x;x=0;if(!(o&1)?(k[h>>2]=m,k[h+4>>2]=l,x=0,k[e>>2]=k[h>>2],k[e+4>>2]=k[h+4>>2],nb(88,n|0,g|0,b|0,e|0),e=x,x=0,!(e&1)):0){x=0;fb(149,n|0,1032,178);x=0;p=0}else p=1;e=Hc()|0;b=M;x=0;va(1460,g|0);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}if(p){q=b;s=e}else{t=b;u=e;Sc(u|0)}}else{e=Hc()|0;q=M;s=e}Fc(n|0);t=q;u=s;Sc(u|0)}if(j){k[c>>2]=0;j=hp()|0;k[c+4>>2]=j}j=k[f+12>>2]|0;f=j&61440;a:do if((f|0)<24576){if((f|0)<8192){switch(f|0){case 4096:break;default:break a}k[a>>2]=7;k[a+4>>2]=j&4095;r=d;return}if((f|0)<16384){switch(f|0){case 8192:break;default:break a}k[a>>2]=6;k[a+4>>2]=j&4095;r=d;return}else{switch(f|0){case 16384:break;default:break a}k[a>>2]=3;k[a+4>>2]=j&4095;r=d;return}}else{if((f|0)<32768){switch(f|0){case 24576:break;default:break a}k[a>>2]=5;k[a+4>>2]=j&4095;r=d;return}if((f|0)<49152){switch(f|0){case 32768:break;default:break a}k[a>>2]=2;k[a+4>>2]=j&4095;r=d;return}else{switch(f|0){case 49152:break;default:break a}k[a>>2]=8;k[a+4>>2]=j&4095;r=d;return}}while(0);k[a>>2]=10;k[a+4>>2]=65535;r=d;return}function Dn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+32|0;d=c+24|0;e=c+16|0;f=c;g=ue(208510)|0;if(!g){h=ue(208517)|0;if(!h){j=ue(208521)|0;if(!j)l=ue(208526)|0;else l=j}else l=h}else l=g;g=(l|0)!=0?l:317735;q2a(a,g,RLa(g)|0);g=i[a>>0]|0;if(!(g&1))m=(g&255)>>>1;else m=k[a+4>>2]|0;do if(m)if(!b){x=0;fb(165,d|0,a|0,0);g=x;x=0;if(g&1){n=17;break}if((k[d>>2]|0)!=3){n=14;break}r=c;return}else{x=0;fb(165,e|0,a|0,b|0);g=x;x=0;if(g&1){n=17;break}if((k[e>>2]|0)!=3){n=14;break}r=c;return}else n=14;while(0);do if((n|0)==14){e=HSa()|0;k[e>>2]=20;x=0;fb(140,f|0,208534,38);e=x;x=0;if(!(e&1)){x=0;db(58,1,a|0,b|0,f|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=M;x=0;va(1460,f|0);m=x;x=0;if(!(m&1)){o=d;p=e;break}q=Hc(0)|0;s=M;Fg(q)}else{x=0;va(1460,f|0);e=x;x=0;if(e&1){n=17;break}r=c;return}}else n=17}while(0);if((n|0)==17){n=Hc()|0;o=M;p=n}x=0;va(1460,a|0);a=x;x=0;if(a&1){q=Hc(0)|0;s=M;Fg(q)}else Sc(p|0)}function En(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=i[b>>0]|0;if((((f&1)==0?(f&255)>>>1:k[b+4>>2]|0)|0)!=0?(xo(d,b),f=i[d>>0]|0,g=(((f&1)==0?(f&255)>>>1:k[d+4>>2]|0)|0)==0,K2a(d),g):0){nn(e,0);x=0;xa(604,d|0,e|0);g=x;x=0;do if(!(g&1)){x=0;f=Ta(501,d|0,b|0)|0;h=x;x=0;if(!(h&1)?(x=0,xa(604,a|0,f|0),f=x,x=0,!(f&1)):0){x=0;va(1460,d|0);f=x;x=0;if(f&1){j=12;break}K2a(e);r=c;return}f=Hc()|0;h=M;x=0;va(1460,d|0);l=x;x=0;if(l&1){l=Hc(0)|0;Fg(l)}else{m=h;n=f}}else j=12;while(0);if((j|0)==12){j=Hc()|0;m=M;n=j}x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(n|0)}n2a(a,b);r=c;return}function Fn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d;f=b+12|0;g=f;do if((k[g>>2]|0)!=0&(0!=0?1:(k[g+4>>2]|0)!=65535)){if(c){k[c>>2]=0;h=hp()|0;k[c+4>>2]=h}}else{h=b+20|0;i=k[h>>2]|0;j=k[h+4>>2]|0;if((i&-5|0)==0&0==0|0==0&(j|0)==65535){Cn(e,b,c);h=e;l=k[h+4>>2]|0;m=f;k[m>>2]=k[h>>2];k[m+4>>2]=l;break}l=f;k[l>>2]=i;k[l+4>>2]=j;if(c){k[c>>2]=0;j=hp()|0;k[c+4>>2]=j}}while(0);c=f;f=k[c+4>>2]|0;e=a;k[e>>2]=k[c>>2];k[e+4>>2]=f;r=d;return}function Gn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+16|0;e=d;f=b+20|0;g=f;h=k[g>>2]|0;i=k[g+4>>2]|0;if((h|0)!=0&(0!=0|(i|0)!=65535))if(!c){j=h;l=i}else{k[c>>2]=0;i=hp()|0;k[c+4>>2]=i;i=f;j=k[i>>2]|0;l=k[i+4>>2]|0}else{bn(e,b,c);c=e;e=k[c>>2]|0;b=k[c+4>>2]|0;c=f;k[c>>2]=e;k[c+4>>2]=b;j=e;l=b}b=a;k[b>>2]=j;k[b+4>>2]=l;r=d;return}function Hn(a,b,c){a=a|0;b=b|0;c=c|0;M2a(b,a)|0;return}function In(a,b){a=a|0;b=b|0;M2a(b,a)|0;return}function Jn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;yYa(k[c>>2]|0);k[c>>2]=0;c=k[b>>2]|0;if(!c){d=1064;e=k[d+4>>2]|0;f=a;k[f>>2]=k[d>>2];k[f+4>>2]=e;return}k[b>>2]=0;if(!($Sa(c)|0))g=0;else{c=HSa()|0;g=k[c>>2]|0}c=hp()|0;k[a>>2]=g;k[a+4>>2]=c;return}function Kn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;d=r;r=r+112|0;e=d+88|0;f=d+8|0;g=d+64|0;h=d;j=d+76|0;l=d+40|0;m=d+52|0;n=d+28|0;o=d+16|0;p=i[b>>0]|0;q=(((p&1)==0?(p&255)>>>1:k[b+4>>2]|0)|0)==0;q2a(j,208573,48);p=(c|0)==0;do if(q){if(!p){s=1072;t=k[s+4>>2]|0;u=c;k[u>>2]=k[s>>2];k[u+4>>2]=t;K2a(j);r=d;return}t=Rd(36)|0;u=1072;s=k[u+4>>2]|0;v=h;k[v>>2]=k[u>>2];k[v+4>>2]=s;x=0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];nb(88,t|0,j|0,b|0,e|0);s=x;x=0;if(s&1){s=Hc()|0;v=M;Fc(t|0);w=v;y=s;break}else{x=0;fb(149,t|0,1032,178);x=0;z=10;break}}else{if(!p){k[c>>2]=0;x=0;t=$a(42)|0;s=x;x=0;if(s&1){z=10;break}k[c+4>>2]=t}K2a(j);k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;t=k[a>>2]|0;s=t+32|0;v=_Sa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0;k[t+28>>2]=v;do if(!v){t=HSa()|0;u=k[t>>2]|0;x=0;t=$a(42)|0;A=x;x=0;if(A&1)z=34;else{B=t;C=u;z=22}}else{x=0;fb(140,g|0,324339,1);u=x;x=0;if(!(u&1)){x=0;Ta(493,l|0,g|0)|0;u=x;x=0;if(u&1){u=Hc()|0;t=M;x=0;va(1460,g|0);A=x;x=0;if(!(A&1)){D=t;E=u;z=35;break}u=Hc(0)|0;Fg(u)}x=0;va(1460,g|0);u=x;x=0;if(!(u&1)){u=k[266]|0;t=k[267]|0;if(!(k[266]|0)){A=xYa(4109)|0;k[s>>2]=A;B=k[267]|0;C=k[266]|0;z=22}else{B=t;C=u;z=22}}else z=34}else z=34}while(0);a:do if((z|0)==22){b:do if(!C){s=k[a>>2]|0;if(!(k[s+28>>2]|0)){k[a>>2]=0;v=a+4|0;u=k[v>>2]|0;k[v>>2]=0;if(!u)break;v=u+4|0;t=k[v>>2]|0;k[v>>2]=t+-1;if((t|0)!=1)break;x=0;va(k[(k[u>>2]|0)+8>>2]|0,u|0);t=x;x=0;if(t&1){z=34;break a}t=u+8|0;v=k[t>>2]|0;k[t>>2]=v+-1;if((v|0)!=1)break;x=0;va(k[(k[u>>2]|0)+12>>2]|0,u|0);u=x;x=0;if(u&1){z=34;break a}else break}x=0;xa(604,o|0,l|0);u=x;x=0;if(u&1){z=34;break a}x=0;xa(604,e|0,b|0);u=x;x=0;do if(!(u&1)){x=0;v=Ta(501,e|0,o|0)|0;t=x;x=0;if(!(t&1)?(x=0,xa(604,n|0,v|0),v=x,x=0,!(v&1)):0){x=0;va(1460,e|0);v=x;x=0;if(v&1){z=57;break}x=0;Ta(493,s|0,n|0)|0;v=x;x=0;if(v&1){v=Hc()|0;t=M;x=0;va(1460,n|0);A=x;x=0;if(!(A&1)){F=t;G=v;break}H=Hc(0)|0;I=M;Fg(H)}v=s+12|0;k[v>>2]=0;k[v+4>>2]=65535;v=s+20|0;k[v>>2]=0;k[v+4>>2]=65535;x=0;va(1460,n|0);v=x;x=0;if(v&1){z=57;break}x=0;va(1460,o|0);v=x;x=0;if(v&1){z=34;break a}v=i[l>>0]|0;t=(v&1)==0;A=t?l+1|0:k[l+8>>2]|0;if((i[A>>0]|0)!=46)break b;J=t?(v&255)>>>1:k[l+4>>2]|0;if((J|0)!=1?!((i[A+1>>0]|0)==46&(J|0)==2):0)break b;x=0;xa(631,a|0,c|0);J=x;x=0;if(J&1){z=34;break a}else break b}J=Hc()|0;A=M;x=0;va(1460,e|0);v=x;x=0;if(v&1){v=Hc(0)|0;Fg(v)}else{K=A;L=J;z=58}}else z=57;while(0);if((z|0)==57){s=Hc()|0;K=M;L=s;z=58}if((z|0)==58){F=K;G=L}x=0;va(1460,o|0);s=x;x=0;if(!(s&1)){N=F;O=G;break a}H=Hc(0)|0;I=M;Fg(H)}else{k[a>>2]=0;s=a+4|0;u=k[s>>2]|0;k[s>>2]=0;if((u|0)!=0?(s=u+4|0,J=k[s>>2]|0,k[s>>2]=J+-1,(J|0)==1):0){x=0;va(k[(k[u>>2]|0)+8>>2]|0,u|0);J=x;x=0;if(J&1){z=34;break a}J=u+8|0;s=k[J>>2]|0;k[J>>2]=s+-1;if((s|0)==1?(x=0,va(k[(k[u>>2]|0)+12>>2]|0,u|0),u=x,x=0,u&1):0){z=34;break a}}x=0;fb(140,m|0,208573,48);u=x;x=0;if(u&1){z=34;break a}if(!p){k[c>>2]=C;k[c+4>>2]=B;x=0;va(1460,m|0);u=x;x=0;if(u&1){z=34;break a}else break}u=Rd(36)|0;k[f>>2]=C;k[f+4>>2]=B;x=0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];nb(88,u|0,m|0,b|0,e|0);s=x;x=0;if(s&1){s=Hc()|0;J=M;Fc(u|0);P=J;Q=s}else{x=0;fb(149,u|0,1032,178);x=0;u=Hc()|0;P=M;Q=u}x=0;va(1460,m|0);u=x;x=0;if(!(u&1)){N=P;O=Q;break a}H=Hc(0)|0;I=M;Fg(H)}while(0);K2a(l);r=d;return}while(0);if((z|0)==34){u=Hc()|0;D=M;E=u;z=35}if((z|0)==35){N=D;O=E}x=0;va(1460,l|0);u=x;x=0;if(u&1){H=Hc(0)|0;I=M;Fg(H)}else{R=N;S=O;Sc(S|0)}}while(0);if((z|0)==10){z=Hc()|0;w=M;y=z}x=0;va(1460,j|0);j=x;x=0;if(j&1){H=Hc(0)|0;I=M;Fg(H)}else{R=w;S=y;Sc(S|0)}}function Ln(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;c=r;r=r+80|0;d=c+64|0;e=c+48|0;f=c+24|0;g=c+36|0;h=c+16|0;j=c;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;$a(42)|0;l=x;x=0;a:do if(!(l&1)){m=HSa()|0;n=(b|0)==0;o=e+8|0;p=e+1|0;q=e+4|0;s=b+4|0;t=k[a>>2]|0;b:do if(n){u=t;c:while(1){v=u+28|0;w=u+32|0;y=k[w>>2]|0;z=k[v>>2]|0;k[m>>2]=0;x=0;A=Ba(575,68)|0;B=x;x=0;if(B&1)break;do if((A|0)>-1){x=0;B=Fa(99,z|0,y|0,d|0)|0;C=x;x=0;if(C&1)break c;else{D=B;E=10}}else{k[d>>2]=0;x=0;B=Ba(576,z|0)|0;C=x;x=0;if(C&1)break c;if(!B){D=k[m>>2]|0;E=10;break}else{OLa(y+11|0,B+11|0)|0;k[d>>2]=y;F=y;E=13;break}}while(0);do if((E|0)==10){E=0;if(D){z=k[m>>2]|0;x=0;$a(42)|0;A=x;x=0;if(A&1)break c;else{G=z;break}}else{F=k[d>>2]|0;E=13;break}}while(0);do if((E|0)==13){E=0;if(F){x=0;Ta(496,e|0,y+11|0)|0;z=x;x=0;if(z&1)break c;G=k[266]|0;break}yYa(k[w>>2]|0);k[w>>2]=0;z=k[v>>2]|0;if(!z){G=k[266]|0;break}k[v>>2]=0;if(!($Sa(z)|0))H=0;else H=k[m>>2]|0;x=0;$a(42)|0;z=x;x=0;if(z&1)break c;else G=H}while(0);if(G){E=46;break b}v=k[a>>2]|0;if(!(k[v+28>>2]|0)){E=71;break b}w=i[e>>0]|0;y=(w&1)==0;z=y?p:k[o>>2]|0;if((i[z>>0]|0)!=46){I=v;E=79;break b}A=y?(w&255)>>>1:k[q>>2]|0;if((A|0)==1){u=v;continue}if((i[z+1>>0]|0)==46&(A|0)==2)u=v;else{I=v;E=79;break b}}u=Hc()|0;J=u;K=M;E=59;break a}else{u=t;d:while(1){v=u+28|0;A=u+32|0;z=k[A>>2]|0;w=k[v>>2]|0;k[m>>2]=0;x=0;y=Ba(575,68)|0;B=x;x=0;if(B&1)break;do if((y|0)>-1){x=0;B=Fa(99,w|0,z|0,d|0)|0;C=x;x=0;if(C&1)break d;else{L=B;E=34}}else{k[d>>2]=0;x=0;B=Ba(576,w|0)|0;C=x;x=0;if(C&1)break d;if(!B){L=k[m>>2]|0;E=34;break}else{OLa(z+11|0,B+11|0)|0;k[d>>2]=z;N=z;E=37;break}}while(0);do if((E|0)==34){E=0;if(L){w=k[m>>2]|0;x=0;$a(42)|0;y=x;x=0;if(y&1)break d;else{O=w;break}}else{N=k[d>>2]|0;E=37;break}}while(0);do if((E|0)==37){E=0;if(N){x=0;Ta(496,e|0,z+11|0)|0;w=x;x=0;if(w&1)break d;O=k[266]|0;break}yYa(k[A>>2]|0);k[A>>2]=0;w=k[v>>2]|0;if(!w){O=k[266]|0;break}k[v>>2]=0;if(!($Sa(w)|0))P=0;else P=k[m>>2]|0;x=0;$a(42)|0;w=x;x=0;if(w&1)break d;else O=P}while(0);if(O){E=46;break b}k[b>>2]=0;x=0;v=$a(42)|0;A=x;x=0;if(A&1)break;k[s>>2]=v;v=k[a>>2]|0;if(!(k[v+28>>2]|0)){E=71;break b}A=i[e>>0]|0;z=(A&1)==0;w=z?p:k[o>>2]|0;if((i[w>>0]|0)!=46){I=v;E=79;break b}y=z?(A&255)>>>1:k[q>>2]|0;if((y|0)==1){u=v;continue}if((i[w+1>>0]|0)==46&(y|0)==2)u=v;else{I=v;E=79;break b}}u=Hc()|0;J=u;K=M;E=59;break a}while(0);if((E|0)==46){x=0;xa(632,f|0,k[a>>2]|0);q=x;x=0;if(q&1){E=58;break}k[a>>2]=0;q=a+4|0;o=k[q>>2]|0;k[q>>2]=0;if((o|0)!=0?(q=o+4|0,p=k[q>>2]|0,k[q>>2]=p+-1,(p|0)==1):0){x=0;va(k[(k[o>>2]|0)+8>>2]|0,o|0);p=x;x=0;if(!(p&1)){p=o+8|0;q=k[p>>2]|0;k[p>>2]=q+-1;if((q|0)==1?(x=0,va(k[(k[o>>2]|0)+12>>2]|0,o|0),o=x,x=0,o&1):0)E=60;else E=52}else E=60}else E=52;e:do if((E|0)==52){if(!n){o=k[m>>2]|0;x=0;q=$a(42)|0;p=x;x=0;if(p&1){E=60;break}k[b>>2]=o;k[s>>2]=q;x=0;va(1460,f|0);q=x;x=0;if(q&1){E=58;break a}K2a(e);r=c;return}q=Rd(36)|0;x=0;fb(140,g|0,208622,49);o=x;x=0;do if(!(o&1)){p=k[m>>2]|0;x=0;t=$a(42)|0;u=x;x=0;if(!(u&1)?(k[h>>2]=p,k[h+4>>2]=t,x=0,k[d>>2]=k[h>>2],k[d+4>>2]=k[h+4>>2],nb(88,q|0,g|0,f|0,d|0),t=x,x=0,!(t&1)):0){x=0;fb(149,q|0,1032,178);x=0;Q=0}else Q=1;t=Hc()|0;p=M;x=0;va(1460,g|0);u=x;x=0;if(!(u&1))if(Q){R=p;S=t;break}else{T=p;U=t;break e}else{V=Hc(0)|0;W=M;Fg(V)}}else{t=Hc()|0;R=M;S=t}while(0);Fc(q|0);T=R;U=S}while(0);if((E|0)==60){m=Hc()|0;T=M;U=m}x=0;va(1460,f|0);m=x;x=0;if(!(m&1)){X=T;Y=U;break}V=Hc(0)|0;W=M;Fg(V)}else if((E|0)==71){k[a>>2]=0;m=a+4|0;s=k[m>>2]|0;k[m>>2]=0;if(!s){K2a(e);r=c;return}m=s+4|0;n=k[m>>2]|0;k[m>>2]=n+-1;if((n|0)!=1){K2a(e);r=c;return}x=0;va(k[(k[s>>2]|0)+8>>2]|0,s|0);n=x;x=0;if(n&1){E=58;break}n=s+8|0;m=k[n>>2]|0;k[n>>2]=m+-1;if((m|0)!=1){K2a(e);r=c;return}x=0;va(k[(k[s>>2]|0)+12>>2]|0,s|0);s=x;x=0;if(s&1){E=58;break}K2a(e);r=c;return}else if((E|0)==79){x=0;xa(604,j|0,e|0);s=x;x=0;if(s&1){E=58;break}x=0;Ba(573,I|0)|0;s=x;x=0;if(!(s&1)?(x=0,Ta(501,I|0,j|0)|0,s=x,x=0,!(s&1)):0){s=I+12|0;k[s>>2]=0;k[s+4>>2]=65535;s=I+20|0;k[s>>2]=0;k[s+4>>2]=65535;x=0;va(1460,j|0);s=x;x=0;if(s&1){E=58;break}K2a(e);r=c;return}s=Hc()|0;m=M;x=0;va(1460,j|0);n=x;x=0;if(!(n&1)){X=m;Y=s;break}V=Hc(0)|0;W=M;Fg(V)}}else E=58;while(0);if((E|0)==58){j=Hc()|0;J=j;K=M;E=59}if((E|0)==59){X=K;Y=J}x=0;va(1460,e|0);e=x;x=0;if(e&1){V=Hc(0)|0;W=M;Fg(V)}else Sc(Y|0)}function Mn(){var a=0;k[264]=0;k[266]=0;a=hp()|0;k[267]=a;k[5606]=4095;a=hp()|0;k[268]=2;k[269]=a;return}function Nn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+16|0;f=e;g=d;d=k[g>>2]|0;h=k[g+4>>2]|0;G0a(a,b);b=a+8|0;k[b>>2]=d;k[b+4>>2]=h;h=a+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[a>>2]=22468;b=a+28|0;k[b>>2]=0;d=a+32|0;k[d>>2]=0;x=0;g=Ba(563,36)|0;i=x;x=0;do if(!(i&1)){j=g;l=j+36|0;do{k[j>>2]=0;j=j+4|0}while((j|0)<(l|0));x=0;xa(633,f|0,g|0);j=x;x=0;if(!(j&1)){j=k[f>>2]|0;k[b>>2]=g;l=a+32|0;m=k[l>>2]|0;k[l>>2]=j;if((m|0)!=0?(j=m+4|0,l=k[j>>2]|0,k[j>>2]=l+-1,(l|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);l=x;x=0;if(l&1)break;l=m+8|0;j=k[l>>2]|0;k[l>>2]=j+-1;if((j|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0)break}x=0;Ta(493,k[b>>2]|0,c|0)|0;m=x;x=0;if(!(m&1)){r=e;return}}}while(0);c=Hc(0)|0;me(c|0)|0;k[b>>2]=0;b=a+32|0;c=k[b>>2]|0;k[b>>2]=0;do if((c|0)!=0?(b=c+4|0,g=k[b>>2]|0,k[b>>2]=g+-1,(g|0)==1):0){x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);g=x;x=0;if(!(g&1)){g=c+8|0;b=k[g>>2]|0;k[g>>2]=b+-1;if((b|0)!=1){n=14;break}x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);b=x;x=0;if(!(b&1)){n=14;break}}b=Hc()|0;g=M;x=0;hb(45);f=x;x=0;if(f&1){o=Hc(0)|0;p=M;Fg(o)}else{q=g;s=b}}else n=14;while(0);do if((n|0)==14){x=0;hb(45);c=x;x=0;if(c&1){c=Hc()|0;q=M;s=c;break}else{r=e;return}}while(0);e=k[d>>2]|0;if((e|0)!=0?(d=e+4|0,q=k[d>>2]|0,k[d>>2]=q+-1,(q|0)==1):0){x=0;va(k[(k[e>>2]|0)+8>>2]|0,e|0);q=x;x=0;if(q&1){o=Hc(0)|0;p=M;Fg(o)}q=e+8|0;d=k[q>>2]|0;k[q>>2]=d+-1;if((d|0)==1?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){o=Hc(0)|0;p=M;Fg(o)}}k[a>>2]=21312;x=0;va(1460,h|0);h=x;x=0;if(h&1){h=Hc()|0;qCa(a);vc(h|0)}else{qCa(a);Sc(s|0)}}function On(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=22468;b=k[a+32>>2]|0;do if((b|0)!=0?(c=b+4|0,d=k[c>>2]|0,k[c>>2]=d+-1,(d|0)==1):0){x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);d=x;x=0;if(!(d&1)){d=b+8|0;c=k[d>>2]|0;k[d>>2]=c+-1;if((c|0)!=1)break;x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);c=x;x=0;if(!(c&1))break}c=Hc()|0;k[a>>2]=21312;x=0;va(1460,a+16|0);d=x;x=0;if(d&1){d=Hc()|0;qCa(a);vc(d|0)}else{qCa(a);vc(c|0)}}while(0);k[a>>2]=21312;x=0;va(1460,a+16|0);b=x;x=0;if(b&1){b=Hc()|0;qCa(a);vc(b|0)}else{qCa(a);return}}function Pn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d;if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}if((b|0)==(c|0)){r=d;return a|0}f=c-b|0;if(f>>>0<=4294967279)if(f>>>0<11){i[e>>0]=f<<1;g=e+1|0}else h=9;else{GBa(e);h=9}if((h|0)==9){h=f+16&-16;j=KBa(h)|0;k[e+8>>2]=j;k[e>>2]=h|1;k[e+4>>2]=f;g=j}j=b;b=g;while(1){i[b>>0]=i[j>>0]|0;j=j+1|0;if((j|0)==(c|0))break;else b=b+1|0}i[g+f>>0]=0;f=i[e>>0]|0;g=(f&1)==0;b=g?e+1|0:k[e+8>>2]|0;c=g?(f&255)>>>1:k[e+4>>2]|0;f=b+c|0;g=b;j=i[a>>0]|0;if(!(j&1)){l=(j&255)>>>1;m=10;n=j}else{j=k[a>>2]|0;l=k[a+4>>2]|0;m=(j&-2)+-1|0;n=j&255}do if(c){do if((m-l|0)>>>0>>0){x=0;Pa(42,a|0,m|0,l+c-m|0,l|0,l|0,0,0);j=x;x=0;if(!(j&1)){o=i[a>>0]|0;break}j=Hc()|0;x=0;va(1460,e|0);h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}else Sc(j|0)}else o=n;while(0);j=(o&1)==0?a+1|0:k[a+8>>2]|0;h=l-g|0;p=b;q=j+l|0;while(1){i[q>>0]=i[p>>0]|0;p=p+1|0;if((p|0)==(f|0))break;else q=q+1|0}i[j+(f+h)>>0]=0;q=l+c|0;if(!(i[a>>0]&1)){i[a>>0]=q<<1;break}else{k[a+4>>2]=q;break}}while(0);K2a(e);r=d;return a|0}function Qn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;f=r;r=r+16|0;g=f;h=e;e=k[h>>2]|0;i=k[h+4>>2]|0;G0a(a,b);b=a+8|0;k[b>>2]=e;k[b+4>>2]=i;i=a+16|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[a>>2]=22468;b=a+28|0;k[b>>2]=0;e=a+32|0;k[e>>2]=0;x=0;h=Ba(563,36)|0;j=x;x=0;do if(!(j&1)){l=h;m=l+36|0;do{k[l>>2]=0;l=l+4|0}while((l|0)<(m|0));x=0;xa(633,g|0,h|0);l=x;x=0;if(!(l&1)){l=k[g>>2]|0;k[b>>2]=h;m=a+32|0;n=k[m>>2]|0;k[m>>2]=l;if((n|0)!=0?(l=n+4|0,m=k[l>>2]|0,k[l>>2]=m+-1,(m|0)==1):0){x=0;va(k[(k[n>>2]|0)+8>>2]|0,n|0);m=x;x=0;if(m&1)break;m=n+8|0;l=k[m>>2]|0;k[m>>2]=l+-1;if((l|0)==1?(x=0,va(k[(k[n>>2]|0)+12>>2]|0,n|0),n=x,x=0,n&1):0)break}x=0;Ta(493,k[b>>2]|0,c|0)|0;n=x;x=0;if(!(n&1)?(x=0,Ta(493,(k[b>>2]|0)+12|0,d|0)|0,n=x,x=0,!(n&1)):0){r=f;return}}}while(0);d=Hc(0)|0;me(d|0)|0;k[b>>2]=0;b=a+32|0;d=k[b>>2]|0;k[b>>2]=0;do if((d|0)!=0?(b=d+4|0,c=k[b>>2]|0,k[b>>2]=c+-1,(c|0)==1):0){x=0;va(k[(k[d>>2]|0)+8>>2]|0,d|0);c=x;x=0;if(!(c&1)){c=d+8|0;b=k[c>>2]|0;k[c>>2]=b+-1;if((b|0)!=1){o=15;break}x=0;va(k[(k[d>>2]|0)+12>>2]|0,d|0);b=x;x=0;if(!(b&1)){o=15;break}}b=Hc()|0;c=M;x=0;hb(45);h=x;x=0;if(h&1){p=Hc(0)|0;q=M;Fg(p)}else{s=c;t=b}}else o=15;while(0);do if((o|0)==15){x=0;hb(45);d=x;x=0;if(d&1){d=Hc()|0;s=M;t=d;break}else{r=f;return}}while(0);f=k[e>>2]|0;if((f|0)!=0?(e=f+4|0,s=k[e>>2]|0,k[e>>2]=s+-1,(s|0)==1):0){x=0;va(k[(k[f>>2]|0)+8>>2]|0,f|0);s=x;x=0;if(s&1){p=Hc(0)|0;q=M;Fg(p)}s=f+8|0;e=k[s>>2]|0;k[s>>2]=e+-1;if((e|0)==1?(x=0,va(k[(k[f>>2]|0)+12>>2]|0,f|0),f=x,x=0,f&1):0){p=Hc(0)|0;q=M;Fg(p)}}k[a>>2]=21312;x=0;va(1460,i|0);i=x;x=0;if(i&1){i=Hc()|0;qCa(a);vc(i|0)}else{qCa(a);Sc(t|0)}}function Rn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=r;r=r+16|0;g=f+8|0;h=f;i=(d|0)==0;if(!a){if(i){r=f;return}k[d>>2]=0;a=hp()|0;k[d+4>>2]=a;r=f;return}if(!i){i=HSa()|0;a=k[i>>2]|0;i=hp()|0;k[d>>2]=a;k[d+4>>2]=i;r=f;return}f=Rd(36)|0;i=HSa()|0;d=k[i>>2]|0;x=0;i=$a(42)|0;a=x;x=0;if(a&1){j=Hc()|0;l=M;Fc(f|0);Sc(j|0)}k[h>>2]=d;k[h+4>>2]=i;x=0;k[g>>2]=k[h>>2];k[g+4>>2]=k[h+4>>2];pa(46,f|0,e|0,b|0,c|0,g|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;Fc(f|0);Sc(j|0)}else Gf(f|0,1032,178)}function Sn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+16|0;e=d;f=c;c=k[f>>2]|0;g=k[f+4>>2]|0;G0a(a,b);b=a+8|0;k[b>>2]=c;k[b+4>>2]=g;g=a+16|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[a>>2]=22468;b=a+28|0;k[b>>2]=0;c=a+32|0;k[c>>2]=0;x=0;f=Ba(563,36)|0;h=x;x=0;if(!(h&1)){h=f;i=h+36|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(i|0));x=0;xa(633,e|0,f|0);h=x;x=0;if(!(h&1)){h=k[e>>2]|0;k[b>>2]=f;f=a+32|0;e=k[f>>2]|0;k[f>>2]=h;if(!e){r=d;return}h=e+4|0;f=k[h>>2]|0;k[h>>2]=f+-1;if((f|0)!=1){r=d;return}x=0;va(k[(k[e>>2]|0)+8>>2]|0,e|0);f=x;x=0;if(!(f&1)){f=e+8|0;h=k[f>>2]|0;k[f>>2]=h+-1;if((h|0)!=1){r=d;return}x=0;va(k[(k[e>>2]|0)+12>>2]|0,e|0);e=x;x=0;if(!(e&1)){r=d;return}}}}e=Hc(0)|0;me(e|0)|0;k[b>>2]=0;b=a+32|0;e=k[b>>2]|0;k[b>>2]=0;do if((e|0)!=0?(b=e+4|0,h=k[b>>2]|0,k[b>>2]=h+-1,(h|0)==1):0){x=0;va(k[(k[e>>2]|0)+8>>2]|0,e|0);h=x;x=0;if(!(h&1)){h=e+8|0;b=k[h>>2]|0;k[h>>2]=b+-1;if((b|0)!=1){j=13;break}x=0;va(k[(k[e>>2]|0)+12>>2]|0,e|0);b=x;x=0;if(!(b&1)){j=13;break}}b=Hc()|0;h=M;x=0;hb(45);f=x;x=0;if(f&1){l=Hc(0)|0;m=M;Fg(l)}else{n=h;o=b}}else j=13;while(0);do if((j|0)==13){x=0;hb(45);e=x;x=0;if(e&1){e=Hc()|0;n=M;o=e;break}else{r=d;return}}while(0);d=k[c>>2]|0;if((d|0)!=0?(c=d+4|0,n=k[c>>2]|0,k[c>>2]=n+-1,(n|0)==1):0){x=0;va(k[(k[d>>2]|0)+8>>2]|0,d|0);n=x;x=0;if(n&1){l=Hc(0)|0;m=M;Fg(l)}n=d+8|0;c=k[n>>2]|0;k[n>>2]=c+-1;if((c|0)==1?(x=0,va(k[(k[d>>2]|0)+12>>2]|0,d|0),d=x,x=0,d&1):0){l=Hc(0)|0;m=M;Fg(l)}}k[a>>2]=21312;x=0;va(1460,g|0);g=x;x=0;if(g&1){g=Hc()|0;qCa(a);vc(g|0)}else{qCa(a);Sc(o|0)}}function Tn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+16|0;f=e+8|0;g=e;h=(c|0)==0;if(!a){if(h){r=e;return a|0}k[c>>2]=0;i=hp()|0;k[c+4>>2]=i;r=e;return a|0}if(!h){h=HSa()|0;i=k[h>>2]|0;h=hp()|0;k[c>>2]=i;k[c+4>>2]=h;r=e;return a|0}a=Rd(36)|0;e=HSa()|0;h=k[e>>2]|0;x=0;e=$a(42)|0;c=x;x=0;if(c&1){j=Hc()|0;l=M;Fc(a|0);Sc(j|0)}k[g>>2]=h;k[g+4>>2]=e;x=0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];nb(88,a|0,d|0,b|0,f|0);f=x;x=0;if(f&1){j=Hc()|0;l=M;Fc(a|0);Sc(j|0)}else Gf(a|0,1032,178);return 0}function Un(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=KBa(36)|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=65535;k[c+20>>2]=0;k[c+24>>2]=65535;k[c+28>>2]=0;k[c+32>>2]=0;Xn(a,c);x=0;fb(166,a|0,b|0,0);b=x;x=0;if(!(b&1))return;b=Hc()|0;c=k[a+4>>2]|0;if(!c)Sc(b|0);a=c+4|0;d=k[a>>2]|0;k[a>>2]=d+-1;if((d|0)!=1)Sc(b|0);x=0;va(k[(k[c>>2]|0)+8>>2]|0,c|0);d=x;x=0;if(d&1){e=Hc(0)|0;f=M;Fg(e)}d=c+8|0;a=k[d>>2]|0;k[d>>2]=a+-1;if((a|0)!=1)Sc(b|0);x=0;va(k[(k[c>>2]|0)+12>>2]|0,c|0);c=x;x=0;if(c&1){e=Hc(0)|0;f=M;Fg(e)}else Sc(b|0)}function Vn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+32|0;e=d+12|0;f=d;a:do switch(b|0){case 1:{if(!c){g=0;r=d;return g|0}k[c>>2]=0;h=hp()|0;k[c+4>>2]=h;g=0;r=d;return g|0}case 3:{h=(vUa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0)|0)!=0;q2a(e,208372,25);x=0;j=db(58,h|0,a|0,c|0,e|0)|0;h=x;x=0;if(!(h&1)){K2a(e);if(j)g=0;else break a;r=d;return g|0}j=Hc()|0;h=M;x=0;va(1460,e|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}else{o=h;p=j;Sc(p|0)}break}default:{j=(jVa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0)|0)!=0;q2a(f,208372,25);x=0;h=db(58,j|0,a|0,c|0,f|0)|0;j=x;x=0;if(!(j&1)){K2a(f);if(h)g=0;else break a;r=d;return g|0}h=Hc()|0;j=M;x=0;va(1460,f|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}else{o=j;p=h;Sc(p|0)}}}while(0);g=1;r=d;return g|0}function Wn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+16|0;e=d+8|0;f=d;do if((b|0)==3){Un(f,a);a:do if(!c){g=1;h=0;do{i=k[f>>2]|0;if(!i){j=2;l=g;m=h;n=19;break a}x=0;fb(161,e|0,i|0,0);o=x;x=0;if(o&1)break;x=0;o=Fa(100,i|0,k[e>>2]|0,0)|0;i=M;p=x;x=0;if(p&1)break;g=Hyb(o|0,i|0,g|0,h|0)|0;h=M;x=0;xa(631,f|0,0);i=x;x=0}while(!(i&1));h=Hc()|0;q=h;s=M}else{h=1;g=0;do{i=k[f>>2]|0;if(!i){j=2;l=h;m=g;n=19;break a}x=0;fb(161,e|0,i|0,c|0);o=x;x=0;if(o&1)break;if(k[c>>2]|0){j=1;l=h;m=g;n=19;break a}x=0;o=Fa(100,i|0,k[e>>2]|0,c|0)|0;i=M;p=x;x=0;if(p&1)break;h=Hyb(o|0,i|0,h|0,g|0)|0;g=M;x=0;xa(631,f|0,0);i=x;x=0}while(!(i&1));g=Hc()|0;q=g;s=M}while(0);if((n|0)==19){g=k[f+4>>2]|0;if(((g|0)!=0?(h=g+4|0,i=k[h>>2]|0,k[h>>2]=i+-1,(i|0)==1):0)?(Sf[k[(k[g>>2]|0)+8>>2]&2047](g),i=g+8|0,h=k[i>>2]|0,k[i>>2]=h+-1,(h|0)==1):0)Sf[k[(k[g>>2]|0)+12>>2]&2047](g);if((j|0)==2){t=l;u=m;break}else{v=m;w=l}M=v;r=d;return w|0}g=k[f+4>>2]|0;if(!g)Sc(q|0);h=g+4|0;i=k[h>>2]|0;k[h>>2]=i+-1;if((i|0)!=1)Sc(q|0);x=0;va(k[(k[g>>2]|0)+8>>2]|0,g|0);i=x;x=0;if(i&1){y=Hc(0)|0;z=M;Fg(y)}i=g+8|0;h=k[i>>2]|0;k[i>>2]=h+-1;if((h|0)!=1)Sc(q|0);x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);g=x;x=0;if(g&1){y=Hc(0)|0;z=M;Fg(y)}else Sc(q|0)}else{t=1;u=0}while(0);Vn(a,b,c)|0;v=u;w=t;M=v;r=d;return w|0}function Xn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;k[a>>2]=b;e=a+4|0;k[e>>2]=0;x=0;xa(634,d|0,b|0);b=x;x=0;if(!(b&1)){b=k[e>>2]|0;k[e>>2]=k[d>>2];k[d>>2]=b;d=b;if(!b){r=c;return}a=d+4|0;f=k[a>>2]|0;k[a>>2]=f+-1;if((f|0)!=1){r=c;return}f=b;x=0;va(k[(k[f>>2]|0)+8>>2]|0,d|0);b=x;x=0;if(!(b&1)){b=d+8|0;a=k[b>>2]|0;k[b>>2]=a+-1;if((a|0)!=1){r=c;return}x=0;va(k[(k[f>>2]|0)+12>>2]|0,d|0);d=x;x=0;if(!(d&1)){r=c;return}}}c=Hc()|0;d=k[e>>2]|0;if(!d)Sc(c|0);e=d+4|0;f=k[e>>2]|0;k[e>>2]=f+-1;if((f|0)!=1)Sc(c|0);x=0;va(k[(k[d>>2]|0)+8>>2]|0,d|0);f=x;x=0;if(f&1){g=Hc(0)|0;h=M;Fg(g)}f=d+8|0;e=k[f>>2]|0;k[f>>2]=e+-1;if((e|0)!=1)Sc(c|0);x=0;va(k[(k[d>>2]|0)+12>>2]|0,d|0);d=x;x=0;if(d&1){g=Hc(0)|0;h=M;Fg(g)}else Sc(c|0)}function Yn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=0;x=0;c=Ba(563,16)|0;d=x;x=0;if(!(d&1)){k[c+4>>2]=1;k[c+8>>2]=1;k[c>>2]=22436;k[c+12>>2]=b;k[a>>2]=c;return}c=Hc(0)|0;me(c|0)|0;a:do if(!b)e=12;else{c=b+28|0;a=b+32|0;yYa(k[a>>2]|0);k[a>>2]=0;a=k[c>>2]|0;if((a|0)!=0?(k[c>>2]=0,$Sa(a)|0,x=0,$a(42)|0,a=x,x=0,a&1):0){a=Hc()|0;c=M;x=0;va(1460,b|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else{f=c;g=a}}else e=6;do if((e|0)==6){x=0;va(1460,b|0);a=x;x=0;if(a&1){a=Hc()|0;f=M;g=a;break}else{OBa(b);e=12;break a}}while(0);OBa(b);h=f;i=g}while(0);if((e|0)==12){x=0;hb(46);x=0;e=Hc()|0;h=M;i=e}x=0;hb(45);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(i|0)}function Zn(a){a=a|0;OBa(a);return}function _n(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=k[a+12>>2]|0;if(!b)return;a=b+28|0;c=b+32|0;yYa(k[c>>2]|0);k[c>>2]=0;c=k[a>>2]|0;if((c|0)!=0?(k[a>>2]=0,$Sa(c)|0,x=0,$a(42)|0,c=x,x=0,c&1):0){c=Hc()|0;a=M;x=0;va(1460,b|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else{e=a;f=c;OBa(b);Sc(f|0)}}x=0;va(1460,b|0);c=x;x=0;if(c&1){c=Hc()|0;e=M;f=c;OBa(b);Sc(f|0)}else{OBa(b);return}}function $n(a,b){a=a|0;b=b|0;return 0}function ao(a){a=a|0;return 0}function bo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;k[a>>2]=0;x=0;c=Ba(563,16)|0;d=x;x=0;if(!(d&1)){k[c+4>>2]=1;k[c+8>>2]=1;k[c>>2]=22488;k[c+12>>2]=b;k[a>>2]=c;return}c=Hc(0)|0;me(c|0)|0;a:do if(!b)e=15;else{x=0;va(1460,b+24|0);c=x;x=0;do if(c&1){a=Hc()|0;d=M;x=0;va(1460,b+12|0);f=x;x=0;if(f&1){g=Hc(0)|0;h=M;Fg(g)}else{i=d;j=a;e=9}}else{x=0;va(1460,b+12|0);a=x;x=0;if(a&1){a=Hc()|0;i=M;j=a;e=9;break}x=0;va(1460,b|0);a=x;x=0;if(a&1){a=Hc()|0;l=M;m=a;break}else{OBa(b);e=15;break a}}while(0);do if((e|0)==9){x=0;va(1460,b|0);c=x;x=0;if(c&1){g=Hc(0)|0;h=M;Fg(g)}else{l=i;m=j;break}}while(0);OBa(b);n=l;o=m}while(0);if((e|0)==15){x=0;hb(46);x=0;e=Hc()|0;n=M;o=e}x=0;hb(45);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(o|0)}function co(a){a=a|0;OBa(a);return}function eo(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=k[a+12>>2]|0;if(!b)return;x=0;va(1460,b+24|0);a=x;x=0;do if(a&1){c=Hc()|0;d=M;x=0;va(1460,b+12|0);e=x;x=0;if(e&1){f=Hc(0)|0;g=M;Fg(f)}else{h=d;i=c}}else{x=0;va(1460,b+12|0);c=x;x=0;if(c&1){c=Hc()|0;h=M;i=c;break}x=0;va(1460,b|0);c=x;x=0;if(c&1){c=Hc()|0;j=M;l=c;OBa(b);Sc(l|0)}else{OBa(b);return}}while(0);x=0;va(1460,b|0);a=x;x=0;if(a&1){f=Hc(0)|0;g=M;Fg(f)}j=h;l=i;OBa(b);Sc(l|0)}function fo(a,b){a=a|0;b=b|0;return 0}function go(a){a=a|0;return 0}function ho(a){a=a|0;On(a);OBa(a);return}function io(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=a+28|0;c=k[b>>2]|0;if(!c){d=nk(a)|0;return d|0}e=c+24|0;f=i[e>>0]|0;if(!(f&1))g=(f&255)>>>1;else g=k[c+28>>2]|0;a:do if(!g){f=nk(a)|0;x=0;Ta(496,e|0,f|0)|0;f=x;x=0;do if(!(f&1)){h=k[b>>2]|0;j=i[h>>0]|0;if(!(j&1))l=(j&255)>>>1;else l=k[h+4>>2]|0;if(!l)m=h;else{x=0;Ta(484,h+24|0,208822)|0;h=x;x=0;if(h&1)break;h=k[b>>2]|0;j=i[h>>0]|0;n=(j&1)==0;x=0;Fa(88,h+24|0,(n?h+1|0:k[h+8>>2]|0)|0,(n?(j&255)>>>1:k[h+4>>2]|0)|0)|0;h=x;x=0;if(h&1)break;x=0;Ta(484,(k[b>>2]|0)+24|0,276785)|0;h=x;x=0;if(h&1)break;m=k[b>>2]|0}h=i[m+12>>0]|0;if(!(h&1))o=(h&255)>>>1;else o=k[m+16>>2]|0;if(!o){p=m;break a}x=0;Ta(484,m+24|0,208826)|0;h=x;x=0;if((!(h&1)?(h=k[b>>2]|0,j=h+12|0,n=i[j>>0]|0,q=(n&1)==0,x=0,Fa(88,h+24|0,(q?j+1|0:k[h+20>>2]|0)|0,(q?(n&255)>>>1:k[h+16>>2]|0)|0)|0,h=x,x=0,!(h&1)):0)?(x=0,Ta(484,(k[b>>2]|0)+24|0,276785)|0,h=x,x=0,!(h&1)):0){p=k[b>>2]|0;break a}}while(0);f=Hc(0)|0;me(f|0)|0;f=nk(a)|0;x=0;hb(45);h=x;x=0;if(h&1){h=Hc()|0;vc(h|0)}else{d=f;return d|0}}else p=c;while(0);c=p+24|0;if(!(i[c>>0]&1)){d=c+1|0;return d|0}else{d=k[p+32>>2]|0;return d|0}return 0}function jo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+16|0;d=c;e=i[b>>0]|0;f=(e&1)==0;g=b+4|0;h=k[g>>2]|0;if(!((f?(e&255)>>>1:h)|0)){r=c;return a|0}if((a|0)==(b|0)){n2a(d,b);j=i[d>>0]|0;l=d+8|0;m=k[l>>2]|0;n=d+1|0;if(((i[((j&1)==0?n:m)>>0]|0)!=47?(o=i[b>>0]|0,p=(o&1)==0,((p?(o&255)>>>1:k[g>>2]|0)|0)!=0):0)?(i[(p?b+1|0:k[b+8>>2]|0)+(p?(o&255)>>>1:k[g>>2]|0)+-1>>0]|0)!=47:0){x=0;xa(605,b|0,47);o=x;x=0;if(!(o&1)){q=i[d>>0]|0;s=k[l>>2]|0;t=9}}else{q=j;s=m;t=9}if((t|0)==9?(t=(q&1)==0,x=0,Fa(88,b|0,(t?n:s)|0,(t?(q&255)>>>1:k[d+4>>2]|0)|0)|0,q=x,x=0,!(q&1)):0){K2a(d);r=c;return a|0}q=Hc()|0;x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(q|0)}q=b+8|0;d=k[q>>2]|0;t=b+1|0;if((i[(f?t:d)>>0]|0)!=47){f=i[a>>0]|0;s=(f&1)==0;if(s)u=(f&255)>>>1;else u=k[a+4>>2]|0;if(u){if(s){v=a+1|0;w=(f&255)>>>1}else{v=k[a+8>>2]|0;w=k[a+4>>2]|0}if((i[v+w+-1>>0]|0)!=47){L3a(a,47);y=i[b>>0]|0;z=k[q>>2]|0;A=k[g>>2]|0}else{y=e;z=d;A=h}}else{y=e;z=d;A=h}}else{y=e;z=d;A=h}h=(y&1)==0;O3a(a,h?t:z,h?(y&255)>>>1:A)|0;r=c;return a|0}function ko(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=i[a>>0]|0;c=(b&1)==0;if(c)d=(b&255)>>>1;else d=k[a+4>>2]|0;if(!d){e=0;return e|0}if(c){f=a+1|0;g=(b&255)>>>1}else{f=k[a+8>>2]|0;g=k[a+4>>2]|0}if((i[f+g+-1>>0]|0)==47){e=0;return e|0}if(c)h=(b&255)>>>1;else h=k[a+4>>2]|0;L3a(a,47);e=h;return e|0}function lo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+16|0;d=c;e=i[b>>0]|0;if(!(e<<24>>24)){r=c;return a|0}f=i[a>>0]|0;g=(f&1)==0;if(g)h=a+1|0;else h=k[a+8>>2]|0;if(h>>>0<=b>>>0){if(g){j=a+1|0;l=(f&255)>>>1}else{j=k[a+8>>2]|0;l=k[a+4>>2]|0}if((j+l|0)>>>0>b>>>0){q2a(d,b,RLa(b)|0);l=i[d>>0]|0;j=d+8|0;h=k[j>>2]|0;m=d+1|0;if((i[((l&1)==0?m:h)>>0]|0)!=47){n=i[a>>0]|0;o=(n&1)==0;if(o)p=(n&255)>>>1;else p=k[a+4>>2]|0;if(p){if(o){q=a+1|0;s=(n&255)>>>1}else{q=k[a+8>>2]|0;s=k[a+4>>2]|0}if((i[q+s+-1>>0]|0)!=47){x=0;xa(605,a|0,47);s=x;x=0;if(!(s&1)){t=i[d>>0]|0;u=k[j>>2]|0;v=22}}else{t=l;u=h;v=22}}else{t=l;u=h;v=22}}else{t=l;u=h;v=22}if((v|0)==22?(v=(t&1)==0,x=0,Fa(88,a|0,(v?m:u)|0,(v?(t&255)>>>1:k[d+4>>2]|0)|0)|0,t=x,x=0,!(t&1)):0){K2a(d);r=c;return a|0}t=Hc()|0;x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(t|0)}}if(e<<24>>24!=47){if(g)w=(f&255)>>>1;else w=k[a+4>>2]|0;if(w){if(g){y=a+1|0;z=(f&255)>>>1}else{y=k[a+8>>2]|0;z=k[a+4>>2]|0}if((i[y+z+-1>>0]|0)!=47)L3a(a,47)}}J3a(a,b)|0;r=c;return a|0}function mo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+80|0;d=c+60|0;e=c+40|0;f=c+20|0;g=c;oo(d,a);k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=a;h=i[a>>0]|0;if(!(h&1))j=(h&255)>>>1;else j=k[a+4>>2]|0;k[e+16>>2]=j;x=0;xa(629,f|0,b|0);j=x;x=0;a:do if(!(j&1)){k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=b;a=i[b>>0]|0;k[g+16>>2]=(a&1)==0?(a&255)>>>1:k[b+4>>2]|0;x=0;a=db(59,d|0,e|0,f|0,g|0)|0;h=x;x=0;do if(h&1){l=Hc()|0;m=M;x=0;va(1460,g|0);n=x;x=0;if(n&1){o=Hc(0)|0;p=M;Fg(o)}else{q=m;s=l}}else{x=0;va(1460,g|0);l=x;x=0;if(l&1){l=Hc()|0;q=M;s=l;break}x=0;va(1460,f|0);l=x;x=0;if(l&1){t=11;break a}x=0;va(1460,e|0);l=x;x=0;if(l&1){l=Hc()|0;u=M;v=l;break a}else{K2a(d);r=c;return a|0}}while(0);x=0;va(1460,f|0);a=x;x=0;if(a&1){o=Hc(0)|0;p=M;Fg(o)}else{w=q;y=s;t=15}}else t=11;while(0);if((t|0)==11){s=Hc()|0;w=M;y=s;t=15}if((t|0)==15){x=0;va(1460,e|0);e=x;x=0;if(e&1){o=Hc(0)|0;p=M;Fg(o)}else{u=w;v=y}}x=0;va(1460,d|0);d=x;x=0;if(d&1){o=Hc(0)|0;p=M;Fg(o)}else Sc(v|0);return 0}function no(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;e=a+12|0;f=b+12|0;g=a+16|0;h=b+16|0;b=c+12|0;j=d+12|0;l=c+16|0;m=d+16|0;d=a+4|0;n=c+4|0;o=a+8|0;p=a+1|0;q=c+8|0;r=c+1|0;while(1){s=(k[e>>2]|0)==(k[f>>2]|0);if(s?(k[g>>2]|0)==(k[h>>2]|0):0)break;if((k[b>>2]|0)==(k[j>>2]|0)?(k[l>>2]|0)==(k[m>>2]|0):0){t=9;break}u=i[a>>0]|0;v=(u&1)==0;w=v?(u&255)>>>1:k[d>>2]|0;u=i[c>>0]|0;x=(u&1)==0;y=x?(u&255)>>>1:k[n>>2]|0;u=v?p:k[o>>2]|0;v=x?r:k[q>>2]|0;x=y>>>0>>0;z=ZLa(u,v,x?y:w)|0;A=w>>>0>>0;if((((z|0)==0?(A?-2147483648:0):z)|0)<0){B=-1;t=14;break}z=ZLa(v,u,A?w:y)|0;if((((z|0)==0?(x?-2147483648:0):z)|0)<0){B=1;t=14;break}Fo(a);Fo(c)}if((t|0)==9){if(!s){B=1;return B|0}}else if((t|0)==14)return B|0;if(((k[g>>2]|0)==(k[h>>2]|0)?(k[b>>2]|0)==(k[j>>2]|0):0)?(k[l>>2]|0)==(k[m>>2]|0):0){B=0;return B|0}B=(k[g>>2]|0)==(k[h>>2]|0)?-1:1;return B|0}function oo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+16|0;d=c;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=b;e=a+16|0;f=i[b>>0]|0;g=(f&1)==0;h=g?(f&255)>>>1:k[b+4>>2]|0;k[e>>2]=0;a:do if(h){f=h>>>0>1;j=k[b+8>>2]|0;l=b+1|0;m=g?l:j;if((f?(i[m>>0]|0)==47:0)?(i[m+1>>0]|0)==47:0)if((h|0)!=2?(i[m+2>>0]|0)==47:0)n=9;else o=2;else n=9;if((n|0)==9)if((i[m>>0]|0)==47){if(f){p=1;q=0}else{s=0;t=1;break}while(1){if((i[m+p>>0]|0)!=47){s=q;t=1;break a}f=q+1|0;k[e>>2]=f;p=p+1|0;if(p>>>0>=h>>>0){s=f;t=1;break a}else q=f}}else o=0;if(o>>>0>>0){m=g?l:j;f=o;while(1){if((i[m+f>>0]|0)==47){s=0;t=f;break a}u=f+1|0;if(u>>>0>>0)f=u;else{s=0;t=u;break}}}else{s=0;t=o}}else{s=0;t=0}while(0);x=0;pa(48,d|0,b|0,s|0,t|0,b|0);b=x;x=0;do if(!(b&1)){x=0;Ta(493,a|0,d|0)|0;t=x;x=0;if(t&1){t=Hc()|0;s=M;x=0;va(1460,d|0);o=x;x=0;if(!(o&1)){v=s;w=t;y=a;break}z=Hc(0)|0;A=M;Fg(z)}x=0;va(1460,d|0);t=x;x=0;if(!(t&1)){if(b5a(a,317633)|0){r=c;return}x=0;Ta(496,a|0,317633)|0;t=x;x=0;if(!(t&1)){r=c;return}else n=20}else n=20}else n=20;while(0);if((n|0)==20){n=Hc()|0;v=M;w=n;y=a}x=0;va(1460,y|0);y=x;x=0;if(y&1){z=Hc(0)|0;A=M;Fg(z)}else Sc(w|0)}function po(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=b;c=i[b>>0]|0;if(!(c&1)){d=(c&255)>>>1;e=a+16|0;k[e>>2]=d;return}else{d=k[b+4>>2]|0;e=a+16|0;k[e>>2]=d;return}}function qo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!b)return;c=i[a>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+4>>2]|0;if(e>>>0<=b>>>0)return;if(d)f=a+1|0;else f=k[a+8>>2]|0;if((i[f+(b+1)>>0]|0)!=47)return;i4a(a,b,1)|0;return}function ro(a){a=a|0;i4a(a,so(a)|0,-1)|0;return a|0}function so(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=i[a>>0]|0;c=(b&1)==0;if(c){d=(b&255)>>>1;e=Jo(a,(b&255)>>>1)|0}else{f=k[a+4>>2]|0;d=f;e=Jo(a,f)|0}if(!d)g=1;else{if(c)h=a+1|0;else h=k[a+8>>2]|0;g=(i[h+e>>0]|0)!=47}do if((e|0)==2){h=k[a+8>>2]|0;d=a+1|0;f=c?d:h;if((i[f>>0]|0)==47?(i[f+1>>0]|0)==47:0)j=-1;else{l=d;m=h;n=24}}else{if(e>>>0<=3){if(!e){n=25;break}l=a+1|0;m=k[a+8>>2]|0;n=24;break}h=k[a+8>>2]|0;d=a+1|0;f=c?d:h;if(((i[f>>0]|0)==47?(i[f+1>>0]|0)==47:0)?(o=f+2|0,(i[o>>0]|0)!=47):0){p=c?(b&255)>>>1:k[a+4>>2]|0;if(p>>>0<3)q=-1;else{r=f+p|0;p=o;while(1){o=p+1|0;if((o|0)==(r|0)){s=r;break}if((i[o>>0]|0)==47){s=o;break}else p=o}q=(s|0)==(r|0)?-1:s-f|0}j=q>>>0>>0?q:-1}else{l=d;m=h;n=24}}while(0);if((n|0)==24)if((i[(c?l:m)>>0]|0)==47)j=0;else n=25;if((n|0)==25)j=-1;m=a+1|0;l=a+8|0;a=e;while(1){if(!a){t=0;n=32;break}e=a+-1|0;if((e|0)==(j|0)){t=a;n=32;break}if(c)u=m;else u=k[l>>2]|0;if((i[u+e>>0]|0)==47)a=e;else{t=a;n=32;break}}if((n|0)==32)return (g|((j|0)!=0|(t|0)!=1)?t:-1)|0;return 0}function to(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+16|0;d=c;e=i[a>>0]|0;if(!(e&1))f=(e&255)>>>1;else f=k[a+4>>2]|0;uo(d,a);e=i[d>>0]|0;x=0;Fa(101,a|0,f-((e&1)==0?(e&255)>>>1:k[d+4>>2]|0)|0,-1)|0;e=x;x=0;if(e&1){e=Hc()|0;x=0;va(1460,d|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(e|0)}K2a(d);d=i[b>>0]|0;e=(d&1)==0;f=b+4|0;g=k[f>>2]|0;if(!((e?(d&255)>>>1:g)|0)){r=c;return a|0}h=b+8|0;j=k[h>>2]|0;l=b+1|0;if((i[(e?l:j)>>0]|0)==46){m=d;n=j;o=g}else{L3a(a,46);m=i[b>>0]|0;n=k[h>>2]|0;o=k[f>>2]|0}f=(m&1)==0;O3a(a,f?l:n,f?(m&255)>>>1:o)|0;r=c;return a|0}function uo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;Ao(d,b);do if((i[1112]|0)==0?(Bb(1112)|0)!=0:0){x=0;fb(140,22512,324339,1);b=x;x=0;if(b&1){b=Hc()|0;e=M;Cd(1112);f=e;g=b;break}else{Kc(1112);h=6;break}}else h=6;while(0);a:do if((h|0)==6){x=0;b=Ta(502,d|0,22512)|0;e=x;x=0;do if(!(e&1)){if(b){do if((i[1120]|0)==0?(Bb(1120)|0)!=0:0){x=0;fb(140,22524,280504,2);j=x;x=0;if(j&1){j=Hc()|0;l=M;Cd(1120);f=l;g=j;break a}else{Kc(1120);break}}while(0);x=0;j=Ta(502,d|0,22524)|0;l=x;x=0;if(l&1)break;if(j){j=I4a(d,46,-1)|0;if((j|0)==-1){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;m=d;K2a(m);r=c;return}else{l=((i[d>>0]&1)==0?d+1|0:k[d+8>>2]|0)+j|0;j=RLa(l)|0;x=0;fb(140,a|0,l|0,j|0);j=x;x=0;if(j&1)break;else m=d;K2a(m);r=c;return}}};k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;m=d;K2a(m);r=c;return}while(0);b=Hc()|0;f=M;g=b}while(0);x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(g|0)}function vo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+32|0;d=c+12|0;e=c;wo(a,b);x=0;xa(626,d|0,b|0);f=x;x=0;do if(!(f&1)?(g=i[d>>0]|0,h=k[d+4>>2]|0,x=0,va(1460,d|0),j=x,x=0,!(j&1)):0){if(!(((g&1)==0?(g&255)>>>1:h)|0)){r=c;return}x=0;xa(626,e|0,b|0);h=x;x=0;if(!(h&1)){x=0;Ta(484,a|0,((i[e>>0]&1)==0?e+1|0:k[e+8>>2]|0)|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=M;x=0;va(1460,e|0);j=x;x=0;if(!(j&1)){l=g;m=h;n=a;break}o=Hc(0)|0;p=M;Fg(o)}else{x=0;va(1460,e|0);h=x;x=0;if(h&1){q=7;break}r=c;return}}else q=7}else q=7;while(0);if((q|0)==7){q=Hc()|0;l=M;m=q;n=a}x=0;va(1460,n|0);n=x;x=0;if(n&1){o=Hc(0)|0;p=M;Fg(o)}else Sc(m|0)}function wo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c;oo(d,b);e=i[b>>0]|0;if(!(e&1))f=(e&255)>>>1;else f=k[b+4>>2]|0;if((((k[d+16>>2]|0)!=(f|0)?(f=i[d>>0]|0,b=(f&1)==0,(b?(f&255)>>>1:k[d+4>>2]|0)>>>0>1):0)?(f=b?d+1|0:k[d+8>>2]|0,(i[f>>0]|0)==47):0)?(i[f+1>>0]|0)==47:0){x=0;xa(604,a|0,d|0);f=x;x=0;if(!(f&1)){g=d;K2a(g);r=c;return}f=Hc()|0;x=0;va(1460,d|0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else Sc(f|0)};k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;g=d;K2a(g);r=c;return}function xo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=i[b>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[b+4>>2]|0;do if((e|0)==2){f=k[b+8>>2]|0;g=b+1|0;h=d?g:f;if((i[h>>0]|0)==47?(i[h+1>>0]|0)==47:0)j=19;else{l=g;m=f;j=18}}else{if(e>>>0<=3){if(!e){j=19;break}l=b+1|0;m=k[b+8>>2]|0;j=18;break}f=k[b+8>>2]|0;g=b+1|0;h=d?g:f;if(((i[h>>0]|0)==47?(i[h+1>>0]|0)==47:0)?(n=h+2|0,(i[n>>0]|0)!=47):0){o=d?(c&255)>>>1:k[b+4>>2]|0;if(o>>>0>=3){p=h+o|0;o=n;while(1){n=o+1|0;if((n|0)==(p|0)){q=p;break}if((i[n>>0]|0)==47){q=n;break}else o=n}o=(q|0)==(p|0)?-1:q-h|0;if(!(o>>>0>=e>>>0|(o|0)==-1)){r=o;s=f;j=20}else j=19}else j=19}else{l=g;m=f;j=18}}while(0);if((j|0)==18)if((i[(d?l:m)>>0]|0)==47){r=0;s=m;j=20}else j=19;if((j|0)==19){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}else if((j|0)==20){Ko(a,d?b+1+r|0:s+r|0,(d?b+1|0:s)+r+1|0);return}}function yo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c;oo(d,b);e=d+16|0;f=d+8|0;g=d+1|0;h=b+4|0;while(1){j=k[e>>2]|0;l=i[b>>0]|0;m=(l&1)==0;if(m)n=(l&255)>>>1;else n=k[h>>2]|0;if((j|0)==(n|0)){o=j;p=m;q=11;break}if((i[((i[d>>0]&1)==0?g:k[f>>2]|0)>>0]|0)!=47){o=j;p=m;q=11;break}x=0;va(1468,d|0);m=x;x=0;if(m&1){q=8;break}}do if((q|0)==8){f=Hc()|0;s=f;t=M}else if((q|0)==11){if(p)u=b+1|0;else u=k[b+8>>2]|0;f=u+o|0;g=RLa(f)|0;x=0;fb(140,a|0,f|0,g|0);g=x;x=0;if(g&1){g=Hc()|0;s=g;t=M;break}else{K2a(d);r=c;return}}while(0);x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(s|0)}function zo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=so(b)|0;if((c|0)==-1){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}if(!(i[b>>0]&1)){d=b+1|0;e=b+1|0}else{f=k[b+8>>2]|0;d=f;e=f}Ko(a,e,d+c|0);return}function Ao(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=i[b>>0]|0;d=(c&1)==0;if(d){e=(c&255)>>>1;f=Jo(b,(c&255)>>>1)|0}else{g=k[b+4>>2]|0;e=g;f=Jo(b,g)|0}a:do if((f|0)!=0&(e|0)!=0){if(d)h=b+1|0;else h=k[b+8>>2]|0;if((i[h+f>>0]|0)==47){g=d?b+1|0:k[b+8>>2]|0;j=f;while(1){if(!j)break a;l=j+-1|0;if((i[g+l>>0]|0)==47)j=l;else{m=j;break}}if((m>>>0>=3?(i[g>>0]|0)==47:0)?(i[g+1>>0]|0)==47:0){j=d?(c&255)>>>1:k[b+4>>2]|0;if(j>>>0<3)n=-1;else{l=g+j|0;j=g+2|0;while(1){if((i[j>>0]|0)==47){o=j;break}j=j+1|0;if((j|0)==(l|0)){o=l;break}}n=(o|0)==(l|0)?-1:o-g|0}if((n|0)==(m|0))break}do if((i[1112]|0)==0?(Bb(1112)|0)!=0:0){x=0;fb(140,22512,324339,1);j=x;x=0;if(j&1){j=Hc()|0;Cd(1112);Sc(j|0)}else{Kc(1112);break}}while(0);n2a(a,22512);return}}while(0);if(d)p=b+1|0;else p=k[b+8>>2]|0;b=p+f|0;q2a(a,b,RLa(b)|0);return}function Bo(){var a=0;if(i[1112]|0)return 22512;if(!(Bb(1112)|0))return 22512;x=0;fb(140,22512,324339,1);a=x;x=0;if(a&1){a=Hc()|0;Cd(1112);Sc(a|0)}Kc(1112);return 22512}function Co(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;Ao(d,b);do if((i[1112]|0)==0?(Bb(1112)|0)!=0:0){x=0;fb(140,22512,324339,1);b=x;x=0;if(b&1){b=Hc()|0;e=M;Cd(1112);f=e;g=b;break}else{Kc(1112);h=6;break}}else h=6;while(0);a:do if((h|0)==6){x=0;b=Ta(502,d|0,22512)|0;e=x;x=0;do if(!(e&1)){if(b){do if((i[1120]|0)==0?(Bb(1120)|0)!=0:0){x=0;fb(140,22524,280504,2);j=x;x=0;if(j&1){j=Hc()|0;l=M;Cd(1120);f=l;g=j;break a}else{Kc(1120);break}}while(0);x=0;j=Ta(502,d|0,22524)|0;l=x;x=0;if(l&1)break;if(j){j=I4a(d,46,-1)|0;if((j|0)==-1){x=0;xa(604,a|0,d|0);l=x;x=0;if(l&1)break;else m=d;K2a(m);r=c;return}else{l=(i[d>>0]&1)==0?d+1|0:k[d+8>>2]|0;x=0;fb(167,a|0,l|0,l+j|0);j=x;x=0;if(j&1)break;else m=d;K2a(m);r=c;return}}}x=0;xa(604,a|0,d|0);j=x;x=0;if(!(j&1)){m=d;K2a(m);r=c;return}}while(0);b=Hc()|0;f=M;g=b}while(0);x=0;va(1460,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(g|0)}function Do(){var a=0;if(i[1120]|0)return 22524;if(!(Bb(1120)|0))return 22524;x=0;fb(140,22524,280504,2);a=x;x=0;if(a&1){a=Hc()|0;Cd(1120);Sc(a|0)}Kc(1120);return 22524}function Eo(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0;b=r;r=r+144|0;c=b+124|0;d=b+104|0;e=b+84|0;f=b+64|0;g=b+44|0;h=b+32|0;j=b;l=b+12|0;m=i[a>>0]|0;if(!(m&1))n=(m&255)>>>1;else n=k[a+4>>2]|0;if(!n){r=b;return a|0};k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(629,d|0,a|0);n=x;x=0;a:do if(!(n&1)){k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;m=e+12|0;k[m>>2]=a;o=i[a>>0]|0;if(!(o&1))p=(o&255)>>>1;else p=k[a+4>>2]|0;o=e+16|0;k[o>>2]=p;x=0;xa(604,f|0,e|0);q=x;x=0;b:do if(!(q&1)){s=f+12|0;t=m;u=k[t+4>>2]|0;v=s;k[v>>2]=k[t>>2];k[v+4>>2]=u;x=0;va(1469,e|0);u=x;x=0;if(u&1){u=Hc()|0;v=M;x=0;va(1460,f|0);t=x;x=0;if(!(t&1)){w=v;y=u;z=21;break}u=Hc(0)|0;Fg(u)}x=0;xa(604,g|0,d|0);u=x;x=0;c:do if(!(u&1)){v=g+12|0;t=d+12|0;A=t;B=k[A>>2]|0;C=k[A+4>>2]|0;A=v;k[A>>2]=B;k[A+4>>2]=C;C=g+16|0;A=f+16|0;D=g+4|0;E=g+8|0;F=g+1|0;G=d+16|0;H=c+4|0;I=h+4|0;J=h+8|0;K=h+1|0;L=l+12|0;N=l+16|0;O=c+8|0;P=c+1|0;Q=B;d:while(1){if((Q|0)==(k[s>>2]|0)?(k[C>>2]|0)==(k[A>>2]|0):0){z=17;break}B=i[g>>0]|0;R=(B&1)==0;S=R?(B&255)>>>1:k[D>>2]|0;do if((S|0)==1?(i[(R?F:k[E>>2]|0)>>0]|0)==46:0){if((Q|0)==(k[t>>2]|0)?(k[C>>2]|0)==(k[G>>2]|0):0){z=31;break}if((Q|0)==(k[m>>2]|0)?(k[C>>2]|0)==(k[o>>2]|0):0)z=31}else z=31;while(0);do if((z|0)==31){z=0;B=i[c>>0]|0;if((((S|0)==2?(((B&1)==0?(B&255)>>>1:k[H>>2]|0)|0)!=0:0)?(B=R?F:k[E>>2]|0,(i[B>>0]|0)==46):0)?(i[B+1>>0]|0)==46:0){x=0;xa(635,j|0,c|0);B=x;x=0;if(B&1){z=24;break d}x=0;xa(604,h|0,j|0);B=x;x=0;if(B&1){z=58;break d}x=0;va(1460,j|0);B=x;x=0;if(B&1){z=24;break d}B=i[h>>0]|0;T=(B&1)==0;e:do switch((T?(B&255)>>>1:k[I>>2]|0)|0){case 0:{U=0;break}case 1:{if((i[(T?K:k[J>>2]|0)>>0]&-2)<<24>>24==46)U=0;else z=41;break}case 2:{V=T?K:k[J>>2]|0;if((i[V>>0]|0)==46){U=0;break e}if((i[V+1>>0]|0)==46)U=0;else z=41;break}default:z=41}while(0);if((z|0)==41){z=0;T=so(c)|0;x=0;Fa(101,c|0,T|0,-1)|0;T=x;x=0;if(T&1){z=59;break d}T=i[c>>0]|0;B=(T&1)==0;V=B?(T&255)>>>1:k[H>>2]|0;do if(V){T=V+-1|0;W=B?P:k[O>>2]|0;if((i[W+T>>0]|0)!=47)break;do if((V|0)==2){if((i[W>>0]|0)!=47)break;if((i[W+1>>0]|0)!=47){X=0;z=56}}else{Y=(i[W>>0]|0)==47;if(V>>>0<=3)if(Y){X=0;z=56;break}else break;if(!Y)break;if((i[W+1>>0]|0)!=47){X=0;z=56;break}Y=W+2|0;if((i[Y>>0]|0)==47){X=0;z=56;break}Z=W+V|0;_=Y;while(1){Y=_+1|0;if((Y|0)==(Z|0)){$=Z;break}if((i[Y>>0]|0)==47){$=Y;break}else _=Y}_=($|0)==(Z|0)?-1:$-W|0;if(!(_>>>0>=V>>>0|(_|0)==-1)){X=_;z=56}}while(0);if((z|0)==56?(z=0,(X|0)==(T|0)):0)break;x=0;Fa(101,c|0,T|0,-1)|0;W=x;x=0;if(W&1){z=59;break d}}while(0);x=0;xa(604,l|0,g|0);V=x;x=0;if(V&1){z=59;break d}V=v;B=k[V+4>>2]|0;W=L;k[W>>2]=k[V>>2];k[W+4>>2]=B;B=i[c>>0]|0;do if(!(((B&1)==0?(B&255)>>>1:k[H>>2]|0)|0)){x=0;va(1468,l|0);W=x;x=0;if(W&1){z=80;break d}W=k[L>>2]|0;if((W|0)==(k[s>>2]|0)){if(!((W|0)==(k[m>>2]|0)?(k[N>>2]|0)!=(k[A>>2]|0):0))break}else if((W|0)!=(k[m>>2]|0))break;if((k[N>>2]|0)!=(k[o>>2]|0))break;do if(!(i[1112]|0)){if(!(Bb(1112)|0))break;x=0;fb(140,22512,324339,1);W=x;x=0;if(W&1){z=71;break d}Kc(1112)}while(0);x=0;T=Ta(502,e|0,22512)|0;W=x;x=0;if(W&1){z=80;break d}if(T)break;do if(!(i[1112]|0)){if(!(Bb(1112)|0))break;x=0;fb(140,22512,324339,1);T=x;x=0;if(T&1){z=78;break d}Kc(1112)}while(0);x=0;Ta(501,c|0,22512)|0;T=x;x=0;if(T&1){z=80;break d}}while(0);x=0;va(1460,l|0);B=x;x=0;if(B&1){z=59;break d}U=4}x=0;va(1460,h|0);B=x;x=0;if(B&1){z=24;break d}if(U)break}x=0;Ta(501,c|0,g|0)|0;B=x;x=0;if(B&1){z=24;break d}}while(0);x=0;va(1468,g|0);R=x;x=0;if(R&1){z=24;break}Q=k[v>>2]|0}if((z|0)==17){x=0;va(1460,g|0);v=x;x=0;if(v&1){z=22;break}v=i[c>>0]|0;if(!(((v&1)==0?(v&255)>>>1:k[H>>2]|0)|0)){do if((i[1112]|0)==0?(Bb(1112)|0)!=0:0){x=0;fb(140,22512,324339,1);v=x;x=0;if(v&1){v=Hc()|0;Q=M;Cd(1112);aa=Q;ba=v;z=23;break c}else{Kc(1112);break}}while(0);x=0;Ta(501,c|0,22512)|0;H=x;x=0;if(H&1){z=22;break}}x=0;Ta(493,a|0,c|0)|0;H=x;x=0;if(H&1){z=22;break}x=0;va(1460,f|0);H=x;x=0;if(H&1){z=20;break b}x=0;va(1460,e|0);H=x;x=0;if(H&1){H=Hc()|0;ca=M;da=H;ea=d;break b}x=0;va(1460,d|0);H=x;x=0;if(H&1){z=18;break a}K2a(c);r=b;return a|0}else if((z|0)==24){H=Hc()|0;fa=M;ga=H}else if((z|0)==58){H=Hc()|0;v=M;x=0;va(1460,j|0);Q=x;x=0;if(Q&1){ha=Hc(0)|0;ia=M;Fg(ha)}else{fa=v;ga=H}}else if((z|0)==59){H=Hc()|0;ja=M;ka=H;z=86}else if((z|0)==71){H=Hc()|0;v=M;Cd(1112);la=v;ma=H;z=81}else if((z|0)==78){H=Hc()|0;v=M;Cd(1112);la=v;ma=H;z=81}else if((z|0)==80){H=Hc()|0;la=M;ma=H;z=81}if((z|0)==81){x=0;va(1460,l|0);H=x;x=0;if(H&1){ha=Hc(0)|0;ia=M;Fg(ha)}else{ja=la;ka=ma;z=86}}if((z|0)==86){x=0;va(1460,h|0);H=x;x=0;if(H&1){ha=Hc(0)|0;ia=M;Fg(ha)}else{fa=ja;ga=ka}}x=0;va(1460,g|0);H=x;x=0;if(H&1){ha=Hc(0)|0;ia=M;Fg(ha)}else{na=fa;oa=ga}}else z=22;while(0);if((z|0)==22){s=Hc()|0;aa=M;ba=s;z=23}if((z|0)==23){na=aa;oa=ba}x=0;va(1460,f|0);s=x;x=0;if(s&1){ha=Hc(0)|0;ia=M;Fg(ha)}else{pa=na;qa=oa;z=103}}else z=20;while(0);if((z|0)==20){o=Hc()|0;w=M;y=o;z=21}if((z|0)==21){pa=w;qa=y;z=103}do if((z|0)==103){x=0;va(1460,e|0);o=x;x=0;if(o&1){ha=Hc(0)|0;ia=M;Fg(ha)}else{ca=pa;da=qa;ea=d;break}}while(0);x=0;va(1460,ea|0);o=x;x=0;if(o&1){ha=Hc(0)|0;ia=M;Fg(ha)}else{ra=ca;sa=da}}else z=18;while(0);if((z|0)==18){z=Hc()|0;ra=M;sa=z}x=0;va(1460,c|0);c=x;x=0;if(c&1){ha=Hc(0)|0;ia=M;Fg(ha)}else Sc(sa|0);return 0}function Fo(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;b=r;r=r+16|0;c=b;d=i[a>>0]|0;e=(d&1)==0;f=a+4|0;g=e?(d&255)>>>1:k[f>>2]|0;d=a+16|0;h=g+(k[d>>2]|0)|0;k[d>>2]=h;j=k[a+12>>2]|0;l=i[j>>0]|0;m=(l&1)==0;if(m)n=(l&255)>>>1;else n=k[j+4>>2]|0;if((h|0)==(n|0))if(e){i[a+1>>0]=0;i[a>>0]=0;r=b;return}else{i[k[a+8>>2]>>0]=0;k[f>>2]=0;r=b;return}if((g>>>0>2?(g=e?a+1|0:k[a+8>>2]|0,(i[g>>0]|0)==47):0)?(i[g+1>>0]|0)==47:0)o=(i[g+2>>0]|0)!=47;else o=0;if(m)p=j+1|0;else p=k[j+8>>2]|0;a:do if((i[p+h>>0]|0)==47){if(o){T2a(a,47)|0;r=b;return}m=j+1|0;g=j+8|0;e=j+4|0;f=l;n=h;while(1){q=(f&1)==0;if(q)s=(f&255)>>>1;else s=k[e>>2]|0;if((n|0)==(s|0)){t=f;u=n;v=q;break}if(q)w=m;else w=k[g>>2]|0;if((i[w+n>>0]|0)!=47){t=f;u=n;v=q;break}q=n+1|0;k[d>>2]=q;f=i[j>>0]|0;n=q}if(v)y=(t&255)>>>1;else y=k[j+4>>2]|0;if((u|0)==(y|0)){n=u+-1|0;f=v?j+1|0:k[j+8>>2]|0;g=n;while(1){if(!g){z=t;A=u;break a}m=g+-1|0;if((i[f+m>>0]|0)==47)g=m;else{B=g;break}}if((B>>>0>=3?(i[f>>0]|0)==47:0)?(i[f+1>>0]|0)==47:0){g=v?(t&255)>>>1:k[j+4>>2]|0;if(g>>>0<3)C=-1;else{m=f+g|0;g=f+2|0;while(1){if((i[g>>0]|0)==47){D=g;break}g=g+1|0;if((g|0)==(m|0)){D=m;break}}C=(D|0)==(m|0)?-1:D-f|0}if((C|0)==(B|0)){z=t;A=u;break}}k[d>>2]=n;do if((i[1112]|0)==0?(Bb(1112)|0)!=0:0){x=0;fb(140,22512,324339,1);g=x;x=0;if(g&1){g=Hc()|0;Cd(1112);Sc(g|0)}else{Kc(1112);break}}while(0);M2a(a,22512)|0;r=b;return}else{z=t;A=u}}else{z=l;A=h}while(0);h=(z&1)==0;if(h){E=(z&255)>>>1;F=j+1|0}else{E=k[j+4>>2]|0;F=k[j+8>>2]|0}b:do if(E>>>0>A>>>0?(l=F+E|0,(E|0)!=(A|0)):0){u=F+A|0;while(1){if((i[u>>0]|0)==47){G=u;break}u=u+1|0;if((u|0)==(l|0)){H=58;break b}}u=G-F|0;if(!((G|0)==(l|0)|(u|0)==-1))I=u;else H=58}else H=58;while(0);do if((H|0)==58)if(h){I=(z&255)>>>1;break}else{I=k[j+4>>2]|0;break}while(0);F2a(c,j,A,I-A|0,j);x=0;Ta(493,a|0,c|0)|0;a=x;x=0;if(!(a&1)){K2a(c);r=b;return}b=Hc()|0;x=0;va(1460,c|0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else Sc(b|0)}function Go(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;b=r;r=r+16|0;c=b;d=a+16|0;e=k[d>>2]|0;f=k[a+12>>2]|0;g=i[f>>0]|0;h=(g&1)==0;if(h)j=(g&255)>>>1;else j=k[f+4>>2]|0;a:do if((e|0)==(j|0)){if(h)l=(g&255)>>>1;else l=k[f+4>>2]|0;if(l>>>0>1){m=e+-1|0;if(h)n=f+1|0;else n=k[f+8>>2]|0;if((i[n+m>>0]|0)==47){o=h?f+1|0:k[f+8>>2]|0;p=m;while(1){if(!p)break a;q=p+-1|0;if((i[o+q>>0]|0)==47)p=q;else{s=p;break}}if((s>>>0>=3?(i[o>>0]|0)==47:0)?(i[o+1>>0]|0)==47:0){p=h?(g&255)>>>1:k[f+4>>2]|0;if(p>>>0<3)t=-1;else{q=o+p|0;p=o+2|0;while(1){if((i[p>>0]|0)==47){u=p;break}p=p+1|0;if((p|0)==(q|0)){u=q;break}}t=(u|0)==(q|0)?-1:u-o|0}if((t|0)==(s|0))break}k[d>>2]=m;do if((i[1112]|0)==0?(Bb(1112)|0)!=0:0){x=0;fb(140,22512,324339,1);p=x;x=0;if(p&1){p=Hc()|0;Cd(1112);Sc(p|0)}else{Kc(1112);break}}while(0);M2a(a,22512)|0;r=b;return}}}while(0);do if((e|0)==2){s=k[f+8>>2]|0;t=f+1|0;u=h?t:s;if((i[u>>0]|0)==47?(i[u+1>>0]|0)==47:0)v=-1;else{w=t;y=s;z=46}}else{if(e>>>0<=3){if(!e){z=47;break}w=f+1|0;y=k[f+8>>2]|0;z=46;break}s=k[f+8>>2]|0;t=f+1|0;u=h?t:s;if(((i[u>>0]|0)==47?(i[u+1>>0]|0)==47:0)?(n=u+2|0,(i[n>>0]|0)!=47):0){l=h?(g&255)>>>1:k[f+4>>2]|0;if(l>>>0<3)A=-1;else{j=u+l|0;l=n;while(1){n=l+1|0;if((n|0)==(j|0)){B=j;break}if((i[n>>0]|0)==47){B=n;break}else l=n}A=(B|0)==(j|0)?-1:B-u|0}v=A>>>0>>0?A:-1}else{w=t;y=s;z=46}}while(0);if((z|0)==46)if((i[(h?w:y)>>0]|0)==47)v=0;else z=47;if((z|0)==47)v=-1;z=f+1|0;y=f+8|0;w=e;while(1){if(!w){C=0;break}e=w+-1|0;if((e|0)==(v|0)){C=w;break}if(h)D=z;else D=k[y>>2]|0;if((i[D+e>>0]|0)==47)w=e;else{C=w;break}}w=Jo(f,C)|0;k[d>>2]=w;F2a(c,f,w,C-w|0,f);x=0;Ta(493,a|0,c|0)|0;f=x;x=0;if(f&1){f=Hc()|0;x=0;va(1460,c|0);w=x;x=0;if(w&1){w=Hc(0)|0;Fg(w)}else Sc(f|0)}K2a(c);if(b5a(a,317633)|0){r=b;return}S2a(a,317633)|0;r=b;return}function Ho(){var a=0,b=0,c=0;a=r;r=r+16|0;b=a;do if((i[1128]|0)==0?(Bb(1128)|0)!=0:0){x=0;xa(636,b|0,329672);c=x;x=0;if(c&1){c=Hc()|0;Cd(1128);Sc(c|0)}else{k[5634]=k[b>>2];Kc(1128);break}}while(0);b=lqb(22536,74336)|0;r=a;return b|0}function Io(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b+4|0;d=b;do if((i[1128]|0)==0?(Bb(1128)|0)!=0:0){x=0;xa(636,c|0,329672);e=x;x=0;if(e&1){e=Hc()|0;Cd(1128);Sc(e|0)}else{k[5634]=k[c>>2];Kc(1128);break}}while(0);_pb(d,22536);if(i[1128]|0){aqb(22536,a)|0;f=k[d>>2]|0;r=b;return f|0}if(!(Bb(1128)|0)){aqb(22536,a)|0;f=k[d>>2]|0;r=b;return f|0}x=0;xa(636,c|0,329672);e=x;x=0;if(!(e&1)){k[5634]=k[c>>2];Kc(1128);aqb(22536,a)|0;f=k[d>>2]|0;r=b;return f|0}f=Hc()|0;Cd(1128);x=0;va(1470,d|0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(f|0);return 0}function Jo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;switch(b|0){case 2:{c=i[a>>0]|0;d=k[a+8>>2]|0;e=a+1|0;f=(c&1)==0?e:d;if((i[f>>0]|0)==47?(i[f+1>>0]|0)==47:0){g=0;return g|0}else{h=e;j=c;m=d;n=6}break}case 0:{o=a+1|0;p=-1;q=i[a>>0]|0;r=k[a+8>>2]|0;break}default:{h=a+1|0;j=i[a>>0]|0;m=k[a+8>>2]|0;n=6}}if((n|0)==6){d=b+-1|0;if((i[((j&1)==0?h:m)+d>>0]|0)==47){g=d;return g|0}else{o=h;p=d;q=j;r=m}}m=(q&1)==0;j=m?o:r;r=m?(q&255)>>>1:k[a+4>>2]|0;a=j;q=j+(r>>>0>p>>>0?b:r)|0;while(1){if((q|0)==(j|0)){g=0;n=13;break}r=q+-1|0;if(!(_Ma(317633,l[r>>0]|0,1)|0))q=r;else{s=r;break}}if((n|0)==13)return g|0;q=s-a|0;switch(q|0){case 1:{n=11;break}case -1:{g=0;return g|0}default:{}}if((n|0)==11?(i[j>>0]|0)==47:0){g=0;return g|0}g=q+1|0;return g|0}function Ko(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+16|0;e=d;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;if((b|0)==(c|0)){r=d;return}f=c-b|0;if(f>>>0>4294967279){x=0;va(1471,e|0);g=x;x=0;if(g&1)h=24;else h=6}else if(f>>>0<11){i[e>>0]=f<<1;j=e+1|0;h=8}else h=6;if((h|0)==6){g=f+16&-16;x=0;l=Ba(563,g|0)|0;m=x;x=0;if(m&1)h=24;else{k[e+8>>2]=l;k[e>>2]=g|1;k[e+4>>2]=f;j=l;h=8}}a:do if((h|0)==8){l=b;g=j;while(1){i[g>>0]=i[l>>0]|0;l=l+1|0;if((l|0)==(c|0))break;else g=g+1|0}i[j+f>>0]=0;g=i[e>>0]|0;l=(g&1)==0;m=l?e+1|0:k[e+8>>2]|0;n=l?(g&255)>>>1:k[e+4>>2]|0;g=m+n|0;l=m;o=i[a>>0]|0;if(!(o&1)){p=(o&255)>>>1;q=10;s=o}else{o=k[a>>2]|0;p=k[a+4>>2]|0;q=(o&-2)+-1|0;s=o&255}do if(n){do if((q-p|0)>>>0>>0){x=0;Pa(42,a|0,q|0,p+n-q|0,p|0,p|0,0,0);o=x;x=0;if(!(o&1)){t=i[a>>0]|0;break}o=Hc()|0;u=M;x=0;va(1460,e|0);v=x;x=0;if(!(v&1)){w=u;y=o;break a}z=Hc(0)|0;A=M;Fg(z)}else t=s;while(0);o=(t&1)==0?a+1|0:k[a+8>>2]|0;u=p-l|0;v=m;B=o+p|0;while(1){i[B>>0]=i[v>>0]|0;v=v+1|0;if((v|0)==(g|0))break;else B=B+1|0}i[o+(g+u)>>0]=0;B=p+n|0;if(!(i[a>>0]&1)){i[a>>0]=B<<1;break}else{k[a+4>>2]=B;break}}while(0);x=0;va(1460,e|0);n=x;x=0;if(n&1)h=24;else{r=d;return}}while(0);if((h|0)==24){h=Hc()|0;w=M;y=h}x=0;va(1460,a|0);a=x;x=0;if(a&1){z=Hc(0)|0;A=M;Fg(z)}else Sc(y|0)}function Lo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+1024|0;f=e;if(!b)g=a+(RLa(a)|0)|0;else g=b;if((g|0)==(a|0)){r=e;return}b=(g-a|0)*3|0;if(b>>>0<=256){No(a,g,f,f+1024|0,c,d);r=e;return}f=MBa(b>>>0>1073741823?-1:b<<2)|0;x=0;La(53,a|0,g|0,f|0,f+(b<<2)|0,c|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;QBa(f);Sc(d|0)}QBa(f);r=e;return}function Mo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+256|0;f=e;if(!b)g=a+(($La(a)|0)<<2)|0;else g=b;if((g|0)==(a|0)){r=e;return}b=g-a+4|0;if(b>>>0<=256){Oo(a,g,f,f+256|0,c,d);r=e;return}f=MBa(b)|0;x=0;La(54,a|0,g|0,f|0,f+b|0,c|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;QBa(f);Sc(d|0)}QBa(f);r=e;return}function No(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g;i=g+8|0;j=h;k[j>>2]=0;k[j+4>>2]=0;j=lg[k[(k[f>>2]|0)+16>>2]&127](f,h,a,b,g+12|0,c,d,i)|0;if(!j){Po(e,c,k[i>>2]|0)|0;r=g;return}g=Rd(28)|0;x=0;i=$a(46)|0;c=x;x=0;if(c&1){l=Hc()|0;m=M;Fc(g|0);Sc(l|0)}x=0;xa(616,g|0,208911);c=x;x=0;if(c&1){l=Hc()|0;m=M;Fc(g|0);Sc(l|0)}else{k[g>>2]=21312;k[g+8>>2]=j;k[g+12>>2]=i;i=g+16|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;Gf(g|0,416,88)}}function Oo(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;g=r;r=r+16|0;h=g;j=g+8|0;l=h;k[l>>2]=0;k[l+4>>2]=0;l=lg[k[(k[f>>2]|0)+12>>2]&127](f,h,a,b,g+12|0,c,d,j)|0;if(l){d=Rd(28)|0;x=0;b=$a(46)|0;a=x;x=0;if(a&1){m=Hc()|0;n=M;Fc(d|0);Sc(m|0)}x=0;xa(616,d|0,208869);a=x;x=0;if(a&1){m=Hc()|0;n=M;Fc(d|0);Sc(m|0)}else{k[d>>2]=21312;k[d+8>>2]=l;k[d+12>>2]=b;b=d+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;Gf(d|0,416,88)}}d=k[j>>2]|0;j=c;b=i[e>>0]|0;if(!(b&1)){o=(b&255)>>>1;p=10;q=b}else{b=k[e>>2]|0;o=k[e+4>>2]|0;p=(b&-2)+-1|0;q=b&255}b=d-j|0;if((d|0)==(c|0)){r=g;return}if((p-o|0)>>>0>>0){S3a(e,p,o+b-p|0,o,o,0,0);s=i[e>>0]|0}else s=q;q=(s&1)==0?e+1|0:k[e+8>>2]|0;s=d+(o-j)|0;j=c;c=q+o|0;while(1){i[c>>0]=i[j>>0]|0;j=j+1|0;if((j|0)==(d|0))break;else c=c+1|0}i[q+s>>0]=0;s=o+b|0;if(!(i[e>>0]&1)){i[e>>0]=s<<1;r=g;return}else{k[e+4>>2]=s;r=g;return}}function Po(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=b;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=1;h=e}else{e=k[a>>2]|0;f=k[a+4>>2]|0;g=(e&-2)+-1|0;h=e&255}e=c-d>>2;if(!e)return a|0;if((g-f|0)>>>0>>0){W6a(a,g,f+e-g|0,f,f,0,0);j=i[a>>0]|0}else j=h;if(!(j&1))l=a+4|0;else l=k[a+8>>2]|0;j=l+(f<<2)|0;if((b|0)==(c|0))m=j;else{h=f+((c+-4-d|0)>>>2)+1|0;d=b;b=j;while(1){k[b>>2]=k[d>>2];d=d+4|0;if((d|0)==(c|0))break;else b=b+4|0}m=l+(h<<2)|0}k[m>>2]=0;m=f+e|0;if(!(i[a>>0]&1)){i[a>>0]=m<<1;return a|0}else{k[a+4>>2]=m;return a|0}return 0}function Qo(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;c=(b&1)==0;if(!((c?(b&255)>>>1:k[a+4>>2]|0)|0)){d=0;return d|0}if((i[(c?a+1|0:k[a+8>>2]|0)>>0]|0)==32){d=0;return d|0}d=(E4a(a,47,0)|0)==-1;return d|0}function Ro(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i[a>>0]|0;c=(b&1)==0;d=c?(b&255)>>>1:k[a+4>>2]|0;if(!d){e=0;return e|0}b=c?a+1|0:k[a+8>>2]|0;a=i[22540]|0;c=(a&1)==0;f=c?22541:k[5637]|0;g=c?(a&255)>>>1:k[5636]|0;a=b+d|0;d=b;while(1){if(!(_Ma(f,l[d>>0]|0,g)|0)){h=d;break}d=d+1|0;if((d|0)==(a|0)){e=1;j=6;break}}if((j|0)==6)return e|0;e=(h-b|0)==-1;return e|0}function So(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=i[a>>0]|0;c=(b&1)==0;d=c?(b&255)>>>1:k[a+4>>2]|0;if(!d){e=0;return e|0}b=c?a+1|0:k[a+8>>2]|0;c=i[b>>0]|0;if(c<<24>>24==32){e=0;return e|0}f=i[22552]|0;g=(f&1)==0;h=g?22553:k[5640]|0;j=g?(f&255)>>>1:k[5639]|0;a:do if(j){f=b+d|0;g=h+j|0;l=b;m=c;b:while(1){n=h;do{if(m<<24>>24==(i[n>>0]|0)){o=l;break b}n=n+1|0}while((n|0)!=(g|0));n=l+1|0;if((n|0)==(f|0))break a;l=n;m=i[n>>0]|0}if(!((o|0)==(f|0)|(o-b|0)==-1)){e=0;return e|0}}while(0);o=i[b+d+-1>>0]|0;if(o<<24>>24==32){e=0;return e|0}if(o<<24>>24!=46|(d|0)==1){e=1;return e|0}e=(b5a(a,280504)|0)==0;return e|0}function To(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0;b=i[a>>0]|0;c=a+4|0;if(!(((b&1)==0?(b&255)>>>1:k[c>>2]|0)|0)){d=0;return d|0}if(!(b5a(a,324339)|0)){d=1;return d|0}if(!(b5a(a,280504)|0)){d=1;return d|0}if(!(So(a)|0)){d=0;return d|0}b=i[a>>0]|0;e=(b&1)==0;f=e?(b&255)>>>1:k[c>>2]|0;if(!f){d=0;return d|0}c=e?a+1|0:k[a+8>>2]|0;a=i[22540]|0;e=(a&1)==0;b=e?22541:k[5637]|0;g=e?(a&255)>>>1:k[5636]|0;a=c+f|0;f=c;while(1){if(!(_Ma(b,l[f>>0]|0,g)|0)){h=f;break}f=f+1|0;if((f|0)==(a|0)){j=10;break}}if((j|0)==10){m=i[c>>0]|0;n=m+-45<<24>>24;o=(n&255)>1;return o|0}if((h-c|0)==-1){m=i[c>>0]|0;n=m+-45<<24>>24;o=(n&255)>1;return o|0}else{d=0;return d|0}return 0}function Uo(a){a=a|0;var b=0;if(!(b5a(a,324339)|0)){b=1;return b|0}if(!(b5a(a,280504)|0)){b=1;return b|0}if(!(To(a)|0)){b=0;return b|0}b=(E4a(a,46,0)|0)==-1;return b|0}function Vo(a){a=a|0;var b=0,c=0,d=0;if(!(To(a)|0)){b=0;return b|0}if(!(b5a(a,324339)|0)){b=0;return b|0}if(!(b5a(a,280504)|0)){b=0;return b|0}c=E4a(a,46,0)|0;if((c|0)==-1){b=1;return b|0}if((E4a(a,46,c+1|0)|0)!=-1){b=0;return b|0}d=i[a>>0]|0;b=(c+5|0)>>>0>((d&1)==0?(d&255)>>>1:k[a+4>>2]|0)>>>0;return b|0}function Wo(){q2a(22552,208954,39);q2a(22540,208993,65);return}function Xo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;d=r;r=r+64|0;e=d+24|0;f=d+16|0;g=d+8|0;h=d;j=d+28|0;l=d+40|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;m=i[b>>0]|0;n=(m&1)==0;o=n?(m&255)>>>1:k[b+4>>2]|0;do if(o){m=n?b+1|0:k[b+8>>2]|0;x=0;p=$a(47)|0;q=x;x=0;if(!(q&1)?(x=0,nb(89,m|0,m+o|0,j|0,p|0),p=x,x=0,!(p&1)):0){p=j+4|0;s=p;t=i[j>>0]|0;u=k[p>>2]|0;break}p=Hc()|0;x=0;va(1472,j|0);m=x;x=0;if(m&1){m=Hc(0)|0;Fg(m)}else Sc(p|0)}else{s=j+4|0;t=0;u=0}while(0);o=l;b=209059;n=o+16|0;do{i[o>>0]=i[b>>0]|0;o=o+1|0;b=b+1|0}while((o|0)<(n|0));a:do if(((t&1)==0?(t&255)>>>1:u)|0){b=j+8|0;o=c+4|0;n=k[b>>2]|0;if(c){p=n;m=u;q=t;v=0;w=32;b:while(1){if((k[((q&1)==0?s:p)+(v<<2)>>2]|0)==37){if((w|0)==32){x=0;y=Fa(95,209075,0,f|0)|0;z=x;x=0;if(z&1){A=56;break}if((y|0)==-1){x=0;z=Fa(95,209088,0,e|0)|0;B=x;x=0;if(B&1){A=56;break}if((z|0)==-1){B=HSa()|0;C=k[B>>2]|0;x=0;B=$a(42)|0;D=x;x=0;if(D&1){A=56;break}k[c>>2]=C;k[o>>2]=B;E=C}else{F=z;A=40}}else{F=y;A=40}do if((A|0)==40){A=0;y=l;z=0;while(1){x=0;C=Fa(97,F|0,y|0,16-z|0)|0;B=x;x=0;if(B&1){A=55;break b}if((C|0)==-1)break;z=C+z|0;if(z>>>0>=16){A=51;break}else y=y+C|0}if((A|0)==51){A=0;x=0;Ba(572,F|0)|0;y=x;x=0;if(y&1){A=56;break b}E=k[c>>2]|0;break}x=0;Ba(572,F|0)|0;y=x;x=0;if(y&1){A=56;break b}y=HSa()|0;z=k[y>>2]|0;x=0;y=$a(42)|0;C=x;x=0;if(C&1){A=56;break b}k[c>>2]=z;k[o>>2]=y;E=z}while(0);if(!E)G=0;else{A=54;break}}else G=w;z=k[b>>2]|0;k[((i[j>>0]&1)==0?s:z)+(v<<2)>>2]=k[22564+((i[l+((G|0)/2|0)>>0]>>(G<<2&4)&15)<<2)>>2];H=i[j>>0]|0;I=k[s>>2]|0;J=z;K=G+1|0}else{H=q;I=m;J=p;K=w}v=v+1|0;if(v>>>0>=((H&1)==0?(H&255)>>>1:I)>>>0){L=I;N=H;A=61;break a}else{p=J;m=I;q=H;w=K}}if((A|0)==54){x=0;fb(140,a|0,329672,0);w=x;x=0;if(w&1){A=57;break}O5a(j);r=d;return}else if((A|0)==55){w=Hc()|0;O=M;P=w;break}else if((A|0)==56){w=Hc()|0;O=M;P=w;break}}else{Q=u;R=t;S=n;T=0;U=32}c:while(1){if((k[((R&1)==0?s:S)+(T<<2)>>2]|0)==37){if((U|0)==32){x=0;w=Fa(95,209075,0,h|0)|0;q=x;x=0;if(q&1){A=25;break}if((w|0)==-1){x=0;q=Fa(95,209088,0,g|0)|0;m=x;x=0;if(m&1){A=25;break}if((q|0)==-1){A=34;break}else V=q}else V=w;w=l;q=0;while(1){x=0;m=Fa(97,V|0,w|0,16-q|0)|0;p=x;x=0;if(p&1){A=27;break c}if((m|0)==-1){W=V;A=22;break c}q=m+q|0;if(q>>>0>=16)break;else w=w+m|0}x=0;Ba(572,V|0)|0;w=x;x=0;if(w&1){A=25;break}else X=0}else X=U;w=k[b>>2]|0;k[((i[j>>0]&1)==0?s:w)+(T<<2)>>2]=k[22564+((i[l+((X|0)/2|0)>>0]>>(X<<2&4)&15)<<2)>>2];Y=w;Z=i[j>>0]|0;_=k[s>>2]|0;$=X+1|0}else{Y=S;Z=R;_=Q;$=U}T=T+1|0;if(T>>>0>=((Z&1)==0?(Z&255)>>>1:_)>>>0){L=_;N=Z;A=61;break a}else{Q=_;R=Z;S=Y;U=$}}if((A|0)==22){x=0;Ba(572,W|0)|0;b=x;x=0;if(b&1){b=Hc()|0;O=M;P=b;break}b=HSa()|0;n=k[b>>2]|0;b=Rd(28)|0;x=0;w=$a(42)|0;q=x;x=0;if(!(q&1)?(x=0,xa(616,b|0,209100),q=x,x=0,!(q&1)):0){k[b>>2]=21312;k[b+8>>2]=n;k[b+12>>2]=w;w=b+16|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;x=0;fb(149,b|0,416,88);x=0;A=57;break}w=Hc()|0;n=M;Fc(b|0);O=n;P=w;break}else if((A|0)==25){w=Hc()|0;O=M;P=w;break}else if((A|0)==27){w=Hc()|0;O=M;P=w;break}else if((A|0)==34){w=HSa()|0;n=k[w>>2]|0;w=Rd(28)|0;x=0;b=$a(42)|0;q=x;x=0;if(!(q&1)?(x=0,xa(616,w|0,209100),q=x,x=0,!(q&1)):0){k[w>>2]=21312;k[w+8>>2]=n;k[w+12>>2]=b;b=w+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;x=0;fb(149,w|0,416,88);x=0;A=57;break}b=Hc()|0;n=M;Fc(w|0);O=n;P=b;break}}else{L=u;N=t;A=61}while(0);do if((A|0)==61){if(!c){aa=N;ba=L}else{k[c>>2]=0;x=0;t=$a(42)|0;u=x;x=0;if(u&1){A=57;break}k[c+4>>2]=t;aa=i[j>>0]|0;ba=k[s>>2]|0};k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;t=(aa&1)==0;u=t?(aa&255)>>>1:ba;if(!u){O5a(j);r=d;return}W=t?s:k[j+8>>2]|0;x=0;t=$a(47)|0;$=x;x=0;if(!($&1)?(x=0,nb(90,W|0,W+(u<<2)|0,a|0,t|0),t=x,x=0,!(t&1)):0){O5a(j);r=d;return}t=Hc()|0;u=M;x=0;va(1460,a|0);W=x;x=0;if(W&1){W=Hc(0)|0;Fg(W)}else{O=u;P=t}}while(0);if((A|0)==57){A=Hc()|0;O=M;P=A}x=0;va(1472,j|0);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(P|0)}function Yo(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;b=(c|0)==(d|0);a:do if((f|0)!=(g|0)&(b^1)){a=c;j=f;b:while(1){l=i[a>>0]|0;if((l&255)>253|l<<24>>24<0&(l&255)<192){m=a;n=j;o=3;break}if(l<<24>>24<=-1)if((l&-32)<<24>>24!=-64)if((l&-16)<<24>>24!=-32)if((l&-8)<<24>>24==-16)p=3;else p=(l&-4)<<24>>24==-8?4:5;else p=2;else p=1;else p=0;q=(l&255)-(k[22684+(p<<2)>>2]|0)|0;l=a+1|0;r=(p|0)!=0;if((l|0)!=(d|0)&r){s=l;t=0;u=q;while(1){v=i[s>>0]|0;if(v<<24>>24>-1|(v&255)>191){w=j;x=s;o=11;break b}y=(u<<6)+-128+(v&255)|0;v=t+1|0;z=s+1|0;A=(v|0)!=(p|0);if((z|0)!=(d|0)&A){s=z;t=v;u=y}else{B=z;C=s;D=y;E=A;F=t;break}}G=B;H=E;I=C;J=-2-F|0;K=D}else{G=l;H=r;I=a;J=-1;K=q}if(!((G|0)!=(d|0)|H^1)){L=j;M=I;N=J;o=15;break}t=j+4|0;k[j>>2]=K;s=(G|0)==(d|0);if((t|0)!=(g|0)&(s^1)){a=G;j=t}else{O=G;P=t;Q=s;break a}}if((o|0)==3){k[e>>2]=m;k[h>>2]=n;R=2;return R|0}else if((o|0)==11){k[e>>2]=x;k[h>>2]=w;R=2;return R|0}else if((o|0)==15){k[e>>2]=M+1+N;k[h>>2]=L;R=1;return R|0}}else{O=c;P=f;Q=b}while(0);k[e>>2]=O;k[h>>2]=P;R=Q&1^1;return R|0}function Zo(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;b=(c|0)==(d|0);a:do if((f|0)!=(g|0)&(b^1)){a=c;j=f;while(1){l=k[a>>2]|0;if((l|0)>=128)if((l|0)>=2048)if((l|0)>=65536)if((l|0)<2097152)m=3;else m=(l|0)<67108864?4:5;else m=2;else m=1;else m=0;n=m*6|0;i[j>>0]=((l|0)/(1<>2]|0);l=j+1|0;o=(m|0)==0;p=(l|0)==(g|0);if(p|o){q=l;r=p;s=o;t=j;u=-1}else{o=l;l=0;p=n;while(1){p=p+-6|0;i[o>>0]=(((k[a>>2]|0)/(1<>2]=D;k[h>>2]=E+1+F;J=1;return J|0}else{G=c;H=f;I=b}while(0);k[e>>2]=G;k[h>>2]=H;J=I&1^1;return J|0}function _o(a,b){a=a|0;b=b|0;var c=0;if((b|0)>=128)if((b|0)>=2048)if((b|0)>=65536)if((b|0)<2097152)c=3;else c=(b|0)<67108864?4:5;else c=2;else c=1;else c=0;return c|0}function $o(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;if(c>>>0>d>>>0){f=c;g=f;h=d;j=g-h|0;return j|0}else{k=c;l=0}while(1){c=i[k>>0]|0;if(c<<24>>24<=-1)if((c&-32)<<24>>24!=-64)if((c&-16)<<24>>24!=-32)if((c&-8)<<24>>24==-16)m=4;else m=(c&-4)<<24>>24==-8?5:6;else m=3;else m=2;else m=1;l=l+1|0;c=k+m|0;if(l>>>0>e>>>0|c>>>0>d>>>0){f=k;break}else k=c}g=f;h=d;j=g-h|0;return j|0}function ap(a){a=a|0;var b=0;if(a<<24>>24>-1){b=1;return b|0}if((a&-32)<<24>>24==-64){b=2;return b|0}if((a&-16)<<24>>24==-32){b=3;return b|0}if((a&-8)<<24>>24==-16){b=4;return b|0}else return ((a&-4)<<24>>24==-8?5:6)|0;return 0}function bp(a){a=a|0;var b=0;x=0;va(182,a|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(a);Sc(b|0)}else{OBa(a);return}}function cp(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 0}function dp(a){a=a|0;return 0}function ep(a){a=a|0;return 0}function fp(a){a=a|0;return 6}function gp(){if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}return 22752}function hp(){if((i[1160]|0)==0?(Bb(1160)|0)!=0:0){k[5698]=22764;Kc(1160)}return 22792}function ip(){if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}if((i[1160]|0)==0?(Bb(1160)|0)!=0:0){k[5698]=22764;Kc(1160)}k[5677]=0;if(i[1160]|0){k[5678]=22792;return}if(!(Bb(1160)|0)){k[5678]=22792;return}k[5698]=22764;Kc(1160);k[5678]=22792;return}function jp(a){a=a|0;OBa(a);return}function kp(a){a=a|0;return 325511}function lp(a,b,c){a=a|0;b=b|0;c=c|0;if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}jg[k[(k[5688]|0)+12>>2]&511](a,22752,c);return}function mp(a,b,c){a=a|0;b=b|0;c=c|0;do switch(c|0){case 0:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=0;k[a+4>>2]=22752;return}case 7:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=7;k[a+4>>2]=22752;return}case 13:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=13;k[a+4>>2]=22752;return}case 98:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=98;k[a+4>>2]=22752;return}case 99:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=99;k[a+4>>2]=22752;return}case 97:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=97;k[a+4>>2]=22752;return}case 11:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=11;k[a+4>>2]=22752;return}case 114:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=114;k[a+4>>2]=22752;return}case 9:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=9;k[a+4>>2]=22752;return}case 74:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=74;k[a+4>>2]=22752;return}case 16:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=16;k[a+4>>2]=22752;return}case 125:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=125;k[a+4>>2]=22752;return}case 10:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=10;k[a+4>>2]=22752;return}case 103:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=103;k[a+4>>2]=22752;return}case 111:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=111;k[a+4>>2]=22752;return}case 104:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=104;k[a+4>>2]=22752;return}case 35:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=35;k[a+4>>2]=22752;return}case 89:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=89;k[a+4>>2]=22752;return}case 33:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=33;k[a+4>>2]=22752;return}case 17:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=17;k[a+4>>2]=22752;return}case 14:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=14;k[a+4>>2]=22752;return}case 27:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=27;k[a+4>>2]=22752;return}case 113:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=113;k[a+4>>2]=22752;return}case 43:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=43;k[a+4>>2]=22752;return}case 84:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=84;k[a+4>>2]=22752;return}case 115:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=115;k[a+4>>2]=22752;return}case 4:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=4;k[a+4>>2]=22752;return}case 22:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=22;k[a+4>>2]=22752;return}case 5:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=5;k[a+4>>2]=22752;return}case 106:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=106;k[a+4>>2]=22752;return}case 21:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=21;k[a+4>>2]=22752;return}case 40:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=40;k[a+4>>2]=22752;return}case 24:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=24;k[a+4>>2]=22752;return}case 31:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=31;k[a+4>>2]=22752;return}case 90:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=90;k[a+4>>2]=22752;return}case 36:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=36;k[a+4>>2]=22752;return}case 100:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=100;k[a+4>>2]=22752;return}case 102:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=102;k[a+4>>2]=22752;return}case 101:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=101;k[a+4>>2]=22752;return}case 23:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=23;k[a+4>>2]=22752;return}case 105:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=105;k[a+4>>2]=22752;return}case 61:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=61;k[a+4>>2]=22752;return}case 19:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=19;k[a+4>>2]=22752;return}case 2:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=2;k[a+4>>2]=22752;return}case 8:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=8;k[a+4>>2]=22752;return}case 37:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=37;k[a+4>>2]=22752;return}case 67:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=67;k[a+4>>2]=22752;return}case 12:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=12;k[a+4>>2]=22752;return}case 42:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=42;k[a+4>>2]=22752;return}case 92:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=92;k[a+4>>2]=22752;return}case 28:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=28;k[a+4>>2]=22752;return}case 63:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=63;k[a+4>>2]=22752;return}case 60:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=60;k[a+4>>2]=22752;return}case 38:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=38;k[a+4>>2]=22752;return}case 107:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=107;k[a+4>>2]=22752;return}case 20:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=20;k[a+4>>2]=22752;return}case 39:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=39;k[a+4>>2]=22752;return}case 131:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=131;k[a+4>>2]=22752;return}case 88:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=88;k[a+4>>2]=22752;return}case 95:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=95;k[a+4>>2]=22752;return}case 25:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=25;k[a+4>>2]=22752;return}case 6:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=6;k[a+4>>2]=22752;return}case 75:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=75;k[a+4>>2]=22752;return}case 130:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=130;k[a+4>>2]=22752;return}case 1:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=1;k[a+4>>2]=22752;return}case 32:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=32;k[a+4>>2]=22752;return}case 71:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=71;k[a+4>>2]=22752;return}case 93:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=93;k[a+4>>2]=22752;return}case 91:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=91;k[a+4>>2]=22752;return}case 34:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=34;k[a+4>>2]=22752;return}case 30:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=30;k[a+4>>2]=22752;return}case 29:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=29;k[a+4>>2]=22752;return}case 3:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=3;k[a+4>>2]=22752;return}case 62:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=62;k[a+4>>2]=22752;return}case 110:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=110;k[a+4>>2]=22752;return}case 26:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=26;k[a+4>>2]=22752;return}case 18:{if((i[1152]|0)==0?(Bb(1152)|0)!=0:0){k[5688]=22724;Kc(1152)}k[a>>2]=18;k[a+4>>2]=22752;return}default:{if((i[1160]|0)==0?(Bb(1160)|0)!=0:0){k[5698]=22764;Kc(1160)}k[a>>2]=c;k[a+4>>2]=22792;return}}while(0)}function np(a){a=a|0;OBa(a);return}function op(a){a=a|0;return 325468}function pp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+80|0;d=b+16|0;e=b;do if((i[1200]|0)==0?(Bb(1200)|0)!=0:0){x=0;fb(140,22796,209232,13);f=x;x=0;if(!(f&1)){Kc(1200);break}f=Hc()|0;g=M;Cd(1200);h=f;j=g;Sc(h|0)}while(0);g=d;d=64;while(1){f=CMa(c,g,d)|0;if((f|0)!=34){l=f;m=g;n=d;break}if(d>>>0>64)yYa(g);d=d<<1;g=xYa(d)|0;if(!g){o=11;break}}if((o|0)==11){q2a(a,209246,6);r=b;return};k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;Ta(496,e|0,((l|0)==22?209232:m)|0)|0;l=x;x=0;if(!(l&1?(l=Hc(0)|0,me(l|0)|0,x=0,hb(45),l=x,x=0,l&1):0)){if(n>>>0>64)yYa(m);x=0;xa(604,a|0,e|0);a=x;x=0;if(!(a&1)){K2a(e);r=b;return}}b=Hc()|0;a=M;x=0;va(1460,e|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else{h=b;j=a;Sc(h|0)}}function qp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=r;r=r+32|0;e=d+8|0;f=d+4|0;g=d;h=d+16|0;do if((i[1208]|0)==0?(Bb(1208)|0)!=0:0){i[h>>0]=13;i[h+1>>0]=114;i[h+2>>0]=10;i[h+3>>0]=110;i[h+4>>0]=9;i[h+5>>0]=116;i[h+6>>0]=11;i[h+7>>0]=118;k[5703]=0;k[5704]=0;k[5702]=22812;j=h+8|0;m=h;while(1){x=0;n=Ba(563,16)|0;o=x;x=0;if(o&1)break;o=n+13|0;p=l[m>>0]|l[m+1>>0]<<8;i[o>>0]=p;i[o+1>>0]=p>>8;k[g>>2]=22812;k[e>>2]=k[g>>2];p=up(22808,e,f,o)|0;o=k[p>>2]|0;if(o){if((o|0)!=(n|0))OBa(n)}else{o=k[f>>2]|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=o;k[p>>2]=n;o=k[k[5702]>>2]|0;if(!o)q=n;else{k[5702]=o;q=k[p>>2]|0}ui(k[5703]|0,q);k[5704]=(k[5704]|0)+1}m=m+2|0;if((m|0)==(j|0)){s=12;break}}if((s|0)==12){Kc(1208);break}j=Hc()|0;m=M;vp(22808,k[5703]|0);Cd(1208);t=j;u=m;Sc(t|0)}while(0);k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;q=i[b>>0]|0;f=b+4|0;x=0;xa(603,a|0,((q&1)==0?(q&255)>>>1:k[f>>2]|0)+2|0);q=x;x=0;a:do if(!(q&1)?(x=0,xa(605,a|0,34),e=x,x=0,!(e&1)):0){e=i[b>>0]|0;g=(e&1)==0;h=g?b+1|0:k[b+8>>2]|0;m=g?(e&255)>>>1:k[f>>2]|0;e=h+m|0;b:do if(m){if(c){g=h;while(1){j=i[g>>0]|0;p=k[5703]|0;c:do if(p){o=p;do{n=i[o+13>>0]|0;if(j<<24>>24>24)v=o;else{if(n<<24>>24>=j<<24>>24)break c;v=o+4|0}o=k[v>>2]|0}while((o|0)!=0)}while(0);x=0;Ta(484,a|0,209307)|0;p=x;x=0;if(p&1)break;x=0;xa(605,a|0,i[317285+((j&255)>>>4&255)>>0]|0);p=x;x=0;if(p&1)break;x=0;xa(605,a|0,i[317285+(j&15)>>0]|0);p=x;x=0;if(p&1)break;g=g+1|0;if((g|0)==(e|0))break b}g=Hc()|0;w=g;y=M;break a}else z=h;d:while(1){g=i[z>>0]|0;e:do switch(g<<24>>24){case 34:{x=0;Ta(484,a|0,213110)|0;p=x;x=0;if(p&1)break d;break}case 92:{x=0;Ta(484,a|0,213113)|0;p=x;x=0;if(p&1)break d;break}default:{p=k[5703]|0;f:do if(p){o=p;while(1){n=i[o+13>>0]|0;if(g<<24>>24>24)A=o;else{if(n<<24>>24>=g<<24>>24)break;A=o+4|0}o=k[A>>2]|0;if(!o)break f}x=0;xa(605,a|0,92);o=x;x=0;if(o&1)break d;o=k[5703]|0;if(o){n=22812;B=o;g:while(1){o=B;while(1){if((i[o+13>>0]|0)>=g<<24>>24){C=o;break}o=k[o+4>>2]|0;if(!o){D=n;break g}}B=k[C>>2]|0;if(!B){D=C;break}else n=C}if((D|0)!=22812?g<<24>>24>=(i[D+13>>0]|0):0)E=D;else s=50}else s=50;if((s|0)==50){s=0;E=22812}x=0;xa(605,a|0,i[E+14>>0]|0);n=x;x=0;if(n&1)break d;else break e}while(0);x=0;if(g<<24>>24>=32){L3a(a,g);p=x;x=0;if(p&1)break d;else break e}J3a(a,209307)|0;p=x;x=0;if(p&1)break d;x=0;xa(605,a|0,i[317285+((g&255)>>>4&255)>>0]|0);p=x;x=0;if(p&1)break d;x=0;xa(605,a|0,i[317285+(g&15)>>0]|0);p=x;x=0;if(p&1)break d}}while(0);z=z+1|0;if((z|0)==(e|0))break b}g=Hc()|0;w=g;y=M;break a}while(0);x=0;xa(605,a|0,34);e=x;x=0;if(!(e&1)){r=d;return}else s=31}else s=31;while(0);if((s|0)==31){s=Hc()|0;w=s;y=M}K2a(a);t=w;u=y;Sc(t|0)}function rp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+64|0;d=c+48|0;e=c+8|0;f=c;g=a<<24>>24;if((a+-48&255)<10){h=g+-48|0;r=c;return h|0}if((a+-97&255)<6){h=g+-87|0;r=c;return h|0}if((a+-65&255)<6){h=g+-55|0;r=c;return h|0}if((b|0)!=1){h=-1;r=c;return h|0}h=e;c=h+36|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(c|0));h=e+20|0;c=e+24|0;k[c>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;b=e+4|0;g=e+8|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=22884;k[e>>2]=22848;k[h>>2]=22908;k[f>>2]=22924;i[f+4>>0]=a;x=0;a=Ta(506,e|0,f|0)|0;f=x;x=0;if(!(f&1)){x=0;nb(91,a|0,209310,209349,74);x=0}a=Hc()|0;k[b>>2]=22960;k[b+-4>>2]=22988;k[b+16>>2]=23012;K2a(g);k[h>>2]=20796;h=k[c>>2]|0;if(!h)Sc(a|0);x=0;g=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}if(!g)Sc(a|0);k[c>>2]=0;Sc(a|0);return 0}function sp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;d=r;r=r+112|0;e=d+96|0;f=d+40|0;g=d+56|0;h=d;j=i[b>>0]|0;l=(j&1)==0;m=b+4|0;n=l?(j&255)>>>1:k[m>>2]|0;if(n>>>0>1?(j=l?b+1|0:k[b+8>>2]|0,(i[j>>0]|0)==48):0)o=(i[j+1>>0]|0)==120;else o=0;j=o?2:0;k[f>>2]=0;o=f+4|0;k[o>>2]=0;k[f+8>>2]=0;p=(1-j+n|0)>>>1;q=f+8|0;if(p){x=0;s=Ba(563,p|0)|0;t=x;x=0;if(t&1)u=30;else{t=s;v=s+p|0;k[f>>2]=t;k[o>>2]=t;k[q>>2]=v;w=s;y=v;z=t;u=7}}else{w=0;y=0;z=0;u=7}a:do if((u|0)==7){do if(!(n&1)){A=j;u=26}else{t=j|1;v=i[(l?b+1|0:k[b+8>>2]|0)+j>>0]|0;s=v<<24>>24;do if((v+-48&255)>=10){if((v+-97&255)<6){B=s+-87|0;u=14;break}if((v+-65&255)<6){B=s+-55|0;u=14}}else{B=s+-48|0;u=14}while(0);if((u|0)==14?(B|0)!=-1:0){s=B&255;if(w>>>0>>0){i[w>>0]=s;k[o>>2]=(k[o>>2]|0)+1;A=t;u=26;break}v=y;p=w-z+1|0;if((p|0)<0){x=0;va(1473,f|0);C=x;x=0;if(C&1){u=30;break a}D=k[f>>2]|0;E=k[q>>2]|0}else{D=z;E=v}v=D;C=E-D|0;if(C>>>0<1073741823){F=C<<1;C=F>>>0

      >>0?p:F;F=k[o>>2]|0;p=F-D|0;if(!C){G=0;H=0;I=p;J=F}else{K=C;L=F;N=p;u=23}}else{p=k[o>>2]|0;K=2147483647;L=p;N=p-D|0;u=23}if((u|0)==23){x=0;p=Ba(563,K|0)|0;F=x;x=0;if(F&1){u=30;break a}else{G=K;H=p;I=N;J=L}}p=H+I|0;i[p>>0]=s;s=J-D|0;F=p+(0-s)|0;Dyb(F|0,v|0,s|0)|0;k[f>>2]=F;k[o>>2]=p+1;k[q>>2]=H+G;if(!D){A=t;u=26;break}OBa(v);A=t;u=26;break}if((c|0)!=1){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;O=w;break}P=g;Q=P+36|0;do{k[P>>2]=0;P=P+4|0}while((P|0)<(Q|0));t=g+20|0;v=g+24|0;k[v>>2]=0;k[g+28>>2]=0;k[g+32>>2]=0;k[g+36>>2]=-1;p=g+4|0;F=g+8|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[g+4>>2]=22884;k[g>>2]=22848;k[t>>2]=22908;x=0;nb(91,g|0,209380,209349,91);x=0;s=Hc()|0;C=M;k[p>>2]=22960;k[p+-4>>2]=22988;k[p+16>>2]=23012;K2a(F);k[t>>2]=20796;t=k[v>>2]|0;if(t){x=0;F=Ba(k[(k[t>>2]|0)+16>>2]|0,t|0)|0;t=x;x=0;if(t&1){t=Hc(0)|0;Fg(t)}if(F)k[v>>2]=0}R=s;S=C;break a}while(0);b:do if((u|0)==26){C=i[b>>0]|0;c:do if(A>>>0<((C&1)==0?(C&255)>>>1:k[m>>2]|0)>>>0){s=b+8|0;v=b+1|0;F=C;t=A;d:while(1){p=(F&1)==0?v:k[s>>2]|0;T=i[p+t>>0]|0;U=T<<24>>24;do if((T+-48&255)>=10)if((T+-97&255)<6){V=U+-87|0;break}else{V=(T+-65&255)<6?U+-55|0:-1;break}else V=U+-48|0;while(0);U=i[p+(t+1)>>0]|0;T=U<<24>>24;do if((U+-48&255)<10)W=T+-48|0;else{if((U+-97&255)<6){W=T+-87|0;break}if((U+-65&255)>=6)break d;W=T+-55|0}while(0);if(!((V|0)!=-1&(W|0)!=-1))break;T=W+(V<<4)&255;U=k[o>>2]|0;p=k[q>>2]|0;if(U>>>0>=p>>>0){X=p;p=k[f>>2]|0;Y=U-p+1|0;if((Y|0)<0){x=0;va(1473,f|0);Z=x;x=0;if(Z&1){u=29;break}_=k[f>>2]|0;$=k[q>>2]|0}else{_=p;$=X}X=_;p=$-_|0;if(p>>>0<1073741823){Z=p<<1;p=Z>>>0>>0?Y:Z;Z=k[o>>2]|0;Y=Z-_|0;if(!p){aa=0;ba=0;ca=Y;da=Z}else{ea=p;fa=Z;ga=Y;u=60}}else{Y=k[o>>2]|0;ea=2147483647;fa=Y;ga=Y-_|0;u=60}if((u|0)==60){u=0;x=0;Y=Ba(563,ea|0)|0;Z=x;x=0;if(Z&1){u=29;break}else{aa=ea;ba=Y;ca=ga;da=fa}}Y=ba+ca|0;i[Y>>0]=T;Z=da-_|0;p=Y+(0-Z)|0;Dyb(p|0,X|0,Z|0)|0;k[f>>2]=p;k[o>>2]=Y+1;k[q>>2]=ba+aa;if(_)OBa(X)}else{i[U>>0]=T;k[o>>2]=(k[o>>2]|0)+1}t=t+2|0;F=i[b>>0]|0;if(t>>>0>=((F&1)==0?(F&255)>>>1:k[m>>2]|0)>>>0){ha=o;break c}}if((u|0)==29){F=Hc()|0;ia=F;ja=M;u=31;break a}if((c|0)!=1){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;O=k[f>>2]|0;break b}P=h;Q=P+36|0;do{k[P>>2]=0;P=P+4|0}while((P|0)<(Q|0));F=h+20|0;t=h+24|0;k[t>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;s=h+4|0;v=h+8|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[h+4>>2]=22884;k[h>>2]=22848;k[F>>2]=22908;x=0;nb(91,h|0,209380,209349,102);x=0;T=Hc()|0;U=M;k[s>>2]=22960;k[s+-4>>2]=22988;k[s+16>>2]=23012;K2a(v);k[F>>2]=20796;F=k[t>>2]|0;if(F){x=0;v=Ba(k[(k[F>>2]|0)+16>>2]|0,F|0)|0;F=x;x=0;if(F&1){F=Hc(0)|0;Fg(F)}if(v)k[t>>2]=0}R=T;S=U;break a}else ha=o;while(0);k[a>>2]=k[f>>2];k[a+4>>2]=k[ha>>2];k[a+8>>2]=k[q>>2];k[q>>2]=0;k[o>>2]=0;k[f>>2]=0;r=d;return}while(0);if(!O){r=d;return}if((k[o>>2]|0)!=(O|0))k[o>>2]=O;OBa(O);r=d;return}while(0);if((u|0)==30){d=Hc()|0;ia=d;ja=M;u=31}if((u|0)==31){R=ia;S=ja}ja=k[f>>2]|0;if(!ja)Sc(R|0);if((k[o>>2]|0)!=(ja|0))k[o>>2]=ja;OBa(ja);Sc(R|0)}function tp(){k[5820]=0;k[5821]=0;k[5822]=0;return}function up(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=i[d>>0]|0,h=i[f+13>>0]|0,g<<24>>24>=h<<24>>24):0){if(h<<24>>24>=g<<24>>24){k[c>>2]=b;j=c;return j|0}h=f+4|0;l=k[h>>2]|0;m=(l|0)==0;if(m){n=f;while(1){o=k[n+8>>2]|0;if((k[o>>2]|0)==(n|0)){p=o;break}else n=o}}else{n=l;while(1){l=k[n>>2]|0;if(!l){p=n;break}else n=l}}if((p|0)!=(e|0)?g<<24>>24>=(i[p+13>>0]|0):0){n=k[e>>2]|0;if(!n){k[c>>2]=e;j=e;return j|0}else q=n;while(1){n=i[q+13>>0]|0;if(g<<24>>24>24){l=k[q>>2]|0;if(!l){r=q;s=q;t=33;break}else u=l}else{if(n<<24>>24>=g<<24>>24){v=q;t=38;break}n=q+4|0;l=k[n>>2]|0;if(!l){w=n;x=q;t=37;break}else u=l}q=u}if((t|0)==33){k[c>>2]=s;j=r;return j|0}else if((t|0)==37){k[c>>2]=x;j=w;return j|0}else if((t|0)==38){k[c>>2]=v;j=c;return j|0}}if(m){k[c>>2]=f;j=h;return j|0}else{k[c>>2]=p;j=p;return j|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){p=f;while(1){h=k[p+8>>2]|0;if((k[h>>2]|0)==(p|0))p=h;else{y=h;break}}}else{p=a;while(1){a=k[p+4>>2]|0;if(!a){y=p;break}else p=a}}p=i[d>>0]|0;if((i[y+13>>0]|0)>=p<<24>>24){d=k[e>>2]|0;if(!d){k[c>>2]=e;j=e;return j|0}else z=d;while(1){d=i[z+13>>0]|0;if(p<<24>>24>24){e=k[z>>2]|0;if(!e){A=z;B=z;t=14;break}else C=e}else{if(d<<24>>24>=p<<24>>24){D=z;t=19;break}d=z+4|0;e=k[d>>2]|0;if(!e){E=d;F=z;t=18;break}else C=e}z=C}if((t|0)==14){k[c>>2]=B;j=A;return j|0}else if((t|0)==18){k[c>>2]=F;j=E;return j|0}else if((t|0)==19){k[c>>2]=D;j=c;return j|0}}else G=y}else G=b;if(!(k[f>>2]|0)){k[c>>2]=f;j=f;return j|0}else{f=G;k[c>>2]=f;j=f+4|0;return j|0}return 0}function vp(a,b){a=a|0;b=b|0;if(!b)return;else{vp(a,k[b>>2]|0);vp(a,k[b+4>>2]|0);OBa(b);return}}function wp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(8)|0;k[g>>2]=22924;i[g+4>>0]=i[b+4>>0]|0;k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(168,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;j=k[b>>2]|0;k[b>>2]=j+-1;if((j|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);j=x;x=0;if(j&1){l=Hc(0)|0;m=M;Fg(l)}j=h+8|0;b=k[j>>2]|0;k[j>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){l=Hc(0)|0;m=M;Fg(l)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;l=k[g>>2]|0;do if(!l){x=0;m=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;n=M;o=h;p=d+4|0;break}else{k[m>>2]=21100;h=m+8|0;k[h>>2]=0;k[m+12>>2]=0;k[m+4>>2]=h;h=m+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=m;k[m+28>>2]=1;q=m;s=13;break}}else{q=l;s=13}while(0);do if((s|0)==13){l=k[(k[q>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;m=d+4|0;h=k[m>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=1272;x=0;fb(l|0,q|0,e|0,f|0);l=x;x=0;if(l&1){l=Hc()|0;b=M;h=k[g>>2]|0;if(!h){n=b;o=l;p=m;break}j=h+4|0;t=k[j>>2]|0;k[j>>2]=t+-1;if((t|0)!=1){n=b;o=l;p=m;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);t=x;x=0;if(t&1){u=Hc(0)|0;v=M;Fg(u)}t=h+8|0;j=k[t>>2]|0;k[t>>2]=j+-1;if((j|0)!=1){n=b;o=l;p=m;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){n=b;o=l;p=m;break}u=Hc(0)|0;v=M;Fg(u)}l=k[g>>2]|0;if((l|0)!=0?(g=l+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);b=x;x=0;if(b&1){w=Hc(0)|0;y=M;Fg(w)}b=l+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[l>>2]|0)+12>>2]|0,l|0),l=x,x=0,l&1):0){w=Hc(0)|0;y=M;Fg(w)}}l=k[m>>2]|0;if(!l){r=c;return a|0}m=l+4|0;g=k[m>>2]|0;k[m>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);g=x;x=0;if(g&1){z=Hc(0)|0;A=M;Fg(z)}g=l+8|0;m=k[g>>2]|0;k[g>>2]=m+-1;if((m|0)!=1){r=c;return a|0}x=0;va(k[(k[l>>2]|0)+12>>2]|0,l|0);l=x;x=0;if(l&1){z=Hc(0)|0;A=M;Fg(z)}else{r=c;return a|0}}while(0);a=k[p>>2]|0;if(!a)Sc(o|0);p=a+4|0;c=k[p>>2]|0;k[p>>2]=c+-1;if((c|0)!=1)Sc(o|0);x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){B=Hc(0)|0;C=M;Fg(B)}c=a+8|0;p=k[c>>2]|0;k[c>>2]=p+-1;if((p|0)!=1)Sc(o|0);x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){B=Hc(0)|0;C=M;Fg(B)}else Sc(o|0);return 0}function xp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=22960;j=e+-4|0;k[j>>2]=22988;a=e+16|0;k[a>>2]=23012;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=22884;k[f>>2]=22848;k[h>>2]=22908;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1474,f|0);x=0;d=Hc()|0;k[e>>2]=22960;k[j>>2]=22988;k[a>>2]=23012;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function yp(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=22960;h=g+-4|0;k[h>>2]=22988;n=g+16|0;k[n>>2]=23012;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=22884;k[c>>2]=22848;k[f>>2]=22908;x=0;xa(637,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,1216,193);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=22960;k[h>>2]=22988;k[n>>2]=23012;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function zp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=23044;h=g+-4|0;k[h>>2]=23072;i=g+16|0;k[i>>2]=23096;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=23180;k[a>>2]=23136;k[a+20>>2]=23204;k[a+40>>2]=23232;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=23044;k[h>>2]=23072;k[i>>2]=23096;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Ap(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=23044;k[b+-4>>2]=23072;k[b+16>>2]=23096;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Bp(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=23044;k[b+-4>>2]=23072;k[b+16>>2]=23096;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Cp(a){a=a|0;return 209524}function Dp(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(169,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function Ep(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(638,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,1216,193)}function Fp(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=23044;k[a+-4>>2]=23072;k[a+16>>2]=23096;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Gp(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=23044;k[a+-4>>2]=23072;k[a+16>>2]=23096;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Hp(a){a=a|0;return 209524}function Ip(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(169,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function Jp(a){a=a|0;Ep(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Kp(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=23044;k[a+-4>>2]=23072;k[a+16>>2]=23096;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Lp(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=23044;k[a+-4>>2]=23072;k[a+16>>2]=23096;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Mp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=23044;h=g+-4|0;k[h>>2]=23072;i=g+16|0;k[i>>2]=23096;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=23180;k[a>>2]=23136;k[a+20>>2]=23204;k[a+40>>2]=23232;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=23044;k[h>>2]=23072;k[i>>2]=23096;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Np(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=23044;k[h+-4>>2]=23072;k[h+16>>2]=23096;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=23180;k[a>>2]=23136;k[d>>2]=23204;k[a+40>>2]=23232;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function Op(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;x=0;a=Ba(563,16)|0;d=x;x=0;if(d&1){d=Hc(0)|0;me(d|0)|0;if(b)Sf[k[(k[b>>2]|0)+8>>2]&2047](b);x=0;hb(46);x=0;d=Hc()|0;x=0;hb(45);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}k[a+4>>2]=1;k[a+8>>2]=1;k[a>>2]=23256;k[a+12>>2]=b;b=k[c>>2]|0;k[c>>2]=a;if(!b)return;a=b+4|0;c=k[a>>2]|0;k[a>>2]=c+-1;if((c|0)!=1)return;x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);c=x;x=0;if(c&1){f=Hc(0)|0;g=M;Fg(f)}c=b+8|0;a=k[c>>2]|0;k[c>>2]=a+-1;if((a|0)!=1)return;x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){f=Hc(0)|0;g=M;Fg(f)}else return}function Pp(a){a=a|0;OBa(a);return}function Qp(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Sf[k[(k[b>>2]|0)+8>>2]&2047](b);return}function Rp(a,b){a=a|0;b=b|0;return 0}function Sp(a){a=a|0;return 0}function Tp(a,b){a=a|0;b=b|0;Wp(a,b);return}function Up(a){a=a|0;return}function Vp(a){a=a|0;OBa(a);return}function Wp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+80|0;d=c+64|0;e=c+60|0;f=c+48|0;g=c+36|0;h=c+24|0;j=c+12|0;l=c;q2a(j,209670,26);k[e>>2]=(i[j>>0]&1)==0?j+1|0:k[j+8>>2]|0;x=0;k[d>>2]=k[e>>2];Fa(91,j|0,d|0,91)|0;d=x;x=0;if(d&1){d=Hc()|0;m=M;n=d;K2a(j);Sc(n|0)};k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;d=Ta(484,h|0,279643)|0;e=x;x=0;if(e&1){e=Hc()|0;o=M;p=e}else{k[g>>2]=k[d>>2];k[g+4>>2]=k[d+4>>2];k[g+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(639,l|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;q=M;s=b}else{b=i[l>>0]|0;d=(b&1)==0;x=0;e=Fa(88,g|0,(d?l+1|0:k[l+8>>2]|0)|0,(d?(b&255)>>>1:k[l+4>>2]|0)|0)|0;b=x;x=0;do if(!(b&1)){k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(605,f|0,10);d=x;x=0;if(d&1){d=Hc()|0;t=M;K2a(f);u=t;v=d;break}else{k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);K2a(l);K2a(g);K2a(h);K2a(j);r=c;return}}else{d=Hc()|0;u=M;v=d}while(0);K2a(l);q=u;s=v}K2a(g);o=q;p=s}K2a(h);m=o;n=p;K2a(j);Sc(n|0)}function Xp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+160|0;d=c+136|0;e=c;f=e+56|0;g=e+4|0;k[e>>2]=20356;k[f>>2]=20376;x=0;xa(582,e+56|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;j=M;l=h;mab(f);Sc(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,g|0);h=x;x=0;do if(!(h&1)){k[g>>2]=20392;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,g|0,d|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(d);K2a(m);obb(g);p=o;q=n;break}K2a(d);i[d>>0]=i[b>>0]|0;x=0;Fa(92,e|0,d|0,1)|0;n=x;x=0;if(n&1){s=Hc()|0;t=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);Sc(s|0)}x=0;xa(584,a|0,g|0);n=x;x=0;if(n&1){s=Hc()|0;t=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);Sc(s|0)}else{k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);r=c;return}}else{m=Hc()|0;p=M;q=m}while(0);j=p;l=q;mab(f);Sc(l|0)}function Yp(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=22960;k[b+-4>>2]=22988;k[b+16>>2]=23012;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Zp(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=22960;k[b+-4>>2]=22988;k[b+16>>2]=23012;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function _p(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=22960;k[a+-4>>2]=22988;k[a+16>>2]=23012;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function $p(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=22960;k[a+-4>>2]=22988;k[a+16>>2]=23012;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function aq(a,b){a=a|0;b=b|0;dq(a,b);return}function bq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;d=r;r=r+384|0;e=d+368|0;f=d+332|0;g=d+356|0;h=d+344|0;j=d;l=d+124|0;m=d+320|0;n=d+112|0;o=d+100|0;p=d+88|0;q=d+136|0;s=d+48|0;t=d+32|0;u=d+20|0;v=d+8|0;if(c){k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;c=i[a>>0]|0;w=(c&1)==0;y=w?(c&255)>>>1:k[a+4>>2]|0;x=0;nb(83,h|0,(w?a+1|0:k[a+8>>2]|0)|0,y|0,y+7|0);y=x;x=0;if(y&1){z=Hc()|0;A=M;K2a(h);Sc(z|0)}x=0;Fa(88,h|0,209697,7)|0;y=x;x=0;if(y&1){z=Hc()|0;A=M;K2a(h);Sc(z|0)}x=0;xa(604,g|0,h|0);z=x;x=0;do if(z&1){A=Hc()|0;B=M;C=A}else{x=0;fb(170,f|0,g|0,0);A=x;x=0;if(A&1){A=Hc()|0;y=M;K2a(g);B=y;C=A;break}K2a(g);K2a(h);A=b;y=k[A+4>>2]|0;w=j;k[w>>2]=k[A>>2];k[w+4>>2]=y;x=0;k[e>>2]=k[j>>2];k[e+4>>2]=k[j+4>>2];fb(171,f|0,e|0,0);y=x;x=0;do if(!(y&1)?(x=0,xa(604,l|0,a|0),w=x,x=0,!(w&1)):0){x=0;fb(172,f|0,l|0,0);w=x;x=0;if(w&1){w=Hc()|0;A=M;K2a(l);D=A;E=w;break}K2a(l);K2a(f);r=d;return}else F=14;while(0);if((F|0)==14){y=Hc()|0;D=M;E=y}K2a(f);G=D;H=E;Sc(H|0)}while(0);K2a(h);G=B;H=C;Sc(H|0)}n2a(m,a);x=0;xa(632,n|0,m|0);C=x;x=0;a:do if(C&1)F=25;else{x=0;fb(165,e|0,n|0,0);B=x;x=0;if(B&1){B=Hc()|0;h=M;K2a(n);I=h;J=B;break}B=(k[e>>2]|0)>>>0>1;K2a(n);b:do if(!B){x=0;xa(632,o|0,m|0);h=x;x=0;if(h&1){F=25;break a}x=0;Ta(503,o|0,0)|0;h=x;x=0;if(h&1){h=Hc()|0;E=M;K2a(o);I=E;J=h;break a}K2a(o);x=0;xa(632,p|0,m|0);h=x;x=0;do if(!(h&1)){x=0;fb(173,p|0,448,0);E=x;x=0;if(E&1){E=Hc(0)|0;K2a(p);K=E;break}else{K2a(p);break b}}else{E=Hc(0)|0;K=E}while(0);me(K|0)|0;x=0;hb(45);h=x;x=0;if(h&1){F=25;break a}}while(0);B=q+104|0;h=q+4|0;k[q>>2]=23304;k[B>>2]=23324;x=0;xa(582,q+104|0,h|0);E=x;x=0;if(E&1){E=Hc()|0;L=M;N=E}else{k[q+176>>2]=0;k[q+180>>2]=-1;k[q>>2]=23344;k[q+104>>2]=23364;x=0;va(1475,h|0);E=x;x=0;do if(E&1){D=Hc()|0;O=M;P=D}else{D=a+8|0;f=a+1|0;l=q+68|0;if((k[l>>2]|0)==0?(j=nQa((i[a>>0]&1)==0?f:k[D>>2]|0,209705)|0,k[l>>2]=j,(j|0)!=0):0)k[q+92>>2]=52;else F=37;if((F|0)==37?(j=q+(k[(k[q>>2]|0)+-12>>2]|0)|0,x=0,xa(612,j|0,k[j+16>>2]|4|0),j=x,x=0,j&1):0){j=Hc()|0;l=M;fq(h);O=l;P=j;break}x=0;Fa(102,q|0,k[b>>2]|0,k[b+4>>2]|0)|0;j=x;x=0;do if(j&1)F=50;else{if(!(k[q+(k[(k[q>>2]|0)+-12>>2]|0)+16>>2]&5)){x=0;xa(604,v|0,a|0);l=x;x=0;do if(!(l&1)){x=0;fb(173,v|0,384,0);g=x;x=0;if(g&1){g=Hc(0)|0;K2a(v);Q=g;F=66;break}else{K2a(v);break}}else{g=Hc(0)|0;Q=g;F=66}while(0);if((F|0)==66?(me(Q|0)|0,x=0,hb(45),l=x,x=0,l&1):0){F=50;break}k[q>>2]=23344;k[B>>2]=23364;fq(h);mab(B);K2a(m);r=d;return}l=s;g=l+36|0;do{k[l>>2]=0;l=l+4|0}while((l|0)<(g|0));l=s+20|0;g=s+24|0;k[g>>2]=0;k[s+28>>2]=0;k[s+32>>2]=0;k[s+36>>2]=-1;z=s+4|0;y=z+-4|0;w=z+16|0;A=s+8|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[s+4>>2]=23452;k[s>>2]=23416;k[l>>2]=23476;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;c=i[a>>0]|0;R=(c&1)==0?(c&255)>>>1:k[a+4>>2]|0;x=0;nb(83,u|0,209708,25,R+25|0);c=x;x=0;if(!(c&1)?(x=0,Fa(88,u|0,((i[a>>0]&1)==0?f:k[D>>2]|0)|0,R|0)|0,R=x,x=0,!(R&1)):0){k[t>>2]=21048;R=t+4|0;x=0;xa(604,R|0,u|0);c=x;x=0;if(c&1){c=Hc()|0;S=M;T=c}else{x=0;c=Ta(507,s|0,t|0)|0;U=x;x=0;if(!(U&1)){x=0;nb(92,c|0,209734,209796,87);x=0}c=Hc()|0;U=M;k[t>>2]=21048;K2a(R);S=U;T=c}K2a(u);V=S;W=T}else{c=Hc()|0;U=M;K2a(u);V=U;W=c}k[z>>2]=23508;k[y>>2]=23536;k[w>>2]=23560;K2a(A);k[l>>2]=20796;l=k[g>>2]|0;if(l){x=0;A=Ba(k[(k[l>>2]|0)+16>>2]|0,l|0)|0;l=x;x=0;if(l&1){l=Hc(0)|0;Fg(l)}if(A)k[g>>2]=0}X=V;Y=W}while(0);if((F|0)==50){D=Hc()|0;X=M;Y=D}k[q>>2]=23344;k[B>>2]=23364;fq(h);mab(B);I=X;J=Y;break a}while(0);L=O;N=P}mab(B);Z=L;_=N;F=26}while(0);if((F|0)==25){N=Hc()|0;Z=M;_=N;F=26}if((F|0)==26){I=Z;J=_}K2a(m);G=I;H=J;Sc(H|0)}function cq(){var a=0;k[5989]=0;k[5990]=0;k[5991]=0;a=gp()|0;k[5992]=a;a=gp()|0;k[5993]=a;a=hp()|0;k[5994]=a;return}function dq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+208|0;d=c+16|0;e=c;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;f=d+108|0;g=d+8|0;k[d>>2]=23872;k[f>>2]=23892;k[d+4>>2]=0;x=0;xa(582,d+108|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;j=M;l=h}else{k[d+180>>2]=0;k[d+184>>2]=-1;k[d>>2]=23912;k[d+108>>2]=23932;x=0;va(1475,g|0);h=x;x=0;do if(h&1){m=Hc()|0;n=M;o=m}else{m=d+72|0;if((k[m>>2]|0)==0?(p=nQa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,210004)|0,k[m>>2]=p,(p|0)!=0):0)k[d+96>>2]=12;else q=6;if((q|0)==6?(p=d+(k[(k[d>>2]|0)+-12>>2]|0)|0,x=0,xa(612,p|0,k[p+16>>2]|4|0),p=x,x=0,p&1):0){p=Hc()|0;m=M;fq(g);n=m;o=p;break}if(k[d+(k[(k[d>>2]|0)+-12>>2]|0)+16>>2]&5){k[d>>2]=23912;k[f>>2]=23932;fq(g);mab(f);r=c;return}x=0;db(60,d|0,0,0,2)|0;p=x;x=0;if(!(p&1)?(x=0,xa(640,e|0,d|0),p=x,x=0,!(p&1)):0){p=e+8|0;m=k[p>>2]|0;if((m|0)==0&(k[p+4>>2]|0)==0){k[d>>2]=23912;k[f>>2]=23932;fq(g);mab(f);r=c;return}x=0;db(60,d|0,0,0,0)|0;p=x;x=0;if(!(p&1)?(x=0,fb(147,a|0,m|0,0),p=x,x=0,!(p&1)):0){if(!(i[a>>0]&1))s=a+1|0;else s=k[a+8>>2]|0;x=0;Fa(103,d|0,s|0,m|0)|0;m=x;x=0;if(!(m&1)){k[d>>2]=23912;k[f>>2]=23932;fq(g);mab(f);r=c;return}}}m=Hc()|0;p=M;k[d>>2]=23912;k[f>>2]=23932;fq(g);mab(f);t=p;u=m;K2a(a);Sc(u|0)}while(0);j=n;l=o}mab(f);t=j;u=l;K2a(a);Sc(u|0)}function eq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;Ebb(a);k[a>>2]=23804;k[a+32>>2]=0;k[a+36>>2]=0;k[a+40>>2]=0;f=a+52|0;g=a+68|0;h=a+98|0;l=f;m=l+44|0;do{k[l>>2]=0;l=l+4|0}while((l|0)<(m|0));j[f+44>>1]=0;i[f+46>>0]=0;f=a+4|0;_pb(c,f);k[d>>2]=k[c>>2];x=0;l=Ta(508,d|0,74328)|0;m=x;x=0;if(m&1){m=Hc(0)|0;Fg(m)}$pb(d);do if(l){_pb(c,f);k[e>>2]=k[c>>2];x=0;d=Ta(495,e|0,74328)|0;m=x;x=0;if(!(m&1)){k[g>>2]=d;$pb(e);d=k[g>>2]|0;m=(Vf[k[(k[d>>2]|0)+28>>2]&1023](d)|0)&1;i[h>>0]=m;break}m=Hc()|0;d=M;$pb(e);n=d;o=m;obb(a);Sc(o|0)}while(0);x=0;Fa(k[(k[a>>2]|0)+12>>2]|0,a|0,0,4096)|0;e=x;x=0;if(!(e&1)){r=b;return}b=Hc()|0;n=M;o=b;obb(a);Sc(o|0)}function fq(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=23804;b=a+64|0;c=k[b>>2]|0;do if(c){x=0;Ba(101,a|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;QRa(c)|0;me(d|0)|0;x=0;hb(45);d=x;x=0;if(!(d&1))break;d=Hc(0)|0;obb(a);Fg(d)}else{if(QRa(c)|0)break;k[b>>2]=0;break}}while(0);if((i[a+96>>0]|0)!=0?(b=k[a+32>>2]|0,(b|0)!=0):0)QBa(b);if(!(i[a+97>>0]|0)){obb(a);return}b=k[a+56>>2]|0;if(!b){obb(a);return}QBa(b);obb(a);return}function gq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function hq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=23508;j=e+-4|0;k[j>>2]=23536;a=e+16|0;k[a>>2]=23560;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=23452;k[f>>2]=23416;k[h>>2]=23476;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1476,f|0);x=0;d=Hc()|0;k[e>>2]=23508;k[j>>2]=23536;k[a>>2]=23560;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function iq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=23508;h=g+-4|0;k[h>>2]=23536;n=g+16|0;k[n>>2]=23560;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=23452;k[c>>2]=23416;k[f>>2]=23476;x=0;xa(641,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,1304,211);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=23508;k[h>>2]=23536;k[n>>2]=23560;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function jq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=23592;h=g+-4|0;k[h>>2]=23620;i=g+16|0;k[i>>2]=23644;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=23728;k[a>>2]=23684;k[a+20>>2]=23752;k[a+40>>2]=23780;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=23592;k[h>>2]=23620;k[i>>2]=23644;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function kq(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=23592;k[b+-4>>2]=23620;k[b+16>>2]=23644;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function lq(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=23592;k[b+-4>>2]=23620;k[b+16>>2]=23644;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function mq(a){a=a|0;return 209899}function nq(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(174,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function oq(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(642,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,1304,211)}function pq(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=23592;k[a+-4>>2]=23620;k[a+16>>2]=23644;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function qq(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=23592;k[a+-4>>2]=23620;k[a+16>>2]=23644;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function rq(a){a=a|0;return 209899}function sq(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(174,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function tq(a){a=a|0;oq(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function uq(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=23592;k[a+-4>>2]=23620;k[a+16>>2]=23644;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function vq(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=23592;k[a+-4>>2]=23620;k[a+16>>2]=23644;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function wq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=23592;h=g+-4|0;k[h>>2]=23620;i=g+16|0;k[i>>2]=23644;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=23728;k[a>>2]=23684;k[a+20>>2]=23752;k[a+40>>2]=23780;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=23592;k[h>>2]=23620;k[i>>2]=23644;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function xq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=23592;k[h+-4>>2]=23620;k[h+16>>2]=23644;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=23728;k[a>>2]=23684;k[d>>2]=23752;k[a+40>>2]=23780;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function yq(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=23508;k[b+-4>>2]=23536;k[b+16>>2]=23560;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function zq(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=23508;k[b+-4>>2]=23536;k[b+16>>2]=23560;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Aq(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=23508;k[a+-4>>2]=23536;k[a+16>>2]=23560;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Bq(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=23508;k[a+-4>>2]=23536;k[a+16>>2]=23560;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Cq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b;d=a+64|0;if(!(k[d>>2]|0)){e=0;r=b;return e|0}f=a+68|0;g=k[f>>2]|0;if(!g){h=Rd(4)|0;CCa(h);Gf(h|0,9112,1201)}h=a+92|0;j=k[h>>2]|0;do if(!(j&16)){if(j&8){l=a+80|0;m=k[l+4>>2]|0;n=c;k[n>>2]=k[l>>2];k[n+4>>2]=m;do if(!(i[a+98>>0]|0)){m=Vf[k[(k[g>>2]|0)+24>>2]&1023](g)|0;n=a+36|0;l=k[n>>2]|0;o=(k[a+40>>2]|0)-l|0;if((m|0)>0){p=(ia((k[a+16>>2]|0)-(k[a+12>>2]|0)|0,m)|0)+o|0;q=0;break}m=k[a+12>>2]|0;if((m|0)==(k[a+16>>2]|0)){p=o;q=0}else{s=k[f>>2]|0;t=a+32|0;u=dg[k[(k[s>>2]|0)+32>>2]&127](s,c,k[t>>2]|0,l,m-(k[a+8>>2]|0)|0)|0;p=o-u+(k[n>>2]|0)-(k[t>>2]|0)|0;q=1}}else{p=(k[a+16>>2]|0)-(k[a+12>>2]|0)|0;q=0}while(0);if(Xf[104&255](k[d>>2]|0,0-p|0,1)|0){e=-1;r=b;return e|0}if(q){t=c;n=k[t+4>>2]|0;u=a+72|0;k[u>>2]=k[t>>2];k[u+4>>2]=n}n=k[a+32>>2]|0;k[a+40>>2]=n;k[a+36>>2]=n;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[h>>2]=0}}else{if((k[a+24>>2]|0)!=(k[a+20>>2]|0)?(cg[k[(k[a>>2]|0)+52>>2]&1023](a,-1)|0)==-1:0){e=-1;r=b;return e|0}n=a+72|0;u=a+32|0;t=a+52|0;a:while(1){o=k[f>>2]|0;m=k[u>>2]|0;l=dg[k[(k[o>>2]|0)+20>>2]&127](o,n,m,m+(k[t>>2]|0)|0,c)|0;m=k[u>>2]|0;o=(k[c>>2]|0)-m|0;if((FRa(m,1,o,k[d>>2]|0)|0)!=(o|0)){e=-1;v=24;break}switch(l|0){case 1:break;case 2:{e=-1;v=24;break a;break}default:{v=10;break a}}}if((v|0)==10){if(!(ZRa(k[d>>2]|0)|0))break;else e=-1;r=b;return e|0}else if((v|0)==24){r=b;return e|0}}while(0);e=0;r=b;return e|0}function Dq(a){a=a|0;fq(a);OBa(a);return}function Eq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;Vf[k[(k[a>>2]|0)+24>>2]&1023](a)|0;c=lqb(b,74328)|0;k[a+68>>2]=c;b=a+98|0;d=i[b>>0]|0;e=Vf[k[(k[c>>2]|0)+28>>2]&1023](c)|0;i[b>>0]=e&1;if((d&255|0)==(e&1|0))return;d=a+8|0;b=a+96|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;d=(i[b>>0]|0)!=0;if(e){e=a+32|0;if(d?(c=k[e>>2]|0,(c|0)!=0):0)QBa(c);c=a+97|0;i[b>>0]=i[c>>0]|0;f=a+60|0;k[a+52>>2]=k[f>>2];g=a+56|0;k[e>>2]=k[g>>2];k[f>>2]=0;k[g>>2]=0;i[c>>0]=0;return}if(!d?(d=a+32|0,c=k[d>>2]|0,(c|0)!=(a+44|0)):0){g=k[a+52>>2]|0;k[a+60>>2]=g;k[a+56>>2]=c;i[a+97>>0]=0;c=MBa(g)|0;k[d>>2]=c;i[b>>0]=1;return}b=k[a+52>>2]|0;k[a+60>>2]=b;c=MBa(b)|0;k[a+56>>2]=c;i[a+97>>0]=1;return}function Fq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=a+8|0;e=a+96|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;if((i[e>>0]|0)!=0?(d=k[a+32>>2]|0,(d|0)!=0):0)QBa(d);d=a+97|0;if((i[d>>0]|0)!=0?(f=k[a+56>>2]|0,(f|0)!=0):0)QBa(f);f=a+52|0;k[f>>2]=c;do if(c>>>0>8){g=i[a+98>>0]|0;if((b|0)!=0&g<<24>>24!=0){k[a+32>>2]=b;i[e>>0]=0;h=g;break}else{j=MBa(c)|0;k[a+32>>2]=j;i[e>>0]=1;h=g;break}}else{k[a+32>>2]=a+44;k[f>>2]=8;i[e>>0]=0;h=i[a+98>>0]|0}while(0);if(h<<24>>24){k[a+60>>2]=0;k[a+56>>2]=0;i[d>>0]=0;return a|0}h=(c|0)<8?8:c;k[a+60>>2]=h;if((b|0)!=0&h>>>0>7){k[a+56>>2]=b;i[d>>0]=0;return a|0}else{b=MBa(h)|0;k[a+56>>2]=b;i[d>>0]=1;return a|0}return 0}function Gq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;f=k[b+68>>2]|0;if(!f){g=Rd(4)|0;CCa(g);Gf(g|0,9112,1201)}g=Vf[k[(k[f>>2]|0)+24>>2]&1023](f)|0;f=b+64|0;if(((k[f>>2]|0)!=0?!(((c|0)!=0|(d|0)!=0)&(g|0)<1):0)?(Vf[k[(k[b>>2]|0)+24>>2]&1023](b)|0)==0:0){if(e>>>0>=3){h=a;k[h>>2]=0;k[h+4>>2]=0;h=a+8|0;k[h>>2]=-1;k[h+4>>2]=-1;return}h=k[f>>2]|0;i=Qyb(g|0,((g|0)<0)<<31>>31|0,c|0,d|0)|0;if(!(Xf[104&255](h,(g|0)>0?i:0,e)|0)){e=Vf[577&1023](k[f>>2]|0)|0;f=b+72|0;b=k[f+4>>2]|0;i=a;k[i>>2]=k[f>>2];k[i+4>>2]=b;b=a+8|0;k[b>>2]=e;k[b+4>>2]=((e|0)<0)<<31>>31;return}else{e=a;k[e>>2]=0;k[e+4>>2]=0;e=a+8|0;k[e>>2]=-1;k[e+4>>2]=-1;return}}e=a;k[e>>2]=0;k[e+4>>2]=0;e=a+8|0;k[e>>2]=-1;k[e+4>>2]=-1;return}function Hq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;d=b+64|0;if((k[d>>2]|0)!=0?(Vf[k[(k[b>>2]|0)+24>>2]&1023](b)|0)==0:0)if(!(Xf[104&255](k[d>>2]|0,k[c+8>>2]|0,0)|0)){d=c;e=k[d+4>>2]|0;f=b+72|0;k[f>>2]=k[d>>2];k[f+4>>2]=e;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];k[a+12>>2]=k[c+12>>2];return}else{c=a;k[c>>2]=0;k[c+4>>2]=0;c=a+8|0;k[c>>2]=-1;k[c+4>>2]=-1;return}c=a;k[c>>2]=0;k[c+4>>2]=0;c=a+8|0;k[c>>2]=-1;k[c+4>>2]=-1;return}function Iq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;b=r;r=r+16|0;c=b+4|0;d=b;e=a+64|0;if(!(k[e>>2]|0)){f=-1;r=b;return f|0}g=a+92|0;if(!(k[g>>2]&8)){k[a+24>>2]=0;k[a+20>>2]=0;k[a+28>>2]=0;if(!(i[a+98>>0]|0)){h=k[a+56>>2]|0;j=h+(k[a+60>>2]|0)|0;m=h}else{h=k[a+32>>2]|0;j=h+(k[a+52>>2]|0)|0;m=h}k[a+8>>2]=m;m=a+12|0;k[m>>2]=j;k[a+16>>2]=j;k[g>>2]=8;n=1;o=m;p=j}else{j=a+12|0;n=0;o=j;p=k[j>>2]|0}if(!p){j=c+1|0;k[a+8>>2]=c;k[o>>2]=j;k[a+16>>2]=j;q=j}else q=p;p=a+16|0;if(n){s=k[p>>2]|0;t=0}else{n=k[p>>2]|0;j=(n-(k[a+8>>2]|0)|0)/2|0;s=n;t=j>>>0>4?4:j}do if((q|0)==(s|0)){j=a+8|0;Eyb(k[j>>2]|0,q+(0-t)|0,t|0)|0;if(i[a+98>>0]|0){n=k[j>>2]|0;m=fRa(n+t|0,1,(k[p>>2]|0)-t-n|0,k[e>>2]|0)|0;if(!m){u=j;v=-1;break}n=(k[j>>2]|0)+t|0;k[o>>2]=n;k[p>>2]=n+m;u=j;v=l[n>>0]|0;break}n=a+32|0;m=a+36|0;g=k[m>>2]|0;h=a+40|0;Eyb(k[n>>2]|0,g|0,(k[h>>2]|0)-g|0)|0;g=k[n>>2]|0;w=g+((k[h>>2]|0)-(k[m>>2]|0))|0;k[m>>2]=w;if((g|0)==(a+44|0))x=8;else x=k[a+52>>2]|0;y=g+x|0;k[h>>2]=y;g=a+60|0;z=(k[g>>2]|0)-t|0;A=y-w|0;y=a+72|0;B=y;C=k[B+4>>2]|0;D=a+80|0;k[D>>2]=k[B>>2];k[D+4>>2]=C;C=fRa(w,1,A>>>0>>0?A:z,k[e>>2]|0)|0;if(!C){u=j;v=-1}else{z=k[a+68>>2]|0;if(!z){A=Rd(4)|0;CCa(A);Gf(A|0,9112,1201)}A=(k[m>>2]|0)+C|0;k[h>>2]=A;C=k[j>>2]|0;if((lg[k[(k[z>>2]|0)+16>>2]&127](z,y,k[n>>2]|0,A,m,C+t|0,C+(k[g>>2]|0)|0,d)|0)!=3){g=k[d>>2]|0;C=k[j>>2]|0;m=C+t|0;if((g|0)==(m|0))E=-1;else{k[j>>2]=C;k[o>>2]=m;k[p>>2]=g;E=l[m>>0]|0}}else{m=k[n>>2]|0;n=k[h>>2]|0;k[j>>2]=m;k[o>>2]=m;k[p>>2]=n;E=l[m>>0]|0}u=j;v=E}}else{u=a+8|0;v=l[q>>0]|0}while(0);if((k[u>>2]|0)==(c|0)){k[u>>2]=0;k[o>>2]=0;k[p>>2]=0}f=v;r=b;return f|0}function Jq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;if(!(k[a+64>>2]|0)){c=-1;return c|0}d=a+12|0;e=k[d>>2]|0;if((k[a+8>>2]|0)>>>0>=e>>>0){c=-1;return c|0}if((b|0)==-1){k[d>>2]=e+-1;c=0;return c|0}if(!(k[a+88>>2]&16)){a=b&255;f=e+-1|0;if(a<<24>>24==(i[f>>0]|0)){g=a;h=f}else{c=-1;return c|0}}else{g=b&255;h=e+-1|0}k[d>>2]=h;i[h>>0]=g;c=b;return c|0}function Kq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;c=r;r=r+16|0;d=c+8|0;e=c+4|0;f=c;g=a+64|0;if(!(k[g>>2]|0)){h=-1;r=c;return h|0}j=a+92|0;if(!(k[j>>2]&16)){k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;l=k[a+52>>2]|0;do if(l>>>0>8)if(!(i[a+98>>0]|0)){m=k[a+56>>2]|0;n=m+((k[a+60>>2]|0)+-1)|0;k[a+24>>2]=m;o=a+20|0;k[o>>2]=m;p=a+28|0;k[p>>2]=n;q=o;s=p;t=m;u=n;v=m;break}else{m=k[a+32>>2]|0;n=m+(l+-1)|0;k[a+24>>2]=m;p=a+20|0;k[p>>2]=m;o=a+28|0;k[o>>2]=n;q=p;s=o;t=m;u=n;v=m;break}else{k[a+24>>2]=0;m=a+20|0;k[m>>2]=0;n=a+28|0;k[n>>2]=0;q=m;s=n;t=0;u=0;v=0}while(0);k[j>>2]=16;w=q;x=s;y=s;z=q;A=v;B=u;C=t}else{t=a+20|0;u=k[t>>2]|0;v=a+28|0;w=t;x=v;y=v;z=t;A=u;B=k[v>>2]|0;C=u}u=(b|0)==-1;v=a+24|0;t=k[v>>2]|0;if(u){D=t;E=C}else{if(!t){k[v>>2]=d;k[z>>2]=d;k[x>>2]=d+1;F=d}else F=t;i[F>>0]=b;F=(k[v>>2]|0)+1|0;k[v>>2]=F;D=F;E=k[z>>2]|0}a:do if((D|0)==(E|0))G=33;else{b:do if(!(i[a+98>>0]|0)){F=a+32|0;t=k[F>>2]|0;k[e>>2]=t;d=a+68|0;C=k[d>>2]|0;if(!C){H=Rd(4)|0;CCa(H);Gf(H|0,9112,1201)}q=t;t=a+72|0;s=a+52|0;j=lg[k[(k[C>>2]|0)+12>>2]&127](C,t,E,D,f,q,q+(k[s>>2]|0)|0,e)|0;q=k[z>>2]|0;c:do if((k[f>>2]|0)!=(q|0)){C=q;l=j;while(1){if((l|0)==3){I=C;G=22;break}if(l>>>0>=2)break c;n=k[F>>2]|0;m=(k[e>>2]|0)-n|0;if((FRa(n,1,m,k[g>>2]|0)|0)!=(m|0))break c;if((l|0)!=1){G=29;break}m=k[f>>2]|0;n=k[v>>2]|0;k[w>>2]=m;k[x>>2]=n;o=m;p=o+(n-m)|0;k[v>>2]=p;m=k[d>>2]|0;if(!m){G=20;break}n=k[F>>2]|0;l=lg[k[(k[m>>2]|0)+12>>2]&127](m,t,o,p,f,n,n+(k[s>>2]|0)|0,e)|0;C=k[z>>2]|0;if((k[f>>2]|0)==(C|0))break c}if((G|0)==20){H=Rd(4)|0;CCa(H);Gf(H|0,9112,1201)}else if((G|0)==22){C=(k[v>>2]|0)-I|0;if((FRa(I,1,C,k[g>>2]|0)|0)!=(C|0))break}J=v;break b}while(0);K=-1;break a}else{s=D-E|0;if((FRa(E,1,s,k[g>>2]|0)|0)!=(s|0)){K=-1;break a}J=v}while(0);k[J>>2]=A;k[w>>2]=A;k[y>>2]=B;G=33}while(0);if((G|0)==33)K=u?0:b;h=K;r=c;return h|0}function Lq(a){a=a|0;var b=0;k[a>>2]=23344;b=a+104|0;k[b>>2]=23364;fq(a+4|0);mab(b);return}function Mq(a){a=a|0;var b=0;k[a>>2]=23344;b=a+104|0;k[b>>2]=23364;fq(a+4|0);mab(b);OBa(a);return}function Nq(a){a=a|0;var b=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=23344;a=b+104|0;k[a>>2]=23364;fq(b+4|0);mab(a);return}function Oq(a){a=a|0;var b=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=23344;a=b+104|0;k[a>>2]=23364;fq(b+4|0);mab(a);OBa(b);return}function Pq(a){a=a|0;var b=0;k[a>>2]=23912;b=a+108|0;k[b>>2]=23932;fq(a+8|0);mab(b);return}function Qq(a){a=a|0;var b=0;k[a>>2]=23912;b=a+108|0;k[b>>2]=23932;fq(a+8|0);mab(b);OBa(a);return}function Rq(a){a=a|0;var b=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=23912;a=b+108|0;k[a>>2]=23932;fq(b+8|0);mab(a);return}function Sq(a){a=a|0;var b=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=23912;a=b+108|0;k[a>>2]=23932;fq(b+8|0);mab(a);OBa(b);return}function Tq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=i[a>>0]|0;d=(c&1)==0;e=d?(c&255)>>>1:k[a+4>>2]|0;if(!e){f=1;return f|0}c=d?a+1|0:k[a+8>>2]|0;a=0;d=1;a:while(1){g=i[c+a>>0]|0;b:do if(g<<24>>24>-1){h=a;j=d}else{l=g&224;m=(l|0)==192?1:(l|0)==224?2:0;if((m|0)!=0&(m+a|0)>>>0>>0){n=a;o=0}else{p=a;break a}while(1){l=n+1|0;o=o+1|0;if((i[c+l>>0]&-64)<<24>>24!=-128){h=l;j=0;break b}if(o>>>0>=m>>>0){h=l;j=d;break}else n=l}}while(0);a=h+1|0;if(a>>>0>=e>>>0){q=8;break}else d=j}if((q|0)==8)if(j){f=1;return f|0}else p=a;k[b>>2]=p;f=0;return f|0}function Uq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ar(a,b,c,d,168,31)|0}function Vq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ar(a,b,c,d,136,31)|0}function Wq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(b>>>0>28){e=-1;return e|0}e=ar(a,b,c,d,144,1)|0;return e|0}function Xq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(b>>>0>32){e=-1;return e|0}e=ar(a,b,c,d,136,1)|0;return e|0}function Yq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(b>>>0>48){e=-1;return e|0}e=ar(a,b,c,d,104,1)|0;return e|0}function Zq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(b>>>0>64){e=-1;return e|0}e=ar(a,b,c,d,72,1)|0;return e|0}function _q(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0;c=r;r=r+208|0;d=c;if((k[b+4>>2]|0)!=32){e=0;r=c;return e|0}k[5995]=(k[5995]|0)+1;f=k[b>>2]|0;b=k[a>>2]|0;g=k[a+4>>2]|0;if(!f){e=1;r=c;return e|0}if((b|0)==0&(g|0)!=0){e=1;r=c;return e|0}Fyb(d|0,0,200)|0;if(g>>>0<136){h=g;j=b}else{a=g;g=b;while(1){b=0;do{m=d+b|0;i[m>>0]=i[m>>0]^i[g+b>>0];b=b+1|0}while((b|0)!=136);br(d);b=g+136|0;m=a+-136|0;if(m>>>0<136){h=m;j=b;break}else{a=m;g=b}}}g=d+h|0;i[g>>0]=i[g>>0]^1;g=d+135|0;i[g>>0]=(l[g>>0]|0)^128;if(h){g=0;do{a=d+g|0;i[a>>0]=i[a>>0]^i[j+g>>0];g=g+1|0}while((g|0)!=(h|0))}br(d);i[f>>0]=i[d>>0]|0;i[f+1>>0]=i[d+1>>0]|0;i[f+2>>0]=i[d+2>>0]|0;i[f+3>>0]=i[d+3>>0]|0;i[f+4>>0]=i[d+4>>0]|0;i[f+5>>0]=i[d+5>>0]|0;i[f+6>>0]=i[d+6>>0]|0;i[f+7>>0]=i[d+7>>0]|0;i[f+8>>0]=i[d+8>>0]|0;i[f+9>>0]=i[d+9>>0]|0;i[f+10>>0]=i[d+10>>0]|0;i[f+11>>0]=i[d+11>>0]|0;i[f+12>>0]=i[d+12>>0]|0;i[f+13>>0]=i[d+13>>0]|0;i[f+14>>0]=i[d+14>>0]|0;i[f+15>>0]=i[d+15>>0]|0;i[f+16>>0]=i[d+16>>0]|0;i[f+17>>0]=i[d+17>>0]|0;i[f+18>>0]=i[d+18>>0]|0;i[f+19>>0]=i[d+19>>0]|0;i[f+20>>0]=i[d+20>>0]|0;i[f+21>>0]=i[d+21>>0]|0;i[f+22>>0]=i[d+22>>0]|0;i[f+23>>0]=i[d+23>>0]|0;i[f+24>>0]=i[d+24>>0]|0;i[f+25>>0]=i[d+25>>0]|0;i[f+26>>0]=i[d+26>>0]|0;i[f+27>>0]=i[d+27>>0]|0;i[f+28>>0]=i[d+28>>0]|0;i[f+29>>0]=i[d+29>>0]|0;i[f+30>>0]=i[d+30>>0]|0;i[f+31>>0]=i[d+31>>0]|0;e=1;r=c;return e|0}function $q(){k[5996]=0;k[5997]=0;k[5998]=0;return}function ar(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=r;r=r+208|0;h=g;if(!a){j=-1;r=g;return j|0}if((c|0)==0&(d|0)!=0|e>>>0>199){j=-1;r=g;return j|0}Fyb(h|0,0,200)|0;if(d>>>0>>0){k=d;m=c}else{if(!e)while(1)br(h);else{n=d;o=c}while(1){c=0;do{d=h+c|0;i[d>>0]=i[d>>0]^i[o+c>>0];c=c+1|0}while((c|0)!=(e|0));br(h);c=o+e|0;d=n-e|0;if(d>>>0>>0){k=d;m=c;break}else{n=d;o=c}}}o=h+k|0;i[o>>0]=i[o>>0]^f;f=h+(e+-1)|0;i[f>>0]=(l[f>>0]|0)^128;if(k){f=0;do{o=h+f|0;i[o>>0]=i[o>>0]^i[m+f>>0];f=f+1|0}while((f|0)!=(k|0))}br(h);if(b>>>0>=e>>>0)if(!e)while(1)br(h);else{k=a;f=b;m=0;while(1){Dyb(a+(ia(m,e)|0)|0,h|0,e|0)|0;br(h);o=k+e|0;n=f-e|0;if(n>>>0>>0){p=o;q=n;break}else{k=o;f=n;m=m+1|0}}}else{p=a;q=b}if(q){b=0;do{i[p+b>>0]=i[h+b>>0]|0;b=b+1|0}while((b|0)!=(q|0))}j=0;r=g;return j|0}function br(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0;b=a+40|0;c=a+80|0;d=a+120|0;e=a+160|0;f=a+8|0;g=a+48|0;h=a+88|0;i=a+128|0;j=a+168|0;l=a+16|0;m=a+56|0;n=a+96|0;o=a+136|0;p=a+176|0;q=a+24|0;r=a+64|0;s=a+104|0;t=a+144|0;u=a+184|0;v=a+32|0;w=a+72|0;x=a+112|0;y=a+152|0;z=a+192|0;A=a;B=c;C=d;D=e;E=g;F=h;G=i;H=j;I=m;J=n;K=o;L=p;N=r;O=s;P=t;Q=u;R=w;S=x;T=y;U=z;V=k[A>>2]|0;W=k[A+4>>2]|0;A=k[B>>2]|0;X=k[B+4>>2]|0;B=k[C>>2]|0;Y=k[C+4>>2]|0;C=k[D>>2]|0;Z=k[D+4>>2]|0;D=k[E>>2]|0;_=k[E+4>>2]|0;E=k[F>>2]|0;$=k[F+4>>2]|0;F=k[G>>2]|0;aa=k[G+4>>2]|0;G=k[H>>2]|0;ba=k[H+4>>2]|0;H=k[I>>2]|0;ca=k[I+4>>2]|0;I=k[J>>2]|0;da=k[J+4>>2]|0;J=k[K>>2]|0;ea=k[K+4>>2]|0;K=k[L>>2]|0;fa=k[L+4>>2]|0;L=k[N>>2]|0;ga=k[N+4>>2]|0;N=k[O>>2]|0;ha=k[O+4>>2]|0;O=k[P>>2]|0;ia=k[P+4>>2]|0;P=k[Q>>2]|0;ja=k[Q+4>>2]|0;Q=k[R>>2]|0;ka=k[R+4>>2]|0;R=k[S>>2]|0;la=k[S+4>>2]|0;S=k[T>>2]|0;ma=k[T+4>>2]|0;T=k[U>>2]|0;na=k[U+4>>2]|0;U=0;do{oa=b;pa=k[oa>>2]|0;qa=k[oa+4>>2]|0;oa=pa^V^A^B^C;ra=qa^W^X^Y^Z;sa=f;ta=k[sa>>2]|0;ua=k[sa+4>>2]|0;sa=D^ta^E^F^G;va=_^ua^$^aa^ba;wa=l;xa=k[wa>>2]|0;ya=k[wa+4>>2]|0;wa=H^xa^I^J^K;za=ca^ya^da^ea^fa;Aa=q;Ba=k[Aa>>2]|0;Ca=k[Aa+4>>2]|0;Aa=L^Ba^N^O^P;Da=ga^Ca^ha^ia^ja;Ea=v;Fa=k[Ea>>2]|0;Ga=k[Ea+4>>2]|0;Ea=Q^Fa^R^S^T;Ha=ka^Ga^la^ma^na;Ia=Kyb(sa|0,va|0,1)|0;Ja=M;Ka=Iyb(sa|0,va|0,63)|0;La=Ea^(Ia|Ka);Ka=Ha^(Ja|M);Ja=a;k[Ja>>2]=La^V;k[Ja+4>>2]=Ka^W;Ja=La^pa;pa=Ka^qa;qa=A^La;Ia=X^Ka;Ma=d;k[Ma>>2]=B^La;k[Ma+4>>2]=Y^Ka;Ma=e;k[Ma>>2]=C^La;k[Ma+4>>2]=Z^Ka;Ka=Kyb(wa|0,za|0,1)|0;Ma=M;La=Iyb(wa|0,za|0,63)|0;Na=(Ka|La)^oa;La=(Ma|M)^ra;Ma=ta^Na;ta=ua^La;ua=f;k[ua>>2]=Ma;k[ua+4>>2]=ta;ua=g;k[ua>>2]=D^Na;k[ua+4>>2]=_^La;ua=E^Na;Ka=$^La;Oa=F^Na;Pa=aa^La;Qa=G^Na;Na=ba^La;La=Kyb(Aa|0,Da|0,1)|0;Ra=M;Sa=Iyb(Aa|0,Da|0,63)|0;Ta=(La|Sa)^sa;sa=(Ra|M)^va;va=l;k[va>>2]=xa^Ta;k[va+4>>2]=ya^sa;ya=H^Ta;va=ca^sa;xa=n;k[xa>>2]=I^Ta;k[xa+4>>2]=da^sa;xa=J^Ta;Ra=ea^sa;Sa=p;k[Sa>>2]=K^Ta;k[Sa+4>>2]=fa^sa;sa=Kyb(Ea|0,Ha|0,1)|0;Sa=M;Ta=Iyb(Ea|0,Ha|0,63)|0;Ha=(sa|Ta)^wa;wa=(Sa|M)^za;za=Ba^Ha;Ba=Ca^wa;Ca=L^Ha;Sa=ga^wa;Ta=N^Ha;sa=ha^wa;Ea=O^Ha;La=ia^wa;Ua=u;Va=k[Ua>>2]^Ha;Ha=k[Ua+4>>2]^wa;wa=Kyb(oa|0,ra|0,1)|0;Ua=M;Wa=Iyb(oa|0,ra|0,63)|0;ra=Aa^(wa|Wa);Wa=Da^(Ua|M);Ua=Fa^ra;Fa=Ga^Wa;Ga=w;Da=k[Ga>>2]^ra;wa=k[Ga+4>>2]^Wa;Ga=x;Aa=k[Ga>>2]^ra;oa=k[Ga+4>>2]^Wa;Ga=y;Xa=k[Ga>>2]^ra;Ya=k[Ga+4>>2]^Wa;Ga=z;Za=k[Ga>>2]^ra;ra=k[Ga+4>>2]^Wa;Wa=Kyb(Ma|0,ta|0,1)|0;Ga=M;_a=Iyb(Ma|0,ta|0,63)|0;ta=c;k[ta>>2]=Wa|_a;k[ta+4>>2]=Ga|M;Ga=Kyb(qa|0,Ia|0,3)|0;ta=M;_a=Iyb(qa|0,Ia|0,61)|0;Ia=m;k[Ia>>2]=Ga|_a;k[Ia+4>>2]=ta|M;ta=Kyb(ya|0,va|0,6)|0;Ia=M;_a=Iyb(ya|0,va|0,58)|0;va=h;k[va>>2]=ta|_a;k[va+4>>2]=Ia|M;Ia=Kyb(ua|0,Ka|0,10)|0;va=M;_a=Iyb(ua|0,Ka|0,54)|0;Ka=o;k[Ka>>2]=Ia|_a;k[Ka+4>>2]=va|M;va=Kyb(xa|0,Ra|0,15)|0;Ka=M;_a=Iyb(xa|0,Ra|0,49)|0;Ra=t;k[Ra>>2]=va|_a;k[Ra+4>>2]=Ka|M;Ka=Kyb(Ea|0,La|0,21)|0;Ra=M;_a=Iyb(Ea|0,La|0,43)|0;La=Ka|_a;_a=Ra|M;Ra=Kyb(za|0,Ba|0,28)|0;Ka=M;Ea=Iyb(za|0,Ba|0,36)|0;Ba=Ra|Ea;Ea=Ka|M;Ka=Kyb(Ja|0,pa|0,36)|0;Ra=M;za=Iyb(Ja|0,pa|0,28)|0;pa=i;k[pa>>2]=Ka|za;k[pa+4>>2]=Ra|M;Ra=Kyb(Oa|0,Pa|0,45)|0;pa=M;za=Iyb(Oa|0,Pa|0,19)|0;Pa=Ra|za;za=pa|M;pa=r;k[pa>>2]=Pa;k[pa+4>>2]=za;pa=Kyb(Ca|0,Sa|0,55)|0;Ra=M;Oa=Iyb(Ca|0,Sa|0,9)|0;Sa=j;k[Sa>>2]=pa|Oa;k[Sa+4>>2]=Ra|M;Ra=Kyb(Qa|0,Na|0,2)|0;Sa=M;Oa=Iyb(Qa|0,Na|0,62)|0;Na=z;k[Na>>2]=Ra|Oa;k[Na+4>>2]=Sa|M;Sa=Kyb(Za|0,ra|0,14)|0;Na=M;Oa=Iyb(Za|0,ra|0,50)|0;ra=Sa|Oa;Oa=Na|M;Na=d;Sa=k[Na>>2]|0;Za=k[Na+4>>2]|0;Na=Kyb(Ua|0,Fa|0,27)|0;Ra=M;Qa=Iyb(Ua|0,Fa|0,37)|0;Fa=d;k[Fa>>2]=Na|Qa;k[Fa+4>>2]=Ra|M;Ra=Kyb(Sa|0,Za|0,41)|0;Fa=M;Qa=Iyb(Sa|0,Za|0,23)|0;Za=u;k[Za>>2]=Ra|Qa;k[Za+4>>2]=Fa|M;Fa=Kyb(Va|0,Ha|0,56)|0;Za=M;Qa=Iyb(Va|0,Ha|0,8)|0;Ha=y;k[Ha>>2]=Fa|Qa;k[Ha+4>>2]=Za|M;Za=Kyb(Xa|0,Ya|0,8)|0;Ha=M;Qa=Iyb(Xa|0,Ya|0,56)|0;Ya=Za|Qa;Qa=Ha|M;Ha=n;Za=k[Ha>>2]|0;Xa=k[Ha+4>>2]|0;Ha=Kyb(Ta|0,sa|0,25)|0;Fa=M;Va=Iyb(Ta|0,sa|0,39)|0;sa=Ha|Va;Va=Fa|M;Fa=l;Ha=k[Fa>>2]|0;Ta=k[Fa+4>>2]|0;Fa=Kyb(Za|0,Xa|0,43)|0;Ra=M;Sa=Iyb(Za|0,Xa|0,21)|0;Xa=Fa|Sa;Sa=Ra|M;Ra=e;Fa=k[Ra>>2]|0;Za=k[Ra+4>>2]|0;Ra=Kyb(Ha|0,Ta|0,62)|0;Na=M;Ua=Iyb(Ha|0,Ta|0,2)|0;Ta=e;k[Ta>>2]=Ra|Ua;k[Ta+4>>2]=Na|M;Na=Kyb(Fa|0,Za|0,18)|0;Ta=M;Ua=Iyb(Fa|0,Za|0,46)|0;Za=Na|Ua;Ua=Ta|M;Ta=p;Na=k[Ta>>2]|0;Fa=k[Ta+4>>2]|0;Ta=Kyb(Aa|0,oa|0,39)|0;Ra=M;Ha=Iyb(Aa|0,oa|0,25)|0;oa=p;k[oa>>2]=Ta|Ha;k[oa+4>>2]=Ra|M;Ra=Kyb(Na|0,Fa|0,61)|0;oa=M;Ha=Iyb(Na|0,Fa|0,3)|0;Fa=Ra|Ha;Ha=oa|M;oa=g;Ra=k[oa>>2]|0;Na=k[oa+4>>2]|0;oa=Kyb(Da|0,wa|0,20)|0;Ta=M;Aa=Iyb(Da|0,wa|0,44)|0;wa=oa|Aa;Aa=Ta|M;Ta=Kyb(Ra|0,Na|0,44)|0;oa=M;Da=Iyb(Ra|0,Na|0,20)|0;Na=Ta|Da;Da=oa|M;oa=a;Ta=k[oa>>2]|0;Ra=k[oa+4>>2]|0;oa=a;k[oa>>2]=Xa&~Na^Ta;k[oa+4>>2]=Sa&~Da^Ra;oa=f;k[oa>>2]=La&~Xa^Na;k[oa+4>>2]=_a&~Sa^Da;oa=l;k[oa>>2]=ra&~La^Xa;k[oa+4>>2]=Oa&~_a^Sa;Sa=q;k[Sa>>2]=Ta&~ra^La;k[Sa+4>>2]=Ra&~Oa^_a;_a=v;k[_a>>2]=ra^Na&~Ta;k[_a+4>>2]=Oa^Da&~Ra;Ra=m;Da=k[Ra>>2]|0;Oa=k[Ra+4>>2]|0;Ra=b;k[Ra>>2]=Da&~wa^Ba;k[Ra+4>>2]=Oa&~Aa^Ea;D=Pa&~Da^wa;_=za&~Oa^Aa;Ra=g;k[Ra>>2]=D;k[Ra+4>>2]=_;H=Fa&~Pa^Da;ca=Ha&~za^Oa;Oa=m;k[Oa>>2]=H;k[Oa+4>>2]=ca;L=Ba&~Fa^Pa;ga=Ea&~Ha^za;za=r;k[za>>2]=L;k[za+4>>2]=ga;Q=Fa^wa&~Ba;ka=Ha^Aa&~Ea;Ea=w;k[Ea>>2]=Q;k[Ea+4>>2]=ka;Ea=c;Aa=k[Ea>>2]|0;Ha=k[Ea+4>>2]|0;Ea=h;Ba=k[Ea>>2]|0;wa=k[Ea+4>>2]|0;A=sa&~Ba^Aa;X=Va&~wa^Ha;Ea=c;k[Ea>>2]=A;k[Ea+4>>2]=X;E=Ya&~sa^Ba;$=Qa&~Va^wa;Ea=h;k[Ea>>2]=E;k[Ea+4>>2]=$;I=Za&~Ya^sa;da=Ua&~Qa^Va;Va=n;k[Va>>2]=I;k[Va+4>>2]=da;N=Aa&~Za^Ya;ha=Ha&~Ua^Qa;Qa=s;k[Qa>>2]=N;k[Qa+4>>2]=ha;R=Za^Ba&~Aa;la=Ua^wa&~Ha;Ha=x;k[Ha>>2]=R;k[Ha+4>>2]=la;Ha=d;wa=k[Ha>>2]|0;Ua=k[Ha+4>>2]|0;Ha=i;Aa=k[Ha>>2]|0;Ba=k[Ha+4>>2]|0;Ha=o;Za=k[Ha>>2]|0;Qa=k[Ha+4>>2]|0;Ha=t;Ya=k[Ha>>2]|0;Va=k[Ha+4>>2]|0;Ha=y;sa=k[Ha>>2]|0;Ea=k[Ha+4>>2]|0;B=Za&~Aa^wa;Y=Qa&~Ba^Ua;Ha=d;k[Ha>>2]=B;k[Ha+4>>2]=Y;F=Ya&~Za^Aa;aa=Va&~Qa^Ba;Ha=i;k[Ha>>2]=F;k[Ha+4>>2]=aa;J=sa&~Ya^Za;ea=Ea&~Va^Qa;Qa=o;k[Qa>>2]=J;k[Qa+4>>2]=ea;O=wa&~sa^Ya;ia=Ua&~Ea^Va;Va=t;k[Va>>2]=O;k[Va+4>>2]=ia;S=sa^Aa&~wa;ma=Ea^Ba&~Ua;Ua=y;k[Ua>>2]=S;k[Ua+4>>2]=ma;Ua=e;Ba=k[Ua>>2]|0;Ea=k[Ua+4>>2]|0;Ua=j;wa=k[Ua>>2]|0;Aa=k[Ua+4>>2]|0;Ua=p;sa=k[Ua>>2]|0;Va=k[Ua+4>>2]|0;Ua=u;Ya=k[Ua>>2]|0;Qa=k[Ua+4>>2]|0;Ua=z;Za=k[Ua>>2]|0;Ha=k[Ua+4>>2]|0;C=sa&~wa^Ba;Z=Va&~Aa^Ea;Ua=e;k[Ua>>2]=C;k[Ua+4>>2]=Z;G=Ya&~sa^wa;ba=Qa&~Va^Aa;Ua=j;k[Ua>>2]=G;k[Ua+4>>2]=ba;K=Za&~Ya^sa;fa=Ha&~Qa^Va;Va=p;k[Va>>2]=K;k[Va+4>>2]=fa;P=Ba&~Za^Ya;ja=Ea&~Ha^Qa;Qa=u;k[Qa>>2]=P;k[Qa+4>>2]=ja;T=Za^wa&~Ba;na=Ha^Aa&~Ea;Ea=z;k[Ea>>2]=T;k[Ea+4>>2]=na;Ea=1408+(U<<3)|0;Aa=a;V=k[Aa>>2]^k[Ea>>2];W=k[Aa+4>>2]^k[Ea+4>>2];Ea=a;k[Ea>>2]=V;k[Ea+4>>2]=W;U=U+1|0}while((U|0)!=24);return}function cr(a){a=a|0;i[a>>0]=1;i[a+1>>0]=0;i[a+2>>0]=0;i[a+3>>0]=0;return}function dr(a){a=a|0;i[a>>0]=1;i[a+1>>0]=0;i[a+2>>0]=0;i[a+3>>0]=0;return}function er(a){a=a|0;i[a>>0]=0;i[a+1>>0]=0;i[a+2>>0]=0;i[a+3>>0]=0;i[a+1>>0]=1;i[a+2>>0]=0;i[a+3>>0]=0;return}function fr(a){a=a|0;var b=0,c=0,d=0;b=a+92|0;c=a;d=c+92|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(d|0));i[b>>0]=1;b=a+93|0;i[b>>0]=0;i[b+1>>0]=0;i[b+2>>0]=0;i[b+3>>0]=0;return}function gr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+92|0;d=a;e=d+92|0;do{k[d>>2]=0;d=d+4|0}while((d|0)<(e|0));d=l[b>>0]|l[b+1>>0]<<8|l[b+2>>0]<<16|l[b+3>>0]<<24;i[c>>0]=d;i[c+1>>0]=d>>8;i[c+2>>0]=d>>16;i[c+3>>0]=d>>24;i[a+96>>0]=0;return}function hr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;e=r;r=r+32|0;f=e;g=e+12|0;h=(i[b>>0]&1)==0;j=h?b+1|0:k[b+8>>2]|0;do if(h){l=10;m=j+10|0;n=6}else{o=k[b>>2]&-2;p=o+-1|0;q=j+p|0;if(p>>>0<=4294967279){if(p>>>0<11){l=p;m=q;n=6;break}}else GBa(g);s=o+15&-16;o=KBa(s)|0;k[g+8>>2]=o;k[g>>2]=s|1;k[g+4>>2]=p;t=q;u=p;v=o}while(0);if((n|0)==6){i[g>>0]=l<<1;t=m;u=l;v=g+1|0}l=j;j=v;while(1){i[j>>0]=i[l>>0]|0;l=l+1|0;if((l|0)==(t|0))break;else j=j+1|0}i[v+u>>0]=0;u=a+48|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[g>>2]=k[u>>2];k[g+4>>2]=k[u+4>>2];k[g+8>>2]=k[u+8>>2];k[u>>2]=k[f>>2];k[u+4>>2]=k[f+4>>2];k[u+8>>2]=k[f+8>>2];f=i[u>>0]|0;if(!(f&1)){w=u+1|0;y=(f&255)>>>1}else{w=k[a+56>>2]|0;y=k[a+52>>2]|0}x=0;f=Va(92,a|0,w|0,w+y|0,c|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;K2a(g);Sc(d|0)}else{K2a(g);r=e;return f|0}return 0}function ir(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;f=r;r=r+32|0;g=f+12|0;h=f;j=a+92|0;l=(i[j>>0]|0)!=0;k[a+60>>2]=b;k[a+64>>2]=c;m=a+96|0;i[m>>0]=l&e&1;k[a+68>>2]=b;k[a+72>>2]=0;k[a+76>>2]=0;e=a+80|0;S2a(e,329672)|0;Ls(a+24|0);l=a+20|0;n=k[l>>2]|0;if(!n){o=a+4|0;p=o;q=a+16|0;s=o;t=k[a+8>>2]|0}else{o=a+16|0;u=a+8|0;v=a+4|0;w=k[u>>2]|0;y=n;n=w;z=w;while(1){w=y+-1|0;k[l>>2]=w;A=k[v>>2]|0;if((1-y-(k[o>>2]|0)+((n|0)==(A|0)?0:(n-A<<8)+-1|0)|0)>>>0>2047){OBa(k[n+-4>>2]|0);A=(k[u>>2]|0)+-4|0;k[u>>2]=A;B=A;C=k[l>>2]|0;D=B;E=B}else{C=w;D=z;E=n}if(!C){p=v;q=o;s=v;t=D;break}else{y=C;n=E;z=D}}}D=k[p>>2]|0;p=k[q>>2]|0;if((((t|0)==(D|0)?0:(t-D<<8)+-1|0)|0)==(p|0)){Ms(a);F=k[q>>2]|0;G=k[l>>2]|0;H=k[s>>2]|0}else{F=p;G=0;H=D}D=G+F|0;k[(k[H+(D>>>10<<2)>>2]|0)+((D&1023)<<2)>>2]=d;k[l>>2]=G+1;k[6004]=0;G=kr(a)|0;if(!(i[j>>0]|0))sr(a,g)|0;else do sr(a,g)|0;while((k[g>>2]|0)==12);if(i[m>>0]|0){m=i[e>>0]|0;if(!(m&1))I=(m&255)>>>1;else I=k[a+84>>2]|0;if(I)Ov(d,e,2)}if(!(i[a+93>>0]|0)){J=G;r=f;return J|0}if(bv(d)|0){J=G;r=f;return J|0}if(cv(d)|0){J=G;r=f;return J|0}k[g>>2]=13;k[g+4>>2]=b;k[g+8>>2]=c;q2a(h,210082,65);x=0;db(61,a|0,h|0,g|0,0)|0;g=x;x=0;if(g&1){g=Hc()|0;K2a(h);Sc(g|0)}K2a(h);J=0;r=f;return J|0}function jr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;e=r;r=r+16|0;f=e;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;Fa(105,b|0,f|0,-1)|0;b=x;x=0;if(b&1){g=Hc()|0;h=M;K2a(f);Sc(g|0)}b=i[f>>0]|0;j=(b&1)==0;l=j?f+1|0:k[f+8>>2]|0;x=0;m=Va(92,a|0,l|0,l+(j?(b&255)>>>1:k[f+4>>2]|0)|0,c|0,d|0)|0;d=x;x=0;if(d&1){g=Hc()|0;h=M;K2a(f);Sc(g|0)}else{K2a(f);r=e;return m|0}return 0}function kr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;b=r;r=r+144|0;c=b+108|0;d=b+120|0;e=b+72|0;f=b+48|0;g=b+24|0;h=b;j=b+96|0;l=k[6004]|0;if((l|0)>999){q2a(c,210148,35);x=0;va(1477,c|0);x=0;m=Hc()|0;n=M;K2a(c);o=n;p=m;Sc(p|0)}k[6004]=l+1;if(!(i[a+92>>0]|0))sr(a,d)|0;else do sr(a,d)|0;while((k[d>>2]|0)==12);l=a+96|0;if(i[l>>0]|0){m=a+80|0;n=i[m>>0]|0;if(!(n&1))q=(n&255)>>>1;else q=k[a+84>>2]|0;if(q){q=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;Ov(k[(k[(k[a+4>>2]|0)+(q>>>10<<2)>>2]|0)+((q&1023)<<2)>>2]|0,m,0);S2a(m,329672)|0}}a:do switch(k[d>>2]|0){case 1:{m=or(a,d)|0;q=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;Sv(k[(k[(k[a+4>>2]|0)+(q>>>10<<2)>>2]|0)+((q&1023)<<2)>>2]|0,(k[a+68>>2]|0)-(k[a+60>>2]|0)|0);s=m;t=42;break}case 3:{m=pr(a,d)|0;q=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;Sv(k[(k[(k[a+4>>2]|0)+(q>>>10<<2)>>2]|0)+((q&1023)<<2)>>2]|0,(k[a+68>>2]|0)-(k[a+60>>2]|0)|0);s=m;t=42;break}case 6:{s=qr(a,d)|0;t=42;break}case 5:{s=rr(a,d)|0;t=42;break}case 7:{tu(e,1);m=a+20|0;q=a+16|0;n=(k[m>>2]|0)+-1+(k[q>>2]|0)|0;c=a+4|0;x=0;xa(643,k[(k[(k[c>>2]|0)+(n>>>10<<2)>>2]|0)+((n&1023)<<2)>>2]|0,e|0);n=x;x=0;if((!(n&1)?(n=(k[m>>2]|0)+-1+(k[q>>2]|0)|0,u=a+60|0,x=0,xa(644,k[(k[(k[c>>2]|0)+(n>>>10<<2)>>2]|0)+((n&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[u>>2]|0)|0),n=x,x=0,!(n&1)):0)?(n=(k[m>>2]|0)+-1+(k[q>>2]|0)|0,x=0,xa(645,k[(k[(k[c>>2]|0)+(n>>>10<<2)>>2]|0)+((n&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[u>>2]|0)|0),u=x,x=0,!(u&1)):0){xu(e);s=1;t=42;break a}u=Hc()|0;n=M;xu(e);o=n;p=u;Sc(p|0);break}case 8:{tu(f,0);u=a+20|0;n=a+16|0;c=(k[u>>2]|0)+-1+(k[n>>2]|0)|0;q=a+4|0;x=0;xa(643,k[(k[(k[q>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,f|0);c=x;x=0;if((!(c&1)?(c=(k[u>>2]|0)+-1+(k[n>>2]|0)|0,m=a+60|0,x=0,xa(644,k[(k[(k[q>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[m>>2]|0)|0),c=x,x=0,!(c&1)):0)?(c=(k[u>>2]|0)+-1+(k[n>>2]|0)|0,x=0,xa(645,k[(k[(k[q>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[m>>2]|0)|0),m=x,x=0,!(m&1)):0){xu(f);s=1;t=42;break a}m=Hc()|0;c=M;xu(f);o=c;p=m;Sc(p|0);break}case 9:{iu(g,0);m=a+20|0;c=a+16|0;q=(k[m>>2]|0)+-1+(k[c>>2]|0)|0;n=a+4|0;x=0;xa(643,k[(k[(k[n>>2]|0)+(q>>>10<<2)>>2]|0)+((q&1023)<<2)>>2]|0,g|0);q=x;x=0;if((!(q&1)?(q=(k[m>>2]|0)+-1+(k[c>>2]|0)|0,u=a+60|0,x=0,xa(644,k[(k[(k[n>>2]|0)+(q>>>10<<2)>>2]|0)+((q&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[u>>2]|0)|0),q=x,x=0,!(q&1)):0)?(q=(k[m>>2]|0)+-1+(k[c>>2]|0)|0,x=0,xa(645,k[(k[(k[n>>2]|0)+(q>>>10<<2)>>2]|0)+((q&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[u>>2]|0)|0),u=x,x=0,!(u&1)):0){xu(g);s=1;t=42;break a}u=Hc()|0;q=M;xu(g);o=q;p=u;Sc(p|0);break}case 4:case 2:case 10:{if(i[a+94>>0]|0){u=a+68|0;k[u>>2]=(k[u>>2]|0)+-1;iu(h,0);q=a+20|0;n=a+16|0;c=(k[q>>2]|0)+-1+(k[n>>2]|0)|0;m=a+4|0;x=0;xa(643,k[(k[(k[m>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,h|0);c=x;x=0;if((!(c&1)?(c=(k[q>>2]|0)+-1+(k[n>>2]|0)|0,v=a+60|0,x=0,xa(644,k[(k[(k[m>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[u>>2]|0)+-1-(k[v>>2]|0)|0),c=x,x=0,!(c&1)):0)?(c=(k[q>>2]|0)+-1+(k[n>>2]|0)|0,x=0,xa(645,k[(k[(k[m>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[u>>2]|0)-(k[v>>2]|0)|0),v=x,x=0,!(v&1)):0){xu(h);s=1;t=42;break a}v=Hc()|0;u=M;xu(h);o=u;p=v;Sc(p|0)}break}default:{}}while(0);if((t|0)==42){if(i[l>>0]|0){k[a+72>>2]=k[a+68>>2];l=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;k[a+76>>2]=k[(k[(k[a+4>>2]|0)+(l>>>10<<2)>>2]|0)+((l&1023)<<2)>>2]}k[6004]=(k[6004]|0)+-1;w=s;r=b;return w|0}s=a+20|0;l=a+16|0;t=(k[s>>2]|0)+-1+(k[l>>2]|0)|0;h=a+4|0;g=a+60|0;Rv(k[(k[(k[h>>2]|0)+(t>>>10<<2)>>2]|0)+((t&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[g>>2]|0)|0);t=(k[s>>2]|0)+-1+(k[l>>2]|0)|0;Sv(k[(k[(k[h>>2]|0)+(t>>>10<<2)>>2]|0)+((t&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[g>>2]|0)|0);q2a(j,210184,46);x=0;db(61,a|0,j|0,d|0,0)|0;d=x;x=0;if(d&1){d=Hc()|0;a=M;K2a(j);o=a;p=d;Sc(p|0)}else{K2a(j);w=0;r=b;return w|0}return 0}function lr(a,b){a=a|0;b=b|0;if(!(i[a+92>>0]|0)){sr(a,b)|0;return}do sr(a,b)|0;while((k[b>>2]|0)==12);return}function mr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;e=r;r=r+32|0;f=e;g=f+12|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[f>>2]=k[c>>2];k[f+4>>2]=k[c+4>>2];k[f+8>>2]=k[c+8>>2];x=0;Ta(493,g|0,b|0)|0;b=x;x=0;if(b&1){h=Hc()|0;i=M;K2a(g);Sc(h|0)}b=f+24|0;k[b>>2]=d;d=a+32|0;c=k[d>>2]|0;j=a+28|0;l=k[j>>2]|0;m=c-l>>2;n=a+40|0;o=k[n>>2]|0;p=a+44|0;q=k[p>>2]|0;s=l;l=c;do if((((m|0)==0?0:(m*146|0)+-1|0)|0)==(q+o|0)){x=0;va(1478,a+24|0);c=x;x=0;if(c&1){h=Hc()|0;i=M;K2a(g);Sc(h|0)}else{t=k[n>>2]|0;u=k[p>>2]|0;v=k[d>>2]|0;w=k[j>>2]|0;break}}else{t=o;u=q;v=l;w=s}while(0);s=u+t|0;if((v|0)==(w|0))y=0;else y=(k[w+(((s>>>0)/146|0)<<2)>>2]|0)+(((s>>>0)%146|0)*28|0)|0;k[y>>2]=k[f>>2];k[y+4>>2]=k[f+4>>2];k[y+8>>2]=k[f+8>>2];x=0;xa(604,y+12|0,g|0);f=x;x=0;if(f&1){h=Hc()|0;i=M;K2a(g);Sc(h|0)}else{k[y+24>>2]=k[b>>2];k[p>>2]=(k[p>>2]|0)+1;K2a(g);r=e;return 0}return 0}function nr(a){a=a|0;var b=0;b=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;return k[(k[(k[a+4>>2]|0)+(b>>>10<<2)>>2]|0)+((b&1023)<<2)>>2]|0}function or(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;c=r;r=r+224|0;d=c+204|0;e=c+192|0;f=c+180|0;g=c+168|0;h=c+156|0;j=c+144|0;l=c+132|0;m=c+120|0;n=c+24|0;o=c;p=c+96|0;q=c+108|0;s=c+72|0;t=c+84|0;u=c+60|0;v=c+48|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;xa(588,n|0,7);w=x;x=0;if(w&1){w=Hc()|0;y=M;z=w;K2a(m);Sc(z|0)}w=a+20|0;A=a+16|0;B=(k[w>>2]|0)+-1+(k[A>>2]|0)|0;C=a+4|0;x=0;xa(643,k[(k[(k[C>>2]|0)+(B>>>10<<2)>>2]|0)+((B&1023)<<2)>>2]|0,n|0);B=x;x=0;a:do if(!(B&1)?(D=(k[w>>2]|0)+-1+(k[A>>2]|0)|0,x=0,xa(644,k[(k[(k[C>>2]|0)+(D>>>10<<2)>>2]|0)+((D&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[a+60>>2]|0)|0),D=x,x=0,!(D&1)):0){D=a+8|0;E=a+95|0;F=m+1|0;G=m+8|0;H=m+4|0;I=a+44|0;J=a+24|0;b:while(1){x=0;Ta(509,a|0,l|0)|0;K=x;x=0;if(K&1){L=13;break}c:while(1){K=k[l>>2]|0;switch(K|0){case 2:{N=K;L=16;break c;break}case 12:break;default:{O=K;break c}}x=0;Ta(509,a|0,l|0)|0;K=x;x=0;if(K&1){L=12;break b}}if((L|0)==16){L=0;K=i[m>>0]|0;if(!(((K&1)==0?(K&255)>>>1:k[H>>2]|0)|0)){P=1;L=100;break}else O=N}x=0;Ta(496,m|0,329672)|0;K=x;x=0;if(K&1){L=13;break}switch(O|0){case 5:{x=0;K=Fa(106,a|0,l|0,m|0)|0;Q=x;x=0;if(Q&1){L=13;break b}if(!K){L=21;break b}break}case 6:{if(!(i[E>>0]|0)){L=90;break b}x=0;xa(588,o|0,0);K=x;x=0;if(K&1){L=13;break b}x=0;K=Fa(107,a|0,l|0,o|0)|0;Q=x;x=0;if(Q&1){L=35;break b}if(!K){L=30;break b}x=0;K=Ba(578,o|0)|0;Q=x;x=0;if(Q&1){L=35;break b}Q=RLa(K)|0;x=0;fb(140,p|0,K|0,Q|0);Q=x;x=0;if(Q&1){L=35;break b}if(!(i[m>>0]&1)){i[F>>0]=0;i[m>>0]=0}else{i[k[G>>2]>>0]=0;k[H>>2]=0}x=0;xa(603,m|0,0);Q=x;x=0;if(Q&1){L=44;break b};k[m>>2]=k[p>>2];k[m+4>>2]=k[p+4>>2];k[m+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;K2a(p);xu(o);break}default:{L=90;break b}}x=0;Ta(509,a|0,q|0)|0;Q=x;x=0;if(Q&1){L=13;break}if((k[q>>2]|0)!=11){L=49;break}Q=(k[w>>2]|0)+-1+(k[A>>2]|0)|0;x=0;K=Ta(475,k[(k[(k[C>>2]|0)+(Q>>>10<<2)>>2]|0)+((Q&1023)<<2)>>2]|0,m|0)|0;Q=x;x=0;if(Q&1){L=13;break}Q=K;K=k[D>>2]|0;R=k[C>>2]|0;S=k[A>>2]|0;T=k[w>>2]|0;U=R;if((((K|0)==(R|0)?0:(K-R<<8)+-1|0)|0)==(T+S|0)){x=0;va(1479,a|0);R=x;x=0;if(R&1){L=13;break}V=k[A>>2]|0;W=k[w>>2]|0;X=k[C>>2]|0}else{V=S;W=T;X=U}U=W+V|0;k[(k[X+(U>>>10<<2)>>2]|0)+((U&1023)<<2)>>2]=Q;k[w>>2]=W+1;x=0;Q=Ba(579,a|0)|0;U=x;x=0;if(U&1){L=13;break}U=k[w>>2]|0;k[w>>2]=U+-1;T=k[D>>2]|0;S=k[C>>2]|0;if((1-U-(k[A>>2]|0)+((T|0)==(S|0)?0:(T-S<<8)+-1|0)|0)>>>0>2047){OBa(k[T+-4>>2]|0);k[D>>2]=(k[D>>2]|0)+-4}if(!Q){L=67;break}x=0;Ta(509,a|0,t|0)|0;Q=x;x=0;if(Q&1){L=13;break}Q=k[t>>2]|0;switch(Q|0){case 12:case 10:case 2:{Y=Q;break}default:{L=74;break b}}d:while(1){switch(Y|0){case 2:{Z=1;L=88;break b;break}case 12:break;default:break d}x=0;Ta(509,a|0,t|0)|0;Q=x;x=0;if(Q&1){L=11;break b}Y=k[t>>2]|0}}e:switch(L|0){case 11:{_=Hc()|0;$=M;L=15;break a;break}case 12:{_=Hc()|0;$=M;L=15;break a;break}case 13:{_=Hc()|0;$=M;L=15;break a;break}case 21:{D=k[I>>2]|0;f:while(1){x=0;Ta(509,a|0,j|0)|0;H=x;x=0;if(H&1){L=10;break}switch(k[j>>2]|0){case 0:case 2:{break f;break}default:{}}}if((L|0)==10){H=Hc()|0;_=H;$=M;L=15;break a}x=0;xa(646,J|0,D|0);H=x;x=0;if(H&1){L=14;break a}P=0;xu(n);K2a(m);r=c;return P|0}case 30:{H=k[I>>2]|0;g:while(1){x=0;Ta(509,a|0,h|0)|0;G=x;x=0;if(G&1){L=34;break}switch(k[h>>2]|0){case 0:case 2:{break g;break}default:{}}}if((L|0)==34){D=Hc()|0;aa=D;ba=M;L=37;break}x=0;xa(646,J|0,H|0);D=x;x=0;if(D&1){D=Hc()|0;aa=D;ba=M;L=37;break}xu(o);P=0;xu(n);K2a(m);r=c;return P|0}case 35:{D=Hc()|0;aa=D;ba=M;L=37;break}case 44:{D=Hc(0)|0;Fg(D);break}case 49:{x=0;fb(140,s|0,210231,36);D=x;x=0;if(D&1){L=14;break a}x=0;db(61,a|0,s|0,q|0,0)|0;D=x;x=0;do if(!(D&1)){G=k[I>>2]|0;h:while(1){x=0;Ta(509,a|0,g|0)|0;F=x;x=0;if(F&1){L=56;break}switch(k[g>>2]|0){case 0:case 2:{break h;break}default:{}}}if((L|0)==56){F=Hc()|0;ca=F;da=M;break}x=0;xa(646,J|0,G|0);F=x;x=0;if(!(F&1)){K2a(s);L=87;break e}else L=57}else L=57;while(0);if((L|0)==57){D=Hc()|0;ca=D;da=M}K2a(s);ea=ca;fa=da;break a;break}case 67:{D=k[I>>2]|0;i:while(1){x=0;Ta(509,a|0,f|0)|0;H=x;x=0;if(H&1){L=9;break}switch(k[f>>2]|0){case 0:case 2:{break i;break}default:{}}}if((L|0)==9){H=Hc()|0;_=H;$=M;L=15;break a}x=0;xa(646,J|0,D|0);H=x;x=0;if(H&1){L=14;break a}L=87;break}case 74:{x=0;fb(140,u|0,210268,40);H=x;x=0;if(H&1){L=14;break a}x=0;db(61,a|0,u|0,t|0,0)|0;H=x;x=0;do if(!(H&1)){F=k[I>>2]|0;j:while(1){x=0;Ta(509,a|0,e|0)|0;E=x;x=0;if(E&1){L=81;break}switch(k[e>>2]|0){case 0:case 2:{break j;break}default:{}}}if((L|0)==81){G=Hc()|0;ga=G;ha=M;break}x=0;xa(646,J|0,F|0);G=x;x=0;if(!(G&1)){K2a(u);Z=0;L=88;break e}else L=82}else L=82;while(0);if((L|0)==82){H=Hc()|0;ga=H;ha=M}K2a(u);ea=ga;fa=ha;break a;break}case 90:{x=0;fb(140,v|0,210309,33);H=x;x=0;if(H&1){L=14;break a}x=0;db(61,a|0,v|0,l|0,0)|0;H=x;x=0;do if(!(H&1)){D=k[I>>2]|0;k:while(1){x=0;Ta(509,a|0,d|0)|0;G=x;x=0;if(G&1){L=97;break}switch(k[d>>2]|0){case 0:case 2:{break k;break}default:{}}}if((L|0)==97){F=Hc()|0;ia=F;ja=M;break}x=0;xa(646,J|0,D|0);F=x;x=0;if(!(F&1)){K2a(v);P=0;xu(n);K2a(m);r=c;return P|0}else L=98}else L=98;while(0);if((L|0)==98){J=Hc()|0;ia=J;ja=M}K2a(v);ea=ia;fa=ja;break a;break}case 100:{xu(n);K2a(m);r=c;return P|0}}if((L|0)==37){xu(o);ea=aa;fa=ba;break}else if((L|0)==87){P=0;xu(n);K2a(m);r=c;return P|0}else if((L|0)==88){P=Z;xu(n);K2a(m);r=c;return P|0}}else L=14;while(0);if((L|0)==14){P=Hc()|0;_=P;$=M;L=15}if((L|0)==15){ea=_;fa=$}xu(n);y=fa;z=ea;K2a(m);Sc(z|0);return 0}function pr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+96|0;d=c+72|0;e=c+60|0;f=c;g=c+48|0;h=c+36|0;j=c+24|0;iu(f,6);l=a+20|0;m=a+16|0;n=(k[l>>2]|0)+-1+(k[m>>2]|0)|0;o=a+4|0;x=0;xa(643,k[(k[(k[o>>2]|0)+(n>>>10<<2)>>2]|0)+((n&1023)<<2)>>2]|0,f|0);n=x;x=0;do if(!(n&1)?(p=(k[l>>2]|0)+-1+(k[m>>2]|0)|0,x=0,xa(644,k[(k[(k[o>>2]|0)+(p>>>10<<2)>>2]|0)+((p&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[a+60>>2]|0)|0),p=x,x=0,!(p&1)):0){p=a+68|0;q=k[p>>2]|0;s=k[a+64>>2]|0;a:do if((q|0)==(s|0))t=q;else{u=q;while(1){switch(i[u>>0]|0){case 10:case 13:case 9:case 32:break;default:{t=u;break a}}u=u+1|0;k[p>>2]=u;if((u|0)==(s|0)){t=s;break a}}}while(0);if((i[t>>0]|0)==93){x=0;Ta(509,a|0,g|0)|0;s=x;x=0;if(s&1){v=13;break}w=1;xu(f);r=c;return w|0}s=a+8|0;p=0;b:while(1){q=(k[l>>2]|0)+-1+(k[m>>2]|0)|0;u=p+1|0;x=0;y=Ta(481,k[(k[(k[o>>2]|0)+(q>>>10<<2)>>2]|0)+((q&1023)<<2)>>2]|0,p|0)|0;q=x;x=0;if(q&1){v=12;break}q=y;y=k[s>>2]|0;z=k[o>>2]|0;A=k[m>>2]|0;B=k[l>>2]|0;C=z;if((((y|0)==(z|0)?0:(y-z<<8)+-1|0)|0)==(B+A|0)){x=0;va(1479,a|0);z=x;x=0;if(z&1){v=12;break}D=k[m>>2]|0;E=k[l>>2]|0;F=k[o>>2]|0}else{D=A;E=B;F=C}C=E+D|0;k[(k[F+(C>>>10<<2)>>2]|0)+((C&1023)<<2)>>2]=q;k[l>>2]=E+1;x=0;q=Ba(579,a|0)|0;C=x;x=0;if(C&1){v=12;break}C=k[l>>2]|0;k[l>>2]=C+-1;B=k[s>>2]|0;A=k[o>>2]|0;if((1-C-(k[m>>2]|0)+((B|0)==(A|0)?0:(B-A<<8)+-1|0)|0)>>>0>2047){OBa(k[B+-4>>2]|0);k[s>>2]=(k[s>>2]|0)+-4}if(!q){v=23;break}x=0;Ta(509,a|0,h|0)|0;q=x;x=0;if(q&1){v=12;break}c:while(1){switch(k[h>>2]|0){case 4:{v=42;break b;break}case 10:{break c;break}case 12:break;default:{v=31;break b}}x=0;Ta(509,a|0,h|0)|0;q=x;x=0;if(q&1){v=11;break b}}p=u}if((v|0)==11){p=Hc()|0;G=p;H=M;break}else if((v|0)==12){p=Hc()|0;G=p;H=M;break}else if((v|0)==23){p=k[a+44>>2]|0;d:while(1){x=0;Ta(509,a|0,e|0)|0;s=x;x=0;if(s&1){v=10;break}switch(k[e>>2]|0){case 0:case 4:{break d;break}default:{}}}if((v|0)==10){s=Hc()|0;G=s;H=M;break}x=0;xa(646,a+24|0,p|0);s=x;x=0;if(s&1){v=13;break}w=0;xu(f);r=c;return w|0}else if((v|0)==31){x=0;fb(140,j|0,210343,39);s=x;x=0;if(s&1){v=13;break}x=0;db(61,a|0,j|0,h|0,0)|0;s=x;x=0;do if(!(s&1)){q=k[a+44>>2]|0;e:while(1){x=0;Ta(509,a|0,d|0)|0;B=x;x=0;if(B&1){v=38;break}switch(k[d>>2]|0){case 0:case 4:{break e;break}default:{}}}if((v|0)==38){u=Hc()|0;I=u;J=M;break}x=0;xa(646,a+24|0,q|0);u=x;x=0;if(!(u&1)){K2a(j);w=0;xu(f);r=c;return w|0}else v=39}else v=39;while(0);if((v|0)==39){s=Hc()|0;I=s;J=M}K2a(j);K=I;L=J;xu(f);Sc(K|0)}else if((v|0)==42){w=1;xu(f);r=c;return w|0}}else v=13;while(0);if((v|0)==13){v=Hc()|0;G=v;H=M}K=G;L=H;xu(f);Sc(K|0);return 0}function qr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;iu(d,0);x=0;e=Fa(107,a|0,b|0,d|0)|0;f=x;x=0;if(!(f&1)){if(!e){g=0;xu(d);r=c;return g|0}e=a+20|0;f=a+16|0;h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0;i=a+4|0;x=0;xa(643,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,d|0);h=x;x=0;if((!(h&1)?(h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0,j=a+60|0,x=0,xa(644,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[j>>2]|0)|0),h=x,x=0,!(h&1)):0)?(h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0,x=0,xa(645,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,(k[b+8>>2]|0)-(k[j>>2]|0)|0),j=x,x=0,!(j&1)):0){g=1;xu(d);r=c;return g|0}}g=Hc()|0;xu(d);Sc(g|0);return 0}function rr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+48|0;d=c+24|0;e=c;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;f=Fa(106,a|0,b|0,d|0)|0;g=x;x=0;if(!(g&1)){if(!f){h=0;K2a(d);r=c;return h|0}x=0;xa(587,e|0,d|0);f=x;x=0;if(!(f&1)){f=a+20|0;g=a+16|0;i=(k[f>>2]|0)+-1+(k[g>>2]|0)|0;j=a+4|0;x=0;xa(643,k[(k[(k[j>>2]|0)+(i>>>10<<2)>>2]|0)+((i&1023)<<2)>>2]|0,e|0);i=x;x=0;if((!(i&1)?(i=(k[f>>2]|0)+-1+(k[g>>2]|0)|0,l=a+60|0,x=0,xa(644,k[(k[(k[j>>2]|0)+(i>>>10<<2)>>2]|0)+((i&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[l>>2]|0)|0),i=x,x=0,!(i&1)):0)?(i=(k[f>>2]|0)+-1+(k[g>>2]|0)|0,x=0,xa(645,k[(k[(k[j>>2]|0)+(i>>>10<<2)>>2]|0)+((i&1023)<<2)>>2]|0,(k[b+8>>2]|0)-(k[l>>2]|0)|0),l=x,x=0,!(l&1)):0){xu(e);h=1;K2a(d);r=c;return h|0}h=Hc()|0;c=M;xu(e);m=c;n=h;K2a(d);Sc(n|0)}}h=Hc()|0;m=M;n=h;K2a(d);Sc(n|0);return 0}function sr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=a+68|0;d=k[c>>2]|0;e=k[a+64>>2]|0;f=d;g=e;a:do if((d|0)==(e|0)){h=f;j=d;l=5}else{m=d;n=f;while(1){switch(i[m>>0]|0){case 10:case 13:case 9:case 32:break;default:{h=n;j=m;l=5;break a}}m=m+1|0;k[c>>2]=m;o=m;if((m|0)==(e|0)){p=o;break}else n=o}k[b+4>>2]=p;q=0;r=e;s=p;t=c}while(0);if((l|0)==5){k[b+4>>2]=h;if((j|0)==(e|0)){q=0;r=e;s=h;t=c}else{h=j+1|0;k[c>>2]=h;q=i[j>>0]|0;r=h;s=h;t=c}}b:do switch(q<<24>>24|0){case 123:{k[b>>2]=1;break}case 125:{k[b>>2]=2;break}case 91:{k[b>>2]=3;break}case 93:{k[b>>2]=4;break}case 34:{k[b>>2]=5;if((r|0)==(e|0)){u=b;l=57}else{h=r;while(1){j=h+1|0;k[c>>2]=j;switch(i[h>>0]|0){case 34:{break b;break}case 92:{if((j|0)==(e|0)){u=b;l=57;break b}p=h+2|0;k[c>>2]=p;v=p;break}default:v=j}if((v|0)==(e|0)){u=b;l=57;break b}else h=v}}break}case 47:{k[b>>2]=12;if(!(wr(a)|0)){u=b;l=57}break}case 45:case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{k[b>>2]=6;h=48;j=r;c:while(1){p=j>>>0>>0;f=h;while(1){if((f+-48&255)>=10){w=f;x=j;break c}k[c>>2]=j;if(p)break;else f=0}h=i[j>>0]|0;j=j+1|0}d:do if(w<<24>>24==46){k[c>>2]=x;if(x>>>0>>0){y=i[x>>0]|0;z=x+1|0}else{y=0;z=x}if(z>>>0>>0){j=y;h=z;while(1){if((j+-48&255)>=10){A=j;B=h;break d}k[c>>2]=h;f=h+1|0;p=i[h>>0]|0;if(f>>>0>>0){j=p;h=f}else{C=p;D=f;break}}}else{C=y;D=z}if((C+-48&255)<10){k[c>>2]=D;A=0;B=D}else{A=C;B=D}}else{A=w;B=x}while(0);switch(A<<24>>24){case 69:case 101:break;default:break b}k[c>>2]=B;e:do if(B>>>0>>0){h=B+1|0;j=i[B>>0]|0;switch(j<<24>>24){case 45:case 43:break;default:{E=j;F=h;break e}}k[c>>2]=h;if(h>>>0>>0){E=i[h>>0]|0;F=B+2|0}else{E=0;F=h}}else{E=0;F=B}while(0);if(F>>>0>>0){h=E;j=F;while(1){if((h+-48&255)>=10)break b;k[c>>2]=j;f=j+1|0;p=i[j>>0]|0;if(f>>>0>>0){h=p;j=f}else{G=p;H=f;break}}}else{G=E;H=F}if((G+-48&255)<10)k[c>>2]=H;break}case 116:{k[b>>2]=7;j=s;if((g-s|0)<3){u=b;l=57}else{h=3;while(1){if(!h)break;h=h+-1|0;if((i[j+h>>0]|0)!=(i[210383+h>>0]|0)){u=b;l=57;break b}}k[c>>2]=j+3}break}case 102:{k[b>>2]=8;h=s;if((g-s|0)<4){u=b;l=57}else{f=4;while(1){if(!f)break;f=f+-1|0;if((i[h+f>>0]|0)!=(i[210387+f>>0]|0)){u=b;l=57;break b}}k[c>>2]=h+4}break}case 110:{k[b>>2]=9;f=s;if((g-s|0)<3){u=b;l=57}else{j=3;while(1){if(!j)break;j=j+-1|0;if((i[f+j>>0]|0)!=(i[301217+j>>0]|0)){u=b;l=57;break b}}k[c>>2]=f+3}break}case 44:{k[b>>2]=10;break}case 58:{k[b>>2]=11;break}case 0:{k[b>>2]=0;break}default:{u=b;l=57}}while(0);if((l|0)==57)k[u>>2]=13;k[b+8>>2]=k[t>>2];return 1}function tr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+68|0;c=k[b>>2]|0;d=k[a+64>>2]|0;if((c|0)==(d|0))return;else e=c;a:while(1){switch(i[e>>0]|0){case 10:case 13:case 9:case 32:break;default:{f=4;break a}}e=e+1|0;k[b>>2]=e;if((e|0)==(d|0)){f=4;break}}if((f|0)==4)return}function ur(a){a=a|0;var b=0,c=0,d=0;b=a+68|0;c=k[b>>2]|0;if((c|0)==(k[a+64>>2]|0)){d=0;return d|0}k[b>>2]=c+1;d=i[c>>0]|0;return d|0}function vr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=a+68|0;c=k[b>>2]|0;d=k[a+64>>2]|0;a:do if((c|0)==(d|0))e=0;else{a=c;while(1){f=a+1|0;k[b>>2]=f;g=i[a>>0]|0;switch(g<<24>>24){case 34:{e=34;break a;break}case 92:{if((f|0)==(d|0)){e=92;break a}h=a+2|0;k[b>>2]=h;j=h;l=92;break}default:{j=f;l=g}}if((j|0)==(d|0)){e=l;break a}else a=j}}while(0);return e<<24>>24==34|0}function wr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;b=a+68|0;c=k[b>>2]|0;d=c+-1|0;e=k[a+64>>2]|0;if((c|0)==(e|0)){f=0;return f|0}g=c+1|0;k[b>>2]=g;h=i[c>>0]|0;a:do switch(h<<24>>24){case 42:{if((g|0)==(e|0)){f=0;return f|0}else{j=g;l=c}while(1){m=j+1|0;k[b>>2]=m;if((i[j>>0]|0)==42?(i[m>>0]|0)==47:0){n=l;o=m;break}if((m|0)==(e|0)){f=0;p=23;break}else{q=j;j=m;l=q}}if((p|0)==23)return f|0;if((o|0)==(e|0)){f=0;return f|0}q=n+3|0;k[b>>2]=q;if((i[o>>0]|0)==47)r=q;else{f=0;return f|0}break}case 47:{q=g;m=c;b:while(1){if((q|0)==(e|0)){r=e;break a}s=q+1|0;k[b>>2]=s;switch(i[q>>0]|0){case 10:{r=s;break a;break}case 13:{t=m;u=s;break b;break}default:{v=q;q=s;m=v}}}if((u|0)!=(e|0))if((i[u>>0]|0)==10){m=t+3|0;k[b>>2]=m;r=m}else r=u;else r=e;break}default:{f=0;return f|0}}while(0);if(!(i[a+96>>0]|0)){f=1;return f|0}e=k[a+72>>2]|0;c:do if(e){d:do if(e>>>0>>0){u=e;while(1){switch(i[u>>0]|0){case 13:case 10:{w=0;break c;break}default:{}}u=u+1|0;if(u>>>0>=d>>>0)break d}}while(0);if(h<<24>>24==42&d>>>0>>0){u=d;while(1){switch(i[u>>0]|0){case 13:case 10:{w=0;break c;break}default:{}}u=u+1|0;if(u>>>0>=r>>>0){w=1;break c}}}else w=1}else w=0;while(0);Br(a,d,r,w);f=1;return f|0}function xr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=a+68|0;c=a+64|0;a=48;d=k[b>>2]|0;a:while(1){e=a;while(1){if((e+-48&255)>=10){f=e;g=d;break a}k[b>>2]=d;if(d>>>0<(k[c>>2]|0)>>>0)break;else e=0}a=i[d>>0]|0;d=d+1|0}b:do if(f<<24>>24==46){k[b>>2]=g;d=k[c>>2]|0;if(g>>>0>>0){h=i[g>>0]|0;j=g+1|0}else{h=0;j=g}while(1){a=j>>>0>>0;e=h;while(1){if((e+-48&255)>=10){l=e;m=j;break b}k[b>>2]=j;if(a)break;else e=0}h=i[j>>0]|0;j=j+1|0}}else{l=f;m=g}while(0);switch(l<<24>>24){case 69:case 101:break;default:return}k[b>>2]=m;l=k[c>>2]|0;c:do if(m>>>0>>0){c=m+1|0;g=i[m>>0]|0;switch(g<<24>>24){case 45:case 43:break;default:{n=g;o=c;break c}}k[b>>2]=c;if(c>>>0>>0){n=i[c>>0]|0;o=m+2|0}else{n=0;o=c}}else{n=0;o=m}while(0);d:while(1){m=o>>>0>>0;c=n;while(1){if((c+-48&255)>=10)break d;k[b>>2]=o;if(m)break;else c=0}n=i[o>>0]|0;o=o+1|0}return}function yr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=a+68|0;e=k[d>>2]|0;f=e;if(((k[a+64>>2]|0)-e|0)<(c|0)){g=0;return g|0}else h=c;while(1){if(!h)break;h=h+-1|0;if((i[f+h>>0]|0)!=(i[b+h>>0]|0)){g=0;j=5;break}}if((j|0)==5)return g|0;k[d>>2]=f+c;g=1;return g|0}function zr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+68|0;c=k[b>>2]|0;d=k[a+64>>2]|0;a:do if((c|0)==(d|0))e=c;else{a=c;while(1){f=a;a=a+1|0;k[b>>2]=a;if((i[f>>0]|0)==42?(i[a>>0]|0)==47:0){e=a;break a}if((a|0)==(d|0)){g=0;break}}return g|0}while(0);if((e|0)==(d|0)){g=0;return g|0}k[b>>2]=e+1;g=(i[e>>0]|0)==47;return g|0}function Ar(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+68|0;c=k[a+64>>2]|0;a=k[b>>2]|0;a:while(1){if((a|0)==(c|0)){d=7;break}e=a+1|0;k[b>>2]=e;switch(i[a>>0]|0){case 13:{f=e;g=a;d=4;break a;break}case 10:{d=7;break a;break}default:a=e}}if((d|0)==4){if((f|0)==(c|0))return 1;if((i[f>>0]|0)!=10)return 1;k[b>>2]=g+2;return 1}else if((d|0)==7)return 1;return 0}function Br(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+16|0;f=e;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(603,f|0,c-b|0);g=x;x=0;if(g&1){g=Hc()|0;h=g;j=M;K2a(f);Sc(h|0)}a:do if((b|0)!=(c|0)){g=b;while(1){l=g+1|0;m=i[g>>0]|0;if(m<<24>>24==13){if((l|0)==(c|0))n=c;else n=(i[l>>0]|0)==10?g+2|0:l;x=0;xa(605,f|0,10);o=x;x=0;if(o&1)break;else p=n}else{x=0;xa(605,f|0,m|0);m=x;x=0;if(m&1)break;else p=l}if((p|0)==(c|0))break a;else g=p}g=Hc()|0;h=g;j=M;K2a(f);Sc(h|0)}while(0);if((d|0)==1){x=0;fb(175,k[a+76>>2]|0,f|0,1);d=x;x=0;if(d&1){q=Hc()|0;s=M;K2a(f);Sc(q|0)}else{K2a(f);r=e;return}}else{d=i[f>>0]|0;h=(d&1)==0;x=0;Fa(88,a+80|0,(h?f+1|0:k[f+8>>2]|0)|0,(h?(d&255)>>>1:k[f+4>>2]|0)|0)|0;d=x;x=0;if(d&1){q=Hc()|0;s=M;K2a(f);Sc(q|0)}else{K2a(f);r=e;return}}}function Cr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+48|0;e=d+40|0;f=d+24|0;g=d+36|0;h=d+12|0;j=d;l=b+8|0;m=b+4|0;u3a(c,(k[l>>2]|0)+-2-(k[m>>2]|0)|0);n=(k[m>>2]|0)+1|0;k[e>>2]=n;m=(k[l>>2]|0)+-1|0;if((n|0)==(m|0)){o=1;r=d;return o|0}l=h+8|0;p=h+1|0;q=h+4|0;s=n;a:while(1){n=s+1|0;k[e>>2]=n;t=i[s>>0]|0;b:do switch(t<<24>>24){case 34:{o=1;u=27;break a;break}case 92:{if((n|0)==(m|0)){u=5;break a}v=s+2|0;k[e>>2]=v;switch(i[n>>0]|0){case 34:{L3a(c,34);w=v;break b;break}case 47:{L3a(c,47);w=v;break b;break}case 92:{L3a(c,92);w=v;break b;break}case 98:{L3a(c,8);w=v;break b;break}case 102:{L3a(c,12);w=v;break b;break}case 110:{L3a(c,10);w=v;break b;break}case 114:{L3a(c,13);w=v;break b;break}case 116:{L3a(c,9);w=v;break b;break}case 117:{if(!(Ir(a,b,e,m,g)|0)){u=18;break a}Qs(h,k[g>>2]|0);y=i[h>>0]|0;z=(y&1)==0;x=0;Fa(88,c|0,(z?p:k[l>>2]|0)|0,(z?(y&255)>>>1:k[q>>2]|0)|0)|0;y=x;x=0;if(y&1){u=21;break a}K2a(h);w=k[e>>2]|0;break b;break}default:{A=v;u=22;break a}}break}default:{L3a(c,t);w=n}}while(0);if((w|0)==(m|0)){o=1;u=27;break}else s=w}if((u|0)==5){q2a(f,210392,31);x=0;db(61,a|0,f|0,b|0,m|0)|0;m=x;x=0;if(m&1){m=Hc()|0;w=M;K2a(f);B=w;C=m;Sc(C|0)}else{K2a(f);o=0;r=d;return o|0}}else if((u|0)==18){o=0;r=d;return o|0}else if((u|0)==21){f=Hc()|0;m=M;K2a(h);B=m;C=f;Sc(C|0)}else if((u|0)==22){q2a(j,210424,29);x=0;db(61,a|0,j|0,b|0,A|0)|0;A=x;x=0;if(A&1){A=Hc()|0;b=M;K2a(j);B=b;C=A;Sc(C|0)}else{K2a(j);o=0;r=d;return o|0}}else if((u|0)==27){r=d;return o|0}return 0}function Dr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=k[a+44>>2]|0;do{sr(a,d)|0;f=k[d>>2]|0}while(!((f|0)==(b|0)|(f|0)==0));Ps(a+24|0,e);r=c;return 0}function Er(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=r;r=r+96|0;e=d+72|0;f=d+48|0;g=d+24|0;h=d;j=k[b+4>>2]|0;l=(i[j>>0]|0)==45;m=l?j+1|0:j;j=1696;n=Hyb(k[j>>2]|0,k[j+4>>2]|0,1,0)|0;j=1704;o=l?n:k[j>>2]|0;n=l?M:k[j+4>>2]|0;j=Ryb(o|0,n|0,10,0)|0;p=M;q=k[b+8>>2]|0;a:do if(m>>>0>>0){s=Syb(o|0,n|0,10,0)|0;t=M;u=0;v=0;w=m;while(1){y=i[w>>0]|0;w=w+1|0;if((y+-48&255)>9){z=4;break}A=(y<<24>>24)+-48|0;if(!(u>>>0

      >>0|(u|0)==(p|0)&v>>>0>>0)){if(!((u>>>0

      >>0|(u|0)==(p|0)&v>>>0<=j>>>0)&(w|0)==(q|0))){z=9;break}if(0>t>>>0|0==(t|0)&A>>>0>s>>>0){z=9;break}else{B=A;C=0}}else{B=A;C=0}A=Qyb(v|0,u|0,10,0)|0;y=Hyb(B|0,C|0,A|0,M|0)|0;A=M;if(w>>>0>=q>>>0){D=y;E=A;break a}else{u=A;v=y}}if((z|0)==4){F=Gr(a,b,c)|0;r=d;return F|0}else if((z|0)==9){F=Gr(a,b,c)|0;r=d;return F|0}}else{D=0;E=0}while(0);if(l&((D|0)==(o|0)&(E|0)==(n|0))){n=1688;mu(e,k[n>>2]|0,k[n+4>>2]|0);x=0;Ta(476,c|0,e|0)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;xu(e);G=o;H=n;Sc(H|0)}else{xu(e);F=1;r=d;return F|0}}if(l){l=Gyb(0,0,D|0,E|0)|0;mu(f,l,M);x=0;Ta(476,c|0,f|0)|0;l=x;x=0;if(l&1){l=Hc()|0;e=M;xu(f);G=e;H=l;Sc(H|0)}else{xu(f);F=1;r=d;return F|0}}f=k[6037]|0;l=((f|0)<0)<<31>>31;if(E>>>0>l>>>0|(E|0)==(l|0)&D>>>0>f>>>0){nu(h,D,E);x=0;Ta(476,c|0,h|0)|0;f=x;x=0;if(f&1){f=Hc()|0;l=M;xu(h);G=l;H=f;Sc(H|0)}else{xu(h);F=1;r=d;return F|0}}else{mu(g,D,E);x=0;Ta(476,c|0,g|0)|0;c=x;x=0;if(c&1){c=Hc()|0;E=M;xu(g);G=E;H=c;Sc(H|0)}else{xu(g);F=1;r=d;return F|0}}return 0}function Fr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;mr(a,b,c,0)|0;c=k[a+44>>2]|0;do{sr(a,f)|0;b=k[f>>2]|0}while(!((b|0)==(d|0)|(b|0)==0));Ps(a+24|0,c);r=e;return 0}function Gr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;d=r;r=r+224|0;e=d+24|0;f=d+208|0;g=d+68|0;h=d+56|0;j=d+44|0;l=d+32|0;m=d;p[e>>3]=0.0;n=b+4|0;o=k[n>>2]|0;q=b+8|0;s=k[q>>2]|0;t=s-o|0;if(t>>>0<=4294967279)if(t>>>0<11){i[f>>0]=t<<1;u=f+1|0}else v=5;else{GBa(f);v=5}if((v|0)==5){w=t+16&-16;y=KBa(w)|0;k[f+8>>2]=y;k[f>>2]=w|1;k[f+4>>2]=t;u=y}if((o|0)==(s|0))z=u;else{y=o;o=u;while(1){i[o>>0]=i[y>>0]|0;y=y+1|0;if((y|0)==(s|0))break;else o=o+1|0}z=u+t|0}i[z>>0]=0;z=g+60|0;t=g+8|0;k[g>>2]=24032;k[z>>2]=24052;k[g+4>>2]=0;x=0;xa(582,g+60|0,t|0);u=x;x=0;if(u&1){u=Hc()|0;A=M;B=u}else{k[g+132>>2]=0;k[g+136>>2]=-1;k[g>>2]=24072;k[g+60>>2]=24092;x=0;va(1449,t|0);u=x;x=0;do if(u&1){o=Hc()|0;C=M;D=o}else{k[t>>2]=20392;o=g+40|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[g+56>>2]=8;x=0;xa(583,t|0,f|0);s=x;x=0;if(s&1){s=Hc()|0;y=M;K2a(o);obb(t);C=y;D=s;break}x=0;s=Ta(510,g|0,e|0)|0;y=x;x=0;do if(y&1)v=32;else{if(!(k[s+(k[(k[s>>2]|0)+-12>>2]|0)+16>>2]&5)){x=0;ra(42,m|0,+(+p[e>>3]));w=x;x=0;if(w&1){v=32;break}x=0;Ta(476,c|0,m|0)|0;w=x;x=0;if(w&1){w=Hc()|0;E=M;xu(m);F=E;G=w;break}xu(m);H=1;k[g>>2]=24072;k[z>>2]=24092;k[t>>2]=20392;K2a(o);obb(t);mab(z);K2a(f);r=d;return H|0}w=k[n>>2]|0;E=k[q>>2]|0;I=E-w|0;if(I>>>0>4294967279){x=0;va(1471,l|0);J=x;x=0;if(J&1){v=32;break}else v=22}else if(I>>>0<11){i[l>>0]=I<<1;K=l+1|0}else v=22;if((v|0)==22){J=I+16&-16;x=0;L=Ba(563,J|0)|0;N=x;x=0;if(N&1){v=32;break}k[l+8>>2]=L;k[l>>2]=J|1;k[l+4>>2]=I;K=L}if((w|0)==(E|0))O=K;else{L=w;w=K;while(1){i[w>>0]=i[L>>0]|0;L=L+1|0;if((L|0)==(E|0))break;else w=w+1|0}O=K+I|0}i[O>>0]=0;x=0;w=Fa(86,l|0,0,292511)|0;E=x;x=0;if(E&1){E=Hc()|0;P=M;Q=E}else{k[j>>2]=k[w>>2];k[j+4>>2]=k[w+4>>2];k[j+8>>2]=k[w+8>>2];k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;x=0;w=Ta(484,j|0,210454)|0;E=x;x=0;do if(E&1){L=Hc()|0;R=M;S=L}else{k[h>>2]=k[w>>2];k[h+4>>2]=k[w+4>>2];k[h+8>>2]=k[w+8>>2];k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;x=0;db(61,a|0,h|0,b|0,0)|0;L=x;x=0;if(L&1){L=Hc()|0;J=M;K2a(h);R=J;S=L;break}K2a(h);K2a(j);K2a(l);H=0;k[g>>2]=24072;k[z>>2]=24092;k[t>>2]=20392;K2a(o);obb(t);mab(z);K2a(f);r=d;return H|0}while(0);K2a(j);P=R;Q=S}K2a(l);F=P;G=Q}while(0);if((v|0)==32){s=Hc()|0;F=M;G=s}k[g>>2]=24072;k[z>>2]=24092;k[t>>2]=20392;K2a(o);obb(t);mab(z);T=F;U=G;K2a(f);Sc(U|0)}while(0);A=C;B=D}mab(z);T=A;U=B;K2a(f);Sc(U|0);return 0}function Hr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;iu(d,0);x=0;e=Fa(108,a|0,b|0,d|0)|0;f=x;x=0;if(!(f&1)){if(!e){g=0;xu(d);r=c;return g|0}e=a+20|0;f=a+16|0;h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0;i=a+4|0;x=0;xa(643,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,d|0);h=x;x=0;if((!(h&1)?(h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0,j=a+60|0,x=0,xa(644,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[j>>2]|0)|0),h=x,x=0,!(h&1)):0)?(h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0,x=0,xa(645,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,(k[b+8>>2]|0)-(k[j>>2]|0)|0),j=x,x=0,!(j&1)):0){g=1;xu(d);r=c;return g|0}}g=Hc()|0;xu(d);Sc(g|0);return 0}function Ir(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;f=r;r=r+32|0;g=f+12|0;h=f+24|0;j=f;if(!(Jr(a,b,c,d,e)|0)){l=0;r=f;return l|0}if((k[e>>2]&-1024|0)!=55296){l=1;r=f;return l|0}m=k[c>>2]|0;n=m;if((d-m|0)<6){q2a(g,210473,67);x=0;db(61,a|0,g|0,b|0,k[c>>2]|0)|0;m=x;x=0;if(m&1){m=Hc()|0;o=M;K2a(g);p=o;q=m;Sc(q|0)}else{K2a(g);l=0;r=f;return l|0}}g=n+1|0;k[c>>2]=g;if((i[n>>0]|0)==92?(k[c>>2]=n+2,(i[g>>0]|0)==117):0){if(Jr(a,b,c,d,h)|0){k[e>>2]=(k[e>>2]<<10&1047552)+65536|k[h>>2]&1023;l=1;r=f;return l|0}}else s=11;do if((s|0)==11){q2a(j,210541,79);x=0;db(61,a|0,j|0,b|0,k[c>>2]|0)|0;h=x;x=0;if(!(h&1)){K2a(j);break}h=Hc()|0;e=M;K2a(j);p=e;q=h;Sc(q|0)}while(0);l=0;r=f;return l|0}function Jr(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;f=r;r=r+32|0;g=f+12|0;h=f;j=k[c>>2]|0;l=j;if((d-j|0)<4){q2a(g,210621,60);x=0;db(61,a|0,g|0,b|0,k[c>>2]|0)|0;j=x;x=0;if(j&1){j=Hc()|0;d=M;K2a(g);m=d;n=j;Sc(n|0)}else{K2a(g);o=0;r=f;return o|0}}g=l+1|0;k[c>>2]=g;j=i[l>>0]|0;d=j<<24>>24;do if((j+-48&255)>=10){if((j+-97&255)<6){p=d+-87|0;q=13;break}if((j+-65&255)<6){p=d+-55|0;q=13}}else{p=d+-48|0;q=13}while(0);a:do if((q|0)==13){d=l+2|0;k[c>>2]=d;j=i[g>>0]|0;s=p<<4;t=j<<24>>24;do if((j+-48&255)<10)u=t+-48|0;else{if((j+-97&255)<6){u=t+-87|0;break}if((j+-65&255)>=6)break a;u=t+-55|0}while(0);t=l+3|0;k[c>>2]=t;j=i[d>>0]|0;v=u+s<<4;w=j<<24>>24;do if((j+-48&255)<10)y=w+-48|0;else{if((j+-97&255)<6){y=w+-87|0;break}if((j+-65&255)>=6)break a;y=w+-55|0}while(0);k[c>>2]=l+4;w=i[t>>0]|0;j=y+v<<4;s=w<<24>>24;do if((w+-48&255)<10)z=s+-48|0;else{if((w+-97&255)<6){z=s+-87|0;break}if((w+-65&255)>=6)break a;z=s+-55|0}while(0);k[e>>2]=z+j;o=1;r=f;return o|0}while(0);q2a(h,210682,66);x=0;db(61,a|0,h|0,b|0,k[c>>2]|0)|0;c=x;x=0;if(c&1){c=Hc()|0;b=M;K2a(h);m=b;n=c;Sc(n|0)}else{K2a(h);o=0;r=f;return o|0}return 0}function Kr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=k[a+60>>2]|0;k[c>>2]=0;f=a+64|0;a=e;e=0;a:while(1){g=a;b:while(1){if(g>>>0>=b>>>0){h=a;break a}if((g|0)==(k[f>>2]|0)){h=a;break a}j=g+1|0;switch(i[g>>0]|0){case 13:{l=j;m=g;n=6;break b;break}case 10:{o=j;break b;break}default:g=j}}if((n|0)==6){n=0;o=(i[l>>0]|0)==10?m+2|0:l}g=e+1|0;k[c>>2]=g;a=o;e=g}k[d>>2]=b+1-h;k[c>>2]=(k[c>>2]|0)+1;return}function Lr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+64|0;e=d;f=d+8|0;g=b+64|0;h=k[b+60>>2]|0;b=1;a:while(1){j=h;b:while(1){if(j>>>0>=c>>>0){l=h;m=b;break a}if((j|0)==(k[g>>2]|0)){l=h;m=b;break a}n=j+1|0;switch(i[j>>0]|0){case 13:{o=n;p=j;q=6;break b;break}case 10:{s=n;break b;break}default:j=n}}if((q|0)==6){q=0;s=(i[o>>0]|0)==10?p+2|0:o}h=s;b=b+1|0}k[e>>2]=m;k[e+4>>2]=c+1-l;uRa(f,51,210749,e)|0;q2a(a,f,RLa(f)|0);r=d;return}function Mr(a,b){a=a|0;b=b|0;Nr(a,b);return}function Nr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;c=r;r=r+176|0;d=c+8|0;e=c;f=c+112|0;g=c+100|0;h=c+88|0;j=c+76|0;l=c+64|0;m=c+52|0;n=c+40|0;o=c+28|0;p=c+16|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;q=b+28|0;s=k[q>>2]|0;t=b+40|0;u=k[t>>2]|0;v=s+(((u>>>0)/146|0)<<2)|0;w=b+32|0;if((k[w>>2]|0)==(s|0))y=0;else y=(k[v>>2]|0)+(((u>>>0)%146|0)*28|0)|0;u=b+44|0;s=b+60|0;z=b+64|0;b=g+8|0;A=g+1|0;B=g+4|0;C=l+8|0;D=l+1|0;E=l+4|0;F=n+8|0;G=n+1|0;H=n+4|0;I=y;y=v;a:while(1){v=I;do{J=(k[t>>2]|0)+(k[u>>2]|0)|0;K=k[q>>2]|0;if((k[w>>2]|0)==(K|0))L=0;else L=(k[K+(((J>>>0)/146|0)<<2)>>2]|0)+(((J>>>0)%146|0)*28|0)|0;J=v;if((J|0)==(L|0)){N=8;break a}K=k[J+4>>2]|0;O=k[s>>2]|0;P=1;b:while(1){Q=O;c:while(1){if(Q>>>0>=K>>>0){R=O;S=P;break b}if((Q|0)==(k[z>>2]|0)){R=O;S=P;break b}T=Q+1|0;switch(i[Q>>0]|0){case 13:{U=T;V=Q;N=16;break c;break}case 10:{W=T;break c;break}default:Q=T}}if((N|0)==16){N=0;W=(i[U>>0]|0)==10?V+2|0:U}O=W;P=P+1|0}k[e>>2]=S;k[e+4>>2]=K+1-R;uRa(f,51,210749,e)|0;P=RLa(f)|0;x=0;fb(140,j|0,f|0,P|0);P=x;x=0;if(P&1){N=9;break a}x=0;P=Fa(86,j|0,0,210768)|0;O=x;x=0;if(O&1){N=40;break a};k[h>>2]=k[P>>2];k[h+4>>2]=k[P+4>>2];k[h+8>>2]=k[P+8>>2];k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;x=0;P=Ta(484,h|0,324246)|0;O=x;x=0;if(O&1){N=41;break a};k[g>>2]=k[P>>2];k[g+4>>2]=k[P+4>>2];k[g+8>>2]=k[P+8>>2];k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;P=i[g>>0]|0;O=(P&1)==0;x=0;Fa(88,a|0,(O?A:k[b>>2]|0)|0,(O?(P&255)>>>1:k[B>>2]|0)|0)|0;P=x;x=0;if(P&1){N=42;break a}K2a(g);K2a(h);K2a(j);P=J+12|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;O=i[P>>0]|0;Q=(O&1)==0?(O&255)>>>1:k[J+16>>2]|0;x=0;nb(83,m|0,229999,2,Q+2|0);O=x;x=0;if(O&1){N=24;break a}x=0;Fa(88,m|0,((i[P>>0]&1)==0?P+1|0:k[J+20>>2]|0)|0,Q|0)|0;Q=x;x=0;if(Q&1){N=24;break a}x=0;Q=Ta(484,m|0,324246)|0;P=x;x=0;if(P&1){N=45;break a};k[l>>2]=k[Q>>2];k[l+4>>2]=k[Q+4>>2];k[l+8>>2]=k[Q+8>>2];k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=0;Q=i[l>>0]|0;P=(Q&1)==0;x=0;Fa(88,a|0,(P?D:k[C>>2]|0)|0,(P?(Q&255)>>>1:k[E>>2]|0)|0)|0;Q=x;x=0;if(Q&1){N=46;break a}K2a(l);K2a(m);Q=k[J+24>>2]|0;if(Q){P=k[s>>2]|0;O=1;d:while(1){T=P;e:while(1){if(T>>>0>=Q>>>0){X=P;Y=O;break d}if((T|0)==(k[z>>2]|0)){X=P;Y=O;break d}Z=T+1|0;switch(i[T>>0]|0){case 13:{_=Z;$=T;N=33;break e;break}case 10:{aa=Z;break e;break}default:T=Z}}if((N|0)==33){N=0;aa=(i[_>>0]|0)==10?$+2|0:_}P=aa;O=O+1|0}k[d>>2]=Y;k[d+4>>2]=Q+1-X;uRa(f,51,210749,d)|0;O=RLa(f)|0;x=0;fb(140,p|0,f|0,O|0);O=x;x=0;if(O&1){N=9;break a}x=0;O=Fa(86,p|0,0,210771)|0;P=x;x=0;if(P&1){N=48;break a};k[o>>2]=k[O>>2];k[o+4>>2]=k[O+4>>2];k[o+8>>2]=k[O+8>>2];k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;x=0;O=Ta(484,o|0,210776)|0;P=x;x=0;if(P&1){N=49;break a};k[n>>2]=k[O>>2];k[n+4>>2]=k[O+4>>2];k[n+8>>2]=k[O+8>>2];k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;O=i[n>>0]|0;P=(O&1)==0;x=0;Fa(88,a|0,(P?G:k[F>>2]|0)|0,(P?(O&255)>>>1:k[H>>2]|0)|0)|0;O=x;x=0;if(O&1){N=50;break a}K2a(n);K2a(o);K2a(p)}v=J+28|0}while((v-(k[y>>2]|0)|0)!=4088);v=y+4|0;I=k[v>>2]|0;y=v}switch(N|0){case 8:{r=c;return}case 9:{c=Hc()|0;ba=M;ca=c;N=10;break}case 24:{c=Hc()|0;y=M;K2a(m);ba=y;ca=c;N=10;break}case 40:{c=Hc()|0;da=M;ea=c;N=44;break}case 41:{c=Hc()|0;fa=M;ga=c;N=43;break}case 42:{c=Hc()|0;y=M;K2a(g);fa=y;ga=c;N=43;break}case 45:{c=Hc()|0;ha=M;ia=c;N=47;break}case 46:{c=Hc()|0;y=M;K2a(l);ha=y;ia=c;N=47;break}case 48:{c=Hc()|0;ja=M;ka=c;N=52;break}case 49:{c=Hc()|0;la=M;ma=c;N=51;break}case 50:{c=Hc()|0;y=M;K2a(n);la=y;ma=c;N=51;break}}if((N|0)==10){na=ba;oa=ca;K2a(a);Sc(oa|0)}else if((N|0)==43){K2a(h);da=fa;ea=ga;N=44}else if((N|0)==47){K2a(m);na=ha;oa=ia;K2a(a);Sc(oa|0)}else if((N|0)==51){K2a(o);ja=la;ka=ma;N=52}if((N|0)==44){K2a(j);na=da;oa=ea;K2a(a);Sc(oa|0)}else if((N|0)==52){K2a(p);na=ja;oa=ka;K2a(a);Sc(oa|0)}}function Or(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+32|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=b+28|0;g=k[f>>2]|0;h=b+40|0;i=k[h>>2]|0;j=g+(((i>>>0)/146|0)<<2)|0;l=b+32|0;if((k[l>>2]|0)==(g|0))m=0;else m=(k[j>>2]|0)+(((i>>>0)%146|0)*28|0)|0;i=b+44|0;g=d+8|0;n=b+60|0;b=d+4|0;o=a+8|0;p=m;m=j;a:while(1){j=p;do{q=(k[h>>2]|0)+(k[i>>2]|0)|0;s=k[f>>2]|0;if((k[l>>2]|0)==(s|0))t=0;else t=(k[s+(((q>>>0)/146|0)<<2)>>2]|0)+(((q>>>0)%146|0)*28|0)|0;q=j;if((q|0)==(t|0)){u=8;break a};k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;s=k[n>>2]|0;k[d>>2]=(k[q+4>>2]|0)-s;k[b>>2]=(k[q+8>>2]|0)-s;x=0;Ta(493,g|0,q+12|0)|0;s=x;x=0;if(s&1)break a;s=k[e>>2]|0;if((s|0)==(k[o>>2]|0)){x=0;xa(647,a|0,d|0);v=x;x=0;if(v&1)break a}else{v=d;w=k[v+4>>2]|0;y=s;k[y>>2]=k[v>>2];k[y+4>>2]=w;x=0;xa(604,s+8|0,g|0);s=x;x=0;if(s&1)break a;k[e>>2]=(k[e>>2]|0)+20}K2a(g);j=q+28|0}while((j-(k[m>>2]|0)|0)!=4088);j=m+4|0;p=k[j>>2]|0;m=j}if((u|0)==8){r=c;return}c=Hc()|0;K2a(g);g=k[a>>2]|0;if(!g)Sc(c|0);u=k[e>>2]|0;if((u|0)==(g|0))z=g;else{m=u;do{k[e>>2]=m+-20;K2a(m+-12|0);m=k[e>>2]|0}while((m|0)!=(g|0));z=k[a>>2]|0}OBa(z);Sc(c|0)}function Pr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+32|0;e=d;f=a+64|0;g=a+60|0;h=(k[f>>2]|0)-(k[g>>2]|0)|0;if((Tv(b)|0)>(h|0)){i=0;r=d;return i|0}if((Uv(b)|0)>(h|0)){i=0;r=d;return i|0}h=k[g>>2]|0;g=h+(Tv(b)|0)|0;h=k[f>>2]|0;f=h+(Uv(b)|0)|0;b=e+12|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[e>>2]=13;k[e+4>>2]=g;k[e+8>>2]=f;x=0;Ta(493,b|0,c|0)|0;c=x;x=0;if(c&1){j=Hc()|0;l=M;K2a(b);Sc(j|0)}c=e+24|0;k[c>>2]=0;f=a+32|0;g=k[f>>2]|0;h=a+28|0;m=k[h>>2]|0;n=g-m>>2;o=a+40|0;p=k[o>>2]|0;q=a+44|0;s=k[q>>2]|0;t=m;m=g;do if((((n|0)==0?0:(n*146|0)+-1|0)|0)==(s+p|0)){x=0;va(1478,a+24|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;K2a(b);Sc(j|0)}else{u=k[o>>2]|0;v=k[q>>2]|0;w=k[f>>2]|0;y=k[h>>2]|0;break}}else{u=p;v=s;w=m;y=t}while(0);t=v+u|0;if((w|0)==(y|0))z=0;else z=(k[y+(((t>>>0)/146|0)<<2)>>2]|0)+(((t>>>0)%146|0)*28|0)|0;k[z>>2]=k[e>>2];k[z+4>>2]=k[e+4>>2];k[z+8>>2]=k[e+8>>2];x=0;xa(604,z+12|0,b|0);e=x;x=0;if(e&1){j=Hc()|0;l=M;K2a(b);Sc(j|0)}k[z+24>>2]=k[c>>2];k[q>>2]=(k[q>>2]|0)+1;K2a(b);i=1;r=d;return i|0}function Qr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;e=r;r=r+32|0;f=e;g=a+60|0;h=(k[a+64>>2]|0)-(k[g>>2]|0)|0;if((Tv(b)|0)>(h|0)){i=0;r=e;return i|0}if((Uv(b)|0)>(h|0)){i=0;r=e;return i|0}if((Uv(d)|0)>(h|0)){i=0;r=e;return i|0}h=k[g>>2]|0;j=h+(Tv(b)|0)|0;h=k[g>>2]|0;l=h+(Uv(b)|0)|0;b=f+12|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[f>>2]=13;k[f+4>>2]=j;k[f+8>>2]=l;x=0;Ta(493,b|0,c|0)|0;c=x;x=0;do if(!(c&1)?(l=k[g>>2]|0,x=0,j=Ba(580,d|0)|0,h=x,x=0,!(h&1)):0){h=f+24|0;k[h>>2]=l+j;j=a+32|0;l=k[j>>2]|0;m=a+28|0;n=k[m>>2]|0;o=l-n>>2;p=a+40|0;q=k[p>>2]|0;s=a+44|0;t=k[s>>2]|0;u=n;n=l;if((((o|0)==0?0:(o*146|0)+-1|0)|0)==(t+q|0)){x=0;va(1478,a+24|0);o=x;x=0;if(o&1)break;v=k[p>>2]|0;w=k[s>>2]|0;y=k[j>>2]|0;z=k[m>>2]|0}else{v=q;w=t;y=n;z=u}u=w+v|0;if((y|0)==(z|0))A=0;else A=(k[z+(((u>>>0)/146|0)<<2)>>2]|0)+(((u>>>0)%146|0)*28|0)|0;k[A>>2]=k[f>>2];k[A+4>>2]=k[f+4>>2];k[A+8>>2]=k[f+8>>2];x=0;xa(604,A+12|0,b|0);u=x;x=0;if(!(u&1)){k[A+24>>2]=k[h>>2];k[s>>2]=(k[s>>2]|0)+1;K2a(b);i=1;r=e;return i|0}}while(0);i=Hc()|0;K2a(b);Sc(i|0);return 0}function Rr(a){a=a|0;return (k[a+44>>2]|0)==0|0}function Sr(a){a=a|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}function Tr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+96|0;d=a;e=d+96|0;do{k[d>>2]=0;d=d+4|0}while((d|0)<(e|0));k[c>>2]=k[b>>2];k[c+4>>2]=k[b+4>>2];k[c+8>>2]=k[b+8>>2];i[a+108>>0]=0;return}function Ur(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;f=r;r=r+48|0;g=f+24|0;h=f+12|0;j=f;l=a+96|0;m=(i[l>>0]|0)!=0;k[a+60>>2]=b;k[a+64>>2]=c;n=a+108|0;i[n>>0]=m&e&1;k[a+68>>2]=b;k[a+72>>2]=0;k[a+76>>2]=0;e=a+80|0;S2a(e,329672)|0;Ss(a+24|0);m=a+20|0;o=k[m>>2]|0;if(!o){p=a+4|0;q=p;s=p;t=a+16|0;u=k[a+8>>2]|0}else{p=a+16|0;v=a+8|0;w=a+4|0;y=k[v>>2]|0;z=y;A=o;o=y;while(1){y=A+-1|0;k[m>>2]=y;B=k[w>>2]|0;if((1-A-(k[p>>2]|0)+((o|0)==(B|0)?0:(o-B<<8)+-1|0)|0)>>>0>2047){OBa(k[o+-4>>2]|0);B=(k[v>>2]|0)+-4|0;k[v>>2]=B;C=B;D=C;E=C;F=k[m>>2]|0}else{D=z;E=o;F=y}if(!F){q=w;s=w;t=p;u=D;break}else{z=D;A=F;o=E}}}E=k[s>>2]|0;s=k[t>>2]|0;if((((u|0)==(E|0)?0:(u-E<<8)+-1|0)|0)==(s|0)){Ms(a);G=k[t>>2]|0;H=k[m>>2]|0;I=k[q>>2]|0}else{G=s;H=0;I=E}E=H+G|0;k[(k[I+(E>>>10<<2)>>2]|0)+((E&1023)<<2)>>2]=d;k[m>>2]=H+1;k[a+92>>2]=0;H=Vr(a)|0;if(!(i[l>>0]|0))bs(a,g)|0;else do bs(a,g)|0;while((k[g>>2]|0)==15);if((i[a+101>>0]|0)!=0?(l=k[g>>2]|0,!((i[a+97>>0]|0)==0&(l|0)==16|(l|0)==0)):0){q2a(h,210790,38);x=0;db(62,a|0,h|0,g|0,0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;K2a(h);J=m;K=l;Sc(K|0)}else{K2a(h);L=0;r=f;return L|0}}if(i[n>>0]|0){n=i[e>>0]|0;if(!(n&1))N=(n&255)>>>1;else N=k[a+84>>2]|0;if(N)Ov(d,e,2)}if(!(i[a+97>>0]|0)){L=H;r=f;return L|0}if(bv(d)|0){L=H;r=f;return L|0}if(cv(d)|0){L=H;r=f;return L|0}k[g>>2]=16;k[g+4>>2]=b;k[g+8>>2]=c;q2a(j,210082,65);x=0;db(62,a|0,j|0,g|0,0)|0;g=x;x=0;if(g&1){g=Hc()|0;a=M;K2a(j);J=a;K=g;Sc(K|0)}else{K2a(j);L=0;r=f;return L|0}return 0}function Vr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,D=0;b=r;r=r+208|0;c=b+180|0;d=b+192|0;e=b+144|0;f=b+120|0;g=b+96|0;h=b+72|0;j=b+48|0;l=b+24|0;m=b;n=b+168|0;o=a+92|0;p=k[o>>2]|0;if((p|0)>=(k[a+104>>2]|0)){q2a(c,210148,35);x=0;va(1477,c|0);x=0;q=Hc()|0;s=M;K2a(c);t=s;u=q;Sc(u|0)}k[o>>2]=p+1;if(!(i[a+96>>0]|0))bs(a,d)|0;else do bs(a,d)|0;while((k[d>>2]|0)==15);p=a+108|0;if(i[p>>0]|0){q=a+80|0;s=i[q>>0]|0;if(!(s&1))v=(s&255)>>>1;else v=k[a+84>>2]|0;if(v){v=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;Ov(k[(k[(k[a+4>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,q,0);S2a(q,329672)|0}}a:do switch(k[d>>2]|0){case 1:{q=Zr(a,d)|0;v=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;Sv(k[(k[(k[a+4>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,(k[a+68>>2]|0)-(k[a+60>>2]|0)|0);w=q;y=57;break}case 3:{q=_r(a,d)|0;v=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;Sv(k[(k[(k[a+4>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,(k[a+68>>2]|0)-(k[a+60>>2]|0)|0);w=q;y=57;break}case 6:{w=$r(a,d)|0;y=57;break}case 5:{w=as(a,d)|0;y=57;break}case 7:{tu(e,1);q=a+20|0;v=a+16|0;s=(k[q>>2]|0)+-1+(k[v>>2]|0)|0;c=a+4|0;x=0;xa(643,k[(k[(k[c>>2]|0)+(s>>>10<<2)>>2]|0)+((s&1023)<<2)>>2]|0,e|0);s=x;x=0;if((!(s&1)?(s=(k[q>>2]|0)+-1+(k[v>>2]|0)|0,z=a+60|0,x=0,xa(644,k[(k[(k[c>>2]|0)+(s>>>10<<2)>>2]|0)+((s&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[z>>2]|0)|0),s=x,x=0,!(s&1)):0)?(s=(k[q>>2]|0)+-1+(k[v>>2]|0)|0,x=0,xa(645,k[(k[(k[c>>2]|0)+(s>>>10<<2)>>2]|0)+((s&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[z>>2]|0)|0),z=x,x=0,!(z&1)):0){xu(e);w=1;y=57;break a}z=Hc()|0;s=M;xu(e);t=s;u=z;Sc(u|0);break}case 8:{tu(f,0);z=a+20|0;s=a+16|0;c=(k[z>>2]|0)+-1+(k[s>>2]|0)|0;v=a+4|0;x=0;xa(643,k[(k[(k[v>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,f|0);c=x;x=0;if((!(c&1)?(c=(k[z>>2]|0)+-1+(k[s>>2]|0)|0,q=a+60|0,x=0,xa(644,k[(k[(k[v>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[q>>2]|0)|0),c=x,x=0,!(c&1)):0)?(c=(k[z>>2]|0)+-1+(k[s>>2]|0)|0,x=0,xa(645,k[(k[(k[v>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[q>>2]|0)|0),q=x,x=0,!(q&1)):0){xu(f);w=1;y=57;break a}q=Hc()|0;c=M;xu(f);t=c;u=q;Sc(u|0);break}case 9:{iu(g,0);q=a+20|0;c=a+16|0;v=(k[q>>2]|0)+-1+(k[c>>2]|0)|0;s=a+4|0;x=0;xa(643,k[(k[(k[s>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,g|0);v=x;x=0;if((!(v&1)?(v=(k[q>>2]|0)+-1+(k[c>>2]|0)|0,z=a+60|0,x=0,xa(644,k[(k[(k[s>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[z>>2]|0)|0),v=x,x=0,!(v&1)):0)?(v=(k[q>>2]|0)+-1+(k[c>>2]|0)|0,x=0,xa(645,k[(k[(k[s>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[z>>2]|0)|0),z=x,x=0,!(z&1)):0){xu(g);w=1;y=57;break a}z=Hc()|0;v=M;xu(g);t=v;u=z;Sc(u|0);break}case 10:{ou(h,B);z=a+20|0;v=a+16|0;s=(k[z>>2]|0)+-1+(k[v>>2]|0)|0;c=a+4|0;x=0;xa(643,k[(k[(k[c>>2]|0)+(s>>>10<<2)>>2]|0)+((s&1023)<<2)>>2]|0,h|0);s=x;x=0;if((!(s&1)?(s=(k[z>>2]|0)+-1+(k[v>>2]|0)|0,q=a+60|0,x=0,xa(644,k[(k[(k[c>>2]|0)+(s>>>10<<2)>>2]|0)+((s&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[q>>2]|0)|0),s=x,x=0,!(s&1)):0)?(s=(k[z>>2]|0)+-1+(k[v>>2]|0)|0,x=0,xa(645,k[(k[(k[c>>2]|0)+(s>>>10<<2)>>2]|0)+((s&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[q>>2]|0)|0),q=x,x=0,!(q&1)):0){xu(h);w=1;y=57;break a}q=Hc()|0;s=M;xu(h);t=s;u=q;Sc(u|0);break}case 11:{ou(j,C);q=a+20|0;s=a+16|0;c=(k[q>>2]|0)+-1+(k[s>>2]|0)|0;v=a+4|0;x=0;xa(643,k[(k[(k[v>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,j|0);c=x;x=0;if((!(c&1)?(c=(k[q>>2]|0)+-1+(k[s>>2]|0)|0,z=a+60|0,x=0,xa(644,k[(k[(k[v>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[z>>2]|0)|0),c=x,x=0,!(c&1)):0)?(c=(k[q>>2]|0)+-1+(k[s>>2]|0)|0,x=0,xa(645,k[(k[(k[v>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[z>>2]|0)|0),z=x,x=0,!(z&1)):0){xu(j);w=1;y=57;break a}z=Hc()|0;c=M;xu(j);t=c;u=z;Sc(u|0);break}case 12:{ou(l,-C);z=a+20|0;c=a+16|0;v=(k[z>>2]|0)+-1+(k[c>>2]|0)|0;s=a+4|0;x=0;xa(643,k[(k[(k[s>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,l|0);v=x;x=0;if((!(v&1)?(v=(k[z>>2]|0)+-1+(k[c>>2]|0)|0,q=a+60|0,x=0,xa(644,k[(k[(k[s>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[q>>2]|0)|0),v=x,x=0,!(v&1)):0)?(v=(k[z>>2]|0)+-1+(k[c>>2]|0)|0,x=0,xa(645,k[(k[(k[s>>2]|0)+(v>>>10<<2)>>2]|0)+((v&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[q>>2]|0)|0),q=x,x=0,!(q&1)):0){xu(l);w=1;y=57;break a}q=Hc()|0;v=M;xu(l);t=v;u=q;Sc(u|0);break}case 4:case 2:case 13:{if(i[a+98>>0]|0){q=a+68|0;k[q>>2]=(k[q>>2]|0)+-1;iu(m,0);v=a+20|0;s=a+16|0;c=(k[v>>2]|0)+-1+(k[s>>2]|0)|0;z=a+4|0;x=0;xa(643,k[(k[(k[z>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,m|0);c=x;x=0;if((!(c&1)?(c=(k[v>>2]|0)+-1+(k[s>>2]|0)|0,A=a+60|0,x=0,xa(644,k[(k[(k[z>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[q>>2]|0)+-1-(k[A>>2]|0)|0),c=x,x=0,!(c&1)):0)?(c=(k[v>>2]|0)+-1+(k[s>>2]|0)|0,x=0,xa(645,k[(k[(k[z>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0,(k[q>>2]|0)-(k[A>>2]|0)|0),A=x,x=0,!(A&1)):0){xu(m);w=1;y=57;break a}A=Hc()|0;q=M;xu(m);t=q;u=A;Sc(u|0)}break}default:{}}while(0);if((y|0)==57){if(i[p>>0]|0){k[a+72>>2]=k[a+68>>2];p=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;k[a+76>>2]=k[(k[(k[a+4>>2]|0)+(p>>>10<<2)>>2]|0)+((p&1023)<<2)>>2]}k[o>>2]=(k[o>>2]|0)+-1;D=w;r=b;return D|0}w=a+20|0;o=a+16|0;p=(k[w>>2]|0)+-1+(k[o>>2]|0)|0;y=a+4|0;m=a+60|0;Rv(k[(k[(k[y>>2]|0)+(p>>>10<<2)>>2]|0)+((p&1023)<<2)>>2]|0,(k[d+4>>2]|0)-(k[m>>2]|0)|0);p=(k[w>>2]|0)+-1+(k[o>>2]|0)|0;Sv(k[(k[(k[y>>2]|0)+(p>>>10<<2)>>2]|0)+((p&1023)<<2)>>2]|0,(k[d+8>>2]|0)-(k[m>>2]|0)|0);q2a(n,210184,46);x=0;db(62,a|0,n|0,d|0,0)|0;d=x;x=0;if(d&1){d=Hc()|0;a=M;K2a(n);t=a;u=d;Sc(u|0)}else{K2a(n);D=0;r=b;return D|0}return 0}function Wr(a,b){a=a|0;b=b|0;if(!(i[a+96>>0]|0)){bs(a,b)|0;return}do bs(a,b)|0;while((k[b>>2]|0)==15);return}function Xr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;e=r;r=r+32|0;f=e;g=f+12|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[f>>2]=k[c>>2];k[f+4>>2]=k[c+4>>2];k[f+8>>2]=k[c+8>>2];x=0;Ta(493,g|0,b|0)|0;b=x;x=0;if(b&1){h=Hc()|0;i=M;K2a(g);Sc(h|0)}b=f+24|0;k[b>>2]=d;d=a+32|0;c=k[d>>2]|0;j=a+28|0;l=k[j>>2]|0;m=c-l>>2;n=a+40|0;o=k[n>>2]|0;p=a+44|0;q=k[p>>2]|0;s=l;l=c;do if((((m|0)==0?0:(m*146|0)+-1|0)|0)==(q+o|0)){x=0;va(1480,a+24|0);c=x;x=0;if(c&1){h=Hc()|0;i=M;K2a(g);Sc(h|0)}else{t=k[n>>2]|0;u=k[p>>2]|0;v=k[d>>2]|0;w=k[j>>2]|0;break}}else{t=o;u=q;v=l;w=s}while(0);s=u+t|0;if((v|0)==(w|0))y=0;else y=(k[w+(((s>>>0)/146|0)<<2)>>2]|0)+(((s>>>0)%146|0)*28|0)|0;k[y>>2]=k[f>>2];k[y+4>>2]=k[f+4>>2];k[y+8>>2]=k[f+8>>2];x=0;xa(604,y+12|0,g|0);f=x;x=0;if(f&1){h=Hc()|0;i=M;K2a(g);Sc(h|0)}else{k[y+24>>2]=k[b>>2];k[p>>2]=(k[p>>2]|0)+1;K2a(g);r=e;return 0}return 0}function Yr(a){a=a|0;var b=0;b=(k[a+20>>2]|0)+-1+(k[a+16>>2]|0)|0;return k[(k[(k[a+4>>2]|0)+(b>>>10<<2)>>2]|0)+((b&1023)<<2)>>2]|0}function Zr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;c=r;r=r+272|0;d=c+252|0;e=c+240|0;f=c+228|0;g=c+216|0;h=c+204|0;j=c+192|0;l=c+180|0;m=c+168|0;n=c+156|0;o=c+24|0;p=c;q=c+132|0;s=c+144|0;t=c+96|0;u=c+84|0;v=c+120|0;w=c+72|0;y=c+108|0;z=c+60|0;A=c+48|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;xa(588,o|0,7);B=x;x=0;if(B&1){B=Hc()|0;C=M;D=B;K2a(n);Sc(D|0)}B=a+20|0;E=a+16|0;F=(k[B>>2]|0)+-1+(k[E>>2]|0)|0;G=a+4|0;x=0;xa(643,k[(k[(k[G>>2]|0)+(F>>>10<<2)>>2]|0)+((F&1023)<<2)>>2]|0,o|0);F=x;x=0;a:do if(!(F&1)?(H=(k[B>>2]|0)+-1+(k[E>>2]|0)|0,x=0,xa(644,k[(k[(k[G>>2]|0)+(H>>>10<<2)>>2]|0)+((H&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[a+60>>2]|0)|0),H=x,x=0,!(H&1)):0){H=n+4|0;I=a+102|0;J=a+8|0;K=a+99|0;L=n+1|0;N=n+8|0;O=a+44|0;P=a+24|0;b:while(1){x=0;Ta(511,a|0,m|0)|0;Q=x;x=0;if(Q&1){R=13;break}c:while(1){Q=k[m>>2]|0;switch(Q|0){case 2:{S=Q;R=16;break c;break}case 15:break;default:{T=Q;break c}}x=0;Ta(511,a|0,m|0)|0;Q=x;x=0;if(Q&1){R=12;break b}}if((R|0)==16){R=0;Q=i[n>>0]|0;if(!(((Q&1)==0?(Q&255)>>>1:k[H>>2]|0)|0)){U=1;R=119;break}else T=S}x=0;Ta(496,n|0,329672)|0;Q=x;x=0;if(Q&1){R=13;break}switch(T|0){case 5:{x=0;Q=Fa(109,a|0,m|0,n|0)|0;V=x;x=0;if(V&1){R=13;break b}if(!Q){R=21;break b}break}case 6:{if(!(i[K>>0]|0)){R=109;break b}x=0;xa(588,p|0,0);Q=x;x=0;if(Q&1){R=13;break b}x=0;Q=Fa(110,a|0,m|0,p|0)|0;V=x;x=0;if(V&1){R=35;break b}if(!Q){R=30;break b}x=0;xa(602,q|0,p|0);Q=x;x=0;if(Q&1){R=35;break b}if(!(i[n>>0]&1)){i[L>>0]=0;i[n>>0]=0}else{i[k[N>>2]>>0]=0;k[H>>2]=0}x=0;xa(603,n|0,0);Q=x;x=0;if(Q&1){R=43;break b};k[n>>2]=k[q>>2];k[n+4>>2]=k[q+4>>2];k[n+8>>2]=k[q+8>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;K2a(q);xu(p);break}default:{R=109;break b}}x=0;Ta(511,a|0,s|0)|0;Q=x;x=0;if(Q&1){R=13;break}if((k[s>>2]|0)!=14){R=48;break}if((k[H>>2]|0)>>>0>1073741823&(i[n>>0]&1)!=0){R=59;break}if(i[I>>0]|0){Q=(k[B>>2]|0)+-1+(k[E>>2]|0)|0;x=0;V=Ta(512,k[(k[(k[G>>2]|0)+(Q>>>10<<2)>>2]|0)+((Q&1023)<<2)>>2]|0,n|0)|0;Q=x;x=0;if(Q&1){R=13;break}if(V){R=64;break}}V=(k[B>>2]|0)+-1+(k[E>>2]|0)|0;x=0;Q=Ta(475,k[(k[(k[G>>2]|0)+(V>>>10<<2)>>2]|0)+((V&1023)<<2)>>2]|0,n|0)|0;V=x;x=0;if(V&1){R=13;break}V=Q;Q=k[J>>2]|0;W=k[G>>2]|0;X=k[E>>2]|0;Y=k[B>>2]|0;Z=W;if((((Q|0)==(W|0)?0:(Q-W<<8)+-1|0)|0)==(Y+X|0)){x=0;va(1479,a|0);W=x;x=0;if(W&1){R=13;break}_=k[E>>2]|0;$=k[B>>2]|0;aa=k[G>>2]|0}else{_=X;$=Y;aa=Z}Z=$+_|0;k[(k[aa+(Z>>>10<<2)>>2]|0)+((Z&1023)<<2)>>2]=V;k[B>>2]=$+1;x=0;V=Ba(581,a|0)|0;Z=x;x=0;if(Z&1){R=13;break}Z=k[B>>2]|0;k[B>>2]=Z+-1;Y=k[J>>2]|0;X=k[G>>2]|0;if((1-Z-(k[E>>2]|0)+((Y|0)==(X|0)?0:(Y-X<<8)+-1|0)|0)>>>0>2047){OBa(k[Y+-4>>2]|0);k[J>>2]=(k[J>>2]|0)+-4}if(!V){R=86;break}x=0;Ta(511,a|0,y|0)|0;V=x;x=0;if(V&1){R=13;break}V=k[y>>2]|0;switch(V|0){case 15:case 13:case 2:{ba=V;break}default:{R=93;break b}}d:while(1){switch(ba|0){case 2:{ca=1;R=107;break b;break}case 15:break;default:break d}x=0;Ta(511,a|0,y|0)|0;V=x;x=0;if(V&1){R=11;break b}ba=k[y>>2]|0}}e:switch(R|0){case 11:{J=Hc()|0;da=M;ea=J;R=15;break a;break}case 12:{J=Hc()|0;da=M;ea=J;R=15;break a;break}case 13:{J=Hc()|0;da=M;ea=J;R=15;break a;break}case 21:{J=k[O>>2]|0;f:while(1){x=0;Ta(511,a|0,l|0)|0;I=x;x=0;if(I&1){R=10;break}switch(k[l>>2]|0){case 0:case 2:{break f;break}default:{}}}if((R|0)==10){I=Hc()|0;da=M;ea=I;R=15;break a}x=0;xa(648,P|0,J|0);I=x;x=0;if(I&1){R=14;break a}U=0;xu(o);K2a(n);r=c;return U|0}case 30:{I=k[O>>2]|0;g:while(1){x=0;Ta(511,a|0,j|0)|0;K=x;x=0;if(K&1){R=34;break}switch(k[j>>2]|0){case 0:case 2:{break g;break}default:{}}}if((R|0)==34){J=Hc()|0;fa=J;ga=M;R=37;break}x=0;xa(648,P|0,I|0);J=x;x=0;if(J&1){J=Hc()|0;fa=J;ga=M;R=37;break}xu(p);U=0;xu(o);K2a(n);r=c;return U|0}case 35:{J=Hc()|0;fa=J;ga=M;R=37;break}case 43:{J=Hc(0)|0;Fg(J);break}case 48:{x=0;fb(140,t|0,210231,36);J=x;x=0;if(J&1){R=14;break a}x=0;db(62,a|0,t|0,s|0,0)|0;J=x;x=0;do if(!(J&1)){K=k[O>>2]|0;h:while(1){x=0;Ta(511,a|0,h|0)|0;V=x;x=0;if(V&1){R=55;break}switch(k[h>>2]|0){case 0:case 2:{break h;break}default:{}}}if((R|0)==55){V=Hc()|0;ha=V;ia=M;break}x=0;xa(648,P|0,K|0);V=x;x=0;if(!(V&1)){K2a(t);R=106;break e}else R=56}else R=56;while(0);if((R|0)==56){J=Hc()|0;ha=J;ia=M}K2a(t);ja=ha;ka=ia;break a;break}case 59:{x=0;fb(140,u|0,210829,17);J=x;x=0;if(J&1){R=14;break a}x=0;va(1477,u|0);x=0;J=Hc()|0;I=M;K2a(u);ja=J;ka=I;break a;break}case 64:{k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;I=i[n>>0]|0;J=(I&1)==0?(I&255)>>>1:k[H>>2]|0;x=0;nb(83,w|0,210847,16,J+16|0);I=x;x=0;if(!(I&1)?(x=0,Fa(88,w|0,((i[n>>0]&1)==0?L:k[N>>2]|0)|0,J|0)|0,J=x,x=0,!(J&1)):0){x=0;J=Ta(484,w|0,292511)|0;I=x;x=0;if(I&1){I=Hc()|0;V=M;K2a(w);ja=I;ka=V;break a};k[v>>2]=k[J>>2];k[v+4>>2]=k[J+4>>2];k[v+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;K2a(w);x=0;db(62,a|0,v|0,m|0,0)|0;J=x;x=0;do if(!(J&1)){V=k[O>>2]|0;i:while(1){x=0;Ta(511,a|0,g|0)|0;I=x;x=0;if(I&1){R=75;break}switch(k[g>>2]|0){case 0:case 2:{break i;break}default:{}}}if((R|0)==75){K=Hc()|0;la=K;ma=M;break}x=0;xa(648,P|0,V|0);K=x;x=0;if(!(K&1)){K2a(v);R=106;break e}else R=76}else R=76;while(0);if((R|0)==76){J=Hc()|0;la=J;ma=M}K2a(v);ja=la;ka=ma;break a}J=Hc()|0;N=M;K2a(w);da=N;ea=J;R=15;break a;break}case 86:{J=k[O>>2]|0;j:while(1){x=0;Ta(511,a|0,f|0)|0;N=x;x=0;if(N&1){R=9;break}switch(k[f>>2]|0){case 0:case 2:{break j;break}default:{}}}if((R|0)==9){N=Hc()|0;da=M;ea=N;R=15;break a}x=0;xa(648,P|0,J|0);N=x;x=0;if(N&1){R=14;break a}R=106;break}case 93:{x=0;fb(140,z|0,210268,40);N=x;x=0;if(N&1){R=14;break a}x=0;db(62,a|0,z|0,y|0,0)|0;N=x;x=0;do if(!(N&1)){L=k[O>>2]|0;k:while(1){x=0;Ta(511,a|0,e|0)|0;H=x;x=0;if(H&1){R=100;break}switch(k[e>>2]|0){case 0:case 2:{break k;break}default:{}}}if((R|0)==100){V=Hc()|0;na=V;oa=M;break}x=0;xa(648,P|0,L|0);V=x;x=0;if(!(V&1)){K2a(z);ca=0;R=107;break e}else R=101}else R=101;while(0);if((R|0)==101){N=Hc()|0;na=N;oa=M}K2a(z);ja=na;ka=oa;break a;break}case 109:{x=0;fb(140,A|0,210309,33);N=x;x=0;if(N&1){R=14;break a}x=0;db(62,a|0,A|0,m|0,0)|0;N=x;x=0;do if(!(N&1)){J=k[O>>2]|0;l:while(1){x=0;Ta(511,a|0,d|0)|0;V=x;x=0;if(V&1){R=116;break}switch(k[d>>2]|0){case 0:case 2:{break l;break}default:{}}}if((R|0)==116){L=Hc()|0;pa=L;qa=M;break}x=0;xa(648,P|0,J|0);L=x;x=0;if(!(L&1)){K2a(A);U=0;xu(o);K2a(n);r=c;return U|0}else R=117}else R=117;while(0);if((R|0)==117){P=Hc()|0;pa=P;qa=M}K2a(A);ja=pa;ka=qa;break a;break}case 119:{xu(o);K2a(n);r=c;return U|0}}if((R|0)==37){xu(p);ja=fa;ka=ga;break}else if((R|0)==106){U=0;xu(o);K2a(n);r=c;return U|0}else if((R|0)==107){U=ca;xu(o);K2a(n);r=c;return U|0}}else R=14;while(0);if((R|0)==14){U=Hc()|0;da=M;ea=U;R=15}if((R|0)==15){ja=ea;ka=da}xu(o);C=ka;D=ja;K2a(n);Sc(D|0);return 0}function _r(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+96|0;d=c+72|0;e=c+60|0;f=c;g=c+48|0;h=c+36|0;j=c+24|0;iu(f,6);l=a+20|0;m=a+16|0;n=(k[l>>2]|0)+-1+(k[m>>2]|0)|0;o=a+4|0;x=0;xa(643,k[(k[(k[o>>2]|0)+(n>>>10<<2)>>2]|0)+((n&1023)<<2)>>2]|0,f|0);n=x;x=0;do if(!(n&1)?(p=(k[l>>2]|0)+-1+(k[m>>2]|0)|0,x=0,xa(644,k[(k[(k[o>>2]|0)+(p>>>10<<2)>>2]|0)+((p&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[a+60>>2]|0)|0),p=x,x=0,!(p&1)):0){p=a+68|0;q=k[p>>2]|0;s=k[a+64>>2]|0;a:do if((q|0)==(s|0))t=q;else{u=q;while(1){switch(i[u>>0]|0){case 10:case 13:case 9:case 32:break;default:{t=u;break a}}u=u+1|0;k[p>>2]=u;if((u|0)==(s|0)){t=s;break a}}}while(0);if((i[t>>0]|0)==93){x=0;Ta(511,a|0,g|0)|0;s=x;x=0;if(s&1){v=13;break}w=1;xu(f);r=c;return w|0}s=a+8|0;p=0;b:while(1){q=(k[l>>2]|0)+-1+(k[m>>2]|0)|0;u=p+1|0;x=0;y=Ta(481,k[(k[(k[o>>2]|0)+(q>>>10<<2)>>2]|0)+((q&1023)<<2)>>2]|0,p|0)|0;q=x;x=0;if(q&1){v=12;break}q=y;y=k[s>>2]|0;z=k[o>>2]|0;A=k[m>>2]|0;B=k[l>>2]|0;C=z;if((((y|0)==(z|0)?0:(y-z<<8)+-1|0)|0)==(B+A|0)){x=0;va(1479,a|0);z=x;x=0;if(z&1){v=12;break}D=k[m>>2]|0;E=k[l>>2]|0;F=k[o>>2]|0}else{D=A;E=B;F=C}C=E+D|0;k[(k[F+(C>>>10<<2)>>2]|0)+((C&1023)<<2)>>2]=q;k[l>>2]=E+1;x=0;q=Ba(581,a|0)|0;C=x;x=0;if(C&1){v=12;break}C=k[l>>2]|0;k[l>>2]=C+-1;B=k[s>>2]|0;A=k[o>>2]|0;if((1-C-(k[m>>2]|0)+((B|0)==(A|0)?0:(B-A<<8)+-1|0)|0)>>>0>2047){OBa(k[B+-4>>2]|0);k[s>>2]=(k[s>>2]|0)+-4}if(!q){v=23;break}x=0;Ta(511,a|0,h|0)|0;q=x;x=0;if(q&1){v=12;break}c:while(1){switch(k[h>>2]|0){case 4:{v=42;break b;break}case 13:{break c;break}case 15:break;default:{v=31;break b}}x=0;Ta(511,a|0,h|0)|0;q=x;x=0;if(q&1){v=11;break b}}p=u}if((v|0)==11){p=Hc()|0;G=p;H=M;break}else if((v|0)==12){p=Hc()|0;G=p;H=M;break}else if((v|0)==23){p=k[a+44>>2]|0;d:while(1){x=0;Ta(511,a|0,e|0)|0;s=x;x=0;if(s&1){v=10;break}switch(k[e>>2]|0){case 0:case 4:{break d;break}default:{}}}if((v|0)==10){s=Hc()|0;G=s;H=M;break}x=0;xa(648,a+24|0,p|0);s=x;x=0;if(s&1){v=13;break}w=0;xu(f);r=c;return w|0}else if((v|0)==31){x=0;fb(140,j|0,210343,39);s=x;x=0;if(s&1){v=13;break}x=0;db(62,a|0,j|0,h|0,0)|0;s=x;x=0;do if(!(s&1)){q=k[a+44>>2]|0;e:while(1){x=0;Ta(511,a|0,d|0)|0;B=x;x=0;if(B&1){v=38;break}switch(k[d>>2]|0){case 0:case 4:{break e;break}default:{}}}if((v|0)==38){u=Hc()|0;I=u;J=M;break}x=0;xa(648,a+24|0,q|0);u=x;x=0;if(!(u&1)){K2a(j);w=0;xu(f);r=c;return w|0}else v=39}else v=39;while(0);if((v|0)==39){s=Hc()|0;I=s;J=M}K2a(j);K=I;L=J;xu(f);Sc(K|0)}else if((v|0)==42){w=1;xu(f);r=c;return w|0}}else v=13;while(0);if((v|0)==13){v=Hc()|0;G=v;H=M}K=G;L=H;xu(f);Sc(K|0);return 0}function $r(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;iu(d,0);x=0;e=Fa(110,a|0,b|0,d|0)|0;f=x;x=0;if(!(f&1)){if(!e){g=0;xu(d);r=c;return g|0}e=a+20|0;f=a+16|0;h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0;i=a+4|0;x=0;xa(643,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,d|0);h=x;x=0;if((!(h&1)?(h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0,j=a+60|0,x=0,xa(644,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[j>>2]|0)|0),h=x,x=0,!(h&1)):0)?(h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0,x=0,xa(645,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,(k[b+8>>2]|0)-(k[j>>2]|0)|0),j=x,x=0,!(j&1)):0){g=1;xu(d);r=c;return g|0}}g=Hc()|0;xu(d);Sc(g|0);return 0}function as(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+48|0;d=c+24|0;e=c;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;f=Fa(109,a|0,b|0,d|0)|0;g=x;x=0;if(!(g&1)){if(!f){h=0;K2a(d);r=c;return h|0}x=0;xa(587,e|0,d|0);f=x;x=0;if(!(f&1)){f=a+20|0;g=a+16|0;i=(k[f>>2]|0)+-1+(k[g>>2]|0)|0;j=a+4|0;x=0;xa(643,k[(k[(k[j>>2]|0)+(i>>>10<<2)>>2]|0)+((i&1023)<<2)>>2]|0,e|0);i=x;x=0;if((!(i&1)?(i=(k[f>>2]|0)+-1+(k[g>>2]|0)|0,l=a+60|0,x=0,xa(644,k[(k[(k[j>>2]|0)+(i>>>10<<2)>>2]|0)+((i&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[l>>2]|0)|0),i=x,x=0,!(i&1)):0)?(i=(k[f>>2]|0)+-1+(k[g>>2]|0)|0,x=0,xa(645,k[(k[(k[j>>2]|0)+(i>>>10<<2)>>2]|0)+((i&1023)<<2)>>2]|0,(k[b+8>>2]|0)-(k[l>>2]|0)|0),l=x,x=0,!(l&1)):0){xu(e);h=1;K2a(d);r=c;return h|0}h=Hc()|0;c=M;xu(e);m=c;n=h;K2a(d);Sc(n|0)}}h=Hc()|0;m=M;n=h;K2a(d);Sc(n|0);return 0}function bs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;c=a+68|0;d=k[c>>2]|0;e=k[a+64>>2]|0;f=d;g=e;a:do if((d|0)==(e|0)){h=f;j=d;l=5}else{m=f;n=d;while(1){switch(i[n>>0]|0){case 10:case 13:case 9:case 32:break;default:{h=m;j=n;l=5;break a}}n=n+1|0;k[c>>2]=n;o=n;if((n|0)==(e|0)){p=o;break}else m=o}k[b+4>>2]=p;q=0;r=p;s=c;t=e}while(0);if((l|0)==5){k[b+4>>2]=h;if((j|0)==(e|0)){q=0;r=h;s=c;t=e}else{h=j+1|0;k[c>>2]=h;q=i[j>>0]|0;r=h;s=c;t=h}}b:do switch(q<<24>>24|0){case 123:{k[b>>2]=1;break}case 125:{k[b>>2]=2;break}case 91:{k[b>>2]=3;break}case 93:{k[b>>2]=4;break}case 34:{k[b>>2]=5;if((t|0)==(e|0))l=102;else{h=t;while(1){j=h+1|0;k[c>>2]=j;switch(i[h>>0]|0){case 34:{break b;break}case 92:{if((j|0)==(e|0)){l=102;break b}p=h+2|0;k[c>>2]=p;u=p;break}default:u=j}if((u|0)==(e|0)){l=102;break b}else h=u}}break}case 39:{if(i[a+100>>0]|0){k[b>>2]=5;if((t|0)==(e|0))l=102;else{h=t;while(1){j=h+1|0;k[c>>2]=j;switch(i[h>>0]|0){case 39:{break b;break}case 92:{if((j|0)==(e|0)){l=102;break b}p=h+2|0;k[c>>2]=p;v=p;break}default:v=j}if((v|0)==(e|0)){l=102;break b}else h=v}}}else l=23;break}case 47:{l=23;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{k[b>>2]=6;h=48;j=t;c:while(1){p=j>>>0>>0;d=h;while(1){if((d+-48&255)>=10){w=d;x=j;break c}k[c>>2]=j;if(p)break;else d=0}h=i[j>>0]|0;j=j+1|0}d:do if(w<<24>>24==46){k[c>>2]=x;if(x>>>0>>0){y=i[x>>0]|0;z=x+1|0}else{y=0;z=x}if(z>>>0>>0){j=y;h=z;while(1){if((j+-48&255)>=10){A=j;B=h;break d}k[c>>2]=h;d=h+1|0;p=i[h>>0]|0;if(d>>>0>>0){j=p;h=d}else{C=p;D=d;break}}}else{C=y;D=z}if((C+-48&255)<10){k[c>>2]=D;A=0;B=D}else{A=C;B=D}}else{A=w;B=x}while(0);switch(A<<24>>24){case 69:case 101:break;default:break b}k[c>>2]=B;e:do if(B>>>0>>0){h=B+1|0;j=i[B>>0]|0;switch(j<<24>>24){case 45:case 43:break;default:{E=j;F=h;break e}}k[c>>2]=h;if(h>>>0>>0){E=i[h>>0]|0;F=B+2|0}else{E=0;F=h}}else{E=0;F=B}while(0);if(F>>>0>>0){h=E;j=F;while(1){if((h+-48&255)>=10)break b;k[c>>2]=j;d=j+1|0;p=i[j>>0]|0;if(d>>>0>>0){h=p;j=d}else{G=p;H=d;break}}}else{G=E;H=F}if((G+-48&255)<10)k[c>>2]=H;break}case 45:{if((t|0)!=(e|0)?(i[t>>0]|0)==73:0){j=t+1|0;k[c>>2]=j;k[b>>2]=12;if(!(i[a+103>>0]|0)){l=102;break b}if((g-j|0)<7){l=102;break b}else I=7;while(1){if(!I)break;I=I+-1|0;if((i[j+I>>0]|0)!=(i[210864+I>>0]|0)){l=102;break b}}k[c>>2]=t+8;break b}else{J=48;K=t}f:while(1){j=K>>>0>>0;h=J;while(1){if((h+-48&255)>=10){L=h;M=K;break f}k[c>>2]=K;if(j)break;else h=0}J=i[K>>0]|0;K=K+1|0}g:do if(L<<24>>24==46){k[c>>2]=M;if(M>>>0>>0){N=i[M>>0]|0;O=M+1|0}else{N=0;O=M}if(O>>>0>>0){h=N;j=O;while(1){if((h+-48&255)>=10){P=h;Q=j;break g}k[c>>2]=j;d=j+1|0;p=i[j>>0]|0;if(d>>>0>>0){h=p;j=d}else{R=p;S=d;break}}}else{R=N;S=O}if((R+-48&255)<10){k[c>>2]=S;P=0;Q=S}else{P=R;Q=S}}else{P=L;Q=M}while(0);h:do switch(P<<24>>24){case 69:case 101:{k[c>>2]=Q;i:do if(Q>>>0>>0){j=Q+1|0;h=i[Q>>0]|0;switch(h<<24>>24){case 45:case 43:break;default:{T=h;U=j;break i}}k[c>>2]=j;if(j>>>0>>0){T=i[j>>0]|0;U=Q+2|0}else{T=0;U=j}}else{T=0;U=Q}while(0);if(U>>>0>>0){j=T;h=U;while(1){if((j+-48&255)>=10)break h;k[c>>2]=h;d=h+1|0;p=i[h>>0]|0;if(d>>>0>>0){j=p;h=d}else{V=p;W=d;break}}}else{V=T;W=U}if((V+-48&255)<10)k[c>>2]=W;break}default:{}}while(0);k[b>>2]=6;break}case 116:{k[b>>2]=7;h=r;if((g-r|0)<3)l=102;else{j=3;while(1){if(!j)break;j=j+-1|0;if((i[h+j>>0]|0)!=(i[210383+j>>0]|0)){l=102;break b}}k[c>>2]=h+3}break}case 102:{k[b>>2]=8;j=r;if((g-r|0)<4)l=102;else{d=4;while(1){if(!d)break;d=d+-1|0;if((i[j+d>>0]|0)!=(i[210387+d>>0]|0)){l=102;break b}}k[c>>2]=j+4}break}case 110:{k[b>>2]=9;d=r;if((g-r|0)<3)l=102;else{h=3;while(1){if(!h)break;h=h+-1|0;if((i[d+h>>0]|0)!=(i[301217+h>>0]|0)){l=102;break b}}k[c>>2]=d+3}break}case 78:{if((i[a+103>>0]|0)!=0?(k[b>>2]=10,h=r,(g-r|0)>=2):0){j=2;while(1){if(!j)break;j=j+-1|0;if((i[h+j>>0]|0)!=(i[210872+j>>0]|0)){l=102;break b}}k[c>>2]=h+2}else l=102;break}case 73:{if((i[a+103>>0]|0)!=0?(k[b>>2]=11,j=r,(g-r|0)>=7):0){d=7;while(1){if(!d)break;d=d+-1|0;if((i[j+d>>0]|0)!=(i[210864+d>>0]|0)){l=102;break b}}k[c>>2]=j+7}else l=102;break}case 44:{k[b>>2]=13;break}case 58:{k[b>>2]=14;break}case 0:{k[b>>2]=0;break}default:l=102}while(0);if((l|0)==23?(k[b>>2]=15,!(gs(a)|0)):0)l=102;if((l|0)==102)k[b>>2]=16;k[b+8>>2]=k[s>>2];return 1}function cs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+68|0;c=k[b>>2]|0;d=k[a+64>>2]|0;if((c|0)==(d|0))return;else e=c;a:while(1){switch(i[e>>0]|0){case 10:case 13:case 9:case 32:break;default:{f=4;break a}}e=e+1|0;k[b>>2]=e;if((e|0)==(d|0)){f=4;break}}if((f|0)==4)return}function ds(a){a=a|0;var b=0,c=0,d=0;b=a+68|0;c=k[b>>2]|0;if((c|0)==(k[a+64>>2]|0)){d=0;return d|0}k[b>>2]=c+1;d=i[c>>0]|0;return d|0}function es(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=a+68|0;c=k[b>>2]|0;d=k[a+64>>2]|0;a:do if((c|0)==(d|0))e=0;else{a=c;while(1){f=a+1|0;k[b>>2]=f;g=i[a>>0]|0;switch(g<<24>>24){case 34:{e=34;break a;break}case 92:{if((f|0)==(d|0)){e=92;break a}h=a+2|0;k[b>>2]=h;j=h;l=92;break}default:{j=f;l=g}}if((j|0)==(d|0)){e=l;break a}else a=j}}while(0);return e<<24>>24==34|0}function fs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=a+68|0;c=k[b>>2]|0;d=k[a+64>>2]|0;a:do if((c|0)==(d|0))e=0;else{a=c;while(1){f=a+1|0;k[b>>2]=f;g=i[a>>0]|0;switch(g<<24>>24){case 39:{e=39;break a;break}case 92:{if((f|0)==(d|0)){e=92;break a}h=a+2|0;k[b>>2]=h;j=h;l=92;break}default:{j=f;l=g}}if((j|0)==(d|0)){e=l;break a}else a=j}}while(0);return e<<24>>24==39|0}function gs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;b=a+68|0;c=k[b>>2]|0;d=c+-1|0;e=k[a+64>>2]|0;if((c|0)==(e|0)){f=0;return f|0}g=c+1|0;k[b>>2]=g;h=i[c>>0]|0;a:do switch(h<<24>>24){case 42:{if((g|0)==(e|0)){f=0;return f|0}else{j=g;l=c}while(1){m=j+1|0;k[b>>2]=m;if((i[j>>0]|0)==42?(i[m>>0]|0)==47:0){n=l;o=m;break}if((m|0)==(e|0)){f=0;p=23;break}else{q=j;j=m;l=q}}if((p|0)==23)return f|0;if((o|0)==(e|0)){f=0;return f|0}q=n+3|0;k[b>>2]=q;if((i[o>>0]|0)==47)r=q;else{f=0;return f|0}break}case 47:{q=g;m=c;b:while(1){if((q|0)==(e|0)){r=e;break a}s=q+1|0;k[b>>2]=s;switch(i[q>>0]|0){case 10:{r=s;break a;break}case 13:{t=m;u=s;break b;break}default:{v=q;q=s;m=v}}}if((u|0)!=(e|0))if((i[u>>0]|0)==10){m=t+3|0;k[b>>2]=m;r=m}else r=u;else r=e;break}default:{f=0;return f|0}}while(0);if(!(i[a+108>>0]|0)){f=1;return f|0}e=k[a+72>>2]|0;c:do if(e){d:do if(e>>>0>>0){u=e;while(1){switch(i[u>>0]|0){case 13:case 10:{w=0;break c;break}default:{}}u=u+1|0;if(u>>>0>=d>>>0)break d}}while(0);if(h<<24>>24==42&d>>>0>>0){u=d;while(1){switch(i[u>>0]|0){case 13:case 10:{w=0;break c;break}default:{}}u=u+1|0;if(u>>>0>=r>>>0){w=1;break c}}}else w=1}else w=0;while(0);ls(a,d,r,w);f=1;return f|0}function hs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=a+68|0;d=k[c>>2]|0;e=a+64|0;if((b?(d|0)!=(k[e>>2]|0):0)?(i[d>>0]|0)==73:0){k[c>>2]=d+1;f=0;return f|0}else{g=48;h=d}a:while(1){d=g;while(1){if((d+-48&255)>=10){j=d;l=h;break a}k[c>>2]=h;if(h>>>0<(k[e>>2]|0)>>>0)break;else d=0}g=i[h>>0]|0;h=h+1|0}b:do if(j<<24>>24==46){k[c>>2]=l;h=k[e>>2]|0;if(l>>>0>>0){m=i[l>>0]|0;n=l+1|0}else{m=0;n=l}while(1){g=n>>>0>>0;d=m;while(1){if((d+-48&255)>=10){o=d;p=n;break b}k[c>>2]=n;if(g)break;else d=0}m=i[n>>0]|0;n=n+1|0}}else{o=j;p=l}while(0);switch(o<<24>>24){case 69:case 101:break;default:{f=1;return f|0}}k[c>>2]=p;o=k[e>>2]|0;c:do if(p>>>0>>0){e=p+1|0;l=i[p>>0]|0;switch(l<<24>>24){case 45:case 43:break;default:{q=l;r=e;break c}}k[c>>2]=e;if(e>>>0>>0){q=i[e>>0]|0;r=p+2|0}else{q=0;r=e}}else{q=0;r=p}while(0);d:while(1){p=r>>>0>>0;e=q;while(1){if((e+-48&255)>=10){f=1;break d}k[c>>2]=r;if(p)break;else e=0}q=i[r>>0]|0;r=r+1|0}return f|0}function is(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=a+68|0;e=k[d>>2]|0;f=e;if(((k[a+64>>2]|0)-e|0)<(c|0)){g=0;return g|0}else h=c;while(1){if(!h)break;h=h+-1|0;if((i[f+h>>0]|0)!=(i[b+h>>0]|0)){g=0;j=5;break}}if((j|0)==5)return g|0;k[d>>2]=f+c;g=1;return g|0}function js(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+68|0;c=k[b>>2]|0;d=k[a+64>>2]|0;a:do if((c|0)==(d|0))e=c;else{a=c;while(1){f=a;a=a+1|0;k[b>>2]=a;if((i[f>>0]|0)==42?(i[a>>0]|0)==47:0){e=a;break a}if((a|0)==(d|0)){g=0;break}}return g|0}while(0);if((e|0)==(d|0)){g=0;return g|0}k[b>>2]=e+1;g=(i[e>>0]|0)==47;return g|0}function ks(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+68|0;c=k[a+64>>2]|0;a=k[b>>2]|0;a:while(1){if((a|0)==(c|0)){d=7;break}e=a+1|0;k[b>>2]=e;switch(i[a>>0]|0){case 13:{f=e;g=a;d=4;break a;break}case 10:{d=7;break a;break}default:a=e}}if((d|0)==4){if((f|0)==(c|0))return 1;if((i[f>>0]|0)!=10)return 1;k[b>>2]=g+2;return 1}else if((d|0)==7)return 1;return 0}function ls(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+16|0;f=e;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(603,f|0,c-b|0);g=x;x=0;if(g&1){g=Hc()|0;h=g;j=M;K2a(f);Sc(h|0)}a:do if((b|0)!=(c|0)){g=b;while(1){l=g+1|0;m=i[g>>0]|0;if(m<<24>>24==13){if((l|0)==(c|0))n=c;else n=(i[l>>0]|0)==10?g+2|0:l;x=0;xa(605,f|0,10);o=x;x=0;if(o&1)break;else p=n}else{x=0;xa(605,f|0,m|0);m=x;x=0;if(m&1)break;else p=l}if((p|0)==(c|0))break a;else g=p}g=Hc()|0;h=g;j=M;K2a(f);Sc(h|0)}while(0);if((d|0)==1){x=0;fb(175,k[a+76>>2]|0,f|0,1);d=x;x=0;if(d&1){q=Hc()|0;s=M;K2a(f);Sc(q|0)}else{K2a(f);r=e;return}}else{d=i[f>>0]|0;h=(d&1)==0;x=0;Fa(88,a+80|0,(h?f+1|0:k[f+8>>2]|0)|0,(h?(d&255)>>>1:k[f+4>>2]|0)|0)|0;d=x;x=0;if(d&1){q=Hc()|0;s=M;K2a(f);Sc(q|0)}else{K2a(f);r=e;return}}}function ms(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+48|0;e=d+40|0;f=d+24|0;g=d+36|0;h=d+12|0;j=d;l=b+8|0;m=b+4|0;u3a(c,(k[l>>2]|0)+-2-(k[m>>2]|0)|0);n=(k[m>>2]|0)+1|0;k[e>>2]=n;m=(k[l>>2]|0)+-1|0;if((n|0)==(m|0)){o=1;r=d;return o|0}l=h+8|0;p=h+1|0;q=h+4|0;s=n;a:while(1){n=s+1|0;k[e>>2]=n;t=i[s>>0]|0;b:do switch(t<<24>>24){case 34:{o=1;u=27;break a;break}case 92:{if((n|0)==(m|0)){u=5;break a}v=s+2|0;k[e>>2]=v;switch(i[n>>0]|0){case 34:{L3a(c,34);w=v;break b;break}case 47:{L3a(c,47);w=v;break b;break}case 92:{L3a(c,92);w=v;break b;break}case 98:{L3a(c,8);w=v;break b;break}case 102:{L3a(c,12);w=v;break b;break}case 110:{L3a(c,10);w=v;break b;break}case 114:{L3a(c,13);w=v;break b;break}case 116:{L3a(c,9);w=v;break b;break}case 117:{if(!(ss(a,b,e,m,g)|0)){u=18;break a}Qs(h,k[g>>2]|0);y=i[h>>0]|0;z=(y&1)==0;x=0;Fa(88,c|0,(z?p:k[l>>2]|0)|0,(z?(y&255)>>>1:k[q>>2]|0)|0)|0;y=x;x=0;if(y&1){u=21;break a}K2a(h);w=k[e>>2]|0;break b;break}default:{A=v;u=22;break a}}break}default:{L3a(c,t);w=n}}while(0);if((w|0)==(m|0)){o=1;u=27;break}else s=w}if((u|0)==5){q2a(f,210392,31);x=0;db(62,a|0,f|0,b|0,m|0)|0;m=x;x=0;if(m&1){m=Hc()|0;w=M;K2a(f);B=w;C=m;Sc(C|0)}else{K2a(f);o=0;r=d;return o|0}}else if((u|0)==18){o=0;r=d;return o|0}else if((u|0)==21){f=Hc()|0;m=M;K2a(h);B=m;C=f;Sc(C|0)}else if((u|0)==22){q2a(j,210424,29);x=0;db(62,a|0,j|0,b|0,A|0)|0;A=x;x=0;if(A&1){A=Hc()|0;b=M;K2a(j);B=b;C=A;Sc(C|0)}else{K2a(j);o=0;r=d;return o|0}}else if((u|0)==27){r=d;return o|0}return 0}function ns(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=k[a+44>>2]|0;do{bs(a,d)|0;f=k[d>>2]|0}while(!((f|0)==(b|0)|(f|0)==0));Us(a+24|0,e);r=c;return 0}function os(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+80|0;e=d+48|0;f=d+24|0;g=d;h=k[b+4>>2]|0;j=(i[h>>0]|0)==45;l=j?h+1|0:h;h=1688;m=Gyb(0,0,k[h>>2]|0,k[h+4>>2]|0)|0;h=1704;n=j?m:k[h>>2]|0;m=j?M:k[h+4>>2]|0;h=Ryb(n|0,m|0,10,0)|0;o=M;p=k[b+8>>2]|0;a:do if(l>>>0

      >>0){q=Syb(n|0,m|0,10,0)|0;s=M;t=0;u=0;v=l;while(1){w=i[v>>0]|0;v=v+1|0;if((w+-48&255)>9){y=4;break}z=(w<<24>>24)+-48|0;if(!(t>>>0>>0|(t|0)==(o|0)&u>>>0>>0)){if(!((t>>>0>>0|(t|0)==(o|0)&u>>>0<=h>>>0)&(v|0)==(p|0))){y=9;break}if(0>s>>>0|0==(s|0)&z>>>0>q>>>0){y=9;break}else{A=z;B=0}}else{A=z;B=0}z=Qyb(u|0,t|0,10,0)|0;w=Hyb(A|0,B|0,z|0,M|0)|0;z=M;if(v>>>0>=p>>>0){C=w;D=z;break a}else{t=z;u=w}}if((y|0)==4){E=qs(a,b,c)|0;r=d;return E|0}else if((y|0)==9){E=qs(a,b,c)|0;r=d;return E|0}}else{C=0;D=0}while(0);if(j){j=Gyb(0,0,C|0,D|0)|0;mu(e,j,M);x=0;Ta(476,c|0,e|0)|0;j=x;x=0;if(j&1){j=Hc()|0;b=M;xu(e);F=b;G=j;Sc(G|0)}else{xu(e);E=1;r=d;return E|0}}e=k[6037]|0;j=((e|0)<0)<<31>>31;if(D>>>0>j>>>0|(D|0)==(j|0)&C>>>0>e>>>0){nu(g,C,D);x=0;Ta(476,c|0,g|0)|0;e=x;x=0;if(e&1){e=Hc()|0;j=M;xu(g);F=j;G=e;Sc(G|0)}else{xu(g);E=1;r=d;return E|0}}else{mu(f,C,D);x=0;Ta(476,c|0,f|0)|0;c=x;x=0;if(c&1){c=Hc()|0;D=M;xu(f);F=D;G=c;Sc(G|0)}else{xu(f);E=1;r=d;return E|0}}return 0}function ps(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;Xr(a,b,c,0)|0;c=k[a+44>>2]|0;do{bs(a,f)|0;b=k[f>>2]|0}while(!((b|0)==(d|0)|(b|0)==0));Us(a+24|0,c);r=e;return 0}function qs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;d=r;r=r+144|0;e=d+40|0;f=d+32|0;g=d+24|0;h=d+116|0;j=d+128|0;l=d+80|0;m=d+68|0;n=d+56|0;o=d+44|0;q=d;p[g>>3]=0.0;s=b+8|0;t=k[s>>2]|0;u=b+4|0;v=k[u>>2]|0;w=t-v|0;y=v;z=t;if((w|0)<0){q2a(h,210875,28);x=0;db(62,a|0,h|0,b|0,0)|0;A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(h);C=B;D=A;Sc(D|0)}else{K2a(h);E=0;r=d;return E|0}}k[j>>2]=6712357;if((w|0)<33){Dyb(l|0,y|0,w|0)|0;h=l+w|0;i[h>>0]=0;A=lLa()|0;a:do if(A){B=i[k[A>>2]>>0]|0;switch(B<<24>>24){case 46:case 0:{break a;break}default:{}}if((w|0)>0){F=l;do{if((i[F>>0]|0)==46)i[F>>0]=B;F=F+1|0}while((F|0)!=(h|0))}}while(0);k[f>>2]=g;G=TQa(l,j,f)|0}else{f=t-v|0;if(f>>>0<=4294967279)if(f>>>0<11){i[l>>0]=f<<1;H=l+1|0}else I=17;else{GBa(l);I=17}if((I|0)==17){v=f+16&-16;t=KBa(v)|0;k[l+8>>2]=t;k[l>>2]=v|1;k[l+4>>2]=f;H=t}if((y|0)==(z|0))J=H;else{t=y;y=H;while(1){i[y>>0]=i[t>>0]|0;t=t+1|0;if((t|0)==(z|0))break;else y=y+1|0}J=H+f|0}i[J>>0]=0;J=(i[l>>0]&1)==0?l+1|0:k[l+8>>2]|0;k[e>>2]=g;f=TQa(J,j,e)|0;K2a(l);G=f}b:do if((G|0)==1){ou(q,+p[g>>3]);x=0;Ta(476,c|0,q|0)|0;f=x;x=0;if(!(f&1)){xu(q);K=1;break}f=Hc()|0;l=M;xu(q);C=l;D=f;Sc(D|0)}else{f=k[u>>2]|0;l=k[s>>2]|0;e=l-f|0;if(e>>>0<=4294967279)if(e>>>0<11){i[o>>0]=e<<1;L=o+1|0}else I=27;else{GBa(o);I=27}if((I|0)==27){j=e+16&-16;J=KBa(j)|0;k[o+8>>2]=J;k[o>>2]=j|1;k[o+4>>2]=e;L=J}if((f|0)==(l|0))N=L;else{J=f;f=L;while(1){i[f>>0]=i[J>>0]|0;J=J+1|0;if((J|0)==(l|0))break;else f=f+1|0}N=L+e|0}i[N>>0]=0;x=0;f=Fa(86,o|0,0,292511)|0;l=x;x=0;if(l&1){l=Hc()|0;O=M;P=l}else{k[n>>2]=k[f>>2];k[n+4>>2]=k[f+4>>2];k[n+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;f=Ta(484,n|0,210454)|0;l=x;x=0;do if(!(l&1)){k[m>>2]=k[f>>2];k[m+4>>2]=k[f+4>>2];k[m+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;db(62,a|0,m|0,b|0,0)|0;J=x;x=0;if(J&1){J=Hc()|0;j=M;K2a(m);Q=j;R=J;break}else{K2a(m);K2a(n);K2a(o);K=0;break b}}else{J=Hc()|0;Q=M;R=J}while(0);K2a(n);O=Q;P=R}K2a(o);C=O;D=P;Sc(D|0)}while(0);E=K;r=d;return E|0}function rs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;iu(d,0);x=0;e=Fa(111,a|0,b|0,d|0)|0;f=x;x=0;if(!(f&1)){if(!e){g=0;xu(d);r=c;return g|0}e=a+20|0;f=a+16|0;h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0;i=a+4|0;x=0;xa(643,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,d|0);h=x;x=0;if((!(h&1)?(h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0,j=a+60|0,x=0,xa(644,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,(k[b+4>>2]|0)-(k[j>>2]|0)|0),h=x,x=0,!(h&1)):0)?(h=(k[e>>2]|0)+-1+(k[f>>2]|0)|0,x=0,xa(645,k[(k[(k[i>>2]|0)+(h>>>10<<2)>>2]|0)+((h&1023)<<2)>>2]|0,(k[b+8>>2]|0)-(k[j>>2]|0)|0),j=x,x=0,!(j&1)):0){g=1;xu(d);r=c;return g|0}}g=Hc()|0;xu(d);Sc(g|0);return 0}function ss(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;f=r;r=r+32|0;g=f+12|0;h=f+24|0;j=f;if(!(ts(a,b,c,d,e)|0)){l=0;r=f;return l|0}if((k[e>>2]&-1024|0)!=55296){l=1;r=f;return l|0}m=k[c>>2]|0;n=m;if((d-m|0)<6){q2a(g,210473,67);x=0;db(62,a|0,g|0,b|0,k[c>>2]|0)|0;m=x;x=0;if(m&1){m=Hc()|0;o=M;K2a(g);p=o;q=m;Sc(q|0)}else{K2a(g);l=0;r=f;return l|0}}g=n+1|0;k[c>>2]=g;if((i[n>>0]|0)==92?(k[c>>2]=n+2,(i[g>>0]|0)==117):0){if(ts(a,b,c,d,h)|0){k[e>>2]=(k[e>>2]<<10&1047552)+65536|k[h>>2]&1023;l=1;r=f;return l|0}}else s=11;do if((s|0)==11){q2a(j,210541,79);x=0;db(62,a|0,j|0,b|0,k[c>>2]|0)|0;h=x;x=0;if(!(h&1)){K2a(j);break}h=Hc()|0;e=M;K2a(j);p=e;q=h;Sc(q|0)}while(0);l=0;r=f;return l|0}function ts(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;f=r;r=r+32|0;g=f+12|0;h=f;j=k[c>>2]|0;l=j;if((d-j|0)<4){q2a(g,210621,60);x=0;db(62,a|0,g|0,b|0,k[c>>2]|0)|0;j=x;x=0;if(j&1){j=Hc()|0;d=M;K2a(g);m=d;n=j;Sc(n|0)}else{K2a(g);o=0;r=f;return o|0}}g=l+1|0;k[c>>2]=g;j=i[l>>0]|0;d=j<<24>>24;do if((j+-48&255)>=10){if((j+-97&255)<6){p=d+-87|0;q=13;break}if((j+-65&255)<6){p=d+-55|0;q=13}}else{p=d+-48|0;q=13}while(0);a:do if((q|0)==13){d=l+2|0;k[c>>2]=d;j=i[g>>0]|0;s=p<<4;t=j<<24>>24;do if((j+-48&255)<10)u=t+-48|0;else{if((j+-97&255)<6){u=t+-87|0;break}if((j+-65&255)>=6)break a;u=t+-55|0}while(0);t=l+3|0;k[c>>2]=t;j=i[d>>0]|0;v=u+s<<4;w=j<<24>>24;do if((j+-48&255)<10)y=w+-48|0;else{if((j+-97&255)<6){y=w+-87|0;break}if((j+-65&255)>=6)break a;y=w+-55|0}while(0);k[c>>2]=l+4;w=i[t>>0]|0;j=y+v<<4;s=w<<24>>24;do if((w+-48&255)<10)z=s+-48|0;else{if((w+-97&255)<6){z=s+-87|0;break}if((w+-65&255)>=6)break a;z=s+-55|0}while(0);k[e>>2]=z+j;o=1;r=f;return o|0}while(0);q2a(h,210682,66);x=0;db(62,a|0,h|0,b|0,k[c>>2]|0)|0;c=x;x=0;if(c&1){c=Hc()|0;b=M;K2a(h);m=b;n=c;Sc(n|0)}else{K2a(h);o=0;r=f;return o|0}return 0}function us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=k[a+60>>2]|0;k[c>>2]=0;f=a+64|0;a=e;e=0;a:while(1){g=a;b:while(1){if(g>>>0>=b>>>0){h=a;break a}if((g|0)==(k[f>>2]|0)){h=a;break a}j=g+1|0;switch(i[g>>0]|0){case 13:{l=j;m=g;n=6;break b;break}case 10:{o=j;break b;break}default:g=j}}if((n|0)==6){n=0;o=(i[l>>0]|0)==10?m+2|0:l}g=e+1|0;k[c>>2]=g;a=o;e=g}k[d>>2]=b+1-h;k[c>>2]=(k[c>>2]|0)+1;return}function vs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+64|0;e=d;f=d+8|0;g=b+64|0;h=k[b+60>>2]|0;b=1;a:while(1){j=h;b:while(1){if(j>>>0>=c>>>0){l=h;m=b;break a}if((j|0)==(k[g>>2]|0)){l=h;m=b;break a}n=j+1|0;switch(i[j>>0]|0){case 13:{o=n;p=j;q=6;break b;break}case 10:{s=n;break b;break}default:j=n}}if((q|0)==6){q=0;s=(i[o>>0]|0)==10?p+2|0:o}h=s;b=b+1|0}k[e>>2]=m;k[e+4>>2]=c+1-l;uRa(f,51,210749,e)|0;q2a(a,f,RLa(f)|0);r=d;return}function ws(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;c=r;r=r+176|0;d=c+8|0;e=c;f=c+112|0;g=c+100|0;h=c+88|0;j=c+76|0;l=c+64|0;m=c+52|0;n=c+40|0;o=c+28|0;p=c+16|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;q=b+28|0;s=k[q>>2]|0;t=b+40|0;u=k[t>>2]|0;v=s+(((u>>>0)/146|0)<<2)|0;w=b+32|0;if((k[w>>2]|0)==(s|0))y=0;else y=(k[v>>2]|0)+(((u>>>0)%146|0)*28|0)|0;u=b+44|0;s=b+60|0;z=b+64|0;b=g+8|0;A=g+1|0;B=g+4|0;C=l+8|0;D=l+1|0;E=l+4|0;F=n+8|0;G=n+1|0;H=n+4|0;I=y;y=v;a:while(1){v=I;do{J=(k[t>>2]|0)+(k[u>>2]|0)|0;K=k[q>>2]|0;if((k[w>>2]|0)==(K|0))L=0;else L=(k[K+(((J>>>0)/146|0)<<2)>>2]|0)+(((J>>>0)%146|0)*28|0)|0;J=v;if((J|0)==(L|0)){N=8;break a}K=k[J+4>>2]|0;O=k[s>>2]|0;P=1;b:while(1){Q=O;c:while(1){if(Q>>>0>=K>>>0){R=O;S=P;break b}if((Q|0)==(k[z>>2]|0)){R=O;S=P;break b}T=Q+1|0;switch(i[Q>>0]|0){case 13:{U=T;V=Q;N=16;break c;break}case 10:{W=T;break c;break}default:Q=T}}if((N|0)==16){N=0;W=(i[U>>0]|0)==10?V+2|0:U}O=W;P=P+1|0}k[e>>2]=S;k[e+4>>2]=K+1-R;uRa(f,51,210749,e)|0;P=RLa(f)|0;x=0;fb(140,j|0,f|0,P|0);P=x;x=0;if(P&1){N=9;break a}x=0;P=Fa(86,j|0,0,210768)|0;O=x;x=0;if(O&1){N=40;break a};k[h>>2]=k[P>>2];k[h+4>>2]=k[P+4>>2];k[h+8>>2]=k[P+8>>2];k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;x=0;P=Ta(484,h|0,324246)|0;O=x;x=0;if(O&1){N=41;break a};k[g>>2]=k[P>>2];k[g+4>>2]=k[P+4>>2];k[g+8>>2]=k[P+8>>2];k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;P=i[g>>0]|0;O=(P&1)==0;x=0;Fa(88,a|0,(O?A:k[b>>2]|0)|0,(O?(P&255)>>>1:k[B>>2]|0)|0)|0;P=x;x=0;if(P&1){N=42;break a}K2a(g);K2a(h);K2a(j);P=J+12|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;O=i[P>>0]|0;Q=(O&1)==0?(O&255)>>>1:k[J+16>>2]|0;x=0;nb(83,m|0,229999,2,Q+2|0);O=x;x=0;if(O&1){N=24;break a}x=0;Fa(88,m|0,((i[P>>0]&1)==0?P+1|0:k[J+20>>2]|0)|0,Q|0)|0;Q=x;x=0;if(Q&1){N=24;break a}x=0;Q=Ta(484,m|0,324246)|0;P=x;x=0;if(P&1){N=45;break a};k[l>>2]=k[Q>>2];k[l+4>>2]=k[Q+4>>2];k[l+8>>2]=k[Q+8>>2];k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=0;Q=i[l>>0]|0;P=(Q&1)==0;x=0;Fa(88,a|0,(P?D:k[C>>2]|0)|0,(P?(Q&255)>>>1:k[E>>2]|0)|0)|0;Q=x;x=0;if(Q&1){N=46;break a}K2a(l);K2a(m);Q=k[J+24>>2]|0;if(Q){P=k[s>>2]|0;O=1;d:while(1){T=P;e:while(1){if(T>>>0>=Q>>>0){X=P;Y=O;break d}if((T|0)==(k[z>>2]|0)){X=P;Y=O;break d}Z=T+1|0;switch(i[T>>0]|0){case 13:{_=Z;$=T;N=33;break e;break}case 10:{aa=Z;break e;break}default:T=Z}}if((N|0)==33){N=0;aa=(i[_>>0]|0)==10?$+2|0:_}P=aa;O=O+1|0}k[d>>2]=Y;k[d+4>>2]=Q+1-X;uRa(f,51,210749,d)|0;O=RLa(f)|0;x=0;fb(140,p|0,f|0,O|0);O=x;x=0;if(O&1){N=9;break a}x=0;O=Fa(86,p|0,0,210771)|0;P=x;x=0;if(P&1){N=48;break a};k[o>>2]=k[O>>2];k[o+4>>2]=k[O+4>>2];k[o+8>>2]=k[O+8>>2];k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;x=0;O=Ta(484,o|0,210776)|0;P=x;x=0;if(P&1){N=49;break a};k[n>>2]=k[O>>2];k[n+4>>2]=k[O+4>>2];k[n+8>>2]=k[O+8>>2];k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;O=i[n>>0]|0;P=(O&1)==0;x=0;Fa(88,a|0,(P?G:k[F>>2]|0)|0,(P?(O&255)>>>1:k[H>>2]|0)|0)|0;O=x;x=0;if(O&1){N=50;break a}K2a(n);K2a(o);K2a(p)}v=J+28|0}while((v-(k[y>>2]|0)|0)!=4088);v=y+4|0;I=k[v>>2]|0;y=v}switch(N|0){case 8:{r=c;return}case 9:{c=Hc()|0;ba=M;ca=c;N=10;break}case 24:{c=Hc()|0;y=M;K2a(m);ba=y;ca=c;N=10;break}case 40:{c=Hc()|0;da=M;ea=c;N=44;break}case 41:{c=Hc()|0;fa=M;ga=c;N=43;break}case 42:{c=Hc()|0;y=M;K2a(g);fa=y;ga=c;N=43;break}case 45:{c=Hc()|0;ha=M;ia=c;N=47;break}case 46:{c=Hc()|0;y=M;K2a(l);ha=y;ia=c;N=47;break}case 48:{c=Hc()|0;ja=M;ka=c;N=52;break}case 49:{c=Hc()|0;la=M;ma=c;N=51;break}case 50:{c=Hc()|0;y=M;K2a(n);la=y;ma=c;N=51;break}}if((N|0)==10){na=ba;oa=ca;K2a(a);Sc(oa|0)}else if((N|0)==43){K2a(h);da=fa;ea=ga;N=44}else if((N|0)==47){K2a(m);na=ha;oa=ia;K2a(a);Sc(oa|0)}else if((N|0)==51){K2a(o);ja=la;ka=ma;N=52}if((N|0)==44){K2a(j);na=da;oa=ea;K2a(a);Sc(oa|0)}else if((N|0)==52){K2a(p);na=ja;oa=ka;K2a(a);Sc(oa|0)}}function xs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+32|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=b+28|0;g=k[f>>2]|0;h=b+40|0;i=k[h>>2]|0;j=g+(((i>>>0)/146|0)<<2)|0;l=b+32|0;if((k[l>>2]|0)==(g|0))m=0;else m=(k[j>>2]|0)+(((i>>>0)%146|0)*28|0)|0;i=b+44|0;g=d+8|0;n=b+60|0;b=d+4|0;o=a+8|0;p=m;m=j;a:while(1){j=p;do{q=(k[h>>2]|0)+(k[i>>2]|0)|0;s=k[f>>2]|0;if((k[l>>2]|0)==(s|0))t=0;else t=(k[s+(((q>>>0)/146|0)<<2)>>2]|0)+(((q>>>0)%146|0)*28|0)|0;q=j;if((q|0)==(t|0)){u=8;break a};k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;s=k[n>>2]|0;k[d>>2]=(k[q+4>>2]|0)-s;k[b>>2]=(k[q+8>>2]|0)-s;x=0;Ta(493,g|0,q+12|0)|0;s=x;x=0;if(s&1)break a;s=k[e>>2]|0;if((s|0)==(k[o>>2]|0)){x=0;xa(649,a|0,d|0);v=x;x=0;if(v&1)break a}else{v=d;w=k[v+4>>2]|0;y=s;k[y>>2]=k[v>>2];k[y+4>>2]=w;x=0;xa(604,s+8|0,g|0);s=x;x=0;if(s&1)break a;k[e>>2]=(k[e>>2]|0)+20}K2a(g);j=q+28|0}while((j-(k[m>>2]|0)|0)!=4088);j=m+4|0;p=k[j>>2]|0;m=j}if((u|0)==8){r=c;return}c=Hc()|0;K2a(g);g=k[a>>2]|0;if(!g)Sc(c|0);u=k[e>>2]|0;if((u|0)==(g|0))z=g;else{m=u;do{k[e>>2]=m+-20;K2a(m+-12|0);m=k[e>>2]|0}while((m|0)!=(g|0));z=k[a>>2]|0}OBa(z);Sc(c|0)}function ys(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+32|0;e=d;f=a+64|0;g=a+60|0;h=(k[f>>2]|0)-(k[g>>2]|0)|0;if((Tv(b)|0)>(h|0)){i=0;r=d;return i|0}if((Uv(b)|0)>(h|0)){i=0;r=d;return i|0}h=k[g>>2]|0;g=h+(Tv(b)|0)|0;h=k[f>>2]|0;f=h+(Uv(b)|0)|0;b=e+12|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[e>>2]=16;k[e+4>>2]=g;k[e+8>>2]=f;x=0;Ta(493,b|0,c|0)|0;c=x;x=0;if(c&1){j=Hc()|0;l=M;K2a(b);Sc(j|0)}c=e+24|0;k[c>>2]=0;f=a+32|0;g=k[f>>2]|0;h=a+28|0;m=k[h>>2]|0;n=g-m>>2;o=a+40|0;p=k[o>>2]|0;q=a+44|0;s=k[q>>2]|0;t=m;m=g;do if((((n|0)==0?0:(n*146|0)+-1|0)|0)==(s+p|0)){x=0;va(1480,a+24|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;K2a(b);Sc(j|0)}else{u=k[o>>2]|0;v=k[q>>2]|0;w=k[f>>2]|0;y=k[h>>2]|0;break}}else{u=p;v=s;w=m;y=t}while(0);t=v+u|0;if((w|0)==(y|0))z=0;else z=(k[y+(((t>>>0)/146|0)<<2)>>2]|0)+(((t>>>0)%146|0)*28|0)|0;k[z>>2]=k[e>>2];k[z+4>>2]=k[e+4>>2];k[z+8>>2]=k[e+8>>2];x=0;xa(604,z+12|0,b|0);e=x;x=0;if(e&1){j=Hc()|0;l=M;K2a(b);Sc(j|0)}k[z+24>>2]=k[c>>2];k[q>>2]=(k[q>>2]|0)+1;K2a(b);i=1;r=d;return i|0}function zs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;e=r;r=r+32|0;f=e;g=a+60|0;h=(k[a+64>>2]|0)-(k[g>>2]|0)|0;if((Tv(b)|0)>(h|0)){i=0;r=e;return i|0}if((Uv(b)|0)>(h|0)){i=0;r=e;return i|0}if((Uv(d)|0)>(h|0)){i=0;r=e;return i|0}h=k[g>>2]|0;j=h+(Tv(b)|0)|0;h=k[g>>2]|0;l=h+(Uv(b)|0)|0;b=f+12|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[f>>2]=16;k[f+4>>2]=j;k[f+8>>2]=l;x=0;Ta(493,b|0,c|0)|0;c=x;x=0;do if(!(c&1)?(l=k[g>>2]|0,x=0,j=Ba(580,d|0)|0,h=x,x=0,!(h&1)):0){h=f+24|0;k[h>>2]=l+j;j=a+32|0;l=k[j>>2]|0;m=a+28|0;n=k[m>>2]|0;o=l-n>>2;p=a+40|0;q=k[p>>2]|0;s=a+44|0;t=k[s>>2]|0;u=n;n=l;if((((o|0)==0?0:(o*146|0)+-1|0)|0)==(t+q|0)){x=0;va(1480,a+24|0);o=x;x=0;if(o&1)break;v=k[p>>2]|0;w=k[s>>2]|0;y=k[j>>2]|0;z=k[m>>2]|0}else{v=q;w=t;y=n;z=u}u=w+v|0;if((y|0)==(z|0))A=0;else A=(k[z+(((u>>>0)/146|0)<<2)>>2]|0)+(((u>>>0)%146|0)*28|0)|0;k[A>>2]=k[f>>2];k[A+4>>2]=k[f+4>>2];k[A+8>>2]=k[f+8>>2];x=0;xa(604,A+12|0,b|0);u=x;x=0;if(!(u&1)){k[A+24>>2]=k[h>>2];k[s>>2]=(k[s>>2]|0)+1;K2a(b);i=1;r=e;return i|0}}while(0);i=Hc()|0;K2a(b);Sc(i|0);return 0}function As(a){a=a|0;return (k[a+44>>2]|0)==0|0}function Bs(a){a=a|0;var b=0,c=0,d=0,e=0;k[a>>2]=24004;b=a+8|0;x=0;xa(588,b|0,0);a=x;x=0;if(a&1){a=Hc()|0;c=M;d=a;Sc(d|0)}x=0;va(1481,b|0);a=x;x=0;if(!(a&1))return;a=Hc()|0;e=M;xu(b);c=e;d=a;Sc(d|0)}function Cs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+240|0;c=b+216|0;d=b+192|0;e=b+168|0;f=b+144|0;g=b+120|0;h=b+96|0;i=b+72|0;j=b+48|0;k=b+24|0;l=b;m=rv(a,210904)|0;tu(c,1);x=0;Ta(476,m|0,c|0)|0;m=x;x=0;if(m&1){m=Hc()|0;n=M;xu(c);o=n;p=m;Sc(p|0)}xu(c);c=rv(a,210920)|0;tu(d,1);x=0;Ta(476,c|0,d|0)|0;c=x;x=0;if(c&1){c=Hc()|0;m=M;xu(d);o=m;p=c;Sc(p|0)}xu(d);d=rv(a,210934)|0;tu(e,0);x=0;Ta(476,d|0,e|0)|0;d=x;x=0;if(d&1){d=Hc()|0;c=M;xu(e);o=c;p=d;Sc(p|0)}xu(e);e=rv(a,210945)|0;tu(f,0);x=0;Ta(476,e|0,f|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=M;xu(f);o=d;p=e;Sc(p|0)}xu(f);f=rv(a,210974)|0;tu(g,0);x=0;Ta(476,f|0,g|0)|0;f=x;x=0;if(f&1){f=Hc()|0;e=M;xu(g);o=e;p=f;Sc(p|0)}xu(g);g=rv(a,210991)|0;tu(h,0);x=0;Ta(476,g|0,h|0)|0;g=x;x=0;if(g&1){g=Hc()|0;f=M;xu(h);o=f;p=g;Sc(p|0)}xu(h);h=rv(a,211009)|0;ku(i,1e3);x=0;Ta(476,h|0,i|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=M;xu(i);o=g;p=h;Sc(p|0)}xu(i);i=rv(a,211020)|0;tu(j,0);x=0;Ta(476,i|0,j|0)|0;i=x;x=0;if(i&1){i=Hc()|0;h=M;xu(j);o=h;p=i;Sc(p|0)}xu(j);j=rv(a,211032)|0;tu(k,0);x=0;Ta(476,j|0,k|0)|0;j=x;x=0;if(j&1){j=Hc()|0;i=M;xu(k);o=i;p=j;Sc(p|0)}xu(k);k=rv(a,211046)|0;tu(l,0);x=0;Ta(476,k|0,l|0)|0;k=x;x=0;if(!(k&1)){xu(l);r=b;return}b=Hc()|0;k=M;xu(l);o=k;p=b;Sc(p|0)}function Ds(a){a=a|0;k[a>>2]=24004;xu(a+8|0);return}function Es(a){a=a|0;k[a>>2]=24004;xu(a+8|0);OBa(a);return}function Fs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=a+8|0;a=Xu(pv(b,210904)|0)|0;c=(Xu(pv(b,210920)|0)|0)&1;d=(Xu(pv(b,210934)|0)|0)&1;e=(Xu(pv(b,210945)|0)|0)&1;f=(Xu(pv(b,210974)|0)|0)&1;g=(Xu(pv(b,210991)|0)|0)&1;h=Lu(pv(b,211009)|0)|0;j=(Xu(pv(b,211020)|0)|0)&1;l=(Xu(pv(b,211032)|0)|0)&1;m=(Xu(pv(b,211046)|0)|0)&1;b=KBa(120)|0;k[b>>2]=24124;i[b+4>>0]=a&1;a=b+8|0;n=a+96|0;do{k[a>>2]=0;a=a+4|0}while((a|0)<(n|0));i[b+104>>0]=c;i[b+105>>0]=d;i[b+106>>0]=e;i[b+107>>0]=f;i[b+108>>0]=g;i[b+109>>0]=j;i[b+110>>0]=l;i[b+111>>0]=m;k[b+112>>2]=h;i[b+116>>0]=0;return b|0}function Gs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;c=r;r=r+272|0;d=c+264|0;e=c+256|0;f=c+248|0;g=c+240|0;h=c+232|0;i=c+224|0;j=c+216|0;l=c+208|0;m=c+200|0;n=c+180|0;o=c+168|0;p=c+156|0;q=c+144|0;s=c+132|0;t=c+120|0;u=c+108|0;v=c+96|0;w=c+84|0;y=c+72|0;z=c+24|0;A=c+60|0;B=c+48|0;C=c;iu(z,0);D=(b|0)==0?z:b;k[A+4>>2]=0;b=A+8|0;k[b>>2]=0;E=A+4|0;k[A>>2]=E;Ws(A,0);k[b>>2]=0;k[A>>2]=E;k[E>>2]=0;x=0;fb(140,n|0,210904,15);b=x;x=0;a:do if(b&1)F=36;else{x=0;fb(176,c+192|0,A|0,n|0);G=x;x=0;do if(G&1){H=Hc()|0;I=M;K2a(n);J=I;K=H}else{K2a(n);x=0;fb(140,o|0,210920,13);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,m|0,A|0,o|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(o);J=I;K=H;break}K2a(o);x=0;fb(140,p|0,210934,10);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,l|0,A|0,p|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(p);J=I;K=H;break}K2a(p);x=0;fb(140,q|0,210945,28);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,j|0,A|0,q|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(q);J=I;K=H;break}K2a(q);x=0;fb(140,s|0,210974,16);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,i|0,A|0,s|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(s);J=I;K=H;break}K2a(s);x=0;fb(140,t|0,210991,17);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,h|0,A|0,t|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(t);J=I;K=H;break}K2a(t);x=0;fb(140,u|0,211009,10);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,g|0,A|0,u|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(u);J=I;K=H;break}K2a(u);x=0;fb(140,v|0,211020,11);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,f|0,A|0,v|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(v);J=I;K=H;break}K2a(v);x=0;fb(140,w|0,211032,13);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,e|0,A|0,w|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(w);J=I;K=H;break}K2a(w);x=0;fb(140,y|0,211046,18);H=x;x=0;if(H&1){F=36;break a}x=0;fb(176,d|0,A|0,y|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;K2a(y);J=I;K=H;break}K2a(y);H=a+8|0;x=0;xa(601,B|0,H|0);I=x;x=0;if(I&1){F=36;break a}I=B+4|0;L=k[I>>2]|0;N=k[B>>2]|0;O=(L-N|0)/12|0;b:do if((L|0)!=(N|0)){P=N;Q=0;while(1){R=P+(Q*12|0)|0;if((Ys(A,R)|0)==(E|0)){x=0;S=Ta(475,D|0,R|0)|0;T=x;x=0;if(T&1){F=44;break}x=0;T=Ta(513,H|0,R|0)|0;R=x;x=0;if(R&1){F=44;break}x=0;xa(589,C|0,T|0);T=x;x=0;if(T&1){F=44;break}x=0;Ta(476,S|0,C|0)|0;S=x;x=0;if(S&1){F=47;break}xu(C)}S=Q+1|0;if(S>>>0>=O>>>0){F=35;break b}P=k[B>>2]|0;Q=S}if((F|0)==44){Q=Hc()|0;U=Q;V=M;F=46;break}else if((F|0)==47){Q=Hc()|0;P=M;xu(C);W=Q;X=P;Y=B;break}}else F=35;while(0);do if((F|0)==35){x=0;O=Ba(560,D|0)|0;H=x;x=0;if(H&1){H=Hc()|0;U=H;V=M;F=46;break}H=(O|0)==0;O=k[B>>2]|0;if(!O){Z=k[E>>2]|0;Ws(A,Z);xu(z);r=c;return H|0}N=k[I>>2]|0;if((N|0)==(O|0))_=O;else{L=N;do{N=L+-12|0;k[I>>2]=N;K2a(N);L=k[I>>2]|0}while((L|0)!=(O|0));_=k[B>>2]|0}OBa(_);Z=k[E>>2]|0;Ws(A,Z);xu(z);r=c;return H|0}while(0);if((F|0)==46){W=U;X=V;Y=B}O=k[Y>>2]|0;if(!O){$=W;aa=X;ba=k[E>>2]|0;Ws(A,ba);xu(z);Sc($|0)}L=k[I>>2]|0;if((L|0)==(O|0))ca=O;else{N=L;do{L=N+-12|0;k[I>>2]=L;K2a(L);N=k[I>>2]|0}while((N|0)!=(O|0));ca=k[B>>2]|0}OBa(ca);$=W;aa=X;ba=k[E>>2]|0;Ws(A,ba);xu(z);Sc($|0)}while(0);da=J;ea=K}while(0);if((F|0)==36){F=Hc()|0;da=M;ea=F}$=ea;aa=da;ba=k[E>>2]|0;Ws(A,ba);xu(z);Sc($|0);return 0}function Hs(a,b){a=a|0;b=b|0;return sv(a+8|0,b)|0}function Is(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;b=r;r=r+224|0;c=b+192|0;d=b+168|0;e=b+144|0;f=b+120|0;g=b+96|0;h=b+72|0;i=b+48|0;j=b+24|0;k=b;l=rv(a,210920)|0;tu(c,0);x=0;Ta(476,l|0,c|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;xu(c);n=m;o=l;Sc(o|0)}xu(c);c=rv(a,210934)|0;tu(d,1);x=0;Ta(476,c|0,d|0)|0;c=x;x=0;if(c&1){c=Hc()|0;l=M;xu(d);n=l;o=c;Sc(o|0)}xu(d);d=rv(a,210945)|0;tu(e,0);x=0;Ta(476,d|0,e|0)|0;d=x;x=0;if(d&1){d=Hc()|0;c=M;xu(e);n=c;o=d;Sc(o|0)}xu(e);e=rv(a,210974)|0;tu(f,0);x=0;Ta(476,e|0,f|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=M;xu(f);n=d;o=e;Sc(o|0)}xu(f);f=rv(a,210991)|0;tu(g,0);x=0;Ta(476,f|0,g|0)|0;f=x;x=0;if(f&1){f=Hc()|0;e=M;xu(g);n=e;o=f;Sc(o|0)}xu(g);g=rv(a,211009)|0;ku(h,1e3);x=0;Ta(476,g|0,h|0)|0;g=x;x=0;if(g&1){g=Hc()|0;f=M;xu(h);n=f;o=g;Sc(o|0)}xu(h);h=rv(a,211020)|0;tu(i,1);x=0;Ta(476,h|0,i|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=M;xu(i);n=g;o=h;Sc(o|0)}xu(i);i=rv(a,211032)|0;tu(j,1);x=0;Ta(476,i|0,j|0)|0;i=x;x=0;if(i&1){i=Hc()|0;h=M;xu(j);n=h;o=i;Sc(o|0)}xu(j);j=rv(a,211046)|0;tu(k,0);x=0;Ta(476,j|0,k|0)|0;j=x;x=0;if(!(j&1)){xu(k);r=b;return}b=Hc()|0;j=M;xu(k);n=j;o=b;Sc(o|0)}function Js(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=r;r=r+160|0;f=e+136|0;g=e;h=g+56|0;j=g+4|0;k[g>>2]=20356;k[h>>2]=20376;x=0;xa(582,g+56|0,j|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;mab(h);Sc(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=20300;k[g+56>>2]=20320;x=0;va(1449,j|0);l=x;x=0;do if(l&1){o=Hc()|0;p=M;q=o}else{k[j>>2]=20392;o=g+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(583,j|0,f|0);s=x;x=0;if(s&1){s=Hc()|0;t=M;K2a(f);K2a(o);obb(j);p=t;q=s;break}K2a(f);x=0;Ta(514,g|0,k[b+(k[(k[b>>2]|0)+-12>>2]|0)+24>>2]|0)|0;s=x;x=0;if(!(s&1)?(x=0,xa(584,f|0,j|0),s=x,x=0,!(s&1)):0){s=i[f>>0]|0;t=(s&1)==0;u=t?f+1|0:k[f+8>>2]|0;v=k[f+4>>2]|0;x=0;w=Ba(k[(k[a>>2]|0)+8>>2]|0,a|0)|0;y=x;x=0;do if(!(y&1)){x=0;z=Va(k[(k[w>>2]|0)+8>>2]|0,w|0,u|0,u+(t?(s&255)>>>1:v)|0,c|0,d|0)|0;A=x;x=0;if(A&1){A=Hc()|0;B=M;Sf[k[(k[w>>2]|0)+4>>2]&2047](w);C=A;D=B;break}else{Sf[k[(k[w>>2]|0)+4>>2]&2047](w);K2a(f);k[g>>2]=20300;k[h>>2]=20320;k[j>>2]=20392;K2a(o);obb(j);mab(h);r=e;return z|0}}else{z=Hc()|0;C=z;D=M}while(0);K2a(f);E=C;F=D;k[g>>2]=20300;k[h>>2]=20320;k[j>>2]=20392;K2a(o);obb(j);mab(h);Sc(E|0)}w=Hc()|0;E=w;F=M;k[g>>2]=20300;k[h>>2]=20320;k[j>>2]=20392;K2a(o);obb(j);mab(h);Sc(E|0)}while(0);m=p;n=q;mab(h);Sc(n|0);return 0}function Ks(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+48|0;d=c+32|0;e=c;f=c+36|0;k[e>>2]=24004;g=e+8|0;x=0;xa(588,g|0,0);h=x;x=0;if(h&1){h=Hc()|0;j=M;l=h;Sc(l|0)}x=0;va(1481,g|0);h=x;x=0;if(h&1){h=Hc()|0;m=M;xu(g);j=m;l=h;Sc(l|0)};k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;l=db(63,e|0,a|0,b|0,f|0)|0;b=x;x=0;if(b&1){n=Hc()|0;o=M;K2a(f);k[e>>2]=24004;xu(g);Sc(n|0)}if(l){K2a(f);k[e>>2]=24004;xu(g);r=c;return a|0}a=k[12025]|0;k[d>>2]=(i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0;vQa(a,211065,d)|0;x=0;va(1477,f|0);x=0;n=Hc()|0;o=M;K2a(f);k[e>>2]=24004;xu(g);Sc(n|0);return 0}function Ls(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=a+4|0;c=k[b>>2]|0;d=a+16|0;e=k[d>>2]|0;f=c+(((e>>>0)/146|0)<<2)|0;g=a+8|0;if((k[g>>2]|0)==(c|0)){h=0;i=a+20|0;j=0}else{l=a+20|0;a=e+(k[l>>2]|0)|0;h=(k[c+(((a>>>0)/146|0)<<2)>>2]|0)+(((a>>>0)%146|0)*28|0)|0;i=l;j=(k[f>>2]|0)+(((e>>>0)%146|0)*28|0)|0}e=j;j=f;a:while(1){f=e;do{l=f;if((l|0)==(h|0))break a;K2a(l+12|0);f=l+28|0}while((f-(k[j>>2]|0)|0)!=4088);f=j+4|0;e=k[f>>2]|0;j=f}k[i>>2]=0;i=k[b>>2]|0;j=(k[g>>2]|0)-i>>2;if(j>>>0>2){e=i;do{OBa(k[e>>2]|0);i=(k[b>>2]|0)+4|0;k[b>>2]=i;e=i;i=(k[g>>2]|0)-e>>2}while(i>>>0>2);m=i}else m=j;switch(m|0){case 1:{k[d>>2]=73;return}case 2:{k[d>>2]=146;return}default:return}}function Ms(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;b=r;r=r+16|0;c=b+4|0;d=b;e=a+16|0;f=k[e>>2]|0;if(f>>>0>1023){k[e>>2]=f+-1024;f=a+4|0;e=k[f>>2]|0;g=k[e>>2]|0;h=e+4|0;k[f>>2]=h;e=a+8|0;i=k[e>>2]|0;j=a+12|0;l=k[j>>2]|0;m=l;n=i;do if((i|0)==(l|0)){o=k[a>>2]|0;p=o;if(h>>>0>o>>>0){q=h;s=((q-p>>2)+1|0)/-2|0;t=h+(s<<2)|0;u=n-q|0;Eyb(t|0,h|0,u|0)|0;q=t+(u>>2<<2)|0;k[e>>2]=q;k[f>>2]=(k[f>>2]|0)+(s<<2);v=q;break}q=m-p>>1;p=(q|0)==0?1:q;q=KBa(p<<2)|0;s=q;u=q+(p>>>2<<2)|0;t=u;w=q+(p<<2)|0;if((h|0)==(i|0)){y=t;z=o}else{o=u;u=h;p=t;while(1){k[o>>2]=k[u>>2];o=p+4|0;q=o;u=u+4|0;if((u|0)==(i|0)){A=q;break}else p=q}y=A;z=k[a>>2]|0}k[a>>2]=s;k[f>>2]=t;k[e>>2]=y;k[j>>2]=w;if(!z)v=y;else{OBa(z);v=k[e>>2]|0}}else v=i;while(0);k[v>>2]=g;k[e>>2]=(k[e>>2]|0)+4;r=b;return}e=a+8|0;g=k[e>>2]|0;v=a+4|0;i=k[v>>2]|0;z=g-i|0;y=z>>2;j=a+12|0;f=k[j>>2]|0;A=f-(k[a>>2]|0)|0;h=g;m=i;if(y>>>0>2>>>0){i=KBa(4096)|0;if((f|0)!=(g|0)){k[c>>2]=i;nt(a,c);r=b;return}k[d>>2]=i;ot(a,d);d=k[v>>2]|0;i=k[d>>2]|0;c=d+4|0;k[v>>2]=c;d=k[e>>2]|0;g=k[j>>2]|0;f=g;n=d;do if((d|0)==(g|0)){l=k[a>>2]|0;p=l;if(c>>>0>l>>>0){u=c;o=((u-p>>2)+1|0)/-2|0;q=c+(o<<2)|0;B=n-u|0;Eyb(q|0,c|0,B|0)|0;u=q+(B>>2<<2)|0;k[e>>2]=u;k[v>>2]=(k[v>>2]|0)+(o<<2);C=u;break}u=f-p>>1;p=(u|0)==0?1:u;u=KBa(p<<2)|0;o=u;B=u+(p>>>2<<2)|0;q=B;D=u+(p<<2)|0;if((c|0)==(d|0)){E=q;F=l}else{l=B;B=c;p=q;while(1){k[l>>2]=k[B>>2];l=p+4|0;u=l;B=B+4|0;if((B|0)==(d|0)){G=u;break}else p=u}E=G;F=k[a>>2]|0}k[a>>2]=o;k[v>>2]=q;k[e>>2]=E;k[j>>2]=D;if(!F)C=E;else{OBa(F);C=k[e>>2]|0}}else C=d;while(0);k[C>>2]=i;k[e>>2]=(k[e>>2]|0)+4;r=b;return}i=A>>1;A=(i|0)==0?1:i;i=KBa(A<<2)|0;C=i;d=i+(y<<2)|0;F=i+(A<<2)|0;x=0;E=Ba(563,4096)|0;G=x;x=0;a:do if(G&1)H=29;else{c=E;do if((y|0)==(A|0)){if((z|0)>0){I=d+(((y+1|0)/-2|0)<<2)|0;J=h;K=m;L=F;N=C;break}f=z>>1;n=(f|0)==0?1:f;x=0;f=Ba(563,n<<2|0)|0;g=x;x=0;if(g&1){H=29;break a}OBa(i);I=f+(n>>>2<<2)|0;J=k[e>>2]|0;K=k[v>>2]|0;L=f+(n<<2)|0;N=f}else{I=d;J=h;K=m;L=F;N=C}while(0);D=I;k[I>>2]=c;q=I+4|0;b:do if((J|0)==(K|0)){O=L;P=q;Q=D;R=N}else{o=D;f=N;n=q;g=L;p=J;c:while(1){p=p+-4|0;B=o;do if((B|0)==(f|0)){l=n;if(l>>>0>>0){w=l+((((g-n>>2)+1|0)/2|0)<<2)|0;t=n-o|0;s=w+(0-(t>>2)<<2)|0;Eyb(s|0,o|0,t|0)|0;S=s;T=s;U=g;V=w;W=f;break}w=g-f>>1;s=(w|0)==0?1:w;x=0;w=Ba(563,s<<2|0)|0;t=x;x=0;if(t&1){X=f;break c}t=w;u=w+((s+3|0)>>>2<<2)|0;Y=u;Z=w+(s<<2)|0;if((B|0)==(l|0))_=Y;else{s=u;w=B;$=Y;while(1){k[s>>2]=k[w>>2];s=$+4|0;aa=s;w=w+4|0;if((w|0)==(l|0)){_=aa;break}else $=aa}}if(!o){S=u;T=Y;U=Z;V=_;W=t}else{OBa(o);S=u;T=Y;U=Z;V=_;W=t}}else{S=B;T=o;U=g;V=n;W=f}while(0);k[S+-4>>2]=k[p>>2];B=T+-4|0;if((p|0)==(k[v>>2]|0)){O=U;P=V;Q=B;R=W;break b}else{o=B;f=W;n=V;g=U}}g=Hc()|0;ba=M;ca=g;da=X;break a}while(0);q=k[a>>2]|0;k[a>>2]=R;k[v>>2]=Q;k[e>>2]=P;k[j>>2]=O;if(!q){r=b;return}OBa(q);r=b;return}while(0);if((H|0)==29){H=Hc(0)|0;me(H|0)|0;OBa(k[d+-4>>2]|0);x=0;hb(46);x=0;d=Hc()|0;H=M;x=0;hb(45);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{ba=H;ca=d;da=C}}if(!da)Sc(ca|0);OBa(da);Sc(ca|0)}function Ns(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+16|0;e=d;x=0;fb(177,e|0,a|0,1);f=x;x=0;a:do if(f&1)g=12;else{do if(i[e>>0]|0){if(!(i[b>>0]&1)){i[b+1>>0]=0;i[b>>0]=0;h=b+4|0}else{i[k[b+8>>2]>>0]=0;j=b+4|0;k[j>>2]=0;h=j}j=0;while(1){m=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;n=m+12|0;o=k[n>>2]|0;if((o|0)==(k[m+16>>2]|0)){x=0;p=Ba(k[(k[m>>2]|0)+40>>2]|0,m|0)|0;m=x;x=0;if(m&1){g=11;break}if((p|0)==-1){q=2;s=j;g=20;break}else t=p}else{k[n>>2]=o+1;t=l[o>>0]|0}o=j+1|0;n=t&255;if(n<<24>>24==c<<24>>24){q=0;s=o;g=20;break}x=0;xa(605,b|0,n|0);n=x;x=0;if(n&1){g=11;break}if(!(i[b>>0]&1)){j=o;continue}if((k[h>>2]|0)==-17){q=4;s=o;g=20;break}else j=o}if((g|0)==11){j=Hc(0)|0;u=a;v=a;w=j;break a}else if((g|0)==20){j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,j|0,k[j+16>>2]|((s|0)==0?q|4:q)|0);j=x;x=0;if(j&1){g=12;break a}else break}}while(0);r=d;return a|0}while(0);if((g|0)==12){g=Hc(0)|0;u=a;v=a;w=g}me(w|0)|0;x=0;va(1452,v+(k[(k[u>>2]|0)+-12>>2]|0)|0);u=x;x=0;if(!(u&1)){ge();r=d;return a|0}a=Hc()|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(a|0);return 0}function Os(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;b=r;r=r+16|0;c=b+4|0;d=b;e=a+16|0;f=k[e>>2]|0;if(f>>>0>145){k[e>>2]=f+-146;f=a+4|0;e=k[f>>2]|0;g=k[e>>2]|0;h=e+4|0;k[f>>2]=h;e=a+8|0;i=k[e>>2]|0;j=a+12|0;l=k[j>>2]|0;m=l;n=i;do if((i|0)==(l|0)){o=k[a>>2]|0;p=o;if(h>>>0>o>>>0){q=h;s=((q-p>>2)+1|0)/-2|0;t=h+(s<<2)|0;u=n-q|0;Eyb(t|0,h|0,u|0)|0;q=t+(u>>2<<2)|0;k[e>>2]=q;k[f>>2]=(k[f>>2]|0)+(s<<2);v=q;break}q=m-p>>1;p=(q|0)==0?1:q;q=KBa(p<<2)|0;s=q;u=q+(p>>>2<<2)|0;t=u;w=q+(p<<2)|0;if((h|0)==(i|0)){y=t;z=o}else{o=u;u=h;p=t;while(1){k[o>>2]=k[u>>2];o=p+4|0;q=o;u=u+4|0;if((u|0)==(i|0)){A=q;break}else p=q}y=A;z=k[a>>2]|0}k[a>>2]=s;k[f>>2]=t;k[e>>2]=y;k[j>>2]=w;if(!z)v=y;else{OBa(z);v=k[e>>2]|0}}else v=i;while(0);k[v>>2]=g;k[e>>2]=(k[e>>2]|0)+4;r=b;return}e=a+8|0;g=k[e>>2]|0;v=a+4|0;i=k[v>>2]|0;z=g-i|0;y=z>>2;j=a+12|0;f=k[j>>2]|0;A=f-(k[a>>2]|0)|0;h=g;m=i;if(y>>>0>2>>>0){i=KBa(4088)|0;if((f|0)!=(g|0)){k[c>>2]=i;lt(a,c);r=b;return}k[d>>2]=i;mt(a,d);d=k[v>>2]|0;i=k[d>>2]|0;c=d+4|0;k[v>>2]=c;d=k[e>>2]|0;g=k[j>>2]|0;f=g;n=d;do if((d|0)==(g|0)){l=k[a>>2]|0;p=l;if(c>>>0>l>>>0){u=c;o=((u-p>>2)+1|0)/-2|0;q=c+(o<<2)|0;B=n-u|0;Eyb(q|0,c|0,B|0)|0;u=q+(B>>2<<2)|0;k[e>>2]=u;k[v>>2]=(k[v>>2]|0)+(o<<2);C=u;break}u=f-p>>1;p=(u|0)==0?1:u;u=KBa(p<<2)|0;o=u;B=u+(p>>>2<<2)|0;q=B;D=u+(p<<2)|0;if((c|0)==(d|0)){E=q;F=l}else{l=B;B=c;p=q;while(1){k[l>>2]=k[B>>2];l=p+4|0;u=l;B=B+4|0;if((B|0)==(d|0)){G=u;break}else p=u}E=G;F=k[a>>2]|0}k[a>>2]=o;k[v>>2]=q;k[e>>2]=E;k[j>>2]=D;if(!F)C=E;else{OBa(F);C=k[e>>2]|0}}else C=d;while(0);k[C>>2]=i;k[e>>2]=(k[e>>2]|0)+4;r=b;return}i=A>>1;A=(i|0)==0?1:i;i=KBa(A<<2)|0;C=i;d=i+(y<<2)|0;F=i+(A<<2)|0;x=0;E=Ba(563,4088)|0;G=x;x=0;a:do if(G&1)H=29;else{c=E;do if((y|0)==(A|0)){if((z|0)>0){I=d+(((y+1|0)/-2|0)<<2)|0;J=h;K=m;L=F;N=C;break}f=z>>1;n=(f|0)==0?1:f;x=0;f=Ba(563,n<<2|0)|0;g=x;x=0;if(g&1){H=29;break a}OBa(i);I=f+(n>>>2<<2)|0;J=k[e>>2]|0;K=k[v>>2]|0;L=f+(n<<2)|0;N=f}else{I=d;J=h;K=m;L=F;N=C}while(0);D=I;k[I>>2]=c;q=I+4|0;b:do if((J|0)==(K|0)){O=L;P=q;Q=D;R=N}else{o=D;f=N;n=q;g=L;p=J;c:while(1){p=p+-4|0;B=o;do if((B|0)==(f|0)){l=n;if(l>>>0>>0){w=l+((((g-n>>2)+1|0)/2|0)<<2)|0;t=n-o|0;s=w+(0-(t>>2)<<2)|0;Eyb(s|0,o|0,t|0)|0;S=s;T=s;U=g;V=w;W=f;break}w=g-f>>1;s=(w|0)==0?1:w;x=0;w=Ba(563,s<<2|0)|0;t=x;x=0;if(t&1){X=f;break c}t=w;u=w+((s+3|0)>>>2<<2)|0;Y=u;Z=w+(s<<2)|0;if((B|0)==(l|0))_=Y;else{s=u;w=B;$=Y;while(1){k[s>>2]=k[w>>2];s=$+4|0;aa=s;w=w+4|0;if((w|0)==(l|0)){_=aa;break}else $=aa}}if(!o){S=u;T=Y;U=Z;V=_;W=t}else{OBa(o);S=u;T=Y;U=Z;V=_;W=t}}else{S=B;T=o;U=g;V=n;W=f}while(0);k[S+-4>>2]=k[p>>2];B=T+-4|0;if((p|0)==(k[v>>2]|0)){O=U;P=V;Q=B;R=W;break b}else{o=B;f=W;n=V;g=U}}g=Hc()|0;ba=M;ca=g;da=X;break a}while(0);q=k[a>>2]|0;k[a>>2]=R;k[v>>2]=Q;k[e>>2]=P;k[j>>2]=O;if(!q){r=b;return}OBa(q);r=b;return}while(0);if((H|0)==29){H=Hc(0)|0;me(H|0)|0;OBa(k[d+-4>>2]|0);x=0;hb(46);x=0;d=Hc()|0;H=M;x=0;hb(45);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{ba=H;ca=d;da=C}}if(!da)Sc(ca|0);OBa(da);Sc(ca|0)}function Ps(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;c=r;r=r+16|0;d=c+8|0;e=c;f=a+20|0;g=k[f>>2]|0;if(g>>>0>>0){h=b-g|0;i=a+8|0;j=k[i>>2]|0;l=a+4|0;m=k[l>>2]|0;n=j-m>>2;o=a+16|0;p=k[o>>2]|0;q=((n|0)==0?0:(n*146|0)+-1|0)-(g+p)|0;if(h>>>0>q>>>0){jt(a,h-q|0);s=k[o>>2]|0;t=k[f>>2]|0;u=k[l>>2]|0;v=k[i>>2]|0}else{s=p;t=g;u=m;v=j}j=t+s|0;s=u+(((j>>>0)/146|0)<<2)|0;if((v|0)==(u|0))w=0;else w=(k[s>>2]|0)+(((j>>>0)%146|0)*28|0)|0;if((g|0)==(b|0)){r=c;return}else{x=h;y=w;z=s}while(1){s=y;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;k[s+20>>2]=0;k[s+24>>2]=0;x=x+-1|0;s=y+28|0;if((s-(k[z>>2]|0)|0)==4088){w=z+4|0;A=k[w>>2]|0;B=w}else{A=s;B=z}k[f>>2]=(k[f>>2]|0)+1;if(!x)break;else{y=A;z=B}}r=c;return}else{if(g>>>0<=b>>>0){r=c;return}g=k[a+4>>2]|0;B=k[a+16>>2]|0;z=g+(((B>>>0)/146|0)<<2)|0;if((k[a+8>>2]|0)==(g|0))C=0;else C=(k[z>>2]|0)+(((B>>>0)%146|0)*28|0)|0;do if(b){B=((C-(k[z>>2]|0)|0)/28|0)+b|0;if((B|0)>0){g=z+(((B|0)/146|0)<<2)|0;D=g;E=(k[g>>2]|0)+(((B|0)%146|0)*28|0)|0;break}else{g=145-B|0;B=z+(((g|0)/-146|0)<<2)|0;D=B;E=(k[B>>2]|0)+((145-((g|0)%146|0)|0)*28|0)|0;break}}else{D=z;E=C}while(0);k[e>>2]=D;k[e+4>>2]=E;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];kt(a,d);r=c;return}}function Qs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;if(b>>>0<128){x=0;fb(147,a|0,1,0);c=x;x=0;if(c&1){d=Hc()|0;e=M;K2a(a);Sc(d|0)}if(!(i[a>>0]&1))f=a+1|0;else f=k[a+8>>2]|0;i[f>>0]=b;return}if(b>>>0<2048){x=0;fb(147,a|0,2,0);f=x;x=0;if(f&1){d=Hc()|0;e=M;K2a(a);Sc(d|0)}if(!(i[a>>0]&1))g=a+1|0;else g=k[a+8>>2]|0;i[g+1>>0]=b&63|128;if(!(i[a>>0]&1))h=a+1|0;else h=k[a+8>>2]|0;i[h>>0]=b>>>6&31|192;return}if(b>>>0<65536){x=0;fb(147,a|0,3,0);h=x;x=0;if(h&1){d=Hc()|0;e=M;K2a(a);Sc(d|0)}if(!(i[a>>0]&1))j=a+1|0;else j=k[a+8>>2]|0;i[j+2>>0]=b&63|128;if(!(i[a>>0]&1))l=a+1|0;else l=k[a+8>>2]|0;i[l+1>>0]=b>>>6&63|128;if(!(i[a>>0]&1))m=a+1|0;else m=k[a+8>>2]|0;i[m>>0]=b>>>12&15|224;return}if(b>>>0>=1114112)return;x=0;fb(147,a|0,4,0);m=x;x=0;if(m&1){d=Hc()|0;e=M;K2a(a);Sc(d|0)}if(!(i[a>>0]&1))n=a+1|0;else n=k[a+8>>2]|0;i[n+3>>0]=b&63|128;if(!(i[a>>0]&1))o=a+1|0;else o=k[a+8>>2]|0;i[o+2>>0]=b>>>6&63|128;if(!(i[a>>0]&1))p=a+1|0;else p=k[a+8>>2]|0;i[p+1>>0]=b>>>12&63|128;if(!(i[a>>0]&1))q=a+1|0;else q=k[a+8>>2]|0;i[q>>0]=b>>>18&7|240;return}function Rs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/20|0)+1|0;if(e>>>0>214748364){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/20|0;if(g>>>0<107374182){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/20|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=214748364;n=((k[c>>2]|0)-f|0)/20|0;o=6}if((o|0)==6){i=m;j=KBa(m*20|0)|0;l=n}n=j+(l*20|0)|0;m=n;o=j+(i*20|0)|0;i=b;f=k[i+4>>2]|0;h=n;k[h>>2]=k[i>>2];k[h+4>>2]=f;x=0;xa(604,j+(l*20|0)+8|0,b+8|0);b=x;x=0;if(b&1){b=Hc()|0;if(!j)Sc(b|0);OBa(j);Sc(b|0)}b=n+20|0;j=k[a>>2]|0;l=k[c>>2]|0;if((l|0)==(j|0)){p=m;q=j;r=j}else{f=l;l=n;n=m;while(1){m=f;f=f+-20|0;h=f;i=k[h+4>>2]|0;g=l+-20|0;k[g>>2]=k[h>>2];k[g+4>>2]=i;i=l+-12|0;g=m+-12|0;k[i>>2]=k[g>>2];k[i+4>>2]=k[g+4>>2];k[i+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;l=n+-20|0;g=l;if((f|0)==(j|0)){s=g;break}else n=g}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{K2a(d+-12|0);d=d+-20|0}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function Ss(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=a+4|0;c=k[b>>2]|0;d=a+16|0;e=k[d>>2]|0;f=c+(((e>>>0)/146|0)<<2)|0;g=a+8|0;if((k[g>>2]|0)==(c|0)){h=0;i=a+20|0;j=0}else{l=a+20|0;a=e+(k[l>>2]|0)|0;h=(k[c+(((a>>>0)/146|0)<<2)>>2]|0)+(((a>>>0)%146|0)*28|0)|0;i=l;j=(k[f>>2]|0)+(((e>>>0)%146|0)*28|0)|0}e=j;j=f;a:while(1){f=e;do{l=f;if((l|0)==(h|0))break a;K2a(l+12|0);f=l+28|0}while((f-(k[j>>2]|0)|0)!=4088);f=j+4|0;e=k[f>>2]|0;j=f}k[i>>2]=0;i=k[b>>2]|0;j=(k[g>>2]|0)-i>>2;if(j>>>0>2){e=i;do{OBa(k[e>>2]|0);i=(k[b>>2]|0)+4|0;k[b>>2]=i;e=i;i=(k[g>>2]|0)-e>>2}while(i>>>0>2);m=i}else m=j;switch(m|0){case 1:{k[d>>2]=73;return}case 2:{k[d>>2]=146;return}default:return}}function Ts(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;b=r;r=r+16|0;c=b+4|0;d=b;e=a+16|0;f=k[e>>2]|0;if(f>>>0>145){k[e>>2]=f+-146;f=a+4|0;e=k[f>>2]|0;g=k[e>>2]|0;h=e+4|0;k[f>>2]=h;e=a+8|0;i=k[e>>2]|0;j=a+12|0;l=k[j>>2]|0;m=l;n=i;do if((i|0)==(l|0)){o=k[a>>2]|0;p=o;if(h>>>0>o>>>0){q=h;s=((q-p>>2)+1|0)/-2|0;t=h+(s<<2)|0;u=n-q|0;Eyb(t|0,h|0,u|0)|0;q=t+(u>>2<<2)|0;k[e>>2]=q;k[f>>2]=(k[f>>2]|0)+(s<<2);v=q;break}q=m-p>>1;p=(q|0)==0?1:q;q=KBa(p<<2)|0;s=q;u=q+(p>>>2<<2)|0;t=u;w=q+(p<<2)|0;if((h|0)==(i|0)){y=t;z=o}else{o=u;u=h;p=t;while(1){k[o>>2]=k[u>>2];o=p+4|0;q=o;u=u+4|0;if((u|0)==(i|0)){A=q;break}else p=q}y=A;z=k[a>>2]|0}k[a>>2]=s;k[f>>2]=t;k[e>>2]=y;k[j>>2]=w;if(!z)v=y;else{OBa(z);v=k[e>>2]|0}}else v=i;while(0);k[v>>2]=g;k[e>>2]=(k[e>>2]|0)+4;r=b;return}e=a+8|0;g=k[e>>2]|0;v=a+4|0;i=k[v>>2]|0;z=g-i|0;y=z>>2;j=a+12|0;f=k[j>>2]|0;A=f-(k[a>>2]|0)|0;h=g;m=i;if(y>>>0>2>>>0){i=KBa(4088)|0;if((f|0)!=(g|0)){k[c>>2]=i;dt(a,c);r=b;return}k[d>>2]=i;et(a,d);d=k[v>>2]|0;i=k[d>>2]|0;c=d+4|0;k[v>>2]=c;d=k[e>>2]|0;g=k[j>>2]|0;f=g;n=d;do if((d|0)==(g|0)){l=k[a>>2]|0;p=l;if(c>>>0>l>>>0){u=c;o=((u-p>>2)+1|0)/-2|0;q=c+(o<<2)|0;B=n-u|0;Eyb(q|0,c|0,B|0)|0;u=q+(B>>2<<2)|0;k[e>>2]=u;k[v>>2]=(k[v>>2]|0)+(o<<2);C=u;break}u=f-p>>1;p=(u|0)==0?1:u;u=KBa(p<<2)|0;o=u;B=u+(p>>>2<<2)|0;q=B;D=u+(p<<2)|0;if((c|0)==(d|0)){E=q;F=l}else{l=B;B=c;p=q;while(1){k[l>>2]=k[B>>2];l=p+4|0;u=l;B=B+4|0;if((B|0)==(d|0)){G=u;break}else p=u}E=G;F=k[a>>2]|0}k[a>>2]=o;k[v>>2]=q;k[e>>2]=E;k[j>>2]=D;if(!F)C=E;else{OBa(F);C=k[e>>2]|0}}else C=d;while(0);k[C>>2]=i;k[e>>2]=(k[e>>2]|0)+4;r=b;return}i=A>>1;A=(i|0)==0?1:i;i=KBa(A<<2)|0;C=i;d=i+(y<<2)|0;F=i+(A<<2)|0;x=0;E=Ba(563,4088)|0;G=x;x=0;a:do if(G&1)H=29;else{c=E;do if((y|0)==(A|0)){if((z|0)>0){I=d+(((y+1|0)/-2|0)<<2)|0;J=h;K=m;L=F;N=C;break}f=z>>1;n=(f|0)==0?1:f;x=0;f=Ba(563,n<<2|0)|0;g=x;x=0;if(g&1){H=29;break a}OBa(i);I=f+(n>>>2<<2)|0;J=k[e>>2]|0;K=k[v>>2]|0;L=f+(n<<2)|0;N=f}else{I=d;J=h;K=m;L=F;N=C}while(0);D=I;k[I>>2]=c;q=I+4|0;b:do if((J|0)==(K|0)){O=L;P=q;Q=D;R=N}else{o=D;f=N;n=q;g=L;p=J;c:while(1){p=p+-4|0;B=o;do if((B|0)==(f|0)){l=n;if(l>>>0>>0){w=l+((((g-n>>2)+1|0)/2|0)<<2)|0;t=n-o|0;s=w+(0-(t>>2)<<2)|0;Eyb(s|0,o|0,t|0)|0;S=s;T=s;U=g;V=w;W=f;break}w=g-f>>1;s=(w|0)==0?1:w;x=0;w=Ba(563,s<<2|0)|0;t=x;x=0;if(t&1){X=f;break c}t=w;u=w+((s+3|0)>>>2<<2)|0;Y=u;Z=w+(s<<2)|0;if((B|0)==(l|0))_=Y;else{s=u;w=B;$=Y;while(1){k[s>>2]=k[w>>2];s=$+4|0;aa=s;w=w+4|0;if((w|0)==(l|0)){_=aa;break}else $=aa}}if(!o){S=u;T=Y;U=Z;V=_;W=t}else{OBa(o);S=u;T=Y;U=Z;V=_;W=t}}else{S=B;T=o;U=g;V=n;W=f}while(0);k[S+-4>>2]=k[p>>2];B=T+-4|0;if((p|0)==(k[v>>2]|0)){O=U;P=V;Q=B;R=W;break b}else{o=B;f=W;n=V;g=U}}g=Hc()|0;ba=M;ca=g;da=X;break a}while(0);q=k[a>>2]|0;k[a>>2]=R;k[v>>2]=Q;k[e>>2]=P;k[j>>2]=O;if(!q){r=b;return}OBa(q);r=b;return}while(0);if((H|0)==29){H=Hc(0)|0;me(H|0)|0;OBa(k[d+-4>>2]|0);x=0;hb(46);x=0;d=Hc()|0;H=M;x=0;hb(45);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{ba=H;ca=d;da=C}}if(!da)Sc(ca|0);OBa(da);Sc(ca|0)}function Us(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;c=r;r=r+16|0;d=c+8|0;e=c;f=a+20|0;g=k[f>>2]|0;if(g>>>0>>0){h=b-g|0;i=a+8|0;j=k[i>>2]|0;l=a+4|0;m=k[l>>2]|0;n=j-m>>2;o=a+16|0;p=k[o>>2]|0;q=((n|0)==0?0:(n*146|0)+-1|0)-(g+p)|0;if(h>>>0>q>>>0){bt(a,h-q|0);s=k[o>>2]|0;t=k[f>>2]|0;u=k[l>>2]|0;v=k[i>>2]|0}else{s=p;t=g;u=m;v=j}j=t+s|0;s=u+(((j>>>0)/146|0)<<2)|0;if((v|0)==(u|0))w=0;else w=(k[s>>2]|0)+(((j>>>0)%146|0)*28|0)|0;if((g|0)==(b|0)){r=c;return}else{x=h;y=w;z=s}while(1){s=y;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;k[s+20>>2]=0;k[s+24>>2]=0;x=x+-1|0;s=y+28|0;if((s-(k[z>>2]|0)|0)==4088){w=z+4|0;A=k[w>>2]|0;B=w}else{A=s;B=z}k[f>>2]=(k[f>>2]|0)+1;if(!x)break;else{y=A;z=B}}r=c;return}else{if(g>>>0<=b>>>0){r=c;return}g=k[a+4>>2]|0;B=k[a+16>>2]|0;z=g+(((B>>>0)/146|0)<<2)|0;if((k[a+8>>2]|0)==(g|0))C=0;else C=(k[z>>2]|0)+(((B>>>0)%146|0)*28|0)|0;do if(b){B=((C-(k[z>>2]|0)|0)/28|0)+b|0;if((B|0)>0){g=z+(((B|0)/146|0)<<2)|0;D=g;E=(k[g>>2]|0)+(((B|0)%146|0)*28|0)|0;break}else{g=145-B|0;B=z+(((g|0)/-146|0)<<2)|0;D=B;E=(k[B>>2]|0)+((145-((g|0)%146|0)|0)*28|0)|0;break}}else{D=z;E=C}while(0);k[e>>2]=D;k[e+4>>2]=E;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];ct(a,d);r=c;return}}function Vs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/20|0)+1|0;if(e>>>0>214748364){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/20|0;if(g>>>0<107374182){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/20|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=214748364;n=((k[c>>2]|0)-f|0)/20|0;o=6}if((o|0)==6){i=m;j=KBa(m*20|0)|0;l=n}n=j+(l*20|0)|0;m=n;o=j+(i*20|0)|0;i=b;f=k[i+4>>2]|0;h=n;k[h>>2]=k[i>>2];k[h+4>>2]=f;x=0;xa(604,j+(l*20|0)+8|0,b+8|0);b=x;x=0;if(b&1){b=Hc()|0;if(!j)Sc(b|0);OBa(j);Sc(b|0)}b=n+20|0;j=k[a>>2]|0;l=k[c>>2]|0;if((l|0)==(j|0)){p=m;q=j;r=j}else{f=l;l=n;n=m;while(1){m=f;f=f+-20|0;h=f;i=k[h+4>>2]|0;g=l+-20|0;k[g>>2]=k[h>>2];k[g+4>>2]=i;i=l+-12|0;g=m+-12|0;k[i>>2]=k[g>>2];k[i+4>>2]=k[g+4>>2];k[i+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;l=n+-20|0;g=l;if((f|0)==(j|0)){s=g;break}else n=g}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{K2a(d+-12|0);d=d+-20|0}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function Ws(a,b){a=a|0;b=b|0;if(!b)return;else{Ws(a,k[b>>2]|0);Ws(a,k[b+4>>2]|0);K2a(b+16|0);OBa(b);return}}function Xs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+16|0;e=d;f=KBa(28)|0;g=f+16|0;k[g>>2]=k[c>>2];k[g+4>>2]=k[c+4>>2];k[g+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;c=Zs(b,e,g)|0;h=k[c>>2]|0;if(!h){j=k[e>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=j;k[c>>2]=f;j=k[k[b>>2]>>2]|0;if(!j)l=f;else{k[b>>2]=j;l=k[c>>2]|0}ui(k[b+4>>2]|0,l);l=b+8|0;k[l>>2]=(k[l>>2]|0)+1;m=1;n=f}else{m=0;n=h}k[a>>2]=n;i[a+4>>0]=m;if(m<<24>>24){r=d;return}K2a(g);OBa(f);r=d;return}function Ys(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=a+4|0;a=k[c>>2]|0;if(a){d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=e?b+1|0:k[b+8>>2]|0;b=c;e=a;a:while(1){a=e;while(1){g=a+16|0;h=i[g>>0]|0;j=(h&1)==0;l=j?(h&255)>>>1:k[a+20>>2]|0;h=ZLa(j?g+1|0:k[a+24>>2]|0,d,f>>>0>>0?f:l)|0;if((((h|0)==0?(l>>>0>>0?-2147483648:0):h)|0)>=0){m=a;break}a=k[a+4>>2]|0;if(!a){n=b;break a}}e=k[m>>2]|0;if(!e){n=m;break}else b=m}if((n|0)!=(c|0)?(m=n+16|0,b=i[m>>0]|0,e=(b&1)==0,a=e?(b&255)>>>1:k[n+20>>2]|0,b=ZLa(d,e?m+1|0:k[n+24>>2]|0,a>>>0>>0?a:f)|0,(((b|0)==0?(f>>>0>>0?-2147483648:0):b)|0)>=0):0){o=n;return o|0}}o=c;return o|0}function Zs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function _s(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=24124;K2a(a+88|0);K2a(a+56|0);b=a+32|0;Ss(b);c=a+36|0;d=k[c>>2]|0;e=a+40|0;f=k[e>>2]|0;if((d|0)!=(f|0)){g=d;do{OBa(k[g>>2]|0);g=g+4|0}while((g|0)!=(f|0));f=k[c>>2]|0;c=k[e>>2]|0;if((c|0)!=(f|0))k[e>>2]=c+(~((c+-4-f|0)>>>2)<<2)}f=k[b>>2]|0;if(!f){h=a+8|0;yi(h);return}OBa(f);h=a+8|0;yi(h);return}function $s(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=24124;K2a(a+88|0);K2a(a+56|0);b=a+32|0;Ss(b);c=a+36|0;d=k[c>>2]|0;e=a+40|0;f=k[e>>2]|0;if((d|0)!=(f|0)){g=d;do{OBa(k[g>>2]|0);g=g+4|0}while((g|0)!=(f|0));f=k[c>>2]|0;c=k[e>>2]|0;if((c|0)!=(f|0))k[e>>2]=c+(~((c+-4-f|0)>>>2)<<2)}f=k[b>>2]|0;if(!f){h=a+8|0;yi(h);OBa(a);return}OBa(f);h=a+8|0;yi(h);OBa(a);return}function at(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=r;r=r+16|0;g=f;h=a+8|0;j=Ur(h,b,c,d,(i[a+4>>0]|0)!=0)|0;if(!e){r=f;return j|0}ws(g,h);if(!(i[e>>0]&1)){i[e+1>>0]=0;i[e>>0]=0}else{i[k[e+8>>2]>>0]=0;k[e+4>>2]=0}x=0;xa(603,e|0,0);h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)};k[e>>2]=k[g>>2];k[e+4>>2]=k[g+4>>2];k[e+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);r=f;return j|0}function bt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;c=r;r=r+16|0;d=c+4|0;e=c;f=a+8|0;g=k[f>>2]|0;h=a+4|0;i=k[h>>2]|0;j=((g|0)==(i|0)&1)+b|0;b=(((j>>>0)%146|0|0)!=0&1)+((j>>>0)/146|0)|0;j=a+16|0;l=k[j>>2]|0;m=(l>>>0)/146|0;n=b>>>0>>0?b:m;m=b-n|0;o=g;if((b|0)==(n|0)){p=(ia(b,-146)|0)+l|0;k[j>>2]=p;if(!b){r=c;return}p=a+12|0;l=i;q=g;g=b;while(1){b=k[l>>2]|0;s=l+4|0;k[h>>2]=s;t=k[p>>2]|0;u=t;v=q;do if((q|0)==(t|0)){w=k[a>>2]|0;y=w;if(s>>>0>w>>>0){z=s;A=((z-y>>2)+1|0)/-2|0;B=s+(A<<2)|0;C=v-z|0;Eyb(B|0,s|0,C|0)|0;z=B+(C>>2<<2)|0;k[f>>2]=z;k[h>>2]=(k[h>>2]|0)+(A<<2);D=z;break}z=u-y>>1;y=(z|0)==0?1:z;z=KBa(y<<2)|0;A=z;C=z+(y>>>2<<2)|0;B=C;E=z+(y<<2)|0;if((s|0)==(q|0)){F=B;G=w}else{w=C;C=s;y=B;while(1){k[w>>2]=k[C>>2];w=y+4|0;z=w;C=C+4|0;if((C|0)==(q|0)){H=z;break}else y=z}F=H;G=k[a>>2]|0}k[a>>2]=A;k[h>>2]=B;k[f>>2]=F;k[p>>2]=E;if(!G)D=F;else{OBa(G);D=k[f>>2]|0}}else D=q;while(0);k[D>>2]=b;s=(k[f>>2]|0)+4|0;k[f>>2]=s;u=g+-1|0;if(!u)break;l=k[h>>2]|0;q=s;g=u}r=c;return}g=a+12|0;q=k[g>>2]|0;l=q-(k[a>>2]|0)|0;D=o-i>>2;if(m>>>0<=((l>>2)-D|0)>>>0){a:do if((q|0)==(o|0)){I=m;J=16}else{i=m;while(1){G=KBa(4088)|0;k[d>>2]=G;dt(a,d);G=i+-1|0;if(!G){J=17;break a}if((k[g>>2]|0)==(k[f>>2]|0)){I=G;J=16;break}else i=G}}while(0);if((J|0)==16)if(!I)J=17;else{d=n;o=I;while(1){I=KBa(4088)|0;k[e>>2]=I;et(a,e);o=o+-1|0;I=d+1|0;q=(k[j>>2]|0)+146+((((k[f>>2]|0)-(k[h>>2]|0)|0)==4)<<31>>31)|0;k[j>>2]=q;if(!o){K=I;L=q;break}else d=I}}if((J|0)==17){K=n;L=k[j>>2]|0}d=L+(ia(K,-146)|0)|0;k[j>>2]=d;if(!K){r=c;return}d=k[f>>2]|0;L=K;do{K=k[h>>2]|0;o=k[K>>2]|0;e=K+4|0;k[h>>2]=e;K=k[g>>2]|0;I=K;q=d;do if((d|0)==(K|0)){i=k[a>>2]|0;b=i;if(e>>>0>i>>>0){G=e;F=((G-b>>2)+1|0)/-2|0;p=e+(F<<2)|0;H=q-G|0;Eyb(p|0,e|0,H|0)|0;G=p+(H>>2<<2)|0;k[f>>2]=G;k[h>>2]=(k[h>>2]|0)+(F<<2);N=G;break}G=I-b>>1;b=(G|0)==0?1:G;G=KBa(b<<2)|0;F=G;H=G+(b>>>2<<2)|0;p=H;u=G+(b<<2)|0;if((e|0)==(d|0)){O=p;P=i}else{i=H;H=e;b=p;while(1){k[i>>2]=k[H>>2];i=b+4|0;G=i;H=H+4|0;if((H|0)==(d|0)){Q=G;break}else b=G}O=Q;P=k[a>>2]|0}k[a>>2]=F;k[h>>2]=p;k[f>>2]=O;k[g>>2]=u;if(!P)N=O;else{OBa(P);N=k[f>>2]|0}}else N=d;while(0);k[N>>2]=o;d=(k[f>>2]|0)+4|0;k[f>>2]=d;L=L+-1|0}while((L|0)!=0);r=c;return}L=l>>1;l=D+m|0;d=L>>>0>>0?l:L;if(!d)R=0;else R=KBa(d<<2)|0;L=R+(D-n<<2)|0;D=L;l=R+(d<<2)|0;d=L;L=R;R=m;b:while(1){x=0;m=Ba(563,4088)|0;N=x;x=0;if(N&1){S=L;T=d;U=D;J=49;break}N=m;m=D;P=D;do if((m|0)==(l|0)){O=d;if(O>>>0>L>>>0){Q=O+((((d-L>>2)+1|0)/-2|0)<<2)|0;e=D-d|0;Eyb(Q|0,d|0,e|0)|0;I=Q+(e>>2<<2)|0;V=I;W=I;X=l;Y=Q;Z=L;break}Q=l-L>>1;I=(Q|0)==0?1:Q;x=0;Q=Ba(563,I<<2|0)|0;e=x;x=0;if(e&1){S=L;T=d;U=D;J=49;break b}e=Q;q=Q+(I>>>2<<2)|0;K=q;b=Q+(I<<2)|0;if((O|0)==(m|0))_=K;else{I=q;q=O;O=K;while(1){k[I>>2]=k[q>>2];I=O+4|0;Q=I;q=q+4|0;if((q|0)==(m|0)){_=Q;break}else O=Q}}O=_;if(!L){V=O;W=_;X=b;Y=K;Z=e}else{OBa(L);V=O;W=_;X=b;Y=K;Z=e}}else{V=P;W=D;X=l;Y=d;Z=L}while(0);k[V>>2]=N;P=W+4|0;R=R+-1|0;if(!R){$=X;aa=Y;ba=Z;ca=P;J=36;break}else{D=P;l=X;d=Y;L=Z}}if((J|0)==36){c:do if(!n){da=$;ea=ca;fa=aa;ga=ba;ha=k[h>>2]|0;J=64}else{Z=ca;L=$;Y=aa;d=ba;X=k[h>>2]|0;l=n;d:while(1){D=Z;R=Z;do if((D|0)==(L|0)){W=Y;if(W>>>0>d>>>0){V=W+((((Y-d>>2)+1|0)/-2|0)<<2)|0;_=Z-Y|0;Eyb(V|0,Y|0,_|0)|0;P=V+(_>>2<<2)|0;ja=P;ka=P;la=L;ma=V;na=d;break}V=L-d>>1;P=(V|0)==0?1:V;x=0;V=Ba(563,P<<2|0)|0;_=x;x=0;if(_&1){oa=d;break d}_=V;m=V+(P>>>2<<2)|0;o=m;O=V+(P<<2)|0;if((W|0)==(D|0))pa=o;else{P=m;m=W;W=o;while(1){k[P>>2]=k[m>>2];P=W+4|0;V=P;m=m+4|0;if((m|0)==(D|0)){pa=V;break}else W=V}}W=pa;if(!d){ja=W;ka=pa;la=O;ma=o;na=_}else{OBa(d);ja=W;ka=pa;la=O;ma=o;na=_}}else{ja=R;ka=Z;la=L;ma=Y;na=d}while(0);k[ja>>2]=k[X>>2];R=ka+4|0;D=(k[h>>2]|0)+4|0;k[h>>2]=D;l=l+-1|0;if(!l){da=la;ea=R;fa=ma;ga=na;ha=D;J=64;break c}else{Z=R;L=la;Y=ma;d=na;X=D}}X=Hc()|0;qa=oa;ra=X;sa=M}while(0);e:do if((J|0)==64){oa=k[f>>2]|0;f:do if((oa|0)==(ha|0)){ta=da;ua=ea;va=fa;wa=ga}else{na=fa;ma=ga;la=ea;ka=da;ja=oa;g:while(1){ja=ja+-4|0;pa=na;do if((pa|0)==(ma|0)){ba=la;if(ba>>>0>>0){aa=ba+((((ka-la>>2)+1|0)/2|0)<<2)|0;$=la-na|0;ca=aa+(0-($>>2)<<2)|0;Eyb(ca|0,na|0,$|0)|0;xa=ca;ya=ca;za=ka;Aa=aa;Ca=ma;break}aa=ka-ma>>1;ca=(aa|0)==0?1:aa;x=0;aa=Ba(563,ca<<2|0)|0;$=x;x=0;if($&1){Da=ma;break g}$=aa;X=aa+((ca+3|0)>>>2<<2)|0;d=X;Y=aa+(ca<<2)|0;if((pa|0)==(ba|0))Ea=d;else{ca=X;aa=pa;L=d;while(1){k[ca>>2]=k[aa>>2];ca=L+4|0;Z=ca;aa=aa+4|0;if((aa|0)==(ba|0)){Ea=Z;break}else L=Z}}if(!na){xa=X;ya=d;za=Y;Aa=Ea;Ca=$}else{OBa(na);xa=X;ya=d;za=Y;Aa=Ea;Ca=$}}else{xa=pa;ya=na;za=ka;Aa=la;Ca=ma}while(0);k[xa+-4>>2]=k[ja>>2];pa=ya+-4|0;if((ja|0)==(k[h>>2]|0)){ta=za;ua=Aa;va=pa;wa=Ca;break f}else{na=pa;ma=Ca;la=Aa;ka=za}}ka=Hc()|0;qa=Da;ra=ka;sa=M;break e}while(0);oa=k[a>>2]|0;k[a>>2]=wa;k[h>>2]=va;k[f>>2]=ua;k[g>>2]=ta;ka=(k[j>>2]|0)+(ia(n,-146)|0)|0;k[j>>2]=ka;if(!oa){r=c;return}OBa(oa);r=c;return}while(0);Fa=sa;Ga=ra;Ha=qa}else if((J|0)==49){J=Hc(0)|0;me(J|0)|0;J=T;T=U;if((J|0)!=(T|0)){U=J;do{OBa(k[U>>2]|0);U=U+4|0}while((U|0)!=(T|0))}x=0;hb(46);x=0;T=Hc()|0;U=M;x=0;hb(45);J=x;x=0;if(J&1){J=Hc(0)|0;Fg(J)}else{Fa=U;Ga=T;Ha=S}}if(!Ha)Sc(Ga|0);OBa(Ha);Sc(Ga|0)}function ct(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+20|0;d=a+16|0;e=k[d>>2]|0;f=e+(k[c>>2]|0)|0;g=a+4|0;h=k[g>>2]|0;i=h+(((f>>>0)/146|0)<<2)|0;j=a+8|0;a=(k[j>>2]|0)==(h|0);if(a)l=0;else l=(k[i>>2]|0)+(((f>>>0)%146|0)*28|0)|0;f=k[b+4>>2]|0;if((l|0)==(f|0))return;m=k[b>>2]|0;b=m;n=f-(k[m>>2]|0)|0;m=((i-b>>2)*146|0)+((l-(k[i>>2]|0)|0)/28|0)+((n|0)/-28|0)|0;if((m|0)<=0)return;i=h+(((e>>>0)/146|0)<<2)|0;if(a)o=0;else o=(k[i>>2]|0)+(((e>>>0)%146|0)*28|0)|0;do if((f|0)!=(o|0)?(e=((b-i>>2)*146|0)+((n|0)/28|0)+((o-(k[i>>2]|0)|0)/-28|0)|0,(e|0)!=0):0){a=((o-(k[i>>2]|0)|0)/28|0)+e|0;if((a|0)>0){e=i+(((a|0)/146|0)<<2)|0;p=e;q=(k[e>>2]|0)+(((a|0)%146|0)*28|0)|0;break}else{e=145-a|0;a=i+(((e|0)/-146|0)<<2)|0;p=a;q=(k[a>>2]|0)+((145-((e|0)%146|0)|0)*28|0)|0;break}}else{p=i;q=o}while(0);a:while(1){o=q;do{i=o;if((i|0)==(l|0))break a;K2a(i+12|0);o=i+28|0}while((o-(k[p>>2]|0)|0)!=4088);o=p+4|0;p=o;q=k[o>>2]|0}q=(k[c>>2]|0)-m|0;k[c>>2]=q;m=k[j>>2]|0;p=m-(k[g>>2]|0)>>2;if((((p|0)==0?0:(p*146|0)+-1|0)-(q+(k[d>>2]|0))|0)>>>0<=291)return;q=m;do{OBa(k[q+-4>>2]|0);q=(k[j>>2]|0)+-4|0;k[j>>2]=q;m=q-(k[g>>2]|0)>>2}while((((m|0)==0?0:(m*146|0)+-1|0)-((k[c>>2]|0)+(k[d>>2]|0))|0)>>>0>291);return}function dt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+8|0;d=k[c>>2]|0;e=a+12|0;f=k[e>>2]|0;g=f;h=d;do if((d|0)==(f|0)){i=a+4|0;j=k[i>>2]|0;l=k[a>>2]|0;m=l;if(j>>>0>l>>>0){n=j;o=((n-m>>2)+1|0)/-2|0;p=j+(o<<2)|0;q=h-n|0;Eyb(p|0,j|0,q|0)|0;n=p+(q>>2<<2)|0;k[c>>2]=n;k[i>>2]=(k[i>>2]|0)+(o<<2);r=n;break}n=g-m>>1;m=(n|0)==0?1:n;n=KBa(m<<2)|0;o=n;q=n+(m>>>2<<2)|0;p=q;s=n+(m<<2)|0;if((j|0)==(d|0)){t=p;u=l}else{l=q;q=j;j=p;while(1){k[l>>2]=k[q>>2];l=j+4|0;m=l;q=q+4|0;if((q|0)==(d|0)){v=m;break}else j=m}t=v;u=k[a>>2]|0}k[a>>2]=o;k[i>>2]=p;k[c>>2]=t;k[e>>2]=s;if(!u)r=t;else{OBa(u);r=k[c>>2]|0}}else r=d;while(0);k[r>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+4;return}function et(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[c>>2]|0;e=k[a>>2]|0;f=e;do if((d|0)==(e|0)){g=a+8|0;h=k[g>>2]|0;i=a+12|0;j=k[i>>2]|0;l=j;if(h>>>0>>0){j=h;m=((l-j>>2)+1|0)/2|0;n=j-d|0;j=h+(m<<2)+(0-(n>>2)<<2)|0;Eyb(j|0,d|0,n|0)|0;k[c>>2]=j;k[g>>2]=(k[g>>2]|0)+(m<<2);o=j;break}j=l-f>>1;l=(j|0)==0?1:j;j=KBa(l<<2)|0;m=j;n=j+((l+3|0)>>>2<<2)|0;p=n;q=j+(l<<2)|0;if((d|0)==(h|0)){r=p;s=d}else{l=n;j=d;t=p;while(1){k[l>>2]=k[j>>2];l=t+4|0;u=l;j=j+4|0;if((j|0)==(h|0)){v=u;break}else t=u}r=v;s=k[a>>2]|0}k[a>>2]=m;k[c>>2]=p;k[g>>2]=r;k[i>>2]=q;if(!s)o=n;else{OBa(s);o=k[c>>2]|0}}else o=d;while(0);k[o+-4>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+-4;return}function ft(a){a=a|0;var b=0,c=0;k[a>>2]=24072;b=a+60|0;k[b>>2]=24092;c=a+8|0;k[c>>2]=20392;K2a(a+40|0);obb(c);mab(b);return}function gt(a){a=a|0;var b=0,c=0;k[a>>2]=24072;b=a+60|0;k[b>>2]=24092;c=a+8|0;k[c>>2]=20392;K2a(a+40|0);obb(c);mab(b);OBa(a);return}function ht(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=24072;a=b+60|0;k[a>>2]=24092;c=b+8|0;k[c>>2]=20392;K2a(b+40|0);obb(c);mab(a);return}function it(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=24072;a=b+60|0;k[a>>2]=24092;c=b+8|0;k[c>>2]=20392;K2a(b+40|0);obb(c);mab(a);OBa(b);return}function jt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;c=r;r=r+16|0;d=c+4|0;e=c;f=a+8|0;g=k[f>>2]|0;h=a+4|0;i=k[h>>2]|0;j=((g|0)==(i|0)&1)+b|0;b=(((j>>>0)%146|0|0)!=0&1)+((j>>>0)/146|0)|0;j=a+16|0;l=k[j>>2]|0;m=(l>>>0)/146|0;n=b>>>0>>0?b:m;m=b-n|0;o=g;if((b|0)==(n|0)){p=(ia(b,-146)|0)+l|0;k[j>>2]=p;if(!b){r=c;return}p=a+12|0;l=i;q=g;g=b;while(1){b=k[l>>2]|0;s=l+4|0;k[h>>2]=s;t=k[p>>2]|0;u=t;v=q;do if((q|0)==(t|0)){w=k[a>>2]|0;y=w;if(s>>>0>w>>>0){z=s;A=((z-y>>2)+1|0)/-2|0;B=s+(A<<2)|0;C=v-z|0;Eyb(B|0,s|0,C|0)|0;z=B+(C>>2<<2)|0;k[f>>2]=z;k[h>>2]=(k[h>>2]|0)+(A<<2);D=z;break}z=u-y>>1;y=(z|0)==0?1:z;z=KBa(y<<2)|0;A=z;C=z+(y>>>2<<2)|0;B=C;E=z+(y<<2)|0;if((s|0)==(q|0)){F=B;G=w}else{w=C;C=s;y=B;while(1){k[w>>2]=k[C>>2];w=y+4|0;z=w;C=C+4|0;if((C|0)==(q|0)){H=z;break}else y=z}F=H;G=k[a>>2]|0}k[a>>2]=A;k[h>>2]=B;k[f>>2]=F;k[p>>2]=E;if(!G)D=F;else{OBa(G);D=k[f>>2]|0}}else D=q;while(0);k[D>>2]=b;s=(k[f>>2]|0)+4|0;k[f>>2]=s;u=g+-1|0;if(!u)break;l=k[h>>2]|0;q=s;g=u}r=c;return}g=a+12|0;q=k[g>>2]|0;l=q-(k[a>>2]|0)|0;D=o-i>>2;if(m>>>0<=((l>>2)-D|0)>>>0){a:do if((q|0)==(o|0)){I=m;J=16}else{i=m;while(1){G=KBa(4088)|0;k[d>>2]=G;lt(a,d);G=i+-1|0;if(!G){J=17;break a}if((k[g>>2]|0)==(k[f>>2]|0)){I=G;J=16;break}else i=G}}while(0);if((J|0)==16)if(!I)J=17;else{d=n;o=I;while(1){I=KBa(4088)|0;k[e>>2]=I;mt(a,e);o=o+-1|0;I=d+1|0;q=(k[j>>2]|0)+146+((((k[f>>2]|0)-(k[h>>2]|0)|0)==4)<<31>>31)|0;k[j>>2]=q;if(!o){K=I;L=q;break}else d=I}}if((J|0)==17){K=n;L=k[j>>2]|0}d=L+(ia(K,-146)|0)|0;k[j>>2]=d;if(!K){r=c;return}d=k[f>>2]|0;L=K;do{K=k[h>>2]|0;o=k[K>>2]|0;e=K+4|0;k[h>>2]=e;K=k[g>>2]|0;I=K;q=d;do if((d|0)==(K|0)){i=k[a>>2]|0;b=i;if(e>>>0>i>>>0){G=e;F=((G-b>>2)+1|0)/-2|0;p=e+(F<<2)|0;H=q-G|0;Eyb(p|0,e|0,H|0)|0;G=p+(H>>2<<2)|0;k[f>>2]=G;k[h>>2]=(k[h>>2]|0)+(F<<2);N=G;break}G=I-b>>1;b=(G|0)==0?1:G;G=KBa(b<<2)|0;F=G;H=G+(b>>>2<<2)|0;p=H;u=G+(b<<2)|0;if((e|0)==(d|0)){O=p;P=i}else{i=H;H=e;b=p;while(1){k[i>>2]=k[H>>2];i=b+4|0;G=i;H=H+4|0;if((H|0)==(d|0)){Q=G;break}else b=G}O=Q;P=k[a>>2]|0}k[a>>2]=F;k[h>>2]=p;k[f>>2]=O;k[g>>2]=u;if(!P)N=O;else{OBa(P);N=k[f>>2]|0}}else N=d;while(0);k[N>>2]=o;d=(k[f>>2]|0)+4|0;k[f>>2]=d;L=L+-1|0}while((L|0)!=0);r=c;return}L=l>>1;l=D+m|0;d=L>>>0>>0?l:L;if(!d)R=0;else R=KBa(d<<2)|0;L=R+(D-n<<2)|0;D=L;l=R+(d<<2)|0;d=L;L=R;R=m;b:while(1){x=0;m=Ba(563,4088)|0;N=x;x=0;if(N&1){S=L;T=d;U=D;J=49;break}N=m;m=D;P=D;do if((m|0)==(l|0)){O=d;if(O>>>0>L>>>0){Q=O+((((d-L>>2)+1|0)/-2|0)<<2)|0;e=D-d|0;Eyb(Q|0,d|0,e|0)|0;I=Q+(e>>2<<2)|0;V=I;W=I;X=l;Y=Q;Z=L;break}Q=l-L>>1;I=(Q|0)==0?1:Q;x=0;Q=Ba(563,I<<2|0)|0;e=x;x=0;if(e&1){S=L;T=d;U=D;J=49;break b}e=Q;q=Q+(I>>>2<<2)|0;K=q;b=Q+(I<<2)|0;if((O|0)==(m|0))_=K;else{I=q;q=O;O=K;while(1){k[I>>2]=k[q>>2];I=O+4|0;Q=I;q=q+4|0;if((q|0)==(m|0)){_=Q;break}else O=Q}}O=_;if(!L){V=O;W=_;X=b;Y=K;Z=e}else{OBa(L);V=O;W=_;X=b;Y=K;Z=e}}else{V=P;W=D;X=l;Y=d;Z=L}while(0);k[V>>2]=N;P=W+4|0;R=R+-1|0;if(!R){$=X;aa=Y;ba=Z;ca=P;J=36;break}else{D=P;l=X;d=Y;L=Z}}if((J|0)==36){c:do if(!n){da=$;ea=ca;fa=aa;ga=ba;ha=k[h>>2]|0;J=64}else{Z=ca;L=$;Y=aa;d=ba;X=k[h>>2]|0;l=n;d:while(1){D=Z;R=Z;do if((D|0)==(L|0)){W=Y;if(W>>>0>d>>>0){V=W+((((Y-d>>2)+1|0)/-2|0)<<2)|0;_=Z-Y|0;Eyb(V|0,Y|0,_|0)|0;P=V+(_>>2<<2)|0;ja=P;ka=P;la=L;ma=V;na=d;break}V=L-d>>1;P=(V|0)==0?1:V;x=0;V=Ba(563,P<<2|0)|0;_=x;x=0;if(_&1){oa=d;break d}_=V;m=V+(P>>>2<<2)|0;o=m;O=V+(P<<2)|0;if((W|0)==(D|0))pa=o;else{P=m;m=W;W=o;while(1){k[P>>2]=k[m>>2];P=W+4|0;V=P;m=m+4|0;if((m|0)==(D|0)){pa=V;break}else W=V}}W=pa;if(!d){ja=W;ka=pa;la=O;ma=o;na=_}else{OBa(d);ja=W;ka=pa;la=O;ma=o;na=_}}else{ja=R;ka=Z;la=L;ma=Y;na=d}while(0);k[ja>>2]=k[X>>2];R=ka+4|0;D=(k[h>>2]|0)+4|0;k[h>>2]=D;l=l+-1|0;if(!l){da=la;ea=R;fa=ma;ga=na;ha=D;J=64;break c}else{Z=R;L=la;Y=ma;d=na;X=D}}X=Hc()|0;qa=oa;ra=X;sa=M}while(0);e:do if((J|0)==64){oa=k[f>>2]|0;f:do if((oa|0)==(ha|0)){ta=da;ua=ea;va=fa;wa=ga}else{na=fa;ma=ga;la=ea;ka=da;ja=oa;g:while(1){ja=ja+-4|0;pa=na;do if((pa|0)==(ma|0)){ba=la;if(ba>>>0>>0){aa=ba+((((ka-la>>2)+1|0)/2|0)<<2)|0;$=la-na|0;ca=aa+(0-($>>2)<<2)|0;Eyb(ca|0,na|0,$|0)|0;xa=ca;ya=ca;za=ka;Aa=aa;Ca=ma;break}aa=ka-ma>>1;ca=(aa|0)==0?1:aa;x=0;aa=Ba(563,ca<<2|0)|0;$=x;x=0;if($&1){Da=ma;break g}$=aa;X=aa+((ca+3|0)>>>2<<2)|0;d=X;Y=aa+(ca<<2)|0;if((pa|0)==(ba|0))Ea=d;else{ca=X;aa=pa;L=d;while(1){k[ca>>2]=k[aa>>2];ca=L+4|0;Z=ca;aa=aa+4|0;if((aa|0)==(ba|0)){Ea=Z;break}else L=Z}}if(!na){xa=X;ya=d;za=Y;Aa=Ea;Ca=$}else{OBa(na);xa=X;ya=d;za=Y;Aa=Ea;Ca=$}}else{xa=pa;ya=na;za=ka;Aa=la;Ca=ma}while(0);k[xa+-4>>2]=k[ja>>2];pa=ya+-4|0;if((ja|0)==(k[h>>2]|0)){ta=za;ua=Aa;va=pa;wa=Ca;break f}else{na=pa;ma=Ca;la=Aa;ka=za}}ka=Hc()|0;qa=Da;ra=ka;sa=M;break e}while(0);oa=k[a>>2]|0;k[a>>2]=wa;k[h>>2]=va;k[f>>2]=ua;k[g>>2]=ta;ka=(k[j>>2]|0)+(ia(n,-146)|0)|0;k[j>>2]=ka;if(!oa){r=c;return}OBa(oa);r=c;return}while(0);Fa=sa;Ga=ra;Ha=qa}else if((J|0)==49){J=Hc(0)|0;me(J|0)|0;J=T;T=U;if((J|0)!=(T|0)){U=J;do{OBa(k[U>>2]|0);U=U+4|0}while((U|0)!=(T|0))}x=0;hb(46);x=0;T=Hc()|0;U=M;x=0;hb(45);J=x;x=0;if(J&1){J=Hc(0)|0;Fg(J)}else{Fa=U;Ga=T;Ha=S}}if(!Ha)Sc(Ga|0);OBa(Ha);Sc(Ga|0)}function kt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+20|0;d=a+16|0;e=k[d>>2]|0;f=e+(k[c>>2]|0)|0;g=a+4|0;h=k[g>>2]|0;i=h+(((f>>>0)/146|0)<<2)|0;j=a+8|0;a=(k[j>>2]|0)==(h|0);if(a)l=0;else l=(k[i>>2]|0)+(((f>>>0)%146|0)*28|0)|0;f=k[b+4>>2]|0;if((l|0)==(f|0))return;m=k[b>>2]|0;b=m;n=f-(k[m>>2]|0)|0;m=((i-b>>2)*146|0)+((l-(k[i>>2]|0)|0)/28|0)+((n|0)/-28|0)|0;if((m|0)<=0)return;i=h+(((e>>>0)/146|0)<<2)|0;if(a)o=0;else o=(k[i>>2]|0)+(((e>>>0)%146|0)*28|0)|0;do if((f|0)!=(o|0)?(e=((b-i>>2)*146|0)+((n|0)/28|0)+((o-(k[i>>2]|0)|0)/-28|0)|0,(e|0)!=0):0){a=((o-(k[i>>2]|0)|0)/28|0)+e|0;if((a|0)>0){e=i+(((a|0)/146|0)<<2)|0;p=e;q=(k[e>>2]|0)+(((a|0)%146|0)*28|0)|0;break}else{e=145-a|0;a=i+(((e|0)/-146|0)<<2)|0;p=a;q=(k[a>>2]|0)+((145-((e|0)%146|0)|0)*28|0)|0;break}}else{p=i;q=o}while(0);a:while(1){o=q;do{i=o;if((i|0)==(l|0))break a;K2a(i+12|0);o=i+28|0}while((o-(k[p>>2]|0)|0)!=4088);o=p+4|0;p=o;q=k[o>>2]|0}q=(k[c>>2]|0)-m|0;k[c>>2]=q;m=k[j>>2]|0;p=m-(k[g>>2]|0)>>2;if((((p|0)==0?0:(p*146|0)+-1|0)-(q+(k[d>>2]|0))|0)>>>0<=291)return;q=m;do{OBa(k[q+-4>>2]|0);q=(k[j>>2]|0)+-4|0;k[j>>2]=q;m=q-(k[g>>2]|0)>>2}while((((m|0)==0?0:(m*146|0)+-1|0)-((k[c>>2]|0)+(k[d>>2]|0))|0)>>>0>291);return}function lt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+8|0;d=k[c>>2]|0;e=a+12|0;f=k[e>>2]|0;g=f;h=d;do if((d|0)==(f|0)){i=a+4|0;j=k[i>>2]|0;l=k[a>>2]|0;m=l;if(j>>>0>l>>>0){n=j;o=((n-m>>2)+1|0)/-2|0;p=j+(o<<2)|0;q=h-n|0;Eyb(p|0,j|0,q|0)|0;n=p+(q>>2<<2)|0;k[c>>2]=n;k[i>>2]=(k[i>>2]|0)+(o<<2);r=n;break}n=g-m>>1;m=(n|0)==0?1:n;n=KBa(m<<2)|0;o=n;q=n+(m>>>2<<2)|0;p=q;s=n+(m<<2)|0;if((j|0)==(d|0)){t=p;u=l}else{l=q;q=j;j=p;while(1){k[l>>2]=k[q>>2];l=j+4|0;m=l;q=q+4|0;if((q|0)==(d|0)){v=m;break}else j=m}t=v;u=k[a>>2]|0}k[a>>2]=o;k[i>>2]=p;k[c>>2]=t;k[e>>2]=s;if(!u)r=t;else{OBa(u);r=k[c>>2]|0}}else r=d;while(0);k[r>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+4;return}function mt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[c>>2]|0;e=k[a>>2]|0;f=e;do if((d|0)==(e|0)){g=a+8|0;h=k[g>>2]|0;i=a+12|0;j=k[i>>2]|0;l=j;if(h>>>0>>0){j=h;m=((l-j>>2)+1|0)/2|0;n=j-d|0;j=h+(m<<2)+(0-(n>>2)<<2)|0;Eyb(j|0,d|0,n|0)|0;k[c>>2]=j;k[g>>2]=(k[g>>2]|0)+(m<<2);o=j;break}j=l-f>>1;l=(j|0)==0?1:j;j=KBa(l<<2)|0;m=j;n=j+((l+3|0)>>>2<<2)|0;p=n;q=j+(l<<2)|0;if((d|0)==(h|0)){r=p;s=d}else{l=n;j=d;t=p;while(1){k[l>>2]=k[j>>2];l=t+4|0;u=l;j=j+4|0;if((j|0)==(h|0)){v=u;break}else t=u}r=v;s=k[a>>2]|0}k[a>>2]=m;k[c>>2]=p;k[g>>2]=r;k[i>>2]=q;if(!s)o=n;else{OBa(s);o=k[c>>2]|0}}else o=d;while(0);k[o+-4>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+-4;return}function nt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+8|0;d=k[c>>2]|0;e=a+12|0;f=k[e>>2]|0;g=f;h=d;do if((d|0)==(f|0)){i=a+4|0;j=k[i>>2]|0;l=k[a>>2]|0;m=l;if(j>>>0>l>>>0){n=j;o=((n-m>>2)+1|0)/-2|0;p=j+(o<<2)|0;q=h-n|0;Eyb(p|0,j|0,q|0)|0;n=p+(q>>2<<2)|0;k[c>>2]=n;k[i>>2]=(k[i>>2]|0)+(o<<2);r=n;break}n=g-m>>1;m=(n|0)==0?1:n;n=KBa(m<<2)|0;o=n;q=n+(m>>>2<<2)|0;p=q;s=n+(m<<2)|0;if((j|0)==(d|0)){t=p;u=l}else{l=q;q=j;j=p;while(1){k[l>>2]=k[q>>2];l=j+4|0;m=l;q=q+4|0;if((q|0)==(d|0)){v=m;break}else j=m}t=v;u=k[a>>2]|0}k[a>>2]=o;k[i>>2]=p;k[c>>2]=t;k[e>>2]=s;if(!u)r=t;else{OBa(u);r=k[c>>2]|0}}else r=d;while(0);k[r>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+4;return}function ot(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[c>>2]|0;e=k[a>>2]|0;f=e;do if((d|0)==(e|0)){g=a+8|0;h=k[g>>2]|0;i=a+12|0;j=k[i>>2]|0;l=j;if(h>>>0>>0){j=h;m=((l-j>>2)+1|0)/2|0;n=j-d|0;j=h+(m<<2)+(0-(n>>2)<<2)|0;Eyb(j|0,d|0,n|0)|0;k[c>>2]=j;k[g>>2]=(k[g>>2]|0)+(m<<2);o=j;break}j=l-f>>1;l=(j|0)==0?1:j;j=KBa(l<<2)|0;m=j;n=j+((l+3|0)>>>2<<2)|0;p=n;q=j+(l<<2)|0;if((d|0)==(h|0)){r=p;s=d}else{l=n;j=d;t=p;while(1){k[l>>2]=k[j>>2];l=t+4|0;u=l;j=j+4|0;if((j|0)==(h|0)){v=u;break}else t=u}r=v;s=k[a>>2]|0}k[a>>2]=m;k[c>>2]=p;k[g>>2]=r;k[i>>2]=q;if(!s)o=n;else{OBa(s);o=k[c>>2]|0}}else o=d;while(0);k[o+-4>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+-4;return}function pt(){if(i[1728]|0)return 1736;if(!(Bb(1728)|0))return 1736;j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728);return 1736}function qt(a){a=a|0;i[a+4>>0]=1;return}function rt(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];i[a+4>>0]=0;return}function st(a){a=a|0;return (k[a>>2]|0)+24|0}function tt(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;c=k[b+4>>2]|0;if(!c){d=b;while(1){b=k[d+8>>2]|0;if((k[b>>2]|0)==(d|0)){e=b;break}else d=b}k[a>>2]=e;return}else{d=c;while(1){c=k[d>>2]|0;if(!c){e=d;break}else d=c}k[a>>2]=e;return}}function ut(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;c=k[b>>2]|0;if(!c){d=b;while(1){b=k[d+8>>2]|0;if((k[b>>2]|0)==(d|0))d=b;else{e=b;break}}k[a>>2]=e;return}else{d=c;while(1){c=k[d+4>>2]|0;if(!c){e=d;break}else d=c}k[a>>2]=e;return}}function vt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;if((i[a+4>>0]|0)!=0?(i[b+4>>0]|0)!=0:0){c=0;return c|0}d=k[a>>2]|0;a=k[b>>2]|0;if((d|0)==(a|0)){c=0;return c|0}else{e=d;f=0}while(1){d=f+1|0;b=e;g=k[b+4>>2]|0;if(!g){h=b;while(1){b=k[h+8>>2]|0;if((k[b>>2]|0)==(h|0)){j=b;break}else h=b}}else{h=g;while(1){b=k[h>>2]|0;if(!b){j=h;break}else h=b}}if((j|0)==(a|0)){c=d;break}else{e=j;f=d}}return c|0}function wt(a,b){a=a|0;b=b|0;var c=0;if(!(i[a+4>>0]|0)){c=(k[a>>2]|0)==(k[b>>2]|0);return c|0}else{c=(i[b+4>>0]|0)!=0;return c|0}return 0}function xt(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];i[a+4>>0]=i[b+4>>0]|0;return}function yt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c;bu(d,(k[b>>2]|0)+16|0);b=k[d>>2]|0;e=k[d+4>>2]|0;if(!b){d=a+8|0;j[d>>1]=j[d>>1]&-512|2;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;d=a;k[d>>2]=e;k[d+4>>2]=0;r=c;return}d=e&3;do if(!d){f=a+8|0;j[f>>1]=j[f>>1]&-512|4;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a>>2]=b}else{f=a+8|0;j[f>>1]=j[f>>1]&-512|260;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;x=0;f=Ta(515,b|0,e>>>2|0)|0;g=x;x=0;if(!(g&1)){k[a>>2]=f;break}f=Hc()|0;if((d|0)!=1)Sc(f|0);yYa(b);Sc(f|0)}while(0);if((e&3|0)!=1){r=c;return}yYa(b);r=c;return}function zt(a){a=a|0;return k[a>>2]|0}function At(a){a=a|0;return (k[a+4>>2]&3|0)==0|0}function Bt(a){a=a|0;return (k[a+4>>2]|0)>>>2|0}function Ct(a){a=a|0;return k[a+4>>2]|0}function Dt(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b;bu(c,(k[a>>2]|0)+16|0);a=k[c>>2]|0;d=k[c+4>>2]|0;if(a)if((d&3|0)==1){yYa(a);e=-1}else e=-1;else e=d;r=b;return e|0}function Et(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=k[b>>2]|0;b=k[c+16>>2]|0;if(!b){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}d=k[c+20>>2]|0;c=d>>>2;e=b+c|0;if(d>>>0<44){i[a>>0]=c<<1;f=a+1|0}else{d=c+16&2147483632;g=KBa(d)|0;k[a+8>>2]=g;k[a>>2]=d|1;k[a+4>>2]=c;f=g}if(!c)h=f;else{g=b;b=f;while(1){i[b>>0]=i[g>>0]|0;g=g+1|0;if((g|0)==(e|0))break;else b=b+1|0}h=f+c|0}i[h>>0]=0;return}function Ft(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=k[a>>2]|0;a=k[c+16>>2]|0;if(!a){d=0;e=0}else{d=a;e=a+((k[c+20>>2]|0)>>>2)|0}k[b>>2]=e;return d|0}function Gt(a){a=a|0;var b=0;b=k[(k[a>>2]|0)+16>>2]|0;return ((b|0)!=0?b:329672)|0}function Ht(a){a=a|0;i[a+4>>0]=1;return}function It(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];i[a+4>>0]=0;return}function Jt(a,b){a=a|0;b=b|0;var c=0,d=0;c=b;b=k[c+4>>2]|0;d=a;k[d>>2]=k[c>>2];k[d+4>>2]=b;return}function Kt(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];i[a+4>>0]=i[b+4>>0]|0;return a|0}function Lt(a){a=a|0;i[a+4>>0]=1;return}function Mt(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];i[a+4>>0]=0;return}function Nt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;c=b;b=k[c+4>>2]|0;e=a;k[e>>2]=k[c>>2];k[e+4>>2]=b;q2a(d,211246,50);x=0;va(1477,d|0);x=0;b=Hc()|0;K2a(d);Sc(b|0)}function Ot(a){a=a|0;var b=0;b=Rd(16)|0;k[b>>2]=24164;x=0;xa(604,b+4|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else{k[b>>2]=24184;Gf(b|0,1760,237)}}function Pt(a,b){a=a|0;b=b|0;var c=0,d=0;c=b;b=k[c+4>>2]|0;d=a;k[d>>2]=k[c>>2];k[d+4>>2]=b;return}function Qt(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];i[a+4>>0]=i[b+4>>0]|0;return a|0}function Rt(a,b){a=a|0;b=b|0;k[a>>2]=24164;x=0;xa(604,a+4|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else return}function St(a){a=a|0;k[a>>2]=24164;K2a(a+4|0);OBa(a);return}function Tt(a){a=a|0;var b=0,c=0;b=a+4|0;if(!(i[b>>0]&1)){c=b+1|0;return c|0}else{c=k[a+12>>2]|0;return c|0}return 0}function Ut(a,b){a=a|0;b=b|0;k[a>>2]=24164;x=0;xa(604,a+4|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=24184;return}}function Vt(a,b){a=a|0;b=b|0;k[a>>2]=24164;x=0;xa(604,a+4|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=24204;return}}function Wt(a){a=a|0;var b=0;b=Rd(16)|0;k[b>>2]=24164;x=0;xa(604,b+4|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else{k[b>>2]=24204;Gf(b|0,1776,237)}}function Xt(a){a=a|0;k[a>>2]=24164;K2a(a+4|0);return}function Yt(a){a=a|0;k[a>>2]=0;return}function Zt(a){a=a|0;var b=0;b=k[a>>2]|0;if(!b)return;yYa(b);return}function _t(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+176|0;e=d+164|0;f=d+152|0;g=d+16|0;h=d;j=k[a>>2]|0;if(j){yYa(j);k[a>>2]=0}if(!b){q2a(f,211297,18);x=0;va(1482,f|0);x=0;j=Hc()|0;l=M;K2a(f);m=l;n=j;Sc(n|0)}switch(i[b>>0]|0){case 47:case 0:{j=c>>>0>2147483646?2147483646:c;c=xYa(j+1|0)|0;if(!c){q2a(e,211373,78);x=0;va(1477,e|0);x=0;l=Hc()|0;K2a(e);Sc(l|0)}else{Dyb(c|0,b|0,j|0)|0;i[c+j>>0]=0;k[a>>2]=c;r=d;return}break}default:{}}d=g+56|0;c=g+4|0;k[g>>2]=20356;k[d>>2]=20376;x=0;xa(582,g+56|0,c|0);a=x;x=0;if(a&1){a=Hc()|0;o=M;p=a;mab(d);Sc(p|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=20300;k[g+56>>2]=20320;x=0;va(1449,c|0);a=x;x=0;do if(a&1){j=Hc()|0;q=M;s=j}else{k[c>>2]=20392;j=g+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(583,c|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;l=M;K2a(e);K2a(j);obb(c);q=l;s=b;break}K2a(e);x=0;Fa(92,g|0,211316,56)|0;b=x;x=0;if(!(b&1)?(x=0,xa(584,h|0,c|0),b=x,x=0,!(b&1)):0){x=0;va(1482,h|0);x=0;b=Hc()|0;l=M;K2a(h);t=l;u=b}else{b=Hc()|0;t=M;u=b}k[g>>2]=20300;k[d>>2]=20320;k[c>>2]=20392;K2a(j);obb(c);mab(d);m=t;n=u;Sc(n|0)}while(0);o=q;p=s;mab(d);Sc(p|0)}function $t(a,b){a=a|0;b=b|0;k[a>>2]=0;k[a+4>>2]=b;return}function au(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=b;k[a+4>>2]=d&3|c<<2;return}function bu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;e=b+4|0;f=k[e>>2]|0;g=k[b>>2]|0;do if(f&3)if(g){h=f>>>2;j=xYa(h+1|0)|0;if(!j){q2a(d,211373,78);x=0;va(1477,d|0);x=0;l=Hc()|0;K2a(d);Sc(l|0)}else{Dyb(j|0,g|0,h|0)|0;i[j+h>>0]=0;m=j;break}}else m=0;else m=g;while(0);k[a>>2]=m;m=k[e>>2]&3;g=(k[b>>2]|0)!=0?(m|0)!=0&1:m;m=a+4|0;k[m>>2]=g|k[m>>2]&-4;k[m>>2]=g|k[e>>2]&-4;r=c;return}function cu(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[b>>2]=0;return}function du(a){a=a|0;var b=0;b=k[a>>2]|0;if(!b)return;if((k[a+4>>2]&3|0)!=1)return;yYa(b);return}function eu(a,b){a=a|0;b=b|0;var c=0;c=k[a>>2]|0;k[a>>2]=k[b>>2];k[b>>2]=c;c=a+4|0;a=b+4|0;b=k[c>>2]|0;k[c>>2]=k[a>>2];k[a>>2]=b;return}function fu(a,b){a=a|0;b=b|0;var c=0,d=0;c=k[a>>2]|0;k[a>>2]=k[b>>2];k[b>>2]=c;c=a+4|0;d=b+4|0;b=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=b;return a|0}function gu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=k[a>>2]|0;f=k[a+4>>2]|0;if(!e){g=f>>>0<(k[b+4>>2]|0)>>>0;r=c;return g|0}a=f>>>2;f=(k[b+4>>2]|0)>>>2;h=k[b>>2]|0;if(!h){q2a(d,211297,18);x=0;va(1482,d|0);x=0;b=Hc()|0;K2a(d);Sc(b|0)}b=ZLa(e,h,f>>>0>>0?f:a)|0;if((b|0)<0){g=1;r=c;return g|0}else{r=c;return a>>>0>>0&(b|0)<1|0}return 0}function hu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c;e=k[a>>2]|0;f=k[a+4>>2]|0;if(!e){g=(f|0)==(k[b+4>>2]|0);r=c;return g|0}a=f>>>2;if((a|0)!=((k[b+4>>2]|0)>>>2|0)){g=0;r=c;return g|0}f=k[b>>2]|0;if(!f){q2a(d,211297,18);x=0;va(1482,d|0);x=0;b=Hc()|0;K2a(d);Sc(b|0)}g=(ZLa(e,f,a)|0)==0;r=c;return g|0}function iu(a,b){a=a|0;b=b|0;var c=0;c=a+8|0;j[c>>1]=j[c>>1]&-512|b&255;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;switch(b|0){case 5:{i[a>>0]=0;return}case 2:case 1:{b=a;k[b>>2]=0;k[b+4>>2]=0;return}case 3:{p[a>>3]=0.0;return}case 4:{k[a>>2]=329672;return}case 7:case 6:{b=KBa(12)|0;c=b+4|0;k[c>>2]=0;k[b+8>>2]=0;k[b>>2]=c;k[a>>2]=b;return}default:return}}function ju(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=a+8|0;j[d>>1]=(c&1)<<8&65535|b&255|j[d>>1]&-512;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;return}function ku(a,b){a=a|0;b=b|0;var c=0;c=a+8|0;j[c>>1]=j[c>>1]&-512|1;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;c=a;k[c>>2]=b;k[c+4>>2]=((b|0)<0)<<31>>31;return}function lu(a,b){a=a|0;b=b|0;var c=0;c=a+8|0;j[c>>1]=j[c>>1]&-512|2;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;c=a;k[c>>2]=b;k[c+4>>2]=0;return}function mu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=a+8|0;j[d>>1]=j[d>>1]&-512|1;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;d=a;k[d>>2]=b;k[d+4>>2]=c;return}function nu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=a+8|0;j[d>>1]=j[d>>1]&-512|2;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;d=a;k[d>>2]=b;k[d+4>>2]=c;return}function ou(a,b){a=a|0;b=+b;var c=0;c=a+8|0;j[c>>1]=j[c>>1]&-512|3;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;p[a>>3]=b;return}function pu(a,b){a=a|0;b=b|0;var c=0;c=a+8|0;j[c>>1]=j[c>>1]&-512|260;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;c=kw(b,RLa(b)|0)|0;k[a>>2]=c;return}function qu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=a+8|0;j[d>>1]=j[d>>1]&-512|260;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;d=kw(b,c-b|0)|0;k[a>>2]=d;return}function ru(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;j[c>>1]=j[c>>1]&-512|260;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;c=i[b>>0]|0;d=(c&1)==0;e=kw(d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0;k[a>>2]=e;return}function su(a,b){a=a|0;b=b|0;var c=0;c=a+8|0;j[c>>1]=j[c>>1]&-512|4;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a>>2]=k[b>>2];return}function tu(a,b){a=a|0;b=b|0;var c=0;c=a+8|0;j[c>>1]=j[c>>1]&-512|5;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;i[a>>0]=b&1;return}function uu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+16|0;d=c+4|0;e=c;f=a+8|0;g=b+8|0;h=j[g>>1]&255;i=j[f>>1]&-512|h;j[f>>1]=i;l=a+12|0;k[l>>2]=0;k[a+16>>2]=k[b+16>>2];k[a+20>>2]=k[b+20>>2];a:do switch(h&65535|0){case 5:case 3:case 2:case 1:case 0:{m=b;n=k[m+4>>2]|0;o=a;k[o>>2]=k[m>>2];k[o+4>>2]=n;break}case 4:{n=k[b>>2]|0;o=n;if((n|0)!=0?(j[g>>1]&256)!=0:0){m=kw(n+4|0,k[n>>2]|0)|0;k[a>>2]=m;j[f>>1]=j[f>>1]|256;break a}k[a>>2]=o;j[f>>1]=i;break}case 7:case 6:{o=KBa(12)|0;m=k[b>>2]|0;n=o+4|0;k[n>>2]=0;k[o+8>>2]=0;k[o>>2]=n;p=k[m>>2]|0;q=m+4|0;b:do if((p|0)!=(q|0)){m=n;s=p;while(1){k[e>>2]=m;x=0;k[d>>2]=k[e>>2];Fa(112,o|0,d|0,s+16|0)|0;t=x;x=0;if(t&1)break;t=k[s+4>>2]|0;if(!t){u=s;while(1){v=k[u+8>>2]|0;if((k[v>>2]|0)==(u|0)){w=v;break}else u=v}}else{u=t;while(1){v=k[u>>2]|0;if(!v){w=u;break}else u=v}}if((w|0)==(q|0))break b;else s=w}s=Hc()|0;mw(o,k[n>>2]|0);OBa(o);Sc(s|0)}while(0);k[a>>2]=o;break}default:{}}while(0);a=b+12|0;if(!(k[a>>2]|0)){r=c;return}b=MBa(16)|0;k[b>>2]=3;w=b+4|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[l>>2]=w;b=k[a>>2]|0;d=k[b>>2]|0;if(!d)y=b;else{_t(w,d,RLa(d)|0);y=k[a>>2]|0}d=k[y+4>>2]|0;if(!d)z=y;else{y=(k[l>>2]|0)+4|0;_t(y,d,RLa(d)|0);z=k[a>>2]|0}a=k[z+8>>2]|0;if(!a){r=c;return}z=(k[l>>2]|0)+8|0;_t(z,a,RLa(a)|0);r=c;return}function vu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0;c=a+8|0;d=j[c>>1]&-512;j[c>>1]=d;e=a+12|0;k[e>>2]=0;f=a+16|0;k[f>>2]=0;g=a+20|0;k[g>>2]=0;h=b+8|0;j[c>>1]=j[h>>1]&255|d;j[h>>1]=j[h>>1]&-256;d=a;i=k[d>>2]|0;l=k[d+4>>2]|0;d=b;m=k[d+4>>2]|0;n=a;k[n>>2]=k[d>>2];k[n+4>>2]=m;m=b;k[m>>2]=i;k[m+4>>2]=l;l=j[c>>1]|0;j[c>>1]=j[h>>1]&256|l&-257;j[h>>1]=j[h>>1]&-257|l&256;l=b+12|0;h=k[e>>2]|0;k[e>>2]=k[l>>2];k[l>>2]=h;h=b+16|0;l=k[f>>2]|0;k[f>>2]=k[h>>2];k[h>>2]=l;l=b+20|0;b=k[g>>2]|0;k[g>>2]=k[l>>2];k[l>>2]=b;return}function wu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=a+8|0;d=j[c>>1]|0;e=b+8|0;j[c>>1]=j[e>>1]&255|d&-256;j[e>>1]=j[e>>1]&-256|d&255;d=a;f=k[d>>2]|0;g=k[d+4>>2]|0;d=b;h=k[d+4>>2]|0;i=a;k[i>>2]=k[d>>2];k[i+4>>2]=h;h=b;k[h>>2]=f;k[h+4>>2]=g;g=j[c>>1]|0;j[c>>1]=j[e>>1]&256|g&-257;j[e>>1]=j[e>>1]&-257|g&256;g=a+12|0;e=b+12|0;c=k[g>>2]|0;k[g>>2]=k[e>>2];k[e>>2]=c;c=a+16|0;e=b+16|0;g=k[c>>2]|0;k[c>>2]=k[e>>2];k[e>>2]=g;g=a+20|0;a=b+20|0;b=k[g>>2]|0;k[g>>2]=k[a>>2];k[a>>2]=b;return}function xu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=j[a+8>>1]|0;switch(b&255|0){case 6:case 7:{c=k[a>>2]|0;if(c){mw(c,k[c+4>>2]|0);OBa(c)}break}case 4:{if(b&256)yYa(k[a>>2]|0);break}default:{}}b=k[a+12>>2]|0;if(!b){d=a;e=d;k[e>>2]=0;f=d+4|0;g=f;k[g>>2]=0;return}c=b+-4|0;h=k[c>>2]|0;if(h){i=b+(h<<2)|0;do{i=i+-4|0;h=k[i>>2]|0;if(h)yYa(h)}while((i|0)!=(b|0))}QBa(c);d=a;e=d;k[e>>2]=0;f=d+4|0;g=f;k[g>>2]=0;return}function yu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=a+8|0;d=j[c>>1]|0;e=b+8|0;j[c>>1]=j[e>>1]&255|d&-256;j[e>>1]=j[e>>1]&-256|d&255;d=a;f=k[d>>2]|0;g=k[d+4>>2]|0;d=b;h=k[d+4>>2]|0;i=a;k[i>>2]=k[d>>2];k[i+4>>2]=h;h=b;k[h>>2]=f;k[h+4>>2]=g;g=j[c>>1]|0;j[c>>1]=j[e>>1]&256|g&-257;j[e>>1]=j[e>>1]&-257|g&256;g=a+12|0;e=b+12|0;c=k[g>>2]|0;k[g>>2]=k[e>>2];k[e>>2]=c;c=a+16|0;e=b+16|0;g=k[c>>2]|0;k[c>>2]=k[e>>2];k[e>>2]=g;g=a+20|0;e=b+20|0;b=k[g>>2]|0;k[g>>2]=k[e>>2];k[e>>2]=b;return a|0}function zu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=a+8|0;d=j[c>>1]|0;e=b+8|0;j[c>>1]=j[e>>1]&255|d&-256;j[e>>1]=j[e>>1]&-256|d&255;d=a;f=k[d>>2]|0;g=k[d+4>>2]|0;d=b;h=k[d+4>>2]|0;i=a;k[i>>2]=k[d>>2];k[i+4>>2]=h;h=b;k[h>>2]=f;k[h+4>>2]=g;g=j[c>>1]|0;j[c>>1]=j[e>>1]&256|g&-257;j[e>>1]=j[e>>1]&-257|g&256;return}function Au(a){a=a|0;return j[a+8>>1]&255|0}function Bu(a,b){a=a|0;b=b|0;var c=0;if(Cu(a,b)|0){c=-1;return c|0}c=(Cu(b,a)|0)&1;return c|0}function Cu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;c=r;r=r+32|0;d=c+12|0;e=c;f=j[a+8>>1]|0;g=f&255;h=j[b+8>>1]|0;i=h&255;if(g<<16>>16!=i<<16>>16){m=(g&65535)<(i&65535);r=c;return m|0}switch(g&65535|0){case 6:case 7:{g=k[a>>2]|0;i=k[g+8>>2]|0;n=k[b>>2]|0;o=k[n+8>>2]|0;if((i|0)!=(o|0)){m=(i-o|0)<0;r=c;return m|0}o=k[n>>2]|0;i=n+4|0;n=o;if((n|0)==(i|0)){m=0;r=c;return m|0}q=g+4|0;s=o;o=k[g>>2]|0;g=n;a:while(1){n=o;if((n|0)==(q|0)){m=1;t=64;break}u=g+16|0;v=n+16|0;w=k[v>>2]|0;y=n+20|0;z=k[y>>2]|0;if(w){A=z>>>2;B=g+20|0;C=(k[B>>2]|0)>>>2;D=k[u>>2]|0;if(!D){t=28;break}E=ZLa(w,D,C>>>0>>0?C:A)|0;if((E|0)<0){t=30;break}if(A>>>0>>0&(E|0)<1){m=1;t=64;break}else{F=u;G=B}}else{B=g+20|0;if(z>>>0<(k[B>>2]|0)>>>0){m=1;t=64;break}F=u;G=B}B=k[F>>2]|0;u=k[G>>2]|0;do if(!B){if(u>>>0>=(k[y>>2]|0)>>>0)t=41}else{z=u>>>2;E=(k[y>>2]|0)>>>2;C=k[v>>2]|0;if(!C){t=36;break a}A=ZLa(B,C,E>>>0>>0?E:z)|0;if((A|0)>=0?!(z>>>0>>0&(A|0)<1):0){t=41;break}else break}while(0);if((t|0)==41?(t=0,Cu(n+24|0,g+24|0)|0):0){m=1;t=64;break}B=k[F>>2]|0;u=k[G>>2]|0;if(!B){if(u>>>0<(k[y>>2]|0)>>>0){m=0;t=64;break}}else{A=u>>>2;u=(k[y>>2]|0)>>>2;E=k[v>>2]|0;if(!E){t=44;break}z=ZLa(B,E,u>>>0>>0?u:A)|0;if((z|0)<0){t=46;break}if(A>>>0>>0&(z|0)<1){m=0;t=64;break}}z=k[v>>2]|0;u=k[y>>2]|0;do if(!z){if(u>>>0>=(k[G>>2]|0)>>>0)t=56}else{A=u>>>2;E=(k[G>>2]|0)>>>2;B=k[F>>2]|0;if(!B){t=51;break a}C=ZLa(z,B,E>>>0>>0?E:A)|0;if((C|0)>=0?!(A>>>0>>0&(C|0)<1):0){t=56;break}else break}while(0);if((t|0)==56?(t=0,Cu(g+24|0,n+24|0)|0):0){m=0;t=64;break}z=o;u=k[z+4>>2]|0;if(!u){y=z;while(1){z=k[y+8>>2]|0;if((k[z>>2]|0)==(y|0)){H=z;break}else y=z}}else{y=u;while(1){n=k[y>>2]|0;if(!n){H=y;break}else y=n}}o=H;y=s;u=k[y+4>>2]|0;if(!u){n=y;while(1){y=k[n+8>>2]|0;if((k[y>>2]|0)==(n|0)){I=y;break}else n=y}}else{n=u;while(1){y=k[n>>2]|0;if(!y){I=n;break}else n=y}}if((I|0)==(i|0)){m=0;t=64;break}else{s=I;g=I}}if((t|0)==28){q2a(d,211297,18);x=0;va(1482,d|0);x=0;I=Hc()|0;K2a(d);Sc(I|0)}else if((t|0)==30){m=1;r=c;return m|0}else if((t|0)==36){q2a(d,211297,18);x=0;va(1482,d|0);x=0;I=Hc()|0;K2a(d);Sc(I|0)}else if((t|0)==44){q2a(d,211297,18);x=0;va(1482,d|0);x=0;I=Hc()|0;K2a(d);Sc(I|0)}else if((t|0)==46){m=0;r=c;return m|0}else if((t|0)==51){q2a(d,211297,18);x=0;va(1482,d|0);x=0;I=Hc()|0;K2a(d);Sc(I|0)}else if((t|0)==64){r=c;return m|0}break}case 1:{t=a;I=k[t+4>>2]|0;d=b;g=k[d+4>>2]|0;m=(I|0)<(g|0)|((I|0)==(g|0)?(k[t>>2]|0)>>>0<(k[d>>2]|0)>>>0:0);r=c;return m|0}case 2:{d=a;t=k[d+4>>2]|0;g=b;I=k[g+4>>2]|0;m=t>>>0>>0|((t|0)==(I|0)?(k[d>>2]|0)>>>0<(k[g>>2]|0)>>>0:0);r=c;return m|0}case 3:{m=+p[a>>3]<+p[b>>3];r=c;return m|0}case 5:{m=(l[a>>0]|0)<(l[b>>0]|0);r=c;return m|0}case 4:{g=k[a>>2]|0;a=k[b>>2]|0;if(!g){m=(a|0)!=0;r=c;return m|0}if(!a){m=0;r=c;return m|0}if(!(f&256)){J=RLa(g)|0;K=g}else{J=k[g>>2]|0;K=g+4|0}if(!(h&256)){L=RLa(a)|0;M=a}else{L=k[a>>2]|0;M=a+4|0}if(!((K|0)!=0&(M|0)!=0)){q2a(e,211297,18);x=0;va(1482,e|0);x=0;a=Hc()|0;K2a(e);Sc(a|0)}a=ZLa(K,M,L>>>0>>0?L:J)|0;if((a|0)<0){m=1;r=c;return m|0}else{r=c;return J>>>0>>0&(a|0)<1|0}break}default:{m=0;r=c;return m|0}}return 0}function Du(a,b){a=a|0;b=b|0;return Cu(b,a)|0}function Eu(a,b){a=a|0;b=b|0;return (Cu(b,a)|0)^1|0}function Fu(a,b){a=a|0;b=b|0;return (Cu(a,b)|0)^1|0}function Gu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+32|0;d=c+12|0;e=c;f=j[b+8>>1]|0;g=f&255;h=j[a+8>>1]|0;if((h&255)!=g<<16>>16){l=0;r=c;return l|0}switch(g&65535|0){case 1:{g=a;m=b;l=(k[g>>2]|0)==(k[m>>2]|0)?(k[g+4>>2]|0)==(k[m+4>>2]|0):0;r=c;return l|0}case 2:{m=a;g=b;l=(k[m>>2]|0)==(k[g>>2]|0)?(k[m+4>>2]|0)==(k[g+4>>2]|0):0;r=c;return l|0}case 3:{l=+p[a>>3]==+p[b>>3];r=c;return l|0}case 5:{l=(i[a>>0]|0)==(i[b>>0]|0);r=c;return l|0}case 4:{g=k[a>>2]|0;m=k[b>>2]|0;if(g)if(!m)n=0;else{if(!(h&256)){o=RLa(g)|0;q=g}else{o=k[g>>2]|0;q=g+4|0}if(!(f&256)){s=RLa(m)|0;t=m}else{s=k[m>>2]|0;t=m+4|0}if((o|0)!=(s|0)){l=0;r=c;return l|0}if(!((q|0)!=0&(t|0)!=0)){q2a(e,211297,18);x=0;va(1482,e|0);x=0;s=Hc()|0;K2a(e);Sc(s|0)}l=(ZLa(q,t,o)|0)==0;r=c;return l|0}else n=m;l=(g|0)==(n|0);r=c;return l|0}case 7:case 6:{n=k[a>>2]|0;a=k[b>>2]|0;if((k[n+8>>2]|0)!=(k[a+8>>2]|0)){l=0;r=c;return l|0}b=k[n>>2]|0;g=n+4|0;n=b;if((n|0)==(g|0)){l=1;r=c;return l|0}m=b;b=k[a>>2]|0;a=n;while(1){n=b;o=k[a+16>>2]|0;t=k[a+20>>2]|0;if(!o){if((t|0)!=(k[n+20>>2]|0)){l=0;u=39;break}}else{q=t>>>2;if((q|0)!=((k[n+20>>2]|0)>>>2|0)){u=26;break}t=k[n+16>>2]|0;if(!t){u=28;break}if(ZLa(o,t,q)|0){l=0;u=39;break}}if(!(Gu(a+24|0,n+24|0)|0)){l=0;u=39;break}n=m;q=k[n+4>>2]|0;if(!q){t=n;while(1){n=k[t+8>>2]|0;if((k[n>>2]|0)==(t|0)){v=n;break}else t=n}}else{t=q;while(1){n=k[t>>2]|0;if(!n){v=t;break}else t=n}}m=v;t=b;q=k[t+4>>2]|0;if(!q){n=t;while(1){t=k[n+8>>2]|0;if((k[t>>2]|0)==(n|0)){w=t;break}else n=t}}else{n=q;while(1){t=k[n>>2]|0;if(!t){w=n;break}else n=t}}if((v|0)==(g|0)){l=1;u=39;break}else{b=w;a=v}}if((u|0)==26){l=0;r=c;return l|0}else if((u|0)==28){q2a(d,211297,18);x=0;va(1482,d|0);x=0;v=Hc()|0;K2a(d);Sc(v|0)}else if((u|0)==39){r=c;return l|0}break}case 0:{l=1;r=c;return l|0}default:{l=0;r=c;return l|0}}return 0}function Hu(a,b){a=a|0;b=b|0;return (Gu(a,b)|0)^1|0}function Iu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=j[a+8>>1]|0;if((f&255)==4){g=k[a>>2]|0;if(!g){r=b;return 0}else{r=b;return ((f&256)==0?g:g+4|0)|0}}g=d+56|0;f=d+4|0;k[d>>2]=20356;k[g>>2]=20376;x=0;xa(582,d+56|0,f|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;i=b;mab(g);Sc(i|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,f|0);b=x;x=0;do if(b&1){a=Hc()|0;l=M;m=a}else{k[f>>2]=20392;a=d+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,f|0,c|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(c);K2a(a);obb(f);l=o;m=n;break}K2a(c);x=0;Fa(92,d|0,211452,49)|0;n=x;x=0;if(!(n&1)?(x=0,xa(584,e|0,f|0),n=x,x=0,!(n&1)):0){x=0;va(1482,e|0);x=0;n=Hc()|0;o=M;K2a(e);p=o;q=n;k[d>>2]=20300;k[g>>2]=20320;k[f>>2]=20392;K2a(a);obb(f);mab(g);Sc(q|0)}n=Hc()|0;p=M;q=n;k[d>>2]=20300;k[g>>2]=20320;k[f>>2]=20392;K2a(a);obb(f);mab(g);Sc(q|0)}while(0);h=l;i=m;mab(g);Sc(i|0);return 0}function Ju(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=j[a+8>>1]|0;if((d&255)!=4){e=0;return e|0}f=k[a>>2]|0;if(!f){e=0;return e|0}if(!(d&256)){g=RLa(f)|0;h=f}else{g=k[f>>2]|0;h=f+4|0}k[b>>2]=h;k[c>>2]=h+g;e=1;return e|0}function Ku(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0;c=r;r=r+176|0;d=c+152|0;e=c+16|0;f=c;g=j[b+8>>1]|0;switch(g&255|0){case 0:{q2a(a,329672,0);r=c;return}case 4:{h=k[b>>2]|0;if(!h){q2a(a,329672,0);r=c;return}if(!(g&256)){l=RLa(h)|0;m=h}else{l=k[h>>2]|0;m=h+4|0}q2a(a,m,l);r=c;return}case 5:{l=(i[b>>0]|0)!=0;q2a(a,l?330262:330267,l?4:5);r=c;return}case 1:{l=b;Bw(a,k[l>>2]|0,k[l+4>>2]|0);r=c;return}case 2:{l=b;Cw(a,k[l>>2]|0,k[l+4>>2]|0);r=c;return}case 3:{Fw(a,+p[b>>3]);r=c;return}default:{c=e+56|0;b=e+4|0;k[e>>2]=20356;k[c>>2]=20376;x=0;xa(582,e+56|0,b|0);a=x;x=0;if(a&1){a=Hc()|0;n=M;o=a;mab(c);Sc(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,b|0);a=x;x=0;do if(a&1){l=Hc()|0;q=M;s=l}else{k[b>>2]=20392;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,b|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;h=M;K2a(d);K2a(l);obb(b);q=h;s=m;break}K2a(d);x=0;Fa(92,e|0,211502,33)|0;m=x;x=0;if(!(m&1)?(x=0,xa(584,f|0,b|0),m=x,x=0,!(m&1)):0){x=0;va(1482,f|0);x=0;m=Hc()|0;h=M;K2a(f);t=h;u=m;k[e>>2]=20300;k[c>>2]=20320;k[b>>2]=20392;K2a(l);obb(b);mab(c);Sc(u|0)}m=Hc()|0;t=M;u=m;k[e>>2]=20300;k[c>>2]=20320;k[b>>2]=20392;K2a(l);obb(b);mab(c);Sc(u|0)}while(0);n=q;o=s;mab(c);Sc(o|0)}}}function Lu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0.0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+624|0;c=b+600|0;d=b+440|0;e=b+588|0;f=b+304|0;g=b+576|0;h=b+152|0;i=b+288|0;m=b+16|0;n=b;switch(j[a+8>>1]&255|0){case 1:{o=a;q=k[o>>2]|0;s=Hyb(q|0,k[o+4>>2]|0,-2147483648,0)|0;o=M;if(o>>>0<1|(o|0)==1&s>>>0<0){t=q;r=b;return t|0}q=d+56|0;s=d+4|0;k[d>>2]=20356;k[q>>2]=20376;x=0;xa(582,d+56|0,s|0);o=x;x=0;if(o&1){o=Hc()|0;u=M;v=o;mab(q);Sc(v|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,s|0);o=x;x=0;do if(o&1){w=Hc()|0;y=M;z=w}else{k[s>>2]=20392;w=d+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,s|0,c|0);A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(c);K2a(w);obb(s);y=B;z=A;break}K2a(c);x=0;Fa(92,d|0,211536,27)|0;A=x;x=0;if(!(A&1)?(x=0,xa(584,e|0,s|0),A=x,x=0,!(A&1)):0){x=0;va(1482,e|0);x=0;A=Hc()|0;B=M;K2a(e);C=B;D=A}else{A=Hc()|0;C=M;D=A}k[d>>2]=20300;k[q>>2]=20320;k[s>>2]=20392;K2a(w);obb(s);mab(q);E=C;F=D;Sc(F|0)}while(0);u=y;v=z;mab(q);Sc(v|0);break}case 2:{v=a;q=k[v>>2]|0;z=k[v+4>>2]|0;if(z>>>0<0|(z|0)==0&q>>>0<2147483648){t=q;r=b;return t|0}q=f+56|0;z=f+4|0;k[f>>2]=20356;k[q>>2]=20376;x=0;xa(582,f+56|0,z|0);v=x;x=0;if(v&1){v=Hc()|0;G=M;H=v;mab(q);Sc(H|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=20300;k[f+56>>2]=20320;x=0;va(1449,z|0);v=x;x=0;do if(v&1){y=Hc()|0;I=M;J=y}else{k[z>>2]=20392;y=f+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,z|0,c|0);u=x;x=0;if(u&1){u=Hc()|0;D=M;K2a(c);K2a(y);obb(z);I=D;J=u;break}K2a(c);x=0;Fa(92,f|0,211564,28)|0;u=x;x=0;if(!(u&1)?(x=0,xa(584,g|0,z|0),u=x,x=0,!(u&1)):0){x=0;va(1482,g|0);x=0;u=Hc()|0;D=M;K2a(g);K=D;L=u}else{u=Hc()|0;K=M;L=u}k[f>>2]=20300;k[q>>2]=20320;k[z>>2]=20392;K2a(y);obb(z);mab(q);E=K;F=L;Sc(F|0)}while(0);G=I;H=J;mab(q);Sc(H|0);break}case 3:{N=+p[a>>3];if(N<=2147483647.0&N>=-2147483648.0){t=~~N;r=b;return t|0}H=h+56|0;q=h+4|0;k[h>>2]=20356;k[H>>2]=20376;x=0;xa(582,h+56|0,q|0);J=x;x=0;if(J&1){J=Hc()|0;O=M;P=J;mab(H);Sc(P|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=20300;k[h+56>>2]=20320;x=0;va(1449,q|0);J=x;x=0;do if(J&1){I=Hc()|0;Q=M;R=I}else{k[q>>2]=20392;I=h+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,q|0,c|0);G=x;x=0;if(G&1){G=Hc()|0;L=M;K2a(c);K2a(I);obb(q);Q=L;R=G;break}K2a(c);x=0;Fa(92,h|0,211593,23)|0;G=x;x=0;if(!(G&1)?(x=0,xa(584,i|0,q|0),G=x,x=0,!(G&1)):0){x=0;va(1482,i|0);x=0;G=Hc()|0;L=M;K2a(i);S=L;T=G}else{G=Hc()|0;S=M;T=G}k[h>>2]=20300;k[H>>2]=20320;k[q>>2]=20392;K2a(I);obb(q);mab(H);E=S;F=T;Sc(F|0)}while(0);O=Q;P=R;mab(H);Sc(P|0);break}case 5:{t=l[a>>0]|0;r=b;return t|0}case 0:{t=0;r=b;return t|0}default:{t=m+56|0;b=m+4|0;k[m>>2]=20356;k[t>>2]=20376;x=0;xa(582,m+56|0,b|0);a=x;x=0;if(a&1){a=Hc()|0;U=M;V=a;mab(t);Sc(V|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=20300;k[m+56>>2]=20320;x=0;va(1449,b|0);a=x;x=0;do if(a&1){P=Hc()|0;W=M;X=P}else{k[b>>2]=20392;P=m+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,b|0,c|0);H=x;x=0;if(H&1){H=Hc()|0;R=M;K2a(c);K2a(P);obb(b);W=R;X=H;break}K2a(c);x=0;Fa(92,m|0,211617,32)|0;H=x;x=0;if(!(H&1)?(x=0,xa(584,n|0,b|0),H=x,x=0,!(H&1)):0){x=0;va(1482,n|0);x=0;H=Hc()|0;R=M;K2a(n);Y=R;Z=H}else{H=Hc()|0;Y=M;Z=H}k[m>>2]=20300;k[t>>2]=20320;k[b>>2]=20392;K2a(P);obb(b);mab(t);E=Y;F=Z;Sc(F|0)}while(0);U=W;V=X;mab(t);Sc(V|0)}}return 0}function Mu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0.0;b=r;r=r+16|0;switch(j[a+8>>1]&255|0){case 1:{c=a;d=Hyb(k[c>>2]|0,k[c+4>>2]|0,-2147483648,0)|0;c=M;e=c>>>0<1|(c|0)==1&d>>>0<0;r=b;return e|0}case 2:{d=a;c=k[d+4>>2]|0;e=c>>>0<0|(c|0)==0&(k[d>>2]|0)>>>0<2147483648;r=b;return e|0}case 3:{f=+p[a>>3];if(!(f>=-2147483648.0)|!(f<=2147483647.0)){e=0;r=b;return e|0}e=+FHa(f,b)==0.0;r=b;return e|0}default:{e=0;r=b;return e|0}}return 0}function Nu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0.0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+624|0;c=b+600|0;d=b+440|0;e=b+588|0;f=b+304|0;g=b+576|0;h=b+152|0;i=b+288|0;m=b+16|0;n=b;switch(j[a+8>>1]&255|0){case 1:{o=a;q=k[o>>2]|0;s=k[o+4>>2]|0;if(s>>>0<1|(s|0)==1&q>>>0<0){t=q;r=b;return t|0}q=d+56|0;s=d+4|0;k[d>>2]=20356;k[q>>2]=20376;x=0;xa(582,d+56|0,s|0);o=x;x=0;if(o&1){o=Hc()|0;u=M;v=o;mab(q);Sc(v|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,s|0);o=x;x=0;do if(o&1){w=Hc()|0;y=M;z=w}else{k[s>>2]=20392;w=d+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,s|0,c|0);A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(c);K2a(w);obb(s);y=B;z=A;break}K2a(c);x=0;Fa(92,d|0,211650,28)|0;A=x;x=0;if(!(A&1)?(x=0,xa(584,e|0,s|0),A=x,x=0,!(A&1)):0){x=0;va(1482,e|0);x=0;A=Hc()|0;B=M;K2a(e);C=B;D=A}else{A=Hc()|0;C=M;D=A}k[d>>2]=20300;k[q>>2]=20320;k[s>>2]=20392;K2a(w);obb(s);mab(q);E=C;F=D;Sc(F|0)}while(0);u=y;v=z;mab(q);Sc(v|0);break}case 2:{v=a;q=k[v>>2]|0;z=k[v+4>>2]|0;if(z>>>0<1|(z|0)==1&q>>>0<0){t=q;r=b;return t|0}q=f+56|0;z=f+4|0;k[f>>2]=20356;k[q>>2]=20376;x=0;xa(582,f+56|0,z|0);v=x;x=0;if(v&1){v=Hc()|0;G=M;H=v;mab(q);Sc(H|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=20300;k[f+56>>2]=20320;x=0;va(1449,z|0);v=x;x=0;do if(v&1){y=Hc()|0;I=M;J=y}else{k[z>>2]=20392;y=f+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,z|0,c|0);u=x;x=0;if(u&1){u=Hc()|0;D=M;K2a(c);K2a(y);obb(z);I=D;J=u;break}K2a(c);x=0;Fa(92,f|0,211679,29)|0;u=x;x=0;if(!(u&1)?(x=0,xa(584,g|0,z|0),u=x,x=0,!(u&1)):0){x=0;va(1482,g|0);x=0;u=Hc()|0;D=M;K2a(g);K=D;L=u}else{u=Hc()|0;K=M;L=u}k[f>>2]=20300;k[q>>2]=20320;k[z>>2]=20392;K2a(y);obb(z);mab(q);E=K;F=L;Sc(F|0)}while(0);G=I;H=J;mab(q);Sc(H|0);break}case 3:{N=+p[a>>3];if(N<=4294967295.0&N>=0.0){t=~~N>>>0;r=b;return t|0}H=h+56|0;q=h+4|0;k[h>>2]=20356;k[H>>2]=20376;x=0;xa(582,h+56|0,q|0);J=x;x=0;if(J&1){J=Hc()|0;O=M;P=J;mab(H);Sc(P|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=20300;k[h+56>>2]=20320;x=0;va(1449,q|0);J=x;x=0;do if(J&1){I=Hc()|0;Q=M;R=I}else{k[q>>2]=20392;I=h+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,q|0,c|0);G=x;x=0;if(G&1){G=Hc()|0;L=M;K2a(c);K2a(I);obb(q);Q=L;R=G;break}K2a(c);x=0;Fa(92,h|0,211709,24)|0;G=x;x=0;if(!(G&1)?(x=0,xa(584,i|0,q|0),G=x,x=0,!(G&1)):0){x=0;va(1482,i|0);x=0;G=Hc()|0;L=M;K2a(i);S=L;T=G}else{G=Hc()|0;S=M;T=G}k[h>>2]=20300;k[H>>2]=20320;k[q>>2]=20392;K2a(I);obb(q);mab(H);E=S;F=T;Sc(F|0)}while(0);O=Q;P=R;mab(H);Sc(P|0);break}case 5:{t=l[a>>0]|0;r=b;return t|0}case 0:{t=0;r=b;return t|0}default:{t=m+56|0;b=m+4|0;k[m>>2]=20356;k[t>>2]=20376;x=0;xa(582,m+56|0,b|0);a=x;x=0;if(a&1){a=Hc()|0;U=M;V=a;mab(t);Sc(V|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=20300;k[m+56>>2]=20320;x=0;va(1449,b|0);a=x;x=0;do if(a&1){P=Hc()|0;W=M;X=P}else{k[b>>2]=20392;P=m+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,b|0,c|0);H=x;x=0;if(H&1){H=Hc()|0;R=M;K2a(c);K2a(P);obb(b);W=R;X=H;break}K2a(c);x=0;Fa(92,m|0,211734,33)|0;H=x;x=0;if(!(H&1)?(x=0,xa(584,n|0,b|0),H=x,x=0,!(H&1)):0){x=0;va(1482,n|0);x=0;H=Hc()|0;R=M;K2a(n);Y=R;Z=H}else{H=Hc()|0;Y=M;Z=H}k[m>>2]=20300;k[t>>2]=20320;k[b>>2]=20392;K2a(P);obb(b);mab(t);E=Y;F=Z;Sc(F|0)}while(0);U=W;V=X;mab(t);Sc(V|0)}}return 0}function Ou(a){a=a|0;var b=0,c=0,d=0,e=0,f=0.0;b=r;r=r+16|0;switch(j[a+8>>1]&255|0){case 1:{c=a;d=k[c+4>>2]|0;e=d>>>0<1|(d|0)==1&(k[c>>2]|0)>>>0<0;r=b;return e|0}case 2:{c=a;d=k[c+4>>2]|0;e=d>>>0<1|(d|0)==1&(k[c>>2]|0)>>>0<0;r=b;return e|0}case 3:{f=+p[a>>3];if(!(f>=0.0)|!(f<=4294967295.0)){e=0;r=b;return e|0}e=+FHa(f,b)==0.0;r=b;return e|0}default:{e=0;r=b;return e|0}}return 0}function Pu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;switch(j[a+8>>1]&255|0){case 1:{m=a;n=k[m+4>>2]|0;o=k[m>>2]|0;M=n;r=b;return o|0}case 2:{m=a;q=k[m>>2]|0;s=k[m+4>>2]|0;if((s|0)>-1|(s|0)==-1&q>>>0>4294967295){n=s;o=q;M=n;r=b;return o|0}q=d+56|0;s=d+4|0;k[d>>2]=20356;k[q>>2]=20376;x=0;xa(582,d+56|0,s|0);m=x;x=0;if(m&1){m=Hc()|0;t=M;u=m;mab(q);Sc(u|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,s|0);m=x;x=0;do if(m&1){v=Hc()|0;w=M;y=v}else{k[s>>2]=20392;v=d+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,s|0,c|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;K2a(c);K2a(v);obb(s);w=A;y=z;break}K2a(c);x=0;Fa(92,d|0,211768,30)|0;z=x;x=0;if(!(z&1)?(x=0,xa(584,e|0,s|0),z=x,x=0,!(z&1)):0){x=0;va(1482,e|0);x=0;z=Hc()|0;A=M;K2a(e);B=A;C=z}else{z=Hc()|0;B=M;C=z}k[d>>2]=20300;k[q>>2]=20320;k[s>>2]=20392;K2a(v);obb(s);mab(q);D=B;E=C;Sc(E|0)}while(0);t=w;u=y;mab(q);Sc(u|0);break}case 3:{F=+p[a>>3];if(F<=9223372036854775808.0&F>=-9223372036854775808.0){n=+X(F)>=1.0?(F>0.0?~~+ja(+W(F/4294967296.0),4294967295.0)>>>0:~~+ha((F-+(~~F>>>0))/4294967296.0)>>>0):0;o=~~F>>>0;M=n;r=b;return o|0}u=f+56|0;q=f+4|0;k[f>>2]=20356;k[u>>2]=20376;x=0;xa(582,f+56|0,q|0);y=x;x=0;if(y&1){y=Hc()|0;G=M;H=y;mab(u);Sc(H|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=20300;k[f+56>>2]=20320;x=0;va(1449,q|0);y=x;x=0;do if(y&1){w=Hc()|0;I=M;J=w}else{k[q>>2]=20392;w=f+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,q|0,c|0);t=x;x=0;if(t&1){t=Hc()|0;C=M;K2a(c);K2a(w);obb(q);I=C;J=t;break}K2a(c);x=0;Fa(92,f|0,211799,25)|0;t=x;x=0;if(!(t&1)?(x=0,xa(584,g|0,q|0),t=x,x=0,!(t&1)):0){x=0;va(1482,g|0);x=0;t=Hc()|0;C=M;K2a(g);K=C;L=t}else{t=Hc()|0;K=M;L=t}k[f>>2]=20300;k[u>>2]=20320;k[q>>2]=20392;K2a(w);obb(q);mab(u);D=K;E=L;Sc(E|0)}while(0);G=I;H=J;mab(u);Sc(H|0);break}case 5:{n=0;o=l[a>>0]|0;M=n;r=b;return o|0}case 0:{n=0;o=0;M=n;r=b;return o|0}default:{o=h+56|0;b=h+4|0;k[h>>2]=20356;k[o>>2]=20376;x=0;xa(582,h+56|0,b|0);n=x;x=0;if(n&1){n=Hc()|0;N=M;O=n;mab(o);Sc(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=20300;k[h+56>>2]=20320;x=0;va(1449,b|0);n=x;x=0;do if(n&1){a=Hc()|0;P=M;Q=a}else{k[b>>2]=20392;a=h+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,b|0,c|0);H=x;x=0;if(H&1){H=Hc()|0;u=M;K2a(c);K2a(a);obb(b);P=u;Q=H;break}K2a(c);x=0;Fa(92,h|0,211825,34)|0;H=x;x=0;if(!(H&1)?(x=0,xa(584,i|0,b|0),H=x,x=0,!(H&1)):0){x=0;va(1482,i|0);x=0;H=Hc()|0;u=M;K2a(i);R=u;S=H}else{H=Hc()|0;R=M;S=H}k[h>>2]=20300;k[o>>2]=20320;k[b>>2]=20392;K2a(a);obb(b);mab(o);D=R;E=S;Sc(E|0)}while(0);N=P;O=Q;mab(o);Sc(O|0)}}return 0}function Qu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0.0;b=r;r=r+16|0;switch(j[a+8>>1]&255|0){case 1:{c=1;break}case 2:{d=a;e=k[d+4>>2]|0;c=(e|0)>-1|(e|0)==-1&(k[d>>2]|0)>>>0>4294967295;break}case 3:{f=+p[a>>3];if(f>=-9223372036854775808.0&f<9223372036854775808.0)c=+FHa(f,b)==0.0;else c=0;break}default:c=0}r=b;return c|0}function Ru(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;switch(j[a+8>>1]&255|0){case 1:{m=a;n=k[m>>2]|0;o=k[m+4>>2]|0;if((o|0)>-1|(o|0)==-1&n>>>0>4294967295){q=o;s=n;M=q;r=b;return s|0}n=d+56|0;o=d+4|0;k[d>>2]=20356;k[n>>2]=20376;x=0;xa(582,d+56|0,o|0);m=x;x=0;if(m&1){m=Hc()|0;t=M;u=m;mab(n);Sc(u|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,o|0);m=x;x=0;do if(m&1){v=Hc()|0;w=M;y=v}else{k[o>>2]=20392;v=d+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,o|0,c|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;K2a(c);K2a(v);obb(o);w=A;y=z;break}K2a(c);x=0;Fa(92,d|0,211860,30)|0;z=x;x=0;if(!(z&1)?(x=0,xa(584,e|0,o|0),z=x,x=0,!(z&1)):0){x=0;va(1482,e|0);x=0;z=Hc()|0;A=M;K2a(e);B=A;C=z}else{z=Hc()|0;B=M;C=z}k[d>>2]=20300;k[n>>2]=20320;k[o>>2]=20392;K2a(v);obb(o);mab(n);D=B;E=C;Sc(E|0)}while(0);t=w;u=y;mab(n);Sc(u|0);break}case 2:{u=a;q=k[u+4>>2]|0;s=k[u>>2]|0;M=q;r=b;return s|0}case 3:{F=+p[a>>3];if(F<=18446744073709551616.0&F>=0.0){q=+X(F)>=1.0?(F>0.0?~~+ja(+W(F/4294967296.0),4294967295.0)>>>0:~~+ha((F-+(~~F>>>0))/4294967296.0)>>>0):0;s=~~F>>>0;M=q;r=b;return s|0}u=f+56|0;n=f+4|0;k[f>>2]=20356;k[u>>2]=20376;x=0;xa(582,f+56|0,n|0);y=x;x=0;if(y&1){y=Hc()|0;G=M;H=y;mab(u);Sc(H|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=20300;k[f+56>>2]=20320;x=0;va(1449,n|0);y=x;x=0;do if(y&1){w=Hc()|0;I=M;J=w}else{k[n>>2]=20392;w=f+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,n|0,c|0);t=x;x=0;if(t&1){t=Hc()|0;C=M;K2a(c);K2a(w);obb(n);I=C;J=t;break}K2a(c);x=0;Fa(92,f|0,211891,26)|0;t=x;x=0;if(!(t&1)?(x=0,xa(584,g|0,n|0),t=x,x=0,!(t&1)):0){x=0;va(1482,g|0);x=0;t=Hc()|0;C=M;K2a(g);K=C;L=t}else{t=Hc()|0;K=M;L=t}k[f>>2]=20300;k[u>>2]=20320;k[n>>2]=20392;K2a(w);obb(n);mab(u);D=K;E=L;Sc(E|0)}while(0);G=I;H=J;mab(u);Sc(H|0);break}case 5:{q=0;s=l[a>>0]|0;M=q;r=b;return s|0}case 0:{q=0;s=0;M=q;r=b;return s|0}default:{s=h+56|0;b=h+4|0;k[h>>2]=20356;k[s>>2]=20376;x=0;xa(582,h+56|0,b|0);q=x;x=0;if(q&1){q=Hc()|0;N=M;O=q;mab(s);Sc(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=20300;k[h+56>>2]=20320;x=0;va(1449,b|0);q=x;x=0;do if(q&1){a=Hc()|0;P=M;Q=a}else{k[b>>2]=20392;a=h+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,b|0,c|0);H=x;x=0;if(H&1){H=Hc()|0;u=M;K2a(c);K2a(a);obb(b);P=u;Q=H;break}K2a(c);x=0;Fa(92,h|0,211918,35)|0;H=x;x=0;if(!(H&1)?(x=0,xa(584,i|0,b|0),H=x,x=0,!(H&1)):0){x=0;va(1482,i|0);x=0;H=Hc()|0;u=M;K2a(i);R=u;S=H}else{H=Hc()|0;R=M;S=H}k[h>>2]=20300;k[s>>2]=20320;k[b>>2]=20392;K2a(a);obb(b);mab(s);D=R;E=S;Sc(E|0)}while(0);N=P;O=Q;mab(s);Sc(O|0)}}return 0}function Su(a){a=a|0;var b=0,c=0,d=0,e=0,f=0.0;b=r;r=r+16|0;switch(j[a+8>>1]&255|0){case 1:{c=a;d=k[c+4>>2]|0;e=(d|0)>-1|(d|0)==-1&(k[c>>2]|0)>>>0>4294967295;break}case 2:{e=1;break}case 3:{f=+p[a>>3];if(f>=0.0&f<18446744073709551616.0)e=+FHa(f,b)==0.0;else e=0;break}default:e=0}r=b;return e|0}function Tu(a){a=a|0;var b=0;b=Pu(a)|0;return b|0}function Uu(a){a=a|0;var b=0;b=Ru(a)|0;return b|0}function Vu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0.0,h=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;switch(j[a+8>>1]&255|0){case 1:{f=a;g=+((k[f>>2]|0)>>>0)+4294967296.0*+(k[f+4>>2]|0);r=b;return +g}case 2:{f=a;g=+((k[f>>2]|0)>>>0)+4294967296.0*+((k[f+4>>2]|0)>>>0);r=b;return +g}case 3:{g=+p[a>>3];r=b;return +g}case 5:{g=(i[a>>0]|0)!=0?1.0:0.0;r=b;return +g}case 0:{g=0.0;r=b;return +g}default:{b=d+56|0;a=d+4|0;k[d>>2]=20356;k[b>>2]=20376;x=0;xa(582,d+56|0,a|0);f=x;x=0;if(f&1){f=Hc()|0;h=M;l=f;mab(b);Sc(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,a|0);f=x;x=0;do if(f&1){m=Hc()|0;n=M;o=m}else{k[a>>2]=20392;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,a|0,c|0);q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(c);K2a(m);obb(a);n=s;o=q;break}K2a(c);x=0;Fa(92,d|0,211954,35)|0;q=x;x=0;if(!(q&1)?(x=0,xa(584,e|0,a|0),q=x,x=0,!(q&1)):0){x=0;va(1482,e|0);x=0;q=Hc()|0;s=M;K2a(e);t=s;u=q;k[d>>2]=20300;k[b>>2]=20320;k[a>>2]=20392;K2a(m);obb(a);mab(b);Sc(u|0)}q=Hc()|0;t=M;u=q;k[d>>2]=20300;k[b>>2]=20320;k[a>>2]=20392;K2a(m);obb(a);mab(b);Sc(u|0)}while(0);h=n;l=o;mab(b);Sc(l|0)}}return +(0.0)}function Wu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0.0,h=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;switch(j[a+8>>1]&255|0){case 1:{f=a;g=+((k[f>>2]|0)>>>0)+4294967296.0*+(k[f+4>>2]|0);r=b;return +g}case 2:{f=a;g=+((k[f>>2]|0)>>>0)+4294967296.0*+((k[f+4>>2]|0)>>>0);r=b;return +g}case 3:{g=+p[a>>3];r=b;return +g}case 5:{g=(i[a>>0]|0)!=0?1.0:0.0;r=b;return +g}case 0:{g=0.0;r=b;return +g}default:{b=d+56|0;a=d+4|0;k[d>>2]=20356;k[b>>2]=20376;x=0;xa(582,d+56|0,a|0);f=x;x=0;if(f&1){f=Hc()|0;h=M;l=f;mab(b);Sc(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,a|0);f=x;x=0;do if(f&1){m=Hc()|0;n=M;o=m}else{k[a>>2]=20392;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,a|0,c|0);q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(c);K2a(m);obb(a);n=s;o=q;break}K2a(c);x=0;Fa(92,d|0,211990,34)|0;q=x;x=0;if(!(q&1)?(x=0,xa(584,e|0,a|0),q=x,x=0,!(q&1)):0){x=0;va(1482,e|0);x=0;q=Hc()|0;s=M;K2a(e);t=s;u=q;k[d>>2]=20300;k[b>>2]=20320;k[a>>2]=20392;K2a(m);obb(a);mab(b);Sc(u|0)}q=Hc()|0;t=M;u=q;k[d>>2]=20300;k[b>>2]=20320;k[a>>2]=20392;K2a(m);obb(a);mab(b);Sc(u|0)}while(0);h=n;l=o;mab(b);Sc(l|0)}}return +(0.0)}function Xu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;switch(j[a+8>>1]&255|0){case 5:{f=(i[a>>0]|0)!=0;r=b;return f|0}case 1:{g=a;f=(k[g>>2]|0)!=0|(k[g+4>>2]|0)!=0;r=b;return f|0}case 2:{g=a;f=(k[g>>2]|0)!=0|(k[g+4>>2]|0)!=0;r=b;return f|0}case 3:{f=+p[a>>3]!=0.0;r=b;return f|0}case 0:{f=0;r=b;return f|0}default:{f=d+56|0;b=d+4|0;k[d>>2]=20356;k[f>>2]=20376;x=0;xa(582,d+56|0,b|0);a=x;x=0;if(a&1){a=Hc()|0;h=M;l=a;mab(f);Sc(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,b|0);a=x;x=0;do if(a&1){g=Hc()|0;m=M;n=g}else{k[b>>2]=20392;g=d+36|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,b|0,c|0);o=x;x=0;if(o&1){o=Hc()|0;q=M;K2a(c);K2a(g);obb(b);m=q;n=o;break}K2a(c);x=0;Fa(92,d|0,212025,33)|0;o=x;x=0;if(!(o&1)?(x=0,xa(584,e|0,b|0),o=x,x=0,!(o&1)):0){x=0;va(1482,e|0);x=0;o=Hc()|0;q=M;K2a(e);s=q;t=o;k[d>>2]=20300;k[f>>2]=20320;k[b>>2]=20392;K2a(g);obb(b);mab(f);Sc(t|0)}o=Hc()|0;s=M;t=o;k[d>>2]=20300;k[f>>2]=20320;k[b>>2]=20392;K2a(g);obb(b);mab(f);Sc(t|0)}while(0);h=m;l=n;mab(f);Sc(l|0)}}return 0}function Yu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,q=0.0,s=0,t=0,u=0,v=0;c=r;r=r+32|0;d=c;e=c+8|0;switch(b|0){case 0:{if(Zu(a)|0?+Vu(a)==0.0:0){f=1;r=c;return f|0}b=a+8|0;g=j[b>>1]|0;switch(g&255){case 5:{if(!(i[a>>0]|0)){f=1;r=c;return f|0}else{h=0;l=g;m=8}break}case 4:{Ku(e,a);if(!(b5a(e,329672)|0))n=1;else{h=1;l=j[b>>1]|0;m=8}break}default:{h=0;l=g;m=8}}do if((m|0)==8){g=l&255;switch(g<<16>>16){case 6:{if(!(k[(k[a>>2]|0)+8>>2]|0))m=12;else m=11;break}case 7:{if(!(k[(k[a>>2]|0)+8>>2]|0))m=12;else m=11;break}default:m=11}if((m|0)==11){b=g<<16>>16==0;if(h){n=b;break}else f=b;r=c;return f|0}else if((m|0)==12){if(h){n=1;break}else f=1;r=c;return f|0}}while(0);K2a(e);f=n;r=c;return f|0}case 1:{n=a+8|0;e=j[n>>1]|0;a:do switch(e&255|0){case 1:{h=a;m=Hyb(k[h>>2]|0,k[h+4>>2]|0,-2147483648,0)|0;h=M;if(h>>>0<1|(h|0)==1&m>>>0<0){f=1;r=c;return f|0}else o=e;break}case 2:{m=a;h=k[m+4>>2]|0;if(h>>>0<0|(h|0)==0&(k[m>>2]|0)>>>0<2147483648){f=1;r=c;return f|0}else o=e;break}case 3:{q=+p[a>>3];if(!(!(q>=-2147483648.0)|!(q<=2147483647.0)))if(+FHa(q,d)==0.0){f=1;r=c;return f|0}else{o=j[n>>1]|0;break a}else o=e;break}default:o=e}while(0);e=o&255;if(e<<16>>16!=3){s=e<<16>>16==5;t=e<<16>>16==0;u=s|t;r=c;return u|0}q=+p[a>>3];if(q<=2147483647.0&q>=-2147483648.0){f=1;r=c;return f|0}else{s=e<<16>>16==5;t=e<<16>>16==0;u=s|t;r=c;return u|0}break}case 2:{u=a+8|0;t=j[u>>1]|0;b:do switch(t&255|0){case 1:{s=a;e=k[s+4>>2]|0;if(e>>>0<1|(e|0)==1&(k[s>>2]|0)>>>0<0){f=1;r=c;return f|0}else v=t;break}case 2:{s=a;e=k[s+4>>2]|0;if(e>>>0<1|(e|0)==1&(k[s>>2]|0)>>>0<0){f=1;r=c;return f|0}else v=t;break}case 3:{q=+p[a>>3];if(!(!(q>=0.0)|!(q<=4294967295.0)))if(+FHa(q,d)==0.0){f=1;r=c;return f|0}else{v=j[u>>1]|0;break b}else v=t;break}default:v=t}while(0);t=v&255;if(t<<16>>16==3?(q=+p[a>>3],q<=4294967295.0&q>=0.0):0){f=1;r=c;return f|0}f=t<<16>>16==5|t<<16>>16==0;r=c;return f|0}case 3:{if(Zu(a)|0){f=1;r=c;return f|0}t=j[a+8>>1]&255;f=t<<16>>16==5|t<<16>>16==0;r=c;return f|0}case 5:{if(Zu(a)|0){f=1;r=c;return f|0}t=j[a+8>>1]&255;f=t<<16>>16==5|t<<16>>16==0;r=c;return f|0}case 4:{if(Zu(a)|0){f=1;r=c;return f|0}t=j[a+8>>1]|0;if((t&254)<6){r=c;return (49>>>(t&63)&1)!=0|0}else{f=0;r=c;return f|0}break}case 6:{t=j[a+8>>1]&255;f=t<<16>>16==6|t<<16>>16==0;r=c;return f|0}case 7:{t=j[a+8>>1]&255;f=t<<16>>16==7|t<<16>>16==0;r=c;return f|0}default:{f=0;r=c;return f|0}}return 0}function Zu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0.0,n=0,o=0;b=r;r=r+16|0;c=b;d=a+8|0;e=j[d>>1]|0;switch(e&255|0){case 1:{f=1;break}case 2:{g=a;h=k[g+4>>2]|0;if((h|0)>-1|(h|0)==-1&(k[g>>2]|0)>>>0>4294967295)f=1;else{i=e;l=6}break}case 3:{m=+p[a>>3];if(m>=-9223372036854775808.0&m<9223372036854775808.0)if(+FHa(m,c)==0.0)f=1;else{i=j[d>>1]|0;l=6}else{i=e;l=6}break}default:{i=e;l=6}}a:do if((l|0)==6){switch(i&255|0){case 2:{f=1;break a;break}case 1:{e=a;g=k[e+4>>2]|0;if((g|0)>-1|(g|0)==-1&(k[e>>2]|0)>>>0>4294967295){f=1;break a}else n=i;break}case 3:{m=+p[a>>3];if(m>=0.0&m<18446744073709551616.0){if(+FHa(m,c)==0.0){f=1;break a}n=j[d>>1]|0}else n=i;break}default:n=i}e=n&255;if(e<<16>>16==3)f=1;else{switch(e&65535|0){case 1:{f=1;break a;break}case 2:{e=a;g=k[e+4>>2]|0;if((g|0)>-1|(g|0)==-1&(k[e>>2]|0)>>>0>4294967295){f=1;break a}else o=n;break}case 3:{m=+p[a>>3];if(m>=-9223372036854775808.0&m<9223372036854775808.0){if(+FHa(m,c)==0.0){f=1;break a}o=j[d>>1]|0}else o=n;break}default:o=n}switch(o&255|0){case 2:{f=1;break a;break}case 1:{e=a;g=k[e+4>>2]|0;f=(g|0)>-1|(g|0)==-1&(k[e>>2]|0)>>>0>4294967295;break a;break}case 3:{m=+p[a>>3];if(!(m>=0.0&m<18446744073709551616.0)){f=0;break a}f=+FHa(m,c)==0.0;break a;break}default:{f=0;break a}}}}while(0);r=b;return f|0}function _u(a){a=a|0;var b=0,c=0,d=0,e=0;switch(j[a+8>>1]&255|0){case 7:{b=k[(k[a>>2]|0)+8>>2]|0;return b|0}case 6:{c=k[a>>2]|0;if(!(k[c+8>>2]|0)){b=0;return b|0}a=c+4|0;c=k[a>>2]|0;if(!c){d=a;while(1){a=k[d+8>>2]|0;if((k[a>>2]|0)==(d|0))d=a;else{e=a;break}}}else{d=c;while(1){c=k[d+4>>2]|0;if(!c){e=d;break}else d=c}}b=(k[e+20>>2]|0)+1|0;return b|0}default:{b=0;return b|0}}return 0}function $u(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=j[a+8>>1]&255;switch(b<<16>>16){case 7:case 6:case 0:break;default:{c=0;return c|0}}switch(b&65535|0){case 7:{d=k[(k[a>>2]|0)+8>>2]|0;break}case 6:{b=k[a>>2]|0;if(!(k[b+8>>2]|0))d=0;else{a=b+4|0;b=k[a>>2]|0;if(!b){e=a;while(1){a=k[e+8>>2]|0;if((k[a>>2]|0)==(e|0))e=a;else{f=a;break}}}else{e=b;while(1){b=k[e+4>>2]|0;if(!b){f=e;break}else e=b}}d=(k[f+20>>2]|0)+1|0}break}default:d=0}c=(d|0)==0;return c|0}function av(a){a=a|0;return (j[a+8>>1]&255)==0|0}function bv(a){a=a|0;return (j[a+8>>1]&255)==6|0}function cv(a){a=a|0;return (j[a+8>>1]&255)==7|0}function dv(a){a=a|0;return (j[a+8>>1]&255)==0|0}function ev(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=j[a+8>>1]|0;switch(f&255){case 7:case 6:case 0:{k[a+16>>2]=0;k[a+20>>2]=0;if((f&254)!=6){r=b;return}f=k[a>>2]|0;a=f+4|0;mw(f,k[a>>2]|0);k[f+8>>2]=0;k[f>>2]=a;k[a>>2]=0;r=b;return}default:{}}b=d+56|0;a=d+4|0;k[d>>2]=20356;k[b>>2]=20376;x=0;xa(582,d+56|0,a|0);f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f;mab(b);Sc(h|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=20300;k[d+56>>2]=20320;x=0;va(1449,a|0);f=x;x=0;do if(f&1){i=Hc()|0;l=M;m=i}else{k[a>>2]=20392;i=d+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,a|0,c|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(c);K2a(i);obb(a);l=o;m=n;break}K2a(c);x=0;Fa(92,d|0,212059,47)|0;n=x;x=0;if(!(n&1)?(x=0,xa(584,e|0,a|0),n=x,x=0,!(n&1)):0){x=0;va(1482,e|0);x=0;n=Hc()|0;o=M;K2a(e);p=o;q=n;k[d>>2]=20300;k[b>>2]=20320;k[a>>2]=20392;K2a(i);obb(a);mab(b);Sc(q|0)}n=Hc()|0;p=M;q=n;k[d>>2]=20300;k[b>>2]=20320;k[a>>2]=20392;K2a(i);obb(a);mab(b);Sc(q|0)}while(0);g=l;h=m;mab(b);Sc(h|0)}function fv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+224|0;d=c+200|0;e=c+64|0;f=c+48|0;g=c;h=c+40|0;i=c+24|0;l=a+8|0;m=j[l>>1]|0;switch(m&255){case 0:{n=KBa(12)|0;o=n+4|0;k[o>>2]=0;k[n+8>>2]=0;k[n>>2]=o;k[g>>2]=n;n=a;o=k[n>>2]|0;p=k[n+4>>2]|0;n=g;q=k[n+4>>2]|0;s=a;k[s>>2]=k[n>>2];k[s+4>>2]=q;q=g;k[q>>2]=o;k[q+4>>2]=p;j[l>>1]=m&-512|6;j[g+8>>1]=m&256;p=a+12|0;q=k[p>>2]|0;k[p>>2]=0;k[g+12>>2]=q;q=a+16|0;p=k[q>>2]|0;k[q>>2]=0;k[g+16>>2]=p;p=a+20|0;q=k[p>>2]|0;k[p>>2]=0;k[g+20>>2]=q;xu(g);t=j[l>>1]|0;break}case 6:{t=m;break}default:{m=e+56|0;g=e+4|0;k[e>>2]=20356;k[m>>2]=20376;x=0;xa(582,e+56|0,g|0);q=x;x=0;if(q&1){q=Hc()|0;u=M;v=q;mab(m);Sc(v|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,g|0);q=x;x=0;do if(q&1){p=Hc()|0;w=M;y=p}else{k[g>>2]=20392;p=e+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,g|0,d|0);o=x;x=0;if(o&1){o=Hc()|0;s=M;K2a(d);K2a(p);obb(g);w=s;y=o;break}K2a(d);x=0;Fa(92,e|0,212107,45)|0;o=x;x=0;if(!(o&1)?(x=0,xa(584,f|0,g|0),o=x,x=0,!(o&1)):0){x=0;va(1482,f|0);x=0;o=Hc()|0;s=M;K2a(f);z=o;A=s}else{s=Hc()|0;z=s;A=M}k[e>>2]=20300;k[m>>2]=20320;k[g>>2]=20392;K2a(p);obb(g);mab(m);B=z;C=A;Sc(B|0)}while(0);u=w;v=y;mab(m);Sc(v|0)}}switch(t&255|0){case 7:{D=k[(k[a>>2]|0)+8>>2]|0;break}case 6:{v=k[a>>2]|0;if(!(k[v+8>>2]|0))D=0;else{m=v+4|0;v=k[m>>2]|0;if(!v){y=m;while(1){m=k[y+8>>2]|0;if((k[m>>2]|0)==(y|0))y=m;else{E=m;break}}}else{y=v;while(1){v=k[y+4>>2]|0;if(!v){E=y;break}else y=v}}D=(k[E+20>>2]|0)+1|0}break}default:D=0}if(!b){ev(a);r=c;return}if(D>>>0>>0){gv(a,b+-1|0)|0;r=c;return}do if(D>>>0>b>>>0){E=h+4|0;y=b;while(1){v=k[a>>2]|0;k[h>>2]=0;k[E>>2]=y;x=0;m=Ta(516,v|0,h|0)|0;w=x;x=0;if(w&1)break;if((m|0)!=(v+4|0)){w=k[m+4>>2]|0;if(!w){u=m;while(1){A=k[u+8>>2]|0;if((k[A>>2]|0)==(u|0)){F=A;break}else u=A}}else{u=w;while(1){A=k[u>>2]|0;if(!A){F=u;break}else u=A}}if((k[v>>2]|0)==(m|0))k[v>>2]=F;u=v+8|0;k[u>>2]=(k[u>>2]|0)+-1;hk(k[v+4>>2]|0,m);xu(m+24|0);u=k[m+16>>2]|0;if((u|0)!=0?(k[m+20>>2]&3|0)==1:0)yYa(u);OBa(m)}y=y+1|0;if(y>>>0>=D>>>0){G=30;break}}if((G|0)==30){H=j[l>>1]|0;break}y=Hc()|0;B=y;C=M;Sc(B|0)}else H=t;while(0);switch(H&255|0){case 7:{I=k[(k[a>>2]|0)+8>>2]|0;break}case 6:{H=k[a>>2]|0;if(!(k[H+8>>2]|0))I=0;else{a=H+4|0;H=k[a>>2]|0;if(!H){t=a;while(1){a=k[t+8>>2]|0;if((k[a>>2]|0)==(t|0))t=a;else{J=a;break}}}else{t=H;while(1){H=k[t+4>>2]|0;if(!H){J=t;break}else t=H}}I=(k[J+20>>2]|0)+1|0}break}default:I=0}if((I|0)==(b|0)){r=c;return}q2a(i,211297,18);x=0;va(1482,i|0);x=0;c=Hc()|0;b=M;K2a(i);B=c;C=b;Sc(B|0)}function gv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;c=r;r=r+240|0;d=c+228|0;e=c+224|0;f=c+212|0;g=c+64|0;h=c+200|0;l=c+32|0;m=c+56|0;n=c;o=a+8|0;p=j[o>>1]|0;switch(p&255){case 0:{q=KBa(12)|0;s=q+4|0;k[s>>2]=0;k[q+8>>2]=0;k[q>>2]=s;k[l>>2]=q;q=a;s=k[q>>2]|0;t=k[q+4>>2]|0;q=l;u=k[q+4>>2]|0;v=a;k[v>>2]=k[q>>2];k[v+4>>2]=u;u=l;k[u>>2]=s;k[u+4>>2]=t;j[o>>1]=p&-512|6;j[l+8>>1]=p&256;p=a+12|0;o=k[p>>2]|0;k[p>>2]=0;k[l+12>>2]=o;o=a+16|0;p=k[o>>2]|0;k[o>>2]=0;k[l+16>>2]=p;p=a+20|0;o=k[p>>2]|0;k[p>>2]=0;k[l+20>>2]=o;xu(l);break}case 6:break;default:{l=g+56|0;o=g+4|0;k[g>>2]=20356;k[l>>2]=20376;x=0;xa(582,g+56|0,o|0);p=x;x=0;if(p&1){p=Hc()|0;w=M;y=p;mab(l);Sc(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=20300;k[g+56>>2]=20320;x=0;va(1449,o|0);p=x;x=0;do if(p&1){t=Hc()|0;z=M;A=t}else{k[o>>2]=20392;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,o|0,d|0);u=x;x=0;if(u&1){u=Hc()|0;s=M;K2a(d);K2a(t);obb(o);z=s;A=u;break}K2a(d);x=0;Fa(92,g|0,212153,59)|0;u=x;x=0;if(!(u&1)?(x=0,xa(584,h|0,o|0),u=x,x=0,!(u&1)):0){x=0;va(1482,h|0);x=0;u=Hc()|0;s=M;K2a(h);B=s;C=u}else{u=Hc()|0;B=M;C=u}k[g>>2]=20300;k[l>>2]=20320;k[o>>2]=20392;K2a(t);obb(o);mab(l);D=B;E=C;Sc(E|0)}while(0);w=z;y=A;mab(l);Sc(y|0)}}k[m>>2]=0;y=m+4|0;k[y>>2]=b;l=k[a>>2]|0;A=l+4|0;x=0;z=db(64,l|0,m|0,k[A>>2]|0,A|0)|0;A=x;x=0;a:do if(A&1){F=b;G=0;H=25}else{l=z;do if((z|0)!=((k[a>>2]|0)+4|0)){w=k[z+20>>2]|0;if(!(k[z+16>>2]|0)){if((w|0)!=(b|0))break;I=z+24|0;r=c;return I|0}if((w^b)>>>0>=4)break;x=0;fb(140,f|0,211297,18);w=x;x=0;if(w&1){F=b;G=0;H=25;break a}x=0;va(1482,f|0);x=0;w=Hc()|0;C=M;K2a(f);J=b;K=0;L=C;N=w;H=26;break a}while(0);if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728)}w=k[y>>2]|0;C=w&3;B=k[m>>2]|0;do if(C)if(!B)O=0;else{o=w>>>2;g=xYa(o+1|0)|0;if(g){Dyb(g|0,B|0,o|0)|0;i[g+o>>0]=0;O=g;break}x=0;fb(140,d|0,211373,78);g=x;x=0;if(g&1){F=w;G=B;H=25;break a}x=0;va(1477,d|0);x=0;g=Hc()|0;o=M;K2a(d);J=w;K=B;L=o;N=g;H=26;break a}else O=B;while(0);k[n>>2]=O;g=n+4|0;k[g>>2]=((B|0)!=0?(C|0)!=0&1:C)|w&-4;o=n+8|0;x=0;xa(589,o|0,1736);h=x;x=0;if(h&1){h=Hc()|0;p=M;t=k[n>>2]|0;if(!t){J=w;K=B;L=p;N=h;H=26;break}if((k[g>>2]&3|0)!=1){J=w;K=B;L=p;N=h;H=26;break}yYa(t);J=w;K=B;L=p;N=h;H=26;break}h=k[a>>2]|0;k[e>>2]=l;x=0;k[d>>2]=k[e>>2];p=Fa(113,h|0,d|0,n|0)|0;h=x;x=0;if(h&1){h=Hc()|0;t=M;xu(o);u=k[n>>2]|0;if(!u){P=t;Q=h;R=B;S=w;break}if((k[g>>2]&3|0)!=1){P=t;Q=h;R=B;S=w;break}yYa(u);P=t;Q=h;R=B;S=w;break}xu(o);o=k[n>>2]|0;if((o|0)!=0?(k[g>>2]&3|0)==1:0)yYa(o);o=p+24|0;if(!((B|0)!=0&(w&3|0)==1)){I=o;r=c;return I|0}yYa(B);I=o;r=c;return I|0}while(0);if((H|0)==25){I=Hc()|0;J=F;K=G;L=M;N=I;H=26}if((H|0)==26){P=L;Q=N;R=K;S=J}if(!((R|0)!=0&(S&3|0)==1)){D=P;E=Q;Sc(E|0)}yYa(R);D=P;E=Q;Sc(E|0);return 0}function hv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+176|0;d=c+152|0;e=c+16|0;f=c;if((b|0)>-1){g=gv(a,b)|0;r=c;return g|0}g=e+56|0;c=e+4|0;k[e>>2]=20356;k[g>>2]=20376;x=0;xa(582,e+56|0,c|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;i=b;mab(g);Sc(i|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,c|0);b=x;x=0;do if(b&1){a=Hc()|0;j=M;l=a}else{k[c>>2]=20392;a=e+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,c|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);K2a(a);obb(c);j=n;l=m;break}K2a(d);x=0;Fa(92,e|0,212213,63)|0;m=x;x=0;if(!(m&1)?(x=0,xa(584,f|0,c|0),m=x,x=0,!(m&1)):0){x=0;va(1482,f|0);x=0;m=Hc()|0;n=M;K2a(f);o=n;p=m;k[e>>2]=20300;k[g>>2]=20320;k[c>>2]=20392;K2a(a);obb(c);mab(g);Sc(p|0)}m=Hc()|0;o=M;p=m;k[e>>2]=20300;k[g>>2]=20320;k[c>>2]=20392;K2a(a);obb(c);mab(g);Sc(p|0)}while(0);h=j;i=l;mab(g);Sc(i|0);return 0}function iv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+176|0;d=c+152|0;e=c+16|0;f=c;switch(j[a+8>>1]&255){case 0:{if(i[1728]|0){g=1736;r=c;return g|0}if(!(Bb(1728)|0)){g=1736;r=c;return g|0}j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728);g=1736;r=c;return g|0}case 6:{k[d>>2]=0;h=d+4|0;k[h>>2]=b;x=0;b=Ta(516,k[a>>2]|0,d|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}if((b|0)==((k[a>>2]|0)+4|0))if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728);o=1736}else o=1736;else o=b+24|0;b=k[d>>2]|0;if((b|0)!=0?(k[h>>2]&3|0)==1:0)yYa(b);g=o;r=c;return g|0}default:{g=e+56|0;c=e+4|0;k[e>>2]=20356;k[g>>2]=20376;x=0;xa(582,e+56|0,c|0);o=x;x=0;if(o&1){o=Hc()|0;p=M;q=o;mab(g);Sc(q|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,c|0);o=x;x=0;do if(o&1){b=Hc()|0;s=M;t=b}else{k[c>>2]=20392;b=e+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,c|0,d|0);h=x;x=0;if(h&1){h=Hc()|0;a=M;K2a(d);K2a(b);obb(c);s=a;t=h;break}K2a(d);x=0;Fa(92,e|0,212277,64)|0;h=x;x=0;if(!(h&1)?(x=0,xa(584,f|0,c|0),h=x,x=0,!(h&1)):0){x=0;va(1482,f|0);x=0;h=Hc()|0;a=M;K2a(f);u=a;v=h}else{h=Hc()|0;u=M;v=h}k[e>>2]=20300;k[g>>2]=20320;k[c>>2]=20392;K2a(b);obb(c);mab(g);m=u;n=v;Sc(n|0)}while(0);p=s;q=t;mab(g);Sc(q|0)}}return 0}function jv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+176|0;d=c+152|0;e=c+16|0;f=c;if((b|0)>-1){g=iv(a,b)|0;r=c;return g|0}g=e+56|0;c=e+4|0;k[e>>2]=20356;k[g>>2]=20376;x=0;xa(582,e+56|0,c|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;i=b;mab(g);Sc(i|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,c|0);b=x;x=0;do if(b&1){a=Hc()|0;j=M;l=a}else{k[c>>2]=20392;a=e+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,c|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);K2a(a);obb(c);j=n;l=m;break}K2a(d);x=0;Fa(92,e|0,212342,69)|0;m=x;x=0;if(!(m&1)?(x=0,xa(584,f|0,c|0),m=x,x=0,!(m&1)):0){x=0;va(1482,f|0);x=0;m=Hc()|0;n=M;K2a(f);o=n;p=m;k[e>>2]=20300;k[g>>2]=20320;k[c>>2]=20392;K2a(a);obb(c);mab(g);Sc(p|0)}m=Hc()|0;o=M;p=m;k[e>>2]=20300;k[g>>2]=20320;k[c>>2]=20392;K2a(a);obb(c);mab(g);Sc(p|0)}while(0);h=j;i=l;mab(g);Sc(i|0);return 0}function kv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;c=r;r=r+240|0;d=c+228|0;e=c+224|0;f=c+212|0;g=c+64|0;h=c+200|0;l=c+32|0;m=c+56|0;n=c;o=a+8|0;p=j[o>>1]|0;switch(p&255){case 0:{q=KBa(12)|0;s=q+4|0;k[s>>2]=0;k[q+8>>2]=0;k[q>>2]=s;k[l>>2]=q;q=a;s=k[q>>2]|0;t=k[q+4>>2]|0;q=l;u=k[q+4>>2]|0;v=a;k[v>>2]=k[q>>2];k[v+4>>2]=u;u=l;k[u>>2]=s;k[u+4>>2]=t;j[o>>1]=p&-512|7;j[l+8>>1]=p&256;p=a+12|0;o=k[p>>2]|0;k[p>>2]=0;k[l+12>>2]=o;o=a+16|0;p=k[o>>2]|0;k[o>>2]=0;k[l+16>>2]=p;p=a+20|0;o=k[p>>2]|0;k[p>>2]=0;k[l+20>>2]=o;xu(l);break}case 7:break;default:{l=g+56|0;o=g+4|0;k[g>>2]=20356;k[l>>2]=20376;x=0;xa(582,g+56|0,o|0);p=x;x=0;if(p&1){p=Hc()|0;w=M;y=p;mab(l);Sc(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=20300;k[g+56>>2]=20320;x=0;va(1449,o|0);p=x;x=0;do if(p&1){t=Hc()|0;z=M;A=t}else{k[o>>2]=20392;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,o|0,d|0);u=x;x=0;if(u&1){u=Hc()|0;s=M;K2a(d);K2a(t);obb(o);z=s;A=u;break}K2a(d);x=0;Fa(92,g|0,212412,56)|0;u=x;x=0;if(!(u&1)?(x=0,xa(584,h|0,o|0),u=x,x=0,!(u&1)):0){x=0;va(1482,h|0);x=0;u=Hc()|0;s=M;K2a(h);B=u;C=s}else{s=Hc()|0;B=s;C=M}k[g>>2]=20300;k[l>>2]=20320;k[o>>2]=20392;K2a(t);obb(o);mab(l);D=B;E=C;Sc(D|0)}while(0);w=z;y=A;mab(l);Sc(y|0)}}y=RLa(b)|0;k[m>>2]=b;l=m+4|0;A=y<<2;k[l>>2]=A;z=k[a>>2]|0;w=z+4|0;x=0;C=db(64,z|0,m|0,k[w>>2]|0,w|0)|0;w=x;x=0;a:do if(w&1){F=A;G=b;H=27}else{z=C;do if((C|0)!=((k[a>>2]|0)+4|0)){B=k[C+16>>2]|0;o=k[C+20>>2]|0;if(!B)if((o|0)==(A|0)){I=C;J=b;K=A;H=50;break}else{H=29;break}g=o>>>2;if((g|0)!=(y&1073741823|0)){H=29;break}if(!b){x=0;fb(140,f|0,211297,18);o=x;x=0;if(o&1){F=A;G=0;H=27;break a}x=0;va(1482,f|0);x=0;o=Hc()|0;h=M;K2a(f);L=A;N=0;O=h;P=o;H=28;break a}else{if(ZLa(B,b,g)|0){H=29;break}Q=C+24|0;R=A;S=b;break}}else H=29;while(0);if((H|0)==29){if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728)}g=k[l>>2]|0;B=g&3;o=k[m>>2]|0;do if(B)if(!o)T=0;else{h=g>>>2;p=xYa(h+1|0)|0;if(p){Dyb(p|0,o|0,h|0)|0;i[p+h>>0]=0;T=p;break}x=0;fb(140,d|0,211373,78);p=x;x=0;if(p&1){F=g;G=o;H=27;break a}x=0;va(1477,d|0);x=0;p=Hc()|0;h=M;K2a(d);L=g;N=o;O=h;P=p;H=28;break a}else T=o;while(0);k[n>>2]=T;p=n+4|0;k[p>>2]=((o|0)!=0?(B|0)!=0&1:B)|g&-4;h=n+8|0;x=0;xa(589,h|0,1736);t=x;x=0;if(t&1){t=Hc()|0;s=M;u=k[n>>2]|0;if(!u){L=g;N=o;O=s;P=t;H=28;break}if((k[p>>2]&3|0)!=1){L=g;N=o;O=s;P=t;H=28;break}yYa(u);L=g;N=o;O=s;P=t;H=28;break}t=k[a>>2]|0;k[e>>2]=z;x=0;k[d>>2]=k[e>>2];s=Fa(113,t|0,d|0,n|0)|0;t=x;x=0;if(t&1){t=Hc()|0;u=M;xu(h);v=k[n>>2]|0;if(!v){U=t;V=u;W=o;X=g;break}if((k[p>>2]&3|0)!=1){U=t;V=u;W=o;X=g;break}yYa(v);U=t;V=u;W=o;X=g;break}xu(h);h=k[n>>2]|0;if((h|0)!=0?(k[p>>2]&3|0)==1:0)yYa(h);I=s;J=o;K=g;H=50}if((H|0)==50){s=I+24|0;if(!J){Y=s;r=c;return Y|0}else{Q=s;R=K;S=J}}if((R&3|0)!=1){Y=Q;r=c;return Y|0}yYa(S);Y=Q;r=c;return Y|0}while(0);if((H|0)==27){Y=Hc()|0;L=F;N=G;O=M;P=Y;H=28}if((H|0)==28){U=P;V=O;W=N;X=L}if(!((W|0)!=0&(X&3|0)==1)){D=U;E=V;Sc(D|0)}yYa(W);D=U;E=V;Sc(D|0);return 0}function lv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;d=r;r=r+240|0;e=d+228|0;f=d+224|0;g=d+212|0;h=d+64|0;l=d+200|0;m=d+32|0;n=d+56|0;o=d;p=a+8|0;q=j[p>>1]|0;switch(q&255){case 0:{s=KBa(12)|0;t=s+4|0;k[t>>2]=0;k[s+8>>2]=0;k[s>>2]=t;k[m>>2]=s;s=a;t=k[s>>2]|0;u=k[s+4>>2]|0;s=m;v=k[s+4>>2]|0;w=a;k[w>>2]=k[s>>2];k[w+4>>2]=v;v=m;k[v>>2]=t;k[v+4>>2]=u;j[p>>1]=q&-512|7;j[m+8>>1]=q&256;q=a+12|0;p=k[q>>2]|0;k[q>>2]=0;k[m+12>>2]=p;p=a+16|0;q=k[p>>2]|0;k[p>>2]=0;k[m+16>>2]=q;q=a+20|0;p=k[q>>2]|0;k[q>>2]=0;k[m+20>>2]=p;xu(m);break}case 7:break;default:{m=h+56|0;p=h+4|0;k[h>>2]=20356;k[m>>2]=20376;x=0;xa(582,h+56|0,p|0);q=x;x=0;if(q&1){q=Hc()|0;y=M;z=q;mab(m);Sc(z|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=20300;k[h+56>>2]=20320;x=0;va(1449,p|0);q=x;x=0;do if(q&1){u=Hc()|0;A=M;B=u}else{k[p>>2]=20392;u=h+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[h+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(583,p|0,e|0);v=x;x=0;if(v&1){v=Hc()|0;t=M;K2a(e);K2a(u);obb(p);A=t;B=v;break}K2a(e);x=0;Fa(92,h|0,212469,64)|0;v=x;x=0;if(!(v&1)?(x=0,xa(584,l|0,p|0),v=x,x=0,!(v&1)):0){x=0;va(1482,l|0);x=0;v=Hc()|0;t=M;K2a(l);C=v;D=t}else{t=Hc()|0;C=t;D=M}k[h>>2]=20300;k[m>>2]=20320;k[p>>2]=20392;K2a(u);obb(p);mab(m);E=C;F=D;Sc(E|0)}while(0);y=A;z=B;mab(m);Sc(z|0)}}z=c-b|0;k[n>>2]=b;c=n+4|0;m=z<<2|2;k[c>>2]=m;B=k[a>>2]|0;A=B+4|0;x=0;y=db(64,B|0,n|0,k[A>>2]|0,A|0)|0;A=x;x=0;a:do if(A&1){G=m;H=b;I=27}else{B=y;do if((y|0)!=((k[a>>2]|0)+4|0)){D=k[y+16>>2]|0;C=k[y+20>>2]|0;if(!D)if((C|0)==(m|0)){J=y;K=b;L=m;I=50;break}else{I=29;break}p=C>>>2;if((p|0)!=(z&1073741823|0)){I=29;break}if(!b){x=0;fb(140,g|0,211297,18);C=x;x=0;if(C&1){G=m;H=0;I=27;break a}x=0;va(1482,g|0);x=0;C=Hc()|0;h=M;K2a(g);N=m;O=0;P=h;Q=C;I=28;break a}else{if(ZLa(D,b,p)|0){I=29;break}R=y+24|0;S=m;T=b;break}}else I=29;while(0);if((I|0)==29){if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728)}p=k[c>>2]|0;D=p&3;C=k[n>>2]|0;do if(D)if(!C)U=0;else{h=p>>>2;l=xYa(h+1|0)|0;if(l){Dyb(l|0,C|0,h|0)|0;i[l+h>>0]=0;U=l;break}x=0;fb(140,e|0,211373,78);l=x;x=0;if(l&1){G=p;H=C;I=27;break a}x=0;va(1477,e|0);x=0;l=Hc()|0;h=M;K2a(e);N=p;O=C;P=h;Q=l;I=28;break a}else U=C;while(0);k[o>>2]=U;l=o+4|0;k[l>>2]=((C|0)!=0?(D|0)!=0&1:D)|p&-4;h=o+8|0;x=0;xa(589,h|0,1736);q=x;x=0;if(q&1){q=Hc()|0;u=M;t=k[o>>2]|0;if(!t){N=p;O=C;P=u;Q=q;I=28;break}if((k[l>>2]&3|0)!=1){N=p;O=C;P=u;Q=q;I=28;break}yYa(t);N=p;O=C;P=u;Q=q;I=28;break}q=k[a>>2]|0;k[f>>2]=B;x=0;k[e>>2]=k[f>>2];u=Fa(113,q|0,e|0,o|0)|0;q=x;x=0;if(q&1){q=Hc()|0;t=M;xu(h);v=k[o>>2]|0;if(!v){V=q;W=t;X=C;Y=p;break}if((k[l>>2]&3|0)!=1){V=q;W=t;X=C;Y=p;break}yYa(v);V=q;W=t;X=C;Y=p;break}xu(h);h=k[o>>2]|0;if((h|0)!=0?(k[l>>2]&3|0)==1:0)yYa(h);J=u;K=C;L=p;I=50}if((I|0)==50){u=J+24|0;if(!K){Z=u;r=d;return Z|0}else{R=u;S=L;T=K}}if((S&3|0)!=1){Z=R;r=d;return Z|0}yYa(T);Z=R;r=d;return Z|0}while(0);if((I|0)==27){Z=Hc()|0;N=G;O=H;P=M;Q=Z;I=28}if((I|0)==28){V=Q;W=P;X=O;Y=N}if(!((X|0)!=0&(Y&3|0)==1)){E=V;F=W;Sc(E|0)}yYa(X);E=V;F=W;Sc(E|0);return 0}function mv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=iv(b,c)|0;if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728)}uu(a,(e|0)==1736?d:e);return}function nv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;switch(j[a+8>>1]&255|0){case 7:{c=k[(k[a>>2]|0)+8>>2]|0;break}case 6:{d=k[a>>2]|0;if(!(k[d+8>>2]|0))c=0;else{a=d+4|0;d=k[a>>2]|0;if(!d){e=a;while(1){a=k[e+8>>2]|0;if((k[a>>2]|0)==(e|0))e=a;else{f=a;break}}}else{e=d;while(1){d=k[e+4>>2]|0;if(!d){f=e;break}else e=d}}c=(k[f+20>>2]|0)+1|0}break}default:c=0}return c>>>0>b>>>0|0}function ov(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+176|0;e=d+152|0;f=d+16|0;g=d;switch(j[a+8>>1]&255){case 7:{k[e>>2]=b;k[e+4>>2]=c-b<<2;x=0;b=Ta(516,k[a>>2]|0,e|0)|0;c=x;x=0;if(c&1){c=Hc()|0;h=M;i=c;Sc(i|0)}else{l=(b|0)==((k[a>>2]|0)+4|0)?0:b+24|0;r=d;return l|0}break}case 0:{l=0;r=d;return l|0}default:{l=f+56|0;d=f+4|0;k[f>>2]=20356;k[l>>2]=20376;x=0;xa(582,f+56|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;m=M;n=b;mab(l);Sc(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=20300;k[f+56>>2]=20320;x=0;va(1449,d|0);b=x;x=0;do if(b&1){a=Hc()|0;o=M;p=a}else{k[d>>2]=20392;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(583,d|0,e|0);c=x;x=0;if(c&1){c=Hc()|0;q=M;K2a(e);K2a(a);obb(d);o=q;p=c;break}K2a(e);x=0;Fa(92,f|0,212534,72)|0;c=x;x=0;if(!(c&1)?(x=0,xa(584,g|0,d|0),c=x,x=0,!(c&1)):0){x=0;va(1482,g|0);x=0;c=Hc()|0;q=M;K2a(g);s=q;t=c}else{c=Hc()|0;s=M;t=c}k[f>>2]=20300;k[l>>2]=20320;k[d>>2]=20392;K2a(a);obb(d);mab(l);h=s;i=t;Sc(i|0)}while(0);m=o;n=p;mab(l);Sc(n|0)}}return 0}function pv(a,b){a=a|0;b=b|0;var c=0,d=0;c=ov(a,b,b+(RLa(b)|0)|0)|0;if(c){d=c;return d|0}if(i[1728]|0){d=1736;return d|0}if(!(Bb(1728)|0)){d=1736;return d|0}j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728);d=1736;return d|0}function qv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=i[b>>0]|0;d=(c&1)==0;e=d?b+1|0:k[b+8>>2]|0;f=ov(a,e,e+(d?(c&255)>>>1:k[b+4>>2]|0)|0)|0;if(f){g=f;return g|0}if(i[1728]|0){g=1736;return g|0}if(!(Bb(1728)|0)){g=1736;return g|0}j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728);g=1736;return g|0}function rv(a,b){a=a|0;b=b|0;return lv(a,b,b+(RLa(b)|0)|0)|0}function sv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;d=(c&1)==0;e=d?b+1|0:k[b+8>>2]|0;return lv(a,e,e+(d?(c&255)>>>1:k[b+4>>2]|0)|0)|0}function tv(a,b){a=a|0;b=b|0;return kv(a,k[b>>2]|0)|0}function uv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c;switch(j[a+8>>1]&255|0){case 7:{e=k[(k[a>>2]|0)+8>>2]|0;break}case 6:{f=k[a>>2]|0;if(!(k[f+8>>2]|0))e=0;else{g=f+4|0;f=k[g>>2]|0;if(!f){h=g;while(1){g=k[h+8>>2]|0;if((k[g>>2]|0)==(h|0))h=g;else{i=g;break}}}else{h=f;while(1){f=k[h+4>>2]|0;if(!f){i=h;break}else h=f}}e=(k[i+20>>2]|0)+1|0}break}default:e=0}i=gv(a,e)|0;uu(d,b);b=i+8|0;e=j[b>>1]|0;a=d+8|0;h=j[a>>1]|0;f=i;g=k[f>>2]|0;l=k[f+4>>2]|0;f=d;m=k[f+4>>2]|0;n=i;k[n>>2]=k[f>>2];k[n+4>>2]=m;m=d;k[m>>2]=g;k[m+4>>2]=l;j[b>>1]=h&256|(h&255|e&-512);j[a>>1]=h&-512|e&255|e&256;e=i+12|0;h=d+12|0;a=k[e>>2]|0;k[e>>2]=k[h>>2];k[h>>2]=a;a=i+16|0;h=d+16|0;e=k[a>>2]|0;k[a>>2]=k[h>>2];k[h>>2]=e;e=i+20|0;h=d+20|0;a=k[e>>2]|0;k[e>>2]=k[h>>2];k[h>>2]=a;xu(d);r=c;return i|0}function vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=ov(b,c,d)|0;uu(a,(f|0)!=0?f:e);return}function wv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ov(b,c,c+(RLa(c)|0)|0)|0;uu(a,(e|0)!=0?e:d);return}function xv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=i[c>>0]|0;f=(e&1)==0;g=f?c+1|0:k[c+8>>2]|0;h=ov(b,g,g+(f?(e&255)>>>1:k[c+4>>2]|0)|0)|0;uu(a,(h|0)!=0?h:d);return}function yv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;e=r;r=r+32|0;f=e+24|0;g=e;if((j[a+8>>1]&255)!=7){h=0;r=e;return h|0}k[f>>2]=b;k[f+4>>2]=c-b<<2;b=nw(k[a>>2]|0,f)|0;if((b|0)==((k[a>>2]|0)+4|0))i=0;else{f=b+24|0;uu(g,f);c=d+8|0;l=j[c>>1]|0;m=g+8|0;n=j[m>>1]|0;o=d;p=k[o>>2]|0;q=k[o+4>>2]|0;o=g;s=k[o+4>>2]|0;t=d;k[t>>2]=k[o>>2];k[t+4>>2]=s;s=g;k[s>>2]=p;k[s+4>>2]=q;j[c>>1]=n&256|(n&255|l&-512);j[m>>1]=n&-512|l&255|l&256;l=d+12|0;n=g+12|0;m=k[l>>2]|0;k[l>>2]=k[n>>2];k[n>>2]=m;m=d+16|0;n=g+16|0;l=k[m>>2]|0;k[m>>2]=k[n>>2];k[n>>2]=l;l=d+20|0;d=g+20|0;n=k[l>>2]|0;k[l>>2]=k[d>>2];k[d>>2]=n;xu(g);g=k[a>>2]|0;a=k[b+4>>2]|0;if(!a){n=b;while(1){d=k[n+8>>2]|0;if((k[d>>2]|0)==(n|0)){u=d;break}else n=d}}else{n=a;while(1){a=k[n>>2]|0;if(!a){u=n;break}else n=a}}if((k[g>>2]|0)==(b|0))k[g>>2]=u;u=g+8|0;k[u>>2]=(k[u>>2]|0)+-1;hk(k[g+4>>2]|0,b);xu(f);f=k[b+16>>2]|0;if((f|0)!=0?(k[b+20>>2]&3|0)==1:0)yYa(f);OBa(b);i=1}h=i;r=e;return h|0}function zv(a,b,c){a=a|0;b=b|0;c=c|0;return yv(a,b,b+(RLa(b)|0)|0,c)|0}function Av(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=i[b>>0]|0;e=(d&1)==0;f=e?b+1|0:k[b+8>>2]|0;return yv(a,f,f+(e?(d&255)>>>1:k[b+4>>2]|0)|0,c)|0}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;d=r;r=r+176|0;e=d;f=d+40|0;g=d+24|0;switch(j[b+8>>1]&255){case 0:{if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728)}uu(a,1736);r=d;return}case 7:{h=e+8|0;j[h>>1]=0;l=e+12|0;k[l>>2]=0;m=e+16|0;k[m>>2]=0;n=e+20|0;k[n>>2]=0;o=c+(RLa(c)|0)|0;x=0;db(65,b|0,c|0,o|0,e|0)|0;o=x;x=0;if(o&1){o=Hc()|0;c=M;xu(e);p=c;q=o;Sc(q|0)}else{o=a+8|0;c=j[h>>1]|0;b=c&255|j[o>>1]&-512;s=a;t=k[s>>2]|0;u=k[s+4>>2]|0;s=e;v=k[s+4>>2]|0;w=a;k[w>>2]=k[s>>2];k[w+4>>2]=v;v=e;k[v>>2]=t;k[v+4>>2]=u;j[o>>1]=c&256|b;j[h>>1]=c&-512;k[a+12>>2]=k[l>>2];k[l>>2]=0;k[a+16>>2]=k[m>>2];k[m>>2]=0;k[a+20>>2]=k[n>>2];k[n>>2]=0;xu(e);r=d;return}break}default:{d=f+56|0;n=f+4|0;k[f>>2]=20356;k[d>>2]=20376;x=0;xa(582,f+56|0,n|0);a=x;x=0;if(a&1){a=Hc()|0;y=M;z=a;mab(d);Sc(z|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=20300;k[f+56>>2]=20320;x=0;va(1449,n|0);a=x;x=0;do if(a&1){m=Hc()|0;A=M;B=m}else{k[n>>2]=20392;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(583,n|0,e|0);l=x;x=0;if(l&1){l=Hc()|0;c=M;K2a(e);K2a(m);obb(n);A=c;B=l;break}K2a(e);x=0;Fa(92,f|0,212607,52)|0;l=x;x=0;if(!(l&1)?(x=0,xa(584,g|0,n|0),l=x,x=0,!(l&1)):0){x=0;va(1482,g|0);x=0;l=Hc()|0;c=M;K2a(g);C=c;D=l}else{l=Hc()|0;C=M;D=l}k[f>>2]=20300;k[d>>2]=20320;k[n>>2]=20392;K2a(m);obb(n);mab(d);p=C;q=D;Sc(q|0)}while(0);y=A;z=B;mab(d);Sc(z|0)}}}function Cv(a,b,c){a=a|0;b=b|0;c=c|0;Bv(a,b,(i[c>>0]&1)==0?c+1|0:k[c+8>>2]|0);return}function Dv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=r;r=r+80|0;e=d+64|0;f=d+24|0;g=d+56|0;h=d;i=d+48|0;l=a+8|0;if((j[l>>1]&255)!=6){m=0;r=d;return m|0}k[e>>2]=0;k[e+4>>2]=b;x=0;n=Ta(516,k[a>>2]|0,e|0)|0;e=x;x=0;do if(!(e&1)){if((n|0)==((k[a>>2]|0)+4|0))o=0;else{x=0;xa(589,f|0,n+24|0);p=x;x=0;if(p&1)break;p=c+8|0;q=j[p>>1]|0;s=f+8|0;t=j[s>>1]|0;u=c;v=k[u>>2]|0;w=k[u+4>>2]|0;u=f;y=k[u+4>>2]|0;z=c;k[z>>2]=k[u>>2];k[z+4>>2]=y;y=f;k[y>>2]=v;k[y+4>>2]=w;j[p>>1]=t&256|(t&255|q&-512);j[s>>1]=t&-512|q&255|q&256;q=c+12|0;t=f+12|0;s=k[q>>2]|0;k[q>>2]=k[t>>2];k[t>>2]=s;s=c+16|0;t=f+16|0;q=k[s>>2]|0;k[s>>2]=k[t>>2];k[t>>2]=q;q=c+20|0;t=f+20|0;s=k[q>>2]|0;k[q>>2]=k[t>>2];k[t>>2]=s;xu(f);switch(j[l>>1]&255|0){case 7:{A=k[(k[a>>2]|0)+8>>2]|0;break}case 6:{s=k[a>>2]|0;if(!(k[s+8>>2]|0))A=0;else{t=s+4|0;s=k[t>>2]|0;if(!s){q=t;while(1){t=k[q+8>>2]|0;if((k[t>>2]|0)==(q|0))q=t;else{B=t;break}}}else{q=s;while(1){t=k[q+4>>2]|0;if(!t){B=q;break}else q=t}}A=(k[B+20>>2]|0)+1|0}break}default:A=0}q=A+-1|0;a:do if(q>>>0>b>>>0){s=g+4|0;t=h+8|0;p=h+12|0;w=h+16|0;y=h+20|0;v=b;while(1){k[g>>2]=0;k[s>>2]=v;x=0;z=Ta(517,k[a>>2]|0,g|0)|0;u=x;x=0;if(u&1)break;v=v+1|0;x=0;u=Ta(518,a|0,v|0)|0;C=x;x=0;if(C&1)break;x=0;xa(589,h|0,u|0);u=x;x=0;if(u&1)break;u=z+8|0;C=j[u>>1]|0;D=j[t>>1]|0;E=z;F=k[E>>2]|0;G=k[E+4>>2]|0;E=h;H=k[E+4>>2]|0;I=z;k[I>>2]=k[E>>2];k[I+4>>2]=H;H=h;k[H>>2]=F;k[H+4>>2]=G;j[u>>1]=D&256|(D&255|C&-512);j[t>>1]=D&-512|C&255|C&256;C=z+12|0;D=k[C>>2]|0;k[C>>2]=k[p>>2];k[p>>2]=D;D=z+16|0;C=k[D>>2]|0;k[D>>2]=k[w>>2];k[w>>2]=C;C=z+20|0;z=k[C>>2]|0;k[C>>2]=k[y>>2];k[y>>2]=z;xu(h);if(v>>>0>=q>>>0)break a}v=Hc()|0;J=v;K=M;Sc(J|0)}while(0);k[i>>2]=0;k[i+4>>2]=q;x=0;v=Ta(516,k[a>>2]|0,i|0)|0;y=x;x=0;if(y&1){y=Hc()|0;J=y;K=M;Sc(J|0)}y=k[a>>2]|0;w=k[v+4>>2]|0;if(!w){p=v;while(1){t=k[p+8>>2]|0;if((k[t>>2]|0)==(p|0)){L=t;break}else p=t}}else{p=w;while(1){q=k[p>>2]|0;if(!q){L=p;break}else p=q}}if((k[y>>2]|0)==(v|0))k[y>>2]=L;p=y+8|0;k[p>>2]=(k[p>>2]|0)+-1;hk(k[y+4>>2]|0,v);xu(v+24|0);p=k[v+16>>2]|0;if((p|0)!=0?(k[v+20>>2]&3|0)==1:0)yYa(p);OBa(v);o=1}m=o;r=d;return m|0}while(0);m=Hc()|0;J=m;K=M;Sc(J|0);return 0}function Ev(a,b,c){a=a|0;b=b|0;c=c|0;return (ov(a,b,c)|0)!=0|0}function Fv(a,b){a=a|0;b=b|0;return (ov(a,b,b+(RLa(b)|0)|0)|0)!=0|0}function Gv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;d=(c&1)==0;e=d?b+1|0:k[b+8>>2]|0;return (ov(a,e,e+(d?(c&255)>>>1:k[b+4>>2]|0)|0)|0)!=0|0}function Hv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;c=r;r=r+176|0;d=c+160|0;e=c+24|0;f=c+12|0;g=c;switch(j[b+8>>1]&255){case 0:{k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;r=c;return}case 7:{k[d>>2]=0;h=d+4|0;k[h>>2]=0;k[d+8>>2]=0;i=k[b>>2]|0;b=k[i+8>>2]|0;l=d+8|0;do if(b){x=0;m=Ba(563,b*12|0)|0;n=x;x=0;if(n&1){n=Hc()|0;o=n;p=M;q=31;break}else{n=m;s=m+(b*12|0)|0;k[d>>2]=n;k[h>>2]=n;k[l>>2]=s;t=s;u=n;q=19;break}}else{t=0;u=0;q=19}while(0);a:do if((q|0)==19){b=k[i>>2]|0;n=i+4|0;s=b;do if((s|0)!=(n|0)){m=s;v=b;while(1){x=0;fb(140,g|0,k[m+16>>2]|0,(k[m+20>>2]|0)>>>2|0);w=x;x=0;if(w&1){q=29;break}w=k[h>>2]|0;if(w>>>0>=(k[l>>2]|0)>>>0){x=0;xa(650,d|0,g|0);y=x;x=0;if(y&1){q=32;break}}else{k[w>>2]=k[g>>2];k[w+4>>2]=k[g+4>>2];k[w+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[h>>2]=(k[h>>2]|0)+12}K2a(g);w=v;y=k[w+4>>2]|0;if(!y){z=w;while(1){w=k[z+8>>2]|0;if((k[w>>2]|0)==(z|0)){A=w;break}else z=w}}else{z=y;while(1){w=k[z>>2]|0;if(!w){A=z;break}else z=w}}if((A|0)==(n|0)){q=33;break}else{m=A;v=A}}if((q|0)==29){v=Hc()|0;o=v;p=M;q=31;break a}else if((q|0)==32){v=Hc()|0;m=M;K2a(g);B=m;C=v;break a}else if((q|0)==33){D=k[d>>2]|0;E=k[h>>2]|0;F=k[l>>2]|0;break}}else{D=u;E=u;F=t}while(0);k[a>>2]=D;k[a+4>>2]=E;k[a+8>>2]=F;r=c;return}while(0);if((q|0)==31){B=p;C=o}o=k[d>>2]|0;if(!o){G=B;H=C;Sc(H|0)}p=k[h>>2]|0;if((p|0)==(o|0))I=o;else{q=p;do{p=q+-12|0;k[h>>2]=p;K2a(p);q=k[h>>2]|0}while((q|0)!=(o|0));I=k[d>>2]|0}OBa(I);G=B;H=C;Sc(H|0);break}default:{C=e+56|0;B=e+4|0;k[e>>2]=20356;k[C>>2]=20376;x=0;xa(582,e+56|0,B|0);I=x;x=0;if(I&1){I=Hc()|0;J=M;K=I;mab(C);Sc(K|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,B|0);I=x;x=0;do if(I&1){o=Hc()|0;L=M;N=o}else{k[B>>2]=20392;o=e+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,B|0,d|0);q=x;x=0;if(q&1){q=Hc()|0;h=M;K2a(d);K2a(o);obb(B);L=h;N=q;break}K2a(d);x=0;Fa(92,e|0,212660,59)|0;q=x;x=0;if(!(q&1)?(x=0,xa(584,f|0,B|0),q=x,x=0,!(q&1)):0){x=0;va(1482,f|0);x=0;q=Hc()|0;h=M;K2a(f);O=h;P=q}else{q=Hc()|0;O=M;P=q}k[e>>2]=20300;k[C>>2]=20320;k[B>>2]=20392;K2a(o);obb(B);mab(C);G=O;H=P;Sc(H|0)}while(0);J=L;K=N;mab(C);Sc(K|0)}}}function Iv(a){a=a|0;return (j[a+8>>1]&255)==5|0}function Jv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0.0;b=r;r=r+16|0;c=b;d=a+8|0;e=j[d>>1]|0;switch(e&255|0){case 1:{f=1;break}case 2:{g=a;h=k[g+4>>2]|0;if((h|0)>-1|(h|0)==-1&(k[g>>2]|0)>>>0>4294967295)f=1;else{i=e;l=6}break}case 3:{m=+p[a>>3];if(m>=-9223372036854775808.0&m<9223372036854775808.0)if(+FHa(m,c)==0.0)f=1;else{i=j[d>>1]|0;l=6}else{i=e;l=6}break}default:{i=e;l=6}}a:do if((l|0)==6)switch(i&255|0){case 2:{f=1;break a;break}case 1:{e=a;d=k[e+4>>2]|0;f=(d|0)>-1|(d|0)==-1&(k[e>>2]|0)>>>0>4294967295;break a;break}case 3:{m=+p[a>>3];if(!(m>=0.0&m<18446744073709551616.0)){f=0;break a}f=+FHa(m,c)==0.0;break a;break}default:{f=0;break a}}while(0);r=b;return f|0}function Kv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0.0;b=r;r=r+16|0;c=b;d=a+8|0;e=j[d>>1]|0;f=e&255;a:do if(f<<16>>16==3)g=1;else{switch(f&65535|0){case 1:{g=1;break a;break}case 2:{h=a;i=k[h+4>>2]|0;if((i|0)>-1|(i|0)==-1&(k[h>>2]|0)>>>0>4294967295){g=1;break a}else l=e;break}case 3:{m=+p[a>>3];if(m>=-9223372036854775808.0&m<9223372036854775808.0){if(+FHa(m,c)==0.0){g=1;break a}l=j[d>>1]|0}else l=e;break}default:l=e}switch(l&255|0){case 2:{g=1;break a;break}case 1:{h=a;i=k[h+4>>2]|0;g=(i|0)>-1|(i|0)==-1&(k[h>>2]|0)>>>0>4294967295;break a;break}case 3:{m=+p[a>>3];if(!(m>=0.0&m<18446744073709551616.0)){g=0;break a}g=+FHa(m,c)==0.0;break a;break}default:{g=0;break a}}}while(0);r=b;return g|0}function Lv(a){a=a|0;return (j[a+8>>1]&255)==4|0}function Mv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=a+12|0;a=k[e>>2]|0;if(!a){f=MBa(16)|0;k[f>>2]=3;g=f+4|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[e>>2]=g;h=g}else h=a;if(!c)j=0;else{a=c+-1|0;j=(i[b+a>>0]|0)==10?a:c}_t(h+(d<<2)|0,b,j);return}function Nv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=RLa(b)|0;e=a+12|0;a=k[e>>2]|0;if(!a){f=MBa(16)|0;k[f>>2]=3;g=f+4|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[e>>2]=g;h=g}else h=a;if(!d)j=0;else{a=d+-1|0;j=(i[b+a>>0]|0)==10?a:d}_t(h+(c<<2)|0,b,j);return}function Ov(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=i[b>>0]|0;e=(d&1)==0;f=e?b+1|0:k[b+8>>2]|0;g=e?(d&255)>>>1:k[b+4>>2]|0;b=a+12|0;a=k[b>>2]|0;if(!a){d=MBa(16)|0;k[d>>2]=3;e=d+4|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[b>>2]=e;h=e}else h=a;if(!g){j=0;l=h+(c<<2)|0;_t(l,f,j);return}a=g+-1|0;j=(i[f+a>>0]|0)==10?a:g;l=h+(c<<2)|0;_t(l,f,j);return}function Pv(a,b){a=a|0;b=b|0;var c=0,d=0;c=k[a+12>>2]|0;if(!c){d=0;return d|0}d=(k[c+(b<<2)>>2]|0)!=0;return d|0}function Qv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b+12>>2]|0;if((d|0)!=0?(b=k[d+(c<<2)>>2]|0,(b|0)!=0):0){q2a(a,b,RLa(b)|0);return}q2a(a,329672,0);return}function Rv(a,b){a=a|0;b=b|0;k[a+16>>2]=b;return}function Sv(a,b){a=a|0;b=b|0;k[a+20>>2]=b;return}function Tv(a){a=a|0;return k[a+16>>2]|0}function Uv(a){a=a|0;return k[a+20>>2]|0}function Vv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+64|0;d=c;Qw(d);x=0;fb(60,a|0,d|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;k[d>>2]=24244;K2a(d+28|0);K2a(d+16|0);a=d+4|0;e=k[a>>2]|0;if(!e)Sc(b|0);f=d+8|0;g=k[f>>2]|0;if((g|0)==(e|0))h=e;else{i=g;do{g=i+-12|0;k[f>>2]=g;K2a(g);i=k[f>>2]|0}while((i|0)!=(e|0));h=k[a>>2]|0}OBa(h);Sc(b|0)}else{k[d>>2]=24244;K2a(d+28|0);K2a(d+16|0);b=d+4|0;h=k[b>>2]|0;if(!h){r=c;return}a=d+8|0;d=k[a>>2]|0;if((d|0)==(h|0))j=h;else{e=d;do{d=e+-12|0;k[a>>2]=d;K2a(d);e=k[a>>2]|0}while((e|0)!=(h|0));j=k[b>>2]|0}OBa(j);r=c;return}}function Wv(a,b){a=a|0;b=b|0;var c=0;if((j[b+8>>1]&254)==6?(c=k[b>>2]|0,(c|0)!=0):0){k[a>>2]=k[c>>2];i[a+4>>0]=0;return}i[a+4>>0]=1;return}function Xv(a,b){a=a|0;b=b|0;var c=0;if((j[b+8>>1]&254)==6?(c=k[b>>2]|0,(c|0)!=0):0){k[a>>2]=c+4;i[a+4>>0]=0;return}i[a+4>>0]=1;return}function Yv(a,b){a=a|0;b=b|0;var c=0;if((j[b+8>>1]&254)==6?(c=k[b>>2]|0,(c|0)!=0):0){k[a>>2]=k[c>>2];i[a+4>>0]=0;return}i[a+4>>0]=1;return}function Zv(a,b){a=a|0;b=b|0;var c=0;if((j[b+8>>1]&254)==6?(c=k[b>>2]|0,(c|0)!=0):0){k[a>>2]=c+4;i[a+4>>0]=0;return}i[a+4>>0]=1;return}function _v(a){a=a|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;return}function $v(a,b){a=a|0;b=b|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=b;k[a+16>>2]=1;return}function aw(a,b){a=a|0;b=b|0;q2a(a,b,RLa(b)|0);k[a+12>>2]=0;k[a+16>>2]=2;return}function bw(a,b){a=a|0;b=b|0;var c=0;c=(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0;q2a(a,c,RLa(c)|0);k[a+12>>2]=0;k[a+16>>2]=2;return}function cw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;h=r;r=r+32|0;i=h+20|0;j=h+16|0;l=h+12|0;m=h+8|0;n=h+4|0;o=h;k[a>>2]=0;p=a+4|0;k[p>>2]=0;k[a+8>>2]=0;k[i>>2]=0;q=i+4|0;k[q>>2]=0;k[i+8>>2]=0;k[j>>2]=c;c=i+8|0;x=0;xa(651,i|0,j|0);j=x;x=0;do if(!(j&1)){k[l>>2]=d;s=k[q>>2]|0;if(s>>>0<(k[c>>2]|0)>>>0){k[s>>2]=d;s=(k[q>>2]|0)+4|0;k[q>>2]=s;t=s}else{x=0;xa(651,i|0,l|0);s=x;x=0;if(s&1)break;t=k[q>>2]|0}k[m>>2]=e;if(t>>>0<(k[c>>2]|0)>>>0){k[t>>2]=e;s=(k[q>>2]|0)+4|0;k[q>>2]=s;u=s}else{x=0;xa(651,i|0,m|0);s=x;x=0;if(s&1)break;u=k[q>>2]|0}k[n>>2]=f;if(u>>>0<(k[c>>2]|0)>>>0){k[u>>2]=f;s=(k[q>>2]|0)+4|0;k[q>>2]=s;v=s}else{x=0;xa(651,i|0,n|0);s=x;x=0;if(s&1)break;v=k[q>>2]|0}k[o>>2]=g;if(v>>>0>=(k[c>>2]|0)>>>0){x=0;xa(651,i|0,o|0);s=x;x=0;if(s&1)break}else{k[v>>2]=g;k[q>>2]=(k[q>>2]|0)+4}x=0;fb(178,a|0,b|0,i|0);s=x;x=0;if(!(s&1)){s=k[i>>2]|0;if(!s){r=h;return}w=k[q>>2]|0;if((w|0)!=(s|0))k[q>>2]=w+(~((w+-4-s|0)>>>2)<<2);OBa(s);r=h;return}}while(0);h=Hc()|0;b=k[i>>2]|0;i=b;if(b){g=k[q>>2]|0;if((g|0)!=(b|0))k[q>>2]=g+(~((g+-4-i|0)>>>2)<<2);OBa(b)}b=k[a>>2]|0;if(!b)Sc(h|0);i=k[p>>2]|0;if((i|0)==(b|0))y=b;else{g=i;do{i=g+-20|0;k[p>>2]=i;K2a(i);g=k[p>>2]|0}while((g|0)!=(b|0));y=k[a>>2]|0}OBa(y);Sc(h|0)}function dw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;d=r;r=r+64|0;e=d+32|0;f=d+12|0;g=d;h=i[b>>0]|0;j=(h&1)==0;l=j?b+1|0:k[b+8>>2]|0;m=j?(h&255)>>>1:k[b+4>>2]|0;b=l+m|0;if(!m){r=d;return}m=g+8|0;h=g+4|0;j=g+1|0;n=f+12|0;o=f+16|0;p=a+4|0;q=a+8|0;s=c+4|0;t=e+12|0;u=e+16|0;v=k[c>>2]|0;c=l;a:while(1){l=c;b:while(1){w=i[l>>0]|0;switch(w<<24>>24){case 91:{y=l;z=7;break b;break}case 37:{A=l;z=23;break b;break}case 93:case 46:{B=l+1|0;break}default:{c:do if((l|0)!=(b|0))if(!(_Ma(212720,w<<24>>24,3)|0)){C=l;while(1){D=C+1|0;if((D|0)==(b|0)){E=b;break c}if(!(_Ma(212720,i[D>>0]|0,3)|0))C=D;else{E=D;break}}}else E=l;else E=b;while(0);w=E-l|0;if(w>>>0<=4294967279)if(w>>>0<11){i[g>>0]=w<<1;F=j}else z=37;else{GBa(g);z=37}if((z|0)==37){z=0;C=w+16&-16;D=KBa(C)|0;k[m>>2]=D;k[g>>2]=C|1;k[h>>2]=w;F=D}if((l|0)==(E|0))G=F;else{D=l;C=F;while(1){i[C>>0]=i[D>>0]|0;D=D+1|0;if((D|0)==(E|0))break;else C=C+1|0}G=F+w|0}i[G>>0]=0;C=(i[g>>0]&1)==0?j:k[m>>2]|0;D=RLa(C)|0;x=0;fb(140,f|0,C|0,D|0);D=x;x=0;if(D&1){z=47;break a}k[n>>2]=0;k[o>>2]=2;D=k[p>>2]|0;if(D>>>0>=(k[q>>2]|0)>>>0){x=0;xa(652,a|0,f|0);C=x;x=0;if(C&1){z=48;break a}}else{k[D>>2]=k[f>>2];k[D+4>>2]=k[f+4>>2];k[D+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;C=n;H=k[C+4>>2]|0;I=D+12|0;k[I>>2]=k[C>>2];k[I+4>>2]=H;k[p>>2]=(k[p>>2]|0)+20}K2a(f);K2a(g);B=E}}if((B|0)==(b|0)){z=50;break a}else l=B}if((z|0)==7){z=0;l=y+1|0;H=i[l>>0]|0;do if(H<<24>>24==37)if((v|0)!=(k[s>>2]|0)?(I=k[v>>2]|0,(k[I+16>>2]|0)==1):0){C=v+4|0;D=k[p>>2]|0;if((D|0)==(k[q>>2]|0)){tw(a,I);J=C;K=l;break}else{n2a(D,I);L=I+12|0;I=k[L+4>>2]|0;N=D+12|0;k[N>>2]=k[L>>2];k[N+4>>2]=I;k[p>>2]=(k[p>>2]|0)+20;J=C;K=l;break}}else{J=v;K=l}else{d:do if((l|0)!=(b|0))if((H+-48&255)<10){C=H;I=l;N=0;while(1){L=(N*10|0)+-48+(C<<24>>24)|0;D=I+1|0;if((D|0)==(b|0)){O=b;P=L;break d}C=i[D>>0]|0;if((C+-48&255)>=10){O=D;P=L;break}else{I=D;N=L}}}else{O=l;P=0}else{O=b;P=0}while(0);k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[t>>2]=P;k[u>>2]=1;w=k[p>>2]|0;if(w>>>0>=(k[q>>2]|0)>>>0){x=0;xa(652,a|0,e|0);N=x;x=0;if(N&1){z=21;break a}}else{k[w>>2]=k[e>>2];k[w+4>>2]=k[e+4>>2];k[w+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;N=t;I=k[N+4>>2]|0;C=w+12|0;k[C>>2]=k[N>>2];k[C+4>>2]=I;k[p>>2]=(k[p>>2]|0)+20}K2a(e);J=v;K=O}while(0);Q=J;R=(K|0)==(b|0)?K:K+1|0}else if((z|0)==23){z=0;do if((v|0)!=(k[s>>2]|0)?(l=k[v>>2]|0,(k[l+16>>2]|0)==2):0){H=v+4|0;I=k[p>>2]|0;if((I|0)==(k[q>>2]|0)){tw(a,l);S=H;break}else{n2a(I,l);C=l+12|0;l=k[C+4>>2]|0;N=I+12|0;k[N>>2]=k[C>>2];k[N+4>>2]=l;k[p>>2]=(k[p>>2]|0)+20;S=H;break}}else S=v;while(0);Q=S;R=A+1|0}if((R|0)==(b|0)){z=50;break}else{v=Q;c=R}}if((z|0)==21){R=Hc()|0;c=M;K2a(e);T=c;U=R;Sc(U|0)}else if((z|0)==47){R=Hc()|0;V=M;W=R}else if((z|0)==48){R=Hc()|0;c=M;K2a(f);V=c;W=R}else if((z|0)==50){r=d;return}K2a(g);T=V;U=W;Sc(U|0)}function ew(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;b=k[d>>2]|0;if((b|0)==(k[c+4>>2]|0))return;if((k[(k[b>>2]|0)+16>>2]|0)!=(e|0))return;k[d>>2]=b+4;d=k[b>>2]|0;b=a+4|0;e=k[b>>2]|0;if((e|0)==(k[a+8>>2]|0)){tw(a,d);return}else{n2a(e,d);a=d+12|0;d=k[a+4>>2]|0;c=e+12|0;k[c>>2]=k[a>>2];k[c+4>>2]=d;k[b>>2]=(k[b>>2]|0)+20;return}}function fw(a,b,c){a=a|0;b=b|0;c=c|0;return}function gw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0;c=k[a>>2]|0;d=a+4|0;if((c|0)==(k[d>>2]|0)){e=b;return e|0}else{f=c;g=b}a:while(1){switch(k[f+16>>2]|0){case 1:{if((j[g+8>>1]&255)!=6){h=10;break a}b=k[f+12>>2]|0;c=k[g>>2]|0;if(!(k[c+8>>2]|0)){h=10;break a}a=c+4|0;c=k[a>>2]|0;if(!c){l=a;while(1){a=k[l+8>>2]|0;if((k[a>>2]|0)==(l|0))l=a;else{m=a;break}}}else{l=c;while(1){a=k[l+4>>2]|0;if(!a){m=l;break}else l=a}}if(((k[m+20>>2]|0)+1|0)>>>0<=b>>>0){h=10;break a}n=iv(g,b)|0;break}case 2:{if((j[g+8>>1]&255)!=7){h=13;break a}l=i[f>>0]|0;c=(l&1)==0;a=c?f+1|0:k[f+8>>2]|0;o=ov(g,a,a+(c?(l&255)>>>1:k[f+4>>2]|0)|0)|0;if(!o)if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728);p=1736}else p=1736;else p=o;if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728)}if((p|0)==1736){h=23;break a}else n=p;break}default:n=g}f=f+20|0;if((f|0)==(k[d>>2]|0)){e=n;h=24;break}else g=n}if((h|0)==10){e=k[6034]|0;return e|0}else if((h|0)==13){e=k[6034]|0;return e|0}else if((h|0)==23){e=k[6034]|0;return e|0}else if((h|0)==24)return e|0;return 0}function hw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=k[b>>2]|0;f=b+4|0;a:do if((e|0)!=(k[f>>2]|0)){b=e;g=c;b:while(1){switch(k[b+16>>2]|0){case 1:{if((j[g+8>>1]&255)!=6){h=10;break b}l=k[b+12>>2]|0;m=k[g>>2]|0;if(!(k[m+8>>2]|0)){h=10;break b}n=m+4|0;m=k[n>>2]|0;if(!m){o=n;while(1){n=k[o+8>>2]|0;if((k[n>>2]|0)==(o|0))o=n;else{p=n;break}}}else{o=m;while(1){n=k[o+4>>2]|0;if(!n){p=o;break}else o=n}}if(((k[p+20>>2]|0)+1|0)>>>0<=l>>>0){h=10;break b}q=iv(g,l)|0;break}case 2:{if((j[g+8>>1]&255)!=7){h=13;break b}o=i[b>>0]|0;m=(o&1)==0;n=m?b+1|0:k[b+8>>2]|0;r=ov(g,n,n+(m?(o&255)>>>1:k[b+4>>2]|0)|0)|0;if(!r)if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728);s=1736}else s=1736;else s=r;if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728)}if((s|0)==1736){h=22;break b}else q=s;break}default:q=g}b=b+20|0;if((b|0)==(k[f>>2]|0)){t=q;break a}else g=q}if((h|0)==10){uu(a,d);return}else if((h|0)==13){uu(a,d);return}else if((h|0)==22){uu(a,d);return}}else t=c;while(0);uu(a,t);return}function iw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=k[a>>2]|0;d=a+4|0;if((c|0)==(k[d>>2]|0)){e=b;return e|0}else{f=c;g=b}while(1){switch(k[f+16>>2]|0){case 1:{h=gv(g,k[f+12>>2]|0)|0;break}case 2:{b=i[f>>0]|0;c=(b&1)==0;a=c?f+1|0:k[f+8>>2]|0;h=lv(g,a,a+(c?(b&255)>>>1:k[f+4>>2]|0)|0)|0;break}default:h=g}f=f+20|0;if((f|0)==(k[d>>2]|0)){e=h;break}else g=h}return e|0}function jw(){if((i[1728]|0)==0?(Bb(1728)|0)!=0:0){j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728)}k[6034]=1736;if(i[1728]|0){k[6035]=1736;return}if(!(Bb(1728)|0)){k[6035]=1736;return}j[872]=j[872]&-512;k[437]=0;k[438]=0;k[439]=0;Kc(1728);k[6035]=1736;return}function kw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+176|0;d=c+160|0;e=c+24|0;f=c+12|0;g=c;if(b>>>0<2147483643){h=xYa(b+5|0)|0;if(h){k[h>>2]=b;Dyb(h+4|0,a|0,b|0)|0;i[h+(b+4)>>0]=0;r=c;return h|0}q2a(g,212843,87);x=0;va(1477,g|0);x=0;h=Hc()|0;c=M;K2a(g);j=h;l=c;Sc(j|0)}c=e+56|0;h=e+4|0;k[e>>2]=20356;k[c>>2]=20376;x=0;xa(582,e+56|0,h|0);g=x;x=0;if(g&1){g=Hc()|0;m=M;n=g;mab(c);Sc(n|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,h|0);g=x;x=0;do if(g&1){b=Hc()|0;o=M;p=b}else{k[h>>2]=20392;b=e+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,h|0,d|0);a=x;x=0;if(a&1){a=Hc()|0;q=M;K2a(d);K2a(b);obb(h);o=q;p=a;break}K2a(d);x=0;Fa(92,e|0,212765,77)|0;a=x;x=0;if(!(a&1)?(x=0,xa(584,f|0,h|0),a=x,x=0,!(a&1)):0){x=0;va(1482,f|0);x=0;a=Hc()|0;q=M;K2a(f);s=a;t=q}else{q=Hc()|0;s=q;t=M}k[e>>2]=20300;k[c>>2]=20320;k[h>>2]=20392;K2a(b);obb(h);mab(c);j=s;l=t;Sc(j|0)}while(0);m=o;n=p;mab(c);Sc(n|0);return 0}function lw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(48)|0;i=h+16|0;x=0;xa(653,i|0,c|0);j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j;OBa(h);Sc(m|0)}j=h+24|0;x=0;xa(589,j|0,c+8|0);c=x;x=0;if(c&1){c=Hc()|0;n=M;o=k[i>>2]|0;if(!o){l=n;m=c;OBa(h);Sc(m|0)}if((k[h+20>>2]&3|0)!=1){l=n;m=c;OBa(h);Sc(m|0)}yYa(o);l=n;m=c;OBa(h);Sc(m|0)}k[g>>2]=k[b>>2];x=0;k[e>>2]=k[g>>2];g=db(66,a|0,e|0,f|0,i|0)|0;e=x;x=0;if(e&1){e=Hc()|0;xu(j);j=k[i>>2]|0;if(!j){OBa(h);Sc(e|0)}if((k[h+20>>2]&3|0)!=1){OBa(h);Sc(e|0)}yYa(j);OBa(h);Sc(e|0)}e=k[g>>2]|0;if(!e){j=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=j;k[g>>2]=h;j=k[k[a>>2]>>2]|0;if(!j)p=h;else{k[a>>2]=j;p=k[g>>2]|0}ui(k[a+4>>2]|0,p);p=a+8|0;k[p>>2]=(k[p>>2]|0)+1;q=h;r=d;return q|0}if((e|0)==(h|0)){q=e;r=d;return q|0}xu(h+24|0);p=k[h+16>>2]|0;if((p|0)!=0?(k[h+20>>2]&3|0)==1:0)yYa(p);OBa(h);q=e;r=d;return q|0}function mw(a,b){a=a|0;b=b|0;if(!b)return;mw(a,k[b>>2]|0);mw(a,k[b+4>>2]|0);xu(b+24|0);a=k[b+16>>2]|0;if((a|0)!=0?(k[b+20>>2]&3|0)==1:0)yYa(a);OBa(b);return}function nw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+16|0;d=c;e=a+4|0;f=ow(a,b,k[e>>2]|0,e)|0;do if((f|0)!=(e|0)){a=k[b>>2]|0;g=k[b+4>>2]|0;if(!a){if(g>>>0<(k[f+20>>2]|0)>>>0)break;else h=f;r=c;return h|0}i=g>>>2;g=(k[f+20>>2]|0)>>>2;j=k[f+16>>2]|0;if(!j){q2a(d,211297,18);x=0;va(1482,d|0);x=0;l=Hc()|0;K2a(d);Sc(l|0)}l=ZLa(a,j,g>>>0>>0?g:i)|0;if((l|0)<0)break;if(!(i>>>0>>0&(l|0)<1)){h=f;r=c;return h|0}}while(0);h=e;r=c;return h|0}function ow(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+16|0;e=a;if(!c){f=d;r=a;return f|0}g=b+4|0;h=d;d=c;a:while(1){c=d;b:while(1){i=k[c+16>>2]|0;j=k[c+20>>2]|0;do if(!i){if(j>>>0>=(k[g>>2]|0)>>>0){l=c;break b}}else{m=j>>>2;n=(k[g>>2]|0)>>>2;o=k[b>>2]|0;if(!o){p=6;break a}q=ZLa(i,o,n>>>0>>0?n:m)|0;if((q|0)>=0?!(m>>>0>>0&(q|0)<1):0){l=c;break b}else break}while(0);c=k[c+4>>2]|0;if(!c){f=h;p=13;break a}}d=k[l>>2]|0;if(!d){f=l;p=13;break}else h=l}if((p|0)==6){q2a(e,211297,18);x=0;va(1482,e|0);x=0;l=Hc()|0;K2a(e);Sc(l|0)}else if((p|0)==13){r=a;return f|0}return 0}function pw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d;ww(h,a,c);c=k[h>>2]|0;k[g>>2]=k[b>>2];x=0;k[e>>2]=k[g>>2];g=db(66,a|0,e|0,f|0,c+16|0)|0;e=x;x=0;if(e&1){e=Hc()|0;k[h>>2]=0;if(!c)Sc(e|0);if(((i[h+8>>0]|0)!=0?(xu(c+24|0),b=k[c+16>>2]|0,(b|0)!=0):0)?(k[c+20>>2]&3|0)==1:0)yYa(b);OBa(c);Sc(e|0)}e=k[g>>2]|0;if(e){k[h>>2]=0;if((e|0)==(c|0))j=e;else{if(!c){l=e;r=d;return l|0}if(((i[h+8>>0]|0)!=0?(xu(c+24|0),b=k[c+16>>2]|0,(b|0)!=0):0)?(k[c+20>>2]&3|0)==1:0)yYa(b);OBa(c);l=e;r=d;return l|0}}else{e=k[f>>2]|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=e;k[g>>2]=c;e=k[k[a>>2]>>2]|0;if(!e)m=c;else{k[a>>2]=e;m=k[g>>2]|0}ui(k[a+4>>2]|0,m);m=a+8|0;k[m>>2]=(k[m>>2]|0)+1;k[h>>2]=0;j=c}k[h>>2]=0;l=j;r=d;return l|0}function qw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=vw(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+24|0;r=c;return h|0}f=KBa(48)|0;x=0;xa(653,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}b=f+32|0;j[b>>1]=j[b>>1]&-512;k[f+36>>2]=0;k[f+40>>2]=0;k[f+44>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+24|0;r=c;return h|0}function rw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/12|0)+1|0;if(e>>>0>357913941){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/12|0;if(g>>>0<178956970){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/12|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=357913941;n=((k[c>>2]|0)-f|0)/12|0;o=6}if((o|0)==6){i=m;j=KBa(m*12|0)|0;l=n}n=j+(l*12|0)|0;l=n;m=j+(i*12|0)|0;k[n>>2]=k[b>>2];k[n+4>>2]=k[b+4>>2];k[n+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;b=n+12|0;i=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(i|0)){p=l;q=i;r=i}else{o=j;j=n;n=l;while(1){l=j+-12|0;o=o+-12|0;k[l>>2]=k[o>>2];k[l+4>>2]=k[o+4>>2];k[l+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;j=n+-12|0;l=j;if((o|0)==(i|0)){s=l;break}else n=l}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=m;m=q;if((r|0)!=(m|0)){d=r;do{d=d+-12|0;K2a(d)}while((d|0)!=(m|0))}if(!q)return;OBa(q);return}function sw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function tw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/20|0)+1|0;if(e>>>0>214748364){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/20|0;if(g>>>0<107374182){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/20|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=214748364;n=((k[c>>2]|0)-f|0)/20|0;o=6}if((o|0)==6){i=m;j=KBa(m*20|0)|0;l=n}n=j+(l*20|0)|0;m=n;o=j+(i*20|0)|0;x=0;xa(604,n|0,b|0);i=x;x=0;if(i&1){i=Hc()|0;if(!j)Sc(i|0);OBa(j);Sc(i|0)}i=b+12|0;b=k[i+4>>2]|0;f=j+(l*20|0)+12|0;k[f>>2]=k[i>>2];k[f+4>>2]=b;b=n+20|0;f=k[a>>2]|0;i=k[c>>2]|0;if((i|0)==(f|0)){p=m;q=f;r=f}else{l=i;i=n;n=m;while(1){m=i+-20|0;j=l;l=l+-20|0;k[m>>2]=k[l>>2];k[m+4>>2]=k[l+4>>2];k[m+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;m=j+-8|0;j=k[m+4>>2]|0;h=i+-8|0;k[h>>2]=k[m>>2];k[h+4>>2]=j;i=n+-20|0;j=i;if((l|0)==(f|0)){s=j;break}else n=j}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{d=d+-20|0;K2a(d)}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function uw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/20|0)+1|0;if(e>>>0>214748364){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/20|0;if(g>>>0<107374182){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/20|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=214748364;n=((k[c>>2]|0)-f|0)/20|0;o=6}if((o|0)==6){i=m;j=KBa(m*20|0)|0;l=n}n=j+(l*20|0)|0;m=n;o=j+(i*20|0)|0;k[n>>2]=k[b>>2];k[n+4>>2]=k[b+4>>2];k[n+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;i=b+12|0;b=k[i+4>>2]|0;f=j+(l*20|0)+12|0;k[f>>2]=k[i>>2];k[f+4>>2]=b;b=n+20|0;f=k[a>>2]|0;i=k[c>>2]|0;if((i|0)==(f|0)){p=m;q=f;r=f}else{l=i;i=n;n=m;while(1){m=i+-20|0;j=l;l=l+-20|0;k[m>>2]=k[l>>2];k[m+4>>2]=k[l+4>>2];k[m+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;m=j+-8|0;j=k[m+4>>2]|0;h=i+-8|0;k[h>>2]=k[m>>2];k[h+4>>2]=j;i=n+-20|0;j=i;if((l|0)==(f|0)){s=j;break}else n=j}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{d=d+-20|0;K2a(d)}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function vw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+16|0;e=d;f=a+4|0;a=k[f>>2]|0;if(!a){k[b>>2]=f;g=f;r=d;return g|0}f=k[c>>2]|0;h=k[c+4>>2]|0;c=(f|0)==0;i=h>>>2;j=h>>>2;l=a;a:while(1){a=l+16|0;m=l+20|0;n=k[m>>2]|0;do if(c)if(h>>>0>>0)o=11;else{p=a;o=13}else{q=n>>>2;s=k[a>>2]|0;if(!s){o=5;break a}t=ZLa(f,s,q>>>0>>0?q:j)|0;if((t|0)>=0?!(j>>>0>>0&(t|0)<1):0){p=a;o=13;break}else{o=11;break}}while(0);if((o|0)==11){o=0;a=k[l>>2]|0;if(!a){u=l;v=l;o=12;break}else w=a}else if((o|0)==13){o=0;a=k[p>>2]|0;n=k[m>>2]|0;do if(!a){if(n>>>0>=h>>>0){y=l;o=23;break a}}else{t=n>>>2;if(c){o=15;break a}q=ZLa(a,f,i>>>0>>0?i:t)|0;if((q|0)>=0?!(t>>>0>>0&(q|0)<1):0){y=l;o=23;break a}else break}while(0);a=l+4|0;n=k[a>>2]|0;if(!n){z=a;A=l;o=22;break}else w=n}l=w}if((o|0)==5){q2a(e,211297,18);x=0;va(1482,e|0);x=0;w=Hc()|0;K2a(e);Sc(w|0)}else if((o|0)==12){k[b>>2]=v;g=u;r=d;return g|0}else if((o|0)==15){q2a(e,211297,18);x=0;va(1482,e|0);x=0;u=Hc()|0;K2a(e);Sc(u|0)}else if((o|0)==22){k[b>>2]=A;g=z;r=d;return g|0}else if((o|0)==23){k[b>>2]=y;g=b;r=d;return g|0}return 0}function ww(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=KBa(48)|0;k[a>>2]=d;k[a+4>>2]=b+4;b=a+8|0;i[b>>0]=0;e=d+16|0;x=0;xa(653,e|0,c|0);f=x;x=0;if(!(f&1)){x=0;xa(589,d+24|0,c+8|0);c=x;x=0;if(!(c&1)){i[b>>0]=1;return}c=Hc()|0;f=M;g=k[e>>2]|0;if((g|0)!=0?(k[d+20>>2]&3|0)==1:0){yYa(g);h=f;j=c}else{h=f;j=c}}else{c=Hc()|0;h=M;j=c}c=k[a>>2]|0;k[a>>2]=0;if(!c)Sc(j|0);if(((i[b>>0]|0)!=0?(xu(c+24|0),b=k[c+16>>2]|0,(b|0)!=0):0)?(k[c+20>>2]&3|0)==1:0)yYa(b);OBa(c);Sc(j|0)}function xw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;e=r;r=r+16|0;f=e;g=a+4|0;h=k[b>>2]|0;b=h;a:do if((h|0)!=(g|0)){i=k[d>>2]|0;j=(i|0)==0;l=k[d+4>>2]|0;do if(!j){m=l>>>2;n=h+20|0;o=(k[n>>2]|0)>>>2;p=h+16|0;q=k[p>>2]|0;if(!q){q2a(f,211297,18);x=0;va(1482,f|0);x=0;s=Hc()|0;K2a(f);Sc(s|0)}s=ZLa(i,q,o>>>0>>0?o:m)|0;if((s|0)>=0?!(m>>>0>>0&(s|0)<1):0){t=p;u=n;break}else break a}else{n=h+20|0;if(l>>>0<(k[n>>2]|0)>>>0)break a;t=h+16|0;u=n}while(0);n=k[t>>2]|0;p=k[u>>2]|0;do if(!n){if(p>>>0>=l>>>0)v=47}else{s=p>>>2;o=l>>>2;if(j){q2a(f,211297,18);x=0;va(1482,f|0);x=0;m=Hc()|0;K2a(f);Sc(m|0)}m=ZLa(n,i,o>>>0>>0?o:s)|0;if((m|0)>=0?!(s>>>0>>0&(m|0)<1):0){v=47;break}else break}while(0);if((v|0)==47){k[c>>2]=b;w=c;r=e;return w|0}n=h+4|0;p=k[n>>2]|0;if(!p){m=h;while(1){o=k[m+8>>2]|0;if((k[o>>2]|0)==(m|0)){y=o;break}else m=o}}else{m=p;while(1){o=k[m>>2]|0;if(!o){y=m;break}else m=o}}b:do if((y|0)!=(g|0)){do if(j){if(l>>>0<(k[y+20>>2]|0)>>>0)break b}else{m=l>>>2;p=(k[y+20>>2]|0)>>>2;o=k[y+16>>2]|0;if(!o){q2a(f,211297,18);x=0;va(1482,f|0);x=0;s=Hc()|0;K2a(f);Sc(s|0)}s=ZLa(i,o,p>>>0>>0?p:m)|0;if((s|0)>=0?!(m>>>0

      >>0&(s|0)<1):0)break;else break b}while(0);w=yw(a,c,d)|0;r=e;return w|0}while(0);if(!(k[n>>2]|0)){k[c>>2]=h;w=n;r=e;return w|0}else{k[c>>2]=y;w=y;r=e;return w|0}}while(0);c:do if((h|0)==(k[a>>2]|0))z=b;else{y=k[h>>2]|0;if(!y){g=h;while(1){v=k[g+8>>2]|0;if((k[v>>2]|0)==(g|0))g=v;else{A=v;break}}}else{g=y;while(1){n=k[g+4>>2]|0;if(!n){A=g;break}else g=n}}g=A;y=k[A+16>>2]|0;n=k[A+20>>2]|0;do if(!y){if(n>>>0<(k[d+4>>2]|0)>>>0){z=g;break c}}else{v=n>>>2;u=(k[d+4>>2]|0)>>>2;t=k[d>>2]|0;if(!t){q2a(f,211297,18);x=0;va(1482,f|0);x=0;i=Hc()|0;K2a(f);Sc(i|0)}i=ZLa(y,t,u>>>0>>0?u:v)|0;if((i|0)>=0?!(v>>>0>>0&(i|0)<1):0)break;else{z=g;break c}}while(0);w=yw(a,c,d)|0;r=e;return w|0}while(0);if(!(k[h>>2]|0)){k[c>>2]=h;w=h;r=e;return w|0}else{h=z;k[c>>2]=h;w=h+4|0;r=e;return w|0}return 0}function yw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+16|0;e=d;f=a+4|0;a=k[f>>2]|0;if(!a){k[b>>2]=f;g=f;r=d;return g|0}f=k[c>>2]|0;h=k[c+4>>2]|0;c=(f|0)==0;i=h>>>2;j=h>>>2;l=a;a:while(1){a=l+16|0;m=l+20|0;n=k[m>>2]|0;do if(c)if(h>>>0>>0)o=11;else{p=a;o=13}else{q=n>>>2;s=k[a>>2]|0;if(!s){o=5;break a}t=ZLa(f,s,q>>>0>>0?q:j)|0;if((t|0)>=0?!(j>>>0>>0&(t|0)<1):0){p=a;o=13;break}else{o=11;break}}while(0);if((o|0)==11){o=0;a=k[l>>2]|0;if(!a){u=l;v=l;o=12;break}else w=a}else if((o|0)==13){o=0;a=k[p>>2]|0;n=k[m>>2]|0;do if(!a){if(n>>>0>=h>>>0){y=l;o=23;break a}}else{t=n>>>2;if(c){o=15;break a}q=ZLa(a,f,i>>>0>>0?i:t)|0;if((q|0)>=0?!(t>>>0>>0&(q|0)<1):0){y=l;o=23;break a}else break}while(0);a=l+4|0;n=k[a>>2]|0;if(!n){z=a;A=l;o=22;break}else w=n}l=w}if((o|0)==5){q2a(e,211297,18);x=0;va(1482,e|0);x=0;w=Hc()|0;K2a(e);Sc(w|0)}else if((o|0)==12){k[b>>2]=v;g=u;r=d;return g|0}else if((o|0)==15){q2a(e,211297,18);x=0;va(1482,e|0);x=0;u=Hc()|0;K2a(e);Sc(u|0)}else if((o|0)==22){k[b>>2]=A;g=z;r=d;return g|0}else if((o|0)==23){k[b>>2]=y;g=b;r=d;return g|0}return 0}function zw(a){a=a|0;k[a>>2]=24164;K2a(a+4|0);OBa(a);return}function Aw(a){a=a|0;k[a>>2]=24164;K2a(a+4|0);OBa(a);return}function Bw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+32|0;e=d;f=1688;if((k[f>>2]|0)==(b|0)?(k[f+4>>2]|0)==(c|0):0){f=1696;g=Hyb(k[f>>2]|0,k[f+4>>2]|0,1,0)|0;f=e+24|0;i[f>>0]=0;h=g;g=M;j=f;while(1){f=Syb(h|0,g|0,10,0)|0;l=j+-1|0;i[l>>0]=f|48;f=h;h=Ryb(h|0,g|0,10,0)|0;if(!(g>>>0>0|(g|0)==0&f>>>0>9)){m=j;break}else{g=M;j=l}}j=m+-2|0;i[j>>0]=45;n=j;o=RLa(n)|0;q2a(a,n,o);r=d;return}if((c|0)>=0){j=e+24|0;i[j>>0]=0;m=b;g=c;h=j;while(1){j=Syb(m|0,g|0,10,0)|0;l=h+-1|0;i[l>>0]=j|48;j=m;m=Ryb(m|0,g|0,10,0)|0;if(!(g>>>0>0|(g|0)==0&j>>>0>9)){n=l;break}else{g=M;h=l}}o=RLa(n)|0;q2a(a,n,o);r=d;return}h=Gyb(0,0,b|0,c|0)|0;c=e+24|0;i[c>>0]=0;e=h;h=M;b=c;while(1){c=Syb(e|0,h|0,10,0)|0;g=b+-1|0;i[g>>0]=c|48;c=e;e=Ryb(e|0,h|0,10,0)|0;if(!(h>>>0>0|(h|0)==0&c>>>0>9)){p=b;break}else{h=M;b=g}}b=p+-2|0;i[b>>0]=45;n=b;o=RLa(n)|0;q2a(a,n,o);r=d;return}function Cw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+32|0;e=d+24|0;i[e>>0]=0;f=e;e=b;b=c;while(1){c=Syb(e|0,b|0,10,0)|0;g=f+-1|0;i[g>>0]=c|48;c=e;e=Ryb(e|0,b|0,10,0)|0;if(!(b>>>0>0|(b|0)==0&c>>>0>9)){h=g;break}else{f=g;b=M}}q2a(a,h,RLa(h)|0);r=d;return}function Dw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c;e=((b|0)<0)<<31>>31;f=1688;if((k[f>>2]|0)==(b|0)?(k[f+4>>2]|0)==(e|0):0){f=1696;g=Hyb(k[f>>2]|0,k[f+4>>2]|0,1,0)|0;f=d+24|0;i[f>>0]=0;h=g;g=M;j=f;while(1){f=Syb(h|0,g|0,10,0)|0;l=j+-1|0;i[l>>0]=f|48;f=h;h=Ryb(h|0,g|0,10,0)|0;if(!(g>>>0>0|(g|0)==0&f>>>0>9)){m=j;break}else{g=M;j=l}}j=m+-2|0;i[j>>0]=45;n=j;o=RLa(n)|0;q2a(a,n,o);r=c;return}if((b|0)>=0){j=d+24|0;i[j>>0]=0;m=b;g=e;h=j;while(1){j=Syb(m|0,g|0,10,0)|0;l=h+-1|0;i[l>>0]=j|48;j=m;m=Ryb(m|0,g|0,10,0)|0;if(!(g>>>0>0|(g|0)==0&j>>>0>9)){n=l;break}else{g=M;h=l}}o=RLa(n)|0;q2a(a,n,o);r=c;return}h=Gyb(0,0,b|0,e|0)|0;e=d+24|0;i[e>>0]=0;d=h;h=M;b=e;while(1){e=Syb(d|0,h|0,10,0)|0;g=b+-1|0;i[g>>0]=e|48;e=d;d=Ryb(d|0,h|0,10,0)|0;if(!(h>>>0>0|(h|0)==0&e>>>0>9)){p=b;break}else{h=M;b=g}}b=p+-2|0;i[b>>0]=45;n=b;o=RLa(n)|0;q2a(a,n,o);r=c;return}function Ew(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+24|0;i[d>>0]=0;e=b;b=0;f=d;while(1){d=Syb(e|0,b|0,10,0)|0;g=f+-1|0;i[g>>0]=d|48;d=e;e=Ryb(e|0,b|0,10,0)|0;if(!(b>>>0>0|(b|0)==0&d>>>0>9)){h=g;break}else{b=M;f=g}}q2a(a,h,RLa(h)|0);r=c;return}function Fw(a,b){a=a|0;b=+b;Px(a,b,0,17);return}function Gw(a,b){a=a|0;b=b|0;q2a(a,b?330262:330267,b?4:5);return}function Hw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;c=r;r=r+208|0;d=c+184|0;e=c+160|0;f=c+12|0;g=c+172|0;h=c+24|0;j=c;if(!b){q2a(a,329672,0);r=c;return}a:do if(!(XMa(b,213102)|0)){l=b;while(1){m=i[l>>0]|0;if(!(m<<24>>24))break;if((m+-1&255)<31)break a;else l=l+1|0}q2a(f,276785,1);x=0;l=Ta(484,f|0,b|0)|0;m=x;x=0;do if(m&1){n=Hc()|0;o=n;p=M}else{k[e>>2]=k[l>>2];k[e+4>>2]=k[l+4>>2];k[e+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;n=Ta(484,e|0,276785)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(e);o=q;p=s;break};k[a>>2]=k[n>>2];k[a+4>>2]=k[n+4>>2];k[a+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;K2a(e);K2a(f);r=c;return}while(0);K2a(f);t=o;u=p;Sc(t|0)}while(0);p=((RLa(b)|0)<<1)+3|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;xa(603,g|0,p|0);p=x;x=0;b:do if(!(p&1)?(x=0,Ta(484,g|0,276785)|0,o=x,x=0,!(o&1)):0){o=i[b>>0]|0;c:do if(o<<24>>24){f=h+56|0;e=h+4|0;l=h+56|0;m=h+56|0;n=h+128|0;s=h+132|0;q=h+36|0;v=h+52|0;w=j+8|0;y=j+1|0;z=j+4|0;A=o;B=b;d:while(1){e:do switch(A<<24>>24|0){case 34:{x=0;Ta(484,g|0,213110)|0;C=x;x=0;if(C&1){D=17;break d}break}case 92:{x=0;Ta(484,g|0,213113)|0;C=x;x=0;if(C&1){D=17;break d}break}case 8:{x=0;Ta(484,g|0,213116)|0;C=x;x=0;if(C&1){D=17;break d}break}case 12:{x=0;Ta(484,g|0,213119)|0;C=x;x=0;if(C&1){D=17;break d}break}case 10:{x=0;Ta(484,g|0,213122)|0;C=x;x=0;if(C&1){D=17;break d}break}case 13:{x=0;Ta(484,g|0,213125)|0;C=x;x=0;if(C&1){D=17;break d}break}case 9:{x=0;Ta(484,g|0,213128)|0;C=x;x=0;if(C&1){D=17;break d}break}default:{if((A+-1&255)>=31){x=0;xa(605,g|0,A|0);C=x;x=0;if(C&1){D=17;break d}else break e}k[h>>2]=20356;k[f>>2]=20376;x=0;xa(582,l|0,e|0);C=x;x=0;if(C&1){D=33;break d}k[n>>2]=0;k[s>>2]=-1;k[h>>2]=20300;k[m>>2]=20320;x=0;va(1449,e|0);C=x;x=0;if(C&1){D=34;break d}k[e>>2]=20392;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[v>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,e|0,d|0);C=x;x=0;if(C&1){D=32;break d}K2a(d);x=0;C=Fa(92,h|0,213131,2)|0;E=x;x=0;if(E&1){D=42;break d}E=C+(k[(k[C>>2]|0)+-12>>2]|0)+4|0;k[E>>2]=k[E>>2]&-75|8;E=C+(k[(k[C>>2]|0)+-12>>2]|0)+4|0;k[E>>2]=k[E>>2]|16384;k[C+(k[(k[C>>2]|0)+-12>>2]|0)+76>>2]=48;k[C+(k[(k[C>>2]|0)+-12>>2]|0)+12>>2]=4;x=0;Ta(477,C|0,i[B>>0]|0)|0;C=x;x=0;if(C&1){D=42;break d}x=0;xa(584,j|0,e|0);C=x;x=0;if(C&1){D=42;break d}C=i[j>>0]|0;E=(C&1)==0;x=0;Fa(88,g|0,(E?y:k[w>>2]|0)|0,(E?(C&255)>>>1:k[z>>2]|0)|0)|0;C=x;x=0;if(C&1){D=43;break d}K2a(j);k[h>>2]=20300;k[f>>2]=20320;k[e>>2]=20392;K2a(q);obb(e);mab(f)}}while(0);B=B+1|0;A=i[B>>0]|0;if(!(A<<24>>24))break c}if((D|0)==17){A=Hc()|0;F=M;G=A;D=19;break b}else if((D|0)==32){A=Hc()|0;B=M;K2a(d);K2a(q);obb(e);H=B;I=A;D=35}else if((D|0)==33){A=Hc()|0;J=M;K=A}else if((D|0)==34){A=Hc()|0;H=M;I=A;D=35}else if((D|0)==42){A=Hc()|0;L=A;N=M;D=44}else if((D|0)==43){A=Hc()|0;B=M;K2a(j);L=A;N=B;D=44}if((D|0)==35){J=H;K=I}else if((D|0)==44){k[h>>2]=20300;k[f>>2]=20320;k[e>>2]=20392;K2a(q);obb(e);mab(f);O=L;P=N;break b}mab(f);F=J;G=K;D=19;break b}while(0);x=0;Ta(484,g|0,276785)|0;o=x;x=0;if(!(o&1)){k[a>>2]=k[g>>2];k[a+4>>2]=k[g+4>>2];k[a+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);r=c;return}else D=18}else D=18;while(0);if((D|0)==18){c=Hc()|0;F=M;G=c;D=19}if((D|0)==19){O=G;P=F}K2a(g);t=O;u=P;Sc(t|0)}function Iw(a){a=a|0;return}function Jw(a){a=a|0;OBa(a);return}function Kw(a){a=a|0;var b=0;k[a>>2]=24224;b=a+4|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;j[b+12>>1]=0;i[b+14>>0]=0;return}function Lw(a){a=a|0;i[a+16>>0]=1;return}function Mw(a){a=a|0;i[a+17>>0]=1;return}function Nw(a){a=a|0;i[a+18>>0]=1;return}function Ow(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=b+4|0;S2a(d,329672)|0;Pw(b,c);if(!(i[b+18>>0]|0))J3a(d,324246)|0;n2a(a,d);return}function Pw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;c=r;r=r+128|0;d=c+88|0;e=c+76|0;f=c+60|0;g=c+36|0;h=c+72|0;j=c+24|0;l=c+12|0;m=c+48|0;n=c;switch(Au(b)|0){case 0:{if(i[a+17>>0]|0){r=c;return}J3a(a+4|0,293757)|0;r=c;return}case 1:{o=a+4|0;p=Tu(b)|0;q=M;s=1688;a:do if((k[s>>2]|0)==(p|0)?(k[s+4>>2]|0)==(q|0):0){t=1696;u=Hyb(k[t>>2]|0,k[t+4>>2]|0,1,0)|0;t=d+24|0;i[t>>0]=0;v=u;u=M;w=t;while(1){t=Syb(v|0,u|0,10,0)|0;y=w+-1|0;i[y>>0]=t|48;t=v;v=Ryb(v|0,u|0,10,0)|0;if(!(u>>>0>0|(u|0)==0&t>>>0>9)){z=w;break}else{u=M;w=y}}w=z+-2|0;i[w>>0]=45;A=w}else{if((q|0)>=0){w=d+24|0;i[w>>0]=0;u=p;v=q;y=w;while(1){w=Syb(u|0,v|0,10,0)|0;t=y+-1|0;i[t>>0]=w|48;w=u;u=Ryb(u|0,v|0,10,0)|0;if(!(v>>>0>0|(v|0)==0&w>>>0>9)){A=t;break a}else{v=M;y=t}}}y=Gyb(0,0,p|0,q|0)|0;v=d+24|0;i[v>>0]=0;u=y;y=M;t=v;while(1){v=Syb(u|0,y|0,10,0)|0;w=t+-1|0;i[w>>0]=v|48;v=u;u=Ryb(u|0,y|0,10,0)|0;if(!(y>>>0>0|(y|0)==0&v>>>0>9)){B=t;break}else{y=M;t=w}}t=B+-2|0;i[t>>0]=45;A=t}while(0);q2a(e,A,RLa(A)|0);A=i[e>>0]|0;B=(A&1)==0;x=0;Fa(88,o|0,(B?e+1|0:k[e+8>>2]|0)|0,(B?(A&255)>>>1:k[e+4>>2]|0)|0)|0;A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(e);C=A;D=B;Sc(C|0)}else{K2a(e);r=c;return}break}case 2:{e=Uu(b)|0;B=d+24|0;i[B>>0]=0;A=e;e=M;o=B;while(1){B=Syb(A|0,e|0,10,0)|0;q=o+-1|0;i[q>>0]=B|48;B=A;A=Ryb(A|0,e|0,10,0)|0;if(!(e>>>0>0|(e|0)==0&B>>>0>9)){E=q;break}else{e=M;o=q}}q2a(f,E,RLa(E)|0);E=i[f>>0]|0;o=(E&1)==0;x=0;Fa(88,a+4|0,(o?f+1|0:k[f+8>>2]|0)|0,(o?(E&255)>>>1:k[f+4>>2]|0)|0)|0;E=x;x=0;if(E&1){E=Hc()|0;o=M;K2a(f);C=E;D=o;Sc(C|0)}else{K2a(f);r=c;return}break}case 3:{Px(g,+Vu(b),0,17);f=i[g>>0]|0;o=(f&1)==0;x=0;Fa(88,a+4|0,(o?g+1|0:k[g+8>>2]|0)|0,(o?(f&255)>>>1:k[g+4>>2]|0)|0)|0;f=x;x=0;if(f&1){f=Hc()|0;o=M;K2a(g);C=f;D=o;Sc(C|0)}else{K2a(g);r=c;return}break}case 4:{do if(Ju(b,d,h)|0){g=k[d>>2]|0;Qx(j,g,(k[h>>2]|0)-g|0);g=i[j>>0]|0;o=(g&1)==0;x=0;Fa(88,a+4|0,(o?j+1|0:k[j+8>>2]|0)|0,(o?(g&255)>>>1:k[j+4>>2]|0)|0)|0;g=x;x=0;if(!(g&1)){K2a(j);break}g=Hc()|0;o=M;K2a(j);C=g;D=o;Sc(C|0)}while(0);r=c;return}case 5:{j=Xu(b)|0;q2a(l,j?330262:330267,j?4:5);j=i[l>>0]|0;h=(j&1)==0;x=0;Fa(88,a+4|0,(h?l+1|0:k[l+8>>2]|0)|0,(h?(j&255)>>>1:k[l+4>>2]|0)|0)|0;j=x;x=0;if(j&1){j=Hc()|0;h=M;K2a(l);C=j;D=h;Sc(C|0)}else{K2a(l);r=c;return}break}case 6:{l=a+4|0;L3a(l,91);h=_u(b)|0;if(h){j=0;do{if(j)L3a(l,44);Pw(a,iv(b,j)|0);j=j+1|0}while((j|0)!=(h|0))}L3a(l,93);r=c;return}case 7:{Hv(m,b);l=a+4|0;x=0;xa(605,l|0,123);h=x;x=0;b:do if(!(h&1)){j=k[m>>2]|0;d=m+4|0;c:do if((j|0)!=(k[d>>2]|0)){o=n+8|0;g=n+1|0;f=n+4|0;E=a+16|0;e=j;A=j;while(1){if((e|0)!=(A|0)?(x=0,xa(605,l|0,44),q=x,x=0,q&1):0){F=42;break}q=i[e>>0]|0;if(!(q&1)){G=e+1|0;H=(q&255)>>>1}else{G=k[e+8>>2]|0;H=k[e+4>>2]|0}x=0;fb(179,n|0,G|0,H|0);q=x;x=0;if(q&1){F=42;break}q=i[n>>0]|0;B=(q&1)==0;x=0;Fa(88,l|0,(B?g:k[o>>2]|0)|0,(B?(q&255)>>>1:k[f>>2]|0)|0)|0;q=x;x=0;if(q&1){F=57;break}K2a(n);x=0;Ta(484,l|0,((i[E>>0]|0)!=0?325552:294915)|0)|0;q=x;x=0;if(q&1){F=42;break}x=0;q=Ta(513,b|0,e|0)|0;B=x;x=0;if(B&1){F=42;break}x=0;xa(654,a|0,q|0);q=x;x=0;if(q&1){F=42;break}q=e+12|0;if((q|0)==(k[d>>2]|0))break c;e=q;A=k[m>>2]|0}if((F|0)==42){A=Hc()|0;I=A;J=M;F=44;break b}else if((F|0)==57){A=Hc()|0;e=M;K2a(n);K=A;L=e;N=m;break b}}while(0);x=0;xa(605,l|0,125);j=x;x=0;if(!(j&1)){j=k[m>>2]|0;if(j){e=k[d>>2]|0;if((e|0)==(j|0))O=j;else{A=e;do{e=A+-12|0;k[d>>2]=e;K2a(e);A=k[d>>2]|0}while((A|0)!=(j|0));O=k[m>>2]|0}OBa(O)}r=c;return}else F=43}else F=43;while(0);if((F|0)==43){O=Hc()|0;I=O;J=M;F=44}if((F|0)==44){K=I;L=J;N=m}J=k[N>>2]|0;if(!J){C=K;D=L;Sc(C|0)}N=m+4|0;I=k[N>>2]|0;if((I|0)==(J|0))P=J;else{F=I;do{I=F+-12|0;k[N>>2]=I;K2a(I);F=k[N>>2]|0}while((F|0)!=(J|0));P=k[m>>2]|0}OBa(P);C=K;D=L;Sc(C|0);break}default:{r=c;return}}}function Qw(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=24244;b=a+40|0;c=a+4|0;d=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(d|0));k[b>>2]=74;k[a+44>>2]=3;i[a+48>>0]=0;return}function Rw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=b+16|0;S2a(d,329672)|0;i[b+48>>0]=0;S2a(b+28|0,329672)|0;Sw(b,c);Tw(b,c);Uw(b,c);J3a(d,324246)|0;n2a(a,d);return}function Sw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;c=r;r=r+16|0;d=c;if(!(Pv(b,0)|0)){r=c;return}e=a+16|0;J3a(e,324246)|0;f=i[e>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[a+20>>2]|0;a:do if(!h)j=11;else{if(g){l=(f&255)>>>1;m=e+1|0}else{l=k[a+20>>2]|0;m=k[a+24>>2]|0}switch(i[m+(l+-1)>>0]|0){case 32:{break a;break}case 10:{j=11;break a;break}default:{}}L3a(e,10);j=11}while(0);if((j|0)==11){j=a+28|0;l=i[j>>0]|0;m=(l&1)==0;O3a(e,m?j+1|0:k[a+36>>2]|0,m?(l&255)>>>1:k[a+32>>2]|0)|0}Qv(d,b,0);b=i[d>>0]|0;l=(b&1)==0;if(l){m=d+1|0;j=d+8|0;n=m;o=m;p=j;q=k[j>>2]|0}else{j=d+8|0;m=k[j>>2]|0;n=m;o=d+1|0;p=j;q=m}m=d+4|0;b:do if((n|0)!=((l?o:q)+(l?(b&255)>>>1:k[m>>2]|0)|0)){j=a+28|0;f=a+36|0;g=j+1|0;h=a+32|0;s=e+1|0;t=a+20|0;u=a+24|0;v=n;c:while(1){x=0;xa(605,e|0,i[v>>0]|0);w=x;x=0;if(w&1)break;d:do if(((i[v>>0]|0)==10?(w=i[d>>0]|0,y=(w&1)==0,(v|0)!=((y?o:k[p>>2]|0)+(y?(w&255)>>>1:k[m>>2]|0)|0)):0)?(i[v+1>>0]|0)==47:0){w=i[e>>0]|0;y=(w&1)==0;if(y)z=(w&255)>>>1;else z=k[t>>2]|0;e:do if(z){if(y){A=(w&255)>>>1;B=s}else{A=k[t>>2]|0;B=k[u>>2]|0}switch(i[B+(A+-1)>>0]|0){case 32:{break d;break}case 10:{break e;break}default:{}}x=0;xa(605,e|0,10);C=x;x=0;if(C&1)break c}while(0);w=i[j>>0]|0;y=(w&1)==0;x=0;Fa(88,e|0,(y?g:k[f>>2]|0)|0,(y?(w&255)>>>1:k[h>>2]|0)|0)|0;w=x;x=0;if(w&1)break c}while(0);v=v+1|0;w=i[d>>0]|0;y=(w&1)==0;if((v|0)==((y?o:k[p>>2]|0)+(y?(w&255)>>>1:k[m>>2]|0)|0))break b}v=Hc()|0;D=v;E=M;K2a(d);Sc(D|0)}while(0);x=0;Ta(484,e|0,324246)|0;e=x;x=0;if(e&1){e=Hc()|0;D=e;E=M;K2a(d);Sc(D|0)}else{K2a(d);r=c;return}}function Tw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+192|0;d=c+152|0;e=c+140|0;f=c+124|0;g=c+108|0;h=c+84|0;j=c+136|0;l=c+120|0;m=c+72|0;n=c+60|0;o=c+48|0;p=c+96|0;q=c+36|0;s=c+24|0;t=c+12|0;u=c;switch(Au(b)|0){case 0:{q2a(e,293757,4);do if(!(i[a+48>>0]|0)){v=i[e>>0]|0;w=(v&1)==0;x=0;Fa(88,a+16|0,(w?e+1|0:k[e+8>>2]|0)|0,(w?(v&255)>>>1:k[e+4>>2]|0)|0)|0;v=x;x=0;if(v&1)y=9;else y=8}else{v=a+8|0;w=k[v>>2]|0;if((w|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,e|0);z=x;x=0;if(z&1){y=9;break}else{y=8;break}}x=0;xa(604,w|0,e|0);w=x;x=0;if(w&1)y=9;else{k[v>>2]=(k[v>>2]|0)+12;y=8}}while(0);if((y|0)==8){K2a(e);r=c;return}else if((y|0)==9){v=Hc()|0;w=M;K2a(e);A=v;B=w;Sc(A|0)}break}case 1:{w=Tu(b)|0;v=M;e=1688;a:do if((k[e>>2]|0)==(w|0)?(k[e+4>>2]|0)==(v|0):0){z=1696;C=Hyb(k[z>>2]|0,k[z+4>>2]|0,1,0)|0;z=d+24|0;i[z>>0]=0;D=C;C=M;E=z;while(1){z=Syb(D|0,C|0,10,0)|0;F=E+-1|0;i[F>>0]=z|48;z=D;D=Ryb(D|0,C|0,10,0)|0;if(!(C>>>0>0|(C|0)==0&z>>>0>9)){G=E;break}else{C=M;E=F}}E=G+-2|0;i[E>>0]=45;H=E}else{if((v|0)>=0){E=d+24|0;i[E>>0]=0;C=w;D=v;F=E;while(1){E=Syb(C|0,D|0,10,0)|0;z=F+-1|0;i[z>>0]=E|48;E=C;C=Ryb(C|0,D|0,10,0)|0;if(!(D>>>0>0|(D|0)==0&E>>>0>9)){H=z;break a}else{D=M;F=z}}}F=Gyb(0,0,w|0,v|0)|0;D=d+24|0;i[D>>0]=0;C=F;F=M;z=D;while(1){D=Syb(C|0,F|0,10,0)|0;E=z+-1|0;i[E>>0]=D|48;D=C;C=Ryb(C|0,F|0,10,0)|0;if(!(F>>>0>0|(F|0)==0&D>>>0>9)){I=z;break}else{F=M;z=E}}z=I+-2|0;i[z>>0]=45;H=z}while(0);q2a(f,H,RLa(H)|0);do if(!(i[a+48>>0]|0)){H=i[f>>0]|0;I=(H&1)==0;x=0;Fa(88,a+16|0,(I?f+1|0:k[f+8>>2]|0)|0,(I?(H&255)>>>1:k[f+4>>2]|0)|0)|0;H=x;x=0;if(H&1)y=27;else y=26}else{H=a+8|0;I=k[H>>2]|0;if((I|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,f|0);v=x;x=0;if(v&1){y=27;break}else{y=26;break}}x=0;xa(604,I|0,f|0);I=x;x=0;if(I&1)y=27;else{k[H>>2]=(k[H>>2]|0)+12;y=26}}while(0);if((y|0)==26){K2a(f);r=c;return}else if((y|0)==27){H=Hc()|0;I=M;K2a(f);A=H;B=I;Sc(A|0)}break}case 2:{I=Uu(b)|0;H=d+24|0;i[H>>0]=0;f=I;I=M;v=H;while(1){H=Syb(f|0,I|0,10,0)|0;w=v+-1|0;i[w>>0]=H|48;H=f;f=Ryb(f|0,I|0,10,0)|0;if(!(I>>>0>0|(I|0)==0&H>>>0>9)){J=w;break}else{I=M;v=w}}q2a(g,J,RLa(J)|0);do if(!(i[a+48>>0]|0)){J=i[g>>0]|0;v=(J&1)==0;x=0;Fa(88,a+16|0,(v?g+1|0:k[g+8>>2]|0)|0,(v?(J&255)>>>1:k[g+4>>2]|0)|0)|0;J=x;x=0;if(J&1)y=37;else y=36}else{J=a+8|0;v=k[J>>2]|0;if((v|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,g|0);I=x;x=0;if(I&1){y=37;break}else{y=36;break}}x=0;xa(604,v|0,g|0);v=x;x=0;if(v&1)y=37;else{k[J>>2]=(k[J>>2]|0)+12;y=36}}while(0);if((y|0)==36){K2a(g);r=c;return}else if((y|0)==37){J=Hc()|0;v=M;K2a(g);A=J;B=v;Sc(A|0)}break}case 3:{Px(h,+Vu(b),0,17);do if(!(i[a+48>>0]|0)){v=i[h>>0]|0;J=(v&1)==0;x=0;Fa(88,a+16|0,(J?h+1|0:k[h+8>>2]|0)|0,(J?(v&255)>>>1:k[h+4>>2]|0)|0)|0;v=x;x=0;if(v&1)y=45;else y=44}else{v=a+8|0;J=k[v>>2]|0;if((J|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,h|0);g=x;x=0;if(g&1){y=45;break}else{y=44;break}}x=0;xa(604,J|0,h|0);J=x;x=0;if(J&1)y=45;else{k[v>>2]=(k[v>>2]|0)+12;y=44}}while(0);if((y|0)==44){K2a(h);r=c;return}else if((y|0)==45){v=Hc()|0;J=M;K2a(h);A=v;B=J;Sc(A|0)}break}case 4:{do if(Ju(b,j,l)|0){J=k[j>>2]|0;Qx(m,J,(k[l>>2]|0)-J|0);do if(!(i[a+48>>0]|0)){J=i[m>>0]|0;v=(J&1)==0;x=0;Fa(88,a+16|0,(v?m+1|0:k[m+8>>2]|0)|0,(v?(J&255)>>>1:k[m+4>>2]|0)|0)|0;J=x;x=0;if(!(J&1))y=53}else{J=a+8|0;v=k[J>>2]|0;if((v|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,m|0);h=x;x=0;if(h&1)break;else{y=53;break}}x=0;xa(604,v|0,m|0);v=x;x=0;if(!(v&1)){k[J>>2]=(k[J>>2]|0)+12;y=53}}while(0);if((y|0)==53){K2a(m);break}J=Hc()|0;v=M;K2a(m);A=J;B=v;Sc(A|0)}else{q2a(n,329672,0);do if(!(i[a+48>>0]|0)){v=i[n>>0]|0;J=(v&1)==0;x=0;Fa(88,a+16|0,(J?n+1|0:k[n+8>>2]|0)|0,(J?(v&255)>>>1:k[n+4>>2]|0)|0)|0;v=x;x=0;if(!(v&1))y=61}else{v=a+8|0;J=k[v>>2]|0;if((J|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,n|0);h=x;x=0;if(h&1)break;else{y=61;break}}x=0;xa(604,J|0,n|0);J=x;x=0;if(!(J&1)){k[v>>2]=(k[v>>2]|0)+12;y=61}}while(0);if((y|0)==61){K2a(n);break}v=Hc()|0;J=M;K2a(n);A=v;B=J;Sc(A|0)}while(0);r=c;return}case 5:{n=Xu(b)|0;q2a(o,n?330262:330267,n?4:5);do if(!(i[a+48>>0]|0)){n=i[o>>0]|0;m=(n&1)==0;x=0;Fa(88,a+16|0,(m?o+1|0:k[o+8>>2]|0)|0,(m?(n&255)>>>1:k[o+4>>2]|0)|0)|0;n=x;x=0;if(n&1)y=71;else y=70}else{n=a+8|0;m=k[n>>2]|0;if((m|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,o|0);l=x;x=0;if(l&1){y=71;break}else{y=70;break}}x=0;xa(604,m|0,o|0);m=x;x=0;if(m&1)y=71;else{k[n>>2]=(k[n>>2]|0)+12;y=70}}while(0);if((y|0)==70){K2a(o);r=c;return}else if((y|0)==71){n=Hc()|0;m=M;K2a(o);A=n;B=m;Sc(A|0)}break}case 6:{Ww(a,b);r=c;return}case 7:{Hv(p,b);m=p+4|0;x=0;do if((k[p>>2]|0)==(k[m>>2]|0)){q2a(q,213134,2);n=x;x=0;if(!(n&1)){do if(!(i[a+48>>0]|0)){n=i[q>>0]|0;o=(n&1)==0;x=0;Fa(88,a+16|0,(o?q+1|0:k[q+8>>2]|0)|0,(o?(n&255)>>>1:k[q+4>>2]|0)|0)|0;n=x;x=0;if(n&1)y=85;else y=81}else{n=a+8|0;o=k[n>>2]|0;if((o|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,q|0);l=x;x=0;if(l&1){y=85;break}else{y=81;break}}x=0;xa(604,o|0,q|0);o=x;x=0;if(o&1)y=85;else{k[n>>2]=(k[n>>2]|0)+12;y=81}}while(0);if((y|0)==81){K2a(q);y=115;break}else if((y|0)==85){n=Hc()|0;o=M;K2a(q);K=n;L=o;break}}else y=83}else{q2a(s,294911,1);o=x;x=0;if(!(o&1)){x=0;xa(656,a|0,s|0);o=x;x=0;if(o&1){o=Hc()|0;n=M;K2a(s);K=o;L=n;break}K2a(s);n=a+28|0;o=a+44|0;x=0;fb(180,d|0,k[o>>2]|0,32);l=x;x=0;if(!(l&1)){l=i[d>>0]|0;j=(l&1)==0;x=0;Fa(88,n|0,(j?d+1|0:k[d+8>>2]|0)|0,(j?(l&255)>>>1:k[d+4>>2]|0)|0)|0;l=x;x=0;if(l&1){l=Hc()|0;j=M;K2a(d);N=j;O=l;y=84;break}K2a(d);l=a+16|0;j=k[p>>2]|0;while(1){x=0;J=Ta(513,b|0,j|0)|0;v=x;x=0;if(v&1){y=82;break}x=0;xa(657,a|0,J|0);v=x;x=0;if(v&1){y=82;break}if(!(i[j>>0]&1))P=j+1|0;else P=k[j+8>>2]|0;x=0;xa(658,t|0,P|0);v=x;x=0;if(v&1){y=82;break}x=0;xa(656,a|0,t|0);v=x;x=0;if(v&1){y=104;break}K2a(t);x=0;Ta(484,l|0,213137)|0;v=x;x=0;if(v&1){y=82;break}x=0;xa(659,a|0,J|0);v=x;x=0;if(v&1){y=82;break}j=j+12|0;if((j|0)==(k[m>>2]|0)){Q=J;y=102;break}x=0;xa(605,l|0,44);v=x;x=0;if(v&1){y=82;break}x=0;xa(660,a|0,J|0);J=x;x=0;if(J&1){y=82;break}}if((y|0)==82){l=Hc()|0;N=M;O=l;y=84;break}else if((y|0)==102){x=0;xa(660,a|0,Q|0);l=x;x=0;if(l&1){y=83;break}l=i[n>>0]|0;if(!(l&1))R=(l&255)>>>1;else R=k[a+32>>2]|0;x=0;fb(147,n|0,R-(k[o>>2]|0)|0,0);l=x;x=0;if(l&1){y=83;break}x=0;fb(140,u|0,294913,1);l=x;x=0;if(l&1){y=83;break}x=0;xa(656,a|0,u|0);l=x;x=0;if(l&1){l=Hc()|0;j=M;K2a(u);K=l;L=j;break}else{K2a(u);y=115;break}}else if((y|0)==104){j=Hc()|0;l=M;K2a(t);K=j;L=l;break}}else y=83}else y=83}while(0);if((y|0)==83){t=Hc()|0;N=M;O=t;y=84}else if((y|0)==115){t=k[p>>2]|0;if(t){u=k[m>>2]|0;if((u|0)==(t|0))S=t;else{a=u;do{u=a+-12|0;k[m>>2]=u;K2a(u);a=k[m>>2]|0}while((a|0)!=(t|0));S=k[p>>2]|0}OBa(S)}r=c;return}if((y|0)==84){K=O;L=N}N=k[p>>2]|0;if(!N){A=K;B=L;Sc(A|0)}O=k[m>>2]|0;if((O|0)==(N|0))T=N;else{y=O;do{O=y+-12|0;k[m>>2]=O;K2a(O);y=k[m>>2]|0}while((y|0)!=(N|0));T=k[p>>2]|0}OBa(T);A=K;B=L;Sc(A|0);break}default:{r=c;return}}}function Uw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;a:do if(Pv(b,1)|0){Qv(e,b,1);x=0;g=Fa(86,e|0,0,324196)|0;h=x;x=0;do if(!(h&1)){k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;j=i[d>>0]|0;l=(j&1)==0;x=0;Fa(88,a+16|0,(l?d+1|0:k[d+8>>2]|0)|0,(l?(j&255)>>>1:k[d+4>>2]|0)|0)|0;j=x;x=0;if(j&1){j=Hc()|0;l=M;K2a(d);m=l;n=j;break}else{K2a(d);K2a(e);break a}}else{j=Hc()|0;m=M;n=j}while(0);K2a(e);o=m;p=n;Sc(p|0)}while(0);if(!(Pv(b,2)|0)){r=c;return}n=a+16|0;J3a(n,324246)|0;Qv(f,b,2);b=i[f>>0]|0;a=(b&1)==0;x=0;Fa(88,n|0,(a?f+1|0:k[f+8>>2]|0)|0,(a?(b&255)>>>1:k[f+4>>2]|0)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(f);o=a;p=b;Sc(p|0)}else{K2a(f);J3a(n,324246)|0;r=c;return}}function Vw(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(i[a+48>>0]|0)){c=i[b>>0]|0;d=(c&1)==0;O3a(a+16|0,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0;return}c=a+8|0;d=k[c>>2]|0;if((d|0)==(k[a+12>>2]|0)){Rx(a+4|0,b);return}else{n2a(d,b);k[c>>2]=(k[c>>2]|0)+12;return}}function Ww(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;c=r;r=r+48|0;d=c+36|0;e=c+24|0;f=c+12|0;g=c;h=_u(b)|0;if(!h){q2a(e,213141,2);do if(!(i[a+48>>0]|0)){j=i[e>>0]|0;l=(j&1)==0;x=0;Fa(88,a+16|0,(l?e+1|0:k[e+8>>2]|0)|0,(l?(j&255)>>>1:k[e+4>>2]|0)|0)|0;j=x;x=0;if(j&1)m=9;else m=8}else{j=a+8|0;l=k[j>>2]|0;if((l|0)==(k[a+12>>2]|0)){x=0;xa(655,a+4|0,e|0);n=x;x=0;if(n&1){m=9;break}else{m=8;break}}x=0;xa(604,l|0,e|0);l=x;x=0;if(l&1)m=9;else{k[j>>2]=(k[j>>2]|0)+12;m=8}}while(0);if((m|0)==8){K2a(e);r=c;return}else if((m|0)==9){j=Hc()|0;l=M;K2a(e);o=j;p=l;Sc(o|0)}}if(!(_w(a,b)|0)){l=a+16|0;J3a(l,239757)|0;j=a+4|0;e=0;do{if(e)J3a(l,300110)|0;n=k[j>>2]|0;q=n+(e*12|0)|0;s=i[q>>0]|0;t=(s&1)==0;O3a(l,t?q+1|0:k[n+(e*12|0)+8>>2]|0,t?(s&255)>>>1:k[n+(e*12|0)+4>>2]|0)|0;e=e+1|0}while((e|0)!=(h|0));J3a(l,239760)|0;r=c;return}q2a(f,316822,1);x=0;xa(656,a|0,f|0);l=x;x=0;if(l&1){l=Hc()|0;e=M;K2a(f);o=l;p=e;Sc(o|0)}K2a(f);f=a+28|0;e=a+44|0;D2a(d,k[e>>2]|0,32);l=i[d>>0]|0;j=(l&1)==0;x=0;Fa(88,f|0,(j?d+1|0:k[d+8>>2]|0)|0,(j?(l&255)>>>1:k[d+4>>2]|0)|0)|0;l=x;x=0;if(l&1){l=Hc()|0;K2a(d);Sc(l|0)}K2a(d);d=a+4|0;l=a+16|0;j=a+36|0;n=f+1|0;s=a+32|0;t=l+1|0;q=a+20|0;u=a+24|0;a:do if((k[d>>2]|0)!=(k[a+8>>2]|0)){v=iv(b,0)|0;Sw(a,v);Xw(a,k[d>>2]|0);if((h|0)==1)w=v;else{y=v;v=1;while(1){L3a(l,44);Uw(a,y);z=iv(b,v)|0;Sw(a,z);Xw(a,(k[d>>2]|0)+(v*12|0)|0);v=v+1|0;if((v|0)==(h|0)){w=z;break}else y=z}}}else{y=0;while(1){v=iv(b,y)|0;Sw(a,v);z=i[l>>0]|0;A=(z&1)==0;if(A)B=(z&255)>>>1;else B=k[q>>2]|0;b:do if(!B)m=25;else{if(A){C=(z&255)>>>1;D=t}else{C=k[q>>2]|0;D=k[u>>2]|0}switch(i[D+(C+-1)>>0]|0){case 32:{break b;break}case 10:{m=25;break b;break}default:{}}L3a(l,10);m=25}while(0);if((m|0)==25){m=0;z=i[f>>0]|0;A=(z&1)==0;O3a(l,A?n:k[j>>2]|0,A?(z&255)>>>1:k[s>>2]|0)|0}Tw(a,v);z=y+1|0;if((z|0)==(h|0)){w=v;break a}L3a(l,44);Uw(a,v);y=z}}while(0);Uw(a,w);w=i[f>>0]|0;if(!(w&1))E=(w&255)>>>1;else E=k[s>>2]|0;q3a(f,E-(k[e>>2]|0)|0,0);q2a(g,316824,1);x=0;xa(656,a|0,g|0);a=x;x=0;if(a&1){a=Hc()|0;e=M;K2a(g);o=a;p=e;Sc(o|0)}else{K2a(g);r=c;return}}function Xw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=a+16|0;d=i[c>>0]|0;e=(d&1)==0;if(e)f=(d&255)>>>1;else f=k[a+20>>2]|0;a:do if(!f)g=10;else{if(e){h=(d&255)>>>1;j=c+1|0}else{h=k[a+20>>2]|0;j=k[a+24>>2]|0}switch(i[j+(h+-1)>>0]|0){case 32:{break a;break}case 10:{g=10;break a;break}default:{}}L3a(c,10);g=10}while(0);if((g|0)==10){g=a+28|0;h=i[g>>0]|0;j=(h&1)==0;O3a(c,j?g+1|0:k[a+36>>2]|0,j?(h&255)>>>1:k[a+32>>2]|0)|0}a=i[b>>0]|0;h=(a&1)==0;O3a(c,h?b+1|0:k[b+8>>2]|0,h?(a&255)>>>1:k[b+4>>2]|0)|0;return}function Yw(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b;D2a(c,k[a+44>>2]|0,32);d=i[c>>0]|0;e=(d&1)==0;x=0;Fa(88,a+28|0,(e?c+1|0:k[c+8>>2]|0)|0,(e?(d&255)>>>1:k[c+4>>2]|0)|0)|0;d=x;x=0;if(d&1){d=Hc()|0;K2a(c);Sc(d|0)}else{K2a(c);r=b;return}}function Zw(a){a=a|0;var b=0,c=0,d=0;b=a+28|0;c=i[b>>0]|0;if(!(c&1))d=(c&255)>>>1;else d=k[a+32>>2]|0;q3a(b,d-(k[a+44>>2]|0)|0,0);return}function _w(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;c=_u(b)|0;d=a+40|0;e=(c*3|0)>>>0>=(k[d>>2]|0)>>>0;f=a+4|0;g=k[f>>2]|0;h=a+8|0;j=k[h>>2]|0;if((j|0)!=(g|0)){l=j;do{j=l+-12|0;k[h>>2]=j;K2a(j);l=k[h>>2]|0}while((l|0)!=(g|0))}g=(c|0)==0;if(g|e)m=e;else{e=0;do{l=iv(b,e)|0;if(!(bv(l)|0)?!(cv(l)|0):0)n=0;else n=(_u(l)|0)!=0;e=e+1|0}while(!(e>>>0>=c>>>0|n));m=n}if(m){o=1;return o|0}m=a+12|0;n=k[f>>2]|0;e=n;if((((k[m>>2]|0)-n|0)/12|0)>>>0>>0){l=k[h>>2]|0;j=l;if(g)p=0;else p=KBa(c*12|0)|0;q=p+(((l-n|0)/12|0)*12|0)|0;l=q;r=p+(c*12|0)|0;if((j|0)==(e|0)){s=l;t=n;u=e}else{n=j;j=q;q=l;while(1){p=j+-12|0;n=n+-12|0;k[p>>2]=k[n>>2];k[p+4>>2]=k[n+4>>2];k[p+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;j=q+-12|0;p=j;if((n|0)==(e|0)){v=p;break}else q=p}s=v;t=k[f>>2]|0;u=k[h>>2]|0}k[f>>2]=s;k[h>>2]=l;k[m>>2]=r;r=t;if((u|0)!=(r|0)){m=u;do{m=m+-12|0;K2a(m)}while((m|0)!=(r|0))}if(t)OBa(t)}t=a+48|0;i[t>>0]=1;r=(c<<1)+2|0;if(!g){g=0;m=0;u=r;do{l=iv(b,g)|0;if(!(Pv(l,0)|0)?!(Pv(l,1)|0):0)w=Pv(l,2)|0;else w=1;m=m|w;Tw(a,iv(b,g)|0);l=k[f>>2]|0;h=i[l+(g*12|0)>>0]|0;if(!(h&1))x=(h&255)>>>1;else x=k[l+(g*12|0)+4>>2]|0;u=x+u|0;g=g+1|0}while((g|0)!=(c|0));i[t>>0]=0;if(m){o=1;return o|0}else y=u}else{i[t>>0]=0;y=r}o=y>>>0>=(k[d>>2]|0)>>>0;return o|0}function $w(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+16|0;c=i[b>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+20>>2]|0;a:do if(e){if(d){f=(c&255)>>>1;g=b+1|0}else{f=k[a+20>>2]|0;g=k[a+24>>2]|0}switch(i[g+(f+-1)>>0]|0){case 10:{break a;break}case 32:return;default:{L3a(b,10);break a}}}while(0);f=a+28|0;g=i[f>>0]|0;c=(g&1)==0;O3a(b,c?f+1|0:k[a+36>>2]|0,c?(g&255)>>>1:k[a+32>>2]|0)|0;return}function ax(a,b){a=a|0;b=b|0;var c=0;if(Pv(b,0)|0){c=1;return c|0}if(Pv(b,1)|0){c=1;return c|0}c=Pv(b,2)|0;return c|0}function bx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=a+4|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a+24>>2]=0;k[a+28>>2]=74;x=0;xa(604,a+32|0,b|0);b=x;x=0;if(!(b&1)){b=a+44|0;i[b>>0]=i[b>>0]&-2;return}b=Hc()|0;K2a(a+16|0);d=k[a>>2]|0;if(!d)Sc(b|0);e=k[c>>2]|0;if((e|0)==(d|0))f=d;else{g=e;do{e=g+-12|0;k[c>>2]=e;K2a(e);g=k[c>>2]|0}while((g|0)!=(d|0));f=k[a>>2]|0}OBa(f);Sc(b|0)}function cx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d;f=a+12|0;k[f>>2]=b;b=a+44|0;i[b>>0]=i[b>>0]&-2;g=a+16|0;S2a(g,329672)|0;i[b>>0]=i[b>>0]|2;dx(a,c);h=i[b>>0]|0;if(!(h&2)){j=k[f>>2]|0;i[e>>0]=10;l=ei(j,e,1)|0;e=i[g>>0]|0;j=(e&1)==0;ei(l,j?g+1|0:k[a+24>>2]|0,j?(e&255)>>>1:k[a+20>>2]|0)|0;m=i[b>>0]|0}else m=h;i[b>>0]=m|2;fx(a,c);gx(a,c);ei(k[f>>2]|0,324246,1)|0;k[f>>2]=0;r=d;return}function dx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+16|0;d=c+12|0;e=c;if(!(Pv(b,0)|0)){r=c;return}f=a+44|0;if(!(i[f>>0]&2)){g=k[a+12>>2]|0;i[d>>0]=10;h=ei(g,d,1)|0;g=a+16|0;j=i[g>>0]|0;l=(j&1)==0;ei(h,l?g+1|0:k[a+24>>2]|0,l?(j&255)>>>1:k[a+20>>2]|0)|0}Qv(e,b,0);b=i[e>>0]|0;j=(b&1)==0;if(j){l=e+1|0;g=e+8|0;m=l;n=l;o=g;p=k[g>>2]|0}else{g=e+8|0;l=k[g>>2]|0;m=l;n=e+1|0;o=g;p=l}l=e+4|0;a:do if((m|0)!=((j?n:p)+(j?(b&255)>>>1:k[l>>2]|0)|0)){g=a+12|0;h=a+16|0;q=a+24|0;s=h+1|0;t=a+20|0;u=m;while(1){v=k[g>>2]|0;i[d>>0]=i[u>>0]|0;x=0;Fa(92,v|0,d|0,1)|0;v=x;x=0;if(v&1){w=14;break}if((((i[u>>0]|0)==10?(v=i[e>>0]|0,y=(v&1)==0,(u|0)!=((y?n:k[o>>2]|0)+(y?(v&255)>>>1:k[l>>2]|0)|0)):0)?(i[u+1>>0]|0)==47:0)?(v=i[h>>0]|0,y=(v&1)==0,x=0,Fa(92,k[g>>2]|0,(y?s:k[q>>2]|0)|0,(y?(v&255)>>>1:k[t>>2]|0)|0)|0,v=x,x=0,v&1):0){w=14;break}u=u+1|0;v=i[e>>0]|0;y=(v&1)==0;if((u|0)==((y?n:k[o>>2]|0)+(y?(v&255)>>>1:k[l>>2]|0)|0))break a}if((w|0)==14){u=Hc()|0;K2a(e);Sc(u|0)}}while(0);i[f>>0]=i[f>>0]&-3;K2a(e);r=c;return}function ex(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=k[a+12>>2]|0;i[c>>0]=10;e=ei(d,c,1)|0;c=a+16|0;d=i[c>>0]|0;f=(d&1)==0;ei(e,f?c+1|0:k[a+24>>2]|0,f?(d&255)>>>1:k[a+20>>2]|0)|0;r=b;return}function fx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;c=r;r=r+192|0;d=c+154|0;e=c+153|0;f=c+152|0;g=c+140|0;h=c+124|0;j=c+108|0;l=c+84|0;m=c+136|0;n=c+120|0;o=c+72|0;p=c+60|0;q=c+48|0;s=c+96|0;t=c+36|0;u=c+24|0;v=c+12|0;w=c;switch(Au(b)|0){case 0:{q2a(g,293757,4);do if(!(i[a+44>>0]&1)){y=i[g>>0]|0;z=(y&1)==0;x=0;Fa(92,k[a+12>>2]|0,(z?g+1|0:k[g+8>>2]|0)|0,(z?(y&255)>>>1:k[g+4>>2]|0)|0)|0;y=x;x=0;if(y&1)A=9;else A=8}else{y=a+4|0;z=k[y>>2]|0;if((z|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,g|0);B=x;x=0;if(B&1){A=9;break}else{A=8;break}}x=0;xa(604,z|0,g|0);z=x;x=0;if(z&1)A=9;else{k[y>>2]=(k[y>>2]|0)+12;A=8}}while(0);if((A|0)==8){K2a(g);r=c;return}else if((A|0)==9){y=Hc()|0;z=M;K2a(g);C=y;D=z;Sc(C|0)}break}case 1:{z=Tu(b)|0;y=M;g=1688;a:do if((k[g>>2]|0)==(z|0)?(k[g+4>>2]|0)==(y|0):0){B=1696;E=Hyb(k[B>>2]|0,k[B+4>>2]|0,1,0)|0;B=d+24|0;i[B>>0]=0;F=E;E=M;G=B;while(1){B=Syb(F|0,E|0,10,0)|0;H=G+-1|0;i[H>>0]=B|48;B=F;F=Ryb(F|0,E|0,10,0)|0;if(!(E>>>0>0|(E|0)==0&B>>>0>9)){I=G;break}else{E=M;G=H}}G=I+-2|0;i[G>>0]=45;J=G}else{if((y|0)>=0){G=d+24|0;i[G>>0]=0;E=z;F=y;H=G;while(1){G=Syb(E|0,F|0,10,0)|0;B=H+-1|0;i[B>>0]=G|48;G=E;E=Ryb(E|0,F|0,10,0)|0;if(!(F>>>0>0|(F|0)==0&G>>>0>9)){J=B;break a}else{F=M;H=B}}}H=Gyb(0,0,z|0,y|0)|0;F=d+24|0;i[F>>0]=0;E=H;H=M;B=F;while(1){F=Syb(E|0,H|0,10,0)|0;G=B+-1|0;i[G>>0]=F|48;F=E;E=Ryb(E|0,H|0,10,0)|0;if(!(H>>>0>0|(H|0)==0&F>>>0>9)){K=B;break}else{H=M;B=G}}B=K+-2|0;i[B>>0]=45;J=B}while(0);q2a(h,J,RLa(J)|0);do if(!(i[a+44>>0]&1)){J=i[h>>0]|0;K=(J&1)==0;x=0;Fa(92,k[a+12>>2]|0,(K?h+1|0:k[h+8>>2]|0)|0,(K?(J&255)>>>1:k[h+4>>2]|0)|0)|0;J=x;x=0;if(J&1)A=27;else A=26}else{J=a+4|0;K=k[J>>2]|0;if((K|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,h|0);y=x;x=0;if(y&1){A=27;break}else{A=26;break}}x=0;xa(604,K|0,h|0);K=x;x=0;if(K&1)A=27;else{k[J>>2]=(k[J>>2]|0)+12;A=26}}while(0);if((A|0)==26){K2a(h);r=c;return}else if((A|0)==27){J=Hc()|0;K=M;K2a(h);C=J;D=K;Sc(C|0)}break}case 2:{K=Uu(b)|0;J=d+24|0;i[J>>0]=0;h=K;K=M;y=J;while(1){J=Syb(h|0,K|0,10,0)|0;z=y+-1|0;i[z>>0]=J|48;J=h;h=Ryb(h|0,K|0,10,0)|0;if(!(K>>>0>0|(K|0)==0&J>>>0>9)){L=z;break}else{K=M;y=z}}q2a(j,L,RLa(L)|0);do if(!(i[a+44>>0]&1)){L=i[j>>0]|0;y=(L&1)==0;x=0;Fa(92,k[a+12>>2]|0,(y?j+1|0:k[j+8>>2]|0)|0,(y?(L&255)>>>1:k[j+4>>2]|0)|0)|0;L=x;x=0;if(L&1)A=37;else A=36}else{L=a+4|0;y=k[L>>2]|0;if((y|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,j|0);K=x;x=0;if(K&1){A=37;break}else{A=36;break}}x=0;xa(604,y|0,j|0);y=x;x=0;if(y&1)A=37;else{k[L>>2]=(k[L>>2]|0)+12;A=36}}while(0);if((A|0)==36){K2a(j);r=c;return}else if((A|0)==37){L=Hc()|0;y=M;K2a(j);C=L;D=y;Sc(C|0)}break}case 3:{Px(l,+Vu(b),0,17);do if(!(i[a+44>>0]&1)){y=i[l>>0]|0;L=(y&1)==0;x=0;Fa(92,k[a+12>>2]|0,(L?l+1|0:k[l+8>>2]|0)|0,(L?(y&255)>>>1:k[l+4>>2]|0)|0)|0;y=x;x=0;if(y&1)A=45;else A=44}else{y=a+4|0;L=k[y>>2]|0;if((L|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,l|0);j=x;x=0;if(j&1){A=45;break}else{A=44;break}}x=0;xa(604,L|0,l|0);L=x;x=0;if(L&1)A=45;else{k[y>>2]=(k[y>>2]|0)+12;A=44}}while(0);if((A|0)==44){K2a(l);r=c;return}else if((A|0)==45){y=Hc()|0;L=M;K2a(l);C=y;D=L;Sc(C|0)}break}case 4:{do if(Ju(b,m,n)|0){L=k[m>>2]|0;Qx(o,L,(k[n>>2]|0)-L|0);do if(!(i[a+44>>0]&1)){L=i[o>>0]|0;y=(L&1)==0;x=0;Fa(92,k[a+12>>2]|0,(y?o+1|0:k[o+8>>2]|0)|0,(y?(L&255)>>>1:k[o+4>>2]|0)|0)|0;L=x;x=0;if(!(L&1))A=53}else{L=a+4|0;y=k[L>>2]|0;if((y|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,o|0);l=x;x=0;if(l&1)break;else{A=53;break}}x=0;xa(604,y|0,o|0);y=x;x=0;if(!(y&1)){k[L>>2]=(k[L>>2]|0)+12;A=53}}while(0);if((A|0)==53){K2a(o);break}L=Hc()|0;y=M;K2a(o);C=L;D=y;Sc(C|0)}else{q2a(p,329672,0);do if(!(i[a+44>>0]&1)){y=i[p>>0]|0;L=(y&1)==0;x=0;Fa(92,k[a+12>>2]|0,(L?p+1|0:k[p+8>>2]|0)|0,(L?(y&255)>>>1:k[p+4>>2]|0)|0)|0;y=x;x=0;if(!(y&1))A=61}else{y=a+4|0;L=k[y>>2]|0;if((L|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,p|0);l=x;x=0;if(l&1)break;else{A=61;break}}x=0;xa(604,L|0,p|0);L=x;x=0;if(!(L&1)){k[y>>2]=(k[y>>2]|0)+12;A=61}}while(0);if((A|0)==61){K2a(p);break}y=Hc()|0;L=M;K2a(p);C=y;D=L;Sc(C|0)}while(0);r=c;return}case 5:{p=Xu(b)|0;q2a(q,p?330262:330267,p?4:5);do if(!(i[a+44>>0]&1)){p=i[q>>0]|0;o=(p&1)==0;x=0;Fa(92,k[a+12>>2]|0,(o?q+1|0:k[q+8>>2]|0)|0,(o?(p&255)>>>1:k[q+4>>2]|0)|0)|0;p=x;x=0;if(p&1)A=71;else A=70}else{p=a+4|0;o=k[p>>2]|0;if((o|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,q|0);n=x;x=0;if(n&1){A=71;break}else{A=70;break}}x=0;xa(604,o|0,q|0);o=x;x=0;if(o&1)A=71;else{k[p>>2]=(k[p>>2]|0)+12;A=70}}while(0);if((A|0)==70){K2a(q);r=c;return}else if((A|0)==71){p=Hc()|0;o=M;K2a(q);C=p;D=o;Sc(C|0)}break}case 6:{ix(a,b);r=c;return}case 7:{Hv(s,b);o=s+4|0;x=0;do if((k[s>>2]|0)==(k[o>>2]|0)){q2a(t,213134,2);p=x;x=0;if(!(p&1)){do if(!(i[a+44>>0]&1)){p=i[t>>0]|0;q=(p&1)==0;x=0;Fa(92,k[a+12>>2]|0,(q?t+1|0:k[t+8>>2]|0)|0,(q?(p&255)>>>1:k[t+4>>2]|0)|0)|0;p=x;x=0;if(p&1)A=85;else A=81}else{p=a+4|0;q=k[p>>2]|0;if((q|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,t|0);n=x;x=0;if(n&1){A=85;break}else{A=81;break}}x=0;xa(604,q|0,t|0);q=x;x=0;if(q&1)A=85;else{k[p>>2]=(k[p>>2]|0)+12;A=81}}while(0);if((A|0)==81){K2a(t);A=125;break}else if((A|0)==85){p=Hc()|0;q=M;K2a(t);N=p;O=q;break}}else A=83}else{q2a(u,294911,1);q=x;x=0;if(q&1)A=83;else{q=a+44|0;p=a+12|0;if(!(i[q>>0]&2)){n=k[p>>2]|0;i[e>>0]=10;x=0;m=Fa(92,n|0,e|0,1)|0;n=x;x=0;if(!(n&1)?(n=a+16|0,L=i[n>>0]|0,y=(L&1)==0,x=0,Fa(92,m|0,(y?n+1|0:k[a+24>>2]|0)|0,(y?(L&255)>>>1:k[a+20>>2]|0)|0)|0,L=x,x=0,!(L&1)):0)A=90}else A=90;if((A|0)==90?(L=i[u>>0]|0,y=(L&1)==0,x=0,Fa(92,k[p>>2]|0,(y?u+1|0:k[u+8>>2]|0)|0,(y?(L&255)>>>1:k[u+4>>2]|0)|0)|0,L=x,x=0,!(L&1)):0){i[q>>0]=i[q>>0]&-3;K2a(u);L=a+16|0;y=a+32|0;n=i[y>>0]|0;m=(n&1)==0;l=a+36|0;x=0;Fa(88,L|0,(m?y+1|0:k[a+40>>2]|0)|0,(m?(n&255)>>>1:k[l>>2]|0)|0)|0;n=x;x=0;if(n&1){A=83;break}n=a+24|0;m=L+1|0;j=a+20|0;K=v+8|0;h=v+1|0;z=v+4|0;J=k[s>>2]|0;while(1){x=0;I=Ta(513,b|0,J|0)|0;g=x;x=0;if(g&1){A=82;break}x=0;xa(661,a|0,I|0);g=x;x=0;if(g&1){A=82;break}if(!(i[J>>0]&1))P=J+1|0;else P=k[J+8>>2]|0;x=0;xa(658,v|0,P|0);g=x;x=0;if(g&1){A=82;break}if(!(i[q>>0]&2)){g=k[p>>2]|0;i[d>>0]=10;x=0;B=Fa(92,g|0,d|0,1)|0;g=x;x=0;if(g&1){A=108;break}g=i[L>>0]|0;H=(g&1)==0;x=0;Fa(92,B|0,(H?m:k[n>>2]|0)|0,(H?(g&255)>>>1:k[j>>2]|0)|0)|0;g=x;x=0;if(g&1){A=108;break}}g=i[v>>0]|0;H=(g&1)==0;x=0;Fa(92,k[p>>2]|0,(H?h:k[K>>2]|0)|0,(H?(g&255)>>>1:k[z>>2]|0)|0)|0;g=x;x=0;if(g&1){A=108;break}i[q>>0]=i[q>>0]&-3;K2a(v);x=0;Fa(92,k[p>>2]|0,213137,3)|0;g=x;x=0;if(g&1){A=82;break}x=0;xa(662,a|0,I|0);g=x;x=0;if(g&1){A=82;break}J=J+12|0;if((J|0)==(k[o>>2]|0)){Q=I;A=106;break}x=0;Fa(92,k[p>>2]|0,301287,1)|0;g=x;x=0;if(g&1){A=82;break}x=0;xa(663,a|0,I|0);I=x;x=0;if(I&1){A=82;break}}if((A|0)==82){J=Hc()|0;R=J;S=M;A=84;break}else if((A|0)==106){x=0;xa(663,a|0,Q|0);J=x;x=0;if(J&1){A=83;break}J=i[L>>0]|0;if(!(J&1))T=(J&255)>>>1;else T=k[j>>2]|0;J=i[y>>0]|0;if(!(J&1))U=(J&255)>>>1;else U=k[l>>2]|0;x=0;fb(147,L|0,T-U|0,0);J=x;x=0;if(J&1){A=83;break}x=0;fb(140,w|0,294913,1);J=x;x=0;if(J&1){A=83;break}if(!(i[q>>0]&2)){J=k[p>>2]|0;i[f>>0]=10;x=0;z=Fa(92,J|0,f|0,1)|0;J=x;x=0;if(!(J&1)?(J=i[L>>0]|0,K=(J&1)==0,x=0,Fa(92,z|0,(K?m:k[n>>2]|0)|0,(K?(J&255)>>>1:k[j>>2]|0)|0)|0,J=x,x=0,!(J&1)):0)A=122}else A=122;if((A|0)==122?(J=i[w>>0]|0,K=(J&1)==0,x=0,Fa(92,k[p>>2]|0,(K?w+1|0:k[w+8>>2]|0)|0,(K?(J&255)>>>1:k[w+4>>2]|0)|0)|0,J=x,x=0,!(J&1)):0){i[q>>0]=i[q>>0]&-3;K2a(w);A=125;break}J=Hc()|0;K=M;K2a(w);N=J;O=K;break}else if((A|0)==108){K=Hc()|0;J=M;K2a(v);N=K;O=J;break}}J=Hc()|0;K=M;K2a(u);N=J;O=K}}while(0);if((A|0)==83){u=Hc()|0;R=u;S=M;A=84}else if((A|0)==125){u=k[s>>2]|0;if(u){v=k[o>>2]|0;if((v|0)==(u|0))V=u;else{w=v;do{v=w+-12|0;k[o>>2]=v;K2a(v);w=k[o>>2]|0}while((w|0)!=(u|0));V=k[s>>2]|0}OBa(V)}r=c;return}if((A|0)==84){N=R;O=S}S=k[s>>2]|0;if(!S){C=N;D=O;Sc(C|0)}R=k[o>>2]|0;if((R|0)==(S|0))W=S;else{A=R;do{R=A+-12|0;k[o>>2]=R;K2a(R);A=k[o>>2]|0}while((A|0)!=(S|0));W=k[s>>2]|0}OBa(W);C=N;D=O;Sc(C|0);break}default:{r=c;return}}}function gx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c+24|0;e=c+12|0;f=c;do if(Pv(b,1)|0){g=k[a+12>>2]|0;i[d>>0]=32;h=ei(g,d,1)|0;Qv(e,b,1);g=i[e>>0]|0;j=(g&1)==0;x=0;Fa(92,h|0,(j?e+1|0:k[e+8>>2]|0)|0,(j?(g&255)>>>1:k[e+4>>2]|0)|0)|0;g=x;x=0;if(!(g&1)){K2a(e);break}g=Hc()|0;j=M;K2a(e);l=j;m=g;Sc(m|0)}while(0);if(!(Pv(b,2)|0)){n=a+44|0;o=i[n>>0]|0;p=o&-3;i[n>>0]=p;r=c;return}e=a+12|0;g=k[e>>2]|0;i[d>>0]=10;j=ei(g,d,1)|0;d=a+16|0;g=i[d>>0]|0;h=(g&1)==0;ei(j,h?d+1|0:k[a+24>>2]|0,h?(g&255)>>>1:k[a+20>>2]|0)|0;g=k[e>>2]|0;Qv(f,b,2);b=i[f>>0]|0;e=(b&1)==0;x=0;Fa(92,g|0,(e?f+1|0:k[f+8>>2]|0)|0,(e?(b&255)>>>1:k[f+4>>2]|0)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;e=M;K2a(f);l=e;m=b;Sc(m|0)}else{K2a(f);n=a+44|0;o=i[n>>0]|0;p=o&-3;i[n>>0]=p;r=c;return}}function hx(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(i[a+44>>0]&1)){c=i[b>>0]|0;d=(c&1)==0;ei(k[a+12>>2]|0,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0;return}c=a+4|0;d=k[c>>2]|0;if((d|0)==(k[a+8>>2]|0)){Rx(a,b);return}else{n2a(d,b);k[c>>2]=(k[c>>2]|0)+12;return}}function ix(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+48|0;d=c+37|0;e=c+36|0;f=c+24|0;g=c+12|0;h=c;j=_u(b)|0;if(!j){q2a(f,213141,2);do if(!(i[a+44>>0]&1)){l=i[f>>0]|0;m=(l&1)==0;x=0;Fa(92,k[a+12>>2]|0,(m?f+1|0:k[f+8>>2]|0)|0,(m?(l&255)>>>1:k[f+4>>2]|0)|0)|0;l=x;x=0;if(l&1)n=9;else n=8}else{l=a+4|0;m=k[l>>2]|0;if((m|0)==(k[a+8>>2]|0)){x=0;xa(655,a|0,f|0);o=x;x=0;if(o&1){n=9;break}else{n=8;break}}x=0;xa(604,m|0,f|0);m=x;x=0;if(m&1)n=9;else{k[l>>2]=(k[l>>2]|0)+12;n=8}}while(0);if((n|0)==8){K2a(f);r=c;return}else if((n|0)==9){l=Hc()|0;m=M;K2a(f);p=l;q=m;Sc(p|0)}}if(!(mx(a,b)|0)){m=a+12|0;ei(k[m>>2]|0,239757,2)|0;l=0;do{if(l)ei(k[m>>2]|0,300110,2)|0;f=k[a>>2]|0;o=f+(l*12|0)|0;s=i[o>>0]|0;t=(s&1)==0;ei(k[m>>2]|0,t?o+1|0:k[f+(l*12|0)+8>>2]|0,t?(s&255)>>>1:k[f+(l*12|0)+4>>2]|0)|0;l=l+1|0}while((l|0)!=(j|0));ei(k[m>>2]|0,239760,2)|0;r=c;return}q2a(g,316822,1);m=a+44|0;l=a+12|0;if(!(i[m>>0]&2)){f=k[l>>2]|0;i[e>>0]=10;x=0;s=Fa(92,f|0,e|0,1)|0;e=x;x=0;if(!(e&1)?(e=a+16|0,f=i[e>>0]|0,t=(f&1)==0,x=0,Fa(92,s|0,(t?e+1|0:k[a+24>>2]|0)|0,(t?(f&255)>>>1:k[a+20>>2]|0)|0)|0,f=x,x=0,!(f&1)):0)n=14}else n=14;if((n|0)==14?(f=i[g>>0]|0,t=(f&1)==0,x=0,Fa(92,k[l>>2]|0,(t?g+1|0:k[g+8>>2]|0)|0,(t?(f&255)>>>1:k[g+4>>2]|0)|0)|0,f=x,x=0,!(f&1)):0){i[m>>0]=i[m>>0]&-3;K2a(g);f=a+16|0;t=a+32|0;e=i[t>>0]|0;s=(e&1)==0;o=a+36|0;O3a(f,s?t+1|0:k[a+40>>2]|0,s?(e&255)>>>1:k[o>>2]|0)|0;e=a+24|0;s=f+1|0;u=a+20|0;a:do if((k[a>>2]|0)==(k[a+4>>2]|0)){v=0;while(1){w=iv(b,v)|0;dx(a,w);y=i[m>>0]|0;if(!(y&2)){z=k[l>>2]|0;i[d>>0]=10;A=ei(z,d,1)|0;z=i[f>>0]|0;B=(z&1)==0;ei(A,B?s:k[e>>2]|0,B?(z&255)>>>1:k[u>>2]|0)|0;C=i[m>>0]|0}else C=y;i[m>>0]=C|2;fx(a,w);i[m>>0]=i[m>>0]&-3;y=v+1|0;if((y|0)==(j|0)){D=w;break a}ei(k[l>>2]|0,301287,1)|0;gx(a,w);v=y}}else{v=0;while(1){y=iv(b,v)|0;dx(a,y);w=k[a>>2]|0;z=w+(v*12|0)|0;if(!(i[m>>0]&2)){B=k[l>>2]|0;i[d>>0]=10;A=ei(B,d,1)|0;B=i[f>>0]|0;E=(B&1)==0;ei(A,E?s:k[e>>2]|0,E?(B&255)>>>1:k[u>>2]|0)|0}B=i[z>>0]|0;E=(B&1)==0;ei(k[l>>2]|0,E?z+1|0:k[w+(v*12|0)+8>>2]|0,E?(B&255)>>>1:k[w+(v*12|0)+4>>2]|0)|0;i[m>>0]=i[m>>0]&-3;w=v+1|0;if((w|0)==(j|0)){D=y;break a}ei(k[l>>2]|0,301287,1)|0;gx(a,y);v=w}}while(0);gx(a,D);D=i[f>>0]|0;if(!(D&1))F=(D&255)>>>1;else F=k[u>>2]|0;D=i[t>>0]|0;if(!(D&1))G=(D&255)>>>1;else G=k[o>>2]|0;q3a(f,F-G|0,0);q2a(h,316824,1);if(!(i[m>>0]&2)){G=k[l>>2]|0;i[d>>0]=10;x=0;F=Fa(92,G|0,d|0,1)|0;d=x;x=0;if(!(d&1)?(d=i[f>>0]|0,f=(d&1)==0,x=0,Fa(92,F|0,(f?s:k[e>>2]|0)|0,(f?(d&255)>>>1:k[u>>2]|0)|0)|0,u=x,x=0,!(u&1)):0)n=33}else n=33;if((n|0)==33?(n=i[h>>0]|0,u=(n&1)==0,x=0,Fa(92,k[l>>2]|0,(u?h+1|0:k[h+8>>2]|0)|0,(u?(n&255)>>>1:k[h+4>>2]|0)|0)|0,n=x,x=0,!(n&1)):0){i[m>>0]=i[m>>0]&-3;K2a(h);r=c;return}c=Hc()|0;m=M;K2a(h);p=c;q=m;Sc(p|0)}m=Hc()|0;c=M;K2a(g);p=m;q=c;Sc(p|0)}function jx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+16|0;d=c;e=a+44|0;f=a+12|0;if(!(i[e>>0]&2)){g=k[f>>2]|0;i[d>>0]=10;h=ei(g,d,1)|0;d=a+16|0;g=i[d>>0]|0;j=(g&1)==0;ei(h,j?d+1|0:k[a+24>>2]|0,j?(g&255)>>>1:k[a+20>>2]|0)|0}a=i[b>>0]|0;g=(a&1)==0;ei(k[f>>2]|0,g?b+1|0:k[b+8>>2]|0,g?(a&255)>>>1:k[b+4>>2]|0)|0;i[e>>0]=i[e>>0]&-3;r=c;return}function kx(a){a=a|0;var b=0,c=0,d=0;b=a+32|0;c=i[b>>0]|0;d=(c&1)==0;O3a(a+16|0,d?b+1|0:k[a+40>>2]|0,d?(c&255)>>>1:k[a+36>>2]|0)|0;return}function lx(a){a=a|0;var b=0,c=0,d=0,e=0;b=a+16|0;c=i[b>>0]|0;if(!(c&1))d=(c&255)>>>1;else d=k[a+20>>2]|0;c=i[a+32>>0]|0;if(!(c&1))e=(c&255)>>>1;else e=k[a+36>>2]|0;q3a(b,d-e|0,0);return}function mx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;c=_u(b)|0;d=a+28|0;e=(c*3|0)>>>0>=(k[d>>2]|0)>>>0;f=k[a>>2]|0;g=a+4|0;h=k[g>>2]|0;if((h|0)!=(f|0)){j=h;do{h=j+-12|0;k[g>>2]=h;K2a(h);j=k[g>>2]|0}while((j|0)!=(f|0))}f=(c|0)==0;if(f|e)l=e;else{e=0;do{j=iv(b,e)|0;if(!(bv(j)|0)?!(cv(j)|0):0)m=0;else m=(_u(j)|0)!=0;e=e+1|0}while(!(e>>>0>=c>>>0|m));l=m}if(l){n=1;return n|0}l=a+8|0;m=k[a>>2]|0;e=m;if((((k[l>>2]|0)-m|0)/12|0)>>>0>>0){j=k[g>>2]|0;h=j;if(f)o=0;else o=KBa(c*12|0)|0;p=o+(((j-m|0)/12|0)*12|0)|0;j=p;q=o+(c*12|0)|0;if((h|0)==(e|0)){r=j;s=m;t=e}else{m=h;h=p;p=j;while(1){o=h+-12|0;m=m+-12|0;k[o>>2]=k[m>>2];k[o+4>>2]=k[m+4>>2];k[o+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;h=p+-12|0;o=h;if((m|0)==(e|0)){u=o;break}else p=o}r=u;s=k[a>>2]|0;t=k[g>>2]|0}k[a>>2]=r;k[g>>2]=j;k[l>>2]=q;q=s;if((t|0)!=(q|0)){l=t;do{l=l+-12|0;K2a(l)}while((l|0)!=(q|0))}if(s)OBa(s)}s=a+44|0;q=i[s>>0]|0;i[s>>0]=q|1;l=(c<<1)+2|0;if(!f){f=0;t=0;j=l;do{g=iv(b,f)|0;if(!(Pv(g,0)|0)?!(Pv(g,1)|0):0)v=Pv(g,2)|0;else v=1;t=t|v;fx(a,iv(b,f)|0);g=k[a>>2]|0;r=i[g+(f*12|0)>>0]|0;if(!(r&1))w=(r&255)>>>1;else w=k[g+(f*12|0)+4>>2]|0;j=w+j|0;f=f+1|0}while((f|0)!=(c|0));i[s>>0]=i[s>>0]&-2;if(t){n=1;return n|0}else x=j}else{i[s>>0]=q&-2;x=l}n=x>>>0>=(k[d>>2]|0)>>>0;return n|0}function nx(a,b){a=a|0;b=b|0;var c=0;if(Pv(b,0)|0){c=1;return c|0}if(Pv(b,1)|0){c=1;return c|0}c=Pv(b,2)|0;return c|0}function ox(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;k[a+4>>2]=0;k[a>>2]=24264;j=a+8|0;l=a+12|0;m=a+20|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[j+20>>2]=0;k[a+32>>2]=74;n=a+36|0;x=0;xa(604,n|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;o=M;p=b}else{k[a+48>>2]=c;c=a+52|0;x=0;xa(604,c|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;q=M;r=d}else{d=a+64|0;x=0;xa(604,d|0,e|0);e=x;x=0;do if(!(e&1)){x=0;xa(604,a+76|0,f|0);b=x;x=0;if(b&1){b=Hc()|0;s=M;K2a(d);t=s;u=b;break}else{b=a+88|0;i[b>>0]=i[b>>0]&-8|(g&1)<<2&255;k[a+92>>2]=h;return}}else{b=Hc()|0;t=M;u=b}while(0);K2a(c);q=t;r=u}K2a(n);o=q;p=r}K2a(m);m=k[j>>2]|0;if(!m)Sc(p|0);r=k[l>>2]|0;if((r|0)==(m|0))v=m;else{q=r;do{r=q+-12|0;k[l>>2]=r;K2a(r);q=k[l>>2]|0}while((q|0)!=(m|0));v=k[j>>2]|0}OBa(v);Sc(p|0)}function px(a){a=a|0;k[a>>2]=24284;k[a+4>>2]=0;return}function qx(a){a=a|0;return}function rx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d;f=a+4|0;k[f>>2]=c;c=a+88|0;i[c>>0]=i[c>>0]&-4|2;g=a+20|0;S2a(g,329672)|0;sx(a,b);h=i[c>>0]|0;if(!(h&2)){j=i[a+36>>0]|0;if(!(j&1))l=(j&255)>>>1;else l=k[a+40>>2]|0;if(l){l=k[f>>2]|0;i[e>>0]=10;j=ei(l,e,1)|0;e=i[g>>0]|0;l=(e&1)==0;ei(j,l?g+1|0:k[a+28>>2]|0,l?(e&255)>>>1:k[a+24>>2]|0)|0;m=i[c>>0]|0}else m=h}else m=h;i[c>>0]=m|2;ux(a,b);vx(a,b);b=a+76|0;m=i[b>>0]|0;c=(m&1)==0;ei(k[f>>2]|0,c?b+1|0:k[a+84>>2]|0,c?(m&255)>>>1:k[a+80>>2]|0)|0;k[f>>2]=0;r=d;return 0}function sx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+16|0;d=c+12|0;e=c;if(!(k[a+48>>2]|0)){r=c;return}if(!(Pv(b,0)|0)){r=c;return}f=a+88|0;if(!(i[f>>0]&2)){g=i[a+36>>0]|0;if(!(g&1))h=(g&255)>>>1;else h=k[a+40>>2]|0;if(h){h=k[a+4>>2]|0;i[d>>0]=10;g=ei(h,d,1)|0;h=a+20|0;j=i[h>>0]|0;l=(j&1)==0;ei(g,l?h+1|0:k[a+28>>2]|0,l?(j&255)>>>1:k[a+24>>2]|0)|0}}Qv(e,b,0);b=i[e>>0]|0;j=(b&1)==0;if(j){l=e+1|0;h=e+8|0;m=l;n=l;o=h;p=k[h>>2]|0}else{h=e+8|0;l=k[h>>2]|0;m=l;n=e+1|0;o=h;p=l}l=e+4|0;a:do if((m|0)!=((j?n:p)+(j?(b&255)>>>1:k[l>>2]|0)|0)){h=a+4|0;g=a+20|0;q=a+28|0;s=g+1|0;t=a+24|0;u=m;while(1){v=k[h>>2]|0;i[d>>0]=i[u>>0]|0;x=0;Fa(92,v|0,d|0,1)|0;v=x;x=0;if(v&1){w=19;break}if((((i[u>>0]|0)==10?(v=i[e>>0]|0,y=(v&1)==0,(u|0)!=((y?n:k[o>>2]|0)+(y?(v&255)>>>1:k[l>>2]|0)|0)):0)?(i[u+1>>0]|0)==47:0)?(v=i[g>>0]|0,y=(v&1)==0,x=0,Fa(92,k[h>>2]|0,(y?s:k[q>>2]|0)|0,(y?(v&255)>>>1:k[t>>2]|0)|0)|0,v=x,x=0,v&1):0){w=19;break}u=u+1|0;v=i[e>>0]|0;y=(v&1)==0;if((u|0)==((y?n:k[o>>2]|0)+(y?(v&255)>>>1:k[l>>2]|0)|0))break a}if((w|0)==19){u=Hc()|0;K2a(e);Sc(u|0)}}while(0);i[f>>0]=i[f>>0]&-3;K2a(e);r=c;return}function tx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=i[a+36>>0]|0;if(!(d&1))e=(d&255)>>>1;else e=k[a+40>>2]|0;if(!e){r=b;return}e=k[a+4>>2]|0;i[c>>0]=10;d=ei(e,c,1)|0;c=a+20|0;e=i[c>>0]|0;f=(e&1)==0;ei(d,f?c+1|0:k[a+28>>2]|0,f?(e&255)>>>1:k[a+24>>2]|0)|0;r=b;return}function ux(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;c=r;r=r+176|0;d=c+136|0;e=c+124|0;f=c+108|0;g=c+84|0;h=c+120|0;j=c+72|0;l=c+60|0;m=c+48|0;n=c+96|0;o=c+36|0;p=c+24|0;q=c+12|0;s=c;switch(Au(b)|0){case 0:{t=a+64|0;if(!(i[a+88>>0]&1)){u=i[t>>0]|0;v=(u&1)==0;ei(k[a+4>>2]|0,v?t+1|0:k[a+72>>2]|0,v?(u&255)>>>1:k[a+68>>2]|0)|0;r=c;return}u=a+12|0;v=k[u>>2]|0;if((v|0)==(k[a+16>>2]|0)){Rx(a+8|0,t);r=c;return}else{n2a(v,t);k[u>>2]=(k[u>>2]|0)+12;r=c;return}break}case 1:{u=Tu(b)|0;t=M;v=1688;a:do if((k[v>>2]|0)==(u|0)?(k[v+4>>2]|0)==(t|0):0){w=1696;y=Hyb(k[w>>2]|0,k[w+4>>2]|0,1,0)|0;w=d+24|0;i[w>>0]=0;z=y;y=M;A=w;while(1){w=Syb(z|0,y|0,10,0)|0;B=A+-1|0;i[B>>0]=w|48;w=z;z=Ryb(z|0,y|0,10,0)|0;if(!(y>>>0>0|(y|0)==0&w>>>0>9)){C=A;break}else{y=M;A=B}}A=C+-2|0;i[A>>0]=45;D=A}else{if((t|0)>=0){A=d+24|0;i[A>>0]=0;y=A;A=u;z=t;while(1){B=Syb(A|0,z|0,10,0)|0;w=y+-1|0;i[w>>0]=B|48;B=A;A=Ryb(A|0,z|0,10,0)|0;if(!(z>>>0>0|(z|0)==0&B>>>0>9)){D=w;break a}else{y=w;z=M}}}z=Gyb(0,0,u|0,t|0)|0;y=d+24|0;i[y>>0]=0;A=z;z=M;w=y;while(1){y=Syb(A|0,z|0,10,0)|0;B=w+-1|0;i[B>>0]=y|48;y=A;A=Ryb(A|0,z|0,10,0)|0;if(!(z>>>0>0|(z|0)==0&y>>>0>9)){E=w;break}else{z=M;w=B}}w=E+-2|0;i[w>>0]=45;D=w}while(0);q2a(e,D,RLa(D)|0);do if(!(i[a+88>>0]&1)){D=i[e>>0]|0;E=(D&1)==0;x=0;Fa(92,k[a+4>>2]|0,(E?e+1|0:k[e+8>>2]|0)|0,(E?(D&255)>>>1:k[e+4>>2]|0)|0)|0;D=x;x=0;if(D&1)F=24;else F=23}else{D=a+12|0;E=k[D>>2]|0;if((E|0)==(k[a+16>>2]|0)){x=0;xa(655,a+8|0,e|0);t=x;x=0;if(t&1){F=24;break}else{F=23;break}}x=0;xa(604,E|0,e|0);E=x;x=0;if(E&1)F=24;else{k[D>>2]=(k[D>>2]|0)+12;F=23}}while(0);if((F|0)==23){K2a(e);r=c;return}else if((F|0)==24){D=Hc()|0;E=M;K2a(e);G=D;H=E;Sc(G|0)}break}case 2:{E=Uu(b)|0;D=d+24|0;i[D>>0]=0;e=E;E=M;t=D;while(1){D=Syb(e|0,E|0,10,0)|0;u=t+-1|0;i[u>>0]=D|48;D=e;e=Ryb(e|0,E|0,10,0)|0;if(!(E>>>0>0|(E|0)==0&D>>>0>9)){I=u;break}else{E=M;t=u}}q2a(f,I,RLa(I)|0);do if(!(i[a+88>>0]&1)){I=i[f>>0]|0;t=(I&1)==0;x=0;Fa(92,k[a+4>>2]|0,(t?f+1|0:k[f+8>>2]|0)|0,(t?(I&255)>>>1:k[f+4>>2]|0)|0)|0;I=x;x=0;if(I&1)F=34;else F=33}else{I=a+12|0;t=k[I>>2]|0;if((t|0)==(k[a+16>>2]|0)){x=0;xa(655,a+8|0,f|0);E=x;x=0;if(E&1){F=34;break}else{F=33;break}}x=0;xa(604,t|0,f|0);t=x;x=0;if(t&1)F=34;else{k[I>>2]=(k[I>>2]|0)+12;F=33}}while(0);if((F|0)==33){K2a(f);r=c;return}else if((F|0)==34){I=Hc()|0;t=M;K2a(f);G=I;H=t;Sc(G|0)}break}case 3:{J=+Vu(b);t=a+88|0;Px(g,J,(i[t>>0]&4)!=0,k[a+92>>2]|0);do if(!(i[t>>0]&1)){I=i[g>>0]|0;f=(I&1)==0;x=0;Fa(92,k[a+4>>2]|0,(f?g+1|0:k[g+8>>2]|0)|0,(f?(I&255)>>>1:k[g+4>>2]|0)|0)|0;I=x;x=0;if(I&1)F=42;else F=41}else{I=a+12|0;f=k[I>>2]|0;if((f|0)==(k[a+16>>2]|0)){x=0;xa(655,a+8|0,g|0);E=x;x=0;if(E&1){F=42;break}else{F=41;break}}x=0;xa(604,f|0,g|0);f=x;x=0;if(f&1)F=42;else{k[I>>2]=(k[I>>2]|0)+12;F=41}}while(0);if((F|0)==41){K2a(g);r=c;return}else if((F|0)==42){t=Hc()|0;I=M;K2a(g);G=t;H=I;Sc(G|0)}break}case 4:{do if(Ju(b,d,h)|0){I=k[d>>2]|0;Qx(j,I,(k[h>>2]|0)-I|0);do if(!(i[a+88>>0]&1)){I=i[j>>0]|0;t=(I&1)==0;x=0;Fa(92,k[a+4>>2]|0,(t?j+1|0:k[j+8>>2]|0)|0,(t?(I&255)>>>1:k[j+4>>2]|0)|0)|0;I=x;x=0;if(!(I&1))F=50}else{I=a+12|0;t=k[I>>2]|0;if((t|0)==(k[a+16>>2]|0)){x=0;xa(655,a+8|0,j|0);g=x;x=0;if(g&1)break;else{F=50;break}}x=0;xa(604,t|0,j|0);t=x;x=0;if(!(t&1)){k[I>>2]=(k[I>>2]|0)+12;F=50}}while(0);if((F|0)==50){K2a(j);break}I=Hc()|0;t=M;K2a(j);G=I;H=t;Sc(G|0)}else{q2a(l,329672,0);do if(!(i[a+88>>0]&1)){t=i[l>>0]|0;I=(t&1)==0;x=0;Fa(92,k[a+4>>2]|0,(I?l+1|0:k[l+8>>2]|0)|0,(I?(t&255)>>>1:k[l+4>>2]|0)|0)|0;t=x;x=0;if(!(t&1))F=58}else{t=a+12|0;I=k[t>>2]|0;if((I|0)==(k[a+16>>2]|0)){x=0;xa(655,a+8|0,l|0);g=x;x=0;if(g&1)break;else{F=58;break}}x=0;xa(604,I|0,l|0);I=x;x=0;if(!(I&1)){k[t>>2]=(k[t>>2]|0)+12;F=58}}while(0);if((F|0)==58){K2a(l);break}t=Hc()|0;I=M;K2a(l);G=t;H=I;Sc(G|0)}while(0);r=c;return}case 5:{l=Xu(b)|0;q2a(m,l?330262:330267,l?4:5);do if(!(i[a+88>>0]&1)){l=i[m>>0]|0;j=(l&1)==0;x=0;Fa(92,k[a+4>>2]|0,(j?m+1|0:k[m+8>>2]|0)|0,(j?(l&255)>>>1:k[m+4>>2]|0)|0)|0;l=x;x=0;if(l&1)F=68;else F=67}else{l=a+12|0;j=k[l>>2]|0;if((j|0)==(k[a+16>>2]|0)){x=0;xa(655,a+8|0,m|0);h=x;x=0;if(h&1){F=68;break}else{F=67;break}}x=0;xa(604,j|0,m|0);j=x;x=0;if(j&1)F=68;else{k[l>>2]=(k[l>>2]|0)+12;F=67}}while(0);if((F|0)==67){K2a(m);r=c;return}else if((F|0)==68){l=Hc()|0;j=M;K2a(m);G=l;H=j;Sc(G|0)}break}case 6:{xx(a,b);r=c;return}case 7:{Hv(n,b);j=n+4|0;x=0;do if((k[n>>2]|0)==(k[j>>2]|0)){q2a(o,213134,2);l=x;x=0;if(!(l&1)){do if(!(i[a+88>>0]&1)){l=i[o>>0]|0;m=(l&1)==0;x=0;Fa(92,k[a+4>>2]|0,(m?o+1|0:k[o+8>>2]|0)|0,(m?(l&255)>>>1:k[o+4>>2]|0)|0)|0;l=x;x=0;if(l&1)F=82;else F=78}else{l=a+12|0;m=k[l>>2]|0;if((m|0)==(k[a+16>>2]|0)){x=0;xa(655,a+8|0,o|0);h=x;x=0;if(h&1){F=82;break}else{F=78;break}}x=0;xa(604,m|0,o|0);m=x;x=0;if(m&1)F=82;else{k[l>>2]=(k[l>>2]|0)+12;F=78}}while(0);if((F|0)==78){K2a(o);F=113;break}else if((F|0)==82){l=Hc()|0;m=M;K2a(o);K=l;L=m;break}}else F=80}else{q2a(p,294911,1);m=x;x=0;if(!(m&1)){x=0;xa(664,a|0,p|0);m=x;x=0;if(m&1){m=Hc()|0;l=M;K2a(p);K=m;L=l;break}K2a(p);l=a+20|0;m=a+36|0;h=i[m>>0]|0;d=(h&1)==0;I=a+40|0;x=0;Fa(88,l|0,(d?m+1|0:k[a+44>>2]|0)|0,(d?(h&255)>>>1:k[I>>2]|0)|0)|0;h=x;x=0;if(!(h&1)){h=a+4|0;d=a+52|0;t=a+60|0;g=d+1|0;f=a+56|0;E=k[n>>2]|0;while(1){x=0;e=Ta(513,b|0,E|0)|0;u=x;x=0;if(u&1){F=79;break}x=0;xa(665,a|0,e|0);u=x;x=0;if(u&1){F=79;break}u=i[E>>0]|0;if(!(u&1)){N=E+1|0;O=(u&255)>>>1}else{N=k[E+8>>2]|0;O=k[E+4>>2]|0}x=0;fb(179,q|0,N|0,O|0);u=x;x=0;if(u&1){F=79;break}x=0;xa(664,a|0,q|0);u=x;x=0;if(u&1){F=99;break}K2a(q);u=i[d>>0]|0;D=(u&1)==0;x=0;Fa(92,k[h>>2]|0,(D?g:k[t>>2]|0)|0,(D?(u&255)>>>1:k[f>>2]|0)|0)|0;u=x;x=0;if(u&1){F=79;break}x=0;xa(666,a|0,e|0);u=x;x=0;if(u&1){F=79;break}E=E+12|0;if((E|0)==(k[j>>2]|0)){P=e;F=97;break}x=0;Fa(92,k[h>>2]|0,301287,1)|0;u=x;x=0;if(u&1){F=79;break}x=0;xa(667,a|0,e|0);e=x;x=0;if(e&1){F=79;break}}if((F|0)==79){h=Hc()|0;Q=h;R=M;F=81;break}else if((F|0)==97){x=0;xa(667,a|0,P|0);h=x;x=0;if(h&1){F=80;break}h=i[l>>0]|0;if(!(h&1))S=(h&255)>>>1;else S=k[a+24>>2]|0;h=i[m>>0]|0;if(!(h&1))T=(h&255)>>>1;else T=k[I>>2]|0;x=0;fb(147,l|0,S-T|0,0);h=x;x=0;if(h&1){F=80;break}x=0;fb(140,s|0,294913,1);h=x;x=0;if(h&1){F=80;break}x=0;xa(664,a|0,s|0);h=x;x=0;if(h&1){h=Hc()|0;E=M;K2a(s);K=h;L=E;break}else{K2a(s);F=113;break}}else if((F|0)==99){E=Hc()|0;h=M;K2a(q);K=E;L=h;break}}else F=80}else F=80}while(0);if((F|0)==80){q=Hc()|0;Q=q;R=M;F=81}else if((F|0)==113){q=k[n>>2]|0;if(q){s=k[j>>2]|0;if((s|0)==(q|0))U=q;else{a=s;do{s=a+-12|0;k[j>>2]=s;K2a(s);a=k[j>>2]|0}while((a|0)!=(q|0));U=k[n>>2]|0}OBa(U)}r=c;return}if((F|0)==81){K=Q;L=R}R=k[n>>2]|0;if(!R){G=K;H=L;Sc(G|0)}Q=k[j>>2]|0;if((Q|0)==(R|0))V=R;else{F=Q;do{Q=F+-12|0;k[j>>2]=Q;K2a(Q);F=k[j>>2]|0}while((F|0)!=(R|0));V=k[n>>2]|0}OBa(V);G=K;H=L;Sc(G|0);break}default:{r=c;return}}}function vx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+48|0;d=c+36|0;e=c+24|0;f=c+12|0;g=c;if(!(k[a+48>>2]|0)){r=c;return}a:do if(Pv(b,1)|0){h=k[a+4>>2]|0;Qv(f,b,1);x=0;j=Fa(86,f|0,0,324196)|0;l=x;x=0;do if(!(l&1)){k[e>>2]=k[j>>2];k[e+4>>2]=k[j+4>>2];k[e+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;m=i[e>>0]|0;n=(m&1)==0;x=0;Fa(92,h|0,(n?e+1|0:k[e+8>>2]|0)|0,(n?(m&255)>>>1:k[e+4>>2]|0)|0)|0;m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(e);o=n;p=m;break}else{K2a(e);K2a(f);break a}}else{m=Hc()|0;o=M;p=m}while(0);K2a(f);q=o;s=p;Sc(s|0)}while(0);if(!(Pv(b,2)|0)){r=c;return}p=i[a+36>>0]|0;if(!(p&1))t=(p&255)>>>1;else t=k[a+40>>2]|0;p=a+4|0;if(t){t=k[p>>2]|0;i[d>>0]=10;o=ei(t,d,1)|0;d=a+20|0;t=i[d>>0]|0;f=(t&1)==0;ei(o,f?d+1|0:k[a+28>>2]|0,f?(t&255)>>>1:k[a+24>>2]|0)|0}a=k[p>>2]|0;Qv(g,b,2);b=i[g>>0]|0;p=(b&1)==0;x=0;Fa(92,a|0,(p?g+1|0:k[g+8>>2]|0)|0,(p?(b&255)>>>1:k[g+4>>2]|0)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;p=M;K2a(g);q=p;s=b;Sc(s|0)}else{K2a(g);r=c;return}}function wx(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(i[a+88>>0]&1)){c=i[b>>0]|0;d=(c&1)==0;ei(k[a+4>>2]|0,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0;return}c=a+12|0;d=k[c>>2]|0;if((d|0)==(k[a+16>>2]|0)){Rx(a+8|0,b);return}else{n2a(d,b);k[c>>2]=(k[c>>2]|0)+12;return}}function xx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+48|0;d=c+36|0;e=c+24|0;f=c+12|0;g=c;h=_u(b)|0;if(!h){q2a(e,213141,2);do if(!(i[a+88>>0]&1)){j=i[e>>0]|0;l=(j&1)==0;x=0;Fa(92,k[a+4>>2]|0,(l?e+1|0:k[e+8>>2]|0)|0,(l?(j&255)>>>1:k[e+4>>2]|0)|0)|0;j=x;x=0;if(j&1)m=9;else m=8}else{j=a+12|0;l=k[j>>2]|0;if((l|0)==(k[a+16>>2]|0)){x=0;xa(655,a+8|0,e|0);n=x;x=0;if(n&1){m=9;break}else{m=8;break}}x=0;xa(604,l|0,e|0);l=x;x=0;if(l&1)m=9;else{k[j>>2]=(k[j>>2]|0)+12;m=8}}while(0);if((m|0)==8){K2a(e);r=c;return}else if((m|0)==9){m=Hc()|0;j=M;K2a(e);o=m;p=j;Sc(o|0)}}if((k[a+48>>2]|0)!=2?!(Bx(a,b)|0):0){j=a+4|0;ei(k[j>>2]|0,316822,1)|0;m=a+36|0;e=i[m>>0]|0;if(!(e&1))q=(e&255)>>>1;else q=k[a+40>>2]|0;if(q)ei(k[j>>2]|0,324196,1)|0;q=a+8|0;e=a+40|0;l=0;do{if(l){n=i[m>>0]|0;if(!(n&1))s=(n&255)>>>1;else s=k[e>>2]|0;n=(s|0)==0;ei(k[j>>2]|0,n?301287:300110,n?1:2)|0}n=k[q>>2]|0;t=n+(l*12|0)|0;u=i[t>>0]|0;v=(u&1)==0;ei(k[j>>2]|0,v?t+1|0:k[n+(l*12|0)+8>>2]|0,v?(u&255)>>>1:k[n+(l*12|0)+4>>2]|0)|0;l=l+1|0}while((l|0)!=(h|0));l=i[m>>0]|0;if(!(l&1))w=(l&255)>>>1;else w=k[a+40>>2]|0;if(w)ei(k[j>>2]|0,324196,1)|0;ei(k[j>>2]|0,316824,1)|0;r=c;return}q2a(f,316822,1);x=0;xa(664,a|0,f|0);j=x;x=0;if(j&1){j=Hc()|0;w=M;K2a(f);o=j;p=w;Sc(o|0)}K2a(f);f=a+20|0;w=a+36|0;j=i[w>>0]|0;l=(j&1)==0;m=a+40|0;O3a(f,l?w+1|0:k[a+44>>2]|0,l?(j&255)>>>1:k[m>>2]|0)|0;j=a+8|0;l=a+88|0;q=a+4|0;s=a+28|0;e=f+1|0;n=a+24|0;a:do if((k[j>>2]|0)!=(k[a+12>>2]|0)){u=iv(b,0)|0;sx(a,u);yx(a,k[j>>2]|0);if((h|0)==1)y=u;else{v=u;u=1;while(1){ei(k[q>>2]|0,301287,1)|0;vx(a,v);t=iv(b,u)|0;sx(a,t);yx(a,(k[j>>2]|0)+(u*12|0)|0);u=u+1|0;if((u|0)==(h|0)){y=t;break}else v=t}}}else{v=0;while(1){u=iv(b,v)|0;sx(a,u);t=i[l>>0]|0;if(!(t&2)){z=i[w>>0]|0;if(!(z&1))A=(z&255)>>>1;else A=k[m>>2]|0;if(A){z=k[q>>2]|0;i[d>>0]=10;B=ei(z,d,1)|0;z=i[f>>0]|0;C=(z&1)==0;ei(B,C?e:k[s>>2]|0,C?(z&255)>>>1:k[n>>2]|0)|0;D=i[l>>0]|0}else D=t}else D=t;i[l>>0]=D|2;ux(a,u);i[l>>0]=i[l>>0]&-3;t=v+1|0;if((t|0)==(h|0)){y=u;break a}ei(k[q>>2]|0,301287,1)|0;vx(a,u);v=t}}while(0);vx(a,y);y=i[f>>0]|0;if(!(y&1))E=(y&255)>>>1;else E=k[n>>2]|0;n=i[w>>0]|0;if(!(n&1))F=(n&255)>>>1;else F=k[m>>2]|0;q3a(f,E-F|0,0);q2a(g,316824,1);x=0;xa(664,a|0,g|0);a=x;x=0;if(a&1){a=Hc()|0;F=M;K2a(g);o=a;p=F;Sc(o|0)}else{K2a(g);r=c;return}}function yx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=a+88|0;if(!(i[e>>0]&2)){f=i[a+36>>0]|0;if(!(f&1))g=(f&255)>>>1;else g=k[a+40>>2]|0;if(g){g=k[a+4>>2]|0;i[d>>0]=10;f=ei(g,d,1)|0;d=a+20|0;g=i[d>>0]|0;h=(g&1)==0;ei(f,h?d+1|0:k[a+28>>2]|0,h?(g&255)>>>1:k[a+24>>2]|0)|0}}g=i[b>>0]|0;h=(g&1)==0;ei(k[a+4>>2]|0,h?b+1|0:k[b+8>>2]|0,h?(g&255)>>>1:k[b+4>>2]|0)|0;i[e>>0]=i[e>>0]&-3;r=c;return}function zx(a){a=a|0;var b=0,c=0,d=0;b=a+36|0;c=i[b>>0]|0;d=(c&1)==0;O3a(a+20|0,d?b+1|0:k[a+44>>2]|0,d?(c&255)>>>1:k[a+40>>2]|0)|0;return}function Ax(a){a=a|0;var b=0,c=0,d=0,e=0;b=a+20|0;c=i[b>>0]|0;if(!(c&1))d=(c&255)>>>1;else d=k[a+24>>2]|0;c=i[a+36>>0]|0;if(!(c&1))e=(c&255)>>>1;else e=k[a+40>>2]|0;q3a(b,d-e|0,0);return}function Bx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;c=_u(b)|0;d=a+32|0;e=(c*3|0)>>>0>=(k[d>>2]|0)>>>0;f=a+8|0;g=k[f>>2]|0;h=a+12|0;j=k[h>>2]|0;if((j|0)!=(g|0)){l=j;do{j=l+-12|0;k[h>>2]=j;K2a(j);l=k[h>>2]|0}while((l|0)!=(g|0))}g=(c|0)==0;if(g|e)m=e;else{e=0;do{l=iv(b,e)|0;if(!(bv(l)|0)?!(cv(l)|0):0)n=0;else n=(_u(l)|0)!=0;e=e+1|0}while(!(e>>>0>=c>>>0|n));m=n}if(m){o=1;return o|0}m=a+16|0;n=k[f>>2]|0;e=n;if((((k[m>>2]|0)-n|0)/12|0)>>>0>>0){l=k[h>>2]|0;j=l;if(g)p=0;else p=KBa(c*12|0)|0;q=p+(((l-n|0)/12|0)*12|0)|0;l=q;r=p+(c*12|0)|0;if((j|0)==(e|0)){s=l;t=n;u=e}else{n=j;j=q;q=l;while(1){p=j+-12|0;n=n+-12|0;k[p>>2]=k[n>>2];k[p+4>>2]=k[n+4>>2];k[p+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;j=q+-12|0;p=j;if((n|0)==(e|0)){v=p;break}else q=p}s=v;t=k[f>>2]|0;u=k[h>>2]|0}k[f>>2]=s;k[h>>2]=l;k[m>>2]=r;r=t;if((u|0)!=(r|0)){m=u;do{m=m+-12|0;K2a(m)}while((m|0)!=(r|0))}if(t)OBa(t)}t=a+88|0;r=i[t>>0]|0;i[t>>0]=r|1;m=(c<<1)+2|0;if(!g){g=0;u=0;l=m;do{h=iv(b,g)|0;if(!(Pv(h,0)|0)?!(Pv(h,1)|0):0)w=Pv(h,2)|0;else w=1;u=u|w;ux(a,iv(b,g)|0);h=k[f>>2]|0;s=i[h+(g*12|0)>>0]|0;if(!(s&1))x=(s&255)>>>1;else x=k[h+(g*12|0)+4>>2]|0;l=x+l|0;g=g+1|0}while((g|0)!=(c|0));i[t>>0]=i[t>>0]&-2;if(u){o=1;return o|0}else y=l}else{i[t>>0]=r&-2;y=m}o=y>>>0>=(k[d>>2]|0)>>>0;return o|0}function Cx(a){a=a|0;var b=0;if(Pv(a,0)|0){b=1;return b|0}if(Pv(a,1)|0){b=1;return b|0}b=Pv(a,2)|0;return b|0}function Dx(a){a=a|0;OBa(a);return}function Ex(a){a=a|0;return}function Fx(a){a=a|0;OBa(a);return}function Gx(a){a=a|0;var b=0,c=0,d=0,e=0;k[a>>2]=24304;b=a+8|0;x=0;xa(588,b|0,0);a=x;x=0;if(a&1){a=Hc()|0;c=M;d=a;Sc(d|0)}x=0;va(1483,b|0);a=x;x=0;if(!(a&1))return;a=Hc()|0;e=M;xu(b);c=e;d=a;Sc(d|0)}function Hx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=r;r=r+144|0;c=b+120|0;d=b+96|0;e=b+72|0;f=b+48|0;g=b+24|0;h=b;i=rv(a,213144)|0;pu(c,213157);x=0;Ta(476,i|0,c|0)|0;i=x;x=0;if(i&1){i=Hc()|0;j=M;xu(c);k=j;l=i;Sc(l|0)}xu(c);c=rv(a,213161)|0;pu(d,324244);x=0;Ta(476,c|0,d|0)|0;c=x;x=0;if(c&1){c=Hc()|0;i=M;xu(d);k=i;l=c;Sc(l|0)}xu(d);d=rv(a,213173)|0;tu(e,0);x=0;Ta(476,d|0,e|0)|0;d=x;x=0;if(d&1){d=Hc()|0;c=M;xu(e);k=c;l=d;Sc(l|0)}xu(e);e=rv(a,213197)|0;tu(f,0);x=0;Ta(476,e|0,f|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=M;xu(f);k=d;l=e;Sc(l|0)}xu(f);f=rv(a,213218)|0;tu(g,0);x=0;Ta(476,f|0,g|0)|0;f=x;x=0;if(f&1){f=Hc()|0;e=M;xu(g);k=e;l=f;Sc(l|0)}xu(g);g=rv(a,213235)|0;ku(h,17);x=0;Ta(476,g|0,h|0)|0;g=x;x=0;if(!(g&1)){xu(h);r=b;return}b=Hc()|0;g=M;xu(h);k=g;l=b;Sc(l|0)}function Ix(a){a=a|0;k[a>>2]=24304;xu(a+8|0);return}function Jx(a){a=a|0;k[a>>2]=24304;xu(a+8|0);OBa(a);return}function Kx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;b=r;r=r+80|0;c=b+60|0;d=b+48|0;e=b+24|0;f=b+36|0;g=b+12|0;h=b;j=a+8|0;Ku(c,pv(j,213161)|0);x=0;a=Ta(519,j|0,213144)|0;l=x;x=0;if(!(l&1)?(x=0,xa(602,d|0,a|0),a=x,x=0,!(a&1)):0){x=0;a=Ta(519,j|0,213173)|0;l=x;x=0;do if(((((((!(l&1)?(x=0,m=Ba(582,a|0)|0,n=x,x=0,!(n&1)):0)?(x=0,n=Ta(519,j|0,213197)|0,o=x,x=0,!(o&1)):0)?(x=0,o=Ba(582,n|0)|0,n=x,x=0,!(n&1)):0)?(x=0,n=Ta(519,j|0,213218)|0,p=x,x=0,!(p&1)):0)?(x=0,p=Ba(582,n|0)|0,n=x,x=0,!(n&1)):0)?(x=0,n=Ta(519,j|0,213235)|0,q=x,x=0,!(q&1)):0)?(x=0,q=Ba(583,n|0)|0,n=x,x=0,!(n&1)):0){if(b5a(d,213157)|0)if(!(b5a(d,213245)|0))s=0;else{x=0;fb(140,e|0,213250,36);n=x;x=0;if(n&1){t=13;break}x=0;va(1477,e|0);x=0;n=Hc()|0;u=M;K2a(e);v=n;w=u;break}else s=2;x=0;fb(140,f|0,213137,3);u=x;x=0;if(!(u&1)){if(m){x=0;Ta(496,f|0,325552)|0;m=x;x=0;if(m&1)t=20;else t=23}else{m=i[c>>0]|0;if((((m&1)==0?(m&255)>>>1:k[c+4>>2]|0)|0)==0?(x=0,Ta(496,f|0,294915)|0,m=x,x=0,m&1):0)t=20;else t=23}if((t|0)==23){x=0;fb(140,g|0,293757,4);m=x;x=0;if(m&1)t=20;else{if(o?(x=0,Ta(496,g|0,329672)|0,o=x,x=0,o&1):0)t=26;else{o=q>>>0>17?17:q;x=0;fb(140,h|0,329672,0);q=x;x=0;if(q&1)t=26;else{x=0;q=Ba(563,96)|0;m=x;x=0;do if(!(m&1)){x=0;Ja(42,q|0,c|0,s|0,f|0,g|0,h|0,p|0,o|0);u=x;x=0;if(u&1){u=Hc()|0;n=M;OBa(q);y=u;z=n;break}else{K2a(h);K2a(g);K2a(f);K2a(d);K2a(c);r=b;return q|0}}else{n=Hc()|0;y=n;z=M}while(0);K2a(h);A=y;B=z}}if((t|0)==26){q=Hc()|0;A=q;B=M}K2a(g);C=A;D=B}}if((t|0)==20){q=Hc()|0;C=q;D=M}K2a(f);v=C;w=D}else t=13}else t=13;while(0);if((t|0)==13){t=Hc()|0;v=t;w=M}K2a(d);E=v;F=w;K2a(c);Sc(E|0)}w=Hc()|0;E=w;F=M;K2a(c);Sc(E|0);return 0}function Lx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;c=r;r=r+192|0;d=c+184|0;e=c+176|0;f=c+168|0;g=c+160|0;h=c+152|0;i=c+132|0;j=c+120|0;l=c+108|0;m=c+96|0;n=c+84|0;o=c+72|0;p=c+24|0;q=c+60|0;s=c+48|0;t=c;iu(p,0);u=(b|0)==0?p:b;k[q+4>>2]=0;b=q+8|0;k[b>>2]=0;v=q+4|0;k[q>>2]=v;Ws(q,0);k[b>>2]=0;k[q>>2]=v;k[v>>2]=0;x=0;fb(140,i|0,213161,11);b=x;x=0;a:do if(b&1)w=24;else{x=0;fb(176,c+144|0,q|0,i|0);y=x;x=0;do if(y&1){z=Hc()|0;A=M;K2a(i);B=A;C=z}else{K2a(i);x=0;fb(140,j|0,213144,12);z=x;x=0;if(z&1){w=24;break a}x=0;fb(176,h|0,q|0,j|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;K2a(j);B=A;C=z;break}K2a(j);x=0;fb(140,l|0,213173,23);z=x;x=0;if(z&1){w=24;break a}x=0;fb(176,g|0,q|0,l|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;K2a(l);B=A;C=z;break}K2a(l);x=0;fb(140,m|0,213197,20);z=x;x=0;if(z&1){w=24;break a}x=0;fb(176,f|0,q|0,m|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;K2a(m);B=A;C=z;break}K2a(m);x=0;fb(140,n|0,213218,16);z=x;x=0;if(z&1){w=24;break a}x=0;fb(176,e|0,q|0,n|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;K2a(n);B=A;C=z;break}K2a(n);x=0;fb(140,o|0,213235,9);z=x;x=0;if(z&1){w=24;break a}x=0;fb(176,d|0,q|0,o|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;K2a(o);B=A;C=z;break}K2a(o);z=a+8|0;x=0;xa(601,s|0,z|0);A=x;x=0;if(A&1){w=24;break a}A=s+4|0;D=k[A>>2]|0;E=k[s>>2]|0;F=(D-E|0)/12|0;b:do if((D|0)!=(E|0)){G=E;H=0;while(1){I=G+(H*12|0)|0;if((Ys(q,I)|0)==(v|0)){x=0;J=Ta(475,u|0,I|0)|0;K=x;x=0;if(K&1){w=32;break}x=0;K=Ta(513,z|0,I|0)|0;I=x;x=0;if(I&1){w=32;break}x=0;xa(589,t|0,K|0);K=x;x=0;if(K&1){w=32;break}x=0;Ta(476,J|0,t|0)|0;J=x;x=0;if(J&1){w=35;break}xu(t)}J=H+1|0;if(J>>>0>=F>>>0){w=23;break b}G=k[s>>2]|0;H=J}if((w|0)==32){H=Hc()|0;L=H;N=M;w=34;break}else if((w|0)==35){H=Hc()|0;G=M;xu(t);O=H;P=G;Q=s;break}}else w=23;while(0);do if((w|0)==23){x=0;F=Ba(560,u|0)|0;z=x;x=0;if(z&1){z=Hc()|0;L=z;N=M;w=34;break}z=(F|0)==0;F=k[s>>2]|0;if(!F){R=k[v>>2]|0;Ws(q,R);xu(p);r=c;return z|0}E=k[A>>2]|0;if((E|0)==(F|0))S=F;else{D=E;do{E=D+-12|0;k[A>>2]=E;K2a(E);D=k[A>>2]|0}while((D|0)!=(F|0));S=k[s>>2]|0}OBa(S);R=k[v>>2]|0;Ws(q,R);xu(p);r=c;return z|0}while(0);if((w|0)==34){O=L;P=N;Q=s}F=k[Q>>2]|0;if(!F){T=O;U=P;V=k[v>>2]|0;Ws(q,V);xu(p);Sc(T|0)}D=k[A>>2]|0;if((D|0)==(F|0))W=F;else{E=D;do{D=E+-12|0;k[A>>2]=D;K2a(D);E=k[A>>2]|0}while((E|0)!=(F|0));W=k[s>>2]|0}OBa(W);T=O;U=P;V=k[v>>2]|0;Ws(q,V);xu(p);Sc(T|0)}while(0);X=B;Y=C}while(0);if((w|0)==24){w=Hc()|0;X=M;Y=w}T=Y;U=X;V=k[v>>2]|0;Ws(q,V);xu(p);Sc(T|0);return 0}function Mx(a,b){a=a|0;b=b|0;return sv(a+8|0,b)|0}function Nx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+160|0;e=d+136|0;f=d;g=f+56|0;h=f+4|0;k[f>>2]=20356;k[g>>2]=20376;x=0;xa(582,f+56|0,h|0);i=x;x=0;if(i&1){i=Hc()|0;j=M;l=i;mab(g);Sc(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=20300;k[f+56>>2]=20320;x=0;va(1449,h|0);i=x;x=0;do if(i&1){m=Hc()|0;n=M;o=m}else{k[h>>2]=20392;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(583,h|0,e|0);p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(e);K2a(m);obb(h);n=q;o=p;break}K2a(e);x=0;p=Ba(k[(k[b>>2]|0)+8>>2]|0,b|0)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;t=q;k[f>>2]=20300;k[g>>2]=20320;k[h>>2]=20392;K2a(m);obb(h);mab(g);Sc(t|0)}x=0;Fa(k[(k[p>>2]|0)+8>>2]|0,p|0,c|0,f|0)|0;q=x;x=0;if(!(q&1)?(x=0,xa(584,a|0,h|0),q=x,x=0,!(q&1)):0){Sf[k[(k[p>>2]|0)+4>>2]&2047](p);k[f>>2]=20300;k[g>>2]=20320;k[h>>2]=20392;K2a(m);obb(h);mab(g);r=d;return}q=Hc()|0;u=M;Sf[k[(k[p>>2]|0)+4>>2]&2047](p);s=u;t=q;k[f>>2]=20300;k[g>>2]=20320;k[h>>2]=20392;K2a(m);obb(h);mab(g);Sc(t|0)}while(0);j=n;l=o;mab(g);Sc(l|0)}function Ox(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+32|0;d=c;k[d>>2]=24304;e=d+8|0;x=0;xa(588,e|0,0);f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f;Sc(h|0)}x=0;va(1483,e|0);f=x;x=0;if(f&1){f=Hc()|0;i=M;xu(e);g=i;h=f;Sc(h|0)}x=0;h=Ba(105,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;j=M;l=f;k[d>>2]=24304;xu(e);Sc(l|0)}x=0;Fa(k[(k[h>>2]|0)+8>>2]|0,h|0,b|0,a|0)|0;b=x;x=0;if(!(b&1)){Sf[k[(k[h>>2]|0)+4>>2]&2047](h);k[d>>2]=24304;xu(e);r=c;return a|0}a=Hc()|0;c=M;Sf[k[(k[h>>2]|0)+4>>2]&2047](h);j=c;l=a;k[d>>2]=24304;xu(e);Sc(l|0);return 0}function Px(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0;e=r;r=r+80|0;f=e+32|0;g=e+24|0;h=e+16|0;j=e+8|0;l=e;m=e+48|0;n=e+36|0;k[l>>2]=d;ORa(n,213287,l)|0;p[t>>3]=b;l=k[t+4>>2]&2146435072;do if(!(l>>>0<2146435072|(l|0)==2146435072&0<0)){if(b!=b|0.0!=0.0){o=uRa(m,32,c?213294:293757,h)|0;break}if(b<0.0){o=uRa(m,32,c?213298:213308,g)|0;break}else{o=uRa(m,32,c?213317:213326,f)|0;break}}else{p[j>>3]=b;o=uRa(m,32,n,j)|0}while(0);j=m+o|0;if((o|0)>0)q=m;else{s=RLa(m)|0;q2a(a,m,s);r=e;return}do{if((i[q>>0]|0)==44)i[q>>0]=46;q=q+1|0}while((q|0)!=(j|0));s=RLa(m)|0;q2a(a,m,s);r=e;return}function Qx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;d=r;r=r+208|0;e=d+184|0;f=d+160|0;g=d+12|0;h=d+172|0;j=d+24|0;l=d;if(!b){q2a(a,329672,0);r=d;return}m=b+c|0;a:do if((c|0)>0){n=b;b:while(1){switch(i[n>>0]|0){case 8:case 9:case 10:case 12:case 13:case 34:case 92:{o=n;break b;break}default:{}}n=n+1|0;if(n>>>0>=m>>>0){p=7;break a}}if(!o)p=7}else p=7;while(0);c:do if((p|0)==7){if(c){o=b;do{n=i[o>>0]|0;o=o+1|0;if(n<<24>>24==0|(n+-1&255)<31)break c}while((m|0)!=(o|0))}q2a(g,276785,1);x=0;o=Ta(484,g|0,b|0)|0;n=x;x=0;do if(n&1){q=Hc()|0;s=q;t=M}else{k[f>>2]=k[o>>2];k[f+4>>2]=k[o+4>>2];k[f+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;x=0;q=Ta(484,f|0,276785)|0;u=x;x=0;if(u&1){u=Hc()|0;v=M;K2a(f);s=u;t=v;break};k[a>>2]=k[q>>2];k[a+4>>2]=k[q+4>>2];k[a+8>>2]=k[q+8>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;K2a(f);K2a(g);r=d;return}while(0);K2a(g);w=s;y=t;Sc(w|0)}while(0);k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;xa(603,h|0,(c<<1)+3|0);t=x;x=0;d:do if(!(t&1)?(x=0,Ta(484,h|0,276785)|0,s=x,x=0,!(s&1)):0){e:do if(c){s=j+56|0;g=j+4|0;f=j+56|0;o=j+56|0;n=j+128|0;q=j+132|0;v=j+36|0;u=j+52|0;z=l+8|0;A=l+1|0;B=l+4|0;C=b;f:while(1){D=i[C>>0]|0;g:do switch(D<<24>>24|0){case 34:{x=0;Ta(484,h|0,213110)|0;E=x;x=0;if(E&1){p=21;break f}break}case 92:{x=0;Ta(484,h|0,213113)|0;E=x;x=0;if(E&1){p=21;break f}break}case 8:{x=0;Ta(484,h|0,213116)|0;E=x;x=0;if(E&1){p=21;break f}break}case 12:{x=0;Ta(484,h|0,213119)|0;E=x;x=0;if(E&1){p=21;break f}break}case 10:{x=0;Ta(484,h|0,213122)|0;E=x;x=0;if(E&1){p=21;break f}break}case 13:{x=0;Ta(484,h|0,213125)|0;E=x;x=0;if(E&1){p=21;break f}break}case 9:{x=0;Ta(484,h|0,213128)|0;E=x;x=0;if(E&1){p=21;break f}break}default:{if(!(D<<24>>24==0|(D+-1&255)<31)){x=0;xa(605,h|0,D|0);E=x;x=0;if(E&1){p=21;break f}else break g}k[j>>2]=20356;k[s>>2]=20376;x=0;xa(582,f|0,g|0);E=x;x=0;if(E&1){p=37;break f}k[n>>2]=0;k[q>>2]=-1;k[j>>2]=20300;k[o>>2]=20320;x=0;va(1449,g|0);E=x;x=0;if(E&1){p=38;break f}k[g>>2]=20392;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[u>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(583,g|0,e|0);E=x;x=0;if(E&1){p=36;break f}K2a(e);x=0;E=Fa(92,j|0,213131,2)|0;F=x;x=0;if(F&1){p=46;break f}F=E+(k[(k[E>>2]|0)+-12>>2]|0)+4|0;k[F>>2]=k[F>>2]&-75|8;F=E+(k[(k[E>>2]|0)+-12>>2]|0)+4|0;k[F>>2]=k[F>>2]|16384;k[E+(k[(k[E>>2]|0)+-12>>2]|0)+76>>2]=48;k[E+(k[(k[E>>2]|0)+-12>>2]|0)+12>>2]=4;x=0;Ta(477,E|0,i[C>>0]|0)|0;E=x;x=0;if(E&1){p=46;break f}x=0;xa(584,l|0,g|0);E=x;x=0;if(E&1){p=46;break f}E=i[l>>0]|0;F=(E&1)==0;x=0;Fa(88,h|0,(F?A:k[z>>2]|0)|0,(F?(E&255)>>>1:k[B>>2]|0)|0)|0;E=x;x=0;if(E&1){p=47;break f}K2a(l);k[j>>2]=20300;k[s>>2]=20320;k[g>>2]=20392;K2a(v);obb(g);mab(s)}}while(0);C=C+1|0;if((C|0)==(m|0))break e}if((p|0)==21){C=Hc()|0;G=M;H=C;p=23;break d}else if((p|0)==36){C=Hc()|0;B=M;K2a(e);K2a(v);obb(g);I=B;J=C;p=39}else if((p|0)==37){C=Hc()|0;K=M;L=C}else if((p|0)==38){C=Hc()|0;I=M;J=C;p=39}else if((p|0)==46){C=Hc()|0;N=C;O=M;p=48}else if((p|0)==47){C=Hc()|0;B=M;K2a(l);N=C;O=B;p=48}if((p|0)==39){K=I;L=J}else if((p|0)==48){k[j>>2]=20300;k[s>>2]=20320;k[g>>2]=20392;K2a(v);obb(g);mab(s);P=N;Q=O;break d}mab(s);G=K;H=L;p=23;break d}while(0);x=0;Ta(484,h|0,276785)|0;B=x;x=0;if(!(B&1)){k[a>>2]=k[h>>2];k[a+4>>2]=k[h+4>>2];k[a+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;K2a(h);r=d;return}else p=22}else p=22;while(0);if((p|0)==22){d=Hc()|0;G=M;H=d;p=23}if((p|0)==23){P=H;Q=G}K2a(h);w=P;y=Q;Sc(w|0)}function Rx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/12|0)+1|0;if(e>>>0>357913941){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/12|0;if(g>>>0<178956970){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/12|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=357913941;n=((k[c>>2]|0)-f|0)/12|0;o=6}if((o|0)==6){i=m;j=KBa(m*12|0)|0;l=n}n=j+(l*12|0)|0;l=n;m=j+(i*12|0)|0;x=0;xa(604,n|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;if(!j)Sc(b|0);OBa(j);Sc(b|0)}b=n+12|0;j=k[a>>2]|0;i=k[c>>2]|0;if((i|0)==(j|0)){p=l;q=j;r=j}else{o=i;i=n;n=l;while(1){l=i+-12|0;o=o+-12|0;k[l>>2]=k[o>>2];k[l+4>>2]=k[o+4>>2];k[l+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;i=n+-12|0;l=i;if((o|0)==(j|0)){s=l;break}else n=l}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=m;m=q;if((r|0)!=(m|0)){d=r;do{d=d+-12|0;K2a(d)}while((d|0)!=(m|0))}if(!q)return;OBa(q);return}function Sx(a){a=a|0;k[a>>2]=24224;K2a(a+4|0);return}function Tx(a){a=a|0;k[a>>2]=24224;K2a(a+4|0);OBa(a);return}function Ux(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=24244;K2a(a+28|0);K2a(a+16|0);b=a+4|0;c=k[b>>2]|0;if(!c)return;d=a+8|0;a=k[d>>2]|0;if((a|0)==(c|0))e=c;else{f=a;do{a=f+-12|0;k[d>>2]=a;K2a(a);f=k[d>>2]|0}while((f|0)!=(c|0));e=k[b>>2]|0}OBa(e);return}function Vx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;k[a>>2]=24244;K2a(a+28|0);K2a(a+16|0);b=a+4|0;c=k[b>>2]|0;if(!c){OBa(a);return}d=a+8|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-12|0;k[d>>2]=e;K2a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f);OBa(a);return}function Wx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=24264;K2a(a+76|0);K2a(a+64|0);K2a(a+52|0);K2a(a+36|0);K2a(a+20|0);b=a+8|0;c=k[b>>2]|0;if(!c)return;d=a+12|0;a=k[d>>2]|0;if((a|0)==(c|0))e=c;else{f=a;do{a=f+-12|0;k[d>>2]=a;K2a(a);f=k[d>>2]|0}while((f|0)!=(c|0));e=k[b>>2]|0}OBa(e);return}function Xx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;k[a>>2]=24264;K2a(a+76|0);K2a(a+64|0);K2a(a+52|0);K2a(a+36|0);K2a(a+20|0);b=a+8|0;c=k[b>>2]|0;if(!c){OBa(a);return}d=a+12|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-12|0;k[d>>2]=e;K2a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f);OBa(a);return}function Yx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0;c=r;r=r+432|0;d=c+420|0;e=c+416|0;f=c+320|0;g=c+208|0;h=c+24|0;i=c;j=c+192|0;l=c+180|0;m=c+176|0;n=c+160|0;o=c+144|0;p=c+48|0;Zx(b);q=b+96|0;ky(f,q);s=b+204|0;t=k[s>>2]|0;if(!((t|0)!=0?(x=0,nb(93,c+304|0,f|0,t|0,0),t=x,x=0,t&1):0))u=5;if((u|0)==5?(x=0,xa(668,g|0,f|0),t=x,x=0,!(t&1)):0){t=i+16|0;k[t>>2]=i;k[i>>2]=24364;k[i+4>>2]=b;k[i+8>>2]=f;k[i+12>>2]=g;k[h+16>>2]=h;x=0;xa(k[(k[i>>2]|0)+12>>2]|0,i|0,h|0);v=x;x=0;do if(v&1){w=Hc()|0;y=M;z=k[t>>2]|0;if((z|0)==(i|0)){Sf[k[(k[i>>2]|0)+16>>2]&2047](i);A=y;B=w;break}if(!z){A=y;B=w}else{Sf[k[(k[z>>2]|0)+20>>2]&2047](z);A=y;B=w}}else{w=k[t>>2]|0;if((w|0)!=(i|0)){if(w)Sf[k[(k[w>>2]|0)+20>>2]&2047](w)}else Sf[k[(k[i>>2]|0)+16>>2]&2047](i);w=j+4|0;k[w>>2]=0;y=j+8|0;k[y>>2]=0;z=j+4|0;k[j>>2]=z;C=l+4|0;k[C>>2]=0;D=l+8|0;k[D>>2]=0;E=l+4|0;k[l>>2]=E;F=k[q>>2]|0;G=F+1|0;k[m>>2]=G;if(!(k[b+108>>2]|0))H=G;else{I=k[(k[b+100>>2]|0)+16>>2]|0;J=(I|0)<(G|0)?I:G;k[m>>2]=J;H=J}do if((H|0)<=(k[b>>2]|0)){J=n+4|0;G=n+8|0;I=n+12|0;K=z;L=H;while(1){k[n>>2]=-1;k[J>>2]=-1;k[G>>2]=0;k[I>>2]=0;x=0;N=Fa(114,b|0,L|0,n|0)|0;O=x;x=0;if(O&1)break;O=k[z>>2]|0;do if(O){P=O;while(1){Q=k[P+16>>2]|0;if((L|0)<(Q|0)){R=k[P>>2]|0;if(!R){S=P;T=P;u=27;break}else U=R}else{if((Q|0)>=(L|0)){V=P;u=33;break}Q=P+4|0;R=k[Q>>2]|0;if(!R){W=Q;X=P;u=31;break}else U=R}P=U}if((u|0)==27){u=0;k[e>>2]=T;Y=S;Z=T;u=34;break}else if((u|0)==31){u=0;k[e>>2]=X;Y=W;Z=X;u=34;break}else if((u|0)==33){u=0;k[e>>2]=V;if(!V){Y=e;Z=V;u=34;break}else{_=V;break}}}else{k[e>>2]=z;Y=z;Z=K;u=34}while(0);if((u|0)==34){u=0;x=0;O=Ba(563,24)|0;P=x;x=0;if(P&1)break;k[O+16>>2]=L;k[O+20>>2]=0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=Z;k[Y>>2]=O;P=k[k[j>>2]>>2]|0;if(!P)$=O;else{k[j>>2]=P;$=k[Y>>2]|0}ui(k[w>>2]|0,$);k[y>>2]=(k[y>>2]|0)+1;_=O}k[_+20>>2]=N;O=k[I>>2]|0;if(O)j0a(O);if((L|0)<(k[b>>2]|0))L=L+1|0;else{u=20;break}}if((u|0)==20){aa=k[m>>2]|0;ba=k[q>>2]|0;u=21;break}L=Hc()|0;K=M;G=k[I>>2]|0;if(!G){ca=K;da=L}else{j0a(G);ca=K;da=L}}else{aa=H;ba=F;u=21}while(0);a:do if((u|0)==21){b:do if((aa|0)<=(ba|0)){F=o+4|0;y=o+8|0;w=o+12|0;L=E;K=aa;while(1){k[o>>2]=-1;k[F>>2]=-1;k[y>>2]=0;k[w>>2]=0;x=0;G=Fa(114,q|0,K|0,o|0)|0;J=x;x=0;if(J&1)break;J=k[E>>2]|0;do if(J){O=J;while(1){P=k[O+16>>2]|0;if((K|0)<(P|0)){R=k[O>>2]|0;if(!R){ea=O;fa=O;u=48;break}else ga=R}else{if((P|0)>=(K|0)){ha=O;u=54;break}P=O+4|0;R=k[P>>2]|0;if(!R){ia=P;ja=O;u=52;break}else ga=R}O=ga}if((u|0)==48){u=0;k[d>>2]=fa;ka=ea;la=fa;u=55;break}else if((u|0)==52){u=0;k[d>>2]=ja;ka=ia;la=ja;u=55;break}else if((u|0)==54){u=0;k[d>>2]=ha;if(!ha){ka=d;la=ha;u=55;break}else{ma=ha;break}}}else{k[d>>2]=E;ka=E;la=L;u=55}while(0);if((u|0)==55){u=0;x=0;J=Ba(563,24)|0;O=x;x=0;if(O&1)break;k[J+16>>2]=K;k[J+20>>2]=0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=la;k[ka>>2]=J;O=k[k[l>>2]>>2]|0;if(!O)na=J;else{k[l>>2]=O;na=k[ka>>2]|0}ui(k[C>>2]|0,na);k[D>>2]=(k[D>>2]|0)+1;ma=J}k[ma+20>>2]=G;J=k[w>>2]|0;if(J)j0a(J);if((K|0)<(k[q>>2]|0))K=K+1|0;else break b}K=Hc()|0;L=M;y=k[w>>2]|0;if(!y){ca=L;da=K;break a}j0a(y);ca=L;da=K;break a}while(0);x=0;fb(181,p|0,k[b+152>>2]|0,b+192|0);I=x;x=0;if(I&1){I=Hc()|0;ca=M;da=I;break}x=0;La(55,a|0,p|0,k[b+16>>2]|0,k[b>>2]|0,j|0,l|0);I=x;x=0;if(I&1){I=Hc()|0;K=M;ly(p);ca=K;da=I;break}ly(p);I=k[s>>2]|0;if(!I){oa=k[E>>2]|0;ny(l,oa);pa=k[z>>2]|0;ny(j,pa);oy(h);py(g);py(f);r=c;return}K=a+4|0;L=k[K>>2]|0;if((L|0)!=(k[a+8>>2]|0)){k[L>>2]=k[I>>2];y=L+8|0;F=I+8|0;N=y+40|0;do{k[y>>2]=k[F>>2];y=y+4|0;F=F+4|0}while((y|0)<(N|0));F=I+48|0;y=k[F+4>>2]|0;N=L+48|0;k[N>>2]=k[F>>2];k[N+4>>2]=y;k[L+56>>2]=k[I+56>>2];y=k[I+60>>2]|0;k[L+60>>2]=y;if(y)h0a(y);k[L+64>>2]=k[I+64>>2];k[L+68>>2]=k[I+68>>2];y=k[I+72>>2]|0;k[L+72>>2]=y;if(y)h0a(y);k[K>>2]=(k[K>>2]|0)+80;oa=k[E>>2]|0;ny(l,oa);pa=k[z>>2]|0;ny(j,pa);oy(h);py(g);py(f);r=c;return}x=0;xa(669,a|0,I|0);y=x;x=0;if(!(y&1)){oa=k[E>>2]|0;ny(l,oa);pa=k[z>>2]|0;ny(j,pa);oy(h);py(g);py(f);r=c;return}y=Hc()|0;N=M;F=k[a>>2]|0;if(!F){ca=N;da=y}else{J=k[K>>2]|0;if((J|0)==(F|0))qa=F;else{O=J;do{k[K>>2]=O+-80;J=k[O+-8>>2]|0;if(J)j0a(J);J=k[O+-20>>2]|0;if(J)j0a(J);O=k[K>>2]|0}while((O|0)!=(F|0));qa=k[a>>2]|0}OBa(qa);ca=N;da=y}}while(0);ny(l,k[E>>2]|0);ny(j,k[z>>2]|0);oy(h);A=ca;B=da}while(0);py(g);ra=A;sa=B;py(f);Sc(sa|0)}B=Hc()|0;ra=M;sa=B;py(f);Sc(sa|0)}function Zx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;b=r;r=r+816|0;c=b+800|0;d=b+784|0;e=b+768|0;f=b+752|0;g=b+736|0;h=b+720|0;i=b+560|0;j=b+400|0;l=b+240|0;m=b+640|0;n=b+480|0;o=b+160|0;p=b+80|0;q=b;s=b+320|0;t=a+204|0;u=k[t>>2]|0;if(!u){r=b;return}v=a+96|0;w=k[a+152>>2]|0;y=u+48|0;k[i>>2]=1;z=i+8|0;k[z>>2]=87;k[i+40>>2]=1;A=i+48|0;k[A>>2]=-1;k[A+4>>2]=-1;A=i+56|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[A+16>>2]=0;a:do if(((k[u>>2]|0)==1?(k[u+40>>2]|0)==1:0)?(A=u+8|0,(k[A>>2]|0)==87):0){i=A;B=z;while(1){B=B+4|0;if((i|0)==(A|0))break;i=i+4|0;if((k[i>>2]|0)!=(k[B>>2]|0))break a}B=k[u+64>>2]|0;i=yR(v,(k[v>>2]|0)+-1|0,y)|0;if(!(_E(w,i)|0)){if(!(bF(w,i)|0)){r=b;return}k[n>>2]=1;k[n+8>>2]=80;k[n+40>>2]=1;i=y;A=k[i+4>>2]|0;C=n+48|0;k[C>>2]=k[i>>2];k[C+4>>2]=A;k[n+56>>2]=k[u+56>>2];A=n+60|0;C=k[u+60>>2]|0;k[A>>2]=C;if(C)h0a(C);k[n+64>>2]=0;k[n+68>>2]=0;C=n+72|0;k[C>>2]=0;x=0;nb(93,f|0,v|0,n|0,1);i=x;x=0;b:do if(!(i&1)){do if(k[f>>2]|0){D=a+196|0;E=k[D>>2]|0;if((E|0)==(k[a+200>>2]|0)){x=0;xa(670,a+192|0,f|0);F=x;x=0;if(F&1)break b;else break}else{k[E>>2]=k[f>>2];k[E+4>>2]=k[f+4>>2];k[E+8>>2]=k[f+8>>2];k[E+12>>2]=k[f+12>>2];k[D>>2]=(k[D>>2]|0)+16;break}}while(0);x=0;nb(93,e|0,v|0,n|0,1);D=x;x=0;if(!(D&1)){do if(k[e>>2]|0){D=a+196|0;E=k[D>>2]|0;if((E|0)==(k[a+200>>2]|0)){x=0;xa(670,a+192|0,e|0);F=x;x=0;if(F&1)break b;else break}else{k[E>>2]=k[e>>2];k[E+4>>2]=k[e+4>>2];k[E+8>>2]=k[e+8>>2];k[E+12>>2]=k[e+12>>2];k[D>>2]=(k[D>>2]|0)+16;break}}while(0);k[t>>2]=0;D=k[C>>2]|0;if(D)j0a(D);D=k[A>>2]|0;if(D)j0a(D);r=b;return}}while(0);i=Hc()|0;D=M;E=k[C>>2]|0;if(E)j0a(E);E=k[A>>2]|0;if(!E){G=i;H=D;Sc(G|0)}j0a(E);G=i;H=D;Sc(G|0)}k[j>>2]=1;k[j+8>>2]=144;k[j+40>>2]=1;D=y;i=k[D+4>>2]|0;E=j+48|0;k[E>>2]=k[D>>2];k[E+4>>2]=i;i=u+56|0;k[j+56>>2]=k[i>>2];E=j+60|0;D=u+60|0;F=k[D>>2]|0;k[E>>2]=F;if(F)h0a(F);k[j+64>>2]=0;k[j+68>>2]=0;F=j+72|0;k[F>>2]=0;x=0;nb(93,h|0,v|0,j|0,1);I=x;x=0;c:do if(!(I&1)){do if(k[h>>2]|0){J=a+196|0;K=k[J>>2]|0;if((K|0)==(k[a+200>>2]|0)){x=0;xa(670,a+192|0,h|0);L=x;x=0;if(L&1)break c;else break}else{k[K>>2]=k[h>>2];k[K+4>>2]=k[h+4>>2];k[K+8>>2]=k[h+8>>2];k[K+12>>2]=k[h+12>>2];k[J>>2]=(k[J>>2]|0)+16;break}}while(0);J=k[F>>2]|0;if(J)j0a(J);J=k[E>>2]|0;if(J)j0a(J);k[l>>2]=1;k[l+8>>2]=80;k[l+40>>2]=1;J=y;K=k[J+4>>2]|0;L=l+48|0;k[L>>2]=k[J>>2];k[L+4>>2]=K;k[l+56>>2]=k[i>>2];K=l+60|0;L=k[D>>2]|0;k[K>>2]=L;if(L)h0a(L);k[l+64>>2]=0;k[l+68>>2]=0;L=l+72|0;k[L>>2]=0;x=0;nb(93,g|0,v|0,l|0,1);J=x;x=0;d:do if(!(J&1)){do if(k[g>>2]|0){N=a+196|0;O=k[N>>2]|0;if((O|0)==(k[a+200>>2]|0)){x=0;xa(670,a+192|0,g|0);P=x;x=0;if(P&1)break d;else break}else{k[O>>2]=k[g>>2];k[O+4>>2]=k[g+4>>2];k[O+8>>2]=k[g+8>>2];k[O+12>>2]=k[g+12>>2];k[N>>2]=(k[N>>2]|0)+16;break}}while(0);N=k[L>>2]|0;if(N)j0a(N);N=k[K>>2]|0;if(N)j0a(N);k[m>>2]=1;k[m+8>>2]=86;k[m+40>>2]=1;N=y;O=k[N+4>>2]|0;P=m+48|0;k[P>>2]=k[N>>2];k[P+4>>2]=O;k[m+56>>2]=k[i>>2];O=m+60|0;P=k[D>>2]|0;k[O>>2]=P;if(P)h0a(P);k[m+68>>2]=0;P=m+72|0;k[P>>2]=0;k[m+64>>2]=B;x=0;N=Ta(520,w|0,m|0)|0;Q=x;x=0;if(Q&1){Q=Hc()|0;R=M;S=k[P>>2]|0;if(S)j0a(S);S=k[O>>2]|0;if(!S){G=Q;H=R;Sc(G|0)}j0a(S);G=Q;H=R;Sc(G|0)}else{k[t>>2]=N;N=k[P>>2]|0;if(N)j0a(N);N=k[O>>2]|0;if(N)j0a(N);r=b;return}}while(0);J=Hc()|0;N=M;O=k[L>>2]|0;if(O)j0a(O);O=k[K>>2]|0;if(!O){G=J;H=N;Sc(G|0)}j0a(O);G=J;H=N;Sc(G|0)}while(0);B=Hc()|0;D=M;i=k[F>>2]|0;if(i)j0a(i);i=k[E>>2]|0;if(!i){G=B;H=D;Sc(G|0)}j0a(i);G=B;H=D;Sc(G|0)}while(0);k[o>>2]=1;m=o+8|0;k[m>>2]=243;k[o+40>>2]=1;g=o+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=o+56|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;if((k[u>>2]|0)!=1){r=b;return}if((k[u+40>>2]|0)!=1){r=b;return}g=u+8|0;if((k[g>>2]|0)==243){T=g;U=m}else{r=b;return}while(1){U=U+4|0;if((T|0)==(g|0))break;T=T+4|0;if((k[T>>2]|0)!=(k[U>>2]|0)){V=120;break}}if((V|0)==120){r=b;return}if(!(bF(w,yR(v,(k[v>>2]|0)+-1|0,y)|0)|0)){r=b;return}k[p>>2]=1;k[p+8>>2]=80;k[p+40>>2]=1;V=y;U=k[V+4>>2]|0;T=p+48|0;k[T>>2]=k[V>>2];k[T+4>>2]=U;U=u+56|0;k[p+56>>2]=k[U>>2];T=p+60|0;V=u+60|0;u=k[V>>2]|0;k[T>>2]=u;if(u)h0a(u);k[p+64>>2]=0;k[p+68>>2]=0;u=p+72|0;k[u>>2]=0;x=0;nb(93,d|0,v|0,p|0,1);p=x;x=0;e:do if(!(p&1)){do if(k[d>>2]|0){g=a+196|0;m=k[g>>2]|0;if((m|0)==(k[a+200>>2]|0)){x=0;xa(670,a+192|0,d|0);o=x;x=0;if(o&1)break e;else break}else{k[m>>2]=k[d>>2];k[m+4>>2]=k[d+4>>2];k[m+8>>2]=k[d+8>>2];k[m+12>>2]=k[d+12>>2];k[g>>2]=(k[g>>2]|0)+16;break}}while(0);E=k[u>>2]|0;if(E)j0a(E);E=k[T>>2]|0;if(E)j0a(E);k[q>>2]=1;k[q+8>>2]=80;k[q+40>>2]=1;E=y;F=k[E+4>>2]|0;g=q+48|0;k[g>>2]=k[E>>2];k[g+4>>2]=F;k[q+56>>2]=k[U>>2];F=q+60|0;g=k[V>>2]|0;k[F>>2]=g;if(g)h0a(g);k[q+64>>2]=0;k[q+68>>2]=0;g=q+72|0;k[g>>2]=0;x=0;nb(93,c|0,v|0,q|0,1);E=x;x=0;f:do if(!(E&1)){do if(k[c>>2]|0){m=a+196|0;o=k[m>>2]|0;if((o|0)==(k[a+200>>2]|0)){x=0;xa(670,a+192|0,c|0);l=x;x=0;if(l&1)break f;else break}else{k[o>>2]=k[c>>2];k[o+4>>2]=k[c+4>>2];k[o+8>>2]=k[c+8>>2];k[o+12>>2]=k[c+12>>2];k[m>>2]=(k[m>>2]|0)+16;break}}while(0);K=k[g>>2]|0;if(K)j0a(K);K=k[F>>2]|0;if(K)j0a(K);k[s>>2]=1;k[s+8>>2]=0;k[s+40>>2]=1;K=y;L=k[K+4>>2]|0;m=s+48|0;k[m>>2]=k[K>>2];k[m+4>>2]=L;k[s+56>>2]=k[U>>2];L=s+60|0;m=k[V>>2]|0;k[L>>2]=m;if(m)h0a(m);k[s+64>>2]=0;k[s+68>>2]=0;m=s+72|0;k[m>>2]=0;x=0;K=Ta(520,w|0,s|0)|0;o=x;x=0;if(o&1){o=Hc()|0;l=M;h=k[m>>2]|0;if(h)j0a(h);h=k[L>>2]|0;if(!h){G=o;H=l;Sc(G|0)}j0a(h);G=o;H=l;Sc(G|0)}else{k[t>>2]=K;K=k[m>>2]|0;if(K)j0a(K);K=k[L>>2]|0;if(K)j0a(K);r=b;return}}while(0);E=Hc()|0;K=M;L=k[g>>2]|0;if(L)j0a(L);L=k[F>>2]|0;if(!L){G=E;H=K;Sc(G|0)}j0a(L);G=E;H=K;Sc(G|0)}while(0);b=Hc()|0;t=M;s=k[u>>2]|0;if(s)j0a(s);s=k[T>>2]|0;if(!s){G=b;H=t;Sc(G|0)}j0a(s);G=b;H=t;Sc(G|0)}function _x(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0;g=r;r=r+128|0;h=g+108|0;i=g+104|0;j=g+16|0;l=g;m=g+96|0;n=g+56|0;o=g+40|0;p=g+28|0;q=b+12|0;k[q>>2]=d;s=b+28|0;if((s|0)!=(e|0)){k[j>>2]=k[e>>2];k[l>>2]=e+4;k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];ry(s,i,h)}t=b+80|0;if((t|0)!=(f|0)){k[j>>2]=k[f>>2];k[l>>2]=f+4;k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];ry(t,i,h)}f=k[s>>2]|0;s=b+32|0;if((f|0)!=(s|0)){u=b+40|0;v=b+44|0;w=v;y=b+44|0;z=b+48|0;A=f;while(1){f=A+20|0;B=k[v>>2]|0;do if(B){C=k[f>>2]|0;D=B;while(1){E=k[D+16>>2]|0;if(C>>>0>>0){F=k[D>>2]|0;if(!F){G=D;H=D;I=13;break}else J=F}else{if(E>>>0>=C>>>0){K=D;I=19;break}E=D+4|0;F=k[E>>2]|0;if(!F){L=E;N=D;I=17;break}else J=F}D=J}if((I|0)==13){I=0;k[h>>2]=H;O=G;P=H;I=20;break}else if((I|0)==17){I=0;k[h>>2]=N;O=L;P=N;I=20;break}else if((I|0)==19){I=0;k[h>>2]=K;if(!K){O=h;P=K;I=20;break}else{Q=K;break}}}else{k[h>>2]=v;O=v;P=w;I=20}while(0);if((I|0)==20){I=0;B=KBa(32)|0;k[B+16>>2]=k[f>>2];D=B+24|0;k[D>>2]=0;k[B+28>>2]=0;k[B+20>>2]=D;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=P;k[O>>2]=B;D=k[k[u>>2]>>2]|0;if(!D)R=B;else{k[u>>2]=D;R=k[O>>2]|0}ui(k[y>>2]|0,R);k[z>>2]=(k[z>>2]|0)+1;Q=B}B=Q+20|0;D=A+16|0;C=Q+24|0;F=k[C>>2]|0;do if(F){E=k[D>>2]|0;S=F;while(1){T=k[S+16>>2]|0;if((E|0)<(T|0)){U=k[S>>2]|0;if(!U){V=S;W=S;I=27;break}else X=U}else{if((T|0)>=(E|0)){Y=S;I=32;break}T=S+4|0;U=k[T>>2]|0;if(!U){Z=T;_=S;I=31;break}else X=U}S=X}if((I|0)==27){I=0;k[h>>2]=W;$=V;aa=W;break}else if((I|0)==31){I=0;k[h>>2]=_;$=Z;aa=_;break}else if((I|0)==32){I=0;k[h>>2]=Y;$=h;aa=Y;break}}else{k[h>>2]=C;$=C;aa=C}while(0);if(!(k[$>>2]|0)){C=KBa(20)|0;k[C+16>>2]=k[D>>2];k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=aa;k[$>>2]=C;F=k[k[B>>2]>>2]|0;if(!F)ba=C;else{k[B>>2]=F;ba=k[$>>2]|0}ui(k[Q+24>>2]|0,ba);F=Q+28|0;k[F>>2]=(k[F>>2]|0)+1}F=k[A+4>>2]|0;if(!F){C=A;while(1){f=k[C+8>>2]|0;if((k[f>>2]|0)==(C|0)){ca=f;break}else C=f}}else{C=F;while(1){B=k[C>>2]|0;if(!B){ca=C;break}else C=B}}if((ca|0)==(s|0))break;else A=ca}}ca=k[b+56>>2]|0;A=b+60|0;if((ca|0)!=(A|0)){Q=ca;while(1){by(b,k[(k[Q+28>>2]|0)+-4>>2]|0);ca=k[Q+4>>2]|0;if(!ca){ba=Q;while(1){$=k[ba+8>>2]|0;if((k[$>>2]|0)==(ba|0)){da=$;break}else ba=$}}else{ba=ca;while(1){$=k[ba>>2]|0;if(!$){da=ba;break}else ba=$}}if((da|0)==(A|0))break;else Q=da}}da=k[t>>2]|0;Q=b+84|0;if((da|0)!=(Q|0)){A=b+68|0;ba=b+72|0;ca=ba;$=b+72|0;aa=b+76|0;Y=da;while(1){da=Y+20|0;_=k[ba>>2]|0;do if(_){Z=k[da>>2]|0;W=_;while(1){V=k[W+16>>2]|0;if(Z>>>0>>0){X=k[W>>2]|0;if(!X){ea=W;fa=W;I=56;break}else ga=X}else{if(V>>>0>=Z>>>0){ha=W;I=61;break}V=W+4|0;X=k[V>>2]|0;if(!X){ia=V;ja=W;I=60;break}else ga=X}W=ga}if((I|0)==56){I=0;k[h>>2]=fa;ka=ea;la=fa;break}else if((I|0)==60){I=0;k[h>>2]=ja;ka=ia;la=ja;break}else if((I|0)==61){I=0;k[h>>2]=ha;ka=h;la=ha;break}}else{k[h>>2]=ba;ka=ba;la=ca}while(0);if(!(k[ka>>2]|0)){_=KBa(20)|0;k[_+16>>2]=k[da>>2];k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=la;k[ka>>2]=_;W=k[k[A>>2]>>2]|0;if(!W)ma=_;else{k[A>>2]=W;ma=k[ka>>2]|0}ui(k[$>>2]|0,ma);k[aa>>2]=(k[aa>>2]|0)+1}by(b,k[da>>2]|0);W=k[Y+4>>2]|0;if(!W){_=Y;while(1){Z=k[_+8>>2]|0;if((k[Z>>2]|0)==(_|0)){na=Z;break}else _=Z}}else{_=W;while(1){da=k[_>>2]|0;if(!da){na=_;break}else _=da}}if((na|0)==(Q|0))break;else Y=na}}na=j+4|0;k[na>>2]=0;Y=j+8|0;k[Y>>2]=0;aa=j+4|0;k[j>>2]=aa;ma=k[b+16>>2]|0;$=b+20|0;ka=aa;a:do if((ma|0)!=($|0)){A=m+4|0;la=m+8|0;ca=b+52|0;ba=ma;b:while(1){ha=k[ba+16>>2]|0;k[m>>2]=ha;k[A>>2]=k[ba+20>>2];ja=ha;ha=m;while(1){ia=k[ca>>2]|0;fa=k[ia>>2]|0;if((((k[ia+4>>2]|0)-fa|0)/24|0)>>>0>ja>>>0)oa=fa;else{x=0;va(1484,ia|0);fa=x;x=0;if(fa&1){I=77;break b}oa=k[ia>>2]|0}ia=k[oa+(ja*24|0)+20>>2]|0;do if(ia){if(ia>>>0>>0){I=92;break b}x=0;fa=Ba(563,24)|0;ea=x;x=0;if(ea&1){I=77;break b}ea=fa+16|0;k[ea>>2]=ia;k[ea+4>>2]=ja;ea=k[aa>>2]|0;do if(ea){ga=ea;c:while(1){_=k[ga+16>>2]|0;do if(ia>>>0>=_>>>0){if(_>>>0>=ia>>>0){W=k[ga+20>>2]|0;if(ja>>>0>>0){I=103;break}if(W>>>0>=ja>>>0){qa=ga;I=109;break c}}W=ga+4|0;da=k[W>>2]|0;if(!da){ra=W;sa=ga;I=108;break c}else ta=da}else I=103;while(0);if((I|0)==103){I=0;_=k[ga>>2]|0;if(!_){ua=ga;wa=ga;I=104;break}else ta=_}ga=ta}if((I|0)==104){I=0;k[h>>2]=wa;ya=ua;za=wa;break}else if((I|0)==108){I=0;k[h>>2]=sa;ya=ra;za=sa;break}else if((I|0)==109){I=0;k[h>>2]=qa;ya=h;za=qa;break}}else{k[h>>2]=aa;ya=aa;za=ka}while(0);if(k[ya>>2]|0){OBa(fa);break}k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=za;k[ya>>2]=fa;ea=k[k[j>>2]>>2]|0;if(!ea)Aa=fa;else{k[j>>2]=ea;Aa=k[ya>>2]|0}ui(k[na>>2]|0,Aa);k[Y>>2]=(k[Y>>2]|0)+1}while(0);ia=ha+4|0;if((ia|0)==(la|0))break;ja=k[ia>>2]|0;ha=ia}ha=k[ba+4>>2]|0;if(!ha){ja=ba;while(1){ia=k[ja+8>>2]|0;if((k[ia>>2]|0)==(ja|0)){Ca=ia;break}else ja=ia}}else{ja=ha;while(1){ia=k[ja>>2]|0;if(!ia){Ca=ja;break}else ja=ia}}if((Ca|0)==($|0)){I=72;break}else ba=Ca}if((I|0)==72){ba=k[j>>2]|0;if((ba|0)==(aa|0)){I=118;break}la=b+44|0;ca=ba;while(1){ba=k[la>>2]|0;A=k[ca+20>>2]|0;d:do if(!ba)I=126;else{ja=ba;while(1){ha=k[ja+16>>2]|0;if(A>>>0>>0)Da=ja;else{if(ha>>>0>=A>>>0)break d;Da=ja+4|0}ja=k[Da>>2]|0;if(!ja){I=126;break}}}while(0);if((I|0)==126?(I=0,x=0,fb(182,b|0,A|0,1),ba=x,x=0,ba&1):0)break;ba=k[ca+4>>2]|0;if(!ba){ja=ca;while(1){ha=k[ja+8>>2]|0;if((k[ha>>2]|0)==(ja|0)){Ea=ha;break}else ja=ha}}else{ja=ba;while(1){A=k[ja>>2]|0;if(!A){Ea=ja;break}else ja=A}}if((Ea|0)==(aa|0)){I=118;break a}else ca=Ea}ca=Hc()|0;Fa=M;Ga=ca;break}else if((I|0)==77){ca=Hc()|0;Fa=M;Ga=ca;break}else if((I|0)==92){ca=n;la=ca+36|0;do{k[ca>>2]=0;ca=ca+4|0}while((ca|0)<(la|0));ca=n+20|0;la=n+24|0;k[la>>2]=0;k[n+28>>2]=0;k[n+32>>2]=0;k[n+36>>2]=-1;ja=n+4|0;ba=n+8|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;K2a(h);k[n+4>>2]=24472;k[n>>2]=24436;k[ca>>2]=24496;x=0;nb(94,n|0,213334,213452,164);x=0;A=Hc()|0;ha=M;k[ja>>2]=24528;k[ja+-4>>2]=24556;k[ja+16>>2]=24580;K2a(ba);k[ca>>2]=20796;ca=k[la>>2]|0;if(ca){x=0;ba=Ba(k[(k[ca>>2]|0)+16>>2]|0,ca|0)|0;ca=x;x=0;if(ca&1){ca=Hc(0)|0;Fg(ca)}if(ba)k[la>>2]=0}Ha=A;Ia=ha;Ja=k[aa>>2]|0;vy(j,Ja);Sc(Ha|0)}}else I=118;while(0);e:do if((I|0)==118){n=k[t>>2]|0;f:do if((n|0)!=(Q|0)){Ea=b+40|0;Da=b+44|0;Ca=Da;$=b+44|0;Y=b+48|0;Aa=l+4|0;na=l+8|0;ya=l+12|0;za=b+52|0;ka=l+8|0;qa=n;g:while(1){sa=qa+16|0;ra=k[s>>2]|0;h:do if(ra){wa=k[sa>>2]|0;ua=ra;while(1){ta=k[ua+16>>2]|0;if((wa|0)<(ta|0))Ka=ua;else{if((ta|0)>=(wa|0)){La=ra;break}Ka=ua+4|0}ua=k[Ka>>2]|0;if(!ua){I=149;break h}}while(1){ua=k[La+16>>2]|0;if((wa|0)<(ua|0)){fa=k[La>>2]|0;if(!fa){I=145;break g}else Ma=fa}else{if((ua|0)>=(wa|0)){Na=La;break}ua=k[La+4>>2]|0;if(!ua){I=145;break g}else Ma=ua}La=Ma}if(!Na){I=145;break g}if((k[Na+20>>2]|0)!=(k[qa+20>>2]|0))I=149}else I=149;while(0);i:do if((I|0)==149){I=0;ra=qa+20|0;x=0;fb(182,b|0,k[ra>>2]|0,0);wa=x;x=0;if(wa&1){I=75;break g}wa=k[Da>>2]|0;do if(wa){ua=k[ra>>2]|0;fa=wa;while(1){ta=k[fa+16>>2]|0;if(ua>>>0>>0){c=k[fa>>2]|0;if(!c){Oa=fa;Pa=fa;I=154;break}else Qa=c}else{if(ta>>>0>=ua>>>0){Ra=fa;I=160;break}ta=fa+4|0;c=k[ta>>2]|0;if(!c){Sa=ta;Ua=fa;I=158;break}else Qa=c}fa=Qa}if((I|0)==154){I=0;k[h>>2]=Pa;Va=Oa;Wa=Pa;I=161;break}else if((I|0)==158){I=0;k[h>>2]=Ua;Va=Sa;Wa=Ua;I=161;break}else if((I|0)==160){I=0;k[h>>2]=Ra;if(!Ra){Va=h;Wa=Ra;I=161;break}else{Xa=Ra;break}}}else{k[h>>2]=Da;Va=Da;Wa=Ca;I=161}while(0);if((I|0)==161){I=0;x=0;wa=Ba(563,32)|0;fa=x;x=0;if(fa&1){I=75;break g}k[wa+16>>2]=k[ra>>2];fa=wa+24|0;k[fa>>2]=0;k[wa+28>>2]=0;k[wa+20>>2]=fa;k[wa>>2]=0;k[wa+4>>2]=0;k[wa+8>>2]=Wa;k[Va>>2]=wa;fa=k[k[Ea>>2]>>2]|0;if(!fa)Ya=wa;else{k[Ea>>2]=fa;Ya=k[Va>>2]|0}ui(k[$>>2]|0,Ya);k[Y>>2]=(k[Y>>2]|0)+1;Xa=wa}wa=k[Xa+28>>2]|0;x=0;fb(140,o|0,329672,0);fa=x;x=0;if(fa&1){I=75;break g}x=0;pa(49,(wa|0)!=0|0,o|0,179,213452,213334);wa=x;x=0;if(wa&1){I=189;break g}K2a(o);wa=k[Da>>2]|0;do if(wa){fa=k[ra>>2]|0;ua=wa;while(1){c=k[ua+16>>2]|0;if(fa>>>0>>0){ta=k[ua>>2]|0;if(!ta){Za=ua;_a=ua;I=171;break}else $a=ta}else{if(c>>>0>=fa>>>0){ab=ua;I=177;break}c=ua+4|0;ta=k[c>>2]|0;if(!ta){bb=c;cb=ua;I=175;break}else $a=ta}ua=$a}if((I|0)==171){I=0;k[i>>2]=_a;db=Za;eb=_a;I=178;break}else if((I|0)==175){I=0;k[i>>2]=cb;db=bb;eb=cb;I=178;break}else if((I|0)==177){I=0;k[i>>2]=ab;if(!ab){db=i;eb=ab;I=178;break}else{gb=ab;break}}}else{k[i>>2]=Da;db=Da;eb=Ca;I=178}while(0);if((I|0)==178){I=0;x=0;wa=Ba(563,32)|0;ua=x;x=0;if(ua&1){I=75;break g}k[wa+16>>2]=k[ra>>2];ua=wa+24|0;k[ua>>2]=0;k[wa+28>>2]=0;k[wa+20>>2]=ua;k[wa>>2]=0;k[wa+4>>2]=0;k[wa+8>>2]=eb;k[db>>2]=wa;ua=k[k[Ea>>2]>>2]|0;if(!ua)hb=wa;else{k[Ea>>2]=ua;hb=k[db>>2]|0}ui(k[$>>2]|0,hb);k[Y>>2]=(k[Y>>2]|0)+1;gb=wa}wa=k[gb+24>>2]|0;if(wa){ua=k[sa>>2]|0;fa=wa;do{wa=k[fa+16>>2]|0;if((ua|0)<(wa|0))ib=fa;else{if((wa|0)>=(ua|0))break i;ib=fa+4|0}fa=k[ib>>2]|0}while((fa|0)!=0)}k[l>>2]=-1;k[Aa>>2]=-1;k[na>>2]=0;k[ya>>2]=0;fa=k[za>>2]|0;ua=k[ra>>2]|0;wa=k[fa>>2]|0;if((((k[fa+4>>2]|0)-wa|0)/24|0)>>>0>ua>>>0)jb=wa;else{x=0;va(1484,fa|0);wa=x;x=0;if(wa&1){I=202;break g}jb=k[fa>>2]|0}if(!(k[jb+(ua*24|0)+4>>2]|0))kb=0;else{ua=k[za>>2]|0;fa=k[ra>>2]|0;wa=k[ua>>2]|0;if((((k[ua+4>>2]|0)-wa|0)/24|0)>>>0>fa>>>0)lb=wa;else{x=0;va(1484,ua|0);wa=x;x=0;if(wa&1){I=202;break g}lb=k[ua>>2]|0}ua=k[lb+(fa*24|0)+4>>2]|0;fa=ua+48|0;wa=k[fa+4>>2]|0;ta=l;k[ta>>2]=k[fa>>2];k[ta+4>>2]=wa;wa=k[ua+56>>2]|0;ta=k[ua+60>>2]|0;if(ta)h0a(ta);k[ka>>2]=wa;k[ya>>2]=ta;kb=ta}x=0;ta=Ta(521,b|0,k[ra>>2]|0)|0;wa=x;x=0;if(wa&1){mb=kb;I=203;break g}x=0;if((ta|0)<(k[sa>>2]|0)){ey(b,ta,l);wa=x;x=0;if(wa&1){mb=kb;I=203;break g}}else{fy(b,ta,l);ta=x;x=0;if(ta&1){mb=kb;I=203;break g}}x=0;fb(183,b|0,k[sa>>2]|0,l|0);ta=x;x=0;if(ta&1){mb=kb;I=203;break g}if(kb)j0a(kb)}while(0);sa=k[qa+4>>2]|0;if(!sa){ta=qa;while(1){wa=k[ta+8>>2]|0;if((k[wa>>2]|0)==(ta|0)){ob=wa;break}else ta=wa}}else{ta=sa;while(1){wa=k[ta>>2]|0;if(!wa){ob=ta;break}else ta=wa}}if((ob|0)==(Q|0)){I=218;break f}else qa=ob}if((I|0)==75){qa=Hc()|0;Fa=M;Ga=qa;break e}else if((I|0)==145){qa=Rd(8)|0;x=0;xa(671,qa|0,296399);ya=x;x=0;if(ya&1){ya=Hc()|0;ka=M;Fc(qa|0);Fa=ka;Ga=ya;break e}else{k[qa>>2]=47544;x=0;fb(149,qa|0,9024,933);x=0;break}}else if((I|0)==189){qa=Hc()|0;ya=M;K2a(o);Ha=qa;Ia=ya;Ja=k[aa>>2]|0;vy(j,Ja);Sc(Ha|0)}else if((I|0)==202){ya=Hc()|0;Ha=ya;Ia=M;Ja=k[aa>>2]|0;vy(j,Ja);Sc(Ha|0)}else if((I|0)==203){ya=Hc()|0;qa=M;if(!mb){Ha=ya;Ia=qa;Ja=k[aa>>2]|0;vy(j,Ja);Sc(Ha|0)}j0a(mb);Ha=ya;Ia=qa;Ja=k[aa>>2]|0;vy(j,Ja);Sc(Ha|0)}}else I=218;while(0);do if((I|0)==218){while(1){I=0;x=0;n=Ba(584,b|0)|0;qa=x;x=0;if(qa&1){I=74;break}if(n)I=218;else break}if((I|0)==74){n=Hc()|0;Fa=M;Ga=n;break e}if(!(k[b+88>>2]|0))if(!(k[e+8>>2]|0))pb=d;else pb=(k[(k[e>>2]|0)+16>>2]|0)+-1|0;else{n=k[Q>>2]|0;if(!n){qa=Q;while(1){ya=k[qa+8>>2]|0;if((k[ya>>2]|0)==(qa|0))qa=ya;else{qb=ya;break}}}else{qa=n;while(1){ya=k[qa+4>>2]|0;if(!ya){qb=qa;break}else qa=ya}}pb=k[qb+16>>2]|0}qa=k[q>>2]|0;x=0;fb(140,p|0,213501,29);n=x;x=0;if(!(n&1)){x=0;pa(49,(pb|0)==(qa|0)|0,p|0,211,213452,213334);qa=x;x=0;if(qa&1){qa=Hc()|0;n=M;K2a(p);Ha=qa;Ia=n;Ja=k[aa>>2]|0;vy(j,Ja);Sc(Ha|0)}else{K2a(p);x=0;xa(672,a|0,b|0);n=x;x=0;if(n&1)break;vy(j,k[aa>>2]|0);r=g;return}}}while(0);n=Hc()|0;Fa=M;Ga=n}while(0);Ha=Ga;Ia=Fa;Ja=k[aa>>2]|0;vy(j,Ja);Sc(Ha|0)}function $x(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;wR(e,a+96|0,b,c);if(!(k[e>>2]|0)){r=d;return}c=a+196|0;b=k[c>>2]|0;if((b|0)==(k[a+200>>2]|0)){qy(a+192|0,e);r=d;return}else{k[b>>2]=k[e>>2];k[b+4>>2]=k[e+4>>2];k[b+8>>2]=k[e+8>>2];k[b+12>>2]=k[e+12>>2];k[c>>2]=(k[c>>2]|0)+16;r=d;return}}function ay(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+16|0;e=d;k[a>>2]=0;f=a+4|0;k[f>>2]=0;k[a+8>>2]=0;g=a+16|0;k[a+20>>2]=0;k[a+24>>2]=0;h=a+20|0;k[g>>2]=h;i=a+28|0;k[a+32>>2]=0;k[a+36>>2]=0;j=a+32|0;k[i>>2]=j;l=a+40|0;k[a+44>>2]=0;k[a+48>>2]=0;m=a+44|0;k[l>>2]=m;k[a+52>>2]=b;b=a+56|0;k[a+60>>2]=0;k[a+64>>2]=0;n=a+60|0;k[b>>2]=n;o=a+68|0;k[a+72>>2]=0;k[a+76>>2]=0;p=a+72|0;k[o>>2]=p;q=a+80|0;k[a+84>>2]=0;k[a+88>>2]=0;s=a+84|0;k[q>>2]=s;t=k[c>>2]|0;u=k[c+4>>2]|0;if((t|0)==(u|0)){r=d;return}c=e+4|0;v=t;while(1){k[e>>2]=k[v>>2];k[c>>2]=k[v+4>>2];x=0;t=Ta(522,b|0,e|0)|0;w=x;x=0;if(w&1)break;w=t+4|0;y=k[w>>2]|0;if((y|0)==(k[t+8>>2]|0)){x=0;xa(670,t|0,v|0);t=x;x=0;if(t&1)break}else{k[y>>2]=k[v>>2];k[y+4>>2]=k[v+4>>2];k[y+8>>2]=k[v+8>>2];k[y+12>>2]=k[v+12>>2];k[w>>2]=(k[w>>2]|0)+16}v=v+16|0;if((v|0)==(u|0)){z=3;break}}if((z|0)==3){r=d;return}d=Hc()|0;ny(q,k[s>>2]|0);xy(o,k[p>>2]|0);yy(b,k[n>>2]|0);zy(l,k[m>>2]|0);ny(i,k[j>>2]|0);Ay(g,k[h>>2]|0);h=k[a>>2]|0;if(!h)Sc(d|0);g=k[f>>2]|0;if((g|0)==(h|0))A=h;else{j=g;do{k[f>>2]=j+-80;g=k[j+-8>>2]|0;if(g)j0a(g);g=k[j+-20>>2]|0;if(g)j0a(g);j=k[f>>2]|0}while((j|0)!=(h|0));A=k[a>>2]|0}OBa(A);Sc(d|0)}function by(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0;c=r;r=r+352|0;d=c+184|0;e=c+160|0;f=c+304|0;g=c+288|0;h=c+276|0;j=c+264|0;l=c+120|0;n=c+80|0;o=c+40|0;p=c;q=k[a+44>>2]|0;a:do if(q){s=q;while(1){t=k[s+16>>2]|0;if(t>>>0>b>>>0)u=s;else{if(t>>>0>=b>>>0)break;u=s+4|0}s=k[u>>2]|0;if(!s)break a}r=c;return}while(0);u=a+16|0;q=a+20|0;s=k[q>>2]|0;b:do if(s){t=q;v=s;c:while(1){w=v;while(1){y=k[w+16>>2]|0;if(y>>>0>b>>>0){z=w;break}if(y>>>0>=b>>>0){A=t;B=w;break c}w=k[w+4>>2]|0;if(!w)break b}w=k[z>>2]|0;if(!w)break b;else{t=z;v=w}}v=k[B>>2]|0;d:do if(!v)C=B;else{t=B;w=v;while(1){y=w;while(1){if((k[y+16>>2]|0)>>>0>=b>>>0){D=y;break}y=k[y+4>>2]|0;if(!y){C=t;break d}}w=k[D>>2]|0;if(!w){C=D;break}else t=D}}while(0);v=k[B+4>>2]|0;e:do if(!v)E=A;else{t=A;w=v;while(1){y=w;while(1){if((k[y+16>>2]|0)>>>0>b>>>0){F=y;break}y=k[y+4>>2]|0;if(!y){E=t;break e}}w=k[F>>2]|0;if(!w){E=F;break}else t=F}}while(0);if((C|0)!=(E|0)){v=C;t=0;while(1){w=t+1|0;y=k[v+4>>2]|0;if(!y){G=v;while(1){H=k[G+8>>2]|0;if((k[H>>2]|0)==(G|0)){I=H;break}else G=H}}else{G=y;while(1){H=k[G>>2]|0;if(!H){I=G;break}else G=H}}if((I|0)==(E|0)){J=w;break}else{v=I;t=w}}if(J){r=c;return}}}while(0);J=a+52|0;I=k[J>>2]|0;E=k[I>>2]|0;if((((k[I+4>>2]|0)-E|0)/24|0)>>>0>b>>>0)K=E;else{Kpb(I);K=k[I>>2]|0}I=K+(b*24|0)|0;E=k[I+4>>2]|0;C=e;k[C>>2]=k[I>>2];k[C+4>>2]=E;E=e+8|0;By(E,K+(b*24|0)+8|0);C=e+20|0;k[C>>2]=k[K+(b*24|0)+20>>2];K=e+4|0;I=k[K>>2]|0;f:do if(!(k[I>>2]|0)){L=f;N=L+36|0;do{k[L>>2]=0;L=L+4|0}while((L|0)<(N|0));F=f+20|0;A=f+24|0;k[A>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;B=f+4|0;D=B+-4|0;z=B+16|0;s=f+8|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[f+4>>2]=24660;k[f>>2]=24624;k[F>>2]=24684;x=0;fb(140,h|0,213531,43);t=x;x=0;if(t&1){t=Hc()|0;O=t;P=M}else{k[g>>2]=21048;t=g+4|0;x=0;xa(604,t|0,h|0);v=x;x=0;if(v&1){v=Hc()|0;Q=v;R=M}else{x=0;v=Ta(523,f|0,g|0)|0;G=x;x=0;if(!(G&1)){x=0;nb(95,v|0,213575,213452,228);x=0}v=Hc()|0;G=M;k[g>>2]=21048;K2a(t);Q=v;R=G}K2a(h);O=Q;P=R}k[B>>2]=24716;k[D>>2]=24744;k[z>>2]=24768;K2a(s);k[F>>2]=20796;F=k[A>>2]|0;if(F){x=0;s=Ba(k[(k[F>>2]|0)+16>>2]|0,F|0)|0;F=x;x=0;if(F&1){F=Hc(0)|0;Fg(F)}if(s)k[A>>2]=0}S=O;T=P}else{A=k[E>>2]|0;s=e+12|0;F=k[s>>2]|0;do if((A|0)!=(F|0)){z=a+20|0;D=a+24|0;B=A;while(1){G=k[B>>2]|0;x=0;xa(673,a|0,G|0);v=x;x=0;if(v&1){U=40;break}x=0;v=Ba(563,24)|0;t=x;x=0;if(t&1){U=40;break}k[v+16>>2]=G;k[v+20>>2]=b;t=k[q>>2]|0;do if(t){y=t;while(1){if(G>>>0<(k[y+16>>2]|0)>>>0){H=k[y>>2]|0;if(!H){V=y;W=y;U=62;break}else X=H}else{H=y+4|0;Y=k[H>>2]|0;if(!Y){Z=H;_=y;U=65;break}else X=Y}y=X}if((U|0)==62){U=0;$=V;aa=W;break}else if((U|0)==65){U=0;$=Z;aa=_;break}}else{$=q;aa=q}while(0);k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=aa;k[$>>2]=v;G=k[k[u>>2]>>2]|0;if(!G)ba=v;else{k[u>>2]=G;ba=k[$>>2]|0}ui(k[z>>2]|0,ba);k[D>>2]=(k[D>>2]|0)+1;B=B+4|0;if((B|0)==(F|0)){U=55;break}}if((U|0)==40){B=Hc()|0;ca=B;da=M;break}else if((U|0)==55){ea=k[K>>2]|0;U=56;break}}else{ea=I;U=56}while(0);g:do if((U|0)==56){h:do if((ea|0)!=0?(k[ea>>2]|0)==1:0){F=k[ea+8>>2]&255;switch(F<<24>>24){case 32:case 81:case 84:break;default:break h}A=F<<24>>24==84?2:1;F=k[E>>2]|0;do if((k[s>>2]|0)==(F|0)){x=0;va(1484,E|0);B=x;x=0;if(B&1){B=Hc()|0;ca=B;da=M;break g}else{fa=k[E>>2]|0;break}}else fa=F;while(0);F=k[fa>>2]|0;v=k[a+56>>2]|0;B=a+60|0;if((v|0)!=(B|0)){D=a+20|0;z=a+24|0;w=d+8|0;G=d+40|0;t=d+48|0;y=d+56|0;Y=d+60|0;H=d+64|0;ga=d+68|0;ha=d+72|0;ia=j+4|0;ja=j+8|0;ka=j+8|0;la=l+34|0;ma=l+32|0;na=o+34|0;oa=v;i:while(1){j:do if((k[oa+16>>2]|0)==(A|0)?(v=k[oa+20>>2]|0,pa=oa+24|0,(k[(k[pa>>2]|0)+8>>2]|0)>>>0<=(k[C>>2]|0)>>>0):0){qa=k[K>>2]|0;switch((k[qa+8>>2]&255)<<24>>24){case 84:{x=0;ra=Fa(115,k[J>>2]|0,v|0,F|0)|0;sa=x;x=0;if(sa&1){U=39;break i}else{ta=ra;U=130}break}case 81:{x=0;ra=Fa(116,k[J>>2]|0,v|0,F|0)|0;sa=x;x=0;if(sa&1){U=39;break i}else{ta=ra;U=130}break}case 32:{ra=k[E>>2]|0;if((k[s>>2]|0)-ra>>2>>>0>1){ua=ra;wa=qa}else{x=0;va(1484,E|0);qa=x;x=0;if(qa&1){U=39;break i}ua=k[E>>2]|0;wa=k[K>>2]|0}qa=k[ua+4>>2]|0;k[d>>2]=1;k[w>>2]=3;k[G>>2]=1;ra=wa+48|0;sa=k[ra+4>>2]|0;ya=t;k[ya>>2]=k[ra>>2];k[ya+4>>2]=sa;k[y>>2]=k[wa+56>>2];sa=k[wa+60>>2]|0;k[Y>>2]=sa;if(sa)h0a(sa);k[H>>2]=0;k[ga>>2]=0;k[ha>>2]=0;sa=k[J>>2]|0;k[j>>2]=0;k[ia>>2]=0;k[ja>>2]=0;x=0;ya=Ba(563,8)|0;ra=x;x=0;if(ra&1){U=90;break i}k[j>>2]=ya;ra=ya+8|0;k[ka>>2]=ra;k[ya>>2]=v;k[ya+4>>2]=F;k[ia>>2]=ra;x=0;ra=Va(93,sa|0,d|0,j|0,1,0)|0;sa=x;x=0;if(sa&1){U=101;break i}sa=k[j>>2]|0;ya=sa;if(sa){v=k[ia>>2]|0;if((v|0)!=(sa|0))k[ia>>2]=v+(~((v+-4-ya|0)>>>2)<<2);OBa(sa)}x=0;sa=Ta(524,k[J>>2]|0,ra|0)|0;ra=x;x=0;if(ra&1){U=99;break i}x=0;ra=Ta(524,k[J>>2]|0,qa|0)|0;qa=x;x=0;if(qa&1){U=99;break i}qa=(ra|0)!=0;if(qa?((k[ra>>2]|0)==0?(k[ra+32>>2]|0)==1:0):0)za=1;else U=105;do if((U|0)==105){U=0;if(!sa){za=0;break}L=n;ya=sa;N=L+40|0;do{k[L>>2]=k[ya>>2];L=L+4|0;ya=ya+4|0}while((L|0)<(N|0));x=0;xa(674,l|0,n|0);v=x;x=0;if(v&1){U=99;break i}v=i[la>>0]|0;if(v<<24>>24==1){if((m[ma>>1]|0)>1){za=1;break}Aa=(k[l>>2]|0)>>>0<32}else Aa=v<<24>>24==0;v=Aa^1;if(qa^1|v){za=v;break}L=p;ya=sa;N=L+40|0;do{k[L>>2]=k[ya>>2];L=L+4|0;ya=ya+4|0}while((L|0)<(N|0));x=0;xa(674,o|0,p|0);ya=x;x=0;if(ya&1){U=99;break i}if(i[na>>0]|0){za=0;break}ya=k[sa+32>>2]|0;v=k[ra+32>>2]|0;k:do if((ya|0)==(v|0)){Ca=ya;while(1){Ca=Ca+-1|0;if((Ca|0)<=-1){Da=0;break k}Ea=k[sa+(Ca<<2)>>2]|0;Ga=k[ra+(Ca<<2)>>2]|0;if((Ea|0)!=(Ga|0)){Ha=Ea;Ia=Ga;break}}Da=Ha>>>0>Ia>>>0?1:-1}else Da=ya>>>0>v>>>0?1:-1;while(0);za=(Da|0)>-1}while(0);ra=k[ha>>2]|0;if(ra)j0a(ra);ra=k[Y>>2]|0;if(ra)j0a(ra);if(za)break j;break}default:{}}if((U|0)==130?(U=0,ta):0)break;ra=k[pa>>2]|0;sa=k[oa+28>>2]|0;qa=k[C>>2]|0;v=ra+12|0;ya=ra;l:while(1){ra=ya;while(1){Ca=ra+16|0;if((Ca|0)==(sa|0)){Ja=v;break l}if((k[ra+24>>2]|0)>>>0>>0){Ka=Ca;La=ra;break}else ra=Ca}v=La+28|0;ya=Ka}ya=k[Ja>>2]|0;x=0;xa(673,a|0,ya|0);v=x;x=0;if(v&1){U=39;break i}x=0;v=Ba(563,24)|0;qa=x;x=0;if(qa&1){U=39;break i}k[v+16>>2]=ya;k[v+20>>2]=b;qa=k[q>>2]|0;do if(qa){sa=qa;while(1){if(ya>>>0<(k[sa+16>>2]|0)>>>0){pa=k[sa>>2]|0;if(!pa){Ma=sa;Na=sa;U=141;break}else Oa=pa}else{pa=sa+4|0;ra=k[pa>>2]|0;if(!ra){Pa=pa;Qa=sa;U=144;break}else Oa=ra}sa=Oa}if((U|0)==141){U=0;Ra=Ma;Sa=Na;break}else if((U|0)==144){U=0;Ra=Pa;Sa=Qa;break}}else{Ra=q;Sa=q}while(0);k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=Sa;k[Ra>>2]=v;ya=k[k[u>>2]>>2]|0;if(!ya)Ua=v;else{k[u>>2]=ya;Ua=k[Ra>>2]|0}ui(k[D>>2]|0,Ua);k[z>>2]=(k[z>>2]|0)+1}while(0);ya=k[oa+4>>2]|0;if(!ya){qa=oa;while(1){sa=k[qa+8>>2]|0;if((k[sa>>2]|0)==(qa|0)){Wa=sa;break}else qa=sa}}else{qa=ya;while(1){sa=k[qa>>2]|0;if(!sa){Wa=qa;break}else qa=sa}}if((Wa|0)==(B|0))break h;else oa=Wa}if((U|0)==39){oa=Hc()|0;ca=oa;da=M;break g}else if((U|0)==90){oa=Hc()|0;Xa=M;Ya=oa;U=100}else if((U|0)==99){oa=Hc()|0;Xa=M;Ya=oa;U=100}else if((U|0)==101){oa=Hc()|0;B=M;z=k[j>>2]|0;D=z;if(!z){Za=oa;_a=B}else{na=k[ia>>2]|0;if((na|0)!=(z|0))k[ia>>2]=na+(~((na+-4-D|0)>>>2)<<2);OBa(z);Za=oa;_a=B}}if((U|0)==100){Za=Ya;_a=Xa}B=k[ha>>2]|0;if(B)j0a(B);B=k[Y>>2]|0;if(!B){S=Za;T=_a;break f}j0a(B);S=Za;T=_a;break f}}while(0);B=k[e+8>>2]|0;oa=B;if(B){z=k[s>>2]|0;if((z|0)!=(B|0))k[s>>2]=z+(~((z+-4-oa|0)>>>2)<<2);OBa(B)}r=c;return}while(0);S=ca;T=da}while(0);da=k[e+8>>2]|0;if(!da)Sc(S|0);T=e+12|0;e=k[T>>2]|0;if((e|0)!=(da|0))k[T>>2]=e+(~((e+-4-da|0)>>>2)<<2);OBa(da);Sc(S|0)}function cy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0;d=r;r=r+272|0;e=d+268|0;f=d+204|0;g=d+188|0;h=d+160|0;i=d+256|0;j=d+244|0;l=d+232|0;m=d+220|0;n=d+208|0;o=d+192|0;p=d+176|0;q=d;s=d+128|0;t=d+96|0;u=d+80|0;v=a+40|0;w=k[v>>2]|0;y=a+44|0;a:do if((w|0)!=(y|0)){z=h+4|0;A=h+8|0;B=h+12|0;C=h+8|0;D=h+4|0;E=a+12|0;F=C;G=w;b:while(1){k[h>>2]=k[G+16>>2];k[A>>2]=0;k[B>>2]=0;k[z>>2]=C;H=k[G+20>>2]|0;I=G+24|0;if((H|0)!=(I|0)){J=H;K=H;while(1){H=J+16|0;k[g>>2]=F;k[e>>2]=k[g>>2];L=Fy(z,e,f,H)|0;if(!(k[L>>2]|0)){x=0;N=Ba(563,20)|0;O=x;x=0;if(O&1){P=20;break b}k[N+16>>2]=k[H>>2];H=k[f>>2]|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=H;k[L>>2]=N;H=k[k[z>>2]>>2]|0;if(!H)Q=N;else{k[z>>2]=H;Q=k[L>>2]|0}ui(k[A>>2]|0,Q);k[B>>2]=(k[B>>2]|0)+1}L=k[K+4>>2]|0;if(!L){H=K;while(1){N=k[H+8>>2]|0;if((k[N>>2]|0)==(H|0)){R=N;break}else H=N}}else{H=L;while(1){N=k[H>>2]|0;if(!N){R=H;break}else H=N}}if((R|0)==(I|0))break;else{J=R;K=R}}K=k[z>>2]|0;if((K|0)!=(C|0)){J=K;while(1){if((k[J+16>>2]|0)>(k[E>>2]|0)){x=0;fb(140,i|0,329672,0);K=x;x=0;if(K&1){P=27;break b}x=0;pa(49,0,i|0,306,213452,213628);K=x;x=0;if(K&1){P=32;break b}K2a(i)}K=k[J+4>>2]|0;if(!K){I=J;while(1){H=k[I+8>>2]|0;if((k[H>>2]|0)==(I|0)){S=H;break}else I=H}}else{I=K;while(1){H=k[I>>2]|0;if(!H){S=I;break}else I=H}}if((S|0)==(C|0))break;else J=S}}}Gy(D,k[C>>2]|0);J=k[G+4>>2]|0;if(!J){I=G;while(1){K=k[I+8>>2]|0;if((k[K>>2]|0)==(I|0)){T=K;break}else I=K}}else{I=J;while(1){K=k[I>>2]|0;if(!K){T=I;break}else I=K}}if((T|0)==(y|0))break a;else G=T}if((P|0)==20){G=Hc()|0;Gy(z,k[C>>2]|0);Sc(G|0)}else if((P|0)==27){G=Hc()|0;U=G;V=M}else if((P|0)==32){G=Hc()|0;E=M;K2a(i);U=G;V=E}Gy(D,k[C>>2]|0);W=U;X=V;Sc(W|0)}while(0);gy(a)|0;V=k[y>>2]|0;c:do if(V){U=V;while(1){i=k[U+16>>2]|0;if(i>>>0>b>>>0)Y=U;else{if(i>>>0>=b>>>0)break;Y=U+4|0}U=k[Y>>2]|0;if(!U)break c}U=V;while(1){C=k[U+16>>2]|0;if(C>>>0>b>>>0){D=k[U>>2]|0;if(!D){Z=U;_=U;P=42;break}else $=D}else{if(C>>>0>=b>>>0){aa=U;P=47;break}C=U+4|0;D=k[C>>2]|0;if(!D){ba=C;ca=U;P=46;break}else $=D}U=$}if((P|0)==42){k[e>>2]=_;da=Z;ea=_;P=48}else if((P|0)==46){k[e>>2]=ca;da=ba;ea=ca;P=48}else if((P|0)==47){k[e>>2]=aa;if(!aa){da=e;ea=aa;P=48}else fa=aa}if((P|0)==48){U=KBa(32)|0;k[U+16>>2]=b;D=U+24|0;k[D>>2]=0;k[U+28>>2]=0;k[U+20>>2]=D;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=ea;k[da>>2]=U;D=k[k[v>>2]>>2]|0;if(!D)ga=U;else{k[v>>2]=D;ga=k[da>>2]|0}ui(k[a+44>>2]|0,ga);D=a+48|0;k[D>>2]=(k[D>>2]|0)+1;fa=U}U=(k[fa+28>>2]|0)!=0;q2a(j,213692,41);x=0;pa(49,U|0,j|0,316,213452,213628);U=x;x=0;if(U&1){U=Hc()|0;D=M;K2a(j);W=U;X=D;Sc(W|0)}else{K2a(j);r=d;return}}while(0);j=k[a+52>>2]|0;fa=k[j>>2]|0;if((((k[j+4>>2]|0)-fa|0)/24|0)>>>0>b>>>0)ha=fa;else{Kpb(j);ha=k[j>>2]|0}j=(k[ha+(b*24|0)+20>>2]|0)==0|c;q2a(l,213734,57);x=0;pa(49,j|0,l|0,324,213452,213628);j=x;x=0;if(j&1){j=Hc()|0;c=M;K2a(l);W=j;X=c;Sc(W|0)}K2a(l);l=ha+(b*24|0)+4|0;c=(k[l>>2]|0)!=0;q2a(m,213792,38);x=0;pa(49,c|0,m|0,325,213452,213628);c=x;x=0;if(c&1){c=Hc()|0;j=M;K2a(m);W=c;X=j;Sc(W|0)}K2a(m);m=(k[k[l>>2]>>2]|0)!=0;q2a(n,213531,43);x=0;pa(49,m|0,n|0,330,213452,213628);m=x;x=0;if(m&1){m=Hc()|0;j=M;K2a(n);W=m;X=j;Sc(W|0)}K2a(n);n=ha+(b*24|0)+8|0;j=ha+(b*24|0)+12|0;ha=k[j>>2]|0;m=k[n>>2]|0;if((ha|0)==(m|0)){ia=m;ja=ha;ka=ha}else{c=ha;do{c=c+-4|0;cy(a,k[c>>2]|0,0)}while((c|0)!=(m|0));m=k[n>>2]|0;ia=m;ja=k[j>>2]|0;ka=m}m=(k[l>>2]|0)+48|0;c=ja-ia>>2;d:do switch(c|0){case 1:{ia=hy(a,k[ka>>2]|0,b,-2147483647)|0;ja=dy(a,k[k[n>>2]>>2]|0)|0;if(ia){fy(a,ja,m);break d}else{ey(a,ja,m);break d}break}case 2:{ja=hy(a,k[ka+4>>2]|0,b,-2147483647)|0;ia=k[n>>2]|0;if(ja){fy(a,dy(a,k[ia+4>>2]|0)|0,m);ja=k[n>>2]|0;ha=k[ja>>2]|0;if((ha|0)==(k[ja+4>>2]|0)){ey(a,k[a+12>>2]|0,m);break d}if(hy(a,ha,b,-2147483647)|0){fy(a,(k[a+12>>2]|0)+-1|0,m);fy(a,dy(a,k[k[n>>2]>>2]|0)|0,m);break d}else{ey(a,dy(a,k[k[n>>2]>>2]|0)|0,m);break d}}else{ha=k[ia>>2]|0;if((ha|0)==(k[ia+4>>2]|0)){ey(a,dy(a,ha)|0,m);ey(a,k[a+12>>2]|0,m);break d}ia=hy(a,ha,b,-2147483647)|0;ha=k[n>>2]|0;if(ia){fy(a,dy(a,k[ha>>2]|0)|0,m);ey(a,dy(a,k[(k[n>>2]|0)+4>>2]|0)|0,m);fy(a,(k[a+12>>2]|0)+-1|0,m);break d}else{ey(a,dy(a,k[ha+4>>2]|0)|0,m);ey(a,dy(a,k[k[n>>2]>>2]|0)|0,m);break d}}break}default:{q2a(o,213831,57);x=0;pa(49,c>>>0<3|0,o|0,387,213452,213628);ha=x;x=0;if(!(ha&1)){K2a(o);break d}ha=Hc()|0;ia=M;K2a(o);W=ha;X=ia;Sc(W|0)}}while(0);e:do if((k[j>>2]|0)!=(k[n>>2]|0)){o=a+28|0;c=a+12|0;ka=a+32|0;ia=ka;ha=a+32|0;ja=a+36|0;fa=0;while(1){ga=(k[c>>2]|0)-fa|0;da=k[ka>>2]|0;do if(da){ea=da;while(1){aa=k[ea+16>>2]|0;if((ga|0)<(aa|0)){ca=k[ea>>2]|0;if(!ca){la=ea;ma=ea;P=91;break}else na=ca}else{if((aa|0)>=(ga|0)){oa=ea;P=97;break}aa=ea+4|0;ca=k[aa>>2]|0;if(!ca){qa=aa;ra=ea;P=95;break}else na=ca}ea=na}if((P|0)==91){P=0;k[e>>2]=ma;sa=la;ta=ma;P=98;break}else if((P|0)==95){P=0;k[e>>2]=ra;sa=qa;ta=ra;P=98;break}else if((P|0)==97){P=0;k[e>>2]=oa;if(!oa){sa=e;ta=oa;P=98;break}else{ua=oa;break}}}else{k[e>>2]=ka;sa=ka;ta=ia;P=98}while(0);if((P|0)==98){P=0;da=KBa(24)|0;k[da+16>>2]=ga;k[da+20>>2]=0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=ta;k[sa>>2]=da;ea=k[k[o>>2]>>2]|0;if(!ea)va=da;else{k[o>>2]=ea;va=k[sa>>2]|0}ui(k[ha>>2]|0,va);k[ja>>2]=(k[ja>>2]|0)+1;ua=da}da=(k[ua+20>>2]|0)==(k[(k[n>>2]|0)+(fa<<2)>>2]|0);q2a(p,213889,31);x=0;pa(49,da|0,p|0,389,213452,213628);da=x;x=0;if(da&1)break;K2a(p);fa=fa+1|0;if(fa>>>0>=(k[j>>2]|0)-(k[n>>2]|0)>>2>>>0)break e}fa=Hc()|0;ja=M;K2a(p);W=fa;X=ja;Sc(W|0)}while(0);f:do if(eB(k[l>>2]|0)|0){p=a+4|0;ua=q+8|0;va=q+40|0;sa=q+48|0;ta=q+56|0;oa=a+12|0;do{ra=k[p>>2]|0;if((k[a>>2]|0)==(ra|0))break f;k[q>>2]=1;k[ua>>2]=144;k[va>>2]=1;qa=sa;k[qa>>2]=-1;k[qa+4>>2]=-1;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[ta+16>>2]=0;if((k[ra+-80>>2]|0)!=1)break f;if((k[ra+-40>>2]|0)!=1)break f;qa=ra+-72|0;if((k[qa>>2]|0)==144){wa=qa;xa=ua}else break f;while(1){xa=xa+4|0;if((wa|0)==(qa|0))break;wa=wa+4|0;if((k[wa>>2]|0)!=(k[xa>>2]|0))break f}fy(a,(k[oa>>2]|0)+-1|0,m)}while(eB(k[l>>2]|0)|0)}while(0);if((k[j>>2]|0)!=(k[n>>2]|0)){m=a+28|0;xa=a+12|0;wa=a+32|0;q=wa;oa=a+32|0;ua=a+36|0;ta=y;sa=a+44|0;va=a+48|0;p=0;do{qa=(k[xa>>2]|0)-p|0;ga=k[wa>>2]|0;do if(ga){ra=ga;while(1){ma=k[ra+16>>2]|0;if((qa|0)<(ma|0)){la=k[ra>>2]|0;if(!la){ya=ra;za=ra;P=117;break}else Aa=la}else{if((ma|0)>=(qa|0)){Ca=ra;P=123;break}ma=ra+4|0;la=k[ma>>2]|0;if(!la){Da=ma;Ea=ra;P=121;break}else Aa=la}ra=Aa}if((P|0)==117){P=0;k[e>>2]=za;Fa=ya;Ga=za;P=124;break}else if((P|0)==121){P=0;k[e>>2]=Ea;Fa=Da;Ga=Ea;P=124;break}else if((P|0)==123){P=0;k[e>>2]=Ca;if(!Ca){Fa=e;Ga=Ca;P=124;break}else{Ha=Ca;break}}}else{k[e>>2]=wa;Fa=wa;Ga=q;P=124}while(0);if((P|0)==124){P=0;ga=KBa(24)|0;k[ga+16>>2]=qa;k[ga+20>>2]=0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=Ga;k[Fa>>2]=ga;ra=k[k[m>>2]>>2]|0;if(!ra)Ia=ga;else{k[m>>2]=ra;Ia=k[Fa>>2]|0}ui(k[oa>>2]|0,Ia);k[ua>>2]=(k[ua>>2]|0)+1;Ha=ga}ga=Ha+20|0;ra=k[y>>2]|0;do if(ra){la=k[ga>>2]|0;ma=ra;while(1){na=k[ma+16>>2]|0;if(la>>>0>>0){ja=k[ma>>2]|0;if(!ja){Ja=ma;Ka=ma;P=131;break}else La=ja}else{if(na>>>0>=la>>>0){Ma=ma;P=137;break}na=ma+4|0;ja=k[na>>2]|0;if(!ja){Na=na;Oa=ma;P=135;break}else La=ja}ma=La}if((P|0)==131){P=0;k[e>>2]=Ka;Pa=Ja;Qa=Ka;P=138;break}else if((P|0)==135){P=0;k[e>>2]=Oa;Pa=Na;Qa=Oa;P=138;break}else if((P|0)==137){P=0;k[e>>2]=Ma;if(!Ma){Pa=e;Qa=Ma;P=138;break}else{Ra=Ma;break}}}else{k[e>>2]=y;Pa=y;Qa=ta;P=138}while(0);if((P|0)==138){P=0;ra=KBa(32)|0;k[ra+16>>2]=k[ga>>2];qa=ra+24|0;k[qa>>2]=0;k[ra+28>>2]=0;k[ra+20>>2]=qa;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=Qa;k[Pa>>2]=ra;qa=k[k[v>>2]>>2]|0;if(!qa)Sa=ra;else{k[v>>2]=qa;Sa=k[Pa>>2]|0}ui(k[sa>>2]|0,Sa);k[va>>2]=(k[va>>2]|0)+1;Ra=ra}ra=Ra+20|0;qa=k[xa>>2]|0;ma=qa-p|0;la=Ra+24|0;ja=k[la>>2]|0;if(ja){na=la;fa=ja;g:while(1){ha=fa;while(1){if((k[ha+16>>2]|0)>=(ma|0)){Ta=ha;break}ha=k[ha+4>>2]|0;if(!ha){Ua=na;break g}}fa=k[Ta>>2]|0;if(!fa){Ua=Ta;break}else na=Ta}if((Ua|0)!=(la|0)?(ma|0)>=(k[Ua+16>>2]|0):0){na=k[Ua+4>>2]|0;if(!na){fa=Ua;while(1){ga=k[fa+8>>2]|0;if((k[ga>>2]|0)==(fa|0)){Va=ga;break}else fa=ga}}else{fa=na;while(1){ma=k[fa>>2]|0;if(!ma){Va=fa;break}else fa=ma}}if((k[ra>>2]|0)==(Ua|0))k[ra>>2]=Va;fa=Ra+28|0;k[fa>>2]=(k[fa>>2]|0)+-1;hk(ja,Ua);OBa(Ua);Wa=k[xa>>2]|0}else Wa=qa}else Wa=qa;fa=Wa-p|0;na=k[wa>>2]|0;if(na){ma=wa;la=na;h:while(1){ga=la;while(1){if((k[ga+16>>2]|0)>=(fa|0)){Xa=ga;break}ga=k[ga+4>>2]|0;if(!ga){Ya=ma;break h}}la=k[Xa>>2]|0;if(!la){Ya=Xa;break}else ma=Xa}if((Ya|0)!=(wa|0)?(fa|0)>=(k[Ya+16>>2]|0):0){ma=k[Ya+4>>2]|0;if(!ma){la=Ya;while(1){qa=k[la+8>>2]|0;if((k[qa>>2]|0)==(la|0)){Za=qa;break}else la=qa}}else{la=ma;while(1){fa=k[la>>2]|0;if(!fa){Za=la;break}else la=fa}}if((k[m>>2]|0)==(Ya|0))k[m>>2]=Za;k[ua>>2]=(k[ua>>2]|0)+-1;hk(na,Ya);OBa(Ya)}}p=p+1|0}while(p>>>0<(k[j>>2]|0)-(k[n>>2]|0)>>2>>>0)}iy(a,k[l>>2]|0);n=k[l>>2]|0;if((k[n>>2]|0)==1?(PQ(s,k[n+8>>2]&255),n=(k[s+20>>2]|0)==1,K2a(s),!n):0){PQ(t,k[(k[l>>2]|0)+8>>2]&255);l=k[t+20>>2]|0;x=0;fb(140,u|0,213921,32);n=x;x=0;do if(n&1){s=Hc()|0;_a=s;$a=M}else{x=0;pa(49,(l|0)==0|0,u|0,413,213452,213628);s=x;x=0;if(s&1){s=Hc()|0;j=M;K2a(u);_a=s;$a=j;break}K2a(u);K2a(t);j=k[y>>2]|0;do if(j){s=j;while(1){p=k[s+16>>2]|0;if(p>>>0>b>>>0){Ya=k[s>>2]|0;if(!Ya){ab=s;bb=s;P=219;break}else cb=Ya}else{if(p>>>0>=b>>>0){db=s;P=225;break}p=s+4|0;Ya=k[p>>2]|0;if(!Ya){eb=p;gb=s;P=223;break}else cb=Ya}s=cb}if((P|0)==219){k[e>>2]=bb;hb=ab;ib=bb;P=226;break}else if((P|0)==223){k[e>>2]=gb;hb=eb;ib=gb;P=226;break}else if((P|0)==225){k[e>>2]=db;if(!db){hb=e;ib=db;P=226;break}else break}}else{k[e>>2]=y;hb=y;ib=y;P=226}while(0);if((P|0)==226){j=KBa(32)|0;k[j+16>>2]=b;na=j+24|0;k[na>>2]=0;k[j+28>>2]=0;k[j+20>>2]=na;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=ib;k[hb>>2]=j;na=k[k[v>>2]>>2]|0;if(!na)jb=j;else{k[v>>2]=na;jb=k[hb>>2]|0}ui(k[a+44>>2]|0,jb);na=a+48|0;k[na>>2]=(k[na>>2]|0)+1}r=d;return}while(0);K2a(t);W=_a;X=$a;Sc(W|0)}W=a+28|0;$a=a+12|0;X=a+32|0;_a=k[X>>2]|0;do if(_a){t=k[$a>>2]|0;jb=_a;while(1){hb=k[jb+16>>2]|0;if((t|0)<(hb|0)){ib=k[jb>>2]|0;if(!ib){kb=jb;lb=jb;P=175;break}else mb=ib}else{if((hb|0)>=(t|0)){nb=jb;P=181;break}hb=jb+4|0;ib=k[hb>>2]|0;if(!ib){ob=hb;pb=jb;P=179;break}else mb=ib}jb=mb}if((P|0)==175){k[e>>2]=lb;qb=kb;rb=t;sb=lb;P=182;break}else if((P|0)==179){k[e>>2]=pb;qb=ob;rb=t;sb=pb;P=182;break}else if((P|0)==181){k[e>>2]=nb;if(!nb){qb=e;rb=t;sb=nb;P=182;break}else{tb=nb;break}}}else{k[e>>2]=X;qb=X;rb=k[$a>>2]|0;sb=X;P=182}while(0);if((P|0)==182){X=KBa(24)|0;k[X+16>>2]=rb;k[X+20>>2]=0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=sb;k[qb>>2]=X;sb=k[k[W>>2]>>2]|0;if(!sb)ub=X;else{k[W>>2]=sb;ub=k[qb>>2]|0}ui(k[a+32>>2]|0,ub);ub=a+36|0;k[ub>>2]=(k[ub>>2]|0)+1;tb=X}k[tb+20>>2]=b;tb=k[y>>2]|0;do if(tb){X=tb;while(1){ub=k[X+16>>2]|0;if(ub>>>0>b>>>0){qb=k[X>>2]|0;if(!qb){vb=X;wb=X;P=188;break}else xb=qb}else{if(ub>>>0>=b>>>0){yb=X;P=194;break}ub=X+4|0;qb=k[ub>>2]|0;if(!qb){zb=ub;Ab=X;P=192;break}else xb=qb}X=xb}if((P|0)==188){k[e>>2]=wb;Bb=vb;Cb=wb;P=195;break}else if((P|0)==192){k[e>>2]=Ab;Bb=zb;Cb=Ab;P=195;break}else if((P|0)==194){k[e>>2]=yb;if(!yb){Bb=e;Cb=yb;P=195;break}else{Db=yb;break}}}else{k[e>>2]=y;Bb=y;Cb=y;P=195}while(0);if((P|0)==195){y=KBa(32)|0;k[y+16>>2]=b;b=y+24|0;k[b>>2]=0;k[y+28>>2]=0;k[y+20>>2]=b;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=Cb;k[Bb>>2]=y;Cb=k[k[v>>2]>>2]|0;if(!Cb)Eb=y;else{k[v>>2]=Cb;Eb=k[Bb>>2]|0}ui(k[a+44>>2]|0,Eb);Eb=a+48|0;k[Eb>>2]=(k[Eb>>2]|0)+1;Db=y}y=Db+20|0;Eb=Db+24|0;a=k[Eb>>2]|0;do if(a){Bb=k[$a>>2]|0;Cb=a;while(1){v=k[Cb+16>>2]|0;if((Bb|0)<(v|0)){b=k[Cb>>2]|0;if(!b){Fb=Cb;Gb=Cb;P=202;break}else Hb=b}else{if((v|0)>=(Bb|0)){Ib=Cb;P=207;break}v=Cb+4|0;b=k[v>>2]|0;if(!b){Jb=v;Kb=Cb;P=206;break}else Hb=b}Cb=Hb}if((P|0)==202){k[e>>2]=Gb;Lb=Fb;Mb=Gb;break}else if((P|0)==206){k[e>>2]=Kb;Lb=Jb;Mb=Kb;break}else if((P|0)==207){k[e>>2]=Ib;Lb=e;Mb=Ib;break}}else{k[e>>2]=Eb;Lb=Eb;Mb=Eb}while(0);if(!(k[Lb>>2]|0)){Eb=KBa(20)|0;k[Eb+16>>2]=k[$a>>2];k[Eb>>2]=0;k[Eb+4>>2]=0;k[Eb+8>>2]=Mb;k[Lb>>2]=Eb;Mb=k[k[y>>2]>>2]|0;if(!Mb)Nb=Eb;else{k[y>>2]=Mb;Nb=k[Lb>>2]|0}ui(k[Db+24>>2]|0,Nb);Nb=Db+28|0;k[Nb>>2]=(k[Nb>>2]|0)+1}r=d;return}function dy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+16|0;d=c;e=a+44|0;a=k[e>>2]|0;a:do if(a){f=a;while(1){g=k[f+16>>2]|0;if(g>>>0>b>>>0)h=f;else{if(g>>>0>=b>>>0){i=a;break}h=f+4|0}f=k[h>>2]|0;if(!f){j=0;break a}}while(1){f=k[i+16>>2]|0;if(f>>>0>b>>>0){g=k[i>>2]|0;if(!g)break;else l=g}else{if(f>>>0>=b>>>0){m=i;n=12;break}f=k[i+4>>2]|0;if(!f)break;else l=f}i=l}if((n|0)==12?(m|0)!=0:0){j=(k[m+28>>2]|0)!=0;break}f=Rd(8)|0;x=0;xa(671,f|0,296399);g=x;x=0;if(g&1){g=Hc()|0;Fc(f|0);Sc(g|0)}else{k[f>>2]=47544;Gf(f|0,9024,933)}}else j=0;while(0);q2a(d,213954,37);x=0;pa(49,j|0,d|0,424,213452,213992);j=x;x=0;if(j&1){j=Hc()|0;K2a(d);Sc(j|0)}K2a(d);d=k[e>>2]|0;b:do if(d){e=d;while(1){j=k[e+16>>2]|0;if(j>>>0>b>>>0){m=k[e>>2]|0;if(!m)break b;else o=m}else{if(j>>>0>=b>>>0){p=e;break}j=k[e+4>>2]|0;if(!j)break b;else o=j}e=o}if(p){e=k[p+20>>2]|0;j=d;while(1){m=k[j+16>>2]|0;if(m>>>0>b>>>0){l=k[j>>2]|0;if(!l)break;else q=l}else{if(m>>>0>=b>>>0){s=j;n=34;break}m=k[j+4>>2]|0;if(!m)break;else q=m}j=q}if((n|0)==34?(s|0)!=0:0){j=s+24|0;if((e|0)==(j|0)){t=e;u=t+16|0;v=k[u>>2]|0;r=c;return v|0}m=e;l=e;c:while(1){i=m+16|0;h=l;while(1){a=h;f=k[a+4>>2]|0;if(!f){g=a;while(1){a=k[g+8>>2]|0;if((k[a>>2]|0)==(g|0)){w=a;break}else g=a}}else{g=f;while(1){a=k[g>>2]|0;if(!a){w=g;break}else g=a}}g=w;if((w|0)==(j|0)){t=m;break c}if((k[i>>2]|0)<(k[w+16>>2]|0)){y=w;z=g;break}else h=g}m=y;l=z}u=t+16|0;v=k[u>>2]|0;r=c;return v|0}l=Rd(8)|0;x=0;xa(671,l|0,296399);m=x;x=0;if(m&1){m=Hc()|0;Fc(l|0);Sc(m|0)}else{k[l>>2]=47544;Gf(l|0,9024,933)}}}while(0);v=Rd(8)|0;x=0;xa(671,v|0,296399);c=x;x=0;if(c&1){c=Hc()|0;Fc(v|0);Sc(c|0)}else{k[v>>2]=47544;Gf(v|0,9024,933)}return 0}function ey(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0;d=r;r=r+128|0;e=d+116|0;f=d+104|0;g=d+92|0;h=d+80|0;i=d;q2a(f,329672,0);x=0;pa(49,(b|0)!=-2147483647|0,f|0,466,213452,214055);j=x;x=0;if(j&1){j=Hc()|0;l=M;K2a(f);m=j;n=l;Sc(m|0)}K2a(f);f=a+12|0;l=1-b+(k[f>>2]|0)|0;q2a(g,270638,45);x=0;pa(50,(l|0)<17|0,g|0,468,213452,214055);j=x;x=0;if(j&1){j=Hc()|0;o=M;K2a(g);m=j;n=o;Sc(m|0)}K2a(g);q2a(h,214132,21);x=0;pa(49,(l|0)>0|0,h|0,469,213452,214055);g=x;x=0;if(g&1){g=Hc()|0;o=M;K2a(h);m=g;n=o;Sc(m|0)}K2a(h);q2a(e,295946,34);x=0;pa(51,(l+-1|0)>>>0<16|0,e|0,210,214154,296025);h=x;x=0;if(h&1){h=Hc()|0;K2a(e);Sc(h|0)}K2a(e);k[i>>2]=1;k[i+8>>2]=l+127&255;k[i+40>>2]=1;l=c;h=k[l+4>>2]|0;o=i+48|0;k[o>>2]=k[l>>2];k[o+4>>2]=h;k[i+56>>2]=k[c+8>>2];h=i+60|0;o=k[c+12>>2]|0;k[h>>2]=o;if(o)h0a(o);k[i+64>>2]=0;k[i+68>>2]=0;o=i+72|0;k[o>>2]=0;x=0;xa(675,a|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;c=M;l=k[o>>2]|0;if(l)j0a(l);l=k[h>>2]|0;if(!l){m=i;n=c;Sc(m|0)}j0a(l);m=i;n=c;Sc(m|0)}m=k[o>>2]|0;if(m)j0a(m);m=k[h>>2]|0;if(m)j0a(m);m=a+28|0;h=a+32|0;o=k[h>>2]|0;do if(o){c=o;while(1){n=k[c+16>>2]|0;if((n|0)>(b|0)){i=k[c>>2]|0;if(!i){p=c;q=c;s=16;break}else t=i}else{if((n|0)>=(b|0)){u=c;s=22;break}n=c+4|0;i=k[n>>2]|0;if(!i){v=n;w=c;s=20;break}else t=i}c=t}if((s|0)==16){k[e>>2]=q;y=p;z=q;s=23;break}else if((s|0)==20){k[e>>2]=w;y=v;z=w;s=23;break}else if((s|0)==22){k[e>>2]=u;if(!u){y=e;z=u;s=23;break}else{A=o;B=u;break}}}else{k[e>>2]=h;y=h;z=h;s=23}while(0);if((s|0)==23){u=KBa(24)|0;k[u+16>>2]=b;k[u+20>>2]=0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=z;k[y>>2]=u;z=k[k[m>>2]>>2]|0;if(!z)C=u;else{k[m>>2]=z;C=k[y>>2]|0}ui(k[a+32>>2]|0,C);C=a+36|0;k[C>>2]=(k[C>>2]|0)+1;A=k[h>>2]|0;B=u}u=k[B+20>>2]|0;do if(A){B=k[f>>2]|0;C=A;while(1){y=k[C+16>>2]|0;if((B|0)<(y|0)){z=k[C>>2]|0;if(!z){D=C;E=C;s=30;break}else F=z}else{if((y|0)>=(B|0)){G=C;s=36;break}y=C+4|0;z=k[y>>2]|0;if(!z){H=y;I=C;s=34;break}else F=z}C=F}if((s|0)==30){k[e>>2]=E;J=D;K=B;L=E;s=37;break}else if((s|0)==34){k[e>>2]=I;J=H;K=B;L=I;s=37;break}else if((s|0)==36){k[e>>2]=G;if(!G){J=e;K=B;L=G;s=37;break}else{N=A;O=G;break}}}else{k[e>>2]=h;J=h;K=k[f>>2]|0;L=h;s=37}while(0);if((s|0)==37){G=KBa(24)|0;k[G+16>>2]=K;k[G+20>>2]=0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=L;k[J>>2]=G;L=k[k[m>>2]>>2]|0;if(!L)P=G;else{k[m>>2]=L;P=k[J>>2]|0}ui(k[a+32>>2]|0,P);P=a+36|0;k[P>>2]=(k[P>>2]|0)+1;N=k[h>>2]|0;O=G}k[O+20>>2]=u;u=a+40|0;do if(N){O=k[f>>2]|0;G=N;while(1){P=k[G+16>>2]|0;if((O|0)<(P|0)){J=k[G>>2]|0;if(!J){Q=G;R=G;s=44;break}else S=J}else{if((P|0)>=(O|0)){T=G;s=50;break}P=G+4|0;J=k[P>>2]|0;if(!J){U=P;V=G;s=48;break}else S=J}G=S}if((s|0)==44){k[e>>2]=R;W=Q;X=O;Y=R;s=51;break}else if((s|0)==48){k[e>>2]=V;W=U;X=O;Y=V;s=51;break}else if((s|0)==50){k[e>>2]=T;if(!T){W=e;X=O;Y=T;s=51;break}else{Z=T;break}}}else{k[e>>2]=h;W=h;X=k[f>>2]|0;Y=h;s=51}while(0);if((s|0)==51){h=KBa(24)|0;k[h+16>>2]=X;k[h+20>>2]=0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=Y;k[W>>2]=h;Y=k[k[m>>2]>>2]|0;if(!Y)_=h;else{k[m>>2]=Y;_=k[W>>2]|0}ui(k[a+32>>2]|0,_);_=a+36|0;k[_>>2]=(k[_>>2]|0)+1;Z=h}h=Z+20|0;Z=a+44|0;_=k[Z>>2]|0;do if(_){W=k[h>>2]|0;Y=_;while(1){m=k[Y+16>>2]|0;if(W>>>0>>0){X=k[Y>>2]|0;if(!X){$=Y;aa=Y;s=58;break}else ba=X}else{if(m>>>0>=W>>>0){ca=Y;s=64;break}m=Y+4|0;X=k[m>>2]|0;if(!X){da=m;ea=Y;s=62;break}else ba=X}Y=ba}if((s|0)==58){k[e>>2]=aa;fa=$;ga=aa;s=65;break}else if((s|0)==62){k[e>>2]=ea;fa=da;ga=ea;s=65;break}else if((s|0)==64){k[e>>2]=ca;if(!ca){fa=e;ga=ca;s=65;break}else{ha=ca;break}}}else{k[e>>2]=Z;fa=Z;ga=Z;s=65}while(0);if((s|0)==65){Z=KBa(32)|0;k[Z+16>>2]=k[h>>2];h=Z+24|0;k[h>>2]=0;k[Z+28>>2]=0;k[Z+20>>2]=h;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=ga;k[fa>>2]=Z;ga=k[k[u>>2]>>2]|0;if(!ga)ia=Z;else{k[u>>2]=ga;ia=k[fa>>2]|0}ui(k[a+44>>2]|0,ia);ia=a+48|0;k[ia>>2]=(k[ia>>2]|0)+1;ha=Z}Z=ha+20|0;ia=ha+24|0;a=k[ia>>2]|0;do if(a){fa=k[f>>2]|0;ga=a;while(1){u=k[ga+16>>2]|0;if((fa|0)<(u|0)){h=k[ga>>2]|0;if(!h){ja=ga;ka=ga;s=72;break}else la=h}else{if((u|0)>=(fa|0)){ma=ga;s=77;break}u=ga+4|0;h=k[u>>2]|0;if(!h){na=u;oa=ga;s=76;break}else la=h}ga=la}if((s|0)==72){k[e>>2]=ka;qa=ja;ra=ka;break}else if((s|0)==76){k[e>>2]=oa;qa=na;ra=oa;break}else if((s|0)==77){k[e>>2]=ma;qa=e;ra=ma;break}}else{k[e>>2]=ia;qa=ia;ra=ia}while(0);if(k[qa>>2]|0){r=d;return}ia=KBa(20)|0;k[ia+16>>2]=k[f>>2];k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=ra;k[qa>>2]=ia;ra=k[k[Z>>2]>>2]|0;if(!ra)sa=ia;else{k[Z>>2]=ra;sa=k[qa>>2]|0}ui(k[ha+24>>2]|0,sa);sa=ha+28|0;k[sa>>2]=(k[sa>>2]|0)+1;r=d;return}function fy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0;d=r;r=r+128|0;e=d+116|0;f=d+104|0;g=d+92|0;h=d+80|0;i=d;q2a(f,329672,0);x=0;pa(49,(b|0)!=-2147483647|0,f|0,477,213452,214196);j=x;x=0;if(j&1){j=Hc()|0;l=M;K2a(f);m=j;n=l;Sc(m|0)}K2a(f);f=a+12|0;l=k[f>>2]|0;if((l|0)==(b|0)){r=d;return}j=l-b|0;q2a(g,270638,45);x=0;pa(50,(j|0)<17|0,g|0,481,213452,214196);l=x;x=0;if(l&1){l=Hc()|0;o=M;K2a(g);m=l;n=o;Sc(m|0)}K2a(g);q2a(h,214132,21);x=0;pa(49,(j|0)>0|0,h|0,482,213452,214196);g=x;x=0;if(g&1){g=Hc()|0;o=M;K2a(h);m=g;n=o;Sc(m|0)}K2a(h);q2a(e,296239,35);x=0;pa(51,(j+-1|0)>>>0<16|0,e|0,217,214154,296275);h=x;x=0;if(h&1){h=Hc()|0;K2a(e);Sc(h|0)}K2a(e);k[i>>2]=1;k[i+8>>2]=j+143&255;k[i+40>>2]=1;j=c;h=k[j+4>>2]|0;o=i+48|0;k[o>>2]=k[j>>2];k[o+4>>2]=h;k[i+56>>2]=k[c+8>>2];h=i+60|0;o=k[c+12>>2]|0;k[h>>2]=o;if(o)h0a(o);k[i+64>>2]=0;k[i+68>>2]=0;o=i+72|0;k[o>>2]=0;x=0;xa(675,a|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;c=M;j=k[o>>2]|0;if(j)j0a(j);j=k[h>>2]|0;if(!j){m=i;n=c;Sc(m|0)}j0a(j);m=i;n=c;Sc(m|0)}m=k[o>>2]|0;if(m)j0a(m);m=k[h>>2]|0;if(m)j0a(m);m=a+28|0;h=a+32|0;o=k[h>>2]|0;do if(o){c=k[f>>2]|0;n=o;while(1){i=k[n+16>>2]|0;if((c|0)<(i|0)){j=k[n>>2]|0;if(!j){p=n;q=n;s=19;break}else t=j}else{if((i|0)>=(c|0)){u=n;s=25;break}i=n+4|0;j=k[i>>2]|0;if(!j){v=i;w=n;s=23;break}else t=j}n=t}if((s|0)==19){k[e>>2]=q;y=p;z=c;A=q;s=26;break}else if((s|0)==23){k[e>>2]=w;y=v;z=c;A=w;s=26;break}else if((s|0)==25){k[e>>2]=u;if(!u){y=e;z=c;A=u;s=26;break}else{B=o;C=u;break}}}else{k[e>>2]=h;y=h;z=k[f>>2]|0;A=h;s=26}while(0);if((s|0)==26){u=KBa(24)|0;k[u+16>>2]=z;k[u+20>>2]=0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=A;k[y>>2]=u;A=k[k[m>>2]>>2]|0;if(!A)D=u;else{k[m>>2]=A;D=k[y>>2]|0}ui(k[a+32>>2]|0,D);D=a+36|0;k[D>>2]=(k[D>>2]|0)+1;B=k[h>>2]|0;C=u}u=k[C+20>>2]|0;do if(B){C=B;while(1){D=k[C+16>>2]|0;if((D|0)>(b|0)){y=k[C>>2]|0;if(!y){E=C;F=C;s=32;break}else G=y}else{if((D|0)>=(b|0)){H=C;s=38;break}D=C+4|0;y=k[D>>2]|0;if(!y){I=D;J=C;s=36;break}else G=y}C=G}if((s|0)==32){k[e>>2]=F;K=E;L=F;s=39;break}else if((s|0)==36){k[e>>2]=J;K=I;L=J;s=39;break}else if((s|0)==38){k[e>>2]=H;if(!H){K=e;L=H;s=39;break}else{N=H;break}}}else{k[e>>2]=h;K=h;L=h;s=39}while(0);if((s|0)==39){H=KBa(24)|0;k[H+16>>2]=b;k[H+20>>2]=0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=L;k[K>>2]=H;L=k[k[m>>2]>>2]|0;if(!L)O=H;else{k[m>>2]=L;O=k[K>>2]|0}ui(k[a+32>>2]|0,O);O=a+36|0;k[O>>2]=(k[O>>2]|0)+1;N=H}if((u|0)!=(k[N+20>>2]|0)){N=a+40|0;u=k[h>>2]|0;do if(u){H=k[f>>2]|0;O=u;while(1){K=k[O+16>>2]|0;if((H|0)<(K|0)){L=k[O>>2]|0;if(!L){P=O;Q=O;s=47;break}else R=L}else{if((K|0)>=(H|0)){S=O;s=53;break}K=O+4|0;L=k[K>>2]|0;if(!L){T=K;U=O;s=51;break}else R=L}O=R}if((s|0)==47){k[e>>2]=Q;V=P;W=H;X=Q;s=54;break}else if((s|0)==51){k[e>>2]=U;V=T;W=H;X=U;s=54;break}else if((s|0)==53){k[e>>2]=S;if(!S){V=e;W=H;X=S;s=54;break}else{Y=S;break}}}else{k[e>>2]=h;V=h;W=k[f>>2]|0;X=h;s=54}while(0);if((s|0)==54){S=KBa(24)|0;k[S+16>>2]=W;k[S+20>>2]=0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=X;k[V>>2]=S;X=k[k[m>>2]>>2]|0;if(!X)Z=S;else{k[m>>2]=X;Z=k[V>>2]|0}ui(k[a+32>>2]|0,Z);Z=a+36|0;k[Z>>2]=(k[Z>>2]|0)+1;Y=S}S=Y+20|0;Y=a+44|0;Z=k[Y>>2]|0;do if(Z){V=k[S>>2]|0;X=Z;while(1){W=k[X+16>>2]|0;if(V>>>0>>0){U=k[X>>2]|0;if(!U){_=X;$=X;s=61;break}else aa=U}else{if(W>>>0>=V>>>0){ba=X;s=67;break}W=X+4|0;U=k[W>>2]|0;if(!U){ca=W;da=X;s=65;break}else aa=U}X=aa}if((s|0)==61){k[e>>2]=$;ea=_;fa=$;s=68;break}else if((s|0)==65){k[e>>2]=da;ea=ca;fa=da;s=68;break}else if((s|0)==67){k[e>>2]=ba;if(!ba){ea=e;fa=ba;s=68;break}else{ga=ba;break}}}else{k[e>>2]=Y;ea=Y;fa=Y;s=68}while(0);if((s|0)==68){ba=KBa(32)|0;k[ba+16>>2]=k[S>>2];S=ba+24|0;k[S>>2]=0;k[ba+28>>2]=0;k[ba+20>>2]=S;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=fa;k[ea>>2]=ba;fa=k[k[N>>2]>>2]|0;if(!fa)ha=ba;else{k[N>>2]=fa;ha=k[ea>>2]|0}ui(k[a+44>>2]|0,ha);ha=a+48|0;k[ha>>2]=(k[ha>>2]|0)+1;ga=ba}ba=ga+20|0;ha=ga+24|0;ea=k[ha>>2]|0;if(ea){fa=k[f>>2]|0;S=ha;da=ea;a:while(1){ca=da;while(1){if((k[ca+16>>2]|0)>=(fa|0)){ia=ca;break}ca=k[ca+4>>2]|0;if(!ca){ja=S;break a}}da=k[ia>>2]|0;if(!da){ja=ia;break}else S=ia}if((ja|0)!=(ha|0)?(fa|0)>=(k[ja+16>>2]|0):0){fa=k[ja+4>>2]|0;if(!fa){ha=ja;while(1){ia=k[ha+8>>2]|0;if((k[ia>>2]|0)==(ha|0)){ka=ia;break}else ha=ia}}else{ha=fa;while(1){fa=k[ha>>2]|0;if(!fa){ka=ha;break}else ha=fa}}if((k[ba>>2]|0)==(ja|0))k[ba>>2]=ka;ka=ga+28|0;k[ka>>2]=(k[ka>>2]|0)+-1;hk(ea,ja);OBa(ja)}}ja=k[h>>2]|0;do if(ja){ea=k[f>>2]|0;ka=ja;while(1){ga=k[ka+16>>2]|0;if((ea|0)<(ga|0)){ba=k[ka>>2]|0;if(!ba){la=ka;ma=ka;s=90;break}else na=ba}else{if((ga|0)>=(ea|0)){oa=ka;s=96;break}ga=ka+4|0;ba=k[ga>>2]|0;if(!ba){qa=ga;ra=ka;s=94;break}else na=ba}ka=na}if((s|0)==90){k[e>>2]=ma;sa=la;ta=ma;s=97;break}else if((s|0)==94){k[e>>2]=ra;sa=qa;ta=ra;s=97;break}else if((s|0)==96){k[e>>2]=oa;if(!oa){sa=e;ta=oa;s=97;break}else{ua=oa;break}}}else{k[e>>2]=h;sa=h;ta=h;s=97}while(0);if((s|0)==97){oa=KBa(24)|0;k[oa+16>>2]=k[f>>2];k[oa+20>>2]=0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=ta;k[sa>>2]=oa;ta=k[k[m>>2]>>2]|0;if(!ta)va=oa;else{k[m>>2]=ta;va=k[sa>>2]|0}ui(k[a+32>>2]|0,va);va=a+36|0;k[va>>2]=(k[va>>2]|0)+1;ua=oa}oa=ua+20|0;ua=k[Y>>2]|0;do if(ua){va=k[oa>>2]|0;sa=ua;while(1){ta=k[sa+16>>2]|0;if(va>>>0>>0){ra=k[sa>>2]|0;if(!ra){wa=sa;ya=sa;s=104;break}else za=ra}else{if(ta>>>0>=va>>>0){Aa=sa;s=110;break}ta=sa+4|0;ra=k[ta>>2]|0;if(!ra){Ba=ta;Ca=sa;s=108;break}else za=ra}sa=za}if((s|0)==104){k[e>>2]=ya;Da=wa;Ea=ya;s=111;break}else if((s|0)==108){k[e>>2]=Ca;Da=Ba;Ea=Ca;s=111;break}else if((s|0)==110){k[e>>2]=Aa;if(!Aa){Da=e;Ea=Aa;s=111;break}else{Fa=Aa;break}}}else{k[e>>2]=Y;Da=Y;Ea=Y;s=111}while(0);if((s|0)==111){Aa=KBa(32)|0;k[Aa+16>>2]=k[oa>>2];oa=Aa+24|0;k[oa>>2]=0;k[Aa+28>>2]=0;k[Aa+20>>2]=oa;k[Aa>>2]=0;k[Aa+4>>2]=0;k[Aa+8>>2]=Ea;k[Da>>2]=Aa;Ea=k[k[N>>2]>>2]|0;if(!Ea)Ga=Aa;else{k[N>>2]=Ea;Ga=k[Da>>2]|0}ui(k[a+44>>2]|0,Ga);Ga=a+48|0;k[Ga>>2]=(k[Ga>>2]|0)+1;Fa=Aa}Aa=Fa+20|0;Ga=Fa+24|0;Da=k[Ga>>2]|0;do if(Da){Ea=Da;while(1){oa=k[Ea+16>>2]|0;if((oa|0)>(b|0)){Ca=k[Ea>>2]|0;if(!Ca){Ha=Ea;Ia=Ea;s=117;break}else Ja=Ca}else{if((oa|0)>=(b|0)){Ka=Ea;s=122;break}oa=Ea+4|0;Ca=k[oa>>2]|0;if(!Ca){La=oa;Ma=Ea;s=121;break}else Ja=Ca}Ea=Ja}if((s|0)==117){k[e>>2]=Ia;Na=Ha;Oa=Ia;break}else if((s|0)==121){k[e>>2]=Ma;Na=La;Oa=Ma;break}else if((s|0)==122){k[e>>2]=Ka;Na=e;Oa=Ka;break}}else{k[e>>2]=Ga;Na=Ga;Oa=Ga}while(0);if(!(k[Na>>2]|0)){Ga=KBa(20)|0;k[Ga+16>>2]=b;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=Oa;k[Na>>2]=Ga;Oa=k[k[Aa>>2]>>2]|0;if(!Oa)Pa=Ga;else{k[Aa>>2]=Oa;Pa=k[Na>>2]|0}ui(k[Fa+24>>2]|0,Pa);Pa=Fa+28|0;k[Pa>>2]=(k[Pa>>2]|0)+1}Pa=k[h>>2]|0;do if(Pa){Fa=Pa;while(1){Na=k[Fa+16>>2]|0;if((Na|0)>(b|0)){Oa=k[Fa>>2]|0;if(!Oa){Qa=Fa;Ra=Fa;s=131;break}else Sa=Oa}else{if((Na|0)>=(b|0)){Ta=Fa;s=137;break}Na=Fa+4|0;Oa=k[Na>>2]|0;if(!Oa){Ua=Na;Va=Fa;s=135;break}else Sa=Oa}Fa=Sa}if((s|0)==131){k[e>>2]=Ra;Wa=Qa;Xa=Ra;s=138;break}else if((s|0)==135){k[e>>2]=Va;Wa=Ua;Xa=Va;s=138;break}else if((s|0)==137){k[e>>2]=Ta;if(!Ta){Wa=e;Xa=Ta;s=138;break}else{Ya=Ta;break}}}else{k[e>>2]=h;Wa=h;Xa=h;s=138}while(0);if((s|0)==138){Ta=KBa(24)|0;k[Ta+16>>2]=b;k[Ta+20>>2]=0;k[Ta>>2]=0;k[Ta+4>>2]=0;k[Ta+8>>2]=Xa;k[Wa>>2]=Ta;Xa=k[k[m>>2]>>2]|0;if(!Xa)Za=Ta;else{k[m>>2]=Xa;Za=k[Wa>>2]|0}ui(k[a+32>>2]|0,Za);Za=a+36|0;k[Za>>2]=(k[Za>>2]|0)+1;Ya=Ta}Ta=Ya+20|0;Ya=k[Y>>2]|0;do if(Ya){Za=k[Ta>>2]|0;Wa=Ya;while(1){Xa=k[Wa+16>>2]|0;if(Za>>>0>>0){Va=k[Wa>>2]|0;if(!Va){_a=Wa;$a=Wa;s=145;break}else ab=Va}else{if(Xa>>>0>=Za>>>0){bb=Wa;s=151;break}Xa=Wa+4|0;Va=k[Xa>>2]|0;if(!Va){cb=Xa;db=Wa;s=149;break}else ab=Va}Wa=ab}if((s|0)==145){k[e>>2]=$a;eb=_a;fb=$a;s=152;break}else if((s|0)==149){k[e>>2]=db;eb=cb;fb=db;s=152;break}else if((s|0)==151){k[e>>2]=bb;if(!bb){eb=e;fb=bb;s=152;break}else{gb=bb;break}}}else{k[e>>2]=Y;eb=Y;fb=Y;s=152}while(0);if((s|0)==152){bb=KBa(32)|0;k[bb+16>>2]=k[Ta>>2];Ta=bb+24|0;k[Ta>>2]=0;k[bb+28>>2]=0;k[bb+20>>2]=Ta;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=fb;k[eb>>2]=bb;fb=k[k[N>>2]>>2]|0;if(!fb)hb=bb;else{k[N>>2]=fb;hb=k[eb>>2]|0}ui(k[a+44>>2]|0,hb);hb=a+48|0;k[hb>>2]=(k[hb>>2]|0)+1;gb=bb}bb=gb+20|0;hb=gb+24|0;eb=k[hb>>2]|0;do if(eb){fb=hb;Ta=eb;b:while(1){db=Ta;while(1){if((k[db+16>>2]|0)>=(b|0)){ib=db;break}db=k[db+4>>2]|0;if(!db){jb=fb;break b}}Ta=k[ib>>2]|0;if(!Ta){jb=ib;break}else fb=ib}if((jb|0)==(hb|0))break;if((k[jb+16>>2]|0)>(b|0))break;fb=k[jb+4>>2]|0;if(!fb){Ta=jb;while(1){db=k[Ta+8>>2]|0;if((k[db>>2]|0)==(Ta|0)){kb=db;break}else Ta=db}}else{Ta=fb;while(1){db=k[Ta>>2]|0;if(!db){kb=Ta;break}else Ta=db}}if((k[bb>>2]|0)==(jb|0))k[bb>>2]=kb;Ta=gb+28|0;k[Ta>>2]=(k[Ta>>2]|0)+-1;hk(eb,jb);OBa(jb)}while(0);jb=k[h>>2]|0;do if(jb){eb=jb;while(1){gb=k[eb+16>>2]|0;if((gb|0)>(b|0)){kb=k[eb>>2]|0;if(!kb){lb=eb;mb=eb;s=172;break}else nb=kb}else{if((gb|0)>=(b|0)){ob=eb;s=178;break}gb=eb+4|0;kb=k[gb>>2]|0;if(!kb){pb=gb;qb=eb;s=176;break}else nb=kb}eb=nb}if((s|0)==172){k[e>>2]=mb;rb=lb;sb=mb;s=179;break}else if((s|0)==176){k[e>>2]=qb;rb=pb;sb=qb;s=179;break}else if((s|0)==178){k[e>>2]=ob;if(!ob){rb=e;sb=ob;s=179;break}else{tb=ob;break}}}else{k[e>>2]=h;rb=h;sb=h;s=179}while(0);if((s|0)==179){ob=KBa(24)|0;k[ob+16>>2]=b;k[ob+20>>2]=0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=sb;k[rb>>2]=ob;sb=k[k[m>>2]>>2]|0;if(!sb)ub=ob;else{k[m>>2]=sb;ub=k[rb>>2]|0}ui(k[a+32>>2]|0,ub);ub=a+36|0;k[ub>>2]=(k[ub>>2]|0)+1;tb=ob}ob=tb+20|0;tb=k[Y>>2]|0;do if(tb){ub=k[ob>>2]|0;rb=tb;while(1){sb=k[rb+16>>2]|0;if(ub>>>0>>0){qb=k[rb>>2]|0;if(!qb){vb=rb;wb=rb;s=186;break}else xb=qb}else{if(sb>>>0>=ub>>>0){yb=rb;s=192;break}sb=rb+4|0;qb=k[sb>>2]|0;if(!qb){zb=sb;Ab=rb;s=190;break}else xb=qb}rb=xb}if((s|0)==186){k[e>>2]=wb;Bb=vb;Cb=wb;s=193;break}else if((s|0)==190){k[e>>2]=Ab;Bb=zb;Cb=Ab;s=193;break}else if((s|0)==192){k[e>>2]=yb;if(!yb){Bb=e;Cb=yb;s=193;break}else{Db=yb;break}}}else{k[e>>2]=Y;Bb=Y;Cb=Y;s=193}while(0);if((s|0)==193){Y=KBa(32)|0;k[Y+16>>2]=k[ob>>2];ob=Y+24|0;k[ob>>2]=0;k[Y+28>>2]=0;k[Y+20>>2]=ob;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=Cb;k[Bb>>2]=Y;Cb=k[k[N>>2]>>2]|0;if(!Cb)Eb=Y;else{k[N>>2]=Cb;Eb=k[Bb>>2]|0}ui(k[a+44>>2]|0,Eb);Eb=a+48|0;k[Eb>>2]=(k[Eb>>2]|0)+1;Db=Y}Y=Db+20|0;Eb=Db+24|0;Bb=k[Eb>>2]|0;do if(Bb){Cb=k[f>>2]|0;N=Bb;while(1){ob=k[N+16>>2]|0;if((Cb|0)<(ob|0)){yb=k[N>>2]|0;if(!yb){Fb=N;Gb=N;s=200;break}else Hb=yb}else{if((ob|0)>=(Cb|0)){Ib=N;s=205;break}ob=N+4|0;yb=k[ob>>2]|0;if(!yb){Jb=ob;Kb=N;s=204;break}else Hb=yb}N=Hb}if((s|0)==200){k[e>>2]=Gb;Lb=Fb;Mb=Gb;break}else if((s|0)==204){k[e>>2]=Kb;Lb=Jb;Mb=Kb;break}else if((s|0)==205){k[e>>2]=Ib;Lb=e;Mb=Ib;break}}else{k[e>>2]=Eb;Lb=Eb;Mb=Eb}while(0);if(!(k[Lb>>2]|0)){Eb=KBa(20)|0;k[Eb+16>>2]=k[f>>2];k[Eb>>2]=0;k[Eb+4>>2]=0;k[Eb+8>>2]=Mb;k[Lb>>2]=Eb;Mb=k[k[Y>>2]>>2]|0;if(!Mb)Nb=Eb;else{k[Y>>2]=Mb;Nb=k[Lb>>2]|0}ui(k[Db+24>>2]|0,Nb);Nb=Db+28|0;k[Nb>>2]=(k[Nb>>2]|0)+1}Nb=k[h>>2]|0;do if(Nb){Db=k[f>>2]|0;Lb=Nb;while(1){Mb=k[Lb+16>>2]|0;if((Db|0)<(Mb|0)){Y=k[Lb>>2]|0;if(!Y){Ob=Lb;Pb=Lb;s=215;break}else Qb=Y}else{if((Mb|0)>=(Db|0)){Rb=Lb;s=221;break}Mb=Lb+4|0;Y=k[Mb>>2]|0;if(!Y){Sb=Mb;Tb=Lb;s=219;break}else Qb=Y}Lb=Qb}if((s|0)==215){k[e>>2]=Pb;Ub=Ob;Vb=Pb;s=222;break}else if((s|0)==219){k[e>>2]=Tb;Ub=Sb;Vb=Tb;s=222;break}else if((s|0)==221){k[e>>2]=Rb;if(!Rb){Ub=e;Vb=Rb;s=222;break}else{Wb=Nb;Xb=Rb;break}}}else{k[e>>2]=h;Ub=h;Vb=h;s=222}while(0);if((s|0)==222){Rb=KBa(24)|0;k[Rb+16>>2]=k[f>>2];k[Rb+20>>2]=0;k[Rb>>2]=0;k[Rb+4>>2]=0;k[Rb+8>>2]=Vb;k[Ub>>2]=Rb;Vb=k[k[m>>2]>>2]|0;if(!Vb)Yb=Rb;else{k[m>>2]=Vb;Yb=k[Ub>>2]|0}ui(k[a+32>>2]|0,Yb);Yb=a+36|0;k[Yb>>2]=(k[Yb>>2]|0)+1;Wb=k[h>>2]|0;Xb=Rb}Rb=Xb+20|0;do if(Wb){Xb=Wb;while(1){Yb=k[Xb+16>>2]|0;if((Yb|0)>(b|0)){Ub=k[Xb>>2]|0;if(!Ub){Zb=Xb;_b=Xb;s=228;break}else $b=Ub}else{if((Yb|0)>=(b|0)){ac=Xb;s=234;break}Yb=Xb+4|0;Ub=k[Yb>>2]|0;if(!Ub){bc=Yb;cc=Xb;s=232;break}else $b=Ub}Xb=$b}if((s|0)==228){k[e>>2]=_b;dc=Zb;ec=_b;s=235;break}else if((s|0)==232){k[e>>2]=cc;dc=bc;ec=cc;s=235;break}else if((s|0)==234){k[e>>2]=ac;if(!ac){dc=e;ec=ac;s=235;break}else{fc=ac;break}}}else{k[e>>2]=h;dc=h;ec=h;s=235}while(0);if((s|0)==235){s=KBa(24)|0;k[s+16>>2]=b;k[s+20>>2]=0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=ec;k[dc>>2]=s;ec=k[k[m>>2]>>2]|0;if(!ec)gc=s;else{k[m>>2]=ec;gc=k[dc>>2]|0}ui(k[a+32>>2]|0,gc);gc=a+36|0;k[gc>>2]=(k[gc>>2]|0)+1;fc=s}s=fc+20|0;fc=k[Rb>>2]|0;k[Rb>>2]=k[s>>2];k[s>>2]=fc}fc=a+4|0;s=k[fc>>2]|0;if(((s-(k[a>>2]|0)|0)/80|0)>>>0<=1){r=d;return}if(!(cB(s+-80|0)|0)){r=d;return}s=k[fc>>2]|0;if((k[s+-160>>2]|0)!=(k[s+-80>>2]|0)){r=d;return}a=k[s+-120>>2]|0;if((a|0)!=(k[s+-40>>2]|0)){r=d;return}Rb=s+-152|0;gc=Rb+(a<<2)|0;c:do if((Rb|0)!=(gc|0)){a=Rb;dc=s+-72|0;while(1){if((k[a>>2]|0)!=(k[dc>>2]|0))break;a=a+4|0;if((a|0)==(gc|0))break c;else dc=dc+4|0}r=d;return}while(0);gc=s+-80|0;Rb=s;do{k[fc>>2]=Rb+-80;dc=k[Rb+-8>>2]|0;if(dc)j0a(dc);dc=k[Rb+-20>>2]|0;if(dc)j0a(dc);Rb=k[fc>>2]|0}while((Rb|0)!=(gc|0));Rb=s+-160|0;s=gc;do{k[fc>>2]=s+-80;gc=k[s+-8>>2]|0;if(gc)j0a(gc);gc=k[s+-20>>2]|0;if(gc)j0a(gc);s=k[fc>>2]|0}while((s|0)!=(Rb|0));r=d;return}function gy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;b=r;r=r+96|0;c=b+92|0;d=b+80|0;e=b;f=a+28|0;g=a+36|0;if(!(k[g>>2]|0)){h=0;r=b;return h|0}i=a+12|0;j=a+32|0;l=k[j>>2]|0;a:do if(!l)m=0;else{n=k[i>>2]|0;o=l;while(1){p=k[o+16>>2]|0;if((n|0)<(p|0))q=o;else{if((p|0)>=(n|0)){m=1;break a}q=o+4|0}o=k[q>>2]|0;if(!o){m=0;break}}}while(0);q2a(d,329672,0);x=0;pa(49,m|0,d|0,454,213452,214282);m=x;x=0;if(m&1){m=Hc()|0;q=M;K2a(d);s=q;t=m;Sc(t|0)}K2a(d);d=k[j>>2]|0;do if(d){m=k[i>>2]|0;q=d;while(1){l=k[q+16>>2]|0;if((m|0)<(l|0)){o=k[q>>2]|0;if(!o){u=q;v=q;w=14;break}else y=o}else{if((l|0)>=(m|0)){z=q;w=20;break}l=q+4|0;o=k[l>>2]|0;if(!o){A=l;B=q;w=18;break}else y=o}q=y}if((w|0)==14){k[c>>2]=v;C=u;D=m;E=v;w=21;break}else if((w|0)==18){k[c>>2]=B;C=A;D=m;E=B;w=21;break}else if((w|0)==20){k[c>>2]=z;if(!z){C=c;D=m;E=z;w=21;break}else{F=m;G=z;break}}}else{k[c>>2]=j;C=j;D=k[i>>2]|0;E=j;w=21}while(0);if((w|0)==21){z=KBa(24)|0;k[z+16>>2]=D;k[z+20>>2]=0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=E;k[C>>2]=z;E=k[k[f>>2]>>2]|0;if(!E)H=z;else{k[f>>2]=E;H=k[C>>2]|0}ui(k[a+32>>2]|0,H);k[g>>2]=(k[g>>2]|0)+1;F=k[i>>2]|0;G=z}if(!(hy(a,k[G+20>>2]|0,-1,F)|0)){h=0;r=b;return h|0}F=a+40|0;G=k[j>>2]|0;do if(G){z=k[i>>2]|0;H=G;while(1){C=k[H+16>>2]|0;if((z|0)<(C|0)){E=k[H>>2]|0;if(!E){I=H;J=H;w=30;break}else K=E}else{if((C|0)>=(z|0)){L=H;w=36;break}C=H+4|0;E=k[C>>2]|0;if(!E){N=C;O=H;w=34;break}else K=E}H=K}if((w|0)==30){k[c>>2]=J;P=I;Q=z;R=J;w=37;break}else if((w|0)==34){k[c>>2]=O;P=N;Q=z;R=O;w=37;break}else if((w|0)==36){k[c>>2]=L;if(!L){P=c;Q=z;R=L;w=37;break}else{S=L;break}}}else{k[c>>2]=j;P=j;Q=k[i>>2]|0;R=j;w=37}while(0);if((w|0)==37){L=KBa(24)|0;k[L+16>>2]=Q;k[L+20>>2]=0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=R;k[P>>2]=L;R=k[k[f>>2]>>2]|0;if(!R)T=L;else{k[f>>2]=R;T=k[P>>2]|0}ui(k[a+32>>2]|0,T);k[g>>2]=(k[g>>2]|0)+1;S=L}L=S+20|0;S=a+44|0;T=k[S>>2]|0;do if(T){P=k[L>>2]|0;R=T;while(1){Q=k[R+16>>2]|0;if(P>>>0>>0){O=k[R>>2]|0;if(!O){U=R;V=R;w=44;break}else W=O}else{if(Q>>>0>=P>>>0){X=R;w=50;break}Q=R+4|0;O=k[Q>>2]|0;if(!O){Y=Q;Z=R;w=48;break}else W=O}R=W}if((w|0)==44){k[c>>2]=V;_=U;$=V;w=51;break}else if((w|0)==48){k[c>>2]=Z;_=Y;$=Z;w=51;break}else if((w|0)==50){k[c>>2]=X;if(!X){_=c;$=X;w=51;break}else{aa=X;break}}}else{k[c>>2]=S;_=S;$=S;w=51}while(0);if((w|0)==51){w=KBa(32)|0;k[w+16>>2]=k[L>>2];L=w+24|0;k[L>>2]=0;k[w+28>>2]=0;k[w+20>>2]=L;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=$;k[_>>2]=w;$=k[k[F>>2]>>2]|0;if(!$)ba=w;else{k[F>>2]=$;ba=k[_>>2]|0}ui(k[a+44>>2]|0,ba);ba=a+48|0;k[ba>>2]=(k[ba>>2]|0)+1;aa=w}w=aa+20|0;ba=aa+24|0;_=k[ba>>2]|0;if(_){$=k[i>>2]|0;F=ba;L=_;b:while(1){S=L;while(1){if((k[S+16>>2]|0)>=($|0)){ca=S;break}S=k[S+4>>2]|0;if(!S){da=F;break b}}L=k[ca>>2]|0;if(!L){da=ca;break}else F=ca}if((da|0)!=(ba|0)?($|0)>=(k[da+16>>2]|0):0){$=k[da+4>>2]|0;if(!$){ba=da;while(1){ca=k[ba+8>>2]|0;if((k[ca>>2]|0)==(ba|0)){ea=ca;break}else ba=ca}}else{ba=$;while(1){$=k[ba>>2]|0;if(!$){ea=ba;break}else ba=$}}if((k[w>>2]|0)==(da|0))k[w>>2]=ea;ea=aa+28|0;k[ea>>2]=(k[ea>>2]|0)+-1;hk(_,da);OBa(da)}}da=k[j>>2]|0;if(da){_=k[i>>2]|0;i=j;ea=da;c:while(1){aa=ea;while(1){if((k[aa+16>>2]|0)>=(_|0)){fa=aa;break}aa=k[aa+4>>2]|0;if(!aa){ga=i;break c}}ea=k[fa>>2]|0;if(!ea){ga=fa;break}else i=fa}if((ga|0)!=(j|0)?(_|0)>=(k[ga+16>>2]|0):0){_=k[ga+4>>2]|0;if(!_){j=ga;while(1){fa=k[j+8>>2]|0;if((k[fa>>2]|0)==(j|0)){ha=fa;break}else j=fa}}else{j=_;while(1){_=k[j>>2]|0;if(!_){ha=j;break}else j=_}}if((k[f>>2]|0)==(ga|0))k[f>>2]=ha;k[g>>2]=(k[g>>2]|0)+-1;hk(da,ga);OBa(ga)}}k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;ga=e+48|0;k[ga>>2]=-1;k[ga+4>>2]=-1;ga=e+56|0;da=e+60|0;g=e+72|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[ga+16>>2]=0;x=0;xa(675,a|0,e|0);e=x;x=0;if(e&1){e=Hc()|0;a=M;ga=k[g>>2]|0;if(ga)j0a(ga);ga=k[da>>2]|0;if(!ga){s=a;t=e;Sc(t|0)}j0a(ga);s=a;t=e;Sc(t|0)}else{t=k[g>>2]|0;if(t)j0a(t);t=k[da>>2]|0;if(!t){h=1;r=b;return h|0}j0a(t);h=1;r=b;return h|0}return 0}function hy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;e=r;r=r+16|0;f=e;if((d|0)==-2147483647)g=dy(a,b)|0;else g=d;d=k[a+44>>2]|0;a:do if(d){h=d;while(1){i=k[h+16>>2]|0;if(i>>>0>b>>>0){j=k[h>>2]|0;if(!j)break a;else l=j}else{if(i>>>0>=b>>>0){m=h;break}i=k[h+4>>2]|0;if(!i)break a;else l=i}h=l}if(m){h=(k[m+28>>2]|0)>>>0>1;i=k[a+72>>2]|0;b:do if(i){j=i;while(1){n=k[j+16>>2]|0;if(n>>>0>b>>>0)o=j;else{if(n>>>0>=b>>>0)break;o=j+4|0}j=k[o>>2]|0;if(!j)break b}if(!h){p=0;r=e;return p|0}j=a+80|0;n=k[a+84>>2]|0;if(!n){p=1;r=e;return p|0}else q=n;while(1){s=k[q+16>>2]|0;if((g|0)<(s|0))t=q;else{if((s|0)>=(g|0))break;t=q+4|0}q=k[t>>2]|0;if(!q){p=1;u=69;break}}if((u|0)==69){r=e;return p|0}s=n;while(1){v=k[s+16>>2]|0;if((g|0)<(v|0)){w=k[s>>2]|0;if(!w){y=s;z=s;u=29;break}else A=w}else{if((v|0)>=(g|0)){B=s;u=34;break}v=s+4|0;w=k[v>>2]|0;if(!w){C=v;D=s;u=33;break}else A=w}s=A}if((u|0)==29){k[f>>2]=z;E=y;F=z;u=35}else if((u|0)==33){k[f>>2]=D;E=C;F=D;u=35}else if((u|0)==34){k[f>>2]=B;if(!B){E=f;F=B;u=35}else G=B}if((u|0)==35){s=KBa(24)|0;k[s+16>>2]=g;k[s+20>>2]=0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=F;k[E>>2]=s;n=k[k[j>>2]>>2]|0;if(!n)H=s;else{k[j>>2]=n;H=k[E>>2]|0}ui(k[a+84>>2]|0,H);n=a+88|0;k[n>>2]=(k[n>>2]|0)+1;G=s}p=(k[G+20>>2]|0)!=(b|0);r=e;return p|0}while(0);if(h){p=1;r=e;return p|0}i=a+20|0;s=k[i>>2]|0;c:do if(!s){I=i;u=57}else{n=i;w=s;d:while(1){v=w;while(1){J=k[v+16>>2]|0;if(J>>>0>b>>>0){K=v;break}if(J>>>0>=b>>>0){L=n;M=v;break d}v=k[v+4>>2]|0;if(!v){I=n;u=57;break c}}w=k[K>>2]|0;if(!w){I=K;u=57;break c}else n=K}n=k[M>>2]|0;e:do if(!n)N=M;else{w=M;j=n;while(1){v=j;while(1){if((k[v+16>>2]|0)>>>0>=b>>>0){O=v;break}v=k[v+4>>2]|0;if(!v){N=w;break e}}j=k[O>>2]|0;if(!j){N=O;break}else w=O}}while(0);n=N;w=k[M+4>>2]|0;f:do if(!w)P=L;else{j=L;v=w;while(1){J=v;while(1){if((k[J+16>>2]|0)>>>0>b>>>0){Q=J;break}J=k[J+4>>2]|0;if(!J){P=j;break f}}v=k[Q>>2]|0;if(!v){P=Q;break}else j=Q}}while(0);R=n;S=P}while(0);if((u|0)==57){s=I;R=s;S=s}s=R;i=S;if((s|0)==(i|0)){p=1;r=e;return p|0}else{T=s;U=R}g:while(1){s=k[T+20>>2]|0;h:do if((s|0)!=(c|0)){h=d;while(1){w=k[h+16>>2]|0;if(s>>>0>>0)V=h;else{if(w>>>0>=s>>>0)break h;V=h+4|0}h=k[V>>2]|0;if(!h){p=0;u=69;break g}}}while(0);s=U;n=k[s+4>>2]|0;if(!n){h=s;while(1){s=k[h+8>>2]|0;if((k[s>>2]|0)==(h|0)){W=s;break}else h=s}}else{h=n;while(1){s=k[h>>2]|0;if(!s){W=h;break}else h=s}}if((W|0)==(i|0)){p=1;u=69;break}else{T=W;U=W}}if((u|0)==69){r=e;return p|0}}}while(0);p=Rd(8)|0;x=0;xa(671,p|0,296399);e=x;x=0;if(e&1){e=Hc()|0;Fc(p|0);Sc(e|0)}else{k[p>>2]=47544;Gf(p|0,9024,933)}return 0}function iy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=a+4|0;d=k[c>>2]|0;if((d|0)==(k[a+8>>2]|0)){my(a,b);e=XC(b)|0;f=a+12|0;g=k[f>>2]|0;h=g+e|0;k[f>>2]=h;return}k[d>>2]=k[b>>2];i=d+8|0;j=b+8|0;l=i+40|0;do{k[i>>2]=k[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(l|0));j=b+48|0;i=k[j+4>>2]|0;l=d+48|0;k[l>>2]=k[j>>2];k[l+4>>2]=i;k[d+56>>2]=k[b+56>>2];i=k[b+60>>2]|0;k[d+60>>2]=i;if(i)h0a(i);k[d+64>>2]=k[b+64>>2];k[d+68>>2]=k[b+68>>2];i=k[b+72>>2]|0;k[d+72>>2]=i;if(i)h0a(i);k[c>>2]=(k[c>>2]|0)+80;e=XC(b)|0;f=a+12|0;g=k[f>>2]|0;h=g+e|0;k[f>>2]=h;return}function jy(){k[6553]=0;k[6554]=0;k[6555]=0;return}function ky(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+16|0;d=c+8|0;e=c+4|0;f=c;k[a>>2]=k[b>>2];g=a+4|0;h=a+8|0;k[h>>2]=0;i=a+12|0;k[i>>2]=0;j=a+8|0;k[g>>2]=j;l=k[b+4>>2]|0;m=b+8|0;a:do if((l|0)!=(m|0)){n=j;o=l;p=l;while(1){x=0;q=Ba(563,24)|0;s=x;x=0;if(s&1)break;s=q+16|0;t=o+16|0;u=k[t+4>>2]|0;v=s;k[v>>2]=k[t>>2];k[v+4>>2]=u;k[f>>2]=n;k[d>>2]=k[f>>2];u=YA(g,d,e,s)|0;s=k[u>>2]|0;if(s){if((s|0)!=(q|0))OBa(q)}else{s=k[e>>2]|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=s;k[u>>2]=q;s=k[k[g>>2]>>2]|0;if(!s)w=q;else{k[g>>2]=s;w=k[u>>2]|0}ui(k[h>>2]|0,w);k[i>>2]=(k[i>>2]|0)+1}u=k[p+4>>2]|0;if(!u){s=p;while(1){q=k[s+8>>2]|0;if((k[q>>2]|0)==(s|0)){y=q;break}else s=q}}else{s=u;while(1){q=k[s>>2]|0;if(!q){y=s;break}else s=q}}if((y|0)==(m|0))break a;else{o=y;p=y}}p=Hc()|0;ny(g,k[j>>2]|0);Sc(p|0)}while(0);k[a+16>>2]=k[b+16>>2];y=a+20|0;m=a+24|0;k[m>>2]=0;i=a+28|0;k[i>>2]=0;w=a+24|0;k[y>>2]=w;h=k[b+20>>2]|0;l=b+24|0;b:do if((h|0)!=(l|0)){p=w;o=h;n=h;while(1){x=0;s=Ba(563,24)|0;u=x;x=0;if(u&1)break;u=s+16|0;q=n+16|0;v=k[q+4>>2]|0;t=u;k[t>>2]=k[q>>2];k[t+4>>2]=v;k[f>>2]=p;k[d>>2]=k[f>>2];v=ZA(y,d,e,u)|0;u=k[v>>2]|0;if(u){if((u|0)!=(s|0))OBa(s)}else{u=k[e>>2]|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=u;k[v>>2]=s;u=k[k[y>>2]>>2]|0;if(!u)z=s;else{k[y>>2]=u;z=k[v>>2]|0}ui(k[m>>2]|0,z);k[i>>2]=(k[i>>2]|0)+1}v=k[o+4>>2]|0;if(!v){u=o;while(1){s=k[u+8>>2]|0;if((k[s>>2]|0)==(u|0)){A=s;break}else u=s}}else{u=v;while(1){s=k[u>>2]|0;if(!s){A=u;break}else u=s}}if((A|0)==(l|0))break b;else{o=A;n=A}}n=Hc()|0;o=M;Ay(y,k[w>>2]|0);B=o;C=n;D=k[j>>2]|0;ny(g,D);Sc(C|0)}while(0);A=a+32|0;l=a+36|0;k[l>>2]=0;i=a+40|0;k[i>>2]=0;z=a+36|0;k[A>>2]=z;m=k[b+32>>2]|0;h=b+36|0;c:do if((m|0)==(h|0))E=41;else{n=z;o=m;p=m;while(1){x=0;u=Ba(563,24)|0;v=x;x=0;if(v&1)break;v=u+16|0;s=o+16|0;t=k[s+4>>2]|0;q=v;k[q>>2]=k[s>>2];k[q+4>>2]=t;k[f>>2]=n;k[d>>2]=k[f>>2];t=ZA(A,d,e,v)|0;v=k[t>>2]|0;if(v){if((v|0)!=(u|0))OBa(u)}else{v=k[e>>2]|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=v;k[t>>2]=u;v=k[k[A>>2]>>2]|0;if(!v)F=u;else{k[A>>2]=v;F=k[t>>2]|0}ui(k[l>>2]|0,F);k[i>>2]=(k[i>>2]|0)+1}t=k[p+4>>2]|0;if(!t){v=p;while(1){u=k[v+8>>2]|0;if((k[u>>2]|0)==(v|0)){G=u;break}else v=u}}else{v=t;while(1){u=k[v>>2]|0;if(!u){G=v;break}else v=u}}if((G|0)==(h|0)){E=41;break c}else{o=G;p=G}}p=Hc()|0;o=M;Ay(A,k[z>>2]|0);H=o;I=p}while(0);if((E|0)==41){G=a+44|0;k[a+48>>2]=0;k[a+52>>2]=0;h=a+48|0;k[G>>2]=h;i=k[b+44>>2]|0;F=b+48|0;d:do if((i|0)==(F|0))E=48;else{l=h;f=i;m=i;while(1){k[e>>2]=l;x=0;k[d>>2]=k[e>>2];Fa(117,G|0,d|0,f+16|0)|0;p=x;x=0;if(p&1)break;p=k[m+4>>2]|0;if(!p){o=m;while(1){n=k[o+8>>2]|0;if((k[n>>2]|0)==(o|0)){J=n;break}else o=n}}else{o=p;while(1){n=k[o>>2]|0;if(!n){J=o;break}else o=n}}if((J|0)==(F|0)){E=48;break d}else{f=J;m=J}}m=Hc()|0;f=M;CA(G,k[h>>2]|0);K=f;L=m}while(0);if((E|0)==48){k[a+56>>2]=k[b+56>>2];E=a+60|0;J=k[b+60>>2]|0;k[E>>2]=J;if(J)h0a(J);J=a+72|0;F=J+8|0;k[a+68>>2]=F;x=0;xa(676,J|0,b+72|0);b=x;x=0;if(!(b&1)){k[a+88>>2]=F;k[a+92>>2]=F;r=c;return}c=Hc()|0;F=M;a=k[E>>2]|0;if(a)j0a(a);CA(G,k[h>>2]|0);K=F;L=c}Ay(A,k[z>>2]|0);H=K;I=L}Ay(y,k[w>>2]|0);B=H;C=I;D=k[j>>2]|0;ny(g,D);Sc(C|0)}function ly(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;ny(a+80|0,k[a+84>>2]|0);xy(a+68|0,k[a+72>>2]|0);yy(a+56|0,k[a+60>>2]|0);zy(a+40|0,k[a+44>>2]|0);ny(a+28|0,k[a+32>>2]|0);Ay(a+16|0,k[a+20>>2]|0);b=k[a>>2]|0;if(!b)return;c=a+4|0;d=k[c>>2]|0;if((d|0)==(b|0))e=b;else{f=d;do{k[c>>2]=f+-80;d=k[f+-8>>2]|0;if(d)j0a(d);d=k[f+-20>>2]|0;if(d)j0a(d);f=k[c>>2]|0}while((f|0)!=(b|0));e=k[a>>2]|0}OBa(e);return}function my(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/80|0)+1|0;if(e>>>0>53687091){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/80|0;if(g>>>0<26843545){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/80|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=53687091;n=((k[c>>2]|0)-f|0)/80|0;o=6}if((o|0)==6){i=m;j=KBa(m*80|0)|0;l=n}n=j+(l*80|0)|0;m=n;o=j+(i*80|0)|0;k[n>>2]=k[b>>2];i=j+(l*80|0)+8|0;f=b+8|0;h=i+40|0;do{k[i>>2]=k[f>>2];i=i+4|0;f=f+4|0}while((i|0)<(h|0));g=b+48|0;e=k[g+4>>2]|0;p=j+(l*80|0)+48|0;k[p>>2]=k[g>>2];k[p+4>>2]=e;k[j+(l*80|0)+56>>2]=k[b+56>>2];e=k[b+60>>2]|0;k[j+(l*80|0)+60>>2]=e;if(e)h0a(e);k[j+(l*80|0)+64>>2]=k[b+64>>2];k[j+(l*80|0)+68>>2]=k[b+68>>2];e=k[b+72>>2]|0;k[j+(l*80|0)+72>>2]=e;if(e)h0a(e);e=n+80|0;l=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(l|0)){q=m;r=l;s=l}else{b=j;j=n;n=m;while(1){m=b;b=b+-80|0;k[j+-80>>2]=k[b>>2];i=j+-72|0;f=m+-72|0;h=i+40|0;do{k[i>>2]=k[f>>2];i=i+4|0;f=f+4|0}while((i|0)<(h|0));k[j+-32>>2]=k[m+-32>>2];k[j+-28>>2]=k[m+-28>>2];p=m+-24|0;k[j+-24>>2]=k[p>>2];g=m+-20|0;k[j+-20>>2]=k[g>>2];k[p>>2]=0;k[g>>2]=0;k[j+-16>>2]=k[m+-16>>2];g=m+-12|0;k[j+-12>>2]=k[g>>2];p=m+-8|0;k[j+-8>>2]=k[p>>2];k[g>>2]=0;k[p>>2]=0;j=n+-80|0;p=j;if((b|0)==(l|0)){t=p;break}else n=p}q=t;r=k[a>>2]|0;s=k[c>>2]|0}k[a>>2]=q;k[c>>2]=e;k[d>>2]=o;o=r;if((s|0)!=(o|0)){d=s;do{s=k[d+-8>>2]|0;if(s)j0a(s);s=k[d+-20>>2]|0;d=d+-80|0;if(s)j0a(s)}while((d|0)!=(o|0))}if(!r)return;OBa(r);return}function ny(a,b){a=a|0;b=b|0;if(!b)return;else{ny(a,k[b>>2]|0);ny(a,k[b+4>>2]|0);OBa(b);return}}function oy(a){a=a|0;var b=0,c=0,d=0;b=a+16|0;c=k[b>>2]|0;if(c){x=0;va(k[(k[c>>2]|0)+24>>2]|0,c|0);c=x;x=0;if(!(c&1)){c=k[b>>2]|0;if((c|0)==(a|0)){Sf[k[(k[c>>2]|0)+16>>2]&2047](c);return}if(!c)return;Sf[k[(k[c>>2]|0)+20>>2]&2047](c);return}}else{c=Rd(4)|0;k[c>>2]=26200;x=0;fb(149,c|0,2216,320);x=0}c=Hc(0)|0;d=k[b>>2]|0;if((d|0)==(a|0)){Sf[k[(k[a>>2]|0)+16>>2]&2047](a);Fg(c)}if(!d)Fg(c);Sf[k[(k[d>>2]|0)+20>>2]&2047](d);Fg(c)}function py(a){a=a|0;var b=0,c=0,d=0;b=a+72|0;c=b+4|0;d=k[(k[c>>2]|0)+28>>2]&-2;BA(b+8|0,(d|0)==0?0:d+-28|0);OBa(k[c>>2]|0);c=k[a+60>>2]|0;if(c)j0a(c);CA(a+44|0,k[a+48>>2]|0);Ay(a+32|0,k[a+36>>2]|0);Ay(a+20|0,k[a+24>>2]|0);ny(a+4|0,k[a+8>>2]|0);return}function qy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>4)+1|0;if(e>>>0>268435455){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>4>>>0<134217727){h=g>>3;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>4;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=268435455;o=e;p=e-f>>4;q=6}if((q|0)==6){i=n;j=KBa(n<<4)|0;l=p;m=o}o=j+(l<<4)|0;k[o>>2]=k[b>>2];k[o+4>>2]=k[b+4>>2];k[o+8>>2]=k[b+8>>2];k[o+12>>2]=k[b+12>>2];b=m-f|0;m=o+(0-(b>>4)<<4)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+16;k[d>>2]=j+(i<<4);if(!f)return;OBa(f);return}function ry(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;d=a+8|0;a:do if((k[d>>2]|0)!=0?(e=k[a>>2]|0,f=a+4|0,k[a>>2]=f,k[(k[f>>2]|0)+8>>2]=0,k[f>>2]=0,k[d>>2]=0,g=k[e+4>>2]|0,h=(g|0)==0?e:g,(h|0)!=0):0){g=a+4|0;e=k[b>>2]|0;i=e;j=e;e=h;while(1){if((i|0)==(k[c>>2]|0)){l=e;break}h=k[i+16>>2]|0;k[e+16>>2]=h;k[e+20>>2]=k[i+20>>2];m=e+8|0;n=k[m>>2]|0;do if(n){o=k[n>>2]|0;if((o|0)==(e|0)){k[n>>2]=0;p=k[n+4>>2]|0;if(!p){q=n;break}else r=p;while(1){p=k[r>>2]|0;if(p){r=p;continue}p=k[r+4>>2]|0;if(!p){s=r;break}else r=p}q=s;break}else{k[n+4>>2]=0;if(!o){q=n;break}else t=o;while(1){p=k[t>>2]|0;if(p){t=p;continue}p=k[t+4>>2]|0;if(!p){u=t;break}else t=p}q=u;break}}else q=0;while(0);n=k[f>>2]|0;do if(n){o=n;while(1){if((h|0)<(k[o+16>>2]|0)){p=k[o>>2]|0;if(!p){v=o;w=o;x=19;break}else y=p}else{p=o+4|0;z=k[p>>2]|0;if(!z){A=p;B=o;x=22;break}else y=z}o=y}if((x|0)==19){x=0;C=v;D=w;break}else if((x|0)==22){x=0;C=A;D=B;break}}else{C=f;D=f}while(0);k[e>>2]=0;k[e+4>>2]=0;k[m>>2]=D;k[C>>2]=e;h=k[k[a>>2]>>2]|0;if(!h)E=e;else{k[a>>2]=h;E=k[C>>2]|0}ui(k[g>>2]|0,E);k[d>>2]=(k[d>>2]|0)+1;h=k[j+4>>2]|0;if(!h){n=j;while(1){o=k[n+8>>2]|0;if((k[o>>2]|0)==(n|0)){F=o;break}else n=o}}else{n=h;while(1){m=k[n>>2]|0;if(!m){F=n;break}else n=m}}k[b>>2]=F;if(!q)break a;else{i=F;j=F;e=q}}e=k[l+8>>2]|0;if(!e)G=l;else{j=e;while(1){e=k[j+8>>2]|0;if(!e){H=j;break}else j=e}G=H}ny(a,G)}while(0);G=k[b>>2]|0;H=k[c>>2]|0;if((G|0)==(H|0))return;c=a+4|0;l=a+4|0;q=G;F=G;while(1){G=F+16|0;E=k[c>>2]|0;do if(E){C=k[G>>2]|0;D=E;while(1){if((C|0)<(k[D+16>>2]|0)){B=k[D>>2]|0;if(!B){I=D;J=D;x=38;break}else K=B}else{B=D+4|0;A=k[B>>2]|0;if(!A){L=B;M=D;x=41;break}else K=A}D=K}if((x|0)==38){x=0;N=I;O=J;break}else if((x|0)==41){x=0;N=L;O=M;break}}else{N=c;O=c}while(0);E=KBa(24)|0;D=G;C=k[D+4>>2]|0;A=E+16|0;k[A>>2]=k[D>>2];k[A+4>>2]=C;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=O;k[N>>2]=E;C=k[k[a>>2]>>2]|0;if(!C)P=E;else{k[a>>2]=C;P=k[N>>2]|0}ui(k[l>>2]|0,P);k[d>>2]=(k[d>>2]|0)+1;C=k[q+4>>2]|0;if(!C){E=q;while(1){A=k[E+8>>2]|0;if((k[A>>2]|0)==(E|0)){Q=A;break}else E=A}}else{E=C;while(1){G=k[E>>2]|0;if(!G){Q=E;break}else E=G}}k[b>>2]=Q;if((Q|0)==(H|0))break;else{q=Q;F=Q}}return}function sy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=24528;j=e+-4|0;k[j>>2]=24556;a=e+16|0;k[a>>2]=24580;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=24472;k[f>>2]=24436;k[h>>2]=24496;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1485,f|0);x=0;d=Hc()|0;k[e>>2]=24528;k[j>>2]=24556;k[a>>2]=24580;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function ty(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=r;r=r+80|0;g=f+56|0;h=f+16|0;i=f;if(a){r=f;return}f=h;a=f+36|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(a|0));f=h+20|0;a=h+24|0;k[a>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;j=h+4|0;l=j+-4|0;m=j+16|0;n=h+8|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);k[h+4>>2]=25844;k[h>>2]=25808;k[f>>2]=25868;k[i>>2]=21048;g=i+4|0;x=0;xa(604,g|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;o=M;p=b}else{x=0;b=Ta(525,h|0,i|0)|0;h=x;x=0;if(!(h&1)){k[b+(k[(k[b>>2]|0)+-28>>2]|0)+8>>2]=e;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+12>>2]=d;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+16>>2]=c;x=0;va(1486,b|0);x=0}b=Hc()|0;c=M;k[i>>2]=21048;K2a(g);o=c;p=b}k[j>>2]=25900;k[l>>2]=25928;k[m>>2]=25952;K2a(n);k[f>>2]=20796;f=k[a>>2]|0;if(!f)Sc(p|0);x=0;n=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!n)Sc(p|0);k[a>>2]=0;Sc(p|0)}function uy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=k[d>>2]|0;f=k[b>>2]|0;g=e-f|0;h=(g|0)/80|0;if((e|0)==(f|0))return;if(!(h>>>0>53687091?(x=0,va(1473,a|0),f=x,x=0,f&1):0))i=4;if((i|0)==4?(x=0,i=Ba(563,g|0)|0,g=x,x=0,!(g&1)):0){k[c>>2]=i;k[a>>2]=i;k[a+8>>2]=i+(h*80|0);h=k[b>>2]|0;b=k[d>>2]|0;if((h|0)==(b|0))return;d=h;h=i;do{k[h>>2]=k[d>>2];i=h+8|0;g=d+8|0;f=i+40|0;do{k[i>>2]=k[g>>2];i=i+4|0;g=g+4|0}while((i|0)<(f|0));g=d+48|0;i=k[g+4>>2]|0;f=h+48|0;k[f>>2]=k[g>>2];k[f+4>>2]=i;k[h+56>>2]=k[d+56>>2];i=k[d+60>>2]|0;k[h+60>>2]=i;if(i)h0a(i);k[h+64>>2]=k[d+64>>2];k[h+68>>2]=k[d+68>>2];i=k[d+72>>2]|0;k[h+72>>2]=i;if(i)h0a(i);h=(k[c>>2]|0)+80|0;k[c>>2]=h;d=d+80|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);h=k[c>>2]|0;if((h|0)==(d|0))j=d;else{i=h;do{k[c>>2]=i+-80;h=k[i+-8>>2]|0;if(h)j0a(h);h=k[i+-20>>2]|0;if(h)j0a(h);i=k[c>>2]|0}while((i|0)!=(d|0));j=k[a>>2]|0}OBa(j);Sc(b|0)}function vy(a,b){a=a|0;b=b|0;if(!b)return;else{vy(a,k[b>>2]|0);vy(a,k[b+4>>2]|0);OBa(b);return}}function wy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=k[b>>2]|0;h=k[b+4>>2]|0;i=f;a:while(1){j=k[i+16>>2]|0;do if((g|0)>=(j|0)){if((j|0)>=(g|0)){l=k[i+20>>2]|0;if(h>>>0>>0){m=6;break}if(l>>>0>=h>>>0){n=i;m=12;break a}}l=i+4|0;o=k[l>>2]|0;if(!o){p=l;q=i;m=11;break a}else s=o}else m=6;while(0);if((m|0)==6){m=0;j=k[i>>2]|0;if(!j){t=i;u=i;m=7;break}else s=j}i=s}if((m|0)==7){k[d>>2]=u;v=t;w=u;break}else if((m|0)==11){k[d>>2]=q;v=p;w=q;break}else if((m|0)==12){k[d>>2]=n;x=d;y=n;z=n;m=14;break}}else{k[d>>2]=e;x=e;y=f;z=e;m=14}while(0);if((m|0)==14)if(!y){v=x;w=z}else{A=y;B=A+24|0;r=c;return B|0}y=KBa(36)|0;z=b;b=k[z+4>>2]|0;x=y+16|0;k[x>>2]=k[z>>2];k[x+4>>2]=b;k[y+24>>2]=0;k[y+28>>2]=0;k[y+32>>2]=0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=w;k[v>>2]=y;w=k[k[a>>2]>>2]|0;if(!w)C=y;else{k[a>>2]=w;C=k[v>>2]|0}ui(k[a+4>>2]|0,C);C=a+8|0;k[C>>2]=(k[C>>2]|0)+1;A=y;B=A+24|0;r=c;return B|0}function xy(a,b){a=a|0;b=b|0;if(!b)return;else{xy(a,k[b>>2]|0);xy(a,k[b+4>>2]|0);OBa(b);return}}function yy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!b)return;yy(a,k[b>>2]|0);yy(a,k[b+4>>2]|0);a=k[b+24>>2]|0;c=a;if(a){d=b+28|0;e=k[d>>2]|0;if((e|0)!=(a|0))k[d>>2]=e+(~((e+-16-c|0)>>>4)<<4);OBa(a)}OBa(b);return}function zy(a,b){a=a|0;b=b|0;if(!b)return;else{zy(a,k[b>>2]|0);zy(a,k[b+4>>2]|0);Gy(b+20|0,k[b+24>>2]|0);OBa(b);return}}function Ay(a,b){a=a|0;b=b|0;if(!b)return;else{Ay(a,k[b>>2]|0);Ay(a,k[b+4>>2]|0);OBa(b);return}}function By(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>2;if(!f)return;if(!(f>>>0>1073741823?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<2);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=(b+-4-f|0)>>>2;e=f;f=h;while(1){k[f>>2]=k[e>>2];e=e+4|0;if((e|0)==(b|0))break;else f=f+4|0}k[c>>2]=h+(d+1<<2);return}d=Hc()|0;h=k[a>>2]|0;if(!h)Sc(d|0);a=k[c>>2]|0;if((a|0)!=(h|0))k[c>>2]=a+(~((a+-4-h|0)>>>2)<<2);OBa(h);Sc(d|0)}function Cy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function Dy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=24716;j=e+-4|0;k[j>>2]=24744;a=e+16|0;k[a>>2]=24768;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=24660;k[f>>2]=24624;k[h>>2]=24684;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1487,f|0);x=0;d=Hc()|0;k[e>>2]=24716;k[j>>2]=24744;k[a>>2]=24768;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function Ey(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0;c=r;r=r+48|0;d=c+40|0;e=c+32|0;f=c;g=c+24|0;h=c+16|0;do if((i[2040]|0)==0?(Bb(2040)|0)!=0:0){k[f>>2]=1;k[f+8>>2]=1;i[f+12>>0]=0;l=f+13|0;i[l>>0]=1;k[g>>2]=256;k[e>>2]=f;k[e+4>>2]=g;k[512]=0;k[514]=1;i[2060]=0;i[2061]=1;x=0;fb(184,2048,e|0,d|0);m=x;x=0;if(!(m&1)){if(!(i[l>>0]|0))OBa(k[f+4>>2]|0);Kc(2040);break}m=Hc()|0;if(!(i[2061]|0))OBa(k[513]|0);if(i[l>>0]|0){Cd(2040);Sc(m|0)}OBa(k[f+4>>2]|0);Cd(2040);Sc(m|0)}while(0);f=k[b+32>>2]|0;if(f>>>0>7?(k[b+28>>2]|0)<0:0){k[h>>2]=2048;k[h+4>>2]=b;k[a>>2]=0;j[a+32>>1]=1;i[a+34>>0]=0;sz(a,h,d);r=c;return}k[a>>2]=0;d=a+32|0;h=a+34|0;e=f>>>0>8?8:f;j[d>>1]=e;g=e&65535;Dyb(a|0,b|0,(g>>>0>>0?g:f)<<2|0)|0;i[h>>0]=0;f=j[d>>1]|0;g=(f&65535)+-1|0;a:do if(!g)n=f;else{b=g;e=f;while(1){if(k[a+(b<<2)>>2]|0){n=e;break a}m=e+-1<<16>>16;j[d>>1]=m;b=(m&65535)+-1|0;if(!b){n=m;break}else e=m}}while(0);if(n<<16>>16!=1){r=c;return}if(k[a>>2]|0){r=c;return}i[h>>0]=0;r=c;return}function Fy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,(g|0)>=(h|0)):0){if((h|0)>=(g|0)){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?(g|0)>=(k[o+16>>2]|0):0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if((g|0)<(m|0)){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if((m|0)>=(g|0)){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>=(o|0)){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if((o|0)<(d|0)){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if((d|0)>=(o|0)){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function Gy(a,b){a=a|0;b=b|0;if(!b)return;else{Gy(a,k[b>>2]|0);Gy(a,k[b+4>>2]|0);OBa(b);return}}function Hy(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=r;r=r+80|0;g=f+56|0;h=f+16|0;i=f;if(a){r=f;return}f=h;a=f+36|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(a|0));f=h+20|0;a=h+24|0;k[a>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;j=h+4|0;l=j+-4|0;m=j+16|0;n=h+8|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);k[h+4>>2]=24472;k[h>>2]=24436;k[f>>2]=24496;k[i>>2]=21048;g=i+4|0;x=0;xa(604,g|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;o=M;p=b}else{x=0;b=Ta(526,h|0,i|0)|0;h=x;x=0;if(!(h&1)){k[b+(k[(k[b>>2]|0)+-28>>2]|0)+8>>2]=e;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+12>>2]=d;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+16>>2]=c;x=0;va(1485,b|0);x=0}b=Hc()|0;c=M;k[i>>2]=21048;K2a(g);o=c;p=b}k[j>>2]=24528;k[l>>2]=24556;k[m>>2]=24580;K2a(n);k[f>>2]=20796;f=k[a>>2]|0;if(!f)Sc(p|0);x=0;n=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!n)Sc(p|0);k[a>>2]=0;Sc(p|0)}function Iy(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=r;r=r+80|0;g=f+56|0;h=f+16|0;i=f;if(a){r=f;return}f=h;a=f+36|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(a|0));f=h+20|0;a=h+24|0;k[a>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;j=h+4|0;l=j+-4|0;m=j+16|0;n=h+8|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);k[h+4>>2]=24840;k[h>>2]=24804;k[f>>2]=24864;k[i>>2]=21048;g=i+4|0;x=0;xa(604,g|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;o=M;p=b}else{x=0;b=Ta(527,h|0,i|0)|0;h=x;x=0;if(!(h&1)){k[b+(k[(k[b>>2]|0)+-28>>2]|0)+8>>2]=e;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+12>>2]=d;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+16>>2]=c;x=0;va(1488,b|0);x=0}b=Hc()|0;c=M;k[i>>2]=21048;K2a(g);o=c;p=b}k[j>>2]=24896;k[l>>2]=24924;k[m>>2]=24948;K2a(n);k[f>>2]=20796;f=k[a>>2]|0;if(!f)Sc(p|0);x=0;n=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!n)Sc(p|0);k[a>>2]=0;Sc(p|0)}function Jy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function Ky(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=24896;h=g+-4|0;k[h>>2]=24924;n=g+16|0;k[n>>2]=24948;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=24840;k[c>>2]=24804;k[f>>2]=24864;x=0;xa(677,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,1880,272);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=24896;k[h>>2]=24924;k[n>>2]=24948;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function Ly(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=24980;h=g+-4|0;k[h>>2]=25008;i=g+16|0;k[i>>2]=25032;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=25116;k[a>>2]=25072;k[a+20>>2]=25140;k[a+40>>2]=25168;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=24980;k[h>>2]=25008;k[i>>2]=25032;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function My(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=24980;k[b+-4>>2]=25008;k[b+16>>2]=25032;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Ny(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=24980;k[b+-4>>2]=25008;k[b+16>>2]=25032;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Oy(a){a=a|0;return 214444}function Py(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(185,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function Qy(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(678,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,1880,272)}function Ry(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=24980;k[a+-4>>2]=25008;k[a+16>>2]=25032;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Sy(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=24980;k[a+-4>>2]=25008;k[a+16>>2]=25032;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Ty(a){a=a|0;return 214444}function Uy(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(185,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function Vy(a){a=a|0;Qy(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Wy(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=24980;k[a+-4>>2]=25008;k[a+16>>2]=25032;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Xy(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=24980;k[a+-4>>2]=25008;k[a+16>>2]=25032;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Yy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=24980;h=g+-4|0;k[h>>2]=25008;i=g+16|0;k[i>>2]=25032;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=25116;k[a>>2]=25072;k[a+20>>2]=25140;k[a+40>>2]=25168;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=24980;k[h>>2]=25008;k[i>>2]=25032;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Zy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=24980;k[h+-4>>2]=25008;k[h+16>>2]=25032;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=25116;k[a>>2]=25072;k[d>>2]=25140;k[a+40>>2]=25168;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function _y(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=24896;k[b+-4>>2]=24924;k[b+16>>2]=24948;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function $y(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=24896;k[b+-4>>2]=24924;k[b+16>>2]=24948;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function az(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=24896;k[a+-4>>2]=24924;k[a+16>>2]=24948;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function bz(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=24896;k[a+-4>>2]=24924;k[a+16>>2]=24948;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function cz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function dz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=24528;h=g+-4|0;k[h>>2]=24556;n=g+16|0;k[n>>2]=24580;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=24472;k[c>>2]=24436;k[f>>2]=24496;x=0;xa(679,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,1936,280);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=24528;k[h>>2]=24556;k[n>>2]=24580;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function ez(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=25208;h=g+-4|0;k[h>>2]=25236;i=g+16|0;k[i>>2]=25260;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=25352;k[a>>2]=25308;k[a+20>>2]=25376;k[a+40>>2]=25404;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=25208;k[h>>2]=25236;k[i>>2]=25260;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function fz(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=25208;k[b+-4>>2]=25236;k[b+16>>2]=25260;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function gz(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=25208;k[b+-4>>2]=25236;k[b+16>>2]=25260;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function hz(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(186,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-40>>2]|0)|0}return 0}function iz(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(680,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,1936,280)}function jz(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=25208;k[a+-4>>2]=25236;k[a+16>>2]=25260;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function kz(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=25208;k[a+-4>>2]=25236;k[a+16>>2]=25260;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function lz(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(186,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-40>>2]|0)|0}return 0}function mz(a){a=a|0;iz(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function nz(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=25208;k[a+-4>>2]=25236;k[a+16>>2]=25260;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function oz(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=25208;k[a+-4>>2]=25236;k[a+16>>2]=25260;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function pz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=25208;h=g+-4|0;k[h>>2]=25236;i=g+16|0;k[i>>2]=25260;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=25352;k[a>>2]=25308;k[a+20>>2]=25376;k[a+40>>2]=25404;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=25208;k[h>>2]=25236;k[i>>2]=25260;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function qz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=25208;k[h+-4>>2]=25236;k[h+16>>2]=25260;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=25352;k[a>>2]=25308;k[d>>2]=25376;k[a+40>>2]=25404;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function rz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+16|0;d=c;e=k[b>>2]|0;f=k[k[b+4>>2]>>2]|0;if((f|0)<0){D0a(d,265832);k[d>>2]=47544;x=0;nb(96,d|0,255694,265975,711);x=0;b=Hc()|0;nCa(d);Sc(b|0)}if((e|0)==(a|0)){wz(a,f,0);r=c;return}b=a+8|0;k[b>>2]=0;d=e+8|0;g=k[d>>2]|0;h=g>>>0>134217728?134217728:g;g=a+13|0;j=i[g>>0]|0;l=j<<24>>24==0;m=l?k[a>>2]|0:2;if(h>>>0>m>>>0){n=m<<2;m=n>>>0>>0?h:n;n=m>>>0>134217728?134217728:m;m=KBa(n<<2)|0;if(l){l=a+4|0;OBa(k[l>>2]|0);o=l}else{i[g>>0]=0;o=a+4|0}k[b>>2]=h;k[a>>2]=n;k[o>>2]=m;p=i[g>>0]|0}else{k[b>>2]=h;p=j}Dyb((p<<24>>24==0?k[a+4>>2]|0:a)|0,((i[e+13>>0]|0)==0?k[e+4>>2]|0:e)|0,k[d>>2]<<2|0)|0;i[a+12>>0]=i[e+12>>0]|0;wz(a,f,0);r=c;return}function sz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;h=k[b>>2]|0;l=k[b+4>>2]|0;x=0;if(!(i[h+12>>0]|0)){uz(d,h,l);b=x;x=0;if(b&1)m=9}else{tz(d,h,l);l=x;x=0;if(l&1)m=9}if((m|0)==9){m=Hc()|0;if(i[g>>0]|0)Sc(m|0);OBa(k[d+4>>2]|0);Sc(m|0)}m=j[f>>1]|0;g=m&255;l=g^1;i[f>>0]=l;h=k[e>>2]|0;e=(m&65535)>>>8&255;if(g<<24>>24!=1&(h|0)==1){if(!(e<<24>>24))n=k[d+4>>2]|0;else n=d;if(!(k[n>>2]|0)){i[f>>0]=0;o=0}else o=l}else o=l;l=h>>>0>8?8:h;f=a+32|0;j[f>>1]=l;n=e<<24>>24==0;e=k[d+4>>2]|0;g=l&65535;Dyb(a|0,(n?e:d)|0,(g>>>0>>0?g:h)<<2|0)|0;h=a+34|0;i[h>>0]=o;g=j[f>>1]|0;if(o<<24>>24!=0&g<<16>>16==1)if(!(k[a>>2]|0)){i[h>>0]=0;p=1}else p=1;else p=g;g=(p&65535)+-1|0;a:do if(!g)q=p;else{o=g;d=p;while(1){if(k[a+(o<<2)>>2]|0){q=d;break a}l=d+-1<<16>>16;j[f>>1]=l;o=(l&65535)+-1|0;if(!o){q=l;break}else d=l}}while(0);if(q<<16>>16==1?(k[a>>2]|0)==0:0)i[h>>0]=0;if(!n){r=c;return}OBa(e);r=c;return}function tz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;d=k[b+8>>2]|0;e=k[c+32>>2]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){j=i[b+12>>0]|0;l=j<<24>>24==0;m=Hyb(k[c>>2]|0,0,k[((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)>>2]|0,0)|0;n=M;o=a+13|0;p=(i[o>>0]|0)==0;q=a+4|0;r=k[q>>2]|0;s=p?r:a;k[s>>2]=m;k[s+4>>2]=n;s=(n|0)!=0?2:1;n=p?k[a>>2]|0:2;if(s>>>0>n>>>0){m=n<<2;n=m>>>0>>0?s:m;m=n>>>0>134217728?134217728:n;n=KBa(m<<2)|0;if(p){p=a+8|0;Dyb(n|0,r|0,k[p>>2]<<2|0)|0;OBa(r);t=p}else{p=a+8|0;Dyb(n|0,a|0,k[p>>2]<<2|0)|0;i[o>>0]=0;t=p}k[t>>2]=s;k[a>>2]=m;k[q>>2]=n}else k[a+8>>2]=s;s=a+12|0;i[s>>0]=j;if(l)return;if((k[a+8>>2]|0)!=1)return;if(k[((i[o>>0]|0)==0?k[q>>2]|0:a)>>2]|0)return;i[s>>0]=0;return}s=h>>>0>134217728?134217728:h;q=a+13|0;o=i[q>>0]|0;l=o<<24>>24==0;j=k[a>>2]|0;n=l?j:2;if(s>>>0>n>>>0){m=n<<2;n=m>>>0>>0?s:m;m=n>>>0>134217728?134217728:n;n=KBa(m<<2)|0;if(l){l=a+4|0;t=k[l>>2]|0;p=a+8|0;Dyb(n|0,t|0,k[p>>2]<<2|0)|0;OBa(t);u=l;v=p}else{p=a+8|0;Dyb(n|0,a|0,k[p>>2]<<2|0)|0;i[q>>0]=0;u=a+4|0;v=p}k[v>>2]=s;k[a>>2]=m;k[u>>2]=n;w=m;x=i[q>>0]|0}else{k[a+8>>2]=s;w=j;x=o}o=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;j=c;c=x<<24>>24==0;s=a+4|0;m=k[s>>2]|0;n=c?m:a;u=n+(g<<2)|0;v=f?j:o;if(!g){y=v;z=0;A=0;B=n}else{p=((-8-((e>>>0>d>>>0?d:e)<<2^-4)|0)>>>2)+1|0;e=v;v=f?o:j;j=0;o=0;f=n;while(1){d=e;l=v;t=k[l>>2]|0;r=Hyb(k[d>>2]|0,0,j|0,o|0)|0;C=Hyb(r|0,M|0,t|0,0)|0;t=M;k[f>>2]=C;f=f+4|0;C=d+4|0;if((f|0)==(u|0)){D=C;E=t;F=0;break}else{e=C;v=l+4|0;j=t;o=0}}y=D;z=E;A=F;B=n+(p<<2)|0}p=u+(h-g<<2)|0;g=(z|0)==0&(A|0)==0;do if((B|0)==(p|0))if(g){G=x;H=m}else{I=z;J=29}else{u=y;n=z;F=A;E=g;D=B;while(1){o=u;if(E){K=u;L=o;N=D;break}j=Hyb(k[o>>2]|0,0,n|0,F|0)|0;n=M;k[D>>2]=j;D=D+4|0;E=(n|0)==0&0==0;if((D|0)==(p|0)){J=27;break}else{u=o+4|0;F=0}}if((J|0)==27)if(E){G=x;H=m;break}else{I=n;J=29;break}if((L|0)==(N|0)){G=x;H=m}else{Eyb(N|0,K|0,L+(p-N>>2<<2)-K|0)|0;G=i[q>>0]|0;H=k[s>>2]|0}}while(0);if((J|0)==29){J=h+1|0;K=J>>>0>134217728?134217728:J;J=c?w:2;if(K>>>0>J>>>0){w=J<<2;J=w>>>0>>0?K:w;w=J>>>0>134217728?134217728:J;J=KBa(w<<2)|0;if(c){c=a+8|0;Dyb(J|0,m|0,k[c>>2]<<2|0)|0;OBa(m);O=c}else{c=a+8|0;Dyb(J|0,a|0,k[c>>2]<<2|0)|0;i[q>>0]=0;O=c}k[O>>2]=K;k[a>>2]=w;k[s>>2]=J;P=i[q>>0]|0;Q=J}else{k[a+8>>2]=K;P=x;Q=m}k[(P<<24>>24==0?Q:a)+(h<<2)>>2]=I;G=P;H=Q}Q=G<<24>>24==0?H:a;H=a+8|0;G=k[H>>2]|0;P=G+-1|0;a:do if(!P)R=G;else{I=P;h=G;while(1){if(k[Q+(I<<2)>>2]|0){R=h;break a}k[H>>2]=I;m=I+-1|0;if(!m){R=I;break}else{x=I;I=m;h=x}}}while(0);H=i[b+12>>0]|0;b=a+12|0;i[b>>0]=H;if(!(H<<24>>24!=0&(R|0)==1))return;if(k[Q>>2]|0)return;i[b>>0]=0;return}function uz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;d=k[b+8>>2]|0;e=k[c+32>>2]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){f=k[((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)>>2]|0;j=k[c>>2]|0;l=j>>>0>f>>>0;m=(i[b+12>>0]|0)!=0^l;n=(l?j:f)-(l?f:j)|0;j=a+13|0;f=i[j>>0]|0;do if(f<<24>>24==0&(k[a>>2]|0)==0){x=0;l=Ba(563,4)|0;o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)}else{o=a+4|0;p=k[o>>2]|0;q=a+8|0;Dyb(l|0,p|0,k[q>>2]<<2|0)|0;OBa(p);k[q>>2]=1;k[a>>2]=1;k[o>>2]=l;r=i[j>>0]|0;s=l;break}}else{k[a+8>>2]=1;r=f;s=k[a+4>>2]|0}while(0);f=r<<24>>24==0;k[(f?s:a)>>2]=n;n=a+12|0;i[n>>0]=m&1;if(!m)return;if(k[(f?s:a)>>2]|0)return;i[n>>0]=0;return}a:do if((d|0)==(e|0)){n=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;s=d;while(1){s=s+-1|0;if((s|0)<=-1){t=0;break a}f=k[n+(s<<2)>>2]|0;m=k[c+(s<<2)>>2]|0;if((f|0)!=(m|0)){u=f;v=m;break}}t=u>>>0>v>>>0?1:-1}else t=d>>>0>e>>>0?1:-1;while(0);e=h>>>0>134217728?134217728:h;d=a+13|0;v=i[d>>0]|0;u=v<<24>>24==0;s=k[a>>2]|0;n=u?s:2;if(e>>>0>n>>>0){m=n<<2;n=m>>>0>>0?e:m;m=n>>>0>134217728?134217728:n;n=KBa(m<<2)|0;if(u){u=a+4|0;f=k[u>>2]|0;r=a+8|0;Dyb(n|0,f|0,k[r>>2]<<2|0)|0;OBa(f);w=u;y=r}else{r=a+8|0;Dyb(n|0,a|0,k[r>>2]<<2|0)|0;i[d>>0]=0;w=a+4|0;y=r}k[y>>2]=e;k[a>>2]=m;k[w>>2]=n;z=i[d>>0]|0;A=m}else{k[a+8>>2]=e;z=v;A=s}s=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;v=c;c=z<<24>>24==0;e=a+4|0;m=k[e>>2]|0;n=c?m:a;if((t|0)>=0)if(!t){do if(c&(A|0)==0){x=0;t=Ba(563,4)|0;w=x;x=0;if(w&1){w=Hc(0)|0;Fg(w)}else{w=a+8|0;Dyb(t|0,m|0,k[w>>2]<<2|0)|0;OBa(m);k[w>>2]=1;k[a>>2]=1;k[e>>2]=t;B=i[d>>0]|0;C=t;break}}else{k[a+8>>2]=1;B=z;C=m}while(0);k[(B<<24>>24==0?C:a)>>2]=0;i[a+12>>0]=0;return}else{D=s;E=v;F=0}else{D=v;E=s;F=1}if(g){s=D;v=E;E=0;C=0;B=0;while(1){A=Gyb(k[s+(B<<2)>>2]|0,0,k[v+(B<<2)>>2]|0,0)|0;c=Gyb(A|0,M|0,E|0,C|0)|0;k[n+(B<<2)>>2]=c;c=M&1;B=B+1|0;if(B>>>0>=g>>>0){G=c;H=0;break}else{E=c;C=0}}if(((G|0)!=0|(H|0)!=0)&h>>>0>g>>>0){C=D;E=G;G=H;H=g;while(1){B=Gyb(k[C+(H<<2)>>2]|0,0,E|0,G|0)|0;k[n+(H<<2)>>2]=B;E=M&1;B=H+1|0;if(!(((E|0)!=0|0!=0)&h>>>0>B>>>0)){I=B;break}else{G=0;H=B}}}else I=g}else I=0;if((h|0)!=(I|0)?(g=D,(g|0)!=(n|0)):0){Eyb(n+(I<<2)|0,g+(I<<2)|0,h-I<<2|0)|0;J=i[d>>0]|0;K=k[e>>2]|0}else{J=z;K=m}m=J<<24>>24==0?K:a;K=a+8|0;J=k[K>>2]|0;z=J+-1|0;b:do if(!z)L=J;else{e=z;d=J;while(1){if(k[m+(e<<2)>>2]|0){L=d;break b}k[K>>2]=e;I=e+-1|0;if(!I){L=e;break}else{h=e;e=I;d=h}}}while(0);K=i[b+12>>0]|0;b=a+12|0;i[b>>0]=K;a=(L|0)==1;if(K<<24>>24!=0&a?(k[m>>2]|0)==0:0){i[b>>0]=0;N=0}else N=K;if(!F)return;i[b>>0]=N^1;if(!(N<<24>>24!=1&a))return;if(k[m>>2]|0)return;i[b>>0]=0;return}function vz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;E0a(f,a);a=f+8|0;e=f+12|0;k[e>>2]=0;k[f>>2]=25428;k[a>>2]=25448;k[f+16>>2]=b;k[f+20>>2]=c;k[f+24>>2]=d;x=0;va(1489,f|0);x=0;d=Hc()|0;k[a>>2]=20796;a=k[e>>2]|0;if(!a){nCa(f);Sc(d|0)}x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c){nCa(f);Sc(d|0)}k[e>>2]=0;nCa(f);Sc(d|0)}function wz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;if((b|0)==0&(c|0)==0)return;d=Iyb(b|0,c|0,5)|0;c=b&31;b=a+8|0;e=k[b>>2]|0;if((e|0)==1?(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0)==0:0)return;f=(c|0)!=0;if(f){g=a+13|0;h=i[g>>0]|0;j=a;l=g;m=h;n=(((k[(h<<24>>24==0?k[a+4>>2]|0:a)+(e+-1<<2)>>2]|0)>>>(32-c|0)|0)!=0&1)+e|0}else{h=a+13|0;j=a;l=h;m=i[h>>0]|0;n=e}h=n+d|0;n=h>>>0>134217728?134217728:h;g=m<<24>>24==0;o=k[j>>2]|0;p=g?o:2;if(n>>>0>p>>>0){q=p<<2;p=q>>>0>>0?n:q;q=p>>>0>134217728?134217728:p;p=KBa(q<<2)|0;if(g){g=a+4|0;r=k[g>>2]|0;Dyb(p|0,r|0,e<<2|0)|0;OBa(r);s=g}else{Dyb(p|0,a|0,e<<2|0)|0;i[l>>0]=0;s=a+4|0}k[b>>2]=n;k[j>>2]=q;k[s>>2]=p;t=k[b>>2]|0;u=i[l>>0]|0;v=q}else{k[b>>2]=n;t=n;u=m;v=o}o=(h|0)==(t|0);m=u<<24>>24==0;n=a+4|0;q=k[n>>2]|0;p=m?q:j;if(d>>>0>h>>>0){do if(m&(v|0)==0){x=0;s=Ba(563,4)|0;g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else{Dyb(s|0,q|0,t<<2|0)|0;OBa(q);k[b>>2]=1;k[j>>2]=1;k[n>>2]=s;w=i[l>>0]|0;y=s;break}}else{k[b>>2]=1;w=u;y=q}while(0);k[(w<<24>>24==0?y:j)>>2]=0;i[a+12>>0]=0;return}a=h-t|0;if(f){do if(o){f=k[p+(e+-1-a<<2)>>2]|0;if(h>>>0>(e+d|0)>>>0){j=h+-1|0;k[p+(j-a<<2)>>2]=f>>>(32-c|0);z=a;A=j;break}j=f<>2]=j;if(e>>>0>1)k[f>>2]=(k[p+(e+-2-a<<2)>>2]|0)>>>(32-c|0)|j;z=a+1|0;A=h}else{z=a;A=h}while(0);d=0-z|0;o=z+1|0;if(e>>>0>o>>>0){j=e+-1|0;f=A+-1|0;y=e+-2|0;w=32-c|0;q=o;u=d;do{l=k[p+(j+u<<2)>>2]<>2]=l;k[n>>2]=(k[p+(y+u<<2)>>2]|0)>>>w|l;u=0-q|0;q=q+1|0}while((q|0)!=(e|0));B=e;C=j;D=1-e|0}else{B=o;C=z;D=d}if(e>>>0>>0)E=C;else{k[p+(A+-1+D<<2)>>2]=k[p+(e+-1+D<<2)>>2]<>>0>>0){B=A+-1|0;c=E;do{k[p+(B-c<<2)>>2]=0;c=c+1|0}while((c|0)!=(A|0))}}else{if(a>>>0>>0){A=e+-1|0;c=h+-1|0;B=a;do{k[p+(c-B<<2)>>2]=k[p+(A-B<<2)>>2];B=B+1|0}while(B>>>0>>0);F=e}else F=a;if(F>>>0>>0){a=h+-1|0;e=F;do{k[p+(a-e<<2)>>2]=0;e=e+1|0}while(e>>>0>>0)}}h=t+-1|0;if(!h)return;else G=h;while(1){if(k[p+(G<<2)>>2]|0){H=45;break}k[b>>2]=G;G=G+-1|0;if(!G){H=45;break}}if((H|0)==45)return}function xz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+32|0;c=b;b=Rd(32)|0;E0a(c,a);k[c>>2]=47544;d=c+8|0;k[d>>2]=20796;e=k[a+12>>2]|0;k[c+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;nCa(c);g=f;h=e}else{e=c+16|0;f=a+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[c>>2]=25428;k[d>>2]=25448;x=0;xa(681,b|0,c|0);f=x;x=0;if(f&1)i=1;else{x=0;fb(149,b|0,2064,292);x=0;i=0}f=Hc()|0;e=M;k[d>>2]=20796;d=c+12|0;a=k[d>>2]|0;if(a){x=0;j=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(j)k[d>>2]=0}nCa(c);if(i){g=e;h=f}else{l=e;m=f;Sc(m|0)}}Fc(b|0);l=g;m=h;Sc(m|0)}function yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=a+28|0;k[c>>2]=21368;E0a(a,b);k[a>>2]=47544;d=a+8|0;k[d>>2]=20796;e=k[b+12>>2]|0;k[a+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;nCa(a);g=f;h=e;Sc(h|0)}e=a+16|0;f=b+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[a>>2]=25468;f=a+8|0;k[f>>2]=25496;k[c>>2]=25524;x=0;xa(608,f|0,b+8|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;f=M;k[d>>2]=20796;d=a+12|0;c=k[d>>2]|0;if(c){x=0;e=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(e)k[d>>2]=0}nCa(a);g=f;h=b;Sc(h|0)}function zz(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(!c){nCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){nCa(a);return}k[b>>2]=0;nCa(a);return}function Az(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}nCa(a);OBa(a);return}function Bz(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(32)|0;x=0;i[c>>0]=i[b>>0]|0;fb(187,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-12>>2]|0)|0}return 0}function Cz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Rd(32)|0;c=b+28|0;k[c>>2]=21368;E0a(b,a);k[b>>2]=47544;d=b+8|0;k[d>>2]=20796;e=k[a+12>>2]|0;k[b+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;nCa(b);Fc(b|0);Sc(e|0)}e=b+16|0;f=a+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[b>>2]=25468;k[d>>2]=25496;k[c>>2]=25524;Gf(b|0,2064,292)}function Dz(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){nCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){nCa(b);return}k[a>>2]=0;nCa(b);return}function Ez(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[a>>2]=0}nCa(b);OBa(b);return}function Fz(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(32)|0;x=0;i[c>>0]=i[b>>0]|0;fb(187,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-12>>2]|0)|0}return 0}function Gz(a){a=a|0;Cz(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Hz(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){nCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){nCa(b);return}k[a>>2]=0;nCa(b);return}function Iz(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){nCa(b);OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){nCa(b);OBa(b);return}k[a>>2]=0;nCa(b);OBa(b);return}function Jz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=a+28|0;k[c>>2]=21368;E0a(a,b);k[a>>2]=47544;d=a+8|0;k[d>>2]=20796;e=k[b+12>>2]|0;k[a+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;nCa(a);g=f;h=e;Sc(h|0)}e=a+16|0;f=b+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[a>>2]=25468;f=a+8|0;k[f>>2]=25496;k[c>>2]=25524;x=0;xa(608,f|0,b+8|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;f=M;k[d>>2]=20796;d=a+12|0;c=k[d>>2]|0;if(c){x=0;e=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(e)k[d>>2]=0}nCa(a);g=f;h=b;Sc(h|0)}function Kz(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(!c){nCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){nCa(a);return}k[b>>2]=0;nCa(a);return}function Lz(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}nCa(a);OBa(a);return}function Mz(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){nCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){nCa(b);return}k[a>>2]=0;nCa(b);return}function Nz(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[a>>2]=0}nCa(b);OBa(b);return}function Oz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=24716;h=g+-4|0;k[h>>2]=24744;n=g+16|0;k[n>>2]=24768;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=24660;k[c>>2]=24624;k[f>>2]=24684;x=0;xa(682,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,2128,300);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=24716;k[h>>2]=24744;k[n>>2]=24768;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function Pz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=25564;h=g+-4|0;k[h>>2]=25592;i=g+16|0;k[i>>2]=25616;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=25708;k[a>>2]=25664;k[a+20>>2]=25732;k[a+40>>2]=25760;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=25564;k[h>>2]=25592;k[i>>2]=25616;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Qz(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=25564;k[b+-4>>2]=25592;k[b+16>>2]=25616;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Rz(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=25564;k[b+-4>>2]=25592;k[b+16>>2]=25616;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Sz(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(188,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-40>>2]|0)|0}return 0}function Tz(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(683,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,2128,300)}function Uz(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=25564;k[a+-4>>2]=25592;k[a+16>>2]=25616;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Vz(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=25564;k[a+-4>>2]=25592;k[a+16>>2]=25616;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Wz(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(188,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-40>>2]|0)|0}return 0}function Xz(a){a=a|0;Tz(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Yz(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=25564;k[a+-4>>2]=25592;k[a+16>>2]=25616;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Zz(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=25564;k[a+-4>>2]=25592;k[a+16>>2]=25616;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function _z(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=25564;h=g+-4|0;k[h>>2]=25592;i=g+16|0;k[i>>2]=25616;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=25708;k[a>>2]=25664;k[a+20>>2]=25732;k[a+40>>2]=25760;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=25564;k[h>>2]=25592;k[i>>2]=25616;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function $z(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=25564;k[h+-4>>2]=25592;k[h+16>>2]=25616;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=25708;k[a>>2]=25664;k[d>>2]=25732;k[a+40>>2]=25760;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function aA(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=24716;k[b+-4>>2]=24744;k[b+16>>2]=24768;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function bA(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=24716;k[b+-4>>2]=24744;k[b+16>>2]=24768;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function cA(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=24716;k[a+-4>>2]=24744;k[a+16>>2]=24768;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function dA(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=24716;k[a+-4>>2]=24744;k[a+16>>2]=24768;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function eA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function fA(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=25900;h=g+-4|0;k[h>>2]=25928;n=g+16|0;k[n>>2]=25952;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=25844;k[c>>2]=25808;k[f>>2]=25868;x=0;xa(684,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,2184,312);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=25900;k[h>>2]=25928;k[n>>2]=25952;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=25984;h=g+-4|0;k[h>>2]=26012;i=g+16|0;k[i>>2]=26036;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=26124;k[a>>2]=26080;k[a+20>>2]=26148;k[a+40>>2]=26176;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=25984;k[h>>2]=26012;k[i>>2]=26036;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function hA(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=25984;k[b+-4>>2]=26012;k[b+16>>2]=26036;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function iA(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=25984;k[b+-4>>2]=26012;k[b+16>>2]=26036;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function jA(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(189,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-36>>2]|0)|0}return 0}function kA(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(685,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,2184,312)}function lA(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=25984;k[a+-4>>2]=26012;k[a+16>>2]=26036;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function mA(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=25984;k[a+-4>>2]=26012;k[a+16>>2]=26036;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function nA(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(189,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-36>>2]|0)|0}return 0}function oA(a){a=a|0;kA(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function pA(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=25984;k[a+-4>>2]=26012;k[a+16>>2]=26036;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function qA(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=25984;k[a+-4>>2]=26012;k[a+16>>2]=26036;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function rA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=25984;h=g+-4|0;k[h>>2]=26012;i=g+16|0;k[i>>2]=26036;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=26124;k[a>>2]=26080;k[a+20>>2]=26148;k[a+40>>2]=26176;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=25984;k[h>>2]=26012;k[i>>2]=26036;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=25984;k[h+-4>>2]=26012;k[h+16>>2]=26036;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=26124;k[a>>2]=26080;k[d>>2]=26148;k[a+40>>2]=26176;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function tA(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=25900;k[b+-4>>2]=25928;k[b+16>>2]=25952;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function uA(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=25900;k[b+-4>>2]=25928;k[b+16>>2]=25952;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function vA(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=25900;k[a+-4>>2]=25928;k[a+16>>2]=25952;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function wA(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=25900;k[a+-4>>2]=25928;k[a+16>>2]=25952;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function xA(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=24528;k[b+-4>>2]=24556;k[b+16>>2]=24580;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function yA(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=24528;k[b+-4>>2]=24556;k[b+16>>2]=24580;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function zA(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=24528;k[a+-4>>2]=24556;k[a+16>>2]=24580;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function AA(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=24528;k[a+-4>>2]=24556;k[a+16>>2]=24580;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function BA(a,b){a=a|0;b=b|0;var c=0;if(!b)return;else{c=k[b+32>>2]|0;BA(a,(c|0)==0?0:c+-28|0);c=k[b+36>>2]|0;BA(a,(c|0)==0?0:c+-28|0);DA(b+4|0,k[b+8>>2]|0);OBa(b);return}}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!b)return;CA(a,k[b>>2]|0);CA(a,k[b+4>>2]|0);a=k[b+16>>2]|0;c=a;if(a){d=b+20|0;e=k[d>>2]|0;if((e|0)!=(a|0))k[d>>2]=e+(~((e+-4-c|0)>>>2)<<2);OBa(a)}OBa(b);return}function DA(a,b){a=a|0;b=b|0;if(!b)return;else{DA(a,k[b>>2]|0);DA(a,k[b+4>>2]|0);OBa(b);return}}function EA(a){a=a|0;OBa(a);return}function FA(a){a=a|0;return}function GA(a){a=a|0;OBa(a);return}function HA(a){a=a|0;var b=0,c=0;b=KBa(16)|0;c=a+4|0;k[b>>2]=24364;a=b+4|0;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];return b|0}function IA(a,b){a=a|0;b=b|0;var c=0;c=a+4|0;k[b>>2]=24364;a=b+4|0;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];return}function JA(a){a=a|0;return}function KA(a){a=a|0;OBa(a);return}function LA(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;k[b+204>>2]=0;c=k[b+192>>2]|0;d=b+196|0;e=k[d>>2]|0;if((e|0)!=(c|0))k[d>>2]=e+(~((e+-16-c|0)>>>4)<<4);OA(b,k[a+8>>2]|0)|0;OA(b+96|0,k[a+12>>2]|0)|0;return}function MA(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==214993?a+4|0:0)|0}function NA(a){a=a|0;return 2248}function OA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+16|0;d=c;k[a>>2]=k[b>>2];e=a+4|0;f=b+4|0;g=a+8|0;ny(e,k[g>>2]|0);k[e>>2]=k[f>>2];h=b+8|0;i=k[h>>2]|0;k[g>>2]=i;j=b+12|0;l=k[j>>2]|0;k[a+12>>2]=l;if(!l)k[e>>2]=g;else{k[i+8>>2]=g;k[f>>2]=h;k[h>>2]=0;k[j>>2]=0}k[a+16>>2]=k[b+16>>2];j=a+20|0;h=b+20|0;f=a+24|0;Ay(j,k[f>>2]|0);k[j>>2]=k[h>>2];g=b+24|0;i=k[g>>2]|0;k[f>>2]=i;e=b+28|0;l=k[e>>2]|0;k[a+28>>2]=l;if(!l)k[j>>2]=f;else{k[i+8>>2]=f;k[h>>2]=g;k[g>>2]=0;k[e>>2]=0}e=a+32|0;g=b+32|0;h=a+36|0;Ay(e,k[h>>2]|0);k[e>>2]=k[g>>2];f=b+36|0;i=k[f>>2]|0;k[h>>2]=i;j=b+40|0;l=k[j>>2]|0;k[a+40>>2]=l;if(!l)k[e>>2]=h;else{k[i+8>>2]=h;k[g>>2]=f;k[f>>2]=0;k[j>>2]=0}j=a+44|0;f=b+44|0;g=a+48|0;CA(j,k[g>>2]|0);k[j>>2]=k[f>>2];h=b+48|0;i=k[h>>2]|0;k[g>>2]=i;e=b+52|0;l=k[e>>2]|0;k[a+52>>2]=l;if(!l)k[j>>2]=g;else{k[i+8>>2]=g;k[f>>2]=h;k[h>>2]=0;k[e>>2]=0}e=b+56|0;h=k[e>>2]|0;f=b+60|0;g=k[f>>2]|0;k[e>>2]=0;k[f>>2]=0;k[a+56>>2]=h;h=a+60|0;f=k[h>>2]|0;k[h>>2]=g;if(f)j0a(f);PA(d,b+72|0);b=a+72|0;f=b+4|0;g=d+4|0;h=k[f>>2]|0;k[f>>2]=k[g>>2];k[g>>2]=h;f=b+12|0;b=d+12|0;e=k[f>>2]|0;k[f>>2]=k[b>>2];k[b>>2]=e;e=k[h+28>>2]&-2;BA(d+8|0,(e|0)==0?0:e+-28|0);OBa(k[g>>2]|0);r=c;return a|0}function PA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+48|0;d=c;e=a+4|0;f=KBa(40)|0;k[e>>2]=f;g=a+8|0;h=b+8|0;j=a+12|0;k[j>>2]=0;a=b+12|0;l=k[a>>2]|0;m=k[b+4>>2]|0;b=f;k[d+4>>2]=l;f=d+12|0;k[f>>2]=l;n=d+16|0;o=m;do if(!l)p=0;else{x=0;q=Ba(563,l<<3|0)|0;s=x;x=0;if(!(s&1)){p=q;break}q=Hc()|0;t=M;u=q;v=k[e>>2]|0;OBa(v);Sc(u|0)}while(0);k[n>>2]=p;p=d+20|0;k[p>>2]=0;k[d+24>>2]=m;k[d+28>>2]=b;b=d+32|0;i[b>>0]=0;m=k[o+32>>2]|0;q=(m|0)==0?0:m+-28|0;do if((q|0)==(o|0))w=l;else{m=q;while(1){x=0;xa(686,d|0,m|0);s=x;x=0;if(s&1)break;s=m+28|0;y=m+36|0;if(!(k[y>>2]|0)){z=s;A=k[s>>2]&-2;if((s|0)==(k[A+8>>2]|0)){s=A;while(1){B=k[s>>2]&-2;if((s|0)==(k[B+8>>2]|0))s=B;else{C=s;D=B;break}}E=D;F=k[C+8>>2]|0;G=C}else{E=A;F=0;G=z}H=(F|0)==(E|0)?G:E}else{s=y;do{B=k[s>>2]|0;s=B+4|0}while((k[s>>2]|0)!=0);H=B}m=(H|0)==0?0:H+-28|0;if((m|0)==(o|0)){I=19;break}}if((I|0)==19){w=k[f>>2]|0;break}m=Hc()|0;s=M;y=k[p>>2]|0;if(!((i[b>>0]|0)!=0|(y|0)==0)){z=k[n>>2]|0;A=0;do{B=z+(A<<3)+4|0;J=k[B>>2]|0;DA(J+4|0,k[J+8>>2]|0);OBa(k[B>>2]|0);A=A+1|0}while(A>>>0>>0)}if(!(k[f>>2]|0)){t=s;u=m;v=k[e>>2]|0;OBa(v);Sc(u|0)}OBa(k[n>>2]|0);t=s;u=m;v=k[e>>2]|0;OBa(v);Sc(u|0)}while(0);RA(g,h,d);i[b>>0]=1;k[j>>2]=k[a>>2];if(!w){r=c;return}OBa(k[n>>2]|0);r=c;return}function QA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=a+16|0;f=k[e>>2]|0;g=a+20|0;h=k[g>>2]|0;k[f+(h<<3)>>2]=b;i=KBa(40)|0;k[f+(h<<3)+4>>2]=i;x=0;fb(190,i|0,k[b>>2]|0,b+4|0);b=x;x=0;if(b&1){b=Hc(0)|0;me(b|0)|0;OBa(k[(k[e>>2]|0)+(k[g>>2]<<3)+4>>2]|0);x=0;hb(46);x=0;b=Hc()|0;x=0;hb(45);i=x;x=0;if(i&1){i=Hc(0)|0;Fg(i)}else Sc(b|0)}b=(k[g>>2]|0)+1|0;k[g>>2]=b;if((b|0)!=(k[a+4>>2]|0)){r=c;return}a=k[e>>2]|0;UA(a,a+(b<<3)|0,d);r=c;return}function RA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;d=b+-8+4|0;e=k[d>>2]|0;f=e+28|0;g=k[f>>2]|0;h=g&-2;i=a+-8+4|0;j=k[i>>2]|0;l=j+28|0;if(!((h|0)==0|(h+-28|0)==0)){h=g&1;k[l>>2]=k[l>>2]&-2|h;g=k[f>>2]&-2;f=(g|0)==0?0:g+-28|0;g=c+24|0;m=k[g>>2]|0;if((m|0)==(f|0))n=c+28|0;else{o=k[c+16>>2]|0;p=k[c+20>>2]<<3>>3;a:while(1){q=p;while(1){if(!q){r=o;break a}s=(q|0)/2|0;t=o+(s<<3)|0;if((k[t>>2]|0)>>>0>>0){u=s;v=t;w=q;break}else q=s}o=v+8|0;p=w+-1-u|0}n=r+4|0}k[l>>2]=h|(k[n>>2]|0)+28;n=k[e+32>>2]|0;e=(n|0)==0?0:n+-28|0;if((m|0)==(e|0))x=c+28|0;else{m=k[c+16>>2]|0;n=k[c+20>>2]<<3>>3;b:while(1){h=n;while(1){if(!h){y=m;break b}r=(h|0)/2|0;u=m+(r<<3)|0;if((k[u>>2]|0)>>>0>>0){z=r;A=u;B=h;break}else h=r}m=A+8|0;n=B+-1-z|0}x=y+4|0}k[j+32>>2]=(k[x>>2]|0)+28;x=k[(k[d>>2]|0)+36>>2]|0;d=(x|0)==0?0:x+-28|0;if((k[g>>2]|0)==(d|0)){x=c+20|0;C=c+28|0;D=x;E=c+16|0;F=k[x>>2]|0}else{x=c+16|0;y=c+20|0;z=k[y>>2]|0;B=k[x>>2]|0;n=z<<3>>3;c:while(1){A=n;while(1){if(!A){G=B;break c}m=(A|0)/2|0;e=B+(m<<3)|0;if((k[e>>2]|0)>>>0>>0){H=m;I=e;J=A;break}else A=m}B=I+8|0;n=J+-1-H|0}C=G+4|0;D=y;E=x;F=z}k[(k[i>>2]|0)+36>>2]=(k[C>>2]|0)+28;C=k[E>>2]|0;z=C+(F<<3)|0;if(F){F=c+28|0;x=C;do{C=k[x>>2]|0;y=k[x+4>>2]|0;G=y+28|0;H=C+28|0;J=k[H>>2]&1;k[G>>2]=k[G>>2]&-2|J;n=k[H>>2]&-2;I=n;do if(n){B=I+-28|0;if((k[g>>2]|0)==(B|0))K=F;else{d=k[E>>2]|0;A=k[D>>2]<<3>>3;d:while(1){m=A;while(1){if(!m){L=d;break d}e=(m|0)/2|0;h=d+(e<<3)|0;if((k[h>>2]|0)>>>0>>0){M=e;N=h;O=m;break}else m=e}d=N+8|0;A=O+-1-M|0}K=L+4|0}A=k[K>>2]|0;k[G>>2]=J|A+28;if((k[I+4>>2]|0)==(H|0)){k[A+32>>2]=G;break}if((k[I+8>>2]|0)==(H|0))k[A+36>>2]=G}else k[G>>2]=J;while(0);if(!(k[C+32>>2]|0))k[y+32>>2]=0;if(!(k[C+36>>2]|0))k[y+36>>2]=0;x=x+8|0}while((x|0)!=(z|0))}}else{k[l>>2]=0;k[j+32>>2]=l;l=k[i>>2]|0;k[l+36>>2]=l+28}SA(a,b,c);return}function SA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;d=b+-8+4|0;b=k[d>>2]|0;e=b+16|0;f=k[e>>2]|0;g=f&-2;h=a+-8+4|0;a=k[h>>2]|0;i=a+16|0;if((g|0)==0|(g+-16|0)==0){k[i>>2]=0;k[a+20>>2]=i;g=k[h>>2]|0;k[g+24>>2]=g+16;return}g=f&1;k[i>>2]=k[i>>2]&-2|g;f=k[e>>2]&-2;e=(f|0)==0?0:f+-16|0;f=c+24|0;j=k[f>>2]|0;if((j|0)==(e|0))l=c+28|0;else{m=k[c+16>>2]|0;n=k[c+20>>2]<<3>>3;a:while(1){o=n;while(1){if(!o){p=m;break a}q=(o|0)/2|0;r=m+(q<<3)|0;if((k[r>>2]|0)>>>0>>0){s=q;t=r;u=o;break}else o=q}m=t+8|0;n=u+-1-s|0}l=p+4|0}k[i>>2]=g|(k[l>>2]|0)+16;l=k[b+20>>2]|0;b=(l|0)==0?0:l+-16|0;if((j|0)==(b|0))v=c+28|0;else{j=k[c+16>>2]|0;l=k[c+20>>2]<<3>>3;b:while(1){g=l;while(1){if(!g){w=j;break b}i=(g|0)/2|0;p=j+(i<<3)|0;if((k[p>>2]|0)>>>0>>0){x=i;y=p;z=g;break}else g=i}j=y+8|0;l=z+-1-x|0}v=w+4|0}k[a+20>>2]=(k[v>>2]|0)+16;v=k[(k[d>>2]|0)+24>>2]|0;d=(v|0)==0?0:v+-16|0;if((k[f>>2]|0)==(d|0)){v=c+20|0;A=c+28|0;B=v;C=c+16|0;D=k[v>>2]|0}else{v=c+16|0;a=c+20|0;w=k[a>>2]|0;x=k[v>>2]|0;z=w<<3>>3;c:while(1){l=z;while(1){if(!l){E=x;break c}y=(l|0)/2|0;j=x+(y<<3)|0;if((k[j>>2]|0)>>>0>>0){F=y;G=j;H=l;break}else l=y}x=G+8|0;z=H+-1-F|0}A=E+4|0;B=a;C=v;D=w}k[(k[h>>2]|0)+24>>2]=(k[A>>2]|0)+16;A=k[C>>2]|0;h=A+(D<<3)|0;if(!D)return;D=c+28|0;c=A;do{A=k[c>>2]|0;w=k[c+4>>2]|0;v=w+16|0;a=A+16|0;E=k[a>>2]&1;k[v>>2]=k[v>>2]&-2|E;F=k[a>>2]&-2;H=F;do if(F){z=H+-16|0;if((k[f>>2]|0)==(z|0))I=D;else{G=k[C>>2]|0;x=k[B>>2]<<3>>3;d:while(1){d=x;while(1){if(!d){J=G;break d}l=(d|0)/2|0;y=G+(l<<3)|0;if((k[y>>2]|0)>>>0>>0){K=l;L=y;M=d;break}else d=l}G=L+8|0;x=M+-1-K|0}I=J+4|0}x=k[I>>2]|0;k[v>>2]=E|x+16;if((k[H+4>>2]|0)==(a|0)){k[x+20>>2]=v;break}if((k[H+8>>2]|0)==(a|0))k[x+24>>2]=v}else k[v>>2]=E;while(0);if(!(k[A+20>>2]|0))k[w+20>>2]=0;if(!(k[A+24>>2]|0))k[w+24>>2]=0;c=c+8|0}while((c|0)!=(h|0));return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;k[a>>2]=b;b=a+4|0;h=a+8|0;k[h>>2]=0;i=a+12|0;k[i>>2]=0;j=a+8|0;k[b>>2]=j;a=k[c>>2]|0;l=c+4|0;if((a|0)==(l|0)){r=d;return}c=j;m=a;n=a;while(1){a=m+16|0;k[g>>2]=c;k[e>>2]=k[g>>2];o=XA(b,e,f,a)|0;if(!(k[o>>2]|0)){x=0;p=Ba(563,56)|0;q=x;x=0;if(q&1){s=12;break}q=p+16|0;t=a;a=q+40|0;do{k[q>>2]=k[t>>2];q=q+4|0;t=t+4|0}while((q|0)<(a|0));t=k[f>>2]|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=t;k[o>>2]=p;t=k[k[b>>2]>>2]|0;if(!t)u=p;else{k[b>>2]=t;u=k[o>>2]|0}ui(k[h>>2]|0,u);k[i>>2]=(k[i>>2]|0)+1}t=k[n+4>>2]|0;if(!t){q=n;while(1){a=k[q+8>>2]|0;if((k[a>>2]|0)==(q|0)){v=a;break}else q=a}}else{q=t;while(1){o=k[q>>2]|0;if(!o){v=q;break}else q=o}}if((v|0)==(l|0)){s=13;break}else{m=v;n=v}}if((s|0)==12){v=Hc()|0;DA(b,k[j>>2]|0);Sc(v|0)}else if((s|0)==13){r=d;return}}function UA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;d=a;a=b;a:while(1){b=a;e=a+-8|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>3;switch(i|0){case 2:{j=f;l=e;m=e;n=4;break a;break}case 3:{o=f;p=e;q=e;n=6;break a;break}case 4:{r=f;s=e;n=14;break a;break}case 5:{t=f;u=e;v=e;n=15;break a;break}case 1:case 0:{n=85;break a;break}default:{}}if((h|0)<248){w=f;x=a;n=21;break a}y=f+(((i|0)/2|0)<<3)|0;do if((h|0)>7992){z=(i|0)/4|0;A=f+(z<<3)|0;B=y+(z<<3)|0;z=VA(f,A,y,B,c)|0;if((k[e>>2]|0)>>>0>=(k[B>>2]|0)>>>0){C=y;D=z;break}E=B;F=k[E>>2]|0;G=k[E+4>>2]|0;E=e;H=k[E+4>>2]|0;I=B;k[I>>2]=k[E>>2];k[I+4>>2]=H;H=e;k[H>>2]=F;k[H+4>>2]=G;G=z+1|0;if((k[B>>2]|0)>>>0<(k[y>>2]|0)>>>0){H=y;F=k[H>>2]|0;I=k[H+4>>2]|0;H=B;E=k[H+4>>2]|0;J=y;k[J>>2]=k[H>>2];k[J+4>>2]=E;E=B;k[E>>2]=F;k[E+4>>2]=I;I=z+2|0;if((k[y>>2]|0)>>>0<(k[A>>2]|0)>>>0){E=A;F=k[E>>2]|0;B=k[E+4>>2]|0;E=y;J=k[E+4>>2]|0;H=A;k[H>>2]=k[E>>2];k[H+4>>2]=J;J=y;k[J>>2]=F;k[J+4>>2]=B;if((k[A>>2]|0)>>>0<(k[f>>2]|0)>>>0){B=f;J=k[B>>2]|0;F=k[B+4>>2]|0;B=A;H=k[B+4>>2]|0;E=f;k[E>>2]=k[B>>2];k[E+4>>2]=H;H=A;k[H>>2]=J;k[H+4>>2]=F;C=y;D=z+4|0}else{C=y;D=z+3|0}}else{C=y;D=I}}else{C=y;D=G}}else{G=k[y>>2]|0;I=(k[e>>2]|0)>>>0>>0;if(G>>>0>=(k[f>>2]|0)>>>0){if(!I){C=y;D=0;break}G=y;z=k[G>>2]|0;F=k[G+4>>2]|0;G=e;H=k[G+4>>2]|0;J=y;k[J>>2]=k[G>>2];k[J+4>>2]=H;H=e;k[H>>2]=z;k[H+4>>2]=F;if((k[y>>2]|0)>>>0>=(k[f>>2]|0)>>>0){C=y;D=1;break}F=f;H=k[F>>2]|0;z=k[F+4>>2]|0;F=y;J=k[F+4>>2]|0;G=f;k[G>>2]=k[F>>2];k[G+4>>2]=J;J=y;k[J>>2]=H;k[J+4>>2]=z;C=y;D=2;break}z=f;J=k[z>>2]|0;H=k[z+4>>2]|0;if(I){I=e;z=k[I+4>>2]|0;G=f;k[G>>2]=k[I>>2];k[G+4>>2]=z;z=e;k[z>>2]=J;k[z+4>>2]=H;C=y;D=1;break}z=y;G=k[z+4>>2]|0;I=f;k[I>>2]=k[z>>2];k[I+4>>2]=G;G=y;k[G>>2]=J;k[G+4>>2]=H;if((k[e>>2]|0)>>>0>>0){G=e;I=k[G+4>>2]|0;z=y;k[z>>2]=k[G>>2];k[z+4>>2]=I;I=e;k[I>>2]=J;k[I+4>>2]=H;C=y;D=2}else{C=y;D=1}}while(0);i=k[f>>2]|0;h=k[C>>2]|0;do if(i>>>0>>0){K=e;L=D}else{H=e;while(1){I=H+-8|0;if((f|0)==(I|0))break;if((k[I>>2]|0)>>>0>>0){M=I;n=67;break}else H=I}if((n|0)==67){n=0;H=f;I=k[H>>2]|0;J=k[H+4>>2]|0;H=M;z=k[H+4>>2]|0;G=f;k[G>>2]=k[H>>2];k[G+4>>2]=z;z=M;k[z>>2]=I;k[z+4>>2]=J;K=M;L=D+1|0;break}J=f+8|0;if(i>>>0<(k[e>>2]|0)>>>0)N=J;else{if((J|0)==(e|0)){n=85;break a}else{O=f;P=J}while(1){if(i>>>0<(k[O+8>>2]|0)>>>0){Q=O;R=P;break}J=P+8|0;if((J|0)==(e|0)){n=85;break a}else{z=P;P=J;O=z}}z=R;J=k[z>>2]|0;I=k[z+4>>2]|0;z=e;G=k[z+4>>2]|0;H=R;k[H>>2]=k[z>>2];k[H+4>>2]=G;G=e;k[G>>2]=J;k[G+4>>2]=I;N=Q+16|0}if((N|0)==(e|0)){n=85;break a}else{S=N;T=e}while(1){I=k[f>>2]|0;G=S;while(1){J=G+8|0;if(I>>>0<(k[G>>2]|0)>>>0){U=J;V=G;break}else G=J}G=T;while(1){J=G+-8|0;if(I>>>0<(k[J>>2]|0)>>>0)G=J;else{W=J;break}}if(V>>>0>=W>>>0){f=V;continue b}G=V;I=k[G>>2]|0;J=k[G+4>>2]|0;G=W;H=k[G+4>>2]|0;z=V;k[z>>2]=k[G>>2];k[z+4>>2]=H;H=W;k[H>>2]=I;k[H+4>>2]=J;S=U;T=W}}while(0);i=f+8|0;c:do if(i>>>0>>0){h=i;J=K;H=y;I=L;while(1){z=k[H>>2]|0;G=h;while(1){F=G+8|0;if((k[G>>2]|0)>>>0>>0)G=F;else{X=F;Y=G;break}}G=J;while(1){F=G+-8|0;if((k[F>>2]|0)>>>0>>0){Z=F;break}else G=F}if(Y>>>0>Z>>>0){_=Y;$=H;aa=I;break c}G=Y;z=k[G>>2]|0;F=k[G+4>>2]|0;G=Z;A=k[G+4>>2]|0;E=Y;k[E>>2]=k[G>>2];k[E+4>>2]=A;A=Z;k[A>>2]=z;k[A+4>>2]=F;h=X;J=Z;H=(H|0)==(Y|0)?Z:H;I=I+1|0}}else{_=i;$=y;aa=L}while(0);if((_|0)!=($|0)?(k[$>>2]|0)>>>0<(k[_>>2]|0)>>>0:0){y=_;i=k[y>>2]|0;I=k[y+4>>2]|0;y=$;H=k[y+4>>2]|0;J=_;k[J>>2]=k[y>>2];k[J+4>>2]=H;H=$;k[H>>2]=i;k[H+4>>2]=I;ba=aa+1|0}else ba=aa;if(!ba){ca=WA(f,_,c)|0;I=_+8|0;if(WA(I,a,c)|0){n=84;break}if(ca){f=I;continue}}I=_;if((I-g|0)>=(b-I|0)){da=f;ea=_;n=83;break}UA(f,_,c);f=_+8|0}if((n|0)==83){n=0;UA(ea+8|0,a,c);d=da;a=ea;continue}else if((n|0)==84){n=0;if(ca){n=85;break}else{d=f;a=_;continue}}}if((n|0)==4){if((k[l>>2]|0)>>>0>=(k[j>>2]|0)>>>0)return;l=j;_=k[l>>2]|0;a=k[l+4>>2]|0;l=m;d=k[l+4>>2]|0;ca=j;k[ca>>2]=k[l>>2];k[ca+4>>2]=d;d=m;k[d>>2]=_;k[d+4>>2]=a;return}else if((n|0)==6){a=o+8|0;d=k[a>>2]|0;_=(k[p>>2]|0)>>>0>>0;if(d>>>0>=(k[o>>2]|0)>>>0){if(!_)return;d=a;m=k[d>>2]|0;ca=k[d+4>>2]|0;d=q;l=k[d+4>>2]|0;j=a;k[j>>2]=k[d>>2];k[j+4>>2]=l;l=q;k[l>>2]=m;k[l+4>>2]=ca;if((k[a>>2]|0)>>>0>=(k[o>>2]|0)>>>0)return;ca=o;l=k[ca>>2]|0;m=k[ca+4>>2]|0;ca=a;j=k[ca+4>>2]|0;d=o;k[d>>2]=k[ca>>2];k[d+4>>2]=j;j=a;k[j>>2]=l;k[j+4>>2]=m;return}m=o;j=k[m>>2]|0;l=k[m+4>>2]|0;if(_){_=q;m=k[_+4>>2]|0;d=o;k[d>>2]=k[_>>2];k[d+4>>2]=m;m=q;k[m>>2]=j;k[m+4>>2]=l;return}m=a;d=k[m+4>>2]|0;_=o;k[_>>2]=k[m>>2];k[_+4>>2]=d;d=a;k[d>>2]=j;k[d+4>>2]=l;if((k[p>>2]|0)>>>0>=j>>>0)return;p=q;d=k[p+4>>2]|0;_=a;k[_>>2]=k[p>>2];k[_+4>>2]=d;d=q;k[d>>2]=j;k[d+4>>2]=l;return}else if((n|0)==14){VA(r,r+8|0,r+16|0,s,c)|0;return}else if((n|0)==15){s=t+8|0;r=t+16|0;l=t+24|0;VA(t,s,r,l,c)|0;if((k[u>>2]|0)>>>0>=(k[l>>2]|0)>>>0)return;u=l;c=k[u>>2]|0;d=k[u+4>>2]|0;u=v;j=k[u+4>>2]|0;q=l;k[q>>2]=k[u>>2];k[q+4>>2]=j;j=v;k[j>>2]=c;k[j+4>>2]=d;if((k[l>>2]|0)>>>0>=(k[r>>2]|0)>>>0)return;d=r;j=k[d>>2]|0;c=k[d+4>>2]|0;d=l;v=k[d>>2]|0;q=k[d+4>>2]|0;d=r;k[d>>2]=v;k[d+4>>2]=q;d=l;k[d>>2]=j;k[d+4>>2]=c;c=v;if(c>>>0>=(k[s>>2]|0)>>>0)return;d=s;j=k[d>>2]|0;l=k[d+4>>2]|0;d=s;k[d>>2]=v;k[d+4>>2]=q;d=r;k[d>>2]=j;k[d+4>>2]=l;if(c>>>0>=(k[t>>2]|0)>>>0)return;c=t;l=k[c>>2]|0;d=k[c+4>>2]|0;c=t;k[c>>2]=v;k[c+4>>2]=q;q=s;k[q>>2]=l;k[q+4>>2]=d;return}else if((n|0)==21){d=w+16|0;q=w+8|0;l=k[q>>2]|0;s=k[w>>2]|0;c=k[d>>2]|0;v=c>>>0>>0;do if(l>>>0>>0){t=w;j=k[t>>2]|0;r=k[t+4>>2]|0;if(v){t=d;u=k[t+4>>2]|0;_=w;k[_>>2]=k[t>>2];k[_+4>>2]=u;u=d;k[u>>2]=j;k[u+4>>2]=r;fa=j;break}u=q;_=k[u+4>>2]|0;t=w;k[t>>2]=k[u>>2];k[t+4>>2]=_;_=q;k[_>>2]=j;k[_+4>>2]=r;_=j;if(c>>>0<_>>>0){t=d;u=k[t+4>>2]|0;p=q;k[p>>2]=k[t>>2];k[p+4>>2]=u;u=d;k[u>>2]=j;k[u+4>>2]=r;fa=_}else fa=c}else if(v){_=q;r=k[_>>2]|0;u=k[_+4>>2]|0;_=d;j=k[_>>2]|0;p=k[_+4>>2]|0;_=q;k[_>>2]=j;k[_+4>>2]=p;_=d;k[_>>2]=r;k[_+4>>2]=u;u=r;if(j>>>0>>0){r=w;_=k[r>>2]|0;t=k[r+4>>2]|0;r=w;k[r>>2]=j;k[r+4>>2]=p;p=q;k[p>>2]=_;k[p+4>>2]=t;fa=u}else fa=u}else fa=c;while(0);c=w+24|0;if((c|0)==(x|0))return;else{ga=fa;ha=c;ia=d}while(1){d=k[ha>>2]|0;c=d;if(d>>>0>>0){fa=k[ha+4>>2]|0;q=ha;s=ia;while(1){v=s;l=k[v+4>>2]|0;u=q;k[u>>2]=k[v>>2];k[u+4>>2]=l;if((s|0)==(w|0)){ja=w;break}l=s+-8|0;if(d>>>0<(k[l>>2]|0)>>>0){u=s;s=l;q=u}else{ja=s;break}}k[ja>>2]=c;k[ja+4>>2]=fa}s=ha+8|0;if((s|0)==(x|0))break;q=ha;ga=k[ha>>2]|0;ha=s;ia=q}return}else if((n|0)==85)return}function VA(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=k[b>>2]|0;f=k[c>>2]|0;g=f>>>0>>0;do if(e>>>0<(k[a>>2]|0)>>>0){h=a;i=k[h>>2]|0;j=k[h+4>>2]|0;if(g){h=c;l=k[h+4>>2]|0;m=a;k[m>>2]=k[h>>2];k[m+4>>2]=l;l=c;k[l>>2]=i;k[l+4>>2]=j;n=1;o=i;break}l=b;m=k[l+4>>2]|0;h=a;k[h>>2]=k[l>>2];k[h+4>>2]=m;m=b;k[m>>2]=i;k[m+4>>2]=j;m=k[c>>2]|0;h=i;if(m>>>0>>0){l=c;p=k[l+4>>2]|0;q=b;k[q>>2]=k[l>>2];k[q+4>>2]=p;p=c;k[p>>2]=i;k[p+4>>2]=j;n=2;o=h}else{n=1;o=m}}else if(g){m=b;h=k[m>>2]|0;j=k[m+4>>2]|0;m=c;p=k[m+4>>2]|0;i=b;k[i>>2]=k[m>>2];k[i+4>>2]=p;p=c;k[p>>2]=h;k[p+4>>2]=j;if((k[b>>2]|0)>>>0<(k[a>>2]|0)>>>0){j=a;p=k[j>>2]|0;i=k[j+4>>2]|0;j=b;m=k[j+4>>2]|0;q=a;k[q>>2]=k[j>>2];k[q+4>>2]=m;m=b;k[m>>2]=p;k[m+4>>2]=i;n=2;o=k[c>>2]|0}else{n=1;o=h}}else{n=0;o=f}while(0);if((k[d>>2]|0)>>>0>=o>>>0){r=n;return r|0}o=c;f=k[o>>2]|0;g=k[o+4>>2]|0;o=d;e=k[o+4>>2]|0;h=c;k[h>>2]=k[o>>2];k[h+4>>2]=e;e=d;k[e>>2]=f;k[e+4>>2]=g;if((k[c>>2]|0)>>>0>=(k[b>>2]|0)>>>0){r=n+1|0;return r|0}g=b;e=k[g>>2]|0;f=k[g+4>>2]|0;g=c;d=k[g+4>>2]|0;h=b;k[h>>2]=k[g>>2];k[h+4>>2]=d;d=c;k[d>>2]=e;k[d+4>>2]=f;if((k[b>>2]|0)>>>0>=(k[a>>2]|0)>>>0){r=n+2|0;return r|0}f=a;d=k[f>>2]|0;e=k[f+4>>2]|0;f=b;c=k[f+4>>2]|0;h=a;k[h>>2]=k[f>>2];k[h+4>>2]=c;c=b;k[c>>2]=d;k[c+4>>2]=e;r=n+3|0;return r|0}function WA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;switch(b-a>>3|0){case 2:{d=b+-8|0;if((k[d>>2]|0)>>>0>=(k[a>>2]|0)>>>0){e=1;return e|0}f=a;g=k[f>>2]|0;h=k[f+4>>2]|0;f=d;i=k[f+4>>2]|0;j=a;k[j>>2]=k[f>>2];k[j+4>>2]=i;i=d;k[i>>2]=g;k[i+4>>2]=h;e=1;return e|0}case 3:{h=a+8|0;i=b+-8|0;g=k[h>>2]|0;d=(k[i>>2]|0)>>>0>>0;if(g>>>0>=(k[a>>2]|0)>>>0){if(!d){e=1;return e|0}g=h;j=k[g>>2]|0;f=k[g+4>>2]|0;g=i;l=k[g+4>>2]|0;m=h;k[m>>2]=k[g>>2];k[m+4>>2]=l;l=i;k[l>>2]=j;k[l+4>>2]=f;if((k[h>>2]|0)>>>0>=(k[a>>2]|0)>>>0){e=1;return e|0}f=a;l=k[f>>2]|0;j=k[f+4>>2]|0;f=h;m=k[f+4>>2]|0;g=a;k[g>>2]=k[f>>2];k[g+4>>2]=m;m=h;k[m>>2]=l;k[m+4>>2]=j;e=1;return e|0}j=a;m=k[j>>2]|0;l=k[j+4>>2]|0;if(d){d=i;j=k[d+4>>2]|0;g=a;k[g>>2]=k[d>>2];k[g+4>>2]=j;j=i;k[j>>2]=m;k[j+4>>2]=l;e=1;return e|0}j=h;g=k[j+4>>2]|0;d=a;k[d>>2]=k[j>>2];k[d+4>>2]=g;g=h;k[g>>2]=m;k[g+4>>2]=l;if((k[i>>2]|0)>>>0>=m>>>0){e=1;return e|0}g=i;d=k[g+4>>2]|0;j=h;k[j>>2]=k[g>>2];k[j+4>>2]=d;d=i;k[d>>2]=m;k[d+4>>2]=l;e=1;return e|0}case 4:{VA(a,a+8|0,a+16|0,b+-8|0,c)|0;e=1;return e|0}case 5:{l=a+8|0;d=a+16|0;m=a+24|0;i=b+-8|0;VA(a,l,d,m,c)|0;if((k[i>>2]|0)>>>0>=(k[m>>2]|0)>>>0){e=1;return e|0}c=m;j=k[c>>2]|0;g=k[c+4>>2]|0;c=i;h=k[c+4>>2]|0;f=m;k[f>>2]=k[c>>2];k[f+4>>2]=h;h=i;k[h>>2]=j;k[h+4>>2]=g;if((k[m>>2]|0)>>>0>=(k[d>>2]|0)>>>0){e=1;return e|0}g=d;h=k[g>>2]|0;j=k[g+4>>2]|0;g=m;i=k[g>>2]|0;f=k[g+4>>2]|0;g=d;k[g>>2]=i;k[g+4>>2]=f;g=m;k[g>>2]=h;k[g+4>>2]=j;j=i;if(j>>>0>=(k[l>>2]|0)>>>0){e=1;return e|0}g=l;h=k[g>>2]|0;m=k[g+4>>2]|0;g=l;k[g>>2]=i;k[g+4>>2]=f;g=d;k[g>>2]=h;k[g+4>>2]=m;if(j>>>0>=(k[a>>2]|0)>>>0){e=1;return e|0}j=a;m=k[j>>2]|0;g=k[j+4>>2]|0;j=a;k[j>>2]=i;k[j+4>>2]=f;f=l;k[f>>2]=m;k[f+4>>2]=g;e=1;return e|0}case 1:case 0:{e=1;return e|0}default:{g=a+16|0;f=a+8|0;m=k[f>>2]|0;l=k[a>>2]|0;j=k[g>>2]|0;i=j>>>0>>0;do if(m>>>0>>0){h=a;d=k[h>>2]|0;c=k[h+4>>2]|0;if(i){h=g;n=k[h+4>>2]|0;o=a;k[o>>2]=k[h>>2];k[o+4>>2]=n;n=g;k[n>>2]=d;k[n+4>>2]=c;p=d;break}n=f;o=k[n+4>>2]|0;h=a;k[h>>2]=k[n>>2];k[h+4>>2]=o;o=f;k[o>>2]=d;k[o+4>>2]=c;o=d;if(j>>>0>>0){h=g;n=k[h+4>>2]|0;q=f;k[q>>2]=k[h>>2];k[q+4>>2]=n;n=g;k[n>>2]=d;k[n+4>>2]=c;p=o}else p=j}else if(i){o=f;c=k[o>>2]|0;n=k[o+4>>2]|0;o=g;d=k[o>>2]|0;q=k[o+4>>2]|0;o=f;k[o>>2]=d;k[o+4>>2]=q;o=g;k[o>>2]=c;k[o+4>>2]=n;n=c;if(d>>>0>>0){c=a;o=k[c>>2]|0;h=k[c+4>>2]|0;c=a;k[c>>2]=d;k[c+4>>2]=q;q=f;k[q>>2]=o;k[q+4>>2]=h;p=n}else p=n}else p=j;while(0);j=a+24|0;a:do if((j|0)==(b|0)){r=1;s=0}else{f=p;l=0;i=j;m=g;while(1){n=k[i>>2]|0;h=n;if(n>>>0>>0){q=k[i+4>>2]|0;o=i;c=m;while(1){d=c;t=k[d+4>>2]|0;u=o;k[u>>2]=k[d>>2];k[u+4>>2]=t;if((c|0)==(a|0)){v=a;break}t=c+-8|0;if(n>>>0<(k[t>>2]|0)>>>0){u=c;c=t;o=u}else{v=c;break}}k[v>>2]=h;k[v+4>>2]=q;c=l+1|0;if((c|0)==8){r=0;s=(i+8|0)==(b|0);break a}else w=c}else w=l;c=i+8|0;if((c|0)==(b|0)){r=1;s=0;break a}o=i;f=k[i>>2]|0;l=w;i=c;m=o}}while(0);e=s|r;return e|0}}return 0}function XA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;e=a+4|0;f=k[b>>2]|0;b=f;a:do if((f|0)!=(e|0)){g=k[d+32>>2]|0;h=k[f+48>>2]|0;i=(g|0)==(h|0);b:do if(i){j=f+16|0;l=g;while(1){l=l+-1|0;if((l|0)<=-1)break;m=k[d+(l<<2)>>2]|0;n=k[j+(l<<2)>>2]|0;if((m|0)!=(n|0)){o=m;p=n;q=7;break}}if((q|0)==7?o>>>0<=p>>>0:0)break a;if(i){l=f+16|0;j=g;while(1){j=j+-1|0;if((j|0)<=-1){q=78;break b}n=k[l+(j<<2)>>2]|0;m=k[d+(j<<2)>>2]|0;if((n|0)!=(m|0)){r=n;s=m;break}}if(r>>>0>s>>>0)q=78}else q=41}else if(g>>>0>h>>>0)q=41;else break a;while(0);if((q|0)==41?h>>>0>g>>>0:0)q=78;if((q|0)==78){k[c>>2]=b;t=c;return t|0}i=f+4|0;j=k[i>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){u=n;break}else m=n}}else{m=j;while(1){h=k[m>>2]|0;if(!h){u=m;break}else m=h}}c:do if((u|0)!=(e|0)){m=k[u+48>>2]|0;d:do if((g|0)==(m|0)){j=u+16|0;h=g;while(1){h=h+-1|0;if((h|0)<=-1)break d;n=k[d+(h<<2)>>2]|0;v=k[j+(h<<2)>>2]|0;if((n|0)!=(v|0)){w=n;x=v;break}}if(w>>>0<=x>>>0)break c}else if(g>>>0<=m>>>0)break c;while(0);m=k[e>>2]|0;if(!m){k[c>>2]=e;t=e;return t|0}h=m;e:while(1){m=k[h+48>>2]|0;do if((g|0)==(m|0)){j=h+16|0;v=g;while(1){v=v+-1|0;if((v|0)<=-1){y=g;break}n=k[d+(v<<2)>>2]|0;z=k[j+(v<<2)>>2]|0;if((n|0)!=(z|0)){A=n;B=z;q=66;break}}if((q|0)==66){q=0;if(A>>>0>B>>>0)y=g;else{q=67;break}}while(1){y=y+-1|0;if((y|0)<=-1){C=h;q=76;break e}v=k[j+(y<<2)>>2]|0;z=k[d+(y<<2)>>2]|0;if((v|0)!=(z|0)){D=v;E=z;break}}if(D>>>0>E>>>0){C=h;q=76;break e}else q=73}else if(g>>>0>m>>>0)if(m>>>0>g>>>0){C=h;q=76;break e}else q=73;else q=67;while(0);if((q|0)==67){q=0;m=k[h>>2]|0;if(!m){F=h;G=h;q=68;break}else H=m}else if((q|0)==73){q=0;m=h+4|0;j=k[m>>2]|0;if(!j){I=m;J=h;q=75;break}else H=j}h=H}if((q|0)==68){k[c>>2]=G;t=F;return t|0}else if((q|0)==75){k[c>>2]=J;t=I;return t|0}else if((q|0)==76){k[c>>2]=C;t=c;return t|0}}while(0);if(l){k[c>>2]=f;t=i;return t|0}else{k[c>>2]=u;t=u;return t|0}}while(0);f:do if((f|0)!=(k[a>>2]|0)){u=k[f>>2]|0;if(!u){C=f;while(1){I=k[C+8>>2]|0;if((k[I>>2]|0)==(C|0))C=I;else{K=I;break}}}else{C=u;while(1){i=k[C+4>>2]|0;if(!i){K=C;break}else C=i}}C=K;u=k[K+48>>2]|0;i=k[d+32>>2]|0;g:do if((u|0)==(i|0)){l=K+16|0;I=u;while(1){I=I+-1|0;if((I|0)<=-1)break g;J=k[l+(I<<2)>>2]|0;F=k[d+(I<<2)>>2]|0;if((J|0)!=(F|0)){L=J;M=F;break}}if(L>>>0<=M>>>0){N=C;break f}}else if(u>>>0<=i>>>0){N=C;break f}while(0);C=k[e>>2]|0;if(!C){k[c>>2]=e;t=e;return t|0}u=C;h:while(1){C=k[u+48>>2]|0;do if((i|0)==(C|0)){I=u+16|0;l=i;while(1){l=l+-1|0;if((l|0)<=-1){O=i;break}F=k[d+(l<<2)>>2]|0;J=k[I+(l<<2)>>2]|0;if((F|0)!=(J|0)){P=F;Q=J;q=28;break}}if((q|0)==28){q=0;if(P>>>0>Q>>>0)O=i;else{q=29;break}}while(1){O=O+-1|0;if((O|0)<=-1){R=u;q=38;break h}l=k[I+(O<<2)>>2]|0;J=k[d+(O<<2)>>2]|0;if((l|0)!=(J|0)){S=l;T=J;break}}if(S>>>0>T>>>0){R=u;q=38;break h}else q=35}else if(i>>>0>C>>>0)if(C>>>0>i>>>0){R=u;q=38;break h}else q=35;else q=29;while(0);if((q|0)==29){q=0;C=k[u>>2]|0;if(!C){U=u;V=u;q=30;break}else W=C}else if((q|0)==35){q=0;C=u+4|0;I=k[C>>2]|0;if(!I){X=C;Y=u;q=37;break}else W=I}u=W}if((q|0)==30){k[c>>2]=V;t=U;return t|0}else if((q|0)==37){k[c>>2]=Y;t=X;return t|0}else if((q|0)==38){k[c>>2]=R;t=c;return t|0}}else N=b;while(0);if(!(k[f>>2]|0)){k[c>>2]=f;t=f;return t|0}else{f=N;k[c>>2]=f;t=f+4|0;return t|0}return 0}function YA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,(g|0)>=(h|0)):0){if((h|0)>=(g|0)){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?(g|0)>=(k[o+16>>2]|0):0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if((g|0)<(m|0)){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if((m|0)>=(g|0)){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>=(o|0)){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if((o|0)<(d|0)){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if((d|0)>=(o|0)){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function ZA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,g>>>0>=h>>>0):0){if(h>>>0>=g>>>0){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?g>>>0>=(k[o+16>>2]|0)>>>0:0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if(g>>>0>>0){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if(m>>>0>=g>>>0){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>>>0>=o>>>0){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if(o>>>0>>0){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if(d>>>0>=o>>>0){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function _A(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(32)|0;i=h+16|0;x=0;xa(687,i|0,c|0);j=x;x=0;if(j&1){j=Hc()|0;OBa(h);Sc(j|0)}k[h+28>>2]=k[c+12>>2];k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=$A(a,e,f,i)|0;i=k[g>>2]|0;if(!i){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)l=h;else{k[a>>2]=e;l=k[g>>2]|0}ui(k[a+4>>2]|0,l);l=a+8|0;k[l>>2]=(k[l>>2]|0)+1;m=h;r=d;return m|0}if((i|0)==(h|0)){m=i;r=d;return m|0}l=k[h+16>>2]|0;a=l;if(l){g=h+20|0;e=k[g>>2]|0;if((e|0)!=(l|0))k[g>>2]=e+(~((e+-4-a|0)>>>2)<<2);OBa(l)}OBa(h);m=i;r=d;return m|0}function $A(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=a+4|0;f=k[b>>2]|0;b=f;a:do if((f|0)!=(e|0)){g=k[d+4>>2]|0;h=k[f+16>>2]|0;i=k[f+20>>2]|0;j=k[d>>2]|0;b:do if((h|0)!=(i|0)){l=j;m=h;while(1){if((l|0)==(g|0))break a;n=k[l>>2]|0;o=k[m>>2]|0;if(n>>>0>>0)break a;if(o>>>0>>0)break b;m=m+4|0;if((m|0)==(i|0))break;else l=l+4|0}}while(0);c:do if((j|0)!=(g|0)){l=h;m=j;while(1){if((l|0)==(i|0))break;n=k[l>>2]|0;o=k[m>>2]|0;if(n>>>0>>0)break;if(o>>>0>>0)break c;m=m+4|0;if((m|0)==(g|0))break c;else l=l+4|0}l=f+4|0;m=k[l>>2]|0;n=(m|0)==0;if(n){o=f;while(1){p=k[o+8>>2]|0;if((k[p>>2]|0)==(o|0)){q=p;break}else o=p}}else{o=m;while(1){p=k[o>>2]|0;if(!p){q=o;break}else o=p}}d:do if((q|0)!=(e|0)){o=k[q+16>>2]|0;m=k[q+20>>2]|0;e:do if((o|0)!=(m|0)){p=j;r=o;while(1){if((p|0)==(g|0))break d;s=k[p>>2]|0;t=k[r>>2]|0;if(s>>>0>>0)break d;if(t>>>0>>0)break e;r=r+4|0;if((r|0)==(m|0))break;else p=p+4|0}}while(0);u=aB(a,c,d)|0;return u|0}while(0);if(n){k[c>>2]=f;u=l;return u|0}else{k[c>>2]=q;u=q;return u|0}}while(0);k[c>>2]=b;u=c;return u|0}while(0);f:do if((f|0)==(k[a>>2]|0))v=b;else{q=k[f>>2]|0;if(!q){e=f;while(1){g=k[e+8>>2]|0;if((k[g>>2]|0)==(e|0))e=g;else{w=g;break}}}else{e=q;while(1){g=k[e+4>>2]|0;if(!g){w=e;break}else e=g}}e=w;q=k[w+20>>2]|0;g=k[d>>2]|0;j=k[d+4>>2]|0;g:do if((g|0)!=(j|0)){i=k[w+16>>2]|0;h=g;while(1){if((i|0)==(q|0)){v=e;break f}m=k[i>>2]|0;o=k[h>>2]|0;if(m>>>0>>0){v=e;break f}if(o>>>0>>0)break g;h=h+4|0;if((h|0)==(j|0))break;else i=i+4|0}}while(0);u=aB(a,c,d)|0;return u|0}while(0);if(!(k[f>>2]|0)){k[c>>2]=f;u=f;return u|0}else{f=v;k[c>>2]=f;u=f+4|0;return u|0}return 0}function aB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=k[c+4>>2]|0;f=k[c>>2]|0;a:do if((f|0)==(d|0)){c=k[a+16>>2]|0;g=k[a+20>>2]|0;if((c|0)==(g|0)){h=a;i=25}else{j=g;g=c;c=a;while(1){l=d;m=g;while(1){if((l|0)==(d|0))break;n=k[l>>2]|0;o=k[m>>2]|0;if(n>>>0>>0)break;if(o>>>0>>0){h=c;i=25;break a}m=m+4|0;if((m|0)==(j|0)){h=c;i=25;break a}else l=l+4|0}l=k[c>>2]|0;if(!l){p=c;q=c;i=17;break a}g=k[l+16>>2]|0;j=k[l+20>>2]|0;if((g|0)==(j|0)){h=l;i=25;break}else c=l}}}else{c=a;while(1){j=k[c+16>>2]|0;g=k[c+20>>2]|0;b:do if((j|0)!=(g|0)){l=f;m=j;while(1){if((l|0)==(d|0))break;n=k[l>>2]|0;o=k[m>>2]|0;if(n>>>0>>0)break;if(o>>>0>>0){r=j;s=f;i=18;break b}m=m+4|0;if((m|0)==(g|0)){r=j;s=f;i=18;break b}else l=l+4|0}l=k[c>>2]|0;if(!l){p=c;q=c;i=17;break a}else t=l}else{r=j;s=f;i=18}while(0);if((i|0)==18){while(1){i=0;if((r|0)==(g|0))break;j=k[r>>2]|0;l=k[s>>2]|0;if(j>>>0>>0)break;if(l>>>0>>0){h=c;i=25;break a}s=s+4|0;if((s|0)==(d|0)){h=c;i=25;break a}else{r=r+4|0;i=18}}g=c+4|0;j=k[g>>2]|0;if(!j){u=g;v=c;break}else t=j}c=t}k[b>>2]=v;e=u;return e|0}while(0);if((i|0)==17){k[b>>2]=q;e=p;return e|0}else if((i|0)==25){k[b>>2]=h;e=b;return e|0}return 0}function bB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+32|0;c=b;switch(k[a>>2]|0){case 1:{d=a+8|0;a=k[d>>2]|0;if((a&240|0)!=144?(e=a&255,!(e<<24>>24<0&(e&255)<144)):0)if((e+-88&255)<3)f=1;else{PQ(c,e);switch((k[d>>2]&255)<<24>>24){case 82:case 85:{g=0;break}default:g=(i[c+24>>0]|0)!=0?1:(k[c+16>>2]|0)>2}K2a(c);f=g}else f=0;break}case 9:case 7:case 6:case 5:case 4:case 3:case 2:case 10:{f=0;break}default:f=1}r=b;return f|0}function cB(a){a=a|0;if((k[a>>2]|0)==1)return (k[a+8>>2]&240|0)==144|0;else return 0;return 0}function dB(a){a=a|0;var b=0;if((k[a>>2]|0)==1){b=k[a+8>>2]&255;return b<<24>>24<0&(b&255)<144|0}else return 0;return 0}function eB(a){a=a|0;var b=0;if((k[a>>2]|0)!=1)return 0;b=(k[a+8>>2]&255)+-1<<24>>24;if((b&255)<24)return (15204355>>>(b&255)&1|0)!=0|0;else return 0;return 0}function fB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+160|0;c=b+80|0;d=b;k[c>>2]=1;e=c+8|0;k[e>>2]=86;k[c+40>>2]=1;f=c+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=c+56|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;f=(k[a>>2]|0)==1;a:do if((f?(k[a+40>>2]|0)==1:0)?(c=a+8|0,(k[c>>2]|0)==86):0){g=c;h=e;while(1){h=h+4|0;if((g|0)==(c|0)){i=1;break}g=g+4|0;if((k[g>>2]|0)!=(k[h>>2]|0))break a}r=b;return i|0}while(0);k[d>>2]=1;e=d+8|0;k[e>>2]=87;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;if(!f){i=0;r=b;return i|0}if((k[a+40>>2]|0)!=1){i=0;r=b;return i|0}f=a+8|0;if((k[f>>2]|0)==87){j=f;l=e}else{i=0;r=b;return i|0}while(1){l=l+4|0;if((j|0)==(f|0)){i=1;m=11;break}j=j+4|0;if((k[j>>2]|0)!=(k[l>>2]|0)){i=0;m=11;break}}if((m|0)==11){r=b;return i|0}return 0}function gB(a){a=a|0;var b=0;a:do if((k[a>>2]|0)==1){switch((k[a+8>>2]&255)<<24>>24){case 0:case -1:case -13:case 87:case 86:{b=1;break a;break}default:{}}b=0}else b=0;while(0);return b|0}function hB(a){a=a|0;var b=0;a:do if((k[a>>2]|0)==1){switch((k[a+8>>2]&255)<<24>>24){case 59:case 49:case 89:case 88:case 90:case -16:case -12:case -14:case -15:{b=0;break a;break}default:{}}b=1}else b=1;while(0);return b|0}function iB(a){a=a|0;var b=0;switch(a<<24>>24){case -12:case -14:case -15:case 83:case 82:case 60:case 57:case 55:{b=1;break}default:b=0}return b|0}function jB(a){a=a|0;var b=0;switch(a<<24>>24){case 85:case -16:case -12:case -14:case -15:{b=1;break}default:b=0}return b|0}function kB(){k[6556]=0;k[6557]=0;k[6558]=0;return}function lB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0;e=r;r=r+256|0;f=e+232|0;g=e+48|0;h=e+220|0;l=e+200|0;m=e+32|0;n=e+168|0;o=e+16|0;p=e+136|0;q=e;k[f+4>>2]=0;k[f+8>>2]=0;s=f+4|0;k[f>>2]=s;t=k[d>>2]|0;u=k[d+4>>2]|0;if((t|0)==(u|0)){v=0;w=k[s>>2]|0;yB(f,w);r=e;return v|0}else y=t;do{if((k[y>>2]|0)==2){x=0;t=Ta(528,f|0,y|0)|0;z=x;x=0;if(z&1){A=7;break}k[t>>2]=(k[t>>2]|0)+1}y=y+80|0}while((y|0)!=(u|0));if((A|0)==7){u=Hc()|0;B=u;C=M;D=k[s>>2]|0;yB(f,D);Sc(B|0)}u=k[f>>2]|0;if((u|0)==(s|0)){v=0;w=k[s>>2]|0;yB(f,w);r=e;return v|0}y=g+8|0;t=g+48|0;z=g+56|0;E=g+60|0;F=g+64|0;G=g+68|0;H=g+72|0;I=g+80|0;J=g+40|0;K=h+8|0;L=a&1;a=h+4|0;N=l+4|0;O=l+16|0;P=p+20|0;Q=o+12|0;R=m+12|0;S=q+12|0;T=o+8|0;U=q+8|0;V=o+13|0;W=o+4|0;X=q+13|0;Y=q+4|0;Z=p+20|0;_=n+20|0;$=m+13|0;aa=m+4|0;ba=n+24|0;ca=p+24|0;da=m+8|0;ea=u;u=0;a:while(1){k[g>>2]=k[ea+16>>2];fa=y;ga=ea+24|0;ha=fa+40|0;do{k[fa>>2]=k[ga>>2];fa=fa+4|0;ga=ga+4|0}while((fa|0)<(ha|0));ga=ea+64|0;fa=k[ga+4>>2]|0;ha=t;k[ha>>2]=k[ga>>2];k[ha+4>>2]=fa;k[z>>2]=k[ea+72>>2];fa=k[ea+76>>2]|0;k[E>>2]=fa;if(fa)h0a(fa);k[F>>2]=k[ea+80>>2];k[G>>2]=k[ea+84>>2];fa=k[ea+88>>2]|0;k[H>>2]=fa;if(fa)h0a(fa);fa=k[ea+96>>2]|0;k[I>>2]=fa;if((k[J>>2]|0)>>>0<2&(k[y>>2]|0)>>>0<256)ia=u;else{k[K>>2]=fa;i[h>>0]=L;k[a>>2]=b;k[N>>2]=k[h>>2];k[N+4>>2]=k[h+4>>2];k[N+8>>2]=k[h+8>>2];k[O>>2]=y;k[l>>2]=26260;x=0;xa(54,m|0,l|0);fa=x;x=0;if(fa&1){A=15;break}x=0;fb(191,n|0,h|0,y|0);fa=x;x=0;if(fa&1){A=41;break}x=0;xa(53,o|0,n|0);fa=x;x=0;if(fa&1){A=42;break}x=0;fb(192,p|0,h|0,y|0);fa=x;x=0;if(fa&1){A=43;break}x=0;fb(193,q|0,p|0,P|0);fa=x;x=0;if(fa&1){A=44;break}fa=j[Q>>1]|0;ha=(fa&255)<<24>>24!=0;ga=j[R>>1]|0;ja=(ga&255)<<24>>24!=0;ka=(fa&65535)>>>8&255;fa=(ga&65535)>>>8&255;if(ha^ja)if(ha)A=30;else A=47;else{ga=k[T>>2]|0;la=k[da>>2]|0;b:do if((ga|0)==(la|0)){ma=ka<<24>>24==0?k[W>>2]|0:o;na=fa<<24>>24==0?k[aa>>2]|0:m;oa=ga;while(1){oa=oa+-1|0;if((oa|0)<=-1){pa=0;break b}qa=k[ma+(oa<<2)>>2]|0;ra=k[na+(oa<<2)>>2]|0;if((qa|0)!=(ra|0)){sa=qa;ta=ra;break}}pa=sa>>>0>ta>>>0?1:-1}else pa=ga>>>0>la>>>0?1:-1;while(0);if(((ha?0-pa|0:pa)|0)<0)A=30;else A=47}do if((A|0)==30){A=0;la=j[S>>1]|0;if(ha^(la&255)<<24>>24!=0){if(!ha){A=47;break}}else{ga=k[T>>2]|0;oa=k[U>>2]|0;c:do if((ga|0)==(oa|0)){na=ka<<24>>24==0?k[W>>2]|0:o;ma=(la&65535)<256?k[Y>>2]|0:q;ra=ga;while(1){ra=ra+-1|0;if((ra|0)<=-1){ua=0;break c}qa=k[na+(ra<<2)>>2]|0;va=k[ma+(ra<<2)>>2]|0;if((qa|0)!=(va|0)){wa=qa;ya=va;break}}ua=wa>>>0>ya>>>0?1:-1}else ua=ga>>>0>oa>>>0?1:-1;while(0);if(((ha?0-ua|0:ua)|0)>=0){A=47;break}}x=0;fb(61,n|0,c|0,d|0);oa=x;x=0;if(oa&1){A=45;break a}za=u+1|0}while(0);do if((A|0)==47){A=0;oa=j[S>>1]|0;ga=(oa&255)<<24>>24!=0;la=(oa&65535)>>>8&255;if(ga^ja){if(!ga){za=u;break}}else{oa=k[U>>2]|0;ra=k[da>>2]|0;d:do if((oa|0)==(ra|0)){ma=la<<24>>24==0?k[Y>>2]|0:q;na=fa<<24>>24==0?k[aa>>2]|0:m;va=oa;while(1){va=va+-1|0;if((va|0)<=-1){Aa=0;break d}qa=k[ma+(va<<2)>>2]|0;Ba=k[na+(va<<2)>>2]|0;if((qa|0)!=(Ba|0)){Ca=qa;Da=Ba;break}}Aa=Ca>>>0>Da>>>0?1:-1}else Aa=oa>>>0>ra>>>0?1:-1;while(0);if(((ga?0-Aa|0:Aa)|0)>=0){za=u;break}}if(ga^ha){if(!ga){za=u;break}}else{ra=k[U>>2]|0;oa=k[T>>2]|0;e:do if((ra|0)==(oa|0)){va=la<<24>>24==0?k[Y>>2]|0:q;na=ka<<24>>24==0?k[W>>2]|0:o;ma=ra;while(1){ma=ma+-1|0;if((ma|0)<=-1){Ea=0;break e}Ba=k[va+(ma<<2)>>2]|0;qa=k[na+(ma<<2)>>2]|0;if((Ba|0)!=(qa|0)){Fa=Ba;Ga=qa;break}}Ea=Fa>>>0>Ga>>>0?1:-1}else Ea=ra>>>0>oa>>>0?1:-1;while(0);if(((ga?0-Ea|0:Ea)|0)>=0){za=u;break}}x=0;fb(194,p|0,d|0,P|0);oa=x;x=0;if(oa&1){A=45;break a}za=u+1|0}while(0);if(!(i[X>>0]|0))OBa(k[Y>>2]|0);k[p>>2]=26276;ka=k[Z>>2]|0;if(ka){ha=k[ca>>2]|0;if((ha|0)==(ka|0))Ha=ka;else{fa=ha;do{k[ca>>2]=fa+-80;ha=k[fa+-8>>2]|0;if(ha)j0a(ha);ha=k[fa+-20>>2]|0;if(ha)j0a(ha);fa=k[ca>>2]|0}while((fa|0)!=(ka|0));Ha=k[Z>>2]|0}OBa(Ha)}if(!(i[V>>0]|0))OBa(k[W>>2]|0);k[n>>2]=26244;ka=k[_>>2]|0;if(ka){fa=k[ba>>2]|0;if((fa|0)==(ka|0))Ia=ka;else{ha=fa;do{k[ba>>2]=ha+-80;fa=k[ha+-8>>2]|0;if(fa)j0a(fa);fa=k[ha+-20>>2]|0;if(fa)j0a(fa);ha=k[ba>>2]|0}while((ha|0)!=(ka|0));Ia=k[_>>2]|0}OBa(Ia)}if(!(i[$>>0]|0))OBa(k[aa>>2]|0);ia=za}ka=k[H>>2]|0;if(ka)j0a(ka);ka=k[E>>2]|0;if(ka)j0a(ka);ka=k[ea+4>>2]|0;if(!ka){ha=ea;while(1){fa=k[ha+8>>2]|0;if((k[fa>>2]|0)==(ha|0)){Ja=fa;break}else ha=fa}}else{ha=ka;while(1){fa=k[ha>>2]|0;if(!fa){Ja=ha;break}else ha=fa}}if((Ja|0)==(s|0)){v=ia;A=9;break}else{ea=Ja;u=ia}}if((A|0)==9){w=k[s>>2]|0;yB(f,w);r=e;return v|0}else if((A|0)==15){v=Hc()|0;Ka=v;La=M}else if((A|0)==41){v=Hc()|0;Ma=v;Na=M;A=121}else if((A|0)==42){v=Hc()|0;Oa=v;Pa=M;A=112}else if((A|0)==43){v=Hc()|0;Qa=v;Ra=M;A=110}else if((A|0)==44){v=Hc()|0;Sa=v;Ua=M;A=101}else if((A|0)==45){v=Hc()|0;e=M;if(!(i[X>>0]|0)){OBa(k[Y>>2]|0);Sa=v;Ua=e;A=101}else{Sa=v;Ua=e;A=101}}if((A|0)==101){k[p>>2]=26276;p=k[Z>>2]|0;if(!p){Qa=Sa;Ra=Ua;A=110}else{e=k[ca>>2]|0;if((e|0)==(p|0))Va=p;else{v=e;do{k[ca>>2]=v+-80;e=k[v+-8>>2]|0;if(e)j0a(e);e=k[v+-20>>2]|0;if(e)j0a(e);v=k[ca>>2]|0}while((v|0)!=(p|0));Va=k[Z>>2]|0}OBa(Va);Qa=Sa;Ra=Ua;A=110}}if((A|0)==110)if(!(i[V>>0]|0)){OBa(k[W>>2]|0);Oa=Qa;Pa=Ra;A=112}else{Oa=Qa;Pa=Ra;A=112}if((A|0)==112){k[n>>2]=26244;n=k[_>>2]|0;if(!n){Ma=Oa;Na=Pa;A=121}else{Ra=k[ba>>2]|0;if((Ra|0)==(n|0))Wa=n;else{Qa=Ra;do{k[ba>>2]=Qa+-80;Ra=k[Qa+-8>>2]|0;if(Ra)j0a(Ra);Ra=k[Qa+-20>>2]|0;if(Ra)j0a(Ra);Qa=k[ba>>2]|0}while((Qa|0)!=(n|0));Wa=k[_>>2]|0}OBa(Wa);Ma=Oa;Na=Pa;A=121}}if((A|0)==121)if(!(i[$>>0]|0)){OBa(k[aa>>2]|0);Ka=Ma;La=Na}else{Ka=Ma;La=Na}Na=k[H>>2]|0;if(Na)j0a(Na);Na=k[E>>2]|0;if(!Na){B=Ka;C=La;D=k[s>>2]|0;yB(f,D);Sc(B|0)}j0a(Na);B=Ka;C=La;D=k[s>>2]|0;yB(f,D);Sc(B|0);return 0}function mB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+240|0;d=c+232|0;e=c+212|0;f=c+208|0;g=c+196|0;h=c+144|0;j=c+128|0;l=c+184|0;m=c+48|0;n=c+32|0;o=c+16|0;p=c;k[m>>2]=1;k[m+8>>2]=96;k[m+40>>2]=1;q=m+48|0;k[q>>2]=-1;k[q+4>>2]=-1;q=m+56|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;k[l>>2]=0;q=l+4|0;k[q>>2]=0;k[l+8>>2]=0;x=0;s=Ba(563,80)|0;t=x;x=0;if(t&1){t=Hc()|0;u=M;v=t;Sc(v|0)}k[l>>2]=s;k[l+8>>2]=s+80;k[s>>2]=1;t=s+8|0;w=m+8|0;m=t+40|0;do{k[t>>2]=k[w>>2];t=t+4|0;w=w+4|0}while((t|0)<(m|0));y=s+48|0;k[y>>2]=-1;k[y+4>>2]=-1;k[s+56>>2]=0;k[s+60>>2]=0;k[s+64>>2]=0;k[s+68>>2]=0;k[s+72>>2]=0;k[q>>2]=s+80;x=0;xa(688,j|0,l|0);l=x;x=0;if(!(l&1)){l=i[b+4>>0]|0;t=h;w=k[b+16>>2]|0;m=t+40|0;do{k[t>>2]=k[w>>2];t=t+4|0;w=w+4|0}while((t|0)<(m|0));x=0;fb(195,g|0,h|0,1);h=x;x=0;do if(!(h&1)){x=0;fb(196,o|0,b|0,g|0);w=x;x=0;if(w&1){w=Hc()|0;t=M;m=k[g>>2]|0;if(!m){z=t;A=w;B=37;break}y=g+4|0;if((k[y>>2]|0)!=(m|0))k[y>>2]=m;OBa(m);z=t;A=w;B=37;break}w=k[g>>2]|0;if(w){t=g+4|0;if((k[t>>2]|0)!=(w|0))k[t>>2]=w;OBa(w)}k[n>>2]=0;k[n+8>>2]=1;i[n+12>>0]=0;w=n+13|0;i[w>>0]=1;k[f>>2]=l<<24>>24!=0?68:200;x=0;if(!(i[o+12>>0]|0)){CB(n,o,f);t=x;x=0;if(t&1)B=16;else B=18}else{BB(n,o,f);t=x;x=0;if(t&1)B=16;else B=18}do if((B|0)==16){t=Hc()|0;m=M;if(!(i[w>>0]|0))OBa(k[n+4>>2]|0);C=m;D=t}else if((B|0)==18){k[p>>2]=0;k[p+8>>2]=1;i[p+12>>0]=0;t=p+13|0;i[t>>0]=1;k[e>>2]=b+8;k[e+4>>2]=j;k[e+8>>2]=b+12;k[e+12>>2]=n;k[e+16>>2]=p;k[a>>2]=0;k[a+8>>2]=1;i[a+12>>0]=0;m=a+13|0;i[m>>0]=1;x=0;fb(197,a|0,e|0,d|0);y=x;x=0;if(y&1){y=Hc()|0;E=M;if(!(i[m>>0]|0))OBa(k[a+4>>2]|0);if(!(i[t>>0]|0))OBa(k[p+4>>2]|0);if(i[w>>0]|0){C=E;D=y;break}OBa(k[n+4>>2]|0);C=E;D=y;break}if(!(i[t>>0]|0))OBa(k[p+4>>2]|0);if(!(i[w>>0]|0))OBa(k[n+4>>2]|0);if(!(i[o+13>>0]|0))OBa(k[o+4>>2]|0);if(!(i[j+13>>0]|0))OBa(k[j+4>>2]|0);t=k[s+72>>2]|0;if(t)j0a(t);t=k[s+60>>2]|0;if(!t){OBa(s);r=c;return}j0a(t);OBa(s);r=c;return}while(0);if(!(i[o+13>>0]|0)){OBa(k[o+4>>2]|0);F=C;G=D}else{F=C;G=D}}else{w=Hc()|0;z=M;A=w;B=37}while(0);if((B|0)==37){F=z;G=A}if(!(i[j+13>>0]|0)){OBa(k[j+4>>2]|0);H=F;I=G}else{H=F;I=G}}else{G=Hc()|0;H=M;I=G}G=k[s+72>>2]|0;if(G)j0a(G);G=k[s+60>>2]|0;if(G)j0a(G);k[q>>2]=s;OBa(s);u=H;v=I;Sc(v|0)}function nB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+144|0;d=c+140|0;e=c+120|0;f=c+116|0;g=c+88|0;h=c+72|0;j=c+56|0;l=c+40|0;m=c+104|0;n=c;o=b+20|0;pB(h,o);k[g>>2]=0;k[g+8>>2]=1;i[g+12>>0]=0;p=g+13|0;i[p>>0]=1;k[f>>2]=3;x=0;if(!(i[h+12>>0]|0)){CB(g,h,f);q=x;x=0;if(q&1)s=4;else s=6}else{BB(g,h,f);f=x;x=0;if(f&1)s=4;else s=6}if((s|0)==4){f=Hc()|0;q=M;if(!(i[p>>0]|0))OBa(k[g+4>>2]|0);t=q;u=f}else if((s|0)==6){f=k[o>>2]|0;o=k[b+24>>2]|0;a:do if((f|0)==(o|0)){v=0;s=9}else{q=f;w=0;while(1){x=0;y=Ta(529,q|0,3)|0;z=x;x=0;if(z&1)break;z=y+w|0;q=q+80|0;if((q|0)==(o|0)){v=z;s=9;break a}else w=z}w=Hc()|0;A=M;B=w}while(0);if((s|0)==9){s=ia((i[b+4>>0]|0)!=0?68:200,v)|0;k[j>>2]=s;k[j+8>>2]=1;i[j+12>>0]=0;s=j+13|0;i[s>>0]=1;v=n;o=k[b+16>>2]|0;f=v+40|0;do{k[v>>2]=k[o>>2];v=v+4|0;o=o+4|0}while((v|0)<(f|0));x=0;xa(689,m|0,n|0);n=x;x=0;if(!(n&1)){x=0;fb(196,l|0,b|0,m|0);n=x;x=0;do if(n&1){o=Hc()|0;C=M;D=o}else{k[e>>2]=b+8;k[e+4>>2]=g;k[e+8>>2]=b+12;k[e+12>>2]=j;k[e+16>>2]=l;k[a>>2]=0;k[a+8>>2]=1;i[a+12>>0]=0;o=a+13|0;i[o>>0]=1;x=0;fb(197,a|0,e|0,d|0);v=x;x=0;if(v&1){v=Hc()|0;f=M;if(!(i[o>>0]|0))OBa(k[a+4>>2]|0);if(i[l+13>>0]|0){C=f;D=v;break}OBa(k[l+4>>2]|0);C=f;D=v;break}if(!(i[l+13>>0]|0))OBa(k[l+4>>2]|0);v=k[m>>2]|0;if(v){f=m+4|0;if((k[f>>2]|0)!=(v|0))k[f>>2]=v;OBa(v)}if(!(i[s>>0]|0))OBa(k[j+4>>2]|0);if(!(i[p>>0]|0))OBa(k[g+4>>2]|0);if(i[h+13>>0]|0){r=c;return}OBa(k[h+4>>2]|0);r=c;return}while(0);c=k[m>>2]|0;if(!c){E=C;F=D}else{l=m+4|0;if((k[l>>2]|0)!=(c|0))k[l>>2]=c;OBa(c);E=C;F=D}}else{D=Hc()|0;E=M;F=D}if(!(i[s>>0]|0)){OBa(k[j+4>>2]|0);A=E;B=F}else{A=E;B=F}}if(!(i[p>>0]|0)){OBa(k[g+4>>2]|0);t=A;u=B}else{t=A;u=B}}if(i[h+13>>0]|0)Sc(u|0);OBa(k[h+4>>2]|0);Sc(u|0)}function oB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+144|0;e=d+120|0;f=d+80|0;g=d;h=f;i=k[a+16>>2]|0;j=h+40|0;do{k[h>>2]=k[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));EB(e,f);f=a+20|0;l=k[f>>2]|0;x=0;fb(198,g|0,b|0,e|0);b=x;x=0;if(!(b&1)){k[l+320>>2]=k[g>>2];h=l+328|0;i=g+8|0;j=h+36|0;do{k[h>>2]=k[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));k[l+368>>2]=k[g+48>>2];k[l+372>>2]=k[g+52>>2];i=g+56|0;h=k[i>>2]|0;j=g+60|0;b=k[j>>2]|0;k[i>>2]=0;k[j>>2]=0;k[l+376>>2]=h;h=l+380|0;j=k[h>>2]|0;k[h>>2]=b;if(j)j0a(j);k[l+384>>2]=k[g+64>>2];j=g+68|0;b=k[j>>2]|0;h=g+72|0;g=k[h>>2]|0;k[j>>2]=0;k[h>>2]=0;k[l+388>>2]=b;b=l+392|0;l=k[b>>2]|0;k[b>>2]=g;if(l)j0a(l);x=0;fb(194,a|0,c|0,f|0);f=x;x=0;if(!(f&1)){f=k[e>>2]|0;if(!f){r=d;return}c=e+4|0;if((k[c>>2]|0)!=(f|0))k[c>>2]=f;OBa(f);r=d;return}}d=Hc()|0;f=k[e>>2]|0;if(!f)Sc(d|0);c=e+4|0;if((k[c>>2]|0)!=(f|0))k[c>>2]=f;OBa(f);Sc(d|0)}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c+4|0;e=c;k[a>>2]=0;k[a+8>>2]=1;f=a+12|0;i[f>>0]=0;g=a+13|0;i[g>>0]=1;h=k[b>>2]|0;j=k[b+4>>2]|0;if((h|0)==(j|0)){r=c;return}b=h;a:while(1){switch(k[b>>2]|0){case 2:{x=0;h=Ba(585,96)|0;l=x;x=0;if(l&1)break a;k[d>>2]=h;x=0;if(!(i[f>>0]|0)){CB(a,a,d);h=x;x=0;if(h&1)break a}else{BB(a,a,d);h=x;x=0;if(h&1)break a}break}case 1:{x=0;h=Ba(585,k[b+8>>2]&255|0)|0;l=x;x=0;if(l&1)break a;k[e>>2]=h;x=0;if(!(i[f>>0]|0)){CB(a,a,e);h=x;x=0;if(h&1)break a}else{BB(a,a,e);h=x;x=0;if(h&1)break a}break}default:{}}b=b+80|0;if((b|0)==(j|0)){m=3;break}}if((m|0)==3){r=c;return}c=Hc()|0;if(i[g>>0]|0)Sc(c|0);OBa(k[a+4>>2]|0);Sc(c|0)}function qB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+48|0;e=d;if(!(i[b+4>>0]|0)){f=e;g=k[b+16>>2]|0;b=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(b|0));g=e+32|0;f=k[g>>2]|0;b=k[e>>2]|0;if((f|0)!=1|(b|0)!=0){h=f;f=b;b=0;while(1){j=b+1|0;do if(!h){k[g>>2]=1;k[e>>2]=0;l=1;m=0}else{n=h+-1|0;o=(((k[e+(n<<2)>>2]|0)>>>0<256)<<31>>31)+h|0;if(!o){k[g>>2]=1;k[e>>2]=0;l=1;m=0;break}p=f>>>8;k[e>>2]=p;if(h>>>0>1){q=1;s=p;t=e;u=0;while(1){k[t>>2]=k[e+(q<<2)>>2]<<24|s;v=u+1|0;t=e+(v<<2)|0;s=(k[t>>2]|0)>>>8;k[t>>2]=s;if((v|0)==(n|0))break;else{q=u+2|0;u=v}}w=k[e>>2]|0}else w=p;u=o>>>0>8?8:o;k[g>>2]=u;l=u;m=w}while(0);if((m|0)!=0|(l|0)!=1){h=l;f=m;b=j}else{y=j;break}}}else y=0;k[a>>2]=(y>>>0>1?y:1)*200;k[a+8>>2]=1;i[a+12>>0]=0;i[a+13>>0]=1;r=d;return}k[a>>2]=0;k[a+8>>2]=1;y=a+12|0;i[y>>0]=0;b=a+13|0;i[b>>0]=1;m=k[c>>2]|0;f=k[c+4>>2]|0;if((m|0)==(f|0)){r=d;return}c=m;m=0;while(1){k[e>>2]=(i[c>>0]|0)!=0?68:4;x=0;if(!(m<<24>>24)){CB(a,a,e);l=x;x=0;if(l&1)break}else{BB(a,a,e);l=x;x=0;if(l&1)break}l=c+1|0;if((l|0)==(f|0)){z=23;break}c=l;m=i[y>>0]|0}if((z|0)==23){r=d;return}d=Hc()|0;if(i[b>>0]|0)Sc(d|0);OBa(k[a+4>>2]|0);Sc(d|0)}function rB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=k[a>>2]|0;c=k[a+4>>2]|0;if((b|0)==(c|0)){d=0;return d|0}else{e=b;f=0}while(1){b=(WC(e,3)|0)+f|0;e=e+80|0;if((e|0)==(c|0)){d=b;break}else f=b}return d|0}function sB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=r;r=r+128|0;e=d+112|0;f=d+108|0;g=d+104|0;h=d+92|0;i=d;j=d+88|0;l=d+84|0;m=d+80|0;n=b+4|0;o=(k[n>>2]|0)!=(k[b>>2]|0);q2a(h,329672,0);x=0;pa(49,o|0,h|0,107,215268,215305);o=x;x=0;if(o&1){o=Hc()|0;K2a(h);Sc(o|0)}K2a(h);h=k[n>>2]|0;o=k[b>>2]|0;if((h|0)==(o|0)){r=d;return}p=a+16|0;a=i+8|0;q=i+48|0;s=i+56|0;t=i+40|0;u=c+4|0;v=o;o=h;h=0;while(1){w=v;y=v;z=k[p>>2]|0;k[i>>2]=2;A=a;B=z;z=A+40|0;do{k[A>>2]=k[B>>2];A=A+4|0;B=B+4|0}while((A|0)<(z|0));B=q;k[B>>2]=-1;k[B+4>>2]=-1;a:do if((k[y+(h*80|0)>>2]|0)==2?(B=k[y+(h*80|0)+40>>2]|0,(B|0)==(k[t>>2]|0)):0){A=y+(h*80|0)+8|0;z=A+(B<<2)|0;if((A|0)!=(z|0)){B=A;A=a;while(1){if((k[B>>2]|0)!=(k[A>>2]|0)){C=v;D=o;E=h;break a}B=B+4|0;if((B|0)==(z|0))break;else A=A+4|0}}A=w+(h*80|0)|0;z=k[c>>2]|0;k[A>>2]=k[z>>2];if((A|0)!=(z|0)){A=z+40|0;k[w+(h*80|0)+40>>2]=k[A>>2];Dyb(w+(h*80|0)+8|0,z+8|0,k[A>>2]<<2|0)|0}A=z+48|0;B=k[A+4>>2]|0;F=w+(h*80|0)+48|0;k[F>>2]=k[A>>2];k[F+4>>2]=B;B=k[z+56>>2]|0;F=k[z+60>>2]|0;if(F)h0a(F);k[w+(h*80|0)+56>>2]=B;B=w+(h*80|0)+60|0;A=k[B>>2]|0;k[B>>2]=F;if(A)j0a(A);k[w+(h*80|0)+64>>2]=k[z+64>>2];A=k[z+68>>2]|0;F=k[z+72>>2]|0;if(F)h0a(F);k[w+(h*80|0)+68>>2]=A;A=w+(h*80|0)+72|0;z=k[A>>2]|0;k[A>>2]=F;if(z)j0a(z);k[j>>2]=(k[b>>2]|0)+(h*80|0)+80;k[l>>2]=(k[c>>2]|0)+80;k[m>>2]=k[u>>2];k[g>>2]=k[j>>2];k[f>>2]=k[l>>2];k[e>>2]=k[m>>2];GB(b,g,f,e)|0;C=k[b>>2]|0;D=k[n>>2]|0;E=h+-1+(((k[u>>2]|0)-(k[c>>2]|0)|0)/80|0)|0}else{C=v;D=o;E=h}while(0);h=E+1|0;if(h>>>0>=((D-C|0)/80|0)>>>0)break;else{v=C;o=D}}k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;r=d;return}function tB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+1104|0;e=d+1040|0;f=d+1080|0;g=d+160|0;h=d+120|0;i=d+80|0;j=d+40|0;l=d;k[a>>2]=26292;m=a+4|0;k[m>>2]=k[b>>2];k[m+4>>2]=k[b+4>>2];k[m+8>>2]=k[b+8>>2];k[a+16>>2]=c;k[a>>2]=26244;c=a+20|0;k[c>>2]=0;b=a+24|0;k[b>>2]=0;k[a+28>>2]=0;k[h>>2]=0;k[h+32>>2]=1;k[g>>2]=2;m=g+8|0;n=h;h=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(h|0));o=g+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=g+56|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[g+80>>2]=1;k[g+88>>2]=128;k[g+120>>2]=1;o=g+128|0;k[o>>2]=-1;k[o+4>>2]=-1;o=g+136|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[g+160>>2]=1;k[g+168>>2]=81;k[g+200>>2]=1;o=g+208|0;k[o>>2]=-1;k[o+4>>2]=-1;o=g+216|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[i>>2]=32;k[i+32>>2]=1;k[g+240>>2]=2;m=g+248|0;n=i;h=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(h|0));i=g+288|0;k[i>>2]=-1;k[i+4>>2]=-1;i=g+296|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;k[l>>2]=1;k[l+32>>2]=1;m=e;n=l;h=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(h|0));HB(e,16,0);m=j;n=e;h=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(h|0));k[g+320>>2]=9;m=g+328|0;n=j;h=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(h|0));j=g+368|0;k[j>>2]=-1;k[j+4>>2]=-1;j=g+376|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[g+400>>2]=1;k[g+408>>2]=131;k[g+440>>2]=1;j=g+448|0;k[j>>2]=-1;k[j+4>>2]=-1;j=g+456|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[g+480>>2]=1;k[g+488>>2]=57;k[g+520>>2]=1;j=g+528|0;k[j>>2]=-1;k[j+4>>2]=-1;j=g+536|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[g+560>>2]=1;k[g+568>>2]=129;k[g+600>>2]=1;j=g+608|0;k[j>>2]=-1;k[j+4>>2]=-1;j=g+616|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[g+640>>2]=1;k[g+648>>2]=81;k[g+680>>2]=1;j=g+688|0;k[j>>2]=-1;k[j+4>>2]=-1;j=g+696|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[g+720>>2]=1;k[g+728>>2]=145;k[g+760>>2]=1;j=g+768|0;k[j>>2]=-1;k[j+4>>2]=-1;j=g+776|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[g+800>>2]=1;k[g+808>>2]=82;k[g+840>>2]=1;j=g+848|0;k[j>>2]=-1;k[j+4>>2]=-1;j=g+856|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[f>>2]=0;j=f+4|0;k[j>>2]=0;k[f+8>>2]=0;x=0;e=Ba(563,880)|0;l=x;x=0;if(l&1){l=Hc()|0;i=k[g+552>>2]|0;if(i)j0a(i);i=k[g+540>>2]|0;if(i)j0a(i);i=k[g+472>>2]|0;if(i)j0a(i);i=k[g+460>>2]|0;if(i)j0a(i);i=k[g+392>>2]|0;if(i)j0a(i);i=k[g+380>>2]|0;if(i)j0a(i);i=k[g+312>>2]|0;if(i)j0a(i);i=k[g+300>>2]|0;if(i)j0a(i);i=k[g+232>>2]|0;if(i)j0a(i);i=k[g+220>>2]|0;if(i)j0a(i);i=k[g+152>>2]|0;if(i)j0a(i);i=k[g+140>>2]|0;if(i)j0a(i);i=k[g+72>>2]|0;if(i)j0a(i);i=k[g+60>>2]|0;if(i)j0a(i);i=k[c>>2]|0;if(!i)Sc(l|0);o=k[b>>2]|0;if((o|0)==(i|0))p=i;else{q=o;do{k[b>>2]=q+-80;o=k[q+-8>>2]|0;if(o)j0a(o);o=k[q+-20>>2]|0;if(o)j0a(o);q=k[b>>2]|0}while((q|0)!=(i|0));p=k[c>>2]|0}OBa(p);Sc(l|0)}k[j>>2]=e;k[f>>2]=e;l=f+8|0;k[l>>2]=e+880;p=g+880|0;i=g;q=e;o=e;while(1){k[q>>2]=k[i>>2];m=q+8|0;n=i+8|0;h=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(h|0));e=i+48|0;s=k[e+4>>2]|0;t=q+48|0;k[t>>2]=k[e>>2];k[t+4>>2]=s;k[q+56>>2]=k[i+56>>2];s=k[i+60>>2]|0;k[q+60>>2]=s;if(s)h0a(s);k[q+64>>2]=k[i+64>>2];k[q+68>>2]=k[i+68>>2];s=k[i+72>>2]|0;k[q+72>>2]=s;if(s)h0a(s);o=o+80|0;k[j>>2]=o;i=i+80|0;if((i|0)==(p|0)){u=o;break}else q=o}o=u;u=k[c>>2]|0;if(!u)v=a+28|0;else{q=k[b>>2]|0;if((q|0)==(u|0))w=u;else{p=q;do{k[b>>2]=p+-80;q=k[p+-8>>2]|0;if(q)j0a(q);q=k[p+-20>>2]|0;if(q)j0a(q);p=k[b>>2]|0}while((p|0)!=(u|0));w=k[c>>2]|0}OBa(w);w=a+28|0;k[w>>2]=0;k[b>>2]=0;k[c>>2]=0;v=w}k[c>>2]=k[f>>2];k[b>>2]=o;k[v>>2]=k[l>>2];k[l>>2]=0;k[j>>2]=0;k[f>>2]=0;f=k[g+872>>2]|0;if(f)j0a(f);f=k[g+860>>2]|0;if(f)j0a(f);f=k[g+792>>2]|0;if(f)j0a(f);f=k[g+780>>2]|0;if(f)j0a(f);f=k[g+712>>2]|0;if(f)j0a(f);f=k[g+700>>2]|0;if(f)j0a(f);f=k[g+632>>2]|0;if(f)j0a(f);f=k[g+620>>2]|0;if(f)j0a(f);f=k[g+552>>2]|0;if(f)j0a(f);f=k[g+540>>2]|0;if(f)j0a(f);f=k[g+472>>2]|0;if(f)j0a(f);f=k[g+460>>2]|0;if(f)j0a(f);f=k[g+392>>2]|0;if(f)j0a(f);f=k[g+380>>2]|0;if(f)j0a(f);f=k[g+312>>2]|0;if(f)j0a(f);f=k[g+300>>2]|0;if(f)j0a(f);f=k[g+232>>2]|0;if(f)j0a(f);f=k[g+220>>2]|0;if(f)j0a(f);f=k[g+152>>2]|0;if(f)j0a(f);f=k[g+140>>2]|0;if(f)j0a(f);f=k[g+72>>2]|0;if(f)j0a(f);f=k[g+60>>2]|0;if(!f){r=d;return}j0a(f);r=d;return}function uB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0;d=r;r=r+1440|0;e=d+1248|0;f=d+1208|0;g=d+1192|0;h=d+1112|0;l=d+1072|0;m=d+1032|0;n=d+1420|0;o=d+992|0;p=d+1408|0;q=d+912|0;s=d+832|0;t=d+776|0;u=d+736|0;v=d+792|0;w=d+656|0;y=d+600|0;z=d+696|0;A=d+616|0;B=d+1384|0;C=d+1376|0;D=d+560|0;E=d+1396|0;F=d+1364|0;G=d+520|0;H=d+1352|0;I=d+280|0;J=d+1324|0;K=d+240|0;L=d+1312|0;N=d+1300|0;O=d+1288|0;P=d+160|0;Q=d+80|0;R=d;S=k[c+32>>2]|0;T=k[c>>2]|0;if(S>>>0<2&T>>>0<65536){U=c+4|0;V=k[c+36>>2]|0;k[h>>2]=2;k[h+8>>2]=T;W=h+12|0;k[W>>2]=k[U>>2];k[W+4>>2]=k[U+4>>2];k[W+8>>2]=k[U+8>>2];k[W+12>>2]=k[U+12>>2];k[W+16>>2]=k[U+16>>2];k[W+20>>2]=k[U+20>>2];k[W+24>>2]=k[U+24>>2];k[h+40>>2]=S;k[h+44>>2]=V;V=h+48|0;k[V>>2]=-1;k[V+4>>2]=-1;V=h+56|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[V+16>>2]=0;k[a>>2]=0;V=a+4|0;k[V>>2]=0;k[a+8>>2]=0;x=0;U=Ba(563,80)|0;W=x;x=0;if(W&1){W=Hc()|0;X=W;Y=M;Sc(X|0)}else{k[a>>2]=U;k[a+8>>2]=U+80;k[U>>2]=2;Z=U+8|0;_=h+8|0;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));h=U+48|0;k[h>>2]=-1;k[h+4>>2]=-1;k[U+56>>2]=0;k[U+60>>2]=0;k[U+64>>2]=0;k[U+68>>2]=0;k[U+72>>2]=0;k[V>>2]=U+80;r=d;return}}k[e>>2]=0;U=e+32|0;k[U>>2]=8;V=(S|0)==0;if(V)aa=8;else{k[e>>2]=~T;if((S|0)!=1){h=1;do{k[e+(h<<2)>>2]=~k[c+(h<<2)>>2];h=h+1|0}while((h|0)!=(S|0))}aa=k[U>>2]|0}if(S>>>0>>0){h=S;do{k[e+(h<<2)>>2]=-1;h=h+1|0;W=k[U>>2]|0}while(h>>>0>>0);ba=W}else ba=aa;aa=ba+-1|0;a:do if(aa){ba=aa;do{if(k[e+(ba<<2)>>2]|0)break a;k[U>>2]=ba;ba=ba+-1|0}while((ba|0)!=0)}while(0);Z=l;_=e;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));U=l+32|0;aa=k[U>>2]|0;ba=k[l>>2]|0;if((aa|0)!=1|(ba|0)!=0){h=ba;ba=aa;aa=0;while(1){W=aa+1|0;do if(!ba){k[U>>2]=1;k[l>>2]=0;ca=1;da=0}else{ea=ba+-1|0;fa=(((k[l+(ea<<2)>>2]|0)>>>0<256)<<31>>31)+ba|0;if(!fa){k[U>>2]=1;k[l>>2]=0;ca=1;da=0;break}ga=h>>>8;k[l>>2]=ga;if(ba>>>0>1){ha=1;ia=ga;ja=l;ka=0;while(1){k[ja>>2]=k[l+(ha<<2)>>2]<<24|ia;la=ka+1|0;ja=l+(la<<2)|0;ia=(k[ja>>2]|0)>>>8;k[ja>>2]=ia;if((la|0)==(ea|0))break;else{ha=ka+2|0;ka=la}}ma=k[l>>2]|0}else ma=ga;ka=fa>>>0>8?8:fa;k[U>>2]=ka;ca=ka;da=ma}while(0);if((da|0)!=0|(ca|0)!=1){h=da;ba=ca;aa=W}else{na=W;break}}}else na=0;Z=m;_=c;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));aa=m+32|0;ca=k[aa>>2]|0;ba=k[m>>2]|0;if((ca|0)!=1|(ba|0)!=0){da=ca;ca=ba;ba=0;while(1){h=ba+1|0;do if(!da){k[aa>>2]=1;k[m>>2]=0;oa=1;pa=0}else{ma=da+-1|0;U=(((k[m+(ma<<2)>>2]|0)>>>0<256)<<31>>31)+da|0;if(!U){k[aa>>2]=1;k[m>>2]=0;oa=1;pa=0;break}l=ca>>>8;k[m>>2]=l;if(da>>>0>1){ka=1;ha=l;ea=m;ia=0;while(1){k[ea>>2]=k[m+(ka<<2)>>2]<<24|ha;ja=ia+1|0;ea=m+(ja<<2)|0;ha=(k[ea>>2]|0)>>>8;k[ea>>2]=ha;if((ja|0)==(ma|0))break;else{ka=ia+2|0;ia=ja}}qa=k[m>>2]|0}else qa=l;ia=U>>>0>8?8:U;k[aa>>2]=ia;oa=ia;pa=qa}while(0);if((pa|0)!=0|(oa|0)!=1){da=oa;ca=pa;ba=h}else{ra=h;break}}}else ra=0;if(na>>>0>>0){k[e>>2]=0;ra=e+32|0;k[ra>>2]=8;if(V)sa=8;else{k[e>>2]=~T;if((S|0)!=1){V=1;do{k[e+(V<<2)>>2]=~k[c+(V<<2)>>2];V=V+1|0}while((V|0)!=(S|0))}sa=k[ra>>2]|0}if(S>>>0>>0){V=S;do{k[e+(V<<2)>>2]=-1;V=V+1|0;na=k[ra>>2]|0}while(V>>>0>>0);ta=na}else ta=sa;sa=ta+-1|0;b:do if(sa){ta=sa;do{if(k[e+(ta<<2)>>2]|0)break b;k[ra>>2]=ta;ta=ta+-1|0}while((ta|0)!=0)}while(0);Z=o;_=e;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));uB(n,b,o);k[q>>2]=1;k[q+8>>2]=25;k[q+40>>2]=1;o=q+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=q+56|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[p>>2]=0;o=p+4|0;k[o>>2]=0;k[p+8>>2]=0;x=0;ra=Ba(563,80)|0;sa=x;x=0;do if(sa&1){ta=Hc()|0;ua=ta;va=M}else{k[p>>2]=ra;k[p+8>>2]=ra+80;k[ra>>2]=1;Z=ra+8|0;_=q+8|0;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));ta=ra+48|0;k[ta>>2]=-1;k[ta+4>>2]=-1;k[ra+56>>2]=0;k[ra+60>>2]=0;k[ra+64>>2]=0;k[ra+68>>2]=0;k[ra+72>>2]=0;k[o>>2]=ra+80;x=0;fb(199,a|0,n|0,p|0);ta=x;x=0;if(ta&1){ta=Hc()|0;h=M;V=k[ra+72>>2]|0;if(V)j0a(V);V=k[ra+60>>2]|0;if(V)j0a(V);k[o>>2]=ra;OBa(ra);ua=ta;va=h;break}h=k[ra+72>>2]|0;if(h)j0a(h);h=k[ra+60>>2]|0;if(h)j0a(h);k[o>>2]=ra;OBa(ra);h=k[n>>2]|0;if(!h){r=d;return}ta=n+4|0;V=k[ta>>2]|0;if((V|0)==(h|0))wa=h;else{na=V;do{k[ta>>2]=na+-80;V=k[na+-8>>2]|0;if(V)j0a(V);V=k[na+-20>>2]|0;if(V)j0a(V);na=k[ta>>2]|0}while((na|0)!=(h|0));wa=k[n>>2]|0}OBa(wa);r=d;return}while(0);wa=k[n>>2]|0;if(!wa){X=ua;Y=va;Sc(X|0)}ra=n+4|0;o=k[ra>>2]|0;if((o|0)==(wa|0))ya=wa;else{p=o;do{k[ra>>2]=p+-80;o=k[p+-8>>2]|0;if(o)j0a(o);o=k[p+-20>>2]|0;if(o)j0a(o);p=k[ra>>2]|0}while((p|0)!=(wa|0));ya=k[n>>2]|0}OBa(ya);X=ua;Y=va;Sc(X|0)}va=c+4|0;ua=k[c+36>>2]|0;k[s>>2]=2;k[s+8>>2]=T;T=s+12|0;k[T>>2]=k[va>>2];k[T+4>>2]=k[va+4>>2];k[T+8>>2]=k[va+8>>2];k[T+12>>2]=k[va+12>>2];k[T+16>>2]=k[va+16>>2];k[T+20>>2]=k[va+20>>2];k[T+24>>2]=k[va+24>>2];k[s+40>>2]=S;k[s+44>>2]=ua;ua=s+48|0;k[ua>>2]=-1;k[ua+4>>2]=-1;ua=s+56|0;k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua+12>>2]=0;k[ua+16>>2]=0;k[a>>2]=0;ua=a+4|0;k[ua>>2]=0;k[a+8>>2]=0;x=0;S=Ba(563,80)|0;va=x;x=0;if(va&1){va=Hc()|0;X=va;Y=M;Sc(X|0)}k[a>>2]=S;va=a+8|0;k[va>>2]=S+80;k[S>>2]=2;Z=S+8|0;_=s+8|0;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));s=S+48|0;k[s>>2]=-1;k[s+4>>2]=-1;k[S+56>>2]=0;k[S+60>>2]=0;k[S+64>>2]=0;k[S+68>>2]=0;k[S+72>>2]=0;k[ua>>2]=S+80;x=0;fb(193,t|0,b|0,a|0);S=x;x=0;if(!(S&1)){S=v+32|0;s=f+32|0;T=e+32|0;ya=y+8|0;n=y+12|0;wa=y+13|0;p=z+32|0;ra=y+4|0;o=u;q=y;sa=B+4|0;h=B+8|0;na=C+4|0;ta=e+32|0;V=E+4|0;ba=E+8|0;pa=I+8|0;ca=I+12|0;oa=I+40|0;da=I+48|0;qa=I+56|0;aa=K+32|0;m=K+4|0;W=K+36|0;ia=I+80|0;ka=I+88|0;ma=I+92|0;ha=I+120|0;ea=I+124|0;fa=I+128|0;ga=I+136|0;ja=I+160|0;la=I+168|0;za=I+200|0;Aa=I+208|0;Ca=I+216|0;Da=H+4|0;Ea=H+8|0;Fa=H+8|0;Ga=w+32|0;Ha=P+8|0;Ia=P+40|0;Ja=P+48|0;Ka=P+56|0;La=O+4|0;Ma=O+8|0;Na=O+8|0;Oa=L+4|0;Pa=N+4|0;Qa=E+8|0;Ra=Q+8|0;Sa=Q+40|0;Ua=Q+48|0;Va=Q+56|0;Wa=e+12|0;Xa=t+12|0;Ya=t+13|0;Za=t+4|0;_a=e+8|0;$a=t+8|0;ab=e+13|0;bb=e+4|0;cb=R+8|0;db=R+40|0;eb=R+48|0;gb=R+56|0;hb=R+60|0;ib=R+72|0;jb=R+68|0;kb=G+32|0;lb=g+8|0;mb=g+12|0;nb=g+13|0;ob=g+4|0;pb=F+4|0;qb=e+32|0;rb=e+32|0;sb=I+8|0;tb=I+88|0;ub=I+128|0;vb=I+136|0;wb=I+140|0;xb=I+144|0;yb=I+148|0;zb=I+152|0;Ab=I+160|0;Bb=I+168|0;Cb=I+208|0;Db=I+216|0;Eb=I+220|0;Fb=I+224|0;Gb=I+228|0;Hb=I+232|0;Ib=I+232|0;Jb=I+220|0;Kb=I+152|0;Lb=I+140|0;Mb=I+72|0;Nb=I+60|0;Ob=P+8|0;Pb=Q+8|0;Qb=255;c:while(1){Rb=Qb+-8|0;Z=e;_=c;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Sb=Rb>>>5;Tb=Rb&31;Ub=k[rb>>2]|0;do if(Ub>>>0>Sb>>>0){Vb=Ub+-1|0;Wb=((((k[e+(Vb<<2)>>2]|0)>>>Tb|0)==0)<<31>>31)+(Ub-Sb)|0;if(!Wb){k[rb>>2]=1;k[e>>2]=0;break}if(Tb){Xb=Sb+1|0;Yb=(k[e+(Sb<<2)>>2]|0)>>>Tb;k[e>>2]=Yb;if(Xb>>>0>>0){Zb=32-Tb|0;_b=Vb-Sb|0;Vb=Xb;Xb=Yb;Yb=e;$b=0;while(1){k[Yb>>2]=k[e+(Vb<<2)>>2]<>2]|0)>>>Tb;Yb=e+($b<<2)|0;k[Yb>>2]=Xb;if(($b|0)==(_b|0))break;else Vb=ac+1|0}}}else{Vb=0;do{k[e+(Vb<<2)>>2]=k[e+(Vb+Sb<<2)>>2];Vb=Vb+1|0}while((Vb|0)!=(Wb|0))}k[rb>>2]=Wb>>>0>8?8:Wb}else{k[rb>>2]=1;k[e>>2]=0}while(0);if(((k[e>>2]&511)+-255|0)>>>0<=1){k[v>>2]=1;k[S>>2]=1;Z=e;_=v;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));HB(e,Qb,0);Z=u;_=e;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Z=e;_=c;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Sb=Qb>>>5;Tb=Qb&31;Ub=k[qb>>2]|0;do if(Ub>>>0>Sb>>>0){Rb=Ub+-1|0;Vb=((((k[e+(Rb<<2)>>2]|0)>>>Tb|0)==0)<<31>>31)+(Ub-Sb)|0;if(!Vb){k[qb>>2]=1;k[e>>2]=0;break}if(Tb){_b=Sb+1|0;$b=(k[e+(Sb<<2)>>2]|0)>>>Tb;k[e>>2]=$b;if(_b>>>0>>0){Xb=32-Tb|0;Yb=Rb-Sb|0;Rb=_b;_b=$b;$b=e;Zb=0;while(1){k[$b>>2]=k[e+(Rb<<2)>>2]<>2]|0)>>>Tb;$b=e+(Zb<<2)|0;k[$b>>2]=_b;if((Zb|0)==(Yb|0))break;else Rb=U+1|0}}}else{Rb=0;do{k[e+(Rb<<2)>>2]=k[e+(Rb+Sb<<2)>>2];Rb=Rb+1|0}while((Rb|0)!=(Vb|0))}k[qb>>2]=Vb>>>0>8?8:Vb}else{k[qb>>2]=1;k[e>>2]=0}while(0);Z=w;_=e;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));k[f>>2]=0;k[s>>2]=1;k[e>>2]=1;JB(f,u,e);Z=A;_=f;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));k[e>>2]=0;k[T>>2]=1;KB(e,c,A);Z=z;_=e;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));k[y>>2]=0;k[ya>>2]=1;i[n>>0]=0;i[wa>>0]=1;Sb=k[p>>2]|0;Tb=Sb>>>0>134217728;Ub=Tb?134217728:Sb;if(Ub>>>0>2){Rb=Ub>>>0>8?Ub:8;x=0;Yb=Ba(563,Rb<<2|0)|0;Zb=x;x=0;if(Zb&1){bc=93;break}k[Yb>>2]=k[y>>2];i[wa>>0]=0;k[ya>>2]=Ub;k[y>>2]=Rb;k[ra>>2]=Yb;cc=Yb}else{k[ya>>2]=Ub;cc=y}Dyb(cc|0,z|0,(Tb?536870912:Sb<<2)|0)|0;i[n>>0]=0;if(!(i[wa>>0]|0))dc=k[ra>>2]|0;else dc=y;Sb=(k[ya>>2]|0)+-1|0;d:do if(Sb){Tb=Sb;do{if(k[dc+(Tb<<2)>>2]|0)break d;k[ya>>2]=Tb;Tb=Tb+-1|0}while((Tb|0)!=0)}while(0);k[B>>2]=e;k[sa>>2]=o;k[h>>2]=q;x=0;Sb=Ta(530,y|0,B|0)|0;Tb=x;x=0;if(Tb&1){bc=118;break}do if(Sb){x=0;if(!(i[n>>0]|0)){uz(y,y,u);Tb=x;x=0;if(Tb&1){bc=118;break c}else break}else{tz(y,y,u);Tb=x;x=0;if(Tb&1){bc=118;break c}else break}}while(0);k[C>>2]=e;k[na>>2]=y;Z=e;_=u;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Sb=k[ta>>2]|0;do if(!Sb){k[ta>>2]=1;k[e>>2]=0}else{Tb=Sb+-1|0;Vb=(((k[e+(Tb<<2)>>2]|0)>>>0<256)<<31>>31)+Sb|0;if(!Vb){k[ta>>2]=1;k[e>>2]=0;break}Ub=(k[e>>2]|0)>>>8;k[e>>2]=Ub;if(Sb>>>0>1){Yb=1;Rb=Ub;Ub=e;Zb=0;while(1){k[Ub>>2]=k[e+(Yb<<2)>>2]<<24|Rb;_b=Zb+1|0;Ub=e+(_b<<2)|0;Rb=(k[Ub>>2]|0)>>>8;k[Ub>>2]=Rb;if((_b|0)==(Tb|0))break;else{Yb=Zb+2|0;Zb=_b}}}k[ta>>2]=Vb>>>0>8?8:Vb}while(0);Z=D;_=e;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));x=0;Sb=Ta(531,C|0,D|0)|0;Zb=x;x=0;if(Zb&1){bc=118;break}if(!Sb){k[E>>2]=0;k[V>>2]=0;k[ba>>2]=0;Sb=j[n>>1]|0;Zb=k[ya>>2]|0;Yb=(Sb&65535)>>>8&255;if(!((Sb&255)<<24>>24==0&(Zb|0)==1?(k[(Yb<<24>>24==0?k[ra>>2]|0:y)>>2]|0)==0:0))bc=130;do if((bc|0)==130){bc=0;k[G>>2]=0;k[kb>>2]=1;k[g>>2]=0;i[mb>>0]=0;i[nb>>0]=1;k[lb>>2]=0;Sb=Zb>>>0>134217728?134217728:Zb;if(Sb>>>0>2){Tb=Sb>>>0>8?Sb:8;x=0;Rb=Ba(563,Tb<<2|0)|0;Ub=x;x=0;if(Ub&1){bc=134;break c}i[nb>>0]=0;k[lb>>2]=Sb;k[g>>2]=Tb;k[ob>>2]=Rb;ec=Rb}else{k[lb>>2]=Sb;ec=g}Dyb(ec|0,(Yb<<24>>24==0?k[ra>>2]|0:y)|0,Zb<<2|0)|0;i[mb>>0]=0;NB(G,g,e,f);if(!(i[nb>>0]|0))OBa(k[ob>>2]|0);x=0;fb(200,F|0,b|0,G|0);Sb=x;x=0;if(Sb&1){bc=157;break c}Sb=k[F>>2]|0;Rb=k[pb>>2]|0;if((Sb|0)==(Rb|0))fc=Sb;else{Tb=Sb;do{Sb=k[V>>2]|0;if((Sb|0)==(k[Qa>>2]|0)){x=0;xa(669,E|0,Tb|0);Ub=x;x=0;if(Ub&1){bc=159;break c}}else{k[Sb>>2]=k[Tb>>2];Z=Sb+8|0;_=Tb+8|0;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Ub=Tb+48|0;_b=k[Ub+4>>2]|0;$b=Sb+48|0;k[$b>>2]=k[Ub>>2];k[$b+4>>2]=_b;k[Sb+56>>2]=k[Tb+56>>2];_b=k[Tb+60>>2]|0;k[Sb+60>>2]=_b;if(_b)h0a(_b);k[Sb+64>>2]=k[Tb+64>>2];k[Sb+68>>2]=k[Tb+68>>2];_b=k[Tb+72>>2]|0;k[Sb+72>>2]=_b;if(_b)h0a(_b);k[V>>2]=(k[V>>2]|0)+80}Tb=Tb+80|0}while((Tb|0)!=(Rb|0));fc=k[F>>2]|0}if(!fc)break;Rb=k[pb>>2]|0;if((Rb|0)==(fc|0))gc=fc;else{Tb=Rb;do{k[pb>>2]=Tb+-80;Rb=k[Tb+-8>>2]|0;if(Rb)j0a(Rb);Rb=k[Tb+-20>>2]|0;if(Rb)j0a(Rb);Tb=k[pb>>2]|0}while((Tb|0)!=(fc|0));gc=k[F>>2]|0}OBa(gc)}while(0);k[I>>2]=2;k[pa>>2]=Qb;k[ca>>2]=k[J>>2];k[ca+4>>2]=k[J+4>>2];k[ca+8>>2]=k[J+8>>2];k[ca+12>>2]=k[J+12>>2];k[ca+16>>2]=k[J+16>>2];k[ca+20>>2]=k[J+20>>2];k[ca+24>>2]=k[J+24>>2];k[oa>>2]=1;Zb=da;k[Zb>>2]=-1;k[Zb+4>>2]=-1;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[qa+16>>2]=0;k[K>>2]=2;k[aa>>2]=1;Zb=k[W>>2]|0;k[ia>>2]=2;k[ka>>2]=2;k[ma>>2]=k[m>>2];k[ma+4>>2]=k[m+4>>2];k[ma+8>>2]=k[m+8>>2];k[ma+12>>2]=k[m+12>>2];k[ma+16>>2]=k[m+16>>2];k[ma+20>>2]=k[m+20>>2];k[ma+24>>2]=k[m+24>>2];k[ha>>2]=1;k[ea>>2]=Zb;Zb=fa;k[Zb>>2]=-1;k[Zb+4>>2]=-1;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[ga+16>>2]=0;k[ja>>2]=1;k[la>>2]=10;k[za>>2]=1;Zb=Aa;k[Zb>>2]=-1;k[Zb+4>>2]=-1;k[Ca>>2]=0;k[Ca+4>>2]=0;k[Ca+8>>2]=0;k[Ca+12>>2]=0;k[Ca+16>>2]=0;k[H>>2]=0;k[Da>>2]=0;k[Ea>>2]=0;x=0;Zb=Ba(563,240)|0;Yb=x;x=0;if(Yb&1){bc=227;break}k[H>>2]=Zb;k[Fa>>2]=Zb+240;k[Zb>>2]=2;Z=Zb+8|0;_=sb;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Yb=Zb+48|0;k[Yb>>2]=-1;k[Yb+4>>2]=-1;k[Zb+56>>2]=0;k[Zb+60>>2]=0;k[Zb+64>>2]=0;k[Zb+68>>2]=0;k[Zb+72>>2]=0;Yb=Zb+80|0;k[Da>>2]=Yb;k[Yb>>2]=2;Z=Zb+88|0;_=tb;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Yb=ub;Tb=k[Yb+4>>2]|0;Rb=Zb+128|0;k[Rb>>2]=k[Yb>>2];k[Rb+4>>2]=Tb;k[Zb+136>>2]=k[vb>>2];Tb=k[wb>>2]|0;k[Zb+140>>2]=Tb;if(Tb)h0a(Tb);k[Zb+144>>2]=k[xb>>2];k[Zb+148>>2]=k[yb>>2];Tb=k[zb>>2]|0;k[Zb+152>>2]=Tb;if(Tb)h0a(Tb);Tb=k[Da>>2]|0;Rb=Tb+80|0;k[Da>>2]=Rb;k[Rb>>2]=k[Ab>>2];Z=Tb+88|0;_=Bb;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Zb=Cb;Rb=k[Zb+4>>2]|0;Yb=Tb+128|0;k[Yb>>2]=k[Zb>>2];k[Yb+4>>2]=Rb;k[Tb+136>>2]=k[Db>>2];Rb=k[Eb>>2]|0;k[Tb+140>>2]=Rb;if(Rb)h0a(Rb);k[Tb+144>>2]=k[Fb>>2];k[Tb+148>>2]=k[Gb>>2];Rb=k[Hb>>2]|0;k[Tb+152>>2]=Rb;if(Rb)h0a(Rb);Rb=Tb+160|0;k[Da>>2]=Rb;Yb=k[H>>2]|0;Zb=(Yb|0)==(Rb|0);if(!Zb){Vb=Yb;do{_b=k[V>>2]|0;if((_b|0)==(k[Qa>>2]|0)){x=0;xa(669,E|0,Vb|0);$b=x;x=0;if($b&1){hc=Rb;ic=Yb;jc=Yb;bc=228;break c}}else{k[_b>>2]=k[Vb>>2];Z=_b+8|0;_=Vb+8|0;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));$b=Vb+48|0;Ub=k[$b+4>>2]|0;Xb=_b+48|0;k[Xb>>2]=k[$b>>2];k[Xb+4>>2]=Ub;k[_b+56>>2]=k[Vb+56>>2];Ub=k[Vb+60>>2]|0;k[_b+60>>2]=Ub;if(Ub)h0a(Ub);k[_b+64>>2]=k[Vb+64>>2];k[_b+68>>2]=k[Vb+68>>2];Ub=k[Vb+72>>2]|0;k[_b+72>>2]=Ub;if(Ub)h0a(Ub);k[V>>2]=(k[V>>2]|0)+80}Vb=Vb+80|0}while((Vb|0)!=(Rb|0))}if(Yb){if(Zb)kc=Yb;else{Vb=Rb;do{Tb=k[Vb+-8>>2]|0;if(Tb)j0a(Tb);Tb=k[Vb+-20>>2]|0;Vb=Vb+-80|0;if(Tb)j0a(Tb)}while((Vb|0)!=(Yb|0));k[Da>>2]=Yb;kc=Yb}OBa(kc)}Vb=k[Ib>>2]|0;if(Vb)j0a(Vb);Vb=k[Jb>>2]|0;if(Vb)j0a(Vb);Vb=k[Kb>>2]|0;if(Vb)j0a(Vb);Vb=k[Lb>>2]|0;if(Vb)j0a(Vb);Vb=k[Mb>>2]|0;if(Vb)j0a(Vb);Vb=k[Nb>>2]|0;if(Vb)j0a(Vb);do if((k[Ga>>2]|0)!=1|(k[w>>2]|0)>>>0>1){x=0;fb(200,N|0,b|0,w|0);Vb=x;x=0;if(Vb&1){bc=157;break c}k[P>>2]=1;k[Ha>>2]=2;k[Ia>>2]=1;Vb=Ja;k[Vb>>2]=-1;k[Vb+4>>2]=-1;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[Ka+16>>2]=0;k[O>>2]=0;k[La>>2]=0;k[Ma>>2]=0;x=0;Vb=Ba(563,80)|0;Rb=x;x=0;if(Rb&1){bc=240;break c}k[O>>2]=Vb;k[Na>>2]=Vb+80;k[Vb>>2]=1;Z=Vb+8|0;_=Ob;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));_b=Vb+48|0;k[_b>>2]=-1;k[_b+4>>2]=-1;k[Vb+56>>2]=0;k[Vb+60>>2]=0;k[Vb+64>>2]=0;k[Vb+68>>2]=0;k[Vb+72>>2]=0;_b=Vb+80|0;k[La>>2]=_b;x=0;fb(199,L|0,N|0,O|0);Rb=x;x=0;if(Rb&1){lc=_b;mc=Vb;bc=241;break c}Rb=k[L>>2]|0;Zb=k[Oa>>2]|0;if((Rb|0)==(Zb|0))nc=Rb;else{Tb=Rb;do{Rb=k[V>>2]|0;if((Rb|0)==(k[Qa>>2]|0)){x=0;xa(669,E|0,Tb|0);Ub=x;x=0;if(Ub&1){oc=_b;pc=Vb;bc=242;break c}}else{k[Rb>>2]=k[Tb>>2];Z=Rb+8|0;_=Tb+8|0;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Sb=Tb+48|0;Ub=k[Sb+4>>2]|0;Xb=Rb+48|0;k[Xb>>2]=k[Sb>>2];k[Xb+4>>2]=Ub;k[Rb+56>>2]=k[Tb+56>>2];Ub=k[Tb+60>>2]|0;k[Rb+60>>2]=Ub;if(Ub)h0a(Ub);k[Rb+64>>2]=k[Tb+64>>2];k[Rb+68>>2]=k[Tb+68>>2];Ub=k[Tb+72>>2]|0;k[Rb+72>>2]=Ub;if(Ub)h0a(Ub);k[V>>2]=(k[V>>2]|0)+80}Tb=Tb+80|0}while((Tb|0)!=(Zb|0));nc=k[L>>2]|0}if(nc){Zb=k[Oa>>2]|0;if((Zb|0)==(nc|0))qc=nc;else{Tb=Zb;do{k[Oa>>2]=Tb+-80;Zb=k[Tb+-8>>2]|0;if(Zb)j0a(Zb);Zb=k[Tb+-20>>2]|0;if(Zb)j0a(Zb);Tb=k[Oa>>2]|0}while((Tb|0)!=(nc|0));qc=k[L>>2]|0}OBa(qc)}Tb=k[Vb+72>>2]|0;if(Tb)j0a(Tb);Tb=k[Vb+60>>2]|0;if(Tb)j0a(Tb);k[La>>2]=Vb;OBa(Vb);Tb=k[N>>2]|0;if(!Tb)break;Zb=k[Pa>>2]|0;if((Zb|0)==(Tb|0))rc=Tb;else{_b=Zb;do{k[Pa>>2]=_b+-80;Zb=k[_b+-8>>2]|0;if(Zb)j0a(Zb);Zb=k[_b+-20>>2]|0;if(Zb)j0a(Zb);_b=k[Pa>>2]|0}while((_b|0)!=(Tb|0));rc=k[N>>2]|0}OBa(rc)}while(0);Yb=j[n>>1]|0;do if(!((Yb&255)<<24>>24)){if((k[ya>>2]|0)>>>0<=1?(k[((Yb&65535)<256?k[ra>>2]|0:y)>>2]|0)==0:0)break;k[Q>>2]=1;k[Ra>>2]=1;k[Sa>>2]=1;Tb=Ua;k[Tb>>2]=-1;k[Tb+4>>2]=-1;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Tb=Ba(563,80)|0;_b=x;x=0;if(_b&1){bc=283;break c}k[Tb>>2]=1;Z=Tb+8|0;_=Pb;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));_b=Tb+48|0;k[_b>>2]=-1;k[_b+4>>2]=-1;k[Tb+56>>2]=0;k[Tb+60>>2]=0;k[Tb+64>>2]=0;k[Tb+68>>2]=0;k[Tb+72>>2]=0;_b=k[V>>2]|0;if((_b|0)==(k[Qa>>2]|0)){x=0;xa(669,E|0,Tb|0);Vb=x;x=0;if(Vb&1){sc=Tb;tc=Tb;bc=284;break c}}else{k[_b>>2]=k[Tb>>2];Z=_b+8|0;_=Tb+8|0;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));Vb=Tb+48|0;Zb=k[Vb+4>>2]|0;Ub=_b+48|0;k[Ub>>2]=k[Vb>>2];k[Ub+4>>2]=Zb;k[_b+56>>2]=k[Tb+56>>2];Zb=k[Tb+60>>2]|0;k[_b+60>>2]=Zb;if(Zb)h0a(Zb);k[_b+64>>2]=k[Tb+64>>2];k[_b+68>>2]=k[Tb+68>>2];Zb=k[Tb+72>>2]|0;k[_b+72>>2]=Zb;if(Zb)h0a(Zb);k[V>>2]=(k[V>>2]|0)+80}Zb=k[Tb+72>>2]|0;if(Zb)j0a(Zb);Zb=k[Tb+60>>2]|0;if(Zb)j0a(Zb);OBa(Tb)}else{k[R>>2]=1;k[cb>>2]=3;k[db>>2]=1;Zb=eb;k[Zb>>2]=-1;k[Zb+4>>2]=-1;k[gb>>2]=0;k[gb+4>>2]=0;k[gb+8>>2]=0;k[gb+12>>2]=0;k[gb+16>>2]=0;Zb=k[V>>2]|0;do if(Zb>>>0<(k[Qa>>2]|0)>>>0){k[Zb>>2]=1;Z=Zb+8|0;_=cb;$=Z+40|0;do{k[Z>>2]=k[_>>2];Z=Z+4|0;_=_+4|0}while((Z|0)<($|0));k[Zb+48>>2]=-1;k[Zb+52>>2]=-1;k[Zb+56>>2]=0;k[Zb+60>>2]=0;k[gb>>2]=0;k[hb>>2]=0;k[Zb+64>>2]=0;k[Zb+68>>2]=0;k[Zb+72>>2]=0;k[jb>>2]=0;k[ib>>2]=0;k[V>>2]=Zb+80}else{x=0;xa(690,E|0,R|0);Rb=x;x=0;if(Rb&1){bc=298;break c}Rb=k[ib>>2]|0;if(!Rb)break;j0a(Rb)}while(0);Zb=k[hb>>2]|0;if(!Zb)break;j0a(Zb)}while(0);x=0;fb(193,e|0,b|0,E|0);Yb=x;x=0;if(Yb&1){bc=157;break}Yb=j[Wa>>1]|0;Zb=Yb&255;Tb=Zb<<24>>24!=0;_b=j[Xa>>1]|0;Rb=(Yb&65535)>>>8&255;Yb=(_b&65535)>>>8&255;if(Tb^(_b&255)<<24>>24!=0)if(Tb)bc=312;else uc=Rb;else{_b=k[_a>>2]|0;Ub=k[$a>>2]|0;e:do if((_b|0)==(Ub|0)){Vb=Rb<<24>>24==0?k[bb>>2]|0:e;Xb=Yb<<24>>24==0?k[Za>>2]|0:t;Sb=_b;while(1){Sb=Sb+-1|0;if((Sb|0)<=-1){vc=0;break e}$b=k[Vb+(Sb<<2)>>2]|0;Wb=k[Xb+(Sb<<2)>>2]|0;if(($b|0)!=(Wb|0)){wc=$b;xc=Wb;break}}vc=wc>>>0>xc>>>0?1:-1}else vc=_b>>>0>Ub>>>0?1:-1;while(0);if(((Tb?0-vc|0:vc)|0)<0)bc=312;else uc=Rb}if((bc|0)==312){bc=0;if(!(Yb<<24>>24)){OBa(k[Za>>2]|0);Ub=j[Wa>>1]|0;yc=Ub&255;zc=(Ub&65535)>>>8&255}else{yc=Zb;zc=Rb}Ub=k[_a>>2]|0;k[$a>>2]=Ub;i[Xa>>0]=yc;i[Ya>>0]=zc;if(!(zc<<24>>24)){_b=e;Sb=k[_b+4>>2]|0;Xb=t;k[Xb>>2]=k[_b>>2];k[Xb+4>>2]=Sb;k[_a>>2]=0;i[ab>>0]=1}else Dyb(t|0,(zc<<24>>24==0?k[bb>>2]|0:e)|0,Ub<<2|0)|0;Ub=k[a>>2]|0;if(Ub){Sb=k[ua>>2]|0;if((Sb|0)==(Ub|0))Ac=Ub;else{Xb=Sb;do{k[ua>>2]=Xb+-80;Sb=k[Xb+-8>>2]|0;if(Sb)j0a(Sb);Sb=k[Xb+-20>>2]|0;if(Sb)j0a(Sb);Xb=k[ua>>2]|0}while((Xb|0)!=(Ub|0));Ac=k[a>>2]|0}OBa(Ac);k[va>>2]=0;k[ua>>2]=0;k[a>>2]=0}k[a>>2]=k[E>>2];k[ua>>2]=k[V>>2];k[va>>2]=k[Qa>>2];k[Qa>>2]=0;k[V>>2]=0;k[E>>2]=0;uc=i[ab>>0]|0}if(!(uc<<24>>24))OBa(k[bb>>2]|0);Ub=k[E>>2]|0;if(Ub){Xb=k[V>>2]|0;if((Xb|0)==(Ub|0))Bc=Ub;else{Rb=Xb;do{k[V>>2]=Rb+-80;Xb=k[Rb+-8>>2]|0;if(Xb)j0a(Xb);Xb=k[Rb+-20>>2]|0;if(Xb)j0a(Xb);Rb=k[V>>2]|0}while((Rb|0)!=(Ub|0));Bc=k[E>>2]|0}OBa(Bc)}}if(!(i[wa>>0]|0))OBa(k[ra>>2]|0)}Qb=Qb+-1|0;if(Qb>>>0<=8){bc=77;break}}switch(bc|0){case 77:{if(!(i[Ya>>0]|0))OBa(k[Za>>2]|0);r=d;return}case 93:{Cc=Hc()|0;Dc=M;break}case 118:{Ec=Hc()|0;Fc=M;bc=352;break}case 134:{d=Hc()|0;Gc=M;Ic=d;bc=158;break}case 157:{d=Hc()|0;Gc=M;Ic=d;bc=158;break}case 159:{d=Hc()|0;Qb=M;Bc=k[F>>2]|0;if(!Bc){Jc=d;Kc=Qb;bc=343}else{bb=k[pb>>2]|0;if((bb|0)==(Bc|0))Lc=Bc;else{uc=bb;do{k[pb>>2]=uc+-80;bb=k[uc+-8>>2]|0;if(bb)j0a(bb);bb=k[uc+-20>>2]|0;if(bb)j0a(bb);uc=k[pb>>2]|0}while((uc|0)!=(Bc|0));Lc=k[F>>2]|0}OBa(Lc);Jc=d;Kc=Qb;bc=343}break}case 227:{Mc=Hc()|0;Nc=M;bc=235;break}case 228:{Qb=Hc()|0;d=M;if(!ic){Mc=Qb;Nc=d;bc=235}else{Lc=hc;do{hc=k[Lc+-8>>2]|0;if(hc)j0a(hc);hc=k[Lc+-20>>2]|0;Lc=Lc+-80|0;if(hc)j0a(hc)}while((Lc|0)!=(ic|0));k[Da>>2]=ic;OBa(jc);Mc=Qb;Nc=d;bc=235}break}case 240:{d=Hc()|0;Oc=d;Pc=M;bc=258;break}case 241:{d=Hc()|0;Qc=d;Rc=M;Tc=lc;Uc=mc;Vc=mc;bc=251;break}case 242:{mc=Hc()|0;lc=M;d=k[L>>2]|0;if(!d){Qc=mc;Rc=lc;Tc=oc;Uc=pc;Vc=pc;bc=251}else{Qb=k[Oa>>2]|0;if((Qb|0)==(d|0))Wc=d;else{jc=Qb;do{k[Oa>>2]=jc+-80;Qb=k[jc+-8>>2]|0;if(Qb)j0a(Qb);Qb=k[jc+-20>>2]|0;if(Qb)j0a(Qb);jc=k[Oa>>2]|0}while((jc|0)!=(d|0));Wc=k[L>>2]|0}OBa(Wc);Qc=mc;Rc=lc;Tc=oc;Uc=pc;Vc=pc;bc=251}break}case 283:{pc=Hc()|0;Jc=pc;Kc=M;bc=343;break}case 284:{pc=Hc()|0;oc=M;lc=tc+80|0;do{mc=k[lc+-8>>2]|0;if(mc)j0a(mc);mc=k[lc+-20>>2]|0;lc=lc+-80|0;if(mc)j0a(mc)}while((lc|0)!=(sc|0));OBa(tc);Jc=pc;Kc=oc;bc=343;break}case 298:{oc=Hc()|0;pc=M;tc=k[ib>>2]|0;if(tc)j0a(tc);tc=k[hb>>2]|0;if(!tc){Jc=oc;Kc=pc;bc=343}else{j0a(tc);Jc=oc;Kc=pc;bc=343}break}}if((bc|0)==158){Jc=Ic;Kc=Gc;bc=343}else if((bc|0)==235){Gc=k[I+232>>2]|0;if(Gc)j0a(Gc);Gc=k[I+220>>2]|0;if(Gc)j0a(Gc);Gc=k[I+152>>2]|0;if(Gc)j0a(Gc);Gc=k[I+140>>2]|0;if(Gc)j0a(Gc);Gc=k[I+72>>2]|0;if(Gc)j0a(Gc);Gc=k[I+60>>2]|0;if(!Gc){Jc=Mc;Kc=Nc;bc=343}else{j0a(Gc);Jc=Mc;Kc=Nc;bc=343}}else if((bc|0)==251){Nc=Tc;do{Tc=k[Nc+-8>>2]|0;if(Tc)j0a(Tc);Tc=k[Nc+-20>>2]|0;Nc=Nc+-80|0;if(Tc)j0a(Tc)}while((Nc|0)!=(Uc|0));k[La>>2]=Vc;OBa(Vc);Oc=Qc;Pc=Rc;bc=258}if((bc|0)==258){Rc=k[N>>2]|0;if(!Rc){Jc=Oc;Kc=Pc;bc=343}else{Qc=k[Pa>>2]|0;if((Qc|0)==(Rc|0))Xc=Rc;else{Vc=Qc;do{k[Pa>>2]=Vc+-80;Qc=k[Vc+-8>>2]|0;if(Qc)j0a(Qc);Qc=k[Vc+-20>>2]|0;if(Qc)j0a(Qc);Vc=k[Pa>>2]|0}while((Vc|0)!=(Rc|0));Xc=k[N>>2]|0}OBa(Xc);Jc=Oc;Kc=Pc;bc=343}}if((bc|0)==343){Pc=k[E>>2]|0;if(!Pc){Ec=Jc;Fc=Kc;bc=352}else{Oc=k[V>>2]|0;if((Oc|0)==(Pc|0))Yc=Pc;else{Xc=Oc;do{k[V>>2]=Xc+-80;Oc=k[Xc+-8>>2]|0;if(Oc)j0a(Oc);Oc=k[Xc+-20>>2]|0;if(Oc)j0a(Oc);Xc=k[V>>2]|0}while((Xc|0)!=(Pc|0));Yc=k[E>>2]|0}OBa(Yc);Ec=Jc;Fc=Kc;bc=352}}if((bc|0)==352)if(!(i[wa>>0]|0)){OBa(k[ra>>2]|0);Cc=Ec;Dc=Fc}else{Cc=Ec;Dc=Fc}if(!(i[Ya>>0]|0)){OBa(k[Za>>2]|0);Zc=Cc;_c=Dc}else{Zc=Cc;_c=Dc}}else{Dc=Hc()|0;Zc=Dc;_c=M}Dc=k[a>>2]|0;if(!Dc){X=Zc;Y=_c;Sc(X|0)}Cc=k[ua>>2]|0;if((Cc|0)==(Dc|0))$c=Dc;else{Za=Cc;do{k[ua>>2]=Za+-80;Cc=k[Za+-8>>2]|0;if(Cc)j0a(Cc);Cc=k[Za+-20>>2]|0;if(Cc)j0a(Cc);Za=k[ua>>2]|0}while((Za|0)!=(Dc|0));$c=k[a>>2]|0}OBa($c);X=Zc;Y=_c;Sc(X|0)}function vB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=r;r=r+176|0;e=d+64|0;f=d+148|0;g=d+144|0;h=d+48|0;j=d+32|0;l=d+16|0;m=d;n=k[c>>2]|0;o=c+4|0;p=k[o>>2]|0;if((n|0)==(p|0))q=0;else{s=e+8|0;t=e+40|0;u=e+48|0;v=n;n=0;while(1){k[s>>2]=10;k[t>>2]=1;w=u;k[w>>2]=-1;k[w+4>>2]=-1;a:do if(((k[v>>2]|0)==1?(k[v+40>>2]|0)==1:0)?(w=v+8|0,(k[w>>2]|0)==10):0){y=w;z=s;while(1){z=z+4|0;if((y|0)==(w|0)){A=1;break a}y=y+4|0;if((k[y>>2]|0)!=(k[z>>2]|0)){A=0;break}}}else A=0;while(0);z=A+n|0;v=v+80|0;if((v|0)==(p|0)){B=z;break}else n=z}n=e+56|0;k[e>>2]=1;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;q=B*20|0}pB(j,c);k[h>>2]=0;k[h+8>>2]=1;i[h+12>>0]=0;B=h+13|0;i[B>>0]=1;k[g>>2]=q;x=0;if(!(i[j+12>>0]|0)){CB(h,j,g);q=x;x=0;if(q&1)C=13;else C=15}else{BB(h,j,g);g=x;x=0;if(g&1)C=13;else C=15}if((C|0)==13){g=Hc()|0;q=M;if(!(i[B>>0]|0))OBa(k[h+4>>2]|0);D=q;E=g}else if((C|0)==15){g=k[c>>2]|0;c=k[o>>2]|0;b:do if((g|0)==(c|0)){F=0;C=18}else{o=g;q=0;while(1){x=0;n=Ta(529,o|0,3)|0;p=x;x=0;if(p&1)break;p=n+q|0;o=o+80|0;if((o|0)==(c|0)){F=p;C=18;break b}else q=p}q=Hc()|0;G=M;H=q}while(0);do if((C|0)==18){c=ia((i[b+4>>0]|0)!=0?68:200,F)|0;k[l>>2]=c;k[l+8>>2]=1;i[l+12>>0]=0;c=l+13|0;i[c>>0]=1;k[m>>2]=0;k[m+8>>2]=1;i[m+12>>0]=0;g=m+13|0;i[g>>0]=1;k[f>>2]=b+8;k[f+4>>2]=h;k[f+8>>2]=b+12;k[f+12>>2]=l;k[f+16>>2]=m;k[a>>2]=0;k[a+8>>2]=1;i[a+12>>0]=0;q=a+13|0;i[q>>0]=1;x=0;fb(197,a|0,f|0,e|0);o=x;x=0;if(o&1){o=Hc()|0;p=M;if(!(i[q>>0]|0))OBa(k[a+4>>2]|0);if(!(i[g>>0]|0))OBa(k[m+4>>2]|0);if(i[c>>0]|0){G=p;H=o;break}OBa(k[l+4>>2]|0);G=p;H=o;break}if(!(i[g>>0]|0))OBa(k[m+4>>2]|0);if(!(i[c>>0]|0))OBa(k[l+4>>2]|0);if(!(i[B>>0]|0))OBa(k[h+4>>2]|0);if(i[j+13>>0]|0){r=d;return}OBa(k[j+4>>2]|0);r=d;return}while(0);if(!(i[B>>0]|0)){OBa(k[h+4>>2]|0);D=G;E=H}else{D=G;E=H}}if(i[j+13>>0]|0)Sc(E|0);OBa(k[j+4>>2]|0);Sc(E|0)}function wB(){k[6575]=0;k[6576]=0;k[6577]=0;return}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=b+8|0;h=k[b>>2]|0;i=k[b+40>>2]|0;j=f;a:while(1){l=j+24|0;m=k[j+16>>2]|0;b:do if((h|0)>=(m|0)){do if((m|0)>=(h|0)){n=k[j+56>>2]|0;o=(i|0)==(n|0);if(o){p=i;while(1){p=p+-1|0;if((p|0)<=-1)break;q=k[g+(p<<2)>>2]|0;s=k[l+(p<<2)>>2]|0;if((q|0)!=(s|0)){t=q;u=s;v=10;break}}if((v|0)==10?(v=0,t>>>0<=u>>>0):0){v=11;break b}if(o){p=i;while(1){p=p+-1|0;if((p|0)<=-1){w=j;v=22;break a}s=k[l+(p<<2)>>2]|0;q=k[g+(p<<2)>>2]|0;if((s|0)!=(q|0)){x=s;y=q;break}}if(x>>>0>y>>>0){w=j;v=22;break a}else break}}else if(i>>>0<=n>>>0){v=11;break b}if(n>>>0>i>>>0){w=j;v=22;break a}}while(0);p=j+4|0;o=k[p>>2]|0;if(!o){z=p;A=j;v=21;break a}else B=o}else v=11;while(0);if((v|0)==11){v=0;l=k[j>>2]|0;if(!l){C=j;D=j;v=12;break}else B=l}j=B}if((v|0)==12){k[d>>2]=D;E=C;F=D;break}else if((v|0)==21){k[d>>2]=A;E=z;F=A;break}else if((v|0)==22){k[d>>2]=w;G=d;H=w;I=w;v=24;break}}else{k[d>>2]=e;G=e;H=f;I=e;v=24}while(0);if((v|0)==24)if(!H){E=G;F=I}else{J=H;K=J+96|0;r=c;return K|0}H=KBa(104)|0;k[H+16>>2]=k[b>>2];I=H+24|0;G=b+8|0;v=I+40|0;do{k[I>>2]=k[G>>2];I=I+4|0;G=G+4|0}while((I|0)<(v|0));G=b+48|0;I=k[G+4>>2]|0;v=H+64|0;k[v>>2]=k[G>>2];k[v+4>>2]=I;k[H+72>>2]=k[b+56>>2];I=k[b+60>>2]|0;k[H+76>>2]=I;if(I)h0a(I);k[H+80>>2]=k[b+64>>2];k[H+84>>2]=k[b+68>>2];I=k[b+72>>2]|0;k[H+88>>2]=I;if(I)h0a(I);k[H+96>>2]=0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=F;k[E>>2]=H;F=k[k[a>>2]>>2]|0;if(!F)L=H;else{k[a>>2]=F;L=k[E>>2]|0}ui(k[a+4>>2]|0,L);L=a+8|0;k[L>>2]=(k[L>>2]|0)+1;J=H;K=J+96|0;r=c;return K|0}function yB(a,b){a=a|0;b=b|0;if(!b)return;yB(a,k[b>>2]|0);yB(a,k[b+4>>2]|0);a=k[b+88>>2]|0;if(a)j0a(a);a=k[b+76>>2]|0;if(a)j0a(a);OBa(b);return}function zB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+16|0;e=d;k[a>>2]=26292;f=a+4|0;k[f>>2]=k[b>>2];k[f+4>>2]=k[b+4>>2];k[f+8>>2]=k[b+8>>2];k[a+16>>2]=c;k[a>>2]=26276;b=a+20|0;k[b>>2]=0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;x=0;fb(200,e|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;g=k[b>>2]|0;if(!g)Sc(c|0);h=k[f>>2]|0;if((h|0)==(g|0))i=g;else{j=h;do{k[f>>2]=j+-80;h=k[j+-8>>2]|0;if(h)j0a(h);h=k[j+-20>>2]|0;if(h)j0a(h);j=k[f>>2]|0}while((j|0)!=(g|0));i=k[b>>2]|0}OBa(i);Sc(c|0)}c=k[b>>2]|0;if(!c){l=a+28|0;m=k[e>>2]|0;k[b>>2]=m;n=e+4|0;o=k[n>>2]|0;k[f>>2]=o;p=e+8|0;q=k[p>>2]|0;k[l>>2]=q;r=d;return}i=k[f>>2]|0;if((i|0)==(c|0))s=c;else{g=i;do{k[f>>2]=g+-80;i=k[g+-8>>2]|0;if(i)j0a(i);i=k[g+-20>>2]|0;if(i)j0a(i);g=k[f>>2]|0}while((g|0)!=(c|0));s=k[b>>2]|0}OBa(s);s=a+28|0;k[s>>2]=0;k[f>>2]=0;k[b>>2]=0;l=s;m=k[e>>2]|0;k[b>>2]=m;n=e+4|0;o=k[n>>2]|0;k[f>>2]=o;p=e+8|0;q=k[p>>2]|0;k[l>>2]=q;r=d;return}function AB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=r;r=r+128|0;e=d+80|0;f=d+40|0;g=d;h=e;j=b;l=h+40|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));m=e+32|0;n=k[m>>2]|0;o=k[e>>2]|0;if((n|0)!=1|(o|0)!=0){p=n;n=o;o=0;while(1){q=o+1|0;do if(!p){k[m>>2]=1;k[e>>2]=0;s=1;t=0}else{u=p+-1|0;v=(((k[e+(u<<2)>>2]|0)>>>0<256)<<31>>31)+p|0;if(!v){k[m>>2]=1;k[e>>2]=0;s=1;t=0;break}w=n>>>8;k[e>>2]=w;if(p>>>0>1){y=1;z=w;A=e;B=0;while(1){k[A>>2]=k[e+(y<<2)>>2]<<24|z;C=B+1|0;A=e+(C<<2)|0;z=(k[A>>2]|0)>>>8;k[A>>2]=z;if((C|0)==(u|0))break;else{y=B+2|0;B=C}}D=k[e>>2]|0}else D=w;B=v>>>0>8?8:v;k[m>>2]=B;s=B;t=D}while(0);if((s|0)!=1|(t|0)!=0){p=s;n=t;o=q}else{E=q;break}}}else E=0;o=E>>>0>c>>>0?E:c;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;if(!o){h=g;j=b;l=h+40|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));F=f;r=d;return}if(!((o|0)<0?(x=0,va(1473,a|0),E=x,x=0,E&1):0))G=6;if((G|0)==6?(x=0,G=Ba(563,o|0)|0,E=x,x=0,!(E&1)):0){k[c>>2]=G;k[a>>2]=G;k[a+8>>2]=G+o;E=o;o=G;while(1){i[o>>0]=0;G=(k[c>>2]|0)+1|0;k[c>>2]=G;E=E+-1|0;if(!E){H=G;break}else o=G}o=H;H=k[a>>2]|0;h=g;j=b;l=h+40|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));if((o|0)==(H|0)){F=f;r=d;return}j=f+32|0;h=e+32|0;l=g+32|0;b=o-H|0;do{k[f>>2]=255;k[j>>2]=1;k[e>>2]=0;k[h>>2]=1;KB(e,g,f);b=b+-1|0;i[(k[a>>2]|0)+b>>0]=k[e>>2];H=k[l>>2]|0;do if(!H){k[l>>2]=1;k[g>>2]=0}else{o=H+-1|0;E=(((k[g+(o<<2)>>2]|0)>>>0<256)<<31>>31)+H|0;if(!E){k[l>>2]=1;k[g>>2]=0;break}G=(k[g>>2]|0)>>>8;k[g>>2]=G;if(H>>>0>1){t=1;n=G;G=g;s=0;while(1){k[G>>2]=k[g+(t<<2)>>2]<<24|n;p=s+1|0;G=g+(p<<2)|0;n=(k[G>>2]|0)>>>8;k[G>>2]=n;if((p|0)==(o|0))break;else{t=s+2|0;s=p}}}k[l>>2]=E>>>0>8?8:E}while(0)}while((b|0)!=0);F=f;r=d;return}d=Hc()|0;f=k[a>>2]|0;if(!f)Sc(d|0);if((k[c>>2]|0)!=(f|0))k[c>>2]=f;OBa(f);Sc(d|0)}function BB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=b+8|0;e=k[d>>2]|0;f=e>>>0>134217728?134217728:e;e=a+13|0;g=i[e>>0]|0;h=g<<24>>24==0;j=h?k[a>>2]|0:2;if(f>>>0>j>>>0){l=j<<2;j=l>>>0>>0?f:l;l=j>>>0>134217728?134217728:j;j=KBa(l<<2)|0;if(h){h=a+4|0;m=k[h>>2]|0;n=a+8|0;Dyb(j|0,m|0,k[n>>2]<<2|0)|0;OBa(m);o=h;p=n}else{n=a+8|0;Dyb(j|0,a|0,k[n>>2]<<2|0)|0;i[e>>0]=0;o=a+4|0;p=n}k[p>>2]=f;k[a>>2]=l;k[o>>2]=j;q=i[e>>0]|0}else{k[a+8>>2]=f;q=g}g=a+4|0;f=k[g>>2]|0;j=q<<24>>24==0?f:a;o=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;l=k[o>>2]|0;p=k[c>>2]|0;if(l>>>0>=p>>>0){k[j>>2]=l-p;if((a|0)==(b|0)){if(!((l|0)==(p|0)&(k[d>>2]|0)==1))return;i[b+12>>0]=0;return}Eyb(j+4|0,o+4|0,(k[d>>2]<<2)+-4|0)|0;c=i[b+12>>0]|0;n=a+12|0;i[n>>0]=c;if(!(c<<24>>24))return;if((k[a+8>>2]|0)!=1)return;if(k[((i[e>>0]|0)==0?k[g>>2]|0:a)>>2]|0)return;i[n>>0]=0;return}n=a+8|0;c=k[n>>2]|0;if((c|0)==1){k[j>>2]=p-l;h=i[b+12>>0]|0;m=a+12|0;r=h^1;i[m>>0]=r;i[m>>0]=h<<24>>24==0&(k[n>>2]|0)==1&(l|0)==(p|0)?0:r;return}k[j>>2]=l-p;p=k[o+4>>2]|0;if(!p){l=1;while(1){k[j+(l<<2)>>2]=-1;r=l+1|0;h=k[o+(r<<2)>>2]|0;if(!h)l=r;else{s=h;t=r;break}}}else{s=p;t=1}k[j+(t<<2)>>2]=s+-1;if((a|0)==(b|0)){u=q;v=f;w=c}else{c=t+1|0;Eyb(j+(c<<2)|0,o+(c<<2)|0,(k[d>>2]|0)-c<<2|0)|0;u=i[e>>0]|0;v=k[g>>2]|0;w=k[n>>2]|0}g=u<<24>>24==0?v:a;v=w+-1|0;a:do if(v){w=v;do{if(k[g+(w<<2)>>2]|0)break a;k[n>>2]=w;w=w+-1|0}while((w|0)!=0)}while(0);v=i[b+12>>0]|0;b=a+12|0;i[b>>0]=v;if(!(v<<24>>24!=0&(k[n>>2]|0)==1))return;if(k[g>>2]|0)return;i[b>>0]=0;return}function CB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;d=(a|0)!=(b|0);do if(d){e=k[b+8>>2]|0;f=e>>>0>134217728?134217728:e;e=a+13|0;g=(i[e>>0]|0)==0;h=g?k[a>>2]|0:2;if(f>>>0<=h>>>0){k[a+8>>2]=f;j=a;l=e;break}m=h<<2;h=m>>>0>>0?f:m;m=h>>>0>134217728?134217728:h;h=KBa(m<<2)|0;if(g){g=a+4|0;n=k[g>>2]|0;o=a+8|0;Dyb(h|0,n|0,k[o>>2]<<2|0)|0;OBa(n);p=g;q=o}else{o=a+8|0;Dyb(h|0,a|0,k[o>>2]<<2|0)|0;i[e>>0]=0;p=a+4|0;q=o}k[q>>2]=f;k[a>>2]=m;k[p>>2]=h;j=a;l=e}else{j=a;l=a+13|0}while(0);p=k[c>>2]|0;c=i[l>>0]|0;q=c<<24>>24==0;e=a+4|0;h=k[e>>2]|0;m=q?h:j;f=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;a:do if(!p){r=0;s=0;t=0}else{o=k[a+8>>2]|0;g=p;n=0;u=0;while(1){if(u>>>0>=o>>>0){v=g;w=u;break}x=Hyb(k[f+(u<<2)>>2]|0,0,g|0,n|0)|0;g=M;k[m+(u<<2)>>2]=x;x=u+1|0;if((g|0)==0&0==0){r=0;s=0;t=x;break a}else{n=0;u=x}}r=1;s=v;t=w}while(0);if(d?(d=k[a+8>>2]|0,t>>>0>>0):0){w=t;do{k[m+(w<<2)>>2]=k[f+(w<<2)>>2];w=w+1|0}while(w>>>0>>0)}d=a+8|0;if(r){r=k[d>>2]|0;w=r+1|0;f=w>>>0>134217728?134217728:w;w=q?k[j>>2]|0:2;if(f>>>0>w>>>0){m=w<<2;w=m>>>0>>0?f:m;m=w>>>0>134217728?134217728:w;w=KBa(m<<2)|0;if(q){Dyb(w|0,h|0,r<<2|0)|0;OBa(h)}else{Dyb(w|0,a|0,r<<2|0)|0;i[l>>0]=0}k[d>>2]=f;k[j>>2]=m;k[e>>2]=w;y=i[l>>0]|0;z=w}else{k[d>>2]=f;y=c;z=h}k[(y<<24>>24==0?z:j)+(r<<2)>>2]=s;A=y;B=z}else{A=c;B=h}h=A<<24>>24==0?B:j;j=k[d>>2]|0;B=j+-1|0;b:do if(!B)C=j;else{A=j;c=B;while(1){if(k[h+(c<<2)>>2]|0){C=A;break b}k[d>>2]=c;z=c+-1|0;if(!z){C=c;break}else{y=c;c=z;A=y}}}while(0);d=i[b+12>>0]|0;b=a+12|0;i[b>>0]=d;if(!(d<<24>>24!=0&(C|0)==1))return;if(k[h>>2]|0)return;i[b>>0]=0;return}function DB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+48|0;d=c+8|0;e=c;f=c+16|0;g=b+16|0;if((k[g>>2]|0)==(a|0)){h=b;j=k[h+4>>2]|0;l=b+8|0;m=k[l>>2]|0;n=k[l+4>>2]|0;l=d;k[l>>2]=k[h>>2];k[l+4>>2]=j;ZB(a,d,c+34|0);d=e;k[d>>2]=m;k[d+4>>2]=n;ZB(a,e,c+33|0);r=c;return};k[f>>2]=k[b>>2];k[f+4>>2]=k[b+4>>2];k[f+8>>2]=k[b+8>>2];k[f+12>>2]=k[b+12>>2];_B(a,f,c+32|0);f=k[g>>2]|0;if((i[a+12>>0]|0)!=0^(i[f+12>>0]|0)!=0){$B(a,a,f);r=c;return}else{aC(a,a,f);r=c;return}}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+128|0;d=c+80|0;e=c+40|0;f=c;k[a>>2]=0;g=a+4|0;k[g>>2]=0;k[a+8>>2]=0;h=KBa(32)|0;k[a>>2]=h;j=h+32|0;k[a+8>>2]=j;a=h;l=a+32|0;do{i[a>>0]=0;a=a+1|0}while((a|0)<(l|0));k[g>>2]=j;a=f;j=b;l=a+40|0;do{k[a>>2]=k[j>>2];a=a+4|0;j=j+4|0}while((a|0)<(l|0));j=e+32|0;a=d+32|0;l=f+32|0;b=32;do{k[e>>2]=255;k[j>>2]=1;k[d>>2]=0;k[a>>2]=1;KB(d,f,e);b=b+-1|0;i[h+b>>0]=k[d>>2];g=k[l>>2]|0;do if(!g){k[l>>2]=1;k[f>>2]=0}else{m=g+-1|0;n=(((k[f+(m<<2)>>2]|0)>>>0<256)<<31>>31)+g|0;if(!n){k[l>>2]=1;k[f>>2]=0;break}o=(k[f>>2]|0)>>>8;k[f>>2]=o;if(g>>>0>1){p=1;q=o;o=f;s=0;while(1){k[o>>2]=k[f+(p<<2)>>2]<<24|q;t=s+1|0;o=f+(t<<2)|0;q=(k[o>>2]|0)>>>8;k[o>>2]=q;if((t|0)==(m|0))break;else{p=s+2|0;s=t}}}k[l>>2]=n>>>0>8?8:n}while(0)}while((b|0)!=0);r=c;return}function FB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+208|0;e=d+80|0;f=d+40|0;g=d;h=d+120|0;j=d+168|0;l=d+156|0;m=d+128|0;n=k[c>>2]|0;o=c+4|0;p=k[o>>2]|0;q=n;s=p-q|0;t=n+s|0;if(s>>>0<=4294967279)if(s>>>0<11){i[l>>0]=s<<1;u=l+1|0}else v=5;else{GBa(l);v=5}if((v|0)==5){v=s+16&-16;w=KBa(v)|0;k[l+8>>2]=w;k[l>>2]=v|1;k[l+4>>2]=s;u=w}if((p|0)==(q|0))y=u;else{q=n;n=u;while(1){i[n>>0]=i[q>>0]|0;q=q+1|0;if((q|0)==(t|0))break;else n=n+1|0}y=u+s|0}i[y>>0]=0;y=i[l>>0]|0;s=(y&1)==0;u=s?(y&255)>>>1:k[l+4>>2]|0;y=s?l+1|0:k[l+8>>2]|0;s=j;n=s+32|0;do{i[s>>0]=0;s=s+1|0}while((s|0)<(n|0));k[g>>2]=y;k[g+4>>2]=u;k[h>>2]=j;k[h+4>>2]=32;x=0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];Ta(532,f|0,e|0)|0;h=x;x=0;if(h&1){h=Hc()|0;K2a(l);Sc(h|0)}K2a(l);l=WB(b+16|0,j)|0;if((l|0)!=(c|0))XB(l,k[c>>2]|0,k[o>>2]|0);o=j+32|0;c=f+32|0;l=e+32|0;b=e+4|0;h=e+32|0;u=f+4|0;y=0;t=1;q=j;while(1){j=i[q>>0]|0;k[e>>2]=y;k[b>>2]=k[m>>2];k[b+4>>2]=k[m+4>>2];k[b+8>>2]=k[m+8>>2];k[b+12>>2]=k[m+12>>2];k[b+16>>2]=k[m+16>>2];k[b+20>>2]=k[m+20>>2];k[b+24>>2]=k[m+24>>2];k[h>>2]=t;HB(e,8,0);s=g;p=e;n=s+40|0;do{k[s>>2]=k[p>>2];s=s+4|0;p=p+4|0}while((s|0)<(n|0));k[f>>2]=0;k[c>>2]=1;k[e>>2]=j&255;k[l>>2]=1;YB(f,g,e);p=k[f>>2]|0;k[m>>2]=k[u>>2];k[m+4>>2]=k[u+4>>2];k[m+8>>2]=k[u+8>>2];k[m+12>>2]=k[u+12>>2];k[m+16>>2]=k[u+16>>2];k[m+20>>2]=k[u+20>>2];k[m+24>>2]=k[u+24>>2];w=k[c>>2]|0;q=q+1|0;if((q|0)==(o|0)){z=p;A=w;break}else{y=p;t=w}}k[a>>2]=9;k[a+8>>2]=z;z=a+12|0;k[z>>2]=k[m>>2];k[z+4>>2]=k[m+4>>2];k[z+8>>2]=k[m+8>>2];k[z+12>>2]=k[m+12>>2];k[z+16>>2]=k[m+16>>2];k[z+20>>2]=k[m+20>>2];k[z+24>>2]=k[m+24>>2];k[a+40>>2]=A;A=a+48|0;k[A>>2]=-1;k[A+4>>2]=-1;A=a+56|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[A+16>>2]=0;r=d;return}function GB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;e=r;r=r+32|0;f=e;g=k[a>>2]|0;h=g;i=g+((((k[b>>2]|0)-h|0)/80|0)*80|0)|0;b=k[c>>2]|0;c=k[d>>2]|0;d=c-b|0;g=(d|0)/80|0;j=b;b=c;if((d|0)<=0){l=i;r=e;return l|0}d=a+8|0;m=k[d>>2]|0;n=a+4|0;o=k[n>>2]|0;p=o;if((g|0)>((m-p|0)/80|0|0)){q=((p-h|0)/80|0)+g|0;if(q>>>0>53687091){HBa(a);s=k[a>>2]|0;t=k[d>>2]|0}else{s=h;t=m}m=(t-s|0)/80|0;if(m>>>0<26843545){t=m<<1;u=t>>>0>>0?q:t}else u=53687091;k[f+12>>2]=0;k[f+16>>2]=a+8;if(!u)v=0;else v=KBa(u*80|0)|0;k[f>>2]=v;t=v+(((i-s|0)/80|0)*80|0)|0;s=f+8|0;k[s>>2]=t;q=f+4|0;k[q>>2]=t;k[f+12>>2]=v+(u*80|0);if((j|0)!=(b|0)){u=j;v=t;do{k[v>>2]=k[u>>2];w=v+8|0;x=u+8|0;y=w+40|0;do{k[w>>2]=k[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));t=u+48|0;m=k[t+4>>2]|0;h=v+48|0;k[h>>2]=k[t>>2];k[h+4>>2]=m;k[v+56>>2]=k[u+56>>2];m=k[u+60>>2]|0;k[v+60>>2]=m;if(m)h0a(m);k[v+64>>2]=k[u+64>>2];k[v+68>>2]=k[u+68>>2];m=k[u+72>>2]|0;k[v+72>>2]=m;if(m)h0a(m);v=(k[s>>2]|0)+80|0;k[s>>2]=v;u=u+80|0}while((u|0)!=(b|0))}u=VB(a,f,i)|0;v=k[q>>2]|0;q=k[s>>2]|0;if((q|0)!=(v|0)){m=q;do{q=k[m+-8>>2]|0;if(q)j0a(q);q=k[m+-20>>2]|0;m=m+-80|0;if(q)j0a(q)}while((m|0)!=(v|0));k[s>>2]=v}v=k[f>>2]|0;if(v)OBa(v);l=u;r=e;return l|0}else{u=p-i|0;p=(u|0)/80|0;if((g|0)>(p|0)){v=j+(p*80|0)|0;p=v;if((v|0)!=(b|0)){f=v;v=o;do{k[v>>2]=k[f>>2];w=v+8|0;x=f+8|0;y=w+40|0;do{k[w>>2]=k[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));s=f+48|0;m=k[s+4>>2]|0;q=v+48|0;k[q>>2]=k[s>>2];k[q+4>>2]=m;k[v+56>>2]=k[f+56>>2];m=k[f+60>>2]|0;k[v+60>>2]=m;if(m)h0a(m);k[v+64>>2]=k[f+64>>2];k[v+68>>2]=k[f+68>>2];m=k[f+72>>2]|0;k[v+72>>2]=m;if(m)h0a(m);v=(k[n>>2]|0)+80|0;k[n>>2]=v;f=f+80|0}while((f|0)!=(b|0))}if((u|0)>0)z=p;else{l=i;r=e;return l|0}}else z=c;UB(a,i,o,i+(g*80|0)|0);g=z;if((j|0)==(g|0)){l=i;r=e;return l|0}else{A=i;B=j}while(1){k[A>>2]=k[B>>2];if((A|0)!=(B|0)){j=B+40|0;k[A+40>>2]=k[j>>2];Dyb(A+8|0,B+8|0,k[j>>2]<<2|0)|0}j=B+48|0;z=k[j+4>>2]|0;o=A+48|0;k[o>>2]=k[j>>2];k[o+4>>2]=z;z=k[B+56>>2]|0;o=k[B+60>>2]|0;if(o)h0a(o);k[A+56>>2]=z;z=A+60|0;j=k[z>>2]|0;k[z>>2]=o;if(j)j0a(j);k[A+64>>2]=k[B+64>>2];j=k[B+68>>2]|0;o=k[B+72>>2]|0;if(o)h0a(o);k[A+68>>2]=j;j=A+72|0;z=k[j>>2]|0;k[j>>2]=o;if(z)j0a(z);B=B+80|0;if((B|0)==(g|0)){l=i;break}else A=A+80|0}r=e;return l|0}return 0}function HB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;if((b|0)==0&(c|0)==0)return;d=Iyb(b|0,c|0,5)|0;c=b&31;b=a+32|0;e=k[b>>2]|0;if((e|0)==1?(k[a>>2]|0)==0:0)return;f=(c|0)!=0;if(f){g=a;h=(((k[a+(e+-1<<2)>>2]|0)>>>(32-c|0)|0)!=0&1)+e|0}else{g=a;h=e}a=h+d|0;h=a>>>0>8?8:a;k[b>>2]=h;i=(a|0)==(h|0);if(d>>>0>a>>>0){k[b>>2]=1;k[g>>2]=0;return}j=a-h|0;if(f){do if(i){f=k[g+(e+-1-j<<2)>>2]|0;if(a>>>0>(e+d|0)>>>0){h=a+-1|0;k[g+(h-j<<2)>>2]=f>>>(32-c|0);l=j;m=h;break}h=f<>2]=h;if(e>>>0>1)k[f>>2]=(k[g+(e+-2-j<<2)>>2]|0)>>>(32-c|0)|h;l=j+1|0;m=a}else{l=j;m=a}while(0);d=0-l|0;i=l+1|0;if(e>>>0>i>>>0){h=e+-1|0;f=m+-1|0;n=e+-2|0;o=32-c|0;p=i;q=d;do{r=k[g+(h+q<<2)>>2]<>2]=r;k[s>>2]=(k[g+(n+q<<2)>>2]|0)>>>o|r;q=0-p|0;p=p+1|0}while((p|0)!=(e|0));t=e;u=h;v=1-e|0}else{t=i;u=l;v=d}if(e>>>0>>0)w=u;else{k[g+(m+-1+v<<2)>>2]=k[g+(e+-1+v<<2)>>2]<>>0>>0){t=m+-1|0;c=w;do{k[g+(t-c<<2)>>2]=0;c=c+1|0}while((c|0)!=(m|0))}}else{if(j>>>0>>0){m=e+-1|0;c=a+-1|0;t=j;do{k[g+(c-t<<2)>>2]=k[g+(m-t<<2)>>2];t=t+1|0}while(t>>>0>>0);x=e}else x=j;if(x>>>0>>0){j=a+-1|0;e=x;do{k[g+(j-e<<2)>>2]=0;e=e+1|0}while(e>>>0>>0)}}a=(k[b>>2]|0)+-1|0;if(!a)return;else y=a;while(1){if(k[g+(y<<2)>>2]|0){z=34;break}k[b>>2]=y;y=y+-1|0;if(!y){z=34;break}}if((z|0)==34)return}function IB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+16|0;e=d;uy(e,b);b=k[c>>2]|0;f=k[c+4>>2]|0;a:do if((b|0)==(f|0))g=11;else{c=e+4|0;h=e+8|0;i=b;while(1){j=k[c>>2]|0;if((j|0)==(k[h>>2]|0)){x=0;xa(669,e|0,i|0);l=x;x=0;if(l&1)break}else{k[j>>2]=k[i>>2];l=j+8|0;m=i+8|0;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));m=i+48|0;l=k[m+4>>2]|0;n=j+48|0;k[n>>2]=k[m>>2];k[n+4>>2]=l;k[j+56>>2]=k[i+56>>2];l=k[i+60>>2]|0;k[j+60>>2]=l;if(l)h0a(l);k[j+64>>2]=k[i+64>>2];k[j+68>>2]=k[i+68>>2];l=k[i+72>>2]|0;k[j+72>>2]=l;if(l)h0a(l);k[c>>2]=(k[c>>2]|0)+80}i=i+80|0;if((i|0)==(f|0)){g=11;break a}}i=Hc()|0;o=i;p=M}while(0);do if((g|0)==11){x=0;xa(672,a|0,e|0);f=x;x=0;if(f&1){f=Hc()|0;o=f;p=M;break}f=k[e>>2]|0;if(!f){r=d;return}b=e+4|0;i=k[b>>2]|0;if((i|0)==(f|0))q=f;else{c=i;do{k[b>>2]=c+-80;i=k[c+-8>>2]|0;if(i)j0a(i);i=k[c+-20>>2]|0;if(i)j0a(i);c=k[b>>2]|0}while((c|0)!=(f|0));q=k[e>>2]|0}OBa(q);r=d;return}while(0);d=k[e>>2]|0;if(!d)Sc(o|0);q=e+4|0;p=k[q>>2]|0;if((p|0)==(d|0))s=d;else{a=p;do{k[q>>2]=a+-80;p=k[a+-8>>2]|0;if(p)j0a(p);p=k[a+-20>>2]|0;if(p)j0a(p);a=k[q>>2]|0}while((a|0)!=(d|0));s=k[e>>2]|0}OBa(s);Sc(o|0)}function JB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=b+32|0;e=k[d>>2]|0;f=e>>>0>8?8:e;e=a+32|0;k[e>>2]=f;g=k[b>>2]|0;h=k[c>>2]|0;if(g>>>0>=h>>>0){k[a>>2]=g-h;if((a|0)==(b|0))return;Eyb(a+4|0,b+4|0,(k[d>>2]<<2)+-4|0)|0;return}if((f|0)!=1){k[a>>2]=g-h;f=k[b+4>>2]|0;if(!f){c=1;while(1){k[a+(c<<2)>>2]=-1;i=c+1|0;j=k[b+(i<<2)>>2]|0;if(!j)c=i;else{l=j;m=i;break}}}else{l=f;m=1}k[a+(m<<2)>>2]=l+-1;if((a|0)!=(b|0)){l=m+1|0;Eyb(a+(l<<2)|0,b+(l<<2)|0,(k[d>>2]|0)-l<<2|0)|0}l=(k[e>>2]|0)+-1|0;if(!l)return;else n=l;while(1){if(k[a+(n<<2)>>2]|0){o=4;break}k[e>>2]=n;n=n+-1|0;if(!n){o=4;break}}if((o|0)==4)return}n=h-g|0;k[a>>2]=n;if((g|0)==(h|0))return;l=a+4|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;k[l+20>>2]=0;k[e>>2]=8;l=~n;k[a>>2]=l;k[a+4>>2]=-1;k[a+8>>2]=-1;k[a+12>>2]=-1;k[a+16>>2]=-1;k[a+20>>2]=-1;k[a+24>>2]=-1;k[a+28>>2]=-1;if((g|0)!=(h|0)){k[a>>2]=0-n;return}n=Hyb(l|0,0,1,0)|0;l=M;k[a>>2]=n;a:do if(!((l|0)==0&0==0)){n=l;h=0;g=0;while(1){g=g+1|0;d=k[e>>2]|0;if(g>>>0>=d>>>0){p=d;q=n;break}d=Hyb(k[a+(g<<2)>>2]|0,0,n|0,h|0)|0;n=M;k[a+(g<<2)>>2]=d;if((n|0)==0&0==0)break a;else h=0}h=p+1|0;n=h>>>0>8?8:h;k[e>>2]=n;if(n>>>0>p>>>0)k[a+(p<<2)>>2]=q}while(0);q=(k[e>>2]|0)+-1|0;if(!q)return;else r=q;while(1){if(k[a+(r<<2)>>2]|0){o=4;break}k[e>>2]=r;r=r+-1|0;if(!r){o=4;break}}if((o|0)==4)return}function KB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;if((a|0)==(c|0)){d=a+32|0;e=k[d>>2]|0;f=k[b+32>>2]|0;g=e>>>0>>0;h=g?f:e;k[d>>2]=h>>>0>8?8:h;if(g){g=e<<2;Fyb(a+g|0,0,((e>>>0>f>>>0?e:f)<<2)-g|0)|0}if(f){g=0;do{i=a+(g<<2)|0;k[i>>2]=k[b+(g<<2)>>2]&k[i>>2];g=g+1|0}while((g|0)!=(f|0))}if(f>>>0>>0){h=f<<2;Fyb(a+h|0,0,((e>>>0>f>>>0?e:f)<<2)-h|0)|0}h=(k[d>>2]|0)+-1|0;if(!h)return;else j=h;while(1){if(k[a+(j<<2)>>2]|0){l=30;break}k[d>>2]=j;j=j+-1|0;if(!j){l=30;break}}if((l|0)==30)return}if((a|0)==(b|0)){j=a+32|0;d=k[j>>2]|0;h=k[c+32>>2]|0;f=d>>>0>>0;e=f?h:d;k[j>>2]=e>>>0>8?8:e;if(f){f=d<<2;Fyb(a+f|0,0,((d>>>0>h>>>0?d:h)<<2)-f|0)|0}if(h){f=0;do{g=a+(f<<2)|0;k[g>>2]=k[c+(f<<2)>>2]&k[g>>2];f=f+1|0}while((f|0)!=(h|0))}if(h>>>0>>0){e=h<<2;Fyb(a+e|0,0,((d>>>0>h>>>0?d:h)<<2)-e|0)|0}e=(k[j>>2]|0)+-1|0;if(!e)return;else m=e;while(1){if(k[a+(m<<2)>>2]|0){l=30;break}k[j>>2]=m;m=m+-1|0;if(!m){l=30;break}}if((l|0)==30)return}else{m=b+32|0;j=a+32|0;k[j>>2]=k[m>>2];Dyb(a|0,b|0,k[m>>2]<<2|0)|0;m=k[j>>2]|0;b=k[c+32>>2]|0;e=m>>>0>>0;h=e?b:m;k[j>>2]=h>>>0>8?8:h;if(e){e=m<<2;Fyb(a+e|0,0,((m>>>0>b>>>0?m:b)<<2)-e|0)|0}if(b){e=0;do{d=a+(e<<2)|0;k[d>>2]=k[c+(e<<2)>>2]&k[d>>2];e=e+1|0}while((e|0)!=(b|0))}if(b>>>0>>0){h=b<<2;Fyb(a+h|0,0,((m>>>0>b>>>0?m:b)<<2)-h|0)|0}h=(k[j>>2]|0)+-1|0;if(!h)return;else n=h;while(1){if(k[a+(n<<2)>>2]|0){l=30;break}k[j>>2]=n;n=n+-1|0;if(!n){l=30;break}}if((l|0)==30)return}}function LB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;x=0;nb(97,d|0,k[b>>2]|0,b+4|0,c+16|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[g>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}b=(i[a+12>>0]|0)!=0;g=j[f>>1]|0;f=(g&65535)>>>8&255;if(b^(g&255)<<24>>24!=0)h=b?-1:1;else{g=k[a+8>>2]|0;l=k[e>>2]|0;a:do if((g|0)==(l|0)){e=(i[a+13>>0]|0)==0?k[a+4>>2]|0:a;m=f<<24>>24==0?k[d+4>>2]|0:d;n=g;while(1){n=n+-1|0;if((n|0)<=-1){o=0;break a}p=k[e+(n<<2)>>2]|0;q=k[m+(n<<2)>>2]|0;if((p|0)!=(q|0)){s=p;t=q;break}}o=s>>>0>t>>>0?1:-1}else o=g>>>0>l>>>0?1:-1;while(0);h=b?0-o|0:o}o=(h|0)>0;if(f<<24>>24){r=c;return o|0}OBa(k[d+4>>2]|0);r=c;return o|0}function MB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;h=k[a+4>>2]|0;if((h|0)!=(d|0)){k[e>>2]=0;a=h+8|0;j=k[a>>2]|0;l=j>>>0>134217728?134217728:j;if(l>>>0>2){j=l>>>0>8?l:8;m=KBa(j<<2)|0;i[g>>0]=0;k[e>>2]=l;k[d>>2]=j;k[d+4>>2]=m;n=m}else{k[e>>2]=l;n=d}Dyb(n|0,((i[h+13>>0]|0)==0?k[h+4>>2]|0:h)|0,k[a>>2]<<2|0)|0;i[f>>0]=i[h+12>>0]|0}i[f>>0]=0;x=0;f=Ta(533,d|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;if(i[g>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}else{b=f^1;if(i[g>>0]|0){r=c;return b|0}OBa(k[d+4>>2]|0);r=c;return b|0}return 0}function NB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;d=k[b+8>>2]|0;c=d>>>0>8;e=a+32|0;k[e>>2]=c?8:d;Dyb(a|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,(c?32:d<<2)|0)|0;d=k[e>>2]|0;a:do if(i[b+12>>0]|0){if((d|0)==1)if(!(k[a>>2]|0))return;else f=5;else if(d>>>0<8)f=5;if((f|0)==5){c=d<<2;Fyb(a+c|0,0,32-c|0)|0}k[e>>2]=8;c=k[a>>2]|0;g=~c;k[a>>2]=g;h=a+4|0;j=k[h>>2]|0;k[h>>2]=~j;h=a+8|0;l=k[h>>2]|0;k[h>>2]=~l;h=a+12|0;m=k[h>>2]|0;k[h>>2]=~m;h=a+16|0;n=k[h>>2]|0;k[h>>2]=~n;h=a+20|0;o=k[h>>2]|0;k[h>>2]=~o;h=a+24|0;p=k[h>>2]|0;k[h>>2]=~p;h=a+28|0;q=k[h>>2]|0;k[h>>2]=~q;if((q|0)==-1){k[e>>2]=7;if((p|0)==-1){k[e>>2]=6;if((o|0)==-1){k[e>>2]=5;if((n|0)==-1){k[e>>2]=4;if((m|0)==-1){k[e>>2]=3;if((l|0)==-1){l=(j|0)==-1;k[e>>2]=l?1:2;r=l?1:2}else r=3}else r=4}else r=5}else r=6}else r=7}else r=8;if(c){k[a>>2]=0-c;s=r;break}c=Hyb(g|0,0,1,0)|0;g=M;k[a>>2]=c;b:do if(!((g|0)==0&0==0)){c=g;l=0;j=0;while(1){j=j+1|0;m=k[e>>2]|0;if(j>>>0>=m>>>0){t=m;u=c;break}m=Hyb(k[a+(j<<2)>>2]|0,0,c|0,l|0)|0;c=M;k[a+(j<<2)>>2]=m;if((c|0)==0&0==0)break b;else l=0}l=t+1|0;c=l>>>0>8?8:l;k[e>>2]=c;if(c>>>0>t>>>0)k[a+(t<<2)>>2]=u}while(0);g=k[e>>2]|0;c=g+-1|0;if(!c)s=g;else{l=c;c=g;while(1){if(k[a+(l<<2)>>2]|0){s=c;break a}k[e>>2]=l;g=l+-1|0;if(!g){s=l;break}else{j=l;l=g;c=j}}}}else s=d;while(0);d=s+-1|0;if(!d)return;else v=d;while(1){if(k[a+(v<<2)>>2]|0){f=21;break}k[e>>2]=v;v=v+-1|0;if(!v){f=21;break}}if((f|0)==21)return}function OB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/80|0)+1|0;if(e>>>0>53687091){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=((k[g>>2]|0)-f|0)/80|0;if(h>>>0<26843545){i=h<<1;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=(i-f|0)/80|0;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=53687091;q=e;r=(e-f|0)/80|0;s=6}if((s|0)==6){l=p;m=KBa(p*80|0)|0;n=r;o=q}q=m+(n*80|0)|0;r=q;p=m+(l*80|0)|0;k[q>>2]=k[b>>2];l=m+(n*80|0)+8|0;s=b+8|0;e=l+40|0;do{k[l>>2]=k[s>>2];l=l+4|0;s=s+4|0}while((l|0)<(e|0));k[m+(n*80|0)+48>>2]=k[b+48>>2];k[m+(n*80|0)+52>>2]=k[b+52>>2];j=b+56|0;k[m+(n*80|0)+56>>2]=k[j>>2];h=b+60|0;k[m+(n*80|0)+60>>2]=k[h>>2];k[j>>2]=0;k[h>>2]=0;k[m+(n*80|0)+64>>2]=k[b+64>>2];h=b+68|0;k[m+(n*80|0)+68>>2]=k[h>>2];j=b+72|0;k[m+(n*80|0)+72>>2]=k[j>>2];k[h>>2]=0;k[j>>2]=0;j=q+80|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-80|0;k[o+-80>>2]=k[f>>2];l=o+-72|0;s=r+-72|0;e=l+40|0;do{k[l>>2]=k[s>>2];l=l+4|0;s=s+4|0}while((l|0)<(e|0));k[o+-32>>2]=k[r+-32>>2];k[o+-28>>2]=k[r+-28>>2];h=r+-24|0;k[o+-24>>2]=k[h>>2];n=r+-20|0;k[o+-20>>2]=k[n>>2];k[h>>2]=0;k[n>>2]=0;k[o+-16>>2]=k[r+-16>>2];n=r+-12|0;k[o+-12>>2]=k[n>>2];h=r+-8|0;k[o+-8>>2]=k[h>>2];k[n>>2]=0;k[h>>2]=0;o=q+-80|0;h=o;if((f|0)==(d|0)){v=h;break}else q=h}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=j;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-8>>2]|0;if(t)j0a(t);t=k[g+-20>>2]|0;g=g+-80|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function PB(a,b,c){a=a|0;b=b|0;c=c|0;return}function QB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+16|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;h=k[b+32>>2]|0;j=h>>>0>134217728;l=j?134217728:h;if(l>>>0>2){m=l>>>0>8?l:8;n=KBa(m<<2)|0;k[n>>2]=k[d>>2];i[g>>0]=0;k[e>>2]=l;k[d>>2]=m;k[d+4>>2]=n;o=n}else{k[e>>2]=l;o=d}Dyb(o|0,b|0,(j?536870912:h<<2)|0)|0;i[f>>0]=0;f=(i[g>>0]|0)==0;if(f)p=k[d+4>>2]|0;else p=d;g=k[e>>2]|0;h=g+-1|0;a:do if(!h)q=g;else{j=h;b=g;while(1){if(k[p+(j<<2)>>2]|0){q=b;break a}k[e>>2]=j;o=j+-1|0;if(!o){q=j;break}else{l=j;j=o;b=l}}}while(0);b:do if(!(i[a+12>>0]|0)){e=k[a+8>>2]|0;if((e|0)!=(q|0)){s=e>>>0>q>>>0?1:-1;break}e=(i[a+13>>0]|0)==0?k[a+4>>2]|0:a;p=f?k[d+4>>2]|0:d;g=q;while(1){g=g+-1|0;if((g|0)<=-1){s=0;break b}h=k[e+(g<<2)>>2]|0;b=k[p+(g<<2)>>2]|0;if((h|0)!=(b|0)){t=h;u=b;break}}s=t>>>0>u>>>0?1:-1}else s=-1;while(0);u=(s|0)<0;if(!f){r=c;return u|0}OBa(k[d+4>>2]|0);r=c;return u|0}function RB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+16|0;b=d;k[b>>2]=0;e=b+8|0;k[e>>2]=1;f=b+12|0;i[f>>0]=0;g=b+13|0;i[g>>0]=1;h=k[c>>2]|0;l=k[c+4>>2]|0;x=0;if(!(i[l+12>>0]|0)){TB(b,h,l);c=x;x=0;if(c&1)m=4}else{SB(b,h,l);l=x;x=0;if(l&1)m=4}if((m|0)==4){m=Hc()|0;if(i[g>>0]|0)Sc(m|0);OBa(k[b+4>>2]|0);Sc(m|0)}if((b|0)==(a|0)){n=a+12|0;o=i[g>>0]|0}else{m=a+8|0;k[m>>2]=0;l=k[e>>2]|0;h=l>>>0>134217728?134217728:l;c=a+13|0;p=i[c>>0]|0;q=p<<24>>24==0;s=q?k[a>>2]|0:2;do if(h>>>0>s>>>0){t=s<<2;u=t>>>0>>0?h:t;t=u>>>0>134217728?134217728:u;x=0;u=Ba(563,t<<2|0)|0;v=x;x=0;if(v&1){v=Hc()|0;if(i[g>>0]|0)Sc(v|0);OBa(k[b+4>>2]|0);Sc(v|0)}else{if(q){v=a+4|0;OBa(k[v>>2]|0);w=k[e>>2]|0;y=v}else{i[c>>0]=0;w=l;y=a+4|0}k[m>>2]=h;k[a>>2]=t;k[y>>2]=u;z=i[c>>0]|0;A=w;break}}else{k[m>>2]=h;z=p;A=l}while(0);Dyb((z<<24>>24==0?k[a+4>>2]|0:a)|0,((i[g>>0]|0)==0?k[b+4>>2]|0:b)|0,A<<2|0)|0;A=j[f>>1]|0;f=a+12|0;i[f>>0]=A;n=f;o=(A&65535)>>>8&255}i[n>>0]=0;if(o<<24>>24){r=d;return}OBa(k[b+4>>2]|0);r=d;return}function SB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;d=k[b+32>>2]|0;e=k[c+8>>2]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){j=Hyb(k[((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)>>2]|0,0,k[b>>2]|0,0)|0;l=M;m=a+13|0;n=(i[m>>0]|0)==0;o=a+4|0;p=k[o>>2]|0;q=n?p:a;k[q>>2]=j;k[q+4>>2]=l;q=(l|0)!=0?2:1;l=n?k[a>>2]|0:2;if(q>>>0>l>>>0){j=l<<2;l=j>>>0>>0?q:j;j=l>>>0>134217728?134217728:l;l=KBa(j<<2)|0;if(n){n=a+8|0;Dyb(l|0,p|0,k[n>>2]<<2|0)|0;OBa(p);r=n}else{n=a+8|0;Dyb(l|0,a|0,k[n>>2]<<2|0)|0;i[m>>0]=0;r=n}k[r>>2]=q;k[a>>2]=j;k[o>>2]=l}else k[a+8>>2]=q;i[a+12>>0]=0;return}q=h>>>0>134217728?134217728:h;l=a+13|0;o=i[l>>0]|0;j=o<<24>>24==0;r=k[a>>2]|0;n=j?r:2;if(q>>>0>n>>>0){m=n<<2;n=m>>>0>>0?q:m;m=n>>>0>134217728?134217728:n;n=KBa(m<<2)|0;if(j){j=a+4|0;p=k[j>>2]|0;s=a+8|0;Dyb(n|0,p|0,k[s>>2]<<2|0)|0;OBa(p);t=j;u=s}else{s=a+8|0;Dyb(n|0,a|0,k[s>>2]<<2|0)|0;i[l>>0]=0;t=a+4|0;u=s}k[u>>2]=q;k[a>>2]=m;k[t>>2]=n;v=m;w=i[l>>0]|0}else{k[a+8>>2]=q;v=r;w=o}o=b;b=(i[c+13>>0]|0)==0?k[c+4>>2]|0:c;c=w<<24>>24==0;r=a+4|0;q=k[r>>2]|0;m=c?q:a;n=m+(g<<2)|0;t=f?b:o;if(!g){x=t;y=0;z=0;A=m}else{u=((-8-((e>>>0>d>>>0?d:e)<<2^-4)|0)>>>2)+1|0;e=t;t=f?o:b;b=0;o=0;f=m;while(1){d=e;s=t;j=k[s>>2]|0;p=Hyb(k[d>>2]|0,0,b|0,o|0)|0;B=Hyb(p|0,M|0,j|0,0)|0;j=M;k[f>>2]=B;f=f+4|0;B=d+4|0;if((f|0)==(n|0)){C=B;D=j;E=0;break}else{e=B;t=s+4|0;b=j;o=0}}x=C;y=D;z=E;A=m+(u<<2)|0}u=n+(h-g<<2)|0;g=(y|0)==0&(z|0)==0;do if((A|0)==(u|0))if(g){F=w;G=q}else{H=y;I=26}else{n=x;m=y;E=z;D=g;C=A;while(1){o=n;if(D){J=n;K=o;L=C;break}b=Hyb(k[o>>2]|0,0,m|0,E|0)|0;m=M;k[C>>2]=b;C=C+4|0;D=(m|0)==0&0==0;if((C|0)==(u|0)){I=24;break}else{n=o+4|0;E=0}}if((I|0)==24)if(D){F=w;G=q;break}else{H=m;I=26;break}if((K|0)==(L|0)){F=w;G=q}else{Eyb(L|0,J|0,K+(u-L>>2<<2)-J|0)|0;F=i[l>>0]|0;G=k[r>>2]|0}}while(0);if((I|0)==26){I=h+1|0;J=I>>>0>134217728?134217728:I;I=c?v:2;if(J>>>0>I>>>0){v=I<<2;I=v>>>0>>0?J:v;v=I>>>0>134217728?134217728:I;I=KBa(v<<2)|0;if(c){c=a+8|0;Dyb(I|0,q|0,k[c>>2]<<2|0)|0;OBa(q);N=c}else{c=a+8|0;Dyb(I|0,a|0,k[c>>2]<<2|0)|0;i[l>>0]=0;N=c}k[N>>2]=J;k[a>>2]=v;k[r>>2]=I;O=i[l>>0]|0;P=I}else{k[a+8>>2]=J;O=w;P=q}k[(O<<24>>24==0?P:a)+(h<<2)>>2]=H;F=O;G=P}P=F<<24>>24==0?G:a;G=a+8|0;F=(k[G>>2]|0)+-1|0;a:do if(F){O=F;do{if(k[P+(O<<2)>>2]|0)break a;k[G>>2]=O;O=O+-1|0}while((O|0)!=0)}while(0);i[a+12>>0]=0;return}function TB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=k[b+32>>2]|0;e=k[c+8>>2]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){f=k[b>>2]|0;j=k[((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)>>2]|0;l=j>>>0>f>>>0;m=(l?j:f)-(l?f:j)|0;j=a+13|0;f=i[j>>0]|0;do if(f<<24>>24==0&(k[a>>2]|0)==0){x=0;n=Ba(563,4)|0;o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)}else{o=a+4|0;p=k[o>>2]|0;q=a+8|0;Dyb(n|0,p|0,k[q>>2]<<2|0)|0;OBa(p);k[q>>2]=1;k[a>>2]=1;k[o>>2]=n;r=i[j>>0]|0;s=n;break}}else{k[a+8>>2]=1;r=f;s=k[a+4>>2]|0}while(0);f=r<<24>>24==0;k[(f?s:a)>>2]=m;m=a+12|0;i[m>>0]=l&1;if(!l)return;if(k[(f?s:a)>>2]|0)return;i[m>>0]=0;return}a:do if((d|0)==(e|0)){m=(i[c+13>>0]|0)==0?k[c+4>>2]|0:c;s=d;while(1){s=s+-1|0;if((s|0)<=-1){t=0;break a}f=k[b+(s<<2)>>2]|0;l=k[m+(s<<2)>>2]|0;if((f|0)!=(l|0)){u=f;v=l;break}}t=u>>>0>v>>>0?1:-1}else t=d>>>0>e>>>0?1:-1;while(0);e=h>>>0>134217728?134217728:h;d=a+13|0;v=i[d>>0]|0;u=v<<24>>24==0;s=k[a>>2]|0;m=u?s:2;if(e>>>0>m>>>0){l=m<<2;m=l>>>0>>0?e:l;l=m>>>0>134217728?134217728:m;m=KBa(l<<2)|0;if(u){u=a+4|0;f=k[u>>2]|0;r=a+8|0;Dyb(m|0,f|0,k[r>>2]<<2|0)|0;OBa(f);w=u;y=r}else{r=a+8|0;Dyb(m|0,a|0,k[r>>2]<<2|0)|0;i[d>>0]=0;w=a+4|0;y=r}k[y>>2]=e;k[a>>2]=l;k[w>>2]=m;z=i[d>>0]|0;A=l}else{k[a+8>>2]=e;z=v;A=s}s=b;b=(i[c+13>>0]|0)==0?k[c+4>>2]|0:c;c=z<<24>>24==0;v=a+4|0;e=k[v>>2]|0;l=c?e:a;if((t|0)>=0)if(!t){do if(c&(A|0)==0){x=0;t=Ba(563,4)|0;m=x;x=0;if(m&1){m=Hc(0)|0;Fg(m)}else{m=a+8|0;Dyb(t|0,e|0,k[m>>2]<<2|0)|0;OBa(e);k[m>>2]=1;k[a>>2]=1;k[v>>2]=t;B=i[d>>0]|0;C=t;break}}else{k[a+8>>2]=1;B=z;C=e}while(0);k[(B<<24>>24==0?C:a)>>2]=0;i[a+12>>0]=0;return}else{D=s;E=b;F=0}else{D=b;E=s;F=1}if(g){s=D;b=E;E=0;C=0;B=0;while(1){A=Gyb(k[s+(B<<2)>>2]|0,0,k[b+(B<<2)>>2]|0,0)|0;c=Gyb(A|0,M|0,E|0,C|0)|0;k[l+(B<<2)>>2]=c;c=M&1;B=B+1|0;if(B>>>0>=g>>>0){G=c;H=0;break}else{E=c;C=0}}if(((G|0)!=0|(H|0)!=0)&h>>>0>g>>>0){C=D;E=G;G=H;H=g;while(1){B=Gyb(k[C+(H<<2)>>2]|0,0,E|0,G|0)|0;k[l+(H<<2)>>2]=B;E=M&1;B=H+1|0;if(!(((E|0)!=0|0!=0)&h>>>0>B>>>0)){I=B;break}else{G=0;H=B}}}else I=g}else I=0;if((h|0)!=(I|0)?(g=D,(g|0)!=(l|0)):0){Eyb(l+(I<<2)|0,g+(I<<2)|0,h-I<<2|0)|0;J=i[d>>0]|0;K=k[v>>2]|0}else{J=z;K=e}e=J<<24>>24==0?K:a;K=a+8|0;J=k[K>>2]|0;z=J+-1|0;b:do if(!z)L=J;else{v=z;d=J;while(1){if(k[e+(v<<2)>>2]|0){L=d;break b}k[K>>2]=v;I=v+-1|0;if(!I){L=v;break}else{h=v;v=I;d=h}}}while(0);K=a+12|0;i[K>>0]=0;if(!F)return;i[K>>0]=1;if((L|0)!=1)return;if(k[e>>2]|0)return;i[K>>0]=0;return}function UB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;e=a+4|0;a=k[e>>2]|0;f=b+(((a-d|0)/80|0)*80|0)|0;if(f>>>0>>0){g=a;h=f;do{k[g>>2]=k[h>>2];i=g+8|0;j=h+8|0;l=i+40|0;do{k[i>>2]=k[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(l|0));k[g+48>>2]=k[h+48>>2];k[g+52>>2]=k[h+52>>2];m=h+56|0;k[g+56>>2]=k[m>>2];n=h+60|0;k[g+60>>2]=k[n>>2];k[m>>2]=0;k[n>>2]=0;k[g+64>>2]=k[h+64>>2];n=h+68|0;k[g+68>>2]=k[n>>2];m=h+72|0;k[g+72>>2]=k[m>>2];k[n>>2]=0;k[m>>2]=0;h=h+80|0;g=(k[e>>2]|0)+80|0;k[e>>2]=g}while(h>>>0>>0)}if((a|0)==(d|0))return;else{o=f;p=a}do{a=p;p=p+-80|0;f=o;o=o+-80|0;k[p>>2]=k[o>>2];i=a+-72|0;j=f+-72|0;l=i+36|0;do{k[i>>2]=k[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(l|0));k[a+-32>>2]=k[f+-32>>2];k[a+-28>>2]=k[f+-28>>2];d=f+-24|0;c=k[d>>2]|0;h=f+-20|0;g=k[h>>2]|0;k[d>>2]=0;k[h>>2]=0;k[a+-24>>2]=c;c=a+-20|0;h=k[c>>2]|0;k[c>>2]=g;if(h)j0a(h);k[a+-16>>2]=k[f+-16>>2];h=f+-12|0;g=k[h>>2]|0;c=f+-8|0;d=k[c>>2]|0;k[h>>2]=0;k[c>>2]=0;k[a+-12>>2]=g;g=a+-8|0;c=k[g>>2]|0;k[g>>2]=d;if(c)j0a(c)}while((o|0)!=(b|0));return}function VB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;d=b+4|0;e=k[d>>2]|0;f=k[a>>2]|0;if((f|0)==(c|0))g=e;else{h=c;i=e;while(1){j=h;h=h+-80|0;k[i+-80>>2]=k[h>>2];l=i+-72|0;m=j+-72|0;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));k[i+-32>>2]=k[j+-32>>2];k[i+-28>>2]=k[j+-28>>2];o=j+-24|0;k[i+-24>>2]=k[o>>2];p=j+-20|0;k[i+-20>>2]=k[p>>2];k[o>>2]=0;k[p>>2]=0;k[i+-16>>2]=k[j+-16>>2];p=j+-12|0;k[i+-12>>2]=k[p>>2];o=j+-8|0;k[i+-8>>2]=k[o>>2];k[p>>2]=0;k[o>>2]=0;o=(k[d>>2]|0)+-80|0;k[d>>2]=o;if((h|0)==(f|0)){g=o;break}else i=o}}i=a+4|0;f=k[i>>2]|0;h=b+8|0;if((f|0)==(c|0)){q=d;r=g;s=k[a>>2]|0;k[a>>2]=r;k[q>>2]=s;t=k[i>>2]|0;u=k[h>>2]|0;k[i>>2]=u;k[h>>2]=t;v=a+8|0;w=b+12|0;x=k[v>>2]|0;y=k[w>>2]|0;k[v>>2]=y;k[w>>2]=x;z=k[q>>2]|0;k[b>>2]=z;return e|0}g=c;c=k[h>>2]|0;do{k[c>>2]=k[g>>2];l=c+8|0;m=g+8|0;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));k[c+48>>2]=k[g+48>>2];k[c+52>>2]=k[g+52>>2];j=g+56|0;k[c+56>>2]=k[j>>2];o=g+60|0;k[c+60>>2]=k[o>>2];k[j>>2]=0;k[o>>2]=0;k[c+64>>2]=k[g+64>>2];o=g+68|0;k[c+68>>2]=k[o>>2];j=g+72|0;k[c+72>>2]=k[j>>2];k[o>>2]=0;k[j>>2]=0;g=g+80|0;c=(k[h>>2]|0)+80|0;k[h>>2]=c}while((g|0)!=(f|0));q=d;r=k[d>>2]|0;s=k[a>>2]|0;k[a>>2]=r;k[q>>2]=s;t=k[i>>2]|0;u=k[h>>2]|0;k[i>>2]=u;k[h>>2]=t;v=a+8|0;w=b+12|0;x=k[v>>2]|0;y=k[w>>2]|0;k[v>>2]=y;k[w>>2]=x;z=k[q>>2]|0;k[b>>2]=z;return e|0}function WB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=f;a:while(1){h=0;while(1){j=i[b+h>>0]|0;l=i[g+16+h>>0]|0;if((j&255)<(l&255)){m=5;break}h=h+1|0;if(!(h>>>0<32&(j&255)<=(l&255))){n=0;m=7;break}}if((m|0)==5){m=0;h=k[g>>2]|0;if(!h){o=g;p=g;m=6;break}else q=h}else if((m|0)==7){while(1){m=0;h=i[g+16+n>>0]|0;l=i[b+n>>0]|0;if((h&255)<(l&255))break;n=n+1|0;if(!(n>>>0<32&(h&255)<=(l&255))){s=g;m=12;break a}else m=7}l=g+4|0;h=k[l>>2]|0;if(!h){t=l;u=g;m=11;break}else q=h}g=q}if((m|0)==6){k[d>>2]=p;v=o;w=p;break}else if((m|0)==11){k[d>>2]=u;v=t;w=u;break}else if((m|0)==12){k[d>>2]=s;x=d;y=s;z=s;m=14;break}}else{k[d>>2]=e;x=e;y=f;z=e;m=14}while(0);if((m|0)==14)if(!y){v=x;w=z}else{A=y;B=A+48|0;r=c;return B|0}y=KBa(60)|0;z=y+16|0;x=b;b=z+32|0;do{i[z>>0]=i[x>>0]|0;z=z+1|0;x=x+1|0}while((z|0)<(b|0));k[y+48>>2]=0;k[y+52>>2]=0;k[y+56>>2]=0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=w;k[v>>2]=y;w=k[k[a>>2]>>2]|0;if(!w)C=y;else{k[a>>2]=w;C=k[v>>2]|0}ui(k[a+4>>2]|0,C);C=a+8|0;k[C>>2]=(k[C>>2]|0)+1;A=y;B=A+48|0;r=c;return B|0}function XB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;d=b;e=c-d|0;f=a+8|0;g=k[f>>2]|0;h=k[a>>2]|0;j=h;if(e>>>0<=(g-h|0)>>>0){l=a+4|0;m=(k[l>>2]|0)-h|0;n=e>>>0>m>>>0;o=b+m|0;m=n?o:c;p=m-d|0;Eyb(j|0,b|0,p|0)|0;d=j+p|0;if(!n){if((k[l>>2]|0)==(d|0))return;k[l>>2]=d;return}if((m|0)==(c|0))return;m=o;o=k[l>>2]|0;do{i[o>>0]=i[m>>0]|0;o=(k[l>>2]|0)+1|0;k[l>>2]=o;m=m+1|0}while((m|0)!=(c|0));return}if(!h)q=g;else{g=a+4|0;if((k[g>>2]|0)!=(j|0))k[g>>2]=j;OBa(j);k[f>>2]=0;k[g>>2]=0;k[a>>2]=0;q=0}g=(e|0)<0;if(g){HBa(a);r=k[a>>2]|0;s=k[f>>2]|0}else{r=0;s=q}q=s-r|0;if(q>>>0<1073741823){r=q<<1;q=r>>>0>=e>>>0;if(q|g^1)t=q?r:e;else{HBa(a);t=e}}else t=2147483647;e=KBa(t)|0;r=a+4|0;k[r>>2]=e;k[a>>2]=e;k[f>>2]=e+t;if((b|0)==(c|0))return;else{u=b;v=e}do{i[v>>0]=i[u>>0]|0;v=(k[r>>2]|0)+1|0;k[r>>2]=v;u=u+1|0}while((u|0)!=(c|0));return}function YB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;if((a|0)==(c|0)){d=a+32|0;e=k[d>>2]|0;f=k[b+32>>2]|0;g=e>>>0>>0;h=g?f:e;k[d>>2]=h>>>0>8?8:h;if(g){g=e<<2;Fyb(a+g|0,0,((e>>>0>f>>>0?e:f)<<2)-g|0)|0}if(f){g=0;do{e=a+(g<<2)|0;k[e>>2]=k[b+(g<<2)>>2]|k[e>>2];g=g+1|0}while((g|0)!=(f|0))}f=(k[d>>2]|0)+-1|0;if(!f)return;else i=f;while(1){if(k[a+(i<<2)>>2]|0){j=24;break}k[d>>2]=i;i=i+-1|0;if(!i){j=24;break}}if((j|0)==24)return}if((a|0)==(b|0)){i=a+32|0;d=k[i>>2]|0;f=k[c+32>>2]|0;g=d>>>0>>0;e=g?f:d;k[i>>2]=e>>>0>8?8:e;if(g){g=d<<2;Fyb(a+g|0,0,((d>>>0>f>>>0?d:f)<<2)-g|0)|0}if(f){g=0;do{d=a+(g<<2)|0;k[d>>2]=k[c+(g<<2)>>2]|k[d>>2];g=g+1|0}while((g|0)!=(f|0))}f=(k[i>>2]|0)+-1|0;if(!f)return;else l=f;while(1){if(k[a+(l<<2)>>2]|0){j=24;break}k[i>>2]=l;l=l+-1|0;if(!l){j=24;break}}if((j|0)==24)return}else{l=b+32|0;i=a+32|0;k[i>>2]=k[l>>2];Dyb(a|0,b|0,k[l>>2]<<2|0)|0;l=k[i>>2]|0;b=k[c+32>>2]|0;f=l>>>0>>0;g=f?b:l;k[i>>2]=g>>>0>8?8:g;if(f){f=l<<2;Fyb(a+f|0,0,((l>>>0>b>>>0?l:b)<<2)-f|0)|0}if(b){f=0;do{l=a+(f<<2)|0;k[l>>2]=k[c+(f<<2)>>2]|k[l>>2];f=f+1|0}while((f|0)!=(b|0))}b=(k[i>>2]|0)+-1|0;if(!b)return;else m=b;while(1){if(k[a+(m<<2)>>2]|0){j=24;break}k[i>>2]=m;m=m+-1|0;if(!m){j=24;break}}if((j|0)==24)return}}function ZB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+16|0;e=c;k[e>>2]=0;k[e+8>>2]=1;f=e+12|0;i[f>>0]=0;g=e+13|0;i[g>>0]=1;k[d>>2]=k[k[b>>2]>>2];x=0;fb(201,e|0,k[b+4>>2]|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;if(i[g>>0]|0)Sc(d|0);OBa(k[e+4>>2]|0);Sc(d|0)}x=0;if((i[a+12>>0]|0)!=0^(i[f>>0]|0)!=0){$B(a,a,e);f=x;x=0;if(f&1)h=11;else h=8}else{aC(a,a,e);a=x;x=0;if(a&1)h=11;else h=8}if((h|0)==8){if(i[g>>0]|0){r=c;return}OBa(k[e+4>>2]|0);r=c;return}else if((h|0)==11){h=Hc()|0;if(i[g>>0]|0)Sc(h|0);OBa(k[e+4>>2]|0);Sc(h|0)}}function _B(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0;c=r;r=r+48|0;d=c+32|0;e=c+8|0;f=c+24|0;g=c;h=b+4|0;l=b+8|0;if((k[b+12>>2]|0)!=(a|0)){m=k[h>>2]|0;k[d>>2]=k[k[b>>2]>>2];bC(a,m,d);m=l;n=k[m+4>>2]|0;o=f;k[o>>2]=k[m>>2];k[o+4>>2]=n;ZB(a,f,c+37|0);r=c;return}if((k[h>>2]|0)!=(a|0)){k[d>>2]=k[k[l>>2]>>2];bC(a,a,d);l=b;h=k[l+4>>2]|0;f=g;k[f>>2]=k[l>>2];k[f+4>>2]=h;ZB(a,g,c+36|0);r=c;return}k[e>>2]=0;g=e+8|0;k[g>>2]=1;h=e+12|0;i[h>>0]=0;f=e+13|0;i[f>>0]=1;x=0;fb(202,e|0,b|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;if(i[f>>0]|0)Sc(d|0);OBa(k[e+4>>2]|0);Sc(d|0)}else{d=e;b=k[d>>2]|0;l=k[d+4>>2]|0;d=a;n=k[d+4>>2]|0;o=e;k[o>>2]=k[d>>2];k[o+4>>2]=n;o=a;k[o>>2]=b;k[o+4>>2]=l;l=a+12|0;o=j[h>>1]|0;i[h>>0]=i[l>>0]|0;i[l>>0]=o;l=a+13|0;h=i[l>>0]|0;i[f>>0]=h;i[l>>0]=(o&65535)>>>8;o=a+8|0;a=k[g>>2]|0;k[g>>2]=k[o>>2];k[o>>2]=a;if(!(h<<24>>24))OBa(n);r=c;return}}function $B(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;d=k[b+8>>2]|0;e=k[c+8>>2]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){f=k[((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)>>2]|0;j=k[((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)>>2]|0;l=j>>>0>f>>>0;m=(i[b+12>>0]|0)!=0^l;n=(l?j:f)-(l?f:j)|0;j=a+13|0;f=i[j>>0]|0;do if(f<<24>>24==0&(k[a>>2]|0)==0){x=0;l=Ba(563,4)|0;o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)}else{o=a+4|0;p=k[o>>2]|0;q=a+8|0;Dyb(l|0,p|0,k[q>>2]<<2|0)|0;OBa(p);k[q>>2]=1;k[a>>2]=1;k[o>>2]=l;r=i[j>>0]|0;s=l;break}}else{k[a+8>>2]=1;r=f;s=k[a+4>>2]|0}while(0);f=r<<24>>24==0;k[(f?s:a)>>2]=n;n=a+12|0;i[n>>0]=m&1;if(!m)return;if(k[(f?s:a)>>2]|0)return;i[n>>0]=0;return}a:do if((d|0)==(e|0)){n=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;s=(i[c+13>>0]|0)==0?k[c+4>>2]|0:c;f=d;while(1){f=f+-1|0;if((f|0)<=-1){t=0;break a}m=k[n+(f<<2)>>2]|0;r=k[s+(f<<2)>>2]|0;if((m|0)!=(r|0)){u=m;v=r;break}}t=u>>>0>v>>>0?1:-1}else t=d>>>0>e>>>0?1:-1;while(0);e=h>>>0>134217728?134217728:h;d=a+13|0;v=i[d>>0]|0;u=v<<24>>24==0;f=k[a>>2]|0;s=u?f:2;if(e>>>0>s>>>0){n=s<<2;s=n>>>0>>0?e:n;n=s>>>0>134217728?134217728:s;s=KBa(n<<2)|0;if(u){u=a+4|0;r=k[u>>2]|0;m=a+8|0;Dyb(s|0,r|0,k[m>>2]<<2|0)|0;OBa(r);w=u;y=m}else{m=a+8|0;Dyb(s|0,a|0,k[m>>2]<<2|0)|0;i[d>>0]=0;w=a+4|0;y=m}k[y>>2]=e;k[a>>2]=n;k[w>>2]=s;z=i[d>>0]|0;A=n}else{k[a+8>>2]=e;z=v;A=f}f=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;v=(i[c+13>>0]|0)==0?k[c+4>>2]|0:c;c=z<<24>>24==0;e=a+4|0;n=k[e>>2]|0;s=c?n:a;if((t|0)>=0)if(!t){do if(c&(A|0)==0){x=0;t=Ba(563,4)|0;w=x;x=0;if(w&1){w=Hc(0)|0;Fg(w)}else{w=a+8|0;Dyb(t|0,n|0,k[w>>2]<<2|0)|0;OBa(n);k[w>>2]=1;k[a>>2]=1;k[e>>2]=t;B=i[d>>0]|0;C=t;break}}else{k[a+8>>2]=1;B=z;C=n}while(0);k[(B<<24>>24==0?C:a)>>2]=0;i[a+12>>0]=0;return}else{D=f;E=v;F=0}else{D=v;E=f;F=1}if(g){f=D;v=E;E=0;C=0;B=0;while(1){A=Gyb(k[f+(B<<2)>>2]|0,0,k[v+(B<<2)>>2]|0,0)|0;c=Gyb(A|0,M|0,E|0,C|0)|0;k[s+(B<<2)>>2]=c;c=M&1;B=B+1|0;if(B>>>0>=g>>>0){G=c;H=0;break}else{E=c;C=0}}if(((G|0)!=0|(H|0)!=0)&h>>>0>g>>>0){C=D;E=G;G=H;H=g;while(1){B=Gyb(k[C+(H<<2)>>2]|0,0,E|0,G|0)|0;k[s+(H<<2)>>2]=B;E=M&1;B=H+1|0;if(!(((E|0)!=0|0!=0)&h>>>0>B>>>0)){I=B;break}else{G=0;H=B}}}else I=g}else I=0;if((h|0)!=(I|0)?(g=D,(g|0)!=(s|0)):0){Eyb(s+(I<<2)|0,g+(I<<2)|0,h-I<<2|0)|0;J=i[d>>0]|0;K=k[e>>2]|0}else{J=z;K=n}n=J<<24>>24==0?K:a;K=a+8|0;J=k[K>>2]|0;z=J+-1|0;b:do if(!z)L=J;else{e=z;d=J;while(1){if(k[n+(e<<2)>>2]|0){L=d;break b}k[K>>2]=e;I=e+-1|0;if(!I){L=e;break}else{h=e;e=I;d=h}}}while(0);K=i[b+12>>0]|0;b=a+12|0;i[b>>0]=K;a=(L|0)==1;if(K<<24>>24!=0&a?(k[n>>2]|0)==0:0){i[b>>0]=0;N=0}else N=K;if(!F)return;i[b>>0]=N^1;if(!(N<<24>>24!=1&a))return;if(k[n>>2]|0)return;i[b>>0]=0;return}function aC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;d=k[b+8>>2]|0;e=k[c+8>>2]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){j=i[b+12>>0]|0;l=j<<24>>24==0;m=Hyb(k[((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)>>2]|0,0,k[((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)>>2]|0,0)|0;n=M;o=a+13|0;p=(i[o>>0]|0)==0;q=a+4|0;r=k[q>>2]|0;s=p?r:a;k[s>>2]=m;k[s+4>>2]=n;s=(n|0)!=0?2:1;n=p?k[a>>2]|0:2;if(s>>>0>n>>>0){m=n<<2;n=m>>>0>>0?s:m;m=n>>>0>134217728?134217728:n;n=KBa(m<<2)|0;if(p){p=a+8|0;Dyb(n|0,r|0,k[p>>2]<<2|0)|0;OBa(r);t=p}else{p=a+8|0;Dyb(n|0,a|0,k[p>>2]<<2|0)|0;i[o>>0]=0;t=p}k[t>>2]=s;k[a>>2]=m;k[q>>2]=n}else k[a+8>>2]=s;s=a+12|0;i[s>>0]=j;if(l)return;if((k[a+8>>2]|0)!=1)return;if(k[((i[o>>0]|0)==0?k[q>>2]|0:a)>>2]|0)return;i[s>>0]=0;return}s=h>>>0>134217728?134217728:h;q=a+13|0;o=i[q>>0]|0;l=o<<24>>24==0;j=k[a>>2]|0;n=l?j:2;if(s>>>0>n>>>0){m=n<<2;n=m>>>0>>0?s:m;m=n>>>0>134217728?134217728:n;n=KBa(m<<2)|0;if(l){l=a+4|0;t=k[l>>2]|0;p=a+8|0;Dyb(n|0,t|0,k[p>>2]<<2|0)|0;OBa(t);u=l;v=p}else{p=a+8|0;Dyb(n|0,a|0,k[p>>2]<<2|0)|0;i[q>>0]=0;u=a+4|0;v=p}k[v>>2]=s;k[a>>2]=m;k[u>>2]=n;w=i[q>>0]|0;x=m}else{k[a+8>>2]=s;w=o;x=j}j=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;o=(i[c+13>>0]|0)==0?k[c+4>>2]|0:c;c=w<<24>>24==0;s=a+4|0;m=k[s>>2]|0;n=c?m:a;u=n+(g<<2)|0;v=f?o:j;if(!g){y=v;z=0;A=0;B=n}else{p=((-8-((e>>>0>d>>>0?d:e)<<2^-4)|0)>>>2)+1|0;e=v;v=f?j:o;o=0;j=0;f=n;while(1){d=e;l=v;t=k[l>>2]|0;r=Hyb(k[d>>2]|0,0,o|0,j|0)|0;C=Hyb(r|0,M|0,t|0,0)|0;t=M;k[f>>2]=C;f=f+4|0;C=d+4|0;if((f|0)==(u|0)){D=C;E=t;F=0;break}else{e=C;v=l+4|0;o=t;j=0}}y=D;z=E;A=F;B=n+(p<<2)|0}p=u+(h-g<<2)|0;g=(z|0)==0&(A|0)==0;do if((B|0)==(p|0))if(g){G=w;H=m}else{I=z;J=29}else{u=y;n=z;F=A;E=g;D=B;while(1){j=u;if(E){K=u;L=j;N=D;break}o=Hyb(k[j>>2]|0,0,n|0,F|0)|0;n=M;k[D>>2]=o;D=D+4|0;E=(n|0)==0&0==0;if((D|0)==(p|0)){J=27;break}else{u=j+4|0;F=0}}if((J|0)==27)if(E){G=w;H=m;break}else{I=n;J=29;break}if((L|0)==(N|0)){G=w;H=m}else{Eyb(N|0,K|0,L+(p-N>>2<<2)-K|0)|0;G=i[q>>0]|0;H=k[s>>2]|0}}while(0);if((J|0)==29){J=h+1|0;K=J>>>0>134217728?134217728:J;J=c?x:2;if(K>>>0>J>>>0){x=J<<2;J=x>>>0>>0?K:x;x=J>>>0>134217728?134217728:J;J=KBa(x<<2)|0;if(c){c=a+8|0;Dyb(J|0,m|0,k[c>>2]<<2|0)|0;OBa(m);O=c}else{c=a+8|0;Dyb(J|0,a|0,k[c>>2]<<2|0)|0;i[q>>0]=0;O=c}k[O>>2]=K;k[a>>2]=x;k[s>>2]=J;P=i[q>>0]|0;Q=J}else{k[a+8>>2]=K;P=w;Q=m}k[(P<<24>>24==0?Q:a)+(h<<2)>>2]=I;G=P;H=Q}Q=G<<24>>24==0?H:a;H=a+8|0;G=k[H>>2]|0;P=G+-1|0;a:do if(!P)R=G;else{I=P;h=G;while(1){if(k[Q+(I<<2)>>2]|0){R=h;break a}k[H>>2]=I;m=I+-1|0;if(!m){R=I;break}else{w=I;I=m;h=w}}}while(0);H=i[b+12>>0]|0;b=a+12|0;i[b>>0]=H;if(!(H<<24>>24!=0&(R|0)==1))return;if(k[Q>>2]|0)return;i[b>>0]=0;return}function bC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;if(!(k[c>>2]|0)){d=a+13|0;e=i[d>>0]|0;do if(e<<24>>24==0&(k[a>>2]|0)==0){x=0;f=Ba(563,4)|0;g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else{g=a+4|0;h=k[g>>2]|0;j=a+8|0;Dyb(f|0,h|0,k[j>>2]<<2|0)|0;OBa(h);k[j>>2]=1;k[a>>2]=1;k[g>>2]=f;l=i[d>>0]|0;m=f;break}}else{k[a+8>>2]=1;l=e;m=k[a+4>>2]|0}while(0);k[(l<<24>>24==0?m:a)>>2]=0;i[a+12>>0]=0;return}do if((b|0)==(a|0)){n=a+13|0;o=a}else{m=k[b+8>>2]|0;l=m>>>0>134217728?134217728:m;m=a+13|0;e=(i[m>>0]|0)==0;d=e?k[a>>2]|0:2;if(l>>>0<=d>>>0){k[a+8>>2]=l;n=m;o=a;break}f=d<<2;d=f>>>0>>0?l:f;f=d>>>0>134217728?134217728:d;d=KBa(f<<2)|0;if(e){e=a+4|0;g=k[e>>2]|0;j=a+8|0;Dyb(d|0,g|0,k[j>>2]<<2|0)|0;OBa(g);p=e;q=j}else{j=a+8|0;Dyb(d|0,a|0,k[j>>2]<<2|0)|0;i[m>>0]=0;p=a+4|0;q=j}k[q>>2]=l;k[a>>2]=f;k[p>>2]=d;n=m;o=a}while(0);p=i[n>>0]|0;q=p<<24>>24==0;m=a+4|0;d=k[m>>2]|0;f=q?d:o;l=a+8|0;j=k[l>>2]|0;e=f+(j<<2)|0;if(j){g=0;h=0;r=f;f=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;while(1){s=Qyb(k[c>>2]|0,0,k[f>>2]|0,0)|0;t=Hyb(s|0,M|0,g|0,h|0)|0;s=M;k[r>>2]=t;r=r+4|0;if((r|0)==(e|0)){u=s;v=0;break}else{g=s;h=0;f=f+4|0}}if(!((u|0)==0&(v|0)==0)){v=j+1|0;f=v>>>0>134217728?134217728:v;v=q?k[o>>2]|0:2;if(f>>>0>v>>>0){h=v<<2;v=h>>>0>>0?f:h;h=v>>>0>134217728?134217728:v;v=KBa(h<<2)|0;if(q){Dyb(v|0,d|0,j<<2|0)|0;OBa(d)}else{Dyb(v|0,a|0,j<<2|0)|0;i[n>>0]=0}k[l>>2]=f;k[o>>2]=h;k[m>>2]=v;w=i[n>>0]|0;y=v}else{k[l>>2]=f;w=p;y=d}k[(w<<24>>24==0?y:o)+(j<<2)>>2]=u;z=w;A=y}else{z=p;A=d}}else{z=p;A=d}d=i[b+12>>0]|0;b=a+12|0;i[b>>0]=d;if(!(d<<24>>24!=0&(k[l>>2]|0)==1))return;if(k[(z<<24>>24==0?A:o)>>2]|0)return;i[b>>0]=0;return}function cC(a,b){a=a|0;b=b|0;vB(a,b,b+20|0);return}function dC(a,b,c){a=a|0;b=b|0;c=c|0;sB(a,c,a+20|0);return}function eC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+224|0;d=c+112|0;e=c+208|0;f=c+180|0;g=c+96|0;h=c+80|0;j=c+40|0;l=c+152|0;m=c;n=a+40|0;o=(i[n>>0]|0)==0;if(i[b+40>>0]|0){if(!o){r=c;return a|0}k[a>>2]=0;p=a+4|0;k[p>>2]=k[f>>2];k[p+4>>2]=k[f+4>>2];k[p+8>>2]=k[f+8>>2];k[p+12>>2]=k[f+12>>2];k[p+16>>2]=k[f+16>>2];k[p+20>>2]=k[f+20>>2];k[p+24>>2]=k[f+24>>2];k[a+32>>2]=1;i[n>>0]=1;r=c;return a|0}if(!o){r=c;return a|0}k[h>>2]=0;o=h+8|0;k[o>>2]=1;f=h+12|0;i[f>>0]=0;p=h+13|0;i[p>>0]=1;q=a+32|0;s=k[q>>2]|0;t=s>>>0>134217728;u=t?134217728:s;if(u>>>0>2){v=u>>>0>8?u:8;w=KBa(v<<2)|0;k[w>>2]=k[h>>2];i[p>>0]=0;k[o>>2]=u;k[h>>2]=v;k[h+4>>2]=w;y=w}else{k[o>>2]=u;y=h}Dyb(y|0,a|0,(t?536870912:s<<2)|0)|0;i[f>>0]=0;if(!(i[p>>0]|0))z=k[h+4>>2]|0;else z=h;f=(k[o>>2]|0)+-1|0;a:do if(f){s=f;do{if(k[z+(s<<2)>>2]|0)break a;k[o>>2]=s;s=s+-1|0}while((s|0)!=0)}while(0);k[g>>2]=0;k[g+8>>2]=1;i[g+12>>0]=0;o=g+13|0;i[o>>0]=1;x=0;fb(203,g|0,h|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;z=M;if(!(i[o>>0]|0))OBa(k[g+4>>2]|0);if(i[p>>0]|0){A=z;B=b;Sc(B|0)}OBa(k[h+4>>2]|0);A=z;B=b;Sc(B|0)}if(!(i[p>>0]|0))OBa(k[h+4>>2]|0);if((i[2320]|0)==0?(Bb(2320)|0)!=0:0){h=d+32|0;k[h>>2]=8;k[d>>2]=-1;p=1;do{k[d+(p<<2)>>2]=-1;p=p+1|0;b=k[h>>2]|0}while(p>>>0>>0);C=b;p=C+-1|0;b:do if(p){C=p;do{if(k[d+(C<<2)>>2]|0)break b;k[h>>2]=C;C=C+-1|0}while((C|0)!=0)}while(0);D=2328;E=d;F=D+40|0;do{k[D>>2]=k[E>>2];D=D+4|0;E=E+4|0}while((D|0)<(F|0));Kc(2320)}D=j;E=2328;F=D+40|0;do{k[D>>2]=k[E>>2];D=D+4|0;E=E+4|0}while((D|0)<(F|0));x=0;h=Ta(534,g|0,j|0)|0;j=x;x=0;if(j&1){j=Hc()|0;p=M;if(i[o>>0]|0){A=p;B=j;Sc(B|0)}OBa(k[g+4>>2]|0);A=p;B=j;Sc(B|0)}if(h){k[a>>2]=0;h=a+4|0;k[h>>2]=k[l>>2];k[h+4>>2]=k[l+4>>2];k[h+8>>2]=k[l+8>>2];k[h+12>>2]=k[l+12>>2];k[h+16>>2]=k[l+16>>2];k[h+20>>2]=k[l+20>>2];k[h+24>>2]=k[l+24>>2];k[q>>2]=1;i[n>>0]=1}else{k[m>>2]=0;k[m+32>>2]=1;NB(m,g,d,e);D=a;E=m;F=D+36|0;do{k[D>>2]=k[E>>2];D=D+4|0;E=E+4|0}while((D|0)<(F|0))}if(!(i[o>>0]|0))OBa(k[g+4>>2]|0);r=c;return a|0}function fC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0;d=r;r=r+2080|0;e=d+1456|0;f=d+2016|0;g=d+1988|0;h=d+1960|0;j=d+1944|0;l=d+1928|0;m=d+1408|0;n=d+1360|0;o=d+1312|0;p=d+1264|0;q=d+1216|0;s=d+1136|0;t=d+1912|0;u=d+1896|0;v=d+1056|0;w=d+1016|0;y=d+1884|0;z=d+968|0;A=d+888|0;B=d+1872|0;C=d+1856|0;D=d+808|0;E=d+768|0;F=d+1844|0;G=d+1816|0;H=d+720|0;I=d+1800|0;J=d+672|0;K=d+624|0;L=d+576|0;N=d+1784|0;O=d+528|0;P=d+480|0;Q=d+1768|0;R=d+1736|0;S=d+432|0;T=d+1720|0;U=d+384|0;V=d+1692|0;W=d+1664|0;X=d+1648|0;Y=d+336|0;Z=d+1616|0;_=d+288|0;$=d+1600|0;aa=d+240|0;ba=d+192|0;ca=d+144|0;da=d+1572|0;ea=d+96|0;fa=d+1544|0;ga=d+1528|0;ha=d+48|0;ia=d+2048|0;ja=d;ka=d+1496|0;k[a>>2]=0;la=a+32|0;k[la>>2]=1;ma=a+40|0;i[ma>>0]=0;switch(k[c>>2]|0){case 10:case 7:case 6:case 5:case 3:case 9:case 4:case 2:{na=gC(96)|0;k[a>>2]=na;na=a+4|0;k[na>>2]=k[f>>2];k[na+4>>2]=k[f+4>>2];k[na+8>>2]=k[f+8>>2];k[na+12>>2]=k[f+12>>2];k[na+16>>2]=k[f+16>>2];k[na+20>>2]=k[f+20>>2];k[na+24>>2]=k[f+24>>2];k[la>>2]=1;i[ma>>0]=0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}case 8:{k[a>>2]=1;f=a+4|0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[f+12>>2]=k[g+12>>2];k[f+16>>2]=k[g+16>>2];k[f+20>>2]=k[g+20>>2];k[f+24>>2]=k[g+24>>2];k[la>>2]=1;i[ma>>0]=0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}case 1:{g=k[(k[b>>2]|0)+56>>2]|0;f=c+8|0;na=gC(k[f>>2]&255)|0;k[a>>2]=na;na=a+4|0;k[na>>2]=k[h>>2];k[na+4>>2]=k[h+4>>2];k[na+8>>2]=k[h+8>>2];k[na+12>>2]=k[h+12>>2];k[na+16>>2]=k[h+16>>2];k[na+20>>2]=k[h+20>>2];k[na+24>>2]=k[h+24>>2];k[la>>2]=1;i[ma>>0]=0;h=k[f>>2]|0;do switch((h&255)<<24>>24){case 85:{pa=k[b>>2]|0;k[j>>2]=-1;k[j+4>>2]=-1;k[j+8>>2]=0;qa=j+12|0;k[qa>>2]=0;x=0;ra=Fa(118,pa|0,0,j|0)|0;pa=x;x=0;if(pa&1){pa=Hc()|0;sa=M;ta=k[qa>>2]|0;if(!ta){ua=pa;va=sa;Sc(ua|0)}j0a(ta);ua=pa;va=sa;Sc(ua|0)}sa=k[qa>>2]|0;if(sa)j0a(sa);sa=k[b>>2]|0;k[l>>2]=-1;k[l+4>>2]=-1;k[l+8>>2]=0;qa=l+12|0;k[qa>>2]=0;x=0;pa=Fa(118,sa|0,-1,l|0)|0;sa=x;x=0;if(sa&1){sa=Hc()|0;ta=M;wa=k[qa>>2]|0;if(!wa){ua=sa;va=ta;Sc(ua|0)}j0a(wa);ua=sa;va=ta;Sc(ua|0)}ta=k[qa>>2]|0;if(ta)j0a(ta);a:do if(!(bF(g,pa)|0)){ta=k[(k[b>>2]|0)+24>>2]|0;b:do if(ta){qa=ta;while(1){sa=k[qa+16>>2]|0;if(ra>>>0>>0)ya=qa;else{if(sa>>>0>=ra>>>0){za=ta;break}ya=qa+4|0}qa=k[ya>>2]|0;if(!qa)break b}while(1){qa=k[za+16>>2]|0;if(ra>>>0>>0){sa=k[za>>2]|0;if(!sa)break;else Aa=sa}else{if(qa>>>0>=ra>>>0){Ca=za;Da=23;break}qa=k[za+4>>2]|0;if(!qa)break;else Aa=qa}za=Aa}if((Da|0)==23?(Ca|0)!=0:0)if(_E(g,k[Ca+20>>2]|0)|0)break a;else break;qa=Rd(8)|0;x=0;xa(671,qa|0,296399);sa=x;x=0;if(sa&1){sa=Hc()|0;Fc(qa|0);Sc(sa|0)}else{k[qa>>2]=47544;Gf(qa|0,9024,933)}}while(0);k[n>>2]=2e4;k[n+32>>2]=1;i[n+40>>0]=0;eC(a,n)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}while(0);k[m>>2]=5e3;k[m+32>>2]=1;i[m+40>>0]=0;eC(a,m)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}case 84:{k[o>>2]=50;k[o+32>>2]=1;i[o+40>>0]=0;eC(a,o)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}case -13:{hC(p,b,0,-1);eC(a,p)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}case 82:case 81:{k[s>>2]=1;k[s+8>>2]=1;k[s+40>>2]=1;ra=s+48|0;k[ra>>2]=-1;k[ra+4>>2]=-1;ra=s+56|0;pa=s+60|0;ta=s+72|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[ra+16>>2]=0;ra=k[b>>2]|0;k[u>>2]=-1;k[u+4>>2]=-1;k[u+8>>2]=0;qa=u+12|0;k[qa>>2]=0;x=0;sa=Fa(118,ra|0,0,u|0)|0;ra=x;x=0;if(!(ra&1)){k[w>>2]=32;k[w+32>>2]=1;k[v>>2]=2;Ea=v+8|0;Ga=w;Ha=Ea+40|0;do{k[Ea>>2]=k[Ga>>2];Ea=Ea+4|0;Ga=Ga+4|0}while((Ea|0)<(Ha|0));ra=v+48|0;k[ra>>2]=-1;k[ra+4>>2]=-1;ra=v+56|0;wa=v+60|0;Ia=v+72|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[ra+16>>2]=0;k[y>>2]=0;ra=y+4|0;k[ra>>2]=0;k[y+8>>2]=0;x=0;Ja=Va(93,g|0,v|0,y|0,1,0)|0;Ka=x;x=0;do if(!(Ka&1)){k[t>>2]=0;La=t+4|0;k[La>>2]=0;k[t+8>>2]=0;x=0;Ma=Ba(563,8)|0;Na=x;x=0;if(Na&1){Na=Hc()|0;Oa=M;Pa=Na;Da=63;break}k[t>>2]=Ma;Na=Ma+8|0;k[t+8>>2]=Na;k[Ma>>2]=sa;k[Ma+4>>2]=Ja;k[La>>2]=Na;x=0;Na=Va(93,g|0,s|0,t|0,1,0)|0;Ma=x;x=0;if((!(Ma&1)?(x=0,fb(204,q|0,b|0,Na|0),Na=x,x=0,!(Na&1)):0)?(x=0,Ta(535,a|0,q|0)|0,Na=x,x=0,!(Na&1)):0){Na=k[t>>2]|0;Ma=Na;if(Na){Qa=k[La>>2]|0;if((Qa|0)!=(Na|0))k[La>>2]=Qa+(~((Qa+-4-Ma|0)>>>2)<<2);OBa(Na)}Na=k[y>>2]|0;Ma=Na;if(Na){Qa=k[ra>>2]|0;if((Qa|0)!=(Na|0))k[ra>>2]=Qa+(~((Qa+-4-Ma|0)>>>2)<<2);OBa(Na)}Na=k[Ia>>2]|0;if(Na)j0a(Na);Na=k[wa>>2]|0;if(Na)j0a(Na);Na=k[qa>>2]|0;if(Na)j0a(Na);Na=k[ta>>2]|0;if(Na)j0a(Na);Na=k[pa>>2]|0;if(!Na){oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}j0a(Na);oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}Na=Hc()|0;Ma=M;Qa=k[t>>2]|0;Ra=Qa;if(!Qa){Sa=Na;Ua=Ma}else{Wa=k[La>>2]|0;if((Wa|0)!=(Qa|0))k[La>>2]=Wa+(~((Wa+-4-Ra|0)>>>2)<<2);OBa(Qa);Sa=Na;Ua=Ma}}else{Ma=Hc()|0;Oa=M;Pa=Ma;Da=63}while(0);if((Da|0)==63){Sa=Pa;Ua=Oa}Ja=k[y>>2]|0;sa=Ja;if(Ja){Ka=k[ra>>2]|0;if((Ka|0)!=(Ja|0))k[ra>>2]=Ka+(~((Ka+-4-sa|0)>>>2)<<2);OBa(Ja)}Ja=k[Ia>>2]|0;if(Ja)j0a(Ja);Ja=k[wa>>2]|0;if(!Ja){Xa=Sa;Ya=Ua}else{j0a(Ja);Xa=Sa;Ya=Ua}}else{Ja=Hc()|0;Xa=Ja;Ya=M}Ja=k[qa>>2]|0;if(Ja)j0a(Ja);Ja=k[ta>>2]|0;if(Ja)j0a(Ja);Ja=k[pa>>2]|0;if(!Ja){ua=Xa;va=Ya;Sc(ua|0)}j0a(Ja);ua=Xa;va=Ya;Sc(ua|0);break}case 83:{k[A>>2]=1;k[A+8>>2]=1;k[A+40>>2]=1;Ja=A+48|0;k[Ja>>2]=-1;k[Ja+4>>2]=-1;Ja=A+56|0;sa=A+60|0;Ka=A+72|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[Ja+16>>2]=0;Ja=k[b>>2]|0;k[C>>2]=-1;k[C+4>>2]=-1;k[C+8>>2]=0;Ma=C+12|0;k[Ma>>2]=0;x=0;Na=Fa(118,Ja|0,0,C|0)|0;Ja=x;x=0;if(!(Ja&1)){k[E>>2]=1;k[E+32>>2]=1;k[D>>2]=2;Ea=D+8|0;Ga=E;Ha=Ea+40|0;do{k[Ea>>2]=k[Ga>>2];Ea=Ea+4|0;Ga=Ga+4|0}while((Ea|0)<(Ha|0));pa=D+48|0;k[pa>>2]=-1;k[pa+4>>2]=-1;pa=D+56|0;ta=D+60|0;qa=D+72|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[pa+16>>2]=0;k[F>>2]=0;pa=F+4|0;k[pa>>2]=0;k[F+8>>2]=0;x=0;wa=Va(93,g|0,D|0,F|0,1,0)|0;Ia=x;x=0;do if(!(Ia&1)){k[B>>2]=0;ra=B+4|0;k[ra>>2]=0;k[B+8>>2]=0;x=0;Ja=Ba(563,8)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Za=M;_a=Qa;Da=109;break}k[B>>2]=Ja;Qa=Ja+8|0;k[B+8>>2]=Qa;k[Ja>>2]=Na;k[Ja+4>>2]=wa;k[ra>>2]=Qa;x=0;Qa=Va(93,g|0,A|0,B|0,1,0)|0;Ja=x;x=0;if((!(Ja&1)?(x=0,fb(204,z|0,b|0,Qa|0),Qa=x,x=0,!(Qa&1)):0)?(x=0,Ta(535,a|0,z|0)|0,Qa=x,x=0,!(Qa&1)):0){Qa=k[B>>2]|0;Ja=Qa;if(Qa){Ra=k[ra>>2]|0;if((Ra|0)!=(Qa|0))k[ra>>2]=Ra+(~((Ra+-4-Ja|0)>>>2)<<2);OBa(Qa)}Qa=k[F>>2]|0;Ja=Qa;if(Qa){Ra=k[pa>>2]|0;if((Ra|0)!=(Qa|0))k[pa>>2]=Ra+(~((Ra+-4-Ja|0)>>>2)<<2);OBa(Qa)}Qa=k[qa>>2]|0;if(Qa)j0a(Qa);Qa=k[ta>>2]|0;if(Qa)j0a(Qa);Qa=k[Ma>>2]|0;if(Qa)j0a(Qa);Qa=k[Ka>>2]|0;if(Qa)j0a(Qa);Qa=k[sa>>2]|0;if(!Qa){oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}j0a(Qa);oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}Qa=Hc()|0;Ja=M;Ra=k[B>>2]|0;Wa=Ra;if(!Ra){$a=Qa;ab=Ja}else{La=k[ra>>2]|0;if((La|0)!=(Ra|0))k[ra>>2]=La+(~((La+-4-Wa|0)>>>2)<<2);OBa(Ra);$a=Qa;ab=Ja}}else{Ja=Hc()|0;Za=M;_a=Ja;Da=109}while(0);if((Da|0)==109){$a=_a;ab=Za}wa=k[F>>2]|0;Na=wa;if(wa){Ia=k[pa>>2]|0;if((Ia|0)!=(wa|0))k[pa>>2]=Ia+(~((Ia+-4-Na|0)>>>2)<<2);OBa(wa)}wa=k[qa>>2]|0;if(wa)j0a(wa);wa=k[ta>>2]|0;if(!wa){bb=$a;cb=ab}else{j0a(wa);bb=$a;cb=ab}}else{wa=Hc()|0;bb=wa;cb=M}wa=k[Ma>>2]|0;if(wa)j0a(wa);wa=k[Ka>>2]|0;if(wa)j0a(wa);wa=k[sa>>2]|0;if(!wa){ua=bb;va=cb;Sc(ua|0)}j0a(wa);ua=bb;va=cb;Sc(ua|0);break}case 32:{k[a>>2]=30;k[na>>2]=k[G>>2];k[na+4>>2]=k[G+4>>2];k[na+8>>2]=k[G+8>>2];k[na+12>>2]=k[G+12>>2];k[na+16>>2]=k[G+16>>2];k[na+20>>2]=k[G+20>>2];k[na+24>>2]=k[G+24>>2];k[la>>2]=1;i[ma>>0]=0;wa=k[b>>2]|0;k[I>>2]=-1;k[I+4>>2]=-1;k[I+8>>2]=0;Na=I+12|0;k[Na>>2]=0;x=0;Ia=Fa(118,wa|0,-1,I|0)|0;wa=x;x=0;if((!(wa&1)?(x=0,nb(98,H|0,b|0,2368,Ia|0),Ia=x,x=0,!(Ia&1)):0)?(x=0,Ta(535,a|0,H|0)|0,Ia=x,x=0,!(Ia&1)):0){Ia=k[Na>>2]|0;if(Ia)j0a(Ia);hC(J,b,0,-1);eC(a,J)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}Ia=Hc()|0;wa=M;Ja=k[Na>>2]|0;if(!Ja){ua=Ia;va=wa;Sc(ua|0)}j0a(Ja);ua=Ia;va=wa;Sc(ua|0);break}case 57:case 55:{hC(K,b,0,-2);eC(a,K)|0;wa=k[b>>2]|0;k[N>>2]=-1;k[N+4>>2]=-1;k[N+8>>2]=0;Ia=N+12|0;k[Ia>>2]=0;x=0;Ja=Fa(118,wa|0,-2,N|0)|0;wa=x;x=0;if((!(wa&1)?(x=0,nb(98,L|0,b|0,2408,Ja|0),Ja=x,x=0,!(Ja&1)):0)?(x=0,Ta(535,a|0,L|0)|0,Ja=x,x=0,!(Ja&1)):0){Ja=k[Ia>>2]|0;if(!Ja){oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}j0a(Ja);oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}Ja=Hc()|0;wa=M;Na=k[Ia>>2]|0;if(!Na){ua=Ja;va=wa;Sc(ua|0)}j0a(Na);ua=Ja;va=wa;Sc(ua|0);break}case 60:{hC(O,b,-1,-3);eC(a,O)|0;wa=k[b>>2]|0;k[Q>>2]=-1;k[Q+4>>2]=-1;k[Q+8>>2]=0;Ja=Q+12|0;k[Ja>>2]=0;x=0;Na=Fa(118,wa|0,-3,Q|0)|0;wa=x;x=0;if((!(wa&1)?(x=0,nb(98,P|0,b|0,2448,Na|0),Na=x,x=0,!(Na&1)):0)?(x=0,Ta(535,a|0,P|0)|0,Na=x,x=0,!(Na&1)):0){Na=k[Ja>>2]|0;if(!Na){oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}j0a(Na);oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}Na=Hc()|0;wa=M;Ia=k[Ja>>2]|0;if(!Ia){ua=Na;va=wa;Sc(ua|0)}j0a(Ia);ua=Na;va=wa;Sc(ua|0);break}case -92:case -93:case -94:case -95:case -96:{k[a>>2]=((h&255)*375|0)+-59625;k[na>>2]=k[R>>2];k[na+4>>2]=k[R+4>>2];k[na+8>>2]=k[R+8>>2];k[na+12>>2]=k[R+12>>2];k[na+16>>2]=k[R+16>>2];k[na+20>>2]=k[R+20>>2];k[na+24>>2]=k[R+24>>2];k[la>>2]=1;i[ma>>0]=0;hC(S,b,0,-1);eC(a,S)|0;wa=k[b>>2]|0;k[T>>2]=-1;k[T+4>>2]=-1;k[T+8>>2]=0;Na=T+12|0;k[Na>>2]=0;x=0;Ia=Fa(118,wa|0,-1,T|0)|0;wa=x;x=0;if(!(wa&1)?(x=0,wa=Ta(524,g|0,Ia|0)|0,Ia=x,x=0,!(Ia&1)):0){Ia=k[Na>>2]|0;if(Ia)j0a(Ia);if(!wa){k[a>>2]=0;k[na>>2]=k[V>>2];k[na+4>>2]=k[V+4>>2];k[na+8>>2]=k[V+8>>2];k[na+12>>2]=k[V+12>>2];k[na+16>>2]=k[V+16>>2];k[na+20>>2]=k[V+20>>2];k[na+24>>2]=k[V+24>>2];k[la>>2]=1;i[ma>>0]=1;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}k[e>>2]=0;Ia=e+32|0;k[Ia>>2]=1;Ja=wa+32|0;Qa=k[Ja>>2]|0;if((e|0)==(wa|0)){db=Ja;eb=Qa}else{Ja=Qa>>>0>8?8:Qa;k[Ia>>2]=Ja;db=Ia;eb=Ja}Ja=e+(eb<<2)|0;if((e|0)!=(Ja|0)){Ia=0;Qa=0;Ra=e;Wa=wa;while(1){wa=Kyb(k[Wa>>2]|0,0,3)|0;La=Hyb(wa|0,M|0,Ia|0,Qa|0)|0;wa=M;k[Ra>>2]=La;Ra=Ra+4|0;if((Ra|0)==(Ja|0)){gb=wa;hb=0;break}else{Ia=wa;Qa=0;Wa=Wa+4|0}}if(!((gb|0)==0&(hb|0)==0)?(Wa=k[db>>2]|0,Qa=Wa+1|0,Ia=Qa>>>0>8?8:Qa,k[db>>2]=Ia,Ia>>>0>Wa>>>0):0)k[e+(Wa<<2)>>2]=gb}Wa=(k[db>>2]|0)+-1|0;c:do if(Wa){Ia=Wa;do{if(k[e+(Ia<<2)>>2]|0)break c;k[db>>2]=Ia;Ia=Ia+-1|0}while((Ia|0)!=0)}while(0);Ea=U;Ga=e;Ha=Ea+40|0;do{k[Ea>>2]=k[Ga>>2];Ea=Ea+4|0;Ga=Ga+4|0}while((Ea|0)<(Ha|0));i[U+40>>0]=0;eC(a,U)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}Wa=Hc()|0;Ia=M;Qa=k[Na>>2]|0;if(!Qa){ua=Wa;va=Ia;Sc(ua|0)}j0a(Qa);ua=Wa;va=Ia;Sc(ua|0);break}case -12:case -14:case -15:{k[a>>2]=40;k[na>>2]=k[W>>2];k[na+4>>2]=k[W+4>>2];k[na+8>>2]=k[W+8>>2];k[na+12>>2]=k[W+12>>2];k[na+16>>2]=k[W+16>>2];k[na+20>>2]=k[W+20>>2];k[na+24>>2]=k[W+24>>2];k[la>>2]=1;i[ma>>0]=0;Ia=k[b>>2]|0;k[X>>2]=-1;k[X+4>>2]=-1;k[X+8>>2]=0;Wa=X+12|0;k[Wa>>2]=0;x=0;Qa=Fa(118,Ia|0,0,X|0)|0;Ia=x;x=0;if(!(Ia&1)?(x=0,Ia=Ta(524,g|0,Qa|0)|0,Qa=x,x=0,!(Qa&1)):0){Qa=k[Wa>>2]|0;if(Qa)j0a(Qa);if(!Ia){k[a>>2]=0;k[na>>2]=k[Z>>2];k[na+4>>2]=k[Z+4>>2];k[na+8>>2]=k[Z+8>>2];k[na+12>>2]=k[Z+12>>2];k[na+16>>2]=k[Z+16>>2];k[na+20>>2]=k[Z+20>>2];k[na+24>>2]=k[Z+24>>2];k[la>>2]=1;i[ma>>0]=1}else{Eyb(Y|0,Ia|0,40)|0;i[Y+40>>0]=0;eC(a,Y)|0}Ia=k[f>>2]|0;if((Ia&255)<<24>>24==-15){k[_>>2]=25e3;k[_+32>>2]=1;i[_+40>>0]=0;eC(a,_)|0;ib=k[f>>2]|0}else ib=Ia;Ia=(ib&255)<<24>>24!=-12&1;Qa=k[b>>2]|0;k[$>>2]=-1;k[$+4>>2]=-1;k[$+8>>2]=0;Ja=$+12|0;k[Ja>>2]=0;x=0;Ra=Fa(118,Qa|0,~Ia|0,$|0)|0;Qa=x;x=0;if(!(Qa&1)?(x=0,Qa=Ta(536,g|0,Ra|0)|0,Ra=x,x=0,!(Ra&1)):0){Ra=k[Ja>>2]|0;if(Ra)j0a(Ra);if(!Qa){k[aa>>2]=9e3;k[aa+32>>2]=1;i[aa+40>>0]=0;eC(a,aa)|0}hC(ba,b,-2-Ia|0,-3-Ia|0);eC(a,ba)|0;hC(ca,b,-4-Ia|0,-5-Ia|0);eC(a,ca)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}Ia=Hc()|0;Qa=M;Ra=k[Ja>>2]|0;if(!Ra){ua=Ia;va=Qa;Sc(ua|0)}j0a(Ra);ua=Ia;va=Qa;Sc(ua|0)}Qa=Hc()|0;Ia=M;Ra=k[Wa>>2]|0;if(!Ra){ua=Qa;va=Ia;Sc(ua|0)}j0a(Ra);ua=Qa;va=Ia;Sc(ua|0);break}case -16:{k[a>>2]=32e3;k[na>>2]=k[da>>2];k[na+4>>2]=k[da+4>>2];k[na+8>>2]=k[da+8>>2];k[na+12>>2]=k[da+12>>2];k[na+16>>2]=k[da+16>>2];k[na+20>>2]=k[da+20>>2];k[na+24>>2]=k[da+24>>2];k[la>>2]=1;i[ma>>0]=0;hC(ea,b,-1,-2);eC(a,ea)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}case 10:{k[a>>2]=10;k[na>>2]=k[fa>>2];k[na+4>>2]=k[fa+4>>2];k[na+8>>2]=k[fa+8>>2];k[na+12>>2]=k[fa+12>>2];k[na+16>>2]=k[fa+16>>2];k[na+20>>2]=k[fa+20>>2];k[na+24>>2]=k[fa+24>>2];k[la>>2]=1;i[ma>>0]=0;Ia=k[b>>2]|0;k[ga>>2]=-1;k[ga+4>>2]=-1;k[ga+8>>2]=0;Qa=ga+12|0;k[Qa>>2]=0;x=0;Ra=Fa(118,Ia|0,-1,ga|0)|0;Ia=x;x=0;if(!(Ia&1)?(x=0,Ia=Ta(524,g|0,Ra|0)|0,Ra=x,x=0,!(Ra&1)):0){Ra=k[Qa>>2]|0;if(Ra)j0a(Ra);if(!Ia){k[ja>>2]=320;k[ja+32>>2]=1;i[ja+40>>0]=0;eC(a,ja)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}else{nC(ia,Ia);Ia=(32-((oC(ia)|0)>>>3)|0)*10|0;k[ha>>2]=Ia;k[ha+32>>2]=1;i[ha+40>>0]=0;eC(a,ha)|0;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}}Ia=Hc()|0;Ra=M;Wa=k[Qa>>2]|0;if(!Wa){ua=Ia;va=Ra;Sc(ua|0)}j0a(Wa);ua=Ia;va=Ra;Sc(ua|0);break}default:{oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}}while(0);break}default:{k[a>>2]=0;ua=a+4|0;k[ua>>2]=k[ka>>2];k[ua+4>>2]=k[ka+4>>2];k[ua+8>>2]=k[ka+8>>2];k[ua+12>>2]=k[ka+12>>2];k[ua+16>>2]=k[ka+16>>2];k[ua+20>>2]=k[ka+20>>2];k[ua+24>>2]=k[ka+24>>2];k[la>>2]=1;i[ma>>0]=1;oa=k[b>>2]|0;wR(e,oa,c,0);r=d;return}}}function gC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+48|0;c=b+16|0;d=b;a:do if(a<<24>>24==91)e=1;else{PQ(c,a);f=k[c+28>>2]|0;K2a(c);switch(f|0){case 7:case 0:{e=0;break a;break}case 1:{e=2;break a;break}case 2:{e=3;break a;break}case 3:{e=5;break a;break}case 4:{e=8;break a;break}case 5:{e=10;break a;break}case 6:{e=20;break a;break}default:{q2a(d,215477,17);x=0;pa(49,0,d|0,224,215495,215523);f=x;x=0;if(f&1){f=Hc()|0;K2a(d);Sc(f|0)}else{K2a(d);e=0;break a}}}}while(0);r=b;return e|0}function hC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;e=r;r=r+144|0;f=e+128|0;g=e;h=e+112|0;j=e+96|0;l=e+80|0;m=k[b>>2]|0;n=k[m+56>>2]|0;k[f>>2]=-1;k[f+4>>2]=-1;k[f+8>>2]=0;o=f+12|0;k[o>>2]=0;x=0;p=Fa(118,m|0,d|0,f|0)|0;f=x;x=0;if(!(f&1)?(x=0,f=Ta(536,n|0,p|0)|0,p=x,x=0,!(p&1)):0){p=k[o>>2]|0;if(p)j0a(p);if(f){k[a>>2]=0;k[a+32>>2]=1;i[a+40>>0]=0;r=e;return}k[g>>2]=1;k[g+8>>2]=1;k[g+40>>2]=1;f=g+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=g+56|0;p=g+60|0;m=g+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;f=k[b>>2]|0;k[j>>2]=-1;k[j+4>>2]=-1;k[j+8>>2]=0;q=j+12|0;k[q>>2]=0;x=0;s=Fa(118,f|0,c|0,j|0)|0;j=x;x=0;if(!(j&1)){j=k[b>>2]|0;k[l>>2]=-1;k[l+4>>2]=-1;k[l+8>>2]=0;c=l+12|0;k[c>>2]=0;x=0;f=Fa(118,j|0,d|0,l|0)|0;l=x;x=0;do if(!(l&1)){k[h>>2]=0;d=h+4|0;k[d>>2]=0;k[h+8>>2]=0;x=0;j=Ba(563,8)|0;t=x;x=0;if(t&1){t=Hc()|0;u=M;v=t;w=29;break}k[h>>2]=j;t=j+8|0;k[h+8>>2]=t;k[j>>2]=s;k[j+4>>2]=f;k[d>>2]=t;x=0;t=Va(93,n|0,g|0,h|0,1,0)|0;j=x;x=0;if(!(j&1)?(x=0,fb(204,a|0,b|0,t|0),t=x,x=0,!(t&1)):0){t=k[h>>2]|0;j=t;if(t){y=k[d>>2]|0;if((y|0)!=(t|0))k[d>>2]=y+(~((y+-4-j|0)>>>2)<<2);OBa(t)}t=k[c>>2]|0;if(t)j0a(t);t=k[q>>2]|0;if(t)j0a(t);t=k[m>>2]|0;if(t)j0a(t);t=k[p>>2]|0;if(!t){r=e;return}j0a(t);r=e;return}t=Hc()|0;j=M;y=k[h>>2]|0;z=y;if(!y){A=j;B=t}else{C=k[d>>2]|0;if((C|0)!=(y|0))k[d>>2]=C+(~((C+-4-z|0)>>>2)<<2);OBa(y);A=j;B=t}}else{t=Hc()|0;u=M;v=t;w=29}while(0);if((w|0)==29){A=u;B=v}v=k[c>>2]|0;if(!v){D=A;E=B}else{j0a(v);D=A;E=B}}else{B=Hc()|0;D=M;E=B}B=k[q>>2]|0;if(B)j0a(B);B=k[m>>2]|0;if(B)j0a(B);B=k[p>>2]|0;if(!B){F=D;G=E;Sc(G|0)}j0a(B);F=D;G=E;Sc(G|0)}E=Hc()|0;D=M;B=k[o>>2]|0;if(!B){F=D;G=E;Sc(G|0)}j0a(B);F=D;G=E;Sc(G|0)}function iC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=r;r=r+208|0;e=d+160|0;f=d+80|0;g=d+120|0;h=d+40|0;j=d;l=aF(k[(k[b>>2]|0)+56>>2]|0,c)|0;if(!l){k[a>>2]=0;k[a+32>>2]=1;i[a+40>>0]=1;r=d;return}c=b+8|0;m=l+32|0;n=k[m>>2]|0;o=b+40|0;b=k[o>>2]|0;a:do if((n|0)==(b|0)){p=n;while(1){p=p+-1|0;if((p|0)<=-1)break a;q=k[l+(p<<2)>>2]|0;s=k[c+(p<<2)>>2]|0;if((q|0)!=(s|0)){t=q;u=s;break}}if(t>>>0<=u>>>0)v=9}else if(n>>>0<=b>>>0)v=9;while(0);if((v|0)==9){k[f>>2]=0;k[f+32>>2]=1;w=a;x=f;y=w+40|0;do{k[w>>2]=k[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));i[a+40>>0]=0;r=d;return}w=g;x=c;y=w+40|0;do{k[w>>2]=k[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));if((c|0)!=(l|0)){k[o>>2]=k[m>>2];Dyb(c|0,l|0,k[m>>2]<<2|0)|0}pC(h,l);pC(j,g);k[e>>2]=0;k[e+32>>2]=1;qC(e,h,j);w=a;x=e;y=w+40|0;do{k[w>>2]=k[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));i[a+40>>0]=0;r=d;return}function jC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;e=r;r=r+208|0;f=e+160|0;g=e+120|0;h=e+40|0;j=e+80|0;l=e;m=aF(k[(k[b>>2]|0)+56>>2]|0,d)|0;if(!m){k[a>>2]=0;k[a+32>>2]=1;i[a+40>>0]=1;r=e;return}k[f>>2]=0;d=f+32|0;k[d>>2]=1;b=(f|0)!=(m|0);n=m+32|0;if(b){o=k[n>>2]|0;k[d>>2]=o>>>0>8?8:o;p=d}else p=n;n=31;d=0;o=0;while(1){if(o>>>0>=(k[p>>2]|0)>>>0){q=n;s=o;t=8;break}u=Hyb(k[m+(o<<2)>>2]|0,0,n|0,d|0)|0;n=M;k[f+(o<<2)>>2]=u;u=o+1|0;if((n|0)==0&0==0){v=0;w=0;x=u;break}else{d=0;o=u}}if((t|0)==8){v=1;w=q;x=s}if(b?x>>>0<(k[p>>2]|0)>>>0:0){b=x;do{k[f+(b<<2)>>2]=k[m+(b<<2)>>2];b=b+1|0}while(b>>>0<(k[p>>2]|0)>>>0)}if(v?(v=k[p>>2]|0,b=v+1|0,m=b>>>0>8?8:b,k[p>>2]=m,m>>>0>v>>>0):0)k[f+(v<<2)>>2]=w;w=(k[p>>2]|0)+-1|0;a:do if(w){v=w;do{if(k[f+(v<<2)>>2]|0)break a;k[p>>2]=v;v=v+-1|0}while((v|0)!=0)}while(0);p=l;w=f;v=p+40|0;do{k[p>>2]=k[w>>2];p=p+4|0;w=w+4|0}while((p|0)<(v|0));k[h>>2]=0;k[h+32>>2]=1;k[g>>2]=32;k[g+32>>2]=1;k[f>>2]=0;k[f+32>>2]=1;rC(h,l,g,f);p=j;w=h;v=p+40|0;do{k[p>>2]=k[w>>2];p=p+4|0;w=w+4|0}while((p|0)<(v|0));k[f>>2]=0;k[f+32>>2]=1;sC(f,c,j);p=a;w=f;v=p+40|0;do{k[p>>2]=k[w>>2];p=p+4|0;w=w+4|0}while((p|0)<(v|0));i[a+40>>0]=0;r=e;return}function kC(){var a=0,b=0,c=0,d=0,e=0,f=0;a=r;r=r+48|0;b=a;if(i[2552]|0){r=a;return}if((i[2320]|0)==0?(Bb(2320)|0)!=0:0){c=b+32|0;k[c>>2]=8;k[b>>2]=-1;d=1;do{k[b+(d<<2)>>2]=-1;d=d+1|0;e=k[c>>2]|0}while(d>>>0>>0);f=e;d=f+-1|0;a:do if(d){f=d;do{if(k[b+(f<<2)>>2]|0)break a;k[c>>2]=f;f=f+-1|0}while((f|0)!=0)}while(0);c=2328;d=b;b=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(b|0));Kc(2320)}d=2552;k[d>>2]=1;k[d+4>>2]=0;r=a;return}function lC(){k[6609]=0;k[6610]=0;k[6611]=0;return}function mC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+16|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;h=k[b+32>>2]|0;j=h>>>0>134217728;l=j?134217728:h;if(l>>>0>2){m=l>>>0>8?l:8;n=KBa(m<<2)|0;k[n>>2]=k[d>>2];i[g>>0]=0;k[e>>2]=l;k[d>>2]=m;k[d+4>>2]=n;o=n}else{k[e>>2]=l;o=d}Dyb(o|0,b|0,(j?536870912:h<<2)|0)|0;i[f>>0]=0;f=(i[g>>0]|0)==0;if(f)p=k[d+4>>2]|0;else p=d;g=k[e>>2]|0;h=g+-1|0;a:do if(!h)q=g;else{j=h;b=g;while(1){if(k[p+(j<<2)>>2]|0){q=b;break a}k[e>>2]=j;o=j+-1|0;if(!o){q=j;break}else{l=j;j=o;b=l}}}while(0);b:do if(!(i[a+12>>0]|0)){e=k[a+8>>2]|0;if((e|0)!=(q|0)){s=e>>>0>q>>>0?1:-1;break}e=(i[a+13>>0]|0)==0?k[a+4>>2]|0:a;p=f?k[d+4>>2]|0:d;g=q;while(1){g=g+-1|0;if((g|0)<=-1){s=0;break b}h=k[e+(g<<2)>>2]|0;b=k[p+(g<<2)>>2]|0;if((h|0)!=(b|0)){t=h;u=b;break}}s=t>>>0>u>>>0?1:-1}else s=-1;while(0);u=(s|0)>0;if(!f){r=c;return u|0}OBa(k[d+4>>2]|0);r=c;return u|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+128|0;d=c+80|0;e=c+40|0;f=c;g=f;h=b;b=g+40|0;do{k[g>>2]=k[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(b|0));h=e+32|0;g=d+32|0;b=f+32|0;j=32;do{k[e>>2]=255;k[h>>2]=1;k[d>>2]=0;k[g>>2]=1;KB(d,f,e);j=j+-1|0;i[a+j>>0]=k[d>>2];l=k[b>>2]|0;do if(!l){k[b>>2]=1;k[f>>2]=0}else{m=l+-1|0;n=(((k[f+(m<<2)>>2]|0)>>>0<256)<<31>>31)+l|0;if(!n){k[b>>2]=1;k[f>>2]=0;break}o=(k[f>>2]|0)>>>8;k[f>>2]=o;if(l>>>0>1){p=1;q=o;o=f;s=0;while(1){k[o>>2]=k[f+(p<<2)>>2]<<24|q;t=s+1|0;o=f+(t<<2)|0;q=(k[o>>2]|0)>>>8;k[o>>2]=q;if((t|0)==(m|0))break;else{p=s+2|0;s=t}}}k[b>>2]=n>>>0>8?8:n}while(0)}while((j|0)!=0);r=c;return}function oC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=i[a>>0]|0;do if(!(b<<24>>24)){c=i[a+1>>0]|0;if(!(c<<24>>24)){d=i[a+2>>0]|0;if(!(d<<24>>24)){e=i[a+3>>0]|0;if(!(e<<24>>24)){f=i[a+4>>0]|0;if(!(f<<24>>24)){g=i[a+5>>0]|0;if(!(g<<24>>24)){h=i[a+6>>0]|0;if(!(h<<24>>24)){j=i[a+7>>0]|0;if(!(j<<24>>24)){k=i[a+8>>0]|0;if(!(k<<24>>24)){l=i[a+9>>0]|0;if(!(l<<24>>24)){m=i[a+10>>0]|0;if(!(m<<24>>24)){n=i[a+11>>0]|0;if(!(n<<24>>24)){o=i[a+12>>0]|0;if(!(o<<24>>24)){p=i[a+13>>0]|0;if(!(p<<24>>24)){q=i[a+14>>0]|0;if(!(q<<24>>24)){r=i[a+15>>0]|0;if(!(r<<24>>24)){s=i[a+16>>0]|0;if(!(s<<24>>24)){t=i[a+17>>0]|0;if(!(t<<24>>24)){u=i[a+18>>0]|0;if(!(u<<24>>24)){v=i[a+19>>0]|0;if(v<<24>>24){w=v;x=152;break}v=i[a+20>>0]|0;if(v<<24>>24){w=v;x=160;break}v=i[a+21>>0]|0;if(v<<24>>24){w=v;x=168;break}v=i[a+22>>0]|0;if(v<<24>>24){w=v;x=176;break}v=i[a+23>>0]|0;if(v<<24>>24){w=v;x=184;break}v=i[a+24>>0]|0;if(v<<24>>24){w=v;x=192;break}v=i[a+25>>0]|0;if(v<<24>>24){w=v;x=200;break}v=i[a+26>>0]|0;if(v<<24>>24){w=v;x=208;break}v=i[a+27>>0]|0;if(v<<24>>24){w=v;x=216;break}v=i[a+28>>0]|0;if(v<<24>>24){w=v;x=224;break}v=i[a+29>>0]|0;if(v<<24>>24){w=v;x=232;break}v=i[a+30>>0]|0;if(v<<24>>24){w=v;x=240;break}v=i[a+31>>0]|0;if(!(v<<24>>24))y=256;else{w=v;x=248;break}return y|0}else{w=u;x=144}}else{w=t;x=136}}else{w=s;x=128}}else{w=r;x=120}}else{w=q;x=112}}else{w=p;x=104}}else{w=o;x=96}}else{w=n;x=88}}else{w=m;x=80}}else{w=l;x=72}}else{w=k;x=64}}else{w=j;x=56}}else{w=h;x=48}}else{w=g;x=40}}else{w=f;x=32}}else{w=e;x=24}}else{w=d;x=16}}else{w=c;x=8}}else{w=b;x=0}while(0);b=w&255;if(!(b&128)){z=b;A=x}else{y=x;return y|0}while(1){x=A+1|0;b=z<<1;if(!(b&128)){z=b&254;A=x}else{y=x;break}}return y|0}function pC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+320|0;d=c+280|0;e=c+240|0;f=c+200|0;g=c;h=c+160|0;i=c+120|0;j=c+80|0;l=c+40|0;k[d>>2]=0;m=d+32|0;k[m>>2]=1;n=(d|0)!=(b|0);o=b+32|0;if(n){p=k[o>>2]|0;k[m>>2]=p>>>0>8?8:p;q=m}else q=o;o=31;m=0;p=0;while(1){if(p>>>0>=(k[q>>2]|0)>>>0){s=o;t=p;u=6;break}v=Hyb(k[b+(p<<2)>>2]|0,0,o|0,m|0)|0;o=M;k[d+(p<<2)>>2]=v;v=p+1|0;if((o|0)==0&0==0){w=0;x=0;y=v;break}else{m=0;p=v}}if((u|0)==6){w=1;x=s;y=t}if(n?y>>>0<(k[q>>2]|0)>>>0:0){n=y;do{k[d+(n<<2)>>2]=k[b+(n<<2)>>2];n=n+1|0}while(n>>>0<(k[q>>2]|0)>>>0)}if(w?(w=k[q>>2]|0,n=w+1|0,b=n>>>0>8?8:n,k[q>>2]=b,b>>>0>w>>>0):0)k[d+(w<<2)>>2]=x;x=(k[q>>2]|0)+-1|0;a:do if(x){w=x;do{if(k[d+(w<<2)>>2]|0)break a;k[q>>2]=w;w=w+-1|0}while((w|0)!=0)}while(0);q=h;x=d;w=q+40|0;do{k[q>>2]=k[x>>2];q=q+4|0;x=x+4|0}while((q|0)<(w|0));k[f>>2]=0;k[f+32>>2]=1;k[e>>2]=32;k[e+32>>2]=1;k[d>>2]=0;k[d+32>>2]=1;rC(f,h,e,d);q=g;x=f;w=q+40|0;do{k[q>>2]=k[x>>2];q=q+4|0;x=x+4|0}while((q|0)<(w|0));k[d>>2]=0;h=d+32|0;b=k[g+32>>2]|0;n=b>>>0>8?8:b;k[h>>2]=n;b=d+(n<<2)|0;if((d|0)!=(b|0)){n=0;y=0;t=d;s=g;while(1){u=Qyb(k[s>>2]|0,0,3,0)|0;p=Hyb(u|0,M|0,n|0,y|0)|0;u=M;k[t>>2]=p;t=t+4|0;if((t|0)==(b|0)){z=u;A=0;break}else{n=u;y=0;s=s+4|0}}if(!((z|0)==0&(A|0)==0)?(A=k[h>>2]|0,s=A+1|0,y=s>>>0>8?8:s,k[h>>2]=y,y>>>0>A>>>0):0)k[d+(A<<2)>>2]=z}z=(k[h>>2]|0)+-1|0;b:do if(z){A=z;do{if(k[d+(A<<2)>>2]|0)break b;k[h>>2]=A;A=A+-1|0}while((A|0)!=0)}while(0);q=i;x=d;w=q+40|0;do{k[q>>2]=k[x>>2];q=q+4|0;x=x+4|0}while((q|0)<(w|0));k[d>>2]=0;k[d+32>>2]=1;sC(d,g,g);q=l;x=d;w=q+40|0;do{k[q>>2]=k[x>>2];q=q+4|0;x=x+4|0}while((q|0)<(w|0));k[f>>2]=0;k[f+32>>2]=1;k[e>>2]=512;k[e+32>>2]=1;k[d>>2]=0;k[d+32>>2]=1;rC(f,l,e,d);q=j;x=f;w=q+40|0;do{k[q>>2]=k[x>>2];q=q+4|0;x=x+4|0}while((q|0)<(w|0));k[d>>2]=0;k[d+32>>2]=1;uC(d,i,j);q=a;x=d;w=q+40|0;do{k[q>>2]=k[x>>2];q=q+4|0;x=x+4|0}while((q|0)<(w|0));r=c;return}function qC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=k[b+32>>2]|0;e=k[c+32>>2]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){f=k[b>>2]|0;i=k[c>>2]|0;if(i>>>0<=f>>>0){k[a+32>>2]=1;k[a>>2]=f-i;return}j=i-f|0;l=a+32|0;k[l>>2]=1;k[a>>2]=j;if((i|0)==(f|0))return;k[a+4>>2]=0;k[l>>2]=8;m=~j;k[a>>2]=m;k[a+4>>2]=-1;n=a+8|0;k[n>>2]=-1;k[n+4>>2]=-1;k[n+8>>2]=-1;k[n+12>>2]=-1;k[n+16>>2]=-1;k[n+20>>2]=-1;if((i|0)!=(f|0)){k[a>>2]=0-j;return}j=Hyb(m|0,0,1,0)|0;m=M;k[a>>2]=j;a:do if(!((m|0)==0&0==0)){j=m;f=0;i=0;while(1){i=i+1|0;n=k[l>>2]|0;if(i>>>0>=n>>>0){o=n;p=j;break}n=Hyb(k[a+(i<<2)>>2]|0,0,j|0,f|0)|0;j=M;k[a+(i<<2)>>2]=n;if((j|0)==0&0==0)break a;else f=0}f=o+1|0;j=f>>>0>8?8:f;k[l>>2]=j;if(j>>>0>o>>>0)k[a+(o<<2)>>2]=p}while(0);p=(k[l>>2]|0)+-1|0;if(!p)return;else q=p;while(1){if(k[a+(q<<2)>>2]|0){r=38;break}k[l>>2]=q;q=q+-1|0;if(!q){r=38;break}}if((r|0)==38)return}b:do if((d|0)==(e|0)){r=d;while(1){r=r+-1|0;if((r|0)<=-1){s=0;break b}q=k[b+(r<<2)>>2]|0;l=k[c+(r<<2)>>2]|0;if((q|0)!=(l|0)){t=q;u=l;break}}s=t>>>0>u>>>0?1:-1}else s=d>>>0>e>>>0?1:-1;while(0);e=a+32|0;k[e>>2]=h>>>0>8?8:h;d=b;b=c;if((s|0)>=0)if(!s){k[e>>2]=1;k[a>>2]=0;return}else{v=d;w=b;x=0}else{v=b;w=d;x=1}if(g){d=v;b=w;w=0;s=0;c=0;while(1){u=Gyb(k[d+(c<<2)>>2]|0,0,k[b+(c<<2)>>2]|0,0)|0;t=Gyb(u|0,M|0,w|0,s|0)|0;k[a+(c<<2)>>2]=t;t=M&1;c=c+1|0;if(c>>>0>=g>>>0){y=t;z=0;break}else{w=t;s=0}}if(((y|0)!=0|(z|0)!=0)&h>>>0>g>>>0){s=v;w=y;y=z;z=g;while(1){c=Gyb(k[s+(z<<2)>>2]|0,0,w|0,y|0)|0;k[a+(z<<2)>>2]=c;w=M&1;c=z+1|0;if(!(((w|0)!=0|0!=0)&h>>>0>c>>>0)){A=c;break}else{y=0;z=c}}}else A=g}else A=0;if((h|0)!=(A|0)?(g=v,(g|0)!=(a|0)):0)Eyb(a+(A<<2)|0,g+(A<<2)|0,h-A<<2|0)|0;A=(k[e>>2]|0)+-1|0;c:do if(A){h=A;do{if(k[a+(h<<2)>>2]|0)break c;k[e>>2]=h;h=h+-1|0}while((h|0)!=0)}while(0);if(!x)return;NC(a);return}function rC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;e=r;r=r+48|0;f=e;if((a|0)==(b|0)|(d|0)==(b|0)){g=f;h=b;i=g+40|0;do{k[g>>2]=k[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));rC(a,f,c,d);r=e;return}if((a|0)==(c|0)|(d|0)==(c|0)){g=f;h=c;i=g+40|0;do{k[g>>2]=k[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));rC(a,b,f,d);r=e;return}if((a|0)==(d|0)){k[f>>2]=0;h=f+32|0;k[h>>2]=1;rC(a,b,c,f);if((f|0)!=(a|0)){g=k[h>>2]|0;k[a+32>>2]=g;Dyb(a|0,f|0,g<<2|0)|0}r=e;return}g=c+32|0;h=k[g>>2]|0;i=h+-1|0;if(!i){tC(a,b,k[c>>2]|0,d);r=e;return}j=b+32|0;l=k[j>>2]|0;m=l+-1|0;n=(m|k[b>>2]|0)==0;k[d+32>>2]=l;Dyb(d|0,b|0,k[j>>2]<<2|0)|0;if(n){if(!a){r=e;return}k[a+32>>2]=k[j>>2];Dyb(a|0,b|0,k[j>>2]<<2|0)|0;r=e;return}j=(a|0)!=0;if(j){k[a+32>>2]=1;k[a>>2]=0}a:do if(m>>>0<=i>>>0){if(m>>>0>>0){r=e;return}n=k[d+32>>2]|0;o=k[g>>2]|0;if((n|0)!=(o|0)){if(n>>>0>o>>>0)break;r=e;return}o=n;while(1){o=o+-1|0;if((o|0)<=-1)break a;n=k[d+(o<<2)>>2]|0;p=k[c+(o<<2)>>2]|0;if((n|0)!=(p|0)){q=n;s=p;break}}if(q>>>0<=s>>>0){r=e;return}}while(0);k[f>>2]=0;s=f+32|0;k[s>>2]=1;switch(l|0){case 1:{if(j){q=((k[b>>2]|0)>>>0)/((k[c>>2]|0)>>>0)|0;k[a+32>>2]=1;k[a>>2]=q}q=((k[b>>2]|0)>>>0)%((k[c>>2]|0)>>>0)|0;k[d+32>>2]=1;k[d>>2]=q;break}case 2:{q=k[b+4>>2]|0;o=k[b>>2]|0;b=k[c+4>>2]|0;p=k[c>>2]|0;if(j){n=Ryb(o|0,q|0,p|0,b|0)|0;t=M;k[a>>2]=n;k[a+4>>2]=t;k[a+32>>2]=(t|0)!=0?2:1}t=Syb(o|0,q|0,p|0,b|0)|0;b=M;k[d>>2]=t;k[d+4>>2]=b;k[d+32>>2]=(b|0)!=0?2:1;break}default:{if(j){b=l-i|0;t=a+32|0;k[t>>2]=b>>>0>8?8:b;if(b>>>0>1){Fyb(a+4|0,0,l-h<<2|0)|0;u=t;v=a}else{u=t;v=a}}else{u=a+32|0;v=0}t=c+(i<<2)|0;l=d+32|0;b=c+(h+-2<<2)|0;p=1-h|0;h=1;q=0;o=m;b:while(1){m=k[d+(o<<2)>>2]|0;n=k[t>>2]|0;do if(!((o|0)!=0&m>>>0<=n>>>0))if(!o){w=((k[d>>2]|0)>>>0)/(n>>>0)|0;x=0;break}else{y=Ryb(k[d+(o+-1<<2)>>2]|0,m|0,k[b>>2]|0,n|0)|0;w=y;x=o;break}else{y=o+-1|0;z=Ryb(k[d+(y<<2)>>2]|0,m|0,n|0,0)|0;A=M;B=A>>>0>0|(A|0)==0&z>>>0>4294967295;w=B?1:z;x=B?o:y}while(0);n=x-i|0;do if(j){m=v+(n<<2)|0;y=k[m>>2]|0;if(q){if(y>>>0>w>>>0){k[m>>2]=y-w;break}B=n+1|0;k[s>>2]=B>>>0>8?8:B;k[f+(n<<2)>>2]=w;if((x|0)!=(i|0)){B=p+x|0;Fyb(f|0,0,(B>>>0>1?B:1)<<2|0)|0}qC(a,a,f);break}else{if(w>>>0<~y>>>0){k[m>>2]=y+w;break}y=n+1|0;k[s>>2]=y>>>0>8?8:y;k[f+(n<<2)>>2]=w;if((x|0)!=(i|0)){y=p+x|0;Fyb(f|0,0,(y>>>0>1?y:1)<<2|0)|0}uC(a,a,f);break}}while(0);y=k[g>>2]|0;m=n+1+y|0;B=m>>>0>8;k[s>>2]=B?8:m;if((x|0)!=(i|0)){m=p+x|0;Fyb(f|0,0,(m>>>0>1?m:1)<<2|0)|0}if(y){m=0;z=0;A=0;while(1){C=Qyb(k[c+(A<<2)>>2]|0,0,w|0,0)|0;D=Hyb(C|0,M|0,m|0,z|0)|0;C=M;k[f+(A+n<<2)>>2]=D;A=A+1|0;if(A>>>0>=y>>>0){E=C;F=0;break}else{m=C;z=0}}if(!(B|(E|0)==0&(F|0)==0))k[f+((k[s>>2]|0)+-1<<2)>>2]=E;else G=60}else G=60;if((G|0)==60?(G=0,!B):0){z=(k[s>>2]|0)+-1|0;k[s>>2]=z>>>0>8?8:z}z=k[l>>2]|0;m=k[s>>2]|0;c:do if((z|0)==(m|0)){y=z;while(1){y=y+-1|0;if((y|0)<=-1){G=68;break c}A=k[d+(y<<2)>>2]|0;n=k[f+(y<<2)>>2]|0;if((A|0)!=(n|0)){H=A;I=n;break}}if(H>>>0>I>>>0)G=67;else G=68}else if(z>>>0>m>>>0)G=67;else G=68;while(0);if((G|0)==67){G=0;qC(d,d,f);J=q}else if((G|0)==68){G=0;if(!((z>>>0>>0?m:z)|0)){K=z;L=m}else{B=0;do{y=d+(B<<2)|0;n=f+(B<<2)|0;A=k[y>>2]|0;k[y>>2]=k[n>>2];k[n>>2]=A;B=B+1|0;A=k[l>>2]|0;n=k[s>>2]|0}while(B>>>0<(A>>>0>>0?n:A)>>>0);K=A;L=n}k[l>>2]=L;k[s>>2]=K;qC(d,d,f);J=q^1}if(j&h){B=(k[u>>2]|0)+-1|0;if(!(k[v+(B<<2)>>2]|0)){m=B;do{B=m>>>0>8?8:m;k[u>>2]=B;m=B+-1|0}while((k[v+(m<<2)>>2]|0)==0);N=0}else N=0}else N=h;m=k[l>>2]|0;B=o;o=m+-1|0;if(o>>>0>>0){O=m;P=J;break}if(o>>>0>i>>>0){h=N;q=J;o=o;continue}B=k[g>>2]|0;if((m|0)!=(B|0))if(m>>>0>B>>>0){h=N;q=J;o=o;continue}else{O=m;P=J;break}else Q=m;while(1){Q=Q+-1|0;if((Q|0)<=-1){h=N;q=J;o=o;continue b}B=k[d+(Q<<2)>>2]|0;z=k[c+(Q<<2)>>2]|0;if((B|0)!=(z|0)){R=B;S=z;break}}if(R>>>0<=S>>>0){O=m;P=J;break}else{h=N;q=J}}if(P?!((O|0)==1&(k[d>>2]|0)==0):0){do if(j){O=k[a>>2]|0;if(!O){JB(a,a,26312);break}else{k[a>>2]=O+-1;break}}while(0);qC(d,c,d)}}}r=e;return}function sC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=r;r=r+48|0;e=d;f=b+32|0;g=k[f>>2]|0;h=c+32|0;i=k[h>>2]|0;j=(i|0)==1;if((g|0)==1){l=k[b>>2]|0;if(j){m=Qyb(k[c>>2]|0,0,l|0,0)|0;n=M;k[a>>2]=m;k[a+4>>2]=n;k[a+32>>2]=(n|0)!=0?2:1;r=d;return}if(!l){k[a+32>>2]=1;k[a>>2]=0;r=d;return}if((c|0)==(a|0)){o=h;p=i}else{h=i>>>0>8?8:i;n=a+32|0;k[n>>2]=h;o=n;p=h}h=a+(p<<2)|0;if((a|0)!=(h|0)){p=0;n=0;m=a;q=c;while(1){s=Qyb(k[q>>2]|0,0,l|0,0)|0;t=Hyb(s|0,M|0,p|0,n|0)|0;s=M;k[m>>2]=t;m=m+4|0;if((m|0)==(h|0)){u=s;v=0;break}else{p=s;n=0;q=q+4|0}}if(!((u|0)==0&(v|0)==0)?(v=k[o>>2]|0,q=v+1|0,n=q>>>0>8?8:q,k[o>>2]=n,n>>>0>v>>>0):0)k[a+(v<<2)>>2]=u}u=(k[o>>2]|0)+-1|0;if(!u){r=d;return}else w=u;while(1){if(k[a+(w<<2)>>2]|0){x=46;break}k[o>>2]=w;w=w+-1|0;if(!w){x=46;break}}if((x|0)==46){r=d;return}}if(j){j=k[c>>2]|0;if(!j){k[a+32>>2]=1;k[a>>2]=0;r=d;return}if((b|0)==(a|0)){y=f;z=g}else{f=g>>>0>8?8:g;w=a+32|0;k[w>>2]=f;y=w;z=f}f=a+(z<<2)|0;if((a|0)!=(f|0)){z=0;w=0;o=a;u=b;while(1){v=Qyb(k[u>>2]|0,0,j|0,0)|0;n=Hyb(v|0,M|0,z|0,w|0)|0;v=M;k[o>>2]=n;o=o+4|0;if((o|0)==(f|0)){A=v;B=0;break}else{z=v;w=0;u=u+4|0}}if(!((A|0)==0&(B|0)==0)?(B=k[y>>2]|0,u=B+1|0,w=u>>>0>8?8:u,k[y>>2]=w,w>>>0>B>>>0):0)k[a+(B<<2)>>2]=A}A=(k[y>>2]|0)+-1|0;if(!A){r=d;return}else C=A;while(1){if(k[a+(C<<2)>>2]|0){x=46;break}k[y>>2]=C;C=C+-1|0;if(!C){x=46;break}}if((x|0)==46){r=d;return}}if((a|0)==(b|0)){D=e;E=b;F=D+40|0;do{k[D>>2]=k[E>>2];D=D+4|0;E=E+4|0}while((D|0)<(F|0));sC(b,e,c);r=d;return}if((a|0)==(c|0)){D=e;E=c;F=D+40|0;do{k[D>>2]=k[E>>2];D=D+4|0;E=E+4|0}while((D|0)<(F|0));sC(c,b,e);r=d;return}e=i+g|0;E=e>>>0>8?8:e;e=a+32|0;k[e>>2]=E;Fyb(a|0,0,E<<2|0)|0;E=k[e>>2]|0;if(!g)G=E;else{D=E;E=0;while(1){F=D-E|0;C=i>>>0>>0?i:F;if(!C){H=D;I=0}else{F=b+(E<<2)|0;y=0;A=0;B=0;while(1){w=Qyb(k[c+(B<<2)>>2]|0,0,k[F>>2]|0,0)|0;u=Hyb(w|0,M|0,y|0,A|0)|0;w=a+(B+E<<2)|0;z=Hyb(u|0,M|0,k[w>>2]|0,0)|0;u=M;k[w>>2]=z;B=B+1|0;if(B>>>0>=C>>>0){J=u;break}else{y=u;A=0}}H=k[e>>2]|0;I=J}A=E+i|0;if(A>>>0>>0){k[a+(A<<2)>>2]=I;K=k[e>>2]|0}else K=H;E=E+1|0;if((E|0)==(g|0)){G=K;break}else D=K}}K=G+-1|0;if(!K){r=d;return}else L=K;while(1){if(k[a+(L<<2)>>2]|0){x=46;break}k[e>>2]=L;L=L+-1|0;if(!L){x=46;break}}if((x|0)==46){r=d;return}}function tC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;e=r;r=r+48|0;f=e;g=e+40|0;if((a|0)==(b|0)|(d|0)==(b|0)){h=f;i=b;j=h+40|0;do{k[h>>2]=k[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));tC(a,f,c,d);r=e;return}if((a|0)==(d|0)){k[f>>2]=0;i=f+32|0;k[i>>2]=1;tC(a,b,c,f);if((f|0)!=(a|0)){h=k[i>>2]|0;k[a+32>>2]=h;Dyb(a|0,f|0,h<<2|0)|0}r=e;return}if(!c){H0a(g,224804);k[g>>2]=47584;x=0;nb(99,g|0,215598,225374,325);x=0;h=Hc()|0;qCa(g);Sc(h|0)}h=b+32|0;g=k[h>>2]|0;f=g+-1|0;k[d+32>>2]=g;Dyb(d|0,b|0,k[h>>2]<<2|0)|0;switch(g|0){case 1:{h=k[d>>2]|0;b=(a|0)==0;if(h>>>0>>0){if(b){r=e;return}k[a+32>>2]=1;k[a>>2]=0;r=e;return}else{if(b)l=h;else{k[a+32>>2]=1;k[a>>2]=(h>>>0)/(c>>>0)|0;l=k[d>>2]|0}k[d>>2]=(l>>>0)%(c>>>0)|0;r=e;return}break}case 2:{l=k[d+(f<<2)>>2]|0;h=k[d>>2]|0;if(a){b=Ryb(h|0,l|0,c|0,0)|0;i=M;k[a>>2]=b;k[a+4>>2]=i;k[a+32>>2]=(i|0)!=0?2:1}i=Syb(h|0,l|0,c|0,0)|0;k[d>>2]=i;k[d+4>>2]=0;k[d+32>>2]=1;r=e;return}default:{i=(a|0)!=0;if(i){l=g>>>0>8?8:g;k[a+32>>2]=l;if(l>>>0>f>>>0)k[a+(f<<2)>>2]=0;l=d+32|0;g=f;while(1){h=d+(g<<2)|0;b=k[h>>2]|0;j=(g|0)!=0;if(j&b>>>0>>0){m=g+-1|0;n=d+(m<<2)|0;o=k[n>>2]|0;p=Syb(o|0,b|0,c|0,0)|0;q=(k[l>>2]|0)+-1|0;k[l>>2]=q>>>0>8?8:q;k[n>>2]=p;p=Ryb(o|0,b|0,c|0,0)|0;k[a+(m<<2)>>2]=p;if(m){if(k[n>>2]|0){g=m;continue}m=g+-2|0;n=(k[l>>2]|0)+-1|0;k[l>>2]=n>>>0>8?8:n;k[a+(m<<2)>>2]=0;s=m;t=30}}else{k[a+(g<<2)>>2]=(b>>>0)/(c>>>0)|0;b=((k[h>>2]|0)>>>0)%(c>>>0)|0;k[h>>2]=b;if(j&(b|0)==0){b=g+-1|0;j=(k[l>>2]|0)+-1|0;k[l>>2]=j>>>0>8?8:j;k[a+(b<<2)>>2]=0;s=b;t=30}else{s=g;t=30}}if((t|0)==30?(t=0,(s|0)!=0):0){g=s;continue}if((k[d>>2]|0)>>>0>>0){u=l;break}else g=0}}else{g=d+32|0;l=f;while(1){f=d+(l<<2)|0;s=k[f>>2]|0;b=(l|0)!=0;if(b&s>>>0>>0){j=l+-1|0;h=d+(j<<2)|0;m=Syb(k[h>>2]|0,s|0,c|0,0)|0;n=(k[g>>2]|0)+-1|0;k[g>>2]=n>>>0>8?8:n;k[h>>2]=m;if(j){if(m){l=j;continue}j=(k[g>>2]|0)+-1|0;k[g>>2]=j>>>0>8?8:j;v=l+-2|0;t=38}}else{j=(s>>>0)%(c>>>0)|0;k[f>>2]=j;if(b&(j|0)==0){j=(k[g>>2]|0)+-1|0;k[g>>2]=j>>>0>8?8:j;v=l+-1|0;t=38}else{v=l;t=38}}if((t|0)==38?(t=0,(v|0)!=0):0){l=v;continue}if((k[d>>2]|0)>>>0>>0){u=g;break}else l=0}}a:do if(i?(l=a+32|0,g=(k[l>>2]|0)+-1|0,(g|0)!=0):0){c=g;do{if(k[a+(c<<2)>>2]|0)break a;k[l>>2]=c;c=c+-1|0}while((c|0)!=0)}while(0);a=(k[u>>2]|0)+-1|0;if(!a){r=e;return}else w=a;while(1){if(k[d+(w<<2)>>2]|0){t=47;break}k[u>>2]=w;w=w+-1|0;if(!w){t=47;break}}if((t|0)==47){r=e;return}}}}function uC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;d=k[b+32>>2]|0;e=k[c+32>>2]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){i=Hyb(k[c>>2]|0,0,k[b>>2]|0,0)|0;j=M;k[a>>2]=i;k[a+4>>2]=j;k[a+32>>2]=(j|0)!=0?2:1;return}j=a+32|0;k[j>>2]=h>>>0>8?8:h;i=b;b=c;c=a+(g<<2)|0;l=f?b:i;if((a|0)==(c|0)){m=l;n=0;o=0;p=a}else{q=a+(-8-((e>>>0>d>>>0?d:e)<<2^-4)+4)|0;e=l;l=f?i:b;b=0;i=0;f=a;while(1){d=e;r=l;s=k[r>>2]|0;t=Hyb(k[d>>2]|0,0,b|0,i|0)|0;u=Hyb(t|0,M|0,s|0,0)|0;s=M;k[f>>2]=u;f=f+4|0;u=d+4|0;if((f|0)==(c|0)){v=u;w=s;x=0;break}else{e=u;l=r+4|0;b=s;i=0}}m=v;n=w;o=x;p=q}q=c+(h-g<<2)|0;g=(n|0)==0&(o|0)==0;do if((p|0)==(q|0)){if(!g){y=n;z=14}}else{c=m;x=n;w=o;v=g;i=p;while(1){b=c;if(v){A=c;B=b;C=i;break}l=Hyb(k[b>>2]|0,0,x|0,w|0)|0;x=M;k[i>>2]=l;i=i+4|0;v=(x|0)==0&0==0;if((i|0)==(q|0)){z=12;break}else{c=b+4|0;w=0}}if((z|0)==12)if(v)break;else{y=x;z=14;break}if((B|0)!=(C|0))Eyb(C|0,A|0,B+(q-C>>2<<2)-A|0)|0}while(0);if((z|0)==14?(A=h+1|0,C=A>>>0>8?8:A,k[j>>2]=C,C>>>0>h>>>0):0)k[a+(h<<2)>>2]=y;y=(k[j>>2]|0)+-1|0;if(!y)return;else D=y;while(1){if(k[a+(D<<2)>>2]|0){z=19;break}k[j>>2]=D;D=D+-1|0;if(!D){z=19;break}}if((z|0)==19)return}function vC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;I0a(f,a);a=f+8|0;e=f+12|0;k[e>>2]=0;k[f>>2]=26324;k[a>>2]=26344;k[f+16>>2]=b;k[f+20>>2]=c;k[f+24>>2]=d;x=0;va(1490,f|0);x=0;d=Hc()|0;k[a>>2]=20796;a=k[e>>2]|0;if(!a){qCa(f);Sc(d|0)}x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c){qCa(f);Sc(d|0)}k[e>>2]=0;qCa(f);Sc(d|0)}function wC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+32|0;c=b;b=Rd(32)|0;I0a(c,a);k[c>>2]=47584;d=c+8|0;k[d>>2]=20796;e=k[a+12>>2]|0;k[c+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(c);g=f;h=e}else{e=c+16|0;f=a+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[c>>2]=26324;k[d>>2]=26344;x=0;xa(691,b|0,c|0);f=x;x=0;if(f&1)i=1;else{x=0;fb(149,b|0,2488,326);x=0;i=0}f=Hc()|0;e=M;k[d>>2]=20796;d=c+12|0;a=k[d>>2]|0;if(a){x=0;j=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(j)k[d>>2]=0}qCa(c);if(i){g=e;h=f}else{l=e;m=f;Sc(m|0)}}Fc(b|0);l=g;m=h;Sc(m|0)}function xC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=a+28|0;k[c>>2]=21368;I0a(a,b);k[a>>2]=47584;d=a+8|0;k[d>>2]=20796;e=k[b+12>>2]|0;k[a+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(a);g=f;h=e;Sc(h|0)}e=a+16|0;f=b+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[a>>2]=26364;f=a+8|0;k[f>>2]=26392;k[c>>2]=26420;x=0;xa(608,f|0,b+8|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;f=M;k[d>>2]=20796;d=a+12|0;c=k[d>>2]|0;if(c){x=0;e=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(e)k[d>>2]=0}qCa(a);g=f;h=b;Sc(h|0)}function yC(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(!c){qCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(a);return}k[b>>2]=0;qCa(a);return}function zC(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}qCa(a);OBa(a);return}function AC(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(32)|0;x=0;i[c>>0]=i[b>>0]|0;fb(205,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-12>>2]|0)|0}return 0}function BC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Rd(32)|0;c=b+28|0;k[c>>2]=21368;I0a(b,a);k[b>>2]=47584;d=b+8|0;k[d>>2]=20796;e=k[a+12>>2]|0;k[b+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;qCa(b);Fc(b|0);Sc(e|0)}e=b+16|0;f=a+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[b>>2]=26364;k[d>>2]=26392;k[c>>2]=26420;Gf(b|0,2488,326)}function CC(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function DC(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[a>>2]=0}qCa(b);OBa(b);return}function EC(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(32)|0;x=0;i[c>>0]=i[b>>0]|0;fb(205,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-12>>2]|0)|0}return 0}function FC(a){a=a|0;BC(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function GC(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function HC(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);OBa(b);return}k[a>>2]=0;qCa(b);OBa(b);return}function IC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=a+28|0;k[c>>2]=21368;I0a(a,b);k[a>>2]=47584;d=a+8|0;k[d>>2]=20796;e=k[b+12>>2]|0;k[a+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(a);g=f;h=e;Sc(h|0)}e=a+16|0;f=b+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[a>>2]=26364;f=a+8|0;k[f>>2]=26392;k[c>>2]=26420;x=0;xa(608,f|0,b+8|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;f=M;k[d>>2]=20796;d=a+12|0;c=k[d>>2]|0;if(c){x=0;e=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(e)k[d>>2]=0}qCa(a);g=f;h=b;Sc(h|0)}function JC(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(!c){qCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(a);return}k[b>>2]=0;qCa(a);return}function KC(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}qCa(a);OBa(a);return}function LC(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function MC(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[a>>2]=0}qCa(b);OBa(b);return}function NC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=a+32|0;c=k[b>>2]|0;if((c|0)==1)if(!(k[a>>2]|0))return;else d=4;else if(c>>>0<8)d=4;if((d|0)==4){e=c<<2;Fyb(a+e|0,0,32-e|0)|0}k[b>>2]=8;e=k[a>>2]|0;k[a>>2]=~e;c=a+4|0;k[c>>2]=~k[c>>2];c=a+8|0;k[c>>2]=~k[c>>2];c=a+12|0;k[c>>2]=~k[c>>2];c=a+16|0;k[c>>2]=~k[c>>2];c=a+20|0;k[c>>2]=~k[c>>2];c=a+24|0;k[c>>2]=~k[c>>2];c=a+28|0;k[c>>2]=~k[c>>2];if((((((k[a+28>>2]|0)==0?(k[b>>2]=7,(k[a+24>>2]|0)==0):0)?(k[b>>2]=6,(k[a+20>>2]|0)==0):0)?(k[b>>2]=5,(k[a+16>>2]|0)==0):0)?(k[b>>2]=4,(k[a+12>>2]|0)==0):0)?(k[b>>2]=3,(k[a+8>>2]|0)==0):0){k[b>>2]=2;k[b>>2]=(k[a+4>>2]|0)==0?1:2}if(!e){f=1;g=0;h=0}else{k[a>>2]=0-e;return}while(1){e=a+(h<<2)|0;c=Hyb(k[e>>2]|0,0,f|0,g|0)|0;i=M;k[e>>2]=c;if((i|0)==0&0==0)break;h=h+1|0;c=k[b>>2]|0;if(h>>>0>=c>>>0){j=c;l=i;d=11;break}else{f=i;g=0}}if((d|0)==11?(g=j+1|0,f=g>>>0>8?8:g,k[b>>2]=f,f>>>0>j>>>0):0)k[a+(j<<2)>>2]=l;l=(k[b>>2]|0)+-1|0;if(!l)return;else m=l;while(1){if(k[a+(m<<2)>>2]|0){d=16;break}k[b>>2]=m;m=m+-1|0;if(!m){d=16;break}}if((d|0)==16)return}function OC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;c=r;r=r+16|0;d=c;e=k[b+12>>2]|0;f=b+16|0;if((e|0)==(f|0)){SC(a,b)|0;r=c;return}g=a+12|0;h=a+4|0;i=a+16|0;j=i;l=a+16|0;m=a+20|0;n=e;while(1){e=(k[h>>2]|0)-(k[a>>2]|0)+(k[n+16>>2]|0)|0;o=k[i>>2]|0;do if(o){p=o;while(1){q=k[p+16>>2]|0;if(e>>>0>>0){s=k[p>>2]|0;if(!s){t=p;u=p;v=7;break}else w=s}else{if(q>>>0>=e>>>0){x=p;v=13;break}q=p+4|0;s=k[q>>2]|0;if(!s){y=q;z=p;v=11;break}else w=s}p=w}if((v|0)==7){v=0;k[d>>2]=u;A=t;B=u;v=14;break}else if((v|0)==11){v=0;k[d>>2]=z;A=y;B=z;v=14;break}else if((v|0)==13){v=0;k[d>>2]=x;if(!x){A=d;B=x;v=14;break}else{C=x;break}}}else{k[d>>2]=i;A=i;B=j;v=14}while(0);if((v|0)==14){v=0;o=KBa(32)|0;k[o+16>>2]=e;p=o+20|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=B;k[A>>2]=o;p=k[k[g>>2]>>2]|0;if(!p)D=o;else{k[g>>2]=p;D=k[A>>2]|0}ui(k[l>>2]|0,D);k[m>>2]=(k[m>>2]|0)+1;C=o}M2a(C+20|0,n+20|0)|0;o=k[n+4>>2]|0;if(!o){p=n;while(1){s=k[p+8>>2]|0;if((k[s>>2]|0)==(p|0)){E=s;break}else p=s}}else{p=o;while(1){e=k[p>>2]|0;if(!e){E=p;break}else p=e}}if((E|0)==(f|0))break;else n=E}SC(a,b)|0;r=c;return}function PC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+32|0;d=c+16|0;e=c;k[e+4>>2]=0;f=e+8|0;k[f>>2]=0;g=e+4|0;k[e>>2]=g;h=a+12|0;i=k[h>>2]|0;j=a+16|0;do if((i|0)!=(j|0)){l=b+4|0;m=a+4|0;n=i;a:while(1){o=n+16|0;p=TC(b,n+20|0)|0;do if((p|0)==(l|0)){x=0;fb(206,d|0,e|0,o|0);q=x;x=0;if(q&1){s=12;break a}}else{q=p+28|0;t=k[a>>2]|0;u=(k[m>>2]|0)-t|0;v=k[o>>2]|0;if(!t){w=0;y=0}else{z=(v+20|0)>>>0>u>>>0|(u>>>0>>0|u>>>0<20);w=z?0:t+v|0;y=z?0:20}if((p+48|0)>>>0>w>>>0&q>>>0<(w+y|0)>>>0){Eyb(w|0,q|0,y|0)|0;break}else{Dyb(w|0,q|0,y|0)|0;break}}while(0);p=k[n+4>>2]|0;if(!p){o=n;while(1){q=k[o+8>>2]|0;if((k[q>>2]|0)==(o|0)){A=q;break}else o=q}}else{o=p;while(1){q=k[o>>2]|0;if(!q){A=o;break}else o=q}}if((A|0)==(j|0)){s=4;break}else n=A}if((s|0)==4){B=e;C=g;D=h;E=k[e>>2]|0;F=k[h>>2]|0;G=k[g>>2]|0;H=k[f>>2]|0;break}else if((s|0)==12){n=Hc()|0;Ci(e,k[g>>2]|0);Sc(n|0)}}else{B=e;C=g;D=h;E=g;F=i;G=0;H=0}while(0);k[D>>2]=E;k[B>>2]=F;F=k[j>>2]|0;k[j>>2]=G;k[C>>2]=F;C=a+20|0;a=k[C>>2]|0;k[C>>2]=H;k[f>>2]=a;f=F;if(!H)k[h>>2]=j;else k[G+8>>2]=j;if(!a){k[e>>2]=g;Ci(e,f);r=c;return}else{k[F+8>>2]=g;Ci(e,f);r=c;return}}function QC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;VC(a,b,2,0);c=k[b+12>>2]|0;d=b+16|0;if((c|0)==(d|0))return;b=a+1|0;e=a+8|0;f=c;while(1){c=k[f+16>>2]<<1;g=f+20|0;if(!(i[a>>0]&1))h=b;else h=k[e>>2]|0;i[h+(c+39)>>0]=95;if(!(i[a>>0]&1))j=b;else j=k[e>>2]|0;i[j+(c+38)>>0]=95;if(!(i[a>>0]&1))l=b;else l=k[e>>2]|0;i[l+(c|1)>>0]=95;if(!(i[a>>0]&1))m=b;else m=k[e>>2]|0;i[m+c>>0]=95;n=g+1|0;o=f+28|0;p=c+2|0;c=f+24|0;q=0;do{r=i[g>>0]|0;s=(r&1)==0;if(s)t=(r&255)>>>1;else t=k[c>>2]|0;if(q>>>0>>0){if(s)u=n;else u=k[o>>2]|0;v=i[u+q>>0]|0}else v=95;if(!(i[a>>0]&1))w=b;else w=k[e>>2]|0;i[w+(p+q)>>0]=v;q=q+1|0}while((q|0)!=36);q=k[f+4>>2]|0;if(!q){p=f;while(1){o=k[p+8>>2]|0;if((k[o>>2]|0)==(p|0)){x=o;break}else p=o}}else{p=q;while(1){o=k[p>>2]|0;if(!o){x=p;break}else p=o}}if((x|0)==(d|0))break;else f=x}return}function RC(){k[6612]=0;k[6613]=0;k[6614]=0;return}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=k[b>>2]|0;d=k[b+4>>2]|0;if((c|0)==(d|0))return a|0;b=a+4|0;e=a+8|0;f=c;do{c=k[b>>2]|0;g=k[e>>2]|0;if((c|0)==(g|0)){h=k[a>>2]|0;j=c-h+1|0;if((j|0)<0){HBa(a);l=k[a>>2]|0;m=k[e>>2]|0}else{l=h;m=g}g=l;h=m-l|0;if(h>>>0<1073741823){n=h<<1;h=n>>>0>>0?j:n;n=k[b>>2]|0;j=n-l|0;if(!h){o=0;p=0;q=j;r=n}else{s=h;t=n;u=j;v=11}}else{j=k[b>>2]|0;s=2147483647;t=j;u=j-l|0;v=11}if((v|0)==11){v=0;o=s;p=KBa(s)|0;q=u;r=t}j=p+q|0;i[j>>0]=i[f>>0]|0;n=r-l|0;h=j+(0-n)|0;Dyb(h|0,g|0,n|0)|0;k[a>>2]=h;k[b>>2]=j+1;k[e>>2]=p+o;if(l)OBa(g)}else{i[c>>0]=i[f>>0]|0;k[b>>2]=(k[b>>2]|0)+1}f=f+1|0}while((f|0)!=(d|0));return a|0}function TC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=a+4|0;a=k[c>>2]|0;if(a){d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=e?b+1|0:k[b+8>>2]|0;b=c;e=a;a:while(1){a=e;while(1){g=a+16|0;h=i[g>>0]|0;j=(h&1)==0;l=j?(h&255)>>>1:k[a+20>>2]|0;h=ZLa(j?g+1|0:k[a+24>>2]|0,d,f>>>0>>0?f:l)|0;if((((h|0)==0?(l>>>0>>0?-2147483648:0):h)|0)>=0){m=a;break}a=k[a+4>>2]|0;if(!a){n=b;break a}}e=k[m>>2]|0;if(!e){n=m;break}else b=m}if((n|0)!=(c|0)?(m=n+16|0,b=i[m>>0]|0,e=(b&1)==0,a=e?(b&255)>>>1:k[n+20>>2]|0,b=ZLa(d,e?m+1|0:k[n+24>>2]|0,a>>>0>>0?a:f)|0,(((b|0)==0?(f>>>0>>0?-2147483648:0):b)|0)>=0):0){o=n;return o|0}}o=c;return o|0}function UC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+16|0;e=d;f=KBa(32)|0;g=f+16|0;k[g>>2]=k[c>>2];h=f+20|0;x=0;xa(604,h|0,c+4|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(f);Sc(c|0)}c=b+4|0;j=k[c>>2]|0;do if(j){l=k[g>>2]|0;m=j;while(1){n=k[m+16>>2]|0;if(l>>>0>>0){o=k[m>>2]|0;if(!o){p=m;q=m;s=7;break}else t=o}else{if(n>>>0>=l>>>0){u=m;s=12;break}n=m+4|0;o=k[n>>2]|0;if(!o){v=n;w=m;s=11;break}else t=o}m=t}if((s|0)==7){k[e>>2]=q;y=p;z=q;break}else if((s|0)==11){k[e>>2]=w;y=v;z=w;break}else if((s|0)==12){k[e>>2]=u;y=e;z=u;break}}else{k[e>>2]=c;y=c;z=c}while(0);c=k[y>>2]|0;if(!c){k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=z;k[y>>2]=f;z=k[k[b>>2]>>2]|0;if(!z)A=f;else{k[b>>2]=z;A=k[y>>2]|0}ui(k[b+4>>2]|0,A);A=b+8|0;k[A>>2]=(k[A>>2]|0)+1;B=1;C=f}else{B=0;C=c}k[a>>2]=C;i[a+4>>0]=B;if(B<<24>>24){r=d;return}K2a(h);OBa(f);r=d;return}function VC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=r;r=r+176|0;f=e+152|0;g=e+16|0;h=e;j=g+56|0;l=g+4|0;k[g>>2]=20356;k[j>>2]=20376;x=0;xa(582,g+56|0,l|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;o=m;mab(j);Sc(o|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=20300;k[g+56>>2]=20320;x=0;va(1449,l|0);m=x;x=0;do if(m&1){p=Hc()|0;q=M;s=p}else{k[l>>2]=20392;p=g+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(583,l|0,f|0);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(f);K2a(p);obb(l);q=u;s=t;break}K2a(f);t=k[b>>2]|0;u=k[b+4>>2]|0;a:do if((t|0)==(u|0))v=11;else{w=t;y=0;while(1){z=i[w>>0]|0;A=g+(k[(k[g>>2]|0)+-12>>2]|0)+4|0;k[A>>2]=k[A>>2]&-75|8;k[g+(k[(k[g>>2]|0)+-12>>2]|0)+76>>2]=48;k[g+(k[(k[g>>2]|0)+-12>>2]|0)+12>>2]=(y|0)!=0?2:c;x=0;Ta(477,g|0,z&255|0)|0;z=x;x=0;if(z&1)break;w=w+1|0;if((w|0)==(u|0)){v=11;break a}else y=y+1|0}y=Hc()|0;B=y;C=M}while(0);do if((v|0)==11){x=0;if((d|0)!=1){Fi(a,l);u=x;x=0;if(!(u&1)){k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);r=e;return}u=Hc()|0;D=M;E=u;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(E|0)}Fi(h,l);u=x;x=0;if(u&1){u=Hc()|0;B=u;C=M;break}x=0;u=Fa(86,h|0,0,257534)|0;t=x;x=0;if(t&1){t=Hc()|0;y=M;K2a(h);D=y;E=t;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(E|0)}else{k[a>>2]=k[u>>2];k[a+4>>2]=k[u+4>>2];k[a+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;K2a(h);k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);r=e;return}}while(0);D=C;E=B;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(E|0)}while(0);n=q;o=s;mab(j);Sc(o|0)}function WC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+96|0;d=c+80|0;e=c;f=c+40|0;switch(k[a>>2]|0){case 3:{g=33;r=c;return g|0}case 2:{h=e;i=a+8|0;j=h+40|0;do{k[h>>2]=k[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));i=e+32|0;a=k[i>>2]|0;l=k[e>>2]|0;if((a|0)!=1|(l|0)!=0){m=l;l=a;a=0;while(1){n=a+1|0;do if(!l){k[i>>2]=1;k[e>>2]=0;o=1;p=0}else{q=l+-1|0;s=(((k[e+(q<<2)>>2]|0)>>>0<256)<<31>>31)+l|0;if(!s){k[i>>2]=1;k[e>>2]=0;o=1;p=0;break}t=m>>>8;k[e>>2]=t;if(l>>>0>1){u=1;v=t;w=e;y=0;while(1){k[w>>2]=k[e+(u<<2)>>2]<<24|v;z=y+1|0;w=e+(z<<2)|0;v=(k[w>>2]|0)>>>8;k[w>>2]=v;if((z|0)==(q|0))break;else{u=y+2|0;y=z}}A=k[e>>2]|0}else A=t;y=s>>>0>8?8:s;k[i>>2]=y;o=y;p=A}while(0);if((p|0)!=0|(o|0)!=1){m=p;l=o;a=n}else{B=n;break}}}else B=0;g=(B>>>0>1?B:1)+1|0;r=c;return g|0}case 7:case 6:{g=4;r=c;return g|0}case 5:case 9:case 4:{g=b+1|0;r=c;return g|0}case 10:{g=21;r=c;return g|0}case 8:case 1:{g=1;r=c;return g|0}default:{h=f;j=h+36|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(j|0));h=f+20|0;j=f+24|0;k[j>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;g=f+4|0;c=f+8|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[f+4>>2]=24840;k[f>>2]=24804;k[h>>2]=24864;x=0;nb(100,f|0,216247,216318,52);x=0;f=Hc()|0;k[g>>2]=24896;k[g+-4>>2]=24924;k[g+16>>2]=24948;K2a(c);k[h>>2]=20796;h=k[j>>2]|0;if(!h)Sc(f|0);x=0;c=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}if(!c)Sc(f|0);k[j>>2]=0;Sc(f|0)}}return 0}function XC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+64|0;c=b+32|0;d=b;switch(k[a>>2]|0){case 1:{e=a+8|0;PQ(c,k[e>>2]&255);a=k[c+20>>2]|0;x=0;xa(692,d|0,k[e>>2]&255|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}e=a-(k[d+16>>2]|0)|0;K2a(d);K2a(c);f=e;r=b;return f|0}case 8:{f=0;r=b;return f|0}case 10:case 7:case 6:case 5:case 9:case 4:case 3:case 2:{f=1;r=b;return f|0}default:{f=0;r=b;return f|0}}return 0}function YC(a,b){a=a|0;b=b|0;switch(k[b+64>>2]|0){case 1:{q2a(a,216350,4);return}case 2:{q2a(a,216355,5);return}default:{q2a(a,329672,0);return}}}function ZC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+240|0;d=c+120|0;e=c+88|0;f=c+76|0;g=c+64|0;h=c+200|0;j=c+52|0;l=c+168|0;m=c+40|0;n=c+136|0;o=c;do switch(k[b>>2]|0){case 1:{p=ei(a,324196,1)|0;q=b+8|0;PQ(e,k[q>>2]&255);s=i[e>>0]|0;t=(s&1)==0;x=0;Fa(92,p|0,(t?e+1|0:k[e+8>>2]|0)|0,(t?(s&255)>>>1:k[e+4>>2]|0)|0)|0;s=x;x=0;if(s&1){s=Hc()|0;t=M;K2a(e);u=t;v=s;Sc(v|0)}K2a(e);if((k[q>>2]&254|0)!=86){r=c;return a|0}q=ei(a,324244,1)|0;switch(k[b+64>>2]|0){case 1:{q2a(f,216350,4);break}case 2:{q2a(f,216355,5);break}default:q2a(f,329672,0)}s=i[f>>0]|0;t=(s&1)==0;x=0;Fa(92,q|0,(t?f+1|0:k[f+8>>2]|0)|0,(t?(s&255)>>>1:k[f+4>>2]|0)|0)|0;s=x;x=0;if(s&1){s=Hc()|0;t=M;K2a(f);u=t;v=s;Sc(v|0)}else{K2a(f);r=c;return a|0}break}case 2:{s=ei(a,216361,6)|0;t=s+(k[(k[s>>2]|0)+-12>>2]|0)+4|0;k[t>>2]=k[t>>2]&-75|8;aD(s,b+8|0)|0;r=c;return a|0}case 3:{s=ei(a,216368,11)|0;t=s+(k[(k[s>>2]|0)+-12>>2]|0)+4|0;k[t>>2]=k[t>>2]&-75|8;ffb(s,k[b+8>>2]|0)|0;r=c;return a|0}case 4:{aD(ei(a,216380,9)|0,b+8|0)|0;r=c;return a|0}case 8:{aD(ei(a,216390,5)|0,b+8|0)|0;r=c;return a|0}case 9:{s=ei(a,216396,10)|0;t=s+(k[(k[s>>2]|0)+-12>>2]|0)+4|0;k[t>>2]=k[t>>2]&-75|8;ffb(s,k[b+8>>2]|0)|0;r=c;return a|0}case 5:{s=ei(a,216407,9)|0;t=s+(k[(k[s>>2]|0)+-12>>2]|0)+4|0;k[t>>2]=k[t>>2]&-75|8;nC(h,b+8|0);bD(g,h);t=i[g>>0]|0;q=(t&1)==0;x=0;Fa(92,s|0,(q?g+1|0:k[g+8>>2]|0)|0,(q?(t&255)>>>1:k[g+4>>2]|0)|0)|0;t=x;x=0;if(t&1){t=Hc()|0;q=M;K2a(g);u=q;v=t;Sc(v|0)}else{K2a(g);r=c;return a|0}break}case 6:{t=ei(a,216417,13)|0;q=t+(k[(k[t>>2]|0)+-12>>2]|0)+4|0;k[q>>2]=k[q>>2]&-75|8;nC(l,b+8|0);bD(j,l);q=i[j>>0]|0;s=(q&1)==0;x=0;Fa(92,t|0,(s?j+1|0:k[j+8>>2]|0)|0,(s?(q&255)>>>1:k[j+4>>2]|0)|0)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(j);u=s;v=q;Sc(v|0)}else{K2a(j);r=c;return a|0}break}case 7:{ei(a,216431,16)|0;r=c;return a|0}case 10:{q=ei(a,216448,20)|0;s=q+(k[(k[q>>2]|0)+-12>>2]|0)+4|0;k[s>>2]=k[s>>2]&-75|8;nC(n,b+8|0);bD(m,n);s=i[m>>0]|0;t=(s&1)==0;x=0;Fa(92,q|0,(t?m+1|0:k[m+8>>2]|0)|0,(t?(s&255)>>>1:k[m+4>>2]|0)|0)|0;s=x;x=0;if(s&1){s=Hc()|0;t=M;K2a(m);u=t;v=s;Sc(v|0)}else{K2a(m);r=c;return a|0}break}case 0:{ei(a,216469,4)|0;r=c;return a|0}default:{s=o;t=s+36|0;do{k[s>>2]=0;s=s+4|0}while((s|0)<(t|0));s=o+20|0;t=o+24|0;k[t>>2]=0;k[o+28>>2]=0;k[o+32>>2]=0;k[o+36>>2]=-1;q=o+4|0;p=o+8|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[o+4>>2]=24840;k[o>>2]=24804;k[s>>2]=24864;x=0;nb(100,o|0,216474,216318,131);x=0;w=Hc()|0;y=M;k[q>>2]=24896;k[q+-4>>2]=24924;k[q+16>>2]=24948;K2a(p);k[s>>2]=20796;s=k[t>>2]|0;if(s){x=0;p=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(p)k[t>>2]=0}u=y;v=w;Sc(v|0)}}while(0);return 0}function _C(){k[6615]=0;k[6616]=0;k[6617]=0;return}function $C(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=24896;j=e+-4|0;k[j>>2]=24924;a=e+16|0;k[a>>2]=24948;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=24840;k[f>>2]=24804;k[h>>2]=24864;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1488,f|0);x=0;d=Hc()|0;k[e>>2]=24896;k[j>>2]=24924;k[a>>2]=24948;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function aD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+16|0;d=c+12|0;e=c;cD(e,b,k[a+(k[(k[a>>2]|0)+-12>>2]|0)+4>>2]|0,d);b=k[(k[a>>2]|0)+-12>>2]|0;f=a+b|0;g=k[f+12>>2]|0;h=i[e>>0]|0;j=e+4|0;l=k[j>>2]|0;a:do if((g|0)>(((h&1)==0?(h&255)>>>1:l)|0)){m=f+76|0;n=k[m>>2]|0;do if((n|0)==-1){x=0;o=Ba(564,f|0)|0;p=x;x=0;if(p&1)break a;k[d>>2]=o;x=0;o=Ta(495,d|0,74148)|0;p=x;x=0;if(!(p&1)?(x=0,p=Ta(k[(k[o>>2]|0)+28>>2]|0,o|0,32)|0,o=x,x=0,!(o&1)):0){$pb(d);o=p<<24>>24;k[m>>2]=o;q=o;s=k[(k[a>>2]|0)+-12>>2]|0;t=i[e>>0]|0;u=k[j>>2]|0;break}o=Hc()|0;p=M;$pb(d);v=p;w=o;K2a(e);Sc(w|0)}else{q=n;s=b;t=h;u=l}while(0);n=q&255;m=g-((t&1)==0?(t&255)>>>1:u)|0;x=0;if(!(k[a+s+4>>2]&32)){e4a(e,0,m,n)|0;o=x;x=0;if(o&1)break;else{y=13;break}}else{r3a(e,m,n)|0;n=x;x=0;if(n&1)break;else{y=13;break}}}else y=13;while(0);if((y|0)==13?(y=i[e>>0]|0,s=(y&1)==0,x=0,u=Fa(92,a|0,(s?e+1|0:k[e+8>>2]|0)|0,(s?(y&255)>>>1:k[j>>2]|0)|0)|0,j=x,x=0,!(j&1)):0){K2a(e);r=c;return u|0}u=Hc()|0;v=M;w=u;K2a(e);Sc(w|0);return 0}function bD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+64|0;d=c+44|0;e=c+32|0;f=c+24|0;g=c+8|0;h=c;j=(b|0)==0;k[f>>2]=b;k[f+4>>2]=j?0:4;Ag(e,f,2,0);x=0;f=Ta(484,e|0,216547)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(e);Sc(n|0)};k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[h>>2]=j?0:b+28|0;k[h+4>>2]=j?0:4;x=0;nb(81,g|0,h|0,2,0);h=x;x=0;do if(!(h&1)){j=i[g>>0]|0;b=(j&1)==0;x=0;f=Fa(88,d|0,(b?g+1|0:k[g+8>>2]|0)|0,(b?(j&255)>>>1:k[g+4>>2]|0)|0)|0;j=x;x=0;if(j&1){j=Hc()|0;b=M;K2a(g);o=b;p=j;break}else{k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(g);K2a(d);K2a(e);r=c;return}}else{f=Hc()|0;o=M;p=f}while(0);K2a(d);m=o;n=p;K2a(e);Sc(n|0)}function cD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;d=r;r=r+224|0;e=d+160|0;f=d+120|0;g=d+80|0;h=d+200|0;j=d+40|0;l=d;do if(!(c&64)){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;m=b+32|0;n=k[m>>2]<<5;if(!(c&8)){x=0;Fa(119,a|0,((n>>>0)/3|0)+1|0,48)|0;o=x;x=0;if(!(o&1)){o=i[a>>0]|0;if(!(o&1))p=(o&255)>>>1;else p=k[a+4>>2]|0;q=f;s=b;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));k[g>>2]=0;k[g+32>>2]=1;do if((k[m>>2]|0)==1){k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;Ta(537,f|0,h|0)|0;o=x;x=0;if(o&1){o=Hc()|0;u=M;K2a(h);v=u;w=o;K2a(a);Sc(w|0)}if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}x=0;xa(603,a|0,0);o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)}else{k[a>>2]=k[h>>2];k[a+4>>2]=k[h+4>>2];k[a+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;K2a(h);break}}else{k[j+32>>2]=1;k[j>>2]=1e9;o=f+32|0;a:do if(!((k[o>>2]|0)==1&(k[f>>2]|0)==0)){u=l+32|0;y=a+1|0;z=a+8|0;A=p+-1|0;while(1){k[l>>2]=0;k[u>>2]=1;x=0;nb(101,l|0,f|0,j|0,g|0);B=x;x=0;if(B&1)break;B=k[u>>2]|0;k[o>>2]=B;Dyb(f|0,l|0,B<<2|0)|0;B=0;C=A;D=k[g>>2]|0;while(1){if(!(i[a>>0]&1))E=y;else E=k[z>>2]|0;i[E+C>>0]=(D>>>0)%10|0|48;F=C+-1|0;B=B+1|0;if(!((C|0)!=0&B>>>0<9)){G=F;break}else{C=F;D=(D>>>0)/10|0}}if((k[o>>2]|0)==1&(k[f>>2]|0)==0)break a;else A=G}A=Hc()|0;v=M;w=A;K2a(a);Sc(w|0)}while(0)}while(0);m=i[a>>0]|0;if(!(m&1)){H=(m&255)>>>1;I=a+1|0}else{H=k[a+4>>2]|0;I=k[a+8>>2]|0}b:do if(!H)J=-1;else{m=I+H|0;o=I;while(1){if((i[o>>0]|0)!=48){K=o;break}o=o+1|0;if((o|0)==(m|0)){J=-1;break b}}J=K-I|0}while(0);x=0;Fa(101,a|0,0,J|0)|0;m=x;x=0;if(!(m&1)){m=i[a>>0]|0;if(!(m&1))L=(m&255)>>>1;else L=k[a+4>>2]|0;if((L|0)==0?(x=0,Ta(496,a|0,324198)|0,m=x,x=0,m&1):0)break;if((c&2048|0)!=0?(x=0,db(67,a|0,0,1,43)|0,m=x,x=0,m&1):0)break;r=d;return}}}else{N=0;O=n;P=a;Q=4}}else{k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;N=1;O=k[b+32>>2]<<5;P=a;Q=4}while(0);do if((Q|0)==4){L=N?3:4;J=(1<>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));n=(O>>>0)/(L>>>0)|0;I=(O>>>0)%(L>>>0)|0;K=(I|0)!=0;x=0;Fa(119,a|0,(K&1)+n|0,48)|0;H=x;x=0;if(!(H&1)){H=i[P>>0]|0;if(!(H&1))R=(H&255)>>>1;else R=k[a+4>>2]|0;G=R+-1|0;c:do if(!n)S=G;else{f=a+1|0;E=e+32|0;g=32-L|0;l=a+8|0;j=H;p=0;h=G;while(1){m=k[e>>2]|0;o=m&J;A=o+48|0;if(!(j&1))T=f;else T=k[l>>2]|0;i[T+h>>0]=(A&255)<<24>>24>57?o+55|0:A;A=k[E>>2]|0;do if(!A){k[E>>2]=1;k[e>>2]=0}else{o=A+-1|0;z=((((k[e+(o<<2)>>2]|0)>>>L|0)==0)<<31>>31)+A|0;if(!z){k[E>>2]=1;k[e>>2]=0;break}y=m>>>L;k[e>>2]=y;if(A>>>0>1){u=1;D=y;y=e;C=0;while(1){k[y>>2]=k[e+(u<<2)>>2]<>2]|0)>>>L;k[y>>2]=D;if((B|0)==(o|0))break;else{u=C+2|0;C=B}}}k[E>>2]=z>>>0>8?8:z}while(0);A=p+1|0;m=h+-1|0;if(A>>>0>=n>>>0){S=m;break c}j=i[P>>0]|0;p=A;h=m}}while(0);if(K){n=k[e>>2]&(1<>0]&1))U=a+1|0;else U=k[a+8>>2]|0;i[U+S>>0]=(L&255)<<24>>24>57?n+56|0:L}L=i[P>>0]|0;n=(L&1)==0;if(n){V=(L&255)>>>1;W=a+1|0}else{V=k[a+4>>2]|0;W=k[a+8>>2]|0}d:do if(!V)X=-1;else{J=W+V|0;G=W;while(1){if((i[G>>0]|0)!=48){Y=G;break}G=G+1|0;if((G|0)==(J|0)){X=-1;break d}}X=Y-W|0}while(0);if(n)Z=(L&255)>>>1;else Z=k[a+4>>2]|0;if((X|0)==-1&(Z|0)!=0){if(n)_=(L&255)>>>1;else _=k[a+4>>2]|0;$=_+-1|0}else $=X;x=0;Fa(101,a|0,0,$|0)|0;I=x;x=0;if(!(I&1)){if((c&512|0)!=0?(x=0,Fa(86,a|0,0,(N?324198:257534)|0)|0,I=x,x=0,I&1):0)break;r=d;return}}}while(0);d=Hc()|0;v=M;w=d;K2a(a);Sc(w|0)}function dD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+48|0;d=c+32|0;e=c;f=e+24|0;k[f>>2]=e+1;g=e+28|0;h=e+21|0;k[g>>2]=h;k[d>>2]=k[a>>2];k[d+4>>2]=h;i[d+8>>0]=48;k[d+12>>2]=48;a=eD(d)|0;k[f>>2]=a;k[g>>2]=h;g=h-a|0;f=i[b>>0]|0;if(!(f&1)){j=10;l=f}else{f=k[b>>2]|0;j=(f&-2)+-1|0;l=f&255}if(g>>>0>j>>>0){f=(l&1)==0?(l&255)>>>1:k[b+4>>2]|0;S3a(b,j,g-j|0,f,0,f,0);m=i[b>>0]|0}else m=l;l=(m&1)==0?b+1|0:k[b+8>>2]|0;if((a|0)==(h|0))n=l;else{m=a;a=l;while(1){i[a>>0]=i[m>>0]|0;m=m+1|0;if((m|0)==(h|0))break;else a=a+1|0}n=l+g|0}i[n>>0]=0;if(!(i[b>>0]&1)){i[b>>0]=g<<1;r=c;return 1}else{k[b+4>>2]=g;r=c;return 1}return 0}function eD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;b=r;r=r+16|0;c=b+12|0;d=b;Zpb(c);x=0;e=$a(48)|0;f=x;x=0;if(!(f&1)?(x=0,f=Ta(538,c|0,e|0)|0,e=x,x=0,!(e&1)):0){if(f){f=a+4|0;e=a+12|0;g=k[a>>2]|0;do{h=(k[f>>2]|0)+-1|0;k[f>>2]=h;i[h>>0]=(k[e>>2]|0)+((g>>>0)%10|0);h=k[a>>2]|0;g=(h>>>0)/10|0;k[a>>2]=g}while(h>>>0>9);j=k[f>>2]|0;$pb(c);r=b;return j|0}x=0;f=Ta(495,c|0,74408)|0;g=x;x=0;if(!(g&1)?(x=0,xa(k[(k[f>>2]|0)+20>>2]|0,d|0,f|0),g=x,x=0,!(g&1)):0){g=i[d>>0]|0;e=(g&1)==0;h=e?(g&255)>>>1:k[d+4>>2]|0;if((h|0)!=0?(g=d+8|0,l=d+1|0,(i[(e?l:k[g>>2]|0)>>0]|0)>=1):0){x=0;e=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc()|0;m=M;K2a(d);n=f;o=m;$pb(c);Sc(n|0)}m=i[((i[d>>0]&1)==0?l:k[g>>2]|0)>>0]|0;f=a+4|0;p=a+12|0;q=0;s=m;t=m;while(1){if(!(t<<24>>24)){m=q+1|0;if(m>>>0>>0){u=i[((i[d>>0]&1)==0?l:k[g>>2]|0)+m>>0]|0;v=u<<24>>24<1?127:u}else v=s;u=(k[f>>2]|0)+-1|0;k[f>>2]=u;i[u>>0]=e;w=m;y=v;z=v}else{w=q;y=s;z=t}m=(k[f>>2]|0)+-1|0;k[f>>2]=m;i[m>>0]=(k[p>>2]|0)+(((k[a>>2]|0)>>>0)%10|0);m=k[a>>2]|0;k[a>>2]=(m>>>0)/10|0;if(m>>>0>9){q=w;s=y;t=z+-1<<24>>24}else{A=f;break}}}else{f=a+4|0;z=a+12|0;t=k[a>>2]|0;do{y=(k[f>>2]|0)+-1|0;k[f>>2]=y;i[y>>0]=(k[z>>2]|0)+((t>>>0)%10|0);y=k[a>>2]|0;t=(y>>>0)/10|0;k[a>>2]=t}while(y>>>0>9);A=f}f=k[A>>2]|0;K2a(d);j=f;$pb(c);r=b;return j|0}}j=Hc()|0;n=j;o=M;$pb(c);Sc(n|0);return 0}function fD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;c=r;r=r+208|0;d=c+160|0;e=c+80|0;f=c+40|0;g=c;h=a+88|0;j=(k[b+88>>2]|0)+(k[h>>2]|0)|0;l=k[b+4>>2]|0;m=k[b+8>>2]|0;a:do if((l|0)==(m|0))n=a;else{o=e+8|0;p=e+48|0;q=e+56|0;s=e+60|0;t=e+64|0;u=e+68|0;v=e+72|0;w=d+32|0;y=e+40|0;z=f+32|0;A=a+28|0;B=a+32|0;C=d+32|0;D=g+32|0;E=l;while(1){k[e>>2]=k[E>>2];F=o;G=E+8|0;H=F+40|0;do{k[F>>2]=k[G>>2];F=F+4|0;G=G+4|0}while((F|0)<(H|0));I=E+48|0;J=k[I+4>>2]|0;K=p;k[K>>2]=k[I>>2];k[K+4>>2]=J;k[q>>2]=k[E+56>>2];J=k[E+60>>2]|0;k[s>>2]=J;if(J)h0a(J);k[t>>2]=k[E+64>>2];k[u>>2]=k[E+68>>2];J=k[E+72>>2]|0;k[v>>2]=J;if(J)h0a(J);switch(k[e>>2]|0){case 4:case 8:{k[d>>2]=0;J=k[a>>2]|0;K=k[y>>2]|0;I=K>>>0>8?8:K;k[w>>2]=I;b:do if(J)if(!I){L=1;N=I;O=J;P=0}else{K=J;Q=0;R=0;while(1){S=Hyb(k[o+(R<<2)>>2]|0,0,K|0,Q|0)|0;T=M;k[d+(R<<2)>>2]=S;S=R+1|0;U=k[w>>2]|0;if((T|0)==0&0==0){L=0;N=U;O=0;P=S;break b}if(S>>>0>>0){K=T;Q=0;R=S}else{V=S;W=U;X=T;break}}L=1;N=W;O=X;P=V}else{L=0;N=I;O=0;P=0}while(0);if(P>>>0>>0){I=P;do{k[d+(I<<2)>>2]=k[o+(I<<2)>>2];I=I+1|0;J=k[w>>2]|0}while(I>>>0>>0);Y=J}else Y=N;if(L){I=Y+1|0;J=I>>>0>8?8:I;k[w>>2]=J;if(J>>>0>Y>>>0){k[d+(Y<<2)>>2]=O;Z=k[w>>2]|0}else Z=J}else Z=Y;J=Z+-1|0;c:do if(J){I=J;do{if(k[d+(I<<2)>>2]|0)break c;k[w>>2]=I;I=I+-1|0}while((I|0)!=0)}while(0);F=f;G=d;H=F+40|0;do{k[F>>2]=k[G>>2];F=F+4|0;G=G+4|0}while((F|0)<(H|0));J=k[z>>2]|0;k[y>>2]=J;Dyb(o|0,f|0,J<<2|0)|0;break}case 6:case 5:{J=k[B>>2]|0;I=k[A>>2]|0;k[d>>2]=0;R=k[y>>2]|0;Q=R>>>0>8?8:R;k[C>>2]=Q;d:do if((J|0)!=(I|0)){R=(J-I|0)/116|0;if(!Q){_=1;$=Q;aa=R;ba=0}else{K=R;R=0;T=0;while(1){U=Hyb(k[o+(T<<2)>>2]|0,0,K|0,R|0)|0;S=M;k[d+(T<<2)>>2]=U;U=T+1|0;ca=k[C>>2]|0;if((S|0)==0&0==0){_=0;$=ca;aa=0;ba=U;break d}if(U>>>0>>0){K=S;R=0;T=U}else{da=U;ea=ca;fa=S;break}}_=1;$=ea;aa=fa;ba=da}}else{_=0;$=Q;aa=0;ba=0}while(0);if(ba>>>0<$>>>0){Q=ba;do{k[d+(Q<<2)>>2]=k[o+(Q<<2)>>2];Q=Q+1|0;I=k[C>>2]|0}while(Q>>>0>>0);ga=I}else ga=$;if(_){Q=ga+1|0;I=Q>>>0>8?8:Q;k[C>>2]=I;if(I>>>0>ga>>>0){k[d+(ga<<2)>>2]=aa;ha=k[C>>2]|0}else ha=I}else ha=ga;I=ha+-1|0;e:do if(I){Q=I;do{if(k[d+(Q<<2)>>2]|0)break e;k[C>>2]=Q;Q=Q+-1|0}while((Q|0)!=0)}while(0);F=g;G=d;H=F+40|0;do{k[F>>2]=k[G>>2];F=F+4|0;G=G+4|0}while((F|0)<(H|0));I=k[D>>2]|0;k[y>>2]=I;Dyb(o|0,g|0,I<<2|0)|0;break}default:{}}x=0;Ta(539,a|0,e|0)|0;I=x;x=0;if(I&1)break;I=k[v>>2]|0;if(I)j0a(I);I=k[s>>2]|0;if(I)j0a(I);E=E+80|0;if((E|0)==(m|0)){n=a;break a}}E=Hc()|0;o=k[v>>2]|0;if(o)j0a(o);o=k[s>>2]|0;if(!o)Sc(E|0);j0a(o);Sc(E|0)}while(0);k[h>>2]=j;k[n>>2]=(k[n>>2]|0)+(k[b>>2]|0);n=k[b+16>>2]|0;j=b+20|0;if((n|0)!=(j|0)){h=a+16|0;m=e+4|0;g=d+8|0;ha=n;while(1){vD(d,h,ha+16|0);n=k[d>>2]|0;wD(e,h,n);ga=(i[m>>0]|0)!=0;k[d>>2]=0;if(!((n|0)==0|ga)){if((i[g>>0]|0)!=0?(ga=k[n+48>>2]|0,(ga|0)!=0):0){aa=n+52|0;if((k[aa>>2]|0)!=(ga|0))k[aa>>2]=ga;OBa(ga)}OBa(n)}n=k[ha+4>>2]|0;if(!n){ga=ha;while(1){aa=k[ga+8>>2]|0;if((k[aa>>2]|0)==(ga|0)){ia=aa;break}else ga=aa}}else{ga=n;while(1){s=k[ga>>2]|0;if(!s){ia=ga;break}else ga=s}}if((ia|0)==(j|0))break;else ha=ia}}ia=k[b+40>>2]|0;ha=b+44|0;f:do if((ia|0)!=(ha|0)){j=a+40|0;g=d+4|0;m=ia;while(1){h=KBa(60)|0;F=h+16|0;G=m+16|0;H=F+32|0;do{i[F>>0]=i[G>>0]|0;F=F+1|0;G=G+1|0}while((F|0)<(H|0));e=h+48|0;x=0;xa(604,e|0,m+48|0);ga=x;x=0;if(ga&1){ja=h;break}zD(d,j,h);if(!(i[g>>0]|0)){K2a(e);OBa(h)}e=k[m+4>>2]|0;if(!e){ga=m;while(1){n=k[ga+8>>2]|0;if((k[n>>2]|0)==(ga|0)){ka=n;break}else ga=n}}else{ga=e;while(1){h=k[ga>>2]|0;if(!h){ka=ga;break}else ga=h}}if((ka|0)==(ha|0))break f;else m=ka}m=Hc()|0;OBa(ja);Sc(m|0)}while(0);ja=a+28|0;ka=k[b+28>>2]|0;ha=k[b+32>>2]|0;if((ka|0)!=(ha|0)){ia=a+32|0;m=a+36|0;g=ka;do{ka=k[ia>>2]|0;if((ka|0)==(k[m>>2]|0))yD(ja,g);else{xD(ka,g);k[ia>>2]=(k[ia>>2]|0)+116}g=g+116|0}while((g|0)!=(ha|0))}ha=k[b+52>>2]|0;g=b+56|0;if((ha|0)==(g|0)){r=c;return}b=a+52|0;a=d+4|0;ia=ha;while(1){ha=KBa(60)|0;F=ha+16|0;G=ia+16|0;H=F+32|0;do{i[F>>0]=i[G>>0]|0;F=F+1|0;G=G+1|0}while((F|0)<(H|0));ja=ha+48|0;x=0;xa(604,ja|0,ia+48|0);m=x;x=0;if(m&1){la=ha;ma=85;break}zD(d,b,ha);if(!(i[a>>0]|0)){K2a(ja);OBa(ha)}ja=k[ia+4>>2]|0;if(!ja){m=ia;while(1){ka=k[m+8>>2]|0;if((k[ka>>2]|0)==(m|0)){na=ka;break}else m=ka}}else{m=ja;while(1){ha=k[m>>2]|0;if(!ha){na=m;break}else m=ha}}if((na|0)==(g|0)){ma=83;break}else ia=na}if((ma|0)==83){r=c;return}else if((ma|0)==85){ma=Hc()|0;OBa(la);Sc(ma|0)}}function gD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=XC(b)|0;d=a+88|0;k[d>>2]=(k[d>>2]|0)+c;c=a+8|0;d=k[c>>2]|0;if((d|0)==(k[a+12>>2]|0)){my(a+4|0,b);e=k[c>>2]|0}else{k[d>>2]=k[b>>2];f=d+8|0;g=b+8|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));g=b+48|0;f=k[g+4>>2]|0;h=d+48|0;k[h>>2]=k[g>>2];k[h+4>>2]=f;k[d+56>>2]=k[b+56>>2];f=k[b+60>>2]|0;k[d+60>>2]=f;if(f)h0a(f);k[d+64>>2]=k[b+64>>2];k[d+68>>2]=k[b+68>>2];f=k[b+72>>2]|0;k[d+72>>2]=f;if(f)h0a(f);f=(k[c>>2]|0)+80|0;k[c>>2]=f;e=f}if((k[e+-32>>2]|0)!=-1){i=k[c>>2]|0;j=i+-80|0;return j|0}if((k[e+-28>>2]|0)!=-1){i=k[c>>2]|0;j=i+-80|0;return j|0}f=a+100|0;if((k[f>>2]|0)==-1?(k[a+104>>2]|0)==-1:0){i=k[c>>2]|0;j=i+-80|0;return j|0}d=f;f=k[d+4>>2]|0;b=e+-32|0;k[b>>2]=k[d>>2];k[b+4>>2]=f;f=k[a+108>>2]|0;b=k[a+112>>2]|0;if(b)h0a(b);k[e+-24>>2]=f;f=e+-20|0;e=k[f>>2]|0;k[f>>2]=b;if(!e){i=k[c>>2]|0;j=i+-80|0;return j|0}j0a(e);i=k[c>>2]|0;j=i+-80|0;return j|0}function hD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+144|0;e=d+120|0;f=d+80|0;g=d;h=b+88|0;if((k[h>>2]|0)<(c|0)){i=f;j=i+36|0;do{k[i>>2]=0;i=i+4|0}while((i|0)<(j|0));i=f+20|0;j=f+24|0;k[j>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;l=f+4|0;m=f+8|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=26536;k[f>>2]=26500;k[i>>2]=26560;x=0;nb(102,f|0,216551,216616,62);x=0;f=Hc()|0;e=M;k[l>>2]=26592;k[l+-4>>2]=26620;k[l+16>>2]=26644;K2a(m);k[i>>2]=20796;i=k[j>>2]|0;if(i){x=0;m=Ba(k[(k[i>>2]|0)+16>>2]|0,i|0)|0;i=x;x=0;if(i&1){i=Hc(0)|0;Fg(i)}if(m)k[j>>2]=0}n=e;o=f;Sc(o|0)}fD(a,b);if((k[h>>2]|0)<=(c|0)){r=d;return}b=g+8|0;f=g+40|0;e=g+48|0;j=g+56|0;m=g+60|0;i=g+72|0;l=c;while(1){l=l+1|0;k[g>>2]=1;k[b>>2]=80;k[f>>2]=1;c=e;k[c>>2]=-1;k[c+4>>2]=-1;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,a|0,g|0)|0;c=x;x=0;if(c&1)break;c=k[i>>2]|0;if(c)j0a(c);c=k[m>>2]|0;if(c)j0a(c);if((l|0)>=(k[h>>2]|0)){p=20;break}}if((p|0)==20){r=d;return}d=Hc()|0;p=M;h=k[i>>2]|0;if(h)j0a(h);h=k[m>>2]|0;if(!h){n=p;o=d;Sc(o|0)}j0a(h);n=p;o=d;Sc(o|0)}function iD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+208|0;d=c+192|0;e=c+48|0;f=c;g=c+36|0;h=c+24|0;i=e+64|0;j=e+8|0;k[j>>2]=26684;l=e+12|0;k[e>>2]=26724;k[i>>2]=26744;k[e+4>>2]=0;x=0;xa(582,e+64|0,l|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;o=m;mab(i);Sc(o|0)}k[e+136>>2]=0;k[e+140>>2]=-1;k[e>>2]=26664;k[e+64>>2]=26704;k[j>>2]=26684;x=0;va(1449,l|0);j=x;x=0;do if(j&1){m=Hc()|0;p=M;q=m}else{k[l>>2]=20392;m=e+44|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+60>>2]=24;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,l|0,d|0);s=x;x=0;if(s&1){s=Hc()|0;t=M;K2a(d);K2a(m);obb(l);p=t;q=s;break}K2a(d);x=0;fb(140,g|0,329672,0);s=x;x=0;do if(!(s&1)){t=e+8|0;k[h+4>>2]=0;k[h+8>>2]=0;u=h+4|0;k[h>>2]=u;x=0;db(68,b|0,t|0,g|0,h|0)|0;v=x;x=0;if(!(v&1)?(x=0,xa(588,f|0,0),v=x,x=0,!(v&1)):0){xu(f);xi(h,k[u>>2]|0);K2a(g);x=0;xa(584,a|0,l|0);v=x;x=0;if(v&1)break;k[e>>2]=26664;k[i>>2]=26704;k[t>>2]=26684;k[l>>2]=20392;K2a(m);obb(l);mab(i);r=c;return}v=Hc()|0;w=M;xi(h,k[u>>2]|0);K2a(g);y=w;z=v;A=t;k[e>>2]=26664;k[i>>2]=26704;k[A>>2]=26684;k[l>>2]=20392;K2a(m);obb(l);mab(i);Sc(z|0)}while(0);s=Hc()|0;y=M;z=s;A=e+8|0;k[e>>2]=26664;k[i>>2]=26704;k[A>>2]=26684;k[l>>2]=20392;K2a(m);obb(l);mab(i);Sc(z|0)}while(0);n=p;o=q;mab(i);Sc(o|0)}function jD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f){pD(a,b,c,e);return}else{mD(b,c,d,e)|0;iu(a,0);return}}function kD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;b=a+16|0;c=a+20|0;d=a+4|0;e=a+8|0;a=1;while(1){f=k[b>>2]|0;if((f|0)==(c|0))g=1;else{h=f;f=1;while(1){i=(k[h+52>>2]|0)+f-(k[h+48>>2]|0)|0;j=k[h+4>>2]|0;if(!j){l=h;while(1){m=k[l+8>>2]|0;if((k[m>>2]|0)==(l|0)){n=m;break}else l=m}}else{l=j;while(1){m=k[l>>2]|0;if(!m){n=l;break}else l=m}}if((n|0)==(c|0)){g=i;break}else{h=n;f=i}}}f=k[d>>2]|0;h=k[e>>2]|0;if((f|0)==(h|0))o=g;else{l=f;f=g;while(1){j=(WC(l,a)|0)+f|0;l=l+80|0;if((l|0)==(h|0)){o=j;break}else f=j}}if(!o){p=0;q=13;break}else{r=o;s=0}while(1){f=s+1|0;r=r>>>8;if(!r){t=f;break}else s=f}if(t>>>0>a>>>0)a=a+1|0;else{p=o;q=13;break}}if((q|0)==13)return p|0;return 0}function lD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;b=r;r=r+48|0;e=b+24|0;f=b+12|0;g=b;h=k[d>>2]|0;if(!((h|0)==-1?(k[d+4>>2]|0)==-1:0))j=3;if(((j|0)==3?(k[c+8>>2]|0)!=0:0)?(j=k[d+4>>2]|0,!((h|0)<0|(j|0)<=(h|0))):0){l=BD(c,k[d+8>>2]|0)|0;if((l|0)==(c+4|0)){q2a(a,329672,0);r=b;return}c=l+28|0;d=i[c>>0]|0;if(!(d&1))m=(d&255)>>>1;else m=k[l+32>>2]|0;if(h>>>0>=m>>>0){q2a(a,329672,0);r=b;return}F2a(e,c,h,j-h|0,c);c=i[e>>0]|0;h=(c&1)==0;j=e+8|0;m=e+4|0;l=e+1|0;d=h?l:k[j>>2]|0;n=h?(c&255)>>>1:k[m>>2]|0;a:do if(n){c=d+n|0;h=d;while(1){if((i[h>>0]|0)==10){o=h;break}h=h+1|0;if((h|0)==(c|0))break a}h=o-d|0;if(!((o|0)==(c|0)|(h|0)==-1)){x=0;pa(48,g|0,e|0,0,h|0,e|0);h=x;x=0;if(h&1){h=Hc()|0;p=M;q=h;K2a(e);Sc(q|0)}x=0;h=Ta(484,g|0,301675)|0;s=x;x=0;if(s&1){s=Hc()|0;t=M;K2a(g);p=t;q=s;K2a(e);Sc(q|0)};k[f>>2]=k[h>>2];k[f+4>>2]=k[h+4>>2];k[f+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;if(!(i[e>>0]&1)){i[l>>0]=0;i[e>>0]=0}else{i[k[j>>2]>>0]=0;k[m>>2]=0}x=0;xa(603,e|0,0);h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}else{k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);K2a(g);break}}}while(0);k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);r=b;return}q2a(a,329672,0);r=b;return}function mD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0;e=r;r=r+544|0;f=e+144|0;g=e+104|0;h=e+24|0;j=e+276|0;l=e+384|0;m=e+368|0;n=e+64|0;o=e+512|0;p=e+356|0;q=e+480|0;s=e+344|0;t=e+448|0;u=e+416|0;v=e+304|0;w=e+264|0;y=e+236|0;z=e+208|0;A=e+196|0;B=e;C=e+184|0;D=i[c>>0]|0;E=(D&1)==0;F=c+8|0;G=c+1|0;H=c+4|0;I=ei(ei(b,E?G:k[F>>2]|0,E?(D&255)>>>1:k[H>>2]|0)|0,216644,6)|0;D=zab(I+(k[(k[I>>2]|0)+-12>>2]|0)|0)|0;k[f>>2]=D;x=0;D=Ta(495,f|0,74148)|0;E=x;x=0;if(E&1){J=Hc()|0;K=M;$pb(f);Sc(J|0)}x=0;E=Ta(k[(k[D>>2]|0)+28>>2]|0,D|0,10)|0;D=x;x=0;if(D&1){J=Hc()|0;K=M;$pb(f);Sc(J|0)}$pb(f);pfb(I,E)|0;cdb(I)|0;I=k[a+4>>2]|0;E=k[a+8>>2]|0;a:do if((I|0)!=(E|0)){J=l+8|0;K=l+1|0;D=l+4|0;L=m+8|0;N=m+1|0;O=m+4|0;P=w+8|0;Q=w+1|0;R=w+4|0;S=n+32|0;T=a+40|0;U=p+8|0;V=p+1|0;W=p+4|0;X=s+8|0;Y=s+1|0;Z=s+4|0;_=a+52|0;$=I;b:while(1){aa=i[c>>0]|0;ba=(aa&1)==0;ei(b,ba?G:k[F>>2]|0,ba?(aa&255)>>>1:k[H>>2]|0)|0;c:do switch(k[$>>2]|0){case 1:{aa=ei(b,229999,2)|0;PQ(l,k[$+8>>2]&255);ba=i[l>>0]|0;ca=(ba&1)==0;x=0;da=Fa(92,aa|0,(ca?K:k[J>>2]|0)|0,(ca?(ba&255)>>>1:k[D>>2]|0)|0)|0;ba=x;x=0;if(ba&1){ea=13;break b}x=0;ba=Fa(92,da|0,324244,1)|0;da=x;x=0;if(da&1){ea=13;break b}x=0;xa(693,m|0,$|0);da=x;x=0;if(da&1){ea=13;break b}da=i[m>>0]|0;ca=(da&1)==0;x=0;Fa(92,ba|0,(ca?N:k[L>>2]|0)|0,(ca?(da&255)>>>1:k[O>>2]|0)|0)|0;da=x;x=0;if(da&1){ea=14;break b}K2a(m);K2a(l);break}case 2:{da=ei(b,216651,6)|0;ca=da+(k[(k[da>>2]|0)+-12>>2]|0)+4|0;k[ca>>2]=k[ca>>2]&-75|2;ca=$+8|0;fa=n;ga=ca;ha=fa+40|0;do{k[fa>>2]=k[ga>>2];fa=fa+4|0;ga=ga+4|0}while((fa|0)<(ha|0));ba=k[S>>2]|0;aa=k[n>>2]|0;if((ba|0)!=1|(aa|0)!=0){ia=ba;ba=aa;aa=0;while(1){ja=aa+1|0;do if(!ia){k[S>>2]=1;k[n>>2]=0;ka=1;la=0}else{ma=ia+-1|0;na=(((k[n+(ma<<2)>>2]|0)>>>0<256)<<31>>31)+ia|0;if(!na){k[S>>2]=1;k[n>>2]=0;ka=1;la=0;break}oa=ba>>>8;k[n>>2]=oa;if(ia>>>0>1){pa=1;qa=oa;ra=n;sa=0;while(1){k[ra>>2]=k[n+(pa<<2)>>2]<<24|qa;ta=sa+1|0;ra=n+(ta<<2)|0;qa=(k[ra>>2]|0)>>>8;k[ra>>2]=qa;if((ta|0)==(ma|0))break;else{pa=sa+2|0;sa=ta}}ua=k[n>>2]|0}else ua=oa;sa=na>>>0>8?8:na;k[S>>2]=sa;ka=sa;la=ua}while(0);if((la|0)!=0|(ka|0)!=1){ia=ka;ba=la;aa=ja}else{va=ja;break}}}else va=0;aa=ei(ffb(da,va>>>0>1?va:1)|0,216658,3)|0;ba=aa+(k[(k[aa>>2]|0)+-12>>2]|0)+4|0;k[ba>>2]=k[ba>>2]&-75|8;aD(aa,ca)|0;break}case 3:{aa=ei(b,216662,8)|0;nC(o,$+8|0);ba=CD(T,o)|0;ia=i[ba>>0]|0;sa=(ia&1)==0;ei(ei(aa,sa?ba+1|0:k[ba+8>>2]|0,sa?(ia&255)>>>1:k[ba+4>>2]|0)|0,276785,1)|0;break}case 4:{ba=$+8|0;if((k[ba>>2]|0)==0?(k[$+40>>2]|0)==1:0){ei(b,216671,17)|0;break c}else{ia=ei(b,216689,11)|0;sa=ia+(k[(k[ia>>2]|0)+-12>>2]|0)+4|0;k[sa>>2]=k[sa>>2]&-75|2;ei(aD(ia,ba)|0,316824,1)|0;break c}break}case 5:{ba=ei(b,216701,9)|0;nC(q,$+8|0);bD(p,q);ia=i[p>>0]|0;sa=(ia&1)==0;x=0;aa=Fa(92,ba|0,(sa?V:k[U>>2]|0)|0,(sa?(ia&255)>>>1:k[W>>2]|0)|0)|0;ia=x;x=0;if(ia&1){ea=34;break b}x=0;Fa(92,aa|0,316824,1)|0;aa=x;x=0;if(aa&1){ea=34;break b}K2a(p);break}case 6:{aa=ei(b,216711,10)|0;nC(t,$+8|0);bD(s,t);ia=i[s>>0]|0;sa=(ia&1)==0;x=0;ba=Fa(92,aa|0,(sa?Y:k[X>>2]|0)|0,(sa?(ia&255)>>>1:k[Z>>2]|0)|0)|0;ia=x;x=0;if(ia&1){ea=38;break b}x=0;Fa(92,ba|0,316824,1)|0;ba=x;x=0;if(ba&1){ea=38;break b}K2a(s);break}case 7:{ei(b,216722,10)|0;break}case 10:{ba=ei(b,216733,11)|0;nC(u,$+8|0);ia=CD(_,u)|0;sa=i[ia>>0]|0;aa=(sa&1)==0;ei(ei(ba,aa?ia+1|0:k[ia+8>>2]|0,aa?(sa&255)>>>1:k[ia+4>>2]|0)|0,276785,1)|0;break}case 8:{ia=ei(b,216745,3)|0;sa=ia+(k[(k[ia>>2]|0)+-12>>2]|0)+4|0;k[sa>>2]=k[sa>>2]&-75|2;sa=ei(aD(ia,$+8|0)|0,325552,2)|0;ia=zab(sa+(k[(k[sa>>2]|0)+-12>>2]|0)|0)|0;k[f>>2]=ia;x=0;ia=Ta(495,f|0,74148)|0;aa=x;x=0;if(aa&1){ea=43;break b}x=0;aa=Ta(k[(k[ia>>2]|0)+28>>2]|0,ia|0,10)|0;ia=x;x=0;if(ia&1){ea=43;break b}$pb(f);pfb(sa,aa)|0;cdb(sa)|0;aa=i[c>>0]|0;ia=(aa&1)==0;ei(ei(sa,ia?G:k[F>>2]|0,ia?(aa&255)>>>1:k[H>>2]|0)|0,216749,10)|0;break}case 9:{aa=ei(b,216760,8)|0;ia=aa+(k[(k[aa>>2]|0)+-12>>2]|0)+4|0;k[ia>>2]=k[ia>>2]&-75|8;ei(ffb(aa,k[$+8>>2]|0)|0,316824,1)|0;break}default:{ea=46;break b}}while(0);aa=ei(b,216860,2)|0;lD(w,0,d,$+48|0);ia=i[w>>0]|0;sa=(ia&1)==0;x=0;ba=Fa(92,aa|0,(sa?Q:k[P>>2]|0)|0,(sa?(ia&255)>>>1:k[R>>2]|0)|0)|0;ia=x;x=0;if(ia&1){ea=60;break}x=0;ia=Ba(564,ba+(k[(k[ba>>2]|0)+-12>>2]|0)|0)|0;sa=x;x=0;if(sa&1){ea=60;break}k[g>>2]=ia;x=0;ia=Ta(495,g|0,74148)|0;sa=x;x=0;if(sa&1){ea=56;break}x=0;sa=Ta(k[(k[ia>>2]|0)+28>>2]|0,ia|0,10)|0;ia=x;x=0;if(ia&1){ea=56;break}$pb(g);x=0;Ta(540,ba|0,sa|0)|0;sa=x;x=0;if(sa&1){ea=60;break}x=0;Ba(586,ba|0)|0;ba=x;x=0;if(ba&1){ea=60;break}K2a(w);$=$+80|0;if(($|0)==(E|0))break a}if((ea|0)==13){$=Hc()|0;wa=$;ya=M;ea=15}else if((ea|0)==14){$=Hc()|0;R=M;K2a(m);wa=$;ya=R;ea=15}else if((ea|0)==34){R=Hc()|0;$=M;K2a(p);za=R;Aa=$;Sc(za|0)}else if((ea|0)==38){$=Hc()|0;R=M;K2a(s);za=$;Aa=R;Sc(za|0)}else if((ea|0)==43){R=Hc()|0;$pb(f);Sc(R|0)}else if((ea|0)==46){fa=v;ha=fa+36|0;do{k[fa>>2]=0;fa=fa+4|0}while((fa|0)<(ha|0));R=v+20|0;$=v+24|0;k[$>>2]=0;k[v+28>>2]=0;k[v+32>>2]=0;k[v+36>>2]=-1;P=v+4|0;Q=v+8|0;k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);k[v+4>>2]=24840;k[v>>2]=24804;k[R>>2]=24864;x=0;nb(100,v|0,216769,216616,156);x=0;_=Hc()|0;Z=M;k[P>>2]=24896;k[P+-4>>2]=24924;k[P+16>>2]=24948;K2a(Q);k[R>>2]=20796;R=k[$>>2]|0;if(R){x=0;Q=Ba(k[(k[R>>2]|0)+16>>2]|0,R|0)|0;R=x;x=0;if(R&1){R=Hc(0)|0;Fg(R)}if(Q)k[$>>2]=0}za=_;Aa=Z;Sc(za|0)}else if((ea|0)==56){Z=Hc()|0;_=M;$pb(g);Ca=_;Da=Z;ea=61}else if((ea|0)==60){Z=Hc()|0;Ca=M;Da=Z;ea=61}if((ea|0)==15){K2a(l);za=wa;Aa=ya;Sc(za|0)}else if((ea|0)==61){K2a(w);za=Da;Aa=Ca;Sc(za|0)}}while(0);if((k[a+24>>2]|0)==0?(k[a+28>>2]|0)==(k[a+32>>2]|0):0){r=e;return b|0}Ca=i[c>>0]|0;Da=(Ca&1)==0;w=ei(ei(b,Da?G:k[F>>2]|0,Da?(Ca&255)>>>1:k[H>>2]|0)|0,216863,6)|0;Ca=zab(w+(k[(k[w>>2]|0)+-12>>2]|0)|0)|0;k[f>>2]=Ca;x=0;Ca=Ta(495,f|0,74148)|0;Da=x;x=0;if(Da&1){Ea=Hc()|0;Ga=M;$pb(f);Sc(Ea|0)}x=0;Da=Ta(k[(k[Ca>>2]|0)+28>>2]|0,Ca|0,10)|0;Ca=x;x=0;if(Ca&1){Ea=Hc()|0;Ga=M;$pb(f);Sc(Ea|0)}$pb(f);pfb(w,Da)|0;cdb(w)|0;w=k[a+16>>2]|0;Da=a+20|0;d:do if((w|0)==(Da|0)){Ha=a+32|0;Ia=a+28|0}else{Ea=g+32|0;Ga=f+32|0;Ca=f+4|0;ya=f+32|0;wa=g+4|0;l=a+28|0;v=a+32|0;s=g+32|0;p=f+32|0;m=f+4|0;E=f+32|0;u=g+4|0;t=A+8|0;q=A+1|0;o=A+4|0;va=w;while(1){la=va+16|0;ka=va+48|0;ua=0;n=1;I=la;while(1){Z=i[I>>0]|0;k[f>>2]=ua;k[Ca>>2]=k[y>>2];k[Ca+4>>2]=k[y+4>>2];k[Ca+8>>2]=k[y+8>>2];k[Ca+12>>2]=k[y+12>>2];k[Ca+16>>2]=k[y+16>>2];k[Ca+20>>2]=k[y+20>>2];k[Ca+24>>2]=k[y+24>>2];k[ya>>2]=n;HB(f,8,0);fa=h;ga=f;ha=fa+40|0;do{k[fa>>2]=k[ga>>2];fa=fa+4|0;ga=ga+4|0}while((fa|0)<(ha|0));k[g>>2]=0;k[Ea>>2]=1;k[f>>2]=Z&255;k[Ga>>2]=1;YB(g,h,f);ca=k[g>>2]|0;k[j>>2]=k[wa>>2];k[j+4>>2]=k[wa+4>>2];k[j+8>>2]=k[wa+8>>2];k[j+12>>2]=k[wa+12>>2];k[j+16>>2]=k[wa+16>>2];k[j+20>>2]=k[wa+20>>2];k[j+24>>2]=k[wa+24>>2];da=k[Ea>>2]|0;k[y>>2]=k[j>>2];k[y+4>>2]=k[j+4>>2];k[y+8>>2]=k[j+8>>2];k[y+12>>2]=k[j+12>>2];k[y+16>>2]=k[j+16>>2];k[y+20>>2]=k[j+20>>2];k[y+24>>2]=k[j+24>>2];I=I+1|0;if((I|0)==(ka|0)){Ja=ca;Ka=da;break}else{ua=ca;n=da}}if(Ka>>>0>1?1:Ja>>>0>=(((k[v>>2]|0)-(k[l>>2]|0)|0)/116|0)>>>0){n=i[c>>0]|0;ua=(n&1)==0;I=ei(ei(b,ua?G:k[F>>2]|0,ua?(n&255)>>>1:k[H>>2]|0)|0,229999,2)|0;n=I+(k[(k[I>>2]|0)+-12>>2]|0)+4|0;k[n>>2]=k[n>>2]&-75|8;n=0;ua=1;da=la;while(1){ca=i[da>>0]|0;k[f>>2]=n;k[m>>2]=k[z>>2];k[m+4>>2]=k[z+4>>2];k[m+8>>2]=k[z+8>>2];k[m+12>>2]=k[z+12>>2];k[m+16>>2]=k[z+16>>2];k[m+20>>2]=k[z+20>>2];k[m+24>>2]=k[z+24>>2];k[E>>2]=ua;HB(f,8,0);fa=h;ga=f;ha=fa+40|0;do{k[fa>>2]=k[ga>>2];fa=fa+4|0;ga=ga+4|0}while((fa|0)<(ha|0));k[g>>2]=0;k[s>>2]=1;k[f>>2]=ca&255;k[p>>2]=1;YB(g,h,f);Z=k[g>>2]|0;k[j>>2]=k[u>>2];k[j+4>>2]=k[u+4>>2];k[j+8>>2]=k[u+8>>2];k[j+12>>2]=k[u+12>>2];k[j+16>>2]=k[u+16>>2];k[j+20>>2]=k[u+20>>2];k[j+24>>2]=k[u+24>>2];ua=k[s>>2]|0;k[z>>2]=k[j>>2];k[z+4>>2]=k[j+4>>2];k[z+8>>2]=k[j+8>>2];k[z+12>>2]=k[j+12>>2];k[z+16>>2]=k[j+16>>2];k[z+20>>2]=k[j+20>>2];k[z+24>>2]=k[j+24>>2];da=da+1|0;if((da|0)==(ka|0)){La=Z;break}else n=Z}n=ei(ffb(I,La)|0,325552,2)|0;VC(A,va+48|0,2,0);ka=i[A>>0]|0;da=(ka&1)==0;x=0;ua=Fa(92,n|0,(da?q:k[t>>2]|0)|0,(da?(ka&255)>>>1:k[o>>2]|0)|0)|0;ka=x;x=0;if(ka&1){ea=84;break}x=0;ka=Ba(564,ua+(k[(k[ua>>2]|0)+-12>>2]|0)|0)|0;da=x;x=0;if(da&1){ea=84;break}k[f>>2]=ka;x=0;ka=Ta(495,f|0,74148)|0;da=x;x=0;if(da&1){ea=80;break}x=0;da=Ta(k[(k[ka>>2]|0)+28>>2]|0,ka|0,10)|0;ka=x;x=0;if(ka&1){ea=80;break}$pb(f);x=0;Ta(540,ua|0,da|0)|0;da=x;x=0;if(da&1){ea=84;break}x=0;Ba(586,ua|0)|0;ua=x;x=0;if(ua&1){ea=84;break}K2a(A)}ua=k[va+4>>2]|0;if(!ua){da=va;while(1){ka=k[da+8>>2]|0;if((k[ka>>2]|0)==(da|0)){Ma=ka;break}else da=ka}}else{da=ua;while(1){I=k[da>>2]|0;if(!I){Ma=da;break}else da=I}}if((Ma|0)==(Da|0)){Ha=v;Ia=l;break d}else va=Ma}if((ea|0)==80){va=Hc()|0;l=M;$pb(f);Na=l;Oa=va}else if((ea|0)==84){va=Hc()|0;Na=M;Oa=va}K2a(A);za=Oa;Aa=Na;Sc(za|0)}while(0);if((k[Ha>>2]|0)==(k[Ia>>2]|0)){r=e;return b|0}Na=a+28|0;a=0;while(1){Oa=i[c>>0]|0;A=(Oa&1)==0;Ma=ei(ei(b,A?G:k[F>>2]|0,A?(Oa&255)>>>1:k[H>>2]|0)|0,229999,2)|0;Oa=Ma+(k[(k[Ma>>2]|0)+-12>>2]|0)+4|0;k[Oa>>2]=k[Oa>>2]&-75|8;Oa=ei(ffb(Ma,a)|0,325552,2)|0;Ma=zab(Oa+(k[(k[Oa>>2]|0)+-12>>2]|0)|0)|0;k[f>>2]=Ma;x=0;Ma=Ta(495,f|0,74148)|0;A=x;x=0;if(A&1){ea=93;break}x=0;A=Ta(k[(k[Ma>>2]|0)+28>>2]|0,Ma|0,10)|0;Ma=x;x=0;if(Ma&1){ea=93;break}$pb(f);pfb(Oa,A)|0;cdb(Oa)|0;Oa=(k[Na>>2]|0)+(a*116|0)|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;A=i[c>>0]|0;Ma=(A&1)==0;Da=Ma?(A&255)>>>1:k[H>>2]|0;x=0;nb(83,C|0,(Ma?G:k[F>>2]|0)|0,Da|0,Da+2|0);Da=x;x=0;if(Da&1){ea=96;break}x=0;Fa(88,C|0,229999,2)|0;Da=x;x=0;if(Da&1){ea=96;break}x=0;db(68,Oa|0,b|0,C|0,d|0)|0;Oa=x;x=0;if(Oa&1){ea=100;break}x=0;xa(588,B|0,0);Oa=x;x=0;if(Oa&1){ea=100;break}xu(B);K2a(C);a=a+1|0;if(a>>>0>=(((k[Ha>>2]|0)-(k[Ia>>2]|0)|0)/116|0)>>>0){ea=101;break}}if((ea|0)==93){Ia=Hc()|0;$pb(f);Sc(Ia|0)}else if((ea|0)==96){Ia=Hc()|0;K2a(C);Sc(Ia|0)}else if((ea|0)==100){Ia=Hc()|0;f=M;K2a(C);za=Ia;Aa=f;Sc(za|0)}else if((ea|0)==101){r=e;return b|0}return 0}function nD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;b=r;r=r+128|0;h=b+96|0;j=b+72|0;l=b+48|0;m=b+24|0;n=b;iu(a,0);x=0;o=Ta(482,a|0,285342)|0;p=x;x=0;a:do if(!(p&1)?(x=0,xa(587,h|0,c|0),q=x,x=0,!(q&1)):0){x=0;Ta(476,o|0,h|0)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;xu(h);t=s;u=q;xu(a);Sc(u|0)}xu(h);x=0;q=Ta(482,a|0,277822)|0;s=x;x=0;if(!(s&1)?(x=0,xa(694,j|0,d|0),s=x,x=0,!(s&1)):0){x=0;Ta(476,q|0,j|0)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;xu(j);t=s;u=q;xu(a);Sc(u|0)}xu(j);x=0;q=Ta(482,a|0,277107)|0;s=x;x=0;if(!(s&1)?(x=0,xa(694,l|0,e|0),s=x,x=0,!(s&1)):0){x=0;Ta(476,q|0,l|0)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;xu(l);t=s;u=q;xu(a);Sc(u|0)}xu(l);q=i[f>>0]|0;if(!(q&1))v=(q&255)>>>1;else v=k[f+4>>2]|0;do if(v){x=0;q=Ta(482,a|0,272351)|0;s=x;x=0;if(s&1)break a;x=0;xa(587,m|0,f|0);s=x;x=0;if(s&1)break a;x=0;Ta(476,q|0,m|0)|0;q=x;x=0;if(!(q&1)){xu(m);break}q=Hc()|0;s=M;xu(m);t=s;u=q;xu(a);Sc(u|0)}while(0);q=i[g>>0]|0;if(!(q&1))w=(q&255)>>>1;else w=k[g+4>>2]|0;if(!w){r=b;return}x=0;q=Ta(482,a|0,216870)|0;s=x;x=0;if(!(s&1)?(x=0,xa(587,n|0,g|0),s=x,x=0,!(s&1)):0){x=0;Ta(476,q|0,n|0)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;xu(n);t=s;u=q;xu(a);Sc(u|0)}else{xu(n);r=b;return}}}}}while(0);b=Hc()|0;t=M;u=b;xu(a);Sc(u|0)}function oD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+160|0;d=c+144|0;e=c;f=e+64|0;g=e+8|0;k[g>>2]=26684;h=e+12|0;k[e>>2]=26724;k[f>>2]=26744;k[e+4>>2]=0;x=0;xa(582,e+64|0,h|0);i=x;x=0;if(i&1){i=Hc()|0;j=M;l=i;mab(f);Sc(l|0)}k[e+136>>2]=0;k[e+140>>2]=-1;k[e>>2]=26664;k[e+64>>2]=26704;k[g>>2]=26684;x=0;va(1449,h|0);g=x;x=0;do if(!(g&1)){k[h>>2]=20392;i=e+44|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[e+60>>2]=24;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,h|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);K2a(i);obb(h);o=n;p=m;break}K2a(d);m=e+8|0;n=m+(k[(k[m>>2]|0)+-12>>2]|0)+4|0;k[n>>2]=k[n>>2]&-75|8;x=0;Ta(541,m|0,b|0)|0;n=x;x=0;if(n&1){q=Hc()|0;s=M;k[e>>2]=26664;k[f>>2]=26704;k[m>>2]=26684;k[h>>2]=20392;K2a(i);obb(h);mab(f);Sc(q|0)}x=0;xa(584,a|0,h|0);n=x;x=0;if(n&1){q=Hc()|0;s=M;k[e>>2]=26664;k[f>>2]=26704;k[m>>2]=26684;k[h>>2]=20392;K2a(i);obb(h);mab(f);Sc(q|0)}else{k[e>>2]=26664;k[f>>2]=26704;k[m>>2]=26684;k[h>>2]=20392;K2a(i);obb(h);mab(f);r=c;return}}else{i=Hc()|0;o=M;p=i}while(0);j=o;l=p;mab(f);Sc(l|0)}function pD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0;e=r;r=r+1584|0;f=e+632|0;g=e+592|0;h=e+552|0;j=e+1416|0;l=e+1404|0;m=e+440|0;n=e+528|0;o=e+1392|0;p=e+1360|0;q=e+1344|0;s=e+1332|0;t=e+504|0;u=e+1320|0;v=e+1308|0;w=e+464|0;y=e+1296|0;z=e+392|0;A=e+1140|0;B=e+1128|0;C=e+1544|0;D=e+1116|0;E=e+368|0;F=e+1104|0;G=e+1092|0;H=e+1080|0;I=e+344|0;J=e+1068|0;K=e+1056|0;L=e+1044|0;N=e+320|0;O=e+1032|0;P=e+1020|0;Q=e+1512|0;R=e+1008|0;S=e+296|0;T=e+996|0;U=e+984|0;V=e+1480|0;W=e+972|0;X=e+272|0;Y=e+960|0;Z=e+948|0;_=e+936|0;$=e+248|0;aa=e+924|0;ba=e+912|0;ca=e+1448|0;da=e+900|0;ea=e+224|0;fa=e+888|0;ga=e+876|0;ha=e+864|0;ia=e+200|0;ja=e+852|0;ka=e+840|0;la=e+828|0;ma=e+176|0;na=e+816|0;oa=e+804|0;pa=e+136|0;qa=e+792|0;ra=e+752|0;sa=e+112|0;ta=e+416|0;ua=e+720|0;wa=e+708|0;ya=e+72|0;za=e+48|0;Aa=e+696|0;Ca=e+1152|0;Da=e+684|0;Ea=e+24|0;Fa=e+672|0;Ga=e;iu(a,0);x=0;xa(588,m|0,6);Ha=x;x=0;if(Ha&1){Ha=Hc()|0;Ia=Ha;Ja=M;xu(a);Sc(Ia|0)}Ha=k[b+4>>2]|0;Ka=k[b+8>>2]|0;a:do if((Ha|0)==(Ka|0))La=4;else{Ma=b+40|0;Na=K+1|0;Oa=K+8|0;Qa=K+4|0;Ra=b+52|0;Sa=ga+1|0;Ua=ga+8|0;Va=ga+4|0;Wa=Ha;b:while(1){c:do switch(k[Wa>>2]|0){case 1:{x=0;xa(692,p|0,k[Wa+8>>2]&255|0);Xa=x;x=0;if(Xa&1){La=7;break b};k[o>>2]=k[p>>2];k[o+4>>2]=k[p+4>>2];k[o+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;Xa=k[Wa+48>>2]|0;Ya=k[Wa+52>>2]|0;x=0;xa(693,q|0,Wa|0);Za=x;x=0;if(Za&1){La=15;break b};k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;x=0;Pa(43,n|0,0,o|0,Xa|0,Ya|0,q|0,s|0);Ya=x;x=0;if(Ya&1){La=16;break b}x=0;Ta(485,m|0,n|0)|0;Ya=x;x=0;if(Ya&1){La=17;break b}xu(n);K2a(s);K2a(q);K2a(o);K2a(p);break}case 2:{x=0;fb(140,u|0,216885,4);Ya=x;x=0;if(Ya&1){La=7;break b}Ya=k[Wa+48>>2]|0;Xa=k[Wa+52>>2]|0;_a=w;$a=Wa+8|0;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));x=0;xa(695,v|0,w|0);Za=x;x=0;if(Za&1){La=26;break b}x=0;xa(693,y|0,Wa|0);Za=x;x=0;if(Za&1){La=27;break b}x=0;Pa(43,t|0,0,u|0,Ya|0,Xa|0,v|0,y|0);Za=x;x=0;if(Za&1){La=28;break b}x=0;Ta(485,m|0,t|0)|0;Za=x;x=0;if(Za&1){La=29;break b}xu(t);K2a(y);K2a(v);K2a(u);break}case 3:{x=0;fb(140,A|0,216890,8);Za=x;x=0;if(Za&1){La=7;break b}Za=k[Wa+48>>2]|0;bb=k[Wa+52>>2]|0;x=0;xa(696,C|0,Wa+8|0);cb=x;x=0;if(cb&1){La=40;break b}x=0;cb=Ta(542,Ma|0,C|0)|0;db=x;x=0;if(db&1){La=40;break b}x=0;xa(604,B|0,cb|0);cb=x;x=0;if(cb&1){La=40;break b};k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;x=0;Pa(43,z|0,0,A|0,Za|0,bb|0,B|0,D|0);bb=x;x=0;if(bb&1){La=41;break b}x=0;Ta(485,m|0,z|0)|0;bb=x;x=0;if(bb&1){La=42;break b}xu(z);K2a(D);K2a(B);K2a(A);break}case 4:{bb=Wa+8|0;x=0;if((k[bb>>2]|0)==0?(k[Wa+40>>2]|0)==1:0){q2a(F,216899,15);Za=x;x=0;if(Za&1){La=7;break b}Za=k[Wa+48>>2]|0;cb=k[Wa+52>>2]|0;x=0;fb(140,G|0,329672,0);db=x;x=0;if(db&1){La=51;break b};k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;x=0;Pa(43,E|0,0,F|0,Za|0,cb|0,G|0,H|0);cb=x;x=0;if(cb&1){La=52;break b}x=0;Ta(485,m|0,E|0)|0;cb=x;x=0;if(cb&1){La=53;break b}xu(E);K2a(H);K2a(G);K2a(F);break c}q2a(J,216915,10);cb=x;x=0;if(cb&1){La=7;break b}cb=k[Wa+48>>2]|0;Za=k[Wa+52>>2]|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;x=0;nb(103,j|0,bb|0,0,h|0);bb=x;x=0;if(bb&1){La=66;break b}if(!(i[K>>0]&1)){i[Na>>0]=0;i[K>>0]=0}else{i[k[Oa>>2]>>0]=0;k[Qa>>2]=0}x=0;xa(603,K|0,0);bb=x;x=0;if(bb&1){La=62;break b};k[K>>2]=k[j>>2];k[K+4>>2]=k[j+4>>2];k[K+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;K2a(j);k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;x=0;Pa(43,I|0,0,J|0,cb|0,Za|0,K|0,L|0);Za=x;x=0;if(Za&1){La=67;break b}x=0;Ta(485,m|0,I|0)|0;Za=x;x=0;if(Za&1){La=68;break b}xu(I);K2a(L);K2a(K);K2a(J);break}case 5:{x=0;fb(140,O|0,216926,8);Za=x;x=0;if(Za&1){La=7;break b}Za=k[Wa+48>>2]|0;cb=k[Wa+52>>2]|0;x=0;xa(696,Q|0,Wa+8|0);bb=x;x=0;if(bb&1){La=77;break b}x=0;xa(697,P|0,Q|0);bb=x;x=0;if(bb&1){La=77;break b};k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;x=0;Pa(43,N|0,0,O|0,Za|0,cb|0,P|0,R|0);cb=x;x=0;if(cb&1){La=78;break b}x=0;Ta(485,m|0,N|0)|0;cb=x;x=0;if(cb&1){La=79;break b}xu(N);K2a(R);K2a(P);K2a(O);break}case 6:{x=0;fb(140,T|0,216935,9);cb=x;x=0;if(cb&1){La=7;break b}cb=k[Wa+48>>2]|0;Za=k[Wa+52>>2]|0;x=0;xa(696,V|0,Wa+8|0);bb=x;x=0;if(bb&1){La=88;break b}x=0;xa(697,U|0,V|0);bb=x;x=0;if(bb&1){La=88;break b};k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;x=0;Pa(43,S|0,0,T|0,cb|0,Za|0,U|0,W|0);Za=x;x=0;if(Za&1){La=89;break b}x=0;Ta(485,m|0,S|0)|0;Za=x;x=0;if(Za&1){La=90;break b}xu(S);K2a(W);K2a(U);K2a(T);break}case 7:{x=0;fb(140,Y|0,216945,8);Za=x;x=0;if(Za&1){La=7;break b}Za=k[Wa+48>>2]|0;cb=k[Wa+52>>2]|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;x=0;Pa(43,X|0,0,Y|0,Za|0,cb|0,Z|0,_|0);cb=x;x=0;if(cb&1){La=97;break b}x=0;Ta(485,m|0,X|0)|0;cb=x;x=0;if(cb&1){La=98;break b}xu(X);K2a(_);K2a(Z);K2a(Y);break}case 10:{x=0;fb(140,aa|0,216954,7);cb=x;x=0;if(cb&1){La=7;break b}cb=k[Wa+48>>2]|0;Za=k[Wa+52>>2]|0;x=0;xa(696,ca|0,Wa+8|0);bb=x;x=0;if(bb&1){La=107;break b}x=0;bb=Ta(542,Ra|0,ca|0)|0;db=x;x=0;if(db&1){La=107;break b}x=0;xa(604,ba|0,bb|0);bb=x;x=0;if(bb&1){La=107;break b};k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;x=0;Pa(43,$|0,0,aa|0,cb|0,Za|0,ba|0,da|0);Za=x;x=0;if(Za&1){La=108;break b}x=0;Ta(485,m|0,$|0)|0;Za=x;x=0;if(Za&1){La=109;break b}xu($);K2a(da);K2a(ba);K2a(aa);break}case 8:{x=0;fb(140,fa|0,216745,3);Za=x;x=0;if(Za&1){La=7;break b}Za=Wa+48|0;cb=k[Za>>2]|0;bb=Wa+52|0;db=k[bb>>2]|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;x=0;nb(103,g|0,Wa+8|0,0,f|0);eb=x;x=0;if(eb&1){La=125;break b}if(!(i[ga>>0]&1)){i[Sa>>0]=0;i[ga>>0]=0}else{i[k[Ua>>2]>>0]=0;k[Va>>2]=0}x=0;xa(603,ga|0,0);eb=x;x=0;if(eb&1){La=118;break b};k[ga>>2]=k[g>>2];k[ga+4>>2]=k[g+4>>2];k[ga+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;x=0;Pa(43,ea|0,0,fa|0,cb|0,db|0,ga|0,ha|0);db=x;x=0;if(db&1){La=126;break b}x=0;Ta(485,m|0,ea|0)|0;db=x;x=0;if(db&1){La=127;break b}xu(ea);K2a(ha);K2a(ga);K2a(fa);x=0;fb(140,ja|0,229269,8);db=x;x=0;if(db&1){La=7;break b}db=k[Za>>2]|0;Za=k[bb>>2]|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;x=0;Pa(43,ia|0,0,ja|0,db|0,Za|0,ka|0,la|0);Za=x;x=0;if(Za&1){La=130;break b}x=0;Ta(485,m|0,ia|0)|0;Za=x;x=0;if(Za&1){La=131;break b}xu(ia);K2a(la);K2a(ka);K2a(ja);break}case 9:{x=0;fb(140,na|0,216962,9);Za=x;x=0;if(Za&1){La=7;break b}Za=k[Wa+48>>2]|0;db=k[Wa+52>>2]|0;_a=pa;$a=Wa+8|0;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));x=0;xa(695,oa|0,pa|0);Xa=x;x=0;if(Xa&1){La=138;break b};k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;x=0;Pa(43,ma|0,0,na|0,Za|0,db|0,oa|0,qa|0);Xa=x;x=0;if(Xa&1){La=139;break b}x=0;Ta(485,m|0,ma|0)|0;Xa=x;x=0;if(Xa&1){La=140;break b}xu(ma);K2a(qa);K2a(oa);K2a(na);break}default:{La=143;break b}}while(0);Wa=Wa+80|0;if((Wa|0)==(Ka|0)){La=4;break a}}switch(La|0){case 7:{gb=Hc()|0;hb=M;La=9;break a;break}case 15:{ib=Hc()|0;jb=M;La=19;break}case 16:{kb=Hc()|0;lb=M;La=18;break}case 17:{Wa=Hc()|0;Va=M;xu(n);kb=Wa;lb=Va;La=18;break}case 26:{mb=Hc()|0;ob=M;break}case 27:{pb=Hc()|0;qb=M;La=31;break}case 28:{rb=Hc()|0;sb=M;La=30;break}case 29:{Va=Hc()|0;Wa=M;xu(t);rb=Va;sb=Wa;La=30;break}case 40:{tb=Hc()|0;ub=M;La=44;break}case 41:{vb=Hc()|0;wb=M;La=43;break}case 42:{Wa=Hc()|0;Va=M;xu(z);vb=Wa;wb=Va;La=43;break}case 51:{xb=Hc()|0;yb=M;La=55;break}case 52:{zb=Hc()|0;Ab=M;La=54;break}case 53:{Va=Hc()|0;Wa=M;xu(E);zb=Va;Ab=Wa;La=54;break}case 62:{Fg(Hc(0)|0);break}case 66:{Wa=Hc()|0;Va=M;K2a(K);Bb=Wa;Cb=Va;La=70;break}case 67:{Db=Hc()|0;Eb=M;La=69;break}case 68:{Va=Hc()|0;Wa=M;xu(I);Db=Va;Eb=Wa;La=69;break}case 77:{Fb=Hc()|0;Gb=M;La=81;break}case 78:{Hb=Hc()|0;Ib=M;La=80;break}case 79:{Wa=Hc()|0;Va=M;xu(N);Hb=Wa;Ib=Va;La=80;break}case 88:{Jb=Hc()|0;Kb=M;La=92;break}case 89:{Lb=Hc()|0;Mb=M;La=91;break}case 90:{Va=Hc()|0;Wa=M;xu(S);Lb=Va;Mb=Wa;La=91;break}case 97:{Nb=Hc()|0;Ob=M;La=99;break}case 98:{Wa=Hc()|0;Va=M;xu(X);Nb=Wa;Ob=Va;La=99;break}case 107:{Pb=Hc()|0;Qb=M;La=111;break}case 108:{Rb=Hc()|0;Sb=M;La=110;break}case 109:{Va=Hc()|0;Wa=M;xu($);Rb=Va;Sb=Wa;La=110;break}case 118:{Fg(Hc(0)|0);break}case 125:{Wa=Hc()|0;Va=M;K2a(ga);Tb=Wa;Ub=Va;La=129;break}case 126:{Vb=Hc()|0;Wb=M;La=128;break}case 127:{Va=Hc()|0;Wa=M;xu(ea);Vb=Va;Wb=Wa;La=128;break}case 130:{Xb=Hc()|0;Yb=M;La=132;break}case 131:{Wa=Hc()|0;Va=M;xu(ia);Xb=Wa;Yb=Va;La=132;break}case 138:{Zb=Hc()|0;_b=M;La=142;break}case 139:{$b=Hc()|0;ac=M;La=141;break}case 140:{Va=Hc()|0;Wa=M;xu(ma);$b=Va;ac=Wa;La=141;break}case 143:{_a=ra;ab=_a+36|0;do{k[_a>>2]=0;_a=_a+4|0}while((_a|0)<(ab|0));Wa=ra+20|0;Va=ra+24|0;k[Va>>2]=0;k[ra+28>>2]=0;k[ra+32>>2]=0;k[ra+36>>2]=-1;Ua=ra+4|0;Sa=ra+8|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);k[ra+4>>2]=24840;k[ra>>2]=24804;k[Wa>>2]=24864;x=0;nb(100,ra|0,216972,216616,252);x=0;Ra=Hc()|0;Qa=M;k[Ua>>2]=24896;k[Ua+-4>>2]=24924;k[Ua+16>>2]=24948;K2a(Sa);k[Wa>>2]=20796;Wa=k[Va>>2]|0;if(Wa){x=0;Sa=Ba(k[(k[Wa>>2]|0)+16>>2]|0,Wa|0)|0;Wa=x;x=0;if(Wa&1){Wa=Hc(0)|0;Fg(Wa)}if(Sa)k[Va>>2]=0}bc=Ra;cc=Qa;break a;break}}switch(La|0){case 18:{K2a(s);K2a(q);ib=kb;jb=lb;La=19;break}case 30:{K2a(y);pb=rb;qb=sb;La=31;break}case 43:{K2a(D);K2a(B);tb=vb;ub=wb;La=44;break}case 54:{K2a(H);K2a(G);xb=zb;yb=Ab;La=55;break}case 69:{K2a(L);K2a(K);Bb=Db;Cb=Eb;La=70;break}case 80:{K2a(R);K2a(P);Fb=Hb;Gb=Ib;La=81;break}case 91:{K2a(W);K2a(U);Jb=Lb;Kb=Mb;La=92;break}case 99:{K2a(_);K2a(Z);K2a(Y);bc=Nb;cc=Ob;break a;break}case 110:{K2a(da);K2a(ba);Pb=Rb;Qb=Sb;La=111;break}case 128:{K2a(ha);K2a(ga);Tb=Vb;Ub=Wb;La=129;break}case 132:{K2a(la);K2a(ka);K2a(ja);bc=Xb;cc=Yb;break a;break}case 141:{K2a(qa);K2a(oa);Zb=$b;_b=ac;La=142;break}}switch(La|0){case 19:{K2a(o);K2a(p);bc=ib;cc=jb;break a;break}case 31:{K2a(v);mb=pb;ob=qb;break}case 44:{K2a(A);bc=tb;cc=ub;break a;break}case 55:{K2a(F);bc=xb;cc=yb;break a;break}case 70:{K2a(J);bc=Bb;cc=Cb;break a;break}case 81:{K2a(O);bc=Fb;cc=Gb;break a;break}case 92:{K2a(T);bc=Jb;cc=Kb;break a;break}case 111:{K2a(aa);bc=Pb;cc=Qb;break a;break}case 129:{K2a(fa);bc=Tb;cc=Ub;break a;break}case 142:{K2a(na);bc=Zb;cc=_b;break a;break}}K2a(u);bc=mb;cc=ob}while(0);do if((La|0)==4){x=0;ob=Ta(482,a|0,216879)|0;mb=x;x=0;if(!(mb&1)?(x=0,xa(589,sa|0,m|0),mb=x,x=0,!(mb&1)):0){x=0;Ta(476,ob|0,sa|0)|0;ob=x;x=0;if(ob&1){ob=Hc()|0;mb=M;xu(sa);bc=ob;cc=mb;break}xu(sa);if((k[b+24>>2]|0)==0?(k[b+28>>2]|0)==(k[b+32>>2]|0):0){xu(m);r=e;return}x=0;xa(588,ta|0,0);mb=x;x=0;if(!(mb&1)){mb=k[b+16>>2]|0;ob=b+20|0;d:do if((mb|0)==(ob|0)){dc=b+32|0;ec=b+28|0;La=158}else{u=g+32|0;_b=f+32|0;Zb=f+4|0;na=f+32|0;Ub=g+4|0;Tb=b+28|0;fa=b+32|0;Qb=ya+32|0;Pb=g+32|0;aa=f+32|0;Kb=g+4|0;Jb=ya+4|0;T=mb;while(1){Gb=T+16|0;Fb=T+48|0;O=0;Cb=1;Bb=Gb;while(1){J=i[Bb>>0]|0;k[f>>2]=O;k[Zb>>2]=k[ua>>2];k[Zb+4>>2]=k[ua+4>>2];k[Zb+8>>2]=k[ua+8>>2];k[Zb+12>>2]=k[ua+12>>2];k[Zb+16>>2]=k[ua+16>>2];k[Zb+20>>2]=k[ua+20>>2];k[Zb+24>>2]=k[ua+24>>2];k[na>>2]=Cb;HB(f,8,0);_a=h;$a=f;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));k[g>>2]=0;k[u>>2]=1;k[f>>2]=J&255;k[_b>>2]=1;YB(g,h,f);yb=k[g>>2]|0;k[j>>2]=k[Ub>>2];k[j+4>>2]=k[Ub+4>>2];k[j+8>>2]=k[Ub+8>>2];k[j+12>>2]=k[Ub+12>>2];k[j+16>>2]=k[Ub+16>>2];k[j+20>>2]=k[Ub+20>>2];k[j+24>>2]=k[Ub+24>>2];xb=k[u>>2]|0;k[ua>>2]=k[j>>2];k[ua+4>>2]=k[j+4>>2];k[ua+8>>2]=k[j+8>>2];k[ua+12>>2]=k[j+12>>2];k[ua+16>>2]=k[j+16>>2];k[ua+20>>2]=k[j+20>>2];k[ua+24>>2]=k[j+24>>2];Bb=Bb+1|0;if((Bb|0)==(Fb|0)){fc=yb;gc=xb;break}else{O=yb;Cb=xb}}if(gc>>>0>1?1:fc>>>0>=(((k[fa>>2]|0)-(k[Tb>>2]|0)|0)/116|0)>>>0){k[ya>>2]=0;k[Qb>>2]=1;Cb=Gb;do{O=i[Cb>>0]|0;_a=f;$a=ya;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));HB(f,8,0);_a=h;$a=f;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));k[g>>2]=0;k[Pb>>2]=1;k[f>>2]=O&255;k[aa>>2]=1;YB(g,h,f);J=k[g>>2]|0;k[j>>2]=k[Kb>>2];k[j+4>>2]=k[Kb+4>>2];k[j+8>>2]=k[Kb+8>>2];k[j+12>>2]=k[Kb+12>>2];k[j+16>>2]=k[Kb+16>>2];k[j+20>>2]=k[Kb+20>>2];k[j+24>>2]=k[Kb+24>>2];Bb=k[Pb>>2]|0;k[ya>>2]=J;k[Jb>>2]=k[j>>2];k[Jb+4>>2]=k[j+4>>2];k[Jb+8>>2]=k[j+8>>2];k[Jb+12>>2]=k[j+12>>2];k[Jb+16>>2]=k[j+16>>2];k[Jb+20>>2]=k[j+20>>2];k[Jb+24>>2]=k[j+24>>2];k[Qb>>2]=Bb;Cb=Cb+1|0}while((Cb|0)!=(Fb|0));x=0;xa(695,wa|0,ya|0);Fb=x;x=0;if(Fb&1){La=161;break}x=0;Fb=Ta(475,ta|0,wa|0)|0;Cb=x;x=0;if(Cb&1){La=175;break}x=0;nb(104,Aa|0,T+48|0,2,0);Cb=x;x=0;if(Cb&1){La=175;break}x=0;xa(587,za|0,Aa|0);Cb=x;x=0;if(Cb&1){La=176;break}x=0;Ta(476,Fb|0,za|0)|0;Fb=x;x=0;if(Fb&1){La=177;break}xu(za);K2a(Aa);K2a(wa)}Fb=k[T+4>>2]|0;if(!Fb){Cb=T;while(1){Gb=k[Cb+8>>2]|0;if((k[Gb>>2]|0)==(Cb|0)){hc=Gb;break}else Cb=Gb}}else{Cb=Fb;while(1){Gb=k[Cb>>2]|0;if(!Gb){hc=Cb;break}else Cb=Gb}}if((hc|0)==(ob|0)){dc=fa;ec=Tb;La=158;break d}else T=hc}if((La|0)==161){T=Hc()|0;ic=M;jc=T;La=163;break}else if((La|0)==175){T=Hc()|0;kc=T;lc=M}else if((La|0)==176){T=Hc()|0;mc=T;nc=M;La=178}else if((La|0)==177){T=Hc()|0;Tb=M;xu(za);mc=T;nc=Tb;La=178}if((La|0)==178){K2a(Aa);kc=mc;lc=nc}K2a(wa);oc=kc;pc=lc}while(0);e:do if((La|0)==158){f:do if((k[dc>>2]|0)!=(k[ec>>2]|0)){ob=Ca+64|0;mb=Ca+8|0;Tb=Ca+12|0;T=Ca+4|0;fa=Ca+64|0;Qb=Ca+64|0;Jb=Ca+136|0;Pb=Ca+140|0;Kb=Ca+44|0;aa=Ca+60|0;u=Ca+8|0;Ub=b+28|0;_b=0;while(1){k[mb>>2]=26684;k[Ca>>2]=26724;k[ob>>2]=26744;k[T>>2]=0;x=0;xa(582,fa|0,Tb|0);na=x;x=0;if(na&1){La=190;break}k[Jb>>2]=0;k[Pb>>2]=-1;k[Ca>>2]=26664;k[Qb>>2]=26704;k[mb>>2]=26684;x=0;va(1449,Tb|0);na=x;x=0;if(na&1){La=191;break}k[Tb>>2]=20392;k[Kb>>2]=0;k[Kb+4>>2]=0;k[Kb+8>>2]=0;k[Kb+12>>2]=0;k[aa>>2]=24;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;xa(583,Tb|0,l|0);na=x;x=0;if(na&1){La=189;break}K2a(l);na=u+(k[(k[u>>2]|0)+-12>>2]|0)+4|0;k[na>>2]=k[na>>2]&-75|8;x=0;Ta(543,u|0,_b|0)|0;na=x;x=0;if(na&1){La=201;break}x=0;xa(584,Da|0,Tb|0);na=x;x=0;if(na&1){La=201;break}x=0;na=Ta(475,ta|0,Da|0)|0;Zb=x;x=0;if(Zb&1){La=202;break}Zb=k[Ub>>2]|0;x=0;fb(140,Fa|0,329672,0);Cb=x;x=0;if(Cb&1){La=202;break}x=0;nb(105,Ea|0,Zb+(_b*116|0)|0,c|0,d|0);Zb=x;x=0;if(Zb&1){La=203;break}x=0;Ta(476,na|0,Ea|0)|0;na=x;x=0;if(na&1){La=204;break}xu(Ea);K2a(Fa);K2a(Da);k[Ca>>2]=26664;k[ob>>2]=26704;k[u>>2]=26684;k[Tb>>2]=20392;K2a(Kb);obb(Tb);mab(ob);_b=_b+1|0;if(_b>>>0>=(((k[dc>>2]|0)-(k[ec>>2]|0)|0)/116|0)>>>0)break f}if((La|0)==189){_b=Hc()|0;Ub=M;K2a(l);K2a(Kb);obb(Tb);qc=Ub;rc=_b;La=192}else if((La|0)==190){_b=Hc()|0;sc=M;tc=_b;La=193}else if((La|0)==191){_b=Hc()|0;qc=M;rc=_b;La=192}else if((La|0)==201){_b=Hc()|0;uc=_b;vc=M}else if((La|0)==202){_b=Hc()|0;wc=_b;xc=M;La=206}else if((La|0)==203){_b=Hc()|0;yc=_b;zc=M;La=205}else if((La|0)==204){_b=Hc()|0;Ub=M;xu(Ea);yc=_b;zc=Ub;La=205}if((La|0)==192){sc=qc;tc=rc;La=193}else if((La|0)==205){K2a(Fa);wc=yc;xc=zc;La=206}if((La|0)==193){mab(ob);ic=sc;jc=tc;La=163;break e}else if((La|0)==206){K2a(Da);uc=wc;vc=xc}k[Ca>>2]=26664;k[ob>>2]=26704;k[u>>2]=26684;k[Tb>>2]=20392;K2a(Kb);obb(Tb);mab(ob);oc=uc;pc=vc;break e}while(0);x=0;Ub=Ta(482,a|0,217054)|0;_b=x;x=0;if(!(_b&1)?(x=0,xa(589,Ga|0,ta|0),_b=x,x=0,!(_b&1)):0){x=0;Ta(476,Ub|0,Ga|0)|0;Ub=x;x=0;if(Ub&1){Ub=Hc()|0;_b=M;xu(Ga);oc=Ub;pc=_b;break}xu(Ga);x=0;Ta(544,c|0,a|0)|0;_b=x;x=0;if(!(_b&1)){xu(ta);xu(m);r=e;return}}_b=Hc()|0;ic=M;jc=_b;La=163}while(0);if((La|0)==163){oc=jc;pc=ic}xu(ta);bc=oc;cc=pc;break}}_b=Hc()|0;gb=_b;hb=M;La=9}while(0);if((La|0)==9){bc=gb;cc=hb}xu(m);Ia=bc;Ja=cc;xu(a);Sc(Ia|0)}function qD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=r;r=r+192|0;e=d+80|0;f=d+40|0;g=d;h=d+120|0;j=d+160|0;l=d+128|0;m=i[c>>0]|0;n=(m&1)==0;o=n?(m&255)>>>1:k[c+4>>2]|0;m=n?c+1|0:k[c+8>>2]|0;n=j;p=n+32|0;do{i[n>>0]=0;n=n+1|0}while((n|0)<(p|0));k[g>>2]=m;k[g+4>>2]=o;k[h>>2]=j;k[h+4>>2]=32;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];_q(f,e)|0;M2a(ED(b+52|0,j)|0,c)|0;c=j+32|0;b=f+32|0;h=e+32|0;o=e+4|0;m=e+32|0;q=f+4|0;s=0;t=1;u=j;while(1){j=i[u>>0]|0;k[e>>2]=s;k[o>>2]=k[l>>2];k[o+4>>2]=k[l+4>>2];k[o+8>>2]=k[l+8>>2];k[o+12>>2]=k[l+12>>2];k[o+16>>2]=k[l+16>>2];k[o+20>>2]=k[l+20>>2];k[o+24>>2]=k[l+24>>2];k[m>>2]=t;HB(e,8,0);n=g;v=e;p=n+40|0;do{k[n>>2]=k[v>>2];n=n+4|0;v=v+4|0}while((n|0)<(p|0));k[f>>2]=0;k[b>>2]=1;k[e>>2]=j&255;k[h>>2]=1;YB(f,g,e);v=k[f>>2]|0;k[l>>2]=k[q>>2];k[l+4>>2]=k[q+4>>2];k[l+8>>2]=k[q+8>>2];k[l+12>>2]=k[q+12>>2];k[l+16>>2]=k[q+16>>2];k[l+20>>2]=k[q+20>>2];k[l+24>>2]=k[q+24>>2];w=k[b>>2]|0;u=u+1|0;if((u|0)==(c|0)){x=v;y=w;break}else{s=v;t=w}}k[a>>2]=10;k[a+8>>2]=x;x=a+12|0;k[x>>2]=k[l>>2];k[x+4>>2]=k[l+4>>2];k[x+8>>2]=k[l+8>>2];k[x+12>>2]=k[l+12>>2];k[x+16>>2]=k[l+16>>2];k[x+20>>2]=k[l+20>>2];k[x+24>>2]=k[l+24>>2];k[a+40>>2]=y;y=a+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=a+56|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;r=d;return}function rD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c+4|0;e=c;f=a+4|0;k[e>>2]=k[f>>2];k[d>>2]=k[e>>2];FD(f,d,b)|0;r=c;return}function sD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0;e=r;r=r+320|0;f=e+304|0;g=e+300|0;h=e+296|0;j=e+272|0;l=e+256|0;m=e+32|0;n=e+20|0;o=e+48|0;p=e+16|0;q=e+12|0;s=e;if(!b){r=e;return a|0}b=a+4|0;t=j+4|0;u=j+8|0;v=j+12|0;w=j+16|0;y=j+20|0;z=j+16|0;A=l+4|0;B=l+8|0;C=m+4|0;D=a+8|0;E=a+12|0;F=l+8|0;G=j+12|0;H=o+96|0;I=o+192|0;J=o+196|0;K=s+4|0;L=s+8|0;a:while(1){k[h>>2]=b;N=JS(h)|0;k[j>>2]=0;k[t>>2]=b;i[u>>0]=0;k[w>>2]=0;k[y>>2]=0;k[v>>2]=z;k[l>>2]=0;k[A>>2]=0;k[B>>2]=0;x=0;xa(698,m|0,j|0);O=x;x=0;if(O&1){P=21;break}O=N&1;N=k[m>>2]|0;Q=k[C>>2]|0;if((N|0)==(Q|0)){R=N;S=O}else{T=N;N=O;while(1){O=T+32|0;U=k[O>>2]|0;x=0;fb(140,n|0,329672,0);V=x;x=0;if(V&1){P=32;break a}x=0;pa(49,(U|0)!=0|0,n|0,330,216616,217060);U=x;x=0;if(U&1){P=34;break a}K2a(n);U=k[O>>2]|0;x=0;xa(668,o|0,U|0);O=x;x=0;if(O&1){P=32;break a}x=0;xa(668,H|0,U|0);U=x;x=0;if(U&1){P=26;break a};k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;U=k[b>>2]|0;O=k[T>>2]|0;V=U+(O*80|0)|0;W=k[T+4>>2]|0;X=U+(W*80|0)|0;U=X;if((O|0)<(W|0)){W=V;O=V;V=N;while(1){k[p>>2]=O;k[q>>2]=U;x=0;k[g>>2]=k[p>>2];k[f>>2]=k[q>>2];Y=W;W=Fa(120,o|0,g|0,f|0)|0;Z=x;x=0;if(Z&1){P=35;break a}Z=O;O=W;x=0;xa(699,s|0,o|0);_=x;x=0;do if(_&1){$=Hc(1968,2160)|0;aa=M;if((aa|0)==(hf(1968)|0)){me($|0)|0;x=0;hb(45);ba=x;x=0;if(ba&1){P=51;break a}else{ca=0;da=0;P=52;break}}if((aa|0)!=(hf(2160)|0)){ea=$;fa=aa;P=83;break a}me($|0)|0;x=0;hb(45);$=x;x=0;if($&1){P=51;break a}else{ca=0;da=0;P=52}}else{$=k[s>>2]|0;aa=k[K>>2]|0;k[L>>2]=0;k[K>>2]=0;k[s>>2]=0;ba=aa;if((aa-$|0)>>>0<(O-Z|0)>>>0){aa=V+1|0;ga=$;if((ga|0)==(ba|0)){ha=$;ia=ba;ja=aa}else{ka=ga;while(1){ga=k[A>>2]|0;if((ga|0)==(k[F>>2]|0)){x=0;xa(669,l|0,ka|0);la=x;x=0;if(la&1){ma=$;na=ba;P=49;break a}}else{k[ga>>2]=k[ka>>2];oa=ga+8|0;qa=ka+8|0;ra=oa+40|0;do{k[oa>>2]=k[qa>>2];oa=oa+4|0;qa=qa+4|0}while((oa|0)<(ra|0));la=ka+48|0;sa=k[la+4>>2]|0;ta=ga+48|0;k[ta>>2]=k[la>>2];k[ta+4>>2]=sa;k[ga+56>>2]=k[ka+56>>2];sa=k[ka+60>>2]|0;k[ga+60>>2]=sa;if(sa)h0a(sa);k[ga+64>>2]=k[ka+64>>2];k[ga+68>>2]=k[ka+68>>2];sa=k[ka+72>>2]|0;k[ga+72>>2]=sa;if(sa)h0a(sa);k[A>>2]=(k[A>>2]|0)+80}ka=ka+80|0;if((ka|0)==(ba|0)){ha=$;ia=ba;ja=aa;break}}}}else{ca=ba;da=$;P=52}}while(0);if((P|0)==52){P=0;if((Y|0)==(W|0)){ha=da;ia=ca;ja=V}else{Z=Y;while(1){_=k[A>>2]|0;if((_|0)==(k[F>>2]|0)){x=0;xa(669,l|0,Z|0);aa=x;x=0;if(aa&1){ua=ca;va=da;P=50;break a}}else{k[_>>2]=k[Z>>2];oa=_+8|0;qa=Z+8|0;ra=oa+40|0;do{k[oa>>2]=k[qa>>2];oa=oa+4|0;qa=qa+4|0}while((oa|0)<(ra|0));$=Z+48|0;ba=k[$+4>>2]|0;aa=_+48|0;k[aa>>2]=k[$>>2];k[aa+4>>2]=ba;k[_+56>>2]=k[Z+56>>2];ba=k[Z+60>>2]|0;k[_+60>>2]=ba;if(ba)h0a(ba);k[_+64>>2]=k[Z+64>>2];k[_+68>>2]=k[Z+68>>2];ba=k[Z+72>>2]|0;k[_+72>>2]=ba;if(ba)h0a(ba);k[A>>2]=(k[A>>2]|0)+80}Z=Z+80|0;if((Z|0)==(W|0)){ha=da;ia=ca;ja=V;break}}}}Z=ha;if(ha){if((ia|0)!=(Z|0)){Y=ia;do{ba=k[Y+-8>>2]|0;if(ba)j0a(ba);ba=k[Y+-20>>2]|0;Y=Y+-80|0;if(ba)j0a(ba)}while((Y|0)!=(Z|0))}OBa(ha)}if(W>>>0>=X>>>0){wa=ja;break}else V=ja}V=k[I>>2]|0;X=V;if(!V)ya=wa;else{W=k[J>>2]|0;if((W|0)!=(V|0))k[J>>2]=W+(~((W+-16-X|0)>>>4)<<4);OBa(V);ya=wa}}else ya=N;py(H);py(o);T=T+48|0;if((T|0)==(Q|0)){za=ya;break}else N=ya}R=k[m>>2]|0;S=za}if(R){N=k[C>>2]|0;if((N|0)==(R|0))Aa=R;else{Q=N;do{k[C>>2]=Q+-48;N=k[Q+-4>>2]|0;if(N)j0a(N);N=k[Q+-12>>2]|0;if(N)j0a(N);N=k[Q+-40>>2]|0;T=N;if(N){V=Q+-36|0;X=k[V>>2]|0;if((X|0)!=(N|0))k[V>>2]=X+(~((X+-4-T|0)>>>2)<<2);OBa(N)}Q=k[C>>2]|0}while((Q|0)!=(R|0));Aa=k[m>>2]|0}OBa(Aa)}Q=k[A>>2]|0;N=k[l>>2]|0;T=k[D>>2]|0;X=k[b>>2]|0;V=X;W=T;O=N;U=Q;if((Q-N|0)>>>0>=(T-X|0)>>>0)if(!N)Ba=S;else{if((U|0)==(O|0))Ca=N;else{T=U;do{k[A>>2]=T+-80;U=k[T+-8>>2]|0;if(U)j0a(U);U=k[T+-20>>2]|0;if(U)j0a(U);T=k[A>>2]|0}while((T|0)!=(O|0));Ca=k[l>>2]|0}OBa(Ca);Ba=S}else{if(!X){Da=N;Ea=Q}else{if((W|0)==(V|0))Ga=X;else{O=W;do{k[D>>2]=O+-80;T=k[O+-8>>2]|0;if(T)j0a(T);T=k[O+-20>>2]|0;if(T)j0a(T);O=k[D>>2]|0}while((O|0)!=(V|0));Ga=k[b>>2]|0}OBa(Ga);k[E>>2]=0;k[D>>2]=0;k[b>>2]=0;Da=k[l>>2]|0;Ea=k[A>>2]|0}k[b>>2]=Da;k[D>>2]=Ea;k[E>>2]=k[F>>2];k[F>>2]=0;k[A>>2]=0;k[l>>2]=0;Ba=S+1|0}HD(G,k[z>>2]|0);if(!Ba){P=3;break}}if((P|0)==3){lB(c,c?1:d,a,b)|0;b=k[a+28>>2]|0;c=k[a+32>>2]|0;if((b|0)==(c|0)){r=e;return a|0}else Ha=b;do{sD(Ha,1,0,d)|0;Ha=Ha+116|0}while((Ha|0)!=(c|0));r=e;return a|0}else if((P|0)==21){a=Hc()|0;Ia=a;Ja=M}else if((P|0)==26){a=Hc()|0;e=M;py(o);Ka=e;La=a;P=33}else if((P|0)==32){a=Hc()|0;Ka=M;La=a;P=33}else if((P|0)==34){a=Hc()|0;e=M;K2a(n);Ma=a;Na=e;P=88}else if((P|0)==35){e=Hc()|0;ea=e;fa=M;P=83}else if((P|0)==49){e=Hc()|0;Oa=ma;Pa=na;Qa=e;Ra=M;P=70}else if((P|0)==50){e=Hc()|0;Oa=va;Pa=ua;Qa=e;Ra=M;P=70}else if((P|0)==51){e=Hc()|0;ea=e;fa=M;P=83}if((P|0)==33){Ma=La;Na=Ka;P=88}else if((P|0)==70){Ka=Oa;if(!Oa){ea=Qa;fa=Ra;P=83}else{if((Pa|0)!=(Ka|0)){La=Pa;do{Pa=k[La+-8>>2]|0;if(Pa)j0a(Pa);Pa=k[La+-20>>2]|0;La=La+-80|0;if(Pa)j0a(Pa)}while((La|0)!=(Ka|0))}OBa(Oa);ea=Qa;fa=Ra;P=83}}if((P|0)==83){Ra=k[I>>2]|0;I=Ra;if(Ra){Qa=k[J>>2]|0;if((Qa|0)!=(Ra|0))k[J>>2]=Qa+(~((Qa+-16-I|0)>>>4)<<4);OBa(Ra)}py(H);py(o);Ma=ea;Na=fa;P=88}if((P|0)==88){P=k[m>>2]|0;if(!P){Ia=Ma;Ja=Na}else{fa=k[C>>2]|0;if((fa|0)==(P|0))Sa=P;else{ea=fa;do{k[C>>2]=ea+-48;fa=k[ea+-4>>2]|0;if(fa)j0a(fa);fa=k[ea+-12>>2]|0;if(fa)j0a(fa);fa=k[ea+-40>>2]|0;o=fa;if(fa){H=ea+-36|0;Ra=k[H>>2]|0;if((Ra|0)!=(fa|0))k[H>>2]=Ra+(~((Ra+-4-o|0)>>>2)<<2);OBa(fa)}ea=k[C>>2]|0}while((ea|0)!=(P|0));Sa=k[m>>2]|0}OBa(Sa);Ia=Ma;Ja=Na}}Na=k[l>>2]|0;if(!Na){Ta=k[z>>2]|0;HD(G,Ta);Sc(Ia|0)}Ja=k[A>>2]|0;if((Ja|0)==(Na|0))Ua=Na;else{Ma=Ja;do{k[A>>2]=Ma+-80;Ja=k[Ma+-8>>2]|0;if(Ja)j0a(Ja);Ja=k[Ma+-20>>2]|0;if(Ja)j0a(Ja);Ma=k[A>>2]|0}while((Ma|0)!=(Na|0));Ua=k[l>>2]|0}OBa(Ua);Ta=k[z>>2]|0;HD(G,Ta);Sc(Ia|0);return 0}function tD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0;b=r;r=r+448|0;c=b+120|0;d=b+80|0;e=b+340|0;f=b+328|0;g=b+316|0;h=b+304|0;j=b+260|0;l=b+416|0;m=b+40|0;n=b;o=b+272|0;p=b+384|0;q=b+232|0;s=b+228|0;t=b+352|0;u=b+216|0;v=b+176|0;w=b+160|0;y=a+64|0;z=a+68|0;if((k[y>>2]|0)!=(k[z>>2]|0)){r=b;return y|0}A=a+16|0;B=a+20|0;C=a+4|0;D=a+8|0;E=1;while(1){F=k[A>>2]|0;if((F|0)==(B|0))G=1;else{H=F;F=1;while(1){I=(k[H+52>>2]|0)+F-(k[H+48>>2]|0)|0;J=k[H+4>>2]|0;if(!J){K=H;while(1){L=k[K+8>>2]|0;if((k[L>>2]|0)==(K|0)){N=L;break}else K=L}}else{K=J;while(1){L=k[K>>2]|0;if(!L){N=K;break}else K=L}}if((N|0)==(B|0)){G=I;break}else{H=N;F=I}}}F=k[C>>2]|0;H=k[D>>2]|0;if((F|0)==(H|0))O=G;else{K=F;F=G;while(1){J=(WC(K,E)|0)+F|0;K=K+80|0;if((K|0)==(H|0)){O=J;break}else F=J}}if(!O){P=0;break}else{Q=O;R=0}while(1){F=R+1|0;Q=Q>>>8;if(!Q){S=F;break}else R=F}if(S>>>0>E>>>0)E=E+1|0;else{P=O;break}}O=k[a>>2]|0;k[e>>2]=0;E=e+4|0;k[E>>2]=0;k[e+8>>2]=0;do if(O){if(!(O>>>0>1073741823?(x=0,va(1473,e|0),S=x,x=0,S&1):0))T=17;if((T|0)==17?(S=O<<2,x=0,R=Ba(563,S|0)|0,Q=x,x=0,!(Q&1)):0){k[e>>2]=R;Q=R+(O<<2)|0;k[e+8>>2]=Q;Fyb(R|0,0,S|0)|0;k[E>>2]=Q;break}Q=Hc()|0;S=k[e>>2]|0;if(!S)Sc(Q|0);R=k[E>>2]|0;if((R|0)!=(S|0))k[E>>2]=R+(~((R+-4-S|0)>>>2)<<2);OBa(S);Sc(Q|0)}while(0);O=f+4|0;k[O>>2]=0;Q=f+8|0;k[Q>>2]=0;S=f+4|0;k[f>>2]=S;R=g+4|0;k[R>>2]=0;G=g+8|0;k[G>>2]=0;N=g+4|0;k[g>>2]=N;F=h+4|0;k[F>>2]=0;H=h+8|0;k[H>>2]=0;K=h+4|0;k[h>>2]=K;k[j>>2]=0;J=j+4|0;k[J>>2]=0;k[j+8>>2]=0;if(!P)U=0;else{L=P;P=0;while(1){V=P+1|0;L=L>>>8;if(!L){U=V;break}else P=V}}P=U+95&255;L=1;a:while(1){V=k[A>>2]|0;if((V|0)==(B|0))W=1;else{X=V;V=1;while(1){Y=(k[X+52>>2]|0)+V-(k[X+48>>2]|0)|0;Z=k[X+4>>2]|0;if(!Z){_=X;while(1){$=k[_+8>>2]|0;if((k[$>>2]|0)==(_|0)){aa=$;break}else _=$}}else{_=Z;while(1){I=k[_>>2]|0;if(!I){aa=_;break}else _=I}}if((aa|0)==(B|0)){W=Y;break}else{X=aa;V=Y}}}V=k[C>>2]|0;X=k[D>>2]|0;if((V|0)==(X|0))ba=W;else{_=V;V=W;while(1){x=0;Z=Ta(529,_|0,L|0)|0;I=x;x=0;if(I&1){T=54;break a}I=Z+V|0;_=_+80|0;if((_|0)==(X|0)){ba=I;break}else V=I}}if(!ba){ca=0;T=39;break}else{da=ba;ea=0}while(1){V=ea+1|0;da=da>>>8;if(!da){fa=V;break}else ea=V}if(fa>>>0>L>>>0)L=L+1|0;else{ca=ba;T=39;break}}b:do if((T|0)==39){ba=a+28|0;L=k[ba>>2]|0;fa=a+32|0;ea=k[fa>>2]|0;c:do if((L|0)==(ea|0))ga=ca;else{da=L;W=ca;while(1){x=0;aa=Ba(587,da|0)|0;V=x;x=0;if(V&1)break;V=(k[aa+4>>2]|0)+W-(k[aa>>2]|0)|0;da=da+116|0;if((da|0)==(ea|0)){ga=V;break c}else W=V}W=Hc()|0;ha=W;ia=M;T=56;break b}while(0);ea=(ga|0)==0;if(ea)ja=0;else{L=ga;W=0;while(1){da=W+1|0;L=L>>>8;if(!L){ja=da;break}else W=da}}W=ja+95&255;L=a+72|0;da=k[y>>2]|0;Y=da;do if(((k[L>>2]|0)-da|0)>>>0>>0){V=(k[z>>2]|0)-da|0;if(!ea){x=0;aa=Ba(563,ga|0)|0;X=x;x=0;if(X&1)break;else ka=aa}else ka=0;aa=ka+V|0;X=aa+(0-V)|0;Dyb(X|0,Y|0,V|0)|0;k[y>>2]=X;k[z>>2]=aa;k[L>>2]=ka+ga;if(da){OBa(Y);T=59}else T=59}else T=59;while(0);d:do if((T|0)==59){Y=k[C>>2]|0;da=k[D>>2]|0;e:do if((Y|0)!=(da|0)){ea=a+40|0;aa=m+32|0;X=d+32|0;V=c+32|0;_=n+32|0;I=S;Z=j+8|0;$=a+76|0;la=a+80|0;ma=la;na=a+80|0;oa=a+84|0;qa=a+52|0;ra=Y;f:while(1){sa=k[ra>>2]|0;ta=k[e>>2]|0;g:do if((sa|0)==8){ua=k[ra+8>>2]|0;k[ta+(ua<<2)>>2]=(k[z>>2]|0)-(k[y>>2]|0);wa=k[ra+40>>2]|0;x=0;fb(140,u|0,329672,0);ya=x;x=0;if(ya&1){T=52;break f}x=0;pa(52,(wa|0)!=1|(ua|0)!=0|0,u|0,486,216616,217129);ua=x;x=0;if(ua&1){T=345;break f}K2a(u);ua=k[z>>2]|0;wa=k[L>>2]|0;if(ua>>>0>>0){i[ua>>0]=91;k[z>>2]=(k[z>>2]|0)+1;break}ya=wa;wa=k[y>>2]|0;za=ua-wa+1|0;if((za|0)<0){x=0;va(1473,y|0);ua=x;x=0;if(ua&1){T=52;break f}Aa=k[y>>2]|0;Ca=k[L>>2]|0}else{Aa=wa;Ca=ya}ya=Aa;wa=Ca-Aa|0;if(wa>>>0<1073741823){ua=wa<<1;wa=ua>>>0>>0?za:ua;ua=k[z>>2]|0;za=ua-Aa|0;if(!wa){Da=0;Ea=0;Fa=za;Ga=ua}else{Ha=wa;Ia=ua;Ja=za;T=342}}else{za=k[z>>2]|0;Ha=2147483647;Ia=za;Ja=za-Aa|0;T=342}if((T|0)==342){T=0;x=0;za=Ba(563,Ha|0)|0;ua=x;x=0;if(ua&1){T=52;break f}else{Da=Ha;Ea=za;Fa=Ja;Ga=Ia}}za=Ea+Fa|0;i[za>>0]=91;ua=Ga-Aa|0;wa=za+(0-ua)|0;Dyb(wa|0,ya|0,ua|0)|0;k[y>>2]=wa;k[z>>2]=za+1;k[L>>2]=Ea+Da;if(Aa)OBa(ya)}else{if(!(k[ta>>2]|0))k[ta>>2]=(k[z>>2]|0)-(k[y>>2]|0);switch(sa|0){case 1:{ya=k[ra+8>>2]&255;za=k[z>>2]|0;wa=k[L>>2]|0;if(za>>>0>>0){i[za>>0]=ya;k[z>>2]=(k[z>>2]|0)+1;break g}ua=wa;wa=k[y>>2]|0;Ka=za-wa+1|0;if((Ka|0)<0){x=0;va(1473,y|0);za=x;x=0;if(za&1){T=52;break f}La=k[y>>2]|0;Ma=k[L>>2]|0}else{La=wa;Ma=ua}ua=La;wa=Ma-La|0;if(wa>>>0<1073741823){za=wa<<1;wa=za>>>0>>0?Ka:za;za=k[z>>2]|0;Ka=za-La|0;if(!wa){Na=0;Oa=0;Pa=Ka;Qa=za}else{Ra=wa;Sa=za;Ua=Ka;T=86}}else{Ka=k[z>>2]|0;Ra=2147483647;Sa=Ka;Ua=Ka-La|0;T=86}if((T|0)==86){T=0;x=0;Ka=Ba(563,Ra|0)|0;za=x;x=0;if(za&1){T=52;break f}else{Na=Ra;Oa=Ka;Pa=Ua;Qa=Sa}}Ka=Oa+Pa|0;i[Ka>>0]=ya;ya=Qa-La|0;za=Ka+(0-ya)|0;Dyb(za|0,ua|0,ya|0)|0;k[y>>2]=za;k[z>>2]=Ka+1;k[L>>2]=Oa+Na;if(!La)break g;OBa(ua);break g;break}case 3:{ua=k[z>>2]|0;Ka=k[L>>2]|0;if(ua>>>0>=Ka>>>0){za=Ka;Ka=k[y>>2]|0;ya=ua-Ka+1|0;if((ya|0)<0){x=0;va(1473,y|0);wa=x;x=0;if(wa&1){T=52;break f}Va=k[y>>2]|0;Wa=k[L>>2]|0}else{Va=Ka;Wa=za}za=Va;Ka=Wa-Va|0;if(Ka>>>0<1073741823){wa=Ka<<1;Ka=wa>>>0>>0?ya:wa;wa=k[z>>2]|0;ya=wa-Va|0;if(!Ka){Xa=0;Ya=0;Za=ya;_a=wa}else{$a=Ka;ab=wa;bb=ya;T=97}}else{ya=k[z>>2]|0;$a=2147483647;ab=ya;bb=ya-Va|0;T=97}if((T|0)==97){T=0;x=0;ya=Ba(563,$a|0)|0;wa=x;x=0;if(wa&1){T=52;break f}else{Xa=$a;Ya=ya;Za=bb;_a=ab}}ya=Ya+Za|0;i[ya>>0]=127;wa=_a-Va|0;Ka=ya+(0-wa)|0;Dyb(Ka|0,za|0,wa|0)|0;k[y>>2]=Ka;k[z>>2]=ya+1;k[L>>2]=Ya+Xa;if(Va)OBa(za)}else{i[ua>>0]=127;k[z>>2]=(k[z>>2]|0)+1}x=0;xa(696,l|0,ra+8|0);ua=x;x=0;if(ua&1){T=52;break f}x=0;ua=Ta(542,ea|0,l|0)|0;za=x;x=0;if(za&1){T=52;break f}za=i[ua>>0]|0;ya=(za&1)==0;Ka=ya?ua+1|0:k[ua+8>>2]|0;wa=ya?(za&255)>>>1:k[ua+4>>2]|0;ua=Ka+wa|0;if(wa){wa=Ka;Ka=0;while(1){za=Ka+1|0;if(za>>>0>32)break g;ya=i[wa>>0]|0;cb=k[z>>2]|0;db=k[L>>2]|0;do if(cb>>>0>>0){i[cb>>0]=ya;k[z>>2]=(k[z>>2]|0)+1}else{eb=db;gb=k[y>>2]|0;hb=cb-gb+1|0;if((hb|0)<0){x=0;va(1473,y|0);ib=x;x=0;if(ib&1){T=51;break f}jb=k[y>>2]|0;kb=k[L>>2]|0}else{jb=gb;kb=eb}eb=jb;gb=kb-jb|0;if(gb>>>0<1073741823){ib=gb<<1;gb=ib>>>0>>0?hb:ib;ib=k[z>>2]|0;hb=ib-jb|0;if(!gb){lb=0;mb=0;ob=hb;pb=ib}else{qb=gb;rb=ib;sb=hb;T=113}}else{hb=k[z>>2]|0;qb=2147483647;rb=hb;sb=hb-jb|0;T=113}if((T|0)==113){T=0;x=0;hb=Ba(563,qb|0)|0;ib=x;x=0;if(ib&1){T=51;break f}else{lb=qb;mb=hb;ob=sb;pb=rb}}hb=mb+ob|0;i[hb>>0]=ya;ib=pb-jb|0;gb=hb+(0-ib)|0;Dyb(gb|0,eb|0,ib|0)|0;k[y>>2]=gb;k[z>>2]=hb+1;k[L>>2]=mb+lb;if(!jb)break;OBa(eb)}while(0);wa=wa+1|0;if((wa|0)==(ua|0)){tb=za;break}else Ka=za}if(tb>>>0<32)ub=tb;else break g}else ub=0;do{ub=ub+1|0;Ka=k[z>>2]|0;ua=k[L>>2]|0;do if(Ka>>>0>>0){i[Ka>>0]=0;k[z>>2]=(k[z>>2]|0)+1}else{wa=ua;ya=k[y>>2]|0;cb=Ka-ya+1|0;if((cb|0)<0){x=0;va(1473,y|0);db=x;x=0;if(db&1){T=50;break f}vb=k[y>>2]|0;wb=k[L>>2]|0}else{vb=ya;wb=wa}wa=vb;ya=wb-vb|0;if(ya>>>0<1073741823){db=ya<<1;ya=db>>>0>>0?cb:db;db=k[z>>2]|0;cb=db-vb|0;if(!ya){xb=0;yb=0;zb=cb;Ab=db}else{Bb=ya;Cb=db;Db=cb;T=126}}else{cb=k[z>>2]|0;Bb=2147483647;Cb=cb;Db=cb-vb|0;T=126}if((T|0)==126){T=0;x=0;cb=Ba(563,Bb|0)|0;db=x;x=0;if(db&1){T=50;break f}else{xb=Bb;yb=cb;zb=Db;Ab=Cb}}cb=yb+zb|0;i[cb>>0]=0;db=Ab-vb|0;ya=cb+(0-db)|0;Dyb(ya|0,wa|0,db|0)|0;k[y>>2]=ya;k[z>>2]=cb+1;k[L>>2]=yb+xb;if(!vb)break;OBa(wa)}while(0)}while(ub>>>0<32);break}case 2:{Ka=ra+8|0;Eb=m;Fb=Ka;Gb=Eb+40|0;do{k[Eb>>2]=k[Fb>>2];Eb=Eb+4|0;Fb=Fb+4|0}while((Eb|0)<(Gb|0));ua=k[aa>>2]|0;za=k[m>>2]|0;if((ua|0)!=1|(za|0)!=0){wa=ua;ua=za;za=0;while(1){cb=za+1|0;do if(!wa){k[aa>>2]=1;k[m>>2]=0;Hb=1;Ib=0}else{ya=wa+-1|0;db=(((k[m+(ya<<2)>>2]|0)>>>0<256)<<31>>31)+wa|0;if(!db){k[aa>>2]=1;k[m>>2]=0;Hb=1;Ib=0;break}eb=ua>>>8;k[m>>2]=eb;if(wa>>>0>1){hb=1;gb=eb;ib=m;Jb=0;while(1){k[ib>>2]=k[m+(hb<<2)>>2]<<24|gb;Kb=Jb+1|0;ib=m+(Kb<<2)|0;gb=(k[ib>>2]|0)>>>8;k[ib>>2]=gb;if((Kb|0)==(ya|0))break;else{hb=Jb+2|0;Jb=Kb}}Lb=k[m>>2]|0}else Lb=eb;Jb=db>>>0>8?8:db;k[aa>>2]=Jb;Hb=Jb;Ib=Lb}while(0);if((Ib|0)!=0|(Hb|0)!=1){wa=Hb;ua=Ib;za=cb}else{Mb=cb;break}}}else Mb=0;za=Mb>>>0>1?Mb:1;ua=za&255;wa=za+95&255;za=k[z>>2]|0;Jb=k[L>>2]|0;do if(za>>>0>>0){i[za>>0]=wa;hb=(k[z>>2]|0)+1|0;k[z>>2]=hb;Nb=hb;Ob=hb}else{hb=Jb;ya=k[y>>2]|0;gb=za-ya+1|0;if((gb|0)<0){x=0;va(1473,y|0);ib=x;x=0;if(ib&1){T=52;break f}Pb=k[y>>2]|0;Qb=k[L>>2]|0}else{Pb=ya;Qb=hb}hb=Pb;ya=Qb-Pb|0;if(ya>>>0<1073741823){ib=ya<<1;ya=ib>>>0>>0?gb:ib;ib=k[z>>2]|0;gb=ib-Pb|0;if(!ya){Rb=0;Sb=0;Tb=gb;Ub=ib}else{Vb=ya;Wb=ib;Xb=gb;T=147}}else{gb=k[z>>2]|0;Vb=2147483647;Wb=gb;Xb=gb-Pb|0;T=147}if((T|0)==147){T=0;x=0;gb=Ba(563,Vb|0)|0;ib=x;x=0;if(ib&1){T=52;break f}else{Rb=Vb;Sb=gb;Tb=Xb;Ub=Wb}}gb=Sb+Tb|0;i[gb>>0]=wa;ib=gb+1|0;ya=ib;Kb=Ub-Pb|0;Yb=gb+(0-Kb)|0;Dyb(Yb|0,hb|0,Kb|0)|0;k[y>>2]=Yb;k[z>>2]=ya;k[L>>2]=Sb+Rb;if(!Pb){Nb=ib;Ob=ya;break}OBa(hb);hb=k[z>>2]|0;Nb=hb;Ob=hb}while(0);wa=k[y>>2]|0;za=Ob-wa|0;Jb=za+ua|0;hb=wa;wa=Ob;do if(za>>>0>=Jb>>>0)if(za>>>0>Jb>>>0){ya=hb+Jb|0;if((wa|0)==(ya|0)){Zb=Nb;break}k[z>>2]=ya;Zb=ya}else Zb=Nb;else{x=0;xa(700,y|0,ua|0);ya=x;x=0;if(ya&1){T=52;break f}Zb=k[z>>2]|0}while(0);wa=Zb+(0-ua)|0;Eb=n;Fb=Ka;Gb=Eb+40|0;do{k[Eb>>2]=k[Fb>>2];Eb=Eb+4|0;Fb=Fb+4|0}while((Eb|0)<(Gb|0));if(ua){Ka=ua;do{k[d>>2]=255;k[X>>2]=1;k[c>>2]=0;k[V>>2]=1;KB(c,n,d);Ka=Ka+-1|0;i[wa+Ka>>0]=k[c>>2];Jb=k[_>>2]|0;do if(!Jb){k[_>>2]=1;k[n>>2]=0}else{hb=Jb+-1|0;za=(((k[n+(hb<<2)>>2]|0)>>>0<256)<<31>>31)+Jb|0;if(!za){k[_>>2]=1;k[n>>2]=0;break}ya=(k[n>>2]|0)>>>8;k[n>>2]=ya;if(Jb>>>0>1){ib=1;Yb=ya;ya=n;Kb=0;while(1){k[ya>>2]=k[n+(ib<<2)>>2]<<24|Yb;gb=Kb+1|0;ya=n+(gb<<2)|0;Yb=(k[ya>>2]|0)>>>8;k[ya>>2]=Yb;if((gb|0)==(hb|0))break;else{ib=Kb+2|0;Kb=gb}}}k[_>>2]=za>>>0>8?8:za}while(0)}while((Ka|0)!=0)}break g;break}case 4:{Ka=k[z>>2]|0;if((Ka|0)==(k[L>>2]|0)){wa=Ka;ua=k[y>>2]|0;Jb=wa-ua+1|0;if((Jb|0)<0){x=0;va(1473,y|0);cb=x;x=0;if(cb&1){T=52;break f}_b=k[y>>2]|0;$b=k[L>>2]|0}else{_b=ua;$b=wa}wa=_b;ua=$b-_b|0;if(ua>>>0<1073741823){cb=ua<<1;ua=cb>>>0>>0?Jb:cb;cb=k[z>>2]|0;Jb=cb-_b|0;if(!ua){ac=0;bc=0;cc=Jb;dc=cb}else{ec=ua;fc=cb;gc=Jb;T=174}}else{Jb=k[z>>2]|0;ec=2147483647;fc=Jb;gc=Jb-_b|0;T=174}if((T|0)==174){T=0;x=0;Jb=Ba(563,ec|0)|0;cb=x;x=0;if(cb&1){T=52;break f}else{ac=ec;bc=Jb;cc=gc;dc=fc}}Jb=bc+cc|0;i[Jb>>0]=P;cb=Jb+1|0;ua=dc-_b|0;Kb=Jb+(0-ua)|0;Dyb(Kb|0,wa|0,ua|0)|0;k[y>>2]=Kb;k[z>>2]=cb;k[L>>2]=bc+ac;if(!_b)hc=cb;else{OBa(wa);hc=k[z>>2]|0}}else{i[Ka>>0]=P;Ka=(k[z>>2]|0)+1|0;k[z>>2]=Ka;hc=Ka}Ka=k[ra+8>>2]|0;wa=k[y>>2]|0;cb=hc-wa|0;Kb=k[S>>2]|0;do if(Kb){ua=Kb;while(1){Jb=k[ua+16>>2]|0;if(cb>>>0>>0){ib=k[ua>>2]|0;if(!ib){ic=ua;jc=ua;T=180;break}else kc=ib}else{if(Jb>>>0>=cb>>>0){lc=ua;T=186;break}Jb=ua+4|0;ib=k[Jb>>2]|0;if(!ib){mc=Jb;nc=ua;T=184;break}else kc=ib}ua=kc}if((T|0)==180){T=0;k[d>>2]=jc;oc=ic;pc=jc;T=187;break}else if((T|0)==184){T=0;k[d>>2]=nc;oc=mc;pc=nc;T=187;break}else if((T|0)==186){T=0;k[d>>2]=lc;if(!lc){oc=d;pc=lc;T=187;break}else{qc=wa;rc=hc;sc=lc;break}}}else{k[d>>2]=S;oc=S;pc=I;T=187}while(0);if((T|0)==187){T=0;x=0;wa=Ba(563,24)|0;Kb=x;x=0;if(Kb&1){T=52;break f}k[wa+16>>2]=cb;k[wa+20>>2]=0;k[wa>>2]=0;k[wa+4>>2]=0;k[wa+8>>2]=pc;k[oc>>2]=wa;Kb=k[k[f>>2]>>2]|0;if(!Kb)tc=wa;else{k[f>>2]=Kb;tc=k[oc>>2]|0}ui(k[O>>2]|0,tc);k[Q>>2]=(k[Q>>2]|0)+1;qc=k[y>>2]|0;rc=k[z>>2]|0;sc=wa}k[sc+20>>2]=Ka;wa=rc-qc|0;Kb=wa+U|0;ua=qc;ib=rc;if(wa>>>0>>0){x=0;xa(700,y|0,U|0);Jb=x;x=0;if(Jb&1){T=52;break f}else break g}if(wa>>>0<=Kb>>>0)break g;wa=ua+Kb|0;if((ib|0)==(wa|0))break g;k[z>>2]=wa;break g;break}case 9:{wa=k[z>>2]|0;if((wa|0)==(k[L>>2]|0)){ib=wa;Kb=k[y>>2]|0;ua=ib-Kb+1|0;if((ua|0)<0){x=0;va(1473,y|0);Jb=x;x=0;if(Jb&1){T=52;break f}uc=k[y>>2]|0;vc=k[L>>2]|0}else{uc=Kb;vc=ib}ib=uc;Kb=vc-uc|0;if(Kb>>>0<1073741823){Jb=Kb<<1;Kb=Jb>>>0>>0?ua:Jb;Jb=k[z>>2]|0;ua=Jb-uc|0;if(!Kb){wc=0;xc=0;yc=ua;zc=Jb}else{Ac=Kb;Bc=Jb;Cc=ua;T=204}}else{ua=k[z>>2]|0;Ac=2147483647;Bc=ua;Cc=ua-uc|0;T=204}if((T|0)==204){T=0;x=0;ua=Ba(563,Ac|0)|0;Jb=x;x=0;if(Jb&1){T=52;break f}else{wc=Ac;xc=ua;yc=Cc;zc=Bc}}ua=xc+yc|0;i[ua>>0]=W;Jb=zc-uc|0;Kb=ua+(0-Jb)|0;Dyb(Kb|0,ib|0,Jb|0)|0;k[y>>2]=Kb;k[z>>2]=ua+1;k[L>>2]=xc+wc;if(uc)OBa(ib)}else{i[wa>>0]=W;k[z>>2]=(k[z>>2]|0)+1}x=0;xa(696,p|0,ra+8|0);wa=x;x=0;if(wa&1){T=52;break f}wa=k[z>>2]|0;ib=k[y>>2]|0;Eb=o;Fb=p;Gb=Eb+32|0;do{i[Eb>>0]=i[Fb>>0]|0;Eb=Eb+1|0;Fb=Fb+1|0}while((Eb|0)<(Gb|0));x=0;Ka=Ba(563,52)|0;cb=x;x=0;if(cb&1){T=52;break f}cb=wa-ib|0;ua=Ka+16|0;Eb=ua;Fb=o;Gb=Eb+32|0;do{i[Eb>>0]=i[Fb>>0]|0;Eb=Eb+1|0;Fb=Fb+1|0}while((Eb|0)<(Gb|0));k[Ka+48>>2]=cb;ib=k[N>>2]|0;do if(ib){wa=ib;while(1){Kb=0;while(1){Jb=i[ua+Kb>>0]|0;hb=i[wa+16+Kb>>0]|0;if((Jb&255)<(hb&255)){T=213;break}Kb=Kb+1|0;if(!(Kb>>>0<32&(Jb&255)<=(hb&255))){T=215;break}}if((T|0)==213){T=0;Kb=k[wa>>2]|0;if(!Kb){Dc=wa;Ec=wa;T=214;break}else Fc=Kb}else if((T|0)==215){T=0;Kb=wa+4|0;za=k[Kb>>2]|0;if(!za){Gc=Kb;Ic=wa;T=217;break}else Fc=za}wa=Fc}if((T|0)==214){T=0;Jc=Dc;Kc=Ec;break}else if((T|0)==217){T=0;Jc=Gc;Kc=Ic;break}}else{Jc=N;Kc=N}while(0);k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=Kc;k[Jc>>2]=Ka;ua=k[k[g>>2]>>2]|0;if(!ua)Lc=Ka;else{k[g>>2]=ua;Lc=k[Jc>>2]|0}ui(k[R>>2]|0,Lc);k[G>>2]=(k[G>>2]|0)+1;ua=k[z>>2]|0;ib=k[y>>2]|0;cb=ua-ib|0;wa=cb+ja|0;za=ib;ib=ua;if(cb>>>0>>0){x=0;xa(700,y|0,ja|0);ua=x;x=0;if(ua&1){T=52;break f}else break g}if(cb>>>0<=wa>>>0)break g;cb=za+wa|0;if((ib|0)==(cb|0))break g;k[z>>2]=cb;break g;break}case 5:{cb=k[z>>2]|0;if((cb|0)==(k[L>>2]|0)){ib=cb;wa=k[y>>2]|0;za=ib-wa+1|0;if((za|0)<0){x=0;va(1473,y|0);ua=x;x=0;if(ua&1){T=52;break f}Mc=k[y>>2]|0;Nc=k[L>>2]|0}else{Mc=wa;Nc=ib}ib=Mc;wa=Nc-Mc|0;if(wa>>>0<1073741823){ua=wa<<1;wa=ua>>>0>>0?za:ua;ua=k[z>>2]|0;za=ua-Mc|0;if(!wa){Oc=0;Pc=0;Qc=za;Rc=ua}else{Tc=wa;Uc=ua;Vc=za;T=233}}else{za=k[z>>2]|0;Tc=2147483647;Uc=za;Vc=za-Mc|0;T=233}if((T|0)==233){T=0;x=0;za=Ba(563,Tc|0)|0;ua=x;x=0;if(ua&1){T=52;break f}else{Oc=Tc;Pc=za;Qc=Vc;Rc=Uc}}za=Pc+Qc|0;i[za>>0]=W;ua=za+1|0;wa=Rc-Mc|0;Kb=za+(0-wa)|0;Dyb(Kb|0,ib|0,wa|0)|0;k[y>>2]=Kb;k[z>>2]=ua;k[L>>2]=Pc+Oc;if(!Mc)Wc=ua;else{OBa(ib);Wc=k[z>>2]|0}}else{i[cb>>0]=W;cb=(k[z>>2]|0)+1|0;k[z>>2]=cb;Wc=cb}cb=k[ra+8>>2]|0;ib=k[y>>2]|0;x=0;ua=Ba(563,24)|0;Kb=x;x=0;if(Kb&1){T=52;break f}k[ua+16>>2]=cb;k[ua+20>>2]=Wc-ib;ib=k[K>>2]|0;do if(ib){Kb=ib;while(1){if(cb>>>0<(k[Kb+16>>2]|0)>>>0){wa=k[Kb>>2]|0;if(!wa){Xc=Kb;Yc=Kb;T=240;break}else Zc=wa}else{wa=Kb+4|0;za=k[wa>>2]|0;if(!za){_c=wa;$c=Kb;T=243;break}else Zc=za}Kb=Zc}if((T|0)==240){T=0;ad=Xc;bd=Yc;break}else if((T|0)==243){T=0;ad=_c;bd=$c;break}}else{ad=K;bd=K}while(0);k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=bd;k[ad>>2]=ua;cb=k[k[h>>2]>>2]|0;if(!cb)cd=ua;else{k[h>>2]=cb;cd=k[ad>>2]|0}ui(k[F>>2]|0,cd);k[H>>2]=(k[H>>2]|0)+1;cb=k[z>>2]|0;ib=k[y>>2]|0;Ka=cb-ib|0;Kb=Ka+ja|0;za=ib;ib=cb;if(Ka>>>0>>0){x=0;xa(700,y|0,ja|0);cb=x;x=0;if(cb&1){T=52;break f}else break g}if(Ka>>>0<=Kb>>>0)break g;Ka=za+Kb|0;if((ib|0)==(Ka|0))break g;k[z>>2]=Ka;break g;break}case 6:{Ka=k[ra+8>>2]|0;ib=k[ba>>2]|0;if((((k[fa>>2]|0)-ib|0)/116|0)>>>0>Ka>>>0)dd=ib;else{x=0;va(1484,ba|0);ib=x;x=0;if(ib&1){T=52;break f}dd=k[ba>>2]|0}x=0;ib=Ba(587,dd+(Ka*116|0)|0)|0;Ka=x;x=0;if(Ka&1){T=52;break f}Ka=k[ib+4>>2]|0;Kb=k[ib>>2]|0;ib=Ka-Kb|0;x=0;za=Ba(563,56)|0;cb=x;x=0;if(cb&1){T=52;break f}k[za+4>>2]=0;k[za+8>>2]=0;k[za>>2]=26800;cb=za+16|0;k[cb>>2]=ib;wa=za+20|0;k[wa>>2]=k[q>>2];k[wa+4>>2]=k[q+4>>2];k[wa+8>>2]=k[q+8>>2];k[wa+12>>2]=k[q+12>>2];k[wa+16>>2]=k[q+16>>2];k[wa+20>>2]=k[q+20>>2];k[wa+24>>2]=k[q+24>>2];k[za+48>>2]=1;k[ra+68>>2]=cb;cb=ra+72|0;wa=k[cb>>2]|0;k[cb>>2]=za;if(wa)j0a(wa);if((Ka|0)==(Kb|0))ed=0;else{Kb=ib;Ka=0;while(1){wa=Ka+1|0;Kb=Kb>>>8;if(!Kb){ed=wa;break}else Ka=wa}}Ka=ed>>>0>1?ed:1;Kb=Ka&255;ua=Ka+95&255;Ka=k[z>>2]|0;wa=k[L>>2]|0;do if(Ka>>>0>>0){i[Ka>>0]=ua;za=(k[z>>2]|0)+1|0;k[z>>2]=za;fd=za;gd=za}else{za=wa;cb=k[y>>2]|0;hb=Ka-cb+1|0;if((hb|0)<0){x=0;va(1473,y|0);Jb=x;x=0;if(Jb&1){T=52;break f}hd=k[y>>2]|0;id=k[L>>2]|0}else{hd=cb;id=za}za=hd;cb=id-hd|0;if(cb>>>0<1073741823){Jb=cb<<1;cb=Jb>>>0>>0?hb:Jb;Jb=k[z>>2]|0;hb=Jb-hd|0;if(!cb){jd=0;kd=0;ld=hb;md=Jb}else{nd=cb;od=Jb;pd=hb;T=269}}else{hb=k[z>>2]|0;nd=2147483647;od=hb;pd=hb-hd|0;T=269}if((T|0)==269){T=0;x=0;hb=Ba(563,nd|0)|0;Jb=x;x=0;if(Jb&1){T=52;break f}else{jd=nd;kd=hb;ld=pd;md=od}}hb=kd+ld|0;i[hb>>0]=ua;Jb=hb+1|0;cb=Jb;Yb=md-hd|0;ya=hb+(0-Yb)|0;Dyb(ya|0,za|0,Yb|0)|0;k[y>>2]=ya;k[z>>2]=cb;k[L>>2]=kd+jd;if(!hd){fd=Jb;gd=cb;break}OBa(za);za=k[z>>2]|0;fd=za;gd=za}while(0);ua=k[y>>2]|0;Ka=gd-ua|0;wa=Ka+Kb|0;za=ua;ua=gd;do if(Ka>>>0>>0){x=0;xa(700,y|0,Kb|0);cb=x;x=0;if(cb&1){T=52;break f}qd=k[z>>2]|0}else{if(Ka>>>0<=wa>>>0){qd=fd;break}cb=za+wa|0;if((ua|0)==(cb|0)){qd=fd;break}k[z>>2]=cb;qd=cb}while(0);ua=qd+(0-Kb)|0;if(!Kb)break g;else{rd=ib;sd=Kb}while(1){sd=sd+-1|0;i[ua+sd>>0]=rd;if(!sd)break;else rd=rd>>>8}break}case 7:{ua=k[z>>2]|0;if((ua|0)==(k[L>>2]|0)){Kb=ua;ib=k[y>>2]|0;wa=Kb-ib+1|0;if((wa|0)<0){x=0;va(1473,y|0);za=x;x=0;if(za&1){T=52;break f}td=k[y>>2]|0;ud=k[L>>2]|0}else{td=ib;ud=Kb}Kb=td;ib=ud-td|0;if(ib>>>0<1073741823){za=ib<<1;ib=za>>>0>>0?wa:za;za=k[z>>2]|0;wa=za-td|0;if(!ib){vd=0;wd=0;xd=wa;yd=za}else{zd=ib;Ad=za;Bd=wa;T=288}}else{wa=k[z>>2]|0;zd=2147483647;Ad=wa;Bd=wa-td|0;T=288}if((T|0)==288){T=0;x=0;wa=Ba(563,zd|0)|0;za=x;x=0;if(za&1){T=52;break f}else{vd=zd;wd=wa;xd=Bd;yd=Ad}}wa=wd+xd|0;i[wa>>0]=W;za=wa+1|0;ib=yd-td|0;Ka=wa+(0-ib)|0;Dyb(Ka|0,Kb|0,ib|0)|0;k[y>>2]=Ka;k[z>>2]=za;k[L>>2]=wd+vd;if(!td)Cd=za;else{OBa(Kb);Cd=k[z>>2]|0}}else{i[ua>>0]=W;ua=(k[z>>2]|0)+1|0;k[z>>2]=ua;Cd=ua}ua=k[y>>2]|0;Kb=Cd-ua|0;k[s>>2]=Kb;za=k[J>>2]|0;if(za>>>0<(k[Z>>2]|0)>>>0){k[za>>2]=Kb;k[J>>2]=za+4;Dd=ua;Ed=Cd}else{x=0;xa(701,j|0,s|0);ua=x;x=0;if(ua&1){T=52;break f}Dd=k[y>>2]|0;Ed=k[z>>2]|0}ua=Ed-Dd|0;za=ua+ja|0;Kb=Dd;Ka=Ed;if(ua>>>0>>0){x=0;xa(700,y|0,ja|0);ib=x;x=0;if(ib&1){T=52;break f}else break g}if(ua>>>0<=za>>>0)break g;ua=Kb+za|0;if((Ka|0)==(ua|0))break g;k[z>>2]=ua;break g;break}case 10:{ua=k[z>>2]|0;Ka=k[L>>2]|0;if(ua>>>0>=Ka>>>0){za=Ka;Ka=k[y>>2]|0;Kb=ua-Ka+1|0;if((Kb|0)<0){x=0;va(1473,y|0);ib=x;x=0;if(ib&1){T=52;break f}Fd=k[y>>2]|0;Gd=k[L>>2]|0}else{Fd=Ka;Gd=za}za=Fd;Ka=Gd-Fd|0;if(Ka>>>0<1073741823){ib=Ka<<1;Ka=ib>>>0>>0?Kb:ib;ib=k[z>>2]|0;Kb=ib-Fd|0;if(!Ka){Hd=0;Id=0;Jd=Kb;Kd=ib}else{Ld=Ka;Md=ib;Nd=Kb;T=308}}else{Kb=k[z>>2]|0;Ld=2147483647;Md=Kb;Nd=Kb-Fd|0;T=308}if((T|0)==308){T=0;x=0;Kb=Ba(563,Ld|0)|0;ib=x;x=0;if(ib&1){T=52;break f}else{Hd=Ld;Id=Kb;Jd=Nd;Kd=Md}}Kb=Id+Jd|0;i[Kb>>0]=115;ib=Kb+1|0;Ka=Kd-Fd|0;wa=Kb+(0-Ka)|0;Dyb(wa|0,za|0,Ka|0)|0;k[y>>2]=wa;k[z>>2]=ib;k[L>>2]=Id+Hd;if(!Fd)Od=ib;else{OBa(za);Od=k[z>>2]|0}}else{i[ua>>0]=115;ua=(k[z>>2]|0)+1|0;k[z>>2]=ua;Od=ua}ua=Od-(k[y>>2]|0)|0;za=k[la>>2]|0;do if(za){ib=za;while(1){wa=k[ib+16>>2]|0;if(ua>>>0>>0){Ka=k[ib>>2]|0;if(!Ka){Pd=ib;Qd=ib;T=314;break}else Rd=Ka}else{if(wa>>>0>=ua>>>0){Sd=ib;T=320;break}wa=ib+4|0;Ka=k[wa>>2]|0;if(!Ka){Td=wa;Ud=ib;T=318;break}else Rd=Ka}ib=Rd}if((T|0)==314){T=0;k[c>>2]=Qd;Vd=Pd;Wd=Qd;T=321;break}else if((T|0)==318){T=0;k[c>>2]=Ud;Vd=Td;Wd=Ud;T=321;break}else if((T|0)==320){T=0;k[c>>2]=Sd;if(!Sd){Vd=c;Wd=Sd;T=321;break}else{Xd=Sd;break}}}else{k[c>>2]=la;Vd=la;Wd=ma;T=321}while(0);if((T|0)==321){T=0;x=0;za=Ba(563,32)|0;ib=x;x=0;if(ib&1){T=52;break f}k[za+16>>2]=ua;ib=za+20|0;k[ib>>2]=0;k[ib+4>>2]=0;k[ib+8>>2]=0;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=Wd;k[Vd>>2]=za;ib=k[k[$>>2]>>2]|0;if(!ib)Yd=za;else{k[$>>2]=ib;Yd=k[Vd>>2]|0}ui(k[na>>2]|0,Yd);k[oa>>2]=(k[oa>>2]|0)+1;Xd=za}x=0;xa(696,t|0,ra+8|0);za=x;x=0;if(za&1){T=52;break f}x=0;za=Ta(542,qa|0,t|0)|0;ib=x;x=0;if(ib&1){T=52;break f}x=0;Ta(493,Xd+20|0,za|0)|0;za=x;x=0;if(za&1){T=52;break f}za=k[z>>2]|0;ib=k[y>>2]|0;Ka=za-ib|0;if(Ka>>>0<4294967276){x=0;xa(700,y|0,20);wa=x;x=0;if(wa&1){T=52;break f}else break g}wa=ib+(Ka+20)|0;if((za|0)==(wa|0))break g;k[z>>2]=wa;break g;break}default:{T=346;break f}}}while(0);ra=ra+80|0;if((ra|0)==(da|0))break e}if((T|0)==50){ra=Hc()|0;ha=ra;ia=M;T=56;break b}else if((T|0)==51){ra=Hc()|0;ha=ra;ia=M;T=56;break b}else if((T|0)==52){ra=Hc()|0;ha=ra;ia=M;T=56;break b}else if((T|0)==345){ra=Hc()|0;qa=M;K2a(u);Zd=ra;_d=qa;break b}else if((T|0)==346){Eb=v;Gb=Eb+36|0;do{k[Eb>>2]=0;Eb=Eb+4|0}while((Eb|0)<(Gb|0));qa=v+20|0;ra=v+24|0;k[ra>>2]=0;k[v+28>>2]=0;k[v+32>>2]=0;k[v+36>>2]=-1;oa=v+4|0;na=v+8|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;K2a(c);k[v+4>>2]=24840;k[v>>2]=24804;k[qa>>2]=24864;x=0;nb(100,v|0,217129,216616,490);x=0;$=Hc()|0;ma=M;k[oa>>2]=24896;k[oa+-4>>2]=24924;k[oa+16>>2]=24948;K2a(na);k[qa>>2]=20796;qa=k[ra>>2]|0;if(qa){x=0;na=Ba(k[(k[qa>>2]|0)+16>>2]|0,qa|0)|0;qa=x;x=0;if(qa&1){qa=Hc(0)|0;Fg(qa)}if(na)k[ra>>2]=0}Zd=$;_d=ma;break b}}while(0);da=k[f>>2]|0;h:do if((da|0)!=(S|0)){do if(!U){Y=da;while(1){ma=k[Y+20>>2]|0;$=k[e>>2]|0;if((ma|0)==0?1:ma>>>0>=(k[E>>2]|0)-$>>2>>>0){ma=k[$>>2]|0;x=0;fb(140,w|0,329672,0);$=x;x=0;if($&1){T=72;break}x=0;pa(52,(ma|0)!=0|0,w|0,500,216616,217129);ma=x;x=0;if(ma&1){T=73;break}K2a(w)}ma=k[Y+4>>2]|0;if(!ma){$=Y;while(1){ra=k[$+8>>2]|0;if((k[ra>>2]|0)==($|0)){$d=ra;break}else $=ra}}else{$=ma;while(1){ua=k[$>>2]|0;if(!ua){$d=$;break}else $=ua}}if(($d|0)==(S|0))break h;else Y=$d}if((T|0)==72){Y=Hc()|0;ha=Y;ia=M;T=56;break b}else if((T|0)==73){Y=Hc()|0;ae=Y;be=M;break}}else{Y=da;while(1){$=(k[y>>2]|0)+(k[Y+16>>2]|0)|0;ma=k[Y+20>>2]|0;ua=k[e>>2]|0;ra=ma>>>0<(k[E>>2]|0)-ua>>2>>>0?ma:0;if(!ra){ma=k[ua>>2]|0;x=0;fb(140,w|0,329672,0);ua=x;x=0;if(ua&1){T=49;break}x=0;pa(52,(ma|0)!=0|0,w|0,500,216616,217129);ma=x;x=0;if(ma&1){T=358;break}K2a(w)}ma=k[(k[e>>2]|0)+(ra<<2)>>2]|0;ra=U;while(1){ra=ra+-1|0;i[$+ra>>0]=ma;if(!ra)break;else ma=ma>>>8}ma=k[Y+4>>2]|0;if(!ma){ra=Y;while(1){$=k[ra+8>>2]|0;if((k[$>>2]|0)==(ra|0)){ce=$;break}else ra=$}}else{ra=ma;while(1){$=k[ra>>2]|0;if(!$){ce=ra;break}else ra=$}}if((ce|0)==(S|0))break h;else Y=ce}if((T|0)==49){Y=Hc()|0;ha=Y;ia=M;T=56;break b}else if((T|0)==358){Y=Hc()|0;ae=Y;be=M;break}}while(0);K2a(w);Zd=ae;_d=be;break b}while(0);do if(!((k[G>>2]|0)==0|(k[H>>2]|0)==0)){da=k[z>>2]|0;Y=k[L>>2]|0;if(da>>>0>>0){i[da>>0]=0;k[z>>2]=(k[z>>2]|0)+1;break}ra=Y;Y=k[y>>2]|0;ma=da-Y+1|0;if((ma|0)<0){x=0;va(1473,y|0);da=x;x=0;if(da&1)break d;de=k[y>>2]|0;ee=k[L>>2]|0}else{de=Y;ee=ra}ra=de;Y=ee-de|0;if(Y>>>0<1073741823){da=Y<<1;Y=da>>>0>>0?ma:da;da=k[z>>2]|0;ma=da-de|0;if(!Y){fe=0;ge=0;he=ma;ie=da}else{je=Y;ke=da;le=ma;T=375}}else{ma=k[z>>2]|0;je=2147483647;ke=ma;le=ma-de|0;T=375}if((T|0)==375){x=0;ma=Ba(563,je|0)|0;da=x;x=0;if(da&1)break d;else{fe=je;ge=ma;he=le;ie=ke}}ma=ge+he|0;i[ma>>0]=0;da=ie-de|0;Y=ma+(0-da)|0;Dyb(Y|0,ra|0,da|0)|0;k[y>>2]=Y;k[z>>2]=ma+1;k[L>>2]=ge+fe;if(de)OBa(ra)}while(0);ra=k[fa>>2]|0;ma=k[ba>>2]|0;i:do if((ra|0)!=(ma|0)){Y=(ja|0)==0;da=ma;$=ma;ua=ra;na=0;while(1){qa=k[K>>2]|0;j:do if(!qa){me=K;T=399}else{oa=K;la=qa;k:while(1){Z=la;while(1){I=k[Z+16>>2]|0;if(na>>>0>>0){ne=Z;break}if(I>>>0>=na>>>0){oe=oa;pe=Z;break k}Z=k[Z+4>>2]|0;if(!Z){me=oa;T=399;break j}}la=k[ne>>2]|0;if(!la){me=ne;T=399;break j}else oa=ne}oa=k[pe>>2]|0;l:do if(!oa)qe=pe;else{la=pe;Z=oa;while(1){I=Z;while(1){if((k[I+16>>2]|0)>>>0>=na>>>0){re=I;break}I=k[I+4>>2]|0;if(!I){qe=la;break l}}Z=k[re>>2]|0;if(!Z){qe=re;break}else la=re}}while(0);oa=qe;la=k[pe+4>>2]|0;m:do if(!la)se=oe;else{Z=oe;I=la;while(1){_=I;while(1){if(na>>>0<(k[_+16>>2]|0)>>>0){te=_;break}_=k[_+4>>2]|0;if(!_){se=Z;break m}}I=k[te>>2]|0;if(!I){se=te;break}else Z=te}}while(0);ue=oa;ve=se}while(0);if((T|0)==399){T=0;qa=me;ue=qa;ve=qa}qa=ue;la=ve;if((qa|0)==(la|0)){we=da;xe=$;ye=ua}else{if(Y){Z=ue;while(1){I=Z;_=k[I+4>>2]|0;if(!_){V=I;while(1){I=k[V+8>>2]|0;if((k[I>>2]|0)==(V|0)){ze=I;break}else V=I}}else{V=_;while(1){oa=k[V>>2]|0;if(!oa){ze=V;break}else V=oa}}if((ze|0)==(la|0)){Ae=da;break}else Z=ze}}else{Z=qa;V=ue;while(1){_=k[y>>2]|0;oa=_+(k[Z+20>>2]|0)|0;I=(k[z>>2]|0)-_|0;_=ja;while(1){_=_+-1|0;i[oa+_>>0]=I;if(!_)break;else I=I>>>8}I=V;_=k[I+4>>2]|0;if(!_){oa=I;while(1){I=k[oa+8>>2]|0;if((k[I>>2]|0)==(oa|0)){Be=I;break}else oa=I}}else{oa=_;while(1){I=k[oa>>2]|0;if(!I){Be=oa;break}else oa=I}}if((Be|0)==(la|0))break;else{Z=Be;V=Be}}Ae=k[ba>>2]|0}x=0;V=Ba(587,Ae+(na*116|0)|0)|0;Z=x;x=0;if(Z&1)break;x=0;xa(702,y|0,V|0);V=x;x=0;if(V&1)break;V=k[ba>>2]|0;we=V;xe=V;ye=k[fa>>2]|0}na=na+1|0;if(na>>>0>=((ye-xe|0)/116|0)>>>0)break i;else{da=we;$=xe;ua=ye}}ua=Hc()|0;ha=ua;ia=M;T=56;break b}while(0);ra=k[A>>2]|0;n:do if((ra|0)!=(B|0)){ma=c+4|0;ua=(ja|0)==0;$=ra;while(1){LD(c,g,$+16|0);da=k[c>>2]|0;na=k[ma>>2]|0;Y=da;if((Y|0)!=(na|0)){if(ua){V=da;while(1){Z=V;la=k[Z+4>>2]|0;if(!la){qa=Z;while(1){Z=k[qa+8>>2]|0;if((k[Z>>2]|0)==(qa|0)){Ce=Z;break}else qa=Z}}else{qa=la;while(1){Z=k[qa>>2]|0;if(!Z){Ce=qa;break}else qa=Z}}if((Ce|0)==(na|0))break;else V=Ce}}else{V=Y;qa=da;while(1){la=k[y>>2]|0;Z=la+(k[V+48>>2]|0)|0;oa=(k[z>>2]|0)-la|0;la=ja;while(1){la=la+-1|0;i[Z+la>>0]=oa;if(!la)break;else oa=oa>>>8}oa=qa;la=k[oa+4>>2]|0;if(!la){Z=oa;while(1){oa=k[Z+8>>2]|0;if((k[oa>>2]|0)==(Z|0)){De=oa;break}else Z=oa}}else{Z=la;while(1){oa=k[Z>>2]|0;if(!oa){De=Z;break}else Z=oa}}if((De|0)==(na|0))break;else{V=De;qa=De}}}x=0;Ta(545,y|0,$+48|0)|0;qa=x;x=0;if(qa&1)break}qa=k[$+4>>2]|0;if(!qa){V=$;while(1){na=k[V+8>>2]|0;if((k[na>>2]|0)==(V|0)){Ee=na;break}else V=na}}else{V=qa;while(1){na=k[V>>2]|0;if(!na){Ee=V;break}else V=na}}if((Ee|0)==(B|0))break n;else $=Ee}$=Hc()|0;ha=$;ia=M;T=56;break b}while(0);ra=k[j>>2]|0;$=k[J>>2]|0;if((ra|0)!=($|0)?(ja|0)!=0:0){ua=ra;do{ma=k[y>>2]|0;V=ma+(k[ua>>2]|0)|0;qa=(k[z>>2]|0)-ma|0;ma=ja;while(1){ma=ma+-1|0;i[V+ma>>0]=qa;if(!ma)break;else qa=qa>>>8}ua=ua+4|0}while((ua|0)!=($|0));Fe=k[j>>2]|0}else Fe=ra;$=Fe;if(Fe){ua=k[J>>2]|0;if((ua|0)!=(Fe|0))k[J>>2]=ua+(~((ua+-4-$|0)>>>2)<<2);OBa(Fe)}Ay(h,k[K>>2]|0);MD(g,k[N>>2]|0);Ay(f,k[S>>2]|0);$=k[e>>2]|0;ua=$;if($){qa=k[E>>2]|0;if((qa|0)!=($|0))k[E>>2]=qa+(~((qa+-4-ua|0)>>>2)<<2);OBa($)}r=b;return y|0}while(0);fa=Hc()|0;ha=fa;ia=M;T=56}else if((T|0)==54){fa=Hc()|0;ha=fa;ia=M;T=56}while(0);if((T|0)==56){Zd=ha;_d=ia}ia=k[j>>2]|0;j=ia;if(ia){_d=k[J>>2]|0;if((_d|0)!=(ia|0))k[J>>2]=_d+(~((_d+-4-j|0)>>>2)<<2);OBa(ia)}Ay(h,k[K>>2]|0);MD(g,k[N>>2]|0);Ay(f,k[S>>2]|0);S=k[e>>2]|0;if(!S)Sc(Zd|0);e=k[E>>2]|0;if((e|0)!=(S|0))k[E>>2]=e+(~((e+-4-S|0)>>>2)<<2);OBa(S);Sc(Zd|0);return 0}function uD(){k[6889]=0;k[6890]=0;k[6891]=0;return}function vD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=KBa(60)|0;k[a>>2]=d;k[a+4>>2]=b+4;b=a+8|0;i[b>>0]=0;e=d+16|0;f=c;g=e+32|0;do{i[e>>0]=i[f>>0]|0;e=e+1|0;f=f+1|0}while((e|0)<(g|0));f=d+48|0;e=c+32|0;k[f>>2]=0;g=d+52|0;k[g>>2]=0;k[d+56>>2]=0;h=c+36|0;c=k[h>>2]|0;j=k[e>>2]|0;l=c-j|0;if((c|0)==(j|0)){i[b>>0]=1;return}if(!((l|0)<0?(x=0,va(1473,f|0),j=x,x=0,j&1):0))m=4;if((m|0)==4?(x=0,m=Ba(563,l|0)|0,j=x,x=0,!(j&1)):0){k[g>>2]=m;k[f>>2]=m;k[d+56>>2]=m+l;l=k[e>>2]|0;e=k[h>>2]|0;if((l|0)==(e|0)){i[b>>0]=1;return}else{n=l;o=m}do{i[o>>0]=i[n>>0]|0;o=(k[g>>2]|0)+1|0;k[g>>2]=o;n=n+1|0}while((n|0)!=(e|0));i[b>>0]=1;return}e=Hc()|0;n=k[f>>2]|0;if(n){if((k[g>>2]|0)!=(n|0))k[g>>2]=n;OBa(n)}n=k[a>>2]|0;k[a>>2]=0;if(!n)Sc(e|0);if((i[b>>0]|0)!=0?(b=k[n+48>>2]|0,(b|0)!=0):0){a=n+52|0;if((k[a>>2]|0)!=(b|0))k[a>>2]=b;OBa(b)}OBa(n);Sc(e|0)}function wD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+16|0;e=d;f=b+4|0;g=k[f>>2]|0;do if(g){h=g;a:while(1){j=0;while(1){l=i[c+16+j>>0]|0;m=i[h+16+j>>0]|0;if((l&255)<(m&255)){n=5;break}j=j+1|0;if(!(j>>>0<32&(l&255)<=(m&255))){o=0;n=7;break}}if((n|0)==5){n=0;j=k[h>>2]|0;if(!j){p=h;q=h;n=6;break}else s=j}else if((n|0)==7){while(1){n=0;j=i[h+16+o>>0]|0;m=i[c+16+o>>0]|0;if((j&255)<(m&255))break;o=o+1|0;if(!(o>>>0<32&(j&255)<=(m&255))){t=h;n=12;break a}else n=7}m=h+4|0;j=k[m>>2]|0;if(!j){u=m;v=h;n=11;break}else s=j}h=s}if((n|0)==6){k[e>>2]=q;w=p;x=q;break}else if((n|0)==11){k[e>>2]=v;w=u;x=v;break}else if((n|0)==12){k[e>>2]=t;w=e;x=t;break}}else{k[e>>2]=f;w=f;x=f}while(0);f=k[w>>2]|0;if(f){y=0;z=f;A=z;k[a>>2]=A;B=a+4|0;i[B>>0]=y;r=d;return}k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=x;k[w>>2]=c;x=k[k[b>>2]>>2]|0;if(!x)C=c;else{k[b>>2]=x;C=k[w>>2]|0}ui(k[b+4>>2]|0,C);C=b+8|0;k[C>>2]=(k[C>>2]|0)+1;y=1;z=c;A=z;k[a>>2]=A;B=a+4|0;i[B>>0]=y;r=d;return}function xD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+16|0;d=c+12|0;e=c+8|0;f=c+4|0;g=c;k[a>>2]=k[b>>2];h=a+4|0;uy(h,b+4|0);i=a+16|0;k[a+20>>2]=0;k[a+24>>2]=0;j=a+20|0;k[i>>2]=j;l=k[b+16>>2]|0;m=b+20|0;a:do if((l|0)==(m|0))n=8;else{o=j;p=l;q=l;while(1){k[g>>2]=o;x=0;k[d>>2]=k[g>>2];Fa(121,i|0,d|0,p+16|0)|0;s=x;x=0;if(s&1)break;s=k[q+4>>2]|0;if(!s){t=q;while(1){u=k[t+8>>2]|0;if((k[u>>2]|0)==(t|0)){v=u;break}else t=u}}else{t=s;while(1){u=k[t>>2]|0;if(!u){v=t;break}else t=u}}if((v|0)==(m|0)){n=8;break a}else{p=v;q=v}}q=Hc()|0;p=M;KE(i,k[j>>2]|0);w=p;y=q}while(0);if((n|0)==8){v=a+28|0;x=0;xa(703,v|0,b+28|0);m=x;x=0;if(!(m&1)){m=a+40|0;k[a+44>>2]=0;k[a+48>>2]=0;g=a+44|0;k[m>>2]=g;l=k[b+40>>2]|0;q=b+44|0;b:do if((l|0)==(q|0))n=16;else{p=g;o=l;t=l;while(1){k[f>>2]=p;x=0;k[d>>2]=k[f>>2];Fa(122,m|0,d|0,o+16|0)|0;s=x;x=0;if(s&1)break;s=k[t+4>>2]|0;if(!s){u=t;while(1){z=k[u+8>>2]|0;if((k[z>>2]|0)==(u|0)){A=z;break}else u=z}}else{u=s;while(1){z=k[u>>2]|0;if(!z){A=u;break}else u=z}}if((A|0)==(q|0)){n=16;break b}else{o=A;t=A}}t=Hc()|0;o=M;JE(m,k[g>>2]|0);B=o;C=t}while(0);if((n|0)==16){A=a+52|0;k[a+56>>2]=0;k[a+60>>2]=0;q=a+56|0;k[A>>2]=q;f=k[b+52>>2]|0;l=b+56|0;c:do if((f|0)==(l|0))n=23;else{t=q;o=f;p=f;while(1){k[e>>2]=t;x=0;k[d>>2]=k[e>>2];Fa(122,A|0,d|0,o+16|0)|0;u=x;x=0;if(u&1)break;u=k[p+4>>2]|0;if(!u){s=p;while(1){z=k[s+8>>2]|0;if((k[z>>2]|0)==(s|0)){D=z;break}else s=z}}else{s=u;while(1){z=k[s>>2]|0;if(!z){D=s;break}else s=z}}if((D|0)==(l|0)){n=23;break c}else{o=D;p=D}}p=Hc()|0;o=M;JE(A,k[q>>2]|0);E=o;F=p}while(0);do if((n|0)==23){x=0;xa(704,a+64|0,b+64|0);D=x;x=0;if(D&1){D=Hc()|0;l=M;JE(A,k[q>>2]|0);E=l;F=D;break}D=a+88|0;l=b+88|0;k[D>>2]=k[l>>2];k[D+4>>2]=k[l+4>>2];k[D+8>>2]=k[l+8>>2];l=b+100|0;D=k[l+4>>2]|0;d=a+100|0;k[d>>2]=k[l>>2];k[d+4>>2]=D;k[a+108>>2]=k[b+108>>2];D=k[b+112>>2]|0;k[a+112>>2]=D;if(!D){r=c;return}h0a(D);r=c;return}while(0);JE(m,k[g>>2]|0);B=E;C=F}F=k[v>>2]|0;if(!F){G=B;H=C}else{E=a+32|0;g=k[E>>2]|0;if((g|0)==(F|0))I=F;else{m=g;do{g=m+-116|0;k[E>>2]=g;IE(g);m=k[E>>2]|0}while((m|0)!=(F|0));I=k[v>>2]|0}OBa(I);G=B;H=C}}else{C=Hc()|0;G=M;H=C}KE(i,k[j>>2]|0);w=G;y=H}H=k[h>>2]|0;if(!H)Sc(y|0);G=a+8|0;a=k[G>>2]|0;if((a|0)==(H|0))J=H;else{w=a;do{k[G>>2]=w+-80;a=k[w+-8>>2]|0;if(a)j0a(a);a=k[w+-20>>2]|0;if(a)j0a(a);w=k[G>>2]|0}while((w|0)!=(H|0));J=k[h>>2]|0}OBa(J);Sc(y|0)}function yD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/116|0)+1|0;if(e>>>0>37025580){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/116|0;if(g>>>0<18512790){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/116|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=37025580;n=((k[c>>2]|0)-f|0)/116|0;o=6}if((o|0)==6){i=m;j=KBa(m*116|0)|0;l=n}n=j+(l*116|0)|0;l=n;m=j+(i*116|0)|0;x=0;xa(705,n|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;if(!j)Sc(b|0);OBa(j);Sc(b|0)}b=n+116|0;j=k[a>>2]|0;i=k[c>>2]|0;if((i|0)==(j|0)){p=l;q=j;r=j}else{o=i;i=n;n=l;while(1){o=o+-116|0;HE(i+-116|0,o);i=n+-116|0;l=i;if((o|0)==(j|0)){s=l;break}else n=l}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=m;m=q;if((r|0)!=(m|0)){d=r;do{d=d+-116|0;IE(d)}while((d|0)!=(m|0))}if(!q)return;OBa(q);return}function zD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+16|0;e=d;f=b+4|0;g=k[f>>2]|0;do if(g){h=g;a:while(1){j=0;while(1){l=i[c+16+j>>0]|0;m=i[h+16+j>>0]|0;if((l&255)<(m&255)){n=5;break}j=j+1|0;if(!(j>>>0<32&(l&255)<=(m&255))){o=0;n=7;break}}if((n|0)==5){n=0;j=k[h>>2]|0;if(!j){p=h;q=h;n=6;break}else s=j}else if((n|0)==7){while(1){n=0;j=i[h+16+o>>0]|0;m=i[c+16+o>>0]|0;if((j&255)<(m&255))break;o=o+1|0;if(!(o>>>0<32&(j&255)<=(m&255))){t=h;n=12;break a}else n=7}m=h+4|0;j=k[m>>2]|0;if(!j){u=m;v=h;n=11;break}else s=j}h=s}if((n|0)==6){k[e>>2]=q;w=p;x=q;break}else if((n|0)==11){k[e>>2]=v;w=u;x=v;break}else if((n|0)==12){k[e>>2]=t;w=e;x=t;break}}else{k[e>>2]=f;w=f;x=f}while(0);f=k[w>>2]|0;if(f){y=0;z=f;A=z;k[a>>2]=A;B=a+4|0;i[B>>0]=y;r=d;return}k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=x;k[w>>2]=c;x=k[k[b>>2]>>2]|0;if(!x)C=c;else{k[b>>2]=x;C=k[w>>2]|0}ui(k[b+4>>2]|0,C);C=b+8|0;k[C>>2]=(k[C>>2]|0)+1;y=1;z=c;A=z;k[a>>2]=A;B=a+4|0;i[B>>0]=y;r=d;return}function AD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=26592;j=e+-4|0;k[j>>2]=26620;a=e+16|0;k[a>>2]=26644;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=26536;k[f>>2]=26500;k[h>>2]=26560;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1491,f|0);x=0;d=Hc()|0;k[e>>2]=26592;k[j>>2]=26620;k[a>>2]=26644;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function BD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=a+4|0;a=k[c>>2]|0;if(a){d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=e?b+1|0:k[b+8>>2]|0;b=c;e=a;a:while(1){a=e;while(1){g=a+16|0;h=i[g>>0]|0;j=(h&1)==0;l=j?(h&255)>>>1:k[a+20>>2]|0;h=ZLa(j?g+1|0:k[a+24>>2]|0,d,f>>>0>>0?f:l)|0;if((((h|0)==0?(l>>>0>>0?-2147483648:0):h)|0)>=0){m=a;break}a=k[a+4>>2]|0;if(!a){n=b;break a}}e=k[m>>2]|0;if(!e){n=m;break}else b=m}if((n|0)!=(c|0)?(m=n+16|0,b=i[m>>0]|0,e=(b&1)==0,a=e?(b&255)>>>1:k[n+20>>2]|0,b=ZLa(d,e?m+1|0:k[n+24>>2]|0,a>>>0>>0?a:f)|0,(((b|0)==0?(f>>>0>>0?-2147483648:0):b)|0)>=0):0){o=n;return o|0}}o=c;return o|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=k[a+4>>2]|0;a:do if(c){a=c;b:while(1){d=0;while(1){e=i[b+d>>0]|0;f=i[a+16+d>>0]|0;if((e&255)<(f&255)){g=5;break}d=d+1|0;if(!(d>>>0<32&(e&255)<=(f&255))){h=0;g=6;break}}if((g|0)==5){g=0;d=k[a>>2]|0;if(!d)break a;else j=d}else if((g|0)==6){while(1){g=0;d=i[a+16+h>>0]|0;f=i[b+h>>0]|0;if((d&255)<(f&255))break;h=h+1|0;if(!(h>>>0<32&(d&255)<=(f&255))){l=a;break b}else g=6}f=k[a+4>>2]|0;if(!f)break a;else j=f}a=j}return l+48|0}while(0);l=Rd(8)|0;x=0;xa(671,l|0,296399);j=x;x=0;if(j&1){j=Hc()|0;Fc(l|0);Sc(j|0)}else{k[l>>2]=47544;Gf(l|0,9024,933)}return 0}function DD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+160|0;d=c+136|0;e=c;f=e+56|0;g=e+4|0;k[e>>2]=20356;k[f>>2]=20376;x=0;xa(582,e+56|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;mab(f);Sc(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,g|0);h=x;x=0;do if(h&1){m=Hc()|0;n=M;o=m}else{k[g>>2]=20392;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,g|0,d|0);p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(d);K2a(m);obb(g);n=q;o=p;break}K2a(d);p=e+(k[(k[e>>2]|0)+-12>>2]|0)+4|0;k[p>>2]=k[p>>2]&-513;p=e+(k[(k[e>>2]|0)+-12>>2]|0)+4|0;k[p>>2]=k[p>>2]&-75|8;k[e+(k[(k[e>>2]|0)+-12>>2]|0)+76>>2]=48;p=k[(k[e>>2]|0)+-12>>2]|0;q=0;while(1){k[e+p+12>>2]=2;x=0;Ta(477,e|0,l[b+q>>0]|0|0)|0;s=x;x=0;if(s&1){t=14;break}q=q+1|0;s=k[(k[e>>2]|0)+-12>>2]|0;if((q|0)==32){u=s;break}else p=s}if((t|0)==14){p=Hc()|0;v=p;w=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);Sc(v|0)}p=e+u+4|0;k[p>>2]=k[p>>2]&-75|2;x=0;xa(584,a|0,g|0);p=x;x=0;if(!(p&1)){k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);r=c;return}p=Hc()|0;v=p;w=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(m);obb(g);mab(f);Sc(v|0)}while(0);i=n;j=o;mab(f);Sc(j|0)}function ED(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=f;a:while(1){h=0;while(1){j=i[b+h>>0]|0;l=i[g+16+h>>0]|0;if((j&255)<(l&255)){m=5;break}h=h+1|0;if(!(h>>>0<32&(j&255)<=(l&255))){n=0;m=7;break}}if((m|0)==5){m=0;h=k[g>>2]|0;if(!h){o=g;p=g;m=6;break}else q=h}else if((m|0)==7){while(1){m=0;h=i[g+16+n>>0]|0;l=i[b+n>>0]|0;if((h&255)<(l&255))break;n=n+1|0;if(!(n>>>0<32&(h&255)<=(l&255))){s=g;m=12;break a}else m=7}l=g+4|0;h=k[l>>2]|0;if(!h){t=l;u=g;m=11;break}else q=h}g=q}if((m|0)==6){k[d>>2]=p;v=o;w=p;break}else if((m|0)==11){k[d>>2]=u;v=t;w=u;break}else if((m|0)==12){k[d>>2]=s;x=d;y=s;z=s;m=14;break}}else{k[d>>2]=e;x=e;y=f;z=e;m=14}while(0);if((m|0)==14)if(!y){v=x;w=z}else{A=y;B=A+48|0;r=c;return B|0}y=KBa(60)|0;z=y+16|0;x=b;b=z+32|0;do{i[z>>0]=i[x>>0]|0;z=z+1|0;x=x+1|0}while((z|0)<(b|0));x=y+48|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=w;k[v>>2]=y;w=k[k[a>>2]>>2]|0;if(!w)C=y;else{k[a>>2]=w;C=k[v>>2]|0}ui(k[a+4>>2]|0,C);C=a+8|0;k[C>>2]=(k[C>>2]|0)+1;A=y;B=A+48|0;r=c;return B|0}function FD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+32|0;e=d;f=k[a>>2]|0;g=f;h=((k[b>>2]|0)-g|0)/80|0;b=f+(h*80|0)|0;i=a+4|0;j=k[i>>2]|0;l=a+8|0;m=k[l>>2]|0;if(j>>>0>>0){if((b|0)==(j|0)){k[b>>2]=k[c>>2];n=f+(h*80|0)+8|0;o=c+8|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));q=c+48|0;s=k[q+4>>2]|0;t=f+(h*80|0)+48|0;k[t>>2]=k[q>>2];k[t+4>>2]=s;k[f+(h*80|0)+56>>2]=k[c+56>>2];s=k[c+60>>2]|0;k[f+(h*80|0)+60>>2]=s;if(s)h0a(s);k[f+(h*80|0)+64>>2]=k[c+64>>2];k[f+(h*80|0)+68>>2]=k[c+68>>2];s=k[c+72>>2]|0;k[f+(h*80|0)+72>>2]=s;if(s)h0a(s);k[i>>2]=(k[i>>2]|0)+80;u=b;r=d;return u|0}UB(a,b,j,b+80|0);if(b>>>0>c>>>0)v=c;else v=(k[i>>2]|0)>>>0>c>>>0?c+80|0:c;k[b>>2]=k[v>>2];if((b|0)!=(v|0)){i=v+40|0;k[f+(h*80|0)+40>>2]=k[i>>2];Dyb(f+(h*80|0)+8|0,v+8|0,k[i>>2]<<2|0)|0}i=v+48|0;s=k[i+4>>2]|0;t=f+(h*80|0)+48|0;k[t>>2]=k[i>>2];k[t+4>>2]=s;s=k[v+56>>2]|0;t=k[v+60>>2]|0;if(t)h0a(t);k[f+(h*80|0)+56>>2]=s;s=f+(h*80|0)+60|0;i=k[s>>2]|0;k[s>>2]=t;if(i)j0a(i);k[f+(h*80|0)+64>>2]=k[v+64>>2];i=k[v+68>>2]|0;t=k[v+72>>2]|0;if(t)h0a(t);k[f+(h*80|0)+68>>2]=i;i=f+(h*80|0)+72|0;h=k[i>>2]|0;k[i>>2]=t;if(!h){u=b;r=d;return u|0}j0a(h);u=b;r=d;return u|0}h=((j-g|0)/80|0)+1|0;if(h>>>0>53687091){HBa(a);w=k[a>>2]|0;y=k[l>>2]|0}else{w=g;y=m}m=(y-w|0)/80|0;if(m>>>0<26843545){y=m<<1;z=y>>>0>>0?h:y}else z=53687091;y=b-w|0;w=(y|0)/80|0;k[e+12>>2]=0;k[e+16>>2]=a+8;if(!z)A=0;else A=KBa(z*80|0)|0;k[e>>2]=A;h=A+(w*80|0)|0;m=e+8|0;k[m>>2]=h;g=e+4|0;k[g>>2]=h;l=e+12|0;k[l>>2]=A+(z*80|0);do if((w|0)==(z|0)){if((y|0)>0){j=h+(((((y|0)/80|0)+1|0)/-2|0)*80|0)|0;k[m>>2]=j;k[g>>2]=j;B=j;break}j=(z|0)==0?1:((z*80|0)/80|0)<<1;t=j>>>2;do if(!j)C=0;else{x=0;i=Ba(563,j*80|0)|0;f=x;x=0;if(!(f&1)){C=i;break}i=Hc()|0;if(!A)Sc(i|0);OBa(A);Sc(i|0)}while(0);i=C+(t*80|0)|0;f=i;k[e>>2]=C;k[g>>2]=f;k[m>>2]=f;k[l>>2]=C+(j*80|0);if(!A)B=i;else{OBa(A);B=i}}else B=h;while(0);k[B>>2]=k[c>>2];n=B+8|0;o=c+8|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));o=c+48|0;n=k[o+4>>2]|0;p=B+48|0;k[p>>2]=k[o>>2];k[p+4>>2]=n;k[B+56>>2]=k[c+56>>2];n=k[c+60>>2]|0;k[B+60>>2]=n;if(n)h0a(n);k[B+64>>2]=k[c+64>>2];k[B+68>>2]=k[c+68>>2];n=k[c+72>>2]|0;k[B+72>>2]=n;if(n)h0a(n);k[m>>2]=(k[m>>2]|0)+80;n=VB(a,e,b)|0;b=k[g>>2]|0;g=k[m>>2]|0;if((g|0)!=(b|0)){a=g;do{g=k[a+-8>>2]|0;if(g)j0a(g);g=k[a+-20>>2]|0;a=a+-80|0;if(g)j0a(g)}while((a|0)!=(b|0));k[m>>2]=b}b=k[e>>2]|0;if(b)OBa(b);u=n;r=d;return u|0}function GD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d;f=a+204|0;g=(k[f>>2]|0)==0;q2a(e,217487,45);x=0;pa(49,g|0,e|0,174,217533,217593);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}K2a(e);e=k[b>>2]|0;g=k[c>>2]|0;a:do if((e|0)==(g|0))h=e;else{c=e;while(1){if(bB(c)|0){h=c;break a}$x(a,c,0);c=c+80|0;k[b>>2]=c;if((c|0)==(g|0)){i=g;break}}r=d;return i|0}while(0);if((h|0)==(g|0)){i=g;r=d;return i|0}g=h+80|0;k[b>>2]=g;k[f>>2]=h;i=g;r=d;return i|0}function HD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!b)return;HD(a,k[b>>2]|0);HD(a,k[b+4>>2]|0);a=k[b+64>>2]|0;if(a)j0a(a);a=k[b+56>>2]|0;if(a)j0a(a);a=k[b+28>>2]|0;c=a;if(a){d=b+32|0;e=k[d>>2]|0;if((e|0)!=(a|0))k[d>>2]=e+(~((e+-4-c|0)>>>2)<<2);OBa(a)}OBa(b);return}function ID(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=r;r=r+80|0;g=f+56|0;h=f+16|0;i=f;if(a){r=f;return}f=h;a=f+36|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(a|0));f=h+20|0;a=h+24|0;k[a>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;j=h+4|0;l=j+-4|0;m=j+16|0;n=h+8|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);k[h+4>>2]=26884;k[h>>2]=26848;k[f>>2]=26908;k[i>>2]=21048;g=i+4|0;x=0;xa(604,g|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;o=M;p=b}else{x=0;b=Ta(546,h|0,i|0)|0;h=x;x=0;if(!(h&1)){k[b+(k[(k[b>>2]|0)+-28>>2]|0)+8>>2]=e;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+12>>2]=d;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+16>>2]=c;x=0;va(1492,b|0);x=0}b=Hc()|0;c=M;k[i>>2]=21048;K2a(g);o=c;p=b}k[j>>2]=26940;k[l>>2]=26968;k[m>>2]=26992;K2a(n);k[f>>2]=20796;f=k[a>>2]|0;if(!f)Sc(p|0);x=0;n=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!n)Sc(p|0);k[a>>2]=0;Sc(p|0)}function JD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+8|0;d=k[c>>2]|0;e=a+4|0;f=k[e>>2]|0;if((d-f|0)>>>0>=b>>>0){g=b;h=f;do{i[h>>0]=0;h=(k[e>>2]|0)+1|0;k[e>>2]=h;g=g+-1|0}while((g|0)!=0);return}g=k[a>>2]|0;h=f-g+b|0;if((h|0)<0){HBa(a);j=k[a>>2]|0;l=k[c>>2]|0}else{j=g;l=d}d=l-j|0;if(d>>>0<1073741823){l=d<<1;d=l>>>0>>0?h:l;l=(k[e>>2]|0)-j|0;if(!d){m=0;n=0;o=l}else{p=d;q=l;r=9}}else{p=2147483647;q=(k[e>>2]|0)-j|0;r=9}if((r|0)==9){m=p;n=KBa(p)|0;o=q}q=n+o|0;o=n+m|0;m=b;b=q;n=q;while(1){i[b>>0]=0;b=n+1|0;p=b;m=m+-1|0;if(!m){s=p;break}else n=p}n=k[a>>2]|0;m=(k[e>>2]|0)-n|0;b=q+(0-m)|0;Dyb(b|0,n|0,m|0)|0;k[a>>2]=b;k[e>>2]=s;k[c>>2]=o;if(!n)return;OBa(n);return}function KD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return} -function Nra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function Ora(a){a=a|0;OBa(a);return}function Pra(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=43352;k[b+4>>2]=k[a+4>>2];return b|0}function Qra(a,b){a=a|0;b=b|0;k[b>>2]=43352;k[b+4>>2]=k[a+4>>2];return}function Rra(a){a=a|0;return}function Sra(a){a=a|0;OBa(a);return}function Tra(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d+4|0;f=d;g=a+4|0;a=k[g>>2]|0;k[e>>2]=b;b=(Wra(a,e)|0)+48|0;e=k[g>>2]|0;k[f>>2]=c;eC(b,(Wra(e,f)|0)+48|0)|0;r=d;return}function Ura(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==283971?a+4|0:0)|0}function Vra(a){a=a|0;return 7752}function Wra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=k[b>>2]|0;h=f;while(1){j=k[h+16>>2]|0;if(g>>>0>>0){l=k[h>>2]|0;if(!l){m=h;n=h;o=5;break}else p=l}else{if(j>>>0>=g>>>0){q=h;o=10;break}j=h+4|0;l=k[j>>2]|0;if(!l){s=j;t=h;o=9;break}else p=l}h=p}if((o|0)==5){k[d>>2]=n;u=m;v=n;break}else if((o|0)==9){k[d>>2]=t;u=s;v=t;break}else if((o|0)==10){k[d>>2]=q;w=d;x=q;y=q;o=12;break}}else{k[d>>2]=e;w=e;x=f;y=e;o=12}while(0);if((o|0)==12)if(!x){u=w;v=y}else{z=x;A=z+24|0;r=c;return A|0}x=KBa(120)|0;k[x+16>>2]=k[b>>2];b=x+56|0;y=x+24|0;w=y+96|0;do{k[y>>2]=0;y=y+4|0}while((y|0)<(w|0));k[b>>2]=1;i[x+64>>0]=0;k[x+72>>2]=0;k[x+104>>2]=1;i[x+112>>0]=0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=v;k[u>>2]=x;v=k[k[a>>2]>>2]|0;if(!v)B=x;else{k[a>>2]=v;B=k[u>>2]|0}ui(k[a+4>>2]|0,B);B=a+8|0;k[B>>2]=(k[B>>2]|0)+1;z=x;A=z+24|0;r=c;return A|0}function Xra(a){a=a|0;OBa(a);return}function Yra(a){a=a|0;var b=0,c=0;b=KBa(16)|0;c=a+4|0;k[b>>2]=43308;a=b+4|0;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];return b|0}function Zra(a,b){a=a|0;b=b|0;var c=0;c=a+4|0;k[b>>2]=43308;a=b+4|0;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];return}function _ra(a){a=a|0;return}function $ra(a){a=a|0;OBa(a);return}function asa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+16|0;d=c+4|0;e=c;f=k[(k[a+4>>2]|0)+4>>2]|0;if(!f){r=c;return 1}else g=f;while(1){f=k[g+16>>2]|0;if(f>>>0>b>>>0)h=g;else{if(f>>>0>=b>>>0)break;h=g+4|0}g=k[h>>2]|0;if(!g){j=12;break}}if((j|0)==12){r=c;return 1}j=a+8|0;g=k[j>>2]|0;k[d>>2]=b;h=Wra(g,d)|0;d=k[j>>2]|0;k[e>>2]=b;j=Wra(d,e)|0;e=j+48|0;d=Lqa(k[a+12>>2]|0,b+8|0)|0;if((e|0)!=(d|0)){b=d+32|0;k[j+80>>2]=k[b>>2];Dyb(e|0,d|0,k[b>>2]<<2|0)|0}b=i[d+40>>0]|0;d=j+88|0;i[d>>0]=b;if((h|0)==(e|0))l=b;else{b=j+80|0;k[h+32>>2]=k[b>>2];Dyb(h|0,e|0,k[b>>2]<<2|0)|0;l=i[d>>0]|0}i[h+40>>0]=l;r=c;return 1}function bsa(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==284322?a+4|0:0)|0}function csa(a){a=a|0;return 7776}function dsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d;f=k[b>>2]|0;k[a>>2]=f;k[a+(k[f+-20>>2]|0)>>2]=k[b+4>>2];k[a+(k[(k[a>>2]|0)+-24>>2]|0)>>2]=k[b+8>>2];k[a+(k[(k[a>>2]|0)+-28>>2]|0)>>2]=k[b+12>>2];k[a+4>>2]=c;b=a+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;switch(c|0){case 0:{x=0;Ta(496,b|0,284670)|0;c=x;x=0;if(!(c&1)){r=d;return}break}case 1:{x=0;Ta(496,b|0,284688)|0;c=x;x=0;if(!(c&1)){r=d;return}break}case 2:{x=0;Ta(496,b|0,284712)|0;c=x;x=0;if(!(c&1)){r=d;return}break}case 4:{x=0;Ta(496,b|0,284725)|0;c=x;x=0;if(!(c&1)){r=d;return}break}case 3:{x=0;Ta(496,b|0,284738)|0;c=x;x=0;if(!(c&1)){r=d;return}break}case 5:{x=0;Ta(496,b|0,284749)|0;c=x;x=0;if(!(c&1)){r=d;return}break}case 6:{x=0;Ta(496,b|0,284771)|0;c=x;x=0;if(!(c&1)){r=d;return}break}default:{x=0;fb(140,e|0,329672,0);c=x;x=0;if(!(c&1)){x=0;pa(57,0,e|0,55,284779,284821);c=x;x=0;if(c&1){c=Hc()|0;a=M;K2a(e);g=a;h=c;K2a(b);Sc(h|0)}else{K2a(e);r=d;return}}}}d=Hc()|0;g=M;h=d;K2a(b);Sc(h|0)}function esa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c+12|0;e=c;f=a+36|0;g=a+40|0;k[g>>2]=0;k[a+44>>2]=0;k[a+48>>2]=0;k[a+52>>2]=-1;h=a+20|0;k[h>>2]=31388;i=h+-20|0;k[i>>2]=31416;j=h+16|0;k[j>>2]=31440;l=a+24|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+20>>2]=31332;k[a>>2]=31296;k[f>>2]=31356;k[a+4>>2]=b;d=a+8|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;a:do switch(b|0){case 0:{x=0;Ta(496,d|0,284670)|0;a=x;x=0;if(a&1)m=3;else{r=c;return}break}case 1:{x=0;Ta(496,d|0,284688)|0;a=x;x=0;if(a&1)m=3;else{r=c;return}break}case 2:{x=0;Ta(496,d|0,284712)|0;a=x;x=0;if(a&1)m=3;else{r=c;return}break}case 4:{x=0;Ta(496,d|0,284725)|0;a=x;x=0;if(a&1)m=3;else{r=c;return}break}case 3:{x=0;Ta(496,d|0,284738)|0;a=x;x=0;if(a&1)m=3;else{r=c;return}break}case 5:{x=0;Ta(496,d|0,284749)|0;a=x;x=0;if(a&1)m=3;else{r=c;return}break}case 6:{x=0;Ta(496,d|0,284771)|0;a=x;x=0;if(a&1)m=3;else{r=c;return}break}default:{x=0;fb(140,e|0,329672,0);a=x;x=0;if(a&1)m=3;else{x=0;pa(57,0,e|0,55,284779,284821);a=x;x=0;if(a&1){a=Hc()|0;n=M;K2a(e);o=n;p=a;break a}K2a(e);r=c;return}}}while(0);if((m|0)==3){m=Hc()|0;o=M;p=m}K2a(d);k[h>>2]=31388;k[i>>2]=31416;k[j>>2]=31440;K2a(l);k[f>>2]=20796;f=k[g>>2]|0;if(!f)Sc(p|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(p|0);k[g>>2]=0;Sc(p|0)}function fsa(){k[11089]=0;k[11090]=0;k[11091]=0;return}function gsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=r;r=r+96|0;e=d+76|0;f=d+72|0;g=d+80|0;h=d+68|0;j=d+48|0;l=d+40|0;m=d+56|0;n=d+24|0;o=d+12|0;p=d;if(!b){r=d;return}q=k[b+8>>2]|0;if(!q){r=d;return}s=k[c+16>>2]|0;if(!s){c=Rd(4)|0;k[c>>2]=26200;Gf(c|0,2216,320)}c=cg[k[(k[s>>2]|0)+24>>2]&1023](s,q)|0;q=c+160|0;Rsa(j,q,k[b>>2]|0);c=k[j>>2]|0;s=k[j+4>>2]|0;Rsa(l,q,k[b+4>>2]|0);j=k[l+4>>2]|0;if((c|0)!=(k[l>>2]|0)){Qsa(o,q,k[b>>2]|0);l=i[o>>0]|0;c=(l&1)==0;x=0;t=Fa(92,a|0,(c?o+1|0:k[o+8>>2]|0)|0,(c?(l&255)>>>1:k[o+4>>2]|0)|0)|0;l=x;x=0;do if(!(l&1)?(x=0,c=Ba(564,t+(k[(k[t>>2]|0)+-12>>2]|0)|0)|0,u=x,x=0,!(u&1)):0){k[e>>2]=c;x=0;c=Ta(495,e|0,74148)|0;u=x;x=0;if(!(u&1)?(x=0,u=Ta(k[(k[c>>2]|0)+28>>2]|0,c|0,10)|0,c=x,x=0,!(c&1)):0){$pb(e);x=0;Ta(540,t|0,u|0)|0;u=x;x=0;if(u&1){v=47;break}x=0;Ba(586,t|0)|0;u=x;x=0;if(u&1){v=47;break}x=0;fb(180,p|0,s|0,32);u=x;x=0;if(u&1){v=47;break}u=i[p>>0]|0;c=(u&1)==0;x=0;w=Fa(92,t|0,(c?p+1|0:k[p+8>>2]|0)|0,(c?(u&255)>>>1:k[p+4>>2]|0)|0)|0;u=x;x=0;if((!(u&1)?(x=0,u=Fa(92,w|0,284877,2)|0,w=x,x=0,!(w&1)):0)?(x=0,Fa(92,u|0,284880,25)|0,u=x,x=0,!(u&1)):0){K2a(p);K2a(o);r=d;return}u=Hc()|0;w=M;K2a(p);y=u;z=w;break}w=Hc()|0;u=M;$pb(e);A=u;B=w;v=48}else v=47;while(0);if((v|0)==47){e=Hc()|0;A=M;B=e;v=48}if((v|0)==48){y=B;z=A}K2a(o);C=y;D=z;Sc(C|0)}Qsa(m,q,k[b>>2]|0);b=i[m>>0]|0;q=(b&1)==0;z=m+8|0;y=m+1|0;x=0;o=Fa(92,a|0,(q?y:k[z>>2]|0)|0,(q?(b&255)>>>1:k[m+4>>2]|0)|0)|0;b=x;x=0;a:do if(!(b&1)?(x=0,q=Ba(564,o+(k[(k[o>>2]|0)+-12>>2]|0)|0)|0,A=x,x=0,!(A&1)):0){k[h>>2]=q;x=0;q=Ta(495,h|0,74148)|0;A=x;x=0;if(!(A&1)?(x=0,A=Ta(k[(k[q>>2]|0)+28>>2]|0,q|0,10)|0,q=x,x=0,!(q&1)):0){$pb(h);x=0;Ta(540,o|0,A|0)|0;A=x;x=0;if(A&1){v=22;break}x=0;Ba(586,o|0)|0;A=x;x=0;if(A&1){v=22;break}A=(i[m>>0]&1)==0?y:k[z>>2]|0;q=A+s|0;b:do if(s){B=A;while(1){i[g>>0]=(i[B>>0]|0)==9?9:32;x=0;Fa(92,a|0,g|0,1)|0;e=x;x=0;if(e&1)break;B=B+1|0;if((B|0)==(q|0))break b}B=Hc()|0;E=M;F=B;v=23;break a}while(0);x=0;Fa(92,a|0,301330,1)|0;q=x;x=0;if(q&1){v=22;break}do if((j|0)>(s+2|0)){x=0;fb(180,n|0,-2-s+j|0,45);q=x;x=0;if(q&1){v=22;break a}q=i[n>>0]|0;A=(q&1)==0;x=0;Fa(92,a|0,(A?n+1|0:k[n+8>>2]|0)|0,(A?(q&255)>>>1:k[n+4>>2]|0)|0)|0;q=x;x=0;if(q&1){q=Hc()|0;A=M;K2a(n);G=q;H=A;break a}else{K2a(n);break}}while(0);if((j|0)>(s+1|0)?(x=0,Fa(92,a|0,301330,1)|0,A=x,x=0,A&1):0){v=22;break}x=0;A=Ba(564,a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;q=x;x=0;if(q&1){v=22;break}k[f>>2]=A;x=0;A=Ta(495,f|0,74148)|0;q=x;x=0;if(!(q&1)?(x=0,q=Ta(k[(k[A>>2]|0)+28>>2]|0,A|0,10)|0,A=x,x=0,!(A&1)):0){$pb(f);x=0;Ta(540,a|0,q|0)|0;q=x;x=0;if(q&1){v=22;break}x=0;Ba(586,a|0)|0;q=x;x=0;if(q&1){v=22;break}K2a(m);r=d;return}q=Hc()|0;A=M;$pb(f);E=A;F=q;v=23;break}q=Hc()|0;A=M;$pb(h);E=A;F=q;v=23}else v=22;while(0);if((v|0)==22){h=Hc()|0;E=M;F=h;v=23}if((v|0)==23){G=F;H=E}K2a(m);C=G;D=H;Sc(C|0)}function hsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d;if(!b){r=d;return}f=b+8|0;g=k[f>>2]|0;if(!g){r=d;return}h=k[c+16>>2]|0;if(!h){c=Rd(4)|0;k[c>>2]=26200;Gf(c|0,2216,320)}c=cg[k[(k[h>>2]|0)+24>>2]&1023](h,g)|0;Rsa(e,c+160|0,k[b>>2]|0);b=k[e>>2]|0;c=k[e+4>>2]|0;e=k[f>>2]|0;f=i[e>>0]|0;g=(f&1)==0;ei(efb(ei(efb(ei(ei(a,g?e+1|0:k[e+8>>2]|0,g?(f&255)>>>1:k[e+4>>2]|0)|0,294915,1)|0,b+1|0)|0,294915,1)|0,c+1|0)|0,325552,2)|0;r=d;return}function isa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+48|0;f=e+32|0;g=e;h=k[(k[b>>2]|0)+-24>>2]|0;j=b+h|0;if(!j){l=0;m=h}else{h=k[j+4>>2]|0;if(h){j=k[(k[h>>2]|0)+4>>2]|0;k[g>>2]=4800;jg[j&511](f,h,g);h=k[f>>2]|0;j=(h|0)==0;n=h+4|0;h=k[f+4>>2]|0;if((h|0)!=0?(o=h+4|0,p=k[o>>2]|0,k[o>>2]=p+-1,(p|0)==1):0){x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);p=x;x=0;if(p&1){q=Hc(0)|0;s=M;Fg(q)}p=h+8|0;o=k[p>>2]|0;k[p>>2]=o+-1;if((o|0)==1?(x=0,va(k[(k[h>>2]|0)+12>>2]|0,h|0),h=x,x=0,h&1):0){q=Hc(0)|0;s=M;Fg(q)}}if(!j)t=n;else u=10}else u=10;if((u|0)==10)t=0;l=t;m=k[(k[b>>2]|0)+-24>>2]|0}t=b+m|0;if(!t)v=0;else{m=k[t+4>>2]|0;if(m){t=k[(k[m>>2]|0)+4>>2]|0;k[g>>2]=4768;jg[t&511](f,m,g);m=k[f>>2]|0;t=(m|0)==0;n=m+4|0;m=k[f+4>>2]|0;if((m|0)!=0?(j=m+4|0,q=k[j>>2]|0,k[j>>2]=q+-1,(q|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);q=x;x=0;if(q&1){w=Hc(0)|0;y=M;Fg(w)}q=m+8|0;j=k[q>>2]|0;k[q>>2]=j+-1;if((j|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){w=Hc(0)|0;y=M;Fg(w)}}if(!t)z=n;else u=21}else u=21;if((u|0)==21)z=0;v=z}hsa(a,l,d);z=i[c>>0]|0;n=(z&1)==0;ei(a,n?c+1|0:k[c+8>>2]|0,n?(z&255)>>>1:k[c+4>>2]|0)|0;c=b+(k[(k[b>>2]|0)+-24>>2]|0)|0;do if((c|0)!=0?(b=k[c+4>>2]|0,(b|0)!=0):0){z=k[(k[b>>2]|0)+4>>2]|0;k[g>>2]=248;jg[z&511](f,b,g);b=k[f>>2]|0;z=(b|0)==0;n=b+4|0;t=k[f+4>>2]|0;if((t|0)!=0?(w=t+4|0,y=k[w>>2]|0,k[w>>2]=y+-1,(y|0)==1):0){x=0;va(k[(k[t>>2]|0)+8>>2]|0,t|0);y=x;x=0;if(y&1){A=Hc(0)|0;B=M;Fg(A)}y=t+8|0;w=k[y>>2]|0;k[y>>2]=w+-1;if((w|0)==1?(x=0,va(k[(k[t>>2]|0)+12>>2]|0,t|0),t=x,x=0,t&1):0){A=Hc(0)|0;B=M;Fg(A)}}if(!z){z=ei(a,325552,2)|0;t=i[n>>0]|0;w=(t&1)==0;y=ei(z,w?n+1|0:k[b+12>>2]|0,w?(t&255)>>>1:k[b+8>>2]|0)|0;b=zab(y+(k[(k[y>>2]|0)+-12>>2]|0)|0)|0;k[f>>2]=b;x=0;b=Ta(495,f|0,74148)|0;t=x;x=0;if(t&1){C=Hc()|0;D=M;$pb(f);Sc(C|0)}x=0;t=Ta(k[(k[b>>2]|0)+28>>2]|0,b|0,10)|0;b=x;x=0;if(b&1){C=Hc()|0;D=M;$pb(f);Sc(C|0)}else{$pb(f);pfb(y,t)|0;cdb(y)|0;break}}}while(0);gsa(a,l,d);if(!v){r=e;return}l=k[v>>2]|0;C=k[v+4>>2]|0;if((l|0)==(C|0)){r=e;return}v=g+12|0;D=g+20|0;A=g+24|0;B=g+8|0;c=g+1|0;y=g+4|0;t=l;while(1){n2a(g,t);l=t+12|0;b=k[l+4>>2]|0;w=v;k[w>>2]=k[l>>2];k[w+4>>2]=b;k[D>>2]=k[t+20>>2];b=k[t+24>>2]|0;k[A>>2]=b;if(b)h0a(b);b=i[g>>0]|0;w=(b&1)==0;x=0;l=Fa(92,a|0,(w?c:k[B>>2]|0)|0,(w?(b&255)>>>1:k[y>>2]|0)|0)|0;b=x;x=0;if(b&1){u=59;break}x=0;Fa(92,l|0,324196,1)|0;l=x;x=0;if(l&1){u=59;break}x=0;fb(370,a|0,v|0,d|0);l=x;x=0;if(l&1){u=59;break}x=0;l=Ba(564,a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;b=x;x=0;if(b&1){u=59;break}k[f>>2]=l;x=0;l=Ta(495,f|0,74148)|0;b=x;x=0;if(b&1){u=52;break}x=0;b=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,10)|0;l=x;x=0;if(l&1){u=52;break}$pb(f);x=0;Ta(540,a|0,b|0)|0;b=x;x=0;if(b&1){u=59;break}x=0;Ba(586,a|0)|0;b=x;x=0;if(b&1){u=59;break}x=0;fb(371,a|0,v|0,d|0);b=x;x=0;if(b&1){u=59;break}b=k[A>>2]|0;if(b)j0a(b);K2a(g);t=t+28|0;if((t|0)==(C|0)){u=40;break}}if((u|0)==40){C=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[f>>2]=C;x=0;C=Ta(495,f|0,74148)|0;t=x;x=0;if(t&1){E=Hc()|0;F=M;$pb(f);Sc(E|0)}x=0;t=Ta(k[(k[C>>2]|0)+28>>2]|0,C|0,10)|0;C=x;x=0;if(C&1){E=Hc()|0;F=M;$pb(f);Sc(E|0)}$pb(f);pfb(a,t)|0;cdb(a)|0;r=e;return}else if((u|0)==52){e=Hc()|0;a=M;$pb(f);G=a;H=e}else if((u|0)==59){u=Hc()|0;G=M;H=u}u=k[A>>2]|0;if(!u){K2a(g);Sc(H|0)}j0a(u);K2a(g);Sc(H|0)}function jsa(){k[11092]=0;k[11093]=0;k[11094]=0;return}function ksa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+96|0;e=d+72|0;f=d+32|0;g=d+16|0;h=d;switch(c<<24>>24){case 1:{lsa(a,b);r=d;return}case 2:{msa(a,b);r=d;return}case 3:{nsa(a,b);r=d;return}default:{d=f;b=d+36|0;do{k[d>>2]=0;d=d+4|0}while((d|0)<(b|0));d=f+20|0;b=f+24|0;k[b>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;a=f+4|0;c=a+-4|0;i=a+16|0;j=f+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=20924;k[f>>2]=20888;k[d>>2]=20948;x=0;fb(140,h|0,284906,26);e=x;x=0;if(e&1){e=Hc()|0;l=M;m=e}else{k[g>>2]=21048;e=g+4|0;x=0;xa(604,e|0,h|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,f|0,g|0)|0;f=x;x=0;if(!(f&1)){x=0;nb(87,n|0,284933,285071,26);x=0}n=Hc()|0;f=M;k[g>>2]=21048;K2a(e);o=f;p=n}K2a(h);l=o;m=p}k[a>>2]=20980;k[c>>2]=21008;k[i>>2]=21032;K2a(j);k[d>>2]=20796;d=k[b>>2]|0;if(!d)Sc(m|0);x=0;j=Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(!j)Sc(m|0);k[b>>2]=0;Sc(m|0)}}}function lsa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;c=r;r=r+256|0;d=c+244|0;e=c+120|0;f=c+96|0;g=c+232|0;h=c+220|0;j=c+208|0;l=c+72|0;m=c+48|0;n=c+196|0;o=c+24|0;p=c;q=c+144|0;iu(e,0);x=0;xa(588,f|0,7);s=x;x=0;if(s&1){s=Hc()|0;t=s;u=M;xu(e);Sc(t|0)}x=0;xa(585,g|0,b|0);b=x;x=0;a:do if(!(b&1)){s=k[g>>2]|0;v=g+4|0;b:do if((s|0)!=(v|0)){w=d+4|0;y=h+4|0;z=s;c:while(1){A=z+20|0;B=(k[A>>2]|0)+84|0;if(k[B>>2]|0){x=0;fb(140,d|0,285127,55);C=x;x=0;if(C&1){D=8;break}x=0;pa(57,1,d|0,917,285183,285227);C=x;x=0;if(C&1){D=13;break}K2a(d);C=iDa(k[B>>2]|0,4520,5424,0)|0;if(C){x=0;B=Ba(k[(k[C>>2]|0)+16>>2]|0,C|0)|0;C=x;x=0;if(C&1){D=8;break}x=0;fb(140,j|0,286446,6);C=x;x=0;if(C&1){D=8;break};k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;soa(d,B+8|0,j);B=k[d>>2]|0;C=k[w>>2]|0;E=B;if((E|0)!=(C|0)){F=E;E=B;while(1){B=F+28|0;G=i[B>>0]|0;H=(G&1)==0;x=0;Fa(88,h|0,(H?B+1|0:k[F+36>>2]|0)|0,(H?(G&255)>>>1:k[F+32>>2]|0)|0)|0;G=x;x=0;if(G&1){D=34;break c}G=k[F+4>>2]|0;if(!G){H=E;while(1){B=k[H+8>>2]|0;if((k[B>>2]|0)==(H|0)){I=B;break}else H=B}}else{H=G;while(1){B=k[H>>2]|0;if(!B){I=H;break}else H=B}}if((I|0)==(C|0))break;else{F=I;E=I}}}K2a(j);E=i[h>>0]|0;if(((E&1)==0?(E&255)>>>1:k[y>>2]|0)|0){x=0;xa(588,l|0,0);E=x;x=0;if(E&1){D=35;break}x=0;E=Ta(482,l|0,286446)|0;F=x;x=0;if(F&1){D=36;break}x=0;xa(587,m|0,h|0);F=x;x=0;if(F&1){D=36;break}x=0;Ta(476,E|0,m|0)|0;E=x;x=0;if(E&1){D=37;break}xu(m);x=0;xa(586,n|0,k[A>>2]|0);E=x;x=0;if(E&1){D=36;break}x=0;E=Ta(475,f|0,n|0)|0;F=x;x=0;if(F&1){D=38;break}x=0;xa(589,o|0,l|0);F=x;x=0;if(F&1){D=38;break}x=0;Ta(476,E|0,o|0)|0;E=x;x=0;if(E&1){D=39;break}xu(o);K2a(n);xu(l)}K2a(h)}}E=k[z+4>>2]|0;if(!E){F=z;while(1){C=k[F+8>>2]|0;if((k[C>>2]|0)==(F|0)){J=C;break}else F=C}}else{F=E;while(1){A=k[F>>2]|0;if(!A){J=F;break}else F=A}}if((J|0)==(v|0))break b;else z=J}if((D|0)==8){z=Hc()|0;K=M;L=z;D=9}else if((D|0)==13){z=Hc()|0;y=M;K2a(d);K=y;L=z;D=9}else if((D|0)==34){z=Hc()|0;y=M;K2a(h);K2a(j);N=z;O=y}else if((D|0)==35){y=Hc()|0;P=y;Q=M;D=43}else if((D|0)==36){y=Hc()|0;R=y;S=M;D=41}else if((D|0)==37){y=Hc()|0;z=M;xu(m);R=y;S=z;D=41}else if((D|0)==38){z=Hc()|0;T=z;U=M;D=40}else if((D|0)==39){z=Hc()|0;y=M;xu(o);T=z;U=y;D=40}if((D|0)==9){N=L;O=K}else if((D|0)==40){K2a(n);R=T;S=U;D=41}if((D|0)==41){xu(l);P=R;Q=S;D=43}if((D|0)==43){K2a(h);N=P;O=Q}Yg(g,k[v>>2]|0);V=N;W=O;break a}while(0);Yg(g,k[v>>2]|0);x=0;s=Ta(482,e|0,285119)|0;y=x;x=0;if(!(y&1)?(x=0,xa(589,p|0,f|0),y=x,x=0,!(y&1)):0){x=0;Ta(476,s|0,p|0)|0;s=x;x=0;if(s&1){s=Hc()|0;y=M;xu(p);V=s;W=y;break}xu(p);x=0;va(1523,q|0);y=x;x=0;if(!(y&1)){x=0;fb(60,a|0,q|0,e|0);y=x;x=0;if(y&1){y=Hc()|0;s=M;k[q>>2]=24244;K2a(q+28|0);K2a(q+16|0);z=q+4|0;w=k[z>>2]|0;if(w){F=q+8|0;E=k[F>>2]|0;if((E|0)==(w|0))X=w;else{A=E;do{E=A+-12|0;k[F>>2]=E;K2a(E);A=k[F>>2]|0}while((A|0)!=(w|0));X=k[z>>2]|0}OBa(X)}V=y;W=s;break}k[q>>2]=24244;K2a(q+28|0);K2a(q+16|0);w=q+4|0;A=k[w>>2]|0;if(!A){xu(f);xu(e);r=c;return}F=q+8|0;v=k[F>>2]|0;if((v|0)==(A|0))Y=A;else{E=v;do{v=E+-12|0;k[F>>2]=v;K2a(v);E=k[F>>2]|0}while((E|0)!=(A|0));Y=k[w>>2]|0}OBa(Y);xu(f);xu(e);r=c;return}else D=7}else D=7}else D=7;while(0);if((D|0)==7){D=Hc()|0;V=D;W=M}xu(f);t=V;u=W;xu(e);Sc(t|0)}function msa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0;c=r;r=r+544|0;d=c+520|0;e=c+264|0;f=c+216|0;g=c+472|0;h=c+508|0;j=c+288|0;l=c+460|0;m=c+496|0;n=c+240|0;o=c+484|0;p=c+192|0;q=c+436|0;s=c+448|0;t=c+168|0;u=c+424|0;v=c+400|0;w=c+120|0;y=c+412|0;z=c+388|0;A=c+96|0;B=c+144|0;C=c+376|0;D=c+72|0;E=c+48|0;F=c+364|0;G=c+24|0;H=c;I=c+312|0;iu(e,0);x=0;xa(588,f|0,7);J=x;x=0;if(J&1){J=Hc()|0;K=J;L=M;xu(e);Sc(K|0)}x=0;J=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;N=x;x=0;a:do if(!(N&1)?(x=0,fb(140,h|0,285310,6),O=x,x=0,!(O&1)):0){k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;soa(d,J+20|0,h);O=k[d>>2]|0;P=k[d+4>>2]|0;Q=O;b:do if((Q|0)!=(P|0)){R=Q;S=O;while(1){T=R+28|0;U=i[T>>0]|0;V=(U&1)==0;x=0;Fa(88,g|0,(V?T+1|0:k[R+36>>2]|0)|0,(V?(U&255)>>>1:k[R+32>>2]|0)|0)|0;U=x;x=0;if(U&1)break;U=k[R+4>>2]|0;if(!U){V=S;while(1){T=k[V+8>>2]|0;if((k[T>>2]|0)==(V|0)){W=T;break}else V=T}}else{V=U;while(1){T=k[V>>2]|0;if(!T){W=V;break}else V=T}}if((W|0)==(P|0))break b;else{R=W;S=W}}S=Hc()|0;R=M;K2a(g);K2a(h);X=S;Y=R;break a}while(0);K2a(h);P=i[g>>0]|0;do if(((P&1)==0?(P&255)>>>1:k[g+4>>2]|0)|0){x=0;O=Ta(482,e|0,285310)|0;Q=x;x=0;if(!(Q&1)?(x=0,xa(587,j|0,g|0),Q=x,x=0,!(Q&1)):0){x=0;Ta(476,O|0,j|0)|0;O=x;x=0;if(O&1){O=Hc()|0;Q=M;xu(j);Z=O;_=Q;break}else{xu(j);$=21;break}}else $=19}else $=21;while(0);c:do if(($|0)==21){x=0;P=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Q=x;x=0;if(!(Q&1)?(x=0,fb(140,m|0,285317,5),Q=x,x=0,!(Q&1)):0){k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;soa(d,P+20|0,m);P=k[d>>2]|0;Q=k[d+4>>2]|0;O=P;d:do if((O|0)!=(Q|0)){R=O;S=P;while(1){V=R+28|0;U=i[V>>0]|0;T=(U&1)==0;x=0;Fa(88,l|0,(T?V+1|0:k[R+36>>2]|0)|0,(T?(U&255)>>>1:k[R+32>>2]|0)|0)|0;U=x;x=0;if(U&1)break;U=k[R+4>>2]|0;if(!U){T=S;while(1){V=k[T+8>>2]|0;if((k[V>>2]|0)==(T|0)){aa=V;break}else T=V}}else{T=U;while(1){V=k[T>>2]|0;if(!V){aa=T;break}else T=V}}if((aa|0)==(Q|0))break d;else{R=aa;S=aa}}S=Hc()|0;R=M;K2a(l);K2a(m);Z=S;_=R;break c}while(0);K2a(m);Q=i[l>>0]|0;do if(((Q&1)==0?(Q&255)>>>1:k[l+4>>2]|0)|0){x=0;P=Ta(482,e|0,285317)|0;O=x;x=0;if(!(O&1)?(x=0,xa(587,n|0,l|0),O=x,x=0,!(O&1)):0){x=0;Ta(476,P|0,n|0)|0;P=x;x=0;if(P&1){P=Hc()|0;O=M;xu(n);ba=P;ca=O;break}else{xu(n);$=38;break}}else $=36}else $=38;while(0);e:do if(($|0)==38){x=0;xa(585,o|0,b|0);Q=x;x=0;if(!(Q&1)){Q=k[o>>2]|0;O=o+4|0;f:do if((Q|0)!=(O|0)){P=d+4|0;R=q+4|0;S=d+4|0;T=u+4|0;U=d+4|0;V=y+4|0;da=d+4|0;ea=Q;g:while(1){fa=ea+20|0;if(k[(k[fa>>2]|0)+84>>2]|0){x=0;xa(588,p|0,0);ga=x;x=0;if(ga&1){$=42;break}ga=(k[fa>>2]|0)+84|0;ha=k[ga>>2]|0;x=0;fb(140,d|0,285127,55);ia=x;x=0;if(ia&1){$=49;break}x=0;pa(57,(ha|0)!=0|0,d|0,917,285183,285227);ha=x;x=0;if(ha&1){$=47;break}K2a(d);ha=iDa(k[ga>>2]|0,4520,5424,0)|0;if(ha){x=0;ga=Ba(k[(k[ha>>2]|0)+16>>2]|0,ha|0)|0;ia=x;x=0;if(ia&1){$=49;break}x=0;fb(140,s|0,285323,3);ia=x;x=0;if(ia&1){$=49;break};k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;soa(d,ga+8|0,s);ga=k[d>>2]|0;ia=k[P>>2]|0;ja=ga;if((ja|0)!=(ia|0)){ka=ja;ja=ga;while(1){ga=ka+28|0;la=i[ga>>0]|0;ma=(la&1)==0;x=0;Fa(88,q|0,(ma?ga+1|0:k[ka+36>>2]|0)|0,(ma?(la&255)>>>1:k[ka+32>>2]|0)|0)|0;la=x;x=0;if(la&1){$=65;break g}la=k[ka+4>>2]|0;if(!la){ma=ja;while(1){ga=k[ma+8>>2]|0;if((k[ga>>2]|0)==(ma|0)){na=ga;break}else ma=ga}}else{ma=la;while(1){ga=k[ma>>2]|0;if(!ga){na=ma;break}else ma=ga}}if((na|0)==(ia|0))break;else{ka=na;ja=na}}}K2a(s);ja=i[q>>0]|0;if(((ja&1)==0?(ja&255)>>>1:k[R>>2]|0)|0){x=0;ja=Ta(482,p|0,285327)|0;ka=x;x=0;if(ka&1){$=66;break}x=0;xa(587,t|0,q|0);ka=x;x=0;if(ka&1){$=66;break}x=0;Ta(476,ja|0,t|0)|0;ja=x;x=0;if(ja&1){$=67;break}xu(t)}x=0;ja=Ba(k[(k[ha>>2]|0)+16>>2]|0,ha|0)|0;ka=x;x=0;if(ka&1){$=66;break}x=0;fb(140,v|0,285310,6);ka=x;x=0;if(ka&1){$=66;break};k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;soa(d,ja+8|0,v);ja=k[d>>2]|0;ka=k[S>>2]|0;ia=ja;if((ia|0)!=(ka|0)){ma=ia;ia=ja;while(1){ja=ma+28|0;la=i[ja>>0]|0;ga=(la&1)==0;x=0;Fa(88,u|0,(ga?ja+1|0:k[ma+36>>2]|0)|0,(ga?(la&255)>>>1:k[ma+32>>2]|0)|0)|0;la=x;x=0;if(la&1){$=82;break g}la=k[ma+4>>2]|0;if(!la){ga=ia;while(1){ja=k[ga+8>>2]|0;if((k[ja>>2]|0)==(ga|0)){oa=ja;break}else ga=ja}}else{ga=la;while(1){ja=k[ga>>2]|0;if(!ja){oa=ga;break}else ga=ja}}if((oa|0)==(ka|0))break;else{ma=oa;ia=oa}}}K2a(v);ia=i[u>>0]|0;if(((ia&1)==0?(ia&255)>>>1:k[T>>2]|0)|0){x=0;ia=Ta(482,p|0,285310)|0;ma=x;x=0;if(ma&1){$=83;break}x=0;xa(587,w|0,u|0);ma=x;x=0;if(ma&1){$=83;break}x=0;Ta(476,ia|0,w|0)|0;ia=x;x=0;if(ia&1){$=84;break}xu(w)}x=0;ia=Ba(k[(k[ha>>2]|0)+16>>2]|0,ha|0)|0;ma=x;x=0;if(ma&1){$=83;break}x=0;fb(140,z|0,296966,6);ma=x;x=0;if(ma&1){$=83;break};k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;soa(d,ia+8|0,z);ia=k[d>>2]|0;ma=k[U>>2]|0;ka=ia;if((ka|0)!=(ma|0)){ga=ka;ka=ia;while(1){ia=ga+28|0;la=i[ia>>0]|0;ja=(la&1)==0;x=0;Fa(88,y|0,(ja?ia+1|0:k[ga+36>>2]|0)|0,(ja?(la&255)>>>1:k[ga+32>>2]|0)|0)|0;la=x;x=0;if(la&1){$=99;break g}la=k[ga+4>>2]|0;if(!la){ja=ka;while(1){ia=k[ja+8>>2]|0;if((k[ia>>2]|0)==(ja|0)){qa=ia;break}else ja=ia}}else{ja=la;while(1){ia=k[ja>>2]|0;if(!ia){qa=ja;break}else ja=ia}}if((qa|0)==(ma|0))break;else{ga=qa;ka=qa}}}K2a(z);ka=i[y>>0]|0;if(((ka&1)==0?(ka&255)>>>1:k[V>>2]|0)|0){x=0;ka=Ta(482,p|0,296966)|0;ga=x;x=0;if(ga&1){$=100;break}x=0;xa(587,A|0,y|0);ga=x;x=0;if(ga&1){$=100;break}x=0;Ta(476,ka|0,A|0)|0;ka=x;x=0;if(ka&1){$=101;break}xu(A)}x=0;xa(588,B|0,7);ka=x;x=0;if(ka&1){$=100;break}x=0;ka=Ba(k[(k[ha>>2]|0)+16>>2]|0,ha|0)|0;ga=x;x=0;if(ga&1){$=108;break}x=0;fb(140,C|0,286453,5);ga=x;x=0;if(ga&1){$=108;break}BY(d,ka+8|0,C);ka=k[d>>2]|0;ga=k[da>>2]|0;K2a(C);ma=ka;if((ma|0)!=(ga|0)){ja=ma;ma=ka;while(1){x=0;ka=Ta(475,B|0,ja+40|0)|0;la=x;x=0;if(la&1){$=107;break g}x=0;xa(587,D|0,ja+28|0);la=x;x=0;if(la&1){$=107;break g}x=0;Ta(476,ka|0,D|0)|0;ka=x;x=0;if(ka&1){$=117;break g}xu(D);ka=ma;la=k[ka+4>>2]|0;if(!la){ia=ka;while(1){ka=k[ia+8>>2]|0;if((k[ka>>2]|0)==(ia|0)){ra=ka;break}else ia=ka}}else{ia=la;while(1){ka=k[ia>>2]|0;if(!ka){ra=ia;break}else ia=ka}}if((ra|0)==(ga|0))break;else{ja=ra;ma=ra}}}x=0;ma=Ba(612,B|0)|0;ja=x;x=0;if(ja&1){$=108;break}if(!ma){x=0;ma=Ta(482,p|0,285335)|0;ja=x;x=0;if(ja&1){$=108;break}x=0;xa(589,E|0,B|0);ja=x;x=0;if(ja&1){$=108;break}x=0;Ta(476,ma|0,E|0)|0;ma=x;x=0;if(ma&1){$=123;break}xu(E)}x=0;ma=Ba(612,p|0)|0;ja=x;x=0;if(ja&1){$=108;break}if(!ma){x=0;xa(586,F|0,k[fa>>2]|0);ma=x;x=0;if(ma&1){$=108;break}x=0;ma=Ta(475,f|0,F|0)|0;ja=x;x=0;if(ja&1){$=131;break}x=0;xa(589,G|0,p|0);ja=x;x=0;if(ja&1){$=131;break}x=0;Ta(476,ma|0,G|0)|0;ma=x;x=0;if(ma&1){$=132;break}xu(G);K2a(F)}xu(B);K2a(y);K2a(u);K2a(q)}xu(p)}ma=k[ea+4>>2]|0;if(!ma){ja=ea;while(1){ga=k[ja+8>>2]|0;if((k[ga>>2]|0)==(ja|0)){sa=ga;break}else ja=ga}}else{ja=ma;while(1){fa=k[ja>>2]|0;if(!fa){sa=ja;break}else ja=fa}}if((sa|0)==(O|0))break f;else ea=sa}switch($|0){case 42:{ta=Hc()|0;ua=M;break}case 47:{ea=Hc()|0;da=M;K2a(d);wa=da;ya=ea;$=50;break}case 49:{ea=Hc()|0;wa=M;ya=ea;$=50;break}case 65:{ea=Hc()|0;da=M;K2a(q);K2a(s);za=ea;Aa=da;$=145;break}case 66:{Ca=Hc()|0;Da=M;$=138;break}case 67:{da=Hc()|0;ea=M;xu(t);Ca=da;Da=ea;$=138;break}case 82:{ea=Hc()|0;da=M;K2a(u);K2a(v);Ca=ea;Da=da;$=138;break}case 83:{Ea=Hc()|0;Ga=M;$=137;break}case 84:{da=Hc()|0;ea=M;xu(w);Ea=da;Ga=ea;$=137;break}case 99:{ea=Hc()|0;da=M;K2a(y);K2a(z);Ea=ea;Ga=da;$=137;break}case 100:{Ha=Hc()|0;Ia=M;$=136;break}case 101:{da=Hc()|0;ea=M;xu(A);Ha=da;Ia=ea;$=136;break}case 107:{Ja=Hc()|0;Ka=M;$=109;break}case 108:{Ja=Hc()|0;Ka=M;$=109;break}case 117:{ea=Hc()|0;da=M;xu(D);La=ea;Ma=da;$=135;break}case 123:{da=Hc()|0;ea=M;xu(E);La=da;Ma=ea;$=135;break}case 131:{Na=Hc()|0;Oa=M;$=133;break}case 132:{ea=Hc()|0;da=M;xu(G);Na=ea;Oa=da;$=133;break}}if(($|0)==50){za=ya;Aa=wa;$=145}else if(($|0)==109){La=Ja;Ma=Ka;$=135}else if(($|0)==133){K2a(F);La=Na;Ma=Oa;$=135}if(($|0)==135){xu(B);Ha=La;Ia=Ma;$=136}if(($|0)==136){K2a(y);Ea=Ha;Ga=Ia;$=137}if(($|0)==137){K2a(u);Ca=Ea;Da=Ga;$=138}if(($|0)==138){K2a(q);za=Ca;Aa=Da;$=145}if(($|0)==145){xu(p);ta=za;ua=Aa}Yg(o,k[O>>2]|0);ba=ta;ca=ua;break e}while(0);Yg(o,k[O>>2]|0);x=0;Q=Ta(482,e|0,285119)|0;da=x;x=0;if(!(da&1)?(x=0,xa(589,H|0,f|0),da=x,x=0,!(da&1)):0){x=0;Ta(476,Q|0,H|0)|0;Q=x;x=0;if(Q&1){Q=Hc()|0;da=M;xu(H);ba=Q;ca=da;break}xu(H);x=0;va(1523,I|0);da=x;x=0;if(!(da&1)){x=0;fb(60,a|0,I|0,e|0);da=x;x=0;if(da&1){da=Hc()|0;Q=M;k[I>>2]=24244;K2a(I+28|0);K2a(I+16|0);ea=I+4|0;V=k[ea>>2]|0;if(V){U=I+8|0;T=k[U>>2]|0;if((T|0)==(V|0))Pa=V;else{S=T;do{T=S+-12|0;k[U>>2]=T;K2a(T);S=k[U>>2]|0}while((S|0)!=(V|0));Pa=k[ea>>2]|0}OBa(Pa)}ba=da;ca=Q;break}k[I>>2]=24244;K2a(I+28|0);K2a(I+16|0);V=I+4|0;S=k[V>>2]|0;if(!S){K2a(l);K2a(g);xu(f);xu(e);r=c;return}U=I+8|0;O=k[U>>2]|0;if((O|0)==(S|0))Qa=S;else{T=O;do{O=T+-12|0;k[U>>2]=O;K2a(O);T=k[U>>2]|0}while((T|0)!=(S|0));Qa=k[V>>2]|0}OBa(Qa);K2a(l);K2a(g);xu(f);xu(e);r=c;return}else $=36}else $=36}else $=36}while(0);if(($|0)==36){S=Hc()|0;ba=S;ca=M}K2a(l);Z=ba;_=ca}else $=19}while(0);if(($|0)==19){S=Hc()|0;Z=S;_=M}K2a(g);X=Z;Y=_}else $=17;while(0);if(($|0)==17){$=Hc()|0;X=$;Y=M}xu(f);K=X;L=Y;xu(e);Sc(K|0)}function nsa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0;c=r;r=r+976|0;d=c+952|0;e=c+552|0;f=c+928|0;g=c+944|0;h=c+528|0;j=c+480|0;l=c+456|0;m=c+408|0;n=c+360|0;o=c+312|0;p=c+896|0;q=c+884|0;s=c+264|0;t=c+872|0;u=c+504|0;v=c+240|0;w=c+920|0;y=c+784|0;z=c+768|0;A=c+216|0;B=c+756|0;C=c+744|0;D=c+912|0;E=c+656|0;F=c+640|0;G=c+432|0;H=c+192|0;I=c+168|0;J=c+384|0;K=c+144|0;L=c+120|0;N=c+96|0;O=c+336|0;P=c+632|0;Q=c+620|0;R=c+288|0;S=c+72|0;T=c+48|0;U=c+608|0;V=c+600|0;W=c+24|0;X=c;Y=c+576|0;iu(e,6);x=0;xa(585,f|0,b|0);Z=x;x=0;a:do if(!(Z&1)){_=k[f>>2]|0;$=f+4|0;b:do if((_|0)!=($|0)){aa=b+72|0;ba=g+4|0;ca=t+4|0;da=p+4|0;ea=q+4|0;fa=_;while(1){ga=k[fa+20>>2]|0;ha=k[fa+24>>2]|0;ia=(ha|0)==0;if(!ia)h0a(ha);x=0;xa(740,g|0,ga|0);ja=x;x=0;if(ja&1){ka=ha;la=ia;ma=61;break}x=0;xa(588,h|0,0);ja=x;x=0;if(ja&1){na=ha;oa=ia;ma=62;break}x=0;ja=Ta(482,h|0,293862)|0;qa=x;x=0;if(qa&1){ra=ha;sa=ia;ma=63;break}x=0;xa(593,j|0,293508);qa=x;x=0;if(qa&1){ra=ha;sa=ia;ma=63;break}x=0;Ta(476,ja|0,j|0)|0;ja=x;x=0;if(ja&1){ta=ha;ua=ia;ma=65;break}xu(j);x=0;ja=Ta(482,h|0,285342)|0;qa=x;x=0;if(qa&1){ra=ha;sa=ia;ma=63;break}qa=ga+84|0;wa=k[qa>>2]|0;x=0;fb(140,d|0,285127,55);ya=x;x=0;if(ya&1){ra=ha;sa=ia;ma=63;break}x=0;pa(57,(wa|0)!=0|0,d|0,917,285183,285227);wa=x;x=0;if(wa&1){za=ha;Aa=ia;ma=18;break}K2a(d);x=0;xa(587,l|0,k[(k[qa>>2]|0)+24>>2]|0);qa=x;x=0;if(qa&1){ra=ha;sa=ia;ma=63;break}x=0;Ta(476,ja|0,l|0)|0;ja=x;x=0;if(ja&1){Ca=ha;Da=ia;ma=66;break}xu(l);x=0;ja=Ta(482,h|0,293441)|0;qa=x;x=0;if(qa&1){ra=ha;sa=ia;ma=63;break}x=0;xa(817,m|0,(i[ga+80>>0]|0)!=0|0);qa=x;x=0;if(qa&1){ra=ha;sa=ia;ma=63;break}x=0;Ta(476,ja|0,m|0)|0;ja=x;x=0;if(ja&1){Ea=ha;Fa=ia;ma=67;break}xu(m);x=0;ja=Ta(482,h|0,293587)|0;qa=x;x=0;if(qa&1){ra=ha;sa=ia;ma=63;break}x=0;xa(817,n|0,(i[ga+81>>0]|0)!=0|0);ga=x;x=0;if(ga&1){ra=ha;sa=ia;ma=63;break}x=0;Ta(476,ja|0,n|0)|0;ja=x;x=0;if(ja&1){Ga=ha;Ha=ia;ma=68;break}xu(n);x=0;ja=Ta(482,h|0,285347)|0;ga=x;x=0;if(ga&1){ra=ha;sa=ia;ma=63;break}x=0;xa(749,p|0,k[g>>2]|0);ga=x;x=0;if(ga&1){ra=ha;sa=ia;ma=63;break}x=0;fb(372,q|0,k[g>>2]|0,(i[aa>>0]|0)!=0|0);ga=x;x=0;if(ga&1){Ia=ha;Ja=ia;ma=69;break}x=0;fb(373,o|0,p|0,q|0);ga=x;x=0;if(ga&1){Ka=ha;La=ia;ma=70;break}x=0;Ta(476,ja|0,o|0)|0;ja=x;x=0;if(ja&1){Ma=ha;Na=ia;ma=71;break}xu(o);ja=k[q>>2]|0;if(ja){ga=k[ea>>2]|0;if((ga|0)==(ja|0))Oa=ja;else{qa=ga;do{ga=qa+-12|0;k[ea>>2]=ga;K2a(ga);qa=k[ea>>2]|0}while((qa|0)!=(ja|0));Oa=k[q>>2]|0}OBa(Oa)}ja=k[p>>2]|0;if(ja){qa=k[da>>2]|0;if((qa|0)==(ja|0))Pa=ja;else{ga=qa;do{qa=ga+-12|0;k[da>>2]=qa;K2a(qa);ga=k[da>>2]|0}while((ga|0)!=(ja|0));Pa=k[p>>2]|0}OBa(Pa)}x=0;ja=Ta(482,h|0,285354)|0;ga=x;x=0;if(ga&1){ra=ha;sa=ia;ma=63;break}ga=k[g>>2]|0;x=0;fb(374,t|0,ga|0,(i[aa>>0]|0)!=0|0);qa=x;x=0;if(qa&1){ra=ha;sa=ia;ma=63;break}x=0;fb(373,s|0,ga+60|0,t|0);ga=x;x=0;if(ga&1){Qa=ha;Ra=ia;ma=82;break}x=0;Ta(476,ja|0,s|0)|0;ja=x;x=0;if(ja&1){Sa=ha;Ua=ia;ma=83;break}xu(s);ja=k[t>>2]|0;if(ja){ga=k[ca>>2]|0;if((ga|0)==(ja|0))Va=ja;else{qa=ga;do{ga=qa+-12|0;k[ca>>2]=ga;K2a(ga);qa=k[ca>>2]|0}while((qa|0)!=(ja|0));Va=k[t>>2]|0}OBa(Va)}x=0;Ta(485,e|0,h|0)|0;ja=x;x=0;if(ja&1){ra=ha;sa=ia;ma=63;break}xu(h);ja=k[ba>>2]|0;if(ja)j0a(ja);if(!ia)j0a(ha);ja=k[fa+4>>2]|0;if(!ja){qa=fa;while(1){ga=k[qa+8>>2]|0;if((k[ga>>2]|0)==(qa|0)){Wa=ga;break}else qa=ga}}else{qa=ja;while(1){ha=k[qa>>2]|0;if(!ha){Wa=qa;break}else qa=ha}}if((Wa|0)==($|0))break b;else fa=Wa}switch(ma|0){case 18:{fa=Hc()|0;aa=M;K2a(d);Xa=Aa;Ya=za;Za=aa;_a=fa;ma=64;break}case 61:{$a=Hc()|0;ab=M;bb=ka;cb=la;break}case 62:{db=Hc()|0;eb=M;gb=oa;hb=na;ma=90;break}case 63:{fa=Hc()|0;Xa=sa;Ya=ra;Za=M;_a=fa;ma=64;break}case 65:{fa=Hc()|0;aa=M;xu(j);ib=fa;jb=aa;kb=ua;lb=ta;ma=89;break}case 66:{aa=Hc()|0;fa=M;xu(l);ib=aa;jb=fa;kb=Da;lb=Ca;ma=89;break}case 67:{fa=Hc()|0;aa=M;xu(m);ib=fa;jb=aa;kb=Fa;lb=Ea;ma=89;break}case 68:{aa=Hc()|0;fa=M;xu(n);ib=aa;jb=fa;kb=Ha;lb=Ga;ma=89;break}case 69:{mb=Hc()|0;nb=M;ob=Ja;pb=Ia;ma=77;break}case 70:{qb=Hc()|0;rb=M;sb=La;tb=Ka;ma=72;break}case 71:{fa=Hc()|0;aa=M;xu(o);qb=fa;rb=aa;sb=Na;tb=Ma;ma=72;break}case 82:{ub=Hc()|0;vb=M;wb=Ra;xb=Qa;ma=84;break}case 83:{aa=Hc()|0;fa=M;xu(s);ub=aa;vb=fa;wb=Ua;xb=Sa;ma=84;break}}if((ma|0)==64){ib=_a;jb=Za;kb=Xa;lb=Ya;ma=89}else if((ma|0)==72){fa=k[q>>2]|0;if(!fa){mb=qb;nb=rb;ob=sb;pb=tb;ma=77}else{aa=k[ea>>2]|0;if((aa|0)==(fa|0))yb=fa;else{qa=aa;do{aa=qa+-12|0;k[ea>>2]=aa;K2a(aa);qa=k[ea>>2]|0}while((qa|0)!=(fa|0));yb=k[q>>2]|0}OBa(yb);mb=qb;nb=rb;ob=sb;pb=tb;ma=77}}else if((ma|0)==84){fa=k[t>>2]|0;if(!fa){ib=ub;jb=vb;kb=wb;lb=xb;ma=89}else{qa=k[ca>>2]|0;if((qa|0)==(fa|0))zb=fa;else{ea=qa;do{qa=ea+-12|0;k[ca>>2]=qa;K2a(qa);ea=k[ca>>2]|0}while((ea|0)!=(fa|0));zb=k[t>>2]|0}OBa(zb);ib=ub;jb=vb;kb=wb;lb=xb;ma=89}}if((ma|0)==77){fa=k[p>>2]|0;if(!fa){ib=mb;jb=nb;kb=ob;lb=pb;ma=89}else{ea=k[da>>2]|0;if((ea|0)==(fa|0))Ab=fa;else{ca=ea;do{ea=ca+-12|0;k[da>>2]=ea;K2a(ea);ca=k[da>>2]|0}while((ca|0)!=(fa|0));Ab=k[p>>2]|0}OBa(Ab);ib=mb;jb=nb;kb=ob;lb=pb;ma=89}}if((ma|0)==89){xu(h);db=ib;eb=jb;gb=kb;hb=lb;ma=90}if((ma|0)==90){fa=k[ba>>2]|0;if(!fa){$a=db;ab=eb;bb=hb;cb=gb}else{j0a(fa);$a=db;ab=eb;bb=hb;cb=gb}}if(!cb)j0a(bb);Yg(f,k[$>>2]|0);Bb=$a;Cb=ab;xu(e);Sc(Bb|0)}while(0);Yg(f,k[$>>2]|0);x=0;_=Ba(598,b|0)|0;fa=x;x=0;if(!(fa&1)){c:do if(_){x=0;xa(588,u|0,0);fa=x;x=0;if(fa&1){ma=6;break a}x=0;fa=Ta(482,u|0,293862)|0;ca=x;x=0;do if(!(ca&1)?(x=0,xa(593,v|0,285362),da=x,x=0,!(da&1)):0){x=0;Ta(476,fa|0,v|0)|0;da=x;x=0;if(da&1){da=Hc()|0;ea=M;xu(v);Db=da;Eb=ea;break}xu(v);x=0;ea=Ba(598,b|0)|0;da=x;x=0;if(!(da&1)?(x=0,fb(143,y|0,ea|0,1),ea=x,x=0,!(ea&1)):0){x=0;xa(740,w|0,y|0);ea=x;x=0;if(ea&1){ea=Hc()|0;da=M;Dg(y);Db=ea;Eb=da;break}Dg(y);da=k[w>>2]|0;x=0;fb(140,z|0,329672,0);ea=x;x=0;d:do if(!(ea&1)){x=0;pa(57,(da|0)!=0|0,z|0,71,285071,285374);qa=x;x=0;if(qa&1){qa=Hc()|0;aa=M;K2a(z);Fb=qa;Gb=aa;break}K2a(z);x=0;aa=Ta(482,u|0,285347)|0;qa=x;x=0;if(!(qa&1)?(x=0,xa(749,B|0,k[w>>2]|0),qa=x,x=0,!(qa&1)):0){x=0;fb(372,C|0,k[w>>2]|0,(i[b+72>>0]|0)!=0|0);qa=x;x=0;do if(qa&1){ja=Hc()|0;Hb=ja;Ib=M}else{x=0;fb(373,A|0,B|0,C|0);ja=x;x=0;do if(ja&1){ha=Hc()|0;Jb=ha;Kb=M}else{x=0;Ta(476,aa|0,A|0)|0;ha=x;x=0;if(ha&1){ha=Hc()|0;ia=M;xu(A);Jb=ha;Kb=ia;break}xu(A);ia=k[C>>2]|0;if(ia){ha=C+4|0;ga=k[ha>>2]|0;if((ga|0)==(ia|0))Lb=ia;else{wa=ga;do{ga=wa+-12|0;k[ha>>2]=ga;K2a(ga);wa=k[ha>>2]|0}while((wa|0)!=(ia|0));Lb=k[C>>2]|0}OBa(Lb)}ia=k[B>>2]|0;if(ia){wa=B+4|0;ha=k[wa>>2]|0;if((ha|0)==(ia|0))Mb=ia;else{ga=ha;do{ha=ga+-12|0;k[wa>>2]=ha;K2a(ha);ga=k[wa>>2]|0}while((ga|0)!=(ia|0));Mb=k[B>>2]|0}OBa(Mb)}x=0;Ta(485,e|0,u|0)|0;ia=x;x=0;if(ia&1){ma=127;break d}ia=k[w+4>>2]|0;if(ia)j0a(ia);xu(u);break c}while(0);ja=k[C>>2]|0;if(!ja){Hb=Jb;Ib=Kb;break}ia=C+4|0;ga=k[ia>>2]|0;if((ga|0)==(ja|0))Nb=ja;else{wa=ga;do{ga=wa+-12|0;k[ia>>2]=ga;K2a(ga);wa=k[ia>>2]|0}while((wa|0)!=(ja|0));Nb=k[C>>2]|0}OBa(Nb);Hb=Jb;Ib=Kb}while(0);aa=k[B>>2]|0;if(!aa){Fb=Hb;Gb=Ib;break}qa=B+4|0;ja=k[qa>>2]|0;if((ja|0)==(aa|0))Ob=aa;else{wa=ja;do{ja=wa+-12|0;k[qa>>2]=ja;K2a(ja);wa=k[qa>>2]|0}while((wa|0)!=(aa|0));Ob=k[B>>2]|0}OBa(Ob);Fb=Hb;Gb=Ib}else ma=127}else ma=127;while(0);if((ma|0)==127){da=Hc()|0;Fb=da;Gb=M}da=k[w+4>>2]|0;if(!da){Db=Fb;Eb=Gb}else{j0a(da);Db=Fb;Eb=Gb}}else ma=124}else ma=124;while(0);if((ma|0)==124){fa=Hc()|0;Db=fa;Eb=M}xu(u);Bb=Db;Cb=Eb;xu(e);Sc(Bb|0)}while(0);x=0;_=Ba(559,b|0)|0;$=x;x=0;if(!($&1)){e:do if(_){x=0;$=Ba(559,b|0)|0;fa=x;x=0;if(fa&1){ma=6;break a}x=0;fb(143,E|0,$|0,1);$=x;x=0;if($&1){ma=6;break a}x=0;xa(740,D|0,E|0);$=x;x=0;if($&1){$=Hc()|0;fa=M;Dg(E);Bb=$;Cb=fa;xu(e);Sc(Bb|0)}Dg(E);fa=k[D>>2]|0;x=0;fb(140,F|0,329672,0);$=x;x=0;do if(!($&1)){x=0;pa(57,(fa|0)!=0|0,F|0,81,285071,285374);ca=x;x=0;if(ca&1){ca=Hc()|0;ba=M;K2a(F);Pb=ca;Qb=ba;break}K2a(F);x=0;xa(588,G|0,0);ba=x;x=0;if(!(ba&1)){x=0;ba=Ta(482,G|0,293862)|0;ca=x;x=0;do if(!(ca&1)?(x=0,xa(593,H|0,285477),da=x,x=0,!(da&1)):0){x=0;Ta(476,ba|0,H|0)|0;da=x;x=0;if(da&1){da=Hc()|0;ea=M;xu(H);Rb=da;Sb=ea;break}xu(H);x=0;ea=Ta(482,G|0,293587)|0;da=x;x=0;if(!(da&1)){x=0;xa(817,I|0,(i[(k[D>>2]|0)+81>>0]|0)!=0|0);da=x;x=0;if(da&1){ma=166;break}x=0;Ta(476,ea|0,I|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;da=M;xu(I);Rb=ea;Sb=da;break}xu(I);x=0;Ta(485,e|0,G|0)|0;da=x;x=0;if(da&1){ma=166;break}xu(G);da=k[D+4>>2]|0;if(da)j0a(da);break e}else ma=166}else ma=166;while(0);if((ma|0)==166){ba=Hc()|0;Rb=ba;Sb=M}xu(G);Pb=Rb;Qb=Sb}else ma=164}else ma=164;while(0);if((ma|0)==164){fa=Hc()|0;Pb=fa;Qb=M}fa=k[D+4>>2]|0;if(!fa){Bb=Pb;Cb=Qb;xu(e);Sc(Bb|0)}j0a(fa);Bb=Pb;Cb=Qb;xu(e);Sc(Bb|0)}while(0);x=0;_=Ba(613,b|0)|0;fa=x;x=0;if(!(fa&1)){fa=k[_>>2]|0;$=k[_+4>>2]|0;f:do if((fa|0)!=($|0)){_=P+4|0;ba=V+4|0;ca=fa;g:while(1){x=0;xa(588,J|0,0);da=x;x=0;if(da&1){ma=5;break}x=0;da=Ta(482,J|0,293862)|0;ea=x;x=0;if(ea&1){ma=189;break}x=0;xa(593,K|0,293489);ea=x;x=0;if(ea&1){ma=189;break}x=0;Ta(476,da|0,K|0)|0;da=x;x=0;if(da&1){ma=190;break}xu(K);x=0;da=Ta(482,J|0,285342)|0;ea=x;x=0;if(ea&1){ma=189;break}x=0;xa(587,L|0,k[(k[ca>>2]|0)+24>>2]|0);ea=x;x=0;if(ea&1){ma=189;break}x=0;Ta(476,da|0,L|0)|0;da=x;x=0;if(da&1){ma=191;break}xu(L);x=0;da=Ta(482,J|0,293413)|0;ea=x;x=0;if(ea&1){ma=189;break}x=0;xa(817,N|0,(i[(k[ca>>2]|0)+76>>0]|0)!=0|0);ea=x;x=0;if(ea&1){ma=189;break}x=0;Ta(476,da|0,N|0)|0;da=x;x=0;if(da&1){ma=192;break}xu(N);x=0;xa(588,O|0,6);da=x;x=0;if(da&1){ma=189;break}da=k[(k[ca>>2]|0)+52>>2]|0;ea=k[da+24>>2]|0;aa=k[da+28>>2]|0;if((ea|0)!=(aa|0)){da=ea;do{ea=k[da>>2]|0;x=0;wa=Ba(k[(k[ea>>2]|0)+16>>2]|0,ea|0)|0;ea=x;x=0;if(ea&1){ma=193;break g}ea=k[wa+4>>2]|0;x=0;fb(k[(k[ea>>2]|0)+96>>2]|0,P|0,ea|0,0);ea=x;x=0;if(ea&1){ma=193;break g}ea=k[P>>2]|0;x=0;fb(140,Q|0,329672,0);wa=x;x=0;if(wa&1){ma=219;break g}x=0;pa(57,(ea|0)!=0|0,Q|0,96,285071,285374);ea=x;x=0;if(ea&1){ma=220;break g}K2a(Q);ea=k[_>>2]|0;if(ea)j0a(ea);x=0;xa(588,R|0,0);ea=x;x=0;if(ea&1){ma=193;break g}x=0;ea=Ta(482,R|0,285342)|0;wa=x;x=0;if(wa&1){ma=223;break g}x=0;xa(587,S|0,k[(k[da>>2]|0)+24>>2]|0);wa=x;x=0;if(wa&1){ma=223;break g}x=0;Ta(476,ea|0,S|0)|0;ea=x;x=0;if(ea&1){ma=224;break g}xu(S);x=0;ea=Ta(482,R|0,293862)|0;wa=x;x=0;if(wa&1){ma=223;break g}wa=k[da>>2]|0;x=0;qa=Ba(k[(k[wa>>2]|0)+16>>2]|0,wa|0)|0;wa=x;x=0;if(wa&1){ma=223;break g}wa=k[qa+4>>2]|0;x=0;fb(k[(k[wa>>2]|0)+96>>2]|0,V|0,wa|0,0);wa=x;x=0;if(wa&1){ma=223;break g}wa=k[V>>2]|0;x=0;fb(k[(k[wa>>2]|0)+80>>2]|0,U|0,wa|0,0);wa=x;x=0;if(wa&1){ma=225;break g}x=0;xa(587,T|0,U|0);wa=x;x=0;if(wa&1){ma=226;break g}x=0;Ta(476,ea|0,T|0)|0;ea=x;x=0;if(ea&1){ma=227;break g}xu(T);K2a(U);ea=k[ba>>2]|0;if(ea)j0a(ea);x=0;ea=Ta(482,R|0,293524)|0;wa=x;x=0;if(wa&1){ma=223;break g}x=0;xa(817,W|0,(i[(k[da>>2]|0)+57>>0]|0)!=0|0);wa=x;x=0;if(wa&1){ma=223;break g}x=0;Ta(476,ea|0,W|0)|0;ea=x;x=0;if(ea&1){ma=231;break g}xu(W);x=0;Ta(485,O|0,R|0)|0;ea=x;x=0;if(ea&1){ma=223;break g}xu(R);da=da+8|0}while((da|0)!=(aa|0))}x=0;aa=Ta(482,J|0,285347)|0;da=x;x=0;if(da&1){ma=194;break}x=0;xa(589,X|0,O|0);da=x;x=0;if(da&1){ma=194;break}x=0;Ta(476,aa|0,X|0)|0;aa=x;x=0;if(aa&1){ma=237;break}xu(X);x=0;Ta(485,e|0,J|0)|0;aa=x;x=0;if(aa&1){ma=194;break}xu(O);xu(J);ca=ca+4|0;if((ca|0)==($|0))break f}switch(ma|0){case 5:{Tb=Hc()|0;Ub=M;break a;break}case 189:{Vb=Hc()|0;Wb=M;break}case 190:{ca=Hc()|0;aa=M;xu(K);Vb=ca;Wb=aa;break}case 191:{aa=Hc()|0;ca=M;xu(L);Vb=aa;Wb=ca;break}case 192:{ca=Hc()|0;aa=M;xu(N);Vb=ca;Wb=aa;break}case 193:{Xb=Hc()|0;Yb=M;ma=195;break}case 194:{Xb=Hc()|0;Yb=M;ma=195;break}case 219:{Zb=Hc()|0;_b=M;ma=221;break}case 220:{aa=Hc()|0;ca=M;K2a(Q);Zb=aa;_b=ca;ma=221;break}case 223:{$b=Hc()|0;ac=M;ma=232;break}case 224:{ca=Hc()|0;aa=M;xu(S);$b=ca;ac=aa;ma=232;break}case 225:{bc=Hc()|0;cc=M;ma=229;break}case 226:{dc=Hc()|0;ec=M;ma=228;break}case 227:{aa=Hc()|0;ca=M;xu(T);dc=aa;ec=ca;ma=228;break}case 231:{ca=Hc()|0;aa=M;xu(W);$b=ca;ac=aa;ma=232;break}case 237:{aa=Hc()|0;ca=M;xu(X);fc=aa;gc=ca;ma=238;break}}if((ma|0)==195){fc=Xb;gc=Yb;ma=238}else if((ma|0)==221){ca=k[_>>2]|0;if(!ca){fc=Zb;gc=_b;ma=238}else{j0a(ca);fc=Zb;gc=_b;ma=238}}else if((ma|0)==228){K2a(U);bc=dc;cc=ec;ma=229}if((ma|0)==229){ca=k[ba>>2]|0;if(!ca){$b=bc;ac=cc;ma=232}else{j0a(ca);$b=bc;ac=cc;ma=232}}if((ma|0)==232){xu(R);fc=$b;gc=ac;ma=238}if((ma|0)==238){xu(O);Vb=fc;Wb=gc}xu(J);Bb=Vb;Cb=Wb;xu(e);Sc(Bb|0)}while(0);x=0;va(1450,Y|0);$=x;x=0;if(!($&1)){x=0;fb(59,a|0,Y|0,e|0);$=x;x=0;if(!($&1)){k[Y>>2]=24224;K2a(Y+4|0);xu(e);r=c;return}$=Hc()|0;fa=M;k[Y>>2]=24224;K2a(Y+4|0);Bb=$;Cb=fa;xu(e);Sc(Bb|0)}else ma=6}else ma=6}else ma=6}else ma=6}else ma=6;while(0);if((ma|0)==6){ma=Hc()|0;Tb=ma;Ub=M}Bb=Tb;Cb=Ub;xu(e);Sc(Bb|0)}function osa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;soa(e,b,c);c=k[e>>2]|0;b=k[e+4>>2]|0;e=c;if((e|0)==(b|0)){r=d;return}else{f=c;g=e}while(1){e=g+28|0;c=i[e>>0]|0;h=(c&1)==0;x=0;Fa(88,a|0,(h?e+1|0:k[g+36>>2]|0)|0,(h?(c&255)>>>1:k[g+32>>2]|0)|0)|0;c=x;x=0;if(c&1){j=3;break}c=k[g+4>>2]|0;if(!c){h=f;while(1){e=k[h+8>>2]|0;if((k[e>>2]|0)==(h|0)){l=e;break}else h=e}}else{h=c;while(1){e=k[h>>2]|0;if(!e){l=h;break}else h=e}}if((l|0)==(b|0)){j=2;break}else{f=l;g=l}}if((j|0)==2){r=d;return}else if((j|0)==3){j=Hc()|0;K2a(a);Sc(j|0)}}function psa(){k[11095]=0;k[11096]=0;k[11097]=0;return}function qsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+96|0;e=d+72|0;f=d+48|0;g=d+24|0;h=d;iu(a,6);i=b+4|0;j=k[i>>2]|0;l=k[b>>2]|0;m=k[c+4>>2]|0;n=k[c>>2]|0;x=0;fb(140,e|0,285486,42);o=x;x=0;do if(o&1){p=Hc()|0;q=p;s=M}else{x=0;pa(57,(j-l|0)==(m-n|0)|0,e|0,37,285071,285529);p=x;x=0;if(p&1){p=Hc()|0;t=M;K2a(e);u=t;v=p;xu(a);Sc(v|0)}K2a(e);if((k[i>>2]|0)==(k[b>>2]|0)){r=d;return}p=0;while(1){x=0;xa(588,f|0,0);t=x;x=0;if(t&1){w=5;break}x=0;t=Ta(482,f|0,285342)|0;y=x;x=0;if(y&1){w=18;break}x=0;xa(587,g|0,(k[b>>2]|0)+(p*12|0)|0);y=x;x=0;if(y&1){w=18;break}x=0;Ta(476,t|0,g|0)|0;t=x;x=0;if(t&1){w=19;break}xu(g);x=0;t=Ta(482,f|0,293862)|0;y=x;x=0;if(y&1){w=18;break}x=0;xa(587,h|0,(k[c>>2]|0)+(p*12|0)|0);y=x;x=0;if(y&1){w=18;break}x=0;Ta(476,t|0,h|0)|0;t=x;x=0;if(t&1){w=20;break}xu(h);x=0;Ta(485,a|0,f|0)|0;t=x;x=0;if(t&1){w=18;break}xu(f);p=p+1|0;if(p>>>0>=(((k[i>>2]|0)-(k[b>>2]|0)|0)/12|0)>>>0){w=22;break}}if((w|0)==5){p=Hc()|0;q=p;s=M;break}else if((w|0)==18){p=Hc()|0;z=M;A=p}else if((w|0)==19){p=Hc()|0;t=M;xu(g);z=t;A=p}else if((w|0)==20){p=Hc()|0;t=M;xu(h);z=t;A=p}else if((w|0)==22){r=d;return}xu(f);u=z;v=A;xu(a);Sc(v|0)}while(0);u=s;v=q;xu(a);Sc(v|0)}function rsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0;b=r;r=r+128|0;c=b+112|0;d=b+108|0;e=b+84|0;f=b+72|0;g=b+60|0;h=b+48|0;j=b+36|0;l=b+96|0;m=b+24|0;n=b+12|0;o=b;k[a>>2]=0;p=a+4|0;k[p>>2]=0;k[a+8>>2]=0;q=KBa(1)|0;k[a>>2]=q;s=q+1|0;t=a+8|0;k[t>>2]=s;i[q>>0]=0;k[p>>2]=s;k[c>>2]=0;k[d>>2]=c;x=0;s=Ba(614,d|0)|0;q=x;x=0;do if(!(q&1)){u=s&255;v=k[p>>2]|0;w=k[t>>2]|0;y=w;if(v>>>0>=w>>>0){w=k[a>>2]|0;z=v-w+1|0;if((z|0)<0){x=0;va(1473,a|0);A=x;x=0;if(A&1){B=76;break}C=k[a>>2]|0;D=t;E=k[t>>2]|0}else{C=w;D=t;E=y}y=C;w=E-C|0;if(w>>>0<1073741823){A=w<<1;w=A>>>0>>0?z:A;A=k[p>>2]|0;z=A-C|0;if(!w){F=0;G=0;H=z;I=A}else{J=w;K=A;L=z;B=11}}else{z=k[p>>2]|0;J=2147483647;K=z;L=z-C|0;B=11}if((B|0)==11){x=0;z=Ba(563,J|0)|0;A=x;x=0;if(A&1){B=76;break}else{F=J;G=z;H=L;I=K}}z=G+H|0;i[z>>0]=u;A=I-C|0;w=z+(0-A)|0;Dyb(w|0,y|0,A|0)|0;k[a>>2]=w;k[p>>2]=z+1;k[D>>2]=G+F;if(C)OBa(y)}else{i[v>>0]=u;k[p>>2]=(k[p>>2]|0)+1}u=k[c>>2]|0;v=i[44396]|0;y=(v&1)==0;if(u>>>0<(y?(v&255)>>>1:k[11100]|0)>>>0)N=(i[(y?44397:k[11101]|0)+u>>0]|0)==46;else N=0;x=0;fb(140,e|0,329672,0);u=x;x=0;if(!(u&1)){x=0;pa(57,N|0,e|0,55,285708,285747);u=x;x=0;if(u&1){u=Hc()|0;y=M;K2a(e);O=y;P=u;break}K2a(e);k[c>>2]=(k[c>>2]|0)+1;x=0;u=Ba(614,d|0)|0;y=x;x=0;if(!(y&1)){y=u&255;u=k[p>>2]|0;v=k[t>>2]|0;z=v;if(u>>>0>=v>>>0){v=k[a>>2]|0;w=u-v+1|0;if((w|0)<0){x=0;va(1473,a|0);A=x;x=0;if(A&1){B=76;break}Q=k[a>>2]|0;R=t;S=k[t>>2]|0}else{Q=v;R=t;S=z}z=Q;v=S-Q|0;if(v>>>0<1073741823){A=v<<1;v=A>>>0>>0?w:A;A=k[p>>2]|0;w=A-Q|0;if(!v){T=0;U=0;V=w;W=A}else{X=v;Y=A;Z=w;B=28}}else{w=k[p>>2]|0;X=2147483647;Y=w;Z=w-Q|0;B=28}if((B|0)==28){x=0;w=Ba(563,X|0)|0;A=x;x=0;if(A&1){B=76;break}else{T=X;U=w;V=Z;W=Y}}w=U+V|0;i[w>>0]=y;A=W-Q|0;v=w+(0-A)|0;Dyb(v|0,z|0,A|0)|0;k[a>>2]=v;k[p>>2]=w+1;k[R>>2]=U+T;if(Q)OBa(z)}else{i[u>>0]=y;k[p>>2]=(k[p>>2]|0)+1}y=k[c>>2]|0;u=i[44396]|0;z=(u&1)==0;if(y>>>0<(z?(u&255)>>>1:k[11100]|0)>>>0)_=(i[(z?44397:k[11101]|0)+y>>0]|0)==46;else _=0;x=0;fb(140,f|0,329672,0);y=x;x=0;if(!(y&1)){x=0;pa(57,_|0,f|0,58,285708,285747);y=x;x=0;if(y&1){y=Hc()|0;z=M;K2a(f);O=z;P=y;break}K2a(f);k[c>>2]=(k[c>>2]|0)+1;x=0;y=Ba(614,d|0)|0;z=x;x=0;if(!(z&1)){z=y&255;y=k[p>>2]|0;u=k[t>>2]|0;w=u;if(y>>>0>=u>>>0){u=k[a>>2]|0;v=y-u+1|0;if((v|0)<0){x=0;va(1473,a|0);A=x;x=0;if(A&1){B=76;break}$=k[a>>2]|0;aa=t;ba=k[t>>2]|0}else{$=u;aa=t;ba=w}w=$;u=ba-$|0;if(u>>>0<1073741823){A=u<<1;u=A>>>0>>0?v:A;A=k[p>>2]|0;v=A-$|0;if(!u){ca=0;da=0;ea=v;fa=A}else{ga=u;ha=A;ia=v;B=45}}else{v=k[p>>2]|0;ga=2147483647;ha=v;ia=v-$|0;B=45}if((B|0)==45){x=0;v=Ba(563,ga|0)|0;A=x;x=0;if(A&1){B=76;break}else{ca=ga;da=v;ea=ia;fa=ha}}v=da+ea|0;i[v>>0]=z;A=fa-$|0;u=v+(0-A)|0;Dyb(u|0,w|0,A|0)|0;k[a>>2]=u;k[p>>2]=v+1;k[aa>>2]=da+ca;if($)OBa(w)}else{i[y>>0]=z;k[p>>2]=(k[p>>2]|0)+1}z=k[c>>2]|0;y=i[44396]|0;w=(y&1)==0;if(z>>>0<(w?(y&255)>>>1:k[11100]|0)>>>0){y=i[(w?44397:k[11101]|0)+z>>0]|0;ja=y<<24>>24==45|y<<24>>24==43}else ja=0;x=0;fb(140,g|0,329672,0);y=x;x=0;if(!(y&1)){x=0;pa(57,ja|0,g|0,61,285708,285747);y=x;x=0;if(y&1){y=Hc()|0;z=M;K2a(g);O=z;P=y;break}K2a(g);k[c>>2]=(k[c>>2]|0)+1;y=i[44396]|0;z=(y&1)==0;w=z?44397:k[11101]|0;v=z?(y&255)>>>1:k[11100]|0;if(v>>>0<7)ka=-1;else{y=w+v|0;z=w;a:do if((v|0)<7)la=y;else{u=y+-6|0;if((u|0)==(w|0)){la=y;break}else ma=w;while(1){if((i[ma>>0]|0)==99){A=ma;na=285784;do{na=na+1|0;if((na|0)==285791){la=ma;break a}A=A+1|0}while((i[A>>0]|0)==(i[na>>0]|0))}ma=ma+1|0;if((ma|0)==(u|0)){la=y;break}}}while(0);ka=(la|0)==(y|0)?-1:la-z|0}x=0;fb(140,h|0,329672,0);w=x;x=0;if(!(w&1)){x=0;pa(57,(ka|0)!=-1|0,h|0,64,285708,285747);w=x;x=0;if(w&1){w=Hc()|0;v=M;K2a(h);O=v;P=w;break}K2a(h);k[c>>2]=ka+7;w=i[44396]|0;v=k[11100]|0;x=0;fb(140,j|0,329672,0);u=x;x=0;if(!(u&1)){x=0;pa(57,(ka+14|0)>>>0<((w&1)==0?(w&255)>>>1:v)>>>0|0,j|0,66,285708,285747);v=x;x=0;if(v&1){v=Hc()|0;w=M;K2a(j);O=w;P=v;break}K2a(j);x=0;pa(48,m|0,44396,k[c>>2]|0,8,44396);v=x;x=0;if(v&1){B=76;break}x=0;fb(375,l|0,m|0,0);v=x;x=0;if(v&1){v=Hc()|0;w=M;K2a(m);O=w;P=v;break}K2a(m);v=k[l>>2]|0;w=l+4|0;u=k[w>>2]|0;x=0;fb(140,n|0,329672,0);na=x;x=0;do if(na&1)B=83;else{x=0;pa(57,(v|0)!=(u|0)|0,n|0,68,285708,285747);A=x;x=0;if(A&1){A=Hc()|0;oa=M;K2a(n);qa=oa;ra=A;break}K2a(n);x=0;Ta(545,a|0,l|0)|0;A=x;x=0;if(A&1){B=83;break}A=k[p>>2]|0;oa=k[a>>2]|0;x=0;fb(140,o|0,329672,0);sa=x;x=0;if(sa&1){B=83;break}x=0;pa(57,(A-oa|0)==8|0,o|0,70,285708,285747);oa=x;x=0;if(oa&1){oa=Hc()|0;A=M;K2a(o);qa=A;ra=oa;break}K2a(o);oa=k[l>>2]|0;if(!oa){r=b;return}if((k[w>>2]|0)!=(oa|0))k[w>>2]=oa;OBa(oa);r=b;return}while(0);if((B|0)==83){u=Hc()|0;qa=M;ra=u}u=k[l>>2]|0;if(!u){O=qa;P=ra;break}if((k[w>>2]|0)!=(u|0))k[w>>2]=u;OBa(u);O=qa;P=ra}else B=76}else B=76}else B=76}else B=76}else B=76}else B=76}else B=76}else B=76;while(0);if((B|0)==76){B=Hc()|0;O=M;P=B}B=k[a>>2]|0;if(!B)Sc(P|0);if((k[p>>2]|0)!=(B|0))k[p>>2]=B;OBa(B);Sc(P|0)}function ssa(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+96|0;b=a+84|0;c=a+72|0;d=a+60|0;e=a+48|0;f=a+36|0;g=a+24|0;h=a+12|0;j=a;k[11102]=0;k[11103]=0;k[11104]=0;l=k[11098]|0;q2a(c,l,RLa(l)|0);x=0;fb(140,e|0,329672,0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(c);Sc(n|0)}l=i[e>>0]|0;x=0;do if(!(((l&1)==0?(l&255)>>>1:k[e+4>>2]|0)|0)){q2a(d,329672,0);o=x;x=0;if(o&1)p=20;else{q=0;p=7}}else{q2a(f,329672,0);o=x;x=0;if(!(o&1)){x=0;o=Fa(86,f|0,0,324194)|0;s=x;x=0;if(s&1){s=Hc()|0;t=M;u=s;p=31;break}else{k[d>>2]=k[o>>2];k[d+4>>2]=k[o+4>>2];k[d+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;q=1;p=7;break}}else p=20}while(0);if((p|0)==7){l=i[d>>0]|0;o=(l&1)==0;x=0;s=Fa(88,c|0,(o?d+1|0:k[d+8>>2]|0)|0,(o?(l&255)>>>1:k[d+4>>2]|0)|0)|0;l=x;x=0;if(l&1){l=Hc()|0;v=M;w=l}else{k[b>>2]=k[s>>2];k[b+4>>2]=k[s+4>>2];k[b+8>>2]=k[s+8>>2];k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;x=0;fb(140,h|0,285873,36);s=x;x=0;if(s&1){s=Hc()|0;y=M;z=s}else{s=i[h>>0]|0;x=0;do if(!(((s&1)==0?(s&255)>>>1:k[h+4>>2]|0)|0)){q2a(g,329672,0);l=x;x=0;if(l&1)p=24;else{A=0;p=14}}else{q2a(j,285873,36);l=x;x=0;if(!(l&1)){x=0;l=Fa(86,j|0,0,324192)|0;o=x;x=0;if(o&1){o=Hc()|0;B=M;C=o;p=27;break}else{k[g>>2]=k[l>>2];k[g+4>>2]=k[l+4>>2];k[g+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;A=1;p=14;break}}else p=24}while(0);do if((p|0)==14){s=i[g>>0]|0;l=(s&1)==0;x=0;o=Fa(88,b|0,(l?g+1|0:k[g+8>>2]|0)|0,(l?(s&255)>>>1:k[g+4>>2]|0)|0)|0;s=x;x=0;if(s&1){s=Hc()|0;l=M;K2a(g);if(A){B=l;C=s;p=27;break}else{D=l;E=s;break}};k[11099]=k[o>>2];k[11100]=k[o+4>>2];k[11101]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;K2a(g);if(A)K2a(j);K2a(h);K2a(b);K2a(d);if(!q){K2a(e);K2a(c);r=a;return}K2a(f);K2a(e);K2a(c);r=a;return}else if((p|0)==24){o=Hc()|0;D=M;E=o}while(0);if((p|0)==27){K2a(j);D=B;E=C}K2a(h);y=D;z=E}K2a(b);v=y;w=z}K2a(d);if(q){t=v;u=w;p=31}else{F=v;G=w}}else if((p|0)==20){w=Hc()|0;F=M;G=w}if((p|0)==31){K2a(f);F=t;G=u}K2a(e);m=F;n=G;K2a(c);Sc(n|0)}function tsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b;d=((i[((i[44396]&1)==0?44397:k[11101]|0)+(k[k[a>>2]>>2]|0)>>0]|0)+-48&255)<10;q2a(c,329672,0);x=0;pa(57,d|0,c|0,49,285708,285798);d=x;x=0;if(d&1){d=Hc()|0;K2a(c);Sc(d|0)}K2a(c);c=k[a>>2]|0;d=k[c>>2]|0;e=i[44396]|0;if(d>>>0>=((e&1)==0?(e&255)>>>1:k[11100]|0)>>>0){f=0;r=b;return f|0}g=k[11101]|0;h=e;e=d;d=c;c=0;while(1){j=i[((h&1)==0?44397:g)+e>>0]|0;if((j+-48&255)>=10){f=c;l=7;break}m=(c*10|0)+-48+(j<<24>>24)|0;k[d>>2]=e+1;d=k[a>>2]|0;e=k[d>>2]|0;h=i[44396]|0;if(e>>>0>=((h&1)==0?(h&255)>>>1:k[11100]|0)>>>0){f=m;l=7;break}else c=m}if((l|0)==7){r=b;return f|0}return 0}function usa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=a+160|0;M2a(d,b)|0;e=a+172|0;k[e>>2]=k[b+12>>2];b=KBa(24)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=44428;f=b+12|0;x=0;xa(604,f|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;c0a(b);OBa(b);Sc(c|0)}k[a+176>>2]=f;f=a+180|0;c=k[f>>2]|0;k[f>>2]=b;if(c)j0a(c);k[e>>2]=0;c=i[d>>0]|0;b=(c&1)==0;if(b)g=d+1|0;else g=k[a+168>>2]|0;f=i[g>>0]|0;g=a+184|0;i[g>>0]=f;h=f+-9<<24>>24;if((h&255)>=24){xsa(a);ysa(a)|0;return}f=a+168|0;j=a+164|0;l=(c&255)>>>1;a:do if(b){c=0;m=h;while(1){if(!(8388627>>>(m&255)&1)){n=19;break}if(c>>>0>=l>>>0)break a;c=c+1|0;k[e>>2]=c;if(c>>>0>=l>>>0)break a;o=i[d+1+c>>0]|0;i[g>>0]=o;m=o+-9<<24>>24;if((m&255)>=24){n=19;break}}if((n|0)==19){xsa(a);ysa(a)|0;return}}else{m=0;c=h;while(1){if(!(8388627>>>(c&255)&1)){n=19;break}if(m>>>0>=(k[j>>2]|0)>>>0)break a;m=m+1|0;k[e>>2]=m;if(m>>>0>=(k[j>>2]|0)>>>0)break a;o=i[(k[f>>2]|0)+m>>0]|0;i[g>>0]=o;c=o+-9<<24>>24;if((c&255)>=24){n=19;break}}if((n|0)==19){xsa(a);ysa(a)|0;return}}while(0);i[g>>0]=0;xsa(a);ysa(a)|0;return}function vsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;b=a+160|0;c=a+172|0;k[c>>2]=0;d=i[b>>0]|0;e=(d&1)==0;if(e)f=b+1|0;else f=k[a+168>>2]|0;g=i[f>>0]|0;f=a+184|0;i[f>>0]=g;h=g+-9<<24>>24;a:do if((h&255)<24){g=b+1|0;j=a+168|0;l=a+164|0;m=(d&255)>>>1;n=(d&255)>>>1;o=0;p=h;while(1){if(!(8388627>>>(p&255)&1))break a;if(e)q=m;else q=k[l>>2]|0;if(o>>>0>=q>>>0)break;o=o+1|0;k[c>>2]=o;if(e)r=n;else r=k[l>>2]|0;if(o>>>0>=r>>>0)break;if(e)s=g;else s=k[j>>2]|0;t=i[s+o>>0]|0;i[f>>0]=t;p=t+-9<<24>>24;if((p&255)>=24)break a}i[f>>0]=0}while(0);xsa(a);ysa(a)|0;return}function wsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=a+172|0;c=k[b>>2]|0;d=a+184|0;e=(i[d>>0]|0)+-9<<24>>24;if((e&255)>=24){f=c;g=(f|0)!=(c|0);return g|0}h=a+160|0;j=h+1|0;l=a+168|0;m=a+164|0;a=c;n=e;while(1){if(!(8388627>>>(n&255)&1)){f=a;o=16;break}e=i[h>>0]|0;p=(e&1)==0;if(p)q=(e&255)>>>1;else q=k[m>>2]|0;if(a>>>0>=q>>>0){r=a;o=14;break}s=a+1|0;k[b>>2]=s;if(p)t=(e&255)>>>1;else t=k[m>>2]|0;if(s>>>0>=t>>>0){r=s;o=14;break}if(p)u=j;else u=k[l>>2]|0;p=i[u+s>>0]|0;i[d>>0]=p;n=p+-9<<24>>24;if((n&255)>=24){f=s;o=16;break}else a=s}if((o|0)==14){i[d>>0]=0;f=r;g=(f|0)!=(c|0);return g|0}else if((o|0)==16){g=(f|0)!=(c|0);return g|0}return 0}function xsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0;b=r;r=r+16|0;c=b;d=a+140|0;if(!(i[d>>0]&1)){i[d+1>>0]=0;i[d>>0]=0}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0}d=a+152|0;k[d>>2]=0;e=a+156|0;k[e>>2]=0;f=a+60|0;if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[a+68>>2]>>0]=0;k[a+64>>2]=0}k[a+72>>2]=0;k[a+76>>2]=0;f=a+172|0;g=a+124|0;h=a+184|0;j=a+160|0;l=j+1|0;m=a+168|0;n=a+164|0;o=c+4|0;p=c+8|0;q=0;s=0;a:while(1){t=k[f>>2]|0;u=i[h>>0]|0;b:while(1){k[g>>2]=t;switch(u<<24>>24|0){case 60:{v=t;w=q;x=s;y=23;break a;break}case 62:{z=t;A=q;B=s;y=71;break a;break}case 61:{C=t;D=q;E=s;y=143;break a;break}case 33:{F=t;G=q;H=s;y=179;break a;break}case 43:{I=t;J=q;K=s;y=203;break a;break}case 45:{L=t;M=q;N=s;y=239;break a;break}case 42:{O=t;P=q;Q=s;y=275;break a;break}case 37:{R=t;S=q;T=s;y=311;break a;break}case 38:{U=t;V=q;W=s;y=336;break a;break}case 124:{X=t;Y=q;Z=s;y=372;break a;break}case 94:{_=t;$=q;aa=s;y=408;break a;break}case 58:{ba=t;ca=q;da=s;y=445;break a;break}case 59:{ea=t;fa=q;ga=s;y=457;break a;break}case 44:{ha=t;ia=q;ja=s;y=469;break a;break}case 40:{ka=t;la=q;ma=s;y=481;break a;break}case 41:{na=t;oa=q;pa=s;y=493;break a;break}case 91:{qa=t;ra=q;sa=s;y=505;break a;break}case 93:{ta=t;ua=q;va=s;y=517;break a;break}case 123:{wa=t;xa=q;ya=s;y=529;break a;break}case 125:{za=t;Aa=q;Ba=s;y=541;break a;break}case 63:{Ca=t;Da=q;Ea=s;y=553;break a;break}case 126:{Fa=t;Ga=q;Ha=s;y=565;break a;break}case 39:case 34:{y=22;break b;break}case 47:{y=335;break b;break}case 46:{Ia=t;y=432;break b;break}case 9:case 32:case 10:{Ja=i[j>>0]|0;Ka=(Ja&1)==0;if(Ka)La=(Ja&255)>>>1;else La=k[n>>2]|0;if(t>>>0>>0){Ma=t+1|0;k[f>>2]=Ma;if(Ka)Na=(Ja&255)>>>1;else Na=k[n>>2]|0;if(Ma>>>0>>0){if(Ka)Oa=l;else Oa=k[m>>2]|0;Pa=i[Oa+Ma>>0]|0;Qa=Ma}else{Pa=0;Qa=Ma}}else{Pa=0;Qa=t}i[h>>0]=Pa;t=Qa;u=Pa;continue b;break}default:{}}switch(u<<24>>24){case 36:case 95:{y=579;break b;break}default:{}}if(((u&-33)+-65&255)<26){y=579;break}if((u+-48&255)<10){y=583;break}Ma=u+-9<<24>>24;if((Ma&255)<24){Ra=t;Sa=u;Ta=Ma}else{Ua=t;Va=q;Wa=s;y=599;break a}while(1){if(!(8388627>>>(Ta&255)&1)){Xa=Ra;Ya=Sa;break}Ma=i[j>>0]|0;Ka=(Ma&1)==0;if(Ka)Za=(Ma&255)>>>1;else Za=k[n>>2]|0;if(Ra>>>0>=Za>>>0){_a=Ra;y=596;break}Ja=Ra+1|0;k[f>>2]=Ja;if(Ka)$a=(Ma&255)>>>1;else $a=k[n>>2]|0;if(Ja>>>0>=$a>>>0){_a=Ja;y=596;break}if(Ka)ab=l;else ab=k[m>>2]|0;Ka=i[ab+Ja>>0]|0;i[h>>0]=Ka;Ta=Ka+-9<<24>>24;if((Ta&255)>=24){Xa=Ja;Ya=Ka;break}else{Ra=Ja;Sa=Ka}}if((y|0)==596){y=0;i[h>>0]=0;Xa=_a;Ya=0}if((Xa|0)==(t|0)){Ua=t;Va=q;Wa=s;y=599;break a}else{t=Xa;u=Ya}}if((y|0)==22){y=0;bb=Jsa(a)|0;cb=q;db=s}else if((y|0)==335){y=0;bb=Isa(a)|0;cb=q;db=s}else if((y|0)==432){y=0;u=i[j>>0]|0;t=(u&1)==0;if(t)eb=(u&255)>>>1;else eb=k[n>>2]|0;if(Ia>>>0>=eb>>>0){fb=q;gb=s;y=442;break}Ka=Ia+1|0;k[f>>2]=Ka;if(t)hb=(u&255)>>>1;else hb=k[n>>2]|0;if(Ka>>>0>=hb>>>0){fb=q;gb=s;y=442;break}if(t)ib=l;else ib=k[m>>2]|0;t=i[ib+Ka>>0]|0;i[h>>0]=t;if((t+-48&255)>=10){jb=s;kb=q;lb=9;y=616;break}bb=Ksa(a,46)|0;cb=q;db=s}else if((y|0)==579){y=0;Lsa(c,a);t=k[c>>2]|0;Ka=k[o>>2]|0;u=k[p>>2]|0;if((t|0)==65){switch(i[h>>0]|0){case 39:case 34:break;default:{jb=0;kb=0;lb=139;y=616;break a}}bb=Msa(a)|0;cb=0;db=0}else{bb=t;cb=Ka;db=u}}else if((y|0)==583){y=0;bb=Ksa(a,0)|0;cb=q;db=s}if((bb|0)==140){q=cb;s=db}else{jb=db;kb=cb;lb=bb;y=616;break}}c:switch(y|0){case 23:{bb=i[j>>0]|0;cb=(bb&1)==0;if(cb)mb=(bb&255)>>>1;else mb=k[n>>2]|0;if(v>>>0>>0){mb=v+1|0;k[f>>2]=mb;if(cb)nb=(bb&255)>>>1;else nb=k[n>>2]|0;if(mb>>>0>>0){if(cb)ob=l;else ob=k[m>>2]|0;nb=i[ob+mb>>0]|0;i[h>>0]=nb;switch(nb<<24>>24){case 61:{if(cb)pb=(bb&255)>>>1;else pb=k[n>>2]|0;if(mb>>>0>>0){pb=v+2|0;k[f>>2]=pb;if(cb)qb=(bb&255)>>>1;else qb=k[n>>2]|0;if(pb>>>0>>0){if(cb)rb=l;else rb=k[m>>2]|0;sb=i[rb+pb>>0]|0;tb=pb}else{sb=0;tb=pb}}else{sb=0;tb=mb}i[h>>0]=sb;ub=tb;vb=43;wb=w;xb=x;break c;break}case 60:break;default:{ub=mb;vb=41;wb=w;xb=x;break c}}if(cb)yb=(bb&255)>>>1;else yb=k[n>>2]|0;if(mb>>>0>>0){yb=v+2|0;k[f>>2]=yb;if(cb)zb=(bb&255)>>>1;else zb=k[n>>2]|0;if(yb>>>0>>0){if(cb)Ab=l;else Ab=k[m>>2]|0;zb=i[Ab+yb>>0]|0;i[h>>0]=zb;if(zb<<24>>24!=61){ub=yb;vb=30;wb=w;xb=x;break}if(cb)Bb=(bb&255)>>>1;else Bb=k[n>>2]|0;do if(yb>>>0>>0){zb=v+3|0;k[f>>2]=zb;if(cb)Cb=(bb&255)>>>1;else Cb=k[n>>2]|0;if(zb>>>0>=Cb>>>0){Db=0;Eb=zb;break}if(cb)Fb=l;else Fb=k[m>>2]|0;Db=i[Fb+zb>>0]|0;Eb=zb}else{Db=0;Eb=yb}while(0);i[h>>0]=Db;ub=Eb;vb=16;wb=w;xb=x;break}else Gb=yb}else Gb=mb;i[h>>0]=0;ub=Gb;vb=30;wb=w;xb=x;break}else Hb=mb}else Hb=v;i[h>>0]=0;ub=Hb;vb=41;wb=w;xb=x;break}case 71:{x=i[j>>0]|0;w=(x&1)==0;if(w)Ib=(x&255)>>>1;else Ib=k[n>>2]|0;if(z>>>0>>0){Ib=z+1|0;k[f>>2]=Ib;if(w)Jb=(x&255)>>>1;else Jb=k[n>>2]|0;if(Ib>>>0>>0){if(w)Kb=l;else Kb=k[m>>2]|0;Jb=i[Kb+Ib>>0]|0;i[h>>0]=Jb;switch(Jb<<24>>24){case 61:{if(w)Lb=(x&255)>>>1;else Lb=k[n>>2]|0;if(Ib>>>0>>0){Lb=z+2|0;k[f>>2]=Lb;if(w)Mb=(x&255)>>>1;else Mb=k[n>>2]|0;if(Lb>>>0>>0){if(w)Nb=l;else Nb=k[m>>2]|0;Ob=i[Nb+Lb>>0]|0;Pb=Lb}else{Ob=0;Pb=Lb}}else{Ob=0;Pb=Ib}i[h>>0]=Ob;ub=Pb;vb=44;wb=A;xb=B;break c;break}case 62:break;default:{ub=Ib;vb=42;wb=A;xb=B;break c}}if(w)Qb=(x&255)>>>1;else Qb=k[n>>2]|0;if(Ib>>>0>>0){Qb=z+2|0;k[f>>2]=Qb;if(w)Rb=(x&255)>>>1;else Rb=k[n>>2]|0;if(Qb>>>0>>0){if(w)Sb=l;else Sb=k[m>>2]|0;Rb=i[Sb+Qb>>0]|0;i[h>>0]=Rb;switch(Rb<<24>>24){case 61:{if(w)Tb=(x&255)>>>1;else Tb=k[n>>2]|0;do if(Qb>>>0>>0){Rb=z+3|0;k[f>>2]=Rb;if(w)Ub=(x&255)>>>1;else Ub=k[n>>2]|0;if(Rb>>>0>=Ub>>>0){Vb=0;Wb=Rb;break}if(w)Xb=l;else Xb=k[m>>2]|0;Vb=i[Xb+Rb>>0]|0;Wb=Rb}else{Vb=0;Wb=Qb}while(0);i[h>>0]=Vb;ub=Wb;vb=17;wb=A;xb=B;break c;break}case 62:break;default:{ub=Qb;vb=31;wb=A;xb=B;break c}}if(w)Yb=(x&255)>>>1;else Yb=k[n>>2]|0;if(Qb>>>0>>0){Yb=z+3|0;k[f>>2]=Yb;if(w)Zb=(x&255)>>>1;else Zb=k[n>>2]|0;if(Yb>>>0>>0){if(w)_b=l;else _b=k[m>>2]|0;Zb=i[_b+Yb>>0]|0;i[h>>0]=Zb;if(Zb<<24>>24!=61){ub=Yb;vb=32;wb=A;xb=B;break}if(w)$b=(x&255)>>>1;else $b=k[n>>2]|0;do if(Yb>>>0<$b>>>0){Zb=z+4|0;k[f>>2]=Zb;if(w)ac=(x&255)>>>1;else ac=k[n>>2]|0;if(Zb>>>0>=ac>>>0){bc=0;cc=Zb;break}if(w)dc=l;else dc=k[m>>2]|0;bc=i[dc+Zb>>0]|0;cc=Zb}else{bc=0;cc=Yb}while(0);i[h>>0]=bc;ub=cc;vb=18;wb=A;xb=B;break}else ec=Yb}else ec=Qb;i[h>>0]=0;ub=ec;vb=32;wb=A;xb=B;break}else fc=Qb}else fc=Ib;i[h>>0]=0;ub=fc;vb=31;wb=A;xb=B;break}else gc=Ib}else gc=z;i[h>>0]=0;ub=gc;vb=42;wb=A;xb=B;break}case 143:{B=i[j>>0]|0;A=(B&1)==0;if(A)hc=(B&255)>>>1;else hc=k[n>>2]|0;if(C>>>0>>0){hc=C+1|0;k[f>>2]=hc;if(A)ic=(B&255)>>>1;else ic=k[n>>2]|0;if(hc>>>0>>0){if(A)jc=l;else jc=k[m>>2]|0;ic=i[jc+hc>>0]|0;i[h>>0]=ic;switch(ic<<24>>24){case 61:{if(A)kc=(B&255)>>>1;else kc=k[n>>2]|0;if(hc>>>0>>0){kc=C+2|0;k[f>>2]=kc;if(A)lc=(B&255)>>>1;else lc=k[n>>2]|0;if(kc>>>0>>0){if(A)mc=l;else mc=k[m>>2]|0;nc=i[mc+kc>>0]|0;oc=kc}else{nc=0;oc=kc}}else{nc=0;oc=hc}i[h>>0]=nc;ub=oc;vb=39;wb=D;xb=E;break c;break}case 62:{if(A)pc=(B&255)>>>1;else pc=k[n>>2]|0;if(hc>>>0>>0){pc=C+2|0;k[f>>2]=pc;if(A)qc=(B&255)>>>1;else qc=k[n>>2]|0;if(pc>>>0>>0){if(A)rc=l;else rc=k[m>>2]|0;sc=i[rc+pc>>0]|0;tc=pc}else{sc=0;tc=pc}}else{sc=0;tc=hc}i[h>>0]=sc;ub=tc;vb=11;wb=D;xb=E;break c;break}default:{ub=hc;vb=12;wb=D;xb=E;break c}}}else uc=hc}else uc=C;i[h>>0]=0;ub=uc;vb=12;wb=D;xb=E;break}case 179:{E=i[j>>0]|0;D=(E&1)==0;if(D)vc=(E&255)>>>1;else vc=k[n>>2]|0;if(F>>>0>>0){vc=F+1|0;k[f>>2]=vc;if(D)wc=(E&255)>>>1;else wc=k[n>>2]|0;if(vc>>>0>>0){if(D)xc=l;else xc=k[m>>2]|0;wc=i[xc+vc>>0]|0;i[h>>0]=wc;if(wc<<24>>24!=61){ub=vc;vb=45;wb=G;xb=H;break}if(D)yc=(E&255)>>>1;else yc=k[n>>2]|0;if(vc>>>0>>0){yc=F+2|0;k[f>>2]=yc;if(D)zc=(E&255)>>>1;else zc=k[n>>2]|0;if(yc>>>0>>0){if(D)Ac=l;else Ac=k[m>>2]|0;Bc=i[Ac+yc>>0]|0;Cc=yc}else{Bc=0;Cc=yc}}else{Bc=0;Cc=vc}i[h>>0]=Bc;ub=Cc;vb=40;wb=G;xb=H;break}else Dc=vc}else Dc=F;i[h>>0]=0;ub=Dc;vb=45;wb=G;xb=H;break}case 203:{H=i[j>>0]|0;G=(H&1)==0;if(G)Ec=(H&255)>>>1;else Ec=k[n>>2]|0;if(I>>>0>>0){Ec=I+1|0;k[f>>2]=Ec;if(G)Fc=(H&255)>>>1;else Fc=k[n>>2]|0;if(Ec>>>0>>0){if(G)Gc=l;else Gc=k[m>>2]|0;Fc=i[Gc+Ec>>0]|0;i[h>>0]=Fc;switch(Fc<<24>>24){case 43:{if(G)Hc=(H&255)>>>1;else Hc=k[n>>2]|0;if(Ec>>>0>>0){Hc=I+2|0;k[f>>2]=Hc;if(G)Ic=(H&255)>>>1;else Ic=k[n>>2]|0;if(Hc>>>0>>0){if(G)Jc=l;else Jc=k[m>>2]|0;Kc=i[Jc+Hc>>0]|0;Lc=Hc}else{Kc=0;Lc=Hc}}else{Kc=0;Lc=Ec}i[h>>0]=Kc;ub=Lc;vb=47;wb=J;xb=K;break c;break}case 61:{if(G)Mc=(H&255)>>>1;else Mc=k[n>>2]|0;if(Ec>>>0>>0){Mc=I+2|0;k[f>>2]=Mc;if(G)Nc=(H&255)>>>1;else Nc=k[n>>2]|0;if(Mc>>>0>>0){if(G)Oc=l;else Oc=k[m>>2]|0;Pc=i[Oc+Mc>>0]|0;Qc=Mc}else{Pc=0;Qc=Mc}}else{Pc=0;Qc=Ec}i[h>>0]=Pc;ub=Qc;vb=19;wb=J;xb=K;break c;break}default:{ub=Ec;vb=33;wb=J;xb=K;break c}}}else Rc=Ec}else Rc=I;i[h>>0]=0;ub=Rc;vb=33;wb=J;xb=K;break}case 239:{K=i[j>>0]|0;J=(K&1)==0;if(J)Sc=(K&255)>>>1;else Sc=k[n>>2]|0;if(L>>>0>>0){Sc=L+1|0;k[f>>2]=Sc;if(J)Tc=(K&255)>>>1;else Tc=k[n>>2]|0;if(Sc>>>0>>0){if(J)Uc=l;else Uc=k[m>>2]|0;Tc=i[Uc+Sc>>0]|0;i[h>>0]=Tc;switch(Tc<<24>>24){case 45:{if(J)Vc=(K&255)>>>1;else Vc=k[n>>2]|0;if(Sc>>>0>>0){Vc=L+2|0;k[f>>2]=Vc;if(J)Wc=(K&255)>>>1;else Wc=k[n>>2]|0;if(Vc>>>0>>0){if(J)Xc=l;else Xc=k[m>>2]|0;Yc=i[Xc+Vc>>0]|0;Zc=Vc}else{Yc=0;Zc=Vc}}else{Yc=0;Zc=Sc}i[h>>0]=Yc;ub=Zc;vb=48;wb=M;xb=N;break c;break}case 61:{if(J)_c=(K&255)>>>1;else _c=k[n>>2]|0;if(Sc>>>0<_c>>>0){_c=L+2|0;k[f>>2]=_c;if(J)$c=(K&255)>>>1;else $c=k[n>>2]|0;if(_c>>>0<$c>>>0){if(J)ad=l;else ad=k[m>>2]|0;bd=i[ad+_c>>0]|0;cd=_c}else{bd=0;cd=_c}}else{bd=0;cd=Sc}i[h>>0]=bd;ub=cd;vb=20;wb=M;xb=N;break c;break}default:{ub=Sc;vb=34;wb=M;xb=N;break c}}}else dd=Sc}else dd=L;i[h>>0]=0;ub=dd;vb=34;wb=M;xb=N;break}case 275:{N=i[j>>0]|0;M=(N&1)==0;if(M)ed=(N&255)>>>1;else ed=k[n>>2]|0;if(O>>>0>>0){ed=O+1|0;k[f>>2]=ed;if(M)fd=(N&255)>>>1;else fd=k[n>>2]|0;if(ed>>>0>>0){if(M)gd=l;else gd=k[m>>2]|0;fd=i[gd+ed>>0]|0;i[h>>0]=fd;switch(fd<<24>>24){case 42:{if(M)hd=(N&255)>>>1;else hd=k[n>>2]|0;if(ed>>>0>>0){hd=O+2|0;k[f>>2]=hd;if(M)id=(N&255)>>>1;else id=k[n>>2]|0;if(hd>>>0>>0){if(M)jd=l;else jd=k[m>>2]|0;kd=i[jd+hd>>0]|0;ld=hd}else{kd=0;ld=hd}}else{kd=0;ld=ed}i[h>>0]=kd;ub=ld;vb=38;wb=P;xb=Q;break c;break}case 61:{if(M)md=(N&255)>>>1;else md=k[n>>2]|0;if(ed>>>0>>0){md=O+2|0;k[f>>2]=md;if(M)nd=(N&255)>>>1;else nd=k[n>>2]|0;if(md>>>0>>0){if(M)od=l;else od=k[m>>2]|0;pd=i[od+md>>0]|0;qd=md}else{pd=0;qd=md}}else{pd=0;qd=ed}i[h>>0]=pd;ub=qd;vb=21;wb=P;xb=Q;break c;break}default:{ub=ed;vb=35;wb=P;xb=Q;break c}}}else rd=ed}else rd=O;i[h>>0]=0;ub=rd;vb=35;wb=P;xb=Q;break}case 311:{Q=i[j>>0]|0;P=(Q&1)==0;if(P)sd=(Q&255)>>>1;else sd=k[n>>2]|0;if(R>>>0>>0){sd=R+1|0;k[f>>2]=sd;if(P)td=(Q&255)>>>1;else td=k[n>>2]|0;if(sd>>>0>>0){if(P)ud=l;else ud=k[m>>2]|0;td=i[ud+sd>>0]|0;i[h>>0]=td;if(td<<24>>24!=61){ub=sd;vb=37;wb=S;xb=T;break}if(P)vd=(Q&255)>>>1;else vd=k[n>>2]|0;if(sd>>>0>>0){vd=R+2|0;k[f>>2]=vd;if(P)wd=(Q&255)>>>1;else wd=k[n>>2]|0;if(vd>>>0>>0){if(P)xd=l;else xd=k[m>>2]|0;yd=i[xd+vd>>0]|0;zd=vd}else{yd=0;zd=vd}}else{yd=0;zd=sd}i[h>>0]=yd;ub=zd;vb=23;wb=S;xb=T;break}else Ad=sd}else Ad=R;i[h>>0]=0;ub=Ad;vb=37;wb=S;xb=T;break}case 336:{T=i[j>>0]|0;S=(T&1)==0;if(S)Bd=(T&255)>>>1;else Bd=k[n>>2]|0;if(U>>>0>>0){Bd=U+1|0;k[f>>2]=Bd;if(S)Cd=(T&255)>>>1;else Cd=k[n>>2]|0;if(Bd>>>0>>0){if(S)Dd=l;else Dd=k[m>>2]|0;Cd=i[Dd+Bd>>0]|0;i[h>>0]=Cd;switch(Cd<<24>>24){case 38:{if(S)Ed=(T&255)>>>1;else Ed=k[n>>2]|0;if(Bd>>>0>>0){Ed=U+2|0;k[f>>2]=Ed;if(S)Fd=(T&255)>>>1;else Fd=k[n>>2]|0;if(Ed>>>0>>0){if(S)Gd=l;else Gd=k[m>>2]|0;Hd=i[Gd+Ed>>0]|0;Id=Ed}else{Hd=0;Id=Ed}}else{Hd=0;Id=Bd}i[h>>0]=Hd;ub=Id;vb=26;wb=V;xb=W;break c;break}case 61:{if(S)Jd=(T&255)>>>1;else Jd=k[n>>2]|0;if(Bd>>>0>>0){Jd=U+2|0;k[f>>2]=Jd;if(S)Kd=(T&255)>>>1;else Kd=k[n>>2]|0;if(Jd>>>0>>0){if(S)Ld=l;else Ld=k[m>>2]|0;Md=i[Ld+Jd>>0]|0;Nd=Jd}else{Md=0;Nd=Jd}}else{Md=0;Nd=Bd}i[h>>0]=Md;ub=Nd;vb=15;wb=V;xb=W;break c;break}default:{ub=Bd;vb=29;wb=V;xb=W;break c}}}else Od=Bd}else Od=U;i[h>>0]=0;ub=Od;vb=29;wb=V;xb=W;break}case 372:{W=i[j>>0]|0;V=(W&1)==0;if(V)Pd=(W&255)>>>1;else Pd=k[n>>2]|0;if(X>>>0>>0){Pd=X+1|0;k[f>>2]=Pd;if(V)Qd=(W&255)>>>1;else Qd=k[n>>2]|0;if(Pd>>>0>>0){if(V)Rd=l;else Rd=k[m>>2]|0;Qd=i[Rd+Pd>>0]|0;i[h>>0]=Qd;switch(Qd<<24>>24){case 124:{if(V)Sd=(W&255)>>>1;else Sd=k[n>>2]|0;if(Pd>>>0>>0){Sd=X+2|0;k[f>>2]=Sd;if(V)Td=(W&255)>>>1;else Td=k[n>>2]|0;if(Sd>>>0>>0){if(V)Ud=l;else Ud=k[m>>2]|0;Vd=i[Ud+Sd>>0]|0;Wd=Sd}else{Vd=0;Wd=Sd}}else{Vd=0;Wd=Pd}i[h>>0]=Vd;ub=Wd;vb=25;wb=Y;xb=Z;break c;break}case 61:{if(V)Xd=(W&255)>>>1;else Xd=k[n>>2]|0;if(Pd>>>0>>0){Xd=X+2|0;k[f>>2]=Xd;if(V)Yd=(W&255)>>>1;else Yd=k[n>>2]|0;if(Xd>>>0>>0){if(V)Zd=l;else Zd=k[m>>2]|0;_d=i[Zd+Xd>>0]|0;$d=Xd}else{_d=0;$d=Xd}}else{_d=0;$d=Pd}i[h>>0]=_d;ub=$d;vb=13;wb=Y;xb=Z;break c;break}default:{ub=Pd;vb=27;wb=Y;xb=Z;break c}}}else ae=Pd}else ae=X;i[h>>0]=0;ub=ae;vb=27;wb=Y;xb=Z;break}case 408:{Z=i[j>>0]|0;Y=(Z&1)==0;if(Y)be=(Z&255)>>>1;else be=k[n>>2]|0;if(_>>>0>>0){be=_+1|0;k[f>>2]=be;if(Y)ce=(Z&255)>>>1;else ce=k[n>>2]|0;if(be>>>0>>0){if(Y)de=l;else de=k[m>>2]|0;ce=i[de+be>>0]|0;i[h>>0]=ce;if(ce<<24>>24!=61){ub=be;vb=28;wb=$;xb=aa;break}if(Y)ee=(Z&255)>>>1;else ee=k[n>>2]|0;if(be>>>0>>0){ee=_+2|0;k[f>>2]=ee;if(Y)fe=(Z&255)>>>1;else fe=k[n>>2]|0;if(ee>>>0>>0){if(Y)ge=l;else ge=k[m>>2]|0;he=i[ge+ee>>0]|0;ie=ee}else{he=0;ie=ee}}else{he=0;ie=be}i[h>>0]=he;ub=ie;vb=14;wb=$;xb=aa;break}else je=be}else je=_;i[h>>0]=0;ub=je;vb=28;wb=$;xb=aa;break}case 442:{i[h>>0]=0;jb=gb;kb=fb;lb=9;y=616;break}case 445:{fb=i[j>>0]|0;gb=(fb&1)==0;if(gb)ke=(fb&255)>>>1;else ke=k[n>>2]|0;if(ba>>>0>>0){ke=ba+1|0;k[f>>2]=ke;if(gb)le=(fb&255)>>>1;else le=k[n>>2]|0;if(ke>>>0>>0){if(gb)me=l;else me=k[m>>2]|0;ne=i[me+ke>>0]|0;oe=ke}else{ne=0;oe=ke}}else{ne=0;oe=ba}i[h>>0]=ne;ub=oe;vb=7;wb=ca;xb=da;break}case 457:{da=i[j>>0]|0;ca=(da&1)==0;if(ca)pe=(da&255)>>>1;else pe=k[n>>2]|0;if(ea>>>0>>0){pe=ea+1|0;k[f>>2]=pe;if(ca)qe=(da&255)>>>1;else qe=k[n>>2]|0;if(pe>>>0>>0){if(ca)re=l;else re=k[m>>2]|0;se=i[re+pe>>0]|0;te=pe}else{se=0;te=pe}}else{se=0;te=ea}i[h>>0]=se;ub=te;vb=8;wb=fa;xb=ga;break}case 469:{ga=i[j>>0]|0;fa=(ga&1)==0;if(fa)ue=(ga&255)>>>1;else ue=k[n>>2]|0;if(ha>>>0>>0){ue=ha+1|0;k[f>>2]=ue;if(fa)ve=(ga&255)>>>1;else ve=k[n>>2]|0;if(ue>>>0>>0){if(fa)we=l;else we=k[m>>2]|0;xe=i[we+ue>>0]|0;ye=ue}else{xe=0;ye=ue}}else{xe=0;ye=ha}i[h>>0]=xe;ub=ye;vb=24;wb=ia;xb=ja;break}case 481:{ja=i[j>>0]|0;ia=(ja&1)==0;if(ia)ze=(ja&255)>>>1;else ze=k[n>>2]|0;if(ka>>>0>>0){ze=ka+1|0;k[f>>2]=ze;if(ia)Ae=(ja&255)>>>1;else Ae=k[n>>2]|0;if(ze>>>0>>0){if(ia)Be=l;else Be=k[m>>2]|0;Ce=i[Be+ze>>0]|0;De=ze}else{Ce=0;De=ze}}else{Ce=0;De=ka}i[h>>0]=Ce;ub=De;vb=1;wb=la;xb=ma;break}case 493:{ma=i[j>>0]|0;la=(ma&1)==0;if(la)Ee=(ma&255)>>>1;else Ee=k[n>>2]|0;if(na>>>0>>0){Ee=na+1|0;k[f>>2]=Ee;if(la)Fe=(ma&255)>>>1;else Fe=k[n>>2]|0;if(Ee>>>0>>0){if(la)Ge=l;else Ge=k[m>>2]|0;He=i[Ge+Ee>>0]|0;Ie=Ee}else{He=0;Ie=Ee}}else{He=0;Ie=na}i[h>>0]=He;ub=Ie;vb=2;wb=oa;xb=pa;break}case 505:{pa=i[j>>0]|0;oa=(pa&1)==0;if(oa)Je=(pa&255)>>>1;else Je=k[n>>2]|0;if(qa>>>0>>0){Je=qa+1|0;k[f>>2]=Je;if(oa)Ke=(pa&255)>>>1;else Ke=k[n>>2]|0;if(Je>>>0>>0){if(oa)Le=l;else Le=k[m>>2]|0;Me=i[Le+Je>>0]|0;Ne=Je}else{Me=0;Ne=Je}}else{Me=0;Ne=qa}i[h>>0]=Me;ub=Ne;vb=3;wb=ra;xb=sa;break}case 517:{sa=i[j>>0]|0;ra=(sa&1)==0;if(ra)Oe=(sa&255)>>>1;else Oe=k[n>>2]|0;if(ta>>>0>>0){Oe=ta+1|0;k[f>>2]=Oe;if(ra)Pe=(sa&255)>>>1;else Pe=k[n>>2]|0;if(Oe>>>0>>0){if(ra)Qe=l;else Qe=k[m>>2]|0;Re=i[Qe+Oe>>0]|0;Se=Oe}else{Re=0;Se=Oe}}else{Re=0;Se=ta}i[h>>0]=Re;ub=Se;vb=4;wb=ua;xb=va;break}case 529:{va=i[j>>0]|0;ua=(va&1)==0;if(ua)Te=(va&255)>>>1;else Te=k[n>>2]|0;if(wa>>>0>>0){Te=wa+1|0;k[f>>2]=Te;if(ua)Ue=(va&255)>>>1;else Ue=k[n>>2]|0;if(Te>>>0>>0){if(ua)Ve=l;else Ve=k[m>>2]|0;We=i[Ve+Te>>0]|0;Xe=Te}else{We=0;Xe=Te}}else{We=0;Xe=wa}i[h>>0]=We;ub=Xe;vb=5;wb=xa;xb=ya;break}case 541:{ya=i[j>>0]|0;xa=(ya&1)==0;if(xa)Ye=(ya&255)>>>1;else Ye=k[n>>2]|0;if(za>>>0>>0){Ye=za+1|0;k[f>>2]=Ye;if(xa)Ze=(ya&255)>>>1;else Ze=k[n>>2]|0;if(Ye>>>0>>0){if(xa)_e=l;else _e=k[m>>2]|0;$e=i[_e+Ye>>0]|0;af=Ye}else{$e=0;af=Ye}}else{$e=0;af=za}i[h>>0]=$e;ub=af;vb=6;wb=Aa;xb=Ba;break}case 553:{Ba=i[j>>0]|0;Aa=(Ba&1)==0;if(Aa)bf=(Ba&255)>>>1;else bf=k[n>>2]|0;if(Ca>>>0>>0){bf=Ca+1|0;k[f>>2]=bf;if(Aa)cf=(Ba&255)>>>1;else cf=k[n>>2]|0;if(bf>>>0>>0){if(Aa)df=l;else df=k[m>>2]|0;ef=i[df+bf>>0]|0;ff=bf}else{ef=0;ff=bf}}else{ef=0;ff=Ca}i[h>>0]=ef;ub=ff;vb=10;wb=Da;xb=Ea;break}case 565:{Ea=i[j>>0]|0;Da=(Ea&1)==0;if(Da)gf=(Ea&255)>>>1;else gf=k[n>>2]|0;if(Fa>>>0>>0){gf=Fa+1|0;k[f>>2]=gf;if(Da)hf=(Ea&255)>>>1;else hf=k[n>>2]|0;if(gf>>>0>>0){if(Da)jf=l;else jf=k[m>>2]|0;kf=i[jf+gf>>0]|0;lf=gf}else{kf=0;lf=gf}}else{kf=0;lf=Fa}i[h>>0]=kf;ub=lf;vb=46;wb=Ga;xb=Ha;break}case 599:{Ha=i[j>>0]|0;j=(Ha&1)==0;if(j)mf=(Ha&255)>>>1;else mf=k[n>>2]|0;if(Ua>>>0>>0){if(j)nf=(Ha&255)>>>1;else nf=k[n>>2]|0;if(Ua>>>0>>0){nf=Ua+1|0;k[f>>2]=nf;if(j)of=(Ha&255)>>>1;else of=k[n>>2]|0;if(nf>>>0>>0){if(j)pf=l;else pf=k[m>>2]|0;qf=i[pf+nf>>0]|0;rf=nf}else{qf=0;rf=nf}}else{qf=0;rf=Ua}i[h>>0]=qf;ub=rf;vb=139;wb=Va;xb=Wa}else{ub=Ua;vb=0;wb=Va;xb=Wa}break}}if((y|0)==616){ub=k[f>>2]|0;vb=lb;wb=kb;xb=jb}k[a+128>>2]=ub;k[a+120>>2]=vb;k[d>>2]=wb;k[e>>2]=xb;r=b;return}function ysa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;b=a+80|0;k[b>>2]=k[a+120>>2];c=a+124|0;d=k[c+4>>2]|0;e=a+84|0;k[e>>2]=k[c>>2];k[e+4>>2]=d;d=k[a+132>>2]|0;e=k[a+136>>2]|0;if(e)h0a(e);k[a+92>>2]=d;d=a+96|0;c=k[d>>2]|0;k[d>>2]=e;if(c)j0a(c);M2a(a+100|0,a+140|0)|0;k[a+112>>2]=k[a+152>>2];k[a+116>>2]=k[a+156>>2];k[a>>2]=k[a+40>>2];c=a+44|0;e=k[c+4>>2]|0;d=a+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=e;e=k[a+52>>2]|0;d=k[a+56>>2]|0;if(d)h0a(d);k[a+12>>2]=e;e=a+16|0;c=k[e>>2]|0;k[e>>2]=d;if(!c){f=a+20|0;g=a+60|0;M2a(f,g)|0;h=a+72|0;i=k[h>>2]|0;j=a+32|0;k[j>>2]=i;l=a+76|0;m=k[l>>2]|0;n=a+36|0;k[n>>2]=m;xsa(a);o=k[b>>2]|0;return o|0}j0a(c);f=a+20|0;g=a+60|0;M2a(f,g)|0;h=a+72|0;i=k[h>>2]|0;j=a+32|0;k[j>>2]=i;l=a+76|0;m=k[l>>2]|0;n=a+36|0;k[n>>2]=m;xsa(a);o=k[b>>2]|0;return o|0}function zsa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+16|0;d=c;e=a+184|0;f=a+160|0;g=a+172|0;h=f+1|0;j=a+168|0;l=a+164|0;a=i[e>>0]|0;m=a<<24>>24;do if((a+-48&255)>=10)if((a+-97&255)>=6)if((a+-65&255)<6){n=m+-55|0;o=6;break}else{p=0;break}else{n=m+-87|0;o=6;break}else{n=m+-48|0;o=6}while(0);a:do if((o|0)==6)if((n|0)<0)p=0;else{m=k[g>>2]|0;a=i[f>>0]|0;q=(a&1)==0;if(q)s=(a&255)>>>1;else s=k[l>>2]|0;if(m>>>0>>0){t=m+1|0;k[g>>2]=t;if(q)u=(a&255)>>>1;else u=k[l>>2]|0;if(t>>>0>>0){if(q)v=h;else v=k[j>>2]|0;w=i[v+t>>0]|0;i[e>>0]=w;y=w<<24>>24;do if((w+-48&255)>=10)if((w+-97&255)>=6)if((w+-65&255)<6){z=y+-55|0;break}else{p=1;break a}else{z=y+-87|0;break}else z=y+-48|0;while(0);if((z|0)<0){p=1;break}y=z+(n<<4)&255;if(q)A=(a&255)>>>1;else A=k[l>>2]|0;if(t>>>0>>0){w=m+2|0;k[g>>2]=w;if(q)B=(a&255)>>>1;else B=k[l>>2]|0;if(w>>>0>>0){if(q)C=h;else C=k[j>>2]|0;D=i[C+w>>0]|0}else D=0}else D=0;i[e>>0]=D;i[b>>0]=y;E=1;r=c;return E|0}}i[e>>0]=0;p=1}while(0);b=(k[g>>2]|0)>>>0>=p>>>0;q2a(d,329672,0);x=0;pa(57,b|0,d|0,816,285910,285947);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}K2a(d);d=(k[g>>2]|0)-p|0;k[g>>2]=d;if(!(i[f>>0]&1))F=h;else F=k[j>>2]|0;i[e>>0]=i[F+d>>0]|0;E=0;r=c;return E|0}function Asa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;c=r;r=r+16|0;d=c;e=a+184|0;f=a+160|0;g=a+172|0;h=f+1|0;j=a+168|0;l=a+164|0;a=i[e>>0]|0;m=0;n=0;a:while(1){o=a<<24>>24;do if((a+-48&255)>=10)if((a+-97&255)>=6)if((a+-65&255)<6){p=o+-55|0;break}else{q=m;break a}else{p=o+-87|0;break}else p=o+-48|0;while(0);if((p|0)<0){q=m;break}o=p+(n<<4)|0;s=k[g>>2]|0;t=i[f>>0]|0;u=(t&1)==0;if(u)v=(t&255)>>>1;else v=k[l>>2]|0;if(s>>>0>>0){w=s+1|0;k[g>>2]=w;if(u)y=(t&255)>>>1;else y=k[l>>2]|0;if(w>>>0>>0){if(u)z=h;else z=k[j>>2]|0;A=i[z+w>>0]|0}else A=0}else A=0;i[e>>0]=A;m=m+1|0;if((m|0)>=4){B=o;C=25;break}else{a=A;n=o}}if((C|0)==25){k[b>>2]=B;D=1;r=c;return D|0}B=(k[g>>2]|0)>>>0>=q>>>0;q2a(d,329672,0);x=0;pa(57,B|0,d|0,816,285910,285947);B=x;x=0;if(B&1){B=Hc()|0;K2a(d);Sc(B|0)}K2a(d);d=(k[g>>2]|0)-q|0;k[g>>2]=d;if(!(i[f>>0]&1))E=h;else E=k[j>>2]|0;i[e>>0]=i[E+d>>0]|0;D=0;r=c;return D|0}function Bsa(a,b){a=a|0;b=b|0;var c=0;if(b>>>0<128){L3a(a+140|0,b&255);return}if(b>>>0<2048){c=a+140|0;L3a(c,(b>>>6|192)&255);L3a(c,(b&63|128)&255);return}else{c=a+140|0;L3a(c,(b>>>12|224)&255);L3a(c,(b>>>6&63|128)&255);L3a(c,(b&63|128)&255);return}}function Csa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;b=a+172|0;c=k[b>>2]|0;d=a+184|0;e=i[d>>0]|0;f=e+-9<<24>>24;if((f&255)>=24){g=c;h=(g|0)!=(c|0);return h|0}j=a+160|0;l=j+1|0;m=a+168|0;n=a+164|0;a=e;e=c;o=f;while(1){if((8388627>>>(o&255)&1|0)==0|a<<24>>24==10){g=e;p=16;break}f=i[j>>0]|0;q=(f&1)==0;if(q)r=(f&255)>>>1;else r=k[n>>2]|0;if(e>>>0>=r>>>0){s=e;p=14;break}t=e+1|0;k[b>>2]=t;if(q)u=(f&255)>>>1;else u=k[n>>2]|0;if(t>>>0>=u>>>0){s=t;p=14;break}if(q)v=l;else v=k[m>>2]|0;a=i[v+t>>0]|0;i[d>>0]=a;o=a+-9<<24>>24;if((o&255)>=24){g=t;p=16;break}else e=t}if((p|0)==14){i[d>>0]=0;g=s;h=(g|0)!=(c|0);return h|0}else if((p|0)==16){h=(g|0)!=(c|0);return h|0}return 0}function Dsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;b=a+184|0;c=a+160|0;d=a+172|0;e=c+1|0;f=a+168|0;g=a+164|0;a=i[b>>0]|0;while(1){if(a<<24>>24==10){h=18;break}j=k[d>>2]|0;l=i[c>>0]|0;m=(l&1)==0;if(m)n=(l&255)>>>1;else n=k[g>>2]|0;if(j>>>0>>0){o=j+1|0;k[d>>2]=o;if(m)p=(l&255)>>>1;else p=k[g>>2]|0;if(o>>>0

      >>0){if(m)q=e;else q=k[f>>2]|0;r=i[q+o>>0]|0;s=o}else{r=0;s=o}}else{r=0;s=j}i[b>>0]=r;if(m)t=(l&255)>>>1;else t=k[g>>2]|0;if(s>>>0>>0)a=r;else{h=18;break}}if((h|0)==18)return 140;return 0}function Esa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;b=a+60|0;if(!(i[b>>0]&1)){i[b+1>>0]=0;i[b>>0]=0}else{i[k[a+68>>2]>>0]=0;k[a+64>>2]=0}c=a+160|0;d=a+172|0;e=k[d>>2]|0;f=i[c>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[a+164>>2]|0;a:do if(e>>>0>>0){j=e+1|0;k[d>>2]=j;if(g)l=(f&255)>>>1;else l=k[a+164>>2]|0;if(j>>>0>>0){if(g)m=c+1|0;else m=k[a+168>>2]|0;n=i[m+j>>0]|0;o=a+184|0;i[o>>0]=n;p=n+-9<<24>>24;if((p&255)<24){q=c+1|0;r=a+168|0;s=a+164|0;t=(f&255)>>>1;u=(f&255)>>>1;v=n;w=j;y=p;while(1){if(v<<24>>24==10|(8388627>>>(y&255)&1|0)==0){z=q;A=r;B=s;C=v;D=w;E=o;break a}if(g)F=t;else F=k[s>>2]|0;if(w>>>0>=F>>>0){G=w;break}p=w+1|0;k[d>>2]=p;if(g)H=u;else H=k[s>>2]|0;if(p>>>0>=H>>>0){G=p;break}if(g)I=q;else I=k[r>>2]|0;J=i[I+p>>0]|0;i[o>>0]=J;y=J+-9<<24>>24;if((y&255)>=24){z=q;A=r;B=s;C=J;D=p;E=o;break a}else{v=J;w=p}}i[o>>0]=0;z=q;A=r;B=s;C=0;D=G;E=o}else{K=n;L=o;M=j;N=17}}else{O=j;N=15}}else{O=e;N=15}while(0);if((N|0)==15){e=a+184|0;i[e>>0]=0;K=0;L=e;M=O;N=17}if((N|0)==17){z=c+1|0;A=a+168|0;B=a+164|0;C=K;D=M;E=L}L=f;f=D;D=C;while(1){C=(L&1)==0;if(C)P=(L&255)>>>1;else P=k[B>>2]|0;if(f>>>0>=P>>>0){N=91;break}if(D<<24>>24==10){M=(L&255)>>>1;K=(L&255)>>>1;O=f;e=1;while(1){if(!(8388627>>>(e&255)&1)){Q=O;break}if(C)R=M;else R=k[B>>2]|0;if(O>>>0>=R>>>0){S=O;N=46;break}G=O+1|0;k[d>>2]=G;if(C)T=K;else T=k[B>>2]|0;if(G>>>0>=T>>>0){S=G;N=46;break}if(C)U=z;else U=k[A>>2]|0;I=i[U+G>>0]|0;i[E>>0]=I;e=I+-9<<24>>24;if((e&255)>=24){Q=G;break}else O=G}if((N|0)==46){N=0;i[E>>0]=0;Q=S}if(C)V=(L&255)>>>1;else V=k[B>>2]|0;if((Q+3|0)>>>0>=V>>>0){N=91;break}if(C)W=z;else W=k[A>>2]|0;if((i[W+Q>>0]|0)!=47){N=91;break}if(C)X=z;else X=k[A>>2]|0;if((i[X+(Q+1)>>0]|0)!=47){N=91;break}if(C)Y=z;else Y=k[A>>2]|0;if((i[Y+(Q+2)>>0]|0)!=47){N=91;break}x=0;xa(605,b|0,10);O=x;x=0;if(O&1){N=74;break}O=k[d>>2]|0;e=i[c>>0]|0;K=(e&1)==0;if(K)Z=(e&255)>>>1;else Z=k[B>>2]|0;do if(O>>>0>>0){M=O+3|0;k[d>>2]=M;if(K)_=(e&255)>>>1;else _=k[B>>2]|0;if(M>>>0>=_>>>0){$=0;break}if(K)aa=z;else aa=k[A>>2]|0;$=i[aa+M>>0]|0}else $=0;while(0);i[E>>0]=$;ba=$}else ba=D;x=0;xa(605,b|0,ba|0);K=x;x=0;if(K&1){N=74;break}K=k[d>>2]|0;e=i[c>>0]|0;O=(e&1)==0;if(O)ca=(e&255)>>>1;else ca=k[B>>2]|0;if(K>>>0>>0){C=K+1|0;k[d>>2]=C;if(O)da=(e&255)>>>1;else da=k[B>>2]|0;if(C>>>0>>0){if(O)ea=z;else ea=k[A>>2]|0;fa=i[ea+C>>0]|0;ga=C}else{fa=0;ga=C}}else{fa=0;ga=K}i[E>>0]=fa;L=e;f=ga;D=fa}if((N|0)==74){fa=Hc()|0;if(!(i[b>>0]&1)){i[b+1>>0]=0;i[b>>0]=0;Sc(fa|0)}else{i[k[a+68>>2]>>0]=0;k[a+64>>2]=0;Sc(fa|0)}}else if((N|0)==91)return 118;return 0}function Fsa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=a+12|0;d=k[c>>2]|0;e=i[a>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+4>>2]|0;if(d>>>0>=g>>>0){h=0;return h|0}g=d+b|0;k[c>>2]=g;if(f)j=(e&255)>>>1;else j=k[a+4>>2]|0;if(g>>>0>=j>>>0){h=0;return h|0}if(f)l=a+1|0;else l=k[a+8>>2]|0;h=i[l+g>>0]|0;return h|0}function Gsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;b=a+160|0;c=a+172|0;d=k[c>>2]|0;e=i[b>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+164>>2]|0;if(d>>>0>>0){g=d+1|0;k[c>>2]=g;if(f)h=(e&255)>>>1;else h=k[a+164>>2]|0;if(g>>>0>>0){if(f)j=b+1|0;else j=k[a+168>>2]|0;l=i[j+g>>0]|0;m=g}else{l=0;m=g}}else{l=0;m=d}d=a+184|0;i[d>>0]=l;g=b+1|0;b=a+168|0;j=a+164|0;a=(e&255)>>>1;h=(e&255)>>>1;n=(e&255)>>>1;e=m;m=l;while(1){if(f)o=a;else o=k[j>>2]|0;if(e>>>0>=o>>>0){p=139;q=28;break}if(f)r=h;else r=k[j>>2]|0;if(e>>>0>>0){l=e+1|0;k[c>>2]=l;if(f)s=n;else s=k[j>>2]|0;if(l>>>0>>0){if(f)t=g;else t=k[b>>2]|0;u=i[t+l>>0]|0;v=l}else{u=0;v=l}}else{u=0;v=e}i[d>>0]=u;if(m<<24>>24==42&u<<24>>24==47)break;else{e=v;m=u}}if((q|0)==28)return p|0;i[d>>0]=32;p=140;return p|0}function Hsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;b=a+60|0;if(!(i[b>>0]&1)){i[b+1>>0]=0;i[b>>0]=0}else{i[k[a+68>>2]>>0]=0;k[a+64>>2]=0}c=a+160|0;d=a+172|0;e=a+184|0;f=c+1|0;g=a+168|0;h=a+164|0;j=i[c>>0]|0;l=k[d>>2]|0;m=0;a:while(1){n=(j&1)==0;if(n)o=(j&255)>>>1;else o=k[h>>2]|0;if(l>>>0>=o>>>0){p=139;q=111;break}do if((i[e>>0]|0)==10){r=(j&255)>>>1;s=(j&255)>>>1;t=l;u=1;while(1){if(!(8388627>>>(u&255)&1)){v=t;break}if(n)w=r;else w=k[h>>2]|0;if(t>>>0>=w>>>0){y=t;q=20;break}z=t+1|0;k[d>>2]=z;if(n)A=s;else A=k[h>>2]|0;if(z>>>0>=A>>>0){y=z;q=20;break}if(n)B=f;else B=k[g>>2]|0;C=i[B+z>>0]|0;i[e>>0]=C;u=C+-9<<24>>24;if((u&255)>=24){v=z;break}else t=z}if((q|0)==20){q=0;i[e>>0]=0;v=y}t=v+1|0;if(n)D=(j&255)>>>1;else D=k[h>>2]|0;if(t>>>0>>0){if(n)E=f;else E=k[g>>2]|0;if((i[E+v>>0]|0)==42){if(n)F=f;else F=k[g>>2]|0;if((i[F+t>>0]|0)!=47){if(m){x=0;xa(605,b|0,10);u=x;x=0;if(u&1){q=35;break a}G=i[c>>0]|0;H=k[d>>2]|0}else{G=j;H=v}u=(G&1)==0;if(u)I=(G&255)>>>1;else I=k[h>>2]|0;if(H>>>0>>0){s=H+2|0;k[d>>2]=s;if(u)J=(G&255)>>>1;else J=k[h>>2]|0;if(s>>>0>>0){if(u)K=f;else K=k[g>>2]|0;L=i[K+s>>0]|0;M=s}else{L=0;M=s}}else{L=0;M=H}i[e>>0]=L;N=M;O=G;break}}}if(n)P=(j&255)>>>1;else P=k[h>>2]|0;if(t>>>0

      >>0){if(n)Q=f;else Q=k[g>>2]|0;if((i[Q+v>>0]|0)==42){if(n)R=f;else R=k[g>>2]|0;if((i[R+t>>0]|0)==47){S=v;T=j;U=n;q=61;break a}}}if(m){x=0;xa(605,b|0,10);t=x;x=0;if(t&1){q=35;break a}N=k[d>>2]|0;O=i[c>>0]|0}else{N=v;O=j}}else{N=l;O=j}while(0);n=N+1|0;t=(O&1)==0;if(t)V=(O&255)>>>1;else V=k[h>>2]|0;if(n>>>0>>0){if(t)W=f;else W=k[g>>2]|0;if((i[W+N>>0]|0)==42){if(t)X=f;else X=k[g>>2]|0;if((i[X+n>>0]|0)==47){Y=O;Z=N;_=t;q=86;break}}}x=0;xa(605,b|0,i[e>>0]|0);t=x;x=0;if(t&1){q=35;break}t=k[d>>2]|0;n=i[c>>0]|0;s=(n&1)==0;if(s)$=(n&255)>>>1;else $=k[h>>2]|0;if(t>>>0<$>>>0){u=t+1|0;k[d>>2]=u;if(s)aa=(n&255)>>>1;else aa=k[h>>2]|0;if(u>>>0>>0){if(s)ba=f;else ba=k[g>>2]|0;ca=i[ba+u>>0]|0;da=u}else{ca=0;da=u}}else{ca=0;da=t}i[e>>0]=ca;j=n;l=da;m=1}if((q|0)==35){m=Hc()|0;if(!(i[b>>0]&1)){i[b+1>>0]=0;i[b>>0]=0;Sc(m|0)}else{i[k[a+68>>2]>>0]=0;k[a+64>>2]=0;Sc(m|0)}}else if((q|0)==61){if(U)ea=(T&255)>>>1;else ea=k[h>>2]|0;if(S>>>0>>0){ea=S+2|0;k[d>>2]=ea;if(U)fa=(T&255)>>>1;else fa=k[h>>2]|0;if(ea>>>0>>0){if(U)ga=f;else ga=k[g>>2]|0;ha=i[ga+ea>>0]|0}else ha=0}else ha=0;i[e>>0]=ha;p=118;return p|0}else if((q|0)==86){if(_)ia=(Y&255)>>>1;else ia=k[h>>2]|0;if(Z>>>0>>0){ia=Z+2|0;k[d>>2]=ia;if(_)ja=(Y&255)>>>1;else ja=k[h>>2]|0;if(ia>>>0>>0){if(_)ka=f;else ka=k[g>>2]|0;la=i[ka+ia>>0]|0}else la=0}else la=0;i[e>>0]=la;p=118;return p|0}else if((q|0)==111)return p|0;return 0}function Isa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;b=a+172|0;c=k[b>>2]|0;d=a+160|0;e=i[d>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+164>>2]|0;if(c>>>0>>0){g=c+1|0;k[b>>2]=g;if(f)h=(e&255)>>>1;else h=k[a+164>>2]|0;if(g>>>0>>0){if(f)j=d+1|0;else j=k[a+168>>2]|0;h=i[j+g>>0]|0;j=a+184|0;i[j>>0]=h;switch(h<<24>>24){case 47:{if(f)l=(e&255)>>>1;else l=k[a+164>>2]|0;if(g>>>0>>0){l=c+2|0;k[b>>2]=l;if(f)m=(e&255)>>>1;else m=k[a+164>>2]|0;if(l>>>0>>0){if(f)n=d+1|0;else n=k[a+168>>2]|0;o=i[n+l>>0]|0;p=l}else{o=0;p=l}}else{o=0;p=g}i[j>>0]=o;if(f)q=(e&255)>>>1;else q=k[a+164>>2]|0;if(p>>>0>=q>>>0){r=140;return r|0}if(o<<24>>24==47){k[a+44>>2]=c;Esa(a)|0;k[a+48>>2]=k[b>>2];k[a+40>>2]=118;r=140;return r|0}q=d+1|0;l=a+168|0;n=a+164|0;m=(e&255)>>>1;h=(e&255)>>>1;s=(e&255)>>>1;t=o;o=p;while(1){if(t<<24>>24==10){r=140;u=148;break}if(f)v=m;else v=k[n>>2]|0;if(o>>>0>>0){p=o+1|0;k[b>>2]=p;if(f)w=h;else w=k[n>>2]|0;if(p>>>0>>0){if(f)x=q;else x=k[l>>2]|0;y=i[x+p>>0]|0;z=p}else{y=0;z=p}}else{y=0;z=o}i[j>>0]=y;if(f)A=s;else A=k[n>>2]|0;if(z>>>0>>0){t=y;o=z}else{r=140;u=148;break}}if((u|0)==148)return r|0;break}case 42:{if(f)B=(e&255)>>>1;else B=k[a+164>>2]|0;if(g>>>0>>0){B=c+2|0;k[b>>2]=B;if(f)C=(e&255)>>>1;else C=k[a+164>>2]|0;if(B>>>0>>0){if(f)D=d+1|0;else D=k[a+168>>2]|0;E=i[D+B>>0]|0;F=B}else{E=0;F=B}}else{E=0;F=g}i[j>>0]=E;if(f)G=(e&255)>>>1;else G=k[a+164>>2]|0;if(F>>>0>=G>>>0){r=140;return r|0}if(E<<24>>24!=42){if(f)H=(e&255)>>>1;else H=k[a+164>>2]|0;if(F>>>0>>0){H=F+1|0;k[b>>2]=H;if(f)I=(e&255)>>>1;else I=k[a+164>>2]|0;if(H>>>0>>0){if(f)J=d+1|0;else J=k[a+168>>2]|0;K=i[J+H>>0]|0;L=H}else{K=0;L=H}}else{K=0;L=F}i[j>>0]=K;H=a+168|0;J=a+164|0;I=(e&255)>>>1;a:do if(f){if(L>>>0>>0){M=L;N=K}else{r=139;return r|0}while(1){M=M+1|0;k[b>>2]=M;if(M>>>0>>0){E=i[d+1+M>>0]|0;i[j>>0]=E;if(N<<24>>24==42&E<<24>>24==47)break a;else O=E}else{i[j>>0]=0;O=0}if(M>>>0>=I>>>0){r=139;break}else N=O}return r|0}else{if(L>>>0<(k[J>>2]|0)>>>0){P=L;Q=K}else{r=139;return r|0}while(1){do if(P>>>0<(k[J>>2]|0)>>>0){E=P+1|0;k[b>>2]=E;if(E>>>0>=(k[J>>2]|0)>>>0){R=E;u=131;break}G=i[(k[H>>2]|0)+E>>0]|0;i[j>>0]=G;if(Q<<24>>24==42&G<<24>>24==47)break a;else{S=G;T=E}}else{R=P;u=131}while(0);if((u|0)==131){u=0;i[j>>0]=0;S=0;T=R}if(T>>>0<(k[J>>2]|0)>>>0){P=T;Q=S}else{r=139;break}}return r|0}while(0);i[j>>0]=32;r=140;return r|0}if(f)U=(e&255)>>>1;else U=k[a+164>>2]|0;b:do if(F>>>0>>0){S=F+1|0;k[b>>2]=S;if(f)V=(e&255)>>>1;else V=k[a+164>>2]|0;if(S>>>0>>0){if(f)W=d+1|0;else W=k[a+168>>2]|0;Q=i[W+S>>0]|0;i[j>>0]=Q;T=Q+-9<<24>>24;if((T&255)<24){P=d+1|0;J=a+168|0;R=a+164|0;H=(e&255)>>>1;K=(e&255)>>>1;L=Q;Q=S;O=T;while(1){if(L<<24>>24==10|(8388627>>>(O&255)&1|0)==0){X=Q;break b}if(f)Y=H;else Y=k[R>>2]|0;if(Q>>>0>=Y>>>0){Z=Q;break}T=Q+1|0;k[b>>2]=T;if(f)_=K;else _=k[R>>2]|0;if(T>>>0>=_>>>0){Z=T;break}if(f)$=P;else $=k[J>>2]|0;L=i[$+T>>0]|0;i[j>>0]=L;O=L+-9<<24>>24;if((O&255)>=24){X=T;break b}else Q=T}i[j>>0]=0;X=Z}else X=S}else{aa=S;u=74}}else{aa=F;u=74}while(0);if((u|0)==74){i[j>>0]=0;X=aa}if(f)ba=(e&255)>>>1;else ba=k[a+164>>2]|0;if(X>>>0>>0){if(f)ca=d+1|0;else ca=k[a+168>>2]|0;if((i[ca+X>>0]|0)==47){if(f)da=(e&255)>>>1;else da=k[a+164>>2]|0;do if(X>>>0>>0){ca=X+1|0;k[b>>2]=ca;if(f)ea=(e&255)>>>1;else ea=k[a+164>>2]|0;if(ca>>>0>=ea>>>0){fa=0;break}if(f)ga=d+1|0;else ga=k[a+168>>2]|0;fa=i[ga+ca>>0]|0}else fa=0;while(0);i[j>>0]=fa;r=140;return r|0}}k[a+44>>2]=c;fa=Hsa(a)|0;k[a+48>>2]=k[b>>2];k[a+40>>2]=fa;r=140;return r|0}case 61:{if(f)ha=(e&255)>>>1;else ha=k[a+164>>2]|0;if(g>>>0>>0){ha=c+2|0;k[b>>2]=ha;if(f)ia=(e&255)>>>1;else ia=k[a+164>>2]|0;if(ha>>>0>>0){if(f)ja=d+1|0;else ja=k[a+168>>2]|0;ka=i[ja+ha>>0]|0}else ka=0}else ka=0;i[j>>0]=ka;r=22;return r|0}default:{r=36;return r|0}}}}i[a+184>>0]=0;r=36;return r|0}function Jsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;b=a+184|0;c=i[b>>0]|0;d=a+160|0;e=a+172|0;f=k[e>>2]|0;g=i[d>>0]|0;h=(g&1)==0;if(h)j=(g&255)>>>1;else j=k[a+164>>2]|0;if(f>>>0>>0){j=f+1|0;k[e>>2]=j;if(h)l=(g&255)>>>1;else l=k[a+164>>2]|0;if(j>>>0>>0){if(h)m=d+1|0;else m=k[a+168>>2]|0;n=i[m+j>>0]|0}else n=0}else n=0;i[b>>0]=n;j=a+140|0;if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0;o=n}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0;o=i[b>>0]|0}a:do if(o<<24>>24!=c<<24>>24){n=d+1|0;m=a+168|0;h=a+164|0;l=o;while(1){g=k[e>>2]|0;f=i[d>>0]|0;p=(f&1)==0;if(p)q=(f&255)>>>1;else q=k[h>>2]|0;if(g>>>0>=q>>>0){r=l;s=47;break}if(l<<24>>24==10){r=10;s=47;break}if(p)t=(f&255)>>>1;else t=k[h>>2]|0;if(g>>>0>>0){u=g+1|0;k[e>>2]=u;if(p)v=(f&255)>>>1;else v=k[h>>2]|0;if(u>>>0>>0){if(p)w=n;else w=k[m>>2]|0;y=i[w+u>>0]|0;z=u}else{y=0;z=u}}else{y=0;z=g}i[b>>0]=y;if(l<<24>>24==92){if(p)A=(f&255)>>>1;else A=k[h>>2]|0;if(z>>>0>=A>>>0)break;x=0;f=Ba(615,a|0)|0;p=x;x=0;if(p&1){s=42;break}if(!f)break}else{x=0;xa(605,j|0,l|0);f=x;x=0;if(f&1){s=42;break}}l=i[b>>0]|0;if(l<<24>>24==c<<24>>24)break a}if((s|0)==42){l=Hc()|0;if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0;Sc(l|0)}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0;Sc(l|0)}}else if((s|0)==47?r<<24>>24==c<<24>>24:0)break;if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0;B=139;return B|0}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0;B=139;return B|0}}while(0);j=k[e>>2]|0;c=i[d>>0]|0;r=(c&1)==0;if(r)C=(c&255)>>>1;else C=k[a+164>>2]|0;if(j>>>0>>0){C=j+1|0;k[e>>2]=C;if(r)D=(c&255)>>>1;else D=k[a+164>>2]|0;if(C>>>0>>0){if(r)E=d+1|0;else E=k[a+168>>2]|0;F=i[E+C>>0]|0}else F=0}else F=0;i[b>>0]=F;B=117;return B|0}function Ksa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0;c=r;r=r+32|0;d=c+12|0;e=c;f=a+140|0;if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0}x=0;a:do if(b<<24>>24==46){L3a(f,46);g=x;x=0;if(!(g&1)){g=a+184|0;h=i[g>>0]|0;if((h+-48&255)<10){j=a+160|0;l=a+172|0;m=j+1|0;n=a+168|0;o=a+164|0;p=h;while(1){x=0;xa(605,f|0,p|0);q=x;x=0;if(q&1){s=22;break}q=k[l>>2]|0;t=i[j>>0]|0;u=(t&1)==0;if(u)v=(t&255)>>>1;else v=k[o>>2]|0;if(q>>>0>=v>>>0)break;w=q+1|0;k[l>>2]=w;if(u)y=(t&255)>>>1;else y=k[o>>2]|0;if(w>>>0>=y>>>0)break;if(u)z=m;else z=k[n>>2]|0;u=i[z+w>>0]|0;i[g>>0]=u;if((u+-48&255)<10)p=u;else{A=g;B=u;C=0;s=121;break a}}if((s|0)==22){p=Hc()|0;D=p;E=M;s=27;break}i[g>>0]=0;F=116;r=c;return F|0}else{A=g;B=h;C=0;s=121}}else s=26}else{q2a(d,329672,0);p=x;x=0;if(!(p&1)){x=0;pa(57,b<<24>>24==0|0,d|0,740,285910,285996);p=x;x=0;if(p&1){p=Hc()|0;n=M;K2a(d);G=n;H=p;break}K2a(d);p=a+184|0;n=i[p>>0]|0;b:do if(n<<24>>24==48){x=0;xa(605,f|0,48);m=x;x=0;if(m&1){s=26;break a}m=a+160|0;o=a+172|0;l=k[o>>2]|0;j=i[m>>0]|0;u=(j&1)==0;if(u)I=(j&255)>>>1;else I=k[a+164>>2]|0;if(l>>>0>>0){w=l+1|0;k[o>>2]=w;if(u)J=(j&255)>>>1;else J=k[a+164>>2]|0;if(w>>>0>>0){if(u)K=m+1|0;else K=k[a+168>>2]|0;u=i[K+w>>0]|0;i[p>>0]=u;switch(u<<24>>24){case 88:case 120:break;default:{L=u;break b}}x=0;xa(605,f|0,u|0);u=x;x=0;if(u&1){s=26;break a}u=k[o>>2]|0;w=i[m>>0]|0;j=(w&1)==0;if(j)N=(w&255)>>>1;else N=k[a+164>>2]|0;if(u>>>0>>0){l=u+1|0;k[o>>2]=l;if(j)O=(w&255)>>>1;else O=k[a+164>>2]|0;if(l>>>0>>0){if(j)P=m+1|0;else P=k[a+168>>2]|0;j=i[P+l>>0]|0;i[p>>0]=j;if((j+-48&255)>=10)switch(j<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:{s=172;break a}}l=m+1|0;w=a+168|0;u=a+164|0;t=j;while(1){if((t+-48&255)>=10)switch(t<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:{A=p;B=t;C=1;s=121;break a}}x=0;xa(605,f|0,t|0);j=x;x=0;if(j&1)break;j=k[o>>2]|0;q=i[m>>0]|0;Q=(q&1)==0;if(Q)R=(q&255)>>>1;else R=k[u>>2]|0;do if(j>>>0>>0){S=j+1|0;k[o>>2]=S;if(Q)T=(q&255)>>>1;else T=k[u>>2]|0;if(S>>>0>=T>>>0){U=0;break}if(Q)V=l;else V=k[w>>2]|0;U=i[V+S>>0]|0}else U=0;while(0);i[p>>0]=U;t=U}t=Hc()|0;D=t;E=M;s=27;break a}}i[p>>0]=0;s=172;break a}}i[p>>0]=0;F=116;r=c;return F|0}else L=n;while(0);c:do if((L+-48&255)<10){n=a+160|0;h=a+172|0;g=n+1|0;t=a+168|0;w=a+164|0;l=L;while(1){x=0;xa(605,f|0,l|0);u=x;x=0;if(u&1){s=24;break}u=k[h>>2]|0;o=i[n>>0]|0;m=(o&1)==0;if(m)W=(o&255)>>>1;else W=k[w>>2]|0;if(u>>>0>=W>>>0)break;Q=u+1|0;k[h>>2]=Q;if(m)X=(o&255)>>>1;else X=k[w>>2]|0;if(Q>>>0>=X>>>0)break;if(m)Y=g;else Y=k[t>>2]|0;m=i[Y+Q>>0]|0;i[p>>0]=m;if((m+-48&255)<10)l=m;else{Z=m;break c}}if((s|0)==24){l=Hc()|0;D=l;E=M;s=27;break a}i[p>>0]=0;F=116;r=c;return F|0}else Z=L;while(0);if(Z<<24>>24==46){x=0;xa(605,f|0,46);l=x;x=0;if(l&1)s=26;else{l=a+160|0;t=a+172|0;g=k[t>>2]|0;w=i[l>>0]|0;h=(w&1)==0;if(h)_=(w&255)>>>1;else _=k[a+164>>2]|0;if(g>>>0<_>>>0){n=g+1|0;k[t>>2]=n;if(h)$=(w&255)>>>1;else $=k[a+164>>2]|0;if(n>>>0<$>>>0){if(h)aa=l+1|0;else aa=k[a+168>>2]|0;h=i[aa+n>>0]|0;i[p>>0]=h;if((h+-48&255)>=10){A=p;B=h;C=0;s=121;break}n=l+1|0;w=a+168|0;g=a+164|0;m=h;while(1){x=0;xa(605,f|0,m|0);h=x;x=0;if(h&1){s=23;break}h=k[t>>2]|0;Q=i[l>>0]|0;o=(Q&1)==0;if(o)ba=(Q&255)>>>1;else ba=k[g>>2]|0;if(h>>>0>=ba>>>0)break;u=h+1|0;k[t>>2]=u;if(o)ca=(Q&255)>>>1;else ca=k[g>>2]|0;if(u>>>0>=ca>>>0)break;if(o)da=n;else da=k[w>>2]|0;o=i[da+u>>0]|0;i[p>>0]=o;if((o+-48&255)<10)m=o;else{A=p;B=o;C=0;s=121;break a}}if((s|0)==23){m=Hc()|0;D=m;E=M;s=27;break}i[p>>0]=0;F=116;r=c;return F|0}}i[p>>0]=0;F=116;r=c;return F|0}}else{A=p;B=Z;C=0;s=121}}else s=26}while(0);d:do if((s|0)==121){e:do switch(B<<24>>24){case 69:case 101:{x=0;fb(140,e|0,286050,49);Z=x;x=0;if(Z&1){s=26;break d}x=0;pa(57,(C|0)!=1|0,e|0,771,285910,285996);Z=x;x=0;if(Z&1){Z=Hc()|0;da=M;K2a(e);G=da;H=Z;break d}K2a(e);if(C){s=172;break d}x=0;xa(605,f|0,i[A>>0]|0);Z=x;x=0;if(Z&1){s=26;break d}Z=a+160|0;da=a+172|0;ca=k[da>>2]|0;ba=i[Z>>0]|0;aa=(ba&1)==0;if(aa)ea=(ba&255)>>>1;else ea=k[a+164>>2]|0;if(ca>>>0>>0){$=ca+1|0;k[da>>2]=$;if(aa)fa=(ba&255)>>>1;else fa=k[a+164>>2]|0;if($>>>0>>0){if(aa)ga=Z+1|0;else ga=k[a+168>>2]|0;aa=i[ga+$>>0]|0;i[A>>0]=aa;switch(aa<<24>>24){case 45:case 43:{x=0;xa(605,f|0,aa|0);$=x;x=0;if($&1){s=26;break d}$=k[da>>2]|0;ba=i[Z>>0]|0;ca=(ba&1)==0;if(ca)ha=(ba&255)>>>1;else ha=k[a+164>>2]|0;do if($>>>0>>0){_=$+1|0;k[da>>2]=_;if(ca)ia=(ba&255)>>>1;else ia=k[a+164>>2]|0;if(_>>>0>=ia>>>0){ja=0;break}if(ca)ka=Z+1|0;else ka=k[a+168>>2]|0;ja=i[ka+_>>0]|0}else ja=0;while(0);i[A>>0]=ja;la=ja;break}default:la=aa}if((la+-48&255)>=10){s=172;break d}ca=Z+1|0;ba=a+168|0;$=a+164|0;_=la;while(1){x=0;xa(605,f|0,_|0);L=x;x=0;if(L&1){s=21;break}L=k[da>>2]|0;Y=i[Z>>0]|0;X=(Y&1)==0;if(X)ma=(Y&255)>>>1;else ma=k[$>>2]|0;if(L>>>0>=ma>>>0)break;W=L+1|0;k[da>>2]=W;if(X)na=(Y&255)>>>1;else na=k[$>>2]|0;if(W>>>0>=na>>>0)break;if(X)oa=ca;else oa=k[ba>>2]|0;X=i[oa+W>>0]|0;i[A>>0]=X;if((X+-48&255)<10)_=X;else{qa=X;break e}}if((s|0)==21){_=Hc()|0;D=_;E=M;s=27;break d}i[A>>0]=0;F=116;r=c;return F|0}}i[A>>0]=0;s=172;break d;break}default:qa=B}while(0);if((qa+-48&255)>=10){switch(qa<<24>>24){case 36:case 95:{s=172;break d;break}default:{}}if(((qa&-33)+-65&255)>=26){F=116;r=c;return F|0}else s=172}else s=172}while(0);if((s|0)==26){qa=Hc()|0;D=qa;E=M;s=27}else if((s|0)==172)if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0;F=139;r=c;return F|0}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0;F=139;r=c;return F|0}if((s|0)==27){G=E;H=D}if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0;Sc(H|0)}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0;Sc(H|0)}return 0}function Lsa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+16|0;d=c;e=b+184|0;f=i[e>>0]|0;switch(f<<24>>24){case 36:case 95:{g=1;break}default:if((f+-97&255)<26)g=1;else g=(f+-65&255)<26}q2a(d,329672,0);x=0;pa(57,g|0,d|0,794,285910,286100);g=x;x=0;if(g&1){g=Hc()|0;f=M;K2a(d);h=f;j=g;Sc(j|0)}K2a(d);d=b+140|0;if(!(i[d>>0]&1)){i[d+1>>0]=0;i[d>>0]=0}else{i[k[b+148>>2]>>0]=0;k[b+144>>2]=0}x=0;xa(605,d|0,i[e>>0]|0);g=x;x=0;do if(g&1){f=Hc()|0;l=f;m=M}else{f=b+160|0;n=b+172|0;o=k[n>>2]|0;p=i[f>>0]|0;q=(p&1)==0;if(q)s=(p&255)>>>1;else s=k[b+164>>2]|0;if(o>>>0>>0){t=o+1|0;k[n>>2]=t;if(q)u=(p&255)>>>1;else u=k[b+164>>2]|0;if(t>>>0>>0){if(q)v=f+1|0;else v=k[b+168>>2]|0;w=i[v+t>>0]|0}else w=0}else w=0;t=f+1|0;q=b+168|0;p=b+164|0;o=w;a:while(1){i[e>>0]=o;switch(o<<24>>24){case 36:case 95:break;default:if(!((o+-48&255)<10|((o&-33)+-65&255)<26))break a}x=0;xa(605,d|0,o|0);y=x;x=0;if(y&1){z=38;break}y=k[n>>2]|0;A=i[f>>0]|0;B=(A&1)==0;if(B)C=(A&255)>>>1;else C=k[p>>2]|0;if(y>>>0>=C>>>0){o=0;continue}D=y+1|0;k[n>>2]=D;if(B)E=(A&255)>>>1;else E=k[p>>2]|0;if(D>>>0>=E>>>0){o=0;continue}if(B)F=t;else F=k[q>>2]|0;o=i[F+D>>0]|0}if((z|0)==38){o=Hc()|0;l=o;m=M;break}x=0;xa(808,a|0,d|0);o=x;x=0;if(!(o&1)){r=c;return}o=Hc()|0;h=M;j=o;Sc(j|0)}while(0);if(!(i[d>>0]&1)){i[d+1>>0]=0;i[d>>0]=0;h=m;j=l;Sc(j|0)}else{i[k[b+148>>2]>>0]=0;k[b+144>>2]=0;h=m;j=l;Sc(j|0)}}function Msa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;b=r;r=r+16|0;c=b;d=a+184|0;e=i[d>>0]|0;f=a+160|0;g=a+172|0;h=k[g>>2]|0;j=i[f>>0]|0;l=(j&1)==0;if(l)m=(j&255)>>>1;else m=k[a+164>>2]|0;if(h>>>0>>0){m=h+1|0;k[g>>2]=m;if(l)n=(j&255)>>>1;else n=k[a+164>>2]|0;if(m>>>0>>0){if(l)o=f+1|0;else o=k[a+168>>2]|0;p=i[o+m>>0]|0}else p=0}else p=0;i[d>>0]=p;m=a+140|0;if(!(i[m>>0]&1)){i[m+1>>0]=0;i[m>>0]=0;q=p}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0;q=i[d>>0]|0}a:do if(q<<24>>24!=e<<24>>24){p=a+164|0;o=q;while(1){l=i[f>>0]|0;if(!(l&1))s=(l&255)>>>1;else s=k[p>>2]|0;if((k[g>>2]|0)>>>0>=s>>>0){t=o;u=31;break}if(o<<24>>24==10){t=10;u=31;break}i[c>>0]=o;x=0;l=Ta(622,a|0,c|0)|0;n=x;x=0;if(n&1){u=25;break}if(!l){u=45;break}x=0;xa(605,m|0,i[c>>0]|0);l=x;x=0;if(l&1){u=25;break}o=i[d>>0]|0;if(o<<24>>24==e<<24>>24)break a}if((u|0)==25){o=Hc()|0;if(!(i[m>>0]&1)){i[m+1>>0]=0;i[m>>0]=0;Sc(o|0)}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0;Sc(o|0)}}else if((u|0)==31)if(t<<24>>24==e<<24>>24)break;if(!(i[m>>0]&1)){i[m+1>>0]=0;i[m>>0]=0;v=139;r=b;return v|0}else{i[k[a+148>>2]>>0]=0;k[a+144>>2]=0;v=139;r=b;return v|0}}while(0);m=k[g>>2]|0;e=i[f>>0]|0;t=(e&1)==0;if(t)w=(e&255)>>>1;else w=k[a+164>>2]|0;if(m>>>0>>0){w=m+1|0;k[g>>2]=w;if(t)y=(e&255)>>>1;else y=k[a+164>>2]|0;if(w>>>0>>0){if(t)z=f+1|0;else z=k[a+168>>2]|0;A=i[z+w>>0]|0}else A=0}else A=0;i[d>>0]=A;v=117;r=b;return v|0}function Nsa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+16|0;c=b+4|0;d=b;e=a+184|0;f=i[e>>0]|0;i[c>>0]=f;g=a+160|0;h=a+172|0;j=k[h>>2]|0;l=i[g>>0]|0;m=(l&1)==0;if(m)n=(l&255)>>>1;else n=k[a+164>>2]|0;if(j>>>0>>0){n=j+1|0;k[h>>2]=n;if(m)o=(l&255)>>>1;else o=k[a+164>>2]|0;if(n>>>0>>0){if(m)p=g+1|0;else p=k[a+168>>2]|0;q=i[p+n>>0]|0}else q=0}else q=0;i[e>>0]=q;if(f<<24>>24==10){s=1;r=b;return s|0}a:do switch(f<<24>>24|0){case 120:{if(zsa(a,c)|0){t=i[c>>0]|0;break a}else{s=0;r=b;return s|0}break}case 117:{if(Asa(a,d)|0){Bsa(a,k[d>>2]|0);u=1}else u=0;s=u;r=b;return s|0}case 118:{i[c>>0]=11;t=11;break}case 98:{i[c>>0]=8;t=8;break}case 102:{i[c>>0]=12;t=12;break}case 110:{i[c>>0]=10;t=10;break}case 114:{i[c>>0]=13;t=13;break}case 116:{i[c>>0]=9;t=9;break}default:t=f}while(0);L3a(a+140|0,t);s=1;r=b;return s|0}function Osa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=a+184|0;c=i[b>>0]|0;if((c+-48&255)>=10)return;d=a+140|0;e=a+160|0;f=a+172|0;g=e+1|0;h=a+168|0;j=a+164|0;a=c;while(1){L3a(d,a);c=k[f>>2]|0;l=i[e>>0]|0;m=(l&1)==0;if(m)n=(l&255)>>>1;else n=k[j>>2]|0;if(c>>>0>=n>>>0)break;o=c+1|0;k[f>>2]=o;if(m)p=(l&255)>>>1;else p=k[j>>2]|0;if(o>>>0>=p>>>0)break;if(m)q=g;else q=k[h>>2]|0;a=i[q+o>>0]|0;i[b>>0]=a;if((a+-48&255)>=10){r=15;break}}if((r|0)==15)return;i[b>>0]=0;return}function Psa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+16|0;d=c;e=a+12|0;f=(k[e>>2]|0)>>>0>=b>>>0;q2a(d,329672,0);x=0;pa(57,f|0,d|0,816,285910,285947);f=x;x=0;if(f&1){f=Hc()|0;K2a(d);Sc(f|0)}K2a(d);d=(k[e>>2]|0)-b|0;k[e>>2]=d;if(!(i[a>>0]&1)){g=a+1|0;h=g+d|0;j=i[h>>0]|0;r=c;return j|0}else{g=k[a+8>>2]|0;h=g+d|0;j=i[h>>0]|0;r=c;return j|0}return 0}function Qsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=i[b>>0]|0;if(!(d&1))e=(d&255)>>>1;else e=k[b+4>>2]|0;d=e>>>0>c>>>0?c:e;e=(I4a(b,10,(d|0)==0?0:d+-1|0)|0)+1|0;d=E4a(b,10,e)|0;c=i[b>>0]|0;if(!(c&1))f=(c&255)>>>1;else f=k[b+4>>2]|0;F2a(a,b,e,(f>>>0>>0?f:d)-e|0,b);return}function Rsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[b>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=b+1|0;g=e>>>0>c>>>0?c:e;h=b+1|0}else{e=k[b+4>>2]|0;d=k[b+8>>2]|0;f=d;g=e>>>0>c>>>0?c:e;h=d}d=f+g|0;if((h|0)==(d|0))j=0;else{f=h;h=0;while(1){e=((i[f>>0]|0)==10&1)+h|0;f=f+1|0;if((f|0)==(d|0)){j=e;break}else h=e}}if(!g){l=0;m=g-l|0;k[a>>2]=j;n=a+4|0;k[n>>2]=m;return}l=(I4a(b,10,g+-1|0)|0)+1|0;m=g-l|0;k[a>>2]=j;n=a+4|0;k[n>>2]=m;return}function Ssa(){k[11112]=0;k[11113]=0;k[11114]=0;return}function Tsa(a){a=a|0;k[a>>2]=44428;K2a(a+12|0);c0a(a);return}function Usa(a){a=a|0;k[a>>2]=44428;K2a(a+12|0);c0a(a);OBa(a);return}function Vsa(a){a=a|0;K2a(a+12|0);return}function Wsa(a){a=a|0;OBa(a);return}function Xsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;d=r;r=r+112|0;e=d+100|0;f=d+96|0;g=d+60|0;h=d+44|0;j=d+36|0;l=d+84|0;m=d+72|0;n=d+48|0;o=d+40|0;p=d+32|0;q=d+20|0;s=d+16|0;t=d+12|0;u=d;k[a+16>>2]=c;c=a+20|0;i[c>>0]=0;v=a+12|0;k[v>>2]=0;w=i[b>>0]|0;y=(w&1)==0;z=b+8|0;A=b+1|0;B=y?A:k[z>>2]|0;C=y?(w&255)>>>1:k[b+4>>2]|0;w=B+C|0;y=w;if(!C){D=i[c>>0]|0;E=D<<24>>24==0;r=d;return E|0}C=q+8|0;F=q+4|0;G=q+1|0;H=B;a:while(1){B=H;b:do if((H|0)==(w|0)){I=y;J=w}else{K=H;while(1){if((i[K>>0]|0)==64){L=K;break}K=K+1|0;if((K|0)==(w|0)){L=w;break}}K=L;N=H;while(1){if((i[N>>0]|0)==10){I=K;J=N;break b}N=N+1|0;if((N|0)==(w|0)){I=K;J=w;break}}}while(0);K=I;do if(!((K|0)!=(w|0)&K>>>0>>0)){if(k[v>>2]|0){q2a(g,329672,0);x=0;pa(57,1,g|0,126,286322,286367);N=x;x=0;if(N&1){O=43;break a}K2a(g);k[h>>2]=B;k[j>>2]=y;k[f>>2]=k[h>>2];k[e>>2]=k[j>>2];P=$sa(a,f,e,1)|0;break}if((H|0)==(((i[b>>0]&1)==0?A:k[z>>2]|0)|0)){k[s>>2]=B;k[t>>2]=y;q2a(u,286446,6);x=0;k[f>>2]=k[s>>2];k[e>>2]=k[t>>2];N=db(77,a|0,f|0,e|0,u|0)|0;Q=x;x=0;if(Q&1){O=49;break a}K2a(u);P=N;break}else{if((J|0)==(w|0)){O=52;break a}P=J+1|0;break}}else{N=K;while(1){if((i[N>>0]|0)==32){R=N;break}N=N+1|0;if((N|0)==(w|0)){R=w;break}}N=K;while(1){if((i[N>>0]|0)==10){S=N;break}N=N+1|0;if((N|0)==(w|0)){S=w;break}}N=R>>>0>>0?R:S;Q=N;if((N|0)==(w|0)){T=I;U=K;V=Q;O=16;break a}k[o>>2]=N+1;k[p>>2]=y;W=K+1|0;X=W;Y=Q-X|0;if(Y>>>0<=4294967279)if(Y>>>0<11){i[q>>0]=Y<<1;Z=G}else O=34;else{GBa(q);O=34}if((O|0)==34){O=0;Q=Y+16&-16;_=KBa(Q)|0;k[C>>2]=_;k[q>>2]=Q|1;k[F>>2]=Y;Z=_}if((W|0)==(N|0))$=Z;else{_=W;W=X;X=Z;while(1){i[X>>0]=i[_>>0]|0;Y=W+1|0;Q=X+1|0;if((Y|0)==(N|0)){$=Q;break}else{_=Y;W=Y;X=Q}}}i[$>>0]=0;x=0;k[f>>2]=k[o>>2];k[e>>2]=k[p>>2];X=db(77,a|0,f|0,e|0,q|0)|0;W=x;x=0;if(W&1){O=40;break a}K2a(q);P=X}while(0);if((P|0)==(w|0)){O=52;break}else H=P}if((O|0)==16){P=V-T|0;if(P>>>0<=4294967279)if(P>>>0<11){i[n>>0]=P<<1;aa=U;ba=T;ca=n+1|0}else O=20;else{GBa(n);O=20}if((O|0)==20){V=P+16&-16;H=KBa(V)|0;k[n+8>>2]=H;k[n>>2]=V|1;k[n+4>>2]=P;aa=U;ba=T;ca=H}while(1){i[ca>>0]=i[aa>>0]|0;H=ba+1|0;T=ca+1|0;if((H|0)==(w|0)){da=T;break}else{aa=H;ba=H;ca=T}}i[da>>0]=0;x=0;da=Fa(86,n|0,0,286300)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;ea=ca;fa=M}else{k[m>>2]=k[da>>2];k[m+4>>2]=k[da+4>>2];k[m+8>>2]=k[da+8>>2];k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;x=0;da=Ta(484,m|0,286312)|0;ca=x;x=0;do if(ca&1){ba=Hc()|0;ga=ba;ha=M}else{k[l>>2]=k[da>>2];k[l+4>>2]=k[da+4>>2];k[l+8>>2]=k[da+8>>2];k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;x=0;xa(878,a|0,l|0);ba=x;x=0;if(ba&1){ba=Hc()|0;aa=M;K2a(l);ga=ba;ha=aa;break}K2a(l);K2a(m);K2a(n);D=i[c>>0]|0;E=D<<24>>24==0;r=d;return E|0}while(0);K2a(m);ea=ga;fa=ha}K2a(n);ia=ea;ja=fa;Sc(ia|0)}else if((O|0)==40){fa=Hc()|0;ea=M;K2a(q);ia=fa;ja=ea;Sc(ia|0)}else if((O|0)==43){ea=Hc()|0;K2a(g);Sc(ea|0)}else if((O|0)==49){ea=Hc()|0;g=M;K2a(u);ia=ea;ja=g;Sc(ia|0)}else if((O|0)==52){D=i[c>>0]|0;E=D<<24>>24==0;r=d;return E|0}return 0}function Ysa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+8|0;e=c;f=KBa(68)|0;k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=31248;g=f+12|0;x=0;xa(731,g|0,1);h=x;x=0;if(h&1){h=Hc()|0;c0a(f);OBa(f);Sc(h|0)}h=g;k[d>>2]=21048;j=d+4|0;x=0;xa(604,j|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;l=M;m=b;j0a(f);Sc(m|0)}x=0;Ta(564,g|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;b=M;k[d>>2]=21048;K2a(j);l=b;m=g;j0a(f);Sc(m|0)}k[d>>2]=21048;K2a(j);j=k[a+16>>2]|0;k[e>>2]=h;d=e+4|0;k[d>>2]=f;h0a(f);g=j+4|0;b=k[g>>2]|0;if(b>>>0<(k[j+8>>2]|0)>>>0){k[b>>2]=h;k[b+4>>2]=f;k[e>>2]=0;k[d>>2]=0;k[g>>2]=b+8;n=a+20|0;i[n>>0]=1;j0a(f);r=c;return}x=0;xa(732,j|0,e|0);e=x;x=0;if(e&1){e=Hc()|0;j=M;b=k[d>>2]|0;if(!b){l=j;m=e;j0a(f);Sc(m|0)}j0a(b);l=j;m=e;j0a(f);Sc(m|0)}else{m=k[d>>2]|0;if(!m){n=a+20|0;i[n>>0]=1;j0a(f);r=c;return}j0a(m);n=a+20|0;i[n>>0]=1;j0a(f);r=c;return}}function Zsa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;e=r;r=r+48|0;f=e+40|0;g=e+36|0;h=e+16|0;i=e+8|0;j=e;l=e+32|0;m=e+28|0;n=e+12|0;o=e+4|0;p=a+12|0;if((k[p>>2]|0)!=0?(b5a(d,329672)|0)==0:0){q=k[b>>2]|0;s=k[c>>2]|0;t=(k[p>>2]|0)!=0;q2a(h,329672,0);x=0;pa(57,t|0,h|0,126,286322,286367);t=x;x=0;if(t&1){t=Hc()|0;K2a(h);Sc(t|0)}K2a(h);k[i>>2]=q;k[j>>2]=s;k[g>>2]=k[i>>2];k[f>>2]=k[j>>2];u=$sa(a,g,f,1)|0;r=e;return u|0}if(!(b5a(d,286453)|0)){k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];k[g>>2]=k[l>>2];k[f>>2]=k[m>>2];u=ata(a,g,f)|0;r=e;return u|0}else{bta(a,d);k[n>>2]=k[b>>2];k[o>>2]=k[c>>2];k[g>>2]=k[n>>2];k[f>>2]=k[o>>2];u=$sa(a,g,f,0)|0;r=e;return u|0}return 0}function _sa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+32|0;e=d+24|0;f=d+20|0;g=d+8|0;h=d+4|0;i=d;j=(k[a+12>>2]|0)!=0;q2a(g,329672,0);x=0;pa(57,j|0,g|0,126,286322,286367);j=x;x=0;if(j&1){j=Hc()|0;K2a(g);Sc(j|0)}else{K2a(g);k[h>>2]=k[b>>2];k[i>>2]=k[c>>2];k[f>>2]=k[h>>2];k[e>>2]=k[i>>2];i=$sa(a,f,e,1)|0;r=d;return i|0}return 0}function $sa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=r;r=r+16|0;f=e;g=a+12|0;a=(k[g>>2]|0)!=0;q2a(f,329672,0);x=0;pa(57,a|0,f|0,76,286322,286459);a=x;x=0;if(a&1){a=Hc()|0;K2a(f);Sc(a|0)}K2a(f);f=k[b>>2]|0;b=k[c>>2]|0;a:do if((f|0)==(b|0))h=f;else{c=f;while(1){if((i[c>>0]|0)==10){h=c;break a}c=c+1|0;if((c|0)==(b|0)){h=b;break}}}while(0);if(f>>>0>>0&d?(i[f>>0]|0)!=32:0)J3a(k[g>>2]|0,324196)|0;d=k[g>>2]|0;if((f|0)==(h|0)){j=(h|0)==(b|0);l=h+1|0;m=j?b:l;r=e;return m|0}else n=f;do{L3a(d,i[n>>0]|0);n=n+1|0}while((n|0)!=(h|0));j=(h|0)==(b|0);l=h+1|0;m=j?b:l;r=e;return m|0}function ata(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=r;r=r+64|0;e=d+36|0;f=d+12|0;g=d+48|0;h=d+24|0;j=d;l=k[b>>2]|0;b=k[c>>2]|0;m=l;n=b;a:do if((l|0)==(b|0)){o=l;p=4}else{q=l;do{if((i[q>>0]|0)==32){o=q;p=4;break a}q=q+1|0}while((q|0)!=(b|0))}while(0);if((p|0)==4?(o|0)!=(b|0):0){q=o-m|0;if(q>>>0<=4294967279)if(q>>>0<11){i[g>>0]=q<<1;s=g+1|0}else p=22;else{GBa(g);p=22}if((p|0)==22){t=q+16&-16;u=KBa(t)|0;k[g+8>>2]=u;k[g>>2]=t|1;k[g+4>>2]=q;s=u}if((l|0)==(o|0))v=s;else{u=l;q=m;t=s;while(1){i[t>>0]=i[u>>0]|0;s=q+1|0;w=t+1|0;if((s|0)==(o|0)){v=w;break}else{u=s;q=s;t=w}}}i[v>>0]=0;v=o+1|0;o=v;t=k[c>>2]|0;b:do if((v|0)==(t|0))y=v;else{q=v;while(1){if((i[q>>0]|0)==10){y=q;break b}q=q+1|0;if((q|0)==(t|0)){y=t;break}}}while(0);t=y-o|0;if(t>>>0>4294967279){x=0;va(1471,h|0);q=x;x=0;if(q&1)p=41;else p=32}else if(t>>>0<11){i[h>>0]=t<<1;z=h+1|0;p=34}else p=32;if((p|0)==32){q=t+16&-16;x=0;u=Ba(563,q|0)|0;w=x;x=0;if(w&1)p=41;else{k[h+8>>2]=u;k[h>>2]=q|1;k[h+4>>2]=t;z=u;p=34}}if((p|0)==34){if((v|0)==(y|0))A=z;else{u=v;v=o;o=z;while(1){i[o>>0]=i[u>>0]|0;z=v+1|0;t=o+1|0;if((z|0)==(y|0)){A=t;break}else{u=z;v=z;o=t}}}i[A>>0]=0;x=0;fb(140,j|0,286453,5);A=x;x=0;do if(!(A&1)){x=0;xa(879,a|0,j|0);o=x;x=0;if(o&1){o=Hc()|0;v=M;K2a(j);B=v;C=o;break}K2a(j);o=a+12|0;x=0;Ta(493,(k[o>>2]|0)+12|0,g|0)|0;v=x;x=0;if(!(v&1)?(x=0,Ta(493,k[o>>2]|0,h|0)|0,o=x,x=0,!(o&1)):0){o=k[c>>2]|0;K2a(h);K2a(g);D=(y|0)==(o|0)?o:y+1|0;r=d;return D|0}else p=42}else p=42;while(0);if((p|0)==42){y=Hc()|0;B=M;C=y}K2a(h);E=B;F=C}else if((p|0)==41){C=Hc()|0;E=M;F=C}K2a(g);G=E;H=F;Sc(H|0)}F=n-m|0;if(F>>>0<=4294967279)if(F>>>0<11){i[f>>0]=F<<1;I=f+1|0}else p=9;else{GBa(f);p=9}if((p|0)==9){p=F+16&-16;n=KBa(p)|0;k[f+8>>2]=n;k[f>>2]=p|1;k[f+4>>2]=F;I=n}if((l|0)==(b|0))J=I;else{n=l;l=m;m=I;while(1){i[m>>0]=i[n>>0]|0;I=l+1|0;F=m+1|0;if((I|0)==(b|0)){J=F;break}else{n=I;l=I;m=F}}}i[J>>0]=0;x=0;J=Fa(86,f|0,0,286547)|0;m=x;x=0;do if(m&1){l=Hc()|0;K=M;L=l}else{k[e>>2]=k[J>>2];k[e+4>>2]=k[J+4>>2];k[e+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;x=0;xa(878,a|0,e|0);l=x;x=0;if(l&1){l=Hc()|0;n=M;K2a(e);K=n;L=l;break}K2a(e);K2a(f);D=k[c>>2]|0;r=d;return D|0}while(0);K2a(f);G=K;H=L;Sc(H|0);return 0}function bta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+64|0;d=c+24|0;e=c;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;k[e+20>>2]=0;x=0;xa(604,d|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;f=M;g=b;h=e+12|0;K2a(h);K2a(e);Sc(g|0)}b=d+12|0;k[b>>2]=k[e>>2];k[b+4>>2]=k[e+4>>2];k[b+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;b=d+24|0;i=e+12|0;k[b>>2]=k[i>>2];k[b+4>>2]=k[i+4>>2];k[b+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;x=0;j=Ta(623,a|0,d|0)|0;l=x;x=0;if(!(l&1)){k[a+12>>2]=j+28;K2a(b);K2a(d+12|0);K2a(d);K2a(i);K2a(e);r=c;return}c=Hc()|0;j=M;K2a(b);K2a(d+12|0);K2a(d);f=j;g=c;h=i;K2a(h);K2a(e);Sc(g|0)}function cta(){k[11115]=0;k[11116]=0;k[11117]=0;return}function dta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;c=KBa(52)|0;d=c+16|0;k[d>>2]=k[b>>2];k[d+4>>2]=k[b+4>>2];k[d+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;e=c+28|0;f=b+12|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;f=c+40|0;e=b+24|0;k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;e=a+4|0;f=k[e>>2]|0;do if(f){b=i[d>>0]|0;g=(b&1)==0;h=g?(b&255)>>>1:k[c+20>>2]|0;b=g?c+17|0:k[c+24>>2]|0;g=f;while(1){j=g+16|0;l=i[j>>0]|0;m=(l&1)==0;n=m?(l&255)>>>1:k[g+20>>2]|0;l=ZLa(b,m?j+1|0:k[g+24>>2]|0,n>>>0>>0?n:h)|0;if((((l|0)==0?(h>>>0>>0?-2147483648:0):l)|0)<0){l=k[g>>2]|0;if(!l){o=g;p=g;q=5;break}else r=l}else{l=g+4|0;n=k[l>>2]|0;if(!n){s=l;t=g;q=8;break}else r=n}g=r}if((q|0)==5){u=o;v=p;break}else if((q|0)==8){u=s;v=t;break}}else{u=e;v=e}while(0);k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=v;k[u>>2]=c;v=k[k[a>>2]>>2]|0;if(!v){w=c;x=a+4|0;y=k[x>>2]|0;ui(y,w);z=a+8|0;A=k[z>>2]|0;B=A+1|0;k[z>>2]=B;return c|0}k[a>>2]=v;w=k[u>>2]|0;x=a+4|0;y=k[x>>2]|0;ui(y,w);z=a+8|0;A=k[z>>2]|0;B=A+1|0;k[z>>2]=B;return c|0}function eta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;d=r;r=r+96|0;e=d+76|0;f=d+64|0;g=d+56|0;h=d+48|0;i=d+40|0;j=d+32|0;l=d+24|0;m=d+16|0;n=d;o=k[c>>2]|0;p=k[c+4>>2]|0;if(p)h0a(p);k[b>>2]=o;o=b+4|0;c=k[o>>2]|0;k[o>>2]=p;if(c)j0a(c);k[e>>2]=b;c=e+4|0;x=0;p=Ba(616,b|0)|0;o=x;x=0;if(!(o&1)?(x=0,o=Ba(617,b|0)|0,q=x,x=0,!(q&1)):0){q=k[o>>2]|0;s=k[o+4>>2]|0;if(!s){k[c>>2]=p;k[e+8>>2]=-1;k[e+12>>2]=q;t=0}else{h0a(s);k[c>>2]=p;k[e+8>>2]=-1;k[e+12>>2]=q;h0a(s);j0a(s);t=s}s=e+16|0;k[s>>2]=t;k[f>>2]=0;t=f+4|0;k[t>>2]=0;k[f+8>>2]=0;q=g+4|0;p=h+4|0;o=f+8|0;u=i+4|0;v=j+4|0;w=l+4|0;y=m+4|0;a:while(1){z=k[(k[b>>2]|0)+80>>2]|0;switch(z|0){case 0:{A=44;break a;break}case 78:{x=0;xa(880,h|0,b|0);B=x;x=0;if(B&1){A=13;break a}B=k[h>>2]|0;k[g>>2]=B;C=k[p>>2]|0;k[q>>2]=C;k[h>>2]=0;k[p>>2]=0;D=k[t>>2]|0;if(D>>>0<(k[o>>2]|0)>>>0){k[D>>2]=B;k[D+4>>2]=C;k[g>>2]=0;k[q>>2]=0;k[t>>2]=D+8;continue a}x=0;xa(881,f|0,g|0);D=x;x=0;if(D&1){A=22;break a}D=k[q>>2]|0;if(!D)continue a;j0a(D);continue a;break}case 69:{x=0;xa(882,j|0,b|0);D=x;x=0;if(D&1){A=13;break a}D=k[j>>2]|0;k[i>>2]=D;C=k[v>>2]|0;k[u>>2]=C;k[j>>2]=0;k[v>>2]=0;B=k[t>>2]|0;if(B>>>0<(k[o>>2]|0)>>>0){k[B>>2]=D;k[B+4>>2]=C;k[i>>2]=0;k[u>>2]=0;k[t>>2]=B+8;continue a}x=0;xa(881,f|0,i|0);B=x;x=0;if(B&1){A=30;break a}B=k[u>>2]|0;if(!B)continue a;j0a(B);continue a;break}case 71:case 56:{x=0;fb(376,m|0,b|0,(z|0)==71|0);z=x;x=0;if(z&1){A=13;break a}z=k[m>>2]|0;k[l>>2]=z;B=k[y>>2]|0;k[w>>2]=B;k[m>>2]=0;k[y>>2]=0;C=k[t>>2]|0;if(C>>>0<(k[o>>2]|0)>>>0){k[C>>2]=z;k[C+4>>2]=B;k[l>>2]=0;k[w>>2]=0;k[t>>2]=C+8;continue a}x=0;xa(881,f|0,l|0);C=x;x=0;if(C&1){A=38;break a}C=k[w>>2]|0;if(!C)continue a;j0a(C);continue a;break}default:{x=0;fb(140,n|0,286575,49);C=x;x=0;if(C&1){A=13;break a}x=0;xa(883,b|0,n|0);C=x;x=0;if(C&1){A=43;break a}K2a(n);continue a}}}if((A|0)==13){l=Hc(4496)|0;E=l;F=M;A=15}else if((A|0)==22){l=Hc(4496)|0;o=M;y=k[q>>2]|0;if(!y){G=l;H=o}else{j0a(y);G=l;H=o}}else if((A|0)==30){o=Hc(4496)|0;l=M;y=k[u>>2]|0;if(!y){G=o;H=l}else{j0a(y);G=o;H=l}}else if((A|0)==38){l=Hc(4496)|0;o=M;y=k[w>>2]|0;if(!y){G=l;H=o}else{j0a(y);G=l;H=o}}else if((A|0)==43){o=Hc(4496)|0;l=M;K2a(n);G=o;H=l}else if((A|0)==44){l=e+8|0;if((k[l>>2]|0)<0){x=0;o=Ba(618,k[e>>2]|0)|0;e=x;x=0;if(!(e&1)){k[l>>2]=o;A=47}}else A=47;if((A|0)==47?(x=0,fb(377,a|0,c|0,f|0),c=x,x=0,!(c&1)):0){c=k[f>>2]|0;if(c){o=k[t>>2]|0;if((o|0)==(c|0))I=c;else{l=o;while(1){o=l+-8|0;k[t>>2]=o;e=k[l+-4>>2]|0;if(!e)J=o;else{j0a(e);J=k[t>>2]|0}if((J|0)==(c|0))break;else l=J}I=k[f>>2]|0}OBa(I)}I=k[s>>2]|0;if(I)j0a(I);r=d;return}I=Hc(4496)|0;E=I;F=M;A=15}if((A|0)==15){G=E;H=F}F=k[f>>2]|0;if(F){E=k[t>>2]|0;if((E|0)==(F|0))K=F;else{A=E;while(1){E=A+-8|0;k[t>>2]=E;I=k[A+-4>>2]|0;if(!I)L=E;else{j0a(I);L=k[t>>2]|0}if((L|0)==(F|0))break;else A=L}K=k[f>>2]|0}OBa(K)}K=k[s>>2]|0;if(!K){N=G;O=H}else{j0a(K);N=G;O=H}}else{H=Hc(4496)|0;N=H;O=M}if((O|0)!=(hf(4496)|0)){P=N;Q=O;Sc(P|0)}me(N|0)|0;N=k[b+8>>2]|0;if((k[N>>2]|0)!=(k[N+4>>2]|0)){k[a>>2]=0;k[a+4>>2]=0;ge();r=d;return}x=0;hb(46);x=0;d=Hc()|0;a=M;x=0;hb(45);N=x;x=0;if(N&1){N=Hc(0)|0;Fg(N)}else{P=d;Q=a;Sc(P|0)}}function fta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+96|0;d=c+84|0;e=c+72|0;f=c+52|0;g=c+40|0;h=c+28|0;j=c+24|0;l=c;m=c+12|0;k[f>>2]=b;n=f+4|0;o=tya(b)|0;p=sya(b)|0;q=k[p>>2]|0;s=k[p+4>>2]|0;if(!s){k[n>>2]=o;k[f+8>>2]=-1;k[f+12>>2]=q;t=0}else{h0a(s);k[n>>2]=o;k[f+8>>2]=-1;k[f+12>>2]=q;h0a(s);j0a(s);t=s}s=f+16|0;k[s>>2]=t;x=0;xa(884,b|0,78);t=x;x=0;if(!(t&1)){k[g>>2]=0;t=g+4|0;k[t>>2]=0;k[g+8>>2]=0;k[h>>2]=0;q=h+4|0;k[q>>2]=0;k[h+8>>2]=0;o=m+4|0;p=g+8|0;u=h+8|0;v=k[b>>2]|0;w=k[v+80>>2]|0;y=v;a:while(1){k[j>>2]=w;if((w|0)==139){x=0;fb(140,l|0,286625,68);v=x;x=0;if(v&1){z=11;break}x=0;xa(885,b|0,l|0);v=x;x=0;if(v&1){z=14;break}K2a(l)}else{x=0;xa(604,m|0,y+100|0);v=x;x=0;if(v&1){z=11;break}v=i[m>>0]|0;if(!(((v&1)==0?(v&255)>>>1:k[o>>2]|0)|0)){x=0;fb(140,e|0,329672,0);v=x;x=0;if(v&1){z=25;break}v=(w|0)<141;x=0;pa(57,v|0,e|0,303,293207,293255);A=x;x=0;if(A&1){z=19;break}K2a(e);A=k[46308+(w<<2)>>2]|0;if(A){x=0;fb(140,d|0,329672,0);B=x;x=0;if(B&1){z=25;break}x=0;pa(57,v|0,d|0,303,293207,293255);v=x;x=0;if(v&1){z=23;break}K2a(d);x=0;Ta(496,m|0,A|0)|0;A=x;x=0;if(A&1){z=25;break}}}A=k[t>>2]|0;x=0;if((A|0)==(k[p>>2]|0)){Rx(g,m);v=x;x=0;if(v&1){z=25;break}}else{n2a(A,m);A=x;x=0;if(A&1){z=25;break}k[t>>2]=(k[t>>2]|0)+12}A=k[q>>2]|0;if((A|0)==(k[u>>2]|0)){x=0;xa(886,h|0,j|0);v=x;x=0;if(v&1){z=25;break}}else{k[A>>2]=w;k[q>>2]=A+4}K2a(m)}x=0;Ba(619,k[b>>2]|0)|0;A=x;x=0;if(A&1){z=11;break}A=k[b>>2]|0;v=k[A+80>>2]|0;switch(v|0){case 0:case 8:{z=37;break a;break}default:{w=v;y=A}}}b:do if((z|0)==11){y=Hc()|0;C=M;D=y;z=13}else if((z|0)==14){y=Hc()|0;w=M;K2a(l);E=w;F=y}else if((z|0)==19){y=Hc()|0;w=M;K2a(e);G=w;H=y;z=26}else if((z|0)==23){y=Hc()|0;w=M;K2a(d);G=w;H=y;z=26}else if((z|0)==25){y=Hc()|0;G=M;H=y;z=26}else if((z|0)==37){y=k[f>>2]|0;x=0;w=Ba(618,y|0)|0;j=x;x=0;do if(!(j&1)?(u=f+8|0,k[u>>2]=w,x=0,xa(884,b|0,8),p=x,x=0,!(p&1)):0){if((w|0)<0){x=0;p=Ba(618,y|0)|0;o=x;x=0;if(o&1)break;k[u>>2]=p}x=0;p=Ba(563,60)|0;u=x;x=0;if(!(u&1)){k[p+4>>2]=0;k[p+8>>2]=0;k[p>>2]=44480;u=p+12|0;x=0;nb(147,u|0,n|0,h|0,g|0);o=x;x=0;if(o&1){o=Hc()|0;A=M;c0a(p);OBa(p);C=A;D=o;z=13;break b}k[a>>2]=u;k[a+4>>2]=p;p=k[h>>2]|0;u=p;if(p){o=k[q>>2]|0;if((o|0)!=(p|0))k[q>>2]=o+(~((o+-4-u|0)>>>2)<<2);OBa(p)}p=k[g>>2]|0;if(p){u=k[t>>2]|0;if((u|0)==(p|0))I=p;else{o=u;do{u=o+-12|0;k[t>>2]=u;K2a(u);o=k[t>>2]|0}while((o|0)!=(p|0));I=k[g>>2]|0}OBa(I)}p=k[s>>2]|0;if(!p){r=c;return}j0a(p);r=c;return}}while(0);y=Hc()|0;C=M;D=y;z=13}while(0);if((z|0)==13){E=C;F=D}else if((z|0)==26){K2a(m);E=G;F=H}H=k[h>>2]|0;h=H;if(H){G=k[q>>2]|0;if((G|0)!=(H|0))k[q>>2]=G+(~((G+-4-h|0)>>>2)<<2);OBa(H)}H=k[g>>2]|0;if(!H){J=E;K=F}else{h=k[t>>2]|0;if((h|0)==(H|0))L=H;else{G=h;do{h=G+-12|0;k[t>>2]=h;K2a(h);G=k[t>>2]|0}while((G|0)!=(H|0));L=k[g>>2]|0}OBa(L);J=E;K=F}}else{F=Hc()|0;J=M;K=F}F=k[s>>2]|0;if(!F)Sc(K|0);j0a(F);Sc(K|0)}function gta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;c=r;r=r+160|0;d=c+136|0;e=c+128|0;f=c+120|0;g=c+104|0;h=c+88|0;i=c+80|0;j=c+96|0;l=c+72|0;m=c+56|0;n=c+48|0;o=c+32|0;p=c+20|0;q=c+8|0;s=c;k[d>>2]=b;t=d+4|0;u=tya(b)|0;v=sya(b)|0;w=k[v>>2]|0;y=k[v+4>>2]|0;if(!y){k[t>>2]=u;k[d+8>>2]=-1;k[d+12>>2]=w;z=0}else{h0a(y);k[t>>2]=u;k[d+8>>2]=-1;k[d+12>>2]=w;h0a(y);j0a(y);z=y}y=d+16|0;k[y>>2]=z;x=0;xa(884,b|0,69);z=x;x=0;do if(!(z&1)){k[e>>2]=0;w=e+4|0;k[w>>2]=0;x=0;u=Ba(563,24)|0;v=x;x=0;if(v&1){v=Hc()|0;A=M;B=v;break}k[u+4>>2]=0;k[u+8>>2]=0;k[u>>2]=33300;v=u+12|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;C=f+4|0;k[f>>2]=v;k[C>>2]=u;k[g>>2]=0;v=g+4|0;k[v>>2]=0;k[g+8>>2]=0;D=k[b>>2]|0;a:do switch(k[D+80>>2]|0){case 117:{x=0;xa(887,h|0,b|0);E=x;x=0;if(!(E&1)){E=k[h>>2]|0;F=h+4|0;G=k[F>>2]|0;k[h>>2]=0;k[F>>2]=0;k[e>>2]=E;k[w>>2]=G;E=G;G=k[b>>2]|0;if((k[G+80>>2]|0)==51){x=0;Ba(619,G|0)|0;G=x;x=0;if(!(G&1)?(x=0,xa(888,i|0,b|0),G=x,x=0,!(G&1)):0){G=k[i>>2]|0;F=i+4|0;H=k[F>>2]|0;k[i>>2]=0;k[F>>2]=0;k[f>>2]=G;k[C>>2]=H;G=H;j0a(u);H=k[F>>2]|0;if(!H){I=G;J=E;K=65}else{j0a(H);I=G;J=E;K=65}}else{L=E;N=u;K=16}}else{I=u;J=E;K=65}}else{L=0;N=u;K=16}break}case 5:{x=0;Ba(619,D|0)|0;E=x;x=0;if(!(E&1)){E=l+4|0;G=m+4|0;H=j+4|0;F=m+8|0;O=m+12|0;P=g+8|0;while(1){x=0;xa(889,j|0,b|0);Q=x;x=0;if(Q&1){K=15;break}if((k[(k[b>>2]|0)+80>>2]|0)==51){x=0;xa(884,b|0,51);Q=x;x=0;if(Q&1){K=39;break}x=0;xa(888,l|0,b|0);Q=x;x=0;if(Q&1){K=39;break}Q=k[l>>2]|0;R=k[E>>2]|0;k[l>>2]=0;k[E>>2]=0;S=Q;T=R}else{S=0;T=0}R=k[j>>2]|0;k[m>>2]=R;Q=k[H>>2]|0;k[G>>2]=Q;k[j>>2]=0;k[H>>2]=0;k[F>>2]=S;k[O>>2]=T;U=k[v>>2]|0;if(U>>>0>=(k[P>>2]|0)>>>0){x=0;xa(890,g|0,m|0);V=x;x=0;if(V&1){K=33;break}V=k[O>>2]|0;if(V)j0a(V)}else{k[U>>2]=R;k[U+4>>2]=Q;k[m>>2]=0;k[G>>2]=0;k[U+8>>2]=S;k[U+12>>2]=T;k[F>>2]=0;k[O>>2]=0;k[v>>2]=U+16}U=k[G>>2]|0;if(U)j0a(U);U=k[b>>2]|0;if((k[U+80>>2]|0)!=24){K=41;break}x=0;Ba(619,U|0)|0;U=x;x=0;if(U&1){K=39;break}}if((K|0)==15){F=Hc()|0;W=0;X=u;Y=M;Z=F;K=17;break a}else if((K|0)==33){F=Hc()|0;P=M;E=k[O>>2]|0;if(E)j0a(E);E=k[G>>2]|0;if(!E){_=P;$=F;aa=u;ba=0;break a}j0a(E);_=P;$=F;aa=u;ba=0;break a}else if((K|0)==39){F=Hc()|0;P=M;E=k[H>>2]|0;if(!E){_=P;$=F;aa=u;ba=0;break a}j0a(E);_=P;$=F;aa=u;ba=0;break a}else if((K|0)==41){x=0;xa(884,b|0,6);F=x;x=0;if(F&1){L=0;N=u;K=16;break a}else{ca=u;K=51;break a}}}else{L=0;N=u;K=16}break}case 35:{x=0;Ba(619,D|0)|0;F=x;x=0;if((!(F&1)?(x=0,xa(884,b|0,51),F=x,x=0,!(F&1)):0)?(x=0,xa(888,n|0,b|0),F=x,x=0,!(F&1)):0){F=k[n>>2]|0;P=n+4|0;E=k[P>>2]|0;k[n>>2]=0;k[P>>2]=0;k[f>>2]=F;k[C>>2]=E;F=E;j0a(u);E=k[P>>2]|0;if(!E){ca=F;K=51}else{j0a(E);ca=F;K=51}}else{L=0;N=u;K=16}break}default:{x=0;fb(140,o|0,286694,50);F=x;x=0;if(!(F&1)){x=0;xa(883,b|0,o|0);F=x;x=0;if(F&1){F=Hc()|0;E=M;K2a(o);_=E;$=F;aa=u;ba=0;break a}else{K2a(o);ca=u;K=51;break a}}else{L=0;N=u;K=16}}}while(0);b:do if((K|0)==51){u=k[b>>2]|0;if(!((k[u+80>>2]|0)==119?(b5a(u+100|0,286745)|0)==0:0))K=53;do if((K|0)==53){x=0;fb(140,p|0,286750,16);u=x;x=0;if(u&1){L=0;N=ca;K=16;break b}x=0;xa(883,b|0,p|0);u=x;x=0;if(u&1){u=Hc()|0;C=M;K2a(p);_=C;$=u;aa=ca;ba=0;break b}else{K2a(p);break}}while(0);x=0;Ba(619,k[b>>2]|0)|0;H=x;x=0;if(!(H&1)){do if((k[(k[b>>2]|0)+80>>2]|0)!=117){x=0;fb(140,q|0,286767,21);H=x;x=0;if(H&1){L=0;N=ca;K=16;break b}x=0;xa(883,b|0,q|0);H=x;x=0;if(H&1){H=Hc()|0;G=M;K2a(q);_=G;$=H;aa=ca;ba=0;break b}else{K2a(q);break}}while(0);x=0;xa(887,s|0,b|0);H=x;x=0;if(!(H&1)){H=k[s>>2]|0;G=s+4|0;O=k[G>>2]|0;k[s>>2]=0;k[G>>2]=0;k[e>>2]=H;k[w>>2]=O;I=ca;J=O;K=65}else{L=0;N=ca;K=16}}else{L=0;N=ca;K=16}}while(0);do if((K|0)==65){x=0;w=Ba(618,k[d>>2]|0)|0;O=x;x=0;if(!(O&1)?(O=d+8|0,k[O>>2]=w,x=0,xa(884,b|0,8),w=x,x=0,!(w&1)):0){if((k[O>>2]|0)<0){x=0;w=Ba(618,k[d>>2]|0)|0;H=x;x=0;if(H&1){L=J;N=I;K=16;break}k[O>>2]=w}x=0;w=Ba(563,72)|0;O=x;x=0;if(!(O&1)){k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=44508;O=w+12|0;x=0;pa(64,O|0,t|0,e|0,f|0,g|0);H=x;x=0;if(H&1){H=Hc()|0;G=M;c0a(w);OBa(w);W=J;X=I;Y=G;Z=H;K=17;break}k[a>>2]=O;k[a+4>>2]=w;w=k[g>>2]|0;if(w){O=k[v>>2]|0;if((O|0)==(w|0))da=w;else{H=O;do{k[v>>2]=H+-16;O=k[H+-4>>2]|0;if(O)j0a(O);O=k[H+-12>>2]|0;if(O)j0a(O);H=k[v>>2]|0}while((H|0)!=(w|0));da=k[g>>2]|0}OBa(da)}if(I)j0a(I);if(J)j0a(J);w=k[y>>2]|0;if(!w){r=c;return}j0a(w);r=c;return}else{L=J;N=I;K=16}}else{L=J;N=I;K=16}}while(0);if((K|0)==16){w=Hc()|0;W=L;X=N;Y=M;Z=w;K=17}if((K|0)==17){_=Y;$=Z;aa=X;ba=W}w=k[g>>2]|0;if(w){H=k[v>>2]|0;if((H|0)==(w|0))ea=w;else{O=H;do{k[v>>2]=O+-16;H=k[O+-4>>2]|0;if(H)j0a(H);H=k[O+-12>>2]|0;if(H)j0a(H);O=k[v>>2]|0}while((O|0)!=(w|0));ea=k[g>>2]|0}OBa(ea)}if(aa)j0a(aa);if(!ba){A=_;B=$}else{j0a(ba);A=_;B=$}}else{w=Hc()|0;A=M;B=w}while(0);A=k[y>>2]|0;if(!A)Sc(B|0);j0a(A);Sc(B|0)}function hta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0;d=r;r=r+224|0;e=d+184|0;f=d+176|0;g=d+168|0;h=d+156|0;j=d+136|0;l=d+144|0;m=d+128|0;n=d+120|0;o=d+112|0;p=d+104|0;q=d+96|0;s=d+88|0;t=d+204|0;u=d+80|0;v=d+72|0;w=d+64|0;y=d+56|0;z=d+48|0;A=d+40|0;B=d+32|0;C=d+24|0;D=d+16|0;E=d;k[e>>2]=b;F=e+4|0;G=tya(b)|0;H=sya(b)|0;I=k[H>>2]|0;J=k[H+4>>2]|0;if(!J){k[F>>2]=G;k[e+8>>2]=-1;k[e+12>>2]=I;K=0}else{h0a(J);k[F>>2]=G;k[e+8>>2]=-1;k[e+12>>2]=I;h0a(J);j0a(J);K=J}J=e+16|0;k[J>>2]=K;k[f>>2]=0;K=f+4|0;k[K>>2]=0;do if(b5a((k[b>>2]|0)+20|0,329672)|0){I=k[b>>2]|0;x=0;G=Ba(563,24)|0;H=x;x=0;if(!(H&1)){k[G+4>>2]=0;k[G+8>>2]=0;k[G>>2]=33300;H=G+12|0;x=0;xa(604,H|0,I+20|0);I=x;x=0;if(I&1){I=Hc()|0;L=M;c0a(G);OBa(G);N=0;O=L;P=I;Q=10;break}else{k[f>>2]=H;k[K>>2]=G;R=G;Q=11;break}}else{S=0;Q=9}}else{R=0;Q=11}while(0);if((Q|0)==11){x=0;xa(884,b|0,(c?71:56)|0);K=x;x=0;if(!(K&1)?(x=0,xa(888,g|0,b|0),K=x,x=0,!(K&1)):0){k[h>>2]=0;K=h+4|0;k[K>>2]=0;k[h+8>>2]=0;G=k[b>>2]|0;a:do if((k[G+80>>2]|0)==70){H=h+8|0;I=j+4|0;L=G;while(1){x=0;Ba(619,L|0)|0;T=x;x=0;if(T&1){Q=23;break}x=0;xa(891,j|0,b|0);T=x;x=0;if(T&1){Q=23;break}T=k[K>>2]|0;if(T>>>0>=(k[H>>2]|0)>>>0){x=0;xa(892,h|0,j|0);U=x;x=0;if(U&1)break;U=k[I>>2]|0;if(U)j0a(U)}else{k[T>>2]=k[j>>2];k[T+4>>2]=k[I>>2];k[j>>2]=0;k[I>>2]=0;k[K>>2]=T+8}L=k[b>>2]|0;if((k[L+80>>2]|0)!=24){Q=26;break a}}if((Q|0)==23){L=Hc()|0;V=L;W=M;break}L=Hc()|0;H=M;T=k[I>>2]|0;if(!T){V=L;W=H}else{j0a(T);V=L;W=H}}else Q=26;while(0);if((Q|0)==26){k[l>>2]=0;j=l+4|0;k[j>>2]=0;k[l+8>>2]=0;x=0;xa(884,b|0,5);G=x;x=0;b:do if(G&1)Q=30;else{H=y+4|0;L=z+4|0;T=l+8|0;U=A+4|0;X=B+4|0;Y=C+4|0;Z=D+4|0;_=t+1|0;$=t+4|0;aa=w+4|0;ba=u+4|0;ca=v+4|0;da=m+4|0;ea=n+4|0;fa=o+4|0;ga=p+4|0;ha=q+4|0;ia=s+4|0;c:while(1){ja=k[(k[b>>2]|0)+80>>2]|0;switch(ja|0){case 6:{Q=97;break c;break}case 64:{x=0;fb(378,n|0,b|0,k[g>>2]|0);ka=x;x=0;if(ka&1){Q=29;break c}ka=k[n>>2]|0;k[m>>2]=ka;la=k[ea>>2]|0;k[da>>2]=la;k[n>>2]=0;k[ea>>2]=0;ma=k[j>>2]|0;if(ma>>>0<(k[T>>2]|0)>>>0){k[ma>>2]=ka;k[ma+4>>2]=la;k[m>>2]=0;k[da>>2]=0;k[j>>2]=ma+8;continue c}x=0;xa(881,l|0,m|0);ma=x;x=0;if(ma&1){Q=38;break c}ma=k[da>>2]|0;if(!ma)continue c;j0a(ma);continue c;break}case 83:{x=0;xa(893,p|0,b|0);ma=x;x=0;if(ma&1){Q=29;break c}ma=k[p>>2]|0;k[o>>2]=ma;la=k[ga>>2]|0;k[fa>>2]=la;k[p>>2]=0;k[ga>>2]=0;ka=k[j>>2]|0;if(ka>>>0<(k[T>>2]|0)>>>0){k[ka>>2]=ma;k[ka+4>>2]=la;k[o>>2]=0;k[fa>>2]=0;k[j>>2]=ka+8;continue c}x=0;xa(881,l|0,o|0);ka=x;x=0;if(ka&1){Q=46;break c}ka=k[fa>>2]|0;if(!ka)continue c;j0a(ka);continue c;break}case 60:{x=0;xa(894,s|0,b|0);ka=x;x=0;if(ka&1){Q=29;break c}ka=k[s>>2]|0;k[q>>2]=ka;la=k[ia>>2]|0;k[ha>>2]=la;k[s>>2]=0;k[ia>>2]=0;ma=k[j>>2]|0;if(ma>>>0<(k[T>>2]|0)>>>0){k[ma>>2]=ka;k[ma+4>>2]=la;k[q>>2]=0;k[ha>>2]=0;k[j>>2]=ma+8;continue c}x=0;xa(881,l|0,q|0);ma=x;x=0;if(ma&1){Q=54;break c}ma=k[ha>>2]|0;if(!ma)continue c;j0a(ma);continue c;break}case 72:case 119:break;default:if((ja+-98|0)>>>0>=14)switch(ja|0){case 74:{x=0;xa(895,z|0,b|0);ja=x;x=0;if(ja&1){Q=29;break c}ja=k[z>>2]|0;k[y>>2]=ja;ma=k[L>>2]|0;k[H>>2]=ma;k[z>>2]=0;k[L>>2]=0;la=k[j>>2]|0;if(la>>>0<(k[T>>2]|0)>>>0){k[la>>2]=ja;k[la+4>>2]=ma;k[y>>2]=0;k[H>>2]=0;k[j>>2]=la+8;continue c}x=0;xa(881,l|0,y|0);la=x;x=0;if(la&1){Q=75;break c}la=k[H>>2]|0;if(!la)continue c;j0a(la);continue c;break}case 61:{x=0;xa(896,B|0,b|0);la=x;x=0;if(la&1){Q=29;break c}la=k[B>>2]|0;k[A>>2]=la;ma=k[X>>2]|0;k[U>>2]=ma;k[B>>2]=0;k[X>>2]=0;ja=k[j>>2]|0;if(ja>>>0<(k[T>>2]|0)>>>0){k[ja>>2]=la;k[ja+4>>2]=ma;k[A>>2]=0;k[U>>2]=0;k[j>>2]=ja+8;continue c}x=0;xa(881,l|0,A|0);ja=x;x=0;if(ja&1){Q=83;break c}ja=k[U>>2]|0;if(!ja)continue c;j0a(ja);continue c;break}case 85:{x=0;xa(897,D|0,b|0);ja=x;x=0;if(ja&1){Q=29;break c}ja=k[D>>2]|0;k[C>>2]=ja;ma=k[Z>>2]|0;k[Y>>2]=ma;k[D>>2]=0;k[Z>>2]=0;la=k[j>>2]|0;if(la>>>0<(k[T>>2]|0)>>>0){k[la>>2]=ja;k[la+4>>2]=ma;k[C>>2]=0;k[Y>>2]=0;k[j>>2]=la+8;continue c}x=0;xa(881,l|0,C|0);la=x;x=0;if(la&1){Q=91;break c}la=k[Y>>2]|0;if(!la)continue c;j0a(la);continue c;break}default:{x=0;fb(140,E|0,286789,60);la=x;x=0;if(la&1){Q=29;break c}x=0;xa(883,b|0,E|0);la=x;x=0;if(la&1){Q=96;break c}K2a(E);continue c}}}i[t>>0]=0;i[t+1>>0]=0;i[t+2>>0]=0;i[t+3>>0]=0;i[t+4>>0]=0;i[t+5>>0]=0;i[_>>0]=1;i[$>>0]=1;k[w>>2]=0;k[aa>>2]=0;x=0;nb(148,v|0,b|0,t|0,w|0);la=x;x=0;if(la&1){Q=65;break}la=k[v>>2]|0;k[u>>2]=la;ma=k[ca>>2]|0;k[ba>>2]=ma;k[v>>2]=0;k[ca>>2]=0;ja=k[j>>2]|0;if(ja>>>0>=(k[T>>2]|0)>>>0){x=0;xa(881,l|0,u|0);ka=x;x=0;if(ka&1){Q=66;break}ka=k[ba>>2]|0;if(ka)j0a(ka)}else{k[ja>>2]=la;k[ja+4>>2]=ma;k[u>>2]=0;k[ba>>2]=0;k[j>>2]=ja+8}x=0;xa(884,b|0,8);ja=x;x=0;if(ja&1){Q=29;break}}switch(Q|0){case 29:{T=Hc()|0;na=M;oa=T;Q=31;break b;break}case 38:{T=Hc()|0;ca=M;aa=k[da>>2]|0;if(!aa){pa=T;qa=ca;break b}j0a(aa);pa=T;qa=ca;break b;break}case 46:{ca=Hc()|0;T=M;aa=k[fa>>2]|0;if(!aa){pa=ca;qa=T;break b}j0a(aa);pa=ca;qa=T;break b;break}case 54:{T=Hc()|0;ca=M;aa=k[ha>>2]|0;if(!aa){pa=T;qa=ca;break b}j0a(aa);pa=T;qa=ca;break b;break}case 65:{pa=Hc()|0;qa=M;break b;break}case 66:{ca=Hc()|0;T=M;aa=k[ba>>2]|0;if(!aa){pa=ca;qa=T;break b}j0a(aa);pa=ca;qa=T;break b;break}case 75:{T=Hc()|0;ca=M;aa=k[H>>2]|0;if(!aa){pa=T;qa=ca;break b}j0a(aa);pa=T;qa=ca;break b;break}case 83:{ca=Hc()|0;T=M;aa=k[U>>2]|0;if(!aa){pa=ca;qa=T;break b}j0a(aa);pa=ca;qa=T;break b;break}case 91:{T=Hc()|0;ca=M;aa=k[Y>>2]|0;if(!aa){pa=T;qa=ca;break b}j0a(aa);pa=T;qa=ca;break b;break}case 96:{ca=Hc()|0;T=M;K2a(E);pa=ca;qa=T;break b;break}case 97:{x=0;T=Ba(618,k[e>>2]|0)|0;ca=x;x=0;if(ca&1){Q=30;break b}ca=e+8|0;k[ca>>2]=T;x=0;xa(884,b|0,6);T=x;x=0;if(T&1){Q=30;break b}if((k[ca>>2]|0)<0){x=0;T=Ba(618,k[e>>2]|0)|0;aa=x;x=0;if(aa&1){Q=30;break b}k[ca>>2]=T}x=0;T=Ba(563,136)|0;ca=x;x=0;if(ca&1){Q=30;break b}k[T+4>>2]=0;k[T+8>>2]=0;k[T>>2]=44536;ca=T+12|0;x=0;Pa(45,ca|0,F|0,g|0,f|0,h|0,l|0,c|0);aa=x;x=0;if(aa&1){aa=Hc()|0;$=M;c0a(T);OBa(T);na=$;oa=aa;Q=31;break b}k[a>>2]=ca;k[a+4>>2]=T;T=k[l>>2]|0;if(T){ca=k[j>>2]|0;if((ca|0)==(T|0))ra=T;else{aa=ca;while(1){ca=aa+-8|0;k[j>>2]=ca;$=k[aa+-4>>2]|0;if(!$)sa=ca;else{j0a($);sa=k[j>>2]|0}if((sa|0)==(T|0))break;else aa=sa}ra=k[l>>2]|0}OBa(ra)}aa=k[h>>2]|0;if(aa){T=k[K>>2]|0;if((T|0)==(aa|0))ta=aa;else{Y=T;while(1){T=Y+-8|0;k[K>>2]=T;U=k[Y+-4>>2]|0;if(!U)ua=T;else{j0a(U);ua=k[K>>2]|0}if((ua|0)==(aa|0))break;else Y=ua}ta=k[h>>2]|0}OBa(ta)}Y=k[g+4>>2]|0;if(Y)j0a(Y);if(R)j0a(R);Y=k[J>>2]|0;if(!Y){r=d;return}j0a(Y);r=d;return}}}while(0);if((Q|0)==30){d=Hc()|0;na=M;oa=d;Q=31}if((Q|0)==31){pa=oa;qa=na}na=k[l>>2]|0;if(!na){V=pa;W=qa}else{oa=k[j>>2]|0;if((oa|0)==(na|0))va=na;else{d=oa;while(1){oa=d+-8|0;k[j>>2]=oa;ta=k[d+-4>>2]|0;if(!ta)wa=oa;else{j0a(ta);wa=k[j>>2]|0}if((wa|0)==(na|0))break;else d=wa}va=k[l>>2]|0}OBa(va);V=pa;W=qa}}qa=k[h>>2]|0;if(qa){pa=k[K>>2]|0;if((pa|0)==(qa|0))ya=qa;else{va=pa;while(1){pa=va+-8|0;k[K>>2]=pa;l=k[va+-4>>2]|0;if(!l)za=pa;else{j0a(l);za=k[K>>2]|0}if((za|0)==(qa|0))break;else va=za}ya=k[h>>2]|0}OBa(ya)}ya=k[g+4>>2]|0;if(!ya){Aa=V;Ca=W;Da=R}else{j0a(ya);Aa=V;Ca=W;Da=R}}else{S=R;Q=9}}if((Q|0)==9){R=Hc()|0;N=S;O=M;P=R;Q=10}if((Q|0)==10){Aa=P;Ca=O;Da=N}if(Da)j0a(Da);Da=k[J>>2]|0;if(!Da)Sc(Aa|0);j0a(Da);Sc(Aa|0)}function ita(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+32|0;d=c+8|0;e=c;k[d>>2]=b;f=d+4|0;g=tya(b)|0;h=sya(b)|0;i=k[h>>2]|0;j=k[h+4>>2]|0;if(!j){k[f>>2]=g;k[d+8>>2]=-1;k[d+12>>2]=i;l=0}else{h0a(j);k[f>>2]=g;k[d+8>>2]=-1;k[d+12>>2]=i;h0a(j);j0a(j);l=j}j=d+16|0;k[j>>2]=l;x=0;l=Ba(618,b|0)|0;i=x;x=0;do if(!(i&1)?(k[d+8>>2]=l,x=0,xa(888,e|0,b|0),g=x,x=0,!(g&1)):0){x=0;fb(379,a|0,d|0,e|0);g=x;x=0;if(g&1){g=Hc()|0;f=M;h=k[e+4>>2]|0;if(!h){m=f;n=g;break}j0a(h);m=f;n=g;break}g=k[e+4>>2]|0;if(g)j0a(g);g=k[j>>2]|0;if(!g){r=c;return}j0a(g);r=c;return}else o=12;while(0);if((o|0)==12){o=Hc()|0;m=M;n=o}o=k[j>>2]|0;if(!o)Sc(n|0);j0a(o);Sc(n|0)}function jta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+64|0;d=c+32|0;e=c+24|0;f=c+12|0;g=c;k[d>>2]=b;h=d+4|0;i=tya(b)|0;j=sya(b)|0;l=k[j>>2]|0;m=k[j+4>>2]|0;if(!m){k[h>>2]=i;k[d+8>>2]=-1;k[d+12>>2]=l;n=0}else{h0a(m);k[h>>2]=i;k[d+8>>2]=-1;k[d+12>>2]=l;h0a(m);j0a(m);n=m}m=d+16|0;k[m>>2]=n;x=0;xa(898,e|0,b|0);n=x;x=0;if(!(n&1)){k[f>>2]=0;n=f+4|0;k[n>>2]=0;k[f+8>>2]=0;l=k[b>>2]|0;do if((k[l+80>>2]|0)!=1){i=k[e>>2]|0;j=k[e+4>>2]|0;if(!j){o=k[i+12>>2]|0;p=d+8|0;k[p>>2]=o;q=0;s=p;t=o;u=0;v=0;w=15;break}else{h0a(j);o=k[i+12>>2]|0;i=d+8|0;k[i>>2]=o;j0a(j);q=0;s=i;t=o;u=0;v=0;w=15;break}}else{x=0;Ba(619,l|0)|0;o=x;x=0;if(!(o&1)?(x=0,xa(899,g|0,b|0),o=x,x=0,!(o&1)):0){o=k[g>>2]|0;i=g+4|0;j=k[i>>2]|0;p=g+8|0;y=k[p>>2]|0;z=k[d>>2]|0;k[f>>2]=o;k[n>>2]=j;k[f+8>>2]=y;k[p>>2]=0;k[i>>2]=0;k[g>>2]=0;i=o;p=j;j=o;x=0;o=Ba(618,z|0)|0;z=x;x=0;if(z&1){A=p;B=i;C=j;w=33;break}z=d+8|0;k[z>>2]=o;x=0;xa(884,b|0,2);o=x;x=0;if(o&1){A=p;B=i;C=j;w=33;break}q=j;s=z;t=k[z>>2]|0;u=i;v=p;w=15;break}p=Hc()|0;D=M;E=p}while(0);do if((w|0)==15){if((t|0)<0){x=0;b=Ba(618,k[d>>2]|0)|0;g=x;x=0;if(g&1){A=v;B=u;C=q;w=33;break}k[s>>2]=b}x=0;nb(149,a|0,h|0,e|0,f|0);b=x;x=0;if(b&1){A=v;B=u;C=q;w=33}else{b=u;if(u){if((v|0)==(u|0))F=u;else{g=~((v+-8-b|0)>>>3);b=v;do{l=k[b+-4>>2]|0;b=b+-8|0;if(l)j0a(l)}while((b|0)!=(u|0));k[n>>2]=v+(g<<3);F=q}OBa(F)}b=k[e+4>>2]|0;if(b)j0a(b);b=k[m>>2]|0;if(!b){r=c;return}j0a(b);r=c;return}}while(0);if((w|0)==33){w=Hc()|0;c=M;F=B;if(!B){D=c;E=w}else{if((A|0)==(B|0))G=B;else{q=~((A+-8-F|0)>>>3);F=A;do{v=k[F+-4>>2]|0;F=F+-8|0;if(v)j0a(v)}while((F|0)!=(B|0));k[n>>2]=A+(q<<3);G=C}OBa(G);D=c;E=w}}w=k[e+4>>2]|0;if(!w){H=D;I=E}else{j0a(w);H=D;I=E}}else{E=Hc()|0;H=M;I=E}E=k[m>>2]|0;if(!E)Sc(I|0);j0a(E);Sc(I|0)}function kta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0;d=r;r=r+160|0;e=d+140|0;f=d+120|0;g=d+112|0;h=d+104|0;j=d+96|0;l=d+152|0;m=d+88|0;n=d+72|0;o=d+48|0;p=d+32|0;q=d+64|0;s=d+24|0;t=d+16|0;u=d+56|0;v=d+8|0;w=d;k[f>>2]=b;y=f+4|0;z=tya(b)|0;A=sya(b)|0;B=k[A>>2]|0;C=k[A+4>>2]|0;if(!C){k[y>>2]=z;k[f+8>>2]=-1;k[f+12>>2]=B;D=0}else{h0a(C);k[y>>2]=z;k[f+8>>2]=-1;k[f+12>>2]=B;h0a(C);j0a(C);D=C}C=f+16|0;k[C>>2]=D;k[g>>2]=0;D=g+4|0;k[D>>2]=0;do if(b5a((k[b>>2]|0)+20|0,329672)|0){B=k[b>>2]|0;x=0;z=Ba(563,24)|0;A=x;x=0;if(!(A&1)){k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=33300;A=z+12|0;x=0;xa(604,A|0,B+20|0);B=x;x=0;if(B&1){B=Hc()|0;E=M;c0a(z);OBa(z);F=0;G=E;H=B;I=10;break}else{k[g>>2]=A;k[D>>2]=z;J=z;I=11;break}}else{K=0;I=9}}else{J=0;I=11}while(0);if((I|0)==11){x=0;xa(884,b|0,64);D=x;x=0;if(!(D&1)){k[h>>2]=0;D=h+4|0;k[D>>2]=0;x=0;if((k[(k[b>>2]|0)+80>>2]|0)==1){z=KBa(24)|0;A=x;x=0;if(A&1){L=0;I=15}else{k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=33300;A=z+12|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[h>>2]=A;k[D>>2]=z;N=A;O=z;I=18}}else{yya(j,b);z=x;x=0;if(z&1){L=0;I=15}else{z=k[j>>2]|0;A=j+4|0;B=k[A>>2]|0;k[j>>2]=0;k[A>>2]=0;k[h>>2]=z;k[D>>2]=B;N=z;O=B;I=18}}if((I|0)==18){i[l>>0]=0;i[l+1>>0]=0;i[l+2>>0]=0;i[l+3>>0]=0;i[l+4>>0]=0;i[l+5>>0]=1;x=0;nb(150,m|0,b|0,l|0,1);B=x;x=0;if(!(B&1)){k[n>>2]=0;B=n+4|0;k[B>>2]=0;k[n+8>>2]=0;z=n+8|0;D=o+4|0;A=0;j=0;E=0;a:while(1){P=j;Q=E;b:while(1){R=Q;c:while(1){d:while(1){S=k[b>>2]|0;T=k[S+80>>2]|0;switch(T|0){case 54:{U=S;V=P;W=R;break b;break}case 76:{X=S;Y=R;break c;break}case 62:case 68:case 77:case 79:{Z=T;break d;break}case 119:break;default:{_=S;$=T;aa=A;ba=P;ca=R;I=54;break a}}x=0;xa(900,o|0,b|0);T=x;x=0;if(T&1){I=25;break a}T=k[B>>2]|0;if(T>>>0<(k[z>>2]|0)>>>0){k[T>>2]=k[o>>2];k[T+4>>2]=k[D>>2];k[o>>2]=0;k[D>>2]=0;k[B>>2]=T+8;continue}x=0;xa(901,n|0,o|0);T=x;x=0;if(T&1){I=37;break a}T=k[D>>2]|0;if(!T)continue;j0a(T)}if(R){x=0;fb(140,p|0,286850,31);T=x;x=0;if(T&1){I=26;break a}x=0;xa(883,b|0,p|0);T=x;x=0;if(T&1){I=43;break a}K2a(p)}switch(Z|0){case 77:{da=3;break}case 68:{da=2;break}case 79:{da=1;break}case 62:{da=4;break}default:{x=0;fb(140,e|0,286882,29);T=x;x=0;if(T&1){I=26;break a}x=0;pa(57,0,e|0,286,286912,286948);T=x;x=0;if(T&1){I=51;break a}K2a(e);da=0}}x=0;Ba(619,k[b>>2]|0)|0;T=x;x=0;if(T&1){I=26;break a}R=da}x=0;Ba(619,X|0)|0;R=x;x=0;if(R&1){I=27;break a}else{P=1;Q=Y}}x=0;Ba(619,U|0)|0;Q=x;x=0;if(Q&1){I=28;break}else{A=1;j=V;E=W}}do if((I|0)==25){W=Hc()|0;ea=M;fa=W;I=29}else if((I|0)==26){W=Hc()|0;ea=M;fa=W;I=29}else if((I|0)==27){W=Hc()|0;ea=M;fa=W;I=29}else if((I|0)==28){W=Hc()|0;ea=M;fa=W;I=29}else if((I|0)==37){W=Hc()|0;E=M;V=k[D>>2]|0;if(!V){ga=W;ha=E}else{j0a(V);ga=W;ha=E}}else if((I|0)==43){E=Hc()|0;W=M;K2a(p);ga=E;ha=W}else if((I|0)==51){W=Hc()|0;E=M;K2a(e);ea=E;fa=W;I=29}else if((I|0)==54){k[q>>2]=0;W=q+4|0;k[W>>2]=0;x=0;if(($|0)==81){ysa(_)|0;E=x;x=0;if(!(E&1)?(x=0,nb(150,s|0,b|0,l|0,0),E=x,x=0,!(E&1)):0){E=k[s>>2]|0;V=s+4|0;j=k[V>>2]|0;k[s>>2]=0;k[V>>2]=0;k[q>>2]=E;k[W>>2]=j;ia=j}else I=58}else{wta(t,b);j=x;x=0;if(j&1)I=58;else{j=k[t>>2]|0;E=t+4|0;V=k[E>>2]|0;k[t>>2]=0;k[E>>2]=0;k[q>>2]=j;k[W>>2]=V;ia=V}}if((I|0)==58){V=Hc()|0;ga=V;ha=M;break}V=ia;k[u>>2]=0;W=u+4|0;k[W>>2]=0;x=0;j=Ba(618,k[f>>2]|0)|0;E=x;x=0;e:do if(!(E&1)){A=f+8|0;k[A>>2]=j;U=k[b>>2]|0;do if((k[U+80>>2]|0)==8){x=0;Ba(619,U|0)|0;Y=x;x=0;if(Y&1){ja=0;I=67;break e}else ka=0}else{k[w>>2]=0;k[w+4>>2]=0;x=0;fb(380,v|0,b|0,w|0);Y=x;x=0;if(Y&1){Y=Hc()|0;la=Y;ma=M;break e}Y=k[v>>2]|0;X=v+4|0;da=k[X>>2]|0;k[v>>2]=0;k[X>>2]=0;k[u>>2]=Y;k[W>>2]=da;X=da;if(!da){k[A>>2]=k[Y+12>>2];ka=0;break}else{h0a(X);k[A>>2]=k[Y+12>>2];j0a(X);ka=X;break}}while(0);if(!c)na=0;else{U=i[N>>0]|0;X=(U&1)==0;Y=(U&255)>>>1;U=X?Y:k[N+4>>2]|0;da=i[c>>0]|0;Z=(da&1)==0;f:do if((U|0)==((Z?(da&255)>>>1:k[c+4>>2]|0)|0)){o=Z?c+1|0:k[c+8>>2]|0;if(!X){oa=(ZLa(k[N+8>>2]|0,o,U)|0)==0;break}if(!U)oa=1;else{z=Y;Q=N+1|0;P=o;while(1){if((i[Q>>0]|0)!=(i[P>>0]|0)){oa=0;break f}z=z+-1|0;if(!z){oa=1;break}else{Q=Q+1|0;P=P+1|0}}}}else oa=0;while(0);na=oa&1}if((k[A>>2]|0)<0){x=0;Y=Ba(618,k[f>>2]|0)|0;U=x;x=0;if(U&1){ja=ka;I=67;break}k[A>>2]=Y}x=0;Y=Ba(563,112)|0;U=x;x=0;if(U&1){ja=ka;I=67}else{k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y>>2]=44564;U=Y+12|0;x=0;bb(43,U|0,y|0,h|0,ca|0,na<<24>>24!=0|0,g|0,m|0,aa<<24>>24!=0|0,n|0,q|0,ba<<24>>24!=0|0,u|0);X=x;x=0;if(X&1){X=Hc()|0;Z=M;c0a(Y);OBa(Y);qa=ka;ra=Z;sa=X;I=105;break}k[a>>2]=U;k[a+4>>2]=Y;if(ka)j0a(ka);if(ia)j0a(V);Y=k[n>>2]|0;if(Y){U=k[B>>2]|0;if((U|0)==(Y|0))ta=Y;else{X=U;while(1){U=X+-8|0;k[B>>2]=U;Z=k[X+-4>>2]|0;if(!Z)ua=U;else{j0a(Z);ua=k[B>>2]|0}if((ua|0)==(Y|0))break;else X=ua}ta=k[n>>2]|0}OBa(ta)}X=k[m+4>>2]|0;if(X)j0a(X);if(O)j0a(O);if(J)j0a(J);X=k[C>>2]|0;if(!X){r=d;return}j0a(X);r=d;return}}else{ja=0;I=67}while(0);if((I|0)==67){W=Hc()|0;qa=ja;ra=M;sa=W;I=105}if((I|0)==105)if(!qa){la=sa;ma=ra}else{j0a(qa);la=sa;ma=ra}if(!ia){ga=la;ha=ma}else{j0a(V);ga=la;ha=ma}}while(0);if((I|0)==29){ga=fa;ha=ea}ea=k[n>>2]|0;if(ea){fa=k[B>>2]|0;if((fa|0)==(ea|0))va=ea;else{ma=fa;while(1){fa=ma+-8|0;k[B>>2]=fa;la=k[ma+-4>>2]|0;if(!la)wa=fa;else{j0a(la);wa=k[B>>2]|0}if((wa|0)==(ea|0))break;else ma=wa}va=k[n>>2]|0}OBa(va)}va=k[m+4>>2]|0;if(!va){ya=ga;za=ha;Aa=O}else{j0a(va);ya=ga;za=ha;Aa=O}}else{L=O;I=15}}if((I|0)==15){O=Hc()|0;ya=O;za=M;Aa=L}if(!Aa){Ca=ya;Da=za;Ea=J}else{j0a(Aa);Ca=ya;Da=za;Ea=J}}else{K=J;I=9}}if((I|0)==9){J=Hc()|0;F=K;G=M;H=J;I=10}if((I|0)==10){Ca=H;Da=G;Ea=F}if(Ea)j0a(Ea);Ea=k[C>>2]|0;if(!Ea)Sc(Ca|0);j0a(Ea);Sc(Ca|0)}function lta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+80|0;d=c+40|0;e=c+32|0;f=c+16|0;g=c+8|0;h=c+60|0;j=c;k[d>>2]=b;l=d+4|0;m=tya(b)|0;n=sya(b)|0;o=k[n>>2]|0;p=k[n+4>>2]|0;if(!p){k[l>>2]=m;k[d+8>>2]=-1;k[d+12>>2]=o;q=0}else{h0a(p);k[l>>2]=m;k[d+8>>2]=-1;k[d+12>>2]=o;h0a(p);j0a(p);q=p}p=d+16|0;k[p>>2]=q;x=0;xa(884,b|0,83);q=x;x=0;if(!(q&1)?(x=0,xa(888,e|0,b|0),q=x,x=0,!(q&1)):0){k[f>>2]=0;q=f+4|0;k[q>>2]=0;k[f+8>>2]=0;x=0;xa(884,b|0,5);o=x;x=0;do if(!(o&1)){m=j+4|0;n=f+8|0;s=g+4|0;while(1){if((k[(k[b>>2]|0)+80>>2]|0)==6){t=23;break};i[h>>0]=0;i[h+1>>0]=0;i[h+2>>0]=0;i[h+3>>0]=0;i[h+4>>0]=0;i[h+5>>0]=0;k[j>>2]=0;k[m>>2]=0;x=0;nb(148,g|0,b|0,h|0,j|0);u=x;x=0;if(u&1){t=20;break}u=k[q>>2]|0;if(u>>>0>=(k[n>>2]|0)>>>0){x=0;xa(902,f|0,g|0);v=x;x=0;if(v&1){t=21;break}v=k[s>>2]|0;if(v)j0a(v)}else{k[u>>2]=k[g>>2];k[u+4>>2]=k[s>>2];k[g>>2]=0;k[s>>2]=0;k[q>>2]=u+8}x=0;xa(884,b|0,8);u=x;x=0;if(u&1){t=17;break}}if((t|0)==17){n=Hc()|0;w=n;y=M;t=19;break}else if((t|0)==20){n=Hc()|0;z=M;A=n;break}else if((t|0)==21){n=Hc()|0;m=M;u=k[s>>2]|0;if(!u){z=m;A=n;break}j0a(u);z=m;A=n;break}else if((t|0)==23){n=k[d>>2]|0;x=0;m=Ba(618,n|0)|0;u=x;x=0;if(u&1){t=18;break}u=d+8|0;k[u>>2]=m;x=0;xa(884,b|0,6);v=x;x=0;if(v&1){t=18;break}if((m|0)<0){x=0;m=Ba(618,n|0)|0;n=x;x=0;if(n&1){t=18;break}k[u>>2]=m}x=0;nb(151,a|0,l|0,e|0,f|0);m=x;x=0;if(m&1){t=18;break}m=k[f>>2]|0;if(m){u=k[q>>2]|0;if((u|0)==(m|0))B=m;else{n=u;while(1){u=n+-8|0;k[q>>2]=u;v=k[n+-4>>2]|0;if(!v)C=u;else{j0a(v);C=k[q>>2]|0}if((C|0)==(m|0))break;else n=C}B=k[f>>2]|0}OBa(B)}n=k[e+4>>2]|0;if(n)j0a(n);n=k[p>>2]|0;if(!n){r=c;return}j0a(n);r=c;return}}else t=18;while(0);if((t|0)==18){c=Hc()|0;w=c;y=M;t=19}if((t|0)==19){z=y;A=w}w=k[f>>2]|0;if(w){y=k[q>>2]|0;if((y|0)==(w|0))D=w;else{t=y;while(1){y=t+-8|0;k[q>>2]=y;c=k[t+-4>>2]|0;if(!c)E=y;else{j0a(c);E=k[q>>2]|0}if((E|0)==(w|0))break;else t=E}D=k[f>>2]|0}OBa(D)}D=k[e+4>>2]|0;if(!D){F=z;G=A}else{j0a(D);F=z;G=A}}else{A=Hc()|0;F=M;G=A}A=k[p>>2]|0;if(!A)Sc(G|0);j0a(A);Sc(G|0)}function mta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;c=r;r=r+80|0;d=c+48|0;e=c+40|0;f=c+24|0;g=c+16|0;h=c;k[d>>2]=b;i=d+4|0;j=tya(b)|0;l=sya(b)|0;m=k[l>>2]|0;n=k[l+4>>2]|0;if(!n){k[i>>2]=j;k[d+8>>2]=-1;k[d+12>>2]=m;o=0}else{h0a(n);k[i>>2]=j;k[d+8>>2]=-1;k[d+12>>2]=m;h0a(n);j0a(n);o=n}n=d+16|0;k[n>>2]=o;x=0;xa(884,b|0,60);o=x;x=0;if(!(o&1)?(x=0,xa(888,e|0,b|0),o=x,x=0,!(o&1)):0){k[f>>2]=0;o=f+4|0;k[o>>2]=0;k[f+8>>2]=0;x=0;xa(884,b|0,5);m=x;x=0;a:do if(!(m&1)){b:do if((k[(k[b>>2]|0)+80>>2]|0)!=6){j=f+8|0;l=g+4|0;while(1){x=0;xa(903,g|0,b|0);p=x;x=0;if(p&1){q=17;break}p=k[o>>2]|0;if(p>>>0>=(k[j>>2]|0)>>>0){x=0;xa(904,f|0,g|0);s=x;x=0;if(s&1){q=20;break}s=k[l>>2]|0;if(s)j0a(s)}else{k[p>>2]=k[g>>2];k[p+4>>2]=k[l>>2];k[g>>2]=0;k[l>>2]=0;k[o>>2]=p+8}if((k[(k[b>>2]|0)+80>>2]|0)==6)break b;x=0;xa(884,b|0,24);p=x;x=0;if(p&1){q=17;break}if((k[(k[b>>2]|0)+80>>2]|0)==119)continue;x=0;fb(140,h|0,287034,29);p=x;x=0;if(p&1){q=17;break}x=0;xa(883,b|0,h|0);p=x;x=0;if(p&1){q=27;break}K2a(h);if((k[(k[b>>2]|0)+80>>2]|0)==6)break b}if((q|0)==17){j=Hc()|0;t=j;u=M;q=19;break a}else if((q|0)==20){j=Hc()|0;p=M;s=k[l>>2]|0;if(!s){v=p;w=j;break a}j0a(s);v=p;w=j;break a}else if((q|0)==27){j=Hc()|0;p=M;K2a(h);v=p;w=j;break a}}while(0);j=k[d>>2]|0;x=0;p=Ba(618,j|0)|0;s=x;x=0;if(!(s&1)?(s=d+8|0,k[s>>2]=p,x=0,xa(884,b|0,6),y=x,x=0,!(y&1)):0){if((p|0)<0){x=0;p=Ba(618,j|0)|0;j=x;x=0;if(j&1){q=18;break}k[s>>2]=p}x=0;nb(152,a|0,i|0,e|0,f|0);p=x;x=0;if(!(p&1)){p=k[f>>2]|0;if(p){s=k[o>>2]|0;if((s|0)==(p|0))z=p;else{j=s;while(1){s=j+-8|0;k[o>>2]=s;y=k[j+-4>>2]|0;if(!y)A=s;else{j0a(y);A=k[o>>2]|0}if((A|0)==(p|0))break;else j=A}z=k[f>>2]|0}OBa(z)}j=k[e+4>>2]|0;if(j)j0a(j);j=k[n>>2]|0;if(!j){r=c;return}j0a(j);r=c;return}else q=18}else q=18}else q=18;while(0);if((q|0)==18){c=Hc()|0;t=c;u=M;q=19}if((q|0)==19){v=u;w=t}t=k[f>>2]|0;if(t){u=k[o>>2]|0;if((u|0)==(t|0))B=t;else{q=u;while(1){u=q+-8|0;k[o>>2]=u;c=k[q+-4>>2]|0;if(!c)C=u;else{j0a(c);C=k[o>>2]|0}if((C|0)==(t|0))break;else q=C}B=k[f>>2]|0}OBa(B)}B=k[e+4>>2]|0;if(!B){D=v;E=w}else{j0a(B);D=v;E=w}}else{w=Hc()|0;D=M;E=w}w=k[n>>2]|0;if(!w)Sc(E|0);j0a(w);Sc(E|0)}function nta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0;e=r;r=r+160|0;f=e+132|0;g=e+112|0;h=e+104|0;j=e+96|0;l=e+145|0;m=e+144|0;n=e+92|0;o=e+88|0;p=e+80|0;q=e+60|0;s=e+48|0;t=e+36|0;u=e+24|0;v=e+16|0;w=e+72|0;y=e+8|0;z=e;A=k[d>>2]|0;do if(A){B=k[d+4>>2]|0;C=(B|0)==0;if(!C)h0a(B);k[g>>2]=b;D=A+8|0;E=k[D+4>>2]|0;F=g+4|0;k[F>>2]=k[D>>2];k[F+4>>2]=E;k[g+12>>2]=k[A+16>>2];E=k[A+20>>2]|0;k[g+16>>2]=E;if(E)h0a(E);if(!C)j0a(B)}else{k[g>>2]=b;B=g+4|0;x=0;C=Ba(616,b|0)|0;E=x;x=0;if(!(E&1)?(x=0,E=Ba(617,b|0)|0,F=x,x=0,!(F&1)):0){F=k[E>>2]|0;D=k[E+4>>2]|0;if(!D){k[B>>2]=C;k[g+8>>2]=-1;k[g+12>>2]=F;k[g+16>>2]=0;break}else{h0a(D);k[B>>2]=C;k[g+8>>2]=-1;k[g+12>>2]=F;k[g+16>>2]=D;h0a(D);j0a(D);break}}D=Hc()|0;G=M;H=D;Sc(H|0)}while(0);k[h>>2]=0;A=h+4|0;k[A>>2]=0;D=k[d>>2]|0;F=D;do if(!D){x=0;fb(381,j|0,b|0,(i[c>>0]|0)!=0|0);C=x;x=0;if(C&1){C=Hc()|0;I=C;J=M;break}C=k[j>>2]|0;B=j+4|0;E=k[B>>2]|0;k[j>>2]=0;k[B>>2]=0;k[h>>2]=C;k[A>>2]=E;B=C;K=E;if(C)if(!E){k[g+8>>2]=k[C+12>>2];L=0;N=C;O=B;P=24;break}else{h0a(K);k[g+8>>2]=k[C+12>>2];j0a(K);L=K;N=C;O=B;P=24;break}else{L=K;N=0;O=0;P=24}}else{K=k[d+4>>2]|0;if(K)h0a(K);k[h>>2]=F;k[A>>2]=K;L=K;N=F;O=D;P=24}while(0);if((P|0)==24){i[l>>0]=0;i[m>>0]=0;k[n>>2]=0;k[o>>2]=0;k[p>>2]=0;D=p+4|0;k[D>>2]=0;F=c+1|0;A=c+2|0;d=c+5|0;a:do if(!O){j=0;K=0;b:while(1){B=k[b>>2]|0;C=k[B+80>>2]|0;c:do if(!(i[F>>0]|0)){Q=K;R=B;S=C}else{E=B;T=C;U=K;while(1){switch(T|0){case 68:case 77:case 79:break;default:{Q=U;R=E;S=T;break c}}if(U){x=0;fb(140,q|0,287064,29);V=x;x=0;if(V&1){P=56;break b}x=0;xa(883,b|0,q|0);V=x;x=0;if(V&1){P=53;break b}K2a(q)}switch(T|0){case 77:{W=3;break}case 68:{W=2;break}case 79:{W=1;break}default:{x=0;fb(140,f|0,286882,29);V=x;x=0;if(V&1){P=56;break b}x=0;pa(57,0,f|0,286,286912,286948);V=x;x=0;if(V&1){P=54;break b}K2a(f);W=0}}x=0;Ba(619,k[b>>2]|0)|0;V=x;x=0;if(V&1){P=56;break b}k[n>>2]=W;V=k[b>>2]|0;X=k[V+80>>2]|0;if(!(i[F>>0]|0)){Q=W;R=V;S=X;break c}else{E=V;T=X;U=W}}}while(0);do if((S|0)==67&(i[A>>0]|0)!=0){i[l>>0]=1;Y=R;Z=j}else{if((S|0)==54){i[m>>0]=1;Y=R;Z=j;break}if(!(i[d>>0]|0)){P=95;break a}C=(S|0)==73;switch(S|0){case 73:case 82:break;default:{P=95;break a}}if(j){x=0;fb(140,s|0,287094,27);B=x;x=0;if(B&1){P=57;break b}x=0;xa(883,b|0,s|0);B=x;x=0;if(B&1){P=55;break b}K2a(s)}x=0;fb(140,t|0,287122,44);B=x;x=0;if(B&1){P=57;break b}x=0;xa(883,b|0,t|0);B=x;x=0;if(B&1){P=91;break b}K2a(t);B=C?2:1;k[o>>2]=B;Y=k[b>>2]|0;Z=B}while(0);x=0;Ba(619,Y|0)|0;B=x;x=0;if(B&1){P=57;break}else{j=Z;K=Q}}if((P|0)==53){K=Hc()|0;_=K;$=M;P=68;break}else if((P|0)==54){K=Hc()|0;aa=K;ba=M;P=76;break}else if((P|0)==55){K=Hc()|0;ca=K;da=M;P=90;break}else if((P|0)==56){K=Hc()|0;ea=0;fa=M;ga=K;P=66;break}else if((P|0)==57){K=Hc()|0;ea=0;fa=M;ga=K;P=66;break}else if((P|0)==91){K=Hc()|0;j=M;K2a(t);ha=j;ia=K;break}}else{K=0;j=0;d:while(1){B=k[b>>2]|0;C=k[B+80>>2]|0;e:do if(!(i[F>>0]|0)){ja=j;ka=B;la=C}else{U=C;T=j;E=B;while(1){switch(U|0){case 68:case 77:case 79:break;default:{ja=T;ka=E;la=U;break e}}if(T){x=0;fb(140,q|0,287064,29);X=x;x=0;if(X&1){P=63;break d}x=0;xa(883,b|0,q|0);X=x;x=0;if(X&1){P=67;break d}K2a(q)}switch(U|0){case 77:{ma=3;break}case 68:{ma=2;break}case 79:{ma=1;break}default:{x=0;fb(140,f|0,286882,29);X=x;x=0;if(X&1){P=63;break d}x=0;pa(57,0,f|0,286,286912,286948);X=x;x=0;if(X&1){P=75;break d}K2a(f);ma=0}}x=0;Ba(619,k[b>>2]|0)|0;X=x;x=0;if(X&1){P=63;break d}k[n>>2]=ma;X=k[b>>2]|0;V=k[X+80>>2]|0;if(!(i[F>>0]|0)){ja=ma;ka=X;la=V;break e}else{U=V;T=ma;E=X}}}while(0);do if((la|0)==67&(i[A>>0]|0)!=0){i[l>>0]=1;na=ka;oa=K}else{if((la|0)==54){i[m>>0]=1;na=ka;oa=K;break}if(!(i[d>>0]|0)){P=95;break a}B=(la|0)==73;switch(la|0){case 73:case 82:break;default:{P=95;break a}}if(K){x=0;fb(140,s|0,287094,27);C=x;x=0;if(C&1){P=64;break d}x=0;xa(883,b|0,s|0);C=x;x=0;if(C&1){P=89;break d}K2a(s)}C=k[b>>2]|0;E=B?2:1;k[o>>2]=E;na=C;oa=E}while(0);x=0;Ba(619,na|0)|0;E=x;x=0;if(E&1){P=64;break}else{K=oa;j=ja}}if((P|0)==63){j=Hc()|0;ea=0;fa=M;ga=j;P=66;break}else if((P|0)==64){j=Hc()|0;ea=0;fa=M;ga=j;P=66;break}else if((P|0)==67){j=Hc()|0;_=j;$=M;P=68;break}else if((P|0)==75){j=Hc()|0;aa=j;ba=M;P=76;break}else if((P|0)==89){j=Hc()|0;ca=j;da=M;P=90;break}}while(0);f:do if((P|0)==68){K2a(q);ha=$;ia=_}else if((P|0)==76){K2a(f);ea=0;fa=ba;ga=aa;P=66}else if((P|0)==90){K2a(s);ha=da;ia=ca}else if((P|0)==95){x=0;ja=Ba(618,k[g>>2]|0)|0;oa=x;x=0;g:do if(oa&1)qa=0;else{na=g+8|0;k[na>>2]=ja;do if((i[c+3>>0]|0)!=0?(k[(k[b>>2]|0)+80>>2]|0)!=119:0){x=0;la=Ba(563,24)|0;d=x;x=0;if(d&1){qa=0;break g}k[la+4>>2]=0;k[la+8>>2]=0;k[la>>2]=33300;d=la+12|0;x=0;fb(140,d|0,329672,0);ka=x;x=0;if(ka&1){ka=Hc()|0;A=M;c0a(la);OBa(la);ea=0;fa=A;ga=ka;P=66;break f}k[p>>2]=d;k[D>>2]=la;x=0;fb(140,u|0,329672,0);d=x;x=0;if(d&1){qa=la;break g}x=0;pa(57,(O|0)!=0|0,u|0,474,286912,287167);d=x;x=0;if(d&1){d=Hc()|0;ka=M;K2a(u);ra=ka;sa=d;ta=la;P=134;break f}K2a(u);if(!L){k[na>>2]=k[N+12>>2];ua=la;break}else{h0a(L);k[na>>2]=k[N+12>>2];j0a(L);ua=la;break}}else P=107;while(0);if((P|0)==107){x=0;xa(888,v|0,b|0);la=x;x=0;if(la&1){qa=0;break}la=k[v>>2]|0;d=v+4|0;ka=k[d>>2]|0;k[v>>2]=0;k[d>>2]=0;k[p>>2]=la;k[D>>2]=ka;ua=ka}k[w>>2]=0;ka=w+4|0;k[ka>>2]=0;do if((i[c+4>>0]|0)!=0?(la=k[b>>2]|0,(k[la+80>>2]|0)==12):0){x=0;Ba(619,la|0)|0;la=x;x=0;if(la&1){la=Hc()|0;ra=M;sa=la;ta=ua;P=134;break f}k[z>>2]=0;k[z+4>>2]=0;x=0;fb(382,y|0,b|0,z|0);la=x;x=0;if(la&1){la=Hc()|0;ra=M;sa=la;ta=ua;P=134;break f}la=k[y>>2]|0;d=y+4|0;A=k[d>>2]|0;k[y>>2]=0;k[d>>2]=0;k[w>>2]=la;k[ka>>2]=A;d=A;if(!A){A=k[la+12>>2]|0;k[na>>2]=A;va=A;wa=0;break}else{h0a(d);k[na>>2]=k[la+12>>2];j0a(d);ya=d;P=118;break}}else{ya=0;P=118}while(0);if((P|0)==118){va=k[na>>2]|0;wa=ya}ka=g+4|0;if((va|0)<0){x=0;d=Ba(618,k[g>>2]|0)|0;la=x;x=0;if(!(la&1)){k[na>>2]=d;P=122}}else P=122;if((P|0)==122?(x=0,Ra(44,a|0,ka|0,h|0,p|0,w|0,n|0,F|0,l|0,m|0,o|0),ka=x,x=0,!(ka&1)):0){if(wa)j0a(wa);if(ua)j0a(ua);if(L)j0a(L);ka=k[g+16>>2]|0;if(!ka){r=e;return}j0a(ka);r=e;return}ka=Hc()|0;d=M;if(!wa){ra=d;sa=ka;ta=ua;P=134;break f}j0a(wa);ra=d;sa=ka;ta=ua;P=134;break f}while(0);ja=Hc()|0;ea=qa;fa=M;ga=ja;P=66}while(0);if((P|0)==66){ra=fa;sa=ga;ta=ea;P=134}if((P|0)==134)if(!ta){ha=ra;ia=sa}else{j0a(ta);ha=ra;ia=sa}if(!L){I=ia;J=ha}else{j0a(L);I=ia;J=ha}}ha=k[g+16>>2]|0;if(!ha){G=J;H=I;Sc(H|0)}j0a(ha);G=J;H=I;Sc(H|0)}function ota(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;c=r;r=r+128|0;d=c+24|0;e=c;f=c+88|0;g=c+80|0;h=c+108|0;j=c+64|0;l=c+56|0;m=c+72|0;n=c+48|0;o=e+16|0;k[o>>2]=e;k[e>>2]=44592;k[e+4>>2]=b;k[d+16>>2]=d;x=0;xa(k[(k[e>>2]|0)+12>>2]|0,e|0,d|0);p=x;x=0;if(p&1){p=Hc()|0;q=M;s=k[o>>2]|0;if((s|0)==(e|0)){Sf[k[(k[e>>2]|0)+16>>2]&2047](e);t=q;u=p;Sc(u|0)}if(!s){t=q;u=p;Sc(u|0)}Sf[k[(k[s>>2]|0)+20>>2]&2047](s);t=q;u=p;Sc(u|0)}p=k[o>>2]|0;if((p|0)!=(e|0)){if(p)Sf[k[(k[p>>2]|0)+20>>2]&2047](p)}else Sf[k[(k[e>>2]|0)+16>>2]&2047](e);i[b+12>>0]=1;k[f>>2]=b;e=f+4|0;x=0;p=Ba(616,b|0)|0;o=x;x=0;if(!(o&1)?(x=0,o=Ba(617,b|0)|0,q=x,x=0,!(q&1)):0){q=k[o>>2]|0;s=k[o+4>>2]|0;if(!s){k[e>>2]=p;k[f+8>>2]=-1;k[f+12>>2]=q;k[f+16>>2]=0}else{h0a(s);k[e>>2]=p;k[f+8>>2]=-1;k[f+12>>2]=q;k[f+16>>2]=s;h0a(s);j0a(s)}do if(b5a((k[b>>2]|0)+20|0,329672)|0){s=k[b>>2]|0;x=0;q=Ba(563,24)|0;p=x;x=0;if(!(p&1)){k[q+4>>2]=0;k[q+8>>2]=0;k[q>>2]=33300;p=q+12|0;x=0;xa(604,p|0,s+20|0);s=x;x=0;if(s&1){s=Hc()|0;o=M;c0a(q);OBa(q);v=0;w=o;y=s;z=22;break}else{A=p;B=q;z=23;break}}else{C=0;z=21}}else{A=0;B=0;z=23}while(0);if((z|0)==23){x=0;xa(884,b|0,74);q=x;x=0;if(!(q&1)?(x=0,xa(888,g|0,b|0),q=x,x=0,!(q&1)):0){if((k[(k[b>>2]|0)+80>>2]|0)==1){i[h>>0]=0;i[h+1>>0]=0;i[h+2>>0]=0;i[h+3>>0]=0;i[h+4>>0]=0;i[h+2>>0]=1;i[h+5>>0]=1;x=0;nb(150,j|0,b|0,h|0,1);h=x;x=0;if(h&1)z=28;else{h=k[j>>2]|0;q=j+4|0;p=k[q>>2]|0;k[j>>2]=0;k[q>>2]=0;D=h;E=p;z=31}}else{x=0;xa(905,l|0,b|0);p=x;x=0;if(p&1)z=28;else{p=k[l>>2]|0;h=l+4|0;q=k[h>>2]|0;k[l>>2]=0;k[h>>2]=0;D=p;E=q;z=31}}if((z|0)==28){q=Hc()|0;F=q;G=M}else if((z|0)==31){k[n>>2]=0;k[n+4>>2]=0;x=0;fb(380,m|0,b|0,n|0);n=x;x=0;if(!(n&1)){n=k[m>>2]|0;b=k[m+4>>2]|0;m=(b|0)==0;if(m){q=k[n+12>>2]|0;p=f+8|0;k[p>>2]=q;H=q;I=p}else{h0a(b);p=f+8|0;k[p>>2]=k[n+12>>2];j0a(b);H=k[p>>2]|0;I=p}if((H|0)<0){x=0;H=Ba(618,k[f>>2]|0)|0;p=x;x=0;if(p&1)z=60;else{k[I>>2]=H;z=38}}else z=38;do if((z|0)==38){x=0;H=Ba(563,96)|0;I=x;x=0;if(I&1)z=60;else{k[H+4>>2]=0;k[H+8>>2]=0;k[H>>2]=44636;I=H+12|0;x=0;xa(769,I|0,e|0);p=x;x=0;if(p&1){p=Hc()|0;q=M;c0a(H);OBa(H);J=q;K=p;break}k[I>>2]=33328;k[H+36>>2]=k[g>>2];p=g+4|0;q=k[p>>2]|0;k[H+40>>2]=q;if(q)h0a(q);q=H+44|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;k[I>>2]=37064;k[H+64>>2]=D;q=E;k[H+68>>2]=q;h=(E|0)==0;if(!h)h0a(q);k[H+72>>2]=0;k[H+76>>2]=0;k[H+80>>2]=A;l=B;k[H+84>>2]=l;j=(B|0)==0;if(!j)h0a(l);k[I>>2]=35568;k[H+88>>2]=n;k[H+92>>2]=b;if(m){k[a>>2]=I;k[a+4>>2]=H}else{h0a(b);k[a>>2]=I;k[a+4>>2]=H;j0a(b)}if(!h)j0a(q);q=k[p>>2]|0;if(q)j0a(q);if(!j)j0a(l);l=k[f+16>>2]|0;if(!l){oy(d);r=c;return}j0a(l);oy(d);r=c;return}}while(0);if((z|0)==60){c=Hc()|0;J=M;K=c}if(m){L=J;N=K}else{j0a(b);L=J;N=K}}else{K=Hc()|0;L=M;N=K}if(!E){F=N;G=L}else{j0a(E);F=N;G=L}}L=k[g+4>>2]|0;if(!L){O=G;P=F;Q=B}else{j0a(L);O=G;P=F;Q=B}}else{C=B;z=21}}if((z|0)==21){B=Hc()|0;v=C;w=M;y=B;z=22}if((z|0)==22){O=w;P=y;Q=v}if(Q)j0a(Q);Q=k[f+16>>2]|0;if(!Q){R=O;S=P}else{j0a(Q);R=O;S=P}}else{P=Hc()|0;R=M;S=P}oy(d);t=R;u=S;Sc(u|0)}function pta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+80|0;d=c+40|0;e=c+32|0;f=c+24|0;g=c+16|0;h=c+62|0;j=c+8|0;l=c;m=c+60|0;k[d>>2]=b;n=d+4|0;o=tya(b)|0;p=sya(b)|0;q=k[p>>2]|0;s=k[p+4>>2]|0;if(!s){k[n>>2]=o;k[d+8>>2]=-1;k[d+12>>2]=q;t=0}else{h0a(s);k[n>>2]=o;k[d+8>>2]=-1;k[d+12>>2]=q;h0a(s);j0a(s);t=s}s=d+16|0;k[s>>2]=t;k[e>>2]=0;t=e+4|0;k[t>>2]=0;do if(b5a((k[b>>2]|0)+20|0,329672)|0){q=k[b>>2]|0;x=0;o=Ba(563,24)|0;p=x;x=0;if(!(p&1)){k[o+4>>2]=0;k[o+8>>2]=0;k[o>>2]=33300;p=o+12|0;x=0;xa(604,p|0,q+20|0);q=x;x=0;if(q&1){q=Hc()|0;u=M;c0a(o);OBa(o);v=0;w=u;y=q;z=10;break}else{k[e>>2]=p;k[t>>2]=o;A=o;z=11;break}}else{B=0;z=9}}else{A=0;z=11}while(0);if((z|0)==11){x=0;xa(884,b|0,61);t=x;x=0;if(!(t&1)?(x=0,xa(888,f|0,b|0),t=x,x=0,!(t&1)):0){k[g>>2]=0;t=g+4|0;k[t>>2]=0;if((k[(k[b>>2]|0)+80>>2]|0)==1){i[h>>0]=0;i[h+1>>0]=0;i[h+2>>0]=0;i[h+3>>0]=0;i[h+4>>0]=0;i[h+5>>0]=0;i[h+2>>0]=1;x=0;nb(150,j|0,b|0,h|0,1);h=x;x=0;if(h&1)z=16;else{h=k[j>>2]|0;o=j+4|0;p=k[o>>2]|0;k[j>>2]=0;k[o>>2]=0;k[g>>2]=h;k[t>>2]=p;C=p;z=23}}else{x=0;xa(905,l|0,b|0);p=x;x=0;if(p&1)z=16;else{p=k[l>>2]|0;h=l+4|0;o=k[h>>2]|0;k[l>>2]=0;k[h>>2]=0;k[g>>2]=p;k[t>>2]=o;C=o;z=23}}if((z|0)==16){o=Hc()|0;D=M;E=o}else if((z|0)==23){o=C;i[m>>0]=0;t=k[b>>2]|0;if(!((k[t+80>>2]|0)==50?(i[m>>0]=1,x=0,Ba(619,t|0)|0,t=x,x=0,t&1):0))z=25;do if(((z|0)==25?(t=k[d>>2]|0,x=0,p=Ba(618,t|0)|0,h=x,x=0,!(h&1)):0)?(h=d+8|0,k[h>>2]=p,x=0,xa(884,b|0,8),l=x,x=0,!(l&1)):0){if((p|0)<0){x=0;p=Ba(618,t|0)|0;t=x;x=0;if(t&1)break;k[h>>2]=p}x=0;La(61,a|0,n|0,f|0,e|0,g|0,m|0);p=x;x=0;if(!(p&1)){if(C)j0a(o);p=k[f+4>>2]|0;if(p)j0a(p);if(A)j0a(A);p=k[s>>2]|0;if(!p){r=c;return}j0a(p);r=c;return}}while(0);c=Hc()|0;m=M;if(!C){D=m;E=c}else{j0a(o);D=m;E=c}}c=k[f+4>>2]|0;if(!c){F=D;G=E;H=A}else{j0a(c);F=D;G=E;H=A}}else{B=A;z=9}}if((z|0)==9){A=Hc()|0;v=B;w=M;y=A;z=10}if((z|0)==10){F=w;G=y;H=v}if(H)j0a(H);H=k[s>>2]|0;if(!H)Sc(G|0);j0a(H);Sc(G|0)}function qta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+48|0;d=c+24|0;e=c+16|0;f=c+8|0;g=c;k[d>>2]=b;h=d+4|0;i=tya(b)|0;j=sya(b)|0;l=k[j>>2]|0;m=k[j+4>>2]|0;if(!m){k[h>>2]=i;k[d+8>>2]=-1;k[d+12>>2]=l;n=0}else{h0a(m);k[h>>2]=i;k[d+8>>2]=-1;k[d+12>>2]=l;h0a(m);j0a(m);n=m}m=d+16|0;k[m>>2]=n;x=0;xa(884,b|0,85);n=x;x=0;if(!(n&1)?(x=0,xa(898,e|0,b|0),n=x,x=0,!(n&1)):0){k[f>>2]=0;n=f+4|0;k[n>>2]=0;x=0;xa(884,b|0,63);l=x;x=0;do if(!(l&1)){i=k[b>>2]|0;x=0;if((k[i+80>>2]|0)==35){ysa(i)|0;i=x;x=0;if(i&1){o=10;break}else p=0}else{zta(g,b,0);i=x;x=0;if(i&1){o=10;break}i=k[g>>2]|0;j=g+4|0;q=k[j>>2]|0;k[g>>2]=0;k[j>>2]=0;k[f>>2]=i;k[n>>2]=q;p=q}q=k[d>>2]|0;x=0;i=Ba(618,q|0)|0;j=x;x=0;do if(!(j&1)?(s=d+8|0,k[s>>2]=i,x=0,xa(884,b|0,8),t=x,x=0,!(t&1)):0){if((i|0)<0){x=0;t=Ba(618,q|0)|0;u=x;x=0;if(u&1)break;k[s>>2]=t}x=0;nb(153,a|0,h|0,e|0,f|0);t=x;x=0;if(!(t&1)){if(p)j0a(p);t=k[e+4>>2]|0;if(t)j0a(t);t=k[m>>2]|0;if(!t){r=c;return}j0a(t);r=c;return}}while(0);q=Hc()|0;i=M;if(!p){v=i;w=q}else{j0a(p);v=i;w=q}}else o=10;while(0);if((o|0)==10){o=Hc()|0;v=M;w=o}o=k[e+4>>2]|0;if(!o){y=v;z=w}else{j0a(o);y=v;z=w}}else{w=Hc()|0;y=M;z=w}w=k[m>>2]|0;if(!w)Sc(z|0);j0a(w);Sc(z|0)}function rta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;c=r;r=r+64|0;d=c+40|0;e=c+28|0;f=c+16|0;g=c+8|0;h=c;k[d>>2]=b;i=d+4|0;j=tya(b)|0;l=sya(b)|0;m=k[l>>2]|0;n=k[l+4>>2]|0;if(!n){k[i>>2]=j;k[d+8>>2]=-1;k[d+12>>2]=m;o=0}else{h0a(n);k[i>>2]=j;k[d+8>>2]=-1;k[d+12>>2]=m;h0a(n);j0a(n);o=n}n=d+16|0;k[n>>2]=o;x=0;o=Ba(618,b|0)|0;m=x;x=0;a:do if(!(m&1)){j=d+8|0;k[j>>2]=o;x=0;xa(888,g|0,b|0);l=x;x=0;if(l&1){l=Hc()|0;p=l;q=M;break}x=0;xa(604,f|0,k[g>>2]|0);l=x;x=0;if(l&1){l=Hc()|0;s=l;t=M}else{k[e>>2]=0;l=e+4|0;k[l>>2]=0;k[e+8>>2]=0;x=0;u=Ba(563,12)|0;v=x;x=0;do if(v&1){w=Hc()|0;y=w;z=M}else{k[l>>2]=u;k[e>>2]=u;w=e+8|0;k[w>>2]=u+12;x=0;xa(604,u|0,f|0);A=x;x=0;if(A&1){A=Hc()|0;B=M;C=k[e>>2]|0;if(!C){y=A;z=B;break}D=k[l>>2]|0;if((D|0)==(C|0))E=C;else{F=D;do{D=F+-12|0;k[l>>2]=D;K2a(D);F=k[l>>2]|0}while((F|0)!=(C|0));E=k[e>>2]|0}OBa(E);y=A;z=B;break}k[l>>2]=(k[l>>2]|0)+12;K2a(f);C=k[g+4>>2]|0;if(C)j0a(C);C=k[b>>2]|0;b:do if((k[C+80>>2]|0)==9){F=h+4|0;D=C;while(1){x=0;Ba(619,D|0)|0;G=x;x=0;if(G&1){H=35;break}x=0;G=Ba(618,k[d>>2]|0)|0;I=x;x=0;if(I&1){H=35;break}k[j>>2]=G;x=0;xa(888,h|0,b|0);G=x;x=0;if(G&1){H=35;break}G=k[h>>2]|0;I=k[l>>2]|0;x=0;if((I|0)==(k[w>>2]|0)){Rx(e,G);J=x;x=0;if(J&1)break}else{n2a(I,G);G=x;x=0;if(G&1)break;k[l>>2]=(k[l>>2]|0)+12}G=k[F>>2]|0;if(G)j0a(G);D=k[b>>2]|0;if((k[D+80>>2]|0)!=9){H=40;break b}}if((H|0)==35){D=Hc()|0;K=D;L=M;H=37;break}D=Hc()|0;G=M;I=k[F>>2]|0;if(!I){N=D;O=G}else{j0a(I);N=D;O=G}}else H=40;while(0);if((H|0)==40){if((k[j>>2]|0)<0){x=0;w=Ba(618,k[d>>2]|0)|0;C=x;x=0;if(!(C&1)){k[j>>2]=w;H=43}}else H=43;if((H|0)==43?(x=0,fb(383,a|0,i|0,e|0),w=x,x=0,!(w&1)):0){w=k[e>>2]|0;if(w){C=k[l>>2]|0;if((C|0)==(w|0))P=w;else{B=C;do{C=B+-12|0;k[l>>2]=C;K2a(C);B=k[l>>2]|0}while((B|0)!=(w|0));P=k[e>>2]|0}OBa(P)}w=k[n>>2]|0;if(!w){r=c;return}j0a(w);r=c;return}w=Hc()|0;K=w;L=M;H=37}if((H|0)==37){N=K;O=L}w=k[e>>2]|0;if(!w){p=N;q=O;break a}B=k[l>>2]|0;if((B|0)==(w|0))Q=w;else{C=B;do{B=C+-12|0;k[l>>2]=B;K2a(B);C=k[l>>2]|0}while((C|0)!=(w|0));Q=k[e>>2]|0}OBa(Q);p=N;q=O;break a}while(0);K2a(f);s=y;t=z}l=k[g+4>>2]|0;if(!l){p=s;q=t}else{j0a(l);p=s;q=t}}else{l=Hc()|0;p=l;q=M}while(0);q=k[n>>2]|0;if(!q)Sc(p|0);j0a(q);Sc(p|0)}function sta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c+24|0;e=c+16|0;f=c+8|0;g=c;k[a>>2]=0;h=a+4|0;k[h>>2]=0;k[a+8>>2]=0;if((k[(k[b>>2]|0)+80>>2]|0)==2){r=c;return}k[e>>2]=0;k[e+4>>2]=0;x=0;fb(382,d|0,b|0,e|0);e=x;x=0;a:do if(!(e&1)){i=k[h>>2]|0;j=a+8|0;do if(i>>>0>=(k[j>>2]|0)>>>0){x=0;xa(906,a|0,d|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=k[d+4>>2]|0;if(!n){o=m;p=l;break a}j0a(n);o=m;p=l;break a}else{l=k[d+4>>2]|0;if(!l)break;j0a(l);break}}else{k[i>>2]=k[d>>2];l=d+4|0;k[i+4>>2]=k[l>>2];k[d>>2]=0;k[l>>2]=0;k[h>>2]=i+8}while(0);if((k[(k[b>>2]|0)+80>>2]|0)==2){r=c;return}i=g+4|0;l=f+4|0;while(1){x=0;xa(884,b|0,24);m=x;x=0;if(m&1){q=18;break}k[g>>2]=0;k[i>>2]=0;x=0;fb(382,f|0,b|0,g|0);m=x;x=0;if(m&1){q=22;break}m=k[h>>2]|0;if(m>>>0>=(k[j>>2]|0)>>>0){x=0;xa(906,a|0,f|0);n=x;x=0;if(n&1){q=23;break}n=k[l>>2]|0;if(n)j0a(n)}else{k[m>>2]=k[f>>2];k[m+4>>2]=k[l>>2];k[f>>2]=0;k[l>>2]=0;k[h>>2]=m+8}if((k[(k[b>>2]|0)+80>>2]|0)==2){q=25;break}}if((q|0)==18){j=Hc()|0;o=M;p=j;break}else if((q|0)==22){j=Hc()|0;o=M;p=j;break}else if((q|0)==23){j=Hc()|0;i=M;m=k[l>>2]|0;if(!m){o=i;p=j;break}j0a(m);o=i;p=j;break}else if((q|0)==25){r=c;return}}else{j=Hc()|0;o=M;p=j}while(0);o=k[a>>2]|0;if(!o)Sc(p|0);c=k[h>>2]|0;if((c|0)==(o|0))s=o;else{q=c;while(1){c=q+-8|0;k[h>>2]=c;b=k[q+-4>>2]|0;if(!b)t=c;else{j0a(b);t=k[h>>2]|0}if((t|0)==(o|0))break;else q=t}s=k[a>>2]|0}OBa(s);Sc(p|0)}function tta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;a:do switch(b|0){case 77:{e=3;break}case 68:{e=2;break}case 79:{e=1;break}case 62:{e=4;break}default:{q2a(d,286882,29);x=0;pa(57,0,d|0,286,286912,286948);f=x;x=0;if(f&1){f=Hc()|0;K2a(d);Sc(f|0)}else{K2a(d);e=0;break a}}}while(0);ysa(k[a>>2]|0)|0;r=c;return e|0}function uta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+80|0;f=e+44|0;g=e+32|0;h=e+64|0;j=e+24|0;l=e+16|0;m=e+8|0;n=e;k[f>>2]=b;o=f+4|0;p=tya(b)|0;q=sya(b)|0;s=k[q>>2]|0;t=k[q+4>>2]|0;if(!t){k[o>>2]=p;k[f+8>>2]=-1;k[f+12>>2]=s;u=0}else{h0a(t);k[o>>2]=p;k[f+8>>2]=-1;k[f+12>>2]=s;h0a(t);j0a(t);u=t}t=f+16|0;k[t>>2]=u;k[g>>2]=0;u=g+4|0;k[u>>2]=0;k[g+8>>2]=0;i[h>>0]=i[c>>0]|0;i[h+1>>0]=i[c+1>>0]|0;i[h+2>>0]=i[c+2>>0]|0;i[h+3>>0]=i[c+3>>0]|0;i[h+4>>0]=i[c+4>>0]|0;i[h+5>>0]=i[c+5>>0]|0;i[h+3>>0]=1;x=0;xa(884,b|0,1);c=x;x=0;a:do if(!(c&1)){if(d?(k[(k[b>>2]|0)+80>>2]|0)==2:0)v=b;else{k[l>>2]=0;k[l+4>>2]=0;x=0;nb(148,j|0,b|0,h|0,l|0);s=x;x=0;if(s&1){s=Hc()|0;w=M;y=s;break}s=k[u>>2]|0;p=g+8|0;do if(s>>>0>=(k[p>>2]|0)>>>0){x=0;xa(902,g|0,j|0);q=x;x=0;if(q&1){q=Hc()|0;z=M;A=k[j+4>>2]|0;if(!A){w=z;y=q;break a}j0a(A);w=z;y=q;break a}else{q=k[j+4>>2]|0;if(!q)break;j0a(q);break}}else{k[s>>2]=k[j>>2];q=j+4|0;k[s+4>>2]=k[q>>2];k[j>>2]=0;k[q>>2]=0;k[u>>2]=s+8}while(0);b:do if((k[(k[b>>2]|0)+80>>2]|0)!=2){s=n+4|0;q=m+4|0;while(1){x=0;xa(884,b|0,24);z=x;x=0;if(z&1){B=23;break}k[n>>2]=0;k[s>>2]=0;x=0;nb(148,m|0,b|0,h|0,n|0);z=x;x=0;if(z&1){B=29;break}z=k[u>>2]|0;if(z>>>0>=(k[p>>2]|0)>>>0){x=0;xa(902,g|0,m|0);A=x;x=0;if(A&1){B=30;break}A=k[q>>2]|0;if(A)j0a(A)}else{k[z>>2]=k[m>>2];k[z+4>>2]=k[q>>2];k[m>>2]=0;k[q>>2]=0;k[u>>2]=z+8}if((k[(k[b>>2]|0)+80>>2]|0)==2)break b}if((B|0)==23){s=Hc()|0;C=s;D=M;B=25;break a}else if((B|0)==29){s=Hc()|0;w=M;y=s;break a}else if((B|0)==30){s=Hc()|0;z=M;A=k[q>>2]|0;if(!A){w=z;y=s;break a}j0a(A);w=z;y=s;break a}}while(0);v=k[f>>2]|0}x=0;p=Ba(618,v|0)|0;s=x;x=0;if(!(s&1)?(s=f+8|0,k[s>>2]=p,x=0,Ba(619,k[b>>2]|0)|0,z=x,x=0,!(z&1)):0){if((p|0)<0){x=0;p=Ba(618,v|0)|0;z=x;x=0;if(z&1){B=24;break}k[s>>2]=p}x=0;fb(384,a|0,o|0,g|0);p=x;x=0;if(!(p&1)){p=k[g>>2]|0;if(p){s=k[u>>2]|0;if((s|0)==(p|0))E=p;else{z=s;while(1){s=z+-8|0;k[u>>2]=s;A=k[z+-4>>2]|0;if(!A)F=s;else{j0a(A);F=k[u>>2]|0}if((F|0)==(p|0))break;else z=F}E=k[g>>2]|0}OBa(E)}z=k[t>>2]|0;if(!z){r=e;return}j0a(z);r=e;return}else B=24}else B=24}else B=24;while(0);if((B|0)==24){e=Hc()|0;C=e;D=M;B=25}if((B|0)==25){w=D;y=C}C=k[g>>2]|0;if(C){D=k[u>>2]|0;if((D|0)==(C|0))G=C;else{w=D;while(1){D=w+-8|0;k[u>>2]=D;B=k[w+-4>>2]|0;if(!B)H=D;else{j0a(B);H=k[u>>2]|0}if((H|0)==(C|0))break;else w=H}G=k[g>>2]|0}OBa(G)}G=k[t>>2]|0;if(!G)Sc(y|0);j0a(G);Sc(y|0)}function vta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+64|0;d=c+32|0;e=c+24|0;f=c+12|0;g=c;k[d>>2]=b;h=d+4|0;i=tya(b)|0;j=sya(b)|0;l=k[j>>2]|0;m=k[j+4>>2]|0;if(!m){k[h>>2]=i;k[d+8>>2]=-1;k[d+12>>2]=l;n=0}else{h0a(m);k[h>>2]=i;k[d+8>>2]=-1;k[d+12>>2]=l;h0a(m);j0a(m);n=m}m=d+16|0;k[m>>2]=n;x=0;xa(889,e|0,b|0);n=x;x=0;if(!(n&1)){k[f>>2]=0;n=f+4|0;k[n>>2]=0;k[f+8>>2]=0;l=k[b>>2]|0;do if((k[l+80>>2]|0)!=1){i=k[e>>2]|0;j=k[e+4>>2]|0;if(!j){o=k[i+12>>2]|0;p=d+8|0;k[p>>2]=o;q=0;s=p;t=o;u=0;v=0;w=15;break}else{h0a(j);o=k[i+12>>2]|0;i=d+8|0;k[i>>2]=o;j0a(j);q=0;s=i;t=o;u=0;v=0;w=15;break}}else{x=0;Ba(619,l|0)|0;o=x;x=0;if(!(o&1)?(x=0,xa(899,g|0,b|0),o=x,x=0,!(o&1)):0){o=k[g>>2]|0;i=g+4|0;j=k[i>>2]|0;p=g+8|0;y=k[p>>2]|0;z=k[d>>2]|0;k[f>>2]=o;k[n>>2]=j;k[f+8>>2]=y;k[p>>2]=0;k[i>>2]=0;k[g>>2]=0;i=o;p=j;j=o;x=0;o=Ba(618,z|0)|0;z=x;x=0;if(z&1){A=p;B=i;C=j;w=33;break}z=d+8|0;k[z>>2]=o;x=0;xa(884,b|0,2);o=x;x=0;if(o&1){A=p;B=i;C=j;w=33;break}q=j;s=z;t=k[z>>2]|0;u=i;v=p;w=15;break}p=Hc()|0;D=M;E=p}while(0);do if((w|0)==15){if((t|0)<0){x=0;b=Ba(618,k[d>>2]|0)|0;g=x;x=0;if(g&1){A=v;B=u;C=q;w=33;break}k[s>>2]=b}x=0;nb(154,a|0,h|0,e|0,f|0);b=x;x=0;if(b&1){A=v;B=u;C=q;w=33}else{b=u;if(u){if((v|0)==(u|0))F=u;else{g=~((v+-8-b|0)>>>3);b=v;do{l=k[b+-4>>2]|0;b=b+-8|0;if(l)j0a(l)}while((b|0)!=(u|0));k[n>>2]=v+(g<<3);F=q}OBa(F)}b=k[e+4>>2]|0;if(b)j0a(b);b=k[m>>2]|0;if(!b){r=c;return}j0a(b);r=c;return}}while(0);if((w|0)==33){w=Hc()|0;c=M;F=B;if(!B){D=c;E=w}else{if((A|0)==(B|0))G=B;else{q=~((A+-8-F|0)>>>3);F=A;do{v=k[F+-4>>2]|0;F=F+-8|0;if(v)j0a(v)}while((F|0)!=(B|0));k[n>>2]=A+(q<<3);G=C}OBa(G);D=c;E=w}}w=k[e+4>>2]|0;if(!w){H=D;I=E}else{j0a(w);H=D;I=E}}else{E=Hc()|0;H=M;I=E}E=k[m>>2]|0;if(!E)Sc(I|0);j0a(E);Sc(I|0)}function wta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;k[d>>2]=b;f=d+4|0;g=tya(b)|0;h=sya(b)|0;i=k[h>>2]|0;j=k[h+4>>2]|0;if(!j){k[f>>2]=g;h=d+8|0;k[h>>2]=-1;k[d+12>>2]=i;l=h;m=0}else{h0a(j);k[f>>2]=g;h=d+8|0;k[h>>2]=-1;k[d+12>>2]=i;h0a(j);j0a(j);l=h;m=j}j=d+16|0;k[j>>2]=m;k[l>>2]=g;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;if((g|0)<0){x=0;g=Ba(618,b|0)|0;b=x;x=0;if(!(b&1)){k[l>>2]=g;n=7}}else n=7;if((n|0)==7?(x=0,fb(385,a|0,f|0,e|0),e=x,x=0,!(e&1)):0){e=k[j>>2]|0;if(!e){r=c;return}j0a(e);r=c;return}c=Hc()|0;e=k[j>>2]|0;if(!e)Sc(c|0);j0a(e);Sc(c|0)}function xta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=r;r=r+48|0;e=d+20|0;f=d+8|0;g=d;k[e>>2]=b;h=e+4|0;i=tya(b)|0;j=sya(b)|0;l=k[j>>2]|0;m=k[j+4>>2]|0;if(!m){k[h>>2]=i;k[e+8>>2]=-1;k[e+12>>2]=l;n=0}else{h0a(m);k[h>>2]=i;k[e+8>>2]=-1;k[e+12>>2]=l;h0a(m);j0a(m);n=m}m=e+16|0;k[m>>2]=n;x=0;xa(884,b|0,5);n=x;x=0;if(!(n&1)){k[f>>2]=0;n=f+4|0;k[n>>2]=0;k[f+8>>2]=0;do if((k[(k[b>>2]|0)+80>>2]|0)!=6){l=f+8|0;i=g+4|0;while(1){x=0;xa(907,g|0,b|0);j=x;x=0;if(j&1){o=15;break}j=k[n>>2]|0;if(j>>>0>=(k[l>>2]|0)>>>0){x=0;xa(908,f|0,g|0);p=x;x=0;if(p&1){o=18;break}p=k[i>>2]|0;if(p)j0a(p)}else{k[j>>2]=k[g>>2];k[j+4>>2]=k[i>>2];k[g>>2]=0;k[i>>2]=0;k[n>>2]=j+8}if((k[(k[b>>2]|0)+80>>2]|0)==6){o=20;break}}if((o|0)==15){l=Hc()|0;q=l;s=M;o=17;break}else if((o|0)==18){l=Hc()|0;j=M;p=k[i>>2]|0;if(!p){t=j;u=l;break}j0a(p);t=j;u=l;break}else if((o|0)==20){v=k[e>>2]|0;o=21;break}}else{v=b;o=21}while(0);if((o|0)==21){x=0;g=Ba(618,v|0)|0;l=x;x=0;do if(!(l&1)?(j=e+8|0,k[j>>2]=g,x=0,xa(884,b|0,6),p=x,x=0,!(p&1)):0){if((g|0)<0){x=0;p=Ba(618,v|0)|0;w=x;x=0;if(w&1)break;k[j>>2]=p}x=0;nb(155,a|0,h|0,c|0,f|0);p=x;x=0;if(!(p&1)){p=k[f>>2]|0;if(p){j=k[n>>2]|0;if((j|0)==(p|0))y=p;else{w=j;while(1){j=w+-8|0;k[n>>2]=j;z=k[w+-4>>2]|0;if(!z)A=j;else{j0a(z);A=k[n>>2]|0}if((A|0)==(p|0))break;else w=A}y=k[f>>2]|0}OBa(y)}w=k[m>>2]|0;if(!w){r=d;return}j0a(w);r=d;return}}while(0);d=Hc()|0;q=d;s=M;o=17}if((o|0)==17){t=s;u=q}q=k[f>>2]|0;if(!q){B=t;C=u}else{s=k[n>>2]|0;if((s|0)==(q|0))D=q;else{o=s;while(1){s=o+-8|0;k[n>>2]=s;d=k[o+-4>>2]|0;if(!d)E=s;else{j0a(d);E=k[n>>2]|0}if((E|0)==(q|0))break;else o=E}D=k[f>>2]|0}OBa(D);B=t;C=u}}else{u=Hc()|0;B=M;C=u}u=k[m>>2]|0;if(!u)Sc(C|0);j0a(u);Sc(C|0)}function yta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+32|0;d=c+8|0;e=c;k[d>>2]=b;f=d+4|0;g=tya(b)|0;h=sya(b)|0;i=k[h>>2]|0;j=k[h+4>>2]|0;if(!j){k[f>>2]=g;k[d+8>>2]=-1;k[d+12>>2]=i;l=0}else{h0a(j);k[f>>2]=g;k[d+8>>2]=-1;k[d+12>>2]=i;h0a(j);j0a(j);l=j}j=d+16|0;k[j>>2]=l;x=0;l=Ba(618,b|0)|0;i=x;x=0;do if(!(i&1)?(k[d+8>>2]=l,x=0,xa(888,e|0,b|0),g=x,x=0,!(g&1)):0){x=0;fb(386,a|0,d|0,e|0);g=x;x=0;if(g&1){g=Hc()|0;f=M;h=k[e+4>>2]|0;if(!h){m=f;n=g;break}j0a(h);m=f;n=g;break}g=k[e+4>>2]|0;if(g)j0a(g);g=k[j>>2]|0;if(!g){r=c;return}j0a(g);r=c;return}else o=12;while(0);if((o|0)==12){o=Hc()|0;m=M;n=o}o=k[j>>2]|0;if(!o)Sc(n|0);j0a(o);Sc(n|0)}function zta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;d=r;r=r+144|0;e=d+116|0;f=d+112|0;g=d+108|0;h=d+96|0;i=d+68|0;j=d+56|0;l=d+48|0;m=d+40|0;n=d+24|0;o=d+88|0;p=d+16|0;q=d+8|0;s=d;k[e>>2]=b;t=e+4|0;u=tya(b)|0;v=sya(b)|0;w=k[v>>2]|0;y=k[v+4>>2]|0;if(!y){k[t>>2]=u;k[e+8>>2]=-1;k[e+12>>2]=w;z=0}else{h0a(y);k[t>>2]=u;k[e+8>>2]=-1;k[e+12>>2]=w;h0a(y);j0a(y);z=y}y=e+16|0;k[y>>2]=z;k[a>>2]=0;z=a+4|0;k[z>>2]=0;w=k[b>>2]|0;u=k[w+80>>2]|0;a:do if((u+-98|0)>>>0<14){k[f>>2]=k[w+112>>2];k[g>>2]=k[w+116>>2];x=0;nb(130,h|0,u|0,f|0,g|0);v=x;x=0;if((!(v&1)?(k[i>>2]=b,v=i+4|0,x=0,A=Ba(616,b|0)|0,B=x,x=0,!(B&1)):0)?(x=0,B=Ba(617,b|0)|0,C=x,x=0,!(C&1)):0){C=k[B>>2]|0;D=k[B+4>>2]|0;if(D){h0a(D);k[v>>2]=A;B=i+8|0;k[B>>2]=-1;k[i+12>>2]=C;k[i+16>>2]=D;h0a(D);j0a(D);if((k[B>>2]|0)<0){E=B;F=11}else F=13}else{k[v>>2]=A;A=i+8|0;k[A>>2]=-1;k[i+12>>2]=C;k[i+16>>2]=0;E=A;F=11}if((F|0)==11){x=0;A=Ba(618,k[i>>2]|0)|0;C=x;x=0;if(C&1)F=23;else{k[E>>2]=A;F=13}}do if((F|0)==13){x=0;A=Ba(563,48)|0;C=x;x=0;if(C&1)F=23;else{k[A+4>>2]=0;k[A+8>>2]=0;k[A>>2]=44664;C=A+12|0;x=0;xa(769,C|0,v|0);B=x;x=0;if(B&1){B=Hc()|0;D=M;c0a(A);OBa(A);G=D;H=B;break}k[C>>2]=35720;B=A+36|0;k[B>>2]=k[h>>2];k[B+4>>2]=k[h+4>>2];k[B+8>>2]=k[h+8>>2];k[a>>2]=C;k[z>>2]=A;B=k[i+16>>2]|0;if(B)j0a(B);x=0;Ba(619,k[b>>2]|0)|0;B=x;x=0;if(B&1){I=A;F=21;break a}J=C;K=A;F=41;break a}}while(0);if((F|0)==23){v=Hc()|0;G=M;H=v}v=k[i+16>>2]|0;if(!v){L=H;N=G}else{j0a(v);L=H;N=G}}else{I=0;F=21}}else switch(u|0){case 86:{do if(!c){x=0;fb(140,j|0,287360,28);v=x;x=0;if(v&1){I=0;F=21;break a}x=0;xa(883,b|0,j|0);v=x;x=0;if(v&1){v=Hc()|0;A=M;K2a(j);L=v;N=A;break a}else{K2a(j);O=k[b>>2]|0;break}}else O=w;while(0);x=0;Ba(619,O|0)|0;A=x;x=0;if(A&1){I=0;F=21;break a}else{F=62;break a}break}case 72:{x=0;xa(909,l|0,b|0);A=x;x=0;if(A&1){I=0;F=21;break a}A=k[l>>2]|0;v=l+4|0;C=k[v>>2]|0;k[l>>2]=0;k[v>>2]=0;k[a>>2]=A;k[z>>2]=C;J=A;K=C;F=41;break a;break}case 119:{x=0;xa(898,m|0,b|0);C=x;x=0;if(C&1){I=0;F=21;break a}C=k[m>>2]|0;A=m+4|0;v=k[A>>2]|0;k[m>>2]=0;k[A>>2]=0;k[a>>2]=C;k[z>>2]=v;J=C;K=v;F=41;break a;break}default:{x=0;fb(140,n|0,287389,18);v=x;x=0;if(v&1){I=0;F=21;break a}x=0;xa(883,b|0,n|0);v=x;x=0;if(v&1){v=Hc()|0;C=M;K2a(n);L=v;N=C;break a}else{K2a(n);F=62;break a}}}while(0);b:do if((F|0)==21){n=Hc()|0;P=I;Q=n;R=M;F=22}else if((F|0)==41)if((J|0)!=0?(n=k[b>>2]|0,(k[n+80>>2]|0)==3):0){m=o+4|0;l=e+8|0;O=s+4|0;w=q+4|0;j=p+4|0;c=n;n=K;while(1){x=0;Ba(619,c|0)|0;u=x;x=0;if(u&1){S=n;F=20;break}k[o>>2]=0;k[m>>2]=0;if((k[(k[b>>2]|0)+80>>2]|0)==4)T=0;else{k[q>>2]=0;k[w>>2]=0;x=0;fb(382,p|0,b|0,q|0);u=x;x=0;if(u&1){U=n;F=48;break}u=k[p>>2]|0;G=k[j>>2]|0;k[p>>2]=0;k[j>>2]=0;k[o>>2]=u;k[m>>2]=G;T=G}x=0;G=Ba(618,k[e>>2]|0)|0;u=x;x=0;if(u&1){V=n;W=T;F=60;break}k[l>>2]=G;x=0;xa(884,b|0,4);G=x;x=0;if(G&1){V=n;W=T;F=60;break}if((k[l>>2]|0)<0){x=0;G=Ba(618,k[e>>2]|0)|0;u=x;x=0;if(u&1){V=n;W=T;F=60;break}k[l>>2]=G}x=0;nb(156,s|0,t|0,a|0,o|0);G=x;x=0;if(G&1){V=n;W=T;F=60;break}G=k[s>>2]|0;u=n;n=k[O>>2]|0;k[s>>2]=0;k[O>>2]=0;k[a>>2]=G;k[z>>2]=n;if(u)j0a(u);if(T)j0a(T);c=k[b>>2]|0;if((k[c+80>>2]|0)!=3){F=62;break b}}if((F|0)==20){c=Hc()|0;P=S;Q=c;R=M;F=22;break}else if((F|0)==48){c=Hc()|0;X=M;Y=c;Z=U;F=65;break}else if((F|0)==60){c=Hc()|0;n=M;if(!W){X=n;Y=c;Z=V;F=65;break}j0a(W);X=n;Y=c;Z=V;F=65;break}}else F=62;while(0);if((F|0)==22){X=R;Y=Q;Z=P;F=65}else if((F|0)==62){P=k[y>>2]|0;if(!P){r=d;return}j0a(P);r=d;return}if((F|0)==65)if(!Z){L=Y;N=X}else{j0a(Z);L=Y;N=X}X=k[y>>2]|0;if(!X)Sc(L|0);j0a(X);Sc(L|0)}function Ata(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;d=r;r=r+112|0;e=d+104|0;f=d+96|0;g=d+64|0;h=d+72|0;i=d+56|0;j=d+16|0;l=d+48|0;m=d+8|0;n=d+24|0;o=d;Nta(e,b,4,c);c=k[b>>2]|0;p=k[c+80>>2]|0;a:do if((p+-12|0)>>>0<12){x=0;q=Ba(620,b|0)|0;s=x;x=0;if(!(s&1)){k[g>>2]=0;k[g+4>>2]=0;x=0;fb(382,f|0,b|0,g|0);s=x;x=0;if(s&1){s=Hc()|0;t=M;u=s;break}s=k[e>>2]|0;v=k[e+4>>2]|0;w=(v|0)==0;if(!w)h0a(v);k[h>>2]=b;y=h+4|0;z=s+8|0;A=k[z+4>>2]|0;B=y;k[B>>2]=k[z>>2];k[B+4>>2]=A;k[h+12>>2]=k[s+16>>2];A=h+16|0;B=k[s+20>>2]|0;k[A>>2]=B;if(B)h0a(B);if(!w)j0a(v);w=k[f>>2]|0;B=k[f+4>>2]|0;s=(B|0)==0;if(s){z=k[w+12>>2]|0;C=h+8|0;k[C>>2]=z;D=z;E=C}else{h0a(B);C=k[w+12>>2]|0;w=h+8|0;k[w>>2]=C;j0a(B);D=C;E=w}if((D|0)<0){x=0;w=Ba(618,b|0)|0;C=x;x=0;if(C&1)F=26;else{k[E>>2]=w;F=16}}else F=16;do if((F|0)==16){x=0;w=Ba(563,56)|0;C=x;x=0;if(C&1)F=26;else{k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=44692;C=w+12|0;x=0;pa(65,C|0,y|0,e|0,q|0,f|0);z=x;x=0;if(z&1){z=Hc()|0;G=M;c0a(w);OBa(w);H=G;I=z;break}k[a>>2]=C;k[a+4>>2]=w;w=k[A>>2]|0;if(w)j0a(w);if(!s)j0a(B);J=v;F=66;break a}}while(0);if((F|0)==26){v=Hc()|0;H=M;I=v}v=k[A>>2]|0;if(v)j0a(v);if(s){t=H;u=I}else{j0a(B);t=H;u=I}}else F=24}else{if((p|0)!=10){k[a>>2]=k[e>>2];v=e+4|0;k[a+4>>2]=k[v>>2];k[e>>2]=0;k[v>>2]=0;r=d;return}x=0;Ba(619,c|0)|0;v=x;x=0;if(!(v&1)){k[j>>2]=0;k[j+4>>2]=0;x=0;fb(382,i|0,b|0,j|0);v=x;x=0;if(v&1){v=Hc()|0;t=M;u=v;break}x=0;xa(884,b|0,7);v=x;x=0;do if(!(v&1)){k[m>>2]=0;k[m+4>>2]=0;x=0;fb(382,l|0,b|0,m|0);q=x;x=0;if(q&1){q=Hc()|0;K=M;L=q;break}q=k[e>>2]|0;y=k[e+4>>2]|0;w=(y|0)==0;if(!w)h0a(y);k[n>>2]=b;C=n+4|0;z=q+8|0;G=k[z+4>>2]|0;N=C;k[N>>2]=k[z>>2];k[N+4>>2]=G;k[n+12>>2]=k[q+16>>2];G=n+16|0;N=k[q+20>>2]|0;k[G>>2]=N;if(N)h0a(N);if(!w)j0a(y);w=k[l>>2]|0;N=k[l+4>>2]|0;q=(N|0)==0;if(q){z=k[w+12>>2]|0;O=n+8|0;k[O>>2]=z;P=z;Q=O}else{h0a(N);O=k[w+12>>2]|0;w=n+8|0;k[w>>2]=O;j0a(N);P=O;Q=w}if((P|0)<0){x=0;w=Ba(618,b|0)|0;O=x;x=0;if(!(O&1)){k[Q>>2]=w;F=48}}else F=48;if((F|0)==48?(x=0,pa(66,o|0,C|0,e|0,i|0,l|0),C=x,x=0,!(C&1)):0){k[a>>2]=k[o>>2];C=o+4|0;k[a+4>>2]=k[C>>2];k[o>>2]=0;k[C>>2]=0;C=k[G>>2]|0;if(C)j0a(C);if(!q)j0a(N);C=k[i+4>>2]|0;if(C)j0a(C);J=y;F=66;break a}y=Hc()|0;C=M;w=k[G>>2]|0;if(w)j0a(w);if(q){K=C;L=y}else{j0a(N);K=C;L=y}}else{y=Hc()|0;K=M;L=y}while(0);v=k[i+4>>2]|0;if(!v){t=K;u=L}else{j0a(v);t=K;u=L}}else F=24}while(0);if((F|0)==24){L=Hc()|0;t=M;u=L}else if((F|0)==66){if(!J){r=d;return}j0a(J);r=d;return}d=k[e+4>>2]|0;if(!d)Sc(u|0);j0a(d);Sc(u|0)}function Bta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+96|0;d=c+72|0;e=c+64|0;f=c+48|0;g=c+60|0;h=c+44|0;i=c+32|0;j=c;l=c+24|0;k[d>>2]=b;m=d+4|0;n=tya(b)|0;o=sya(b)|0;p=k[o>>2]|0;q=k[o+4>>2]|0;if(!q){k[m>>2]=n;k[d+8>>2]=-1;k[d+12>>2]=p;s=0}else{h0a(q);k[m>>2]=n;k[d+8>>2]=-1;k[d+12>>2]=p;h0a(q);j0a(q);s=q}q=d+16|0;k[q>>2]=s;x=0;xa(884,b|0,72);s=x;x=0;a:do if(!(s&1)?(x=0,xa(884,b|0,1),p=x,x=0,!(p&1)):0){k[e>>2]=0;p=e+4|0;k[p>>2]=0;n=k[b>>2]|0;o=k[n+80>>2]|0;do if((o+-98|0)>>>0>=14){x=0;fb(140,f|0,287408,50);t=x;x=0;if(!(t&1)){x=0;xa(883,b|0,f|0);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(f);v=t;w=u;break a}else{K2a(f);y=k[b>>2]|0;z=13;break}}else{A=0;z=11}}else{y=n;z=13}while(0);b:do if((z|0)==13){k[g>>2]=k[y+112>>2];k[h>>2]=k[y+116>>2];x=0;nb(130,i|0,o|0,g|0,h|0);n=x;x=0;if((!(n&1)?(k[j>>2]=b,n=j+4|0,x=0,u=Ba(616,b|0)|0,t=x,x=0,!(t&1)):0)?(x=0,t=Ba(617,b|0)|0,B=x,x=0,!(B&1)):0){B=k[t>>2]|0;C=k[t+4>>2]|0;if(C){h0a(C);k[n>>2]=u;t=j+8|0;k[t>>2]=-1;k[j+12>>2]=B;k[j+16>>2]=C;h0a(C);j0a(C);if((k[t>>2]|0)<0){D=t;z=19}else z=21}else{k[n>>2]=u;u=j+8|0;k[u>>2]=-1;k[j+12>>2]=B;k[j+16>>2]=0;D=u;z=19}if((z|0)==19){x=0;u=Ba(618,k[j>>2]|0)|0;B=x;x=0;if(B&1)z=40;else{k[D>>2]=u;z=21}}do if((z|0)==21){x=0;u=Ba(563,48)|0;B=x;x=0;if(B&1)z=40;else{k[u+4>>2]=0;k[u+8>>2]=0;k[u>>2]=44664;B=u+12|0;x=0;xa(769,B|0,n|0);t=x;x=0;if(t&1){t=Hc()|0;C=M;c0a(u);OBa(u);E=C;F=t;break}k[B>>2]=35720;t=u+36|0;k[t>>2]=k[i>>2];k[t+4>>2]=k[i+4>>2];k[t+8>>2]=k[i+8>>2];k[e>>2]=B;k[p>>2]=u;B=k[j+16>>2]|0;if(B)j0a(B);x=0;Ba(619,k[b>>2]|0)|0;B=x;x=0;if(B&1){A=u;z=11;break b}x=0;xa(884,b|0,11);B=x;x=0;if(B&1){A=u;z=11;break b}x=0;fb(381,l|0,b|0,0);B=x;x=0;if(B&1){A=u;z=11;break b}B=k[d>>2]|0;x=0;t=Ba(618,B|0)|0;C=x;x=0;do if(!(C&1)?(G=d+8|0,k[G>>2]=t,x=0,xa(884,b|0,2),H=x,x=0,!(H&1)):0){if((t|0)<0){x=0;H=Ba(618,B|0)|0;I=x;x=0;if(I&1)break;k[G>>2]=H}x=0;nb(157,a|0,m|0,e|0,l|0);H=x;x=0;if(H&1)break;H=k[l+4>>2]|0;if(H)j0a(H);j0a(u);H=k[q>>2]|0;if(!H){r=c;return}j0a(H);r=c;return}while(0);B=Hc()|0;t=M;C=k[l+4>>2]|0;if(!C){J=B;K=t;L=u;break b}j0a(C);J=B;K=t;L=u;break b}}while(0);if((z|0)==40){n=Hc()|0;E=M;F=n}n=k[j+16>>2]|0;if(!n){v=F;w=E;break a}j0a(n);v=F;w=E;break a}else{A=0;z=11}}while(0);if((z|0)==11){p=Hc()|0;J=p;K=M;L=A}if(!L){v=J;w=K}else{j0a(L);v=J;w=K}}else z=10;while(0);if((z|0)==10){z=Hc()|0;v=z;w=M}w=k[q>>2]|0;if(!w)Sc(v|0);j0a(w);Sc(v|0)}function Cta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;c=r;r=r+240|0;d=c+232|0;e=c+200|0;f=c+184|0;g=c+176|0;h=c+168|0;j=c+160|0;l=c+136|0;m=c+128|0;n=c+104|0;o=c+208|0;p=c+192|0;q=c+96|0;s=c+88|0;t=c+80|0;u=c+72|0;v=c+48|0;w=c+40|0;y=c+32|0;z=c+8|0;A=c;k[d>>2]=0;B=d+4|0;k[B>>2]=0;a:do if(!(b5a((k[b>>2]|0)+20|0,329672)|0))C=0;else{D=k[b>>2]|0;x=0;E=Ba(563,24)|0;F=x;x=0;do if(!(F&1)){k[E+4>>2]=0;k[E+8>>2]=0;k[E>>2]=33300;G=E+12|0;x=0;xa(604,G|0,D+20|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;c0a(E);OBa(E);J=I;K=H;break}else{k[d>>2]=G;k[B>>2]=E;C=E;break a}}else{G=Hc()|0;J=M;K=G}while(0);L=K;N=J;Sc(L|0)}while(0);J=k[b>>2]|0;b:do switch(k[J+80>>2]|0){case 66:{x=0;fb(387,e|0,b|0,d|0);K=x;x=0;if(K&1)O=99;else{k[a>>2]=k[e>>2];K=e+4|0;k[a+4>>2]=k[K>>2];k[e>>2]=0;k[K>>2]=0;O=96}break}case 87:{x=0;fb(388,f|0,b|0,d|0);K=x;x=0;if(K&1)O=99;else{k[a>>2]=k[f>>2];K=f+4|0;k[a+4>>2]=k[K>>2];k[f>>2]=0;k[K>>2]=0;O=96}break}case 63:{x=0;fb(389,g|0,b|0,d|0);K=x;x=0;if(K&1)O=99;else{k[a>>2]=k[g>>2];K=g+4|0;k[a+4>>2]=k[K>>2];k[g>>2]=0;k[K>>2]=0;O=96}break}case 5:{x=0;fb(380,h|0,b|0,d|0);K=x;x=0;if(K&1)O=99;else{k[a>>2]=k[h>>2];K=h+4|0;k[a+4>>2]=k[K>>2];k[h>>2]=0;k[K>>2]=0;O=96}break}case 55:{k[l>>2]=b;K=l+4|0;x=0;B=Ba(616,b|0)|0;E=x;x=0;if(!(E&1)?(x=0,E=Ba(617,b|0)|0,D=x,x=0,!(D&1)):0){D=k[E>>2]|0;F=k[E+4>>2]|0;if(!F){k[K>>2]=B;k[l+8>>2]=-1;k[l+12>>2]=D;P=0}else{h0a(F);k[K>>2]=B;k[l+8>>2]=-1;k[l+12>>2]=D;h0a(F);j0a(F);P=F}F=l+16|0;k[F>>2]=P;x=0;fb(390,j|0,l|0,d|0);D=x;x=0;if(D&1){D=Hc()|0;B=M;K=k[F>>2]|0;if(!K){Q=B;R=D;break b}j0a(K);Q=B;R=D;break b}D=k[j>>2]|0;B=j+4|0;K=k[B>>2]|0;k[j>>2]=0;k[B>>2]=0;B=k[F>>2]|0;if(B)j0a(B);x=0;Ba(619,k[b>>2]|0)|0;B=x;x=0;if(B&1){S=K;O=100}else{T=D;U=K;O=94}}else O=99;break}case 53:{k[n>>2]=b;K=n+4|0;x=0;D=Ba(616,b|0)|0;B=x;x=0;if(!(B&1)?(x=0,B=Ba(617,b|0)|0,F=x,x=0,!(F&1)):0){F=k[B>>2]|0;E=k[B+4>>2]|0;if(!E){k[K>>2]=D;k[n+8>>2]=-1;k[n+12>>2]=F;V=0}else{h0a(E);k[K>>2]=D;k[n+8>>2]=-1;k[n+12>>2]=F;h0a(E);j0a(E);V=E}E=n+16|0;k[E>>2]=V;x=0;fb(391,m|0,n|0,d|0);F=x;x=0;if(F&1){F=Hc()|0;D=M;K=k[E>>2]|0;if(!K){Q=D;R=F;break b}j0a(K);Q=D;R=F;break b}F=k[m>>2]|0;D=m+4|0;K=k[D>>2]|0;k[m>>2]=0;k[D>>2]=0;D=k[E>>2]|0;if(D)j0a(D);x=0;Ba(619,k[b>>2]|0)|0;D=x;x=0;if(D&1){S=K;O=100}else{T=F;U=K;O=94}}else O=99;break}case 80:{k[o>>2]=b;K=o+4|0;x=0;F=Ba(616,b|0)|0;D=x;x=0;if(!(D&1)?(x=0,D=Ba(617,b|0)|0,E=x,x=0,!(E&1)):0){E=k[D>>2]|0;B=k[D+4>>2]|0;if(!B){k[K>>2]=F;k[o+8>>2]=-1;k[o+12>>2]=E;W=0}else{h0a(B);k[K>>2]=F;k[o+8>>2]=-1;k[o+12>>2]=E;h0a(B);j0a(B);W=B}B=o+16|0;k[B>>2]=W;k[p>>2]=0;E=p+4|0;k[E>>2]=0;x=0;F=Ba(619,k[b>>2]|0)|0;D=x;x=0;do if(!(D&1)){if((F|0)!=8){k[s>>2]=0;k[s+4>>2]=0;x=0;fb(382,q|0,b|0,s|0);G=x;x=0;if(G&1){G=Hc()|0;X=G;Y=M;break}G=k[q>>2]|0;H=q+4|0;I=k[H>>2]|0;k[q>>2]=0;k[H>>2]=0;k[p>>2]=G;k[E>>2]=I;H=I;if(!I){I=k[G+12>>2]|0;Z=o+8|0;k[Z>>2]=I;_=Z;$=I;aa=0}else{h0a(H);I=k[G+12>>2]|0;G=o+8|0;k[G>>2]=I;j0a(H);_=G;$=I;aa=H}if(($|0)<0){ba=_;ca=aa;O=54}else{da=aa;O=56}}else{ba=o+8|0;ca=0;O=54}if((O|0)==54){x=0;H=Ba(618,k[o>>2]|0)|0;I=x;x=0;if(I&1)ea=ca;else{k[ba>>2]=H;da=ca;O=56}}if((O|0)==56){x=0;nb(158,t|0,K|0,d|0,p|0);H=x;x=0;if(H&1)ea=da;else{H=k[t>>2]|0;I=t+4|0;G=k[I>>2]|0;k[t>>2]=0;k[I>>2]=0;if(da)j0a(da);I=k[B>>2]|0;if(I)j0a(I);T=H;U=G;O=94;break b}}G=Hc()|0;H=M;if(!ea){X=G;Y=H}else{j0a(ea);X=G;Y=H}}else{H=Hc()|0;X=H;Y=M}while(0);K=k[B>>2]|0;if(!K){Q=Y;R=X}else{j0a(K);Q=Y;R=X}}else O=99;break}case 84:{k[v>>2]=b;K=v+4|0;x=0;E=Ba(616,b|0)|0;F=x;x=0;if(!(F&1)?(x=0,F=Ba(617,b|0)|0,D=x,x=0,!(D&1)):0){D=k[F>>2]|0;H=k[F+4>>2]|0;if(!H){k[K>>2]=E;k[v+8>>2]=-1;k[v+12>>2]=D;fa=0}else{h0a(H);k[K>>2]=E;k[v+8>>2]=-1;k[v+12>>2]=D;h0a(H);j0a(H);fa=H}H=v+16|0;k[H>>2]=fa;x=0;fb(392,u|0,v|0,d|0);D=x;x=0;if(D&1){D=Hc()|0;E=M;K=k[H>>2]|0;if(!K){Q=E;R=D;break b}j0a(K);Q=E;R=D;break b}D=k[u>>2]|0;E=u+4|0;K=k[E>>2]|0;k[u>>2]=0;k[E>>2]=0;E=k[H>>2]|0;if(E)j0a(E);x=0;Ba(619,k[b>>2]|0)|0;E=x;x=0;if(E&1){S=K;O=100}else{T=D;U=K;O=94}}else O=99;break}case 52:{x=0;fb(393,w|0,b|0,d|0);K=x;x=0;if(K&1)O=99;else{k[a>>2]=k[w>>2];K=w+4|0;k[a+4>>2]=k[K>>2];k[w>>2]=0;k[K>>2]=0;O=96}break}case 119:{if((i[b+12>>0]|0)!=0?(b5a(J+100|0,287459)|0)==0:0){k[z>>2]=b;K=z+4|0;x=0;D=Ba(616,b|0)|0;E=x;x=0;if(!(E&1)?(x=0,E=Ba(617,b|0)|0,H=x,x=0,!(H&1)):0){H=k[E>>2]|0;F=k[E+4>>2]|0;if(!F){k[K>>2]=D;k[z+8>>2]=-1;k[z+12>>2]=H;ga=0}else{h0a(F);k[K>>2]=D;k[z+8>>2]=-1;k[z+12>>2]=H;h0a(F);j0a(F);ga=F}F=z+16|0;k[F>>2]=ga;x=0;fb(394,y|0,z|0,d|0);H=x;x=0;if(H&1){H=Hc()|0;D=M;K=k[F>>2]|0;if(!K){Q=D;R=H;break b}j0a(K);Q=D;R=H;break b}H=k[y>>2]|0;D=y+4|0;K=k[D>>2]|0;k[y>>2]=0;k[D>>2]=0;D=k[F>>2]|0;if(D)j0a(D);x=0;Ba(619,k[b>>2]|0)|0;D=x;x=0;if(D&1){S=K;O=100}else{T=H;U=K;O=94}}else O=99}else O=92;break}default:O=92}while(0);if((O|0)==92){x=0;fb(395,A|0,b|0,d|0);d=x;x=0;if(d&1)O=99;else{d=k[A>>2]|0;y=A+4|0;z=k[y>>2]|0;k[A>>2]=0;k[y>>2]=0;T=d;U=z;O=94}}if((O|0)==94){x=0;xa(884,b|0,8);b=x;x=0;if(b&1){S=U;O=100}else{k[a>>2]=T;k[a+4>>2]=U;O=96}}else if((O|0)==99){U=Hc()|0;Q=M;R=U}if((O|0)==96){if(!C){r=c;return}j0a(C);r=c;return}else if((O|0)==100){O=Hc()|0;c=M;if(!S){Q=c;R=O}else{j0a(S);Q=c;R=O}}if(!C){L=R;N=Q;Sc(L|0)}j0a(C);L=R;N=Q;Sc(L|0)}function Dta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=r;r=r+64|0;e=d+32|0;f=d+24|0;g=d+8|0;h=d+16|0;i=d;k[e>>2]=b;j=e+4|0;l=tya(b)|0;m=sya(b)|0;n=k[m>>2]|0;o=k[m+4>>2]|0;if(!o){k[j>>2]=l;k[e+8>>2]=-1;k[e+12>>2]=n;p=0}else{h0a(o);k[j>>2]=l;k[e+8>>2]=-1;k[e+12>>2]=n;h0a(o);j0a(o);p=o}o=e+16|0;k[o>>2]=p;x=0;xa(884,b|0,66);p=x;x=0;do if(!(p&1)?(x=0,xa(884,b|0,1),n=x,x=0,!(n&1)):0){k[g>>2]=0;k[g+4>>2]=0;x=0;fb(382,f|0,b|0,g|0);n=x;x=0;if(n&1){n=Hc()|0;q=M;s=n;break}x=0;xa(884,b|0,2);n=x;x=0;if(!(n&1)?(x=0,xa(907,h|0,b|0),n=x,x=0,!(n&1)):0){n=k[b>>2]|0;do if((k[n+80>>2]|0)==59){x=0;Ba(619,n|0)|0;l=x;x=0;if(!(l&1)?(x=0,xa(907,i|0,b|0),l=x,x=0,!(l&1)):0){l=k[i>>2]|0;m=i+4|0;t=k[m>>2]|0;k[i>>2]=0;k[m>>2]=0;m=t;if(!t){u=k[l+12>>2]|0;v=e+8|0;k[v>>2]=u;w=v;y=0;z=u;A=l;B=22;break}else{h0a(m);u=k[l+12>>2]|0;v=e+8|0;k[v>>2]=u;j0a(m);w=v;y=t;z=u;A=l;B=22;break}}else{C=0;B=18}}else{l=k[h>>2]|0;u=k[h+4>>2]|0;if(!u){t=k[l+12>>2]|0;v=e+8|0;k[v>>2]=t;w=v;y=0;z=t;A=0;B=22;break}else{h0a(u);t=k[l+12>>2]|0;l=e+8|0;k[l>>2]=t;j0a(u);w=l;y=0;z=t;A=0;B=22;break}}while(0);do if((B|0)==22){if((z|0)<0){x=0;n=Ba(618,k[e>>2]|0)|0;t=x;x=0;if(t&1){C=y;B=18;break}k[w>>2]=n}x=0;n=Ba(563,68)|0;t=x;x=0;if(t&1){C=y;B=18}else{k[n+4>>2]=0;k[n+8>>2]=0;k[n>>2]=44720;t=n+12|0;x=0;xa(769,t|0,j|0);l=x;x=0;if(l&1){l=Hc()|0;u=M;c0a(n);OBa(n);D=y;E=u;F=l;break}k[n+36>>2]=k[c>>2];l=k[c+4>>2]|0;k[n+40>>2]=l;if(l)h0a(l);k[t>>2]=35944;k[n+44>>2]=k[f>>2];l=k[f+4>>2]|0;k[n+48>>2]=l;u=(l|0)==0;if(!u)h0a(l);k[n+52>>2]=k[h>>2];v=k[h+4>>2]|0;k[n+56>>2]=v;m=(v|0)==0;if(!m)h0a(v);k[n+60>>2]=A;G=y;k[n+64>>2]=G;if(!y){k[a>>2]=t;k[a+4>>2]=n}else{h0a(G);k[a>>2]=t;k[a+4>>2]=n;j0a(G)}if(!m)j0a(v);if(!u)j0a(l);l=k[o>>2]|0;if(!l){r=d;return}j0a(l);r=d;return}}while(0);if((B|0)==18){l=Hc()|0;D=C;E=M;F=l}if(D)j0a(D);l=k[h+4>>2]|0;if(!l){H=E;I=F}else{j0a(l);H=E;I=F}}else{l=Hc()|0;H=M;I=l}l=k[f+4>>2]|0;if(!l){q=H;s=I}else{j0a(l);q=H;s=I}}else B=15;while(0);if((B|0)==15){B=Hc()|0;q=M;s=B}B=k[o>>2]|0;if(!B)Sc(s|0);j0a(B);Sc(s|0)}function Eta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+48|0;e=d+24|0;f=d+16|0;g=d;h=d+8|0;k[e>>2]=b;i=e+4|0;j=tya(b)|0;l=sya(b)|0;m=k[l>>2]|0;n=k[l+4>>2]|0;if(!n){k[i>>2]=j;k[e+8>>2]=-1;k[e+12>>2]=m;o=0}else{h0a(n);k[i>>2]=j;k[e+8>>2]=-1;k[e+12>>2]=m;h0a(n);j0a(n);o=n}n=e+16|0;k[n>>2]=o;x=0;xa(884,b|0,87);o=x;x=0;do if(!(o&1)?(x=0,xa(884,b|0,1),m=x,x=0,!(m&1)):0){k[g>>2]=0;k[g+4>>2]=0;x=0;fb(382,f|0,b|0,g|0);m=x;x=0;if(m&1){m=Hc()|0;p=M;q=m;break}x=0;xa(884,b|0,2);m=x;x=0;if(!(m&1)?(x=0,xa(907,h|0,b|0),m=x,x=0,!(m&1)):0){m=k[h>>2]|0;j=k[h+4>>2]|0;l=(j|0)==0;if(l){s=k[m+12>>2]|0;t=e+8|0;k[t>>2]=s;u=s;v=t}else{h0a(j);t=k[m+12>>2]|0;m=e+8|0;k[m>>2]=t;j0a(j);u=t;v=m}if((u|0)<0){x=0;m=Ba(618,b|0)|0;t=x;x=0;if(!(t&1)){k[v>>2]=m;w=15}}else w=15;if((w|0)==15?(x=0,pa(67,a|0,i|0,c|0,f|0,h|0),m=x,x=0,!(m&1)):0){if(!l)j0a(j);m=k[f+4>>2]|0;if(m)j0a(m);m=k[n>>2]|0;if(!m){r=d;return}j0a(m);r=d;return}m=Hc()|0;t=M;if(l){y=t;z=m}else{j0a(j);y=t;z=m}}else{m=Hc()|0;y=M;z=m}m=k[f+4>>2]|0;if(!m){p=y;q=z}else{j0a(m);p=y;q=z}}else w=23;while(0);if((w|0)==23){w=Hc()|0;p=M;q=w}w=k[n>>2]|0;if(!w)Sc(q|0);j0a(w);Sc(q|0)}function Fta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=r;r=r+112|0;e=d+88|0;f=d+80|0;g=d+72|0;h=d+64|0;i=d+48|0;j=d+40|0;l=d+32|0;m=d+24|0;n=d+16|0;o=d+8|0;p=d;q=d+56|0;k[e>>2]=b;s=e+4|0;t=tya(b)|0;u=sya(b)|0;v=k[u>>2]|0;w=k[u+4>>2]|0;if(!w){k[s>>2]=t;k[e+8>>2]=-1;k[e+12>>2]=v;y=0}else{h0a(w);k[s>>2]=t;k[e+8>>2]=-1;k[e+12>>2]=v;h0a(w);j0a(w);y=w}w=e+16|0;k[w>>2]=y;k[f>>2]=0;y=f+4|0;k[y>>2]=0;k[g>>2]=0;v=g+4|0;k[v>>2]=0;k[h>>2]=0;t=h+4|0;k[t>>2]=0;x=0;xa(884,b|0,63);u=x;x=0;a:do if(!(u&1)?(x=0,xa(884,b|0,1),z=x,x=0,!(z&1)):0){do if((k[(k[b>>2]|0)+80>>2]|0)!=8){k[j>>2]=0;k[j+4>>2]=0;x=0;fb(395,i|0,b|0,j|0);z=x;x=0;if(z&1){z=Hc()|0;A=z;B=M;break a}else{z=k[i>>2]|0;C=i+4|0;D=k[C>>2]|0;k[i>>2]=0;k[C>>2]=0;k[f>>2]=z;k[y>>2]=D;E=D;break}}else E=0;while(0);x=0;xa(884,b|0,8);D=x;x=0;if(!(D&1)){do if((k[(k[b>>2]|0)+80>>2]|0)!=8){k[m>>2]=0;k[m+4>>2]=0;x=0;fb(382,l|0,b|0,m|0);D=x;x=0;if(D&1){D=Hc()|0;F=D;G=M;H=E;I=50;break a}else{D=k[l>>2]|0;z=l+4|0;C=k[z>>2]|0;k[l>>2]=0;k[z>>2]=0;k[g>>2]=D;k[v>>2]=C;J=C;break}}else J=0;while(0);x=0;xa(884,b|0,8);C=x;x=0;if(!(C&1)){do if((k[(k[b>>2]|0)+80>>2]|0)!=2){k[o>>2]=0;k[o+4>>2]=0;k[p>>2]=0;k[p+4>>2]=0;x=0;nb(159,n|0,b|0,o|0,p|0);C=x;x=0;if(C&1){C=Hc()|0;K=C;L=M;N=J;O=E;I=48;break a}else{C=k[n>>2]|0;D=n+4|0;z=k[D>>2]|0;k[n>>2]=0;k[D>>2]=0;k[h>>2]=C;k[t>>2]=z;P=z;break}}else P=0;while(0);x=0;xa(884,b|0,2);z=x;x=0;if(!(z&1)?(x=0,xa(907,q|0,b|0),z=x,x=0,!(z&1)):0){z=k[q>>2]|0;C=k[q+4>>2]|0;D=(C|0)==0;if(D){Q=k[z+12>>2]|0;R=e+8|0;k[R>>2]=Q;S=Q;T=R}else{h0a(C);R=k[z+12>>2]|0;z=e+8|0;k[z>>2]=R;j0a(C);S=R;T=z}if((S|0)<0){x=0;z=Ba(618,k[e>>2]|0)|0;R=x;x=0;if(R&1)I=43;else{k[T>>2]=z;I=29}}else I=29;do if((I|0)==29){x=0;z=Ba(563,76)|0;R=x;x=0;if(R&1)I=43;else{k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=44748;R=z+12|0;x=0;Pa(46,R|0,s|0,c|0,f|0,g|0,h|0,q|0);Q=x;x=0;if(Q&1){Q=Hc()|0;U=M;c0a(z);OBa(z);V=U;W=Q;break}k[a>>2]=R;k[a+4>>2]=z;if(!D)j0a(C);if(P)j0a(P);if(J)j0a(J);if(E)j0a(E);z=k[w>>2]|0;if(!z){r=d;return}j0a(z);r=d;return}}while(0);if((I|0)==43){z=Hc()|0;V=M;W=z}if(D){X=V;Y=W;Z=P;_=E;$=J;I=46}else{j0a(C);X=V;Y=W;Z=P;_=E;$=J;I=46}}else{aa=E;ba=J;ca=P;I=9}}else{aa=E;ba=J;ca=0;I=9}}else{aa=E;ba=0;ca=0;I=9}}else{aa=0;ba=0;ca=0;I=9}while(0);if((I|0)==9){E=Hc()|0;X=M;Y=E;Z=ca;_=aa;$=ba;I=46}if((I|0)==46)if(!Z){K=Y;L=X;N=$;O=_;I=48}else{j0a(Z);K=Y;L=X;N=$;O=_;I=48}if((I|0)==48)if(!N){F=K;G=L;H=O;I=50}else{j0a(N);F=K;G=L;H=O;I=50}if((I|0)==50)if(!H){A=F;B=G}else{j0a(H);A=F;B=G}G=k[w>>2]|0;if(!G)Sc(A|0);j0a(G);Sc(A|0)}function Gta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+64|0;e=d+32|0;f=d+8|0;g=d+20|0;h=d;k[e>>2]=b;i=e+4|0;j=tya(b)|0;l=sya(b)|0;m=k[l>>2]|0;n=k[l+4>>2]|0;if(!n){k[i>>2]=j;k[e+8>>2]=-1;k[e+12>>2]=m;o=0}else{h0a(n);k[i>>2]=j;k[e+8>>2]=-1;k[e+12>>2]=m;h0a(n);j0a(n);o=n}n=e+16|0;k[n>>2]=o;x=0;xa(884,b|0,52);o=x;x=0;a:do if(!(o&1)){m=k[b>>2]|0;if((k[m+80>>2]|0)==117){do if(b5a(m+100|0,287461)|0){x=0;fb(140,f|0,287468,24);j=x;x=0;if(j&1){p=10;break a}x=0;xa(883,b|0,f|0);j=x;x=0;if(j&1){j=Hc()|0;l=M;K2a(f);q=l;s=j;break a}else{K2a(f);break}}while(0);x=0;Ba(619,k[b>>2]|0)|0;m=x;x=0;if(m&1){p=10;break}}m=k[b+8>>2]|0;k[g>>2]=0;j=g+4|0;k[j>>2]=0;k[g+8>>2]=m;x=0;fb(396,h|0,g|0,b|0);m=x;x=0;if(!(m&1)){m=k[e>>2]|0;x=0;l=Ba(618,m|0)|0;t=x;x=0;do if(!(t&1)){u=e+8|0;k[u>>2]=l;if((l|0)<0){x=0;v=Ba(618,m|0)|0;w=x;x=0;if(w&1)break;k[u>>2]=v}x=0;nb(160,a|0,i|0,c|0,h|0);v=x;x=0;if(!(v&1)){v=k[h+4>>2]|0;if(v)j0a(v);v=k[j>>2]|0;if(v)j0a(v);v=k[n>>2]|0;if(!v){r=d;return}j0a(v);r=d;return}}while(0);m=Hc()|0;l=M;t=k[h+4>>2]|0;if(!t){y=l;z=m}else{j0a(t);y=l;z=m}}else{m=Hc()|0;y=M;z=m}m=k[j>>2]|0;if(!m){q=y;s=z}else{j0a(m);q=y;s=z}}else p=10;while(0);if((p|0)==10){p=Hc()|0;q=M;s=p}p=k[n>>2]|0;if(!p)Sc(s|0);j0a(p);Sc(s|0)}function Hta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;d=r;r=r+240|0;e=d+208|0;f=d+192|0;g=d+176|0;h=d+152|0;i=d+216|0;j=d+128|0;l=d+120|0;m=d+200|0;n=d+184|0;o=d+160|0;p=d+112|0;q=d+88|0;s=d+80|0;t=d+72|0;u=d+136|0;v=d+64|0;w=d+56|0;y=d+32|0;z=d+24|0;A=d+16|0;B=d+8|0;C=d;D=k[b>>2]|0;E=k[D+80>>2]|0;a:do switch(E|0){case 72:case 86:break;default:{F=(E|0)==119;b:do if(F|(E+-98|0)>>>0<14){switch(k[D+120>>2]|0){case 73:case 82:case 119:{break a;break}case 3:case 9:break;default:break b}k[i>>2]=0;G=i+4|0;k[G>>2]=0;k[i+8>>2]=0;c:do if(F){x=0;xa(889,l|0,b|0);H=x;x=0;if(!(H&1)){H=k[l>>2]|0;k[j>>2]=H;I=j+4|0;J=l+4|0;K=k[J>>2]|0;k[I>>2]=K;k[l>>2]=0;k[J>>2]=0;J=k[G>>2]|0;do if(J>>>0>=(k[i+8>>2]|0)>>>0){x=0;xa(910,i|0,j|0);L=x;x=0;if(L&1){L=Hc()|0;N=M;O=k[I>>2]|0;if(!O){P=N;Q=L;break c}j0a(O);P=N;Q=L;break c}else{L=k[I>>2]|0;if(!L)break;j0a(L);break}}else{k[J>>2]=H;k[J+4>>2]=K;k[j>>2]=0;k[I>>2]=0;k[G>>2]=J+8}while(0);J=s+4|0;I=t+4|0;K=i+8|0;H=k[b>>2]|0;if((k[H+80>>2]|0)==9){L=H;while(1){x=0;Ba(619,L|0)|0;H=x;x=0;if(H&1){R=19;break}x=0;xa(889,t|0,b|0);H=x;x=0;if(H&1){R=19;break}H=k[t>>2]|0;k[s>>2]=H;N=k[I>>2]|0;k[J>>2]=N;k[t>>2]=0;k[I>>2]=0;O=k[G>>2]|0;if(O>>>0>=(k[K>>2]|0)>>>0){x=0;xa(910,i|0,s|0);S=x;x=0;if(S&1)break;S=k[J>>2]|0;if(S)j0a(S)}else{k[O>>2]=H;k[O+4>>2]=N;k[s>>2]=0;k[J>>2]=0;k[G>>2]=O+8}L=k[b>>2]|0;if((k[L+80>>2]|0)!=9){R=59;break c}}if((R|0)==19){L=Hc()|0;T=L;U=M;R=21;break}L=Hc()|0;K=M;I=k[J>>2]|0;if(!I){P=K;Q=L}else{j0a(I);P=K;Q=L}}else R=59}else R=20}else{k[m>>2]=k[D+112>>2];k[n>>2]=k[D+116>>2];x=0;nb(130,o|0,E|0,m|0,n|0);L=x;x=0;if((!(L&1)?(k[q>>2]=b,L=q+4|0,x=0,K=Ba(616,b|0)|0,I=x,x=0,!(I&1)):0)?(x=0,I=Ba(617,b|0)|0,O=x,x=0,!(O&1)):0){O=k[I>>2]|0;N=k[I+4>>2]|0;if(N){h0a(N);k[L>>2]=K;I=q+8|0;k[I>>2]=-1;k[q+12>>2]=O;k[q+16>>2]=N;h0a(N);j0a(N);if((k[I>>2]|0)<0){V=I;R=30}else R=32}else{k[L>>2]=K;K=q+8|0;k[K>>2]=-1;k[q+12>>2]=O;k[q+16>>2]=0;V=K;R=30}if((R|0)==30){x=0;K=Ba(618,k[q>>2]|0)|0;O=x;x=0;if(O&1)R=43;else{k[V>>2]=K;R=32}}d:do if((R|0)==32){x=0;K=Ba(563,48)|0;O=x;x=0;if(O&1)R=43;else{k[K+4>>2]=0;k[K+8>>2]=0;k[K>>2]=44776;O=K+12|0;x=0;xa(769,O|0,L|0);I=x;x=0;if(I&1){I=Hc()|0;N=M;c0a(K);OBa(K);W=N;X=I;R=44;break}k[O>>2]=36504;I=K+36|0;k[I>>2]=k[o>>2];k[I+4>>2]=k[o+4>>2];k[I+8>>2]=k[o+8>>2];I=O;O=K;k[p>>2]=I;K=p+4|0;k[K>>2]=O;N=k[G>>2]|0;do if(N>>>0>=(k[i+8>>2]|0)>>>0){x=0;xa(910,i|0,p|0);H=x;x=0;if(H&1){H=Hc()|0;S=M;Y=k[K>>2]|0;if(!Y){Z=S;_=H;break d}j0a(Y);Z=S;_=H;break d}else{H=k[K>>2]|0;if(!H)break;j0a(H);break}}else{k[N>>2]=I;k[N+4>>2]=O;k[p>>2]=0;k[K>>2]=0;k[G>>2]=N+8}while(0);N=k[q+16>>2]|0;if(N)j0a(N);x=0;Ba(619,k[b>>2]|0)|0;N=x;x=0;if(N&1){R=20;break c}R=59;break c}}while(0);if((R|0)==43){L=Hc()|0;W=M;X=L;R=44}if((R|0)==44){Z=W;_=X}L=k[q+16>>2]|0;if(!L){P=Z;Q=_}else{j0a(L);P=Z;Q=_}}else R=20}while(0);if((R|0)==20){L=Hc()|0;T=L;U=M;R=21}else if((R|0)==59){k[u>>2]=0;L=u+4|0;k[L>>2]=0;k[u+8>>2]=0;J=y+4|0;N=y+8|0;K=y+16|0;O=y+20|0;I=u+8|0;H=w+4|0;S=v+4|0;e:while(1){switch(k[(k[b>>2]|0)+80>>2]|0){case 73:case 82:case 119:{R=97;break e;break}case 3:break;default:{R=103;break e}}x=0;xa(884,b|0,3);Y=x;x=0;if(Y&1){R=65;break}if((k[(k[b>>2]|0)+80>>2]|0)==4){$=0;aa=0}else{k[w>>2]=0;k[H>>2]=0;x=0;fb(382,v|0,b|0,w|0);Y=x;x=0;if(Y&1){R=68;break}Y=k[v>>2]|0;ba=k[S>>2]|0;k[v>>2]=0;k[S>>2]=0;$=Y;aa=ba}ba=k[k[i>>2]>>2]|0;Y=k[ba+8>>2]|0;ca=k[ba+16>>2]|0;da=k[ba+20>>2]|0;ba=(da|0)==0;if(!ba)h0a(da);x=0;ea=Ba(618,b|0)|0;fa=x;x=0;if(fa&1){ga=aa;ha=da;ia=ba;R=88;break}k[y>>2]=$;fa=aa;k[J>>2]=fa;ja=(aa|0)==0;if(!ja)h0a(fa);ka=N;k[ka>>2]=Y;k[ka+4>>2]=ea;k[K>>2]=ca;k[O>>2]=da;if(!ba)h0a(da);ka=k[L>>2]|0;if(ka>>>0>=(k[I>>2]|0)>>>0){x=0;xa(911,u|0,y|0);la=x;x=0;if(la&1){ma=aa;na=da;oa=ba;R=89;break}la=k[O>>2]|0;if(la)j0a(la)}else{k[ka>>2]=$;k[ka+4>>2]=aa;k[y>>2]=0;k[J>>2]=0;k[ka+8>>2]=Y;k[ka+12>>2]=ea;k[ka+16>>2]=ca;k[ka+20>>2]=da;k[K>>2]=0;k[O>>2]=0;k[L>>2]=ka+24}ka=k[J>>2]|0;if(ka)j0a(ka);x=0;xa(884,b|0,4);ka=x;x=0;if(ka&1){ga=aa;ha=da;ia=ba;R=88;break}if(!ba)j0a(da);if(ja)continue;j0a(fa)}do if((R|0)==65){K=Hc()|0;pa=K;qa=M;R=67}else if((R|0)==68){K=Hc()|0;ra=M;sa=K}else if((R|0)==88){K=Hc()|0;ta=M;ua=K;va=ha;wa=ga;ya=ia;R=93}else if((R|0)==89){K=Hc()|0;I=M;N=k[O>>2]|0;if(N)j0a(N);N=k[J>>2]|0;if(!N){ta=I;ua=K;va=na;wa=ma;ya=oa;R=93}else{j0a(N);ta=I;ua=K;va=na;wa=ma;ya=oa;R=93}}else if((R|0)==97){x=0;nb(162,A|0,b|0,i|0,u|0);K=x;x=0;if(!(K&1)){x=0;nb(161,z|0,b|0,c|0,A|0);K=x;x=0;if(K&1){K=Hc()|0;I=M;N=k[A+4>>2]|0;if(!N){ra=I;sa=K;break}j0a(N);ra=I;sa=K;break}else{k[a>>2]=k[z>>2];K=z+4|0;k[a+4>>2]=k[K>>2];k[z>>2]=0;k[K>>2]=0;K=k[A+4>>2]|0;if(!K){R=109;break}j0a(K);R=109;break}}else R=66}else if((R|0)==103){x=0;nb(163,C|0,b|0,i|0,u|0);K=x;x=0;if(!(K&1)){x=0;nb(159,B|0,b|0,c|0,C|0);K=x;x=0;if(K&1){K=Hc()|0;I=M;N=k[C+4>>2]|0;if(!N){ra=I;sa=K;break}j0a(N);ra=I;sa=K;break}else{k[a>>2]=k[B>>2];K=B+4|0;k[a+4>>2]=k[K>>2];k[B>>2]=0;k[K>>2]=0;K=k[C+4>>2]|0;if(!K){R=109;break}j0a(K);R=109;break}}else R=66}while(0);if((R|0)==66){J=Hc()|0;pa=J;qa=M;R=67}else if((R|0)==93){if(!ya)j0a(va);if(!wa){ra=ta;sa=ua}else{j0a(wa);ra=ta;sa=ua}}else if((R|0)==109){J=k[u>>2]|0;if(J){O=k[L>>2]|0;if((O|0)==(J|0))za=J;else{K=O;do{k[L>>2]=K+-24;O=k[K+-4>>2]|0;if(O)j0a(O);O=k[K+-20>>2]|0;if(O)j0a(O);K=k[L>>2]|0}while((K|0)!=(J|0));za=k[u>>2]|0}OBa(za)}J=k[i>>2]|0;if(J){K=k[G>>2]|0;if((K|0)==(J|0))Aa=J;else{O=K;while(1){K=O+-8|0;k[G>>2]=K;I=k[O+-4>>2]|0;if(!I)Ca=K;else{j0a(I);Ca=k[G>>2]|0}if((Ca|0)==(J|0))break;else O=Ca}Aa=k[i>>2]|0}OBa(Aa)}r=d;return}if((R|0)==67){ra=qa;sa=pa}O=k[u>>2]|0;if(!O){P=ra;Q=sa}else{J=k[L>>2]|0;if((J|0)==(O|0))Da=O;else{I=J;do{k[L>>2]=I+-24;J=k[I+-4>>2]|0;if(J)j0a(J);J=k[I+-20>>2]|0;if(J)j0a(J);I=k[L>>2]|0}while((I|0)!=(O|0));Da=k[u>>2]|0}OBa(Da);P=ra;Q=sa}}if((R|0)==21){P=U;Q=T}O=k[i>>2]|0;if(!O){Ea=P;Fa=Q;Sc(Fa|0)}I=k[G>>2]|0;if((I|0)==(O|0))Ga=O;else{L=I;while(1){I=L+-8|0;k[G>>2]=I;J=k[L+-4>>2]|0;if(!J)Ha=I;else{j0a(J);Ha=k[G>>2]|0}if((Ha|0)==(O|0))break;else L=Ha}Ga=k[i>>2]|0}OBa(Ga);Ea=P;Fa=Q;Sc(Fa|0)}while(0);k[h>>2]=0;k[h+4>>2]=0;x=0;nb(159,g|0,b|0,c|0,h|0);F=x;x=0;if(F&1){F=Hc()|0;Ea=M;Fa=F;Sc(Fa|0)}else{k[a>>2]=k[g>>2];F=g+4|0;k[a+4>>2]=k[F>>2];k[g>>2]=0;k[F>>2]=0;r=d;return}}}while(0);k[f>>2]=0;k[f+4>>2]=0;x=0;nb(161,e|0,b|0,c|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;Ea=M;Fa=f;Sc(Fa|0)}else{k[a>>2]=k[e>>2];Fa=e+4|0;k[a+4>>2]=k[Fa>>2];k[e>>2]=0;k[Fa>>2]=0;r=d;return}}function Ita(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+32|0;f=e+24|0;g=e;Ata(f,b,d);d=k[f>>2]|0;h=k[f+4>>2]|0;i=(h|0)==0;if(!i)h0a(h);k[g>>2]=b;j=g+4|0;l=d+8|0;m=k[l+4>>2]|0;n=j;k[n>>2]=k[l>>2];k[n+4>>2]=m;k[g+12>>2]=k[d+16>>2];n=g+16|0;l=k[d+20>>2]|0;k[n>>2]=l;if(l)h0a(l);l=g+8|0;if((m|0)<0){x=0;m=Ba(618,b|0)|0;b=x;x=0;if(!(b&1)){k[l>>2]=m;o=8}}else o=8;if((o|0)==8?(x=0,nb(164,a|0,j|0,c|0,f|0),f=x,x=0,!(f&1)):0){f=k[n>>2]|0;if(f)j0a(f);if(i){r=e;return}j0a(h);j0a(h);r=e;return}e=Hc()|0;f=k[n>>2]|0;if(f)j0a(f);if(i)Sc(e|0);j0a(h);j0a(h);Sc(e|0)}function Jta(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;a=k[b+80>>2]|0;a:do switch(a|0){case 72:case 86:{c=1;break}default:if((a|0)==119|(a+-98|0)>>>0<14){d=k[b+120>>2]|0;switch(d|0){case 73:case 82:case 119:{e=1;break}default:switch(d|0){case 3:case 9:{e=0;break}default:{c=2;break a}}}c=e}else c=2}while(0);return c|0}function Kta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;e=r;r=r+144|0;f=e+116|0;g=e+104|0;h=e+96|0;j=e+88|0;l=e+64|0;m=e+56|0;n=e+48|0;o=e+40|0;p=e+32|0;q=e+24|0;s=e+136|0;t=e+16|0;u=e+8|0;v=e;k[f>>2]=b;w=f+4|0;y=tya(b)|0;z=sya(b)|0;A=k[z>>2]|0;B=k[z+4>>2]|0;if(!B){k[w>>2]=y;k[f+8>>2]=-1;k[f+12>>2]=A;C=0}else{h0a(B);k[w>>2]=y;k[f+8>>2]=-1;k[f+12>>2]=A;h0a(B);j0a(B);C=B}B=f+16|0;k[B>>2]=C;A=k[d>>2]|0;if(A){y=A+8|0;z=k[y+4>>2]|0;D=w;k[D>>2]=k[y>>2];k[D+4>>2]=z;z=k[A+16>>2]|0;D=k[A+20>>2]|0;if(D)h0a(D);k[f+12>>2]=z;k[B>>2]=D;if(C)j0a(C)}k[g>>2]=0;C=g+4|0;k[C>>2]=0;k[g+8>>2]=0;k[h>>2]=0;D=h+4|0;k[D>>2]=0;a:do if(((k[d>>2]|0)==0?(z=k[b>>2]|0,(k[z+80>>2]|0)==86):0)?(k[z+120>>2]|0)==1:0){x=0;Ba(619,z|0)|0;z=x;x=0;if(!(z&1)?(x=0,Ba(619,k[b>>2]|0)|0,z=x,x=0,!(z&1)):0){z=k[(k[b>>2]|0)+80>>2]|0;do if((z|0)!=2){A=j+4|0;y=l+4|0;E=l+8|0;F=l+12|0;G=l+16|0;H=o+4|0;I=p+4|0;J=n+4|0;K=m+4|0;L=g+8|0;N=z;b:while(1){k[j>>2]=0;k[A>>2]=0;switch(N|0){case 2:case 24:{O=0;P=0;break}default:{k[l>>2]=b;x=0;Q=Ba(616,b|0)|0;R=x;x=0;if(R&1){S=53;break b}x=0;R=Ba(617,b|0)|0;T=x;x=0;if(T&1){S=53;break b}T=k[R>>2]|0;U=k[R+4>>2]|0;if(!U){k[y>>2]=Q;k[E>>2]=-1;k[F>>2]=T;k[G>>2]=0}else{h0a(U);k[y>>2]=Q;k[E>>2]=-1;k[F>>2]=T;k[G>>2]=U;h0a(U);j0a(U)}x=0;U=Ba(618,k[l>>2]|0)|0;T=x;x=0;if(T&1){S=36;break b}k[E>>2]=U;x=0;xa(888,m|0,b|0);U=x;x=0;if(U&1){S=36;break b}k[o>>2]=0;k[H>>2]=0;k[p>>2]=0;k[I>>2]=0;k[q>>2]=0;if((k[E>>2]|0)<0){x=0;U=Ba(618,k[l>>2]|0)|0;T=x;x=0;if(T&1){S=37;break b}k[E>>2]=U}x=0;La(62,n|0,y|0,o|0,m|0,p|0,q|0);U=x;x=0;if(U&1){S=37;break b}U=k[n>>2]|0;T=k[J>>2]|0;k[n>>2]=0;k[J>>2]=0;k[j>>2]=U;k[A>>2]=T;Q=k[I>>2]|0;if(Q)j0a(Q);Q=k[K>>2]|0;if(Q)j0a(Q);Q=k[G>>2]|0;if(Q)j0a(Q);O=U;P=T}}T=k[C>>2]|0;if((T|0)==(k[L>>2]|0)){x=0;xa(758,g|0,j|0);U=x;x=0;if(U&1){V=P;S=54;break}}else{k[T>>2]=O;k[T+4>>2]=P;if(!P)W=T;else{h0a(P);W=k[C>>2]|0}k[C>>2]=W+8}if((k[(k[b>>2]|0)+80>>2]|0)==2){X=P;S=56;break}x=0;xa(884,b|0,24);T=x;x=0;if(T&1){V=P;S=54;break}if(P)j0a(P);N=k[(k[b>>2]|0)+80>>2]|0}if((S|0)==36){N=Hc()|0;Y=M;Z=N}else if((S|0)==37){N=Hc()|0;L=M;A=k[I>>2]|0;if(A)j0a(A);A=k[K>>2]|0;if(!A){Y=L;Z=N}else{j0a(A);Y=L;Z=N}}else if((S|0)==53){N=Hc()|0;_=N;$=M;break a}else if((S|0)==54){N=Hc()|0;L=M;if(!V){_=N;$=L;break a}j0a(V);_=N;$=L;break a}else if((S|0)==56){if(X)j0a(X);break}L=k[G>>2]|0;if(!L){_=Z;$=Y;break a}j0a(L);_=Z;$=Y;break a}while(0);x=0;z=Ba(618,k[f>>2]|0)|0;L=x;x=0;if(!(L&1)?(k[f+8>>2]=z,x=0,Ba(619,k[b>>2]|0)|0,z=x,x=0,!(z&1)):0){aa=b;S=70}else{ba=0;S=35}}else{ba=0;S=35}}else S=61;while(0);c:do if((S|0)==61){i[s>>0]=0;i[s+1>>0]=0;i[s+2>>0]=0;i[s+3>>0]=0;i[s+4>>0]=0;i[s>>0]=1;i[s+5>>0]=1;x=0;nb(148,t|0,b|0,s|0,d|0);Y=x;x=0;if(Y&1){ba=0;S=35}else{Y=k[C>>2]|0;do if(Y>>>0>=(k[g+8>>2]|0)>>>0){x=0;xa(902,g|0,t|0);Z=x;x=0;if(Z&1){Z=Hc()|0;X=M;V=k[t+4>>2]|0;if(!V){_=Z;$=X;break c}j0a(V);_=Z;$=X;break c}else{X=k[t+4>>2]|0;if(!X)break;j0a(X);break}}else{k[Y>>2]=k[t>>2];X=t+4|0;k[Y+4>>2]=k[X>>2];k[t>>2]=0;k[X>>2]=0;k[C>>2]=Y+8}while(0);aa=b;S=70}}while(0);d:do if((S|0)==70){t=k[aa>>2]|0;do if((k[t+80>>2]|0)==12){x=0;Ba(619,t|0)|0;d=x;x=0;if(d&1){ba=0;S=35;break d}k[v>>2]=0;k[v+4>>2]=0;x=0;fb(382,u|0,b|0,v|0);d=x;x=0;if(d&1){d=Hc()|0;_=d;$=M;break d}d=k[u>>2]|0;s=u+4|0;Y=k[s>>2]|0;k[u>>2]=0;k[s>>2]=0;k[h>>2]=d;k[D>>2]=Y;s=Y;if(!Y){Y=f+8|0;k[Y>>2]=k[d+12>>2];ca=Y;da=0;break}else{h0a(s);Y=f+8|0;k[Y>>2]=k[d+12>>2];j0a(s);ca=Y;da=s;break}}else{ca=f+8|0;da=0}while(0);if((k[ca>>2]|0)<0){x=0;t=Ba(618,k[f>>2]|0)|0;s=x;x=0;if(s&1){ba=da;S=35;break}k[ca>>2]=t}x=0;t=Ba(563,64)|0;s=x;x=0;if(s&1){ba=da;S=35}else{k[t+4>>2]=0;k[t+8>>2]=0;k[t>>2]=44804;s=t+12|0;x=0;pa(68,s|0,w|0,c|0,g|0,h|0);Y=x;x=0;if(Y&1){Y=Hc()|0;d=M;c0a(t);OBa(t);ea=da;fa=d;ga=Y;S=96;break}k[a>>2]=s;k[a+4>>2]=t;if(da)j0a(da);t=k[g>>2]|0;if(t){s=k[C>>2]|0;if((s|0)==(t|0))ha=t;else{Y=s;while(1){s=Y+-8|0;k[C>>2]=s;d=k[Y+-4>>2]|0;if(!d)ia=s;else{j0a(d);ia=k[C>>2]|0}if((ia|0)==(t|0))break;else Y=ia}ha=k[g>>2]|0}OBa(ha)}Y=k[B>>2]|0;if(!Y){r=e;return}j0a(Y);r=e;return}}while(0);if((S|0)==35){e=Hc()|0;ea=ba;fa=M;ga=e;S=96}if((S|0)==96)if(!ea){_=ga;$=fa}else{j0a(ea);_=ga;$=fa}fa=k[g>>2]|0;if(fa){$=k[C>>2]|0;if(($|0)==(fa|0))ja=fa;else{ga=$;while(1){$=ga+-8|0;k[C>>2]=$;ea=k[ga+-4>>2]|0;if(!ea)ka=$;else{j0a(ea);ka=k[C>>2]|0}if((ka|0)==(fa|0))break;else ga=ka}ja=k[g>>2]|0}OBa(ja)}ja=k[B>>2]|0;if(!ja)Sc(_|0);j0a(ja);Sc(_|0)}function Lta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;e=r;r=r+80|0;f=e+40|0;g=e+52|0;h=e+16|0;i=e+28|0;j=e+8|0;l=e;m=c+4|0;n=(k[c>>2]|0)!=(k[m>>2]|0);q2a(f,329672,0);x=0;pa(57,n|0,f|0,1280,286912,287493);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(f);p=n;q=o;Sc(p|0)}K2a(f);k[g>>2]=b;f=g+4|0;o=tya(b)|0;n=sya(b)|0;b=k[n>>2]|0;s=k[n+4>>2]|0;if(!s){k[f>>2]=o;k[g+8>>2]=-1;k[g+12>>2]=b;k[g+16>>2]=0}else{h0a(s);k[f>>2]=o;k[g+8>>2]=-1;k[g+12>>2]=b;k[g+16>>2]=s;h0a(s);j0a(s)}s=k[k[c>>2]>>2]|0;b=k[s+8>>2]|0;o=k[s+16>>2]|0;n=k[s+20>>2]|0;s=(n|0)==0;if(!s)h0a(n);t=k[(k[(k[m>>2]|0)+-8>>2]|0)+12>>2]|0;u=f;k[u>>2]=b;k[u+4>>2]=t;t=g+12|0;if(!s)h0a(n);k[t>>2]=o;o=g+16|0;u=k[o>>2]|0;k[o>>2]=n;if(u)j0a(u);k[a>>2]=0;u=a+4|0;k[u>>2]=0;b=k[c>>2]|0;c=k[b>>2]|0;v=b;a:do if((c|0)!=0?(w=iDa(c,6136,6040,0)|0,(w|0)!=0):0){y=k[m>>2]|0;x=0;fb(140,h|0,329672,0);z=x;x=0;do if(!(z&1)){x=0;pa(57,(y-v|0)==8|0,h|0,1289,286912,287493);A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(h);C=B;D=A;break a}K2a(h);A=w+24|0;B=g+8|0;if((k[B>>2]|0)<0){x=0;E=Ba(618,k[g>>2]|0)|0;F=x;x=0;if(F&1){G=13;break}k[B>>2]=E}x=0;E=Ba(563,48)|0;B=x;x=0;if(!(B&1)){k[E+4>>2]=0;k[E+8>>2]=0;k[E>>2]=44664;B=E+12|0;x=0;xa(769,B|0,f|0);F=x;x=0;if(F&1){F=Hc()|0;H=M;c0a(E);OBa(E);I=H;J=F;break}else{k[B>>2]=35720;F=E+36|0;k[F>>2]=k[A>>2];k[F+4>>2]=k[A+4>>2];k[F+8>>2]=k[A+8>>2];k[a>>2]=B;k[u>>2]=E;K=E;G=51;break a}}else G=13}else G=13;while(0);if((G|0)==13){w=Hc()|0;I=M;J=w}C=I;D=J}else G=25;while(0);b:do if((G|0)==25){k[i>>2]=0;J=i+4|0;k[J>>2]=0;k[i+8>>2]=0;I=k[m>>2]|0;c:do if((b|0)!=(I|0)){h=i+8|0;v=b;while(1){c=iDa(k[v>>2]|0,6136,6024,0)|0;if(!c){G=32;break}w=k[c+24>>2]|0;c=k[J>>2]|0;x=0;if((c|0)==(k[h>>2]|0)){Rx(i,w);y=x;x=0;if(y&1){G=38;break}}else{n2a(c,w);w=x;x=0;if(w&1){G=38;break}k[J>>2]=(k[J>>2]|0)+12}v=v+8|0;if((v|0)==(I|0)){G=27;break c}}if((G|0)==32){x=0;hb(49);x=0;G=39;break}else if((G|0)==38){v=Hc()|0;L=v;N=M;break}}else G=27;while(0);do if((G|0)==27){I=g+8|0;if((k[I>>2]|0)<0){x=0;v=Ba(618,k[g>>2]|0)|0;h=x;x=0;if(h&1){G=39;break}k[I>>2]=v}x=0;fb(383,j|0,f|0,i|0);v=x;x=0;if(v&1)G=39;else{v=k[j>>2]|0;I=j+4|0;h=k[I>>2]|0;k[j>>2]=0;k[I>>2]=0;k[a>>2]=v;k[u>>2]=h;v=h;h=k[i>>2]|0;if(h){I=k[J>>2]|0;if((I|0)==(h|0))O=h;else{w=I;do{I=w+-12|0;k[J>>2]=I;K2a(I);w=k[J>>2]|0}while((w|0)!=(h|0));O=k[i>>2]|0}OBa(O)}K=v;G=51;break b}}while(0);if((G|0)==39){h=Hc()|0;L=h;N=M}h=k[i>>2]|0;if(!h){C=N;D=L}else{w=k[J>>2]|0;if((w|0)==(h|0))P=h;else{I=w;do{w=I+-12|0;k[J>>2]=w;K2a(w);I=k[J>>2]|0}while((I|0)!=(h|0));P=k[i>>2]|0}OBa(P);C=N;D=L}}while(0);d:do if((G|0)==51){L=k[d>>2]|0;N=k[d+4>>2]|0;e:do if((L|0)!=(N|0)){P=g+8|0;i=l+4|0;O=L;j=K;while(1){b=O+8|0;m=k[b+4>>2]|0;h=f;k[h>>2]=k[b>>2];k[h+4>>2]=m;m=k[O+16>>2]|0;h=k[O+20>>2]|0;if(h)h0a(h);k[t>>2]=m;m=k[o>>2]|0;k[o>>2]=h;if(m)j0a(m);if((k[P>>2]|0)<0){x=0;m=Ba(618,k[g>>2]|0)|0;h=x;x=0;if(h&1){Q=j;break}k[P>>2]=m}x=0;nb(165,l|0,f|0,a|0,O|0);m=x;x=0;if(m&1){Q=j;break}m=k[l>>2]|0;h=j;j=k[i>>2]|0;k[l>>2]=0;k[i>>2]=0;k[a>>2]=m;k[u>>2]=j;if(h)j0a(h);O=O+24|0;if((O|0)==(N|0))break e}O=Hc()|0;j=M;if(!Q){C=j;D=O;break d}j0a(Q);C=j;D=O;break d}while(0);if(!s)j0a(n);N=k[o>>2]|0;if(!N){r=e;return}j0a(N);r=e;return}while(0);if(!s)j0a(n);n=k[o>>2]|0;if(!n){p=D;q=C;Sc(p|0)}j0a(n);p=D;q=C;Sc(p|0)}function Mta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;e=r;r=r+64|0;f=e+24|0;g=e+36|0;h=e+16|0;i=e+8|0;j=e;l=c+4|0;m=(k[c>>2]|0)!=(k[l>>2]|0);q2a(f,329672,0);x=0;pa(57,m|0,f|0,1312,286912,287727);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(f);o=m;p=n;Sc(o|0)}K2a(f);f=k[c>>2]|0;n=k[f>>2]|0;m=k[f+4>>2]|0;f=(m|0)==0;if(!f)h0a(m);k[g>>2]=b;b=g+4|0;q=n+8|0;s=k[q+4>>2]|0;t=b;k[t>>2]=k[q>>2];k[t+4>>2]=s;s=g+12|0;k[s>>2]=k[n+16>>2];t=g+16|0;q=k[n+20>>2]|0;k[t>>2]=q;if(q)h0a(q);if(!f)j0a(m);m=k[c>>2]|0;k[a>>2]=k[m>>2];f=a+4|0;q=k[m+4>>2]|0;k[f>>2]=q;if(!q){u=c;v=m;w=m}else{h0a(q);m=k[c>>2]|0;u=c;v=m;w=m}a:do if((k[l>>2]|0)-w>>3>>>0>1){m=i+4|0;n=g+8|0;y=h+4|0;z=q;A=v;B=1;while(1){C=k[A>>2]|0;D=k[C+8>>2]|0;E=k[C+16>>2]|0;F=k[C+20>>2]|0;C=(F|0)==0;if(C)G=A;else{h0a(F);G=k[c>>2]|0}H=k[(k[G+(B<<3)>>2]|0)+12>>2]|0;I=b;k[I>>2]=D;k[I+4>>2]=H;if(!C)h0a(F);k[s>>2]=E;E=k[t>>2]|0;k[t>>2]=F;if(E)j0a(E);E=iDa(k[(k[c>>2]|0)+(B<<3)>>2]|0,6136,6024,0)|0;if(!E){J=z;K=F;L=C;N=23;break}H=k[E+24>>2]|0;x=0;E=Ba(563,24)|0;I=x;x=0;if(I&1){O=z;P=F;Q=C;N=37;break}k[E+4>>2]=0;k[E+8>>2]=0;k[E>>2]=33300;I=E+12|0;x=0;xa(604,I|0,H|0);H=x;x=0;if(H&1){R=z;S=F;T=C;U=E;N=26;break}k[i>>2]=I;k[m>>2]=E;if((k[n>>2]|0)<0){x=0;I=Ba(618,k[g>>2]|0)|0;H=x;x=0;if(H&1){V=z;W=F;X=C;Y=E;N=39;break}k[n>>2]=I}x=0;nb(166,h|0,b|0,a|0,i|0);I=x;x=0;if(I&1){V=z;W=F;X=C;Y=E;N=39;break}I=k[h>>2]|0;H=k[y>>2]|0;k[h>>2]=0;k[y>>2]=0;k[a>>2]=I;k[f>>2]=H;I=H;if(z)j0a(z);j0a(E);if(!C)j0a(F);B=B+1|0;A=k[u>>2]|0;if(B>>>0>=(k[l>>2]|0)-A>>3>>>0){Z=I;N=13;break a}else z=I}if((N|0)==23){x=0;hb(49);x=0;z=Hc()|0;_=L;$=K;aa=J;ba=M;ca=z;N=38}else if((N|0)==26){z=Hc()|0;A=M;c0a(U);OBa(U);_=T;$=S;aa=R;ba=A;ca=z;N=38}else if((N|0)==37){z=Hc()|0;_=Q;$=P;aa=O;ba=M;ca=z;N=38}else if((N|0)==39){z=Hc()|0;A=M;j0a(Y);da=z;ea=A;fa=W;ga=X;ha=V}if((N|0)==38){da=ca;ea=ba;fa=$;ga=_;ha=aa}if(ga){ia=da;ja=ea;ka=ha}else{j0a(fa);ia=da;ja=ea;ka=ha}}else{Z=q;N=13}while(0);b:do if((N|0)==13){q=k[d>>2]|0;ha=k[d+4>>2]|0;c:do if((q|0)!=(ha|0)){ea=g+8|0;da=j+4|0;fa=q;ga=Z;while(1){aa=fa+8|0;_=k[aa+4>>2]|0;$=b;k[$>>2]=k[aa>>2];k[$+4>>2]=_;_=k[fa+16>>2]|0;$=k[fa+20>>2]|0;if($)h0a($);k[s>>2]=_;_=k[t>>2]|0;k[t>>2]=$;if(_)j0a(_);if((k[ea>>2]|0)<0){x=0;_=Ba(618,k[g>>2]|0)|0;$=x;x=0;if($&1){la=ga;break}k[ea>>2]=_}x=0;nb(167,j|0,b|0,a|0,fa|0);_=x;x=0;if(_&1){la=ga;break}_=k[j>>2]|0;$=ga;ga=k[da>>2]|0;k[j>>2]=0;k[da>>2]=0;k[a>>2]=_;k[f>>2]=ga;if($)j0a($);fa=fa+24|0;if((fa|0)==(ha|0))break c}fa=Hc()|0;ia=fa;ja=M;ka=la;break b}while(0);ha=k[t>>2]|0;if(!ha){r=e;return}j0a(ha);r=e;return}while(0);if(ka)j0a(ka);ka=k[t>>2]|0;if(!ka){o=ia;p=ja;Sc(o|0)}j0a(ka);o=ia;p=ja;Sc(o|0)}function Nta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;e=r;r=r+64|0;f=e+48|0;g=e+36|0;h=e+16|0;j=e+8|0;l=e;Ota(a,b,d);d=k[a>>2]|0;m=a+4|0;n=k[m>>2]|0;o=(n|0)==0;if(!o)h0a(n);k[h>>2]=b;p=h+4|0;q=d+8|0;s=k[q+4>>2]|0;t=p;k[t>>2]=k[q>>2];k[t+4>>2]=s;k[h+12>>2]=k[d+16>>2];s=h+16|0;t=k[d+20>>2]|0;k[s>>2]=t;if(t)h0a(t);if(!o)j0a(n);o=k[(k[b>>2]|0)+80>>2]|0;x=0;fb(140,g|0,329672,0);t=x;x=0;a:do if(t&1){d=Hc()|0;u=n;v=M;w=d;y=35}else{x=0;pa(57,(o|0)<141|0,g|0,311,293207,287969);d=x;x=0;if(d&1){d=Hc()|0;q=M;K2a(g);u=n;v=q;w=d;y=35;break}K2a(g);d=i[292689+o>>0]|0;b:do if((d|0)>=(c|0)){q=l+4|0;z=j+4|0;A=h+8|0;B=n;C=n;D=d;c:while(1){E=D+1|0;F=C;G=B;while(1){H=k[(k[b>>2]|0)+80>>2]|0;x=0;fb(140,f|0,329672,0);I=x;x=0;if(I&1){J=F;y=33;break c}x=0;pa(57,(H|0)<141|0,f|0,311,293207,287969);I=x;x=0;if(I&1){K=F;y=15;break c}K2a(f);if((i[292689+H>>0]|0)!=(D|0)){L=G;N=F;break}H=k[b>>2]|0;I=k[H+80>>2]|0;x=0;Ba(619,H|0)|0;H=x;x=0;if(H&1){J=F;y=33;break c}k[l>>2]=0;k[q>>2]=0;x=0;nb(168,j|0,b|0,E|0,l|0);H=x;x=0;if(H&1){O=F;y=36;break c}H=k[j>>2]|0;P=k[z>>2]|0;Q=(P|0)==0;if(Q){R=k[H+12>>2]|0;k[A>>2]=R;S=R}else{h0a(P);k[A>>2]=k[H+12>>2];j0a(P);S=k[A>>2]|0}if((S|0)<0){x=0;H=Ba(618,k[h>>2]|0)|0;R=x;x=0;if(R&1){T=F;U=P;V=Q;y=37;break c}k[A>>2]=H}x=0;H=Ba(563,56)|0;R=x;x=0;if(R&1){T=F;U=P;V=Q;y=37;break c}k[H+4>>2]=0;k[H+8>>2]=0;k[H>>2]=44832;R=H+12|0;x=0;pa(69,R|0,p|0,a|0,I|0,j|0);I=x;x=0;if(I&1){W=F;X=P;Y=Q;Z=H;y=27;break c}k[a>>2]=R;k[m>>2]=H;if(G)j0a(G);if(!Q)j0a(P);F=H;G=H}if((D|0)>(c|0)){B=L;C=N;D=D+-1|0}else break b}if((y|0)==15){D=Hc()|0;C=M;K2a(f);u=K;v=C;w=D;y=35;break a}else if((y|0)==27){D=Hc()|0;C=M;c0a(Z);OBa(Z);_=X;$=Y;aa=W;ba=C;ca=D}else if((y|0)==33){D=Hc()|0;u=J;v=M;w=D;y=35;break a}else if((y|0)==36){D=Hc()|0;da=M;ea=D;fa=O;break a}else if((y|0)==37){D=Hc()|0;_=U;$=V;aa=T;ba=M;ca=D}if($){da=ba;ea=ca;fa=aa;break a}j0a(_);da=ba;ea=ca;fa=aa;break a}while(0);d=k[s>>2]|0;if(!d){r=e;return}j0a(d);r=e;return}while(0);if((y|0)==35){da=v;ea=w;fa=u}u=k[s>>2]|0;if(u)j0a(u);if(!fa)Sc(ea|0);j0a(fa);Sc(ea|0)}function Ota(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=r;r=r+48|0;e=d+24|0;f=d+16|0;g=d;h=d+8|0;i=k[c>>2]|0;do if(i){j=k[c+4>>2]|0;l=(j|0)==0;if(!l)h0a(j);k[e>>2]=b;m=i+8|0;n=k[m+4>>2]|0;o=e+4|0;k[o>>2]=k[m>>2];k[o+4>>2]=n;k[e+12>>2]=k[i+16>>2];n=k[i+20>>2]|0;k[e+16>>2]=n;if(n)h0a(n);if(!l)j0a(j)}else{k[e>>2]=b;j=e+4|0;x=0;l=Ba(616,b|0)|0;n=x;x=0;if(!(n&1)?(x=0,n=Ba(617,b|0)|0,o=x,x=0,!(o&1)):0){o=k[n>>2]|0;m=k[n+4>>2]|0;if(!m){k[j>>2]=l;k[e+8>>2]=-1;k[e+12>>2]=o;k[e+16>>2]=0;break}else{h0a(m);k[j>>2]=l;k[e+8>>2]=-1;k[e+12>>2]=o;k[e+16>>2]=m;h0a(m);j0a(m);break}}m=Hc()|0;p=M;q=m;Sc(q|0)}while(0);i=k[b>>2]|0;m=k[i+80>>2]|0;a:do if(!(k[c>>2]|0)){o=m+-33|0;if(o>>>0<17){if(!((m+-47|0)>>>0<2|(126979>>>(o&131071)&1|0)!=0)){s=37;break}}else if((m+-47|0)>>>0>=2){s=37;break}x=0;Ba(619,i|0)|0;o=x;x=0;if(!(o&1)){k[g>>2]=0;k[g+4>>2]=0;x=0;fb(397,f|0,b|0,g|0);o=x;x=0;if(o&1){o=Hc()|0;t=M;u=o;break}o=k[f>>2]|0;l=k[f+4>>2]|0;j=(l|0)==0;if(j){n=k[o+12>>2]|0;v=e+8|0;k[v>>2]=n;w=n;y=v}else{h0a(l);v=k[o+12>>2]|0;o=e+8|0;k[o>>2]=v;j0a(l);w=v;y=o}o=e+4|0;if((w|0)<0){x=0;v=Ba(618,k[e>>2]|0)|0;n=x;x=0;if(n&1)s=34;else{k[y>>2]=v;s=25}}else s=25;do if((s|0)==25){x=0;v=Ba(563,52)|0;n=x;x=0;if(n&1)s=34;else{k[v+4>>2]=0;k[v+8>>2]=0;k[v>>2]=44860;n=v+12|0;x=0;pa(70,n|0,o|0,m|0,f|0,1);z=x;x=0;if(z&1){z=Hc()|0;A=M;c0a(v);OBa(v);B=A;C=z;break}k[a>>2]=n;k[a+4>>2]=v;if(!j)j0a(l);s=54;break a}}while(0);if((s|0)==34){o=Hc()|0;B=M;C=o}if(j){t=B;u=C}else{j0a(l);t=B;u=C}}else s=32}else s=37;while(0);b:do if((s|0)==37){x=0;fb(398,h|0,b|0,c|0);C=x;x=0;if(C&1)s=32;else{C=k[(k[b>>2]|0)+80>>2]|0;c:do if((C+-47|0)>>>0<2){x=0;B=Ba(618,k[e>>2]|0)|0;f=x;x=0;do if(!(f&1)?(m=e+8|0,k[m>>2]=B,x=0,Ba(619,k[b>>2]|0)|0,y=x,x=0,!(y&1)):0){y=e+4|0;if((k[m>>2]|0)<0){x=0;w=Ba(618,k[e>>2]|0)|0;g=x;x=0;if(g&1){s=40;break}k[m>>2]=w}x=0;w=Ba(563,52)|0;m=x;x=0;if(!(m&1)){k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=44860;m=w+12|0;x=0;pa(70,m|0,y|0,C|0,h|0,0);y=x;x=0;if(y&1){y=Hc()|0;g=M;c0a(w);OBa(w);D=g;E=y;break}k[a>>2]=m;k[a+4>>2]=w;w=k[h+4>>2]|0;if(!w)break c;j0a(w);break c}else s=40}else s=40;while(0);if((s|0)==40){B=Hc()|0;D=M;E=B}B=k[h+4>>2]|0;if(!B){t=D;u=E;break b}j0a(B);t=D;u=E;break b}else{k[a>>2]=k[h>>2];B=h+4|0;k[a+4>>2]=k[B>>2];k[h>>2]=0;k[B>>2]=0}while(0);s=54}}while(0);if((s|0)==32){h=Hc()|0;t=M;u=h}else if((s|0)==54){s=k[e+16>>2]|0;if(!s){r=d;return}j0a(s);r=d;return}d=k[e+16>>2]|0;if(!d){p=t;q=u;Sc(q|0)}j0a(d);p=t;q=u;Sc(q|0)}function Pta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;d=r;r=r+160|0;e=d+128|0;f=d+120|0;g=d+104|0;h=d+80|0;i=d+112|0;j=d+56|0;l=d+48|0;m=d+40|0;n=d+32|0;o=d+24|0;p=d+88|0;q=d+64|0;s=d;t=k[c>>2]|0;do if(t){u=k[c+4>>2]|0;v=(u|0)==0;if(!v)h0a(u);k[e>>2]=b;w=t+8|0;y=k[w+4>>2]|0;z=e+4|0;k[z>>2]=k[w>>2];k[z+4>>2]=y;k[e+12>>2]=k[t+16>>2];y=k[t+20>>2]|0;k[e+16>>2]=y;if(y)h0a(y);if(!v)j0a(u)}else{k[e>>2]=b;u=e+4|0;x=0;v=Ba(616,b|0)|0;y=x;x=0;if(!(y&1)?(x=0,y=Ba(617,b|0)|0,z=x,x=0,!(z&1)):0){z=k[y>>2]|0;w=k[y+4>>2]|0;if(!w){k[u>>2]=v;k[e+8>>2]=-1;k[e+12>>2]=z;k[e+16>>2]=0;break}else{h0a(w);k[u>>2]=v;k[e+8>>2]=-1;k[e+12>>2]=z;k[e+16>>2]=w;h0a(w);j0a(w);break}}w=Hc()|0;A=M;B=w;Sc(B|0)}while(0);k[a>>2]=0;t=a+4|0;k[t>>2]=0;w=k[c>>2]|0;z=w;do if(!w){if((k[(k[b>>2]|0)+80>>2]|0)==75){x=0;xa(884,b|0,75);v=x;x=0;if(!(v&1)?(x=0,fb(381,f|0,b|0,0),v=x,x=0,!(v&1)):0){v=k[f>>2]|0;u=k[f+4>>2]|0;y=(u|0)==0;if(y)C=k[v+12>>2]|0;else{h0a(u);D=k[v+12>>2]|0;j0a(u);C=D}k[e+8>>2]=C;x=0;fb(399,g|0,e|0,f|0);D=x;x=0;if(D&1){D=Hc()|0;v=M;if(y){E=v;F=D;break}j0a(u);E=v;F=D;break}D=k[g>>2]|0;v=g+4|0;G=k[v>>2]|0;k[g>>2]=0;k[v>>2]=0;k[a>>2]=D;k[t>>2]=G;if(!y)j0a(u);H=t;I=a;J=G;K=35;break}}else{x=0;xa(912,h|0,b|0);G=x;x=0;if(!(G&1)){G=k[h>>2]|0;u=h+4|0;y=k[u>>2]|0;k[h>>2]=0;k[u>>2]=0;k[a>>2]=G;k[t>>2]=y;H=t;I=a;J=y;K=35;break}}y=Hc()|0;L=0;N=y;O=M;K=30}else{y=k[c+4>>2]|0;if(y)h0a(y);k[a>>2]=z;k[t>>2]=y;H=t;I=a;J=y;K=35}while(0);do if((K|0)==35){t=i+4|0;z=e+8|0;c=e+4|0;h=m+4|0;g=l+4|0;f=j+4|0;C=n+4|0;w=o+4|0;y=p+4|0;G=p+8|0;u=q+4|0;D=q+8|0;v=p+8|0;P=s+4|0;Q=s+8|0;R=s+12|0;S=q+8|0;T=s+16|0;U=s+20|0;V=J;a:while(1){W=k[b>>2]|0;switch(k[W+80>>2]|0){case 3:{x=0;Ba(619,W|0)|0;X=x;x=0;if(X&1){Y=V;K=28;break a}k[i>>2]=0;k[t>>2]=0;if((k[(k[b>>2]|0)+80>>2]|0)==4)Z=0;else{k[l>>2]=0;k[g>>2]=0;x=0;fb(382,j|0,b|0,l|0);X=x;x=0;if(X&1){_=V;K=41;break a}X=k[j>>2]|0;$=k[f>>2]|0;k[j>>2]=0;k[f>>2]=0;k[i>>2]=X;k[t>>2]=$;Z=$}x=0;$=Ba(618,k[e>>2]|0)|0;X=x;x=0;if(X&1){aa=V;ba=Z;K=53;break a}k[z>>2]=$;x=0;xa(884,b|0,4);$=x;x=0;if($&1){aa=V;ba=Z;K=53;break a}if((k[z>>2]|0)<0){x=0;$=Ba(618,k[e>>2]|0)|0;X=x;x=0;if(X&1){aa=V;ba=Z;K=53;break a}k[z>>2]=$}x=0;nb(169,m|0,c|0,a|0,i|0);$=x;x=0;if($&1){aa=V;ba=Z;K=53;break a}$=k[m>>2]|0;X=k[h>>2]|0;k[m>>2]=0;k[h>>2]=0;k[I>>2]=$;k[H>>2]=X;if(V)j0a(V);if(Z)j0a(Z);V=X;continue a;break}case 9:{x=0;Ba(619,W|0)|0;X=x;x=0;if(X&1){Y=V;K=28;break a}x=0;X=Ba(618,k[e>>2]|0)|0;$=x;x=0;if($&1){Y=V;K=28;break a}k[z>>2]=X;x=0;xa(888,o|0,b|0);X=x;x=0;if(X&1){Y=V;K=28;break a}if((k[z>>2]|0)<0){x=0;X=Ba(618,k[e>>2]|0)|0;$=x;x=0;if($&1){ca=V;K=66;break a}k[z>>2]=X}x=0;nb(166,n|0,c|0,a|0,o|0);X=x;x=0;if(X&1){ca=V;K=66;break a}X=k[n>>2]|0;$=k[C>>2]|0;k[n>>2]=0;k[C>>2]=0;k[I>>2]=X;k[H>>2]=$;X=$;if(V)j0a(V);$=k[w>>2]|0;if(!$){V=X;continue a}j0a($);V=X;continue a;break}case 1:{x=0;Ba(619,W|0)|0;W=x;x=0;if(W&1){Y=V;K=28;break a}k[p>>2]=0;k[y>>2]=0;k[G>>2]=0;k[q>>2]=0;k[u>>2]=0;k[D>>2]=0;x=0;xa(913,s|0,b|0);W=x;x=0;if(W&1){da=V;ea=0;fa=0;ga=0;ha=0;ia=0;ja=0;K=97;break a}W=k[s>>2]|0;X=k[P>>2]|0;$=k[Q>>2]|0;k[p>>2]=W;k[y>>2]=X;k[v>>2]=$;k[Q>>2]=0;k[P>>2]=0;k[s>>2]=0;$=W;ka=X;X=W;la=k[R>>2]|0;ma=k[T>>2]|0;na=k[U>>2]|0;k[q>>2]=la;k[u>>2]=ma;k[S>>2]=na;k[U>>2]=0;k[T>>2]=0;k[R>>2]=0;na=la;oa=ma;ma=la;x=0;qa=Ba(618,k[e>>2]|0)|0;ra=x;x=0;if(ra&1){da=V;ea=ma;fa=X;ga=ka;ha=$;ia=oa;ja=na;K=97;break a}k[z>>2]=qa;x=0;xa(884,b|0,2);qa=x;x=0;if(qa&1){da=V;ea=ma;fa=X;ga=ka;ha=$;ia=oa;ja=na;K=97;break a}if((k[z>>2]|0)<0){x=0;qa=Ba(618,k[e>>2]|0)|0;ra=x;x=0;if(ra&1){da=V;ea=ma;fa=X;ga=ka;ha=$;ia=oa;ja=na;K=97;break a}k[z>>2]=qa}x=0;qa=Ba(563,68)|0;ra=x;x=0;if(ra&1){da=V;ea=ma;fa=X;ga=ka;ha=$;ia=oa;ja=na;K=97;break a}k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa>>2]=44888;ra=qa+12|0;x=0;pa(71,ra|0,c|0,a|0,p|0,q|0);sa=x;x=0;if(sa&1){ta=$;ua=V;va=ka;wa=X;ya=na;za=oa;Aa=ma;Ca=qa;K=77;break a}k[I>>2]=ra;k[H>>2]=qa;if(V)j0a(V);if(la){if((oa|0)==(na|0))Da=la;else{ra=oa+-8|0;sa=0-((ra+(0-la)|0)>>>3)|0;la=oa;do{oa=k[la+-4>>2]|0;la=la+-8|0;if(oa)j0a(oa)}while((la|0)!=(na|0));k[u>>2]=ra+(sa<<3);Da=ma}OBa(Da)}if(W){if((ka|0)==($|0))Ea=W;else{na=ka+-8|0;la=0-((na+(0-W)|0)>>>3)|0;oa=ka;do{Fa=k[oa+-4>>2]|0;oa=oa+-8|0;if(Fa)j0a(Fa)}while((oa|0)!=($|0));k[y>>2]=na+(la<<3);Ea=X}OBa(Ea)}V=qa;continue a;break}default:{K=114;break a}}}if((K|0)==28){V=Hc()|0;L=Y;N=V;O=M;K=30;break}else if((K|0)==41){V=Hc()|0;Ga=M;Ha=V;Ia=_;K=117;break}else if((K|0)==53){V=Hc()|0;c=M;if(!ba){Ga=c;Ha=V;Ia=aa;K=117;break}j0a(ba);Ga=c;Ha=V;Ia=aa;K=117;break}else if((K|0)==66){V=Hc()|0;c=M;z=k[w>>2]|0;if(!z){Ga=c;Ha=V;Ia=ca;K=117;break}j0a(z);Ga=c;Ha=V;Ia=ca;K=117;break}else if((K|0)==77){V=Hc()|0;c=M;c0a(Ca);OBa(Ca);Ja=Aa;Ka=wa;La=ya;Ma=za;Na=ta;Oa=va;Pa=ua;Qa=c;Ra=V}else if((K|0)==97){V=Hc()|0;Ja=ea;Ka=fa;La=ja;Ma=ia;Na=ha;Oa=ga;Pa=da;Qa=M;Ra=V}else if((K|0)==114){V=k[e+16>>2]|0;if(!V){r=d;return}j0a(V);r=d;return}V=La;if(La){if((Ma|0)==(La|0))Sa=La;else{c=~((Ma+-8-V|0)>>>3);V=Ma;do{z=k[V+-4>>2]|0;V=V+-8|0;if(z)j0a(z)}while((V|0)!=(La|0));k[u>>2]=Ma+(c<<3);Sa=Ja}OBa(Sa)}V=Na;if(!Na){Ga=Qa;Ha=Ra;Ia=Pa;K=117}else{if((Oa|0)==(Na|0))Ta=Na;else{w=~((Oa+-8-V|0)>>>3);V=Oa;do{z=k[V+-4>>2]|0;V=V+-8|0;if(z)j0a(z)}while((V|0)!=(Na|0));k[y>>2]=Oa+(w<<3);Ta=Ka}OBa(Ta);Ga=Qa;Ha=Ra;Ia=Pa;K=117}}while(0);if((K|0)==30){Ga=O;Ha=N;Ia=L;K=117}if((K|0)==117)if(!Ia){E=Ga;F=Ha}else{j0a(Ia);E=Ga;F=Ha}Ha=k[e+16>>2]|0;if(!Ha){A=E;B=F;Sc(B|0)}j0a(Ha);A=E;B=F;Sc(B|0)}function Qta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;c=r;r=r+224|0;d=c+196|0;e=c+192|0;f=c+176|0;g=c+160|0;h=c+184|0;j=c+168|0;l=c+128|0;m=c+152|0;n=c+148|0;o=c+112|0;p=c+88|0;q=c+80|0;s=c+72|0;t=c+64|0;u=c+136|0;v=c+216|0;w=c+56|0;y=c+48|0;z=c+32|0;A=c+24|0;B=c+16|0;C=c+124|0;D=c+120|0;E=c+96|0;F=c;k[d>>2]=b;G=d+4|0;H=tya(b)|0;I=sya(b)|0;J=k[I>>2]|0;K=k[I+4>>2]|0;if(!K){k[G>>2]=H;k[d+8>>2]=-1;k[d+12>>2]=J;L=0}else{h0a(K);k[G>>2]=H;k[d+8>>2]=-1;k[d+12>>2]=J;h0a(K);j0a(K);L=K}K=d+16|0;k[K>>2]=L;L=k[b>>2]|0;J=k[L+80>>2]|0;k[e>>2]=J;a:do switch(J|0){case 115:case 114:{x=0;H=Ba(618,b|0)|0;I=x;x=0;if(!(I&1)?(k[d+8>>2]=H,x=0,xa(887,g|0,b|0),H=x,x=0,!(H&1)):0){x=0;nb(170,f|0,d|0,e|0,g|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;N=k[g+4>>2]|0;if(!N){O=I;P=H;Q=134;break a}j0a(N);O=I;P=H;Q=134;break a}else{H=k[f>>2]|0;I=f+4|0;N=k[I>>2]|0;k[f>>2]=0;k[I>>2]=0;I=k[g+4>>2]|0;if(!I){R=H;S=N;Q=128;break a}j0a(I);R=H;S=N;Q=128;break a}}else Q=132;break}case 116:{N=k[L+120>>2]|0;if((N&-4|0)==88){x=0;xa(887,h|0,b|0);H=x;x=0;if(H&1){Q=132;break a}x=0;H=Ba(618,k[d>>2]|0)|0;I=x;x=0;if((!(I&1)?(k[d+8>>2]=H,H=k[b>>2]|0,k[j>>2]=k[H+80>>2],x=0,Ba(619,H|0)|0,H=x,x=0,!(H&1)):0)?(x=0,pa(72,l|0,d|0,e|0,h|0,j|0),H=x,x=0,!(H&1)):0){H=k[l>>2]|0;I=l+4|0;T=k[I>>2]|0;k[l>>2]=0;k[I>>2]=0;I=k[h+4>>2]|0;if(I)j0a(I);R=H;S=T;Q=128;break a}T=Hc()|0;H=M;I=k[h+4>>2]|0;if(!I){O=H;P=T;Q=134;break a}j0a(I);O=H;P=T;Q=134;break a}if((N+-92|0)>>>0<6){x=0;xa(887,m|0,b|0);N=x;x=0;if(!(N&1)){x=0;N=Ba(618,k[d>>2]|0)|0;T=x;x=0;if((!(T&1)?(k[d+8>>2]=N,N=k[b>>2]|0,k[n>>2]=k[N+80>>2],x=0,Ba(619,N|0)|0,N=x,x=0,!(N&1)):0)?(x=0,pa(72,o|0,d|0,e|0,m|0,n|0),N=x,x=0,!(N&1)):0){N=k[o>>2]|0;T=o+4|0;H=k[T>>2]|0;k[o>>2]=0;k[T>>2]=0;T=k[m+4>>2]|0;if(T)j0a(T);R=N;S=H;Q=128;break a}H=Hc()|0;N=M;T=k[m+4>>2]|0;if(!T){O=N;P=H;Q=134}else{j0a(T);O=N;P=H;Q=134}}else Q=132}else Q=32;break}case 117:{Q=32;break}case 119:{x=0;H=Ba(618,b|0)|0;N=x;x=0;if(!(N&1)?(k[d+8>>2]=H,x=0,xa(887,t|0,b|0),H=x,x=0,!(H&1)):0){x=0;fb(379,s|0,d|0,t|0);H=x;x=0;if(H&1){H=Hc()|0;N=M;T=k[t+4>>2]|0;if(!T){O=N;P=H;Q=134;break a}j0a(T);O=N;P=H;Q=134;break a}else{H=k[s>>2]|0;N=s+4|0;T=k[N>>2]|0;k[s>>2]=0;k[N>>2]=0;N=k[t+4>>2]|0;if(!N){R=H;S=T;Q=128;break a}j0a(N);R=H;S=T;Q=128;break a}}else Q=132;break}case 3:case 1:{x=0;Ba(619,L|0)|0;T=x;x=0;if(!(T&1)){k[u>>2]=0;T=u+4|0;k[T>>2]=0;k[u+8>>2]=0;H=(J|0)==1?2:4;N=(J|0)==3;i[v>>0]=N&1;I=k[(k[b>>2]|0)+80>>2]|0;b:do if((I|0)!=(H|0)){U=A+4|0;V=u+8|0;W=y+4|0;X=w+4|0;do if(N){Y=I;c:while(1){do if(!((Y|0)==24|(Y|0)==(H|0))){k[y>>2]=0;k[W>>2]=0;x=0;fb(382,w|0,b|0,y|0);Z=x;x=0;if(Z&1){Q=78;break c}Z=k[T>>2]|0;if(Z>>>0<(k[V>>2]|0)>>>0){k[Z>>2]=k[w>>2];k[Z+4>>2]=k[X>>2];k[w>>2]=0;k[X>>2]=0;k[T>>2]=Z+8;break}x=0;xa(906,u|0,w|0);Z=x;x=0;if(Z&1){Q=80;break c}Z=k[X>>2]|0;if(Z)j0a(Z)}else{x=0;fb(140,z|0,288042,62);Z=x;x=0;if(Z&1){Q=75;break c}x=0;xa(885,b|0,z|0);Z=x;x=0;if(Z&1){Q=86;break c}K2a(z)}while(0);Z=k[b>>2]|0;_=k[Z+80>>2]|0;if((_|0)==(H|0)){Q=93;break b}if((_|0)!=24){Y=_;continue}x=0;Ba(619,Z|0)|0;Z=x;x=0;if(Z&1){Q=75;break}Y=k[(k[b>>2]|0)+80>>2]|0}if((Q|0)==75){Y=Hc()|0;$=Y;aa=M;Q=77;break b}else if((Q|0)==78){Y=Hc()|0;ba=Y;ca=M;Q=79;break}else if((Q|0)==80){Y=Hc()|0;da=Y;ea=M;break}else if((Q|0)==86){Y=Hc()|0;Z=M;K2a(z);fa=Y;ga=Z;break b}}else{Z=I;d:while(1){do if((Z|0)==24|(Z|0)==(H|0)){k[A>>2]=0;k[U>>2]=0;Y=k[T>>2]|0;if(Y>>>0<(k[V>>2]|0)>>>0){k[Y>>2]=0;k[Y+4>>2]=0;k[A>>2]=0;k[U>>2]=0;k[T>>2]=Y+8;break}x=0;xa(906,u|0,A|0);Y=x;x=0;if(Y&1){Q=87;break d}Y=k[U>>2]|0;if(Y)j0a(Y)}else{k[y>>2]=0;k[W>>2]=0;x=0;fb(382,w|0,b|0,y|0);Y=x;x=0;if(Y&1){Q=65;break d}Y=k[T>>2]|0;if(Y>>>0<(k[V>>2]|0)>>>0){k[Y>>2]=k[w>>2];k[Y+4>>2]=k[X>>2];k[w>>2]=0;k[X>>2]=0;k[T>>2]=Y+8;break}x=0;xa(906,u|0,w|0);Y=x;x=0;if(Y&1){Q=66;break d}Y=k[X>>2]|0;if(Y)j0a(Y)}while(0);Y=k[b>>2]|0;_=k[Y+80>>2]|0;if((_|0)==(H|0)){Q=93;break b}if((_|0)!=24){Z=_;continue}x=0;Ba(619,Y|0)|0;Y=x;x=0;if(Y&1){Q=67;break}Z=k[(k[b>>2]|0)+80>>2]|0}if((Q|0)==65){Z=Hc()|0;ba=Z;ca=M;Q=79;break}else if((Q|0)==66){Z=Hc()|0;da=Z;ea=M;break}else if((Q|0)==67){Z=Hc()|0;$=Z;aa=M;Q=77;break b}else if((Q|0)==87){Z=Hc()|0;Y=M;_=k[U>>2]|0;if(!_){fa=Z;ga=Y;break b}j0a(_);fa=Z;ga=Y;break b}}while(0);if((Q|0)==79){fa=ba;ga=ca;break}U=k[X>>2]|0;if(!U){fa=da;ga=ea}else{j0a(U);fa=da;ga=ea}}else Q=93;while(0);if((Q|0)==93){x=0;I=Ba(618,k[d>>2]|0)|0;N=x;x=0;do if(!(N&1)?(U=d+8|0,k[U>>2]=I,x=0,xa(884,b|0,H|0),V=x,x=0,!(V&1)):0){if((k[U>>2]|0)<0){x=0;V=Ba(618,k[d>>2]|0)|0;W=x;x=0;if(W&1)break;k[U>>2]=V}x=0;nb(171,B|0,G|0,u|0,v|0);V=x;x=0;if(!(V&1)){k[a>>2]=k[B>>2];V=B+4|0;k[a+4>>2]=k[V>>2];k[B>>2]=0;k[V>>2]=0;V=k[u>>2]|0;if(V){U=k[T>>2]|0;if((U|0)==(V|0))ha=V;else{W=U;while(1){U=W+-8|0;k[T>>2]=U;Y=k[W+-4>>2]|0;if(!Y)ia=U;else{j0a(Y);ia=k[T>>2]|0}if((ia|0)==(V|0))break;else W=ia}ha=k[u>>2]|0}OBa(ha)}Q=129;break a}}while(0);H=Hc()|0;$=H;aa=M;Q=77}if((Q|0)==77){fa=$;ga=aa}H=k[u>>2]|0;if(!H){O=ga;P=fa;Q=134}else{I=k[T>>2]|0;if((I|0)==(H|0))ja=H;else{N=I;while(1){I=N+-8|0;k[T>>2]=I;W=k[N+-4>>2]|0;if(!W)ka=I;else{j0a(W);ka=k[T>>2]|0}if((ka|0)==(H|0))break;else N=ka}ja=k[u>>2]|0}OBa(ja);O=ga;P=fa;Q=134}}else Q=132;break}default:{if((J+-98|0)>>>0>=14){x=0;fb(140,F|0,288105,28);N=x;x=0;if(N&1){Q=132;break a}x=0;xa(883,b|0,F|0);N=x;x=0;if(N&1){N=Hc()|0;H=M;K2a(F);O=H;P=N;Q=134;break a}else{K2a(F);R=0;S=0;Q=128;break a}}k[C>>2]=k[L+112>>2];k[D>>2]=k[L+116>>2];x=0;nb(130,E|0,J|0,C|0,D|0);N=x;x=0;if(!(N&1)){N=d+8|0;if((k[N>>2]|0)<0){x=0;H=Ba(618,k[d>>2]|0)|0;T=x;x=0;if(T&1){Q=132;break a}k[N>>2]=H}x=0;H=Ba(563,48)|0;N=x;x=0;if(!(N&1)){k[H+4>>2]=0;k[H+8>>2]=0;k[H>>2]=44776;N=H+12|0;x=0;xa(769,N|0,G|0);T=x;x=0;if(T&1){T=Hc()|0;W=M;c0a(H);OBa(H);O=W;P=T;Q=134;break a}k[N>>2]=36504;T=H+36|0;k[T>>2]=k[E>>2];k[T+4>>2]=k[E+4>>2];k[T+8>>2]=k[E+8>>2];x=0;Ba(619,k[b>>2]|0)|0;T=x;x=0;if(T&1){T=Hc()|0;W=M;j0a(H);O=W;P=T;Q=134;break a}else{R=N;S=H;Q=128;break a}}else Q=132}else Q=132}}while(0);do if((Q|0)==32){x=0;E=Ba(618,b|0)|0;G=x;x=0;if(!(G&1)?(k[d+8>>2]=E,x=0,xa(887,q|0,b|0),E=x,x=0,!(E&1)):0){x=0;nb(170,p|0,d|0,e|0,q|0);E=x;x=0;if(E&1){E=Hc()|0;G=M;D=k[q+4>>2]|0;if(!D){O=G;P=E;Q=134;break}j0a(D);O=G;P=E;Q=134;break}else{E=k[p>>2]|0;G=p+4|0;D=k[G>>2]|0;k[p>>2]=0;k[G>>2]=0;G=k[q+4>>2]|0;if(!G){R=E;S=D;Q=128;break}j0a(G);R=E;S=D;Q=128;break}}else Q=132}while(0);if((Q|0)==128){k[a>>2]=R;k[a+4>>2]=S;Q=129}else if((Q|0)==132){S=Hc()|0;O=M;P=S;Q=134}if((Q|0)==129){S=k[K>>2]|0;if(!S){r=c;return}j0a(S);r=c;return}else if((Q|0)==134){Q=k[K>>2]|0;if(!Q)Sc(P|0);j0a(Q);Sc(P|0)}}function Rta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+48|0;d=c+32|0;e=c+24|0;f=c+16|0;g=c;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;x=0;do if((k[(k[b>>2]|0)+80>>2]|0)==5){vya(b,5);h=x;x=0;if(!(h&1)){h=a+16|0;i=a+20|0;j=d+4|0;l=f+4|0;m=a+4|0;n=a+8|0;o=e+4|0;p=a+12|0;while(1){if((k[(k[b>>2]|0)+80>>2]|0)==6){q=28;break}x=0;xa(888,d|0,b|0);s=x;x=0;if(s&1){q=20;break}s=k[h>>2]|0;if(s>>>0>=(k[i>>2]|0)>>>0){x=0;xa(914,p|0,d|0);t=x;x=0;if(t&1){q=23;break}t=k[j>>2]|0;if(t)j0a(t)}else{k[s>>2]=k[d>>2];k[s+4>>2]=k[j>>2];k[d>>2]=0;k[j>>2]=0;k[h>>2]=s+8}x=0;xa(884,b|0,7);s=x;x=0;if(s&1){q=20;break}k[f>>2]=0;k[l>>2]=0;x=0;fb(382,e|0,b|0,f|0);s=x;x=0;if(s&1){q=25;break}s=k[m>>2]|0;if(s>>>0>=(k[n>>2]|0)>>>0){x=0;xa(906,a|0,e|0);t=x;x=0;if(t&1){q=26;break}t=k[o>>2]|0;if(t)j0a(t)}else{k[s>>2]=k[e>>2];k[s+4>>2]=k[o>>2];k[e>>2]=0;k[o>>2]=0;k[m>>2]=s+8}if((k[(k[b>>2]|0)+80>>2]|0)!=24){q=28;break}x=0;xa(884,b|0,24);s=x;x=0;if(s&1){q=20;break}}if((q|0)==20){m=Hc()|0;u=m;v=M;q=22;break}else if((q|0)==23){m=Hc()|0;n=M;l=k[j>>2]|0;if(!l){w=n;y=m;break}j0a(l);w=n;y=m;break}else if((q|0)==25){m=Hc()|0;w=M;y=m;break}else if((q|0)==26){m=Hc()|0;n=M;l=k[o>>2]|0;if(!l){w=n;y=m;break}j0a(l);w=n;y=m;break}else if((q|0)==28){x=0;xa(884,b|0,6);m=x;x=0;if(m&1){q=21;break}r=c;return}}else q=21}else{sta(g,b);m=x;x=0;if(m&1)q=21;else{m=k[a>>2]|0;if(!m){z=a+4|0;A=a+8|0}else{n=a+4|0;l=k[n>>2]|0;if((l|0)==(m|0))B=m;else{h=l;while(1){l=h+-8|0;k[n>>2]=l;p=k[h+-4>>2]|0;if(!p)C=l;else{j0a(p);C=k[n>>2]|0}if((C|0)==(m|0))break;else h=C}B=k[a>>2]|0}OBa(B);h=a+8|0;k[h>>2]=0;k[n>>2]=0;k[a>>2]=0;z=n;A=h}k[a>>2]=k[g>>2];h=g+4|0;k[z>>2]=k[h>>2];m=g+8|0;k[A>>2]=k[m>>2];k[m>>2]=0;k[h>>2]=0;k[g>>2]=0;r=c;return}}while(0);if((q|0)==21){c=Hc()|0;u=c;v=M;q=22}if((q|0)==22){w=v;y=u}u=a+12|0;v=k[u>>2]|0;if(v){w=a+16|0;q=k[w>>2]|0;if((q|0)==(v|0))D=v;else{c=q;while(1){q=c+-8|0;k[w>>2]=q;g=k[c+-4>>2]|0;if(!g)E=q;else{j0a(g);E=k[w>>2]|0}if((E|0)==(v|0))break;else c=E}D=k[u>>2]|0}OBa(D)}D=k[a>>2]|0;if(!D)Sc(y|0);u=a+4|0;E=k[u>>2]|0;if((E|0)==(D|0))F=D;else{c=E;while(1){E=c+-8|0;k[u>>2]=E;v=k[c+-4>>2]|0;if(!v)G=E;else{j0a(v);G=k[u>>2]|0}if((G|0)==(D|0))break;else c=G}F=k[a>>2]|0}OBa(F);Sc(y|0)}function Sta(){k[11430]=0;k[11431]=0;k[11432]=0;return}function Tta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function Uta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=KBa(48)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=45700;e=d+12|0;x=0;xa(769,e|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;f=M;c0a(d);g=f;h=b;OBa(d);Sc(h|0)}k[e>>2]=35092;x=0;xa(869,d+36|0,c|0);c=x;x=0;if(!(c&1)){k[a>>2]=e;k[a+4>>2]=d;return}a=Hc()|0;c=M;$4(e);c0a(d);g=c;h=a;OBa(d);Sc(h|0)}function Vta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function Wta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f4(a,b);k[a>>2]=35120;b=a+24|0;x=0;xa(785,b|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;e=M;f=c;$4(a);Sc(f|0)}x=0;xa(761,a+36|0,d|0);d=x;x=0;if(!(d&1))return;d=Hc()|0;c=M;g=k[b>>2]|0;if(!g){e=c;f=d;$4(a);Sc(f|0)}b=a+28|0;h=k[b>>2]|0;if((h|0)!=(g|0))k[b>>2]=h+(~((h+-4-g|0)>>>2)<<2);OBa(g);e=c;f=d;$4(a);Sc(f|0)}function Xta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>4)+1|0;if(e>>>0>268435455){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>4>>>0<134217727){i=h>>3;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>4;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=268435455;q=e;r=e-f>>4;s=6}if((s|0)==6){l=p;m=KBa(p<<4)|0;n=r;o=q}q=m+(n<<4)|0;r=q;p=m+(l<<4)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<4)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=b+8|0;k[m+(n<<4)+8>>2]=k[l>>2];s=b+12|0;k[m+(n<<4)+12>>2]=k[s>>2];k[l>>2]=0;k[s>>2]=0;s=q+16|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-16|0;k[o+-16>>2]=k[f>>2];l=r+-12|0;k[o+-12>>2]=k[l>>2];k[f>>2]=0;k[l>>2]=0;l=r+-8|0;k[o+-8>>2]=k[l>>2];n=r+-4|0;k[o+-4>>2]=k[n>>2];k[l>>2]=0;k[n>>2]=0;o=q+-16|0;n=o;if((f|0)==(d|0)){v=n;break}else q=n}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=s;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;if(t)j0a(t);t=k[g+-12>>2]|0;g=g+-16|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function Yta(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f4(a,b);k[a>>2]=33328;k[a+24>>2]=k[d>>2];b=a+28|0;f=k[d+4>>2]|0;k[b>>2]=f;if(f)h0a(f);k[a+32>>2]=0;k[a+36>>2]=0;k[a>>2]=35148;k[a+40>>2]=k[c>>2];f=a+44|0;d=k[c+4>>2]|0;k[f>>2]=d;if(d)h0a(d);x=0;xa(915,a+48|0,e|0);e=x;x=0;if(!(e&1))return;e=Hc()|0;d=k[f>>2]|0;if(d)j0a(d);k[a>>2]=33328;d=k[b>>2]|0;if(!d){$4(a);Sc(e|0)}j0a(d);$4(a);Sc(e|0)}function Zta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function _ta(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;f4(a,b);k[a>>2]=33328;k[a+24>>2]=k[c>>2];b=a+28|0;h=k[c+4>>2]|0;k[b>>2]=h;if(h)h0a(h);k[a+32>>2]=0;k[a+36>>2]=0;k[a+40>>2]=k[d>>2];h=a+44|0;c=k[d+4>>2]|0;k[h>>2]=c;if(c)h0a(c);k[a>>2]=35196;c=a+48|0;x=0;xa(916,c|0,e|0);e=x;x=0;if(!(e&1)){x=0;xa(869,a+60|0,f|0);f=x;x=0;if(!(f&1)){i[a+72>>0]=g&1;g=a+76|0;f=g+48|0;do{k[g>>2]=0;g=g+4|0}while((g|0)<(f|0));return}g=Hc()|0;f=M;e=k[c>>2]|0;if(!e){j=f;l=g}else{d=a+52|0;m=k[d>>2]|0;if((m|0)==(e|0))n=e;else{o=m;while(1){m=o+-8|0;k[d>>2]=m;p=k[o+-4>>2]|0;if(!p)q=m;else{j0a(p);q=k[d>>2]|0}if((q|0)==(e|0))break;else o=q}n=k[c>>2]|0}OBa(n);j=f;l=g}}else{g=Hc()|0;j=M;l=g}g=k[h>>2]|0;if(g)j0a(g);k[a>>2]=33328;g=k[b>>2]|0;if(!g){$4(a);Sc(l|0)}j0a(g);$4(a);Sc(l|0)}function $ta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=b+8|0;if((k[d>>2]|0)<0){e=uya(k[b>>2]|0)|0;k[d>>2]=e}e=KBa(44)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45672;d=e+12|0;x=0;xa(769,d|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[d>>2]=36476;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(!b){f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}h0a(b);f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}function aua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;e=r;r=r+16|0;f=e;g=KBa(56)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=45644;h=g+12|0;x=0;xa(917,f|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;i=M;j=d;c0a(g);OBa(g);Sc(j|0)}x=0;xa(769,h|0,b|0);b=x;x=0;do if(b&1){d=Hc()|0;l=M;m=d}else{k[h>>2]=35244;k[g+36>>2]=k[c>>2];d=g+40|0;n=k[c+4>>2]|0;k[d>>2]=n;if(n)h0a(n);x=0;xa(917,g+44|0,f|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=k[d>>2]|0;if(p)j0a(p);$4(h);l=o;m=n;break}n=k[f>>2]|0;if(!n){q=a+4|0;k[a>>2]=h;k[q>>2]=g;r=e;return}o=f+4|0;p=k[o>>2]|0;if((p|0)==(n|0))s=n;else{d=p;while(1){p=d+-8|0;k[o>>2]=p;t=k[d+-4>>2]|0;if(!t)u=p;else{j0a(t);u=k[o>>2]|0}if((u|0)==(n|0))break;else d=u}s=k[f>>2]|0}OBa(s);q=a+4|0;k[a>>2]=h;k[q>>2]=g;r=e;return}while(0);e=k[f>>2]|0;if(!e){i=l;j=m;c0a(g);OBa(g);Sc(j|0)}q=f+4|0;h=k[q>>2]|0;if((h|0)==(e|0))v=e;else{a=h;while(1){h=a+-8|0;k[q>>2]=h;s=k[a+-4>>2]|0;if(!s)w=h;else{j0a(s);w=k[q>>2]|0}if((w|0)==(e|0))break;else a=w}v=k[f>>2]|0}OBa(v);i=l;j=m;c0a(g);OBa(g);Sc(j|0)}function bua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function cua(a,b,c,d,e,f,g,h,j,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;var o=0;f4(a,b);k[a>>2]=33328;k[a+24>>2]=k[c>>2];b=a+28|0;o=k[c+4>>2]|0;k[b>>2]=o;if(o)h0a(o);k[a+32>>2]=d;d=a+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[a>>2]=37064;k[a+52>>2]=k[g>>2];d=a+56|0;o=k[g+4>>2]|0;k[d>>2]=o;if(o)h0a(o);k[a+60>>2]=k[l>>2];o=a+64|0;g=k[l+4>>2]|0;k[o>>2]=g;if(g)h0a(g);k[a+68>>2]=k[f>>2];g=a+72|0;l=k[f+4>>2]|0;k[g>>2]=l;if(l)h0a(l);i[a+76>>0]=(k[n>>2]|0)!=0&1;k[a>>2]=35472;i[a+77>>0]=e&1;i[a+78>>0]=h&1;i[a+79>>0]=m&1;x=0;xa(918,a+80|0,j|0);j=x;x=0;if(!(j&1)){k[a+92>>2]=k[n>>2];j=k[n+4>>2]|0;k[a+96>>2]=j;if(!j)return;h0a(j);return}j=Hc()|0;n=k[g>>2]|0;if(n)j0a(n);k[a>>2]=37064;n=k[o>>2]|0;if(n)j0a(n);n=k[d>>2]|0;if(n)j0a(n);n=k[a+40>>2]|0;d=n;if(n){o=a+44|0;g=k[o>>2]|0;if((g|0)!=(n|0))k[o>>2]=g+(~((g+-4-d|0)>>>2)<<2);OBa(n)}k[a>>2]=33328;n=k[b>>2]|0;if(!n){$4(a);Sc(j|0)}j0a(n);$4(a);Sc(j|0)}function dua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function eua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=KBa(64)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45616;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;g=M;c0a(e);h=g;i=b;OBa(e);Sc(i|0)}k[f>>2]=33328;k[e+36>>2]=k[c>>2];b=e+40|0;g=k[c+4>>2]|0;k[b>>2]=g;if(g)h0a(g);k[e+44>>2]=0;k[e+48>>2]=0;k[f>>2]=35300;x=0;xa(759,e+52|0,d|0);d=x;x=0;if(!(d&1)){k[a>>2]=f;k[a+4>>2]=e;return}a=Hc()|0;d=M;k[f>>2]=33328;g=k[b>>2]|0;if(g)j0a(g);$4(f);c0a(e);h=d;i=a;OBa(e);Sc(i|0)}function fua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function gua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=KBa(64)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45588;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;g=M;c0a(e);h=g;i=b;OBa(e);Sc(i|0)}k[f>>2]=33328;k[e+36>>2]=k[c>>2];b=e+40|0;g=k[c+4>>2]|0;k[b>>2]=g;if(g)h0a(g);k[e+44>>2]=0;k[e+48>>2]=0;k[f>>2]=35348;x=0;xa(919,e+52|0,d|0);d=x;x=0;if(!(d&1)){k[a>>2]=f;k[a+4>>2]=e;return}a=Hc()|0;d=M;k[f>>2]=33328;g=k[b>>2]|0;if(g)j0a(g);$4(f);c0a(e);h=d;i=a;OBa(e);Sc(i|0)}function hua(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=KBa(76)|0;k[m+4>>2]=0;k[m+8>>2]=0;k[m>>2]=45084;n=m+12|0;o=k[e>>2]|0;p=k[e+4>>2]|0;e=(p|0)==0;if(!e)h0a(p);q=k[f>>2]|0;f=i[g>>0]|0;g=i[h>>0]|0;h=i[j>>0]|0;j=k[l>>2]|0;x=0;xa(769,n|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;if(e){c0a(m);OBa(m);Sc(b|0)}j0a(p);c0a(m);OBa(m);Sc(b|0)}k[n>>2]=33328;k[m+36>>2]=k[d>>2];b=k[d+4>>2]|0;k[m+40>>2]=b;if(b)h0a(b);k[m+44>>2]=q;k[m+48>>2]=0;k[n>>2]=35520;k[m+52>>2]=k[c>>2];q=k[c+4>>2]|0;k[m+56>>2]=q;if(q)h0a(q);k[m+60>>2]=o;k[m+64>>2]=p;if(e){i[m+68>>0]=f;i[m+69>>0]=g;i[m+70>>0]=h;k[m+72>>2]=j;r=a+4|0;k[a>>2]=n;k[r>>2]=m;return}else{h0a(p);i[m+68>>0]=f;i[m+69>>0]=g;i[m+70>>0]=h;k[m+72>>2]=j;j0a(p);r=a+4|0;k[a>>2]=n;k[r>>2]=m;return}}function iua(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0;g=KBa(92)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=45560;h=g+12|0;j=i[f>>0]|0;x=0;xa(769,h|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(g);OBa(g);Sc(b|0)}k[h>>2]=33328;k[g+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[g+40>>2]=b;if(b)h0a(b);b=g+44|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[h>>2]=37064;k[g+64>>2]=k[e>>2];b=k[e+4>>2]|0;k[g+68>>2]=b;if(b)h0a(b);k[g+72>>2]=0;k[g+76>>2]=0;k[g+80>>2]=k[d>>2];b=k[d+4>>2]|0;k[g+84>>2]=b;if(!b){k[h>>2]=35644;l=g+88|0;i[l>>0]=j;m=a+4|0;k[a>>2]=h;k[m>>2]=g;return}h0a(b);k[h>>2]=35644;l=g+88|0;i[l>>0]=j;m=a+4|0;k[a>>2]=h;k[m>>2]=g;return}function jua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45532;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[f>>2]=35272;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[e+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[e+48>>2]=b;if(!b){g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}h0a(b);g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}function kua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=KBa(48)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=45504;e=d+12|0;x=0;xa(769,e|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;f=M;c0a(d);g=f;h=b;OBa(d);Sc(h|0)}k[e>>2]=35748;x=0;xa(761,d+36|0,c|0);c=x;x=0;if(!(c&1)){k[a>>2]=e;k[a+4>>2]=d;return}a=Hc()|0;c=M;$4(e);c0a(d);g=c;h=a;OBa(d);Sc(h|0)}function lua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function mua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=KBa(48)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=45448;e=d+12|0;x=0;xa(769,e|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;f=M;c0a(d);g=f;h=b;OBa(d);Sc(h|0)}k[e>>2]=35444;x=0;xa(759,d+36|0,c|0);c=x;x=0;if(!(c&1)){k[a>>2]=e;k[a+4>>2]=d;return}a=Hc()|0;c=M;$4(e);c0a(d);g=c;h=a;OBa(d);Sc(h|0)}function nua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;e=r;r=r+16|0;f=e;g=KBa(56)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=45476;h=g+12|0;x=0;xa(917,f|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;i=M;j=d;c0a(g);OBa(g);Sc(j|0)}x=0;xa(769,h|0,b|0);b=x;x=0;do if(b&1){d=Hc()|0;l=M;m=d}else{k[h>>2]=35616;k[g+36>>2]=k[c>>2];d=g+40|0;n=k[c+4>>2]|0;k[d>>2]=n;if(n)h0a(n);x=0;xa(917,g+44|0,f|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=k[d>>2]|0;if(p)j0a(p);$4(h);l=o;m=n;break}n=k[f>>2]|0;if(!n){q=a+4|0;k[a>>2]=h;k[q>>2]=g;r=e;return}o=f+4|0;p=k[o>>2]|0;if((p|0)==(n|0))s=n;else{d=p;while(1){p=d+-8|0;k[o>>2]=p;t=k[d+-4>>2]|0;if(!t)u=p;else{j0a(t);u=k[o>>2]|0}if((u|0)==(n|0))break;else d=u}s=k[f>>2]|0}OBa(s);q=a+4|0;k[a>>2]=h;k[q>>2]=g;r=e;return}while(0);e=k[f>>2]|0;if(!e){i=l;j=m;c0a(g);OBa(g);Sc(j|0)}q=f+4|0;h=k[q>>2]|0;if((h|0)==(e|0))v=e;else{a=h;while(1){h=a+-8|0;k[q>>2]=h;s=k[a+-4>>2]|0;if(!s)w=h;else{j0a(s);w=k[q>>2]|0}if((w|0)==(e|0))break;else a=w}v=k[f>>2]|0}OBa(v);i=l;j=m;c0a(g);OBa(g);Sc(j|0)}function oua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=KBa(48)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=45448;e=d+12|0;x=0;xa(769,e|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;f=M;c0a(d);g=f;h=b;OBa(d);Sc(h|0)}k[e>>2]=35444;x=0;xa(759,d+36|0,c|0);c=x;x=0;if(!(c&1)){k[a>>2]=e;k[a+4>>2]=d;return}a=Hc()|0;c=M;$4(e);c0a(d);g=c;h=a;OBa(d);Sc(h|0)}function pua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function qua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=KBa(56)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45420;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;g=M;c0a(e);h=g;i=b;OBa(e);Sc(i|0)}k[e+36>>2]=k[c>>2];b=e+40|0;g=k[c+4>>2]|0;k[b>>2]=g;if(g)h0a(g);k[f>>2]=35888;x=0;xa(920,e+44|0,d|0);d=x;x=0;if(!(d&1)){k[a>>2]=f;k[a+4>>2]=e;return}a=Hc()|0;d=M;g=k[b>>2]|0;if(g)j0a(g);$4(f);c0a(e);h=d;i=a;OBa(e);Sc(i|0)}function rua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=b+8|0;if((k[d>>2]|0)<0){e=uya(k[b>>2]|0)|0;k[d>>2]=e}e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45392;d=e+12|0;x=0;xa(769,d|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[d>>2]=33328;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(!b){f=e+44|0;k[f>>2]=0;g=e+48|0;k[g>>2]=0;k[d>>2]=35396;h=a+4|0;k[a>>2]=d;k[h>>2]=e;return}h0a(b);f=e+44|0;k[f>>2]=0;g=e+48|0;k[g>>2]=0;k[d>>2]=35396;h=a+4|0;k[a>>2]=d;k[h>>2]=e;return}function sua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45056;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[f>>2]=35804;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[e+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[e+48>>2]=b;if(!b){g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}h0a(b);g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}function tua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=r;r=r+16|0;g=f;f4(a,b);k[a>>2]=36252;k[a+24>>2]=k[c>>2];b=a+28|0;h=k[c+4>>2]|0;k[b>>2]=h;if(h)h0a(h);k[a+32>>2]=d;k[a+36>>2]=k[e>>2];h=a+40|0;c=k[e+4>>2]|0;k[h>>2]=c;if(c)h0a(c);x=0;fb(140,g|0,329672,0);c=x;x=0;do if(!(c&1)){x=0;pa(57,(d+-12|0)>>>0<12|0,g|0,1226,288536,290472);e=x;x=0;if(e&1){e=Hc()|0;i=M;K2a(g);j=i;l=e;break}else{K2a(g);r=f;return}}else{e=Hc()|0;j=M;l=e}while(0);j=k[h>>2]|0;if(j)j0a(j);j=k[b>>2]|0;if(!j){$4(a);Sc(l|0)}j0a(j);$4(a);Sc(l|0)}function uua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=KBa(60)|0;k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=45364;g=f+12|0;x=0;xa(769,g|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(f);OBa(f);Sc(b|0)}k[g>>2]=36224;k[f+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[f+40>>2]=b;if(b)h0a(b);k[f+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[f+48>>2]=b;if(b)h0a(b);k[f+52>>2]=k[e>>2];b=k[e+4>>2]|0;k[f+56>>2]=b;if(!b){h=a+4|0;k[a>>2]=g;k[h>>2]=f;return}h0a(b);h=a+4|0;k[a>>2]=g;k[h>>2]=f;return}function vua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45336;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[f>>2]=35776;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[e+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[e+48>>2]=b;if(!b){g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}h0a(b);g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}function wua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=b+8|0;if((k[d>>2]|0)<0){e=uya(k[b>>2]|0)|0;k[d>>2]=e}e=KBa(44)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45308;d=e+12|0;x=0;xa(769,d|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(!b){k[d>>2]=36028;f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}h0a(b);k[d>>2]=36028;f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}function xua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=b+8|0;if((k[d>>2]|0)<0){e=uya(k[b>>2]|0)|0;k[d>>2]=e}e=KBa(44)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45280;d=e+12|0;x=0;xa(769,d|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(!b){k[d>>2]=36056;f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}h0a(b);k[d>>2]=36056;f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}function yua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45252;f=e+12|0;g=k[d>>2]|0;h=k[d+4>>2]|0;d=(h|0)==0;if(!d)h0a(h);x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;if(d){c0a(e);OBa(e);Sc(b|0)}j0a(h);c0a(e);OBa(e);Sc(b|0)}k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[f>>2]=36084;k[e+44>>2]=g;k[e+48>>2]=h;if(d){i=a+4|0;k[a>>2]=f;k[i>>2]=e;return}h0a(h);j0a(h);i=a+4|0;k[a>>2]=f;k[i>>2]=e;return}function zua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=b+8|0;if((k[d>>2]|0)<0){e=uya(k[b>>2]|0)|0;k[d>>2]=e}e=KBa(44)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45224;d=e+12|0;x=0;xa(769,d|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(!b){k[d>>2]=36112;f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}h0a(b);k[d>>2]=36112;f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}function Aua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=b+8|0;if((k[d>>2]|0)<0){e=uya(k[b>>2]|0)|0;k[d>>2]=e}e=KBa(44)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45196;d=e+12|0;x=0;xa(769,d|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(!b){k[d>>2]=35916;f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}h0a(b);k[d>>2]=35916;f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}function Bua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=KBa(60)|0;k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=45168;g=f+12|0;x=0;xa(769,g|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(f);OBa(f);Sc(b|0)}k[f+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[f+40>>2]=b;if(b)h0a(b);k[g>>2]=35972;k[f+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[f+48>>2]=b;if(b)h0a(b);k[f+52>>2]=k[e>>2];b=k[e+4>>2]|0;k[f+56>>2]=b;if(!b){h=a+4|0;k[a>>2]=g;k[h>>2]=f;return}h0a(b);h=a+4|0;k[a>>2]=g;k[h>>2]=f;return}function Cua(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;f4(a,b);k[a+24>>2]=k[c>>2];b=k[c+4>>2]|0;k[a+28>>2]=b;if(b)h0a(b);k[a>>2]=36e3;k[a+32>>2]=k[d>>2];b=k[d+4>>2]|0;k[a+36>>2]=b;if(b)h0a(b);k[a+40>>2]=k[e>>2];b=k[e+4>>2]|0;k[a+44>>2]=b;if(b)h0a(b);k[a+48>>2]=k[f>>2];b=k[f+4>>2]|0;k[a+52>>2]=b;if(b)h0a(b);k[a+56>>2]=k[g>>2];b=k[g+4>>2]|0;k[a+60>>2]=b;if(!b)return;h0a(b);return}function Dua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45140;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[f>>2]=35860;k[e+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[e+48>>2]=b;if(!b){g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}h0a(b);g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}function Eua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function Fua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/24|0)+1|0;if(e>>>0>178956970){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=((k[g>>2]|0)-f|0)/24|0;if(h>>>0<89478485){i=h<<1;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=(i-f|0)/24|0;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=178956970;q=e;r=(e-f|0)/24|0;s=6}if((s|0)==6){l=p;m=KBa(p*24|0)|0;n=r;o=q}q=m+(n*24|0)|0;r=q;p=m+(l*24|0)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n*24|0)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;k[m+(n*24|0)+8>>2]=k[b+8>>2];k[m+(n*24|0)+12>>2]=k[b+12>>2];l=b+16|0;k[m+(n*24|0)+16>>2]=k[l>>2];s=b+20|0;k[m+(n*24|0)+20>>2]=k[s>>2];k[l>>2]=0;k[s>>2]=0;s=q+24|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-24|0;k[o+-24>>2]=k[f>>2];l=r+-20|0;k[o+-20>>2]=k[l>>2];k[f>>2]=0;k[l>>2]=0;k[o+-16>>2]=k[r+-16>>2];k[o+-12>>2]=k[r+-12>>2];l=r+-8|0;k[o+-8>>2]=k[l>>2];n=r+-4|0;k[o+-4>>2]=k[n>>2];k[l>>2]=0;k[n>>2]=0;o=q+-24|0;n=o;if((f|0)==(d|0)){v=n;break}else q=n}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=s;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;if(t)j0a(t);t=k[g+-20>>2]|0;g=g+-24|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function Gua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45112;f=e+12|0;g=k[d>>2]|0;h=k[d+4>>2]|0;d=(h|0)==0;if(!d)h0a(h);x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;if(d){c0a(e);OBa(e);Sc(b|0)}j0a(h);c0a(e);OBa(e);Sc(b|0)}k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[f>>2]=36168;k[e+44>>2]=g;k[e+48>>2]=h;if(d){i=a+4|0;k[a>>2]=f;k[i>>2]=e;return}h0a(h);j0a(h);i=a+4|0;k[a>>2]=f;k[i>>2]=e;return}function Hua(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0;g=KBa(76)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=45084;h=g+12|0;j=k[e>>2]|0;l=e+4|0;m=k[l>>2]|0;k[e>>2]=0;k[l>>2]=0;l=k[f>>2]|0;x=0;xa(769,h|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;if(!m){c0a(g);OBa(g);Sc(b|0)}j0a(m);c0a(g);OBa(g);Sc(b|0)}k[h>>2]=33328;k[g+36>>2]=k[d>>2];b=k[d+4>>2]|0;k[g+40>>2]=b;if(b)h0a(b);k[g+44>>2]=l;k[g+48>>2]=0;k[h>>2]=35520;k[g+52>>2]=k[c>>2];l=k[c+4>>2]|0;k[g+56>>2]=l;if(l)h0a(l);k[g+60>>2]=j;j=m;k[g+64>>2]=j;if(!m){i[g+68>>0]=0;i[g+69>>0]=0;i[g+70>>0]=0;k[g+72>>2]=0;n=a+4|0;k[a>>2]=h;k[n>>2]=g;return}else{h0a(j);i[g+68>>0]=0;i[g+69>>0]=0;i[g+70>>0]=0;k[g+72>>2]=0;j0a(j);n=a+4|0;k[a>>2]=h;k[n>>2]=g;return}}function Iua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f4(a,b);k[a+24>>2]=k[c>>2];b=a+28|0;f=k[c+4>>2]|0;k[b>>2]=f;if(f)h0a(f);k[a>>2]=36140;x=0;xa(759,a+32|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;f=k[b>>2]|0;if(!f){$4(a);Sc(d|0)}j0a(f);$4(a);Sc(d|0)}else{k[a+44>>2]=k[e>>2];d=k[e+4>>2]|0;k[a+48>>2]=d;if(!d)return;h0a(d);return}}function Jua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45056;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[f>>2]=35804;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[e+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[e+48>>2]=b;if(!b){g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}h0a(b);g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}function Kua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45028;f=e+12|0;g=k[c>>2]|0;h=k[c+4>>2]|0;c=(h|0)==0;if(!c)h0a(h);x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;if(c){c0a(e);OBa(e);Sc(b|0)}j0a(h);c0a(e);OBa(e);Sc(b|0)}k[f>>2]=36420;k[e+36>>2]=g;k[e+40>>2]=h;if(!c)h0a(h);k[e+44>>2]=k[d>>2];g=k[d+4>>2]|0;k[e+48>>2]=g;if(g)h0a(g);if(c){i=a+4|0;k[a>>2]=f;k[i>>2]=e;return}j0a(h);i=a+4|0;k[a>>2]=f;k[i>>2]=e;return}function Lua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=44972;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[f>>2]=36448;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[e+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[e+48>>2]=b;if(!b){g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}h0a(b);g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}function Mua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=r;r=r+16|0;g=f;f4(a,b);k[a>>2]=36336;k[a+24>>2]=k[c>>2];b=a+28|0;h=k[c+4>>2]|0;k[b>>2]=h;if(h)h0a(h);k[a+32>>2]=d;k[a+36>>2]=k[e>>2];h=a+40|0;c=k[e+4>>2]|0;k[h>>2]=c;if(c)h0a(c);x=0;fb(140,g|0,329672,0);c=x;x=0;do if(!(c&1)){x=0;pa(57,(d+-24|0)>>>0<15|(d+-39|0)>>>0<6|0,g|0,1319,288536,288803);e=x;x=0;if(e&1){e=Hc()|0;i=M;K2a(g);j=i;l=e;break}else{K2a(g);r=f;return}}else{e=Hc()|0;j=M;l=e}while(0);j=k[h>>2]|0;if(j)j0a(j);j=k[b>>2]|0;if(!j){$4(a);Sc(l|0)}j0a(j);$4(a);Sc(l|0)}function Nua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0;f=r;r=r+16|0;g=f;f4(a,b);k[a>>2]=36308;k[a+24>>2]=c;k[a+28>>2]=k[d>>2];b=a+32|0;h=k[d+4>>2]|0;k[b>>2]=h;if(h)h0a(h);i[a+36>>0]=e&1;e=c+-33|0;if(e>>>0<17)j=(126979>>>(e&131071)&1|0)!=0;else j=0;x=0;fb(140,g|0,329672,0);e=x;x=0;do if(!(e&1)){x=0;pa(57,j|0,g|0,1289,288536,288578);c=x;x=0;if(c&1){c=Hc()|0;h=M;K2a(g);l=h;m=c;break}else{K2a(g);r=f;return}}else{c=Hc()|0;l=M;m=c}while(0);l=k[b>>2]|0;if(!l){$4(a);Sc(m|0)}j0a(l);$4(a);Sc(m|0)}function Oua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=b+8|0;if((k[d>>2]|0)<0){e=uya(k[b>>2]|0)|0;k[d>>2]=e}e=KBa(44)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=45e3;d=e+12|0;x=0;xa(769,d|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[d>>2]=36392;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(!b){f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}h0a(b);f=a+4|0;k[a>>2]=d;k[f>>2]=e;return}function Pua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=44972;f=e+12|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(e);OBa(e);Sc(b|0)}k[f>>2]=36448;k[e+36>>2]=k[c>>2];b=k[c+4>>2]|0;k[e+40>>2]=b;if(b)h0a(b);k[e+44>>2]=k[d>>2];b=k[d+4>>2]|0;k[e+48>>2]=b;if(!b){g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}h0a(b);g=a+4|0;k[a>>2]=f;k[g>>2]=e;return}function Qua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;f4(a,b);k[a>>2]=36364;k[a+24>>2]=k[c>>2];b=a+28|0;f=k[c+4>>2]|0;k[b>>2]=f;if(f)h0a(f);f=a+32|0;x=0;xa(917,f|0,d|0);d=x;x=0;if(!(d&1)){x=0;xa(921,a+44|0,e|0);e=x;x=0;if(!(e&1))return;e=Hc()|0;d=M;c=k[f>>2]|0;if(!c){g=d;h=e}else{i=a+36|0;j=k[i>>2]|0;if((j|0)==(c|0))l=c;else{m=j;while(1){j=m+-8|0;k[i>>2]=j;n=k[m+-4>>2]|0;if(!n)o=j;else{j0a(n);o=k[i>>2]|0}if((o|0)==(c|0))break;else m=o}l=k[f>>2]|0}OBa(l);g=d;h=e}}else{e=Hc()|0;g=M;h=e}e=k[b>>2]|0;if(!e){$4(a);Sc(h|0)}j0a(e);$4(a);Sc(h|0)}function Rua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b+8|0;if((k[e>>2]|0)<0){f=uya(k[b>>2]|0)|0;k[e>>2]=f}f=KBa(52)|0;k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=44944;e=f+12|0;g=k[c>>2]|0;x=0;xa(769,e|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(f);OBa(f);Sc(b|0)}k[e>>2]=36532;k[f+36>>2]=g;k[f+40>>2]=k[d>>2];g=k[d+4>>2]|0;k[f+44>>2]=g;if(!g){h=f+48|0;k[h>>2]=139;i=a+4|0;k[a>>2]=e;k[i>>2]=f;return}h0a(g);h=f+48|0;k[h>>2]=139;i=a+4|0;k[a>>2]=e;k[i>>2]=f;return}function Sua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=b+8|0;if((k[f>>2]|0)<0){g=uya(k[b>>2]|0)|0;k[f>>2]=g}g=KBa(52)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=44944;f=g+12|0;h=k[c>>2]|0;c=k[e>>2]|0;x=0;xa(769,f|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(g);OBa(g);Sc(b|0)}k[f>>2]=36532;k[g+36>>2]=h;k[g+40>>2]=k[d>>2];h=k[d+4>>2]|0;k[g+44>>2]=h;if(!h){i=g+48|0;k[i>>2]=c;j=a+4|0;k[a>>2]=f;k[j>>2]=g;return}h0a(h);i=g+48|0;k[i>>2]=c;j=a+4|0;k[a>>2]=f;k[j>>2]=g;return}function Tua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=KBa(52)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=44916;f=e+12|0;g=i[d>>0]|0;x=0;xa(769,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;d=M;c0a(e);h=d;j=b;OBa(e);Sc(j|0)}k[f>>2]=36280;x=0;xa(917,e+36|0,c|0);c=x;x=0;if(!(c&1)){i[e+48>>0]=g;k[a>>2]=f;k[a+4>>2]=e;return}a=Hc()|0;g=M;$4(f);c0a(e);h=g;j=a;OBa(e);Sc(j|0)}function Uua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function Vua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function Wua(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=44916;b=a+12|0;k[b>>2]=36280;c=a+36|0;d=k[c>>2]|0;if(!d){$4(b);c0a(a);return}e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g);$4(b);c0a(a);return}function Xua(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=44916;b=a+12|0;k[b>>2]=36280;c=a+36|0;d=k[c>>2]|0;if(!d){$4(b);c0a(a);OBa(a);return}e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g);$4(b);c0a(a);OBa(a);return}function Yua(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Zua(a){a=a|0;OBa(a);return}function _ua(a){a=a|0;var b=0,c=0;k[a>>2]=44944;b=a+12|0;k[b>>2]=36532;c=k[a+44>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function $ua(a){a=a|0;var b=0,c=0;k[a>>2]=44944;b=a+12|0;k[b>>2]=36532;c=k[a+44>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function ava(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function bva(a){a=a|0;OBa(a);return}function cva(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function dva(a){a=a|0;k[a>>2]=44888;C6(a+12|0);c0a(a);return}function eva(a){a=a|0;k[a>>2]=44888;C6(a+12|0);c0a(a);OBa(a);return}function fva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function gva(a){a=a|0;OBa(a);return}function hva(a){a=a|0;var b=0,c=0;k[a>>2]=44972;b=a+12|0;k[b>>2]=36448;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function iva(a){a=a|0;var b=0,c=0;k[a>>2]=44972;b=a+12|0;k[b>>2]=36448;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function jva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function kva(a){a=a|0;OBa(a);return}function lva(a){a=a|0;var b=0,c=0;k[a>>2]=45e3;b=a+12|0;k[b>>2]=36392;c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function mva(a){a=a|0;var b=0,c=0;k[a>>2]=45e3;b=a+12|0;k[b>>2]=36392;c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function nva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function ova(a){a=a|0;OBa(a);return}function pva(a){a=a|0;var b=0,c=0;k[a>>2]=44860;b=a+12|0;k[b>>2]=36308;c=k[a+44>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function qva(a){a=a|0;var b=0,c=0;k[a>>2]=44860;b=a+12|0;k[b>>2]=36308;c=k[a+44>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function rva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function sva(a){a=a|0;OBa(a);return}function tva(a){a=a|0;var b=0,c=0;k[a>>2]=44832;b=a+12|0;k[b>>2]=36336;c=k[a+52>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function uva(a){a=a|0;var b=0,c=0;k[a>>2]=44832;b=a+12|0;k[b>>2]=36336;c=k[a+52>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function vva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function wva(a){a=a|0;OBa(a);return}function xva(a){a=a|0;var b=0,c=0;k[a>>2]=45028;b=a+12|0;k[b>>2]=36420;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function yva(a){a=a|0;var b=0,c=0;k[a>>2]=45028;b=a+12|0;k[b>>2]=36420;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function zva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Ava(a){a=a|0;OBa(a);return}function Bva(a){a=a|0;var b=0,c=0;k[a>>2]=45056;b=a+12|0;k[b>>2]=35804;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function Cva(a){a=a|0;var b=0,c=0;k[a>>2]=45056;b=a+12|0;k[b>>2]=35804;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function Dva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Eva(a){a=a|0;OBa(a);return}function Fva(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=44804;b=a+12|0;k[b>>2]=36140;c=k[a+60>>2]|0;if(c)j0a(c);c=a+44|0;d=k[c>>2]|0;if(d){e=a+48|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);return}j0a(g);$4(b);c0a(a);return}function Gva(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=44804;b=a+12|0;k[b>>2]=36140;c=k[a+60>>2]|0;if(c)j0a(c);c=a+44|0;d=k[c>>2]|0;if(d){e=a+48|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);OBa(a);return}j0a(g);$4(b);c0a(a);OBa(a);return}function Hva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Iva(a){a=a|0;OBa(a);return}function Jva(a){a=a|0;var b=0,c=0;k[a>>2]=45084;b=a+12|0;k[b>>2]=35520;c=k[a+64>>2]|0;if(c)j0a(c);c=k[a+56>>2]|0;if(c)j0a(c);k[b>>2]=33328;c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);return}j0a(c);$4(b);c0a(a);return}function Kva(a){a=a|0;var b=0,c=0;k[a>>2]=45084;b=a+12|0;k[b>>2]=35520;c=k[a+64>>2]|0;if(c)j0a(c);c=k[a+56>>2]|0;if(c)j0a(c);k[b>>2]=33328;c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);OBa(a);return}j0a(c);$4(b);c0a(a);OBa(a);return}function Lva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Mva(a){a=a|0;OBa(a);return}function Nva(a){a=a|0;var b=0,c=0;k[a>>2]=45112;b=a+12|0;k[b>>2]=36168;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function Ova(a){a=a|0;var b=0,c=0;k[a>>2]=45112;b=a+12|0;k[b>>2]=36168;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function Pva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Qva(a){a=a|0;OBa(a);return}function Rva(a){a=a|0;k[a>>2]=44776;$4(a+12|0);c0a(a);return}function Sva(a){a=a|0;k[a>>2]=44776;$4(a+12|0);c0a(a);OBa(a);return}function Tva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Uva(a){a=a|0;OBa(a);return}function Vva(a){a=a|0;var b=0,c=0;k[a>>2]=45140;b=a+12|0;k[b>>2]=35860;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function Wva(a){a=a|0;var b=0,c=0;k[a>>2]=45140;b=a+12|0;k[b>>2]=35860;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function Xva(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Yva(a){a=a|0;OBa(a);return}function Zva(a){a=a|0;var b=0,c=0;k[a>>2]=44748;b=a+12|0;k[b>>2]=36e3;c=k[a+72>>2]|0;if(c)j0a(c);c=k[a+64>>2]|0;if(c)j0a(c);c=k[a+56>>2]|0;if(c)j0a(c);c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);return}j0a(c);$4(b);c0a(a);return}function _va(a){a=a|0;Zva(a);OBa(a);return}function $va(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function awa(a){a=a|0;OBa(a);return}function bwa(a){a=a|0;var b=0,c=0;k[a>>2]=45168;b=a+12|0;k[b>>2]=35972;c=k[a+56>>2]|0;if(c)j0a(c);c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);return}j0a(c);$4(b);c0a(a);return}function cwa(a){a=a|0;var b=0,c=0;k[a>>2]=45168;b=a+12|0;k[b>>2]=35972;c=k[a+56>>2]|0;if(c)j0a(c);c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);OBa(a);return}j0a(c);$4(b);c0a(a);OBa(a);return}function dwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function ewa(a){a=a|0;OBa(a);return}function fwa(a){a=a|0;var b=0,c=0;k[a>>2]=44720;b=a+12|0;k[b>>2]=35944;c=k[a+64>>2]|0;if(c)j0a(c);c=k[a+56>>2]|0;if(c)j0a(c);c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);return}j0a(c);$4(b);c0a(a);return}function gwa(a){a=a|0;var b=0,c=0;k[a>>2]=44720;b=a+12|0;k[b>>2]=35944;c=k[a+64>>2]|0;if(c)j0a(c);c=k[a+56>>2]|0;if(c)j0a(c);c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);OBa(a);return}j0a(c);$4(b);c0a(a);OBa(a);return}function hwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function iwa(a){a=a|0;OBa(a);return}function jwa(a){a=a|0;var b=0;k[a>>2]=45196;b=k[a+40>>2]|0;if(b)j0a(b);$4(a+12|0);c0a(a);return}function kwa(a){a=a|0;var b=0;k[a>>2]=45196;b=k[a+40>>2]|0;if(b)j0a(b);$4(a+12|0);c0a(a);OBa(a);return}function lwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function mwa(a){a=a|0;OBa(a);return}function nwa(a){a=a|0;var b=0;k[a>>2]=45224;b=k[a+40>>2]|0;if(b)j0a(b);$4(a+12|0);c0a(a);return}function owa(a){a=a|0;var b=0;k[a>>2]=45224;b=k[a+40>>2]|0;if(b)j0a(b);$4(a+12|0);c0a(a);OBa(a);return}function pwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function qwa(a){a=a|0;OBa(a);return}function rwa(a){a=a|0;var b=0,c=0;k[a>>2]=45252;b=a+12|0;k[b>>2]=36084;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function swa(a){a=a|0;var b=0,c=0;k[a>>2]=45252;b=a+12|0;k[b>>2]=36084;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function twa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function uwa(a){a=a|0;OBa(a);return}function vwa(a){a=a|0;var b=0;k[a>>2]=45280;b=k[a+40>>2]|0;if(b)j0a(b);$4(a+12|0);c0a(a);return}function wwa(a){a=a|0;var b=0;k[a>>2]=45280;b=k[a+40>>2]|0;if(b)j0a(b);$4(a+12|0);c0a(a);OBa(a);return}function xwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function ywa(a){a=a|0;OBa(a);return}function zwa(a){a=a|0;var b=0;k[a>>2]=45308;b=k[a+40>>2]|0;if(b)j0a(b);$4(a+12|0);c0a(a);return}function Awa(a){a=a|0;var b=0;k[a>>2]=45308;b=k[a+40>>2]|0;if(b)j0a(b);$4(a+12|0);c0a(a);OBa(a);return}function Bwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Cwa(a){a=a|0;OBa(a);return}function Dwa(a){a=a|0;var b=0,c=0;k[a>>2]=45336;b=a+12|0;k[b>>2]=35776;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function Ewa(a){a=a|0;var b=0,c=0;k[a>>2]=45336;b=a+12|0;k[b>>2]=35776;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function Fwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Gwa(a){a=a|0;OBa(a);return}function Hwa(a){a=a|0;var b=0,c=0;k[a>>2]=45364;b=a+12|0;k[b>>2]=36224;c=k[a+56>>2]|0;if(c)j0a(c);c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);return}j0a(c);$4(b);c0a(a);return}function Iwa(a){a=a|0;var b=0,c=0;k[a>>2]=45364;b=a+12|0;k[b>>2]=36224;c=k[a+56>>2]|0;if(c)j0a(c);c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);OBa(a);return}j0a(c);$4(b);c0a(a);OBa(a);return}function Jwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Kwa(a){a=a|0;OBa(a);return}function Lwa(a){a=a|0;var b=0,c=0;k[a>>2]=44692;b=a+12|0;k[b>>2]=36252;c=k[a+52>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function Mwa(a){a=a|0;var b=0,c=0;k[a>>2]=44692;b=a+12|0;k[b>>2]=36252;c=k[a+52>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function Nwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Owa(a){a=a|0;OBa(a);return}function Pwa(a){a=a|0;k[a>>2]=44664;$4(a+12|0);c0a(a);return}function Qwa(a){a=a|0;k[a>>2]=44664;$4(a+12|0);c0a(a);OBa(a);return}function Rwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Swa(a){a=a|0;OBa(a);return}function Twa(a){a=a|0;var b=0,c=0;k[a>>2]=45392;b=a+12|0;k[b>>2]=33328;c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function Uwa(a){a=a|0;var b=0,c=0;k[a>>2]=45392;b=a+12|0;k[b>>2]=33328;c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function Vwa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Wwa(a){a=a|0;OBa(a);return}function Xwa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function Ywa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45420;b=a+12|0;k[b>>2]=35888;c=a+44|0;d=k[c>>2]|0;if(d){e=a+48|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);return}j0a(g);$4(b);c0a(a);return}function Zwa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45420;b=a+12|0;k[b>>2]=35888;c=a+44|0;d=k[c>>2]|0;if(d){e=a+48|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);OBa(a);return}j0a(g);$4(b);c0a(a);OBa(a);return}function _wa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function $wa(a){a=a|0;OBa(a);return}function axa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45448;b=a+12|0;k[b>>2]=35444;c=a+36|0;d=k[c>>2]|0;if(!d){$4(b);c0a(a);return}e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g);$4(b);c0a(a);return}function bxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45448;b=a+12|0;k[b>>2]=35444;c=a+36|0;d=k[c>>2]|0;if(!d){$4(b);c0a(a);OBa(a);return}e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g);$4(b);c0a(a);OBa(a);return}function cxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function dxa(a){a=a|0;OBa(a);return}function exa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45476;b=a+12|0;k[b>>2]=35616;c=a+44|0;d=k[c>>2]|0;if(d){e=a+48|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);return}j0a(g);$4(b);c0a(a);return}function fxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45476;b=a+12|0;k[b>>2]=35616;c=a+44|0;d=k[c>>2]|0;if(d){e=a+48|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);OBa(a);return}j0a(g);$4(b);c0a(a);OBa(a);return}function gxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function hxa(a){a=a|0;OBa(a);return}function ixa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=45504;b=a+12|0;k[b>>2]=35748;c=a+36|0;d=k[c>>2]|0;if(!d){$4(b);c0a(a);return}e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;do{f=h+-12|0;k[e>>2]=f;K2a(f);h=k[e>>2]|0}while((h|0)!=(d|0));g=k[c>>2]|0}OBa(g);$4(b);c0a(a);return}function jxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=45504;b=a+12|0;k[b>>2]=35748;c=a+36|0;d=k[c>>2]|0;if(!d){$4(b);c0a(a);OBa(a);return}e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;do{f=h+-12|0;k[e>>2]=f;K2a(f);h=k[e>>2]|0}while((h|0)!=(d|0));g=k[c>>2]|0}OBa(g);$4(b);c0a(a);OBa(a);return}function kxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function lxa(a){a=a|0;OBa(a);return}function mxa(a){a=a|0;var b=0,c=0;k[a>>2]=45532;b=a+12|0;k[b>>2]=35272;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function nxa(a){a=a|0;var b=0,c=0;k[a>>2]=45532;b=a+12|0;k[b>>2]=35272;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function oxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function pxa(a){a=a|0;OBa(a);return}function qxa(a){a=a|0;var b=0;k[a>>2]=45560;b=k[a+84>>2]|0;if(b)j0a(b);P6(a+12|0);c0a(a);return}function rxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=45560;b=k[a+84>>2]|0;if(b)j0a(b);b=a+12|0;k[b>>2]=37064;c=k[a+76>>2]|0;if(c)j0a(c);c=k[a+68>>2]|0;if(c)j0a(c);c=k[a+52>>2]|0;d=c;if(c){e=a+56|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[b>>2]=33328;c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);OBa(a);return}j0a(c);$4(b);c0a(a);OBa(a);return}function sxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function txa(a){a=a|0;OBa(a);return}function uxa(a){a=a|0;var b=0,c=0;k[a>>2]=44636;b=a+12|0;k[b>>2]=35568;c=k[a+92>>2]|0;if(c)j0a(c);c=k[a+84>>2]|0;if(c)j0a(c);P6(b);c0a(a);return}function vxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=44636;b=a+12|0;k[b>>2]=35568;c=k[a+92>>2]|0;if(c)j0a(c);c=k[a+84>>2]|0;if(c)j0a(c);k[b>>2]=37064;c=k[a+76>>2]|0;if(c)j0a(c);c=k[a+68>>2]|0;if(c)j0a(c);c=k[a+52>>2]|0;d=c;if(c){e=a+56|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[b>>2]=33328;c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);OBa(a);return}j0a(c);$4(b);c0a(a);OBa(a);return}function wxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function xxa(a){a=a|0;OBa(a);return}function yxa(a){a=a|0;OBa(a);return}function zxa(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=44592;k[b+4>>2]=k[a+4>>2];return b|0}function Axa(a,b){a=a|0;b=b|0;k[b>>2]=44592;k[b+4>>2]=k[a+4>>2];return}function Bxa(a){a=a|0;return}function Cxa(a){a=a|0;OBa(a);return}function Dxa(a){a=a|0;i[(k[a+4>>2]|0)+12>>0]=0;return}function Exa(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==291477?a+4|0:0)|0}function Fxa(a){a=a|0;return 8360}function Gxa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function Hxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45588;b=a+12|0;k[b>>2]=35348;c=a+52|0;d=k[c>>2]|0;if(d){e=a+56|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=33328;g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);return}j0a(g);$4(b);c0a(a);return}function Ixa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45588;b=a+12|0;k[b>>2]=35348;c=a+52|0;d=k[c>>2]|0;if(d){e=a+56|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=33328;g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);OBa(a);return}j0a(g);$4(b);c0a(a);OBa(a);return}function Jxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Kxa(a){a=a|0;OBa(a);return}function Lxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45616;b=a+12|0;k[b>>2]=35300;c=a+52|0;d=k[c>>2]|0;if(d){e=a+56|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=33328;g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);return}j0a(g);$4(b);c0a(a);return}function Mxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45616;b=a+12|0;k[b>>2]=35300;c=a+52|0;d=k[c>>2]|0;if(d){e=a+56|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=33328;g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);OBa(a);return}j0a(g);$4(b);c0a(a);OBa(a);return}function Nxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Oxa(a){a=a|0;OBa(a);return}function Pxa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function Qxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=44564;b=a+12|0;k[b>>2]=35472;c=k[a+108>>2]|0;if(c)j0a(c);c=a+92|0;d=k[c>>2]|0;if(d){e=a+96|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+84>>2]|0;if(g)j0a(g);k[b>>2]=37064;g=k[a+76>>2]|0;if(g)j0a(g);g=k[a+68>>2]|0;if(g)j0a(g);g=k[a+52>>2]|0;c=g;if(g){j=a+56|0;h=k[j>>2]|0;if((h|0)!=(g|0))k[j>>2]=h+(~((h+-4-c|0)>>>2)<<2);OBa(g)}k[b>>2]=33328;g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);return}j0a(g);$4(b);c0a(a);return}function Rxa(a){a=a|0;Qxa(a);OBa(a);return}function Sxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Txa(a){a=a|0;OBa(a);return}function Uxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45644;b=a+12|0;k[b>>2]=35244;c=a+44|0;d=k[c>>2]|0;if(d){e=a+48|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);return}j0a(g);$4(b);c0a(a);return}function Vxa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45644;b=a+12|0;k[b>>2]=35244;c=a+44|0;d=k[c>>2]|0;if(d){e=a+48|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}g=k[a+40>>2]|0;if(!g){$4(b);c0a(a);OBa(a);return}j0a(g);$4(b);c0a(a);OBa(a);return}function Wxa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function Xxa(a){a=a|0;OBa(a);return}function Yxa(a){a=a|0;var b=0,c=0;k[a>>2]=45672;b=a+12|0;k[b>>2]=36476;c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);return}function Zxa(a){a=a|0;var b=0,c=0;k[a>>2]=45672;b=a+12|0;k[b>>2]=36476;c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function _xa(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function $xa(a){a=a|0;OBa(a);return}function aya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function bya(a){a=a|0;k[a>>2]=44536;o5(a+12|0);c0a(a);return}function cya(a){a=a|0;k[a>>2]=44536;o5(a+12|0);c0a(a);OBa(a);return}function dya(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function eya(a){a=a|0;OBa(a);return}function fya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>4;if(!f)return;if(!(f>>>0>268435455?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<4);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(h)h0a(h);k[f+8>>2]=k[d+8>>2];h=k[d+12>>2]|0;k[f+12>>2]=h;if(h)h0a(h);f=(k[c>>2]|0)+16|0;k[c>>2]=f;d=d+16|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))i=d;else{h=f;do{k[c>>2]=h+-16;f=k[h+-4>>2]|0;if(f)j0a(f);f=k[h+-12>>2]|0;if(f)j0a(f);h=k[c>>2]|0}while((h|0)!=(d|0));i=k[a>>2]|0}OBa(i);Sc(b|0)}function gya(a){a=a|0;k[a>>2]=44508;m5(a+12|0);c0a(a);return}function hya(a){a=a|0;k[a>>2]=44508;m5(a+12|0);c0a(a);OBa(a);return}function iya(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function jya(a){a=a|0;OBa(a);return}function kya(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=44480;b=a+12|0;k[b>>2]=35120;c=a+48|0;d=k[c>>2]|0;if(d){e=a+52|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;do{f=h+-12|0;k[e>>2]=f;K2a(f);h=k[e>>2]|0}while((h|0)!=(d|0));g=k[c>>2]|0}OBa(g)}g=k[a+36>>2]|0;if(!g){$4(b);c0a(a);return}c=a+40|0;d=k[c>>2]|0;if((d|0)!=(g|0))k[c>>2]=d+(~((d+-4-g|0)>>>2)<<2);OBa(g);$4(b);c0a(a);return}function lya(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=44480;b=a+12|0;k[b>>2]=35120;c=a+48|0;d=k[c>>2]|0;if(d){e=a+52|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;do{f=h+-12|0;k[e>>2]=f;K2a(f);h=k[e>>2]|0}while((h|0)!=(d|0));g=k[c>>2]|0}OBa(g)}g=k[a+36>>2]|0;if(!g){$4(b);c0a(a);OBa(a);return}c=a+40|0;d=k[c>>2]|0;if((d|0)!=(g|0))k[c>>2]=d+(~((d+-4-g|0)>>>2)<<2);OBa(g);$4(b);c0a(a);OBa(a);return}function mya(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function nya(a){a=a|0;OBa(a);return}function oya(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45700;b=a+12|0;k[b>>2]=35092;c=a+36|0;d=k[c>>2]|0;if(!d){$4(b);c0a(a);return}e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g);$4(b);c0a(a);return}function pya(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=45700;b=a+12|0;k[b>>2]=35092;c=a+36|0;d=k[c>>2]|0;if(!d){$4(b);c0a(a);OBa(a);return}e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g);$4(b);c0a(a);OBa(a);return}function qya(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function rya(a){a=a|0;OBa(a);return}function sya(a){a=a|0;return (k[a>>2]|0)+176|0}function tya(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;a=k[b+84>>2]|0;c=k[b+96>>2]|0;if(!c){d=a;return d|0}else{h0a(c);j0a(c);d=a;return d|0}return 0}function uya(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;a=k[b+84+4>>2]|0;c=k[b+96>>2]|0;if(!c){d=a;return d|0}else{h0a(c);j0a(c);d=a;return d|0}return 0}function vya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0;c=r;r=r+400|0;d=c+384|0;e=c+372|0;f=c+360|0;g=c+336|0;h=c+312|0;j=c+348|0;l=c+324|0;m=c+288|0;n=c+276|0;o=c+264|0;p=c+252|0;q=c+240|0;s=c+228|0;t=c+216|0;u=c+300|0;v=c+204|0;w=c+192|0;y=c+180|0;z=c+168|0;A=c+156|0;B=c+144|0;C=c+132|0;D=c+120|0;E=c+396|0;F=c+108|0;G=c+96|0;H=c+84|0;I=c+72|0;J=c+60|0;K=c+48|0;L=c+36|0;N=c+24|0;O=c+12|0;P=c;Q=k[a>>2]|0;R=k[Q+80>>2]|0;if((R|0)==(b|0)){S=k[a>>2]|0;ysa(S)|0;r=c;return}if((R+-120|0)>>>0<18){q2a(o,292396,15);x=0;fb(140,h|0,329672,0);T=x;x=0;do if(!(T&1)){x=0;pa(57,(b|0)<141|0,h|0,267,293207,292412);U=x;x=0;if(U&1){U=Hc()|0;V=M;K2a(h);W=V;X=U;Y=20;break}K2a(h);U=k[45744+(b<<2)>>2]|0;V=RLa(U)|0;x=0;fb(140,p|0,U|0,V|0);V=x;x=0;if(!(V&1)){V=i[p>>0]|0;U=(V&1)==0;x=0;Z=Fa(88,o|0,(U?p+1|0:k[p+8>>2]|0)|0,(U?(V&255)>>>1:k[p+4>>2]|0)|0)|0;V=x;x=0;if(V&1){V=Hc()|0;_=M;$=V}else{k[n>>2]=k[Z>>2];k[n+4>>2]=k[Z+4>>2];k[n+8>>2]=k[Z+8>>2];k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;x=0;fb(140,q|0,292487,23);Z=x;x=0;if(Z&1){Z=Hc()|0;aa=M;ba=Z}else{Z=i[q>>0]|0;V=(Z&1)==0;x=0;U=Fa(88,n|0,(V?q+1|0:k[q+8>>2]|0)|0,(V?(Z&255)>>>1:k[q+4>>2]|0)|0)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;ca=M;da=Z}else{k[m>>2]=k[U>>2];k[m+4>>2]=k[U+4>>2];k[m+8>>2]=k[U+8>>2];k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;x=0;fb(140,g|0,329672,0);U=x;x=0;do if(!(U&1)){x=0;pa(57,1,g|0,267,293207,292412);Z=x;x=0;if(Z&1){Z=Hc()|0;V=M;K2a(g);ea=V;fa=Z;Y=25;break}K2a(g);Z=k[45744+(R<<2)>>2]|0;V=RLa(Z)|0;x=0;fb(140,s|0,Z|0,V|0);V=x;x=0;if(!(V&1)){V=i[s>>0]|0;Z=(V&1)==0;x=0;ga=Fa(88,m|0,(Z?s+1|0:k[s+8>>2]|0)|0,(Z?(V&255)>>>1:k[s+4>>2]|0)|0)|0;V=x;x=0;if(V&1){V=Hc()|0;ha=M;ia=V}else{k[l>>2]=k[ga>>2];k[l+4>>2]=k[ga+4>>2];k[l+8>>2]=k[ga+8>>2];k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;x=0;fb(140,t|0,292511,1);ga=x;x=0;if(ga&1){ga=Hc()|0;ja=M;ka=ga}else{ga=i[t>>0]|0;V=(ga&1)==0;x=0;Z=Fa(88,l|0,(V?t+1|0:k[t+8>>2]|0)|0,(V?(ga&255)>>>1:k[t+4>>2]|0)|0)|0;ga=x;x=0;do if(ga&1){V=Hc()|0;la=M;ma=V}else{k[j>>2]=k[Z>>2];k[j+4>>2]=k[Z+4>>2];k[j+8>>2]=k[Z+8>>2];k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;x=0;xa(883,a|0,j|0);V=x;x=0;if(V&1){V=Hc()|0;na=M;K2a(j);la=na;ma=V;break}K2a(j);K2a(t);K2a(l);K2a(s);K2a(m);K2a(q);K2a(n);K2a(p);K2a(o);S=k[a>>2]|0;ysa(S)|0;r=c;return}while(0);K2a(t);ja=la;ka=ma}K2a(l);ha=ja;ia=ka}K2a(s);oa=ha;qa=ia}else Y=24}else Y=24;while(0);if((Y|0)==24){U=Hc()|0;ea=M;fa=U;Y=25}if((Y|0)==25){oa=ea;qa=fa}K2a(m);ca=oa;da=qa}K2a(q);aa=ca;ba=da}K2a(n);_=aa;$=ba}K2a(p);ra=_;sa=$}else Y=19}else Y=19;while(0);if((Y|0)==19){$=Hc()|0;W=M;X=$;Y=20}if((Y|0)==20){ra=W;sa=X}K2a(o);ta=ra;ua=sa;Sc(ua|0)}if((R+-98|0)>>>0<14){k[d>>2]=k[Q+112>>2];k[e>>2]=k[Q+116>>2];Cya(u,R,d,e);q2a(A,292396,15);x=0;fb(140,f|0,329672,0);R=x;x=0;do if(!(R&1)){x=0;pa(57,(b|0)<141|0,f|0,267,293207,292412);Q=x;x=0;if(Q&1){Q=Hc()|0;sa=M;K2a(f);va=sa;wa=Q;Y=53;break}K2a(f);Q=k[45744+(b<<2)>>2]|0;sa=RLa(Q)|0;x=0;fb(140,B|0,Q|0,sa|0);sa=x;x=0;if(!(sa&1)){sa=i[B>>0]|0;Q=(sa&1)==0;x=0;ra=Fa(88,A|0,(Q?B+1|0:k[B+8>>2]|0)|0,(Q?(sa&255)>>>1:k[B+4>>2]|0)|0)|0;sa=x;x=0;if(sa&1){sa=Hc()|0;ya=M;za=sa}else{k[z>>2]=k[ra>>2];k[z+4>>2]=k[ra+4>>2];k[z+8>>2]=k[ra+8>>2];k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;x=0;fb(140,C|0,292513,6);ra=x;x=0;if(ra&1){ra=Hc()|0;Aa=M;Ba=ra}else{ra=i[C>>0]|0;sa=(ra&1)==0;x=0;Q=Fa(88,z|0,(sa?C+1|0:k[C+8>>2]|0)|0,(sa?(ra&255)>>>1:k[C+4>>2]|0)|0)|0;ra=x;x=0;if(ra&1){ra=Hc()|0;Ca=M;Da=ra}else{k[y>>2]=k[Q>>2];k[y+4>>2]=k[Q+4>>2];k[y+8>>2]=k[Q+8>>2];k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=0;i[E>>0]=0;x=0;fb(284,D|0,u|0,E|0);Q=x;x=0;if(Q&1){Q=Hc()|0;Ea=M;Ga=Q}else{Q=i[D>>0]|0;ra=(Q&1)==0;x=0;sa=Fa(88,y|0,(ra?D+1|0:k[D+8>>2]|0)|0,(ra?(Q&255)>>>1:k[D+4>>2]|0)|0)|0;Q=x;x=0;if(Q&1){Q=Hc()|0;Ha=M;Ia=Q}else{k[w>>2]=k[sa>>2];k[w+4>>2]=k[sa+4>>2];k[w+8>>2]=k[sa+8>>2];k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;x=0;fb(140,F|0,292511,1);sa=x;x=0;if(sa&1){sa=Hc()|0;Ja=M;Ka=sa}else{sa=i[F>>0]|0;Q=(sa&1)==0;x=0;ra=Fa(88,w|0,(Q?F+1|0:k[F+8>>2]|0)|0,(Q?(sa&255)>>>1:k[F+4>>2]|0)|0)|0;sa=x;x=0;do if(sa&1){Q=Hc()|0;La=M;Ma=Q}else{k[v>>2]=k[ra>>2];k[v+4>>2]=k[ra+4>>2];k[v+8>>2]=k[ra+8>>2];k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;x=0;xa(883,a|0,v|0);Q=x;x=0;if(Q&1){Q=Hc()|0;o=M;K2a(v);La=o;Ma=Q;break}K2a(v);K2a(F);K2a(w);K2a(D);K2a(y);K2a(C);K2a(z);K2a(B);K2a(A);S=k[a>>2]|0;ysa(S)|0;r=c;return}while(0);K2a(F);Ja=La;Ka=Ma}K2a(w);Ha=Ja;Ia=Ka}K2a(D);Ea=Ha;Ga=Ia}K2a(y);Ca=Ea;Da=Ga}K2a(C);Aa=Ca;Ba=Da}K2a(z);ya=Aa;za=Ba}K2a(B);Na=ya;Oa=za}else Y=52}else Y=52;while(0);if((Y|0)==52){za=Hc()|0;va=M;wa=za;Y=53}if((Y|0)==53){Na=va;Oa=wa}K2a(A);ta=Na;ua=Oa;Sc(ua|0)}q2a(K,292396,15);x=0;fb(140,e|0,329672,0);Oa=x;x=0;do if(!(Oa&1)){x=0;pa(57,(b|0)<141|0,e|0,267,293207,292412);Na=x;x=0;if(Na&1){Na=Hc()|0;A=M;K2a(e);Pa=A;Qa=Na;Y=87;break}K2a(e);Na=k[45744+(b<<2)>>2]|0;A=RLa(Na)|0;x=0;fb(140,L|0,Na|0,A|0);A=x;x=0;if(!(A&1)){A=i[L>>0]|0;Na=(A&1)==0;x=0;wa=Fa(88,K|0,(Na?L+1|0:k[L+8>>2]|0)|0,(Na?(A&255)>>>1:k[L+4>>2]|0)|0)|0;A=x;x=0;if(A&1){A=Hc()|0;Ra=M;Sa=A}else{k[J>>2]=k[wa>>2];k[J+4>>2]=k[wa+4>>2];k[J+8>>2]=k[wa+8>>2];k[wa>>2]=0;k[wa+4>>2]=0;k[wa+8>>2]=0;x=0;fb(140,N|0,292513,6);wa=x;x=0;if(wa&1){wa=Hc()|0;Ta=M;Ua=wa}else{wa=i[N>>0]|0;A=(wa&1)==0;x=0;Na=Fa(88,J|0,(A?N+1|0:k[N+8>>2]|0)|0,(A?(wa&255)>>>1:k[N+4>>2]|0)|0)|0;wa=x;x=0;if(wa&1){wa=Hc()|0;Va=M;Wa=wa}else{k[I>>2]=k[Na>>2];k[I+4>>2]=k[Na+4>>2];k[I+8>>2]=k[Na+8>>2];k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;Na=k[(k[a>>2]|0)+80>>2]|0;x=0;fb(140,d|0,329672,0);wa=x;x=0;do if(!(wa&1)){x=0;pa(57,(Na|0)<141|0,d|0,267,293207,292412);A=x;x=0;if(A&1){A=Hc()|0;va=M;K2a(d);Xa=va;Ya=A;Y=92;break}K2a(d);A=k[45744+(Na<<2)>>2]|0;va=RLa(A)|0;x=0;fb(140,O|0,A|0,va|0);va=x;x=0;if(!(va&1)){va=i[O>>0]|0;A=(va&1)==0;x=0;za=Fa(88,I|0,(A?O+1|0:k[O+8>>2]|0)|0,(A?(va&255)>>>1:k[O+4>>2]|0)|0)|0;va=x;x=0;if(va&1){va=Hc()|0;Za=M;_a=va}else{k[H>>2]=k[za>>2];k[H+4>>2]=k[za+4>>2];k[H+8>>2]=k[za+8>>2];k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;x=0;fb(140,P|0,292511,1);za=x;x=0;if(za&1){za=Hc()|0;$a=M;ab=za}else{za=i[P>>0]|0;va=(za&1)==0;x=0;A=Fa(88,H|0,(va?P+1|0:k[P+8>>2]|0)|0,(va?(za&255)>>>1:k[P+4>>2]|0)|0)|0;za=x;x=0;do if(za&1){va=Hc()|0;bb=M;cb=va}else{k[G>>2]=k[A>>2];k[G+4>>2]=k[A+4>>2];k[G+8>>2]=k[A+8>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;x=0;xa(883,a|0,G|0);va=x;x=0;if(va&1){va=Hc()|0;ya=M;K2a(G);bb=ya;cb=va;break}K2a(G);K2a(P);K2a(H);K2a(O);K2a(I);K2a(N);K2a(J);K2a(L);K2a(K);S=k[a>>2]|0;ysa(S)|0;r=c;return}while(0);K2a(P);$a=bb;ab=cb}K2a(H);Za=$a;_a=ab}K2a(O);db=Za;eb=_a}else Y=91}else Y=91;while(0);if((Y|0)==91){Na=Hc()|0;Xa=M;Ya=Na;Y=92}if((Y|0)==92){db=Xa;eb=Ya}K2a(I);Va=db;Wa=eb}K2a(N);Ta=Va;Ua=Wa}K2a(J);Ra=Ta;Sa=Ua}K2a(L);gb=Ra;hb=Sa}else Y=86}else Y=86;while(0);if((Y|0)==86){Sa=Hc()|0;Pa=M;Qa=Sa;Y=87}if((Y|0)==87){gb=Pa;hb=Qa}K2a(K);ta=gb;ua=hb;Sc(ua|0)}function wya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+64|0;d=c+40|0;e=c;Aya(a,b);b=e;a=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(a|0));b=e+20|0;a=e+24|0;k[a>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;c=e+4|0;f=e+8|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=31624;k[e>>2]=31588;k[b>>2]=31648;x=0;nb(114,e|0,292520,292585,152);x=0;e=Hc()|0;k[c>>2]=31680;k[c+-4>>2]=31708;k[c+16>>2]=31732;K2a(f);k[b>>2]=20796;b=k[a>>2]|0;if(!b)Sc(e|0);x=0;f=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!f)Sc(e|0);k[a>>2]=0;Sc(e|0)}function xya(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;b=r;r=r+160|0;c=b+136|0;d=b+132|0;e=b+108|0;f=b+120|0;g=b+96|0;h=b+84|0;j=b+72|0;l=b+148|0;m=b+60|0;n=b+48|0;o=b+36|0;p=b+24|0;q=b+12|0;s=b;t=k[a>>2]|0;u=k[t+80>>2]|0;if((u+-12|0)>>>0<12){v=k[a>>2]|0;ysa(v)|0;r=b;return u|0}if((u+-98|0)>>>0<14){k[c>>2]=k[t+112>>2];k[d>>2]=k[t+116>>2];Cya(e,u,c,d);q2a(h,292625,36);i[l>>0]=0;x=0;fb(284,j|0,e|0,l|0);l=x;x=0;if(l&1){l=Hc()|0;w=M;y=l}else{l=i[j>>0]|0;e=(l&1)==0;x=0;d=Fa(88,h|0,(e?j+1|0:k[j+8>>2]|0)|0,(e?(l&255)>>>1:k[j+4>>2]|0)|0)|0;l=x;x=0;if(l&1){l=Hc()|0;z=M;A=l}else{k[g>>2]=k[d>>2];k[g+4>>2]=k[d+4>>2];k[g+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;fb(140,m|0,292511,1);d=x;x=0;if(d&1){d=Hc()|0;B=M;C=d}else{d=i[m>>0]|0;l=(d&1)==0;x=0;e=Fa(88,g|0,(l?m+1|0:k[m+8>>2]|0)|0,(l?(d&255)>>>1:k[m+4>>2]|0)|0)|0;d=x;x=0;do if(d&1){l=Hc()|0;D=M;E=l}else{k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(883,a|0,f|0);l=x;x=0;if(l&1){l=Hc()|0;t=M;K2a(f);D=t;E=l;break}K2a(f);K2a(m);K2a(g);K2a(j);K2a(h);v=k[a>>2]|0;ysa(v)|0;r=b;return u|0}while(0);K2a(m);B=D;C=E}K2a(g);z=B;A=C}K2a(j);w=z;y=A}K2a(h);F=w;G=y;Sc(G|0)}q2a(p,292625,36);y=k[(k[a>>2]|0)+80>>2]|0;x=0;fb(140,c|0,329672,0);w=x;x=0;do if(!(w&1)){x=0;pa(57,(y|0)<141|0,c|0,267,293207,292412);h=x;x=0;if(h&1){h=Hc()|0;A=M;K2a(c);H=A;I=h;J=28;break}K2a(c);h=k[45744+(y<<2)>>2]|0;A=RLa(h)|0;x=0;fb(140,q|0,h|0,A|0);A=x;x=0;if(!(A&1)){A=i[q>>0]|0;h=(A&1)==0;x=0;z=Fa(88,p|0,(h?q+1|0:k[q+8>>2]|0)|0,(h?(A&255)>>>1:k[q+4>>2]|0)|0)|0;A=x;x=0;if(A&1){A=Hc()|0;K=M;L=A}else{k[o>>2]=k[z>>2];k[o+4>>2]=k[z+4>>2];k[o+8>>2]=k[z+8>>2];k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;x=0;fb(140,s|0,292511,1);z=x;x=0;if(z&1){z=Hc()|0;N=M;O=z}else{z=i[s>>0]|0;A=(z&1)==0;x=0;h=Fa(88,o|0,(A?s+1|0:k[s+8>>2]|0)|0,(A?(z&255)>>>1:k[s+4>>2]|0)|0)|0;z=x;x=0;do if(z&1){A=Hc()|0;P=M;Q=A}else{k[n>>2]=k[h>>2];k[n+4>>2]=k[h+4>>2];k[n+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;xa(883,a|0,n|0);A=x;x=0;if(A&1){A=Hc()|0;j=M;K2a(n);P=j;Q=A;break}K2a(n);K2a(s);K2a(o);K2a(q);K2a(p);v=k[a>>2]|0;ysa(v)|0;r=b;return u|0}while(0);K2a(s);N=P;O=Q}K2a(o);K=N;L=O}K2a(q);R=K;S=L}else J=27}else J=27;while(0);if((J|0)==27){L=Hc()|0;H=M;I=L;J=28}if((J|0)==28){R=H;S=I}K2a(p);F=R;G=S;Sc(G|0);return 0}function yya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;c=r;r=r+160|0;d=c+136|0;e=c+132|0;f=c+108|0;g=c+120|0;h=c+96|0;j=c+84|0;l=c+72|0;m=c+148|0;n=c+60|0;o=c+48|0;p=c+36|0;q=c+24|0;s=c+12|0;t=c;u=k[b>>2]|0;v=k[u+80>>2]|0;a:do if((v|0)!=119){if((v+-98|0)>>>0<14){k[d>>2]=k[u+112>>2];k[e>>2]=k[u+116>>2];Cya(f,v,d,e);q2a(j,292662,26);i[m>>0]=0;x=0;fb(284,l|0,f|0,m|0);w=x;x=0;if(w&1){w=Hc()|0;y=M;z=w}else{w=i[l>>0]|0;A=(w&1)==0;x=0;B=Fa(88,j|0,(A?l+1|0:k[l+8>>2]|0)|0,(A?(w&255)>>>1:k[l+4>>2]|0)|0)|0;w=x;x=0;if(w&1){w=Hc()|0;C=M;D=w}else{k[h>>2]=k[B>>2];k[h+4>>2]=k[B+4>>2];k[h+8>>2]=k[B+8>>2];k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;x=0;fb(140,n|0,292511,1);B=x;x=0;if(B&1){B=Hc()|0;E=M;F=B}else{B=i[n>>0]|0;w=(B&1)==0;x=0;A=Fa(88,h|0,(w?n+1|0:k[n+8>>2]|0)|0,(w?(B&255)>>>1:k[n+4>>2]|0)|0)|0;B=x;x=0;do if(!(B&1)){k[g>>2]=k[A>>2];k[g+4>>2]=k[A+4>>2];k[g+8>>2]=k[A+8>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;x=0;xa(883,b|0,g|0);w=x;x=0;if(w&1){w=Hc()|0;G=M;K2a(g);H=G;I=w;break}else{K2a(g);K2a(n);K2a(h);K2a(l);K2a(j);break a}}else{w=Hc()|0;H=M;I=w}while(0);K2a(n);E=H;F=I}K2a(h);C=E;D=F}K2a(l);y=C;z=D}K2a(j);J=y;K=z;Sc(K|0)}q2a(q,292662,26);x=0;fb(140,d|0,329672,0);A=x;x=0;do if(!(A&1)){x=0;pa(57,(v|0)<141|0,d|0,267,293207,292412);B=x;x=0;if(B&1){B=Hc()|0;w=M;K2a(d);L=w;N=B;O=28;break}K2a(d);B=k[45744+(v<<2)>>2]|0;w=RLa(B)|0;x=0;fb(140,s|0,B|0,w|0);w=x;x=0;if(!(w&1)){w=i[s>>0]|0;B=(w&1)==0;x=0;G=Fa(88,q|0,(B?s+1|0:k[s+8>>2]|0)|0,(B?(w&255)>>>1:k[s+4>>2]|0)|0)|0;w=x;x=0;if(w&1){w=Hc()|0;P=M;Q=w}else{k[p>>2]=k[G>>2];k[p+4>>2]=k[G+4>>2];k[p+8>>2]=k[G+8>>2];k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;x=0;fb(140,t|0,292511,1);G=x;x=0;if(G&1){G=Hc()|0;R=M;S=G}else{G=i[t>>0]|0;w=(G&1)==0;x=0;B=Fa(88,p|0,(w?t+1|0:k[t+8>>2]|0)|0,(w?(G&255)>>>1:k[t+4>>2]|0)|0)|0;G=x;x=0;do if(!(G&1)){k[o>>2]=k[B>>2];k[o+4>>2]=k[B+4>>2];k[o+8>>2]=k[B+8>>2];k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;x=0;xa(883,b|0,o|0);w=x;x=0;if(w&1){w=Hc()|0;T=M;K2a(o);U=T;V=w;break}else{K2a(o);K2a(t);K2a(p);K2a(s);K2a(q);break a}}else{w=Hc()|0;U=M;V=w}while(0);K2a(t);R=U;S=V}K2a(p);P=R;Q=S}K2a(s);W=P;X=Q}else O=27}else O=27;while(0);if((O|0)==27){A=Hc()|0;L=M;N=A;O=28}if((O|0)==28){W=L;X=N}K2a(q);J=W;K=X;Sc(K|0)}while(0);K=(k[b>>2]|0)+100|0;X=KBa(24)|0;k[X+4>>2]=0;k[X+8>>2]=0;k[X>>2]=33300;W=X+12|0;x=0;xa(604,W|0,K|0);K=x;x=0;if(K&1){K=Hc()|0;c0a(X);OBa(X);Sc(K|0)}k[a>>2]=W;k[a+4>>2]=X;x=0;Ba(619,k[b>>2]|0)|0;b=x;x=0;if(b&1){b=Hc()|0;j0a(X);Sc(b|0)}else{r=c;return}}function zya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=(k[b>>2]|0)+100|0;d=KBa(24)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=33300;e=d+12|0;x=0;xa(604,e|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;c0a(d);OBa(d);Sc(c|0)}k[a>>2]=e;k[a+4>>2]=d;x=0;Ba(619,k[b>>2]|0)|0;b=x;x=0;if(b&1){b=Hc()|0;j0a(d);Sc(b|0)}else return}function Aya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+48|0;d=c+24|0;e=c+8|0;f=c;g=KBa(68)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=31248;h=g+12|0;x=0;xa(731,h|0,2);i=x;x=0;if(i&1){i=Hc()|0;c0a(g);OBa(g);Sc(i|0)}i=h;j=k[a>>2]|0;l=k[j+84>>2]|0;m=k[j+96>>2]|0;if(m){h0a(m);j0a(m);m=k[a>>2]|0;n=k[m+84>>2]|0;o=k[m+96>>2]|0;if(!o){p=n;q=m;s=l}else{h0a(o);j0a(o);p=n;q=k[a>>2]|0;s=l}}else{p=l;q=j;s=l}l=k[q+176>>2]|0;j=k[q+180>>2]|0;q=(j|0)==0;if(q){t=s;u=p}else{h0a(j);h0a(j);t=s;u=p}k[d>>2]=31456;p=d+4|0;k[p>>2]=t;k[p+4>>2]=u;k[d+12>>2]=l;k[d+16>>2]=j;if(!q)h0a(j);x=0;l=Ta(566,h|0,d|0)|0;h=x;x=0;do if(!(h&1)?(k[e>>2]=21048,u=e+4|0,x=0,xa(604,u|0,b|0),p=x,x=0,!(p&1)):0){x=0;Ta(564,l|0,e|0)|0;p=x;x=0;if(p&1){p=Hc()|0;t=M;k[e>>2]=21048;K2a(u);v=t;w=p;break}k[e>>2]=21048;K2a(u);k[d>>2]=31456;if(!q){j0a(j);j0a(j);j0a(j)}u=k[a+8>>2]|0;k[f>>2]=i;p=f+4|0;k[p>>2]=g;h0a(g);t=u+4|0;s=k[t>>2]|0;if(s>>>0<(k[u+8>>2]|0)>>>0){k[s>>2]=i;k[s+4>>2]=g;k[f>>2]=0;k[p>>2]=0;k[t>>2]=s+8;j0a(g);r=c;return}x=0;xa(732,u|0,f|0);u=x;x=0;if(u&1){u=Hc()|0;s=M;t=k[p>>2]|0;if(!t){y=s;z=u;j0a(g);Sc(z|0)}j0a(t);y=s;z=u;j0a(g);Sc(z|0)}else{u=k[p>>2]|0;if(!u){j0a(g);r=c;return}j0a(u);j0a(g);r=c;return}}else A=23;while(0);if((A|0)==23){A=Hc()|0;v=M;w=A}k[d>>2]=31456;if(q){y=v;z=w;j0a(g);Sc(z|0)}j0a(j);j0a(j);j0a(j);y=v;z=w;j0a(g);Sc(z|0)}function Bya(){k[11433]=0;k[11434]=0;k[11435]=0;return}function Cya(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0;e=r;r=r+272|0;f=e+252|0;g=e+240|0;h=e+228|0;j=e+216|0;l=e+204|0;m=e+192|0;n=e+180|0;o=e+168|0;p=e+156|0;q=e+144|0;s=e+132|0;t=e+120|0;u=e+108|0;v=e+96|0;w=e+84|0;y=e+72|0;z=e+60|0;A=e+48|0;B=e+36|0;C=e+24|0;D=e+12|0;E=e;q2a(g,329672,0);x=0;pa(57,(b+-98|0)>>>0<14|0,g|0,56,292971,293006);F=x;x=0;if(F&1){F=Hc()|0;G=M;K2a(g);H=G;I=F;Sc(I|0)}K2a(g);if((b|0)==109){g=(k[d>>2]|0)==0;q2a(h,293123,58);x=0;pa(57,g|0,h|0,59,292971,293006);g=x;x=0;if(g&1){g=Hc()|0;F=M;K2a(h);H=F;I=g;Sc(I|0)}K2a(h);h=k[c>>2]|0;g=h>>>0<33;J8a(m,h);x=0;h=Fa(86,m|0,0,293182)|0;F=x;x=0;if(F&1){F=Hc()|0;J=M;K=F}else{k[l>>2]=k[h>>2];k[l+4>>2]=k[h+4>>2];k[l+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;h=Ta(484,l|0,324339)|0;F=x;x=0;do if(F&1){G=Hc()|0;L=M;N=G}else{k[j>>2]=k[h>>2];k[j+4>>2]=k[h+4>>2];k[j+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;pa(57,g|0,j|0,60,292971,293006);G=x;x=0;if(G&1){G=Hc()|0;O=M;K2a(j);L=O;N=G;break}K2a(j);K2a(l);K2a(m);k[a>>2]=b;P=k[c>>2]|0;Q=a+4|0;k[Q>>2]=P;R=k[d>>2]|0;S=a+8|0;k[S>>2]=R;r=e;return}while(0);K2a(l);J=L;K=N}K2a(m);H=J;I=K;Sc(I|0)}if((b+-107|0)>>>0<2){K=(k[d>>2]|0)==0;q2a(f,329672,0);x=0;pa(57,1,f|0,303,293207,293255);J=x;x=0;if(J&1){J=Hc()|0;K2a(f);Sc(J|0)}K2a(f);J=k[46308+(b<<2)>>2]|0;q2a(p,J,RLa(J)|0);x=0;m=Fa(86,p|0,0,293334)|0;N=x;x=0;if(N&1){N=Hc()|0;T=M;U=N}else{k[o>>2]=k[m>>2];k[o+4>>2]=k[m+4>>2];k[o+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;m=Ta(484,o|0,324339)|0;N=x;x=0;do if(N&1){L=Hc()|0;V=M;W=L}else{k[n>>2]=k[m>>2];k[n+4>>2]=k[m+4>>2];k[n+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;pa(57,K|0,n|0,64,292971,293006);L=x;x=0;if(L&1){L=Hc()|0;l=M;K2a(n);V=l;W=L;break}K2a(n);K2a(o);K2a(p);L=k[c>>2]|0;l=L>>>0<257&(L&7|0)==0;q2a(f,329672,0);x=0;pa(57,1,f|0,303,293207,293255);L=x;x=0;if(L&1){L=Hc()|0;K2a(f);Sc(L|0)}K2a(f);q2a(u,J,RLa(J)|0);x=0;L=Fa(86,u|0,0,293386)|0;j=x;x=0;if(j&1){j=Hc()|0;X=M;Y=j}else{k[t>>2]=k[L>>2];k[t+4>>2]=k[L+4>>2];k[t+8>>2]=k[L+8>>2];k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;x=0;xa(811,v|0,k[c>>2]|0);L=x;x=0;if(L&1){L=Hc()|0;Z=M;_=L}else{L=i[v>>0]|0;j=(L&1)==0;x=0;g=Fa(88,t|0,(j?v+1|0:k[v+8>>2]|0)|0,(j?(L&255)>>>1:k[v+4>>2]|0)|0)|0;L=x;x=0;if(L&1){L=Hc()|0;$=M;aa=L}else{k[s>>2]=k[g>>2];k[s+4>>2]=k[g+4>>2];k[s+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;g=Ta(484,s|0,324339)|0;L=x;x=0;do if(L&1){j=Hc()|0;ba=M;ca=j}else{k[q>>2]=k[g>>2];k[q+4>>2]=k[g+4>>2];k[q+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;pa(57,l|0,q|0,68,292971,293006);j=x;x=0;if(j&1){j=Hc()|0;h=M;K2a(q);ba=h;ca=j;break}K2a(q);K2a(s);K2a(v);K2a(t);K2a(u);k[a>>2]=b;P=k[c>>2]|0;Q=a+4|0;k[Q>>2]=P;R=k[d>>2]|0;S=a+8|0;k[S>>2]=R;r=e;return}while(0);K2a(s);$=ba;aa=ca}K2a(v);Z=$;_=aa}K2a(t);X=Z;Y=_}K2a(u);H=X;I=Y;Sc(I|0)}while(0);K2a(o);T=V;U=W}K2a(p);H=T;I=U;Sc(I|0)}if((b&-2|0)!=110){k[a>>2]=b;P=k[c>>2]|0;Q=a+4|0;k[Q>>2]=P;R=k[d>>2]|0;S=a+8|0;k[S>>2]=R;r=e;return}U=k[c>>2]|0;T=k[d>>2]|0;if((U&7|0)==0&(T+U|0)>>>0<257)da=(T&7|0)==0;else da=0;q2a(f,329672,0);x=0;pa(57,(b|0)<141|0,f|0,303,293207,293255);T=x;x=0;if(T&1){T=Hc()|0;K2a(f);Sc(T|0)}K2a(f);f=k[46308+(b<<2)>>2]|0;q2a(C,f,RLa(f)|0);x=0;f=Fa(86,C|0,0,293386)|0;T=x;x=0;if(T&1){T=Hc()|0;ea=M;fa=T}else{k[B>>2]=k[f>>2];k[B+4>>2]=k[f+4>>2];k[B+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(811,D|0,k[c>>2]|0);f=x;x=0;if(f&1){f=Hc()|0;ga=M;ha=f}else{f=i[D>>0]|0;T=(f&1)==0;x=0;U=Fa(88,B|0,(T?D+1|0:k[D+8>>2]|0)|0,(T?(f&255)>>>1:k[D+4>>2]|0)|0)|0;f=x;x=0;if(f&1){f=Hc()|0;ia=M;ja=f}else{k[A>>2]=k[U>>2];k[A+4>>2]=k[U+4>>2];k[A+8>>2]=k[U+8>>2];k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;x=0;U=Ta(484,A|0,299014)|0;f=x;x=0;if(f&1){f=Hc()|0;ka=M;la=f}else{k[z>>2]=k[U>>2];k[z+4>>2]=k[U+4>>2];k[z+8>>2]=k[U+8>>2];k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;x=0;xa(811,E|0,k[d>>2]|0);U=x;x=0;if(U&1){U=Hc()|0;ma=M;na=U}else{U=i[E>>0]|0;f=(U&1)==0;x=0;T=Fa(88,z|0,(f?E+1|0:k[E+8>>2]|0)|0,(f?(U&255)>>>1:k[E+4>>2]|0)|0)|0;U=x;x=0;if(U&1){U=Hc()|0;oa=M;qa=U}else{k[y>>2]=k[T>>2];k[y+4>>2]=k[T+4>>2];k[y+8>>2]=k[T+8>>2];k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;x=0;T=Ta(484,y|0,324339)|0;U=x;x=0;do if(U&1){f=Hc()|0;ra=M;sa=f}else{k[w>>2]=k[T>>2];k[w+4>>2]=k[T+4>>2];k[w+8>>2]=k[T+8>>2];k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;x=0;pa(57,da|0,w|0,75,292971,293006);f=x;x=0;if(f&1){f=Hc()|0;p=M;K2a(w);ra=p;sa=f;break}K2a(w);K2a(y);K2a(E);K2a(z);K2a(A);K2a(D);K2a(B);K2a(C);k[a>>2]=b;P=k[c>>2]|0;Q=a+4|0;k[Q>>2]=P;R=k[d>>2]|0;S=a+8|0;k[S>>2]=R;r=e;return}while(0);K2a(y);oa=ra;qa=sa}K2a(E);ma=oa;na=qa}K2a(z);ka=ma;la=na}K2a(A);ia=ka;ja=la}K2a(D);ga=ia;ha=ja}K2a(B);ea=ga;fa=ha}K2a(C);H=ea;I=fa;Sc(I|0)}function Dya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c+8|0;e=c;f=k[b>>2]|0;k[e>>2]=k[a>>2];k[e+4>>2]=f;x=0;f=Ta(624,e|0,d|0)|0;e=x;x=0;do if(!(e&1)){if(!f){x=0;hb(50);x=0;break}g=k[d>>2]|0;r=c;return g|0}while(0);d=Hc(8512)|0;f=M;if((f|0)!=(hf(8512)|0))Sc(d|0);me(d|0)|0;ge();g=-1;r=c;return g|0}function Eya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+48|0;d=c+40|0;e=c+32|0;f=c+24|0;g=c+16|0;h=c;j=i[b>>0]|0;l=(j&1)==0;m=b+8|0;n=b+1|0;o=l?n:k[m>>2]|0;p=b+4|0;q=l?(j&255)>>>1:k[p>>2]|0;j=o+q|0;a:do if(!q){s=o;t=4}else{l=o;do{if(((i[l>>0]|0)+-48|0)>>>0<10){s=l;t=4;break a}l=l+1|0}while((l|0)!=(j|0))}while(0);if((t|0)==4?(q=s,(s|0)!=(j|0)):0){j=o;l=q-j|0;if(l>>>0<=4294967279)if(l>>>0<11){i[h>>0]=l<<1;u=h+1|0}else t=9;else{GBa(h);t=9}if((t|0)==9){v=l+16&-16;w=KBa(v)|0;k[h+8>>2]=w;k[h>>2]=v|1;k[h+4>>2]=l;u=w}if((o|0)==(s|0))y=u;else{w=o;o=j;j=u;while(1){i[j>>0]=i[w>>0]|0;u=o+1|0;l=j+1|0;if((u|0)==(s|0)){y=l;break}else{w=u;o=u;j=l}}}i[y>>0]=0;y=i[b>>0]|0;j=(y&1)==0;o=(j?n:k[m>>2]|0)+(j?(y&255)>>>1:k[p>>2]|0)|0;b:do if((s|0)==(o|0))z=s;else{y=s;while(1){x=0;j=Ba(605,i[y>>0]|0)|0;w=x;x=0;if(w&1)break;if(!j){z=y;break b}y=y+1|0;if((y|0)==(o|0)){z=o;break b}}y=Hc()|0;A=M;B=y;K2a(h);Sc(B|0)}while(0);k[e>>2]=q;k[e+4>>2]=z;x=0;q=Ta(624,e|0,d|0)|0;e=x;x=0;do if(!(e&1))if(q){C=k[d>>2]|0;t=22;break}else{x=0;hb(50);x=0;t=20;break}else t=20;while(0);do if((t|0)==20){d=Hc(8512)|0;q=M;if((q|0)==(hf(8512)|0)){me(d|0)|0;x=0;hb(45);e=x;x=0;if(e&1)break;else{C=-1;t=22;break}}else{A=q;B=d;K2a(h);Sc(B|0)}}while(0);c:do if((t|0)==22?(x=0,d=Ba(621,h|0)|0,q=x,x=0,!(q&1)):0){d:do if((d|0)==100)if((C+-1|0)>>>0<32?(q=i[b>>0]|0,e=(q&1)==0,(z|0)==((e?n:k[m>>2]|0)+(e?(q&255)>>>1:k[p>>2]|0)|0)):0){k[a>>2]=109;k[a+4>>2]=C;k[a+8>>2]=0}else t=56;else{q=(d|0)==99;if((d&-2|0)==98){if(!((C+-1|0)>>>0<256&(C&7|0)==0)){t=56;break}e=i[b>>0]|0;o=(e&1)==0;if((z|0)!=((o?n:k[m>>2]|0)+(o?(e&255)>>>1:k[p>>2]|0)|0)){t=56;break}if(q){k[a>>2]=108;k[a+4>>2]=C;k[a+8>>2]=0;break}else{k[a>>2]=107;k[a+4>>2]=C;k[a+8>>2]=0;break}}q=(d|0)==106;if((s>>>0>>0&(d+-105|0)>>>0<2?(e=i[b>>0]|0,o=(e&1)==0,y=k[m>>2]|0,j=k[p>>2]|0,w=(o?n:y)+(o?(e&255)>>>1:j)|0,z>>>0>>0):0)?(i[z>>0]|0)==120:0){o=z+1|0;do if((o|0)==(w|0)){D=e;E=y;F=j}else{l=o;while(1){x=0;u=Ba(605,i[l>>0]|0)|0;v=x;x=0;if(v&1)break;if(!u){t=56;break d}l=l+1|0;if((l|0)==(w|0)){t=44;break}}if((t|0)==44){D=i[b>>0]|0;E=k[m>>2]|0;F=k[p>>2]|0;break}l=Hc()|0;A=M;B=l;K2a(h);Sc(B|0)}while(0);w=(D&1)==0;k[g>>2]=o;k[g+4>>2]=(w?n:E)+(w?(D&255)>>>1:F);x=0;w=Ta(624,g|0,f|0)|0;j=x;x=0;do if(!(j&1)){if(!w){x=0;hb(50);x=0;break}y=k[f>>2]|0;if(!(C>>>0<257&(y+-8|0)>>>0<249)){t=56;break d}if(!(((y|C)&7|0)==0&(C+-1+y|0)>>>0<256)){t=56;break d}if(q){k[a>>2]=111;k[a+4>>2]=C;k[a+8>>2]=y;break d}else{k[a>>2]=110;k[a+4>>2]=C;k[a+8>>2]=y;break d}}while(0);q=Hc(8512)|0;w=M;if((w|0)!=(hf(8512)|0)){A=w;B=q;K2a(h);Sc(B|0)}me(q|0)|0;x=0;hb(45);q=x;x=0;if(q&1)break c;t=56}else t=56}while(0);if((t|0)==56){k[a>>2]=119;k[a+4>>2]=0;k[a+8>>2]=0}K2a(h);r=c;return}while(0);t=Hc()|0;A=M;B=t;K2a(h);Sc(B|0)}B=Fya(b)|0;k[a>>2]=B;k[a+4>>2]=0;k[a+8>>2]=0;r=c;return}function Fya(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;b=r;r=r+1296|0;c=b+1284|0;d=b+1280|0;e=b;a:do if((i[8528]|0)==0?(Bb(8528)|0)!=0:0){x=0;fb(140,e|0,293406,6);f=x;x=0;do if(!(f&1)){k[e+12>>2]=49;g=e+16|0;x=0;fb(140,g|0,293413,9);h=x;x=0;if(!(h&1)){k[e+28>>2]=50;h=e+32|0;x=0;fb(140,h|0,293423,2);j=x;x=0;if(!(j&1)){k[e+44>>2]=51;j=e+48|0;x=0;fb(140,j|0,293426,8);l=x;x=0;if(!(l&1)){k[e+60>>2]=52;l=e+64|0;x=0;fb(140,l|0,293435,5);m=x;x=0;if(!(m&1)){k[e+76>>2]=53;m=e+80|0;x=0;fb(140,m|0,293441,8);n=x;x=0;if(!(n&1)){k[e+92>>2]=54;n=e+96|0;x=0;fb(140,n|0,293450,8);o=x;x=0;if(!(o&1)){k[e+108>>2]=55;o=e+112|0;x=0;fb(140,o|0,293459,8);p=x;x=0;if(!(p&1)){k[e+124>>2]=56;p=e+128|0;x=0;fb(140,p|0,293468,7);q=x;x=0;if(!(q&1)){k[e+140>>2]=57;q=e+144|0;x=0;fb(140,q|0,293476,2);s=x;x=0;if(!(s&1)){k[e+156>>2]=58;s=e+160|0;x=0;fb(140,s|0,293479,4);t=x;x=0;if(!(t&1)){k[e+172>>2]=59;t=e+176|0;x=0;fb(140,t|0,293484,4);u=x;x=0;if(!(u&1)){k[e+188>>2]=60;u=e+192|0;x=0;fb(140,u|0,293489,5);v=x;x=0;if(!(v&1)){k[e+204>>2]=61;v=e+208|0;x=0;fb(140,v|0,293495,8);w=x;x=0;if(!(w&1)){k[e+220>>2]=62;w=e+224|0;x=0;fb(140,w|0,293504,3);y=x;x=0;if(!(y&1)){k[e+236>>2]=63;y=e+240|0;x=0;fb(140,y|0,293508,8);z=x;x=0;if(z&1)A=y;else{k[e+252>>2]=64;y=e+256|0;x=0;fb(140,y|0,293517,3);z=x;x=0;if(z&1){A=y;break}k[e+268>>2]=65;y=e+272|0;x=0;fb(140,y|0,293521,2);z=x;x=0;if(z&1){A=y;break}k[e+284>>2]=66;y=e+288|0;x=0;fb(140,y|0,293524,7);z=x;x=0;if(z&1){A=y;break}k[e+300>>2]=67;y=e+304|0;x=0;fb(140,y|0,293532,8);z=x;x=0;if(z&1){A=y;break}k[e+316>>2]=68;y=e+320|0;x=0;fb(140,y|0,293541,6);z=x;x=0;if(z&1){A=y;break}k[e+332>>2]=69;y=e+336|0;x=0;fb(140,y|0,293548,2);z=x;x=0;if(z&1){A=y;break}k[e+348>>2]=70;y=e+352|0;x=0;fb(140,y|0,293551,7);z=x;x=0;if(z&1){A=y;break}k[e+364>>2]=71;y=e+368|0;x=0;fb(140,y|0,293559,7);z=x;x=0;if(z&1){A=y;break}k[e+380>>2]=72;y=e+384|0;x=0;fb(140,y|0,293567,6);z=x;x=0;if(z&1){A=y;break}k[e+396>>2]=73;y=e+400|0;x=0;fb(140,y|0,293574,8);z=x;x=0;if(z&1){A=y;break}k[e+412>>2]=74;y=e+416|0;x=0;fb(140,y|0,293583,3);z=x;x=0;if(z&1){A=y;break}k[e+428>>2]=75;y=e+432|0;x=0;fb(140,y|0,293587,7);z=x;x=0;if(z&1){A=y;break}k[e+444>>2]=76;y=e+448|0;x=0;fb(140,y|0,293595,6);z=x;x=0;if(z&1){A=y;break}k[e+460>>2]=77;y=e+464|0;x=0;fb(140,y|0,293602,6);z=x;x=0;if(z&1){A=y;break}k[e+476>>2]=78;y=e+480|0;x=0;fb(140,y|0,293609,7);z=x;x=0;if(z&1){A=y;break}k[e+492>>2]=79;y=e+496|0;x=0;fb(140,y|0,296966,6);z=x;x=0;if(z&1){A=y;break}k[e+508>>2]=80;y=e+512|0;x=0;fb(140,y|0,293617,7);z=x;x=0;if(z&1){A=y;break}k[e+524>>2]=81;y=e+528|0;x=0;fb(140,y|0,293625,7);z=x;x=0;if(z&1){A=y;break}k[e+540>>2]=82;y=e+544|0;x=0;fb(140,y|0,293633,6);z=x;x=0;if(z&1){A=y;break}k[e+556>>2]=83;y=e+560|0;x=0;fb(140,y|0,301498,5);z=x;x=0;if(z&1){A=y;break}k[e+572>>2]=84;y=e+576|0;x=0;fb(140,y|0,293640,5);z=x;x=0;if(z&1){A=y;break}k[e+588>>2]=85;y=e+592|0;x=0;fb(140,y|0,293646,3);z=x;x=0;if(z&1){A=y;break}k[e+604>>2]=86;y=e+608|0;x=0;fb(140,y|0,293650,5);z=x;x=0;if(z&1){A=y;break}k[e+620>>2]=87;y=e+624|0;x=0;fb(140,y|0,293656,3);z=x;x=0;if(z&1){A=y;break}k[e+636>>2]=88;y=e+640|0;x=0;fb(140,y|0,293660,5);z=x;x=0;if(z&1){A=y;break}k[e+652>>2]=89;y=e+656|0;x=0;fb(140,y|0,293666,6);z=x;x=0;if(z&1){A=y;break}k[e+668>>2]=90;y=e+672|0;x=0;fb(140,y|0,293673,5);z=x;x=0;if(z&1){A=y;break}k[e+684>>2]=91;y=e+688|0;x=0;fb(140,y|0,293679,7);z=x;x=0;if(z&1){A=y;break}k[e+700>>2]=92;y=e+704|0;x=0;fb(140,y|0,293687,7);z=x;x=0;if(z&1){A=y;break}k[e+716>>2]=93;y=e+720|0;x=0;fb(140,y|0,293695,5);z=x;x=0;if(z&1){A=y;break}k[e+732>>2]=94;y=e+736|0;x=0;fb(140,y|0,293701,4);z=x;x=0;if(z&1){A=y;break}k[e+748>>2]=95;y=e+752|0;x=0;fb(140,y|0,293706,5);z=x;x=0;if(z&1){A=y;break}k[e+764>>2]=96;y=e+768|0;x=0;fb(140,y|0,293712,5);z=x;x=0;if(z&1){A=y;break}k[e+780>>2]=97;y=e+784|0;x=0;fb(140,y|0,301574,3);z=x;x=0;if(z&1){A=y;break}k[e+796>>2]=98;y=e+800|0;x=0;fb(140,y|0,293718,4);z=x;x=0;if(z&1){A=y;break}k[e+812>>2]=99;y=e+816|0;x=0;fb(140,y|0,293723,5);z=x;x=0;if(z&1){A=y;break}k[e+828>>2]=100;y=e+832|0;x=0;fb(140,y|0,296973,4);z=x;x=0;if(z&1){A=y;break}k[e+844>>2]=101;y=e+848|0;x=0;fb(140,y|0,293729,6);z=x;x=0;if(z&1){A=y;break}k[e+860>>2]=102;y=e+864|0;x=0;fb(140,y|0,293736,7);z=x;x=0;if(z&1){A=y;break}k[e+876>>2]=103;y=e+880|0;x=0;fb(140,y|0,301569,4);z=x;x=0;if(z&1){A=y;break}k[e+892>>2]=104;y=e+896|0;x=0;fb(140,y|0,293744,5);z=x;x=0;if(z&1){A=y;break}k[e+908>>2]=105;y=e+912|0;x=0;fb(140,y|0,293750,6);z=x;x=0;if(z&1){A=y;break}k[e+924>>2]=106;y=e+928|0;x=0;fb(140,y|0,293757,4);z=x;x=0;if(z&1){A=y;break}k[e+940>>2]=113;y=e+944|0;x=0;fb(140,y|0,330262,4);z=x;x=0;if(z&1){A=y;break}k[e+956>>2]=114;y=e+960|0;x=0;fb(140,y|0,330267,5);z=x;x=0;if(z&1){A=y;break}k[e+972>>2]=115;y=e+976|0;x=0;fb(140,y|0,293762,8);z=x;x=0;if(z&1){A=y;break}k[e+988>>2]=120;y=e+992|0;x=0;fb(140,y|0,293771,5);z=x;x=0;if(z&1){A=y;break}k[e+1004>>2]=121;y=e+1008|0;x=0;fb(140,y|0,293777,4);z=x;x=0;if(z&1){A=y;break}k[e+1020>>2]=122;y=e+1024|0;x=0;fb(140,y|0,293782,5);z=x;x=0;if(z&1){A=y;break}k[e+1036>>2]=123;y=e+1040|0;x=0;fb(140,y|0,293788,5);z=x;x=0;if(z&1){A=y;break}k[e+1052>>2]=124;y=e+1056|0;x=0;fb(140,y|0,293794,2);z=x;x=0;if(z&1){A=y;break}k[e+1068>>2]=125;y=e+1072|0;x=0;fb(140,y|0,293797,6);z=x;x=0;if(z&1){A=y;break}k[e+1084>>2]=126;y=e+1088|0;x=0;fb(140,y|0,293804,9);z=x;x=0;if(z&1){A=y;break}k[e+1100>>2]=127;y=e+1104|0;x=0;fb(140,y|0,293814,3);z=x;x=0;if(z&1){A=y;break}k[e+1116>>2]=128;y=e+1120|0;x=0;fb(140,y|0,293818,5);z=x;x=0;if(z&1){A=y;break}k[e+1132>>2]=129;y=e+1136|0;x=0;fb(140,y|0,293824,2);z=x;x=0;if(z&1){A=y;break}k[e+1148>>2]=130;y=e+1152|0;x=0;fb(140,y|0,293827,4);z=x;x=0;if(z&1){A=y;break}k[e+1164>>2]=131;y=e+1168|0;x=0;fb(140,y|0,293832,11);z=x;x=0;if(z&1){A=y;break}k[e+1180>>2]=132;y=e+1184|0;x=0;fb(140,y|0,293844,6);z=x;x=0;if(z&1){A=y;break}k[e+1196>>2]=133;y=e+1200|0;x=0;fb(140,y|0,293851,6);z=x;x=0;if(z&1){A=y;break}k[e+1212>>2]=134;y=e+1216|0;x=0;fb(140,y|0,293858,3);z=x;x=0;if(z&1){A=y;break}k[e+1228>>2]=135;y=e+1232|0;x=0;fb(140,y|0,293862,4);z=x;x=0;if(z&1){A=y;break}k[e+1244>>2]=136;y=e+1248|0;x=0;fb(140,y|0,293867,6);z=x;x=0;if(z&1){A=y;break}k[e+1260>>2]=137;y=e+1264|0;x=0;fb(140,y|0,293874,4);z=x;x=0;if(z&1){A=y;break}k[e+1276>>2]=138;k[11719]=0;k[11720]=0;k[11718]=46876;y=e+1280|0;z=e;while(1){k[d>>2]=46876;x=0;k[c>>2]=k[d>>2];Fa(145,46872,c|0,z|0)|0;B=x;x=0;if(B&1)break;z=z+16|0;if((z|0)==(y|0)){C=y;D=86;break}}if((D|0)==86){while(1){D=0;C=C+-16|0;K2a(C);if((C|0)==(e|0))break;else D=86}Kc(8528);break a}z=Hc()|0;B=M;Lya(46872,k[11719]|0);E=y;do{E=E+-16|0;K2a(E)}while((E|0)!=(e|0));F=B;G=z;Cd(8528);Sc(G|0)}}else A=w}else A=v}else A=u}else A=t}else A=s}else A=q}else A=p}else A=o}else A=n}else A=m}else A=l}else A=j}else A=h}else A=g}else A=e;while(0);f=Hc()|0;E=M;if((e|0)==(A|0)){F=E;G=f;Cd(8528);Sc(G|0)}else H=A;do{H=H+-16|0;K2a(H)}while((H|0)!=(e|0));F=E;G=f;Cd(8528);Sc(G|0)}while(0);G=Kya(46872,a)|0;if((G|0)==46876){I=119;r=b;return I|0}I=k[G+28>>2]|0;r=b;return I|0}function Gya(){k[11756]=0;k[11757]=0;k[11758]=0;return}function Hya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+176|0;d=c+168|0;e=c+148|0;f=c;fza(f);x=0;g=Ta(625,f|0,a|0)|0;a=x;x=0;do if(!(a&1)){if(g){h=k[f+140>>2]|0;j=k[f+144>>2]|0;l=j;if((h|0)==(j|0))m=0;else{k[d>>2]=0;j=i[h>>0]|0;n=j<<24>>24==45;switch(j<<24>>24){case 43:case 45:{o=h+1|0;break}default:o=h}i[e>>0]=0;k[e+4>>2]=1;k[e+8>>2]=d;k[e+12>>2]=o;k[e+16>>2]=l;x=0;l=Ba(622,e|0)|0;h=x;x=0;if(h&1)break;h=k[d>>2]|0;k[b>>2]=n?0-h|0:h;m=l&(n?h>>>0<2147483649:(h|0)>-1)}p=m}else p=0;k[f>>2]=20300;h=f+56|0;k[h>>2]=20320;n=f+4|0;k[n>>2]=20392;K2a(f+36|0);obb(n);mab(h);r=c;return p|0}while(0);p=Hc()|0;k[f>>2]=20300;c=f+56|0;k[c>>2]=20320;m=f+4|0;k[m>>2]=20392;K2a(f+36|0);obb(m);mab(c);Sc(p|0);return 0}function Iya(){var a=0,b=0;a=r;r=r+16|0;b=a;CCa(b);k[b>>2]=46892;k[b+4>>2]=8536;k[b+8>>2]=9584;x=0;va(1524,b|0);x=0;a=Hc()|0;DCa(b);Sc(a|0)}function Jya(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(32)|0;i=h+16|0;x=0;xa(604,i|0,c|0);j=x;x=0;if(j&1){j=Hc()|0;OBa(h);Sc(j|0)}k[h+28>>2]=k[c+12>>2];k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=Mya(a,e,f,i)|0;i=k[g>>2]|0;if(!i){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)l=h;else{k[a>>2]=e;l=k[g>>2]|0}ui(k[a+4>>2]|0,l);l=a+8|0;k[l>>2]=(k[l>>2]|0)+1;m=h;r=d;return m|0}else{if((i|0)==(h|0)){m=i;r=d;return m|0}K2a(h+16|0);OBa(h);m=i;r=d;return m|0}return 0}function Kya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=a+4|0;a=k[c>>2]|0;if(a){d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=e?b+1|0:k[b+8>>2]|0;b=c;e=a;a:while(1){a=e;while(1){g=a+16|0;h=i[g>>0]|0;j=(h&1)==0;l=j?(h&255)>>>1:k[a+20>>2]|0;h=ZLa(j?g+1|0:k[a+24>>2]|0,d,f>>>0>>0?f:l)|0;if((((h|0)==0?(l>>>0>>0?-2147483648:0):h)|0)>=0){m=a;break}a=k[a+4>>2]|0;if(!a){n=b;break a}}e=k[m>>2]|0;if(!e){n=m;break}else b=m}if((n|0)!=(c|0)?(m=n+16|0,b=i[m>>0]|0,e=(b&1)==0,a=e?(b&255)>>>1:k[n+20>>2]|0,b=ZLa(d,e?m+1|0:k[n+24>>2]|0,a>>>0>>0?a:f)|0,(((b|0)==0?(f>>>0>>0?-2147483648:0):b)|0)>=0):0){o=n;return o|0}}o=c;return o|0}function Lya(a,b){a=a|0;b=b|0;if(!b)return;else{Lya(a,k[b>>2]|0);Lya(a,k[b+4>>2]|0);K2a(b+16|0);OBa(b);return}}function Mya(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=f+16|0,h=i[d>>0]|0,j=(h&1)==0,l=j?(h&255)>>>1:k[d+4>>2]|0,h=i[g>>0]|0,m=(h&1)==0,n=m?(h&255)>>>1:k[f+20>>2]|0,h=j?d+1|0:k[d+8>>2]|0,j=m?g+1|0:k[f+24>>2]|0,g=n>>>0>>0,m=ZLa(h,j,g?n:l)|0,o=l>>>0>>0,(((m|0)==0?(o?-2147483648:0):m)|0)>=0):0){m=ZLa(j,h,o?l:n)|0;if((((m|0)==0?(g?-2147483648:0):m)|0)>=0){k[c>>2]=b;p=c;return p|0}m=f+4|0;g=k[m>>2]|0;n=(g|0)==0;if(n){o=f;while(1){j=k[o+8>>2]|0;if((k[j>>2]|0)==(o|0)){q=j;break}else o=j}}else{o=g;while(1){g=k[o>>2]|0;if(!g){q=o;break}else o=g}}if((q|0)!=(e|0)?(e=q+16|0,o=i[e>>0]|0,g=(o&1)==0,j=g?(o&255)>>>1:k[q+20>>2]|0,o=ZLa(h,g?e+1|0:k[q+24>>2]|0,j>>>0>>0?j:l)|0,(((o|0)==0?(l>>>0>>0?-2147483648:0):o)|0)>=0):0){p=Nya(a,c,d)|0;return p|0}if(n){k[c>>2]=f;p=m;return p|0}else{k[c>>2]=q;p=q;return p|0}}if((f|0)!=(k[a>>2]|0)){q=k[f>>2]|0;if(!q){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0))m=n;else{r=n;break}}}else{m=q;while(1){q=k[m+4>>2]|0;if(!q){r=m;break}else m=q}}m=r+16|0;q=i[m>>0]|0;n=(q&1)==0;o=n?(q&255)>>>1:k[r+20>>2]|0;q=i[d>>0]|0;j=(q&1)==0;l=j?(q&255)>>>1:k[d+4>>2]|0;q=ZLa(n?m+1|0:k[r+24>>2]|0,j?d+1|0:k[d+8>>2]|0,l>>>0>>0?l:o)|0;if((((q|0)==0?(o>>>0>>0?-2147483648:0):q)|0)<0)s=r;else{p=Nya(a,c,d)|0;return p|0}}else s=b;if(!(k[f>>2]|0)){k[c>>2]=f;p=f;return p|0}else{f=s;k[c>>2]=f;p=f+4|0;return p|0}return 0}function Nya(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function Oya(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+32|0;c=b;b=Rd(36)|0;d=a+4|0;a=k[d+4>>2]|0;e=c+4|0;k[e>>2]=k[d>>2];k[e+4>>2]=a;a=c+12|0;e=c+16|0;k[e>>2]=0;k[c+20>>2]=0;k[c+24>>2]=0;k[c+28>>2]=-1;k[c>>2]=46912;k[a>>2]=46932;x=0;xa(922,b|0,c|0);d=x;x=0;if(d&1)f=1;else{x=0;fb(149,b|0,8552,1207);x=0;f=0}d=Hc()|0;k[a>>2]=20796;a=k[e>>2]|0;if(a){x=0;g=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(g)k[e>>2]=0}DCa(c);if(!f)Sc(d|0);Fc(b|0);Sc(d|0)}function Pya(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=a+32|0;k[c>>2]=21368;k[a>>2]=46892;d=b+4|0;e=k[d+4>>2]|0;f=a+4|0;k[f>>2]=k[d>>2];k[f+4>>2]=e;e=a+12|0;k[e>>2]=20796;f=k[b+16>>2]|0;k[a+16>>2]=f;if((f|0)!=0?(x=0,va(k[(k[f>>2]|0)+12>>2]|0,f|0),f=x,x=0,f&1):0){f=Hc()|0;d=M;DCa(a);g=d;h=f;Sc(h|0)}f=a+20|0;d=b+20|0;k[f>>2]=k[d>>2];k[f+4>>2]=k[d+4>>2];k[f+8>>2]=k[d+8>>2];k[a>>2]=46952;d=a+12|0;k[d>>2]=46980;k[c>>2]=47008;x=0;xa(608,d|0,b+12|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;d=M;k[e>>2]=20796;e=a+16|0;c=k[e>>2]|0;if(c){x=0;f=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(f)k[e>>2]=0}DCa(a);g=d;h=b;Sc(h|0)}function Qya(a){a=a|0;var b=0,c=0,d=0;k[a+12>>2]=20796;b=a+16|0;c=k[b>>2]|0;if(!c){DCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){DCa(a);return}k[b>>2]=0;DCa(a);return}function Rya(a){a=a|0;var b=0,c=0,d=0;k[a+12>>2]=20796;b=a+16|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}DCa(a);OBa(a);return}function Sya(a){a=a|0;return 295171}function Tya(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(36)|0;x=0;i[c>>0]=i[b>>0]|0;fb(400,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-12>>2]|0)|0}return 0}function Uya(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Rd(36)|0;c=b+32|0;k[c>>2]=21368;k[b>>2]=46892;d=a+4|0;e=k[d+4>>2]|0;f=b+4|0;k[f>>2]=k[d>>2];k[f+4>>2]=e;e=b+12|0;k[e>>2]=20796;f=k[a+16>>2]|0;k[b+16>>2]=f;if((f|0)!=0?(x=0,va(k[(k[f>>2]|0)+12>>2]|0,f|0),f=x,x=0,f&1):0){f=Hc()|0;DCa(b);Fc(b|0);Sc(f|0)}f=b+20|0;d=a+20|0;k[f>>2]=k[d>>2];k[f+4>>2]=k[d+4>>2];k[f+8>>2]=k[d+8>>2];k[b>>2]=46952;k[e>>2]=46980;k[c>>2]=47008;Gf(b|0,8552,1207)}function Vya(a){a=a|0;var b=0,c=0,d=0;b=a+-12|0;k[b+12>>2]=20796;a=b+16|0;c=k[a>>2]|0;if(!c){DCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){DCa(b);return}k[a>>2]=0;DCa(b);return}function Wya(a){a=a|0;var b=0,c=0,d=0;b=a+-12|0;k[b+12>>2]=20796;a=b+16|0;c=k[a>>2]|0;if(!c){DCa(b);OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){DCa(b);OBa(b);return}k[a>>2]=0;DCa(b);OBa(b);return}function Xya(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(36)|0;x=0;i[c>>0]=i[b>>0]|0;fb(400,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-12>>2]|0)|0}return 0}function Yya(a){a=a|0;Uya(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Zya(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+12>>2]=20796;a=b+16|0;c=k[a>>2]|0;if(!c){DCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){DCa(b);return}k[a>>2]=0;DCa(b);return}function _ya(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+12>>2]=20796;a=b+16|0;c=k[a>>2]|0;if(!c){DCa(b);OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){DCa(b);OBa(b);return}k[a>>2]=0;DCa(b);OBa(b);return}function $ya(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=a+32|0;k[c>>2]=21368;k[a>>2]=46892;d=b+4|0;e=k[d+4>>2]|0;f=a+4|0;k[f>>2]=k[d>>2];k[f+4>>2]=e;e=a+12|0;k[e>>2]=20796;f=k[b+16>>2]|0;k[a+16>>2]=f;if((f|0)!=0?(x=0,va(k[(k[f>>2]|0)+12>>2]|0,f|0),f=x,x=0,f&1):0){f=Hc()|0;d=M;DCa(a);g=d;h=f;Sc(h|0)}f=a+20|0;d=b+20|0;k[f>>2]=k[d>>2];k[f+4>>2]=k[d+4>>2];k[f+8>>2]=k[d+8>>2];k[a>>2]=46952;d=a+12|0;k[d>>2]=46980;k[c>>2]=47008;x=0;xa(608,d|0,b+12|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;d=M;k[e>>2]=20796;e=a+16|0;c=k[e>>2]|0;if(c){x=0;f=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(f)k[e>>2]=0}DCa(a);g=d;h=b;Sc(h|0)}function aza(a){a=a|0;var b=0,c=0,d=0;k[a+12>>2]=20796;b=a+16|0;c=k[b>>2]|0;if(!c){DCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){DCa(a);return}k[b>>2]=0;DCa(a);return}function bza(a){a=a|0;var b=0,c=0,d=0;k[a+12>>2]=20796;b=a+16|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}DCa(a);OBa(a);return}function cza(a){a=a|0;var b=0,c=0,d=0;b=a+-12|0;k[b+12>>2]=20796;a=b+16|0;c=k[a>>2]|0;if(!c){DCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){DCa(b);return}k[a>>2]=0;DCa(b);return}function dza(a){a=a|0;var b=0,c=0,d=0;b=a+-12|0;k[b+12>>2]=20796;a=b+16|0;c=k[a>>2]|0;if(!c){DCa(b);OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){DCa(b);OBa(b);return}k[a>>2]=0;DCa(b);OBa(b);return}function eza(a){a=a|0;DCa(a);OBa(a);return}function fza(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=r;r=r+16|0;c=b;d=a+56|0;e=a+4|0;k[a>>2]=20356;k[d>>2]=20376;x=0;xa(582,a+56|0,e|0);f=x;x=0;if(f&1){f=Hc(0)|0;g=f;mab(d);Fg(g)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=20300;k[a+56>>2]=20320;x=0;va(1449,e|0);f=x;x=0;do if(!(f&1)){k[e>>2]=20392;h=a+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[a+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;xa(583,e|0,c|0);i=x;x=0;if(i&1){i=Hc(0)|0;K2a(c);K2a(h);obb(e);j=i;break}else{K2a(c);k[a+140>>2]=a+136;k[a+144>>2]=a+138;r=b;return}}else{i=Hc(0)|0;j=i}while(0);g=j;mab(d);Fg(g)}function gza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[e+20>>2]=1;cab(e,k[e+16>>2]|0);e=k[b>>2]|0;f=k[b+4>>2]|0;a:do if((e|0)!=(f|0)){b=e;while(1){i[d>>0]=i[b>>0]|0;x=0;Fa(92,a|0,d|0,1)|0;g=x;x=0;if(g&1)break;b=b+1|0;if((b|0)==(f|0))break a}b=Hc(17536)|0;g=M;if((g|0)!=(hf(17536)|0))Sc(b|0);me(b|0)|0;ge();h=0;r=c;return h|0}while(0);f=(k[a+(k[(k[a>>2]|0)+-12>>2]|0)+16>>2]&5|0)==0;k[a+140>>2]=k[a+24>>2];k[a+144>>2]=k[a+28>>2];h=f;r=c;return h|0}function hza(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;b=r;r=r+16|0;c=b+12|0;d=b;e=a+16|0;f=k[e>>2]|0;g=f+-1|0;k[e>>2]=g;h=a+8|0;k[k[h>>2]>>2]=0;j=a+12|0;if((k[j>>2]|0)>>>0>g>>>0){m=0;r=b;return m|0}n=i[g>>0]|0;if((n+-48&255)>9){m=0;r=b;return m|0}k[k[h>>2]>>2]=(n<<24>>24)+-48;k[e>>2]=f+-2;Zpb(c);x=0;f=$a(48)|0;n=x;x=0;a:do if(!(n&1)?(x=0,g=Ta(538,c|0,f|0)|0,o=x,x=0,!(o&1)):0){b:do if(g){o=k[e>>2]|0;p=k[j>>2]|0;if(o>>>0

      >>0)q=1;else{s=a+4|0;t=i[a>>0]|0;u=o;while(1){o=k[s>>2]|0;t=t<<24>>24==0?o>>>0>429496729&1:1;i[a>>0]=t;v=o*10|0;k[s>>2]=v;o=i[u>>0]|0;w=(o<<24>>24)+-48|0;y=ia(w,v)|0;if((o+-48&255)>9){q=0;break b}if(w){if(t<<24>>24){q=0;break b}if((4294967295/(w>>>0)|0)>>>0>>0){q=0;break b}v=k[h>>2]|0;w=k[v>>2]|0;if(w>>>0>~y>>>0){q=0;break b}else{z=w;A=v}}else{v=k[h>>2]|0;z=k[v>>2]|0;A=v}k[A>>2]=z+y;u=u+-1|0;k[e>>2]=u;if(u>>>0

      >>0){q=1;break}}}}else{x=0;p=Ta(495,c|0,74408)|0;u=x;x=0;if(u&1)break a;x=0;xa(k[(k[p>>2]|0)+20>>2]|0,d|0,p|0);u=x;x=0;if(u&1)break a;u=i[d>>0]|0;t=(u&1)==0;s=t?(u&255)>>>1:k[d+4>>2]|0;c:do if((s|0)!=0?(u=d+8|0,y=d+1|0,(i[(t?y:k[u>>2]|0)>>0]|0)>=1):0){x=0;v=Ba(k[(k[p>>2]|0)+16>>2]|0,p|0)|0;w=x;x=0;if(w&1){w=Hc()|0;o=M;K2a(d);B=w;C=o;$pb(c);Sc(B|0)}o=k[e>>2]|0;w=k[j>>2]|0;if(o>>>0>>0)D=1;else{E=k[u>>2]|0;u=s+-1|0;F=a+4|0;G=o;o=0;H=(l[((i[d>>0]&1)==0?y:E)>>0]|0)+255&255;while(1){if(!(H<<24>>24)){if((i[G>>0]|0)!=v<<24>>24){I=G;break}if((w|0)==(G|0)){D=0;break c}J=((o&255)>>>0>>0&1)+o<<24>>24;K=J;L=i[((i[d>>0]&1)==0?y:E)+(J&255)>>0]|0}else{J=k[F>>2]|0;N=(i[a>>0]|0)==0?J>>>0>429496729&1:1;i[a>>0]=N;O=J*10|0;k[F>>2]=O;J=i[G>>0]|0;P=(J<<24>>24)+-48|0;Q=ia(P,O)|0;if((J+-48&255)>9){D=0;break c}if(P){if(N<<24>>24){D=0;break c}if((4294967295/(P>>>0)|0)>>>0>>0){D=0;break c}O=k[h>>2]|0;P=k[O>>2]|0;if(P>>>0>~Q>>>0){D=0;break c}else{R=P;S=O}}else{O=k[h>>2]|0;R=k[O>>2]|0;S=O}k[S>>2]=R+Q;K=o;L=H+-1<<24>>24}G=G+-1|0;k[e>>2]=G;if(G>>>0>>0){D=1;break c}else{o=K;H=L}}H=i[a>>0]|0;o=I;while(1){G=k[F>>2]|0;H=H<<24>>24==0?G>>>0>429496729&1:1;i[a>>0]=H;E=G*10|0;k[F>>2]=E;G=i[o>>0]|0;y=(G<<24>>24)+-48|0;u=ia(y,E)|0;if((G+-48&255)>9){D=0;break c}if(y){if(H<<24>>24){D=0;break c}if((4294967295/(y>>>0)|0)>>>0>>0){D=0;break c}E=k[h>>2]|0;y=k[E>>2]|0;if(y>>>0>~u>>>0){D=0;break c}else{T=y;U=E}}else{E=k[h>>2]|0;T=k[E>>2]|0;U=E}k[U>>2]=T+u;o=o+-1|0;k[e>>2]=o;if(o>>>0>>0){D=1;break}}}}else V=20;while(0);d:do if((V|0)==20){s=k[e>>2]|0;p=k[j>>2]|0;if(s>>>0

      >>0)D=1;else{t=a+4|0;w=i[a>>0]|0;o=s;while(1){s=k[t>>2]|0;w=w<<24>>24==0?s>>>0>429496729&1:1;i[a>>0]=w;H=s*10|0;k[t>>2]=H;s=i[o>>0]|0;F=(s<<24>>24)+-48|0;u=ia(F,H)|0;if((s+-48&255)>9){D=0;break d}if(F){if(w<<24>>24){D=0;break d}if((4294967295/(F>>>0)|0)>>>0>>0){D=0;break d}H=k[h>>2]|0;F=k[H>>2]|0;if(F>>>0>~u>>>0){D=0;break d}else{W=F;X=H}}else{H=k[h>>2]|0;W=k[H>>2]|0;X=H}k[X>>2]=W+u;o=o+-1|0;k[e>>2]=o;if(o>>>0

      >>0){D=1;break}}}}while(0);K2a(d);q=D}while(0);$pb(c);m=q;r=b;return m|0}while(0);m=Hc()|0;B=m;C=M;$pb(c);Sc(B|0);return 0}function iza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+32|0;d=c+8|0;e=c;f=KBa(40)|0;k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=47044;g=f+12|0;k[g>>2]=-1;k[f+16>>2]=-1;h=f+20|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;k[a>>2]=g;g=a+4|0;h=k[g>>2]|0;k[g>>2]=f;if(h)j0a(h);k[d>>2]=0;h=d+4|0;k[h>>2]=0;k[d+8>>2]=a+8;x=0;fb(396,e|0,d|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;d=k[h>>2]|0;if(!d)Sc(b|0);j0a(d);Sc(b|0)}b=k[e>>2]|0;if(!b)i=0;else{mza(k[a>>2]|0,b)|0;i=1}b=k[e+4>>2]|0;if(b)j0a(b);b=k[h>>2]|0;if(!b){r=c;return i|0}j0a(b);r=c;return i|0}function jza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+32|0;d=c+24|0;e=c;k[d>>2]=k[b>>2];k[d+4>>2]=b+8;b=e+16|0;k[b>>2]=0;x=0;fb(401,a|0,d|0,e|0);d=x;x=0;if(d&1){d=Hc()|0;a=k[b>>2]|0;if((a|0)==(e|0)){Sf[k[(k[a>>2]|0)+16>>2]&2047](a);Sc(d|0)}if(!a)Sc(d|0);Sf[k[(k[a>>2]|0)+20>>2]&2047](a);Sc(d|0)}else{d=k[b>>2]|0;if((d|0)==(e|0)){Sf[k[(k[e>>2]|0)+16>>2]&2047](e);r=c;return}if(!d){r=c;return}Sf[k[(k[d>>2]|0)+20>>2]&2047](d);r=c;return}}function kza(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;a=r;r=r+80|0;e=a+56|0;f=a+48|0;g=a+24|0;h=a+40|0;i=a+8|0;j=a;k[e>>2]=0;l=e+4|0;k[l>>2]=0;k[e+8>>2]=0;x=0;xa(604,g|0,b|0);b=x;x=0;do if(!(b&1)){k[g+12>>2]=0;x=0;fb(402,f|0,g|0,295719);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(g);o=n;p=m;break}K2a(g);k[i>>2]=0;m=i+4|0;k[m>>2]=0;k[i+8>>2]=e;x=0;fb(396,h|0,i|0,f|0);n=x;x=0;a:do if(n&1){q=Hc()|0;s=M;t=k[m>>2]|0;if(!t){u=s;v=q}else{j0a(t);u=s;v=q}}else{q=k[m>>2]|0;if(q)j0a(q);do if((k[e>>2]|0)==(k[l>>2]|0)){k[j>>2]=k[h>>2];k[j+4>>2]=e;x=0;fb(337,j|0,c|0,d|0);q=x;x=0;if(!(q&1)){w=(k[e>>2]|0)==(k[l>>2]|0);break}q=Hc()|0;s=M;t=k[h+4>>2]|0;if(!t){u=s;v=q;break a}j0a(t);u=s;v=q;break a}else w=0;while(0);q=k[h+4>>2]|0;if(q)j0a(q);q=k[f+4>>2]|0;if(q)j0a(q);q=k[e>>2]|0;if(!q){r=a;return w|0}s=k[l>>2]|0;if((s|0)==(q|0))y=q;else{t=s;while(1){s=t+-8|0;k[l>>2]=s;z=k[t+-4>>2]|0;if(!z)A=s;else{j0a(z);A=k[l>>2]|0}if((A|0)==(q|0))break;else t=A}y=k[e>>2]|0}OBa(y);r=a;return w|0}while(0);m=k[f+4>>2]|0;if(!m){o=u;p=v}else{j0a(m);o=u;p=v}}else{m=Hc()|0;o=M;p=m}while(0);o=k[e>>2]|0;if(!o)Sc(p|0);v=k[l>>2]|0;if((v|0)==(o|0))B=o;else{u=v;while(1){v=u+-8|0;k[l>>2]=v;f=k[u+-4>>2]|0;if(!f)C=v;else{j0a(f);C=k[l>>2]|0}if((C|0)==(o|0))break;else u=C}B=k[e>>2]|0}OBa(B);Sc(p|0);return 0}function lza(){k[11766]=0;k[11767]=0;k[11768]=0;return}function mza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+16|0;d=c+4|0;e=c+3|0;f=c+2|0;g=c+1|0;h=c;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];j=b+8|0;l=k[j>>2]|0;m=b+12|0;n=k[m>>2]|0;k[j>>2]=0;k[m>>2]=0;k[a+8>>2]=l;l=a+12|0;m=k[l>>2]|0;k[l>>2]=n;if(m)j0a(m);m=a+16|0;n=b+16|0;l=k[m>>2]|0;if(!l){o=a+20|0;p=a+24|0;q=k[n>>2]|0;k[m>>2]=q;s=b+20|0;t=k[s>>2]|0;k[o>>2]=t;u=b+24|0;v=k[u>>2]|0;k[p>>2]=v;k[u>>2]=0;k[s>>2]=0;k[n>>2]=0;r=c;return a|0}j=a+20|0;w=k[j>>2]|0;if((w|0)==(l|0))x=l;else{y=w;do{w=y+-56|0;k[j>>2]=w;z=k[w>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(z,z>>31^z,h,y+-52|0,e,d,0,0);y=k[j>>2]|0}while((y|0)!=(l|0));x=k[m>>2]|0}OBa(x);x=a+24|0;k[x>>2]=0;k[j>>2]=0;k[m>>2]=0;o=j;p=x;q=k[n>>2]|0;k[m>>2]=q;s=b+20|0;t=k[s>>2]|0;k[o>>2]=t;u=b+24|0;v=k[u>>2]|0;k[p>>2]=v;k[u>>2]=0;k[s>>2]=0;k[n>>2]=0;r=c;return a|0}function nza(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d;f=KBa(200)|0;k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=43156;g=RLa(c)|0;x=0;fb(140,e|0,c|0,g|0);g=x;x=0;if(g&1){g=Hc()|0;h=M;i=g;c0a(f);OBa(f);Sc(i|0)}g=f+12|0;x=0;fb(361,g|0,b|0,e|0);b=x;x=0;if(!(b&1)){K2a(e);k[a>>2]=g;k[a+4>>2]=f;r=d;return}d=Hc()|0;a=M;K2a(e);h=a;i=d;c0a(f);OBa(f);Sc(i|0)}function oza(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;h=r;r=r+16|0;g=h+4|0;f=h+3|0;e=h+2|0;c=h+1|0;a=h;do switch(b|0){case 0:{j=k[d+12>>2]|0;if(!j){r=h;return}j0a(j);r=h;return}case 1:{K2a(d+20|0);j=k[d+12>>2]|0;if(!j){r=h;return}j0a(j);r=h;return}case 2:{K2a(d+16|0);j=k[d+12>>2]|0;if(!j){r=h;return}j0a(j);r=h;return}case 3:{K2a(d+32|0);j=k[d+28>>2]|0;if(j)j0a(j);j=k[d+12>>2]|0;if(!j){r=h;return}j0a(j);r=h;return}case 4:{K2a(d+16|0);j=k[d+12>>2]|0;if(!j){r=h;return}j0a(j);r=h;return}case 5:{j=k[d+48>>2]|0;if(j)j0a(j);K2a(d+32|0);j=k[d+28>>2]|0;if(j)j0a(j);j=k[d+12>>2]|0;if(!j){r=h;return}j0a(j);r=h;return}case 6:{j=d+36|0;l=k[j>>2]|0;if(l){m=d+40|0;n=k[m>>2]|0;if((n|0)==(l|0))o=l;else{p=n;do{n=p+-56|0;k[m>>2]=n;q=k[n>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[c>>0]|0;oza(q,q>>31^q,a,p+-52|0,f,g,0,0);p=k[m>>2]|0}while((p|0)!=(l|0));o=k[j>>2]|0}OBa(o)}l=k[d+28>>2]|0;if(l)j0a(l);l=k[d+12>>2]|0;if(!l){r=h;return}j0a(l);r=h;return}case 7:{l=k[d+32>>2]|0;if(l)j0a(l);K2a(d+16|0);l=k[d+12>>2]|0;if(!l){r=h;return}j0a(l);r=h;return}case 8:{l=d+16|0;p=k[l>>2]|0;if(p){m=d+20|0;q=k[m>>2]|0;if((q|0)==(p|0))s=p;else{n=q;do{q=n+-56|0;k[m>>2]=q;t=k[q>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[c>>0]|0;oza(t,t>>31^t,a,n+-52|0,f,g,0,0);n=k[m>>2]|0}while((n|0)!=(p|0));s=k[l>>2]|0}OBa(s)}p=k[d+12>>2]|0;if(!p){r=h;return}j0a(p);r=h;return}default:{r=h;return}}while(0)}function pza(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+16|0;c=b+4|0;d=b+3|0;e=b+2|0;f=b+1|0;g=b;k[a>>2]=47044;h=a+28|0;j=k[h>>2]|0;if(j){l=a+32|0;m=k[l>>2]|0;if((m|0)==(j|0))n=j;else{o=m;do{m=o+-56|0;k[l>>2]=m;p=k[m>>2]|0;i[d>>0]=i[e>>0]|0;i[c>>0]=i[f>>0]|0;oza(p,p>>31^p,g,o+-52|0,d,c,0,0);o=k[l>>2]|0}while((o|0)!=(j|0));n=k[h>>2]|0}OBa(n)}n=k[a+24>>2]|0;if(!n){c0a(a);r=b;return}j0a(n);c0a(a);r=b;return}function qza(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+16|0;c=b+4|0;d=b+3|0;e=b+2|0;f=b+1|0;g=b;k[a>>2]=47044;h=a+28|0;j=k[h>>2]|0;if(j){l=a+32|0;m=k[l>>2]|0;if((m|0)==(j|0))n=j;else{o=m;do{m=o+-56|0;k[l>>2]=m;p=k[m>>2]|0;i[d>>0]=i[e>>0]|0;i[c>>0]=i[f>>0]|0;oza(p,p>>31^p,g,o+-52|0,d,c,0,0);o=k[l>>2]|0}while((o|0)!=(j|0));n=k[h>>2]|0}OBa(n)}n=k[a+24>>2]|0;if(!n){c0a(a);OBa(a);r=b;return}j0a(n);c0a(a);OBa(a);r=b;return}function rza(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+16|0;c=b+4|0;d=b+3|0;e=b+2|0;f=b+1|0;g=b;h=a+28|0;j=k[h>>2]|0;if(j){l=a+32|0;m=k[l>>2]|0;if((m|0)==(j|0))n=j;else{o=m;do{m=o+-56|0;k[l>>2]=m;p=k[m>>2]|0;i[d>>0]=i[e>>0]|0;i[c>>0]=i[f>>0]|0;oza(p,p>>31^p,g,o+-52|0,d,c,0,0);o=k[l>>2]|0}while((o|0)!=(j|0));n=k[h>>2]|0}OBa(n)}n=k[a+24>>2]|0;if(!n){r=b;return}j0a(n);r=b;return}function sza(a){a=a|0;OBa(a);return}function tza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+192|0;d=c+188|0;e=c+72|0;f=c+40|0;g=c+32|0;h=c;i=a+4|0;j=k[i>>2]|0;l=(k[j+4>>2]|0)-(k[j>>2]|0)|0;k[e>>2]=1;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+20>>2]=0;k[e+24>>2]=0;k[e+16>>2]=e+20;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=0;k[e+44>>2]=0;k[e+48>>2]=0;k[e+40>>2]=e+44;k[e+56>>2]=0;k[e+60>>2]=0;k[e+52>>2]=e+56;k[e+64>>2]=0;k[e+68>>2]=0;k[e+72>>2]=0;k[e+80>>2]=0;k[e+84>>2]=0;k[e+76>>2]=e+80;k[e+88>>2]=0;k[e+92>>2]=0;k[e+96>>2]=0;k[e+100>>2]=-1;k[e+104>>2]=-1;k[e+108>>2]=0;k[e+112>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;m=f+4|0;k[f>>2]=m;k[f+12>>2]=0;n=f+16|0;k[n>>2]=0;k[f+20>>2]=0;k[f+24>>2]=j;k[f+28>>2]=e;k[g>>2]=f;j=k[a>>2]|0;o=k[j+16>>2]|0;p=k[j+20>>2]|0;a:do if((o|0)==(p|0))q=5;else{j=o;while(1){k[d>>2]=g;s=k[j>>2]|0;x=0;nb(172,s|0,s>>31^s|0,d|0,j+4|0);s=x;x=0;if(s&1)break;j=j+56|0;if((j|0)==(p|0)){q=5;break a}}j=Hc()|0;t=j;u=M;q=19}while(0);do if((q|0)==5){x=0;fb(403,h|0,f|0,b|0);p=x;x=0;if(p&1){p=Hc()|0;t=p;u=M;q=19;break}x=0;xa(923,h|0,k[a>>2]|0);p=x;x=0;if(p&1){p=Hc()|0;d=M;g=k[h+24>>2]|0;if((g|0)==(h+8|0)){Sf[k[(k[g>>2]|0)+16>>2]&2047](g);v=d;w=p;break}if(!g){v=d;w=p;break}Sf[k[(k[g>>2]|0)+20>>2]&2047](g);v=d;w=p;break}p=h+8|0;d=k[h+24>>2]|0;if((d|0)!=(p|0)){if(d)Sf[k[(k[d>>2]|0)+20>>2]&2047](d)}else Sf[k[(k[p>>2]|0)+16>>2]&2047](p);p=k[i>>2]|0;d=((k[p+4>>2]|0)-(k[p>>2]|0)|0)==(l|0);p=f+12|0;g=k[p>>2]|0;if(!g){y=k[m>>2]|0;Aza(f,y);IE(e);r=c;return d|0}o=k[n>>2]|0;if((o|0)==(g|0))z=g;else{j=o;do{o=j+-16|0;k[n>>2]=o;K2a(o);j=k[n>>2]|0}while((j|0)!=(g|0));z=k[p>>2]|0}OBa(z);y=k[m>>2]|0;Aza(f,y);IE(e);r=c;return d|0}while(0);if((q|0)==19){v=u;w=t}t=f+12|0;u=k[t>>2]|0;if(!u){A=k[m>>2]|0;Aza(f,A);IE(e);Sc(w|0)}v=k[n>>2]|0;if((v|0)==(u|0))B=u;else{q=v;do{v=q+-16|0;k[n>>2]=v;K2a(v);q=k[n>>2]|0}while((q|0)!=(u|0));B=k[t>>2]|0}OBa(B);A=k[m>>2]|0;Aza(f,A);IE(e);Sc(w|0);return 0}function uza(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+80|0;e=d+72|0;f=d+40|0;g=d+32|0;h=d;k[a>>2]=1;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+20>>2]=0;k[a+24>>2]=0;k[a+16>>2]=a+20;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=0;k[a+44>>2]=0;k[a+48>>2]=0;k[a+40>>2]=a+44;k[a+56>>2]=0;k[a+60>>2]=0;k[a+52>>2]=a+56;k[a+64>>2]=0;k[a+68>>2]=0;k[a+72>>2]=0;k[a+80>>2]=0;k[a+84>>2]=0;k[a+76>>2]=a+80;k[a+88>>2]=0;k[a+92>>2]=0;k[a+96>>2]=0;k[a+100>>2]=-1;k[a+104>>2]=-1;k[a+108>>2]=0;k[a+112>>2]=0;i=k[b+4>>2]|0;k[f+4>>2]=0;k[f+8>>2]=0;j=f+4|0;k[f>>2]=j;k[f+12>>2]=0;l=f+16|0;k[l>>2]=0;k[f+20>>2]=0;k[f+24>>2]=i;k[f+28>>2]=a;k[g>>2]=f;i=k[b>>2]|0;m=k[i+16>>2]|0;n=k[i+20>>2]|0;a:do if((m|0)==(n|0))o=5;else{i=m;while(1){k[e>>2]=g;p=k[i>>2]|0;x=0;nb(172,p|0,p>>31^p|0,e|0,i+4|0);p=x;x=0;if(p&1)break;i=i+56|0;if((i|0)==(n|0)){o=5;break a}}i=Hc()|0;q=i;s=M;o=19}while(0);do if((o|0)==5){x=0;fb(403,h|0,f|0,c|0);n=x;x=0;if(n&1){n=Hc()|0;q=n;s=M;o=19;break}x=0;xa(923,h|0,k[b>>2]|0);n=x;x=0;if(n&1){n=Hc()|0;e=M;g=k[h+24>>2]|0;if((g|0)==(h+8|0)){Sf[k[(k[g>>2]|0)+16>>2]&2047](g);t=e;u=n;break}if(!g){t=e;u=n;break}Sf[k[(k[g>>2]|0)+20>>2]&2047](g);t=e;u=n;break}n=h+8|0;e=k[h+24>>2]|0;if((e|0)!=(n|0)){if(e)Sf[k[(k[e>>2]|0)+20>>2]&2047](e)}else Sf[k[(k[n>>2]|0)+16>>2]&2047](n);n=f+12|0;e=k[n>>2]|0;if(!e){v=k[j>>2]|0;Aza(f,v);r=d;return}g=k[l>>2]|0;if((g|0)==(e|0))w=e;else{m=g;do{g=m+-16|0;k[l>>2]=g;K2a(g);m=k[l>>2]|0}while((m|0)!=(e|0));w=k[n>>2]|0}OBa(w);v=k[j>>2]|0;Aza(f,v);r=d;return}while(0);if((o|0)==19){t=s;u=q}q=f+12|0;s=k[q>>2]|0;if(!s){y=k[j>>2]|0;Aza(f,y);IE(a);Sc(u|0)}t=k[l>>2]|0;if((t|0)==(s|0))z=s;else{o=t;do{t=o+-16|0;k[l>>2]=t;K2a(t);o=k[l>>2]|0}while((o|0)!=(s|0));z=k[q>>2]|0}OBa(z);y=k[j>>2]|0;Aza(f,y);IE(a);Sc(u|0)}function vza(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;d=r;r=r+80|0;e=d+72|0;f=d+40|0;g=d+32|0;h=d;i=k[a+4>>2]|0;k[f+4>>2]=0;k[f+8>>2]=0;j=f+4|0;k[f>>2]=j;k[f+12>>2]=0;l=f+16|0;k[l>>2]=0;k[f+20>>2]=0;k[f+24>>2]=i;k[f+28>>2]=b;k[g>>2]=f;b=k[a>>2]|0;i=k[b+16>>2]|0;m=k[b+20>>2]|0;a:do if((i|0)==(m|0))n=5;else{b=i;while(1){k[e>>2]=g;o=k[b>>2]|0;x=0;nb(172,o|0,o>>31^o|0,e|0,b+4|0);o=x;x=0;if(o&1)break;b=b+56|0;if((b|0)==(m|0)){n=5;break a}}b=Hc()|0;p=b;q=M;n=19}while(0);do if((n|0)==5){x=0;fb(403,h|0,f|0,c|0);m=x;x=0;if(m&1){m=Hc()|0;p=m;q=M;n=19;break}x=0;xa(923,h|0,k[a>>2]|0);m=x;x=0;if(m&1){m=Hc()|0;e=M;g=k[h+24>>2]|0;if((g|0)==(h+8|0)){Sf[k[(k[g>>2]|0)+16>>2]&2047](g);s=e;t=m;break}if(!g){s=e;t=m;break}Sf[k[(k[g>>2]|0)+20>>2]&2047](g);s=e;t=m;break}m=h+8|0;e=k[h+24>>2]|0;if((e|0)!=(m|0)){if(e)Sf[k[(k[e>>2]|0)+20>>2]&2047](e)}else Sf[k[(k[m>>2]|0)+16>>2]&2047](m);m=f+12|0;e=k[m>>2]|0;if(!e){u=k[j>>2]|0;Aza(f,u);r=d;return}g=k[l>>2]|0;if((g|0)==(e|0))v=e;else{i=g;do{g=i+-16|0;k[l>>2]=g;K2a(g);i=k[l>>2]|0}while((i|0)!=(e|0));v=k[m>>2]|0}OBa(v);u=k[j>>2]|0;Aza(f,u);r=d;return}while(0);if((n|0)==19){s=q;t=p}p=f+12|0;q=k[p>>2]|0;if(!q){w=k[j>>2]|0;Aza(f,w);Sc(t|0)}s=k[l>>2]|0;if((s|0)==(q|0))y=q;else{n=s;do{s=n+-16|0;k[l>>2]=s;K2a(s);n=k[l>>2]|0}while((n|0)!=(q|0));y=k[p>>2]|0}OBa(y);w=k[j>>2]|0;Aza(f,w);Sc(t|0)}function wza(){k[11780]=0;k[11781]=0;k[11782]=0;return}function xza(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;a=r;r=r+16|0;e=a;switch(b|0){case 8:{b=k[c>>2]|0;f=k[d+16>>2]|0;g=k[d+20>>2]|0;if((f|0)==(g|0)){r=a;return}h=f;do{k[e>>2]=b;f=k[h>>2]|0;xza(f,f>>31^f,e,h+4|0);h=h+56|0}while((h|0)!=(g|0));r=a;return}case 2:{gAa(k[c>>2]|0,d);r=a;return}default:{r=a;return}}}function yza(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+32|0;e=d;k[a>>2]=b;b=a+8|0;f=a+24|0;k[f>>2]=0;a=k[c+16>>2]|0;if(!a){g=e+16|0;k[g>>2]=e;k[e>>2]=47084;Zza(e,b);h=k[g>>2]|0;if((h|0)!=(e|0)){if(h)Sf[k[(k[h>>2]|0)+20>>2]&2047](h)}else Sf[k[(k[h>>2]|0)+16>>2]&2047](h);r=d;return}if((a|0)==(c|0)){c=e+16|0;k[c>>2]=e;x=0;xa(k[(k[a>>2]|0)+12>>2]|0,a|0,e|0);h=x;x=0;if(!(h&1)){i=c;j=6}}else{x=0;c=Ba(k[(k[a>>2]|0)+8>>2]|0,a|0)|0;a=x;x=0;if(!(a&1)){a=e+16|0;k[a>>2]=c;i=a;j=6}}if((j|0)==6){Zza(e,b);j=k[i>>2]|0;if((j|0)!=(e|0)){if(j)Sf[k[(k[j>>2]|0)+20>>2]&2047](j)}else Sf[k[(k[e>>2]|0)+16>>2]&2047](e);r=d;return}d=Hc()|0;e=k[f>>2]|0;if((e|0)==(b|0)){Sf[k[(k[e>>2]|0)+16>>2]&2047](e);Sc(d|0)}if(!e)Sc(d|0);Sf[k[(k[e>>2]|0)+20>>2]&2047](e);Sc(d|0)}function zza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+96|0;d=c+87|0;e=c+86|0;f=c+85|0;g=c+84|0;h=c+80|0;j=c;l=k[a>>2]|0;m=(k[l+16>>2]|0)-(k[l+12>>2]|0)|0;n=k[b+16>>2]|0;o=k[b+20>>2]|0;if((n|0)==(o|0))p=l;else{l=n;do{k[h>>2]=a;n=k[l>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Bza(n,n>>31^n,h,l+4|0,e,d,0,0);l=l+56|0}while((l|0)!=(o|0));p=k[a>>2]|0}o=k[p+28>>2]|0;p=b;l=k[p+4>>2]|0;d=o+100|0;k[d>>2]=k[p>>2];k[d+4>>2]=l;l=k[b+8>>2]|0;d=k[b+12>>2]|0;if(d)h0a(d);k[o+108>>2]=l;l=o+112|0;o=k[l>>2]|0;k[l>>2]=d;if(o)j0a(o);o=k[a>>2]|0;if(((k[o+16>>2]|0)-(k[o+12>>2]|0)|0)>>>0<=m>>>0){r=c;return}d=j+8|0;l=j+40|0;b=j+48|0;p=j+56|0;e=j+60|0;h=j+72|0;g=o;while(1){o=k[g+28>>2]|0;k[j>>2]=1;k[d>>2]=80;k[l>>2]=1;f=b;k[f>>2]=-1;k[f+4>>2]=-1;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,o|0,j|0)|0;o=x;x=0;if(o&1)break;o=k[h>>2]|0;if(o)j0a(o);o=k[e>>2]|0;if(o)j0a(o);o=(k[a>>2]|0)+16|0;f=k[o>>2]|0;n=f+-16|0;q=f;do{f=q+-16|0;k[o>>2]=f;K2a(f);q=k[o>>2]|0}while((q|0)!=(n|0));g=k[a>>2]|0;if(((k[g+16>>2]|0)-(k[g+12>>2]|0)|0)>>>0<=m>>>0){s=24;break}}if((s|0)==24){r=c;return}c=Hc()|0;s=k[h>>2]|0;if(s)j0a(s);s=k[e>>2]|0;if(!s)Sc(c|0);j0a(s);Sc(c|0)}function Aza(a,b){a=a|0;b=b|0;if(!b)return;Aza(a,k[b>>2]|0);Aza(a,k[b+4>>2]|0);a=k[b+104>>2]|0;if(a)j0a(a);a=k[b+92>>2]|0;if(a)j0a(a);K2a(b+16|0);OBa(b);return}function Bza(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;do switch(b|0){case 0:{Cza(k[c>>2]|0,d);return}case 1:{Dza(k[c>>2]|0,d);return}case 2:{Eza(k[c>>2]|0,d);return}case 3:{h=k[c>>2]|0;g=k[(k[h>>2]|0)+28>>2]|0;f=d;e=k[f+4>>2]|0;a=g+100|0;k[a>>2]=k[f>>2];k[a+4>>2]=e;e=k[d+8>>2]|0;a=k[d+12>>2]|0;if(a)h0a(a);k[g+108>>2]=e;e=g+112|0;g=k[e>>2]|0;k[e>>2]=a;if(g)j0a(g);Fza(h,d+16|0,d);return}case 4:{Gza(k[c>>2]|0,d);return}case 5:{Hza(k[c>>2]|0,d);return}case 6:{Iza(k[c>>2]|0,d);return}case 7:{Jza(k[c>>2]|0,d);return}case 8:{zza(k[c>>2]|0,d);return}default:return}while(0)}function Cza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+80|0;d=c;e=k[(k[a>>2]|0)+28>>2]|0;f=b;g=k[f+4>>2]|0;h=e+100|0;k[h>>2]=k[f>>2];k[h+4>>2]=g;g=k[b+8>>2]|0;h=k[b+12>>2]|0;if(h)h0a(h);k[e+108>>2]=g;g=e+112|0;e=k[g>>2]|0;k[g>>2]=h;if(e)j0a(e);e=k[(k[a>>2]|0)+28>>2]|0;a=l[b+16>>0]|0;k[d>>2]=1;k[d+8>>2]=a;k[d+40>>2]=1;a=d+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=d+56|0;b=d+60|0;h=d+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,e|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;e=k[h>>2]|0;if(e)j0a(e);e=k[b>>2]|0;if(!e)Sc(d|0);j0a(e);Sc(d|0)}else{d=k[h>>2]|0;if(d)j0a(d);d=k[b>>2]|0;if(!d){r=c;return}j0a(d);r=c;return}}function Dza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+304|0;d=c+160|0;e=c+120|0;f=c+284|0;g=c+272|0;h=c+260|0;j=c+256|0;l=c+240|0;m=c+40|0;n=c;o=k[(k[a>>2]|0)+28>>2]|0;p=b;q=k[p+4>>2]|0;s=o+100|0;k[s>>2]=k[p>>2];k[s+4>>2]=q;q=k[b+8>>2]|0;s=k[b+12>>2]|0;if(s)h0a(s);k[o+108>>2]=q;q=o+112|0;o=k[q>>2]|0;k[q>>2]=s;if(o)j0a(o);if(i[b+16>>0]|0){o=k[(k[a>>2]|0)+28>>2]|0;s=b+20|0;k[e>>2]=0;k[e+32>>2]=1;Fka(e,(i[s>>0]&1)==0?s+1|0:k[b+28>>2]|0,c+296|0);k[d>>2]=2;t=d+8|0;u=e;v=t+40|0;do{k[t>>2]=k[u>>2];t=t+4|0;u=u+4|0}while((t|0)<(v|0));e=d+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=d+56|0;s=d+60|0;q=d+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,o|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;o=M;e=k[q>>2]|0;if(e)j0a(e);e=k[s>>2]|0;if(!e){w=o;y=d;Sc(y|0)}j0a(e);w=o;y=d;Sc(y|0)}else{d=k[q>>2]|0;if(d)j0a(d);d=k[s>>2]|0;if(!d){r=c;return}j0a(d);r=c;return}}d=b+20|0;s=i[d>>0]|0;q=(s&1)==0?(s&255)>>>1:k[b+24>>2]|0;b=k[a>>2]|0;if(q>>>0<=32){Xza(k[b+28>>2]|0,d)|0;r=c;return}k[j>>2]=q;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;Ta(626,j|0,h|0)|0;j=x;x=0;if(j&1){j=Hc()|0;K2a(h);Sc(j|0)}x=0;j=Fa(86,h|0,0,296423)|0;q=x;x=0;if(q&1){q=Hc()|0;z=M;A=q}else{k[g>>2]=k[j>>2];k[g+4>>2]=k[j+4>>2];k[g+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;j=Ta(484,g|0,296449)|0;q=x;x=0;do if(!(q&1)){k[f>>2]=k[j>>2];k[f+4>>2]=k[j+4>>2];k[f+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[l>>2]=-1;k[l+4>>2]=-1;k[l+8>>2]=0;k[l+12>>2]=0;x=0;nb(173,b|0,3,f|0,l|0);d=x;x=0;if(d&1){d=Hc()|0;s=M;K2a(f);B=s;C=d;break}K2a(f);K2a(g);K2a(h);d=k[(k[a>>2]|0)+28>>2]|0;k[n>>2]=0;k[n+32>>2]=1;k[m>>2]=2;t=m+8|0;u=n;v=t+40|0;do{k[t>>2]=k[u>>2];t=t+4|0;u=u+4|0}while((t|0)<(v|0));s=m+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=m+56|0;o=m+60|0;e=m+72|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,d|0,m|0)|0;s=x;x=0;if(s&1){s=Hc()|0;p=M;D=k[e>>2]|0;if(D)j0a(D);D=k[o>>2]|0;if(!D){w=p;y=s;Sc(y|0)}j0a(D);w=p;y=s;Sc(y|0)}else{s=k[e>>2]|0;if(s)j0a(s);s=k[o>>2]|0;if(!s){r=c;return}j0a(s);r=c;return}}else{s=Hc()|0;B=M;C=s}while(0);K2a(g);z=B;A=C}K2a(h);w=z;y=A;Sc(y|0)}function Eza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=k[(k[a>>2]|0)+28>>2]|0;e=b;f=k[e+4>>2]|0;g=d+100|0;k[g>>2]=k[e>>2];k[g+4>>2]=f;f=k[b+8>>2]|0;g=k[b+12>>2]|0;if(g)h0a(g);k[d+108>>2]=f;f=d+112|0;d=k[f>>2]|0;k[f>>2]=g;if(d)j0a(d);d=k[a>>2]|0;a=k[d+28>>2]|0;g=Vza(d,c,b+16|0)|0;b=k[g>>2]|0;if(b){gD(a,b+32|0)|0;r=c;return}c=Rd(8)|0;x=0;xa(671,c|0,296399);b=x;x=0;if(b&1){b=Hc()|0;Fc(c|0);Sc(b|0)}else{k[c>>2]=47544;Gf(c|0,9024,933)}}function Fza(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;d=r;r=r+272|0;e=d+252|0;f=d+236|0;g=d+240|0;h=d+224|0;j=d+212|0;l=d+80|0;m=d;n=d+200|0;o=d+188|0;p=d+176|0;q=d+160|0;s=k[a>>2]|0;t=b+16|0;u=k[s+16>>2]|0;v=k[s+12>>2]|0;w=u;a:do if((w|0)==(v|0))y=u;else{z=i[t>>0]|0;A=(z&1)==0;B=A?(z&255)>>>1:k[b+20>>2]|0;z=A?t+1|0:k[b+24>>2]|0;if(!B){A=u;C=w;while(1){D=C;C=C+-16|0;E=i[C>>0]|0;if(!(((E&1)==0?(E&255)>>>1:k[D+-12>>2]|0)|0)){y=A;break a}D=C;if((C|0)==(v|0)){y=D;break a}else A=D}}else{F=u;G=w}while(1){A=G;G=G+-16|0;C=i[G>>0]|0;D=(C&1)==0;E=(C&255)>>>1;b:do if(((D?E:k[A+-12>>2]|0)|0)==(B|0)){if(!D)if(!(ZLa(k[A+-8>>2]|0,z,B)|0)){y=F;break a}else break;C=E;H=G+1|0;I=z;while(1){if((i[H>>0]|0)!=(i[I>>0]|0))break b;C=C+-1|0;if(!C){y=F;break a}else{H=H+1|0;I=I+1|0}}}while(0);E=G;if((G|0)==(v|0)){y=E;break}else F=E}}while(0);F=y;if((F|0)==(v|0)){v=k[s+28>>2]|0;k[e>>2]=0;y=k[a+24>>2]|0;if(!y){G=Rd(4)|0;k[G>>2]=26200;Gf(G|0,2216,320)}if(ig[k[(k[y>>2]|0)+24>>2]&127](y,b,v,e)|0){r=d;return}v=k[a>>2]|0;n2a(p,t);x=0;t=Fa(86,p|0,0,296347)|0;b=x;x=0;if(b&1){b=Hc()|0;J=M;K=b}else{k[o>>2]=k[t>>2];k[o+4>>2]=k[t+4>>2];k[o+8>>2]=k[t+8>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;x=0;t=Ta(484,o|0,296360)|0;b=x;x=0;do if(b&1){y=Hc()|0;L=M;N=y}else{k[n>>2]=k[t>>2];k[n+4>>2]=k[t+4>>2];k[n+8>>2]=k[t+8>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[q>>2]=-1;k[q+4>>2]=-1;k[q+8>>2]=0;k[q+12>>2]=0;x=0;nb(173,v|0,0,n|0,q|0);y=x;x=0;if(y&1){y=Hc()|0;G=M;K2a(n);L=G;N=y;break}K2a(n);K2a(o);K2a(p);r=d;return}while(0);K2a(o);J=L;K=N}K2a(p);O=J;P=K;Sc(P|0)}K=k[s+28>>2]|0;J=(k[K+88>>2]|0)-(k[F+-4>>2]|0)|0;F=J+-1|0;k[f>>2]=F;c:do if((J|0)<2|(F|0)>16){k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;Ta(627,f|0,j|0)|0;p=x;x=0;if(p&1){p=Hc()|0;K2a(j);Sc(p|0)}x=0;p=Fa(86,j|0,0,295899)|0;N=x;x=0;if(N&1){N=Hc()|0;Q=M;R=N}else{k[h>>2]=k[p>>2];k[h+4>>2]=k[p+4>>2];k[h+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;x=0;p=Ta(484,h|0,300015)|0;N=x;x=0;do if(!(N&1)){k[g>>2]=k[p>>2];k[g+4>>2]=k[p+4>>2];k[g+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;x=0;nb(173,s|0,3,g|0,c|0);L=x;x=0;if(L&1){L=Hc()|0;o=M;K2a(g);S=o;T=L;break}else{K2a(g);K2a(h);K2a(j);break c}}else{L=Hc()|0;S=M;T=L}while(0);K2a(h);Q=S;R=T}K2a(j);O=Q;P=R;Sc(P|0)}else{q2a(e,296239,35);x=0;pa(51,(J+-2|0)>>>0<16|0,e|0,217,295981,296275);p=x;x=0;if(p&1){p=Hc()|0;K2a(e);Sc(p|0)}K2a(e);k[l>>2]=1;k[l+8>>2]=J+142&255;k[l+40>>2]=1;p=l+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=l+56|0;N=l+60|0;L=l+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,K|0,l|0)|0;p=x;x=0;if(!(p&1)){p=k[L>>2]|0;if(p)j0a(p);p=k[N>>2]|0;if(!p)break;j0a(p);break}p=Hc()|0;o=M;n=k[L>>2]|0;if(n)j0a(n);n=k[N>>2]|0;if(!n){O=o;P=p;Sc(P|0)}j0a(n);O=o;P=p;Sc(P|0)}while(0);l=k[(k[a>>2]|0)+28>>2]|0;k[m>>2]=1;k[m+8>>2]=80;k[m+40>>2]=1;a=m+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=m+56|0;K=m+60|0;J=m+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,l|0,m|0)|0;m=x;x=0;if(m&1){m=Hc()|0;l=M;a=k[J>>2]|0;if(a)j0a(a);a=k[K>>2]|0;if(!a){O=l;P=m;Sc(P|0)}j0a(a);O=l;P=m;Sc(P|0)}else{P=k[J>>2]|0;if(P)j0a(P);P=k[K>>2]|0;if(P)j0a(P);r=d;return}}function Gza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;c=r;r=r+464|0;d=c+452|0;e=c+424|0;f=c+440|0;g=c+428|0;h=c+412|0;j=c+320|0;l=c+280|0;m=c+200|0;n=c+120|0;o=c+400|0;p=c+40|0;q=c;s=k[(k[a>>2]|0)+28>>2]|0;t=b;u=k[t+4>>2]|0;v=s+100|0;k[v>>2]=k[t>>2];k[v+4>>2]=u;u=k[b+8>>2]|0;v=k[b+12>>2]|0;if(v)h0a(v);k[s+108>>2]=u;u=s+112|0;s=k[u>>2]|0;k[u>>2]=v;if(s)j0a(s);s=k[a>>2]|0;v=b+16|0;u=k[s+16>>2]|0;t=k[s+12>>2]|0;w=u;a:do if((w|0)==(t|0))y=u;else{z=i[v>>0]|0;A=(z&1)==0;B=A?(z&255)>>>1:k[b+20>>2]|0;z=A?v+1|0:k[b+24>>2]|0;if(!B){A=u;C=w;while(1){D=C;C=C+-16|0;E=i[C>>0]|0;if(!(((E&1)==0?(E&255)>>>1:k[D+-12>>2]|0)|0)){y=A;break a}D=C;if((C|0)==(t|0)){y=D;break a}else A=D}}else{F=u;G=w}while(1){A=G;G=G+-16|0;C=i[G>>0]|0;D=(C&1)==0;E=(C&255)>>>1;b:do if(((D?E:k[A+-12>>2]|0)|0)==(B|0)){if(!D)if(!(ZLa(k[A+-8>>2]|0,z,B)|0)){y=F;break a}else break;C=E;H=G+1|0;I=z;while(1){if((i[H>>0]|0)!=(i[I>>0]|0))break b;C=C+-1|0;if(!C){y=F;break a}else{H=H+1|0;I=I+1|0}}}while(0);E=G;if((G|0)==(t|0)){y=E;break}else F=E}}while(0);F=y;if((F|0)==(t|0)){t=Uza(s,v)|0;v=k[(k[a>>2]|0)+28>>2]|0;if(t){y=k[t>>2]|0;q2a(d,329672,0);x=0;pa(56,(y|0)==4|(y|0)==8|0,d|0,71,296096,296141);y=x;x=0;if(y&1){y=Hc()|0;K2a(d);Sc(y|0)}K2a(d);k[n>>2]=4;J=n+8|0;K=t+8|0;L=J+40|0;do{k[J>>2]=k[K>>2];J=J+4|0;K=K+4|0}while((J|0)<(L|0));t=n+48|0;k[t>>2]=-1;k[t+4>>2]=-1;t=n+56|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;x=0;Ta(539,v|0,n|0)|0;t=x;x=0;if(t&1){t=Hc()|0;y=M;G=k[n+72>>2]|0;if(G)j0a(G);G=k[n+60>>2]|0;if(!G){N=t;O=y;Sc(N|0)}j0a(G);N=t;O=y;Sc(N|0)}else{y=k[n+72>>2]|0;if(y)j0a(y);y=k[n+60>>2]|0;if(!y){r=c;return}j0a(y);r=c;return}}k[d>>2]=1;y=k[a+24>>2]|0;if(!y){n=Rd(4)|0;k[n>>2]=26200;Gf(n|0,2216,320)}if(ig[k[(k[y>>2]|0)+24>>2]&127](y,b,v,d)|0){r=c;return}v=k[a>>2]|0;q2a(o,296204,34);x=0;nb(173,v|0,0,o|0,b|0);v=x;x=0;if(v&1){v=Hc()|0;y=M;K2a(o);N=v;O=y;Sc(N|0)}K2a(o);o=k[(k[a>>2]|0)+28>>2]|0;k[q>>2]=0;k[q+32>>2]=1;k[p>>2]=2;J=p+8|0;K=q;L=J+40|0;do{k[J>>2]=k[K>>2];J=J+4|0;K=K+4|0}while((J|0)<(L|0));q=p+48|0;k[q>>2]=-1;k[q+4>>2]=-1;q=p+56|0;y=p+60|0;v=p+72|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;x=0;Ta(539,o|0,p|0)|0;p=x;x=0;if(p&1){p=Hc()|0;o=M;q=k[v>>2]|0;if(q)j0a(q);q=k[y>>2]|0;if(!q){N=p;O=o;Sc(N|0)}j0a(q);N=p;O=o;Sc(N|0)}else{o=k[v>>2]|0;if(o)j0a(o);o=k[y>>2]|0;if(!o){r=c;return}j0a(o);r=c;return}}o=k[s+28>>2]|0;y=(k[o+88>>2]|0)-(k[F+-4>>2]|0)|0;k[e>>2]=y;c:do if((y+-1|0)>>>0>15){k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;Ta(627,e|0,h|0)|0;F=x;x=0;if(F&1){F=Hc()|0;K2a(h);Sc(F|0)}x=0;F=Fa(86,h|0,0,295899)|0;v=x;x=0;if(v&1){v=Hc()|0;P=v;Q=M}else{k[g>>2]=k[F>>2];k[g+4>>2]=k[F+4>>2];k[g+8>>2]=k[F+8>>2];k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;x=0;F=Ta(484,g|0,300015)|0;v=x;x=0;do if(v&1){p=Hc()|0;R=p;S=M}else{k[f>>2]=k[F>>2];k[f+4>>2]=k[F+4>>2];k[f+8>>2]=k[F+8>>2];k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;x=0;nb(173,s|0,3,f|0,b|0);p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(f);R=p;S=q;break}K2a(f);K2a(g);K2a(h);q=k[(k[a>>2]|0)+28>>2]|0;k[l>>2]=0;k[l+32>>2]=1;k[j>>2]=2;J=j+8|0;K=l;L=J+40|0;do{k[J>>2]=k[K>>2];J=J+4|0;K=K+4|0}while((J|0)<(L|0));p=j+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=j+56|0;n=j+60|0;t=j+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,q|0,j|0)|0;p=x;x=0;if(!(p&1)){p=k[t>>2]|0;if(p)j0a(p);p=k[n>>2]|0;if(!p)break c;j0a(p);break c}p=Hc()|0;G=M;w=k[t>>2]|0;if(w)j0a(w);w=k[n>>2]|0;if(!w){N=p;O=G;Sc(N|0)}j0a(w);N=p;O=G;Sc(N|0)}while(0);K2a(g);P=R;Q=S}K2a(h);N=P;O=Q;Sc(N|0)}else{q2a(d,295946,34);x=0;pa(51,1,d|0,210,295981,296025);F=x;x=0;if(F&1){F=Hc()|0;K2a(d);Sc(F|0)}K2a(d);k[m>>2]=1;k[m+8>>2]=y+127&255;k[m+40>>2]=1;F=m+48|0;k[F>>2]=-1;k[F+4>>2]=-1;F=m+56|0;v=m+60|0;G=m+72|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;x=0;Ta(539,o|0,m|0)|0;F=x;x=0;if(!(F&1)){F=k[G>>2]|0;if(F)j0a(F);F=k[v>>2]|0;if(!F)break;j0a(F);break}F=Hc()|0;p=M;w=k[G>>2]|0;if(w)j0a(w);w=k[v>>2]|0;if(!w){N=F;O=p;Sc(N|0)}j0a(w);N=F;O=p;Sc(N|0)}while(0);r=c;return}function Hza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c+27|0;e=c+26|0;f=c+25|0;g=c+24|0;h=c;j=c+8|0;l=k[(k[(k[a>>2]|0)+28>>2]|0)+88>>2]|0;m=b+44|0;n=k[m>>2]|0;k[h>>2]=a;o=k[n>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Kza(o,o>>31^o,h,n+4|0,e,d,0,0);n=k[m>>2]|0;m=k[n>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Lza(j,m,m>>31^m,h,n+4|0,e,d,0,0);x=0;nb(174,a|0,1,l|0,j|0);l=x;x=0;if(l&1){l=Hc()|0;d=k[j+12>>2]|0;if(!d)Sc(l|0);j0a(d);Sc(l|0)}l=k[j+12>>2]|0;if(l)j0a(l);l=k[(k[a>>2]|0)+28>>2]|0;j=b;d=k[j+4>>2]|0;e=l+100|0;k[e>>2]=k[j>>2];k[e+4>>2]=d;d=k[b+8>>2]|0;e=k[b+12>>2]|0;if(e)h0a(e);k[l+108>>2]=d;d=l+112|0;l=k[d>>2]|0;k[d>>2]=e;if(!l){p=b+16|0;Fza(a,p,b);r=c;return}j0a(l);p=b+16|0;Fza(a,p,b);r=c;return}function Iza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+27|0;e=c+26|0;f=c+25|0;g=c+24|0;h=c;j=c+8|0;l=k[b+40>>2]|0;m=b+36|0;if((l|0)==(k[m>>2]|0)){n=b+16|0;Cza(a,n);r=c;return}o=j+12|0;p=l;while(1){l=k[(k[(k[a>>2]|0)+28>>2]|0)+88>>2]|0;q=p;p=p+-56|0;k[h>>2]=a;s=k[p>>2]|0;t=q+-52|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Bza(s,s>>31^s,h,t,e,d,0,0);s=k[p>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Lza(j,s,s>>31^s,h,t,e,d,0,0);x=0;nb(174,a|0,1,l|0,j|0);l=x;x=0;if(l&1)break;l=k[o>>2]|0;if(l)j0a(l);if((p|0)==(k[m>>2]|0)){u=3;break}}if((u|0)==3){n=b+16|0;Cza(a,n);r=c;return}c=Hc()|0;n=k[o>>2]|0;if(!n)Sc(c|0);j0a(n);Sc(c|0)}function Jza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+48|0;d=c+43|0;e=c+42|0;f=c+41|0;g=c+40|0;h=c;j=c+24|0;l=c+8|0;m=k[(k[(k[a>>2]|0)+28>>2]|0)+88>>2]|0;n=b+28|0;o=k[n>>2]|0;k[h>>2]=a;p=k[o>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Kza(p,p>>31^p,h,o+4|0,e,d,0,0);o=k[n>>2]|0;n=k[o>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Lza(j,n,n>>31^n,h,o+4|0,e,d,0,0);x=0;nb(174,a|0,1,m|0,j|0);d=x;x=0;if(d&1){d=Hc()|0;e=M;o=k[j+12>>2]|0;if(!o){q=e;s=d;Sc(s|0)}j0a(o);q=e;s=d;Sc(s|0)}d=k[j+12>>2]|0;if(d)j0a(d);d=k[a>>2]|0;n2a(l,b+16|0);b=l+12|0;k[b>>2]=m;m=d+16|0;a=k[m>>2]|0;if(a>>>0<(k[d+20>>2]|0)>>>0){k[a>>2]=k[l>>2];k[a+4>>2]=k[l+4>>2];k[a+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[a+12>>2]=k[b>>2];k[m>>2]=(k[m>>2]|0)+16;K2a(l);r=c;return}x=0;xa(924,d+12|0,l|0);d=x;x=0;if(!(d&1)){K2a(l);r=c;return}c=Hc()|0;d=M;K2a(l);q=d;s=c;Sc(s|0)}function Kza(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;do switch(b|0){case 0:{Cza(k[c>>2]|0,d);return}case 1:{Dza(k[c>>2]|0,d);return}case 2:{Eza(k[c>>2]|0,d);return}case 3:{h=k[c>>2]|0;g=k[(k[h>>2]|0)+28>>2]|0;f=d;e=k[f+4>>2]|0;a=g+100|0;k[a>>2]=k[f>>2];k[a+4>>2]=e;e=k[d+8>>2]|0;a=k[d+12>>2]|0;if(a)h0a(a);k[g+108>>2]=e;e=g+112|0;g=k[e>>2]|0;k[e>>2]=a;if(g)j0a(g);Fza(h,d+16|0,d);return}case 4:{Gza(k[c>>2]|0,d);return}case 5:{Hza(k[c>>2]|0,d);return}case 6:{Iza(k[c>>2]|0,d);return}case 7:{Jza(k[c>>2]|0,d);return}case 8:{zza(k[c>>2]|0,d);return}default:return}while(0)}function Lza(a,b,c,d,e,f,g,h,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var l=0,m=0;j=r;r=r+16|0;h=j+14|0;g=j+13|0;do switch(c|0){case 0:{f=e;l=k[f+4>>2]|0;m=a;k[m>>2]=k[f>>2];k[m+4>>2]=l;k[a+8>>2]=k[e+8>>2];l=k[e+12>>2]|0;k[a+12>>2]=l;if(!l){r=j;return}h0a(l);r=j;return}case 1:{l=e;m=k[l+4>>2]|0;f=a;k[f>>2]=k[l>>2];k[f+4>>2]=m;k[a+8>>2]=k[e+8>>2];m=k[e+12>>2]|0;k[a+12>>2]=m;if(!m){r=j;return}h0a(m);r=j;return}case 2:{m=e;f=k[m+4>>2]|0;l=a;k[l>>2]=k[m>>2];k[l+4>>2]=f;k[a+8>>2]=k[e+8>>2];f=k[e+12>>2]|0;k[a+12>>2]=f;if(!f){r=j;return}h0a(f);r=j;return}case 3:{f=e;l=k[f+4>>2]|0;m=a;k[m>>2]=k[f>>2];k[m+4>>2]=l;k[a+8>>2]=k[e+8>>2];l=k[e+12>>2]|0;k[a+12>>2]=l;if(!l){r=j;return}h0a(l);r=j;return}case 4:{l=e;m=k[l+4>>2]|0;f=a;k[f>>2]=k[l>>2];k[f+4>>2]=m;k[a+8>>2]=k[e+8>>2];m=k[e+12>>2]|0;k[a+12>>2]=m;if(!m){r=j;return}h0a(m);r=j;return}case 5:{m=e;f=k[m+4>>2]|0;l=a;k[l>>2]=k[m>>2];k[l+4>>2]=f;k[a+8>>2]=k[e+8>>2];f=k[e+12>>2]|0;k[a+12>>2]=f;if(!f){r=j;return}h0a(f);r=j;return}case 6:{f=e;l=k[f+4>>2]|0;m=a;k[m>>2]=k[f>>2];k[m+4>>2]=l;k[a+8>>2]=k[e+8>>2];l=k[e+12>>2]|0;k[a+12>>2]=l;if(!l){r=j;return}h0a(l);r=j;return}case 7:{l=e;m=k[l+4>>2]|0;f=a;k[f>>2]=k[l>>2];k[f+4>>2]=m;k[a+8>>2]=k[e+8>>2];m=k[e+12>>2]|0;k[a+12>>2]=m;if(!m){r=j;return}h0a(m);r=j;return}case 8:{m=e;f=k[m+4>>2]|0;l=a;k[l>>2]=k[m>>2];k[l+4>>2]=f;k[a+8>>2]=k[e+8>>2];f=k[e+12>>2]|0;k[a+12>>2]=f;if(!f){r=j;return}h0a(f);r=j;return}case 9:{i[h>>0]=i[j+12>>0]|0;Rza(a,b,d,e,0,h,1);break}case 10:{i[h>>0]=i[j+11>>0]|0;Rza(a,b,d,e,0,h,1);break}case 11:{i[h>>0]=i[j+10>>0]|0;Rza(a,b,d,e,0,h,1);break}case 12:{i[h>>0]=i[j+9>>0]|0;Rza(a,b,d,e,0,h,1);break}case 13:{i[h>>0]=i[j+8>>0]|0;Rza(a,b,d,e,0,h,1);break}case 14:{i[h>>0]=i[j+7>>0]|0;Rza(a,b,d,e,0,h,1);break}case 15:{i[h>>0]=i[j+6>>0]|0;Rza(a,b,d,e,0,h,1);break}case 16:{i[h>>0]=i[j+5>>0]|0;Rza(a,b,d,e,0,h,1);break}case 17:{i[h>>0]=i[j+4>>0]|0;Rza(a,b,d,e,0,h,1);break}case 18:{i[h>>0]=i[j+3>>0]|0;Rza(a,b,d,e,0,h,1);break}case 19:{i[h>>0]=i[j+2>>0]|0;Rza(a,b,d,e,0,h,1);break}default:{i[g>>0]=i[j+1>>0]|0;i[h>>0]=i[j>>0]|0;Sza(a,b,c,d,e,g,h,0,0)}}while(0)}function Mza(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;e=r;r=r+80|0;f=e+76|0;g=e+64|0;h=e+52|0;j=e+40|0;l=e+28|0;m=e+16|0;n=e+4|0;o=e;k[f>>2]=b;b=k[a>>2]|0;if((k[(k[b+28>>2]|0)+88>>2]|0)==(c+1|0)){r=e;return};k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;Ta(627,f|0,m|0)|0;f=x;x=0;if(f&1){f=Hc()|0;K2a(m);Sc(f|0)}x=0;f=Fa(86,m|0,0,295813)|0;p=x;x=0;if(p&1){p=Hc()|0;q=M;s=p;K2a(m);Sc(s|0)};k[l>>2]=k[f>>2];k[l+4>>2]=k[f+4>>2];k[l+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;f=Ta(484,l|0,295849)|0;p=x;x=0;if(p&1){p=Hc()|0;t=M;u=p}else{k[j>>2]=k[f>>2];k[j+4>>2]=k[f+4>>2];k[j+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[o>>2]=(k[(k[(k[a>>2]|0)+28>>2]|0)+88>>2]|0)-c;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;Ta(627,o|0,n|0)|0;o=x;x=0;if(o&1){o=Hc()|0;c=M;K2a(n);v=c;w=o}else{o=i[n>>0]|0;c=(o&1)==0;x=0;a=Fa(88,j|0,(c?n+1|0:k[n+8>>2]|0)|0,(c?(o&255)>>>1:k[n+4>>2]|0)|0)|0;o=x;x=0;if(o&1){o=Hc()|0;y=M;z=o}else{k[h>>2]=k[a>>2];k[h+4>>2]=k[a+4>>2];k[h+8>>2]=k[a+8>>2];k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;x=0;a=Ta(484,h|0,295889)|0;o=x;x=0;do if(o&1){c=Hc()|0;A=M;B=c}else{k[g>>2]=k[a>>2];k[g+4>>2]=k[a+4>>2];k[g+8>>2]=k[a+8>>2];k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;x=0;nb(173,b|0,3,g|0,d|0);c=x;x=0;if(c&1){c=Hc()|0;f=M;K2a(g);A=f;B=c;break}K2a(g);K2a(h);K2a(n);K2a(j);K2a(l);K2a(m);r=e;return}while(0);K2a(h);y=A;z=B}K2a(n);v=y;w=z}K2a(j);t=v;u=w}K2a(l);q=t;s=u;K2a(m);Sc(s|0)}function Nza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>4)+1|0;if(e>>>0>268435455){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>4>>>0<134217727){h=g>>3;g=h>>>0>>0?e:h;h=(k[c>>2]|0)-f>>4;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=268435455;n=(k[c>>2]|0)-f>>4;o=6}if((o|0)==6){i=m;j=KBa(m<<4)|0;l=n}n=j+(l<<4)|0;m=n;o=j+(i<<4)|0;k[n>>2]=k[b>>2];k[n+4>>2]=k[b+4>>2];k[n+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[j+(l<<4)+12>>2]=k[b+12>>2];b=n+16|0;l=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(l|0)){p=m;q=l;r=l}else{i=j;j=n;n=m;while(1){m=j+-16|0;f=i;i=i+-16|0;k[m>>2]=k[i>>2];k[m+4>>2]=k[i+4>>2];k[m+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[j+-4>>2]=k[f+-4>>2];j=n+-16|0;f=j;if((i|0)==(l|0)){s=f;break}else n=f}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{d=d+-16|0;K2a(d)}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function Oza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+48|0;d=c+32|0;e=c;f=e+24|0;k[f>>2]=e+1;g=e+28|0;h=e+22|0;k[g>>2]=h;e=k[a>>2]|0;a=(e|0)<0;k[d>>2]=a?0-e|0:e;k[d+4>>2]=h;i[d+8>>0]=48;k[d+12>>2]=48;e=Qza(d)|0;if(a){a=e+-1|0;i[a>>0]=45;j=a}else j=e;k[f>>2]=j;k[g>>2]=h;g=h-j|0;f=i[b>>0]|0;if(!(f&1)){l=10;m=f}else{f=k[b>>2]|0;l=(f&-2)+-1|0;m=f&255}if(g>>>0>l>>>0){f=(m&1)==0?(m&255)>>>1:k[b+4>>2]|0;S3a(b,l,g-l|0,f,0,f,0);n=i[b>>0]|0}else n=m;m=(n&1)==0?b+1|0:k[b+8>>2]|0;if((j|0)==(h|0))o=m;else{n=j;j=m;while(1){i[j>>0]=i[n>>0]|0;n=n+1|0;if((n|0)==(h|0))break;else j=j+1|0}o=m+g|0}i[o>>0]=0;if(!(i[b>>0]&1)){i[b>>0]=g<<1;r=c;return 1}else{k[b+4>>2]=g;r=c;return 1}return 0}function Pza(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e+24|0;g=e+8|0;h=e;i=KBa(68)|0;k[i+4>>2]=0;k[i+8>>2]=0;k[i>>2]=31248;j=i+12|0;x=0;xa(731,j|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(i);OBa(i);Sc(b|0)}b=j;if(!((k[d>>2]|0)==-1?(k[d+4>>2]|0)==-1:0))l=5;do if((l|0)==5){k[f>>2]=31456;m=d;n=k[m+4>>2]|0;o=f+4|0;k[o>>2]=k[m>>2];k[o+4>>2]=n;k[f+12>>2]=k[d+8>>2];n=k[d+12>>2]|0;k[f+16>>2]=n;o=(n|0)==0;if(!o)h0a(n);x=0;Ta(566,j|0,f|0)|0;m=x;x=0;if(!(m&1)){k[f>>2]=31456;if(o)break;j0a(n);break}m=Hc()|0;p=M;k[f>>2]=31456;if(o){q=p;s=m;j0a(i);Sc(s|0)}j0a(n);q=p;s=m;j0a(i);Sc(s|0)}while(0);k[g>>2]=21048;f=g+4|0;x=0;xa(604,f|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;q=M;s=c;j0a(i);Sc(s|0)}x=0;Ta(564,j|0,g|0)|0;j=x;x=0;if(j&1){j=Hc()|0;c=M;k[g>>2]=21048;K2a(f);q=c;s=j;j0a(i);Sc(s|0)}k[g>>2]=21048;K2a(f);f=k[a+24>>2]|0;k[h>>2]=b;a=h+4|0;k[a>>2]=i;h0a(i);g=f+4|0;j=k[g>>2]|0;if(j>>>0<(k[f+8>>2]|0)>>>0){k[j>>2]=b;k[j+4>>2]=i;k[h>>2]=0;k[a>>2]=0;k[g>>2]=j+8;j0a(i);r=e;return}x=0;xa(732,f|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;f=M;j=k[a>>2]|0;if(!j){q=f;s=h;j0a(i);Sc(s|0)}j0a(j);q=f;s=h;j0a(i);Sc(s|0)}else{s=k[a>>2]|0;if(!s){j0a(i);r=e;return}j0a(s);j0a(i);r=e;return}}function Qza(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;b=r;r=r+16|0;c=b+12|0;d=b;Zpb(c);x=0;e=$a(48)|0;f=x;x=0;if(!(f&1)?(x=0,f=Ta(538,c|0,e|0)|0,e=x,x=0,!(e&1)):0){if(f){f=a+4|0;e=a+12|0;g=k[a>>2]|0;do{h=(k[f>>2]|0)+-1|0;k[f>>2]=h;i[h>>0]=(k[e>>2]|0)+((g>>>0)%10|0);h=k[a>>2]|0;g=(h>>>0)/10|0;k[a>>2]=g}while(h>>>0>9);j=k[f>>2]|0;$pb(c);r=b;return j|0}x=0;f=Ta(495,c|0,74408)|0;g=x;x=0;if(!(g&1)?(x=0,xa(k[(k[f>>2]|0)+20>>2]|0,d|0,f|0),g=x,x=0,!(g&1)):0){g=i[d>>0]|0;e=(g&1)==0;h=e?(g&255)>>>1:k[d+4>>2]|0;if((h|0)!=0?(g=d+8|0,l=d+1|0,(i[(e?l:k[g>>2]|0)>>0]|0)>=1):0){x=0;e=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc()|0;m=M;K2a(d);n=f;o=m;$pb(c);Sc(n|0)}m=i[((i[d>>0]&1)==0?l:k[g>>2]|0)>>0]|0;f=a+4|0;p=a+12|0;q=0;s=m;t=m;while(1){if(!(t<<24>>24)){m=q+1|0;if(m>>>0>>0){u=i[((i[d>>0]&1)==0?l:k[g>>2]|0)+m>>0]|0;v=u<<24>>24<1?127:u}else v=s;u=(k[f>>2]|0)+-1|0;k[f>>2]=u;i[u>>0]=e;w=m;y=v;z=v}else{w=q;y=s;z=t}m=(k[f>>2]|0)+-1|0;k[f>>2]=m;i[m>>0]=(k[p>>2]|0)+(((k[a>>2]|0)>>>0)%10|0);m=k[a>>2]|0;k[a>>2]=(m>>>0)/10|0;if(m>>>0>9){q=w;s=y;t=z+-1<<24>>24}else{A=f;break}}}else{f=a+4|0;z=a+12|0;t=k[a>>2]|0;do{y=(k[f>>2]|0)+-1|0;k[f>>2]=y;i[y>>0]=(k[z>>2]|0)+((t>>>0)%10|0);y=k[a>>2]|0;t=(y>>>0)/10|0;k[a>>2]=t}while(y>>>0>9);A=f}f=k[A>>2]|0;K2a(d);j=f;$pb(c);r=b;return j|0}}j=Hc()|0;n=j;o=M;$pb(c);Sc(n|0);return 0}function Rza(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Tza(a)}function Sza(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;Tza(a)}function Tza(a){a=a|0;cd()}function Uza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;c=r;r=r+96|0;d=c;e=k[a>>2]|0;f=a+4|0;if((e|0)==(f|0)){g=e;h=(g|0)!=(f|0);l=g+32|0;m=h?l:0;r=c;return m|0}a=d+16|0;n=d+24|0;o=d+64|0;p=d+72|0;q=d+76|0;s=d+80|0;t=d+84|0;u=d+88|0;v=d+4|0;w=d+1|0;x=d+8|0;y=b+4|0;z=b+8|0;A=b+1|0;B=e;C=e;while(1){n2a(d,B+16|0);k[a>>2]=k[B+32>>2];e=n;D=B+40|0;E=e+40|0;do{k[e>>2]=k[D>>2];e=e+4|0;D=D+4|0}while((e|0)<(E|0));D=B+80|0;e=k[D+4>>2]|0;E=o;k[E>>2]=k[D>>2];k[E+4>>2]=e;k[p>>2]=k[B+88>>2];e=k[B+92>>2]|0;k[q>>2]=e;if(e)h0a(e);k[s>>2]=k[B+96>>2];k[t>>2]=k[B+100>>2];e=k[B+104>>2]|0;k[u>>2]=e;if(e)h0a(e);e=j[d>>1]|0;E=(e&1)==0;D=(e&254)>>>1;F=E?D:k[v>>2]|0;G=i[b>>0]|0;H=(G&1)==0;I=(e&65535)>>>8&255;a:do if((F|0)==((H?(G&255)>>>1:k[y>>2]|0)|0)){e=H?A:k[z>>2]|0;if(!E){J=(ZLa(k[x>>2]|0,e,F)|0)==0;break}if(F)if(I<<24>>24==(i[e>>0]|0)){K=D;L=w;M=e;while(1){K=K+-1|0;L=L+1|0;if(!K){J=1;break a}M=M+1|0;if((i[L>>0]|0)!=(i[M>>0]|0)){J=0;break}}}else J=0;else J=1}else J=0;while(0);D=k[u>>2]|0;if(D)j0a(D);D=k[q>>2]|0;if(D)j0a(D);K2a(d);if(J){g=B;N=23;break}D=k[C+4>>2]|0;if(!D){I=C;while(1){F=k[I+8>>2]|0;if((k[F>>2]|0)==(I|0)){O=F;break}else I=F}}else{I=D;while(1){F=k[I>>2]|0;if(!F){O=I;break}else I=F}}if((O|0)==(f|0)){g=O;N=23;break}else{B=O;C=O}}if((N|0)==23){h=(g|0)!=(f|0);l=g+32|0;m=h?l:0;r=c;return m|0}return 0}function Vza(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function Wza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+48|0;d=c+32|0;e=c;f=e+24|0;k[f>>2]=e+1;g=e+28|0;h=e+21|0;k[g>>2]=h;k[d>>2]=k[a>>2];k[d+4>>2]=h;i[d+8>>0]=48;k[d+12>>2]=48;a=Qza(d)|0;k[f>>2]=a;k[g>>2]=h;g=h-a|0;f=i[b>>0]|0;if(!(f&1)){j=10;l=f}else{f=k[b>>2]|0;j=(f&-2)+-1|0;l=f&255}if(g>>>0>j>>>0){f=(l&1)==0?(l&255)>>>1:k[b+4>>2]|0;S3a(b,j,g-j|0,f,0,f,0);m=i[b>>0]|0}else m=l;l=(m&1)==0?b+1|0:k[b+8>>2]|0;if((a|0)==(h|0))n=l;else{m=a;a=l;while(1){i[a>>0]=i[m>>0]|0;m=m+1|0;if((m|0)==(h|0))break;else a=a+1|0}n=l+g|0}i[n>>0]=0;if(!(i[b>>0]&1)){i[b>>0]=g<<1;r=c;return 1}else{k[b+4>>2]=g;r=c;return 1}return 0}function Xza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+80|0;d=c;Yza(d,a,b);x=0;b=Ta(539,a|0,d|0)|0;a=x;x=0;if(a&1){a=Hc()|0;e=k[d+72>>2]|0;if(e)j0a(e);e=k[d+60>>2]|0;if(!e)Sc(a|0);j0a(e);Sc(a|0)}else{a=k[d+72>>2]|0;if(a)j0a(a);a=k[d+60>>2]|0;if(!a){r=c;return b|0}j0a(a);r=c;return b|0}return 0}function Yza(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=r;r=r+192|0;e=d+80|0;f=d+40|0;g=d;h=d+120|0;j=d+160|0;l=d+128|0;m=i[c>>0]|0;n=(m&1)==0;o=n?(m&255)>>>1:k[c+4>>2]|0;m=n?c+1|0:k[c+8>>2]|0;n=j;p=n+32|0;do{i[n>>0]=0;n=n+1|0}while((n|0)<(p|0));k[g>>2]=m;k[g+4>>2]=o;k[h>>2]=j;k[h+4>>2]=32;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];_q(f,e)|0;M2a(ED(b+40|0,j)|0,c)|0;c=j+32|0;b=f+32|0;h=e+32|0;o=e+4|0;m=e+32|0;q=f+4|0;s=0;t=1;u=j;while(1){j=i[u>>0]|0;k[e>>2]=s;k[o>>2]=k[l>>2];k[o+4>>2]=k[l+4>>2];k[o+8>>2]=k[l+8>>2];k[o+12>>2]=k[l+12>>2];k[o+16>>2]=k[l+16>>2];k[o+20>>2]=k[l+20>>2];k[o+24>>2]=k[l+24>>2];k[m>>2]=t;HB(e,8,0);n=g;v=e;p=n+40|0;do{k[n>>2]=k[v>>2];n=n+4|0;v=v+4|0}while((n|0)<(p|0));k[f>>2]=0;k[b>>2]=1;k[e>>2]=j&255;k[h>>2]=1;YB(f,g,e);v=k[f>>2]|0;k[l>>2]=k[q>>2];k[l+4>>2]=k[q+4>>2];k[l+8>>2]=k[q+8>>2];k[l+12>>2]=k[q+12>>2];k[l+16>>2]=k[q+16>>2];k[l+20>>2]=k[q+20>>2];k[l+24>>2]=k[q+24>>2];w=k[b>>2]|0;u=u+1|0;if((u|0)==(c|0)){x=v;y=w;break}else{s=v;t=w}}k[a>>2]=3;k[a+8>>2]=x;x=a+12|0;k[x>>2]=k[l>>2];k[x+4>>2]=k[l+4>>2];k[x+8>>2]=k[l+8>>2];k[x+12>>2]=k[l+12>>2];k[x+16>>2]=k[l+16>>2];k[x+20>>2]=k[l+20>>2];k[x+24>>2]=k[l+24>>2];k[a+40>>2]=y;y=a+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=a+56|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;r=d;return}function Zza(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;e=a+16|0;f=k[e>>2]|0;g=f;h=b+16|0;i=k[h>>2]|0;j=(i|0)==(b|0);if((f|0)!=(a|0)){if(!j){k[e>>2]=i;k[h>>2]=g;r=c;return}x=0;xa(k[(k[b>>2]|0)+12>>2]|0,b|0,a|0);g=x;x=0;if(g&1){l=Hc(0)|0;m=M;Fg(l)}g=k[h>>2]|0;Sf[k[(k[g>>2]|0)+16>>2]&2047](g);k[h>>2]=k[e>>2];k[e>>2]=a;r=c;return}if(!j){x=0;xa(k[(k[f>>2]|0)+12>>2]|0,f|0,b|0);j=x;x=0;if(j&1){l=Hc(0)|0;m=M;Fg(l)}j=k[e>>2]|0;Sf[k[(k[j>>2]|0)+16>>2]&2047](j);j=b+16|0;k[e>>2]=k[j>>2];k[j>>2]=b;r=c;return}x=0;xa(k[(k[f>>2]|0)+12>>2]|0,f|0,d|0);j=x;x=0;if(j&1){l=Hc(0)|0;m=M;Fg(l)}j=k[e>>2]|0;Sf[k[(k[j>>2]|0)+16>>2]&2047](j);k[e>>2]=0;j=k[h>>2]|0;x=0;xa(k[(k[j>>2]|0)+12>>2]|0,j|0,f|0);f=x;x=0;if(f&1){l=Hc(0)|0;m=M;Fg(l)}f=k[h>>2]|0;Sf[k[(k[f>>2]|0)+16>>2]&2047](f);k[h>>2]=0;k[e>>2]=a;x=0;xa(k[(k[d>>2]|0)+12>>2]|0,d|0,i|0);i=x;x=0;if(i&1){l=Hc(0)|0;m=M;Fg(l)}Sf[k[(k[d>>2]|0)+16>>2]&2047](d);k[h>>2]=b;r=c;return}function _za(a){a=a|0;OBa(a);return}function $za(a){a=a|0;a=KBa(8)|0;k[a>>2]=47084;return a|0}function aAa(a,b){a=a|0;b=b|0;k[b>>2]=47084;return}function bAa(a){a=a|0;return}function cAa(a){a=a|0;OBa(a);return}function dAa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function eAa(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==296456?a+4|0:0)|0}function fAa(a){a=a|0;return 8704}function gAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+160|0;d=c+152|0;e=c+136|0;f=c+124|0;g=c;h=c+96|0;j=k[a>>2]|0;l=b+16|0;m=k[j+4>>2]|0;a:do if(!m)n=j;else{o=i[l>>0]|0;p=(o&1)==0;q=p?(o&255)>>>1:k[b+20>>2]|0;o=b+24|0;s=l+1|0;t=p?s:k[o>>2]|0;p=m;while(1){u=p+16|0;v=i[u>>0]|0;w=(v&1)==0;y=w?(v&255)>>>1:k[p+20>>2]|0;v=w?u+1|0:k[p+24>>2]|0;u=y>>>0>>0;w=ZLa(t,v,u?y:q)|0;z=q>>>0>>0;if((((w|0)==0?(z?-2147483648:0):w)|0)<0)A=p;else{w=ZLa(v,t,z?q:y)|0;if((((w|0)==0?(u?-2147483648:0):w)|0)>=0)break;A=p+4|0}p=k[A>>2]|0;if(!p){n=j;break a}}k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;nb(83,f|0,296847,6,q+6|0);p=x;x=0;if(p&1){B=Hc()|0;C=M;K2a(f);Sc(B|0)}x=0;Fa(88,f|0,((i[l>>0]&1)==0?s:k[o>>2]|0)|0,q|0)|0;p=x;x=0;if(p&1){B=Hc()|0;C=M;K2a(f);Sc(B|0)}x=0;p=Ta(484,f|0,296854)|0;t=x;x=0;do if(!(t&1)){k[e>>2]=k[p>>2];k[e+4>>2]=k[p+4>>2];k[e+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;x=0;nb(173,j|0,0,e|0,b|0);w=x;x=0;if(w&1){w=Hc()|0;u=M;K2a(e);D=u;E=w;break}else{K2a(e);K2a(f);n=k[a>>2]|0;break a}}else{w=Hc()|0;D=M;E=w}while(0);K2a(f);F=D;G=E;Sc(G|0)}while(0);E=k[n+28>>2]|0;D=k[E>>2]|0;k[E>>2]=D+1;x=0;xa(604,g|0,l|0);l=x;x=0;if(l&1){l=Hc()|0;F=M;G=l;Sc(G|0)}k[g+16>>2]=8;k[g+24>>2]=D;D=g+28|0;k[D>>2]=k[h>>2];k[D+4>>2]=k[h+4>>2];k[D+8>>2]=k[h+8>>2];k[D+12>>2]=k[h+12>>2];k[D+16>>2]=k[h+16>>2];k[D+20>>2]=k[h+20>>2];k[D+24>>2]=k[h+24>>2];k[g+56>>2]=1;k[g+64>>2]=-1;k[g+68>>2]=-1;h=g+72|0;D=g+76|0;l=g+88|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;fb(404,d|0,n|0,g|0);n=x;x=0;if(n&1){n=Hc()|0;d=M;h=k[l>>2]|0;if(h)j0a(h);h=k[D>>2]|0;if(h)j0a(h);K2a(g);F=d;G=n;Sc(G|0)}else{G=k[l>>2]|0;if(G)j0a(G);G=k[D>>2]|0;if(!G){K2a(g);r=c;return}j0a(G);K2a(g);r=c;return}}function hAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d;f=KBa(112)|0;g=f+16|0;k[g>>2]=k[c>>2];k[g+4>>2]=k[c+4>>2];k[g+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[f+32>>2]=k[c+16>>2];h=f+40|0;j=c+24|0;l=h+40|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));k[f+80>>2]=k[c+64>>2];k[f+84>>2]=k[c+68>>2];j=c+72|0;k[f+88>>2]=k[j>>2];h=f+92|0;l=c+76|0;k[h>>2]=k[l>>2];k[j>>2]=0;k[l>>2]=0;k[f+96>>2]=k[c+80>>2];l=c+84|0;k[f+100>>2]=k[l>>2];j=f+104|0;m=c+88|0;k[j>>2]=k[m>>2];k[l>>2]=0;k[m>>2]=0;m=iAa(b,e,g)|0;l=k[m>>2]|0;if(!l){c=k[e>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=c;k[m>>2]=f;c=k[k[b>>2]>>2]|0;if(!c)n=f;else{k[b>>2]=c;n=k[m>>2]|0}ui(k[b+4>>2]|0,n);n=b+8|0;k[n>>2]=(k[n>>2]|0)+1;o=1;p=f}else{o=0;p=l}k[a>>2]=p;i[a+4>>0]=o;if(o<<24>>24){r=d;return}o=k[j>>2]|0;if(o)j0a(o);o=k[h>>2]|0;if(o)j0a(o);K2a(g);OBa(f);r=d;return}function iAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function jAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+48|0;e=d+32|0;f=d+31|0;g=d+30|0;h=d+29|0;j=d+28|0;l=d;m=k[c>>2]|0;n=k[c+4>>2]|0;if(n)h0a(n);k[b>>2]=m;m=b+4|0;c=k[m>>2]|0;k[m>>2]=n;if(c)j0a(c);x=0;xa(925,l|0,b|0);c=x;x=0;if(!(c&1)){x=0;c=Ba(563,40)|0;n=x;x=0;if(!(n&1)){k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=47044;n=c+12|0;k[n>>2]=k[l>>2];k[c+16>>2]=k[l+4>>2];m=l+8|0;k[c+20>>2]=k[m>>2];o=l+12|0;k[c+24>>2]=k[o>>2];k[m>>2]=0;k[o>>2]=0;o=l+16|0;k[c+28>>2]=k[o>>2];m=l+20|0;k[c+32>>2]=k[m>>2];p=l+24|0;k[c+36>>2]=k[p>>2];k[p>>2]=0;k[m>>2]=0;k[o>>2]=0;k[a>>2]=n;k[a+4>>2]=c;r=d;return}c=Hc(4496)|0;n=M;o=l+16|0;m=k[o>>2]|0;if(m){p=l+20|0;q=k[p>>2]|0;if((q|0)==(m|0))s=m;else{t=q;do{q=t+-56|0;k[p>>2]=q;u=k[q>>2]|0;i[f>>0]=i[g>>0]|0;i[e>>0]=i[h>>0]|0;oza(u,u>>31^u,j,t+-52|0,f,e,0,0);t=k[p>>2]|0}while((t|0)!=(m|0));s=k[o>>2]|0}OBa(s)}s=k[l+12>>2]|0;if(!s){v=c;w=n}else{j0a(s);v=c;w=n}}else{n=Hc(4496)|0;v=n;w=M}if((w|0)!=(hf(4496)|0)){y=v;z=w;Sc(y|0)}me(v|0)|0;v=k[b+8>>2]|0;if((k[v>>2]|0)!=(k[v+4>>2]|0)){ge();k[a>>2]=0;k[a+4>>2]=0;r=d;return}x=0;hb(46);x=0;d=Hc()|0;a=M;x=0;hb(45);v=x;x=0;if(v&1){v=Hc(0)|0;Fg(v)}else{y=d;z=a;Sc(y|0)}}function kAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+96|0;d=c+83|0;e=c+82|0;f=c+81|0;g=c+80|0;h=c;j=c+64|0;l=c+8|0;k[j>>2]=-1;k[j+4>>2]=-1;k[j+8>>2]=0;k[j+12>>2]=0;x=0;fb(405,a|0,b|0,j|0);j=x;x=0;if(j&1){j=Hc()|0;m=M;n=j;Sc(n|0)}x=0;xa(884,b|0,5);j=x;x=0;a:do if(!(j&1)){b:do if((k[(k[b>>2]|0)+80>>2]|0)!=6){o=a+20|0;p=a+24|0;q=l+4|0;s=a+16|0;while(1){x=0;xa(926,l|0,b|0);t=x;x=0;if(t&1){u=11;break}t=k[o>>2]|0;if(t>>>0>=(k[p>>2]|0)>>>0){x=0;xa(927,s|0,l|0);v=x;x=0;if(v&1){u=14;break}}else{k[h>>2]=t+4;v=k[l>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;sAa(v,v>>31^v,h,q,e,d,0,0);v=k[l>>2]|0;k[t>>2]=v>>31^v;k[o>>2]=(k[o>>2]|0)+56}v=k[l>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(v,v>>31^v,h,q,e,d,0,0);if((k[(k[b>>2]|0)+80>>2]|0)==6)break b}if((u|0)==11){o=Hc()|0;w=o;y=M;u=13;break a}else if((u|0)==14){o=Hc()|0;s=M;p=k[l>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(p,p>>31^p,h,q,e,d,0,0);z=s;A=o;break a}}while(0);x=0;o=Ba(618,b|0)|0;s=x;x=0;if(!(s&1)?(k[a+4>>2]=o,x=0,Ba(619,k[b>>2]|0)|0,o=x,x=0,!(o&1)):0){r=c;return}else u=12}else u=12;while(0);if((u|0)==12){c=Hc()|0;w=c;y=M;u=13}if((u|0)==13){z=y;A=w}w=a+16|0;y=k[w>>2]|0;if(y){u=a+20|0;c=k[u>>2]|0;if((c|0)==(y|0))B=y;else{b=c;do{c=b+-56|0;k[u>>2]=c;l=k[c>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(l,l>>31^l,h,b+-52|0,e,d,0,0);b=k[u>>2]|0}while((b|0)!=(y|0));B=k[w>>2]|0}OBa(B)}B=k[a+12>>2]|0;if(!B){m=z;n=A;Sc(n|0)}j0a(B);m=z;n=A;Sc(n|0)}function lAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;c=r;r=r+352|0;d=c+304|0;e=c+350|0;f=c+349|0;g=c+348|0;h=c+140|0;j=c+136|0;l=c+268|0;m=c+240|0;n=c+224|0;o=c+80|0;p=c+176|0;q=c+160|0;s=c+28|0;t=c+144|0;u=c;switch(k[(k[b>>2]|0)+80>>2]|0){case 128:{mAa(l,b);k[a+4>>2]=k[l>>2];k[a+8>>2]=k[l+4>>2];v=l+8|0;k[a+12>>2]=k[v>>2];w=l+12|0;k[a+16>>2]=k[w>>2];k[v>>2]=0;k[w>>2]=0;v=a+20|0;y=l+16|0;k[v>>2]=k[y>>2];k[v+4>>2]=k[y+4>>2];k[v+8>>2]=k[y+8>>2];k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;v=l+28|0;k[a+32>>2]=k[v>>2];z=l+32|0;k[a+36>>2]=k[z>>2];k[v>>2]=0;k[z>>2]=0;k[a>>2]=7;K2a(y);y=k[w>>2]|0;if(!y){r=c;return}j0a(y);r=c;return}case 5:{kAa(m,b);k[a+4>>2]=k[m>>2];k[a+8>>2]=k[m+4>>2];y=m+8|0;k[a+12>>2]=k[y>>2];w=m+12|0;k[a+16>>2]=k[w>>2];k[y>>2]=0;k[w>>2]=0;w=m+16|0;k[a+20>>2]=k[w>>2];y=m+20|0;k[a+24>>2]=k[y>>2];z=m+24|0;k[a+28>>2]=k[z>>2];k[z>>2]=0;k[y>>2]=0;k[w>>2]=0;k[a>>2]=8;r=c;return}case 12:{k[n>>2]=-1;k[n+4>>2]=-1;k[n+8>>2]=0;k[n+12>>2]=0;x=0;fb(406,d|0,b|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;A=n;B=M;Sc(A|0)}x=0;Ba(619,k[b>>2]|0)|0;n=x;x=0;if((((!(n&1)?(x=0,xa(884,b|0,7),n=x,x=0,!(n&1)):0)?(x=0,n=Ba(616,b|0)|0,w=x,x=0,!(w&1)):0)?(x=0,w=Ba(618,b|0)|0,y=x,x=0,!(y&1)):0)?(x=0,y=Ba(617,b|0)|0,z=x,x=0,!(z&1)):0){z=k[y>>2]|0;m=k[y+4>>2]|0;if(m){h0a(m);h0a(m);j0a(m)}k[d+16>>2]=n;k[d+20>>2]=w;k[d+24>>2]=z;z=d+28|0;w=k[z>>2]|0;k[z>>2]=m;if(w)j0a(w);w=d+32|0;x=0;Ta(493,w|0,(k[b>>2]|0)+100|0)|0;m=x;x=0;if(((!(m&1)?(x=0,m=Ba(618,b|0)|0,n=x,x=0,!(n&1)):0)?(k[d+4>>2]=m,x=0,xa(884,b|0,119),m=x,x=0,!(m&1)):0)?(x=0,Ta(628,a+4|0,d|0)|0,m=x,x=0,!(m&1)):0){k[a>>2]=3;K2a(w);w=k[z>>2]|0;if(w)j0a(w);w=k[d+12>>2]|0;if(w)j0a(w);r=c;return}}w=Hc()|0;z=M;K2a(d+32|0);m=k[d+28>>2]|0;if(m)j0a(m);m=k[d+12>>2]|0;if(!m){A=w;B=z;Sc(A|0)}j0a(m);A=w;B=z;Sc(A|0);break}default:{nAa(o,b,0);a:do switch(k[(k[b>>2]|0)+80>>2]|0){case 1:{x=0;fb(407,p|0,b|0,o|0);z=x;x=0;if(z&1)C=30;else{k[a+4>>2]=k[p>>2];k[a+8>>2]=k[p+4>>2];z=p+8|0;k[a+12>>2]=k[z>>2];w=p+12|0;k[a+16>>2]=k[w>>2];k[z>>2]=0;k[w>>2]=0;k[a+20>>2]=k[p+16>>2];k[a+24>>2]=k[p+20>>2];w=p+24|0;k[a+28>>2]=k[w>>2];z=p+28|0;k[a+32>>2]=k[z>>2];k[w>>2]=0;k[z>>2]=0;i[a+36>>0]=i[p+32>>0]|0;z=p+36|0;k[a+40>>2]=k[z>>2];w=p+40|0;k[a+44>>2]=k[w>>2];m=p+44|0;k[a+48>>2]=k[m>>2];k[m>>2]=0;k[w>>2]=0;k[z>>2]=0;k[a>>2]=6;C=90}break}case 7:{z=k[o>>2]|0;w=o+4|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;m=(wAa(z,z>>31^z,h,w,e,d,0,0)|0)+4|0;do if((k[m>>2]|0)!=296871){x=0;fb(140,q|0,296908,44);z=x;x=0;if(z&1){C=30;break a}x=0;xa(883,b|0,q|0);z=x;x=0;if(z&1){z=Hc()|0;n=M;K2a(q);D=z;E=n;F=w;G=o;break a}else{K2a(q);break}}while(0);m=k[o>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;n=xAa(m,m>>31^m,h,w,e,d,0,0)|0;if(!n){k[j>>2]=47140;x=0;va(1525,j|0);x=0;m=Hc()|0;H=o;I=w;J=M;K=m;C=31;break a}x=0;Ba(619,k[b>>2]|0)|0;m=x;x=0;if(!(m&1)){if((k[(k[b>>2]|0)+80>>2]|0)!=12){x=0;fb(409,u|0,b|0,n|0);m=x;x=0;if(m&1){C=30;break a}m=u+16|0;x=0;Ta(493,m|0,n+16|0)|0;z=x;x=0;do if(z&1){y=Hc()|0;L=u+12|0;N=M;O=y}else{y=u;v=k[y+4>>2]|0;l=a+4|0;k[l>>2]=k[y>>2];k[l+4>>2]=v;k[a+12>>2]=k[u+8>>2];v=a+16|0;l=u+12|0;y=k[l>>2]|0;k[v>>2]=y;if(y)h0a(y);x=0;xa(604,a+20|0,m|0);y=x;x=0;if(y&1){y=Hc()|0;P=M;Q=k[v>>2]|0;if(!Q){L=l;N=P;O=y;break}j0a(Q);L=l;N=P;O=y;break}k[a>>2]=2;K2a(m);y=k[l>>2]|0;if(y)j0a(y);C=90;break a}while(0);K2a(m);z=k[L>>2]|0;if(!z){D=O;E=N;F=w;G=o;break a}j0a(z);D=O;E=N;F=w;G=o;break a}x=0;fb(408,s|0,b|0,n|0);z=x;x=0;if(!(z&1)){x=0;Ba(619,k[b>>2]|0)|0;z=x;x=0;do if(!(z&1)){y=n;l=k[y+4>>2]|0;P=s+16|0;k[P>>2]=k[y>>2];k[P+4>>2]=l;l=k[n+8>>2]|0;P=k[n+12>>2]|0;if(P)h0a(P);k[s+24>>2]=l;l=s+28|0;y=k[l>>2]|0;k[l>>2]=P;if(y)j0a(y);y=s+32|0;x=0;Ta(493,y|0,n+16|0)|0;P=x;x=0;if(!(P&1)?(P=s+44|0,x=0,Q=Ba(563,56)|0,v=x,x=0,!(v&1)):0){x=0;xa(928,Q|0,b|0);v=x;x=0;if(v&1){v=Hc()|0;R=M;OBa(Q);S=v;T=R;break}R=Q;x=0;v=Ba(563,16)|0;U=x;x=0;if(U&1){U=Hc()|0;V=M;W=k[Q>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(W,W>>31^W,h,Q+4|0,e,d,0,0);OBa(Q);X=V;Y=U;C=68;break}k[v+4>>2]=0;k[v+8>>2]=0;k[v>>2]=47160;k[v+12>>2]=R;k[P>>2]=R;R=s+48|0;U=k[R>>2]|0;k[R>>2]=v;if(!U)Z=Q;else{j0a(U);Z=k[P>>2]|0}P=k[Z>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Lza(t,P,P>>31^P,h,Z+4|0,e,d,0,0);k[s+4>>2]=k[t+4>>2];P=k[t+12>>2]|0;if(P)j0a(P);x=0;xa(929,a+4|0,s|0);P=x;x=0;if(!(P&1)){k[a>>2]=5;P=k[R>>2]|0;if(P)j0a(P);K2a(y);y=k[l>>2]|0;if(y)j0a(y);y=k[s+12>>2]|0;if(y)j0a(y);C=90;break a}else C=67}else C=67}else C=67;while(0);if((C|0)==67){n=Hc()|0;X=M;Y=n;C=68}if((C|0)==68){S=Y;T=X}n=k[s+48>>2]|0;if(n)j0a(n);K2a(s+32|0);n=k[s+28>>2]|0;if(n)j0a(n);n=k[s+12>>2]|0;if(!n){D=S;E=T;F=w;G=o}else{j0a(n);D=S;E=T;F=w;G=o}}else C=30}else C=30;break}default:{k[h>>2]=a+4;n=k[o>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;sAa(n,n>>31^n,h,o+4|0,e,d,0,0);n=k[o>>2]|0;k[a>>2]=n>>31^n;C=90}}while(0);if((C|0)==30){a=Hc()|0;H=o;I=o+4|0;J=M;K=a;C=31}else if((C|0)==90){a=k[o>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(a,a>>31^a,h,o+4|0,e,d,0,0);r=c;return}if((C|0)==31){D=K;E=J;F=I;G=H}H=k[G>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(H,H>>31^H,h,F,e,d,0,0);A=D;B=E;Sc(A|0)}}}function mAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+48|0;d=c+43|0;e=c+42|0;f=c+41|0;g=c+40|0;h=c;j=c+24|0;l=c+8|0;k[j>>2]=-1;k[j+4>>2]=-1;k[j+8>>2]=0;k[j+12>>2]=0;x=0;fb(410,a|0,b|0,j|0);j=x;x=0;if(j&1){j=Hc()|0;m=M;n=j;Sc(n|0)}x=0;xa(884,b|0,128);j=x;x=0;do if(((((!(j&1)?(x=0,Ta(493,a+16|0,(k[b>>2]|0)+100|0)|0,o=x,x=0,!(o&1)):0)?(x=0,xa(884,b|0,119),o=x,x=0,!(o&1)):0)?(x=0,xa(884,b|0,7),o=x,x=0,!(o&1)):0)?(x=0,xa(884,b|0,12),o=x,x=0,!(o&1)):0)?(o=a+28|0,x=0,p=Ba(563,56)|0,q=x,x=0,!(q&1)):0){x=0;xa(928,p|0,b|0);q=x;x=0;if(q&1){q=Hc()|0;s=M;OBa(p);t=s;u=q;break}q=p;x=0;s=Ba(563,16)|0;v=x;x=0;if(v&1){v=Hc()|0;w=M;y=k[p>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(y,y>>31^y,h,p+4|0,e,d,0,0);OBa(p);z=w;A=v;B=19;break}k[s+4>>2]=0;k[s+8>>2]=0;k[s>>2]=47160;k[s+12>>2]=q;k[o>>2]=q;q=a+32|0;v=k[q>>2]|0;k[q>>2]=s;if(!v)C=p;else{j0a(v);C=k[o>>2]|0}o=k[C>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;Lza(l,o,o>>31^o,h,C+4|0,e,d,0,0);k[a+4>>2]=k[l+4>>2];o=k[l+12>>2]|0;if(!o){r=c;return}j0a(o);r=c;return}else B=18;while(0);if((B|0)==18){c=Hc()|0;z=M;A=c;B=19}if((B|0)==19){t=z;u=A}A=k[a+32>>2]|0;if(A)j0a(A);K2a(a+16|0);A=k[a+12>>2]|0;if(!A){m=t;n=u;Sc(n|0)}j0a(A);m=t;n=u;Sc(n|0)}function nAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;d=r;r=r+192|0;e=d+168|0;f=d+183|0;g=d+182|0;h=d+181|0;j=d+180|0;m=d+156|0;n=d+112|0;o=d+144|0;p=d+96|0;q=d+76|0;s=d+48|0;t=d+16|0;u=d;if((i[8712]|0)==0?(Bb(8712)|0)!=0:0){k[11796]=0;k[11797]=0;k[11795]=47184;Kc(8712)}a:do if((k[11797]|0)==0?(v=k[7621]|0,(v|0)!=30488):0){w=e+8|0;y=e+1|0;z=e+4|0;A=v;b:while(1){v=A+28|0;B=i[v>>0]|0;if(B<<24>>24!=91?!((B&255)>95&B<<24>>24>-1):0){n2a(e,A+16|0);if((i[v>>0]|0)==-1?(x=0,Ta(496,e|0,296953)|0,B=x,x=0,B&1):0){C=12;break}B=i[e>>0]|0;D=(B&1)==0;E=D?y:k[w>>2]|0;F=D?(B&255)>>>1:k[z>>2]|0;B=E+F|0;if(F){F=E;D=E;while(1){x=0;E=Ba(623,l[F>>0]|0)|0;G=x;x=0;if(G&1){C=11;break b}i[D>>0]=E;F=F+1|0;if((F|0)==(B|0))break;else D=D+1|0}}D=i[v>>0]|0;x=0;B=Ta(629,47180,e|0)|0;F=x;x=0;if(F&1){C=12;break}i[B>>0]=D;K2a(e)}D=k[A+4>>2]|0;if(!D){B=A;while(1){F=k[B+8>>2]|0;if((k[F>>2]|0)==(B|0)){H=F;break}else B=F}}else{B=D;while(1){v=k[B>>2]|0;if(!v){H=B;break}else B=v}}if((H|0)==30488)break a;else A=H}if((C|0)==11){A=Hc()|0;I=A;J=M}else if((C|0)==12){A=Hc()|0;I=A;J=M}K2a(e);K=I;L=J;Sc(K|0)}while(0);J=a+4|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[J+16>>2]=0;k[J>>2]=-1;k[a+8>>2]=-1;k[a+12>>2]=0;k[a+16>>2]=0;k[a>>2]=0;I=k[b>>2]|0;H=I+80|0;c:do switch(k[H>>2]|0){case 101:case 80:case 119:{k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;switch(k[H>>2]|0){case 80:{x=0;Ta(496,m|0,296966)|0;A=x;x=0;if(A&1)C=28;else C=31;break}case 101:{x=0;Ta(496,m|0,296973)|0;A=x;x=0;if(A&1)C=28;else C=31;break}default:{x=0;Ta(493,m|0,I+100|0)|0;A=x;x=0;if(A&1)C=28;else C=31}}d:do if((C|0)==31){A=k[11796]|0;e:do if(A){z=i[m>>0]|0;w=(z&1)==0;y=w?(z&255)>>>1:k[m+4>>2]|0;z=w?m+1|0:k[m+8>>2]|0;w=A;while(1){B=w+16|0;D=i[B>>0]|0;v=(D&1)==0;F=v?(D&255)>>>1:k[w+20>>2]|0;D=v?B+1|0:k[w+24>>2]|0;B=F>>>0>>0;v=ZLa(z,D,B?F:y)|0;E=y>>>0>>0;if((((v|0)==0?(E?-2147483648:0):v)|0)<0)N=w;else{v=ZLa(D,z,E?y:F)|0;if((((v|0)==0?(B?-2147483648:0):v)|0)>=0)break;N=w+4|0}w=k[N>>2]|0;if(!w){C=61;break e}}x=0;w=Ta(629,47180,m|0)|0;y=x;x=0;if(y&1){C=28;break d}if(c){x=0;xa(692,n|0,i[w>>0]|0);y=x;x=0;if(y&1){C=28;break d}f:do if((k[n+20>>2]|0)!=1){k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;y=i[n>>0]|0;z=(y&1)==0?(y&255)>>>1:k[n+4>>2]|0;x=0;nb(83,p|0,296978,12,z+12|0);y=x;x=0;if(!(y&1)?(x=0,Fa(88,p|0,((i[n>>0]&1)==0?n+1|0:k[n+8>>2]|0)|0,z|0)|0,z=x,x=0,!(z&1)):0){x=0;z=Ta(484,p|0,296991)|0;y=x;x=0;do if(!(y&1)){k[o>>2]=k[z>>2];k[o+4>>2]=k[z+4>>2];k[o+8>>2]=k[z+8>>2];k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;x=0;xa(883,b|0,o|0);v=x;x=0;if(v&1){v=Hc()|0;B=M;K2a(o);O=v;P=B;break}else{K2a(o);K2a(p);break f}}else{B=Hc()|0;O=B;P=M}while(0);K2a(p);Q=O;R=P}else{z=Hc()|0;y=M;K2a(p);Q=z;R=y}K2a(n);S=Q;T=R;break d}while(0);K2a(n)}x=0;y=Ba(616,b|0)|0;z=x;x=0;if(z&1){C=28;break d}x=0;z=Ba(618,b|0)|0;B=x;x=0;if(B&1){C=28;break d}x=0;B=Ba(617,b|0)|0;v=x;x=0;if(v&1){C=28;break d}v=k[B>>2]|0;F=k[B+4>>2]|0;if(!F){k[q>>2]=y;k[q+4>>2]=z;k[q+8>>2]=v}else{h0a(F);k[q>>2]=y;k[q+4>>2]=z;k[q+8>>2]=v;h0a(F);j0a(F)}v=q+12|0;k[v>>2]=F;i[q+16>>0]=i[w>>0]|0;EAa(a,q);F=k[v>>2]|0;if(F)j0a(F)}else C=61;while(0);do if((C|0)==61){x=0;A=Ba(616,b|0)|0;F=x;x=0;if(F&1){C=28;break d}x=0;F=Ba(618,b|0)|0;v=x;x=0;if(v&1){C=28;break d}x=0;v=Ba(617,b|0)|0;z=x;x=0;if(z&1){C=28;break d}z=k[v>>2]|0;y=k[v+4>>2]|0;if(!y){k[s>>2]=A;k[s+4>>2]=F;k[s+8>>2]=z}else{h0a(y);k[s>>2]=A;k[s+4>>2]=F;k[s+8>>2]=z;h0a(y);j0a(y)}z=s+12|0;k[z>>2]=y;y=s+16|0;x=0;xa(604,y|0,m|0);F=x;x=0;if(F&1){F=Hc()|0;A=M;v=k[z>>2]|0;if(!v){S=F;T=A;break d}j0a(v);S=F;T=A;break d}else{FAa(a,s);K2a(y);y=k[z>>2]|0;if(!y)break;j0a(y);break}}while(0);K2a(m);C=88;break c}while(0);if((C|0)==28){y=Hc()|0;S=y;T=M}K2a(m);U=S;V=T;break}case 116:case 117:{x=0;y=Ba(616,b|0)|0;z=x;x=0;if((!(z&1)?(x=0,z=Ba(618,b|0)|0,A=x,x=0,!(A&1)):0)?(x=0,A=Ba(617,b|0)|0,F=x,x=0,!(F&1)):0){F=k[A>>2]|0;v=k[A+4>>2]|0;if(!v){k[t>>2]=y;k[t+4>>2]=z;k[t+8>>2]=F}else{h0a(v);k[t>>2]=y;k[t+4>>2]=z;k[t+8>>2]=F;h0a(v);j0a(v)}F=t+12|0;k[F>>2]=v;v=k[b>>2]|0;i[t+16>>0]=(k[v+80>>2]|0)==116&1;z=t+20|0;x=0;xa(604,z|0,v+100|0);v=x;x=0;if(v&1){v=Hc()|0;y=M;A=k[F>>2]|0;if(!A){U=v;V=y;break c}j0a(A);U=v;V=y;break c}else{GAa(a,t);K2a(z);z=k[F>>2]|0;if(!z){C=88;break c}j0a(z);C=88;break c}}else C=25;break}default:{x=0;fb(140,u|0,297021,46);z=x;x=0;if(!(z&1)){x=0;xa(883,b|0,u|0);z=x;x=0;if(z&1){z=Hc()|0;F=M;K2a(u);U=z;V=F;break c}else{K2a(u);C=88;break c}}else C=25}}while(0);if((C|0)==88){x=0;Ba(619,k[b>>2]|0)|0;b=x;x=0;if(b&1)C=25;else{r=d;return}}if((C|0)==25){C=Hc()|0;U=C;V=M}C=k[a>>2]|0;i[f>>0]=i[g>>0]|0;i[e>>0]=i[h>>0]|0;oza(C,C>>31^C,j,J,f,e,0,0);K=U;L=V;Sc(K|0)}function oAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0;d=r;r=r+272|0;e=d+263|0;f=d+262|0;g=d+261|0;h=d+260|0;j=d+128|0;l=d+40|0;m=d+248|0;n=d+8|0;o=d+236|0;p=d+224|0;q=d;s=d+168|0;t=d+156|0;u=d+144|0;v=d+132|0;w=d+116|0;y=d+104|0;z=d+92|0;A=d+80|0;B=d+68|0;C=d+56|0;D=d+44|0;E=k[c>>2]|0;F=c+4|0;i[f>>0]=i[g>>0]|0;i[e>>0]=i[h>>0]|0;G=(wAa(E,E>>31^E,j,F,f,e,0,0)|0)+4|0;do if((k[G>>2]|0)!=297068){q2a(m,297106,46);x=0;xa(883,b|0,m|0);E=x;x=0;if(!(E&1)){K2a(m);break}E=Hc()|0;H=M;K2a(m);I=E;J=H;Sc(I|0)}while(0);k[a>>2]=-1;m=a+4|0;k[m>>2]=-1;k[a+8>>2]=0;G=a+12|0;k[G>>2]=0;k[a+16>>2]=-1;H=a+20|0;k[H>>2]=-1;k[a+24>>2]=0;E=a+28|0;k[E>>2]=0;K=a+36|0;k[K>>2]=0;L=a+40|0;k[L>>2]=0;k[a+44>>2]=0;N=a+16|0;O=k[c>>2]|0;i[f>>0]=i[g>>0]|0;i[e>>0]=i[h>>0]|0;c=HAa(O,O>>31^O,j,F,f,e,0,0)|0;do if(!c){k[l>>2]=47140;x=0;va(1525,l|0);x=0;F=Hc()|0;P=M;Q=F;R=19}else{k[N>>2]=k[c>>2];k[H>>2]=k[c+4>>2];F=a+24|0;O=c+8|0;S=k[O>>2]|0;T=c+12|0;U=k[T>>2]|0;k[O>>2]=0;k[T>>2]=0;k[F>>2]=S;T=k[E>>2]|0;k[E>>2]=U;if(!T){V=U;W=S}else{j0a(T);V=k[E>>2]|0;W=k[F>>2]|0}F=a+32|0;i[F>>0]=i[c+16>>0]|0;T=N;S=k[T+4>>2]|0;U=a;k[U>>2]=k[T>>2];k[U+4>>2]=S;if(V)h0a(V);k[a+8>>2]=W;S=k[G>>2]|0;k[G>>2]=V;if(S)j0a(S);S=i[F>>0]|0;x=0;xa(692,n|0,S|0);F=x;x=0;if(F&1){F=Hc()|0;P=M;Q=F;R=19;break}do if(S<<24>>24<0&(S&255)<144){x=0;fb(140,o|0,297153,53);F=x;x=0;if(!(F&1)){x=0;xa(883,b|0,o|0);F=x;x=0;if(F&1){F=Hc()|0;U=M;K2a(o);X=F;Y=U;break}else{K2a(o);R=24;break}}else R=21}else R=24;while(0);a:do if((R|0)==24){do if((S&-16)<<24>>24==-112){x=0;fb(140,p|0,297207,54);U=x;x=0;if(U&1){R=21;break a}x=0;xa(883,b|0,p|0);U=x;x=0;if(U&1){U=Hc()|0;F=M;K2a(p);X=U;Y=F;break a}else{K2a(p);Z=b;break}}else Z=b;while(0);x=0;xa(884,Z|0,1);F=x;x=0;if(!(F&1)){F=k[n+16>>2]|0;k[q>>2]=F;b:do if(F){U=a+44|0;T=s+4|0;O=n+4|0;_=n+8|0;$=n+1|0;aa=y+8|0;ba=y+1|0;ca=y+4|0;da=a+36|0;ea=F+-1|0;fa=0;c:while(1){x=0;xa(928,s|0,b|0);ga=x;x=0;if(ga&1){R=20;break}ga=k[L>>2]|0;if(ga>>>0>=(k[U>>2]|0)>>>0){x=0;xa(927,da|0,s|0);ha=x;x=0;if(ha&1){R=49;break}}else{k[j>>2]=ga+4;ha=k[s>>2]|0;i[f>>0]=i[g>>0]|0;i[e>>0]=i[h>>0]|0;sAa(ha,ha>>31^ha,j,T,f,e,0,0);ha=k[s>>2]|0;k[ga>>2]=ha>>31^ha;k[L>>2]=(k[L>>2]|0)+56}ha=k[s>>2]|0;i[f>>0]=i[g>>0]|0;i[e>>0]=i[h>>0]|0;oza(ha,ha>>31^ha,j,T,f,e,0,0);do if((fa|0)!=(ea|0)){ha=k[b>>2]|0;if((k[ha+80>>2]|0)==24){x=0;Ba(619,ha|0)|0;ha=x;x=0;if(ha&1){R=20;break c}else break};k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;ha=i[n>>0]|0;ga=(ha&1)==0?(ha&255)>>>1:k[O>>2]|0;x=0;nb(83,w|0,297262,16,ga+16|0);ha=x;x=0;if(ha&1){R=42;break c}x=0;Fa(88,w|0,((i[n>>0]&1)==0?$:k[_>>2]|0)|0,ga|0)|0;ga=x;x=0;if(ga&1){R=42;break c}x=0;ga=Ta(484,w|0,297279)|0;ha=x;x=0;if(ha&1){R=50;break c};k[v>>2]=k[ga>>2];k[v+4>>2]=k[ga+4>>2];k[v+8>>2]=k[ga+8>>2];k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;x=0;Ta(626,q|0,y|0)|0;ga=x;x=0;if(ga&1){R=51;break c}ga=i[y>>0]|0;ha=(ga&1)==0;x=0;ia=Fa(88,v|0,(ha?ba:k[aa>>2]|0)|0,(ha?(ga&255)>>>1:k[ca>>2]|0)|0)|0;ga=x;x=0;if(ga&1){R=52;break c};k[u>>2]=k[ia>>2];k[u+4>>2]=k[ia+4>>2];k[u+8>>2]=k[ia+8>>2];k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;x=0;ia=Ta(484,u|0,297289)|0;ga=x;x=0;if(ga&1){R=53;break c};k[t>>2]=k[ia>>2];k[t+4>>2]=k[ia+4>>2];k[t+8>>2]=k[ia+8>>2];k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;x=0;xa(883,Z|0,t|0);ia=x;x=0;if(ia&1){R=54;break c}K2a(t);K2a(u);K2a(y);K2a(v);K2a(w)}while(0);fa=fa+1|0;if(fa>>>0>=F>>>0)break b}if((R|0)==20){fa=Hc()|0;ja=M;ka=fa;R=22;break a}else if((R|0)==42){fa=Hc()|0;ca=M;K2a(w);ja=ca;ka=fa;R=22;break a}else if((R|0)==49){fa=Hc()|0;ca=M;aa=k[s>>2]|0;i[f>>0]=i[g>>0]|0;i[e>>0]=i[h>>0]|0;oza(aa,aa>>31^aa,j,T,f,e,0,0);X=fa;Y=ca;break a}else if((R|0)==50){ca=Hc()|0;la=ca;ma=M}else if((R|0)==51){ca=Hc()|0;fa=M;K2a(y);na=ca;oa=fa;R=57}else if((R|0)==52){fa=Hc()|0;pa=fa;qa=M;R=56}else if((R|0)==53){fa=Hc()|0;ra=fa;sa=M;R=55}else if((R|0)==54){fa=Hc()|0;ca=M;K2a(t);ra=fa;sa=ca;R=55}if((R|0)==55){K2a(u);pa=ra;qa=sa;R=56}if((R|0)==56){K2a(y);na=pa;oa=qa;R=57}if((R|0)==57){K2a(v);la=na;ma=oa}K2a(w);X=la;Y=ma;break a}while(0);x=0;F=Ba(618,Z|0)|0;ca=x;x=0;if(!(ca&1)){k[m>>2]=F;d:do if((k[(k[b>>2]|0)+80>>2]|0)==24){k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;F=i[n>>0]|0;ca=(F&1)==0?(F&255)>>>1:k[n+4>>2]|0;x=0;nb(83,C|0,297301,14,ca+14|0);F=x;x=0;if(!(F&1)?(x=0,Fa(88,C|0,((i[n>>0]&1)==0?n+1|0:k[n+8>>2]|0)|0,ca|0)|0,ca=x,x=0,!(ca&1)):0){x=0;ca=Ta(484,C|0,297279)|0;F=x;x=0;if(F&1){F=Hc()|0;ta=F;ua=M}else{k[B>>2]=k[ca>>2];k[B+4>>2]=k[ca+4>>2];k[B+8>>2]=k[ca+8>>2];k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;x=0;Ta(626,q|0,D|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;F=M;K2a(D);wa=ca;ya=F}else{F=i[D>>0]|0;ca=(F&1)==0;x=0;fa=Fa(88,B|0,(ca?D+1|0:k[D+8>>2]|0)|0,(ca?(F&255)>>>1:k[D+4>>2]|0)|0)|0;F=x;x=0;if(F&1){F=Hc()|0;za=F;Aa=M}else{k[A>>2]=k[fa>>2];k[A+4>>2]=k[fa+4>>2];k[A+8>>2]=k[fa+8>>2];k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;x=0;fa=Ta(484,A|0,297289)|0;F=x;x=0;do if(!(F&1)){k[z>>2]=k[fa>>2];k[z+4>>2]=k[fa+4>>2];k[z+8>>2]=k[fa+8>>2];k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;x=0;xa(883,Z|0,z|0);ca=x;x=0;if(ca&1){ca=Hc()|0;aa=M;K2a(z);Ca=ca;Da=aa;break}else{K2a(z);K2a(A);K2a(D);K2a(B);K2a(C);break d}}else{aa=Hc()|0;Ca=aa;Da=M}while(0);K2a(A);za=Ca;Aa=Da}K2a(D);wa=za;ya=Aa}K2a(B);ta=wa;ua=ya}K2a(C);X=ta;Y=ua;break a}fa=Hc()|0;F=M;K2a(C);ja=F;ka=fa;R=22;break a}while(0);x=0;xa(884,Z|0,2);fa=x;x=0;if(!(fa&1)){K2a(n);r=d;return}else R=21}else R=21}else R=21}while(0);if((R|0)==21){S=Hc()|0;ja=M;ka=S;R=22}if((R|0)==22){X=ka;Y=ja}K2a(n);Ea=X;Ga=Y}while(0);if((R|0)==19){Ea=Q;Ga=P}P=k[K>>2]|0;if(P){Q=k[L>>2]|0;if((Q|0)==(P|0))Ha=P;else{R=Q;do{Q=R+-56|0;k[L>>2]=Q;Y=k[Q>>2]|0;i[f>>0]=i[g>>0]|0;i[e>>0]=i[h>>0]|0;oza(Y,Y>>31^Y,j,R+-52|0,f,e,0,0);R=k[L>>2]|0}while((R|0)!=(P|0));Ha=k[K>>2]|0}OBa(Ha)}Ha=k[E>>2]|0;if(Ha)j0a(Ha);Ha=k[G>>2]|0;if(!Ha){I=Ea;J=Ga;Sc(I|0)}j0a(Ha);I=Ea;J=Ga;Sc(I|0)}function pAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+128|0;d=c+115|0;e=c+114|0;f=c+113|0;g=c+112|0;h=c+56|0;j=c;l=c+64|0;nAa(j,b,1);if((k[(k[b>>2]|0)+80>>2]|0)!=1){k[h>>2]=a+4;m=k[j>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;sAa(m,m>>31^m,h,j+4|0,e,d,0,0);m=k[j>>2]|0;k[a>>2]=m>>31^m;n=m;o=n>>31;p=o^n;q=j+4|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(n,p,h,q,e,d,0,0);r=c;return}x=0;fb(407,l|0,b|0,j|0);b=x;x=0;if(b&1){b=Hc()|0;m=k[j>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(m,m>>31^m,h,j+4|0,e,d,0,0);Sc(b|0)}k[a+4>>2]=k[l>>2];k[a+8>>2]=k[l+4>>2];b=l+8|0;k[a+12>>2]=k[b>>2];m=l+12|0;k[a+16>>2]=k[m>>2];k[b>>2]=0;k[m>>2]=0;k[a+20>>2]=k[l+16>>2];k[a+24>>2]=k[l+20>>2];m=l+24|0;k[a+28>>2]=k[m>>2];b=l+28|0;k[a+32>>2]=k[b>>2];k[m>>2]=0;k[b>>2]=0;i[a+36>>0]=i[l+32>>0]|0;b=l+36|0;k[a+40>>2]=k[b>>2];m=l+40|0;k[a+44>>2]=k[m>>2];s=l+44|0;k[a+48>>2]=k[s>>2];k[s>>2]=0;k[m>>2]=0;k[b>>2]=0;k[a>>2]=6;n=k[j>>2]|0;o=n>>31;p=o^n;q=j+4|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(n,p,h,q,e,d,0,0);r=c;return}function qAa(){k[11828]=0;k[11829]=0;k[11830]=0;return}function rAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+4|0;e=a+8|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;e=c;f=k[e>>2]|0;g=k[e+4>>2]|0;e=a;k[e>>2]=f;k[e+4>>2]=g;e=a+8|0;h=k[c+8>>2]|0;i=k[c+12>>2]|0;if(i)h0a(i);k[e>>2]=h;c=a+12|0;k[c>>2]=i;if((f|0)==-1&(g>>>0>4294967294|(g|0)==-2&f>>>0>4294967295)){x=0;f=Ba(616,b|0)|0;g=x;x=0;if(!(g&1)?(k[a>>2]=f,x=0,f=Ba(618,b|0)|0,a=x,x=0,!(a&1)):0){k[d>>2]=f;j=10}}else j=10;if((j|0)==10){if(h)return;x=0;h=Ba(617,b|0)|0;b=x;x=0;if(!(b&1)){b=k[h>>2]|0;j=k[h+4>>2]|0;if(j)h0a(j);k[e>>2]=b;k[c>>2]=j;if(!i)return;j0a(i);return}}j=Hc()|0;if(!i)Sc(j|0);j0a(i);Sc(j|0)}function sAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;do switch(b|0){case 0:{h=k[c>>2]|0;k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];g=d+8|0;k[h+8>>2]=k[g>>2];f=d+12|0;k[h+12>>2]=k[f>>2];k[g>>2]=0;k[f>>2]=0;i[h+16>>0]=i[d+16>>0]|0;return}case 1:{h=k[c>>2]|0;k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];f=d+8|0;k[h+8>>2]=k[f>>2];g=d+12|0;k[h+12>>2]=k[g>>2];k[f>>2]=0;k[g>>2]=0;i[h+16>>0]=i[d+16>>0]|0;g=h+20|0;h=d+20|0;k[g>>2]=k[h>>2];k[g+4>>2]=k[h+4>>2];k[g+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;return}case 2:{h=k[c>>2]|0;k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];g=d+8|0;k[h+8>>2]=k[g>>2];f=d+12|0;k[h+12>>2]=k[f>>2];k[g>>2]=0;k[f>>2]=0;f=h+16|0;h=d+16|0;k[f>>2]=k[h>>2];k[f+4>>2]=k[h+4>>2];k[f+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;return}case 3:{h=k[c>>2]|0;k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];f=d+8|0;k[h+8>>2]=k[f>>2];g=d+12|0;k[h+12>>2]=k[g>>2];k[f>>2]=0;k[g>>2]=0;k[h+16>>2]=k[d+16>>2];k[h+20>>2]=k[d+20>>2];g=d+24|0;k[h+24>>2]=k[g>>2];f=d+28|0;k[h+28>>2]=k[f>>2];k[g>>2]=0;k[f>>2]=0;f=h+32|0;h=d+32|0;k[f>>2]=k[h>>2];k[f+4>>2]=k[h+4>>2];k[f+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;return}case 4:{h=k[c>>2]|0;k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];f=d+8|0;k[h+8>>2]=k[f>>2];g=d+12|0;k[h+12>>2]=k[g>>2];k[f>>2]=0;k[g>>2]=0;g=h+16|0;h=d+16|0;k[g>>2]=k[h>>2];k[g+4>>2]=k[h+4>>2];k[g+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;return}case 5:{h=k[c>>2]|0;k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];g=d+8|0;k[h+8>>2]=k[g>>2];f=d+12|0;k[h+12>>2]=k[f>>2];k[g>>2]=0;k[f>>2]=0;k[h+16>>2]=k[d+16>>2];k[h+20>>2]=k[d+20>>2];f=d+24|0;k[h+24>>2]=k[f>>2];g=d+28|0;k[h+28>>2]=k[g>>2];k[f>>2]=0;k[g>>2]=0;g=h+32|0;f=d+32|0;k[g>>2]=k[f>>2];k[g+4>>2]=k[f+4>>2];k[g+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;f=d+44|0;k[h+44>>2]=k[f>>2];g=d+48|0;k[h+48>>2]=k[g>>2];k[f>>2]=0;k[g>>2]=0;return}case 6:{g=k[c>>2]|0;k[g>>2]=k[d>>2];k[g+4>>2]=k[d+4>>2];f=d+8|0;k[g+8>>2]=k[f>>2];h=d+12|0;k[g+12>>2]=k[h>>2];k[f>>2]=0;k[h>>2]=0;k[g+16>>2]=k[d+16>>2];k[g+20>>2]=k[d+20>>2];h=d+24|0;k[g+24>>2]=k[h>>2];f=d+28|0;k[g+28>>2]=k[f>>2];k[h>>2]=0;k[f>>2]=0;i[g+32>>0]=i[d+32>>0]|0;f=g+36|0;h=d+36|0;k[f>>2]=0;e=g+40|0;k[e>>2]=0;k[g+44>>2]=0;k[f>>2]=k[h>>2];f=d+40|0;k[e>>2]=k[f>>2];e=d+44|0;k[g+44>>2]=k[e>>2];k[e>>2]=0;k[f>>2]=0;k[h>>2]=0;return}case 7:{h=k[c>>2]|0;k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];f=d+8|0;k[h+8>>2]=k[f>>2];e=d+12|0;k[h+12>>2]=k[e>>2];k[f>>2]=0;k[e>>2]=0;e=h+16|0;f=d+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;f=d+28|0;k[h+28>>2]=k[f>>2];e=d+32|0;k[h+32>>2]=k[e>>2];k[f>>2]=0;k[e>>2]=0;return}case 8:{e=k[c>>2]|0;k[e>>2]=k[d>>2];k[e+4>>2]=k[d+4>>2];f=d+8|0;k[e+8>>2]=k[f>>2];h=d+12|0;k[e+12>>2]=k[h>>2];k[f>>2]=0;k[h>>2]=0;h=e+16|0;f=d+16|0;k[h>>2]=0;g=e+20|0;k[g>>2]=0;k[e+24>>2]=0;k[h>>2]=k[f>>2];h=d+20|0;k[g>>2]=k[h>>2];g=d+24|0;k[e+24>>2]=k[g>>2];k[g>>2]=0;k[h>>2]=0;k[f>>2]=0;return}default:return}while(0)}function tAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+16|0;d=c+7|0;e=c+6|0;f=c+5|0;g=c+4|0;h=c;j=a+4|0;l=k[a>>2]|0;m=(((k[j>>2]|0)-l|0)/56|0)+1|0;if(m>>>0>76695844){HBa(a);n=k[a>>2]|0}else n=l;l=a+8|0;o=((k[l>>2]|0)-n|0)/56|0;if(o>>>0<38347922){p=o<<1;o=p>>>0>>0?m:p;p=((k[j>>2]|0)-n|0)/56|0;if(!o){q=0;s=0;t=p}else{u=o;v=p;w=6}}else{u=76695844;v=((k[j>>2]|0)-n|0)/56|0;w=6}if((w|0)==6){q=u;s=KBa(u*56|0)|0;t=v}v=s+(t*56|0)|0;u=v;w=s+(q*56|0)|0;k[h>>2]=s+(t*56|0)+4;t=k[b>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;sAa(t,t>>31^t,h,b+4|0,e,d,0,0);t=k[b>>2]|0;k[v>>2]=t>>31^t;t=v+56|0;b=k[a>>2]|0;s=k[j>>2]|0;if((s|0)==(b|0)){x=u;y=b;z=b}else{q=s;s=v;v=u;while(1){u=q;q=q+-56|0;k[h>>2]=s+-52;n=k[q>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;sAa(n,n>>31^n,h,u+-52|0,e,d,0,0);u=k[q>>2]|0;k[s+-56>>2]=u>>31^u;s=v+-56|0;u=s;if((q|0)==(b|0)){A=u;break}else v=u}x=A;y=k[a>>2]|0;z=k[j>>2]|0}k[a>>2]=x;k[j>>2]=t;k[l>>2]=w;w=y;if((z|0)!=(w|0)){l=z;do{z=l;l=l+-56|0;t=k[l>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(t,t>>31^t,h,z+-52|0,e,d,0,0)}while((l|0)!=(w|0))}if(!y){r=c;return}OBa(y);r=c;return}function uAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=a+4|0;k[a+8>>2]=0;e=a+12|0;k[e>>2]=0;k[a+16>>2]=-1;k[a+20>>2]=-1;f=a+24|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;f=c;g=k[f+4>>2]|0;h=a;k[h>>2]=k[f>>2];k[h+4>>2]=g;g=a+8|0;h=k[c+8>>2]|0;f=k[c+12>>2]|0;c=f;if(f){h0a(f);f=k[e>>2]|0;k[g>>2]=h;k[e>>2]=c;if(!f){i=g;j=e}else{j0a(f);i=g;j=e}}else{k[g>>2]=h;k[e>>2]=c;i=g;j=e}if((k[a>>2]|0)==-1?(k[d>>2]|0)==-1:0){x=0;c=Ba(616,b|0)|0;h=x;x=0;if(!(h&1)?(k[a>>2]=c,x=0,c=Ba(618,b|0)|0,h=x,x=0,!(h&1)):0){k[d>>2]=c;l=15}}else l=15;if((l|0)==15){if(k[g>>2]|0)return;x=0;g=Ba(617,b|0)|0;b=x;x=0;if(!(b&1)){b=k[g>>2]|0;l=k[g+4>>2]|0;if(l)h0a(l);k[i>>2]=b;b=k[e>>2]|0;k[j>>2]=l;if(!b)return;j0a(b);return}}b=Hc()|0;K2a(a+32|0);l=k[a+28>>2]|0;if(l)j0a(l);l=k[e>>2]|0;if(!l)Sc(b|0);j0a(l);Sc(b|0)}function vAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=b;d=k[c+4>>2]|0;e=a;k[e>>2]=k[c>>2];k[e+4>>2]=d;k[a+8>>2]=k[b+8>>2];d=a+12|0;e=k[b+12>>2]|0;k[d>>2]=e;if(e)h0a(e);e=b+16|0;c=k[e+4>>2]|0;f=a+16|0;k[f>>2]=k[e>>2];k[f+4>>2]=c;k[a+24>>2]=k[b+24>>2];c=a+28|0;f=k[b+28>>2]|0;k[c>>2]=f;if(f)h0a(f);x=0;xa(604,a+32|0,b+32|0);b=x;x=0;if(!(b&1))return 3;b=Hc()|0;a=k[c>>2]|0;if(a)j0a(a);a=k[d>>2]|0;if(!a)Sc(b|0);j0a(a);Sc(b|0);return 0}function wAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;h=r;r=r+16|0;g=h+14|0;f=h+13|0;do switch(b|0){case 1:{j=8872;r=h;return j|0}case 2:{j=8864;r=h;return j|0}case 3:{j=8856;r=h;return j|0}case 4:{j=8848;r=h;return j|0}case 5:{j=8840;r=h;return j|0}case 6:{j=8832;r=h;return j|0}case 7:{j=8824;r=h;return j|0}case 8:{j=8816;r=h;return j|0}case 9:{i[g>>0]=i[h+12>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 10:{i[g>>0]=i[h+11>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 11:{i[g>>0]=i[h+10>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 12:{i[g>>0]=i[h+9>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 13:{i[g>>0]=i[h+8>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 14:{i[g>>0]=i[h+7>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 15:{i[g>>0]=i[h+6>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 16:{i[g>>0]=i[h+5>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 17:{i[g>>0]=i[h+4>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 18:{i[g>>0]=i[h+3>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 19:{i[g>>0]=i[h+2>>0]|0;xBa(a,c,d,0,g,1)|0;break}case 0:{j=8880;r=h;return j|0}default:{i[f>>0]=i[h+1>>0]|0;i[g>>0]=i[h>>0]|0;yBa(a,b,c,d,f,g,0,0)|0}}while(0);return 0}function xAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;h=r;r=r+16|0;g=h+14|0;f=h+13|0;do switch(b|0){case 4:{j=d;r=h;return j|0}case 9:{i[g>>0]=i[h+12>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 10:{i[g>>0]=i[h+11>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 11:{i[g>>0]=i[h+10>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 12:{i[g>>0]=i[h+9>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 13:{i[g>>0]=i[h+8>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 14:{i[g>>0]=i[h+7>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 15:{i[g>>0]=i[h+6>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 16:{i[g>>0]=i[h+5>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 17:{i[g>>0]=i[h+4>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 18:{i[g>>0]=i[h+3>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 19:{i[g>>0]=i[h+2>>0]|0;uBa(a,c,d,0,g,1)|0;break}case 8:case 7:case 6:case 5:case 3:case 2:case 1:case 0:{j=0;r=h;return j|0}default:{i[f>>0]=i[h+1>>0]|0;i[g>>0]=i[h>>0]|0;vBa(a,b,c,d,f,g,0,0)|0}}while(0);return 0}function yAa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;a=r;r=r+32|0;b=a;a=Rd(28)|0;c=b+4|0;d=b+8|0;k[d>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=-1;k[b>>2]=47200;k[c>>2]=47220;x=0;xa(930,a|0,b|0);b=x;x=0;if(b&1)e=1;else{x=0;fb(149,a|0,8736,1230);x=0;e=0}b=Hc()|0;k[c>>2]=20796;c=k[d>>2]|0;if(c){x=0;f=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(f)k[d>>2]=0}if(!e)Sc(b|0);Fc(a|0);Sc(b|0)}function zAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=a+4|0;k[a+8>>2]=0;e=a+12|0;k[e>>2]=0;k[a+16>>2]=-1;k[a+20>>2]=-1;f=a+24|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[f+24>>2]=0;f=c;g=k[f+4>>2]|0;h=a;k[h>>2]=k[f>>2];k[h+4>>2]=g;g=a+8|0;h=k[c+8>>2]|0;f=k[c+12>>2]|0;c=f;if(f){h0a(f);f=k[e>>2]|0;k[g>>2]=h;k[e>>2]=c;if(!f){i=g;j=e}else{j0a(f);i=g;j=e}}else{k[g>>2]=h;k[e>>2]=c;i=g;j=e}if((k[a>>2]|0)==-1?(k[d>>2]|0)==-1:0){x=0;c=Ba(616,b|0)|0;h=x;x=0;if(!(h&1)?(k[a>>2]=c,x=0,c=Ba(618,b|0)|0,h=x,x=0,!(h&1)):0){k[d>>2]=c;l=17}}else l=17;if((l|0)==17){if(k[g>>2]|0)return;x=0;g=Ba(617,b|0)|0;b=x;x=0;if(!(b&1)){b=k[g>>2]|0;l=k[g+4>>2]|0;if(l)h0a(l);k[i>>2]=b;b=k[e>>2]|0;k[j>>2]=l;if(!b)return;j0a(b);return}}b=Hc()|0;l=k[a+48>>2]|0;if(l)j0a(l);K2a(a+32|0);l=k[a+28>>2]|0;if(l)j0a(l);l=k[e>>2]|0;if(!l)Sc(b|0);j0a(l);Sc(b|0)}function AAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=b;d=k[c+4>>2]|0;e=a;k[e>>2]=k[c>>2];k[e+4>>2]=d;k[a+8>>2]=k[b+8>>2];d=a+12|0;e=k[b+12>>2]|0;k[d>>2]=e;if(e)h0a(e);e=b+16|0;c=k[e+4>>2]|0;f=a+16|0;k[f>>2]=k[e>>2];k[f+4>>2]=c;k[a+24>>2]=k[b+24>>2];c=a+28|0;f=k[b+28>>2]|0;k[c>>2]=f;if(f)h0a(f);x=0;xa(604,a+32|0,b+32|0);f=x;x=0;if(!(f&1)){k[a+44>>2]=k[b+44>>2];f=k[b+48>>2]|0;k[a+48>>2]=f;if(!f)return;h0a(f);return}f=Hc()|0;a=k[c>>2]|0;if(a)j0a(a);a=k[d>>2]|0;if(!a)Sc(f|0);j0a(a);Sc(f|0)}function BAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=a+4|0;e=a+8|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;e=c;f=k[e+4>>2]|0;g=a;k[g>>2]=k[e>>2];k[g+4>>2]=f;f=a+8|0;g=k[c+8>>2]|0;e=k[c+12>>2]|0;c=e;if(e){h0a(e);e=a+12|0;h=k[e>>2]|0;k[f>>2]=g;k[e>>2]=c;if(!h){i=e;j=f;l=e}else{j0a(h);i=e;j=f;l=e}}else{e=a+12|0;k[f>>2]=g;k[e>>2]=c;i=e;j=f;l=e}if((k[a>>2]|0)==-1?(k[d>>2]|0)==-1:0){x=0;e=Ba(616,b|0)|0;c=x;x=0;if(!(c&1)?(k[a>>2]=e,x=0,e=Ba(618,b|0)|0,c=x,x=0,!(c&1)):0){k[d>>2]=e;m=13}}else m=13;if((m|0)==13){if(k[f>>2]|0)return;x=0;f=Ba(617,b|0)|0;b=x;x=0;if(!(b&1)){b=k[f>>2]|0;m=k[f+4>>2]|0;if(m)h0a(m);k[j>>2]=b;b=k[i>>2]|0;k[l>>2]=m;if(!b)return;j0a(b);return}}b=Hc()|0;K2a(a+16|0);a=k[i>>2]|0;if(!a)Sc(b|0);j0a(a);Sc(b|0)}function CAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=a+4|0;e=a+8|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;k[e+20>>2]=0;k[e+24>>2]=0;e=c;f=k[e+4>>2]|0;g=a;k[g>>2]=k[e>>2];k[g+4>>2]=f;f=a+8|0;g=k[c+8>>2]|0;e=k[c+12>>2]|0;c=e;if(e){h0a(e);e=a+12|0;h=k[e>>2]|0;k[f>>2]=g;k[e>>2]=c;if(!h){i=e;j=f;l=e}else{j0a(h);i=e;j=f;l=e}}else{e=a+12|0;k[f>>2]=g;k[e>>2]=c;i=e;j=f;l=e}if((k[a>>2]|0)==-1?(k[d>>2]|0)==-1:0){x=0;e=Ba(616,b|0)|0;c=x;x=0;if(!(c&1)?(k[a>>2]=e,x=0,e=Ba(618,b|0)|0,c=x,x=0,!(c&1)):0){k[d>>2]=e;m=15}}else m=15;if((m|0)==15){if(k[f>>2]|0)return;x=0;f=Ba(617,b|0)|0;b=x;x=0;if(!(b&1)){b=k[f>>2]|0;m=k[f+4>>2]|0;if(m)h0a(m);k[j>>2]=b;b=k[i>>2]|0;k[l>>2]=m;if(!b)return;j0a(b);return}}b=Hc()|0;m=k[a+32>>2]|0;if(m)j0a(m);K2a(a+16|0);a=k[i>>2]|0;if(!a)Sc(b|0);j0a(a);Sc(b|0)}function DAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+16|0;d=c;e=ZAa(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(32)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}i[f+28>>0]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)j=f;else{k[a>>2]=b;j=k[e>>2]|0}ui(k[a+4>>2]|0,j);j=a+8|0;k[j>>2]=(k[j>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function EAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+80|0;d=c+75|0;e=c+74|0;f=c+73|0;g=c+72|0;h=c+64|0;j=c+56|0;l=c;k[j>>2]=b;k[h>>2]=j;j=k[a>>2]|0;m=a+4|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;if(WAa(j,j>>31^j,h,m,e,d,0,0)|0){r=c;return}j=l+4|0;k[j>>2]=k[b>>2];k[l+8>>2]=k[b+4>>2];n=b+8|0;k[l+12>>2]=k[n>>2];o=b+12|0;k[l+16>>2]=k[o>>2];k[n>>2]=0;k[o>>2]=0;i[l+20>>0]=i[b+16>>0]|0;k[l>>2]=0;if(!(k[a>>2]|0)){k[h>>2]=j;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;MAa(0,0,h,m,e,d,0,0)}else{k[h>>2]=a;k[h+4>>2]=0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;NAa(0,0,h,j,e,d,0,0)}a=k[l>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(a,a>>31^a,h,j,e,d,0,0);r=c;return}function FAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+80|0;d=c+75|0;e=c+74|0;f=c+73|0;g=c+72|0;h=c+64|0;j=c+56|0;l=c;k[j>>2]=b;k[h>>2]=j;j=k[a>>2]|0;m=a+4|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;if(TAa(j,j>>31^j,h,m,e,d,0,0)|0){r=c;return}j=l+4|0;k[j>>2]=k[b>>2];k[l+8>>2]=k[b+4>>2];n=b+8|0;k[l+12>>2]=k[n>>2];o=b+12|0;k[l+16>>2]=k[o>>2];k[n>>2]=0;k[o>>2]=0;o=l+20|0;n=b+16|0;k[o>>2]=k[n>>2];k[o+4>>2]=k[n+4>>2];k[o+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[l>>2]=4;if((k[a>>2]|0)==4){k[h>>2]=j;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;MAa(4,4,h,m,e,d,0,0)}else{k[h>>2]=a;k[h+4>>2]=4;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;NAa(4,4,h,j,e,d,0,0)}a=k[l>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(a,a>>31^a,h,j,e,d,0,0);r=c;return}function GAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+80|0;d=c+75|0;e=c+74|0;f=c+73|0;g=c+72|0;h=c+64|0;j=c+56|0;l=c;k[j>>2]=b;k[h>>2]=j;j=k[a>>2]|0;m=a+4|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;if(LAa(j,j>>31^j,h,m,e,d,0,0)|0){r=c;return}j=l+4|0;k[j>>2]=k[b>>2];k[l+8>>2]=k[b+4>>2];n=b+8|0;k[l+12>>2]=k[n>>2];o=b+12|0;k[l+16>>2]=k[o>>2];k[n>>2]=0;k[o>>2]=0;i[l+20>>0]=i[b+16>>0]|0;o=l+24|0;n=b+20|0;k[o>>2]=k[n>>2];k[o+4>>2]=k[n+4>>2];k[o+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[l>>2]=1;if((k[a>>2]|0)==1){k[h>>2]=j;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;MAa(1,1,h,m,e,d,0,0)}else{k[h>>2]=a;k[h+4>>2]=1;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;NAa(1,1,h,j,e,d,0,0)}a=k[l>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(a,a>>31^a,h,j,e,d,0,0);r=c;return}function HAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;h=r;r=r+16|0;g=h+14|0;f=h+13|0;do switch(b|0){case 0:{j=d;r=h;return j|0}case 9:{i[g>>0]=i[h+12>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 10:{i[g>>0]=i[h+11>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 11:{i[g>>0]=i[h+10>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 12:{i[g>>0]=i[h+9>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 13:{i[g>>0]=i[h+8>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 14:{i[g>>0]=i[h+7>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 15:{i[g>>0]=i[h+6>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 16:{i[g>>0]=i[h+5>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 17:{i[g>>0]=i[h+4>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 18:{i[g>>0]=i[h+3>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 19:{i[g>>0]=i[h+2>>0]|0;IAa(a,c,d,0,g,1)|0;break}case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 1:{j=0;r=h;return j|0}default:{i[f>>0]=i[h+1>>0]|0;i[g>>0]=i[h>>0]|0;JAa(a,b,c,d,f,g,0,0)|0}}while(0);return 0}function IAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;KAa()|0;return 0}function JAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;KAa()|0;return 0}function KAa(){cd();return 0}function LAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0;h=r;r=r+16|0;g=h+14|0;f=h+13|0;do switch(b|0){case 1:{e=k[k[c>>2]>>2]|0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];j=e+8|0;l=k[j>>2]|0;m=e+12|0;n=k[m>>2]|0;k[j>>2]=0;k[m>>2]=0;k[d+8>>2]=l;l=d+12|0;m=k[l>>2]|0;k[l>>2]=n;if(m)j0a(m);i[d+16>>0]=i[e+16>>0]|0;m=d+20|0;n=e+20|0;if(!(i[m>>0]&1)){i[d+21>>0]=0;i[m>>0]=0}else{i[k[d+28>>2]>>0]=0;k[d+24>>2]=0}x=0;xa(603,m|0,0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)};k[m>>2]=k[n>>2];k[m+4>>2]=k[n+4>>2];k[m+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;o=1;r=h;return o|0}case 9:{i[g>>0]=i[h+12>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 10:{i[g>>0]=i[h+11>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 11:{i[g>>0]=i[h+10>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 12:{i[g>>0]=i[h+9>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 13:{i[g>>0]=i[h+8>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 14:{i[g>>0]=i[h+7>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 15:{i[g>>0]=i[h+6>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 16:{i[g>>0]=i[h+5>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 17:{i[g>>0]=i[h+4>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 18:{i[g>>0]=i[h+3>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 19:{i[g>>0]=i[h+2>>0]|0;QAa(a,c,d,0,g,1)|0;break}case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 0:{o=0;r=h;return o|0}default:{i[f>>0]=i[h+1>>0]|0;i[g>>0]=i[h>>0]|0;RAa(a,b,c,d,f,g,0,0)|0}}while(0);return 0}function MAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;do switch(b|0){case 0:{h=k[c>>2]|0;k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];g=h+8|0;f=k[g>>2]|0;e=h+12|0;a=k[e>>2]|0;k[g>>2]=0;k[e>>2]=0;k[d+8>>2]=f;f=d+12|0;e=k[f>>2]|0;k[f>>2]=a;if(e)j0a(e);i[d+16>>0]=i[h+16>>0]|0;return}case 1:{h=k[c>>2]|0;k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];e=h+8|0;a=k[e>>2]|0;f=h+12|0;g=k[f>>2]|0;k[e>>2]=0;k[f>>2]=0;k[d+8>>2]=a;a=d+12|0;f=k[a>>2]|0;k[a>>2]=g;if(f)j0a(f);i[d+16>>0]=i[h+16>>0]|0;f=d+20|0;g=h+20|0;if(!(i[f>>0]&1)){i[d+21>>0]=0;i[f>>0]=0}else{i[k[d+28>>2]>>0]=0;k[d+24>>2]=0}x=0;xa(603,f|0,0);h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)};k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;return}case 2:{g=k[c>>2]|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];f=g+8|0;h=k[f>>2]|0;a=g+12|0;e=k[a>>2]|0;k[f>>2]=0;k[a>>2]=0;k[d+8>>2]=h;h=d+12|0;a=k[h>>2]|0;k[h>>2]=e;if(a)j0a(a);a=d+16|0;e=g+16|0;if(!(i[a>>0]&1)){i[d+17>>0]=0;i[a>>0]=0}else{i[k[d+24>>2]>>0]=0;k[d+20>>2]=0}x=0;xa(603,a|0,0);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;return}case 3:{e=k[c>>2]|0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];a=e+8|0;g=k[a>>2]|0;h=e+12|0;f=k[h>>2]|0;k[a>>2]=0;k[h>>2]=0;k[d+8>>2]=g;g=d+12|0;h=k[g>>2]|0;k[g>>2]=f;if(h)j0a(h);k[d+16>>2]=k[e+16>>2];k[d+20>>2]=k[e+20>>2];h=e+24|0;f=k[h>>2]|0;g=e+28|0;a=k[g>>2]|0;k[h>>2]=0;k[g>>2]=0;k[d+24>>2]=f;f=d+28|0;g=k[f>>2]|0;k[f>>2]=a;if(g)j0a(g);g=d+32|0;a=e+32|0;if(!(i[g>>0]&1)){i[d+33>>0]=0;i[g>>0]=0}else{i[k[d+40>>2]>>0]=0;k[d+36>>2]=0}x=0;xa(603,g|0,0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)};k[g>>2]=k[a>>2];k[g+4>>2]=k[a+4>>2];k[g+8>>2]=k[a+8>>2];k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}case 4:{a=k[c>>2]|0;k[d>>2]=k[a>>2];k[d+4>>2]=k[a+4>>2];g=a+8|0;e=k[g>>2]|0;f=a+12|0;h=k[f>>2]|0;k[g>>2]=0;k[f>>2]=0;k[d+8>>2]=e;e=d+12|0;f=k[e>>2]|0;k[e>>2]=h;if(f)j0a(f);f=d+16|0;h=a+16|0;if(!(i[f>>0]&1)){i[d+17>>0]=0;i[f>>0]=0}else{i[k[d+24>>2]>>0]=0;k[d+20>>2]=0}x=0;xa(603,f|0,0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)};k[f>>2]=k[h>>2];k[f+4>>2]=k[h+4>>2];k[f+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;return}case 5:{h=k[c>>2]|0;k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];f=h+8|0;a=k[f>>2]|0;e=h+12|0;g=k[e>>2]|0;k[f>>2]=0;k[e>>2]=0;k[d+8>>2]=a;a=d+12|0;e=k[a>>2]|0;k[a>>2]=g;if(e)j0a(e);k[d+16>>2]=k[h+16>>2];k[d+20>>2]=k[h+20>>2];e=h+24|0;g=k[e>>2]|0;a=h+28|0;f=k[a>>2]|0;k[e>>2]=0;k[a>>2]=0;k[d+24>>2]=g;g=d+28|0;a=k[g>>2]|0;k[g>>2]=f;if(a)j0a(a);a=d+32|0;f=h+32|0;if(!(i[a>>0]&1)){i[d+33>>0]=0;i[a>>0]=0}else{i[k[d+40>>2]>>0]=0;k[d+36>>2]=0}x=0;xa(603,a|0,0);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)};k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;f=h+44|0;a=k[f>>2]|0;g=h+48|0;h=k[g>>2]|0;k[f>>2]=0;k[g>>2]=0;k[d+44>>2]=a;a=d+48|0;g=k[a>>2]|0;k[a>>2]=h;if(!g)return;j0a(g);return}case 6:{OAa(d,k[c>>2]|0)|0;return}case 7:{PAa(c,d,1);return}case 8:{mza(d,k[c>>2]|0)|0;return}default:return}while(0)}function NAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0;h=r;r=r+16|0;g=h+4|0;f=h+3|0;e=h+2|0;a=h+1|0;j=h;do switch(b|0){case 0:{l=k[c>>2]|0;m=k[l>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(m,m>>31^m,j,l+4|0,f,g,0,0);l=k[c>>2]|0;k[l+4>>2]=k[d>>2];k[l+8>>2]=k[d+4>>2];m=d+8|0;k[l+12>>2]=k[m>>2];n=d+12|0;k[l+16>>2]=k[n>>2];k[m>>2]=0;k[n>>2]=0;i[l+20>>0]=i[d+16>>0]|0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}case 1:{l=k[c>>2]|0;n=k[l>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(n,n>>31^n,j,l+4|0,f,g,0,0);l=k[c>>2]|0;k[l+4>>2]=k[d>>2];k[l+8>>2]=k[d+4>>2];n=d+8|0;k[l+12>>2]=k[n>>2];m=d+12|0;k[l+16>>2]=k[m>>2];k[n>>2]=0;k[m>>2]=0;i[l+20>>0]=i[d+16>>0]|0;m=l+24|0;l=d+20|0;k[m>>2]=k[l>>2];k[m+4>>2]=k[l+4>>2];k[m+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}case 2:{l=k[c>>2]|0;m=k[l>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(m,m>>31^m,j,l+4|0,f,g,0,0);l=k[c>>2]|0;k[l+4>>2]=k[d>>2];k[l+8>>2]=k[d+4>>2];m=d+8|0;k[l+12>>2]=k[m>>2];n=d+12|0;k[l+16>>2]=k[n>>2];k[m>>2]=0;k[n>>2]=0;n=l+20|0;l=d+16|0;k[n>>2]=k[l>>2];k[n+4>>2]=k[l+4>>2];k[n+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}case 3:{l=k[c>>2]|0;n=k[l>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(n,n>>31^n,j,l+4|0,f,g,0,0);l=k[c>>2]|0;k[l+4>>2]=k[d>>2];k[l+8>>2]=k[d+4>>2];n=d+8|0;k[l+12>>2]=k[n>>2];m=d+12|0;k[l+16>>2]=k[m>>2];k[n>>2]=0;k[m>>2]=0;k[l+20>>2]=k[d+16>>2];k[l+24>>2]=k[d+20>>2];m=d+24|0;k[l+28>>2]=k[m>>2];n=d+28|0;k[l+32>>2]=k[n>>2];k[m>>2]=0;k[n>>2]=0;n=l+36|0;l=d+32|0;k[n>>2]=k[l>>2];k[n+4>>2]=k[l+4>>2];k[n+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}case 4:{l=k[c>>2]|0;n=k[l>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(n,n>>31^n,j,l+4|0,f,g,0,0);l=k[c>>2]|0;k[l+4>>2]=k[d>>2];k[l+8>>2]=k[d+4>>2];n=d+8|0;k[l+12>>2]=k[n>>2];m=d+12|0;k[l+16>>2]=k[m>>2];k[n>>2]=0;k[m>>2]=0;m=l+20|0;l=d+16|0;k[m>>2]=k[l>>2];k[m+4>>2]=k[l+4>>2];k[m+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}case 5:{l=k[c>>2]|0;m=k[l>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(m,m>>31^m,j,l+4|0,f,g,0,0);l=k[c>>2]|0;k[l+4>>2]=k[d>>2];k[l+8>>2]=k[d+4>>2];m=d+8|0;k[l+12>>2]=k[m>>2];n=d+12|0;k[l+16>>2]=k[n>>2];k[m>>2]=0;k[n>>2]=0;k[l+20>>2]=k[d+16>>2];k[l+24>>2]=k[d+20>>2];n=d+24|0;k[l+28>>2]=k[n>>2];m=d+28|0;k[l+32>>2]=k[m>>2];k[n>>2]=0;k[m>>2]=0;m=l+36|0;n=d+32|0;k[m>>2]=k[n>>2];k[m+4>>2]=k[n+4>>2];k[m+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;n=d+44|0;k[l+48>>2]=k[n>>2];m=d+48|0;k[l+52>>2]=k[m>>2];k[n>>2]=0;k[m>>2]=0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}case 6:{m=k[c>>2]|0;n=k[m>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(n,n>>31^n,j,m+4|0,f,g,0,0);m=k[c>>2]|0;k[m+4>>2]=k[d>>2];k[m+8>>2]=k[d+4>>2];n=d+8|0;k[m+12>>2]=k[n>>2];l=d+12|0;k[m+16>>2]=k[l>>2];k[n>>2]=0;k[l>>2]=0;k[m+20>>2]=k[d+16>>2];k[m+24>>2]=k[d+20>>2];l=d+24|0;k[m+28>>2]=k[l>>2];n=d+28|0;k[m+32>>2]=k[n>>2];k[l>>2]=0;k[n>>2]=0;i[m+36>>0]=i[d+32>>0]|0;n=m+40|0;l=d+36|0;k[n>>2]=0;o=m+44|0;k[o>>2]=0;p=m+48|0;k[p>>2]=0;k[n>>2]=k[l>>2];n=d+40|0;k[o>>2]=k[n>>2];o=d+44|0;k[p>>2]=k[o>>2];k[o>>2]=0;k[n>>2]=0;k[l>>2]=0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}case 7:{l=k[c>>2]|0;n=k[l>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(n,n>>31^n,j,l+4|0,f,g,0,0);l=k[c>>2]|0;k[l+4>>2]=k[d>>2];k[l+8>>2]=k[d+4>>2];n=d+8|0;k[l+12>>2]=k[n>>2];o=d+12|0;k[l+16>>2]=k[o>>2];k[n>>2]=0;k[o>>2]=0;o=l+20|0;n=d+16|0;k[o>>2]=k[n>>2];k[o+4>>2]=k[n+4>>2];k[o+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;n=d+28|0;k[l+32>>2]=k[n>>2];o=d+32|0;k[l+36>>2]=k[o>>2];k[n>>2]=0;k[o>>2]=0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}case 8:{o=k[c>>2]|0;n=k[o>>2]|0;i[f>>0]=i[e>>0]|0;i[g>>0]=i[a>>0]|0;oza(n,n>>31^n,j,o+4|0,f,g,0,0);o=k[c>>2]|0;k[o+4>>2]=k[d>>2];k[o+8>>2]=k[d+4>>2];n=d+8|0;k[o+12>>2]=k[n>>2];l=d+12|0;k[o+16>>2]=k[l>>2];k[n>>2]=0;k[l>>2]=0;l=o+20|0;n=d+16|0;k[l>>2]=0;p=o+24|0;k[p>>2]=0;m=o+28|0;k[m>>2]=0;k[l>>2]=k[n>>2];l=d+20|0;k[p>>2]=k[l>>2];p=d+24|0;k[m>>2]=k[p>>2];k[p>>2]=0;k[l>>2]=0;k[n>>2]=0;k[k[c>>2]>>2]=k[c+4>>2];r=h;return}default:{r=h;return}}while(0)}function OAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+16|0;d=c+4|0;e=c+3|0;f=c+2|0;g=c+1|0;h=c;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];j=b+8|0;l=k[j>>2]|0;m=b+12|0;n=k[m>>2]|0;k[j>>2]=0;k[m>>2]=0;k[a+8>>2]=l;l=a+12|0;m=k[l>>2]|0;k[l>>2]=n;if(m)j0a(m);k[a+16>>2]=k[b+16>>2];k[a+20>>2]=k[b+20>>2];m=b+24|0;n=k[m>>2]|0;l=b+28|0;j=k[l>>2]|0;k[m>>2]=0;k[l>>2]=0;k[a+24>>2]=n;n=a+28|0;l=k[n>>2]|0;k[n>>2]=j;if(l)j0a(l);i[a+32>>0]=i[b+32>>0]|0;l=a+36|0;j=b+36|0;n=k[l>>2]|0;if(!n){o=a+40|0;p=a+44|0;q=k[j>>2]|0;k[l>>2]=q;s=b+40|0;t=k[s>>2]|0;k[o>>2]=t;u=b+44|0;v=k[u>>2]|0;k[p>>2]=v;k[u>>2]=0;k[s>>2]=0;k[j>>2]=0;r=c;return a|0}m=a+40|0;w=k[m>>2]|0;if((w|0)==(n|0))x=n;else{y=w;do{w=y+-56|0;k[m>>2]=w;z=k[w>>2]|0;i[e>>0]=i[f>>0]|0;i[d>>0]=i[g>>0]|0;oza(z,z>>31^z,h,y+-52|0,e,d,0,0);y=k[m>>2]|0}while((y|0)!=(n|0));x=k[l>>2]|0}OBa(x);x=a+44|0;k[x>>2]=0;k[m>>2]=0;k[l>>2]=0;o=m;p=x;q=k[j>>2]|0;k[l>>2]=q;s=b+40|0;t=k[s>>2]|0;k[o>>2]=t;u=b+44|0;v=k[u>>2]|0;k[p>>2]=v;k[u>>2]=0;k[s>>2]=0;k[j>>2]=0;r=c;return a|0}function PAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;c=k[a>>2]|0;k[b>>2]=k[c>>2];k[b+4>>2]=k[c+4>>2];a=c+8|0;d=k[a>>2]|0;e=c+12|0;f=k[e>>2]|0;k[a>>2]=0;k[e>>2]=0;k[b+8>>2]=d;d=b+12|0;e=k[d>>2]|0;k[d>>2]=f;if(e)j0a(e);e=b+16|0;f=c+16|0;if(!(i[e>>0]&1)){i[e+1>>0]=0;i[e>>0]=0}else{i[k[b+24>>2]>>0]=0;k[b+20>>2]=0}x=0;xa(603,e|0,0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)};k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;f=c+28|0;e=k[f>>2]|0;d=c+32|0;c=k[d>>2]|0;k[f>>2]=0;k[d>>2]=0;k[b+28>>2]=e;e=b+32|0;b=k[e>>2]|0;k[e>>2]=c;if(!b)return;j0a(b);return}function QAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;SAa()|0;return 0}function RAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;SAa()|0;return 0}function SAa(){cd();return 0}function TAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0;h=r;r=r+16|0;g=h+14|0;f=h+13|0;do switch(b|0){case 4:{e=k[k[c>>2]>>2]|0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];j=e+8|0;l=k[j>>2]|0;m=e+12|0;n=k[m>>2]|0;k[j>>2]=0;k[m>>2]=0;k[d+8>>2]=l;l=d+12|0;m=k[l>>2]|0;k[l>>2]=n;if(m)j0a(m);m=d+16|0;n=e+16|0;if(!(i[m>>0]&1)){i[d+17>>0]=0;i[m>>0]=0}else{i[k[d+24>>2]>>0]=0;k[d+20>>2]=0}x=0;xa(603,m|0,0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)};k[m>>2]=k[n>>2];k[m+4>>2]=k[n+4>>2];k[m+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;o=1;r=h;return o|0}case 9:{i[g>>0]=i[h+12>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 10:{i[g>>0]=i[h+11>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 11:{i[g>>0]=i[h+10>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 12:{i[g>>0]=i[h+9>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 13:{i[g>>0]=i[h+8>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 14:{i[g>>0]=i[h+7>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 15:{i[g>>0]=i[h+6>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 16:{i[g>>0]=i[h+5>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 17:{i[g>>0]=i[h+4>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 18:{i[g>>0]=i[h+3>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 19:{i[g>>0]=i[h+2>>0]|0;UAa(a,c,d,0,g,1)|0;break}case 8:case 7:case 6:case 5:case 3:case 2:case 1:case 0:{o=0;r=h;return o|0}default:{i[f>>0]=i[h+1>>0]|0;i[g>>0]=i[h>>0]|0;VAa(a,b,c,d,f,g,0,0)|0}}while(0);return 0}function UAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;SAa()|0;return 0}function VAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;SAa()|0;return 0}function WAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0;h=r;r=r+16|0;g=h+14|0;f=h+13|0;do switch(b|0){case 0:{e=k[k[c>>2]>>2]|0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];j=e+8|0;l=k[j>>2]|0;m=e+12|0;n=k[m>>2]|0;k[j>>2]=0;k[m>>2]=0;k[d+8>>2]=l;l=d+12|0;m=k[l>>2]|0;k[l>>2]=n;if(m)j0a(m);i[d+16>>0]=i[e+16>>0]|0;o=1;r=h;return o|0}case 9:{i[g>>0]=i[h+12>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 10:{i[g>>0]=i[h+11>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 11:{i[g>>0]=i[h+10>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 12:{i[g>>0]=i[h+9>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 13:{i[g>>0]=i[h+8>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 14:{i[g>>0]=i[h+7>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 15:{i[g>>0]=i[h+6>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 16:{i[g>>0]=i[h+5>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 17:{i[g>>0]=i[h+4>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 18:{i[g>>0]=i[h+3>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 19:{i[g>>0]=i[h+2>>0]|0;XAa(a,c,d,0,g,1)|0;break}case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 1:{o=0;r=h;return o|0}default:{i[f>>0]=i[h+1>>0]|0;i[g>>0]=i[h>>0]|0;YAa(a,b,c,d,f,g,0,0)|0}}while(0);return 0}function XAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;SAa()|0;return 0}function YAa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;SAa()|0;return 0}function ZAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function _Aa(a){a=a|0;c0a(a);OBa(a);return}function $Aa(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+4|0;d=b+3|0;e=k[a+12>>2]|0;if(!e){r=b;return}a=k[e>>2]|0;i[d>>0]=i[b+2>>0]|0;i[c>>0]=i[b+1>>0]|0;oza(a,a>>31^a,b,e+4|0,d,c,0,0);OBa(e);r=b;return}function aBa(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==297316?a+12|0:0)|0}function bBa(a){a=a|0;OBa(a);return}function cBa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=a+24|0;k[c>>2]=21368;k[a>>2]=47140;d=a+4|0;k[d>>2]=20796;e=k[b+8>>2]|0;k[a+8>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+12|0;h=b+12|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];k[a>>2]=47240;h=a+4|0;k[h>>2]=47268;k[c>>2]=47296;x=0;xa(608,h|0,b+4|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;h=M;k[d>>2]=20796;d=a+8|0;a=k[d>>2]|0;if(a){x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(c)k[d>>2]=0}f=h;g=b;Sc(g|0)}function dBa(a){a=a|0;var b=0,c=0;k[a+4>>2]=20796;b=a+8|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function eBa(a){a=a|0;var b=0,c=0,d=0;k[a+4>>2]=20796;b=a+8|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function fBa(a){a=a|0;return 298103}function gBa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(28)|0;x=0;i[c>>0]=i[b>>0]|0;fb(411,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-12>>2]|0)|0}return 0}function hBa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Rd(28)|0;c=b+24|0;k[c>>2]=21368;k[b>>2]=47140;d=b+4|0;k[d>>2]=20796;e=k[a+8>>2]|0;k[b+8>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;Fc(b|0);Sc(e|0)}e=b+12|0;f=a+12|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[b>>2]=47240;k[d>>2]=47268;k[c>>2]=47296;Gf(b|0,8736,1230)}function iBa(a){a=a|0;var b=0,c=0;b=a+-4|0;k[b+4>>2]=20796;a=b+8|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function jBa(a){a=a|0;var b=0,c=0,d=0;b=a+-4|0;k[b+4>>2]=20796;a=b+8|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function kBa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(28)|0;x=0;i[c>>0]=i[b>>0]|0;fb(411,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-12>>2]|0)|0}return 0}function lBa(a){a=a|0;hBa(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function mBa(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+4>>2]=20796;a=b+8|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function nBa(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+4>>2]=20796;a=b+8|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function oBa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=a+24|0;k[c>>2]=21368;k[a>>2]=47140;d=a+4|0;k[d>>2]=20796;e=k[b+8>>2]|0;k[a+8>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+12|0;h=b+12|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];k[a>>2]=47240;h=a+4|0;k[h>>2]=47268;k[c>>2]=47296;x=0;xa(608,h|0,b+4|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;h=M;k[d>>2]=20796;d=a+8|0;a=k[d>>2]|0;if(a){x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(c)k[d>>2]=0}f=h;g=b;Sc(g|0)}function pBa(a){a=a|0;var b=0,c=0;k[a+4>>2]=20796;b=a+8|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function qBa(a){a=a|0;var b=0,c=0,d=0;k[a+4>>2]=20796;b=a+8|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function rBa(a){a=a|0;var b=0,c=0;b=a+-4|0;k[b+4>>2]=20796;a=b+8|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function sBa(a){a=a|0;var b=0,c=0,d=0;b=a+-4|0;k[b+4>>2]=20796;a=b+8|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function tBa(a){a=a|0;OBa(a);return}function uBa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wBa()|0;return 0}function vBa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;wBa()|0;return 0}function wBa(){cd();return 0}function xBa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;zBa()|0;return 0}function yBa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;zBa()|0;return 0}function zBa(){cd();return 0}function ABa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=k[12025]|0;eRa(b,a,d)|0;jQa(10,b)|0;Ub()}function BBa(){var a=0;a=Rd(4)|0;CCa(a);Gf(a|0,9112,1201)}function CBa(){var a=0;a=Rd(4)|0;GCa(a);Gf(a|0,9128,1255)}function DBa(a){a=a|0;var b=0;b=k[11832]|0;k[11832]=(a|0)==0?44:a;return b|0}function EBa(a){a=a|0;var b=0;b=k[11831]|0;k[11831]=(a|0)==0?43:a;return b|0}function FBa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;e=r;r=r+4208|0;f=e+4176|0;g=e;h=e+4112|0;a:do if((a|0)!=0?(j=(b|0)!=0,l=(c|0)==0,!(j&l)):0){if(j)m=k[c>>2]|0;else m=0;k[g+4096>>2]=g;j=g;k[h>>2]=0;n=h+4|0;k[n>>2]=0;k[h+8>>2]=0;k[h+12>>2]=j;o=h+16|0;k[o>>2]=0;p=h+20|0;k[p>>2]=0;k[h+24>>2]=0;k[h+28>>2]=j;k[h+32>>2]=0;q=h+36|0;k[q>>2]=0;k[h+40>>2]=0;s=h+44|0;k[s>>2]=j;t=h+48|0;u=h+61|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;i[t+12>>0]=0;i[u>>0]=1;t=h+32|0;yDa(f,1,0,s);s=f+8|0;v=k[s>>2]|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=j;k[s>>2]=v+16;zDa(t,f);ADa(f);v=h+62|0;i[v>>0]=0;i[h+63>>0]=1;k[f>>2]=0;s=a+(RLa(a)|0)|0;x=0;nb(175,a|0,s|0,h|0,f|0);j=x;x=0;b:do if(!(j&1)){w=k[f>>2]|0;do if(!((w|0)!=0|(i[v>>0]|0)==0)){y=k[t>>2]|0;if((y|0)!=(k[q>>2]|0)?(k[y>>2]|0)!=(k[y+4>>2]|0):0){i[v>>0]=0;i[u>>0]=0;y=k[h>>2]|0;while(1){z=k[n>>2]|0;if((z|0)==(y|0))break;A=z+-24|0;k[n>>2]=A;CDa(A)}y=k[o>>2]|0;while(1){A=k[p>>2]|0;if((A|0)==(y|0))break;z=A+-16|0;k[p>>2]=z;DDa(z)}x=0;nb(175,a|0,s|0,h|0,f|0);y=x;x=0;if(y&1)break b;if(!(i[v>>0]|0)){B=k[f>>2]|0;C=21;break}else{k[f>>2]=-2;D=0;E=-2;break}}else C=22}else{B=w;C=21}while(0);if((C|0)==21)if(!B)C=22;else{D=0;E=B}do if((C|0)==22){w=k[n>>2]|0;y=i[w+-24>>0]|0;if(!(y&1))F=(y&255)>>>1;else F=k[w+-20>>2]|0;y=i[w+-12>>0]|0;if(!(y&1))G=(y&255)>>>1;else G=k[w+-8>>2]|0;w=G+F|0;y=w+1|0;if(y>>>0>m>>>0){z=AYa(b,y)|0;if(!z){k[f>>2]=-1;D=0;E=-1;break}if(l)H=z;else{k[c>>2]=y;H=z}}else if(!b){D=0;E=0;break}else H=b;z=k[n>>2]|0;y=z+-12|0;A=i[y>>0]|0;I=(A&1)==0;x=0;Fa(146,z+-24|0,(I?y+1|0:k[z+-4>>2]|0)|0,(I?(A&255)>>>1:k[z+-8>>2]|0)|0)|0;z=x;x=0;if(z&1)break b;z=k[n>>2]|0;A=z+-24|0;if(!(i[A>>0]&1))J=A+1|0;else J=k[z+-16>>2]|0;Dyb(H|0,J|0,w|0)|0;i[H+w>>0]=0;D=H;E=0}while(0);if(d)k[d>>2]=E;FDa(h);K=D;break a}while(0);n=Hc()|0;FDa(h);Sc(n|0)}else C=3;while(0);if((C|0)==3)if(!d)K=0;else{k[d>>2]=-3;K=0}r=e;return K|0}function GBa(a){a=a|0;Db(299321,299350,1164,299417)}function HBa(a){a=a|0;Db(299438,299461,303,299417)}function IBa(){var a=0,b=0,c=0,d=0,e=0,f=0;a=r;r=r+16|0;b=a+8|0;c=a;d=JBa()|0;if(!d){e=zYa(1,8)|0;if(!e)ABa(299528,c);if(!(Ef(k[12004]|0,e|0)|0))f=e;else ABa(299561,b)}else f=d;r=a;return f|0}function JBa(){var a=0,b=0;a=r;r=r+16|0;if(!(dd(48020,51)|0)){b=Ne(k[12004]|0)|0;r=a;return b|0}else ABa(299612,a);return 0}function KBa(a){a=a|0;var b=0,c=0,d=0;b=(a|0)==0?1:a;while(1){a=xYa(b)|0;if(a){c=a;d=6;break}a=hCa()|0;if(!a){d=5;break}kg[a&63]()}if((d|0)==5){b=Rd(4)|0;k[b>>2]=47340;Gf(b|0,8888,1238)}else if((d|0)==6)return c|0;return 0}function LBa(a,b){a=a|0;b=b|0;var c=0;x=0;b=Ba(563,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;me(a|0)|0;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else c=0}else c=b;return c|0}function MBa(a){a=a|0;return KBa(a)|0}function NBa(a,b){a=a|0;b=b|0;var c=0;x=0;b=Ba(574,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;me(a|0)|0;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else c=0}else c=b;return c|0}function OBa(a){a=a|0;yYa(a);return}function PBa(a,b){a=a|0;b=b|0;OBa(a);return}function QBa(a){a=a|0;OBa(a);return}function RBa(a,b){a=a|0;b=b|0;QBa(a);return}function SBa(a){a=a|0;k[a>>2]=47340;return}function TBa(a){a=a|0;return}function UBa(a){a=a|0;OBa(a);return}function VBa(a){a=a|0;return 299661}function WBa(a){a=a|0;k[a>>2]=47360;return}function XBa(a){a=a|0;OBa(a);return}function YBa(a){a=a|0;return 299676}function ZBa(a){a=a|0;k[a>>2]=47380;return}function _Ba(a){a=a|0;OBa(a);return}function $Ba(a){a=a|0;return 299697}function aCa(){var a=0;a=k[11832]|0;k[11832]=a+0;return a|0}function bCa(a){a=a|0;var b=0;b=r;r=r+16|0;kg[a&63]();ABa(299714,b)}function cCa(){var a=0;a=k[11832]|0;k[11832]=a+0;bCa(a)}function dCa(){var a=0;a=k[11831]|0;k[11831]=a+0;return a|0}function eCa(a){a=a|0;var b=0;b=r;r=r+16|0;x=0;hb(a|0);a=x;x=0;if(!(a&1)){x=0;xa(931,299755,b|0);x=0}a=Hc(0)|0;me(a|0)|0;x=0;xa(931,299795,b+8|0);x=0;b=Hc(0)|0;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else Fg(b)}function fCa(){var a=0,b=0;x=0;a=$a(49)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(((a|0)!=0?(b=k[a>>2]|0,(b|0)!=0):0)?(a=b+48|0,(k[a>>2]&-256|0)==1126902528?(k[a+4>>2]|0)==1129074247:0):0)eCa(k[b+12>>2]|0);b=k[11831]|0;k[11831]=b+0;eCa(b)}function gCa(a){a=a|0;var b=0;b=k[11848]|0;k[11848]=a;return b|0}function hCa(){var a=0;a=k[11848]|0;k[11848]=a+0;return a|0}function iCa(a){a=a|0;return}function jCa(a){a=a|0;OBa(a);return}function kCa(a){a=a|0;return 299845}function lCa(a){a=a|0;OBa(a);return}function mCa(a){a=a|0;return 299860}function nCa(a){a=a|0;k[a>>2]=47444;HDa(a+4|0);return}function oCa(a){a=a|0;nCa(a);OBa(a);return}function pCa(a){a=a|0;return k[a+4>>2]|0}function qCa(a){a=a|0;k[a>>2]=47464;HDa(a+4|0);return}function rCa(a){a=a|0;qCa(a);OBa(a);return}function sCa(a){a=a|0;return k[a+4>>2]|0}function tCa(a){a=a|0;nCa(a);OBa(a);return}function uCa(a){a=a|0;nCa(a);OBa(a);return}function vCa(a){a=a|0;nCa(a);OBa(a);return}function wCa(a){a=a|0;nCa(a);OBa(a);return}function xCa(a){a=a|0;qCa(a);OBa(a);return}function yCa(a){a=a|0;qCa(a);OBa(a);return}function zCa(a){a=a|0;qCa(a);OBa(a);return}function ACa(a){a=a|0;return}function BCa(a){a=a|0;OBa(a);return}function CCa(a){a=a|0;k[a>>2]=47624;return}function DCa(a){a=a|0;return}function ECa(a){a=a|0;OBa(a);return}function FCa(a){a=a|0;return 299879}function GCa(a){a=a|0;k[a>>2]=47644;return}function HCa(a){a=a|0;return}function ICa(a){a=a|0;OBa(a);return}function JCa(a){a=a|0;return 299893}function KCa(a){a=a|0;return}function LCa(a){a=a|0;OBa(a);return}function MCa(a){a=a|0;return}function NCa(a){a=a|0;return}function OCa(a){a=a|0;OBa(a);return}function PCa(a){a=a|0;OBa(a);return}function QCa(a){a=a|0;OBa(a);return}function RCa(a){a=a|0;OBa(a);return}function SCa(a){a=a|0;OBa(a);return}function TCa(a){a=a|0;OBa(a);return}function UCa(a){a=a|0;OBa(a);return}function VCa(a){a=a|0;OBa(a);return}function WCa(a){a=a|0;OBa(a);return}function XCa(a){a=a|0;OBa(a);return}function YCa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function ZCa(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function _Ca(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function $Ca(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function aDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+64|0;e=d;if((a|0)!=(b|0))if((b|0)!=0?(f=iDa(b,9144,9160,0)|0,(f|0)!=0):0){b=e;g=b+56|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(g|0));k[e>>2]=f;k[e+8>>2]=a;k[e+12>>2]=-1;k[e+48>>2]=1;ng[k[(k[f>>2]|0)+28>>2]&255](f,e,k[c>>2]|0,1);if((k[e+24>>2]|0)==1){k[c>>2]=k[e+16>>2];h=1}else h=0;i=h}else i=0;else i=1;r=d;return i|0}function bDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;a=b+16|0;e=k[a>>2]|0;do if(e){if((e|0)!=(c|0)){f=b+36|0;k[f>>2]=(k[f>>2]|0)+1;k[b+24>>2]=2;i[b+54>>0]=1;break}f=b+24|0;if((k[f>>2]|0)==2)k[f>>2]=d}else{k[a>>2]=c;k[b+24>>2]=d;k[b+36>>2]=1}while(0);return}function cDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(k[b+8>>2]|0))bDa(0,b,c,d);return}function dDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((a|0)==(k[b+8>>2]|0))bDa(0,b,c,d);else{e=k[a+8>>2]|0;ng[k[(k[e>>2]|0)+28>>2]&255](e,b,c,d)}return}function eDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=k[a+4>>2]|0;f=e>>8;if(!(e&1))g=f;else g=k[(k[c>>2]|0)+f>>2]|0;f=k[a>>2]|0;ng[k[(k[f>>2]|0)+28>>2]&255](f,b,c+g|0,(e&2|0)!=0?d:2);return}function fDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;a:do if((a|0)!=(k[b+8>>2]|0)){e=k[a+12>>2]|0;f=a+16+(e<<3)|0;eDa(a+16|0,b,c,d);if((e|0)>1){e=b+54|0;g=a+24|0;do{eDa(g,b,c,d);if(i[e>>0]|0)break a;g=g+8|0}while(g>>>0>>0)}}else bDa(0,b,c,d);while(0);return}function gDa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|(b|0)==9264|0}function hDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+64|0;e=d;k[c>>2]=k[k[c>>2]>>2];if(!((a|0)==(b|0)|(b|0)==9264))if(((b|0)!=0?(f=iDa(b,9144,9192,0)|0,(f|0)!=0):0)?(k[f+8>>2]&~k[a+8>>2]|0)==0:0){b=k[a+12>>2]|0;a=f+12|0;if(!((b|0)==9224?1:(b|0)==(k[a>>2]|0)))if((((b|0)!=0?(f=iDa(b,9144,9160,0)|0,(f|0)!=0):0)?(b=k[a>>2]|0,(b|0)!=0):0)?(a=iDa(b,9144,9160,0)|0,(a|0)!=0):0){b=e;g=b+56|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(g|0));k[e>>2]=a;k[e+8>>2]=f;k[e+12>>2]=-1;k[e+48>>2]=1;ng[k[(k[a>>2]|0)+28>>2]&255](a,e,k[c>>2]|0,1);if((k[e+24>>2]|0)==1){k[c>>2]=k[e+16>>2];h=1}else h=0;i=h}else i=0;else i=1}else i=0;else i=1;r=d;return i|0}function iDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+64|0;f=e;g=k[a>>2]|0;h=a+(k[g+-8>>2]|0)|0;l=k[g+-4>>2]|0;k[f>>2]=c;k[f+4>>2]=a;k[f+8>>2]=b;k[f+12>>2]=d;d=f+16|0;b=f+20|0;a=f+24|0;g=f+28|0;m=f+32|0;n=f+40|0;o=(l|0)==(c|0);p=d;q=p+36|0;do{k[p>>2]=0;p=p+4|0}while((p|0)<(q|0));j[d+36>>1]=0;i[d+38>>0]=0;a:do if(o){k[f+48>>2]=1;_f[k[(k[c>>2]|0)+20>>2]&127](c,f,h,h,1,0);s=(k[a>>2]|0)==1?h:0}else{Pf[k[(k[l>>2]|0)+24>>2]&127](l,f,h,1,0);switch(k[f+36>>2]|0){case 0:{s=(k[n>>2]|0)==1&(k[g>>2]|0)==1&(k[m>>2]|0)==1?k[b>>2]|0:0;break a;break}case 1:break;default:{s=0;break a}}if((k[a>>2]|0)!=1?!((k[n>>2]|0)==0&(k[g>>2]|0)==1&(k[m>>2]|0)==1):0){s=0;break}s=k[d>>2]|0}while(0);r=e;return s|0}function jDa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;i[b+53>>0]=1;do if((k[b+4>>2]|0)==(d|0)){i[b+52>>0]=1;a=b+16|0;f=k[a>>2]|0;if(!f){k[a>>2]=c;k[b+24>>2]=e;k[b+36>>2]=1;if(!((e|0)==1?(k[b+48>>2]|0)==1:0))break;i[b+54>>0]=1;break}if((f|0)!=(c|0)){f=b+36|0;k[f>>2]=(k[f>>2]|0)+1;i[b+54>>0]=1;break}f=b+24|0;a=k[f>>2]|0;if((a|0)==2){k[f>>2]=e;g=e}else g=a;if((g|0)==1?(k[b+48>>2]|0)==1:0)i[b+54>>0]=1}while(0);return}function kDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((k[b+4>>2]|0)==(c|0)?(c=b+28|0,(k[c>>2]|0)!=1):0)k[c>>2]=d;return}function lDa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;a:do if((a|0)==(k[b+8>>2]|0)){if((k[b+4>>2]|0)==(c|0)?(f=b+28|0,(k[f>>2]|0)!=1):0)k[f>>2]=d}else{if((a|0)!=(k[b>>2]|0)){f=k[a+12>>2]|0;g=a+16+(f<<3)|0;nDa(a+16|0,b,c,d,e);h=a+24|0;if((f|0)<=1)break;f=k[a+8>>2]|0;if((f&2|0)==0?(j=b+36|0,(k[j>>2]|0)!=1):0){if(!(f&1)){f=b+54|0;l=h;while(1){if(i[f>>0]|0)break a;if((k[j>>2]|0)==1)break a;nDa(l,b,c,d,e);l=l+8|0;if(l>>>0>=g>>>0)break a}}l=b+24|0;f=b+54|0;m=h;while(1){if(i[f>>0]|0)break a;if((k[j>>2]|0)==1?(k[l>>2]|0)==1:0)break a;nDa(m,b,c,d,e);m=m+8|0;if(m>>>0>=g>>>0)break a}}m=b+54|0;l=h;while(1){if(i[m>>0]|0)break a;nDa(l,b,c,d,e);l=l+8|0;if(l>>>0>=g>>>0)break a}}if((k[b+16>>2]|0)!=(c|0)?(g=b+20|0,(k[g>>2]|0)!=(c|0)):0){k[b+32>>2]=d;l=b+44|0;if((k[l>>2]|0)==4)break;m=a+16+(k[a+12>>2]<<3)|0;h=b+52|0;j=b+53|0;f=b+54|0;n=a+8|0;o=b+24|0;p=0;q=0;r=a+16|0;b:while(1){if(r>>>0>=m>>>0){s=p;t=q;u=20;break}i[h>>0]=0;i[j>>0]=0;mDa(r,b,c,c,1,e);if(i[f>>0]|0){s=p;t=q;u=20;break}do if(i[j>>0]|0){if(!(i[h>>0]|0))if(!(k[n>>2]&1)){s=p;t=1;u=20;break b}else{v=p;w=1;break}if((k[o>>2]|0)==1){x=1;break b}if(!(k[n>>2]&2)){x=1;break b}else{v=1;w=1}}else{v=p;w=q}while(0);p=v;q=w;r=r+8|0}if((u|0)==20)if((!s?(k[g>>2]=c,r=b+40|0,k[r>>2]=(k[r>>2]|0)+1,(k[b+36>>2]|0)==1):0)?(k[o>>2]|0)==2:0){i[f>>0]=1;x=t}else x=t;k[l>>2]=x?3:4;break}if((d|0)==1)k[b+32>>2]=1}while(0);return}function mDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=k[a+4>>2]|0;h=g>>8;if(!(g&1))i=h;else i=k[(k[d>>2]|0)+h>>2]|0;h=k[a>>2]|0;_f[k[(k[h>>2]|0)+20>>2]&127](h,b,c,d+i|0,(g&2|0)!=0?e:2,f);return}function nDa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=k[a+4>>2]|0;g=f>>8;if(!(f&1))h=g;else h=k[(k[c>>2]|0)+g>>2]|0;g=k[a>>2]|0;Pf[k[(k[g>>2]|0)+24>>2]&127](g,b,c+h|0,(f&2|0)!=0?d:2,e);return}function oDa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;do if((a|0)==(k[b+8>>2]|0)){if((k[b+4>>2]|0)==(c|0)?(f=b+28|0,(k[f>>2]|0)!=1):0)k[f>>2]=d}else{if((a|0)!=(k[b>>2]|0)){f=k[a+8>>2]|0;Pf[k[(k[f>>2]|0)+24>>2]&127](f,b,c,d,e);break}if((k[b+16>>2]|0)!=(c|0)?(f=b+20|0,(k[f>>2]|0)!=(c|0)):0){k[b+32>>2]=d;g=b+44|0;if((k[g>>2]|0)==4)break;h=b+52|0;i[h>>0]=0;j=b+53|0;i[j>>0]=0;l=k[a+8>>2]|0;_f[k[(k[l>>2]|0)+20>>2]&127](l,b,c,c,1,e);if(i[j>>0]|0)if(!(i[h>>0]|0)){m=1;n=13}else o=1;else{m=0;n=13}if((n|0)==13){k[f>>2]=c;f=b+40|0;k[f>>2]=(k[f>>2]|0)+1;if((k[b+36>>2]|0)==1?(k[b+24>>2]|0)==2:0){i[b+54>>0]=1;o=m}else o=m}k[g>>2]=o?3:4;break}if((d|0)==1)k[b+32>>2]=1}while(0);return}function pDa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;do if((a|0)==(k[b+8>>2]|0)){if((k[b+4>>2]|0)==(c|0)?(e=b+28|0,(k[e>>2]|0)!=1):0)k[e>>2]=d}else if((a|0)==(k[b>>2]|0)){if((k[b+16>>2]|0)!=(c|0)?(e=b+20|0,(k[e>>2]|0)!=(c|0)):0){k[b+32>>2]=d;k[e>>2]=c;e=b+40|0;k[e>>2]=(k[e>>2]|0)+1;if((k[b+36>>2]|0)==1?(k[b+24>>2]|0)==2:0)i[b+54>>0]=1;k[b+44>>2]=4;break}if((d|0)==1)k[b+32>>2]=1}while(0);return}function qDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((a|0)==(k[b+8>>2]|0))jDa(0,b,c,d,e);else{g=b+52|0;h=i[g>>0]|0;j=b+53|0;l=i[j>>0]|0;m=k[a+12>>2]|0;n=a+16+(m<<3)|0;i[g>>0]=0;i[j>>0]=0;mDa(a+16|0,b,c,d,e,f);a:do if((m|0)>1){o=b+24|0;p=a+8|0;q=b+54|0;r=a+24|0;do{if(i[q>>0]|0)break a;if(!(i[g>>0]|0)){if((i[j>>0]|0)!=0?(k[p>>2]&1|0)==0:0)break a}else{if((k[o>>2]|0)==1)break a;if(!(k[p>>2]&2))break a}i[g>>0]=0;i[j>>0]=0;mDa(r,b,c,d,e,f);r=r+8|0}while(r>>>0>>0)}while(0);i[g>>0]=h;i[j>>0]=l}return}function rDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;if((a|0)==(k[b+8>>2]|0))jDa(0,b,c,d,e);else{g=k[a+8>>2]|0;_f[k[(k[g>>2]|0)+20>>2]&127](g,b,c,d,e,f)}return}function sDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if((a|0)==(k[b+8>>2]|0))jDa(0,b,c,d,e);return}function tDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;k[e>>2]=k[c>>2];f=Xf[k[(k[a>>2]|0)+16>>2]&255](a,b,e)|0;if(f)k[c>>2]=k[e>>2];r=d;return f&1|0}function uDa(a){a=a|0;var b=0;if(!a)b=0;else b=(iDa(a,9144,9192,0)|0)!=0;return b&1|0}function vDa(){var a=0;a=Rd(4)|0;SBa(a);Gf(a|0,8888,1238)}function wDa(){k[12006]=302099;fCa()}function xDa(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a=r;r=r+48|0;b=a+32|0;c=a+24|0;d=a+16|0;e=a;f=a+36|0;a=JBa()|0;if((a|0)!=0?(g=k[a>>2]|0,(g|0)!=0):0){a=g+48|0;h=k[a>>2]|0;i=k[a+4>>2]|0;if(!((h&-256|0)==1126902528&(i|0)==1129074247)){k[c>>2]=k[12006];ABa(302040,c)}if((h|0)==1126902529&(i|0)==1129074247)j=k[g+44>>2]|0;else j=g+80|0;k[f>>2]=j;j=k[g>>2]|0;g=k[j+4>>2]|0;if(Xf[k[(k[2234]|0)+16>>2]&255](8936,j,f)|0){j=k[f>>2]|0;f=k[12006]|0;i=Vf[k[(k[j>>2]|0)+8>>2]&1023](j)|0;k[e>>2]=f;k[e+4>>2]=g;k[e+8>>2]=i;ABa(301954,e)}else{k[d>>2]=k[12006];k[d+4>>2]=g;ABa(301999,d)}}ABa(302078,b)}function yDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;k[a+12>>2]=0;k[a+16>>2]=d;if(!b)e=0;else e=NEa(k[d>>2]|0,b<<4)|0;k[a>>2]=e;d=e+(c<<4)|0;k[a+8>>2]=d;k[a+4>>2]=d;k[a+12>>2]=e+(b<<4);return}function zDa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=k[a>>2]|0;d=a+4|0;e=b+4|0;f=k[d>>2]|0;while(1){if((f|0)==(c|0))break;g=k[e>>2]|0;h=g+-16|0;i=f+-16|0;k[h>>2]=0;j=g+-12|0;k[j>>2]=0;l=k[f+-4>>2]|0;k[g+-8>>2]=0;k[g+-4>>2]=l;k[h>>2]=k[i>>2];h=f+-12|0;k[j>>2]=k[h>>2];j=f+-8|0;k[g+-8>>2]=k[j>>2];k[j>>2]=0;k[h>>2]=0;k[i>>2]=0;k[e>>2]=(k[e>>2]|0)+-16;f=i}f=k[a>>2]|0;k[a>>2]=k[e>>2];k[e>>2]=f;f=b+8|0;c=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=c;c=a+8|0;a=b+12|0;f=k[c>>2]|0;k[c>>2]=k[a>>2];k[a>>2]=f;k[b>>2]=k[e>>2];return}function ADa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;c=a+8|0;while(1){d=k[c>>2]|0;if((d|0)==(b|0))break;e=d+-16|0;k[c>>2]=e;KDa(e)}c=k[a>>2]|0;if(c)LDa(k[k[a+16>>2]>>2]|0,c,(k[a+12>>2]|0)-c|0);return}function BDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=r;r=r+48|0;f=e+24|0;g=e+12|0;h=e;a:do if(a>>>0>>0){b:do if((i[a>>0]|0)!=95){if((RDa(a,b,c)|0)!=(b|0)){k[d>>2]=-2;break a}}else{j=b;if((j-a|0)<=3){k[d>>2]=-2;break a}switch(i[a+1>>0]|0){case 90:{l=a+2|0;m=ODa(l,b,c)|0;if(!((m|0)==(l|0)|(m|0)==(b|0))?(i[m>>0]|0)==46:0){l=k[c+4>>2]|0;c:do if((k[c>>2]|0)==(l|0))n=m;else{o=l+-24|0;p=j-m|0;if(p>>>0>4294967279)GBa(h);if(p>>>0<11){i[h>>0]=p<<1;q=h+1|0}else{s=p+16&-16;t=xYa(s)|0;k[h+8>>2]=t;k[h>>2]=s|1;k[h+4>>2]=p;q=t}t=m;s=q;while(1){if((t|0)==(b|0))break;i[s>>0]=i[t>>0]|0;t=t+1|0;s=s+1|0}i[q+p>>0]=0;x=0;s=Fa(147,h|0,0,300012)|0;t=x;x=0;if(t&1){t=Hc()|0;u=M;v=t}else{k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];t=0;while(1){if((t|0)==3)break;k[s+(t<<2)>>2]=0;t=t+1|0}x=0;t=Ta(630,g|0,300015)|0;s=x;x=0;do if(!(s&1)){k[f>>2]=k[t>>2];k[f+4>>2]=k[t+4>>2];k[f+8>>2]=k[t+8>>2];p=0;while(1){if((p|0)==3)break;k[t+(p<<2)>>2]=0;p=p+1|0}p=i[f>>0]|0;w=(p&1)==0;x=0;Fa(146,o|0,(w?f+1|0:k[f+8>>2]|0)|0,(w?(p&255)>>>1:k[f+4>>2]|0)|0)|0;p=x;x=0;if(p&1){p=Hc()|0;w=M;NDa(f);y=w;z=p;break}else{NDa(f);NDa(g);NDa(h);n=b;break c}}else{p=Hc()|0;y=M;z=p}while(0);NDa(g);u=y;v=z}NDa(h);Sc(v|0)}while(0);A=n}else A=m;if((A|0)==(b|0))break b;k[d>>2]=-2;break a;break}case 95:{if((i[a+2>>0]|0)==95?(i[a+3>>0]|0)==90:0){l=a+4|0;o=ODa(l,b,c)|0;if((o|0)==(l|0)|(o|0)==(b|0)){k[d>>2]=-2;break a}d:do if((j-o|0)>12){l=0;t=o;while(1){if((l|0)>=13){B=t;break}if((i[t>>0]|0)!=(i[300017+l>>0]|0)){C=o;break d}l=l+1|0;t=t+1|0}e:do if((B|0)==(b|0))D=b;else{if((i[B>>0]|0)==95){t=B+1|0;if((t|0)==(b|0)){C=o;break d}if(((i[t>>0]|0)+-48|0)>>>0>=10){C=o;break d}E=B+2|0}else E=B;while(1){if((E|0)==(b|0)){D=b;break e}if(((i[E>>0]|0)+-48|0)>>>0>=10){D=E;break e}E=E+1|0}}while(0);t=k[c+4>>2]|0;if((k[c>>2]|0)!=(t|0)){PDa(t+-24|0,0,300031)|0;C=D}else C=o}else C=o;while(0);if((C|0)==(b|0))break b;k[d>>2]=-2;break a}break}default:{}}k[d>>2]=-2;break a}while(0);if((k[d>>2]|0)==0?(k[c>>2]|0)==(k[c+4>>2]|0):0)k[d>>2]=-2}else k[d>>2]=-2;while(0);r=e;return}function CDa(a){a=a|0;NDa(a+12|0);NDa(a);return}function DDa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;if(b){c=a+4|0;while(1){d=k[c>>2]|0;if((d|0)==(b|0))break;e=d+-24|0;k[c>>2]=e;CDa(e)}c=k[a>>2]|0;LDa(k[a+12>>2]|0,c,(k[a+8>>2]|0)-c|0)}return}function EDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;if((e-g|0)>>>0>=c>>>0){if(c){if(!(f&1))h=a+1|0;else h=k[a+8>>2]|0;Dyb(h+g|0,b|0,c|0)|0;f=g+c|0;if(!(i[a>>0]&1))i[a>>0]=f<<1;else k[a+4>>2]=f;i[h+f>>0]=0}}else MDa(a,e,c-e+g|0,g,g,0,c,b);return a|0}function FDa(a){a=a|0;JDa(a+32|0);KDa(a+16|0);DDa(a);return}function GDa(){var a=0;a=r;r=r+16|0;if(!(wb(48016,1526)|0)){r=a;return}else ABa(299909,a)}function HDa(a){a=a|0;var b=0,c=0;b=(k[a>>2]|0)+-4|0;c=k[b>>2]|0;k[b>>2]=c+-1;if((c+-1|0)<0)OBa((k[a>>2]|0)+-12|0);return}function IDa(a){a=a|0;var b=0;b=r;r=r+16|0;yYa(a);if(!(Ef(k[12004]|0,0)|0)){r=b;return}else ABa(299959,b)}function JDa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;if(b){c=a+4|0;while(1){d=k[c>>2]|0;if((d|0)==(b|0))break;e=d+-16|0;k[c>>2]=e;KDa(e)}c=k[a>>2]|0;LDa(k[a+12>>2]|0,c,(k[a+8>>2]|0)-c|0)}return}function KDa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;if(b){c=a+4|0;while(1){d=k[c>>2]|0;if((d|0)==(b|0))break;e=d+-16|0;k[c>>2]=e;DDa(e)}c=k[a>>2]|0;LDa(k[a+12>>2]|0,c,(k[a+8>>2]|0)-c|0)}return}function LDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(a>>>0<=b>>>0&(a+4096|0)>>>0>=b>>>0){d=a+4096|0;if((b+(c+15&-16)|0)==(k[d>>2]|0))k[d>>2]=b}else yYa(b);return}function MDa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;if((-18-b|0)>>>0>>0)GBa(a);if(!(i[a>>0]&1))j=a+1|0;else j=k[a+8>>2]|0;if(b>>>0<2147483623){l=c+b|0;c=b<<1;m=l>>>0>>0?c:l;n=m>>>0<11?11:m+16&-16}else n=-17;m=xYa(n)|0;if(e)Dyb(m|0,j|0,e|0)|0;if(g)Dyb(m+e|0,h|0,g|0)|0;h=d-f|0;if((h|0)!=(e|0))Dyb(m+e+g|0,j+e+f|0,h-e|0)|0;if((b|0)!=10)yYa(j);k[a+8>>2]=m;k[a>>2]=n|1;n=h+g|0;k[a+4>>2]=n;i[m+n>>0]=0;return}function NDa(a){a=a|0;if(i[a>>0]&1)yYa(k[a+8>>2]|0);return}function ODa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0;d=r;r=r+112|0;e=d+96|0;f=d+84|0;g=d+72|0;h=d+60|0;j=d+48|0;l=d+36|0;m=d+24|0;n=d+12|0;o=d;a:do if((a|0)==(b|0))p=a;else{q=c+56|0;s=k[q>>2]|0;t=s+1|0;k[q>>2]=t;u=c+61|0;v=i[u>>0]|0;if(t>>>0>1)i[u>>0]=1;t=i[a>>0]|0;b:do switch(t|0){case 84:case 71:{c:do if((b-a|0)>2){switch(t|0){case 84:break;case 71:{switch(i[a+1>>0]|0){case 86:{w=a+2|0;x=0;y=Fa(150,w|0,b|0,c|0)|0;z=x;x=0;if(z&1){A=100;break b}if((y|0)==(w|0)){B=a;break c}w=k[c+4>>2]|0;if((k[c>>2]|0)==(w|0)){B=a;break c}x=0;Fa(147,w+-24|0,0,301909)|0;w=x;x=0;if(w&1){A=100;break b}else{B=y;break c}break}case 82:{y=a+2|0;x=0;w=Fa(150,y|0,b|0,c|0)|0;z=x;x=0;if(z&1){A=100;break b}if((w|0)==(y|0)){B=a;break c}y=k[c+4>>2]|0;if((k[c>>2]|0)==(y|0)){B=a;break c}x=0;Fa(147,y+-24|0,0,301929)|0;y=x;x=0;if(y&1){A=100;break b}else{B=w;break c}break}default:{B=a;break c}}break}default:{B=a;break c}}w=a+1|0;switch(i[w>>0]|0){case 86:{y=a+2|0;x=0;z=Fa(148,y|0,b|0,c|0)|0;C=x;x=0;if(C&1){A=100;break b}if((z|0)==(y|0)){B=a;break c}y=k[c+4>>2]|0;if((k[c>>2]|0)==(y|0)){B=a;break c}x=0;Fa(147,y+-24|0,0,301758)|0;y=x;x=0;if(y&1){A=100;break b}else{B=z;break c}break}case 84:{z=a+2|0;x=0;y=Fa(148,z|0,b|0,c|0)|0;C=x;x=0;if(C&1){A=100;break b}if((y|0)==(z|0)){B=a;break c}z=k[c+4>>2]|0;if((k[c>>2]|0)==(z|0)){B=a;break c}x=0;Fa(147,z+-24|0,0,301770)|0;z=x;x=0;if(z&1){A=100;break b}else{B=y;break c}break}case 73:{y=a+2|0;x=0;z=Fa(148,y|0,b|0,c|0)|0;C=x;x=0;if(C&1){A=100;break b}if((z|0)==(y|0)){B=a;break c}y=k[c+4>>2]|0;if((k[c>>2]|0)==(y|0)){B=a;break c}x=0;Fa(147,y+-24|0,0,301779)|0;y=x;x=0;if(y&1){A=100;break b}else{B=z;break c}break}case 83:{z=a+2|0;x=0;y=Fa(148,z|0,b|0,c|0)|0;C=x;x=0;if(C&1){A=100;break b}if((y|0)==(z|0)){B=a;break c}z=k[c+4>>2]|0;if((k[c>>2]|0)==(z|0)){B=a;break c}x=0;Fa(147,z+-24|0,0,301793)|0;z=x;x=0;if(z&1){A=100;break b}else{B=y;break c}break}case 99:{y=a+2|0;z=YEa(y,b)|0;if((z|0)==(y|0)){B=a;break c}y=YEa(z,b)|0;if((y|0)==(z|0)){B=a;break c}x=0;z=Fa(149,y|0,b|0,c|0)|0;C=x;x=0;if(C&1){A=100;break b}if((z|0)==(y|0)){B=a;break c}y=k[c+4>>2]|0;if((k[c>>2]|0)==(y|0)){B=a;break c}x=0;Fa(147,y+-24|0,0,301812)|0;y=x;x=0;if(y&1){A=100;break b}else{B=z;break c}break}case 67:{z=a+2|0;x=0;y=Fa(148,z|0,b|0,c|0)|0;C=x;x=0;if(C&1){A=100;break b}if((y|0)==(z|0)){B=a;break c}z=bEa(y,b)|0;if((z|0)==(y|0)|(z|0)==(b|0)){B=a;break c}if((i[z>>0]|0)!=95){B=a;break c}y=z+1|0;x=0;z=Fa(148,y|0,b|0,c|0)|0;C=x;x=0;if(C&1){A=100;break b}if((z|0)==(y|0)){B=a;break c}y=c+4|0;C=k[y>>2]|0;if(((C-(k[c>>2]|0)|0)/24|0)>>>0<2){B=a;break c}x=0;xa(932,e|0,C+-24|0);C=x;x=0;if(C&1){A=100;break b}C=k[y>>2]|0;D=C+-24|0;E=C;while(1){if((E|0)==(D|0))break;F=E+-24|0;k[y>>2]=F;CDa(F);E=k[y>>2]|0}E=C+-48|0;x=0;D=Fa(147,e|0,0,301839)|0;F=x;x=0;if(F&1){F=Hc()|0;G=M;H=F}else{k[h>>2]=k[D>>2];k[h+4>>2]=k[D+4>>2];k[h+8>>2]=k[D+8>>2];F=0;while(1){if((F|0)==3)break;k[D+(F<<2)>>2]=0;F=F+1|0}x=0;F=Ta(630,h|0,301864)|0;D=x;x=0;if(D&1){D=Hc()|0;I=M;J=D}else{k[g>>2]=k[F>>2];k[g+4>>2]=k[F+4>>2];k[g+8>>2]=k[F+8>>2];D=0;while(1){if((D|0)==3)break;k[F+(D<<2)>>2]=0;D=D+1|0}x=0;xa(932,j|0,(k[y>>2]|0)+-24|0);D=x;x=0;do if(D&1){F=Hc()|0;K=M;L=F}else{F=i[j>>0]|0;N=(F&1)==0;x=0;O=Fa(146,g|0,(N?j+1|0:k[j+8>>2]|0)|0,(N?(F&255)>>>1:k[j+4>>2]|0)|0)|0;F=x;x=0;if(F&1){F=Hc()|0;N=M;NDa(j);K=N;L=F;break};k[f>>2]=k[O>>2];k[f+4>>2]=k[O+4>>2];k[f+8>>2]=k[O+8>>2];F=0;while(1){if((F|0)==3)break;k[O+(F<<2)>>2]=0;F=F+1|0}do if(!(i[E>>0]&1)){i[E+1>>0]=0;i[E>>0]=0}else{F=C+-40|0;i[k[F>>2]>>0]=0;O=C+-44|0;k[O>>2]=0;N=i[E>>0]|0;if(!(N&1)){P=N;Q=10}else{N=k[E>>2]|0;P=N&255;Q=(N&-2)+-1|0}do if(!(P&1)){N=(P&255)>>>1;if((P&255)<22){R=10;S=N;T=1;break}R=(N+16&240)+-1|0;S=N;T=1}else{R=10;S=0;T=0}while(0);if((R|0)==(Q|0))break;if((R|0)==10){N=E+1|0;U=k[F>>2]|0;if(T){Dyb(N|0,U|0,((P&255)>>>1)+1|0)|0;yYa(U)}else{i[N>>0]=i[U>>0]|0;yYa(U)}i[E>>0]=S<<1;break}U=R+1|0;N=xYa(U)|0;if(R>>>0<=Q>>>0&(N|0)==0)break;if(T)Dyb(N|0,E+1|0,((P&255)>>>1)+1|0)|0;else{V=k[F>>2]|0;i[N>>0]=i[V>>0]|0;yYa(V)}k[E>>2]=U|1;k[O>>2]=S;k[F>>2]=N}while(0);k[E>>2]=k[f>>2];k[E+4>>2]=k[f+4>>2];k[E+8>>2]=k[f+8>>2];N=0;while(1){if((N|0)==3)break;k[f+(N<<2)>>2]=0;N=N+1|0}NDa(f);NDa(j);NDa(g);NDa(h);NDa(e);B=z;break c}while(0);NDa(g);I=K;J=L}NDa(h);G=I;H=J}NDa(e);W=G;X=H;A=101;break b;break}default:{z=YEa(w,b)|0;if((z|0)==(w|0)){B=a;break c}x=0;E=Fa(149,z|0,b|0,c|0)|0;C=x;x=0;if(C&1){A=100;break b}if((E|0)==(z|0)){B=a;break c}z=k[c+4>>2]|0;if((k[c>>2]|0)==(z|0)){B=a;break c}C=z+-24|0;x=0;if((i[a+2>>0]|0)==118){PDa(C,0,301869)|0;z=x;x=0;if(z&1){A=100;break b}else{B=E;break c}}else{PDa(C,0,301887)|0;C=x;x=0;if(C&1){A=100;break b}else{B=E;break c}}}}}else B=a;while(0);Y=B;A=208;break}default:{x=0;E=Fa(150,a|0,b|0,c|0)|0;C=x;x=0;if(!(C&1)){C=k[c+48>>2]|0;z=k[c+52>>2]|0;if((E|0)!=(a|0))if((E|0)!=(b|0)){switch(i[E>>0]|0){case 46:case 69:{Y=E;A=208;break b;break}default:{}}D=i[u>>0]|0;i[u>>0]=0;y=0;while(1){if((y|0)==3)break;k[l+(y<<2)>>2]=0;y=y+1|0}y=c+4|0;N=k[y>>2]|0;d:do if((k[c>>2]|0)!=(N|0)){U=N+-24|0;V=i[U>>0]|0;Z=(V&1)==0;if(Z)_=(V&255)>>>1;else _=k[N+-20>>2]|0;if(_){e:do if(!(i[c+60>>0]|0)){if(Z){$=U+1|0;aa=(V&255)>>>1}else{$=k[N+-16>>2]|0;aa=k[N+-20>>2]|0}if((i[$+aa+-1>>0]|0)==62){if(Z){ba=(V&255)>>>1;ca=U+1|0}else{ba=k[N+-20>>2]|0;ca=k[N+-16>>2]|0}if((i[ca+(ba+-2)>>0]|0)!=45){if(Z){da=(V&255)>>>1;ea=U+1|0}else{da=k[N+-20>>2]|0;ea=k[N+-16>>2]|0}if((i[ea+(da+-2)>>0]|0)!=62){x=0;fa=Fa(148,E|0,b|0,c|0)|0;ga=x;x=0;if(ga&1)A=115;else{if((fa|0)==(E|0)){ha=a;ia=0;break d}ga=k[y>>2]|0;ja=ga;if(((ga-(k[c>>2]|0)|0)/24|0)>>>0<2){ha=a;ia=0;break d}ga=ja+-24|0;k[m>>2]=k[ga>>2];k[m+4>>2]=k[ga+4>>2];k[m+8>>2]=k[ga+8>>2];ka=0;while(1){if((ka|0)==3)break;k[ga+(ka<<2)>>2]=0;ka=ka+1|0}ka=ja+-12|0;f:do if(!(i[l>>0]&1)){i[l+1>>0]=0;i[l>>0]=0}else{ga=l+8|0;la=k[ga>>2]|0;i[la>>0]=0;ma=l+4|0;k[ma>>2]=0;na=k[l>>2]|0;oa=(na&-2)+-1|0;pa=na&255;do if(!(pa&1)){qa=na>>>1&127;if((pa&255)<22){Dyb(l+1|0,la|0,(na>>>1&127)+1|0)|0;yYa(la);ra=qa;break}sa=qa+16&240;ta=sa+-1|0;if((ta|0)==(oa|0))break f;ua=xYa(sa)|0;if(ta>>>0<=oa>>>0&(ua|0)==0)break f;Dyb(ua|0,l+1|0,(na>>>1&127)+1|0)|0;k[l>>2]=sa|1;k[ma>>2]=qa;k[ga>>2]=ua;break f}else{i[l+1>>0]=0;yYa(la);ra=0}while(0);i[l>>0]=ra<<1}while(0);k[l>>2]=k[ka>>2];k[l+4>>2]=k[ka+4>>2];k[l+8>>2]=k[ka+8>>2];ja=0;while(1){if((ja|0)==3)break;k[ka+(ja<<2)>>2]=0;ja=ja+1|0}ja=i[l>>0]|0;if(!((((ja&1)==0?(ja&255)>>>1:k[l+4>>2]|0)|0)==0?(x=0,xa(933,m|0,32),ja=x,x=0,ja&1):0))A=152;do if((A|0)==152){ja=k[y>>2]|0;ka=ja+-24|0;la=ja;while(1){if((la|0)==(ka|0))break;ga=la+-24|0;k[y>>2]=ga;CDa(ga);la=k[y>>2]|0}la=i[m>>0]|0;ka=(la&1)==0;x=0;db(78,ja+-48|0,0,(ka?m+1|0:k[m+8>>2]|0)|0,(ka?(la&255)>>>1:k[m+4>>2]|0)|0)|0;la=x;x=0;if(la&1)break;NDa(m);va=k[y>>2]|0;wa=fa;A=157;break e}while(0);fa=Hc()|0;la=M;NDa(m);ya=fa;za=la}}else{va=N;wa=E;A=157}}else{va=N;wa=E;A=157}}else{va=N;wa=E;A=157}}else{va=N;wa=E;A=157}while(0);g:do if((A|0)==157){x=0;xa(933,va+-24|0,40);U=x;x=0;if(!(U&1)){if((wa|0)!=(b|0)?(i[wa>>0]|0)==118:0){Aa=k[c>>2]|0;Ba=k[y>>2]|0;Ca=wa+1|0}else A=160;do if((A|0)==160){U=n+4|0;V=o+8|0;Z=o+1|0;w=o+4|0;la=n+8|0;fa=n+1|0;ka=1;ga=wa;h:while(1){ma=k[c>>2]|0;na=k[y>>2]|0;oa=ga;while(1){pa=(na-ma|0)/24|0;x=0;F=Fa(148,oa|0,b|0,c|0)|0;O=x;x=0;if(O&1){A=114;break h}na=k[y>>2]|0;ma=k[c>>2]|0;O=(na-ma|0)/24|0;if((F|0)==(oa|0)){Da=na;Ea=ma;Ga=oa;A=192;break h}if(O>>>0>pa>>>0){Ha=pa;Ia=F;Ja=O;break}else oa=F}oa=0;while(1){if((oa|0)==3){Ka=Ha;break}k[n+(oa<<2)>>2]=0;oa=oa+1|0}while(1){if(Ka>>>0>=Ja>>>0){La=Ha;break}oa=i[n>>0]|0;if((((oa&1)==0?(oa&255)>>>1:k[U>>2]|0)|0)!=0?(x=0,Ta(630,n|0,300110)|0,oa=x,x=0,oa&1):0){A=171;break h}x=0;xa(932,o|0,(k[c>>2]|0)+(Ka*24|0)|0);oa=x;x=0;if(oa&1){A=171;break h}oa=i[o>>0]|0;ma=(oa&1)==0;x=0;Fa(146,n|0,(ma?Z:k[V>>2]|0)|0,(ma?(oa&255)>>>1:k[w>>2]|0)|0)|0;oa=x;x=0;if(oa&1){A=177;break h}NDa(o);Ka=Ka+1|0}while(1){if(La>>>0>=Ja>>>0)break;oa=k[y>>2]|0;ma=oa+-24|0;na=oa;while(1){if((na|0)==(ma|0))break;oa=na+-24|0;k[y>>2]=oa;CDa(oa);na=k[y>>2]|0}La=La+1|0}na=i[n>>0]|0;ma=k[U>>2]|0;if(((na&1)==0?(na&255)>>>1:ma)|0){oa=k[y>>2]|0;if((k[c>>2]|0)==(oa|0)){A=205;break}if(ka){Ma=oa;Na=na;Oa=ma}else{x=0;Ta(630,oa+-24|0,300110)|0;oa=x;x=0;if(oa&1){A=172;break}Ma=k[y>>2]|0;Na=i[n>>0]|0;Oa=k[U>>2]|0}oa=(Na&1)==0;x=0;Fa(146,Ma+-24|0,(oa?fa:k[la>>2]|0)|0,(oa?(Na&255)>>>1:Oa)|0)|0;oa=x;x=0;if(oa&1){A=172;break}else Pa=0}else Pa=ka;NDa(n);ka=Pa;ga=Ia}if((A|0)==114){ga=Hc()|0;Qa=ga;Ra=M;A=116;break g}else if((A|0)==171){ga=Hc()|0;Sa=ga;Ua=M;A=173}else if((A|0)==172){ga=Hc()|0;Sa=ga;Ua=M;A=173}else if((A|0)==177){ga=Hc()|0;ka=M;NDa(o);Va=ga;Wa=ka}else if((A|0)==192){Aa=Ea;Ba=Da;Ca=Ga;break}else if((A|0)==205){NDa(n);ha=a;ia=0;break d}if((A|0)==173){Va=Sa;Wa=Ua}NDa(n);ya=Va;za=Wa;break g}while(0);if((Aa|0)==(Ba|0)){ha=a;ia=0;break d}x=0;xa(933,Ba+-24|0,41);ka=x;x=0;if(!(ka&1)){if((C&1|0)!=0?(x=0,Ta(630,(k[y>>2]|0)+-24|0,300065)|0,ka=x,x=0,ka&1):0){A=115;break}if((C&2|0)!=0?(x=0,Ta(630,(k[y>>2]|0)+-24|0,300072)|0,ka=x,x=0,ka&1):0){A=115;break}if((C&4|0)!=0?(x=0,Ta(630,(k[y>>2]|0)+-24|0,300082)|0,ka=x,x=0,ka&1):0){A=115;break}switch(z|0){case 1:{x=0;Ta(630,(k[y>>2]|0)+-24|0,300113)|0;ka=x;x=0;if(ka&1){A=115;break g}break}case 2:{x=0;Ta(630,(k[y>>2]|0)+-24|0,300116)|0;ka=x;x=0;if(ka&1){A=115;break g}break}default:{}}ka=i[l>>0]|0;ga=(ka&1)==0;x=0;Fa(146,(k[y>>2]|0)+-24|0,(ga?l+1|0:k[l+8>>2]|0)|0,(ga?(ka&255)>>>1:k[l+4>>2]|0)|0)|0;ka=x;x=0;if(!(ka&1)){ha=Ca;ia=1;break d}else A=115}else A=115}else A=115}while(0);if((A|0)==115){ka=Hc()|0;Qa=ka;Ra=M;A=116}if((A|0)==116){ya=Qa;za=Ra}NDa(l);i[u>>0]=D;Xa=ya;Ya=za;break b}else{ha=a;ia=0}}else{ha=a;ia=0}while(0);NDa(l);i[u>>0]=D;if(ia){Y=ha;A=208}else{i[u>>0]=v;k[q>>2]=s;p=a;break a}}else{Y=b;A=208}else{Y=a;A=208}}else A=100}}while(0);if((A|0)==100){t=Hc()|0;W=M;X=t;A=101}else if((A|0)==208){i[u>>0]=v;k[q>>2]=s;p=Y;break}if((A|0)==101){Xa=X;Ya=W}i[u>>0]=v;k[q>>2]=s;Sc(Xa|0)}while(0);r=d;return p|0}function PDa(a,b,c){a=a|0;b=b|0;c=c|0;return cEa(a,b,c,RLa(c)|0)|0}function QDa(a,b){a=a|0;b=b|0;return EDa(a,b,RLa(b)|0)|0}function RDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0;d=r;r=r+864|0;e=d+832|0;f=d+808|0;g=d+788|0;h=d+768|0;j=d+744|0;l=d+720|0;m=d+696|0;n=d+672|0;o=d+652|0;p=d+632|0;q=d+612|0;s=d+592|0;t=d+48|0;u=d+576|0;v=d+568|0;w=d+552|0;y=d+544|0;z=d+528|0;A=d+520|0;B=d+504|0;C=d+496|0;D=d+480|0;E=d+472|0;F=d+460|0;G=d+448|0;H=d+436|0;I=d+424|0;J=d+36|0;K=d+408|0;L=d+404|0;N=d+24|0;O=d+392|0;P=d+368|0;Q=d+352|0;R=d+340|0;S=d+328|0;T=d+12|0;U=d+304|0;V=d+292|0;W=d+280|0;X=d+268|0;Y=d+256|0;Z=d+232|0;_=d+220|0;$=d+208|0;aa=d+192|0;ba=d+184|0;ca=d+168|0;da=d+160|0;ea=d;fa=d+144|0;ga=d+136|0;ha=d+120|0;ia=d+112|0;ja=d+96|0;ka=d+88|0;la=d+72|0;ma=d+68|0;a:do if((a|0)!=(b|0)){switch(i[a>>0]|0){case 75:case 86:case 114:{k[f>>2]=0;na=SDa(a,b,f)|0;b:do if((na|0)!=(a|0)?(oa=i[na>>0]|0,pa=c+4|0,qa=((k[pa>>2]|0)-(k[c>>2]|0)|0)/24|0,ra=RDa(na,b,c)|0,sa=((k[pa>>2]|0)-(k[c>>2]|0)|0)/24|0,(ra|0)!=(na|0)):0){pa=oa<<24>>24==70;oa=c+20|0;ta=k[oa>>2]|0;c:do if(pa){ua=ta+-16|0;wa=ta;while(1){if((wa|0)==(ua|0)){ya=ua;break c}za=wa+-16|0;k[oa>>2]=za;DDa(za);wa=k[oa>>2]|0}}else ya=ta;while(0);ta=c+16|0;wa=k[c+12>>2]|0;ua=k[c+24>>2]|0;za=ua;if(ya>>>0>>0){k[ya>>2]=0;k[ya+4>>2]=0;k[ya+8>>2]=0;k[ya+12>>2]=wa;k[oa>>2]=(k[oa>>2]|0)+16}else{ua=k[ta>>2]|0;Aa=ya-ua|0;Ba=Aa>>4;Ca=Ba+1|0;if((Aa|0)<-16)HBa(ta);Aa=za-ua|0;if(Aa>>4>>>0<1073741823){ua=Aa>>3;Da=ua>>>0>>0?Ca:ua}else Da=2147483647;TDa(e,Da,Ba,c+28|0);Ba=e+8|0;ua=k[Ba>>2]|0;k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua+12>>2]=wa;k[Ba>>2]=ua+16;UDa(ta,e);VDa(e)}ta=k[f>>2]|0;ua=(ta&1|0)==0;Ba=(ta&2|0)==0;wa=(ta&4|0)==0;ta=e+8|0;Ca=qa;while(1){if(Ca>>>0>=sa>>>0){Ea=ra;break b}if(pa){Aa=k[c>>2]|0;za=Aa+(Ca*24|0)+12|0;Ga=i[za>>0]|0;Ha=(Ga&1)==0;if(Ha){Ia=(Ga&255)>>>1;Ja=za+1|0}else{Ia=k[Aa+(Ca*24|0)+16>>2]|0;Ja=k[Aa+(Ca*24|0)+20>>2]|0}Ka=Ia+-2|0;if((i[Ja+Ka>>0]|0)==38)La=Ia+-3|0;else{if(Ha){Ma=za+1|0;Na=(Ga&255)>>>1}else{Ma=k[Aa+(Ca*24|0)+20>>2]|0;Na=k[Aa+(Ca*24|0)+16>>2]|0}La=(i[Ma+Na+-1>>0]|0)==38?Ka:Ia}if(ua)Oa=La;else{PDa(za,La,300065)|0;Oa=La+6|0}if(Ba)Pa=Oa;else{PDa((k[c>>2]|0)+(Ca*24|0)+12|0,Oa,300072)|0;Pa=Oa+9|0}if(!wa)PDa((k[c>>2]|0)+(Ca*24|0)+12|0,Pa,300082)|0}else{if(!ua)QDa((k[c>>2]|0)+(Ca*24|0)|0,300065)|0;if(!Ba)QDa((k[c>>2]|0)+(Ca*24|0)|0,300072)|0;if(!wa)QDa((k[c>>2]|0)+(Ca*24|0)|0,300082)|0}za=k[oa>>2]|0;Ka=za+-16|0;Aa=k[c>>2]|0;Ga=Aa+(Ca*24|0)|0;Ha=za+-12|0;Qa=k[Ha>>2]|0;Ra=k[za+-8>>2]|0;Sa=Ra;if((Qa|0)==(Ra|0)){Ra=k[Ka>>2]|0;Ua=Qa-Ra|0;Va=(Ua|0)/24|0;Wa=Va+1|0;if((Ua|0)<-24){Xa=Ka;Ya=45;break}Ua=(Sa-Ra|0)/24|0;if(Ua>>>0<1073741823){Ra=Ua<<1;Za=Ra>>>0>>0?Wa:Ra}else Za=2147483647;XDa(e,Za,Va,za+-4|0);za=k[ta>>2]|0;x=0;xa(934,za|0,Ga|0);Va=x;x=0;if(Va&1){Ya=51;break}x=0;xa(934,za+12|0,Aa+(Ca*24|0)+12|0);Va=x;x=0;if(Va&1){_a=za;Ya=50;break}k[ta>>2]=za+24;ZDa(Ka,e);YDa(e)}else{WDa(Qa,Ga);x=0;xa(934,Qa+12|0,Aa+(Ca*24|0)+12|0);Aa=x;x=0;if(Aa&1){$a=Qa;Ya=42;break}k[Ha>>2]=(k[Ha>>2]|0)+24}Ca=Ca+1|0}if((Ya|0)==42){Ca=Hc()|0;NDa($a);Sc(Ca|0)}else if((Ya|0)==45)HBa(Xa);else if((Ya|0)==50){Ca=Hc()|0;ta=M;NDa(_a);ab=ta;bb=Ca}else if((Ya|0)==51){Ca=Hc()|0;ab=M;bb=Ca}YDa(e);Sc(bb|0)}else Ea=a;while(0);cb=Ea;break a;break}default:{}}na=_Da(a,b,c)|0;if((na|0)==(a|0)){Ca=i[a>>0]|0;d:do switch(Ca<<24>>24|0){case 65:{e:do if(Ca<<24>>24==65?(ta=a+1|0,(ta|0)!=(b|0)):0){oa=i[ta>>0]|0;if(oa<<24>>24==95){wa=a+2|0;Ba=RDa(wa,b,c)|0;if((Ba|0)==(wa|0)){eb=a;break}wa=c+4|0;ua=k[wa>>2]|0;if((k[c>>2]|0)==(ua|0)){eb=a;break}pa=ua+-12|0;ra=i[pa>>0]|0;sa=(ra&1)==0;qa=sa?(ra&255)>>>1:k[ua+-8>>2]|0;$Da(e,sa?pa+1|0:k[ua+-4>>2]|0,qa>>>0<2?qa:2);qa=i[e>>0]|0;ua=(qa&1)==0;pa=ua?(qa&255)>>>1:k[e+4>>2]|0;qa=pa>>>0>2;sa=ZLa(ua?e+1|0:k[e+8>>2]|0,300092,qa?2:pa)|0;NDa(e);if(!(((sa|0)==0?(pa>>>0<2?-1:qa&1):sa)|0))aEa((k[wa>>2]|0)+-12|0);PDa((k[wa>>2]|0)+-12|0,0,300095)|0;eb=Ba;break}if((oa+-49&255)<9){oa=bEa(ta,b)|0;if((oa|0)==(b|0)){eb=a;break}if((i[oa>>0]|0)!=95){eb=a;break}Ba=oa+1|0;wa=RDa(Ba,b,c)|0;if((wa|0)==(Ba|0)){eb=a;break}Ba=c+4|0;sa=k[Ba>>2]|0;if((k[c>>2]|0)==(sa|0)){eb=a;break}qa=sa+-12|0;pa=i[qa>>0]|0;ua=(pa&1)==0;ra=ua?(pa&255)>>>1:k[sa+-8>>2]|0;$Da(f,ua?qa+1|0:k[sa+-4>>2]|0,ra>>>0<2?ra:2);ra=i[f>>0]|0;sa=(ra&1)==0;qa=sa?(ra&255)>>>1:k[f+4>>2]|0;ra=qa>>>0>2;ua=ZLa(sa?f+1|0:k[f+8>>2]|0,300092,ra?2:qa)|0;NDa(f);if(!(((ua|0)==0?(qa>>>0<2?-1:ra&1):ua)|0))aEa((k[Ba>>2]|0)+-12|0);ua=(k[Ba>>2]|0)+-12|0;Ba=oa-ta|0;if(Ba>>>0>4294967279)GBa(j);if(Ba>>>0<11){i[j>>0]=Ba<<1;gb=j+1|0}else{ra=Ba+16&-16;qa=xYa(ra)|0;k[j+8>>2]=qa;k[j>>2]=ra|1;k[j+4>>2]=Ba;gb=qa}qa=ta;ra=gb;while(1){if((qa|0)==(oa|0))break;i[ra>>0]=i[qa>>0]|0;qa=qa+1|0;ra=ra+1|0}i[gb+Ba>>0]=0;x=0;ra=Fa(147,j|0,0,300092)|0;qa=x;x=0;if(qa&1){qa=Hc()|0;hb=qa;ib=M}else{k[h>>2]=k[ra>>2];k[h+4>>2]=k[ra+4>>2];k[h+8>>2]=k[ra+8>>2];qa=0;while(1){if((qa|0)==3)break;k[ra+(qa<<2)>>2]=0;qa=qa+1|0}x=0;qa=Ta(630,h|0,316824)|0;ra=x;x=0;do if(!(ra&1)){k[g>>2]=k[qa>>2];k[g+4>>2]=k[qa+4>>2];k[g+8>>2]=k[qa+8>>2];Ba=0;while(1){if((Ba|0)==3)break;k[qa+(Ba<<2)>>2]=0;Ba=Ba+1|0}Ba=i[g>>0]|0;oa=(Ba&1)==0;x=0;db(78,ua|0,0,(oa?g+1|0:k[g+8>>2]|0)|0,(oa?(Ba&255)>>>1:k[g+4>>2]|0)|0)|0;Ba=x;x=0;if(Ba&1){Ba=Hc()|0;oa=M;NDa(g);jb=Ba;kb=oa;break}else{NDa(g);NDa(h);NDa(j);eb=wa;break e}}else{oa=Hc()|0;jb=oa;kb=M}while(0);NDa(h);hb=jb;ib=kb}NDa(j);lb=ib;mb=hb}else{wa=dEa(ta,b,c)|0;if((wa|0)==(ta|0)|(wa|0)==(b|0)){eb=a;break}if((i[wa>>0]|0)!=95){eb=a;break}ua=wa+1|0;wa=RDa(ua,b,c)|0;if((wa|0)==(ua|0)){eb=a;break}ua=c+4|0;qa=k[ua>>2]|0;if(((qa-(k[c>>2]|0)|0)/24|0)>>>0<2){eb=a;break}eEa(l,qa+-24|0);qa=k[ua>>2]|0;ra=qa+-24|0;oa=qa;while(1){if((oa|0)==(ra|0))break;Ba=oa+-24|0;k[ua>>2]=Ba;CDa(Ba);oa=k[ua>>2]|0}eEa(m,qa+-48|0);oa=k[ua>>2]|0;ra=oa+-24|0;do if(i[ra>>0]&1){ta=oa+-16|0;i[k[ta>>2]>>0]=0;Ba=oa+-20|0;k[Ba>>2]=0;sa=i[ra>>0]|0;if(!(sa&1)){nb=sa;ob=10}else{sa=k[ra>>2]|0;nb=sa&255;ob=(sa&-2)+-1|0}if(!(nb&1)){sa=(nb&255)>>>1;if((nb&255)<22){pb=1;qb=10;rb=sa}else{pb=1;qb=(sa+16&240)+-1|0;rb=sa}}else{pb=0;qb=10;rb=0}if((qb|0)!=(ob|0)){if((qb|0)==10){sa=ra+1|0;pa=k[ta>>2]|0;if(pb){Dyb(sa|0,pa|0,((nb&255)>>>1)+1|0)|0;yYa(pa)}else{i[sa>>0]=i[pa>>0]|0;yYa(pa)}i[ra>>0]=rb<<1;break}pa=qb+1|0;sa=xYa(pa)|0;if(qb>>>0<=ob>>>0&(sa|0)==0)break;if(pb)Dyb(sa|0,ra+1|0,((nb&255)>>>1)+1|0)|0;else{Ha=k[ta>>2]|0;i[sa>>0]=i[Ha>>0]|0;yYa(Ha)}k[ra>>2]=pa|1;k[Ba>>2]=rb;k[ta>>2]=sa}}else{i[ra+1>>0]=0;i[ra>>0]=0}while(0);k[ra>>2]=k[l>>2];k[ra+4>>2]=k[l+4>>2];k[ra+8>>2]=k[l+8>>2];oa=0;while(1){if((oa|0)==3)break;k[l+(oa<<2)>>2]=0;oa=oa+1|0}oa=l+12|0;ra=i[oa>>0]|0;qa=(ra&1)==0;sa=l+16|0;ta=qa?(ra&255)>>>1:k[sa>>2]|0;ra=l+20|0;Ba=oa+1|0;x=0;fb(412,n|0,(qa?Ba:k[ra>>2]|0)|0,(ta>>>0<2?ta:2)|0);ta=x;x=0;if(!(ta&1)){ta=i[n>>0]|0;qa=(ta&1)==0;pa=qa?(ta&255)>>>1:k[n+4>>2]|0;ta=pa>>>0>2;Ha=ZLa(qa?n+1|0:k[n+8>>2]|0,300092,ta?2:pa)|0;NDa(n);if(!(((Ha|0)==0?(pa>>>0<2?-1:ta&1):Ha)|0))aEa(oa);Ha=k[ua>>2]|0;ta=Ha+-12|0;x=0;xa(932,s|0,m|0);pa=x;x=0;if(!(pa&1)){x=0;pa=Fa(147,s|0,0,300092)|0;qa=x;x=0;if(qa&1){qa=Hc()|0;sb=qa;tb=M}else{k[q>>2]=k[pa>>2];k[q+4>>2]=k[pa+4>>2];k[q+8>>2]=k[pa+8>>2];qa=0;while(1){if((qa|0)==3)break;k[pa+(qa<<2)>>2]=0;qa=qa+1|0}x=0;qa=Ta(630,q|0,316824)|0;pa=x;x=0;do if(pa&1){ua=Hc()|0;ub=ua;vb=M}else{k[p>>2]=k[qa>>2];k[p+4>>2]=k[qa+4>>2];k[p+8>>2]=k[qa+8>>2];ua=0;while(1){if((ua|0)==3)break;k[qa+(ua<<2)>>2]=0;ua=ua+1|0}ua=i[oa>>0]|0;Qa=(ua&1)==0;x=0;Aa=Fa(146,p|0,(Qa?Ba:k[ra>>2]|0)|0,(Qa?(ua&255)>>>1:k[sa>>2]|0)|0)|0;ua=x;x=0;if(ua&1){ua=Hc()|0;Qa=M;NDa(p);ub=ua;vb=Qa;break};k[o>>2]=k[Aa>>2];k[o+4>>2]=k[Aa+4>>2];k[o+8>>2]=k[Aa+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[Aa+(Qa<<2)>>2]=0;Qa=Qa+1|0}do if(!(i[ta>>0]&1)){i[ta+1>>0]=0;i[ta>>0]=0}else{Qa=Ha+-4|0;i[k[Qa>>2]>>0]=0;Aa=Ha+-8|0;k[Aa>>2]=0;ua=i[ta>>0]|0;if(!(ua&1)){wb=ua;xb=10}else{ua=k[ta>>2]|0;wb=ua&255;xb=(ua&-2)+-1|0}do if(!(wb&1)){ua=(wb&255)>>>1;if((wb&255)<22){yb=1;zb=10;Ab=ua;break}yb=1;zb=(ua+16&240)+-1|0;Ab=ua}else{yb=0;zb=10;Ab=0}while(0);if((zb|0)==(xb|0))break;if((zb|0)==10){ua=ta+1|0;Ga=k[Qa>>2]|0;if(yb){Dyb(ua|0,Ga|0,((wb&255)>>>1)+1|0)|0;yYa(Ga)}else{i[ua>>0]=i[Ga>>0]|0;yYa(Ga)}i[ta>>0]=Ab<<1;break}Ga=zb+1|0;ua=xYa(Ga)|0;if(zb>>>0<=xb>>>0&(ua|0)==0)break;if(yb)Dyb(ua|0,ta+1|0,((wb&255)>>>1)+1|0)|0;else{Ka=k[Qa>>2]|0;i[ua>>0]=i[Ka>>0]|0;yYa(Ka)}k[ta>>2]=Ga|1;k[Aa>>2]=Ab;k[Qa>>2]=ua}while(0);k[ta>>2]=k[o>>2];k[ta+4>>2]=k[o+4>>2];k[ta+8>>2]=k[o+8>>2];ua=0;while(1){if((ua|0)==3)break;k[o+(ua<<2)>>2]=0;ua=ua+1|0}NDa(o);NDa(p);NDa(q);NDa(s);CDa(m);CDa(l);eb=wa;break e}while(0);NDa(q);sb=ub;tb=vb}NDa(s);Bb=sb;Cb=tb}else Ya=127}else Ya=127;if((Ya|0)==127){wa=Hc()|0;Bb=wa;Cb=M}CDa(m);CDa(l);lb=Cb;mb=Bb}Sc(mb|0)}else eb=a;while(0);if((eb|0)==(a|0)){cb=a;break a}wa=k[c+4>>2]|0;if((k[c>>2]|0)==(wa|0)){cb=a;break a}ta=c+16|0;k[v>>2]=k[c+12>>2];gEa(u,wa+-24|0,v);wa=c+20|0;Ha=k[wa>>2]|0;sa=k[c+24>>2]|0;ra=sa;if(Ha>>>0>>0){k[Ha+12>>2]=k[u+12>>2];k[Ha>>2]=k[u>>2];sa=u+4|0;k[Ha+4>>2]=k[sa>>2];Ba=u+8|0;k[Ha+8>>2]=k[Ba>>2];k[Ba>>2]=0;k[sa>>2]=0;k[u>>2]=0;k[wa>>2]=(k[wa>>2]|0)+16}else{wa=k[ta>>2]|0;sa=Ha-wa|0;Ha=sa>>4;Ba=Ha+1|0;if((sa|0)<-16){x=0;va(1473,ta|0);x=0;sa=Hc()|0;oa=M;DDa(u);Db=sa;Eb=oa;break d}oa=ra-wa|0;if(oa>>4>>>0<1073741823){wa=oa>>3;Fb=wa>>>0>>0?Ba:wa}else Fb=2147483647;TDa(n,Fb,Ha,c+28|0);Ha=n+8|0;wa=k[Ha>>2]|0;k[wa+12>>2]=k[u+12>>2];k[wa>>2]=k[u>>2];Ba=u+4|0;k[wa+4>>2]=k[Ba>>2];oa=u+8|0;k[wa+8>>2]=k[oa>>2];k[oa>>2]=0;k[Ba>>2]=0;k[u>>2]=0;k[Ha>>2]=wa+16;UDa(ta,n);VDa(n)}DDa(u);cb=eb;break a;break}case 67:{ta=a+1|0;wa=RDa(ta,b,c)|0;if((wa|0)==(ta|0)){cb=a;break a}ta=c+4|0;Ha=k[ta>>2]|0;if((k[c>>2]|0)==(Ha|0)){cb=a;break a}QDa(Ha+-24|0,300099)|0;Ha=c+16|0;Ba=(k[ta>>2]|0)+-24|0;k[y>>2]=k[c+12>>2];gEa(w,Ba,y);Ba=c+20|0;ta=k[Ba>>2]|0;oa=k[c+24>>2]|0;ra=oa;if(ta>>>0>>0){k[ta+12>>2]=k[w+12>>2];k[ta>>2]=k[w>>2];oa=w+4|0;k[ta+4>>2]=k[oa>>2];sa=w+8|0;k[ta+8>>2]=k[sa>>2];k[sa>>2]=0;k[oa>>2]=0;k[w>>2]=0;k[Ba>>2]=(k[Ba>>2]|0)+16}else{Ba=k[Ha>>2]|0;oa=ta-Ba|0;ta=oa>>4;sa=ta+1|0;if((oa|0)<-16){x=0;va(1473,Ha|0);x=0;oa=Hc()|0;qa=M;DDa(w);Db=oa;Eb=qa;break d}qa=ra-Ba|0;if(qa>>4>>>0<1073741823){Ba=qa>>3;Gb=Ba>>>0>>0?sa:Ba}else Gb=2147483647;TDa(m,Gb,ta,c+28|0);ta=m+8|0;Ba=k[ta>>2]|0;k[Ba+12>>2]=k[w+12>>2];k[Ba>>2]=k[w>>2];sa=w+4|0;k[Ba+4>>2]=k[sa>>2];qa=w+8|0;k[Ba+8>>2]=k[qa>>2];k[qa>>2]=0;k[sa>>2]=0;k[w>>2]=0;k[ta>>2]=Ba+16;UDa(Ha,m);VDa(m)}DDa(w);cb=wa;break a;break}case 70:{do if(Ca<<24>>24==70){wa=a+1|0;if((wa|0)!=(b|0)){if((i[wa>>0]|0)==89){Ha=a+2|0;if((Ha|0)==(b|0))break;else Hb=Ha}else Hb=wa;wa=RDa(Hb,b,c)|0;if((wa|0)!=(Hb|0)){$Da(e,300108,1);Ha=c+4|0;Ba=e+4|0;ta=f+8|0;sa=f+1|0;qa=f+4|0;ra=0;oa=wa;f:while(1){wa=oa;g:while(1){if((wa|0)==(b|0)){Ya=198;break f}switch(i[wa>>0]|0){case 69:{Ib=ra;Jb=wa;Ya=206;break f;break}case 118:{wa=wa+1|0;continue g;break}case 82:{pa=wa+1|0;if((pa|0)!=(b|0)?(i[pa>>0]|0)==69:0){ra=1;oa=pa;continue f}break}case 79:{pa=wa+1|0;if((pa|0)!=(b|0)?(i[pa>>0]|0)==69:0){ra=2;oa=pa;continue f}break}default:{}}pa=((k[Ha>>2]|0)-(k[c>>2]|0)|0)/24|0;x=0;ua=Fa(148,wa|0,b|0,c|0)|0;Ga=x;x=0;if(Ga&1){Ya=202;break f}Ga=((k[Ha>>2]|0)-(k[c>>2]|0)|0)/24|0;if((ua|0)==(wa|0)|(ua|0)==(b|0)){Ya=232;break f}else Kb=pa;while(1){if(Kb>>>0>=Ga>>>0){Lb=pa;break}Ka=i[e>>0]|0;if(((Ka&1)==0?(Ka&255)>>>1:k[Ba>>2]|0)>>>0>1?(x=0,Ta(630,e|0,300110)|0,Ka=x,x=0,Ka&1):0){Ya=201;break f}x=0;xa(932,f|0,(k[c>>2]|0)+(Kb*24|0)|0);Ka=x;x=0;if(Ka&1){Ya=201;break f}Ka=i[f>>0]|0;za=(Ka&1)==0;x=0;Fa(146,e|0,(za?sa:k[ta>>2]|0)|0,(za?(Ka&255)>>>1:k[qa>>2]|0)|0)|0;Ka=x;x=0;if(Ka&1){Ya=221;break f}NDa(f);Kb=Kb+1|0}while(1){if(Lb>>>0>=Ga>>>0){wa=ua;continue g}pa=k[Ha>>2]|0;Qa=pa+-24|0;Aa=pa;while(1){if((Aa|0)==(Qa|0))break;pa=Aa+-24|0;k[Ha>>2]=pa;CDa(pa);Aa=k[Ha>>2]|0}Lb=Lb+1|0}}}h:do if((Ya|0)==198){qa=k[Ha>>2]|0;ta=qa+-24|0;sa=qa;while(1){if((sa|0)==(ta|0)){Ya=232;break h}qa=sa+-24|0;k[Ha>>2]=qa;CDa(qa);sa=k[Ha>>2]|0}}else if((Ya|0)==201){sa=Hc()|0;Mb=sa;Nb=M;Ya=204}else if((Ya|0)==202){sa=Hc()|0;Mb=sa;Nb=M;Ya=204}else if((Ya|0)==206){sa=Jb+1|0;x=0;Ta(630,e|0,300015)|0;ta=x;x=0;i:do if(!(ta&1)){switch(Ib|0){case 1:{x=0;Ta(630,e|0,300113)|0;qa=x;x=0;if(qa&1)break i;break}case 2:{x=0;Ta(630,e|0,300116)|0;qa=x;x=0;if(qa&1)break i;break}default:{}}qa=k[Ha>>2]|0;if((k[c>>2]|0)==(qa|0)){Ya=232;break h}x=0;Ta(630,qa+-24|0,324196)|0;qa=x;x=0;if(!(qa&1)?(qa=i[e>>0]|0,oa=(qa&1)==0,x=0,db(78,(k[Ha>>2]|0)+-12|0,0,(oa?e+1|0:k[e+8>>2]|0)|0,(oa?(qa&255)>>>1:k[Ba>>2]|0)|0)|0,qa=x,x=0,!(qa&1)):0){NDa(e);if((sa|0)==(a|0)){cb=a;break a}qa=k[Ha>>2]|0;if((k[c>>2]|0)==(qa|0)){cb=a;break a}oa=c+16|0;k[A>>2]=k[c+12>>2];gEa(z,qa+-24|0,A);qa=c+20|0;ra=k[qa>>2]|0;wa=k[c+24>>2]|0;ua=wa;if(ra>>>0>>0){k[ra+12>>2]=k[z+12>>2];k[ra>>2]=k[z>>2];wa=z+4|0;k[ra+4>>2]=k[wa>>2];Ga=z+8|0;k[ra+8>>2]=k[Ga>>2];k[Ga>>2]=0;k[wa>>2]=0;k[z>>2]=0;k[qa>>2]=(k[qa>>2]|0)+16}else{qa=k[oa>>2]|0;wa=ra-qa|0;ra=wa>>4;Ga=ra+1|0;if((wa|0)<-16){x=0;va(1473,oa|0);x=0;wa=Hc()|0;Aa=M;DDa(z);Db=wa;Eb=Aa;break d}Aa=ua-qa|0;if(Aa>>4>>>0<1073741823){qa=Aa>>3;Ob=qa>>>0>>0?Ga:qa}else Ob=2147483647;TDa(l,Ob,ra,c+28|0);ra=l+8|0;qa=k[ra>>2]|0;k[qa+12>>2]=k[z+12>>2];k[qa>>2]=k[z>>2];Ga=z+4|0;k[qa+4>>2]=k[Ga>>2];Aa=z+8|0;k[qa+8>>2]=k[Aa>>2];k[Aa>>2]=0;k[Ga>>2]=0;k[z>>2]=0;k[ra>>2]=qa+16;UDa(oa,l);VDa(l)}DDa(z);cb=sa;break a}}while(0);sa=Hc()|0;Mb=sa;Nb=M;Ya=204}else if((Ya|0)==221){sa=Hc()|0;ta=M;NDa(f);Pb=ta;Qb=sa}while(0);if((Ya|0)==204){Pb=Nb;Qb=Mb}else if((Ya|0)==232){NDa(e);break}NDa(e);Sc(Qb|0)}}cb=a;break a}while(0);cb=a;break a;break}case 71:{Ha=a+1|0;Ba=RDa(Ha,b,c)|0;if((Ba|0)==(Ha|0)){cb=a;break a}Ha=c+4|0;sa=k[Ha>>2]|0;if((k[c>>2]|0)==(sa|0)){cb=a;break a}QDa(sa+-24|0,300120)|0;sa=c+16|0;ta=(k[Ha>>2]|0)+-24|0;k[C>>2]=k[c+12>>2];gEa(B,ta,C);ta=c+20|0;Ha=k[ta>>2]|0;oa=k[c+24>>2]|0;qa=oa;if(Ha>>>0>>0){k[Ha+12>>2]=k[B+12>>2];k[Ha>>2]=k[B>>2];oa=B+4|0;k[Ha+4>>2]=k[oa>>2];ra=B+8|0;k[Ha+8>>2]=k[ra>>2];k[ra>>2]=0;k[oa>>2]=0;k[B>>2]=0;k[ta>>2]=(k[ta>>2]|0)+16}else{ta=k[sa>>2]|0;oa=Ha-ta|0;Ha=oa>>4;ra=Ha+1|0;if((oa|0)<-16){x=0;va(1473,sa|0);x=0;oa=Hc()|0;Ga=M;DDa(B);Db=oa;Eb=Ga;break d}Ga=qa-ta|0;if(Ga>>4>>>0<1073741823){ta=Ga>>3;Rb=ta>>>0>>0?ra:ta}else Rb=2147483647;TDa(j,Rb,Ha,c+28|0);Ha=j+8|0;ta=k[Ha>>2]|0;k[ta+12>>2]=k[B+12>>2];k[ta>>2]=k[B>>2];ra=B+4|0;k[ta+4>>2]=k[ra>>2];Ga=B+8|0;k[ta+8>>2]=k[Ga>>2];k[Ga>>2]=0;k[ra>>2]=0;k[B>>2]=0;k[Ha>>2]=ta+16;UDa(sa,j);VDa(j)}DDa(B);cb=Ba;break a;break}case 77:{do if(((Ca<<24>>24==77?(Ba=a+1|0,sa=RDa(Ba,b,c)|0,(sa|0)!=(Ba|0)):0)?(Ba=RDa(sa,b,c)|0,(Ba|0)!=(sa|0)):0)?(sa=c+4|0,ta=k[sa>>2]|0,((ta-(k[c>>2]|0)|0)/24|0)>>>0>=2):0){eEa(e,ta+-24|0);ta=k[sa>>2]|0;Ha=ta+-24|0;ra=ta;while(1){if((ra|0)==(Ha|0))break;Ga=ra+-24|0;k[sa>>2]=Ga;CDa(Ga);ra=k[sa>>2]|0}eEa(f,ta+-48|0);ra=e+12|0;Ha=k[sa>>2]|0;Ga=Ha+-24|0;x=0;j:do if((i[((i[ra>>0]&1)==0?ra+1|0:k[e+20>>2]|0)>>0]|0)==40){qa=QDa(e,300108)|0;oa=x;x=0;if(oa&1)Ya=324;else{k[j>>2]=k[qa>>2];k[j+4>>2]=k[qa+4>>2];k[j+8>>2]=k[qa+8>>2];oa=0;while(1){if((oa|0)==3)break;k[qa+(oa<<2)>>2]=0;oa=oa+1|0}x=0;xa(932,l|0,f|0);oa=x;x=0;if(oa&1){oa=Hc()|0;Sb=M;Tb=oa}else{oa=i[l>>0]|0;qa=(oa&1)==0;x=0;Aa=Fa(146,j|0,(qa?l+1|0:k[l+8>>2]|0)|0,(qa?(oa&255)>>>1:k[l+4>>2]|0)|0)|0;oa=x;x=0;do if(oa&1){qa=Hc()|0;Ub=M;Vb=qa}else{k[h>>2]=k[Aa>>2];k[h+4>>2]=k[Aa+4>>2];k[h+8>>2]=k[Aa+8>>2];qa=0;while(1){if((qa|0)==3)break;k[Aa+(qa<<2)>>2]=0;qa=qa+1|0}x=0;qa=Ta(630,h|0,300131)|0;ua=x;x=0;if(ua&1){ua=Hc()|0;wa=M;NDa(h);Ub=wa;Vb=ua;break};k[g>>2]=k[qa>>2];k[g+4>>2]=k[qa+4>>2];k[g+8>>2]=k[qa+8>>2];ua=0;while(1){if((ua|0)==3)break;k[qa+(ua<<2)>>2]=0;ua=ua+1|0}do if(!(i[Ga>>0]&1)){i[Ga+1>>0]=0;i[Ga>>0]=0}else{ua=Ha+-16|0;i[k[ua>>2]>>0]=0;qa=Ha+-20|0;k[qa>>2]=0;wa=i[Ga>>0]|0;if(!(wa&1)){Wb=wa;Xb=10}else{wa=k[Ga>>2]|0;Wb=wa&255;Xb=(wa&-2)+-1|0}do if(!(Wb&1)){wa=(Wb&255)>>>1;if((Wb&255)<22){Yb=1;Zb=10;_b=wa;break}Yb=1;Zb=(wa+16&240)+-1|0;_b=wa}else{Yb=0;Zb=10;_b=0}while(0);if((Zb|0)==(Xb|0))break;if((Zb|0)==10){wa=Ga+1|0;Qa=k[ua>>2]|0;if(Yb){Dyb(wa|0,Qa|0,((Wb&255)>>>1)+1|0)|0;yYa(Qa)}else{i[wa>>0]=i[Qa>>0]|0;yYa(Qa)}i[Ga>>0]=_b<<1;break}Qa=Zb+1|0;wa=xYa(Qa)|0;if(Zb>>>0<=Xb>>>0&(wa|0)==0)break;if(Yb)Dyb(wa|0,Ga+1|0,((Wb&255)>>>1)+1|0)|0;else{pa=k[ua>>2]|0;i[wa>>0]=i[pa>>0]|0;yYa(pa)}k[Ga>>2]=Qa|1;k[qa>>2]=_b;k[ua>>2]=wa}while(0);k[Ga>>2]=k[g>>2];k[Ga+4>>2]=k[g+4>>2];k[Ga+8>>2]=k[g+8>>2];wa=0;while(1){if((wa|0)==3)break;k[g+(wa<<2)>>2]=0;wa=wa+1|0}NDa(g);NDa(h);NDa(l);NDa(j);wa=k[sa>>2]|0;x=0;Qa=Fa(147,ra|0,0,300015)|0;pa=x;x=0;if(pa&1){Ya=324;break j};k[m>>2]=k[Qa>>2];k[m+4>>2]=k[Qa+4>>2];k[m+8>>2]=k[Qa+8>>2];pa=0;while(1){if((pa|0)==3)break;k[Qa+(pa<<2)>>2]=0;pa=pa+1|0}pa=wa+-12|0;do if(!(i[pa>>0]&1)){i[pa+1>>0]=0;i[pa>>0]=0}else{Qa=wa+-4|0;i[k[Qa>>2]>>0]=0;Ka=wa+-8|0;k[Ka>>2]=0;za=i[pa>>0]|0;if(!(za&1)){$b=za;ac=10}else{za=k[pa>>2]|0;$b=za&255;ac=(za&-2)+-1|0}do if(!($b&1)){za=($b&255)>>>1;if(($b&255)<22){bc=10;cc=za;dc=1;break}bc=(za+16&240)+-1|0;cc=za;dc=1}else{bc=10;cc=0;dc=0}while(0);if((bc|0)==(ac|0))break;if((bc|0)==10){ua=pa+1|0;qa=k[Qa>>2]|0;if(dc){Dyb(ua|0,qa|0,(($b&255)>>>1)+1|0)|0;yYa(qa)}else{i[ua>>0]=i[qa>>0]|0;yYa(qa)}i[pa>>0]=cc<<1;break}qa=bc+1|0;ua=xYa(qa)|0;if(bc>>>0<=ac>>>0&(ua|0)==0)break;if(dc)Dyb(ua|0,pa+1|0,(($b&255)>>>1)+1|0)|0;else{za=k[Qa>>2]|0;i[ua>>0]=i[za>>0]|0;yYa(za)}k[pa>>2]=qa|1;k[Ka>>2]=cc;k[Qa>>2]=ua}while(0);k[pa>>2]=k[m>>2];k[pa+4>>2]=k[m+4>>2];k[pa+8>>2]=k[m+8>>2];wa=0;while(1){if((wa|0)==3)break;k[m+(wa<<2)>>2]=0;wa=wa+1|0}NDa(m);Ya=390;break j}while(0);NDa(l);Sb=Ub;Tb=Vb}NDa(j);ec=Sb;fc=Tb}}else{Aa=QDa(e,324196)|0;oa=x;x=0;if(oa&1)Ya=324;else{k[p>>2]=k[Aa>>2];k[p+4>>2]=k[Aa+4>>2];k[p+8>>2]=k[Aa+8>>2];oa=0;while(1){if((oa|0)==3)break;k[Aa+(oa<<2)>>2]=0;oa=oa+1|0}x=0;xa(932,q|0,f|0);oa=x;x=0;if(oa&1){oa=Hc()|0;gc=M;hc=oa}else{oa=i[q>>0]|0;Aa=(oa&1)==0;x=0;wa=Fa(146,p|0,(Aa?q+1|0:k[q+8>>2]|0)|0,(Aa?(oa&255)>>>1:k[q+4>>2]|0)|0)|0;oa=x;x=0;do if(oa&1){Aa=Hc()|0;ic=M;jc=Aa}else{k[o>>2]=k[wa>>2];k[o+4>>2]=k[wa+4>>2];k[o+8>>2]=k[wa+8>>2];Aa=0;while(1){if((Aa|0)==3)break;k[wa+(Aa<<2)>>2]=0;Aa=Aa+1|0}x=0;Aa=Ta(630,o|0,300131)|0;pa=x;x=0;if(pa&1){pa=Hc()|0;ua=M;NDa(o);ic=ua;jc=pa;break};k[n>>2]=k[Aa>>2];k[n+4>>2]=k[Aa+4>>2];k[n+8>>2]=k[Aa+8>>2];pa=0;while(1){if((pa|0)==3)break;k[Aa+(pa<<2)>>2]=0;pa=pa+1|0}do if(!(i[Ga>>0]&1)){i[Ga+1>>0]=0;i[Ga>>0]=0}else{pa=Ha+-16|0;i[k[pa>>2]>>0]=0;Aa=Ha+-20|0;k[Aa>>2]=0;ua=i[Ga>>0]|0;if(!(ua&1)){kc=ua;lc=10}else{ua=k[Ga>>2]|0;kc=ua&255;lc=(ua&-2)+-1|0}do if(!(kc&1)){ua=(kc&255)>>>1;if((kc&255)<22){mc=10;nc=ua;oc=1;break}mc=(ua+16&240)+-1|0;nc=ua;oc=1}else{mc=10;nc=0;oc=0}while(0);if((mc|0)==(lc|0))break;if((mc|0)==10){Qa=Ga+1|0;Ka=k[pa>>2]|0;if(oc){Dyb(Qa|0,Ka|0,((kc&255)>>>1)+1|0)|0;yYa(Ka)}else{i[Qa>>0]=i[Ka>>0]|0;yYa(Ka)}i[Ga>>0]=nc<<1;break}Ka=mc+1|0;Qa=xYa(Ka)|0;if(mc>>>0<=lc>>>0&(Qa|0)==0)break;if(oc)Dyb(Qa|0,Ga+1|0,((kc&255)>>>1)+1|0)|0;else{ua=k[pa>>2]|0;i[Qa>>0]=i[ua>>0]|0;yYa(ua)}k[Ga>>2]=Ka|1;k[Aa>>2]=nc;k[pa>>2]=Qa}while(0);k[Ga>>2]=k[n>>2];k[Ga+4>>2]=k[n+4>>2];k[Ga+8>>2]=k[n+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[n+(Qa<<2)>>2]=0;Qa=Qa+1|0}NDa(n);NDa(o);NDa(q);NDa(p);Qa=k[sa>>2]|0;Ka=Qa+-12|0;do if(!(i[Ka>>0]&1)){i[Ka+1>>0]=0;i[Ka>>0]=0}else{ua=Qa+-4|0;i[k[ua>>2]>>0]=0;qa=Qa+-8|0;k[qa>>2]=0;za=i[Ka>>0]|0;if(!(za&1)){pc=za;qc=10}else{za=k[Ka>>2]|0;pc=za&255;qc=(za&-2)+-1|0}do if(!(pc&1)){za=(pc&255)>>>1;if((pc&255)<22){rc=10;sc=za;tc=1;break}rc=(za+16&240)+-1|0;sc=za;tc=1}else{rc=10;sc=0;tc=0}while(0);if((rc|0)==(qc|0))break;if((rc|0)==10){pa=Ka+1|0;Aa=k[ua>>2]|0;if(tc){Dyb(pa|0,Aa|0,((pc&255)>>>1)+1|0)|0;yYa(Aa)}else{i[pa>>0]=i[Aa>>0]|0;yYa(Aa)}i[Ka>>0]=sc<<1;break}Aa=rc+1|0;pa=xYa(Aa)|0;if(rc>>>0<=qc>>>0&(pa|0)==0)break;if(tc)Dyb(pa|0,Ka+1|0,((pc&255)>>>1)+1|0)|0;else{za=k[ua>>2]|0;i[pa>>0]=i[za>>0]|0;yYa(za)}k[Ka>>2]=Aa|1;k[qa>>2]=sc;k[ua>>2]=pa}while(0);k[Ka>>2]=k[ra>>2];k[Ka+4>>2]=k[ra+4>>2];k[Ka+8>>2]=k[ra+8>>2];Qa=0;while(1){if((Qa|0)==3){Ya=390;break j}k[ra+(Qa<<2)>>2]=0;Qa=Qa+1|0}}while(0);NDa(q);gc=ic;hc=jc}NDa(p);ec=gc;fc=hc}}while(0);if((Ya|0)==324){ra=Hc()|0;ec=M;fc=ra}else if((Ya|0)==390){CDa(f);CDa(e);uc=Ba;break}CDa(f);CDa(e);Sc(fc|0)}else uc=a;while(0);if((uc|0)==(a|0)){cb=a;break a}ra=k[c+4>>2]|0;if((k[c>>2]|0)==(ra|0)){cb=a;break a}sa=c+16|0;k[E>>2]=k[c+12>>2];gEa(D,ra+-24|0,E);ra=c+20|0;Ga=k[ra>>2]|0;Ha=k[c+24>>2]|0;ta=Ha;if(Ga>>>0>>0){k[Ga+12>>2]=k[D+12>>2];k[Ga>>2]=k[D>>2];Ha=D+4|0;k[Ga+4>>2]=k[Ha>>2];wa=D+8|0;k[Ga+8>>2]=k[wa>>2];k[wa>>2]=0;k[Ha>>2]=0;k[D>>2]=0;k[ra>>2]=(k[ra>>2]|0)+16}else{ra=k[sa>>2]|0;Ha=Ga-ra|0;Ga=Ha>>4;wa=Ga+1|0;if((Ha|0)<-16){x=0;va(1473,sa|0);x=0;Ha=Hc()|0;oa=M;DDa(D);Db=Ha;Eb=oa;break d}oa=ta-ra|0;if(oa>>4>>>0<1073741823){ra=oa>>3;vc=ra>>>0>>0?wa:ra}else vc=2147483647;TDa(h,vc,Ga,c+28|0);Ga=h+8|0;ra=k[Ga>>2]|0;k[ra+12>>2]=k[D+12>>2];k[ra>>2]=k[D>>2];wa=D+4|0;k[ra+4>>2]=k[wa>>2];oa=D+8|0;k[ra+8>>2]=k[oa>>2];k[oa>>2]=0;k[wa>>2]=0;k[D>>2]=0;k[Ga>>2]=ra+16;UDa(sa,h);VDa(h)}DDa(D);cb=uc;break a;break}case 79:{sa=c+4|0;ra=((k[sa>>2]|0)-(k[c>>2]|0)|0)/24|0;Ga=a+1|0;wa=RDa(Ga,b,c)|0;oa=((k[sa>>2]|0)-(k[c>>2]|0)|0)/24|0;if((wa|0)==(Ga|0)){cb=a;break a}Ga=c+16|0;sa=k[c+12>>2]|0;ta=c+20|0;Ha=k[ta>>2]|0;Qa=k[c+24>>2]|0;Ka=Qa;if(Ha>>>0>>0){k[Ha>>2]=0;k[Ha+4>>2]=0;k[Ha+8>>2]=0;k[Ha+12>>2]=sa;k[ta>>2]=(k[ta>>2]|0)+16}else{Qa=k[Ga>>2]|0;pa=Ha-Qa|0;Ha=pa>>4;Aa=Ha+1|0;if((pa|0)<-16)HBa(Ga);pa=Ka-Qa|0;if(pa>>4>>>0<1073741823){Qa=pa>>3;wc=Qa>>>0>>0?Aa:Qa}else wc=2147483647;TDa(e,wc,Ha,c+28|0);Ha=e+8|0;Qa=k[Ha>>2]|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=sa;k[Ha>>2]=Qa+16;UDa(Ga,e);VDa(e)}Ga=F+4|0;Qa=F+8|0;Ha=F+1|0;sa=e+8|0;Aa=ra;while(1){if(Aa>>>0>=oa>>>0){cb=wa;break a}ra=k[c>>2]|0;pa=ra+(Aa*24|0)+12|0;Ka=i[pa>>0]|0;za=(Ka&1)==0;Va=za?(Ka&255)>>>1:k[ra+(Aa*24|0)+16>>2]|0;$Da(F,za?pa+1|0:k[ra+(Aa*24|0)+20>>2]|0,Va>>>0<2?Va:2);Va=i[F>>0]|0;ra=(Va&1)==0;pa=ra?(Va&255)>>>1:k[Ga>>2]|0;Va=pa>>>0>2;za=ZLa(ra?Ha:k[Qa>>2]|0,300092,Va?2:pa)|0;NDa(F);ra=k[c>>2]|0;if(((za|0)==0?(pa>>>0<2?-1:Va&1):za)|0){za=ra+(Aa*24|0)+12|0;if(!(i[za>>0]&1))xc=za+1|0;else xc=k[ra+(Aa*24|0)+20>>2]|0;if((i[xc>>0]|0)==40){QDa(ra+(Aa*24|0)|0,300108)|0;PDa((k[c>>2]|0)+(Aa*24|0)+12|0,0,300015)|0}}else{QDa(ra+(Aa*24|0)|0,300012)|0;PDa((k[c>>2]|0)+(Aa*24|0)+12|0,0,300015)|0}QDa((k[c>>2]|0)+(Aa*24|0)|0,300135)|0;ra=k[ta>>2]|0;za=ra+-16|0;Va=k[c>>2]|0;pa=Va+(Aa*24|0)|0;Ka=ra+-12|0;Ra=k[Ka>>2]|0;Wa=k[ra+-8>>2]|0;Ua=Wa;if((Ra|0)==(Wa|0)){Wa=k[za>>2]|0;Sa=Ra-Wa|0;yc=(Sa|0)/24|0;zc=yc+1|0;if((Sa|0)<-24){Ac=za;Ya=424;break}Sa=(Ua-Wa|0)/24|0;if(Sa>>>0<1073741823){Wa=Sa<<1;Bc=Wa>>>0>>0?zc:Wa}else Bc=2147483647;XDa(e,Bc,yc,ra+-4|0);ra=k[sa>>2]|0;x=0;xa(934,ra|0,pa|0);yc=x;x=0;if(yc&1){Ya=430;break}x=0;xa(934,ra+12|0,Va+(Aa*24|0)+12|0);yc=x;x=0;if(yc&1){Cc=ra;Ya=429;break}k[sa>>2]=ra+24;ZDa(za,e);YDa(e)}else{WDa(Ra,pa);x=0;xa(934,Ra+12|0,Va+(Aa*24|0)+12|0);Va=x;x=0;if(Va&1){Dc=Ra;Ya=421;break}k[Ka>>2]=(k[Ka>>2]|0)+24}Aa=Aa+1|0}if((Ya|0)==421){Aa=Hc()|0;NDa(Dc);Sc(Aa|0)}else if((Ya|0)==424)HBa(Ac);else if((Ya|0)==429){Aa=Hc()|0;sa=M;NDa(Cc);Ec=sa;Fc=Aa}else if((Ya|0)==430){Aa=Hc()|0;Ec=M;Fc=Aa}YDa(e);Sc(Fc|0);break}case 80:{Aa=c+4|0;sa=((k[Aa>>2]|0)-(k[c>>2]|0)|0)/24|0;ta=a+1|0;Qa=RDa(ta,b,c)|0;Ha=((k[Aa>>2]|0)-(k[c>>2]|0)|0)/24|0;if((Qa|0)==(ta|0)){cb=a;break a}Aa=c+16|0;Ga=k[c+12>>2]|0;wa=c+20|0;oa=k[wa>>2]|0;Ka=k[c+24>>2]|0;Ra=Ka;if(oa>>>0>>0){k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=Ga;k[wa>>2]=(k[wa>>2]|0)+16}else{Ka=k[Aa>>2]|0;Va=oa-Ka|0;oa=Va>>4;pa=oa+1|0;if((Va|0)<-16)HBa(Aa);Va=Ra-Ka|0;if(Va>>4>>>0<1073741823){Ka=Va>>3;Gc=Ka>>>0>>0?pa:Ka}else Gc=2147483647;TDa(e,Gc,oa,c+28|0);oa=e+8|0;Ka=k[oa>>2]|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=Ga;k[oa>>2]=Ka+16;UDa(Aa,e);VDa(e)}Aa=G+4|0;Ka=G+8|0;oa=G+1|0;Ga=H+4|0;pa=H+8|0;Va=H+1|0;Ra=e+8|0;za=sa;while(1){if(za>>>0>=Ha>>>0){cb=Qa;break a}sa=k[c>>2]|0;ra=sa+(za*24|0)+12|0;yc=i[ra>>0]|0;Wa=(yc&1)==0;zc=Wa?(yc&255)>>>1:k[sa+(za*24|0)+16>>2]|0;$Da(G,Wa?ra+1|0:k[sa+(za*24|0)+20>>2]|0,zc>>>0<2?zc:2);zc=i[G>>0]|0;sa=(zc&1)==0;ra=sa?(zc&255)>>>1:k[Aa>>2]|0;zc=ra>>>0>2;Wa=ZLa(sa?oa:k[Ka>>2]|0,300092,zc?2:ra)|0;NDa(G);sa=k[c>>2]|0;if(((Wa|0)==0?(ra>>>0<2?-1:zc&1):Wa)|0){Wa=sa+(za*24|0)+12|0;if(!(i[Wa>>0]&1))Ic=Wa+1|0;else Ic=k[sa+(za*24|0)+20>>2]|0;if((i[Ic>>0]|0)==40){QDa(sa+(za*24|0)|0,300108)|0;PDa((k[c>>2]|0)+(za*24|0)+12|0,0,300015)|0}}else{QDa(sa+(za*24|0)|0,300012)|0;PDa((k[c>>2]|0)+(za*24|0)+12|0,0,300015)|0}sa=k[c>>2]|0;Wa=sa+(za*24|0)|0;do if((i[ta>>0]|0)==85){zc=i[Wa>>0]|0;ra=(zc&1)==0;yc=ra?(zc&255)>>>1:k[sa+(za*24|0)+4>>2]|0;$Da(H,ra?Wa+1|0:k[sa+(za*24|0)+8>>2]|0,yc>>>0<12?yc:12);yc=i[H>>0]|0;ra=(yc&1)==0;zc=ra?(yc&255)>>>1:k[Ga>>2]|0;yc=zc>>>0>12;Sa=ZLa(ra?Va:k[pa>>2]|0,300138,yc?12:zc)|0;NDa(H);ra=k[c>>2]|0;Ua=ra+(za*24|0)|0;if(!(((Sa|0)==0?(zc>>>0<12?-1:yc&1):Sa)|0)){Sa=i[Ua>>0]|0;if(!(Sa&1)){yc=(Sa&255)>>>1;Jc=yc;Kc=yc>>>0<11?yc:11;Lc=10;Mc=Sa}else{Sa=k[ra+(za*24|0)+4>>2]|0;yc=k[Ua>>2]|0;Jc=Sa;Kc=Sa>>>0<11?Sa:11;Lc=(yc&-2)+-1|0;Mc=yc&255}if((Kc-Jc+Lc|0)>>>0<2){MDa(Ua,Lc,2-Kc+Jc-Lc|0,Jc,0,Kc,2,300151);break}if(!(Mc&1))Nc=Ua+1|0;else Nc=k[ra+(za*24|0)+8>>2]|0;do if((Kc|0)!=2){yc=Jc-Kc|0;if((Jc|0)==(Kc|0)){Oc=0;Pc=300151;Qc=2;Rc=Kc;Ya=470}else{if(Kc>>>0>2){i[Nc>>0]=105;i[Nc+1>>0]=100;Eyb(Nc+2|0,Nc+Kc|0,yc|0)|0;Tc=2;Uc=Kc;break}do if(Nc>>>0<300151>>>0&(Nc+Jc|0)>>>0>300151>>>0)if((Nc+Kc|0)>>>0>300151>>>0){Dyb(Nc|0,300151,Kc|0)|0;Vc=Kc;Wc=300153;Xc=2-Kc|0;Yc=0;break}else{Vc=0;Wc=300151+(2-Kc)|0;Xc=2;Yc=Kc;break}else{Vc=0;Wc=300151;Xc=2;Yc=Kc}while(0);Sa=Nc+Vc|0;Eyb(Sa+Xc|0,Sa+Yc|0,yc|0)|0;Oc=Vc;Pc=Wc;Qc=Xc;Rc=Yc;Ya=470}}else{Oc=0;Pc=300151;Qc=2;Rc=2;Ya=470}while(0);if((Ya|0)==470){Ya=0;Eyb(Nc+Oc|0,Pc|0,Qc|0)|0;Tc=Qc;Uc=Rc}Sa=Tc-Uc+Jc|0;if(!(i[Ua>>0]&1))i[Ua>>0]=Sa<<1;else k[ra+(za*24|0)+4>>2]=Sa;i[Nc+Sa>>0]=0}else{Zc=Ua;Ya=453}}else{Zc=Wa;Ya=453}while(0);if((Ya|0)==453){Ya=0;QDa(Zc,329972)|0}Wa=k[wa>>2]|0;sa=Wa+-16|0;Ba=k[c>>2]|0;Sa=Ba+(za*24|0)|0;zc=Wa+-12|0;_c=k[zc>>2]|0;$c=k[Wa+-8>>2]|0;ad=$c;if((_c|0)==($c|0)){$c=k[sa>>2]|0;bd=_c-$c|0;cd=(bd|0)/24|0;dd=cd+1|0;if((bd|0)<-24){ed=sa;Ya=481;break}bd=(ad-$c|0)/24|0;if(bd>>>0<1073741823){$c=bd<<1;fd=$c>>>0

      >>0?dd:$c}else fd=2147483647;XDa(e,fd,cd,Wa+-4|0);Wa=k[Ra>>2]|0;x=0;xa(934,Wa|0,Sa|0);cd=x;x=0;if(cd&1){Ya=487;break}x=0;xa(934,Wa+12|0,Ba+(za*24|0)+12|0);cd=x;x=0;if(cd&1){gd=Wa;Ya=486;break}k[Ra>>2]=Wa+24;ZDa(sa,e);YDa(e)}else{WDa(_c,Sa);x=0;xa(934,_c+12|0,Ba+(za*24|0)+12|0);Ba=x;x=0;if(Ba&1){hd=_c;Ya=478;break}k[zc>>2]=(k[zc>>2]|0)+24}za=za+1|0}if((Ya|0)==478){za=Hc()|0;NDa(hd);Sc(za|0)}else if((Ya|0)==481)HBa(ed);else if((Ya|0)==486){za=Hc()|0;Ra=M;NDa(gd);id=Ra;jd=za}else if((Ya|0)==487){za=Hc()|0;id=M;jd=za}YDa(e);Sc(jd|0);break}case 82:{za=c+4|0;Ra=((k[za>>2]|0)-(k[c>>2]|0)|0)/24|0;wa=a+1|0;pa=RDa(wa,b,c)|0;Va=((k[za>>2]|0)-(k[c>>2]|0)|0)/24|0;if((pa|0)==(wa|0)){cb=a;break a}wa=c+16|0;za=k[c+12>>2]|0;Ga=c+20|0;ta=k[Ga>>2]|0;Ka=k[c+24>>2]|0;oa=Ka;if(ta>>>0>>0){k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=za;k[Ga>>2]=(k[Ga>>2]|0)+16}else{Ka=k[wa>>2]|0;Aa=ta-Ka|0;ta=Aa>>4;Qa=ta+1|0;if((Aa|0)<-16)HBa(wa);Aa=oa-Ka|0;if(Aa>>4>>>0<1073741823){Ka=Aa>>3;kd=Ka>>>0>>0?Qa:Ka}else kd=2147483647;TDa(e,kd,ta,c+28|0);ta=e+8|0;Ka=k[ta>>2]|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=za;k[ta>>2]=Ka+16;UDa(wa,e);VDa(e)}wa=I+4|0;Ka=I+8|0;ta=I+1|0;za=e+8|0;Qa=Ra;while(1){if(Qa>>>0>=Va>>>0){cb=pa;break a}Ra=k[c>>2]|0;Aa=Ra+(Qa*24|0)+12|0;oa=i[Aa>>0]|0;Ha=(oa&1)==0;zc=Ha?(oa&255)>>>1:k[Ra+(Qa*24|0)+16>>2]|0;$Da(I,Ha?Aa+1|0:k[Ra+(Qa*24|0)+20>>2]|0,zc>>>0<2?zc:2);zc=i[I>>0]|0;Ra=(zc&1)==0;Aa=Ra?(zc&255)>>>1:k[wa>>2]|0;zc=Aa>>>0>2;Ha=ZLa(Ra?ta:k[Ka>>2]|0,300092,zc?2:Aa)|0;NDa(I);Ra=k[c>>2]|0;if(((Ha|0)==0?(Aa>>>0<2?-1:zc&1):Ha)|0){Ha=Ra+(Qa*24|0)+12|0;if(!(i[Ha>>0]&1))ld=Ha+1|0;else ld=k[Ra+(Qa*24|0)+20>>2]|0;if((i[ld>>0]|0)==40){QDa(Ra+(Qa*24|0)|0,300108)|0;PDa((k[c>>2]|0)+(Qa*24|0)+12|0,0,300015)|0}}else{QDa(Ra+(Qa*24|0)|0,300012)|0;PDa((k[c>>2]|0)+(Qa*24|0)+12|0,0,300015)|0}QDa((k[c>>2]|0)+(Qa*24|0)|0,300154)|0;Ra=k[Ga>>2]|0;Ha=Ra+-16|0;zc=k[c>>2]|0;Aa=zc+(Qa*24|0)|0;oa=Ra+-12|0;_c=k[oa>>2]|0;Ba=k[Ra+-8>>2]|0;Sa=Ba;if((_c|0)==(Ba|0)){Ba=k[Ha>>2]|0;sa=_c-Ba|0;Wa=(sa|0)/24|0;cd=Wa+1|0;if((sa|0)<-24){md=Ha;Ya=513;break}sa=(Sa-Ba|0)/24|0;if(sa>>>0<1073741823){Ba=sa<<1;nd=Ba>>>0>>0?cd:Ba}else nd=2147483647;XDa(e,nd,Wa,Ra+-4|0);Ra=k[za>>2]|0;x=0;xa(934,Ra|0,Aa|0);Wa=x;x=0;if(Wa&1){Ya=519;break}x=0;xa(934,Ra+12|0,zc+(Qa*24|0)+12|0);Wa=x;x=0;if(Wa&1){od=Ra;Ya=518;break}k[za>>2]=Ra+24;ZDa(Ha,e);YDa(e)}else{WDa(_c,Aa);x=0;xa(934,_c+12|0,zc+(Qa*24|0)+12|0);zc=x;x=0;if(zc&1){pd=_c;Ya=510;break}k[oa>>2]=(k[oa>>2]|0)+24}Qa=Qa+1|0}if((Ya|0)==510){Qa=Hc()|0;NDa(pd);Sc(Qa|0)}else if((Ya|0)==513)HBa(md);else if((Ya|0)==518){Qa=Hc()|0;za=M;NDa(od);qd=za;rd=Qa}else if((Ya|0)==519){Qa=Hc()|0;qd=M;rd=Qa}YDa(e);Sc(rd|0);break}case 84:{Qa=c+4|0;za=((k[Qa>>2]|0)-(k[c>>2]|0)|0)/24|0;Ga=hEa(a,b,c)|0;Ka=((k[Qa>>2]|0)-(k[c>>2]|0)|0)/24|0;if((Ga|0)==(a|0)){cb=a;break a}ta=c+16|0;wa=c+12|0;pa=k[wa>>2]|0;Va=c+20|0;oa=k[Va>>2]|0;_c=c+24|0;zc=k[_c>>2]|0;Aa=zc;if(oa>>>0>>0){k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=pa;k[Va>>2]=(k[Va>>2]|0)+16}else{zc=k[ta>>2]|0;Ha=oa-zc|0;oa=Ha>>4;Ra=oa+1|0;if((Ha|0)<-16)HBa(ta);Ha=Aa-zc|0;if(Ha>>4>>>0<1073741823){zc=Ha>>3;sd=zc>>>0>>0?Ra:zc}else sd=2147483647;TDa(e,sd,oa,c+28|0);oa=e+8|0;zc=k[oa>>2]|0;k[zc>>2]=0;k[zc+4>>2]=0;k[zc+8>>2]=0;k[zc+12>>2]=pa;k[oa>>2]=zc+16;UDa(ta,e);VDa(e)}zc=e+8|0;oa=za;while(1){if(oa>>>0>=Ka>>>0){Ya=533;break}pa=k[Va>>2]|0;Ra=pa+-16|0;Ha=k[c>>2]|0;Aa=Ha+(oa*24|0)|0;Wa=pa+-12|0;Ba=k[Wa>>2]|0;cd=k[pa+-8>>2]|0;sa=cd;if((Ba|0)==(cd|0)){cd=k[Ra>>2]|0;Sa=Ba-cd|0;$c=(Sa|0)/24|0;dd=$c+1|0;if((Sa|0)<-24){td=Ra;Ya=539;break}Sa=(sa-cd|0)/24|0;if(Sa>>>0<1073741823){cd=Sa<<1;ud=cd>>>0
      >>0?dd:cd}else ud=2147483647;XDa(e,ud,$c,pa+-4|0);pa=k[zc>>2]|0;x=0;xa(934,pa|0,Aa|0);$c=x;x=0;if($c&1){Ya=545;break}x=0;xa(934,pa+12|0,Ha+(oa*24|0)+12|0);$c=x;x=0;if($c&1){vd=pa;Ya=544;break}k[zc>>2]=pa+24;ZDa(Ra,e);YDa(e)}else{WDa(Ba,Aa);x=0;xa(934,Ba+12|0,Ha+(oa*24|0)+12|0);Ha=x;x=0;if(Ha&1){wd=Ba;Ya=536;break}k[Wa>>2]=(k[Wa>>2]|0)+24}oa=oa+1|0}if((Ya|0)==533){if(!((Ka|0)==(za+1|0)&(i[c+63>>0]|0)!=0)){cb=Ga;break a}oa=iEa(Ga,b,c)|0;if((oa|0)==(Ga|0)){cb=Ga;break a}fEa(J,(k[Qa>>2]|0)+-24|0);zc=k[Qa>>2]|0;Wa=zc+-24|0;Ba=zc;while(1){if((Ba|0)==(Wa|0))break;Ha=Ba+-24|0;k[Qa>>2]=Ha;CDa(Ha);Ba=k[Qa>>2]|0}Ba=i[J>>0]|0;Wa=(Ba&1)==0;x=0;Fa(146,zc+-48|0,(Wa?J+1|0:k[J+8>>2]|0)|0,(Wa?(Ba&255)>>>1:k[J+4>>2]|0)|0)|0;Ba=x;x=0;do if(!(Ba&1)?(Wa=(k[Qa>>2]|0)+-24|0,k[L>>2]=k[wa>>2],x=0,fb(413,K|0,Wa|0,L|0),Wa=x,x=0,!(Wa&1)):0){Wa=k[Va>>2]|0;Ga=k[_c>>2]|0;za=Ga;if(Wa>>>0>>0){k[Wa+12>>2]=k[K+12>>2];k[Wa>>2]=k[K>>2];Ga=K+4|0;k[Wa+4>>2]=k[Ga>>2];Ka=K+8|0;k[Wa+8>>2]=k[Ka>>2];k[Ka>>2]=0;k[Ga>>2]=0;k[K>>2]=0;k[Va>>2]=(k[Va>>2]|0)+16}else{Ga=k[ta>>2]|0;Ka=Wa-Ga|0;Wa=Ka>>4;Ha=Wa+1|0;if((Ka|0)<-16){x=0;va(1473,ta|0);x=0;Ka=Hc()|0;Aa=M;DDa(K);xd=Ka;yd=Aa;break}Aa=za-Ga|0;if(Aa>>4>>>0<1073741823){Ga=Aa>>3;zd=Ga>>>0>>0?Ha:Ga}else zd=2147483647;TDa(g,zd,Wa,c+28|0);Wa=g+8|0;Ga=k[Wa>>2]|0;k[Ga+12>>2]=k[K+12>>2];k[Ga>>2]=k[K>>2];Ha=K+4|0;k[Ga+4>>2]=k[Ha>>2];Aa=K+8|0;k[Ga+8>>2]=k[Aa>>2];k[Aa>>2]=0;k[Ha>>2]=0;k[K>>2]=0;k[Wa>>2]=Ga+16;UDa(ta,g);VDa(g)}DDa(K);NDa(J);cb=oa;break a}else Ya=563;while(0);if((Ya|0)==563){oa=Hc()|0;xd=oa;yd=M}NDa(J);Db=xd;Eb=yd;break d}else if((Ya|0)==536){oa=Hc()|0;NDa(wd);Sc(oa|0)}else if((Ya|0)==539)HBa(td);else if((Ya|0)==544){oa=Hc()|0;ta=M;NDa(vd);Ad=ta;Bd=oa}else if((Ya|0)==545){oa=Hc()|0;Ad=M;Bd=oa}YDa(e);Sc(Bd|0);break}case 85:{oa=a+1|0;if((oa|0)==(b|0)){cb=a;break a}ta=jEa(oa,b,c)|0;if((ta|0)==(oa|0)){cb=a;break a}oa=RDa(ta,b,c)|0;if((oa|0)==(ta|0)){cb=a;break a}ta=c+4|0;Va=k[ta>>2]|0;if(((Va-(k[c>>2]|0)|0)/24|0)>>>0<2){cb=a;break a}fEa(N,Va+-24|0);Va=k[ta>>2]|0;_c=Va+-24|0;wa=Va;while(1){if((wa|0)==(_c|0))break;Qa=wa+-24|0;k[ta>>2]=Qa;CDa(Qa);wa=k[ta>>2]|0}wa=Va+-48|0;_c=i[wa>>0]|0;Qa=(_c&1)==0;Ba=Qa?(_c&255)>>>1:k[Va+-44>>2]|0;x=0;fb(412,O|0,(Qa?wa+1|0:k[Va+-40>>2]|0)|0,(Ba>>>0<9?Ba:9)|0);Ba=x;x=0;k:do if(!(Ba&1)){wa=i[O>>0]|0;Qa=(wa&1)==0;_c=Qa?(wa&255)>>>1:k[O+4>>2]|0;wa=_c>>>0>9;zc=ZLa(Qa?O+1|0:k[O+8>>2]|0,300156,wa?9:_c)|0;NDa(O);l:do if(!(((zc|0)==0?(_c>>>0<9?-1:wa&1):zc)|0)){x=0;xa(932,T|0,(k[ta>>2]|0)+-24|0);Qa=x;x=0;if(Qa&1){Ya=581;break k}Qa=k[ta>>2]|0;Ga=Qa+-24|0;Wa=Qa;while(1){if((Wa|0)==(Ga|0))break;Qa=Wa+-24|0;k[ta>>2]=Qa;CDa(Qa);Wa=k[ta>>2]|0}Wa=i[T>>0]|0;Ga=(Wa&1)==0;Ua=T+8|0;ra=T+1|0;Qa=Ga?ra:k[Ua>>2]|0;Ha=T+4|0;x=0;Aa=Fa(151,Qa+9|0,Qa+(Ga?(Wa&255)>>>1:k[Ha>>2]|0)|0,c|0)|0;Wa=x;x=0;m:do if(Wa&1)Ya=602;else{n:do if((Aa|0)==(((i[T>>0]&1)==0?ra:k[Ua>>2]|0)+9|0)){x=0;fb(414,$|0,N|0,324196);Ga=x;x=0;if(Ga&1){Ya=602;break m}Ga=i[T>>0]|0;Qa=(Ga&1)==0;x=0;za=Fa(146,$|0,(Qa?ra:k[Ua>>2]|0)|0,(Qa?(Ga&255)>>>1:k[Ha>>2]|0)|0)|0;Ga=x;x=0;do if(Ga&1){Qa=Hc()|0;Cd=Qa;Dd=M}else{k[_>>2]=k[za>>2];k[_+4>>2]=k[za+4>>2];k[_+8>>2]=k[za+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[za+(Qa<<2)>>2]=0;Qa=Qa+1|0}lEa(Z,_);Qa=k[ta>>2]|0;Ka=k[c+8>>2]|0;Ra=Ka;if(Qa>>>0>>0){eEa(Qa,Z);k[ta>>2]=(k[ta>>2]|0)+24}else{Ka=k[c>>2]|0;pa=Qa-Ka|0;Qa=(pa|0)/24|0;$c=Qa+1|0;if((pa|0)<-24){x=0;va(1473,c|0);x=0;pa=Hc()|0;cd=M;CDa(Z);NDa(_);Cd=pa;Dd=cd;break}cd=(Ra-Ka|0)/24|0;if(cd>>>0<1073741823){Ka=cd<<1;Ed=Ka>>>0<$c>>>0?$c:Ka}else Ed=2147483647;XDa(e,Ed,Qa,c+12|0);Qa=e+8|0;Ka=k[Qa>>2]|0;eEa(Ka,Z);k[Qa>>2]=Ka+24;ZDa(c,e);YDa(e)}CDa(Z);NDa(_);NDa($);break n}while(0);NDa($);Fd=Cd;Gd=Dd;break m}else{za=(k[ta>>2]|0)+-24|0;x=0;fb(414,X|0,N|0,300166);Ga=x;x=0;if(Ga&1){Ya=602;break m}x=0;xa(932,Y|0,(k[ta>>2]|0)+-24|0);Ga=x;x=0;if(Ga&1){Ga=Hc()|0;Hd=Ga;Id=M}else{Ga=i[Y>>0]|0;ua=(Ga&1)==0;x=0;qa=Fa(146,X|0,(ua?Y+1|0:k[Y+8>>2]|0)|0,(ua?(Ga&255)>>>1:k[Y+4>>2]|0)|0)|0;Ga=x;x=0;do if(Ga&1){ua=Hc()|0;Jd=ua;Kd=M}else{k[W>>2]=k[qa>>2];k[W+4>>2]=k[qa+4>>2];k[W+8>>2]=k[qa+8>>2];ua=0;while(1){if((ua|0)==3)break;k[qa+(ua<<2)>>2]=0;ua=ua+1|0}x=0;ua=Ta(630,W|0,300168)|0;Ka=x;x=0;if(Ka&1){Ka=Hc()|0;Qa=M;NDa(W);Jd=Ka;Kd=Qa;break};k[V>>2]=k[ua>>2];k[V+4>>2]=k[ua+4>>2];k[V+8>>2]=k[ua+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[ua+(Qa<<2)>>2]=0;Qa=Qa+1|0}lEa(U,V);mEa(za,U);CDa(U);NDa(V);NDa(W);NDa(Y);NDa(X);break n}while(0);NDa(Y);Hd=Jd;Id=Kd}NDa(X);Fd=Hd;Gd=Id;break m}while(0);NDa(T);break l}while(0);if((Ya|0)==602){Ha=Hc()|0;Fd=Ha;Gd=M}NDa(T);Ld=Fd;Md=Gd;break k}else{Ha=(k[ta>>2]|0)+-24|0;x=0;fb(414,R|0,N|0,324196);Ua=x;x=0;if(Ua&1){Ya=581;break k}x=0;xa(932,S|0,(k[ta>>2]|0)+-24|0);Ua=x;x=0;do if(Ua&1){ra=Hc()|0;Nd=ra;Od=M}else{ra=i[S>>0]|0;Aa=(ra&1)==0;x=0;Wa=Fa(146,R|0,(Aa?S+1|0:k[S+8>>2]|0)|0,(Aa?(ra&255)>>>1:k[S+4>>2]|0)|0)|0;ra=x;x=0;if(ra&1){ra=Hc()|0;Aa=M;NDa(S);Nd=ra;Od=Aa;break};k[Q>>2]=k[Wa>>2];k[Q+4>>2]=k[Wa+4>>2];k[Q+8>>2]=k[Wa+8>>2];Aa=0;while(1){if((Aa|0)==3)break;k[Wa+(Aa<<2)>>2]=0;Aa=Aa+1|0}lEa(P,Q);mEa(Ha,P);CDa(P);NDa(Q);NDa(S);NDa(R);break l}while(0);NDa(R);Ld=Nd;Md=Od;break k}while(0);zc=(k[ta>>2]|0)+-24|0;k[ba>>2]=k[c+12>>2];x=0;fb(413,aa|0,zc|0,ba|0);zc=x;x=0;if(!(zc&1)){zc=c+16|0;wa=c+20|0;_c=k[wa>>2]|0;Ha=k[c+24>>2]|0;Ua=Ha;if(_c>>>0>>0){k[_c+12>>2]=k[aa+12>>2];k[_c>>2]=k[aa>>2];Ha=aa+4|0;k[_c+4>>2]=k[Ha>>2];Aa=aa+8|0;k[_c+8>>2]=k[Aa>>2];k[Aa>>2]=0;k[Ha>>2]=0;k[aa>>2]=0;k[wa>>2]=(k[wa>>2]|0)+16}else{wa=k[zc>>2]|0;Ha=_c-wa|0;_c=Ha>>4;Aa=_c+1|0;if((Ha|0)<-16){x=0;va(1473,zc|0);x=0;Ha=Hc()|0;Wa=M;DDa(aa);Ld=Ha;Md=Wa;break}Wa=Ua-wa|0;if(Wa>>4>>>0<1073741823){wa=Wa>>3;Pd=wa>>>0>>0?Aa:wa}else Pd=2147483647;TDa(f,Pd,_c,c+28|0);_c=f+8|0;wa=k[_c>>2]|0;k[wa+12>>2]=k[aa+12>>2];k[wa>>2]=k[aa>>2];Aa=aa+4|0;k[wa+4>>2]=k[Aa>>2];Wa=aa+8|0;k[wa+8>>2]=k[Wa>>2];k[Wa>>2]=0;k[Aa>>2]=0;k[aa>>2]=0;k[_c>>2]=wa+16;UDa(zc,f);VDa(f)}DDa(aa);NDa(N);cb=oa;break a}else Ya=581}else Ya=581;while(0);if((Ya|0)==581){oa=Hc()|0;Ld=oa;Md=M}NDa(N);Db=Ld;Eb=Md;break}case 83:{oa=a+1|0;if((oa|0)!=(b|0)?(i[oa>>0]|0)==116:0){oa=nEa(a,b,c)|0;if((oa|0)==(a|0)){cb=a;break a}ta=k[c+4>>2]|0;if((k[c>>2]|0)==(ta|0)){cb=a;break a}Ba=c+16|0;k[da>>2]=k[c+12>>2];gEa(ca,ta+-24|0,da);ta=c+20|0;Va=k[ta>>2]|0;zc=k[c+24>>2]|0;wa=zc;if(Va>>>0>>0){k[Va+12>>2]=k[ca+12>>2];k[Va>>2]=k[ca>>2];zc=ca+4|0;k[Va+4>>2]=k[zc>>2];_c=ca+8|0;k[Va+8>>2]=k[_c>>2];k[_c>>2]=0;k[zc>>2]=0;k[ca>>2]=0;k[ta>>2]=(k[ta>>2]|0)+16}else{ta=k[Ba>>2]|0;zc=Va-ta|0;Va=zc>>4;_c=Va+1|0;if((zc|0)<-16){x=0;va(1473,Ba|0);x=0;zc=Hc()|0;Aa=M;DDa(ca);Db=zc;Eb=Aa;break d}Aa=wa-ta|0;if(Aa>>4>>>0<1073741823){ta=Aa>>3;Qd=ta>>>0<_c>>>0?_c:ta}else Qd=2147483647;TDa(o,Qd,Va,c+28|0);Va=o+8|0;ta=k[Va>>2]|0;k[ta+12>>2]=k[ca+12>>2];k[ta>>2]=k[ca>>2];_c=ca+4|0;k[ta+4>>2]=k[_c>>2];Aa=ca+8|0;k[ta+8>>2]=k[Aa>>2];k[Aa>>2]=0;k[_c>>2]=0;k[ca>>2]=0;k[Va>>2]=ta+16;UDa(Ba,o);VDa(o)}DDa(ca);cb=oa;break a}oa=oEa(a,b,c)|0;if((oa|0)==(a|0)){cb=a;break a}Ba=iEa(oa,b,c)|0;if((Ba|0)==(oa|0)){cb=oa;break a}ta=c+4|0;Va=k[ta>>2]|0;if(((Va-(k[c>>2]|0)|0)/24|0)>>>0<2){cb=oa;break a}fEa(ea,Va+-24|0);Va=k[ta>>2]|0;oa=Va+-24|0;_c=Va;while(1){if((_c|0)==(oa|0))break;Aa=_c+-24|0;k[ta>>2]=Aa;CDa(Aa);_c=k[ta>>2]|0}_c=i[ea>>0]|0;oa=(_c&1)==0;x=0;Fa(146,Va+-48|0,(oa?ea+1|0:k[ea+8>>2]|0)|0,(oa?(_c&255)>>>1:k[ea+4>>2]|0)|0)|0;_c=x;x=0;do if(!(_c&1)?(oa=(k[ta>>2]|0)+-24|0,k[ga>>2]=k[c+12>>2],x=0,fb(413,fa|0,oa|0,ga|0),oa=x,x=0,!(oa&1)):0){oa=c+16|0;Aa=c+20|0;wa=k[Aa>>2]|0;zc=k[c+24>>2]|0;Wa=zc;if(wa>>>0>>0){k[wa+12>>2]=k[fa+12>>2];k[wa>>2]=k[fa>>2];zc=fa+4|0;k[wa+4>>2]=k[zc>>2];Ua=fa+8|0;k[wa+8>>2]=k[Ua>>2];k[Ua>>2]=0;k[zc>>2]=0;k[fa>>2]=0;k[Aa>>2]=(k[Aa>>2]|0)+16}else{Aa=k[oa>>2]|0;zc=wa-Aa|0;wa=zc>>4;Ua=wa+1|0;if((zc|0)<-16){x=0;va(1473,oa|0);x=0;zc=Hc()|0;Ha=M;DDa(fa);Rd=zc;Sd=Ha;break}Ha=Wa-Aa|0;if(Ha>>4>>>0<1073741823){Aa=Ha>>3;Td=Aa>>>0>>0?Ua:Aa}else Td=2147483647;TDa(p,Td,wa,c+28|0);wa=p+8|0;Aa=k[wa>>2]|0;k[Aa+12>>2]=k[fa+12>>2];k[Aa>>2]=k[fa>>2];Ua=fa+4|0;k[Aa+4>>2]=k[Ua>>2];Ha=fa+8|0;k[Aa+8>>2]=k[Ha>>2];k[Ha>>2]=0;k[Ua>>2]=0;k[fa>>2]=0;k[wa>>2]=Aa+16;UDa(oa,p);VDa(p)}DDa(fa);NDa(ea);cb=Ba;break a}else Ya=663;while(0);if((Ya|0)==663){Ba=Hc()|0;Rd=Ba;Sd=M}NDa(ea);Db=Rd;Eb=Sd;break}case 68:{Ba=a+1|0;if((Ba|0)==(b|0))Ya=800;else{ta=i[Ba>>0]|0;switch(ta<<24>>24|0){case 112:{Ba=c+4|0;_c=((k[Ba>>2]|0)-(k[c>>2]|0)|0)/24|0;Va=a+2|0;oa=RDa(Va,b,c)|0;Aa=((k[Ba>>2]|0)-(k[c>>2]|0)|0)/24|0;if((oa|0)==(Va|0)){Ya=800;break d}Va=c+16|0;Ba=k[c+12>>2]|0;wa=c+20|0;Ua=k[wa>>2]|0;Ha=k[c+24>>2]|0;Wa=Ha;if(Ua>>>0>>0){k[Ua>>2]=0;k[Ua+4>>2]=0;k[Ua+8>>2]=0;k[Ua+12>>2]=Ba;k[wa>>2]=(k[wa>>2]|0)+16}else{Ha=k[Va>>2]|0;zc=Ua-Ha|0;Ua=zc>>4;ra=Ua+1|0;if((zc|0)<-16)HBa(Va);zc=Wa-Ha|0;if(zc>>4>>>0<1073741823){Ha=zc>>3;Ud=Ha>>>0>>0?ra:Ha}else Ud=2147483647;TDa(e,Ud,Ua,c+28|0);Ua=e+8|0;Ha=k[Ua>>2]|0;k[Ha>>2]=0;k[Ha+4>>2]=0;k[Ha+8>>2]=0;k[Ha+12>>2]=Ba;k[Ua>>2]=Ha+16;UDa(Va,e);VDa(e)}Va=e+8|0;Ha=_c;while(1){if(Ha>>>0>=Aa>>>0){cb=oa;break a}_c=k[wa>>2]|0;Ua=_c+-16|0;Ba=k[c>>2]|0;ra=Ba+(Ha*24|0)|0;zc=_c+-12|0;Wa=k[zc>>2]|0;yc=k[_c+-8>>2]|0;za=yc;if((Wa|0)==(yc|0)){yc=k[Ua>>2]|0;qa=Wa-yc|0;Ga=(qa|0)/24|0;Qa=Ga+1|0;if((qa|0)<-24){Vd=Ua;Ya=682;break}qa=(za-yc|0)/24|0;if(qa>>>0<1073741823){yc=qa<<1;Wd=yc>>>0>>0?Qa:yc}else Wd=2147483647;XDa(e,Wd,Ga,_c+-4|0);_c=k[Va>>2]|0;x=0;xa(934,_c|0,ra|0);Ga=x;x=0;if(Ga&1){Ya=688;break}x=0;xa(934,_c+12|0,Ba+(Ha*24|0)+12|0);Ga=x;x=0;if(Ga&1){Xd=_c;Ya=687;break}k[Va>>2]=_c+24;ZDa(Ua,e);YDa(e)}else{WDa(Wa,ra);x=0;xa(934,Wa+12|0,Ba+(Ha*24|0)+12|0);Ba=x;x=0;if(Ba&1){Yd=Wa;Ya=679;break}k[zc>>2]=(k[zc>>2]|0)+24}Ha=Ha+1|0}if((Ya|0)==679){Ha=Hc()|0;NDa(Yd);Sc(Ha|0)}else if((Ya|0)==682)HBa(Vd);else if((Ya|0)==687){Ha=Hc()|0;Va=M;NDa(Xd);Zd=Va;_d=Ha}else if((Ya|0)==688){Ha=Hc()|0;Zd=M;_d=Ha}YDa(e);Sc(_d|0);break}case 84:case 116:{Ha=pEa(a,b,c)|0;if((Ha|0)==(a|0)){Ya=800;break d}Va=k[c+4>>2]|0;if((k[c>>2]|0)==(Va|0)){cb=a;break a}wa=c+16|0;k[ia>>2]=k[c+12>>2];gEa(ha,Va+-24|0,ia);Va=c+20|0;oa=k[Va>>2]|0;Aa=k[c+24>>2]|0;zc=Aa;if(oa>>>0>>0){k[oa+12>>2]=k[ha+12>>2];k[oa>>2]=k[ha>>2];Aa=ha+4|0;k[oa+4>>2]=k[Aa>>2];Wa=ha+8|0;k[oa+8>>2]=k[Wa>>2];k[Wa>>2]=0;k[Aa>>2]=0;k[ha>>2]=0;k[Va>>2]=(k[Va>>2]|0)+16}else{Va=k[wa>>2]|0;Aa=oa-Va|0;oa=Aa>>4;Wa=oa+1|0;if((Aa|0)<-16){x=0;va(1473,wa|0);x=0;Aa=Hc()|0;Ba=M;DDa(ha);Db=Aa;Eb=Ba;break d}Ba=zc-Va|0;if(Ba>>4>>>0<1073741823){Va=Ba>>3;$d=Va>>>0>>0?Wa:Va}else $d=2147483647;TDa(q,$d,oa,c+28|0);oa=q+8|0;Va=k[oa>>2]|0;k[Va+12>>2]=k[ha+12>>2];k[Va>>2]=k[ha>>2];Wa=ha+4|0;k[Va+4>>2]=k[Wa>>2];Ba=ha+8|0;k[Va+8>>2]=k[Ba>>2];k[Ba>>2]=0;k[Wa>>2]=0;k[ha>>2]=0;k[oa>>2]=Va+16;UDa(wa,q);VDa(q)}DDa(ha);cb=Ha;break a;break}case 118:{o:do if((b-a|0)>3&Ca<<24>>24==68&ta<<24>>24==118){Ha=a+2|0;wa=i[Ha>>0]|0;do if((wa+-49&255)<9){Va=bEa(Ha,b)|0;if((Va|0)==(b|0)){ae=a;break o}if((i[Va>>0]|0)!=95){ae=a;break o}oa=Va-Ha|0;Wa=Va+1|0;if((Wa|0)==(b|0)){ae=a;break o}if((i[Wa>>0]|0)!=112){Ba=RDa(Wa,b,c)|0;if((Ba|0)==(Wa|0)){ae=a;break o}Wa=k[c+4>>2]|0;if((k[c>>2]|0)==(Wa|0)){ae=a;break o}zc=Wa+-24|0;$Da(h,Ha,oa);x=0;Wa=Fa(147,h|0,0,300170)|0;Aa=x;x=0;if(Aa&1){Aa=Hc()|0;be=M;ce=Aa}else{k[g>>2]=k[Wa>>2];k[g+4>>2]=k[Wa+4>>2];k[g+8>>2]=k[Wa+8>>2];Aa=0;while(1){if((Aa|0)==3)break;k[Wa+(Aa<<2)>>2]=0;Aa=Aa+1|0}x=0;Aa=Ta(630,g|0,316824)|0;Wa=x;x=0;do if(!(Wa&1)){k[f>>2]=k[Aa>>2];k[f+4>>2]=k[Aa+4>>2];k[f+8>>2]=k[Aa+8>>2];ra=0;while(1){if((ra|0)==3)break;k[Aa+(ra<<2)>>2]=0;ra=ra+1|0}ra=i[f>>0]|0;Ua=(ra&1)==0;x=0;Fa(146,zc|0,(Ua?f+1|0:k[f+8>>2]|0)|0,(Ua?(ra&255)>>>1:k[f+4>>2]|0)|0)|0;ra=x;x=0;if(ra&1){ra=Hc()|0;Ua=M;NDa(f);de=Ua;ee=ra;break}else{NDa(f);NDa(g);NDa(h);ae=Ba;break o}}else{ra=Hc()|0;de=M;ee=ra}while(0);NDa(g);be=de;ce=ee}NDa(h);fe=be;ge=ce;break}Ba=Va+2|0;$Da(n,Ha,oa);x=0;zc=Fa(147,n|0,0,300179)|0;Aa=x;x=0;if(Aa&1){Aa=Hc()|0;he=M;ie=Aa}else{k[m>>2]=k[zc>>2];k[m+4>>2]=k[zc+4>>2];k[m+8>>2]=k[zc+8>>2];Aa=0;while(1){if((Aa|0)==3)break;k[zc+(Aa<<2)>>2]=0;Aa=Aa+1|0}x=0;Aa=Ta(630,m|0,316824)|0;zc=x;x=0;do if(zc&1){oa=Hc()|0;je=M;ke=oa}else{k[l>>2]=k[Aa>>2];k[l+4>>2]=k[Aa+4>>2];k[l+8>>2]=k[Aa+8>>2];oa=0;while(1){if((oa|0)==3)break;k[Aa+(oa<<2)>>2]=0;oa=oa+1|0}lEa(j,l);oa=c+4|0;Va=k[oa>>2]|0;Wa=k[c+8>>2]|0;ra=Wa;if(Va>>>0>>0){eEa(Va,j);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;Wa=Va-oa|0;Va=(Wa|0)/24|0;Ua=Va+1|0;if((Wa|0)<-24){x=0;va(1473,c|0);x=0;Wa=Hc()|0;_c=M;CDa(j);NDa(l);je=_c;ke=Wa;break}Wa=(ra-oa|0)/24|0;if(Wa>>>0<1073741823){oa=Wa<<1;le=oa>>>0>>0?Ua:oa}else le=2147483647;XDa(e,le,Va,c+12|0);Va=e+8|0;oa=k[Va>>2]|0;eEa(oa,j);k[Va>>2]=oa+24;ZDa(c,e);YDa(e)}CDa(j);NDa(l);NDa(m);NDa(n);ae=Ba;break o}while(0);NDa(m);he=je;ie=ke}NDa(n);fe=he;ge=ie}else{Ba=0;while(1){if((Ba|0)==3)break;k[o+(Ba<<2)>>2]=0;Ba=Ba+1|0}p:do if(wa<<24>>24!=95){x=0;Ba=Fa(152,Ha|0,b|0,c|0)|0;Aa=x;x=0;if(!(Aa&1))if((Ba|0)!=(Ha|0)){Aa=c+4|0;zc=k[Aa>>2]|0;if((k[c>>2]|0)!=(zc|0)){x=0;xa(932,p|0,zc+-24|0);zc=x;x=0;if(zc&1)Ya=752;else{q:do if(!(i[o>>0]&1)){i[o+1>>0]=0;i[o>>0]=0}else{zc=o+8|0;oa=k[zc>>2]|0;i[oa>>0]=0;Va=o+4|0;k[Va>>2]=0;Ua=k[o>>2]|0;Wa=(Ua&-2)+-1|0;ra=Ua&255;do if(!(ra&1)){_c=Ua>>>1&127;if((ra&255)<22){Dyb(o+1|0,oa|0,(Ua>>>1&127)+1|0)|0;yYa(oa);me=_c;break}Ga=_c+16&240;yc=Ga+-1|0;if((yc|0)==(Wa|0))break q;Qa=xYa(Ga)|0;if(yc>>>0<=Wa>>>0&(Qa|0)==0)break q;Dyb(Qa|0,o+1|0,(Ua>>>1&127)+1|0)|0;k[o>>2]=Ga|1;k[Va>>2]=_c;k[zc>>2]=Qa;break q}else{i[o+1>>0]=0;yYa(oa);me=0}while(0);i[o>>0]=me<<1}while(0);k[o>>2]=k[p>>2];k[o+4>>2]=k[p+4>>2];k[o+8>>2]=k[p+8>>2];oa=0;while(1){if((oa|0)==3)break;k[p+(oa<<2)>>2]=0;oa=oa+1|0}NDa(p);oa=k[Aa>>2]|0;zc=oa+-24|0;Va=oa;while(1){if((Va|0)==(zc|0)){ne=Ba;Ya=770;break p}oa=Va+-24|0;k[Aa>>2]=oa;CDa(oa);Va=k[Aa>>2]|0}}}else Ya=787}else{ne=Ha;Ya=770}else Ya=752}else{ne=Ha;Ya=770}while(0);r:do if((Ya|0)==770){s:do if(((ne|0)!=(b|0)?(i[ne>>0]|0)==95:0)?(Aa=ne+1|0,(Aa|0)!=(b|0)):0){x=0;Va=Fa(148,Aa|0,b|0,c|0)|0;Ba=x;x=0;if(Ba&1){Ya=752;break r}if((Va|0)!=(Aa|0)){Aa=k[c+4>>2]|0;if((k[c>>2]|0)==(Aa|0)){Ya=787;break r}Ba=Aa+-24|0;x=0;fb(415,s|0,300170,o|0);Aa=x;x=0;if(Aa&1){Ya=752;break r}x=0;Aa=Ta(630,s|0,316824)|0;zc=x;x=0;do if(!(zc&1)){k[q>>2]=k[Aa>>2];k[q+4>>2]=k[Aa+4>>2];k[q+8>>2]=k[Aa+8>>2];oa=0;while(1){if((oa|0)==3)break;k[Aa+(oa<<2)>>2]=0;oa=oa+1|0}oa=i[q>>0]|0;Ua=(oa&1)==0;x=0;Fa(146,Ba|0,(Ua?q+1|0:k[q+8>>2]|0)|0,(Ua?(oa&255)>>>1:k[q+4>>2]|0)|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;Ua=M;NDa(q);oe=Ua;pe=oa;break}else{NDa(q);NDa(s);qe=Va;break s}}else{oa=Hc()|0;oe=M;pe=oa}while(0);NDa(s);re=oe;se=pe;break r}else qe=a}else qe=a;while(0);NDa(o);ae=qe;break o}while(0);if((Ya|0)==752){Va=Hc()|0;re=M;se=Va}else if((Ya|0)==787){NDa(o);ae=a;break o}NDa(o);fe=re;ge=se}while(0);Sc(ge|0)}else ae=a;while(0);if((ae|0)==(a|0)){Ya=800;break d}ta=k[c+4>>2]|0;if((k[c>>2]|0)==(ta|0)){cb=a;break a}Ha=c+16|0;k[ka>>2]=k[c+12>>2];gEa(ja,ta+-24|0,ka);ta=c+20|0;wa=k[ta>>2]|0;Va=k[c+24>>2]|0;Ba=Va;if(wa>>>0>>0){k[wa+12>>2]=k[ja+12>>2];k[wa>>2]=k[ja>>2];Va=ja+4|0;k[wa+4>>2]=k[Va>>2];Aa=ja+8|0;k[wa+8>>2]=k[Aa>>2];k[Aa>>2]=0;k[Va>>2]=0;k[ja>>2]=0;k[ta>>2]=(k[ta>>2]|0)+16}else{ta=k[Ha>>2]|0;Va=wa-ta|0;wa=Va>>4;Aa=wa+1|0;if((Va|0)<-16){x=0;va(1473,Ha|0);x=0;Va=Hc()|0;zc=M;DDa(ja);Db=Va;Eb=zc;break d}zc=Ba-ta|0;if(zc>>4>>>0<1073741823){ta=zc>>3;te=ta>>>0>>0?Aa:ta}else te=2147483647;TDa(s,te,wa,c+28|0);wa=s+8|0;ta=k[wa>>2]|0;k[ta+12>>2]=k[ja+12>>2];k[ta>>2]=k[ja>>2];Aa=ja+4|0;k[ta+4>>2]=k[Aa>>2];zc=ja+8|0;k[ta+8>>2]=k[zc>>2];k[zc>>2]=0;k[Aa>>2]=0;k[ja>>2]=0;k[wa>>2]=ta+16;UDa(Ha,s);VDa(s)}DDa(ja);cb=ae;break a;break}default:{Ya=800;break d}}}break}default:Ya=800}while(0);do if((Ya|0)==800){Ca=_Da(a,b,c)|0;if((Ca|0)!=(a|0)){cb=Ca;break a}Ca=nEa(a,b,c)|0;if((Ca|0)==(a|0)){cb=a;break a}Ha=k[c+4>>2]|0;if((k[c>>2]|0)==(Ha|0)){cb=a;break a}ta=c+16|0;k[ma>>2]=k[c+12>>2];gEa(la,Ha+-24|0,ma);Ha=c+20|0;wa=k[Ha>>2]|0;Aa=k[c+24>>2]|0;zc=Aa;if(wa>>>0>>0){k[wa+12>>2]=k[la+12>>2];k[wa>>2]=k[la>>2];Aa=la+4|0;k[wa+4>>2]=k[Aa>>2];Ba=la+8|0;k[wa+8>>2]=k[Ba>>2];k[Ba>>2]=0;k[Aa>>2]=0;k[la>>2]=0;k[Ha>>2]=(k[Ha>>2]|0)+16}else{Ha=k[ta>>2]|0;Aa=wa-Ha|0;wa=Aa>>4;Ba=wa+1|0;if((Aa|0)<-16){x=0;va(1473,ta|0);x=0;Aa=Hc()|0;Va=M;DDa(la);Db=Aa;Eb=Va;break}Va=zc-Ha|0;if(Va>>4>>>0<1073741823){Ha=Va>>3;ue=Ha>>>0>>0?Ba:Ha}else ue=2147483647;TDa(t,ue,wa,c+28|0);wa=t+8|0;Ha=k[wa>>2]|0;k[Ha+12>>2]=k[la+12>>2];k[Ha>>2]=k[la>>2];Ba=la+4|0;k[Ha+4>>2]=k[Ba>>2];Va=la+8|0;k[Ha+8>>2]=k[Va>>2];k[Va>>2]=0;k[Ba>>2]=0;k[la>>2]=0;k[wa>>2]=Ha+16;UDa(ta,t);VDa(t)}DDa(la);cb=Ca;break a}while(0);Sc(Db|0)}else cb=na}else cb=a;while(0);r=d;return cb|0}function SDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;k[c>>2]=0;if((a|0)!=(b|0)){b=i[a>>0]|0;if(b<<24>>24==114){k[c>>2]=4;d=a+1|0;e=d;f=i[d>>0]|0;g=4}else{e=a;f=b;g=0}if(f<<24>>24==86){b=g|2;k[c>>2]=b;d=e+1|0;h=d;j=b;l=i[d>>0]|0}else{h=e;j=g;l=f}if(l<<24>>24==75){k[c>>2]=j|1;m=h+1|0}else m=h}else m=a;return m|0}function TDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;k[a+12>>2]=0;k[a+16>>2]=d;if(!b)e=0;else e=NEa(k[d>>2]|0,b<<4)|0;k[a>>2]=e;d=e+(c<<4)|0;k[a+8>>2]=d;k[a+4>>2]=d;k[a+12>>2]=e+(b<<4);return}function UDa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=k[a>>2]|0;d=a+4|0;e=b+4|0;f=k[d>>2]|0;while(1){if((f|0)==(c|0))break;g=k[e>>2]|0;h=g+-16|0;i=f+-16|0;k[h>>2]=0;j=g+-12|0;k[j>>2]=0;l=k[f+-4>>2]|0;k[g+-8>>2]=0;k[g+-4>>2]=l;k[h>>2]=k[i>>2];h=f+-12|0;k[j>>2]=k[h>>2];j=f+-8|0;k[g+-8>>2]=k[j>>2];k[j>>2]=0;k[h>>2]=0;k[i>>2]=0;k[e>>2]=(k[e>>2]|0)+-16;f=i}f=k[a>>2]|0;k[a>>2]=k[e>>2];k[e>>2]=f;f=b+8|0;c=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=c;c=a+8|0;a=b+12|0;f=k[c>>2]|0;k[c>>2]=k[a>>2];k[a>>2]=f;k[b>>2]=k[e>>2];return}function VDa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;c=a+8|0;while(1){d=k[c>>2]|0;if((d|0)==(b|0))break;e=d+-16|0;k[c>>2]=e;DDa(e)}c=k[a>>2]|0;if(c)LDa(k[k[a+16>>2]>>2]|0,c,(k[a+12>>2]|0)-c|0);return}function WDa(a,b){a=a|0;b=b|0;if(!(i[b>>0]&1)){k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2]}else $Da(a,k[b+8>>2]|0,k[b+4>>2]|0);return}function XDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;k[a+12>>2]=0;k[a+16>>2]=d;if(!b)e=0;else e=NEa(k[d>>2]|0,b*24|0)|0;k[a>>2]=e;d=e+(c*24|0)|0;k[a+8>>2]=d;k[a+4>>2]=d;k[a+12>>2]=e+(b*24|0);return}function YDa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;c=a+8|0;while(1){d=k[c>>2]|0;if((d|0)==(b|0))break;e=d+-24|0;k[c>>2]=e;CDa(e)}c=k[a>>2]|0;if(c)LDa(k[k[a+16>>2]>>2]|0,c,(k[a+12>>2]|0)-c|0);return}function ZDa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;d=a+4|0;e=b+4|0;f=k[d>>2]|0;while(1){if((f|0)==(c|0))break;g=f+-24|0;eEa((k[e>>2]|0)+-24|0,g);k[e>>2]=(k[e>>2]|0)+-24;f=g}f=k[a>>2]|0;k[a>>2]=k[e>>2];k[e>>2]=f;f=b+8|0;c=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=c;c=a+8|0;a=b+12|0;f=k[c>>2]|0;k[c>>2]=k[a>>2];k[a>>2]=f;k[b>>2]=k[e>>2];return}function _Da(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0;d=r;r=r+1280|0;e=d+1256|0;f=d+1236|0;g=d+1216|0;h=d+1196|0;j=d+1176|0;l=d+1156|0;m=d+1136|0;n=d+1116|0;o=d+1096|0;p=d+1076|0;q=d+1056|0;s=d+1036|0;t=d+1016|0;u=d+996|0;v=d+976|0;w=d+956|0;y=d+936|0;z=d+916|0;A=d+896|0;B=d+876|0;C=d+856|0;D=d+836|0;E=d+816|0;F=d+796|0;G=d+776|0;H=d+756|0;I=d+736|0;J=d+716|0;K=d+696|0;L=d+672|0;N=d+648|0;O=d+624|0;P=d+600|0;Q=d+576|0;R=d+552|0;S=d+528|0;T=d+504|0;U=d+480|0;V=d+456|0;W=d+432|0;X=d+408|0;Y=d+384|0;Z=d+360|0;_=d+336|0;$=d+312|0;aa=d+288|0;ba=d+264|0;ca=d+240|0;da=d+216|0;ea=d+192|0;fa=d+168|0;ga=d+144|0;ha=d+120|0;ia=d+96|0;ja=d+72|0;ka=d+48|0;la=d+24|0;ma=d;a:do if((a|0)==(b|0))na=a;else{b:do switch(i[a>>0]|0){case 118:{MEa(L,301564);oa=c+4|0;pa=k[oa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(pa>>>0>>0){eEa(pa,L);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;qa=pa-oa|0;pa=(qa|0)/24|0;sa=pa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(L);ua=ta;wa=qa;break b}qa=(ra-oa|0)/24|0;if(qa>>>0<1073741823){oa=qa<<1;xa=oa>>>0>>0?sa:oa}else xa=2147483647;XDa(K,xa,pa,c+12|0);pa=K+8|0;oa=k[pa>>2]|0;eEa(oa,L);k[pa>>2]=oa+24;ZDa(c,K);YDa(K)}CDa(L);na=a+1|0;break a;break}case 119:{i[N>>0]=14;oa=N+1|0;i[oa>>0]=i[301154]|0;i[oa+1>>0]=i[301155]|0;i[oa+2>>0]=i[301156]|0;i[oa+3>>0]=i[301157]|0;i[oa+4>>0]=i[301158]|0;i[oa+5>>0]=i[301159]|0;i[oa+6>>0]=i[301160]|0;i[N+8>>0]=0;oa=N+12|0;pa=0;while(1){if((pa|0)==3)break;k[oa+(pa<<2)>>2]=0;pa=pa+1|0}pa=c+4|0;oa=k[pa>>2]|0;sa=k[c+8>>2]|0;qa=sa;if(oa>>>0>>0){eEa(oa,N);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;sa=oa-pa|0;oa=(sa|0)/24|0;ra=oa+1|0;if((sa|0)<-24){x=0;va(1473,c|0);x=0;sa=Hc()|0;ta=M;CDa(N);ua=ta;wa=sa;break b}sa=(qa-pa|0)/24|0;if(sa>>>0<1073741823){pa=sa<<1;ya=pa>>>0>>0?ra:pa}else ya=2147483647;XDa(J,ya,oa,c+12|0);oa=J+8|0;pa=k[oa>>2]|0;eEa(pa,N);k[oa>>2]=pa+24;ZDa(c,J);YDa(J)}CDa(N);na=a+1|0;break a;break}case 98:{MEa(O,301569);pa=c+4|0;oa=k[pa>>2]|0;ra=k[c+8>>2]|0;sa=ra;if(oa>>>0>>0){eEa(oa,O);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;ra=oa-pa|0;oa=(ra|0)/24|0;qa=oa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(O);ua=ta;wa=ra;break b}ra=(sa-pa|0)/24|0;if(ra>>>0<1073741823){pa=ra<<1;za=pa>>>0>>0?qa:pa}else za=2147483647;XDa(I,za,oa,c+12|0);oa=I+8|0;pa=k[oa>>2]|0;eEa(pa,O);k[oa>>2]=pa+24;ZDa(c,I);YDa(I)}CDa(O);na=a+1|0;break a;break}case 99:{MEa(P,301162);pa=c+4|0;oa=k[pa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(oa>>>0>>0){eEa(oa,P);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;qa=oa-pa|0;oa=(qa|0)/24|0;sa=oa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(P);ua=ta;wa=qa;break b}qa=(ra-pa|0)/24|0;if(qa>>>0<1073741823){pa=qa<<1;Aa=pa>>>0>>0?sa:pa}else Aa=2147483647;XDa(H,Aa,oa,c+12|0);oa=H+8|0;pa=k[oa>>2]|0;eEa(pa,P);k[oa>>2]=pa+24;ZDa(c,H);YDa(H)}CDa(P);na=a+1|0;break a;break}case 97:{uEa(Q,301167);pa=c+4|0;oa=k[pa>>2]|0;sa=k[c+8>>2]|0;qa=sa;if(oa>>>0>>0){eEa(oa,Q);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;sa=oa-pa|0;oa=(sa|0)/24|0;ra=oa+1|0;if((sa|0)<-24){x=0;va(1473,c|0);x=0;sa=Hc()|0;ta=M;CDa(Q);ua=ta;wa=sa;break b}sa=(qa-pa|0)/24|0;if(sa>>>0<1073741823){pa=sa<<1;Ba=pa>>>0>>0?ra:pa}else Ba=2147483647;XDa(G,Ba,oa,c+12|0);oa=G+8|0;pa=k[oa>>2]|0;eEa(pa,Q);k[oa>>2]=pa+24;ZDa(c,G);YDa(G)}CDa(Q);na=a+1|0;break a;break}case 104:{wEa(R,301179);pa=c+4|0;oa=k[pa>>2]|0;ra=k[c+8>>2]|0;sa=ra;if(oa>>>0>>0){eEa(oa,R);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;ra=oa-pa|0;oa=(ra|0)/24|0;qa=oa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(R);ua=ta;wa=ra;break b}ra=(sa-pa|0)/24|0;if(ra>>>0<1073741823){pa=ra<<1;Ca=pa>>>0>>0?qa:pa}else Ca=2147483647;XDa(F,Ca,oa,c+12|0);oa=F+8|0;pa=k[oa>>2]|0;eEa(pa,R);k[oa>>2]=pa+24;ZDa(c,F);YDa(F)}CDa(R);na=a+1|0;break a;break}case 115:{LEa(S,301193);pa=c+4|0;oa=k[pa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(oa>>>0>>0){eEa(oa,S);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;qa=oa-pa|0;oa=(qa|0)/24|0;sa=oa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(S);ua=ta;wa=qa;break b}qa=(ra-pa|0)/24|0;if(qa>>>0<1073741823){pa=qa<<1;Da=pa>>>0>>0?sa:pa}else Da=2147483647;XDa(E,Da,oa,c+12|0);oa=E+8|0;pa=k[oa>>2]|0;eEa(pa,S);k[oa>>2]=pa+24;ZDa(c,E);YDa(E)}CDa(S);na=a+1|0;break a;break}case 116:{sEa(T,301199);pa=c+4|0;oa=k[pa>>2]|0;sa=k[c+8>>2]|0;qa=sa;if(oa>>>0>>0){eEa(oa,T);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;sa=oa-pa|0;oa=(sa|0)/24|0;ra=oa+1|0;if((sa|0)<-24){x=0;va(1473,c|0);x=0;sa=Hc()|0;ta=M;CDa(T);ua=ta;wa=sa;break b}sa=(qa-pa|0)/24|0;if(sa>>>0<1073741823){pa=sa<<1;Ea=pa>>>0>>0?ra:pa}else Ea=2147483647;XDa(D,Ea,oa,c+12|0);oa=D+8|0;pa=k[oa>>2]|0;eEa(pa,T);k[oa>>2]=pa+24;ZDa(c,D);YDa(D)}CDa(T);na=a+1|0;break a;break}case 105:{WEa(U,301574);pa=c+4|0;oa=k[pa>>2]|0;ra=k[c+8>>2]|0;sa=ra;if(oa>>>0>>0){eEa(oa,U);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;ra=oa-pa|0;oa=(ra|0)/24|0;qa=oa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(U);ua=ta;wa=ra;break b}ra=(sa-pa|0)/24|0;if(ra>>>0<1073741823){pa=ra<<1;Fa=pa>>>0>>0?qa:pa}else Fa=2147483647;XDa(C,Fa,oa,c+12|0);oa=C+8|0;pa=k[oa>>2]|0;eEa(pa,U);k[oa>>2]=pa+24;ZDa(c,C);YDa(C)}CDa(U);na=a+1|0;break a;break}case 106:{vEa(V,301578);pa=c+4|0;oa=k[pa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(oa>>>0>>0){eEa(oa,V);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;qa=oa-pa|0;oa=(qa|0)/24|0;sa=oa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(V);ua=ta;wa=qa;break b}qa=(ra-pa|0)/24|0;if(qa>>>0<1073741823){pa=qa<<1;Ga=pa>>>0>>0?sa:pa}else Ga=2147483647;XDa(B,Ga,oa,c+12|0);oa=B+8|0;pa=k[oa>>2]|0;eEa(pa,V);k[oa>>2]=pa+24;ZDa(c,B);YDa(B)}CDa(V);na=a+1|0;break a;break}case 108:{MEa(W,301591);pa=c+4|0;oa=k[pa>>2]|0;sa=k[c+8>>2]|0;qa=sa;if(oa>>>0>>0){eEa(oa,W);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;sa=oa-pa|0;oa=(sa|0)/24|0;ra=oa+1|0;if((sa|0)<-24){x=0;va(1473,c|0);x=0;sa=Hc()|0;ta=M;CDa(W);ua=ta;wa=sa;break b}sa=(qa-pa|0)/24|0;if(sa>>>0<1073741823){pa=sa<<1;Ha=pa>>>0>>0?ra:pa}else Ha=2147483647;XDa(A,Ha,oa,c+12|0);oa=A+8|0;pa=k[oa>>2]|0;eEa(pa,W);k[oa>>2]=pa+24;ZDa(c,A);YDa(A)}CDa(W);na=a+1|0;break a;break}case 109:{wEa(X,301596);pa=c+4|0;oa=k[pa>>2]|0;ra=k[c+8>>2]|0;sa=ra;if(oa>>>0>>0){eEa(oa,X);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;ra=oa-pa|0;oa=(ra|0)/24|0;qa=oa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(X);ua=ta;wa=ra;break b}ra=(sa-pa|0)/24|0;if(ra>>>0<1073741823){pa=ra<<1;Ia=pa>>>0>>0?qa:pa}else Ia=2147483647;XDa(z,Ia,oa,c+12|0);oa=z+8|0;pa=k[oa>>2]|0;eEa(pa,X);k[oa>>2]=pa+24;ZDa(c,z);YDa(z)}CDa(X);na=a+1|0;break a;break}case 120:{HEa(Y,301610);pa=c+4|0;oa=k[pa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(oa>>>0>>0){eEa(oa,Y);k[pa>>2]=(k[pa>>2]|0)+24}else{pa=k[c>>2]|0;qa=oa-pa|0;oa=(qa|0)/24|0;sa=oa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(Y);ua=ta;wa=qa;break b}qa=(ra-pa|0)/24|0;if(qa>>>0<1073741823){pa=qa<<1;Ja=pa>>>0>>0?sa:pa}else Ja=2147483647;XDa(y,Ja,oa,c+12|0);oa=y+8|0;pa=k[oa>>2]|0;eEa(pa,Y);k[oa>>2]=pa+24;ZDa(c,y);YDa(y)}CDa(Y);na=a+1|0;break a;break}case 121:{pa=xYa(32)|0;k[Z+8>>2]=pa;k[Z>>2]=33;k[Z+4>>2]=18;oa=pa;sa=301620;qa=oa+18|0;do{i[oa>>0]=i[sa>>0]|0;oa=oa+1|0;sa=sa+1|0}while((oa|0)<(qa|0));i[pa+18>>0]=0;sa=Z+12|0;oa=0;while(1){if((oa|0)==3)break;k[sa+(oa<<2)>>2]=0;oa=oa+1|0}oa=c+4|0;sa=k[oa>>2]|0;pa=k[c+8>>2]|0;qa=pa;if(sa>>>0>>0){eEa(sa,Z);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;pa=sa-oa|0;sa=(pa|0)/24|0;ra=sa+1|0;if((pa|0)<-24){x=0;va(1473,c|0);x=0;pa=Hc()|0;ta=M;CDa(Z);ua=ta;wa=pa;break b}pa=(qa-oa|0)/24|0;if(pa>>>0<1073741823){oa=pa<<1;Ka=oa>>>0>>0?ra:oa}else Ka=2147483647;XDa(w,Ka,sa,c+12|0);sa=w+8|0;oa=k[sa>>2]|0;eEa(oa,Z);k[sa>>2]=oa+24;ZDa(c,w);YDa(w)}CDa(Z);na=a+1|0;break a;break}case 110:{XEa(_,301221);oa=c+4|0;sa=k[oa>>2]|0;ra=k[c+8>>2]|0;pa=ra;if(sa>>>0>>0){eEa(sa,_);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;ra=sa-oa|0;sa=(ra|0)/24|0;qa=sa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(_);ua=ta;wa=ra;break b}ra=(pa-oa|0)/24|0;if(ra>>>0<1073741823){oa=ra<<1;La=oa>>>0>>0?qa:oa}else La=2147483647;XDa(v,La,sa,c+12|0);sa=v+8|0;oa=k[sa>>2]|0;eEa(oa,_);k[sa>>2]=oa+24;ZDa(c,v);YDa(v)}CDa(_);na=a+1|0;break a;break}case 111:{tEa($,301230);oa=c+4|0;sa=k[oa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(sa>>>0>>0){eEa(sa,$);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;qa=sa-oa|0;sa=(qa|0)/24|0;pa=sa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa($);ua=ta;wa=qa;break b}qa=(ra-oa|0)/24|0;if(qa>>>0<1073741823){oa=qa<<1;Ma=oa>>>0>>0?pa:oa}else Ma=2147483647;XDa(u,Ma,sa,c+12|0);sa=u+8|0;oa=k[sa>>2]|0;eEa(oa,$);k[sa>>2]=oa+24;ZDa(c,u);YDa(u)}CDa($);na=a+1|0;break a;break}case 102:{LEa(aa,301639);oa=c+4|0;sa=k[oa>>2]|0;pa=k[c+8>>2]|0;qa=pa;if(sa>>>0>>0){eEa(sa,aa);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;pa=sa-oa|0;sa=(pa|0)/24|0;ra=sa+1|0;if((pa|0)<-24){x=0;va(1473,c|0);x=0;pa=Hc()|0;ta=M;CDa(aa);ua=ta;wa=pa;break b}pa=(qa-oa|0)/24|0;if(pa>>>0<1073741823){oa=pa<<1;Na=oa>>>0>>0?ra:oa}else Na=2147483647;XDa(t,Na,sa,c+12|0);sa=t+8|0;oa=k[sa>>2]|0;eEa(oa,aa);k[sa>>2]=oa+24;ZDa(c,t);YDa(t)}CDa(aa);na=a+1|0;break a;break}case 100:{i[ba>>0]=12;oa=ba+1|0;i[oa>>0]=i[301645]|0;i[oa+1>>0]=i[301646]|0;i[oa+2>>0]=i[301647]|0;i[oa+3>>0]=i[301648]|0;i[oa+4>>0]=i[301649]|0;i[oa+5>>0]=i[301650]|0;i[ba+7>>0]=0;oa=ba+12|0;sa=0;while(1){if((sa|0)==3)break;k[oa+(sa<<2)>>2]=0;sa=sa+1|0}sa=c+4|0;oa=k[sa>>2]|0;ra=k[c+8>>2]|0;pa=ra;if(oa>>>0>>0){eEa(oa,ba);k[sa>>2]=(k[sa>>2]|0)+24}else{sa=k[c>>2]|0;ra=oa-sa|0;oa=(ra|0)/24|0;qa=oa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(ba);ua=ta;wa=ra;break b}ra=(pa-sa|0)/24|0;if(ra>>>0<1073741823){sa=ra<<1;Oa=sa>>>0>>0?qa:sa}else Oa=2147483647;XDa(s,Oa,oa,c+12|0);oa=s+8|0;sa=k[oa>>2]|0;eEa(sa,ba);k[oa>>2]=sa+24;ZDa(c,s);YDa(s)}CDa(ba);na=a+1|0;break a;break}case 101:{uEa(ca,301652);sa=c+4|0;oa=k[sa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(oa>>>0>>0){eEa(oa,ca);k[sa>>2]=(k[sa>>2]|0)+24}else{sa=k[c>>2]|0;qa=oa-sa|0;oa=(qa|0)/24|0;pa=oa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(ca);ua=ta;wa=qa;break b}qa=(ra-sa|0)/24|0;if(qa>>>0<1073741823){sa=qa<<1;Pa=sa>>>0>>0?pa:sa}else Pa=2147483647;XDa(q,Pa,oa,c+12|0);oa=q+8|0;sa=k[oa>>2]|0;eEa(sa,ca);k[oa>>2]=sa+24;ZDa(c,q);YDa(q)}CDa(ca);na=a+1|0;break a;break}case 103:{GEa(da,301664);sa=c+4|0;oa=k[sa>>2]|0;pa=k[c+8>>2]|0;qa=pa;if(oa>>>0>>0){eEa(oa,da);k[sa>>2]=(k[sa>>2]|0)+24}else{sa=k[c>>2]|0;pa=oa-sa|0;oa=(pa|0)/24|0;ra=oa+1|0;if((pa|0)<-24){x=0;va(1473,c|0);x=0;pa=Hc()|0;ta=M;CDa(da);ua=ta;wa=pa;break b}pa=(qa-sa|0)/24|0;if(pa>>>0<1073741823){sa=pa<<1;Qa=sa>>>0>>0?ra:sa}else Qa=2147483647;XDa(p,Qa,oa,c+12|0);oa=p+8|0;sa=k[oa>>2]|0;eEa(sa,da);k[oa>>2]=sa+24;ZDa(c,p);YDa(p)}CDa(da);na=a+1|0;break a;break}case 122:{WEa(ea,301675);sa=c+4|0;oa=k[sa>>2]|0;ra=k[c+8>>2]|0;pa=ra;if(oa>>>0>>0){eEa(oa,ea);k[sa>>2]=(k[sa>>2]|0)+24}else{sa=k[c>>2]|0;ra=oa-sa|0;oa=(ra|0)/24|0;qa=oa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(ea);ua=ta;wa=ra;break b}ra=(pa-sa|0)/24|0;if(ra>>>0<1073741823){sa=ra<<1;Ra=sa>>>0>>0?qa:sa}else Ra=2147483647;XDa(o,Ra,oa,c+12|0);oa=o+8|0;sa=k[oa>>2]|0;eEa(sa,ea);k[oa>>2]=sa+24;ZDa(c,o);YDa(o)}CDa(ea);na=a+1|0;break a;break}case 117:{sa=a+1|0;oa=jEa(sa,b,c)|0;na=(oa|0)==(sa|0)?a:oa;break a;break}case 68:{oa=a+1|0;if((oa|0)==(b|0)){na=a;break a}switch(i[oa>>0]|0){case 100:{HEa(fa,301679);oa=c+4|0;sa=k[oa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(sa>>>0>>0){eEa(sa,fa);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;qa=sa-oa|0;sa=(qa|0)/24|0;pa=sa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(fa);ua=ta;wa=qa;break b}qa=(ra-oa|0)/24|0;if(qa>>>0<1073741823){oa=qa<<1;Sa=oa>>>0>>0?pa:oa}else Sa=2147483647;XDa(n,Sa,sa,c+12|0);sa=n+8|0;oa=k[sa>>2]|0;eEa(oa,fa);k[sa>>2]=oa+24;ZDa(c,n);YDa(n)}CDa(fa);na=a+2|0;break a;break}case 101:{GEa(ga,301689);oa=c+4|0;sa=k[oa>>2]|0;pa=k[c+8>>2]|0;qa=pa;if(sa>>>0>>0){eEa(sa,ga);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;pa=sa-oa|0;sa=(pa|0)/24|0;ra=sa+1|0;if((pa|0)<-24){x=0;va(1473,c|0);x=0;pa=Hc()|0;ta=M;CDa(ga);ua=ta;wa=pa;break b}pa=(qa-oa|0)/24|0;if(pa>>>0<1073741823){oa=pa<<1;Ta=oa>>>0>>0?ra:oa}else Ta=2147483647;XDa(m,Ta,sa,c+12|0);sa=m+8|0;oa=k[sa>>2]|0;eEa(oa,ga);k[sa>>2]=oa+24;ZDa(c,m);YDa(m)}CDa(ga);na=a+2|0;break a;break}case 102:{HEa(ha,301700);oa=c+4|0;sa=k[oa>>2]|0;ra=k[c+8>>2]|0;pa=ra;if(sa>>>0>>0){eEa(sa,ha);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;ra=sa-oa|0;sa=(ra|0)/24|0;qa=sa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(ha);ua=ta;wa=ra;break b}ra=(pa-oa|0)/24|0;if(ra>>>0<1073741823){oa=ra<<1;Ua=oa>>>0>>0?qa:oa}else Ua=2147483647;XDa(l,Ua,sa,c+12|0);sa=l+8|0;oa=k[sa>>2]|0;eEa(oa,ha);k[sa>>2]=oa+24;ZDa(c,l);YDa(l)}CDa(ha);na=a+2|0;break a;break}case 104:{HEa(ia,301710);oa=c+4|0;sa=k[oa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(sa>>>0>>0){eEa(sa,ia);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;qa=sa-oa|0;sa=(qa|0)/24|0;pa=sa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(ia);ua=ta;wa=qa;break b}qa=(ra-oa|0)/24|0;if(qa>>>0<1073741823){oa=qa<<1;Va=oa>>>0>>0?pa:oa}else Va=2147483647;XDa(j,Va,sa,c+12|0);sa=j+8|0;oa=k[sa>>2]|0;eEa(oa,ia);k[sa>>2]=oa+24;ZDa(c,j);YDa(j)}CDa(ia);na=a+2|0;break a;break}case 105:{XEa(ja,301720);oa=c+4|0;sa=k[oa>>2]|0;pa=k[c+8>>2]|0;qa=pa;if(sa>>>0>>0){eEa(sa,ja);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;pa=sa-oa|0;sa=(pa|0)/24|0;ra=sa+1|0;if((pa|0)<-24){x=0;va(1473,c|0);x=0;pa=Hc()|0;ta=M;CDa(ja);ua=ta;wa=pa;break b}pa=(qa-oa|0)/24|0;if(pa>>>0<1073741823){oa=pa<<1;Wa=oa>>>0>>0?ra:oa}else Wa=2147483647;XDa(h,Wa,sa,c+12|0);sa=h+8|0;oa=k[sa>>2]|0;eEa(oa,ja);k[sa>>2]=oa+24;ZDa(c,h);YDa(h)}CDa(ja);na=a+2|0;break a;break}case 115:{XEa(ka,301729);oa=c+4|0;sa=k[oa>>2]|0;ra=k[c+8>>2]|0;pa=ra;if(sa>>>0>>0){eEa(sa,ka);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;ra=sa-oa|0;sa=(ra|0)/24|0;qa=sa+1|0;if((ra|0)<-24){x=0;va(1473,c|0);x=0;ra=Hc()|0;ta=M;CDa(ka);ua=ta;wa=ra;break b}ra=(pa-oa|0)/24|0;if(ra>>>0<1073741823){oa=ra<<1;Xa=oa>>>0>>0?qa:oa}else Xa=2147483647;XDa(g,Xa,sa,c+12|0);sa=g+8|0;oa=k[sa>>2]|0;eEa(oa,ka);k[sa>>2]=oa+24;ZDa(c,g);YDa(g)}CDa(ka);na=a+2|0;break a;break}case 97:{MEa(la,301738);oa=c+4|0;sa=k[oa>>2]|0;qa=k[c+8>>2]|0;ra=qa;if(sa>>>0>>0){eEa(sa,la);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;qa=sa-oa|0;sa=(qa|0)/24|0;pa=sa+1|0;if((qa|0)<-24){x=0;va(1473,c|0);x=0;qa=Hc()|0;ta=M;CDa(la);ua=ta;wa=qa;break b}qa=(ra-oa|0)/24|0;if(qa>>>0<1073741823){oa=qa<<1;Ya=oa>>>0>>0?pa:oa}else Ya=2147483647;XDa(f,Ya,sa,c+12|0);sa=f+8|0;oa=k[sa>>2]|0;eEa(oa,la);k[sa>>2]=oa+24;ZDa(c,f);YDa(f)}CDa(la);na=a+2|0;break a;break}case 110:{sEa(ma,301743);oa=c+4|0;sa=k[oa>>2]|0;pa=k[c+8>>2]|0;qa=pa;if(sa>>>0>>0){eEa(sa,ma);k[oa>>2]=(k[oa>>2]|0)+24}else{oa=k[c>>2]|0;pa=sa-oa|0;sa=(pa|0)/24|0;ra=sa+1|0;if((pa|0)<-24){x=0;va(1473,c|0);x=0;pa=Hc()|0;ta=M;CDa(ma);ua=ta;wa=pa;break b}pa=(qa-oa|0)/24|0;if(pa>>>0<1073741823){oa=pa<<1;Za=oa>>>0>>0?ra:oa}else Za=2147483647;XDa(e,Za,sa,c+12|0);sa=e+8|0;oa=k[sa>>2]|0;eEa(oa,ma);k[sa>>2]=oa+24;ZDa(c,e);YDa(e)}CDa(ma);na=a+2|0;break a;break}default:{na=a;break a}}break}default:{na=a;break a}}while(0);Sc(wa|0)}while(0);r=d;return na|0}function $Da(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(c>>>0>4294967279)GBa(a);if(c>>>0<11){i[a>>0]=c<<1;d=a+1|0}else{e=c+16&-16;f=xYa(e)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=c;d=f}Dyb(d|0,b|0,c|0)|0;i[d+c>>0]=0;return}function aEa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=i[a>>0]|0;if(!(b&1)){c=(b&255)>>>1;d=a+1|0}else{c=k[a+4>>2]|0;d=k[a+8>>2]|0}e=(c|0)!=0&1;f=c-e|0;if((c|0)==(e|0))g=b;else{Eyb(d|0,d+e|0,f|0)|0;g=i[a>>0]|0}if(!(g&1))i[a>>0]=f<<1;else k[a+4>>2]=f;i[d+f>>0]=0;return}function bEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;a:do if((a|0)!=(b|0)?(c=(i[a>>0]|0)==110?a+1|0:a,(c|0)!=(b|0)):0){d=i[c>>0]|0;if(d<<24>>24==48){e=c+1|0;break}if((d+-49&255)<9){d=c;while(1){c=d+1|0;if((c|0)==(b|0)){e=b;break a}if(((i[c>>0]|0)+-48|0)>>>0<10)d=c;else{e=c;break}}}else e=a}else e=a;while(0);return e|0}function cEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=i[a>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+4>>2]|0;if(g>>>0>>0)VEa(a);if(f){h=10;j=e}else{e=k[a>>2]|0;h=(e&-2)+-1|0;j=e&255}if((h-g|0)>>>0>=d>>>0){if(d){if(!(j&1))l=a+1|0;else l=k[a+8>>2]|0;if((g|0)==(b|0)){m=c;n=l+b|0}else{j=l+b|0;Eyb(j+d|0,j|0,g-b|0)|0;m=j>>>0<=c>>>0&(l+g|0)>>>0>c>>>0?c+d|0:c;n=j}Eyb(n|0,m|0,d|0)|0;m=g+d|0;if(!(i[a>>0]&1))i[a>>0]=m<<1;else k[a+4>>2]=m;i[l+m>>0]=0}}else MDa(a,h,g+d-h|0,g,b,0,d,c);return a|0}function dEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0;d=r;r=r+1104|0;e=d+1072|0;f=d+1048|0;g=d+1032|0;h=d+1020|0;j=d+1008|0;l=d+984|0;m=d+972|0;n=d+596|0;o=d+572|0;p=d+548|0;q=d+524|0;s=d+488|0;t=d+460|0;u=d+960|0;v=d+948|0;w=d+936|0;y=d+924|0;z=d+912|0;A=d+900|0;B=d+888|0;C=d+876|0;D=d+864|0;E=d+852|0;F=d+840|0;G=d+828|0;H=d+816|0;I=d+804|0;J=d+792|0;K=d+780|0;L=d+768|0;N=d+756|0;O=d+744|0;P=d+732|0;Q=d+720|0;R=d+708|0;S=d+696|0;T=d+672|0;U=d+656|0;V=d+644|0;W=d+632|0;X=d+620|0;Y=d+608|0;Z=d+584|0;_=d+560|0;$=d+536|0;aa=d+512|0;ba=d+472|0;ca=d+448|0;da=d+436|0;ea=d+424|0;fa=d+400|0;ga=d+384|0;ha=d+372|0;ia=d+360|0;ja=d+348|0;ka=d+336|0;la=d+324|0;ma=d+312|0;na=d+300|0;oa=d+288|0;pa=d+276|0;qa=d+264|0;ra=d+252|0;sa=d+240|0;ta=d+216|0;ua=d+204|0;wa=d+192|0;ya=d+180|0;za=d+168|0;Aa=d+144|0;Ba=d+132|0;Ca=d+120|0;Da=d+108|0;Ea=d+96|0;Ga=d+84|0;Ha=d+72|0;Ia=d+60|0;Ja=d+48|0;Ka=d+36|0;La=d+24|0;Ma=d;Na=b;Oa=Na-a|0;a:do if((Oa|0)>1){Pa=(Oa|0)>3;if(Pa?(i[a>>0]|0)==103:0){Qa=(i[a+1>>0]|0)==115;Ra=Qa;Sa=Qa?a+2|0:a}else{Ra=0;Sa=a}b:do switch(i[Sa>>0]|0){case 76:{Ua=JEa(a,b,c)|0;break a;break}case 84:{Ua=hEa(a,b,c)|0;break a;break}case 102:{Ua=OEa(a,b,c)|0;break a;break}case 97:{switch(i[Sa+1>>0]|0){case 97:{Qa=a+2|0;$Da(u,300135,2);x=0;Va=db(79,Qa|0,b|0,u|0,c|0)|0;Wa=x;x=0;if(Wa&1){Wa=Hc()|0;Xa=M;NDa(u);Ya=Wa;Za=Xa;break b}else{NDa(u);Ua=(Va|0)==(Qa|0)?a:Va;break a}break}case 100:{Va=a+2|0;$Da(v,300154,1);x=0;Qa=db(80,Va|0,b|0,v|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;Wa=M;NDa(v);Ya=Xa;Za=Wa;break b}else{NDa(v);Ua=(Qa|0)==(Va|0)?a:Qa;break a}break}case 110:{Qa=a+2|0;$Da(w,300154,1);x=0;Va=db(79,Qa|0,b|0,w|0,c|0)|0;Wa=x;x=0;if(Wa&1){Wa=Hc()|0;Xa=M;NDa(w);Ya=Wa;Za=Xa;break b}else{NDa(w);Ua=(Va|0)==(Qa|0)?a:Va;break a}break}case 78:{Va=a+2|0;$Da(y,301257,2);x=0;Qa=db(79,Va|0,b|0,y|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;Wa=M;NDa(y);Ya=Xa;Za=Wa;break b}else{NDa(y);Ua=(Qa|0)==(Va|0)?a:Qa;break a}break}case 83:{Qa=a+2|0;$Da(z,301260,1);x=0;Va=db(79,Qa|0,b|0,z|0,c|0)|0;Wa=x;x=0;if(Wa&1){Wa=Hc()|0;Xa=M;NDa(z);Ya=Wa;Za=Xa;break b}else{NDa(z);Ua=(Va|0)==(Qa|0)?a:Va;break a}break}case 116:{c:do if(((((Oa|0)>2?(i[a>>0]|0)==97:0)?(i[a+1>>0]|0)==116:0)?(Va=a+2|0,Qa=RDa(Va,b,c)|0,(Qa|0)!=(Va|0)):0)?(Va=k[c+4>>2]|0,(k[c>>2]|0)!=(Va|0)):0){Xa=Va+-24|0;fEa(g,Xa);x=0;Wa=Fa(147,g|0,0,301262)|0;_a=x;x=0;do if(_a&1){$a=Hc()|0;ab=M;bb=$a}else{k[f>>2]=k[Wa>>2];k[f+4>>2]=k[Wa+4>>2];k[f+8>>2]=k[Wa+8>>2];$a=0;while(1){if(($a|0)==3)break;k[Wa+($a<<2)>>2]=0;$a=$a+1|0}x=0;$a=Ta(630,f|0,300015)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;eb=M;NDa(f);ab=eb;bb=cb;break};k[e>>2]=k[$a>>2];k[e+4>>2]=k[$a+4>>2];k[e+8>>2]=k[$a+8>>2];cb=0;while(1){if((cb|0)==3)break;k[$a+(cb<<2)>>2]=0;cb=cb+1|0}do if(i[Xa>>0]&1){cb=Va+-16|0;i[k[cb>>2]>>0]=0;$a=Va+-20|0;k[$a>>2]=0;eb=i[Xa>>0]|0;if(!(eb&1)){gb=eb;hb=10}else{eb=k[Xa>>2]|0;gb=eb&255;hb=(eb&-2)+-1|0}if(!(gb&1)){eb=(gb&255)>>>1;if((gb&255)<22){ib=10;jb=eb;kb=1}else{ib=(eb+16&240)+-1|0;jb=eb;kb=1}}else{ib=10;jb=0;kb=0}if((ib|0)!=(hb|0)){if((ib|0)==10){eb=Xa+1|0;lb=k[cb>>2]|0;if(kb){Dyb(eb|0,lb|0,((gb&255)>>>1)+1|0)|0;yYa(lb)}else{i[eb>>0]=i[lb>>0]|0;yYa(lb)}i[Xa>>0]=jb<<1;break}lb=ib+1|0;eb=xYa(lb)|0;if(ib>>>0<=hb>>>0&(eb|0)==0)break;if(kb)Dyb(eb|0,Xa+1|0,((gb&255)>>>1)+1|0)|0;else{mb=k[cb>>2]|0;i[eb>>0]=i[mb>>0]|0;yYa(mb)}k[Xa>>2]=lb|1;k[$a>>2]=jb;k[cb>>2]=eb}}else{i[Xa+1>>0]=0;i[Xa>>0]=0}while(0);k[Xa>>2]=k[e>>2];k[Xa+4>>2]=k[e+4>>2];k[Xa+8>>2]=k[e+8>>2];eb=0;while(1){if((eb|0)==3)break;k[e+(eb<<2)>>2]=0;eb=eb+1|0}NDa(e);NDa(f);NDa(g);nb=Qa;break c}while(0);NDa(g);Sc(bb|0)}else nb=a;while(0);Ua=nb;break a;break}case 122:{d:do if(((((Oa|0)>2?(i[a>>0]|0)==97:0)?(i[a+1>>0]|0)==122:0)?(Qa=a+2|0,Xa=dEa(Qa,b,c)|0,(Xa|0)!=(Qa|0)):0)?(Qa=k[c+4>>2]|0,(k[c>>2]|0)!=(Qa|0)):0){Va=Qa+-24|0;fEa(g,Va);x=0;Wa=Fa(147,g|0,0,301262)|0;_a=x;x=0;do if(_a&1){eb=Hc()|0;ob=M;pb=eb}else{k[f>>2]=k[Wa>>2];k[f+4>>2]=k[Wa+4>>2];k[f+8>>2]=k[Wa+8>>2];eb=0;while(1){if((eb|0)==3)break;k[Wa+(eb<<2)>>2]=0;eb=eb+1|0}x=0;eb=Ta(630,f|0,300015)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;$a=M;NDa(f);ob=$a;pb=cb;break};k[e>>2]=k[eb>>2];k[e+4>>2]=k[eb+4>>2];k[e+8>>2]=k[eb+8>>2];cb=0;while(1){if((cb|0)==3)break;k[eb+(cb<<2)>>2]=0;cb=cb+1|0}do if(i[Va>>0]&1){cb=Qa+-16|0;i[k[cb>>2]>>0]=0;eb=Qa+-20|0;k[eb>>2]=0;$a=i[Va>>0]|0;if(!($a&1)){qb=$a;rb=10}else{$a=k[Va>>2]|0;qb=$a&255;rb=($a&-2)+-1|0}if(!(qb&1)){$a=(qb&255)>>>1;if((qb&255)<22){sb=1;tb=10;ub=$a}else{sb=1;tb=($a+16&240)+-1|0;ub=$a}}else{sb=0;tb=10;ub=0}if((tb|0)!=(rb|0)){if((tb|0)==10){$a=Va+1|0;lb=k[cb>>2]|0;if(sb){Dyb($a|0,lb|0,((qb&255)>>>1)+1|0)|0;yYa(lb)}else{i[$a>>0]=i[lb>>0]|0;yYa(lb)}i[Va>>0]=ub<<1;break}lb=tb+1|0;$a=xYa(lb)|0;if(tb>>>0<=rb>>>0&($a|0)==0)break;if(sb)Dyb($a|0,Va+1|0,((qb&255)>>>1)+1|0)|0;else{mb=k[cb>>2]|0;i[$a>>0]=i[mb>>0]|0;yYa(mb)}k[Va>>2]=lb|1;k[eb>>2]=ub;k[cb>>2]=$a}}else{i[Va+1>>0]=0;i[Va>>0]=0}while(0);k[Va>>2]=k[e>>2];k[Va+4>>2]=k[e+4>>2];k[Va+8>>2]=k[e+8>>2];$a=0;while(1){if(($a|0)==3)break;k[e+($a<<2)>>2]=0;$a=$a+1|0}NDa(e);NDa(f);NDa(g);vb=Xa;break d}while(0);NDa(g);Sc(pb|0)}else vb=a;while(0);Ua=vb;break a;break}default:{Ua=a;break a}}break}case 99:{switch(i[Sa+1>>0]|0){case 99:{e:do if((((((Oa|0)>2?(i[a>>0]|0)==99:0)?(i[a+1>>0]|0)==99:0)?(Xa=a+2|0,Va=RDa(Xa,b,c)|0,(Va|0)!=(Xa|0)):0)?(Xa=dEa(Va,b,c)|0,(Xa|0)!=(Va|0)):0)?(Va=c+4|0,Qa=k[Va>>2]|0,((Qa-(k[c>>2]|0)|0)/24|0)>>>0>=2):0){fEa(e,Qa+-24|0);Qa=k[Va>>2]|0;Wa=Qa+-24|0;_a=Qa;while(1){if((_a|0)==(Wa|0))break;$a=_a+-24|0;k[Va>>2]=$a;CDa($a);_a=k[Va>>2]|0}Va=Qa+-48|0;x=0;xa(932,m|0,Va|0);_a=x;x=0;if(_a&1){_a=Hc()|0;wb=M;xb=_a}else{x=0;_a=Fa(147,m|0,0,301272)|0;Wa=x;x=0;if(Wa&1){Wa=Hc()|0;yb=M;zb=Wa}else{k[l>>2]=k[_a>>2];k[l+4>>2]=k[_a+4>>2];k[l+8>>2]=k[_a+8>>2];Wa=0;while(1){if((Wa|0)==3)break;k[_a+(Wa<<2)>>2]=0;Wa=Wa+1|0}x=0;Wa=Ta(630,l|0,301284)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Ab=M;Bb=_a}else{k[j>>2]=k[Wa>>2];k[j+4>>2]=k[Wa+4>>2];k[j+8>>2]=k[Wa+8>>2];_a=0;while(1){if((_a|0)==3)break;k[Wa+(_a<<2)>>2]=0;_a=_a+1|0}_a=i[e>>0]|0;Wa=(_a&1)==0;x=0;Qa=Fa(146,j|0,(Wa?e+1|0:k[e+8>>2]|0)|0,(Wa?(_a&255)>>>1:k[e+4>>2]|0)|0)|0;_a=x;x=0;do if(_a&1){Wa=Hc()|0;Cb=M;Db=Wa}else{k[h>>2]=k[Qa>>2];k[h+4>>2]=k[Qa+4>>2];k[h+8>>2]=k[Qa+8>>2];Wa=0;while(1){if((Wa|0)==3)break;k[Qa+(Wa<<2)>>2]=0;Wa=Wa+1|0}x=0;Wa=Ta(630,h|0,300015)|0;$a=x;x=0;if($a&1){$a=Hc()|0;cb=M;NDa(h);Cb=cb;Db=$a;break};k[g>>2]=k[Wa>>2];k[g+4>>2]=k[Wa+4>>2];k[g+8>>2]=k[Wa+8>>2];$a=0;while(1){if(($a|0)==3)break;k[Wa+($a<<2)>>2]=0;$a=$a+1|0}lEa(f,g);mEa(Va,f);CDa(f);NDa(g);NDa(h);NDa(j);NDa(l);NDa(m);NDa(e);Eb=Xa;break e}while(0);NDa(j);Ab=Cb;Bb=Db}NDa(l);yb=Ab;zb=Bb}NDa(m);wb=yb;xb=zb}NDa(e);Sc(xb|0)}else Eb=a;while(0);Ua=Eb;break a;break}case 108:{f:do if((((Pa?(i[a>>0]|0)==99:0)?(i[a+1>>0]|0)==108:0)?(Xa=a+2|0,Va=dEa(Xa,b,c)|0,!((Va|0)==(Xa|0)|(Va|0)==(b|0))):0)?(Xa=c+4|0,Qa=k[Xa>>2]|0,(k[c>>2]|0)!=(Qa|0)):0){_a=Qa+-12|0;$a=i[_a>>0]|0;Wa=($a&1)==0;EDa(Qa+-24|0,Wa?_a+1|0:k[Qa+-4>>2]|0,Wa?($a&255)>>>1:k[Qa+-8>>2]|0)|0;Qa=k[Xa>>2]|0;$a=0;while(1){if(($a|0)==3)break;k[e+($a<<2)>>2]=0;$a=$a+1|0}$a=Qa+-12|0;do if(i[$a>>0]&1){Wa=Qa+-4|0;i[k[Wa>>2]>>0]=0;_a=Qa+-8|0;k[_a>>2]=0;cb=i[$a>>0]|0;if(!(cb&1)){Fb=cb;Gb=10}else{cb=k[$a>>2]|0;Fb=cb&255;Gb=(cb&-2)+-1|0}if(!(Fb&1)){cb=(Fb&255)>>>1;if((Fb&255)<22){Hb=1;Ib=10;Jb=cb}else{Hb=1;Ib=(cb+16&240)+-1|0;Jb=cb}}else{Hb=0;Ib=10;Jb=0}if((Ib|0)!=(Gb|0)){if((Ib|0)==10){cb=$a+1|0;eb=k[Wa>>2]|0;if(Hb){Dyb(cb|0,eb|0,((Fb&255)>>>1)+1|0)|0;yYa(eb)}else{i[cb>>0]=i[eb>>0]|0;yYa(eb)}i[$a>>0]=Jb<<1;break}eb=Ib+1|0;cb=xYa(eb)|0;if(!(Ib>>>0<=Gb>>>0&(cb|0)==0)){if(Hb)Dyb(cb|0,$a+1|0,((Fb&255)>>>1)+1|0)|0;else{lb=k[Wa>>2]|0;i[cb>>0]=i[lb>>0]|0;yYa(lb)}k[$a>>2]=eb|1;k[_a>>2]=Jb;k[Wa>>2]=cb}}}else{i[$a+1>>0]=0;i[$a>>0]=0}while(0);k[$a>>2]=k[e>>2];k[$a+4>>2]=k[e+4>>2];k[$a+8>>2]=k[e+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[e+(Qa<<2)>>2]=0;Qa=Qa+1|0}NDa(e);QDa((k[Xa>>2]|0)+-24|0,300108)|0;Qa=f+4|0;$a=f+8|0;cb=f+1|0;Wa=Va;while(1){if((i[Wa>>0]|0)==69){Kb=Wa;Lb=183;break}_a=dEa(Wa,b,c)|0;if((_a|0)==(Wa|0)|(_a|0)==(b|0)){Mb=a;break f}eb=k[Xa>>2]|0;if((k[c>>2]|0)==(eb|0)){Mb=a;break f}fEa(f,eb+-24|0);eb=k[Xa>>2]|0;lb=eb+-24|0;mb=eb;while(1){if((mb|0)==(lb|0))break;Nb=mb+-24|0;k[Xa>>2]=Nb;CDa(Nb);mb=k[Xa>>2]|0}mb=i[f>>0]|0;Nb=(mb&1)==0;Ob=Nb?(mb&255)>>>1:k[Qa>>2]|0;if(Ob){if((k[c>>2]|0)==(lb|0)){Lb=182;break}x=0;Fa(146,eb+-48|0,(Nb?cb:k[$a>>2]|0)|0,Ob|0)|0;Ob=x;x=0;if(Ob&1){Lb=179;break}}NDa(f);Wa=_a}if((Lb|0)==179){Wa=Hc()|0;NDa(f);Sc(Wa|0)}else if((Lb|0)==182){NDa(f);Mb=a;break}else if((Lb|0)==183){Wa=k[Xa>>2]|0;if((k[c>>2]|0)==(Wa|0)){Mb=a;break}QDa(Wa+-24|0,300015)|0;Mb=Kb+1|0;break}}else Mb=a;while(0);Ua=Mb;break a;break}case 109:{Wa=a+2|0;$Da(A,301287,1);x=0;$a=db(79,Wa|0,b|0,A|0,c|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;Qa=M;NDa(A);Ya=cb;Za=Qa;break b}else{NDa(A);Ua=($a|0)==(Wa|0)?a:$a;break a}break}case 111:{$a=a+2|0;$Da(B,300318,1);x=0;Wa=db(80,$a|0,b|0,B|0,c|0)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;cb=M;NDa(B);Ya=Qa;Za=cb;break b}else{NDa(B);Ua=(Wa|0)==($a|0)?a:Wa;break a}break}case 118:{g:do if((((Oa|0)>2?(i[a>>0]|0)==99:0)?(i[a+1>>0]|0)==118:0)?(Wa=c+63|0,$a=i[Wa>>0]|0,i[Wa>>0]=0,cb=a+2|0,Qa=RDa(cb,b,c)|0,i[Wa>>0]=$a,!((Qa|0)==(cb|0)|(Qa|0)==(b|0))):0){if((i[Qa>>0]|0)!=95){cb=dEa(Qa,b,c)|0;if((cb|0)==(Qa|0)){Pb=a;break}else Qb=cb}else{cb=Qa+1|0;if((cb|0)==(b|0)){Pb=a;break}Qa=i[cb>>0]|0;h:do if(Qa<<24>>24==69){$a=c+4|0;Wa=k[$a>>2]|0;Va=k[c+8>>2]|0;Ob=Va;if(Wa>>>0>>0){k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[Wa+16>>2]=0;k[Wa+20>>2]=0;Va=0;while(1){if((Va|0)==3)break;k[Wa+(Va<<2)>>2]=0;Va=Va+1|0}Va=Wa+12|0;_a=0;while(1){if((_a|0)==3)break;k[Va+(_a<<2)>>2]=0;_a=_a+1|0}k[$a>>2]=(k[$a>>2]|0)+24;Rb=cb;break}_a=k[c>>2]|0;Va=Wa-_a|0;eb=(Va|0)/24|0;lb=eb+1|0;if((Va|0)<-24)HBa(c);Va=(Ob-_a|0)/24|0;if(Va>>>0<1073741823){_a=Va<<1;Sb=_a>>>0>>0?lb:_a}else Sb=2147483647;XDa(e,Sb,eb,c+12|0);eb=e+8|0;_a=k[eb>>2]|0;k[_a>>2]=0;k[_a+4>>2]=0;k[_a+8>>2]=0;k[_a+12>>2]=0;k[_a+16>>2]=0;k[_a+20>>2]=0;lb=0;while(1){if((lb|0)==3)break;k[_a+(lb<<2)>>2]=0;lb=lb+1|0}lb=_a+12|0;Ob=0;while(1){if((Ob|0)==3)break;k[lb+(Ob<<2)>>2]=0;Ob=Ob+1|0}k[eb>>2]=_a+24;ZDa(c,e);YDa(e);Rb=cb}else{Ob=Qa;lb=cb;while(1){if(Ob<<24>>24==69){Rb=lb;break h}Wa=dEa(lb,b,c)|0;$a=(Wa|0)==(lb|0)|(Wa|0)==(b|0);if($a){Pb=a;break g}Ob=i[($a?lb:Wa)>>0]|0;lb=Wa}}while(0);Qb=Rb+1|0}cb=c+4|0;Qa=k[cb>>2]|0;if(((Qa-(k[c>>2]|0)|0)/24|0)>>>0>=2){fEa(e,Qa+-24|0);Qa=k[cb>>2]|0;Xa=Qa+-24|0;lb=Qa;while(1){if((lb|0)==(Xa|0))break;Ob=lb+-24|0;k[cb>>2]=Ob;CDa(Ob);lb=k[cb>>2]|0}cb=Qa+-48|0;x=0;xa(932,m|0,cb|0);lb=x;x=0;if(lb&1){lb=Hc()|0;Tb=M;Ub=lb}else{x=0;lb=Fa(147,m|0,0,300108)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;Vb=M;Wb=Xa}else{k[l>>2]=k[lb>>2];k[l+4>>2]=k[lb+4>>2];k[l+8>>2]=k[lb+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[lb+(Xa<<2)>>2]=0;Xa=Xa+1|0}x=0;Xa=Ta(630,l|0,301289)|0;lb=x;x=0;if(lb&1){lb=Hc()|0;Xb=M;Yb=lb}else{k[j>>2]=k[Xa>>2];k[j+4>>2]=k[Xa+4>>2];k[j+8>>2]=k[Xa+8>>2];lb=0;while(1){if((lb|0)==3)break;k[Xa+(lb<<2)>>2]=0;lb=lb+1|0}lb=i[e>>0]|0;Xa=(lb&1)==0;x=0;Qa=Fa(146,j|0,(Xa?e+1|0:k[e+8>>2]|0)|0,(Xa?(lb&255)>>>1:k[e+4>>2]|0)|0)|0;lb=x;x=0;do if(lb&1){Xa=Hc()|0;Zb=M;_b=Xa}else{k[h>>2]=k[Qa>>2];k[h+4>>2]=k[Qa+4>>2];k[h+8>>2]=k[Qa+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[Qa+(Xa<<2)>>2]=0;Xa=Xa+1|0}x=0;Xa=Ta(630,h|0,300015)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;_a=M;NDa(h);Zb=_a;_b=Ob;break};k[g>>2]=k[Xa>>2];k[g+4>>2]=k[Xa+4>>2];k[g+8>>2]=k[Xa+8>>2];Ob=0;while(1){if((Ob|0)==3)break;k[Xa+(Ob<<2)>>2]=0;Ob=Ob+1|0}lEa(f,g);mEa(cb,f);CDa(f);NDa(g);NDa(h);NDa(j);NDa(l);NDa(m);NDa(e);Pb=Qb;break g}while(0);NDa(j);Xb=Zb;Yb=_b}NDa(l);Vb=Xb;Wb=Yb}NDa(m);Tb=Vb;Ub=Wb}NDa(e);Sc(Ub|0)}else Pb=a}else Pb=a;while(0);Ua=Pb;break a;break}default:{Ua=a;break a}}break}case 100:{switch(i[Sa+1>>0]|0){case 97:{cb=Sa+2|0;Qa=dEa(cb,b,c)|0;if((Qa|0)==(cb|0)){Ua=a;break a}cb=c+4|0;lb=k[cb>>2]|0;if((k[c>>2]|0)==(lb|0)){Ua=a;break a}Ob=lb+-24|0;i:do if(Ra)$Da(E,300292,2);else{Xa=0;while(1){if((Xa|0)==3)break i;k[E+(Xa<<2)>>2]=0;Xa=Xa+1|0}}while(0);x=0;Xa=Ta(630,E|0,301292)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;$b=_a;ac=M}else{k[D>>2]=k[Xa>>2];k[D+4>>2]=k[Xa+4>>2];k[D+8>>2]=k[Xa+8>>2];_a=0;while(1){if((_a|0)==3)break;k[Xa+(_a<<2)>>2]=0;_a=_a+1|0}x=0;xa(932,F|0,(k[cb>>2]|0)+-24|0);_a=x;x=0;do if(_a&1){Xa=Hc()|0;bc=Xa;cc=M}else{Xa=i[F>>0]|0;eb=(Xa&1)==0;x=0;Wa=Fa(146,D|0,(eb?F+1|0:k[F+8>>2]|0)|0,(eb?(Xa&255)>>>1:k[F+4>>2]|0)|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;eb=M;NDa(F);bc=Xa;cc=eb;break};k[C>>2]=k[Wa>>2];k[C+4>>2]=k[Wa+4>>2];k[C+8>>2]=k[Wa+8>>2];eb=0;while(1){if((eb|0)==3)break;k[Wa+(eb<<2)>>2]=0;eb=eb+1|0}do if(i[Ob>>0]&1){eb=lb+-16|0;i[k[eb>>2]>>0]=0;Wa=lb+-20|0;k[Wa>>2]=0;Xa=i[Ob>>0]|0;if(!(Xa&1)){dc=Xa;ec=10}else{Xa=k[Ob>>2]|0;dc=Xa&255;ec=(Xa&-2)+-1|0}if(!(dc&1)){Xa=(dc&255)>>>1;if((dc&255)<22){fc=1;gc=10;hc=Xa}else{fc=1;gc=(Xa+16&240)+-1|0;hc=Xa}}else{fc=0;gc=10;hc=0}if((gc|0)!=(ec|0)){if((gc|0)==10){Xa=Ob+1|0;$a=k[eb>>2]|0;if(fc){Dyb(Xa|0,$a|0,((dc&255)>>>1)+1|0)|0;yYa($a)}else{i[Xa>>0]=i[$a>>0]|0;yYa($a)}i[Ob>>0]=hc<<1;break}$a=gc+1|0;Xa=xYa($a)|0;if(!(gc>>>0<=ec>>>0&(Xa|0)==0)){if(fc)Dyb(Xa|0,Ob+1|0,((dc&255)>>>1)+1|0)|0;else{Va=k[eb>>2]|0;i[Xa>>0]=i[Va>>0]|0;yYa(Va)}k[Ob>>2]=$a|1;k[Wa>>2]=hc;k[eb>>2]=Xa}}}else{i[Ob+1>>0]=0;i[Ob>>0]=0}while(0);k[Ob>>2]=k[C>>2];k[Ob+4>>2]=k[C+4>>2];k[Ob+8>>2]=k[C+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[C+(Xa<<2)>>2]=0;Xa=Xa+1|0}NDa(C);NDa(F);NDa(D);NDa(E);Ua=Qa;break a}while(0);NDa(D);$b=bc;ac=cc}NDa(E);Ya=$b;Za=ac;break b;break}case 99:{j:do if((((((Oa|0)>2?(i[a>>0]|0)==100:0)?(i[a+1>>0]|0)==99:0)?(Qa=a+2|0,Ob=RDa(Qa,b,c)|0,(Ob|0)!=(Qa|0)):0)?(Qa=dEa(Ob,b,c)|0,(Qa|0)!=(Ob|0)):0)?(Ob=c+4|0,lb=k[Ob>>2]|0,((lb-(k[c>>2]|0)|0)/24|0)>>>0>=2):0){fEa(e,lb+-24|0);lb=k[Ob>>2]|0;_a=lb+-24|0;cb=lb;while(1){if((cb|0)==(_a|0))break;Xa=cb+-24|0;k[Ob>>2]=Xa;CDa(Xa);cb=k[Ob>>2]|0}Ob=lb+-48|0;x=0;xa(932,m|0,Ob|0);cb=x;x=0;if(cb&1){cb=Hc()|0;ic=M;jc=cb}else{x=0;cb=Fa(147,m|0,0,301302)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;kc=M;lc=_a}else{k[l>>2]=k[cb>>2];k[l+4>>2]=k[cb+4>>2];k[l+8>>2]=k[cb+8>>2];_a=0;while(1){if((_a|0)==3)break;k[cb+(_a<<2)>>2]=0;_a=_a+1|0}x=0;_a=Ta(630,l|0,301284)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;mc=M;nc=cb}else{k[j>>2]=k[_a>>2];k[j+4>>2]=k[_a+4>>2];k[j+8>>2]=k[_a+8>>2];cb=0;while(1){if((cb|0)==3)break;k[_a+(cb<<2)>>2]=0;cb=cb+1|0}cb=i[e>>0]|0;_a=(cb&1)==0;x=0;lb=Fa(146,j|0,(_a?e+1|0:k[e+8>>2]|0)|0,(_a?(cb&255)>>>1:k[e+4>>2]|0)|0)|0;cb=x;x=0;do if(cb&1){_a=Hc()|0;oc=M;pc=_a}else{k[h>>2]=k[lb>>2];k[h+4>>2]=k[lb+4>>2];k[h+8>>2]=k[lb+8>>2];_a=0;while(1){if((_a|0)==3)break;k[lb+(_a<<2)>>2]=0;_a=_a+1|0}x=0;_a=Ta(630,h|0,300015)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;eb=M;NDa(h);oc=eb;pc=Xa;break};k[g>>2]=k[_a>>2];k[g+4>>2]=k[_a+4>>2];k[g+8>>2]=k[_a+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[_a+(Xa<<2)>>2]=0;Xa=Xa+1|0}lEa(f,g);mEa(Ob,f);CDa(f);NDa(g);NDa(h);NDa(j);NDa(l);NDa(m);NDa(e);qc=Qa;break j}while(0);NDa(j);mc=oc;nc=pc}NDa(l);kc=mc;lc=nc}NDa(m);ic=kc;jc=lc}NDa(e);Sc(jc|0)}else qc=a;while(0);Ua=qc;break a;break}case 101:{Qa=a+2|0;$Da(G,329972,1);x=0;Ob=db(80,Qa|0,b|0,G|0,c|0)|0;lb=x;x=0;if(lb&1){lb=Hc()|0;cb=M;NDa(G);Ya=lb;Za=cb;break b}else{NDa(G);Ua=(Ob|0)==(Qa|0)?a:Ob;break a}break}case 108:{Ob=Sa+2|0;Qa=dEa(Ob,b,c)|0;if((Qa|0)==(Ob|0)){Ua=a;break a}Ob=c+4|0;cb=k[Ob>>2]|0;if((k[c>>2]|0)==(cb|0)){Ua=a;break a}lb=cb+-24|0;k:do if(Ra)$Da(J,300292,2);else{Xa=0;while(1){if((Xa|0)==3)break k;k[J+(Xa<<2)>>2]=0;Xa=Xa+1|0}}while(0);x=0;Xa=Ta(630,J|0,301316)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;rc=_a;sc=M}else{k[I>>2]=k[Xa>>2];k[I+4>>2]=k[Xa+4>>2];k[I+8>>2]=k[Xa+8>>2];_a=0;while(1){if((_a|0)==3)break;k[Xa+(_a<<2)>>2]=0;_a=_a+1|0}x=0;xa(932,K|0,(k[Ob>>2]|0)+-24|0);_a=x;x=0;do if(_a&1){Xa=Hc()|0;tc=Xa;uc=M}else{Xa=i[K>>0]|0;eb=(Xa&1)==0;x=0;Wa=Fa(146,I|0,(eb?K+1|0:k[K+8>>2]|0)|0,(eb?(Xa&255)>>>1:k[K+4>>2]|0)|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;eb=M;NDa(K);tc=Xa;uc=eb;break};k[H>>2]=k[Wa>>2];k[H+4>>2]=k[Wa+4>>2];k[H+8>>2]=k[Wa+8>>2];eb=0;while(1){if((eb|0)==3)break;k[Wa+(eb<<2)>>2]=0;eb=eb+1|0}do if(i[lb>>0]&1){eb=cb+-16|0;i[k[eb>>2]>>0]=0;Wa=cb+-20|0;k[Wa>>2]=0;Xa=i[lb>>0]|0;if(!(Xa&1)){vc=Xa;wc=10}else{Xa=k[lb>>2]|0;vc=Xa&255;wc=(Xa&-2)+-1|0}if(!(vc&1)){Xa=(vc&255)>>>1;if((vc&255)<22){xc=1;yc=10;zc=Xa}else{xc=1;yc=(Xa+16&240)+-1|0;zc=Xa}}else{xc=0;yc=10;zc=0}if((yc|0)!=(wc|0)){if((yc|0)==10){Xa=lb+1|0;$a=k[eb>>2]|0;if(xc){Dyb(Xa|0,$a|0,((vc&255)>>>1)+1|0)|0;yYa($a)}else{i[Xa>>0]=i[$a>>0]|0;yYa($a)}i[lb>>0]=zc<<1;break}$a=yc+1|0;Xa=xYa($a)|0;if(!(yc>>>0<=wc>>>0&(Xa|0)==0)){if(xc)Dyb(Xa|0,lb+1|0,((vc&255)>>>1)+1|0)|0;else{Va=k[eb>>2]|0;i[Xa>>0]=i[Va>>0]|0;yYa(Va)}k[lb>>2]=$a|1;k[Wa>>2]=zc;k[eb>>2]=Xa}}}else{i[lb+1>>0]=0;i[lb>>0]=0}while(0);k[lb>>2]=k[H>>2];k[lb+4>>2]=k[H+4>>2];k[lb+8>>2]=k[H+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[H+(Xa<<2)>>2]=0;Xa=Xa+1|0}NDa(H);NDa(K);NDa(I);NDa(J);Ua=Qa;break a}while(0);NDa(I);rc=tc;sc=uc}NDa(J);Ya=rc;Za=sc;break b;break}case 110:{Ua=REa(a,b,c)|0;break a;break}case 115:{l:do if((((((Oa|0)>2?(i[a>>0]|0)==100:0)?(i[a+1>>0]|0)==115:0)?(Qa=a+2|0,lb=dEa(Qa,b,c)|0,(lb|0)!=(Qa|0)):0)?(Qa=dEa(lb,b,c)|0,(Qa|0)!=(lb|0)):0)?(lb=c+4|0,cb=k[lb>>2]|0,((cb-(k[c>>2]|0)|0)/24|0)>>>0>=2):0){fEa(e,cb+-24|0);cb=k[lb>>2]|0;_a=cb+-24|0;Ob=cb;while(1){if((Ob|0)==(_a|0))break;Xa=Ob+-24|0;k[lb>>2]=Xa;CDa(Xa);Ob=k[lb>>2]|0}x=0;fb(415,f|0,301324,e|0);lb=x;x=0;do if(!(lb&1)){Ob=i[f>>0]|0;_a=(Ob&1)==0;x=0;Fa(146,cb+-48|0,(_a?f+1|0:k[f+8>>2]|0)|0,(_a?(Ob&255)>>>1:k[f+4>>2]|0)|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;_a=M;NDa(f);Ac=_a;Bc=Ob;break}else{NDa(f);NDa(e);Cc=Qa;break l}}else{Ob=Hc()|0;Ac=M;Bc=Ob}while(0);NDa(e);Sc(Bc|0)}else Cc=a;while(0);Ua=Cc;break a;break}case 116:{m:do if((((((Oa|0)>2?(i[a>>0]|0)==100:0)?(i[a+1>>0]|0)==116:0)?(Qa=a+2|0,cb=dEa(Qa,b,c)|0,(cb|0)!=(Qa|0)):0)?(Qa=REa(cb,b,c)|0,(Qa|0)!=(cb|0)):0)?(cb=c+4|0,lb=k[cb>>2]|0,((lb-(k[c>>2]|0)|0)/24|0)>>>0>=2):0){fEa(e,lb+-24|0);lb=k[cb>>2]|0;Ob=lb+-24|0;_a=lb;while(1){if((_a|0)==(Ob|0))break;Xa=_a+-24|0;k[cb>>2]=Xa;CDa(Xa);_a=k[cb>>2]|0}x=0;fb(415,f|0,324339,e|0);cb=x;x=0;do if(!(cb&1)){_a=i[f>>0]|0;Ob=(_a&1)==0;x=0;Fa(146,lb+-48|0,(Ob?f+1|0:k[f+8>>2]|0)|0,(Ob?(_a&255)>>>1:k[f+4>>2]|0)|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Ob=M;NDa(f);Dc=Ob;Ec=_a;break}else{NDa(f);NDa(e);Fc=Qa;break m}}else{_a=Hc()|0;Dc=M;Ec=_a}while(0);NDa(e);Sc(Ec|0)}else Fc=a;while(0);Ua=Fc;break a;break}case 118:{Qa=a+2|0;$Da(L,317633,1);x=0;lb=db(79,Qa|0,b|0,L|0,c|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;_a=M;NDa(L);Ya=cb;Za=_a;break b}else{NDa(L);Ua=(lb|0)==(Qa|0)?a:lb;break a}break}case 86:{lb=a+2|0;$Da(N,301327,2);x=0;Qa=db(79,lb|0,b|0,N|0,c|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;cb=M;NDa(N);Ya=_a;Za=cb;break b}else{NDa(N);Ua=(Qa|0)==(lb|0)?a:Qa;break a}break}default:{Ua=a;break a}}break}case 101:{switch(i[Sa+1>>0]|0){case 111:{Qa=a+2|0;$Da(O,301330,1);x=0;lb=db(79,Qa|0,b|0,O|0,c|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;_a=M;NDa(O);Ya=cb;Za=_a;break b}else{NDa(O);Ua=(lb|0)==(Qa|0)?a:lb;break a}break}case 79:{lb=a+2|0;$Da(P,301332,2);x=0;Qa=db(79,lb|0,b|0,P|0,c|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;cb=M;NDa(P);Ya=_a;Za=cb;break b}else{NDa(P);Ua=(Qa|0)==(lb|0)?a:Qa;break a}break}case 113:{Qa=a+2|0;$Da(Q,301335,2);x=0;lb=db(79,Qa|0,b|0,Q|0,c|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;_a=M;NDa(Q);Ya=cb;Za=_a;break b}else{NDa(Q);Ua=(lb|0)==(Qa|0)?a:lb;break a}break}default:{Ua=a;break a}}break}case 103:{switch(i[Sa+1>>0]|0){case 101:{lb=a+2|0;$Da(R,301338,2);x=0;Qa=db(79,lb|0,b|0,R|0,c|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;cb=M;NDa(R);Ya=_a;Za=cb;break b}else{NDa(R);Ua=(Qa|0)==(lb|0)?a:Qa;break a}break}case 116:{Qa=a+2|0;$Da(S,300168,1);x=0;lb=db(79,Qa|0,b|0,S|0,c|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;_a=M;NDa(S);Ya=cb;Za=_a;break b}else{NDa(S);Ua=(lb|0)==(Qa|0)?a:lb;break a}break}default:{Ua=a;break a}}break}case 105:{if((i[Sa+1>>0]|0)!=120){Ua=a;break a}lb=a+2|0;Qa=dEa(lb,b,c)|0;if((Qa|0)==(lb|0)){Ua=a;break a}lb=dEa(Qa,b,c)|0;_a=c+4|0;if((lb|0)==(Qa|0)){Qa=k[_a>>2]|0;cb=Qa+-24|0;Ob=Qa;while(1){if((Ob|0)==(cb|0)){Ua=a;break a}Qa=Ob+-24|0;k[_a>>2]=Qa;CDa(Qa);Ob=k[_a>>2]|0}}Ob=k[_a>>2]|0;if(((Ob-(k[c>>2]|0)|0)/24|0)>>>0<2){Ua=a;break a}fEa(f,Ob+-24|0);Ob=k[_a>>2]|0;cb=Ob+-24|0;Qa=Ob;while(1){if((Qa|0)==(cb|0))break;Xa=Qa+-24|0;k[_a>>2]=Xa;CDa(Xa);Qa=k[_a>>2]|0}x=0;xa(932,g|0,Ob+-48|0);Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Gc=Qa;Ic=M}else{Qa=(k[_a>>2]|0)+-24|0;x=0;fb(415,X|0,300108,g|0);cb=x;x=0;if(cb&1){cb=Hc()|0;Jc=cb;Kc=M}else{x=0;cb=Ta(630,X|0,301341)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;Lc=Xa;Mc=M}else{k[W>>2]=k[cb>>2];k[W+4>>2]=k[cb+4>>2];k[W+8>>2]=k[cb+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[cb+(Xa<<2)>>2]=0;Xa=Xa+1|0}Xa=i[f>>0]|0;cb=(Xa&1)==0;x=0;_a=Fa(146,W|0,(cb?f+1|0:k[f+8>>2]|0)|0,(cb?(Xa&255)>>>1:k[f+4>>2]|0)|0)|0;Xa=x;x=0;do if(Xa&1){cb=Hc()|0;Nc=cb;Oc=M}else{k[V>>2]=k[_a>>2];k[V+4>>2]=k[_a+4>>2];k[V+8>>2]=k[_a+8>>2];cb=0;while(1){if((cb|0)==3)break;k[_a+(cb<<2)>>2]=0;cb=cb+1|0}x=0;cb=Ta(630,V|0,316824)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;eb=M;NDa(V);Nc=Ob;Oc=eb;break};k[U>>2]=k[cb>>2];k[U+4>>2]=k[cb+4>>2];k[U+8>>2]=k[cb+8>>2];eb=0;while(1){if((eb|0)==3)break;k[cb+(eb<<2)>>2]=0;eb=eb+1|0}lEa(T,U);mEa(Qa,T);CDa(T);NDa(U);NDa(V);NDa(W);NDa(X);NDa(g);NDa(f);Ua=lb;break a}while(0);NDa(W);Lc=Nc;Mc=Oc}NDa(X);Jc=Lc;Kc=Mc}NDa(g);Gc=Jc;Ic=Kc}NDa(f);Ya=Gc;Za=Ic;break}case 108:{switch(i[Sa+1>>0]|0){case 101:{lb=a+2|0;$Da(Y,301344,2);x=0;Qa=db(79,lb|0,b|0,Y|0,c|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Xa=M;NDa(Y);Ya=_a;Za=Xa;break b}else{NDa(Y);Ua=(Qa|0)==(lb|0)?a:Qa;break a}break}case 115:{Qa=a+2|0;$Da(Z,301347,2);x=0;lb=db(79,Qa|0,b|0,Z|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;_a=M;NDa(Z);Ya=Xa;Za=_a;break b}else{NDa(Z);Ua=(lb|0)==(Qa|0)?a:lb;break a}break}case 83:{lb=a+2|0;$Da(_,301350,3);x=0;Qa=db(79,lb|0,b|0,_|0,c|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Xa=M;NDa(_);Ya=_a;Za=Xa;break b}else{NDa(_);Ua=(Qa|0)==(lb|0)?a:Qa;break a}break}case 116:{Qa=a+2|0;$Da($,300166,1);x=0;lb=db(79,Qa|0,b|0,$|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;_a=M;NDa($);Ya=Xa;Za=_a;break b}else{NDa($);Ua=(lb|0)==(Qa|0)?a:lb;break a}break}default:{Ua=a;break a}}break}case 109:{switch(i[Sa+1>>0]|0){case 105:{lb=a+2|0;$Da(aa,324194,1);x=0;Qa=db(79,lb|0,b|0,aa|0,c|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Xa=M;NDa(aa);Ya=_a;Za=Xa;break b}else{NDa(aa);Ua=(Qa|0)==(lb|0)?a:Qa;break a}break}case 73:{Qa=a+2|0;$Da(ba,301354,2);x=0;lb=db(79,Qa|0,b|0,ba|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;_a=M;NDa(ba);Ya=Xa;Za=_a;break b}else{NDa(ba);Ua=(lb|0)==(Qa|0)?a:lb;break a}break}case 108:{lb=a+2|0;$Da(ca,329972,1);x=0;Qa=db(79,lb|0,b|0,ca|0,c|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Xa=M;NDa(ca);Ya=_a;Za=Xa;break b}else{NDa(ca);Ua=(Qa|0)==(lb|0)?a:Qa;break a}break}case 76:{Qa=a+2|0;$Da(da,301357,2);x=0;lb=db(79,Qa|0,b|0,da|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;_a=M;NDa(da);Ya=Xa;Za=_a;break b}else{NDa(da);Ua=(lb|0)==(Qa|0)?a:lb;break a}break}case 109:{lb=a+2|0;if((lb|0)!=(b|0)?(i[lb>>0]|0)==95:0){Qa=a+3|0;$Da(ea,301360,2);x=0;_a=db(80,Qa|0,b|0,ea|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;eb=M;NDa(ea);Ya=Xa;Za=eb;break b}else{NDa(ea);Ua=(_a|0)==(Qa|0)?a:_a;break a}}_a=dEa(lb,b,c)|0;if((_a|0)==(lb|0)){Ua=a;break a}lb=k[c+4>>2]|0;if((k[c>>2]|0)==(lb|0)){Ua=a;break a}Qa=lb+-24|0;fEa(ia,Qa);x=0;lb=Fa(147,ia|0,0,300108)|0;eb=x;x=0;do if(eb&1){Xa=Hc()|0;Pc=Xa;Qc=M}else{k[ha>>2]=k[lb>>2];k[ha+4>>2]=k[lb+4>>2];k[ha+8>>2]=k[lb+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[lb+(Xa<<2)>>2]=0;Xa=Xa+1|0}x=0;Xa=Ta(630,ha|0,301363)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;Ob=M;NDa(ha);Pc=cb;Qc=Ob;break};k[ga>>2]=k[Xa>>2];k[ga+4>>2]=k[Xa+4>>2];k[ga+8>>2]=k[Xa+8>>2];Ob=0;while(1){if((Ob|0)==3)break;k[Xa+(Ob<<2)>>2]=0;Ob=Ob+1|0}lEa(fa,ga);mEa(Qa,fa);CDa(fa);NDa(ga);NDa(ha);NDa(ia);Ua=_a;break a}while(0);NDa(ia);Ya=Pc;Za=Qc;break b;break}default:{Ua=a;break a}}break}case 110:{switch(i[Sa+1>>0]|0){case 119:case 97:{n:do if(Pa){_a=i[a>>0]|0;if(_a<<24>>24==103){Qa=(i[a+1>>0]|0)==115;lb=Qa?a+2|0:a;Rc=i[lb>>0]|0;Tc=Qa;Uc=lb}else{Rc=_a;Tc=0;Uc=a}if(Rc<<24>>24==110){_a=i[Uc+1>>0]|0;switch(_a<<24>>24){case 97:case 119:break;default:{Vc=a;break n}}lb=_a<<24>>24==97;_a=Uc+2|0;o:do if((_a|0)!=(b|0)){Qa=0;eb=_a;while(1){if((i[eb>>0]|0)==95){Wc=Qa;Xc=eb;break}Ob=eb;eb=dEa(eb,b,c)|0;Xa=(eb|0)==(Ob|0);Ob=(eb|0)==(b|0);if(Xa|Ob)break o;else Qa=Qa|(Xa|Ob)^1}Qa=Xc+1|0;eb=RDa(Qa,b,c)|0;if(!((eb|0)==(Qa|0)|(eb|0)==(b|0))){Qa=i[eb>>0]|0;p:do if(!((Na-eb|0)>2&Qa<<24>>24==112))if(Qa<<24>>24==69){Yc=0;Zc=eb}else break o;else{if((i[eb+1>>0]|0)!=105)break o;Ob=eb+2|0;while(1){if((i[Ob>>0]|0)==69){Yc=1;Zc=Ob;break p}Xa=Ob;Ob=dEa(Ob,b,c)|0;if((Ob|0)==(Xa|0)|(Ob|0)==(b|0))break o}}while(0);eb=0;while(1){if((eb|0)==3)break;k[f+(eb<<2)>>2]=0;eb=eb+1|0}q:do if(Yc){eb=c+4|0;Qa=k[eb>>2]|0;if((k[c>>2]|0)!=(Qa|0)){x=0;xa(932,g|0,Qa+-24|0);Qa=x;x=0;if(Qa&1)Lb=556;else{r:do if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{Qa=f+8|0;Ob=k[Qa>>2]|0;i[Ob>>0]=0;Xa=f+4|0;k[Xa>>2]=0;cb=k[f>>2]|0;Wa=(cb&-2)+-1|0;$a=cb&255;do if(!($a&1)){Va=cb>>>1&127;if(($a&255)<22){Dyb(f+1|0,Ob|0,(cb>>>1&127)+1|0)|0;yYa(Ob);_c=Va;break}Nb=Va+16&240;mb=Nb+-1|0;if((mb|0)==(Wa|0))break r;$c=xYa(Nb)|0;if(mb>>>0<=Wa>>>0&($c|0)==0)break r;Dyb($c|0,f+1|0,(cb>>>1&127)+1|0)|0;k[f>>2]=Nb|1;k[Xa>>2]=Va;k[Qa>>2]=$c;break r}else{i[f+1>>0]=0;yYa(Ob);_c=0}while(0);i[f>>0]=_c<<1}while(0);k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];Ob=0;while(1){if((Ob|0)==3)break;k[g+(Ob<<2)>>2]=0;Ob=Ob+1|0}NDa(g);Ob=k[eb>>2]|0;Qa=Ob+-24|0;Xa=Ob;while(1){if((Xa|0)==(Qa|0)){ad=eb;bd=c;cd=Qa;Lb=557;break q}Ob=Xa+-24|0;k[eb>>2]=Ob;CDa(Ob);Xa=k[eb>>2]|0}}}else{dd=a;ed=1;Lb=629}}else{eb=c+4|0;ad=eb;bd=c;cd=k[eb>>2]|0;Lb=557}while(0);do if((Lb|0)==557)if((k[bd>>2]|0)!=(cd|0)){x=0;xa(932,h|0,cd+-24|0);eb=x;x=0;if(!(eb&1)){eb=k[ad>>2]|0;Xa=eb+-24|0;Qa=eb;while(1){if((Qa|0)==(Xa|0))break;Ob=Qa+-24|0;k[ad>>2]=Ob;CDa(Ob);Qa=k[ad>>2]|0}Qa=0;while(1){if((Qa|0)==3)break;k[j+(Qa<<2)>>2]=0;Qa=Qa+1|0}s:do if(Wc)if((k[bd>>2]|0)==(Xa|0)){fd=a;gd=1;Lb=628}else{x=0;xa(932,l|0,eb+-48|0);Qa=x;x=0;if(Qa&1){Qa=Hc()|0;hd=M;id=Qa;Lb=631;break}t:do if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{Qa=j+8|0;Ob=k[Qa>>2]|0;i[Ob>>0]=0;cb=j+4|0;k[cb>>2]=0;Wa=k[j>>2]|0;$a=(Wa&-2)+-1|0;$c=Wa&255;do if(!($c&1)){Va=Wa>>>1&127;if(($c&255)<22){Dyb(j+1|0,Ob|0,(Wa>>>1&127)+1|0)|0;yYa(Ob);jd=Va;break}Nb=Va+16&240;mb=Nb+-1|0;if((mb|0)==($a|0))break t;kd=xYa(Nb)|0;if(mb>>>0<=$a>>>0&(kd|0)==0)break t;Dyb(kd|0,j+1|0,(Wa>>>1&127)+1|0)|0;k[j>>2]=Nb|1;k[cb>>2]=Va;k[Qa>>2]=kd;break t}else{i[j+1>>0]=0;yYa(Ob);jd=0}while(0);i[j>>0]=jd<<1}while(0);k[j>>2]=k[l>>2];k[j+4>>2]=k[l+4>>2];k[j+8>>2]=k[l+8>>2];Ob=0;while(1){if((Ob|0)==3)break;k[l+(Ob<<2)>>2]=0;Ob=Ob+1|0}NDa(l);Ob=k[ad>>2]|0;Qa=Ob+-24|0;cb=Ob;while(1){if((cb|0)==(Qa|0)){Lb=585;break s}Ob=cb+-24|0;k[ad>>2]=Ob;CDa(Ob);cb=k[ad>>2]|0}}else Lb=585;while(0);u:do if((Lb|0)==585){eb=0;while(1){if((eb|0)==3)break;k[m+(eb<<2)>>2]=0;eb=eb+1|0}if(Tc?(x=0,fb(416,m|0,300292,2),eb=x,x=0,eb&1):0)Lb=590;else Lb=591;v:do if((Lb|0)==591){x=0;if(lb){QDa(m,301367)|0;eb=x;x=0;if(eb&1){Lb=590;break}}else{QDa(m,324196)|0;eb=x;x=0;if(eb&1){Lb=590;break}}w:do if(Wc){x=0;fb(415,o|0,300108,j|0);eb=x;x=0;if(eb&1){Lb=590;break v}x=0;eb=Ta(630,o|0,301371)|0;Xa=x;x=0;do if(!(Xa&1)){k[n>>2]=k[eb>>2];k[n+4>>2]=k[eb+4>>2];k[n+8>>2]=k[eb+8>>2];cb=0;while(1){if((cb|0)==3)break;k[eb+(cb<<2)>>2]=0;cb=cb+1|0}cb=i[n>>0]|0;Qa=(cb&1)==0;x=0;Fa(146,m|0,(Qa?n+1|0:k[n+8>>2]|0)|0,(Qa?(cb&255)>>>1:k[n+4>>2]|0)|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;Qa=M;NDa(n);ld=Qa;md=cb;break}else{NDa(n);NDa(o);break w}}else{cb=Hc()|0;ld=M;md=cb}while(0);NDa(o);nd=ld;od=md;break v}while(0);eb=i[h>>0]|0;Xa=(eb&1)==0;x=0;Fa(146,m|0,(Xa?h+1|0:k[h+8>>2]|0)|0,(Xa?(eb&255)>>>1:k[h+4>>2]|0)|0)|0;eb=x;x=0;if(eb&1){Lb=590;break}x:do if(Yc){x=0;fb(415,q|0,300012,f|0);eb=x;x=0;if(eb&1){Lb=590;break v}x=0;eb=Ta(630,q|0,300015)|0;Xa=x;x=0;do if(!(Xa&1)){k[p>>2]=k[eb>>2];k[p+4>>2]=k[eb+4>>2];k[p+8>>2]=k[eb+8>>2];cb=0;while(1){if((cb|0)==3)break;k[eb+(cb<<2)>>2]=0;cb=cb+1|0}cb=i[p>>0]|0;Qa=(cb&1)==0;x=0;Fa(146,m|0,(Qa?p+1|0:k[p+8>>2]|0)|0,(Qa?(cb&255)>>>1:k[p+4>>2]|0)|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;Qa=M;NDa(p);pd=Qa;qd=cb;break}else{NDa(p);NDa(q);break x}}else{cb=Hc()|0;pd=M;qd=cb}while(0);NDa(q);nd=pd;od=qd;break v}while(0);k[t>>2]=k[m>>2];k[t+4>>2]=k[m+4>>2];k[t+8>>2]=k[m+8>>2];eb=0;while(1){if((eb|0)==3)break;k[m+(eb<<2)>>2]=0;eb=eb+1|0}lEa(s,t);eb=k[ad>>2]|0;Xa=k[c+8>>2]|0;cb=Xa;if(eb>>>0>>0){eEa(eb,s);k[ad>>2]=(k[ad>>2]|0)+24}else{Xa=k[c>>2]|0;Qa=eb-Xa|0;eb=(Qa|0)/24|0;Ob=eb+1|0;if((Qa|0)<-24){x=0;va(1473,c|0);x=0;Qa=Hc()|0;Wa=M;CDa(s);NDa(t);nd=Wa;od=Qa;break}Qa=(cb-Xa|0)/24|0;if(Qa>>>0<1073741823){Xa=Qa<<1;rd=Xa>>>0>>0?Ob:Xa}else rd=2147483647;XDa(e,rd,eb,c+12|0);eb=e+8|0;Xa=k[eb>>2]|0;eEa(Xa,s);k[eb>>2]=Xa+24;ZDa(c,e);YDa(e)}CDa(s);NDa(t);NDa(m);fd=Zc+1|0;gd=0;Lb=628;break u}while(0);if((Lb|0)==590){Xa=Hc()|0;nd=M;od=Xa}NDa(m);hd=nd;id=od;Lb=631}while(0);if((Lb|0)==628){NDa(j);NDa(h);dd=fd;ed=gd;Lb=629;break}else if((Lb|0)==631){NDa(j);NDa(h);sd=hd;td=id;break}}else Lb=556}else{dd=a;ed=1;Lb=629}while(0);if((Lb|0)==556){Xa=Hc()|0;sd=M;td=Xa}else if((Lb|0)==629){NDa(f);if(!ed){Vc=dd;break n}else break}NDa(f);Sc(td|0)}}while(0);Vc=a}else Vc=a}else Vc=a;while(0);Ua=Vc;break a;break}case 101:{lb=a+2|0;$Da(ja,301374,2);x=0;_a=db(79,lb|0,b|0,ja|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;eb=M;NDa(ja);Ya=Xa;Za=eb;break b}else{NDa(ja);Ua=(_a|0)==(lb|0)?a:_a;break a}break}case 103:{_a=a+2|0;$Da(ka,324194,1);x=0;lb=db(80,_a|0,b|0,ka|0,c|0)|0;eb=x;x=0;if(eb&1){eb=Hc()|0;Xa=M;NDa(ka);Ya=eb;Za=Xa;break b}else{NDa(ka);Ua=(lb|0)==(_a|0)?a:lb;break a}break}case 116:{lb=a+2|0;$Da(la,301377,1);x=0;_a=db(80,lb|0,b|0,la|0,c|0)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;eb=M;NDa(la);Ya=Xa;Za=eb;break b}else{NDa(la);Ua=(_a|0)==(lb|0)?a:_a;break a}break}case 120:{_a=a+2|0;lb=dEa(_a,b,c)|0;y:do if((lb|0)!=(_a|0)?(eb=k[c+4>>2]|0,(k[c>>2]|0)!=(eb|0)):0){Xa=eb+-24|0;fEa(g,Xa);x=0;Ob=Fa(147,g|0,0,301379)|0;Qa=x;x=0;do if(Qa&1){cb=Hc()|0;ud=M;vd=cb}else{k[f>>2]=k[Ob>>2];k[f+4>>2]=k[Ob+4>>2];k[f+8>>2]=k[Ob+8>>2];cb=0;while(1){if((cb|0)==3)break;k[Ob+(cb<<2)>>2]=0;cb=cb+1|0}x=0;cb=Ta(630,f|0,300015)|0;Wa=x;x=0;if(Wa&1){Wa=Hc()|0;$a=M;NDa(f);ud=$a;vd=Wa;break};k[e>>2]=k[cb>>2];k[e+4>>2]=k[cb+4>>2];k[e+8>>2]=k[cb+8>>2];Wa=0;while(1){if((Wa|0)==3)break;k[cb+(Wa<<2)>>2]=0;Wa=Wa+1|0}do if(i[Xa>>0]&1){Wa=eb+-16|0;i[k[Wa>>2]>>0]=0;cb=eb+-20|0;k[cb>>2]=0;$a=i[Xa>>0]|0;if(!($a&1)){wd=$a;xd=10}else{$a=k[Xa>>2]|0;wd=$a&255;xd=($a&-2)+-1|0}if(!(wd&1)){$a=(wd&255)>>>1;if((wd&255)<22){yd=10;zd=$a;Ad=1}else{yd=($a+16&240)+-1|0;zd=$a;Ad=1}}else{yd=10;zd=0;Ad=0}if((yd|0)!=(xd|0)){if((yd|0)==10){$a=Xa+1|0;$c=k[Wa>>2]|0;if(Ad){Dyb($a|0,$c|0,((wd&255)>>>1)+1|0)|0;yYa($c)}else{i[$a>>0]=i[$c>>0]|0;yYa($c)}i[Xa>>0]=zd<<1;break}$c=yd+1|0;$a=xYa($c)|0;if(!(yd>>>0<=xd>>>0&($a|0)==0)){if(Ad)Dyb($a|0,Xa+1|0,((wd&255)>>>1)+1|0)|0;else{kd=k[Wa>>2]|0;i[$a>>0]=i[kd>>0]|0;yYa(kd)}k[Xa>>2]=$c|1;k[cb>>2]=zd;k[Wa>>2]=$a}}}else{i[Xa+1>>0]=0;i[Xa>>0]=0}while(0);k[Xa>>2]=k[e>>2];k[Xa+4>>2]=k[e+4>>2];k[Xa+8>>2]=k[e+8>>2];$a=0;while(1){if(($a|0)==3)break;k[e+($a<<2)>>2]=0;$a=$a+1|0}NDa(e);NDa(f);NDa(g);Bd=lb;break y}while(0);NDa(g);Sc(vd|0)}else Bd=_a;while(0);Ua=(Bd|0)==(_a|0)?a:Bd;break a;break}default:{Ua=a;break a}}break}case 111:{switch(i[Sa+1>>0]|0){case 110:{Ua=REa(a,b,c)|0;break a;break}case 111:{lb=a+2|0;$Da(ma,301390,2);x=0;Xa=db(79,lb|0,b|0,ma|0,c|0)|0;eb=x;x=0;if(eb&1){eb=Hc()|0;Ob=M;NDa(ma);Ya=eb;Za=Ob;break b}else{NDa(ma);Ua=(Xa|0)==(lb|0)?a:Xa;break a}break}case 114:{Xa=a+2|0;$Da(na,301393,1);x=0;lb=db(79,Xa|0,b|0,na|0,c|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;eb=M;NDa(na);Ya=Ob;Za=eb;break b}else{NDa(na);Ua=(lb|0)==(Xa|0)?a:lb;break a}break}case 82:{lb=a+2|0;$Da(oa,301395,2);x=0;Xa=db(79,lb|0,b|0,oa|0,c|0)|0;eb=x;x=0;if(eb&1){eb=Hc()|0;Ob=M;NDa(oa);Ya=eb;Za=Ob;break b}else{NDa(oa);Ua=(Xa|0)==(lb|0)?a:Xa;break a}break}default:{Ua=a;break a}}break}case 112:{switch(i[Sa+1>>0]|0){case 109:{Xa=a+2|0;$Da(pa,301398,3);x=0;lb=db(79,Xa|0,b|0,pa|0,c|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;eb=M;NDa(pa);Ya=Ob;Za=eb;break b}else{NDa(pa);Ua=(lb|0)==(Xa|0)?a:lb;break a}break}case 108:{lb=a+2|0;$Da(qa,324192,1);x=0;Xa=db(79,lb|0,b|0,qa|0,c|0)|0;eb=x;x=0;if(eb&1){eb=Hc()|0;Ob=M;NDa(qa);Ya=eb;Za=Ob;break b}else{NDa(qa);Ua=(Xa|0)==(lb|0)?a:Xa;break a}break}case 76:{Xa=a+2|0;$Da(ra,301402,2);x=0;lb=db(79,Xa|0,b|0,ra|0,c|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;eb=M;NDa(ra);Ya=Ob;Za=eb;break b}else{NDa(ra);Ua=(lb|0)==(Xa|0)?a:lb;break a}break}case 112:{lb=a+2|0;if((lb|0)!=(b|0)?(i[lb>>0]|0)==95:0){Xa=a+3|0;$Da(sa,301405,2);x=0;eb=db(80,Xa|0,b|0,sa|0,c|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Qa=M;NDa(sa);Ya=Ob;Za=Qa;break b}else{NDa(sa);Ua=(eb|0)==(Xa|0)?a:eb;break a}}eb=dEa(lb,b,c)|0;if((eb|0)==(lb|0)){Ua=a;break a}lb=k[c+4>>2]|0;if((k[c>>2]|0)==(lb|0)){Ua=a;break a}Xa=lb+-24|0;fEa(ya,Xa);x=0;lb=Fa(147,ya|0,0,300108)|0;Qa=x;x=0;do if(Qa&1){Ob=Hc()|0;Cd=Ob;Dd=M}else{k[wa>>2]=k[lb>>2];k[wa+4>>2]=k[lb+4>>2];k[wa+8>>2]=k[lb+8>>2];Ob=0;while(1){if((Ob|0)==3)break;k[lb+(Ob<<2)>>2]=0;Ob=Ob+1|0}x=0;Ob=Ta(630,wa|0,301408)|0;$a=x;x=0;if($a&1){$a=Hc()|0;Wa=M;NDa(wa);Cd=$a;Dd=Wa;break};k[ua>>2]=k[Ob>>2];k[ua+4>>2]=k[Ob+4>>2];k[ua+8>>2]=k[Ob+8>>2];Wa=0;while(1){if((Wa|0)==3)break;k[Ob+(Wa<<2)>>2]=0;Wa=Wa+1|0}lEa(ta,ua);mEa(Xa,ta);CDa(ta);NDa(ua);NDa(wa);NDa(ya);Ua=eb;break a}while(0);NDa(ya);Ya=Cd;Za=Dd;break b;break}case 115:{eb=a+2|0;$Da(za,324192,1);x=0;Xa=db(80,eb|0,b|0,za|0,c|0)|0;lb=x;x=0;if(lb&1){lb=Hc()|0;Qa=M;NDa(za);Ya=lb;Za=Qa;break b}else{NDa(za);Ua=(Xa|0)==(eb|0)?a:Xa;break a}break}case 116:{if((Oa|0)<=2){Ua=a;break a}if((i[a>>0]|0)!=112){Ua=a;break a}if((i[a+1>>0]|0)!=116){Ua=a;break a}Xa=a+2|0;eb=dEa(Xa,b,c)|0;if((eb|0)==(Xa|0)){Ua=a;break a}Xa=dEa(eb,b,c)|0;if((Xa|0)==(eb|0)){Ua=a;break a}eb=c+4|0;Qa=k[eb>>2]|0;if(((Qa-(k[c>>2]|0)|0)/24|0)>>>0<2){Ua=a;break a}fEa(e,Qa+-24|0);Qa=k[eb>>2]|0;lb=Qa+-24|0;_a=Qa;while(1){if((_a|0)==(lb|0))break;Wa=_a+-24|0;k[eb>>2]=Wa;CDa(Wa);_a=k[eb>>2]|0}x=0;Ta(630,Qa+-48|0,301412)|0;_a=x;x=0;if(!(_a&1)?(_a=i[e>>0]|0,lb=(_a&1)==0,x=0,Fa(146,(k[eb>>2]|0)+-24|0,(lb?e+1|0:k[e+8>>2]|0)|0,(lb?(_a&255)>>>1:k[e+4>>2]|0)|0)|0,_a=x,x=0,!(_a&1)):0){NDa(e);Ua=Xa;break a}_a=Hc()|0;NDa(e);Sc(_a|0);break}default:{Ua=a;break a}}break}case 113:{if((i[Sa+1>>0]|0)!=117){Ua=a;break a}_a=a+2|0;lb=dEa(_a,b,c)|0;if((lb|0)==(_a|0)){Ua=a;break a}_a=dEa(lb,b,c)|0;if((_a|0)==(lb|0)){lb=c+4|0;Wa=k[lb>>2]|0;Ob=Wa+-24|0;$a=Wa;while(1){if(($a|0)==(Ob|0)){Ua=a;break a}Wa=$a+-24|0;k[lb>>2]=Wa;CDa(Wa);$a=k[lb>>2]|0}}lb=dEa(_a,b,c)|0;$a=c+4|0;if((lb|0)==(_a|0)){Ob=k[$a>>2]|0;Xa=Ob+-24|0;eb=Ob;while(1){if((eb|0)==(Xa|0))break;Qa=eb+-24|0;k[$a>>2]=Qa;CDa(Qa);eb=k[$a>>2]|0}eb=Ob+-48|0;_a=Xa;while(1){if((_a|0)==(eb|0)){Ua=a;break a}Qa=_a+-24|0;k[$a>>2]=Qa;CDa(Qa);_a=k[$a>>2]|0}}_a=k[$a>>2]|0;if(((_a-(k[c>>2]|0)|0)/24|0)>>>0<3){Ua=a;break a}fEa(h,_a+-24|0);_a=k[$a>>2]|0;eb=_a+-24|0;Xa=_a;while(1){if((Xa|0)==(eb|0))break;Ob=Xa+-24|0;k[$a>>2]=Ob;CDa(Ob);Xa=k[$a>>2]|0}x=0;xa(932,j|0,_a+-48|0);Xa=x;x=0;if(Xa&1){Xa=Hc()|0;Ed=Xa;Fd=M}else{Xa=k[$a>>2]|0;eb=Xa+-24|0;Ob=Xa;while(1){if((Ob|0)==(eb|0))break;Qa=Ob+-24|0;k[$a>>2]=Qa;CDa(Qa);Ob=k[$a>>2]|0}x=0;xa(932,l|0,Xa+-48|0);Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Gd=Ob;Hd=M}else{Ob=(k[$a>>2]|0)+-24|0;x=0;fb(415,Ha|0,300108,l|0);eb=x;x=0;if(eb&1){eb=Hc()|0;Id=eb;Jd=M}else{x=0;eb=Ta(630,Ha|0,301415)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Kd=_a;Ld=M}else{k[Ga>>2]=k[eb>>2];k[Ga+4>>2]=k[eb+4>>2];k[Ga+8>>2]=k[eb+8>>2];_a=0;while(1){if((_a|0)==3)break;k[eb+(_a<<2)>>2]=0;_a=_a+1|0}_a=i[j>>0]|0;eb=(_a&1)==0;x=0;$a=Fa(146,Ga|0,(eb?j+1|0:k[j+8>>2]|0)|0,(eb?(_a&255)>>>1:k[j+4>>2]|0)|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Md=_a;Nd=M}else{k[Ea>>2]=k[$a>>2];k[Ea+4>>2]=k[$a+4>>2];k[Ea+8>>2]=k[$a+8>>2];_a=0;while(1){if((_a|0)==3)break;k[$a+(_a<<2)>>2]=0;_a=_a+1|0}x=0;_a=Ta(630,Ea|0,301421)|0;$a=x;x=0;if($a&1){$a=Hc()|0;Od=$a;Pd=M}else{k[Da>>2]=k[_a>>2];k[Da+4>>2]=k[_a+4>>2];k[Da+8>>2]=k[_a+8>>2];$a=0;while(1){if(($a|0)==3)break;k[_a+($a<<2)>>2]=0;$a=$a+1|0}$a=i[h>>0]|0;_a=($a&1)==0;x=0;eb=Fa(146,Da|0,(_a?h+1|0:k[h+8>>2]|0)|0,(_a?($a&255)>>>1:k[h+4>>2]|0)|0)|0;$a=x;x=0;do if($a&1){_a=Hc()|0;Qd=_a;Rd=M}else{k[Ca>>2]=k[eb>>2];k[Ca+4>>2]=k[eb+4>>2];k[Ca+8>>2]=k[eb+8>>2];_a=0;while(1){if((_a|0)==3)break;k[eb+(_a<<2)>>2]=0;_a=_a+1|0}x=0;_a=Ta(630,Ca|0,300015)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;Qa=M;NDa(Ca);Qd=Xa;Rd=Qa;break};k[Ba>>2]=k[_a>>2];k[Ba+4>>2]=k[_a+4>>2];k[Ba+8>>2]=k[_a+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[_a+(Qa<<2)>>2]=0;Qa=Qa+1|0}lEa(Aa,Ba);mEa(Ob,Aa);CDa(Aa);NDa(Ba);NDa(Ca);NDa(Da);NDa(Ea);NDa(Ga);NDa(Ha);NDa(l);NDa(j);NDa(h);Ua=lb;break a}while(0);NDa(Da);Od=Qd;Pd=Rd}NDa(Ea);Md=Od;Nd=Pd}NDa(Ga);Kd=Md;Ld=Nd}NDa(Ha);Id=Kd;Jd=Ld}NDa(l);Gd=Id;Hd=Jd}NDa(j);Ed=Gd;Fd=Hd}NDa(h);Ya=Ed;Za=Fd;break}case 114:{switch(i[Sa+1>>0]|0){case 99:{z:do if((((((Oa|0)>2?(i[a>>0]|0)==114:0)?(i[a+1>>0]|0)==99:0)?(lb=a+2|0,Ob=RDa(lb,b,c)|0,(Ob|0)!=(lb|0)):0)?(lb=dEa(Ob,b,c)|0,(lb|0)!=(Ob|0)):0)?(Ob=c+4|0,eb=k[Ob>>2]|0,((eb-(k[c>>2]|0)|0)/24|0)>>>0>=2):0){fEa(e,eb+-24|0);eb=k[Ob>>2]|0;$a=eb+-24|0;Qa=eb;while(1){if((Qa|0)==($a|0))break;_a=Qa+-24|0;k[Ob>>2]=_a;CDa(_a);Qa=k[Ob>>2]|0}Ob=eb+-48|0;x=0;xa(932,m|0,Ob|0);Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Sd=M;Td=Qa}else{x=0;Qa=Fa(147,m|0,0,301427)|0;$a=x;x=0;if($a&1){$a=Hc()|0;Ud=M;Vd=$a}else{k[l>>2]=k[Qa>>2];k[l+4>>2]=k[Qa+4>>2];k[l+8>>2]=k[Qa+8>>2];$a=0;while(1){if(($a|0)==3)break;k[Qa+($a<<2)>>2]=0;$a=$a+1|0}x=0;$a=Ta(630,l|0,301284)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Wd=M;Xd=Qa}else{k[j>>2]=k[$a>>2];k[j+4>>2]=k[$a+4>>2];k[j+8>>2]=k[$a+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[$a+(Qa<<2)>>2]=0;Qa=Qa+1|0}Qa=i[e>>0]|0;$a=(Qa&1)==0;x=0;eb=Fa(146,j|0,($a?e+1|0:k[e+8>>2]|0)|0,($a?(Qa&255)>>>1:k[e+4>>2]|0)|0)|0;Qa=x;x=0;do if(Qa&1){$a=Hc()|0;Yd=M;Zd=$a}else{k[h>>2]=k[eb>>2];k[h+4>>2]=k[eb+4>>2];k[h+8>>2]=k[eb+8>>2];$a=0;while(1){if(($a|0)==3)break;k[eb+($a<<2)>>2]=0;$a=$a+1|0}x=0;$a=Ta(630,h|0,300015)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;Xa=M;NDa(h);Yd=Xa;Zd=_a;break};k[g>>2]=k[$a>>2];k[g+4>>2]=k[$a+4>>2];k[g+8>>2]=k[$a+8>>2];_a=0;while(1){if((_a|0)==3)break;k[$a+(_a<<2)>>2]=0;_a=_a+1|0}lEa(f,g);mEa(Ob,f);CDa(f);NDa(g);NDa(h);NDa(j);NDa(l);NDa(m);NDa(e);_d=lb;break z}while(0);NDa(j);Wd=Yd;Xd=Zd}NDa(l);Ud=Wd;Vd=Xd}NDa(m);Sd=Ud;Td=Vd}NDa(e);Sc(Td|0)}else _d=a;while(0);Ua=_d;break a;break}case 109:{lb=a+2|0;$Da(Ia,301445,1);x=0;Ob=db(79,lb|0,b|0,Ia|0,c|0)|0;eb=x;x=0;if(eb&1){eb=Hc()|0;Qa=M;NDa(Ia);Ya=eb;Za=Qa;break b}else{NDa(Ia);Ua=(Ob|0)==(lb|0)?a:Ob;break a}break}case 77:{Ob=a+2|0;$Da(Ja,301447,2);x=0;lb=db(79,Ob|0,b|0,Ja|0,c|0)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;eb=M;NDa(Ja);Ya=Qa;Za=eb;break b}else{NDa(Ja);Ua=(lb|0)==(Ob|0)?a:lb;break a}break}case 115:{lb=a+2|0;$Da(Ka,301450,2);x=0;Ob=db(79,lb|0,b|0,Ka|0,c|0)|0;eb=x;x=0;if(eb&1){eb=Hc()|0;Qa=M;NDa(Ka);Ya=eb;Za=Qa;break b}else{NDa(Ka);Ua=(Ob|0)==(lb|0)?a:Ob;break a}break}case 83:{Ob=a+2|0;$Da(La,301453,3);x=0;lb=db(79,Ob|0,b|0,La|0,c|0)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;eb=M;NDa(La);Ya=Qa;Za=eb;break b}else{NDa(La);Ua=(lb|0)==(Ob|0)?a:lb;break a}break}default:{Ua=a;break a}}break}case 115:{switch(i[Sa+1>>0]|0){case 99:{A:do if((((((Oa|0)>2?(i[a>>0]|0)==115:0)?(i[a+1>>0]|0)==99:0)?(lb=a+2|0,Ob=RDa(lb,b,c)|0,(Ob|0)!=(lb|0)):0)?(lb=dEa(Ob,b,c)|0,(lb|0)!=(Ob|0)):0)?(Ob=c+4|0,eb=k[Ob>>2]|0,((eb-(k[c>>2]|0)|0)/24|0)>>>0>=2):0){fEa(e,eb+-24|0);eb=k[Ob>>2]|0;Qa=eb+-24|0;_a=eb;while(1){if((_a|0)==(Qa|0))break;$a=_a+-24|0;k[Ob>>2]=$a;CDa($a);_a=k[Ob>>2]|0}Ob=eb+-48|0;x=0;xa(932,m|0,Ob|0);_a=x;x=0;if(_a&1){_a=Hc()|0;$d=M;ae=_a}else{x=0;_a=Fa(147,m|0,0,301457)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;be=M;ce=Qa}else{k[l>>2]=k[_a>>2];k[l+4>>2]=k[_a+4>>2];k[l+8>>2]=k[_a+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[_a+(Qa<<2)>>2]=0;Qa=Qa+1|0}x=0;Qa=Ta(630,l|0,301284)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;de=M;ee=_a}else{k[j>>2]=k[Qa>>2];k[j+4>>2]=k[Qa+4>>2];k[j+8>>2]=k[Qa+8>>2];_a=0;while(1){if((_a|0)==3)break;k[Qa+(_a<<2)>>2]=0;_a=_a+1|0}_a=i[e>>0]|0;Qa=(_a&1)==0;x=0;eb=Fa(146,j|0,(Qa?e+1|0:k[e+8>>2]|0)|0,(Qa?(_a&255)>>>1:k[e+4>>2]|0)|0)|0;_a=x;x=0;do if(_a&1){Qa=Hc()|0;fe=M;ge=Qa}else{k[h>>2]=k[eb>>2];k[h+4>>2]=k[eb+4>>2];k[h+8>>2]=k[eb+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[eb+(Qa<<2)>>2]=0;Qa=Qa+1|0}x=0;Qa=Ta(630,h|0,300015)|0;$a=x;x=0;if($a&1){$a=Hc()|0;Xa=M;NDa(h);fe=Xa;ge=$a;break};k[g>>2]=k[Qa>>2];k[g+4>>2]=k[Qa+4>>2];k[g+8>>2]=k[Qa+8>>2];$a=0;while(1){if(($a|0)==3)break;k[Qa+($a<<2)>>2]=0;$a=$a+1|0}lEa(f,g);mEa(Ob,f);CDa(f);NDa(g);NDa(h);NDa(j);NDa(l);NDa(m);NDa(e);he=lb;break A}while(0);NDa(j);de=fe;ee=ge}NDa(l);be=de;ce=ee}NDa(m);$d=be;ae=ce}NDa(e);Sc(ae|0)}else he=a;while(0);Ua=he;break a;break}case 112:{if((Oa|0)<=2){Ua=a;break a}if((i[a>>0]|0)!=115){Ua=a;break a}if((i[a+1>>0]|0)!=112){Ua=a;break a}lb=a+2|0;Ob=dEa(lb,b,c)|0;Ua=(Ob|0)==(lb|0)?a:Ob;break a;break}case 114:{Ua=REa(a,b,c)|0;break a;break}case 116:{B:do if(((((Oa|0)>2?(i[a>>0]|0)==115:0)?(i[a+1>>0]|0)==116:0)?(Ob=a+2|0,lb=RDa(Ob,b,c)|0,(lb|0)!=(Ob|0)):0)?(Ob=k[c+4>>2]|0,(k[c>>2]|0)!=(Ob|0)):0){eb=Ob+-24|0;fEa(h,eb);x=0;Ob=Fa(147,h|0,0,301470)|0;_a=x;x=0;do if(_a&1){$a=Hc()|0;ie=M;je=$a}else{k[g>>2]=k[Ob>>2];k[g+4>>2]=k[Ob+4>>2];k[g+8>>2]=k[Ob+8>>2];$a=0;while(1){if(($a|0)==3)break;k[Ob+($a<<2)>>2]=0;$a=$a+1|0}x=0;$a=Ta(630,g|0,300015)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Xa=M;NDa(g);ie=Xa;je=Qa;break};k[f>>2]=k[$a>>2];k[f+4>>2]=k[$a+4>>2];k[f+8>>2]=k[$a+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[$a+(Qa<<2)>>2]=0;Qa=Qa+1|0}lEa(e,f);mEa(eb,e);CDa(e);NDa(f);NDa(g);NDa(h);ke=lb;break B}while(0);NDa(h);Sc(je|0)}else ke=a;while(0);Ua=ke;break a;break}case 122:{C:do if(((((Oa|0)>2?(i[a>>0]|0)==115:0)?(i[a+1>>0]|0)==122:0)?(lb=a+2|0,eb=dEa(lb,b,c)|0,(eb|0)!=(lb|0)):0)?(lb=k[c+4>>2]|0,(k[c>>2]|0)!=(lb|0)):0){Ob=lb+-24|0;fEa(h,Ob);x=0;lb=Fa(147,h|0,0,301470)|0;_a=x;x=0;do if(_a&1){Qa=Hc()|0;le=M;me=Qa}else{k[g>>2]=k[lb>>2];k[g+4>>2]=k[lb+4>>2];k[g+8>>2]=k[lb+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[lb+(Qa<<2)>>2]=0;Qa=Qa+1|0}x=0;Qa=Ta(630,g|0,300015)|0;$a=x;x=0;if($a&1){$a=Hc()|0;Xa=M;NDa(g);le=Xa;me=$a;break};k[f>>2]=k[Qa>>2];k[f+4>>2]=k[Qa+4>>2];k[f+8>>2]=k[Qa+8>>2];$a=0;while(1){if(($a|0)==3)break;k[Qa+($a<<2)>>2]=0;$a=$a+1|0}lEa(e,f);mEa(Ob,e);CDa(e);NDa(f);NDa(g);NDa(h);ne=eb;break C}while(0);NDa(h);Sc(me|0)}else ne=a;while(0);Ua=ne;break a;break}case 90:{if((Na-Sa|0)<=2){Ua=a;break a}switch(i[Sa+2>>0]|0){case 84:break;case 102:{D:do if((((((Oa|0)>2?(i[a>>0]|0)==115:0)?(i[a+1>>0]|0)==90:0)?(eb=a+2|0,(i[eb>>0]|0)==102):0)?(Ob=OEa(eb,b,c)|0,(Ob|0)!=(eb|0)):0)?(eb=k[c+4>>2]|0,(k[c>>2]|0)!=(eb|0)):0){lb=eb+-24|0;fEa(h,lb);x=0;eb=Fa(147,h|0,0,301479)|0;_a=x;x=0;do if(_a&1){$a=Hc()|0;oe=M;pe=$a}else{k[g>>2]=k[eb>>2];k[g+4>>2]=k[eb+4>>2];k[g+8>>2]=k[eb+8>>2];$a=0;while(1){if(($a|0)==3)break;k[eb+($a<<2)>>2]=0;$a=$a+1|0}x=0;$a=Ta(630,g|0,300015)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Xa=M;NDa(g);oe=Xa;pe=Qa;break};k[f>>2]=k[$a>>2];k[f+4>>2]=k[$a+4>>2];k[f+8>>2]=k[$a+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[$a+(Qa<<2)>>2]=0;Qa=Qa+1|0}lEa(e,f);mEa(lb,e);CDa(e);NDa(f);NDa(g);NDa(h);qe=Ob;break D}while(0);NDa(h);Sc(pe|0)}else qe=a;while(0);Ua=qe;break a;break}default:{Ua=a;break a}}E:do if(((((Oa|0)>2?(i[a>>0]|0)==115:0)?(i[a+1>>0]|0)==90:0)?(Ob=a+2|0,(i[Ob>>0]|0)==84):0)?(lb=c+4|0,eb=((k[lb>>2]|0)-(k[c>>2]|0)|0)/24|0,_a=hEa(Ob,b,c)|0,Qa=k[c>>2]|0,$a=((k[lb>>2]|0)-Qa|0)/24|0,Xa=Qa,(_a|0)!=(Ob|0)):0){i[f>>0]=20;Ob=f+1|0;Qa=301479;Wa=Ob+10|0;do{i[Ob>>0]=i[Qa>>0]|0;Ob=Ob+1|0;Qa=Qa+1|0}while((Ob|0)<(Wa|0));i[f+11>>0]=0;F:do if((eb|0)!=($a|0)){x=0;xa(932,g|0,Xa+(eb*24|0)|0);Qa=x;x=0;if(Qa&1)Lb=944;else{Qa=i[g>>0]|0;Ob=(Qa&1)==0;x=0;Fa(146,f|0,(Ob?g+1|0:k[g+8>>2]|0)|0,(Ob?(Qa&255)>>>1:k[g+4>>2]|0)|0)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Ob=M;NDa(g);re=Ob;se=Qa;break}NDa(g);Qa=h+8|0;Ob=h+1|0;Wa=h+4|0;cb=eb;while(1){$c=cb+1|0;if(($c|0)==($a|0)){Lb=950;break F}x=0;xa(932,j|0,(k[c>>2]|0)+($c*24|0)|0);kd=x;x=0;if(kd&1){Lb=943;break}x=0;kd=Fa(147,j|0,0,300110)|0;Va=x;x=0;if(Va&1){Lb=947;break};k[h>>2]=k[kd>>2];k[h+4>>2]=k[kd+4>>2];k[h+8>>2]=k[kd+8>>2];Va=0;while(1){if((Va|0)==3)break;k[kd+(Va<<2)>>2]=0;Va=Va+1|0}Va=i[h>>0]|0;kd=(Va&1)==0;x=0;Fa(146,f|0,(kd?Ob:k[Qa>>2]|0)|0,(kd?(Va&255)>>>1:k[Wa>>2]|0)|0)|0;Va=x;x=0;if(Va&1){Lb=948;break}NDa(h);NDa(j);cb=$c}if((Lb|0)==943){cb=Hc()|0;te=cb;ue=M;Lb=945;break}else if((Lb|0)==947){cb=Hc()|0;ve=M;we=cb}else if((Lb|0)==948){cb=Hc()|0;Wa=M;NDa(h);ve=Wa;we=cb}NDa(j);re=ve;se=we}}else Lb=950;while(0);do if((Lb|0)==950){x=0;Ta(630,f|0,300015)|0;Xa=x;x=0;if(Xa&1)Lb=944;else{Xa=$a;while(1){if((Xa|0)==(eb|0))break;cb=k[lb>>2]|0;Wa=cb+-24|0;Qa=cb;while(1){if((Qa|0)==(Wa|0))break;cb=Qa+-24|0;k[lb>>2]=cb;CDa(cb);Qa=k[lb>>2]|0}Xa=Xa+-1|0}k[m>>2]=k[f>>2];k[m+4>>2]=k[f+4>>2];k[m+8>>2]=k[f+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[f+(Xa<<2)>>2]=0;Xa=Xa+1|0}lEa(l,m);Xa=k[lb>>2]|0;Qa=k[c+8>>2]|0;Wa=Qa;if(Xa>>>0>>0){eEa(Xa,l);k[lb>>2]=(k[lb>>2]|0)+24}else{Qa=k[c>>2]|0;$c=Xa-Qa|0;Xa=($c|0)/24|0;cb=Xa+1|0;if(($c|0)<-24){x=0;va(1473,c|0);x=0;$c=Hc()|0;Ob=M;CDa(l);NDa(m);re=Ob;se=$c;break}$c=(Wa-Qa|0)/24|0;if($c>>>0<1073741823){Qa=$c<<1;xe=Qa>>>0>>0?cb:Qa}else xe=2147483647;XDa(e,xe,Xa,c+12|0);Xa=e+8|0;Qa=k[Xa>>2]|0;eEa(Qa,l);k[Xa>>2]=Qa+24;ZDa(c,e);YDa(e)}CDa(l);NDa(m);NDa(f);ye=_a;break E}}while(0);if((Lb|0)==944){_a=Hc()|0;te=_a;ue=M;Lb=945}if((Lb|0)==945){re=ue;se=te}NDa(f);Sc(se|0)}else ye=a;while(0);Ua=ye;break a;break}default:{Ua=a;break a}}break}case 116:{switch(i[Sa+1>>0]|0){case 105:case 101:{G:do if((Oa|0)>2?(i[a>>0]|0)==116:0){_a=i[a+1>>0]|0;switch(_a<<24>>24){case 105:case 101:break;default:{ze=a;break G}}lb=a+2|0;if(_a<<24>>24==101)Ae=dEa(lb,b,c)|0;else Ae=RDa(lb,b,c)|0;if((Ae|0)!=(lb|0)?(lb=k[c+4>>2]|0,(k[c>>2]|0)!=(lb|0)):0){_a=lb+-24|0;fEa(h,_a);x=0;lb=Fa(147,h|0,0,301490)|0;eb=x;x=0;do if(eb&1){$a=Hc()|0;Be=M;Ce=$a}else{k[g>>2]=k[lb>>2];k[g+4>>2]=k[lb+4>>2];k[g+8>>2]=k[lb+8>>2];$a=0;while(1){if(($a|0)==3)break;k[lb+($a<<2)>>2]=0;$a=$a+1|0}x=0;$a=Ta(630,g|0,300015)|0;Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Xa=M;NDa(g);Be=Xa;Ce=Qa;break};k[f>>2]=k[$a>>2];k[f+4>>2]=k[$a+4>>2];k[f+8>>2]=k[$a+8>>2];Qa=0;while(1){if((Qa|0)==3)break;k[$a+(Qa<<2)>>2]=0;Qa=Qa+1|0}lEa(e,f);mEa(_a,e);CDa(e);NDa(f);NDa(g);NDa(h);ze=Ae;break G}while(0);NDa(h);Sc(Ce|0)}else ze=a}else ze=a;while(0);Ua=ze;break a;break}case 114:{LEa(Ma,301498);_a=c+4|0;lb=k[_a>>2]|0;eb=k[c+8>>2]|0;Qa=eb;if(lb>>>0>>0){eEa(lb,Ma);k[_a>>2]=(k[_a>>2]|0)+24}else{_a=k[c>>2]|0;eb=lb-_a|0;lb=(eb|0)/24|0;$a=lb+1|0;if((eb|0)<-24){x=0;va(1473,c|0);x=0;eb=Hc()|0;Xa=M;CDa(Ma);Ya=eb;Za=Xa;break b}Xa=(Qa-_a|0)/24|0;if(Xa>>>0<1073741823){_a=Xa<<1;De=_a>>>0<$a>>>0?$a:_a}else De=2147483647;XDa(e,De,lb,c+12|0);lb=e+8|0;_a=k[lb>>2]|0;eEa(_a,Ma);k[lb>>2]=_a+24;ZDa(c,e);YDa(e)}CDa(Ma);Ua=a+2|0;break a;break}case 119:{if(((((Oa|0)>2?(i[a>>0]|0)==116:0)?(i[a+1>>0]|0)==119:0)?(_a=a+2|0,lb=dEa(_a,b,c)|0,(lb|0)!=(_a|0)):0)?(_a=k[c+4>>2]|0,(k[c>>2]|0)!=(_a|0)):0){$a=_a+-24|0;fEa(g,$a);x=0;_a=Fa(147,g|0,0,301504)|0;Xa=x;x=0;if(Xa&1){Xa=Hc()|0;NDa(g);Sc(Xa|0)};k[f>>2]=k[_a>>2];k[f+4>>2]=k[_a+4>>2];k[f+8>>2]=k[_a+8>>2];Xa=0;while(1){if((Xa|0)==3)break;k[_a+(Xa<<2)>>2]=0;Xa=Xa+1|0}lEa(e,f);mEa($a,e);CDa(e);NDa(f);NDa(g);Ee=lb}else Ee=a;Ua=Ee;break a;break}default:{Ua=a;break a}}break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{Ua=REa(a,b,c)|0;break a;break}default:{Ua=a;break a}}while(0);Sc(Ya|0)}else Ua=a;while(0);r=d;return Ua|0}function eEa(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];c=0;while(1){if((c|0)==3)break;k[b+(c<<2)>>2]=0;c=c+1|0}c=a+12|0;a=b+12|0;k[c>>2]=k[a>>2];k[c+4>>2]=k[a+4>>2];k[c+8>>2]=k[a+8>>2];c=0;while(1){if((c|0)==3)break;k[a+(c<<2)>>2]=0;c=c+1|0}return}function fEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=b+12|0;d=i[c>>0]|0;e=(d&1)==0;f=EDa(b,e?c+1|0:k[b+20>>2]|0,e?(d&255)>>>1:k[b+16>>2]|0)|0;k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];a=0;while(1){if((a|0)==3)break;k[f+(a<<2)>>2]=0;a=a+1|0}return}function gEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=0;d=a+4|0;k[d>>2]=0;e=k[c>>2]|0;k[a+8>>2]=0;k[a+12>>2]=e;c=NEa(e,24)|0;k[d>>2]=c;k[a>>2]=c;k[a+8>>2]=c+24;x=0;xa(934,c|0,b|0);e=x;x=0;do if(!(e&1)){x=0;xa(934,c+12|0,b+12|0);f=x;x=0;if(f&1){f=Hc()|0;g=M;NDa(c);h=g;i=f;break}else{k[d>>2]=(k[d>>2]|0)+24;return}}else{f=Hc()|0;h=M;i=f}while(0);DDa(a);Sc(i|0)}function hEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;d=r;r=r+112|0;e=d+80|0;f=d+12|0;g=d+56|0;h=d+32|0;j=d;l=a;a:do if((b-l|0)>1?(i[a>>0]|0)==84:0){m=i[a+1>>0]|0;do if(m<<24>>24==95){n=k[c+36>>2]|0;if((k[c+32>>2]|0)==(n|0)){o=a;break a}p=k[n+-16>>2]|0;if((p|0)==(k[n+-12>>2]|0)){i[g>>0]=4;n=g+1|0;i[n>>0]=84;i[n+1>>0]=95;i[g+3>>0]=0;n=g+12|0;q=0;while(1){if((q|0)==3)break;k[n+(q<<2)>>2]=0;q=q+1|0}q=c+4|0;n=k[q>>2]|0;s=k[c+8>>2]|0;t=s;if(n>>>0>>0){eEa(n,g);k[q>>2]=(k[q>>2]|0)+24}else{q=k[c>>2]|0;s=n-q|0;n=(s|0)/24|0;u=n+1|0;if((s|0)<-24){x=0;va(1473,c|0);x=0;s=Hc()|0;v=M;CDa(g);w=v;y=s;break}s=(t-q|0)/24|0;if(s>>>0<1073741823){q=s<<1;z=q>>>0>>0?u:q}else z=2147483647;XDa(e,z,n,c+12|0);n=e+8|0;q=k[n>>2]|0;eEa(q,g);k[n>>2]=q+24;ZDa(c,e);YDa(e)}CDa(g);i[c+62>>0]=1;o=a+2|0;break a}q=k[p+4>>2]|0;n=c+4|0;u=c+8|0;s=c+12|0;t=e+8|0;v=k[p>>2]|0;while(1){if((v|0)==(q|0)){A=8;break}B=k[n>>2]|0;C=k[u>>2]|0;D=C;if((B|0)==(C|0)){C=k[c>>2]|0;E=B-C|0;F=(E|0)/24|0;G=F+1|0;if((E|0)<-24){A=14;break}E=(D-C|0)/24|0;if(E>>>0<1073741823){C=E<<1;H=C>>>0>>0?G:C}else H=2147483647;XDa(e,H,F,s);F=k[t>>2]|0;x=0;xa(934,F|0,v|0);C=x;x=0;if(C&1){A=20;break}x=0;xa(934,F+12|0,v+12|0);C=x;x=0;if(C&1){I=F;A=19;break}k[t>>2]=F+24;ZDa(c,e);YDa(e)}else{WDa(B,v);x=0;xa(934,B+12|0,v+12|0);F=x;x=0;if(F&1){J=B;A=11;break}k[n>>2]=(k[n>>2]|0)+24}v=v+24|0}if((A|0)==8){o=a+2|0;break a}else if((A|0)==11){v=Hc()|0;NDa(J);Sc(v|0)}else if((A|0)==14)HBa(c);else if((A|0)==19){v=Hc()|0;n=M;NDa(I);K=n;L=v}else if((A|0)==20){v=Hc()|0;K=M;L=v}YDa(e);Sc(L|0)}else{v=(m<<24>>24)+-48|0;if(v>>>0>=10){o=a;break a}n=v;v=a+2|0;while(1){if((v|0)==(b|0)){o=a;break a}t=i[v>>0]|0;s=(t<<24>>24)+-48|0;if(s>>>0>=10){N=t;O=n;P=v;break}n=s+(n*10|0)|0;v=v+1|0}if(N<<24>>24!=95){o=a;break a}v=k[c+36>>2]|0;if((k[c+32>>2]|0)==(v|0)){o=a;break a}n=O+1|0;s=k[v+-16>>2]|0;t=s;if(n>>>0>=(k[v+-12>>2]|0)-s>>4>>>0){s=P+1|0;v=s-l|0;if(v>>>0>4294967279)GBa(j);if(v>>>0<11){i[j>>0]=v<<1;Q=j+1|0}else{u=v+16&-16;q=xYa(u)|0;k[j+8>>2]=q;k[j>>2]=u|1;k[j+4>>2]=v;Q=q}q=a;u=Q;while(1){if((q|0)==(s|0))break;i[u>>0]=i[q>>0]|0;q=q+1|0;u=u+1|0}i[Q+v>>0]=0;lEa(h,j);u=c+4|0;q=k[u>>2]|0;p=k[c+8>>2]|0;B=p;if(q>>>0

      >>0){eEa(q,h);k[u>>2]=(k[u>>2]|0)+24}else{u=k[c>>2]|0;p=q-u|0;q=(p|0)/24|0;F=q+1|0;if((p|0)<-24){x=0;va(1473,c|0);x=0;p=Hc()|0;C=M;CDa(h);NDa(j);w=C;y=p;break}p=(B-u|0)/24|0;if(p>>>0<1073741823){u=p<<1;R=u>>>0>>0?F:u}else R=2147483647;XDa(f,R,q,c+12|0);q=f+8|0;u=k[q>>2]|0;eEa(u,h);k[q>>2]=u+24;ZDa(c,f);YDa(f)}CDa(h);NDa(j);i[c+62>>0]=1;o=s;break a}u=k[t+(n<<4)+4>>2]|0;q=c+4|0;F=c+8|0;p=c+12|0;B=e+8|0;C=k[t+(n<<4)>>2]|0;while(1){if((C|0)==(u|0)){A=45;break}G=k[q>>2]|0;E=k[F>>2]|0;D=E;if((G|0)==(E|0)){E=k[c>>2]|0;S=G-E|0;T=(S|0)/24|0;U=T+1|0;if((S|0)<-24){A=51;break}S=(D-E|0)/24|0;if(S>>>0<1073741823){E=S<<1;V=E>>>0>>0?U:E}else V=2147483647;XDa(e,V,T,p);T=k[B>>2]|0;x=0;xa(934,T|0,C|0);E=x;x=0;if(E&1){A=57;break}x=0;xa(934,T+12|0,C+12|0);E=x;x=0;if(E&1){W=T;A=56;break}k[B>>2]=T+24;ZDa(c,e);YDa(e)}else{WDa(G,C);x=0;xa(934,G+12|0,C+12|0);T=x;x=0;if(T&1){X=G;A=48;break}k[q>>2]=(k[q>>2]|0)+24}C=C+24|0}if((A|0)==45){o=P+1|0;break a}else if((A|0)==48){C=Hc()|0;NDa(X);Sc(C|0)}else if((A|0)==51)HBa(c);else if((A|0)==56){C=Hc()|0;q=M;NDa(W);Y=q;Z=C}else if((A|0)==57){C=Hc()|0;Y=M;Z=C}YDa(e);Sc(Z|0)}while(0);Sc(y|0)}else o=a;while(0);r=d;return o|0}function iEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;d=r;r=r+144|0;e=d+124|0;f=d+104|0;g=d+84|0;h=d+64|0;j=d+52|0;l=d+40|0;m=d+16|0;n=d;a:do if((b-a|0)>1?(i[a>>0]|0)==73:0){o=c+61|0;p=c+36|0;b:do if(i[o>>0]|0){q=k[p>>2]|0;s=k[q+-16>>2]|0;t=q+-12|0;while(1){q=k[t>>2]|0;if((q|0)==(s|0))break b;u=q+-16|0;k[t>>2]=u;DDa(u)}}while(0);$Da(j,300166,1);t=c+4|0;s=c+12|0;u=g+8|0;q=f+8|0;v=j+4|0;w=l+8|0;y=l+1|0;z=l+4|0;A=c+32|0;B=c+40|0;C=c+44|0;D=h+8|0;E=a+1|0;c:while(1){if((i[E>>0]|0)==69){F=E;G=65;break}do if(i[o>>0]|0){H=k[s>>2]|0;I=k[p>>2]|0;J=k[B>>2]|0;if(I>>>0>>0){k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=H;k[p>>2]=(k[p>>2]|0)+16;break}K=k[A>>2]|0;L=I-K|0;I=L>>4;N=I+1|0;if((L|0)<-16){G=13;break c}L=J-K|0;if(L>>4>>>0<1073741823){K=L>>3;O=K>>>0>>0?N:K}else O=2147483647;yDa(h,O,I,C);I=k[D>>2]|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=H;k[D>>2]=I+16;zDa(A,h);ADa(h)}while(0);I=((k[t>>2]|0)-(k[c>>2]|0)|0)/24|0;x=0;H=Fa(153,E|0,b|0,c|0)|0;K=x;x=0;if(K&1){G=19;break}K=((k[t>>2]|0)-(k[c>>2]|0)|0)/24|0;d:do if(i[o>>0]|0){N=k[p>>2]|0;L=N+-16|0;J=N;while(1){if((J|0)==(L|0))break d;N=J+-16|0;k[p>>2]=N;KDa(N);J=k[p>>2]|0}}while(0);if((H|0)==(E|0)|(H|0)==(b|0)){G=79;break}e:do if(!(i[o>>0]|0))P=I;else{J=k[p>>2]|0;L=J+-16|0;N=k[s>>2]|0;Q=J+-12|0;R=k[Q>>2]|0;S=k[J+-8>>2]|0;T=S;if(R>>>0>>0){k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=N;k[Q>>2]=(k[Q>>2]|0)+16;U=I}else{Q=k[L>>2]|0;S=R-Q|0;R=S>>4;V=R+1|0;if((S|0)<-16){W=L;G=32;break c}S=T-Q|0;if(S>>4>>>0<1073741823){Q=S>>3;X=Q>>>0>>0?V:Q}else X=2147483647;TDa(g,X,R,J+-4|0);J=k[u>>2]|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=N;k[u>>2]=J+16;UDa(L,g);VDa(g);U=I}while(1){if(U>>>0>=K>>>0){P=I;break e}L=k[(k[p>>2]|0)+-12>>2]|0;J=L+-16|0;N=k[c>>2]|0;R=N+(U*24|0)|0;Q=L+-12|0;V=k[Q>>2]|0;S=k[L+-8>>2]|0;T=S;if((V|0)==(S|0)){S=k[J>>2]|0;Y=V-S|0;Z=(Y|0)/24|0;_=Z+1|0;if((Y|0)<-24){$=J;G=43;break c}Y=(T-S|0)/24|0;if(Y>>>0<1073741823){S=Y<<1;aa=S>>>0<_>>>0?_:S}else aa=2147483647;XDa(f,aa,Z,L+-4|0);L=k[q>>2]|0;x=0;xa(934,L|0,R|0);Z=x;x=0;if(Z&1){G=49;break c}x=0;xa(934,L+12|0,N+(U*24|0)+12|0);Z=x;x=0;if(Z&1){ba=L;G=48;break c}k[q>>2]=L+24;ZDa(J,f);YDa(f)}else{x=0;xa(934,V|0,R|0);R=x;x=0;if(R&1){G=18;break c}x=0;xa(934,V+12|0,N+(U*24|0)+12|0);N=x;x=0;if(N&1){ca=V;G=40;break c}k[Q>>2]=(k[Q>>2]|0)+24}U=U+1|0}}while(0);while(1){if(P>>>0>=K>>>0){da=K;break}Q=i[j>>0]|0;if(((Q&1)==0?(Q&255)>>>1:k[v>>2]|0)>>>0>1?(x=0,Ta(630,j|0,300110)|0,Q=x,x=0,Q&1):0){G=17;break c}x=0;xa(932,l|0,(k[c>>2]|0)+(P*24|0)|0);Q=x;x=0;if(Q&1){G=17;break c}Q=i[l>>0]|0;V=(Q&1)==0;x=0;Fa(146,j|0,(V?y:k[w>>2]|0)|0,(V?(Q&255)>>>1:k[z>>2]|0)|0)|0;Q=x;x=0;if(Q&1){G=59;break c}NDa(l);P=P+1|0}while(1){if((da|0)==(I|0)){E=H;continue c}K=k[t>>2]|0;Q=K+-24|0;V=K;while(1){if((V|0)==(Q|0))break;K=V+-24|0;k[t>>2]=K;CDa(K);V=k[t>>2]|0}da=da+-1|0}}switch(G|0){case 13:{x=0;va(1473,A|0);x=0;G=20;break}case 17:{E=Hc()|0;ea=M;fa=E;G=21;break}case 18:{E=Hc()|0;ea=M;fa=E;G=21;break}case 19:{E=Hc()|0;ea=M;fa=E;G=21;break}case 32:{x=0;va(1473,W|0);x=0;G=20;break}case 40:{E=Hc()|0;z=M;NDa(ca);ea=z;fa=E;G=21;break}case 43:{x=0;va(1473,$|0);x=0;G=20;break}case 48:{E=Hc()|0;z=M;NDa(ba);ga=z;ha=E;G=50;break}case 49:{E=Hc()|0;ga=M;ha=E;G=50;break}case 59:{E=Hc()|0;z=M;NDa(l);ia=z;ja=E;break}case 65:{E=F+1|0;z=i[j>>0]|0;w=(z&1)==0;x=0;if((i[(w?j+1|0:k[j+8>>2]|0)+(w?(z&255)>>>1:k[v>>2]|0)+-1>>0]|0)==62){QDa(j,301151)|0;z=x;x=0;if(z&1){G=20;break}}else{QDa(j,300168)|0;z=x;x=0;if(z&1){G=20;break}};k[n>>2]=k[j>>2];k[n+4>>2]=k[j+4>>2];k[n+8>>2]=k[j+8>>2];z=0;while(1){if((z|0)==3)break;k[j+(z<<2)>>2]=0;z=z+1|0}lEa(m,n);z=k[t>>2]|0;v=k[c+8>>2]|0;A=v;if(z>>>0>>0){eEa(z,m);k[t>>2]=(k[t>>2]|0)+24}else{v=k[c>>2]|0;w=z-v|0;z=(w|0)/24|0;y=z+1|0;if((w|0)<-24){x=0;va(1473,c|0);x=0;w=Hc()|0;q=M;CDa(m);NDa(n);ia=q;ja=w;break}w=(A-v|0)/24|0;if(w>>>0<1073741823){v=w<<1;ka=v>>>0>>0?y:v}else ka=2147483647;XDa(e,ka,z,c+12|0);z=e+8|0;v=k[z>>2]|0;eEa(v,m);k[z>>2]=v+24;ZDa(c,e);YDa(e)}CDa(m);NDa(n);NDa(j);la=E;break a;break}case 79:{NDa(j);la=a;break a;break}}if((G|0)==20){v=Hc()|0;ea=M;fa=v;G=21}else if((G|0)==50){YDa(f);ea=ga;fa=ha;G=21}if((G|0)==21){ia=ea;ja=fa}NDa(j);Sc(ja|0)}else la=a;while(0);r=d;return la|0}function jEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;d=r;r=r+128|0;e=d+108|0;f=d+88|0;g=d+76|0;h=d+64|0;j=d+40|0;l=d+16|0;m=d;a:do if(((a|0)!=(b|0)?(n=(i[a>>0]|0)+-48|0,n>>>0<10):0)?(o=a+1|0,(o|0)!=(b|0)):0){p=a;q=o;o=n;while(1){n=(i[q>>0]|0)+-48|0;if(n>>>0>=10){s=p;t=q;u=o;break}v=q+1|0;if((v|0)==(b|0)){w=a;break a}y=q;q=v;o=n+(o*10|0)|0;p=y}if((b-t|0)>>>0>=u>>>0){$Da(g,t,u);p=i[g>>0]|0;o=(p&1)==0;q=o?(p&255)>>>1:k[g+4>>2]|0;x=0;fb(412,h|0,(o?g+1|0:k[g+8>>2]|0)|0,(q>>>0<10?q:10)|0);q=x;x=0;do if(q&1){o=Hc()|0;z=M;A=o}else{o=i[h>>0]|0;p=(o&1)==0;y=p?(o&255)>>>1:k[h+4>>2]|0;o=y>>>0>10;n=ZLa(p?h+1|0:k[h+8>>2]|0,301118,o?10:y)|0;NDa(h);if(!(((n|0)==0?(y>>>0<10?-1:o&1):n)|0)){n=xYa(32)|0;k[j+8>>2]=n;k[j>>2]=33;k[j+4>>2]=21;o=n;y=301129;p=o+21|0;do{i[o>>0]=i[y>>0]|0;o=o+1|0;y=y+1|0}while((o|0)<(p|0));i[n+21>>0]=0;y=j+12|0;o=0;while(1){if((o|0)==3)break;k[y+(o<<2)>>2]=0;o=o+1|0}o=c+4|0;y=k[o>>2]|0;n=k[c+8>>2]|0;p=n;if(y>>>0>>0){eEa(y,j);k[o>>2]=(k[o>>2]|0)+24}else{o=k[c>>2]|0;n=y-o|0;y=(n|0)/24|0;v=y+1|0;if((n|0)<-24){x=0;va(1473,c|0);x=0;n=Hc()|0;B=M;CDa(j);z=B;A=n;break}n=(p-o|0)/24|0;if(n>>>0<1073741823){o=n<<1;C=o>>>0>>0?v:o}else C=2147483647;XDa(f,C,y,c+12|0);y=f+8|0;o=k[y>>2]|0;eEa(o,j);k[y>>2]=o+24;ZDa(c,f);YDa(f)}CDa(j)}else{k[m>>2]=k[g>>2];k[m+4>>2]=k[g+4>>2];k[m+8>>2]=k[g+8>>2];o=0;while(1){if((o|0)==3)break;k[g+(o<<2)>>2]=0;o=o+1|0}lEa(l,m);o=c+4|0;y=k[o>>2]|0;v=k[c+8>>2]|0;n=v;if(y>>>0>>0){eEa(y,l);k[o>>2]=(k[o>>2]|0)+24}else{o=k[c>>2]|0;v=y-o|0;y=(v|0)/24|0;p=y+1|0;if((v|0)<-24){x=0;va(1473,c|0);x=0;v=Hc()|0;B=M;CDa(l);NDa(m);z=B;A=v;break}v=(n-o|0)/24|0;if(v>>>0<1073741823){o=v<<1;D=o>>>0

      >>0?p:o}else D=2147483647;XDa(e,D,y,c+12|0);y=e+8|0;o=k[y>>2]|0;eEa(o,l);k[y>>2]=o+24;ZDa(c,e);YDa(e)}CDa(l);NDa(m)}NDa(g);w=s+1+u|0;break a}while(0);NDa(g);Sc(A|0)}else w=a}else w=a;while(0);r=d;return w|0}function kEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=0;while(1){if((d|0)==3)break;k[a+(d<<2)>>2]=0;d=d+1|0}d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=RLa(c)|0;x=0;nb(176,a|0,(e?b+1|0:k[b+8>>2]|0)|0,f|0,f+d|0);f=x;x=0;if(!(f&1)?(x=0,Fa(146,a|0,c|0,d|0)|0,d=x,x=0,!(d&1)):0)return;d=Hc()|0;NDa(a);Sc(d|0)}function lEa(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];c=0;while(1){if((c|0)==3)break;k[b+(c<<2)>>2]=0;c=c+1|0}c=a+12|0;a=0;while(1){if((a|0)==3)break;k[c+(a<<2)>>2]=0;a=a+1|0}return}function mEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;do if(i[a>>0]&1){c=a+8|0;i[k[c>>2]>>0]=0;d=a+4|0;k[d>>2]=0;e=i[a>>0]|0;if(!(e&1)){f=e;g=10}else{e=k[a>>2]|0;f=e&255;g=(e&-2)+-1|0}if(!(f&1)){e=(f&255)>>>1;if((f&255)<22){h=10;j=e;l=1}else{h=(e+16&240)+-1|0;j=e;l=1}}else{h=10;j=0;l=0}if((h|0)!=(g|0)){if((h|0)==10){e=a+1|0;m=k[c>>2]|0;if(l){Dyb(e|0,m|0,((f&255)>>>1)+1|0)|0;yYa(m)}else{i[e>>0]=i[m>>0]|0;yYa(m)}i[a>>0]=j<<1;break}m=h+1|0;e=xYa(m)|0;if(!(h>>>0<=g>>>0&(e|0)==0)){if(l)Dyb(e|0,a+1|0,((f&255)>>>1)+1|0)|0;else{n=k[c>>2]|0;i[e>>0]=i[n>>0]|0;yYa(n)}k[a>>2]=m|1;k[d>>2]=j;k[c>>2]=e}}}else{i[a+1>>0]=0;i[a>>0]=0}while(0);k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];j=0;while(1){if((j|0)==3)break;k[b+(j<<2)>>2]=0;j=j+1|0}j=a+12|0;f=b+12|0;do if(i[j>>0]&1){b=a+20|0;i[k[b>>2]>>0]=0;l=a+16|0;k[l>>2]=0;g=i[j>>0]|0;if(!(g&1)){o=g;p=10}else{g=k[j>>2]|0;o=g&255;p=(g&-2)+-1|0}if(!(o&1)){g=(o&255)>>>1;if((o&255)<22){q=10;r=g;s=1}else{q=(g+16&240)+-1|0;r=g;s=1}}else{q=10;r=0;s=0}if((q|0)!=(p|0)){if((q|0)==10){g=j+1|0;h=k[b>>2]|0;if(s){Dyb(g|0,h|0,((o&255)>>>1)+1|0)|0;yYa(h)}else{i[g>>0]=i[h>>0]|0;yYa(h)}i[j>>0]=r<<1;break}h=q+1|0;g=xYa(h)|0;if(!(q>>>0<=p>>>0&(g|0)==0)){if(s)Dyb(g|0,j+1|0,((o&255)>>>1)+1|0)|0;else{e=k[b>>2]|0;i[g>>0]=i[e>>0]|0;yYa(e)}k[j>>2]=h|1;k[l>>2]=r;k[b>>2]=g}}}else{i[j+1>>0]=0;i[j>>0]=0}while(0);k[j>>2]=k[f>>2];k[j+4>>2]=k[f+4>>2];k[j+8>>2]=k[f+8>>2];j=0;while(1){if((j|0)==3)break;k[f+(j<<2)>>2]=0;j=j+1|0}return}function nEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0;d=r;r=r+352|0;e=d+324|0;f=d+304|0;g=d+284|0;h=d+264|0;j=d+244|0;l=d+240|0;m=d+228|0;n=d+216|0;o=d+200|0;p=d+192|0;q=d+180|0;s=d+168|0;t=d+152|0;u=d+144|0;v=d+132|0;w=d+120|0;y=d+104|0;z=d+100|0;A=d+88|0;B=d+72|0;C=d+64|0;D=d+52|0;E=d+40|0;F=d+24|0;G=d+4|0;H=d+8|0;I=d;J=b;a:do if((J-a|0)>1){K=(i[a>>0]|0)==76?a+1|0:a;L=i[K>>0]|0;switch(L<<24>>24|0){case 78:{b:do if((K|0)!=(b|0))if(L<<24>>24==78){N=SDa(K+1|0,b,l)|0;c:do if((N|0)!=(b|0)){O=c+52|0;k[O>>2]=0;switch(i[N>>0]|0){case 82:{k[O>>2]=1;P=N+1|0;break}case 79:{k[O>>2]=2;P=N+1|0;break}default:P=N}O=c+4|0;Q=k[O>>2]|0;R=k[c+8>>2]|0;S=R;if(Q>>>0>>0){k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=0;k[Q+12>>2]=0;k[Q+16>>2]=0;k[Q+20>>2]=0;R=0;while(1){if((R|0)==3)break;k[Q+(R<<2)>>2]=0;R=R+1|0}R=Q+12|0;T=0;while(1){if((T|0)==3)break;k[R+(T<<2)>>2]=0;T=T+1|0}k[O>>2]=(k[O>>2]|0)+24}else{T=k[c>>2]|0;R=Q-T|0;U=(R|0)/24|0;V=U+1|0;if((R|0)<-24)HBa(c);R=(S-T|0)/24|0;if(R>>>0<1073741823){T=R<<1;W=T>>>0>>0?V:T}else W=2147483647;XDa(e,W,U,c+12|0);U=e+8|0;T=k[U>>2]|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[T+16>>2]=0;k[T+20>>2]=0;V=0;while(1){if((V|0)==3)break;k[T+(V<<2)>>2]=0;V=V+1|0}V=T+12|0;S=0;while(1){if((S|0)==3)break;k[V+(S<<2)>>2]=0;S=S+1|0}k[U>>2]=T+24;ZDa(c,e);YDa(e)}if(((J-P|0)>1?(i[P>>0]|0)==83:0)?(i[P+1>>0]|0)==116:0){xEa((k[O>>2]|0)+-24|0,300288,3);X=P+2|0}else X=P;if((X|0)==(b|0)){S=k[O>>2]|0;V=S+-24|0;Q=S;while(1){if((Q|0)==(V|0))break c;S=Q+-24|0;k[O>>2]=S;CDa(S);Q=k[O>>2]|0}}Q=A+8|0;V=A+1|0;T=A+4|0;U=c+12|0;S=c+16|0;R=c+20|0;Y=c+24|0;Z=B+12|0;_=B+4|0;$=B+8|0;aa=c+28|0;ba=f+8|0;ca=F+12|0;da=F+4|0;ea=F+8|0;fa=e+8|0;ga=E+8|0;ha=E+1|0;ia=E+4|0;ja=n+8|0;ka=n+1|0;la=n+4|0;ma=o+12|0;na=o+4|0;oa=o+8|0;pa=j+8|0;qa=t+12|0;ra=t+4|0;sa=t+8|0;ta=h+8|0;ua=s+8|0;wa=s+1|0;xa=s+4|0;ya=y+12|0;za=y+4|0;Aa=y+8|0;Ba=g+8|0;Ca=w+8|0;Da=w+1|0;Ea=w+4|0;Ga=0;Ha=X;d:while(1){Ia=Ha;e:while(1){Ja=i[Ia>>0]|0;if(Ja<<24>>24==69){Ka=157;break d}switch(Ja<<24>>24|0){case 83:{La=Ia;Ka=39;break e;break}case 84:{Ma=Ia;Ka=65;break e;break}case 68:{Na=Ia;Ka=89;break e;break}case 73:break;case 76:{Ja=Ia+1|0;if((Ja|0)==(b|0))break c;else{Ia=Ja;continue e}break}default:{Oa=Ia;break e}}Ja=iEa(Ia,b,c)|0;if((Ja|0)==(Ia|0)|(Ja|0)==(b|0))break c;fEa(A,(k[O>>2]|0)+-24|0);Pa=k[O>>2]|0;Qa=Pa+-24|0;Ra=Pa;while(1){if((Ra|0)==(Qa|0))break;Sa=Ra+-24|0;k[O>>2]=Sa;CDa(Sa);Ra=k[O>>2]|0}Ra=i[A>>0]|0;Qa=(Ra&1)==0;x=0;Fa(146,Pa+-48|0,(Qa?V:k[Q>>2]|0)|0,(Qa?(Ra&255)>>>1:k[T>>2]|0)|0)|0;Ra=x;x=0;if(Ra&1){Ka=129;break d}Ra=(k[O>>2]|0)+-24|0;k[C>>2]=k[U>>2];x=0;fb(413,B|0,Ra|0,C|0);Ra=x;x=0;if(Ra&1){Ka=129;break d}Ra=k[R>>2]|0;Qa=k[Y>>2]|0;Sa=Qa;if(Ra>>>0>>0){k[Ra+12>>2]=k[Z>>2];k[Ra>>2]=k[B>>2];k[Ra+4>>2]=k[_>>2];k[Ra+8>>2]=k[$>>2];k[$>>2]=0;k[_>>2]=0;k[B>>2]=0;k[R>>2]=(k[R>>2]|0)+16}else{Qa=k[S>>2]|0;Ua=Ra-Qa|0;Ra=Ua>>4;Va=Ra+1|0;if((Ua|0)<-16){Ka=124;break d}Ua=Sa-Qa|0;if(Ua>>4>>>0<1073741823){Qa=Ua>>3;Wa=Qa>>>0>>0?Va:Qa}else Wa=2147483647;TDa(f,Wa,Ra,aa);Ra=k[ba>>2]|0;k[Ra+12>>2]=k[Z>>2];k[Ra>>2]=k[B>>2];k[Ra+4>>2]=k[_>>2];k[Ra+8>>2]=k[$>>2];k[$>>2]=0;k[_>>2]=0;k[B>>2]=0;k[ba>>2]=Ra+16;UDa(S,f);VDa(f)}DDa(B);NDa(A);Ia=Ja}f:do if((Ka|0)==39){Ka=0;Ra=La+1|0;if((Ra|0)!=(b|0)?(i[Ra>>0]|0)==116:0){Oa=La;break}Ra=oEa(La,b,c)|0;if((Ra|0)==(La|0)|(Ra|0)==(b|0))break c;fEa(m,(k[O>>2]|0)+-24|0);Qa=k[O>>2]|0;Va=Qa+-24|0;Ua=Qa;while(1){if((Ua|0)==(Va|0))break;Sa=Ua+-24|0;k[O>>2]=Sa;CDa(Sa);Ua=k[O>>2]|0}Ua=Qa+-48|0;Va=i[Ua>>0]|0;if(!(Va&1))Xa=(Va&255)>>>1;else Xa=k[Qa+-44>>2]|0;x=0;if(!Xa){yEa(Ua,m);Va=x;x=0;if(Va&1){Ka=60;break d}}else{qEa(n,300292,m);Va=x;x=0;if(Va&1){Ka=60;break d}Va=i[n>>0]|0;Ja=(Va&1)==0;x=0;Fa(146,Ua|0,(Ja?ka:k[ja>>2]|0)|0,(Ja?(Va&255)>>>1:k[la>>2]|0)|0)|0;Va=x;x=0;if(Va&1){Ka=61;break d}NDa(n);Va=(k[O>>2]|0)+-24|0;k[p>>2]=k[U>>2];x=0;fb(413,o|0,Va|0,p|0);Va=x;x=0;if(Va&1){Ka=60;break d}Va=k[R>>2]|0;Ja=k[Y>>2]|0;Ua=Ja;if(Va>>>0>>0){k[Va+12>>2]=k[ma>>2];k[Va>>2]=k[o>>2];k[Va+4>>2]=k[na>>2];k[Va+8>>2]=k[oa>>2];k[oa>>2]=0;k[na>>2]=0;k[o>>2]=0;k[R>>2]=(k[R>>2]|0)+16}else{Ja=k[S>>2]|0;Pa=Va-Ja|0;Va=Pa>>4;Sa=Va+1|0;if((Pa|0)<-16){Ka=55;break d}Pa=Ua-Ja|0;if(Pa>>4>>>0<1073741823){Ja=Pa>>3;Ya=Ja>>>0>>0?Sa:Ja}else Ya=2147483647;TDa(j,Ya,Va,aa);Va=k[pa>>2]|0;k[Va+12>>2]=k[ma>>2];k[Va>>2]=k[o>>2];k[Va+4>>2]=k[na>>2];k[Va+8>>2]=k[oa>>2];k[oa>>2]=0;k[na>>2]=0;k[o>>2]=0;k[pa>>2]=Va+16;UDa(S,j);VDa(j)}DDa(o)}NDa(m);Ga=1;Ha=Ra;continue d}else if((Ka|0)==65){Ka=0;Va=hEa(Ma,b,c)|0;if((Va|0)==(Ma|0)|(Va|0)==(b|0))break c;fEa(q,(k[O>>2]|0)+-24|0);Ja=k[O>>2]|0;Sa=Ja+-24|0;Pa=Ja;while(1){if((Pa|0)==(Sa|0))break;Ua=Pa+-24|0;k[O>>2]=Ua;CDa(Ua);Pa=k[O>>2]|0}Pa=Ja+-48|0;Sa=i[Pa>>0]|0;if(!(Sa&1))Za=(Sa&255)>>>1;else Za=k[Ja+-44>>2]|0;x=0;if(!Za){yEa(Pa,q);Sa=x;x=0;if(Sa&1){Ka=76;break d}}else{qEa(s,300292,q);Sa=x;x=0;if(Sa&1){Ka=76;break d}Sa=i[s>>0]|0;Ra=(Sa&1)==0;x=0;Fa(146,Pa|0,(Ra?wa:k[ua>>2]|0)|0,(Ra?(Sa&255)>>>1:k[xa>>2]|0)|0)|0;Sa=x;x=0;if(Sa&1){Ka=77;break d}NDa(s)}Sa=(k[O>>2]|0)+-24|0;k[u>>2]=k[U>>2];x=0;fb(413,t|0,Sa|0,u|0);Sa=x;x=0;if(Sa&1){Ka=76;break d}Sa=k[R>>2]|0;Ra=k[Y>>2]|0;Pa=Ra;if(Sa>>>0>>0){k[Sa+12>>2]=k[qa>>2];k[Sa>>2]=k[t>>2];k[Sa+4>>2]=k[ra>>2];k[Sa+8>>2]=k[sa>>2];k[sa>>2]=0;k[ra>>2]=0;k[t>>2]=0;k[R>>2]=(k[R>>2]|0)+16}else{Ra=k[S>>2]|0;Qa=Sa-Ra|0;Sa=Qa>>4;Ua=Sa+1|0;if((Qa|0)<-16){Ka=83;break d}Qa=Pa-Ra|0;if(Qa>>4>>>0<1073741823){Ra=Qa>>3;_a=Ra>>>0>>0?Ua:Ra}else _a=2147483647;TDa(h,_a,Sa,aa);Sa=k[ta>>2]|0;k[Sa+12>>2]=k[qa>>2];k[Sa>>2]=k[t>>2];k[Sa+4>>2]=k[ra>>2];k[Sa+8>>2]=k[sa>>2];k[sa>>2]=0;k[ra>>2]=0;k[t>>2]=0;k[ta>>2]=Sa+16;UDa(S,h);VDa(h)}DDa(t);NDa(q);Ga=1;Ha=Va;continue d}else if((Ka|0)==89){Ka=0;Sa=Na+1|0;if((Sa|0)!=(b|0))switch(i[Sa>>0]|0){case 84:case 116:break;default:{Oa=Na;break f}}Sa=pEa(Na,b,c)|0;if((Sa|0)==(Na|0)|(Sa|0)==(b|0))break c;fEa(v,(k[O>>2]|0)+-24|0);Ra=k[O>>2]|0;Ua=Ra+-24|0;Qa=Ra;while(1){if((Qa|0)==(Ua|0))break;Pa=Qa+-24|0;k[O>>2]=Pa;CDa(Pa);Qa=k[O>>2]|0}Qa=Ra+-48|0;Ua=i[Qa>>0]|0;if(!(Ua&1))$a=(Ua&255)>>>1;else $a=k[Ra+-44>>2]|0;x=0;if(!$a){yEa(Qa,v);Ua=x;x=0;if(Ua&1){Ka=102;break d}}else{qEa(w,300292,v);Ua=x;x=0;if(Ua&1){Ka=102;break d}Ua=i[w>>0]|0;Va=(Ua&1)==0;x=0;Fa(146,Qa|0,(Va?Da:k[Ca>>2]|0)|0,(Va?(Ua&255)>>>1:k[Ea>>2]|0)|0)|0;Ua=x;x=0;if(Ua&1){Ka=103;break d}NDa(w)}Ua=(k[O>>2]|0)+-24|0;k[z>>2]=k[U>>2];x=0;fb(413,y|0,Ua|0,z|0);Ua=x;x=0;if(Ua&1){Ka=102;break d}Ua=k[R>>2]|0;Va=k[Y>>2]|0;Qa=Va;if(Ua>>>0>>0){k[Ua+12>>2]=k[ya>>2];k[Ua>>2]=k[y>>2];k[Ua+4>>2]=k[za>>2];k[Ua+8>>2]=k[Aa>>2];k[Aa>>2]=0;k[za>>2]=0;k[y>>2]=0;k[R>>2]=(k[R>>2]|0)+16}else{Va=k[S>>2]|0;Ja=Ua-Va|0;Ua=Ja>>4;Pa=Ua+1|0;if((Ja|0)<-16){Ka=109;break d}Ja=Qa-Va|0;if(Ja>>4>>>0<1073741823){Va=Ja>>3;ab=Va>>>0>>0?Pa:Va}else ab=2147483647;TDa(g,ab,Ua,aa);Ua=k[Ba>>2]|0;k[Ua+12>>2]=k[ya>>2];k[Ua>>2]=k[y>>2];k[Ua+4>>2]=k[za>>2];k[Ua+8>>2]=k[Aa>>2];k[Aa>>2]=0;k[za>>2]=0;k[y>>2]=0;k[Ba>>2]=Ua+16;UDa(S,g);VDa(g)}DDa(y);NDa(v);Ga=1;Ha=Sa;continue d}while(0);Ua=zEa(Oa,b,c)|0;if((Ua|0)==(Oa|0)|(Ua|0)==(b|0))break c;fEa(D,(k[O>>2]|0)+-24|0);Va=k[O>>2]|0;Pa=Va+-24|0;Ja=Va;while(1){if((Ja|0)==(Pa|0))break;Qa=Ja+-24|0;k[O>>2]=Qa;CDa(Qa);Ja=k[O>>2]|0}Ja=Va+-48|0;Pa=i[Ja>>0]|0;if(!(Pa&1))bb=(Pa&255)>>>1;else bb=k[Va+-44>>2]|0;x=0;if(!bb){yEa(Ja,D);Pa=x;x=0;if(Pa&1){Ka=143;break}}else{qEa(E,300292,D);Pa=x;x=0;if(Pa&1){Ka=143;break}Pa=i[E>>0]|0;Qa=(Pa&1)==0;x=0;Fa(146,Ja|0,(Qa?ha:k[ga>>2]|0)|0,(Qa?(Pa&255)>>>1:k[ia>>2]|0)|0)|0;Pa=x;x=0;if(Pa&1){Ka=144;break}NDa(E)}Pa=(k[O>>2]|0)+-24|0;k[G>>2]=k[U>>2];x=0;fb(413,F|0,Pa|0,G|0);Pa=x;x=0;if(Pa&1){Ka=143;break}Pa=k[R>>2]|0;Qa=k[Y>>2]|0;Ja=Qa;if(Pa>>>0>>0){k[Pa+12>>2]=k[ca>>2];k[Pa>>2]=k[F>>2];k[Pa+4>>2]=k[da>>2];k[Pa+8>>2]=k[ea>>2];k[ea>>2]=0;k[da>>2]=0;k[F>>2]=0;k[R>>2]=(k[R>>2]|0)+16}else{Qa=k[S>>2]|0;cb=Pa-Qa|0;Pa=cb>>4;db=Pa+1|0;if((cb|0)<-16){Ka=150;break}cb=Ja-Qa|0;if(cb>>4>>>0<1073741823){Qa=cb>>3;eb=Qa>>>0>>0?db:Qa}else eb=2147483647;TDa(e,eb,Pa,aa);Pa=k[fa>>2]|0;k[Pa+12>>2]=k[ca>>2];k[Pa>>2]=k[F>>2];k[Pa+4>>2]=k[da>>2];k[Pa+8>>2]=k[ea>>2];k[ea>>2]=0;k[da>>2]=0;k[F>>2]=0;k[fa>>2]=Pa+16;UDa(S,e);VDa(e)}DDa(F);NDa(D);Ga=1;Ha=Ua}switch(Ka|0){case 55:{x=0;va(1473,S|0);x=0;Ha=Hc()|0;fa=M;DDa(o);gb=fa;hb=Ha;Ka=64;break}case 60:{Ha=Hc()|0;gb=M;hb=Ha;Ka=64;break}case 61:{Ha=Hc()|0;fa=M;NDa(n);gb=fa;hb=Ha;Ka=64;break}case 76:{Ha=Hc()|0;ib=M;jb=Ha;Ka=88;break}case 77:{Ha=Hc()|0;fa=M;NDa(s);ib=fa;jb=Ha;Ka=88;break}case 83:{x=0;va(1473,S|0);x=0;Ha=Hc()|0;fa=M;DDa(t);ib=fa;jb=Ha;Ka=88;break}case 102:{Ha=Hc()|0;kb=M;lb=Ha;Ka=114;break}case 103:{Ha=Hc()|0;fa=M;NDa(w);kb=fa;lb=Ha;Ka=114;break}case 109:{x=0;va(1473,S|0);x=0;Ha=Hc()|0;fa=M;DDa(y);kb=fa;lb=Ha;Ka=114;break}case 124:{x=0;va(1473,S|0);x=0;Ha=Hc()|0;fa=M;DDa(B);mb=fa;nb=Ha;Ka=130;break}case 129:{Ha=Hc()|0;mb=M;nb=Ha;Ka=130;break}case 143:{Ha=Hc()|0;ob=M;pb=Ha;Ka=156;break}case 144:{Ha=Hc()|0;fa=M;NDa(E);ob=fa;pb=Ha;Ka=156;break}case 150:{x=0;va(1473,S|0);x=0;Ha=Hc()|0;fa=M;DDa(F);ob=fa;pb=Ha;Ka=156;break}case 157:{Ha=Ia+1|0;k[c+48>>2]=k[l>>2];g:do if(Ga?(fa=k[R>>2]|0,(k[c+16>>2]|0)!=(fa|0)):0){da=fa+-16|0;ea=fa;while(1){if((ea|0)==(da|0))break g;fa=ea+-16|0;k[R>>2]=fa;DDa(fa);ea=k[R>>2]|0}}while(0);qb=Ha;break b;break}}if((Ka|0)==64){NDa(m);rb=gb;sb=hb}else if((Ka|0)==88){NDa(q);rb=ib;sb=jb}else if((Ka|0)==114){NDa(v);rb=kb;sb=lb}else if((Ka|0)==130){NDa(A);rb=mb;sb=nb}else if((Ka|0)==156){NDa(D);rb=ob;sb=pb}Sc(sb|0)}while(0);qb=K}else qb=K;else qb=b;while(0);tb=(qb|0)==(K|0)?a:qb;break a;break}case 90:{h:do if(((L<<24>>24==90&(K|0)!=(b|0)?(N=K+1|0,R=ODa(N,b,c)|0,!((R|0)==(N|0)|(R|0)==(b|0))):0)?(i[R>>0]|0)==69:0)?(N=R+1|0,(N|0)!=(b|0)):0){switch(i[N>>0]|0){case 115:{Ga=AEa(R+2|0,b)|0;S=k[c+4>>2]|0;if((k[c>>2]|0)==(S|0)){ub=Ga;break h}QDa(S+-24|0,300295)|0;ub=Ga;break h;break}case 100:{Ga=R+2|0;if((Ga|0)==(b|0)){ub=K;break h}R=bEa(Ga,b)|0;if((R|0)==(b|0)){ub=K;break h}if((i[R>>0]|0)!=95){ub=K;break h}Ga=R+1|0;R=nEa(Ga,b,c)|0;S=c+4|0;if((R|0)==(Ga|0)){Ga=k[S>>2]|0;ea=Ga+-24|0;da=Ga;while(1){if((da|0)==(ea|0)){ub=K;break h}Ga=da+-24|0;k[S>>2]=Ga;CDa(Ga);da=k[S>>2]|0}}da=k[S>>2]|0;if(((da-(k[c>>2]|0)|0)/24|0)>>>0<2){ub=K;break h}fEa(e,da+-24|0);da=k[S>>2]|0;ea=da+-24|0;Ga=da;while(1){if((Ga|0)==(ea|0))break;Ua=Ga+-24|0;k[S>>2]=Ua;CDa(Ua);Ga=k[S>>2]|0}x=0;Ta(630,da+-48|0,300292)|0;Ga=x;x=0;if(!(Ga&1)?(Ga=i[e>>0]|0,ea=(Ga&1)==0,x=0,Fa(146,(k[S>>2]|0)+-24|0,(ea?e+1|0:k[e+8>>2]|0)|0,(ea?(Ga&255)>>>1:k[e+4>>2]|0)|0)|0,Ga=x,x=0,!(Ga&1)):0){NDa(e);ub=R;break h}Ga=Hc()|0;ea=M;NDa(e);vb=ea;wb=Ga;break}default:{Ga=nEa(N,b,c)|0;if((Ga|0)==(N|0)){ea=c+4|0;Ua=k[ea>>2]|0;Va=Ua+-24|0;fa=Ua;while(1){if((fa|0)==(Va|0)){ub=K;break h}Ua=fa+-24|0;k[ea>>2]=Ua;CDa(Ua);fa=k[ea>>2]|0}}ea=AEa(Ga,b)|0;fa=c+4|0;Va=k[fa>>2]|0;if(((Va-(k[c>>2]|0)|0)/24|0)>>>0<2){ub=ea;break h}fEa(f,Va+-24|0);Va=k[fa>>2]|0;N=Va+-24|0;R=Va;while(1){if((R|0)==(N|0))break;S=R+-24|0;k[fa>>2]=S;CDa(S);R=k[fa>>2]|0}x=0;Ta(630,Va+-48|0,300292)|0;R=x;x=0;if(!(R&1)?(R=i[f>>0]|0,N=(R&1)==0,x=0,Fa(146,(k[fa>>2]|0)+-24|0,(N?f+1|0:k[f+8>>2]|0)|0,(N?(R&255)>>>1:k[f+4>>2]|0)|0)|0,R=x,x=0,!(R&1)):0){NDa(f);ub=ea;break h}R=Hc()|0;N=M;NDa(f);vb=N;wb=R}}Sc(wb|0)}else ub=K;while(0);tb=(ub|0)==(K|0)?a:ub;break a;break}default:{do if((J-K|0)>1){if(L<<24>>24==83?(i[K+1>>0]|0)==116:0){R=K+2|0;if((R|0)==(b|0)){xb=0;yb=b}else{xb=0;yb=(i[R>>0]|0)==76?K+3|0:R}}else{xb=1;yb=K}R=zEa(yb,b,c)|0;N=(R|0)==(yb|0);if(xb|N)zb=N?K:R;else{N=k[c+4>>2]|0;if((k[c>>2]|0)==(N|0)){Ka=229;break}PDa(N+-24|0,0,300312)|0;zb=R}if((zb|0)!=(K|0)){if((zb|0)==(b|0)){tb=b;break a}if((i[zb>>0]|0)!=73){tb=zb;break a}R=c+4|0;N=k[R>>2]|0;if((k[c>>2]|0)==(N|0)){tb=a;break a}Ga=c+16|0;k[I>>2]=k[c+12>>2];gEa(H,N+-24|0,I);N=c+20|0;S=k[N>>2]|0;da=k[c+24>>2]|0;Ua=da;if(S>>>0>>0){k[S+12>>2]=k[H+12>>2];k[S>>2]=k[H>>2];da=H+4|0;k[S+4>>2]=k[da>>2];ca=H+8|0;k[S+8>>2]=k[ca>>2];k[ca>>2]=0;k[da>>2]=0;k[H>>2]=0;k[N>>2]=(k[N>>2]|0)+16}else{N=k[Ga>>2]|0;da=S-N|0;S=da>>4;ca=S+1|0;if((da|0)<-16){x=0;va(1473,Ga|0);x=0;da=Hc()|0;aa=M;DDa(H);Ab=aa;Bb=da;break}da=Ua-N|0;if(da>>4>>>0<1073741823){N=da>>3;Cb=N>>>0>>0?ca:N}else Cb=2147483647;TDa(e,Cb,S,c+28|0);S=e+8|0;N=k[S>>2]|0;k[N+12>>2]=k[H+12>>2];k[N>>2]=k[H>>2];ca=H+4|0;k[N+4>>2]=k[ca>>2];da=H+8|0;k[N+8>>2]=k[da>>2];k[da>>2]=0;k[ca>>2]=0;k[H>>2]=0;k[S>>2]=N+16;UDa(Ga,e);VDa(e)}DDa(H);Ga=iEa(zb,b,c)|0;if((Ga|0)==(zb|0)){tb=a;break a}N=k[R>>2]|0;if(((N-(k[c>>2]|0)|0)/24|0)>>>0<2){tb=a;break a}fEa(f,N+-24|0);N=k[R>>2]|0;S=N+-24|0;ca=N;while(1){if((ca|0)==(S|0))break;da=ca+-24|0;k[R>>2]=da;CDa(da);ca=k[R>>2]|0}R=i[f>>0]|0;ca=(R&1)==0;x=0;Fa(146,N+-48|0,(ca?f+1|0:k[f+8>>2]|0)|0,(ca?(R&255)>>>1:k[f+4>>2]|0)|0)|0;R=x;x=0;if(R&1){R=Hc()|0;ca=M;NDa(f);Ab=ca;Bb=R;break}else{NDa(f);tb=Ga;break a}}else Ka=229}else Ka=229;while(0);do if((Ka|0)==229){L=oEa(K,b,c)|0;if((L|0)==(K|0)|(L|0)==(b|0)){tb=a;break a}if((i[L>>0]|0)!=73){tb=a;break a}R=iEa(L,b,c)|0;if((R|0)==(L|0)){tb=a;break a}L=c+4|0;ca=k[L>>2]|0;if(((ca-(k[c>>2]|0)|0)/24|0)>>>0<2){tb=a;break a}fEa(g,ca+-24|0);ca=k[L>>2]|0;S=ca+-24|0;ea=ca;while(1){if((ea|0)==(S|0))break;fa=ea+-24|0;k[L>>2]=fa;CDa(fa);ea=k[L>>2]|0}L=i[g>>0]|0;ea=(L&1)==0;x=0;Fa(146,ca+-48|0,(ea?g+1|0:k[g+8>>2]|0)|0,(ea?(L&255)>>>1:k[g+4>>2]|0)|0)|0;L=x;x=0;if(L&1){L=Hc()|0;ea=M;NDa(g);Ab=ea;Bb=L;break}else{NDa(g);tb=R;break a}}while(0);Sc(Bb|0)}}}else tb=a;while(0);r=d;return tb|0}function oEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;d=r;r=r+272|0;e=d+252|0;f=d+232|0;g=d+212|0;h=d+192|0;j=d+144|0;l=d+96|0;m=d+168|0;n=d+120|0;o=d+72|0;p=d+48|0;q=d+24|0;s=d;a:do if((b-a|0)>1?(i[a>>0]|0)==83:0){t=a+1|0;u=i[t>>0]|0;v=u<<24>>24;b:do switch(v|0){case 97:{sEa(m,300203);w=c+4|0;y=k[w>>2]|0;z=k[c+8>>2]|0;A=z;if(y>>>0>>0){eEa(y,m);k[w>>2]=(k[w>>2]|0)+24}else{w=k[c>>2]|0;z=y-w|0;y=(z|0)/24|0;B=y+1|0;if((z|0)<-24){x=0;va(1473,c|0);x=0;z=Hc()|0;C=M;CDa(m);D=z;E=C;break b}C=(A-w|0)/24|0;if(C>>>0<1073741823){w=C<<1;F=w>>>0>>0?B:w}else F=2147483647;XDa(l,F,y,c+12|0);y=l+8|0;w=k[y>>2]|0;eEa(w,m);k[y>>2]=w+24;ZDa(c,l);YDa(l)}CDa(m);G=a+2|0;break a;break}case 98:{tEa(n,300218);w=c+4|0;y=k[w>>2]|0;B=k[c+8>>2]|0;C=B;if(y>>>0>>0){eEa(y,n);k[w>>2]=(k[w>>2]|0)+24}else{w=k[c>>2]|0;B=y-w|0;y=(B|0)/24|0;A=y+1|0;if((B|0)<-24){x=0;va(1473,c|0);x=0;B=Hc()|0;z=M;CDa(n);D=B;E=z;break b}z=(C-w|0)/24|0;if(z>>>0<1073741823){w=z<<1;H=w>>>0>>0?A:w}else H=2147483647;XDa(j,H,y,c+12|0);y=j+8|0;w=k[y>>2]|0;eEa(w,n);k[y>>2]=w+24;ZDa(c,j);YDa(j)}CDa(n);G=a+2|0;break a;break}case 115:{uEa(o,300236);w=c+4|0;y=k[w>>2]|0;A=k[c+8>>2]|0;z=A;if(y>>>0>>0){eEa(y,o);k[w>>2]=(k[w>>2]|0)+24}else{w=k[c>>2]|0;A=y-w|0;y=(A|0)/24|0;C=y+1|0;if((A|0)<-24){x=0;va(1473,c|0);x=0;A=Hc()|0;B=M;CDa(o);D=A;E=B;break b}B=(z-w|0)/24|0;if(B>>>0<1073741823){w=B<<1;I=w>>>0>>0?C:w}else I=2147483647;XDa(h,I,y,c+12|0);y=h+8|0;w=k[y>>2]|0;eEa(w,o);k[y>>2]=w+24;ZDa(c,h);YDa(h)}CDa(o);G=a+2|0;break a;break}case 105:{vEa(p,300248);w=c+4|0;y=k[w>>2]|0;C=k[c+8>>2]|0;B=C;if(y>>>0>>0){eEa(y,p);k[w>>2]=(k[w>>2]|0)+24}else{w=k[c>>2]|0;C=y-w|0;y=(C|0)/24|0;z=y+1|0;if((C|0)<-24){x=0;va(1473,c|0);x=0;C=Hc()|0;A=M;CDa(p);D=C;E=A;break b}A=(B-w|0)/24|0;if(A>>>0<1073741823){w=A<<1;J=w>>>0>>0?z:w}else J=2147483647;XDa(g,J,y,c+12|0);y=g+8|0;w=k[y>>2]|0;eEa(w,p);k[y>>2]=w+24;ZDa(c,g);YDa(g)}CDa(p);G=a+2|0;break a;break}case 111:{vEa(q,300261);w=c+4|0;y=k[w>>2]|0;z=k[c+8>>2]|0;A=z;if(y>>>0>>0){eEa(y,q);k[w>>2]=(k[w>>2]|0)+24}else{w=k[c>>2]|0;z=y-w|0;y=(z|0)/24|0;B=y+1|0;if((z|0)<-24){x=0;va(1473,c|0);x=0;z=Hc()|0;C=M;CDa(q);D=z;E=C;break b}C=(A-w|0)/24|0;if(C>>>0<1073741823){w=C<<1;K=w>>>0>>0?B:w}else K=2147483647;XDa(f,K,y,c+12|0);y=f+8|0;w=k[y>>2]|0;eEa(w,q);k[y>>2]=w+24;ZDa(c,f);YDa(f)}CDa(q);G=a+2|0;break a;break}case 100:{wEa(s,300274);w=c+4|0;y=k[w>>2]|0;B=k[c+8>>2]|0;C=B;if(y>>>0>>0){eEa(y,s);k[w>>2]=(k[w>>2]|0)+24}else{w=k[c>>2]|0;B=y-w|0;y=(B|0)/24|0;A=y+1|0;if((B|0)<-24){x=0;va(1473,c|0);x=0;B=Hc()|0;z=M;CDa(s);D=B;E=z;break b}z=(C-w|0)/24|0;if(z>>>0<1073741823){w=z<<1;L=w>>>0>>0?A:w}else L=2147483647;XDa(e,L,y,c+12|0);y=e+8|0;w=k[y>>2]|0;eEa(w,s);k[y>>2]=w+24;ZDa(c,e);YDa(e)}CDa(s);G=a+2|0;break a;break}case 95:{w=k[c+16>>2]|0;if((w|0)==(k[c+20>>2]|0)){G=a;break a}y=k[w+4>>2]|0;A=c+4|0;z=c+8|0;C=c+12|0;B=e+8|0;N=k[w>>2]|0;while(1){if((N|0)==(y|0)){O=55;break}w=k[A>>2]|0;P=k[z>>2]|0;Q=P;if((w|0)==(P|0)){P=k[c>>2]|0;R=w-P|0;S=(R|0)/24|0;T=S+1|0;if((R|0)<-24){O=61;break}R=(Q-P|0)/24|0;if(R>>>0<1073741823){P=R<<1;U=P>>>0>>0?T:P}else U=2147483647;XDa(e,U,S,C);S=k[B>>2]|0;x=0;xa(934,S|0,N|0);P=x;x=0;if(P&1){O=67;break}x=0;xa(934,S+12|0,N+12|0);P=x;x=0;if(P&1){V=S;O=66;break}k[B>>2]=S+24;ZDa(c,e);YDa(e)}else{WDa(w,N);x=0;xa(934,w+12|0,N+12|0);S=x;x=0;if(S&1){W=w;O=58;break}k[A>>2]=(k[A>>2]|0)+24}N=N+24|0}if((O|0)==55){G=a+2|0;break a}else if((O|0)==58){N=Hc()|0;NDa(W);Sc(N|0)}else if((O|0)==61)HBa(c);else if((O|0)==66){N=Hc()|0;A=M;NDa(V);X=A;Y=N}else if((O|0)==67){N=Hc()|0;X=M;Y=N}YDa(e);Sc(Y|0);break}default:{if((v+-48|0)>>>0<10)Z=u;else{if(!(MIa(v)|0)){G=a;break a}Z=i[t>>0]|0}N=Z<<24>>24;A=N+-48|0;B=A>>>0<10?A:N+-55|0;N=a+2|0;while(1){if((N|0)==(b|0)){G=a;break a}A=i[N>>0]|0;C=A<<24>>24;if((C+-48|0)>>>0>=10){z=(MIa(C)|0)==0;C=i[N>>0]|0;if(z){_=C;$=B;aa=N;break}else ba=C}else ba=A;A=ba<<24>>24;C=A+-48|0;B=(C>>>0<10?C:A+-55|0)+(B*36|0)|0;N=N+1|0}if(_<<24>>24!=95){G=a;break a}N=$+1|0;B=k[c+16>>2]|0;A=B;if(N>>>0>=(k[c+20>>2]|0)-B>>4>>>0){G=a;break a}B=k[A+(N<<4)+4>>2]|0;C=c+4|0;z=c+8|0;y=c+12|0;w=e+8|0;S=k[A+(N<<4)>>2]|0;while(1){if((S|0)==(B|0)){O=83;break}N=k[C>>2]|0;A=k[z>>2]|0;P=A;if((N|0)==(A|0)){A=k[c>>2]|0;T=N-A|0;R=(T|0)/24|0;Q=R+1|0;if((T|0)<-24){O=89;break}T=(P-A|0)/24|0;if(T>>>0<1073741823){A=T<<1;ca=A>>>0>>0?Q:A}else ca=2147483647;XDa(e,ca,R,y);R=k[w>>2]|0;x=0;xa(934,R|0,S|0);A=x;x=0;if(A&1){O=95;break}x=0;xa(934,R+12|0,S+12|0);A=x;x=0;if(A&1){da=R;O=94;break}k[w>>2]=R+24;ZDa(c,e);YDa(e)}else{WDa(N,S);x=0;xa(934,N+12|0,S+12|0);R=x;x=0;if(R&1){ea=N;O=86;break}k[C>>2]=(k[C>>2]|0)+24}S=S+24|0}if((O|0)==83){G=aa+1|0;break a}else if((O|0)==86){S=Hc()|0;NDa(ea);Sc(S|0)}else if((O|0)==89)HBa(c);else if((O|0)==94){S=Hc()|0;C=M;NDa(da);fa=C;ga=S}else if((O|0)==95){S=Hc()|0;fa=M;ga=S}YDa(e);Sc(ga|0)}}while(0);Sc(D|0)}else G=a;while(0);r=d;return G|0}function pEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+64|0;e=d+40|0;f=d+24|0;g=d+12|0;h=d;a:do if((b-a|0)>3?(i[a>>0]|0)==68:0){switch(i[a+1>>0]|0){case 84:case 116:break;default:{j=a;break a}}l=a+2|0;m=dEa(l,b,c)|0;if((!((m|0)==(l|0)|(m|0)==(b|0))?(i[m>>0]|0)==69:0)?(l=k[c+4>>2]|0,(k[c>>2]|0)!=(l|0)):0){n=l+-24|0;fEa(h,n);x=0;l=Fa(147,h|0,0,300193)|0;o=x;x=0;do if(o&1){p=Hc()|0;q=M;s=p}else{k[g>>2]=k[l>>2];k[g+4>>2]=k[l+4>>2];k[g+8>>2]=k[l+8>>2];p=0;while(1){if((p|0)==3)break;k[l+(p<<2)>>2]=0;p=p+1|0}x=0;p=Ta(630,g|0,300015)|0;t=x;x=0;if(t&1){t=Hc()|0;u=M;NDa(g);q=u;s=t;break};k[f>>2]=k[p>>2];k[f+4>>2]=k[p+4>>2];k[f+8>>2]=k[p+8>>2];t=0;while(1){if((t|0)==3)break;k[p+(t<<2)>>2]=0;t=t+1|0}lEa(e,f);mEa(n,e);CDa(e);NDa(f);NDa(g);NDa(h);j=m+1|0;break a}while(0);NDa(h);Sc(s|0)}else j=a}else j=a;while(0);r=d;return j|0}function qEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=0;while(1){if((d|0)==3)break;k[a+(d<<2)>>2]=0;d=d+1|0}d=RLa(b)|0;e=i[c>>0]|0;f=(e&1)==0?(e&255)>>>1:k[c+4>>2]|0;x=0;nb(176,a|0,b|0,d|0,f+d|0);d=x;x=0;if(!(d&1)?(x=0,Fa(146,a|0,((i[c>>0]&1)==0?c+1|0:k[c+8>>2]|0)|0,f|0)|0,f=x,x=0,!(f&1)):0)return;f=Hc()|0;NDa(a);Sc(f|0)}function rEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(d>>>0>4294967279)GBa(a);if(d>>>0<11){i[a>>0]=c<<1;e=a+1|0}else{f=d+16&-16;d=xYa(f)|0;k[a+8>>2]=d;k[a>>2]=f|1;k[a+4>>2]=c;e=d}Dyb(e|0,b|0,c|0)|0;i[e+c>>0]=0;return}function sEa(a,b){a=a|0;b=b|0;$Da(a,b,14);b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function tEa(a,b){a=a|0;b=b|0;$Da(a,b,17);b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function uEa(a,b){a=a|0;b=b|0;$Da(a,b,11);b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function vEa(a,b){a=a|0;b=b|0;$Da(a,b,12);b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function wEa(a,b){a=a|0;b=b|0;$Da(a,b,13);b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function xEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}d=(f&1)==0;do if(e>>>0>=c>>>0){if(d)g=a+1|0;else g=k[a+8>>2]|0;Eyb(g|0,b|0,c|0)|0;i[g+c>>0]=0;if(!(i[a>>0]&1)){i[a>>0]=c<<1;break}else{k[a+4>>2]=c;break}}else{if(d)h=(f&255)>>>1;else h=k[a+4>>2]|0;MDa(a,e,c-e|0,h,0,h,c,b)}while(0);return}function yEa(a,b){a=a|0;b=b|0;var c=0,d=0;if((a|0)!=(b|0)){c=i[b>>0]|0;d=(c&1)==0;xEa(a,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)}return}function zEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;d=r;r=r+144|0;e=d+124|0;f=d+104|0;g=d+80|0;h=d+64|0;j=d+40|0;l=d+24|0;m=d+12|0;n=d;a:do if((a|0)==(b|0))o=a;else{p=i[a>>0]|0;q=p<<24>>24;switch(q|0){case 68:case 67:{b:do if((b-a|0)>1?(s=c+4|0,t=k[s>>2]|0,(k[c>>2]|0)!=(t|0)):0){c:do switch(q|0){case 67:{switch(i[a+1>>0]|0){case 53:case 51:case 50:case 49:break;default:{u=a;break b}}BEa(h,t+-24|0);lEa(g,h);v=k[s>>2]|0;w=k[c+8>>2]|0;y=w;if(v>>>0>>0){eEa(v,g);k[s>>2]=(k[s>>2]|0)+24}else{w=k[c>>2]|0;z=v-w|0;v=(z|0)/24|0;A=v+1|0;if((z|0)<-24){x=0;va(1473,c|0);x=0;z=Hc()|0;B=M;CDa(g);NDa(h);C=B;D=z;break c}z=(y-w|0)/24|0;if(z>>>0<1073741823){w=z<<1;E=w>>>0>>0?A:w}else E=2147483647;XDa(f,E,v,c+12|0);v=f+8|0;w=k[v>>2]|0;eEa(w,g);k[v>>2]=w+24;ZDa(c,f);YDa(f)}CDa(g);NDa(h);i[c+60>>0]=1;u=a+2|0;break b;break}case 68:{switch(i[a+1>>0]|0){case 53:case 50:case 49:case 48:break;default:{u=a;break b}}BEa(m,t+-24|0);x=0;w=Fa(147,m|0,0,300318)|0;v=x;x=0;do if(v&1){A=Hc()|0;F=M;G=A}else{k[l>>2]=k[w>>2];k[l+4>>2]=k[w+4>>2];k[l+8>>2]=k[w+8>>2];A=0;while(1){if((A|0)==3)break;k[w+(A<<2)>>2]=0;A=A+1|0}lEa(j,l);A=k[s>>2]|0;z=k[c+8>>2]|0;y=z;if(A>>>0>>0){eEa(A,j);k[s>>2]=(k[s>>2]|0)+24}else{z=k[c>>2]|0;B=A-z|0;A=(B|0)/24|0;H=A+1|0;if((B|0)<-24){x=0;va(1473,c|0);x=0;B=Hc()|0;I=M;CDa(j);NDa(l);F=I;G=B;break}B=(y-z|0)/24|0;if(B>>>0<1073741823){z=B<<1;J=z>>>0>>0?H:z}else J=2147483647;XDa(e,J,A,c+12|0);A=e+8|0;z=k[A>>2]|0;eEa(z,j);k[A>>2]=z+24;ZDa(c,e);YDa(e)}CDa(j);NDa(l);NDa(m);i[c+60>>0]=1;u=a+2|0;break b}while(0);NDa(m);C=F;D=G;break}default:{u=a;break b}}while(0);Sc(D|0)}else u=a;while(0);o=u;break a;break}case 85:{d:do if((b-a|0)>2&p<<24>>24==85){e:do switch(i[a+1>>0]|0){case 116:{$Da(h,300320,8);lEa(g,h);q=c+4|0;s=k[q>>2]|0;t=k[c+8>>2]|0;w=t;if(s>>>0>>0){eEa(s,g);k[q>>2]=(k[q>>2]|0)+24}else{t=k[c>>2]|0;v=s-t|0;s=(v|0)/24|0;z=s+1|0;if((v|0)<-24){x=0;va(1473,c|0);x=0;v=Hc()|0;A=M;CDa(g);NDa(h);K=A;L=v;break e}v=(w-t|0)/24|0;if(v>>>0<1073741823){t=v<<1;N=t>>>0>>0?z:t}else N=2147483647;XDa(f,N,s,c+12|0);s=f+8|0;t=k[s>>2]|0;eEa(t,g);k[s>>2]=t+24;ZDa(c,f);YDa(f)}CDa(g);NDa(h);t=a+2|0;if((t|0)==(b|0)){s=k[q>>2]|0;z=s+-24|0;v=s;while(1){if((v|0)==(z|0)){O=a;break d}s=v+-24|0;k[q>>2]=s;CDa(s);v=k[q>>2]|0}}if(((i[t>>0]|0)+-48|0)>>>0<10){v=a+3|0;while(1){if((v|0)==(b|0)){P=b;break}if(((i[v>>0]|0)+-48|0)>>>0>=10){P=v;break}v=v+1|0}CEa((k[q>>2]|0)+-24|0,t,P);Q=P}else Q=t;DEa((k[q>>2]|0)+-24|0,39);if((Q|0)!=(b|0)?(i[Q>>0]|0)==95:0){O=Q+1|0;break d}v=k[q>>2]|0;z=v+-24|0;s=v;while(1){if((s|0)==(z|0)){O=a;break d}v=s+-24|0;k[q>>2]=v;CDa(v);s=k[q>>2]|0}break}case 108:{$Da(l,300329,9);lEa(j,l);q=c+4|0;s=k[q>>2]|0;z=k[c+8>>2]|0;t=z;if(s>>>0>>0){eEa(s,j);k[q>>2]=(k[q>>2]|0)+24}else{z=k[c>>2]|0;v=s-z|0;s=(v|0)/24|0;w=s+1|0;if((v|0)<-24){x=0;va(1473,c|0);x=0;v=Hc()|0;A=M;CDa(j);NDa(l);K=A;L=v;break e}v=(t-z|0)/24|0;if(v>>>0<1073741823){z=v<<1;R=z>>>0>>0?w:z}else R=2147483647;XDa(e,R,s,c+12|0);s=e+8|0;z=k[s>>2]|0;eEa(z,j);k[s>>2]=z+24;ZDa(c,e);YDa(e)}CDa(j);NDa(l);z=a+2|0;f:do if((i[z>>0]|0)==118){DEa((k[q>>2]|0)+-24|0,41);S=a+3|0}else{s=RDa(z,b,c)|0;if((s|0)==(z|0)){w=k[q>>2]|0;v=w+-24|0;t=w;while(1){if((t|0)==(v|0)){O=a;break d}w=t+-24|0;k[q>>2]=w;CDa(w);t=k[q>>2]|0}}t=k[q>>2]|0;if(((t-(k[c>>2]|0)|0)/24|0)>>>0<2){O=a;break d}fEa(m,t+-24|0);t=k[q>>2]|0;v=t+-24|0;w=t;while(1){if((w|0)==(v|0))break;A=w+-24|0;k[q>>2]=A;CDa(A);w=k[q>>2]|0}w=i[m>>0]|0;v=(w&1)==0;A=m+8|0;H=m+1|0;B=m+4|0;x=0;Fa(146,t+-48|0,(v?H:k[A>>2]|0)|0,(v?(w&255)>>>1:k[B>>2]|0)|0)|0;v=x;x=0;do if(!(v&1)){y=w;I=s;while(1){x=0;T=I;I=Fa(148,I|0,b|0,c|0)|0;U=x;x=0;if(U&1){V=78;break}if((I|0)==(T|0)){W=T;V=102;break}T=k[q>>2]|0;if(((T-(k[c>>2]|0)|0)/24|0)>>>0<2){V=142;break}x=0;xa(932,n|0,T+-24|0);T=x;x=0;if(T&1){V=78;break}g:do if(!(y&1)){i[H>>0]=0;i[m>>0]=0}else{T=k[A>>2]|0;i[T>>0]=0;k[B>>2]=0;U=k[m>>2]|0;X=(U&-2)+-1|0;Y=U&255;do if(!(Y&1)){Z=U>>>1&127;if((Y&255)<22){Dyb(H|0,T|0,(U>>>1&127)+1|0)|0;yYa(T);_=Z;break}$=Z+16&240;aa=$+-1|0;if((aa|0)==(X|0))break g;ba=xYa($)|0;if(aa>>>0<=X>>>0&(ba|0)==0)break g;Dyb(ba|0,H|0,(U>>>1&127)+1|0)|0;k[m>>2]=$|1;k[B>>2]=Z;k[A>>2]=ba;break g}else{i[H>>0]=0;yYa(T);_=0}while(0);i[m>>0]=_<<1}while(0);k[m>>2]=k[n>>2];k[m+4>>2]=k[n+4>>2];k[m+8>>2]=k[n+8>>2];T=0;while(1){if((T|0)==3)break;k[n+(T<<2)>>2]=0;T=T+1|0}NDa(n);T=k[q>>2]|0;U=T+-24|0;X=T;while(1){if((X|0)==(U|0))break;Y=X+-24|0;k[q>>2]=Y;CDa(Y);X=k[q>>2]|0}X=y;y=i[m>>0]|0;X=(y&1)==0;U=X?(y&255)>>>1:k[B>>2]|0;if(!U){y=y;I=I;continue}x=0;Ta(630,T+-48|0,300110)|0;Y=x;x=0;if(Y&1){V=78;break}x=0;Fa(146,(k[q>>2]|0)+-24|0,(X?H:k[A>>2]|0)|0,U|0)|0;U=x;x=0;if(U&1){V=78;break}}if((V|0)==78){I=Hc()|0;ca=I;da=M;break}else if((V|0)==102){x=0;Ta(630,(k[q>>2]|0)+-24|0,300015)|0;I=x;x=0;if(I&1){V=79;break}NDa(m);S=W;break f}else if((V|0)==142){NDa(m);O=a;break d}}else V=79;while(0);if((V|0)==79){A=Hc()|0;ca=A;da=M}NDa(m);K=da;L=ca;break e}while(0);if((S|0)!=(b|0)?(i[S>>0]|0)==69:0){z=S+1|0;if((z|0)==(b|0)){A=k[q>>2]|0;H=A+-24|0;B=A;while(1){if((B|0)==(H|0)){O=a;break d}A=B+-24|0;k[q>>2]=A;CDa(A);B=k[q>>2]|0}}h:do if(((i[z>>0]|0)+-48|0)>>>0<10){B=S+2|0;while(1){if((B|0)==(b|0)){ea=b;break}if(((i[B>>0]|0)+-48|0)>>>0>=10){ea=B;break}B=B+1|0}B=k[q>>2]|0;H=B+-24|0;A=i[H>>0]|0;s=B+-16|0;if(!(A&1)){fa=s;ga=H+1|0;ha=(A&255)>>>1;ia=10;ja=A}else{A=k[s>>2]|0;s=k[H>>2]|0;fa=A+7|0;ga=A;ha=k[B+-20>>2]|0;ia=(s&-2)+-1|0;ja=s&255}s=fa-ga|0;A=ea-z|0;if((ea|0)!=(z|0)){if((ia-ha|0)>>>0>=A>>>0){if(!(ja&1))ka=H+1|0;else ka=k[B+-16>>2]|0;if((ha|0)==(s|0))la=ka;else{w=ka+s|0;Eyb(w+A|0,w|0,ha-s|0)|0;la=ka}}else{EEa(H,ia,ha+A-ia|0,ha,s,A);la=k[B+-16>>2]|0}w=ha+A|0;if(!(i[H>>0]&1))i[H>>0]=w<<1;else k[B+-20>>2]=w;i[la+w>>0]=0;w=z;B=la+s|0;while(1){if((w|0)==(ea|0)){ma=ea;break h}i[B>>0]=i[w>>0]|0;w=w+1|0;B=B+1|0}}else ma=z}else ma=z;while(0);if((ma|0)!=(b|0)?(i[ma>>0]|0)==95:0){O=ma+1|0;break d}z=k[q>>2]|0;B=z+-24|0;w=z;while(1){if((w|0)==(B|0)){O=a;break d}z=w+-24|0;k[q>>2]=z;CDa(z);w=k[q>>2]|0}}w=k[q>>2]|0;B=w+-24|0;z=w;while(1){if((z|0)==(B|0)){O=a;break d}w=z+-24|0;k[q>>2]=w;CDa(w);z=k[q>>2]|0}break}default:{O=a;break d}}while(0);Sc(L|0)}else O=a;while(0);o=O;break a;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{o=jEa(a,b,c)|0;break a;break}default:{p=FEa(a,b,c)|0;r=d;return p|0}}}while(0);r=d;return o|0}function AEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;a:do if((a|0)!=(b|0)){c=i[a>>0]|0;if(c<<24>>24!=95){if(((c<<24>>24)+-48|0)>>>0<10)d=a;else{e=a;break}while(1){c=d+1|0;if((c|0)==(b|0)){e=b;break a}if(((i[c>>0]|0)+-48|0)>>>0<10)d=c;else{e=c;break a}}}c=a+1|0;if((c|0)!=(b|0)){f=i[c>>0]|0;if(((f<<24>>24)+-48|0)>>>0<10){e=a+2|0;break}if(f<<24>>24==95){f=a+2|0;while(1){if((f|0)==(b|0)){e=a;break a}c=i[f>>0]|0;if(((c<<24>>24)+-48|0)>>>0>=10){g=c;h=f;break}f=f+1|0}return (g<<24>>24==95?h+1|0:a)|0}else e=a}else e=a}else e=a;while(0);return e|0}function BEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;c=i[b>>0]|0;d=(c&1)==0;e=d?(c&255)>>>1:k[b+4>>2]|0;a:do if(!e)WDa(a,b);else{c=d?b+1|0:k[b+8>>2]|0;f=e>>>0>11;g=ZLa(c,300236,f?11:e)|0;if(!(((g|0)==0?(e>>>0<11?-1:f&1):g)|0)){xEa(b,300840,70);$Da(a,300911,12);break}g=e>>>0>12;f=g?12:e;h=ZLa(c,300248,f)|0;j=e>>>0<12?-1:g&1;if(!(((h|0)==0?j:h)|0)){xEa(b,300924,49);$Da(a,300974,13);break}h=ZLa(c,300261,f)|0;if(!(((h|0)==0?j:h)|0)){xEa(b,300988,49);$Da(a,301038,13);break}h=e>>>0>13;j=ZLa(c,300274,h?13:e)|0;if(!(((j|0)==0?(e>>>0<13?-1:h&1):j)|0)){xEa(b,301052,50);$Da(a,301103,14);break}j=c+e|0;b:do if((i[j+-1>>0]|0)==62){h=1;f=j;c:while(1){g=f;d:while(1){l=g+-1|0;if((l|0)==(c|0))break c;m=g+-2|0;switch(i[m>>0]|0){case 60:{n=m;o=l;p=18;break d;break}case 62:{q=l;p=19;break d;break}default:g=l}}if((p|0)==18){p=0;g=h+-1|0;if(!g){r=n;break b}else{h=g;f=o;continue}}else if((p|0)==19){p=0;h=h+1|0;f=q;continue}}f=0;while(1){if((f|0)==3)break a;k[a+(f<<2)>>2]=0;f=f+1|0}}else r=j;while(0);j=r;while(1){f=j+-1|0;if((f|0)==(c|0)){s=c;break}if((i[f>>0]|0)==58){s=j;break}else j=f}j=r-s|0;if(j>>>0>4294967279)GBa(a);if(j>>>0<11){i[a>>0]=j<<1;t=a+1|0}else{c=j+16&-16;f=xYa(c)|0;k[a+8>>2]=f;k[a>>2]=c|1;k[a+4>>2]=j;t=f}f=s;c=t;while(1){if((f|0)==(r|0))break;i[c>>0]=i[f>>0]|0;f=f+1|0;c=c+1|0}i[t+j>>0]=0}while(0);return}function CEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=b;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=10;h=e}else{e=k[a>>2]|0;f=k[a+4>>2]|0;g=(e&-2)+-1|0;h=e&255}e=c-d|0;do if((c|0)!=(b|0)){if((g-f|0)>>>0>>0){EEa(a,g,f+e-g|0,f,f,0);j=i[a>>0]|0}else j=h;if(!(j&1))l=a+1|0;else l=k[a+8>>2]|0;m=c+(f-d)|0;n=b;o=l+f|0;while(1){if((n|0)==(c|0))break;i[o>>0]=i[n>>0]|0;n=n+1|0;o=o+1|0}i[l+m>>0]=0;o=f+e|0;if(!(i[a>>0]&1)){i[a>>0]=o<<1;break}else{k[a+4>>2]=o;break}}while(0);return}function DEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=i[a>>0]|0;d=(c&1)!=0;if(d){e=(k[a>>2]&-2)+-1|0;f=k[a+4>>2]|0}else{e=10;f=(c&255)>>>1}if((f|0)==(e|0)){EEa(a,e,1,e,e,0);if(!(i[a>>0]&1))g=7;else g=8}else if(d)g=8;else g=7;if((g|0)==7){i[a>>0]=(f<<1)+2;h=a+1|0}else if((g|0)==8){g=k[a+8>>2]|0;k[a+4>>2]=f+1;h=g}g=h+f|0;i[g>>0]=b;i[g+1>>0]=0;return}function EEa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0;if((-17-b|0)>>>0>>0)GBa(a);if(!(i[a>>0]&1))g=a+1|0;else g=k[a+8>>2]|0;if(b>>>0<2147483623){h=c+b|0;c=b<<1;j=h>>>0>>0?c:h;l=j>>>0<11?11:j+16&-16}else l=-17;j=xYa(l)|0;if(e)Dyb(j|0,g|0,e|0)|0;if((d|0)!=(e|0))Dyb(j+e+f|0,g+e|0,d-e|0)|0;if((b|0)!=10)yYa(g);k[a+8>>2]=j;k[a>>2]=l|1;return}function FEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0;d=r;r=r+2032|0;e=d+2004|0;f=d+1984|0;g=d+1964|0;h=d+1944|0;j=d+1924|0;l=d+1904|0;m=d+1884|0;n=d+1864|0;o=d+1844|0;p=d+1824|0;q=d+1804|0;s=d+1784|0;t=d+1764|0;u=d+1744|0;v=d+1724|0;w=d+1704|0;y=d+1684|0;z=d+1664|0;A=d+1644|0;B=d+1624|0;C=d+1604|0;D=d+1584|0;E=d+1564|0;F=d+1544|0;G=d+1524|0;H=d+1504|0;I=d+1484|0;J=d+1464|0;K=d+1444|0;L=d+1424|0;N=d+1404|0;O=d+1384|0;P=d+1364|0;Q=d+1344|0;R=d+1324|0;S=d+1304|0;T=d+1284|0;U=d+1264|0;V=d+1244|0;W=d+1224|0;X=d+1204|0;Y=d+1184|0;Z=d+1164|0;_=d+1144|0;$=d+1124|0;aa=d+1104|0;ba=d+1080|0;ca=d+1056|0;da=d+1032|0;ea=d+1008|0;fa=d+984|0;ga=d+960|0;ha=d+936|0;ia=d+912|0;ja=d+888|0;ka=d+864|0;la=d+840|0;ma=d+816|0;na=d+792|0;oa=d+768|0;pa=d+744|0;qa=d+720|0;ra=d+696|0;sa=d+672|0;ta=d+648|0;ua=d+624|0;wa=d+600|0;xa=d+576|0;ya=d+552|0;za=d+528|0;Aa=d+504|0;Ba=d+480|0;Ca=d+456|0;Da=d+432|0;Ea=d+408|0;Fa=d+384|0;Ga=d+360|0;Ha=d+336|0;Ia=d+312|0;Ja=d+288|0;Ka=d+264|0;La=d+240|0;Ma=d+216|0;Na=d+192|0;Oa=d+168|0;Pa=d+144|0;Qa=d+120|0;Ra=d+96|0;Sa=d+72|0;Ta=d+48|0;Ua=d+24|0;Va=d;a:do if((b-a|0)>1){b:do switch(i[a>>0]|0){case 97:{switch(i[a+1>>0]|0){case 97:{GEa(ba,300339);Wa=c+4|0;Xa=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if(Xa>>>0>>0){eEa(Xa,ba);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=Xa-Wa|0;Xa=(Ya|0)/24|0;_a=Xa+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;$a=M;CDa(ba);ab=Ya;bb=$a;break b}$a=(Za-Wa|0)/24|0;if($a>>>0<1073741823){Wa=$a<<1;cb=Wa>>>0<_a>>>0?_a:Wa}else cb=2147483647;XDa(aa,cb,Xa,c+12|0);Xa=aa+8|0;Wa=k[Xa>>2]|0;eEa(Wa,ba);k[Xa>>2]=Wa+24;ZDa(c,aa);YDa(aa)}CDa(ba);db=a+2|0;break a;break}case 110:case 100:{HEa(ca,300350);Wa=c+4|0;Xa=k[Wa>>2]|0;_a=k[c+8>>2]|0;$a=_a;if(Xa>>>0<_a>>>0){eEa(Xa,ca);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=Xa-Wa|0;Xa=(_a|0)/24|0;Za=Xa+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(ca);ab=_a;bb=Ya;break b}Ya=($a-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;eb=Wa>>>0>>0?Za:Wa}else eb=2147483647;XDa($,eb,Xa,c+12|0);Xa=$+8|0;Wa=k[Xa>>2]|0;eEa(Wa,ca);k[Xa>>2]=Wa+24;ZDa(c,$);YDa($)}CDa(ca);db=a+2|0;break a;break}case 78:{GEa(da,300360);Wa=c+4|0;Xa=k[Wa>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if(Xa>>>0>>0){eEa(Xa,da);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Za=Xa-Wa|0;Xa=(Za|0)/24|0;$a=Xa+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(da);ab=Za;bb=_a;break b}_a=(Ya-Wa|0)/24|0;if(_a>>>0<1073741823){Wa=_a<<1;fb=Wa>>>0<$a>>>0?$a:Wa}else fb=2147483647;XDa(_,fb,Xa,c+12|0);Xa=_+8|0;Wa=k[Xa>>2]|0;eEa(Wa,da);k[Xa>>2]=Wa+24;ZDa(c,_);YDa(_)}CDa(da);db=a+2|0;break a;break}case 83:{HEa(ea,300371);Wa=c+4|0;Xa=k[Wa>>2]|0;$a=k[c+8>>2]|0;_a=$a;if(Xa>>>0<$a>>>0){eEa(Xa,ea);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;$a=Xa-Wa|0;Xa=($a|0)/24|0;Ya=Xa+1|0;if(($a|0)<-24){x=0;va(1473,c|0);x=0;$a=Hc()|0;Za=M;CDa(ea);ab=$a;bb=Za;break b}Za=(_a-Wa|0)/24|0;if(Za>>>0<1073741823){Wa=Za<<1;gb=Wa>>>0>>0?Ya:Wa}else gb=2147483647;XDa(Z,gb,Xa,c+12|0);Xa=Z+8|0;Wa=k[Xa>>2]|0;eEa(Wa,ea);k[Xa>>2]=Wa+24;ZDa(c,Z);YDa(Z)}CDa(ea);db=a+2|0;break a;break}default:{db=a;break a}}break}case 99:{switch(i[a+1>>0]|0){case 108:{GEa(fa,300381);Wa=c+4|0;Xa=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if(Xa>>>0>>0){eEa(Xa,fa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=Xa-Wa|0;Xa=(Ya|0)/24|0;_a=Xa+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;$a=M;CDa(fa);ab=Ya;bb=$a;break b}$a=(Za-Wa|0)/24|0;if($a>>>0<1073741823){Wa=$a<<1;hb=Wa>>>0<_a>>>0?_a:Wa}else hb=2147483647;XDa(Y,hb,Xa,c+12|0);Xa=Y+8|0;Wa=k[Xa>>2]|0;eEa(Wa,fa);k[Xa>>2]=Wa+24;ZDa(c,Y);YDa(Y)}CDa(fa);db=a+2|0;break a;break}case 109:{HEa(ga,300392);Wa=c+4|0;Xa=k[Wa>>2]|0;_a=k[c+8>>2]|0;$a=_a;if(Xa>>>0<_a>>>0){eEa(Xa,ga);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=Xa-Wa|0;Xa=(_a|0)/24|0;Za=Xa+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(ga);ab=_a;bb=Ya;break b}Ya=($a-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;ib=Wa>>>0>>0?Za:Wa}else ib=2147483647;XDa(X,ib,Xa,c+12|0);Xa=X+8|0;Wa=k[Xa>>2]|0;eEa(Wa,ga);k[Xa>>2]=Wa+24;ZDa(c,X);YDa(X)}CDa(ga);db=a+2|0;break a;break}case 111:{HEa(ha,300402);Wa=c+4|0;Xa=k[Wa>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if(Xa>>>0>>0){eEa(Xa,ha);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Za=Xa-Wa|0;Xa=(Za|0)/24|0;$a=Xa+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(ha);ab=Za;bb=_a;break b}_a=(Ya-Wa|0)/24|0;if(_a>>>0<1073741823){Wa=_a<<1;jb=Wa>>>0<$a>>>0?$a:Wa}else jb=2147483647;XDa(W,jb,Xa,c+12|0);Xa=W+8|0;Wa=k[Xa>>2]|0;eEa(Wa,ha);k[Xa>>2]=Wa+24;ZDa(c,W);YDa(W)}CDa(ha);db=a+2|0;break a;break}case 118:{Wa=c+63|0;Xa=i[Wa>>0]|0;i[Wa>>0]=0;$a=a+2|0;_a=RDa($a,b,c)|0;i[Wa>>0]=Xa;if((_a|0)==($a|0)){db=a;break a}$a=k[c+4>>2]|0;if((k[c>>2]|0)==($a|0)){db=a;break a}PDa($a+-24|0,0,300412)|0;i[c+60>>0]=1;db=_a;break a;break}default:{db=a;break a}}break}case 100:{switch(i[a+1>>0]|0){case 97:{tEa(ia,300422);_a=c+4|0;$a=k[_a>>2]|0;Xa=k[c+8>>2]|0;Wa=Xa;if($a>>>0>>0){eEa($a,ia);k[_a>>2]=(k[_a>>2]|0)+24}else{_a=k[c>>2]|0;Xa=$a-_a|0;$a=(Xa|0)/24|0;Ya=$a+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(ia);ab=Xa;bb=Za;break b}Za=(Wa-_a|0)/24|0;if(Za>>>0<1073741823){_a=Za<<1;kb=_a>>>0>>0?Ya:_a}else kb=2147483647;XDa(V,kb,$a,c+12|0);$a=V+8|0;_a=k[$a>>2]|0;eEa(_a,ia);k[$a>>2]=_a+24;ZDa(c,V);YDa(V)}CDa(ia);db=a+2|0;break a;break}case 101:{HEa(ja,300440);_a=c+4|0;$a=k[_a>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if($a>>>0>>0){eEa($a,ja);k[_a>>2]=(k[_a>>2]|0)+24}else{_a=k[c>>2]|0;Ya=$a-_a|0;$a=(Ya|0)/24|0;Wa=$a+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(ja);ab=Ya;bb=Xa;break b}Xa=(Za-_a|0)/24|0;if(Xa>>>0<1073741823){_a=Xa<<1;lb=_a>>>0>>0?Wa:_a}else lb=2147483647;XDa(U,lb,$a,c+12|0);$a=U+8|0;_a=k[$a>>2]|0;eEa(_a,ja);k[$a>>2]=_a+24;ZDa(c,U);YDa(U)}CDa(ja);db=a+2|0;break a;break}case 108:{_a=xYa(16)|0;k[ka+8>>2]=_a;k[ka>>2]=17;k[ka+4>>2]=15;$a=_a;Wa=300450;Xa=$a+15|0;do{i[$a>>0]=i[Wa>>0]|0;$a=$a+1|0;Wa=Wa+1|0}while(($a|0)<(Xa|0));i[_a+15>>0]=0;Wa=ka+12|0;$a=0;while(1){if(($a|0)==3)break;k[Wa+($a<<2)>>2]=0;$a=$a+1|0}$a=c+4|0;Wa=k[$a>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if(Wa>>>0<_a>>>0){eEa(Wa,ka);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;_a=Wa-$a|0;Wa=(_a|0)/24|0;Za=Wa+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(ka);ab=_a;bb=Ya;break b}Ya=(Xa-$a|0)/24|0;if(Ya>>>0<1073741823){$a=Ya<<1;mb=$a>>>0>>0?Za:$a}else mb=2147483647;XDa(T,mb,Wa,c+12|0);Wa=T+8|0;$a=k[Wa>>2]|0;eEa($a,ka);k[Wa>>2]=$a+24;ZDa(c,T);YDa(T)}CDa(ka);db=a+2|0;break a;break}case 118:{HEa(la,300466);$a=c+4|0;Wa=k[$a>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if(Wa>>>0>>0){eEa(Wa,la);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;Za=Wa-$a|0;Wa=(Za|0)/24|0;Xa=Wa+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(la);ab=Za;bb=_a;break b}_a=(Ya-$a|0)/24|0;if(_a>>>0<1073741823){$a=_a<<1;nb=$a>>>0>>0?Xa:$a}else nb=2147483647;XDa(S,nb,Wa,c+12|0);Wa=S+8|0;$a=k[Wa>>2]|0;eEa($a,la);k[Wa>>2]=$a+24;ZDa(c,S);YDa(S)}CDa(la);db=a+2|0;break a;break}case 86:{GEa(ma,300476);$a=c+4|0;Wa=k[$a>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if(Wa>>>0>>0){eEa(Wa,ma);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;Xa=Wa-$a|0;Wa=(Xa|0)/24|0;Ya=Wa+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(ma);ab=Xa;bb=Za;break b}Za=(_a-$a|0)/24|0;if(Za>>>0<1073741823){$a=Za<<1;ob=$a>>>0>>0?Ya:$a}else ob=2147483647;XDa(R,ob,Wa,c+12|0);Wa=R+8|0;$a=k[Wa>>2]|0;eEa($a,ma);k[Wa>>2]=$a+24;ZDa(c,R);YDa(R)}CDa(ma);db=a+2|0;break a;break}default:{db=a;break a}}break}case 101:{switch(i[a+1>>0]|0){case 111:{HEa(na,300487);$a=c+4|0;Wa=k[$a>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if(Wa>>>0>>0){eEa(Wa,na);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;Ya=Wa-$a|0;Wa=(Ya|0)/24|0;_a=Wa+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(na);ab=Ya;bb=Xa;break b}Xa=(Za-$a|0)/24|0;if(Xa>>>0<1073741823){$a=Xa<<1;pb=$a>>>0<_a>>>0?_a:$a}else pb=2147483647;XDa(Q,pb,Wa,c+12|0);Wa=Q+8|0;$a=k[Wa>>2]|0;eEa($a,na);k[Wa>>2]=$a+24;ZDa(c,Q);YDa(Q)}CDa(na);db=a+2|0;break a;break}case 79:{GEa(oa,300497);$a=c+4|0;Wa=k[$a>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if(Wa>>>0<_a>>>0){eEa(Wa,oa);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;_a=Wa-$a|0;Wa=(_a|0)/24|0;Za=Wa+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(oa);ab=_a;bb=Ya;break b}Ya=(Xa-$a|0)/24|0;if(Ya>>>0<1073741823){$a=Ya<<1;qb=$a>>>0>>0?Za:$a}else qb=2147483647;XDa(P,qb,Wa,c+12|0);Wa=P+8|0;$a=k[Wa>>2]|0;eEa($a,oa);k[Wa>>2]=$a+24;ZDa(c,P);YDa(P)}CDa(oa);db=a+2|0;break a;break}case 113:{GEa(pa,300508);$a=c+4|0;Wa=k[$a>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if(Wa>>>0>>0){eEa(Wa,pa);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;Za=Wa-$a|0;Wa=(Za|0)/24|0;Xa=Wa+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(pa);ab=Za;bb=_a;break b}_a=(Ya-$a|0)/24|0;if(_a>>>0<1073741823){$a=_a<<1;rb=$a>>>0>>0?Xa:$a}else rb=2147483647;XDa(O,rb,Wa,c+12|0);Wa=O+8|0;$a=k[Wa>>2]|0;eEa($a,pa);k[Wa>>2]=$a+24;ZDa(c,O);YDa(O)}CDa(pa);db=a+2|0;break a;break}default:{db=a;break a}}break}case 103:{switch(i[a+1>>0]|0){case 101:{GEa(qa,300519);$a=c+4|0;Wa=k[$a>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if(Wa>>>0>>0){eEa(Wa,qa);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;Xa=Wa-$a|0;Wa=(Xa|0)/24|0;Ya=Wa+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(qa);ab=Xa;bb=Za;break b}Za=(_a-$a|0)/24|0;if(Za>>>0<1073741823){$a=Za<<1;sb=$a>>>0>>0?Ya:$a}else sb=2147483647;XDa(N,sb,Wa,c+12|0);Wa=N+8|0;$a=k[Wa>>2]|0;eEa($a,qa);k[Wa>>2]=$a+24;ZDa(c,N);YDa(N)}CDa(qa);db=a+2|0;break a;break}case 116:{HEa(ra,300530);$a=c+4|0;Wa=k[$a>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if(Wa>>>0>>0){eEa(Wa,ra);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;Ya=Wa-$a|0;Wa=(Ya|0)/24|0;_a=Wa+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(ra);ab=Ya;bb=Xa;break b}Xa=(Za-$a|0)/24|0;if(Xa>>>0<1073741823){$a=Xa<<1;tb=$a>>>0<_a>>>0?_a:$a}else tb=2147483647;XDa(L,tb,Wa,c+12|0);Wa=L+8|0;$a=k[Wa>>2]|0;eEa($a,ra);k[Wa>>2]=$a+24;ZDa(c,L);YDa(L)}CDa(ra);db=a+2|0;break a;break}default:{db=a;break a}}break}case 105:{if((i[a+1>>0]|0)!=120){db=a;break a}GEa(sa,300540);$a=c+4|0;Wa=k[$a>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if(Wa>>>0<_a>>>0){eEa(Wa,sa);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;_a=Wa-$a|0;Wa=(_a|0)/24|0;Za=Wa+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(sa);ab=_a;bb=Ya;break b}Ya=(Xa-$a|0)/24|0;if(Ya>>>0<1073741823){$a=Ya<<1;ub=$a>>>0>>0?Za:$a}else ub=2147483647;XDa(K,ub,Wa,c+12|0);Wa=K+8|0;$a=k[Wa>>2]|0;eEa($a,sa);k[Wa>>2]=$a+24;ZDa(c,K);YDa(K)}CDa(sa);db=a+2|0;break a;break}case 108:{switch(i[a+1>>0]|0){case 101:{GEa(ta,300551);$a=c+4|0;Wa=k[$a>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if(Wa>>>0>>0){eEa(Wa,ta);k[$a>>2]=(k[$a>>2]|0)+24}else{$a=k[c>>2]|0;Za=Wa-$a|0;Wa=(Za|0)/24|0;Xa=Wa+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(ta);ab=Za;bb=_a;break b}_a=(Ya-$a|0)/24|0;if(_a>>>0<1073741823){$a=_a<<1;vb=$a>>>0>>0?Xa:$a}else vb=2147483647;XDa(J,vb,Wa,c+12|0);Wa=J+8|0;$a=k[Wa>>2]|0;eEa($a,ta);k[Wa>>2]=$a+24;ZDa(c,J);YDa(J)}CDa(ta);db=a+2|0;break a;break}case 105:{$a=a+2|0;Wa=jEa($a,b,c)|0;if((Wa|0)==($a|0)){db=a;break a}$a=k[c+4>>2]|0;if((k[c>>2]|0)==($a|0)){db=a;break a}PDa($a+-24|0,0,300562)|0;db=Wa;break a;break}case 115:{GEa(ua,300574);Wa=c+4|0;$a=k[Wa>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if($a>>>0>>0){eEa($a,ua);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Xa=$a-Wa|0;$a=(Xa|0)/24|0;Ya=$a+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(ua);ab=Xa;bb=Za;break b}Za=(_a-Wa|0)/24|0;if(Za>>>0<1073741823){Wa=Za<<1;wb=Wa>>>0>>0?Ya:Wa}else wb=2147483647;XDa(I,wb,$a,c+12|0);$a=I+8|0;Wa=k[$a>>2]|0;eEa(Wa,ua);k[$a>>2]=Wa+24;ZDa(c,I);YDa(I)}CDa(ua);db=a+2|0;break a;break}case 83:{uEa(wa,300585);Wa=c+4|0;$a=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if($a>>>0>>0){eEa($a,wa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=$a-Wa|0;$a=(Ya|0)/24|0;_a=$a+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(wa);ab=Ya;bb=Xa;break b}Xa=(Za-Wa|0)/24|0;if(Xa>>>0<1073741823){Wa=Xa<<1;xb=Wa>>>0<_a>>>0?_a:Wa}else xb=2147483647;XDa(H,xb,$a,c+12|0);$a=H+8|0;Wa=k[$a>>2]|0;eEa(Wa,wa);k[$a>>2]=Wa+24;ZDa(c,H);YDa(H)}CDa(wa);db=a+2|0;break a;break}case 116:{HEa(xa,300597);Wa=c+4|0;$a=k[Wa>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if($a>>>0<_a>>>0){eEa($a,xa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=$a-Wa|0;$a=(_a|0)/24|0;Za=$a+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(xa);ab=_a;bb=Ya;break b}Ya=(Xa-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;yb=Wa>>>0>>0?Za:Wa}else yb=2147483647;XDa(G,yb,$a,c+12|0);$a=G+8|0;Wa=k[$a>>2]|0;eEa(Wa,xa);k[$a>>2]=Wa+24;ZDa(c,G);YDa(G)}CDa(xa);db=a+2|0;break a;break}default:{db=a;break a}}break}case 109:{switch(i[a+1>>0]|0){case 105:{HEa(ya,300607);Wa=c+4|0;$a=k[Wa>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if($a>>>0>>0){eEa($a,ya);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Za=$a-Wa|0;$a=(Za|0)/24|0;Xa=$a+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(ya);ab=Za;bb=_a;break b}_a=(Ya-Wa|0)/24|0;if(_a>>>0<1073741823){Wa=_a<<1;zb=Wa>>>0>>0?Xa:Wa}else zb=2147483647;XDa(F,zb,$a,c+12|0);$a=F+8|0;Wa=k[$a>>2]|0;eEa(Wa,ya);k[$a>>2]=Wa+24;ZDa(c,F);YDa(F)}CDa(ya);db=a+2|0;break a;break}case 73:{GEa(za,300617);Wa=c+4|0;$a=k[Wa>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if($a>>>0>>0){eEa($a,za);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Xa=$a-Wa|0;$a=(Xa|0)/24|0;Ya=$a+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(za);ab=Xa;bb=Za;break b}Za=(_a-Wa|0)/24|0;if(Za>>>0<1073741823){Wa=Za<<1;Ab=Wa>>>0>>0?Ya:Wa}else Ab=2147483647;XDa(E,Ab,$a,c+12|0);$a=E+8|0;Wa=k[$a>>2]|0;eEa(Wa,za);k[$a>>2]=Wa+24;ZDa(c,E);YDa(E)}CDa(za);db=a+2|0;break a;break}case 108:{HEa(Aa,300440);Wa=c+4|0;$a=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if($a>>>0>>0){eEa($a,Aa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=$a-Wa|0;$a=(Ya|0)/24|0;_a=$a+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(Aa);ab=Ya;bb=Xa;break b}Xa=(Za-Wa|0)/24|0;if(Xa>>>0<1073741823){Wa=Xa<<1;Bb=Wa>>>0<_a>>>0?_a:Wa}else Bb=2147483647;XDa(D,Bb,$a,c+12|0);$a=D+8|0;Wa=k[$a>>2]|0;eEa(Wa,Aa);k[$a>>2]=Wa+24;ZDa(c,D);YDa(D)}CDa(Aa);db=a+2|0;break a;break}case 76:{GEa(Ba,300628);Wa=c+4|0;$a=k[Wa>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if($a>>>0<_a>>>0){eEa($a,Ba);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=$a-Wa|0;$a=(_a|0)/24|0;Za=$a+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(Ba);ab=_a;bb=Ya;break b}Ya=(Xa-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;Cb=Wa>>>0>>0?Za:Wa}else Cb=2147483647;XDa(C,Cb,$a,c+12|0);$a=C+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ba);k[$a>>2]=Wa+24;ZDa(c,C);YDa(C)}CDa(Ba);db=a+2|0;break a;break}case 109:{GEa(Ca,300639);Wa=c+4|0;$a=k[Wa>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if($a>>>0>>0){eEa($a,Ca);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Za=$a-Wa|0;$a=(Za|0)/24|0;Xa=$a+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(Ca);ab=Za;bb=_a;break b}_a=(Ya-Wa|0)/24|0;if(_a>>>0<1073741823){Wa=_a<<1;Db=Wa>>>0>>0?Xa:Wa}else Db=2147483647;XDa(B,Db,$a,c+12|0);$a=B+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ca);k[$a>>2]=Wa+24;ZDa(c,B);YDa(B)}CDa(Ca);db=a+2|0;break a;break}default:{db=a;break a}}break}case 110:{switch(i[a+1>>0]|0){case 97:{sEa(Da,300650);Wa=c+4|0;$a=k[Wa>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if($a>>>0>>0){eEa($a,Da);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Xa=$a-Wa|0;$a=(Xa|0)/24|0;Ya=$a+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(Da);ab=Xa;bb=Za;break b}Za=(_a-Wa|0)/24|0;if(Za>>>0<1073741823){Wa=Za<<1;Eb=Wa>>>0>>0?Ya:Wa}else Eb=2147483647;XDa(A,Eb,$a,c+12|0);$a=A+8|0;Wa=k[$a>>2]|0;eEa(Wa,Da);k[$a>>2]=Wa+24;ZDa(c,A);YDa(A)}CDa(Da);db=a+2|0;break a;break}case 101:{GEa(Ea,300665);Wa=c+4|0;$a=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if($a>>>0>>0){eEa($a,Ea);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=$a-Wa|0;$a=(Ya|0)/24|0;_a=$a+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(Ea);ab=Ya;bb=Xa;break b}Xa=(Za-Wa|0)/24|0;if(Xa>>>0<1073741823){Wa=Xa<<1;Fb=Wa>>>0<_a>>>0?_a:Wa}else Fb=2147483647;XDa(z,Fb,$a,c+12|0);$a=z+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ea);k[$a>>2]=Wa+24;ZDa(c,z);YDa(z)}CDa(Ea);db=a+2|0;break a;break}case 103:{HEa(Fa,300607);Wa=c+4|0;$a=k[Wa>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if($a>>>0<_a>>>0){eEa($a,Fa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=$a-Wa|0;$a=(_a|0)/24|0;Za=$a+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(Fa);ab=_a;bb=Ya;break b}Ya=(Xa-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;Gb=Wa>>>0>>0?Za:Wa}else Gb=2147483647;XDa(y,Gb,$a,c+12|0);$a=y+8|0;Wa=k[$a>>2]|0;eEa(Wa,Fa);k[$a>>2]=Wa+24;ZDa(c,y);YDa(y)}CDa(Fa);db=a+2|0;break a;break}case 116:{HEa(Ga,300676);Wa=c+4|0;$a=k[Wa>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if($a>>>0>>0){eEa($a,Ga);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Za=$a-Wa|0;$a=(Za|0)/24|0;Xa=$a+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(Ga);ab=Za;bb=_a;break b}_a=(Ya-Wa|0)/24|0;if(_a>>>0<1073741823){Wa=_a<<1;Hb=Wa>>>0>>0?Xa:Wa}else Hb=2147483647;XDa(w,Hb,$a,c+12|0);$a=w+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ga);k[$a>>2]=Wa+24;ZDa(c,w);YDa(w)}CDa(Ga);db=a+2|0;break a;break}case 119:{vEa(Ha,300686);Wa=c+4|0;$a=k[Wa>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if($a>>>0>>0){eEa($a,Ha);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Xa=$a-Wa|0;$a=(Xa|0)/24|0;Ya=$a+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(Ha);ab=Xa;bb=Za;break b}Za=(_a-Wa|0)/24|0;if(Za>>>0<1073741823){Wa=Za<<1;Ib=Wa>>>0>>0?Ya:Wa}else Ib=2147483647;XDa(v,Ib,$a,c+12|0);$a=v+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ha);k[$a>>2]=Wa+24;ZDa(c,v);YDa(v)}CDa(Ha);db=a+2|0;break a;break}default:{db=a;break a}}break}case 111:{switch(i[a+1>>0]|0){case 111:{GEa(Ia,300699);Wa=c+4|0;$a=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if($a>>>0>>0){eEa($a,Ia);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=$a-Wa|0;$a=(Ya|0)/24|0;_a=$a+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(Ia);ab=Ya;bb=Xa;break b}Xa=(Za-Wa|0)/24|0;if(Xa>>>0<1073741823){Wa=Xa<<1;Jb=Wa>>>0<_a>>>0?_a:Wa}else Jb=2147483647;XDa(u,Jb,$a,c+12|0);$a=u+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ia);k[$a>>2]=Wa+24;ZDa(c,u);YDa(u)}CDa(Ia);db=a+2|0;break a;break}case 114:{HEa(Ja,300710);Wa=c+4|0;$a=k[Wa>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if($a>>>0<_a>>>0){eEa($a,Ja);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=$a-Wa|0;$a=(_a|0)/24|0;Za=$a+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(Ja);ab=_a;bb=Ya;break b}Ya=(Xa-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;Kb=Wa>>>0>>0?Za:Wa}else Kb=2147483647;XDa(t,Kb,$a,c+12|0);$a=t+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ja);k[$a>>2]=Wa+24;ZDa(c,t);YDa(t)}CDa(Ja);db=a+2|0;break a;break}case 82:{GEa(Ka,300720);Wa=c+4|0;$a=k[Wa>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if($a>>>0>>0){eEa($a,Ka);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Za=$a-Wa|0;$a=(Za|0)/24|0;Xa=$a+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(Ka);ab=Za;bb=_a;break b}_a=(Ya-Wa|0)/24|0;if(_a>>>0<1073741823){Wa=_a<<1;Lb=Wa>>>0>>0?Xa:Wa}else Lb=2147483647;XDa(s,Lb,$a,c+12|0);$a=s+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ka);k[$a>>2]=Wa+24;ZDa(c,s);YDa(s)}CDa(Ka);db=a+2|0;break a;break}default:{db=a;break a}}break}case 112:{switch(i[a+1>>0]|0){case 109:{uEa(La,300731);Wa=c+4|0;$a=k[Wa>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if($a>>>0>>0){eEa($a,La);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Xa=$a-Wa|0;$a=(Xa|0)/24|0;Ya=$a+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(La);ab=Xa;bb=Za;break b}Za=(_a-Wa|0)/24|0;if(Za>>>0<1073741823){Wa=Za<<1;Mb=Wa>>>0>>0?Ya:Wa}else Mb=2147483647;XDa(q,Mb,$a,c+12|0);$a=q+8|0;Wa=k[$a>>2]|0;eEa(Wa,La);k[$a>>2]=Wa+24;ZDa(c,q);YDa(q)}CDa(La);db=a+2|0;break a;break}case 108:{HEa(Ma,300743);Wa=c+4|0;$a=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if($a>>>0>>0){eEa($a,Ma);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=$a-Wa|0;$a=(Ya|0)/24|0;_a=$a+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(Ma);ab=Ya;bb=Xa;break b}Xa=(Za-Wa|0)/24|0;if(Xa>>>0<1073741823){Wa=Xa<<1;Nb=Wa>>>0<_a>>>0?_a:Wa}else Nb=2147483647;XDa(p,Nb,$a,c+12|0);$a=p+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ma);k[$a>>2]=Wa+24;ZDa(c,p);YDa(p)}CDa(Ma);db=a+2|0;break a;break}case 76:{GEa(Na,300753);Wa=c+4|0;$a=k[Wa>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if($a>>>0<_a>>>0){eEa($a,Na);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=$a-Wa|0;$a=(_a|0)/24|0;Za=$a+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(Na);ab=_a;bb=Ya;break b}Ya=(Xa-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;Ob=Wa>>>0>>0?Za:Wa}else Ob=2147483647;XDa(o,Ob,$a,c+12|0);$a=o+8|0;Wa=k[$a>>2]|0;eEa(Wa,Na);k[$a>>2]=Wa+24;ZDa(c,o);YDa(o)}CDa(Na);db=a+2|0;break a;break}case 112:{GEa(Oa,300764);Wa=c+4|0;$a=k[Wa>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if($a>>>0>>0){eEa($a,Oa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Za=$a-Wa|0;$a=(Za|0)/24|0;Xa=$a+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(Oa);ab=Za;bb=_a;break b}_a=(Ya-Wa|0)/24|0;if(_a>>>0<1073741823){Wa=_a<<1;Pb=Wa>>>0>>0?Xa:Wa}else Pb=2147483647;XDa(n,Pb,$a,c+12|0);$a=n+8|0;Wa=k[$a>>2]|0;eEa(Wa,Oa);k[$a>>2]=Wa+24;ZDa(c,n);YDa(n)}CDa(Oa);db=a+2|0;break a;break}case 115:{HEa(Pa,300743);Wa=c+4|0;$a=k[Wa>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if($a>>>0>>0){eEa($a,Pa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Xa=$a-Wa|0;$a=(Xa|0)/24|0;Ya=$a+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(Pa);ab=Xa;bb=Za;break b}Za=(_a-Wa|0)/24|0;if(Za>>>0<1073741823){Wa=Za<<1;Qb=Wa>>>0>>0?Ya:Wa}else Qb=2147483647;XDa(m,Qb,$a,c+12|0);$a=m+8|0;Wa=k[$a>>2]|0;eEa(Wa,Pa);k[$a>>2]=Wa+24;ZDa(c,m);YDa(m)}CDa(Pa);db=a+2|0;break a;break}case 116:{GEa(Qa,300775);Wa=c+4|0;$a=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if($a>>>0>>0){eEa($a,Qa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=$a-Wa|0;$a=(Ya|0)/24|0;_a=$a+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(Qa);ab=Ya;bb=Xa;break b}Xa=(Za-Wa|0)/24|0;if(Xa>>>0<1073741823){Wa=Xa<<1;Rb=Wa>>>0<_a>>>0?_a:Wa}else Rb=2147483647;XDa(l,Rb,$a,c+12|0);$a=l+8|0;Wa=k[$a>>2]|0;eEa(Wa,Qa);k[$a>>2]=Wa+24;ZDa(c,l);YDa(l)}CDa(Qa);db=a+2|0;break a;break}default:{db=a;break a}}break}case 113:{if((i[a+1>>0]|0)!=117){db=a;break a}HEa(Ra,300786);Wa=c+4|0;$a=k[Wa>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if($a>>>0<_a>>>0){eEa($a,Ra);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=$a-Wa|0;$a=(_a|0)/24|0;Za=$a+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(Ra);ab=_a;bb=Ya;break b}Ya=(Xa-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;Sb=Wa>>>0>>0?Za:Wa}else Sb=2147483647;XDa(j,Sb,$a,c+12|0);$a=j+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ra);k[$a>>2]=Wa+24;ZDa(c,j);YDa(j)}CDa(Ra);db=a+2|0;break a;break}case 114:{switch(i[a+1>>0]|0){case 109:{HEa(Sa,300796);Wa=c+4|0;$a=k[Wa>>2]|0;Za=k[c+8>>2]|0;Ya=Za;if($a>>>0>>0){eEa($a,Sa);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Za=$a-Wa|0;$a=(Za|0)/24|0;Xa=$a+1|0;if((Za|0)<-24){x=0;va(1473,c|0);x=0;Za=Hc()|0;_a=M;CDa(Sa);ab=Za;bb=_a;break b}_a=(Ya-Wa|0)/24|0;if(_a>>>0<1073741823){Wa=_a<<1;Tb=Wa>>>0>>0?Xa:Wa}else Tb=2147483647;XDa(h,Tb,$a,c+12|0);$a=h+8|0;Wa=k[$a>>2]|0;eEa(Wa,Sa);k[$a>>2]=Wa+24;ZDa(c,h);YDa(h)}CDa(Sa);db=a+2|0;break a;break}case 77:{GEa(Ta,300806);Wa=c+4|0;$a=k[Wa>>2]|0;Xa=k[c+8>>2]|0;_a=Xa;if($a>>>0>>0){eEa($a,Ta);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Xa=$a-Wa|0;$a=(Xa|0)/24|0;Ya=$a+1|0;if((Xa|0)<-24){x=0;va(1473,c|0);x=0;Xa=Hc()|0;Za=M;CDa(Ta);ab=Xa;bb=Za;break b}Za=(_a-Wa|0)/24|0;if(Za>>>0<1073741823){Wa=Za<<1;Ub=Wa>>>0>>0?Ya:Wa}else Ub=2147483647;XDa(g,Ub,$a,c+12|0);$a=g+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ta);k[$a>>2]=Wa+24;ZDa(c,g);YDa(g)}CDa(Ta);db=a+2|0;break a;break}case 115:{GEa(Ua,300817);Wa=c+4|0;$a=k[Wa>>2]|0;Ya=k[c+8>>2]|0;Za=Ya;if($a>>>0>>0){eEa($a,Ua);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;Ya=$a-Wa|0;$a=(Ya|0)/24|0;_a=$a+1|0;if((Ya|0)<-24){x=0;va(1473,c|0);x=0;Ya=Hc()|0;Xa=M;CDa(Ua);ab=Ya;bb=Xa;break b}Xa=(Za-Wa|0)/24|0;if(Xa>>>0<1073741823){Wa=Xa<<1;Vb=Wa>>>0<_a>>>0?_a:Wa}else Vb=2147483647;XDa(f,Vb,$a,c+12|0);$a=f+8|0;Wa=k[$a>>2]|0;eEa(Wa,Ua);k[$a>>2]=Wa+24;ZDa(c,f);YDa(f)}CDa(Ua);db=a+2|0;break a;break}case 83:{uEa(Va,300828);Wa=c+4|0;$a=k[Wa>>2]|0;_a=k[c+8>>2]|0;Xa=_a;if($a>>>0<_a>>>0){eEa($a,Va);k[Wa>>2]=(k[Wa>>2]|0)+24}else{Wa=k[c>>2]|0;_a=$a-Wa|0;$a=(_a|0)/24|0;Za=$a+1|0;if((_a|0)<-24){x=0;va(1473,c|0);x=0;_a=Hc()|0;Ya=M;CDa(Va);ab=_a;bb=Ya;break b}Ya=(Xa-Wa|0)/24|0;if(Ya>>>0<1073741823){Wa=Ya<<1;Wb=Wa>>>0>>0?Za:Wa}else Wb=2147483647;XDa(e,Wb,$a,c+12|0);$a=e+8|0;Wa=k[$a>>2]|0;eEa(Wa,Va);k[$a>>2]=Wa+24;ZDa(c,e);YDa(e)}CDa(Va);db=a+2|0;break a;break}default:{db=a;break a}}break}case 118:{if(((i[a+1>>0]|0)+-48|0)>>>0>=10){db=a;break a}Wa=a+2|0;$a=jEa(Wa,b,c)|0;if(($a|0)==(Wa|0)){db=a;break a}Wa=k[c+4>>2]|0;if((k[c>>2]|0)==(Wa|0)){db=a;break a}PDa(Wa+-24|0,0,300412)|0;db=$a;break a;break}default:{db=a;break a}}while(0);Sc(ab|0)}else db=a;while(0);r=d;return db|0}function GEa(a,b){a=a|0;b=b|0;var c=0,d=0;i[a>>0]=20;c=a+1|0;d=b;b=c+10|0;do{i[c>>0]=i[d>>0]|0;c=c+1|0;d=d+1|0}while((c|0)<(b|0));i[a+11>>0]=0;d=a+12|0;a=0;while(1){if((a|0)==3)break;k[d+(a<<2)>>2]=0;a=a+1|0}return}function HEa(a,b){a=a|0;b=b|0;var c=0,d=0;i[a>>0]=18;c=a+1|0;d=b;b=c+9|0;do{i[c>>0]=i[d>>0]|0;c=c+1|0;d=d+1|0}while((c|0)<(b|0));i[a+10>>0]=0;d=a+12|0;a=0;while(1){if((a|0)==3)break;k[d+(a<<2)>>2]=0;a=a+1|0}return}function IEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;a:do if((a|0)==(b|0))d=a;else switch(i[a>>0]|0){case 88:{e=a+1|0;f=dEa(e,b,c)|0;if((f|0)==(e|0)|(f|0)==(b|0)){d=a;break a}d=(i[f>>0]|0)==69?f+1|0:a;break a;break}case 74:{f=a+1|0;if((f|0)==(b|0)){d=a;break a}else g=f;while(1){if((i[g>>0]|0)==69){h=g;break}f=g;g=IEa(g,b,c)|0;if((g|0)==(f|0)){d=a;break a}}d=h+1|0;break a;break}case 76:{f=a+1|0;if((f|0)!=(b|0)?(i[f>>0]|0)==90:0){f=a+2|0;e=ODa(f,b,c)|0;if((e|0)==(f|0)|(e|0)==(b|0)){d=a;break a}d=(i[e>>0]|0)==69?e+1|0:a;break a}d=JEa(a,b,c)|0;break a;break}default:{d=RDa(a,b,c)|0;break a}}while(0);return d|0}function JEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;d=r;r=r+480|0;e=d+72|0;f=d+48|0;g=d+24|0;h=d;j=d+432|0;l=d+408|0;m=d+384|0;n=d+396|0;q=d+360|0;s=d+336|0;t=d+320|0;u=d+308|0;v=d+296|0;w=d+284|0;y=d+272|0;z=d+260|0;A=d+248|0;B=d+236|0;C=d+224|0;D=d+212|0;E=d+200|0;F=d+188|0;G=d+176|0;H=d+152|0;I=d+140|0;J=d+128|0;K=d+116|0;L=d+104|0;N=d+92|0;O=b;a:do if((O-a|0)>3?(i[a>>0]|0)==76:0){P=a+1|0;b:do switch(i[P>>0]|0){case 84:{Q=a;break a;break}case 119:{R=a+2|0;$Da(n,301154,7);x=0;S=db(81,R|0,b|0,n|0,c|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;NDa(n);V=T;W=U;break b}else{NDa(n);Q=(S|0)==(R|0)?a:S;break a}break}case 98:{if((i[a+3>>0]|0)!=69){Q=a;break a}switch(i[a+2>>0]|0){case 48:{LEa(q,330267);S=c+4|0;R=k[S>>2]|0;U=k[c+8>>2]|0;T=U;if(R>>>0>>0){eEa(R,q);k[S>>2]=(k[S>>2]|0)+24}else{S=k[c>>2]|0;U=R-S|0;R=(U|0)/24|0;X=R+1|0;if((U|0)<-24){x=0;va(1473,c|0);x=0;U=Hc()|0;Y=M;CDa(q);V=U;W=Y;break b}Y=(T-S|0)/24|0;if(Y>>>0<1073741823){S=Y<<1;Z=S>>>0>>0?X:S}else Z=2147483647;XDa(j,Z,R,c+12|0);R=j+8|0;S=k[R>>2]|0;eEa(S,q);k[R>>2]=S+24;ZDa(c,j);YDa(j)}CDa(q);Q=a+4|0;break a;break}case 49:{MEa(s,330262);S=c+4|0;R=k[S>>2]|0;X=k[c+8>>2]|0;Y=X;if(R>>>0>>0){eEa(R,s);k[S>>2]=(k[S>>2]|0)+24}else{S=k[c>>2]|0;X=R-S|0;R=(X|0)/24|0;T=R+1|0;if((X|0)<-24){x=0;va(1473,c|0);x=0;X=Hc()|0;U=M;CDa(s);V=X;W=U;break b}U=(Y-S|0)/24|0;if(U>>>0<1073741823){S=U<<1;_=S>>>0>>0?T:S}else _=2147483647;XDa(h,_,R,c+12|0);R=h+8|0;S=k[R>>2]|0;eEa(S,s);k[R>>2]=S+24;ZDa(c,h);YDa(h)}CDa(s);Q=a+4|0;break a;break}default:{Q=a;break a}}break}case 99:{S=a+2|0;$Da(t,301162,4);x=0;R=db(81,S|0,b|0,t|0,c|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;NDa(t);V=T;W=U;break b}else{NDa(t);Q=(R|0)==(S|0)?a:R;break a}break}case 97:{R=a+2|0;$Da(u,301167,11);x=0;S=db(81,R|0,b|0,u|0,c|0)|0;U=x;x=0;if(U&1){U=Hc()|0;T=M;NDa(u);V=U;W=T;break b}else{NDa(u);Q=(S|0)==(R|0)?a:S;break a}break}case 104:{S=a+2|0;$Da(v,301179,13);x=0;R=db(81,S|0,b|0,v|0,c|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;NDa(v);V=T;W=U;break b}else{NDa(v);Q=(R|0)==(S|0)?a:R;break a}break}case 115:{R=a+2|0;$Da(w,301193,5);x=0;S=db(81,R|0,b|0,w|0,c|0)|0;U=x;x=0;if(U&1){U=Hc()|0;T=M;NDa(w);V=U;W=T;break b}else{NDa(w);Q=(S|0)==(R|0)?a:S;break a}break}case 116:{S=a+2|0;$Da(y,301199,14);x=0;R=db(81,S|0,b|0,y|0,c|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;NDa(y);V=T;W=U;break b}else{NDa(y);Q=(R|0)==(S|0)?a:R;break a}break}case 105:{R=a+2|0;$Da(z,329672,0);x=0;S=db(81,R|0,b|0,z|0,c|0)|0;U=x;x=0;if(U&1){U=Hc()|0;T=M;NDa(z);V=U;W=T;break b}else{NDa(z);Q=(S|0)==(R|0)?a:S;break a}break}case 106:{S=a+2|0;$Da(A,332983,1);x=0;R=db(81,S|0,b|0,A|0,c|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;NDa(A);V=T;W=U;break b}else{NDa(A);Q=(R|0)==(S|0)?a:R;break a}break}case 108:{R=a+2|0;$Da(B,298996,1);x=0;S=db(81,R|0,b|0,B|0,c|0)|0;U=x;x=0;if(U&1){U=Hc()|0;T=M;NDa(B);V=U;W=T;break b}else{NDa(B);Q=(S|0)==(R|0)?a:S;break a}break}case 109:{S=a+2|0;$Da(C,301214,2);x=0;R=db(81,S|0,b|0,C|0,c|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;NDa(C);V=T;W=U;break b}else{NDa(C);Q=(R|0)==(S|0)?a:R;break a}break}case 120:{R=a+2|0;$Da(D,329669,2);x=0;S=db(81,R|0,b|0,D|0,c|0)|0;U=x;x=0;if(U&1){U=Hc()|0;T=M;NDa(D);V=U;W=T;break b}else{NDa(D);Q=(S|0)==(R|0)?a:S;break a}break}case 121:{S=a+2|0;$Da(E,301217,3);x=0;R=db(81,S|0,b|0,E|0,c|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;NDa(E);V=T;W=U;break b}else{NDa(E);Q=(R|0)==(S|0)?a:R;break a}break}case 110:{R=a+2|0;$Da(F,301221,8);x=0;S=db(81,R|0,b|0,F|0,c|0)|0;U=x;x=0;if(U&1){U=Hc()|0;T=M;NDa(F);V=U;W=T;break b}else{NDa(F);Q=(S|0)==(R|0)?a:S;break a}break}case 111:{S=a+2|0;$Da(G,301230,17);x=0;R=db(81,S|0,b|0,G|0,c|0)|0;T=x;x=0;if(T&1){T=Hc()|0;U=M;NDa(G);V=T;W=U;break b}else{NDa(G);Q=(R|0)==(S|0)?a:R;break a}break}case 102:{R=a+2|0;c:do if((O-R|0)>>>0>8){S=a+10|0;U=a;T=h;Y=R;while(1){X=i[Y>>0]|0;if((Y|0)==(S|0)){$=X;aa=T;ba=69;break}if(!(TIa(X<<24>>24)|0))break;X=i[Y>>0]|0;ca=i[U+3>>0]|0;i[T>>0]=(((ca<<24>>24)+-48|0)>>>0<10?208:169)+(ca&255)+(((X+-48|0)>>>0<10?0:9)+X<<4);X=Y;T=T+1|0;Y=Y+2|0;U=X}do if((ba|0)==69){if($<<24>>24==69){d:do if((h|0)!=(aa|0)){U=aa;Y=h;while(1){T=U+-1|0;if(Y>>>0>=T>>>0)break d;S=i[Y>>0]|0;i[Y>>0]=i[T>>0]|0;i[T>>0]=S;U=T;Y=Y+1|0}}while(0);da=j;ea=da+24|0;do{i[da>>0]=0;da=da+1|0}while((da|0)<(ea|0));p[g>>3]=+o[h>>2];Y=uRa(j,24,301248,g)|0;if(Y>>>0>23)break;$Da(m,j,Y);lEa(l,m);Y=c+4|0;U=k[Y>>2]|0;T=k[c+8>>2]|0;S=T;if(U>>>0>>0){eEa(U,l);k[Y>>2]=(k[Y>>2]|0)+24}else{Y=k[c>>2]|0;T=U-Y|0;U=(T|0)/24|0;X=U+1|0;if((T|0)<-24){x=0;va(1473,c|0);x=0;T=Hc()|0;CDa(l);NDa(m);Sc(T|0)}T=(S-Y|0)/24|0;if(T>>>0<1073741823){Y=T<<1;fa=Y>>>0>>0?X:Y}else fa=2147483647;XDa(g,fa,U,c+12|0);U=g+8|0;Y=k[U>>2]|0;eEa(Y,l);k[U>>2]=Y+24;ZDa(c,g);YDa(g)}CDa(l);NDa(m);ga=a+11|0}else ga=R;ha=ga;break c}while(0);ha=R}else ha=R;while(0);Q=(ha|0)==(R|0)?a:ha;break a;break}case 100:{Y=a+2|0;e:do if((O-Y|0)>>>0>16){U=a+18|0;X=a;T=h;S=Y;while(1){ca=i[S>>0]|0;if((S|0)==(U|0)){ia=ca;ja=T;ba=91;break}if(!(TIa(ca<<24>>24)|0))break;ca=i[S>>0]|0;ka=i[X+3>>0]|0;i[T>>0]=(((ka<<24>>24)+-48|0)>>>0<10?208:169)+(ka&255)+(((ca+-48|0)>>>0<10?0:9)+ca<<4);ca=S;T=T+1|0;S=S+2|0;X=ca}do if((ba|0)==91){if(ia<<24>>24==69){f:do if((h|0)!=(ja|0)){X=ja;S=h;while(1){T=X+-1|0;if(S>>>0>=T>>>0)break f;U=i[S>>0]|0;i[S>>0]=i[T>>0]|0;i[T>>0]=U;X=T;S=S+1|0}}while(0);da=j;ea=da+32|0;do{i[da>>0]=0;da=da+1|0}while((da|0)<(ea|0));p[f>>3]=+p[h>>3];S=uRa(j,32,330653,f)|0;if(S>>>0>31)break;$Da(m,j,S);lEa(l,m);S=c+4|0;X=k[S>>2]|0;T=k[c+8>>2]|0;U=T;if(X>>>0>>0){eEa(X,l);k[S>>2]=(k[S>>2]|0)+24}else{S=k[c>>2]|0;T=X-S|0;X=(T|0)/24|0;ca=X+1|0;if((T|0)<-24){x=0;va(1473,c|0);x=0;T=Hc()|0;CDa(l);NDa(m);Sc(T|0)}T=(U-S|0)/24|0;if(T>>>0<1073741823){S=T<<1;la=S>>>0>>0?ca:S}else la=2147483647;XDa(f,la,X,c+12|0);X=f+8|0;S=k[X>>2]|0;eEa(S,l);k[X>>2]=S+24;ZDa(c,f);YDa(f)}CDa(l);NDa(m);ma=a+19|0}else ma=Y;na=ma;break e}while(0);na=Y}else na=Y;while(0);Q=(na|0)==(Y|0)?a:na;break a;break}case 101:{R=a+2|0;g:do if((O-R|0)>>>0>20){S=a+22|0;X=a;ca=h;T=R;while(1){U=i[T>>0]|0;if((T|0)==(S|0)){oa=U;pa=ca;ba=113;break}if(!(TIa(U<<24>>24)|0))break;U=i[T>>0]|0;ka=i[X+3>>0]|0;i[ca>>0]=(((ka<<24>>24)+-48|0)>>>0<10?208:169)+(ka&255)+(((U+-48|0)>>>0<10?0:9)+U<<4);U=T;ca=ca+1|0;T=T+2|0;X=U}do if((ba|0)==113){if(oa<<24>>24==69){h:do if((h|0)!=(pa|0)){X=pa;T=h;while(1){ca=X+-1|0;if(T>>>0>=ca>>>0)break h;S=i[T>>0]|0;i[T>>0]=i[ca>>0]|0;i[ca>>0]=S;X=ca;T=T+1|0}}while(0);da=j;ea=da+40|0;do{i[da>>0]=0;da=da+1|0}while((da|0)<(ea|0));p[e>>3]=+p[h>>3];T=uRa(j,40,301252,e)|0;if(T>>>0>39)break;$Da(m,j,T);lEa(l,m);T=c+4|0;X=k[T>>2]|0;ca=k[c+8>>2]|0;S=ca;if(X>>>0>>0){eEa(X,l);k[T>>2]=(k[T>>2]|0)+24}else{T=k[c>>2]|0;ca=X-T|0;X=(ca|0)/24|0;U=X+1|0;if((ca|0)<-24){x=0;va(1473,c|0);x=0;ca=Hc()|0;CDa(l);NDa(m);Sc(ca|0)}ca=(S-T|0)/24|0;if(ca>>>0<1073741823){T=ca<<1;qa=T>>>0>>0?U:T}else qa=2147483647;XDa(e,qa,X,c+12|0);X=e+8|0;T=k[X>>2]|0;eEa(T,l);k[X>>2]=T+24;ZDa(c,e);YDa(e)}CDa(l);NDa(m);ra=a+23|0}else ra=R;sa=ra;break g}while(0);sa=R}else sa=R;while(0);Q=(sa|0)==(R|0)?a:sa;break a;break}case 95:{if((i[a+2>>0]|0)!=90){Q=a;break a}Y=a+3|0;T=ODa(Y,b,c)|0;if((T|0)==(Y|0)|(T|0)==(b|0)){Q=a;break a}Q=(i[T>>0]|0)==69?T+1|0:a;break a;break}default:{T=RDa(P,b,c)|0;if((T|0)==(P|0)|(T|0)==(b|0)){Q=a;break a}if((i[T>>0]|0)==69){Q=T+1|0;break a}else ta=T;while(1){if((ta|0)==(b|0)){Q=a;break a}Y=i[ta>>0]|0;if(((Y<<24>>24)+-48|0)>>>0>=10){ua=Y;wa=ta;break}ta=ta+1|0}if(!((wa|0)!=(T|0)&ua<<24>>24==69)){Q=a;break a}R=k[c+4>>2]|0;if((k[c>>2]|0)==(R|0)){Q=a;break a}Y=R+-24|0;fEa(L,Y);x=0;R=Fa(147,L|0,0,300108)|0;X=x;x=0;if(X&1){X=Hc()|0;xa=X;ya=M}else{k[K>>2]=k[R>>2];k[K+4>>2]=k[R+4>>2];k[K+8>>2]=k[R+8>>2];X=0;while(1){if((X|0)==3)break;k[R+(X<<2)>>2]=0;X=X+1|0}x=0;X=Ta(630,K|0,300015)|0;R=x;x=0;if(R&1){R=Hc()|0;za=R;Aa=M}else{k[J>>2]=k[X>>2];k[J+4>>2]=k[X+4>>2];k[J+8>>2]=k[X+8>>2];R=0;while(1){if((R|0)==3)break;k[X+(R<<2)>>2]=0;R=R+1|0}R=wa-T|0;do if(R>>>0>4294967279){x=0;va(1471,N|0);x=0;X=Hc()|0;Ba=X;Ca=M}else{if(R>>>0<11){i[N>>0]=R<<1;Da=N+1|0}else{X=R+16&-16;U=xYa(X)|0;k[N+8>>2]=U;k[N>>2]=X|1;k[N+4>>2]=R;Da=U}U=T;X=Da;while(1){if((U|0)==(wa|0))break;i[X>>0]=i[U>>0]|0;U=U+1|0;X=X+1|0}i[Da+R>>0]=0;X=i[N>>0]|0;U=(X&1)==0;x=0;ca=Fa(146,J|0,(U?N+1|0:k[N+8>>2]|0)|0,(U?(X&255)>>>1:k[N+4>>2]|0)|0)|0;X=x;x=0;if(X&1){X=Hc()|0;U=M;NDa(N);Ba=X;Ca=U;break};k[I>>2]=k[ca>>2];k[I+4>>2]=k[ca+4>>2];k[I+8>>2]=k[ca+8>>2];U=0;while(1){if((U|0)==3)break;k[ca+(U<<2)>>2]=0;U=U+1|0}lEa(H,I);mEa(Y,H);CDa(H);NDa(I);NDa(N);NDa(J);NDa(K);NDa(L);Q=wa+1|0;break a}while(0);NDa(J);za=Ba;Aa=Ca}NDa(K);xa=za;ya=Aa}NDa(L);V=xa;W=ya}}while(0);Sc(V|0)}else Q=a;while(0);r=d;return Q|0}function KEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;e=r;r=r+80|0;f=e+48|0;g=e+24|0;h=e+12|0;j=e;l=bEa(a,b)|0;if(!((l|0)==(a|0)|(l|0)==(b|0))?(i[l>>0]|0)==69:0){b=i[c>>0]|0;m=c+4|0;a:do if(((b&1)==0?(b&255)>>>1:k[m>>2]|0)>>>0>3){qEa(j,300108,c);x=0;n=Ta(630,j|0,300015)|0;o=x;x=0;do if(o&1){p=Hc()|0;q=M;s=p}else{k[h>>2]=k[n>>2];k[h+4>>2]=k[n+4>>2];k[h+8>>2]=k[n+8>>2];p=0;while(1){if((p|0)==3)break;k[n+(p<<2)>>2]=0;p=p+1|0}lEa(g,h);p=d+4|0;t=k[p>>2]|0;u=k[d+8>>2]|0;v=u;if(t>>>0>>0){eEa(t,g);k[p>>2]=(k[p>>2]|0)+24}else{p=k[d>>2]|0;u=t-p|0;t=(u|0)/24|0;w=t+1|0;if((u|0)<-24){x=0;va(1473,d|0);x=0;u=Hc()|0;y=M;CDa(g);NDa(h);q=y;s=u;break}u=(v-p|0)/24|0;if(u>>>0<1073741823){p=u<<1;z=p>>>0>>0?w:p}else z=2147483647;XDa(f,z,t,d+12|0);t=f+8|0;p=k[t>>2]|0;eEa(p,g);k[t>>2]=p+24;ZDa(d,f);YDa(f)}CDa(g);NDa(h);NDa(j);break a}while(0);NDa(j);Sc(s|0)}else{n=d+4|0;o=k[n>>2]|0;p=k[d+8>>2]|0;t=p;if(o>>>0

      >>0){k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[o+20>>2]=0;p=0;while(1){if((p|0)==3)break;k[o+(p<<2)>>2]=0;p=p+1|0}p=o+12|0;w=0;while(1){if((w|0)==3)break;k[p+(w<<2)>>2]=0;w=w+1|0}k[n>>2]=(k[n>>2]|0)+24;break}w=k[d>>2]|0;p=o-w|0;u=(p|0)/24|0;v=u+1|0;if((p|0)<-24)HBa(d);p=(t-w|0)/24|0;if(p>>>0<1073741823){w=p<<1;A=w>>>0>>0?v:w}else A=2147483647;XDa(f,A,u,d+12|0);u=f+8|0;w=k[u>>2]|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;k[w+20>>2]=0;v=0;while(1){if((v|0)==3)break;k[w+(v<<2)>>2]=0;v=v+1|0}v=w+12|0;t=0;while(1){if((t|0)==3)break;k[v+(t<<2)>>2]=0;t=t+1|0}k[u>>2]=w+24;ZDa(d,f);YDa(f)}while(0);f=d+4|0;if((i[a>>0]|0)==110){DEa((k[f>>2]|0)+-24|0,45);B=a+1|0}else B=a;CEa((k[f>>2]|0)+-24|0,B,l);B=i[c>>0]|0;d=(B&1)==0;A=d?(B&255)>>>1:k[m>>2]|0;if(A>>>0<4)EDa((k[f>>2]|0)+-24|0,d?c+1|0:k[c+8>>2]|0,A)|0;C=l+1|0}else C=a;r=e;return C|0}function LEa(a,b){a=a|0;b=b|0;var c=0;i[a>>0]=10;c=a+1|0;i[c>>0]=i[b>>0]|0;i[c+1>>0]=i[b+1>>0]|0;i[c+2>>0]=i[b+2>>0]|0;i[c+3>>0]=i[b+3>>0]|0;i[c+4>>0]=i[b+4>>0]|0;i[a+6>>0]=0;b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function MEa(a,b){a=a|0;b=b|0;var c=0,d=0;i[a>>0]=8;c=a+1|0;d=l[b>>0]|l[b+1>>0]<<8|l[b+2>>0]<<16|l[b+3>>0]<<24;i[c>>0]=d;i[c+1>>0]=d>>8;i[c+2>>0]=d>>16;i[c+3>>0]=d>>24;i[a+5>>0]=0;d=a+12|0;a=0;while(1){if((a|0)==3)break;k[d+(a<<2)>>2]=0;a=a+1|0}return}function NEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+15&-16;b=a+4096|0;d=k[b>>2]|0;if((a+4096-d|0)>>>0>>0)e=xYa(c)|0;else{k[b>>2]=d+c;e=d}return e|0}function OEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;d=r;r=r+144|0;e=d+124|0;f=d+104|0;g=d+100|0;h=d+72|0;j=d+60|0;l=d+48|0;m=d+96|0;n=d+24|0;o=d+12|0;p=d;a:do if((b-a|0)>2?(i[a>>0]|0)==102:0){b:do switch(i[a+1>>0]|0){case 112:{q=SDa(a+2|0,b,g)|0;s=bEa(q,b)|0;c:do if((s|0)!=(b|0)?(i[s>>0]|0)==95:0){t=s-q|0;if(t>>>0>4294967279)GBa(l);if(t>>>0<11){i[l>>0]=t<<1;u=l+1|0}else{v=t+16&-16;w=xYa(v)|0;k[l+8>>2]=w;k[l>>2]=v|1;k[l+4>>2]=t;u=w}w=q;v=u;while(1){if((w|0)==(s|0))break;i[v>>0]=i[w>>0]|0;w=w+1|0;v=v+1|0}i[u+t>>0]=0;x=0;v=Fa(147,l|0,0,301511)|0;w=x;x=0;do if(w&1){y=Hc()|0;z=y;A=M}else{k[j>>2]=k[v>>2];k[j+4>>2]=k[v+4>>2];k[j+8>>2]=k[v+8>>2];y=0;while(1){if((y|0)==3)break;k[v+(y<<2)>>2]=0;y=y+1|0}lEa(h,j);y=c+4|0;B=k[y>>2]|0;C=k[c+8>>2]|0;D=C;if(B>>>0>>0){eEa(B,h);k[y>>2]=(k[y>>2]|0)+24}else{y=k[c>>2]|0;C=B-y|0;B=(C|0)/24|0;E=B+1|0;if((C|0)<-24){x=0;va(1473,c|0);x=0;C=Hc()|0;F=M;CDa(h);NDa(j);z=C;A=F;break}F=(D-y|0)/24|0;if(F>>>0<1073741823){y=F<<1;G=y>>>0>>0?E:y}else G=2147483647;XDa(f,G,B,c+12|0);B=f+8|0;y=k[B>>2]|0;eEa(y,h);k[B>>2]=y+24;ZDa(c,f);YDa(f)}CDa(h);NDa(j);NDa(l);H=s+1|0;break c}while(0);NDa(l);I=z;J=A;break b}else H=a;while(0);K=H;break a;break}case 76:{s=bEa(a+2|0,b)|0;d:do if((((s|0)!=(b|0)?(i[s>>0]|0)==112:0)?(q=SDa(s+1|0,b,m)|0,v=bEa(q,b)|0,(v|0)!=(b|0)):0)?(i[v>>0]|0)==95:0){w=v-q|0;if(w>>>0>4294967279)GBa(p);if(w>>>0<11){i[p>>0]=w<<1;L=p+1|0}else{t=w+16&-16;y=xYa(t)|0;k[p+8>>2]=y;k[p>>2]=t|1;k[p+4>>2]=w;L=y}y=q;q=L;while(1){if((y|0)==(v|0))break;i[q>>0]=i[y>>0]|0;y=y+1|0;q=q+1|0}i[L+w>>0]=0;x=0;q=Fa(147,p|0,0,301511)|0;y=x;x=0;do if(y&1){t=Hc()|0;N=t;O=M}else{k[o>>2]=k[q>>2];k[o+4>>2]=k[q+4>>2];k[o+8>>2]=k[q+8>>2];t=0;while(1){if((t|0)==3)break;k[q+(t<<2)>>2]=0;t=t+1|0}lEa(n,o);t=c+4|0;B=k[t>>2]|0;E=k[c+8>>2]|0;F=E;if(B>>>0>>0){eEa(B,n);k[t>>2]=(k[t>>2]|0)+24}else{t=k[c>>2]|0;E=B-t|0;B=(E|0)/24|0;D=B+1|0;if((E|0)<-24){x=0;va(1473,c|0);x=0;E=Hc()|0;C=M;CDa(n);NDa(o);N=E;O=C;break}C=(F-t|0)/24|0;if(C>>>0<1073741823){t=C<<1;P=t>>>0>>0?D:t}else P=2147483647;XDa(e,P,B,c+12|0);B=e+8|0;t=k[B>>2]|0;eEa(t,n);k[B>>2]=t+24;ZDa(c,e);YDa(e)}CDa(n);NDa(o);NDa(p);Q=v+1|0;break d}while(0);NDa(p);I=N;J=O;break b}else Q=a;while(0);K=Q;break a;break}default:{K=a;break a}}while(0);Sc(I|0)}else K=a;while(0);r=d;return K|0}function PEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=r;r=r+96|0;f=e+84|0;g=e+72|0;h=e+60|0;j=e+48|0;l=e+36|0;m=e+24|0;n=e+12|0;o=e;p=dEa(a,b,d)|0;a:do if((p|0)!=(a|0)){q=dEa(p,b,d)|0;s=d+4|0;if((q|0)==(p|0)){t=k[s>>2]|0;u=t+-24|0;v=t;while(1){if((v|0)==(u|0)){w=a;break a}t=v+-24|0;k[s>>2]=t;CDa(t);v=k[s>>2]|0}}v=k[s>>2]|0;if(((v-(k[d>>2]|0)|0)/24|0)>>>0>=2){fEa(f,v+-24|0);v=k[s>>2]|0;u=v+-24|0;t=v;while(1){if((t|0)==(u|0))break;y=t+-24|0;k[s>>2]=y;CDa(y);t=k[s>>2]|0}x=0;xa(932,g|0,v+-48|0);t=x;x=0;if(t&1){t=Hc()|0;z=M;A=t}else{t=k[s>>2]|0;u=t+-24|0;if(!(i[u>>0]&1)){i[u+1>>0]=0;i[u>>0]=0}else{i[k[t+-16>>2]>>0]=0;k[t+-20>>2]=0}t=i[c>>0]|0;y=(t&1)==0;B=c+4|0;C=y?(t&255)>>>1:k[B>>2]|0;t=c+8|0;D=c+1|0;E=C>>>0>1;F=ZLa(y?D:k[t>>2]|0,300168,E?1:C)|0;if((((F|0)==0?((C|0)==0?-1:E&1):F)|0)==0?(x=0,xa(933,u|0,40),F=x,x=0,F&1):0)G=14;else G=15;b:do if((G|0)==15){x=0;fb(415,o|0,300108,g|0);F=x;x=0;if(F&1)G=14;else{x=0;F=Ta(630,o|0,301371)|0;E=x;x=0;if(E&1){E=Hc()|0;H=M;I=E}else{k[n>>2]=k[F>>2];k[n+4>>2]=k[F+4>>2];k[n+8>>2]=k[F+8>>2];E=0;while(1){if((E|0)==3)break;k[F+(E<<2)>>2]=0;E=E+1|0}E=i[c>>0]|0;F=(E&1)==0;x=0;C=Fa(146,n|0,(F?D:k[t>>2]|0)|0,(F?(E&255)>>>1:k[B>>2]|0)|0)|0;E=x;x=0;if(E&1){E=Hc()|0;J=M;K=E}else{k[m>>2]=k[C>>2];k[m+4>>2]=k[C+4>>2];k[m+8>>2]=k[C+8>>2];E=0;while(1){if((E|0)==3)break;k[C+(E<<2)>>2]=0;E=E+1|0}x=0;E=Ta(630,m|0,300012)|0;C=x;x=0;if(C&1){C=Hc()|0;L=M;N=C}else{k[l>>2]=k[E>>2];k[l+4>>2]=k[E+4>>2];k[l+8>>2]=k[E+8>>2];C=0;while(1){if((C|0)==3)break;k[E+(C<<2)>>2]=0;C=C+1|0}C=i[f>>0]|0;E=(C&1)==0;x=0;F=Fa(146,l|0,(E?f+1|0:k[f+8>>2]|0)|0,(E?(C&255)>>>1:k[f+4>>2]|0)|0)|0;C=x;x=0;if(C&1){C=Hc()|0;O=M;P=C}else{k[j>>2]=k[F>>2];k[j+4>>2]=k[F+4>>2];k[j+8>>2]=k[F+8>>2];C=0;while(1){if((C|0)==3)break;k[F+(C<<2)>>2]=0;C=C+1|0}x=0;C=Ta(630,j|0,300015)|0;F=x;x=0;do if(F&1){E=Hc()|0;Q=M;R=E}else{k[h>>2]=k[C>>2];k[h+4>>2]=k[C+4>>2];k[h+8>>2]=k[C+8>>2];E=0;while(1){if((E|0)==3)break;k[C+(E<<2)>>2]=0;E=E+1|0}E=i[h>>0]|0;y=(E&1)==0;x=0;Fa(146,u|0,(y?h+1|0:k[h+8>>2]|0)|0,(y?(E&255)>>>1:k[h+4>>2]|0)|0)|0;E=x;x=0;if(E&1){E=Hc()|0;y=M;NDa(h);Q=y;R=E;break}NDa(h);NDa(j);NDa(l);NDa(m);NDa(n);NDa(o);E=i[c>>0]|0;y=(E&1)==0;S=y?(E&255)>>>1:k[B>>2]|0;E=S>>>0>1;T=ZLa(y?D:k[t>>2]|0,300168,E?1:S)|0;if((((T|0)==0?((S|0)==0?-1:E&1):T)|0)==0?(x=0,xa(933,u|0,41),T=x,x=0,T&1):0){G=14;break b}NDa(g);NDa(f);w=q;break a}while(0);NDa(j);O=Q;P=R}NDa(l);L=O;N=P}NDa(m);J=L;K=N}NDa(n);H=J;I=K}NDa(o);U=H;V=I}}while(0);if((G|0)==14){q=Hc()|0;U=M;V=q}NDa(g);z=U;A=V}NDa(f);Sc(A|0)}else w=a}else w=a;while(0);r=e;return w|0}function QEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=r;r=r+48|0;f=e+36|0;g=e+24|0;h=e+12|0;j=e;l=dEa(a,b,d)|0;a:do if((l|0)!=(a|0)?(b=d+4|0,m=k[b>>2]|0,(k[d>>2]|0)!=(m|0)):0){n=m+-24|0;kEa(h,c,300108);x=0;xa(932,j|0,(k[b>>2]|0)+-24|0);b=x;x=0;if(b&1){b=Hc()|0;o=M;p=b}else{b=i[j>>0]|0;q=(b&1)==0;x=0;s=Fa(146,h|0,(q?j+1|0:k[j+8>>2]|0)|0,(q?(b&255)>>>1:k[j+4>>2]|0)|0)|0;b=x;x=0;do if(b&1){q=Hc()|0;t=M;u=q}else{k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}x=0;q=Ta(630,g|0,300015)|0;v=x;x=0;if(v&1){v=Hc()|0;w=M;NDa(g);t=w;u=v;break};k[f>>2]=k[q>>2];k[f+4>>2]=k[q+4>>2];k[f+8>>2]=k[q+8>>2];v=0;while(1){if((v|0)==3)break;k[q+(v<<2)>>2]=0;v=v+1|0}do if(i[n>>0]&1){v=m+-16|0;i[k[v>>2]>>0]=0;q=m+-20|0;k[q>>2]=0;w=i[n>>0]|0;if(!(w&1)){y=w;z=10}else{w=k[n>>2]|0;y=w&255;z=(w&-2)+-1|0}if(!(y&1)){w=(y&255)>>>1;if((y&255)<22){A=10;B=w;C=1}else{A=(w+16&240)+-1|0;B=w;C=1}}else{A=10;B=0;C=0}if((A|0)!=(z|0)){if((A|0)==10){w=n+1|0;D=k[v>>2]|0;if(C){Dyb(w|0,D|0,((y&255)>>>1)+1|0)|0;yYa(D)}else{i[w>>0]=i[D>>0]|0;yYa(D)}i[n>>0]=B<<1;break}D=A+1|0;w=xYa(D)|0;if(!(A>>>0<=z>>>0&(w|0)==0)){if(C)Dyb(w|0,n+1|0,((y&255)>>>1)+1|0)|0;else{E=k[v>>2]|0;i[w>>0]=i[E>>0]|0;yYa(E)}k[n>>2]=D|1;k[q>>2]=B;k[v>>2]=w}}}else{i[n+1>>0]=0;i[n>>0]=0}while(0);k[n>>2]=k[f>>2];k[n+4>>2]=k[f+4>>2];k[n+8>>2]=k[f+8>>2];w=0;while(1){if((w|0)==3)break;k[f+(w<<2)>>2]=0;w=w+1|0}NDa(f);NDa(g);NDa(j);NDa(h);F=l;break a}while(0);NDa(j);o=t;p=u}NDa(h);Sc(p|0)}else F=a;while(0);r=e;return F|0}function REa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;d=r;r=r+144|0;e=d+132|0;f=d+120|0;g=d+96|0;h=d+108|0;j=d+60|0;l=d+84|0;m=d+72|0;n=d+24|0;o=d+48|0;p=d+12|0;q=d+36|0;s=d;t=b;a:do if((t-a|0)>2){if((i[a>>0]|0)==103){u=(i[a+1>>0]|0)==115;v=u;w=u?a+2|0:a}else{v=0;w=a}u=SEa(w,b,c)|0;if((u|0)!=(w|0)){if(!v){y=u;break}z=k[c+4>>2]|0;if((k[c>>2]|0)==(z|0)){y=a;break}PDa(z+-24|0,0,300292)|0;y=u;break}if(((t-w|0)>2?(i[w>>0]|0)==115:0)?(i[w+1>>0]|0)==114:0){u=w+2|0;b:do if((i[u>>0]|0)==78){z=w+3|0;A=TEa(z,b,c)|0;if((A|0)==(z|0)|(A|0)==(b|0)){y=a;break a}z=iEa(A,b,c)|0;B=c+4|0;do if((z|0)==(A|0)){C=c;D=A}else{E=k[B>>2]|0;if(((E-(k[c>>2]|0)|0)/24|0)>>>0<2){y=a;break a}fEa(e,E+-24|0);E=k[B>>2]|0;F=E+-24|0;G=E;while(1){if((G|0)==(F|0))break;H=G+-24|0;k[B>>2]=H;CDa(H);G=k[B>>2]|0}G=i[e>>0]|0;F=(G&1)==0;x=0;Fa(146,E+-48|0,(F?e+1|0:k[e+8>>2]|0)|0,(F?(G&255)>>>1:k[e+4>>2]|0)|0)|0;G=x;x=0;if(G&1){G=Hc()|0;F=M;NDa(e);I=F;J=G;break b}if((z|0)!=(b|0)){NDa(e);C=c;D=z;break}G=k[B>>2]|0;F=G+-24|0;H=G;while(1){if((H|0)==(F|0))break;G=H+-24|0;k[B>>2]=G;CDa(G);H=k[B>>2]|0}NDa(e);y=a;break a}while(0);z=g+8|0;A=g+1|0;H=g+4|0;F=D;while(1){if((i[F>>0]|0)==69){K=F;L=43;break}E=UEa(F,b,c)|0;if((E|0)==(F|0)|(E|0)==(b|0)){y=a;break a}G=k[B>>2]|0;if(((G-(k[C>>2]|0)|0)/24|0)>>>0<2){y=a;break a}fEa(f,G+-24|0);G=k[B>>2]|0;N=G+-24|0;O=G;while(1){if((O|0)==(N|0))break;P=O+-24|0;k[B>>2]=P;CDa(P);O=k[B>>2]|0}x=0;O=Fa(147,f|0,0,300292)|0;N=x;x=0;if(N&1){L=40;break};k[g>>2]=k[O>>2];k[g+4>>2]=k[O+4>>2];k[g+8>>2]=k[O+8>>2];N=0;while(1){if((N|0)==3)break;k[O+(N<<2)>>2]=0;N=N+1|0}N=i[g>>0]|0;O=(N&1)==0;x=0;Fa(146,G+-48|0,(O?A:k[z>>2]|0)|0,(O?(N&255)>>>1:k[H>>2]|0)|0)|0;N=x;x=0;if(N&1){L=41;break}NDa(g);NDa(f);F=E}if((L|0)==40){F=Hc()|0;Q=M;R=F}else if((L|0)==41){F=Hc()|0;H=M;NDa(g);Q=H;R=F}else if((L|0)==43){F=K+1|0;H=SEa(F,b,c)|0;if((H|0)==(F|0)){F=k[B>>2]|0;if((k[c>>2]|0)==(F|0)){y=a;break a}z=F+-24|0;A=F;while(1){if((A|0)==(z|0)){y=a;break a}F=A+-24|0;k[B>>2]=F;CDa(F);A=k[B>>2]|0}}A=k[B>>2]|0;if(((A-(k[C>>2]|0)|0)/24|0)>>>0<2){y=a;break a}fEa(h,A+-24|0);A=k[B>>2]|0;z=A+-24|0;F=A;while(1){if((F|0)==(z|0))break;N=F+-24|0;k[B>>2]=N;CDa(N);F=k[B>>2]|0}x=0;B=Fa(147,h|0,0,300292)|0;F=x;x=0;do if(!(F&1)){k[j>>2]=k[B>>2];k[j+4>>2]=k[B+4>>2];k[j+8>>2]=k[B+8>>2];z=0;while(1){if((z|0)==3)break;k[B+(z<<2)>>2]=0;z=z+1|0}z=i[j>>0]|0;E=(z&1)==0;x=0;Fa(146,A+-48|0,(E?j+1|0:k[j+8>>2]|0)|0,(E?(z&255)>>>1:k[j+4>>2]|0)|0)|0;z=x;x=0;if(z&1){z=Hc()|0;E=M;NDa(j);S=E;T=z;break}else{NDa(j);NDa(h);y=H;break a}}else{z=Hc()|0;S=M;T=z}while(0);NDa(h);I=S;J=T;break}NDa(f);I=Q;J=R}else{H=TEa(u,b,c)|0;if((H|0)!=(u|0)){A=iEa(H,b,c)|0;do if((A|0)!=(H|0)){B=c+4|0;F=k[B>>2]|0;if(((F-(k[c>>2]|0)|0)/24|0)>>>0<2){y=a;break a}fEa(l,F+-24|0);F=k[B>>2]|0;z=F+-24|0;E=F;while(1){if((E|0)==(z|0))break;G=E+-24|0;k[B>>2]=G;CDa(G);E=k[B>>2]|0}B=i[l>>0]|0;E=(B&1)==0;x=0;Fa(146,F+-48|0,(E?l+1|0:k[l+8>>2]|0)|0,(E?(B&255)>>>1:k[l+4>>2]|0)|0)|0;B=x;x=0;if(B&1){B=Hc()|0;E=M;NDa(l);I=E;J=B;break b}else{NDa(l);U=A;break}}else U=H;while(0);H=SEa(U,b,c)|0;if((H|0)==(U|0)){A=c+4|0;B=k[A>>2]|0;if((k[c>>2]|0)==(B|0)){y=a;break a}E=B+-24|0;z=B;while(1){if((z|0)==(E|0)){y=a;break a}B=z+-24|0;k[A>>2]=B;CDa(B);z=k[A>>2]|0}}A=c+4|0;z=k[A>>2]|0;if(((z-(k[c>>2]|0)|0)/24|0)>>>0<2){y=a;break a}fEa(m,z+-24|0);z=k[A>>2]|0;E=z+-24|0;B=z;while(1){if((B|0)==(E|0))break;G=B+-24|0;k[A>>2]=G;CDa(G);B=k[A>>2]|0}x=0;A=Fa(147,m|0,0,300292)|0;B=x;x=0;do if(!(B&1)){k[n>>2]=k[A>>2];k[n+4>>2]=k[A+4>>2];k[n+8>>2]=k[A+8>>2];E=0;while(1){if((E|0)==3)break;k[A+(E<<2)>>2]=0;E=E+1|0}E=i[n>>0]|0;F=(E&1)==0;x=0;Fa(146,z+-48|0,(F?n+1|0:k[n+8>>2]|0)|0,(F?(E&255)>>>1:k[n+4>>2]|0)|0)|0;E=x;x=0;if(E&1){E=Hc()|0;F=M;NDa(n);V=F;W=E;break}else{NDa(n);NDa(m);y=H;break a}}else{E=Hc()|0;V=M;W=E}while(0);NDa(m);I=V;J=W;break}H=UEa(u,b,c)|0;if((H|0)==(u|0)|(H|0)==(b|0)){y=a;break a}if(v){z=c+4|0;A=k[z>>2]|0;if((k[c>>2]|0)==(A|0)){y=a;break a}PDa(A+-24|0,0,300292)|0;X=z}else X=c+4|0;z=p+8|0;A=p+1|0;B=p+4|0;E=H;while(1){if((i[E>>0]|0)==69){Y=E;L=109;break}H=UEa(E,b,c)|0;if((H|0)==(E|0)|(H|0)==(b|0)){y=a;break a}F=k[X>>2]|0;if(((F-(k[c>>2]|0)|0)/24|0)>>>0<2){y=a;break a}fEa(o,F+-24|0);F=k[X>>2]|0;G=F+-24|0;N=F;while(1){if((N|0)==(G|0))break;O=N+-24|0;k[X>>2]=O;CDa(O);N=k[X>>2]|0}x=0;N=Fa(147,o|0,0,300292)|0;G=x;x=0;if(G&1){L=106;break};k[p>>2]=k[N>>2];k[p+4>>2]=k[N+4>>2];k[p+8>>2]=k[N+8>>2];G=0;while(1){if((G|0)==3)break;k[N+(G<<2)>>2]=0;G=G+1|0}G=i[p>>0]|0;N=(G&1)==0;x=0;Fa(146,F+-48|0,(N?A:k[z>>2]|0)|0,(N?(G&255)>>>1:k[B>>2]|0)|0)|0;G=x;x=0;if(G&1){L=107;break}NDa(p);NDa(o);E=H}if((L|0)==106){E=Hc()|0;Z=M;_=E}else if((L|0)==107){E=Hc()|0;B=M;NDa(p);Z=B;_=E}else if((L|0)==109){E=Y+1|0;B=SEa(E,b,c)|0;if((B|0)==(E|0)){E=k[X>>2]|0;if((k[c>>2]|0)==(E|0)){y=a;break a}z=E+-24|0;A=E;while(1){if((A|0)==(z|0)){y=a;break a}E=A+-24|0;k[X>>2]=E;CDa(E);A=k[X>>2]|0}}A=k[X>>2]|0;if(((A-(k[c>>2]|0)|0)/24|0)>>>0<2){y=a;break a}fEa(q,A+-24|0);A=k[X>>2]|0;z=A+-24|0;E=A;while(1){if((E|0)==(z|0))break;G=E+-24|0;k[X>>2]=G;CDa(G);E=k[X>>2]|0}x=0;E=Fa(147,q|0,0,300292)|0;z=x;x=0;do if(!(z&1)){k[s>>2]=k[E>>2];k[s+4>>2]=k[E+4>>2];k[s+8>>2]=k[E+8>>2];G=0;while(1){if((G|0)==3)break;k[E+(G<<2)>>2]=0;G=G+1|0}G=i[s>>0]|0;H=(G&1)==0;x=0;Fa(146,A+-48|0,(H?s+1|0:k[s+8>>2]|0)|0,(H?(G&255)>>>1:k[s+4>>2]|0)|0)|0;G=x;x=0;if(G&1){G=Hc()|0;H=M;NDa(s);$=H;aa=G;break}else{NDa(s);NDa(q);y=B;break a}}else{G=Hc()|0;$=M;aa=G}while(0);NDa(q);I=$;J=aa;break}NDa(o);I=Z;J=_}while(0);Sc(J|0)}else y=a}else y=a;while(0);r=d;return y|0}function SEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+32|0;e=d+12|0;f=d;a:do if((b-a|0)>1){g=i[a>>0]|0;b:do switch(g<<24>>24){case 100:case 111:{if((i[a+1>>0]|0)==110){h=a+2|0;if(g<<24>>24!=111){if((h|0)!=(b|0)){j=TEa(h,b,c)|0;if((j|0)==(h|0))l=UEa(h,b,c)|0;else l=j;if((l|0)!=(h|0)?(j=k[c+4>>2]|0,(k[c>>2]|0)!=(j|0)):0){PDa(j+-24|0,0,300318)|0;m=l}else m=h}else m=b;n=(m|0)==(h|0)?a:m;break a}j=FEa(h,b,c)|0;if((j|0)==(h|0)){n=a;break a}h=iEa(j,b,c)|0;if((h|0)==(j|0)){n=j;break a}j=c+4|0;o=k[j>>2]|0;if(((o-(k[c>>2]|0)|0)/24|0)>>>0<2){n=h;break a}fEa(e,o+-24|0);o=k[j>>2]|0;p=o+-24|0;q=o;while(1){if((q|0)==(p|0))break;s=q+-24|0;k[j>>2]=s;CDa(s);q=k[j>>2]|0}j=i[e>>0]|0;q=(j&1)==0;x=0;Fa(146,o+-48|0,(q?e+1|0:k[e+8>>2]|0)|0,(q?(j&255)>>>1:k[e+4>>2]|0)|0)|0;j=x;x=0;if(j&1){j=Hc()|0;q=M;NDa(e);t=q;u=j;break b}else{NDa(e);n=h;break a}}else v=21;break}default:v=21}while(0);do if((v|0)==21){g=UEa(a,b,c)|0;if((g|0)!=(a|0)){n=g;break a}g=FEa(a,b,c)|0;if((g|0)==(a|0)){n=a;break a}j=iEa(g,b,c)|0;if((j|0)==(g|0)){n=g;break a}g=c+4|0;q=k[g>>2]|0;if(((q-(k[c>>2]|0)|0)/24|0)>>>0<2){n=j;break a}fEa(f,q+-24|0);q=k[g>>2]|0;p=q+-24|0;s=q;while(1){if((s|0)==(p|0))break;w=s+-24|0;k[g>>2]=w;CDa(w);s=k[g>>2]|0}g=i[f>>0]|0;s=(g&1)==0;x=0;Fa(146,q+-48|0,(s?f+1|0:k[f+8>>2]|0)|0,(s?(g&255)>>>1:k[f+4>>2]|0)|0)|0;g=x;x=0;if(g&1){g=Hc()|0;s=M;NDa(f);t=s;u=g;break}else{NDa(f);n=j;break a}}while(0);Sc(u|0)}else n=a;while(0);r=d;return n|0}function TEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=r;r=r+144|0;e=d+112|0;f=d+92|0;g=d+72|0;h=d+56|0;j=d+48|0;l=d+32|0;m=d+24|0;n=d+8|0;o=d;a:do if((a|0)==(b|0))p=a;else{b:do switch(i[a>>0]|0){case 84:{q=c+4|0;s=((k[q>>2]|0)-(k[c>>2]|0)|0)/24|0;t=hEa(a,b,c)|0;u=k[q>>2]|0;v=(u-(k[c>>2]|0)|0)/24|0;w=u;if(!((t|0)!=(a|0)&(v|0)==(s+1|0))){u=w;y=v;while(1){if((y|0)==(s|0)){p=a;break a}v=u+-24|0;z=u;while(1){if((z|0)==(v|0))break;A=z+-24|0;k[q>>2]=A;CDa(A);z=k[q>>2]|0}u=v;y=y+-1|0}}y=c+16|0;k[j>>2]=k[c+12>>2];gEa(h,w+-24|0,j);u=c+20|0;q=k[u>>2]|0;s=k[c+24>>2]|0;z=s;if(q>>>0>>0){k[q+12>>2]=k[h+12>>2];k[q>>2]=k[h>>2];s=h+4|0;k[q+4>>2]=k[s>>2];A=h+8|0;k[q+8>>2]=k[A>>2];k[A>>2]=0;k[s>>2]=0;k[h>>2]=0;k[u>>2]=(k[u>>2]|0)+16}else{u=k[y>>2]|0;s=q-u|0;q=s>>4;A=q+1|0;if((s|0)<-16){x=0;va(1473,y|0);x=0;s=Hc()|0;B=M;DDa(h);C=B;D=s;break b}s=z-u|0;if(s>>4>>>0<1073741823){u=s>>3;E=u>>>0>>0?A:u}else E=2147483647;TDa(g,E,q,c+28|0);q=g+8|0;u=k[q>>2]|0;k[u+12>>2]=k[h+12>>2];k[u>>2]=k[h>>2];A=h+4|0;k[u+4>>2]=k[A>>2];s=h+8|0;k[u+8>>2]=k[s>>2];k[s>>2]=0;k[A>>2]=0;k[h>>2]=0;k[q>>2]=u+16;UDa(y,g);VDa(g)}DDa(h);p=t;break a;break}case 68:{y=pEa(a,b,c)|0;if((y|0)==(a|0)){p=a;break a}u=k[c+4>>2]|0;if((k[c>>2]|0)==(u|0)){p=a;break a}q=c+16|0;k[m>>2]=k[c+12>>2];gEa(l,u+-24|0,m);u=c+20|0;A=k[u>>2]|0;s=k[c+24>>2]|0;z=s;if(A>>>0>>0){k[A+12>>2]=k[l+12>>2];k[A>>2]=k[l>>2];s=l+4|0;k[A+4>>2]=k[s>>2];B=l+8|0;k[A+8>>2]=k[B>>2];k[B>>2]=0;k[s>>2]=0;k[l>>2]=0;k[u>>2]=(k[u>>2]|0)+16}else{u=k[q>>2]|0;s=A-u|0;A=s>>4;B=A+1|0;if((s|0)<-16){x=0;va(1473,q|0);x=0;s=Hc()|0;F=M;DDa(l);C=F;D=s;break b}s=z-u|0;if(s>>4>>>0<1073741823){u=s>>3;G=u>>>0>>0?B:u}else G=2147483647;TDa(f,G,A,c+28|0);A=f+8|0;u=k[A>>2]|0;k[u+12>>2]=k[l+12>>2];k[u>>2]=k[l>>2];B=l+4|0;k[u+4>>2]=k[B>>2];s=l+8|0;k[u+8>>2]=k[s>>2];k[s>>2]=0;k[B>>2]=0;k[l>>2]=0;k[A>>2]=u+16;UDa(q,f);VDa(f)}DDa(l);p=y;break a;break}case 83:{y=oEa(a,b,c)|0;if((y|0)!=(a|0)){p=y;break a}if((b-a|0)<=2){p=a;break a}if((i[a+1>>0]|0)!=116){p=a;break a}y=a+2|0;q=zEa(y,b,c)|0;if((q|0)==(y|0)){p=a;break a}y=c+4|0;u=k[y>>2]|0;if((k[c>>2]|0)==(u|0)){p=a;break a}PDa(u+-24|0,0,300312)|0;u=c+16|0;A=(k[y>>2]|0)+-24|0;k[o>>2]=k[c+12>>2];gEa(n,A,o);A=c+20|0;y=k[A>>2]|0;B=k[c+24>>2]|0;s=B;if(y>>>0>>0){k[y+12>>2]=k[n+12>>2];k[y>>2]=k[n>>2];B=n+4|0;k[y+4>>2]=k[B>>2];z=n+8|0;k[y+8>>2]=k[z>>2];k[z>>2]=0;k[B>>2]=0;k[n>>2]=0;k[A>>2]=(k[A>>2]|0)+16}else{A=k[u>>2]|0;B=y-A|0;y=B>>4;z=y+1|0;if((B|0)<-16){x=0;va(1473,u|0);x=0;B=Hc()|0;F=M;DDa(n);C=F;D=B;break b}B=s-A|0;if(B>>4>>>0<1073741823){A=B>>3;H=A>>>0>>0?z:A}else H=2147483647;TDa(e,H,y,c+28|0);y=e+8|0;A=k[y>>2]|0;k[A+12>>2]=k[n+12>>2];k[A>>2]=k[n>>2];z=n+4|0;k[A+4>>2]=k[z>>2];B=n+8|0;k[A+8>>2]=k[B>>2];k[B>>2]=0;k[z>>2]=0;k[n>>2]=0;k[y>>2]=A+16;UDa(u,e);VDa(e)}DDa(n);p=q;break a;break}default:{p=a;break a}}while(0);Sc(D|0)}while(0);r=d;return p|0}function UEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+16|0;e=d;do if((a|0)!=(b|0)?(f=jEa(a,b,c)|0,(f|0)!=(a|0)):0){g=iEa(f,b,c)|0;if((g|0)!=(f|0)){h=c+4|0;j=k[h>>2]|0;if(((j-(k[c>>2]|0)|0)/24|0)>>>0>=2){fEa(e,j+-24|0);j=k[h>>2]|0;l=j+-24|0;m=j;while(1){if((m|0)==(l|0))break;n=m+-24|0;k[h>>2]=n;CDa(n);m=k[h>>2]|0}h=i[e>>0]|0;m=(h&1)==0;x=0;Fa(146,j+-48|0,(m?e+1|0:k[e+8>>2]|0)|0,(m?(h&255)>>>1:k[e+4>>2]|0)|0)|0;h=x;x=0;if(h&1){h=Hc()|0;NDa(e);Sc(h|0)}else{NDa(e);o=g;break}}else o=a}else o=f}else o=a;while(0);r=d;return o|0}function VEa(a){a=a|0;Db(301514,299350,1175,301543)}function WEa(a,b){a=a|0;b=b|0;var c=0;i[a>>0]=6;c=a+1|0;i[c>>0]=i[b>>0]|0;i[c+1>>0]=i[b+1>>0]|0;i[c+2>>0]=i[b+2>>0]|0;i[a+4>>0]=0;b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function XEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;i[a>>0]=16;c=b;b=c;d=l[b>>0]|l[b+1>>0]<<8|l[b+2>>0]<<16|l[b+3>>0]<<24;b=c+4|0;c=l[b>>0]|l[b+1>>0]<<8|l[b+2>>0]<<16|l[b+3>>0]<<24;b=a+1|0;e=b;i[e>>0]=d;i[e+1>>0]=d>>8;i[e+2>>0]=d>>16;i[e+3>>0]=d>>24;d=b+4|0;i[d>>0]=c;i[d+1>>0]=c>>8;i[d+2>>0]=c>>16;i[d+3>>0]=c>>24;i[a+9>>0]=0;c=a+12|0;a=0;while(1){if((a|0)==3)break;k[c+(a<<2)>>2]=0;a=a+1|0}return}function YEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;a:do if((a|0)!=(b|0)){switch(i[a>>0]|0){case 104:{c=a+1|0;d=bEa(c,b)|0;if((d|0)==(c|0)|(d|0)==(b|0)){e=a;break a}return ((i[d>>0]|0)==95?d+1|0:a)|0}case 118:break;default:{e=a;break a}}d=a+1|0;c=bEa(d,b)|0;if((!((c|0)==(d|0)|(c|0)==(b|0))?(i[c>>0]|0)==95:0)?(d=c+1|0,c=bEa(d,b)|0,!((c|0)==(d|0)|(c|0)==(b|0))):0)e=(i[c>>0]|0)==95?c+1|0:a;else e=a}else e=a;while(0);return e|0}function ZEa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=dNa(a,21514,d)|0;r=c;return b|0}function _Ea(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(b&-4112)){c=a+8|0;k[c>>2]=k[c>>2]&-4112|b;d=0}else{b=HSa()|0;k[b>>2]=22;d=-1}return d|0}function $Ea(a,b){a=a|0;b=b|0;var c=0,d=0;do if(b)if(!(b&-4112)){c=a+8|0;k[c>>2]=k[c>>2]&-4112|b;d=0;break}else{c=HSa()|0;k[c>>2]=22;d=-1;break}else d=0;while(0);return d|0}function aFa(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b;d=b+4|0;k[c>>2]=d;e=(dNa(a,21545,c)|0)<0;r=b;return (e?-1:k[d>>2]|0)|0}function bFa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=((dNa(a,21505,d)|0)!=0)<<31>>31;r=c;return b|0}function cFa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=dNa(a,21515,d)|0;r=c;return b|0}function dFa(a){a=a|0;return k[a+8>>2]&4111|0}function eFa(a){a=a|0;return k[a+8>>2]&4111|0}function fFa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;if(b>>>0>2){f=HSa()|0;k[f>>2]=22;g=-1}else{k[e>>2]=c;g=dNa(a,b+21506|0,e)|0}r=d;return g|0}function gFa(a){a=a|0;var b=0;k[a>>2]=k[a>>2]&-1516;b=a+4|0;k[b>>2]=k[b>>2]&-2;b=a+12|0;k[b>>2]=k[b>>2]&-32844;b=a+8|0;k[b>>2]=k[b>>2]&-305|48;i[a+23>>0]=1;i[a+22>>0]=0;return}function hFa(a,b){a=a|0;b=b|0;var c=0,d=0;b=r;r=r+16|0;c=b;k[c>>2]=0;d=dNa(a,21513,c)|0;r=b;return d|0}function iFa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;k[c+4>>2]=21513;k[c+8>>2]=1;a=KVa(wf(54,c|0)|0)|0;r=b;return a|0}function jFa(a){a=+a;return +(+fHa(a))}function kFa(a,b){a=+a;b=b|0;var c=0.0,d=0,e=0,f=0,g=0.0;if((b|0)>1023){c=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){e=b+-2046|0;f=(e|0)>1023?1023:e;g=c*8988465674311579538646525.0e283}else{f=d;g=c}}else if((b|0)<-1022){c=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){e=b+2044|0;f=(e|0)<-1022?-1022:e;g=c*2.2250738585072014e-308}else{f=d;g=c}}else{f=b;g=a}b=Kyb(f+1023|0,0,52)|0;f=M;k[t>>2]=b;k[t+4>>2]=f;return +(g*+p[t>>3])}function lFa(a){a=+a;return ~~+JHa(a)|0}function mFa(a){a=+a;return +(+$Ha(a))}function nFa(a){a=+a;var b=0,c=0,d=0.0,e=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b&2147483647;a=(k[t>>2]=c,+o[t>>2]);do if(c>>>0>1057791828)if(c>>>0>1092616192){d=0.0/a+1.0;break}else{d=1.0-2.0/(+fGa(a*2.0)+2.0);break}else{if(c>>>0>1048757624){e=+fGa(a*2.0);d=e/(e+2.0);break}if(c>>>0>8388607){e=+fGa(a*-2.0);d=-e/(e+2.0)}else d=a}while(0);return +((b|0)<0?-d:d)}function oFa(a){a=+a;var b=0.0;do if(((o[t>>2]=a,k[t>>2]|0)&2139095040)>>>0<2139095040)if(a==0.0){b=-1.0/(a*a);break}else{b=+(mHa(a)|0);break}else b=a*a;while(0);return +b}function pFa(a,b){a=+a;b=b|0;var c=0,d=0,e=0.0,f=0.0,g=0,h=0.0;c=(o[t>>2]=a,k[t>>2]|0);d=c>>>23&255;switch(d|0){case 0:{if(a!=0.0){e=+pFa(a*18446744073709551616.0,b);f=e;g=(k[b>>2]|0)+-64|0}else{f=a;g=0}k[b>>2]=g;h=f;break}case 255:{h=a;break}default:{k[b>>2]=d+-126;h=(k[t>>2]=c&-2139095041|1056964608,+o[t>>2])}}return +h}function qFa(a){a=+a;return ~~+oIa(a)|0}function rFa(a,b){a=+a;b=+b;var c=0,d=0.0;c=r;r=r+16|0;d=+_Ga(a,b,c);r=c;return +d}function sFa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0.0,z=0,A=0,B=0,C=0.0,D=0.0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0,V=0,X=0,Y=0,Z=0,_=0,$=0,aa=0.0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0;f=r;r=r+560|0;g=f+480|0;h=f+320|0;i=f+160|0;j=f;l=k[48380+(e<<2)>>2]|0;m=d+-1|0;n=(c+-3|0)/24|0;o=(n|0)<0?0:n;n=(o*24|0)+24|0;q=c-n|0;if((l+m|0)>=0){s=l+d|0;t=0;u=o-m|0;while(1){if((u|0)<0)v=0.0;else v=+(k[48396+(u<<2)>>2]|0);p[h+(t<<3)>>3]=v;t=t+1|0;if((t|0)==(s|0))break;else u=u+1|0}}u=(d|0)<1;s=0;while(1){if(u)w=0.0;else{t=s+m|0;v=0.0;x=0;while(1){y=v+ +p[a+(x<<3)>>3]*+p[h+(t-x<<3)>>3];x=x+1|0;if((x|0)==(d|0)){w=y;break}else v=y}}p[j+(s<<3)>>3]=w;if((s|0)<(l|0))s=s+1|0;else break}s=(q|0)>0;m=24-q|0;u=23-q|0;x=(d|0)<1;t=(n|0)==(c|0);c=l;a:while(1){w=+p[j+(c<<3)>>3];n=(c|0)>0;if(n){z=0;A=c;v=w;while(1){y=+(~~(v*5.9604644775390625e-08)|0);k[g+(z<<2)>>2]=~~(v-y*16777216.0);B=A;A=A+-1|0;C=y+ +p[j+(A<<3)>>3];if((B|0)<=1){D=C;break}else{z=z+1|0;v=C}}}else D=w;v=+kFa(D,q);C=v-+W(+(v*.125))*8.0;z=~~C;v=C-+(z|0);do if(!s)if(!t)if(!(v>=.5)){E=0;F=z;G=v;break}else{H=2;I=z;J=20;break}else{K=k[g+(c+-1<<2)>>2]>>23;L=z;J=19;break}else{A=g+(c+-1<<2)|0;B=k[A>>2]|0;M=B>>m;N=B-(M<>2]=N;K=N>>u;L=M+z|0;J=19}while(0);if((J|0)==19){J=0;if((K|0)>0){H=K;I=L;J=20}else{E=K;F=L;G=v}}if((J|0)==20){J=0;z=I+1|0;if(n){M=0;N=0;while(1){A=g+(N<<2)|0;B=k[A>>2]|0;if(!M)if(!B)O=0;else{k[A>>2]=16777216-B;O=1}else{k[A>>2]=16777215-B;O=M}N=N+1|0;if((N|0)==(c|0)){P=O;break}else M=O}}else P=0;b:do if(s)switch(q|0){case 1:{M=g+(c+-1<<2)|0;k[M>>2]=k[M>>2]&8388607;break b;break}case 2:{M=g+(c+-1<<2)|0;k[M>>2]=k[M>>2]&4194303;break b;break}default:break b}while(0);if((H|0)==2){w=1.0-v;if(!P){E=2;F=z;G=w}else{E=2;F=z;G=w-+kFa(1.0,q)}}else{E=H;F=z;G=v}}if(!(G==0.0)){Q=E;R=c;S=F;T=G;J=44;break}if((c|0)>(l|0)){M=c;N=0;while(1){M=M+-1|0;n=k[g+(M<<2)>>2]|N;if((M|0)<=(l|0)){U=n;break}else N=n}if(U){V=E;X=c;Y=F;J=37;break}else Z=1}else Z=1;while(1)if(!(k[g+(l-Z<<2)>>2]|0))Z=Z+1|0;else{_=Z;break}N=_+c|0;if((_|0)>0)$=c;else{c=N;continue}while(1){M=$+1|0;z=$+d|0;p[h+(z<<3)>>3]=+(k[48396+(M+o<<2)>>2]|0);if(x)aa=0.0;else{v=0.0;n=0;while(1){w=v+ +p[a+(n<<3)>>3]*+p[h+(z-n<<3)>>3];n=n+1|0;if((n|0)==(d|0)){aa=w;break}else v=w}}p[j+(M<<3)>>3]=aa;if((M|0)<(N|0))$=M;else{c=N;continue a}}}do if((J|0)==37){c=X;$=q;while(1){d=$+-24|0;h=c+-1|0;if(!(k[g+(h<<2)>>2]|0)){c=h;$=d}else{ba=V;ca=h;da=Y;ea=d;break}}}else if((J|0)==44){aa=+kFa(T,0-q|0);if(!(aa>=16777216.0)){k[g+(R<<2)>>2]=~~aa;ba=Q;ca=R;da=S;ea=q;break}else{$=~~(aa*5.9604644775390625e-08);k[g+(R<<2)>>2]=~~(aa-+($|0)*16777216.0);c=R+1|0;k[g+(c<<2)>>2]=$;ba=Q;ca=c;da=S;ea=q+24|0;break}}while(0);q=(ca|0)>-1;if(q){T=+kFa(1.0,ea);ea=ca;while(1){p[j+(ea<<3)>>3]=T*+(k[g+(ea<<2)>>2]|0);if((ea|0)>0){T=T*5.9604644775390625e-08;ea=ea+-1|0}else break}if(q){ea=ca;while(1){g=ca-ea|0;T=0.0;S=0;while(1){aa=T+ +p[10160+(S<<3)>>3]*+p[j+(S+ea<<3)>>3];if((S|0)>=(l|0)|(S|0)>=(g|0)){fa=aa;break}else{T=aa;S=S+1|0}}p[i+(g<<3)>>3]=fa;if((ea|0)>0)ea=ea+-1|0;else break}}}c:do switch(e|0){case 0:{if(q){fa=0.0;ea=ca;while(1){T=fa+ +p[i+(ea<<3)>>3];if((ea|0)>0){fa=T;ea=ea+-1|0}else{ga=T;break}}}else ga=0.0;p[b>>3]=(ba|0)==0?ga:-ga;break}case 2:case 1:{if(q){fa=0.0;ea=ca;while(1){T=fa+ +p[i+(ea<<3)>>3];if((ea|0)>0){fa=T;ea=ea+-1|0}else{ha=T;break}}}else ha=0.0;ea=(ba|0)==0;p[b>>3]=ea?ha:-ha;fa=+p[i>>3]-ha;if((ca|0)<1)ia=fa;else{T=fa;g=1;while(1){fa=T+ +p[i+(g<<3)>>3];if((g|0)==(ca|0)){ia=fa;break}else{T=fa;g=g+1|0}}}p[b+8>>3]=ea?ia:-ia;break}case 3:{if((ca|0)>0){T=+p[i+(ca<<3)>>3];g=ca;do{l=g;g=g+-1|0;j=i+(g<<3)|0;fa=+p[j>>3];aa=T;T=fa+T;p[i+(l<<3)>>3]=aa+(fa-T);p[j>>3]=T}while((l|0)>1);g=(ca|0)>1;if(g){T=+p[i+(ca<<3)>>3];ea=ca;do{l=ea;ea=ea+-1|0;j=i+(ea<<3)|0;fa=+p[j>>3];aa=T;T=fa+T;p[i+(l<<3)>>3]=aa+(fa-T);p[j>>3]=T}while((ea|0)>1);if(g){T=0.0;ea=ca;while(1){fa=T+ +p[i+(ea<<3)>>3];ea=ea+-1|0;if((ea|0)<=1){ja=fa;break}else T=fa}}else ja=0.0}else ja=0.0}else ja=0.0;T=+p[i>>3];fa=+p[i+8>>3];if(!ba){p[b>>3]=T;p[b+8>>3]=fa;p[b+16>>3]=ja;break c}else{p[b>>3]=-T;p[b+8>>3]=-fa;p[b+16>>3]=-ja;break c}break}default:{}}while(0);r=f;return da&7|0}function tFa(a){a=+a;return ~~+nGa(a)|0}function uFa(a){a=a|0;return +B}function vFa(a){a=+a;var b=0.0;b=+nGa(a);M=+X(b)>=1.0?(b>0.0?~~+ja(+W(b/4294967296.0),4294967295.0)>>>0:~~+ha((b-+(~~b>>>0))/4294967296.0)>>>0):0;return ~~b>>>0|0}function wFa(a,b){a=+a;b=b|0;var c=0.0,d=0,e=0,f=0,g=0.0;if((b|0)>127){c=a*1701411834604692317316873.0e14;d=b+-127|0;if((d|0)>127){e=b+-254|0;f=(e|0)>127?127:e;g=c*1701411834604692317316873.0e14}else{f=d;g=c}}else if((b|0)<-126){c=a*1.1754943508222875e-38;d=b+126|0;if((d|0)<-126){e=b+252|0;f=(e|0)<-126?-126:e;g=c*1.1754943508222875e-38}else{f=d;g=c}}else{f=b;g=a}return +(g*(k[t>>2]=(f<<23)+1065353216,+o[t>>2]))}function xFa(a,b){a=+a;b=b|0;return +(+YFa(a,b))}function yFa(a){a=+a;return +(+YFa(a,48028))}function zFa(a){a=+a;var b=0,c=0.0;b=ITa(32)|0;c=+MGa(a);return +c}function AFa(a){a=+a;var b=0,c=0,d=0.0,e=0,f=0,g=0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=(b|0)<0;do if(b>>>0<8388608|c){if(!(b&2147483647)){d=-1.0/(a*a);break}if(c){d=(a-a)/0.0;break}else{e=(o[t>>2]=a*33554432.0,k[t>>2]|0);f=-152;g=9;break}}else if(b>>>0<=2139095039)if((b|0)==1065353216)d=0.0;else{e=b;f=-127;g=9}else d=a;while(0);if((g|0)==9){g=e+4913933|0;a=(k[t>>2]=(g&8388607)+1060439283,+o[t>>2])+-1.0;h=a/(a+2.0);i=h*h;j=i*i;l=a*(a*.5);m=(k[t>>2]=(o[t>>2]=a-l,k[t>>2]|0)&-4096,+o[t>>2]);n=h*(l+(i*(j*.2849878668785095+.6666666269302368)+j*(j*.24279078841209412+.40000972151756287)))+(a-m-l);d=+(f+(g>>>23)|0)+(m*1.44287109375+(n*1.44287109375-(m+n)*1.7605285393074155e-04))}return +d}function BFa(a,b){a=+a;b=+b;return +(+fIa(a,b))}function CFa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b>>>31;d=b&2147483647;do if(d>>>0<=2139095039)if(d>>>0<1062731776)if(d>>>0<830472192){e=(a*8.0+a*1.0270333290100098)*.125;break}else{f=a*a;e=(f*(f*(f*(-.005770270247012377-f*2.3763017452438362e-05)+-.028481749817728996)+-.32504209876060486)+.12837916612625122)/(f*(f*(f*(f*(1.324947370449081e-04-f*3.9602282413397916e-06)+5.0813062116503716e-03)+.06502225250005722)+.3979172110557556)+1.0)*a+a;break}else{if(d>>>0<1086324736)g=1.0-+zWa(d,a);else g=1.0;e=(c|0)!=0?-g:g;break}else e=+(1-(c<<1)|0)+1.0/a;while(0);return +e}function DFa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b>>>31;d=b&2147483647;do if(d>>>0<=2139095039){if(d>>>0>=1062731776){b=(c|0)!=0;if(d>>>0<1105199104){e=+zWa(d,a);f=b?2.0-e:e;break}else{f=b?2.0:0.0;break}}if(d>>>0<595591168){f=1.0-a;break}e=a*a;g=(e*(e*(e*(-.005770270247012377-e*2.3763017452438362e-05)+-.028481749817728996)+-.32504209876060486)+.12837916612625122)/(e*(e*(e*(e*(1.324947370449081e-04-e*3.9602282413397916e-06)+5.0813062116503716e-03)+.06502225250005722)+.3979172110557556)+1.0);if((c|0)!=0|d>>>0<1048576e3){f=1.0-(g*a+a);break}else{f=.5-(a+-.5+g*a);break}}else f=+(c<<1|0)+1.0/a;while(0);return +f}function EFa(a){a=+a;return +(+nHa(a))}function FFa(a){a=+a;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=Iyb(b|0,c|0,52)|0;e=d&2047;switch(e|0){case 0:{d=Kyb(b|0,c|0,12)|0;f=M;if(!((d|0)==0&(f|0)==0))if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){g=d;d=f;f=-1023;while(1){h=f+-1|0;g=Kyb(g|0,d|0,1)|0;d=M;if(!((d|0)>-1|(d|0)==-1&g>>>0>4294967295)){i=h;break}else f=h}}else i=-1023;else i=-2147483648;break}case 2047:{i=(b|0)!=0|(c&1048575|0)!=0?-2147483648:2147483647;break}default:i=e+-1023|0}return i|0}function GFa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=c&2147483647;do if(d>>>0>2146435071)e=a+a;else{if(d>>>0<1048576){p[t>>3]=a*18014398509481984.0;f=k[t+4>>2]|0;g=f&2147483647;if(!g){e=a;break}h=f;i=k[t>>2]|0;j=((g>>>0)/3|0)+696219795|0}else{h=c;i=b;j=((d>>>0)/3|0)+715094163|0}k[t>>2]=0;k[t+4>>2]=j|h&-2147483648;l=+p[t>>3];m=l/a*(l*l);p[t>>3]=l*(m*(m*m)*(m*.14599619288661245+-.758397934778766)+(m*(m*1.6214297201053545+-1.8849797954337717)+1.87595182427177));g=Hyb(k[t>>2]|0,k[t+4>>2]|0,-2147483648,0)|0;f=M;k[t>>2]=g&-1073741824;k[t+4>>2]=f;m=+p[t>>3];l=a/(m*m);e=m+(l-m)/(l+(m+m))*m}while(0);return +e}function HFa(a,b){a=+a;b=b|0;return +(+MFa(a,b))}function IFa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0;c=(o[t>>2]=a,k[t>>2]|0);d=(o[t>>2]=b,k[t>>2]|0);e=c&2147483647;a:do if(e>>>0<=2139095040?(f=d&2147483647,f>>>0<=2139095040):0)if((c|0)==(d|0))g=b;else{do if(e)if(e>>>0>f>>>0|(d^c|0)<0){h=c+-1|0;break}else{h=c+1|0;break}else{if(!f){g=b;break a}h=d&-2147483648|1}while(0);g=(k[t>>2]=h,+o[t>>2])}else i=3;while(0);if((i|0)==3)g=a+b;return +g}function JFa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;e=d&2147483647;do if(!(e>>>0>2146435072|(e|0)==2146435072&c>>>0>0)){p[t>>3]=b;f=k[t>>2]|0;g=k[t+4>>2]|0;h=g&2147483647;if(!(h>>>0>2146435072|(h|0)==2146435072&f>>>0>0)){h=Iyb(c|0,d|0,63)|0;i=Iyb(f|0,g|0,63)|0;if((h|0)==(i|0)){j=a>3]=+p[e>>3];p[c>>3]=+p[f>>3];r=d;return}function LFa(a,b){a=+a;b=+b;return +(+JFa(a,b))}function MFa(a,b){a=+a;b=b|0;return +(+kFa(a,b))}function NFa(a,b){a=+a;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0,o=0,q=0.0,s=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0;c=r;r=r+48|0;d=c+16|0;e=c;p[t>>3]=a;f=k[t>>2]|0;g=k[t+4>>2]|0;h=Iyb(f|0,g|0,63)|0;i=g&2147483647;do if(i>>>0<1074752123)if((g&1048575|0)!=598523){j=(h|0)!=0;if(i>>>0<1073928573)if(j){l=a+1.5707963267341256;m=l+6.077100506506192e-11;p[b>>3]=m;p[b+8>>3]=l-m+6.077100506506192e-11;n=-1;break}else{m=a+-1.5707963267341256;l=m+-6.077100506506192e-11;p[b>>3]=l;p[b+8>>3]=m-l+-6.077100506506192e-11;n=1;break}else if(j){l=a+3.1415926534682512;m=l+1.2154201013012384e-10;p[b>>3]=m;p[b+8>>3]=l-m+1.2154201013012384e-10;n=-2;break}else{m=a+-3.1415926534682512;l=m+-1.2154201013012384e-10;p[b>>3]=l;p[b+8>>3]=m-l+-1.2154201013012384e-10;n=2;break}}else o=21;else{if(i>>>0>=1075594812){if(i>>>0<1094263291){o=21;break}if(i>>>0>2146435071){l=a-a;p[b+8>>3]=l;p[b>>3]=l;n=0;break}k[t>>2]=f;k[t+4>>2]=g&1048575|1096810496;l=+p[t>>3];m=+(~~l|0);p[d>>3]=m;q=(l-m)*16777216.0;m=+(~~q|0);p[d+8>>3]=m;l=(q-m)*16777216.0;p[d+16>>3]=l;if(l==0.0){j=1;while(1)if(+p[d+(j<<3)>>3]==0.0)j=j+-1|0;else{s=j;break}}else s=2;j=sFa(d,e,(i>>>20)+-1046|0,s+1|0,1)|0;l=+p[e>>3];m=+p[e+8>>3];if(!h){p[b>>3]=l;p[b+8>>3]=m;n=j;break}else{p[b>>3]=-l;p[b+8>>3]=-m;n=0-j|0;break}}if(i>>>0<1075183037){if((i|0)==1074977148){o=21;break}if(!h){m=a+-4.712388980202377;l=m+-1.8231301519518578e-10;p[b>>3]=l;p[b+8>>3]=m-l+-1.8231301519518578e-10;n=3;break}else{l=a+4.712388980202377;m=l+1.8231301519518578e-10;p[b>>3]=m;p[b+8>>3]=l-m+1.8231301519518578e-10;n=-3;break}}else{if((i|0)==1075388923){o=21;break}if(!h){m=a+-6.2831853069365025;l=m+-2.430840202602477e-10;p[b>>3]=l;p[b+8>>3]=m-l+-2.430840202602477e-10;n=4;break}else{l=a+6.2831853069365025;m=l+2.430840202602477e-10;p[b>>3]=m;p[b+8>>3]=l-m+2.430840202602477e-10;n=-4;break}}}while(0);if((o|0)==21){m=a*.6366197723675814+6755399441055744.0+-6755399441055744.0;o=~~m;l=a-m*1.5707963267341256;a=m*6.077100506506192e-11;q=l-a;p[b>>3]=q;p[t>>3]=q;h=Iyb(k[t>>2]|0,k[t+4>>2]|0,52)|0;e=i>>>20;if((e-(h&2047)|0)>16){u=m*6.077100506303966e-11;v=l-u;w=m*2.0222662487959506e-21-(l-v-u);u=v-w;p[b>>3]=u;p[t>>3]=u;h=Iyb(k[t>>2]|0,k[t+4>>2]|0,52)|0;if((e-(h&2047)|0)>49){x=m*2.0222662487111665e-21;y=v-x;z=m*8.4784276603689e-32-(v-y-x);x=y-z;p[b>>3]=x;A=x;B=y;C=z}else{A=u;B=v;C=w}}else{A=q;B=l;C=a}p[b+8>>3]=B-A-C;n=o}r=c;return n|0}function OFa(a){a=+a;var b=0.0;b=+oIa(a);M=+X(b)>=1.0?(b>0.0?~~+ja(+W(b/4294967296.0),4294967295.0)>>>0:~~+ha((b-+(~~b>>>0))/4294967296.0)>>>0):0;return ~~b>>>0|0}function PFa(a){a=+a;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0,i=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b>>>23&255;do if(c>>>0>149)d=a;else{e=(b|0)<0;f=e?-a:a;if(c>>>0<126){d=a*0.0;break}g=f+8388608.0+-8388608.0-f;if(!(g>.5)){h=f+g;if(!(g<=-.5))i=h;else i=h+1.0}else i=f+g+-1.0;d=e?-i:i}while(0);return +d}function QFa(a,b){a=+a;b=b|0;return +(+kFa(a,b))}function RFa(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;d=a*a;e=d*(d*d)*(d*1.58969099521155e-10+-2.5050760253406863e-08)+(d*(d*2.7557313707070068e-06+-1.984126982985795e-04)+.00833333333332249);f=d*a;if(!c)g=f*(d*e+-.16666666666666632)+a;else g=a-(f*.16666666666666632+(d*(b*.5-f*e)-b));return +g}function SFa(a,b){a=+a;b=+b;var c=0.0;if(((o[t>>2]=a,k[t>>2]|0)&2147483647)>>>0<=2139095040)if(((o[t>>2]=b,k[t>>2]|0)&2147483647)>>>0>2139095040)c=b;else c=a>b?a-b:0.0;else c=a;return +c}function TFa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0.0;c=(o[t>>2]=a,k[t>>2]|0);d=(o[t>>2]=b,k[t>>2]|0);e=c>>>23&255;f=d>>>23&255;g=c&-2147483648;h=d<<1;a:do if((h|0)!=0?!((d&2147483647)>>>0>2139095040|(e|0)==255):0){i=c<<1;if(i>>>0<=h>>>0)return +((i|0)==(h|0)?a*0.0:a);if(!e){i=c<<9;if((i|0)>-1){j=0;l=i;while(1){i=j+-1|0;l=l<<1;if((l|0)<=-1){m=i;break}else j=i}}else m=0;n=m;p=c<<1-m}else{n=e;p=c&8388607|8388608}if(!f){j=d<<9;if((j|0)>-1){l=0;i=j;while(1){j=l+-1|0;i=i<<1;if((i|0)<=-1){q=j;break}else l=j}}else q=0;r=q;s=d<<1-q}else{r=f;s=d&8388607|8388608}l=p-s|0;i=(l|0)>-1;b:do if((n|0)>(r|0)){j=i;u=l;v=n;w=p;while(1){if(j)if((w|0)==(s|0))break;else x=u;else x=w;y=x<<1;z=v+-1|0;A=y-s|0;B=(A|0)>-1;if((z|0)>(r|0)){j=B;u=A;v=z;w=y}else{C=A;D=B;E=z;F=y;break b}}G=a*0.0;break a}else{C=l;D=i;E=n;F=p}while(0);if(D)if((F|0)==(s|0)){G=a*0.0;break}else H=C;else H=F;if(H>>>0<8388608){i=E;l=H;while(1){w=l<<1;v=i+-1|0;if(w>>>0<8388608){i=v;l=w}else{I=v;J=w;break}}}else{I=E;J=H}if((I|0)>0)K=J+-8388608|I<<23;else K=J>>>(1-I|0);G=(k[t>>2]=K|g,+o[t>>2])}else L=3;while(0);if((L|0)==3){M=a*b;G=M/M}return +G}function UFa(a){a=+a;var b=0,c=0,d=0,e=0,f=0.0,g=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=Iyb(b|0,c|0,52)|0;e=d&2047;k[t>>2]=b;k[t+4>>2]=c&2147483647;a=+p[t>>3];do if(e>>>0<=1048){if(e>>>0>1023){f=+ga(+(a*2.0+1.0/(a+ +Y(+(a*a+1.0)))));break}if(e>>>0>996){g=a*a;f=+nHa(a+g/(+Y(+(g+1.0))+1.0))}else f=a}else f=+ga(+a)+.6931471805599453;while(0);return +((c|0)<0?-f:f)}function VFa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=(c|0)<0;do if(d|c>>>0<1048576){if((b|0)==0&(c&2147483647|0)==0){e=-1.0/(a*a);break}if(d){e=(a-a)/0.0;break}else{p[t>>3]=a*18014398509481984.0;f=k[t+4>>2]|0;g=k[t>>2]|0;h=f;i=f;j=-1077;l=9;break}}else if(c>>>0<=2146435071)if((b|0)==0&0==0&(c|0)==1072693248)e=0.0;else{g=b;h=c;i=c;j=-1023;l=9}else e=a;while(0);if((l|0)==9){l=i+614242|0;k[t>>2]=g;k[t+4>>2]=(l&1048575)+1072079006;a=+p[t>>3]+-1.0;m=a*(a*.5);n=a/(a+2.0);o=n*n;q=o*o;p[t>>3]=a-m;g=k[t+4>>2]|0;k[t>>2]=0;k[t+4>>2]=g;r=+p[t>>3];s=n*(m+(q*(q*(q*.15313837699209373+.22222198432149784)+.3999999999940942)+o*(q*(q*(q*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))+(a-r-m);m=r*.4342944818781689;a=+(j+(l>>>20)|0);q=a*.30102999566361177;o=q+m;e=o+(m+(q-o)+(s*.4342944818781689+(a*3.694239077158931e-13+(r+s)*2.5082946711645275e-11)))}return +e}function WFa(a){a=+a;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=(b|0)<0?-.5:.5;d=b&2147483647;e=(k[t>>2]=d,+o[t>>2]);do if(d>>>0<1118925335){f=+fGa(e);if(d>>>0>=1065353216){g=c*(f+f/(f+1.0));break}if(d>>>0<964689920)g=a;else g=c*(f*2.0-f*f/(f+1.0))}else g=c*2.0*+PHa(e);while(0);return +g}function XFa(a,b){a=+a;b=+b;var c=0;c=(o[t>>2]=a,k[t>>2]|0);return +(k[t>>2]=(o[t>>2]=b,k[t>>2]|0)&-2147483648|c&2147483647,+o[t>>2])}function YFa(a,b){a=+a;b=b|0;var c=0,d=0,e=0,f=0.0,g=0,h=0.0,i=0.0,j=0.0,l=0.0,m=0,n=0.0,o=0.0,q=0.0,r=0.0,s=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;k[b>>2]=1;e=d&2147483647;do if(e>>>0>2146435071)f=a*a;else{g=(d|0)<0;if(e>>>0<999292928){if(g){k[b>>2]=-1;h=-a}else h=a;f=-+ga(+h);break}if(g){i=-a;j=a*-.5;l=(j-+W(+j))*2.0;m=(~~(l*4.0)+1|0)/2|0;j=(l-+(m|0)*.5)*3.141592653589793;switch(m|0){case 3:{n=-+QGa(j,0.0);break}case 1:{n=+QGa(j,0.0);break}case 2:{n=+RFa(-j,0.0,0);break}default:n=+RFa(j,0.0,0)}if(n==0.0){f=1.0/(a-a);break}if(n>0.0){k[b>>2]=-1;o=n}else o=-n;q=i;r=+ga(+(3.141592653589793/(o*i)))}else{q=a;r=0.0}a:do if((d|0)<1072693248)if((d|0)<-1073741824)switch(d|0){case -1074790400:{s=20;break a;break}default:{s=21;break a}}else switch(d|0){case -1073741824:{s=20;break a;break}default:{s=21;break a}}else if((d|0)<1073741824)switch(d|0){case 1072693248:{s=20;break a;break}default:{s=21;break a}}else switch(d|0){case 1073741824:{s=20;break a;break}default:{s=21;break a}}while(0);if((s|0)==20)if(!c)u=0.0;else s=21;b:do if((s|0)==21)if(e>>>0<1073741824){do if(e>>>0<1072483533){i=-+ga(+q);if(e>>>0<=1072130371)if(e>>>0>1070442080){v=i;w=q+-.46163214496836225;s=30}else{x=i;y=q;s=31}else{z=1.0;A=i;s=29}}else if(e>>>0<=1073460418)if(e>>>0>1072936131){v=0.0;w=q+-1.4616321449683622;s=30;break}else{x=0.0;y=q+-1.0;s=31;break}else{z=2.0;A=0.0;s=29}while(0);if((s|0)==29){i=z-q;j=i*i;u=A+(i*(j*(j*(j*(j*(j*2.5214456545125733e-05+2.2086279071390839e-04)+1.1927076318336207e-03)+.007385550860814029)+.06735230105312927)+.07721566490153287)+j*(j*(j*(j*(j*(j*4.4864094961891516e-05+1.0801156724758394e-04)+5.100697921535113e-04)+2.8905138367341563e-03)+.020580808432516733)+.3224670334241136)-i*.5);break}else if((s|0)==30){i=w*w;j=w*i;u=v+(i*(j*(j*(j*(j*3.1563207090362595e-04+-1.4034646998923284e-03)+.006100538702462913)+-.032788541075985965)+.48383612272381005)-(-3.638676997039505e-18-j*(j*(j*(j*(.000881081882437654-j*3.1275416837512086e-04)+-3.6845201678113826e-03)+.01797067508118204)+-.1475877229945939+w*(j*(j*(j*(j*3.355291926355191e-04+-5.385953053567405e-04)+2.2596478090061247e-03)+-.010314224129834144)+.06462494023913339)))+-.12148629053584961);break}else if((s|0)==31){u=x+(y*(y*(y*(y*(y*(y*.013381091853678766+.22896372806469245)+.9777175279633727)+1.4549225013723477)+.6328270640250934)+-.07721566490153287)/(y*(y*(y*(y*(y*.003217092422824239+.10422264559336913)+.7692851504566728)+2.128489763798934)+2.4559779371304113)+1.0)-y*.5);break}}else{if(e>>>0>=1075838976){j=+ga(+q);if(e>>>0<1133510656){i=1.0/q;l=i*i;u=(q+-.5)*(j+-1.0)+(i*(l*(l*(l*(l*(8.363399189962821e-04-l*1.6309293409657527e-03)+-.00059518755745034)+7.936505586430196e-04)+-2.7777777772877554e-03)+.08333333333333297)+.4189385332046727);break}else{u=q*(j+-1.0);break}}m=~~q;j=q-+(m|0);l=j*.5+j*(j*(j*(j*(j*(j*(j*3.194753265841009e-05+1.8402845140733772e-03)+.02664227030336386)+.14635047265246445)+.325778796408931)+.21498241596060885)+-.07721566490153287)/(j*(j*(j*(j*(j*(j*7.326684307446256e-06+7.779424963818936e-04)+.01864591917156529)+.17193386563280308)+.7219355475671381)+1.3920053346762105)+1.0);switch(m|0){case 7:{B=j+6.0;s=35;break}case 6:{B=1.0;s=35;break}case 5:{C=1.0;s=36;break}case 4:{D=1.0;s=37;break}case 3:{E=1.0;break}default:{u=l;break b}}if((s|0)==35){C=(j+5.0)*B;s=36}if((s|0)==36){D=(j+4.0)*C;s=37}if((s|0)==37)E=(j+3.0)*D;u=l+ +ga(+((j+2.0)*E));break}while(0);f=g?r-u:u}while(0);return +f}function ZFa(a){a=+a;return +(+pHa(a))}function _Fa(a,b){a=+a;b=+b;var c=0,d=0.0;p[t>>3]=a;c=k[t+4>>2]&2147483647;if(!(c>>>0>2146435072|(c|0)==2146435072&(k[t>>2]|0)>>>0>0)){p[t>>3]=b;c=k[t+4>>2]&2147483647;if(c>>>0>2146435072|(c|0)==2146435072&(k[t>>2]|0)>>>0>0)d=b;else d=a>b?a-b:0.0}else d=a;return +d}function $Fa(a){a=+a;var b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0;b=r;r=r+16|0;c=b;d=+FHa(a,c);e=+p[c>>3];do if(+X(+e)<16.0)if(d!=0.0){f=+DHa(d*3.321928094887362);g=f*+p[10744+(~~e+15<<3)>>3];break}else{g=+p[10744+(~~e+15<<3)>>3];break}else g=+Z(10.0,+a);while(0);r=b;return +g}function aGa(a){a=+a;var b=0.0;b=a*a;a=b*b;return +(1.0-b*.499999997251031+a*.04166662332373906+b*a*(b*2.439044879627741e-05+-.001388676377460993))}function bGa(a){a=+a;return +(+YFa(a,48028))}function cGa(a,b){a=+a;b=b|0;var c=0,d=0,e=0.0;c=r;r=r+16|0;d=c;e=+FHa(a,d);p[b>>3]=+p[d>>3];r=c;return +e}function dGa(a){a=+a;var b=0,c=0,d=0.0,e=0,f=0,g=0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=(b|0)<0;do if(b>>>0<8388608|c){if(!(b&2147483647)){d=-1.0/(a*a);break}if(c){d=(a-a)/0.0;break}else{e=(o[t>>2]=a*33554432.0,k[t>>2]|0);f=-152;g=9;break}}else if(b>>>0<=2139095039)if((b|0)==1065353216)d=0.0;else{e=b;f=-127;g=9}else d=a;while(0);if((g|0)==9){g=e+4913933|0;a=(k[t>>2]=(g&8388607)+1060439283,+o[t>>2])+-1.0;h=a/(a+2.0);i=h*h;j=i*i;l=a*(a*.5);m=(k[t>>2]=(o[t>>2]=a-l,k[t>>2]|0)&-4096,+o[t>>2]);n=h*(l+(i*(j*.2849878668785095+.6666666269302368)+j*(j*.24279078841209412+.40000972151756287)))+(a-m-l);l=+(f+(g>>>23)|0);d=l*.3010292053222656+(m*.434326171875+(n*.434326171875+(l*7.903415166765626e-07-(m+n)*3.168997136526741e-05)))}return +d}function eGa(a){a=+a;var b=0.0,c=0.0;b=a*a;c=b*a;return +(c*(b*b)*(b*2.718311493989822e-06+-1.9839334836096632e-04)+(c*(b*.008333329385889463+-.16666666641626524)+a))}function fGa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0,g=0.0,h=0.0,i=0,j=0.0,l=0,m=0.0,n=0.0,p=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b&2147483647;d=b>>>31;do if(c>>>0>1100331075)if(c>>>0<=2139095040)if(!d)if(a>88.7216796875)e=a*1701411834604692317316873.0e14;else f=11;else e=-1.0;else e=a;else{if(c>>>0<=1051816472)if(c>>>0<855638016){e=a;break}else{g=a;h=0.0;i=0;f=14;break}if(c>>>0<1065686418)if(!d){j=a+-.6931381225585938;l=1;m=9.05800061445916e-06;f=12;break}else{j=a+.6931381225585938;l=-1;m=-9.05800061445916e-06;f=12;break}else f=11}while(0);if((f|0)==11){c=~~(a*1.4426950216293335+((d|0)!=0?-.5:.5));n=+(c|0);j=a-n*.6931381225585938;l=c;m=n*9.05800061445916e-06;f=12}if((f|0)==12){n=j-m;g=n;h=j-n-m;i=l;f=14}a:do if((f|0)==14){m=g*.5;n=g*m;j=n*(n*1.5807170420885086e-03+-.03333321213722229)+1.0;a=3.0-m*j;m=n*((j-a)/(6.0-g*a));if(!i){e=g-(g*m-n);break}a=g*(m-h)-h-n;switch(i|0){case -1:{e=(g-a)*.5+-.5;break a;break}case 1:{if(g<-.25){e=(a-(g+.5))*-2.0;break a}else{e=(g-a)*2.0+1.0;break a}break}default:{n=(k[t>>2]=(i<<23)+1065353216,+o[t>>2]);if(i>>>0>56){m=g-a+1.0;e=((i|0)==128?m*2.0*1701411834604692317316873.0e14:n*m)+-1.0;break a}l=127-i<<23;if((i|0)<23)p=1.0-(k[t>>2]=l,+o[t>>2])+(g-a);else p=g-((k[t>>2]=l,+o[t>>2])+a)+1.0;e=n*p;break a}}}while(0);return +e}function gGa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0,n=0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;p[t>>3]=b;e=k[t>>2]|0;f=k[t+4>>2]|0;g=d&2147483647;a:do if(!(g>>>0>2146435072|(g|0)==2146435072&c>>>0>0)?(h=f&2147483647,!(h>>>0>2146435072|(h|0)==2146435072&e>>>0>0)):0)if((c|0)==(e|0)&(d|0)==(f|0))i=b;else{do if(!((c|0)==0&(g|0)==0))if(g>>>0>h>>>0|(g|0)==(h|0)&c>>>0>e>>>0|(f^d|0)<0){j=Hyb(c|0,d|0,-1,-1)|0;l=M;m=j;break}else{j=Hyb(c|0,d|0,1,0)|0;l=M;m=j;break}else{if((e|0)==0&(h|0)==0){i=b;break a}l=f&-2147483648;m=1}while(0);k[t>>2]=m;k[t+4>>2]=l;i=+p[t>>3]}else n=3;while(0);if((n|0)==3)i=a+b;return +i}function hGa(a){a=+a;var b=0,c=0,d=0.0,e=0,f=0,g=0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b&2147483647;do if(c>>>0>2139095039)d=a+a;else{if(c>>>0<8388608){if(!c){d=a;break}e=(o[t>>2]=a*16777216.0,k[t>>2]|0);f=(((e&2147483647)>>>0)/3|0)+642849266|0;g=e}else{f=((c>>>0)/3|0)+709958130|0;g=b}h=(k[t>>2]=g&-2147483648|f,+o[t>>2]);i=h*(h*h);j=a;l=j+j;m=h*(l+i)/(i+(j+i));i=m*(m*m);d=m*(l+i)/(i+(j+i))}while(0);return +d}function iGa(a){a=+a;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b&2147483647;do if(c>>>0>1123811328)if(!(b>>>0>1124073471&(b|0)>-1))if((b|0)<0&b>>>0>3272998911){d=0.0;break}else{e=7;break}else{d=a*1701411834604692317316873.0e14;break}else if(c>>>0<855638017)d=a+1.0;else e=7;while(0);if((e|0)==7){f=a+786432.0;e=(o[t>>2]=f,k[t>>2]|0)+8|0;c=Kyb((e>>>4)+1023|0,0,52)|0;b=M;g=a-(f+-786432.0);f=+p[10224+((e&15)<<3)>>3];a=g*f;k[t>>2]=c;k[t+4>>2]=b;d=+p[t>>3]*(f+(g*.24022650718688965+.6931471824645996)*a+(g*.009618354961276054+.055505409836769104)*(g*g*a))}return +d}function jGa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,u=0.0,v=0.0,w=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;p[t>>3]=b;e=k[t>>2]|0;f=d&2147483647;d=k[t+4>>2]&2147483647;g=f>>>0>>0|(f|0)==(d|0)&c>>>0>>0;h=g?e:c;i=g?d:f;j=g?c:e;e=g?f:d;d=Iyb(h|0,i|0,52)|0;f=Iyb(j|0,e|0,52)|0;k[t>>2]=h;k[t+4>>2]=i;b=+p[t>>3];k[t>>2]=j;k[t+4>>2]=e;a=+p[t>>3];do if((f|0)!=2047)if((j|0)==0&(e|0)==0|(d|0)==2047)l=b;else{if((d-f|0)>64){l=b+a;break}if(d>>>0<=1533)if(f>>>0<573){m=b*5260135901548373507240989.0e186;n=a*5260135901548373507240989.0e186;o=1.90109156629516e-211}else{m=b;n=a;o=1.0}else{m=b*1.90109156629516e-211;n=a*1.90109156629516e-211;o=5260135901548373507240989.0e186}q=m*134217729.0;r=q+(m-q);q=m-r;s=m*m;u=n*134217729.0;v=u+(n-u);u=n-v;w=n*n;l=o*+Y(+(s+(w+(u*u+(v*v-w+v*2.0*u)+(q*q+(r*r-s+r*2.0*q))))))}else l=a;while(0);return +l}function kGa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0.0,g=0.0,h=0;p[t>>3]=a;c=k[t+4>>2]&2147483647;do if(!(c>>>0>2146435072|(c|0)==2146435072&(k[t>>2]|0)>>>0>0)?(p[t>>3]=b,d=k[t+4>>2]|0,e=d&2147483647,!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){e=d&2146435072;if(!(e>>>0<2146435072|(e|0)==2146435072&0<0))if(b>0.0){f=a*b;break}else{f=a/-b;break}if(+MGa(b)!=b){g=b-b;f=g/g;break}if(b>65.0e3){f=+kFa(a,65e3);break}if(b<-65.0e3){f=+kFa(a,-65e3);break}else{f=+kFa(a,~~b);break}}else h=3;while(0);if((h|0)==3)f=a*b;return +f}function lGa(a){a=+a;return +(+JGa(a))}function mGa(a){a=+a;var b=0.0;b=+JHa(a);M=+X(b)>=1.0?(b>0.0?~~+ja(+W(b/4294967296.0),4294967295.0)>>>0:~~+ha((b-+(~~b>>>0))/4294967296.0)>>>0):0;return ~~b>>>0|0}function nGa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=Iyb(k[t>>2]|0,b|0,52)|0;d=c&2047;do if(d>>>0>1074)e=a;else{c=(b|0)<0;f=c?-a:a;if(d>>>0<1022){e=a*0.0;break}g=f+4503599627370496.0+-4503599627370496.0-f;if(!(g>.5)){h=f+g;if(!(g<=-.5))i=h;else i=h+1.0}else i=f+g+-1.0;e=c?-i:i}while(0);return +e}function oGa(a,b){a=+a;b=b|0;return +(+wFa(a,b))}function pGa(a){a=+a;var b=0,c=0,d=0.0,e=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b&2147483647;a=(k[t>>2]=c,+o[t>>2]);if(c>>>0<1056964608)if(c>>>0<796917760)d=a;else{e=a*2.0;d=+qGa(e+a*e/(1.0-a))*.5}else d=+qGa(a/(1.0-a)*2.0)*.5;return +((b|0)<0?-d:d)}function qGa(a){a=+a;var b=0,c=0.0,d=0.0,e=0.0,f=0.0,g=0,h=0.0,i=0,j=0.0,l=0.0;b=(o[t>>2]=a,k[t>>2]|0);do if(b>>>0<1054086096|(b|0)<0)if(b>>>0<=3212836863){if(b<<1>>>0<1728053248){c=a;break}if(b>>>0<3197498906){d=0.0;e=a;f=0.0;g=11;break}else{g=8;break}}else{if(a==-1.0){c=-C;break}c=(a-a)/0.0;break}else if(b>>>0>2139095039)c=a;else g=8;while(0);if((g|0)==8){h=a+1.0;b=(o[t>>2]=h,k[t>>2]|0)+4913933|0;i=(b>>>23)+-127|0;if((i|0)<25)j=((i|0)>1?1.0-(h-a):a-(h+-1.0))/h;else j=0.0;d=j;e=(k[t>>2]=(b&8388607)+1060439283,+o[t>>2])+-1.0;f=+(i|0);g=11}if((g|0)==11){j=e/(e+2.0);h=j*j;a=h*h;l=e*(e*.5);c=f*.6931381225585938+(e+(d+f*9.05800061445916e-06+j*(l+(h*(a*.2849878668785095+.6666666269302368)+a*(a*.24279078841209412+.40000972151756287)))-l))}return +c}function rGa(a,b){a=+a;b=+b;return +(+gGa(a,b))}function sGa(a,b,c){a=+a;b=+b;c=+c;return +(+kf(+a,+b,+c))}function tGa(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0.0,h=0,i=0,j=0,l=0.0,m=0.0,n=0,p=0.0,q=0.0,r=0.0,s=0.0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0.0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0;c=(o[t>>2]=b,k[t>>2]|0);d=c>>>31;e=c&2147483647;do if(e>>>0>2139095040)f=b;else{if(!a){f=+RGa(b);break}if((a|0)<0){g=-b;h=~a;i=d^1}else{g=b;h=a+-1|0;i=d}if(!h){f=+mIa(g);break}j=i&a;l=+X(+g);a:do if((c|0)<0)if((c|0)<-8388608)switch(c|0){case -2147483648:{m=0.0;break a;break}default:{n=10;break a}}else switch(c|0){case -8388608:{m=0.0;break a;break}default:{n=10;break a}}else if((c|0)<2139095040)switch(c|0){case 0:{m=0.0;break a;break}default:{n=10;break a}}else switch(c|0){case 2139095040:{m=0.0;break a;break}default:{n=10;break a}}while(0);b:do if((n|0)==10){p=+(h|0);if(p0){s=q;u=r;v=0}else{m=r;break}while(1){v=v+1|0;r=u*(+(v|0)*2.0/l)-s;if((v|0)==(h|0)){m=r;break b}else{q=u;u=r;s=q}}}if(e>>>0<897581056){q=l*.5;w=((h|0)>8?8:h)+1|0;if((w|0)<2){x=1.0;y=q}else{r=1.0;z=q;A=2;while(1){B=r*+(A|0);C=q*z;if((A|0)<(w|0)){r=B;z=C;A=A+1|0}else{x=B;y=C;break}}}m=y/x;break}z=p+1.0;r=z*2.0/l;q=2.0/l;C=r+q;B=r*C+-1.0;if(B<1.0e4){A=1;D=r;E=B;B=C;while(1){w=A+1|0;B=q+B;C=E*B-D;if(!(C<1.0e4)){F=w;G=A;break}else{H=E;A=w;E=C;D=H}}if((G|0)>-2){I=F;J=0.0;n=20}else K=0.0}else{I=1;J=0.0;n=20}if((n|0)==20)while(1){n=0;D=1.0/((z+ +(I|0))*2.0/l-J);if((I|0)>0){I=I+-1|0;J=D;n=20}else{K=D;break}}A=(h|0)>0;if(z*+ga(+(+X(+r)))<88.7216796875)if(A){D=K;E=1.0;w=h;while(1){B=+(w|0)*2.0*E/l-D;if((w|0)>1){q=E;E=B;w=w+-1|0;D=q}else{L=E;M=B;N=K;break}}}else{L=K;M=1.0;N=K}else if(A){E=K;D=1.0;w=h;r=K;while(1){z=+(w|0)*2.0*D/l-E;O=z>1152921504606846976.0;B=O?D/z:D;q=O?1.0:z;p=O?r/z:r;if((w|0)>1){E=B;D=q;w=w+-1|0;r=p}else{L=B;M=q;N=p;break}}}else{L=K;M=1.0;N=K}r=+RGa(l);D=+mIa(l);w=!(+X(+r)>=+X(+D));m=w?N*D/L:N*r/M}while(0);f=(j|0)!=0?-m:m}while(0);return +f}function uGa(a,b){a=a|0;b=+b;var c=0,d=0,e=0.0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,p=0.0;c=(o[t>>2]=b,k[t>>2]|0);d=c&2147483647;do if(d>>>0<=2139095040)if(!((c|0)<0&(d|0)!=0))if((d|0)==2139095040)e=0.0;else{if(!a){e=+SGa(b);break}f=(a|0)<0;g=f?a&1:0;h=f?~a:a+-1|0;if(!h){i=+nIa(b);e=(g|0)!=0?-i:i;break}i=+SGa(b);j=+nIa(b);if((h|0)>0&((o[t>>2]=j,k[t>>2]|0)|0)!=-8388608){l=i;i=j;f=0;while(1){f=f+1|0;m=i*(+(f|0)*2.0/b)-l;if(!((f|0)<(h|0)&((o[t>>2]=m,k[t>>2]|0)|0)!=-8388608)){n=m;break}else{p=i;i=m;l=p}}}else n=j;e=(g|0)!=0?-n:n}else e=B;else e=b;while(0);return +e}function vGa(a){a=+a;return +(+XGa(a))}function wGa(a,b){a=+a;b=+b;var c=0,d=0,e=0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;p[t>>3]=b;e=k[t+4>>2]&-2147483648|d&2147483647;k[t>>2]=c;k[t+4>>2]=e;return +(+p[t>>3])}function xGa(a,b){a=+a;b=+b;var c=0,d=0.0;c=r;r=r+16|0;d=+THa(a,b,c);r=c;return +d}function yGa(a){a=+a;var b=0,c=0.0;b=ITa(32)|0;c=+MGa(a);return ~~c|0}function zGa(a,b){a=+a;b=+b;var c=0,d=0,e=0.0;c=(o[t>>2]=a,k[t>>2]|0);do if((c&2147483647)>>>0<=2139095040){d=(o[t>>2]=b,k[t>>2]|0);if((d&2147483647)>>>0<=2139095040)if((d^c|0)<0){e=(c|0)<0?b:a;break}else{e=a>3];while(1){c=c+8|0;f=e*a+ +p[c>>3];d=d+-1|0;if(!d){g=f;break}else e=f}return +g}function FGa(a,b,c){a=+a;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0;d=c+-1|0;c=b;e=+p[b>>3]+a;while(1){c=c+8|0;f=e*a+ +p[c>>3];d=d+-1|0;if(!d){g=f;break}else e=f}return +g}function GGa(a,b){a=+a;b=b|0;return +(+wFa(a,b))}function HGa(a){a=+a;var b=0;p[t>>3]=a;b=k[t+4>>2]&2146435072;return (b>>>0<2146435072|(b|0)==2146435072&0<0)&1|0}function IGa(a){a=+a;return +(+fa(+(a+-1416.0996898839683))*2247116418577894884661631.0e283*2247116418577894884661631.0e283)}function JGa(a){a=+a;var b=0,c=0,d=0,e=0,f=0,g=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=Iyb(b|0,c|0,52)|0;e=(d&2047)+-1011|0;if((e|0)<=63?(d=(e|0)<12,f=Iyb(-1,-1,e|0)|0,e=d?-1:f,f=d?2147483647:M,!((e&b|0)==0&(f&c|0)==0)):0){k[t>>2]=b&~e;k[t+4>>2]=c&~f;g=+p[t>>3]}else g=a;return +g}function KGa(a){a=+a;var b=0,c=0.0;p[t>>3]=a;b=k[t+4>>2]&2146435072;do if(b>>>0<2146435072|(b|0)==2146435072&0<0)if(a==0.0){c=-1.0/(a*a);break}else{c=+(VHa(a)|0);break}else c=a*a;while(0);return +c}function LGa(a){a=+a;var b=0,c=0,d=0.0,e=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=b&2147483647;k[t>>2]=k[t>>2];k[t+4>>2]=c;a=+p[t>>3];do if(c>>>0>1071748074)if(c>>>0>1077149696){d=1.0-0.0/a;break}else{d=1.0-2.0/(+kIa(a*2.0)+2.0);break}else{if(c>>>0>1070618798){e=+kIa(a*2.0);d=e/(e+2.0);break}if(c>>>0>1048575){e=+kIa(a*-2.0);d=-e/(e+2.0)}else d=a}while(0);return +((b|0)<0?-d:d)}function MGa(a){a=+a;var b=0,c=0,d=0.0,e=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=b&2146435072;if(!(c>>>0>1126170624|(c|0)==1126170624&0>0)){c=(b|0)<0;d=c?a+-4503599627370496.0+4503599627370496.0:a+4503599627370496.0+-4503599627370496.0;if(d==0.0)e=c?-0.0:0.0;else e=d}else e=a;return +e}function NGa(a){a=+a;var b=0;b=iHa(a)|0;return b|0}function OGa(a,b){a=+a;b=+b;var c=0,d=0.0,e=0.0,f=0;do if(((o[t>>2]=a,k[t>>2]|0)&2147483647)>>>0<=2139095040?(c=(o[t>>2]=b,k[t>>2]|0),(c&2147483647)>>>0<=2139095040):0){if((c&2139095040)>>>0>=2139095040)if(b>0.0){d=a*b;break}else{d=a/-b;break}if(+oIa(b)!=b){e=b-b;d=e/e;break}if(b>65.0e3){d=+wFa(a,65e3);break}if(b<-65.0e3){d=+wFa(a,-65e3);break}else{d=+wFa(a,~~b);break}}else f=3;while(0);if((f|0)==3)d=a*b;return +d}function PGa(a,b){a=+a;b=+b;return +(+gIa(a,b))}function QGa(a,b){a=+a;b=+b;var c=0.0,d=0.0,e=0.0,f=0.0;c=a*a;d=c*c;e=c*.5;f=1.0-e;return +(f+(1.0-f-e+(c*(c*(c*(c*2.480158728947673e-05+-.001388888888887411)+.0416666666666666)+d*d*(c*(2.087572321298175e-09-c*1.1359647557788195e-11)+-2.7557314351390663e-07))-a*b)))}function RGa(a){a=+a;var b=0,c=0.0,d=0.0,e=0.0,f=0.0;b=(o[t>>2]=a,k[t>>2]|0)&2147483647;do if(b>>>0<=2139095039){c=+X(+a);if(b>>>0>1073741823){d=+AWa(b,c,0);break}if(b>>>0>973078527){e=c*c;f=c*.5;d=(f+1.0)*(1.0-f)+e*(e*(e*(e*(1.8295404515811242e-06-e*4.618327054117799e-09)+-1.8997929873876274e-04)+.015625)/(e*(e*(e*(e*1.1661400733942173e-09+5.135465244165971e-07)+1.1692678526742384e-04)+.015619102865457535)+1.0));break}else{d=1.0-(b>>>0>562036735?c*(c*.25):c);break}}else d=1.0/(a*a);while(0);return +d}function SGa(a){a=+a;var b=0,c=0.0,d=0.0;b=(o[t>>2]=a,k[t>>2]|0);do if(b&2147483647)if((b|0)>=0){if(b>>>0>2139095039){c=1.0/a;break}if(b>>>0>1073741823){c=+AWa(b,a,1);break}if(b>>>0>956301311){d=a*a;c=(d*(d*(d*(d*(d*(1.955901396399895e-08-d*3.9820518410449424e-11)+-3.8140706237754785e-06)+3.4745343145914376e-04)+-.013818567618727684)+.17666645348072052)+-.07380429655313492)/(d*(d*(d*(d*4.4111031494153963e-10+2.5915085188898956e-07)+7.600686512887478e-05)+.012730483897030354)+1.0)+ +RGa(a)*+ga(+a)*.6366197466850281;break}else{c=+ga(+a)*.6366197466850281+-.07380429655313492;break}}else c=B;else c=-C;while(0);return +c}function TGa(a,b,c){a=+a;b=+b;c=+c;var d=0,e=0,f=0.0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0;d=r;r=r+16|0;e=d;f=a*b;b=c;a=f+b;p[t>>3]=a;g=k[t>>2]|0;h=Iyb(g|0,k[t+4>>2]|0,52)|0;i=h&2047;if(!(a-f==b|((g&536870911|0)!=268435456|0!=0|(i|0)==2047))?(JTa()|0)==0:0){CTa(3072)|0;p[e>>3]=f;j=b+ +p[e>>3];CTa(0)|0;if(a==j){p[t>>3]=j;g=Hyb(k[t>>2]|0,k[t+4>>2]|0,1,0)|0;h=M;k[t>>2]=g;k[t+4>>2]=h;l=+p[t>>3]}else l=j;m=l}else if((i+-874|0)>>>0<23?(ITa(32)|0)!=0:0){o[e>>2]=c;c=f+ +o[e>>2];(ITa(32)|0)==0;m=c}else m=a;r=d;return +m}function UGa(a,b){a=+a;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0,j=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;e=Iyb(c|0,d|0,52)|0;f=e&2047;switch(f|0){case 0:{if(a!=0.0){g=+UGa(a*18446744073709551616.0,b);h=g;i=(k[b>>2]|0)+-64|0}else{h=a;i=0}k[b>>2]=i;j=h;break}case 2047:{j=a;break}default:{k[b>>2]=f+-1022;k[t>>2]=c;k[t+4>>2]=d&-2146435073|1071644672;j=+p[t>>3]}}return +j}function VGa(a){a=+a;var b=0,c=0,d=0.0,e=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b&2147483647;a=(k[t>>2]=c,+o[t>>2]);do if(c>>>0<=1166016511){if(c>>>0>1073741823){d=+ga(+(a*2.0+1.0/(a+ +Y(+(a*a+1.0)))));break}if(c>>>0>964689919){e=a*a;d=+qGa(a+e/(+Y(+(e+1.0))+1.0))}else d=a}else d=+ga(+a)+.6931471824645996;while(0);return +((b|0)<0?-d:d)}function WGa(a,b){a=+a;b=+b;return +(+NHa(a,b))}function XGa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,u=0.0,v=0.0,w=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=b&2147483647;d=Iyb(k[t>>2]|0,b|0,63)|0;do if(c>>>0>2146435071)e=a+C;else{if(c>>>0<1016070144){e=1.0/a;break}f=+W(+a);if(f==a){if(d){e=B;break}if(a<=23.0){e=+p[10352+(~~a+-1<<3)>>3];break}}b=(d|0)!=0;if(c>>>0>1080492031)if(b){g=f*.5==+W(+(a*.5));e=g?0.0:-0.0;break}else{e=a*8988465674311579538646525.0e283;break}f=b?-a:a;h=f+5.52468004077673;i=f>5.52468004077673?h-f+-5.52468004077673:h+-5.52468004077673-f;j=f+-.5;if(f<8.0){l=0.0;b=12;m=0.0;while(1){n=f*m+ +p[10536+(b<<3)>>3];o=f*l+ +p[10640+(b<<3)>>3];if((b|0)>0){l=o;b=b+-1|0;m=n}else{q=o;r=n;break}}}else{m=0.0;b=0;l=0.0;while(1){n=l/f+ +p[10536+(b<<3)>>3];o=m/f+ +p[10640+(b<<3)>>3];b=b+1|0;if((b|0)==13){q=o;r=n;break}else{m=o;l=n}}}l=r/q*+fa(+-h);if(a<0.0){m=f*.5;n=(m-+W(+m))*2.0;b=(~~(n*4.0)+1|0)/2|0;m=(n-+(b|0)*.5)*3.141592653589793;switch(b|0){case 3:{s=-+QGa(m,0.0);break}case 1:{s=+QGa(m,0.0);break}case 2:{s=+RFa(-m,0.0,0);break}default:s=+RFa(m,0.0,0)}u=-i;v=-3.141592653589793/(l*(f*s));w=-j}else{u=i;v=l;w=j}l=+Z(+h,+(w*.5));e=l*((v+u*6.02468004077673*v/h)*l)}while(0);return +e}function YGa(a){a=+a;var b=0,c=0.0;p[t>>3]=a;b=k[t+4>>2]&2146435072;do if(b>>>0<2146435072|(b|0)==2146435072&0<0)if(a==0.0){c=-1.0/(a*a);break}else{c=+(FFa(a)|0);break}else c=a*a;while(0);return +c}function ZGa(a,b){a=+a;b=+b;return +(+jGa(a,b))}function _Ga(a,b,c){a=+a;b=+b;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0;d=(o[t>>2]=a,k[t>>2]|0);e=(o[t>>2]=b,k[t>>2]|0);f=d>>>23&255;g=e>>>23&255;h=d>>>31;i=e>>>31;k[c>>2]=0;j=e&2147483647;do if((j|0)!=0?!(j>>>0>2139095040|(f|0)==255):0)if(!(d&2147483647))l=a;else{if(!f){m=d<<9;if((m|0)>-1){n=0;p=m;while(1){m=n+-1|0;p=p<<1;if((p|0)<=-1){q=m;break}else n=m}}else q=0;r=q;s=d<<1-q}else{r=f;s=d&8388607|8388608}if(!g){n=e<<9;if((n|0)>-1){p=0;m=n;while(1){n=p+-1|0;m=m<<1;if((m|0)<=-1){u=n;break}else p=n}}else u=0;v=u;w=e<<1-u}else{v=g;w=e&8388607|8388608}if((r|0)<(v|0))if((r+1|0)==(v|0)){x=r;y=0;z=s;A=22}else{l=a;break}else{p=s-w|0;m=p>>>31^1;n=(p|0)>-1?p:s;if((r|0)>(v|0)){p=m;B=n;C=r;while(1){D=B<<1;C=C+-1|0;E=D-w|0;F=(E>>>31|p<<1)^1;G=(E|0)>-1?E:D;if((C|0)<=(v|0)){H=F;I=G;J=v;break}else{p=F;B=G}}}else{H=m;I=n;J=r}if(I)if(I>>>0<8388608){B=J;p=I;while(1){C=p<<1;G=B+-1|0;if(C>>>0<8388608){B=G;p=C}else{x=G;y=H;z=C;A=22;break}}}else{x=J;y=H;z=I;A=22}else{K=-30;L=H;M=0;A=24}}if((A|0)==22)if((x|0)>0){N=x;O=y;P=z+-8388608|x<<23}else{K=x;L=y;M=z;A=24}if((A|0)==24){N=K;O=L;P=M>>>(1-K|0)}Q=(k[t>>2]=P,+o[t>>2]);R=(i|0)==0?b:-b;if((N|0)!=(v|0))if((N+1|0)==(v|0)){S=Q*2.0;if(!(S>R)?(O&1|0)==0|S!=R:0){T=Q;U=O}else A=29}else{T=Q;U=O}else A=29;if((A|0)==29){T=Q-R;U=O+1|0}p=U&2147483647;k[c>>2]=(h|0)!=(i|0)?0-p|0:p;l=(h|0)!=0?-T:T}else A=3;while(0);if((A|0)==3){T=a*b;l=T/T}return +l}function $Ga(a){a=+a;var b=0,c=0,d=0,e=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=(b>>>23&255)+-118|0;if((c|0)<=31?(d=(c|0)<9?2147483647:-1>>>c,(d&b|0)!=0):0)e=(k[t>>2]=b&~d,+o[t>>2]);else e=a;return +e}function aHa(a){a=+a;var b=0,c=0.0,d=0.0;b=(o[t>>2]=a,k[t>>2]|0)&2147483647;do if(b>>>0>=1073741824)if(b>>>0<1166016512){c=+ga(+(a*2.0-1.0/(+Y(+(a*a+-1.0))+a)));break}else{c=+ga(+a)+.6931471824645996;break}else{d=a+-1.0;c=+qGa(d+ +Y(+(d*d+d*2.0)))}while(0);return +c}function bHa(a){a=+a;var b=0,c=0;b=(o[t>>2]=a,k[t>>2]|0);switch(b>>>23&255|0){case 0:{c=(b&2147483647|0)!=0?3:2;break}case 255:{c=(b&8388607|0)==0&1;break}default:c=4}return c|0}function cHa(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0.0,I=0,J=0.0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0;p[t>>3]=b;c=k[t>>2]|0;d=k[t+4>>2]|0;e=Iyb(c|0,d|0,63)|0;f=d&2147483647;do if((f|(c|0-c)>>>31)>>>0>2146435072)g=b;else{if(!a){g=+qHa(b);break}if((a|0)<0){h=-b;i=~a;j=e^1}else{h=b;i=a+-1|0;j=e}if(!i){g=+kHa(h);break}d=j&a;l=+X(+h);a:do if((f|0)==2146435072|(f|c|0)==0)m=0.0;else{n=+(i|0);if(n>>0<=1389363199){o=+qHa(l);q=+kHa(l);if((i|0)>0){r=o;s=q;u=0}else{m=q;break}while(1){u=u+1|0;q=s*(+(u|0)*2.0/l)-r;if((u|0)==(i|0)){m=q;break a}else{o=s;s=q;r=o}}}switch(i&3|0){case 0:{v=+$(+l)-+_(+l);break}case 1:{v=-+_(+l)-+$(+l);break}case 2:{v=+_(+l)-+$(+l);break}default:v=+_(+l)+ +$(+l)}m=v*.5641895835477563/+Y(+l);break}if(f>>>0<1041235968){if((i|0)>32){m=0.0;break}o=l*.5;if((i+1|0)<2){w=1.0;x=o}else{y=i+1|0;q=1.0;z=o;A=2;while(1){B=q*+(A|0);C=o*z;if((A|0)==(y|0)){w=B;x=C;break}else{q=B;z=C;A=A+1|0}}}m=x/w;break}z=n+1.0;q=z*2.0/l;o=2.0/l;C=q+o;B=q*C+-1.0;if(B<1.0e9){A=1;D=q;E=B;B=C;while(1){y=A+1|0;B=o+B;C=E*B-D;if(!(C<1.0e9)){F=y;G=A;break}else{H=E;A=y;E=C;D=H}}if((G|0)>-2){I=F;J=0.0;K=29}else L=0.0}else{I=1;J=0.0;K=29}if((K|0)==29)while(1){K=0;D=1.0/((z+ +(I|0))*2.0/l-J);if((I|0)>0){I=I+-1|0;J=D;K=29}else{L=D;break}}A=(i|0)>0;if(z*+ga(+(+X(+q)))<709.782712893384)if(A){D=L;E=1.0;y=i;while(1){B=E*(+(y|0)*2.0)/l-D;if((y|0)>1){o=E;E=B;y=y+-1|0;D=o}else{M=E;N=B;O=L;break}}}else{M=L;N=1.0;O=L}else if(A){E=L;D=1.0;y=i;q=L;while(1){z=D*(+(y|0)*2.0)/l-E;P=z>3273390607896141870013189.0e126;B=P?D/z:D;o=P?1.0:z;n=P?q/z:q;if((y|0)>1){E=B;D=o;y=y+-1|0;q=n}else{M=B;N=o;O=n;break}}}else{M=L;N=1.0;O=L}q=+qHa(l);D=+kHa(l);y=!(+X(+q)>=+X(+D));m=y?O*D/M:O*q/N}while(0);g=(d|0)!=0?-m:m}while(0);return +g}function dHa(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0;p[t>>3]=b;c=k[t>>2]|0;d=k[t+4>>2]|0;e=d&2147483647;do if((e|(c|0-c)>>>31)>>>0<=2146435072)if((d|0)>-1|(d|0)==-1&c>>>0>4294967295|(e|c|0)==0)if((e|0)==2146435072)f=0.0;else{if(!a){f=+rHa(b);break}g=(a|0)<0;h=g?~a:a+-1|0;i=g?a&1:0;if(!h){j=+lHa(b);f=(i|0)!=0?-j:j;break}if(e>>>0<=1389363199){j=+rHa(b);l=+lHa(b);p[t>>3]=l;if((h|0)>0&(0!=0?1:(k[t+4>>2]|0)!=-1048576)){m=j;j=l;g=0;while(1){g=g+1|0;n=j*(+(g|0)*2.0/b)-m;p[t>>3]=n;if(!((g|0)<(h|0)&(0!=0?1:(k[t+4>>2]|0)!=-1048576))){o=n;break}else{q=j;j=n;m=q}}}else o=l}else{switch(h&3|0){case 0:{r=-+$(+b)-+_(+b);break}case 1:{r=+_(+b)-+$(+b);break}case 2:{r=+$(+b)+ +_(+b);break}default:r=+$(+b)-+_(+b)}o=r*.5641895835477563/+Y(+b)}f=(i|0)!=0?-o:o}else f=B;else f=b;while(0);return +f}function eHa(a){a=+a;return +(+wFa(a,0-(mHa(a)|0)|0))}function fHa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=(c|0)<0;do if(d|c>>>0<1048576){if((b|0)==0&(c&2147483647|0)==0){e=-1.0/(a*a);break}if(d){e=(a-a)/0.0;break}else{p[t>>3]=a*18014398509481984.0;f=k[t+4>>2]|0;g=k[t>>2]|0;h=f;i=f;j=-1077;l=9;break}}else if(c>>>0<=2146435071)if((b|0)==0&0==0&(c|0)==1072693248)e=0.0;else{g=b;h=c;i=c;j=-1023;l=9}else e=a;while(0);if((l|0)==9){l=i+614242|0;k[t>>2]=g;k[t+4>>2]=(l&1048575)+1072079006;a=+p[t>>3]+-1.0;m=a*(a*.5);n=a/(a+2.0);o=n*n;q=o*o;p[t>>3]=a-m;g=k[t+4>>2]|0;k[t>>2]=0;k[t+4>>2]=g;r=+p[t>>3];s=n*(m+(q*(q*(q*.15313837699209373+.22222198432149784)+.3999999999940942)+o*(q*(q*(q*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))+(a-r-m);m=r*1.4426950407214463;a=+(j+(l>>>20)|0);q=a+m;e=q+(m+(a-q)+(s*1.4426950407214463+(r+s)*1.6751713164886512e-10))}return +e}function gHa(a){a=+a;return +(+GFa(a))}function hHa(a){a=+a;var b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0;b=r;r=r+16|0;c=b;d=+cGa(a,c);e=+p[c>>3];do if(+X(+e)<16.0)if(d!=0.0){f=+hIa(d*3.321928094887362);g=f*+p[10744+(~~e+15<<3)>>3];break}else{g=+p[10744+(~~e+15<<3)>>3];break}else g=+Z(10.0,+a);while(0);r=b;return +g}function iHa(a){a=+a;var b=0.0;b=+MGa(a);M=+X(b)>=1.0?(b>0.0?~~+ja(+W(b/4294967296.0),4294967295.0)>>>0:~~+ha((b-+(~~b>>>0))/4294967296.0)>>>0):0;return ~~b>>>0|0}function jHa(a,b,c){a=+a;b=b|0;c=c|0;var d=0,e=0,f=0,g=0.0,h=0,i=0,j=0.0;d=r;r=r+16|0;e=d;p[t>>3]=a;f=k[t+4>>2]&2147483647;a:do if(f>>>0<1072243196)if(f>>>0<1044816030){p[b>>3]=a;p[c>>3]=1.0;break}else{g=+RFa(a,0.0,0);p[b>>3]=g;g=+QGa(a,0.0);p[c>>3]=g;break}else{if(f>>>0>2146435071){g=a-a;p[c>>3]=g;p[b>>3]=g;break}h=NFa(a,e)|0;i=e+8|0;g=+RFa(+p[e>>3],+p[i>>3],1);j=+QGa(+p[e>>3],+p[i>>3]);switch(h&3|0){case 0:{p[b>>3]=g;p[c>>3]=j;break a;break}case 1:{p[b>>3]=j;p[c>>3]=-g;break a;break}case 2:{p[b>>3]=-g;p[c>>3]=-j;break a;break}default:{p[b>>3]=-j;p[c>>3]=g;break a}}}while(0);r=d;return}function kHa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=Iyb(k[t>>2]|0,b|0,63)|0;d=b&2147483647;do if(d>>>0>2146435071)e=1.0/(a*a);else{if(d>>>0>1073741823){e=+BWa(d,+X(+a),0,c);break}if(d>>>0>939524095){f=a*a;g=f*(f*(f*(f*4.9672799960958445e-08+-1.599556310840356e-05)+.001407056669551897)+-.0625)/(f*(f*(f*(f*(f*1.2354227442613791e-11+5.0463625707621704e-09)+1.1771846404262368e-06)+1.8594678558863092e-04)+.019153759953836346)+1.0)}else g=a;e=(g+.5)*a}while(0);return +e}function lHa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=Kyb(c|0,0,1)|0;do if(d|b)if((c|0)>=0){if(c>>>0>2146435071){e=1.0/a;break}if(c>>>0>1073741823){e=+BWa(c,a,1,0);break}if(c>>>0<1016070144){e=-.6366197723675814/a;break}else{f=a*a;e=(f*(f*(f*(2.352526005616105e-05-f*9.190991580398789e-08)+-1.9125689587576355e-03)+.05044387166398113)+-.19605709064623894)/(f*(f*(f*(f*(f*1.6655924620799208e-11+6.227414523646215e-09)+1.3560880109751623e-06)+2.0255258102513517e-04)+.01991673182366499)+1.0)*a+(+kHa(a)*+ga(+a)-1.0/a)*.6366197723675814;break}}else e=B;else e=-C;while(0);return +e}function mHa(a){a=+a;var b=0,c=0,d=0,e=0,f=0,g=0;b=(o[t>>2]=a,k[t>>2]|0);c=b>>>23&255;switch(c|0){case 0:{d=b<<9;if(d)if((d|0)>-1){e=-127;f=d;while(1){d=e+-1|0;f=f<<1;if((f|0)<=-1){g=d;break}else e=d}}else g=-127;else g=-2147483648;break}case 255:{g=(b&8388607|0)!=0?-2147483648:2147483647;break}default:g=c+-127|0}return g|0}function nHa(a){a=+a;var b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0,i=0.0,j=0.0,l=0.0;p[t>>3]=a;b=k[t+4>>2]|0;do if((b|0)<0|b>>>0<1071284858)if(b>>>0<=3220176895){c=Kyb(b|0,0,1)|0;if(c>>>0<2034237440){d=a;break}if(b>>>0<3218259653){e=0.0;f=a;g=0.0;h=11;break}else{h=8;break}}else{if(a==-1.0){d=-C;break}d=(a-a)/0.0;break}else if(b>>>0>2146435071)d=a;else h=8;while(0);if((h|0)==8){i=a+1.0;p[t>>3]=i;b=(k[t+4>>2]|0)+614242|0;c=(b>>>20)+-1023|0;if((c|0)<54)j=((c|0)>1?1.0-(i-a):a-(i+-1.0))/i;else j=0.0;k[t>>2]=k[t>>2];k[t+4>>2]=(b&1048575)+1072079006;e=j;f=+p[t>>3]+-1.0;g=+(c|0);h=11}if((h|0)==11){j=f*(f*.5);i=f/(f+2.0);a=i*i;l=a*a;d=g*.6931471803691238+(f+(e+g*1.9082149292705877e-10+i*(j+(l*(l*(l*.15313837699209373+.22222198432149784)+.3999999999940942)+a*(l*(l*(l*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))-j))}return +d}function oHa(a){a=+a;return +(+kIa(a))}function pHa(a){a=+a;var b=0,c=0,d=0.0,e=0.0;p[t>>3]=a;b=Iyb(k[t>>2]|0,k[t+4>>2]|0,52)|0;c=b&2047;do if(c>>>0>=1024)if(c>>>0<1049){d=+ga(+(a*2.0-1.0/(+Y(+(a*a+-1.0))+a)));break}else{d=+ga(+a)+.6931471805599453;break}else{e=a+-1.0;d=+nHa(e+ +Y(+(e*e+e*2.0)))}while(0);return +d}function qHa(a){a=+a;var b=0,c=0.0,d=0.0,e=0.0,f=0.0;p[t>>3]=a;b=k[t+4>>2]&2147483647;do if(b>>>0<=2146435071){c=+X(+a);if(b>>>0>1073741823){d=+CWa(b,c,0);break}if(b>>>0>1059061759){e=c*c;f=c*.5;d=(f+1.0)*(1.0-f)+e*(e*(e*(e*(1.8295404953270067e-06-e*4.618326885321032e-09)+-1.8997929423885472e-04)+.015624999999999995)/(e*(e*(e*(e*1.1661400333379e-09+5.135465502073181e-07)+1.1692678466333745e-04)+.015619102946489001)+1.0));break}else{d=1.0-(b>>>0>939524095?c*(c*.25):c);break}}else d=1.0/(a*a);while(0);return +d}function rHa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=Kyb(c|0,0,1)|0;do if(d|b)if((c|0)>=0){if(c>>>0>2146435071){e=1.0/a;break}if(c>>>0>1073741823){e=+CWa(c,a,1);break}if(c>>>0>1044381695){f=a*a;e=(f*(f*(f*(f*(f*(1.9559013703502292e-08-f*3.982051941321034e-11)+-3.8140705372436416e-06)+3.4745343209368365e-04)+-.01381856719455969)+.17666645250918112)+-.07380429510868723)/(f*(f*(f*(f*4.4111031133267547e-10+2.591508518404578e-07)+7.600686273503533e-05)+.01273048348341237)+1.0)+ +qHa(a)*+ga(+a)*.6366197723675814;break}else{e=+ga(+a)*.6366197723675814+-.07380429510868723;break}}else e=B;else e=-C;while(0);return +e}function sHa(a,b,c){a=+a;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0;d=r;r=r+16|0;e=d;f=(o[t>>2]=a,k[t>>2]|0);g=f>>>31;h=f&2147483647;a:do if(h>>>0<1061752795)if(h>>>0<964689920){o[b>>2]=a;o[c>>2]=1.0;break}else{i=a;j=+eGa(i);o[b>>2]=j;j=+aGa(i);o[c>>2]=j;break}else{if(h>>>0<1081824210){f=(g|0)!=0;j=a;if(h>>>0>=1075235812){i=j+(f?3.141592653589793:-3.141592653589793);l=-+eGa(i);o[b>>2]=l;l=-+aGa(i);o[c>>2]=l;break}if(f){l=j+1.5707963267948966;i=-+aGa(l);o[b>>2]=i;m=l}else{l=1.5707963267948966-j;j=+aGa(l);o[b>>2]=j;m=l}l=+eGa(m);o[c>>2]=l;break}if(h>>>0<1088565718){f=(g|0)!=0;l=a;if(h>>>0>=1085271520){j=l+(f?6.283185307179586:-6.283185307179586);i=+eGa(j);o[b>>2]=i;i=+aGa(j);o[c>>2]=i;break}if(f){i=l+4.71238898038469;j=+aGa(i);o[b>>2]=j;n=-+eGa(i)}else{i=l+-4.71238898038469;l=-+aGa(i);o[b>>2]=l;n=+eGa(i)}o[c>>2]=n;break}if(h>>>0>2139095039){i=a-a;o[c>>2]=i;o[b>>2]=i;break}f=KHa(a,e)|0;i=+eGa(+p[e>>3]);l=+aGa(+p[e>>3]);switch(f&3|0){case 0:{o[b>>2]=i;o[c>>2]=l;break a;break}case 1:{o[b>>2]=l;o[c>>2]=-i;break a;break}case 2:{o[b>>2]=-i;o[c>>2]=-l;break a;break}default:{o[b>>2]=-l;o[c>>2]=i;break a}}}while(0);r=d;return}function tHa(a){a=a|0;return +B}function uHa(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0;c=a*a;d=c*c;e=c*a;f=e*(c*.13339200271297674+.3333313950307914)+a+e*d*(c*.024528318116654728+.05338123784456704+d*(c*.009465647849436732+.002974357433599673));return +((b|0)!=0?-1.0/f:f)}function vHa(a,b){a=+a;b=+b;var c=0,d=0,e=0.0;c=(o[t>>2]=a,k[t>>2]|0);do if((c&2147483647)>>>0<=2139095040){d=(o[t>>2]=b,k[t>>2]|0);if((d&2147483647)>>>0<=2139095040)if((d^c|0)<0){e=(c|0)<0?a:b;break}else{e=a>3]=a;d=k[t+4>>2]|0;e=d&2147483640;f=e>>>0>1072010279|(e|0)==1072010279&0>0;if(f){e=Iyb(k[t>>2]|0,d|0,63)|0;d=(e|0)==0;g=.7853981633974483-(d?a:-a)+(3.061616997868383e-17-(d?b:-b));h=0.0;i=e}else{g=a;h=b;i=0}b=g*g;a=b*b;j=g*b;l=j*.3333333333333341+(h+b*(h+j*(a*(a*(a*(a*(7.817944429395571e-05-a*1.8558637485527546e-05)+5.880412408202641e-04)+3.5920791075913124e-03)+.021869488294859542)+.13333333333320124+b*(a*(a*(a*(a*(a*2.590730518636337e-05+7.140724913826082e-05)+2.464631348184699e-04)+1.4562094543252903e-03)+.0088632398235993)+.05396825397622605))));a=g+l;if(!f)if(!c)m=a;else{p[t>>3]=a;f=k[t+4>>2]|0;k[t>>2]=0;k[t+4>>2]=f;b=+p[t>>3];j=-1.0/a;p[t>>3]=j;f=k[t+4>>2]|0;k[t>>2]=0;k[t+4>>2]=f;h=+p[t>>3];m=h+j*((l-(b-g))*h+(b*h+1.0))}else{h=+(1-(c<<1)|0);b=h-(g+(l-a*a/(h+a)))*2.0;m=(i|0)!=0?-b:b}return +m}function zHa(a,b){a=+a;b=+b;return +(+_Fa(a,b))}function AHa(a){a=+a;return ((o[t>>2]=a,k[t>>2]|0)&2139095040)>>>0<2139095040|0}function BHa(a,b){a=+a;b=b|0;var c=0,d=0,e=0,f=0.0,g=0,h=0,i=0.0;c=(o[t>>2]=a,k[t>>2]|0);d=c>>>23&255;e=d+-127|0;do if((e|0)>22){o[b>>2]=a;if((c&8388607|0)==0|(e|0)!=128)f=(k[t>>2]=c&-2147483648,+o[t>>2]);else f=a}else{if(d>>>0<127){k[b>>2]=c&-2147483648;f=a;break}g=8388607>>>e;if(!(g&c)){o[b>>2]=a;f=(k[t>>2]=c&-2147483648,+o[t>>2]);break}else{h=c&~g;i=(k[t>>2]=h,+o[t>>2]);k[b>>2]=h;f=a-i;break}}while(0);return +f}function CHa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0;c=(o[t>>2]=a,k[t>>2]|0);d=c&2147483647;c=(o[t>>2]=b,k[t>>2]|0)&2147483647;e=d>>>0>>0;f=e?c:d;g=e?d:c;b=(k[t>>2]=f,+o[t>>2]);a=(k[t>>2]=g,+o[t>>2]);do if((g|0)==2139095040)h=a;else{if(f>>>0>2139095039|(g|0)==0|(f-g|0)>>>0>209715199){h=b+a;break}if(f>>>0<=1568669695)if(g>>>0<562036736){i=a*1237940039285380274899124.0e3;j=b*1237940039285380274899124.0e3;l=8.077935669463161e-28}else{i=a;j=b;l=1.0}else{i=a*8.077935669463161e-28;j=b*8.077935669463161e-28;l=1237940039285380274899124.0e3}m=j;n=i;h=l*+Y(+(m*m+n*n))}while(0);return +h}function DHa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0,g=0.0,h=0.0,i=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=b&2147483647;do if(c>>>0>1083174911){d=(b|0)>-1|(b|0)==-1&(k[t>>2]|0)>>>0>4294967295;if(d&c>>>0>1083179007){e=a*8988465674311579538646525.0e283;break}if(c>>>0<=2146435071)if(!(a<=-1075.0)|d){f=9;break}else{e=0.0;break}else{e=-1.0/a;break}}else if(c>>>0<1016070144)e=a+1.0;else f=9;while(0);if((f|0)==9){g=a+26388279066624.0;p[t>>3]=g;f=(k[t>>2]|0)+128|0;c=f<<1&510;h=+p[10992+(c<<3)>>3];i=a-(g+-26388279066624.0)-+p[10992+((c|1)<<3)>>3];e=+kFa(h+h*i*(i*(i*(i*(i*1.3333559164630223e-03+.009618129842126066)+.0555041086648214)+.2402265069591)+.6931471805599453),(f&-256|0)/256|0)}return +e}function EHa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0.0,g=0.0,h=0,i=0;c=(o[t>>2]=a,k[t>>2]|0);do if((c&2147483647)>>>0<=2139095040?(p[t>>3]=b,d=k[t+4>>2]|0,e=d&2147483647,!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){f=a;if(f==b){g=b;break}do if(!(a==0.0)){e=(c|0)<0;if(f>2]=h,+o[t>>2])}else i=3;while(0);if((i|0)==3)g=a+b;return +g}function FHa(a,b){a=+a;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0,j=0,l=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;e=Iyb(c|0,d|0,52)|0;f=e&2047;e=f+-1023|0;do if((e|0)>51){p[b>>3]=a;if((c|0)==0&(d&1048575|0)==0|(e|0)!=1024){k[t>>2]=0;k[t+4>>2]=d&-2147483648;g=+p[t>>3]}else g=a}else{if(f>>>0<1023){h=b;k[h>>2]=0;k[h+4>>2]=d&-2147483648;g=a;break}h=Iyb(-1,1048575,e|0)|0;i=M;if((h&c|0)==0&(i&d|0)==0){p[b>>3]=a;k[t>>2]=0;k[t+4>>2]=d&-2147483648;g=+p[t>>3];break}else{j=c&~h;h=d&~i;k[t>>2]=j;k[t+4>>2]=h;l=+p[t>>3];i=b;k[i>>2]=j;k[i+4>>2]=h;g=a-l;break}}while(0);return +g}function GHa(a){a=+a;var b=0,c=0,d=0,e=0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=Iyb(b|0,c|0,52)|0;switch(d&2047|0){case 0:{e=(b|0)!=0|(c&2147483647|0)!=0?3:2;break}case 2047:{e=(b|0)==0&(c&1048575|0)==0&1;break}default:e=4}return e|0}function HHa(a){a=+a;var b=0.0;b=+PFa(a);M=+X(b)>=1.0?(b>0.0?~~+ja(+W(b/4294967296.0),4294967295.0)>>>0:~~+ha((b-+(~~b>>>0))/4294967296.0)>>>0):0;return ~~b>>>0|0}function IHa(a){a=+a;var b=0;p[t>>3]=a;b=Iyb(k[t>>2]|0,k[t+4>>2]|0,63)|0;return b|0}function JHa(a){a=+a;return +(+nGa(a))}function KHa(a,b){a=+a;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0;c=r;r=r+16|0;d=c+8|0;e=c;f=(o[t>>2]=a,k[t>>2]|0);g=f&2147483647;do if(g>>>0>=1305022427){if(g>>>0>2139095039){p[b>>3]=a-a;h=0;break}i=(g>>>23)+-150|0;p[d>>3]=(k[t>>2]=g-(i<<23),+o[t>>2]);j=sFa(d,e,i,1,0)|0;l=+p[e>>3];if((f|0)<0){p[b>>3]=-l;h=0-j|0;break}else{p[b>>3]=l;h=j;break}}else{l=a;m=l*.6366197723675814+6755399441055744.0+-6755399441055744.0;p[b>>3]=l-m*1.5707963109016418-m*1.5893254773528196e-08;h=~~m}while(0);r=c;return h|0}function LHa(a,b,c){a=+a;b=+b;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,D=0.0,E=0;d=r;r=r+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d;p[t>>3]=a;i=k[t+4>>2]&2146435072;a:do if(i>>>0<2146435072|(i|0)==2146435072&0<0?(p[t>>3]=b,j=k[t+4>>2]&2146435072,j>>>0<2146435072|(j|0)==2146435072&0<0):0){p[t>>3]=c;j=k[t>>2]|0;l=k[t+4>>2]|0;m=l&2146435072;if(m>>>0<2146435072|(m|0)==2146435072&0<0){if(a==0.0|b==0.0){n=a*b+c;break}if(c==0.0){n=a*b;break}o=+UGa(a,e);q=+UGa(b,f);s=+UGa(c,g);m=JTa()|0;u=(k[f>>2]|0)+(k[e>>2]|0)|0;v=u-(k[g>>2]|0)|0;if((v|0)<-53){Hyb(j|0,l|0,0,1048576)|0;switch(m|0){case 3072:{if(a>0.0^b<0.0^c<0.0){n=c;break a}n=+gGa(c,0.0);break a;break}case 1024:{if(a>0.0^b<0.0){n=c;break a}n=+gGa(c,-C);break a;break}case 2048:{if(!(a>0.0^b<0.0)){n=c;break a}n=+gGa(c,C);break a;break}default:{n=c;break a}}}if((v|0)<107)w=+kFa(s,0-v|0);else w=+wGa(2.2250738585072014e-308,s);CTa(0)|0;s=o*134217729.0;x=s+(o-s);s=o-x;o=q*134217729.0;y=o+(q-o);o=q-y;q=x*y;z=s*y+x*o;x=q+z;y=s*o+(z+(q-x));q=x+w;z=q-x;o=w-z+(x-(q-z));if(q==0.0){CTa(m)|0;p[h>>3]=w;z=x+ +p[h>>3];n=z+ +kFa(y,u);break}if(m){v=ITa(32)|0;CTa(m)|0;z=+kFa(q+(y+o),u);if((FFa(z)|0)<-1022?(ITa(32)|0)!=0:0){n=z;break}if(!v){n=z;break}n=z;break}z=y+o;x=z-o;s=y-x+(o-(z-x));if(s!=0.0?(p[t>>3]=z,v=k[t>>2]|0,m=k[t+4>>2]|0,(v&1|0)==0&0==0):0){p[t>>3]=s;l=Iyb(k[t>>2]^v|0,k[t+4>>2]^m|0,62)|0;j=M;A=Hyb(v|0,m|0,1,0)|0;m=Gyb(A|0,M|0,l|0,j|0)|0;j=M;k[t>>2]=m;k[t+4>>2]=j;B=+p[t>>3]}else B=z;z=q+B;if(((FFa(q)|0)+u|0)>-1023){n=+kFa(z,u);break}s=z-q;x=B-s+(q-(z-s));if(x!=0.0?(p[t>>3]=z,j=k[t>>2]|0,m=k[t+4>>2]|0,l=Iyb(j|0,m|0,52)|0,((j&1|0)!=0|0!=0)^(u|0)!=(0-(l&2047)|0)):0){p[t>>3]=x;l=Iyb(k[t>>2]^j|0,k[t+4>>2]^m|0,62)|0;A=Hyb(j|0,m|0,1,0)|0;m=Gyb(A|0,M|0,l&2|0,0)|0;l=M;k[t>>2]=m;k[t+4>>2]=l;D=+p[t>>3]}else D=z;n=+kFa(D,u)}else n=c}else E=3;while(0);if((E|0)==3)n=a*b+c;r=d;return +n}function MHa(a){a=+a;return +(+UFa(a))}function NHa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;e=d&2147483647;do if(!(e>>>0>2146435072|(e|0)==2146435072&c>>>0>0)){p[t>>3]=b;f=k[t>>2]|0;g=k[t+4>>2]|0;h=g&2147483647;if(!(h>>>0>2146435072|(h|0)==2146435072&f>>>0>0)){h=Iyb(c|0,d|0,63)|0;i=Iyb(f|0,g|0,63)|0;if((h|0)==(i|0)){j=a>3]=a;b=k[t+4>>2]|0;c=Iyb(k[t>>2]|0,b|0,63)|0;d=M;e=b&2147483647;do if(e>>>0<=2146435071)if(e>>>0<1072365568)if(e>>>0<1043333120){f=(a*8.0+a*1.0270333367641007)*.125;break}else{g=a*a;f=(g*(g*(g*(-.005770270296489442-g*2.3763016656650163e-05)+-.02848174957559851)+-.3250421072470015)+.12837916709551256)/(g*(g*(g*(g*(1.3249473800432164e-04-g*3.960228278775368e-06)+.005081306281875766)+.0650222499887673)+.39791722395915535)+1.0)*a+a;break}else{if(e>>>0<1075314688)h=1.0-+DWa(e,a);else h=1.0;f=(c|0)!=0|(d|0)!=0?-h:h;break}else{b=Kyb(c|0,d|0,1)|0;f=+(1-b|0)+1.0/a}while(0);return +f}function SHa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=Iyb(k[t>>2]|0,b|0,63)|0;d=b&2147483647;do if(d>>>0<=2146435071){if(d>>>0>=1072365568){b=(c|0)!=0;if(d>>>0<1077673984){e=+DWa(d,a);f=b?2.0-e:e;break}else{f=b?2.0:0.0;break}}if(d>>>0<1013972992){f=1.0-a;break}e=a*a;g=(e*(e*(e*(-.005770270296489442-e*2.3763016656650163e-05)+-.02848174957559851)+-.3250421072470015)+.12837916709551256)/(e*(e*(e*(e*(1.3249473800432164e-04-e*3.960228278775368e-06)+.005081306281875766)+.0650222499887673)+.39791722395915535)+1.0);if((c|0)!=0|d>>>0<1070596096){f=1.0-(g*a+a);break}else{f=.5-(a+-.5+g*a);break}}else{b=Kyb(c|0,M|0,1)|0;f=+(b|0)+1.0/a}while(0);return +f}function THa(a,b,c){a=+a;b=+b;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0;p[t>>3]=a;d=k[t>>2]|0;e=k[t+4>>2]|0;p[t>>3]=b;f=k[t>>2]|0;g=k[t+4>>2]|0;h=Iyb(d|0,e|0,52)|0;i=h&2047;h=Iyb(f|0,g|0,52)|0;j=h&2047;h=Iyb(d|0,e|0,63)|0;l=M;m=Iyb(f|0,g|0,63)|0;n=M;k[c>>2]=0;o=g&2147483647;do if(!((f|0)==0&(o|0)==0)?!(o>>>0>2146435072|(o|0)==2146435072&f>>>0>0|(i|0)==2047):0)if((d|0)==0&(e&2147483647|0)==0)q=a;else{if(!i){r=Kyb(d|0,e|0,12)|0;s=M;if((s|0)>-1|(s|0)==-1&r>>>0>4294967295){u=r;r=s;s=0;while(1){v=s+-1|0;u=Kyb(u|0,r|0,1)|0;r=M;if(!((r|0)>-1|(r|0)==-1&u>>>0>4294967295)){w=v;break}else s=v}}else w=0;s=Kyb(d|0,e|0,1-w|0)|0;x=s;y=M;z=w}else{x=d;y=e&1048575|1048576;z=i}if(!j){s=Kyb(f|0,g|0,12)|0;u=M;if((u|0)>-1|(u|0)==-1&s>>>0>4294967295){r=s;s=u;u=0;while(1){v=u+-1|0;r=Kyb(r|0,s|0,1)|0;s=M;if(!((s|0)>-1|(s|0)==-1&r>>>0>4294967295)){A=v;break}else u=v}}else A=0;u=Kyb(f|0,g|0,1-A|0)|0;B=u;C=M;D=A}else{B=f;C=g&1048575|1048576;D=j}if((z|0)<(D|0))if((z+1|0)==(D|0)){E=x;F=y;G=z;H=0;I=22}else{q=a;break}else{u=Gyb(x|0,y|0,B|0,C|0)|0;r=M;s=(r|0)>-1|(r|0)==-1&u>>>0>4294967295;v=Iyb(u|0,r|0,63)|0;J=v^1;v=s?u:x;u=s?r:y;if((z|0)>(D|0)){r=J;s=v;K=u;L=z;while(1){N=Kyb(s|0,K|0,1)|0;O=M;L=L+-1|0;P=Gyb(N|0,O|0,B|0,C|0)|0;Q=M;R=(Q|0)>-1|(Q|0)==-1&P>>>0>4294967295;S=Iyb(P|0,Q|0,63)|0;T=(S|r<<1)^1;S=R?P:N;N=R?Q:O;if((L|0)<=(D|0)){U=T;V=S;W=N;X=D;break}else{r=T;s=S;K=N}}}else{U=J;V=v;W=u;X=z}if(!((V|0)==0&(W|0)==0))if(W>>>0<1048576|(W|0)==1048576&V>>>0<0){K=V;s=W;r=X;while(1){L=Kyb(K|0,s|0,1)|0;N=M;S=r+-1|0;if(N>>>0<1048576|(N|0)==1048576&L>>>0<0){K=L;s=N;r=S}else{E=L;F=N;G=S;H=U;I=22;break}}}else{E=V;F=W;G=X;H=U;I=22}else{Y=0;Z=0;_=-60;$=U;I=24}}if((I|0)==22)if((G|0)>0){r=Hyb(E|0,F|0,0,-1048576)|0;s=M;K=Kyb(G|0,0,52)|0;aa=s|M;ba=r|K;ca=G;da=H}else{Y=E;Z=F;_=G;$=H;I=24}if((I|0)==24){K=Iyb(Y|0,Z|0,1-_|0)|0;aa=M;ba=K;ca=_;da=$}k[t>>2]=ba;k[t+4>>2]=aa;ea=+p[t>>3];fa=(m|0)==0&(n|0)==0?b:-b;if((ca|0)!=(D|0))if((ca+1|0)==(D|0)){ga=ea*2.0;if(!(ga>fa)?(da&1|0)==0|ga!=fa:0){ha=ea;ia=da}else I=29}else{ha=ea;ia=da}else I=29;if((I|0)==29){ha=ea-fa;ia=da+1|0}K=ia&2147483647;k[c>>2]=(h|0)!=(m|0)|(l|0)!=(n|0)?0-K|0:K;q=(h|0)!=0|(l|0)!=0?-ha:ha}else I=3;while(0);if((I|0)==3){ha=a*b;q=ha/ha}return +q}function UHa(a){a=+a;return +(+XGa(a))}function VHa(a){a=+a;return FFa(a)|0}function WHa(a){a=+a;return +(+RHa(a))}function XHa(a){a=+a;return +(+SHa(a))}function YHa(a,b){a=+a;b=b|0;return +(+UGa(a,b))}function ZHa(a){a=+a;var b=0,c=0.0,d=0.0;b=(o[t>>2]=a,k[t>>2]|0)&2147483647;a=(k[t>>2]=b,+o[t>>2]);do if(b>>>0<1060205079)if(b>>>0<964689920)c=1.0;else{d=+fGa(a);c=d*d/((d+1.0)*2.0)+1.0}else if(b>>>0<1118925335){d=+fa(+a);c=(d+1.0/d)*.5;break}else{c=+PHa(a);break}while(0);return +c}function _Ha(a){a=+a;return +(+iIa(a))}function $Ha(a){a=+a;var b=0,c=0.0,d=0.0;p[t>>3]=a;b=k[t+4>>2]&2147483647;k[t>>2]=k[t>>2];k[t+4>>2]=b;a=+p[t>>3];do if(b>>>0<1072049730)if(b>>>0<1045430272)c=1.0;else{d=+kIa(a);c=d*d/((d+1.0)*2.0)+1.0}else if(b>>>0<1082535490){d=+fa(+a);c=(d+1.0/d)*.5;break}else{c=+IGa(a);break}while(0);return +c}function aIa(a){a=+a;return yGa(a)|0}function bIa(a,b){a=+a;b=b|0;return +(+kFa(a,b))}function cIa(a){a=+a;var b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0;b=r;r=r+16|0;c=b;d=+BHa(a,c);e=+o[c>>2];do if(+X(+e)<8.0)if(d!=0.0){f=+iGa(d*3.321928024291992);g=f*+o[48660+(~~e+7<<2)>>2];break}else{g=+o[48660+(~~e+7<<2)>>2];break}else g=+DHa(a*3.321928094887362);while(0);r=b;return +g}function dIa(a){a=+a;return +(+VFa(a))}function eIa(a){a=+a;return (o[t>>2]=a,k[t>>2]|0)>>>31|0}function fIa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;p[t>>3]=b;e=k[t>>2]|0;f=k[t+4>>2]|0;g=Iyb(c|0,d|0,52)|0;h=g&2047;g=Iyb(e|0,f|0,52)|0;i=g&2047;g=d&-2147483648;j=Kyb(e|0,f|0,1)|0;l=M;a:do if(!((j|0)==0&(l|0)==0)?(m=f&2147483647,!(m>>>0>2146435072|(m|0)==2146435072&e>>>0>0|(h|0)==2047)):0){m=Kyb(c|0,d|0,1)|0;n=M;if(!(n>>>0>l>>>0|(n|0)==(l|0)&m>>>0>j>>>0))return +((m|0)==(j|0)&(n|0)==(l|0)?a*0.0:a);if(!h){n=Kyb(c|0,d|0,12)|0;m=M;if((m|0)>-1|(m|0)==-1&n>>>0>4294967295){o=n;n=m;m=0;while(1){q=m+-1|0;o=Kyb(o|0,n|0,1)|0;n=M;if(!((n|0)>-1|(n|0)==-1&o>>>0>4294967295)){r=q;break}else m=q}}else r=0;m=Kyb(c|0,d|0,1-r|0)|0;s=m;u=M;v=r}else{s=c;u=d&1048575|1048576;v=h}if(!i){m=Kyb(e|0,f|0,12)|0;o=M;if((o|0)>-1|(o|0)==-1&m>>>0>4294967295){n=m;m=o;o=0;while(1){q=o+-1|0;n=Kyb(n|0,m|0,1)|0;m=M;if(!((m|0)>-1|(m|0)==-1&n>>>0>4294967295)){w=q;break}else o=q}}else w=0;o=Kyb(e|0,f|0,1-w|0)|0;x=o;y=M;z=w}else{x=e;y=f&1048575|1048576;z=i}o=Gyb(s|0,u|0,x|0,y|0)|0;n=M;m=(n|0)>-1|(n|0)==-1&o>>>0>4294967295;b:do if((v|0)>(z|0)){q=m;A=o;B=n;C=s;D=u;E=v;while(1){if(q)if((C|0)==(x|0)&(D|0)==(y|0))break;else{F=A;G=B}else{F=C;G=D}H=Kyb(F|0,G|0,1)|0;I=M;J=E+-1|0;K=Gyb(H|0,I|0,x|0,y|0)|0;L=M;N=(L|0)>-1|(L|0)==-1&K>>>0>4294967295;if((J|0)>(z|0)){q=N;A=K;B=L;C=H;D=I;E=J}else{O=N;P=H;Q=I;R=K;S=L;T=J;break b}}U=a*0.0;break a}else{O=m;P=s;Q=u;R=o;S=n;T=v}while(0);if(O)if((P|0)==(x|0)&(Q|0)==(y|0)){U=a*0.0;break}else{V=S;W=R}else{V=Q;W=P}if(V>>>0<1048576|(V|0)==1048576&W>>>0<0){n=W;o=V;m=T;while(1){E=Kyb(n|0,o|0,1)|0;D=M;C=m+-1|0;if(D>>>0<1048576|(D|0)==1048576&E>>>0<0){n=E;o=D;m=C}else{X=E;Y=D;Z=C;break}}}else{X=W;Y=V;Z=T}if((Z|0)>0){m=Hyb(X|0,Y|0,0,-1048576)|0;o=M;n=Kyb(Z|0,0,52)|0;_=o|M;$=m|n}else{n=Iyb(X|0,Y|0,1-Z|0)|0;_=M;$=n}k[t>>2]=$;k[t+4>>2]=_|g;U=+p[t>>3]}else aa=3;while(0);if((aa|0)==3){ba=a*b;U=ba/ba}return +U}function gIa(a,b){a=+a;b=+b;return +(+gGa(a,b))}function hIa(a){a=+a;return +(+DHa(a))}function iIa(a){a=+a;var b=0,c=0,d=0,e=0,f=0.0,g=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=Iyb(b|0,c|0,52)|0;e=d&2047;k[t>>2]=b;k[t+4>>2]=c&2147483647;a=+p[t>>3];if(e>>>0<1022)if(e>>>0<991)f=a;else{g=a*2.0;f=+nHa(g+a*g/(1.0-a))*.5}else f=+nHa(a/(1.0-a)*2.0)*.5;return +((c|0)<0?-f:f)}function jIa(a,b){a=+a;b=+b;return +(+wGa(a,b))}function kIa(a){a=+a;var b=0,c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0,l=0,m=0.0,n=0,o=0.0,q=0.0,r=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=c&2147483647;e=Iyb(b|0,c|0,63)|0;do if(d>>>0>1078159481){f=c&2147483647;if(!(f>>>0>2146435072|(f|0)==2146435072&b>>>0>0))if(!e)if(a>709.782712893384)g=a*8988465674311579538646525.0e283;else h=11;else g=-1.0;else g=a}else{if(d>>>0<=1071001154)if(d>>>0<1016070144){g=a;break}else{i=a;j=0.0;l=0;h=14;break}if(d>>>0<1072734898)if(!e){m=a+-.6931471803691238;n=1;o=1.9082149292705877e-10;h=12;break}else{m=a+.6931471803691238;n=-1;o=-1.9082149292705877e-10;h=12;break}else h=11}while(0);if((h|0)==11){d=~~(a*1.4426950408889634+((e|0)!=0?-.5:.5));q=+(d|0);m=a-q*.6931471803691238;n=d;o=q*1.9082149292705877e-10;h=12}if((h|0)==12){q=m-o;i=q;j=m-q-o;l=n;h=14}a:do if((h|0)==14){o=i*.5;q=i*o;m=q*(q*(q*(q*(4.008217827329362e-06-q*2.0109921818362437e-07)+-7.93650757867488e-05)+1.5873015872548146e-03)+-.03333333333333313)+1.0;a=3.0-o*m;o=q*((m-a)/(6.0-i*a));if(!l){g=i-(i*o-q);break}a=i*(o-j)-j-q;switch(l|0){case -1:{g=(i-a)*.5+-.5;break a;break}case 1:{if(i<-.25){g=(a-(i+.5))*-2.0;break a}else{g=(i-a)*2.0+1.0;break a}break}default:{n=Kyb(l+1023|0,0,52)|0;d=M;k[t>>2]=n;k[t+4>>2]=d;q=+p[t>>3];if(l>>>0>56){o=i-a+1.0;g=((l|0)==1024?o*2.0*8988465674311579538646525.0e283:q*o)+-1.0;break a}d=Kyb(1023-l|0,0,52)|0;n=M;if((l|0)<20){k[t>>2]=d;k[t+4>>2]=n;r=1.0-+p[t>>3]+(i-a)}else{k[t>>2]=d;k[t+4>>2]=n;r=i-(+p[t>>3]+a)+1.0}g=q*r;break a}}}while(0);return +g}function lIa(a){a=+a;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=(b|0)<0?-.5:.5;d=b&2147483647;k[t>>2]=k[t>>2];k[t+4>>2]=d;e=+p[t>>3];do if(d>>>0<1082535490){f=+kIa(e);if(d>>>0>=1072693248){g=c*(f+f/(f+1.0));break}if(d>>>0<1045430272)g=a;else g=c*(f*2.0-f*f/(f+1.0))}else g=c*2.0*+IGa(e);while(0);return +g}function mIa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0.0;b=(o[t>>2]=a,k[t>>2]|0);c=b>>>31;d=b&2147483647;do if(d>>>0>2139095039)e=1.0/(a*a);else{if(d>>>0>1073741823){e=+EWa(d,+X(+a),0,c);break}if(d>>>0>838860799){f=a*a;g=f*(f*(f*(f*4.9672799207201024e-08+-1.5995563444448635e-05)+1.4070566976442933e-03)+-.0625)/(f*(f*(f*(f*(f*1.2354227016397878e-11+5.046362439031782e-09)+1.177184685730026e-06)+1.8594678840599954e-04)+.019153760746121407)+1.0)}else g=a;e=(g+.5)*a}while(0);return +e}function nIa(a){a=+a;var b=0,c=0.0,d=0.0;b=(o[t>>2]=a,k[t>>2]|0);do if(b&2147483647)if((b|0)>=0){if(b>>>0>2139095039){c=1.0/a;break}if(b>>>0>1073741823){c=+EWa(b,a,1,0);break}if(b>>>0<838860800){c=-.6366197466850281/a;break}else{d=a*a;c=(d*(d*(d*(2.3525259166490287e-05-d*9.190991789864711e-08)+-1.9125689286738634e-03)+.050443872809410095)+-.19605709612369537)/(d*(d*(d*(d*(d*1.6655924903186126e-11+6.227414584003554e-09)+1.3560879779106472e-06)+2.0255257550161332e-04)+.019916731864213943)+1.0)*a+(+mIa(a)*+ga(+a)-1.0/a)*.6366197466850281;break}}else c=B;else c=-C;while(0);return +c}function oIa(a){a=+a;var b=0,c=0,d=0.0,e=0.0;b=(o[t>>2]=a,k[t>>2]|0);if((b&2130706432)>>>0<=1249902592){c=(b|0)<0;d=c?a+-8388608.0+8388608.0:a+8388608.0+-8388608.0;if(d==0.0)e=c?-0.0:0.0;else e=d}else e=a;return +e}function pIa(a){a=+a;return +(+kFa(a,0-(FFa(a)|0)|0))}function qIa(a){a=+a;var b=0,c=0.0;b=ITa(32)|0;c=+oIa(a);return +c}function rIa(a){a=+a;return +(+zFa(a))}function sIa(a,b){a=+a;b=b|0;var c=0,d=0,e=0.0,f=0,g=0.0,h=0.0,i=0.0,j=0.0,l=0,m=0.0,n=0.0,p=0.0,q=0.0,r=0.0,s=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;c=(o[t>>2]=a,k[t>>2]|0);k[b>>2]=1;d=c&2147483647;do if(d>>>0>2139095039)e=a*a;else{f=(c|0)<0;if(d>>>0<889192448){if(f){k[b>>2]=-1;g=-a}else g=a;e=-+ga(+g);break}if(f){h=-a;i=a*-.5;j=(i-+W(+i))*2.0;l=(~~(j*4.0)+1|0)/2|0;i=(j-+(l|0)*.5)*3.141592653589793;switch(l|0){case 3:{m=-+aGa(i);break}case 1:{m=+aGa(i);break}case 2:{m=+eGa(-i);break}default:m=+eGa(i)}if(m==0.0){e=1.0/(a-a);break}if(m>0.0){k[b>>2]=-1;n=m}else n=-m;p=h;q=+ga(+(3.1415927410125732/(n*h)))}else{p=a;q=0.0}a:do if((c|0)<1065353216)if((c|0)<-1073741824)switch(c|0){case -1082130432:{r=0.0;break a;break}default:{s=20;break a}}else switch(c|0){case -1073741824:{r=0.0;break a;break}default:{s=20;break a}}else if((c|0)<1073741824)switch(c|0){case 1065353216:{r=0.0;break a;break}default:{s=20;break a}}else switch(c|0){case 1073741824:{r=0.0;break a;break}default:{s=20;break a}}while(0);b:do if((s|0)==20)if(d>>>0<1073741824){do if(d>>>0<1063675495){h=-+ga(+p);if(d>>>0<=1060850207)if(d>>>0>1047343879){u=h;v=p+-.4616321325302124;s=29}else{w=h;x=p;s=30}else{y=1.0;z=h;s=28}}else if(d>>>0<=1071490583)if(d>>>0>1067296287){u=0.0;v=p+-1.4616321325302124;s=29;break}else{w=0.0;x=p+-1.0;s=30;break}else{y=2.0;z=0.0;s=28}while(0);if((s|0)==28){h=y-p;i=h*h;r=z+(h*(i*(i*(i*(i*(i*2.5214456400135532e-05+2.2086278477218002e-04)+1.1927076848223805e-03)+.007385550998151302)+.0673523023724556)+.07721566408872604)+i*(i*(i*(i*(i*(i*4.486409670789726e-05+1.0801156895468011e-04)+5.100697744637728e-04)+2.8905137442052364e-03)+.020580807700753212)+.32246702909469604)-h*.5);break}else if((s|0)==29){h=v*v;i=v*h;r=u+(h*(i*(i*(i*(i*.000315632059937343+-1.4034647028893232e-03)+.006100538652390242)+-.03278854116797447)+.4838361144065857)-(6.697100651820165e-09-i*(i*(i*(i*(8.810818544588983e-04-i*3.1275415676645935e-04)+-3.6845202557742596e-03)+.017970675602555275)+-.14758771657943726+v*(i*(i*(i*(i*3.3552918466739357e-04+-5.385953118093312e-04)+2.2596477065235376e-03)+-.010314224287867546)+.06462494283914566)))+-.12148628383874893);break}else if((s|0)==30){r=w+(x*(x*(x*(x*(x*(x*.013381091877818108+.2289637327194214)+.9777175188064575)+1.4549225568771362)+.6328270435333252)+-.07721566408872604)/(x*(x*(x*(x*(x*3.2170924823731184e-03+.10422264784574509)+.7692851424217224)+2.1284897327423096)+2.4559779167175293)+1.0)-x*.5);break}}else{if(d>>>0>=1090519040){i=+ga(+p);if(d>>>0<1551892480){h=1.0/p;j=h*h;r=(p+-.5)*(i+-1.0)+(h*(j*(j*(j*(j*(8.363398956134915e-04-j*1.6309292986989021e-03)+-5.951875355094671e-04)+7.936505717225373e-04)+-2.7777778450399637e-03)+.0833333358168602)+.418938547372818);break}else{r=p*(i+-1.0);break}}l=~~p;i=p-+(l|0);j=i*.5+i*(i*(i*(i*(i*(i*(i*3.194753298885189e-05+1.8402845598757267e-03)+.026642270386219025)+.14635047316551208)+.3257787823677063)+.21498242020606995)+-.07721566408872604)/(i*(i*(i*(i*(i*(i*7.32668422642746e-06+7.779424777254462e-04)+.018645919859409332)+.1719338595867157)+.7219355702400208)+1.3920053243637085)+1.0);switch(l|0){case 7:{A=i+6.0;s=34;break}case 6:{A=1.0;s=34;break}case 5:{B=1.0;s=35;break}case 4:{C=1.0;s=36;break}case 3:{D=1.0;break}default:{r=j;break b}}if((s|0)==34){B=(i+5.0)*A;s=35}if((s|0)==35){C=(i+4.0)*B;s=36}if((s|0)==36)D=(i+3.0)*C;r=j+ +ga(+((i+2.0)*D));break}while(0);e=f?q-r:r}while(0);return +e}function tIa(a){a=a|0;return +B}function uIa(){return 48720}function vIa(a){a=a|0;var b=0;b=(IIa(a)|0)==0;return (b?a:a&95)|0}function wIa(a){a=a|0;return (a+-32|0)>>>0<95|0}function xIa(a){a=a|0;var b=0;if(!(XIa(a)|0))b=0;else b=(fJa(a)|0)==0;return b&1|0}function yIa(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function zIa(a,b){a=a|0;b=b|0;var c=0;do switch(b|0){case 1:{c=eJa(a)|0;break}case 2:{c=RIa(a)|0;break}case 3:{c=GIa(a)|0;break}case 4:{c=CIa(a)|0;break}case 5:{c=WIa(a)|0;break}case 6:{c=$Ia(a)|0;break}case 7:{c=UIa(a)|0;break}case 8:{c=PIa(a)|0;break}case 9:{c=cJa(a)|0;break}case 10:{c=dJa(a)|0;break}case 11:{c=HIa(a)|0;break}case 12:{c=FIa(a)|0;break}default:c=0}while(0);return c|0}function AIa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=i[a>>0]|0;c=97;d=1;e=302110;while(1){if(b<<24>>24==c<<24>>24?(YLa(a,e)|0)==0:0){f=d;break}e=e+6|0;c=i[e>>0]|0;if(!(c<<24>>24)){f=0;break}else d=d+1|0}return f|0}function BIa(a){a=a|0;var b=0;b=(MIa(a)|0)==0;return (b?a:a|32)|0}function CIa(a){a=a|0;var b=0;if((a&-2|0)==8232|(a>>>0<32|(a+-127|0)>>>0<33))b=1;else b=(a+-65529|0)>>>0<3;return b&1|0}function DIa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:do if(!b){c=0;d=0}else{e=a;f=b;g=0;h=0;while(1){f=f+-1|0;i=k[e>>2]|0;if(!i){c=g;d=h;break a}j=bJa(i)|0;if((j|0)<=-1){c=j;d=h;break a}i=j+h|0;if(!f){c=j;d=i;break}else{e=e+4|0;g=j;h=i}}}while(0);return ((c|0)<0?c:d)|0}function EIa(a){a=a|0;return a>>>0<128|0}function FIa(a){a=a|0;var b=0;if((a+-48|0)>>>0<10)b=1;else b=((a|32)+-97|0)>>>0<6;return b&1|0}function GIa(a){a=a|0;return SIa(a)|0}function HIa(a){a=a|0;return (KIa(a)|0)!=(a|0)|0}function IIa(a){a=a|0;return (a+-97|0)>>>0<26|0}function JIa(a){a=a|0;return FWa(a,0)|0}function KIa(a){a=a|0;return FWa(a,1)|0}function LIa(){return 4}function MIa(a){a=a|0;return (a+-65|0)>>>0<26|0}function NIa(a){a=a|0;return a&127|0}function OIa(){return 48724}function PIa(a){a=a|0;var b=0;if(a>>>0>=255)if((a+-57344|0)>>>0<8185|(a>>>0<8232|(a+-8234|0)>>>0<47062))b=1;else return ((a+-65532|0)>>>0>1048579|(a&65534|0)==65534)&1^1|0;else b=(a+1&127)>>>0>32&1;return b|0}function QIa(a){a=a|0;return (a+-48|0)>>>0<10|0}function RIa(a){a=a|0;var b=0;if(a>>>0<131072)b=(l[302183+((l[302183+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else b=a>>>0<196606&1;return b|0}function SIa(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function TIa(a){a=a|0;var b=0;if((a+-48|0)>>>0<10)b=1;else b=((a|32)+-97|0)>>>0<6;return b&1|0}function UIa(a){a=a|0;return ((a|0)==223|(JIa(a)|0)!=(a|0))&1|0}function VIa(a){a=a|0;return (a>>>0<32|(a|0)==127)&1|0}function WIa(a){a=a|0;return (a+-48|0)>>>0<10|0}function XIa(a){a=a|0;return (a+-33|0)>>>0<94|0}function YIa(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function ZIa(a){a=a|0;var b=0,c=0;if(!(YLa(a,305159)|0))b=1;else{c=(YLa(a,305167)|0)==0;b=c?2:0}return b|0}function _Ia(a,b){a=a|0;b=b|0;var c=0;switch(b|0){case 1:{c=JIa(a)|0;break}case 2:{c=KIa(a)|0;break}default:c=a}return c|0}function $Ia(a){a=a|0;var b=0;if(!(dJa(a)|0))b=(PIa(a)|0)!=0;else b=0;return b&1|0}function aJa(){return 48728}function bJa(a){a=a|0;var b=0,c=0,d=0,e=0;do if(a>>>0>=255){if((a&-65538)>>>0<65534){b=a>>8;c=a>>>3&31;d=1<<(a&7);if((l[305175+((l[305175+b>>0]|0)<<5|c)>>0]|0)&d){e=0;break}e=((l[307095+((l[307095+b>>0]|0)<<5|c)>>0]|0)&d|0)==0?1:2;break}if((a&65534|0)!=65534)if((a&-131072|0)==131072)e=2;else return ((a+-917760|0)<239|((a|0)==917505|(a+-917536|0)>>>0<95))&1^1|0;else e=-1}else e=(a+1&127)>>>0>32?1:((a|0)!=0)<<31>>31;while(0);return e|0}function cJa(a){a=a|0;var b=0;if(a>>>0<131072)b=(l[308151+((l[308151+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else b=0;return b|0}function dJa(a){a=a|0;var b=0;if(!a)b=0;else b=(TLa(48732,a)|0)!=0;return b&1|0}function eJa(a){a=a|0;var b=0;if(!(WIa(a)|0))b=(RIa(a)|0)!=0;else b=1;return b&1|0}function fJa(a){a=a|0;return ((a+-48|0)>>>0<10|(YIa(a)|0)!=0)&1|0}function gJa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=r;r=r+32|0;g=f;k[g>>2]=a;k[g+4>>2]=b;k[g+8>>2]=c;k[g+12>>2]=d;k[g+16>>2]=e;e=KVa(Cb(142,g|0)|0)|0;r=f;return e|0}function hJa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(Re(168,e|0)|0)|0;r=d;return c|0}function iJa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+48|0;h=g+8|0;i=g+32|0;j=g;k[i>>2]=f;k[i+4>>2]=8;f=(e|0)!=0;if(f){l=e;e=k[l+4>>2]|0;m=j;k[m>>2]=k[l>>2];k[m+4>>2]=e}k[h>>2]=a;k[h+4>>2]=b;k[h+8>>2]=c;k[h+12>>2]=d;k[h+16>>2]=f?j:0;k[h+20>>2]=i;i=KVa(vd(308,h|0)|0)|0;r=g;return i|0}function jJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];dKa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function kJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];yJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function lJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[b>>2]|0;o[f>>2]=-+o[b+4>>2];k[f+4>>2]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];aKa(e,d);d=k[e+4>>2]|0;k[a>>2]=k[e>>2];k[a+4>>2]=d;r=c;return}function mJa(a){a=a|0;return +(+p[a+8>>3])}function nJa(a){a=a|0;var b=0,c=0,d=0,e=0.0;b=r;r=r+32|0;c=b+16|0;d=b;e=+p[a+8>>3];p[d>>3]=+p[a>>3];p[d+8>>3]=e;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];k[c+8>>2]=k[d+8>>2];k[c+12>>2]=k[d+12>>2];e=+qKa(c);r=b;return +e}function oJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];VJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function pJa(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0,m=0.0,n=0.0;c=+o[b>>2];d=+o[b+4>>2];do if(!(c==0.0&d==0.0)){b=(o[t>>2]=d,k[t>>2]|0);if((b&2147483647|0)==2139095040){e=a+4|0;o[a>>2]=C;o[e>>2]=d;f=e;g=2139095040;h=b;break}b=(o[t>>2]=c,k[t>>2]|0);e=b&2147483647;if(e>>>0>2139095040){i=d-d;j=i/i;l=a+4|0;o[a>>2]=c;o[l>>2]=j;f=l;g=b;h=(o[t>>2]=j,k[t>>2]|0);break}if((e|0)==2139095040){j=d-d;if((b|0)<0){i=+X(+j);m=+XFa(c,d);e=a+4|0;o[a>>2]=i;o[e>>2]=m;l=(o[t>>2]=i,k[t>>2]|0);f=e;g=l;h=(o[t>>2]=m,k[t>>2]|0);break}else{m=+XFa(j,d);l=a+4|0;o[a>>2]=c;o[l>>2]=m;f=l;g=b;h=(o[t>>2]=m,k[t>>2]|0);break}}else if(!(c>=0.0)){m=+Y(+((-c+ +jGa(c,d))*.5));j=+X(+d)/(m*2.0);i=+XFa(m,d);b=a+4|0;o[a>>2]=j;o[b>>2]=i;l=(o[t>>2]=j,k[t>>2]|0);f=b;g=l;h=(o[t>>2]=i,k[t>>2]|0);break}else{i=c;j=d;m=+Y(+((i+ +jGa(i,j))*.5));i=m;n=j/(m*2.0);l=a+4|0;o[a>>2]=i;o[l>>2]=n;b=(o[t>>2]=i,k[t>>2]|0);f=l;g=b;h=(o[t>>2]=n,k[t>>2]|0);break}}else{b=a+4|0;o[a>>2]=0.0;o[b>>2]=d;f=b;g=0;h=(o[t>>2]=d,k[t>>2]|0)}while(0);k[a>>2]=g;k[f>>2]=h;return}function qJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];p[f>>3]=-+p[b+8>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];VJa(e,d);g=-+p[e>>3];p[a>>3]=+p[e+8>>3];p[a+8>>3]=g;r=c;return}function rJa(a){a=a|0;return +(+CHa(+o[a>>2],+o[a+4>>2]))}function sJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];tJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function tJa(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0,j=0,k=0.0,l=0.0;c=+p[b>>3];d=+p[b+8>>3];if((!(c==0.0&d>1.0)?(e=c*c,f=1.0-e-d*d,!(f==0.0)):0)?(g=+ea(+(c*2.0),+f)*.5,f=g/3.141592653589793,c=+(~~(f+(!(f>=0.0)?-.5:.5))|0),f=d+-1.0,h=e+f*f,!(h==0.0)):0){f=d+1.0;d=+ga(+((e+f*f)/h))*.25;h=g-c*3.141592651605606-c*1.9841871479187034e-09-c*1.1442377452219664e-17+d*0.0;c=d+0.0;b=a+8|0;p[a>>3]=h;p[b>>3]=c;i=b;j=a;k=h;l=c}else{b=a+8|0;p[a>>3]=1.e+308;p[b>>3]=1.e+308;i=b;j=a;k=1.e+308;l=1.e+308}p[j>>3]=k;p[i>>3]=l;return}function uJa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,h=0.0,i=0.0,j=0.0;d=+o[b+4>>2];e=+fa(+(+o[b>>2]+-162.88958740234375));b=(o[t>>2]=e,k[t>>2]|0);e=(k[t>>2]=b&8388607|2130706432,+o[t>>2]);f=c+-19+(b>>>23)|0;b=(f|0)/2|0;g=(k[t>>2]=(b<<23)+1065353216,+o[t>>2]);h=(k[t>>2]=(f-b<<23)+1065353216,+o[t>>2]);i=g*(+_(+d)*e)*h;j=g*(+$(+d)*e)*h;o[a>>2]=i;o[a+4>>2]=j;return}function vJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[b+4>>2]|0;k[f>>2]=k[b>>2];k[f+4>>2]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];kKa(e,d);d=k[e>>2]|0;o[a>>2]=-+o[e+4>>2];k[a+4>>2]=d;r=c;return}function wJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];WJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function xJa(a,b){a=a|0;b=b|0;var c=0.0;c=-+p[b+8>>3];p[a>>3]=+p[b>>3];p[a+8>>3]=c;return}function yJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,D=0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];h=b+8|0;i=+p[h>>3];p[t>>3]=g;j=k[t>>2]|0;l=k[t+4>>2]|0;p[t>>3]=i;m=k[t>>2]|0;n=l&2147483647;o=k[t+4>>2]&2147483647;q=n>>>0<2146435072;do if(q&o>>>0<2146435072){if(!(o|m)){s=+lIa(g);u=a+8|0;p[a>>3]=s;p[u>>3]=i;v=u;w=a;x=s;y=i;break}if(n>>>0<1077280768){s=+lIa(g)*+_(+i);z=+$Ha(g)*+$(+i);u=a+8|0;p[a>>3]=s;p[u>>3]=z;v=u;w=a;x=s;y=z;break}if(n>>>0<1082535490){z=+fa(+(+X(+g)))*.5;s=+wGa(z,g)*+_(+i);A=z*+$(+i);u=a+8|0;p[a>>3]=s;p[u>>3]=A;v=u;w=a;x=s;y=A;break}if(n>>>0<1083620266){A=+X(+g);p[f>>3]=A;p[f+8>>3]=i;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];NJa(e,d,-1);A=+p[e>>3];s=+p[e+8>>3];p[b>>3]=A;p[h>>3]=s;z=A*+wGa(1.0,g);u=a+8|0;p[a>>3]=z;p[u>>3]=s;v=u;w=a;x=z;y=s;break}else{s=g*8988465674311579538646525.0e283;z=s*+_(+i);A=s*s*+$(+i);u=a+8|0;p[a>>3]=z;p[u>>3]=A;v=u;w=a;x=z;y=A;break}}else{u=o>>>0>2146435071;if((n|j|0)==0&u){A=i-i;z=+wGa(0.0,g*A);B=a+8|0;p[a>>3]=z;p[B>>3]=A;v=B;w=a;x=z;y=A;break}B=n>>>0>2146435071;if(B&(o|m|0)==0)if(!(l&1048575|j)){D=a+8|0;p[a>>3]=g;p[D>>3]=i;v=D;w=a;x=g;y=i;break}else{A=+wGa(0.0,i);D=a+8|0;p[a>>3]=g;p[D>>3]=A;v=D;w=a;x=g;y=A;break}if(q&u){A=i-i;z=g*A;D=a+8|0;p[a>>3]=A;p[D>>3]=z;v=D;w=a;x=A;y=z;break}if(B?(l&1048575|j|0)==0:0)if(u){z=g*g;A=g*(i-i);u=a+8|0;p[a>>3]=z;p[u>>3]=A;v=u;w=a;x=z;y=A;break}else{A=g*+_(+i);z=+$(+i)*C;u=a+8|0;p[a>>3]=A;p[u>>3]=z;v=u;w=a;x=A;y=z;break}z=i-i;A=g*g*z;s=(g+g)*z;u=a+8|0;p[a>>3]=A;p[u>>3]=s;v=u;w=a;x=A;y=s}while(0);p[w>>3]=x;p[v>>3]=y;r=c;return}function zJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];YJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function AJa(a){a=a|0;return +(+o[a>>2])}function BJa(a){a=a|0;return +(+o[a+4>>2])}function CJa(a){a=a|0;return +(+p[a>>3])}function DJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[b>>2]|0;o[f>>2]=-+o[b+4>>2];k[f+4>>2]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];OJa(e,d);h=-+o[e>>2];k[a>>2]=k[e+4>>2];o[a+4>>2]=h;r=c;return}function EJa(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0,g=0.0,h=0.0;c=+p[b>>3];p[t>>3]=c;if(!((k[t>>2]|0)==0?(k[t+4>>2]&2147483647|0)==2146435072:0)?(d=+p[b+8>>3],p[t>>3]=d,!((k[t>>2]|0)==0?(k[t+4>>2]&2147483647|0)==2146435072:0)):0){b=a+8|0;p[a>>3]=c;p[b>>3]=d;e=b;f=a;g=c;h=d}else{d=+wGa(0.0,c);b=a+8|0;p[a>>3]=C;p[b>>3]=d;e=b;f=a;g=C;h=d}p[f>>3]=g;p[e>>3]=h;return}function FJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];_Ja(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function GJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,g=0,h=0,i=0.0,j=0.0,l=0,m=0,n=0.0,o=0.0,q=0,s=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0;c=r;r=r+16|0;d=c;e=+p[b>>3];f=+p[b+8>>3];do if(e==0.0&f==0.0){b=a+8|0;p[a>>3]=0.0;p[b>>3]=f;g=b;h=a;i=0.0;j=f}else{p[t>>3]=f;if((k[t>>2]|0)==0?(k[t+4>>2]&2147483647|0)==2146435072:0){b=a+8|0;p[a>>3]=C;p[b>>3]=f;g=b;h=a;i=C;j=f;break}p[t>>3]=e;b=k[t>>2]|0;l=k[t+4>>2]|0;m=l&2147483647;if(m>>>0>2146435072|(m|0)==2146435072&b>>>0>0){n=f-f;o=n/n;q=a+8|0;p[a>>3]=e;p[q>>3]=o;g=q;h=a;i=e;j=o;break}if((b|0)==0&(m|0)==2146435072){o=f-f;if((l|0)<0){n=+X(+o);s=+wGa(e,f);l=a+8|0;p[a>>3]=n;p[l>>3]=s;g=l;h=a;i=n;j=s;break}else{s=+wGa(o,f);l=a+8|0;p[a>>3]=e;p[l>>3]=s;g=l;h=a;i=e;j=s;break}}if(!(+X(+e)>=7446288774449766337959726.0e283)?!(+X(+f)>=7446288774449766337959726.0e283):0){u=e;v=f;w=0}else{u=e*.25;v=f*.25;w=1}s=+jGa(u,v);if(!(u>=0.0)){o=+Y(+((s-u)*.5));n=+X(+v)/(o*2.0);x=n;y=+wGa(o,v)}else{o=+Y(+((u+s)*.5));x=o;y=v/(o*2.0)}if(w){o=x*2.0-y*0.0;s=x*0.0+y*2.0;if((o!=o|0.0!=0.0)&(s!=s|0.0!=0.0)){Ab(d|0,+x,+y,2.0,0.0);z=+p[d>>3];A=+p[d+8>>3]}else{z=o;A=s}}else{z=x;A=y}l=a+8|0;p[a>>3]=z;p[l>>3]=A;g=l;h=a;i=z;j=A}while(0);p[h>>3]=i;p[g>>3]=j;r=c;return}function HJa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,p=0.0,q=0.0,s=0.0,t=0.0,u=0.0;d=r;r=r+48|0;e=d+40|0;f=d+32|0;g=d+24|0;h=d+16|0;i=d+8|0;j=d;l=+o[c>>2];m=+o[c+4>>2];c=k[b+4>>2]|0;k[g>>2]=k[b>>2];k[g+4>>2]=c;k[e>>2]=k[g>>2];k[e+4>>2]=k[g+4>>2];nKa(f,e);n=+o[f>>2];p=+o[f+4>>2];q=l*n-m*p;s=m*n+l*p;if((q!=q|0.0!=0.0)&(s!=s|0.0!=0.0)){Ke(h|0,+l,+m,+n,+p);t=+o[h>>2];u=+o[h+4>>2]}else{t=q;u=s}o[j>>2]=t;o[j+4>>2]=u;k[e>>2]=k[j>>2];k[e+4>>2]=k[j+4>>2];oKa(i,e);e=k[i+4>>2]|0;k[a>>2]=k[i>>2];k[a+4>>2]=e;r=d;return}function IJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[b>>2]|0;o[f>>2]=-+o[b+4>>2];k[f+4>>2]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];XJa(e,d);h=-+o[e>>2];k[a>>2]=k[e+4>>2];o[a+4>>2]=h;r=c;return}function JJa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0;d=r;r=r+96|0;e=d+80|0;f=d+64|0;g=d+48|0;h=d+32|0;i=d+16|0;j=d;l=+p[c>>3];m=+p[c+8>>3];n=+p[b+8>>3];p[g>>3]=+p[b>>3];p[g+8>>3]=n;k[e>>2]=k[g>>2];k[e+4>>2]=k[g+4>>2];k[e+8>>2]=k[g+8>>2];k[e+12>>2]=k[g+12>>2];PJa(f,e);n=+p[f>>3];o=+p[f+8>>3];q=l*n-m*o;s=m*n+l*o;if((q!=q|0.0!=0.0)&(s!=s|0.0!=0.0)){Ab(h|0,+l,+m,+n,+o);t=+p[h>>3];u=+p[h+8>>3]}else{t=q;u=s}p[j>>3]=t;p[j+8>>3]=u;k[e>>2]=k[j>>2];k[e+4>>2]=k[j+4>>2];k[e+8>>2]=k[j+8>>2];k[e+12>>2]=k[j+12>>2];_Ja(i,e);u=+p[i+8>>3];p[a>>3]=+p[i>>3];p[a+8>>3]=u;r=d;return}function KJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[b>>2]|0;o[f>>2]=-+o[b+4>>2];k[f+4>>2]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pKa(e,d);h=-+o[e>>2];k[a>>2]=k[e+4>>2];o[a+4>>2]=h;r=c;return}function LJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[b>>2]|0;o[f>>2]=-+o[b+4>>2];k[f+4>>2]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];fKa(e,d);h=-+o[e>>2];k[a>>2]=k[e+4>>2];o[a+4>>2]=h;r=c;return}function MJa(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,g=0,h=0,i=0,j=0.0;c=k[b>>2]|0;d=(k[t>>2]=c,+o[t>>2]);if((c&2147483647|0)!=2139095040?(e=k[b+4>>2]|0,(e&2147483647|0)!=2139095040):0){b=a+4|0;k[a>>2]=c;k[b>>2]=e;f=b;g=a;h=c;i=e}else{j=+XFa(0.0,d);e=a+4|0;o[a>>2]=C;o[e>>2]=j;f=e;g=a;h=2139095040;i=(o[t>>2]=j,k[t>>2]|0)}k[g>>2]=h;k[f>>2]=i;return}function NJa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,g=0,h=0.0,i=0.0,j=0.0,l=0.0;d=+p[b+8>>3];e=+fa(+(+p[b>>3]+-1246.9717778273416));p[t>>3]=e;b=k[t>>2]|0;f=k[t+4>>2]|0;g=Iyb(b|0,f|0,52)|0;k[t>>2]=b;k[t+4>>2]=f&1048575|2145386496;e=+p[t>>3];f=c+-247+g|0;g=(f|0)/2|0;k[t>>2]=0;k[t+4>>2]=(g<<20)+1072693248;h=+p[t>>3];k[t>>2]=0;k[t+4>>2]=(f-g<<20)+1072693248;i=+p[t>>3];j=h*(+_(+d)*e)*i;l=h*(+$(+d)*e)*i;p[a>>3]=j;p[a+8>>3]=l;return}function OJa(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0,j=0,l=0,m=0;c=+o[b>>2];d=+o[b+4>>2];if((!(c==0.0&d>1.0)?(e=c*c,f=1.0-e-d*d,!(f==0.0)):0)?(g=+ea(+(c*2.0),+f)*.5,f=g/3.1415927410125732,c=+(~~(f+(!(f>=0.0)?-.5:.5))|0),f=d+-1.0,h=e+f*f,!(h==0.0)):0){f=d+1.0;d=+ga(+((e+f*f)/h))*.25;h=g-c*3.140625-c*9.675025939941406e-04-c*1.5099579909783765e-07+d*0.0;c=d+0.0;b=a+4|0;o[a>>2]=h;o[b>>2]=c;i=(o[t>>2]=h,k[t>>2]|0);j=b;l=i;m=(o[t>>2]=c,k[t>>2]|0)}else{i=a+4|0;o[a>>2]=9999999680285692465065626.0e13;o[i>>2]=9999999680285692465065626.0e13;j=i;l=2123789977;m=2123789977}k[a>>2]=l;k[j>>2]=m;return}function PJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];h=+p[b+8>>3];p[e>>3]=g;p[e+8>>3]=h;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];k[d+8>>2]=k[e+8>>2];k[d+12>>2]=k[e+12>>2];i=+qKa(d);p[f>>3]=g;p[f+8>>3]=h;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];h=+QJa(d);g=+ga(+i);p[a>>3]=g;p[a+8>>3]=h;r=c;return}function QJa(a){a=a|0;return +(+ea(+(+p[a+8>>3]),+(+p[a>>3])))}function RJa(a,b){a=a|0;b=b|0;var c=0.0;c=-+p[b+8>>3];p[a>>3]=+p[b>>3];p[a+8>>3]=c;return}function SJa(a){a=a|0;return +(+p[a+8>>3])}function TJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];rKa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function UJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];eKa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function VJa(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0,g=0,h=0.0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,u=0,v=0;c=+p[b>>3];d=+p[b+8>>3];p[t>>3]=c;b=k[t>>2]|0;e=k[t+4>>2]|0;f=e&2147483647;do if(f>>>0<=2146435071){p[t>>3]=d;g=k[t+4>>2]&2146435072;if(!(g>>>0<2146435072|(g|0)==2146435072&0<0)){h=d-d;g=a+8|0;p[a>>3]=h;p[g>>3]=h;i=g;j=a;l=h;m=h;break}if(f>>>0>1077280767){h=+fa(+-+X(+c));n=+wGa(1.0,c);o=h*(h*(+$(+d)*4.0*+_(+d)));g=a+8|0;p[a>>3]=n;p[g>>3]=o;i=g;j=a;l=n;m=o;break}else{o=+aa(+d);n=o*o+1.0;h=+lIa(c);q=h*(h*n)+1.0;r=h*(n*+Y(+(h*h+1.0)))/q;h=o/q;g=a+8|0;p[a>>3]=r;p[g>>3]=h;i=g;j=a;l=r;m=h;break}}else{if(e&1048575|b){h=d==0.0?d:c*d;g=a+8|0;p[a>>3]=c;p[g>>3]=h;i=g;j=a;l=c;m=h;break}g=e+-1073741824|0;p[t>>3]=d;if((k[t>>2]|0)==0?(k[t+4>>2]&2147483647|0)==2146435072:0)s=d;else s=+$(+d)*+_(+d);h=+wGa(0.0,s);u=a+8|0;v=a;k[v>>2]=b;k[v+4>>2]=g;p[u>>3]=h;k[t>>2]=b;k[t+4>>2]=g;i=u;j=a;l=+p[t>>3];m=h}while(0);p[j>>3]=l;p[i>>3]=m;return}function WJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];p[f>>3]=-+p[b+8>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];bKa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function XJa(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0.0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,p=0.0,q=0.0,r=0.0;c=+o[b>>2];d=+o[b+4>>2];b=(o[t>>2]=c,k[t>>2]|0);e=b&2147483647;do if(e>>>0<=2139095039){if(((o[t>>2]=d,k[t>>2]|0)&2139095040)>>>0>=2139095040){f=d-d;g=a+4|0;o[a>>2]=f;o[g>>2]=f;h=(o[t>>2]=f,k[t>>2]|0);i=g;j=h;l=h;break}if(e>>>0>1093664767){f=+fa(+-+X(+c));m=+XFa(1.0,c);n=f*(f*(+$(+d)*4.0*+_(+d)));h=a+4|0;o[a>>2]=m;o[h>>2]=n;g=(o[t>>2]=m,k[t>>2]|0);i=h;j=g;l=(o[t>>2]=n,k[t>>2]|0);break}else{n=+aa(+d);m=n*n+1.0;f=+WFa(c);p=f*(f*m)+1.0;q=f*(m*+Y(+(f*f+1.0)))/p;f=n/p;g=a+4|0;o[a>>2]=q;o[g>>2]=f;h=(o[t>>2]=q,k[t>>2]|0);i=g;j=h;l=(o[t>>2]=f,k[t>>2]|0);break}}else{if(b&8388607){f=d==0.0?d:c*d;h=a+4|0;o[a>>2]=c;o[h>>2]=f;i=h;j=b;l=(o[t>>2]=f,k[t>>2]|0);break}h=b+-1073741824|0;if(((o[t>>2]=d,k[t>>2]|0)&2147483647|0)==2139095040)r=d;else r=+$(+d)*+_(+d);f=+XFa(0.0,r);g=a+4|0;k[a>>2]=h;o[g>>2]=f;i=g;j=h;l=(o[t>>2]=f,k[t>>2]|0)}while(0);k[a>>2]=j;k[i>>2]=l;return}function YJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];p[f>>3]=-+p[b+8>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];yJa(e,d);g=-+p[e>>3];p[a>>3]=+p[e+8>>3];p[a+8>>3]=g;r=c;return}function ZJa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];qJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function _Ja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0,j=0,l=0,m=0.0,n=0.0,o=0,q=0,s=0,u=0.0,v=0.0,w=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];h=+p[b+8>>3];p[t>>3]=h;b=k[t+4>>2]&2147483647;do if(b|k[t>>2]){p[t>>3]=g;i=k[t>>2]|0;j=k[t+4>>2]|0;l=j&2147483647;if(!(l|i)){m=+_(+h);n=+$(+h);o=a+8|0;p[a>>3]=m;p[o>>3]=n;q=o;s=a;u=m;v=n;break}if(b>>>0<=2146435071)if((j+-1082535490|0)>>>0<1084067){p[f>>3]=g;p[f+8>>3]=h;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];NJa(e,d,0);n=+p[e>>3];m=+p[e+8>>3];o=a+8|0;p[a>>3]=n;p[o>>3]=m;q=o;s=a;u=n;v=m;break}else{m=+fa(+g);n=m*+_(+h);w=m*+$(+h);o=a+8|0;p[a>>3]=n;p[o>>3]=w;q=o;s=a;u=n;v=w;break}if(!((i|0)==0&(l|0)==2146435072)){w=h-h;l=a+8|0;p[a>>3]=w;p[l>>3]=w;q=l;s=a;u=w;v=w;break}if((j|0)<0){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;q=a+8|0;s=a;u=0.0;v=0.0;break}else{w=h-h;j=a+8|0;p[a>>3]=g;p[j>>3]=w;q=j;s=a;u=g;v=w;break}}else{w=+fa(+g);j=a+8|0;p[a>>3]=w;p[j>>3]=h;q=j;s=a;u=w;v=h}while(0);p[s>>3]=u;p[q>>3]=v;r=c;return}function $Ja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];gKa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function aKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0,l=0,m=0,n=0,p=0.0,q=0.0,s=0,u=0.0,v=0,w=0,x=0.0,y=0,z=0,A=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=+o[b>>2];h=b+4|0;i=+o[h>>2];j=(o[t>>2]=g,k[t>>2]|0);l=j&2147483647;m=(o[t>>2]=i,k[t>>2]|0)&2147483647;n=l>>>0<2139095040;do if(n&m>>>0<2139095040){if(!m){p=+ZHa(g);q=g*i;s=a+4|0;o[a>>2]=p;o[s>>2]=q;u=q;v=s;w=(o[t>>2]=p,k[t>>2]|0);break}if(l>>>0<1091567616){p=+ZHa(g)*+_(+i);q=+WFa(g)*+$(+i);s=a+4|0;o[a>>2]=p;o[s>>2]=q;u=q;v=s;w=(o[t>>2]=p,k[t>>2]|0);break}if(l>>>0<1118925336){p=+fa(+(+X(+g)))*.5;q=p*+_(+i);x=+XFa(p,g)*+$(+i);s=a+4|0;o[a>>2]=q;o[s>>2]=x;u=x;v=s;w=(o[t>>2]=q,k[t>>2]|0);break}if(l>>>0<1128313319){q=+X(+g);o[f>>2]=q;o[f+4>>2]=i;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];uJa(e,d,-1);s=k[e>>2]|0;q=+o[e+4>>2];k[b>>2]=s;o[h>>2]=q;x=q*+XFa(1.0,g);y=a+4|0;k[a>>2]=s;o[y>>2]=x;u=x;v=y;w=s;break}else{x=g*1701411834604692317316873.0e14;q=x*x*+_(+i);p=x*+$(+i);s=a+4|0;o[a>>2]=q;o[s>>2]=p;u=p;v=s;w=(o[t>>2]=q,k[t>>2]|0);break}}else{s=m>>>0>2139095039;if((l|0)==0&s){q=i-i;p=+XFa(0.0,g*q);y=a+4|0;o[a>>2]=q;o[y>>2]=p;u=p;v=y;w=(o[t>>2]=q,k[t>>2]|0);break}y=l>>>0>2139095039;if(y&(m|0)==0){q=g*g;if(!(j&8388607)){p=i*+XFa(0.0,g);z=a+4|0;o[a>>2]=q;o[z>>2]=p;u=p;v=z;w=(o[t>>2]=q,k[t>>2]|0);break}else{p=+XFa(0.0,(g+g)*i);z=a+4|0;o[a>>2]=q;o[z>>2]=p;u=p;v=z;w=(o[t>>2]=q,k[t>>2]|0);break}}if(n&s){q=i-i;p=g*q;z=a+4|0;o[a>>2]=q;o[z>>2]=p;u=p;v=z;w=(o[t>>2]=q,k[t>>2]|0);break}q=g*g;if(!(y&(j&8388607|0)==0)){p=i-i;x=q*p;A=(g+g)*p;y=a+4|0;o[a>>2]=x;o[y>>2]=A;u=A;v=y;w=(o[t>>2]=x,k[t>>2]|0);break}if(s){x=g*(i-i);s=a+4|0;o[a>>2]=q;o[s>>2]=x;u=x;v=s;w=(o[t>>2]=q,k[t>>2]|0);break}else{x=q*+_(+i);q=g*+$(+i);s=a+4|0;o[a>>2]=x;o[s>>2]=q;u=q;v=s;w=(o[t>>2]=x,k[t>>2]|0);break}}while(0);k[a>>2]=w;o[v>>2]=u;r=c;return}function bKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,u=0.0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0,C=0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];h=b+8|0;i=+p[h>>3];p[t>>3]=g;j=k[t>>2]|0;l=k[t+4>>2]|0;p[t>>3]=i;m=k[t>>2]|0;n=l&2147483647;o=k[t+4>>2]&2147483647;q=n>>>0<2146435072;do if(q&o>>>0<2146435072){if(!(o|m)){s=+$Ha(g);u=g*i;v=a+8|0;p[a>>3]=s;p[v>>3]=u;w=v;x=a;y=s;z=u;break}if(n>>>0<1077280768){u=+$Ha(g)*+_(+i);s=+lIa(g)*+$(+i);v=a+8|0;p[a>>3]=u;p[v>>3]=s;w=v;x=a;y=u;z=s;break}if(n>>>0<1082535490){s=+fa(+(+X(+g)))*.5;u=s*+_(+i);A=+wGa(s,g)*+$(+i);v=a+8|0;p[a>>3]=u;p[v>>3]=A;w=v;x=a;y=u;z=A;break}if(n>>>0<1083620266){A=+X(+g);p[f>>3]=A;p[f+8>>3]=i;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];NJa(e,d,-1);A=+p[e>>3];u=+p[e+8>>3];p[b>>3]=A;p[h>>3]=u;s=u*+wGa(1.0,g);v=a+8|0;p[a>>3]=A;p[v>>3]=s;w=v;x=a;y=A;z=s;break}else{s=g*8988465674311579538646525.0e283;A=s*s*+_(+i);u=s*+$(+i);v=a+8|0;p[a>>3]=A;p[v>>3]=u;w=v;x=a;y=A;z=u;break}}else{v=o>>>0>2146435071;if((n|j|0)==0&v){u=i-i;A=+wGa(0.0,g*u);B=a+8|0;p[a>>3]=u;p[B>>3]=A;w=B;x=a;y=u;z=A;break}B=n>>>0>2146435071;if(B&(o|m|0)==0){A=g*g;if(!(l&1048575|j)){u=i*+wGa(0.0,g);C=a+8|0;p[a>>3]=A;p[C>>3]=u;w=C;x=a;y=A;z=u;break}else{u=+wGa(0.0,(g+g)*i);C=a+8|0;p[a>>3]=A;p[C>>3]=u;w=C;x=a;y=A;z=u;break}}if(q&v){u=i-i;A=g*u;C=a+8|0;p[a>>3]=u;p[C>>3]=A;w=C;x=a;y=u;z=A;break}if(B?(l&1048575|j|0)==0:0){A=g*g;if(v){u=g*(i-i);v=a+8|0;p[a>>3]=A;p[v>>3]=u;w=v;x=a;y=A;z=u;break}else{u=A*+_(+i);A=g*+$(+i);v=a+8|0;p[a>>3]=u;p[v>>3]=A;w=v;x=a;y=u;z=A;break}}A=i-i;u=g*g*A;s=(g+g)*A;v=a+8|0;p[a>>3]=u;p[v>>3]=s;w=v;x=a;y=u;z=s}while(0);p[x>>3]=y;p[w>>3]=z;r=c;return}function cKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];GJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function dKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];p[f>>3]=-+p[b+8>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];rKa(e,d);g=-+p[e>>3];p[a>>3]=+p[e+8>>3];p[a+8>>3]=g;r=c;return}function eKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];gKa(e,d);g=+p[e>>3];p[a>>3]=-+p[e+8>>3];p[a+8>>3]=g;r=c;return}function fKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0,l=0,m=0,n=0,p=0,q=0.0,s=0,u=0,v=0,w=0,x=0.0,y=0,z=0.0,A=0,B=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=+o[b>>2];h=b+4|0;i=+o[h>>2];j=(o[t>>2]=g,k[t>>2]|0);l=(o[t>>2]=i,k[t>>2]|0);m=j&2147483647;n=l&2147483647;p=m>>>0<2139095040;do if(p&n>>>0<2139095040){if(!n){q=+WFa(g);s=a+4|0;o[a>>2]=q;o[s>>2]=i;u=s;v=(o[t>>2]=q,k[t>>2]|0);w=l;break}if(m>>>0<1091567616){q=+WFa(g)*+_(+i);x=+ZHa(g)*+$(+i);s=a+4|0;o[a>>2]=q;o[s>>2]=x;y=(o[t>>2]=q,k[t>>2]|0);u=s;v=y;w=(o[t>>2]=x,k[t>>2]|0);break}if(m>>>0<1118925336){x=+fa(+(+X(+g)))*.5;q=+XFa(x,g)*+_(+i);z=x*+$(+i);y=a+4|0;o[a>>2]=q;o[y>>2]=z;s=(o[t>>2]=q,k[t>>2]|0);u=y;v=s;w=(o[t>>2]=z,k[t>>2]|0);break}if(m>>>0<1128313319){z=+X(+g);o[f>>2]=z;o[f+4>>2]=i;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];uJa(e,d,-1);s=k[e>>2]|0;y=k[e+4>>2]|0;k[b>>2]=s;k[h>>2]=y;z=(k[t>>2]=s,+o[t>>2]);q=z*+XFa(1.0,g);s=a+4|0;o[a>>2]=q;k[s>>2]=y;u=s;v=(o[t>>2]=q,k[t>>2]|0);w=y;break}else{q=g*1701411834604692317316873.0e14;z=q*+_(+i);x=q*q*+$(+i);y=a+4|0;o[a>>2]=z;o[y>>2]=x;s=(o[t>>2]=z,k[t>>2]|0);u=y;v=s;w=(o[t>>2]=x,k[t>>2]|0);break}}else{s=n>>>0>2139095039;if((m|0)==0&s){x=i-i;z=+XFa(0.0,g*x);y=a+4|0;o[a>>2]=z;o[y>>2]=x;A=(o[t>>2]=z,k[t>>2]|0);u=y;v=A;w=(o[t>>2]=x,k[t>>2]|0);break}A=m>>>0>2139095039;if(A&(n|0)==0)if(!(j&8388607)){y=a+4|0;o[a>>2]=g;o[y>>2]=i;u=y;v=j;w=l;break}else{x=+XFa(0.0,i);y=a+4|0;o[a>>2]=g;o[y>>2]=x;u=y;v=j;w=(o[t>>2]=x,k[t>>2]|0);break}if(p&s){x=i-i;z=g*x;y=a+4|0;o[a>>2]=x;o[y>>2]=z;B=(o[t>>2]=x,k[t>>2]|0);u=y;v=B;w=(o[t>>2]=z,k[t>>2]|0);break}if(!(A&(j&8388607|0)==0)){z=i-i;x=g*g*z;q=(g+g)*z;A=a+4|0;o[a>>2]=x;o[A>>2]=q;B=(o[t>>2]=x,k[t>>2]|0);u=A;v=B;w=(o[t>>2]=q,k[t>>2]|0);break}if(s){q=g*g;x=g*(i-i);s=a+4|0;o[a>>2]=q;o[s>>2]=x;B=(o[t>>2]=q,k[t>>2]|0);u=s;v=B;w=(o[t>>2]=x,k[t>>2]|0);break}else{x=g*+_(+i);q=+$(+i)*C;B=a+4|0;o[a>>2]=x;o[B>>2]=q;s=(o[t>>2]=x,k[t>>2]|0);u=B;v=s;w=(o[t>>2]=q,k[t>>2]|0);break}}while(0);k[a>>2]=v;k[u>>2]=w;r=c;return}function gKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];rKa(e,d);g=-+p[e+8>>3];p[a>>3]=1.5707963267948966-+p[e>>3];p[a+8>>3]=g;r=c;return}function hKa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0;d=r;r=r+80|0;e=d+64|0;f=d+48|0;g=d+32|0;h=d+16|0;i=d;j=+p[b+8>>3];l=+p[c>>3];m=+p[c+8>>3];p[h>>3]=+p[b>>3];p[h+8>>3]=j;p[i>>3]=l;p[i+8>>3]=m;k[f>>2]=k[h>>2];k[f+4>>2]=k[h+4>>2];k[f+8>>2]=k[h+8>>2];k[f+12>>2]=k[h+12>>2];k[e>>2]=k[i>>2];k[e+4>>2]=k[i+4>>2];k[e+8>>2]=k[i+8>>2];k[e+12>>2]=k[i+12>>2];JJa(g,f,e);m=+p[g+8>>3];p[a>>3]=+p[g>>3];p[a+8>>3]=m;r=d;return}function iKa(a){a=a|0;return +(+p[a>>3])}function jKa(a,b){a=a|0;b=b|0;var c=0.0;c=-+o[b+4>>2];k[a>>2]=k[b>>2];o[a+4>>2]=c;return}function kKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[b+4>>2]|0;k[f>>2]=k[b>>2];k[f+4>>2]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pKa(e,d);h=-+o[e+4>>2];o[a>>2]=1.5707963705062866-+o[e>>2];o[a+4>>2]=h;r=c;return}function lKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];EJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function mKa(a){a=a|0;return +(+ea(+(+o[a+4>>2]),+(+o[a>>2])))}function nKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[b>>2]|0;h=k[b+4>>2]|0;k[e>>2]=g;k[e+4>>2]=h;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];i=+rJa(d);k[f>>2]=g;k[f+4>>2]=h;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];j=+mKa(d);l=+ga(+i);o[a>>2]=l;o[a+4>>2]=j;r=c;return}function oKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0,j=0,l=0,m=0.0,n=0.0,p=0,q=0,s=0,u=0,v=0,w=0,x=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=+o[b>>2];h=+o[b+4>>2];b=(o[t>>2]=h,k[t>>2]|0);i=b&2147483647;do if(i){j=(o[t>>2]=g,k[t>>2]|0);l=j&2147483647;if(!l){m=+_(+h);n=+$(+h);p=a+4|0;o[a>>2]=m;o[p>>2]=n;q=(o[t>>2]=m,k[t>>2]|0);s=p;u=q;v=(o[t>>2]=n,k[t>>2]|0);break}if(i>>>0<=2139095039)if((j+-1118925336|0)>>>0<9342557){o[f>>2]=g;o[f+4>>2]=h;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];uJa(e,d,0);q=k[e>>2]|0;p=k[e+4>>2]|0;w=a+4|0;k[a>>2]=q;k[w>>2]=p;s=w;u=q;v=p;break}else{n=+fa(+g);m=n*+_(+h);x=n*+$(+h);p=a+4|0;o[a>>2]=m;o[p>>2]=x;q=(o[t>>2]=m,k[t>>2]|0);s=p;u=q;v=(o[t>>2]=x,k[t>>2]|0);break}if((l|0)!=2139095040){x=h-h;l=a+4|0;o[a>>2]=x;o[l>>2]=x;q=(o[t>>2]=x,k[t>>2]|0);s=l;u=q;v=q;break}if((j|0)<0){q=a+4|0;o[a>>2]=0.0;o[q>>2]=0.0;s=q;u=0;v=0;break}else{x=h-h;q=a+4|0;o[a>>2]=g;o[q>>2]=x;s=q;u=j;v=(o[t>>2]=x,k[t>>2]|0);break}}else{x=+fa(+g);j=a+4|0;o[a>>2]=x;o[j>>2]=h;s=j;u=(o[t>>2]=x,k[t>>2]|0);v=b}while(0);k[a>>2]=u;k[s>>2]=v;r=c;return}function pKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0;c=r;r=r+48|0;d=c+32|0;e=c+24|0;f=c+16|0;g=c+8|0;h=c;i=+o[b>>2];j=+o[b+4>>2];o[f>>2]=1.0-(i-j)*(i+j);o[f+4>>2]=i*-2.0*j;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pJa(e,d);l=i+ +o[e+4>>2];o[h>>2]=+o[e>>2]-j;o[h+4>>2]=l;k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];nKa(g,d);d=k[g+4>>2]|0;k[a>>2]=k[g>>2];k[a+4>>2]=d;r=c;return}function qKa(a){a=a|0;return +(+jGa(+p[a>>3],+p[a+8>>3]))}function rKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0;c=r;r=r+80|0;d=c+64|0;e=c+48|0;f=c+32|0;g=c+16|0;h=c;i=+p[b>>3];j=+p[b+8>>3];p[f>>3]=1.0-(i-j)*(i+j);p[f+8>>3]=i*-2.0*j;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];GJa(e,d);l=i+ +p[e+8>>3];p[h>>3]=+p[e>>3]-j;p[h+8>>3]=l;k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];k[d+8>>2]=k[h+8>>2];k[d+12>>2]=k[h+12>>2];PJa(g,d);l=+p[g+8>>3];p[a>>3]=+p[g>>3];p[a+8>>3]=l;r=c;return}function sKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b>>3];p[f>>3]=-+p[b+8>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];tJa(e,d);g=-+p[e>>3];p[a>>3]=+p[e+8>>3];p[a+8>>3]=g;r=c;return}function tKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];PJa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function uKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];sKa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function vKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;g=+p[b+8>>3];p[f>>3]=+p[b>>3];p[f+8>>3]=g;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[d+12>>2]=k[f+12>>2];bKa(e,d);g=+p[e+8>>3];p[a>>3]=+p[e>>3];p[a+8>>3]=g;r=c;return}function wKa(a){a=a|0;var b=0,c=0,d=0,e=0.0;b=r;r=r+32|0;c=b+16|0;d=b;e=+p[a+8>>3];p[d>>3]=+p[a>>3];p[d+8>>3]=e;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];k[c+8>>2]=k[d+8>>2];k[c+12>>2]=k[d+12>>2];e=+QJa(c);r=b;return +e}function xKa(a,b,c){a=a|0;b=b|0;c=c|0;return rMa(a,b)|0}function yKa(a,b,c){a=a|0;b=b|0;c=c|0;return tMa(a,b)|0}function zKa(a,b){a=a|0;b=b|0;return tMa(a,b)|0}function AKa(a,b){a=a|0;b=b|0;return 311319}function BKa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(((i[b>>0]|0)!=0?(YLa(b,332342)|0)!=0:0)?(YLa(b,311327)|0)!=0:0)d=0;else if(!c)d=zYa(1,4)|0;else d=c;return d|0}function CKa(a,b){a=a|0;b=b|0;return VIa(a)|0}function DKa(a,b){a=a|0;b=b|0;return UIa(a)|0}function EKa(a,b){a=a|0;b=b|0;return (a+-48|0)>>>0<10|0}function FKa(a,b){a=a|0;b=b|0;return SIa(a)|0}function GKa(a,b){a=a|0;b=b|0;return RIa(a)|0}function HKa(a,b){a=a|0;b=b|0;return XIa(a)|0}function IKa(a,b){a=a|0;b=b|0;return WIa(a)|0}function JKa(a,b){a=a|0;b=b|0;var c=0,d=0;c=GWa(a)|0;if(((c|0)!=-1?(a=GWa(b)|0,(a|0)!=-1):0)?(l[311333+c>>0]|0)<=207:0)d=a<<16|c;else{c=HSa()|0;k[c>>2]=22;d=-1}return d|0}function KKa(a){a=a|0;return 0}function LKa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;f=r;r=r+32|0;g=f;h=f+16|0;n=f+12|0;o=f+8|0;p=f+20|0;q=a;a=q&65535;s=311333+(q>>>16)|0;q=s+1|0;t=311333+a|0;u=t+1|0;v=g;k[v>>2]=0;k[v+4>>2]=0;v=i[s>>0]|0;s=i[t>>0]|0;a:do if(((b|0)!=0?(t=k[b>>2]|0,(t|0)!=0):0)?(w=k[c>>2]|0,(w|0)!=0):0){x=v&255;y=x+128|0;z=x&3;A=z^1;B=z^2;C=z^3;D=x&1;E=D^1;F=(x&254|0)==196;G=v<<24>>24==-38;H=v<<24>>24==-40;I=s&255;J=I+-192|0;K=J>>>0>8;L=a;M=315358+J|0;J=I+128|0;N=128-I|0;O=(N|0)==0;P=(v&-2)<<24>>24==-60;Q=I&1;R=Q^1;S=I&3;T=S^1;U=S^2;V=S^3;W=(x+-192|0)>>>0<7;X=t;t=w;w=0;b:while(1){Y=i[X>>0]|0;Z=Y&255;c:do if(Y<<24>>24<0|W){do switch(x|0){case 199:{_=84;break b;break}case 200:{$=uVa(h,X,t,g)|0;switch($|0){case -1:{_=84;break b;break}case -2:{aa=112;break b;break}case 0:{ba=1;break}default:ba=$}ca=k[h>>2]|0;da=ba;aa=86;break c;break}case 198:{if(t>>>0<4){aa=112;break b}ea=k[X>>2]|0;aa=14;break}case 195:case 192:{if(t>>>0<4){aa=112;break b}ea=l[X+A>>0]<<16|l[X+z>>0]<<24|l[X+B>>0]<<8|l[X+C>>0];aa=14;break}case 193:case 194:case 197:case 196:{if(t>>>0<2){aa=112;break b}$=l[X+D>>0]<<8;fa=$|l[X+E>>0];switch($&64512|0){case 56320:{_=84;break b;break}case 55296:break;default:{ca=fa;da=2;aa=86;break c}}if(F){_=84;break b}if(t>>>0<4){aa=112;break b}$=X+2|0;ga=(l[$+D>>0]<<8|l[$+E>>0])+-56320|0;if(ga>>>0>1023){_=84;break b}ca=(fa<<10)+-56557568+ga|0;da=4;aa=86;break c;break}case 209:{if((Z+-161|0)>>>0<63){ca=Z+65216|0;da=1;aa=86;break c}if(t>>>0<2){aa=112;break b}ga=i[X+1>>0]|0;fa=ga&255;$=Z+-129|0;if($>>>0<31)ha=$;else{if((Z&240|0)!=224){_=84;break b}ha=Z+-193|0}$=ha<<1;ia=fa+-64|0;if(ia>>>0<95){if(ga<<24>>24==127){_=84;break b}ja=$;ka=ia+(ga<<24>>24>>7<<24>>24)|0}else{ga=fa+-159|0;ia=ga>>>0<94;ja=$|ia&1;ka=ia?ga:fa}fa=j[80206+(ja*188|0)+(ka<<1)>>1]|0;if(!(fa<<16>>16)){_=84;break b}else{ca=fa&65535;da=2;aa=86;break c}break}case 208:{if(t>>>0<2){aa=112;break b}fa=l[X+1>>0]|0;if(Y<<24>>24!=-114){ga=Z+-161|0;ia=fa+-161|0;if(ga>>>0>83|ia>>>0>93){_=84;break b}$=j[80206+(ga*188|0)+(ia<<1)>>1]|0;if(!($<<16>>16)){_=84;break b}else{ca=$&65535;da=2;aa=86;break c}}else{if((fa+-161|0)>>>0>62){_=84;break b}ca=fa+65216|0;da=2;aa=86;break c}break}case 218:{if((Y&255)<161){_=84;break b}break}case 216:case 217:break;case 224:{if(t>>>0<2){aa=112;break b}fa=l[X+1>>0]|0;$=fa+-64|0;if($>>>0>190|(fa+-127|0)>>>0<34){_=84;break b}ia=$>>>0>62?fa+-98|0:$;$=Z+-161|0;if($>>>0<=88){fa=m[154222+($*314|0)+(ia<<1)>>1]|0;if(($|0)==39?($=ia+-58|0,$>>>0<9):0)la=261>>>($&511)&511;else la=0;$=la<<17&131072|fa;if(!$){_=84;break b}else{ca=$;da=2;aa=86;break c}}$=Z+-135|0;if($>>>0>119){_=84;break b}fa=ia+(((Y&255)<161?$:Z+-224|0)*157|0)|0;$=m[143878+(fa<<1)>>1]|0;ia=$|(((m[143878+((fa>>>4)+4867<<1)>>1]|0)>>>(fa&15)|0)%2|0)<<17;if((ia&-65792|0)!=56320)if(!ia){_=84;break b}else{ca=ia;da=2;aa=86;break c}if(K)ma=2;else ma=i[M>>0]|0;if(ma>>>0>(k[e>>2]|0)>>>0){_=7;break b}k[n>>2]=315368+($&255);k[o>>2]=4;na=2;oa=(LKa(L,n,o,d,e)|0)+w|0;break c;break}case 232:{if(t>>>0<2){aa=112;break b}$=i[X+1>>0]|0;ia=$&255;fa=Z+-161|0;ga=ia+-161|0;if(!(fa>>>0>92|ga>>>0>93)){pa=j[182168+(fa*188|0)+(ga<<1)>>1]|0;if(!(pa<<16>>16)){_=84;break b}else{ca=pa&65535;da=2;aa=86;break c}}pa=Z+-129|0;if(pa>>>0>92){_=84;break b}if(pa>>>0>68&($&255)>82){_=84;break b}$=ia+-65|0;do if($>>>0<26)qa=$;else{if((ia+-97|0)>>>0<26){qa=ia+-71|0;break}if((ia+-129|0)>>>0>=126){_=84;break b}qa=ia+-77|0}while(0);ia=(pa>>>0<32?pa*178|0:(fa*84|0)+5696|0)+44032+qa|0;if(ia>>>0<44032){ca=ia;da=2;aa=86;break c}else{ra=ia;sa=44032}while(1){ia=ra-sa|0;$=0;ga=0;while(1){ta=0;ua=ga;while(1){va=(((m[182168+($*188|0)+(ta<<1)>>1]|0)-sa|0)>>>0<=ia>>>0&1)+ua|0;ta=ta+1|0;if((ta|0)==94){wa=va;break}else ua=va}$=$+1|0;if(($|0)==93){xa=wa;break}else ga=wa}sa=ra+1|0;ga=xa+ra|0;if(ga>>>0>>0){ca=ga;da=2;aa=86;break c}else ra=ga}break}default:{if(Z>>>0>>0){ca=Z;da=1;aa=86;break c}fa=Z-y|0;pa=(fa*5|0)>>>2;ga=fa<<1&6;fa=l[q+(pa+1)>>0]<<8-ga&1023|(l[q+pa>>0]|0)>>>ga;ga=(fa|0)==0?Z:m[199652+(fa<<1)>>1]|0;if((ga|0)==1){_=84;break b}else{ca=ga;da=1;aa=86;break c}}}while(0);if((aa|0)==14){aa=0;if(ea>>>0>1114111|(ea&-2048|0)==55296){_=84;break b}else{ca=ea;da=4;aa=86;break}}ga=Z+-129|0;if(ga>>>0>125){_=84;break b}if(t>>>0<2){aa=112;break b}fa=i[X+1>>0]|0;pa=fa&255;if(G&(fa&255)<161){_=84;break b}$=pa+-64|0;if(!(fa<<24>>24==127|$>>>0>190)){ca=m[95998+(ga*380|0)+(($>>>0>63?pa+-65|0:$)<<1)>>1]|0;da=2;aa=86;break}if(!(H&(pa+-48|0)>>>0<10)){_=84;break b}if(t>>>0<4){aa=112;break b}$=(l[X+2>>0]|0)+-129|0;if($>>>0>126){_=84;break b}fa=(l[X+3>>0]|0)+-48|0;if(fa>>>0>9){_=84;break b}ia=((pa+(ga*10|0)|0)*1260|0)+-60352+($*10|0)+fa|0;fa=0;while(1){$=ia-fa|0;ga=0;pa=0;while(1){ua=0;ta=pa;while(1){va=(((m[95998+(ga*380|0)+(ua<<1)>>1]|0)-fa|0)>>>0<=$>>>0&1)+ta|0;ua=ua+1|0;if((ua|0)==190){ya=va;break}else ta=va}ga=ga+1|0;if((ga|0)==126){za=ya;break}else pa=ya}fa=ia+1|0;pa=za+ia|0;if(pa>>>0>>0){ca=pa;da=4;aa=86;break}else ia=pa}}else{ca=Z;da=1;aa=86}while(0);d:do if((aa|0)==86){aa=0;switch(I|0){case 198:{if((k[e>>2]|0)>>>0<4){_=7;break b}Z=k[d>>2]|0;k[Z>>2]=ca;k[d>>2]=Z+4;k[e>>2]=(k[e>>2]|0)+-4;na=da;oa=w;break d;break}case 200:{if((k[e>>2]|0)>>>0<4){Z=DVa(p,ca)|0;if((k[e>>2]|0)>>>0>>0){aa=92;break b}Y=k[d>>2]|0;Dyb(Y|0,p|0,Z|0)|0;Aa=Y;Ba=Z}else{Z=k[d>>2]|0;Aa=Z;Ba=DVa(Z,ca)|0}k[d>>2]=Aa+Ba;k[e>>2]=(k[e>>2]|0)-Ba;na=da;oa=w;break d;break}case 199:{if(ca>>>0>127){Ca=w;aa=96}else{Da=ca;Ea=w}break}case 193:case 194:case 197:case 196:{if(P|ca>>>0<65536){Z=ca>>>0>65535?65533:ca;if((k[e>>2]|0)>>>0<2){_=7;break b}Y=k[d>>2]|0;i[Y+Q>>0]=Z>>>8;i[Y+R>>0]=Z;k[d>>2]=Y+2;k[e>>2]=(k[e>>2]|0)+-2;na=da;oa=w;break d}else{if((k[e>>2]|0)>>>0<4){_=7;break b}Y=ca+-65536|0;Z=k[d>>2]|0;i[Z+Q>>0]=Y>>>18|216;i[Z+R>>0]=Y>>>10;ia=Z+2|0;i[ia+Q>>0]=Y>>>8&3|220;i[ia+R>>0]=Y;k[d>>2]=Z+4;k[e>>2]=(k[e>>2]|0)+-4;na=da;oa=w;break d}break}case 195:case 192:{if((k[e>>2]|0)>>>0<4){_=7;break b}Z=k[d>>2]|0;i[Z+S>>0]=ca>>>24;i[Z+T>>0]=ca>>>16;i[Z+U>>0]=ca>>>8;i[Z+V>>0]=ca;k[d>>2]=Z+4;k[e>>2]=(k[e>>2]|0)+-4;na=da;oa=w;break d;break}default:{Da=ca;Ea=w}}e:while(1){if((aa|0)==96){aa=0;Da=42;Ea=Ca+1|0}if(!(k[e>>2]|0)){_=7;break b}if(Da>>>0>>0){Fa=Da;break}if(O){Ca=Ea;aa=96;continue}else Ga=0;while(1){Z=(Ga*5|0)>>>2;Y=Ga<<1&6;if((Da|0)==(m[199652+((l[u+(Z+1)>>0]<<8-Y&1023|(l[u+Z>>0]|0)>>>Y)<<1)>>1]|0)){Ha=Ga;aa=102;break e}Y=Ga+1|0;if(Y>>>0>>0)Ga=Y;else{Ca=Ea;aa=96;continue e}}}if((aa|0)==102){aa=0;Fa=Ha+128|0}Y=k[d>>2]|0;k[d>>2]=Y+1;i[Y>>0]=Fa;k[e>>2]=(k[e>>2]|0)+-1;na=da;oa=Ea}while(0);X=(k[b>>2]|0)+na|0;k[b>>2]=X;Y=t;t=t-na|0;k[c>>2]=t;if((Y|0)==(na|0)){Ia=oa;break a}else w=oa}if((aa|0)==92)_=7;else if((aa|0)==112)_=22;w=HSa()|0;k[w>>2]=_;Ia=-1}else Ia=0;while(0);r=f;return Ia|0}function MKa(a,b){a=a|0;b=b|0;return AIa(a)|0}function NKa(a,b){a=a|0;b=b|0;return xIa(a)|0}function OKa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=$La(b)|0;if(d>>>0>=c>>>0){if(c){e=c+-1|0;_La(a,b,e)|0;k[a+(e<<2)>>2]=0}}else _La(a,b,d+1|0)|0;return d|0}function PKa(a,b,c){a=a|0;b=b|0;c=c|0;return OKa(a,b,c,0)|0}function QKa(a){a=a|0;return 0}function RKa(a,b){a=a|0;b=b|0;return FIa(a)|0}function SKa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;b=a&65535;a:do if((a|0)!=14){switch(a>>16|0){case 1:{if(b>>>0>1){c=0;break a}else d=315720;break}case 2:{if(b>>>0>49){c=0;break a}else d=315404;break}case 4:return ((b|0)==0?329672:0)|0;case 5:{if(b>>>0>3){c=0;break a}else d=315385;break}default:{c=0;break a}}if(!b)c=d;else{e=b;f=d;while(1){g=f;while(1){h=g+1|0;if(!(i[g>>0]|0)){j=h;break}else g=h}e=e+-1|0;if(!e){c=j;break}else f=j}}}else c=315732;while(0);return c|0}function TKa(a){a=a|0;return SKa(a,0)|0}function UKa(a,b){a=a|0;b=b|0;return BIa(a)|0}function VKa(a,b){a=a|0;b=b|0;return $Ia(a)|0}function WKa(a,b){a=a|0;b=b|0;return KIa(a)|0}function XKa(a){a=a|0;var b=0;b=zYa(1,4)|0;if((a|0)!=(-1|0)&(b|0)!=0)k[b>>2]=k[a>>2];return b|0}function YKa(a,b){a=a|0;b=b|0;return CIa(a)|0}function ZKa(a){a=a|0;var b=0,c=0;b=(pf()|0)+176|0;c=k[b>>2]|0;if(a)k[b>>2]=a;return c|0}function _Ka(a,b){a=a|0;b=b|0;return fJa(a)|0}function $Ka(a,b){a=a|0;b=b|0;return TIa(a)|0}function aLa(a){a=a|0;return a|0}function bLa(a,b){a=a|0;b=b|0;return b|0}function cLa(a,b,c){a=a|0;b=b|0;c=c|0;return b|0}function dLa(a,b,c){a=a|0;b=b|0;c=c|0;return ((c|0)==1?a:b)|0}function eLa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ((d|0)==1?b:c)|0}function fLa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ((d|0)==1?b:c)|0}function gLa(a){a=a|0;var b=0;if(((a|0)!=0?(i[a>>0]|0)!=0:0)?(YLa(a,315723)|0)!=0:0){a=HSa()|0;k[a>>2]=22;b=0}else b=315723;return b|0}function hLa(a,b){a=a|0;b=b|0;var c=0,d=0;if((a|0)!=0?(i[a>>0]|0)!=0:0)if(b)if((i[b>>0]|0)==47?(i[b+1>>0]|0)==0:0)c=317633;else d=6;else c=317633;else d=6;if((d|0)==6){d=HSa()|0;k[d>>2]=22;c=0}return c|0}function iLa(a,b){a=a|0;b=b|0;var c=0;if((a|0)!=0?(i[a>>0]|0)!=0:0){if((b|0)!=0?(rMa(b,315732)|0)!=0:0)c=5}else c=5;if((c|0)==5){c=HSa()|0;k[c>>2]=22}return 0}function jLa(a,b){a=a|0;b=b|0;return yIa(a)|0}function kLa(a,b){a=a|0;b=b|0;return wIa(a)|0}function lLa(){return 48820}function mLa(a,b){a=a|0;b=b|0;return dJa(a)|0}function nLa(a,b){a=a|0;b=b|0;return MIa(a)|0}function oLa(a,b,c){a=a|0;b=b|0;c=c|0;return _Ia(a,b)|0}function pLa(a,b){a=a|0;b=b|0;return -1|0}function qLa(a,b){a=a|0;b=b|0;return ZIa(a)|0}function rLa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=RLa(b)|0;if(d>>>0>>0)OLa(a,b)|0;return d|0}function sLa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=RLa(b)|0;if(d>>>0>>0)OLa(a,b)|0;return d|0}function tLa(a,b){a=a|0;b=b|0;return GIa(a)|0}function uLa(a){a=a|0;yYa(a);return}function vLa(a,b,c){a=a|0;b=b|0;c=c|0;return zIa(a,b)|0}function wLa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return OMa(a,b,c)|0}function xLa(a,b){a=a|0;b=b|0;return eJa(a)|0}function yLa(a,b,c){a=a|0;b=b|0;c=c|0;return YLa(a,b)|0}function zLa(a,b){a=a|0;b=b|0;return YLa(a,b)|0}function ALa(a,b){a=a|0;b=b|0;return JIa(a)|0}function BLa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return d|0}function CLa(a,b){a=a|0;b=b|0;return vIa(a)|0}function DLa(a,b){a=a|0;b=b|0;return cJa(a)|0}function ELa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;c=r;r=r+16|0;f=c;k[f>>2]=e;e=HWa(a,b,d,f)|0;r=c;return e|0}function FLa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=d;d=HWa(a,b,c,f)|0;r=e;return d|0}function GLa(a,b){a=a|0;b=b|0;return HIa(a)|0}function HLa(a,b){a=a|0;b=b|0;return YIa(a)|0}function ILa(a,b){a=a|0;b=b|0;return PIa(a)|0}function JLa(a,b){a=a|0;b=b|0;return ISa(a)|0}function KLa(a,b){a=a|0;b=b|0;return IIa(a)|0}function LLa(a,b){a=a|0;b=b|0;return oMa(a,b,(RLa(a)|0)+1|0)|0}function MLa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+32|0;d=c;e=i[b>>0]|0;if(e<<24>>24!=0?(i[b+1>>0]|0)!=0:0){k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[d+24>>2]=0;k[d+28>>2]=0;f=b;b=e;do{g=d+(((b&255)>>>5&255)<<2)|0;k[g>>2]=k[g>>2]|1<<(b&31);f=f+1|0;b=i[f>>0]|0}while(b<<24>>24!=0);b=i[a>>0]|0;a:do if(!(b<<24>>24))h=a;else{f=a;g=b;while(1){if(k[d+(((g&255)>>>5&255)<<2)>>2]&1<<(g&31)){h=f;break a}j=f+1|0;g=i[j>>0]|0;if(!(g<<24>>24)){h=j;break}else f=j}}while(0);l=h-a|0}else l=(yMa(a,e<<24>>24)|0)-a|0;r=c;return l|0}function NLa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=c+-1|0;if(!c){e=a;f=b;g=a}else{c=b;h=a;do if(!((c^h)&3)){j=(d|0)!=0;a:do if(j&(c&3|0)!=0){l=a;m=d;n=b;while(1){o=i[n>>0]|0;i[l>>0]=o;if(!(o<<24>>24)){p=l;q=m;r=n;break a}o=m+-1|0;s=n+1|0;t=l+1|0;u=(o|0)!=0;if(u&(s&3|0)!=0){l=t;m=o;n=s}else{v=t;w=o;x=s;y=u;z=7;break}}}else{v=a;w=d;x=b;y=j;z=7}while(0);if((z|0)==7)if(y){p=v;q=w;r=x}else{A=v;B=x;break}if(!(i[r>>0]|0)){C=p;D=r;E=q;z=13}else{b:do if(q>>>0>3){j=q;n=p;m=r;while(1){l=k[m>>2]|0;if((l&-2139062144^-2139062144)&l+-16843009){F=j;G=n;H=m;break b}k[n>>2]=l;l=j+-4|0;u=m+4|0;s=n+4|0;if(l>>>0>3){j=l;n=s;m=u}else{F=l;G=s;H=u;break}}}else{F=q;G=p;H=r}while(0);C=G;D=H;E=F;z=13}}else{C=a;D=b;E=d;z=13}while(0);c:do if((z|0)==13)if(!E){A=C;B=D}else{d=C;b=D;a=E;while(1){F=i[b>>0]|0;i[d>>0]=F;if(!(F<<24>>24)){A=d;B=b;break c}a=a+-1|0;F=b+1|0;H=d+1|0;if(!a){A=H;B=F;break}else{d=H;b=F}}}while(0);i[A>>0]=0;e=A;f=B;g=h}return e-g+(RLa(f)|0)|0}function OLa(a,b){a=a|0;b=b|0;wMa(a,b)|0;return a|0}function PLa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;c=k[b>>2]|0;a:do if(c)if((k[a>>2]|0)!=0?(d=TLa(a,c)|0,(d|0)!=0):0)if(k[b+4>>2]|0)if(!(k[d+4>>2]|0))e=0;else{f=0;while(1){if(!(k[d+(f<<2)>>2]|0)){e=0;break a}g=f+1|0;if(!(k[b+(g<<2)>>2]|0)){h=g;break}else f=g}b:do if(h>>>0>1){f=1;g=-1;i=0;c:while(1){j=f;l=i;m=1;while(1){n=j;o=l;d:while(1){p=n;q=1;while(1){r=k[b+(q+g<<2)>>2]|0;s=k[b+(p<<2)>>2]|0;if((r|0)!=(s|0)){t=p;u=r;v=s;w=o;break d}if((q|0)==(m|0))break;q=q+1|0;p=q+o|0;if(p>>>0>=h>>>0){x=g;y=m;break c}}o=o+m|0;n=o+1|0;if(n>>>0>=h>>>0){x=g;y=m;break c}}n=t-g|0;if((u|0)<=(v|0)){z=w;break}o=t+1|0;if(o>>>0>>0){j=o;l=t;m=n}else{x=g;y=n;break c}}f=z+2|0;if(f>>>0>=h>>>0){x=z;y=1;break}else{g=z;i=z+1|0}}i=1;g=-1;f=0;while(1){m=i;l=f;j=1;while(1){n=m;o=l;e:while(1){p=n;q=1;while(1){s=k[b+(q+g<<2)>>2]|0;r=k[b+(p<<2)>>2]|0;if((s|0)!=(r|0)){A=p;B=s;C=r;D=o;break e}if((q|0)==(j|0))break;q=q+1|0;p=q+o|0;if(p>>>0>=h>>>0){E=x;F=g;G=y;H=j;break b}}o=o+j|0;n=o+1|0;if(n>>>0>=h>>>0){E=x;F=g;G=y;H=j;break b}}n=A-g|0;if((B|0)>=(C|0)){I=D;break}o=A+1|0;if(o>>>0>>0){m=o;l=A;j=n}else{E=x;F=g;G=y;H=n;break b}}i=I+2|0;if(i>>>0>=h>>>0){E=x;F=I;G=y;H=1;break}else{g=I;f=I+1|0}}}else{E=-1;F=-1;G=1;H=1}while(0);f=(F+1|0)>>>0>(E+1|0)>>>0;g=f?H:G;i=f?F:E;f=i+1|0;if(!(KMa(b,b+(g<<2)|0,f)|0)){J=h-g|0;K=g}else{g=h-i+-1|0;J=0;K=(i>>>0>g>>>0?i:g)+1|0}g=h|63;j=d;l=0;m=d;while(1){n=j;do if(m-n>>2>>>0>>0){o=ZMa(m,0,g)|0;if(o)if(o-n>>2>>>0>>0){e=0;break a}else{L=o;break}else{L=m+(g<<2)|0;break}}else L=m;while(0);n=f>>>0>l>>>0?f:l;o=k[b+(n<<2)>>2]|0;f:do if(!o){M=f;N=43}else{p=o;q=n;while(1){if((p|0)!=(k[j+(q<<2)>>2]|0)){O=q;break}q=q+1|0;p=k[b+(q<<2)>>2]|0;if(!p){M=f;N=43;break f}}P=O-i|0;Q=0}while(0);if((N|0)==43)while(1){N=0;if(M>>>0<=l>>>0){e=j;break a}M=M+-1|0;if((k[b+(M<<2)>>2]|0)!=(k[j+(M<<2)>>2]|0)){P=K;Q=J;break}else N=43}j=j+(P<<2)|0;l=Q;m=L}}else e=d;else e=0;else e=a;while(0);return e|0}function QLa(a,b,c){a=a|0;b=b|0;c=c|0;Eyb(b|0,a|0,c|0)|0;return}function RLa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=a;a:do if(!(b&3)){c=a;d=4}else{e=a;f=b;while(1){if(!(i[e>>0]|0)){g=f;break a}h=e+1|0;f=h;if(!(f&3)){c=h;d=4;break}else e=h}}while(0);if((d|0)==4){d=c;while(1){c=k[d>>2]|0;if(!((c&-2139062144^-2139062144)&c+-16843009))d=d+4|0;else{j=c;l=d;break}}if(!((j&255)<<24>>24))m=l;else{j=l;while(1){l=j+1|0;if(!(i[l>>0]|0)){m=l;break}else j=l}}g=m}return g-b|0}function SLa(a,b){a=a|0;b=b|0;return PLa(a,b)|0}function TLa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!b)c=a+(($La(a)|0)<<2)|0;else{d=a;while(1){a=k[d>>2]|0;if((a|0)==0|(a|0)==(b|0)){e=d;f=a;break}else d=d+4|0}c=(f|0)!=0?e:0}return c|0}function ULa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=k[a>>2]|0;if(!c)d=0;else{e=c+(MLa(c,b)|0)|0;if(!(i[e>>0]|0))f=0;else{i[e>>0]=0;f=e+1|0}k[a>>2]=f;d=c}return d|0}function VLa(a,b){a=a|0;b=b|0;var c=0;c=yMa(a,b)|0;return ((i[c>>0]|0)==(b&255)<<24>>24?c:0)|0}function WLa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;a:do if(!c)d=a;else{e=a;f=c;while(1){if(!(TLa(b,f)|0)){d=e;break a}g=e+4|0;f=k[g>>2]|0;if(!f){d=g;break}else e=g}}while(0);return d-a>>2|0}function XLa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=k[b>>2]|0;do if(!c)d=$La(a)|0;else{if(!(k[b+4>>2]|0)){e=TLa(a,c)|0;if(!e){d=$La(a)|0;break}else{d=e-a>>2;break}}e=k[a>>2]|0;a:do if(!e)f=a;else{g=a;h=e;while(1){if(TLa(b,h)|0){f=g;break a}i=g+4|0;h=k[i>>2]|0;if(!h){f=i;break}else g=i}}while(0);d=f-a>>2}while(0);return d|0}function YLa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=i[a>>0]|0;d=i[b>>0]|0;if(c<<24>>24==0?1:c<<24>>24!=d<<24>>24){e=c;f=d}else{d=a;a=b;do{d=d+1|0;a=a+1|0;b=i[d>>0]|0;c=i[a>>0]|0}while(!(b<<24>>24==0?1:b<<24>>24!=c<<24>>24));e=b;f=c}return (e&255)-(f&255)|0}function ZLa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;a:do if(!c)d=0;else{e=c;f=a;g=b;while(1){h=i[f>>0]|0;j=i[g>>0]|0;if(h<<24>>24!=j<<24>>24){k=h;l=j;break}e=e+-1|0;if(!e){d=0;break a}else{f=f+1|0;g=g+1|0}}d=(k&255)-(l&255)|0}while(0);return d|0}function _La(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c){d=c;c=b;b=a;while(1){d=d+-1|0;k[b>>2]=k[c>>2];if(!d)break;else{c=c+4|0;b=b+4|0}}}return a|0}function $La(a){a=a|0;var b=0,c=0;b=a;while(1)if(!(k[b>>2]|0)){c=b;break}else b=b+4|0;return c-a>>2|0}function aMa(a,b){a=a|0;b=b|0;TMa(a+(($La(a)|0)<<2)|0,b)|0;return a|0}function bMa(a,b){a=a|0;b=b|0;return VLa(a,b)|0}function cMa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;e=r;r=r+1056|0;f=e+1024|0;g=e;a:do if(d)if(b>>>0>=d>>>0){h=i[c>>0]|0;j=h&255;m=_Ma(a,j,b)|0;if((d|0)==1|(m|0)==0)n=m;else{o=a-m+b|0;switch(d|0){case 2:{p=l[c+1>>0]|j<<8;q=m+1|0;s=o+-1|0;if(!s){n=0;break a}t=q;u=s;s=m;v=l[m>>0]<<8|l[q>>0];while(1){q=v&65535;if((q|0)==(p|0)){n=s;break a}w=t+1|0;u=u+-1|0;if(!u){n=0;break}else{x=t;t=w;v=l[w>>0]|q<<8;s=x}}break}case 3:{s=l[c+1>>0]<<16|j<<24|l[c+2>>0]<<8;v=m+2|0;t=o+-2|0;if(!t){n=0;break a}u=v;p=t;t=l[m>>0]<<24|l[m+1>>0]<<16|l[v>>0]<<8;while(1){if((t|0)==(s|0)){y=u;break}p=p+-1|0;v=u+1|0;if(!p){n=0;break a}else{u=v;t=(l[v>>0]|t)<<8}}n=y+-2|0;break a;break}case 4:{t=l[c+1>>0]<<16|j<<24|l[c+2>>0]<<8|l[c+3>>0];u=m+3|0;p=o+-3|0;if(!p){n=0;break a}s=u;v=p;p=l[m>>0]<<24|l[m+1>>0]<<16|l[m+2>>0]<<8|l[u>>0];while(1){if((p|0)==(t|0)){z=s;break}v=v+-1|0;u=s+1|0;if(!v){n=0;break a}else{s=u;p=l[u>>0]|p<<8}}n=z+-3|0;break a;break}default:{k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[f+24>>2]=0;k[f+28>>2]=0;p=f+(((h&255)>>>5&255)<<2)|0;k[p>>2]=1<<(h&31)|k[p>>2];k[g+((h&255)<<2)>>2]=1;if((d|0)!=1){p=1;do{s=i[c+p>>0]|0;v=f+(((s&255)>>>5&255)<<2)|0;k[v>>2]=1<<(s&31)|k[v>>2];p=p+1|0;k[g+((s&255)<<2)>>2]=p}while((p|0)!=(d|0))}p=m+o|0;b:do if(d>>>0>1){h=1;s=-1;v=0;c:while(1){t=h;j=v;u=1;while(1){x=t;q=j;d:while(1){w=x;A=1;while(1){B=i[c+(A+s)>>0]|0;C=i[c+w>>0]|0;if(B<<24>>24!=C<<24>>24){D=w;E=B;F=C;G=q;break d}if((A|0)==(u|0))break;A=A+1|0;w=A+q|0;if(w>>>0>=d>>>0){H=s;I=u;break c}}q=q+u|0;x=q+1|0;if(x>>>0>=d>>>0){H=s;I=u;break c}}x=D-s|0;if((E&255)<=(F&255)){J=G;break}q=D+1|0;if(q>>>0>>0){t=q;j=D;u=x}else{H=s;I=x;break c}}h=J+2|0;if(h>>>0>=d>>>0){H=J;I=1;break}else{s=J;v=J+1|0}}v=1;s=-1;h=0;while(1){u=v;j=h;t=1;while(1){x=u;q=j;e:while(1){w=x;A=1;while(1){C=i[c+(A+s)>>0]|0;B=i[c+w>>0]|0;if(C<<24>>24!=B<<24>>24){K=w;L=C;M=B;N=q;break e}if((A|0)==(t|0))break;A=A+1|0;w=A+q|0;if(w>>>0>=d>>>0){O=H;P=s;Q=I;R=t;break b}}q=q+t|0;x=q+1|0;if(x>>>0>=d>>>0){O=H;P=s;Q=I;R=t;break b}}x=K-s|0;if((L&255)>=(M&255)){S=N;break}q=K+1|0;if(q>>>0>>0){u=q;j=K;t=x}else{O=H;P=s;Q=I;R=x;break b}}v=S+2|0;if(v>>>0>=d>>>0){O=H;P=S;Q=I;R=1;break}else{s=S;h=S+1|0}}}else{O=-1;P=-1;Q=1;R=1}while(0);h=(P+1|0)>>>0>(O+1|0)>>>0;s=h?R:Q;v=h?P:O;h=v+1|0;if(!(ZLa(c,c+s|0,h)|0)){T=d-s|0;U=s}else{s=d-v+-1|0;T=0;U=(v>>>0>s>>>0?v:s)+1|0}s=p;f:do if(o>>>0>>0)V=0;else{t=d+-1|0;j=(T|0)!=0;u=d-U|0;x=m;q=0;while(1){w=i[x+t>>0]|0;g:do if(!(1<<(w&31)&k[f+(((w&255)>>>5&255)<<2)>>2])){W=x+d|0;X=0}else{A=k[g+((w&255)<<2)>>2]|0;B=d-A|0;if((A|0)!=(d|0)){W=x+(j&(q|0)!=0&B>>>0>>0?u:B)|0;X=0;break}B=h>>>0>q>>>0?h:q;h:do if(B>>>0>>0){A=B;while(1){if((i[c+A>>0]|0)!=(i[x+A>>0]|0)){Y=A;break}A=A+1|0;if(A>>>0>=d>>>0){Z=h;break h}}W=x+(Y-v)|0;X=0;break g}else Z=h;while(0);do{if(Z>>>0<=q>>>0){V=x;break f}Z=Z+-1|0}while((i[c+Z>>0]|0)==(i[x+Z>>0]|0));W=x+U|0;X=T}while(0);if((s-W|0)>>>0>>0){V=0;break}else{x=W;q=X}}}while(0);n=V;break a}}}}else n=0;else n=a;while(0);r=e;return n|0}function dMa(a){a=a|0;var b=0,c=0,d=0;b=($La(a)|0)+1|0;c=xYa(b<<2)|0;if(!c)d=0;else d=_La(c,a,b)|0;return d|0}function eMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,m=0,n=0;if(!c)d=0;else{e=i[a>>0]|0;a:do if(!(e<<24>>24)){f=0;g=b}else{h=c;j=e;k=a;m=b;while(1){h=h+-1|0;n=i[m>>0]|0;if(!(j<<24>>24==n<<24>>24&((h|0)!=0&n<<24>>24!=0))){f=j;g=m;break a}k=k+1|0;n=m+1|0;j=i[k>>0]|0;if(!(j<<24>>24)){f=0;g=n;break}else m=n}}while(0);d=(f&255)-(l[g>>0]|0)|0}return d|0}function fMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((c|0)>1){d=c;c=b;b=a;while(1){i[c>>0]=i[b+1>>0]|0;i[c+1>>0]=i[b>>0]|0;d=d+-2|0;if((d|0)<=1)break;else{c=c+2|0;b=b+2|0}}}return}function gMa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;e=c&255;f=b;a:do if(!((f^a)&3)){g=(f&3|0)!=0;if((d|0)!=0&g){h=c&255;j=d;l=a;m=b;while(1){n=i[m>>0]|0;i[l>>0]=n;if(n<<24>>24==h<<24>>24){o=l;p=m;break a}n=j+-1|0;q=m+1|0;r=l+1|0;s=(q&3|0)!=0;if((n|0)!=0&s){j=n;l=r;m=q}else{t=n;u=s;v=r;w=q;break}}}else{t=d;u=g;v=a;w=b}if(u){o=v;p=w}else{m=ia(e,16843009)|0;b:do if(t>>>0>3){l=t;j=v;h=w;while(1){q=k[h>>2]|0;r=q^m;if((r&-2139062144^-2139062144)&r+-16843009){x=l;y=j;z=h;break b}k[j>>2]=q;q=l+-4|0;r=h+4|0;s=j+4|0;if(q>>>0>3){l=q;j=s;h=r}else{x=q;y=s;z=r;break}}}else{x=t;y=v;z=w}while(0);A=x;B=y;C=z;D=11}}else{A=d;B=a;C=b;D=11}while(0);c:do if((D|0)==11)if(!A){o=B;p=C}else{b=c&255;a=A;d=B;z=C;while(1){y=i[z>>0]|0;i[d>>0]=y;if(y<<24>>24==b<<24>>24){o=d;p=z;break c}a=a+-1|0;y=z+1|0;x=d+1|0;if(!a){o=x;p=y;break}else{d=x;z=y}}}while(0);return ((i[p>>0]|0)==(c&255)<<24>>24?o+1|0:0)|0}function hMa(a,b,c){a=a|0;b=b|0;c=c|0;Dyb(a|0,b|0,c|0)|0;return a+c|0}function iMa(a){a=a|0;var b=0,c=0,d=0;b=(RLa(a)|0)+1|0;c=xYa(b)|0;if(!c)d=0;else{Dyb(c|0,a|0,b|0)|0;d=c}return d|0}function jMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;c=r;r=r+1056|0;d=c+1024|0;e=c;f=i[b>>0]|0;do if(f<<24>>24){g=VLa(a,f<<24>>24)|0;if(g){h=i[b+1>>0]|0;if(h<<24>>24){j=g+1|0;m=i[j>>0]|0;if(m<<24>>24){n=i[b+2>>0]|0;if(!(n<<24>>24)){o=h&255|(f&255)<<8;p=j;j=m;q=g;s=l[g>>0]<<8|m&255;while(1){t=s&65535;if((t|0)==(o|0)){u=q;v=j;break}w=p+1|0;x=i[w>>0]|0;if(!(x<<24>>24)){u=p;v=0;break}else{y=p;p=w;j=x;s=x&255|t<<8;q=y}}z=v<<24>>24!=0?u:0;break}q=g+2|0;s=i[q>>0]|0;if(s<<24>>24){j=i[b+3>>0]|0;if(!(j<<24>>24)){p=(h&255)<<16|(f&255)<<24|(n&255)<<8;o=(s&255)<<8|(m&255)<<16|l[g>>0]<<24;if((o|0)==(p|0)){A=q;B=s}else{y=q;q=o;while(1){o=y+1|0;t=i[o>>0]|0;q=(t&255|q)<<8;if(t<<24>>24==0|(q|0)==(p|0)){A=o;B=t;break}else y=o}}z=B<<24>>24!=0?A+-2|0:0;break}y=g+3|0;p=i[y>>0]|0;if(p<<24>>24){if(!(i[b+4>>0]|0)){q=(h&255)<<16|(f&255)<<24|(n&255)<<8|j&255;o=(s&255)<<8|(m&255)<<16|p&255|l[g>>0]<<24;if((o|0)==(q|0)){C=y;D=p}else{p=y;y=o;while(1){o=p+1|0;t=i[o>>0]|0;y=t&255|y<<8;if(t<<24>>24==0|(y|0)==(q|0)){C=o;D=t;break}else p=o}}z=D<<24>>24!=0?C+-3|0:0;break};k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[d+24>>2]=0;k[d+28>>2]=0;p=f;q=0;while(1){if(!(i[g+q>>0]|0)){E=0;break}y=d+(((p&255)>>>5&255)<<2)|0;k[y>>2]=k[y>>2]|1<<(p&31);y=q+1|0;k[e+((p&255)<<2)>>2]=y;p=i[b+y>>0]|0;if(!(p<<24>>24)){F=y;G=q;H=23;break}else q=y}a:do if((H|0)==23){b:do if(F>>>0>1){q=1;p=-1;y=0;c:while(1){m=q;s=y;j=1;while(1){n=m;h=s;d:while(1){o=n;t=1;while(1){x=i[b+(t+p)>>0]|0;w=i[b+o>>0]|0;if(x<<24>>24!=w<<24>>24){I=o;J=x;K=w;L=h;break d}if((t|0)==(j|0))break;t=t+1|0;o=t+h|0;if(o>>>0>=F>>>0){M=p;N=j;break c}}h=h+j|0;n=h+1|0;if(n>>>0>=F>>>0){M=p;N=j;break c}}n=I-p|0;if((J&255)<=(K&255)){O=L;break}h=I+1|0;if(h>>>0>>0){m=h;s=I;j=n}else{M=p;N=n;break c}}q=O+2|0;if(q>>>0>=F>>>0){M=O;N=1;break}else{p=O;y=O+1|0}}y=1;p=-1;q=0;while(1){j=y;s=q;m=1;while(1){n=j;h=s;e:while(1){o=n;t=1;while(1){w=i[b+(t+p)>>0]|0;x=i[b+o>>0]|0;if(w<<24>>24!=x<<24>>24){P=o;Q=w;R=x;S=h;break e}if((t|0)==(m|0))break;t=t+1|0;o=t+h|0;if(o>>>0>=F>>>0){T=M;U=p;V=N;W=m;break b}}h=h+m|0;n=h+1|0;if(n>>>0>=F>>>0){T=M;U=p;V=N;W=m;break b}}n=P-p|0;if((Q&255)>=(R&255)){X=S;break}h=P+1|0;if(h>>>0>>0){j=h;s=P;m=n}else{T=M;U=p;V=N;W=n;break b}}y=X+2|0;if(y>>>0>=F>>>0){T=M;U=X;V=N;W=1;break}else{p=X;q=X+1|0}}}else{T=-1;U=-1;V=1;W=1}while(0);q=(U+1|0)>>>0>(T+1|0)>>>0;p=q?W:V;y=q?U:T;q=y+1|0;if(!(ZLa(b,b+p|0,q)|0)){Y=F-p|0;Z=p}else{p=F-y+-1|0;Y=0;Z=(y>>>0>p>>>0?y:p)+1|0}p=F|63;m=(Y|0)!=0;s=F-Z|0;j=g;n=0;h=g;f:while(1){o=j;do if((h-o|0)>>>0>>0){t=_Ma(h,0,p)|0;if(t)if((t-o|0)>>>0>>0){E=0;break a}else{_=t;break}else{_=h+p|0;break}}else _=h;while(0);o=i[j+G>>0]|0;if(!(1<<(o&31)&k[d+(((o&255)>>>5&255)<<2)>>2])){j=j+F|0;n=0;h=_;continue}t=k[e+((o&255)<<2)>>2]|0;o=F-t|0;if((F|0)!=(t|0)){j=j+(m&(n|0)!=0&o>>>0>>0?s:o)|0;n=0;h=_;continue}o=q>>>0>n>>>0?q:n;t=i[b+o>>0]|0;g:do if(!(t<<24>>24))$=q;else{x=t;w=o;while(1){if(x<<24>>24!=(i[j+w>>0]|0)){aa=w;break}w=w+1|0;x=i[b+w>>0]|0;if(!(x<<24>>24)){$=q;break g}}j=j+(aa-y)|0;n=0;h=_;continue f}while(0);do{if($>>>0<=n>>>0){E=j;break a}$=$+-1|0}while((i[b+$>>0]|0)==(i[j+$>>0]|0));j=j+Z|0;n=Y;h=_}}while(0);z=E}else z=0}else z=0}else z=0}else z=g}else z=0}else z=a;while(0);r=c;return z|0}function kMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[d+24>>2]=0;k[d+28>>2]=0;e=i[b>>0]|0;do if(!(e<<24>>24))f=0;else{if(!(i[b+1>>0]|0)){g=a;while(1)if((i[g>>0]|0)==e<<24>>24)g=g+1|0;else{h=g;break}f=h-a|0;break}else{j=b;l=e}do{g=d+(((l&255)>>>5&255)<<2)|0;k[g>>2]=k[g>>2]|1<<(l&31);j=j+1|0;l=i[j>>0]|0}while(l<<24>>24!=0);g=i[a>>0]|0;a:do if(!(g<<24>>24))m=a;else{n=a;o=g;while(1){if(!(k[d+(((o&255)>>>5&255)<<2)>>2]&1<<(o&31))){m=n;break a}p=n+1|0;o=i[p>>0]|0;if(!(o<<24>>24)){m=p;break}else n=p}}while(0);f=m-a|0}while(0);r=c;return f|0}function lMa(a,b){a=a|0;b=b|0;Fyb(a|0,0,b|0)|0;return}function mMa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return qMa(a,b,c)|0}function nMa(a,b,c){a=a|0;b=b|0;c=c|0;return ZLa(a,b,c)|0}function oMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=b&255;b=c;while(1){if(!b){e=0;break}b=b+-1|0;c=a+b|0;if((i[c>>0]|0)==d<<24>>24){e=c;break}}return e|0}function pMa(a,b){a=a|0;b=b|0;var c=0,d=0;c=GMa(a,b)|0;b=xYa(c+1|0)|0;if(!b)d=0;else{Dyb(b|0,a|0,c|0)|0;i[b+c>>0]=0;d=b}return d|0}function qMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;if(!c)d=0;else{e=k[a>>2]|0;a:do if(!e){f=b;g=0}else{h=c;i=b;j=a;l=e;while(1){h=h+-1|0;m=k[i>>2]|0;if(!((h|0)!=0&(m|0)!=0)){f=i;g=l;break a}if((l|0)!=(m|0)?(m=KIa(l)|0,(m|0)!=(KIa(k[i>>2]|0)|0)):0){n=i;o=j;break}j=j+4|0;m=i+4|0;l=k[j>>2]|0;if(!l){f=m;g=0;break a}else i=m}f=n;g=k[o>>2]|0}while(0);o=KIa(g)|0;d=o-(KIa(k[f>>2]|0)|0)|0}return d|0}function rMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,m=0,n=0,o=0;c=i[a>>0]|0;a:do if(!(c<<24>>24)){d=0;e=b}else{f=c;g=c&255;h=a;j=b;while(1){k=i[j>>0]|0;if(!(k<<24>>24)){d=f;e=j;break a}if(f<<24>>24!=k<<24>>24?(k=BIa(g)|0,(k|0)!=(BIa(l[j>>0]|0)|0)):0){m=h;n=j;break}h=h+1|0;k=j+1|0;o=i[h>>0]|0;if(!(o<<24>>24)){d=0;e=k;break a}else{f=o;g=o&255;j=k}}d=i[m>>0]|0;e=n}while(0);n=BIa(d&255)|0;return n-(BIa(l[e>>0]|0)|0)|0}function sMa(a,b){a=a|0;b=b|0;return LLa(a,b)|0}function tMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=k[a>>2]|0;d=k[b>>2]|0;if((d|0)==0|((c|0)==0|(c|0)!=(d|0))){e=c;f=d}else{d=a;a=b;do{d=d+4|0;a=a+4|0;b=k[d>>2]|0;c=k[a>>2]|0}while(!((c|0)==0|((b|0)==0|(b|0)!=(c|0))));e=b;f=c}return e-f|0}function uMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=(c|0)==0;if(a-b>>2>>>0>>0){if(!d){e=c;do{e=e+-1|0;k[a+(e<<2)>>2]=k[b+(e<<2)>>2]}while((e|0)!=0)}}else if(!d){d=b;b=a;e=c;while(1){e=e+-1|0;k[b>>2]=k[d>>2];if(!e)break;else{d=d+4|0;b=b+4|0}}}return a|0}function vMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!a){c=k[12219]|0;if(!c)d=0;else{e=c;f=3}}else{e=a;f=3}do if((f|0)==3){a=e+(kMa(e,b)|0)|0;if(!(i[a>>0]|0)){k[12219]=0;d=0;break}c=a+(MLa(a,b)|0)|0;k[12219]=c;if(!(i[c>>0]|0)){k[12219]=0;d=a;break}else{k[12219]=c+1;i[c>>0]=0;d=a;break}}while(0);return d|0}function wMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=b;a:do if(!((c^a)&3)){if(!(c&3)){d=b;e=a}else{f=a;g=b;while(1){h=i[g>>0]|0;i[f>>0]=h;if(!(h<<24>>24)){j=f;break a}h=g+1|0;l=f+1|0;if(!(h&3)){d=h;e=l;break}else{f=l;g=h}}}g=k[d>>2]|0;if(!((g&-2139062144^-2139062144)&g+-16843009)){f=g;g=e;h=d;while(1){l=h+4|0;m=g+4|0;k[g>>2]=f;f=k[l>>2]|0;if((f&-2139062144^-2139062144)&f+-16843009){n=m;o=l;break}else{g=m;h=l}}}else{n=e;o=d}p=o;q=n;r=8}else{p=b;q=a;r=8}while(0);if((r|0)==8){r=i[p>>0]|0;i[q>>0]=r;if(!(r<<24>>24))j=q;else{r=q;q=p;while(1){q=q+1|0;p=r+1|0;a=i[q>>0]|0;i[p>>0]=a;if(!(a<<24>>24)){j=p;break}else r=p}}}return j|0}function xMa(a,b,c){a=a|0;b=b|0;c=c|0;PMa(a,b,c)|0;return a|0}function yMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=b&255;a:do if(!c)d=a+(RLa(a)|0)|0;else{if(!(a&3))e=a;else{f=b&255;g=a;while(1){h=i[g>>0]|0;if(h<<24>>24==0?1:h<<24>>24==f<<24>>24){d=g;break a}h=g+1|0;if(!(h&3)){e=h;break}else g=h}}g=ia(c,16843009)|0;f=k[e>>2]|0;b:do if(!((f&-2139062144^-2139062144)&f+-16843009)){h=f;j=e;while(1){l=h^g;if((l&-2139062144^-2139062144)&l+-16843009){m=j;break b}l=j+4|0;h=k[l>>2]|0;if((h&-2139062144^-2139062144)&h+-16843009){m=l;break}else j=l}}else m=e;while(0);g=b&255;f=m;while(1){j=i[f>>0]|0;if(j<<24>>24==0?1:j<<24>>24==g<<24>>24){d=f;break}else f=f+1|0}}while(0);return d|0}function zMa(a,b){a=a|0;b=b|0;var c=0;c=a+((XLa(a,b)|0)<<2)|0;return ((k[c>>2]|0)!=0?c:0)|0}function AMa(a,b){a=a|0;b=b|0;var c=0;c=TMa(a,b)|0;return c+(($La(b)|0)<<2)|0}function BMa(a,b){a=a|0;b=b|0;OLa(a+(RLa(a)|0)|0,b)|0;return a|0}function CMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=ISa(a)|0;a=RLa(d)|0;if(a>>>0>=c>>>0)if(!c)e=34;else{f=c+-1|0;Dyb(b|0,d|0,f|0)|0;i[b+f>>0]=0;e=34}else{Dyb(b|0,d|0,a+1|0)|0;e=0}return e|0}function DMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=GMa(a,c)|0;if((d|0)==(c|0))e=RLa(b)|0;else e=NLa(a+d|0,b,c-d|0)|0;return e+d|0}function EMa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;if((a+-1|0)>>>0>63|(a|0)==0)b=315738;else{c=a;a=315738;while(1){d=a;while(1){e=d+1|0;if(!(i[d>>0]|0)){f=e;break}else d=e}c=c+-1|0;if(!c){b=f;break}else a=f}}return b|0}function FMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;if(!a){d=k[c>>2]|0;if(!d)e=0;else{f=d;g=3}}else{f=a;g=3}do if((g|0)==3){a=f+(kMa(f,b)|0)|0;if(!(i[a>>0]|0)){k[c>>2]=0;e=0;break}d=a+(MLa(a,b)|0)|0;k[c>>2]=d;if(!(i[d>>0]|0)){k[c>>2]=0;e=a;break}else{k[c>>2]=d+1;i[d>>0]=0;e=a;break}}while(0);return e|0}function GMa(a,b){a=a|0;b=b|0;var c=0;c=_Ma(a,0,b)|0;return ((c|0)==0?b:c-a|0)|0}function HMa(a,b,c){a=a|0;b=b|0;c=c|0;return SMa(a,b)|0}function IMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+(($La(a)|0)<<2)|0;a:do if(!c)e=d;else{f=c;g=b;h=d;while(1){i=k[g>>2]|0;if(!i){e=h;break a}f=f+-1|0;j=h+4|0;k[h>>2]=i;if(!f){e=j;break}else{g=g+4|0;h=j}}}while(0);k[e>>2]=0;return a|0}function JMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=a+(RLa(a)|0)|0;a:do if(!c)e=d;else{f=c;g=b;h=d;while(1){j=i[g>>0]|0;if(!(j<<24>>24)){e=h;break a}f=f+-1|0;k=h+1|0;i[h>>0]=j;if(!f){e=k;break}else{g=g+1|0;h=k}}}while(0);i[e>>0]=0;return a|0}function KMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;a:do if(!c)d=0;else{e=b;f=a;g=c;while(1){h=k[f>>2]|0;i=k[e>>2]|0;if((h|0)!=(i|0)){j=h;l=i;break}g=g+-1|0;if(!g){d=0;break a}else{e=e+4|0;f=f+4|0}}d=j-l|0}while(0);return d|0}function LMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=RLa(b)|0;a:do if(!(i[a>>0]|0))d=0;else{e=a;while(1){if(!(OMa(e,b,c)|0)){d=e;break a}e=e+1|0;if(!(i[e>>0]|0)){d=0;break}}}while(0);return d|0}function MMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QMa(a,b,c)|0;return d+((RMa(b,c)|0)<<2)|0}function NMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=i[a>>0]|0;d=i[b>>0]|0;a:do if(c<<24>>24==d<<24>>24){e=a;f=b;g=c;h=c<<24>>24;j=1;while(1){switch(g<<24>>24){case 0:{k=0;break a;break}case 48:{l=(j|0)==1?0:j;break}default:if((h+-48|0)>>>0<10)l=(j|0)==1?2:j;else l=1}m=e+1|0;n=f+1|0;o=i[m>>0]|0;p=i[n>>0]|0;if(o<<24>>24==p<<24>>24){e=m;f=n;g=o;h=o<<24>>24;j=l}else{q=m;r=n;s=o;t=p;u=l;break}}if((u|0)==1){v=r;w=q;x=s;y=t;z=9}else{A=r;B=q;C=s;D=t;E=u;z=10}}else{v=b;w=a;x=c;y=d;z=9}while(0);if((z|0)==9){A=v;B=w;C=x;D=y;E=(x<<24>>24==48|y<<24>>24==48)&1^1;z=10}do if((z|0)==10){y=C<<24>>24;x=D<<24>>24;if((y+-48|0)>>>0<10?(E|0)!=0&(x+-48|0)>>>0<10:0){if(((C<<24>>24)+-48|0)>>>0<10){w=1;while(1)if(((i[B+w>>0]|0)+-48|0)>>>0<10)w=w+1|0;else{F=w;break}}else F=0;if(((D<<24>>24)+-48|0)>>>0<10){w=1;while(1)if(((i[A+w>>0]|0)+-48|0)>>>0<10)w=w+1|0;else{G=w;break}}else G=0;if((F|0)==(G|0)){k=y-x|0;break}else{k=F>>>0>G>>>0?1:-1;break}}k=y-x|0}while(0);return k|0}function OMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;if(!c)d=0;else{e=i[a>>0]|0;a:do if(!(e<<24>>24)){f=0;g=b}else{h=c;j=e;k=e&255;m=a;n=b;while(1){h=h+-1|0;o=i[n>>0]|0;if(!((h|0)!=0&o<<24>>24!=0)){f=j;g=n;break a}if(j<<24>>24!=o<<24>>24?(o=BIa(k)|0,(o|0)!=(BIa(l[n>>0]|0)|0)):0){p=m;q=n;break}m=m+1|0;o=n+1|0;r=i[m>>0]|0;if(!(r<<24>>24)){f=0;g=o;break a}else{j=r;k=r&255;n=o}}f=i[p>>0]|0;g=q}while(0);q=BIa(f&255)|0;d=q-(BIa(l[g>>0]|0)|0)|0}return d|0}function PMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;d=b;do if(!((d^a)&3)){e=(c|0)!=0;a:do if(e&(d&3|0)!=0){f=c;g=b;h=a;while(1){j=i[g>>0]|0;i[h>>0]=j;if(!(j<<24>>24)){l=f;m=g;n=h;break a}j=f+-1|0;o=g+1|0;p=h+1|0;q=(j|0)!=0;if(q&(o&3|0)!=0){f=j;g=o;h=p}else{r=j;s=o;t=p;u=q;v=5;break}}}else{r=c;s=b;t=a;u=e;v=5}while(0);if((v|0)==5)if(u){l=r;m=s;n=t}else{w=t;x=0;break}if(!(i[m>>0]|0)){w=n;x=l}else{b:do if(l>>>0>3){e=l;h=n;g=m;while(1){f=k[g>>2]|0;if((f&-2139062144^-2139062144)&f+-16843009){y=e;z=h;A=g;break b}k[h>>2]=f;f=e+-4|0;q=g+4|0;p=h+4|0;if(f>>>0>3){e=f;h=p;g=q}else{y=f;z=p;A=q;break}}}else{y=l;z=n;A=m}while(0);B=A;C=z;D=y;v=11}}else{B=b;C=a;D=c;v=11}while(0);c:do if((v|0)==11)if(!D){w=C;x=0}else{c=B;a=C;b=D;while(1){y=i[c>>0]|0;i[a>>0]=y;if(!(y<<24>>24)){w=a;x=b;break c}b=b+-1|0;y=a+1|0;if(!b){w=y;x=0;break}else{c=c+1|0;a=y}}}while(0);Fyb(w|0,0,x|0)|0;return w|0}function QMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:do if(!c){d=a;e=0}else{f=c;g=b;h=a;while(1){i=k[g>>2]|0;if(!i){d=h;e=f;break a}f=f+-1|0;j=h+4|0;k[h>>2]=i;if(!f){d=j;e=0;break}else{g=g+4|0;h=j}}}while(0);VMa(d,0,e)|0;return a|0}function RMa(a,b){a=a|0;b=b|0;var c=0;c=ZMa(a,0,b)|0;return ((c|0)==0?b:c-a>>2)|0}function SMa(a,b){a=a|0;b=b|0;return qMa(a,b,-1)|0}function TMa(a,b){a=a|0;b=b|0;var c=0,d=0;c=a;d=b;while(1){b=k[d>>2]|0;k[c>>2]=b;if(!b)break;else{c=c+4|0;d=d+4|0}}return a|0}function UMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;if(!a){d=k[c>>2]|0;if(!d)e=0;else{f=d;g=3}}else{f=a;g=3}do if((g|0)==3){a=f+((WLa(f,b)|0)<<2)|0;if(!(k[a>>2]|0)){k[c>>2]=0;e=0;break}d=a+((XLa(a,b)|0)<<2)|0;k[c>>2]=d;if(!(k[d>>2]|0)){k[c>>2]=0;e=a;break}else{k[c>>2]=d+4;k[d>>2]=0;e=a;break}}while(0);return e|0}function VMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c){d=c;c=a;while(1){d=d+-1|0;k[c>>2]=b;if(!d)break;else c=c+4|0}}return a|0}function WMa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=$La(a)|0;a:do if((c|0)>-1){d=a+(c<<2)|0;while(1){if((k[d>>2]|0)==(b|0)){e=d;break a}d=d+-4|0;if(d>>>0>>0){e=0;break}}}else e=0;while(0);return e|0}function XMa(a,b){a=a|0;b=b|0;var c=0;c=a+(MLa(a,b)|0)|0;return ((i[c>>0]|0)!=0?c:0)|0}function YMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;a:do if(!c)d=0;else{e=c;f=b;g=a;while(1){h=k[g>>2]|0;i=k[f>>2]|0;if((i|0)==0|((h|0)==0|(h|0)!=(i|0))){j=h;l=i;break}e=e+-1|0;if(!e){d=0;break a}else{f=f+4|0;g=g+4|0}}d=j-l|0}while(0);return d|0}function ZMa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:do if(!c)d=0;else{e=a;f=c;while(1){if((k[e>>2]|0)==(b|0)){d=e;break a}f=f+-1|0;if(!f){d=0;break}else e=e+4|0}}while(0);return d|0}function _Ma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=b&255;e=(c|0)!=0;a:do if(e&(a&3|0)!=0){f=b&255;g=c;h=a;while(1){if((i[h>>0]|0)==f<<24>>24){j=g;l=h;m=6;break a}n=h+1|0;o=g+-1|0;p=(o|0)!=0;if(p&(n&3|0)!=0){g=o;h=n}else{q=o;r=p;s=n;m=5;break}}}else{q=c;r=e;s=a;m=5}while(0);if((m|0)==5)if(r){j=q;l=s;m=6}else{t=0;u=s}b:do if((m|0)==6){s=b&255;if((i[l>>0]|0)==s<<24>>24){t=j;u=l}else{q=ia(d,16843009)|0;c:do if(j>>>0>3){r=j;a=l;while(1){e=k[a>>2]^q;if((e&-2139062144^-2139062144)&e+-16843009){v=r;w=a;break}e=a+4|0;c=r+-4|0;if(c>>>0>3){r=c;a=e}else{x=c;y=e;m=11;break c}}z=v;A=w}else{x=j;y=l;m=11}while(0);if((m|0)==11)if(!x){t=0;u=y;break}else{z=x;A=y}while(1){if((i[A>>0]|0)==s<<24>>24){t=z;u=A;break b}q=A+1|0;z=z+-1|0;if(!z){t=0;u=q;break}else A=q}}}while(0);return ((t|0)!=0?u:0)|0}function $Ma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;d=r;r=r+192|0;e=d+8|0;f=d;g=d+180|0;h=d+176|0;j=d+168|0;l=d+40|0;m=d+32|0;Wb(1,m|0)|0;n=(c&16|0)!=0?329672:316409;if(c&8)aNa(b);a:do if((c&4|0)!=0?(o=i[a>>0]|0,o<<24>>24!=0):0){p=o;o=0;q=0;s=0;t=0;while(1){switch(p<<24>>24|0){case 92:{u=o;v=((t|0)==0&1)+q|0;w=s;x=t;break}case 39:{u=o;v=q;w=s;x=(o|0)==0^t;break}case 34:{u=(t|0)==0^o;v=q;w=s;x=t;break}case 40:{if(!s)y=13;else{u=o;v=q;w=s+1|0;x=t}break}case 41:{if(!s)y=13;else{u=o;v=q;w=s+-1|0;x=t}break}case 125:case 123:case 62:case 60:case 59:case 38:case 124:case 10:{y=13;break}case 36:{if(!t)if((i[a+(q+1)>>0]|0)==40){z=q+2|0;if((i[a+z>>0]|0)!=40){A=4;break a}u=o;v=z;w=s+2|0;x=0}else{u=o;v=q;w=s;x=0}else{u=o;v=q;w=s;x=t}break}case 96:{if(!t){A=4;break a}else{u=o;v=q;w=s;x=t}break}default:{u=o;v=q;w=s;x=t}}if((y|0)==13){y=0;if(!(o|t|s)){A=2;break a}else{u=o;v=q;w=s;x=t}}q=v+1|0;p=i[a+q>>0]|0;if(!(p<<24>>24)){y=20;break a}else{o=u;s=w;t=x}}}else y=20;while(0);b:do if((y|0)==20){x=(c&2|0)!=0;if(x){B=k[b>>2]|0;C=k[b+4>>2]|0}else{B=0;C=0}w=(c&1|0)!=0;u=b+8|0;if(w){v=k[u>>2]|0;if(v>>>0<=268435455){D=v+B|0;y=26}}else{k[u>>2]=0;D=B;y=26}do if((y|0)==26?(nVa(j,524288)|0)>=0:0){uc(l|0);v=Xe()|0;Yb(l|0);if((v|0)<0){$Ta(k[j>>2]|0)|0;$Ta(k[j+4>>2]|0)|0;break}t=k[j+4>>2]|0;if(!v){if((t|0)==1){k[f>>2]=0;VPa(1,2,f)|0}else _Ta(t,1)|0;k[e>>2]=317680;k[e+4>>2]=316421;k[e+8>>2]=317677;k[e+12>>2]=a;k[e+16>>2]=n;k[e+20>>2]=0;Rb(317683,317677,e|0)|0;ZUa(1)}$Ta(t)|0;t=cg[631&1023](k[j>>2]|0,332840)|0;if(!t){$Ta(k[j>>2]|0)|0;ad(v|0,9)|0;IWa(v);break}k[g>>2]=0;k[h>>2]=0;s=(oSa(g,h,0,t)|0)<0;yYa(s?0:k[g>>2]|0);if(_Ra(t)|0){QRa(t)|0;IWa(v);A=5;break b}k[g>>2]=0;k[h>>2]=0;s=(oSa(g,h,0,t)|0)<0;o=k[g>>2]|0;c:do if(s|(o|0)==0){E=D;F=C}else{p=o;q=D;z=(C|0)!=0?D+1|0:0;G=C;while(1){H=q+1|0;if(H>>>0>>0){I=z;J=G}else{K=z+10+(z>>>1)|0;L=AYa(G,K<<2)|0;if(!L){E=q;F=G;break c}I=K;J=L}k[J+(q<<2)>>2]=p;k[J+(H<<2)>>2]=0;k[g>>2]=0;k[h>>2]=0;L=(oSa(g,h,0,t)|0)<0;p=k[g>>2]|0;if(L|(p|0)==0){E=H;F=J;break}else{q=H;z=I;G=J}}}while(0);o=(_Ra(t)|0)==0&1;QRa(t)|0;IWa(v);if(!F)M=zYa(E+1|0,4)|0;else M=F;s=b+4|0;k[s>>2]=M;k[b>>2]=E;if(!w){A=o;break b}G=k[u>>2]|0;if(M)if(G){z=G+-1|0;k[M+(z<<2)>>2]=0;if(!z)N=G;else{q=k[s>>2]|0;s=z;do{s=s+-1|0;k[q+(s<<2)>>2]=0}while((s|0)!=0);N=G}}else N=0;else N=G;k[b>>2]=E-N;A=o;break b}while(0);if(x)A=1;else{k[b>>2]=0;k[b+4>>2]=0;A=1}}while(0);Wb(k[m>>2]|0,0)|0;r=d;return A|0}function aNa(a){a=a|0;var b=0,c=0,d=0,e=0;b=a+4|0;c=k[b>>2]|0;if(c){if(!(k[a>>2]|0))d=c;else{e=a+8|0;yYa(k[c+(k[e>>2]<<2)>>2]|0);if((k[a>>2]|0)>>>0>1){c=1;do{yYa(k[(k[b>>2]|0)+((k[e>>2]|0)+c<<2)>>2]|0);c=c+1|0}while(c>>>0<(k[a>>2]|0)>>>0)}d=k[b>>2]|0}yYa(d);k[b>>2]=0;k[a>>2]=0}return}function bNa(a){a=a|0;var b=0,c=0,d=0;if(a)if(!(a&1)){b=a;a=0;while(1){b=b>>>1;if(b&1){c=a;break}else a=a+1|0}d=c+2|0}else d=1;else d=0;return d|0}function cNa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(Vc(96,d|0)|0)|0;r=c;return ((b|0)<0?b:20-b|0)|0}function dNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+32|0;e=d;f=d+16|0;k[f>>2]=c;c=(k[f>>2]|0)+(4-1)&~(4-1);g=k[c>>2]|0;k[f>>2]=c+4;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=g;g=KVa(wf(54,e|0)|0)|0;r=d;return g|0}function eNa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;e=k[d>>2]|0;if((e|0)<1)f=-1;else{k[c>>2]=b;k[d>>2]=1;Ib();b=Md()|0;a:do if(b){g=b;h=c;do{h=h+4|0;i=g;b:while(1){j=k[d>>2]|0;if((j|0)==2147483647)break a;l=k[i+12>>2]|0;m=k[l>>2]|0;c:do if(m){n=m;o=0;while(1){if(!(YLa(a,n)|0))break;o=o+1|0;n=k[l+(o<<2)>>2]|0;if(!n)break c}n=j+1|0;k[d>>2]=n;if(n>>>0<=e>>>0){p=i;break b}}while(0);i=Md()|0;if(!i)break a}k[h>>2]=k[p+8>>2];g=Md()|0}while((g|0)!=0)}while(0);Mb();p=k[d>>2]|0;f=p>>>0>e>>>0?-1:p}return f|0}function fNa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+400|0;d=c;JNa(d)|0;if((b|0)!=0?(e=d+325|0,(RLa(e)|0)>>>0>>0):0){OLa(a,e)|0;f=0}else{e=HSa()|0;k[e>>2]=22;f=-1}r=c;return f|0}function gNa(){var a=0,b=0,c=0,d=0,e=0;a=r;r=r+160|0;b=a+76|0;c=a;d=ue(316451)|0;if((((((d|0)!=0?(i[d>>0]|0)!=0:0)?(vTa(d,b)|0)==0:0)?(vTa(324339,c)|0)==0:0)?(k[b>>2]|0)==(k[c>>2]|0):0)?(k[b+72>>2]|0)==(k[c+72>>2]|0):0)e=Vf[624&1023](d)|0;else e=ZTa(0,0)|0;r=a;return e|0}function hNa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+32|0;d=c+16|0;e=c;f=c+24|0;k[e>>2]=0;k[e+4>>2]=a;k[e+8>>2]=0;k[e+12>>2]=b;g=KVa(Ee(340,e|0)|0)|0;if(!g){e=b;if((k[e>>2]|0)==-1?(k[e+4>>2]|0)==-1:0){e=b;k[e>>2]=-1;k[e+4>>2]=-1}e=b+8|0;h=e;if((k[h>>2]|0)==-1?(k[h+4>>2]|0)==-1:0){h=e;k[h>>2]=-1;k[h+4>>2]=-1;i=0}else i=0}else{h=HSa()|0;if((k[h>>2]|0)==38){k[d>>2]=a;k[d+4>>2]=f;if((KVa(ce(191,d|0)|0)|0)>=0){d=k[f>>2]|0;a=(d|0)==-1;h=b;k[h>>2]=a?-1:d;k[h+4>>2]=a?-1:0;h=k[f+4>>2]|0;f=(h|0)==-1;d=b+8|0;e=d;k[e>>2]=f?-1:h;k[e+4>>2]=f?-1:0;if(a){a=b;k[a>>2]=-1;k[a+4>>2]=-1}if(f){f=d;k[f>>2]=-1;k[f+4>>2]=-1;i=0}else i=0}else i=-1}else i=g}r=c;return i|0}function iNa(a,b){a=a|0;b=b|0;return nQa(a,b)|0}function jNa(a){a=a|0;QRa(a)|0;return 1}function kNa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;e=r;r=r+80|0;f=e+8|0;g=e;h=e+48|0;j=b+16|0;k[j>>2]=0;l=b+20|0;k[l>>2]=0;kRa(c,d,a)|0;a:do if(!(_Ra(a)|0)){m=h+4|0;n=h+8|0;o=h+12|0;p=h+16|0;q=h+20|0;s=h+24|0;t=h+28|0;while(1){if(YQa(a)|0){u=0;break a}if(!(VLa(c,10)|0)){v=5;break}k[f>>2]=h;k[f+4>>2]=m;k[f+8>>2]=n;k[f+12>>2]=o;k[f+16>>2]=p;k[f+20>>2]=q;k[f+24>>2]=s;k[f+28>>2]=t;k[f+32>>2]=j;k[f+36>>2]=l;if((TQa(c,316467,f)|0)>=2?(w=c+(k[h>>2]|0)|0,(i[w>>0]|0)!=35):0){x=w;v=9;break}kRa(c,d,a)|0;if(_Ra(a)|0){u=0;break a}}if((v|0)==5){cSa(a,316455,g)|0;w=HSa()|0;k[w>>2]=34;u=0;break}else if((v|0)==9){i[c+(k[m>>2]|0)>>0]=0;i[c+(k[o>>2]|0)>>0]=0;i[c+(k[q>>2]|0)>>0]=0;i[c+(k[t>>2]|0)>>0]=0;k[b>>2]=x;k[b+4>>2]=c+(k[n>>2]|0);k[b+8>>2]=c+(k[p>>2]|0);k[b+12>>2]=c+(k[s>>2]|0);u=b;break}}else u=0;while(0);r=e;return u|0}function lNa(a){a=a|0;return kNa(a,48880,316506,256)|0}function mNa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;if(!(YRa(a,0,2)|0)){e=k[b+4>>2]|0;f=k[b+8>>2]|0;g=k[b+12>>2]|0;h=k[b+16>>2]|0;i=k[b+20>>2]|0;k[d>>2]=k[b>>2];k[d+4>>2]=e;k[d+8>>2]=f;k[d+12>>2]=g;k[d+16>>2]=h;k[d+20>>2]=i;j=(vQa(a,316762,d)|0)>>>31}else j=1;r=c;return j|0}function nNa(a,b){a=a|0;b=b|0;return jMa(k[a+12>>2]|0,b)|0}function oNa(a){a=a|0;var b=0,c=0,d=0;if(!a)b=k[12226]|0;else{do{c=k[12226]|0;d=k[12226]|0;if((d|0)==(c|0))k[12226]=a}while((d|0)!=(c|0));b=c}return b|0}function pNa(){var a=0,b=0;a=r;r=r+16|0;b=a;Wb(1,b|0)|0;nd(48908);$Ta(k[12229]|0)|0;k[12229]=-1;xf(48908);Wb(k[b>>2]|0,0)|0;r=a;return}function qNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;Wb(1,e|0)|0;nd(48908);if(!a)i[316781]=0;else{f=GMa(a,31)|0;Dyb(316781,a|0,f|0)|0;i[316781+f>>0]=0}k[12230]=b;k[12231]=c;if((b&8|0)!=0&(k[12229]|0)<0)JWa();xf(48908);Wb(k[e>>2]|0,0)|0;r=d;return}function rNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+352|0;e=d;f=d+336|0;g=d+72|0;h=d+28|0;j=d+80|0;l=d+24|0;if(!(a>>>0>1023?1:(k[12226]&1<<(a&7)|0)==0)){Wb(1,l|0)|0;nd(48908);m=HSa()|0;n=k[m>>2]|0;if(!((k[12229]|0)<0?(JWa(),(k[12229]|0)<0):0)){o=((a&1016|0)==0?k[12231]|0:0)|a;a=sd(0)|0;k[g>>2]=a;cc(g|0,h|0)|0;ne(f|0,16,316813,h|0)|0;if(!(k[12230]&1))p=0;else p=aVa()|0;h=(p|0)==0&1;k[e>>2]=o;k[e+4>>2]=f;k[e+8>>2]=316781;k[e+12>>2]=316822+h;k[e+16>>2]=p;k[e+20>>2]=316824+h;h=uRa(j,256,316826,e)|0;k[m>>2]=n;n=256-h|0;m=KQa(j+h|0,n,b,c)|0;if((m|0)>-1){c=m>>>0>>0?m+h|0:255;if((i[j+(c+-1)>>0]|0)==10)q=c;else{i[j+c>>0]=10;q=c+1|0}GPa(k[12229]|0,j,q,0)|0}}xf(48908);Wb(k[l>>2]|0,0)|0}r=d;return}function sNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;rNa(a,b,e);r=d;return}function tNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=k[a>>2]|0;k[c>>2]=0;e=VLa(d,44)|0;k[a>>2]=e;if(!e){f=d+(RLa(d)|0)|0;k[a>>2]=f}else{k[a>>2]=e+1;i[e>>0]=0}e=k[b>>2]|0;a:do if(!e)g=-1;else{a=e;f=0;b:while(1){h=RLa(a)|0;if(!(eMa(a,d,h)|0)){j=d+h|0;switch(i[j>>0]|0){case 0:{g=f;break a;break}case 61:{l=j;m=f;break b;break}default:{}}}f=f+1|0;a=k[b+(f<<2)>>2]|0;if(!a){g=-1;break a}}k[c>>2]=l;g=m}while(0);return g|0}function uNa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c+16|0;e=c;f=c+24|0;k[e>>2]=0;k[e+4>>2]=a;k[e+8>>2]=b;k[e+12>>2]=0;g=Ee(340,e|0)|0;if((g|0)==-38){e=b;h=k[e>>2]|0;i=k[e+4>>2]|0;e=i>>>0<0|(i|0)==0&h>>>0<4294967295;i=e?h:-1;k[f>>2]=i;i=b+8|0;b=k[i>>2]|0;h=k[i+4>>2]|0;i=h>>>0<0|(h|0)==0&b>>>0<4294967295;h=i?b:-1;k[f+4>>2]=h;k[d>>2]=a;k[d+4>>2]=f;j=Xb(75,d|0)|0}else j=g;r=c;return j|0}function vNa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;k[d>>2]=b;k[d+4>>2]=a;a=d+8|0;k[a>>2]=0;OSa(1527,d);d=k[a>>2]|0;if(!d)e=0;else{a=HSa()|0;k[a>>2]=d;e=-1}r=c;return e|0}function wNa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;a:do if((a|0)!=0?(i[a>>0]|0)!=0:0){b=RLa(a)|0;while(1){b=b+-1|0;if((i[a+b>>0]|0)!=47){c=b;break}if(!b){d=317633;break a}}while(1){if(!c){d=324339;break a}b=c+-1|0;if((i[a+b>>0]|0)==47){e=b;break}else c=b}while(1){if(!e){d=317633;break a}b=e+-1|0;if((i[a+b>>0]|0)==47)e=b;else{f=e;break}}i[a+f>>0]=0;d=a}else d=324339;while(0);return d|0}function xNa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;if((a|0)!=0?(i[a>>0]|0)!=0:0){b=(RLa(a)|0)+-1|0;a:do if(!b)c=0;else{d=b;while(1){e=a+d|0;if((i[e>>0]|0)!=47){c=d;break a}i[e>>0]=0;d=d+-1|0;if(!d){c=0;break}}}while(0);while(1){if(!c){f=0;break}b=c+-1|0;if((i[a+b>>0]|0)==47){f=c;break}else c=b}g=a+f|0}else g=324339;return g|0}function yNa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a;a=0;c=0;while(1){d=i[b>>0]|0;if(!(d<<24>>24)){e=c;break}f=(_Ma(322937,d<<24>>24,65)|0)-322937<=36){e=f;break}else{b=b+1|0;c=f}}return e|0}function zNa(a){a=a|0;var b=0,c=0,d=0;if(!a)b=316846;else{c=316846;d=a;while(1){i[c>>0]=i[322937+(d&63)>>0]|0;a=c+1|0;d=d>>>6;if(!d){b=a;break}else c=a}}i[b>>0]=0;return 316846}function ANa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+144|0;d=c+8|0;e=c;k[e>>2]=32;if((eNa(a,b,d,e)|0)<0)f=-1;else f=$c(k[e>>2]|0,d|0)|0;r=c;return f|0}function BNa(a){a=a|0;var b=0,c=0;b=FNa(a,316853,22)|0;if(!b)c=316853;else{a=HSa()|0;k[a>>2]=b;c=0}return c|0}function CNa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=WPa(316875,a,b)|0;r=b;return c|0}function DNa(a){a=a|0;return 0}function ENa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;d=b+4|0;k[d>>2]=0;k[c>>2]=d;d=dNa(a,1074025521,c)|0;r=b;return d|0}function FNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+32|0;e=d+16|0;f=d;g=d+20|0;h=(b|0)==0?0:c;k[f>>2]=a;k[f+4>>2]=-2147199952;k[f+8>>2]=g;a=wf(54,f|0)|0;if(!a){k[e>>2]=k[g>>2];g=(uRa(b,h,316885,e)|0)>>>0>>0;i=g?0:34}else i=0-a|0;r=d;return i|0}function GNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(he(211,e|0)|0)|0;r=d;return c|0}function HNa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+4304|0;d=c+16|0;e=c+8|0;f=c;g=c+96|0;h=c+20|0;j=c+4272|0;l=c+176|0;do if(a){k[f>>2]=a;k[f+4>>2]=2656256;m=KVa(qd(5,f|0)|0)|0;if((m|0)<0)n=0;else{IVa(j,m);o=fUa(j,l,4095)|0;if((o|0)>=0?(i[l+o>>0]=0,ATa(m,g)|0,o=vTa(l,h)|0,(o|0)>=0):0){if((k[g>>2]|0)==(k[h>>2]|0)?(k[g+72>>2]|0)==(k[h+72>>2]|0):0){k[e>>2]=m;pd(6,e|0)|0;if(!b){n=Vf[624&1023](l)|0;break}else{n=OLa(b,l)|0;break}}if(!o){o=HSa()|0;k[o>>2]=40}}k[d>>2]=m;pd(6,d|0)|0;n=0}}else{m=HSa()|0;k[m>>2]=22;n=0}while(0);r=c;return n|0}function INa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(wd(209,e|0)|0)|0;r=d;return c|0}function JNa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(Ac(122,c|0)|0)|0;r=b;return a|0}function KNa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;f=r;r=r+80|0;g=f+40|0;h=f+32|0;i=f+24|0;j=f+16|0;l=f+8|0;m=f+44|0;n=f+48|0;k[m>>2]=0;o=WPa(316875,258,f)|0;k[a>>2]=o;do if((o|0)<0)p=-1;else{k[l>>2]=m;if((dNa(o,1074025521,l)|0)==0?(q=k[a>>2]|0,k[j>>2]=m,(dNa(q,-2147199952,j)|0)==0):0){q=(c|0)==0?n:c;k[i>>2]=k[m>>2];uRa(q,20,316885,i)|0;s=WPa(q,258,h)|0;k[b>>2]=s;if((s|0)<0){$Ta(k[a>>2]|0)|0;p=-1;break}if(d)fFa(s,0,d)|0;if(!e){p=0;break}s=k[b>>2]|0;k[g>>2]=e;dNa(s,21524,g)|0;p=0;break}$Ta(k[a>>2]|0)|0;p=-1}while(0);r=f;return p|0}function LNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,l=0;d=r;r=r+48|0;e=d+16|0;f=d+8|0;g=d;h=d+24|0;j[h>>1]=1;j[h+2>>1]=1;k[h+4>>2]=0;k[h+8>>2]=c;c=h+12|0;k[c>>2]=0;switch(b|0){case 3:{j[h>>1]=0;k[g>>2]=h;if((VPa(a,12,g)|0)>=0)if((j[h>>1]|0)!=2?(g=k[c>>2]|0,(g|0)!=(aVa()|0)):0){g=HSa()|0;k[g>>2]=13;i=-1}else i=0;else i=-1;break}case 0:{j[h>>1]=2;l=7;break}case 2:{l=7;break}case 1:{k[e>>2]=h;i=VPa(a,14,e)|0;break}default:{e=HSa()|0;k[e>>2]=22;i=-1}}if((l|0)==7){k[f>>2]=h;i=VPa(a,13,f)|0}r=d;return i|0}function MNa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(Bc(121,d|0)|0)|0;r=c;return b|0}function NNa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=r;r=r+4112|0;f=e;g=e+4|0;do if((c|0)>=1){h=RLa(a)|0;if(h>>>0>4096){i=HSa()|0;k[i>>2]=36;j=-1;break}else{Dyb(g|0,a|0,h+1|0)|0;Wb(1,f|0)|0;h=LWa(g,b,c,d,0)|0;Wb(k[f>>2]|0,0)|0;j=h;break}}else j=0;while(0);r=e;return j|0}function ONa(){return 0}function PNa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(Zb(77,d|0)|0)|0;r=c;return b|0}function QNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+16|0;e=d+4|0;f=d;g=k[12008]|0;if((g|0)==0|(k[12010]|0)!=0){k[12010]=0;k[12011]=0;k[12008]=1;h=1}else h=g;a:do if(((h|0)<(a|0)?(g=k[b+(h<<2)>>2]|0,(g|0)!=0):0)?(i[g>>0]|0)==45:0){switch(i[g+1>>0]|0){case 0:{j=-1;break a;break}case 45:{if(!(i[g+2>>0]|0)){k[12008]=h+1;j=-1;break a}break}default:{}}l=k[12011]|0;if(!l){k[12011]=1;m=1}else m=l;l=tVa(e,g+m|0,4)|0;if((l|0)<0){k[e>>2]=65533;n=65533;o=1}else{n=k[e>>2]|0;o=l}l=k[12008]|0;g=k[b+(l<<2)>>2]|0;p=k[12011]|0;q=g+p|0;k[12012]=n;s=p+o|0;k[12011]=s;if(!(i[g+s>>0]|0)){k[12008]=l+1;k[12011]=0}l=tVa(f,c,4)|0;b:do if(!l)t=0;else{s=l;g=0;while(1){if((k[f>>2]|0)==(k[e>>2]|0)){t=g;break b}p=((s|0)<1?1:s)+g|0;s=tVa(f,c+p|0,4)|0;if(!s){t=p;break}else g=p}}while(0);l=k[f>>2]|0;if((l|0)!=(k[e>>2]|0)){if(!((i[c>>0]|0)!=58&(k[12009]|0)!=0)){j=63;break}g=k[b>>2]|0;hUa(2,g,RLa(g)|0)|0;hUa(2,316897,18)|0;hUa(2,q,o)|0;hUa(2,324246,1)|0;j=63;break}if((i[c+(t+1)>>0]|0)==58){g=k[12008]|0;if((g|0)<(a|0)){k[12008]=g+1;k[12013]=(k[b+(g<<2)>>2]|0)+(k[12011]|0);k[12011]=0;j=l;break}if((i[c>>0]|0)!=58)if(!(k[12009]|0))j=63;else{g=k[b>>2]|0;hUa(2,g,RLa(g)|0)|0;hUa(2,316916,31)|0;hUa(2,q,o)|0;hUa(2,324246,1)|0;j=63}else j=58}else j=l}else j=-1;while(0);r=d;return j|0}function RNa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return MWa(a,b,c,d,e,0)|0}function SNa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return MWa(a,b,c,d,e,1)|0}function TNa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e+16|0;g=e+8|0;h=e;i=e+32|0;j=e+20|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;do if((KNa(a,i,b,c,d)|0)>=0){l=0;a:while(1){do if((VPa(l,3,h)|0)<0){m=k[i>>2]|0;k[g>>2]=l;n=VPa(m,0,g)|0;if((n|0)<0){o=-1;break a}if((n|0)==(l|0)){k[j+(l<<2)>>2]=1;break}else{$Ta(n)|0;break}}while(0);n=l+1|0;if((n|0)<3)l=n;else{p=n;q=9;break}}if((q|0)==9)if((p|0)==3){l=Xe()|0;if(!l){$Ta(k[a>>2]|0)|0;eVa()|0;n=k[i>>2]|0;k[f>>2]=0;dNa(n,21518,f)|0;_Ta(k[i>>2]|0,0)|0;_Ta(k[i>>2]|0,1)|0;_Ta(k[i>>2]|0,2)|0;n=k[i>>2]|0;if((n|0)<=2){s=0;break}$Ta(n)|0;s=0;break}else o=l}else o=-1;if(k[j>>2]|0)$Ta(0)|0;if(k[j+4>>2]|0)$Ta(1)|0;if(k[j+8>>2]|0)$Ta(2)|0;$Ta(k[i>>2]|0)|0;if((o|0)<0){$Ta(k[a>>2]|0)|0;s=o}else s=o}else s=-1;while(0);r=e;return s|0}function UNa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(Uc(97,e|0)|0)|0;r=d;return c|0}function VNa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=a;while(1){a=b+1|0;if(!(yIa(i[b>>0]|0)|0)){c=b;d=a;break}else b=a}b=i[c>>0]|0;switch(b<<24>>24|0){case 45:{e=1;f=5;break}case 43:{e=0;f=5;break}default:{g=c;h=b;j=0}}if((f|0)==5){g=d;h=i[d>>0]|0;j=e}e=(h<<24>>24)+-48|0;if(e>>>0<10){h=g;g=e;e=0;while(1){h=h+1|0;d=(e*10|0)-g|0;g=(i[h>>0]|0)+-48|0;if(g>>>0>=10){k=d;break}else e=d}}else k=0;return ((j|0)!=0?k:0-k|0)|0}function WNa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=Oyb(b|0,c|0,d|0,e|0)|0;g=a;k[g>>2]=f;k[g+4>>2]=M;g=Pyb(b|0,c|0,d|0,e|0)|0;e=a+8|0;k[e>>2]=g;k[e+4>>2]=M;return}function XNa(a,b){a=a|0;b=b|0;var c=0,d=0;c=(b|0)>0|(b|0)==0&a>>>0>0;d=Gyb(0,0,a|0,b|0)|0;M=c?b:M;return (c?a:d)|0}function YNa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;e=r;r=r+208|0;f=e+8|0;g=e;h=ia(c,b)|0;b=g;k[b>>2]=1;k[b+4>>2]=0;if(h){b=0-c|0;k[f+4>>2]=c;k[f>>2]=c;i=c;j=c;l=2;while(1){m=j+c+i|0;k[f+(l<<2)>>2]=m;if(m>>>0>>0){n=i;i=m;l=l+1|0;j=n}else break}j=a+h+b|0;h=g+4|0;if(j>>>0>a>>>0){l=j;i=1;n=a;m=1;while(1){do if((i&3|0)==3){NWa(n,c,d,m,f);o=k[h>>2]|0;p=o<<30|(k[g>>2]|0)>>>2;k[g>>2]=p;k[h>>2]=o>>>2;q=p;s=m+2|0}else{p=m+-1|0;if((k[f+(p<<2)>>2]|0)>>>0<(l-n|0)>>>0)NWa(n,c,d,m,f);else OWa(n,c,d,g,m,0,f);if((m|0)==1){o=k[g>>2]|0;k[h>>2]=o>>>31|k[h>>2]<<1;t=o<<1;k[g>>2]=t;q=t;s=0;break}if(p>>>0>31){t=k[g>>2]|0;k[h>>2]=t;k[g>>2]=0;u=m+-33|0;v=t;w=0}else{u=p;v=k[h>>2]|0;w=k[g>>2]|0}k[h>>2]=w>>>(32-u|0)|v<>2]=p;q=p;s=1}while(0);i=q|1;k[g>>2]=i;p=n+c|0;if(p>>>0>=j>>>0){x=p;y=s;break}else{n=p;m=s}}}else{x=a;y=1}OWa(x,c,d,g,y,0,f);a=g+4|0;s=k[g>>2]|0;if(!((y|0)==1&(s|0)==1&(k[a>>2]|0)==0)){m=s;s=x;x=y;while(1){if((x|0)<2){y=m+-1|0;do if(y){if(!(y&1)){n=y;j=0;while(1){i=j+1|0;n=n>>>1;if(n&1){z=i;break}else j=i}if(z)A=z;else B=24}else B=24;if((B|0)==24){B=0;j=k[h>>2]|0;if(!j){C=64;B=30;break}if(!(j&1)){D=j;E=0}else{F=0;G=m;H=j;I=0;break}while(1){n=E+1|0;D=D>>>1;if(D&1){J=n;K=E;break}else E=n}if(!J){F=0;G=m;H=j;I=0;break}else A=K+33|0}if(A>>>0>31){C=A;B=30}else{F=A;G=m;H=k[h>>2]|0;I=A}}else{C=32;B=30}while(0);if((B|0)==30){B=0;y=k[h>>2]|0;k[g>>2]=y;k[h>>2]=0;F=C+-32|0;G=y;H=0;I=C}k[g>>2]=H<<32-F|G>>>F;k[h>>2]=H>>>F;L=s+b|0;M=I+x|0}else{y=m>>>30;n=y|k[h>>2]<<2;i=x+-2|0;k[g>>2]=(m<<1&2147483646|y<<31)^3;k[h>>2]=n>>>1;OWa(s+(0-(k[f+(i<<2)>>2]|0))+b|0,c,d,g,x+-1|0,1,f);n=k[g>>2]|0;k[h>>2]=n>>>31|k[h>>2]<<1;k[g>>2]=n<<1|1;n=s+b|0;OWa(n,c,d,g,i,1,f);L=n;M=i}m=k[g>>2]|0;if((M|0)==1&(m|0)==1&(k[a>>2]|0)==0)break;else{s=L;x=M}}}}r=e;return}function ZNa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;a:do if(!c)f=0;else{g=b;h=c;while(1){i=h>>>1;j=g+(ia(i,d)|0)|0;k=cg[e&1023](a,j)|0;if(!k){f=j;break a}if((h|0)==1){f=0;break a}l=(k|0)<0;h=l?i:h-i|0;if(!h){f=0;break}else g=l?g:j}}while(0);return f|0}function _Na(a,b,c,d){a=+a;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;e=r;r=r+1520|0;f=e;g=e+16|0;h=b>>>0>1400?1400:b;k[f>>2]=h;p[f+8>>3]=a;ORa(g,316948,f)|0;f=(i[g>>0]|0)==45&1;j=g+f|0;if((i[j>>0]|0)==48)l=kMa(j+2|0,324198)|0;else l=0-(MLa(j,324339)|0)|0;if((h|0)>(l|0))m=oOa(a,h-l|0,c,d)|0;else{k[d>>2]=f;k[c>>2]=1;m=316967+(h>>>0>14?-14:0-b|0)|0}r=e;return m|0}function $Na(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=PWa(a,b,c,-1,-1)|0;return d|0}function aOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=PWa(a,b,c,0,-2147483648)|0;return d|0}function bOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=PWa(a,b,c,-1,0)|0;return d|0}function cOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=PWa(a,b,c,-2147483648,0)|0;return d|0}function dOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=PWa(a,b,c,0,-2147483648)|0;return d|0}function eOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=PWa(a,b,c,-1,-1)|0;return d|0}function fOa(a){a=a|0;return +(+qOa(a,0))}function gOa(a){a=a|0;return ((a|0)>0?a:0-a|0)|0}function hOa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=a;while(1){a=b+1|0;if(!(yIa(i[b>>0]|0)|0)){c=b;d=a;break}else b=a}b=i[c>>0]|0;switch(b<<24>>24|0){case 45:{e=1;f=5;break}case 43:{e=0;f=5;break}default:{g=c;h=b;j=0}}if((f|0)==5){g=d;h=i[d>>0]|0;j=e}e=(h<<24>>24)+-48|0;if(e>>>0<10){h=g;g=e;e=0;while(1){h=h+1|0;d=(e*10|0)-g|0;g=(i[h>>0]|0)+-48|0;if(g>>>0>=10){k=d;break}else e=d}}else k=0;return ((j|0)!=0?k:0-k|0)|0}function iOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QWa(a,b,c,-1,-1)|0;return d|0}function jOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QWa(a,b,c,0,-2147483648)|0;return d|0}function kOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QWa(a,b,c,-1,0)|0;return d|0}function lOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QWa(a,b,c,-2147483648,0)|0;return d|0}function mOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QWa(a,b,c,0,-2147483648)|0;return d|0}function nOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QWa(a,b,c,-1,-1)|0;return d|0}function oOa(a,b,c,d){a=+a;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=r;r=r+48|0;f=e;g=e+16|0;h=b+-1|0;k[f>>2]=h>>>0>15?14:h;p[f+8>>3]=a;ORa(g,316969,f)|0;f=(i[g>>0]|0)==45&1;k[d>>2]=f;d=i[g+f>>0]|0;if(d<<24>>24==101){j=316974;l=f}else{h=316974;b=d;d=f;f=0;while(1){i[h>>0]=b;m=d+1|0;f=(b<<24>>24!=46&1)+f|0;b=i[g+m>>0]|0;n=316974+f|0;if(b<<24>>24==101){j=n;l=m;break}else{h=n;d=m}}}i[j>>0]=0;j=(VNa(g+l+1|0)|0)+1|0;k[c>>2]=j;r=e;return 316974}function pOa(a,b){a=a|0;b=b|0;return +(+RWa(a,b,0))}function qOa(a,b){a=a|0;b=b|0;return +(+RWa(a,b,1))}function rOa(a,b){a=a|0;b=b|0;return +(+RWa(a,b,2))}function sOa(a,b,c){a=a|0;b=b|0;c=c|0;return +(+RWa(a,b,0))}function tOa(a,b,c){a=a|0;b=b|0;c=c|0;return +(+RWa(a,b,1))}function uOa(a,b,c){a=a|0;b=b|0;c=c|0;return +(+RWa(a,b,2))}function vOa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=a;while(1){a=b+1|0;if(!(yIa(i[b>>0]|0)|0)){c=b;d=a;break}else b=a}b=i[c>>0]|0;switch(b<<24>>24|0){case 45:{e=1;f=5;break}case 43:{e=0;f=5;break}default:{g=c;h=b;j=0}}if((f|0)==5){g=d;h=i[d>>0]|0;j=e}e=(h<<24>>24)+-48|0;if(e>>>0<10){h=g;g=0;d=0;f=e;while(1){e=Qyb(d|0,g|0,10,0)|0;h=h+1|0;b=Gyb(e|0,M|0,f|0,((f|0)<0)<<31>>31|0)|0;e=M;f=(i[h>>0]|0)+-48|0;if(f>>>0>=10){k=b;l=e;break}else{g=e;d=b}}}else{k=0;l=0}d=(j|0)!=0;j=Gyb(0,0,k|0,l|0)|0;M=d?l:M;return (d?k:j)|0}function wOa(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=(b|0)/(c|0)|0;k[a+4>>2]=(b|0)%(c|0)|0;return}function xOa(a,b){a=a|0;b=b|0;return +(+SWa(a,b,0))}function yOa(a,b){a=a|0;b=b|0;return +(+SWa(a,b,1))}function zOa(a,b){a=a|0;b=b|0;return +(+SWa(a,b,2))}function AOa(a,b){a=a|0;b=b|0;var c=0,d=0;c=(b|0)>0|(b|0)==0&a>>>0>0;d=Gyb(0,0,a|0,b|0)|0;M=c?b:M;return (c?a:d)|0}function BOa(a,b,c){a=+a;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=b;p[e+8>>3]=a;ORa(c,316990,e)|0;r=d;return c|0}function COa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=Oyb(b|0,c|0,d|0,e|0)|0;g=a;k[g>>2]=f;k[g+4>>2]=M;g=Pyb(b|0,c|0,d|0,e|0)|0;e=a+8|0;k[e>>2]=g;k[e+4>>2]=M;return}function DOa(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=(b|0)/(c|0)|0;k[a+4>>2]=(b|0)%(c|0)|0;return}function EOa(a){a=a|0;yYa(a);return}function FOa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return $Oa(a,b,c,d,0,0)|0}function GOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d;f=d+8|0;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[e>>2]=6;k[e+4>>2]=f;f=KVa(Id(102,e|0)|0)|0;r=d;return f|0}function HOa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+80|0;e=d+8|0;f=d;g=e;h=g+64|0;do{k[g>>2]=0;g=g+4|0}while((g|0)<(h|0));a:do if((b|0)!=10){g=0;h=c;b:while(1){l=kOa(h,f,0)|0;k[e+(g<<2)>>2]=l;l=k[f>>2]|0;if((l|0)==(h|0)){m=5;break}n=i[l>>0]|0;switch(n<<24>>24){case 46:case 0:break;default:{m=5;break b}}if(((i[h>>0]|0)+-48|0)>>>0>=10){m=5;break}if(!(n<<24>>24)){o=g;break}n=g+1|0;if((n|0)<4){g=n;h=l+1|0}else{o=n;break}}if((m|0)==5)if((b|0)==2){p=-1;break}else{m=16;break}switch(o|0){case 4:{p=-1;break a;break}case 0:{h=k[e>>2]|0;g=h&16777215;n=e+4|0;k[n>>2]=g;k[e>>2]=h>>>24;q=n;s=g;m=12;break}case 1:{g=e+4|0;q=g;s=k[g>>2]|0;m=12;break}case 2:{g=e+8|0;t=g;u=k[g>>2]|0;m=13;break}default:{}}if((m|0)==12){g=s&65535;n=e+8|0;k[n>>2]=g;k[q>>2]=s>>>16;t=n;u=g;m=13}if((m|0)==13){k[e+12>>2]=u&255;k[t>>2]=u>>>8}j[a>>1]=2;g=k[e>>2]|0;if(((g>>>0<=255?(i[a+4>>0]=g,g=k[e+4>>2]|0,g>>>0<=255):0)?(i[a+5>>0]=g,g=k[e+8>>2]|0,g>>>0<=255):0)?(i[a+6>>0]=g,g=k[e+12>>2]|0,g>>>0<=255):0){i[a+7>>0]=g;p=0}else p=-1}else m=16;while(0);if((m|0)==16){j[a>>1]=10;p=((bPa(10,c,a+8|0)|0)<1)<<31>>31}r=d;return p|0}function IOa(a){a=a|0;return Jyb(a|0)|0}function JOa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+-1|0;a:do if(!b)c=316995;else{a=b;d=316995;while(1){if(!(i[d>>0]|0)){c=d;break a}e=d+1|0;while(1){f=e+1|0;if(!(i[e>>0]|0)){g=f;break}else e=f}a=a+-1|0;if(!a){c=g;break}else d=g}}while(0);return ((i[c>>0]|0)!=0?c:c+1|0)|0}function KOa(){return 48928}function LOa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c+4|0;e=c;f=a;a=0;while(1){if(!a)g=f;else{if((i[f>>0]|0)!=58){h=0;break}g=f+1|0}j=kOa(g,e,16)|0;if(j>>>0>255){h=0;break}l=k[e>>2]|0;i[d+a>>0]=j;a=a+1|0;if((a|0)>=6){m=l;n=7;break}else f=l}if((n|0)==7)if(!(i[m>>0]|0)){i[b>>0]=i[d>>0]|0;i[b+1>>0]=i[d+1>>0]|0;i[b+2>>0]=i[d+2>>0]|0;i[b+3>>0]=i[d+3>>0]|0;i[b+4>>0]=i[d+4>>0]|0;i[b+5>>0]=i[d+5>>0]|0;h=b}else h=0;r=c;return h|0}function MOa(a){a=a|0;return LOa(a,317079)|0}function NOa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=b;f=0;do{k[d>>2]=l[a+f>>0];e=e+(ORa(e,(f|0)==0?317085:317090,d)|0)|0;f=f+1|0}while((f|0)!=6);r=c;return b|0}function OOa(a){a=a|0;return NOa(a,317096)|0}function POa(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function QOa(a,b){a=a|0;b=b|0;return -1}function ROa(a,b){a=a|0;b=b|0;return -1}function SOa(a){a=a|0;var b=0;if(a){b=a;do{a=b;b=k[b>>2]|0;yYa(a)}while((b|0)!=0)}return}function TOa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;b=r;r=r+1728|0;c=b+80|0;d=b+72|0;e=b+64|0;f=b+56|0;g=b+48|0;h=b+40|0;m=b;n=b+1208|0;o=b+1184|0;p=b+1180|0;q=b+1176|0;s=b+1172|0;t=b+1188|0;u=b+1144|0;v=b+1140|0;w=b+1136|0;x=b+112|0;y=b+104|0;k[v>>2]=0;k[w>>2]=0;z=jPa()|0;if(!z)A=-1;else{B=0;while(1){C=k[z+(B<<3)+4>>2]|0;if((C|0)==0?(k[z+(B<<3)>>2]|0)==0:0){D=5;break}if(!(TWa(v,w,C)|0)){D=4;break}else B=B+1|0}a:do if((D|0)==4){WOa(z);D=49}else if((D|0)==5){WOa(z);B=aPa(2,524290,0)|0;if((B|0)==-1)D=49;else{k[y>>2]=1024;k[y+4>>2]=x;k[m>>2]=y;do if((dNa(B,35090,m)|0)!=-1){C=(k[y>>2]|0)>>>5;E=k[v>>2]|0;k[w>>2]=E;if(E){F=(C|0)==0;G=m+16|0;H=E;do{E=H;b:do if(F){I=H;J=E}else{K=E+112|0;L=0;while(1){if(!(YLa(x+(L<<5)|0,K)|0)){M=L;break}L=L+1|0;if(L>>>0>=C>>>0){I=H;J=E;break b}}L=E+28|0;K=x+(M<<5)+16|0;k[L>>2]=k[K>>2];k[L+4>>2]=k[K+4>>2];k[L+8>>2]=k[K+8>>2];k[L+12>>2]=k[K+12>>2];k[E+12>>2]=L;L=k[w>>2]|0;I=L;J=L}while(0);k[h>>2]=J+112;uRa(m,16,317630,h)|0;k[g>>2]=m;if((dNa(B,35091,g)|0)==-1){D=24;break}E=j[G>>1]|0;L=J+8|0;k[L>>2]=E;if(!(k[J+12>>2]|0))N=I;else{k[L>>2]=E|65536;k[f>>2]=m;if((dNa(B,35099,f)|0)==-1){D=24;break}E=J+56|0;k[E>>2]=k[G>>2];k[E+4>>2]=k[G+4>>2];k[E+8>>2]=k[G+8>>2];k[E+12>>2]=k[G+12>>2];k[J+16>>2]=E;E=k[w>>2]|0;if(!(k[E+8>>2]&16)){k[d>>2]=m;if((dNa(B,35097,d)|0)==-1){D=24;break}L=E+84|0;k[L>>2]=k[G>>2];k[L+4>>2]=k[G+4>>2];k[L+8>>2]=k[G+8>>2];k[L+12>>2]=k[G+12>>2];O=L}else{k[e>>2]=m;if((dNa(B,35095,e)|0)==-1){D=24;break}L=E+84|0;k[L>>2]=k[G>>2];k[L+4>>2]=k[G+4>>2];k[L+8>>2]=k[G+8>>2];k[L+12>>2]=k[G+12>>2];O=L}k[E+20>>2]=O;N=E}H=k[N>>2]|0;k[w>>2]=H}while((H|0)!=0);if((D|0)==24)break;H=k[v>>2]|0;$Ta(B)|0;k[w>>2]=H;if(!H)P=0;else{G=H;while(1){H=k[G>>2]|0;k[w>>2]=H;if(!H){Q=G;break}else G=H}P=Q}}else{$Ta(B)|0;k[w>>2]=0;P=0}k[w>>2]=P;G=nQa(317114,317133)|0;c:do if(G){H=u+8|0;C=u+8|0;F=m+4|0;E=m+5|0;L=m+9|0;K=m+10|0;R=m+14|0;S=m+15|0;T=m+19|0;U=m+20|0;V=m+24|0;W=m+25|0;X=m+29|0;Y=m+30|0;Z=m+34|0;_=m+35|0;$=m+39|0;d:while(1){aa=kRa(n,512,G)|0;if(!aa)break;k[m>>2]=l[aa>>0]|l[aa+1>>0]<<8|l[aa+2>>0]<<16|l[aa+3>>0]<<24;i[F>>0]=58;ba=aa+4|0;ca=l[ba>>0]|l[ba+1>>0]<<8|l[ba+2>>0]<<16|l[ba+3>>0]<<24;i[E>>0]=ca;i[E+1>>0]=ca>>8;i[E+2>>0]=ca>>16;i[E+3>>0]=ca>>24;i[L>>0]=58;ca=aa+8|0;ba=l[ca>>0]|l[ca+1>>0]<<8|l[ca+2>>0]<<16|l[ca+3>>0]<<24;j[K>>1]=ba;j[K+2>>1]=ba>>>16;i[R>>0]=58;ba=aa+12|0;ca=l[ba>>0]|l[ba+1>>0]<<8|l[ba+2>>0]<<16|l[ba+3>>0]<<24;i[S>>0]=ca;i[S+1>>0]=ca>>8;i[S+2>>0]=ca>>16;i[S+3>>0]=ca>>24;i[T>>0]=58;ca=aa+16|0;k[U>>2]=l[ca>>0]|l[ca+1>>0]<<8|l[ca+2>>0]<<16|l[ca+3>>0]<<24;i[V>>0]=58;ca=aa+20|0;ba=l[ca>>0]|l[ca+1>>0]<<8|l[ca+2>>0]<<16|l[ca+3>>0]<<24;i[W>>0]=ba;i[W+1>>0]=ba>>8;i[W+2>>0]=ba>>16;i[W+3>>0]=ba>>24;i[X>>0]=58;ba=aa+24|0;ca=l[ba>>0]|l[ba+1>>0]<<8|l[ba+2>>0]<<16|l[ba+3>>0]<<24;j[Y>>1]=ca;j[Y+2>>1]=ca>>>16;i[Z>>0]=58;ca=aa+28|0;ba=l[ca>>0]|l[ca+1>>0]<<8|l[ca+2>>0]<<16|l[ca+3>>0]<<24;i[_>>0]=ba;i[_+1>>0]=ba>>8;i[_+2>>0]=ba>>16;i[_+3>>0]=ba>>24;i[$>>0]=0;k[c>>2]=o;k[c+4>>2]=p;k[c+8>>2]=q;k[c+12>>2]=s;k[c+16>>2]=t;e:do if((TQa(aa+33|0,317137,c)|0)==5){k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;k[u+20>>2]=0;k[u+24>>2]=0;f:do if((bPa(10,m,H)|0)==1){j[u>>1]=10;ba=TWa(v,w,t)|0;if(!ba){da=7;break e}ca=ba+28|0;k[ca>>2]=k[u>>2];k[ca+4>>2]=k[u+4>>2];k[ca+8>>2]=k[u+8>>2];k[ca+12>>2]=k[u+12>>2];k[ca+16>>2]=k[u+16>>2];k[ca+20>>2]=k[u+20>>2];k[ca+24>>2]=k[u+24>>2];k[ba+12>>2]=ca;ca=k[p>>2]|0;ea=ca>>>3;fa=ca&7;Fyb(C|0,-1,ea|0)|0;ca=C+ea|0;Fyb(ca|0,0,16-ea|0)|0;if(fa)i[ca>>0]=255<<8-fa;fa=ba+56|0;k[fa>>2]=k[u>>2];k[fa+4>>2]=k[u+4>>2];k[fa+8>>2]=k[u+8>>2];k[fa+12>>2]=k[u+12>>2];k[fa+16>>2]=k[u+16>>2];k[fa+20>>2]=k[u+20>>2];k[fa+24>>2]=k[u+24>>2];k[ba+16>>2]=fa;fa=k[v>>2]|0;g:do if(fa){ca=fa;while(1){if(!(YLa(t,ca+112|0)|0)){ga=ca;break}ca=k[ca>>2]|0;if(!ca)break g}k[ba+8>>2]=k[ga+8>>2];break f}while(0);k[ba+8>>2]=0}else{fa=HSa()|0;k[fa>>2]=0}while(0);da=0}else da=0;while(0);switch(da|0){case 0:break;case 7:{break d;break}default:break c}}QRa(G)|0}while(0);k[a>>2]=k[v>>2];ha=0;break a}while(0);$Ta(B)|0;D=49}}while(0);if((D|0)==49){D=k[v>>2]|0;if(!D)ha=-1;else{v=D;do{D=v;v=k[v>>2]|0;yYa(D)}while((v|0)!=0);ha=-1}}A=ha}r=b;return A|0}function UOa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=r;r=r+32|0;h=g;i=g+8|0;k[i>>2]=a;k[i+4>>2]=b;k[i+8>>2]=c;k[i+12>>2]=d;k[i+16>>2]=e;k[i+20>>2]=f;k[h>>2]=11;k[h+4>>2]=i;i=KVa(Id(102,h|0)|0)|0;r=g;return i|0}function VOa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;d=k[12025]|0;e=(a|0)!=0;f=TPa()|0;g=JOa(k[f>>2]|0)|0;k[c>>2]=e?a:329672;k[c+4>>2]=e?325552:329672;k[c+8>>2]=g;vQa(d,317152,c)|0;r=b;return}function WOa(a){a=a|0;yYa(a);return}function XOa(){return}function YOa(a){a=a|0;return}function ZOa(){return 0}function _Oa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;d=k[a>>2]|0;k[c>>2]=d&255;k[c+4>>2]=d>>>8&255;k[c+8>>2]=d>>>16&255;k[c+12>>2]=d>>>24;uRa(317159,16,317175,c)|0;r=b;return 317159}function $Oa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=r;r=r+32|0;h=g;i=g+8|0;k[i>>2]=a;k[i+4>>2]=b;k[i+8>>2]=c;k[i+12>>2]=d;k[i+16>>2]=e;k[i+20>>2]=f;k[h>>2]=12;k[h+4>>2]=i;i=KVa(Id(102,h|0)|0)|0;r=g;return i|0}function aPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=r;r=r+96|0;e=d+32|0;f=d+24|0;g=d+16|0;h=d+8|0;i=d;j=d+64|0;l=d+40|0;k[j>>2]=a;k[j+4>>2]=b;k[j+8>>2]=c;k[j+12>>2]=0;k[j+16>>2]=0;k[j+20>>2]=0;k[i>>2]=1;k[i+4>>2]=j;j=KVa(Id(102,i|0)|0)|0;a:do if((j|0)<0){i=HSa()|0;switch(k[i>>2]|0){case 93:case 22:break;default:{m=j;break a}}if(b&526336){k[l>>2]=a;k[l+4>>2]=b&-526337;k[l+8>>2]=c;k[l+12>>2]=0;k[l+16>>2]=0;k[l+20>>2]=0;k[h>>2]=1;k[h+4>>2]=l;i=KVa(Id(102,h|0)|0)|0;if((i|0)>=0){if(b&524288){k[g>>2]=1;VPa(i,2,g)|0}if(b&2048){n=VPa(i,3,f)|0|2048;k[e>>2]=n;VPa(i,4,e)|0;m=i}else m=i}else m=i}else m=j}else m=j;while(0);r=d;return m|0}function bPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;d=r;r=r+16|0;e=d;a:do switch(a|0){case 2:{f=b;g=0;while(1){h=i[f>>0]|0;l=(h<<24>>24)+-48|0;if(l>>>0>=10){n=0;break a}o=i[f+1>>0]|0;if((o+-48|0)>>>0<10){p=(l*10|0)+-48+o|0;o=i[f+2>>0]|0;if((o+-48|0)>>>0<10){q=3;s=(p*10|0)+-48+o|0}else{q=2;s=p}if((s|0)>255|h<<24>>24==48){n=0;break a}else{t=q;u=s}}else{t=1;u=l}i[c+g>>0]=u;l=i[f+t>>0]|0;if((g|0)==3&l<<24>>24==0){n=1;break a}if(l<<24>>24!=46){n=0;break a}g=g+1|0;if((g|0)>=4){n=0;break}else f=f+(t+1)|0}break}case 10:{f=i[b>>0]|0;if(f<<24>>24==58){g=b+1|0;if((i[g>>0]|0)==58){v=g;w=58;x=-1;y=0}else{n=0;break a}}else{v=b;w=f;x=-1;y=0}b:while(1){f=(x|0)<0;if(f&w<<24>>24==58){j[e+((y&7)<<1)>>1]=0;g=v+1|0;l=i[g>>0]|0;if(!(l<<24>>24)){z=g;A=y;B=y;C=0;break}if((y|0)==7){n=0;break a}else{D=g;E=l;F=y}}else{l=w;g=0;h=0;while(1){p=l<<24>>24;o=p+-48|0;if(o>>>0>=10){G=p|32;p=G+-87|0;if((G+-97|0)>>>0<6&(p|0)>-1)H=p;else{I=g;J=h;K=18;break}}else H=o;o=H+(h<<4)|0;p=g+1|0;if((p|0)>=4){L=p;M=o;break}l=i[v+p>>0]|0;g=p;h=o}if((K|0)==18){K=0;if(!I){n=0;break a}else{L=I;M=J}}j[e+((y&7)<<1)>>1]=M;h=i[v+L>>0]|0;if(h<<24>>24==0?(y|0)==7|(x|0)>-1:0){z=v;A=x;B=y;C=0;break}if((y|0)==7){n=0;break a}switch(h<<24>>24){case 46:{N=v;O=f;P=x;Q=y;K=23;break b;break}case 58:break;default:{n=0;break a}}h=v+(L+1)|0;D=h;E=i[h>>0]|0;F=x}v=D;w=E;x=F;y=y+1|0}if((K|0)==23){if((Q|0)<6&O){n=0;break a}z=N;A=P;B=Q+1|0;C=1}if((A|0)>-1?(h=e+(A<<1)|0,Eyb(h+14+(0-B<<1)|0,h|0,B+1-A<<1|0)|0,(7-B|0)>0):0){Fyb(h|0,0,14-(B<<1)|0)|0;R=c;S=0}else{R=c;S=0}while(1){h=e+(S<<1)|0;i[R>>0]=(m[h>>1]|0)>>>8;i[R+1>>0]=j[h>>1];S=S+1|0;if((S|0)==8)break;else R=R+2|0}if((C|0)!=0?(bPa(2,z,c+12|0)|0)<1:0){n=0;break a}n=1;break}default:{h=HSa()|0;k[h>>2]=97;n=-1}}while(0);r=d;return n|0}function cPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d;f=d+8|0;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[e>>2]=2;k[e+4>>2]=f;f=KVa(Id(102,e|0)|0)|0;r=d;return f|0}function dPa(){return 0}function ePa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=r;r=r+32|0;g=f;h=f+8|0;k[h>>2]=a;k[h+4>>2]=b;k[h+8>>2]=c;k[h+12>>2]=d;k[h+16>>2]=e;k[h+20>>2]=0;k[g>>2]=15;k[g+4>>2]=h;h=KVa(Id(102,g|0)|0)|0;r=f;return h|0}function fPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d;f=d+8|0;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[e>>2]=17;k[e+4>>2]=f;f=KVa(Id(102,e|0)|0)|0;r=d;return f|0}function gPa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=(SPa(a,b,49440,49456,32,c)|0)==0;r=c;return (d?49440:0)|0}function hPa(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b;d=b+4|0;k[c>>2]=d;e=(dNa(a,35077,c)|0)<0;r=b;return (e?-1:k[d>>2]|0)|0}function iPa(a){a=a|0;var b=0;b=a&65535;return (b<<8|b>>>8)&65535|0}function jPa(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;a=r;r=r+32|0;b=a+16|0;c=a+8|0;d=a;e=a+24|0;f=aPa(1,524290,0)|0;if((f|0)>-1){g=e+4|0;h=0;while(1){i=xYa(h*40|0)|0;do if(!i){j=0;l=14}else{k[g>>2]=i+(h<<3);m=h<<5;k[e>>2]=m;k[d>>2]=e;if((dNa(f,35090,d)|0)<0){yYa(i);j=0;l=14;break}n=k[e>>2]|0;if((n|0)==(m|0)){yYa(i);break}m=n>>>5;if(!m){o=0;p=0}else{n=0;q=0;while(1){k[c>>2]=(k[g>>2]|0)+(n<<5);if((dNa(f,35123,c)|0)<0)s=q+1|0;else{t=k[g>>2]|0;u=n-q|0;k[i+(u<<3)>>2]=k[t+(n<<5)+16>>2];k[i+(u<<3)+4>>2]=t+(n<<5);s=q}n=n+1|0;if((n|0)==(m|0)){o=m;p=s;break}else q=s}}q=o-p|0;k[i+(q<<3)+4>>2]=0;k[i+(q<<3)>>2]=0;j=i;l=14}while(0);if((l|0)==14?(l=0,(j|0)!=(-1|0)):0){v=j;break}h=h+1|0}k[b>>2]=f;pd(6,b|0)|0;w=v}else w=0;v=HSa()|0;k[v>>2]=105;r=a;return w|0}function kPa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=(nPa(a,b,49488,49504,32,c)|0)==0;r=c;return (d?49488:0)|0}function lPa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;e=r;r=r+192|0;f=e+48|0;g=e+16|0;h=e;j=e+88|0;switch(a|0){case 2:{a=l[b+1>>0]|0;m=l[b+2>>0]|0;n=l[b+3>>0]|0;k[h>>2]=l[b>>0];k[h+4>>2]=a;k[h+8>>2]=m;k[h+12>>2]=n;if((uRa(c,d,317175,h)|0)>>>0>>0)o=c;else p=15;break}case 10:{h=(ZLa(b,317272,12)|0)==0;n=(l[b>>0]|0)<<8|(l[b+1>>0]|0);m=(l[b+2>>0]|0)<<8|(l[b+3>>0]|0);a=(l[b+4>>0]|0)<<8|(l[b+5>>0]|0);q=(l[b+6>>0]|0)<<8|(l[b+7>>0]|0);s=(l[b+8>>0]|0)<<8|(l[b+9>>0]|0);t=(l[b+10>>0]|0)<<8|(l[b+11>>0]|0);u=l[b+12>>0]|0;v=i[b+13>>0]|0;w=i[b+14>>0]|0;x=i[b+15>>0]|0;if(h){k[f>>2]=n;k[f+4>>2]=m;k[f+8>>2]=a;k[f+12>>2]=q;k[f+16>>2]=s;k[f+20>>2]=t;k[f+24>>2]=u;k[f+28>>2]=v&255;k[f+32>>2]=w&255;k[f+36>>2]=x&255;uRa(j,100,317211,f)|0}else{k[g>>2]=n;k[g+4>>2]=m;k[g+8>>2]=a;k[g+12>>2]=q;k[g+16>>2]=s;k[g+20>>2]=t;k[g+24>>2]=v&255|u<<8;k[g+28>>2]=(w&255)<<8|x&255;uRa(j,100,317187,g)|0}g=i[j>>0]|0;if(g<<24>>24){x=g;g=j;w=0;u=0;v=2;while(1){if((u|0)==0|x<<24>>24==58){t=kMa(g,317241)|0;s=(t|0)>(v|0);y=s?u:w;z=s?t:v}else{y=w;z=v}t=u+1|0;g=j+t|0;x=i[g>>0]|0;if(!(x<<24>>24)){A=y;B=u;C=z;break}else{w=y;u=t;v=z}}if((C|0)>2){i[j+(A+1)>>0]=58;z=j+A|0;i[z>>0]=58;Eyb(z+2|0,z+C|0,B+2-C-A|0)|0}}if((RLa(j)|0)>>>0>>0){OLa(c,j)|0;o=c}else p=15;break}default:{c=HSa()|0;k[c>>2]=97;o=0}}if((p|0)==15){p=HSa()|0;k[p>>2]=28;o=0}r=e;return o|0}function mPa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return -1}function nPa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,l=0,m=0,n=0,o=0;g=r;r=r+16|0;h=g;j[h>>1]=2;j[h+2>>1]=a;k[h+4>>2]=0;i=h+8|0;k[i>>2]=0;k[i+4>>2]=0;a:do if(!b)if(!(nPa(a,317336,c,d,e,f)|0))l=0;else l=nPa(a,317340,c,d,e,f)|0;else{i=d&3;m=(i|0)!=0?i:4;if((12-m|0)>>>0>e>>>0)l=34;else{i=4-m|0;m=d+i|0;if((YLa(b,317336)|0)!=0?(YLa(b,317340)|0)!=0:0){l=22;break}k[c+8>>2]=a;k[c+12>>2]=b;n=c+4|0;k[n>>2]=m;o=m+8|0;k[m+4>>2]=0;k[c>>2]=o;k[k[n>>2]>>2]=o;n=(YLa(b,317340)|0)!=0;switch(De(h|0,16,0,0,o|0,e+-8-i|0,(n?0:16)|0)|0){case -11:case -10:{l=12;break a;break}case 0:{k[f>>2]=c;l=0;break a;break}default:{l=2;break a}}}}while(0);r=g;return l|0}function oPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d;f=d+8|0;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[e>>2]=3;k[e+4>>2]=f;f=KVa(Id(102,e|0)|0)|0;r=d;return f|0}function pPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d;f=d+8|0;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[e>>2]=7;k[e+4>>2]=f;f=KVa(Id(102,e|0)|0)|0;r=d;return f|0}function qPa(a){a=a|0;return}function rPa(){return 0}function sPa(){return}function tPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d;f=d+8|0;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[e>>2]=5;k[e+4>>2]=f;f=KVa(Id(102,e|0)|0)|0;r=d;return f|0}function uPa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;a:do if(!((c|0)==(b|0)|(e|0)<1)?(f=b,g=f-a|0,(g|0)>0):0){h=d+((e|0)>254?254:e)|0;j=c;k=d;m=0;n=-1;o=c;while(1){p=i[o>>0]|0;q=p&255;if(!(q&192)){if(!(p<<24>>24)){r=k;s=n;t=o;break}if((k|0)==(d|0)){u=d;v=p}else{i[k>>0]=46;u=k+1|0;v=i[o>>0]|0}p=o+1|0;w=v&255;if((w|0)>=(f-p|0)){x=-1;break a}if((w|0)>=(h-u|0)){x=-1;break a}if(!(v<<24>>24)){y=u;z=n;A=p}else{B=u;C=w;D=p;while(1){C=C+-1|0;i[B>>0]=i[D>>0]|0;if(!C)break;else{B=B+1|0;D=D+1|0}}y=u+w|0;z=n;A=p+w|0}}else{D=o+1|0;if((D|0)==(b|0)){x=-1;break a}B=l[D>>0]|0|q<<8&16128;if((B|0)>=(g|0)){x=-1;break a}y=k;z=(n|0)<0?o+2-j|0:n;A=a+B|0}m=m+2|0;if((m|0)>=(g|0)){x=-1;break a}else{k=y;n=z;o=A}}i[r>>0]=0;x=(s|0)<0?t+1-j|0:s}else x=-1;while(0);return x|0}function vPa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+48|0;d=c+8|0;e=c;f=c+16|0;g=aPa(1,524290,0)|0;if((g|0)>=0?(k[f+16>>2]=a,k[e>>2]=f,a=dNa(g,35088,e)|0,k[d>>2]=g,pd(6,d|0)|0,(a|0)>=0):0)h=xMa(b,f,16)|0;else h=0;r=c;return h|0}function wPa(a){a=a|0;var b=0;b=a&65535;return (b<<8|b>>>8)&65535|0}function xPa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;e=r;r=r+64|0;f=e+24|0;g=e+8|0;h=e;i=e+40|0;a:do if(d){k[i>>2]=a;k[i+4>>2]=b;k[i+8>>2]=c;k[i+12>>2]=d;k[i+16>>2]=0;k[i+20>>2]=0;k[h>>2]=18;k[h+4>>2]=i;j=KVa(Id(102,h|0)|0)|0;if((j|0)<=-1){l=HSa()|0;switch(k[l>>2]|0){case 22:case 38:break;default:{m=j;break a}}l=tPa(a,b,c)|0;if((l|0)>=0){if(d&524288){k[g>>2]=l;k[g+4>>2]=2;k[g+8>>2]=1;qb(221,g|0)|0}if(d&2048){k[f>>2]=l;k[f+4>>2]=4;k[f+8>>2]=2048;qb(221,f|0)|0;m=l}else m=l}else m=l}else m=j}else m=tPa(a,b,c)|0;while(0);r=e;return m|0}function yPa(a){a=a|0;return Jyb(a|0)|0}function zPa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+32|0;d=c;e=c+8|0;k[e>>2]=a;k[e+4>>2]=b;b=e+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[d>>2]=13;k[d+4>>2]=e;e=KVa(Id(102,d|0)|0)|0;r=c;return e|0}function APa(a){a=a|0;return IOa(_c(a|0)|0)|0}function BPa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;if((HOa(d,2,a)|0)<0)e=0;else{k[b>>2]=k[d+4>>2];e=1}r=c;return e|0}function CPa(a,b){a=a|0;b=b|0;var c=0;do if(a>>>0>=256)if(a>>>0<65536){c=a<<16;break}else{c=a<<8;break}else c=a<<24;while(0);return c|b|0}function DPa(a){a=a|0;var b=0,c=0;b=k[a>>2]|0;do if((b|0)<=-1)if(b>>>0<3221225472){c=b&65535;break}else{c=b&255;break}else c=b&16777215;while(0);return c|0}function EPa(a){a=a|0;var b=0,c=0;b=k[a>>2]|0;do if((b|0)<=-1)if(b>>>0<3221225472){c=b>>>16;break}else{c=b>>>8;break}else c=b>>>24;while(0);return c|0}function FPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d;f=d+8|0;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[e>>2]=16;k[e+4>>2]=f;f=KVa(Id(102,e|0)|0)|0;r=d;return f|0}function GPa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return UOa(a,b,c,d,0,0)|0}function HPa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+32|0;d=c;e=c+8|0;k[e>>2]=a;k[e+4>>2]=b;b=e+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[d>>2]=4;k[d+4>>2]=e;e=KVa(Id(102,d|0)|0)|0;r=c;return e|0}function IPa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;c=a;while(1){if(c>>>0>=b>>>0){d=-1;break}e=i[c>>0]|0;if(!(e<<24>>24)){f=c;g=4;break}h=c+1|0;if((e&255)>191){j=h;k=c;g=6;break}else c=h}if((g|0)==4)d=1-a+f|0;else if((g|0)==6)if(j>>>0>>0)d=2-a+k|0;else d=-1;return d|0}function JPa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+48|0;c=b+8|0;d=b;e=b+16|0;f=aPa(1,524290,0)|0;if((f|0)<0)g=-1;else{xMa(e,a,16)|0;k[d>>2]=e;a=dNa(f,35123,d)|0;k[c>>2]=f;pd(6,c|0)|0;g=(a|0)<0?0:k[e+16>>2]|0}r=b;return g|0}function KPa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=r;r=r+32|0;g=f;h=f+8|0;k[h>>2]=a;k[h+4>>2]=b;k[h+8>>2]=c;k[h+12>>2]=d;k[h+16>>2]=e;k[h+20>>2]=0;k[g>>2]=14;k[g+4>>2]=h;h=KVa(Id(102,g|0)|0)|0;r=f;return h|0}function LPa(a,b){a=a|0;b=b|0;return 0}function MPa(a){a=a|0;return 0}function NPa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+32|0;f=e;g=e+8|0;k[g>>2]=a;k[g+4>>2]=b;k[g+8>>2]=c;k[g+12>>2]=d;k[g+16>>2]=0;k[g+20>>2]=0;k[f>>2]=8;k[f+4>>2]=g;g=KVa(Id(102,f|0)|0)|0;r=e;return g|0}function OPa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0;e=r;r=r+864|0;f=e+144|0;g=e+600|0;h=e+536|0;m=e+116|0;n=e+32|0;o=e+256|0;p=e+24|0;q=e+16|0;s=e+8|0;t=e+4|0;u=e;v=sd(0)|0;k[m>>2]=k[12384];k[m+4>>2]=k[12385];k[m+8>>2]=k[12386];k[m+12>>2]=k[12387];k[m+16>>2]=k[12388];k[m+20>>2]=k[12389];k[m+24>>2]=k[12390];w=n;x=w+84|0;do{k[w>>2]=0;w=w+4|0}while((w|0)<(x|0));Fyb(o|0,0,280)|0;Wb(1,s|0)|0;a:do if(((RLa(b)|0)+-1|0)>>>0>253)y=-2;else{i[o+5>>0]=1;i[o+2>>0]=1;z=o+13|0;OLa(z,b)|0;if(!(i[z>>0]|0))A=13;else{z=13;while(1){B=z;b:while(1){switch(i[o+B>>0]|0){case 46:case 0:{C=B;break b;break}default:{}}B=B+1|0}B=C-z|0;if((B+-1|0)>>>0>62){y=-2;break a}i[o+(z+-1)>>0]=B;B=C+1|0;if(!(i[o+B>>0]|0)){A=B;break}else z=B}}i[o+(A+3)>>0]=1;z=A+4|0;Gb(0,p|0)|0;B=k[p+4>>2]|0;D=(B>>>16)+B|0;B=D&65535;E=BQa(317244,f,g,256)|0;do if(E){F=h+10|0;G=h+11|0;H=2;I=0;J=16;c:while(1){K=n+(I*28|0)|0;if(!(kRa(h,64,E)|0)){L=H;M=I;N=J;O=21;break}while(1){if((eMa(h,317261,10)|0)==0?(yIa(i[F>>0]|0)|0)!=0:0){P=G;while(1)if(!(yIa(i[P>>0]|0)|0)){Q=P;break}else P=P+1|0;P=i[Q>>0]|0;d:do if(!(P<<24>>24))R=Q;else{S=P;T=Q;while(1){if(yIa(S<<24>>24)|0){R=T;break d}U=T+1|0;S=i[U>>0]|0;if(!(S<<24>>24)){R=U;break}else T=U}}while(0);i[R>>0]=0;if((HOa(K,0,Q)|0)>=0)break}if(!(kRa(h,64,E)|0)){L=H;M=I;N=J;O=21;break c}}K=iPa(53)|0;j[n+(I*28|0)+2>>1]=K;K=I+1|0;P=(j[n+(I*28|0)>>1]|0)==10;T=P?28:J;S=P?10:H;if((K|0)<3){H=S;I=K;J=T}else{V=S;W=K;X=T;O=20;break}}if((O|0)==20){CSa(E)|0;Y=V;Z=W;_=X;break}else if((O|0)==21){CSa(E)|0;if(!M){O=22;break}else{Y=L;Z=M;_=N;break}}}else O=22;while(0);if((O|0)==22){j[n>>1]=2;E=iPa(53)|0;j[n+2>>1]=E;E=yPa(2130706433)|0;k[n+4>>2]=E;Y=2;Z=1;_=16}j[m>>1]=Y;E=aPa(Y,526338,0)|0;if((E|0)<0){J=HSa()|0;if(!((Y|0)==10&(k[J>>2]|0)==97)){y=-11;break}J=aPa(2,526338,0)|0;if((J|0)<0){y=-11;break}else $=J}else if((Y|0)==10?(k[t>>2]=0,KPa(E,41,26,t,4)|0,(Z|0)>0):0){J=0;do{I=n+(J*28|0)|0;if((j[I>>1]|0)==2){H=n+(J*28|0)+4|0;k[n+(J*28|0)+20>>2]=k[H>>2];w=n+(J*28|0)+8|0;G=317272;x=w+12|0;do{i[w>>0]=i[G>>0]|0;w=w+1|0;G=G+1|0}while((w|0)<(x|0));j[I>>1]=10;k[H>>2]=0;k[n+(J*28|0)+24>>2]=0}J=J+1|0}while((J|0)!=(Z|0));$=E}else $=E;ec(1528,$|0);Wb(k[s>>2]|0,0)|0;e:do if((cPa($,m,_)|0)<0){aa=-11;ba=0}else{k[q>>2]=$;j[q+4>>1]=1;J=(d|0)>0;G=(Z|0)>0;F=o+1|0;T=o+(A+1)|0;K=G^1;S=(Z|0)==1;P=-3;U=0;ca=0;da=a;while(1){do{if(((sd(0)|0)-v|0)>=5){aa=P;ba=ca;break e}if(J){ea=0;do{fa=c+(ea<<2)|0;ga=k[fa>>2]|0;if(!((ga|0)==0|K)?(ha=ea+B|0,ia=ha>>>8&255,ja=ha&255,i[o>>0]=ia,i[F>>0]=ja,i[T>>0]=ga,UOa($,o,z,16384,n,_)|0,!S):0){ga=1;do{ha=k[fa>>2]|0;i[o>>0]=ia;i[F>>0]=ja;i[T>>0]=ha;UOa($,o,z,16384,n+(ga*28|0)|0,_)|0;ga=ga+1|0}while((ga|0)!=(Z|0))}ea=ea+1|0}while((ea|0)!=(d|0))}}while((hJa(q,1,1e3)|0)<1);ea=U+ca|0;f:do if((ea|0)<(d|0)){ga=ea;ja=P;ia=U;fa=ca;ha=da;while(1){ka=ha+1|0;k[u>>2]=_;if(($Oa($,ha,512,0,m,u)|0)<=1){la=ga;ma=ja;na=ia;oa=fa;pa=ha;break f}while(1){g:do if(G){qa=0;while(1){if(!(ZLa(n+(qa*28|0)|0,m,_)|0)){ra=qa;break g}sa=qa+1|0;if((sa|0)<(Z|0))qa=sa;else{ra=sa;break}}}else ra=0;while(0);if(((ra|0)!=(Z|0)?(qa=(l[ha>>0]<<8|l[ka>>0])-D&65535,qa>>>0>>0):0)?(sa=c+(qa<<2)|0,(k[sa>>2]|0)!=0):0){ta=sa;break}k[u>>2]=_;if(($Oa($,ha,512,0,m,u)|0)<=1){la=ga;ma=ja;na=ia;oa=fa;pa=ha;break f}}switch(l[ha+3>>0]&15|0){case 0:{ua=ja;va=ia;wa=fa+1|0;break}case 3:{xa=-2;O=53;break}default:{xa=-4;O=53}}if((O|0)==53){O=0;ua=xa;va=ia+1|0;wa=fa}k[ta>>2]=0;ka=ha+512|0;sa=va+wa|0;if((sa|0)<(d|0)){ga=sa;ja=ua;ia=va;fa=wa;ha=ka}else{la=sa;ma=ua;na=va;oa=wa;pa=ka;break f}}}else{la=ea;ma=P;na=U;oa=ca;pa=da}while(0);if((la|0)==(d|0)){aa=ma;ba=oa;break}else{P=ma;U=na;ca=oa;da=pa}}}while(0);Ed(1);y=(ba|0)==0?aa:ba}while(0);r=e;return y|0}function PPa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+112|0;f=e;g=e+24|0;h=e+16|0;j=(c|0)==10;do if(!d){if(j){k[h>>2]=28;m=b;n=h;o=1;break}k[h>>2]=1;if((c|0)==2){m=b;n=h;o=1}else{k[h+4>>2]=28;m=b;n=h;o=2}}else{if(j){p=g;q=15;while(1){s=b+q|0;i[p>>0]=i[317285+((l[s>>0]|0)&15)>>0]|0;i[p+1>>0]=46;i[p+2>>0]=i[317285+((l[s>>0]|0)>>>4)>>0]|0;i[p+3>>0]=46;if((q|0)>0){p=p+4|0;q=q+-1|0}else break}q=g+64|0;p=317302;s=q+9|0;do{i[q>>0]=i[p>>0]|0;q=q+1|0;p=p+1|0}while((q|0)<(s|0))}else{p=l[b+2>>0]|0;q=l[b+1>>0]|0;s=l[b>>0]|0;k[f>>2]=l[b+3>>0];k[f+4>>2]=p;k[f+8>>2]=q;k[f+12>>2]=s;ORa(g,317311,f)|0}k[h>>2]=12;m=g;n=h;o=1}while(0);h=OPa(a,m,n,o)|0;r=e;return h|0}function QPa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;h=r;r=r+256|0;j=h;a:do if(!(i[e+3>>0]&15)){k=e+12|0;m=l[e+4>>0]<<8|l[e+5>>0];n=l[e+6>>0]<<8|l[e+7>>0];if((n+m|0)>>>0<=64){if(!m){o=e+506|0;p=k}else{q=e;s=e+506|0;t=m;m=k;while(1){t=t+-1|0;k=i[m>>0]|0;b:do if((m-q|0)<512){u=k;v=m;while(1){if(((u&255)+-1|0)>>>0>=127){w=u;x=v;break b}y=v+1|0;z=i[y>>0]|0;if((y-q|0)<512){u=z;v=y}else{w=z;x=y;break}}}else{w=k;x=m}while(0);if((w&255)>193){A=-1;break a}if(w<<24>>24==-63){if(x>>>0>s>>>0|(i[x+1>>0]|0)==-1){A=-1;break a}}else if(x>>>0>s>>>0){A=-1;break a}k=x+(w<<24>>24!=0?6:5)|0;if(!t){o=s;p=k;break}else m=k}}if(!n)A=0;else{m=e;s=e+512|0;t=(g|0)!=0;q=a;k=d;v=n;u=0;y=p;while(1){v=v+-1|0;z=i[y>>0]|0;c:do if((y-m|0)<512){B=z;C=y;while(1){if(((B&255)+-1|0)>>>0>=127){D=B;E=C;break c}F=C+1|0;G=i[F>>0]|0;if((F-m|0)<512){B=G;C=F}else{D=G;E=F;break}}}else{D=z;E=y}while(0);if((D&255)>193){A=-1;break a}if(D<<24>>24==-63){if(E>>>0>o>>>0|(i[E+1>>0]|0)==-1){A=-1;break a}}else if(E>>>0>o>>>0){A=-1;break a}z=E+(D<<24>>24!=0?2:1)|0;C=l[z+8>>0]<<8|l[z+9>>0];if((z+C|0)>>>0>s>>>0){A=-1;break a}if(C>>>0>c>>>0?1:(l[z+1>>0]|0)!=(f|0)){H=q;I=k;J=u}else{if(t?(uPa(e,s,z+10|0,j,256)|0)<0:0){A=-1;break a}if((k|0)!=0&(q|0)!=0){if(t)OLa(q,j)|0;else Dyb(q|0,z+10|0,C|0)|0;K=q+b|0;L=k+-1|0}else{K=q;L=k}H=K;I=L;J=u+1|0}if(!v){A=J;break}else{q=H;k=I;u=J;y=z+(C+10)|0}}}}else A=-1}else A=0;while(0);r=h;return A|0}function RPa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;a:do if(!b)c=0;else{d=a;e=b;f=0;while(1){e=e+-1|0;g=QPa(0,0,4,-1,d,1,0)|0;if((g|0)<0){c=g;break a}h=QPa(0,0,16,-1,d,28,0)|0;if((h|0)<0){c=h;break a}i=h+(g+f)|0;if(!e){c=i;break}else{d=d+512|0;f=i}}}while(0);return c|0}function SPa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,n=0;g=r;r=r+48|0;h=g+32|0;i=g;k[i>>2]=k[12391];k[i+4>>2]=k[12392];k[i+8>>2]=k[12393];k[i+12>>2]=k[12394];k[i+16>>2]=k[12395];k[i+20>>2]=k[12396];k[i+24>>2]=k[12397];k[i+28>>2]=k[12398];a:do if(!b)if(!(SPa(a,317336,c,d,e,f)|0))j=0;else j=SPa(a,317340,c,d,e,f)|0;else{l=d&3;n=(l|0)!=0?l:4;if((12-n|0)>>>0>e>>>0)j=34;else{l=d+(4-n)|0;if(!(YLa(b,317336)|0))k[i+12>>2]=6;else{if(YLa(b,317340)|0){j=22;break}k[i+12>>2]=17}switch(ed(0,a|0,i|0,h|0)|0){case -11:case -10:{j=12;break a;break}case 0:{k[c>>2]=a;n=c+4|0;k[n>>2]=l;k[l>>2]=a;k[(k[n>>2]|0)+4>>2]=0;n=k[h>>2]|0;k[c+8>>2]=m[(k[n+20>>2]|0)+2>>1];k[c+12>>2]=b;EOa(n);k[f>>2]=c;j=0;break a;break}default:{j=2;break a}}}}while(0);r=g;return j|0}function TPa(){return 48088}function UPa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=WPa(a,577,d)|0;r=c;return b|0}function VPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+192|0;e=d+152|0;f=d+136|0;g=d+120|0;h=d+104|0;i=d+96|0;j=d+80|0;l=d+64|0;m=d+48|0;n=d+32|0;o=d+16|0;p=d;q=d+176|0;s=d+168|0;k[q>>2]=c;c=(k[q>>2]|0)+(4-1)&~(4-1);t=k[c>>2]|0;k[q>>2]=c+4;c=(b|0)==4?t|32768:t;a:do switch(b|0){case 14:{k[p>>2]=a;k[p+4>>2]=14;k[p+8>>2]=c;u=KVa(qb(221,p|0)|0)|0;break}case 9:{k[o>>2]=a;k[o+4>>2]=16;k[o+8>>2]=s;t=qb(221,o|0)|0;switch(t|0){case -22:{k[n>>2]=a;k[n+4>>2]=9;k[n+8>>2]=c;v=qb(221,n|0)|0;break}case 0:{q=k[s+4>>2]|0;v=(k[s>>2]|0)==2?0-q|0:q;break}default:v=KVa(t)|0}u=v;break}case 1030:{k[m>>2]=a;k[m+4>>2]=1030;k[m+8>>2]=c;t=qb(221,m|0)|0;if((t|0)!=-22){if((t|0)>-1){k[l>>2]=t;k[l+4>>2]=2;k[l+8>>2]=1;qb(221,l|0)|0}u=KVa(t)|0;break a}k[j>>2]=a;k[j+4>>2]=1030;k[j+8>>2]=0;t=qb(221,j|0)|0;if((t|0)==-22){k[h>>2]=a;k[h+4>>2]=0;k[h+8>>2]=c;q=qb(221,h|0)|0;if((q|0)>-1){k[g>>2]=q;k[g+4>>2]=2;k[g+8>>2]=1;qb(221,g|0)|0}u=KVa(q)|0;break a}else{if((t|0)>-1){k[i>>2]=t;pd(6,i|0)|0}u=KVa(-22)|0;break a}break}default:if((b+-12|0)>>>0<5){k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;u=KVa(qb(221,f|0)|0)|0;break a}else{k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;u=KVa(qb(221,e|0)|0)|0;break a}}while(0);r=d;return u|0}function WPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+32|0;e=d;f=d+16|0;k[f>>2]=c;c=(k[f>>2]|0)+(4-1)&~(4-1);g=k[c>>2]|0;k[f>>2]=c+4;k[e>>2]=a;k[e+4>>2]=b|32768;k[e+8>>2]=g;g=KVa(qd(5,e|0)|0)|0;r=d;return g|0}function XPa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;k[f>>2]=a;k[f+4>>2]=0;k[f+8>>2]=b;k[f+12>>2]=((b|0)<0)<<31>>31;k[f+16>>2]=c;k[f+20>>2]=((c|0)<0)<<31>>31;k[f+24>>2]=d;d=0-(se(272,f|0)|0)|0;r=e;return d|0}function YPa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+32|0;e=d;k[e>>2]=a;k[e+4>>2]=0;k[e+8>>2]=b;k[e+12>>2]=((b|0)<0)<<31>>31;k[e+16>>2]=c;k[e+20>>2]=((c|0)<0)<<31>>31;c=0-(Ie(324,e|0)|0)|0;r=d;return c|0}function ZPa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=r;r=r+32|0;f=e;g=e+16|0;if(!(c&4194368))h=0;else{k[g>>2]=d;d=(k[g>>2]|0)+(4-1)&~(4-1);i=k[d>>2]|0;k[g>>2]=d+4;h=i}k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c|32768;k[f+12>>2]=h;h=KVa(Vd(295,f|0)|0)|0;r=e;return h|0}function _Pa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d;f=(c&8|0)==0;a:do if(!(c&1)){b:do if(!f){g=b;h=b;while(1){switch(i[h>>0]|0){case 0:{break b;break}case 47:{if(!(WWa(a,-1,b,h-g|0,c)|0)){j=0;break a}break}default:{}}h=h+1|0}}while(0);j=WWa(a,-1,b,-1,c)|0}else{h=a;g=b;while(1){l=g;c:while(1){switch(i[l>>0]|0){case 47:case 0:{m=l;break c;break}default:{}}l=l+1|0}l=h;d:while(1){n=VWa(l,-1,e,c)|0;switch(n|0){case 0:case 47:{o=n;p=l;break d;break}default:{}}l=l+(k[e>>2]|0)|0}l=i[m>>0]|0;if((o|0)!=(l<<24>>24|0)&(f|l<<24>>24==0)){j=1;break a}l=(WWa(h,p-h|0,g,m-g|0,c)|0)!=0;if((o|0)==0|l){j=l&1;break a}h=p+(k[e>>2]|0)|0;g=m+1|0}}while(0);r=d;return j|0}function $Pa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;b=r;r=r+16|0;e=b;a:do if(!a)f=317344;else{g=a;h=317344;while(1){if(!(i[h>>0]|0)){f=h;break a}g=g+-1|0;j=h+((RLa(h)|0)+1)|0;if(!g){f=j;break}else h=j}}while(0);k[e>>2]=(i[f>>0]|0)==0?f+1|0:f;f=(uRa(c,d,317630,e)|0)+1|0;r=b;return f|0}function aQa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0;f=r;r=r+16|0;g=f;h=k[a+4>>2]|0;a=h+56|0;i=(k[a>>2]&8|0)==0?c:0;c=h+40|0;j=k[c>>2]|0;if((j|0)>0&(i|0)!=0){l=xYa(j<<2)|0;if(!l)m=12;else{n=l;o=3}}else{n=0;o=3}if((o|0)==3){if(!(k[h+60>>2]|0)){k[g>>2]=0;l=e&1;j=e&2;p=k[a>>2]&4;if(!n)q=0;else q=k[c>>2]|0;s=q<<2;t=k[h+52>>2]|0;u=t<<3;v=u+8|0;w=s+12+u+(v+(ia(s,t)|0)<<1)|0;x=xYa(w)|0;if(!x){y=12;z=0}else{Fyb(x|0,0,w|0)|0;w=x+s|0;A=w&3;B=w+((A|0)==0?0:4-A|0)|0;A=B+v|0;w=A&3;C=A+((w|0)==0?0:4-w|0)|0;w=C+v|0;v=w&3;A=w+((v|0)==0?0:4-v|0)|0;v=A+u|0;u=v&3;if((t|0)>0){w=0;D=v+((u|0)==0?0:4-u|0)|0;while(1){k[C+(w<<3)+4>>2]=D;u=D+s|0;k[B+(w<<3)+4>>2]=u;w=w+1|0;if((w|0)==(t|0)){E=0;break}else D=u+s|0}do{k[A+(E<<3)>>2]=-1;E=E+1|0}while((E|0)!=(t|0))}t=tVa(g,b,4)|0;if((t|0)<1)if((t|0)<0){F=0;G=1}else{H=1;o=201}else{H=t;o=201}a:do if((o|0)==201){t=h+8|0;E=(p|0)!=0;D=(l|0)!=0;w=(q|0)>0;u=h+12|0;v=h+44|0;I=h+32|0;J=h+36|0;K=(q|0)==0;L=w^1;M=-1;N=0;O=0;P=H;Q=0;R=C;S=B;T=B;U=b+H|0;V=x;while(1){if((M|0)<0){W=k[t>>2]|0;X=W+8|0;b:do if(!(k[X>>2]|0)){Y=M;Z=N;_=T}else{$=(O|0)!=0;aa=(Q|0)==95;ba=(O|0)==0;ca=E&(Q|0)==10;da=(D|(O|0)>0)^1;ea=X;fa=M;ga=N;ha=T;ja=W;while(1){ka=ea;la=ja;c:while(1){ma=la+12|0;if((k[A+(k[ma>>2]<<3)>>2]|0)>=(O|0)){na=fa;oa=ga;pa=ha;qa=la;break}ra=la+20|0;sa=k[ra>>2]|0;if(!sa){ta=ka;ua=ma;va=la;o=236;break}d:do if(ca|((sa&1|0)==0|da)){if((sa&2|0)!=0?(wa=k[g>>2]|0,!((wa|j|0)==0|E&(wa|0)==10)):0)break;do if(sa&16){if(aa)break d;if(eJa(Q)|0)break d;wa=k[g>>2]|0;if((wa|0)==95)break;if(!(eJa(wa)|0))break d}while(0);wa=k[ra>>2]|0;if(!(wa&32))xa=wa;else{if(aa){wa=k[g>>2]|0;if((wa|0)==95)break;else ya=wa}else{wa=(eJa(Q)|0)==0;za=k[g>>2]|0;if(wa|(za|0)==95)break;else ya=za}if(eJa(ya)|0)break;xa=k[ra>>2]|0}za=k[g>>2]|0;do if((za|0)!=0&($&(xa&64|0)!=0)){if(aa){Aa=za;Ba=1}else{wa=(eJa(Q)|0)!=0;Aa=k[g>>2]|0;Ba=wa}if((Aa|0)==95)if(Ba)break d;else break;else if(Ba^(eJa(Aa)|0)!=0)break;else break d}while(0);if(!(k[ra>>2]&128)){ta=ka;ua=ma;va=la;o=236;break c}za=k[g>>2]|0;if(ba|(za|0)==0)break;if(aa){Ca=za;Da=1}else{za=(eJa(Q)|0)!=0;Ca=k[g>>2]|0;Da=za}if((Ca|0)==95)if(Da){ta=ka;ua=ma;va=la;o=236;break c}else break;else if(Da^(eJa(Ca)|0)!=0)break;else{ta=ka;ua=ma;va=la;o=236;break c}}while(0);ka=la+40|0;if(!(k[ka>>2]|0)){Y=fa;Z=ga;_=ha;break b}else la=la+32|0}if((o|0)==236){o=0;k[ha>>2]=k[ta>>2];if(w)Fyb(k[ha+4>>2]|0,-1,s|0)|0;la=k[va+16>>2]|0;do if(la){ka=k[la>>2]|0;if((ka|0)<=-1)break;ma=ha+4|0;ra=ka;ka=la;do{if((ra|0)<(q|0))k[(k[ma>>2]|0)+(ra<<2)>>2]=O;ka=ka+4|0;ra=k[ka>>2]|0}while((ra|0)>-1)}while(0);la=(k[ha>>2]|0)!=(k[u>>2]|0);if(la|L){Ea=ha+4|0;Fa=la?fa:O;Ga=la?ga:1}else{la=ha+4|0;ra=k[la>>2]|0;ka=0;do{k[n+(ka<<2)>>2]=k[ra+(ka<<2)>>2];ka=ka+1|0}while((ka|0)!=(q|0));Ea=la;Fa=O;Ga=1}la=k[ua>>2]|0;k[A+(la<<3)>>2]=O;k[A+(la<<3)+4>>2]=Ea;na=Fa;oa=Ga;pa=ha+8|0;qa=va}ea=qa+40|0;if(!(k[ea>>2]|0)){Y=na;Z=oa;_=pa;break}else{fa=na;ga=oa;ha=pa;ja=qa+32|0}}}while(0);k[_>>2]=0;W=k[g>>2]|0;if(!W){Ha=Y;break}else{Ia=W;Ja=Y;Ka=Z}}else{if(K){Ha=M;break}W=k[g>>2]|0;if((T|0)!=(S|0)&(W|0)!=0){Ia=W;Ja=M;Ka=N}else{Ha=M;break}}W=O+P|0;X=tVa(g,U,4)|0;if((X|0)<1)if((X|0)<0){F=0;G=1;break a}else La=1;else La=X;X=U+La|0;if((Ka|0)!=0&(k[v>>2]|0)!=0){if(!(k[S>>2]|0))Ma=R;else{ja=k[J>>2]|0;ha=k[ja>>2]|0;ga=(ha|0)>-1;fa=S;ea=R;while(1){aa=fa+4|0;e:do if(ga){ba=ha;$=0;while(1){da=k[ja+(($|1)<<2)>>2]|0;if((ba|0)>=(q|0)){Na=ea;break e}ca=k[aa>>2]|0;if((k[ca+(da<<2)>>2]|0)==(k[n+(da<<2)>>2]|0)?(k[ca+(ba<<2)>>2]|0)<(k[n+(ba<<2)>>2]|0):0){Na=ea;break e}$=$+2|0;ba=k[ja+($<<2)>>2]|0;if((ba|0)<=-1){Oa=ca;break}}Pa=aa;Qa=Oa;o=265}else{Pa=aa;Qa=k[aa>>2]|0;o=265}while(0);if((o|0)==265){o=0;k[ea>>2]=k[fa>>2];aa=ea+4|0;ba=k[aa>>2]|0;k[aa>>2]=Qa;k[Pa>>2]=ba;Na=ea+8|0}fa=fa+8|0;if(!(k[fa>>2]|0)){Ma=Na;break}else ea=Na}}k[Ma>>2]=0;Ra=0;Sa=R;Ta=S}else{Ra=Ka;Sa=S;Ta=R}ea=k[Sa>>2]|0;if(!ea){Ua=Ja;Va=Ra;Wa=Ta;Xa=V}else{fa=(W|0)!=0;ja=(Ia|0)==95;ha=(W|0)==0;ga=E&(Ia|0)==10;ba=(D|(W|0)>0)^1;aa=ea;ea=Ja;$=Ra;ca=Sa;da=Ta;la=V;while(1){ka=aa+8|0;if(!(k[ka>>2]|0)){Ya=ea;Za=$;_a=da;$a=la}else{ra=ca+4|0;ma=la;sa=ka;ka=ea;za=$;wa=da;ab=aa;while(1){f:do if((k[ab>>2]|0)>>>0>Ia>>>0){bb=ka;cb=za;db=wa;eb=ma}else{if((k[ab+4>>2]|0)>>>0>>0){bb=ka;cb=za;db=wa;eb=ma;break}fb=ab+20|0;gb=k[fb>>2]|0;do if(gb){if(!(ga|((gb&1|0)==0|ba))){bb=ka;cb=za;db=wa;eb=ma;break f}if((gb&2|0)!=0?(hb=k[g>>2]|0,!((hb|j|0)==0|E&(hb|0)==10)):0){bb=ka;cb=za;db=wa;eb=ma;break f}do if(gb&16){if(ja){bb=ka;cb=za;db=wa;eb=ma;break f}if(eJa(Ia)|0){bb=ka;cb=za;db=wa;eb=ma;break f}hb=k[g>>2]|0;if((hb|0)==95)break;if(!(eJa(hb)|0)){bb=ka;cb=za;db=wa;eb=ma;break f}}while(0);hb=k[fb>>2]|0;if(!(hb&32))ib=hb;else{if(ja){hb=k[g>>2]|0;if((hb|0)==95){bb=ka;cb=za;db=wa;eb=ma;break f}else jb=hb}else{hb=(eJa(Ia)|0)==0;kb=k[g>>2]|0;if(hb|(kb|0)==95){bb=ka;cb=za;db=wa;eb=ma;break f}else jb=kb}if(eJa(jb)|0){bb=ka;cb=za;db=wa;eb=ma;break f}ib=k[fb>>2]|0}kb=k[g>>2]|0;do if((kb|0)!=0&(fa&(ib&64|0)!=0)){if(ja){lb=kb;mb=1}else{hb=(eJa(Ia)|0)!=0;lb=k[g>>2]|0;mb=hb}if((lb|0)==95)if(mb){bb=ka;cb=za;db=wa;eb=ma;break f}else break;else if(mb^(eJa(lb)|0)!=0)break;else{bb=ka;cb=za;db=wa;eb=ma;break f}}while(0);do if(k[fb>>2]&128){kb=k[g>>2]|0;if(ha|(kb|0)==0){bb=ka;cb=za;db=wa;eb=ma;break f}if(ja){nb=kb;ob=1}else{kb=(eJa(Ia)|0)!=0;nb=k[g>>2]|0;ob=kb}if((nb|0)==95)if(ob)break;else{bb=ka;cb=za;db=wa;eb=ma;break f}else if(ob^(eJa(nb)|0)!=0){bb=ka;cb=za;db=wa;eb=ma;break f}else break}while(0);kb=k[fb>>2]|0;do if(!(kb&4))pb=kb;else{if(k[a>>2]&2){pb=kb;break}if(!(zIa(Ia,k[ab+24>>2]|0)|0)){bb=ka;cb=za;db=wa;eb=ma;break f}pb=k[fb>>2]|0}while(0);do if(pb&4){if(!(k[a>>2]&2))break;kb=KIa(Ia)|0;hb=ab+24|0;if(zIa(kb,k[hb>>2]|0)|0)break;kb=JIa(Ia)|0;if(!(zIa(kb,k[hb>>2]|0)|0)){bb=ka;cb=za;db=wa;eb=ma;break f}}while(0);if(!(k[fb>>2]&8))break;if(ZWa(k[ab+28>>2]|0,Ia,k[a>>2]&2)|0){bb=ka;cb=za;db=wa;eb=ma;break f}}while(0);if(w){fb=k[ra>>2]|0;gb=0;do{k[ma+(gb<<2)>>2]=k[fb+(gb<<2)>>2];gb=gb+1|0}while((gb|0)!=(q|0))}gb=k[ab+16>>2]|0;do if(gb){fb=k[gb>>2]|0;if((fb|0)>-1){qb=fb;rb=gb}else break;do{if((qb|0)<(q|0))k[ma+(qb<<2)>>2]=W;rb=rb+4|0;qb=k[rb>>2]|0}while((qb|0)>-1)}while(0);gb=k[ab+12>>2]|0;fb=A+(gb<<3)|0;if((k[fb>>2]|0)>=(W|0)){hb=k[A+(gb<<3)+4>>2]|0;kb=k[hb>>2]|0;if(!(XWa(q,k[I>>2]|0,ma,kb)|0)){bb=ka;cb=za;db=wa;eb=ma;break}k[hb>>2]=ma;if((k[sa>>2]|0)!=(k[u>>2]|0)){bb=ka;cb=za;db=wa;eb=kb;break}if(w)sb=0;else{bb=W;cb=1;db=wa;eb=kb;break}while(1){k[n+(sb<<2)>>2]=k[ma+(sb<<2)>>2];sb=sb+1|0;if((sb|0)==(q|0)){bb=W;cb=1;db=wa;eb=kb;break f}}}kb=k[sa>>2]|0;k[wa>>2]=kb;hb=wa+4|0;tb=k[hb>>2]|0;k[hb>>2]=ma;k[fb>>2]=W;k[A+(gb<<3)+4>>2]=hb;do if((kb|0)==(k[u>>2]|0)){if((ka|0)==-1)if(w)ub=0;else{vb=W;wb=1;break}else{if(!w){vb=ka;wb=za;break}if((k[ma>>2]|0)>(k[n>>2]|0)){vb=ka;wb=za;break}else ub=0}do{k[n+(ub<<2)>>2]=k[ma+(ub<<2)>>2];ub=ub+1|0}while((ub|0)!=(q|0));vb=W;wb=1}else{vb=ka;wb=za}while(0);bb=vb;cb=wb;db=wa+8|0;eb=tb}while(0);sa=ab+40|0;if(!(k[sa>>2]|0)){Ya=bb;Za=cb;_a=db;$a=eb;break}else{ma=eb;ka=bb;za=cb;wa=db;ab=ab+32|0}}}ca=ca+8|0;aa=k[ca>>2]|0;if(!aa){Ua=Ya;Va=Za;Wa=_a;Xa=$a;break}else{ea=Ya;$=Za;da=_a;la=$a}}}k[Wa>>2]=0;M=Ua;N=Va;O=W;P=La;Q=Ia;R=Sa;S=Ta;T=Wa;U=X;V=Xa}F=Ha;G=Ha>>>31}while(0);yYa(x);y=G;z=F}xb=z;yb=y}else{k[g>>2]=0;y=e&1;z=e&2;e=k[a>>2]&4;F=bQa(0,0)|0;g:do if(F){G=dQa(F,0,0,0,32)|0;if(!G){cQa(F);zb=12;Ab=0;break}k[G+24>>2]=0;k[G+28>>2]=0;x=k[c>>2]|0;if(x){Ha=xYa(x<<2)|0;if(!Ha){Bb=0;Cb=0;Db=12;Eb=0;Fb=Ha}else{Gb=Ha;o=9}}else{Gb=0;o=9}h:do if((o|0)==9){Ha=k[h+28>>2]|0;if(Ha){Xa=xYa(Ha<<3)|0;if(!Xa){Bb=0;Cb=Xa;Db=12;Eb=0;Fb=Gb;break}else Hb=Xa}else Hb=0;Xa=h+52|0;Ha=k[Xa>>2]|0;if(Ha){Wa=xYa(Ha<<2)|0;if(!Wa){Bb=0;Cb=Hb;Db=12;Eb=Wa;Fb=Gb;break}else Ib=Wa}else Ib=0;Wa=h+8|0;Ha=h+12|0;Ta=(n|0)==0;Sa=(n|0)!=0;Ia=h+32|0;La=(e|0)!=0;Va=(y|0)!=0;Ua=(Gb|0)==0;$a=(Hb|0)==0;_a=(Ib|0)==0;Za=x;Ya=-1;db=1;cb=-1;bb=G;eb=b;i:while(1){if((Za|0)>0){wb=Za;vb=0;while(1){k[Gb+(vb<<2)>>2]=-1;if(Ta)Jb=wb;else{k[n+(vb<<2)>>2]=-1;Jb=k[c>>2]|0}vb=vb+1|0;if((vb|0)>=(Jb|0))break;else wb=Jb}}wb=k[Xa>>2]|0;if((wb|0)>0)Fyb(Ib|0,0,((wb|0)>1?wb:1)<<2|0)|0;wb=k[g>>2]|0;vb=db+cb|0;q=tVa(g,eb,4)|0;if((q|0)<1)if((q|0)<0){Bb=0;Cb=Hb;Db=1;Eb=Ib;Fb=Gb;break h}else Kb=1;else Kb=q;q=eb+Kb|0;ub=k[g>>2]|0;A=k[Wa>>2]|0;sb=A+8|0;if(k[sb>>2]|0){qb=(vb|0)!=0;rb=(wb|0)==95;pb=(vb|0)==0;nb=La&(wb|0)==10;ob=(Va|(vb|0)>0)^1;lb=sb;sb=0;mb=bb;ib=0;jb=A;while(1){A=jb+20|0;j=k[A>>2]|0;j:do if(j){if(!(nb|((j&1|0)==0|ob))){Lb=sb;Mb=mb;Nb=ib;break}if((j&2|0)!=0?(Ra=k[g>>2]|0,!((Ra|z|0)==0|La&(Ra|0)==10)):0){Lb=sb;Mb=mb;Nb=ib;break}do if(j&16){if(rb){Lb=sb;Mb=mb;Nb=ib;break j}if(eJa(wb)|0){Lb=sb;Mb=mb;Nb=ib;break j}Ra=k[g>>2]|0;if((Ra|0)==95)break;if(!(eJa(Ra)|0)){Lb=sb;Mb=mb;Nb=ib;break j}}while(0);tb=k[A>>2]|0;if(!(tb&32))Ob=tb;else{if(rb){tb=k[g>>2]|0;if((tb|0)==95){Lb=sb;Mb=mb;Nb=ib;break}else Pb=tb}else{tb=(eJa(wb)|0)==0;Ra=k[g>>2]|0;if(tb|(Ra|0)==95){Lb=sb;Mb=mb;Nb=ib;break}else Pb=Ra}if(eJa(Pb)|0){Lb=sb;Mb=mb;Nb=ib;break}Ob=k[A>>2]|0}Ra=k[g>>2]|0;do if((Ra|0)!=0&(qb&(Ob&64|0)!=0)){if(rb){Qb=Ra;Rb=1}else{tb=(eJa(wb)|0)!=0;Qb=k[g>>2]|0;Rb=tb}if((Qb|0)==95)if(Rb){Lb=sb;Mb=mb;Nb=ib;break j}else break;else if(Rb^(eJa(Qb)|0)!=0)break;else{Lb=sb;Mb=mb;Nb=ib;break j}}while(0);if(!(k[A>>2]&128)){o=52;break}Ra=k[g>>2]|0;if(pb|(Ra|0)==0){Lb=sb;Mb=mb;Nb=ib;break}if(rb){Sb=Ra;Tb=1}else{Ra=(eJa(wb)|0)!=0;Sb=k[g>>2]|0;Tb=Ra}if((Sb|0)==95)if(Tb){o=52;break}else{Lb=sb;Mb=mb;Nb=ib;break}else if(Tb^(eJa(Sb)|0)!=0){Lb=sb;Mb=mb;Nb=ib;break}else{o=52;break}}else o=52;while(0);do if((o|0)==52){o=0;if(!ib){Lb=k[jb+16>>2]|0;Mb=mb;Nb=k[lb>>2]|0;break}A=mb+28|0;j=k[A>>2]|0;if(!j){Ra=dQa(F,0,0,0,32)|0;if(!Ra){o=56;break i}k[Ra+24>>2]=mb;k[Ra+28>>2]=0;tb=dQa(F,0,0,0,k[c>>2]<<2)|0;k[Ra+20>>2]=tb;if(!tb){o=63;break i}k[A>>2]=Ra;Ub=Ra}else Ub=j;k[Ub>>2]=vb;k[Ub+4>>2]=q;k[Ub+8>>2]=k[lb>>2];k[Ub+12>>2]=k[jb+12>>2];k[Ub+16>>2]=k[g>>2];if((k[c>>2]|0)>0){j=k[Ub+20>>2]|0;Ra=0;do{k[j+(Ra<<2)>>2]=k[Gb+(Ra<<2)>>2];Ra=Ra+1|0}while((Ra|0)<(k[c>>2]|0))}Ra=k[jb+16>>2]|0;if(!Ra){Lb=sb;Mb=Ub;Nb=ib;break}j=k[Ra>>2]|0;if((j|0)<=-1){Lb=sb;Mb=Ub;Nb=ib;break}A=k[Ub+20>>2]|0;tb=j;j=Ra;do{j=j+4|0;k[A+(tb<<2)>>2]=vb;tb=k[j>>2]|0}while((tb|0)>-1);Lb=sb;Mb=Ub;Nb=ib}while(0);lb=jb+40|0;if(!(k[lb>>2]|0)){Vb=Lb;Wb=Mb;Xb=Nb;break}else{sb=Lb;mb=Mb;ib=Nb;jb=jb+32|0}}if(Vb){jb=k[Vb>>2]|0;if((jb|0)>-1){ib=jb;jb=Vb;while(1){k[Gb+(ib<<2)>>2]=vb;mb=jb+4|0;ib=k[mb>>2]|0;if((ib|0)<=-1){Yb=mb;break}else jb=mb}}else Yb=Vb}else Yb=0;if(!Xb){Zb=Ya;_b=Yb;$b=vb;ac=Kb;bc=Wb;cc=0;dc=q;o=174}else{ec=Ya;fc=Yb;gc=vb;hc=Kb;ic=Wb;jc=Xb;kc=q;o=82}}else{Zb=Ya;_b=0;$b=vb;ac=Kb;bc=bb;cc=0;dc=q;o=174}k:while(1){l:do if((o|0)==82){o=0;if((jc|0)==(k[Ha>>2]|0)){if((ec|0)>=(gc|0)){if(!(Sa&(ec|0)==(gc|0))){Zb=ec;_b=fc;$b=gc;ac=hc;bc=ic;cc=jc;dc=kc;o=174;continue k}if(!(XWa(k[c>>2]|0,k[Ia>>2]|0,Gb,n)|0)){Zb=ec;_b=fc;$b=ec;ac=hc;bc=ic;cc=jc;dc=kc;o=174;continue k}}if(Ta){Zb=gc;_b=fc;$b=gc;ac=hc;bc=ic;cc=jc;dc=kc;o=174;continue k}if((k[c>>2]|0)>0)lc=0;else{Zb=gc;_b=fc;$b=gc;ac=hc;bc=ic;cc=jc;dc=kc;o=174;continue k}while(1){k[n+(lc<<2)>>2]=k[Gb+(lc<<2)>>2];jb=lc+1|0;if((jb|0)<(k[c>>2]|0))lc=jb;else{Zb=gc;_b=fc;$b=gc;ac=hc;bc=ic;cc=jc;dc=kc;o=174;continue k}}}jb=jc+8|0;do if(!(k[jb>>2]|0))o=97;else{if(!(k[jc+20>>2]&256)){o=97;break}ib=k[jc+24>>2]|0;YWa(ib+1|0,Hb,k[a>>2]&-9,h,Gb,gc);mb=k[Hb+(ib<<3)>>2]|0;sb=k[Hb+(ib<<3)+4>>2]|0;ib=sb-mb|0;if(eMa(b+mb|0,kc+-1|0,ib)|0){Zb=ec;_b=fc;$b=gc;ac=hc;bc=ic;cc=jc;dc=kc;o=174;continue k}lb=(sb|0)==(mb|0);mb=lb&1;sb=Ib+(k[jc+12>>2]<<2)|0;if(lb?(k[sb>>2]|0)!=0:0){Zb=ec;_b=fc;$b=gc;ac=hc;bc=ic;cc=jc;dc=kc;o=174;continue k}k[sb>>2]=mb;mb=ib+-1|0;ib=kc+mb|0;sb=k[g>>2]|0;lb=gc+hc+mb|0;mb=tVa(g,ib,4)|0;if((mb|0)<1)if((mb|0)<0){mc=2;nc=ec;oc=fc;pc=lb;qc=mb;rc=ic;sc=jc;tc=ib;break l}else uc=1;else uc=mb;vc=lb;wc=uc;xc=sb;yc=ib+uc|0}while(0);if((o|0)==97){o=0;ib=k[g>>2]|0;if(!ib){Zb=ec;_b=fc;$b=gc;ac=hc;bc=ic;cc=jc;dc=kc;o=174;continue k}sb=gc+hc|0;lb=tVa(g,kc,4)|0;if((lb|0)<1){if((lb|0)<0){mc=2;nc=ec;oc=fc;pc=sb;qc=lb;rc=ic;sc=jc;tc=kc;break}zc=lb+1|0}else zc=lb;vc=sb;wc=zc;xc=ib;yc=kc+zc|0}if(!(k[jb>>2]|0)){Zb=ec;_b=fc;$b=vc;ac=wc;bc=ic;cc=jc;dc=yc;o=174;continue k}ib=(vc|0)!=0;sb=(xc|0)==95;lb=(vc|0)==0;mb=La&(xc|0)==10;wb=(Va|(vc|0)>0)^1;rb=jb;pb=0;qb=fc;ob=ic;nb=jc;m:while(1){n:do if((k[nb>>2]|0)>>>0>xc>>>0){Ac=pb;Bc=qb;Cc=ob}else{if((k[nb+4>>2]|0)>>>0>>0){Ac=pb;Bc=qb;Cc=ob;break}tb=nb+20|0;j=k[tb>>2]|0;do if(j){if(!(mb|((j&1|0)==0|wb))){Ac=pb;Bc=qb;Cc=ob;break n}if((j&2|0)!=0?(A=k[g>>2]|0,!((A|z|0)==0|La&(A|0)==10)):0){Ac=pb;Bc=qb;Cc=ob;break n}do if(j&16){if(sb){Ac=pb;Bc=qb;Cc=ob;break n}if(eJa(xc)|0){Ac=pb;Bc=qb;Cc=ob;break n}A=k[g>>2]|0;if((A|0)==95)break;if(!(eJa(A)|0)){Ac=pb;Bc=qb;Cc=ob;break n}}while(0);A=k[tb>>2]|0;if(!(A&32))Dc=A;else{if(sb){A=k[g>>2]|0;if((A|0)==95){Ac=pb;Bc=qb;Cc=ob;break n}else Ec=A}else{A=(eJa(xc)|0)==0;Ra=k[g>>2]|0;if(A|(Ra|0)==95){Ac=pb;Bc=qb;Cc=ob;break n}else Ec=Ra}if(eJa(Ec)|0){Ac=pb;Bc=qb;Cc=ob;break n}Dc=k[tb>>2]|0}Ra=k[g>>2]|0;do if((Ra|0)!=0&(ib&(Dc&64|0)!=0)){if(sb){Fc=Ra;Gc=1}else{A=(eJa(xc)|0)!=0;Fc=k[g>>2]|0;Gc=A}if((Fc|0)==95)if(Gc){Ac=pb;Bc=qb;Cc=ob;break n}else break;else if(Gc^(eJa(Fc)|0)!=0)break;else{Ac=pb;Bc=qb;Cc=ob;break n}}while(0);do if(k[tb>>2]&128){Ra=k[g>>2]|0;if(lb|(Ra|0)==0){Ac=pb;Bc=qb;Cc=ob;break n}if(sb){Hc=Ra;Ic=1}else{Ra=(eJa(xc)|0)!=0;Hc=k[g>>2]|0;Ic=Ra}if((Hc|0)==95)if(Ic)break;else{Ac=pb;Bc=qb;Cc=ob;break n}else if(Ic^(eJa(Hc)|0)!=0){Ac=pb;Bc=qb;Cc=ob;break n}else break}while(0);Ra=k[tb>>2]|0;do if(!(Ra&4))Jc=Ra;else{if(k[a>>2]&2){Jc=Ra;break}if(!(zIa(xc,k[nb+24>>2]|0)|0)){Ac=pb;Bc=qb;Cc=ob;break n}Jc=k[tb>>2]|0}while(0);do if(Jc&4){if(!(k[a>>2]&2))break;Ra=KIa(xc)|0;A=nb+24|0;if(zIa(Ra,k[A>>2]|0)|0)break;Ra=JIa(xc)|0;if(!(zIa(Ra,k[A>>2]|0)|0)){Ac=pb;Bc=qb;Cc=ob;break n}}while(0);if(!(k[tb>>2]&8))break;if(ZWa(k[nb+28>>2]|0,xc,k[a>>2]&2)|0){Ac=pb;Bc=qb;Cc=ob;break n}}while(0);if(!pb){Ac=k[rb>>2]|0;Bc=k[nb+16>>2]|0;Cc=ob;break}tb=ob+28|0;j=k[tb>>2]|0;if(!j){A=dQa(F,0,0,0,32)|0;if(!A){Kc=qb;Lc=ob;o=148;break m}k[A+24>>2]=ob;k[A+28>>2]=0;Ra=dQa(F,0,0,0,k[c>>2]<<2)|0;k[A+20>>2]=Ra;if(!Ra){Mc=qb;Nc=ob;o=155;break m}k[tb>>2]=A;Oc=A}else Oc=j;k[Oc>>2]=vc;k[Oc+4>>2]=yc;k[Oc+8>>2]=k[rb>>2];k[Oc+12>>2]=k[nb+12>>2];k[Oc+16>>2]=k[g>>2];if((k[c>>2]|0)>0){j=k[Oc+20>>2]|0;A=0;do{k[j+(A<<2)>>2]=k[Gb+(A<<2)>>2];A=A+1|0}while((A|0)<(k[c>>2]|0))}A=k[nb+16>>2]|0;if(!A){Ac=pb;Bc=qb;Cc=Oc;break}j=k[A>>2]|0;if((j|0)<=-1){Ac=pb;Bc=qb;Cc=Oc;break}tb=k[Oc+20>>2]|0;Ra=j;j=A;do{k[tb+(Ra<<2)>>2]=vc;j=j+4|0;Ra=k[j>>2]|0}while((Ra|0)>-1);Ac=pb;Bc=qb;Cc=Oc}while(0);rb=nb+40|0;if(!(k[rb>>2]|0)){Pc=Ac;Qc=Bc;Rc=Cc;o=170;break}else{pb=Ac;qb=Bc;ob=Cc;nb=nb+32|0}}if((o|0)==148){o=0;cQa(F);if(!Ua)yYa(Gb);if(!$a)yYa(Hb);if(_a){mc=1;nc=ec;oc=Kc;pc=vc;qc=wc;rc=Lc;sc=jc;tc=yc;break}yYa(Ib);mc=1;nc=ec;oc=Kc;pc=vc;qc=wc;rc=Lc;sc=jc;tc=yc;break}else if((o|0)==155){o=0;cQa(F);if(!Ua)yYa(Gb);if(!$a)yYa(Hb);if(_a){mc=1;nc=ec;oc=Mc;pc=vc;qc=wc;rc=Nc;sc=jc;tc=yc;break}yYa(Ib);mc=1;nc=ec;oc=Mc;pc=vc;qc=wc;rc=Nc;sc=jc;tc=yc;break}else if((o|0)==170){o=0;if(!Pc){Zb=ec;_b=Qc;$b=vc;ac=wc;bc=Rc;cc=jc;dc=yc;o=174;continue k}if(!Qc){mc=0;nc=ec;oc=0;pc=vc;qc=wc;rc=Rc;sc=Pc;tc=yc;break}nb=k[Qc>>2]|0;if((nb|0)>-1){Sc=nb;Tc=Qc}else{mc=0;nc=ec;oc=Qc;pc=vc;qc=wc;rc=Rc;sc=Pc;tc=yc;break}while(1){nb=Tc+4|0;k[Gb+(Sc<<2)>>2]=vc;Sc=k[nb>>2]|0;if((Sc|0)<=-1){mc=0;nc=ec;oc=nb;pc=vc;qc=wc;rc=Rc;sc=Pc;tc=yc;break}else Tc=nb}}}else if((o|0)==174){o=0;nb=k[bc+24>>2]|0;if(!nb){if((Zb|0)>-1|(k[g>>2]|0)==0){mc=27;nc=Zb;oc=_b;pc=$b;qc=ac;rc=bc;sc=cc;tc=dc;break}k[g>>2]=ub;mc=3;nc=Zb;oc=_b;pc=$b;qc=ac;rc=bc;sc=cc;tc=q;break}ob=k[bc+8>>2]|0;if(k[ob+20>>2]&256)k[Ib+(k[bc+12>>2]<<2)>>2]=0;qb=k[bc>>2]|0;pb=k[bc+4>>2]|0;k[g>>2]=k[bc+16>>2];rb=k[c>>2]|0;if((rb|0)<=0){mc=0;nc=Zb;oc=_b;pc=qb;qc=ac;rc=nb;sc=ob;tc=pb;break}sb=k[bc+20>>2]|0;lb=0;do{k[Gb+(lb<<2)>>2]=k[sb+(lb<<2)>>2];lb=lb+1|0}while((lb|0)!=(rb|0));mc=0;nc=Zb;oc=_b;pc=qb;qc=ac;rc=nb;sc=ob;tc=pb}while(0);switch(mc|0){case 2:{Bb=0;Cb=Hb;Db=1;Eb=Ib;Fb=Gb;break h;break}case 27:{Uc=nc;o=184;break i;break}case 0:{ec=nc;fc=oc;gc=pc;hc=qc;ic=rc;jc=sc;kc=tc;o=82;break}case 3:{break k;break}default:{zb=12;Ab=0;break g}}}Za=k[c>>2]|0;Ya=nc;db=qc;cb=vb;bb=rc;eb=tc}if((o|0)==56){cQa(F);if(!Ua)yYa(Gb);if(!$a)yYa(Hb);if(_a){zb=12;Ab=0;break g}yYa(Ib);zb=12;Ab=0;break g}else if((o|0)==63){cQa(F);if(!Ua)yYa(Gb);if(!$a)yYa(Hb);if(_a){zb=12;Ab=0;break g}yYa(Ib);zb=12;Ab=0;break g}else if((o|0)==184){Bb=Uc;Cb=Hb;Db=Uc>>>31;Eb=Ib;Fb=Gb;break}}while(0);cQa(F);if(Fb)yYa(Fb);if(Cb)yYa(Cb);if(!Eb){zb=Db;Ab=Bb}else{yYa(Eb);zb=Db;Ab=Bb}}else{zb=12;Ab=0}while(0);xb=Ab;yb=zb}if(!yb)YWa(i,d,k[a>>2]|0,h,n,xb);if(!n)m=yb;else{yYa(n);m=yb}}r=f;return m|0}function bQa(a,b){a=a|0;b=b|0;var c=0;if(!a)c=zYa(1,24)|0;else{k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;c=b}return c|0}function cQa(a){a=a|0;var b=0,c=0;b=k[a>>2]|0;if(b){c=b;do{yYa(k[c>>2]|0);b=c;c=k[c+4>>2]|0;yYa(b)}while((c|0)!=0)}yYa(a);return}function dQa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=a+16|0;a:do if(!(k[f>>2]|0)){g=a+12|0;h=k[g>>2]|0;do if(h>>>0>>0){if(b)if(!c){k[f>>2]=1;i=0;break a}else{j=a+8|0;k[j>>2]=c;k[g>>2]=1024;l=j;m=c;n=c;o=1024;break}j=e<<3;p=j>>>0>1024?j:1024;j=xYa(8)|0;if(!j){k[f>>2]=1;i=0;break a}q=xYa(p)|0;k[j>>2]=q;r=q;if(!q){yYa(j);k[f>>2]=1;i=0;break a}k[j+4>>2]=0;s=a+4|0;t=k[s>>2]|0;if(t)k[t+4>>2]=j;if(!(k[a>>2]|0))k[a>>2]=j;k[s>>2]=j;j=a+8|0;k[j>>2]=r;k[g>>2]=p;l=j;m=r;n=q;o=p}else{p=a+8|0;q=k[p>>2]|0;l=p;m=q;n=q;o=h}while(0);h=m+e&3;q=((h|0)==0?0:4-h|0)+e|0;k[l>>2]=n+q;k[g>>2]=o-q;if(!d)i=n;else{Fyb(n|0,0,q|0)|0;i=n}}else i=0;while(0);return i|0}function eQa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;e=r;r=r+16|0;f=e;g=e+8|0;h=f;k[h>>2]=0;k[h+4>>2]=0;k[g>>2]=f;if(!(b&8))j=0;else j=k[d+8>>2]|0;h=i[a>>0]|0;if(h<<24>>24==47){l=a;while(1){m=l+1|0;n=i[m>>0]|0;if(n<<24>>24==47)l=m;else{o=n;p=317633;q=m;break}}}else{o=h;p=329672;q=a}a:do if((RLa(q)|0)>>>0<=4096){h=(b&32|0)!=0;if(h)s=o;else{k[d+8>>2]=j;k[d>>2]=0;k[d+4>>2]=0;s=i[q>>0]|0}if(s<<24>>24){l=$Wa(p,q,b,(c|0)==0?632:c,g)|0;if((l|0)==1){m=k[f>>2]|0;if(!m){t=1;break}else u=m;while(1){m=u;u=k[u>>2]|0;yYa(m);if(!u){t=1;break a}}}m=k[f>>2]|0;k[g>>2]=m;if(m){n=m;m=0;while(1){n=k[n>>2]|0;k[g>>2]=n;v=m+1|0;if(!n){w=v;break}else m=v}if(w){x=f;y=g;z=w;A=l}else{B=f;C=g;D=l;E=16}}else{B=f;C=g;D=l;E=16}}else{k[g>>2]=0;B=f;C=g;D=0;E=16}if((E|0)==16){if(!(b&16)){t=3;break}k[g>>2]=f;if(!(aXa(g,a,RLa(a)|0,0)|0)){x=B;y=C;z=1;A=D}else{t=1;break}}do if(!h){m=xYa((z+j<<2)+4|0)|0;k[d+4>>2]=m;if(!m){n=k[f>>2]|0;if(!n){t=1;break a}else F=n;while(1){n=F;F=k[F>>2]|0;yYa(n);if(!F){t=1;break a}}}else{if(!j){G=0;break}Fyb(m|0,0,j<<2|0)|0;G=j;break}}else{n=d+4|0;v=k[d>>2]|0;H=AYa(k[n>>2]|0,(z+j+v<<2)+4|0)|0;if(H){k[n>>2]=H;G=v+j|0;break}v=k[f>>2]|0;if(!v){t=1;break a}else I=v;while(1){v=I;I=k[I>>2]|0;yYa(v);if(!I){t=1;break a}}}while(0);h=k[x>>2]|0;k[y>>2]=h;l=k[d+4>>2]|0;m=h;h=0;do{k[l+(h+G<<2)>>2]=m+4;m=k[m>>2]|0;k[y>>2]=m;h=h+1|0}while((h|0)!=(z|0));k[l+(z+G<<2)>>2]=0;k[d>>2]=(k[d>>2]|0)+z;if(!(b&4)){YNa(l+(G<<2)|0,z,4,633);t=A}else t=A}else t=1;while(0);r=e;return t|0}function fQa(a){a=a|0;var b=0,c=0,d=0,e=0;if(!(k[a>>2]|0))b=a+4|0;else{c=a+8|0;d=a+4|0;e=0;do{yYa((k[(k[d>>2]|0)+((k[c>>2]|0)+e<<2)>>2]|0)+-4|0);e=e+1|0}while(e>>>0<(k[a>>2]|0)>>>0);b=d}yYa(k[b>>2]|0);k[a>>2]=0;k[b>>2]=0;return}function gQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0;d=r;r=r+64|0;e=d+56|0;f=d+52|0;g=d+48|0;h=d+44|0;i=d;j=xYa(20)|0;a:do if(!j)l=12;else{m=xYa(2048)|0;n=j+16|0;k[n>>2]=m;if(!m){yYa(j);l=12;break}k[j>>2]=512;k[j+4>>2]=10240;k[j+8>>2]=128;m=j+12|0;k[m>>2]=0;o=bQa(0,0)|0;if(!o){yYa(k[n>>2]|0);yYa(j);l=12;break}p=i;q=p+44|0;do{k[p>>2]=0;p=p+4|0}while((p|0)<(q|0));k[i>>2]=o;k[i+4>>2]=j;k[i+12>>2]=b;k[i+36>>2]=c;p=i+28|0;k[p>>2]=-1;q=cXa(i)|0;b:do if(!q){s=i+20|0;t=k[s>>2]|0;u=t+-1|0;k[a>>2]=u;v=k[i+8>>2]|0;w=k[p>>2]|0;if((w|0)>-1?(k[i+32>>2]|0)!=0:0){x=0;y=2;z=0;A=0;break}if((w|0)<=(u|0)){u=zYa(1,68)|0;if(!u){x=0;y=12;z=0;A=u}else{B=w>>>31;k[u+60>>2]=B^1;k[u+64>>2]=k[i+32>>2];k[u+28>>2]=t;if((c&8|0)==0|(B|0)!=1){B=dXa(0,j,v,u)|0;if(B){x=0;y=B;z=0;A=u;break}B=k[u+40>>2]|0;if((B|0)>0){t=(B<<2)+4|0;w=xYa(t)|0;if(!w){x=0;y=12;z=0;A=u;break}k[u+32>>2]=w;Fyb(w|0,-1,t|0)|0;C=w}else C=0;w=zYa(B<<1|1,4)|0;k[u+36>>2]=w;if(!w){x=0;y=12;z=0;A=u;break}w=zYa(k[s>>2]|0,12)|0;if(!w){x=0;y=12;z=0;A=u;break}k[u+16>>2]=w;w=dXa(o,j,v,u)|0;if(!w)D=C;else{x=0;y=w;z=0;A=u;break}}else D=0;w=i+24|0;s=k[m>>2]|0;k[g>>2]=0;k[h>>2]=0;k[f>>2]=v;k[e>>2]=k[f>>2];B=eXa(j,e)|0;c:do if(!B){k[f>>2]=0;k[e>>2]=k[f>>2];t=eXa(j,e)|0;if(!t){E=k[m>>2]|0;d:do if((E|0)>(s|0)){F=E;G=0;H=0;I=0;e:while(1){J=F+-1|0;k[m>>2]=J;K=k[n>>2]|0;L=k[K+(J<<2)>>2]|0;J=F+-2|0;k[m>>2]=J;M=k[K+(J<<2)>>2]|0;f:do switch(L|0){case 0:{switch(k[M>>2]|0){case 0:{J=k[M+4>>2]|0;N=k[J>>2]|0;if(!((N|0)>-1|(N|0)==-4)){O=G;P=H;Q=I;break f}N=J+8|0;J=(k[N>>2]|0)+G|0;k[N>>2]=J;if((J|0)<=(k[h>>2]|0)){O=G;P=H;Q=I;break f}k[h>>2]=J;O=G;P=H;Q=I;break f;break}case 3:{J=k[M+4>>2]|0;k[f>>2]=k[J+4>>2];k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}k[f>>2]=0;k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}k[f>>2]=k[J>>2];k[e>>2]=k[f>>2];J=eXa(j,e)|0;if(J){R=I;S=J;break d}k[f>>2]=0;k[e>>2]=k[f>>2];T=eXa(j,e)|0;break}case 1:{J=k[M+4>>2]|0;k[f>>2]=k[J+4>>2];k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}k[f>>2]=0;k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}k[f>>2]=k[J>>2];k[e>>2]=k[f>>2];J=eXa(j,e)|0;if(J){R=I;S=J;break d}k[f>>2]=0;k[e>>2]=k[f>>2];T=eXa(j,e)|0;break}case 2:{J=k[M+4>>2]|0;k[f>>2]=G;k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}k[f>>2]=M;k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}k[f>>2]=1;k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}k[f>>2]=k[J>>2];k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}k[f>>2]=0;k[e>>2]=k[f>>2];N=eXa(j,e)|0;if(N){R=I;S=N;break d}if((k[J+4>>2]|0)<=1?(k[J+8>>2]|0)<=1:0)U=G;else{k[g>>2]=0;U=0}O=U;P=H+1|0;Q=I;break f;break}default:{O=G;P=H;Q=I;break f}}if(!T){O=G;P=H;Q=I}else{R=I;S=T;break d}break}case 1:{J=M+4|0;N=k[J>>2]|0;V=F+-3|0;k[m>>2]=V;W=k[K+(V<<2)>>2]|0;k[g>>2]=W;V=N+4|0;X=k[V>>2]|0;Y=(X|0)>1;if(!Y){Z=N+8|0;_=k[Z>>2]|0;if((_|0)>1){k[e>>2]=0;if((X|0)>0)$=50;else{aa=X;ba=Z;ca=_;da=W;ea=0;$=58}}else fa=W}else{k[e>>2]=0;$=50}do if(($|0)==50){$=0;_=fXa(o,j,k[N>>2]|0,Y?1:2,g,D,f,h)|0;if(!_){ga=1;ha=W;ia=0}else{ja=_;$=56;break e}while(1){_=k[f>>2]|0;if(!ia)ka=_;else ka=gXa(o,ia,_)|0;if(!ka){ja=12;$=56;break e}_=k[V>>2]|0;if((ga|0)>=(_|0)){la=ha;ma=_;na=ka;break}ha=k[g>>2]|0;ga=ga+1|0;Z=fXa(o,j,k[N>>2]|0,(ga|0)<(_|0)?1:2,g,D,f,h)|0;if(Z){ja=Z;$=56;break e}else ia=ka}Z=N+8|0;_=k[Z>>2]|0;if((_|0)!=-1){aa=ma;ba=Z;ca=_;da=la;ea=na;$=58;break}_=k[g>>2]|0;Z=fXa(o,j,k[N>>2]|0,0,g,0,e,h)|0;if(Z){oa=Z;break e}Z=hXa(o,k[e>>2]|0,0,-1,0)|0;k[e>>2]=Z;if(!Z){oa=12;break e}k[g>>2]=_;pa=Z;qa=_;ra=na;$=74}while(0);do if(($|0)==58){$=0;if((aa|0)<(ca|0)){V=0;Y=aa;while(1){_=k[g>>2]|0;Z=fXa(o,j,k[N>>2]|0,0,g,0,f,h)|0;if(Z){sa=Z;$=70;break e}if(!V){Z=k[f>>2]|0;k[e>>2]=Z;ta=Z}else{Z=gXa(o,k[f>>2]|0,V)|0;k[e>>2]=Z;ta=Z}if(!ta){sa=12;$=70;break e}Z=iXa(o,0,20)|0;if(!Z){sa=12;$=70;break e}X=k[Z+4>>2]|0;k[X>>2]=-1;k[X+4>>2]=-1;k[X+8>>2]=-1;X=jXa(o,Z,ta)|0;k[e>>2]=X;if(!X){sa=12;$=70;break e}Y=Y+1|0;if((Y|0)>=(k[ba>>2]|0)){ua=X;va=_;break}else V=X}}else{ua=0;va=da}k[g>>2]=va;if(!ea){wa=va;xa=ua;$=75;break}if(!ua){ya=va;za=ea;$=76}else{pa=ua;qa=va;ra=ea;$=74}}while(0);if(($|0)==74){$=0;wa=qa;xa=gXa(o,ra,pa)|0;$=75}if(($|0)==75){$=0;if(!xa){oa=12;break e}else{ya=wa;za=xa;$=76}}if(($|0)==76){$=0;k[J>>2]=k[za+4>>2];k[M>>2]=k[za>>2];fa=ya}N=H+-1|0;V=fa-W+I|0;if(!N){k[g>>2]=V;O=V;P=0;Q=V}else{O=fa;P=N;Q=V}break}default:{O=G;P=H;Q=I}}while(0);F=k[m>>2]|0;if((F|0)<=(s|0)){R=Q;S=0;break d}else{G=O;H=P;I=Q}}if(($|0)==56)oa=ja;else if(($|0)==70)oa=sa;Aa=oa;break c}else{R=0;S=0}while(0);E=(k[w>>2]|0)+R|0;I=k[h>>2]|0;H=(I|0)>(E|0)?I:E;k[w>>2]=H;if(S){x=0;y=S;z=0;A=u;break b}k[w>>2]=H+1;E=iXa(o,0,20)|0;if(!E){x=0;y=12;z=0;A=u;break b}I=k[E+4>>2]|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=H;H=gXa(o,v,E)|0;if(!H){x=0;y=12;z=0;A=u;break b}E=k[m>>2]|0;k[f>>2]=H;k[e>>2]=k[f>>2];I=eXa(j,e)|0;if(I){x=0;y=I;z=0;A=u;break b}k[f>>2]=0;k[e>>2]=k[f>>2];I=eXa(j,e)|0;if(I){x=0;y=I;z=0;A=u;break b}I=k[m>>2]|0;g:do if((I|0)>(E|0)){G=I;h:while(1){F=G+-1|0;k[m>>2]=F;M=k[n>>2]|0;K=k[M+(F<<2)>>2]|0;F=G+-2|0;k[m>>2]=F;L=k[M+(F<<2)>>2]|0;i:do switch(K|0){case 0:{switch(k[L>>2]|0){case 0:{F=k[L+4>>2]|0;M=k[F>>2]|0;if((M|0)==-4){k[L+8>>2]=0;V=F+8|0;N=kXa(o,k[V>>2]|0,0,1114111,0,0,-1)|0;k[L+24>>2]=N;if(!N){x=0;y=12;z=0;A=u;break b}N=kXa(o,k[V>>2]|0,0,1114111,0,0,k[F+4>>2]|0)|0;k[L+28>>2]=N;if(!N){x=0;y=12;z=0;A=u;break b}else break i}N=L+8|0;if((M|0)<0){k[N>>2]=1;V=lXa(o)|0;k[L+24>>2]=V;if(!V){x=0;y=12;z=0;A=u;break b}V=lXa(o)|0;k[L+28>>2]=V;if(!V){x=0;y=12;z=0;A=u;break b}else break i}else{k[N>>2]=0;N=F+8|0;V=F+4|0;Y=kXa(o,k[N>>2]|0,M,k[V>>2]|0,0,0,-1)|0;k[L+24>>2]=Y;if(!Y){x=0;y=12;z=0;A=u;break b}Y=kXa(o,k[N>>2]|0,k[F>>2]|0,k[V>>2]|0,k[F+12>>2]|0,k[F+16>>2]|0,-1)|0;k[L+28>>2]=Y;if(!Y){x=0;y=12;z=0;A=u;break b}else break i}break}case 3:{k[f>>2]=L;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}k[f>>2]=1;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}Y=L+4|0;k[f>>2]=k[(k[Y>>2]|0)+4>>2];k[e>>2]=k[f>>2];F=eXa(j,e)|0;if(F){x=0;y=F;z=0;A=u;break b}k[f>>2]=0;k[e>>2]=k[f>>2];F=eXa(j,e)|0;if(F){x=0;y=F;z=0;A=u;break b}k[f>>2]=k[k[Y>>2]>>2];k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}k[f>>2]=0;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(!Y)break i;else{x=0;y=Y;z=0;A=u;break b}break}case 1:{k[f>>2]=L;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}k[f>>2]=2;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}Y=L+4|0;k[f>>2]=k[(k[Y>>2]|0)+4>>2];k[e>>2]=k[f>>2];F=eXa(j,e)|0;if(F){x=0;y=F;z=0;A=u;break b}k[f>>2]=0;k[e>>2]=k[f>>2];F=eXa(j,e)|0;if(F){x=0;y=F;z=0;A=u;break b}k[f>>2]=k[k[Y>>2]>>2];k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}k[f>>2]=0;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(!Y)break i;else{x=0;y=Y;z=0;A=u;break b}break}case 2:{k[f>>2]=L;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}k[f>>2]=3;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}k[f>>2]=k[k[L+4>>2]>>2];k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(Y){x=0;y=Y;z=0;A=u;break b}k[f>>2]=0;k[e>>2]=k[f>>2];Y=eXa(j,e)|0;if(!Y)break i;else{x=0;y=Y;z=0;A=u;break b}break}default:break i}break}case 1:{Y=k[L+4>>2]|0;F=k[Y>>2]|0;V=Y+4|0;N=k[V>>2]|0;if(!(k[F+8>>2]|0))Ba=(k[N+8>>2]|0)!=0;else Ba=1;k[L+8>>2]=Ba&1;M=mXa(o,k[F+24>>2]|0,k[N+24>>2]|0,0,0)|0;k[L+24>>2]=M;if(!M){x=0;y=12;z=0;A=u;break b}M=mXa(o,k[(k[Y>>2]|0)+28>>2]|0,k[(k[V>>2]|0)+28>>2]|0,0,0)|0;k[L+28>>2]=M;if(!M){x=0;y=12;z=0;A=u;break b}break}case 3:{M=k[L+4>>2]|0;V=k[M>>2]|0;do if(!(k[M+4>>2]|0))$=120;else{if(k[V+8>>2]|0){$=120;break}k[L+8>>2]=0}while(0);if(($|0)==120){$=0;k[L+8>>2]=1}k[L+24>>2]=k[V+24>>2];k[L+28>>2]=k[V+28>>2];break}case 2:{M=k[L+4>>2]|0;W=k[M>>2]|0;J=W+8|0;if(!(k[J>>2]|0))Ca=0;else Ca=(k[(k[M+4>>2]|0)+8>>2]|0)!=0;k[L+8>>2]=Ca&1;if(k[J>>2]|0){J=nXa(j,W,0,0,e)|0;if(J){Da=J;break h}J=xYa((k[e>>2]<<2)+4|0)|0;if(!J){Da=12;break h}k[J>>2]=-1;k[f>>2]=0;Y=nXa(j,k[M>>2]|0,J,f,0)|0;if(Y){Ea=J;Fa=Y;$=130;break h}Y=M+4|0;N=mXa(o,k[(k[Y>>2]|0)+24>>2]|0,k[(k[M>>2]|0)+24>>2]|0,J,k[f>>2]|0)|0;F=L+24|0;k[F>>2]=N;yYa(J);if(!(k[F>>2]|0)){Da=12;break h}else Ga=Y}else{k[L+24>>2]=k[W+24>>2];Ga=M+4|0}W=k[Ga>>2]|0;if(k[W+8>>2]|0){Y=nXa(j,W,0,0,e)|0;if(Y){Da=Y;break h}Y=xYa((k[e>>2]<<2)+4|0)|0;if(!Y){Da=12;break h}k[Y>>2]=-1;k[f>>2]=0;F=nXa(j,k[Ga>>2]|0,Y,f,0)|0;if(F){Ha=Y;Ia=F;$=137;break h}F=mXa(o,k[(k[M>>2]|0)+28>>2]|0,k[(k[Ga>>2]|0)+28>>2]|0,Y,k[f>>2]|0)|0;M=L+28|0;k[M>>2]=F;yYa(Y);if(!(k[M>>2]|0)){Da=12;break h}}else k[L+28>>2]=k[W+28>>2];break}default:{}}while(0);G=k[m>>2]|0;if((G|0)<=(E|0))break g}if(($|0)==130){yYa(Ea);Da=Fa}else if(($|0)==137){yYa(Ha);Da=Ia}x=0;y=Da;z=0;A=u;break b}while(0);E=k[w>>2]|0;I=E<<2;G=xYa(I)|0;if(!G){x=G;y=12;z=0;A=u;break b}L=xYa(I)|0;if(!L){x=G;y=12;z=L;A=u;break b}if((E|0)>0)Fyb(G|0,0,((E|0)>1?E:1)<<2|0)|0;oXa(H,0,G,0)|0;E=k[w>>2]|0;if((E|0)>0){I=0;K=0;while(1){k[L+(K<<2)>>2]=I;W=G+(K<<2)|0;M=I+1+(k[W>>2]|0)|0;k[W>>2]=0;K=K+1|0;if((K|0)>=(E|0)){Ja=M;break}else I=M}}else Ja=0;I=zYa(Ja+1|0,32)|0;if(!I){x=G;y=12;z=L;A=u;break b}k[u>>2]=I;E=u+4|0;k[E>>2]=Ja;K=oXa(H,I,G,L)|0;if(K){x=G;y=K;z=L;A=u;break b}k[u+20>>2]=0;K=H+24|0;M=0;W=k[K>>2]|0;while(1){Y=M+1|0;if((k[W>>2]|0)>-1){M=Y;W=W+32|0}else{Ka=Y;break}}W=zYa(Ka,32)|0;if(!W){x=G;y=12;z=L;A=u;break b}k[u+8>>2]=W;M=k[K>>2]|0;Y=k[M>>2]|0;if((Y|0)>-1){F=Y;Y=M;M=0;while(1){k[W+(M<<5)+8>>2]=I+(k[L+(F<<2)>>2]<<5);k[W+(M<<5)+12>>2]=F;J=W+(M<<5)+16|0;k[J>>2]=0;N=Y+12|0;X=k[N>>2]|0;if(X){_=0;while(1){Z=_+1|0;if((k[X+(_<<2)>>2]|0)>-1)_=Z;else{La=Z;break}}_=La<<2;X=xYa(_)|0;k[J>>2]=X;if(!X){x=G;y=12;z=L;A=u;break b}Dyb(X|0,k[N>>2]|0,_|0)|0}k[W+(M<<5)+20>>2]=k[Y+16>>2];_=M+1|0;Y=Y+32|0;F=k[Y>>2]|0;if((F|0)<=-1){Ma=_;break}else M=_}}else Ma=0;k[W+(Ma<<5)+8>>2]=0;k[E>>2]=Ja;k[u+12>>2]=I+(k[L+(k[k[H+28>>2]>>2]<<2)>>2]<<5);k[u+52>>2]=k[w>>2];k[u+56>>2]=c;cQa(o);yYa(k[n>>2]|0);yYa(j);yYa(G);yYa(L);k[a+4>>2]=u;l=0;break a}else Aa=t}else Aa=B;while(0);x=0;y=Aa;z=0;A=u}}else{x=0;y=6;z=0;A=0}}else{x=0;y=q;z=0;A=0}while(0);cQa(o);yYa(k[n>>2]|0);yYa(j);if(x)yYa(x);if(z)yYa(z);k[a+4>>2]=A;hQa(a);l=y}while(0);r=d;return l|0}function hQa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=k[a+4>>2]|0;if(b){a=b+4|0;c=k[b>>2]|0;if(!(k[a>>2]|0))d=c;else{e=c;c=0;while(1){if(k[e+(c<<5)+8>>2]|0){f=k[e+(c<<5)+16>>2]|0;if(!f)g=e;else{yYa(f);g=k[b>>2]|0}f=k[g+(c<<5)+28>>2]|0;if(!f)h=g;else{yYa(f);h=k[b>>2]|0}}else h=e;c=c+1|0;if(c>>>0>=(k[a>>2]|0)>>>0){d=h;break}else e=h}}if(d)yYa(d);d=b+8|0;h=k[d>>2]|0;if(h){if(!(k[h+8>>2]|0))i=h;else{e=h;while(1){h=k[e+16>>2]|0;if(h)yYa(h);if(!(k[e+40>>2]|0))break;else e=e+32|0}i=k[d>>2]|0}yYa(i)}i=b+16|0;d=k[i>>2]|0;if(d){e=b+28|0;h=k[e>>2]|0;if(!h)j=d;else{a=d;d=h;h=0;while(1){c=k[a+(h*12|0)+8>>2]|0;if(!c)l=d;else{yYa(c);l=k[e>>2]|0}c=h+1|0;if(c>>>0>=l>>>0)break;a=k[i>>2]|0;d=l;h=c}j=k[i>>2]|0}yYa(j)}j=k[b+32>>2]|0;if(j)yYa(j);j=k[b+20>>2]|0;if(j)yYa(j);j=k[b+36>>2]|0;if(j)yYa(j);yYa(b)}return}function iQa(a){a=a|0;MQa(a,0,1,0)|0;return}function jQa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;if((k[b+76>>2]|0)>=0?(pRa(b)|0)!=0:0){if((i[b+75>>0]|0)!=(a|0)?(c=b+20|0,d=k[c>>2]|0,d>>>0<(k[b+16>>2]|0)>>>0):0){k[c>>2]=d+1;i[d>>0]=a;e=a&255}else e=tRa(b,a)|0;qRa(b);f=e}else g=3;do if((g|0)==3){if((i[b+75>>0]|0)!=(a|0)?(e=b+20|0,d=k[e>>2]|0,d>>>0<(k[b+16>>2]|0)>>>0):0){k[e>>2]=d+1;i[d>>0]=a;f=a&255;break}f=tRa(b,a)|0}while(0);return f|0}function kQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=cRa(a,b,e)|0;r=d;return c|0}function lQa(a){a=a|0;if((k[a+76>>2]|0)>-1?(pRa(a)|0)!=0:0)qRa(a);return k[a+60>>2]|0}function mQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+32|0;e=d;f=d+20|0;k[e>>2]=k[a+60>>2];k[e+4>>2]=0;k[e+8>>2]=b;k[e+12>>2]=f;k[e+16>>2]=c;if((KVa(nc(140,e|0)|0)|0)<0){k[f>>2]=-1;g=-1}else g=k[f>>2]|0;r=d;return g|0}function nQa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+16|0;e=c;if(_Ma(317691,i[b>>0]|0,4)|0){f=LRa(b)|0|32768;k[e>>2]=a;k[e+4>>2]=f;k[e+8>>2]=438;f=KVa(qd(5,e|0)|0)|0;if((f|0)>=0){e=$Ra(f,b)|0;if(!e){k[d>>2]=f;pd(6,d|0)|0;g=0}else g=e}else g=0}else{e=HSa()|0;k[e>>2]=22;g=0}r=c;return g|0}function oQa(a,b){a=a|0;b=b|0;var c=0,d=0;c=wSa(a)|0;if((c|0)<0)d=-1;else{k[b>>2]=c;d=0}return d|0}function pQa(a,b,c){a=a|0;b=b|0;c=c|0;MQa(a,b,(b|0)!=0?0:2,c)|0;return}function qQa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;if((k[a+76>>2]|0)>-1)c=pRa(a)|0;else c=0;d=a+74|0;e=i[d>>0]|0;if(!(e<<24>>24)){f=(b>>31|(0-b|0)>>>31)&255;i[d>>0]=f;g=f}else g=e;if(c)qRa(a);return g<<24>>24|0}function rQa(a){a=a|0;return (k[a+8>>2]|0)-(k[a+4>>2]|0)|0}function sQa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=k[a+8>>2]|0;d=k[a+4>>2]|0;if((c|0)==(d|0))e=0;else{k[b>>2]=c-d;e=d}return e|0}function tQa(a,b){a=a|0;b=b|0;var c=0;c=a+4|0;k[c>>2]=(k[c>>2]|0)+b;return}function uQa(a){a=a|0;k[a>>2]=k[a>>2]|32;return}function vQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=eRa(a,b,e)|0;r=d;return c|0}function wQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+112|0;e=d;f=e;g=f+112|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));k[e+36>>2]=154;k[e+44>>2]=b;k[e+48>>2]=0;k[e+60>>2]=a;i[e+75>>0]=-1;k[e+76>>2]=-1;a=eRa(e,b,c)|0;r=d;return a|0}function xQa(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;a=r;r=r+48|0;b=a+16|0;c=a;d=a+20|0;e=0;while(1){f=BSa(d)|0;if(!f){g=0;break}k[c>>2]=f;k[c+4>>2]=32962;k[c+8>>2]=384;h=KVa(qd(5,c|0)|0)|0;e=e+1|0;if((h|0)>-1){i=h;j=f;l=5;break}if((e|0)>=100){g=0;break}}if((l|0)==5){l=$Ra(i,317635)|0;k[b>>2]=j;jd(10,b|0)|0;g=l}r=a;return g|0}function yQa(){var a=0,b=0,c=0,d=0;a=k[12027]|0;b=a+4|0;c=k[b>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[b>>2]=c+1;d=l[c>>0]|0}else d=vRa(a)|0;return d|0}function zQa(a,b){a=a|0;b=b|0;return SRa(a,b)|0}function AQa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(Be(38,d|0)|0)|0;r=c;return b|0}function BQa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=r;r=r+16|0;f=e;g=b;h=g+112|0;do{k[g>>2]=0;g=g+4|0}while((g|0)<(h|0));k[f>>2]=a;k[f+4>>2]=557056;k[f+8>>2]=0;a=KVa(qd(5,f|0)|0)|0;k[b+60>>2]=a;if((a|0)<0)i=0;else{k[b>>2]=9;k[b+44>>2]=c+8;k[b+48>>2]=d+-8;k[b+32>>2]=61;k[b+40>>2]=59;k[b+12>>2]=419;k[b+76>>2]=-1;i=b}r=e;return i|0}function CQa(a){a=a|0;var b=0,c=0,d=0;b=a+74|0;c=i[b>>0]|0;i[b>>0]=c+255|c;c=k[a>>2]|0;if(!(c&8)){k[a+8>>2]=0;k[a+4>>2]=0;b=k[a+44>>2]|0;k[a+28>>2]=b;k[a+20>>2]=b;k[a+16>>2]=b+(k[a+48>>2]|0);d=0}else{k[a>>2]=c|32;d=-1}return d|0}function DQa(){kg[52&63]();return}function EQa(a){a=a|0;var b=0;if((k[a+76>>2]|0)>-1){b=(pRa(a)|0)==0;WRa(a,0,0)|0;k[a>>2]=k[a>>2]&-33;if(!b)qRa(a)}else{WRa(a,0,0)|0;k[a>>2]=k[a>>2]&-33}return}function FQa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;if((k[b+76>>2]|0)>=0?(pRa(b)|0)!=0:0){if((i[b+75>>0]|0)!=(a|0)?(c=b+20|0,d=k[c>>2]|0,d>>>0<(k[b+16>>2]|0)>>>0):0){k[c>>2]=d+1;i[d>>0]=a;e=a&255}else e=tRa(b,a)|0;qRa(b);f=e}else g=3;do if((g|0)==3){if((i[b+75>>0]|0)!=(a|0)?(e=b+20|0,d=k[e>>2]|0,d>>>0<(k[b+16>>2]|0)>>>0):0){k[e>>2]=d+1;i[d>>0]=a;f=a&255;break}f=tRa(b,a)|0}while(0);return f|0}function GQa(a,b,c){a=a|0;b=b|0;c=c|0;return oSa(a,b,10,c)|0}function HQa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=k[a+60>>2];a=KVa(pd(6,c|0)|0)|0;r=b;return a|0}function IQa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=k[12023]|0;if((k[b+76>>2]|0)>-1)c=pRa(b)|0;else c=0;do if((GSa(a,b)|0)<0)d=1;else{if((i[b+75>>0]|0)!=10?(e=b+20|0,f=k[e>>2]|0,f>>>0<(k[b+16>>2]|0)>>>0):0){k[e>>2]=f+1;i[f>>0]=10;d=0;break}d=(tRa(b,10)|0)<0}while(0);if(c)qRa(b);return d<<31>>31|0}function JQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=KRa(a,b,e)|0;r=d;return c|0}function KQa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;e=r;r=r+128|0;f=e+112|0;g=e;h=g;j=49596;l=h+112|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));if((b+-1|0)>>>0>2147483646)if(!b){m=f;n=1;o=4}else{f=HSa()|0;k[f>>2]=75;p=-1}else{m=a;n=b;o=4}if((o|0)==4){o=-2-m|0;b=n>>>0>o>>>0?o:n;k[g+48>>2]=b;n=g+20|0;k[n>>2]=m;k[g+44>>2]=m;o=m+b|0;m=g+16|0;k[m>>2]=o;k[g+28>>2]=o;o=eRa(g,c,d)|0;if(!b)p=o;else{b=k[n>>2]|0;i[b+(((b|0)==(k[m>>2]|0))<<31>>31)>>0]=0;p=o}}r=e;return p|0}function LQa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=eRa(k[12023]|0,a,d)|0;r=c;return b|0}function MQa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=a+75|0;i[d>>0]=-1;switch(c|0){case 2:{k[a+48>>2]=0;break}case 1:{i[d>>0]=10;break}default:{}}k[a>>2]=k[a>>2]|64;return 0}function NQa(a){a=a|0;var b=0,c=0,d=0;b=a+74|0;c=i[b>>0]|0;i[b>>0]=c+255|c;c=a+20|0;b=a+44|0;if((k[c>>2]|0)>>>0>(k[b>>2]|0)>>>0)Xf[k[a+36>>2]&255](a,0,0)|0;k[a+16>>2]=0;k[a+28>>2]=0;k[c>>2]=0;c=k[a>>2]|0;if(c&20)if(!(c&4))d=-1;else{k[a>>2]=c|32;d=-1}else{c=k[b>>2]|0;k[a+8>>2]=c;k[a+4>>2]=c;d=0}return d|0}function OQa(){kg[52&63]();return}function PQa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=d;d=ASa(a,b,c,f)|0;r=e;return d|0}function QQa(){return IRa(k[12027]|0)|0}function RQa(a){a=a|0;var b=0,c=0;b=kRa(a,2147483647,k[12027]|0)|0;if((b|0)!=0?(c=a+((RLa(a)|0)+-1)|0,(i[c>>0]|0)==10):0)i[c>>0]=0;return b|0}function SQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;d=r;r=r+48|0;e=d+16|0;f=d;g=d+32|0;h=a+28|0;i=k[h>>2]|0;k[g>>2]=i;j=a+20|0;l=(k[j>>2]|0)-i|0;k[g+4>>2]=l;k[g+8>>2]=b;k[g+12>>2]=c;b=a+60|0;i=a+44|0;m=g;g=2;n=l+c|0;while(1){if(!(k[12082]|0)){k[e>>2]=k[b>>2];k[e+4>>2]=m;k[e+8>>2]=g;o=KVa(sc(146,e|0)|0)|0}else{ec(1529,a|0);k[f>>2]=k[b>>2];k[f+4>>2]=m;k[f+8>>2]=g;l=KVa(sc(146,f|0)|0)|0;Ed(0);o=l}if((n|0)==(o|0)){p=6;break}if((o|0)<0){q=m;s=g;p=8;break}l=n-o|0;t=k[m+4>>2]|0;if(o>>>0<=t>>>0)if((g|0)==2){k[h>>2]=(k[h>>2]|0)+o;u=t;v=o;w=m;x=2}else{u=t;v=o;w=m;x=g}else{y=k[i>>2]|0;k[h>>2]=y;k[j>>2]=y;u=k[m+12>>2]|0;v=o-t|0;w=m+8|0;x=g+-1|0}k[w>>2]=(k[w>>2]|0)+v;k[w+4>>2]=u-v;m=w;g=x;n=l}if((p|0)==6){n=k[i>>2]|0;k[a+16>>2]=n+(k[a+48>>2]|0);i=n;k[h>>2]=i;k[j>>2]=i;z=c}else if((p|0)==8){k[a+16>>2]=0;k[h>>2]=0;k[j>>2]=0;k[a>>2]=k[a>>2]|32;if((s|0)==2)z=0;else z=c-(k[q+4>>2]|0)|0}r=d;return z|0}function TQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=TRa(a,b,e)|0;r=d;return c|0}function UQa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=xYa(144)|0;if(!c)d=0;else{Fyb(c|0,0,144)|0;e=c+112|0;k[c+84>>2]=e;k[e>>2]=a;k[c+116>>2]=b;b=c+120|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[c>>2]=4;k[c+60>>2]=-1;k[c+44>>2]=c+144;k[c+48>>2]=0;i[c+75>>0]=-1;k[c+36>>2]=155;k[c+40>>2]=156;k[c+12>>2]=625;if(!(k[12083]|0))k[c+76>>2]=-1;nd(48356);b=k[12088]|0;k[c+56>>2]=b;if(b)k[b+52>>2]=c;k[12088]=c;xf(48356);d=c}return d|0}function VQa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;if((k[a+76>>2]|0)>=0?(pRa(a)|0)!=0:0){b=a+4|0;c=k[b>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[b>>2]=c+1;d=l[c>>0]|0}else d=vRa(a)|0;qRa(a);e=d}else f=3;do if((f|0)==3){d=a+4|0;c=k[d>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[d>>2]=c+1;e=l[c>>0]|0;break}else{e=vRa(a)|0;break}}while(0);return e|0}function WQa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0;c=r;r=r+16|0;d=c;if((k[a+76>>2]|0)>-1)e=pRa(a)|0;else e=0;f=a+4|0;g=k[f>>2]|0;h=a+8|0;if(g>>>0<(k[h>>2]|0)>>>0){k[f>>2]=g+1;i=l[g>>0]|0}else i=vRa(a)|0;sRa(i,a)|0;i=k[f>>2]|0;g=i;j=_Ma(i,10,(k[h>>2]|0)-g|0)|0;if(!j){h=a+92|0;k[d>>2]=0;m=GQa(h,d,a)|0;if((m|0)>0){k[b>>2]=m;n=k[h>>2]|0}else n=0}else{h=j+1|0;k[b>>2]=h-g;k[f>>2]=h;n=i}if(e)qRa(a);r=c;return n|0}function XQa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=dRa(a,b,e)|0;r=d;return c|0}function YQa(a){a=a|0;var b=0,c=0,d=0;if((k[a+76>>2]|0)>-1){b=(pRa(a)|0)==0;c=(k[a>>2]|0)>>>5&1;if(b)d=c;else{qRa(a);d=c}}else d=(k[a>>2]|0)>>>5&1;return d|0}function ZQa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;if((k[a+76>>2]|0)>=0?(pRa(a)|0)!=0:0){b=a+4|0;c=k[b>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[b>>2]=c+1;d=l[c>>0]|0}else d=vRa(a)|0;qRa(a);e=d}else f=3;do if((f|0)==3){d=a+4|0;c=k[d>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[d>>2]=c+1;e=l[c>>0]|0;break}else{e=vRa(a)|0;break}}while(0);return e|0}function _Qa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[12025]|0;c=HSa()|0;d=ISa(k[c>>2]|0)|0;if((k[b+76>>2]|0)>-1)e=pRa(b)|0;else e=0;if((a|0)!=0?(i[a>>0]|0)!=0:0){FRa(a,RLa(a)|0,1,b)|0;jQa(58,b)|0;jQa(32,b)|0}FRa(d,RLa(d)|0,1,b)|0;jQa(10,b)|0;if(e)qRa(b);return}function $Qa(a,b){a=a|0;b=b|0;MQa(a,b,(b|0)!=0?0:2,1024)|0;return}function aRa(){var a=0,b=0;nd(48356);a=k[12088]|0;if(a){b=a;do{uXa(b);b=k[b+56>>2]|0}while((b|0)!=0)}uXa(k[12028]|0);uXa(k[12024]|0);return}function bRa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+1040|0;d=c;e=c+8|0;k[d>>2]=a;if((k[b+76>>2]|0)>-1)f=pRa(b)|0;else f=0;g=b+74|0;h=i[g>>0]|0;i[g>>0]=h+1|h;a:do if(a){while(1){h=zVa(e,d,1024,0)|0;if((h+1|0)>>>0<=1){j=h;l=9;break a}if((ERa(e,h,b)|0)>>>0>>0)break;if(!(k[d>>2]|0)){j=h;l=9;break a}}if(!f)m=-1;else{qRa(b);m=-1}}else{j=0;l=9}while(0);if((l|0)==9)if(!f)m=j;else{qRa(b);m=j}r=c;return m|0}function cRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+128|0;e=d+112|0;f=d+72|0;g=d;h=f;j=h+36|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(j|0));k[e>>2]=k[c>>2];if((vXa(0,b,e,g,f)|0)<0)l=-1;else{if((k[a+76>>2]|0)>-1)m=(pRa(a)|0)!=0;else m=0;c=a+74|0;h=i[c>>0]|0;i[c>>0]=h+1|h;h=k[a>>2]|0;k[a>>2]=h&-33;c=vXa(a,b,e,g,f)|0;f=k[a>>2]|0;k[a>>2]=f|h&32;if(m)qRa(a);l=(f&32|0)!=0?-1:c}r=d;return l|0}function dRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0;d=r;r=r+176|0;e=d+24|0;f=d;g=d+128|0;h=d+120|0;m=d+144|0;n=d+32|0;if((k[a+76>>2]|0)>-1)o=pRa(a)|0;else o=0;p=a+74|0;q=i[p>>0]|0;i[p>>0]=q+1|q;q=k[b>>2]|0;a:do if(q){p=a+4|0;s=a+8|0;t=n+4|0;u=n+8|0;v=n+12|0;w=n+16|0;x=n+20|0;y=n+24|0;z=n+28|0;A=n+32|0;B=n+36|0;C=n+40|0;D=n+44|0;E=n+48|0;F=n+52|0;G=n+56|0;H=n+60|0;I=n+64|0;J=n+68|0;K=n+72|0;L=n+76|0;M=n+80|0;N=n+84|0;O=q;P=0;Q=0;R=b;S=0;T=0;U=0;b:while(1){c:do if(dJa(O)|0){V=R;while(1){W=V+4|0;if(!(dJa(k[W>>2]|0)|0)){X=V;break}else V=W}V=S;while(1){W=k[p>>2]|0;if(W>>>0<(k[s>>2]|0)>>>0?(i[W>>0]|0)>-1:0){k[p>>2]=W+1;Y=l[W>>0]|0}else Y=zRa(a)|0;if(!(dJa(Y)|0)){Z=Y;_=V;break}else V=V+1|0}if(Z>>>0<128&(k[s>>2]|0)!=0){k[p>>2]=(k[p>>2]|0)+-1;$=P;aa=Q;ba=X;ca=_;da=T;ea=U;break}else{tSa(Z,a)|0;$=P;aa=Q;ba=X;ca=_;da=T;ea=U;break}}else{V=(k[R>>2]|0)==37;d:do if(V){W=R+4|0;fa=k[W>>2]|0;e:do switch(fa|0){case 37:{break d;break}case 42:{ga=0;ha=R+8|0;break}default:{if((WIa(fa)|0)!=0?(k[R+8>>2]|0)==36:0){ia=(k[W>>2]|0)+-48|0;k[g>>2]=k[c>>2];ja=ia;while(1){ia=(k[g>>2]|0)+(4-1)&~(4-1);ka=k[ia>>2]|0;k[g>>2]=ia+4;if(ja>>>0>1)ja=ja+-1|0;else{la=ka;break}}ga=la;ha=R+12|0;break e}ja=(k[c>>2]|0)+(4-1)&~(4-1);ka=k[ja>>2]|0;k[c>>2]=ja+4;ga=ka;ha=W}}while(0);if(!(WIa(k[ha>>2]|0)|0)){ma=ha;na=0}else{W=ha;fa=0;while(1){ka=(fa*10|0)+-48+(k[W>>2]|0)|0;ja=W+4|0;if(!(WIa(k[ja>>2]|0)|0)){ma=ja;na=ka;break}else{W=ja;fa=ka}}}fa=k[ma>>2]|0;if((fa|0)==109){W=ma+4|0;oa=k[W>>2]|0;pa=(ga|0)!=0&1;qa=W;ra=0;sa=0}else{oa=fa;pa=0;qa=ma;ra=T;sa=U}fa=qa+4|0;switch(oa|0){case 104:{W=(k[fa>>2]|0)==104;ta=W?qa+8|0:fa;ua=W?-2:-1;break}case 108:{W=(k[fa>>2]|0)==108;ta=W?qa+8|0:fa;ua=W?3:1;break}case 106:{ta=fa;ua=3;break}case 116:case 122:{ta=fa;ua=1;break}case 76:{ta=fa;ua=2;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{ta=qa;ua=0;break}default:{va=pa;wa=Q;xa=ra;ya=sa;za=121;break b}}fa=k[ta>>2]|0;W=(fa&47|0)==3;ka=fa|32;ja=W?ka:fa;fa=W?1:ua;switch(ja|0){case 110:{Aa=S;break}case 91:{za=52;break}default:if((ka|0)==99)za=52;else{ka=S;while(1){W=k[p>>2]|0;if(W>>>0<(k[s>>2]|0)>>>0?(i[W>>0]|0)>-1:0){k[p>>2]=W+1;Ba=l[W>>0]|0}else Ba=zRa(a)|0;if(!(dJa(Ba)|0)){Ca=Ba;Da=ka;za=56;break}else ka=ka+1|0}}}do if((za|0)==52){za=0;ka=k[p>>2]|0;W=k[s>>2]|0;if(ka>>>0>>0?(i[ka>>0]|0)>-1:0){k[p>>2]=ka+1;Ea=W;Fa=l[ka>>0]|0;Ga=S;za=58;break}Ca=zRa(a)|0;Da=S;za=56}while(0);if((za|0)==56){za=0;if((Ca|0)<0){va=pa;wa=Q;xa=ra;ya=sa;za=121;break b}Ea=k[s>>2]|0;Fa=Ca;Ga=Da;za=58}f:do if((za|0)==58){za=0;if(Fa>>>0<128&(Ea|0)!=0)k[p>>2]=(k[p>>2]|0)+-1;else tSa(Fa,a)|0;switch(ja|0){case 110:{Aa=Ga;break f;break}case 91:case 99:case 115:{ka=(ja|0)==99;g:do if(ka){Ha=1;Ia=ta;Ja=49708;Ka=(na|0)<1?1:na}else{if((ja|0)==115){k[n>>2]=32;k[t>>2]=9;k[u>>2]=10;k[v>>2]=13;k[w>>2]=11;k[x>>2]=12;k[y>>2]=133;k[z>>2]=8192;k[A>>2]=8193;k[B>>2]=8194;k[C>>2]=8195;k[D>>2]=8196;k[E>>2]=8197;k[F>>2]=8198;k[G>>2]=8200;k[H>>2]=8201;k[I>>2]=8202;k[J>>2]=8232;k[K>>2]=8233;k[L>>2]=8287;k[M>>2]=12288;k[N>>2]=0;Ha=1;Ia=ta;Ja=n;Ka=na;break}W=ta+4|0;ia=(k[W>>2]|0)==94;La=ia?ta+8|0:W;Ma=ia&1;Na=(k[La>>2]|0)==93?(ia?W:ta)+8|0:La;while(1){switch(k[Na>>2]|0){case 0:{va=pa;wa=Q;xa=ra;ya=sa;za=121;break b;break}case 93:{Ha=Ma;Ia=Na;Ja=La;Ka=na;break g;break}default:{}}Na=Na+4|0}}while(0);Na=(fa|0)==0?ga:0;La=(fa|0)==1;Ma=La?ga:0;W=(Ka|0)<1?-1:Ka;ia=(pa|0)!=0;do if(ia){Oa=ka?W+1|0:31;if(La){Pa=xYa(Oa<<2)|0;if(!Pa){va=pa;wa=Q;xa=Na;ya=Pa;za=121;break b}else{Qa=Oa;Ra=Na;Sa=Pa;break}}else{Pa=xYa(Oa)|0;if(!Pa){va=pa;wa=Q;xa=0;ya=0;za=121;break b}else{Qa=Oa;Ra=Pa;Sa=0;break}}}else{Qa=P;Ra=Na;Sa=Ma}while(0);h:do if(W){Ma=Ja+4|0;Na=0;Pa=0;Oa=Qa;Ta=Ga;Ua=Ra;Va=Sa;Wa=W;while(1){Xa=k[p>>2]|0;do if(Xa>>>0<(k[s>>2]|0)>>>0){if((i[Xa>>0]|0)<=-1){za=85;break}k[p>>2]=Xa+1;Ya=l[Xa>>0]|0}else za=85;while(0);if((za|0)==85){za=0;Xa=zRa(a)|0;if((Xa|0)<0){Za=Xa;_a=Na;$a=Pa;ab=Oa;bb=Ta;cb=Ua;db=Va;za=106;break}else Ya=Xa}switch(k[Ja>>2]|0){case 45:{if((Ya|0)==45)eb=1;else{fb=Ma;za=89}break}case 93:{if((Ya|0)==93)eb=1;else{fb=Ma;za=89}break}default:{fb=Ja;za=89}}i:do if((za|0)==89)while(1){za=0;Xa=k[fb>>2]|0;j:do switch(Xa|0){case 93:case 0:{eb=0;break i;break}case 45:{gb=fb+4|0;hb=k[gb>>2]|0;switch(hb|0){case 93:case 0:{ib=45;jb=fb;break j;break}default:{}}kb=k[fb+-4>>2]|0;if((kb|0)<(hb|0))lb=kb;else{ib=hb;jb=gb;break j}while(1){if((lb|0)==(Ya|0)){eb=1;break i}lb=lb+1|0;if((lb|0)>=(hb|0)){ib=hb;jb=gb;break}}break}default:{ib=Xa;jb=fb}}while(0);if((ib|0)==(Ya|0)){eb=1;break i}else{fb=jb+4|0;za=89}}while(0);if((eb|0)==(Ha|0)){mb=Ya;nb=Na;ob=Pa;pb=Oa;qb=Ta;rb=Ua;sb=Va;za=104;break}do if(!Va){if(La){tb=Pa;ub=Oa;vb=Ua;wb=0;break}Xa=DVa((Ua|0)!=0?Ua+Pa|0:m,Ya)|0;if((Xa|0)<0){va=pa;wa=Q;xa=Ua;ya=0;za=121;break b}gb=Xa+Pa|0;if(!(ia&gb>>>0>(Oa+-4|0)>>>0)){tb=gb;ub=Oa;vb=Ua;wb=0;break}Xa=Oa<<1|1;hb=AYa(Ua,Xa)|0;if(!hb){va=pa;wa=Q;xa=Ua;ya=0;za=121;break b}else{tb=gb;ub=Xa;vb=hb;wb=0}}else{hb=Pa+1|0;k[Va+(Pa<<2)>>2]=Ya;if(!(ia&(hb|0)==(Oa|0))){tb=hb;ub=Oa;vb=Ua;wb=Va;break}hb=Oa<<1|1;Xa=AYa(Va,hb<<2)|0;if(!Xa){va=pa;wa=Q;xa=Ua;ya=Va;za=121;break b}else{tb=Oa;ub=hb;vb=Ua;wb=Xa}}while(0);Xa=Ta+1|0;hb=(Wa|0)>0&1;if((Wa|0)==(hb|0)){xb=tb;yb=ub;zb=Xa;Ab=vb;Bb=wb;break h}else{Na=1;Pa=tb;Oa=ub;Ta=Xa;Ua=vb;Va=wb;Wa=Wa-hb|0}}if((za|0)==104){za=0;if(mb>>>0<128&(k[s>>2]|0)!=0){k[p>>2]=(k[p>>2]|0)+-1;Cb=nb;Db=ob;Eb=pb;Fb=qb;Gb=rb;Hb=sb}else{Za=mb;_a=nb;$a=ob;ab=pb;bb=qb;cb=rb;db=sb;za=106}}if((za|0)==106){za=0;tSa(Za,a)|0;Cb=_a;Db=$a;Eb=ab;Fb=bb;Gb=cb;Hb=db}if((ja|0)!=99&(Cb|0)!=0){xb=Db;yb=Eb;zb=Fb;Ab=Gb;Bb=Hb}else{Ib=pa;Jb=Q;Kb=Gb;Lb=Hb;break b}}else{xb=0;yb=Qa;zb=Ga;Ab=Ra;Bb=Sa}while(0);do if(ia)if(La){k[ga>>2]=Bb;break}else{k[ga>>2]=Ab;break}while(0);if(!ka){if(Bb)k[Bb+(xb<<2)>>2]=0;if(!Ab){Mb=yb;Nb=Ia;Ob=zb;Pb=0;Qb=Bb}else{i[Ab+xb>>0]=0;Mb=yb;Nb=Ia;Ob=zb;Pb=Ab;Qb=Bb}}else{Mb=yb;Nb=Ia;Ob=zb;Pb=Ab;Qb=Bb}break}case 112:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{La=(ga|0)!=0;k[f>>2]=2-(La&1);k[f+4>>2]=317674;k[f+8>>2]=(na|0)>0?na:0;k[f+12>>2]=317638+((fa+2|0)*3|0);k[f+16>>2]=ja;uRa(m,22,317656,f)|0;k[h>>2]=0;k[e>>2]=La?ga:h;k[e+4>>2]=h;if((cSa(a,m,e)|0)==-1){va=pa;wa=Q;xa=ra;ya=sa;za=121;break b}La=k[h>>2]|0;if(!La){Ib=pa;Jb=Q;Kb=ra;Lb=sa;break b}else{Mb=P;Nb=ta;Ob=La+Ga|0;Pb=ra;Qb=sa}break}default:{va=pa;wa=Q;xa=ra;ya=sa;za=121;break b}}$=Mb;aa=((ga|0)!=0&1)+Q|0;ba=Nb;ca=Ob;da=Pb;ea=Qb;break c}while(0);if(!ga){$=P;aa=Q;ba=ta;ca=Aa;da=ra;ea=sa;break c}switch(fa|0){case -2:{i[ga>>0]=Aa;$=P;aa=Q;ba=ta;ca=Aa;da=ra;ea=sa;break c;break}case -1:{j[ga>>1]=Aa;$=P;aa=Q;ba=ta;ca=Aa;da=ra;ea=sa;break c;break}case 0:{k[ga>>2]=Aa;$=P;aa=Q;ba=ta;ca=Aa;da=ra;ea=sa;break c;break}case 1:{k[ga>>2]=Aa;$=P;aa=Q;ba=ta;ca=Aa;da=ra;ea=sa;break c;break}case 3:{ja=ga;k[ja>>2]=Aa;k[ja+4>>2]=((Aa|0)<0)<<31>>31;$=P;aa=Q;ba=ta;ca=Aa;da=ra;ea=sa;break c;break}default:{$=P;aa=Q;ba=ta;ca=Aa;da=ra;ea=sa;break c}}}while(0);ja=R+((V&1)<<2)|0;La=k[p>>2]|0;if(La>>>0<(k[s>>2]|0)>>>0?(i[La>>0]|0)>-1:0){k[p>>2]=La+1;Rb=l[La>>0]|0}else Rb=zRa(a)|0;if((Rb|0)!=(k[ja>>2]|0)){Sb=Rb;Tb=Q;Ub=T;Vb=U;za=23;break b}$=P;aa=Q;ba=ja;ca=S+1|0;da=T;ea=U}while(0);R=ba+4|0;O=k[R>>2]|0;if(!O){Wb=aa;break a}else{P=$;Q=aa;S=ca;T=da;U=ea}}if((za|0)==23){if(Sb>>>0<128&(k[s>>2]|0)!=0)k[p>>2]=(k[p>>2]|0)+-1;else tSa(Sb,a)|0;if((Tb|0)!=0|(Sb|0)>-1){Wb=Tb;break}else{Xb=0;Yb=Ub;Zb=Vb;za=122}}else if((za|0)==121)if(!wa){Xb=va;Yb=xa;Zb=ya;za=122}else{Ib=va;Jb=wa;Kb=xa;Lb=ya}if((za|0)==122){Ib=Xb;Jb=-1;Kb=Yb;Lb=Zb}if(!Ib)Wb=Jb;else{yYa(Kb);yYa(Lb);Wb=Jb}}else Wb=0;while(0);if(o)qRa(a);r=d;return Wb|0}function eRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+224|0;e=d+120|0;f=d+80|0;g=d;h=d+136|0;j=f;l=j+40|0;do{k[j>>2]=0;j=j+4|0}while((j|0)<(l|0));k[e>>2]=k[c>>2];if((wXa(0,b,e,g,f)|0)<0)m=-1;else{if((k[a+76>>2]|0)>-1)n=pRa(a)|0;else n=0;c=k[a>>2]|0;j=c&32;if((i[a+74>>0]|0)<1)k[a>>2]=c&-33;c=a+48|0;if(!(k[c>>2]|0)){l=a+44|0;o=k[l>>2]|0;k[l>>2]=h;p=a+28|0;k[p>>2]=h;q=a+20|0;k[q>>2]=h;k[c>>2]=80;s=a+16|0;k[s>>2]=h+80;h=wXa(a,b,e,g,f)|0;if(!o)t=h;else{Xf[k[a+36>>2]&255](a,0,0)|0;u=(k[q>>2]|0)==0?-1:h;k[l>>2]=o;k[c>>2]=0;k[s>>2]=0;k[p>>2]=0;k[q>>2]=0;t=u}}else t=wXa(a,b,e,g,f)|0;f=k[a>>2]|0;k[a>>2]=f|j;if(n)qRa(a);m=(f&32|0)==0?t:-1}r=d;return m|0}function fRa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=ia(c,b)|0;if((k[d+76>>2]|0)>-1)f=pRa(d)|0;else f=0;g=d+74|0;h=i[g>>0]|0;i[g>>0]=h+255|h;h=d+4|0;g=k[h>>2]|0;j=(k[d+8>>2]|0)-g|0;l=g;if((j|0)>0){g=j>>>0>>0?j:e;Dyb(a|0,l|0,g|0)|0;k[h>>2]=l+g;m=a+g|0;n=e-g|0}else{m=a;n=e}a:do if(!n)o=13;else{a=d+32|0;g=m;l=n;while(1){if(NQa(d)|0){p=l;break}h=Xf[k[a>>2]&255](d,g,l)|0;if((h+1|0)>>>0<2){p=l;break}if((l|0)==(h|0)){o=13;break a}else{g=g+h|0;l=l-h|0}}if(f)qRa(d);q=((e-p|0)>>>0)/(b>>>0)|0}while(0);if((o|0)==13)if(!f)q=c;else{qRa(d);q=c}return q|0}function gRa(a,b){a=a|0;b=b|0;return eRa(k[12023]|0,a,b)|0}function hRa(a,b,c){a=a|0;b=b|0;c=c|0;return KQa(a,2147483647,b,c)|0}function iRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=(VLa(c,43)|0)==0;do if((b|0)!=0?(e=i[c>>0]|0,f=e<<24>>24,(_Ma(317691,f,4)|0)!=0):0){if((a|0)==0&b>>>0>4294966151){g=HSa()|0;k[g>>2]=12;h=0;break}g=(a|0)!=0;j=zYa(g?1164:b+1164|0,1)|0;if(!j)h=0;else{l=j+112|0;k[j+84>>2]=l;k[j+60>>2]=-1;i[j+75>>0]=-1;k[j+44>>2]=j+140;k[j+48>>2]=1024;m=g?a:j+1164|0;k[j+124>>2]=m;k[j+120>>2]=b;k[j+128>>2]=f;if(d)k[j>>2]=e<<24>>24==114?8:4;switch(e<<24>>24){case 114:{k[j+116>>2]=b;break}case 97:{e=GMa(m,b)|0;k[l>>2]=e;k[j+116>>2]=e;break}default:{}}k[j+32>>2]=157;k[j+36>>2]=158;k[j+40>>2]=159;k[j+12>>2]=626;if(!(k[12083]|0))k[j+76>>2]=-1;nd(48356);e=k[12088]|0;k[j+56>>2]=e;if(e)k[e+52>>2]=j;k[12088]=j;xf(48356);h=j}}else n=3;while(0);if((n|0)==3){n=HSa()|0;k[n>>2]=22;h=0}return h|0}function jRa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;a=(FRa(d,4,1,b)|0)+-1|0;r=c;return a|0}function kRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if((k[c+76>>2]|0)>-1)d=pRa(c)|0;else d=0;e=b+-1|0;if((b|0)<2){b=c+74|0;f=i[b>>0]|0;i[b>>0]=f+255|f;if(d)qRa(c);if(!e){i[a>>0]=0;g=a}else g=0}else{a:do if(e){f=c+4|0;b=c+8|0;h=e;j=a;while(1){m=k[f>>2]|0;n=m;o=(k[b>>2]|0)-n|0;p=_Ma(m,10,o)|0;q=(p|0)==0;r=q?o:1-n+p|0;p=r>>>0>>0;n=p?r:h;Dyb(j|0,m|0,n|0)|0;m=(k[f>>2]|0)+n|0;k[f>>2]=m;r=j+n|0;o=h-n|0;if(!(q&p)){s=r;t=17;break a}if(m>>>0>=(k[b>>2]|0)>>>0){p=vRa(c)|0;if((p|0)<0){u=r;break}else v=p}else{k[f>>2]=m+1;v=l[m>>0]|0}h=o+-1|0;o=r+1|0;i[r>>0]=v;if(!((h|0)!=0&(v&255|0)!=10)){s=o;t=17;break a}else j=o}if((u|0)!=(a|0)?(k[c>>2]&16|0)!=0:0){s=u;t=17}else w=0}else{s=a;t=17}while(0);if((t|0)==17)if(!a)w=0;else{i[s>>0]=0;w=a}if(!d)g=w;else{qRa(c);g=w}}return g|0}function lRa(a,b){a=a|0;b=b|0;return cRa(k[12023]|0,a,b)|0}function mRa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=(pf()|0)+44|0;c=k[b>>2]|0;b=a+76|0;d=k[b>>2]|0;do if((d|0)==(c|0)){e=a+68|0;f=k[e>>2]|0;if((f|0)==2147483647)g=-1;else{k[e>>2]=f+1;g=0}}else{if((d|0)>=0){if(d){g=-1;break}}else k[b>>2]=0;if(!(k[b>>2]|0))k[b>>2]=c;k[a+68>>2]=1;g=0}while(0);return g|0}function nRa(a){a=a|0;var b=0,c=0;b=a+68|0;c=(k[b>>2]|0)+-1|0;k[b>>2]=c;if(!c)qRa(a);return}function oRa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=xYa(1160)|0;if(!c)d=0;else{e=c;f=e+120|0;do{k[e>>2]=0;e=e+4|0}while((e|0)<(f|0));e=c+112|0;k[c+84>>2]=e;k[e>>2]=a;k[c+116>>2]=b;b=c+120|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[c>>2]=4;k[c+60>>2]=-1;k[c+44>>2]=c+136;k[c+48>>2]=1024;i[c+75>>0]=-1;k[c+36>>2]=160;k[c+40>>2]=161;k[c+12>>2]=627;if(!(k[12083]|0))k[c+76>>2]=-1;nd(48356);b=k[12088]|0;k[c+56>>2]=b;if(b)k[b+52>>2]=c;k[12088]=c;xf(48356);d=c}return d|0}function pRa(a){a=a|0;return 0}function qRa(a){a=a|0;return}function rRa(a){a=a|0;return SRa(a,k[12023]|0)|0}function sRa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;do if((a|0)!=-1){if((k[b+76>>2]|0)>-1)c=pRa(b)|0;else c=0;if(!((k[b+8>>2]|0)==0?(NQa(b)|0)!=0:0))d=6;if((d|0)==6?(e=b+4|0,f=k[e>>2]|0,f>>>0>((k[b+44>>2]|0)+-8|0)>>>0):0){g=f+-1|0;k[e>>2]=g;i[g>>0]=a;k[b>>2]=k[b>>2]&-17;if(!c){h=a;break}qRa(b);h=a;break}if(c){qRa(b);h=-1}else h=-1}else h=-1;while(0);return h|0}function tRa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0;c=r;r=r+16|0;d=c;e=b&255;i[d>>0]=e;f=a+16|0;g=k[f>>2]|0;if(!g)if(!(CQa(a)|0)){h=k[f>>2]|0;j=4}else m=-1;else{h=g;j=4}do if((j|0)==4){g=a+20|0;f=k[g>>2]|0;if(f>>>0>>0?(n=b&255,(n|0)!=(i[a+75>>0]|0)):0){k[g>>2]=f+1;i[f>>0]=e;m=n;break}if((Xf[k[a+36>>2]&255](a,d,1)|0)==1)m=l[d>>0]|0;else m=-1}while(0);r=c;return m|0}function uRa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=d;d=KQa(a,b,c,f)|0;r=e;return d|0}function vRa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;if((k[a+8>>2]|0)==0?(NQa(a)|0)!=0:0)d=-1;else if((Xf[k[a+32>>2]&255](a,c,1)|0)==1)d=l[c>>0]|0;else d=-1;r=b;return d|0}function wRa(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;c=k[b>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[b>>2]=c+1;d=l[c>>0]|0}else d=vRa(a)|0;return d|0}function xRa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+160|0;d=c+48|0;e=c+40|0;f=c+32|0;g=c+24|0;h=c+16|0;j=c+8|0;l=c;m=c+152|0;n=c+148|0;o=c+72|0;p=c+56|0;switch(i[b>>0]|0){case 114:{q=0;s=4;break}case 119:{q=1;s=4;break}default:{t=HSa()|0;k[t>>2]=22;u=0}}do if((s|0)==4)if(!(nVa(m,524288)|0)){t=m+(q<<2)|0;v=cg[631&1023](k[t>>2]|0,b)|0;if(!v){k[l>>2]=k[m>>2];pd(6,l|0)|0;k[j>>2]=k[m+4>>2];pd(6,j|0)|0;u=0;break}if((k[v+76>>2]|0)>-1)x=pRa(v)|0;else x=0;y=q^1;z=m+(y<<2)|0;do if((k[z>>2]|0)==(y|0)){k[h>>2]=0;A=VPa(y,1030,h)|0;if((A|0)<0){B=HSa()|0;C=k[B>>2]|0;break}else{k[g>>2]=k[z>>2];pd(6,g|0)|0;k[z>>2]=A;s=13;break}}else s=13;while(0);if((s|0)==13)if(!(lf(o|0)|0)){if(!(pc(o|0,k[z>>2]|0,y|0)|0)){k[p>>2]=317677;k[p+4>>2]=317680;k[p+8>>2]=a;k[p+12>>2]=0;A=qf(n|0,317683,o|0,0,p|0,k[w>>2]|0)|0;if(!A){Hf(o|0)|0;k[v+64>>2]=k[n>>2];if(!(VLa(b,101)|0)){B=k[t>>2]|0;k[f>>2]=0;VPa(B,2,f)|0}k[e>>2]=k[z>>2];pd(6,e|0)|0;if(!x){u=v;break}qRa(v);u=v;break}else D=A}else D=12;Hf(o|0)|0;C=D}else C=12;QRa(v)|0;k[d>>2]=k[z>>2];pd(6,d|0)|0;A=HSa()|0;k[A>>2]=C;u=0}else u=0;while(0);r=c;return u|0}function yRa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[12023]|0;if((i[b+75>>0]|0)!=(a|0)?(c=b+20|0,d=k[c>>2]|0,d>>>0<(k[b+16>>2]|0)>>>0):0){k[c>>2]=d+1;i[d>>0]=a;e=a&255}else e=tRa(b,a)|0;return e|0}function zRa(a){a=a|0;return IRa(a)|0}function ARa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d;f=xYa(240)|0;do if(f){k[e>>2]=k[c>>2];g=KQa(f,240,b,e)|0;if(g>>>0<240){h=AYa(f,g+1|0)|0;k[a>>2]=(h|0)!=0?h:f;i=g;break}yYa(f);if((g|0)>=0?(h=g+1|0,g=xYa(h)|0,k[a>>2]=g,(g|0)!=0):0)i=KQa(g,h,b,c)|0;else i=-1}else i=-1;while(0);r=d;return i|0}function BRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+80|0;e=d;k[a+36>>2]=60;if((k[a>>2]&64|0)==0?(k[e>>2]=k[a+60>>2],k[e+4>>2]=21505,k[e+8>>2]=d+12,(wf(54,e|0)|0)!=0):0)i[a+75>>0]=-1;e=SQa(a,b,c)|0;r=d;return e|0}function CRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+48|0;e=d+16|0;f=d;g=d+32|0;k[g>>2]=b;h=g+4|0;j=a+48|0;l=k[j>>2]|0;k[h>>2]=c-((l|0)!=0&1);m=a+44|0;k[g+8>>2]=k[m>>2];k[g+12>>2]=l;if(!(k[12082]|0)){k[e>>2]=k[a+60>>2];k[e+4>>2]=g;k[e+8>>2]=2;n=KVa(rc(145,e|0)|0)|0}else{ec(1530,a|0);k[f>>2]=k[a+60>>2];k[f+4>>2]=g;k[f+8>>2]=2;g=KVa(rc(145,f|0)|0)|0;Ed(0);n=g}if((n|0)>=1){g=k[h>>2]|0;if(n>>>0>g>>>0){h=k[m>>2]|0;m=a+4|0;k[m>>2]=h;f=h;k[a+8>>2]=f+(n-g);if(!(k[j>>2]|0))o=c;else{k[m>>2]=f+1;i[b+(c+-1)>>0]=i[f>>0]|0;o=c}}else o=n}else{k[a>>2]=k[a>>2]|n&48^16;k[a+8>>2]=0;k[a+4>>2]=0;o=n}r=d;return o|0}function DRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0.0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0;d=r;r=r+304|0;e=d+16|0;f=d+8|0;g=d+33|0;h=d;m=d+32|0;if((k[a+76>>2]|0)>-1)n=pRa(a)|0;else n=0;q=i[b>>0]|0;a:do if(q<<24>>24){s=a+4|0;t=a+100|0;u=a+108|0;v=a+8|0;w=g+10|0;x=g+33|0;y=f+4|0;z=g+46|0;A=g+94|0;B=q;C=0;D=b;E=0;F=0;G=0;b:while(1){c:do if(!(yIa(B&255)|0)){H=(i[D>>0]|0)==37;d:do if(H){I=D+1|0;J=i[I>>0]|0;e:do switch(J<<24>>24){case 37:{break d;break}case 42:{K=0;L=D+2|0;break}default:{N=(J&255)+-48|0;if(N>>>0<10?(i[D+2>>0]|0)==36:0){k[e>>2]=k[c>>2];O=N;while(1){N=(k[e>>2]|0)+(4-1)&~(4-1);P=k[N>>2]|0;k[e>>2]=N+4;if(O>>>0>1)O=O+-1|0;else{Q=P;break}}K=Q;L=D+3|0;break e}O=(k[c>>2]|0)+(4-1)&~(4-1);P=k[O>>2]|0;k[c>>2]=O+4;K=P;L=I}}while(0);I=i[L>>0]|0;J=I&255;if((J+-48|0)>>>0<10){P=J;J=L;O=0;while(1){N=(O*10|0)+-48+P|0;R=J+1|0;S=i[R>>0]|0;P=S&255;if((P+-48|0)>>>0>=10){T=S;U=R;V=N;break}else{J=R;O=N}}}else{T=I;U=L;V=0}if(T<<24>>24==109){O=U+1|0;W=i[O>>0]|0;X=(K|0)!=0&1;Y=O;Z=0;_=0}else{W=T;X=0;Y=U;Z=F;_=G}O=Y+1|0;switch(W&255|0){case 104:{J=(i[O>>0]|0)==104;$=J?Y+2|0:O;aa=J?-2:-1;break}case 108:{J=(i[O>>0]|0)==108;$=J?Y+2|0:O;aa=J?3:1;break}case 106:{$=O;aa=3;break}case 116:case 122:{$=O;aa=1;break}case 76:{$=O;aa=2;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{$=Y;aa=0;break}default:{ba=X;ca=C;da=Z;ea=_;fa=154;break b}}O=l[$>>0]|0;J=(O&47|0)==3;P=J?O|32:O;O=J?1:aa;switch(P|0){case 99:{ga=E;ha=(V|0)<1?1:V;break}case 91:{ga=E;ha=V;break}case 110:{if(!K){ia=C;ja=$;ka=E;la=Z;ma=_;break c}switch(O|0){case -2:{i[K>>0]=E;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}case -1:{j[K>>1]=E;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}case 0:{k[K>>2]=E;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}case 1:{k[K>>2]=E;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}case 3:{J=K;k[J>>2]=E;k[J+4>>2]=((E|0)<0)<<31>>31;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}default:{ia=C;ja=$;ka=E;la=Z;ma=_;break c}}break}default:{MVa(a,0);do{J=k[s>>2]|0;if(J>>>0<(k[t>>2]|0)>>>0){k[s>>2]=J+1;na=l[J>>0]|0}else na=NVa(a)|0}while((yIa(na)|0)!=0);if(!(k[t>>2]|0))oa=k[s>>2]|0;else{I=(k[s>>2]|0)+-1|0;k[s>>2]=I;oa=I}ga=(k[u>>2]|0)+E+oa-(k[v>>2]|0)|0;ha=V}}MVa(a,ha);I=k[s>>2]|0;J=k[t>>2]|0;if(I>>>0>>0){k[s>>2]=I+1;pa=J}else{if((NVa(a)|0)<0){ba=X;ca=C;da=Z;ea=_;fa=154;break b}pa=k[t>>2]|0}if(pa)k[s>>2]=(k[s>>2]|0)+-1;f:do switch(P|0){case 91:case 99:case 115:{J=(P|0)==99;g:do if((P&239|0)==99){Fyb(g|0,-1,257)|0;i[g>>0]=0;if((P|0)==115){i[x>>0]=0;i[w>>0]=0;i[w+1>>0]=0;i[w+2>>0]=0;i[w+3>>0]=0;i[w+4>>0]=0;qa=$}else qa=$}else{I=$+1|0;N=(i[I>>0]|0)==94;R=N&1;S=N?I:$;ra=N?$+2|0:I;Fyb(g|0,N&1|0,257)|0;i[g>>0]=0;switch(i[ra>>0]|0){case 45:{N=(R^1)&255;i[z>>0]=N;sa=N;ta=S+2|0;break}case 93:{N=(R^1)&255;i[A>>0]=N;sa=N;ta=S+2|0;break}default:{sa=(R^1)&255;ta=ra}}ra=ta;while(1){R=i[ra>>0]|0;h:do switch(R<<24>>24){case 0:{ba=X;ca=C;da=Z;ea=_;fa=154;break b;break}case 93:{qa=ra;break g;break}case 45:{S=ra+1|0;N=i[S>>0]|0;switch(N<<24>>24){case 93:case 0:{ua=45;va=ra;break h;break}default:{}}I=i[ra+-1>>0]|0;if((I&255)<(N&255)){wa=I&255;do{wa=wa+1|0;i[g+wa>>0]=sa;I=i[S>>0]|0}while((wa|0)<(I&255|0));ua=I;va=S}else{ua=N;va=S}break}default:{ua=R;va=ra}}while(0);i[g+((ua&255)+1)>>0]=sa;ra=va+1|0}}while(0);ra=J?ha+1|0:31;R=(O|0)==1;wa=(X|0)!=0;i:do if(R){if(wa){I=xYa(ra<<2)|0;if(!I){ba=X;ca=C;da=0;ea=I;fa=154;break b}else xa=I}else xa=K;k[f>>2]=0;k[y>>2]=0;I=0;ya=ra;za=xa;j:while(1){Aa=(za|0)==0;Ba=I;while(1){k:while(1){Ca=k[s>>2]|0;if(Ca>>>0<(k[t>>2]|0)>>>0){k[s>>2]=Ca+1;Da=l[Ca>>0]|0}else Da=NVa(a)|0;if(!(i[g+(Da+1)>>0]|0)){Ea=Ba;Fa=za;break j}i[m>>0]=Da;switch(uVa(h,m,1,f)|0){case -1:{ba=X;ca=C;da=0;ea=za;fa=154;break b;break}case -2:break;default:break k}}if(Aa)Ga=Ba;else{k[za+(Ba<<2)>>2]=k[h>>2];Ga=Ba+1|0}if(wa&(Ga|0)==(ya|0))break;else Ba=Ga}Ba=ya<<1|1;Aa=AYa(za,Ba<<2)|0;if(!Aa){ba=X;ca=C;da=0;ea=za;fa=154;break b}else{S=ya;ya=Ba;za=Aa;I=S}}if(!(vVa(f)|0)){ba=X;ca=C;da=0;ea=Fa;fa=154;break b}else{Ha=Ea;Ia=0;Ja=Fa}}else{if(wa){I=xYa(ra)|0;if(!I){ba=X;ca=C;da=0;ea=0;fa=154;break b}else{Ka=0;La=ra;Ma=I}while(1){I=Ka;do{za=k[s>>2]|0;if(za>>>0<(k[t>>2]|0)>>>0){k[s>>2]=za+1;Na=l[za>>0]|0}else Na=NVa(a)|0;if(!(i[g+(Na+1)>>0]|0)){Ha=I;Ia=Ma;Ja=0;break i}i[Ma+I>>0]=Na;I=I+1|0}while((I|0)!=(La|0));I=La<<1|1;za=AYa(Ma,I)|0;if(!za){ba=X;ca=C;da=Ma;ea=0;fa=154;break b}else{ya=La;La=I;Ma=za;Ka=ya}}}if(!K){ya=pa;while(1){za=k[s>>2]|0;if(za>>>0>>0){k[s>>2]=za+1;Oa=l[za>>0]|0}else Oa=NVa(a)|0;if(!(i[g+(Oa+1)>>0]|0)){Ha=0;Ia=0;Ja=0;break i}ya=k[t>>2]|0}}else{ya=pa;za=0;while(1){I=k[s>>2]|0;if(I>>>0>>0){k[s>>2]=I+1;Pa=l[I>>0]|0}else Pa=NVa(a)|0;if(!(i[g+(Pa+1)>>0]|0)){Ha=za;Ia=K;Ja=0;break i}i[K+za>>0]=Pa;ya=k[t>>2]|0;za=za+1|0}}}while(0);if(!(k[t>>2]|0))Qa=k[s>>2]|0;else{ra=(k[s>>2]|0)+-1|0;k[s>>2]=ra;Qa=ra}ra=Qa-(k[v>>2]|0)+(k[u>>2]|0)|0;if(!ra){Ra=X;Sa=C;Ta=Ia;Ua=Ja;break b}if(!((ra|0)==(ha|0)|J^1)){Ra=X;Sa=C;Ta=Ia;Ua=Ja;break b}do if(wa)if(R){k[K>>2]=Ja;break}else{k[K>>2]=Ia;break}while(0);if(J){Va=qa;Wa=Ia;Xa=Ja}else{if(Ja)k[Ja+(Ha<<2)>>2]=0;if(!Ia){Va=qa;Wa=0;Xa=Ja;break f}i[Ia+Ha>>0]=0;Va=qa;Wa=Ia;Xa=Ja}break}case 120:case 88:case 112:{Ya=16;fa=136;break}case 111:{Ya=8;fa=136;break}case 117:case 100:{Ya=10;fa=136;break}case 105:{Ya=0;fa=136;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{Za=+JVa(a,O,0);if((k[u>>2]|0)==((k[v>>2]|0)-(k[s>>2]|0)|0)){Ra=X;Sa=C;Ta=Z;Ua=_;break b}if(!K){Va=$;Wa=Z;Xa=_}else switch(O|0){case 0:{o[K>>2]=Za;Va=$;Wa=Z;Xa=_;break f;break}case 1:{p[K>>3]=Za;Va=$;Wa=Z;Xa=_;break f;break}case 2:{p[K>>3]=Za;Va=$;Wa=Z;Xa=_;break f;break}default:{Va=$;Wa=Z;Xa=_;break f}}break}default:{Va=$;Wa=Z;Xa=_}}while(0);l:do if((fa|0)==136){fa=0;R=LVa(a,Ya,0,-1,-1)|0;if((k[u>>2]|0)==((k[v>>2]|0)-(k[s>>2]|0)|0)){Ra=X;Sa=C;Ta=Z;Ua=_;break b}if((K|0)!=0&(P|0)==112){k[K>>2]=R;Va=$;Wa=Z;Xa=_;break}if(!K){Va=$;Wa=Z;Xa=_}else switch(O|0){case -2:{i[K>>0]=R;Va=$;Wa=Z;Xa=_;break l;break}case -1:{j[K>>1]=R;Va=$;Wa=Z;Xa=_;break l;break}case 0:{k[K>>2]=R;Va=$;Wa=Z;Xa=_;break l;break}case 1:{k[K>>2]=R;Va=$;Wa=Z;Xa=_;break l;break}case 3:{wa=K;k[wa>>2]=R;k[wa+4>>2]=M;Va=$;Wa=Z;Xa=_;break l;break}default:{Va=$;Wa=Z;Xa=_;break l}}}while(0);ia=((K|0)!=0&1)+C|0;ja=Va;ka=(k[u>>2]|0)+ga+(k[s>>2]|0)-(k[v>>2]|0)|0;la=Wa;ma=Xa;break c}while(0);O=D+(H&1)|0;MVa(a,0);P=k[s>>2]|0;if(P>>>0<(k[t>>2]|0)>>>0){k[s>>2]=P+1;_a=l[P>>0]|0}else _a=NVa(a)|0;if((_a|0)!=(l[O>>0]|0)){$a=_a;ab=C;bb=F;cb=G;fa=22;break b}ia=C;ja=O;ka=E+1|0;la=F;ma=G}else{O=D;while(1){P=O+1|0;if(!(yIa(l[P>>0]|0)|0)){db=O;break}else O=P}MVa(a,0);do{O=k[s>>2]|0;if(O>>>0<(k[t>>2]|0)>>>0){k[s>>2]=O+1;eb=l[O>>0]|0}else eb=NVa(a)|0}while((yIa(eb)|0)!=0);if(!(k[t>>2]|0))fb=k[s>>2]|0;else{O=(k[s>>2]|0)+-1|0;k[s>>2]=O;fb=O}ia=C;ja=db;ka=(k[u>>2]|0)+E+fb-(k[v>>2]|0)|0;la=F;ma=G}while(0);D=ja+1|0;B=i[D>>0]|0;if(!(B<<24>>24)){gb=ia;break a}else{C=ia;E=ka;F=la;G=ma}}if((fa|0)==22){if(k[t>>2]|0)k[s>>2]=(k[s>>2]|0)+-1;if((ab|0)!=0|($a|0)>-1){gb=ab;break}else{hb=0;ib=bb;jb=cb;fa=155}}else if((fa|0)==154)if(!ca){hb=ba;ib=da;jb=ea;fa=155}else{Ra=ba;Sa=ca;Ta=da;Ua=ea}if((fa|0)==155){Ra=hb;Sa=-1;Ta=ib;Ua=jb}if(!Ra)gb=Sa;else{yYa(Ta);yYa(Ua);gb=Sa}}else gb=0;while(0);if(n)qRa(a);r=d;return gb|0}function ERa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c+16|0;e=k[d>>2]|0;if(!e)if(!(CQa(c)|0)){f=k[d>>2]|0;g=5}else h=0;else{f=e;g=5}a:do if((g|0)==5){e=c+20|0;d=k[e>>2]|0;j=d;if((f-d|0)>>>0>>0){h=Xf[k[c+36>>2]&255](c,a,b)|0;break}b:do if((i[c+75>>0]|0)>-1){d=b;while(1){if(!d){l=b;m=a;n=j;o=0;break b}p=d+-1|0;if((i[a+p>>0]|0)==10){q=d;break}else d=p}if((Xf[k[c+36>>2]&255](c,a,q)|0)>>>0>>0){h=q;break a}l=b-q|0;m=a+q|0;n=k[e>>2]|0;o=q}else{l=b;m=a;n=j;o=0}while(0);Dyb(n|0,m|0,l|0)|0;k[e>>2]=(k[e>>2]|0)+l;h=o+l|0}while(0);return h|0}function FRa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=ia(c,b)|0;if((k[d+76>>2]|0)>-1){f=(pRa(d)|0)==0;g=ERa(a,e,d)|0;if(f)h=g;else{qRa(d);h=g}}else h=ERa(a,e,d)|0;if((h|0)==(e|0))i=c;else i=(h>>>0)/(b>>>0)|0;return i|0}function GRa(a){a=a|0;var b=0,c=0,d=0;if(mRa(a)|0){b=a+76|0;c=a+80|0;do{d=k[b>>2]|0;if(d)If(b|0,c|0,d|0,1)}while((mRa(a)|0)!=0)}return}function HRa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b;d=b+8|0;e=b+12|0;f=c;k[f>>2]=0;k[f+4>>2]=0;f=a+74|0;g=i[f>>0]|0;i[f>>0]=g+1|g;g=a+4|0;f=k[g>>2]|0;h=a+8|0;j=k[h>>2]|0;do if(f>>>0>>0){l=uVa(d,f,j-f|0,c)|0;if(l>>>0<4294967294){k[g>>2]=(k[g>>2]|0)+(((l|0)==0&1)+l);m=k[d>>2]|0;break}if((l|0)==-1){k[g>>2]=(k[g>>2]|0)+1;m=-1}else{n=-2;o=6}}else{n=-2;o=6}while(0);a:do if((o|0)==6){while(1){o=0;if((n|0)!=-2){o=13;break}f=k[g>>2]|0;if(f>>>0>=(k[h>>2]|0)>>>0){j=vRa(a)|0;i[e>>0]=j;if((j|0)<0)break}else{k[g>>2]=f+1;i[e>>0]=i[f>>0]|0}n=uVa(d,e,1,c)|0;if((n|0)==-1){m=-1;break a}else o=6}if((o|0)==13){m=k[d>>2]|0;break}if(!(vVa(c)|0)){f=HSa()|0;k[f>>2]=84;m=-1}else m=-1}while(0);r=b;return m|0}function IRa(a){a=a|0;var b=0,c=0,d=0;if((k[a+76>>2]|0)>-1){b=(pRa(a)|0)==0;c=HRa(a)|0;if(b)d=c;else{qRa(a);d=c}}else d=HRa(a)|0;return d|0}function JRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)d=a;else{if((k[c+76>>2]|0)>-1)e=pRa(c)|0;else e=0;f=b;b=a;while(1){f=f+-1|0;if(!f){g=b;break}h=HRa(c)|0;if((h|0)==-1){g=b;break}i=b+4|0;k[b>>2]=h;if((h|0)==10){g=i;break}else b=i}k[g>>2]=0;b=(k[c>>2]&32|0)==0?g:a;if(e)qRa(c);d=(b|0)==(a|0)?0:a}return d|0}function KRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+368|0;e=d+112|0;f=d;g=f;h=g+112|0;do{k[g>>2]=0;g=g+4|0}while((g|0)<(h|0));k[f+32>>2]=162;k[f+44>>2]=e;k[f+48>>2]=256;k[f+76>>2]=-1;k[f+84>>2]=a;a=dRa(f,b,c)|0;r=d;return a|0}function LRa(a){a=a|0;var b=0,c=0,d=0,e=0;b=(VLa(a,43)|0)==0;c=i[a>>0]|0;d=b?c<<24>>24!=114&1:2;b=(VLa(a,120)|0)==0;e=b?d:d|128;d=(VLa(a,101)|0)==0;a=d?e:e|524288;e=c<<24>>24==114?a:a|64;a=c<<24>>24==119?e|512:e;return (c<<24>>24==97?a|1024:a)|0}function MRa(a){a=a|0;var b=0;if((k[a+76>>2]|0)>-1){b=(pRa(a)|0)==0;k[a>>2]=k[a>>2]&-49;if(!b)qRa(a)}else k[a>>2]=k[a>>2]&-49;return}function NRa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=bSa(a,d)|0;r=c;return b|0}function ORa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=hRa(a,b,e)|0;r=d;return c|0}function PRa(a,b){a=a|0;b=b|0;return XRa(a,k[b>>2]|0,0)|0}function QRa(a){a=a|0;var b=0,c=0,d=0,e=0;b=(k[a>>2]&1|0)!=0;if(!b){nd(48356);c=k[a+52>>2]|0;d=a+56|0;if(c)k[c+56>>2]=k[d>>2];e=k[d>>2]|0;if(e)k[e+52>>2]=c;if((k[12088]|0)==(a|0))k[12088]=e;xf(48356)}e=ZRa(a)|0;c=Vf[k[a+12>>2]&1023](a)|0|e;e=k[a+92>>2]|0;if(e)yYa(e);if(!b)yYa(a);return c|0}function RRa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=b+74|0;f=i[e>>0]|0;i[e>>0]=f+1|f;do if(a>>>0<128){if((i[b+75>>0]|0)!=(a|0)?(f=b+20|0,e=k[f>>2]|0,e>>>0<(k[b+16>>2]|0)>>>0):0){k[f>>2]=e+1;i[e>>0]=a;g=a&255;break}g=tRa(b,a)|0}else{e=b+20|0;f=k[e>>2]|0;if((f+4|0)>>>0<(k[b+16>>2]|0)>>>0){h=DVa(f,a)|0;if((h|0)<0){g=-1;break}k[e>>2]=(k[e>>2]|0)+h;g=a;break}h=DVa(d,a)|0;if((h|0)>=0?(ERa(d,h,b)|0)>>>0>=h>>>0:0){g=a;break}g=-1}while(0);r=c;return g|0}function SRa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if((k[b+76>>2]|0)>-1){c=(pRa(b)|0)==0;d=RRa(a,b)|0;if(c)e=d;else{qRa(b);e=d}}else e=RRa(a,b)|0;return e|0}function TRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+112|0;e=d;f=e;g=f+112|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));k[e+32>>2]=163;k[e+44>>2]=a;k[e+76>>2]=-1;k[e+84>>2]=a;a=DRa(e,b,c)|0;r=d;return a|0}function URa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+32|0;e=d+16|0;f=d;g=LRa(b)|0;if((k[c+76>>2]|0)>-1)h=pRa(c)|0;else h=0;ZRa(c)|0;do if(!a){i=c+60|0;if(g&524288){k[f>>2]=k[i>>2];k[f+4>>2]=2;k[f+8>>2]=1;qb(221,f|0)|0}k[e>>2]=k[i>>2];k[e+4>>2]=4;k[e+8>>2]=g&-524481;if((KVa(qb(221,e|0)|0)|0)<0)j=15;else j=12}else{i=nQa(a,b)|0;if(!i)j=15;else{l=i+60|0;m=k[l>>2]|0;n=k[c+60>>2]|0;if((m|0)!=(n|0)){if((DUa(m,n,g&524288)|0)<0){QRa(i)|0;j=15;break}}else k[l>>2]=-1;k[c>>2]=k[c>>2]&1|k[i>>2];k[c+32>>2]=k[i+32>>2];k[c+36>>2]=k[i+36>>2];k[c+40>>2]=k[i+40>>2];k[c+12>>2]=k[i+12>>2];QRa(i)|0;j=12}}while(0);if((j|0)==12)if(!h)o=c;else{qRa(c);o=c}else if((j|0)==15){QRa(c)|0;o=0}r=d;return o|0}function VRa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=lRa(a,d)|0;r=c;return b|0}function WRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if((c|0)==1)d=b-(k[a+8>>2]|0)+(k[a+4>>2]|0)|0;else d=b;b=a+20|0;e=a+28|0;if((k[b>>2]|0)>>>0>(k[e>>2]|0)>>>0?(Xf[k[a+36>>2]&255](a,0,0)|0,(k[b>>2]|0)==0):0)f=-1;else{k[a+16>>2]=0;k[e>>2]=0;k[b>>2]=0;if((Xf[k[a+40>>2]&255](a,d,c)|0)<0)f=-1;else{k[a+8>>2]=0;k[a+4>>2]=0;k[a>>2]=k[a>>2]&-17;f=0}}return f|0}function XRa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if((k[a+76>>2]|0)>-1){d=(pRa(a)|0)==0;e=WRa(a,b,c)|0;if(d)f=e;else{qRa(a);f=e}}else f=WRa(a,b,c)|0;return f|0}function YRa(a,b,c){a=a|0;b=b|0;c=c|0;return XRa(a,b,c)|0}function ZRa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;do if(a){if((k[a+76>>2]|0)<=-1){b=HXa(a)|0;break}c=(pRa(a)|0)==0;d=HXa(a)|0;if(c)b=d;else{qRa(a);b=d}}else{if(!(k[12024]|0))e=0;else e=ZRa(k[12024]|0)|0;nd(48356);d=k[12088]|0;if(!d)f=e;else{c=d;d=e;while(1){if((k[c+76>>2]|0)>-1)g=pRa(c)|0;else g=0;if((k[c+20>>2]|0)>>>0>(k[c+28>>2]|0)>>>0)h=HXa(c)|0|d;else h=d;if(g)qRa(c);c=k[c+56>>2]|0;if(!c){f=h;break}else d=h}}xf(48356);b=f}while(0);return b|0}function _Ra(a){a=a|0;var b=0,c=0,d=0;if((k[a+76>>2]|0)>-1){b=(pRa(a)|0)==0;c=(k[a>>2]|0)>>>4&1;if(b)d=c;else d=c}else d=(k[a>>2]|0)>>>4&1;return d|0}function $Ra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+112|0;d=c+40|0;e=c+24|0;f=c+16|0;g=c;h=c+52|0;j=i[b>>0]|0;if(_Ma(317691,j<<24>>24,4)|0){l=xYa(1144)|0;if(!l)m=0;else{n=l;o=n+112|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));if(!(VLa(b,43)|0))k[l>>2]=j<<24>>24==114?8:4;if(!(VLa(b,101)|0))p=j;else{k[g>>2]=a;k[g+4>>2]=2;k[g+8>>2]=1;qb(221,g|0)|0;p=i[b>>0]|0}if(p<<24>>24==97){k[f>>2]=a;k[f+4>>2]=3;p=qb(221,f|0)|0;if(!(p&1024)){k[e>>2]=a;k[e+4>>2]=4;k[e+8>>2]=p|1024;qb(221,e|0)|0}e=k[l>>2]|128;k[l>>2]=e;q=e}else q=k[l>>2]|0;k[l+60>>2]=a;k[l+44>>2]=l+120;k[l+48>>2]=1024;e=l+75|0;i[e>>0]=-1;if((q&8|0)==0?(k[d>>2]=a,k[d+4>>2]=21505,k[d+8>>2]=h,(wf(54,d|0)|0)==0):0)i[e>>0]=10;k[l+32>>2]=61;k[l+36>>2]=60;k[l+40>>2]=59;k[l+12>>2]=419;if(!(k[12083]|0))k[l+76>>2]=-1;nd(48356);e=k[12088]|0;k[l+56>>2]=e;if(e)k[e+52>>2]=l;k[12088]=l;xf(48356);m=l}}else{l=HSa()|0;k[l>>2]=22;m=0}r=c;return m|0}function aSa(a,b){a=a|0;b=b|0;return DRa(k[12027]|0,a,b)|0}function bSa(a,b){a=a|0;b=b|0;return dRa(k[12027]|0,a,b)|0}function cSa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=DRa(a,b,e)|0;r=d;return c|0}function dSa(){ZRa(0)|0;return}function eSa(a,b){a=a|0;b=b|0;return 0}function fSa(a){a=a|0;var b=0;if(!(k[a>>2]&4))b=(k[a+16>>2]|0)!=0;else b=1;return b&1|0}function gSa(a){a=a|0;var b=0;if(!(k[a>>2]&8))b=(k[a+8>>2]|0)!=0;else b=1;return b&1|0}function hSa(a){a=a|0;return (k[a>>2]|0)>>>2&1^1|0}function iSa(a){a=a|0;return (k[a>>2]|0)>>>3&1^1|0}function jSa(a){a=a|0;return (l[a+75>>0]|0)>>>7&255^1|0}function kSa(a){a=a|0;return k[a+48>>2]|0}function lSa(a){a=a|0;var b=0;if(!(k[a+16>>2]|0))b=0;else b=(k[a+20>>2]|0)-(k[a+28>>2]|0)|0;return b|0}function mSa(a){a=a|0;k[a+16>>2]=0;k[a+28>>2]=0;k[a+20>>2]=0;k[a+8>>2]=0;k[a+4>>2]=0;return 0}function nSa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+48|0;d=c;e=c+32|0;f=c+24|0;g=aVa()|0;h=(a|0)==0?317735:a;a=(b|0)==0?317695:b;if((wUa(h,7)|0)==0?(b=RLa(h)|0,i=b+44+(RLa(a)|0)|0,b=xYa(i)|0,k[e>>2]=b,(b|0)!=0):0){b=f+4|0;j=e;l=0;while(1){Gb(0,f|0)|0;m=k[e>>2]|0;n=k[b>>2]^j^m;o=k[12428]|0;k[12428]=o+1;k[d>>2]=h;k[d+4>>2]=a;k[d+8>>2]=g;k[d+12>>2]=o;k[d+16>>2]=n;uRa(m,i,317700,d)|0;if(wUa(k[e>>2]|0,0)|0){p=l;break}m=l+1|0;if((l|0)<100)l=m;else{p=m;break}}l=k[e>>2]|0;if((p|0)>99){yYa(l);q=0}else q=l}else q=0;r=c;return q|0}function oSa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;a:do if((a|0)!=0&(b|0)!=0){if(!(k[a>>2]|0))k[b>>2]=0;if((k[d+76>>2]|0)>-1)e=pRa(d)|0;else e=0;f=d+4|0;g=d+8|0;h=0;while(1){j=k[f>>2]|0;m=j;n=(k[g>>2]|0)-m|0;o=_Ma(j,c,n)|0;p=(o|0)!=0;q=p?1-m+o|0:n;n=q+h|0;if(n>>>0<(k[b>>2]|0)>>>0){r=k[a>>2]|0;s=j}else{if(q>>>0>=(2147483647-h|0)>>>0){t=25;break}j=n+2|0;o=j<<(j>>>0<1073741823&1);k[b>>2]=o;m=AYa(k[a>>2]|0,o)|0;if(!m){k[b>>2]=j;o=AYa(k[a>>2]|0,j)|0;if(!o){t=25;break}else u=o}else u=m;k[a>>2]=u;r=u;s=k[f>>2]|0}Dyb(r+h|0,s|0,q|0)|0;m=(k[f>>2]|0)+q|0;k[f>>2]=m;if(p){v=n;break}if(m>>>0>=(k[g>>2]|0)>>>0){p=vRa(d)|0;if((p|0)==-1){w=n;t=18;break}else x=p}else{k[f>>2]=m+1;x=l[m>>0]|0}m=n+1|0;i[(k[a>>2]|0)+n>>0]=x;if((x<<24>>24|0)==(c|0)){v=m;break}else h=m}if((t|0)==25){if(e)qRa(d);h=HSa()|0;k[h>>2]=12;y=-1;break}do if((t|0)==18){if((w|0)!=0?(k[d>>2]&16|0)!=0:0){v=w;break}if(!e){y=-1;break a}qRa(d);y=-1;break a}while(0);i[(k[a>>2]|0)+v>>0]=0;if(!e)y=v;else{qRa(d);y=v}}else{h=HSa()|0;k[h>>2]=22;y=-1}while(0);return y|0}function pSa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+32|0;c=b;d=b+16|0;e=k[a+64>>2]|0;QRa(a)|0;do{k[c>>2]=e;k[c+4>>2]=d;k[c+8>>2]=0;k[c+12>>2]=0;a=bd(114,c|0)|0}while((a|0)==-4);f=a;if((f|0)<0)g=KVa(f)|0;else g=k[d>>2]|0;r=b;return g|0}function qSa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b+8|0;d=b;k[d>>2]=a;e=KVa(jd(10,d|0)|0)|0;if(e){d=HSa()|0;if((k[d>>2]|0)==21){k[c>>2]=a;f=KVa(Te(40,c|0)|0)|0}else f=e}else f=0;r=b;return f|0}function rSa(){return VQa(k[12027]|0)|0}function sSa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=aSa(a,d)|0;r=c;return b|0}function tSa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;do if((a|0)!=-1){e=a>>>0<128;if(!e){f=DVa(d,a)|0;if((f|0)<0){g=-1;break}else h=f}else h=1;if((k[b+76>>2]|0)>-1)j=pRa(b)|0;else j=0;f=b+74|0;l=i[f>>0]|0;i[f>>0]=l+1|l;if(!((k[b+8>>2]|0)==0?(NQa(b)|0)!=0:0))m=8;if((m|0)==8?(l=b+4|0,f=k[l>>2]|0,f>>>0>=((k[b+44>>2]|0)+-8+h|0)>>>0):0){if(e){e=f+-1|0;k[l>>2]=e;i[e>>0]=a}else{e=f+(0-h)|0;k[l>>2]=e;Dyb(e|0,d|0,h|0)|0}k[b>>2]=k[b>>2]&-17;if(!j){g=a;break}qRa(b);g=a;break}if(j){qRa(b);g=-1}else g=-1}else g=-1;while(0);r=c;return g|0}function uSa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;d=(fRa(c,4,1,a)|0)!=0;r=b;return (d?k[c>>2]|0:-1)|0}function vSa(a){a=a|0;var b=0,c=0,d=0;if(!(k[a>>2]&128))b=1;else b=(k[a+20>>2]|0)>>>0>(k[a+28>>2]|0)>>>0?2:1;c=Xf[k[a+40>>2]&255](a,0,b)|0;if((c|0)<0)d=c;else d=c-(k[a+8>>2]|0)+(k[a+4>>2]|0)+(k[a+20>>2]|0)-(k[a+28>>2]|0)|0;return d|0}function wSa(a){a=a|0;var b=0,c=0,d=0;if((k[a+76>>2]|0)>-1){b=(pRa(a)|0)==0;c=vSa(a)|0;if(b)d=c;else d=c}else d=vSa(a)|0;return d|0}function xSa(a){a=a|0;return wSa(a)|0}function ySa(a){a=a|0;return jQa(a,k[12023]|0)|0}function zSa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=ARa(a,b,e)|0;r=d;return c|0}function ASa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=r;r=r+384|0;f=e+8|0;g=e+120|0;h=e;k[h>>2]=a;k[h+4>>2]=b+-1;a=f;j=a+112|0;do{k[a>>2]=0;a=a+4|0}while((a|0)<(j|0));i[f+75>>0]=-1;k[f+36>>2]=164;k[f+48>>2]=256;k[f+44>>2]=g;k[f+76>>2]=-1;k[f+84>>2]=h;do if(b)if((b|0)<0){h=HSa()|0;k[h>>2]=75;l=-1;break}else{h=cRa(f,c,d)|0;IXa(f,0,0)|0;l=h>>>0>=b>>>0?-1:h;break}else l=-1;while(0);r=e;return l|0}function BSa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+64|0;c=b+32|0;d=b+24|0;e=b+8|0;f=b;g=b+40|0;h=b+48|0;k[g>>2]=a;if(!a)k[g>>2]=317715;k[f>>2]=317735;k[f+4>>2]=7;if(!(xe(33,f|0)|0)){f=h+4|0;a=g;i=0;while(1){k[e>>2]=0;k[e+4>>2]=h;k[e+8>>2]=0;Kd(265,e|0)|0;j=k[g>>2]|0;l=k[f>>2]^a^j;m=k[12429]|0;k[12429]=m+1;k[d>>2]=m;k[d+4>>2]=l;uRa(j,20,317740,d)|0;k[c>>2]=k[g>>2];k[c+4>>2]=0;if(xe(33,c|0)|0){n=i;break}j=i+1|0;if((i|0)<100)i=j;else{n=j;break}}o=(n|0)>99?0:k[g>>2]|0}else o=0;r=b;return o|0}function CSa(a){a=a|0;return Vf[k[a+12>>2]&1023](a)|0}function DSa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if((i[b+75>>0]|0)!=(a|0)?(c=b+20|0,d=k[c>>2]|0,d>>>0<(k[b+16>>2]|0)>>>0):0){k[c>>2]=d+1;i[d>>0]=a;e=a&255}else e=tRa(b,a)|0;return e|0}function ESa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a+84|0;e=k[d>>2]|0;f=c+256|0;g=_Ma(e,0,f)|0;h=(g|0)==0?f:g-e|0;g=h>>>0>>0?h:c;Dyb(b|0,e|0,g|0)|0;k[a+4>>2]=e+g;b=e+h|0;k[a+8>>2]=b;k[d>>2]=b;return g|0}function FSa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=wQa(a,b,e)|0;r=d;return c|0}function GSa(a,b){a=a|0;b=b|0;return (FRa(a,RLa(a)|0,1,b)|0)+-1|0}function HSa(){var a=0,b=0;if(!(k[12082]|0))a=49720;else{b=(pf()|0)+60|0;a=k[b>>2]|0}return a|0}function ISa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=0;while(1){if((l[317752+b>>0]|0)==(a|0)){c=b;d=2;break}b=b+1|0;if((b|0)==87){e=87;f=317840;d=5;break}}if((d|0)==2)if(!c)g=317840;else{e=c;f=317840;d=5}if((d|0)==5)while(1){d=0;c=f;while(1){b=c+1|0;if(!(i[c>>0]|0)){h=b;break}else c=b}e=e+-1|0;if(!e){g=h;break}else{f=h;d=5}}return g|0}function JSa(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(b<<24>>24){c=a;d=b;do{b=(vIa(d<<24>>24)|0)&255;i[c>>0]=b;c=c+1|0;d=i[c>>0]|0}while(d<<24>>24!=0)}return a|0}function KSa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=iOa(a,b,c)|0;return d|0}function LSa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=jOa(a,b,c)|0;return d|0}function MSa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return kOa(a,b,c)|0}function NSa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return lOa(a,b,c)|0}function OSa(a,b){a=a|0;b=b|0;Sf[a&2047](b);return}function PSa(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(b<<24>>24){c=a;d=b;do{b=(BIa(d<<24>>24)|0)&255;i[c>>0]=b;c=c+1|0;d=i[c>>0]|0}while(d<<24>>24!=0)}return a|0}function QSa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=HSa()|0;e=k[d>>2]|0;f=a+16|0;nd(f|0);k[d>>2]=0;g=USa(a)|0;a=k[d>>2]|0;if(!a){k[d>>2]=e;if(!g)h=0;else{Dyb(b|0,g|0,m[g+8>>1]|0|0)|0;h=b}xf(f|0);k[c>>2]=h;i=0}else{xf(f|0);i=a}return i|0}function RSa(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+16|0;nd(c|0);d=gVa(k[a>>2]|0,b,0)|0;k[a+4>>2]=d;k[a+12>>2]=0;k[a+8>>2]=0;xf(c|0);return}function SSa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(tb(220,e|0)|0)|0;r=d;return c|0}function TSa(a){a=a|0;return k[a+4>>2]|0}function USa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=r;r=r+16|0;c=b;d=a+8|0;e=k[d>>2]|0;f=a+12|0;do if((e|0)>=(k[f>>2]|0)){k[c>>2]=k[a>>2];k[c+4>>2]=a+24;k[c+8>>2]=2048;g=tb(220,c|0)|0;if((g|0)>=1){k[f>>2]=g;k[d>>2]=0;h=0;i=6;break}if((g|0)<0&(g|0)!=-2){j=HSa()|0;k[j>>2]=0-g;l=0}else l=0}else{h=e;i=6}while(0);if((i|0)==6){i=a+24+h|0;k[d>>2]=(m[i+8>>1]|0)+h;k[a+4>>2]=k[i+4>>2];l=i}r=b;return l|0}function VSa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+80|0;c=b;d=b+4|0;do if((ATa(a,d)|0)>=0){if((k[d+12>>2]&61440|0)!=16384){e=HSa()|0;k[e>>2]=20;f=0;break}e=zYa(1,2072)|0;if(e){k[c>>2]=1;VPa(a,2,c)|0;k[e>>2]=a;f=e}else f=0}else f=0;while(0);r=b;return f|0}function WSa(a){a=a|0;var b=0;b=a+16|0;nd(b|0);gVa(k[a>>2]|0,0,0)|0;k[a+12>>2]=0;k[a+8>>2]=0;k[a+4>>2]=0;xf(b|0);return}function XSa(a){a=a|0;return k[a>>2]|0}function YSa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=_Sa(a)|0;a=HSa()|0;f=k[a>>2]|0;do if(e){g=(c|0)==0;h=0;i=0;j=0;a:while(1){while(1){k[a>>2]=0;l=USa(e)|0;if(!l){n=h;o=j;break a}if(g){p=l;break}if(Vf[c&1023](l)|0){p=l;break}}if(h>>>0>>0){q=i;r=j}else{l=i<<1|1;if(l>>>0>1073741823){n=h;o=j;break}s=AYa(j,l<<2)|0;if(!s){n=h;o=j;break}q=l;r=s}s=p+8|0;l=xYa(m[s>>1]|0)|0;k[r+(h<<2)>>2]=l;if(!l){n=h;o=r;break}Dyb(l|0,p|0,m[s>>1]|0|0)|0;h=h+1|0;i=q;j=r}$Sa(e)|0;if(!(k[a>>2]|0)){k[a>>2]=f;if(d)YNa(o,n,4,d);k[b>>2]=o;t=n;break}else{if(!((o|0)==0|(n|0)==0)){j=n;do{j=j+-1|0;yYa(k[o+(j<<2)>>2]|0)}while((j|0)!=0)}yYa(o);t=-1;break}}else t=-1;while(0);return t|0}function ZSa(a,b){a=a|0;b=b|0;return zLa((k[a>>2]|0)+11|0,(k[b>>2]|0)+11|0)|0}function _Sa(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+8|0;d=WPa(a,589824,b)|0;do if((d|0)>=0){a=zYa(1,2072)|0;if(!a){k[c>>2]=d;pd(6,c|0)|0;e=0;break}else{k[a>>2]=d;e=a;break}}else e=0;while(0);r=b;return e|0}function $Sa(a){a=a|0;var b=0;b=$Ta(k[a>>2]|0)|0;yYa(a);return b|0}function aTa(a,b){a=a|0;b=b|0;return NMa((k[a>>2]|0)+11|0,(k[b>>2]|0)+11|0)|0}function bTa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=b;f=e+64|0;do{k[e>>2]=0;e=e+4|0}while((e|0)<(f|0));k[d>>2]=a;k[d+4>>2]=64;k[d+8>>2]=b;b=KVa(Hd(268,d|0)|0)|0;r=c;return b|0}function cTa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=b;f=e+64|0;do{k[e>>2]=0;e=e+4|0}while((e|0)<(f|0));k[d>>2]=a;k[d+4>>2]=64;k[d+8>>2]=b;b=KVa(Gd(269,d|0)|0)|0;r=c;return b|0}function dTa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+80|0;d=c;e=c+16|0;f=e;g=f+64|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));k[d>>2]=a;k[d+4>>2]=64;k[d+8>>2]=e;if((KVa(Hd(268,d|0)|0)|0)<0)h=-1;else{d=b+4|0;a=e+4|0;f=b;g=f+72|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=k[a>>2]|0;k[b>>2]=f;a=k[e+40>>2]|0;k[d>>2]=(a|0)==0?f:a;k[b+8>>2]=k[e+8>>2];k[b+12>>2]=k[e+12>>2];k[b+16>>2]=k[e+16>>2];k[b+20>>2]=k[e+20>>2];a=k[e+24>>2]|0;k[b+24>>2]=a;k[b+28>>2]=a;k[b+32>>2]=k[e+28>>2];k[b+40>>2]=k[e+44>>2];k[b+44>>2]=k[e+36>>2];h=0}r=c;return h|0}function eTa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+80|0;d=c;e=c+16|0;f=e;g=f+64|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));k[d>>2]=a;k[d+4>>2]=64;k[d+8>>2]=e;if((KVa(Gd(269,d|0)|0)|0)<0)h=-1;else{d=b+4|0;a=e+4|0;f=b;g=f+72|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=k[a>>2]|0;k[b>>2]=f;a=k[e+40>>2]|0;k[d>>2]=(a|0)==0?f:a;k[b+8>>2]=k[e+8>>2];k[b+12>>2]=k[e+12>>2];k[b+16>>2]=k[e+16>>2];k[b+20>>2]=k[e+20>>2];a=k[e+24>>2]|0;k[b+24>>2]=a;k[b+28>>2]=a;k[b+32>>2]=k[e+28>>2];k[b+40>>2]=k[e+44>>2];k[b+44>>2]=k[e+36>>2];h=0}r=c;return h|0}function fTa(a,b,c){a=a|0;b=b|0;c=c|0;return gTa(b,c)|0}function gTa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(ee(196,d|0)|0)|0;r=c;return b|0}function hTa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(Ae(39,d|0)|0)|0;r=c;return b|0}function iTa(a,b,c){a=a|0;b=b|0;c=c|0;return vTa(b,c)|0}function jTa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(Zd(299,e|0)|0)|0;r=d;return c|0}function kTa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=d;d=KVa(od(320,f|0)|0)|0;r=e;return d|0}function lTa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+48|0;d=c+40|0;e=c+8|0;f=c;k[f>>2]=a;k[f+4>>2]=b;g=df(94,f|0)|0;if((g|0)==-9?(k[e>>2]=a,k[e+4>>2]=1,(qb(221,e|0)|0)>=0):0){IVa(e,a);k[d>>2]=e;k[d+4>>2]=b;h=KVa(Qd(15,d|0)|0)|0}else h=KVa(g)|0;r=c;return h|0}function mTa(a,b,c){a=a|0;b=b|0;c=c|0;return ATa(b,c)|0}function nTa(a,b){a=a|0;b=b|0;return zTa(-100,a,b,256)|0}function oTa(a,b){a=a|0;b=b|0;return kTa(a,0,b,0)|0}function pTa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(Wd(296,e|0)|0)|0;r=d;return c|0}function qTa(a,b,c){a=a|0;b=b|0;c=c|0;return wTa(a,b,c|4096,0)|0}function rTa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(Qd(15,d|0)|0)|0;r=c;return b|0}function sTa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(gd(14,e|0)|0)|0;r=d;return c|0}function tTa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return uTa(b,c,d,e)|0}function uTa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=d;d=KVa(lc(300,f|0)|0)|0;r=e;return d|0}function vTa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(fe(195,d|0)|0)|0;r=c;return b|0}function wTa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=d;d=KVa(bf(297,f|0)|0)|0;r=e;return d|0}function xTa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(zb(60,c|0)|0)|0;r=b;return a|0}function yTa(a,b){a=a|0;b=b|0;return sTa(a,b|4096,0)|0}function zTa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+192|0;f=e+80|0;g=e+64|0;h=e+48|0;i=e+32|0;j=e+16|0;l=e;m=e+84|0;n=e+160|0;switch(d|0){case 0:{k[l>>2]=a;k[l+4>>2]=b;k[l+8>>2]=c;k[l+12>>2]=0;o=KVa(fc(306,l|0)|0)|0;break}case 256:{k[j>>2]=a;k[j+4>>2]=b;k[j+8>>2]=m;k[j+12>>2]=256;l=lc(300,j|0)|0;do if(!l){j=m+12|0;if((k[j>>2]&61440|0)==40960){p=KVa(-95)|0;break}k[i>>2]=a;k[i+4>>2]=b;k[i+8>>2]=2752768;d=Vd(295,i|0)|0;if((d|0)<0)if((d|0)==-40){p=KVa(-95)|0;break}else{p=KVa(d)|0;break}IVa(n,d);k[h>>2]=-100;k[h+4>>2]=n;k[h+8>>2]=m;k[h+12>>2]=0;q=lc(300,h|0)|0;if(!q)if((k[j>>2]&61440|0)==40960)s=-95;else{k[g>>2]=-100;k[g+4>>2]=n;k[g+8>>2]=c;s=fc(306,g|0)|0}else s=q;k[f>>2]=d;pd(6,f|0)|0;p=KVa(s)|0}else p=KVa(l)|0;while(0);o=p;break}default:o=KVa(-22)|0}r=e;return o|0}function ATa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+48|0;d=c+40|0;e=c+8|0;f=c;k[f>>2]=a;k[f+4>>2]=b;g=de(197,f|0)|0;if((g|0)==-9?(k[e>>2]=a,k[e+4>>2]=1,(qb(221,e|0)|0)>=0):0){IVa(e,a);k[d>>2]=e;k[d+4>>2]=b;h=KVa(fe(195,d|0)|0)|0}else h=KVa(g)|0;r=c;return h|0}function BTa(a,b){a=a|0;b=b|0;return 0}function CTa(a){a=a|0;var b=0;if(!(a&-3073))b=KTa(a)|0;else b=-1;return b|0}function DTa(a){a=a|0;return 0}function ETa(a,b){a=a|0;b=b|0;var c=0;c=(ITa(b)|0)&65535;j[a>>1]=c;return 0}function FTa(a){a=a|0;return 0}function GTa(a){a=a|0;return 0}function HTa(a){a=a|0;return 0}function ITa(a){a=a|0;return 0}function JTa(){return 0}function KTa(a){a=a|0;return 0}function LTa(a){a=a|0;return 0}function MTa(a){a=a|0;return 0}function NTa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0;d=r;r=r+384|0;e=d+288|0;f=d+216|0;g=d+144|0;h=d+72|0;j=d;m=JXa(a,b,c,16)|0;c=e;a=319644;n=c+30|0;do{i[c>>0]=i[a>>0]|0;c=c+1|0;a=a+1|0}while((c|0)<(n|0));a=(m|0)!=0;if(a)i[e+2>>0]=i[b+2>>0]|0;b=e+30|0;c=b;n=c+62|0;do{i[c>>0]=85;c=c+1|0}while((c|0)<(n|0));i[e+92>>0]=0;if((JXa(319674,e,b,1)|0)==(b|0)?(ZLa(b,e,29)|0)==0:0)o=(ZLa(e+59|0,319684+(((l[e+2>>0]|0)&1)*34|0)|0,34)|0)==0;else o=0;KXa(319752,f,g,2);KXa(319752,h,j,4);e=k[g>>2]|0;k[g>>2]=e^65536;if((o&(e|0)==-610444868?(k[h+68>>2]|0)==859059456:0)?(ZLa(f,h,72)|0)==0:0)p=(ZLa(g,j,72)|0)==0;else p=0;r=d;return (a&p?m:329972)|0}function OTa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+128|0;e=d;f=LXa(a,b,c)|0;if((f|0)!=0&(LXa(319764,319782,e)|0)==(e|0)){c=(ZLa(e,319812,73)|0)==0;g=c?f:329972}else g=329972;r=d;return g|0}function PTa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0;c=(l[a+2>>0]|0)<<8|(l[a+3>>0]|0)|(l[a+1>>0]|0)<<16|(l[a>>0]|0)<<24;d=(l[a+6>>0]|0)<<8|(l[a+7>>0]|0)|(l[a+5>>0]|0)<<16|(l[a+4>>0]|0)<<24;a=0;e=28;f=0;g=0;while(1){h=a<<1;i=c>>>e&15;j=k[49724+(a<<6)+(i<<2)>>2]|f|k[49724+(a+4<<6)+((d>>>e&15)<<2)>>2];m=e+-4|0;n=k[50236+(h<<6)+(i<<2)>>2]|g|k[50236+((h|1)<<6)+((c>>>m&15)<<2)>>2]|k[50236+(a+8<<6)+((d>>>m&15)<<2)>>2];a=a+1|0;if((a|0)==4){o=j;p=n;break}else{e=e+-8|0;f=j;g=n}}g=0;f=0;do{f=(l[319885+g>>0]|0)+f|0;e=28-f|0;a=o>>>e|o<>>e|p<>>c&7)<<2)>>2]|n|k[51260+(e<<6)+((a>>>m&15)<<2)>>2];i=k[51132+(e<<5)+((d>>>c&7)<<2)>>2]|j|k[51516+(e<<6)+((d>>>m&15)<<2)>>2];e=e+1|0;if((e|0)==4){q=h;r=i;break}else{c=c+-7|0;n=h;j=i}}k[b+(g<<2)>>2]=q;k[b+64+(g<<2)>>2]=r;g=g+1|0}while((g|0)!=16);return}function QTa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;if(!(b|a)){h=0;i=0}else{j=0;l=28;m=0;n=0;while(1){o=a>>>l&15;p=b>>>l&15;q=j+8|0;r=k[51772+(j<<6)+(o<<2)>>2]|m|k[51772+(q<<6)+(p<<2)>>2];s=k[52796+(j<<6)+(o<<2)>>2]|n|k[52796+(q<<6)+(p<<2)>>2];j=j+1|0;if((j|0)==8){h=r;i=s;break}else{l=l+-4|0;m=r;n=s}}}if(!e){t=h;u=i}else{n=g+64|0;m=e;e=h;h=i;while(1){i=g;l=n;j=e;b=h;a=16;while(1){a=a+-1|0;s=b<<23&8388608|b>>>9&8126464|b>>>11&258048|b>>>13&4032|b>>>15&63;r=b<<5&258048|b>>>31|b<<7&16515072|b<<3&4032|b<<1&62;p=(s^r)&f;q=p^s^k[i>>2];s=p^r^k[l>>2];r=(k[54076+((q>>>12&63)<<2)>>2]|k[53820+(q>>>18<<2)>>2]|k[54332+((q>>>6&63)<<2)>>2]|k[54588+((q&63)<<2)>>2]|k[54844+(s>>>18<<2)>>2]|k[55100+((s>>>12&63)<<2)>>2]|k[55356+((s>>>6&63)<<2)>>2]|k[55612+((s&63)<<2)>>2])^j;if(!a){v=r;w=b;break}else{s=b;i=i+4|0;l=l+4|0;b=r;j=s}}m=m+-1|0;if(!m){t=v;u=w;break}else{e=v;h=w}}}w=0;h=28;v=0;e=0;while(1){m=w+4|0;f=k[55868+(w<<6)+((t>>>h&15)<<2)>>2]|e|k[55868+(m<<6)+((u>>>h&15)<<2)>>2];n=h+-4|0;g=k[55868+(w<<6)+((t>>>n&15)<<2)>>2]|v|k[55868+(m<<6)+((u>>>n&15)<<2)>>2];w=w+1|0;if((w|0)==4){x=f;y=g;break}else{h=h+-8|0;v=g;e=f}}k[c>>2]=y;k[d>>2]=x;return}function RTa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+32|0;e=(i[b>>0]|0)==95;f=MXa(a,b,c)|0;c=MXa(319914,e?319901:319911,d)|0;if((c|0)!=0?(f|0)!=0&(YLa(c,e?319935:319956)|0)==0:0)g=f;else g=(i[b>>0]|0)==42?299014:329972;r=d;return g|0}function STa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;a:do if(((i[b>>0]|0)==36?(d=i[b+1>>0]|0,d<<24>>24!=0):0)?(e=i[b+2>>0]|0,e<<24>>24!=0):0){f=e<<24>>24==36;if(d<<24>>24==49&f){g=VTa(a,b,c)|0;break}switch(d<<24>>24){case 50:{if((i[b+3>>0]|0)!=36){h=13;break a}g=NTa(a,b,c)|0;break a;break}case 53:{if(!f){h=13;break a}g=OTa(a,b,c)|0;break a;break}case 54:{if(!f){h=13;break a}g=UTa(a,b,c)|0;break a;break}default:{h=13;break a}}}else h=13;while(0);if((h|0)==13)g=RTa(a,b,c)|0;return g|0}function TTa(a,b){a=a|0;b=b|0;return STa(a,b,319970)|0}function UTa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+128|0;e=d;f=NXa(a,b,c)|0;if((f|0)!=0&(NXa(320098,320116,e)|0)==(e|0)){c=(ZLa(e,320146,116)|0)==0;g=c?f:329972}else g=329972;r=d;return g|0}function VTa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+64|0;e=d;f=OXa(a,b,c)|0;if((f|0)!=0&(OXa(320262,320280,e)|0)==(e|0)){c=(ZLa(e,320293,35)|0)==0;g=c?f:329972}else g=329972;r=d;return g|0}function WTa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;d=a;a=0;while(1){e=c+a|0;i[e>>0]=0;f=d;g=0;h=7;while(1){g=((l[f>>0]|0)&1)<>0]=g;if((h|0)<=0)break;else{f=f+1|0;h=h+-1|0}}a=a+1|0;if((a|0)==8)break;else d=d+8|0}PTa(c,56380);r=b;return}function XTa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+144|0;d=c+8|0;e=c;k[e>>2]=0;f=0;g=31;h=a;while(1){j=((l[h>>0]|0)&1)<>2]=j;if((g|0)>0){f=j;g=g+-1|0;h=h+1|0}else{m=j;break}}h=a+32|0;g=e+4|0;k[g>>2]=0;f=0;j=31;n=h;while(1){o=((l[n>>0]|0)&1)<>2]=o;if((j|0)>0){f=o;j=j+-1|0;n=n+1|0}else{p=o;break}}if(!b)q=56380;else{b=0;do{n=15-b|0;k[d+(b<<2)>>2]=k[56380+(n<<2)>>2];k[d+64+(b<<2)>>2]=k[56444+(n<<2)>>2];b=b+1|0}while((b|0)!=16);q=d}QTa(m,p,e,g,1,0,q);q=31;p=a;while(1){i[p>>0]=(k[e>>2]|0)>>>q&1;if((q|0)>0){q=q+-1|0;p=p+1|0}else{s=31;t=h;break}}while(1){i[t>>0]=(k[g>>2]|0)>>>s&1;if((s|0)>0){s=s+-1|0;t=t+1|0}else break}r=c;return}function YTa(a,b,c){a=a|0;b=b|0;c=c|0;return QUa(208,a,b,c)|0}function ZTa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+4112|0;d=c;e=c+8|0;if(a)if(!b){f=HSa()|0;k[f>>2]=22;g=0}else{h=b;i=a;j=4}else{h=4096;i=e;j=4}if((j|0)==4){k[d>>2]=i;k[d+4>>2]=h;if((KVa(He(183,d|0)|0)|0)>=0)if((i|0)==(e|0))g=Vf[624&1023](e)|0;else g=i;else g=0}r=c;return g|0}function _Ta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;do{k[d>>2]=a;k[d+4>>2]=b;e=yb(63,d|0)|0}while((e|0)==-16);f=e;d=KVa(f)|0;r=c;return d|0}function $Ta(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=pd(6,c|0)|0;c=KVa((a|0)==-4?-115:a)|0;r=b;return c|0}function aUa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=d;d=KVa(jc(302,f|0)|0)|0;r=e;return d|0}function bUa(a,b,c){a=a|0;b=b|0;c=c|0;return QUa(210,a,b,c)|0}function cUa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(kd(9,d|0)|0)|0;r=c;return b|0}function dUa(){var a=0,b=0;a=r;r=r+16|0;b=Bd(202,a|0)|0;r=a;return b|0}function eUa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=0;k[d+8>>2]=b;k[d+12>>2]=((b|0)<0)<<31>>31;b=KVa(re(194,d|0)|0)|0;r=c;return b|0}function fUa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(nf(85,e|0)|0)|0;r=d;return c|0}function gUa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=d;k[f+20>>2]=((d|0)<0)<<31>>31;d=KVa(Fe(180,f|0)|0)|0;r=e;return d|0}function hUa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(_e(4,e|0)|0)|0;r=d;return c|0}function iUa(a){a=a|0;return QUa(210,-1,a,-1)|0}function jUa(a){a=a|0;return QUa(208,-1,a,-1)|0}function kUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(Ue(41,c|0)|0)|0;r=b;return a|0}function lUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(tf(51,c|0)|0)|0;r=b;return a|0}function mUa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+48|0;c=b+40|0;d=b+8|0;e=b;k[e>>2]=a;f=vf(133,e|0)|0;if((f|0)==-9?(k[d>>2]=a,k[d+4>>2]=1,(qb(221,d|0)|0)>=0):0){IVa(d,a);k[c>>2]=d;g=KVa(hd(12,c|0)|0)|0}else g=KVa(f)|0;r=b;return g|0}function nUa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=d;d=KVa(ic(305,f|0)|0)|0;r=e;return d|0}function oUa(){var a=0,b=0;a=r;r=r+16|0;b=Lb(201,a|0)|0;r=a;return b|0}function pUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(Bf(34,c|0)|0)|0;r=b;return a|0}function qUa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(xc(83,d|0)|0)|0;r=c;return b|0}function rUa(a,b){a=a|0;b=b|0;return QUa(204,a,b,0)|0}function sUa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=0;k[d+8>>2]=b;k[d+12>>2]=((b|0)<0)<<31>>31;b=KVa(af(193,d|0)|0)|0;r=c;return b|0}function tUa(){var a=0,b=0;a=r;r=r+16|0;b=vb(64,a|0)|0;r=a;return b|0}function uUa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=r;r=r+32|0;g=f;k[g>>2]=a;k[g+4>>2]=b;k[g+8>>2]=c;k[g+12>>2]=d;k[g+16>>2]=e;e=KVa(Yd(298,g|0)|0)|0;r=f;return e|0}function vUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(Te(40,c|0)|0)|0;r=b;return a|0}function wUa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(xe(33,d|0)|0)|0;r=c;return b|0}function xUa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=r;r=r+32|0;g=f;k[g>>2]=a;k[g+4>>2]=b;k[g+8>>2]=c;k[g+12>>2]=d;k[g+16>>2]=e;e=KVa(kc(303,g|0)|0)|0;r=f;return e|0}function yUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(tc(147,c|0)|0)|0;r=b;return a|0}function zUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;k[c+4>>2]=0;a=(Xc(c|0,c|0)|0)==0;r=b;return (a?0:k[c>>2]|0)|0}function AUa(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b;d=b+4|0;k[c>>2]=d;e=(dNa(a,21519,c)|0)<0;r=b;return (e?-1:k[d>>2]|0)|0}function BUa(){var a=0,b=0;a=r;r=r+16|0;b=Ff(199,a|0)|0;r=a;return b|0}function CUa(){return ue(320328)|0}function DUa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+48|0;e=d+24|0;f=d+16|0;g=d;a:do if((a|0)==(b|0))h=KVa(-22)|0;else{i=(c&524288|0)!=0;b:do if(i){c:while(1){k[g>>2]=a;k[g+4>>2]=b;k[g+8>>2]=c;j=Qc(330,g|0)|0;switch(j|0){case -38:{break b;break}case -16:break;default:{l=j;break c}}}h=KVa(l)|0;break a}while(0);do{k[f>>2]=a;k[f+4>>2]=b;j=yb(63,f|0)|0}while((j|0)==-16);m=j;if(i){k[e>>2]=b;k[e+4>>2]=2;k[e+8>>2]=1;qb(221,e|0)|0}h=KVa(m)|0}while(0);r=d;return h|0}function EUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(Ve(42,c|0)|0)|0;r=b;return a|0}function FUa(a,b){a=a|0;b=b|0;return $Ta(a)|0}function GUa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(ie(212,e|0)|0)|0;r=d;return c|0}function HUa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(rc(145,e|0)|0)|0;r=d;return c|0}function IUa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(ld(3,e|0)|0)|0;r=d;return c|0}function JUa(a,b){a=a|0;b=b|0;var c=0,d=0;c=CUa()|0;if(c)if((RLa(c)|0)>>>0>>0){OLa(a,c)|0;d=0}else d=34;else d=6;return d|0}function KUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(hd(12,c|0)|0)|0;r=b;return a|0}function LUa(a,b){a=a|0;b=b|0;return QUa(203,a,b,0)|0}function MUa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(Af(205,d|0)|0)|0;r=c;return b|0}function NUa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=d;k[f+16>>2]=0;d=KVa(Rc(334,f|0)|0)|0;r=e;return d|0}function OUa(){var a=0;a=r;r=r+16|0;ve(36,a|0)|0;r=a;return}function PUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(Ic(148,c|0)|0)|0;r=b;return a|0}function QUa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+32|0;f=e;k[f>>2]=b;k[f+4>>2]=c;k[f+8>>2]=d;k[f+12>>2]=a;d=f+16|0;k[d>>2]=0;c=f+20|0;k[c>>2]=0;switch(a|0){case 208:case 203:case 213:{k[d>>2]=1;break}default:{}}OSa(1531,f);f=k[c>>2]|0;if(!f)g=0;else{c=HSa()|0;k[c>>2]=f;g=-1}r=e;return g|0}function RUa(a){a=a|0;var b=0,c=0;b=r;r=r+64|0;c=(bFa(a,b)|0)==0&1;r=b;return c|0}function SUa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(hc(304,e|0)|0)|0;r=d;return c|0}function TUa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;k[d>>2]=0;k[d+4>>2]=b;b=d+8|0;k[b>>2]=0;e=d+12|0;k[e>>2]=a;Jd(0,d|0,d|0)|0;r=c;return ((k[b>>2]|0)*1e6|0)+(k[e>>2]|0)|0}function UUa(){var a=0,b=0;a=r;r=r+16|0;b=Cf(65,a|0)|0;r=a;return b|0}function VUa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(yf(132,c|0)|0)|0;r=b;return a|0}function WUa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+8|0;d=(a|0)==0?320336:a;i[d>>0]=0;a=WPa(320356,524545,b)|0;if((a|0)>-1){bVa(a,d,20)|0;k[c>>2]=a;pd(6,c|0)|0}r=b;return d|0}function XUa(){var a=0,b=0;a=r;r=r+16|0;b=KVa(Nd(29,a|0)|0)|0;r=a;return b|0}function YUa(a){a=a|0;var b=0,c=0;b=bVa(a,320365,32)|0;if(!b)c=320365;else{a=HSa()|0;k[a>>2]=b;c=0}return c|0}function ZUa(a){a=a|0;Pd(a|0)}function _Ua(){return lVa(0,0)|0}function $Ua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=d;k[f+16>>2]=0;d=KVa(Oc(333,f|0)|0)|0;r=e;return d|0}function aVa(){var a=0,b=0;a=r;r=r+16|0;b=Od(20,a|0)|0;r=a;return b|0}function bVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+32|0;e=d;do if(RUa(a)|0){IVa(e,a);f=fUa(e,b,c)|0;if((f|0)<0){g=HSa()|0;h=k[g>>2]|0;break}if((f|0)==(c|0))h=34;else{i[b+f>>0]=0;h=0}}else h=25;while(0);r=d;return h|0}function cVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(mc(301,e|0)|0)|0;r=d;return c|0}function dVa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;k[f>>2]=a;k[f+4>>2]=b;k[f+8>>2]=c;k[f+12>>2]=0;k[f+16>>2]=d;k[f+20>>2]=((d|0)<0)<<31>>31;d=KVa(Ge(181,f|0)|0)|0;r=e;return d|0}function eVa(){var a=0,b=0;a=r;r=r+16|0;b=KVa(ub(66,a|0)|0)|0;r=a;return b|0}function fVa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=c+4|0;k[e>>2]=b;k[d>>2]=e;e=dNa(a,21520,d)|0;r=c;return e|0}function gVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+32|0;e=d;f=d+20|0;k[e>>2]=a;k[e+4>>2]=0;k[e+8>>2]=b;k[e+12>>2]=f;k[e+16>>2]=c;c=(KVa(nc(140,e|0)|0)|0)!=0;r=d;return (c?-1:k[f>>2]|0)|0}function hVa(){var a=0,b=0;a=r;r=r+16|0;b=Dd(200,a|0)|0;r=a;return b|0}function iVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+64|0;e=d+48|0;f=d+16|0;g=d;k[g>>2]=a;k[g+4>>2]=b;k[g+8>>2]=c;h=xd(207,g|0)|0;if((h|0)==-9?(k[f>>2]=a,k[f+4>>2]=1,(qb(221,f|0)|0)>=0):0){IVa(f,a);k[e>>2]=f;k[e+4>>2]=b;k[e+8>>2]=c;i=KVa(ie(212,e|0)|0)|0}else i=KVa(h)|0;r=d;return i|0}function jVa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(jd(10,c|0)|0)|0;r=b;return a|0}function kVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(je(198,e|0)|0)|0;r=d;return c|0}function lVa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(uf(57,d|0)|0)|0;r=c;return b|0}function mVa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;e=r;r=r+1216|0;f=e+24|0;g=e+16|0;h=e;i=e+184|0;j=e+56|0;l=e+40|0;a:do switch(d|0){case 0:{m=4;break}case 512:{if((BUa()|0)==(oUa()|0)?(n=hVa()|0,(n|0)==(dUa()|0)):0){m=4;break a}k[l>>2]=a;k[l+4>>2]=b;k[l+8>>2]=c;uc(j|0);n=Lc(628,i+1024|0,0,l|0,g|0)|0;if((n|0)>0){while(1){k[f>>2]=n;k[f+4>>2]=g;k[f+8>>2]=-2147483648;k[f+12>>2]=0;bd(114,f|0)|0;o=k[g>>2]|0;if(!(o&127)){p=o;m=10;break}if(((o&65535)+-1|0)>>>0<=254){q=-16;break}}if((m|0)==10)q=k[56508+((p>>>8&255)<<2)>>2]|0;s=q}else s=-16;Yb(j|0);t=KVa(s)|0;break}default:t=KVa(-22)|0}while(0);if((m|0)==4){k[h>>2]=a;k[h+4>>2]=b;k[h+8>>2]=c;k[h+12>>2]=d;t=KVa(gc(307,h|0)|0)|0}r=e;return t|0}function nVa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+80|0;d=c+56|0;e=c+40|0;f=c+24|0;g=c+8|0;h=c;do if(b){k[h>>2]=a;k[h+4>>2]=b;i=Pc(331,h|0)|0;if((i|0)!=-38){j=KVa(i)|0;break}i=EUa(a)|0;if(!i){if(b&524288){k[g>>2]=k[a>>2];k[g+4>>2]=2;k[g+8>>2]=1;qb(221,g|0)|0;k[f>>2]=k[a+4>>2];k[f+4>>2]=2;k[f+8>>2]=1;qb(221,f|0)|0}if(!(b&2048))j=0;else{k[e>>2]=k[a>>2];k[e+4>>2]=4;k[e+8>>2]=2048;qb(221,e|0)|0;k[d>>2]=k[a+4>>2];k[d+4>>2]=4;k[d+8>>2]=2048;qb(221,d|0)|0;j=0}}else j=i}else j=EUa(a)|0;while(0);r=c;return j|0}function oVa(a){a=a|0;return QUa(214,a,0,0)|0}function pVa(a){a=a|0;return QUa(213,a,0,0)|0}function qVa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(Wc(118,c|0)|0)|0;r=b;return a|0}function rVa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+400|0;d=c;if(!(JNa(d)|0)){e=b>>>0>65?65:b;a:do if(!e)f=0;else{b=0;while(1){g=i[d+65+b>>0]|0;i[a+b>>0]=g;if(!(g<<24>>24)){f=b;break a}g=b+1|0;if(g>>>0>>0)b=g;else{f=g;break}}}while(0);if((f|0)==(e|0)){i[a+(e+-1)>>0]=0;h=0}else h=0}else h=-1;r=c;return h|0}function sVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(sc(146,e|0)|0)|0;r=d;return c|0}function tVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0;d=r;r=r+16|0;e=d;a:do if(!b)f=0;else{do if(c){g=(a|0)==0?e:a;h=i[b>>0]|0;j=h&255;if(h<<24>>24>-1){k[g>>2]=j;f=h<<24>>24!=0&1;break a}h=j+-194|0;if(h>>>0<=50){j=b+1|0;m=k[48116+(h<<2)>>2]|0;if(c>>>0<4?(m&-2147483648>>>((c*6|0)+-6|0)|0)!=0:0)break;h=l[j>>0]|0;j=h>>>3;if((j+-16|j+(m>>26))>>>0<=7){j=h+-128|m<<6;if((j|0)>=0){k[g>>2]=j;f=2;break a}m=l[b+2>>0]|0;if((m&192|0)==128){h=m+-128|j<<6;if((h|0)>=0){k[g>>2]=h;f=3;break a}j=l[b+3>>0]|0;if((j&192|0)==128){k[g>>2]=j+-128|h<<6;f=4;break a}}}}}while(0);h=HSa()|0;k[h>>2]=84;f=-1}while(0);r=d;return f|0}function uVa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;e=r;r=r+16|0;f=e;g=(d|0)==0?56564:d;d=k[g>>2]|0;a:do if(!b)if(!d)h=0;else j=15;else{l=(a|0)==0?f:a;if(!c)h=-2;else{if(!d){m=i[b>>0]|0;n=m&255;if(m<<24>>24>-1){k[l>>2]=n;h=m<<24>>24!=0&1;break}m=n+-194|0;if(m>>>0>50){j=15;break}n=k[48116+(m<<2)>>2]|0;m=c+-1|0;if(!m)o=n;else{p=m;q=n;s=b+1|0;j=9}}else{p=c;q=d;s=b;j=9}b:do if((j|0)==9){n=i[s>>0]|0;m=(n&255)>>>3;if((m+-16|m+(q>>26))>>>0>7){j=15;break a}else{t=p;u=n;v=q;w=s}while(1){w=w+1|0;v=(u&255)+-128|v<<6;t=t+-1|0;if((v|0)>=0){x=v;y=t;break}if(!t){o=v;break b}u=i[w>>0]|0;if((u&-64)<<24>>24!=-128){j=15;break a}}k[g>>2]=0;k[l>>2]=x;h=c-y|0;break a}while(0);k[g>>2]=o;h=-2}}while(0);if((j|0)==15){k[g>>2]=0;g=HSa()|0;k[g>>2]=84;h=-1}r=e;return h|0}function vVa(a){a=a|0;var b=0;if(!a)b=1;else b=(k[a>>2]|0)==0;return b&1|0}function wVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;do if(a){if(b>>>0<128){i[a>>0]=b;d=1;break}if(b>>>0<2048){i[a>>0]=b>>>6|192;i[a+1>>0]=b&63|128;d=2;break}if(b>>>0<55296|(b&-8192|0)==57344){i[a>>0]=b>>>12|224;i[a+1>>0]=b>>>6&63|128;i[a+2>>0]=b&63|128;d=3;break}if((b+-65536|0)>>>0<1048576){i[a>>0]=b>>>18|240;i[a+1>>0]=b>>>12&63|128;i[a+2>>0]=b>>>6&63|128;i[a+3>>0]=b&63|128;d=4;break}else{c=HSa()|0;k[c>>2]=84;d=-1;break}}else d=1;while(0);return d|0}function xVa(a,b,c){a=a|0;b=b|0;c=c|0;return uVa(0,a,b,(c|0)!=0?c:56568)|0}function yVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=b;b=zVa(a,e,c,0)|0;r=d;return b|0}function zVa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+16|0;e=d;a:do if(!a){f=k[b>>2]|0;g=k[f>>2]|0;if(!g)h=0;else{j=0;l=g;g=f;while(1){if(l>>>0>127){f=wVa(e,l,0)|0;if((f|0)==-1){h=-1;break a}else m=f}else m=1;f=m+j|0;g=g+4|0;l=k[g>>2]|0;if(!l){h=f;break}else j=f}}}else{b:do if(c>>>0>3){j=a;l=c;g=k[b>>2]|0;while(1){f=k[g>>2]|0;if((f+-1|0)>>>0>126){if(!f){n=j;o=l;break}p=wVa(j,f,0)|0;if((p|0)==-1){h=-1;break a}q=j+p|0;s=l-p|0;t=g}else{i[j>>0]=f;q=j+1|0;s=l+-1|0;t=k[b>>2]|0}g=t+4|0;k[b>>2]=g;if(s>>>0<=3){u=q;v=s;break b}else{j=q;l=s}}i[n>>0]=0;k[b>>2]=0;h=c-o|0;break a}else{u=a;v=c}while(0);if(v){l=u;j=v;g=k[b>>2]|0;while(1){f=k[g>>2]|0;if((f+-1|0)>>>0>126){if(!f){w=l;x=j;y=19;break}p=wVa(e,f,0)|0;if((p|0)==-1){h=-1;break a}if(j>>>0

      >>0){z=j;y=22;break}wVa(l,k[g>>2]|0,0)|0;A=l+p|0;B=j-p|0;C=g}else{i[l>>0]=f;A=l+1|0;B=j+-1|0;C=k[b>>2]|0}g=C+4|0;k[b>>2]=g;if(!B){h=c;break a}else{l=A;j=B}}if((y|0)==19){i[w>>0]=0;k[b>>2]=0;h=c-x|0;break}else if((y|0)==22){h=c-z|0;break}}else h=c}while(0);r=d;return h|0}function AVa(a){a=a|0;return (a>>>0<128?a:-1)|0}function BVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=b;b=GVa(a,e,c,0)|0;r=d;return b|0}function CVa(a){a=a|0;return (a>>>0<128?a:-1)|0}function DVa(a,b){a=a|0;b=b|0;var c=0;if(!a)c=0;else c=wVa(a,b,0)|0;return c|0}function EVa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;e=r;r=r+272|0;f=e+8|0;g=e;h=k[b>>2]|0;k[g>>2]=h;i=(a|0)!=0;j=i?d:256;d=i?a:f;a=h;a:do if((j|0)!=0&(h|0)!=0){l=c;m=j;n=a;o=0;p=d;while(1){q=l>>>0>=m>>>0;if(!(q|l>>>0>32)){s=l;t=m;u=n;v=o;w=p;break a}x=q?m:l;q=l-x|0;y=zVa(p,g,x,0)|0;if((y|0)==-1){z=q;A=p;break}x=(p|0)==(f|0);B=x?0:y;C=m-B|0;D=x?p:p+y|0;x=y+o|0;y=k[g>>2]|0;if((m|0)!=(B|0)&(y|0)!=0){l=q;m=C;n=y;o=x;p=D}else{s=q;t=C;u=y;v=x;w=D;break a}}s=z;t=0;u=k[g>>2]|0;v=-1;w=A}else{s=c;t=j;u=a;v=0;w=d}while(0);b:do if((u|0)!=0?(t|0)!=0&(s|0)!=0:0){d=s;a=t;j=u;c=v;A=w;while(1){z=wVa(A,k[j>>2]|0,0)|0;if((z+1|0)>>>0<2){E=z;F=c;break}j=(k[g>>2]|0)+4|0;k[g>>2]=j;d=d+-1|0;f=c+1|0;if(!((a|0)!=(z|0)&(d|0)!=0)){G=f;break b}else{a=a-z|0;c=f;A=A+z|0}}if(!E){k[g>>2]=0;G=F}else G=-1}else G=v;while(0);if(i)k[b>>2]=k[g>>2];r=e;return G|0}function FVa(a,b){a=a|0;b=b|0;return tVa(0,a,b)|0}function GVa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;e=k[b>>2]|0;if((d|0)!=0?(f=k[d>>2]|0,(f|0)!=0):0)if(!a){g=c;h=f;j=e;m=16}else{k[d>>2]=0;n=a;o=c;p=f;q=e;m=37}else if(!a){r=c;s=e;m=7}else{t=a;u=c;v=e;m=6}a:while(1)if((m|0)==6){m=0;if(!u){w=v;m=26;break}else{x=t;y=u;z=v}while(1){e=i[z>>0]|0;do if(((e&255)+-1|0)>>>0<127?y>>>0>4&(z&3|0)==0:0){f=x;d=y;A=z;while(1){B=k[A>>2]|0;if((B+-16843009|B)&-2139062144){C=f;D=d;E=B;F=A;m=32;break}k[f>>2]=B&255;k[f+4>>2]=l[A+1>>0];k[f+8>>2]=l[A+2>>0];B=A+4|0;G=f+16|0;k[f+12>>2]=l[A+3>>0];H=d+-4|0;if(H>>>0>4){f=G;d=H;A=B}else{I=B;J=G;K=H;m=31;break}}if((m|0)==31){m=0;L=J;M=K;N=i[I>>0]|0;O=I;break}else if((m|0)==32){m=0;L=C;M=D;N=E&255;O=F;break}}else{L=x;M=y;N=e;O=z}while(0);e=N&255;if((e+-1|0)>>>0>=127){P=L;Q=M;R=e;S=O;break}A=O+1|0;k[L>>2]=e;y=M+-1|0;if(!y){w=A;m=26;break a}else{x=L+4|0;z=A}}A=R+-194|0;if(A>>>0>50){T=P;U=Q;V=S;m=48;break}n=P;o=Q;p=k[48116+(A<<2)>>2]|0;q=S+1|0;m=37;continue}else if((m|0)==7){m=0;A=i[s>>0]|0;if(((A&255)+-1|0)>>>0<127?(s&3|0)==0:0){e=k[s>>2]|0;if(!((e+-16843009|e)&-2139062144)){d=r;f=s;while(1){H=f+4|0;G=d+-4|0;B=k[H>>2]|0;if(!((B+-16843009|B)&-2139062144)){d=G;f=H}else{W=G;X=B;Y=H;break}}}else{W=r;X=e;Y=s}Z=W;_=X&255;$=Y}else{Z=r;_=A;$=s}f=_&255;if((f+-1|0)>>>0<127){r=Z+-1|0;s=$+1|0;m=7;continue}else{aa=Z;ba=f;ca=$}f=ba+-194|0;if(f>>>0>50){T=a;U=aa;V=ca;m=48;break}g=aa;h=k[48116+(f<<2)>>2]|0;j=ca+1|0;m=16;continue}else if((m|0)==16){m=0;f=(l[j>>0]|0)>>>3;if((f+-16|f+(h>>26))>>>0>7){m=17;break}f=j+1|0;if(h&33554432){if((i[f>>0]&-64)<<24>>24!=-128){m=20;break}d=j+2|0;if(!(h&524288))da=d;else{if((i[d>>0]&-64)<<24>>24!=-128){m=23;break}da=j+3|0}}else da=f;r=g+-1|0;s=da;m=7;continue}else if((m|0)==37){m=0;f=l[q>>0]|0;d=f>>>3;if((d+-16|d+(p>>26))>>>0>7){m=38;break}d=q+1|0;H=f+-128|p<<6;if((H|0)<0){f=l[d>>0]|0;if((f&192|0)!=128){m=41;break}B=q+2|0;G=f+-128|H<<6;if((G|0)<0){f=l[B>>0]|0;if((f&192|0)!=128){m=44;break}ea=f+-128|G<<6;fa=q+3|0}else{ea=G;fa=B}}else{ea=H;fa=d}k[n>>2]=ea;t=n+4|0;u=o+-1|0;v=fa;m=6;continue}if((m|0)==17){ga=a;ha=g;ia=h;ja=j+-1|0;m=47}else if((m|0)==20){ga=a;ha=g;ia=h;ja=j+-1|0;m=47}else if((m|0)==23){ga=a;ha=g;ia=h;ja=j+-1|0;m=47}else if((m|0)==26){k[b>>2]=w;ka=c}else if((m|0)==38){ga=n;ha=o;ia=p;ja=q+-1|0;m=47}else if((m|0)==41){la=n;ma=q+-1|0;m=52}else if((m|0)==44){la=n;ma=q+-1|0;m=52}if((m|0)==47)if(!ia){T=ga;U=ha;V=ja;m=48}else{la=ga;ma=ja;m=52}if((m|0)==48)if(!(i[V>>0]|0)){if(T){k[T>>2]=0;k[b>>2]=0}ka=c-U|0}else{la=T;ma=V;m=52}if((m|0)==52){m=HSa()|0;k[m>>2]=84;if(!la)ka=-1;else{k[b>>2]=ma;ka=-1}}return ka|0}function HVa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;f=r;r=r+1040|0;g=f+8|0;h=f;i=k[b>>2]|0;k[h>>2]=i;j=(a|0)!=0;l=j?d:256;d=j?a:g;a=i;a:do if((l|0)!=0&(i|0)!=0){m=c;n=l;o=a;p=0;q=d;while(1){s=m>>>2;t=s>>>0>=n>>>0;if(!(m>>>0>131|t)){u=m;v=n;w=o;x=p;y=q;break a}z=t?n:s;s=m-z|0;t=GVa(q,h,z,e)|0;if((t|0)==-1){A=s;B=q;break}z=(q|0)==(g|0);C=z?0:t;D=n-C|0;E=z?q:q+(t<<2)|0;z=t+p|0;t=k[h>>2]|0;if((n|0)!=(C|0)&(t|0)!=0){m=s;n=D;o=t;p=z;q=E}else{u=s;v=D;w=t;x=z;y=E;break a}}u=A;v=0;w=k[h>>2]|0;x=-1;y=B}else{u=c;v=l;w=a;x=0;y=d}while(0);b:do if((w|0)!=0?(v|0)!=0&(u|0)!=0:0){d=u;a=v;l=w;c=x;B=y;while(1){A=uVa(B,l,d,e)|0;if((A+2|0)>>>0<3){F=A;G=c;break}l=(k[h>>2]|0)+A|0;k[h>>2]=l;a=a+-1|0;g=c+1|0;if(!((a|0)!=0&(d|0)!=(A|0))){H=g;break b}else{d=d-A|0;c=g;B=B+4|0}}switch(F|0){case -1:{H=-1;break b;break}case 0:{k[h>>2]=0;H=G;break b;break}default:{k[e>>2]=0;H=G;break b}}}else H=x;while(0);if(j)k[b>>2]=k[h>>2];r=f;return H|0}function IVa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=0;while(1){i[a+c>>0]=i[320397+c>>0]|0;if((c|0)==14)break;else c=c+1|0}if(!b){i[a+14>>0]=48;i[a+15>>0]=0}else{c=14;d=b;while(1){e=c+1|0;if(d>>>0<10){f=e;break}else{c=e;d=(d>>>0)/10|0}}i[a+f>>0]=0;d=b;b=f;while(1){b=b+-1|0;i[a+b>>0]=(d>>>0)%10|0|48;if(d>>>0<10)break;else d=(d>>>0)/10|0}}return}function JVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0.0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0.0,_=0,$=0.0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0.0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0.0,ua=0,va=0.0,wa=0.0,xa=0,ya=0.0,za=0,Aa=0.0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0.0,La=0,Ma=0,Na=0,Oa=0,Pa=0.0,Qa=0,Ra=0,Sa=0,Ta=0.0,Ua=0.0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0.0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0.0,dd=0.0,ed=0.0,fd=0.0,gd=0.0,hd=0.0,id=0.0,jd=0,kd=0,ld=0.0,md=0,nd=0.0;d=r;r=r+512|0;e=d;switch(b|0){case 0:{f=24;g=-149;h=4;break}case 1:{f=53;g=-1074;h=4;break}case 2:{f=53;g=-1074;h=4;break}default:j=0.0}a:do if((h|0)==4){b=a+4|0;m=a+100|0;do{n=k[b>>2]|0;if(n>>>0<(k[m>>2]|0)>>>0){k[b>>2]=n+1;o=l[n>>0]|0}else o=NVa(a)|0}while((yIa(o)|0)!=0);p=o;b:do switch(p|0){case 43:case 45:{n=1-(((p|0)==45&1)<<1)|0;q=k[b>>2]|0;if(q>>>0<(k[m>>2]|0)>>>0){k[b>>2]=q+1;s=l[q>>0]|0;t=n;break b}else{s=NVa(a)|0;t=n;break b}break}default:{s=p;t=1}}while(0);n=s;q=0;while(1){if((n|32|0)!=(i[320412+q>>0]|0)){u=n;v=q;break}do if(q>>>0<7){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;x=l[w>>0]|0;break}else{x=NVa(a)|0;break}}else x=n;while(0);w=q+1|0;if(w>>>0<8){n=x;q=w}else{u=x;v=w;break}}c:do switch(v|0){case 8:break;case 3:{h=23;break}default:{q=(c|0)!=0;if(q&v>>>0>3)if((v|0)==8)break c;else{h=23;break c}d:do if(!v){n=u;w=0;while(1){if((n|32|0)!=(i[323713+w>>0]|0)){y=n;z=w;break d}do if(w>>>0<2){A=k[b>>2]|0;if(A>>>0<(k[m>>2]|0)>>>0){k[b>>2]=A+1;D=l[A>>0]|0;break}else{D=NVa(a)|0;break}}else D=n;while(0);A=w+1|0;if(A>>>0<3){n=D;w=A}else{y=D;z=A;break}}}else{y=u;z=v}while(0);switch(z|0){case 3:{w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;E=l[w>>0]|0}else E=NVa(a)|0;if((E|0)==40)F=1;else{if(!(k[m>>2]|0)){j=B;break a}k[b>>2]=(k[b>>2]|0)+-1;j=B;break a}while(1){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;G=l[w>>0]|0}else G=NVa(a)|0;if(!((G+-48|0)>>>0<10|(G+-65|0)>>>0<26)?!((G|0)==95|(G+-97|0)>>>0<26):0){H=G;I=F;break}F=F+1|0}if((H|0)==41){j=B;break a}w=(k[m>>2]|0)==0;if(!w)k[b>>2]=(k[b>>2]|0)+-1;if(!q){n=HSa()|0;k[n>>2]=22;MVa(a,0);j=0.0;break a}if(!I){j=B;break a}else J=I;while(1){J=J+-1|0;if(!w)k[b>>2]=(k[b>>2]|0)+-1;if(!J){j=B;break a}}break}case 0:{do if((y|0)==48){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;K=l[w>>0]|0}else K=NVa(a)|0;if((K|32|0)!=120){if(!(k[m>>2]|0)){L=48;break}k[b>>2]=(k[b>>2]|0)+-1;L=48;break}w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;N=l[w>>0]|0;O=0}else{N=NVa(a)|0;O=0}e:while(1){switch(N|0){case 46:{P=O;h=74;break e;break}case 48:break;default:{Q=0;R=0;S=0;T=0;U=N;V=O;W=0;Y=0;Z=1.0;_=0;$=0.0;break e}}w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;N=l[w>>0]|0;O=1;continue}else{N=NVa(a)|0;O=1;continue}}if((h|0)==74){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;aa=l[w>>0]|0}else aa=NVa(a)|0;if((aa|0)==48){w=0;q=0;while(1){n=k[b>>2]|0;if(n>>>0<(k[m>>2]|0)>>>0){k[b>>2]=n+1;ba=l[n>>0]|0}else ba=NVa(a)|0;n=Hyb(w|0,q|0,-1,-1)|0;A=M;if((ba|0)==48){w=n;q=A}else{Q=0;R=0;S=n;T=A;U=ba;V=1;W=1;Y=0;Z=1.0;_=0;$=0.0;break}}}else{Q=0;R=0;S=0;T=0;U=aa;V=P;W=1;Y=0;Z=1.0;_=0;$=0.0}}while(1){q=U+-48|0;w=U|32;if(q>>>0>=10){A=(U|0)==46;if(!(A|(w+-97|0)>>>0<6)){ca=S;da=R;ea=T;fa=Q;ga=U;ha=V;ja=W;ka=_;la=$;break}if(A)if(!W){ma=R;na=Q;oa=R;pa=Q;qa=V;ra=1;sa=Y;ta=Z;ua=_;va=$}else{ca=S;da=R;ea=T;fa=Q;ga=46;ha=V;ja=W;ka=_;la=$;break}else h=86}else h=86;if((h|0)==86){h=0;A=(U|0)>57?w+-87|0:q;do if(!((Q|0)<0|(Q|0)==0&R>>>0<8)){if((Q|0)<0|(Q|0)==0&R>>>0<14){wa=Z*.0625;xa=Y;ya=wa;za=_;Aa=$+wa*+(A|0);break}if((Y|0)!=0|(A|0)==0){xa=Y;ya=Z;za=_;Aa=$}else{xa=1;ya=Z;za=_;Aa=$+Z*.5}}else{xa=Y;ya=Z;za=A+(_<<4)|0;Aa=$}while(0);A=Hyb(R|0,Q|0,1,0)|0;ma=S;na=T;oa=A;pa=M;qa=1;ra=W;sa=xa;ta=ya;ua=za;va=Aa}A=k[b>>2]|0;if(A>>>0<(k[m>>2]|0)>>>0){k[b>>2]=A+1;Q=pa;R=oa;S=ma;T=na;U=l[A>>0]|0;V=qa;W=ra;Y=sa;Z=ta;_=ua;$=va;continue}else{Q=pa;R=oa;S=ma;T=na;U=NVa(a)|0;V=qa;W=ra;Y=sa;Z=ta;_=ua;$=va;continue}}if(!ha){A=(k[m>>2]|0)==0;if(!A)k[b>>2]=(k[b>>2]|0)+-1;if(c){if(!A?(A=k[b>>2]|0,k[b>>2]=A+-1,(ja|0)!=0):0)k[b>>2]=A+-2}else MVa(a,0);j=+(t|0)*0.0;break a}A=(ja|0)==0;q=A?da:ca;w=A?fa:ea;if((fa|0)<0|(fa|0)==0&da>>>0<8){A=da;n=fa;Ba=ka;while(1){Ca=Ba<<4;A=Hyb(A|0,n|0,1,0)|0;n=M;if(!((n|0)<0|(n|0)==0&A>>>0<8)){Da=Ca;break}else Ba=Ca}}else Da=ka;if((ga|32|0)==112){Ba=RXa(a,c)|0;A=M;if((Ba|0)==0&(A|0)==-2147483648){if(!c){MVa(a,0);j=0.0;break a}if(!(k[m>>2]|0)){Ea=0;Fa=0}else{k[b>>2]=(k[b>>2]|0)+-1;Ea=0;Fa=0}}else{Ea=Ba;Fa=A}}else if(!(k[m>>2]|0)){Ea=0;Fa=0}else{k[b>>2]=(k[b>>2]|0)+-1;Ea=0;Fa=0}A=Kyb(q|0,w|0,2)|0;Ba=Hyb(A|0,M|0,-32,-1)|0;A=Hyb(Ba|0,M|0,Ea|0,Fa|0)|0;Ba=M;if(!Da){j=+(t|0)*0.0;break a}if((Ba|0)>0|(Ba|0)==0&A>>>0>(0-g|0)>>>0){n=HSa()|0;k[n>>2]=34;j=+(t|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break a}n=g+-106|0;Ca=((n|0)<0)<<31>>31;if((Ba|0)<(Ca|0)|(Ba|0)==(Ca|0)&A>>>0>>0){n=HSa()|0;k[n>>2]=34;j=+(t|0)*2.2250738585072014e-308*2.2250738585072014e-308;break a}if((Da|0)>-1){n=A;Ca=Ba;Ga=Da;wa=la;while(1){Ha=!(wa>=.5);Ia=Ha&1|Ga<<1;Ja=Ia^1;Ka=wa+(Ha?wa:wa+-1.0);Ha=Hyb(n|0,Ca|0,-1,-1)|0;La=M;if((Ia|0)>-1){n=Ha;Ca=La;Ga=Ja;wa=Ka}else{Ma=Ha;Na=La;Oa=Ja;Pa=Ka;break}}}else{Ma=A;Na=Ba;Oa=Da;Pa=la}Ga=Gyb(32,0,g|0,((g|0)<0)<<31>>31|0)|0;Ca=Hyb(Ma|0,Na|0,Ga|0,M|0)|0;Ga=M;if(0>(Ga|0)|0==(Ga|0)&f>>>0>Ca>>>0)if((Ca|0)<0){Qa=0;h=127}else{Ra=Ca;h=125}else{Ra=f;h=125}if((h|0)==125)if((Ra|0)<53){Qa=Ra;h=127}else{Sa=Ra;Ta=+(t|0);Ua=0.0}if((h|0)==127){wa=+(t|0);Sa=Qa;Ta=wa;Ua=+jIa(+kFa(1.0,84-Qa|0),wa)}Ca=(Oa&1|0)==0&(Pa!=0.0&(Sa|0)<32);wa=Ta*(Ca?0.0:Pa)+(Ua+Ta*+(((Ca&1)+Oa|0)>>>0))-Ua;if(!(wa!=0.0)){Ca=HSa()|0;k[Ca>>2]=34}j=+MFa(wa,Ma);break a}else L=y;while(0);Ca=g+f|0;Ga=0-Ca|0;n=L;w=0;f:while(1){switch(n|0){case 46:{Va=w;h=138;break f;break}case 48:break;default:{Wa=n;Xa=0;Ya=0;Za=w;_a=0;break f}}q=k[b>>2]|0;if(q>>>0<(k[m>>2]|0)>>>0){k[b>>2]=q+1;n=l[q>>0]|0;w=1;continue}else{n=NVa(a)|0;w=1;continue}}if((h|0)==138){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;$a=l[w>>0]|0}else $a=NVa(a)|0;if(($a|0)==48){w=0;n=0;while(1){q=Hyb(w|0,n|0,-1,-1)|0;Ja=M;La=k[b>>2]|0;if(La>>>0<(k[m>>2]|0)>>>0){k[b>>2]=La+1;ab=l[La>>0]|0}else ab=NVa(a)|0;if((ab|0)==48){w=q;n=Ja}else{Wa=ab;Xa=q;Ya=Ja;Za=1;_a=1;break}}}else{Wa=$a;Xa=0;Ya=0;Za=Va;_a=1}}k[e>>2]=0;n=Wa+-48|0;w=(Wa|0)==46;g:do if(w|n>>>0<10){Ja=e+496|0;q=Wa;La=0;Ha=0;Ia=w;bb=n;cb=Xa;db=Ya;eb=Za;fb=_a;gb=0;hb=0;ib=0;h:while(1){do if(Ia)if(!fb){jb=La;kb=Ha;lb=La;mb=Ha;nb=eb;ob=1;pb=gb;qb=hb;rb=ib}else{sb=cb;tb=db;ub=La;vb=Ha;wb=eb;xb=gb;yb=hb;zb=ib;break h}else{Ab=Hyb(La|0,Ha|0,1,0)|0;Bb=M;Cb=(q|0)!=48;if((hb|0)>=125){if(!Cb){jb=cb;kb=db;lb=Ab;mb=Bb;nb=eb;ob=fb;pb=gb;qb=hb;rb=ib;break}k[Ja>>2]=k[Ja>>2]|1;jb=cb;kb=db;lb=Ab;mb=Bb;nb=eb;ob=fb;pb=gb;qb=hb;rb=ib;break}Db=e+(hb<<2)|0;if(!gb)Eb=bb;else Eb=q+-48+((k[Db>>2]|0)*10|0)|0;k[Db>>2]=Eb;Db=gb+1|0;Fb=(Db|0)==9;jb=cb;kb=db;lb=Ab;mb=Bb;nb=1;ob=fb;pb=Fb?0:Db;qb=(Fb&1)+hb|0;rb=Cb?Ab:ib}while(0);Ab=k[b>>2]|0;if(Ab>>>0<(k[m>>2]|0)>>>0){k[b>>2]=Ab+1;Gb=l[Ab>>0]|0}else Gb=NVa(a)|0;bb=Gb+-48|0;Ia=(Gb|0)==46;if(!(Ia|bb>>>0<10)){Hb=Gb;Ib=jb;Jb=lb;Kb=kb;Lb=mb;Mb=nb;Nb=ob;Ob=pb;Pb=qb;Qb=rb;h=161;break g}else{q=Gb;La=lb;Ha=mb;cb=jb;db=kb;eb=nb;fb=ob;gb=pb;hb=qb;ib=rb}}Rb=ub;Sb=vb;Tb=sb;Ub=tb;Vb=(wb|0)!=0;Wb=xb;Xb=yb;Yb=zb;h=169}else{Hb=Wa;Ib=Xa;Jb=0;Kb=Ya;Lb=0;Mb=Za;Nb=_a;Ob=0;Pb=0;Qb=0;h=161}while(0);do if((h|0)==161){n=(Nb|0)==0;w=n?Jb:Ib;ib=n?Lb:Kb;n=(Mb|0)!=0;if(!((Hb|32|0)==101&n))if((Hb|0)>-1){Rb=Jb;Sb=Lb;Tb=w;Ub=ib;Vb=n;Wb=Ob;Xb=Pb;Yb=Qb;h=169;break}else{Zb=Jb;_b=Lb;$b=n;ac=w;bc=ib;cc=Ob;dc=Pb;ec=Qb;h=171;break}n=RXa(a,c)|0;hb=M;if((n|0)==0&(hb|0)==-2147483648){if(!c){MVa(a,0);fc=0.0;break}if(!(k[m>>2]|0)){gc=0;hc=0}else{k[b>>2]=(k[b>>2]|0)+-1;gc=0;hc=0}}else{gc=n;hc=hb}hb=Hyb(gc|0,hc|0,w|0,ib|0)|0;ic=hb;jc=Jb;kc=M;lc=Lb;mc=Ob;nc=Pb;oc=Qb;h=173}while(0);if((h|0)==169)if(k[m>>2]|0){k[b>>2]=(k[b>>2]|0)+-1;if(Vb){ic=Tb;jc=Rb;kc=Ub;lc=Sb;mc=Wb;nc=Xb;oc=Yb;h=173}else h=172}else{Zb=Rb;_b=Sb;$b=Vb;ac=Tb;bc=Ub;cc=Wb;dc=Xb;ec=Yb;h=171}if((h|0)==171)if($b){ic=ac;jc=Zb;kc=bc;lc=_b;mc=cc;nc=dc;oc=ec;h=173}else h=172;do if((h|0)==172){hb=HSa()|0;k[hb>>2]=22;MVa(a,0);fc=0.0}else if((h|0)==173){hb=k[e>>2]|0;if(!hb){fc=+(t|0)*0.0;break}if(((lc|0)<0|(lc|0)==0&jc>>>0<10)&((ic|0)==(jc|0)&(kc|0)==(lc|0))?f>>>0>30|(hb>>>f|0)==0:0){fc=+(t|0)*+(hb>>>0);break}hb=(g|0)/-2|0;ib=((hb|0)<0)<<31>>31;if((kc|0)>(ib|0)|(kc|0)==(ib|0)&ic>>>0>hb>>>0){hb=HSa()|0;k[hb>>2]=34;fc=+(t|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}hb=g+-106|0;ib=((hb|0)<0)<<31>>31;if((kc|0)<(ib|0)|(kc|0)==(ib|0)&ic>>>0>>0){hb=HSa()|0;k[hb>>2]=34;fc=+(t|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(!mc)pc=nc;else{if((mc|0)<9){hb=e+(nc<<2)|0;ib=k[hb>>2]|0;w=mc;while(1){n=ib*10|0;w=w+1|0;if((w|0)==9){qc=n;break}else ib=n}k[hb>>2]=qc}pc=nc+1|0}if((oc|0)<9?(oc|0)<=(ic|0)&(ic|0)<18:0){if((ic|0)==9){fc=+(t|0)*+((k[e>>2]|0)>>>0);break}if((ic|0)<9){fc=+(t|0)*+((k[e>>2]|0)>>>0)/+(k[56572+(8-ic<<2)>>2]|0);break}ib=f+27+(ia(ic,-3)|0)|0;w=k[e>>2]|0;if((ib|0)>30|(w>>>ib|0)==0){fc=+(t|0)*+(w>>>0)*+(k[56572+(ic+-10<<2)>>2]|0);break}}w=(ic|0)%9|0;if(!w){rc=0;sc=0;tc=ic;uc=pc}else{ib=(ic|0)>-1?w:w+9|0;w=k[56572+(8-ib<<2)>>2]|0;if(pc){n=1e9/(w|0)|0;gb=0;fb=0;eb=0;db=ic;while(1){cb=e+(eb<<2)|0;Ha=k[cb>>2]|0;La=((Ha>>>0)/(w>>>0)|0)+fb|0;k[cb>>2]=La;cb=ia((Ha>>>0)%(w>>>0)|0,n)|0;Ha=(eb|0)==(gb|0)&(La|0)==0;eb=eb+1|0;La=Ha?db+-9|0:db;q=Ha?eb&127:gb;if((eb|0)==(pc|0)){vc=cb;wc=q;xc=La;break}else{gb=q;fb=cb;db=La}}if(!vc){yc=wc;zc=xc;Ac=pc}else{k[e+(pc<<2)>>2]=vc;yc=wc;zc=xc;Ac=pc+1|0}}else{yc=0;zc=ic;Ac=0}rc=yc;sc=0;tc=9-ib+zc|0;uc=Ac}i:while(1){db=(tc|0)<18;fb=(tc|0)==18;gb=e+(rc<<2)|0;eb=sc;n=uc;while(1){if(!db){if(!fb){Bc=rc;Cc=eb;Dc=tc;Ec=n;break i}if((k[gb>>2]|0)>>>0>=9007199){Bc=rc;Cc=eb;Dc=18;Ec=n;break i}}w=0;hb=n+127|0;La=n;while(1){cb=hb&127;q=e+(cb<<2)|0;Ha=Kyb(k[q>>2]|0,0,29)|0;bb=Hyb(Ha|0,M|0,w|0,0)|0;Ha=M;Ia=Ha>>>0>0|(Ha|0)==0&bb>>>0>1e9;Ja=Ryb(bb|0,Ha|0,1e9,0)|0;Ba=Syb(bb|0,Ha|0,1e9,0)|0;Ha=Ia?Ba:bb;bb=Ia?Ja:0;k[q>>2]=Ha;q=(cb|0)==(rc|0);Ja=(cb|0)!=(La+127&127|0)|q?La:(Ha|0)==0?cb:La;if(q){Fc=bb;Gc=Ja;break}else{w=bb;hb=cb+-1|0;La=Ja}}La=eb+-29|0;if(!Fc){eb=La;n=Gc}else{Hc=La;Ic=Fc;Jc=Gc;break}}n=rc+127&127;if((n|0)==(Jc|0)){eb=Jc+127&127;gb=e+((Jc+126&127)<<2)|0;k[gb>>2]=k[gb>>2]|k[e+(eb<<2)>>2];Kc=eb}else Kc=Jc;k[e+(n<<2)>>2]=Ic;rc=n;sc=Hc;tc=tc+9|0;uc=Kc}j:while(1){Lc=Ec+1&127;ib=e+((Ec+127&127)<<2)|0;n=Bc;eb=Cc;gb=Dc;while(1){fb=(gb|0)==18;db=(gb|0)>27?9:1;La=fb^1;Mc=n;Nc=eb;while(1){Oc=Mc&127;Pc=(Oc|0)==(Ec|0);do if(!Pc){hb=k[e+(Oc<<2)>>2]|0;if(hb>>>0<9007199){h=217;break}if(hb>>>0>9007199)break;hb=Mc+1&127;if((hb|0)==(Ec|0)){h=217;break}w=k[e+(hb<<2)>>2]|0;if(w>>>0<254740991){h=217;break}if(!(w>>>0>254740991|La)){Qc=Oc;Rc=Mc;Sc=Nc;Tc=Ec;break j}}else h=217;while(0);if((h|0)==217?(h=0,fb):0){h=218;break j}w=Nc+db|0;if((Mc|0)==(Ec|0)){Mc=Ec;Nc=w}else{Uc=w;Vc=Mc;break}}fb=(1<>>db;w=Vc;hb=0;Ja=Vc;cb=gb;while(1){bb=e+(Ja<<2)|0;q=k[bb>>2]|0;Ha=(q>>>db)+hb|0;k[bb>>2]=Ha;bb=ia(q&fb,La)|0;q=(Ja|0)==(w|0)&(Ha|0)==0;Ja=Ja+1&127;Ha=q?cb+-9|0:cb;Ia=q?Ja:w;if((Ja|0)==(Ec|0)){Wc=bb;Xc=Ia;Yc=Ha;break}else{w=Ia;hb=bb;cb=Ha}}if(!Wc){n=Xc;eb=Uc;gb=Yc;continue}if((Lc|0)!=(Xc|0)){Zc=Uc;_c=Wc;$c=Xc;ad=Yc;break}k[ib>>2]=k[ib>>2]|1;n=Xc;eb=Uc;gb=Yc}k[e+(Ec<<2)>>2]=_c;Bc=$c;Cc=Zc;Dc=ad;Ec=Lc}if((h|0)==218)if(Pc){k[e+(Lc+-1<<2)>>2]=0;Qc=Ec;Rc=Mc;Sc=Nc;Tc=Lc}else{Qc=Oc;Rc=Mc;Sc=Nc;Tc=Ec}wa=+((k[e+(Qc<<2)>>2]|0)>>>0);gb=Rc+1&127;if((gb|0)==(Tc|0)){eb=Rc+2&127;k[e+(eb+-1<<2)>>2]=0;bd=eb}else bd=Tc;Ka=+(t|0);cd=Ka*(wa*1.0e9+ +((k[e+(gb<<2)>>2]|0)>>>0));gb=Sc+53|0;eb=gb-g|0;n=(eb|0)<(f|0);ib=n&1;cb=n?((eb|0)<0?0:eb):f;if((cb|0)<53){wa=+jIa(+kFa(1.0,105-cb|0),cd);dd=+BFa(cd,+kFa(1.0,53-cb|0));ed=wa;fd=dd;gd=wa+(cd-dd)}else{ed=0.0;fd=0.0;gd=cd}hb=Rc+2&127;do if((hb|0)==(bd|0))hd=fd;else{w=k[e+(hb<<2)>>2]|0;do if(w>>>0>=5e8){if(w>>>0>5e8){id=Ka*.75+fd;break}if((Rc+3&127|0)==(bd|0)){id=Ka*.5+fd;break}else{id=Ka*.75+fd;break}}else{if((w|0)==0?(Rc+3&127|0)==(bd|0):0){id=fd;break}id=Ka*.25+fd}while(0);if((53-cb|0)<=1){hd=id;break}if(+BFa(id,1.0)!=0.0){hd=id;break}hd=id+1.0}while(0);Ka=gd+hd-ed;do if((gb&2147483647|0)>(-2-Ca|0)){if(!(+X(+Ka)>=9007199254740992.0)){jd=ib;kd=Sc;ld=Ka}else{jd=n&(cb|0)==(eb|0)?0:ib;kd=Sc+1|0;ld=Ka*.5}if((kd+50|0)<=(Ga|0)?!(hd!=0.0&(jd|0)!=0):0){md=kd;nd=ld;break}hb=HSa()|0;k[hb>>2]=34;md=kd;nd=ld}else{md=Sc;nd=Ka}while(0);fc=+MFa(nd,md)}while(0);j=fc;break a;break}default:{if(k[m>>2]|0)k[b>>2]=(k[b>>2]|0)+-1;Ga=HSa()|0;k[Ga>>2]=22;MVa(a,0);j=0.0;break a}}}}while(0);if((h|0)==23){Ga=(k[m>>2]|0)==0;if(!Ga)k[b>>2]=(k[b>>2]|0)+-1;if((c|0)!=0&v>>>0>3){Ca=v;do{if(!Ga)k[b>>2]=(k[b>>2]|0)+-1;Ca=Ca+-1|0}while(Ca>>>0>3)}}j=+(t|0)*C}while(0);r=d;return +j}function KVa(a){a=a|0;var b=0,c=0;if(a>>>0>4294963200){b=HSa()|0;k[b>>2]=0-a;c=-1}else c=a;return c|0}function LVa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0;a:do if(b>>>0>36){f=HSa()|0;k[f>>2]=22;g=0;h=0}else{f=a+4|0;j=a+100|0;do{m=k[f>>2]|0;if(m>>>0<(k[j>>2]|0)>>>0){k[f>>2]=m+1;n=l[m>>0]|0}else n=NVa(a)|0}while((yIa(n)|0)!=0);o=n;b:do switch(o|0){case 43:case 45:{m=((o|0)==45)<<31>>31;p=k[f>>2]|0;if(p>>>0<(k[j>>2]|0)>>>0){k[f>>2]=p+1;q=l[p>>0]|0;r=m;break b}else{q=NVa(a)|0;r=m;break b}break}default:{q=o;r=0}}while(0);m=(b|0)==0;do if((b&-17|0)==0&(q|0)==48){p=k[f>>2]|0;if(p>>>0<(k[j>>2]|0)>>>0){k[f>>2]=p+1;s=l[p>>0]|0}else s=NVa(a)|0;if((s|32|0)!=120)if(m){t=8;u=s;v=46;break}else{w=b;x=s;v=32;break}p=k[f>>2]|0;if(p>>>0<(k[j>>2]|0)>>>0){k[f>>2]=p+1;y=l[p>>0]|0}else y=NVa(a)|0;if((l[320422+y>>0]|0)>15){p=(k[j>>2]|0)==0;if(!p)k[f>>2]=(k[f>>2]|0)+-1;if(!c){MVa(a,0);g=0;h=0;break a}if(p){g=0;h=0;break a}k[f>>2]=(k[f>>2]|0)+-1;g=0;h=0;break a}else{t=16;u=y;v=46}}else{p=m?10:b;if((l[320422+q>>0]|0)>>>0

      >>0){w=p;x=q;v=32}else{if(k[j>>2]|0)k[f>>2]=(k[f>>2]|0)+-1;MVa(a,0);p=HSa()|0;k[p>>2]=22;g=0;h=0;break a}}while(0);if((v|0)==32)if((w|0)==10){m=x+-48|0;if(m>>>0<10){p=m;m=0;while(1){z=(m*10|0)+p|0;A=k[f>>2]|0;if(A>>>0<(k[j>>2]|0)>>>0){k[f>>2]=A+1;B=l[A>>0]|0}else B=NVa(a)|0;p=B+-48|0;if(!(p>>>0<10&z>>>0<429496729)){C=z;D=B;break}else m=z}E=C;F=0;G=D}else{E=0;F=0;G=x}m=G+-48|0;if(m>>>0<10){p=E;z=F;A=m;m=G;while(1){H=Qyb(p|0,z|0,10,0)|0;I=M;J=((A|0)<0)<<31>>31;K=~J;if(I>>>0>K>>>0|(I|0)==(K|0)&H>>>0>~A>>>0){L=A;N=p;O=z;P=m;break}K=Hyb(H|0,I|0,A|0,J|0)|0;J=M;I=k[f>>2]|0;if(I>>>0<(k[j>>2]|0)>>>0){k[f>>2]=I+1;Q=l[I>>0]|0}else Q=NVa(a)|0;I=Q+-48|0;if(I>>>0<10&(J>>>0<429496729|(J|0)==429496729&K>>>0<2576980378)){p=K;z=J;A=I;m=Q}else{L=I;N=K;O=J;P=Q;break}}if(L>>>0>9){R=O;S=N;T=r}else{U=10;V=N;W=O;X=P;v=72}}else{R=F;S=E;T=r}}else{t=w;u=x;v=46}c:do if((v|0)==46){if(!(t+-1&t)){m=i[320678+((t*23|0)>>>5&7)>>0]|0;A=i[320422+u>>0]|0;z=A&255;if(z>>>0>>0){p=z;z=0;while(1){J=p|z<>2]|0;if(K>>>0<(k[j>>2]|0)>>>0){k[f>>2]=K+1;Y=l[K>>0]|0}else Y=NVa(a)|0;K=i[320422+Y>>0]|0;p=K&255;if(!(J>>>0<134217728&p>>>0>>0)){Z=J;_=K;$=Y;break}else z=J}aa=_;ba=0;ca=Z;da=$}else{aa=A;ba=0;ca=0;da=u}z=Iyb(-1,-1,m|0)|0;p=M;if((aa&255)>>>0>=t>>>0|(ba>>>0>p>>>0|(ba|0)==(p|0)&ca>>>0>z>>>0)){U=t;V=ca;W=ba;X=da;v=72;break}else{ea=ca;fa=ba;ga=aa}while(1){J=Kyb(ea|0,fa|0,m|0)|0;K=M;I=ga&255|J;J=k[f>>2]|0;if(J>>>0<(k[j>>2]|0)>>>0){k[f>>2]=J+1;ha=l[J>>0]|0}else ha=NVa(a)|0;ga=i[320422+ha>>0]|0;if((ga&255)>>>0>=t>>>0|(K>>>0>p>>>0|(K|0)==(p|0)&I>>>0>z>>>0)){U=t;V=I;W=K;X=ha;v=72;break c}else{ea=I;fa=K}}}z=i[320422+u>>0]|0;p=z&255;if(p>>>0>>0){m=p;p=0;while(1){A=m+(ia(p,t)|0)|0;K=k[f>>2]|0;if(K>>>0<(k[j>>2]|0)>>>0){k[f>>2]=K+1;ja=l[K>>0]|0}else ja=NVa(a)|0;K=i[320422+ja>>0]|0;m=K&255;if(!(A>>>0<119304647&m>>>0>>0)){ka=A;la=K;ma=ja;break}else p=A}na=la;oa=ka;pa=0;qa=ma}else{na=z;oa=0;pa=0;qa=u}if((na&255)>>>0>>0){p=Ryb(-1,-1,t|0,0)|0;m=M;A=pa;K=oa;I=na;J=qa;while(1){if(A>>>0>m>>>0|(A|0)==(m|0)&K>>>0>p>>>0){U=t;V=K;W=A;X=J;v=72;break c}H=Qyb(K|0,A|0,t|0,0)|0;ra=M;sa=I&255;if(ra>>>0>4294967295|(ra|0)==-1&H>>>0>~sa>>>0){U=t;V=K;W=A;X=J;v=72;break c}ta=Hyb(sa|0,0,H|0,ra|0)|0;ra=M;H=k[f>>2]|0;if(H>>>0<(k[j>>2]|0)>>>0){k[f>>2]=H+1;ua=l[H>>0]|0}else ua=NVa(a)|0;I=i[320422+ua>>0]|0;if((I&255)>>>0>=t>>>0){U=t;V=ta;W=ra;X=ua;v=72;break}else{A=ra;K=ta;J=ua}}}else{U=t;V=oa;W=pa;X=qa;v=72}}while(0);if((v|0)==72)if((l[320422+X>>0]|0)>>>0>>0){do{J=k[f>>2]|0;if(J>>>0<(k[j>>2]|0)>>>0){k[f>>2]=J+1;va=l[J>>0]|0}else va=NVa(a)|0}while((l[320422+va>>0]|0)>>>0>>0);J=HSa()|0;k[J>>2]=34;R=e;S=d;T=(d&1|0)==0&0==0?r:0}else{R=W;S=V;T=r}if(k[j>>2]|0)k[f>>2]=(k[f>>2]|0)+-1;if(!(R>>>0>>0|(R|0)==(e|0)&S>>>0>>0)){if(!((d&1|0)!=0|0!=0|(T|0)!=0)){J=HSa()|0;k[J>>2]=34;J=Hyb(d|0,e|0,-1,-1)|0;g=M;h=J;break}if(R>>>0>e>>>0|(R|0)==(e|0)&S>>>0>d>>>0){J=HSa()|0;k[J>>2]=34;g=e;h=d;break}}J=((T|0)<0)<<31>>31;K=Gyb(S^T|0,R^J|0,T|0,J|0)|0;g=M;h=K}while(0);M=g;return h|0}function MVa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;k[a+104>>2]=b;c=k[a+8>>2]|0;d=k[a+4>>2]|0;e=c-d|0;k[a+108>>2]=e;if((b|0)!=0&(e|0)>(b|0))k[a+100>>2]=d+b;else k[a+100>>2]=c;return}function NVa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0;b=a+104|0;c=k[b>>2]|0;if((c|0)!=0?(k[a+108>>2]|0)>=(c|0):0)d=4;else{c=vRa(a)|0;if((c|0)>=0){e=k[b>>2]|0;b=k[a+8>>2]|0;if(e){f=k[a+4>>2]|0;g=e-(k[a+108>>2]|0)+-1|0;e=b;if((b-f|0)>(g|0)){k[a+100>>2]=f+g;h=e}else{j=e;d=9}}else{j=b;d=9}if((d|0)==9){k[a+100>>2]=b;h=j}j=a+4|0;if(!h)m=k[j>>2]|0;else{b=k[j>>2]|0;j=a+108|0;k[j>>2]=h+1-b+(k[j>>2]|0);m=b}b=m+-1|0;if((l[b>>0]|0|0)==(c|0))n=c;else{i[b>>0]=c;n=c}}else d=4}if((d|0)==4){k[a+100>>2]=0;n=-1}return n|0}function OVa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=RLa(a)|0;a:do if(b>>>0>=6?(c=a+b+-6|0,(ZLa(c,320687,6)|0)==0):0){d=100;do{QVa(c)|0;if(!(hTa(a,448)|0)){e=a;break a}d=d+-1|0;if(!d)break;f=HSa()|0}while((k[f>>2]|0)==17);i[c>>0]=i[320687]|0;i[c+1>>0]=i[320688]|0;i[c+2>>0]=i[320689]|0;i[c+3>>0]=i[320690]|0;i[c+4>>0]=i[320691]|0;i[c+5>>0]=i[320692]|0;e=0}else g=3;while(0);if((g|0)==3){g=HSa()|0;k[g>>2]=22;e=0}return e|0}function PVa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+16|0;e=d;f=RLa(a)|0;a:do if(!(f>>>0<6|(f+-6|0)>>>0>>0)?(g=a+f+(0-b)+-6|0,(ZLa(g,320687,6)|0)==0):0){h=c|194;j=100;do{QVa(g)|0;k[e>>2]=384;l=WPa(a,h,e)|0;if((l|0)>-1){m=l;break a}j=j+-1|0;if(!j)break;l=HSa()|0}while((k[l>>2]|0)==17);i[g>>0]=i[320687]|0;i[g+1>>0]=i[320688]|0;i[g+2>>0]=i[320689]|0;i[g+3>>0]=i[320690]|0;i[g+4>>0]=i[320691]|0;i[g+5>>0]=i[320692]|0;m=-1}else n=4;while(0);if((n|0)==4){n=HSa()|0;k[n>>2]=22;m=-1}r=d;return m|0}function QVa(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b;rd(0,c|0)|0;d=0;e=(k[c+4>>2]|0)*65537^(c>>>4)+a;while(1){i[a+d>>0]=(e&15)+65|e<<1&32;d=d+1|0;if((d|0)==6)break;else e=e>>>5}r=b;return a|0}function RVa(a,b){a=a|0;b=b|0;return PVa(a,b,0)|0}function SVa(a){a=a|0;return PVa(a,0,0)|0}function TVa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+80|0;c=b;d=RLa(a)|0;do if(d>>>0>=6?(e=a+d+-6|0,(ZLa(e,320687,6)|0)==0):0){f=100;while(1){QVa(e)|0;if(vTa(a,c)|0)break;f=f+-1|0;if(!f){g=8;break}}if((g|0)==8){i[a>>0]=0;f=HSa()|0;k[f>>2]=17;break}f=HSa()|0;if((k[f>>2]|0)!=2)i[a>>0]=0}else g=3;while(0);if((g|0)==3){g=HSa()|0;k[g>>2]=22;i[a>>0]=0}r=b;return a|0}function UVa(a,b){a=a|0;b=b|0;return PVa(a,0,b)|0}function VVa(a){a=a|0;j[100449]=j[40096]|0;j[100450]=j[40097]|0;j[100451]=j[40098]|0;j[40096]=j[a>>1]|0;j[40097]=j[a+2>>1]|0;j[40098]=j[a+4>>1]|0;return 200898}function WVa(a){a=a|0;j[40096]=j[a>>1]|0;j[40097]=j[a+2>>1]|0;j[40098]=j[a+4>>1]|0;j[40099]=j[a+6>>1]|0;j[40100]=j[a+8>>1]|0;j[40101]=j[a+10>>1]|0;j[40102]=j[a+12>>1]|0;return}function XVa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;j[c>>1]=13070;j[c+2>>1]=a;j[c+4>>1]=a>>>16;VVa(c)|0;r=b;return}function YVa(a){a=a|0;var b=0;b=15088;k[b>>2]=a+-1;k[b+4>>2]=0;return}function ZVa(){var a=0,b=0,c=0;a=15088;b=Qyb(k[a>>2]|0,k[a+4>>2]|0,1284865837,1481765933)|0;a=Hyb(b|0,M|0,1,0)|0;b=M;c=15088;k[c>>2]=a;k[c+4>>2]=b;c=Iyb(a|0,b|0,33)|0;return c|0}function _Va(a){a=a|0;nd(56604);SXa(a);xf(56604);return}function $Va(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(c>>>0<8)d=0;else{nd(56604);e=(k[14156]|0)+-4|0;k[e>>2]=k[14154]<<8|k[14153]<<16|k[14155];do if(c>>>0>=32){if(c>>>0<64){k[14153]=7;break}if(c>>>0<128){k[14153]=15;break}if(c>>>0<256){k[14153]=31;break}else{k[14153]=63;break}}else k[14153]=0;while(0);k[14156]=b+4;SXa(a);k[(k[14156]|0)+-4>>2]=k[14154]<<8|k[14153]<<16|k[14155];xf(56604);d=e}return d|0}function aWa(a){a=a|0;var b=0;nd(56604);b=(k[14156]|0)+-4|0;k[b>>2]=k[14154]<<8|k[14153]<<16|k[14155];k[14156]=a+4;k[14153]=(k[a>>2]|0)>>>16;k[14154]=(k[a>>2]|0)>>>8&255;k[14155]=k[a>>2]&255;xf(56604);return b|0}function bWa(){var a=0,b=0,c=0,d=0;nd(56604);if(!(k[14153]|0)){a=k[14156]|0;b=(ia(k[a>>2]|0,1103515245)|0)+12345&2147483647;k[a>>2]=b;c=b}else{b=k[14156]|0;a=b+(k[14154]<<2)|0;k[a>>2]=(k[a>>2]|0)+(k[b+(k[14155]<<2)>>2]|0);a=k[14154]|0;d=(k[b+(a<<2)>>2]|0)>>>1;b=a+1|0;a=k[14153]|0;k[14154]=(b|0)==(a|0)?0:b;b=(k[14155]|0)+1|0;k[14155]=(b|0)==(a|0)?0:b;c=d}xf(56604);return c|0}function cWa(a){a=a|0;var b=0;b=(ia(k[a>>2]|0,1103515245)|0)+12345|0;k[a>>2]=b;a=b>>>11^b;b=a<<7&-1658038656^a;a=b<<15&-272236544^b;return (a>>>18^a)>>>1|0}function dWa(a){a=a|0;var b=0;b=fWa(a,80198)|0;a=Iyb(b|0,M|0,17)|0;return a|0}function eWa(){var a=0,b=0;a=fWa(80192,80198)|0;b=Iyb(a|0,M|0,17)|0;return b|0}function fWa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+2|0;d=a+4|0;e=Qyb((m[b+2>>1]|0)<<16|(m[b>>1]|0)|0,m[b+4>>1]|0|0,(m[c>>1]|0)<<16|(m[a>>1]|0)|0,m[d>>1]|0|0)|0;f=Hyb(e|0,M|0,m[b+6>>1]|0|0,0)|0;b=M;j[a>>1]=f;a=Iyb(f|0,b|0,16)|0;j[c>>1]=a;j[d>>1]=b;M=b&65535;return f|0}function gWa(a){a=a|0;var b=0;b=fWa(a,80198)|0;a=Kyb(b|0,M|0,4)|0;b=M|1072693248;k[t>>2]=a;k[t+4>>2]=b;return +(+p[t>>3]+-1.0)}function hWa(){var a=0,b=0;a=fWa(80192,80198)|0;b=Kyb(a|0,M|0,4)|0;a=M|1072693248;k[t>>2]=b;k[t+4>>2]=a;return +(+p[t>>3]+-1.0)}function iWa(a){a=a|0;var b=0;b=fWa(a,80198)|0;a=Iyb(b|0,M|0,16)|0;return a|0}function jWa(){var a=0,b=0;a=fWa(80192,80198)|0;b=Iyb(a|0,M|0,16)|0;return b|0}function kWa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=a;while(1)if((i[c>>0]|0)==47)c=c+1|0;else{d=c;break}c=yMa(d,47)|0;do if((c|0)==(d|0)|(i[c>>0]|0)!=0)e=7;else{a=c-d|0;if((a|0)<3){if((i[d>>0]|0)==46?(i[c+-1>>0]|0)==46:0){e=7;break}}else if((a|0)>255){f=HSa()|0;k[f>>2]=36;g=0;break}f=b;h=320694;j=f+9|0;do{i[f>>0]=i[h>>0]|0;f=f+1|0;h=h+1|0}while((f|0)<(j|0));Dyb(b+9|0,d|0,a+1|0)|0;g=b}while(0);if((e|0)==7){e=HSa()|0;k[e>>2]=22;g=0}return g|0}function lWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+288|0;e=d;f=d+4|0;g=kWa(a,d+8|0)|0;if(!g)h=-1;else{Wb(1,f|0)|0;k[e>>2]=c;c=WPa(g,b|657408,e)|0;Wb(k[f>>2]|0,0)|0;h=c}r=d;return h|0}function mWa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+272|0;c=kWa(a,b)|0;if(!c)d=-1;else d=jVa(c)|0;r=b;return d|0}function nWa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+32|0;h=g;do if((f&4095|0)==0&(((f|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){i=HSa()|0;k[i>>2]=12;j=-1;break}i=(d&16|0)!=0;if(i)Sf[1532&2047](-1);k[h>>2]=a;k[h+4>>2]=b;k[h+8>>2]=c;k[h+12>>2]=d;k[h+16>>2]=e;k[h+20>>2]=f>>12;l=KVa(Xd(192,h|0)|0)|0;if(i){kg[53&63]();j=l}else j=l}else{l=HSa()|0;k[l>>2]=22;j=-1}while(0);r=g;return j|0}function oWa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;Sf[1532&2047](-1);k[d>>2]=a;k[d+4>>2]=b;b=KVa(Yc(91,d|0)|0)|0;kg[53&63]();r=c;return b|0}function pWa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(We(151,d|0)|0)|0;r=c;return b|0}function qWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;f=a&-4096;k[e>>2]=f;k[e+4>>2]=(a+b+4096+-1&-4096)-f;k[e+8>>2]=c;c=KVa(zc(125,e|0)|0)|0;r=d;return c|0}function rWa(){var a=0,b=0;a=r;r=r+16|0;b=KVa(Tc(153,a|0)|0)|0;r=a;return b|0}function sWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(be(219,e|0)|0)|0;r=d;return c|0}function tWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(qc(144,e|0)|0)|0;r=d;return c|0}function uWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;if((c|0)==4)f=0;else{k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;f=0-(be(219,e|0)|0)|0}r=d;return f|0}function vWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=a;k[e+4>>2]=b;k[e+8>>2]=c;c=KVa(ae(218,e|0)|0)|0;r=d;return c|0}function wWa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=a;k[d+4>>2]=b;b=KVa(Sb(150,d|0)|0)|0;r=c;return b|0}function xWa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+48|0;g=f;h=f+24|0;k[h>>2]=e;e=(k[h>>2]|0)+(4-1)&~(4-1);i=k[e>>2]|0;k[h>>2]=e+4;k[g>>2]=a;k[g+4>>2]=b;k[g+8>>2]=c;k[g+12>>2]=d;k[g+16>>2]=i;i=KVa(xb(163,g|0)|0)|0;r=f;return i|0}function yWa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;a=KVa(jf(152,c|0)|0)|0;r=b;return a|0}function zWa(a,b){a=a|0;b=+b;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0;c=+X(+b);if(a>>>0<1067450368){b=c+-1.0;d=.15493708848953247-(b*(b*(b*(b*(b*(.03547830507159233-b*.002166375517845154)+-.11089469492435455)+.31834661960601807)+-.3722078800201416)+.41485610604286194)+-2.3621185682713985e-03)/(b*(b*(b*(b*(b*(b*.011984500102698803+.01363708358258009)+.12617121636867523)+.07182865589857101)+.5403979420661926)+.10642088204622269)+1.0)}else{b=1.0/(c*c);if(a>>>0<1077336941){e=b*(b*(b*(b*(b*(b*(6.570249557495117-b*.06042441353201866)+108.63500213623047)+429.0081481933594)+645.3872680664062)+434.5658874511719)+137.6577606201172)+19.65127182006836;f=b*(b*(b*(b*(b*(b*(-81.28743743896484-b*9.814329147338867)+-184.60508728027344)+-162.39666748046875)+-62.37533187866211)+-10.558626174926758)+-.6938585638999939)+-.009864944033324718}else{e=b*(b*(b*(b*(b*(474.5285339355469-b*22.44095230102539)+2553.05029296875)+3199.858154296875)+1536.7296142578125)+325.7925109863281)+30.33806037902832;f=b*(b*(b*(b*(b*(-1025.0950927734375-b*483.5191955566406)+-637.5664672851562)+-160.63638305664062)+-17.75795555114746)+-.7992832660675049)+-.009864943102002144}g=(k[t>>2]=(o[t>>2]=c,k[t>>2]|0)&-8192,+o[t>>2]);d=+fa(+(-.5625-g*g))*+fa(+((g-c)*(c+g)+f/(b*e+1.0)))/c}return +d}function AWa(a,b,c){a=a|0;b=+b;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,h=0.0,i=0.0,j=0,l=0,m=0,n=0,p=0.0;d=+$(+b);e=+_(+b);f=(c|0)!=0;g=f?-e:e;e=d+g;if(a>>>0<2130706432){h=d-g;i=-+_(+(b*2.0));c=d*g<0.0;g=c?h:i/e;d=c?i/h:e;if(a>>>0<1484783616){h=f?-g:g;f=(o[t>>2]=b,k[t>>2]|0)&2147483647;a=f>>>0>1090519039;if(!a)if(f>>>0>1089936471){j=65412;l=65368}else{c=f>>>0>1077336935;j=c?65300:65324;l=c?65260:65280}else{j=65388;l=65348}g=1.0/(b*b);i=d*((+o[j>>2]+g*(+o[j+4>>2]+g*(+o[j+8>>2]+g*(+o[j+12>>2]+g*(+o[j+16>>2]+g*+o[j+20>>2])))))/(g*(+o[l>>2]+g*(+o[l+4>>2]+g*(+o[l+8>>2]+g*(+o[l+12>>2]+g*+o[l+16>>2]))))+1.0)+1.0);if(!a)if(f>>>0>1089936471){m=65604;n=65556}else{a=f>>>0>1077336935;m=a?65484:65508;n=a?65436:65460}else{m=65580;n=65532}p=i-h*(((+o[m>>2]+g*(+o[m+4>>2]+g*(+o[m+8>>2]+g*(+o[m+12>>2]+g*(+o[m+16>>2]+g*+o[m+20>>2])))))/(g*(+o[n>>2]+g*(+o[n+4>>2]+g*(+o[n+8>>2]+g*(+o[n+12>>2]+g*(+o[n+16>>2]+g*+o[n+20>>2])))))+1.0)+-.125)/b)}else p=d}else p=e;return +(p*.564189612865448/+Y(+b))}function BWa(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0.0,f=0,g=0.0,h=0.0,i=0.0,j=0.0,l=0,m=0,n=0,o=0,q=0.0;e=+$(+b);f=(c|0)!=0;g=f?-e:e;e=+_(+b);h=g-e;if(a>>>0<2145386496){i=-g-e;j=+_(+(b*2.0));c=g*e>0.0;e=c?i:j/h;g=c?j/i:h;if(a>>>0<1207959552){i=f?-e:e;p[t>>3]=b;f=k[t+4>>2]&2147483647;a=f>>>0>1075838975;if(!a)if(f>>>0>1074933386){l=16792;m=16704}else{c=f>>>0>1074191212;l=c?16568:16616;m=c?16488:16528}else{l=16744;m=16664}e=1.0/(b*b);j=g*((+p[l>>3]+e*(+p[l+8>>3]+e*(+p[l+16>>3]+e*(+p[l+24>>3]+e*(+p[l+32>>3]+e*+p[l+40>>3])))))/(e*(+p[m>>3]+e*(+p[m+8>>3]+e*(+p[m+16>>3]+e*(+p[m+24>>3]+e*+p[m+32>>3]))))+1.0)+1.0);if(!a)if(f>>>0>1074933386){n=17176;o=17080}else{a=f>>>0>1074191212;n=a?16936:16984;o=a?16840:16888}else{n=17128;o=17032}q=j-i*(((+p[n>>3]+e*(+p[n+8>>3]+e*(+p[n+16>>3]+e*(+p[n+24>>3]+e*(+p[n+32>>3]+e*+p[n+40>>3])))))/(e*(+p[o>>3]+e*(+p[o+8>>3]+e*(+p[o+16>>3]+e*(+p[o+24>>3]+e*(+p[o+32>>3]+e*+p[o+40>>3])))))+1.0)+.375)/b)}else q=g}else q=h;return +(((d|0)==0?q:-q)*.5641895835477563/+Y(+b))}function CWa(a,b,c){a=a|0;b=+b;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,h=0.0,i=0.0,j=0,l=0,m=0,n=0,o=0.0;d=+$(+b);e=+_(+b);f=(c|0)!=0;g=f?-e:e;e=d+g;if(a>>>0<2145386496){h=d-g;i=-+_(+(b*2.0));c=d*g<0.0;g=c?h:i/e;d=c?i/h:e;if(a>>>0<1207959552){h=f?-g:g;p[t>>3]=b;f=k[t+4>>2]&2147483647;a=f>>>0>1075838975;if(!a)if(f>>>0>1074933386){j=16056;l=15968}else{c=f>>>0>1074191212;j=c?15832:15880;l=c?15752:15792}else{j=16008;l=15928}g=1.0/(b*b);i=d*((+p[j>>3]+g*(+p[j+8>>3]+g*(+p[j+16>>3]+g*(+p[j+24>>3]+g*(+p[j+32>>3]+g*+p[j+40>>3])))))/(g*(+p[l>>3]+g*(+p[l+8>>3]+g*(+p[l+16>>3]+g*(+p[l+24>>3]+g*+p[l+32>>3]))))+1.0)+1.0);if(!a)if(f>>>0>1074933386){m=16440;n=16344}else{a=f>>>0>1074191212;m=a?16200:16248;n=a?16104:16152}else{m=16392;n=16296}o=i-h*(((+p[m>>3]+g*(+p[m+8>>3]+g*(+p[m+16>>3]+g*(+p[m+24>>3]+g*(+p[m+32>>3]+g*+p[m+40>>3])))))/(g*(+p[n>>3]+g*(+p[n+8>>3]+g*(+p[n+16>>3]+g*(+p[n+24>>3]+g*(+p[n+32>>3]+g*+p[n+40>>3])))))+1.0)+-.125)/b)}else o=d}else o=e;return +(o*.5641895835477563/+Y(+b))}function DWa(a,b){a=a|0;b=+b;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0;c=+X(+b);if(a>>>0<1072955392){b=c+-1.0;d=.15493708848953247-(b*(b*(b*(b*(b*(.035478304325618236-b*.002166375594868791)+-.11089469428239668)+.31834661990116175)+-.3722078760357013)+.41485611868374833)+-2.3621185607526594e-03)/(b*(b*(b*(b*(b*(b*.011984499846799107+.01363708391202905)+.12617121980876164)+.07182865441419627)+.540397917702171)+.10642088040084423)+1.0)}else{b=1.0/(c*c);if(a>>>0<1074191213){e=b*(b*(b*(b*(b*(b*(6.570249770319282-b*.0604244152148581)+108.63500554177944)+429.00814002756783)+645.3872717332679)+434.56587747522923)+137.65775414351904)+19.651271667439257;f=b*(b*(b*(b*(b*(b*(-81.2874355063066-b*9.814329344169145)+-184.60509290671104)+-162.39666946257347)+-62.375332450326006)+-10.558626225323291)+-.6938585727071818)+-.009864944034847148}else{e=b*(b*(b*(b*(b*(474.52854120695537-b*22.44095244658582)+2553.0504064331644)+3199.8582195085955)+1536.729586084437)+325.7925129965739)+30.33806074348246;f=b*(b*(b*(b*(b*(-1025.0951316110772-b*483.5191916086514)+-637.5664433683896)+-160.63638485582192)+-17.757954917754752)+-.799283237680523)+-.0098649429247001}p[t>>3]=c;a=k[t+4>>2]|0;k[t>>2]=0;k[t+4>>2]=a;g=+p[t>>3];d=+fa(+(-.5625-g*g))*+fa(+((g-c)*(c+g)+f/(b*e+1.0)))/c}return +d}function EWa(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0.0,f=0,g=0.0,h=0.0,i=0.0,j=0.0,l=0,m=0,n=0.0;e=+$(+b);f=(c|0)!=0;g=f?-e:e;e=+_(+b);h=g-e;if(a>>>0<2130706432){i=-g-e;j=+_(+(b*2.0));c=g*e>0.0;e=c?i:j/h;g=c?j/i:h;if(a>>>0<1484783616){i=f?-e:e;f=(o[t>>2]=b,k[t>>2]|0);a=f&2147483647;if(a>>>0<=1090519039)if(a>>>0>1089936471){l=65140;m=65096}else{c=a>>>0>1077336935;l=c?65028:65052;m=c?64988:65008}else{l=65116;m=65076}e=1.0/(b*b);c=(f&2145386496)>>>0>1075838975;f=c?65164:65188;a=c?65212:65236;n=g*((+o[l>>2]+e*(+o[l+4>>2]+e*(+o[l+8>>2]+e*(+o[l+12>>2]+e*(+o[l+16>>2]+e*+o[l+20>>2])))))/(e*(+o[m>>2]+e*(+o[m+4>>2]+e*(+o[m+8>>2]+e*(+o[m+12>>2]+e*+o[m+16>>2]))))+1.0)+1.0)-i*(((+o[a>>2]+e*(+o[a+4>>2]+e*(+o[a+8>>2]+e*(+o[a+12>>2]+e*(+o[a+16>>2]+e*+o[a+20>>2])))))/(e*(+o[f>>2]+e*(+o[f+4>>2]+e*(+o[f+8>>2]+e*(+o[f+12>>2]+e*(+o[f+16>>2]+e*+o[f+20>>2])))))+1.0)+.375)/b)}else n=g}else n=h;return +(((d|0)==0?n:-n)*.564189612865448/+Y(+b))}function FWa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,k=0,n=0,o=0,p=0,q=0,r=0,s=0;c=(b<<1)+-1|0;d=b+-1|0;a:do if(!((a+-43008|0)>>>0<22272|((a+-11776|0)>>>0<30784|((a+-1536|0)>>>0<2560|(RIa(a)|0)==0)))){e=(b|0)!=0;if(e&(a+-4256|0)>>>0<46){if((a|0)>4293)switch(a|0){case 4295:case 4301:break;default:{f=a;break a}}f=a+7264|0;break}if((a+-11520|0)>>>0<38&(e^1)){if((a|0)>11557)switch(a|0){case 11559:case 11565:break;default:{f=a;break a}}f=a+-7264|0;break}else g=0;do{e=i[202176+(g<<2)+2>>0]|0;h=e<<24>>24;k=a-(m[202176+(g<<2)>>1]|0)|0;if((k-(h&d)|0)>>>0<(l[202176+(g<<2)+3>>0]|0)>>>0){n=e;o=h;p=k;q=13;break}g=g+1|0}while((g|0)!=61);if((q|0)==13)if(n<<24>>24==1){f=b+a-(p&1)|0;break}else{f=(ia(o,c)|0)+a|0;break}k=1-b|0;h=j[201684+(k<<1)>>1]|0;b:do if(h<<16>>16){e=h;r=0;while(1){if((e&65535|0)==(a|0)){s=r;break}r=r+1|0;e=j[201684+(r<<2)+(k<<1)>>1]|0;if(!(e<<16>>16))break b}f=m[201684+(s<<2)+(b<<1)>>1]|0;break a}while(0);if((a+-66600+(b*40|0)|0)>>>0<40)f=a+-40+(b*80|0)|0;else f=a}else f=a;while(0);return f|0}function GWa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;b=i[a>>0]|0;c=b<<24>>24==0;d=311333;while(1){a:do if(c){e=d;f=0;g=9}else{h=a;j=d;k=b;while(1){l=i[j>>0]|0;if(!(l<<24>>24)){e=j;f=k;g=9;break a}m=h;n=k;o=k&255;while(1){if(!((o+-48|0)>>>0>10&((o|32)+-97|0)>>>0>26)){p=m;q=n;break}r=m+1|0;s=i[r>>0]|0;if(!(s<<24>>24)){p=r;q=0;break}else{m=r;n=s;o=s&255}}if((q&255|32|0)!=(l&255|0))break a;h=p+1|0;o=j+1|0;k=i[h>>0]|0;if(!(k<<24>>24)){e=o;f=0;g=9;break}else j=o}}while(0);if((g|0)==9?(g=0,f<<24>>24==(i[e>>0]|0)):0){t=d;g=10;break}j=d+((RLa(d)|0)+1)|0;do if(!(i[j>>0]|0)){k=i[j+1>>0]|0;if((k&255)>128){u=j+2|0;break}else{u=j+((((128-(k&255)|0)>>>2)*5|0)+2)|0;break}}else u=j;while(0);if(!(i[u>>0]|0)){v=-1;break}else d=u}if((g|0)==10){if(!(i[t>>0]|0))w=t;else{g=t;while(1){t=g+((RLa(g)|0)+1)|0;if(!(i[t>>0]|0)){w=t;break}else g=t}}v=w+1-311333|0}return v|0}function HWa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0,S=0;e=r;r=r+16|0;f=e;a:do if(!b){g=a;h=21}else{j=a;l=b;m=c;b:while(1){n=i[m>>0]|0;switch(n<<24>>24){case 0:{g=j;h=21;break a;break}case 37:{o=m+1|0;q=i[o>>0]|0;if(q<<24>>24==37){s=o;t=37;h=3}else{u=o;o=q;q=m;v=0;c:while(1){w=o<<24>>24;switch(w|0){case 61:{x=q+2|0;y=v;break}case 33:case 43:case 40:case 94:{x=u;y=v;break}case 45:{x=u;y=1;break}default:{z=u;A=o;B=w;C=v;break c}}w=x+1|0;u=w;o=i[w>>0]|0;q=x;v=y}v=B+-48|0;if(v>>>0<10){q=z;o=0;u=v;while(1){v=u+(o*10|0)|0;w=q+1|0;D=i[w>>0]|0;u=(D<<24>>24)+-48|0;if(u>>>0>=10){E=w;F=D;G=v;break}else{q=w;o=v}}}else{E=z;F=A;G=0}if(F<<24>>24==35){o=E+1|0;q=i[o>>0]|0;u=(q<<24>>24)+-48|0;if(u>>>0<10){v=o;w=u;u=0;while(1){D=w+(u*10|0)|0;H=v+1|0;I=i[H>>0]|0;w=(I<<24>>24)+-48|0;if(w>>>0>=10){J=H;K=I;L=D;break}else{v=H;u=D}}}else{J=o;K=q;L=0}}else{J=E;K=F;L=0}if(K<<24>>24==46){u=J+1|0;v=(i[u>>0]|0)+-48|0;if(v>>>0<10){w=u;D=v;v=0;while(1){H=D+(v*10|0)|0;I=w+1|0;D=(i[I>>0]|0)+-48|0;if(D>>>0>=10){M=I;N=H;break}else{w=I;v=H}}}else{M=u;N=0}}else{M=J;N=2}v=L+1+N|0;w=(k[d>>2]|0)+(8-1)&~(8-1);O=+p[w>>3];k[d>>2]=w+8;k[f>>2]=(C|0)==0&(G|0)>(v|0)?G:v;k[f+4>>2]=N;p[f+8>>3]=O;v=uRa(j,l,324333,f)|0;if(l>>>0<=v>>>0)break b;P=j+v|0;Q=l-v|0;R=M}break}default:{s=m;t=n;h=3}}if((h|0)==3){h=0;i[j>>0]=t;P=j+1|0;Q=l+-1|0;R=s}if(!Q){g=P;h=21;break a}else{j=P;l=Q;m=R+1|0}}m=HSa()|0;k[m>>2]=7;S=-1}while(0);if((h|0)==21)S=g-a|0;r=e;return S|0}function IWa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;while(1)if((Me(a|0,c|0,0)|0)<0){d=HSa()|0;if((k[d>>2]|0)==4)continue;else break}else if(!(k[c>>2]&127))break;else continue;r=b;return}function JWa(){var a=0;a=aPa(1,524290,0)|0;do if((a|0)>=0)if((oPa(a,200904,12)|0)<0){$Ta(a)|0;break}else{k[12229]=a;break}while(0);return}function KWa(a){a=a|0;var b=0,c=0;b=a+8|0;if(!(k[b>>2]|0)){c=0-(uNa(k[a+4>>2]|0,k[a>>2]|0)|0)|0;k[b>>2]=c}return}function LWa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;f=r;r=r+112|0;g=f+28|0;h=f+8|0;j=f;l=RLa(a)|0;if((l|0)!=0?(m=l+-1|0,(i[a+m>>0]|0)==47):0)n=m;else n=l;m=d&1;if(!m)if((vTa(a,g)|0)<0){o=HSa()|0;if((k[o>>2]|0)==2?(gTa(a,g)|0)==0:0){p=7;q=15}else{s=o;q=10}}else q=11;else if(!(gTa(a,g)|0))q=11;else{s=HSa()|0;q=10}a:do if((q|0)==10)if((k[s>>2]|0)==13){p=4;q=15}else t=-1;else if((q|0)==11){o=k[g+12>>2]&61440;if((o|0)>=40960){switch(o|0){case 40960:break;default:{p=1;q=15;break a}}p=m<<1^7;q=15;break}switch(o|0){case 16384:break;default:{p=1;q=15;break a}}if((wUa(a,4)|0)<0){p=3;q=15}else{p=d>>>1&4|2;q=15}}while(0);b:do if((q|0)==15){m=(e|0)!=0;s=k[g>>2]|0;if((d&2|0)!=0&m?(s|0)!=(k[e+4>>2]|0):0){t=0;break}k[h>>2]=e;k[h+4>>2]=s;s=g+72|0;k[h+8>>2]=k[s>>2];if(!m){k[h+12>>2]=0;k[h+16>>2]=l+1;k[j+4>>2]=0;m=LLa(a,47)|0;if(!m)u=0;else u=m-a|0}else{m=(k[e+12>>2]|0)+1|0;k[h+12>>2]=m;k[h+16>>2]=l+1;k[j+4>>2]=m;u=k[e+16>>2]|0}k[j>>2]=u;m=(d&8|0)!=0;if(!m?(o=ig[b&127](a,g,p,j)|0,(o|0)!=0):0){t=o;break}if(e){o=k[g>>2]|0;v=k[s>>2]|0;s=e;do{if((k[s+4>>2]|0)==(o|0)?(k[s+8>>2]|0)==(v|0):0){t=0;break b}s=k[s>>2]|0}while((s|0)!=0)}do if((c|0)!=0&(p&3|0)==2){s=_Sa(a)|0;if(!s){v=HSa()|0;if((k[v>>2]|0)==13)break;else{t=-1;break b}}v=USa(s)|0;c:do if(v){o=4096-l|0;w=a+n|0;x=w+1|0;y=c+-1|0;z=v;while(1){A=z+11|0;d:do if((i[A>>0]|0)==46){switch(i[z+12>>0]|0){case 0:{break d;break}case 46:break;default:{q=35;break d}}if(i[z+13>>0]|0)q=35}else q=35;while(0);if((q|0)==35){q=0;if((RLa(A)|0)>>>0>=o>>>0){q=36;break}i[w>>0]=47;OLa(x,A)|0;B=LWa(a,b,y,d,h)|0;if(B){C=B;q=39;break}}z=USa(s)|0;if(!z)break c}if((q|0)==36){z=HSa()|0;k[z>>2]=36;$Sa(s)|0;t=-1;break b}else if((q|0)==39){$Sa(s)|0;t=C;break b}}while(0);$Sa(s)|0}while(0);i[a+l>>0]=0;if(m?(v=ig[b&127](a,g,p,j)|0,(v|0)!=0):0){t=v;break}t=0}while(0);r=f;return t|0}function MWa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=k[12008]|0;if((g|0)==0|(k[12010]|0)!=0){k[12010]=0;k[12011]=0;k[12008]=1;h=1}else h=g;a:do if(((h|0)<(a|0)?(g=k[b+(h<<2)>>2]|0,(g|0)!=0):0)?(i[g>>0]|0)==45:0){j=g+1|0;l=i[j>>0]|0;if(!f){if(l<<24>>24==45?(i[g+2>>0]|0)!=0:0){m=45;n=10}}else if(l<<24>>24){m=l;n=10}if((n|0)==10){l=k[d>>2]|0;o=m<<24>>24==45;b:do if(l){p=o?g+2|0:j;q=l;r=0;c:while(1){s=i[q>>0]|0;d:do if(!(s<<24>>24)){t=p;n=15}else{u=s;v=q;w=p;while(1){if(u<<24>>24!=(i[w>>0]|0))break d;v=v+1|0;x=w+1|0;u=i[v>>0]|0;if(!(u<<24>>24)){t=x;n=15;break}else w=x}}while(0);e:do if((n|0)==15){n=0;s=i[t>>0]|0;switch(s<<24>>24){case 61:case 0:break;default:break e}w=k[d+(r<<4)+4>>2]|0;if(s<<24>>24!=61){y=w;z=r;n=19;break c}if(w){A=r;B=t;n=18;break c}}while(0);r=r+1|0;q=k[d+(r<<4)>>2]|0;if(!q)break b}do if((n|0)==18){k[12013]=B+1;C=h;D=A}else if((n|0)==19)if((y|0)==1){q=h+1|0;k[12008]=q;r=k[b+(q<<2)>>2]|0;k[12013]=r;if(!r){E=58;break a}else{C=q;D=z;break}}else{k[12013]=0;C=h;D=z;break}while(0);k[12008]=C+1;if(e)k[e>>2]=D;q=k[d+(D<<4)+8>>2]|0;r=k[d+(D<<4)+12>>2]|0;if(!q){E=r;break a}k[q>>2]=r;E=0;break a}while(0);if(o){k[12008]=h+1;E=63;break}}E=QNa(a,b,c)|0}else E=-1;while(0);return E|0}function NWa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;f=r;r=r+240|0;g=f;k[g>>2]=a;a:do if((d|0)>1){h=0-b|0;i=d;j=a;l=a;m=1;while(1){n=j+h|0;o=i+-2|0;p=n+(0-(k[e+(o<<2)>>2]|0))|0;if((cg[c&1023](l,p)|0)>-1?(cg[c&1023](l,n)|0)>-1:0){q=m;break a}s=m+1|0;t=g+(m<<2)|0;if((cg[c&1023](p,n)|0)>-1){k[t>>2]=p;u=p;v=i+-1|0}else{k[t>>2]=n;u=n;v=o}if((v|0)<=1){q=s;break a}i=v;j=u;l=k[g>>2]|0;m=s}}else q=1;while(0);wYa(b,g,q);r=f;return}function OWa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;h=r;r=r+240|0;i=h;j=k[d>>2]|0;l=k[d+4>>2]|0;k[i>>2]=a;d=0-b|0;a:do if((l|0)!=0|(j|0)!=1?(m=a+(0-(k[g+(e<<2)>>2]|0))|0,(cg[c&1023](m,a)|0)>=1):0){n=a;o=e;p=(f|0)==0;q=m;m=j;s=l;t=1;while(1){if(p&(o|0)>1){u=n+d|0;v=k[g+(o+-2<<2)>>2]|0;if((cg[c&1023](u,q)|0)>-1){w=n;x=o;y=t;z=20;break a}if((cg[c&1023](u+(0-v)|0,q)|0)>-1){w=n;x=o;y=t;z=20;break a}}v=t+1|0;k[i+(t<<2)>>2]=q;u=m+-1|0;do if(u){if(!(u&1)){A=u;B=0;while(1){C=B+1|0;A=A>>>1;if(A&1){D=C;break}else B=C}if(D)E=D;else z=11}else z=11;if((z|0)==11){z=0;if(!s){F=64;z=16;break}if(!(s&1)){G=s;H=0}else{I=0;J=m;K=s;L=0;break}while(1){B=H+1|0;G=G>>>1;if(G&1){M=B;N=H;break}else H=B}if(!M){I=0;J=m;K=s;L=0;break}else E=N+33|0}if(E>>>0>31){F=E;z=16}else{I=E;J=m;K=s;L=E}}else{F=32;z=16}while(0);if((z|0)==16){z=0;I=F+-32|0;J=s;K=0;L=F}m=K<<32-I|J>>>I;s=K>>>I;u=L+o|0;if(!((s|0)!=0|(m|0)!=1)){w=q;x=u;y=v;z=20;break a}B=q+(0-(k[g+(u<<2)>>2]|0))|0;if((cg[c&1023](B,k[i>>2]|0)|0)<1){O=q;P=u;Q=0;R=v;z=19;break}else{A=q;o=u;p=1;q=B;t=v;n=A}}}else{O=a;P=e;Q=f;R=1;z=19}while(0);if((z|0)==19?(Q|0)==0:0){w=O;x=P;y=R;z=20}if((z|0)==20){wYa(b,i,y);NWa(w,b,c,x,g)}r=h;return}function PWa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;f=r;r=r+176|0;g=f;h=g+8|0;i=g+4|0;j=f+112+4|0;l=g+44|0;m=g;n=m+112|0;do{k[m>>2]=0;m=m+4|0}while((m|0)<(n|0));k[l>>2]=j;k[g+48>>2]=60;k[g+76>>2]=-1;k[g+32>>2]=165;j=a;while(1)if(!(dJa(k[j>>2]|0)|0)){o=j;break}else j=j+4|0;k[g+84>>2]=o;MVa(g,0);j=LVa(g,c,1,d,e)|0;if(b){e=(k[i>>2]|0)-(k[h>>2]|0)+(k[g+108>>2]|0)|0;k[b>>2]=(e|0)==0?a:o+(e<<2)|0}r=f;return j|0}function QWa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=r;r=r+112|0;g=f;k[g>>2]=0;h=g+4|0;k[h>>2]=a;k[g+44>>2]=a;i=g+8|0;k[i>>2]=(a|0)<0?-1:a+2147483647|0;k[g+76>>2]=-1;MVa(g,0);j=LVa(g,c,1,d,e)|0;if(b)k[b>>2]=a+((k[h>>2]|0)+(k[g+108>>2]|0)-(k[i>>2]|0));r=f;return j|0}function RWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0.0;d=r;r=r+112|0;e=d;f=e;g=f+112|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=e+4|0;k[f>>2]=a;g=e+8|0;k[g>>2]=-1;k[e+44>>2]=a;k[e+76>>2]=-1;MVa(e,0);h=+JVa(e,c,1);c=(k[f>>2]|0)-(k[g>>2]|0)+(k[e+108>>2]|0)|0;if(b)k[b>>2]=(c|0)!=0?a+c|0:a;r=d;return +h}function SWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0;d=r;r=r+176|0;e=d;f=e+8|0;g=e+4|0;h=d+112+4|0;i=e+44|0;j=e;l=j+112|0;do{k[j>>2]=0;j=j+4|0}while((j|0)<(l|0));k[i>>2]=h;k[e+48>>2]=60;k[e+76>>2]=-1;k[e+32>>2]=166;h=a;while(1)if(!(dJa(k[h>>2]|0)|0)){m=h;break}else h=h+4|0;k[e+84>>2]=m;MVa(e,0);n=+JVa(e,c,1);if(b){c=(k[g>>2]|0)-(k[f>>2]|0)+(k[e+108>>2]|0)|0;k[b>>2]=(c|0)==0?a:m+(c<<2)|0}r=d;return +n}function TWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=zYa(1,132)|0;if(d){e=d+112|0;OLa(e,c)|0;k[d+4>>2]=e;e=k[b>>2]|0;if(e)k[e>>2]=d;k[b>>2]=d;if(!(k[a>>2]|0))k[a>>2]=d}return d|0}function UWa(a){a=a|0;$Ta(a)|0;return} -function Cia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0;d=r;r=r+9216|0;e=d+8840|0;f=d+8760|0;g=d+8680|0;h=d+8600|0;i=d+8520|0;j=d+8440|0;l=d+8360|0;m=d+8280|0;n=d+8200|0;o=d+8120|0;p=d+8040|0;q=d+7960|0;s=d+7880|0;t=d+7800|0;u=d+9192|0;v=d+7720|0;w=d+7640|0;y=d+7560|0;z=d+7480|0;A=d+7400|0;B=d+9180|0;C=d+9168|0;D=d+9156|0;E=d+7320|0;F=d+7240|0;G=d+7160|0;H=d+7080|0;I=d+7e3|0;J=d+6920|0;K=d+6840|0;L=d+6760|0;N=d+6680|0;O=d+6600|0;P=d+6520|0;Q=d+6440|0;R=d+6360|0;S=d+6280|0;T=d+6200|0;U=d+6120|0;V=d+6040|0;W=d+5960|0;X=d+5880|0;Y=d+5800|0;Z=d+5720|0;_=d+5640|0;$=d+5560|0;aa=d+5480|0;ba=d+5400|0;ca=d+5320|0;da=d+5240|0;ea=d+5160|0;fa=d+5080|0;ga=d+5e3|0;ha=d+4920|0;ia=d+4840|0;ja=d+4760|0;ka=d+4680|0;la=d+4600|0;ma=d+4520|0;na=d+4440|0;oa=d+4360|0;qa=d+4280|0;ra=d+4200|0;sa=d+4120|0;ta=d+9144|0;ua=d+4040|0;wa=d+3960|0;ya=d+3880|0;za=d+3800|0;Aa=d+3720|0;Ca=d+3640|0;Da=d+3560|0;Ea=d+3480|0;Fa=d+3400|0;Ga=d+3320|0;Ha=d+3240|0;Ia=d+3160|0;Ja=d+3080|0;Ka=d+3e3|0;La=d+2920|0;Ma=d+2840|0;Na=d+2760|0;Oa=d+2680|0;Pa=d+2600|0;Qa=d+2520|0;Ra=d+2440|0;Sa=d+2360|0;Ua=d+2280|0;Va=d+2080|0;Wa=d+2e3|0;Xa=d+1880|0;Ya=d+1760|0;Za=d+1640|0;_a=d+1560|0;$a=d+9032|0;ab=d+9020|0;bb=d+9008|0;cb=d+1320|0;db=d+1160|0;eb=d+1080|0;gb=d+1e3|0;hb=d+920|0;ib=d+840|0;jb=d+9132|0;kb=d+8920|0;lb=d+9104|0;mb=d+2240|0;ob=d+440|0;pb=d+360|0;qb=d+9088|0;rb=d+9072|0;sb=d+2200|0;tb=d+2160|0;ub=d+9044|0;vb=d+1960|0;wb=d+1840|0;xb=d+1720|0;yb=d+280|0;zb=d+1520|0;Ab=d+1480|0;Bb=d+1440|0;Cb=d+1400|0;Db=d+1240|0;Eb=d+8996|0;Fb=d+240|0;Gb=d+8984|0;Hb=d+160|0;Ib=d+800|0;Jb=d+80|0;Kb=d+760|0;Lb=d+720|0;Mb=d+8956|0;Nb=d+680|0;Ob=d;Pb=d+640|0;Qb=d+600|0;Rb=d+560|0;Sb=d+8944|0;Tb=d+8928|0;Ub=d+520|0;Vb=b+36|0;Wb=(k[Vb>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,Wb|0,e|0,588,285183,276209);Wb=x;x=0;if(Wb&1){Wb=Hc()|0;K2a(e);Sc(Wb|0)}K2a(e);Wb=k[Vb>>2]|0;Xb=(Vf[k[(k[Wb>>2]|0)+36>>2]&1023](Wb)|0)^1;q2a(jb,258842,43);x=0;pa(57,Xb|0,jb|0,276,258380,258886);Xb=x;x=0;if(Xb&1){Xb=Hc()|0;Wb=M;K2a(jb);Yb=Xb;Zb=Wb;Sc(Yb|0)}K2a(jb);k[kb>>2]=k[a>>2];jb=b+32|0;do if(!(k[jb>>2]|0)){Wb=(k[Vb>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,Wb|0,e|0,588,285183,276209);Wb=x;x=0;if(Wb&1){Wb=Hc()|0;K2a(e);Sc(Wb|0)}else{K2a(e);Wb=k[Vb>>2]|0;_b=cg[k[(k[Wb>>2]|0)+28>>2]&1023](Wb,1)|0;break}}else _b=1;while(0);Wb=k[b+24>>2]|0;switch(Wb|0){case 1:{do if(!(Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0)){Xb=(k[a>>2]|0)+48|0;k[e>>2]=2;$b=e+8|0;ac=b+48|0;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));cc=e+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=e+56|0;dc=e+60|0;ec=e+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,Xb|0,e|0)|0;cc=x;x=0;if(!(cc&1)){cc=k[ec>>2]|0;if(cc)j0a(cc);cc=k[dc>>2]|0;if(cc)j0a(cc);break}cc=Hc()|0;fc=k[ec>>2]|0;if(fc)j0a(fc);fc=k[dc>>2]|0;if(!fc)Sc(cc|0);j0a(fc);Sc(cc|0)}while(0);do if(_b>>>0>1){cc=(k[a>>2]|0)+48|0;k[e>>2]=2;k[e+8>>2]=_b;fc=e+12|0;k[fc>>2]=k[lb>>2];k[fc+4>>2]=k[lb+4>>2];k[fc+8>>2]=k[lb+8>>2];k[fc+12>>2]=k[lb+12>>2];k[fc+16>>2]=k[lb+16>>2];k[fc+20>>2]=k[lb+20>>2];k[fc+24>>2]=k[lb+24>>2];k[e+40>>2]=1;fc=e+48|0;k[fc>>2]=-1;k[fc+4>>2]=-1;fc=e+56|0;dc=e+60|0;ec=e+72|0;k[fc>>2]=0;k[fc+4>>2]=0;k[fc+8>>2]=0;k[fc+12>>2]=0;k[fc+16>>2]=0;x=0;Ta(539,cc|0,e|0)|0;fc=x;x=0;if(fc&1){fc=Hc()|0;gc=k[ec>>2]|0;if(gc)j0a(gc);gc=k[dc>>2]|0;if(!gc)Sc(fc|0);j0a(gc);Sc(fc|0)}fc=k[ec>>2]|0;if(fc)j0a(fc);fc=k[dc>>2]|0;if(fc)j0a(fc);k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;fc=e+48|0;k[fc>>2]=-1;k[fc+4>>2]=-1;fc=e+56|0;dc=e+60|0;ec=e+72|0;k[fc>>2]=0;k[fc+4>>2]=0;k[fc+8>>2]=0;k[fc+12>>2]=0;k[fc+16>>2]=0;x=0;Ta(539,cc|0,e|0)|0;cc=x;x=0;if(!(cc&1)){cc=k[ec>>2]|0;if(cc)j0a(cc);cc=k[dc>>2]|0;if(cc)j0a(cc);break}cc=Hc()|0;fc=k[ec>>2]|0;if(fc)j0a(fc);fc=k[dc>>2]|0;if(!fc)Sc(cc|0);j0a(fc);Sc(cc|0)}while(0);lb=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=128;k[e+40>>2]=1;cc=e+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=e+56|0;fc=e+60|0;dc=e+72|0;ec=lb+48|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,ec|0,e|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;lb=k[dc>>2]|0;if(lb)j0a(lb);lb=k[fc>>2]|0;if(!lb)Sc(cc|0);j0a(lb);Sc(cc|0)}cc=k[dc>>2]|0;if(cc)j0a(cc);cc=k[fc>>2]|0;if(cc)j0a(cc);k[e>>2]=1;k[e+8>>2]=130;k[e+40>>2]=1;cc=e+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=e+56|0;fc=e+60|0;dc=e+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,ec|0,e|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;lb=k[dc>>2]|0;if(lb)j0a(lb);lb=k[fc>>2]|0;if(!lb)Sc(cc|0);j0a(lb);Sc(cc|0)}cc=k[dc>>2]|0;if(cc)j0a(cc);cc=k[fc>>2]|0;if(cc)j0a(cc);k[e>>2]=1;k[e+8>>2]=132;k[e+40>>2]=1;cc=e+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=e+56|0;fc=e+60|0;dc=e+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,ec|0,e|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;cc=k[dc>>2]|0;if(cc)j0a(cc);cc=k[fc>>2]|0;if(!cc)Sc(ec|0);j0a(cc);Sc(ec|0)}ec=k[dc>>2]|0;if(ec)j0a(ec);ec=k[fc>>2]|0;if(ec)j0a(ec);ec=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=55;k[e+40>>2]=1;fc=e+48|0;k[fc>>2]=-1;k[fc+4>>2]=-1;fc=e+56|0;dc=e+60|0;cc=e+72|0;k[fc>>2]=0;k[fc+4>>2]=0;k[fc+8>>2]=0;k[fc+12>>2]=0;k[fc+16>>2]=0;x=0;Ta(539,ec+48|0,e|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;fc=k[cc>>2]|0;if(fc)j0a(fc);fc=k[dc>>2]|0;if(!fc)Sc(ec|0);j0a(fc);Sc(ec|0)}ec=k[cc>>2]|0;if(ec)j0a(ec);ec=k[dc>>2]|0;if(ec)j0a(ec);ec=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=130;k[e+40>>2]=1;dc=e+48|0;k[dc>>2]=-1;k[dc+4>>2]=-1;dc=e+56|0;cc=e+60|0;fc=e+72|0;lb=ec+48|0;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[dc+16>>2]=0;x=0;Ta(539,lb|0,e|0)|0;dc=x;x=0;if(dc&1){dc=Hc()|0;ec=k[fc>>2]|0;if(ec)j0a(ec);ec=k[cc>>2]|0;if(!ec)Sc(dc|0);j0a(ec);Sc(dc|0)}dc=k[fc>>2]|0;if(dc)j0a(dc);dc=k[cc>>2]|0;if(dc)j0a(dc);k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;dc=e+48|0;k[dc>>2]=-1;k[dc+4>>2]=-1;dc=e+56|0;cc=e+60|0;fc=e+72|0;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[dc+16>>2]=0;x=0;Ta(539,lb|0,e|0)|0;lb=x;x=0;if(lb&1){lb=Hc()|0;dc=k[fc>>2]|0;if(dc)j0a(dc);dc=k[cc>>2]|0;if(!dc)Sc(lb|0);j0a(dc);Sc(lb|0)}lb=k[fc>>2]|0;if(lb)j0a(lb);lb=k[cc>>2]|0;if(lb)j0a(lb);lb=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=145;k[e+40>>2]=1;cc=e+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=e+56|0;fc=e+60|0;dc=e+72|0;ec=lb+48|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,ec|0,e|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;lb=k[dc>>2]|0;if(lb)j0a(lb);lb=k[fc>>2]|0;if(!lb)Sc(cc|0);j0a(lb);Sc(cc|0)}cc=k[dc>>2]|0;if(cc)j0a(cc);cc=k[fc>>2]|0;if(cc)j0a(cc);k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;cc=e+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=e+56|0;fc=e+60|0;dc=e+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,ec|0,e|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;lb=k[dc>>2]|0;if(lb)j0a(lb);lb=k[fc>>2]|0;if(!lb)Sc(cc|0);j0a(lb);Sc(cc|0)}cc=k[dc>>2]|0;if(cc)j0a(cc);cc=k[fc>>2]|0;if(cc)j0a(cc);k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;cc=e+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=e+56|0;fc=e+60|0;dc=e+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,ec|0,e|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;cc=k[dc>>2]|0;if(cc)j0a(cc);cc=k[fc>>2]|0;if(!cc)Sc(ec|0);j0a(cc);Sc(ec|0)}else{ec=k[dc>>2]|0;if(ec)j0a(ec);ec=k[fc>>2]|0;if(ec)j0a(ec);r=d;return}break}case 2:{yia(a,b,0);ec=(k[Vb>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,ec|0,e|0,588,285183,276209);ec=x;x=0;if(ec&1){ec=Hc()|0;K2a(e);Sc(ec|0)}K2a(e);ec=k[Vb>>2]|0;if(!(Vf[k[(k[ec>>2]|0)+56>>2]&1023](ec)|0)){ec=k[a>>2]|0;k[mb>>2]=0;k[mb+32>>2]=1;fc=ec+48|0;k[e>>2]=2;$b=e+8|0;ac=mb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));mb=e+48|0;k[mb>>2]=-1;k[mb+4>>2]=-1;mb=e+56|0;ec=e+60|0;dc=e+72|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;x=0;Ta(539,fc|0,e|0)|0;mb=x;x=0;if(mb&1){mb=Hc()|0;cc=k[dc>>2]|0;if(cc)j0a(cc);cc=k[ec>>2]|0;if(!cc)Sc(mb|0);j0a(cc);Sc(mb|0)}mb=k[dc>>2]|0;if(mb)j0a(mb);mb=k[ec>>2]|0;if(mb)j0a(mb);k[e>>2]=1;k[e+8>>2]=146;k[e+40>>2]=1;mb=e+48|0;k[mb>>2]=-1;k[mb+4>>2]=-1;mb=e+56|0;ec=e+60|0;dc=e+72|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;x=0;Ta(539,fc|0,e|0)|0;fc=x;x=0;if(fc&1){fc=Hc()|0;mb=k[dc>>2]|0;if(mb)j0a(mb);mb=k[ec>>2]|0;if(!mb)Sc(fc|0);j0a(mb);Sc(fc|0)}fc=k[dc>>2]|0;if(fc)j0a(fc);fc=k[ec>>2]|0;if(fc)j0a(fc);fc=(k[a>>2]|0)+48|0;ec=k[fc>>2]|0;k[fc>>2]=ec+1;k[ob>>2]=8;k[ob+8>>2]=ec;k[ob+40>>2]=1;ec=ob+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=ob+56|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,(k[a>>2]|0)+48|0,ob|0)|0;ec=x;x=0;do if(ec&1)hc=226;else{fc=k[a>>2]|0;k[ib>>2]=1;k[ib+8>>2]=129;k[ib+40>>2]=1;dc=ib+48|0;k[dc>>2]=-1;k[dc+4>>2]=-1;dc=ib+56|0;mb=ib+60|0;cc=ib+72|0;lb=fc+48|0;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[dc+16>>2]=0;x=0;Ta(539,lb|0,ib|0)|0;dc=x;x=0;if(dc&1){dc=Hc()|0;fc=M;gc=k[cc>>2]|0;if(gc)j0a(gc);gc=k[mb>>2]|0;if(!gc){ic=fc;jc=dc;hc=227;break}j0a(gc);ic=fc;jc=dc;hc=227;break}dc=k[cc>>2]|0;if(dc)j0a(dc);dc=k[mb>>2]|0;if(dc)j0a(dc);k[hb>>2]=1;k[hb+8>>2]=132;k[hb+40>>2]=1;dc=hb+48|0;k[dc>>2]=-1;k[dc+4>>2]=-1;dc=hb+56|0;mb=hb+60|0;cc=hb+72|0;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[dc+16>>2]=0;x=0;Ta(539,lb|0,hb|0)|0;lb=x;x=0;if(lb&1){lb=Hc()|0;dc=M;fc=k[cc>>2]|0;if(fc)j0a(fc);fc=k[mb>>2]|0;if(!fc){ic=dc;jc=lb;hc=227;break}j0a(fc);ic=dc;jc=lb;hc=227;break}lb=k[cc>>2]|0;if(lb)j0a(lb);lb=k[mb>>2]|0;if(lb)j0a(lb);lb=k[a>>2]|0;k[gb>>2]=1;k[gb+8>>2]=16;k[gb+40>>2]=1;mb=gb+48|0;k[mb>>2]=-1;k[mb+4>>2]=-1;mb=gb+56|0;cc=gb+60|0;dc=gb+72|0;fc=lb+48|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;x=0;Ta(539,fc|0,gb|0)|0;mb=x;x=0;if(mb&1){mb=Hc()|0;lb=M;gc=k[dc>>2]|0;if(gc)j0a(gc);gc=k[cc>>2]|0;if(!gc){ic=lb;jc=mb;hc=227;break}j0a(gc);ic=lb;jc=mb;hc=227;break}mb=k[dc>>2]|0;if(mb)j0a(mb);mb=k[cc>>2]|0;if(mb)j0a(mb);k[eb>>2]=1;k[eb+8>>2]=21;k[eb+40>>2]=1;mb=eb+48|0;k[mb>>2]=-1;k[mb+4>>2]=-1;mb=eb+56|0;cc=eb+60|0;dc=eb+72|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;x=0;Ta(539,fc|0,eb|0)|0;fc=x;x=0;if(fc&1){fc=Hc()|0;mb=M;lb=k[dc>>2]|0;if(lb)j0a(lb);lb=k[cc>>2]|0;if(!lb){ic=mb;jc=fc;hc=227;break}j0a(lb);ic=mb;jc=fc;hc=227;break}fc=k[dc>>2]|0;if(fc)j0a(fc);fc=k[cc>>2]|0;if(fc)j0a(fc);x=0;xa(819,pb|0,k[a>>2]|0);fc=x;x=0;if(fc&1){hc=226;break}fc=k[a>>2]|0;k[db>>2]=1;k[db+8>>2]=130;k[db+40>>2]=1;cc=db+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=db+56|0;dc=db+60|0;mb=db+72|0;lb=fc+48|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,lb|0,db|0)|0;cc=x;x=0;a:do if(cc&1){fc=Hc()|0;gc=M;kc=k[mb>>2]|0;if(kc)j0a(kc);kc=k[dc>>2]|0;if(!kc){lc=gc;mc=fc;hc=229;break}j0a(kc);lc=gc;mc=fc;hc=229}else{fc=k[mb>>2]|0;if(fc)j0a(fc);fc=k[dc>>2]|0;if(fc)j0a(fc);k[cb>>2]=1;k[cb+8>>2]=132;k[cb+40>>2]=1;fc=cb+48|0;k[fc>>2]=-1;k[fc+4>>2]=-1;fc=cb+56|0;gc=cb+60|0;kc=cb+72|0;k[fc>>2]=0;k[fc+4>>2]=0;k[fc+8>>2]=0;k[fc+12>>2]=0;k[fc+16>>2]=0;x=0;Ta(539,lb|0,cb|0)|0;fc=x;x=0;if(fc&1){fc=Hc()|0;nc=M;oc=k[kc>>2]|0;if(oc)j0a(oc);oc=k[gc>>2]|0;if(!oc){lc=nc;mc=fc;hc=229;break}j0a(oc);lc=nc;mc=fc;hc=229;break}fc=k[kc>>2]|0;if(fc)j0a(fc);fc=k[gc>>2]|0;if(fc)j0a(fc);x=0;fb(318,a|0,b|0,0);fc=x;x=0;b:do if(!(fc&1)){gc=k[a>>2]|0;kc=k[Vb>>2]|0;x=0;fb(140,bb|0,329672,0);nc=x;x=0;if(nc&1)break;x=0;pa(57,(kc|0)!=0|0,bb|0,588,285183,276209);kc=x;x=0;if(kc&1){kc=Hc()|0;nc=M;K2a(bb);lc=nc;mc=kc;hc=229;break a}K2a(bb);x=0;nb(134,qb|0,gc|0,k[Vb>>2]|0,1);gc=x;x=0;if(gc&1)break;k[rb>>2]=-1;k[rb+4>>2]=-1;k[rb+8>>2]=0;gc=rb+12|0;k[gc>>2]=0;x=0;fb(120,qb|0,rb|0,1);kc=x;x=0;if(kc&1){kc=Hc()|0;nc=M;oc=k[gc>>2]|0;if(!oc){pc=kc;qc=nc;break a}j0a(oc);pc=kc;qc=nc;break a}nc=k[gc>>2]|0;if(nc)j0a(nc);nc=k[Vb>>2]|0;x=0;fb(140,ab|0,329672,0);gc=x;x=0;if(gc&1)break;x=0;pa(57,(nc|0)!=0|0,ab|0,588,285183,276209);nc=x;x=0;if(nc&1){nc=Hc()|0;gc=M;K2a(ab);lc=gc;mc=nc;hc=229;break a}K2a(ab);nc=k[Vb>>2]|0;do if(nc){gc=iDa(nc,168,6704,0)|0;if(!gc){hc=234;break}x=0;fb(319,a|0,gc|0,c|0);gc=x;x=0;if(gc&1)break b}else hc=234;while(0);do if((hc|0)==234){x=0;fb(140,$a|0,329672,0);gc=x;x=0;if(gc&1)break b;x=0;pa(57,(nc|0)!=0|0,$a|0,588,285183,276209);gc=x;x=0;if(!(gc&1)){K2a($a);x=0;fb(320,kb|0,k[Vb>>2]|0,1);gc=x;x=0;if(gc&1)break b;else break}else{gc=Hc()|0;kc=M;K2a($a);lc=kc;mc=gc;hc=229;break a}}while(0);nc=k[a>>2]|0;k[_a>>2]=1;k[_a+8>>2]=146;k[_a+40>>2]=1;gc=_a+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=_a+56|0;kc=_a+60|0;oc=_a+72|0;rc=nc+48|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,rc|0,_a|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;nc=M;sc=k[oc>>2]|0;if(sc)j0a(sc);sc=k[kc>>2]|0;if(!sc){lc=nc;mc=gc;hc=229;break a}j0a(sc);lc=nc;mc=gc;hc=229;break a}gc=k[oc>>2]|0;if(gc)j0a(gc);gc=k[kc>>2]|0;if(gc)j0a(gc);k[sb>>2]=1;k[sb+32>>2]=1;k[Za>>2]=2;$b=Za+8|0;ac=sb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));gc=Za+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=Za+56|0;kc=Za+60|0;oc=Za+72|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,rc|0,Za|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;nc=M;sc=k[oc>>2]|0;if(sc)j0a(sc);sc=k[kc>>2]|0;if(!sc){lc=nc;mc=gc;hc=229;break a}j0a(sc);lc=nc;mc=gc;hc=229;break a}gc=k[oc>>2]|0;if(gc)j0a(gc);gc=k[kc>>2]|0;if(gc)j0a(gc);k[Ya>>2]=1;k[Ya+8>>2]=1;k[Ya+40>>2]=1;gc=Ya+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=Ya+56|0;kc=Ya+60|0;oc=Ya+72|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,rc|0,Ya|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;nc=M;sc=k[oc>>2]|0;if(sc)j0a(sc);sc=k[kc>>2]|0;if(!sc){lc=nc;mc=gc;hc=229;break a}j0a(sc);lc=nc;mc=gc;hc=229;break a}gc=k[oc>>2]|0;if(gc)j0a(gc);gc=k[kc>>2]|0;if(gc)j0a(gc);gc=k[a>>2]|0;k[Xa>>2]=1;k[Xa+8>>2]=146;k[Xa+40>>2]=1;kc=Xa+48|0;k[kc>>2]=-1;k[kc+4>>2]=-1;kc=Xa+56|0;oc=Xa+60|0;nc=Xa+72|0;k[kc>>2]=0;k[kc+4>>2]=0;k[kc+8>>2]=0;k[kc+12>>2]=0;k[kc+16>>2]=0;x=0;Ta(539,gc+48|0,Xa|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;kc=M;sc=k[nc>>2]|0;if(sc)j0a(sc);sc=k[oc>>2]|0;if(!sc){lc=kc;mc=gc;hc=229;break a}j0a(sc);lc=kc;mc=gc;hc=229;break a}gc=k[nc>>2]|0;if(gc)j0a(gc);gc=k[oc>>2]|0;if(gc)j0a(gc);x=0;fb(314,Wa|0,(k[a>>2]|0)+48|0,ob|0);gc=x;x=0;if(gc&1)break;gc=k[Wa+72>>2]|0;if(gc)j0a(gc);gc=k[Wa+60>>2]|0;if(gc)j0a(gc);x=0;Ta(539,(k[a>>2]|0)+48|0,pb|0)|0;gc=x;x=0;if(gc&1)break;gc=k[a>>2]|0;k[Va>>2]=1;k[Va+8>>2]=146;k[Va+40>>2]=1;oc=Va+48|0;k[oc>>2]=-1;k[oc+4>>2]=-1;oc=Va+56|0;nc=Va+60|0;kc=Va+72|0;k[oc>>2]=0;k[oc+4>>2]=0;k[oc+8>>2]=0;k[oc+12>>2]=0;k[oc+16>>2]=0;x=0;Ta(539,gc+48|0,Va|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;oc=M;sc=k[kc>>2]|0;if(sc)j0a(sc);sc=k[nc>>2]|0;if(!sc){lc=oc;mc=gc;hc=229;break a}j0a(sc);lc=oc;mc=gc;hc=229;break a}gc=k[kc>>2]|0;if(gc)j0a(gc);gc=k[nc>>2]|0;if(gc)j0a(gc);x=0;xa(822,kb|0,3);gc=x;x=0;if(gc&1)break;gc=k[pb+72>>2]|0;if(gc)j0a(gc);gc=k[pb+60>>2]|0;if(gc)j0a(gc);gc=k[ob+72>>2]|0;if(gc)j0a(gc);gc=k[ob+60>>2]|0;if(gc)j0a(gc);r=d;return}while(0);fc=Hc()|0;lc=M;mc=fc;hc=229}while(0);if((hc|0)==229){pc=mc;qc=lc}lb=k[pb+72>>2]|0;if(lb)j0a(lb);lb=k[pb+60>>2]|0;if(!lb){tc=pc;uc=qc;break}j0a(lb);tc=pc;uc=qc}while(0);if((hc|0)==226){qc=Hc()|0;ic=M;jc=qc;hc=227}if((hc|0)==227){tc=jc;uc=ic}ic=k[ob+72>>2]|0;if(ic)j0a(ic);ic=k[ob+60>>2]|0;if(!ic){Yb=tc;Zb=uc;Sc(Yb|0)}j0a(ic);Yb=tc;Zb=uc;Sc(Yb|0)}do if(Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0){uc=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;tc=e+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=e+56|0;ic=e+60|0;ob=e+72|0;jc=uc+48|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,jc|0,e|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;uc=k[ob>>2]|0;if(uc)j0a(uc);uc=k[ic>>2]|0;if(!uc)Sc(tc|0);j0a(uc);Sc(tc|0)}tc=k[ob>>2]|0;if(tc)j0a(tc);tc=k[ic>>2]|0;if(tc)j0a(tc);k[tb>>2]=32;k[tb+32>>2]=1;k[e>>2]=2;$b=e+8|0;ac=tb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));tc=e+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=e+56|0;ic=e+60|0;ob=e+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,jc|0,e|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;uc=k[ob>>2]|0;if(uc)j0a(uc);uc=k[ic>>2]|0;if(!uc)Sc(tc|0);j0a(uc);Sc(tc|0)}tc=k[ob>>2]|0;if(tc)j0a(tc);tc=k[ic>>2]|0;if(tc)j0a(tc);k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;tc=e+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=e+56|0;ic=e+60|0;ob=e+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,jc|0,e|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;uc=k[ob>>2]|0;if(uc)j0a(uc);uc=k[ic>>2]|0;if(!uc)Sc(tc|0);j0a(uc);Sc(tc|0)}tc=k[ob>>2]|0;if(tc)j0a(tc);tc=k[ic>>2]|0;if(tc)j0a(tc);tc=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;ic=e+48|0;k[ic>>2]=-1;k[ic+4>>2]=-1;ic=e+56|0;ob=e+60|0;uc=e+72|0;k[ic>>2]=0;k[ic+4>>2]=0;k[ic+8>>2]=0;k[ic+12>>2]=0;k[ic+16>>2]=0;x=0;Ta(539,tc+48|0,e|0)|0;tc=x;x=0;if(!(tc&1)){tc=k[uc>>2]|0;if(tc)j0a(tc);tc=k[ob>>2]|0;if(tc)j0a(tc);break}tc=Hc()|0;ic=k[uc>>2]|0;if(ic)j0a(ic);ic=k[ob>>2]|0;if(!ic)Sc(tc|0);j0a(ic);Sc(tc|0)}while(0);do if(_b>>>0>1){tb=(k[a>>2]|0)+48|0;k[e>>2]=2;k[e+8>>2]=_b;tc=e+12|0;k[tc>>2]=k[ub>>2];k[tc+4>>2]=k[ub+4>>2];k[tc+8>>2]=k[ub+8>>2];k[tc+12>>2]=k[ub+12>>2];k[tc+16>>2]=k[ub+16>>2];k[tc+20>>2]=k[ub+20>>2];k[tc+24>>2]=k[ub+24>>2];k[e+40>>2]=1;tc=e+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=e+56|0;ic=e+60|0;ob=e+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,tb|0,e|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;uc=k[ob>>2]|0;if(uc)j0a(uc);uc=k[ic>>2]|0;if(!uc)Sc(tc|0);j0a(uc);Sc(tc|0)}tc=k[ob>>2]|0;if(tc)j0a(tc);tc=k[ic>>2]|0;if(tc)j0a(tc);k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;tc=e+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=e+56|0;ic=e+60|0;ob=e+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,tb|0,e|0)|0;tb=x;x=0;if(!(tb&1)){tb=k[ob>>2]|0;if(tb)j0a(tb);tb=k[ic>>2]|0;if(tb)j0a(tb);break}tb=Hc()|0;tc=k[ob>>2]|0;if(tc)j0a(tc);tc=k[ic>>2]|0;if(!tc)Sc(tb|0);j0a(tc);Sc(tb|0)}while(0);ub=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=128;k[e+40>>2]=1;tb=e+48|0;k[tb>>2]=-1;k[tb+4>>2]=-1;tb=e+56|0;tc=e+60|0;ic=e+72|0;ob=ub+48|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[tb+16>>2]=0;x=0;Ta(539,ob|0,e|0)|0;tb=x;x=0;if(tb&1){tb=Hc()|0;ub=k[ic>>2]|0;if(ub)j0a(ub);ub=k[tc>>2]|0;if(!ub)Sc(tb|0);j0a(ub);Sc(tb|0)}tb=k[ic>>2]|0;if(tb)j0a(tb);tb=k[tc>>2]|0;if(tb)j0a(tb);k[e>>2]=1;k[e+8>>2]=131;k[e+40>>2]=1;tb=e+48|0;k[tb>>2]=-1;k[tb+4>>2]=-1;tb=e+56|0;tc=e+60|0;ic=e+72|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[tb+16>>2]=0;x=0;Ta(539,ob|0,e|0)|0;tb=x;x=0;if(tb&1){tb=Hc()|0;ub=k[ic>>2]|0;if(ub)j0a(ub);ub=k[tc>>2]|0;if(!ub)Sc(tb|0);j0a(ub);Sc(tb|0)}tb=k[ic>>2]|0;if(tb)j0a(tb);tb=k[tc>>2]|0;if(tb)j0a(tb);k[e>>2]=1;k[e+8>>2]=131;k[e+40>>2]=1;tb=e+48|0;k[tb>>2]=-1;k[tb+4>>2]=-1;tb=e+56|0;tc=e+60|0;ic=e+72|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[tb+16>>2]=0;x=0;Ta(539,ob|0,e|0)|0;ob=x;x=0;if(ob&1){ob=Hc()|0;tb=k[ic>>2]|0;if(tb)j0a(tb);tb=k[tc>>2]|0;if(!tb)Sc(ob|0);j0a(tb);Sc(ob|0)}ob=k[ic>>2]|0;if(ob)j0a(ob);ob=k[tc>>2]|0;if(ob)j0a(ob);xla(kb);ob=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;tc=e+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=e+56|0;ic=e+60|0;tb=e+72|0;ub=ob+48|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,ub|0,e|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;ob=k[tb>>2]|0;if(ob)j0a(ob);ob=k[ic>>2]|0;if(!ob)Sc(tc|0);j0a(ob);Sc(tc|0)}tc=k[tb>>2]|0;if(tc)j0a(tc);tc=k[ic>>2]|0;if(tc)j0a(tc);k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;tc=e+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=e+56|0;ic=e+60|0;tb=e+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,ub|0,e|0)|0;ub=x;x=0;if(ub&1){ub=Hc()|0;tc=k[tb>>2]|0;if(tc)j0a(tc);tc=k[ic>>2]|0;if(!tc)Sc(ub|0);j0a(tc);Sc(ub|0)}ub=k[tb>>2]|0;if(ub)j0a(ub);ub=k[ic>>2]|0;if(ub)j0a(ub);do if(Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0){if(!c){hc=438;break}ub=k[a>>2]|0;if(!(_b&31))vc=ub;else{wc=ub;hc=440}}else{if(!c){hc=438;break}ub=b+48|0;k[e>>2]=0;ic=e+32|0;k[ic>>2]=1;c:do if(!_b){k[ic>>2]=1;k[e>>2]=0}else{tb=b+80|0;tc=k[tb>>2]|0;if((e|0)==(ub|0)){xc=tb;yc=tc}else{tb=tc>>>0>8?8:tc;k[ic>>2]=tb;xc=ic;yc=tb}tb=e+(yc<<2)|0;do if((e|0)!=(tb|0)){tc=0;ob=0;uc=e;qc=ub;while(1){pc=Qyb(k[qc>>2]|0,0,_b|0,0)|0;pb=Hyb(pc|0,M|0,tc|0,ob|0)|0;pc=M;k[uc>>2]=pb;uc=uc+4|0;if((uc|0)==(tb|0)){zc=pc;Ac=0;break}else{tc=pc;ob=0;qc=qc+4|0}}if((zc|0)==0&(Ac|0)==0)break;qc=k[xc>>2]|0;ob=qc+1|0;tc=ob>>>0>8?8:ob;k[xc>>2]=tc;if(tc>>>0<=qc>>>0)break;k[e+(qc<<2)>>2]=zc}while(0);tb=(k[xc>>2]|0)+-1|0;if(!tb)break;else Bc=tb;do{if(k[e+(Bc<<2)>>2]|0)break c;k[xc>>2]=Bc;Bc=Bc+-1|0}while((Bc|0)!=0)}while(0);$b=wb;ac=e;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));k[e>>2]=0;k[e+32>>2]=1;tC(0,wb,32,e);$b=vb;ac=e;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));ub=k[a>>2]|0;if((k[vb>>2]|0)!=0?1:(k[vb+32>>2]|0)!=1){wc=ub;hc=440}else vc=ub}while(0);if((hc|0)==438)vc=k[a>>2]|0;else if((hc|0)==440){k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;vb=e+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=e+56|0;wb=e+60|0;Bc=e+72|0;xc=wc+48|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,xc|0,e|0)|0;vb=x;x=0;if(vb&1){vb=Hc()|0;wc=k[Bc>>2]|0;if(wc)j0a(wc);wc=k[wb>>2]|0;if(!wc)Sc(vb|0);j0a(wc);Sc(vb|0)}vb=k[Bc>>2]|0;if(vb)j0a(vb);vb=k[wb>>2]|0;if(vb)j0a(vb);k[e>>2]=1;k[e+8>>2]=129;k[e+40>>2]=1;vb=e+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=e+56|0;wb=e+60|0;Bc=e+72|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,xc|0,e|0)|0;vb=x;x=0;if(vb&1){vb=Hc()|0;wc=k[Bc>>2]|0;if(wc)j0a(wc);wc=k[wb>>2]|0;if(!wc)Sc(vb|0);j0a(wc);Sc(vb|0)}vb=k[Bc>>2]|0;if(vb)j0a(vb);vb=k[wb>>2]|0;if(vb)j0a(vb);k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;vb=e+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=e+56|0;wb=e+60|0;Bc=e+72|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,xc|0,e|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;vb=k[Bc>>2]|0;if(vb)j0a(vb);vb=k[wb>>2]|0;if(!vb)Sc(xc|0);j0a(vb);Sc(xc|0)}xc=k[Bc>>2]|0;if(xc)j0a(xc);xc=k[wb>>2]|0;if(xc)j0a(xc);xc=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;wb=e+48|0;k[wb>>2]=-1;k[wb+4>>2]=-1;wb=e+56|0;Bc=e+60|0;vb=e+72|0;wc=xc+48|0;k[wb>>2]=0;k[wb+4>>2]=0;k[wb+8>>2]=0;k[wb+12>>2]=0;k[wb+16>>2]=0;x=0;Ta(539,wc|0,e|0)|0;wb=x;x=0;if(wb&1){wb=Hc()|0;xc=k[vb>>2]|0;if(xc)j0a(xc);xc=k[Bc>>2]|0;if(!xc)Sc(wb|0);j0a(xc);Sc(wb|0)}wb=k[vb>>2]|0;if(wb)j0a(wb);wb=k[Bc>>2]|0;if(wb)j0a(wb);k[xb>>2]=31;k[xb+32>>2]=1;k[e>>2]=2;$b=e+8|0;ac=xb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));xb=e+48|0;k[xb>>2]=-1;k[xb+4>>2]=-1;xb=e+56|0;wb=e+60|0;Bc=e+72|0;k[xb>>2]=0;k[xb+4>>2]=0;k[xb+8>>2]=0;k[xb+12>>2]=0;k[xb+16>>2]=0;x=0;Ta(539,wc|0,e|0)|0;xb=x;x=0;if(xb&1){xb=Hc()|0;vb=k[Bc>>2]|0;if(vb)j0a(vb);vb=k[wb>>2]|0;if(!vb)Sc(xb|0);j0a(vb);Sc(xb|0)}xb=k[Bc>>2]|0;if(xb)j0a(xb);xb=k[wb>>2]|0;if(xb)j0a(xb);k[e>>2]=1;k[e+8>>2]=22;k[e+40>>2]=1;xb=e+48|0;k[xb>>2]=-1;k[xb+4>>2]=-1;xb=e+56|0;wb=e+60|0;Bc=e+72|0;k[xb>>2]=0;k[xb+4>>2]=0;k[xb+8>>2]=0;k[xb+12>>2]=0;k[xb+16>>2]=0;x=0;Ta(539,wc|0,e|0)|0;wc=x;x=0;if(wc&1){wc=Hc()|0;xb=k[Bc>>2]|0;if(xb)j0a(xb);xb=k[wb>>2]|0;if(!xb)Sc(wc|0);j0a(xb);Sc(wc|0)}wc=k[Bc>>2]|0;if(wc)j0a(wc);wc=k[wb>>2]|0;if(wc)j0a(wc);wc=(k[a>>2]|0)+48|0;wb=k[wc>>2]|0;k[wc>>2]=wb+1;k[yb>>2]=8;wc=yb+8|0;k[wc>>2]=wb;k[yb+40>>2]=1;wb=yb+48|0;k[wb>>2]=-1;k[wb+4>>2]=-1;wb=yb+56|0;k[wb>>2]=0;k[wb+4>>2]=0;k[wb+8>>2]=0;k[wb+12>>2]=0;k[wb+16>>2]=0;x=0;wb=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;Bc=x;x=0;d:do if(Bc&1)hc=526;else{if(wb){xb=k[a>>2]|0;k[Ua>>2]=1;k[Ua+8>>2]=128;k[Ua+40>>2]=1;vb=Ua+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=Ua+56|0;xc=Ua+60|0;zc=Ua+72|0;Ac=xb+48|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,Ac|0,Ua|0)|0;vb=x;x=0;if(vb&1){vb=Hc()|0;xb=M;yc=k[zc>>2]|0;if(yc)j0a(yc);yc=k[xc>>2]|0;if(!yc){Cc=xb;Dc=vb;break}j0a(yc);Cc=xb;Dc=vb;break}vb=k[zc>>2]|0;if(vb)j0a(vb);vb=k[xc>>2]|0;if(vb)j0a(vb);k[Sa>>2]=1;k[Sa+8>>2]=21;k[Sa+40>>2]=1;vb=Sa+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=Sa+56|0;xc=Sa+60|0;zc=Sa+72|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,Ac|0,Sa|0)|0;Ac=x;x=0;if(Ac&1){Ac=Hc()|0;vb=M;xb=k[zc>>2]|0;if(xb)j0a(xb);xb=k[xc>>2]|0;if(!xb){Cc=vb;Dc=Ac;break}j0a(xb);Cc=vb;Dc=Ac;break}Ac=k[zc>>2]|0;if(Ac)j0a(Ac);Ac=k[xc>>2]|0;if(Ac)j0a(Ac);x=0;fb(315,Ra|0,(k[a>>2]|0)+48|0,yb|0);Ac=x;x=0;if(Ac&1){hc=526;break}Ac=k[Ra+72>>2]|0;if(Ac)j0a(Ac);Ac=k[Ra+60>>2]|0;if(Ac)j0a(Ac)}Ac=k[a>>2]|0;k[Qa>>2]=1;k[Qa+8>>2]=128;k[Qa+40>>2]=1;xc=Qa+48|0;k[xc>>2]=-1;k[xc+4>>2]=-1;xc=Qa+56|0;zc=Qa+60|0;vb=Qa+72|0;xb=Ac+48|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,xb|0,Qa|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;Ac=M;yc=k[vb>>2]|0;if(yc)j0a(yc);yc=k[zc>>2]|0;if(!yc){Cc=Ac;Dc=xc;break}j0a(yc);Cc=Ac;Dc=xc;break}xc=k[vb>>2]|0;if(xc)j0a(xc);xc=k[zc>>2]|0;if(xc)j0a(xc);k[Pa>>2]=1;k[Pa+8>>2]=130;k[Pa+40>>2]=1;xc=Pa+48|0;k[xc>>2]=-1;k[xc+4>>2]=-1;xc=Pa+56|0;zc=Pa+60|0;vb=Pa+72|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,xb|0,Pa|0)|0;xb=x;x=0;if(xb&1){xb=Hc()|0;xc=M;Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[zc>>2]|0;if(!Ac){Cc=xc;Dc=xb;break}j0a(Ac);Cc=xc;Dc=xb;break}xb=k[vb>>2]|0;if(xb)j0a(xb);xb=k[zc>>2]|0;if(xb)j0a(xb);xb=k[a>>2]|0;k[Oa>>2]=1;k[Oa+8>>2]=3;k[Oa+40>>2]=1;zc=Oa+48|0;k[zc>>2]=-1;k[zc+4>>2]=-1;zc=Oa+56|0;vb=Oa+60|0;xc=Oa+72|0;k[zc>>2]=0;k[zc+4>>2]=0;k[zc+8>>2]=0;k[zc+12>>2]=0;k[zc+16>>2]=0;x=0;Ta(539,xb+48|0,Oa|0)|0;xb=x;x=0;if(xb&1){xb=Hc()|0;zc=M;Ac=k[xc>>2]|0;if(Ac)j0a(Ac);Ac=k[vb>>2]|0;if(!Ac){Cc=zc;Dc=xb;break}j0a(Ac);Cc=zc;Dc=xb;break}xb=k[xc>>2]|0;if(xb)j0a(xb);xb=k[vb>>2]|0;if(xb)j0a(xb);xb=k[a>>2]|0;k[Na>>2]=1;k[Na+8>>2]=128;k[Na+40>>2]=1;vb=Na+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=Na+56|0;xc=Na+60|0;zc=Na+72|0;Ac=xb+48|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,Ac|0,Na|0)|0;vb=x;x=0;if(vb&1){vb=Hc()|0;xb=M;yc=k[zc>>2]|0;if(yc)j0a(yc);yc=k[xc>>2]|0;if(!yc){Cc=xb;Dc=vb;break}j0a(yc);Cc=xb;Dc=vb;break}vb=k[zc>>2]|0;if(vb)j0a(vb);vb=k[xc>>2]|0;if(vb)j0a(vb);k[Ma>>2]=1;k[Ma+8>>2]=81;k[Ma+40>>2]=1;vb=Ma+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=Ma+56|0;xc=Ma+60|0;zc=Ma+72|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,Ac|0,Ma|0)|0;Ac=x;x=0;if(Ac&1){Ac=Hc()|0;vb=M;xb=k[zc>>2]|0;if(xb)j0a(xb);xb=k[xc>>2]|0;if(!xb){Cc=vb;Dc=Ac;break}j0a(xb);Cc=vb;Dc=Ac;break}Ac=k[zc>>2]|0;if(Ac)j0a(Ac);Ac=k[xc>>2]|0;if(Ac)j0a(Ac);Ac=k[a>>2]|0;k[zb>>2]=1;k[zb+32>>2]=1;xc=Ac+48|0;k[La>>2]=2;$b=La+8|0;ac=zb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));Ac=La+48|0;k[Ac>>2]=-1;k[Ac+4>>2]=-1;Ac=La+56|0;zc=La+60|0;vb=La+72|0;k[Ac>>2]=0;k[Ac+4>>2]=0;k[Ac+8>>2]=0;k[Ac+12>>2]=0;k[Ac+16>>2]=0;x=0;Ta(539,xc|0,La|0)|0;Ac=x;x=0;if(Ac&1){Ac=Hc()|0;xb=M;yc=k[vb>>2]|0;if(yc)j0a(yc);yc=k[zc>>2]|0;if(!yc){Cc=xb;Dc=Ac;break}j0a(yc);Cc=xb;Dc=Ac;break}Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[zc>>2]|0;if(Ac)j0a(Ac);Ac=k[a>>2]|0;k[Ka>>2]=1;k[Ka+8>>2]=131;k[Ka+40>>2]=1;zc=Ka+48|0;k[zc>>2]=-1;k[zc+4>>2]=-1;zc=Ka+56|0;vb=Ka+60|0;xb=Ka+72|0;yc=Ac+48|0;k[zc>>2]=0;k[zc+4>>2]=0;k[zc+8>>2]=0;k[zc+12>>2]=0;k[zc+16>>2]=0;x=0;Ta(539,yc|0,Ka|0)|0;zc=x;x=0;if(zc&1){zc=Hc()|0;Ac=M;ub=k[xb>>2]|0;if(ub)j0a(ub);ub=k[vb>>2]|0;if(!ub){Cc=Ac;Dc=zc;break}j0a(ub);Cc=Ac;Dc=zc;break}zc=k[xb>>2]|0;if(zc)j0a(zc);zc=k[vb>>2]|0;if(zc)j0a(zc);k[Ab>>2]=32;k[Ab+32>>2]=1;k[Ja>>2]=2;$b=Ja+8|0;ac=Ab;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));xc=Ja+48|0;k[xc>>2]=-1;k[xc+4>>2]=-1;xc=Ja+56|0;zc=Ja+60|0;vb=Ja+72|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,yc|0,Ja|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;xb=M;Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[zc>>2]|0;if(!Ac){Cc=xb;Dc=xc;break}j0a(Ac);Cc=xb;Dc=xc;break}xc=k[vb>>2]|0;if(xc)j0a(xc);xc=k[zc>>2]|0;if(xc)j0a(xc);k[Ia>>2]=1;k[Ia+8>>2]=3;k[Ia+40>>2]=1;xc=Ia+48|0;k[xc>>2]=-1;k[xc+4>>2]=-1;xc=Ia+56|0;zc=Ia+60|0;vb=Ia+72|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,yc|0,Ia|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;xb=M;Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[zc>>2]|0;if(!Ac){Cc=xb;Dc=xc;break}j0a(Ac);Cc=xb;Dc=xc;break}xc=k[vb>>2]|0;if(xc)j0a(xc);xc=k[zc>>2]|0;if(xc)j0a(xc);xc=k[a>>2]|0;k[Bb>>2]=256;k[Bb+32>>2]=1;zc=xc+48|0;k[Ha>>2]=2;$b=Ha+8|0;ac=Bb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));yc=Ha+48|0;k[yc>>2]=-1;k[yc+4>>2]=-1;yc=Ha+56|0;xc=Ha+60|0;vb=Ha+72|0;k[yc>>2]=0;k[yc+4>>2]=0;k[yc+8>>2]=0;k[yc+12>>2]=0;k[yc+16>>2]=0;x=0;Ta(539,zc|0,Ha|0)|0;yc=x;x=0;if(yc&1){yc=Hc()|0;xb=M;Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[xc>>2]|0;if(!Ac){Cc=xb;Dc=yc;break}j0a(Ac);Cc=xb;Dc=yc;break}yc=k[vb>>2]|0;if(yc)j0a(yc);yc=k[xc>>2]|0;if(yc)j0a(yc);k[Ga>>2]=1;k[Ga+8>>2]=10;k[Ga+40>>2]=1;yc=Ga+48|0;k[yc>>2]=-1;k[yc+4>>2]=-1;yc=Ga+56|0;xc=Ga+60|0;vb=Ga+72|0;k[yc>>2]=0;k[yc+4>>2]=0;k[yc+8>>2]=0;k[yc+12>>2]=0;k[yc+16>>2]=0;x=0;Ta(539,zc|0,Ga|0)|0;yc=x;x=0;if(yc&1){yc=Hc()|0;xb=M;Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[xc>>2]|0;if(!Ac){Cc=xb;Dc=yc;break}j0a(Ac);Cc=xb;Dc=yc;break}yc=k[vb>>2]|0;if(yc)j0a(yc);yc=k[xc>>2]|0;if(yc)j0a(yc);k[Fa>>2]=1;k[Fa+8>>2]=3;k[Fa+40>>2]=1;yc=Fa+48|0;k[yc>>2]=-1;k[yc+4>>2]=-1;yc=Fa+56|0;xc=Fa+60|0;vb=Fa+72|0;k[yc>>2]=0;k[yc+4>>2]=0;k[yc+8>>2]=0;k[yc+12>>2]=0;k[yc+16>>2]=0;x=0;Ta(539,zc|0,Fa|0)|0;yc=x;x=0;if(yc&1){yc=Hc()|0;xb=M;Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[xc>>2]|0;if(!Ac){Cc=xb;Dc=yc;break}j0a(Ac);Cc=xb;Dc=yc;break}yc=k[vb>>2]|0;if(yc)j0a(yc);yc=k[xc>>2]|0;if(yc)j0a(yc);yc=k[a>>2]|0;k[Ea>>2]=1;k[Ea+8>>2]=25;k[Ea+40>>2]=1;xc=Ea+48|0;k[xc>>2]=-1;k[xc+4>>2]=-1;xc=Ea+56|0;vb=Ea+60|0;xb=Ea+72|0;Ac=yc+48|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,Ac|0,Ea|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;yc=M;ub=k[xb>>2]|0;if(ub)j0a(ub);ub=k[vb>>2]|0;if(!ub){Cc=yc;Dc=xc;break}j0a(ub);Cc=yc;Dc=xc;break}xc=k[xb>>2]|0;if(xc)j0a(xc);xc=k[vb>>2]|0;if(xc)j0a(xc);k[Da>>2]=1;k[Da+8>>2]=22;k[Da+40>>2]=1;xc=Da+48|0;k[xc>>2]=-1;k[xc+4>>2]=-1;xc=Da+56|0;vb=Da+60|0;xb=Da+72|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,Ac|0,Da|0)|0;Ac=x;x=0;if(Ac&1){Ac=Hc()|0;xc=M;yc=k[xb>>2]|0;if(yc)j0a(yc);yc=k[vb>>2]|0;if(!yc){Cc=xc;Dc=Ac;break}j0a(yc);Cc=xc;Dc=Ac;break}Ac=k[xb>>2]|0;if(Ac)j0a(Ac);Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[a>>2]|0;k[Ca>>2]=1;k[Ca+8>>2]=129;k[Ca+40>>2]=1;vb=Ca+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=Ca+56|0;xb=Ca+60|0;xc=Ca+72|0;yc=Ac+48|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,yc|0,Ca|0)|0;vb=x;x=0;if(vb&1){vb=Hc()|0;Ac=M;ub=k[xc>>2]|0;if(ub)j0a(ub);ub=k[xb>>2]|0;if(!ub){Cc=Ac;Dc=vb;break}j0a(ub);Cc=Ac;Dc=vb;break}vb=k[xc>>2]|0;if(vb)j0a(vb);vb=k[xb>>2]|0;if(vb)j0a(vb);k[Aa>>2]=1;k[Aa+8>>2]=82;k[Aa+40>>2]=1;vb=Aa+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=Aa+56|0;xb=Aa+60|0;xc=Aa+72|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,yc|0,Aa|0)|0;yc=x;x=0;if(yc&1){yc=Hc()|0;vb=M;Ac=k[xc>>2]|0;if(Ac)j0a(Ac);Ac=k[xb>>2]|0;if(!Ac){Cc=vb;Dc=yc;break}j0a(Ac);Cc=vb;Dc=yc;break}yc=k[xc>>2]|0;if(yc)j0a(yc);yc=k[xb>>2]|0;if(yc)j0a(yc);yc=k[a>>2]|0;k[Cb>>2]=32;k[Cb+32>>2]=1;xb=yc+48|0;k[za>>2]=2;$b=za+8|0;ac=Cb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));zc=za+48|0;k[zc>>2]=-1;k[zc+4>>2]=-1;zc=za+56|0;yc=za+60|0;xc=za+72|0;k[zc>>2]=0;k[zc+4>>2]=0;k[zc+8>>2]=0;k[zc+12>>2]=0;k[zc+16>>2]=0;x=0;Ta(539,xb|0,za|0)|0;zc=x;x=0;if(zc&1){zc=Hc()|0;vb=M;Ac=k[xc>>2]|0;if(Ac)j0a(Ac);Ac=k[yc>>2]|0;if(!Ac){Cc=vb;Dc=zc;break}j0a(Ac);Cc=vb;Dc=zc;break}zc=k[xc>>2]|0;if(zc)j0a(zc);zc=k[yc>>2]|0;if(zc)j0a(zc);k[ya>>2]=1;k[ya+8>>2]=1;k[ya+40>>2]=1;zc=ya+48|0;k[zc>>2]=-1;k[zc+4>>2]=-1;zc=ya+56|0;yc=ya+60|0;xc=ya+72|0;k[zc>>2]=0;k[zc+4>>2]=0;k[zc+8>>2]=0;k[zc+12>>2]=0;k[zc+16>>2]=0;x=0;Ta(539,xb|0,ya|0)|0;zc=x;x=0;if(zc&1){zc=Hc()|0;vb=M;Ac=k[xc>>2]|0;if(Ac)j0a(Ac);Ac=k[yc>>2]|0;if(!Ac){Cc=vb;Dc=zc;break}j0a(Ac);Cc=vb;Dc=zc;break}zc=k[xc>>2]|0;if(zc)j0a(zc);zc=k[yc>>2]|0;if(zc)j0a(zc);zc=k[a>>2]|0;k[wa>>2]=1;k[wa+8>>2]=145;k[wa+40>>2]=1;yc=wa+48|0;k[yc>>2]=-1;k[yc+4>>2]=-1;yc=wa+56|0;xc=wa+60|0;vb=wa+72|0;Ac=zc+48|0;k[yc>>2]=0;k[yc+4>>2]=0;k[yc+8>>2]=0;k[yc+12>>2]=0;k[yc+16>>2]=0;x=0;Ta(539,Ac|0,wa|0)|0;yc=x;x=0;if(yc&1){yc=Hc()|0;zc=M;ub=k[vb>>2]|0;if(ub)j0a(ub);ub=k[xc>>2]|0;if(!ub){Cc=zc;Dc=yc;break}j0a(ub);Cc=zc;Dc=yc;break}yc=k[vb>>2]|0;if(yc)j0a(yc);yc=k[xc>>2]|0;if(yc)j0a(yc);k[ua>>2]=1;k[ua+8>>2]=80;k[ua+40>>2]=1;yc=ua+48|0;k[yc>>2]=-1;k[yc+4>>2]=-1;yc=ua+56|0;xc=ua+60|0;vb=ua+72|0;k[yc>>2]=0;k[yc+4>>2]=0;k[yc+8>>2]=0;k[yc+12>>2]=0;k[yc+16>>2]=0;x=0;Ta(539,Ac|0,ua|0)|0;Ac=x;x=0;if(Ac&1){Ac=Hc()|0;yc=M;zc=k[vb>>2]|0;if(zc)j0a(zc);zc=k[xc>>2]|0;if(!zc){Cc=yc;Dc=Ac;break}j0a(zc);Cc=yc;Dc=Ac;break}Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[xc>>2]|0;if(Ac)j0a(Ac);x=0;Ac=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;xc=x;x=0;if(xc&1){hc=526;break}do if(Ac){xc=k[a>>2]|0;x=0;fb(140,ta|0,329672,0);vb=x;x=0;if(vb&1){hc=526;break d}x=0;pa(56,1,ta|0,70,296096,267525);vb=x;x=0;if(vb&1){vb=Hc()|0;yc=M;K2a(ta);Cc=yc;Dc=vb;break d}K2a(ta);k[Db>>2]=8;$b=Db+8|0;ac=wc;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));vb=Db+48|0;k[vb>>2]=-1;k[vb+4>>2]=-1;vb=Db+56|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,xc+48|0,Db|0)|0;vb=x;x=0;if(!(vb&1)){vb=k[Db+72>>2]|0;if(vb)j0a(vb);vb=k[Db+60>>2]|0;if(!vb)break;j0a(vb);break}vb=Hc()|0;yc=M;zc=k[Db+72>>2]|0;if(zc)j0a(zc);zc=k[Db+60>>2]|0;if(!zc){Yb=vb;Zb=yc;Sc(Yb|0)}j0a(zc);Yb=vb;Zb=yc;Sc(Yb|0)}while(0);Ac=k[a>>2]|0;k[sa>>2]=1;k[sa+8>>2]=80;k[sa+40>>2]=1;xb=sa+48|0;k[xb>>2]=-1;k[xb+4>>2]=-1;xb=sa+56|0;yc=sa+60|0;vb=sa+72|0;k[xb>>2]=0;k[xb+4>>2]=0;k[xb+8>>2]=0;k[xb+12>>2]=0;k[xb+16>>2]=0;x=0;Ta(539,Ac+48|0,sa|0)|0;Ac=x;x=0;if(Ac&1){Ac=Hc()|0;xb=M;zc=k[vb>>2]|0;if(zc)j0a(zc);zc=k[yc>>2]|0;if(!zc){Cc=xb;Dc=Ac;break}j0a(zc);Cc=xb;Dc=Ac;break}Ac=k[vb>>2]|0;if(Ac)j0a(Ac);Ac=k[yc>>2]|0;if(Ac)j0a(Ac);r=d;return}while(0);if((hc|0)==526){sa=Hc()|0;Cc=M;Dc=sa}Yb=Dc;Zb=Cc;Sc(Yb|0)}k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;Cc=e+48|0;k[Cc>>2]=-1;k[Cc+4>>2]=-1;Cc=e+56|0;Dc=e+60|0;sa=e+72|0;k[Cc>>2]=0;k[Cc+4>>2]=0;k[Cc+8>>2]=0;k[Cc+12>>2]=0;k[Cc+16>>2]=0;x=0;Ta(539,vc+48|0,e|0)|0;vc=x;x=0;if(vc&1){vc=Hc()|0;Cc=k[sa>>2]|0;if(Cc)j0a(Cc);Cc=k[Dc>>2]|0;if(!Cc)Sc(vc|0);j0a(Cc);Sc(vc|0)}else{vc=k[sa>>2]|0;if(vc)j0a(vc);vc=k[Dc>>2]|0;if(vc)j0a(vc);r=d;return}break}default:{q2a(Eb,329672,0);x=0;pa(57,(Wb|0)==0|0,Eb|0,393,258380,258886);Wb=x;x=0;if(Wb&1){Wb=Hc()|0;vc=M;K2a(Eb);Yb=Wb;Zb=vc;Sc(Yb|0)}K2a(Eb);Eb=(k[Vb>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,Eb|0,e|0,588,285183,276209);Eb=x;x=0;if(Eb&1){Eb=Hc()|0;K2a(e);Sc(Eb|0)}K2a(e);Eb=k[Vb>>2]|0;vc=Vf[k[(k[Eb>>2]|0)+44>>2]&1023](Eb)|0;Eb=(k[Vb>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,Eb|0,e|0,588,285183,276209);Eb=x;x=0;if(Eb&1){Eb=Hc()|0;K2a(e);Sc(Eb|0)}K2a(e);Eb=k[Vb>>2]|0;Tf[k[(k[Eb>>2]|0)+40>>2]&2047](Fb,Eb);Eb=k[Fb+32>>2]|0;Wb=k[Fb>>2]|0;if((Wb|Eb)>>>0>1)Ec=1;else Ec=(vc|0)!=0&((Eb|0)==1&(Wb|0)==1);q2a(Gb,329672,0);x=0;pa(57,Ec|0,Gb|0,396,258380,258886);Ec=x;x=0;if(Ec&1){Ec=Hc()|0;Wb=M;K2a(Gb);Yb=Ec;Zb=Wb;Sc(Yb|0)}K2a(Gb);yia(a,b,0);Gb=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=128;k[e+40>>2]=1;Wb=e+48|0;k[Wb>>2]=-1;k[Wb+4>>2]=-1;Wb=e+56|0;Ec=e+60|0;Eb=e+72|0;Dc=Gb+48|0;k[Wb>>2]=0;k[Wb+4>>2]=0;k[Wb+8>>2]=0;k[Wb+12>>2]=0;k[Wb+16>>2]=0;x=0;Ta(539,Dc|0,e|0)|0;Wb=x;x=0;if(Wb&1){Wb=Hc()|0;Gb=k[Eb>>2]|0;if(Gb)j0a(Gb);Gb=k[Ec>>2]|0;if(!Gb)Sc(Wb|0);j0a(Gb);Sc(Wb|0)}Wb=k[Eb>>2]|0;if(Wb)j0a(Wb);Wb=k[Ec>>2]|0;if(Wb)j0a(Wb);k[e>>2]=1;k[e+8>>2]=21;k[e+40>>2]=1;Wb=e+48|0;k[Wb>>2]=-1;k[Wb+4>>2]=-1;Wb=e+56|0;Ec=e+60|0;Eb=e+72|0;k[Wb>>2]=0;k[Wb+4>>2]=0;k[Wb+8>>2]=0;k[Wb+12>>2]=0;k[Wb+16>>2]=0;x=0;Ta(539,Dc|0,e|0)|0;Dc=x;x=0;if(Dc&1){Dc=Hc()|0;Wb=k[Eb>>2]|0;if(Wb)j0a(Wb);Wb=k[Ec>>2]|0;if(!Wb)Sc(Dc|0);j0a(Wb);Sc(Dc|0)}Dc=k[Eb>>2]|0;if(Dc)j0a(Dc);Dc=k[Ec>>2]|0;if(Dc)j0a(Dc);Jia(Hb,k[a>>2]|0);e:do if(!(k[jb>>2]|0))hc=940;else{Dc=k[a>>2]|0;k[ra>>2]=1;k[ra+8>>2]=128;k[ra+40>>2]=1;Ec=ra+48|0;k[Ec>>2]=-1;k[Ec+4>>2]=-1;Ec=ra+56|0;Eb=ra+60|0;Wb=ra+72|0;Gb=Dc+48|0;k[Ec>>2]=0;k[Ec+4>>2]=0;k[Ec+8>>2]=0;k[Ec+12>>2]=0;k[Ec+16>>2]=0;x=0;Ta(539,Gb|0,ra|0)|0;Ec=x;x=0;if(Ec&1){Ec=Hc()|0;Dc=M;sa=k[Wb>>2]|0;if(sa)j0a(sa);sa=k[Eb>>2]|0;if(!sa){Fc=Dc;Gc=Ec;hc=895;break}j0a(sa);Fc=Dc;Gc=Ec;hc=895;break}Ec=k[Wb>>2]|0;if(Ec)j0a(Ec);Ec=k[Eb>>2]|0;if(Ec)j0a(Ec);k[Ib>>2]=31;k[Ib+32>>2]=1;k[qa>>2]=2;$b=qa+8|0;ac=Ib;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));Ec=qa+48|0;k[Ec>>2]=-1;k[Ec+4>>2]=-1;Ec=qa+56|0;Eb=qa+60|0;Wb=qa+72|0;k[Ec>>2]=0;k[Ec+4>>2]=0;k[Ec+8>>2]=0;k[Ec+12>>2]=0;k[Ec+16>>2]=0;x=0;Ta(539,Gb|0,qa|0)|0;Ec=x;x=0;if(Ec&1){Ec=Hc()|0;Dc=M;sa=k[Wb>>2]|0;if(sa)j0a(sa);sa=k[Eb>>2]|0;if(!sa){Fc=Dc;Gc=Ec;hc=895;break}j0a(sa);Fc=Dc;Gc=Ec;hc=895;break}Ec=k[Wb>>2]|0;if(Ec)j0a(Ec);Ec=k[Eb>>2]|0;if(Ec)j0a(Ec);k[oa>>2]=1;k[oa+8>>2]=16;k[oa+40>>2]=1;Ec=oa+48|0;k[Ec>>2]=-1;k[Ec+4>>2]=-1;Ec=oa+56|0;Eb=oa+60|0;Wb=oa+72|0;k[Ec>>2]=0;k[Ec+4>>2]=0;k[Ec+8>>2]=0;k[Ec+12>>2]=0;k[Ec+16>>2]=0;x=0;Ta(539,Gb|0,oa|0)|0;Ec=x;x=0;if(Ec&1){Ec=Hc()|0;Dc=M;sa=k[Wb>>2]|0;if(sa)j0a(sa);sa=k[Eb>>2]|0;if(!sa){Fc=Dc;Gc=Ec;hc=895;break}j0a(sa);Fc=Dc;Gc=Ec;hc=895;break}Ec=k[Wb>>2]|0;if(Ec)j0a(Ec);Ec=k[Eb>>2]|0;if(Ec)j0a(Ec);x=0;xa(819,Jb|0,k[a>>2]|0);Ec=x;x=0;if(Ec&1){hc=894;break}Ec=k[a>>2]|0;k[Kb>>2]=256;k[Kb+32>>2]=1;Eb=Ec+48|0;k[na>>2]=2;$b=na+8|0;ac=Kb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));Gb=na+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=na+56|0;Ec=na+60|0;Wb=na+72|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,Eb|0,na|0)|0;Gb=x;x=0;do if(Gb&1){Dc=Hc()|0;sa=M;Cc=k[Wb>>2]|0;if(Cc)j0a(Cc);Cc=k[Ec>>2]|0;if(!Cc){Ic=sa;Jc=Dc;break}j0a(Cc);Ic=sa;Jc=Dc}else{Dc=k[Wb>>2]|0;if(Dc)j0a(Dc);Dc=k[Ec>>2]|0;if(Dc)j0a(Dc);k[ma>>2]=1;k[ma+8>>2]=128;k[ma+40>>2]=1;Dc=ma+48|0;k[Dc>>2]=-1;k[Dc+4>>2]=-1;Dc=ma+56|0;sa=ma+60|0;Cc=ma+72|0;k[Dc>>2]=0;k[Dc+4>>2]=0;k[Dc+8>>2]=0;k[Dc+12>>2]=0;k[Dc+16>>2]=0;x=0;Ta(539,Eb|0,ma|0)|0;Dc=x;x=0;if(Dc&1){Dc=Hc()|0;Db=M;wc=k[Cc>>2]|0;if(wc)j0a(wc);wc=k[sa>>2]|0;if(!wc){Ic=Db;Jc=Dc;break}j0a(wc);Ic=Db;Jc=Dc;break}Dc=k[Cc>>2]|0;if(Dc)j0a(Dc);Dc=k[sa>>2]|0;if(Dc)j0a(Dc);Dc=k[a>>2]|0;k[la>>2]=1;k[la+8>>2]=131;k[la+40>>2]=1;sa=la+48|0;k[sa>>2]=-1;k[sa+4>>2]=-1;sa=la+56|0;Cc=la+60|0;Db=la+72|0;wc=Dc+48|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[sa+16>>2]=0;x=0;Ta(539,wc|0,la|0)|0;sa=x;x=0;if(sa&1){sa=Hc()|0;Dc=M;ta=k[Db>>2]|0;if(ta)j0a(ta);ta=k[Cc>>2]|0;if(!ta){Ic=Dc;Jc=sa;break}j0a(ta);Ic=Dc;Jc=sa;break}sa=k[Db>>2]|0;if(sa)j0a(sa);sa=k[Cc>>2]|0;if(sa)j0a(sa);k[ka>>2]=1;k[ka+8>>2]=84;k[ka+40>>2]=1;sa=ka+48|0;k[sa>>2]=-1;k[sa+4>>2]=-1;sa=ka+56|0;Cc=ka+60|0;Db=ka+72|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[sa+16>>2]=0;x=0;Ta(539,wc|0,ka|0)|0;wc=x;x=0;if(wc&1){wc=Hc()|0;sa=M;Dc=k[Db>>2]|0;if(Dc)j0a(Dc);Dc=k[Cc>>2]|0;if(!Dc){Ic=sa;Jc=wc;break}j0a(Dc);Ic=sa;Jc=wc;break}wc=k[Db>>2]|0;if(wc)j0a(wc);wc=k[Cc>>2]|0;if(wc)j0a(wc);wc=k[a>>2]|0;k[ja>>2]=1;k[ja+8>>2]=4;k[ja+40>>2]=1;Cc=ja+48|0;k[Cc>>2]=-1;k[Cc+4>>2]=-1;Cc=ja+56|0;Db=ja+60|0;sa=ja+72|0;Dc=wc+48|0;k[Cc>>2]=0;k[Cc+4>>2]=0;k[Cc+8>>2]=0;k[Cc+12>>2]=0;k[Cc+16>>2]=0;x=0;Ta(539,Dc|0,ja|0)|0;Cc=x;x=0;if(Cc&1){Cc=Hc()|0;wc=M;ta=k[sa>>2]|0;if(ta)j0a(ta);ta=k[Db>>2]|0;if(!ta){Ic=wc;Jc=Cc;break}j0a(ta);Ic=wc;Jc=Cc;break}Cc=k[sa>>2]|0;if(Cc)j0a(Cc);Cc=k[Db>>2]|0;if(Cc)j0a(Cc);k[ia>>2]=1;k[ia+8>>2]=2;k[ia+40>>2]=1;Cc=ia+48|0;k[Cc>>2]=-1;k[Cc+4>>2]=-1;Cc=ia+56|0;Db=ia+60|0;sa=ia+72|0;k[Cc>>2]=0;k[Cc+4>>2]=0;k[Cc+8>>2]=0;k[Cc+12>>2]=0;k[Cc+16>>2]=0;x=0;Ta(539,Dc|0,ia|0)|0;Dc=x;x=0;if(Dc&1){Dc=Hc()|0;Cc=M;wc=k[sa>>2]|0;if(wc)j0a(wc);wc=k[Db>>2]|0;if(!wc){Ic=Cc;Jc=Dc;break}j0a(wc);Ic=Cc;Jc=Dc;break}Dc=k[sa>>2]|0;if(Dc)j0a(Dc);Dc=k[Db>>2]|0;if(Dc)j0a(Dc);Dc=k[a>>2]|0;k[ha>>2]=1;k[ha+8>>2]=131;k[ha+40>>2]=1;Db=ha+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=ha+56|0;sa=ha+60|0;Cc=ha+72|0;wc=Dc+48|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,wc|0,ha|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;Dc=M;ta=k[Cc>>2]|0;if(ta)j0a(ta);ta=k[sa>>2]|0;if(!ta){Ic=Dc;Jc=Db;break}j0a(ta);Ic=Dc;Jc=Db;break}Db=k[Cc>>2]|0;if(Db)j0a(Db);Db=k[sa>>2]|0;if(Db)j0a(Db);k[ga>>2]=1;k[ga+8>>2]=82;k[ga+40>>2]=1;Db=ga+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=ga+56|0;sa=ga+60|0;Cc=ga+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,wc|0,ga|0)|0;wc=x;x=0;if(wc&1){wc=Hc()|0;Db=M;Dc=k[Cc>>2]|0;if(Dc)j0a(Dc);Dc=k[sa>>2]|0;if(!Dc){Ic=Db;Jc=wc;break}j0a(Dc);Ic=Db;Jc=wc;break}wc=k[Cc>>2]|0;if(wc)j0a(wc);wc=k[sa>>2]|0;if(wc)j0a(wc);wc=k[a>>2]|0;k[fa>>2]=1;k[fa+8>>2]=145;k[fa+40>>2]=1;sa=fa+48|0;k[sa>>2]=-1;k[sa+4>>2]=-1;sa=fa+56|0;Cc=fa+60|0;Db=fa+72|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[sa+16>>2]=0;x=0;Ta(539,wc+48|0,fa|0)|0;wc=x;x=0;if(wc&1){wc=Hc()|0;sa=M;Dc=k[Db>>2]|0;if(Dc)j0a(Dc);Dc=k[Cc>>2]|0;if(!Dc){Ic=sa;Jc=wc;break}j0a(Dc);Ic=sa;Jc=wc;break}wc=k[Db>>2]|0;if(wc)j0a(wc);wc=k[Cc>>2]|0;if(wc)j0a(wc);wc=k[a>>2]|0;if(c){k[Lb>>2]=32;k[Lb+32>>2]=1;Cc=wc+48|0;k[ea>>2]=2;$b=ea+8|0;ac=Lb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));xc=ea+48|0;k[xc>>2]=-1;k[xc+4>>2]=-1;xc=ea+56|0;Db=ea+60|0;sa=ea+72|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,Cc|0,ea|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;Dc=M;ta=k[sa>>2]|0;if(ta)j0a(ta);ta=k[Db>>2]|0;if(!ta){Ic=Dc;Jc=xc;break}j0a(ta);Ic=Dc;Jc=xc;break}xc=k[sa>>2]|0;if(xc)j0a(xc);xc=k[Db>>2]|0;if(xc)j0a(xc)}else{k[da>>2]=1;k[da+8>>2]=130;k[da+40>>2]=1;xc=da+48|0;k[xc>>2]=-1;k[xc+4>>2]=-1;xc=da+56|0;Db=da+60|0;sa=da+72|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,wc+48|0,da|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;Dc=M;ta=k[sa>>2]|0;if(ta)j0a(ta);ta=k[Db>>2]|0;if(!ta){Ic=Dc;Jc=xc;break}j0a(ta);Ic=Dc;Jc=xc;break}xc=k[sa>>2]|0;if(xc)j0a(xc);xc=k[Db>>2]|0;if(xc)j0a(xc)}xc=k[a>>2]|0;k[ca>>2]=1;k[ca+8>>2]=1;k[ca+40>>2]=1;Db=ca+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=ca+56|0;sa=ca+60|0;Dc=ca+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,xc+48|0,ca|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;Db=M;ta=k[Dc>>2]|0;if(ta)j0a(ta);ta=k[sa>>2]|0;if(!ta){Ic=Db;Jc=xc;break}j0a(ta);Ic=Db;Jc=xc;break}xc=k[Dc>>2]|0;if(xc)j0a(xc);xc=k[sa>>2]|0;if(xc)j0a(xc);xc=k[a>>2]|0;k[ba>>2]=1;k[ba+8>>2]=145;k[ba+40>>2]=1;sa=ba+48|0;k[sa>>2]=-1;k[sa+4>>2]=-1;sa=ba+56|0;Dc=ba+60|0;Db=ba+72|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[sa+16>>2]=0;x=0;Ta(539,xc+48|0,ba|0)|0;xc=x;x=0;if(xc&1){xc=Hc()|0;sa=M;ta=k[Db>>2]|0;if(ta)j0a(ta);ta=k[Dc>>2]|0;if(!ta){Ic=sa;Jc=xc;break}j0a(ta);Ic=sa;Jc=xc;break}xc=k[Db>>2]|0;if(xc)j0a(xc);xc=k[Dc>>2]|0;if(xc)j0a(xc);x=0;fb(314,aa|0,(k[a>>2]|0)+48|0,Hb|0);xc=x;x=0;do if(!(xc&1)){Dc=k[aa+72>>2]|0;if(Dc)j0a(Dc);Dc=k[aa+60>>2]|0;if(Dc)j0a(Dc);x=0;Ta(539,(k[a>>2]|0)+48|0,Jb|0)|0;Dc=x;x=0;if(Dc&1)break;Dc=k[Jb+72>>2]|0;if(Dc)j0a(Dc);Dc=k[Jb+60>>2]|0;if(Dc)j0a(Dc);hc=940;break e}while(0);xc=Hc()|0;Ic=M;Jc=xc}while(0);Eb=k[Jb+72>>2]|0;if(Eb)j0a(Eb);Eb=k[Jb+60>>2]|0;if(!Eb){Kc=Jc;Lc=Ic;break}j0a(Eb);Kc=Jc;Lc=Ic}while(0);do if((hc|0)==940){if(_b>>>0>1){Ic=(k[a>>2]|0)+48|0;k[$>>2]=2;k[$+8>>2]=_b;Jc=$+12|0;k[Jc>>2]=k[Mb>>2];k[Jc+4>>2]=k[Mb+4>>2];k[Jc+8>>2]=k[Mb+8>>2];k[Jc+12>>2]=k[Mb+12>>2];k[Jc+16>>2]=k[Mb+16>>2];k[Jc+20>>2]=k[Mb+20>>2];k[Jc+24>>2]=k[Mb+24>>2];k[$+40>>2]=1;Jc=$+48|0;k[Jc>>2]=-1;k[Jc+4>>2]=-1;Jc=$+56|0;Jb=$+60|0;aa=$+72|0;k[Jc>>2]=0;k[Jc+4>>2]=0;k[Jc+8>>2]=0;k[Jc+12>>2]=0;k[Jc+16>>2]=0;x=0;Ta(539,Ic|0,$|0)|0;Jc=x;x=0;if(Jc&1){Jc=Hc()|0;ba=M;ca=k[aa>>2]|0;if(ca)j0a(ca);ca=k[Jb>>2]|0;if(!ca){Fc=ba;Gc=Jc;hc=895;break}j0a(ca);Fc=ba;Gc=Jc;hc=895;break}Jc=k[aa>>2]|0;if(Jc)j0a(Jc);Jc=k[Jb>>2]|0;if(Jc)j0a(Jc);k[_>>2]=1;k[_+8>>2]=2;k[_+40>>2]=1;Jc=_+48|0;k[Jc>>2]=-1;k[Jc+4>>2]=-1;Jc=_+56|0;Jb=_+60|0;aa=_+72|0;k[Jc>>2]=0;k[Jc+4>>2]=0;k[Jc+8>>2]=0;k[Jc+12>>2]=0;k[Jc+16>>2]=0;x=0;Ta(539,Ic|0,_|0)|0;Ic=x;x=0;if(Ic&1){Ic=Hc()|0;Jc=M;ba=k[aa>>2]|0;if(ba)j0a(ba);ba=k[Jb>>2]|0;if(!ba){Fc=Jc;Gc=Ic;hc=895;break}j0a(ba);Fc=Jc;Gc=Ic;hc=895;break}Ic=k[aa>>2]|0;if(Ic)j0a(Ic);Ic=k[Jb>>2]|0;if(Ic)j0a(Ic)}Ic=k[a>>2]|0;k[Z>>2]=1;k[Z+8>>2]=130;k[Z+40>>2]=1;Jb=Z+48|0;k[Jb>>2]=-1;k[Jb+4>>2]=-1;Jb=Z+56|0;aa=Z+60|0;Jc=Z+72|0;ba=Ic+48|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[Jb+16>>2]=0;x=0;Ta(539,ba|0,Z|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;Ic=M;ca=k[Jc>>2]|0;if(ca)j0a(ca);ca=k[aa>>2]|0;if(!ca){Fc=Ic;Gc=Jb;hc=895;break}j0a(ca);Fc=Ic;Gc=Jb;hc=895;break}Jb=k[Jc>>2]|0;if(Jb)j0a(Jb);Jb=k[aa>>2]|0;if(Jb)j0a(Jb);k[Y>>2]=1;k[Y+8>>2]=1;k[Y+40>>2]=1;Jb=Y+48|0;k[Jb>>2]=-1;k[Jb+4>>2]=-1;Jb=Y+56|0;aa=Y+60|0;Jc=Y+72|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[Jb+16>>2]=0;x=0;Ta(539,ba|0,Y|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;Ic=M;ca=k[Jc>>2]|0;if(ca)j0a(ca);ca=k[aa>>2]|0;if(!ca){Fc=Ic;Gc=Jb;hc=895;break}j0a(ca);Fc=Ic;Gc=Jb;hc=895;break}Jb=k[Jc>>2]|0;if(Jb)j0a(Jb);Jb=k[aa>>2]|0;if(Jb)j0a(Jb);k[X>>2]=1;k[X+8>>2]=145;k[X+40>>2]=1;Jb=X+48|0;k[Jb>>2]=-1;k[Jb+4>>2]=-1;Jb=X+56|0;aa=X+60|0;Jc=X+72|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[Jb+16>>2]=0;x=0;Ta(539,ba|0,X|0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;Jb=M;Ic=k[Jc>>2]|0;if(Ic)j0a(Ic);Ic=k[aa>>2]|0;if(!Ic){Fc=Jb;Gc=ba;hc=895;break}j0a(Ic);Fc=Jb;Gc=ba;hc=895;break}ba=k[Jc>>2]|0;if(ba)j0a(ba);ba=k[aa>>2]|0;if(ba)j0a(ba);x=0;ba=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;aa=x;x=0;if(aa&1){hc=894;break}if(ba){ba=k[a>>2]|0;k[W>>2]=1;k[W+8>>2]=144;k[W+40>>2]=1;aa=W+48|0;k[aa>>2]=-1;k[aa+4>>2]=-1;aa=W+56|0;Jc=W+60|0;Jb=W+72|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[aa+16>>2]=0;x=0;Ta(539,ba+48|0,W|0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;aa=M;Ic=k[Jb>>2]|0;if(Ic)j0a(Ic);Ic=k[Jc>>2]|0;if(!Ic){Fc=aa;Gc=ba;hc=895;break}j0a(Ic);Fc=aa;Gc=ba;hc=895;break}ba=k[Jb>>2]|0;if(ba)j0a(ba);ba=k[Jc>>2]|0;if(ba)j0a(ba);x=0;va(1505,kb|0);ba=x;x=0;if(ba&1){hc=894;break}ba=k[a>>2]|0;k[V>>2]=1;k[V+8>>2]=144;k[V+40>>2]=1;Jc=V+48|0;k[Jc>>2]=-1;k[Jc+4>>2]=-1;Jc=V+56|0;Jb=V+60|0;aa=V+72|0;k[Jc>>2]=0;k[Jc+4>>2]=0;k[Jc+8>>2]=0;k[Jc+12>>2]=0;k[Jc+16>>2]=0;x=0;Ta(539,ba+48|0,V|0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;Jc=M;Ic=k[aa>>2]|0;if(Ic)j0a(Ic);Ic=k[Jb>>2]|0;if(!Ic){Fc=Jc;Gc=ba;hc=895;break}j0a(Ic);Fc=Jc;Gc=ba;hc=895;break}ba=k[aa>>2]|0;if(ba)j0a(ba);ba=k[Jb>>2]|0;if(ba)j0a(ba)}ba=vc>>>0<17&(k[jb>>2]|0)==0;if(ba){Jb=k[a>>2]|0;k[Nb>>2]=0;k[Nb+32>>2]=1;aa=Jb+48|0;k[U>>2]=2;$b=U+8|0;ac=Nb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));Jb=U+48|0;k[Jb>>2]=-1;k[Jb+4>>2]=-1;Jb=U+56|0;Jc=U+60|0;Ic=U+72|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[Jb+16>>2]=0;x=0;Ta(539,aa|0,U|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;ca=M;da=k[Ic>>2]|0;if(da)j0a(da);da=k[Jc>>2]|0;if(!da){Fc=ca;Gc=Jb;hc=895;break}j0a(da);Fc=ca;Gc=Jb;hc=895;break}Jb=k[Ic>>2]|0;if(Jb)j0a(Jb);Jb=k[Jc>>2]|0;if(Jb)j0a(Jb);k[T>>2]=1;k[T+8>>2]=144;k[T+40>>2]=1;Jb=T+48|0;k[Jb>>2]=-1;k[Jb+4>>2]=-1;Jb=T+56|0;Jc=T+60|0;Ic=T+72|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[Jb+16>>2]=0;x=0;Ta(539,aa|0,T|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;ca=M;da=k[Ic>>2]|0;if(da)j0a(da);da=k[Jc>>2]|0;if(!da){Fc=ca;Gc=Jb;hc=895;break}j0a(da);Fc=ca;Gc=Jb;hc=895;break}Jb=k[Ic>>2]|0;if(Jb)j0a(Jb);Jb=k[Jc>>2]|0;if(Jb)j0a(Jb)}Jb=(k[a>>2]|0)+48|0;Jc=k[Jb>>2]|0;k[Jb>>2]=Jc+1;k[Ob>>2]=8;k[Ob+8>>2]=Jc;k[Ob+40>>2]=1;Jc=Ob+48|0;k[Jc>>2]=-1;k[Jc+4>>2]=-1;Jc=Ob+56|0;k[Jc>>2]=0;k[Jc+4>>2]=0;k[Jc+8>>2]=0;k[Jc+12>>2]=0;k[Jc+16>>2]=0;x=0;Ta(539,(k[a>>2]|0)+48|0,Ob|0)|0;Jc=x;x=0;f:do if(Jc&1)hc=1122;else{Jb=k[a>>2]|0;do if(!(k[jb>>2]|0)){if(ba){k[H>>2]=1;k[H+8>>2]=130;k[H+40>>2]=1;Ic=H+48|0;k[Ic>>2]=-1;k[Ic+4>>2]=-1;Ic=H+56|0;ca=H+60|0;da=H+72|0;ea=Jb+48|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[Ic+16>>2]=0;x=0;Ta(539,ea|0,H|0)|0;Ic=x;x=0;if(Ic&1){Ic=Hc()|0;Lb=M;fa=k[da>>2]|0;if(fa)j0a(fa);fa=k[ca>>2]|0;if(!fa){Mc=Lb;Nc=Ic;hc=1123;break f}j0a(fa);Mc=Lb;Nc=Ic;hc=1123;break f}Ic=k[da>>2]|0;if(Ic)j0a(Ic);Ic=k[ca>>2]|0;if(Ic)j0a(Ic);k[G>>2]=1;k[G+8>>2]=130;k[G+40>>2]=1;Ic=G+48|0;k[Ic>>2]=-1;k[Ic+4>>2]=-1;Ic=G+56|0;ca=G+60|0;da=G+72|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[Ic+16>>2]=0;x=0;Ta(539,ea|0,G|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;Ic=M;Lb=k[da>>2]|0;if(Lb)j0a(Lb);Lb=k[ca>>2]|0;if(!Lb){Mc=Ic;Nc=ea;hc=1123;break f}j0a(Lb);Mc=Ic;Nc=ea;hc=1123;break f}ea=k[da>>2]|0;if(ea)j0a(ea);ea=k[ca>>2]|0;if(ea)j0a(ea)}else{k[F>>2]=1;k[F+8>>2]=129;k[F+40>>2]=1;ea=F+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=F+56|0;ca=F+60|0;da=F+72|0;Ic=Jb+48|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,Ic|0,F|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;Lb=M;fa=k[da>>2]|0;if(fa)j0a(fa);fa=k[ca>>2]|0;if(!fa){Mc=Lb;Nc=ea;hc=1123;break f}j0a(fa);Mc=Lb;Nc=ea;hc=1123;break f}ea=k[da>>2]|0;if(ea)j0a(ea);ea=k[ca>>2]|0;if(ea)j0a(ea);k[Rb>>2]=0;k[Rb+32>>2]=1;k[E>>2]=2;$b=E+8|0;ac=Rb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));ea=E+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=E+56|0;ca=E+60|0;da=E+72|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,Ic|0,E|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;Lb=M;fa=k[da>>2]|0;if(fa)j0a(fa);fa=k[ca>>2]|0;if(!fa){Mc=Lb;Nc=ea;hc=1123;break f}j0a(fa);Mc=Lb;Nc=ea;hc=1123;break f}ea=k[da>>2]|0;if(ea)j0a(ea);ea=k[ca>>2]|0;if(ea)j0a(ea)}ea=k[a>>2]|0;ca=k[Vb>>2]|0;x=0;fb(140,D|0,329672,0);da=x;x=0;if(da&1){hc=1122;break f}x=0;pa(57,(ca|0)!=0|0,D|0,588,285183,276209);ca=x;x=0;if(ca&1){ca=Hc()|0;da=M;K2a(D);Mc=da;Nc=ca;hc=1123;break f}K2a(D);x=0;fb(317,Sb|0,ea|0,k[Vb>>2]|0);ea=x;x=0;if(ea&1){hc=1122;break f}k[Tb>>2]=-1;k[Tb+4>>2]=-1;k[Tb+8>>2]=0;ea=Tb+12|0;k[ea>>2]=0;x=0;fb(122,Sb|0,Tb|0,1);ca=x;x=0;if(ca&1){ca=Hc()|0;da=M;Lb=k[ea>>2]|0;if(!Lb){Oc=ca;Pc=da;break f}j0a(Lb);Oc=ca;Pc=da;break f}da=k[ea>>2]|0;if(da)j0a(da);da=k[Vb>>2]|0;x=0;fb(140,C|0,329672,0);ea=x;x=0;if(ea&1){hc=1122;break f}x=0;pa(57,(da|0)!=0|0,C|0,588,285183,276209);da=x;x=0;if(da&1){da=Hc()|0;ea=M;K2a(C);Mc=ea;Nc=da;hc=1123;break f}K2a(C);da=k[Vb>>2]|0;do if(da){ea=iDa(da,168,6704,0)|0;if(!ea){hc=1178;break}x=0;fb(319,a|0,ea|0,c|0);ea=x;x=0;if(ea&1){hc=1122;break f}}else hc=1178;while(0);do if((hc|0)==1178){x=0;fb(140,B|0,329672,0);Ic=x;x=0;if(Ic&1){hc=1122;break f}x=0;pa(57,(da|0)!=0|0,B|0,588,285183,276209);Ic=x;x=0;if(!(Ic&1)){K2a(B);x=0;fb(320,kb|0,k[Vb>>2]|0,1);Ic=x;x=0;if(Ic&1){hc=1122;break f}else break}else{Ic=Hc()|0;ea=M;K2a(B);Mc=ea;Nc=Ic;hc=1123;break f}}while(0);if(ba){x=0;nb(133,a|0,vc|0,2,3);da=x;x=0;if(da&1){hc=1122;break f}else break}da=k[a>>2]|0;k[A>>2]=1;k[A+8>>2]=144;k[A+40>>2]=1;Ic=A+48|0;k[Ic>>2]=-1;k[Ic+4>>2]=-1;Ic=A+56|0;ea=A+60|0;ca=A+72|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[Ic+16>>2]=0;x=0;Ta(539,da+48|0,A|0)|0;da=x;x=0;if(da&1){da=Hc()|0;Ic=M;Lb=k[ca>>2]|0;if(Lb)j0a(Lb);Lb=k[ea>>2]|0;if(!Lb){Mc=Ic;Nc=da;hc=1123;break f}j0a(Lb);Mc=Ic;Nc=da;hc=1123;break f}da=k[ca>>2]|0;if(da)j0a(da);da=k[ea>>2]|0;if(da)j0a(da);da=(k[a>>2]|0)+48|0;k[z>>2]=2;$b=z+8|0;ac=Fb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));ea=z+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=z+56|0;ca=z+60|0;Ic=z+72|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,da|0,z|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;Lb=M;fa=k[Ic>>2]|0;if(fa)j0a(fa);fa=k[ca>>2]|0;if(!fa){Mc=Lb;Nc=ea;hc=1123;break f}j0a(fa);Mc=Lb;Nc=ea;hc=1123;break f}ea=k[Ic>>2]|0;if(ea)j0a(ea);ea=k[ca>>2]|0;if(ea)j0a(ea);k[y>>2]=1;k[y+8>>2]=1;k[y+40>>2]=1;ea=y+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=y+56|0;ca=y+60|0;Ic=y+72|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,da|0,y|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;Lb=M;fa=k[Ic>>2]|0;if(fa)j0a(fa);fa=k[ca>>2]|0;if(!fa){Mc=Lb;Nc=ea;hc=1123;break f}j0a(fa);Mc=Lb;Nc=ea;hc=1123;break f}ea=k[Ic>>2]|0;if(ea)j0a(ea);ea=k[ca>>2]|0;if(ea)j0a(ea);ea=k[a>>2]|0;k[w>>2]=1;k[w+8>>2]=144;k[w+40>>2]=1;ca=w+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=w+56|0;Ic=w+60|0;Lb=w+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,ea+48|0,w|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;ca=M;fa=k[Lb>>2]|0;if(fa)j0a(fa);fa=k[Ic>>2]|0;if(!fa){Mc=ca;Nc=ea;hc=1123;break f}j0a(fa);Mc=ca;Nc=ea;hc=1123;break f}ea=k[Lb>>2]|0;if(ea)j0a(ea);ea=k[Ic>>2]|0;if(ea)j0a(ea)}else{k[S>>2]=1;k[S+8>>2]=129;k[S+40>>2]=1;ea=S+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=S+56|0;Ic=S+60|0;Lb=S+72|0;ca=Jb+48|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,ca|0,S|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;fa=M;ga=k[Lb>>2]|0;if(ga)j0a(ga);ga=k[Ic>>2]|0;if(!ga){Mc=fa;Nc=ea;hc=1123;break f}j0a(ga);Mc=fa;Nc=ea;hc=1123;break f}ea=k[Lb>>2]|0;if(ea)j0a(ea);ea=k[Ic>>2]|0;if(ea)j0a(ea);k[R>>2]=1;k[R+8>>2]=84;k[R+40>>2]=1;ea=R+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=R+56|0;Ic=R+60|0;Lb=R+72|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,ca|0,R|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;ea=M;fa=k[Lb>>2]|0;if(fa)j0a(fa);fa=k[Ic>>2]|0;if(!fa){Mc=ea;Nc=ca;hc=1123;break f}j0a(fa);Mc=ea;Nc=ca;hc=1123;break f}ca=k[Lb>>2]|0;if(ca)j0a(ca);ca=k[Ic>>2]|0;if(ca)j0a(ca);ca=k[a>>2]|0;k[Q>>2]=1;k[Q+8>>2]=129;k[Q+40>>2]=1;Ic=Q+48|0;k[Ic>>2]=-1;k[Ic+4>>2]=-1;Ic=Q+56|0;Lb=Q+60|0;ea=Q+72|0;fa=ca+48|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[Ic+16>>2]=0;x=0;Ta(539,fa|0,Q|0)|0;Ic=x;x=0;if(Ic&1){Ic=Hc()|0;ca=M;ga=k[ea>>2]|0;if(ga)j0a(ga);ga=k[Lb>>2]|0;if(!ga){Mc=ca;Nc=Ic;hc=1123;break f}j0a(ga);Mc=ca;Nc=Ic;hc=1123;break f}Ic=k[ea>>2]|0;if(Ic)j0a(Ic);Ic=k[Lb>>2]|0;if(Ic)j0a(Ic);k[P>>2]=1;k[P+8>>2]=82;k[P+40>>2]=1;Ic=P+48|0;k[Ic>>2]=-1;k[Ic+4>>2]=-1;Ic=P+56|0;Lb=P+60|0;ea=P+72|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[Ic+16>>2]=0;x=0;Ta(539,fa|0,P|0)|0;fa=x;x=0;if(fa&1){fa=Hc()|0;Ic=M;ca=k[ea>>2]|0;if(ca)j0a(ca);ca=k[Lb>>2]|0;if(!ca){Mc=Ic;Nc=fa;hc=1123;break f}j0a(ca);Mc=Ic;Nc=fa;hc=1123;break f}fa=k[ea>>2]|0;if(fa)j0a(fa);fa=k[Lb>>2]|0;if(fa)j0a(fa);fa=k[a>>2]|0;k[O>>2]=1;k[O+8>>2]=144;k[O+40>>2]=1;Lb=O+48|0;k[Lb>>2]=-1;k[Lb+4>>2]=-1;Lb=O+56|0;ea=O+60|0;Ic=O+72|0;ca=fa+48|0;k[Lb>>2]=0;k[Lb+4>>2]=0;k[Lb+8>>2]=0;k[Lb+12>>2]=0;k[Lb+16>>2]=0;x=0;Ta(539,ca|0,O|0)|0;Lb=x;x=0;if(Lb&1){Lb=Hc()|0;fa=M;ga=k[Ic>>2]|0;if(ga)j0a(ga);ga=k[ea>>2]|0;if(!ga){Mc=fa;Nc=Lb;hc=1123;break f}j0a(ga);Mc=fa;Nc=Lb;hc=1123;break f}Lb=k[Ic>>2]|0;if(Lb)j0a(Lb);Lb=k[ea>>2]|0;if(Lb)j0a(Lb);k[Pb>>2]=1;k[Pb+32>>2]=1;k[N>>2]=2;$b=N+8|0;ac=Pb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));da=N+48|0;k[da>>2]=-1;k[da+4>>2]=-1;da=N+56|0;Lb=N+60|0;ea=N+72|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[da+16>>2]=0;x=0;Ta(539,ca|0,N|0)|0;da=x;x=0;if(da&1){da=Hc()|0;Ic=M;fa=k[ea>>2]|0;if(fa)j0a(fa);fa=k[Lb>>2]|0;if(!fa){Mc=Ic;Nc=da;hc=1123;break f}j0a(fa);Mc=Ic;Nc=da;hc=1123;break f}da=k[ea>>2]|0;if(da)j0a(da);da=k[Lb>>2]|0;if(da)j0a(da);k[L>>2]=1;k[L+8>>2]=1;k[L+40>>2]=1;da=L+48|0;k[da>>2]=-1;k[da+4>>2]=-1;da=L+56|0;Lb=L+60|0;ea=L+72|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[da+16>>2]=0;x=0;Ta(539,ca|0,L|0)|0;da=x;x=0;if(da&1){da=Hc()|0;Ic=M;fa=k[ea>>2]|0;if(fa)j0a(fa);fa=k[Lb>>2]|0;if(!fa){Mc=Ic;Nc=da;hc=1123;break f}j0a(fa);Mc=Ic;Nc=da;hc=1123;break f}da=k[ea>>2]|0;if(da)j0a(da);da=k[Lb>>2]|0;if(da)j0a(da);da=k[a>>2]|0;k[K>>2]=1;k[K+8>>2]=144;k[K+40>>2]=1;Lb=K+48|0;k[Lb>>2]=-1;k[Lb+4>>2]=-1;Lb=K+56|0;ea=K+60|0;Ic=K+72|0;fa=da+48|0;k[Lb>>2]=0;k[Lb+4>>2]=0;k[Lb+8>>2]=0;k[Lb+12>>2]=0;k[Lb+16>>2]=0;x=0;Ta(539,fa|0,K|0)|0;Lb=x;x=0;if(Lb&1){Lb=Hc()|0;da=M;ga=k[Ic>>2]|0;if(ga)j0a(ga);ga=k[ea>>2]|0;if(!ga){Mc=da;Nc=Lb;hc=1123;break f}j0a(ga);Mc=da;Nc=Lb;hc=1123;break f}Lb=k[Ic>>2]|0;if(Lb)j0a(Lb);Lb=k[ea>>2]|0;if(Lb)j0a(Lb);k[Qb>>2]=32;k[Qb+32>>2]=1;k[J>>2]=2;$b=J+8|0;ac=Qb;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));ca=J+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=J+56|0;Lb=J+60|0;ea=J+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,fa|0,J|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;Ic=M;da=k[ea>>2]|0;if(da)j0a(da);da=k[Lb>>2]|0;if(!da){Mc=Ic;Nc=ca;hc=1123;break f}j0a(da);Mc=Ic;Nc=ca;hc=1123;break f}ca=k[ea>>2]|0;if(ca)j0a(ca);ca=k[Lb>>2]|0;if(ca)j0a(ca);k[I>>2]=1;k[I+8>>2]=1;k[I+40>>2]=1;ca=I+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=I+56|0;Lb=I+60|0;ea=I+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,fa|0,I|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;Ic=M;da=k[ea>>2]|0;if(da)j0a(da);da=k[Lb>>2]|0;if(!da){Mc=Ic;Nc=ca;hc=1123;break f}j0a(da);Mc=Ic;Nc=ca;hc=1123;break f}ca=k[ea>>2]|0;if(ca)j0a(ca);ca=k[Lb>>2]|0;if(ca)j0a(ca)}while(0);Jb=k[a>>2]|0;k[v>>2]=1;k[v+8>>2]=128;k[v+40>>2]=1;ca=v+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=v+56|0;Lb=v+60|0;ea=v+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,Jb+48|0,v|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;Ic=M;da=k[ea>>2]|0;if(da)j0a(da);da=k[Lb>>2]|0;if(!da){Mc=Ic;Nc=ca;hc=1123;break}j0a(da);Mc=Ic;Nc=ca;hc=1123;break}ca=k[ea>>2]|0;if(ca)j0a(ca);ca=k[Lb>>2]|0;if(ca)j0a(ca);x=0;fb(140,u|0,295946,34);ca=x;x=0;if(ca&1){hc=1122;break}x=0;pa(51,1,u|0,210,295981,296025);ca=x;x=0;if(ca&1){ca=Hc()|0;Lb=M;K2a(u);Mc=Lb;Nc=ca;hc=1123;break}K2a(u);x=0;Ta(594,Jb|0,(ba?-124:-125)|0)|0;Jb=x;x=0;if(Jb&1){hc=1122;break}Jb=k[a>>2]|0;k[t>>2]=1;k[t+8>>2]=17;k[t+40>>2]=1;ca=t+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=t+56|0;Lb=t+60|0;ea=t+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,Jb+48|0,t|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;ca=M;Ic=k[ea>>2]|0;if(Ic)j0a(Ic);Ic=k[Lb>>2]|0;if(!Ic){Mc=ca;Nc=Jb;hc=1123;break}j0a(Ic);Mc=ca;Nc=Jb;hc=1123;break}Jb=k[ea>>2]|0;if(Jb)j0a(Jb);Jb=k[Lb>>2]|0;if(Jb)j0a(Jb);x=0;fb(315,s|0,(k[a>>2]|0)+48|0,Ob|0);Jb=x;x=0;if(Jb&1){hc=1122;break}Jb=k[s+72>>2]|0;if(Jb)j0a(Jb);Jb=k[s+60>>2]|0;if(Jb)j0a(Jb);if(ba){Jb=k[a>>2]|0;k[q>>2]=1;k[q+8>>2]=144;k[q+40>>2]=1;Lb=q+48|0;k[Lb>>2]=-1;k[Lb+4>>2]=-1;Lb=q+56|0;ea=q+60|0;ca=q+72|0;Ic=Jb+48|0;k[Lb>>2]=0;k[Lb+4>>2]=0;k[Lb+8>>2]=0;k[Lb+12>>2]=0;k[Lb+16>>2]=0;x=0;Ta(539,Ic|0,q|0)|0;Lb=x;x=0;if(Lb&1){Lb=Hc()|0;Jb=M;da=k[ca>>2]|0;if(da)j0a(da);da=k[ea>>2]|0;if(!da){Mc=Jb;Nc=Lb;hc=1123;break}j0a(da);Mc=Jb;Nc=Lb;hc=1123;break}Lb=k[ca>>2]|0;if(Lb)j0a(Lb);Lb=k[ea>>2]|0;if(Lb)j0a(Lb);k[p>>2]=1;k[p+8>>2]=80;k[p+40>>2]=1;Lb=p+48|0;k[Lb>>2]=-1;k[Lb+4>>2]=-1;Lb=p+56|0;ea=p+60|0;ca=p+72|0;k[Lb>>2]=0;k[Lb+4>>2]=0;k[Lb+8>>2]=0;k[Lb+12>>2]=0;k[Lb+16>>2]=0;x=0;Ta(539,Ic|0,p|0)|0;Ic=x;x=0;if(Ic&1){Ic=Hc()|0;Lb=M;Jb=k[ca>>2]|0;if(Jb)j0a(Jb);Jb=k[ea>>2]|0;if(!Jb){Mc=Lb;Nc=Ic;hc=1123;break}j0a(Jb);Mc=Lb;Nc=Ic;hc=1123;break}Ic=k[ca>>2]|0;if(Ic)j0a(Ic);Ic=k[ea>>2]|0;if(Ic)j0a(Ic)}if(!((_b&31|0)==0|c^1)){Ic=k[a>>2]|0;k[o>>2]=1;k[o+8>>2]=130;k[o+40>>2]=1;ea=o+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=o+56|0;ca=o+60|0;Lb=o+72|0;Jb=Ic+48|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,Jb|0,o|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;Ic=M;da=k[Lb>>2]|0;if(da)j0a(da);da=k[ca>>2]|0;if(!da){Mc=Ic;Nc=ea;hc=1123;break}j0a(da);Mc=Ic;Nc=ea;hc=1123;break}ea=k[Lb>>2]|0;if(ea)j0a(ea);ea=k[ca>>2]|0;if(ea)j0a(ea);k[n>>2]=1;k[n+8>>2]=144;k[n+40>>2]=1;ea=n+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=n+56|0;ca=n+60|0;Lb=n+72|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,Jb|0,n|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;Ic=M;da=k[Lb>>2]|0;if(da)j0a(da);da=k[ca>>2]|0;if(!da){Mc=Ic;Nc=ea;hc=1123;break}j0a(da);Mc=Ic;Nc=ea;hc=1123;break}ea=k[Lb>>2]|0;if(ea)j0a(ea);ea=k[ca>>2]|0;if(ea)j0a(ea);k[m>>2]=1;k[m+8>>2]=3;k[m+40>>2]=1;ea=m+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=m+56|0;ca=m+60|0;Lb=m+72|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,Jb|0,m|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;ea=M;Ic=k[Lb>>2]|0;if(Ic)j0a(Ic);Ic=k[ca>>2]|0;if(!Ic){Mc=ea;Nc=Jb;hc=1123;break}j0a(Ic);Mc=ea;Nc=Jb;hc=1123;break}Jb=k[Lb>>2]|0;if(Jb)j0a(Jb);Jb=k[ca>>2]|0;if(Jb)j0a(Jb);Jb=k[a>>2]|0;k[Ub>>2]=31;k[Ub+32>>2]=1;ca=Jb+48|0;k[l>>2]=2;$b=l+8|0;ac=Ub;bc=$b+40|0;do{k[$b>>2]=k[ac>>2];$b=$b+4|0;ac=ac+4|0}while(($b|0)<(bc|0));Jb=l+48|0;k[Jb>>2]=-1;k[Jb+4>>2]=-1;Jb=l+56|0;Lb=l+60|0;ea=l+72|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[Jb+16>>2]=0;x=0;Ta(539,ca|0,l|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;Ic=M;da=k[ea>>2]|0;if(da)j0a(da);da=k[Lb>>2]|0;if(!da){Mc=Ic;Nc=Jb;hc=1123;break}j0a(da);Mc=Ic;Nc=Jb;hc=1123;break}Jb=k[ea>>2]|0;if(Jb)j0a(Jb);Jb=k[Lb>>2]|0;if(Jb)j0a(Jb);k[j>>2]=1;k[j+8>>2]=22;k[j+40>>2]=1;Jb=j+48|0;k[Jb>>2]=-1;k[Jb+4>>2]=-1;Jb=j+56|0;Lb=j+60|0;ea=j+72|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[Jb+16>>2]=0;x=0;Ta(539,ca|0,j|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;Ic=M;da=k[ea>>2]|0;if(da)j0a(da);da=k[Lb>>2]|0;if(!da){Mc=Ic;Nc=Jb;hc=1123;break}j0a(da);Mc=Ic;Nc=Jb;hc=1123;break}Jb=k[ea>>2]|0;if(Jb)j0a(Jb);Jb=k[Lb>>2]|0;if(Jb)j0a(Jb);Jb=k[a>>2]|0;k[i>>2]=1;k[i+8>>2]=130;k[i+40>>2]=1;Lb=i+48|0;k[Lb>>2]=-1;k[Lb+4>>2]=-1;Lb=i+56|0;ea=i+60|0;Ic=i+72|0;da=Jb+48|0;k[Lb>>2]=0;k[Lb+4>>2]=0;k[Lb+8>>2]=0;k[Lb+12>>2]=0;k[Lb+16>>2]=0;x=0;Ta(539,da|0,i|0)|0;Lb=x;x=0;if(Lb&1){Lb=Hc()|0;Jb=M;ga=k[Ic>>2]|0;if(ga)j0a(ga);ga=k[ea>>2]|0;if(!ga){Mc=Jb;Nc=Lb;hc=1123;break}j0a(ga);Mc=Jb;Nc=Lb;hc=1123;break}Lb=k[Ic>>2]|0;if(Lb)j0a(Lb);Lb=k[ea>>2]|0;if(Lb)j0a(Lb);k[h>>2]=1;k[h+8>>2]=1;k[h+40>>2]=1;Lb=h+48|0;k[Lb>>2]=-1;k[Lb+4>>2]=-1;Lb=h+56|0;ea=h+60|0;Ic=h+72|0;k[Lb>>2]=0;k[Lb+4>>2]=0;k[Lb+8>>2]=0;k[Lb+12>>2]=0;k[Lb+16>>2]=0;x=0;Ta(539,da|0,h|0)|0;da=x;x=0;if(da&1){da=Hc()|0;Lb=M;Jb=k[Ic>>2]|0;if(Jb)j0a(Jb);Jb=k[ea>>2]|0;if(!Jb){Mc=Lb;Nc=da;hc=1123;break}j0a(Jb);Mc=Lb;Nc=da;hc=1123;break}da=k[Ic>>2]|0;if(da)j0a(da);da=k[ea>>2]|0;if(da)j0a(da);da=k[a>>2]|0;k[g>>2]=1;k[g+8>>2]=145;k[g+40>>2]=1;ea=g+48|0;k[ea>>2]=-1;k[ea+4>>2]=-1;ea=g+56|0;Ic=g+60|0;Lb=g+72|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,da+48|0,g|0)|0;da=x;x=0;if(da&1){da=Hc()|0;ea=M;Jb=k[Lb>>2]|0;if(Jb)j0a(Jb);Jb=k[Ic>>2]|0;if(!Jb){Mc=ea;Nc=da;hc=1123;break}j0a(Jb);Mc=ea;Nc=da;hc=1123;break}da=k[Lb>>2]|0;if(da)j0a(da);da=k[Ic>>2]|0;if(da)j0a(da)}da=(k[a>>2]|0)+48|0;x=0;Ta(539,da|0,Hb|0)|0;Ic=x;x=0;if(Ic&1){hc=1122;break}k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;Ic=f+48|0;k[Ic>>2]=-1;k[Ic+4>>2]=-1;Ic=f+56|0;Lb=f+60|0;ea=f+72|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[Ic+16>>2]=0;x=0;Ta(539,da|0,f|0)|0;Ic=x;x=0;if(Ic&1){Ic=Hc()|0;Jb=M;ga=k[ea>>2]|0;if(ga)j0a(ga);ga=k[Lb>>2]|0;if(!ga){Mc=Jb;Nc=Ic;hc=1123;break}j0a(ga);Mc=Jb;Nc=Ic;hc=1123;break}Ic=k[ea>>2]|0;if(Ic)j0a(Ic);Ic=k[Lb>>2]|0;if(Ic)j0a(Ic);k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;Ic=e+48|0;k[Ic>>2]=-1;k[Ic+4>>2]=-1;Ic=e+56|0;Lb=e+60|0;ea=e+72|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[Ic+16>>2]=0;x=0;Ta(539,da|0,e|0)|0;da=x;x=0;if(da&1){da=Hc()|0;Ic=M;Jb=k[ea>>2]|0;if(Jb)j0a(Jb);Jb=k[Lb>>2]|0;if(!Jb){Mc=Ic;Nc=da;hc=1123;break}j0a(Jb);Mc=Ic;Nc=da;hc=1123;break}da=k[ea>>2]|0;if(da)j0a(da);da=k[Lb>>2]|0;if(da)j0a(da);da=k[Ob+72>>2]|0;if(da)j0a(da);da=k[Ob+60>>2]|0;if(da)j0a(da);da=k[Hb+72>>2]|0;if(da)j0a(da);da=k[Hb+60>>2]|0;if(da)j0a(da);r=d;return}while(0);if((hc|0)==1122){ba=Hc()|0;Mc=M;Nc=ba;hc=1123}if((hc|0)==1123){Oc=Nc;Pc=Mc}ba=k[Ob+72>>2]|0;if(ba)j0a(ba);ba=k[Ob+60>>2]|0;if(!ba){Kc=Oc;Lc=Pc;break}j0a(ba);Kc=Oc;Lc=Pc}while(0);if((hc|0)==894){Pc=Hc()|0;Fc=M;Gc=Pc;hc=895}if((hc|0)==895){Kc=Gc;Lc=Fc}Fc=k[Hb+72>>2]|0;if(Fc)j0a(Fc);Fc=k[Hb+60>>2]|0;if(!Fc){Yb=Kc;Zb=Lc;Sc(Yb|0)}j0a(Fc);Yb=Kc;Zb=Lc;Sc(Yb|0)}}}function Dia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0;d=r;r=r+2560|0;e=d+2280|0;f=d+2200|0;g=d+2120|0;h=d+2040|0;i=d+2536|0;j=d+2524|0;l=d+1960|0;m=d+1880|0;n=d+1800|0;o=d+1720|0;p=d+1640|0;q=d+1560|0;s=d+1480|0;t=d+1400|0;u=d+1320|0;v=d+1240|0;w=d+1160|0;y=d+2512|0;z=d+2500|0;A=d+1080|0;B=d+1e3|0;C=d+920|0;D=d+840|0;E=d+760|0;F=d+680|0;G=d+600|0;H=d+520|0;I=d+440|0;J=d+160|0;K=d+360|0;L=d+320|0;N=d+2472|0;O=d+2444|0;P=d;Q=d+280|0;R=d+2440|0;S=d+2428|0;T=d+2400|0;U=d+2372|0;V=d+240|0;W=d+120|0;X=d+80|0;Y=d+2360|0;Z=k[b+24>>2]|0;if(c){yia(a,b,1);c=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=129;k[e+40>>2]=1;_=e+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=e+56|0;$=e+60|0;aa=e+72|0;ba=c+48|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,ba|0,e|0)|0;_=x;x=0;if(_&1){_=Hc()|0;c=k[aa>>2]|0;if(c)j0a(c);c=k[$>>2]|0;if(!c)Sc(_|0);j0a(c);Sc(_|0)}_=k[aa>>2]|0;if(_)j0a(_);_=k[$>>2]|0;if(_)j0a(_);k[e>>2]=1;k[e+8>>2]=16;k[e+40>>2]=1;_=e+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=e+56|0;$=e+60|0;aa=e+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,ba|0,e|0)|0;_=x;x=0;if(_&1){_=Hc()|0;c=k[aa>>2]|0;if(c)j0a(c);c=k[$>>2]|0;if(!c)Sc(_|0);j0a(c);Sc(_|0)}_=k[aa>>2]|0;if(_)j0a(_);_=k[$>>2]|0;if(_)j0a(_);k[e>>2]=1;k[e+8>>2]=21;k[e+40>>2]=1;_=e+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=e+56|0;$=e+60|0;aa=e+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,ba|0,e|0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;_=k[aa>>2]|0;if(_)j0a(_);_=k[$>>2]|0;if(!_)Sc(ba|0);j0a(_);Sc(ba|0)}ba=k[aa>>2]|0;if(ba)j0a(ba);ba=k[$>>2]|0;if(ba)j0a(ba);ba=k[a>>2]|0;k[K>>2]=4;k[K+8>>2]=0;k[K+40>>2]=1;$=K+48|0;k[$>>2]=-1;k[$+4>>2]=-1;$=K+56|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[$+16>>2]=0;x=0;fb(315,J|0,ba+48|0,K|0);K=x;x=0;if(K&1){K=Hc()|0;ca=M;da=K;Sc(da|0)}K=k[J+72>>2]|0;if(K)j0a(K);K=k[J+60>>2]|0;if(K)j0a(K)}K=(Z|0)==1;do if(K?Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0:0){J=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;ba=e+48|0;k[ba>>2]=-1;k[ba+4>>2]=-1;ba=e+56|0;$=e+60|0;aa=e+72|0;_=J+48|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[ba+16>>2]=0;x=0;Ta(539,_|0,e|0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;J=k[aa>>2]|0;if(J)j0a(J);J=k[$>>2]|0;if(!J)Sc(ba|0);j0a(J);Sc(ba|0)}ba=k[aa>>2]|0;if(ba)j0a(ba);ba=k[$>>2]|0;if(ba)j0a(ba);k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;ba=e+48|0;k[ba>>2]=-1;k[ba+4>>2]=-1;ba=e+56|0;$=e+60|0;aa=e+72|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[ba+16>>2]=0;x=0;Ta(539,_|0,e|0)|0;_=x;x=0;if(!(_&1)){_=k[aa>>2]|0;if(_)j0a(_);_=k[$>>2]|0;if(_)j0a(_);break}_=Hc()|0;ba=k[aa>>2]|0;if(ba)j0a(ba);ba=k[$>>2]|0;if(!ba)Sc(_|0);j0a(ba);Sc(_|0)}while(0);_=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;ba=e+48|0;k[ba>>2]=-1;k[ba+4>>2]=-1;ba=e+56|0;$=e+60|0;aa=e+72|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[ba+16>>2]=0;x=0;Ta(539,_+48|0,e|0)|0;_=x;x=0;if(_&1){_=Hc()|0;ba=k[aa>>2]|0;if(ba)j0a(ba);ba=k[$>>2]|0;if(!ba)Sc(_|0);j0a(ba);Sc(_|0)}_=k[aa>>2]|0;if(_)j0a(_);_=k[$>>2]|0;if(_)j0a(_);a:do switch(Z|0){case 2:{if(Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0){_=k[a>>2]|0;k[L>>2]=32;k[L+32>>2]=1;$=_+48|0;k[e>>2]=2;ea=e+8|0;fa=L;ga=ea+40|0;do{k[ea>>2]=k[fa>>2];ea=ea+4|0;fa=fa+4|0}while((ea|0)<(ga|0));_=e+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=e+56|0;aa=e+60|0;ba=e+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,$|0,e|0)|0;_=x;x=0;if(_&1){_=Hc()|0;J=k[ba>>2]|0;if(J)j0a(J);J=k[aa>>2]|0;if(!J)Sc(_|0);j0a(J);Sc(_|0)}_=k[ba>>2]|0;if(_)j0a(_);_=k[aa>>2]|0;if(_)j0a(_);k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;_=e+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=e+56|0;aa=e+60|0;ba=e+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,$|0,e|0)|0;_=x;x=0;if(!(_&1)){_=k[ba>>2]|0;if(_)j0a(_);_=k[aa>>2]|0;if(_)j0a(_);break a}_=Hc()|0;J=k[ba>>2]|0;if(J)j0a(J);J=k[aa>>2]|0;if(!J)Sc(_|0);j0a(J);Sc(_|0)}break}case 1:break;case 0:{_=(k[a>>2]|0)+48|0;J=k[_>>2]|0;k[_>>2]=J+1;k[P>>2]=8;k[P+8>>2]=J;k[P+40>>2]=1;J=P+48|0;k[J>>2]=-1;k[J+4>>2]=-1;J=P+56|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[J+16>>2]=0;do if(!(k[b+32>>2]|0))ha=225;else{J=k[a>>2]|0;k[I>>2]=1;k[I+8>>2]=144;k[I+40>>2]=1;_=I+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=I+56|0;aa=I+60|0;ba=I+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,J+48|0,I|0)|0;J=x;x=0;if(J&1){J=Hc()|0;_=M;c=k[ba>>2]|0;if(c)j0a(c);c=k[aa>>2]|0;if(!c){ia=_;ja=J;ha=224;break}j0a(c);ia=_;ja=J;ha=224;break}J=k[ba>>2]|0;if(J)j0a(J);J=k[aa>>2]|0;if(J)j0a(J);J=k[a>>2]|0;k[H>>2]=1;k[H+8>>2]=129;k[H+40>>2]=1;aa=H+48|0;k[aa>>2]=-1;k[aa+4>>2]=-1;aa=H+56|0;ba=H+60|0;_=H+72|0;c=J+48|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[aa+16>>2]=0;x=0;Ta(539,c|0,H|0)|0;aa=x;x=0;if(aa&1){aa=Hc()|0;J=M;ka=k[_>>2]|0;if(ka)j0a(ka);ka=k[ba>>2]|0;if(!ka){ia=J;ja=aa;ha=224;break}j0a(ka);ia=J;ja=aa;ha=224;break}aa=k[_>>2]|0;if(aa)j0a(aa);aa=k[ba>>2]|0;if(aa)j0a(aa);k[G>>2]=1;k[G+8>>2]=84;k[G+40>>2]=1;aa=G+48|0;k[aa>>2]=-1;k[aa+4>>2]=-1;aa=G+56|0;ba=G+60|0;_=G+72|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[aa+16>>2]=0;x=0;Ta(539,c|0,G|0)|0;c=x;x=0;if(c&1){c=Hc()|0;aa=M;J=k[_>>2]|0;if(J)j0a(J);J=k[ba>>2]|0;if(!J){ia=aa;ja=c;ha=224;break}j0a(J);ia=aa;ja=c;ha=224;break}c=k[_>>2]|0;if(c)j0a(c);c=k[ba>>2]|0;if(c)j0a(c);c=k[a>>2]|0;k[Q>>2]=1;k[Q+32>>2]=1;ba=c+48|0;k[F>>2]=2;ea=F+8|0;fa=Q;ga=ea+40|0;do{k[ea>>2]=k[fa>>2];ea=ea+4|0;fa=fa+4|0}while((ea|0)<(ga|0));c=F+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=F+56|0;_=F+60|0;aa=F+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,ba|0,F|0)|0;c=x;x=0;if(c&1){c=Hc()|0;J=M;ka=k[aa>>2]|0;if(ka)j0a(ka);ka=k[_>>2]|0;if(!ka){ia=J;ja=c;ha=224;break}j0a(ka);ia=J;ja=c;ha=224;break}c=k[aa>>2]|0;if(c)j0a(c);c=k[_>>2]|0;if(c)j0a(c);k[E>>2]=1;k[E+8>>2]=22;k[E+40>>2]=1;c=E+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=E+56|0;_=E+60|0;aa=E+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,ba|0,E|0)|0;c=x;x=0;if(c&1){c=Hc()|0;J=M;ka=k[aa>>2]|0;if(ka)j0a(ka);ka=k[_>>2]|0;if(!ka){ia=J;ja=c;ha=224;break}j0a(ka);ia=J;ja=c;ha=224;break}c=k[aa>>2]|0;if(c)j0a(c);c=k[_>>2]|0;if(c)j0a(c);k[D>>2]=1;k[D+8>>2]=21;k[D+40>>2]=1;c=D+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=D+56|0;_=D+60|0;aa=D+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,ba|0,D|0)|0;c=x;x=0;if(c&1){c=Hc()|0;J=M;ka=k[aa>>2]|0;if(ka)j0a(ka);ka=k[_>>2]|0;if(!ka){ia=J;ja=c;ha=224;break}j0a(ka);ia=J;ja=c;ha=224;break}c=k[aa>>2]|0;if(c)j0a(c);c=k[_>>2]|0;if(c)j0a(c);x=0;fb(315,C|0,(k[a>>2]|0)+48|0,P|0);c=x;x=0;if(c&1){ha=223;break}c=k[C+72>>2]|0;if(c)j0a(c);c=k[C+60>>2]|0;if(c)j0a(c);c=k[a>>2]|0;k[B>>2]=1;k[B+8>>2]=144;k[B+40>>2]=1;_=B+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=B+56|0;aa=B+60|0;J=B+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,c+48|0,B|0)|0;c=x;x=0;if(c&1){c=Hc()|0;_=M;ka=k[J>>2]|0;if(ka)j0a(ka);ka=k[aa>>2]|0;if(!ka){ia=_;ja=c;ha=224;break}j0a(ka);ia=_;ja=c;ha=224;break}c=k[J>>2]|0;if(c)j0a(c);c=k[aa>>2]|0;if(c)j0a(c);ha=225}while(0);b:do if((ha|0)==225){x=0;$=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;c=x;x=0;if(!(c&1)){if($?(k[R>>2]=k[a>>2],x=0,va(1505,R|0),$=x,x=0,$&1):0){ha=223;break}$=k[a>>2]|0;k[A>>2]=1;k[A+8>>2]=144;k[A+40>>2]=1;c=A+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=A+56|0;aa=A+60|0;J=A+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,$+48|0,A|0)|0;$=x;x=0;if($&1){$=Hc()|0;c=M;_=k[J>>2]|0;if(_)j0a(_);_=k[aa>>2]|0;if(!_){ia=c;ja=$;ha=224;break}j0a(_);ia=c;ja=$;ha=224;break}$=k[J>>2]|0;if($)j0a($);$=k[aa>>2]|0;if($)j0a($);$=b+36|0;aa=k[$>>2]|0;x=0;fb(140,z|0,329672,0);J=x;x=0;if(!(J&1)){x=0;pa(57,(aa|0)!=0|0,z|0,588,285183,276209);aa=x;x=0;if(aa&1){aa=Hc()|0;J=M;K2a(z);ia=J;ja=aa;ha=224;break}K2a(z);aa=k[$>>2]|0;x=0;J=Ba(k[(k[aa>>2]|0)+44>>2]|0,aa|0)|0;aa=x;x=0;if(!(aa&1)){do if(J>>>0<17){aa=k[$>>2]|0;x=0;fb(140,y|0,329672,0);c=x;x=0;if(c&1){ha=223;break b}x=0;pa(57,(aa|0)!=0|0,y|0,588,285183,276209);aa=x;x=0;if(aa&1){aa=Hc()|0;c=M;K2a(y);ia=c;ja=aa;ha=224;break b}K2a(y);aa=k[$>>2]|0;x=0;c=Ba(k[(k[aa>>2]|0)+44>>2]|0,aa|0)|0;aa=x;x=0;if(aa&1){ha=223;break b}x=0;fb(140,S|0,329672,0);aa=x;x=0;if(aa&1){ha=223;break b}x=0;pa(57,(c|0)!=0|0,S|0,906,258380,258982);aa=x;x=0;if(aa&1){aa=Hc()|0;_=M;K2a(S);la=_;ma=aa;break b}K2a(S);aa=(k[a>>2]|0)+48|0;k[w>>2]=2;k[w+8>>2]=32/(c>>>0)|0;_=w+12|0;k[_>>2]=k[T>>2];k[_+4>>2]=k[T+4>>2];k[_+8>>2]=k[T+8>>2];k[_+12>>2]=k[T+12>>2];k[_+16>>2]=k[T+16>>2];k[_+20>>2]=k[T+20>>2];k[_+24>>2]=k[T+24>>2];k[w+40>>2]=1;_=w+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=w+56|0;ka=w+60|0;na=w+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,aa|0,w|0)|0;_=x;x=0;if(_&1){_=Hc()|0;oa=M;qa=k[na>>2]|0;if(qa)j0a(qa);qa=k[ka>>2]|0;if(!qa){ia=oa;ja=_;ha=224;break b}j0a(qa);ia=oa;ja=_;ha=224;break b}_=k[na>>2]|0;if(_)j0a(_);_=k[ka>>2]|0;if(_)j0a(_);k[v>>2]=1;k[v+8>>2]=145;k[v+40>>2]=1;_=v+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=v+56|0;ka=v+60|0;na=v+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,aa|0,v|0)|0;aa=x;x=0;if(aa&1){aa=Hc()|0;_=M;oa=k[na>>2]|0;if(oa)j0a(oa);oa=k[ka>>2]|0;if(!oa){ia=_;ja=aa;ha=224;break b}j0a(oa);ia=_;ja=aa;ha=224;break b}aa=k[na>>2]|0;if(aa)j0a(aa);aa=k[ka>>2]|0;if(aa)j0a(aa);aa=k[a>>2]|0;k[u>>2]=1;k[u+8>>2]=130;k[u+40>>2]=1;ka=u+48|0;k[ka>>2]=-1;k[ka+4>>2]=-1;ka=u+56|0;na=u+60|0;_=u+72|0;oa=aa+48|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[ka+16>>2]=0;x=0;Ta(539,oa|0,u|0)|0;ka=x;x=0;if(ka&1){ka=Hc()|0;aa=M;qa=k[_>>2]|0;if(qa)j0a(qa);qa=k[na>>2]|0;if(!qa){ia=aa;ja=ka;ha=224;break b}j0a(qa);ia=aa;ja=ka;ha=224;break b}ka=k[_>>2]|0;if(ka)j0a(ka);ka=k[na>>2]|0;if(ka)j0a(ka);k[t>>2]=1;k[t+8>>2]=130;k[t+40>>2]=1;ka=t+48|0;k[ka>>2]=-1;k[ka+4>>2]=-1;ka=t+56|0;na=t+60|0;_=t+72|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[ka+16>>2]=0;x=0;Ta(539,oa|0,t|0)|0;ka=x;x=0;if(ka&1){ka=Hc()|0;aa=M;qa=k[_>>2]|0;if(qa)j0a(qa);qa=k[na>>2]|0;if(!qa){ia=aa;ja=ka;ha=224;break b}j0a(qa);ia=aa;ja=ka;ha=224;break b}ka=k[_>>2]|0;if(ka)j0a(ka);ka=k[na>>2]|0;if(ka)j0a(ka);k[s>>2]=1;k[s+8>>2]=4;k[s+40>>2]=1;ka=s+48|0;k[ka>>2]=-1;k[ka+4>>2]=-1;ka=s+56|0;na=s+60|0;_=s+72|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[ka+16>>2]=0;x=0;Ta(539,oa|0,s|0)|0;ka=x;x=0;if(ka&1){ka=Hc()|0;aa=M;qa=k[_>>2]|0;if(qa)j0a(qa);qa=k[na>>2]|0;if(!qa){ia=aa;ja=ka;ha=224;break b}j0a(qa);ia=aa;ja=ka;ha=224;break b}ka=k[_>>2]|0;if(ka)j0a(ka);ka=k[na>>2]|0;if(ka)j0a(ka);k[q>>2]=1;k[q+8>>2]=1;k[q+40>>2]=1;ka=q+48|0;k[ka>>2]=-1;k[ka+4>>2]=-1;ka=q+56|0;na=q+60|0;_=q+72|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[ka+16>>2]=0;x=0;Ta(539,oa|0,q|0)|0;ka=x;x=0;if(ka&1){ka=Hc()|0;aa=M;qa=k[_>>2]|0;if(qa)j0a(qa);qa=k[na>>2]|0;if(!qa){ia=aa;ja=ka;ha=224;break b}j0a(qa);ia=aa;ja=ka;ha=224;break b}ka=k[_>>2]|0;if(ka)j0a(ka);ka=k[na>>2]|0;if(ka)j0a(ka);k[p>>2]=1;k[p+8>>2]=145;k[p+40>>2]=1;ka=p+48|0;k[ka>>2]=-1;k[ka+4>>2]=-1;ka=p+56|0;na=p+60|0;_=p+72|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[ka+16>>2]=0;x=0;Ta(539,oa|0,p|0)|0;ka=x;x=0;if(ka&1){ka=Hc()|0;aa=M;qa=k[_>>2]|0;if(qa)j0a(qa);qa=k[na>>2]|0;if(!qa){ia=aa;ja=ka;ha=224;break b}j0a(qa);ia=aa;ja=ka;ha=224;break b}ka=k[_>>2]|0;if(ka)j0a(ka);ka=k[na>>2]|0;if(ka)j0a(ka);k[o>>2]=1;k[o+8>>2]=144;k[o+40>>2]=1;ka=o+48|0;k[ka>>2]=-1;k[ka+4>>2]=-1;ka=o+56|0;na=o+60|0;_=o+72|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[ka+16>>2]=0;x=0;Ta(539,oa|0,o|0)|0;ka=x;x=0;if(ka&1){ka=Hc()|0;aa=M;qa=k[_>>2]|0;if(qa)j0a(qa);qa=k[na>>2]|0;if(!qa){ia=aa;ja=ka;ha=224;break b}j0a(qa);ia=aa;ja=ka;ha=224;break b}ka=k[_>>2]|0;if(ka)j0a(ka);ka=k[na>>2]|0;if(ka)j0a(ka);k[n>>2]=1;k[n+8>>2]=6;k[n+40>>2]=1;ka=n+48|0;k[ka>>2]=-1;k[ka+4>>2]=-1;ka=n+56|0;na=n+60|0;_=n+72|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[ka+16>>2]=0;x=0;Ta(539,oa|0,n|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;ka=M;aa=k[_>>2]|0;if(aa)j0a(aa);aa=k[na>>2]|0;if(!aa){ia=ka;ja=oa;ha=224;break b}j0a(aa);ia=ka;ja=oa;ha=224;break b}oa=k[_>>2]|0;if(oa)j0a(oa);oa=k[na>>2]|0;if(oa)j0a(oa);if((c|0)==1)break;oa=(k[a>>2]|0)+48|0;k[m>>2]=2;k[m+8>>2]=c;c=m+12|0;k[c>>2]=k[U>>2];k[c+4>>2]=k[U+4>>2];k[c+8>>2]=k[U+8>>2];k[c+12>>2]=k[U+12>>2];k[c+16>>2]=k[U+16>>2];k[c+20>>2]=k[U+20>>2];k[c+24>>2]=k[U+24>>2];k[m+40>>2]=1;c=m+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=m+56|0;na=m+60|0;_=m+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,oa|0,m|0)|0;c=x;x=0;if(c&1){c=Hc()|0;ka=M;aa=k[_>>2]|0;if(aa)j0a(aa);aa=k[na>>2]|0;if(!aa){ia=ka;ja=c;ha=224;break b}j0a(aa);ia=ka;ja=c;ha=224;break b}c=k[_>>2]|0;if(c)j0a(c);c=k[na>>2]|0;if(c)j0a(c);k[l>>2]=1;k[l+8>>2]=2;k[l+40>>2]=1;c=l+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=l+56|0;na=l+60|0;_=l+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,oa|0,l|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;c=M;ka=k[_>>2]|0;if(ka)j0a(ka);ka=k[na>>2]|0;if(!ka){ia=c;ja=oa;ha=224;break b}j0a(ka);ia=c;ja=oa;ha=224;break b}oa=k[_>>2]|0;if(oa)j0a(oa);oa=k[na>>2]|0;if(oa)j0a(oa)}else{oa=k[$>>2]|0;x=0;fb(140,j|0,329672,0);na=x;x=0;if(na&1){ha=223;break b}x=0;pa(57,(oa|0)!=0|0,j|0,588,285183,276209);oa=x;x=0;if(oa&1){oa=Hc()|0;na=M;K2a(j);ia=na;ja=oa;ha=224;break b}K2a(j);oa=k[$>>2]|0;x=0;xa(k[(k[oa>>2]|0)+40>>2]|0,V|0,oa|0);oa=x;x=0;if(oa&1){ha=223;break b}if((k[V>>2]|0)!=1?1:(k[V+32>>2]|0)!=1){oa=k[a>>2]|0;na=k[$>>2]|0;x=0;fb(140,i|0,329672,0);_=x;x=0;if(_&1){ha=223;break b}x=0;pa(57,(na|0)!=0|0,i|0,588,285183,276209);na=x;x=0;if(na&1){na=Hc()|0;_=M;K2a(i);ia=_;ja=na;ha=224;break b}K2a(i);na=k[$>>2]|0;x=0;xa(k[(k[na>>2]|0)+40>>2]|0,W|0,na|0);na=x;x=0;if(na&1){ha=223;break b}na=oa+48|0;k[h>>2]=2;ea=h+8|0;fa=W;ga=ea+40|0;do{k[ea>>2]=k[fa>>2];ea=ea+4|0;fa=fa+4|0}while((ea|0)<(ga|0));oa=h+48|0;k[oa>>2]=-1;k[oa+4>>2]=-1;oa=h+56|0;_=h+60|0;c=h+72|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[oa+16>>2]=0;x=0;Ta(539,na|0,h|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;ka=M;aa=k[c>>2]|0;if(aa)j0a(aa);aa=k[_>>2]|0;if(!aa){ia=ka;ja=oa;ha=224;break b}j0a(aa);ia=ka;ja=oa;ha=224;break b}oa=k[c>>2]|0;if(oa)j0a(oa);oa=k[_>>2]|0;if(oa)j0a(oa);k[g>>2]=1;k[g+8>>2]=2;k[g+40>>2]=1;oa=g+48|0;k[oa>>2]=-1;k[oa+4>>2]=-1;oa=g+56|0;_=g+60|0;c=g+72|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[oa+16>>2]=0;x=0;Ta(539,na|0,g|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;ka=M;aa=k[c>>2]|0;if(aa)j0a(aa);aa=k[_>>2]|0;if(!aa){ia=ka;ja=oa;ha=224;break b}j0a(aa);ia=ka;ja=oa;ha=224;break b}oa=k[c>>2]|0;if(oa)j0a(oa);oa=k[_>>2]|0;if(oa)j0a(oa)}oa=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=1;k[f+40>>2]=1;_=f+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=f+56|0;c=f+60|0;ka=f+72|0;aa=oa+48|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,aa|0,f|0)|0;_=x;x=0;if(_&1){_=Hc()|0;oa=M;qa=k[ka>>2]|0;if(qa)j0a(qa);qa=k[c>>2]|0;if(!qa){ia=oa;ja=_;ha=224;break b}j0a(qa);ia=oa;ja=_;ha=224;break b}_=k[ka>>2]|0;if(_)j0a(_);_=k[c>>2]|0;if(_)j0a(_);k[X>>2]=0;k[X+32>>2]=1;k[e>>2]=2;ea=e+8|0;fa=X;ga=ea+40|0;do{k[ea>>2]=k[fa>>2];ea=ea+4|0;fa=fa+4|0}while((ea|0)<(ga|0));na=e+48|0;k[na>>2]=-1;k[na+4>>2]=-1;na=e+56|0;_=e+60|0;c=e+72|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[na+16>>2]=0;x=0;Ta(539,aa|0,e|0)|0;na=x;x=0;if(na&1){na=Hc()|0;ka=M;oa=k[c>>2]|0;if(oa)j0a(oa);oa=k[_>>2]|0;if(!oa){ia=ka;ja=na;ha=224;break b}j0a(oa);ia=ka;ja=na;ha=224;break b}na=k[c>>2]|0;if(na)j0a(na);na=k[_>>2]|0;if(na)j0a(na)}while(0);x=0;Ta(539,(k[a>>2]|0)+48|0,P|0)|0;$=x;x=0;if(!($&1)){$=k[P+72>>2]|0;if($)j0a($);$=k[P+60>>2]|0;if($)j0a($);r=d;return}else ha=223}else ha=223}else ha=223}else ha=223}while(0);if((ha|0)==223){$=Hc()|0;ia=M;ja=$;ha=224}if((ha|0)==224){la=ia;ma=ja}$=k[P+72>>2]|0;if($)j0a($);$=k[P+60>>2]|0;if(!$){ca=la;da=ma;Sc(da|0)}j0a($);ca=la;da=ma;Sc(da|0);break}default:{q2a(Y,329672,0);x=0;pa(57,0,Y|0,929,258380,258982);$=x;x=0;if($&1){$=Hc()|0;J=M;K2a(Y);ca=J;da=$;Sc(da|0)}else{K2a(Y);r=d;return}}}while(0);do if(!(k[b+32>>2]|0)){Y=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;da=e+48|0;k[da>>2]=-1;k[da+4>>2]=-1;da=e+56|0;ca=e+60|0;ma=e+72|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[da+16>>2]=0;x=0;Ta(539,Y+48|0,e|0)|0;Y=x;x=0;if(Y&1){Y=Hc()|0;da=k[ma>>2]|0;if(da)j0a(da);da=k[ca>>2]|0;if(!da)Sc(Y|0);j0a(da);Sc(Y|0)}Y=k[ma>>2]|0;if(Y)j0a(Y);Y=k[ca>>2]|0;if(Y)j0a(Y);Y=k[a>>2]|0;do if(K){ca=b+36|0;ma=(k[ca>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,ma|0,e|0,588,285183,276209);ma=x;x=0;if(ma&1){ma=Hc()|0;K2a(e);Sc(ma|0)}K2a(e);ma=k[ca>>2]|0;ca=cg[k[(k[ma>>2]|0)+28>>2]&1023](ma,1)|0;k[e>>2]=2;k[e+8>>2]=ca;ca=e+12|0;k[ca>>2]=k[N>>2];k[ca+4>>2]=k[N+4>>2];k[ca+8>>2]=k[N+8>>2];k[ca+12>>2]=k[N+12>>2];k[ca+16>>2]=k[N+16>>2];k[ca+20>>2]=k[N+20>>2];k[ca+24>>2]=k[N+24>>2];k[e+40>>2]=1;ca=e+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=e+56|0;ma=e+60|0;da=e+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,Y+48|0,e|0)|0;ca=x;x=0;if(!(ca&1)){ca=k[da>>2]|0;if(ca)j0a(ca);ca=k[ma>>2]|0;if(ca)j0a(ca);break}ca=Hc()|0;la=k[da>>2]|0;if(la)j0a(la);la=k[ma>>2]|0;if(!la)Sc(ca|0);j0a(la);Sc(ca|0)}else{ca=Vf[k[(k[b>>2]|0)+32>>2]&1023](b)|0;k[e>>2]=2;k[e+8>>2]=ca;ca=e+12|0;k[ca>>2]=k[O>>2];k[ca+4>>2]=k[O+4>>2];k[ca+8>>2]=k[O+8>>2];k[ca+12>>2]=k[O+12>>2];k[ca+16>>2]=k[O+16>>2];k[ca+20>>2]=k[O+20>>2];k[ca+24>>2]=k[O+24>>2];k[e+40>>2]=1;ca=e+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=e+56|0;la=e+60|0;ma=e+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,Y+48|0,e|0)|0;ca=x;x=0;if(!(ca&1)){ca=k[ma>>2]|0;if(ca)j0a(ca);ca=k[la>>2]|0;if(ca)j0a(ca);break}ca=Hc()|0;da=k[ma>>2]|0;if(da)j0a(da);da=k[la>>2]|0;if(!da)Sc(ca|0);j0a(da);Sc(ca|0)}while(0);Y=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;ca=e+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=e+56|0;da=e+60|0;la=e+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,Y+48|0,e|0)|0;Y=x;x=0;if(!(Y&1)){Y=k[la>>2]|0;if(Y)j0a(Y);Y=k[da>>2]|0;if(Y)j0a(Y);break}Y=Hc()|0;ca=k[la>>2]|0;if(ca)j0a(ca);ca=k[da>>2]|0;if(!ca)Sc(Y|0);j0a(ca);Sc(Y|0)}while(0);O=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;a=e+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=e+56|0;b=e+60|0;N=e+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,O+48|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;O=k[N>>2]|0;if(O)j0a(O);O=k[b>>2]|0;if(!O)Sc(e|0);j0a(O);Sc(e|0)}else{e=k[N>>2]|0;if(e)j0a(e);e=k[b>>2]|0;if(e)j0a(e);r=d;return}}function Eia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0;c=r;r=r+656|0;d=c+400|0;e=c+636|0;f=c+624|0;g=c+360|0;h=c+612|0;i=c+320|0;j=c+600|0;l=c+280|0;m=c+240|0;n=c+200|0;o=c+160|0;p=c+120|0;q=c+588|0;s=c+80|0;t=c+576|0;u=c+560|0;v=c+40|0;w=c;y=c+544|0;z=c+528|0;A=c+496|0;B=c+480|0;C=(k[a>>2]|0)+136|0;D=(k[C>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,D|0,d|0,57,268696,268754);D=x;x=0;if(D&1){D=Hc()|0;K2a(d);Sc(D|0)}K2a(d);D=k[C>>2]|0;C=(k[b+24>>2]|0)==0;q2a(e,329672,0);x=0;pa(57,C|0,e|0,503,258380,259072);C=x;x=0;if(C&1){C=Hc()|0;E=M;K2a(e);F=E;G=C;Sc(G|0)}K2a(e);e=b+36|0;C=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,C|0,d|0,588,285183,276209);C=x;x=0;if(C&1){C=Hc()|0;K2a(d);Sc(C|0)}K2a(d);C=k[e>>2]|0;do if((Vf[k[(k[C>>2]|0)+44>>2]&1023](C)|0)>>>0<32){E=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,E|0,d|0,588,285183,276209);E=x;x=0;if(E&1){E=Hc()|0;K2a(d);Sc(E|0)}K2a(d);E=k[e>>2]|0;H=Vf[k[(k[E>>2]|0)+56>>2]&1023](E)|0;q2a(f,259155,40);x=0;pa(57,H|0,f|0,506,258380,259072);H=x;x=0;if(H&1){H=Hc()|0;E=M;K2a(f);F=E;G=H;Sc(G|0)}K2a(f);H=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,H|0,d|0,588,285183,276209);H=x;x=0;if(H&1){H=Hc()|0;K2a(d);Sc(H|0)}K2a(d);H=k[e>>2]|0;Tf[k[(k[H>>2]|0)+40>>2]&2047](g,H);H=(k[g>>2]|k[g+32>>2])>>>0<2;q2a(h,259196,30);x=0;pa(57,H|0,h|0,507,258380,259072);H=x;x=0;if(!(H&1)){K2a(h);break}H=Hc()|0;E=M;K2a(h);F=E;G=H;Sc(G|0)}while(0);h=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,h|0,d|0,588,285183,276209);h=x;x=0;if(h&1){h=Hc()|0;K2a(d);Sc(h|0)}K2a(d);h=k[e>>2]|0;do if(Vf[k[(k[h>>2]|0)+56>>2]&1023](h)|0){g=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,g|0,d|0,588,285183,276209);g=x;x=0;if(g&1){g=Hc()|0;K2a(d);Sc(g|0)}K2a(d);g=k[e>>2]|0;Tf[k[(k[g>>2]|0)+40>>2]&2047](i,g);g=(k[i>>2]|k[i+32>>2])>>>0<2;q2a(j,259227,28);x=0;pa(57,g|0,j|0,510,258380,259072);g=x;x=0;if(!(g&1)){K2a(j);break}g=Hc()|0;f=M;K2a(j);F=f;G=g;Sc(G|0)}while(0);j=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;i=d+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=d+56|0;h=d+60|0;g=d+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,j+48|0,d|0)|0;j=x;x=0;if(j&1){j=Hc()|0;i=k[g>>2]|0;if(i)j0a(i);i=k[h>>2]|0;if(!i)Sc(j|0);j0a(i);Sc(j|0)}j=k[g>>2]|0;if(j)j0a(j);j=k[h>>2]|0;if(j)j0a(j);a:do if(Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0)Fia(a,b);else{j=b+48|0;h=b+80|0;if(!((k[h>>2]|0)==1&(k[j>>2]|0)==0)){g=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,g|0,d|0,588,285183,276209);g=x;x=0;if(g&1){g=Hc()|0;K2a(d);Sc(g|0)}K2a(d);g=k[e>>2]|0;if((Vf[k[k[g>>2]>>2]&1023](g)|0)!=12){g=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,g|0,d|0,588,285183,276209);g=x;x=0;if(g&1){g=Hc()|0;K2a(d);Sc(g|0)}K2a(d);g=k[e>>2]|0;if(Vf[k[(k[g>>2]|0)+56>>2]&1023](g)|0?(Tf[k[(k[b>>2]|0)+40>>2]&2047](l,b),(k[l>>2]|0)>>>0<6?(k[l+32>>2]|0)>>>0<2:0):0){Tf[k[(k[b>>2]|0)+40>>2]&2047](m,b);g=m+32|0;i=k[a>>2]|0;b:do if((k[g>>2]|k[m>>2])>>>0>1){f=n+32|0;C=d+8|0;H=d+48|0;E=d+56|0;I=d+60|0;J=d+72|0;K=d+8|0;L=d+40|0;N=d+48|0;O=d+56|0;P=d+60|0;Q=d+72|0;R=d+8|0;S=d+40|0;T=d+48|0;U=d+56|0;V=d+60|0;W=d+72|0;X=o+32|0;Y=d+8|0;Z=d+48|0;_=d+56|0;$=d+60|0;aa=d+72|0;ba=d+8|0;ca=d+40|0;da=d+48|0;ea=d+56|0;fa=d+60|0;ga=d+72|0;ha=i;ia=1;while(1){k[n>>2]=0;k[f>>2]=1;ja=ha+48|0;k[d>>2]=2;ka=C;la=n;ma=ka+40|0;do{k[ka>>2]=k[la>>2];ka=ka+4|0;la=la+4|0}while((ka|0)<(ma|0));na=H;k[na>>2]=-1;k[na+4>>2]=-1;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[E+16>>2]=0;x=0;Ta(539,ja|0,d|0)|0;na=x;x=0;if(na&1){oa=94;break}na=k[J>>2]|0;if(na)j0a(na);na=k[I>>2]|0;if(na)j0a(na);k[d>>2]=1;k[K>>2]=129;k[L>>2]=1;na=N;k[na>>2]=-1;k[na+4>>2]=-1;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[O+16>>2]=0;x=0;Ta(539,ja|0,d|0)|0;na=x;x=0;if(na&1){oa=104;break}na=k[Q>>2]|0;if(na)j0a(na);na=k[P>>2]|0;if(na)j0a(na);k[d>>2]=1;k[R>>2]=85;k[S>>2]=1;na=T;k[na>>2]=-1;k[na+4>>2]=-1;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,ja|0,d|0)|0;na=x;x=0;if(na&1){oa=114;break}na=k[W>>2]|0;if(na)j0a(na);na=k[V>>2]|0;if(na)j0a(na);k[o>>2]=1;k[X>>2]=1;k[d>>2]=2;ka=Y;la=o;ma=ka+40|0;do{k[ka>>2]=k[la>>2];ka=ka+4|0;la=la+4|0}while((ka|0)<(ma|0));na=Z;k[na>>2]=-1;k[na+4>>2]=-1;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,ja|0,d|0)|0;na=x;x=0;if(na&1){oa=124;break}na=k[aa>>2]|0;if(na)j0a(na);na=k[$>>2]|0;if(na)j0a(na);k[d>>2]=1;k[ba>>2]=1;k[ca>>2]=1;na=da;k[na>>2]=-1;k[na+4>>2]=-1;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[ea+16>>2]=0;x=0;Ta(539,ja|0,d|0)|0;na=x;x=0;if(na&1){oa=134;break}na=k[ga>>2]|0;if(na)j0a(na);na=k[fa>>2]|0;if(na)j0a(na);ia=ia+1|0;Tf[k[(k[b>>2]|0)+40>>2]&2047](m,b);na=k[a>>2]|0;if(!((k[g>>2]|0)>>>0>1?1:(k[m>>2]|0)>>>0>ia>>>0)){qa=na;break b}else ha=na}if((oa|0)==94){ha=Hc()|0;ia=k[J>>2]|0;if(ia)j0a(ia);ia=k[I>>2]|0;if(!ia)Sc(ha|0);j0a(ia);Sc(ha|0)}else if((oa|0)==104){ha=Hc()|0;ia=k[Q>>2]|0;if(ia)j0a(ia);ia=k[P>>2]|0;if(!ia)Sc(ha|0);j0a(ia);Sc(ha|0)}else if((oa|0)==114){ha=Hc()|0;ia=k[W>>2]|0;if(ia)j0a(ia);ia=k[V>>2]|0;if(!ia)Sc(ha|0);j0a(ia);Sc(ha|0)}else if((oa|0)==124){ha=Hc()|0;ia=k[aa>>2]|0;if(ia)j0a(ia);ia=k[$>>2]|0;if(!ia)Sc(ha|0);j0a(ia);Sc(ha|0)}else if((oa|0)==134){ha=Hc()|0;ia=k[ga>>2]|0;if(ia)j0a(ia);ia=k[fa>>2]|0;if(!ia)Sc(ha|0);j0a(ia);Sc(ha|0)}}else qa=i;while(0);k[p>>2]=0;k[p+32>>2]=1;i=qa+48|0;k[d>>2]=2;ka=d+8|0;la=p;ma=ka+40|0;do{k[ka>>2]=k[la>>2];ka=ka+4|0;la=la+4|0}while((ka|0)<(ma|0));g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;ha=d+60|0;ia=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,i|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;ea=k[ia>>2]|0;if(ea)j0a(ea);ea=k[ha>>2]|0;if(!ea)Sc(g|0);j0a(ea);Sc(g|0)}g=k[ia>>2]|0;if(g)j0a(g);g=k[ha>>2]|0;if(g)j0a(g);k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;ha=d+60|0;ia=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,i|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;ea=k[ia>>2]|0;if(ea)j0a(ea);ea=k[ha>>2]|0;if(!ea)Sc(g|0);j0a(ea);Sc(g|0)}g=k[ia>>2]|0;if(g)j0a(g);g=k[ha>>2]|0;if(g)j0a(g);k[d>>2]=1;k[d+8>>2]=85;k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;ha=d+60|0;ia=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,i|0,d|0)|0;g=x;x=0;if(!(g&1)){g=k[ia>>2]|0;if(g)j0a(g);g=k[ha>>2]|0;if(g)j0a(g);break}g=Hc()|0;ea=k[ia>>2]|0;if(ea)j0a(ea);ea=k[ha>>2]|0;if(!ea)Sc(g|0);j0a(ea);Sc(g|0)}g=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,g|0,d|0,588,285183,276209);g=x;x=0;if(g&1){g=Hc()|0;K2a(d);Sc(g|0)}K2a(d);g=k[e>>2]|0;do if(!(Vf[k[(k[g>>2]|0)+56>>2]&1023](g)|0)){if(!((k[h>>2]|0)>>>0<2&(k[j>>2]|0)>>>0<5))break;ea=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,ea|0,d|0,588,285183,276209);ea=x;x=0;if(ea&1){ea=Hc()|0;K2a(d);Sc(ea|0)}K2a(d);ea=k[e>>2]|0;ha=(Vf[k[(k[ea>>2]|0)+44>>2]&1023](ea)|0)>>>0>31;q2a(q,260310,21);x=0;pa(57,ha|0,q|0,530,258380,259072);ha=x;x=0;if(ha&1){ha=Hc()|0;ea=M;K2a(q);F=ea;G=ha;Sc(G|0)}K2a(q);ha=k[a>>2]|0;c:do if((k[h>>2]|k[j>>2])>>>0>1){ea=s+32|0;ia=d+8|0;da=d+48|0;ca=d+56|0;ba=d+60|0;_=d+72|0;Z=u+4|0;Y=u+8|0;X=u+12|0;U=d+8|0;T=d+40|0;S=d+48|0;R=d+56|0;O=d+60|0;N=d+72|0;L=d+8|0;K=d+48|0;E=d+56|0;H=d+60|0;C=d+72|0;f=d+8|0;na=d+40|0;ra=d+48|0;sa=d+56|0;ta=d+60|0;ua=d+72|0;va=ha;wa=1;while(1){k[s>>2]=0;k[ea>>2]=1;ya=va+48|0;k[d>>2]=2;ka=ia;la=s;ma=ka+40|0;do{k[ka>>2]=k[la>>2];ka=ka+4|0;la=la+4|0}while((ka|0)<(ma|0));za=da;k[za>>2]=-1;k[za+4>>2]=-1;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,ya|0,d|0)|0;za=x;x=0;if(za&1){oa=168;break}za=k[_>>2]|0;if(za)j0a(za);za=k[ba>>2]|0;if(za)j0a(za);za=k[a>>2]|0;Aa=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,Aa|0,d|0,588,285183,276209);Aa=x;x=0;if(Aa&1){oa=174;break}K2a(d);$ia(t,za,k[e>>2]|0);k[u>>2]=-1;k[Z>>2]=-1;k[Y>>2]=0;k[X>>2]=0;x=0;fb(123,t|0,u|0,0);za=x;x=0;if(za&1){oa=211;break}za=k[X>>2]|0;if(za)j0a(za);za=k[a>>2]|0;k[d>>2]=1;k[U>>2]=80;k[T>>2]=1;Aa=S;k[Aa>>2]=-1;k[Aa+4>>2]=-1;Aa=za+48|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[R+16>>2]=0;x=0;Ta(539,Aa|0,d|0)|0;za=x;x=0;if(za&1){oa=183;break}za=k[N>>2]|0;if(za)j0a(za);za=k[O>>2]|0;if(za)j0a(za);za=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,za|0,d|0,588,285183,276209);za=x;x=0;if(za&1){oa=189;break}K2a(d);za=k[e>>2]|0;Tf[k[(k[za>>2]|0)+40>>2]&2047](v,za);k[d>>2]=2;ka=L;la=v;ma=ka+40|0;do{k[ka>>2]=k[la>>2];ka=ka+4|0;la=la+4|0}while((ka|0)<(ma|0));ya=K;k[ya>>2]=-1;k[ya+4>>2]=-1;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[E+16>>2]=0;x=0;Ta(539,Aa|0,d|0)|0;ya=x;x=0;if(ya&1){oa=195;break}ya=k[C>>2]|0;if(ya)j0a(ya);ya=k[H>>2]|0;if(ya)j0a(ya);k[d>>2]=1;k[f>>2]=1;k[na>>2]=1;ya=ra;k[ya>>2]=-1;k[ya+4>>2]=-1;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[sa+16>>2]=0;x=0;Ta(539,Aa|0,d|0)|0;ya=x;x=0;if(ya&1){oa=205;break}ya=k[ua>>2]|0;if(ya)j0a(ya);ya=k[ta>>2]|0;if(ya)j0a(ya);wa=wa+1|0;ya=k[a>>2]|0;if(!((k[h>>2]|0)>>>0>1?1:(k[j>>2]|0)>>>0>wa>>>0)){Ba=ya;break c}else va=ya}if((oa|0)==168){va=Hc()|0;wa=k[_>>2]|0;if(wa)j0a(wa);wa=k[ba>>2]|0;if(!wa)Sc(va|0);j0a(wa);Sc(va|0)}else if((oa|0)==174){va=Hc()|0;K2a(d);Sc(va|0)}else if((oa|0)==183){va=Hc()|0;wa=k[N>>2]|0;if(wa)j0a(wa);wa=k[O>>2]|0;if(!wa)Sc(va|0);j0a(wa);Sc(va|0)}else if((oa|0)==189){va=Hc()|0;K2a(d);Sc(va|0)}else if((oa|0)==195){va=Hc()|0;wa=k[C>>2]|0;if(wa)j0a(wa);wa=k[H>>2]|0;if(!wa)Sc(va|0);j0a(wa);Sc(va|0)}else if((oa|0)==205){va=Hc()|0;wa=k[ua>>2]|0;if(wa)j0a(wa);wa=k[ta>>2]|0;if(!wa)Sc(va|0);j0a(wa);Sc(va|0)}else if((oa|0)==211){va=Hc()|0;wa=M;sa=k[X>>2]|0;if(!sa){F=wa;G=va;Sc(G|0)}j0a(sa);F=wa;G=va;Sc(G|0)}}else Ba=ha;while(0);k[w>>2]=0;k[w+32>>2]=1;ha=Ba+48|0;k[d>>2]=2;ka=d+8|0;la=w;ma=ka+40|0;do{k[ka>>2]=k[la>>2];ka=ka+4|0;la=la+4|0}while((ka|0)<(ma|0));fa=d+48|0;k[fa>>2]=-1;k[fa+4>>2]=-1;fa=d+56|0;ga=d+60|0;$=d+72|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[fa+16>>2]=0;x=0;Ta(539,ha|0,d|0)|0;fa=x;x=0;if(fa&1){fa=Hc()|0;aa=k[$>>2]|0;if(aa)j0a(aa);aa=k[ga>>2]|0;if(!aa)Sc(fa|0);j0a(aa);Sc(fa|0)}fa=k[$>>2]|0;if(fa)j0a(fa);fa=k[ga>>2]|0;if(fa)j0a(fa);fa=k[a>>2]|0;ga=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,ga|0,d|0,588,285183,276209);ga=x;x=0;if(ga&1){ga=Hc()|0;K2a(d);Sc(ga|0)}K2a(d);$ia(y,fa,k[e>>2]|0);k[z>>2]=-1;k[z+4>>2]=-1;k[z+8>>2]=0;fa=z+12|0;k[fa>>2]=0;x=0;fb(123,y|0,z|0,1);ga=x;x=0;if(!(ga&1)){ga=k[fa>>2]|0;if(!ga)break a;j0a(ga);break a}ga=Hc()|0;$=M;aa=k[fa>>2]|0;if(!aa){F=$;G=ga;Sc(G|0)}j0a(aa);F=$;G=ga;Sc(G|0)}while(0);h=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=128;k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;i=d+60|0;ga=d+72|0;$=h+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,$|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;h=k[ga>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(!h)Sc(g|0);j0a(h);Sc(g|0)}g=k[ga>>2]|0;if(g)j0a(g);g=k[i>>2]|0;if(g)j0a(g);k[d>>2]=2;ka=d+8|0;la=j;ma=ka+40|0;do{k[ka>>2]=k[la>>2];ka=ka+4|0;la=la+4|0}while((ka|0)<(ma|0));j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;g=d+60|0;i=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,$|0,d|0)|0;j=x;x=0;if(j&1){j=Hc()|0;ga=k[i>>2]|0;if(ga)j0a(ga);ga=k[g>>2]|0;if(!ga)Sc(j|0);j0a(ga);Sc(j|0)}j=k[i>>2]|0;if(j)j0a(j);j=k[g>>2]|0;if(j)j0a(j);zia(a,b,0);j=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=1;k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;i=d+60|0;ga=d+72|0;h=j+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,h|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;j=k[ga>>2]|0;if(j)j0a(j);j=k[i>>2]|0;if(!j)Sc(g|0);j0a(j);Sc(g|0)}g=k[ga>>2]|0;if(g)j0a(g);g=k[i>>2]|0;if(g)j0a(g);k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;i=d+60|0;ga=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,h|0,d|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=k[ga>>2]|0;if(g)j0a(g);g=k[i>>2]|0;if(!g)Sc(h|0);j0a(g);Sc(h|0)}h=k[ga>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(h)j0a(h);h=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,h|0,d|0,588,285183,276209);h=x;x=0;if(h&1){h=Hc()|0;K2a(d);Sc(h|0)}K2a(d);h=k[e>>2]|0;do if((Vf[k[(k[h>>2]|0)+44>>2]&1023](h)|0)>>>0>=32){i=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,i|0,d|0,588,285183,276209);i=x;x=0;if(i&1){i=Hc()|0;K2a(d);Sc(i|0)}else{K2a(d);Bia(a,k[e>>2]|0);break}}else{n8(A,256,0);x=0;xa(820,a|0,A|0);i=x;x=0;if(!(i&1)){k[A>>2]=20456;xh(A+12|0,k[A+16>>2]|0);i=k[A+8>>2]|0;if(!i)break;k0a(i);break}i=Hc()|0;ga=M;k[A>>2]=20456;xh(A+12|0,k[A+16>>2]|0);g=k[A+8>>2]|0;if(!g){F=ga;G=i;Sc(G|0)}k0a(g);F=ga;G=i;Sc(G|0)}while(0);h=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;$=d+48|0;k[$>>2]=-1;k[$+4>>2]=-1;$=d+56|0;i=d+60|0;ga=d+72|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[$+16>>2]=0;x=0;Ta(539,h+48|0,d|0)|0;h=x;x=0;if(!(h&1)){h=k[ga>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(h)j0a(h);break}h=Hc()|0;$=k[ga>>2]|0;if($)j0a($);$=k[i>>2]|0;if(!$)Sc(h|0);j0a($);Sc(h|0)}}h=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;$=d+48|0;k[$>>2]=-1;k[$+4>>2]=-1;$=d+56|0;i=d+60|0;ga=d+72|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[$+16>>2]=0;x=0;Ta(539,h+48|0,d|0)|0;h=x;x=0;if(!(h&1)){h=k[ga>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(h)j0a(h);break}h=Hc()|0;$=k[ga>>2]|0;if($)j0a($);$=k[i>>2]|0;if(!$)Sc(h|0);j0a($);Sc(h|0)}while(0);A=(k[a>>2]|0)+136|0;a=(k[A>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,a|0,d|0,57,268696,268754);a=x;x=0;if(a&1){a=Hc()|0;K2a(d);Sc(a|0)}K2a(d);d=(k[A>>2]|0)==(D+-2|0);q2a(B,329672,0);x=0;pa(57,d|0,B|0,553,258380,259072);d=x;x=0;if(!(d&1)){K2a(B);r=c;return}c=Hc()|0;d=M;K2a(B);F=d;G=c;Sc(G|0)}function Fia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;c=r;r=r+1216|0;d=c+1040|0;e=c+1192|0;f=c+1180|0;g=c+960|0;h=c+880|0;i=c+800|0;j=c+720|0;l=c+640|0;m=c+560|0;n=c+480|0;o=c+400|0;p=c+320|0;q=c+240|0;s=c+1168|0;t=c+1156|0;u=c+200|0;v=c+120|0;w=c;y=c+40|0;z=c+1152|0;A=c+1120|0;B=(k[b+24>>2]|0)==0;q2a(s,329672,0);x=0;pa(57,B|0,s|0,558,258380,259256);B=x;x=0;if(B&1){B=Hc()|0;C=M;K2a(s);D=C;E=B;Sc(E|0)}K2a(s);s=Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0;q2a(t,329672,0);x=0;pa(57,s|0,t|0,559,258380,259256);s=x;x=0;if(s&1){s=Hc()|0;B=M;K2a(t);D=B;E=s;Sc(E|0)}K2a(t);yia(a,b,0);t=k[a>>2]|0;k[u>>2]=0;k[u+32>>2]=1;s=t+48|0;k[d>>2]=2;t=d+8|0;B=u;u=t+40|0;do{k[t>>2]=k[B>>2];t=t+4|0;B=B+4|0}while((t|0)<(u|0));C=d+48|0;k[C>>2]=-1;k[C+4>>2]=-1;C=d+56|0;F=d+60|0;G=d+72|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[C+16>>2]=0;x=0;Ta(539,s|0,d|0)|0;C=x;x=0;if(C&1){C=Hc()|0;H=k[G>>2]|0;if(H)j0a(H);H=k[F>>2]|0;if(!H)Sc(C|0);j0a(H);Sc(C|0)}C=k[G>>2]|0;if(C)j0a(C);C=k[F>>2]|0;if(C)j0a(C);k[d>>2]=1;k[d+8>>2]=130;k[d+40>>2]=1;C=d+48|0;k[C>>2]=-1;k[C+4>>2]=-1;C=d+56|0;F=d+60|0;G=d+72|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[C+16>>2]=0;x=0;Ta(539,s|0,d|0)|0;C=x;x=0;if(C&1){C=Hc()|0;H=k[G>>2]|0;if(H)j0a(H);H=k[F>>2]|0;if(!H)Sc(C|0);j0a(H);Sc(C|0)}C=k[G>>2]|0;if(C)j0a(C);C=k[F>>2]|0;if(C)j0a(C);k[d>>2]=1;k[d+8>>2]=85;k[d+40>>2]=1;C=d+48|0;k[C>>2]=-1;k[C+4>>2]=-1;C=d+56|0;F=d+60|0;G=d+72|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[C+16>>2]=0;x=0;Ta(539,s|0,d|0)|0;s=x;x=0;if(s&1){s=Hc()|0;C=k[G>>2]|0;if(C)j0a(C);C=k[F>>2]|0;if(!C)Sc(s|0);j0a(C);Sc(s|0)}s=k[G>>2]|0;if(s)j0a(s);s=k[F>>2]|0;if(s)j0a(s);s=(k[a>>2]|0)+48|0;F=k[s>>2]|0;k[s>>2]=F+1;k[v>>2]=8;k[v+8>>2]=F;k[v+40>>2]=1;F=v+48|0;k[F>>2]=-1;k[F+4>>2]=-1;F=v+56|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;F=b+32|0;a:do if(!(k[F>>2]|0))I=92;else{s=k[a>>2]|0;k[q>>2]=1;k[q+8>>2]=128;k[q+40>>2]=1;G=q+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=q+56|0;C=q+60|0;H=q+72|0;J=s+48|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;x=0;Ta(539,J|0,q|0)|0;G=x;x=0;if(G&1){G=Hc()|0;s=M;K=k[H>>2]|0;if(K)j0a(K);K=k[C>>2]|0;if(!K){L=s;N=G;I=86;break}j0a(K);L=s;N=G;I=86;break}G=k[H>>2]|0;if(G)j0a(G);G=k[C>>2]|0;if(G)j0a(G);k[w>>2]=31;k[w+32>>2]=1;k[p>>2]=2;t=p+8|0;B=w;u=t+40|0;do{k[t>>2]=k[B>>2];t=t+4|0;B=B+4|0}while((t|0)<(u|0));G=p+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=p+56|0;C=p+60|0;H=p+72|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;x=0;Ta(539,J|0,p|0)|0;G=x;x=0;if(G&1){G=Hc()|0;s=M;K=k[H>>2]|0;if(K)j0a(K);K=k[C>>2]|0;if(!K){L=s;N=G;I=86;break}j0a(K);L=s;N=G;I=86;break}G=k[H>>2]|0;if(G)j0a(G);G=k[C>>2]|0;if(G)j0a(G);k[o>>2]=1;k[o+8>>2]=16;k[o+40>>2]=1;G=o+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=o+56|0;C=o+60|0;H=o+72|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;x=0;Ta(539,J|0,o|0)|0;G=x;x=0;if(G&1){G=Hc()|0;s=M;K=k[H>>2]|0;if(K)j0a(K);K=k[C>>2]|0;if(!K){L=s;N=G;I=86;break}j0a(K);L=s;N=G;I=86;break}G=k[H>>2]|0;if(G)j0a(G);G=k[C>>2]|0;if(G)j0a(G);x=0;xa(819,y|0,k[a>>2]|0);G=x;x=0;if(G&1){I=85;break}G=k[a>>2]|0;k[n>>2]=1;k[n+8>>2]=80;k[n+40>>2]=1;C=n+48|0;k[C>>2]=-1;k[C+4>>2]=-1;C=n+56|0;H=n+60|0;s=n+72|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[C+16>>2]=0;x=0;Ta(539,G+48|0,n|0)|0;G=x;x=0;do if(G&1){C=Hc()|0;K=M;O=k[s>>2]|0;if(O)j0a(O);O=k[H>>2]|0;if(!O){P=K;Q=C;break}j0a(O);P=K;Q=C}else{C=k[s>>2]|0;if(C)j0a(C);C=k[H>>2]|0;if(C)j0a(C);x=0;fb(314,m|0,(k[a>>2]|0)+48|0,v|0);C=x;x=0;do if(!(C&1)){K=k[m+72>>2]|0;if(K)j0a(K);K=k[m+60>>2]|0;if(K)j0a(K);x=0;xa(823,(k[a>>2]|0)+48|0,1);K=x;x=0;if(K&1)break;x=0;Ta(539,(k[a>>2]|0)+48|0,y|0)|0;K=x;x=0;if(K&1)break;K=k[y+72>>2]|0;if(K)j0a(K);K=k[y+60>>2]|0;if(K)j0a(K);I=92;break a}while(0);C=Hc()|0;P=M;Q=C}while(0);H=k[y+72>>2]|0;if(H)j0a(H);H=k[y+60>>2]|0;if(!H){R=P;S=Q;break}j0a(H);R=P;S=Q}while(0);b:do if((I|0)==92){x=0;fb(313,a|0,b|0,0);Q=x;x=0;if(!(Q&1)){Q=k[a>>2]|0;k[l>>2]=1;k[l+8>>2]=144;k[l+40>>2]=1;P=l+48|0;k[P>>2]=-1;k[P+4>>2]=-1;P=l+56|0;y=l+60|0;m=l+72|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[P+16>>2]=0;x=0;Ta(539,Q+48|0,l|0)|0;Q=x;x=0;if(Q&1){Q=Hc()|0;P=M;n=k[m>>2]|0;if(n)j0a(n);n=k[y>>2]|0;if(!n){L=P;N=Q;I=86;break}j0a(n);L=P;N=Q;I=86;break}Q=k[m>>2]|0;if(Q)j0a(Q);Q=k[y>>2]|0;if(Q)j0a(Q);k[z>>2]=k[a>>2];x=0;va(1505,z|0);Q=x;x=0;if(!(Q&1)){Q=k[a>>2]|0;k[j>>2]=1;k[j+8>>2]=144;k[j+40>>2]=1;y=j+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=j+56|0;m=j+60|0;P=j+72|0;n=Q+48|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,n|0,j|0)|0;y=x;x=0;if(y&1){y=Hc()|0;Q=M;o=k[P>>2]|0;if(o)j0a(o);o=k[m>>2]|0;if(!o){L=Q;N=y;I=86;break}j0a(o);L=Q;N=y;I=86;break}y=k[P>>2]|0;if(y)j0a(y);y=k[m>>2]|0;if(y)j0a(y);k[i>>2]=1;k[i+8>>2]=129;k[i+40>>2]=1;y=i+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=i+56|0;m=i+60|0;P=i+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,n|0,i|0)|0;y=x;x=0;if(y&1){y=Hc()|0;Q=M;o=k[P>>2]|0;if(o)j0a(o);o=k[m>>2]|0;if(!o){L=Q;N=y;I=86;break}j0a(o);L=Q;N=y;I=86;break}y=k[P>>2]|0;if(y)j0a(y);y=k[m>>2]|0;if(y)j0a(y);k[h>>2]=1;k[h+8>>2]=1;k[h+40>>2]=1;y=h+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=h+56|0;m=h+60|0;P=h+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,n|0,h|0)|0;y=x;x=0;if(y&1){y=Hc()|0;Q=M;o=k[P>>2]|0;if(o)j0a(o);o=k[m>>2]|0;if(!o){L=Q;N=y;I=86;break}j0a(o);L=Q;N=y;I=86;break}y=k[P>>2]|0;if(y)j0a(y);y=k[m>>2]|0;if(y)j0a(y);k[g>>2]=1;k[g+8>>2]=144;k[g+40>>2]=1;y=g+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=g+56|0;m=g+60|0;P=g+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,n|0,g|0)|0;n=x;x=0;if(n&1){n=Hc()|0;y=M;Q=k[P>>2]|0;if(Q)j0a(Q);Q=k[m>>2]|0;if(!Q){L=y;N=n;I=86;break}j0a(Q);L=y;N=n;I=86;break}n=k[P>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(n)j0a(n);do if(!(k[F>>2]|0)){n=b+36|0;m=k[n>>2]|0;x=0;fb(140,f|0,329672,0);P=x;x=0;if(P&1){I=85;break b}x=0;pa(57,(m|0)!=0|0,f|0,588,285183,276209);m=x;x=0;if(m&1){m=Hc()|0;P=M;K2a(f);L=P;N=m;I=86;break b}K2a(f);m=k[n>>2]|0;x=0;P=Ba(k[(k[m>>2]|0)+44>>2]|0,m|0)|0;m=x;x=0;if(m&1){I=85;break b}if(P>>>0<32){I=145;break}P=k[n>>2]|0;x=0;fb(140,e|0,329672,0);m=x;x=0;if(m&1){I=85;break b}x=0;pa(57,(P|0)!=0|0,e|0,588,285183,276209);P=x;x=0;if(!(P&1)){K2a(e);x=0;xa(820,a|0,k[n>>2]|0);n=x;x=0;if(n&1){I=85;break b}else break}else{n=Hc()|0;P=M;K2a(e);L=P;N=n;I=86;break b}}else I=145;while(0);do if((I|0)==145){x=0;fb(247,A|0,256,0);n=x;x=0;if(n&1){I=85;break b}x=0;xa(820,a|0,A|0);n=x;x=0;if(n&1){n=Hc()|0;P=M;k[A>>2]=20456;xh(A+12|0,k[A+16>>2]|0);m=k[A+8>>2]|0;if(!m){R=P;S=n;break b}k0a(m);R=P;S=n;break b}else{k[A>>2]=20456;xh(A+12|0,k[A+16>>2]|0);n=k[A+8>>2]|0;if(!n)break;k0a(n);break}}while(0);x=0;Ta(539,(k[a>>2]|0)+48|0,v|0)|0;n=x;x=0;if(n&1){I=85;break}n=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;P=d+48|0;k[P>>2]=-1;k[P+4>>2]=-1;P=d+56|0;m=d+60|0;y=d+72|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[P+16>>2]=0;x=0;Ta(539,n+48|0,d|0)|0;n=x;x=0;if(n&1){n=Hc()|0;P=M;Q=k[y>>2]|0;if(Q)j0a(Q);Q=k[m>>2]|0;if(!Q){L=P;N=n;I=86;break}j0a(Q);L=P;N=n;I=86;break}n=k[y>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(n)j0a(n);n=k[v+72>>2]|0;if(n)j0a(n);n=k[v+60>>2]|0;if(!n){r=c;return}j0a(n);r=c;return}else I=85}else I=85}while(0);if((I|0)==85){c=Hc()|0;L=M;N=c;I=86}if((I|0)==86){R=L;S=N}N=k[v+72>>2]|0;if(N)j0a(N);N=k[v+60>>2]|0;if(!N){D=R;E=S;Sc(E|0)}j0a(N);D=R;E=S;Sc(E|0)}function Gia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0;c=r;r=r+7264|0;d=c+7240|0;e=c+6840|0;f=c+6760|0;g=c+6680|0;h=c+7228|0;i=c+7216|0;j=c+6600|0;l=c+6520|0;m=c+6440|0;n=c+6360|0;o=c+6280|0;p=c+6200|0;q=c+6120|0;s=c+6040|0;t=c+5960|0;u=c+5880|0;v=c+5800|0;w=c+5720|0;y=c+5640|0;z=c+5560|0;A=c+5480|0;B=c+5400|0;C=c+5320|0;D=c+5240|0;E=c+5160|0;F=c+5080|0;G=c+5e3|0;H=c+7204|0;I=c+4920|0;J=c+4840|0;K=c+4760|0;L=c+4680|0;N=c+4600|0;O=c+4520|0;P=c+4440|0;Q=c+4360|0;R=c+4280|0;S=c+4200|0;T=c+7192|0;U=c+4120|0;V=c+4040|0;W=c+3960|0;X=c+3880|0;Y=c+3800|0;Z=c+7180|0;_=c+3720|0;$=c+3640|0;aa=c+3560|0;ba=c+3480|0;ca=c+3400|0;da=c+3320|0;ea=c+3240|0;fa=c+3160|0;ga=c+3080|0;ha=c+3e3|0;ia=c+2920|0;ja=c+2840|0;ka=c+7168|0;la=c+2760|0;ma=c+7156|0;na=c+2680|0;oa=c+2600|0;qa=c+2520|0;ra=c+2440|0;sa=c+2360|0;ta=c+2280|0;ua=c+2200|0;wa=c+2120|0;ya=c+2040|0;za=c+1960|0;Aa=c+1880|0;Ca=c+1800|0;Da=c+1720|0;Ea=c+1640|0;Fa=c+1560|0;Ga=c+1480|0;Ha=c+1400|0;Ia=c+1320|0;Ja=c+1240|0;Ka=c+1160|0;La=c+1080|0;Ma=c+1e3|0;Na=c+920|0;Oa=c+7144|0;Pa=c+840|0;Qa=c+760|0;Ra=c+7132|0;Sa=c+7120|0;Ua=c+7108|0;Va=c+7096|0;Wa=c+680|0;Xa=c+7084|0;Ya=c+600|0;Za=c+7072|0;_a=c+320|0;$a=c+520|0;ab=c+280|0;bb=c+440|0;cb=c+360|0;db=c+240|0;eb=c+200|0;gb=c+160|0;hb=c+7060|0;ib=c+7048|0;jb=c+120|0;kb=c+7044|0;lb=c+80|0;mb=c+7032|0;nb=c+40|0;ob=c+7020|0;pb=c+7016|0;qb=c+6984|0;rb=c+6972|0;sb=c;tb=c+6968|0;ub=c+6936|0;vb=c+6920|0;wb=(k[b+24>>2]|0)==0;q2a(Sa,329672,0);x=0;pa(57,wb|0,Sa|0,597,258380,259346);wb=x;x=0;if(wb&1){wb=Hc()|0;xb=M;K2a(Sa);yb=wb;zb=xb;Sc(yb|0)}K2a(Sa);Sa=Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0;q2a(Ua,329672,0);x=0;pa(57,Sa|0,Ua|0,598,258380,259346);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;xb=M;K2a(Ua);yb=Sa;zb=xb;Sc(yb|0)}K2a(Ua);Ua=b+32|0;do if(!(k[Ua>>2]|0)){xb=b+36|0;Sa=(k[xb>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,Sa|0,d|0,588,285183,276209);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;K2a(d);Sc(Sa|0)}K2a(d);Sa=k[xb>>2]|0;if((Vf[k[(k[Sa>>2]|0)+44>>2]&1023](Sa)|0)>>>0<32){Sa=(k[xb>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,Sa|0,d|0,588,285183,276209);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;K2a(d);Sc(Sa|0)}K2a(d);Sa=k[xb>>2]|0;xb=Vf[k[(k[Sa>>2]|0)+56>>2]&1023](Sa)|0;q2a(Va,259155,40);x=0;pa(57,xb|0,Va|0,600,258380,259346);xb=x;x=0;if(!(xb&1)){K2a(Va);break}xb=Hc()|0;Sa=M;K2a(Va);yb=xb;zb=Sa;Sc(yb|0)}}while(0);Va=(k[a>>2]|0)+136|0;Sa=(k[Va>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,Sa|0,d|0,57,268696,268754);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;K2a(d);Sc(Sa|0)}K2a(d);Sa=k[Va>>2]|0;Va=(k[a>>2]|0)+48|0;xb=k[Va>>2]|0;k[Va>>2]=xb+1;k[Wa>>2]=8;k[Wa+8>>2]=xb;k[Wa+40>>2]=1;xb=Wa+48|0;k[xb>>2]=-1;k[xb+4>>2]=-1;xb=Wa+56|0;k[xb>>2]=0;k[xb+4>>2]=0;k[xb+8>>2]=0;k[xb+12>>2]=0;k[xb+16>>2]=0;x=0;fb(312,a|0,b|0,1);xb=x;x=0;a:do if(!(xb&1)?(Va=(k[a>>2]|0)+136|0,wb=k[Va>>2]|0,x=0,fb(140,Ra|0,329672,0),Ab=x,x=0,!(Ab&1)):0){x=0;pa(57,(wb|0)>-1|0,Ra|0,57,268696,268754);wb=x;x=0;if(wb&1){wb=Hc()|0;Ab=M;K2a(Ra);Bb=Ab;Cb=wb;Db=565;break}K2a(Ra);wb=k[Va>>2]|0;x=0;fb(140,Xa|0,259437,1);Va=x;x=0;if(!(Va&1)){x=0;pa(57,(wb-Sa|0)==1|0,Xa|0,609,258380,259346);wb=x;x=0;if(wb&1){wb=Hc()|0;Va=M;K2a(Xa);Eb=wb;Fb=Va;break}K2a(Xa);b:do if(k[Ua>>2]|0){Va=(k[a>>2]|0)+48|0;wb=k[Va>>2]|0;k[Va>>2]=wb+1;k[Ya>>2]=8;k[Ya+8>>2]=wb;k[Ya+40>>2]=1;wb=Ya+48|0;k[wb>>2]=-1;k[wb+4>>2]=-1;wb=Ya+56|0;k[wb>>2]=0;k[wb+4>>2]=0;k[wb+8>>2]=0;k[wb+12>>2]=0;k[wb+16>>2]=0;wb=k[a>>2]|0;k[Qa>>2]=1;k[Qa+8>>2]=130;k[Qa+40>>2]=1;Va=Qa+48|0;k[Va>>2]=-1;k[Va+4>>2]=-1;Va=Qa+56|0;Ab=Qa+60|0;Gb=Qa+72|0;Hb=wb+48|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,Hb|0,Qa|0)|0;Va=x;x=0;c:do if(Va&1){wb=Hc()|0;Ib=M;Jb=k[Gb>>2]|0;if(Jb)j0a(Jb);Jb=k[Ab>>2]|0;if(!Jb){Kb=Ib;Lb=wb;Db=568}else{j0a(Jb);Kb=Ib;Lb=wb;Db=568}}else{wb=k[Gb>>2]|0;if(wb)j0a(wb);wb=k[Ab>>2]|0;if(wb)j0a(wb);k[Pa>>2]=1;k[Pa+8>>2]=84;k[Pa+40>>2]=1;wb=Pa+48|0;k[wb>>2]=-1;k[wb+4>>2]=-1;wb=Pa+56|0;Ib=Pa+60|0;Jb=Pa+72|0;k[wb>>2]=0;k[wb+4>>2]=0;k[wb+8>>2]=0;k[wb+12>>2]=0;k[wb+16>>2]=0;x=0;Ta(539,Hb|0,Pa|0)|0;wb=x;x=0;if(wb&1){wb=Hc()|0;Mb=M;Nb=k[Jb>>2]|0;if(Nb)j0a(Nb);Nb=k[Ib>>2]|0;if(!Nb){Kb=Mb;Lb=wb;Db=568;break}j0a(Nb);Kb=Mb;Lb=wb;Db=568;break}wb=k[Jb>>2]|0;if(wb)j0a(wb);wb=k[Ib>>2]|0;if(wb)j0a(wb);wb=(k[a>>2]|0)+136|0;Ib=k[wb>>2]|0;x=0;fb(140,Oa|0,329672,0);Jb=x;x=0;do if(!(Jb&1)){x=0;pa(57,(Ib|0)>-1|0,Oa|0,57,268696,268754);Mb=x;x=0;if(Mb&1){Mb=Hc()|0;Nb=M;K2a(Oa);Kb=Nb;Lb=Mb;Db=568;break c}K2a(Oa);Mb=k[wb>>2]|0;x=0;fb(140,Za|0,259439,1);Nb=x;x=0;if(Nb&1)break;x=0;pa(57,(Mb-Sa|0)==2|0,Za|0,620,258380,259346);Mb=x;x=0;if(Mb&1){Mb=Hc()|0;Nb=M;K2a(Za);Ob=Mb;Pb=Nb;break c}K2a(Za);Nb=k[a>>2]|0;k[Na>>2]=1;k[Na+8>>2]=129;k[Na+40>>2]=1;Mb=Na+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=Na+56|0;Qb=Na+60|0;Rb=Na+72|0;Sb=Nb+48|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,Sb|0,Na|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;Nb=M;Tb=k[Rb>>2]|0;if(Tb)j0a(Tb);Tb=k[Qb>>2]|0;if(!Tb){Kb=Nb;Lb=Mb;Db=568;break c}j0a(Tb);Kb=Nb;Lb=Mb;Db=568;break c}Mb=k[Rb>>2]|0;if(Mb)j0a(Mb);Mb=k[Qb>>2]|0;if(Mb)j0a(Mb);k[_a>>2]=31;k[_a+32>>2]=1;k[Ma>>2]=2;Ub=Ma+8|0;Vb=_a;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));Mb=Ma+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=Ma+56|0;Qb=Ma+60|0;Rb=Ma+72|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,Sb|0,Ma|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;Nb=M;Tb=k[Rb>>2]|0;if(Tb)j0a(Tb);Tb=k[Qb>>2]|0;if(!Tb){Kb=Nb;Lb=Mb;Db=568;break c}j0a(Tb);Kb=Nb;Lb=Mb;Db=568;break c}Mb=k[Rb>>2]|0;if(Mb)j0a(Mb);Mb=k[Qb>>2]|0;if(Mb)j0a(Mb);k[La>>2]=1;k[La+8>>2]=16;k[La+40>>2]=1;Mb=La+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=La+56|0;Qb=La+60|0;Rb=La+72|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,Sb|0,La|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;Nb=M;Tb=k[Rb>>2]|0;if(Tb)j0a(Tb);Tb=k[Qb>>2]|0;if(!Tb){Kb=Nb;Lb=Mb;Db=568;break c}j0a(Tb);Kb=Nb;Lb=Mb;Db=568;break c}Mb=k[Rb>>2]|0;if(Mb)j0a(Mb);Mb=k[Qb>>2]|0;if(Mb)j0a(Mb);x=0;xa(819,$a|0,k[a>>2]|0);Mb=x;x=0;if(Mb&1)break;Mb=k[a>>2]|0;k[Ka>>2]=1;k[Ka+8>>2]=130;k[Ka+40>>2]=1;Qb=Ka+48|0;k[Qb>>2]=-1;k[Qb+4>>2]=-1;Qb=Ka+56|0;Rb=Ka+60|0;Nb=Ka+72|0;Tb=Mb+48|0;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;Ta(539,Tb|0,Ka|0)|0;Qb=x;x=0;do if(Qb&1){Mb=Hc()|0;Xb=M;Yb=k[Nb>>2]|0;if(Yb)j0a(Yb);Yb=k[Rb>>2]|0;if(!Yb){Zb=Xb;_b=Mb;Db=571;break}j0a(Yb);Zb=Xb;_b=Mb;Db=571}else{Mb=k[Nb>>2]|0;if(Mb)j0a(Mb);Mb=k[Rb>>2]|0;if(Mb)j0a(Mb);k[ab>>2]=31;k[ab+32>>2]=1;k[Ja>>2]=2;Ub=Ja+8|0;Vb=ab;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));Mb=Ja+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=Ja+56|0;Xb=Ja+60|0;Yb=Ja+72|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,Tb|0,Ja|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;$b=M;ac=k[Yb>>2]|0;if(ac)j0a(ac);ac=k[Xb>>2]|0;if(!ac){Zb=$b;_b=Mb;Db=571;break}j0a(ac);Zb=$b;_b=Mb;Db=571;break}Mb=k[Yb>>2]|0;if(Mb)j0a(Mb);Mb=k[Xb>>2]|0;if(Mb)j0a(Mb);k[Ia>>2]=1;k[Ia+8>>2]=16;k[Ia+40>>2]=1;Mb=Ia+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=Ia+56|0;Xb=Ia+60|0;Yb=Ia+72|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,Tb|0,Ia|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;$b=M;ac=k[Yb>>2]|0;if(ac)j0a(ac);ac=k[Xb>>2]|0;if(!ac){Zb=$b;_b=Mb;Db=571;break}j0a(ac);Zb=$b;_b=Mb;Db=571;break}Mb=k[Yb>>2]|0;if(Mb)j0a(Mb);Mb=k[Xb>>2]|0;if(Mb)j0a(Mb);x=0;xa(819,bb|0,k[a>>2]|0);Mb=x;x=0;if(Mb&1){Mb=Hc()|0;Zb=M;_b=Mb;Db=571;break}Mb=(k[a>>2]|0)+48|0;Xb=k[Mb>>2]|0;k[Mb>>2]=Xb+1;k[cb>>2]=8;k[cb+8>>2]=Xb;k[cb+40>>2]=1;Xb=cb+48|0;k[Xb>>2]=-1;k[Xb+4>>2]=-1;Xb=cb+56|0;k[Xb>>2]=0;k[Xb+4>>2]=0;k[Xb+8>>2]=0;k[Xb+12>>2]=0;k[Xb+16>>2]=0;x=0;Ta(539,(k[a>>2]|0)+48|0,cb|0)|0;Xb=x;x=0;do if(Xb&1)Db=572;else{Mb=k[a>>2]|0;k[Ha>>2]=1;k[Ha+8>>2]=130;k[Ha+40>>2]=1;Yb=Ha+48|0;k[Yb>>2]=-1;k[Yb+4>>2]=-1;Yb=Ha+56|0;$b=Ha+60|0;ac=Ha+72|0;bc=Mb+48|0;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[Yb+16>>2]=0;x=0;Ta(539,bc|0,Ha|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;Mb=M;cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[$b>>2]|0;if(!cc){dc=Mb;ec=Yb;Db=573;break}j0a(cc);dc=Mb;ec=Yb;Db=573;break}Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[$b>>2]|0;if(Yb)j0a(Yb);k[db>>2]=8;k[db+32>>2]=1;k[Ga>>2]=2;Ub=Ga+8|0;Vb=db;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));Yb=Ga+48|0;k[Yb>>2]=-1;k[Yb+4>>2]=-1;Yb=Ga+56|0;$b=Ga+60|0;ac=Ga+72|0;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[Yb+16>>2]=0;x=0;Ta(539,bc|0,Ga|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;Mb=M;cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[$b>>2]|0;if(!cc){dc=Mb;ec=Yb;Db=573;break}j0a(cc);dc=Mb;ec=Yb;Db=573;break}Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[$b>>2]|0;if(Yb)j0a(Yb);k[Fa>>2]=1;k[Fa+8>>2]=2;k[Fa+40>>2]=1;Yb=Fa+48|0;k[Yb>>2]=-1;k[Yb+4>>2]=-1;Yb=Fa+56|0;$b=Fa+60|0;ac=Fa+72|0;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[Yb+16>>2]=0;x=0;Ta(539,bc|0,Fa|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;Mb=M;cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[$b>>2]|0;if(!cc){dc=Mb;ec=Yb;Db=573;break}j0a(cc);dc=Mb;ec=Yb;Db=573;break}Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[$b>>2]|0;if(Yb)j0a(Yb);Yb=k[a>>2]|0;k[eb>>2]=256;k[eb+32>>2]=1;$b=Yb+48|0;k[Ea>>2]=2;Ub=Ea+8|0;Vb=eb;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));bc=Ea+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=Ea+56|0;Yb=Ea+60|0;ac=Ea+72|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,$b|0,Ea|0)|0;bc=x;x=0;if(bc&1){bc=Hc()|0;Mb=M;cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[Yb>>2]|0;if(!cc){dc=Mb;ec=bc;Db=573;break}j0a(cc);dc=Mb;ec=bc;Db=573;break}bc=k[ac>>2]|0;if(bc)j0a(bc);bc=k[Yb>>2]|0;if(bc)j0a(bc);k[Da>>2]=1;k[Da+8>>2]=3;k[Da+40>>2]=1;bc=Da+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=Da+56|0;Yb=Da+60|0;ac=Da+72|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,$b|0,Da|0)|0;bc=x;x=0;if(bc&1){bc=Hc()|0;Mb=M;cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[Yb>>2]|0;if(!cc){dc=Mb;ec=bc;Db=573;break}j0a(cc);dc=Mb;ec=bc;Db=573;break}bc=k[ac>>2]|0;if(bc)j0a(bc);bc=k[Yb>>2]|0;if(bc)j0a(bc);bc=k[a>>2]|0;k[gb>>2]=2;k[gb+32>>2]=1;Yb=bc+48|0;k[Ca>>2]=2;Ub=Ca+8|0;Vb=gb;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));$b=Ca+48|0;k[$b>>2]=-1;k[$b+4>>2]=-1;$b=Ca+56|0;bc=Ca+60|0;ac=Ca+72|0;k[$b>>2]=0;k[$b+4>>2]=0;k[$b+8>>2]=0;k[$b+12>>2]=0;k[$b+16>>2]=0;x=0;Ta(539,Yb|0,Ca|0)|0;$b=x;x=0;if($b&1){$b=Hc()|0;Mb=M;cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[bc>>2]|0;if(!cc){dc=Mb;ec=$b;Db=573;break}j0a(cc);dc=Mb;ec=$b;Db=573;break}$b=k[ac>>2]|0;if($b)j0a($b);$b=k[bc>>2]|0;if($b)j0a($b);k[Aa>>2]=1;k[Aa+8>>2]=10;k[Aa+40>>2]=1;$b=Aa+48|0;k[$b>>2]=-1;k[$b+4>>2]=-1;$b=Aa+56|0;bc=Aa+60|0;ac=Aa+72|0;k[$b>>2]=0;k[$b+4>>2]=0;k[$b+8>>2]=0;k[$b+12>>2]=0;k[$b+16>>2]=0;x=0;Ta(539,Yb|0,Aa|0)|0;$b=x;x=0;if($b&1){$b=Hc()|0;Mb=M;cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[bc>>2]|0;if(!cc){dc=Mb;ec=$b;Db=573;break}j0a(cc);dc=Mb;ec=$b;Db=573;break}$b=k[ac>>2]|0;if($b)j0a($b);$b=k[bc>>2]|0;if($b)j0a($b);$b=k[a>>2]|0;k[za>>2]=1;k[za+8>>2]=128;k[za+40>>2]=1;bc=za+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=za+56|0;ac=za+60|0;Mb=za+72|0;cc=$b+48|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,cc|0,za|0)|0;bc=x;x=0;if(bc&1){bc=Hc()|0;$b=M;fc=k[Mb>>2]|0;if(fc)j0a(fc);fc=k[ac>>2]|0;if(!fc){dc=$b;ec=bc;Db=573;break}j0a(fc);dc=$b;ec=bc;Db=573;break}bc=k[Mb>>2]|0;if(bc)j0a(bc);bc=k[ac>>2]|0;if(bc)j0a(bc);k[ya>>2]=1;k[ya+8>>2]=145;k[ya+40>>2]=1;bc=ya+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=ya+56|0;ac=ya+60|0;Mb=ya+72|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,cc|0,ya|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;bc=M;$b=k[Mb>>2]|0;if($b)j0a($b);$b=k[ac>>2]|0;if(!$b){dc=bc;ec=cc;Db=573;break}j0a($b);dc=bc;ec=cc;Db=573;break}cc=k[Mb>>2]|0;if(cc)j0a(cc);cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[a>>2]|0;k[wa>>2]=1;k[wa+8>>2]=4;k[wa+40>>2]=1;ac=wa+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=wa+56|0;Mb=wa+60|0;bc=wa+72|0;$b=cc+48|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,$b|0,wa|0)|0;ac=x;x=0;if(ac&1){ac=Hc()|0;cc=M;fc=k[bc>>2]|0;if(fc)j0a(fc);fc=k[Mb>>2]|0;if(!fc){dc=cc;ec=ac;Db=573;break}j0a(fc);dc=cc;ec=ac;Db=573;break}ac=k[bc>>2]|0;if(ac)j0a(ac);ac=k[Mb>>2]|0;if(ac)j0a(ac);k[ua>>2]=1;k[ua+8>>2]=2;k[ua+40>>2]=1;ac=ua+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=ua+56|0;Mb=ua+60|0;bc=ua+72|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,$b|0,ua|0)|0;$b=x;x=0;if($b&1){$b=Hc()|0;ac=M;cc=k[bc>>2]|0;if(cc)j0a(cc);cc=k[Mb>>2]|0;if(!cc){dc=ac;ec=$b;Db=573;break}j0a(cc);dc=ac;ec=$b;Db=573;break}$b=k[bc>>2]|0;if($b)j0a($b);$b=k[Mb>>2]|0;if($b)j0a($b);$b=k[a>>2]|0;k[ta>>2]=1;k[ta+8>>2]=130;k[ta+40>>2]=1;Mb=ta+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=ta+56|0;bc=ta+60|0;ac=ta+72|0;cc=$b+48|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,cc|0,ta|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;$b=M;fc=k[ac>>2]|0;if(fc)j0a(fc);fc=k[bc>>2]|0;if(!fc){dc=$b;ec=Mb;Db=573;break}j0a(fc);dc=$b;ec=Mb;Db=573;break}Mb=k[ac>>2]|0;if(Mb)j0a(Mb);Mb=k[bc>>2]|0;if(Mb)j0a(Mb);k[sa>>2]=1;k[sa+8>>2]=128;k[sa+40>>2]=1;Mb=sa+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=sa+56|0;bc=sa+60|0;ac=sa+72|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,cc|0,sa|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;$b=M;fc=k[ac>>2]|0;if(fc)j0a(fc);fc=k[bc>>2]|0;if(!fc){dc=$b;ec=Mb;Db=573;break}j0a(fc);dc=$b;ec=Mb;Db=573;break}Mb=k[ac>>2]|0;if(Mb)j0a(Mb);Mb=k[bc>>2]|0;if(Mb)j0a(Mb);k[ra>>2]=1;k[ra+8>>2]=1;k[ra+40>>2]=1;Mb=ra+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=ra+56|0;bc=ra+60|0;ac=ra+72|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,cc|0,ra|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;Mb=M;$b=k[ac>>2]|0;if($b)j0a($b);$b=k[bc>>2]|0;if(!$b){dc=Mb;ec=cc;Db=573;break}j0a($b);dc=Mb;ec=cc;Db=573;break}cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[bc>>2]|0;if(cc)j0a(cc);cc=k[a>>2]|0;k[qa>>2]=1;k[qa+8>>2]=23;k[qa+40>>2]=1;bc=qa+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=qa+56|0;ac=qa+60|0;Mb=qa+72|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,cc+48|0,qa|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;bc=M;$b=k[Mb>>2]|0;if($b)j0a($b);$b=k[ac>>2]|0;if(!$b){dc=bc;ec=cc;Db=573;break}j0a($b);dc=bc;ec=cc;Db=573;break}cc=k[Mb>>2]|0;if(cc)j0a(cc);cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[a>>2]|0;k[oa>>2]=1;k[oa+8>>2]=131;k[oa+40>>2]=1;ac=oa+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=oa+56|0;Mb=oa+60|0;bc=oa+72|0;$b=cc+48|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,$b|0,oa|0)|0;ac=x;x=0;if(ac&1){ac=Hc()|0;cc=M;fc=k[bc>>2]|0;if(fc)j0a(fc);fc=k[Mb>>2]|0;if(!fc){dc=cc;ec=ac;Db=573;break}j0a(fc);dc=cc;ec=ac;Db=573;break}ac=k[bc>>2]|0;if(ac)j0a(ac);ac=k[Mb>>2]|0;if(ac)j0a(ac);k[na>>2]=1;k[na+8>>2]=85;k[na+40>>2]=1;ac=na+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=na+56|0;Mb=na+60|0;bc=na+72|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,$b|0,na|0)|0;$b=x;x=0;if($b&1){$b=Hc()|0;ac=M;cc=k[bc>>2]|0;if(cc)j0a(cc);cc=k[Mb>>2]|0;if(!cc){dc=ac;ec=$b;Db=573;break}j0a(cc);dc=ac;ec=$b;Db=573;break}$b=k[bc>>2]|0;if($b)j0a($b);$b=k[Mb>>2]|0;if($b)j0a($b);$b=(k[a>>2]|0)+136|0;Mb=k[$b>>2]|0;x=0;fb(140,ma|0,329672,0);bc=x;x=0;if(bc&1){Db=572;break}x=0;pa(57,(Mb|0)>-1|0,ma|0,57,268696,268754);Mb=x;x=0;if(Mb&1){Mb=Hc()|0;bc=M;K2a(ma);dc=bc;ec=Mb;Db=573;break}K2a(ma);Mb=k[$b>>2]|0;x=0;fb(140,hb|0,259439,1);$b=x;x=0;if($b&1){Db=572;break}x=0;pa(57,(Mb-Sa|0)==1|0,hb|0,642,258380,259346);Mb=x;x=0;if(Mb&1){Mb=Hc()|0;$b=M;K2a(hb);gc=Mb;hc=$b;break}K2a(hb);x=0;fb(314,la|0,(k[a>>2]|0)+48|0,Wa|0);$b=x;x=0;if($b&1){Db=572;break}$b=k[la+72>>2]|0;if($b)j0a($b);$b=k[la+60>>2]|0;if($b)j0a($b);x=0;xa(823,(k[a>>2]|0)+48|0,1);$b=x;x=0;if($b&1){Db=572;break}x=0;Ta(539,(k[a>>2]|0)+48|0,bb|0)|0;$b=x;x=0;if($b&1){Db=572;break}$b=(k[a>>2]|0)+136|0;Mb=k[$b>>2]|0;x=0;fb(140,ka|0,329672,0);bc=x;x=0;if(bc&1){Db=572;break}x=0;pa(57,(Mb|0)>-1|0,ka|0,57,268696,268754);Mb=x;x=0;if(Mb&1){Mb=Hc()|0;bc=M;K2a(ka);dc=bc;ec=Mb;Db=573;break}K2a(ka);Mb=k[$b>>2]|0;x=0;fb(140,ib|0,259439,1);$b=x;x=0;if($b&1){Db=572;break}x=0;pa(57,(Mb-Sa|0)==2|0,ib|0,650,258380,259346);Mb=x;x=0;if(Mb&1){Mb=Hc()|0;$b=M;K2a(ib);gc=Mb;hc=$b;break}K2a(ib);$b=k[a>>2]|0;k[jb>>2]=255;k[jb+32>>2]=1;Mb=$b+48|0;k[ja>>2]=2;Ub=ja+8|0;Vb=jb;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));Yb=ja+48|0;k[Yb>>2]=-1;k[Yb+4>>2]=-1;Yb=ja+56|0;$b=ja+60|0;bc=ja+72|0;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[Yb+16>>2]=0;x=0;Ta(539,Mb|0,ja|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;ac=M;cc=k[bc>>2]|0;if(cc)j0a(cc);cc=k[$b>>2]|0;if(!cc){dc=ac;ec=Yb;Db=573;break}j0a(cc);dc=ac;ec=Yb;Db=573;break}Yb=k[bc>>2]|0;if(Yb)j0a(Yb);Yb=k[$b>>2]|0;if(Yb)j0a(Yb);k[ia>>2]=1;k[ia+8>>2]=25;k[ia+40>>2]=1;Yb=ia+48|0;k[Yb>>2]=-1;k[Yb+4>>2]=-1;Yb=ia+56|0;$b=ia+60|0;bc=ia+72|0;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[Yb+16>>2]=0;x=0;Ta(539,Mb|0,ia|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;ac=M;cc=k[bc>>2]|0;if(cc)j0a(cc);cc=k[$b>>2]|0;if(!cc){dc=ac;ec=Yb;Db=573;break}j0a(cc);dc=ac;ec=Yb;Db=573;break}Yb=k[bc>>2]|0;if(Yb)j0a(Yb);Yb=k[$b>>2]|0;if(Yb)j0a(Yb);k[ha>>2]=1;k[ha+8>>2]=22;k[ha+40>>2]=1;Yb=ha+48|0;k[Yb>>2]=-1;k[Yb+4>>2]=-1;Yb=ha+56|0;$b=ha+60|0;bc=ha+72|0;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[Yb+16>>2]=0;x=0;Ta(539,Mb|0,ha|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;ac=M;cc=k[bc>>2]|0;if(cc)j0a(cc);cc=k[$b>>2]|0;if(!cc){dc=ac;ec=Yb;Db=573;break}j0a(cc);dc=ac;ec=Yb;Db=573;break}Yb=k[bc>>2]|0;if(Yb)j0a(Yb);Yb=k[$b>>2]|0;if(Yb)j0a(Yb);Yb=k[a>>2]|0;k[ga>>2]=1;k[ga+8>>2]=131;k[ga+40>>2]=1;$b=ga+48|0;k[$b>>2]=-1;k[$b+4>>2]=-1;$b=ga+56|0;bc=ga+60|0;ac=ga+72|0;k[$b>>2]=0;k[$b+4>>2]=0;k[$b+8>>2]=0;k[$b+12>>2]=0;k[$b+16>>2]=0;x=0;Ta(539,Yb+48|0,ga|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;$b=M;cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[bc>>2]|0;if(!cc){dc=$b;ec=Yb;Db=573;break}j0a(cc);dc=$b;ec=Yb;Db=573;break}Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[bc>>2]|0;if(Yb)j0a(Yb);k[kb>>2]=k[a>>2];x=0;va(1505,kb|0);Yb=x;x=0;if(Yb&1){Db=572;break}Yb=k[a>>2]|0;k[fa>>2]=1;k[fa+8>>2]=85;k[fa+40>>2]=1;bc=fa+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=fa+56|0;ac=fa+60|0;$b=fa+72|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,Yb+48|0,fa|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;bc=M;cc=k[$b>>2]|0;if(cc)j0a(cc);cc=k[ac>>2]|0;if(!cc){dc=bc;ec=Yb;Db=573;break}j0a(cc);dc=bc;ec=Yb;Db=573;break}Yb=k[$b>>2]|0;if(Yb)j0a(Yb);Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[a>>2]|0;k[ea>>2]=1;k[ea+8>>2]=129;k[ea+40>>2]=1;ac=ea+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=ea+56|0;$b=ea+60|0;bc=ea+72|0;cc=Yb+48|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,cc|0,ea|0)|0;ac=x;x=0;if(ac&1){ac=Hc()|0;Yb=M;fc=k[bc>>2]|0;if(fc)j0a(fc);fc=k[$b>>2]|0;if(!fc){dc=Yb;ec=ac;Db=573;break}j0a(fc);dc=Yb;ec=ac;Db=573;break}ac=k[bc>>2]|0;if(ac)j0a(ac);ac=k[$b>>2]|0;if(ac)j0a(ac);k[da>>2]=1;k[da+8>>2]=128;k[da+40>>2]=1;ac=da+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=da+56|0;$b=da+60|0;bc=da+72|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,cc|0,da|0)|0;ac=x;x=0;if(ac&1){ac=Hc()|0;Yb=M;fc=k[bc>>2]|0;if(fc)j0a(fc);fc=k[$b>>2]|0;if(!fc){dc=Yb;ec=ac;Db=573;break}j0a(fc);dc=Yb;ec=ac;Db=573;break}ac=k[bc>>2]|0;if(ac)j0a(ac);ac=k[$b>>2]|0;if(ac)j0a(ac);k[ca>>2]=1;k[ca+8>>2]=1;k[ca+40>>2]=1;ac=ca+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=ca+56|0;$b=ca+60|0;bc=ca+72|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,cc|0,ca|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;ac=M;Yb=k[bc>>2]|0;if(Yb)j0a(Yb);Yb=k[$b>>2]|0;if(!Yb){dc=ac;ec=cc;Db=573;break}j0a(Yb);dc=ac;ec=cc;Db=573;break}cc=k[bc>>2]|0;if(cc)j0a(cc);cc=k[$b>>2]|0;if(cc)j0a(cc);cc=k[a>>2]|0;k[lb>>2]=1;k[lb+32>>2]=1;$b=cc+48|0;k[ba>>2]=2;Ub=ba+8|0;Vb=lb;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));Mb=ba+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=ba+56|0;cc=ba+60|0;bc=ba+72|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,$b|0,ba|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;ac=M;Yb=k[bc>>2]|0;if(Yb)j0a(Yb);Yb=k[cc>>2]|0;if(!Yb){dc=ac;ec=Mb;Db=573;break}j0a(Yb);dc=ac;ec=Mb;Db=573;break}Mb=k[bc>>2]|0;if(Mb)j0a(Mb);Mb=k[cc>>2]|0;if(Mb)j0a(Mb);k[aa>>2]=1;k[aa+8>>2]=1;k[aa+40>>2]=1;Mb=aa+48|0;k[Mb>>2]=-1;k[Mb+4>>2]=-1;Mb=aa+56|0;cc=aa+60|0;bc=aa+72|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[Mb+16>>2]=0;x=0;Ta(539,$b|0,aa|0)|0;Mb=x;x=0;if(Mb&1){Mb=Hc()|0;ac=M;Yb=k[bc>>2]|0;if(Yb)j0a(Yb);Yb=k[cc>>2]|0;if(!Yb){dc=ac;ec=Mb;Db=573;break}j0a(Yb);dc=ac;ec=Mb;Db=573;break}Mb=k[bc>>2]|0;if(Mb)j0a(Mb);Mb=k[cc>>2]|0;if(Mb)j0a(Mb);Mb=k[a>>2]|0;k[$>>2]=1;k[$+8>>2]=131;k[$+40>>2]=1;cc=$+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=$+56|0;bc=$+60|0;ac=$+72|0;Yb=Mb+48|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,Yb|0,$|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;Mb=M;fc=k[ac>>2]|0;if(fc)j0a(fc);fc=k[bc>>2]|0;if(!fc){dc=Mb;ec=cc;Db=573;break}j0a(fc);dc=Mb;ec=cc;Db=573;break}cc=k[ac>>2]|0;if(cc)j0a(cc);cc=k[bc>>2]|0;if(cc)j0a(cc);k[_>>2]=1;k[_+8>>2]=85;k[_+40>>2]=1;cc=_+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=_+56|0;bc=_+60|0;ac=_+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,Yb|0,_|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;cc=M;Mb=k[ac>>2]|0;if(Mb)j0a(Mb);Mb=k[bc>>2]|0;if(!Mb){dc=cc;ec=Yb;Db=573;break}j0a(Mb);dc=cc;ec=Yb;Db=573;break}Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[bc>>2]|0;if(Yb)j0a(Yb);Yb=(k[a>>2]|0)+136|0;bc=k[Yb>>2]|0;x=0;fb(140,Z|0,329672,0);ac=x;x=0;if(ac&1){Db=572;break}x=0;pa(57,(bc|0)>-1|0,Z|0,57,268696,268754);bc=x;x=0;if(bc&1){bc=Hc()|0;ac=M;K2a(Z);dc=ac;ec=bc;Db=573;break}K2a(Z);bc=k[Yb>>2]|0;x=0;fb(140,mb|0,259439,1);Yb=x;x=0;if(Yb&1){Db=572;break}x=0;pa(57,(bc-Sa|0)==1|0,mb|0,663,258380,259346);bc=x;x=0;if(bc&1){bc=Hc()|0;Yb=M;K2a(mb);gc=bc;hc=Yb;break}K2a(mb);x=0;fb(314,Y|0,(k[a>>2]|0)+48|0,Wa|0);Yb=x;x=0;if(Yb&1){Db=572;break}Yb=k[Y+72>>2]|0;if(Yb)j0a(Yb);Yb=k[Y+60>>2]|0;if(Yb)j0a(Yb);x=0;xa(823,(k[a>>2]|0)+48|0,1);Yb=x;x=0;if(Yb&1){Db=572;break}x=0;Ta(539,(k[a>>2]|0)+48|0,$a|0)|0;Yb=x;x=0;if(Yb&1){Db=572;break}Yb=k[a>>2]|0;k[X>>2]=1;k[X+8>>2]=130;k[X+40>>2]=1;bc=X+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=X+56|0;ac=X+60|0;cc=X+72|0;Mb=Yb+48|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,Mb|0,X|0)|0;bc=x;x=0;if(bc&1){bc=Hc()|0;Yb=M;fc=k[cc>>2]|0;if(fc)j0a(fc);fc=k[ac>>2]|0;if(!fc){dc=Yb;ec=bc;Db=573;break}j0a(fc);dc=Yb;ec=bc;Db=573;break}bc=k[cc>>2]|0;if(bc)j0a(bc);bc=k[ac>>2]|0;if(bc)j0a(bc);k[nb>>2]=31;k[nb+32>>2]=1;k[W>>2]=2;Ub=W+8|0;Vb=nb;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));$b=W+48|0;k[$b>>2]=-1;k[$b+4>>2]=-1;$b=W+56|0;bc=W+60|0;ac=W+72|0;k[$b>>2]=0;k[$b+4>>2]=0;k[$b+8>>2]=0;k[$b+12>>2]=0;k[$b+16>>2]=0;x=0;Ta(539,Mb|0,W|0)|0;$b=x;x=0;if($b&1){$b=Hc()|0;cc=M;Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[bc>>2]|0;if(!Yb){dc=cc;ec=$b;Db=573;break}j0a(Yb);dc=cc;ec=$b;Db=573;break}$b=k[ac>>2]|0;if($b)j0a($b);$b=k[bc>>2]|0;if($b)j0a($b);k[V>>2]=1;k[V+8>>2]=16;k[V+40>>2]=1;$b=V+48|0;k[$b>>2]=-1;k[$b+4>>2]=-1;$b=V+56|0;bc=V+60|0;ac=V+72|0;k[$b>>2]=0;k[$b+4>>2]=0;k[$b+8>>2]=0;k[$b+12>>2]=0;k[$b+16>>2]=0;x=0;Ta(539,Mb|0,V|0)|0;$b=x;x=0;if($b&1){$b=Hc()|0;cc=M;Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[bc>>2]|0;if(!Yb){dc=cc;ec=$b;Db=573;break}j0a(Yb);dc=cc;ec=$b;Db=573;break}$b=k[ac>>2]|0;if($b)j0a($b);$b=k[bc>>2]|0;if($b)j0a($b);x=0;fb(315,U|0,(k[a>>2]|0)+48|0,Ya|0);$b=x;x=0;if($b&1){Db=572;break}$b=k[U+72>>2]|0;if($b)j0a($b);$b=k[U+60>>2]|0;if($b)j0a($b);$b=(k[a>>2]|0)+136|0;bc=k[$b>>2]|0;x=0;fb(140,T|0,329672,0);ac=x;x=0;if(ac&1){Db=572;break}x=0;pa(57,(bc|0)>-1|0,T|0,57,268696,268754);bc=x;x=0;if(bc&1){bc=Hc()|0;ac=M;K2a(T);dc=ac;ec=bc;Db=573;break}K2a(T);bc=k[$b>>2]|0;x=0;fb(140,ob|0,259439,1);$b=x;x=0;if($b&1){Db=572;break}x=0;pa(57,(bc-Sa|0)==2|0,ob|0,677,258380,259346);bc=x;x=0;if(bc&1){bc=Hc()|0;$b=M;K2a(ob);gc=bc;hc=$b;break}K2a(ob);$b=k[a>>2]|0;k[S>>2]=1;k[S+8>>2]=80;k[S+40>>2]=1;bc=S+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=S+56|0;ac=S+60|0;cc=S+72|0;Yb=$b+48|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,Yb|0,S|0)|0;bc=x;x=0;if(bc&1){bc=Hc()|0;$b=M;fc=k[cc>>2]|0;if(fc)j0a(fc);fc=k[ac>>2]|0;if(!fc){dc=$b;ec=bc;Db=573;break}j0a(fc);dc=$b;ec=bc;Db=573;break}bc=k[cc>>2]|0;if(bc)j0a(bc);bc=k[ac>>2]|0;if(bc)j0a(bc);k[R>>2]=1;k[R+8>>2]=130;k[R+40>>2]=1;bc=R+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=R+56|0;ac=R+60|0;cc=R+72|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,Yb|0,R|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;bc=M;$b=k[cc>>2]|0;if($b)j0a($b);$b=k[ac>>2]|0;if(!$b){dc=bc;ec=Yb;Db=573;break}j0a($b);dc=bc;ec=Yb;Db=573;break}Yb=k[cc>>2]|0;if(Yb)j0a(Yb);Yb=k[ac>>2]|0;if(Yb)j0a(Yb);k[pb>>2]=k[a>>2];x=0;va(1505,pb|0);Yb=x;x=0;if(Yb&1){Db=572;break}Yb=k[a>>2]|0;k[Q>>2]=1;k[Q+8>>2]=128;k[Q+40>>2]=1;ac=Q+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=Q+56|0;cc=Q+60|0;bc=Q+72|0;$b=Yb+48|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,$b|0,Q|0)|0;ac=x;x=0;if(ac&1){ac=Hc()|0;Yb=M;fc=k[bc>>2]|0;if(fc)j0a(fc);fc=k[cc>>2]|0;if(!fc){dc=Yb;ec=ac;Db=573;break}j0a(fc);dc=Yb;ec=ac;Db=573;break}ac=k[bc>>2]|0;if(ac)j0a(ac);ac=k[cc>>2]|0;if(ac)j0a(ac);k[P>>2]=1;k[P+8>>2]=84;k[P+40>>2]=1;ac=P+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=P+56|0;cc=P+60|0;bc=P+72|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,$b|0,P|0)|0;ac=x;x=0;if(ac&1){ac=Hc()|0;Yb=M;fc=k[bc>>2]|0;if(fc)j0a(fc);fc=k[cc>>2]|0;if(!fc){dc=Yb;ec=ac;Db=573;break}j0a(fc);dc=Yb;ec=ac;Db=573;break}ac=k[bc>>2]|0;if(ac)j0a(ac);ac=k[cc>>2]|0;if(ac)j0a(ac);k[O>>2]=1;k[O+8>>2]=144;k[O+40>>2]=1;ac=O+48|0;k[ac>>2]=-1;k[ac+4>>2]=-1;ac=O+56|0;cc=O+60|0;bc=O+72|0;k[ac>>2]=0;k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac+12>>2]=0;k[ac+16>>2]=0;x=0;Ta(539,$b|0,O|0)|0;$b=x;x=0;if($b&1){$b=Hc()|0;ac=M;Yb=k[bc>>2]|0;if(Yb)j0a(Yb);Yb=k[cc>>2]|0;if(!Yb){dc=ac;ec=$b;Db=573;break}j0a(Yb);dc=ac;ec=$b;Db=573;break}$b=k[bc>>2]|0;if($b)j0a($b);$b=k[cc>>2]|0;if($b)j0a($b);$b=k[a>>2]|0;k[N>>2]=1;k[N+8>>2]=130;k[N+40>>2]=1;cc=N+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=N+56|0;bc=N+60|0;ac=N+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,$b+48|0,N|0)|0;$b=x;x=0;if($b&1){$b=Hc()|0;cc=M;Yb=k[ac>>2]|0;if(Yb)j0a(Yb);Yb=k[bc>>2]|0;if(!Yb){dc=cc;ec=$b;Db=573;break}j0a(Yb);dc=cc;ec=$b;Db=573;break}$b=k[ac>>2]|0;if($b)j0a($b);$b=k[bc>>2]|0;if($b)j0a($b);x=0;fb(313,a|0,b|0,0);$b=x;x=0;if($b&1){Db=572;break}$b=k[a>>2]|0;k[L>>2]=1;k[L+8>>2]=129;k[L+40>>2]=1;bc=L+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=L+56|0;ac=L+60|0;cc=L+72|0;Yb=$b+48|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,Yb|0,L|0)|0;bc=x;x=0;if(bc&1){bc=Hc()|0;$b=M;fc=k[cc>>2]|0;if(fc)j0a(fc);fc=k[ac>>2]|0;if(!fc){dc=$b;ec=bc;Db=573;break}j0a(fc);dc=$b;ec=bc;Db=573;break}bc=k[cc>>2]|0;if(bc)j0a(bc);bc=k[ac>>2]|0;if(bc)j0a(bc);k[K>>2]=1;k[K+8>>2]=1;k[K+40>>2]=1;bc=K+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=K+56|0;ac=K+60|0;cc=K+72|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,Yb|0,K|0)|0;bc=x;x=0;if(bc&1){bc=Hc()|0;$b=M;fc=k[cc>>2]|0;if(fc)j0a(fc);fc=k[ac>>2]|0;if(!fc){dc=$b;ec=bc;Db=573;break}j0a(fc);dc=$b;ec=bc;Db=573;break}bc=k[cc>>2]|0;if(bc)j0a(bc);bc=k[ac>>2]|0;if(bc)j0a(bc);k[J>>2]=1;k[J+8>>2]=144;k[J+40>>2]=1;bc=J+48|0;k[bc>>2]=-1;k[bc+4>>2]=-1;bc=J+56|0;ac=J+60|0;cc=J+72|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[bc+16>>2]=0;x=0;Ta(539,Yb|0,J|0)|0;Yb=x;x=0;if(Yb&1){Yb=Hc()|0;bc=M;$b=k[cc>>2]|0;if($b)j0a($b);$b=k[ac>>2]|0;if(!$b){dc=bc;ec=Yb;Db=573;break}j0a($b);dc=bc;ec=Yb;Db=573;break}Yb=k[cc>>2]|0;if(Yb)j0a(Yb);Yb=k[ac>>2]|0;if(Yb)j0a(Yb);x=0;fb(247,qb|0,256,0);Yb=x;x=0;if(Yb&1){Db=572;break}x=0;xa(820,a|0,qb|0);Yb=x;x=0;if(Yb&1){Yb=Hc()|0;ac=M;k[qb>>2]=20456;xh(qb+12|0,k[qb+16>>2]|0);cc=k[qb+8>>2]|0;if(!cc){gc=Yb;hc=ac;break}k0a(cc);gc=Yb;hc=ac;break}k[qb>>2]=20456;xh(qb+12|0,k[qb+16>>2]|0);ac=k[qb+8>>2]|0;if(ac)k0a(ac);ac=k[a>>2]|0;k[I>>2]=1;k[I+8>>2]=80;k[I+40>>2]=1;Yb=I+48|0;k[Yb>>2]=-1;k[Yb+4>>2]=-1;Yb=I+56|0;cc=I+60|0;bc=I+72|0;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[Yb+16>>2]=0;x=0;Ta(539,ac+48|0,I|0)|0;ac=x;x=0;if(ac&1){ac=Hc()|0;Yb=M;$b=k[bc>>2]|0;if($b)j0a($b);$b=k[cc>>2]|0;if(!$b){dc=Yb;ec=ac;Db=573;break}j0a($b);dc=Yb;ec=ac;Db=573;break}ac=k[bc>>2]|0;if(ac)j0a(ac);ac=k[cc>>2]|0;if(ac)j0a(ac);ac=(k[a>>2]|0)+136|0;cc=k[ac>>2]|0;x=0;fb(140,H|0,329672,0);bc=x;x=0;if(bc&1){Db=572;break}x=0;pa(57,(cc|0)>-1|0,H|0,57,268696,268754);cc=x;x=0;if(cc&1){cc=Hc()|0;bc=M;K2a(H);dc=bc;ec=cc;Db=573;break}K2a(H);cc=k[ac>>2]|0;x=0;fb(140,rb|0,259439,1);ac=x;x=0;if(ac&1){Db=572;break}x=0;pa(57,(cc-Sa|0)==2|0,rb|0,689,258380,259346);cc=x;x=0;if(cc&1){cc=Hc()|0;ac=M;K2a(rb);gc=cc;hc=ac;break}K2a(rb);x=0;fb(314,G|0,(k[a>>2]|0)+48|0,cb|0);ac=x;x=0;if(ac&1){Db=572;break}ac=k[G+72>>2]|0;if(ac)j0a(ac);ac=k[G+60>>2]|0;if(ac)j0a(ac);x=0;Ta(539,(k[a>>2]|0)+48|0,Ya|0)|0;ac=x;x=0;if(ac&1){Db=572;break}ac=k[a>>2]|0;k[F>>2]=1;k[F+8>>2]=80;k[F+40>>2]=1;cc=F+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=F+56|0;bc=F+60|0;Yb=F+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,ac+48|0,F|0)|0;ac=x;x=0;if(ac&1){ac=Hc()|0;cc=M;$b=k[Yb>>2]|0;if($b)j0a($b);$b=k[bc>>2]|0;if(!$b){dc=cc;ec=ac;Db=573;break}j0a($b);dc=cc;ec=ac;Db=573;break}ac=k[Yb>>2]|0;if(ac)j0a(ac);ac=k[bc>>2]|0;if(ac)j0a(ac);ac=k[cb+72>>2]|0;if(ac)j0a(ac);ac=k[cb+60>>2]|0;if(ac)j0a(ac);ac=k[bb+72>>2]|0;if(ac)j0a(ac);ac=k[bb+60>>2]|0;if(ac)j0a(ac);ac=k[$a+72>>2]|0;if(ac)j0a(ac);ac=k[$a+60>>2]|0;if(ac)j0a(ac);ac=k[Ya+72>>2]|0;if(ac)j0a(ac);ac=k[Ya+60>>2]|0;if(ac)j0a(ac);break b}while(0);if((Db|0)==572){Xb=Hc()|0;dc=M;ec=Xb;Db=573}if((Db|0)==573){gc=ec;hc=dc}Xb=k[cb+72>>2]|0;if(Xb)j0a(Xb);Xb=k[cb+60>>2]|0;if(Xb)j0a(Xb);Xb=k[bb+72>>2]|0;if(Xb)j0a(Xb);Xb=k[bb+60>>2]|0;if(!Xb){ic=gc;jc=hc;break}j0a(Xb);ic=gc;jc=hc}while(0);if((Db|0)==571){ic=_b;jc=Zb}Tb=k[$a+72>>2]|0;if(Tb)j0a(Tb);Tb=k[$a+60>>2]|0;if(!Tb){Ob=ic;Pb=jc;break c}j0a(Tb);Ob=ic;Pb=jc;break c}while(0);wb=Hc()|0;Kb=M;Lb=wb;Db=568}while(0);if((Db|0)==568){Ob=Lb;Pb=Kb}Hb=k[Ya+72>>2]|0;if(Hb)j0a(Hb);Hb=k[Ya+60>>2]|0;if(!Hb){Eb=Ob;Fb=Pb;break a}j0a(Hb);Eb=Ob;Fb=Pb;break a}while(0);Hb=k[a>>2]|0;k[E>>2]=1;k[E+8>>2]=129;k[E+40>>2]=1;Ab=E+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=E+56|0;Gb=E+60|0;Va=E+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Hb+48|0,E|0)|0;Hb=x;x=0;if(Hb&1){Hb=Hc()|0;Ab=M;wb=k[Va>>2]|0;if(wb)j0a(wb);wb=k[Gb>>2]|0;if(!wb){Bb=Ab;Cb=Hb;Db=565;break}j0a(wb);Bb=Ab;Cb=Hb;Db=565;break}Hb=k[Va>>2]|0;if(Hb)j0a(Hb);Hb=k[Gb>>2]|0;if(Hb)j0a(Hb);if(k[Ua>>2]|0){Hb=k[a>>2]|0;k[D>>2]=1;k[D+8>>2]=128;k[D+40>>2]=1;Gb=D+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=D+56|0;Va=D+60|0;Ab=D+72|0;wb=Hb+48|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,wb|0,D|0)|0;Gb=x;x=0;if(Gb&1){Gb=Hc()|0;Hb=M;Ib=k[Ab>>2]|0;if(Ib)j0a(Ib);Ib=k[Va>>2]|0;if(!Ib){Bb=Hb;Cb=Gb;Db=565;break}j0a(Ib);Bb=Hb;Cb=Gb;Db=565;break}Gb=k[Ab>>2]|0;if(Gb)j0a(Gb);Gb=k[Va>>2]|0;if(Gb)j0a(Gb);k[C>>2]=1;k[C+8>>2]=1;k[C+40>>2]=1;Gb=C+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=C+56|0;Va=C+60|0;Ab=C+72|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,wb|0,C|0)|0;Gb=x;x=0;if(Gb&1){Gb=Hc()|0;Hb=M;Ib=k[Ab>>2]|0;if(Ib)j0a(Ib);Ib=k[Va>>2]|0;if(!Ib){Bb=Hb;Cb=Gb;Db=565;break}j0a(Ib);Bb=Hb;Cb=Gb;Db=565;break}Gb=k[Ab>>2]|0;if(Gb)j0a(Gb);Gb=k[Va>>2]|0;if(Gb)j0a(Gb);k[sb>>2]=1;k[sb+32>>2]=1;k[B>>2]=2;Ub=B+8|0;Vb=sb;Wb=Ub+40|0;do{k[Ub>>2]=k[Vb>>2];Ub=Ub+4|0;Vb=Vb+4|0}while((Ub|0)<(Wb|0));Gb=B+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=B+56|0;Va=B+60|0;Ab=B+72|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,wb|0,B|0)|0;Gb=x;x=0;if(Gb&1){Gb=Hc()|0;Hb=M;Ib=k[Ab>>2]|0;if(Ib)j0a(Ib);Ib=k[Va>>2]|0;if(!Ib){Bb=Hb;Cb=Gb;Db=565;break}j0a(Ib);Bb=Hb;Cb=Gb;Db=565;break}Gb=k[Ab>>2]|0;if(Gb)j0a(Gb);Gb=k[Va>>2]|0;if(Gb)j0a(Gb);k[A>>2]=1;k[A+8>>2]=1;k[A+40>>2]=1;Gb=A+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=A+56|0;Va=A+60|0;Ab=A+72|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,wb|0,A|0)|0;Gb=x;x=0;if(Gb&1){Gb=Hc()|0;Hb=M;Ib=k[Ab>>2]|0;if(Ib)j0a(Ib);Ib=k[Va>>2]|0;if(!Ib){Bb=Hb;Cb=Gb;Db=565;break}j0a(Ib);Bb=Hb;Cb=Gb;Db=565;break}Gb=k[Ab>>2]|0;if(Gb)j0a(Gb);Gb=k[Va>>2]|0;if(Gb)j0a(Gb)}Gb=k[a>>2]|0;k[z>>2]=1;k[z+8>>2]=131;k[z+40>>2]=1;Va=z+48|0;k[Va>>2]=-1;k[Va+4>>2]=-1;Va=z+56|0;Ab=z+60|0;Hb=z+72|0;Ib=Gb+48|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,Ib|0,z|0)|0;Va=x;x=0;if(Va&1){Va=Hc()|0;Gb=M;Jb=k[Hb>>2]|0;if(Jb)j0a(Jb);Jb=k[Ab>>2]|0;if(!Jb){Bb=Gb;Cb=Va;Db=565;break}j0a(Jb);Bb=Gb;Cb=Va;Db=565;break}Va=k[Hb>>2]|0;if(Va)j0a(Va);Va=k[Ab>>2]|0;if(Va)j0a(Va);k[y>>2]=1;k[y+8>>2]=85;k[y+40>>2]=1;Va=y+48|0;k[Va>>2]=-1;k[Va+4>>2]=-1;Va=y+56|0;Ab=y+60|0;Hb=y+72|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,Ib|0,y|0)|0;Ib=x;x=0;if(Ib&1){Ib=Hc()|0;Va=M;Gb=k[Hb>>2]|0;if(Gb)j0a(Gb);Gb=k[Ab>>2]|0;if(!Gb){Bb=Va;Cb=Ib;Db=565;break}j0a(Gb);Bb=Va;Cb=Ib;Db=565;break}Ib=k[Hb>>2]|0;if(Ib)j0a(Ib);Ib=k[Ab>>2]|0;if(Ib)j0a(Ib);Ib=k[a>>2]|0;k[w>>2]=1;k[w+8>>2]=129;k[w+40>>2]=1;Ab=w+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=w+56|0;Hb=w+60|0;Va=w+72|0;Gb=Ib+48|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Gb|0,w|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ib=M;Jb=k[Va>>2]|0;if(Jb)j0a(Jb);Jb=k[Hb>>2]|0;if(!Jb){Bb=Ib;Cb=Ab;Db=565;break}j0a(Jb);Bb=Ib;Cb=Ab;Db=565;break}Ab=k[Va>>2]|0;if(Ab)j0a(Ab);Ab=k[Hb>>2]|0;if(Ab)j0a(Ab);k[v>>2]=1;k[v+8>>2]=129;k[v+40>>2]=1;Ab=v+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=v+56|0;Hb=v+60|0;Va=v+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Gb|0,v|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ib=M;Jb=k[Va>>2]|0;if(Jb)j0a(Jb);Jb=k[Hb>>2]|0;if(!Jb){Bb=Ib;Cb=Ab;Db=565;break}j0a(Jb);Bb=Ib;Cb=Ab;Db=565;break}Ab=k[Va>>2]|0;if(Ab)j0a(Ab);Ab=k[Hb>>2]|0;if(Ab)j0a(Ab);k[u>>2]=1;k[u+8>>2]=21;k[u+40>>2]=1;Ab=u+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=u+56|0;Hb=u+60|0;Va=u+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Gb|0,u|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ib=M;Jb=k[Va>>2]|0;if(Jb)j0a(Jb);Jb=k[Hb>>2]|0;if(!Jb){Bb=Ib;Cb=Ab;Db=565;break}j0a(Jb);Bb=Ib;Cb=Ab;Db=565;break}Ab=k[Va>>2]|0;if(Ab)j0a(Ab);Ab=k[Hb>>2]|0;if(Ab)j0a(Ab);k[t>>2]=1;k[t+8>>2]=17;k[t+40>>2]=1;Ab=t+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=t+56|0;Hb=t+60|0;Va=t+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Gb|0,t|0)|0;Gb=x;x=0;if(Gb&1){Gb=Hc()|0;Ab=M;Ib=k[Va>>2]|0;if(Ib)j0a(Ib);Ib=k[Hb>>2]|0;if(!Ib){Bb=Ab;Cb=Gb;Db=565;break}j0a(Ib);Bb=Ab;Cb=Gb;Db=565;break}Gb=k[Va>>2]|0;if(Gb)j0a(Gb);Gb=k[Hb>>2]|0;if(Gb)j0a(Gb);x=0;fb(315,s|0,(k[a>>2]|0)+48|0,Wa|0);Gb=x;x=0;if(Gb&1){Db=564;break}Gb=k[s+72>>2]|0;if(Gb)j0a(Gb);Gb=k[s+60>>2]|0;if(Gb)j0a(Gb);x=0;fb(313,a|0,b|0,0);Gb=x;x=0;if(Gb&1){Db=564;break}Gb=k[a>>2]|0;k[q>>2]=1;k[q+8>>2]=129;k[q+40>>2]=1;Hb=q+48|0;k[Hb>>2]=-1;k[Hb+4>>2]=-1;Hb=q+56|0;Va=q+60|0;Ab=q+72|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;k[Hb+16>>2]=0;x=0;Ta(539,Gb+48|0,q|0)|0;Gb=x;x=0;if(Gb&1){Gb=Hc()|0;Hb=M;Ib=k[Ab>>2]|0;if(Ib)j0a(Ib);Ib=k[Va>>2]|0;if(!Ib){Bb=Hb;Cb=Gb;Db=565;break}j0a(Ib);Bb=Hb;Cb=Gb;Db=565;break}Gb=k[Ab>>2]|0;if(Gb)j0a(Gb);Gb=k[Va>>2]|0;if(Gb)j0a(Gb);x=0;fb(313,a|0,b|0,0);Gb=x;x=0;if(Gb&1){Db=564;break}Gb=k[a>>2]|0;k[p>>2]=1;k[p+8>>2]=131;k[p+40>>2]=1;Va=p+48|0;k[Va>>2]=-1;k[Va+4>>2]=-1;Va=p+56|0;Ab=p+60|0;Hb=p+72|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,Gb+48|0,p|0)|0;Gb=x;x=0;if(Gb&1){Gb=Hc()|0;Va=M;Ib=k[Hb>>2]|0;if(Ib)j0a(Ib);Ib=k[Ab>>2]|0;if(!Ib){Bb=Va;Cb=Gb;Db=565;break}j0a(Ib);Bb=Va;Cb=Gb;Db=565;break}Gb=k[Hb>>2]|0;if(Gb)j0a(Gb);Gb=k[Ab>>2]|0;if(Gb)j0a(Gb);k[tb>>2]=k[a>>2];x=0;va(1505,tb|0);Gb=x;x=0;if(Gb&1){Db=564;break}Gb=k[a>>2]|0;k[o>>2]=1;k[o+8>>2]=145;k[o+40>>2]=1;Ab=o+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=o+56|0;Hb=o+60|0;Va=o+72|0;Ib=Gb+48|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Ib|0,o|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Gb=M;Jb=k[Va>>2]|0;if(Jb)j0a(Jb);Jb=k[Hb>>2]|0;if(!Jb){Bb=Gb;Cb=Ab;Db=565;break}j0a(Jb);Bb=Gb;Cb=Ab;Db=565;break}Ab=k[Va>>2]|0;if(Ab)j0a(Ab);Ab=k[Hb>>2]|0;if(Ab)j0a(Ab);k[n>>2]=1;k[n+8>>2]=130;k[n+40>>2]=1;Ab=n+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=n+56|0;Hb=n+60|0;Va=n+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Ib|0,n|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Gb=M;Jb=k[Va>>2]|0;if(Jb)j0a(Jb);Jb=k[Hb>>2]|0;if(!Jb){Bb=Gb;Cb=Ab;Db=565;break}j0a(Jb);Bb=Gb;Cb=Ab;Db=565;break}Ab=k[Va>>2]|0;if(Ab)j0a(Ab);Ab=k[Hb>>2]|0;if(Ab)j0a(Ab);k[m>>2]=1;k[m+8>>2]=1;k[m+40>>2]=1;Ab=m+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=m+56|0;Hb=m+60|0;Va=m+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Ib|0,m|0)|0;Ib=x;x=0;if(Ib&1){Ib=Hc()|0;Ab=M;Gb=k[Va>>2]|0;if(Gb)j0a(Gb);Gb=k[Hb>>2]|0;if(!Gb){Bb=Ab;Cb=Ib;Db=565;break}j0a(Gb);Bb=Ab;Cb=Ib;Db=565;break}Ib=k[Va>>2]|0;if(Ib)j0a(Ib);Ib=k[Hb>>2]|0;if(Ib)j0a(Ib);Ib=k[a>>2]|0;k[l>>2]=1;k[l+8>>2]=145;k[l+40>>2]=1;Hb=l+48|0;k[Hb>>2]=-1;k[Hb+4>>2]=-1;Hb=l+56|0;Va=l+60|0;Ab=l+72|0;Gb=Ib+48|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;k[Hb+16>>2]=0;x=0;Ta(539,Gb|0,l|0)|0;Hb=x;x=0;if(Hb&1){Hb=Hc()|0;Ib=M;Jb=k[Ab>>2]|0;if(Jb)j0a(Jb);Jb=k[Va>>2]|0;if(!Jb){Bb=Ib;Cb=Hb;Db=565;break}j0a(Jb);Bb=Ib;Cb=Hb;Db=565;break}Hb=k[Ab>>2]|0;if(Hb)j0a(Hb);Hb=k[Va>>2]|0;if(Hb)j0a(Hb);k[j>>2]=1;k[j+8>>2]=1;k[j+40>>2]=1;Hb=j+48|0;k[Hb>>2]=-1;k[Hb+4>>2]=-1;Hb=j+56|0;Va=j+60|0;Ab=j+72|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;k[Hb+16>>2]=0;x=0;Ta(539,Gb|0,j|0)|0;Gb=x;x=0;if(Gb&1){Gb=Hc()|0;Hb=M;Ib=k[Ab>>2]|0;if(Ib)j0a(Ib);Ib=k[Va>>2]|0;if(!Ib){Bb=Hb;Cb=Gb;Db=565;break}j0a(Ib);Bb=Hb;Cb=Gb;Db=565;break}Gb=k[Ab>>2]|0;if(Gb)j0a(Gb);Gb=k[Va>>2]|0;if(Gb)j0a(Gb);do if(!(k[Ua>>2]|0)){Gb=b+36|0;Va=k[Gb>>2]|0;x=0;fb(140,i|0,329672,0);Ab=x;x=0;if(Ab&1){Db=564;break a}x=0;pa(57,(Va|0)!=0|0,i|0,588,285183,276209);Va=x;x=0;if(Va&1){Va=Hc()|0;Ab=M;K2a(i);Bb=Ab;Cb=Va;Db=565;break a}K2a(i);Va=k[Gb>>2]|0;x=0;Ab=Ba(k[(k[Va>>2]|0)+44>>2]|0,Va|0)|0;Va=x;x=0;if(Va&1){Db=564;break a}if(Ab>>>0<32){Db=775;break}Ab=k[Gb>>2]|0;x=0;fb(140,h|0,329672,0);Va=x;x=0;if(Va&1){Db=564;break a}x=0;pa(57,(Ab|0)!=0|0,h|0,588,285183,276209);Ab=x;x=0;if(!(Ab&1)){K2a(h);x=0;xa(820,a|0,k[Gb>>2]|0);Gb=x;x=0;if(Gb&1){Db=564;break a}else break}else{Gb=Hc()|0;Ab=M;K2a(h);Bb=Ab;Cb=Gb;Db=565;break a}}else Db=775;while(0);do if((Db|0)==775){x=0;fb(247,ub|0,256,0);wb=x;x=0;if(wb&1){Db=564;break a}x=0;xa(820,a|0,ub|0);wb=x;x=0;if(wb&1){wb=Hc()|0;Gb=M;k[ub>>2]=20456;xh(ub+12|0,k[ub+16>>2]|0);Ab=k[ub+8>>2]|0;if(!Ab){Eb=wb;Fb=Gb;break a}k0a(Ab);Eb=wb;Fb=Gb;break a}else{k[ub>>2]=20456;xh(ub+12|0,k[ub+16>>2]|0);Gb=k[ub+8>>2]|0;if(!Gb)break;k0a(Gb);break}}while(0);x=0;Ta(539,(k[a>>2]|0)+48|0,Wa|0)|0;Gb=x;x=0;if(Gb&1){Db=564;break}Gb=k[a>>2]|0;k[g>>2]=1;k[g+8>>2]=80;k[g+40>>2]=1;wb=g+48|0;k[wb>>2]=-1;k[wb+4>>2]=-1;wb=g+56|0;Ab=g+60|0;Va=g+72|0;Hb=Gb+48|0;k[wb>>2]=0;k[wb+4>>2]=0;k[wb+8>>2]=0;k[wb+12>>2]=0;k[wb+16>>2]=0;x=0;Ta(539,Hb|0,g|0)|0;wb=x;x=0;if(wb&1){wb=Hc()|0;Gb=M;Ib=k[Va>>2]|0;if(Ib)j0a(Ib);Ib=k[Ab>>2]|0;if(!Ib){Bb=Gb;Cb=wb;Db=565;break}j0a(Ib);Bb=Gb;Cb=wb;Db=565;break}wb=k[Va>>2]|0;if(wb)j0a(wb);wb=k[Ab>>2]|0;if(wb)j0a(wb);k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;wb=f+48|0;k[wb>>2]=-1;k[wb+4>>2]=-1;wb=f+56|0;Ab=f+60|0;Va=f+72|0;k[wb>>2]=0;k[wb+4>>2]=0;k[wb+8>>2]=0;k[wb+12>>2]=0;k[wb+16>>2]=0;x=0;Ta(539,Hb|0,f|0)|0;wb=x;x=0;if(wb&1){wb=Hc()|0;Gb=M;Ib=k[Va>>2]|0;if(Ib)j0a(Ib);Ib=k[Ab>>2]|0;if(!Ib){Bb=Gb;Cb=wb;Db=565;break}j0a(Ib);Bb=Gb;Cb=wb;Db=565;break}wb=k[Va>>2]|0;if(wb)j0a(wb);wb=k[Ab>>2]|0;if(wb)j0a(wb);k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;wb=e+48|0;k[wb>>2]=-1;k[wb+4>>2]=-1;wb=e+56|0;Ab=e+60|0;Va=e+72|0;k[wb>>2]=0;k[wb+4>>2]=0;k[wb+8>>2]=0;k[wb+12>>2]=0;k[wb+16>>2]=0;x=0;Ta(539,Hb|0,e|0)|0;Hb=x;x=0;if(Hb&1){Hb=Hc()|0;wb=M;Gb=k[Va>>2]|0;if(Gb)j0a(Gb);Gb=k[Ab>>2]|0;if(!Gb){Bb=wb;Cb=Hb;Db=565;break}j0a(Gb);Bb=wb;Cb=Hb;Db=565;break}Hb=k[Va>>2]|0;if(Hb)j0a(Hb);Hb=k[Ab>>2]|0;if(Hb)j0a(Hb);Hb=(k[a>>2]|0)+136|0;Ab=k[Hb>>2]|0;x=0;fb(140,d|0,329672,0);Va=x;x=0;if(Va&1){Db=564;break}x=0;pa(57,(Ab|0)>-1|0,d|0,57,268696,268754);Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Va=M;K2a(d);Bb=Va;Cb=Ab;Db=565;break}K2a(d);Ab=k[Hb>>2]|0;x=0;fb(140,vb|0,329672,0);Hb=x;x=0;if(Hb&1){Db=564;break}x=0;pa(57,(Ab|0)==(Sa+-2|0)|0,vb|0,732,258380,259346);Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Hb=M;K2a(vb);Eb=Ab;Fb=Hb;break}K2a(vb);Hb=k[Wa+72>>2]|0;if(Hb)j0a(Hb);Hb=k[Wa+60>>2]|0;if(!Hb){r=c;return}j0a(Hb);r=c;return}else Db=564}else Db=564;while(0);if((Db|0)==564){c=Hc()|0;Bb=M;Cb=c;Db=565}if((Db|0)==565){Eb=Cb;Fb=Bb}Bb=k[Wa+72>>2]|0;if(Bb)j0a(Bb);Bb=k[Wa+60>>2]|0;if(!Bb){yb=Eb;zb=Fb;Sc(yb|0)}j0a(Bb);yb=Eb;zb=Fb;Sc(yb|0)}function Hia(){k[10179]=0;k[10180]=0;k[10181]=0;return}function Iia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+80|0;d=c;k[d>>2]=1;k[d+8>>2]=b&255;k[d+40>>2]=1;b=d+48|0;k[b>>2]=-1;k[b+4>>2]=-1;b=d+56|0;e=d+60|0;f=d+72|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;x=0;Ta(539,a+48|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;b=k[f>>2]|0;if(b)j0a(b);b=k[e>>2]|0;if(!b)Sc(d|0);j0a(b);Sc(d|0)}else{d=k[f>>2]|0;if(d)j0a(d);d=k[e>>2]|0;if(!d){r=c;return a|0}j0a(d);r=c;return a|0}return 0}function Jia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+96|0;d=c+80|0;e=c;Ria(e,b+48|0);b=k[e>>2]|0;x=0;fb(140,d|0,329672,0);f=x;x=0;do if(f&1){g=Hc()|0;h=M;i=g}else{x=0;pa(56,(b|0)==4|(b|0)==8|0,d|0,70,296096,267525);g=x;x=0;if(g&1){g=Hc()|0;j=M;K2a(d);h=j;i=g;break}K2a(d);k[a>>2]=8;g=a+8|0;j=e+8|0;l=g+40|0;do{k[g>>2]=k[j>>2];g=g+4|0;j=j+4|0}while((g|0)<(l|0));j=a+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=a+56|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;j=k[e+72>>2]|0;if(j)j0a(j);j=k[e+60>>2]|0;if(!j){r=c;return}j0a(j);r=c;return}while(0);c=k[e+72>>2]|0;if(c)j0a(c);c=k[e+60>>2]|0;if(!c)Sc(i|0);j0a(c);Sc(i|0)}function Kia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+176|0;e=d+160|0;f=d+80|0;g=d;h=k[c>>2]|0;q2a(e,329672,0);x=0;pa(56,(h|0)==4|(h|0)==8|0,e|0,71,296096,296141);h=x;x=0;if(h&1){h=Hc()|0;K2a(e);Sc(h|0)}K2a(e);k[f>>2]=4;e=f+8|0;h=c+8|0;c=e+40|0;do{k[e>>2]=k[h>>2];e=e+4|0;h=h+4|0}while((e|0)<(c|0));i=f+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=f+56|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;i=Ta(539,b|0,f|0)|0;j=x;x=0;if(j&1){j=Hc()|0;l=M;m=k[f+72>>2]|0;if(m)j0a(m);m=k[f+60>>2]|0;if(!m){n=l;o=j;Sc(o|0)}j0a(m);n=l;o=j;Sc(o|0)}k[a>>2]=k[i>>2];e=a+8|0;h=i+8|0;c=e+40|0;do{k[e>>2]=k[h>>2];e=e+4|0;h=h+4|0}while((e|0)<(c|0));h=i+48|0;e=k[h+4>>2]|0;c=a+48|0;k[c>>2]=k[h>>2];k[c+4>>2]=e;k[a+56>>2]=k[i+56>>2];e=k[i+60>>2]|0;k[a+60>>2]=e;c=(e|0)==0;if(!c)h0a(e);k[a+64>>2]=k[i+64>>2];k[a+68>>2]=k[i+68>>2];h=k[i+72>>2]|0;k[a+72>>2]=h;a=(h|0)==0;if(!a)h0a(h);i=k[f+72>>2]|0;if(i)j0a(i);i=k[f+60>>2]|0;if(i)j0a(i);k[g>>2]=1;k[g+8>>2]=86;k[g+40>>2]=1;i=g+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=g+56|0;f=g+60|0;j=g+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,b|0,g|0)|0;g=x;x=0;if(!(g&1)){g=k[j>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(!g){r=d;return}j0a(g);r=d;return}d=Hc()|0;g=M;b=k[j>>2]|0;if(b)j0a(b);b=k[f>>2]|0;if(b)j0a(b);if(!a)j0a(h);if(c){n=g;o=d;Sc(o|0)}j0a(e);n=g;o=d;Sc(o|0)}function Lia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+176|0;e=d+160|0;f=d+80|0;g=d;h=k[c>>2]|0;q2a(e,329672,0);x=0;pa(56,(h|0)==4|(h|0)==8|0,e|0,71,296096,296141);h=x;x=0;if(h&1){h=Hc()|0;K2a(e);Sc(h|0)}K2a(e);k[f>>2]=4;e=f+8|0;h=c+8|0;c=e+40|0;do{k[e>>2]=k[h>>2];e=e+4|0;h=h+4|0}while((e|0)<(c|0));i=f+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=f+56|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;i=Ta(539,b|0,f|0)|0;j=x;x=0;if(j&1){j=Hc()|0;l=M;m=k[f+72>>2]|0;if(m)j0a(m);m=k[f+60>>2]|0;if(!m){n=l;o=j;Sc(o|0)}j0a(m);n=l;o=j;Sc(o|0)}k[a>>2]=k[i>>2];e=a+8|0;h=i+8|0;c=e+40|0;do{k[e>>2]=k[h>>2];e=e+4|0;h=h+4|0}while((e|0)<(c|0));h=i+48|0;e=k[h+4>>2]|0;c=a+48|0;k[c>>2]=k[h>>2];k[c+4>>2]=e;k[a+56>>2]=k[i+56>>2];e=k[i+60>>2]|0;k[a+60>>2]=e;c=(e|0)==0;if(!c)h0a(e);k[a+64>>2]=k[i+64>>2];k[a+68>>2]=k[i+68>>2];h=k[i+72>>2]|0;k[a+72>>2]=h;a=(h|0)==0;if(!a)h0a(h);i=k[f+72>>2]|0;if(i)j0a(i);i=k[f+60>>2]|0;if(i)j0a(i);k[g>>2]=1;k[g+8>>2]=87;k[g+40>>2]=1;i=g+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=g+56|0;f=g+60|0;j=g+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,b|0,g|0)|0;g=x;x=0;if(!(g&1)){g=k[j>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(!g){r=d;return}j0a(g);r=d;return}d=Hc()|0;g=M;b=k[j>>2]|0;if(b)j0a(b);b=k[f>>2]|0;if(b)j0a(b);if(!a)j0a(h);if(c){n=g;o=d;Sc(o|0)}j0a(e);n=g;o=d;Sc(o|0)}function Mia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+96|0;d=c+80|0;e=c;f=b+48|0;b=k[f>>2]|0;k[f>>2]=b+1;k[e>>2]=4;k[e+8>>2]=b;k[e+40>>2]=1;b=e+48|0;k[b>>2]=-1;k[b+4>>2]=-1;b=e+56|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;x=0;b=Ta(539,f|0,e|0)|0;f=x;x=0;do if(!(f&1)?(g=k[b>>2]|0,x=0,fb(140,d|0,329672,0),h=x,x=0,!(h&1)):0){x=0;pa(56,(g|0)==4|(g|0)==8|0,d|0,70,296096,267525);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(d);i=h;j=g;break}K2a(d);k[a>>2]=8;g=a+8|0;h=b+8|0;l=g+40|0;do{k[g>>2]=k[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(l|0));h=a+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=a+56|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;h=k[e+72>>2]|0;if(h)j0a(h);h=k[e+60>>2]|0;if(!h){r=c;return}j0a(h);r=c;return}else m=10;while(0);if((m|0)==10){m=Hc()|0;i=M;j=m}m=k[e+72>>2]|0;if(m)j0a(m);m=k[e+60>>2]|0;if(!m)Sc(j|0);j0a(m);Sc(j|0)}function Nia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+96|0;d=c+80|0;e=c;Qia(e,b+48|0);b=k[e>>2]|0;x=0;fb(140,d|0,329672,0);f=x;x=0;do if(f&1){g=Hc()|0;h=M;i=g}else{x=0;pa(56,(b|0)==4|(b|0)==8|0,d|0,70,296096,267525);g=x;x=0;if(g&1){g=Hc()|0;j=M;K2a(d);h=j;i=g;break}K2a(d);k[a>>2]=8;g=a+8|0;j=e+8|0;l=g+40|0;do{k[g>>2]=k[j>>2];g=g+4|0;j=j+4|0}while((g|0)<(l|0));j=a+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=a+56|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;j=k[e+72>>2]|0;if(j)j0a(j);j=k[e+60>>2]|0;if(!j){r=c;return}j0a(j);r=c;return}while(0);c=k[e+72>>2]|0;if(c)j0a(c);c=k[e+60>>2]|0;if(!c)Sc(i|0);j0a(c);Sc(i|0)}function Oia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+64|0;d=c+40|0;e=c;f=a+88|0;a=(k[f>>2]|0)+b|0;k[f>>2]=a;if(!(Pia((a|0)>-1,264493,90,264508,259441)|0)){r=c;return}c=e;a=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(a|0));c=e+20|0;a=e+24|0;k[a>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;f=e+4|0;b=e+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=26536;k[e>>2]=26500;k[c>>2]=26560;x=0;nb(102,e|0,259441,264508,90);x=0;e=Hc()|0;k[f>>2]=26592;k[f+-4>>2]=26620;k[f+16>>2]=26644;K2a(b);k[c>>2]=20796;c=k[a>>2]|0;if(!c)Sc(e|0);x=0;b=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!b)Sc(e|0);k[a>>2]=0;Sc(e|0)}function Pia(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0;f=r;r=r+16|0;g=f;if(a){h=a^1;r=f;return h|0}i=ei(68912,259485,17)|0;j=ei(ei(i,b,RLa(b)|0)|0,259503,7)|0;b=ei(ffb(ei(ei(j,e,RLa(e)|0)|0,259511,7)|0,c)|0,259519,7)|0;c=ei(ei(b,d,RLa(d)|0)|0,316824,1)|0;d=zab(c+(k[(k[c>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=d;x=0;d=Ta(495,g|0,74148)|0;b=x;x=0;if(b&1){l=Hc()|0;m=M;$pb(g);Sc(l|0)}x=0;b=Ta(k[(k[d>>2]|0)+28>>2]|0,d|0,10)|0;d=x;x=0;if(d&1){l=Hc()|0;m=M;$pb(g);Sc(l|0)}$pb(g);pfb(c,b)|0;cdb(c)|0;h=a^1;r=f;return h|0}function Qia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+160|0;d=c+80|0;e=c;f=k[b>>2]|0;k[b>>2]=f+1;k[d>>2]=4;k[d+8>>2]=f;k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;f=Ta(539,b|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;h=M;i=k[d+72>>2]|0;if(i)j0a(i);i=k[d+60>>2]|0;if(!i){j=h;l=g;Sc(l|0)}j0a(i);j=h;l=g;Sc(l|0)}k[a>>2]=k[f>>2];g=a+8|0;h=f+8|0;i=g+40|0;do{k[g>>2]=k[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));h=f+48|0;g=k[h+4>>2]|0;i=a+48|0;k[i>>2]=k[h>>2];k[i+4>>2]=g;k[a+56>>2]=k[f+56>>2];g=k[f+60>>2]|0;k[a+60>>2]=g;i=(g|0)==0;if(!i)h0a(g);k[a+64>>2]=k[f+64>>2];k[a+68>>2]=k[f+68>>2];h=k[f+72>>2]|0;k[a+72>>2]=h;a=(h|0)==0;if(!a)h0a(h);f=k[d+72>>2]|0;if(f)j0a(f);f=k[d+60>>2]|0;if(f)j0a(f);k[e>>2]=1;k[e+8>>2]=86;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;d=e+60|0;m=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,b|0,e|0)|0;e=x;x=0;if(!(e&1)){e=k[m>>2]|0;if(e)j0a(e);e=k[d>>2]|0;if(!e){r=c;return}j0a(e);r=c;return}c=Hc()|0;e=M;b=k[m>>2]|0;if(b)j0a(b);b=k[d>>2]|0;if(b)j0a(b);if(!a)j0a(h);if(i){j=e;l=c;Sc(l|0)}j0a(g);j=e;l=c;Sc(l|0)}function Ria(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+160|0;d=c+80|0;e=c;f=k[b>>2]|0;k[b>>2]=f+1;k[d>>2]=4;k[d+8>>2]=f;k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;f=Ta(539,b|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;h=M;i=k[d+72>>2]|0;if(i)j0a(i);i=k[d+60>>2]|0;if(!i){j=h;l=g;Sc(l|0)}j0a(i);j=h;l=g;Sc(l|0)}k[a>>2]=k[f>>2];g=a+8|0;h=f+8|0;i=g+40|0;do{k[g>>2]=k[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));h=f+48|0;g=k[h+4>>2]|0;i=a+48|0;k[i>>2]=k[h>>2];k[i+4>>2]=g;k[a+56>>2]=k[f+56>>2];g=k[f+60>>2]|0;k[a+60>>2]=g;i=(g|0)==0;if(!i)h0a(g);k[a+64>>2]=k[f+64>>2];k[a+68>>2]=k[f+68>>2];h=k[f+72>>2]|0;k[a+72>>2]=h;a=(h|0)==0;if(!a)h0a(h);f=k[d+72>>2]|0;if(f)j0a(f);f=k[d+60>>2]|0;if(f)j0a(f);k[e>>2]=1;k[e+8>>2]=87;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;d=e+60|0;m=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,b|0,e|0)|0;e=x;x=0;if(!(e&1)){e=k[m>>2]|0;if(e)j0a(e);e=k[d>>2]|0;if(!e){r=c;return}j0a(e);r=c;return}c=Hc()|0;e=M;b=k[m>>2]|0;if(b)j0a(b);b=k[d>>2]|0;if(b)j0a(b);if(!a)j0a(h);if(i){j=e;l=c;Sc(l|0)}j0a(g);j=e;l=c;Sc(l|0)}function Sia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0;e=k[d>>2]|0;k[a+4>>2]=b;d=a+8|0;k[d>>2]=e;k[a>>2]=40736;e=sma(b,c)|0;k[a+12>>2]=e;e=k[d>>2]|0;d=Vf[k[(k[e>>2]|0)+60>>2]&1023](e)|0;k[a+16>>2]=d;return}function Tia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+128|0;d=c+104|0;e=c+64|0;f=c+40|0;g=c+24|0;h=c+12|0;i=c;j=a+4|0;l=tma(k[j>>2]|0,k[a+12>>2]|0)|0;m=l+1|0;if(m>>>0<=16){n=a+16|0;a=m>>>0>=(k[n>>2]|0)>>>0;q2a(i,259855,28);x=0;pa(57,a|0,i|0,50,259819,259721);a=x;x=0;if(a&1){a=Hc()|0;m=M;K2a(i);o=m;p=a;Sc(p|0)}K2a(i);if(!(k[n>>2]|0)){r=c;return}i=l>>>0<16;a=l+128&255;l=0;while(1){m=k[j>>2]|0;q2a(d,295946,34);x=0;pa(51,i|0,d|0,210,295981,296025);q=x;x=0;if(q&1){s=27;break}K2a(d);Iia(m,a)|0;l=l+1|0;if(l>>>0>=(k[n>>2]|0)>>>0){s=24;break}}if((s|0)==24){r=c;return}else if((s|0)==27){s=Hc()|0;K2a(d);Sc(s|0)}}s=e;c=s+36|0;do{k[s>>2]=0;s=s+4|0}while((s|0)<(c|0));s=e+20|0;c=e+24|0;k[c>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;n=e+4|0;l=n+-4|0;a=n+16|0;i=e+8|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=40936;k[e>>2]=40900;k[s>>2]=40960;k[f>>2]=31456;d=b;j=k[d+4>>2]|0;m=f+4|0;k[m>>2]=k[d>>2];k[m+4>>2]=j;k[f+12>>2]=k[b+8>>2];j=k[b+12>>2]|0;k[f+16>>2]=j;b=(j|0)==0;if(!b)h0a(j);x=0;m=Ta(595,e|0,f|0)|0;e=x;x=0;if(!(e&1)?(x=0,fb(140,h|0,270638,45),e=x,x=0,!(e&1)):0){k[g>>2]=21048;e=g+4|0;x=0;xa(604,e|0,h|0);d=x;x=0;if(d&1){d=Hc()|0;t=M;u=d}else{x=0;d=Ta(596,m|0,g|0)|0;m=x;x=0;if(!(m&1)){x=0;nb(135,d|0,259721,259819,49);x=0}d=Hc()|0;m=M;k[g>>2]=21048;K2a(e);t=m;u=d}K2a(h);v=t;w=u}else{u=Hc()|0;v=M;w=u}k[f>>2]=31456;if(!b)j0a(j);k[n>>2]=40992;k[l>>2]=41020;k[a>>2]=41044;K2a(i);k[s>>2]=20796;s=k[c>>2]|0;if(s){x=0;i=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(i)k[c>>2]=0}o=v;p=w;Sc(p|0)}function Uia(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;b=r;r=r+176|0;e=b;f=b+136|0;g=b+112|0;h=b+96|0;i=b+80|0;j=a+4|0;l=tma(k[j>>2]|0,k[a+12>>2]|0)|0;m=a+16|0;n=k[m>>2]|0;o=l-n|0;l=o+1|0;if(l>>>0<=16){a:do if(!((l|0)==0|(n|0)==0)){p=o>>>0<16;q=o+144&255;s=e+8|0;t=e+40|0;u=e+48|0;v=e+56|0;w=e+60|0;y=e+72|0;z=0;while(1){A=k[j>>2]|0;q2a(e,296239,35);x=0;pa(51,p|0,e|0,217,295981,296275);B=x;x=0;if(B&1){C=24;break}K2a(e);B=Iia(A,q)|0;k[e>>2]=1;k[s>>2]=80;k[t>>2]=1;A=u;k[A>>2]=-1;k[A+4>>2]=-1;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;Ta(539,B+48|0,e|0)|0;B=x;x=0;if(B&1)break;B=k[y>>2]|0;if(B)j0a(B);B=k[w>>2]|0;if(B)j0a(B);z=z+1|0;if(z>>>0>=(k[m>>2]|0)>>>0)break a}if((C|0)==24){z=Hc()|0;K2a(e);Sc(z|0)}z=Hc()|0;v=k[y>>2]|0;if(v)j0a(v);v=k[w>>2]|0;if(!v)Sc(z|0);j0a(v);Sc(z|0)}while(0);if(d){r=b;return}jg[k[(k[a>>2]|0)+4>>2]&511](a,c,0);r=b;return}b=f;a=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(a|0));b=f+20|0;a=f+24|0;k[a>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;d=f+4|0;C=d+-4|0;m=d+16|0;j=f+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=40936;k[f>>2]=40900;k[b>>2]=40960;k[g>>2]=31456;e=c;o=k[e+4>>2]|0;n=g+4|0;k[n>>2]=k[e>>2];k[n+4>>2]=o;k[g+12>>2]=k[c+8>>2];o=k[c+12>>2]|0;k[g+16>>2]=o;c=(o|0)==0;if(!c)h0a(o);x=0;n=Ta(595,f|0,g|0)|0;f=x;x=0;if(!(f&1)?(x=0,fb(140,i|0,270638,45),f=x,x=0,!(f&1)):0){k[h>>2]=21048;f=h+4|0;x=0;xa(604,f|0,i|0);e=x;x=0;if(e&1){e=Hc()|0;D=M;E=e}else{x=0;e=Ta(596,n|0,h|0)|0;n=x;x=0;if(!(n&1)){x=0;nb(135,e|0,259884,259819,63);x=0}e=Hc()|0;n=M;k[h>>2]=21048;K2a(f);D=n;E=e}K2a(i);F=D;G=E}else{E=Hc()|0;F=M;G=E}k[g>>2]=31456;if(!c)j0a(o);k[d>>2]=40992;k[C>>2]=41020;k[m>>2]=41044;K2a(j);k[b>>2]=20796;b=k[a>>2]|0;if(!b)Sc(G|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(G|0);k[a>>2]=0;Sc(G|0)}function Via(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=r;r=r+16|0;d=c;k[d>>2]=k[a+4>>2];e=a+8|0;wla(d,k[e>>2]|0);ng[k[(k[a>>2]|0)+8>>2]&255](a,k[e>>2]|0,b,1);r=c;return}function Wia(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a+4>>2]=b;k[a+8>>2]=c;k[a>>2]=40760;i[a+12>>0]=d&1;return}function Xia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+96|0;d=b;e=b+80|0;f=a+8|0;g=k[f>>2]|0;h=a+4|0;if(!(Vf[k[(k[g>>2]|0)+56>>2]&1023](g)|0)){g=k[h>>2]|0;k[d>>2]=1;k[d+8>>2]=81;k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;l=d+60|0;m=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,g+48|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;j=k[m>>2]|0;if(j)j0a(j);j=k[l>>2]|0;if(!j)Sc(g|0);j0a(j);Sc(g|0)}else{g=k[m>>2]|0;if(g)j0a(g);g=k[l>>2]|0;if(g)j0a(g);r=b;return}}do if(!c){g=k[h>>2]|0;k[d>>2]=1;k[d+8>>2]=128;k[d+40>>2]=1;l=d+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=d+56|0;m=d+60|0;j=d+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,g+48|0,d|0)|0;g=x;x=0;if(!(g&1)){g=k[j>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(g)j0a(g);break}g=Hc()|0;l=k[j>>2]|0;if(l)j0a(l);l=k[m>>2]|0;if(!l)Sc(g|0);j0a(l);Sc(g|0)}while(0);k[e>>2]=k[h>>2];kla(e,k[f>>2]|0,0,(i[a+12>>0]|0)!=0,0);r=b;return}function Yia(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+176|0;e=c+40|0;f=c+120|0;g=c+160|0;h=c+148|0;j=c;l=c+136|0;m=c+124|0;n=a+4|0;k[f>>2]=k[n>>2];o=a+8|0;p=k[o>>2]|0;if(!(Vf[k[(k[p>>2]|0)+56>>2]&1023](p)|0)){p=cg[k[(k[b>>2]|0)+20>>2]&1023](b,k[o>>2]|0)|0;q2a(l,260154,52);x=0;pa(57,p|0,l|0,123,259819,260008);p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(l);s=q;t=p;Sc(t|0)}K2a(l);l=k[o>>2]|0;p=(Vf[k[(k[l>>2]|0)+60>>2]&1023](l)|0)==1;q2a(m,329672,0);x=0;pa(57,p|0,m|0,125,259819,260008);p=x;x=0;if(p&1){p=Hc()|0;l=M;K2a(m);s=l;t=p;Sc(t|0)}K2a(m);do if(!d){m=k[n>>2]|0;k[e>>2]=1;k[e+8>>2]=129;k[e+40>>2]=1;p=e+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=e+56|0;l=e+60|0;q=e+72|0;u=m+48|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,u|0,e|0)|0;p=x;x=0;if(p&1){p=Hc()|0;m=k[q>>2]|0;if(m)j0a(m);m=k[l>>2]|0;if(!m)Sc(p|0);j0a(m);Sc(p|0)}p=k[q>>2]|0;if(p)j0a(p);p=k[l>>2]|0;if(p)j0a(p);k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;p=e+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=e+56|0;l=e+60|0;q=e+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,u|0,e|0)|0;u=x;x=0;if(!(u&1)){u=k[q>>2]|0;if(u)j0a(u);u=k[l>>2]|0;if(u)j0a(u);break}u=Hc()|0;p=k[q>>2]|0;if(p)j0a(p);p=k[l>>2]|0;if(!p)Sc(u|0);j0a(p);Sc(u|0)}while(0);u=k[n>>2]|0;k[e>>2]=1;k[e+8>>2]=82;k[e+40>>2]=1;p=e+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=e+56|0;l=e+60|0;q=e+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,u+48|0,e|0)|0;u=x;x=0;if(u&1){u=Hc()|0;p=k[q>>2]|0;if(p)j0a(p);p=k[l>>2]|0;if(!p)Sc(u|0);j0a(p);Sc(u|0)}else{u=k[q>>2]|0;if(u)j0a(u);u=k[l>>2]|0;if(u)j0a(u);r=c;return}}u=Vf[k[(k[b>>2]|0)+56>>2]&1023](b)|0;q2a(g,329672,0);x=0;pa(57,u|0,g|0,100,259819,260008);u=x;x=0;if(u&1){u=Hc()|0;l=M;K2a(g);s=l;t=u;Sc(t|0)}K2a(g);zla(f,Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0,1);tla(f,b,k[o>>2]|0,1);if(!d){d=k[o>>2]|0;lla(f,Vf[k[(k[d>>2]|0)+60>>2]&1023](d)|0,1);d=k[o>>2]|0;b=(Vf[k[(k[d>>2]|0)+60>>2]&1023](d)|0)+1|0;d=k[o>>2]|0;sla(f,b,Vf[k[(k[d>>2]|0)+60>>2]&1023](d)|0)}d=k[o>>2]|0;if(i[a+12>>0]|0){ola(f,d,1);f=k[n>>2]|0;k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;a=e+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=e+56|0;b=e+60|0;g=e+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,f+48|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;a=k[g>>2]|0;if(a)j0a(a);a=k[b>>2]|0;if(!a)Sc(f|0);j0a(a);Sc(f|0)}else{f=k[g>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(f)j0a(f);r=c;return}}f=(cg[k[(k[d>>2]|0)+28>>2]&1023](d,0)|0)==1;q2a(h,260129,24);x=0;pa(57,f|0,h|0,110,259819,260008);f=x;x=0;if(f&1){f=Hc()|0;d=M;K2a(h);s=d;t=f;Sc(t|0)}K2a(h);h=k[o>>2]|0;do if((Vf[k[k[h>>2]>>2]&1023](h)|0)==6){o=k[n>>2]|0;k[j>>2]=0;k[j+32>>2]=1;t=o+48|0;k[e>>2]=2;o=e+8|0;f=j;d=o+40|0;do{k[o>>2]=k[f>>2];o=o+4|0;f=f+4|0}while((o|0)<(d|0));f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;o=e+60|0;d=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,t|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;s=k[d>>2]|0;if(s)j0a(s);s=k[o>>2]|0;if(!s)Sc(f|0);j0a(s);Sc(f|0)}f=k[d>>2]|0;if(f)j0a(f);f=k[o>>2]|0;if(f)j0a(f);k[e>>2]=1;k[e+8>>2]=26;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;o=e+60|0;d=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,t|0,e|0)|0;f=x;x=0;if(!(f&1)){f=k[d>>2]|0;if(f)j0a(f);f=k[o>>2]|0;if(f)j0a(f);break}f=Hc()|0;s=k[d>>2]|0;if(s)j0a(s);s=k[o>>2]|0;if(!s)Sc(f|0);j0a(s);Sc(f|0)}while(0);j=k[n>>2]|0;k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;h=e+60|0;f=e+72|0;s=j+48|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,s|0,e|0)|0;n=x;x=0;if(n&1){n=Hc()|0;j=k[f>>2]|0;if(j)j0a(j);j=k[h>>2]|0;if(!j)Sc(n|0);j0a(j);Sc(n|0)}n=k[f>>2]|0;if(n)j0a(n);n=k[h>>2]|0;if(n)j0a(n);k[e>>2]=1;k[e+8>>2]=83;k[e+40>>2]=1;n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;h=e+60|0;f=e+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,s|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;s=k[f>>2]|0;if(s)j0a(s);s=k[h>>2]|0;if(!s)Sc(e|0);j0a(s);Sc(e|0)}else{e=k[f>>2]|0;if(e)j0a(e);e=k[h>>2]|0;if(e)j0a(e);r=c;return}}function Zia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+96|0;d=b;e=b+80|0;f=a+4|0;g=k[f>>2]|0;k[e>>2]=g;do if(!c){k[d>>2]=1;k[d+8>>2]=128;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;j=d+60|0;l=d+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,g+48|0,d|0)|0;h=x;x=0;if(!(h&1)){h=k[l>>2]|0;if(h)j0a(h);h=k[j>>2]|0;if(h)j0a(h);break}h=Hc()|0;m=k[l>>2]|0;if(m)j0a(m);m=k[j>>2]|0;if(!m)Sc(h|0);j0a(m);Sc(h|0)}while(0);g=a+8|0;wla(e,k[g>>2]|0);ola(e,k[g>>2]|0,(i[a+12>>0]|0)!=0);a=k[f>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;g=d+60|0;e=d+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,a+48|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;a=k[e>>2]|0;if(a)j0a(a);a=k[g>>2]|0;if(!a)Sc(d|0);j0a(a);Sc(d|0)}else{d=k[e>>2]|0;if(d)j0a(d);d=k[g>>2]|0;if(!d){r=b;return}j0a(d);r=b;return}}function _ia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+160|0;e=d+48|0;f=d;g=d+128|0;h=(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0;$ia(a,b,k[h>>2]|0);h=a+4|0;vma(f,k[h>>2]|0,c);c=(k[h>>2]|0)+48|0;k[e>>2]=2;h=e+8|0;a=f;b=h+40|0;do{k[h>>2]=k[a>>2];h=h+4|0;a=a+4|0}while((h|0)<(b|0));a=e+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=e+56|0;h=e+60|0;b=e+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,c|0,e|0)|0;a=x;x=0;if(a&1){a=Hc()|0;i=k[b>>2]|0;if(i)j0a(i);i=k[h>>2]|0;if(!i)Sc(a|0);j0a(i);Sc(a|0)}a=k[b>>2]|0;if(a)j0a(a);a=k[h>>2]|0;if(a)j0a(a);a=k[f+40>>2]|0;k[e>>2]=2;k[e+8>>2]=a;a=e+12|0;k[a>>2]=k[g>>2];k[a+4>>2]=k[g+4>>2];k[a+8>>2]=k[g+8>>2];k[a+12>>2]=k[g+12>>2];k[a+16>>2]=k[g+16>>2];k[a+20>>2]=k[g+20>>2];k[a+24>>2]=k[g+24>>2];k[e+40>>2]=1;g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;a=e+60|0;f=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,c|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;c=k[f>>2]|0;if(c)j0a(c);c=k[a>>2]|0;if(!c)Sc(e|0);j0a(c);Sc(e|0)}else{e=k[f>>2]|0;if(e)j0a(e);e=k[a>>2]|0;if(!e){r=d;return}j0a(e);r=d;return}}function $ia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+112|0;e=d+40|0;f=d+92|0;g=d;h=d+80|0;k[a+4>>2]=b;b=a+8|0;k[b>>2]=c;k[a>>2]=40784;if(!(Vf[k[(k[c>>2]|0)+56>>2]&1023](c)|0)){r=d;return}c=k[b>>2]|0;Tf[k[(k[c>>2]|0)+40>>2]&2047](e,c);c=k[b>>2]|0;a=Vf[k[(k[c>>2]|0)+60>>2]&1023](c)|0;c=(k[e+32>>2]|0)==1?(k[e>>2]|0)==(a|0):0;q2a(f,329672,0);x=0;pa(57,c|0,f|0,156,259819,260207);c=x;x=0;if(c&1){c=Hc()|0;a=M;K2a(f);i=a;j=c;Sc(j|0)}K2a(f);f=k[b>>2]|0;Tf[k[(k[f>>2]|0)+40>>2]&2047](g,f);f=(k[g>>2]|0)==1?(k[g+32>>2]|0)==1:0;q2a(h,260310,21);x=0;pa(57,f|0,h|0,157,259819,260207);f=x;x=0;if(f&1){f=Hc()|0;g=M;K2a(h);i=g;j=f;Sc(j|0)}else{K2a(h);r=d;return}}function aja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+416|0;d=b+280|0;e=b+240|0;f=b+404|0;g=b+400|0;h=b+200|0;i=b+388|0;j=b+160|0;l=b+120|0;m=b+360|0;n=b+80|0;o=b+40|0;p=b;q=a+8|0;s=k[q>>2]|0;if(!(Vf[k[(k[s>>2]|0)+56>>2]&1023](s)|0)){s=k[q>>2]|0;t=(Vf[k[(k[s>>2]|0)+60>>2]&1023](s)|0)==1;q2a(f,260332,25);x=0;pa(57,t|0,f|0,166,259819,260358);t=x;x=0;if(t&1){t=Hc()|0;s=M;K2a(f);u=s;v=t;Sc(v|0)}K2a(f);f=k[a+4>>2]|0;if(c){k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;t=d+48|0;k[t>>2]=-1;k[t+4>>2]=-1;t=d+56|0;s=d+60|0;w=d+72|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;x=0;Ta(539,f+48|0,d|0)|0;t=x;x=0;if(t&1){t=Hc()|0;y=k[w>>2]|0;if(y)j0a(y);y=k[s>>2]|0;if(!y)Sc(t|0);j0a(y);Sc(t|0)}else{t=k[w>>2]|0;if(t)j0a(t);t=k[s>>2]|0;if(t)j0a(t);r=b;return}}else{k[d>>2]=1;k[d+8>>2]=129;k[d+40>>2]=1;t=d+48|0;k[t>>2]=-1;k[t+4>>2]=-1;t=d+56|0;s=d+60|0;w=d+72|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;x=0;Ta(539,f+48|0,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;t=k[w>>2]|0;if(t)j0a(t);t=k[s>>2]|0;if(!t)Sc(f|0);j0a(t);Sc(f|0)}else{f=k[w>>2]|0;if(f)j0a(f);f=k[s>>2]|0;if(f)j0a(f);r=b;return}}}f=a+4|0;if(!c){k[g>>2]=k[f>>2];c=Vf[k[k[a>>2]>>2]&1023](a)|0;sla(g,c,Vf[k[k[a>>2]>>2]&1023](a)|0)}a=k[q>>2]|0;c=(Vf[k[(k[a>>2]|0)+44>>2]&1023](a)|0)==32;a=k[f>>2]|0;if(c){k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;c=d+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=d+56|0;g=d+60|0;s=d+72|0;w=a+48|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,w|0,d|0)|0;c=x;x=0;if(c&1){c=Hc()|0;t=k[s>>2]|0;if(t)j0a(t);t=k[g>>2]|0;if(!t)Sc(c|0);j0a(t);Sc(c|0)}c=k[s>>2]|0;if(c)j0a(c);c=k[g>>2]|0;if(c)j0a(c);k[d>>2]=1;k[d+8>>2]=84;k[d+40>>2]=1;c=d+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=d+56|0;g=d+60|0;s=d+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,w|0,d|0)|0;w=x;x=0;if(w&1){w=Hc()|0;c=k[s>>2]|0;if(c)j0a(c);c=k[g>>2]|0;if(!c)Sc(w|0);j0a(c);Sc(w|0)}else{w=k[s>>2]|0;if(w)j0a(w);w=k[g>>2]|0;if(w)j0a(w);r=b;return}}k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;w=d+48|0;k[w>>2]=-1;k[w+4>>2]=-1;w=d+56|0;g=d+60|0;s=d+72|0;c=a+48|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;w=x;x=0;if(w&1){w=Hc()|0;a=k[s>>2]|0;if(a)j0a(a);a=k[g>>2]|0;if(!a)Sc(w|0);j0a(a);Sc(w|0)}w=k[s>>2]|0;if(w)j0a(w);w=k[g>>2]|0;if(w)j0a(w);k[d>>2]=1;k[d+8>>2]=84;k[d+40>>2]=1;w=d+48|0;k[w>>2]=-1;k[w+4>>2]=-1;w=d+56|0;g=d+60|0;s=d+72|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;w=x;x=0;if(w&1){w=Hc()|0;a=k[s>>2]|0;if(a)j0a(a);a=k[g>>2]|0;if(!a)Sc(w|0);j0a(a);Sc(w|0)}w=k[s>>2]|0;if(w)j0a(w);w=k[g>>2]|0;if(w)j0a(w);k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;w=d+48|0;k[w>>2]=-1;k[w+4>>2]=-1;w=d+56|0;g=d+60|0;s=d+72|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;w=x;x=0;if(w&1){w=Hc()|0;a=k[s>>2]|0;if(a)j0a(a);a=k[g>>2]|0;if(!a)Sc(w|0);j0a(a);Sc(w|0)}w=k[s>>2]|0;if(w)j0a(w);w=k[g>>2]|0;if(w)j0a(w);k[h>>2]=256;k[h+32>>2]=1;k[d>>2]=2;w=d+8|0;g=h;h=w+40|0;do{k[w>>2]=k[g>>2];w=w+4|0;g=g+4|0}while((w|0)<(h|0));s=d+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=d+56|0;a=d+60|0;t=d+72|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;s=x;x=0;if(s&1){s=Hc()|0;y=k[t>>2]|0;if(y)j0a(y);y=k[a>>2]|0;if(!y)Sc(s|0);j0a(y);Sc(s|0)}s=k[t>>2]|0;if(s)j0a(s);s=k[a>>2]|0;if(s)j0a(s);k[d>>2]=1;k[d+8>>2]=10;k[d+40>>2]=1;s=d+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=d+56|0;a=d+60|0;t=d+72|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;s=x;x=0;if(s&1){s=Hc()|0;y=k[t>>2]|0;if(y)j0a(y);y=k[a>>2]|0;if(!y)Sc(s|0);j0a(y);Sc(s|0)}s=k[t>>2]|0;if(s)j0a(s);s=k[a>>2]|0;if(s)j0a(s);k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;s=d+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=d+56|0;a=d+60|0;t=d+72|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;s=x;x=0;if(s&1){s=Hc()|0;y=k[t>>2]|0;if(y)j0a(y);y=k[a>>2]|0;if(!y)Sc(s|0);j0a(y);Sc(s|0)}s=k[t>>2]|0;if(s)j0a(s);s=k[a>>2]|0;if(s)j0a(s);k[d>>2]=1;k[d+8>>2]=4;k[d+40>>2]=1;s=d+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=d+56|0;a=d+60|0;t=d+72|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;c=x;x=0;if(c&1){c=Hc()|0;s=k[t>>2]|0;if(s)j0a(s);s=k[a>>2]|0;if(!s)Sc(c|0);j0a(s);Sc(c|0)}c=k[t>>2]|0;if(c)j0a(c);c=k[a>>2]|0;if(c)j0a(c);c=k[q>>2]|0;do if((Vf[k[k[c>>2]>>2]&1023](c)|0)==4){q2a(i,273480,37);x=0;pa(57,0,i|0,184,259819,260358);a=x;x=0;if(!(a&1)){K2a(i);break}a=Hc()|0;t=M;K2a(i);u=t;v=a;Sc(v|0)}while(0);v=k[q>>2]|0;if((Vf[k[k[v>>2]>>2]&1023](v)|0)==6){v=k[f>>2]|0;k[l>>2]=1;k[l+32>>2]=1;u=k[q>>2]|0;i=256-((Vf[k[(k[u>>2]|0)+44>>2]&1023](u)|0)<<3)|0;w=d;g=l;h=w+40|0;do{k[w>>2]=k[g>>2];w=w+4|0;g=g+4|0}while((w|0)<(h|0));HB(d,i,0);w=j;g=d;h=w+40|0;do{k[w>>2]=k[g>>2];w=w+4|0;g=g+4|0}while((w|0)<(h|0));i=v+48|0;k[d>>2]=2;w=d+8|0;g=j;h=w+40|0;do{k[w>>2]=k[g>>2];w=w+4|0;g=g+4|0}while((w|0)<(h|0));j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;v=d+60|0;l=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,i|0,d|0)|0;j=x;x=0;if(j&1){j=Hc()|0;u=k[l>>2]|0;if(u)j0a(u);u=k[v>>2]|0;if(!u)Sc(j|0);j0a(u);Sc(j|0)}j=k[l>>2]|0;if(j)j0a(j);j=k[v>>2]|0;if(j)j0a(j);k[d>>2]=1;k[d+8>>2]=2;k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;v=d+60|0;l=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,i|0,d|0)|0;i=x;x=0;if(i&1){i=Hc()|0;j=k[l>>2]|0;if(j)j0a(j);j=k[v>>2]|0;if(!j)Sc(i|0);j0a(j);Sc(i|0)}else{i=k[l>>2]|0;if(i)j0a(i);i=k[v>>2]|0;if(i)j0a(i);r=b;return}}i=k[q>>2]|0;do if(!(Vf[k[k[i>>2]>>2]&1023](i)|0)){v=k[q>>2]|0;l=iDa(v,168,6592,0)|0;if(!l)BBa();if((k[l+28>>2]|0)!=1){z=v;break}l=k[f>>2]|0;j=(Vf[k[(k[v>>2]|0)+44>>2]&1023](v)|0)+-1|0;v=l+48|0;k[d>>2]=2;k[d+8>>2]=j;j=d+12|0;k[j>>2]=k[m>>2];k[j+4>>2]=k[m+4>>2];k[j+8>>2]=k[m+8>>2];k[j+12>>2]=k[m+12>>2];k[j+16>>2]=k[m+16>>2];k[j+20>>2]=k[m+20>>2];k[j+24>>2]=k[m+24>>2];k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;l=d+60|0;u=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,v|0,d|0)|0;j=x;x=0;if(j&1){j=Hc()|0;c=k[u>>2]|0;if(c)j0a(c);c=k[l>>2]|0;if(!c)Sc(j|0);j0a(c);Sc(j|0)}j=k[u>>2]|0;if(j)j0a(j);j=k[l>>2]|0;if(j)j0a(j);k[d>>2]=1;k[d+8>>2]=11;k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;l=d+60|0;u=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,v|0,d|0)|0;v=x;x=0;if(v&1){v=Hc()|0;j=k[u>>2]|0;if(j)j0a(j);j=k[l>>2]|0;if(!j)Sc(v|0);j0a(j);Sc(v|0)}else{v=k[u>>2]|0;if(v)j0a(v);v=k[l>>2]|0;if(v)j0a(v);r=b;return}}else z=k[q>>2]|0;while(0);q=k[f>>2]|0;k[p>>2]=1;k[p+32>>2]=1;f=(Vf[k[(k[z>>2]|0)+44>>2]&1023](z)|0)<<3;w=d;g=p;h=w+40|0;do{k[w>>2]=k[g>>2];w=w+4|0;g=g+4|0}while((w|0)<(h|0));HB(d,f,0);w=o;g=d;h=w+40|0;do{k[w>>2]=k[g>>2];w=w+4|0;g=g+4|0}while((w|0)<(h|0));k[e>>2]=0;k[e+32>>2]=1;k[d>>2]=1;JB(e,o,d);w=n;g=e;h=w+40|0;do{k[w>>2]=k[g>>2];w=w+4|0;g=g+4|0}while((w|0)<(h|0));e=q+48|0;k[d>>2]=2;w=d+8|0;g=n;h=w+40|0;do{k[w>>2]=k[g>>2];w=w+4|0;g=g+4|0}while((w|0)<(h|0));g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;w=d+60|0;h=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,e|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;n=k[h>>2]|0;if(n)j0a(n);n=k[w>>2]|0;if(!n)Sc(g|0);j0a(n);Sc(g|0)}g=k[h>>2]|0;if(g)j0a(g);g=k[w>>2]|0;if(g)j0a(g);k[d>>2]=1;k[d+8>>2]=22;k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;w=d+60|0;h=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,e|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;e=k[h>>2]|0;if(e)j0a(e);e=k[w>>2]|0;if(!e)Sc(d|0);j0a(e);Sc(d|0)}else{d=k[h>>2]|0;if(d)j0a(d);d=k[w>>2]|0;if(d)j0a(d);r=b;return}}function bja(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0;e=r;r=r+1488|0;f=e+1080|0;g=e+1e3|0;h=e+920|0;j=e+1472|0;l=e+840|0;m=e+760|0;n=e+680|0;o=e+600|0;p=e+520|0;q=e+440|0;s=e+360|0;t=e+1176|0;u=e+1460|0;v=e+1448|0;w=e+320|0;y=e+280|0;z=e+240|0;A=e+200|0;B=e+160|0;C=e+120|0;D=e+80|0;E=e+40|0;F=e+1436|0;G=e+1424|0;H=e+1420|0;I=e+1408|0;J=e+1396|0;K=e+1168|0;L=e+1368|0;N=e+1356|0;O=e+1344|0;P=e+1160|0;Q=e;R=e+1328|0;S=e+1296|0;T=e+1284|0;U=e+1272|0;V=e+1232|0;W=e+1208|0;X=e+1192|0;Y=e+1180|0;Z=a+4|0;k[t>>2]=k[Z>>2];_=a+8|0;a=k[_>>2]|0;if(!(Vf[k[(k[a>>2]|0)+56>>2]&1023](a)|0)){a=Vf[k[k[b>>2]>>2]&1023](b)|0;$=k[_>>2]|0;aa=(a|0)==(Vf[k[k[$>>2]>>2]&1023]($)|0);q2a(G,260604,39);x=0;pa(57,aa|0,G|0,259,259819,260482);aa=x;x=0;if(aa&1){aa=Hc()|0;$=M;K2a(G);ba=aa;ca=$;Sc(ba|0)}K2a(G);G=k[_>>2]|0;if((Vf[k[k[G>>2]>>2]&1023](G)|0)==5){G=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;$=f+48|0;k[$>>2]=-1;k[$+4>>2]=-1;$=f+56|0;aa=f+60|0;a=f+72|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[$+16>>2]=0;x=0;Ta(539,G+48|0,f|0)|0;G=x;x=0;if(G&1){G=Hc()|0;$=k[a>>2]|0;if($)j0a($);$=k[aa>>2]|0;if(!$)Sc(G|0);j0a($);Sc(G|0)}G=k[a>>2]|0;if(G)j0a(G);G=k[aa>>2]|0;if(G)j0a(G);k[H>>2]=k[Z>>2];G=iDa(k[_>>2]|0,168,6704,0)|0;if(!G)BBa();aa=iDa(b,168,6704,0)|0;if(!aa)BBa();xia(H,G,aa);if(!d){r=e;return}aa=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;G=f+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=f+56|0;H=f+60|0;a=f+72|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;x=0;Ta(539,aa+48|0,f|0)|0;aa=x;x=0;if(aa&1){aa=Hc()|0;G=k[a>>2]|0;if(G)j0a(G);G=k[H>>2]|0;if(!G)Sc(aa|0);j0a(G);Sc(aa|0)}else{aa=k[a>>2]|0;if(aa)j0a(aa);aa=k[H>>2]|0;if(aa)j0a(aa);r=e;return}}aa=k[_>>2]|0;if((Vf[k[k[aa>>2]>>2]&1023](aa)|0)!=8){da=V;ea=da+36|0;do{k[da>>2]=0;da=da+4|0}while((da|0)<(ea|0));aa=V+20|0;H=V+24|0;k[H>>2]=0;k[V+28>>2]=0;k[V+32>>2]=0;k[V+36>>2]=-1;a=V+4|0;G=a+-4|0;$=a+16|0;fa=V+8|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);k[V+4>>2]=20924;k[V>>2]=20888;k[aa>>2]=20948;k[W>>2]=31456;ga=c;ha=k[ga+4>>2]|0;ia=W+4|0;k[ia>>2]=k[ga>>2];k[ia+4>>2]=ha;k[W+12>>2]=k[c+8>>2];ha=k[c+12>>2]|0;k[W+16>>2]=ha;ia=(ha|0)==0;if(!ia)h0a(ha);x=0;ga=Ta(598,V|0,W|0)|0;V=x;x=0;if(!(V&1)?(x=0,fb(140,Y|0,260738,38),V=x,x=0,!(V&1)):0){k[X>>2]=21048;V=X+4|0;x=0;xa(604,V|0,Y|0);ja=x;x=0;if(ja&1){ja=Hc()|0;ka=ja;la=M}else{x=0;ja=Ta(494,ga|0,X|0)|0;ga=x;x=0;if(!(ga&1)){x=0;nb(87,ja|0,260482,259819,327);x=0}ja=Hc()|0;ga=M;k[X>>2]=21048;K2a(V);ka=ja;la=ga}K2a(Y);ma=ka;na=la}else{la=Hc()|0;ma=la;na=M}k[W>>2]=31456;if(!ia)j0a(ha);k[a>>2]=20980;k[G>>2]=21008;k[$>>2]=21032;K2a(fa);k[aa>>2]=20796;aa=k[H>>2]|0;if(aa){x=0;fa=Ba(k[(k[aa>>2]|0)+16>>2]|0,aa|0)|0;aa=x;x=0;if(aa&1){aa=Hc(0)|0;Fg(aa)}if(fa)k[H>>2]=0}ba=ma;ca=na;Sc(ba|0)}na=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;ma=f+48|0;k[ma>>2]=-1;k[ma+4>>2]=-1;ma=f+56|0;H=f+60|0;fa=f+72|0;k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;k[ma+12>>2]=0;k[ma+16>>2]=0;x=0;Ta(539,na+48|0,f|0)|0;na=x;x=0;if(na&1){na=Hc()|0;ma=k[fa>>2]|0;if(ma)j0a(ma);ma=k[H>>2]|0;if(!ma)Sc(na|0);j0a(ma);Sc(na|0)}na=k[fa>>2]|0;if(na)j0a(na);na=k[H>>2]|0;if(na)j0a(na);na=iDa(k[_>>2]|0,168,6720,0)|0;if(!na)BBa();H=iDa(b,168,6720,0)|0;if(!H)BBa();b=(k[na+32>>2]|0)==(k[H+32>>2]|0);q2a(I,260644,34);x=0;pa(57,b|0,I|0,280,259819,260482);b=x;x=0;if(b&1){b=Hc()|0;fa=M;K2a(I);ba=b;ca=fa;Sc(ba|0)}K2a(I);I=H+24|0;fa=(k[I>>2]|0)!=1;q2a(J,260679,34);x=0;pa(57,fa|0,J|0,281,259819,260482);fa=x;x=0;if(fa&1){fa=Hc()|0;b=M;K2a(J);ba=fa;ca=b;Sc(ba|0)}K2a(J);J=j8(na,0)|0;b=k[J>>2]|0;fa=k[J+4>>2]|0;a:do if((b|0)==(fa|0))oa=H;else{J=s+8|0;ma=s+48|0;aa=s+56|0;$=s+60|0;G=s+72|0;a=q+8|0;ha=q+40|0;ia=q+48|0;W=q+56|0;la=q+60|0;ka=q+72|0;Y=p+8|0;ga=p+40|0;ja=p+48|0;V=p+56|0;X=p+60|0;qa=p+72|0;ra=o+8|0;sa=o+12|0;ta=o+40|0;ua=o+48|0;va=o+56|0;wa=o+60|0;ya=o+72|0;za=h+8|0;Aa=h+48|0;Ca=h+56|0;Da=h+60|0;Ea=h+72|0;Fa=g+8|0;Ga=g+40|0;Ha=g+48|0;Ia=g+56|0;Ja=g+60|0;Ka=g+72|0;La=f+8|0;Ma=f+12|0;Na=f+40|0;Oa=f+48|0;Pa=f+56|0;Qa=f+60|0;Ra=f+72|0;Sa=K+4|0;Ua=n+8|0;Va=n+48|0;Wa=n+56|0;Xa=n+60|0;Ya=n+72|0;Za=m+8|0;_a=m+40|0;$a=m+48|0;ab=m+56|0;bb=m+60|0;cb=m+72|0;db=l+8|0;eb=l+40|0;gb=l+48|0;hb=l+56|0;ib=l+60|0;jb=l+72|0;kb=R+4|0;lb=R+8|0;mb=R+12|0;ob=P+4|0;pb=b;while(1){qb=pb+12|0;rb=k[qb>>2]|0;if((Vf[k[k[rb>>2]>>2]&1023](rb)|0)!=12){uja(K,j8(H,0)|0,pb);rb=k[I>>2]|0;x=0;if(!rb){sb=N9(H,pb)|0;tb=x;x=0;if(tb&1){ub=401;break}tb=(k[Z>>2]|0)+48|0;k[s>>2]=2;da=J;vb=sb;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));wb=ma;k[wb>>2]=-1;k[wb+4>>2]=-1;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[aa+16>>2]=0;x=0;Ta(539,tb|0,s|0)|0;wb=x;x=0;if(wb&1){ub=368;break}wb=k[G>>2]|0;if(wb)j0a(wb);wb=k[$>>2]|0;if(wb)j0a(wb);k[q>>2]=1;k[a>>2]=130;k[ha>>2]=1;wb=ia;k[wb>>2]=-1;k[wb+4>>2]=-1;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[W+16>>2]=0;x=0;Ta(539,tb|0,q|0)|0;wb=x;x=0;if(wb&1){ub=377;break}wb=k[ka>>2]|0;if(wb)j0a(wb);wb=k[la>>2]|0;if(wb)j0a(wb);k[p>>2]=1;k[Y>>2]=1;k[ga>>2]=1;wb=ja;k[wb>>2]=-1;k[wb+4>>2]=-1;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[V+16>>2]=0;x=0;Ta(539,tb|0,p|0)|0;wb=x;x=0;if(wb&1){ub=386;break}wb=k[qa>>2]|0;if(wb)j0a(wb);wb=k[X>>2]|0;if(wb)j0a(wb);wb=k[sb+40>>2]|0;xb=(k[Z>>2]|0)+48|0;k[o>>2]=2;k[ra>>2]=wb;k[sa>>2]=k[L>>2];k[sa+4>>2]=k[L+4>>2];k[sa+8>>2]=k[L+8>>2];k[sa+12>>2]=k[L+12>>2];k[sa+16>>2]=k[L+16>>2];k[sa+20>>2]=k[L+20>>2];k[sa+24>>2]=k[L+24>>2];k[ta>>2]=1;wb=ua;k[wb>>2]=-1;k[wb+4>>2]=-1;k[va>>2]=0;k[va+4>>2]=0;k[va+8>>2]=0;k[va+12>>2]=0;k[va+16>>2]=0;x=0;Ta(539,xb|0,o|0)|0;xb=x;x=0;if(xb&1){ub=395;break}xb=k[ya>>2]|0;if(xb)j0a(xb);xb=k[wa>>2]|0;if(xb)j0a(xb);xb=k[K>>2]|0;x=0;fb(317,N|0,k[Z>>2]|0,xb|0);wb=x;x=0;if(wb&1){ub=401;break}x=0;fb(122,N|0,0,1);wb=x;x=0;if(wb&1){ub=401;break}else yb=xb}else{q2a(O,329672,0);xb=x;x=0;if(xb&1){ub=401;break}x=0;pa(57,(rb|0)==2|0,O|0,301,259819,260482);xb=x;x=0;if(xb&1){ub=439;break}K2a(O);x=0;xb=Ta(572,H|0,0)|0;wb=x;x=0;if(wb&1){ub=401;break}x=0;fb(321,P|0,xb|0,pb|0);xb=x;x=0;if(xb&1){ub=401;break}xb=k[Z>>2]|0;x=0;fb(322,Q|0,H|0,pb|0);wb=x;x=0;if(wb&1){ub=440;break}wb=xb+48|0;k[n>>2]=2;da=Ua;vb=Q;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));rb=Va;k[rb>>2]=-1;k[rb+4>>2]=-1;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[Wa+16>>2]=0;x=0;Ta(539,wb|0,n|0)|0;rb=x;x=0;if(rb&1){ub=413;break}rb=k[Ya>>2]|0;if(rb)j0a(rb);rb=k[Xa>>2]|0;if(rb)j0a(rb);rb=k[Z>>2]|0;k[m>>2]=1;k[Za>>2]=130;k[_a>>2]=1;sb=$a;k[sb>>2]=-1;k[sb+4>>2]=-1;sb=rb+48|0;k[ab>>2]=0;k[ab+4>>2]=0;k[ab+8>>2]=0;k[ab+12>>2]=0;k[ab+16>>2]=0;x=0;Ta(539,sb|0,m|0)|0;rb=x;x=0;if(rb&1){ub=422;break}rb=k[cb>>2]|0;if(rb)j0a(rb);rb=k[bb>>2]|0;if(rb)j0a(rb);k[l>>2]=1;k[db>>2]=1;k[eb>>2]=1;rb=gb;k[rb>>2]=-1;k[rb+4>>2]=-1;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;k[hb+16>>2]=0;x=0;Ta(539,sb|0,l|0)|0;sb=x;x=0;if(sb&1){ub=431;break}sb=k[jb>>2]|0;if(sb)j0a(sb);sb=k[ib>>2]|0;if(sb)j0a(sb);sb=k[P>>2]|0;k[kb>>2]=k[Z>>2];k[lb>>2]=sb;k[R>>2]=40760;i[mb>>0]=1;x=0;fb(120,R|0,0,1);sb=x;x=0;if(sb&1){ub=440;break}sb=k[ob>>2]|0;if(sb)j0a(sb);yb=k[K>>2]|0}x=0;sb=Ba(k[(k[yb>>2]|0)+60>>2]|0,yb|0)|0;rb=x;x=0;if(rb&1){ub=401;break}x=0;rb=Ta(597,na|0,pb|0)|0;tb=x;x=0;if(tb&1){ub=401;break}tb=k[Z>>2]|0;x=0;fb(140,j|0,295946,34);xb=x;x=0;if(xb&1){ub=401;break}x=0;pa(51,sb>>>0<16|0,j|0,210,295981,296025);xb=x;x=0;if(xb&1){ub=447;break}K2a(j);x=0;xb=Ta(594,tb|0,sb+128&255|0)|0;sb=x;x=0;if(sb&1){ub=401;break}sb=xb+48|0;k[h>>2]=2;da=za;vb=rb;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));wb=Aa;k[wb>>2]=-1;k[wb+4>>2]=-1;k[Ca>>2]=0;k[Ca+4>>2]=0;k[Ca+8>>2]=0;k[Ca+12>>2]=0;k[Ca+16>>2]=0;x=0;Ta(539,sb|0,h|0)|0;wb=x;x=0;if(wb&1){ub=454;break}wb=k[Ea>>2]|0;if(wb)j0a(wb);wb=k[Da>>2]|0;if(wb)j0a(wb);k[g>>2]=1;k[Fa>>2]=1;k[Ga>>2]=1;wb=Ha;k[wb>>2]=-1;k[wb+4>>2]=-1;k[Ia>>2]=0;k[Ia+4>>2]=0;k[Ia+8>>2]=0;k[Ia+12>>2]=0;k[Ia+16>>2]=0;x=0;Ta(539,sb|0,g|0)|0;wb=x;x=0;if(wb&1){ub=463;break}wb=k[Ka>>2]|0;if(wb)j0a(wb);wb=k[Ja>>2]|0;if(wb)j0a(wb);wb=k[rb+40>>2]|0;xb=(k[Z>>2]|0)+48|0;k[f>>2]=2;k[La>>2]=wb;k[Ma>>2]=k[S>>2];k[Ma+4>>2]=k[S+4>>2];k[Ma+8>>2]=k[S+8>>2];k[Ma+12>>2]=k[S+12>>2];k[Ma+16>>2]=k[S+16>>2];k[Ma+20>>2]=k[S+20>>2];k[Ma+24>>2]=k[S+24>>2];k[Na>>2]=1;wb=Oa;k[wb>>2]=-1;k[wb+4>>2]=-1;k[Pa>>2]=0;k[Pa+4>>2]=0;k[Pa+8>>2]=0;k[Pa+12>>2]=0;k[Pa+16>>2]=0;x=0;Ta(539,xb|0,f|0)|0;xb=x;x=0;if(xb&1){ub=472;break}xb=k[Ra>>2]|0;if(xb)j0a(xb);xb=k[Qa>>2]|0;if(xb)j0a(xb);x=0;fb(317,T|0,k[Z>>2]|0,k[qb>>2]|0);xb=x;x=0;if(xb&1){ub=401;break}x=0;nb(66,T|0,yb|0,c|0,1);xb=x;x=0;if(xb&1){ub=401;break}xb=k[Sa>>2]|0;if(xb)j0a(xb)}pb=pb+24|0;if((pb|0)==(fa|0)){oa=H;break a}}switch(ub|0){case 368:{pb=Hc()|0;Pa=M;Oa=k[G>>2]|0;if(Oa)j0a(Oa);Oa=k[$>>2]|0;if(!Oa){zb=Pa;Ab=pb;ub=402}else{j0a(Oa);zb=Pa;Ab=pb;ub=402}break}case 377:{pb=Hc()|0;Pa=M;Oa=k[ka>>2]|0;if(Oa)j0a(Oa);Oa=k[la>>2]|0;if(!Oa){zb=Pa;Ab=pb;ub=402}else{j0a(Oa);zb=Pa;Ab=pb;ub=402}break}case 386:{pb=Hc()|0;Pa=M;Oa=k[qa>>2]|0;if(Oa)j0a(Oa);Oa=k[X>>2]|0;if(!Oa){zb=Pa;Ab=pb;ub=402}else{j0a(Oa);zb=Pa;Ab=pb;ub=402}break}case 395:{pb=Hc()|0;Pa=M;Oa=k[ya>>2]|0;if(Oa)j0a(Oa);Oa=k[wa>>2]|0;if(!Oa){zb=Pa;Ab=pb;ub=402}else{j0a(Oa);zb=Pa;Ab=pb;ub=402}break}case 401:{pb=Hc()|0;zb=M;Ab=pb;ub=402;break}case 413:{pb=Hc()|0;Pa=M;Oa=k[Ya>>2]|0;if(Oa)j0a(Oa);Oa=k[Xa>>2]|0;if(!Oa){Bb=Pa;Cb=pb;ub=441}else{j0a(Oa);Bb=Pa;Cb=pb;ub=441}break}case 422:{pb=Hc()|0;Pa=M;Oa=k[cb>>2]|0;if(Oa)j0a(Oa);Oa=k[bb>>2]|0;if(!Oa){Bb=Pa;Cb=pb;ub=441}else{j0a(Oa);Bb=Pa;Cb=pb;ub=441}break}case 431:{pb=Hc()|0;Pa=M;Oa=k[jb>>2]|0;if(Oa)j0a(Oa);Oa=k[ib>>2]|0;if(!Oa){Bb=Pa;Cb=pb;ub=441}else{j0a(Oa);Bb=Pa;Cb=pb;ub=441}break}case 439:{pb=Hc()|0;Pa=M;K2a(O);Db=pb;Eb=Pa;break}case 440:{Pa=Hc()|0;Bb=M;Cb=Pa;ub=441;break}case 447:{Pa=Hc()|0;pb=M;K2a(j);zb=pb;Ab=Pa;ub=402;break}case 454:{Pa=Hc()|0;pb=M;Oa=k[Ea>>2]|0;if(Oa)j0a(Oa);Oa=k[Da>>2]|0;if(!Oa){zb=pb;Ab=Pa;ub=402}else{j0a(Oa);zb=pb;Ab=Pa;ub=402}break}case 463:{Pa=Hc()|0;pb=M;Oa=k[Ka>>2]|0;if(Oa)j0a(Oa);Oa=k[Ja>>2]|0;if(!Oa){zb=pb;Ab=Pa;ub=402}else{j0a(Oa);zb=pb;Ab=Pa;ub=402}break}case 472:{Pa=Hc()|0;pb=M;Oa=k[Ra>>2]|0;if(Oa)j0a(Oa);Oa=k[Qa>>2]|0;if(!Oa){zb=pb;Ab=Pa;ub=402}else{j0a(Oa);zb=pb;Ab=Pa;ub=402}break}}if((ub|0)==402){Db=Ab;Eb=zb}else if((ub|0)==441){Pa=k[ob>>2]|0;if(!Pa){Db=Cb;Eb=Bb}else{j0a(Pa);Db=Cb;Eb=Bb}}Pa=k[Sa>>2]|0;if(!Pa){ba=Db;ca=Eb;Sc(ba|0)}j0a(Pa);ba=Db;ca=Eb;Sc(ba|0)}while(0);Eb=(Vf[k[(k[H>>2]|0)+60>>2]&1023](oa)|0)==1;q2a(U,260714,23);x=0;pa(57,Eb|0,U|0,317,259819,260482);Eb=x;x=0;if(Eb&1){Eb=Hc()|0;oa=M;K2a(U);ba=Eb;ca=oa;Sc(ba|0)}K2a(U);if(d){ula(t,2);r=e;return}t=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;U=f+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=f+56|0;oa=f+60|0;Eb=f+72|0;H=t+48|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,H|0,f|0)|0;U=x;x=0;if(U&1){U=Hc()|0;t=k[Eb>>2]|0;if(t)j0a(t);t=k[oa>>2]|0;if(!t)Sc(U|0);j0a(t);Sc(U|0)}U=k[Eb>>2]|0;if(U)j0a(U);U=k[oa>>2]|0;if(U)j0a(U);k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;U=f+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=f+56|0;oa=f+60|0;Eb=f+72|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,H|0,f|0)|0;H=x;x=0;if(H&1){H=Hc()|0;U=k[Eb>>2]|0;if(U)j0a(U);U=k[oa>>2]|0;if(!U)Sc(H|0);j0a(U);Sc(H|0)}else{H=k[Eb>>2]|0;if(H)j0a(H);H=k[oa>>2]|0;if(H)j0a(H);r=e;return}}H=k[_>>2]|0;oa=(Vf[k[(k[H>>2]|0)+44>>2]&1023](H)|0)>>>0<33;q2a(u,260454,27);x=0;pa(57,oa|0,u|0,203,259819,260482);oa=x;x=0;if(oa&1){oa=Hc()|0;H=M;K2a(u);ba=oa;ca=H;Sc(ba|0)}K2a(u);u=k[_>>2]|0;H=(Vf[k[(k[u>>2]|0)+44>>2]&1023](u)|0)!=0;q2a(v,260454,27);x=0;pa(57,H|0,v|0,204,259819,260482);H=x;x=0;if(H&1){H=Hc()|0;u=M;K2a(v);ba=H;ca=u;Sc(ba|0)}K2a(v);v=k[_>>2]|0;u=(Vf[k[(k[v>>2]|0)+44>>2]&1023](v)|0)==32;v=k[Z>>2]|0;if(u){k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;u=f+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=f+56|0;H=f+60|0;oa=f+72|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,v+48|0,f|0)|0;u=x;x=0;if(u&1){u=Hc()|0;Eb=k[oa>>2]|0;if(Eb)j0a(Eb);Eb=k[H>>2]|0;if(!Eb)Sc(u|0);j0a(Eb);Sc(u|0)}u=k[oa>>2]|0;if(u)j0a(u);u=k[H>>2]|0;if(u)j0a(u);do if(!d){u=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=129;k[f+40>>2]=1;H=f+48|0;k[H>>2]=-1;k[H+4>>2]=-1;H=f+56|0;oa=f+60|0;Eb=f+72|0;U=u+48|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[H+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;H=x;x=0;if(H&1){H=Hc()|0;u=k[Eb>>2]|0;if(u)j0a(u);u=k[oa>>2]|0;if(!u)Sc(H|0);j0a(u);Sc(H|0)}H=k[Eb>>2]|0;if(H)j0a(H);H=k[oa>>2]|0;if(H)j0a(H);k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;H=f+48|0;k[H>>2]=-1;k[H+4>>2]=-1;H=f+56|0;oa=f+60|0;Eb=f+72|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[H+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;U=x;x=0;if(!(U&1)){U=k[Eb>>2]|0;if(U)j0a(U);U=k[oa>>2]|0;if(U)j0a(U);break}U=Hc()|0;H=k[Eb>>2]|0;if(H)j0a(H);H=k[oa>>2]|0;if(!H)Sc(U|0);j0a(H);Sc(U|0)}while(0);U=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=85;k[f+40>>2]=1;H=f+48|0;k[H>>2]=-1;k[H+4>>2]=-1;H=f+56|0;oa=f+60|0;Eb=f+72|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[H+16>>2]=0;x=0;Ta(539,U+48|0,f|0)|0;U=x;x=0;if(U&1){U=Hc()|0;H=k[Eb>>2]|0;if(H)j0a(H);H=k[oa>>2]|0;if(!H)Sc(U|0);j0a(H);Sc(U|0)}else{U=k[Eb>>2]|0;if(U)j0a(U);U=k[oa>>2]|0;if(U)j0a(U);r=e;return}}k[w>>2]=256;k[w+32>>2]=1;U=v+48|0;k[f>>2]=2;da=f+8|0;vb=w;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));w=f+48|0;k[w>>2]=-1;k[w+4>>2]=-1;w=f+56|0;v=f+60|0;oa=f+72|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;w=x;x=0;if(w&1){w=Hc()|0;Eb=k[oa>>2]|0;if(Eb)j0a(Eb);Eb=k[v>>2]|0;if(!Eb)Sc(w|0);j0a(Eb);Sc(w|0)}w=k[oa>>2]|0;if(w)j0a(w);w=k[v>>2]|0;if(w)j0a(w);k[f>>2]=1;k[f+8>>2]=10;k[f+40>>2]=1;w=f+48|0;k[w>>2]=-1;k[w+4>>2]=-1;w=f+56|0;v=f+60|0;oa=f+72|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;U=x;x=0;if(U&1){U=Hc()|0;w=k[oa>>2]|0;if(w)j0a(w);w=k[v>>2]|0;if(!w)Sc(U|0);j0a(w);Sc(U|0)}U=k[oa>>2]|0;if(U)j0a(U);U=k[v>>2]|0;if(U)j0a(U);U=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=129;k[f+40>>2]=1;v=f+48|0;k[v>>2]=-1;k[v+4>>2]=-1;v=f+56|0;oa=f+60|0;w=f+72|0;Eb=U+48|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;Ta(539,Eb|0,f|0)|0;v=x;x=0;if(v&1){v=Hc()|0;U=k[w>>2]|0;if(U)j0a(U);U=k[oa>>2]|0;if(!U)Sc(v|0);j0a(U);Sc(v|0)}v=k[w>>2]|0;if(v)j0a(v);v=k[oa>>2]|0;if(v)j0a(v);k[f>>2]=1;k[f+8>>2]=84;k[f+40>>2]=1;v=f+48|0;k[v>>2]=-1;k[v+4>>2]=-1;v=f+56|0;oa=f+60|0;w=f+72|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;Ta(539,Eb|0,f|0)|0;Eb=x;x=0;if(Eb&1){Eb=Hc()|0;v=k[w>>2]|0;if(v)j0a(v);v=k[oa>>2]|0;if(!v)Sc(Eb|0);j0a(v);Sc(Eb|0)}Eb=k[w>>2]|0;if(Eb)j0a(Eb);Eb=k[oa>>2]|0;if(Eb)j0a(Eb);Eb=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=129;k[f+40>>2]=1;oa=f+48|0;k[oa>>2]=-1;k[oa+4>>2]=-1;oa=f+56|0;w=f+60|0;v=f+72|0;U=Eb+48|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[oa+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;Eb=k[v>>2]|0;if(Eb)j0a(Eb);Eb=k[w>>2]|0;if(!Eb)Sc(oa|0);j0a(Eb);Sc(oa|0)}oa=k[v>>2]|0;if(oa)j0a(oa);oa=k[w>>2]|0;if(oa)j0a(oa);k[A>>2]=1;k[A+32>>2]=1;oa=k[_>>2]|0;w=(Vf[k[(k[oa>>2]|0)+44>>2]&1023](oa)|0)<<3;da=f;vb=A;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));HB(f,w,0);da=z;vb=f;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));k[g>>2]=0;k[g+32>>2]=1;k[f>>2]=1;JB(g,z,f);da=y;vb=g;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));k[f>>2]=2;da=f+8|0;vb=y;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));y=f+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=f+56|0;z=f+60|0;w=f+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;y=x;x=0;if(y&1){y=Hc()|0;A=k[w>>2]|0;if(A)j0a(A);A=k[z>>2]|0;if(!A)Sc(y|0);j0a(A);Sc(y|0)}y=k[w>>2]|0;if(y)j0a(y);y=k[z>>2]|0;if(y)j0a(y);k[f>>2]=1;k[f+8>>2]=2;k[f+40>>2]=1;y=f+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=f+56|0;z=f+60|0;w=f+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;U=x;x=0;if(U&1){U=Hc()|0;y=k[w>>2]|0;if(y)j0a(y);y=k[z>>2]|0;if(!y)Sc(U|0);j0a(y);Sc(U|0)}U=k[w>>2]|0;if(U)j0a(U);U=k[z>>2]|0;if(U)j0a(U);U=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=25;k[f+40>>2]=1;z=f+48|0;k[z>>2]=-1;k[z+4>>2]=-1;z=f+56|0;w=f+60|0;y=f+72|0;A=U+48|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[z+16>>2]=0;x=0;Ta(539,A|0,f|0)|0;z=x;x=0;if(z&1){z=Hc()|0;U=k[y>>2]|0;if(U)j0a(U);U=k[w>>2]|0;if(!U)Sc(z|0);j0a(U);Sc(z|0)}z=k[y>>2]|0;if(z)j0a(z);z=k[w>>2]|0;if(z)j0a(z);k[f>>2]=1;k[f+8>>2]=22;k[f+40>>2]=1;z=f+48|0;k[z>>2]=-1;k[z+4>>2]=-1;z=f+56|0;w=f+60|0;y=f+72|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[z+16>>2]=0;x=0;Ta(539,A|0,f|0)|0;A=x;x=0;if(A&1){A=Hc()|0;z=k[y>>2]|0;if(z)j0a(z);z=k[w>>2]|0;if(!z)Sc(A|0);j0a(z);Sc(A|0)}A=k[y>>2]|0;if(A)j0a(A);A=k[w>>2]|0;if(A)j0a(A);A=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;w=f+48|0;k[w>>2]=-1;k[w+4>>2]=-1;w=f+56|0;y=f+60|0;z=f+72|0;U=A+48|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;w=x;x=0;if(w&1){w=Hc()|0;A=k[z>>2]|0;if(A)j0a(A);A=k[y>>2]|0;if(!A)Sc(w|0);j0a(A);Sc(w|0)}w=k[z>>2]|0;if(w)j0a(w);w=k[y>>2]|0;if(w)j0a(w);k[f>>2]=1;k[f+8>>2]=131;k[f+40>>2]=1;w=f+48|0;k[w>>2]=-1;k[w+4>>2]=-1;w=f+56|0;y=f+60|0;z=f+72|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;x=0;Ta(539,U|0,f|0)|0;U=x;x=0;if(U&1){U=Hc()|0;w=k[z>>2]|0;if(w)j0a(w);w=k[y>>2]|0;if(!w)Sc(U|0);j0a(w);Sc(U|0)}U=k[z>>2]|0;if(U)j0a(U);U=k[y>>2]|0;if(U)j0a(U);U=k[_>>2]|0;b:do if((Vf[k[k[U>>2]>>2]&1023](U)|0)==6){y=k[Z>>2]|0;k[C>>2]=1;k[C+32>>2]=1;z=iDa(k[_>>2]|0,168,6656,0)|0;if(!z)BBa();w=256-(k[z+24>>2]<<3)|0;da=g;vb=C;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));if((w|0)<0){D0a(f,265832);k[f>>2]=47544;x=0;nb(96,f|0,265867,265975,711);x=0;Sa=Hc()|0;nCa(f);Sc(Sa|0)}HB(g,w,((w|0)<0)<<31>>31);da=B;vb=g;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));w=y+48|0;k[f>>2]=2;da=f+8|0;vb=B;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));y=f+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=f+56|0;Sa=f+60|0;ob=f+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,w|0,f|0)|0;y=x;x=0;if(y&1){y=Hc()|0;Qa=k[ob>>2]|0;if(Qa)j0a(Qa);Qa=k[Sa>>2]|0;if(!Qa)Sc(y|0);j0a(Qa);Sc(y|0)}y=k[ob>>2]|0;if(y)j0a(y);y=k[Sa>>2]|0;if(y)j0a(y);k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;y=f+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=f+56|0;Sa=f+60|0;ob=f+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,w|0,f|0)|0;y=x;x=0;if(y&1){y=Hc()|0;Qa=k[ob>>2]|0;if(Qa)j0a(Qa);Qa=k[Sa>>2]|0;if(!Qa)Sc(y|0);j0a(Qa);Sc(y|0)}y=k[ob>>2]|0;if(y)j0a(y);y=k[Sa>>2]|0;if(y)j0a(y);k[f>>2]=1;k[f+8>>2]=4;k[f+40>>2]=1;y=f+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=f+56|0;Sa=f+60|0;ob=f+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,w|0,f|0)|0;y=x;x=0;if(!(y&1)){y=k[ob>>2]|0;if(y)j0a(y);y=k[Sa>>2]|0;if(y)j0a(y);break}y=Hc()|0;Qa=k[ob>>2]|0;if(Qa)j0a(Qa);Qa=k[Sa>>2]|0;if(!Qa)Sc(y|0);j0a(Qa);Sc(y|0)}else{y=k[_>>2]|0;do if(!(Vf[k[k[y>>2]>>2]&1023](y)|0)){Qa=k[_>>2]|0;Sa=iDa(Qa,168,6592,0)|0;if(!Sa)BBa();if((k[Sa+28>>2]|0)!=1){Fb=Qa;break}Sa=k[Z>>2]|0;k[E>>2]=1;k[E+32>>2]=1;ob=32-(Vf[k[(k[Qa>>2]|0)+44>>2]&1023](Qa)|0)<<3;da=f;vb=E;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));HB(f,ob,0);da=D;vb=f;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));ob=Sa+48|0;k[f>>2]=2;da=f+8|0;vb=D;ea=da+40|0;do{k[da>>2]=k[vb>>2];da=da+4|0;vb=vb+4|0}while((da|0)<(ea|0));Sa=f+48|0;k[Sa>>2]=-1;k[Sa+4>>2]=-1;Sa=f+56|0;qb=f+60|0;rb=f+72|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[Sa+16>>2]=0;x=0;Ta(539,ob|0,f|0)|0;Sa=x;x=0;if(Sa&1){Sa=Hc()|0;sb=k[rb>>2]|0;if(sb)j0a(sb);sb=k[qb>>2]|0;if(!sb)Sc(Sa|0);j0a(sb);Sc(Sa|0)}Sa=k[rb>>2]|0;if(Sa)j0a(Sa);Sa=k[qb>>2]|0;if(Sa)j0a(Sa);k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;Sa=f+48|0;k[Sa>>2]=-1;k[Sa+4>>2]=-1;Sa=f+56|0;qb=f+60|0;rb=f+72|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[Sa+16>>2]=0;x=0;Ta(539,ob|0,f|0)|0;Sa=x;x=0;if(Sa&1){Sa=Hc()|0;sb=k[rb>>2]|0;if(sb)j0a(sb);sb=k[qb>>2]|0;if(!sb)Sc(Sa|0);j0a(sb);Sc(Sa|0)}Sa=k[rb>>2]|0;if(Sa)j0a(Sa);Sa=k[qb>>2]|0;if(Sa)j0a(Sa);k[f>>2]=1;k[f+8>>2]=129;k[f+40>>2]=1;Sa=f+48|0;k[Sa>>2]=-1;k[Sa+4>>2]=-1;Sa=f+56|0;qb=f+60|0;rb=f+72|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[Sa+16>>2]=0;x=0;Ta(539,ob|0,f|0)|0;Sa=x;x=0;if(Sa&1){Sa=Hc()|0;sb=k[rb>>2]|0;if(sb)j0a(sb);sb=k[qb>>2]|0;if(!sb)Sc(Sa|0);j0a(sb);Sc(Sa|0)}Sa=k[rb>>2]|0;if(Sa)j0a(Sa);Sa=k[qb>>2]|0;if(Sa)j0a(Sa);k[f>>2]=1;k[f+8>>2]=2;k[f+40>>2]=1;Sa=f+48|0;k[Sa>>2]=-1;k[Sa+4>>2]=-1;Sa=f+56|0;qb=f+60|0;rb=f+72|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[Sa+16>>2]=0;x=0;Ta(539,ob|0,f|0)|0;Sa=x;x=0;if(Sa&1){Sa=Hc()|0;sb=k[rb>>2]|0;if(sb)j0a(sb);sb=k[qb>>2]|0;if(!sb)Sc(Sa|0);j0a(sb);Sc(Sa|0)}Sa=k[rb>>2]|0;if(Sa)j0a(Sa);Sa=k[qb>>2]|0;if(Sa)j0a(Sa);k[f>>2]=1;k[f+8>>2]=4;k[f+40>>2]=1;Sa=f+48|0;k[Sa>>2]=-1;k[Sa+4>>2]=-1;Sa=f+56|0;qb=f+60|0;rb=f+72|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[Sa+16>>2]=0;x=0;Ta(539,ob|0,f|0)|0;Sa=x;x=0;if(!(Sa&1)){Sa=k[rb>>2]|0;if(Sa)j0a(Sa);Sa=k[qb>>2]|0;if(Sa)j0a(Sa);break b}Sa=Hc()|0;sb=k[rb>>2]|0;if(sb)j0a(sb);sb=k[qb>>2]|0;if(!sb)Sc(Sa|0);j0a(sb);Sc(Sa|0)}else Fb=k[_>>2]|0;while(0);if((Vf[k[k[Fb>>2]>>2]&1023](Fb)|0)!=4)break;q2a(F,273480,37);x=0;pa(57,0,F|0,247,259819,260482);y=x;x=0;if(!(y&1)){K2a(F);break}y=Hc()|0;w=M;K2a(F);ba=y;ca=w;Sc(ba|0)}while(0);ba=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=2;k[f+40>>2]=1;ca=f+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=f+56|0;F=f+60|0;Fb=f+72|0;_=ba+48|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,_|0,f|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;ba=k[Fb>>2]|0;if(ba)j0a(ba);ba=k[F>>2]|0;if(!ba)Sc(ca|0);j0a(ba);Sc(ca|0)}ca=k[Fb>>2]|0;if(ca)j0a(ca);ca=k[F>>2]|0;if(ca)j0a(ca);k[f>>2]=1;k[f+8>>2]=23;k[f+40>>2]=1;ca=f+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=f+56|0;F=f+60|0;Fb=f+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,_|0,f|0)|0;_=x;x=0;if(_&1){_=Hc()|0;ca=k[Fb>>2]|0;if(ca)j0a(ca);ca=k[F>>2]|0;if(!ca)Sc(_|0);j0a(ca);Sc(_|0)}_=k[Fb>>2]|0;if(_)j0a(_);_=k[F>>2]|0;if(_)j0a(_);_=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;F=f+48|0;k[F>>2]=-1;k[F+4>>2]=-1;F=f+56|0;Fb=f+60|0;ca=f+72|0;ba=_+48|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;x=0;Ta(539,ba|0,f|0)|0;F=x;x=0;if(F&1){F=Hc()|0;_=k[ca>>2]|0;if(_)j0a(_);_=k[Fb>>2]|0;if(!_)Sc(F|0);j0a(_);Sc(F|0)}F=k[ca>>2]|0;if(F)j0a(F);F=k[Fb>>2]|0;if(F)j0a(F);k[f>>2]=1;k[f+8>>2]=85;k[f+40>>2]=1;F=f+48|0;k[F>>2]=-1;k[F+4>>2]=-1;F=f+56|0;Fb=f+60|0;ca=f+72|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;x=0;Ta(539,ba|0,f|0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;F=k[ca>>2]|0;if(F)j0a(F);F=k[Fb>>2]|0;if(!F)Sc(ba|0);j0a(F);Sc(ba|0)}ba=k[ca>>2]|0;if(ba)j0a(ba);ba=k[Fb>>2]|0;if(ba)j0a(ba);if(!d){r=e;return}d=k[Z>>2]|0;k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;Z=f+48|0;k[Z>>2]=-1;k[Z+4>>2]=-1;Z=f+56|0;ba=f+60|0;Fb=f+72|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[Z+16>>2]=0;x=0;Ta(539,d+48|0,f|0)|0;f=x;x=0;if(f&1){f=Hc()|0;d=k[Fb>>2]|0;if(d)j0a(d);d=k[ba>>2]|0;if(!d)Sc(f|0);j0a(d);Sc(f|0)}else{f=k[Fb>>2]|0;if(f)j0a(f);f=k[ba>>2]|0;if(f)j0a(f);r=e;return}}function cja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;b=r;r=r+400|0;d=b+240|0;e=b+200|0;f=b+392|0;g=b+388|0;h=b+360|0;i=b+348|0;j=b+336|0;l=b+324|0;m=b+320|0;n=b+160|0;o=b+120|0;p=b+80|0;q=b+40|0;s=b;t=a+8|0;u=k[t>>2]|0;if((Vf[k[k[u>>2]>>2]&1023](u)|0)==5){u=a+4|0;if(!c){k[f>>2]=k[u>>2];v=Vf[k[k[a>>2]>>2]&1023](a)|0;sla(f,v,Vf[k[k[a>>2]>>2]&1023](a)|0)}k[g>>2]=k[u>>2];u=iDa(k[t>>2]|0,168,6704,0)|0;if(!u)BBa();Eia(g,u);r=b;return}u=k[t>>2]|0;if((Vf[k[k[u>>2]>>2]&1023](u)|0)==8){u=iDa(k[t>>2]|0,168,6720,0)|0;if(!u)BBa();g=j8(u,0)|0;v=k[g>>2]|0;f=k[g+4>>2]|0;a:do if((v|0)!=(f|0)){g=a+4|0;w=d+8|0;y=d+48|0;z=d+56|0;A=d+60|0;B=d+72|0;C=d+8|0;D=d+40|0;E=d+48|0;F=d+56|0;G=d+60|0;H=d+72|0;I=d+8|0;J=d+40|0;K=d+48|0;L=d+56|0;N=d+60|0;O=d+72|0;P=d+8|0;Q=d+12|0;R=d+40|0;S=d+48|0;T=d+56|0;U=d+60|0;V=d+72|0;W=v;while(1){X=W+12|0;Y=k[X>>2]|0;if((Vf[k[k[Y>>2]>>2]&1023](Y)|0)!=12){Y=N9(u,W)|0;Z=(k[g>>2]|0)+48|0;k[d>>2]=2;_=w;$=Y;aa=_+40|0;do{k[_>>2]=k[$>>2];_=_+4|0;$=$+4|0}while((_|0)<(aa|0));ba=y;k[ba>>2]=-1;k[ba+4>>2]=-1;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[z+16>>2]=0;x=0;Ta(539,Z|0,d|0)|0;ba=x;x=0;if(ba&1){ca=19;break}ba=k[B>>2]|0;if(ba)j0a(ba);ba=k[A>>2]|0;if(ba)j0a(ba);k[d>>2]=1;k[C>>2]=130;k[D>>2]=1;ba=E;k[ba>>2]=-1;k[ba+4>>2]=-1;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;x=0;Ta(539,Z|0,d|0)|0;ba=x;x=0;if(ba&1){ca=29;break}ba=k[H>>2]|0;if(ba)j0a(ba);ba=k[G>>2]|0;if(ba)j0a(ba);k[d>>2]=1;k[I>>2]=1;k[J>>2]=1;ba=K;k[ba>>2]=-1;k[ba+4>>2]=-1;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,Z|0,d|0)|0;ba=x;x=0;if(ba&1){ca=39;break}ba=k[O>>2]|0;if(ba)j0a(ba);ba=k[N>>2]|0;if(ba)j0a(ba);ba=k[Y+40>>2]|0;k[d>>2]=2;k[P>>2]=ba;k[Q>>2]=k[h>>2];k[Q+4>>2]=k[h+4>>2];k[Q+8>>2]=k[h+8>>2];k[Q+12>>2]=k[h+12>>2];k[Q+16>>2]=k[h+16>>2];k[Q+20>>2]=k[h+20>>2];k[Q+24>>2]=k[h+24>>2];k[R>>2]=1;ba=S;k[ba>>2]=-1;k[ba+4>>2]=-1;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[T+16>>2]=0;x=0;Ta(539,Z|0,d|0)|0;ba=x;x=0;if(ba&1){ca=49;break}ba=k[V>>2]|0;if(ba)j0a(ba);ba=k[U>>2]|0;if(ba)j0a(ba);$ia(i,k[g>>2]|0,k[X>>2]|0);x=0;fb(123,i|0,0,1);ba=x;x=0;if(ba&1){ca=56;break}}W=W+24|0;if((W|0)==(f|0))break a}if((ca|0)==19){W=Hc()|0;g=k[B>>2]|0;if(g)j0a(g);g=k[A>>2]|0;if(!g)Sc(W|0);j0a(g);Sc(W|0)}else if((ca|0)==29){W=Hc()|0;g=k[H>>2]|0;if(g)j0a(g);g=k[G>>2]|0;if(!g)Sc(W|0);j0a(g);Sc(W|0)}else if((ca|0)==39){W=Hc()|0;g=k[O>>2]|0;if(g)j0a(g);g=k[N>>2]|0;if(!g)Sc(W|0);j0a(g);Sc(W|0)}else if((ca|0)==49){W=Hc()|0;g=k[V>>2]|0;if(g)j0a(g);g=k[U>>2]|0;if(!g)Sc(W|0);j0a(g);Sc(W|0)}else if((ca|0)==56){W=Hc()|0;da=M;ea=W;Sc(ea|0)}}while(0);if(!c){r=b;return}ca=k[a+4>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;i=d+60|0;h=d+72|0;u=ca+48|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,u|0,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;ca=k[h>>2]|0;if(ca)j0a(ca);ca=k[i>>2]|0;if(!ca)Sc(f|0);j0a(ca);Sc(f|0)}f=k[h>>2]|0;if(f)j0a(f);f=k[i>>2]|0;if(f)j0a(f);k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;i=d+60|0;h=d+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,u|0,d|0)|0;u=x;x=0;if(u&1){u=Hc()|0;f=k[h>>2]|0;if(f)j0a(f);f=k[i>>2]|0;if(!f)Sc(u|0);j0a(f);Sc(u|0)}else{u=k[h>>2]|0;if(u)j0a(u);u=k[i>>2]|0;if(u)j0a(u);r=b;return}}u=k[t>>2]|0;i=Vf[k[(k[u>>2]|0)+56>>2]&1023](u)|0;u=k[t>>2]|0;jg[k[(k[u>>2]|0)+76>>2]&511](l,u,0);x=0;u=Fa(86,l|0,0,260777)|0;h=x;x=0;do if(!(h&1)){k[j>>2]=k[u>>2];k[j+4>>2]=k[u+4>>2];k[j+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;x=0;pa(57,i|0,j|0,362,259819,260818);f=x;x=0;if(f&1){f=Hc()|0;ca=M;K2a(j);fa=ca;ga=f;break}K2a(j);K2a(l);f=a+4|0;if(!c){k[m>>2]=k[f>>2];ca=Vf[k[k[a>>2]>>2]&1023](a)|0;sla(m,ca,Vf[k[k[a>>2]>>2]&1023](a)|0)}ca=k[t>>2]|0;v=(Vf[k[(k[ca>>2]|0)+44>>2]&1023](ca)|0)==32;ca=k[f>>2]|0;if(v){k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;v=d+48|0;k[v>>2]=-1;k[v+4>>2]=-1;v=d+56|0;W=d+60|0;g=d+72|0;T=ca+48|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;Ta(539,T|0,d|0)|0;v=x;x=0;if(v&1){v=Hc()|0;S=k[g>>2]|0;if(S)j0a(S);S=k[W>>2]|0;if(!S)Sc(v|0);j0a(S);Sc(v|0)}v=k[g>>2]|0;if(v)j0a(v);v=k[W>>2]|0;if(v)j0a(v);k[n>>2]=0;k[n+32>>2]=1;k[d>>2]=2;_=d+8|0;$=n;aa=_+40|0;do{k[_>>2]=k[$>>2];_=_+4|0;$=$+4|0}while((_|0)<(aa|0));U=d+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=d+56|0;V=d+60|0;N=d+72|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,T|0,d|0)|0;U=x;x=0;if(U&1){U=Hc()|0;O=k[N>>2]|0;if(O)j0a(O);O=k[V>>2]|0;if(!O)Sc(U|0);j0a(O);Sc(U|0)}U=k[N>>2]|0;if(U)j0a(U);U=k[V>>2]|0;if(U)j0a(U);k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;U=d+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=d+56|0;V=d+60|0;N=d+72|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,T|0,d|0)|0;U=x;x=0;if(U&1){U=Hc()|0;O=k[N>>2]|0;if(O)j0a(O);O=k[V>>2]|0;if(!O)Sc(U|0);j0a(O);Sc(U|0)}U=k[N>>2]|0;if(U)j0a(U);U=k[V>>2]|0;if(U)j0a(U);k[d>>2]=1;k[d+8>>2]=85;k[d+40>>2]=1;U=d+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=d+56|0;V=d+60|0;N=d+72|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,T|0,d|0)|0;U=x;x=0;if(U&1){U=Hc()|0;O=k[N>>2]|0;if(O)j0a(O);O=k[V>>2]|0;if(!O)Sc(U|0);j0a(O);Sc(U|0)}else{U=k[N>>2]|0;if(U)j0a(U);U=k[V>>2]|0;if(U)j0a(U);r=b;return}}k[o>>2]=256;k[o+32>>2]=1;U=ca+48|0;k[d>>2]=2;_=d+8|0;$=o;aa=_+40|0;do{k[_>>2]=k[$>>2];_=_+4|0;$=$+4|0}while((_|0)<(aa|0));ca=d+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=d+56|0;T=d+60|0;V=d+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,U|0,d|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;N=k[V>>2]|0;if(N)j0a(N);N=k[T>>2]|0;if(!N)Sc(ca|0);j0a(N);Sc(ca|0)}ca=k[V>>2]|0;if(ca)j0a(ca);ca=k[T>>2]|0;if(ca)j0a(ca);k[d>>2]=1;k[d+8>>2]=10;k[d+40>>2]=1;ca=d+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=d+56|0;T=d+60|0;V=d+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,U|0,d|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;N=k[V>>2]|0;if(N)j0a(N);N=k[T>>2]|0;if(!N)Sc(ca|0);j0a(N);Sc(ca|0)}ca=k[V>>2]|0;if(ca)j0a(ca);ca=k[T>>2]|0;if(ca)j0a(ca);ca=k[f>>2]|0;k[d>>2]=1;k[d+8>>2]=129;k[d+40>>2]=1;T=d+48|0;k[T>>2]=-1;k[T+4>>2]=-1;T=d+56|0;V=d+60|0;N=d+72|0;O=ca+48|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[T+16>>2]=0;x=0;Ta(539,O|0,d|0)|0;T=x;x=0;if(T&1){T=Hc()|0;ca=k[N>>2]|0;if(ca)j0a(ca);ca=k[V>>2]|0;if(!ca)Sc(T|0);j0a(ca);Sc(T|0)}T=k[N>>2]|0;if(T)j0a(T);T=k[V>>2]|0;if(T)j0a(T);k[d>>2]=1;k[d+8>>2]=84;k[d+40>>2]=1;T=d+48|0;k[T>>2]=-1;k[T+4>>2]=-1;T=d+56|0;V=d+60|0;N=d+72|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[T+16>>2]=0;x=0;Ta(539,O|0,d|0)|0;O=x;x=0;if(O&1){O=Hc()|0;T=k[N>>2]|0;if(T)j0a(T);T=k[V>>2]|0;if(!T)Sc(O|0);j0a(T);Sc(O|0)}O=k[N>>2]|0;if(O)j0a(O);O=k[V>>2]|0;if(O)j0a(O);O=k[f>>2]|0;k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;V=d+48|0;k[V>>2]=-1;k[V+4>>2]=-1;V=d+56|0;N=d+60|0;T=d+72|0;ca=O+48|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[V+16>>2]=0;x=0;Ta(539,ca|0,d|0)|0;V=x;x=0;if(V&1){V=Hc()|0;O=k[T>>2]|0;if(O)j0a(O);O=k[N>>2]|0;if(!O)Sc(V|0);j0a(O);Sc(V|0)}V=k[T>>2]|0;if(V)j0a(V);V=k[N>>2]|0;if(V)j0a(V);k[s>>2]=1;k[s+32>>2]=1;V=k[t>>2]|0;N=(Vf[k[(k[V>>2]|0)+44>>2]&1023](V)|0)<<3;_=d;$=s;aa=_+40|0;do{k[_>>2]=k[$>>2];_=_+4|0;$=$+4|0}while((_|0)<(aa|0));HB(d,N,0);_=q;$=d;aa=_+40|0;do{k[_>>2]=k[$>>2];_=_+4|0;$=$+4|0}while((_|0)<(aa|0));k[e>>2]=0;k[e+32>>2]=1;k[d>>2]=1;JB(e,q,d);_=p;$=e;aa=_+40|0;do{k[_>>2]=k[$>>2];_=_+4|0;$=$+4|0}while((_|0)<(aa|0));k[d>>2]=2;_=d+8|0;$=p;aa=_+40|0;do{k[_>>2]=k[$>>2];_=_+4|0;$=$+4|0}while((_|0)<(aa|0));N=d+48|0;k[N>>2]=-1;k[N+4>>2]=-1;N=d+56|0;U=d+60|0;V=d+72|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[N+16>>2]=0;x=0;Ta(539,ca|0,d|0)|0;N=x;x=0;if(N&1){N=Hc()|0;T=k[V>>2]|0;if(T)j0a(T);T=k[U>>2]|0;if(!T)Sc(N|0);j0a(T);Sc(N|0)}N=k[V>>2]|0;if(N)j0a(N);N=k[U>>2]|0;if(N)j0a(N);k[d>>2]=1;k[d+8>>2]=2;k[d+40>>2]=1;N=d+48|0;k[N>>2]=-1;k[N+4>>2]=-1;N=d+56|0;U=d+60|0;V=d+72|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[N+16>>2]=0;x=0;Ta(539,ca|0,d|0)|0;N=x;x=0;if(N&1){N=Hc()|0;T=k[V>>2]|0;if(T)j0a(T);T=k[U>>2]|0;if(!T)Sc(N|0);j0a(T);Sc(N|0)}N=k[V>>2]|0;if(N)j0a(N);N=k[U>>2]|0;if(N)j0a(N);N=k[f>>2]|0;k[d>>2]=1;k[d+8>>2]=25;k[d+40>>2]=1;U=d+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=d+56|0;V=d+60|0;T=d+72|0;O=N+48|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,O|0,d|0)|0;U=x;x=0;if(U&1){U=Hc()|0;N=k[T>>2]|0;if(N)j0a(N);N=k[V>>2]|0;if(!N)Sc(U|0);j0a(N);Sc(U|0)}U=k[T>>2]|0;if(U)j0a(U);U=k[V>>2]|0;if(U)j0a(U);k[d>>2]=1;k[d+8>>2]=22;k[d+40>>2]=1;U=d+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=d+56|0;V=d+60|0;T=d+72|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,O|0,d|0)|0;O=x;x=0;if(O&1){O=Hc()|0;U=k[T>>2]|0;if(U)j0a(U);U=k[V>>2]|0;if(!U)Sc(O|0);j0a(U);Sc(O|0)}O=k[T>>2]|0;if(O)j0a(O);O=k[V>>2]|0;if(O)j0a(O);O=k[f>>2]|0;k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;V=d+48|0;k[V>>2]=-1;k[V+4>>2]=-1;V=d+56|0;T=d+60|0;U=d+72|0;N=O+48|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[V+16>>2]=0;x=0;Ta(539,N|0,d|0)|0;V=x;x=0;if(V&1){V=Hc()|0;O=k[U>>2]|0;if(O)j0a(O);O=k[T>>2]|0;if(!O)Sc(V|0);j0a(O);Sc(V|0)}V=k[U>>2]|0;if(V)j0a(V);V=k[T>>2]|0;if(V)j0a(V);k[d>>2]=1;k[d+8>>2]=85;k[d+40>>2]=1;V=d+48|0;k[V>>2]=-1;k[V+4>>2]=-1;V=d+56|0;T=d+60|0;U=d+72|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[V+16>>2]=0;x=0;Ta(539,N|0,d|0)|0;N=x;x=0;if(N&1){N=Hc()|0;V=k[U>>2]|0;if(V)j0a(V);V=k[T>>2]|0;if(!V)Sc(N|0);j0a(V);Sc(N|0)}else{N=k[U>>2]|0;if(N)j0a(N);N=k[T>>2]|0;if(N)j0a(N);r=b;return}}else{N=Hc()|0;fa=M;ga=N}while(0);K2a(l);da=fa;ea=ga;Sc(ea|0)}function dja(a,b){a=a|0;b=b|0;k[a+4>>2]=b;k[a+8>>2]=41052;k[a>>2]=40808;return}function eja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+160|0;d=b+80|0;e=b+40|0;f=b;g=a+4|0;a=k[g>>2]|0;do if(c){k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;i=d+60|0;j=d+72|0;l=a+48|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,l|0,d|0)|0;h=x;x=0;if(h&1){h=Hc()|0;m=k[j>>2]|0;if(m)j0a(m);m=k[i>>2]|0;if(!m)Sc(h|0);j0a(m);Sc(h|0)}h=k[j>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(h)j0a(h);k[d>>2]=1;k[d+8>>2]=84;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;i=d+60|0;j=d+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,l|0,d|0)|0;h=x;x=0;if(h&1){h=Hc()|0;m=k[j>>2]|0;if(m)j0a(m);m=k[i>>2]|0;if(!m)Sc(h|0);j0a(m);Sc(h|0)}h=k[j>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(h)j0a(h);k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;i=d+60|0;j=d+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,l|0,d|0)|0;h=x;x=0;if(h&1){h=Hc()|0;m=k[j>>2]|0;if(m)j0a(m);m=k[i>>2]|0;if(!m)Sc(h|0);j0a(m);Sc(h|0)}h=k[j>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(h)j0a(h);k[d>>2]=1;k[d+8>>2]=26;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;i=d+60|0;j=d+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,l|0,d|0)|0;l=x;x=0;if(!(l&1)){l=k[j>>2]|0;if(l)j0a(l);l=k[i>>2]|0;if(l)j0a(l);break}l=Hc()|0;h=k[j>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(!h)Sc(l|0);j0a(h);Sc(l|0)}else{k[d>>2]=1;k[d+8>>2]=129;k[d+40>>2]=1;l=d+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=d+56|0;h=d+60|0;i=d+72|0;j=a+48|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,j|0,d|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=k[i>>2]|0;if(m)j0a(m);m=k[h>>2]|0;if(!m)Sc(l|0);j0a(m);Sc(l|0)}l=k[i>>2]|0;if(l)j0a(l);l=k[h>>2]|0;if(l)j0a(l);k[d>>2]=1;k[d+8>>2]=84;k[d+40>>2]=1;l=d+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=d+56|0;h=d+60|0;i=d+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,j|0,d|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=k[i>>2]|0;if(m)j0a(m);m=k[h>>2]|0;if(!m)Sc(l|0);j0a(m);Sc(l|0)}l=k[i>>2]|0;if(l)j0a(l);l=k[h>>2]|0;if(l)j0a(l);k[d>>2]=1;k[d+8>>2]=129;k[d+40>>2]=1;l=d+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=d+56|0;h=d+60|0;i=d+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,j|0,d|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=k[i>>2]|0;if(m)j0a(m);m=k[h>>2]|0;if(!m)Sc(l|0);j0a(m);Sc(l|0)}l=k[i>>2]|0;if(l)j0a(l);l=k[h>>2]|0;if(l)j0a(l);k[d>>2]=1;k[d+8>>2]=26;k[d+40>>2]=1;l=d+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=d+56|0;h=d+60|0;i=d+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,j|0,d|0)|0;j=x;x=0;if(!(j&1)){j=k[i>>2]|0;if(j)j0a(j);j=k[h>>2]|0;if(j)j0a(j);break}j=Hc()|0;l=k[i>>2]|0;if(l)j0a(l);l=k[h>>2]|0;if(!l)Sc(j|0);j0a(l);Sc(j|0)}while(0);a=k[g>>2]|0;k[f>>2]=1;k[f+32>>2]=1;g=d;c=f;f=g+40|0;do{k[g>>2]=k[c>>2];g=g+4|0;c=c+4|0}while((g|0)<(f|0));HB(d,248,0);g=e;c=d;f=g+40|0;do{k[g>>2]=k[c>>2];g=g+4|0;c=c+4|0}while((g|0)<(f|0));j=a+48|0;k[d>>2]=2;g=d+8|0;c=e;f=g+40|0;do{k[g>>2]=k[c>>2];g=g+4|0;c=c+4|0}while((g|0)<(f|0));c=d+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=d+56|0;g=d+60|0;f=d+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,j|0,d|0)|0;c=x;x=0;if(c&1){c=Hc()|0;e=k[f>>2]|0;if(e)j0a(e);e=k[g>>2]|0;if(!e)Sc(c|0);j0a(e);Sc(c|0)}c=k[f>>2]|0;if(c)j0a(c);c=k[g>>2]|0;if(c)j0a(c);k[d>>2]=1;k[d+8>>2]=2;k[d+40>>2]=1;c=d+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=d+56|0;g=d+60|0;f=d+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,j|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;j=k[f>>2]|0;if(j)j0a(j);j=k[g>>2]|0;if(!j)Sc(d|0);j0a(j);Sc(d|0)}else{d=k[f>>2]|0;if(d)j0a(d);d=k[g>>2]|0;if(!d){r=b;return}j0a(d);r=b;return}}function fja(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+288|0;b=c+200|0;e=c+160|0;f=c+120|0;g=c+80|0;h=c+40|0;i=c;j=a+4|0;a=k[j>>2]|0;k[e>>2]=31;k[e+32>>2]=1;l=a+48|0;k[b>>2]=2;a=b+8|0;m=e;e=a+40|0;do{k[a>>2]=k[m>>2];a=a+4|0;m=m+4|0}while((a|0)<(e|0));n=b+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=b+56|0;o=b+60|0;p=b+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;n=x;x=0;if(n&1){n=Hc()|0;q=k[p>>2]|0;if(q)j0a(q);q=k[o>>2]|0;if(!q)Sc(n|0);j0a(q);Sc(n|0)}n=k[p>>2]|0;if(n)j0a(n);n=k[o>>2]|0;if(n)j0a(n);k[b>>2]=1;k[b+8>>2]=3;k[b+40>>2]=1;n=b+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=b+56|0;o=b+60|0;p=b+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;n=x;x=0;if(n&1){n=Hc()|0;q=k[p>>2]|0;if(q)j0a(q);q=k[o>>2]|0;if(!q)Sc(n|0);j0a(q);Sc(n|0)}n=k[p>>2]|0;if(n)j0a(n);n=k[o>>2]|0;if(n)j0a(n);k[f>>2]=256;k[f+32>>2]=1;k[b>>2]=2;a=b+8|0;m=f;e=a+40|0;do{k[a>>2]=k[m>>2];a=a+4|0;m=m+4|0}while((a|0)<(e|0));f=b+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=b+56|0;n=b+60|0;o=b+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;f=x;x=0;if(f&1){f=Hc()|0;p=k[o>>2]|0;if(p)j0a(p);p=k[n>>2]|0;if(!p)Sc(f|0);j0a(p);Sc(f|0)}f=k[o>>2]|0;if(f)j0a(f);f=k[n>>2]|0;if(f)j0a(f);k[b>>2]=1;k[b+8>>2]=10;k[b+40>>2]=1;f=b+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=b+56|0;n=b+60|0;o=b+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;l=x;x=0;if(l&1){l=Hc()|0;f=k[o>>2]|0;if(f)j0a(f);f=k[n>>2]|0;if(!f)Sc(l|0);j0a(f);Sc(l|0)}l=k[o>>2]|0;if(l)j0a(l);l=k[n>>2]|0;if(l)j0a(l);l=k[j>>2]|0;k[b>>2]=1;k[b+8>>2]=129;k[b+40>>2]=1;n=b+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=b+56|0;o=b+60|0;f=b+72|0;p=l+48|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,p|0,b|0)|0;n=x;x=0;if(n&1){n=Hc()|0;l=k[f>>2]|0;if(l)j0a(l);l=k[o>>2]|0;if(!l)Sc(n|0);j0a(l);Sc(n|0)}n=k[f>>2]|0;if(n)j0a(n);n=k[o>>2]|0;if(n)j0a(n);k[b>>2]=1;k[b+8>>2]=84;k[b+40>>2]=1;n=b+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=b+56|0;o=b+60|0;f=b+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,p|0,b|0)|0;p=x;x=0;if(p&1){p=Hc()|0;n=k[f>>2]|0;if(n)j0a(n);n=k[o>>2]|0;if(!n)Sc(p|0);j0a(n);Sc(p|0)}p=k[f>>2]|0;if(p)j0a(p);p=k[o>>2]|0;if(p)j0a(p);p=k[j>>2]|0;k[b>>2]=1;k[b+8>>2]=129;k[b+40>>2]=1;o=b+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=b+56|0;f=b+60|0;n=b+72|0;l=p+48|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;o=x;x=0;if(o&1){o=Hc()|0;p=k[n>>2]|0;if(p)j0a(p);p=k[f>>2]|0;if(!p)Sc(o|0);j0a(p);Sc(o|0)}o=k[n>>2]|0;if(o)j0a(o);o=k[f>>2]|0;if(o)j0a(o);k[g>>2]=255;k[g+32>>2]=1;k[b>>2]=2;a=b+8|0;m=g;e=a+40|0;do{k[a>>2]=k[m>>2];a=a+4|0;m=m+4|0}while((a|0)<(e|0));g=b+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=b+56|0;o=b+60|0;f=b+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;g=x;x=0;if(g&1){g=Hc()|0;n=k[f>>2]|0;if(n)j0a(n);n=k[o>>2]|0;if(!n)Sc(g|0);j0a(n);Sc(g|0)}g=k[f>>2]|0;if(g)j0a(g);g=k[o>>2]|0;if(g)j0a(g);k[b>>2]=1;k[b+8>>2]=2;k[b+40>>2]=1;g=b+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=b+56|0;o=b+60|0;f=b+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;g=x;x=0;if(g&1){g=Hc()|0;n=k[f>>2]|0;if(n)j0a(n);n=k[o>>2]|0;if(!n)Sc(g|0);j0a(n);Sc(g|0)}g=k[f>>2]|0;if(g)j0a(g);g=k[o>>2]|0;if(g)j0a(g);k[b>>2]=1;k[b+8>>2]=25;k[b+40>>2]=1;g=b+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=b+56|0;o=b+60|0;f=b+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;g=x;x=0;if(g&1){g=Hc()|0;n=k[f>>2]|0;if(n)j0a(n);n=k[o>>2]|0;if(!n)Sc(g|0);j0a(n);Sc(g|0)}g=k[f>>2]|0;if(g)j0a(g);g=k[o>>2]|0;if(g)j0a(g);k[b>>2]=1;k[b+8>>2]=22;k[b+40>>2]=1;g=b+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=b+56|0;o=b+60|0;f=b+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,l|0,b|0)|0;l=x;x=0;if(l&1){l=Hc()|0;g=k[f>>2]|0;if(g)j0a(g);g=k[o>>2]|0;if(!g)Sc(l|0);j0a(g);Sc(l|0)}l=k[f>>2]|0;if(l)j0a(l);l=k[o>>2]|0;if(l)j0a(l);l=k[j>>2]|0;k[b>>2]=1;k[b+8>>2]=144;k[b+40>>2]=1;o=b+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=b+56|0;f=b+60|0;g=b+72|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;x=0;Ta(539,l+48|0,b|0)|0;l=x;x=0;if(l&1){l=Hc()|0;o=k[g>>2]|0;if(o)j0a(o);o=k[f>>2]|0;if(!o)Sc(l|0);j0a(o);Sc(l|0)}l=k[g>>2]|0;if(l)j0a(l);l=k[f>>2]|0;if(l)j0a(l);l=k[j>>2]|0;k[i>>2]=1;k[i+32>>2]=1;a=b;m=i;e=a+40|0;do{k[a>>2]=k[m>>2];a=a+4|0;m=m+4|0}while((a|0)<(e|0));HB(b,248,0);a=h;m=b;e=a+40|0;do{k[a>>2]=k[m>>2];a=a+4|0;m=m+4|0}while((a|0)<(e|0));i=l+48|0;k[b>>2]=2;a=b+8|0;m=h;e=a+40|0;do{k[a>>2]=k[m>>2];a=a+4|0;m=m+4|0}while((a|0)<(e|0));m=b+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=b+56|0;a=b+60|0;e=b+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,i|0,b|0)|0;m=x;x=0;if(m&1){m=Hc()|0;h=k[e>>2]|0;if(h)j0a(h);h=k[a>>2]|0;if(!h)Sc(m|0);j0a(h);Sc(m|0)}m=k[e>>2]|0;if(m)j0a(m);m=k[a>>2]|0;if(m)j0a(m);k[b>>2]=1;k[b+8>>2]=132;k[b+40>>2]=1;m=b+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=b+56|0;a=b+60|0;e=b+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,i|0,b|0)|0;m=x;x=0;if(m&1){m=Hc()|0;h=k[e>>2]|0;if(h)j0a(h);h=k[a>>2]|0;if(!h)Sc(m|0);j0a(h);Sc(m|0)}m=k[e>>2]|0;if(m)j0a(m);m=k[a>>2]|0;if(m)j0a(m);k[b>>2]=1;k[b+8>>2]=4;k[b+40>>2]=1;m=b+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=b+56|0;a=b+60|0;e=b+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,i|0,b|0)|0;m=x;x=0;if(m&1){m=Hc()|0;h=k[e>>2]|0;if(h)j0a(h);h=k[a>>2]|0;if(!h)Sc(m|0);j0a(h);Sc(m|0)}m=k[e>>2]|0;if(m)j0a(m);m=k[a>>2]|0;if(m)j0a(m);k[b>>2]=1;k[b+8>>2]=2;k[b+40>>2]=1;m=b+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=b+56|0;a=b+60|0;e=b+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,i|0,b|0)|0;m=x;x=0;if(m&1){m=Hc()|0;h=k[e>>2]|0;if(h)j0a(h);h=k[a>>2]|0;if(!h)Sc(m|0);j0a(h);Sc(m|0)}m=k[e>>2]|0;if(m)j0a(m);m=k[a>>2]|0;if(m)j0a(m);k[b>>2]=1;k[b+8>>2]=23;k[b+40>>2]=1;m=b+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=b+56|0;a=b+60|0;e=b+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,i|0,b|0)|0;i=x;x=0;if(i&1){i=Hc()|0;m=k[e>>2]|0;if(m)j0a(m);m=k[a>>2]|0;if(!m)Sc(i|0);j0a(m);Sc(i|0)}i=k[e>>2]|0;if(i)j0a(i);i=k[a>>2]|0;if(i)j0a(i);i=k[j>>2]|0;k[b>>2]=1;k[b+8>>2]=144;k[b+40>>2]=1;a=b+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=b+56|0;e=b+60|0;m=b+72|0;h=i+48|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,h|0,b|0)|0;a=x;x=0;if(a&1){a=Hc()|0;i=k[m>>2]|0;if(i)j0a(i);i=k[e>>2]|0;if(!i)Sc(a|0);j0a(i);Sc(a|0)}a=k[m>>2]|0;if(a)j0a(a);a=k[e>>2]|0;if(a)j0a(a);k[b>>2]=1;k[b+8>>2]=85;k[b+40>>2]=1;a=b+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=b+56|0;e=b+60|0;m=b+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,h|0,b|0)|0;h=x;x=0;if(h&1){h=Hc()|0;a=k[m>>2]|0;if(a)j0a(a);a=k[e>>2]|0;if(!a)Sc(h|0);j0a(a);Sc(h|0)}h=k[m>>2]|0;if(h)j0a(h);h=k[e>>2]|0;if(h)j0a(h);if(!d){r=c;return}d=k[j>>2]|0;k[b>>2]=1;k[b+8>>2]=80;k[b+40>>2]=1;j=b+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=b+56|0;h=b+60|0;e=b+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,d+48|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;d=k[e>>2]|0;if(d)j0a(d);d=k[h>>2]|0;if(!d)Sc(b|0);j0a(d);Sc(b|0)}else{b=k[e>>2]|0;if(b)j0a(b);b=k[h>>2]|0;if(b)j0a(b);r=c;return}}function gja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;b=r;r=r+208|0;d=b+120|0;e=b+80|0;f=b+40|0;g=b;h=a+4|0;do if(!c){a=k[h>>2]|0;k[d>>2]=1;k[d+8>>2]=129;k[d+40>>2]=1;i=d+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=d+56|0;j=d+60|0;l=d+72|0;m=a+48|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;i=x;x=0;if(i&1){i=Hc()|0;a=k[l>>2]|0;if(a)j0a(a);a=k[j>>2]|0;if(!a)Sc(i|0);j0a(a);Sc(i|0)}i=k[l>>2]|0;if(i)j0a(i);i=k[j>>2]|0;if(i)j0a(i);k[d>>2]=1;k[d+8>>2]=129;k[d+40>>2]=1;i=d+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=d+56|0;j=d+60|0;l=d+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;m=x;x=0;if(!(m&1)){m=k[l>>2]|0;if(m)j0a(m);m=k[j>>2]|0;if(m)j0a(m);break}m=Hc()|0;i=k[l>>2]|0;if(i)j0a(i);i=k[j>>2]|0;if(!i)Sc(m|0);j0a(i);Sc(m|0)}while(0);c=k[h>>2]|0;k[e>>2]=31;k[e+32>>2]=1;m=c+48|0;k[d>>2]=2;c=d+8|0;i=e;e=c+40|0;do{k[c>>2]=k[i>>2];c=c+4|0;i=i+4|0}while((c|0)<(e|0));j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;l=d+60|0;a=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;j=x;x=0;if(j&1){j=Hc()|0;n=k[a>>2]|0;if(n)j0a(n);n=k[l>>2]|0;if(!n)Sc(j|0);j0a(n);Sc(j|0)}j=k[a>>2]|0;if(j)j0a(j);j=k[l>>2]|0;if(j)j0a(j);k[d>>2]=1;k[d+8>>2]=3;k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;l=d+60|0;a=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;j=x;x=0;if(j&1){j=Hc()|0;n=k[a>>2]|0;if(n)j0a(n);n=k[l>>2]|0;if(!n)Sc(j|0);j0a(n);Sc(j|0)}j=k[a>>2]|0;if(j)j0a(j);j=k[l>>2]|0;if(j)j0a(j);k[f>>2]=256;k[f+32>>2]=1;k[d>>2]=2;c=d+8|0;i=f;e=c+40|0;do{k[c>>2]=k[i>>2];c=c+4|0;i=i+4|0}while((c|0)<(e|0));f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;j=d+60|0;l=d+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;a=k[l>>2]|0;if(a)j0a(a);a=k[j>>2]|0;if(!a)Sc(f|0);j0a(a);Sc(f|0)}f=k[l>>2]|0;if(f)j0a(f);f=k[j>>2]|0;if(f)j0a(f);k[d>>2]=1;k[d+8>>2]=10;k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;j=d+60|0;l=d+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;m=x;x=0;if(m&1){m=Hc()|0;f=k[l>>2]|0;if(f)j0a(f);f=k[j>>2]|0;if(!f)Sc(m|0);j0a(f);Sc(m|0)}m=k[l>>2]|0;if(m)j0a(m);m=k[j>>2]|0;if(m)j0a(m);m=k[h>>2]|0;k[d>>2]=1;k[d+8>>2]=129;k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;l=d+60|0;f=d+72|0;a=m+48|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,a|0,d|0)|0;j=x;x=0;if(j&1){j=Hc()|0;m=k[f>>2]|0;if(m)j0a(m);m=k[l>>2]|0;if(!m)Sc(j|0);j0a(m);Sc(j|0)}j=k[f>>2]|0;if(j)j0a(j);j=k[l>>2]|0;if(j)j0a(j);k[d>>2]=1;k[d+8>>2]=84;k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;l=d+60|0;f=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,a|0,d|0)|0;a=x;x=0;if(a&1){a=Hc()|0;j=k[f>>2]|0;if(j)j0a(j);j=k[l>>2]|0;if(!j)Sc(a|0);j0a(j);Sc(a|0)}a=k[f>>2]|0;if(a)j0a(a);a=k[l>>2]|0;if(a)j0a(a);a=k[h>>2]|0;k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;l=d+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=d+56|0;f=d+60|0;j=d+72|0;m=a+48|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;l=x;x=0;if(l&1){l=Hc()|0;a=k[j>>2]|0;if(a)j0a(a);a=k[f>>2]|0;if(!a)Sc(l|0);j0a(a);Sc(l|0)}l=k[j>>2]|0;if(l)j0a(l);l=k[f>>2]|0;if(l)j0a(l);k[g>>2]=255;k[g+32>>2]=1;k[d>>2]=2;c=d+8|0;i=g;e=c+40|0;do{k[c>>2]=k[i>>2];c=c+4|0;i=i+4|0}while((c|0)<(e|0));i=d+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=d+56|0;c=d+60|0;e=d+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;i=x;x=0;if(i&1){i=Hc()|0;g=k[e>>2]|0;if(g)j0a(g);g=k[c>>2]|0;if(!g)Sc(i|0);j0a(g);Sc(i|0)}i=k[e>>2]|0;if(i)j0a(i);i=k[c>>2]|0;if(i)j0a(i);k[d>>2]=1;k[d+8>>2]=2;k[d+40>>2]=1;i=d+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=d+56|0;c=d+60|0;e=d+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;m=x;x=0;if(m&1){m=Hc()|0;i=k[e>>2]|0;if(i)j0a(i);i=k[c>>2]|0;if(!i)Sc(m|0);j0a(i);Sc(m|0)}m=k[e>>2]|0;if(m)j0a(m);m=k[c>>2]|0;if(m)j0a(m);m=k[h>>2]|0;k[d>>2]=1;k[d+8>>2]=25;k[d+40>>2]=1;c=d+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=d+56|0;e=d+60|0;i=d+72|0;g=m+48|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,g|0,d|0)|0;c=x;x=0;if(c&1){c=Hc()|0;m=k[i>>2]|0;if(m)j0a(m);m=k[e>>2]|0;if(!m)Sc(c|0);j0a(m);Sc(c|0)}c=k[i>>2]|0;if(c)j0a(c);c=k[e>>2]|0;if(c)j0a(c);k[d>>2]=1;k[d+8>>2]=22;k[d+40>>2]=1;c=d+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=d+56|0;e=d+60|0;i=d+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,g|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;c=k[i>>2]|0;if(c)j0a(c);c=k[e>>2]|0;if(!c)Sc(g|0);j0a(c);Sc(g|0)}g=k[i>>2]|0;if(g)j0a(g);g=k[e>>2]|0;if(g)j0a(g);g=k[h>>2]|0;k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;e=d+60|0;i=d+72|0;c=g+48|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=k[i>>2]|0;if(g)j0a(g);g=k[e>>2]|0;if(!g)Sc(h|0);j0a(g);Sc(h|0)}h=k[i>>2]|0;if(h)j0a(h);h=k[e>>2]|0;if(h)j0a(h);k[d>>2]=1;k[d+8>>2]=85;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;e=d+60|0;i=d+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,c|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;c=k[i>>2]|0;if(c)j0a(c);c=k[e>>2]|0;if(!c)Sc(d|0);j0a(c);Sc(d|0)}else{d=k[i>>2]|0;if(d)j0a(d);d=k[e>>2]|0;if(!d){r=b;return}j0a(d);r=b;return}}function hja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+32|0;e=d+24|0;f=d+12|0;g=d;q2a(f,278976,6);x=0;h=Ta(572,c|0,0)|0;i=x;x=0;if(!(i&1)?(x=0,fb(321,e|0,h|0,f|0),h=x,x=0,!(h&1)):0){h=k[e>>2]|0;k[a>>2]=41088;k[a+4>>2]=b;k[a+8>>2]=h;h=k[e+4>>2]|0;if(h)j0a(h);K2a(f);k[a>>2]=40832;k[a+12>>2]=c;a=Vf[k[(k[c>>2]|0)+36>>2]&1023](c)|0;q2a(g,329672,0);x=0;pa(57,a|0,g|0,450,259819,260910);a=x;x=0;if(!(a&1)){K2a(g);r=d;return}d=Hc()|0;a=M;K2a(g);j=a;l=d;Sc(l|0)}d=Hc()|0;a=M;K2a(f);j=a;l=d;Sc(l|0)}function ija(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;b=r;r=r+96|0;d=b;e=b+80|0;f=a+4|0;k[e>>2]=k[f>>2];yia(e,k[a+12>>2]|0,0);if(!c){r=b;return}c=k[f>>2]|0;k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;a=d+60|0;e=d+72|0;g=c+48|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,g|0,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;c=k[e>>2]|0;if(c)j0a(c);c=k[a>>2]|0;if(!c)Sc(f|0);j0a(c);Sc(f|0)}f=k[e>>2]|0;if(f)j0a(f);f=k[a>>2]|0;if(f)j0a(f);k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;a=d+60|0;e=d+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,g|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;g=k[e>>2]|0;if(g)j0a(g);g=k[a>>2]|0;if(!g)Sc(d|0);j0a(g);Sc(d|0)}else{d=k[e>>2]|0;if(d)j0a(d);d=k[a>>2]|0;if(d)j0a(d);r=b;return}}function jja(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+96|0;b=c;e=c+80|0;f=a+4|0;g=k[f>>2]|0;if(d){k[b>>2]=1;k[b+8>>2]=144;k[b+40>>2]=1;d=b+48|0;k[d>>2]=-1;k[d+4>>2]=-1;d=b+56|0;h=b+60|0;i=b+72|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;x=0;Ta(539,g+48|0,b|0)|0;d=x;x=0;if(d&1){d=Hc()|0;j=k[i>>2]|0;if(j)j0a(j);j=k[h>>2]|0;if(!j)Sc(d|0);j0a(j);Sc(d|0)}else{d=k[i>>2]|0;if(d)j0a(d);d=k[h>>2]|0;if(d)j0a(d);l=k[f>>2]|0;k[e>>2]=l;m=a+12|0;n=k[m>>2]|0;Gia(e,n);r=c;return}}else{k[b>>2]=1;k[b+8>>2]=129;k[b+40>>2]=1;d=b+48|0;k[d>>2]=-1;k[d+4>>2]=-1;d=b+56|0;h=b+60|0;i=b+72|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;x=0;Ta(539,g+48|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;g=k[i>>2]|0;if(g)j0a(g);g=k[h>>2]|0;if(!g)Sc(b|0);j0a(g);Sc(b|0)}else{b=k[i>>2]|0;if(b)j0a(b);b=k[h>>2]|0;if(b)j0a(b);l=k[f>>2]|0;k[e>>2]=l;m=a+12|0;n=k[m>>2]|0;Gia(e,n);r=c;return}}}function kja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+96|0;d=b;e=b+80|0;f=a+4|0;if(c){g=k[f>>2]|0;k[e>>2]=g;h=a+12|0;i=k[h>>2]|0;Fia(e,i);r=b;return}c=k[f>>2]|0;k[d>>2]=1;k[d+8>>2]=128;k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;l=d+60|0;m=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,c+48|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;c=k[m>>2]|0;if(c)j0a(c);c=k[l>>2]|0;if(!c)Sc(d|0);j0a(c);Sc(d|0)}else{d=k[m>>2]|0;if(d)j0a(d);d=k[l>>2]|0;if(d)j0a(d);g=k[f>>2]|0;k[e>>2]=g;h=a+12|0;i=k[h>>2]|0;Fia(e,i);r=b;return}}function lja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;k[a+4>>2]=b;k[a+8>>2]=0;k[a>>2]=40856;b=a+12|0;k[b>>2]=0;d=a+16|0;k[d>>2]=0;k[a+20>>2]=0;k[b>>2]=k[c>>2];b=c+4|0;k[d>>2]=k[b>>2];d=c+8|0;k[a+20>>2]=k[d>>2];k[d>>2]=0;k[b>>2]=0;k[c>>2]=0;return}function mja(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=k[a+12>>2]|0;c=k[a+16>>2]|0;if((b|0)==(c|0)){d=0;return d|0}else{e=b;f=0}while(1){b=k[e>>2]|0;if(!b)g=f;else g=(Vf[k[k[b>>2]>>2]&1023](b)|0)+f|0;e=e+4|0;if((e|0)==(c|0)){d=g;break}else f=g}return d|0}function nja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+32|0;e=d+20|0;f=d+8|0;g=d+4|0;h=d;i=Vf[k[k[a>>2]>>2]&1023](a)|0;j=a+4|0;l=(k[j>>2]|0)+136|0;m=(k[l>>2]|0)>-1;q2a(e,329672,0);x=0;pa(57,m|0,e|0,57,268696,268754);m=x;x=0;if(m&1){m=Hc()|0;K2a(e);Sc(m|0)}K2a(e);m=k[l>>2]|0;l=k[a+12>>2]|0;n=k[a+16>>2]|0;if((l|0)==(n|0)){r=d;return}a=c^1;o=l;while(1){if(k[o>>2]|0){l=(k[j>>2]|0)+136|0;p=(k[l>>2]|0)>-1;q2a(e,329672,0);x=0;pa(57,p|0,e|0,57,268696,268754);p=x;x=0;if(p&1){q=8;break}K2a(e);p=((k[l>>2]|0)+i|0)>>>0>=m>>>0;q2a(f,329672,0);x=0;pa(57,p|0,f|0,501,259819,261032);p=x;x=0;if(p&1){q=16;break}K2a(f);p=(k[j>>2]|0)+136|0;l=(k[p>>2]|0)>-1;q2a(e,329672,0);x=0;pa(57,l|0,e|0,57,268696,268754);l=x;x=0;if(l&1){q=11;break}K2a(e);l=(k[p>>2]|0)+i|0;p=l-m|0;s=k[o>>2]|0;do if(Vf[k[k[s>>2]>>2]&1023](s)|0)if(c){t=k[o>>2]|0;if(p>>>0<=(Vf[k[k[t>>2]>>2]&1023](t)|0)>>>0)break;k[g>>2]=k[j>>2];t=k[o>>2]|0;lla(g,p,p-(Vf[k[k[t>>2]>>2]&1023](t)|0)|0);break}else{if(!((l|0)!=(m|0)&a))break;k[h>>2]=k[j>>2];t=k[o>>2]|0;sla(h,p,Vf[k[k[t>>2]>>2]&1023](t)|0);break}while(0);p=k[o>>2]|0;jg[k[(k[p>>2]|0)+4>>2]&511](p,b,1)}o=o+4|0;if((o|0)==(n|0)){q=5;break}}if((q|0)==5){r=d;return}else if((q|0)==8){d=Hc()|0;K2a(e);Sc(d|0)}else if((q|0)==11){d=Hc()|0;K2a(e);Sc(d|0)}else if((q|0)==16){q=Hc()|0;K2a(f);Sc(q|0)}}function oja(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+48|0;e=d+36|0;f=d+24|0;g=d+12|0;h=d+8|0;i=d+4|0;j=d;l=Vf[k[k[a>>2]>>2]&1023](a)|0;m=iDa(b,168,6752,0)|0;if(!m)BBa();n=m+24|0;o=m+28|0;m=a+12|0;p=a+16|0;q=((k[o>>2]|0)-(k[n>>2]|0)>>3|0)==((k[p>>2]|0)-(k[m>>2]|0)>>2|0);q2a(f,329672,0);x=0;pa(57,q|0,f|0,519,259819,261128);q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(f);t=q;u=s;Sc(t|0)}K2a(f);f=k[m>>2]|0;s=(k[p>>2]|0)-f>>2;q=a+4|0;if(!s){v=q;w=k[v>>2]|0;k[j>>2]=w;Dla(j,b);r=d;return}a=f;f=s;s=0;y=0;z=l;while(1){l=k[o>>2]|0;A=k[n>>2]|0;B=(k[q>>2]|0)+136|0;C=(k[B>>2]|0)>-1;q2a(e,329672,0);x=0;pa(57,C|0,e|0,57,268696,268754);C=x;x=0;if(C&1){D=10;break}C=s+-1|0;K2a(e);E=k[B>>2]|0;B=A+(C+(l-A>>3)<<3)|0;A=a+(C+f<<2)|0;C=(k[B>>2]|0)!=0^(k[A>>2]|0)!=0^1;q2a(g,329672,0);x=0;pa(57,C|0,g|0,527,259819,261128);C=x;x=0;if(C&1){D=13;break}K2a(g);if(!(k[A>>2]|0))F=z;else{C=k[B>>2]|0;l=(Vf[k[(k[C>>2]|0)+60>>2]&1023](C)|0)+z|0;k[h>>2]=k[q>>2];C=k[B>>2]|0;sla(h,l,Vf[k[(k[C>>2]|0)+60>>2]&1023](C)|0);k[i>>2]=k[q>>2];C=k[B>>2]|0;G=Vf[k[(k[C>>2]|0)+60>>2]&1023](C)|0;C=k[A>>2]|0;lla(i,G,Vf[k[k[C>>2]>>2]&1023](C)|0);C=k[A>>2]|0;ng[k[(k[C>>2]|0)+8>>2]&255](C,k[B>>2]|0,c,1);B=(k[q>>2]|0)+136|0;C=(k[B>>2]|0)>-1;q2a(e,329672,0);x=0;pa(57,C|0,e|0,57,268696,268754);C=x;x=0;if(C&1){D=15;break}K2a(e);F=l-E+(k[B>>2]|0)|0}B=y+1|0;a=k[m>>2]|0;f=(k[p>>2]|0)-a>>2;if(f>>>0<=B>>>0){v=q;D=7;break}else{s=~y;y=B;z=F}}if((D|0)==7){w=k[v>>2]|0;k[j>>2]=w;Dla(j,b);r=d;return}else if((D|0)==10){d=Hc()|0;K2a(e);Sc(d|0)}else if((D|0)==13){d=Hc()|0;b=M;K2a(g);t=d;u=b;Sc(t|0)}else if((D|0)==15){D=Hc()|0;K2a(e);Sc(D|0)}}function pja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d;if(c){c=a+12|0;f=a+16|0;g=k[f>>2]|0;h=k[c>>2]|0;i=g-h>>2;if(!i){r=d;return}else{j=i;l=g;m=h;n=0}while(1){h=k[m+(j-n<<2)>>2]|0;if(!h){o=m;p=l}else{jg[k[(k[h>>2]|0)+12>>2]&511](h,b,1);o=k[c>>2]|0;p=k[f>>2]|0}n=n+1|0;j=p-o>>2;if(j>>>0<=n>>>0)break;else{l=p;m=o}}r=d;return}o=Vf[k[k[a>>2]>>2]&1023](a)|0;m=k[a+12>>2]|0;p=k[a+16>>2]|0;if((m|0)==(p|0)){r=d;return}l=a+4|0;a=m;m=o;while(1){o=k[a>>2]|0;if(!o)q=m;else{if(Vf[k[k[o>>2]>>2]&1023](o)|0){k[e>>2]=k[l>>2];o=k[a>>2]|0;sla(e,m,Vf[k[k[o>>2]>>2]&1023](o)|0)}o=k[a>>2]|0;jg[k[(k[o>>2]|0)+12>>2]&511](o,b,0);o=k[a>>2]|0;q=m-(Vf[k[k[o>>2]>>2]&1023](o)|0)|0}a=a+4|0;if((a|0)==(p|0))break;else m=q}r=d;return}function qja(){k[10333]=0;k[10334]=0;k[10335]=0;S8(41052,1);return}function rja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(20)|0;k[g>>2]=31456;h=b+4|0;i=k[h+4>>2]|0;j=g+4|0;k[j>>2]=k[h>>2];k[j+4>>2]=i;k[g+12>>2]=k[b+12>>2];i=k[b+16>>2]|0;k[g+16>>2]=i;if(i)h0a(i);k[d>>2]=g;i=d+4|0;k[i>>2]=0;x=0;fb(250,d|0,g|0,i|0);g=x;x=0;if(g&1){g=Hc()|0;b=k[i>>2]|0;if(!b)Sc(g|0);i=b+4|0;j=k[i>>2]|0;k[i>>2]=j+-1;if((j|0)!=1)Sc(g|0);x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);j=x;x=0;if(j&1){l=Hc(0)|0;m=M;Fg(l)}j=b+8|0;i=k[j>>2]|0;k[j>>2]=i+-1;if((i|0)!=1)Sc(g|0);x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){l=Hc(0)|0;m=M;Fg(l)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;l=k[g>>2]|0;do if(!l){x=0;m=Ba(563,32)|0;b=x;x=0;if(b&1){b=Hc()|0;n=M;o=b;p=d+4|0;break}else{k[m>>2]=21100;b=m+8|0;k[b>>2]=0;k[m+12>>2]=0;k[m+4>>2]=b;b=m+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[g>>2]=m;k[m+28>>2]=1;q=m;s=15;break}}else{q=l;s=15}while(0);do if((s|0)==15){l=k[(k[q>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;m=d+4|0;b=k[m>>2]|0;k[g>>2]=b;if(b){i=b+4|0;k[i>>2]=(k[i>>2]|0)+1}k[f>>2]=4800;x=0;fb(l|0,q|0,e|0,f|0);l=x;x=0;if(l&1){l=Hc()|0;i=M;b=k[g>>2]|0;if(!b){n=i;o=l;p=m;break}j=b+4|0;h=k[j>>2]|0;k[j>>2]=h+-1;if((h|0)!=1){n=i;o=l;p=m;break}x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);h=x;x=0;if(h&1){t=Hc(0)|0;u=M;Fg(t)}h=b+8|0;j=k[h>>2]|0;k[h>>2]=j+-1;if((j|0)!=1){n=i;o=l;p=m;break}x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(!(b&1)){n=i;o=l;p=m;break}t=Hc(0)|0;u=M;Fg(t)}l=k[g>>2]|0;if((l|0)!=0?(g=l+4|0,i=k[g>>2]|0,k[g>>2]=i+-1,(i|0)==1):0){x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);i=x;x=0;if(i&1){v=Hc(0)|0;w=M;Fg(v)}i=l+8|0;g=k[i>>2]|0;k[i>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[l>>2]|0)+12>>2]|0,l|0),l=x,x=0,l&1):0){v=Hc(0)|0;w=M;Fg(v)}}l=k[m>>2]|0;if(!l){r=c;return a|0}m=l+4|0;g=k[m>>2]|0;k[m>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);g=x;x=0;if(g&1){y=Hc(0)|0;z=M;Fg(y)}g=l+8|0;m=k[g>>2]|0;k[g>>2]=m+-1;if((m|0)!=1){r=c;return a|0}x=0;va(k[(k[l>>2]|0)+12>>2]|0,l|0);l=x;x=0;if(l&1){y=Hc(0)|0;z=M;Fg(y)}else{r=c;return a|0}}while(0);a=k[p>>2]|0;if(!a)Sc(o|0);p=a+4|0;c=k[p>>2]|0;k[p>>2]=c+-1;if((c|0)!=1)Sc(o|0);x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){A=Hc(0)|0;B=M;Fg(A)}c=a+8|0;p=k[c>>2]|0;k[c>>2]=p+-1;if((p|0)!=1)Sc(o|0);x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){A=Hc(0)|0;B=M;Fg(A)}else Sc(o|0);return 0}function sja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function tja(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=40992;j=e+-4|0;k[j>>2]=41020;a=e+16|0;k[a>>2]=41044;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=40936;k[f>>2]=40900;k[h>>2]=40960;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1506,f|0);x=0;d=Hc()|0;k[e>>2]=40992;k[j>>2]=41020;k[a>>2]=41044;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function uja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=r;r=r+16|0;e=d;k[a>>2]=0;f=a+4|0;k[f>>2]=0;g=k[b>>2]|0;h=k[b+4>>2]|0;if((g|0)==(h|0)){r=d;return}b=c+4|0;j=c+8|0;l=c+1|0;m=g;g=0;n=0;o=0;a:while(1){p=i[m>>0]|0;q=(p&1)==0;s=(p&255)>>>1;p=q?s:k[m+4>>2]|0;t=i[c>>0]|0;u=(t&1)==0;b:do if((p|0)==((u?(t&255)>>>1:k[b>>2]|0)|0)){v=u?l:k[j>>2]|0;if(q){if(p){w=s;y=m+1|0;z=v;while(1){if((i[y>>0]|0)!=(i[z>>0]|0)){A=n;B=o;C=g;break b}w=w+-1|0;if(!w)break;else{y=y+1|0;z=z+1|0}}}}else if(ZLa(k[m+8>>2]|0,v,p)|0){A=n;B=o;C=g;break}x=0;fb(140,e|0,261273,41);z=x;x=0;if(z&1){D=o;E=17;break a}x=0;pa(57,(g|0)==0|0,e|0,103,285183,261315);z=x;x=0;if(z&1){F=o;E=18;break a}K2a(e);z=k[m+12>>2]|0;y=k[m+16>>2]|0;if(y)h0a(y);k[a>>2]=z;k[f>>2]=y;w=z;if(!n){A=y;B=y;C=w}else{j0a(n);A=y;B=y;C=w}}else{A=n;B=o;C=g}while(0);m=m+24|0;if((m|0)==(h|0)){E=3;break}else{g=C;n=A;o=B}}if((E|0)==3){r=d;return}else if((E|0)==17){d=Hc()|0;G=M;H=d;I=D}else if((E|0)==18){E=Hc()|0;D=M;K2a(e);G=D;H=E;I=F}if(!I)Sc(H|0);j0a(I);Sc(H|0)}function vja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(20)|0;k[g>>2]=31456;h=b+4|0;i=k[h+4>>2]|0;j=g+4|0;k[j>>2]=k[h>>2];k[j+4>>2]=i;k[g+12>>2]=k[b+12>>2];i=k[b+16>>2]|0;k[g+16>>2]=i;if(i)h0a(i);k[d>>2]=g;i=d+4|0;k[i>>2]=0;x=0;fb(250,d|0,g|0,i|0);g=x;x=0;if(g&1){g=Hc()|0;b=k[i>>2]|0;if(!b)Sc(g|0);i=b+4|0;j=k[i>>2]|0;k[i>>2]=j+-1;if((j|0)!=1)Sc(g|0);x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);j=x;x=0;if(j&1){l=Hc(0)|0;m=M;Fg(l)}j=b+8|0;i=k[j>>2]|0;k[j>>2]=i+-1;if((i|0)!=1)Sc(g|0);x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){l=Hc(0)|0;m=M;Fg(l)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;l=k[g>>2]|0;do if(!l){x=0;m=Ba(563,32)|0;b=x;x=0;if(b&1){b=Hc()|0;n=M;o=b;p=d+4|0;break}else{k[m>>2]=21100;b=m+8|0;k[b>>2]=0;k[m+12>>2]=0;k[m+4>>2]=b;b=m+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[g>>2]=m;k[m+28>>2]=1;q=m;s=15;break}}else{q=l;s=15}while(0);do if((s|0)==15){l=k[(k[q>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;m=d+4|0;b=k[m>>2]|0;k[g>>2]=b;if(b){i=b+4|0;k[i>>2]=(k[i>>2]|0)+1}k[f>>2]=4800;x=0;fb(l|0,q|0,e|0,f|0);l=x;x=0;if(l&1){l=Hc()|0;i=M;b=k[g>>2]|0;if(!b){n=i;o=l;p=m;break}j=b+4|0;h=k[j>>2]|0;k[j>>2]=h+-1;if((h|0)!=1){n=i;o=l;p=m;break}x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);h=x;x=0;if(h&1){t=Hc(0)|0;u=M;Fg(t)}h=b+8|0;j=k[h>>2]|0;k[h>>2]=j+-1;if((j|0)!=1){n=i;o=l;p=m;break}x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(!(b&1)){n=i;o=l;p=m;break}t=Hc(0)|0;u=M;Fg(t)}l=k[g>>2]|0;if((l|0)!=0?(g=l+4|0,i=k[g>>2]|0,k[g>>2]=i+-1,(i|0)==1):0){x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);i=x;x=0;if(i&1){v=Hc(0)|0;w=M;Fg(v)}i=l+8|0;g=k[i>>2]|0;k[i>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[l>>2]|0)+12>>2]|0,l|0),l=x,x=0,l&1):0){v=Hc(0)|0;w=M;Fg(v)}}l=k[m>>2]|0;if(!l){r=c;return a|0}m=l+4|0;g=k[m>>2]|0;k[m>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);g=x;x=0;if(g&1){y=Hc(0)|0;z=M;Fg(y)}g=l+8|0;m=k[g>>2]|0;k[g>>2]=m+-1;if((m|0)!=1){r=c;return a|0}x=0;va(k[(k[l>>2]|0)+12>>2]|0,l|0);l=x;x=0;if(l&1){y=Hc(0)|0;z=M;Fg(y)}else{r=c;return a|0}}while(0);a=k[p>>2]|0;if(!a)Sc(o|0);p=a+4|0;c=k[p>>2]|0;k[p>>2]=c+-1;if((c|0)!=1)Sc(o|0);x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){A=Hc(0)|0;B=M;Fg(A)}c=a+8|0;p=k[c>>2]|0;k[c>>2]=p+-1;if((p|0)!=1)Sc(o|0);x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){A=Hc(0)|0;B=M;Fg(A)}else Sc(o|0);return 0}function wja(a){a=a|0;return 0}function xja(a){a=a|0;return 1}function yja(a){a=a|0;return 2}function zja(a){a=a|0;return 2}function Aja(a){a=a|0;return 1}function Bja(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=40992;h=g+-4|0;k[h>>2]=41020;n=g+16|0;k[n>>2]=41044;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=40936;k[c>>2]=40900;k[f>>2]=40960;x=0;xa(824,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,7200,947);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=40992;k[h>>2]=41020;k[n>>2]=41044;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function Cja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=41128;h=g+-4|0;k[h>>2]=41156;i=g+16|0;k[i>>2]=41180;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=41264;k[a>>2]=41220;k[a+20>>2]=41288;k[a+40>>2]=41316;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=41128;k[h>>2]=41156;k[i>>2]=41180;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Dja(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=41128;k[b+-4>>2]=41156;k[b+16>>2]=41180;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Eja(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=41128;k[b+-4>>2]=41156;k[b+16>>2]=41180;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Fja(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(323,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function Gja(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(825,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,7200,947)}function Hja(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=41128;k[a+-4>>2]=41156;k[a+16>>2]=41180;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Ija(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=41128;k[a+-4>>2]=41156;k[a+16>>2]=41180;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Jja(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(323,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function Kja(a){a=a|0;Gja(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Lja(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=41128;k[a+-4>>2]=41156;k[a+16>>2]=41180;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Mja(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=41128;k[a+-4>>2]=41156;k[a+16>>2]=41180;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Nja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=41128;h=g+-4|0;k[h>>2]=41156;i=g+16|0;k[i>>2]=41180;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=41264;k[a>>2]=41220;k[a+20>>2]=41288;k[a+40>>2]=41316;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=41128;k[h>>2]=41156;k[i>>2]=41180;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Oja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=41128;k[h+-4>>2]=41156;k[h+16>>2]=41180;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=41264;k[a>>2]=41220;k[d>>2]=41288;k[a+40>>2]=41316;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function Pja(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=40992;k[b+-4>>2]=41020;k[b+16>>2]=41044;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Qja(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=40992;k[b+-4>>2]=41020;k[b+16>>2]=41044;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Rja(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=40992;k[a+-4>>2]=41020;k[a+16>>2]=41044;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Sja(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=40992;k[a+-4>>2]=41020;k[a+16>>2]=41044;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Tja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+32|0;e=d;xka(e,k[a+8>>2]|0,b);x=0;fb(324,a|0,b|0,c|0);c=x;x=0;if((!(c&1)?(x=0,xa(826,a|0,b|0),b=x,x=0,!(b&1)):0)?(x=0,va(1507,a|0),a=x,x=0,!(a&1)):0){oy(e);r=d;return}d=Hc()|0;oy(e);Sc(d|0)}function Uja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=r;r=r+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;j=a+8|0;l=k[j>>2]|0;m=l+176|0;if((m|0)==(c|0))n=l;else{k[g>>2]=k[c>>2];k[h>>2]=c+4;k[f>>2]=k[g>>2];k[e>>2]=k[h>>2];yka(m,f,e);n=k[j>>2]|0}e=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;f=e+36|0;m=n+212|0;if((m|0)!=(f|0))X$(m,k[f>>2]|0,k[e+40>>2]|0);k[i>>2]=k[j>>2];dla(i);aka(a,b);xma(k[j>>2]|0,b);r=d;return}function Vja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0;c=r;r=r+2192|0;d=c+1792|0;e=c+2168|0;f=c+1712|0;g=c+1632|0;h=c+1552|0;j=c+2156|0;m=c+1472|0;n=c+1392|0;o=c+1312|0;p=c+1232|0;q=c+1152|0;s=c+1072|0;t=c+992|0;u=c+2144|0;v=c+2136|0;w=c+912|0;y=c+832|0;z=c+752|0;A=c+672|0;B=c+2120|0;C=c+2108|0;D=c+592|0;E=c+2104|0;F=c+2072|0;G=c+320|0;H=c+2044|0;I=c+2016|0;J=c+240|0;K=c+512|0;L=c+1928|0;N=c+160|0;O=c+1912|0;P=c+488|0;Q=c+80|0;R=c+408|0;S=c+1884|0;T=c+1872|0;U=c;m4(B,b);k[C+4>>2]=0;k[C+8>>2]=0;V=C+4|0;k[C>>2]=V;x=0;W=Ba(559,b|0)|0;X=x;x=0;if(X&1){X=Hc()|0;Y=X;Z=M;_=k[V>>2]|0;Bka(C,_);$=B+4|0;aa=k[$>>2]|0;Yg(B,aa);Sc(Y|0)}X=a+8|0;ba=(k[X>>2]|0)+48|0;ca=k[ba>>2]|0;k[ba>>2]=ca+1;k[D>>2]=8;k[D+8>>2]=ca;k[D+40>>2]=1;ca=D+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=D+56|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;ca=B+8|0;ba=k[ca>>2]|0;da=(W|0)!=0;do if(da|ba>>>0>5){ea=k[X>>2]|0;k[A>>2]=1;k[A+8>>2]=54;k[A+40>>2]=1;fa=A+48|0;k[fa>>2]=-1;k[fa+4>>2]=-1;fa=A+56|0;ga=A+60|0;ha=A+72|0;ia=ea+48|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[fa+16>>2]=0;x=0;Ta(539,ia|0,A|0)|0;fa=x;x=0;if(fa&1){fa=Hc()|0;ea=M;ja=k[ha>>2]|0;if(ja)j0a(ja);ja=k[ga>>2]|0;if(!ja){ka=ea;la=fa;ma=31;break}j0a(ja);ka=ea;la=fa;ma=31;break}fa=k[ha>>2]|0;if(fa)j0a(fa);fa=k[ga>>2]|0;if(fa)j0a(fa);k[z>>2]=1;k[z+8>>2]=21;k[z+40>>2]=1;fa=z+48|0;k[fa>>2]=-1;k[fa+4>>2]=-1;fa=z+56|0;ga=z+60|0;ha=z+72|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[fa+16>>2]=0;x=0;Ta(539,ia|0,z|0)|0;ia=x;x=0;if(ia&1){ia=Hc()|0;fa=M;ea=k[ha>>2]|0;if(ea)j0a(ea);ea=k[ga>>2]|0;if(!ea){ka=fa;la=ia;ma=31;break}j0a(ea);ka=fa;la=ia;ma=31;break}ia=k[ha>>2]|0;if(ia)j0a(ia);ia=k[ga>>2]|0;if(ia)j0a(ia);x=0;fb(315,y|0,(k[X>>2]|0)+48|0,D|0);ia=x;x=0;if(ia&1)ma=30;else{ia=k[y+72>>2]|0;if(ia)j0a(ia);ia=k[y+60>>2]|0;if(ia)j0a(ia);na=k[ca>>2]|0;ma=32}}else{na=ba;ma=32}while(0);a:do if((ma|0)==32){do if(na){k[E>>2]=k[X>>2];x=0;fb(247,F|0,k[10453]<<3|0,0);ba=x;x=0;if(ba&1){ma=30;break a}x=0;Va(96,E|0,0,F|0,1,0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;ca=M;k[F>>2]=20456;xh(F+12|0,k[F+16>>2]|0);y=k[F+8>>2]|0;if(!y){oa=ba;qa=ca;break a}k0a(y);oa=ba;qa=ca;break a}else{k[F>>2]=20456;xh(F+12|0,k[F+16>>2]|0);ca=k[F+8>>2]|0;if(!ca)break;k0a(ca);break}}while(0);ca=k[B>>2]|0;ba=B+4|0;b:do if((ca|0)!=(ba|0)){y=G+8|0;z=G+16|0;A=G+20|0;ia=G+48|0;ga=G+56|0;ha=G+60|0;fa=G+64|0;ea=G+68|0;ja=G+80|0;ra=t+8|0;sa=t+40|0;ta=t+48|0;ua=t+56|0;va=t+60|0;wa=t+72|0;ya=s+8|0;za=s+12|0;Aa=s+40|0;Ca=s+48|0;Da=s+56|0;Ea=s+60|0;Fa=s+72|0;Ga=q+8|0;Ha=q+40|0;Ia=q+48|0;Ja=q+56|0;Ka=q+60|0;La=q+72|0;Ma=p+72|0;Na=p+60|0;Oa=ca;while(1){Pa=Oa+16|0;Qa=(k[X>>2]|0)+48|0;Ra=k[Qa>>2]|0;k[Qa>>2]=Ra+1;k[G>>2]=l[Pa>>0]|l[Pa+1>>0]<<8|l[Pa+2>>0]<<16|l[Pa+3>>0]<<24;k[y>>2]=8;k[z>>2]=Ra;k[A>>2]=k[H>>2];k[A+4>>2]=k[H+4>>2];k[A+8>>2]=k[H+8>>2];k[A+12>>2]=k[H+12>>2];k[A+16>>2]=k[H+16>>2];k[A+20>>2]=k[H+20>>2];k[A+24>>2]=k[H+24>>2];k[ia>>2]=1;k[ga>>2]=-1;k[ha>>2]=-1;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[fa+16>>2]=0;x=0;fb(325,v|0,C|0,G|0);Ra=x;x=0;if(Ra&1){ma=90;break}Ra=k[ja>>2]|0;if(Ra)j0a(Ra);Ra=k[ea>>2]|0;if(Ra)j0a(Ra);Ra=k[X>>2]|0;x=0;fb(140,u|0,295946,34);Qa=x;x=0;if(Qa&1){ma=29;break}K2a(u);k[t>>2]=1;k[ra>>2]=128;k[sa>>2]=1;Qa=ta;k[Qa>>2]=-1;k[Qa+4>>2]=-1;Qa=Ra+48|0;k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua+12>>2]=0;k[ua+16>>2]=0;x=0;Ta(539,Qa|0,t|0)|0;Ra=x;x=0;if(Ra&1){ma=57;break}Ra=k[wa>>2]|0;if(Ra)j0a(Ra);Ra=k[va>>2]|0;if(Ra)j0a(Ra);Ra=((l[Oa+17>>0]|l[Pa>>0]<<8)<<8|l[Oa+18>>0])<<8|l[Oa+19>>0];k[s>>2]=2;k[ya>>2]=Ra;k[za>>2]=k[I>>2];k[za+4>>2]=k[I+4>>2];k[za+8>>2]=k[I+8>>2];k[za+12>>2]=k[I+12>>2];k[za+16>>2]=k[I+16>>2];k[za+20>>2]=k[I+20>>2];k[za+24>>2]=k[I+24>>2];k[Aa>>2]=1;Ra=Ca;k[Ra>>2]=-1;k[Ra+4>>2]=-1;k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;k[Da+12>>2]=0;k[Da+16>>2]=0;x=0;Ta(539,Qa|0,s|0)|0;Ra=x;x=0;if(Ra&1){ma=66;break}Ra=k[Fa>>2]|0;if(Ra)j0a(Ra);Ra=k[Ea>>2]|0;if(Ra)j0a(Ra);k[q>>2]=1;k[Ga>>2]=20;k[Ha>>2]=1;Ra=Ia;k[Ra>>2]=-1;k[Ra+4>>2]=-1;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[Ja+16>>2]=0;x=0;Ta(539,Qa|0,q|0)|0;Qa=x;x=0;if(Qa&1){ma=75;break}Qa=k[La>>2]|0;if(Qa)j0a(Qa);Qa=k[Ka>>2]|0;if(Qa)j0a(Qa);Qa=k[X>>2]|0;x=0;Ra=Ta(599,C|0,Pa|0)|0;Pa=x;x=0;if(Pa&1){ma=29;break}x=0;fb(315,p|0,Qa+48|0,Ra|0);Ra=x;x=0;if(Ra&1){ma=29;break}Ra=k[Ma>>2]|0;if(Ra)j0a(Ra);Ra=k[Na>>2]|0;if(Ra)j0a(Ra);Ra=k[Oa+4>>2]|0;if(!Ra){Qa=Oa;while(1){Pa=k[Qa+8>>2]|0;if((k[Pa>>2]|0)==(Qa|0)){Sa=Pa;break}else Qa=Pa}}else{Qa=Ra;while(1){Pa=k[Qa>>2]|0;if(!Pa){Sa=Qa;break}else Qa=Pa}}if((Sa|0)==(ba|0))break b;else Oa=Sa}if((ma|0)==29){Oa=Hc()|0;ka=M;la=Oa;ma=31;break a}else if((ma|0)==57){Oa=Hc()|0;Na=M;Ma=k[wa>>2]|0;if(Ma)j0a(Ma);Ma=k[va>>2]|0;if(!Ma){ka=Na;la=Oa;ma=31;break a}j0a(Ma);ka=Na;la=Oa;ma=31;break a}else if((ma|0)==66){Oa=Hc()|0;Na=M;Ma=k[Fa>>2]|0;if(Ma)j0a(Ma);Ma=k[Ea>>2]|0;if(!Ma){ka=Na;la=Oa;ma=31;break a}j0a(Ma);ka=Na;la=Oa;ma=31;break a}else if((ma|0)==75){Oa=Hc()|0;Na=M;Ma=k[La>>2]|0;if(Ma)j0a(Ma);Ma=k[Ka>>2]|0;if(!Ma){ka=Na;la=Oa;ma=31;break a}j0a(Ma);ka=Na;la=Oa;ma=31;break a}else if((ma|0)==90){Oa=Hc()|0;Na=M;Ma=k[ja>>2]|0;if(Ma)j0a(Ma);Ma=k[ea>>2]|0;if(!Ma){oa=Oa;qa=Na;break a}j0a(Ma);oa=Oa;qa=Na;break a}}while(0);x=0;fb(314,w|0,(k[X>>2]|0)+48|0,D|0);ca=x;x=0;if(!(ca&1)){ca=k[w+72>>2]|0;if(ca)j0a(ca);ca=k[w+60>>2]|0;if(ca)j0a(ca);x=0;Ta(539,(k[X>>2]|0)+48|0,D|0)|0;ca=x;x=0;if(!(ca&1)){c:do if(!da){ca=k[X>>2]|0;k[N>>2]=4;k[N+8>>2]=0;k[N+40>>2]=1;Na=N+48|0;k[Na>>2]=-1;k[Na+4>>2]=-1;Na=N+56|0;k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;k[Na+12>>2]=0;k[Na+16>>2]=0;x=0;fb(314,m|0,ca+48|0,N|0);ca=x;x=0;if(ca&1){ca=Hc()|0;oa=ca;qa=M;break a}ca=k[m+72>>2]|0;if(ca)j0a(ca);ca=k[m+60>>2]|0;if(ca)j0a(ca)}else{if(!(i[W+79>>0]|0)){ca=k[X>>2]|0;k[o>>2]=1;k[o+8>>2]=52;k[o+40>>2]=1;Na=o+48|0;k[Na>>2]=-1;k[Na+4>>2]=-1;Na=o+56|0;Oa=o+60|0;Ma=o+72|0;k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;k[Na+12>>2]=0;k[Na+16>>2]=0;x=0;Ta(539,ca+48|0,o|0)|0;ca=x;x=0;if(ca&1){ca=Hc()|0;Na=M;Ja=k[Ma>>2]|0;if(Ja)j0a(Ja);Ja=k[Oa>>2]|0;if(!Ja){ka=Na;la=ca;ma=31;break a}j0a(Ja);ka=Na;la=ca;ma=31;break a}ca=k[Ma>>2]|0;if(ca)j0a(ca);ca=k[Oa>>2]|0;if(ca)j0a(ca);ca=k[X>>2]|0;k[J>>2]=4;k[J+8>>2]=0;k[J+40>>2]=1;Oa=J+48|0;k[Oa>>2]=-1;k[Oa+4>>2]=-1;Oa=J+56|0;k[Oa>>2]=0;k[Oa+4>>2]=0;k[Oa+8>>2]=0;k[Oa+12>>2]=0;k[Oa+16>>2]=0;x=0;fb(315,n|0,ca+48|0,J|0);ca=x;x=0;if(ca&1){ca=Hc()|0;oa=ca;qa=M;break a}ca=k[n+72>>2]|0;if(ca)j0a(ca);ca=k[n+60>>2]|0;if(ca)j0a(ca)}x=0;xa(827,K|0,k[X>>2]|0);ca=x;x=0;if(ca&1){ma=30;break a}x=0;xa(k[(k[W>>2]|0)+12>>2]|0,W|0,a|0);ca=x;x=0;do if((!(ca&1)?(x=0,Ta(539,(k[X>>2]|0)+48|0,K|0)|0,Oa=x,x=0,!(Oa&1)):0)?(x=0,fb(143,L|0,W|0,1),Oa=x,x=0,!(Oa&1)):0){x=0;fb(326,a|0,L+36|0,(i[b+72>>0]|0)!=0|0);Oa=x;x=0;if(Oa&1){Oa=Hc()|0;Ma=M;Dg(L);Ua=Oa;Wa=Ma;break}Dg(L);Ma=k[K+72>>2]|0;if(Ma)j0a(Ma);Ma=k[K+60>>2]|0;if(Ma)j0a(Ma);break c}else ma=123;while(0);if((ma|0)==123){ca=Hc()|0;Ua=ca;Wa=M}ca=k[K+72>>2]|0;if(ca)j0a(ca);ca=k[K+60>>2]|0;if(!ca){oa=Ua;qa=Wa;break a}j0a(ca);oa=Ua;qa=Wa;break a}while(0);ca=k[B>>2]|0;d:do if((ca|0)!=(ba|0)){ea=b+72|0;ja=h+8|0;Ka=h+40|0;La=h+48|0;Ea=h+56|0;Fa=h+60|0;va=h+72|0;wa=Q+8|0;Ma=Q+40|0;Oa=Q+48|0;Na=Q+56|0;Ja=g+72|0;Ia=g+60|0;Ha=k[10453]|0;Ga=f+8|0;Da=f+12|0;Ca=f+40|0;Aa=f+48|0;za=f+56|0;ya=f+60|0;ua=f+72|0;ta=d+72|0;sa=d+60|0;ra=U+72|0;fa=U+60|0;ha=R+72|0;ga=R+60|0;ia=T+4|0;A=ca;while(1){z=A+20|0;y=k[(k[z>>2]|0)+84>>2]|0;x=0;fb(140,O|0,329672,0);Qa=x;x=0;if(Qa&1){ma=28;break}x=0;pa(57,(y|0)!=0|0,O|0,262,261497,261543);y=x;x=0;if(y&1){ma=167;break}K2a(O);y=k[X>>2]|0;Qa=(k[z>>2]|0)+84|0;Ra=k[Qa>>2]|0;x=0;fb(140,j|0,285127,55);Pa=x;x=0;if(Pa&1){ma=28;break}x=0;pa(57,(Ra|0)!=0|0,j|0,917,285183,285227);Ra=x;x=0;if(Ra&1){ma=147;break}K2a(j);x=0;fb(327,P|0,y|0,k[Qa>>2]|0);Qa=x;x=0;if(Qa&1){ma=28;break}Qa=k[X>>2]|0;x=0;y=Ta(599,C|0,A+16|0)|0;Ra=x;x=0;if(Ra&1){ma=168;break}x=0;Ta(539,Qa+48|0,y|0)|0;y=x;x=0;if(y&1){ma=168;break}if(!((i[(k[z>>2]|0)+81>>0]|i[ea>>0])<<24>>24)){y=k[X>>2]|0;k[h>>2]=1;k[ja>>2]=52;k[Ka>>2]=1;Qa=La;k[Qa>>2]=-1;k[Qa+4>>2]=-1;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[Ea+16>>2]=0;x=0;Ta(539,y+48|0,h|0)|0;y=x;x=0;if(y&1){ma=157;break}y=k[va>>2]|0;if(y)j0a(y);y=k[Fa>>2]|0;if(y)j0a(y);y=k[X>>2]|0;k[Q>>2]=4;k[wa>>2]=0;k[Ma>>2]=1;Qa=Oa;k[Qa>>2]=-1;k[Qa+4>>2]=-1;k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;k[Na+12>>2]=0;k[Na+16>>2]=0;x=0;fb(315,g|0,y+48|0,Q|0);y=x;x=0;if(y&1){ma=170;break}y=k[Ja>>2]|0;if(y)j0a(y);y=k[Ia>>2]|0;if(y)j0a(y)}x=0;xa(827,R|0,k[X>>2]|0);y=x;x=0;if(y&1){ma=168;break}y=(k[X>>2]|0)+48|0;k[f>>2]=2;k[Ga>>2]=Ha;k[Da>>2]=k[S>>2];k[Da+4>>2]=k[S+4>>2];k[Da+8>>2]=k[S+8>>2];k[Da+12>>2]=k[S+12>>2];k[Da+16>>2]=k[S+16>>2];k[Da+20>>2]=k[S+20>>2];k[Da+24>>2]=k[S+24>>2];k[Ca>>2]=1;Qa=Aa;k[Qa>>2]=-1;k[Qa+4>>2]=-1;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[za+16>>2]=0;x=0;Ta(539,y|0,f|0)|0;y=x;x=0;if(y&1){ma=177;break}y=k[ua>>2]|0;if(y)j0a(y);y=k[ya>>2]|0;if(y)j0a(y);x=0;xa(591,T|0,k[z>>2]|0);y=x;x=0;if(y&1){ma=214;break}x=0;fb(328,a|0,T|0,0);y=x;x=0;if(y&1){ma=216;break}y=k[T>>2]|0;if(y){Qa=k[ia>>2]|0;if((Qa|0)==(y|0))Xa=y;else{Ra=Qa;while(1){Qa=Ra+-8|0;k[ia>>2]=Qa;Pa=k[Ra+-4>>2]|0;if(!Pa)Ya=Qa;else{j0a(Pa);Ya=k[ia>>2]|0}if((Ya|0)==(y|0))break;else Ra=Ya}Xa=k[T>>2]|0}OBa(Xa)}Ra=k[X>>2]|0;y=(k[z>>2]|0)+84|0;Pa=k[y>>2]|0;x=0;fb(140,e|0,285127,55);Qa=x;x=0;if(Qa&1){ma=214;break}x=0;pa(57,(Pa|0)!=0|0,e|0,917,285183,285227);Pa=x;x=0;if(Pa&1){ma=192;break}K2a(e);x=0;fb(329,U|0,Ra|0,k[y>>2]|0);y=x;x=0;if(y&1){ma=214;break}x=0;fb(314,d|0,Ra+48|0,U|0);Ra=x;x=0;if(Ra&1){ma=223;break}Ra=k[ta>>2]|0;if(Ra)j0a(Ra);Ra=k[sa>>2]|0;if(Ra)j0a(Ra);Ra=k[ra>>2]|0;if(Ra)j0a(Ra);Ra=k[fa>>2]|0;if(Ra)j0a(Ra);x=0;Ta(539,(k[X>>2]|0)+48|0,R|0)|0;Ra=x;x=0;if(Ra&1){ma=214;break}x=0;fb(326,a|0,(k[z>>2]|0)+36|0,(i[ea>>0]|0)!=0|0);Ra=x;x=0;if(Ra&1){ma=214;break}Ra=k[ha>>2]|0;if(Ra)j0a(Ra);Ra=k[ga>>2]|0;if(Ra)j0a(Ra);oy(P);Ra=k[A+4>>2]|0;if(!Ra){y=A;while(1){Pa=k[y+8>>2]|0;if((k[Pa>>2]|0)==(y|0)){Za=Pa;break}else y=Pa}}else{y=Ra;while(1){z=k[y>>2]|0;if(!z){Za=y;break}else y=z}}if((Za|0)==(ba|0))break d;else A=Za}switch(ma|0){case 28:{A=Hc()|0;ka=M;la=A;ma=31;break a;break}case 147:{A=Hc()|0;ea=M;K2a(j);ka=ea;la=A;ma=31;break a;break}case 157:{A=Hc()|0;ea=M;sa=k[va>>2]|0;if(sa)j0a(sa);sa=k[Fa>>2]|0;if(!sa){_a=ea;$a=A;ma=169}else{j0a(sa);_a=ea;$a=A;ma=169}break}case 167:{A=Hc()|0;ea=M;K2a(O);oa=A;qa=ea;break a;break}case 168:{ea=Hc()|0;_a=M;$a=ea;ma=169;break}case 170:{ab=Hc()|0;bb=M;break}case 177:{ea=Hc()|0;A=M;sa=k[ua>>2]|0;if(sa)j0a(sa);sa=k[ya>>2]|0;if(!sa){cb=A;db=ea;ma=215}else{j0a(sa);cb=A;db=ea;ma=215}break}case 192:{ea=Hc()|0;A=M;K2a(e);cb=A;db=ea;ma=215;break}case 214:{ea=Hc()|0;cb=M;db=ea;ma=215;break}case 216:{ea=Hc()|0;A=M;sa=k[T>>2]|0;if(!sa){eb=ea;gb=A;ma=227}else{ta=k[ia>>2]|0;if((ta|0)==(sa|0))hb=sa;else{za=ta;while(1){ta=za+-8|0;k[ia>>2]=ta;Aa=k[za+-4>>2]|0;if(!Aa)ib=ta;else{j0a(Aa);ib=k[ia>>2]|0}if((ib|0)==(sa|0))break;else za=ib}hb=k[T>>2]|0}OBa(hb);eb=ea;gb=A;ma=227}break}case 223:{za=Hc()|0;sa=M;ia=k[ra>>2]|0;if(ia)j0a(ia);ia=k[fa>>2]|0;if(!ia){eb=za;gb=sa;ma=227}else{j0a(ia);eb=za;gb=sa;ma=227}break}}if((ma|0)==169){ab=$a;bb=_a}else if((ma|0)==215){eb=db;gb=cb;ma=227}if((ma|0)==227){sa=k[ha>>2]|0;if(sa)j0a(sa);sa=k[ga>>2]|0;if(!sa){ab=eb;bb=gb}else{j0a(sa);ab=eb;bb=gb}}oy(P);oa=ab;qa=bb;break a}while(0);ca=k[D+72>>2]|0;if(ca)j0a(ca);ca=k[D+60>>2]|0;if(!ca){jb=k[V>>2]|0;Bka(C,jb);kb=k[ba>>2]|0;Yg(B,kb);r=c;return}j0a(ca);jb=k[V>>2]|0;Bka(C,jb);kb=k[ba>>2]|0;Yg(B,kb);r=c;return}else ma=30}else ma=30}while(0);if((ma|0)==30){c=Hc()|0;ka=M;la=c;ma=31}if((ma|0)==31){oa=la;qa=ka}ka=k[D+72>>2]|0;if(ka)j0a(ka);ka=k[D+60>>2]|0;if(!ka){Y=oa;Z=qa;_=k[V>>2]|0;Bka(C,_);$=B+4|0;aa=k[$>>2]|0;Yg(B,aa);Sc(Y|0)}j0a(ka);Y=oa;Z=qa;_=k[V>>2]|0;Bka(C,_);$=B+4|0;aa=k[$>>2]|0;Yg(B,aa);Sc(Y|0)}function Wja(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;d=a+8|0;e=pma(k[d>>2]|0)|0;if(!e){r=b;return}f=e;while(1){Cka((k[d>>2]|0)+48|0,0);Tf[k[(k[f>>2]|0)+12>>2]&2047](f,a);e=(pma(k[d>>2]|0)|0)!=(f|0);q2a(c,261647,28);x=0;pa(57,e|0,c|0,782,261497,261676);e=x;x=0;if(e&1){g=5;break}K2a(c);f=pma(k[d>>2]|0)|0;if(!f){g=6;break}}if((g|0)==5){f=Hc()|0;K2a(c);Sc(f|0)}else if((g|0)==6){r=b;return}}function Xja(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;xka(f,k[a+8>>2]|0,c);x=0;fb(324,a|0,c|0,d|0);d=x;x=0;if(!(d&1)?(x=0,d=Fa(140,a|0,c|0,b|0)|0,b=x,x=0,!(b&1)):0){oy(f);r=e;return d|0}d=Hc()|0;oy(f);Sc(d|0);return 0}function Yja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=r;r=r+576|0;e=d+480|0;f=d+400|0;g=d+320|0;h=d+240|0;i=d+160|0;j=d+80|0;l=d+40|0;m=d;n=d+560|0;_ja(a,b);b=a+8|0;Dka(j,(k[b>>2]|0)+48|0,c+48|0);c=k[b>>2]|0;k[i>>2]=1;k[i+8>>2]=128;k[i+40>>2]=1;o=i+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=i+56|0;p=i+60|0;q=i+72|0;s=c+48|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;x=0;Ta(539,s|0,i|0)|0;i=x;x=0;do if(i&1){o=Hc()|0;c=M;t=k[q>>2]|0;if(t)j0a(t);t=k[p>>2]|0;if(!t){u=c;v=o;w=56}else{j0a(t);u=c;v=o;w=56}}else{o=k[q>>2]|0;if(o)j0a(o);o=k[p>>2]|0;if(o)j0a(o);x=0;Ta(539,s|0,j|0)|0;o=x;x=0;if(!(o&1)){k[l>>2]=0;k[l+32>>2]=1;k[h>>2]=2;o=h+8|0;c=l;t=o+40|0;do{k[o>>2]=k[c>>2];o=o+4|0;c=c+4|0}while((o|0)<(t|0));y=h+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=h+56|0;z=h+60|0;A=h+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,s|0,h|0)|0;y=x;x=0;if(y&1){y=Hc()|0;B=M;C=k[A>>2]|0;if(C)j0a(C);C=k[z>>2]|0;if(!C){u=B;v=y;w=56;break}j0a(C);u=B;v=y;w=56;break}y=k[A>>2]|0;if(y)j0a(y);y=k[z>>2]|0;if(y)j0a(y);k[g>>2]=1;k[g+8>>2]=57;k[g+40>>2]=1;y=g+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=g+56|0;z=g+60|0;A=g+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,s|0,g|0)|0;y=x;x=0;if(y&1){y=Hc()|0;B=M;C=k[A>>2]|0;if(C)j0a(C);C=k[z>>2]|0;if(!C){u=B;v=y;w=56;break}j0a(C);u=B;v=y;w=56;break}y=k[A>>2]|0;if(y)j0a(y);y=k[z>>2]|0;if(y)j0a(y);y=k[b>>2]|0;k[m>>2]=0;k[m+32>>2]=1;z=y+48|0;k[f>>2]=2;o=f+8|0;c=m;t=o+40|0;do{k[o>>2]=k[c>>2];o=o+4|0;c=c+4|0}while((o|0)<(t|0));c=f+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=f+56|0;o=f+60|0;t=f+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,z|0,f|0)|0;c=x;x=0;if(c&1){c=Hc()|0;y=M;A=k[t>>2]|0;if(A)j0a(A);A=k[o>>2]|0;if(!A){u=y;v=c;w=56;break}j0a(A);u=y;v=c;w=56;break}c=k[t>>2]|0;if(c)j0a(c);c=k[o>>2]|0;if(c)j0a(c);k[e>>2]=1;k[e+8>>2]=243;k[e+40>>2]=1;c=e+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=e+56|0;o=e+60|0;t=e+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,z|0,e|0)|0;c=x;x=0;if(c&1){c=Hc()|0;y=M;A=k[t>>2]|0;if(A)j0a(A);A=k[o>>2]|0;if(!A){u=y;v=c;w=56;break}j0a(A);u=y;v=c;w=56;break}c=k[t>>2]|0;if(c)j0a(c);c=k[o>>2]|0;if(c)j0a(c);x=0;va(1507,a|0);c=x;x=0;if(!(c&1)?(c=j+8|0,o=k[j+40>>2]|0,t=k[c>>2]|0,x=0,fb(140,n|0,329672,0),y=x,x=0,!(y&1)):0){x=0;pa(57,o>>>0<2&(t|0)!=-1|0,n|0,157,261497,261739);t=x;x=0;if(t&1){t=Hc()|0;o=M;K2a(n);D=o;E=t;break}K2a(n);t=k[c>>2]|0;c=k[j+72>>2]|0;if(c)j0a(c);c=k[j+60>>2]|0;if(!c){r=d;return t|0}j0a(c);r=d;return t|0}}t=Hc()|0;u=M;v=t;w=56}while(0);if((w|0)==56){D=u;E=v}v=k[j+72>>2]|0;if(v)j0a(v);v=k[j+60>>2]|0;if(!v)Sc(E|0);j0a(v);Sc(E|0);return 0}function Zja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=r;r=r+688|0;e=d+480|0;f=d+400|0;g=d+320|0;h=d+240|0;i=d+160|0;j=d+80|0;l=d+572|0;m=d+40|0;n=d;o=d+560|0;Uja(a,b,c);_ja(a,b);b=a+8|0;c=k[b>>2]|0;$ja(l);x=0;fb(330,j|0,c+48|0,l|0);c=x;x=0;if(c&1){c=Hc()|0;p=M;IE(l);q=p;s=c;Sc(s|0)}IE(l);l=k[b>>2]|0;k[i>>2]=1;k[i+8>>2]=128;k[i+40>>2]=1;c=i+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=i+56|0;p=i+60|0;t=i+72|0;u=l+48|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,u|0,i|0)|0;i=x;x=0;a:do if(i&1){c=Hc()|0;l=M;v=k[t>>2]|0;if(v)j0a(v);v=k[p>>2]|0;if(!v){w=l;y=c;z=58}else{j0a(v);w=l;y=c;z=58}}else{c=k[t>>2]|0;if(c)j0a(c);c=k[p>>2]|0;if(c)j0a(c);x=0;Ta(539,u|0,j|0)|0;c=x;x=0;do if(!(c&1)){k[m>>2]=0;k[m+32>>2]=1;k[h>>2]=2;l=h+8|0;v=m;A=l+40|0;do{k[l>>2]=k[v>>2];l=l+4|0;v=v+4|0}while((l|0)<(A|0));B=h+48|0;k[B>>2]=-1;k[B+4>>2]=-1;B=h+56|0;C=h+60|0;D=h+72|0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[B+12>>2]=0;k[B+16>>2]=0;x=0;Ta(539,u|0,h|0)|0;B=x;x=0;if(B&1){B=Hc()|0;E=M;F=k[D>>2]|0;if(F)j0a(F);F=k[C>>2]|0;if(!F){w=E;y=B;z=58;break a}j0a(F);w=E;y=B;z=58;break a}B=k[D>>2]|0;if(B)j0a(B);B=k[C>>2]|0;if(B)j0a(B);k[g>>2]=1;k[g+8>>2]=57;k[g+40>>2]=1;B=g+48|0;k[B>>2]=-1;k[B+4>>2]=-1;B=g+56|0;C=g+60|0;D=g+72|0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[B+12>>2]=0;k[B+16>>2]=0;x=0;Ta(539,u|0,g|0)|0;B=x;x=0;if(B&1){B=Hc()|0;E=M;F=k[D>>2]|0;if(F)j0a(F);F=k[C>>2]|0;if(!F){w=E;y=B;z=58;break a}j0a(F);w=E;y=B;z=58;break a}B=k[D>>2]|0;if(B)j0a(B);B=k[C>>2]|0;if(B)j0a(B);B=k[b>>2]|0;k[n>>2]=0;k[n+32>>2]=1;C=B+48|0;k[f>>2]=2;l=f+8|0;v=n;A=l+40|0;do{k[l>>2]=k[v>>2];l=l+4|0;v=v+4|0}while((l|0)<(A|0));v=f+48|0;k[v>>2]=-1;k[v+4>>2]=-1;v=f+56|0;l=f+60|0;A=f+72|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;Ta(539,C|0,f|0)|0;v=x;x=0;if(v&1){v=Hc()|0;B=M;D=k[A>>2]|0;if(D)j0a(D);D=k[l>>2]|0;if(!D){w=B;y=v;z=58;break a}j0a(D);w=B;y=v;z=58;break a}v=k[A>>2]|0;if(v)j0a(v);v=k[l>>2]|0;if(v)j0a(v);k[e>>2]=1;k[e+8>>2]=243;k[e+40>>2]=1;v=e+48|0;k[v>>2]=-1;k[v+4>>2]=-1;v=e+56|0;l=e+60|0;A=e+72|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;Ta(539,C|0,e|0)|0;v=x;x=0;if(v&1){v=Hc()|0;B=M;D=k[A>>2]|0;if(D)j0a(D);D=k[l>>2]|0;if(!D){w=B;y=v;z=58;break a}j0a(D);w=B;y=v;z=58;break a}v=k[A>>2]|0;if(v)j0a(v);v=k[l>>2]|0;if(v)j0a(v);x=0;va(1507,a|0);v=x;x=0;if(!(v&1)){v=j+8|0;l=k[j+40>>2]|0;A=k[v>>2]|0;x=0;fb(140,o|0,329672,0);B=x;x=0;if(B&1)break;x=0;pa(57,l>>>0<2&(A|0)!=-1|0,o|0,91,261497,261886);A=x;x=0;if(A&1){A=Hc()|0;l=M;K2a(o);G=l;H=A;break a}K2a(o);A=k[v>>2]|0;v=k[j+72>>2]|0;if(v)j0a(v);v=k[j+60>>2]|0;if(!v){r=d;return A|0}j0a(v);r=d;return A|0}}while(0);c=Hc()|0;w=M;y=c;z=58}while(0);if((z|0)==58){G=w;H=y}y=k[j+72>>2]|0;if(y)j0a(y);y=k[j+60>>2]|0;if(!y){q=G;s=H;Sc(s|0)}j0a(y);q=G;s=H;Sc(s|0);return 0}function _ja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;c=r;r=r+16|0;d=c+12|0;e=c;f=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;g=f+36|0;h=k[g>>2]|0;i=f+40|0;f=k[i>>2]|0;if((h|0)!=(f|0)){j=a+60|0;l=a+64|0;m=l;n=a+64|0;o=a+68|0;p=h;a:do{h=k[p>>2]|0;q=o4(h)|0;if((q|0)!=0?(s=k[q+80>>2]|0,t=k[q+84>>2]|0,(s|0)!=(t|0)):0){q=s;do{s=k[(k[q>>2]|0)+24>>2]|0;u=(Vf[k[(k[s>>2]|0)+16>>2]&1023](s)|0)+24|0;s=k[u>>2]|0;b:do if((s|0)!=0?(u=iDa(s,4520,5312,0)|0,(u|0)!=0):0){v=o4(u)|0;w=k[l>>2]|0;if(w){y=w;do{w=k[y+16>>2]|0;if(v>>>0>>0)z=y;else{if(w>>>0>=v>>>0)break b;z=y+4|0}y=k[z>>2]|0}while((y|0)!=0)}y=(k[q>>2]|0)+32|0;v=o4(u)|0;w=v;A=k[l>>2]|0;do if(A){B=A;while(1){C=k[B+16>>2]|0;if(v>>>0>>0){D=k[B>>2]|0;if(!D){E=B;F=B;G=17;break}else H=D}else{if(C>>>0>=v>>>0){I=B;G=23;break}C=B+4|0;D=k[C>>2]|0;if(!D){J=C;K=B;G=21;break}else H=D}B=H}if((G|0)==17){G=0;k[d>>2]=F;L=E;M=F;G=24;break}else if((G|0)==21){G=0;k[d>>2]=K;L=J;M=K;G=24;break}else if((G|0)==23){G=0;k[d>>2]=I;if(!I){L=d;M=I;G=24;break}else{N=I;break}}}else{k[d>>2]=l;L=l;M=m;G=24}while(0);if((G|0)==24){G=0;v=KBa(24)|0;k[v+16>>2]=w;k[v+20>>2]=0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=M;k[L>>2]=v;A=k[k[j>>2]>>2]|0;if(!A)O=v;else{k[j>>2]=A;O=k[L>>2]|0}ui(k[n>>2]|0,O);k[o>>2]=(k[o>>2]|0)+1;N=v}k[N+20>>2]=y}while(0);q=q+8|0}while((q|0)!=(t|0))}t=k[h+48>>2]|0;q=k[h+52>>2]|0;if((t|0)!=(q|0)){s=t;do{t=k[(k[s>>2]|0)+24>>2]|0;v=(Vf[k[(k[t>>2]|0)+16>>2]&1023](t)|0)+12|0;t=k[v>>2]|0;if(!t)P=0;else P=iDa(t,4520,5312,0)|0;q2a(e,329672,0);x=0;pa(57,(P|0)!=0|0,e|0,128,261497,262061);t=x;x=0;if(t&1){G=54;break a}K2a(e);t=o4(P)|0;v=k[l>>2]|0;c:do if(!v)G=40;else{A=v;while(1){u=k[A+16>>2]|0;if(t>>>0>>0)Q=A;else{if(u>>>0>=t>>>0)break c;Q=A+4|0}A=k[Q>>2]|0;if(!A){G=40;break}}}while(0);if((G|0)==40){G=0;t=(k[s>>2]|0)+32|0;v=o4(P)|0;A=v;y=k[l>>2]|0;do if(y){w=y;while(1){u=k[w+16>>2]|0;if(v>>>0>>0){B=k[w>>2]|0;if(!B){R=w;S=w;G=43;break}else T=B}else{if(u>>>0>=v>>>0){U=w;G=49;break}u=w+4|0;B=k[u>>2]|0;if(!B){V=u;W=w;G=47;break}else T=B}w=T}if((G|0)==43){G=0;k[d>>2]=S;X=R;Y=S;G=50;break}else if((G|0)==47){G=0;k[d>>2]=W;X=V;Y=W;G=50;break}else if((G|0)==49){G=0;k[d>>2]=U;if(!U){X=d;Y=U;G=50;break}else{Z=U;break}}}else{k[d>>2]=l;X=l;Y=m;G=50}while(0);if((G|0)==50){G=0;v=KBa(24)|0;k[v+16>>2]=A;k[v+20>>2]=0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=Y;k[X>>2]=v;y=k[k[j>>2]>>2]|0;if(!y)_=v;else{k[j>>2]=y;_=k[X>>2]|0}ui(k[n>>2]|0,_);k[o>>2]=(k[o>>2]|0)+1;Z=v}k[Z+20>>2]=t}s=s+8|0}while((s|0)!=(q|0))}p=p+4|0}while((p|0)!=(f|0));if((G|0)==54){G=Hc()|0;K2a(e);Sc(G|0)}G=k[i>>2]|0;i=k[g>>2]|0;if((G|0)!=(i|0)){g=G;do{g=g+-4|0;bka(a,k[g>>2]|0)}while((g|0)!=(i|0))}}i=o4(b)|0;if(i){cka(a,i);r=c;return}i=oma(k[a+8>>2]|0,b)|0;if(!i){r=c;return}dka(a,i);r=c;return}function $ja(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;b=r;r=r+1120|0;c=b+1e3|0;d=b+920|0;e=b+840|0;f=b+760|0;g=b+1117|0;h=b+680|0;j=b+600|0;l=b+520|0;m=b+440|0;n=b+1116|0;o=b+400|0;p=b+1115|0;q=b+1114|0;s=b+360|0;t=b+320|0;u=b+1113|0;v=b+280|0;w=b+240|0;y=b+1080|0;z=b+1112|0;A=b+1111|0;B=b+1110|0;C=b+1109|0;D=b+160|0;E=b+80|0;F=b+40|0;G=b;H=b+1108|0;k[a>>2]=1;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+20>>2]=0;k[a+24>>2]=0;k[a+16>>2]=a+20;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=0;k[a+44>>2]=0;k[a+48>>2]=0;k[a+40>>2]=a+44;k[a+56>>2]=0;k[a+60>>2]=0;k[a+52>>2]=a+56;k[a+64>>2]=0;k[a+68>>2]=0;k[a+72>>2]=0;k[a+80>>2]=0;k[a+84>>2]=0;k[a+76>>2]=a+80;k[a+88>>2]=0;k[a+92>>2]=0;k[a+96>>2]=0;k[a+100>>2]=-1;k[a+104>>2]=-1;k[a+108>>2]=0;k[a+112>>2]=0;i[n>>0]=54;x=0;Ta(600,a|0,n|0)|0;n=x;x=0;do if(!(n&1)){k[o>>2]=0;k[o+32>>2]=1;k[m>>2]=2;I=m+8|0;J=o;K=I+40|0;do{k[I>>2]=k[J>>2];I=I+4|0;J=J+4|0}while((I|0)<(K|0));L=m+48|0;k[L>>2]=-1;k[L+4>>2]=-1;L=m+56|0;N=m+60|0;O=m+72|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,a|0,m|0)|0;L=x;x=0;if(L&1){L=Hc()|0;P=M;Q=k[O>>2]|0;if(Q)j0a(Q);Q=k[N>>2]|0;if(!Q){R=P;S=L;IE(a);Sc(S|0)}j0a(Q);R=P;S=L;IE(a);Sc(S|0)}L=k[O>>2]|0;if(L)j0a(L);L=k[N>>2]|0;if(L)j0a(L);i[p>>0]=-128;x=0;L=Ta(600,a|0,p|0)|0;N=x;x=0;if(!(N&1)?(i[q>>0]=55,x=0,Ta(600,L|0,q|0)|0,L=x,x=0,!(L&1)):0){k[s>>2]=32;k[s+32>>2]=1;k[l>>2]=2;I=l+8|0;J=s;K=I+40|0;do{k[I>>2]=k[J>>2];I=I+4|0;J=J+4|0}while((I|0)<(K|0));L=l+48|0;k[L>>2]=-1;k[L+4>>2]=-1;L=l+56|0;N=l+60|0;O=l+72|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,a|0,l|0)|0;L=x;x=0;if(L&1){L=Hc()|0;P=M;Q=k[O>>2]|0;if(Q)j0a(Q);Q=k[N>>2]|0;if(!Q){R=P;S=L;IE(a);Sc(S|0)}j0a(Q);R=P;S=L;IE(a);Sc(S|0)}L=k[O>>2]|0;if(L)j0a(L);L=k[N>>2]|0;if(L)j0a(L);k[t>>2]=0;k[t+32>>2]=1;k[j>>2]=2;I=j+8|0;J=t;K=I+40|0;do{k[I>>2]=k[J>>2];I=I+4|0;J=J+4|0}while((I|0)<(K|0));L=j+48|0;k[L>>2]=-1;k[L+4>>2]=-1;L=j+56|0;N=j+60|0;O=j+72|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,a|0,j|0)|0;L=x;x=0;if(L&1){L=Hc()|0;P=M;Q=k[O>>2]|0;if(Q)j0a(Q);Q=k[N>>2]|0;if(!Q){R=P;S=L;IE(a);Sc(S|0)}j0a(Q);R=P;S=L;IE(a);Sc(S|0)}L=k[O>>2]|0;if(L)j0a(L);L=k[N>>2]|0;if(L)j0a(L);i[u>>0]=54;x=0;Ta(600,a|0,u|0)|0;L=x;x=0;if(!(L&1)){k[v>>2]=0;k[v+32>>2]=1;k[h>>2]=2;I=h+8|0;J=v;K=I+40|0;do{k[I>>2]=k[J>>2];I=I+4|0;J=J+4|0}while((I|0)<(K|0));L=h+48|0;k[L>>2]=-1;k[L+4>>2]=-1;L=h+56|0;N=h+60|0;O=h+72|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,a|0,h|0)|0;L=x;x=0;if(L&1){L=Hc()|0;P=M;Q=k[O>>2]|0;if(Q)j0a(Q);Q=k[N>>2]|0;if(!Q){R=P;S=L;IE(a);Sc(S|0)}j0a(Q);R=P;S=L;IE(a);Sc(S|0)}L=k[O>>2]|0;if(L)j0a(L);L=k[N>>2]|0;if(L)j0a(L);k[w>>2]=0;k[w+32>>2]=1;x=0;fb(331,w|0,262171,g|0);L=x;x=0;if(!(L&1)){k[f>>2]=2;I=f+8|0;J=w;K=I+40|0;do{k[I>>2]=k[J>>2];I=I+4|0;J=J+4|0}while((I|0)<(K|0));L=f+48|0;k[L>>2]=-1;k[L+4>>2]=-1;L=f+56|0;N=f+60|0;O=f+72|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,a|0,f|0)|0;L=x;x=0;if(L&1){L=Hc()|0;P=M;Q=k[O>>2]|0;if(Q)j0a(Q);Q=k[N>>2]|0;if(!Q){R=P;S=L;IE(a);Sc(S|0)}j0a(Q);R=P;S=L;IE(a);Sc(S|0)}L=k[O>>2]|0;if(L)j0a(L);L=k[N>>2]|0;if(L)j0a(L);k[e>>2]=2;k[e+8>>2]=50;L=e+12|0;k[L>>2]=k[y>>2];k[L+4>>2]=k[y+4>>2];k[L+8>>2]=k[y+8>>2];k[L+12>>2]=k[y+12>>2];k[L+16>>2]=k[y+16>>2];k[L+20>>2]=k[y+20>>2];k[L+24>>2]=k[y+24>>2];k[e+40>>2]=1;L=e+48|0;k[L>>2]=-1;k[L+4>>2]=-1;L=e+56|0;N=e+60|0;O=e+72|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,a|0,e|0)|0;L=x;x=0;if(L&1){L=Hc()|0;P=M;Q=k[O>>2]|0;if(Q)j0a(Q);Q=k[N>>2]|0;if(!Q){R=P;S=L;IE(a);Sc(S|0)}j0a(Q);R=P;S=L;IE(a);Sc(S|0)}L=k[O>>2]|0;if(L)j0a(L);L=k[N>>2]|0;if(L)j0a(L);i[z>>0]=90;x=0;L=Ta(600,a|0,z|0)|0;N=x;x=0;if(N&1)break;i[A>>0]=3;x=0;Ta(600,L|0,A|0)|0;L=x;x=0;if(L&1)break;i[B>>0]=-12;x=0;Ta(600,a|0,B|0)|0;L=x;x=0;if(L&1)break;i[C>>0]=21;x=0;Ta(600,a|0,C|0)|0;L=x;x=0;if(L&1)break;k[E>>2]=4;k[E+8>>2]=0;k[E+40>>2]=1;L=E+48|0;k[L>>2]=-1;k[L+4>>2]=-1;L=E+56|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;fb(315,D|0,a|0,E|0);L=x;x=0;if(L&1){L=Hc()|0;R=M;S=L;IE(a);Sc(S|0)}L=k[D+72>>2]|0;if(L)j0a(L);L=k[D+60>>2]|0;if(L)j0a(L);k[F>>2]=32;k[F+32>>2]=1;k[d>>2]=2;I=d+8|0;J=F;K=I+40|0;do{k[I>>2]=k[J>>2];I=I+4|0;J=J+4|0}while((I|0)<(K|0));L=d+48|0;k[L>>2]=-1;k[L+4>>2]=-1;L=d+56|0;N=d+60|0;O=d+72|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,a|0,d|0)|0;L=x;x=0;if(L&1){L=Hc()|0;P=M;Q=k[O>>2]|0;if(Q)j0a(Q);Q=k[N>>2]|0;if(!Q){R=P;S=L;IE(a);Sc(S|0)}j0a(Q);R=P;S=L;IE(a);Sc(S|0)}L=k[O>>2]|0;if(L)j0a(L);L=k[N>>2]|0;if(L)j0a(L);k[G>>2]=0;k[G+32>>2]=1;k[c>>2]=2;I=c+8|0;J=G;K=I+40|0;do{k[I>>2]=k[J>>2];I=I+4|0;J=J+4|0}while((I|0)<(K|0));J=c+48|0;k[J>>2]=-1;k[J+4>>2]=-1;J=c+56|0;I=c+60|0;K=c+72|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[J+16>>2]=0;x=0;Ta(539,a|0,c|0)|0;J=x;x=0;if(J&1){J=Hc()|0;L=M;N=k[K>>2]|0;if(N)j0a(N);N=k[I>>2]|0;if(!N){R=L;S=J;IE(a);Sc(S|0)}j0a(N);R=L;S=J;IE(a);Sc(S|0)}else{J=k[K>>2]|0;if(J)j0a(J);J=k[I>>2]|0;if(J)j0a(J);i[H>>0]=-13;x=0;Ta(600,a|0,H|0)|0;J=x;x=0;if(J&1)break;r=b;return}}}}}while(0);b=Hc()|0;R=M;S=b;IE(a);Sc(S|0)}function aka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+64|0;d=c+40|0;e=c;k[e+4>>2]=0;f=e+8|0;k[f>>2]=0;k[e+16>>2]=0;k[e+20>>2]=0;g=e+16|0;k[e+12>>2]=g;k[e>>2]=38268;k[e+24>>2]=b;i[e+28>>0]=0;k[e+32>>2]=0;b=e+36|0;k[b>>2]=0;x=0;xa(828,d|0,e|0);h=x;x=0;if(h&1){h=Hc()|0;j=M;k[e>>2]=38268;l=k[b>>2]|0;if(l)j0a(l);k[e>>2]=20456;xh(e+12|0,k[g>>2]|0);l=k[f>>2]|0;if(!l){m=h;n=j;Sc(m|0)}k0a(l);m=h;n=j;Sc(m|0)}k[e>>2]=38268;j=k[b>>2]|0;if(j)j0a(j);k[e>>2]=20456;xh(e+12|0,k[g>>2]|0);g=k[f>>2]|0;if(g)k0a(g);g=k[d>>2]|0;f=d+4|0;e=k[f>>2]|0;do if((g|0)==(e|0))o=g;else{j=a+8|0;b=g;while(1){x=0;nb(136,k[j>>2]|0,k[b>>2]|0,b+8|0,k[b+48>>2]|0);h=x;x=0;if(h&1)break;b=b+56|0;if((b|0)==(e|0)){p=8;break}}if((p|0)==8){o=k[d>>2]|0;break}b=Hc()|0;j=M;h=k[d>>2]|0;if(!h){m=b;n=j;Sc(m|0)}l=k[f>>2]|0;if((l|0)!=(h|0))k[f>>2]=l+(~(((l+-56-h|0)>>>0)/56|0)*56|0);OBa(h);m=b;n=j;Sc(m|0)}while(0);if(!o){r=c;return}m=k[f>>2]|0;if((m|0)!=(o|0))k[f>>2]=m+(~(((m+-56-o|0)>>>0)/56|0)*56|0);OBa(o);r=c;return}function bka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+32|0;d=c+16|0;e=c;DU(d,b+60|0);b=k[d>>2]|0;f=d+4|0;g=k[f>>2]|0;do if((b|0)==(g|0))h=b;else{j=a+8|0;l=a+4|0;m=e+4|0;n=e+8|0;o=e+12|0;p=e+12|0;q=b;while(1){s=k[q>>2]|0;if((k[s+48>>2]|0)!=0?(i[s+58>>0]|0)==0:0){t=k[j>>2]|0;u=i[l>>0]|0;k[e>>2]=41912;i[m>>0]=u;k[n>>2]=t;k[o>>2]=0;x=0;xa(829,e|0,s|0);s=x;x=0;if(s&1)break;k[e>>2]=41912;s=k[p>>2]|0;k[p>>2]=0;if(s)OBa(s)}q=q+4|0;if((q|0)==(g|0)){v=3;break}}if((v|0)==3){h=k[d>>2]|0;break}q=Hc()|0;k[e>>2]=41912;o=k[p>>2]|0;k[p>>2]=0;if(o)OBa(o);o=k[d>>2]|0;if(!o)Sc(q|0);n=k[f>>2]|0;if((n|0)!=(o|0))k[f>>2]=n+(~((n+-4-o|0)>>>2)<<2);OBa(o);Sc(q|0)}while(0);if(!h){r=c;return}d=k[f>>2]|0;if((d|0)!=(h|0))k[f>>2]=d+(~((d+-4-h|0)>>>2)<<2);OBa(h);r=c;return}function cka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;c=r;r=r+800|0;d=c+584|0;e=c+504|0;f=c+424|0;g=c+344|0;h=c+264|0;i=c+184|0;j=c+104|0;l=c+24|0;m=c;n=c+796|0;o=c+768|0;p=c+764|0;q=c+752|0;s=c+664|0;t=a+8|0;xka(m,k[t>>2]|0,b);u=k[b+52>>2]|0;v=k[u+24>>2]|0;w=k[u+28>>2]|0;a:do if((v|0)!=(w|0)){u=v;y=0;while(1){z=k[u>>2]|0;x=0;A=Ba(k[(k[z>>2]|0)+16>>2]|0,z|0)|0;z=x;x=0;if(z&1){B=2;break}z=k[A+4>>2]|0;x=0;A=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;z=x;x=0;if(z&1){B=2;break}if(A){C=0;break}A=k[u>>2]|0;x=0;z=Ba(k[(k[A>>2]|0)+16>>2]|0,A|0)|0;A=x;x=0;if(A&1){B=2;break}A=k[z+4>>2]|0;x=0;z=Ta(k[(k[A>>2]|0)+28>>2]|0,A|0,1)|0;A=x;x=0;if(A&1){B=2;break}A=z+y|0;u=u+8|0;if((u|0)==(w|0)){C=A;break}else y=A}if((B|0)==2){y=Hc()|0;D=M;E=y;break}k[n>>2]=k[t>>2];x=0;va(1508,n|0);y=x;x=0;if(!(y&1)){y=k[t>>2]|0;if(!C){x=0;va(1509,y+48|0);u=x;x=0;if(u&1){B=3;break}u=k[t>>2]|0;k[j>>2]=1;k[j+8>>2]=56;k[j+40>>2]=1;A=j+48|0;k[A>>2]=-1;k[A+4>>2]=-1;A=j+56|0;z=j+60|0;F=j+72|0;G=u+48|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[A+16>>2]=0;x=0;Ta(539,G|0,j|0)|0;A=x;x=0;if(A&1){A=Hc()|0;u=M;H=k[F>>2]|0;if(H)j0a(H);H=k[z>>2]|0;if(!H){D=u;E=A;break}j0a(H);D=u;E=A;break}A=k[F>>2]|0;if(A)j0a(A);A=k[z>>2]|0;if(A)j0a(A);k[i>>2]=1;k[i+8>>2]=3;k[i+40>>2]=1;A=i+48|0;k[A>>2]=-1;k[A+4>>2]=-1;A=i+56|0;z=i+60|0;F=i+72|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[A+16>>2]=0;x=0;Ta(539,G|0,i|0)|0;G=x;x=0;if(G&1){G=Hc()|0;A=M;u=k[F>>2]|0;if(u)j0a(u);u=k[z>>2]|0;if(!u){D=A;E=G;break}j0a(u);D=A;E=G;break}G=k[F>>2]|0;if(G)j0a(G);G=k[z>>2]|0;if(G)j0a(G)}else{k[h>>2]=2;k[h+8>>2]=C;G=h+12|0;k[G>>2]=k[o>>2];k[G+4>>2]=k[o+4>>2];k[G+8>>2]=k[o+8>>2];k[G+12>>2]=k[o+12>>2];k[G+16>>2]=k[o+16>>2];k[G+20>>2]=k[o+20>>2];k[G+24>>2]=k[o+24>>2];k[h+40>>2]=1;G=h+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=h+56|0;z=h+60|0;F=h+72|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;x=0;Ta(539,y+48|0,h|0)|0;y=x;x=0;if(y&1){y=Hc()|0;G=M;A=k[F>>2]|0;if(A)j0a(A);A=k[z>>2]|0;if(!A){D=G;E=y;break}j0a(A);D=G;E=y;break}y=k[F>>2]|0;if(y)j0a(y);y=k[z>>2]|0;if(y)j0a(y)}y=k[t>>2]|0;k[g>>2]=1;k[g+8>>2]=128;k[g+40>>2]=1;z=g+48|0;k[z>>2]=-1;k[z+4>>2]=-1;z=g+56|0;F=g+60|0;G=g+72|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[z+16>>2]=0;x=0;Ta(539,y+48|0,g|0)|0;y=x;x=0;if(y&1){y=Hc()|0;z=M;A=k[G>>2]|0;if(A)j0a(A);A=k[F>>2]|0;if(!A){D=z;E=y;break}j0a(A);D=z;E=y;break}y=k[G>>2]|0;if(y)j0a(y);y=k[F>>2]|0;if(y)j0a(y);x=0;va(1509,(k[t>>2]|0)+48|0);y=x;x=0;if(!(y&1)){y=k[t>>2]|0;k[f>>2]=1;k[f+8>>2]=131;k[f+40>>2]=1;F=f+48|0;k[F>>2]=-1;k[F+4>>2]=-1;F=f+56|0;G=f+60|0;z=f+72|0;A=y+48|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;x=0;Ta(539,A|0,f|0)|0;F=x;x=0;if(F&1){F=Hc()|0;y=M;u=k[z>>2]|0;if(u)j0a(u);u=k[G>>2]|0;if(!u){D=y;E=F;break}j0a(u);D=y;E=F;break}F=k[z>>2]|0;if(F)j0a(F);F=k[G>>2]|0;if(F)j0a(F);k[e>>2]=1;k[e+8>>2]=57;k[e+40>>2]=1;F=e+48|0;k[F>>2]=-1;k[F+4>>2]=-1;F=e+56|0;G=e+60|0;z=e+72|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;x=0;Ta(539,A|0,e|0)|0;A=x;x=0;if(A&1){A=Hc()|0;F=M;y=k[z>>2]|0;if(y)j0a(y);y=k[G>>2]|0;if(!y){D=F;E=A;break}j0a(y);D=F;E=A;break}A=k[z>>2]|0;if(A)j0a(A);A=k[G>>2]|0;if(A)j0a(A);A=k[t>>2]|0;k[d>>2]=1;k[d+8>>2]=129;k[d+40>>2]=1;G=d+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=d+56|0;z=d+60|0;F=d+72|0;y=A+48|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;x=0;Ta(539,y|0,d|0)|0;G=x;x=0;if(G&1){G=Hc()|0;A=M;u=k[F>>2]|0;if(u)j0a(u);u=k[z>>2]|0;if(!u){D=A;E=G;break}j0a(u);D=A;E=G;break}G=k[F>>2]|0;if(G)j0a(G);G=k[z>>2]|0;if(G)j0a(G);k[l>>2]=1;k[l+8>>2]=1;k[l+40>>2]=1;G=l+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=l+56|0;z=l+60|0;F=l+72|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;x=0;Ta(539,y|0,l|0)|0;y=x;x=0;if(y&1){y=Hc()|0;G=M;A=k[F>>2]|0;if(A)j0a(A);A=k[z>>2]|0;if(!A){D=G;E=y;break}j0a(A);D=G;E=y;break}y=k[F>>2]|0;if(y)j0a(y);y=k[z>>2]|0;if(y)j0a(y);k[p>>2]=k[t>>2];x=0;va(1510,p|0);y=x;x=0;if(y&1){B=3;break}x=0;fb(143,s|0,b|0,1);y=x;x=0;if(y&1){B=3;break}x=0;xa(591,q|0,s|0);y=x;x=0;do if(y&1){z=Hc()|0;I=z;J=M}else{x=0;fb(328,a|0,q|0,1);z=x;x=0;if(z&1){z=Hc()|0;F=M;G=k[q>>2]|0;if(!G){I=z;J=F;break}A=q+4|0;u=k[A>>2]|0;if((u|0)==(G|0))K=G;else{H=u;while(1){u=H+-8|0;k[A>>2]=u;L=k[H+-4>>2]|0;if(!L)N=u;else{j0a(L);N=k[A>>2]|0}if((N|0)==(G|0))break;else H=N}K=k[q>>2]|0}OBa(K);I=z;J=F;break}H=k[q>>2]|0;if(H){G=q+4|0;A=k[G>>2]|0;if((A|0)==(H|0))O=H;else{L=A;while(1){A=L+-8|0;k[G>>2]=A;u=k[L+-4>>2]|0;if(!u)P=A;else{j0a(u);P=k[G>>2]|0}if((P|0)==(H|0))break;else L=P}O=k[q>>2]|0}OBa(O)}Dg(s);B=110;break a}while(0);Dg(s);Q=I;R=J;oy(m);Sc(Q|0)}else B=3}else B=3}else B=110;while(0);if((B|0)==110){x=0;xa(k[(k[b>>2]|0)+12>>2]|0,b|0,a|0);a=x;x=0;if(a&1)B=3;else{oy(m);r=c;return}}if((B|0)==3){B=Hc()|0;D=M;E=B}Q=E;R=D;oy(m);Sc(Q|0)}function dka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;c=r;r=r+176|0;d=c+160|0;e=c;f=c+72|0;g=c+60|0;h=c+48|0;i=c+36|0;j=c+24|0;xka(e,k[a+8>>2]|0,b);x=0;fb(143,f|0,b|0,1);l=x;x=0;if(l&1){l=Hc()|0;m=l;n=M;oy(e);Sc(m|0)}x=0;xa(591,g|0,f|0);l=x;x=0;a:do if(!(l&1)){o=k[g>>2]|0;p=g+4|0;q=k[p>>2]|0;s=(o|0)==(q|0);if(o){if(s)t=o;else{u=q;while(1){q=u+-8|0;k[p>>2]=q;v=k[u+-4>>2]|0;if(!v)w=q;else{j0a(v);w=k[p>>2]|0}if((w|0)==(o|0))break;else u=w}t=k[g>>2]|0}OBa(t)}b:do if(!s){u=a+60|0;o=a+64|0;p=k[o>>2]|0;c:do if(!p)y=0;else{v=p;while(1){q=k[v+16>>2]|0;if(q>>>0>b>>>0)z=v;else{if(q>>>0>=b>>>0){y=1;break c}z=v+4|0}v=k[z>>2]|0;if(!v){y=0;break}}}while(0);x=0;fb(140,h|0,329672,0);p=x;x=0;if(p&1){A=39;break a}x=0;pa(57,(y|0)!=0|0,h|0,167,261497,262214);p=x;x=0;if(p&1){p=Hc()|0;v=M;K2a(h);B=p;C=v;break a}K2a(h);v=b;p=k[o>>2]|0;do if(p){q=p;while(1){D=k[q+16>>2]|0;if(D>>>0>b>>>0){E=k[q>>2]|0;if(!E){F=q;G=q;A=22;break}else H=E}else{if(D>>>0>=b>>>0){I=q;A=28;break}D=q+4|0;E=k[D>>2]|0;if(!E){J=D;K=q;A=26;break}else H=E}q=H}if((A|0)==22){k[d>>2]=G;L=F;N=G;A=29;break}else if((A|0)==26){k[d>>2]=K;L=J;N=K;A=29;break}else if((A|0)==28){k[d>>2]=I;if(!I){L=d;N=I;A=29;break}else{O=I;break}}}else{k[d>>2]=o;L=o;N=o;A=29}while(0);if((A|0)==29){x=0;o=Ba(563,24)|0;p=x;x=0;if(p&1){A=39;break a}k[o+16>>2]=v;k[o+20>>2]=0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=N;k[L>>2]=o;p=k[k[u>>2]>>2]|0;if(!p)P=o;else{k[u>>2]=p;P=k[L>>2]|0}ui(k[a+64>>2]|0,P);p=a+68|0;k[p>>2]=(k[p>>2]|0)+1;O=o}o=k[O+20>>2]|0;x=0;fb(140,i|0,329672,0);p=x;x=0;if(p&1){A=39;break a}x=0;pa(57,(o|0)!=0|0,i|0,169,261497,262214);p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(i);B=p;C=q;break a}K2a(i);q=o+4|0;p=k[o>>2]|0;if((k[q>>2]|0)!=(p|0)){E=j+4|0;D=p;p=0;while(1){Q=k[D+(p<<3)>>2]|0;x=0;xa(591,j|0,f|0);R=x;x=0;if(R&1){A=38;break}x=0;fb(332,a|0,Q|0,(k[j>>2]|0)+(p<<3)|0);Q=x;x=0;if(Q&1)break;Q=k[j>>2]|0;if(Q){R=k[E>>2]|0;if((R|0)==(Q|0))S=Q;else{T=R;while(1){R=T+-8|0;k[E>>2]=R;U=k[T+-4>>2]|0;if(!U)V=R;else{j0a(U);V=k[E>>2]|0}if((V|0)==(Q|0))break;else T=V}S=k[j>>2]|0}OBa(S)}p=p+1|0;D=k[o>>2]|0;if(p>>>0>=(k[q>>2]|0)-D>>3>>>0)break b}if((A|0)==38){D=Hc()|0;W=D;X=M;A=40;break a}D=Hc()|0;q=M;p=k[j>>2]|0;if(!p){B=D;C=q;break a}o=k[E>>2]|0;if((o|0)==(p|0))Y=p;else{u=o;while(1){o=u+-8|0;k[E>>2]=o;v=k[u+-4>>2]|0;if(!v)Z=o;else{j0a(v);Z=k[E>>2]|0}if((Z|0)==(p|0))break;else u=Z}Y=k[j>>2]|0}OBa(Y);B=D;C=q;break a}}while(0);x=0;xa(k[(k[b>>2]|0)+12>>2]|0,b|0,a|0);s=x;x=0;if(!(s&1)){Dg(f);oy(e);r=c;return}else A=39}else A=39;while(0);if((A|0)==39){c=Hc()|0;W=c;X=M;A=40}if((A|0)==40){B=W;C=X}Dg(f);m=B;n=C;oy(e);Sc(m|0)}function eka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=r;r=r+32|0;e=d+8|0;f=d;g=a+8|0;h=k[g>>2]|0;j=i[a+4>>0]|0;k[e>>2]=41912;i[e+4>>0]=j;k[e+8>>2]=h;k[e+12>>2]=0;x=0;xa(830,e|0,b|0);h=x;x=0;do if(!(h&1)){if(k[c>>2]|0){k[f>>2]=k[g>>2];x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;a=x;x=0;if(a&1)break;x=0;nb(137,f|0,k[j+4>>2]|0,k[c>>2]|0,0);j=x;x=0;if(j&1)break}k[e>>2]=41912;j=e+12|0;a=k[j>>2]|0;k[j>>2]=0;if(!a){r=d;return}OBa(a);r=d;return}while(0);d=Hc()|0;k[e>>2]=41912;c=e+12|0;e=k[c>>2]|0;k[c>>2]=0;if(!e)Sc(d|0);OBa(e);Sc(d|0)}function fka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0;d=r;r=r+1984|0;e=d+1640|0;f=d+1560|0;g=d+1480|0;h=d+1400|0;i=d+1320|0;j=d+1240|0;l=d+1160|0;m=d+1080|0;n=d+1e3|0;o=d+920|0;p=d+840|0;q=d+760|0;s=d+680|0;t=d+600|0;u=d+520|0;v=d+440|0;w=d+360|0;y=d+280|0;z=d+200|0;A=d+120|0;B=d+40|0;C=d+1968|0;D=d+1956|0;E=d+1912|0;F=d+1944|0;G=d+1932|0;H=d+1920|0;I=d;J=d+1876|0;K=d+1904|0;L=d+1872|0;N=d+1840|0;O=d+1832|0;P=d+1800|0;Q=d+1768|0;R=d+1764|0;S=d+1760|0;T=d+1756|0;U=d+1752|0;V=d+1740|0;W=d+1728|0;X=d+1724|0;Y=d+1720|0;Z=a+8|0;a=k[Z>>2]|0;k[e>>2]=1;k[e+8>>2]=128;k[e+40>>2]=1;_=e+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=e+56|0;$=e+60|0;aa=e+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,a+48|0,e|0)|0;a=x;x=0;if(a&1){a=Hc()|0;_=k[aa>>2]|0;if(_)j0a(_);_=k[$>>2]|0;if(!_)Sc(a|0);j0a(_);Sc(a|0)}a=k[aa>>2]|0;if(a)j0a(a);a=k[$>>2]|0;if(a)j0a(a);a=k[b>>2]|0;$=k[b+4>>2]|0;a:do if((a|0)!=($|0)){b=B+8|0;aa=B+40|0;_=B+48|0;ba=B+56|0;ca=B+60|0;da=B+72|0;ea=A+8|0;fa=A+40|0;ga=A+48|0;ha=A+56|0;ia=A+60|0;ja=A+72|0;ka=z+8|0;la=z+40|0;ma=z+48|0;na=z+56|0;oa=z+60|0;qa=z+72|0;ra=y+8|0;sa=y+40|0;ta=y+48|0;ua=y+56|0;va=y+60|0;wa=y+72|0;xa=w+8|0;ya=w+40|0;za=w+48|0;Aa=w+56|0;Ca=w+60|0;Da=w+72|0;Ea=v+8|0;Ga=v+40|0;Ha=v+48|0;Ia=v+56|0;Ja=v+60|0;Ka=v+72|0;La=I+32|0;Ma=u+8|0;Na=u+48|0;Oa=u+56|0;Pa=u+60|0;Qa=u+72|0;Ra=t+8|0;Sa=t+40|0;Ua=t+48|0;Va=t+56|0;Wa=t+60|0;Xa=t+72|0;Ya=s+8|0;Za=s+40|0;_a=s+48|0;$a=s+56|0;ab=s+60|0;bb=s+72|0;cb=q+8|0;db=q+40|0;eb=q+48|0;gb=q+56|0;ib=q+60|0;jb=q+72|0;kb=p+8|0;lb=p+12|0;mb=p+40|0;ob=p+48|0;pb=p+56|0;qb=p+60|0;rb=p+72|0;sb=o+8|0;tb=o+40|0;ub=o+48|0;vb=o+56|0;wb=o+60|0;xb=o+72|0;yb=N+12|0;zb=N+16|0;Ab=N+8|0;Bb=n+8|0;Cb=n+40|0;Db=n+48|0;Eb=n+56|0;Fb=n+60|0;Gb=n+72|0;Hb=m+8|0;Ib=m+40|0;Jb=m+48|0;Kb=m+56|0;Lb=m+60|0;Mb=m+72|0;Nb=l+8|0;Ob=l+40|0;Pb=l+48|0;Qb=l+56|0;Rb=l+60|0;Sb=l+72|0;Tb=P+12|0;Ub=P+16|0;Vb=P+8|0;Wb=j+8|0;Xb=j+40|0;Yb=j+48|0;Zb=j+56|0;_b=j+60|0;$b=j+72|0;ac=f+8|0;bc=f+40|0;cc=f+48|0;dc=f+56|0;ec=f+60|0;fc=f+72|0;gc=K+4|0;hc=i+8|0;ic=i+40|0;jc=i+48|0;kc=i+56|0;lc=i+60|0;mc=i+72|0;nc=h+8|0;oc=h+12|0;pc=h+40|0;qc=h+48|0;rc=h+56|0;sc=h+60|0;tc=h+72|0;uc=g+8|0;vc=g+40|0;wc=g+48|0;xc=g+56|0;yc=g+60|0;zc=g+72|0;Ac=E+4|0;Bc=c^1;Cc=e+8|0;Dc=e+40|0;Ec=e+48|0;Fc=e+56|0;Gc=e+60|0;Ic=e+72|0;Jc=a;b:while(1){Kc=k[Jc>>2]|0;Tf[k[(k[Kc>>2]|0)+92>>2]&2047](E,Kc);Kc=k[E>>2]|0;x=0;Lc=Ba(k[k[Kc>>2]>>2]|0,Kc|0)|0;Kc=x;x=0;if(Kc&1){Mc=128;break}Kc=k[E>>2]|0;do if((Lc|0)==5){Nc=iDa(Kc,168,6704,0)|0;if(!Nc){Mc=37;break b}Oc=Nc+36|0;Pc=k[Oc>>2]|0;x=0;fb(140,D|0,329672,0);Qc=x;x=0;if(Qc&1){Mc=128;break b}x=0;pa(57,(Pc|0)!=0|0,D|0,588,285183,276209);Pc=x;x=0;if(Pc&1){Mc=40;break b}K2a(D);Pc=k[Oc>>2]|0;x=0;Qc=Ba(k[(k[Pc>>2]|0)+36>>2]|0,Pc|0)|0;Pc=x;x=0;if(Pc&1){Mc=128;break b}x=0;fb(140,F|0,272738,34);Pc=x;x=0;if(Pc&1){Mc=128;break b}x=0;pa(57,Qc^1|0,F|0,299,261497,262317);Qc=x;x=0;if(Qc&1){Mc=130;break b}K2a(F);if(!c){x=0;nb(k[(k[Nc>>2]|0)+104>>2]|0,K|0,Nc|0,1,0);Qc=x;x=0;if(Qc&1){Mc=128;break b}Qc=k[K>>2]|0;x=0;Pc=Ba(k[(k[Qc>>2]|0)+36>>2]|0,Qc|0)|0;Qc=x;x=0;if(Qc&1){Mc=219;break b}Qc=k[Z>>2]|0;if(Pc){k[L>>2]=Qc;x=0;fb(247,N|0,256,0);Pc=x;x=0;if(Pc&1){Mc=219;break b}x=0;pa(61,L|0,N|0,1,1,1);Pc=x;x=0;if(Pc&1){Mc=221;break b}k[N>>2]=20456;xh(yb,k[zb>>2]|0);Pc=k[Ab>>2]|0;if(Pc)k0a(Pc);Pc=k[Z>>2]|0;k[n>>2]=1;k[Bb>>2]=144;k[Cb>>2]=1;Rc=Db;k[Rc>>2]=-1;k[Rc+4>>2]=-1;Rc=Pc+48|0;k[Eb>>2]=0;k[Eb+4>>2]=0;k[Eb+8>>2]=0;k[Eb+12>>2]=0;k[Eb+16>>2]=0;x=0;Ta(539,Rc|0,n|0)|0;Pc=x;x=0;if(Pc&1){Mc=183;break b}Pc=k[Gb>>2]|0;if(Pc)j0a(Pc);Pc=k[Fb>>2]|0;if(Pc)j0a(Pc);k[m>>2]=1;k[Hb>>2]=130;k[Ib>>2]=1;Pc=Jb;k[Pc>>2]=-1;k[Pc+4>>2]=-1;k[Kb>>2]=0;k[Kb+4>>2]=0;k[Kb+8>>2]=0;k[Kb+12>>2]=0;k[Kb+16>>2]=0;x=0;Ta(539,Rc|0,m|0)|0;Pc=x;x=0;if(Pc&1){Mc=192;break b}Pc=k[Mb>>2]|0;if(Pc)j0a(Pc);Pc=k[Lb>>2]|0;if(Pc)j0a(Pc);k[l>>2]=1;k[Nb>>2]=1;k[Ob>>2]=1;Pc=Pb;k[Pc>>2]=-1;k[Pc+4>>2]=-1;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;Ta(539,Rc|0,l|0)|0;Rc=x;x=0;if(Rc&1){Mc=201;break b}Rc=k[Sb>>2]|0;if(Rc)j0a(Rc);Rc=k[Rb>>2]|0;if(Rc)j0a(Rc);k[O>>2]=k[Z>>2];x=0;fb(247,P|0,256,0);Rc=x;x=0;if(Rc&1){Mc=219;break b}x=0;pa(61,O|0,P|0,1,1,1);Rc=x;x=0;if(Rc&1){Mc=223;break b}k[P>>2]=20456;xh(Tb,k[Ub>>2]|0);Rc=k[Vb>>2]|0;if(Rc)k0a(Rc);Rc=k[Z>>2]|0;k[j>>2]=1;k[Wb>>2]=145;k[Xb>>2]=1;Pc=Yb;k[Pc>>2]=-1;k[Pc+4>>2]=-1;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,Rc+48|0,j|0)|0;Rc=x;x=0;if(Rc&1){Mc=214;break b}Rc=k[$b>>2]|0;if(Rc)j0a(Rc);Rc=k[_b>>2]|0;if(Rc)j0a(Rc)}else{k[i>>2]=1;k[hc>>2]=128;k[ic>>2]=1;Rc=jc;k[Rc>>2]=-1;k[Rc+4>>2]=-1;k[kc>>2]=0;k[kc+4>>2]=0;k[kc+8>>2]=0;k[kc+12>>2]=0;k[kc+16>>2]=0;x=0;Ta(539,Qc+48|0,i|0)|0;Qc=x;x=0;if(Qc&1){Mc=230;break b}Qc=k[mc>>2]|0;if(Qc)j0a(Qc);Qc=k[lc>>2]|0;if(Qc)j0a(Qc);Qc=k[Z>>2]|0;Rc=k[K>>2]|0;x=0;Pc=Ta(k[(k[Rc>>2]|0)+28>>2]|0,Rc|0,1)|0;Rc=x;x=0;if(Rc&1){Mc=219;break b}Rc=Qc+48|0;k[h>>2]=2;k[nc>>2]=Pc;k[oc>>2]=k[Q>>2];k[oc+4>>2]=k[Q+4>>2];k[oc+8>>2]=k[Q+8>>2];k[oc+12>>2]=k[Q+12>>2];k[oc+16>>2]=k[Q+16>>2];k[oc+20>>2]=k[Q+20>>2];k[oc+24>>2]=k[Q+24>>2];k[pc>>2]=1;Pc=qc;k[Pc>>2]=-1;k[Pc+4>>2]=-1;k[rc>>2]=0;k[rc+4>>2]=0;k[rc+8>>2]=0;k[rc+12>>2]=0;k[rc+16>>2]=0;x=0;Ta(539,Rc|0,h|0)|0;Pc=x;x=0;if(Pc&1){Mc=240;break b}Pc=k[tc>>2]|0;if(Pc)j0a(Pc);Pc=k[sc>>2]|0;if(Pc)j0a(Pc);k[g>>2]=1;k[uc>>2]=1;k[vc>>2]=1;Pc=wc;k[Pc>>2]=-1;k[Pc+4>>2]=-1;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[xc+16>>2]=0;x=0;Ta(539,Rc|0,g|0)|0;Rc=x;x=0;if(Rc&1){Mc=249;break b}Rc=k[zc>>2]|0;if(Rc)j0a(Rc);Rc=k[yc>>2]|0;if(Rc)j0a(Rc)}if((k[Nc+24>>2]|0)==2){k[R>>2]=k[Z>>2];Rc=k[K>>2]|0;x=0;Pc=Ba(k[(k[Rc>>2]|0)+60>>2]|0,Rc|0)|0;Rc=x;x=0;if(Rc&1){Mc=219;break b}x=0;fb(333,R|0,Pc|0,1);Pc=x;x=0;if(Pc&1){Mc=219;break b}k[S>>2]=k[Z>>2];x=0;nb(137,S|0,k[K>>2]|0,Nc|0,0);Pc=x;x=0;if(Pc&1){Mc=219;break b}k[T>>2]=k[Z>>2];x=0;Pc=Ba(k[(k[Nc>>2]|0)+60>>2]|0,Nc|0)|0;Rc=x;x=0;if(Rc&1){Mc=219;break b}x=0;fb(334,T|0,Pc|0,1);Pc=x;x=0;if(Pc&1){Mc=219;break b}else Tc=Nc}else Tc=Nc;k[U>>2]=k[Z>>2];x=0;Pc=Ba(k[(k[Tc>>2]|0)+60>>2]|0,Nc|0)|0;Rc=x;x=0;if(Rc&1){Mc=219;break b}x=0;fb(334,U|0,Pc+1|0,1);Pc=x;x=0;if(Pc&1){Mc=219;break b}Pc=k[Z>>2]|0;k[f>>2]=1;k[ac>>2]=144;k[bc>>2]=1;Rc=cc;k[Rc>>2]=-1;k[Rc+4>>2]=-1;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[dc+16>>2]=0;x=0;Ta(539,Pc+48|0,f|0)|0;Pc=x;x=0;if(Pc&1){Mc=268;break b}Pc=k[fc>>2]|0;if(Pc)j0a(Pc);Pc=k[ec>>2]|0;if(Pc)j0a(Pc);Pc=k[gc>>2]|0;if(Pc)j0a(Pc);break}Pc=k[Oc>>2]|0;x=0;fb(140,C|0,329672,0);Rc=x;x=0;if(Rc&1){Mc=128;break b}x=0;pa(57,(Pc|0)!=0|0,C|0,588,285183,276209);Pc=x;x=0;if(Pc&1){Mc=47;break b}K2a(C);Pc=k[Oc>>2]|0;x=0;Oc=Ba(k[(k[Pc>>2]|0)+56>>2]|0,Pc|0)|0;Pc=x;x=0;if(Pc&1){Mc=128;break b}x=0;fb(140,G|0,262406,46);Pc=x;x=0;if(Pc&1){Mc=128;break b}x=0;pa(57,Oc|0,G|0,305,261497,262317);Oc=x;x=0;if(Oc&1){Mc=131;break b}K2a(G);Oc=k[Nc+24>>2]|0;x=0;fb(140,H|0,329672,0);Pc=x;x=0;if(Pc&1){Mc=128;break b}x=0;pa(57,(Oc|0)==2|0,H|0,308,261497,262317);Oc=x;x=0;if(Oc&1){Mc=132;break b}K2a(H);x=0;Oc=Ba(k[(k[Nc>>2]|0)+36>>2]|0,Nc|0)|0;Pc=x;x=0;if(Pc&1){Mc=128;break b}Pc=k[Z>>2]|0;if(!Oc){k[s>>2]=1;k[Ya>>2]=144;k[Za>>2]=1;Oc=_a;k[Oc>>2]=-1;k[Oc+4>>2]=-1;Oc=Pc+48|0;k[$a>>2]=0;k[$a+4>>2]=0;k[$a+8>>2]=0;k[$a+12>>2]=0;k[$a+16>>2]=0;x=0;Ta(539,Oc|0,s|0)|0;Rc=x;x=0;if(Rc&1){Mc=138;break b}Rc=k[bb>>2]|0;if(Rc)j0a(Rc);Rc=k[ab>>2]|0;if(Rc)j0a(Rc);k[q>>2]=1;k[cb>>2]=129;k[db>>2]=1;Rc=eb;k[Rc>>2]=-1;k[Rc+4>>2]=-1;k[gb>>2]=0;k[gb+4>>2]=0;k[gb+8>>2]=0;k[gb+12>>2]=0;k[gb+16>>2]=0;x=0;Ta(539,Oc|0,q|0)|0;Oc=x;x=0;if(Oc&1){Mc=147;break b}Oc=k[jb>>2]|0;if(Oc)j0a(Oc);Oc=k[ib>>2]|0;if(Oc)j0a(Oc);Oc=k[Z>>2]|0;x=0;Rc=Ta(k[(k[Nc>>2]|0)+28>>2]|0,Nc|0,1)|0;Nc=x;x=0;if(Nc&1){Mc=128;break b}Nc=Oc+48|0;k[p>>2]=2;k[kb>>2]=Rc;k[lb>>2]=k[J>>2];k[lb+4>>2]=k[J+4>>2];k[lb+8>>2]=k[J+8>>2];k[lb+12>>2]=k[J+12>>2];k[lb+16>>2]=k[J+16>>2];k[lb+20>>2]=k[J+20>>2];k[lb+24>>2]=k[J+24>>2];k[mb>>2]=1;Rc=ob;k[Rc>>2]=-1;k[Rc+4>>2]=-1;k[pb>>2]=0;k[pb+4>>2]=0;k[pb+8>>2]=0;k[pb+12>>2]=0;k[pb+16>>2]=0;x=0;Ta(539,Nc|0,p|0)|0;Rc=x;x=0;if(Rc&1){Mc=157;break b}Rc=k[rb>>2]|0;if(Rc)j0a(Rc);Rc=k[qb>>2]|0;if(Rc)j0a(Rc);k[o>>2]=1;k[sb>>2]=1;k[tb>>2]=1;Rc=ub;k[Rc>>2]=-1;k[Rc+4>>2]=-1;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[vb+16>>2]=0;x=0;Ta(539,Nc|0,o|0)|0;Nc=x;x=0;if(Nc&1){Mc=166;break b}Nc=k[xb>>2]|0;if(Nc)j0a(Nc);Nc=k[wb>>2]|0;if(Nc)j0a(Nc);break}k[B>>2]=1;k[b>>2]=128;k[aa>>2]=1;Nc=_;k[Nc>>2]=-1;k[Nc+4>>2]=-1;Nc=Pc+48|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[ba+16>>2]=0;x=0;Ta(539,Nc|0,B|0)|0;Pc=x;x=0;if(Pc&1){Mc=60;break b}Pc=k[da>>2]|0;if(Pc)j0a(Pc);Pc=k[ca>>2]|0;if(Pc)j0a(Pc);k[A>>2]=1;k[ea>>2]=81;k[fa>>2]=1;Pc=ga;k[Pc>>2]=-1;k[Pc+4>>2]=-1;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[ha+16>>2]=0;x=0;Ta(539,Nc|0,A|0)|0;Nc=x;x=0;if(Nc&1){Mc=69;break b}Nc=k[ja>>2]|0;if(Nc)j0a(Nc);Nc=k[ia>>2]|0;if(Nc)j0a(Nc);Nc=k[Z>>2]|0;k[z>>2]=1;k[ka>>2]=130;k[la>>2]=1;Pc=ma;k[Pc>>2]=-1;k[Pc+4>>2]=-1;Pc=Nc+48|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[na+16>>2]=0;x=0;Ta(539,Pc|0,z|0)|0;Nc=x;x=0;if(Nc&1){Mc=78;break b}Nc=k[qa>>2]|0;if(Nc)j0a(Nc);Nc=k[oa>>2]|0;if(Nc)j0a(Nc);k[y>>2]=1;k[ra>>2]=1;k[sa>>2]=1;Nc=ta;k[Nc>>2]=-1;k[Nc+4>>2]=-1;k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua+12>>2]=0;k[ua+16>>2]=0;x=0;Ta(539,Pc|0,y|0)|0;Pc=x;x=0;if(Pc&1){Mc=87;break b}Pc=k[wa>>2]|0;if(Pc)j0a(Pc);Pc=k[va>>2]|0;if(Pc)j0a(Pc);Pc=k[Z>>2]|0;k[w>>2]=1;k[xa>>2]=145;k[ya>>2]=1;Nc=za;k[Nc>>2]=-1;k[Nc+4>>2]=-1;Nc=Pc+48|0;k[Aa>>2]=0;k[Aa+4>>2]=0;k[Aa+8>>2]=0;k[Aa+12>>2]=0;k[Aa+16>>2]=0;x=0;Ta(539,Nc|0,w|0)|0;Pc=x;x=0;if(Pc&1){Mc=96;break b}Pc=k[Da>>2]|0;if(Pc)j0a(Pc);Pc=k[Ca>>2]|0;if(Pc)j0a(Pc);k[v>>2]=1;k[Ea>>2]=144;k[Ga>>2]=1;Pc=Ha;k[Pc>>2]=-1;k[Pc+4>>2]=-1;k[Ia>>2]=0;k[Ia+4>>2]=0;k[Ia+8>>2]=0;k[Ia+12>>2]=0;k[Ia+16>>2]=0;x=0;Ta(539,Nc|0,v|0)|0;Nc=x;x=0;if(Nc&1){Mc=105;break b}Nc=k[Ka>>2]|0;if(Nc)j0a(Nc);Nc=k[Ja>>2]|0;if(Nc)j0a(Nc);Nc=k[Z>>2]|0;k[I>>2]=32;k[La>>2]=1;Pc=Nc+48|0;k[u>>2]=2;Nc=Ma;Rc=I;Oc=Nc+40|0;do{k[Nc>>2]=k[Rc>>2];Nc=Nc+4|0;Rc=Rc+4|0}while((Nc|0)<(Oc|0));Rc=Na;k[Rc>>2]=-1;k[Rc+4>>2]=-1;k[Oa>>2]=0;k[Oa+4>>2]=0;k[Oa+8>>2]=0;k[Oa+12>>2]=0;k[Oa+16>>2]=0;x=0;Ta(539,Pc|0,u|0)|0;Rc=x;x=0;if(Rc&1){Mc=114;break b}Rc=k[Qa>>2]|0;if(Rc)j0a(Rc);Rc=k[Pa>>2]|0;if(Rc)j0a(Rc);k[t>>2]=1;k[Ra>>2]=1;k[Sa>>2]=1;Rc=Ua;k[Rc>>2]=-1;k[Rc+4>>2]=-1;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,Pc|0,t|0)|0;Rc=x;x=0;if(Rc&1){Mc=123;break b}Rc=k[Xa>>2]|0;if(Rc)j0a(Rc);Rc=k[Wa>>2]|0;if(Rc)j0a(Rc)}else{x=0;Rc=Ba(k[(k[Kc>>2]|0)+36>>2]|0,Kc|0)|0;Nc=x;x=0;if(Nc&1){Mc=128;break b}Nc=k[E>>2]|0;x=0;fb(k[(k[Nc>>2]|0)+76>>2]|0,W|0,Nc|0,0);Nc=x;x=0;if(Nc&1){Mc=128;break b}x=0;Nc=Fa(86,W|0,0,262453)|0;Oc=x;x=0;if(Oc&1){Mc=294;break b};k[V>>2]=k[Nc>>2];k[V+4>>2]=k[Nc+4>>2];k[V+8>>2]=k[Nc+8>>2];k[Nc>>2]=0;k[Nc+4>>2]=0;k[Nc+8>>2]=0;x=0;pa(57,Rc^1|0,V|0,363,261497,262317);Rc=x;x=0;if(Rc&1){Mc=295;break b}K2a(V);K2a(W);k[X>>2]=k[Z>>2];x=0;pa(61,X|0,k[E>>2]|0,Bc|0,1,1);Rc=x;x=0;if(Rc&1){Mc=128;break b}k[Y>>2]=k[Z>>2];Rc=k[E>>2]|0;x=0;Nc=Ba(k[(k[Rc>>2]|0)+60>>2]|0,Rc|0)|0;Rc=x;x=0;if(Rc&1){Mc=128;break b}x=0;fb(334,Y|0,Nc+1|0,1);Nc=x;x=0;if(Nc&1){Mc=128;break b}Nc=k[Z>>2]|0;k[e>>2]=1;k[Cc>>2]=144;k[Dc>>2]=1;Rc=Ec;k[Rc>>2]=-1;k[Rc+4>>2]=-1;k[Fc>>2]=0;k[Fc+4>>2]=0;k[Fc+8>>2]=0;k[Fc+12>>2]=0;k[Fc+16>>2]=0;x=0;Ta(539,Nc+48|0,e|0)|0;Nc=x;x=0;if(Nc&1){Mc=289;break b}Nc=k[Ic>>2]|0;if(Nc)j0a(Nc);Nc=k[Gc>>2]|0;if(Nc)j0a(Nc)}while(0);Kc=k[Ac>>2]|0;if(Kc)j0a(Kc);Jc=Jc+8|0;if((Jc|0)==($|0))break a}switch(Mc|0){case 37:{x=0;hb(49);x=0;Jc=Hc()|0;Uc=M;Vc=Jc;Mc=129;break}case 40:{Jc=Hc()|0;Fc=M;K2a(D);Uc=Fc;Vc=Jc;Mc=129;break}case 47:{Jc=Hc()|0;Fc=M;K2a(C);Uc=Fc;Vc=Jc;Mc=129;break}case 60:{Jc=Hc()|0;Fc=M;Ec=k[da>>2]|0;if(Ec)j0a(Ec);Ec=k[ca>>2]|0;if(!Ec){Uc=Fc;Vc=Jc;Mc=129}else{j0a(Ec);Uc=Fc;Vc=Jc;Mc=129}break}case 69:{Jc=Hc()|0;Fc=M;Ec=k[ja>>2]|0;if(Ec)j0a(Ec);Ec=k[ia>>2]|0;if(!Ec){Uc=Fc;Vc=Jc;Mc=129}else{j0a(Ec);Uc=Fc;Vc=Jc;Mc=129}break}case 78:{Jc=Hc()|0;Fc=M;Ec=k[qa>>2]|0;if(Ec)j0a(Ec);Ec=k[oa>>2]|0;if(!Ec){Uc=Fc;Vc=Jc;Mc=129}else{j0a(Ec);Uc=Fc;Vc=Jc;Mc=129}break}case 87:{Jc=Hc()|0;Fc=M;Ec=k[wa>>2]|0;if(Ec)j0a(Ec);Ec=k[va>>2]|0;if(!Ec){Uc=Fc;Vc=Jc;Mc=129}else{j0a(Ec);Uc=Fc;Vc=Jc;Mc=129}break}case 96:{Jc=Hc()|0;Fc=M;Ec=k[Da>>2]|0;if(Ec)j0a(Ec);Ec=k[Ca>>2]|0;if(!Ec){Uc=Fc;Vc=Jc;Mc=129}else{j0a(Ec);Uc=Fc;Vc=Jc;Mc=129}break}case 105:{Jc=Hc()|0;Fc=M;Ec=k[Ka>>2]|0;if(Ec)j0a(Ec);Ec=k[Ja>>2]|0;if(!Ec){Uc=Fc;Vc=Jc;Mc=129}else{j0a(Ec);Uc=Fc;Vc=Jc;Mc=129}break}case 114:{Jc=Hc()|0;Fc=M;Ec=k[Qa>>2]|0;if(Ec)j0a(Ec);Ec=k[Pa>>2]|0;if(!Ec){Uc=Fc;Vc=Jc;Mc=129}else{j0a(Ec);Uc=Fc;Vc=Jc;Mc=129}break}case 123:{Jc=Hc()|0;Fc=M;Ec=k[Xa>>2]|0;if(Ec)j0a(Ec);Ec=k[Wa>>2]|0;if(!Ec){Uc=Fc;Vc=Jc;Mc=129}else{j0a(Ec);Uc=Fc;Vc=Jc;Mc=129}break}case 128:{Jc=Hc()|0;Uc=M;Vc=Jc;Mc=129;break}case 130:{Jc=Hc()|0;Fc=M;K2a(F);Wc=Jc;Xc=Fc;break}case 131:{Fc=Hc()|0;Jc=M;K2a(G);Wc=Fc;Xc=Jc;break}case 132:{Jc=Hc()|0;Fc=M;K2a(H);Wc=Jc;Xc=Fc;break}case 138:{Fc=Hc()|0;Jc=M;Ec=k[bb>>2]|0;if(Ec)j0a(Ec);Ec=k[ab>>2]|0;if(!Ec){Uc=Jc;Vc=Fc;Mc=129}else{j0a(Ec);Uc=Jc;Vc=Fc;Mc=129}break}case 147:{Fc=Hc()|0;Jc=M;Ec=k[jb>>2]|0;if(Ec)j0a(Ec);Ec=k[ib>>2]|0;if(!Ec){Uc=Jc;Vc=Fc;Mc=129}else{j0a(Ec);Uc=Jc;Vc=Fc;Mc=129}break}case 157:{Fc=Hc()|0;Jc=M;Ec=k[rb>>2]|0;if(Ec)j0a(Ec);Ec=k[qb>>2]|0;if(!Ec){Uc=Jc;Vc=Fc;Mc=129}else{j0a(Ec);Uc=Jc;Vc=Fc;Mc=129}break}case 166:{Fc=Hc()|0;Jc=M;Ec=k[xb>>2]|0;if(Ec)j0a(Ec);Ec=k[wb>>2]|0;if(!Ec){Uc=Jc;Vc=Fc;Mc=129}else{j0a(Ec);Uc=Jc;Vc=Fc;Mc=129}break}case 183:{Fc=Hc()|0;Jc=M;Ec=k[Gb>>2]|0;if(Ec)j0a(Ec);Ec=k[Fb>>2]|0;if(!Ec){Yc=Jc;Zc=Fc;Mc=220}else{j0a(Ec);Yc=Jc;Zc=Fc;Mc=220}break}case 192:{Fc=Hc()|0;Jc=M;Ec=k[Mb>>2]|0;if(Ec)j0a(Ec);Ec=k[Lb>>2]|0;if(!Ec){Yc=Jc;Zc=Fc;Mc=220}else{j0a(Ec);Yc=Jc;Zc=Fc;Mc=220}break}case 201:{Fc=Hc()|0;Jc=M;Ec=k[Sb>>2]|0;if(Ec)j0a(Ec);Ec=k[Rb>>2]|0;if(!Ec){Yc=Jc;Zc=Fc;Mc=220}else{j0a(Ec);Yc=Jc;Zc=Fc;Mc=220}break}case 214:{Fc=Hc()|0;Jc=M;Ec=k[$b>>2]|0;if(Ec)j0a(Ec);Ec=k[_b>>2]|0;if(!Ec){Yc=Jc;Zc=Fc;Mc=220}else{j0a(Ec);Yc=Jc;Zc=Fc;Mc=220}break}case 219:{Fc=Hc()|0;Yc=M;Zc=Fc;Mc=220;break}case 221:{Fc=Hc()|0;Jc=M;k[N>>2]=20456;xh(yb,k[zb>>2]|0);Ec=k[Ab>>2]|0;if(!Ec){_c=Fc;$c=Jc;Mc=275}else{k0a(Ec);_c=Fc;$c=Jc;Mc=275}break}case 223:{Jc=Hc()|0;Fc=M;k[P>>2]=20456;xh(Tb,k[Ub>>2]|0);Ec=k[Vb>>2]|0;if(!Ec){_c=Jc;$c=Fc;Mc=275}else{k0a(Ec);_c=Jc;$c=Fc;Mc=275}break}case 230:{Fc=Hc()|0;Jc=M;Ec=k[mc>>2]|0;if(Ec)j0a(Ec);Ec=k[lc>>2]|0;if(!Ec){Yc=Jc;Zc=Fc;Mc=220}else{j0a(Ec);Yc=Jc;Zc=Fc;Mc=220}break}case 240:{Fc=Hc()|0;Jc=M;Ec=k[tc>>2]|0;if(Ec)j0a(Ec);Ec=k[sc>>2]|0;if(!Ec){Yc=Jc;Zc=Fc;Mc=220}else{j0a(Ec);Yc=Jc;Zc=Fc;Mc=220}break}case 249:{Fc=Hc()|0;Jc=M;Ec=k[zc>>2]|0;if(Ec)j0a(Ec);Ec=k[yc>>2]|0;if(!Ec){Yc=Jc;Zc=Fc;Mc=220}else{j0a(Ec);Yc=Jc;Zc=Fc;Mc=220}break}case 268:{Fc=Hc()|0;Jc=M;Ec=k[fc>>2]|0;if(Ec)j0a(Ec);Ec=k[ec>>2]|0;if(!Ec){Yc=Jc;Zc=Fc;Mc=220}else{j0a(Ec);Yc=Jc;Zc=Fc;Mc=220}break}case 289:{Fc=Hc()|0;Jc=M;Ec=k[Ic>>2]|0;if(Ec)j0a(Ec);Ec=k[Gc>>2]|0;if(!Ec){Uc=Jc;Vc=Fc;Mc=129}else{j0a(Ec);Uc=Jc;Vc=Fc;Mc=129}break}case 294:{ad=Hc()|0;bd=M;Mc=296;break}case 295:{Fc=Hc()|0;Jc=M;K2a(V);ad=Fc;bd=Jc;Mc=296;break}}if((Mc|0)==129){Wc=Vc;Xc=Uc}else if((Mc|0)==220){_c=Zc;$c=Yc;Mc=275}else if((Mc|0)==296){K2a(W);Wc=ad;Xc=bd}if((Mc|0)==275){Jc=k[gc>>2]|0;if(!Jc){Wc=_c;Xc=$c}else{j0a(Jc);Wc=_c;Xc=$c}}Jc=k[Ac>>2]|0;if(!Jc)Sc(Wc|0);j0a(Jc);Sc(Wc|0)}while(0);Wc=k[Z>>2]|0;k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;Z=e+48|0;k[Z>>2]=-1;k[Z+4>>2]=-1;Z=e+56|0;$c=e+60|0;Xc=e+72|0;_c=Wc+48|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[Z+16>>2]=0;x=0;Ta(539,_c|0,e|0)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;Wc=k[Xc>>2]|0;if(Wc)j0a(Wc);Wc=k[$c>>2]|0;if(!Wc)Sc(Z|0);j0a(Wc);Sc(Z|0)}Z=k[Xc>>2]|0;if(Z)j0a(Z);Z=k[$c>>2]|0;if(Z)j0a(Z);k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;Z=e+48|0;k[Z>>2]=-1;k[Z+4>>2]=-1;Z=e+56|0;$c=e+60|0;Xc=e+72|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[Z+16>>2]=0;x=0;Ta(539,_c|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;_c=k[Xc>>2]|0;if(_c)j0a(_c);_c=k[$c>>2]|0;if(!_c)Sc(e|0);j0a(_c);Sc(e|0)}else{e=k[Xc>>2]|0;if(e)j0a(e);e=k[$c>>2]|0;if(!e){r=d;return}j0a(e);r=d;return}}function gka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+96|0;e=d;f=d+80|0;g=a+8|0;a=k[g>>2]|0;k[f>>2]=a;if((k[b>>2]|0)==(k[b+4>>2]|0)){k[e>>2]=1;k[e+8>>2]=0;k[e+40>>2]=1;h=e+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=e+56|0;i=e+60|0;j=e+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,a+48|0,e|0)|0;a=x;x=0;if(a&1){a=Hc()|0;h=k[j>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(!h)Sc(a|0);j0a(h);Sc(a|0)}else{a=k[j>>2]|0;if(a)j0a(a);a=k[i>>2]|0;if(a)j0a(a);r=d;return}}else{fla(f);qla(f,b,b,1,0,c);hla(f);f=k[g>>2]|0;k[e>>2]=1;k[e+8>>2]=243;k[e+40>>2]=1;g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;c=e+60|0;b=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,f+48|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;f=k[b>>2]|0;if(f)j0a(f);f=k[c>>2]|0;if(!f)Sc(e|0);j0a(f);Sc(e|0)}else{e=k[b>>2]|0;if(e)j0a(e);e=k[c>>2]|0;if(e)j0a(e);r=d;return}}}function hka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+80|0;d=c+56|0;e=c;f=c+40|0;g=c+24|0;h=(i[b+56>>0]|0)!=0;q2a(d,262486,49);x=0;pa(57,h|0,d|0,404,261497,262536);h=x;x=0;if(h&1){h=Hc()|0;j=M;K2a(d);l=j;m=h;Sc(m|0)}K2a(d);d=a+8|0;xka(e,k[d>>2]|0,b);x=0;xa(831,k[d>>2]|0,b|0);h=x;x=0;do if(!(h&1)){j=k[a+12>>2]|0;n=a+16|0;o=k[n>>2]|0;if((o|0)!=(j|0)){p=o;do{k[n>>2]=p+-80;o=k[p+-8>>2]|0;if(o)j0a(o);o=k[p+-20>>2]|0;if(o)j0a(o);p=k[n>>2]|0}while((p|0)!=(j|0))}j=k[a+24>>2]|0;p=a+28|0;n=k[p>>2]|0;if((n|0)!=(j|0)){o=n;do{k[p>>2]=o+-80;n=k[o+-8>>2]|0;if(n)j0a(n);n=k[o+-20>>2]|0;if(n)j0a(n);o=k[p>>2]|0}while((o|0)!=(j|0))}j=k[d>>2]|0;o=i[a+4>>0]|0;if(!(i[b+58>>0]|0)){k[g>>2]=41912;i[g+4>>0]=o;k[g+8>>2]=j;k[g+12>>2]=0;x=0;xa(833,g|0,b|0);p=x;x=0;if(p&1){p=Hc()|0;n=M;k[g>>2]=41912;q=g+12|0;s=k[q>>2]|0;k[q>>2]=0;if(!s){t=n;u=p;break}OBa(s);t=n;u=p;break}k[g>>2]=41912;p=g+12|0;n=k[p>>2]|0;k[p>>2]=0;if(!n){oy(e);r=c;return 0}OBa(n);oy(e);r=c;return 0}else{k[f>>2]=41912;i[f+4>>0]=o;k[f+8>>2]=j;k[f+12>>2]=0;x=0;xa(832,f|0,b|0);j=x;x=0;if(j&1){j=Hc()|0;o=M;k[f>>2]=41912;n=f+12|0;p=k[n>>2]|0;k[n>>2]=0;if(!p){t=o;u=j;break}OBa(p);t=o;u=j;break}k[f>>2]=41912;j=f+12|0;o=k[j>>2]|0;k[j>>2]=0;if(!o){oy(e);r=c;return 0}OBa(o);oy(e);r=c;return 0}}else{o=Hc()|0;t=M;u=o}while(0);oy(e);l=t;m=u;Sc(m|0);return 0}function ika(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;c=r;r=r+272|0;d=c+72|0;e=c+48|0;f=c+260|0;g=c+24|0;h=c+256|0;j=c+244|0;l=c;m=c+220|0;n=c+208|0;o=c+232|0;p=c+204|0;q=c+192|0;s=c+188|0;t=c+176|0;u=c+164|0;v=c+152|0;w=a+8|0;xka(l,k[w>>2]|0,b);x=0;xa(831,k[w>>2]|0,b|0);y=x;x=0;a:do if(!(y&1)){z=b+52|0;A=k[z>>2]|0;B=k[A+24>>2]|0;C=k[A+28>>2]|0;b:do if((B|0)==(C|0))D=0;else{A=B;E=0;while(1){F=k[A>>2]|0;x=0;G=Ba(k[(k[F>>2]|0)+16>>2]|0,F|0)|0;F=x;x=0;if(F&1)break;F=k[G+4>>2]|0;x=0;G=Ba(k[(k[F>>2]|0)+60>>2]|0,F|0)|0;F=x;x=0;if(F&1)break;F=G+E|0;A=A+8|0;if((A|0)==(C|0)){D=F;break b}else E=F}E=Hc()|0;H=M;I=E;break a}while(0);C=b+77|0;if((i[C>>0]|0)==0?(x=0,xa(823,(k[w>>2]|0)+48|0,D+1|0),B=x,x=0,B&1):0){J=13;break}B=k[z>>2]|0;E=k[B+24>>2]|0;A=k[B+28>>2]|0;c:do if((E|0)!=(A|0)){B=E;F=D;while(1){G=k[B>>2]|0;K=k[B+4>>2]|0;L=(K|0)==0;if(!L)h0a(K);x=0;fb(335,k[w>>2]|0,G|0,F|0);N=x;x=0;if(N&1){O=K;P=L;break}x=0;N=Ba(k[(k[G>>2]|0)+16>>2]|0,G|0)|0;G=x;x=0;if(G&1){O=K;P=L;break}G=k[N+4>>2]|0;x=0;N=Ba(k[(k[G>>2]|0)+60>>2]|0,G|0)|0;G=x;x=0;if(G&1){O=K;P=L;break}if(!L)j0a(K);B=B+8|0;if((B|0)==(A|0))break c;else F=F-N|0}F=Hc()|0;B=M;if(P){Q=F;R=B;oy(l);Sc(Q|0)}j0a(O);Q=F;R=B;oy(l);Sc(Q|0)}while(0);A=b+60|0;E=k[A>>2]|0;B=k[E+24>>2]|0;F=k[E+28>>2]|0;d:do if((B|0)!=(F|0)){E=B;while(1){N=k[E>>2]|0;K=k[E+4>>2]|0;L=(K|0)==0;if(!L)h0a(K);x=0;fb(327,g|0,k[w>>2]|0,N|0);G=x;x=0;if(G&1){S=K;T=L;J=40;break}x=0;fb(335,k[w>>2]|0,N|0,0);G=x;x=0;if(G&1){U=K;V=L;J=36;break}k[h>>2]=k[w>>2];x=0;G=Ba(k[(k[N>>2]|0)+16>>2]|0,N|0)|0;N=x;x=0;if(N&1){U=K;V=L;J=36;break}x=0;xa(834,h|0,k[G+4>>2]|0);G=x;x=0;if(G&1){U=K;V=L;J=36;break}oy(g);if(!L)j0a(K);E=E+8|0;if((E|0)==(F|0))break d}if((J|0)==36){E=Hc()|0;K=M;oy(g);W=U;X=V;Y=K;Z=E}else if((J|0)==40){E=Hc()|0;W=S;X=T;Y=M;Z=E}if(X){Q=Z;R=Y;oy(l);Sc(Q|0)}j0a(W);Q=Z;R=Y;oy(l);Sc(Q|0)}while(0);F=b+40|0;B=k[F>>2]|0;E=b+44|0;K=k[E>>2]|0;e:do if((B|0)!=(K|0)){L=B;while(1){G=k[L>>2]|0;x=0;fb(327,e|0,k[w>>2]|0,G|0);N=x;x=0;if(N&1){J=11;break}x=0;fb(335,k[w>>2]|0,G|0,0);N=x;x=0;if(N&1){J=48;break}k[f>>2]=k[w>>2];x=0;N=Ba(k[(k[G>>2]|0)+16>>2]|0,G|0)|0;G=x;x=0;if(G&1){J=48;break}x=0;xa(834,f|0,k[N+4>>2]|0);N=x;x=0;if(N&1){J=48;break}oy(e);L=L+4|0;if((L|0)==(K|0))break e}if((J|0)==11){L=Hc()|0;H=M;I=L;break a}else if((J|0)==48){L=Hc()|0;N=M;oy(e);H=N;I=L;break a}}while(0);if(i[C>>0]|0){K=iDa(k[b+36>>2]|0,5224,5312,0)|0;if(!K){x=0;hb(49);x=0;J=13;break}x=0;B=Ta(601,k[w>>2]|0,K|0)|0;K=x;x=0;if(K&1){J=13;break}if((B|0)!=0?(x=0,xa(835,a|0,B|0),B=x,x=0,B&1):0){J=13;break}}B=a+36|0;K=k[B>>2]|0;L=a+40|0;N=k[L>>2]|0;x=0;fb(140,m|0,329672,0);G=x;x=0;if(!(G&1)){x=0;pa(57,(K|0)==(N|0)|0,m|0,447,261497,262632);N=x;x=0;if(N&1){N=Hc()|0;K=M;K2a(m);Q=N;R=K;oy(l);Sc(Q|0)}K2a(m);K=k[a+12>>2]|0;N=a+16|0;G=k[N>>2]|0;if((G|0)!=(K|0)){_=G;do{k[N>>2]=_+-80;G=k[_+-8>>2]|0;if(G)j0a(G);G=k[_+-20>>2]|0;if(G)j0a(G);_=k[N>>2]|0}while((_|0)!=(K|0))}K=k[a+24>>2]|0;_=a+28|0;N=k[_>>2]|0;if((N|0)!=(K|0)){G=N;do{k[_>>2]=G+-80;N=k[G+-8>>2]|0;if(N)j0a(N);N=k[G+-20>>2]|0;if(N)j0a(N);G=k[_>>2]|0}while((G|0)!=(K|0))}k[a+56>>2]=0;k[a+52>>2]=b;k[a+48>>2]=-1;x=0;va(1511,a|0);K=x;x=0;if(!(K&1)?(K=k[B>>2]|0,G=k[L>>2]|0,x=0,fb(140,n|0,329672,0),_=x,x=0,!(_&1)):0){x=0;pa(57,(K|0)==(G|0)|0,n|0,456,261497,262632);G=x;x=0;if(G&1){G=Hc()|0;K=M;K2a(n);Q=G;R=K;oy(l);Sc(Q|0)}K2a(n);K=k[z>>2]|0;G=k[K+24>>2]|0;_=k[K+28>>2]|0;f:do if((G|0)==(_|0))$=0;else{K=G;N=0;while(1){aa=k[K>>2]|0;x=0;ba=Ba(k[(k[aa>>2]|0)+16>>2]|0,aa|0)|0;aa=x;x=0;if(aa&1)break;aa=k[ba+4>>2]|0;x=0;ba=Ba(k[(k[aa>>2]|0)+60>>2]|0,aa|0)|0;aa=x;x=0;if(aa&1)break;aa=ba+N|0;K=K+8|0;if((K|0)==(_|0)){$=aa;break f}else N=aa}N=Hc()|0;H=M;I=N;break a}while(0);_=k[A>>2]|0;G=k[_+24>>2]|0;L=k[_+28>>2]|0;g:do if((G|0)==(L|0))ca=0;else{_=G;B=0;while(1){N=k[_>>2]|0;x=0;K=Ba(k[(k[N>>2]|0)+16>>2]|0,N|0)|0;N=x;x=0;if(N&1)break;N=k[K+4>>2]|0;x=0;K=Ba(k[(k[N>>2]|0)+60>>2]|0,N|0)|0;N=x;x=0;if(N&1)break;N=K+B|0;_=_+8|0;if((_|0)==(L|0)){ca=N;break g}else B=N}B=Hc()|0;H=M;I=B;break a}while(0);L=k[F>>2]|0;G=k[E>>2]|0;h:do if((L|0)==(G|0))da=0;else{B=L;_=0;while(1){N=k[B>>2]|0;x=0;K=Ba(k[(k[N>>2]|0)+16>>2]|0,N|0)|0;N=x;x=0;if(N&1)break;N=k[K+4>>2]|0;x=0;K=Ba(k[(k[N>>2]|0)+60>>2]|0,N|0)|0;N=x;x=0;if(N&1)break;N=K+_|0;B=B+4|0;if((B|0)==(G|0)){da=N;break h}else _=N}_=Hc()|0;H=M;I=_;break a}while(0);k[o>>2]=0;G=o+4|0;k[G>>2]=0;k[o+8>>2]=0;k[p>>2]=ca;L=o+8|0;x=0;xa(836,o|0,p|0);_=x;x=0;i:do if(_&1)J=117;else{k[q>>2]=0;B=q+4|0;k[B>>2]=0;k[q+8>>2]=0;j:do if($){if(!($>>>0>1073741823?(x=0,va(1473,q|0),N=x,x=0,N&1):0))J=88;do if((J|0)==88){N=$<<2;x=0;K=Ba(563,N|0)|0;aa=x;x=0;if(aa&1)break;k[q>>2]=K;aa=K+($<<2)|0;k[q+8>>2]=aa;Fyb(K|0,-1,N|0)|0;k[B>>2]=aa;do if((K|0)==(aa|0))ea=K;else{N=K;while(1){ba=k[G>>2]|0;if((ba|0)==(k[L>>2]|0)){x=0;xa(837,o|0,N|0);fa=x;x=0;if(fa&1)break}else{k[ba>>2]=k[N>>2];k[G>>2]=ba+4}N=N+4|0;if((N|0)==(aa|0)){J=98;break}}if((J|0)==98){ea=k[q>>2]|0;break}N=Hc()|0;ba=M;fa=k[q>>2]|0;if(!fa){ga=N;ha=ba;break i}ia=k[B>>2]|0;if((ia|0)!=(fa|0))k[B>>2]=ia+(~((ia+-4-fa|0)>>>2)<<2);OBa(fa);ga=N;ha=ba;break i}while(0);if(!ea)break j;aa=k[B>>2]|0;if((aa|0)!=(ea|0))k[B>>2]=aa+(~((aa+-4-ea|0)>>>2)<<2);OBa(ea);break j}while(0);aa=Hc()|0;K=M;ba=k[q>>2]|0;if(!ba){ja=K;ka=aa;J=118;break i}N=k[B>>2]|0;if((N|0)!=(ba|0))k[B>>2]=N+(~((N+-4-ba|0)>>>2)<<2);OBa(ba);ja=K;ka=aa;J=118;break i}while(0);k:do if(ca){B=0;while(1){k[s>>2]=B;aa=k[G>>2]|0;if(aa>>>0>=(k[L>>2]|0)>>>0){x=0;xa(836,o|0,s|0);K=x;x=0;if(K&1)break}else{k[aa>>2]=B;k[G>>2]=aa+4}B=B+1|0;if(B>>>0>=ca>>>0)break k}B=Hc()|0;ja=M;ka=B;J=118;break i}while(0);k[t>>2]=0;B=t+4|0;k[B>>2]=0;k[t+8>>2]=0;l:do if(da){if(!(da>>>0>1073741823?(x=0,va(1473,t|0),aa=x,x=0,aa&1):0))J=107;do if((J|0)==107){aa=da<<2;x=0;K=Ba(563,aa|0)|0;ba=x;x=0;if(ba&1)break;k[t>>2]=K;ba=K+(da<<2)|0;k[t+8>>2]=ba;Fyb(K|0,-1,aa|0)|0;k[B>>2]=ba;do if((K|0)==(ba|0))la=K;else{aa=K;while(1){N=k[G>>2]|0;if((N|0)==(k[L>>2]|0)){x=0;xa(837,o|0,aa|0);fa=x;x=0;if(fa&1)break}else{k[N>>2]=k[aa>>2];k[G>>2]=N+4}aa=aa+4|0;if((aa|0)==(ba|0)){J=132;break}}if((J|0)==132){la=k[t>>2]|0;break}aa=Hc()|0;N=M;fa=k[t>>2]|0;if(!fa){ga=aa;ha=N;break i}ia=k[B>>2]|0;if((ia|0)!=(fa|0))k[B>>2]=ia+(~((ia+-4-fa|0)>>>2)<<2);OBa(fa);ga=aa;ha=N;break i}while(0);if(!la)break l;ba=k[B>>2]|0;if((ba|0)!=(la|0))k[B>>2]=ba+(~((ba+-4-la|0)>>>2)<<2);OBa(la);break l}while(0);ba=Hc()|0;K=M;N=k[t>>2]|0;if(!N){ja=K;ka=ba;J=118;break i}aa=k[B>>2]|0;if((aa|0)!=(N|0))k[B>>2]=aa+(~((aa+-4-N|0)>>>2)<<2);OBa(N);ja=K;ka=ba;J=118;break i}while(0);B=k[G>>2]|0;ba=k[o>>2]|0;x=0;fb(140,u|0,270638,45);K=x;x=0;if(K&1){J=117;break}x=0;pa(57,B-ba>>2>>>0<18|0,u|0,475,261497,262632);ba=x;x=0;if(ba&1){ba=Hc()|0;B=M;K2a(u);ga=ba;ha=B;break}K2a(u);B=k[G>>2]|0;ba=k[B+-4>>2]|0;K=B-(k[o>>2]|0)>>2;m:do if((ba|0)!=(K+-1|0)){B=d+8|0;N=d+40|0;aa=d+48|0;fa=d+56|0;ia=d+60|0;ma=d+72|0;na=ba;oa=K;while(1){qa=k[w>>2]|0;if((na|0)<0){k[d>>2]=1;k[B>>2]=80;k[N>>2]=1;ra=aa;k[ra>>2]=-1;k[ra+4>>2]=-1;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[fa+16>>2]=0;x=0;Ta(539,qa+48|0,d|0)|0;ra=x;x=0;if(ra&1){J=147;break}ra=k[ma>>2]|0;if(ra)j0a(ra);ra=k[ia>>2]|0;if(ra)j0a(ra);ra=k[G>>2]|0;sa=ra+-4|0;k[G>>2]=sa;ta=sa;ua=k[o>>2]|0;wa=k[ra+-8>>2]|0}else{ra=oa-na|0;x=0;fb(140,j|0,296239,35);sa=x;x=0;if(sa&1){J=115;break}x=0;pa(51,(ra+-2|0)>>>0<16|0,j|0,217,295981,296275);sa=x;x=0;if(sa&1){J=159;break}K2a(j);x=0;Ta(594,qa|0,ra+142&255|0)|0;ra=x;x=0;if(ra&1){J=115;break}ra=k[G>>2]|0;qa=ra+-4|0;sa=k[qa>>2]|0;ya=k[o>>2]|0;za=ya+(sa<<2)|0;Aa=k[za>>2]|0;k[za>>2]=sa;k[qa>>2]=Aa;ta=ra;ua=ya;wa=Aa}oa=ta-ua>>2;if((wa|0)==(oa+-1|0))break m;else na=wa}if((J|0)==115){na=Hc()|0;ja=M;ka=na;J=118;break i}else if((J|0)==147){na=Hc()|0;oa=M;fa=k[ma>>2]|0;if(fa)j0a(fa);fa=k[ia>>2]|0;if(!fa){ja=oa;ka=na;J=118;break i}j0a(fa);ja=oa;ka=na;J=118;break i}else if((J|0)==159){na=Hc()|0;oa=M;K2a(j);ja=oa;ka=na;J=118;break i}}while(0);x=0;fb(336,v|0,(k[z>>2]|0)+24|0,(k[A>>2]|0)+24|0);K=x;x=0;if(K&1){J=117;break}K=k[v>>2]|0;ba=v+4|0;na=k[ba>>2]|0;do if((K|0)==(na|0))Ca=K;else{oa=K;while(1){fa=k[oa>>2]|0;Da=k[oa+4>>2]|0;Ea=(Da|0)==0;if(!Ea)h0a(Da);x=0;xa(838,k[w>>2]|0,fa|0);fa=x;x=0;if(fa&1)break;if(!Ea)j0a(Da);oa=oa+8|0;if((oa|0)==(na|0)){J=165;break}}if((J|0)==165){Ca=k[v>>2]|0;break}oa=Hc()|0;ia=M;if(!Ea)j0a(Da);ma=k[v>>2]|0;if(!ma){ga=oa;ha=ia;break i}fa=k[ba>>2]|0;if((fa|0)==(ma|0))Fa=ma;else{aa=fa;while(1){fa=aa+-8|0;k[ba>>2]=fa;N=k[aa+-4>>2]|0;if(!N)Ga=fa;else{j0a(N);Ga=k[ba>>2]|0}if((Ga|0)==(ma|0))break;else aa=Ga}Fa=k[v>>2]|0}OBa(Fa);ga=oa;ha=ia;break i}while(0);if(Ca){na=k[ba>>2]|0;if((na|0)==(Ca|0))Ha=Ca;else{K=na;while(1){na=K+-8|0;k[ba>>2]=na;aa=k[K+-4>>2]|0;if(!aa)Ia=na;else{j0a(aa);Ia=k[ba>>2]|0}if((Ia|0)==(Ca|0))break;else K=Ia}Ha=k[v>>2]|0}OBa(Ha)}K=k[F>>2]|0;ba=k[E>>2]|0;n:do if((K|0)!=(ba|0)){aa=K;while(1){x=0;xa(838,k[w>>2]|0,k[aa>>2]|0);na=x;x=0;if(na&1)break;aa=aa+4|0;if((aa|0)==(ba|0))break n}aa=Hc()|0;ja=M;ka=aa;J=118;break i}while(0);x=0;xa(823,(k[w>>2]|0)+48|0,0-ca|0);ba=x;x=0;if(ba&1){J=117;break}if((i[C>>0]|0)==0?(x=0,Ta(602,k[w>>2]|0,2)|0,ba=x,x=0,ba&1):0){J=117;break}ba=k[o>>2]|0;if(!ba){oy(l);r=c;return 0}K=k[G>>2]|0;if((K|0)!=(ba|0))k[G>>2]=K+(~((K+-4-ba|0)>>>2)<<2);OBa(ba);oy(l);r=c;return 0}while(0);if((J|0)==117){C=Hc()|0;ja=M;ka=C;J=118}if((J|0)==118){ga=ka;ha=ja}C=k[o>>2]|0;if(!C){Q=ga;R=ha;oy(l);Sc(Q|0)}E=k[G>>2]|0;if((E|0)!=(C|0))k[G>>2]=E+(~((E+-4-C|0)>>>2)<<2);OBa(C);Q=ga;R=ha;oy(l);Sc(Q|0)}else J=13}else J=13}else J=13;while(0);if((J|0)==13){J=Hc()|0;H=M;I=J}Q=I;R=H;oy(l);Sc(Q|0);return 0}function jka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c;e=c+24|0;f=a+8|0;xka(d,k[f>>2]|0,b);x=0;fb(335,k[f>>2]|0,b|0,0);a=x;x=0;if((!(a&1)?(k[e>>2]=k[f>>2],x=0,f=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,b=x,x=0,!(b&1)):0)?(x=0,xa(834,e|0,k[f+4>>2]|0),f=x,x=0,!(f&1)):0){oy(d);r=c;return}c=Hc()|0;oy(d);Sc(c|0)}function kka(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+192|0;c=b+104|0;d=b+180|0;e=b+168|0;f=b+156|0;g=b+80|0;h=b+144|0;j=b;l=b+132|0;m=b+128|0;n=a+52|0;o=(k[n>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,o|0,e|0,788,261497,262727);o=x;x=0;if(o&1){o=Hc()|0;p=M;K2a(e);q=o;s=p;Sc(q|0)}K2a(e);e=a+48|0;p=(k[e>>2]|0)+1|0;k[e>>2]=p;o=k[n>>2]|0;t=k[o+80>>2]|0;a:do if(p>>>0<(k[o+84>>2]|0)-t>>3>>>0){u=t+(p<<3)|0;v=k[(k[u>>2]|0)+24>>2]|0;w=(Vf[k[(k[v>>2]|0)+16>>2]&1023](v)|0)+24|0;v=k[w>>2]|0;if((v|0)!=0?(iDa(v,4520,5312,0)|0)!=0:0){kka(a);y=k[e>>2]|0;z=y+-1|0;k[e>>2]=z;r=b;return}v=a+8|0;w=rma(k[v>>2]|0,k[(k[(k[u>>2]|0)+24>>2]|0)+24>>2]|0)|0;xka(g,k[v>>2]|0,w);A=w+52|0;B=k[A>>2]|0;C=k[B+28>>2]|0;D=k[B+24>>2]|0;B=k[u>>2]|0;E=k[B+36>>2]|0;F=k[B+32>>2]|0;x=0;fb(140,h|0,329672,0);B=x;x=0;b:do if(B&1){G=Hc()|0;H=M;I=G;J=20}else{x=0;pa(57,(C-D|0)==(E-F|0)|0,h|0,810,261497,262727);G=x;x=0;if(G&1){G=Hc()|0;K=M;K2a(h);L=G;N=K;break}K2a(h);K=k[A>>2]|0;c:do if((k[K+28>>2]|0)==(k[K+24>>2]|0))O=K;else{G=K;P=0;while(1){x=0;fb(335,k[v>>2]|0,k[(k[G+24>>2]|0)+(P<<3)>>2]|0,0);Q=x;x=0;if(Q&1)break;Q=k[(k[(k[u>>2]|0)+32>>2]|0)+(P<<3)>>2]|0;R=k[(k[(k[A>>2]|0)+24>>2]|0)+(P<<3)>>2]|0;x=0;S=Ba(k[(k[R>>2]|0)+16>>2]|0,R|0)|0;R=x;x=0;if(R&1)break;x=0;fb(332,a|0,Q|0,S+4|0);S=x;x=0;if(S&1)break;P=P+1|0;S=k[A>>2]|0;if(P>>>0>=(k[S+28>>2]|0)-(k[S+24>>2]|0)>>3>>>0){O=S;break c}else G=S}G=Hc()|0;H=M;I=G;J=20;break b}while(0);K=w+40|0;G=k[K>>2]|0;P=w+44|0;S=k[P>>2]|0;do if((G|0)!=(S|0)){Q=G;while(1){R=k[Q>>2]|0;x=0;fb(327,c|0,k[v>>2]|0,R|0);T=x;x=0;if(T&1){J=17;break}x=0;fb(335,k[v>>2]|0,R|0,0);T=x;x=0;if(T&1){J=30;break}k[d>>2]=k[v>>2];x=0;T=Ba(k[(k[R>>2]|0)+16>>2]|0,R|0)|0;R=x;x=0;if(R&1){J=30;break}x=0;xa(834,d|0,k[T+4>>2]|0);T=x;x=0;if(T&1){J=30;break}oy(c);Q=Q+4|0;if((Q|0)==(S|0)){J=32;break}}if((J|0)==17){Q=Hc()|0;H=M;I=Q;J=20;break b}else if((J|0)==30){Q=Hc()|0;T=M;oy(c);H=T;I=Q;J=20;break b}else if((J|0)==32){U=k[A>>2]|0;break}}else U=O;while(0);S=k[U+24>>2]|0;G=k[U+28>>2]|0;d:do if((S|0)==(G|0))V=0;else{Q=S;T=0;while(1){R=k[Q>>2]|0;x=0;W=Ba(k[(k[R>>2]|0)+16>>2]|0,R|0)|0;R=x;x=0;if(R&1)break;R=k[W+4>>2]|0;x=0;W=Ba(k[(k[R>>2]|0)+60>>2]|0,R|0)|0;R=x;x=0;if(R&1)break;R=W+T|0;Q=Q+8|0;if((Q|0)==(G|0)){V=R;break d}else T=R}T=Hc()|0;H=M;I=T;J=20;break b}while(0);G=k[K>>2]|0;S=k[P>>2]|0;e:do if((G|0)==(S|0))X=0;else{T=G;Q=0;while(1){R=k[T>>2]|0;x=0;W=Ba(k[(k[R>>2]|0)+16>>2]|0,R|0)|0;R=x;x=0;if(R&1)break;R=k[W+4>>2]|0;x=0;W=Ba(k[(k[R>>2]|0)+60>>2]|0,R|0)|0;R=x;x=0;if(R&1)break;R=W+Q|0;T=T+4|0;if((T|0)==(S|0)){X=R;break e}else Q=R}Q=Hc()|0;H=M;I=Q;J=20;break b}while(0);S=k[w+76>>2]|0;oy(g);Y=S;Z=X+V|0;break a}while(0);if((J|0)==20){L=I;N=H}oy(g);q=L;s=N;Sc(q|0)}else{w=(i[o+76>>0]|0)!=0;q2a(f,329672,0);x=0;pa(57,w|0,f|0,796,261497,262727);w=x;x=0;if(!(w&1)){K2a(f);Y=k[(k[n>>2]|0)+92>>2]|0;Z=0;break}w=Hc()|0;A=M;K2a(f);q=w;s=A;Sc(q|0)}while(0);if(!Y){y=k[e>>2]|0;z=y+-1|0;k[e>>2]=z;r=b;return}f=a+36|0;n=a+8|0;o=(k[n>>2]|0)+48|0;N=k[o>>2]|0;k[o>>2]=N+1;k[j>>2]=8;o=j+8|0;k[o>>2]=N;k[j+40>>2]=1;N=j+48|0;k[N>>2]=-1;k[N+4>>2]=-1;N=j+56|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[N+16>>2]=0;L=a+40|0;g=k[L>>2]|0;do if(g>>>0<(k[a+44>>2]|0)>>>0){k[g>>2]=8;H=g+8|0;I=o;J=H+40|0;do{k[H>>2]=k[I>>2];H=H+4|0;I=I+4|0}while((H|0)<(J|0));k[g+48>>2]=-1;k[g+52>>2]=-1;k[g+56>>2]=0;k[g+60>>2]=0;k[N>>2]=0;k[j+60>>2]=0;k[g+64>>2]=0;k[g+68>>2]=0;k[g+72>>2]=0;k[j+68>>2]=0;k[j+72>>2]=0;k[L>>2]=(k[L>>2]|0)+80}else{x=0;xa(690,f|0,j|0);I=x;x=0;if(!(I&1)){I=k[j+72>>2]|0;if(!I)break;j0a(I);break}I=Hc()|0;H=M;J=k[j+72>>2]|0;if(J)j0a(J);J=k[j+60>>2]|0;if(!J){q=I;s=H;Sc(q|0)}j0a(J);q=I;s=H;Sc(q|0)}while(0);g=k[j+60>>2]|0;if(g)j0a(g);Tf[k[(k[Y>>2]|0)+12>>2]&2047](Y,a);a=(k[f>>2]|0)!=(k[L>>2]|0);q2a(l,329672,0);x=0;pa(57,a|0,l|0,837,261497,262727);a=x;x=0;if(a&1){a=Hc()|0;f=M;K2a(l);q=a;s=f;Sc(q|0)}K2a(l);gD((k[n>>2]|0)+48|0,(k[L>>2]|0)+-80|0)|0;l=k[L>>2]|0;q=l+-80|0;f=l;do{k[L>>2]=f+-80;l=k[f+-8>>2]|0;if(l)j0a(l);l=k[f+-20>>2]|0;if(l)j0a(l);f=k[L>>2]|0}while((f|0)!=(q|0));k[m>>2]=k[n>>2];ula(m,Z);y=k[e>>2]|0;z=y+-1|0;k[e>>2]=z;r=b;return}function lka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+80|0;d=c+60|0;e=c+48|0;f=c+40|0;g=c;h=c+24|0;k[e>>2]=0;i=e+4|0;k[i>>2]=0;k[e+8>>2]=0;k[f>>2]=k[b+32>>2];k[f+4>>2]=e;j=a+8|0;l=(k[j>>2]|0)+136|0;m=k[l>>2]|0;x=0;fb(140,d|0,329672,0);n=x;x=0;do if(!(n&1)){x=0;pa(57,(m|0)>-1|0,d|0,57,268696,268754);o=x;x=0;if(o&1){o=Hc()|0;p=M;K2a(d);q=p;s=o;t=21;break}K2a(d);o=k[l>>2]|0;p=(k[j>>2]|0)+48|0;u=g+16|0;k[u>>2]=g;k[g>>2]=41720;k[g+4>>2]=b;k[g+8>>2]=a;x=0;fb(337,f|0,p|0,g|0);p=x;x=0;if(p&1){p=Hc()|0;v=M;w=k[u>>2]|0;if((w|0)==(g|0)){Sf[k[(k[w>>2]|0)+16>>2]&2047](w);y=p;z=v;break}if(!w){y=p;z=v;break}Sf[k[(k[w>>2]|0)+20>>2]&2047](w);y=p;z=v;break}v=k[u>>2]|0;if((v|0)!=(g|0)){if(v)Sf[k[(k[v>>2]|0)+20>>2]&2047](v)}else Sf[k[(k[g>>2]|0)+16>>2]&2047](g);v=k[e>>2]|0;u=k[i>>2]|0;x=0;fb(140,h|0,262796,58);p=x;x=0;if(!(p&1)){x=0;pa(57,(v|0)==(u|0)|0,h|0,578,261497,262855);u=x;x=0;if(u&1){u=Hc()|0;v=M;K2a(h);y=u;z=v;break}K2a(h);x=0;xa(839,(k[j>>2]|0)+48|0,o|0);o=x;x=0;if(!(o&1)){o=k[e>>2]|0;if(!o){r=c;return 0}v=k[i>>2]|0;if((v|0)==(o|0))A=o;else{u=v;while(1){v=u+-8|0;k[i>>2]=v;p=k[u+-4>>2]|0;if(!p)B=v;else{j0a(p);B=k[i>>2]|0}if((B|0)==(o|0))break;else u=B}A=k[e>>2]|0}OBa(A);r=c;return 0}else t=20}else t=20}else t=20;while(0);if((t|0)==20){c=Hc()|0;q=M;s=c;t=21}if((t|0)==21){y=s;z=q}q=k[e>>2]|0;if(!q)Sc(y|0);z=k[i>>2]|0;if((z|0)==(q|0))C=q;else{s=z;while(1){z=s+-8|0;k[i>>2]=z;t=k[s+-4>>2]|0;if(!t)D=z;else{j0a(t);D=k[i>>2]|0}if((D|0)==(q|0))break;else s=D}C=k[e>>2]|0}OBa(C);Sc(y|0);return 0}function mka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+368|0;d=c+264|0;e=c+352|0;f=c+240|0;g=c+344|0;h=c+160|0;i=c+80|0;j=c;l=a+8|0;m=k[l>>2]|0;k[e>>2]=m;n=m+136|0;m=(k[n>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,m|0,d|0,57,268696,268754);m=x;x=0;if(m&1){m=Hc()|0;K2a(d);Sc(m|0)}K2a(d);k[e+4>>2]=k[n>>2];xka(f,k[l>>2]|0,b);n=k[b+32>>2]|0;k[g>>2]=0;k[g+4>>2]=0;x=0;fb(332,a|0,n|0,g|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;p=g;oy(f);Sc(p|0)}g=k[l>>2]|0;k[d>>2]=1;k[d+8>>2]=21;k[d+40>>2]=1;n=d+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=d+56|0;m=d+60|0;q=d+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,g+48|0,d|0)|0;d=x;x=0;do if(d&1){g=Hc()|0;n=M;s=k[q>>2]|0;if(s)j0a(s);s=k[m>>2]|0;if(!s){t=n;u=g}else{j0a(s);t=n;u=g}}else{g=k[q>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(g)j0a(g);x=0;xa(819,h|0,k[l>>2]|0);g=x;x=0;if(g&1){g=Hc()|0;t=M;u=g;break}k[i>>2]=k[h>>2];g=i+8|0;n=g;s=h+8|0;v=n+40|0;do{k[n>>2]=k[s>>2];n=n+4|0;s=s+4|0}while((n|0)<(v|0));w=h+48|0;y=k[w+4>>2]|0;z=i+48|0;k[z>>2]=k[w>>2];k[z+4>>2]=y;y=i+56|0;k[y>>2]=k[h+56>>2];z=i+60|0;w=h+60|0;A=k[w>>2]|0;k[z>>2]=A;if(A)h0a(A);A=i+64|0;k[A>>2]=k[h+64>>2];B=i+68|0;k[B>>2]=k[h+68>>2];C=i+72|0;D=h+72|0;E=k[D>>2]|0;k[C>>2]=E;if(E)h0a(E);E=k[b+40>>2]|0;x=0;xa(k[(k[E>>2]|0)+12>>2]|0,E|0,a|0);E=x;x=0;do if(!(E&1)){F=b+48|0;if(k[F>>2]|0){x=0;xa(821,j|0,k[l>>2]|0);G=x;x=0;if(G&1)break;k[i>>2]=k[j>>2];n=g;s=j+8|0;v=n+36|0;do{k[n>>2]=k[s>>2];n=n+4|0;s=s+4|0}while((n|0)<(v|0));k[i+48>>2]=k[j+48>>2];k[i+52>>2]=k[j+52>>2];G=j+56|0;H=k[G>>2]|0;I=j+60|0;J=k[I>>2]|0;k[G>>2]=0;k[I>>2]=0;k[y>>2]=H;H=k[z>>2]|0;k[z>>2]=J;if(H)j0a(H);k[A>>2]=k[j+64>>2];H=j+68|0;J=k[H>>2]|0;I=j+72|0;G=k[I>>2]|0;k[H>>2]=0;k[I>>2]=0;k[B>>2]=J;J=k[C>>2]|0;k[C>>2]=G;if(J)j0a(J);x=0;Ta(539,(k[l>>2]|0)+48|0,h|0)|0;J=x;x=0;if(J&1)break;J=k[F>>2]|0;x=0;xa(k[(k[J>>2]|0)+12>>2]|0,J|0,a|0);J=x;x=0;if(J&1)break}x=0;Ta(539,(k[l>>2]|0)+48|0,i|0)|0;J=x;x=0;if(!(J&1)?(x=0,va(1512,e|0),J=x,x=0,!(J&1)):0){J=k[C>>2]|0;if(J)j0a(J);J=k[z>>2]|0;if(J)j0a(J);J=k[D>>2]|0;if(J)j0a(J);J=k[w>>2]|0;if(!J){oy(f);r=c;return 0}j0a(J);oy(f);r=c;return 0}}while(0);B=Hc()|0;A=M;y=k[C>>2]|0;if(y)j0a(y);y=k[z>>2]|0;if(y)j0a(y);y=k[D>>2]|0;if(y)j0a(y);y=k[w>>2]|0;if(!y){o=A;p=B;oy(f);Sc(p|0)}j0a(y);o=A;p=B;oy(f);Sc(p|0)}while(0);o=t;p=u;oy(f);Sc(p|0);return 0}function nka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+448|0;d=c+344|0;e=c+264|0;f=c+184|0;g=c+432|0;h=c+160|0;i=c+80|0;j=c;l=c+424|0;m=a+8|0;n=k[m>>2]|0;k[g>>2]=n;o=n+136|0;n=(k[o>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,n|0,d|0,57,268696,268754);n=x;x=0;if(n&1){n=Hc()|0;K2a(d);Sc(n|0)}K2a(d);k[g+4>>2]=k[o>>2];xka(h,k[m>>2]|0,b);o=(k[m>>2]|0)+48|0;n=k[o>>2]|0;k[o>>2]=n+1;k[i>>2]=8;o=i+8|0;k[o>>2]=n;k[i+40>>2]=1;n=i+48|0;p=n;k[p>>2]=-1;k[p+4>>2]=-1;p=i+56|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;q=(k[m>>2]|0)+48|0;s=k[q>>2]|0;k[q>>2]=s+1;k[j>>2]=8;q=j+8|0;k[q>>2]=s;k[j+40>>2]=1;s=j+48|0;t=s;k[t>>2]=-1;k[t+4>>2]=-1;t=j+56|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;u=a+28|0;v=k[u>>2]|0;if((v|0)==(k[a+32>>2]|0)){x=0;xa(669,a+24|0,i|0);w=x;x=0;if(w&1)y=62;else y=10}else{k[v>>2]=8;z=v+8|0;A=o;B=z+40|0;do{k[z>>2]=k[A>>2];z=z+4|0;A=A+4|0}while((z|0)<(B|0));o=n;n=k[o+4>>2]|0;w=v+48|0;k[w>>2]=k[o>>2];k[w+4>>2]=n;k[v+56>>2]=k[p>>2];p=k[i+60>>2]|0;k[v+60>>2]=p;if(p)h0a(p);k[v+64>>2]=k[i+64>>2];k[v+68>>2]=k[i+68>>2];p=k[i+72>>2]|0;k[v+72>>2]=p;if(p)h0a(p);k[u>>2]=(k[u>>2]|0)+80;y=10}do if((y|0)==10){p=a+16|0;v=k[p>>2]|0;if((v|0)==(k[a+20>>2]|0)){x=0;xa(669,a+12|0,j|0);n=x;x=0;if(n&1){y=62;break}}else{k[v>>2]=k[j>>2];z=v+8|0;A=q;B=z+40|0;do{k[z>>2]=k[A>>2];z=z+4|0;A=A+4|0}while((z|0)<(B|0));n=s;w=k[n+4>>2]|0;o=v+48|0;k[o>>2]=k[n>>2];k[o+4>>2]=w;k[v+56>>2]=k[t>>2];w=k[j+60>>2]|0;k[v+60>>2]=w;if(w)h0a(w);k[v+64>>2]=k[j+64>>2];k[v+68>>2]=k[j+68>>2];w=k[j+72>>2]|0;k[v+72>>2]=w;if(w)h0a(w);k[p>>2]=(k[p>>2]|0)+80}x=0;Ta(539,(k[m>>2]|0)+48|0,i|0)|0;w=x;x=0;if(!(w&1)){w=k[b+32>>2]|0;k[l>>2]=0;k[l+4>>2]=0;x=0;fb(332,a|0,w|0,l|0);w=x;x=0;if(w&1){w=Hc()|0;C=M;D=w;break}w=k[m>>2]|0;k[f>>2]=1;k[f+8>>2]=21;k[f+40>>2]=1;o=f+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=f+56|0;n=f+60|0;E=f+72|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;x=0;Ta(539,w+48|0,f|0)|0;w=x;x=0;if(w&1){w=Hc()|0;o=M;F=k[E>>2]|0;if(F)j0a(F);F=k[n>>2]|0;if(!F){C=o;D=w;break}j0a(F);C=o;D=w;break}w=k[E>>2]|0;if(w)j0a(w);w=k[n>>2]|0;if(w)j0a(w);x=0;fb(315,e|0,(k[m>>2]|0)+48|0,j|0);w=x;x=0;if(!(w&1)){w=k[e+72>>2]|0;if(w)j0a(w);w=k[e+60>>2]|0;if(w)j0a(w);w=k[b+40>>2]|0;x=0;xa(k[(k[w>>2]|0)+12>>2]|0,w|0,a|0);w=x;x=0;if(!(w&1)?(x=0,fb(314,d|0,(k[m>>2]|0)+48|0,i|0),w=x,x=0,!(w&1)):0){w=k[d+72>>2]|0;if(w)j0a(w);w=k[d+60>>2]|0;if(w)j0a(w);x=0;Ta(539,(k[m>>2]|0)+48|0,j|0)|0;w=x;x=0;if(!(w&1)){w=k[u>>2]|0;n=w+-80|0;E=w;do{k[u>>2]=E+-80;w=k[E+-8>>2]|0;if(w)j0a(w);w=k[E+-20>>2]|0;if(w)j0a(w);E=k[u>>2]|0}while((E|0)!=(n|0));n=k[p>>2]|0;E=n+-80|0;v=n;do{k[p>>2]=v+-80;n=k[v+-8>>2]|0;if(n)j0a(n);n=k[v+-20>>2]|0;if(n)j0a(n);v=k[p>>2]|0}while((v|0)!=(E|0));x=0;va(1512,g|0);E=x;x=0;if(!(E&1)){E=k[j+72>>2]|0;if(E)j0a(E);E=k[j+60>>2]|0;if(E)j0a(E);E=k[i+72>>2]|0;if(E)j0a(E);E=k[i+60>>2]|0;if(!E){oy(h);r=c;return 0}j0a(E);oy(h);r=c;return 0}else y=62}else y=62}else y=62}else y=62}else y=62}while(0);if((y|0)==62){y=Hc()|0;C=M;D=y}y=k[j+72>>2]|0;if(y)j0a(y);y=k[j+60>>2]|0;if(y)j0a(y);y=k[i+72>>2]|0;if(y)j0a(y);y=k[i+60>>2]|0;if(!y){oy(h);Sc(D|0)}j0a(y);oy(h);Sc(D|0);return 0}function oka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+528|0;d=c+424|0;e=c+344|0;f=c+264|0;g=c+512|0;h=c+240|0;i=c+160|0;j=c+80|0;l=c;m=c+504|0;n=a+8|0;o=k[n>>2]|0;k[g>>2]=o;p=o+136|0;o=(k[p>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,o|0,d|0,57,268696,268754);o=x;x=0;if(o&1){o=Hc()|0;K2a(d);Sc(o|0)}K2a(d);k[g+4>>2]=k[p>>2];xka(h,k[n>>2]|0,b);p=(k[n>>2]|0)+48|0;o=k[p>>2]|0;k[p>>2]=o+1;k[i>>2]=8;k[i+8>>2]=o;k[i+40>>2]=1;o=i+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=i+56|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;o=(k[n>>2]|0)+48|0;p=k[o>>2]|0;k[o>>2]=p+1;k[j>>2]=8;o=j+8|0;k[o>>2]=p;k[j+40>>2]=1;p=j+48|0;q=p;k[q>>2]=-1;k[q+4>>2]=-1;q=j+56|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;s=(k[n>>2]|0)+48|0;t=k[s>>2]|0;k[s>>2]=t+1;k[l>>2]=8;s=l+8|0;k[s>>2]=t;k[l+40>>2]=1;t=l+48|0;u=t;k[u>>2]=-1;k[u+4>>2]=-1;u=l+56|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;v=a+28|0;w=k[v>>2]|0;if((w|0)==(k[a+32>>2]|0)){x=0;xa(669,a+24|0,l|0);y=x;x=0;if(y&1)z=19;else z=10}else{k[w>>2]=8;A=w+8|0;B=s;C=A+40|0;do{k[A>>2]=k[B>>2];A=A+4|0;B=B+4|0}while((A|0)<(C|0));s=t;t=k[s+4>>2]|0;y=w+48|0;k[y>>2]=k[s>>2];k[y+4>>2]=t;k[w+56>>2]=k[u>>2];u=k[l+60>>2]|0;k[w+60>>2]=u;if(u)h0a(u);k[w+64>>2]=k[l+64>>2];k[w+68>>2]=k[l+68>>2];u=k[l+72>>2]|0;k[w+72>>2]=u;if(u)h0a(u);k[v>>2]=(k[v>>2]|0)+80;z=10}do if((z|0)==10){u=a+16|0;w=k[u>>2]|0;if((w|0)==(k[a+20>>2]|0)){x=0;xa(669,a+12|0,j|0);t=x;x=0;if(t&1){z=19;break}}else{k[w>>2]=k[j>>2];A=w+8|0;B=o;C=A+40|0;do{k[A>>2]=k[B>>2];A=A+4|0;B=B+4|0}while((A|0)<(C|0));t=p;y=k[t+4>>2]|0;s=w+48|0;k[s>>2]=k[t>>2];k[s+4>>2]=y;k[w+56>>2]=k[q>>2];y=k[j+60>>2]|0;k[w+60>>2]=y;if(y)h0a(y);k[w+64>>2]=k[j+64>>2];k[w+68>>2]=k[j+68>>2];y=k[j+72>>2]|0;k[w+72>>2]=y;if(y)h0a(y);k[u>>2]=(k[u>>2]|0)+80}y=k[b+32>>2]|0;if((y|0)!=0?(x=0,xa(k[(k[y>>2]|0)+12>>2]|0,y|0,a|0),y=x,x=0,y&1):0){z=19;break}x=0;Ta(539,(k[n>>2]|0)+48|0,i|0)|0;y=x;x=0;if(!(y&1)){y=k[b+40>>2]|0;if(y){k[m>>2]=0;k[m+4>>2]=0;x=0;fb(332,a|0,y|0,m|0);y=x;x=0;if(y&1){y=Hc()|0;D=M;E=y;break}y=k[n>>2]|0;k[f>>2]=1;k[f+8>>2]=21;k[f+40>>2]=1;s=f+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=f+56|0;t=f+60|0;F=f+72|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,y+48|0,f|0)|0;y=x;x=0;if(y&1){y=Hc()|0;s=M;G=k[F>>2]|0;if(G)j0a(G);G=k[t>>2]|0;if(!G){D=s;E=y;break}j0a(G);D=s;E=y;break}y=k[F>>2]|0;if(y)j0a(y);y=k[t>>2]|0;if(y)j0a(y);x=0;fb(315,e|0,(k[n>>2]|0)+48|0,j|0);y=x;x=0;if(y&1){z=19;break}y=k[e+72>>2]|0;if(y)j0a(y);y=k[e+60>>2]|0;if(y)j0a(y)}y=k[b+56>>2]|0;x=0;xa(k[(k[y>>2]|0)+12>>2]|0,y|0,a|0);y=x;x=0;if(!(y&1)?(x=0,Ta(539,(k[n>>2]|0)+48|0,l|0)|0,y=x,x=0,!(y&1)):0){y=k[b+48>>2]|0;if((y|0)!=0?(x=0,xa(k[(k[y>>2]|0)+12>>2]|0,y|0,a|0),y=x,x=0,y&1):0){z=19;break}x=0;fb(314,d|0,(k[n>>2]|0)+48|0,i|0);y=x;x=0;if(!(y&1)){y=k[d+72>>2]|0;if(y)j0a(y);y=k[d+60>>2]|0;if(y)j0a(y);x=0;Ta(539,(k[n>>2]|0)+48|0,j|0)|0;y=x;x=0;if(!(y&1)){y=k[v>>2]|0;t=y+-80|0;F=y;do{k[v>>2]=F+-80;y=k[F+-8>>2]|0;if(y)j0a(y);y=k[F+-20>>2]|0;if(y)j0a(y);F=k[v>>2]|0}while((F|0)!=(t|0));t=k[u>>2]|0;F=t+-80|0;w=t;do{k[u>>2]=w+-80;t=k[w+-8>>2]|0;if(t)j0a(t);t=k[w+-20>>2]|0;if(t)j0a(t);w=k[u>>2]|0}while((w|0)!=(F|0));x=0;va(1512,g|0);F=x;x=0;if(!(F&1)){F=k[l+72>>2]|0;if(F)j0a(F);F=k[l+60>>2]|0;if(F)j0a(F);F=k[j+72>>2]|0;if(F)j0a(F);F=k[j+60>>2]|0;if(F)j0a(F);F=k[i+72>>2]|0;if(F)j0a(F);F=k[i+60>>2]|0;if(!F){oy(h);r=c;return 0}j0a(F);oy(h);r=c;return 0}else z=19}else z=19}else z=19}else z=19}else z=19}while(0);if((z|0)==19){z=Hc()|0;D=M;E=z}z=k[l+72>>2]|0;if(z)j0a(z);z=k[l+60>>2]|0;if(z)j0a(z);z=k[j+72>>2]|0;if(z)j0a(z);z=k[j+60>>2]|0;if(z)j0a(z);z=k[i+72>>2]|0;if(z)j0a(z);z=k[i+60>>2]|0;if(!z){oy(h);Sc(E|0)}j0a(z);oy(h);Sc(E|0);return 0}function pka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+112|0;d=c+24|0;e=c;f=a+8|0;xka(e,k[f>>2]|0,b);b=k[a+28>>2]|0;if((k[a+24>>2]|0)==(b|0)){oy(e);r=c;return 0}x=0;fb(314,d|0,(k[f>>2]|0)+48|0,b+-80|0);b=x;x=0;if(b&1){b=Hc()|0;oy(e);Sc(b|0)}b=k[d+72>>2]|0;if(b)j0a(b);b=k[d+60>>2]|0;if(b)j0a(b);oy(e);r=c;return 0}function qka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+112|0;d=c+24|0;e=c;f=a+8|0;xka(e,k[f>>2]|0,b);b=k[a+16>>2]|0;if((k[a+12>>2]|0)==(b|0)){oy(e);r=c;return 0}x=0;fb(314,d|0,(k[f>>2]|0)+48|0,b+-80|0);b=x;x=0;if(b&1){b=Hc()|0;oy(e);Sc(b|0)}b=k[d+72>>2]|0;if(b)j0a(b);b=k[d+60>>2]|0;if(b)j0a(b);oy(e);r=c;return 0}function rka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+240|0;d=c+104|0;e=c+24|0;f=c;g=c+208|0;h=c+220|0;i=c+200|0;j=c+192|0;l=c+184|0;m=a+8|0;xka(f,k[m>>2]|0,b);n=k[b+32>>2]|0;a:do if(n){x=0;o=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;p=x;x=0;if(!(p&1)?(p=k[o+20>>2]|0,x=0,fb(140,g|0,262946,34),o=x,x=0,!(o&1)):0){x=0;pa(57,(p|0)!=0|0,g|0,692,261497,262981);p=x;x=0;if(p&1){p=Hc()|0;o=M;K2a(g);q=p;s=o;oy(f);Sc(q|0)}K2a(g);x=0;o=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;p=x;x=0;if(!(p&1)){p=k[o+20>>2]|0;k[h>>2]=0;o=h+4|0;k[o>>2]=0;k[h+8>>2]=0;t=p+24|0;u=k[t>>2]|0;v=p+28|0;p=k[v>>2]|0;b:do if((u|0)==(p|0))w=8;else{y=h+8|0;z=u;while(1){A=k[z>>2]|0;x=0;B=Ba(k[(k[A>>2]|0)+16>>2]|0,A|0)|0;A=x;x=0;if(A&1)break;A=B+4|0;C=k[o>>2]|0;if((C|0)==(k[y>>2]|0)){x=0;xa(743,h|0,A|0);D=x;x=0;if(D&1)break}else{k[C>>2]=k[A>>2];A=k[B+8>>2]|0;k[C+4>>2]=A;if(!A)E=C;else{h0a(A);E=k[o>>2]|0}k[o>>2]=E+8}z=z+8|0;if((z|0)==(p|0)){w=8;break b}}z=Hc()|0;F=z;G=M}while(0);if((w|0)==8){k[i>>2]=0;p=i+4|0;k[p>>2]=0;x=0;u=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;z=x;x=0;do if(!(z&1)?(y=k[u+4>>2]|0,x=0,A=Ba(k[k[y>>2]>>2]|0,y|0)|0,y=x,x=0,!(y&1)):0){if((A|0)!=11?(A=k[h>>2]|0,((k[o>>2]|0)-A|0)==8):0){y=k[A>>2]|0;C=k[A+4>>2]|0;if(C)h0a(C);k[i>>2]=y;k[p>>2]=C;H=C}else{x=0;xa(746,j|0,h|0);C=x;x=0;if(C&1){I=0;w=26;break}C=k[j>>2]|0;y=j+4|0;A=k[y>>2]|0;k[j>>2]=0;k[y>>2]=0;k[i>>2]=C;k[p>>2]=A;H=A}x=0;fb(332,a|0,n|0,i|0);A=x;x=0;if(A&1){I=H;w=26}else{A=k[t>>2]|0;C=k[v>>2]|0;while(1){if((C|0)==(A|0))break;C=C+-8|0;k[l>>2]=k[m>>2];x=0;xa(840,l|0,k[C>>2]|0);y=x;x=0;if(y&1){w=25;break}}if((w|0)==25){C=Hc()|0;J=H;K=C;L=M;break}if(H)j0a(H);C=k[h>>2]|0;if(C){A=k[o>>2]|0;if((A|0)==(C|0))N=C;else{y=A;while(1){A=y+-8|0;k[o>>2]=A;B=k[y+-4>>2]|0;if(!B)O=A;else{j0a(B);O=k[o>>2]|0}if((O|0)==(C|0))break;else y=O}N=k[h>>2]|0}OBa(N)}w=45;break a}}else{I=0;w=26}while(0);if((w|0)==26){v=Hc()|0;J=I;K=v;L=M}if(!J){F=K;G=L}else{j0a(J);F=K;G=L}}v=k[h>>2]|0;if(!v){q=F;s=G;oy(f);Sc(q|0)}t=k[o>>2]|0;if((t|0)==(v|0))P=v;else{p=t;while(1){t=p+-8|0;k[o>>2]=t;u=k[p+-4>>2]|0;if(!u)Q=t;else{j0a(u);Q=k[o>>2]|0}if((Q|0)==(v|0))break;else p=Q}P=k[h>>2]|0}OBa(P);q=F;s=G;oy(f);Sc(q|0)}else w=9}else w=9}else w=45;while(0);c:do if((w|0)==45){G=a+56|0;F=k[m>>2]|0;d:do if(!(k[G>>2]|0))R=F;else{P=e+8|0;h=e+40|0;Q=e+48|0;L=e+56|0;K=e+60|0;J=e+72|0;I=F;N=0;while(1){k[e>>2]=1;k[P>>2]=80;k[h>>2]=1;O=Q;k[O>>2]=-1;k[O+4>>2]=-1;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;x=0;Ta(539,I+48|0,e|0)|0;O=x;x=0;if(O&1)break;O=k[J>>2]|0;if(O)j0a(O);O=k[K>>2]|0;if(O)j0a(O);N=N+1|0;O=k[m>>2]|0;if(N>>>0>=(k[G>>2]|0)>>>0){R=O;break d}else I=O}I=Hc()|0;N=M;L=k[J>>2]|0;if(L)j0a(L);L=k[K>>2]|0;if(!L){S=N;T=I;break c}j0a(L);S=N;T=I;break c}while(0);x=0;fb(314,d|0,R+48|0,(k[a+40>>2]|0)+-80|0);F=x;x=0;if(!(F&1)){F=k[d+72>>2]|0;if(F)j0a(F);F=k[d+60>>2]|0;if(F)j0a(F);x=0;xa(823,(k[m>>2]|0)+48|0,k[G>>2]|0);F=x;x=0;if(!(F&1)){oy(f);r=c;return 0}else w=9}else w=9}while(0);if((w|0)==9){w=Hc()|0;S=M;T=w}q=T;s=S;oy(f);Sc(q|0);return 0}function ska(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+192|0;d=c+104|0;e=c+80|0;f=c;g=a+8|0;xka(e,k[g>>2]|0,b);b=k[g>>2]|0;k[f>>2]=4;k[f+8>>2]=0;k[f+40>>2]=1;g=f+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=f+56|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;fb(314,d|0,b+48|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;oy(e);Sc(f|0)}f=k[d+72>>2]|0;if(f)j0a(f);f=k[d+60>>2]|0;if(!f){oy(e);r=c;return 0}j0a(f);oy(e);r=c;return 0}function tka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;c=r;r=r+80|0;d=c;e=c+72|0;f=c+60|0;g=c+64|0;h=c+48|0;i=c+36|0;j=c+24|0;l=a+8|0;m=k[l>>2]|0;k[e>>2]=m;n=m+136|0;m=(k[n>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,m|0,d|0,57,268696,268754);m=x;x=0;if(m&1){m=Hc()|0;K2a(d);Sc(m|0)}K2a(d);k[e+4>>2]=k[n>>2];xka(d,k[l>>2]|0,b);n=k[b+44>>2]|0;a:do if(n){k[f>>2]=k[l>>2];k[g>>2]=0;k[g+4>>2]=0;x=0;fb(332,a|0,n|0,g|0);m=x;x=0;if(m&1){m=Hc()|0;o=m;p=M;oy(d);Sc(o|0)}m=k[n>>2]|0;k[h>>2]=0;q=h+4|0;k[q>>2]=0;k[h+8>>2]=0;x=0;s=Ba(k[m+16>>2]|0,n|0)|0;m=x;x=0;b:do if(!(m&1)){t=k[s+4>>2]|0;if((t|0)!=0?(u=iDa(t,168,6752,0)|0,(u|0)!=0):0){t=u+24|0;if((h|0)!=(t|0)?(x=0,fb(243,h|0,k[t>>2]|0,k[u+28>>2]|0),u=x,x=0,u&1):0){v=10;break}}else{x=0;u=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;t=x;x=0;if(t&1){t=Hc()|0;w=t;y=M;break}t=k[u+4>>2]|0;z=k[u+8>>2]|0;u=(z|0)==0;if(!u)h0a(z);x=0;A=Ba(563,8)|0;B=x;x=0;if(B&1){B=Hc()|0;C=M;if(!u)j0a(z);w=B;y=C;break}k[A>>2]=t;k[A+4>>2]=z;t=A;C=A+8|0;if(!u)h0a(z);B=k[h>>2]|0;D=A+8|0;if(!B)E=h+8|0;else{A=k[q>>2]|0;if((A|0)==(B|0))F=B;else{G=A;while(1){A=G+-8|0;k[q>>2]=A;H=k[G+-4>>2]|0;if(!H)I=A;else{j0a(H);I=k[q>>2]|0}if((I|0)==(B|0))break;else G=I}F=k[h>>2]|0}OBa(F);G=h+8|0;k[G>>2]=0;k[q>>2]=0;k[h>>2]=0;E=G}k[h>>2]=t;k[q>>2]=D;k[E>>2]=C;if(!u)j0a(z)}x=0;G=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;B=x;x=0;if(!(B&1)?(B=G+20|0,H=G+24|0,G=k[H>>2]|0,A=k[B>>2]|0,J=k[q>>2]|0,K=k[h>>2]|0,x=0,fb(140,i|0,329672,0),L=x,x=0,!(L&1)):0){x=0;pa(57,(G-A>>2|0)==(J-K>>3|0)|0,i|0,737,261497,263064);K=x;x=0;if(K&1){K=Hc()|0;J=M;K2a(i);w=K;y=J;break}K2a(i);J=(k[H>>2]|0)-(k[B>>2]|0)>>2;c:do if(J){K=J;A=0;while(1){G=K-A+-1|0;L=k[(k[h>>2]|0)+(G<<3)>>2]|0;x=0;fb(140,j|0,329672,0);N=x;x=0;if(N&1){v=9;break}x=0;pa(57,(L|0)!=0|0,j|0,741,261497,263064);L=x;x=0;if(L&1){v=53;break}K2a(j);L=k[(k[B>>2]|0)+(G<<2)>>2]|0;N=k[(k[h>>2]|0)+(G<<3)>>2]|0;if(!L){x=0;xa(841,f|0,N|0);G=x;x=0;if(G&1){v=9;break}}else{x=0;G=Ba(k[(k[L>>2]|0)+16>>2]|0,L|0)|0;O=x;x=0;if(O&1){v=9;break}x=0;nb(137,f|0,N|0,k[G+4>>2]|0,0);G=x;x=0;if(G&1){v=9;break}x=0;xa(840,f|0,L|0);L=x;x=0;if(L&1){v=9;break}}A=A+1|0;K=(k[H>>2]|0)-(k[B>>2]|0)>>2;if(K>>>0<=A>>>0)break c}if((v|0)==9){A=Hc()|0;P=A;Q=M;v=11;break b}else if((v|0)==53){A=Hc()|0;K=M;K2a(j);w=A;y=K;break b}}while(0);B=k[h>>2]|0;if(B){H=k[q>>2]|0;if((H|0)==(B|0))R=B;else{J=H;while(1){H=J+-8|0;k[q>>2]=H;z=k[J+-4>>2]|0;if(!z)S=H;else{j0a(z);S=k[q>>2]|0}if((S|0)==(B|0))break;else J=S}R=k[h>>2]|0}OBa(R)}break a}else v=10}else v=10;while(0);if((v|0)==10){s=Hc()|0;P=s;Q=M;v=11}if((v|0)==11){w=P;y=Q}s=k[h>>2]|0;if(!s){o=w;p=y;oy(d);Sc(o|0)}m=k[q>>2]|0;if((m|0)==(s|0))T=s;else{J=m;while(1){m=J+-8|0;k[q>>2]=m;B=k[J+-4>>2]|0;if(!B)U=m;else{j0a(B);U=k[q>>2]|0}if((U|0)==(s|0))break;else J=U}T=k[h>>2]|0}OBa(T);o=w;p=y;oy(d);Sc(o|0)}while(0);x=0;va(1512,e|0);e=x;x=0;if(!(e&1)){oy(d);r=c;return 0}c=Hc()|0;o=c;p=M;oy(d);Sc(o|0);return 0}function uka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+48|0;d=c;e=c+40|0;f=c+32|0;g=c+24|0;h=a+8|0;i=k[h>>2]|0;k[e>>2]=i;j=i+136|0;i=(k[j>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,i|0,d|0,57,268696,268754);i=x;x=0;if(i&1){i=Hc()|0;K2a(d);Sc(i|0)}K2a(d);k[e+4>>2]=k[j>>2];xka(d,k[h>>2]|0,b);j=k[b+32>>2]|0;k[f>>2]=0;k[f+4>>2]=0;x=0;fb(332,a|0,j|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;l=f;m=M;oy(d);Sc(l|0)}f=k[j>>2]|0;k[g>>2]=k[h>>2];x=0;h=Ba(k[f+16>>2]|0,j|0)|0;j=x;x=0;if((!(j&1)?(x=0,xa(841,g|0,k[h+4>>2]|0),h=x,x=0,!(h&1)):0)?(x=0,va(1512,e|0),e=x,x=0,!(e&1)):0){oy(d);r=c;return 0}c=Hc()|0;l=c;m=M;oy(d);Sc(l|0);return 0}function vka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;e=c+24|0;f=a+8|0;g=k[f>>2]|0;k[e>>2]=g;h=g+136|0;g=(k[h>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,g|0,d|0,57,268696,268754);g=x;x=0;if(g&1){g=Hc()|0;K2a(d);Sc(g|0)}K2a(d);k[e+4>>2]=k[h>>2];xka(d,k[f>>2]|0,b);x=0;va(1511,a|0);a=x;x=0;if(a&1){i=Hc()|0;j=M;oy(d);Sc(i|0)}x=0;va(1512,e|0);e=x;x=0;if(e&1){i=Hc()|0;j=M;oy(d);Sc(i|0)}else{oy(d);r=c;return 1}return 0}function wka(){k[10450]=0;k[10451]=0;k[10452]=0;return}function xka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+32|0;e=d;f=e+16|0;k[f>>2]=e;k[e>>2]=41764;k[e+4>>2]=b;k[a+16>>2]=a;x=0;xa(k[(k[e>>2]|0)+12>>2]|0,e|0,a|0);g=x;x=0;if(g&1){g=Hc()|0;h=M;i=k[f>>2]|0;if((i|0)==(e|0)){Sf[k[(k[e>>2]|0)+16>>2]&2047](e);j=h;l=g;Sc(l|0)}if(!i){j=h;l=g;Sc(l|0)}Sf[k[(k[i>>2]|0)+20>>2]&2047](i);j=h;l=g;Sc(l|0)}g=k[f>>2]|0;if((g|0)!=(e|0)){if(g)Sf[k[(k[g>>2]|0)+20>>2]&2047](g)}else Sf[k[(k[e>>2]|0)+16>>2]&2047](e);e=c;c=k[b+232>>2]|0;g=b+228|0;f=k[g>>2]|0;h=b+240|0;i=k[h>>2]|0;m=b+244|0;n=k[m>>2]|0;o=f;if((((c|0)==(f|0)?0:(c-f<<8)+-1|0)|0)==(n+i|0)){x=0;va(1513,b+224|0);f=x;x=0;if(!(f&1)){p=k[h>>2]|0;q=k[m>>2]|0;s=k[g>>2]|0;t=9}}else{p=i;q=n;s=o;t=9}if((t|0)==9?(t=q+p|0,k[(k[s+(t>>>10<<2)>>2]|0)+((t&1023)<<2)>>2]=e,k[m>>2]=q+1,x=0,va(1514,b|0),b=x,x=0,!(b&1)):0){r=d;return}d=Hc()|0;b=M;oy(a);j=b;l=d;Sc(l|0)}function yka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;d=a+8|0;a:do if((k[d>>2]|0)!=0?(e=k[a>>2]|0,f=a+4|0,k[a>>2]=f,k[(k[f>>2]|0)+8>>2]=0,k[f>>2]=0,k[d>>2]=0,g=k[e+4>>2]|0,h=(g|0)==0?e:g,(h|0)!=0):0){g=a+4|0;e=k[b>>2]|0;i=e;j=e;e=h;while(1){if((i|0)==(k[c>>2]|0)){l=e;break}k[e+16>>2]=k[i+16>>2];k[e+20>>2]=k[i+20>>2];h=e+8|0;m=k[h>>2]|0;do if(m){n=k[m>>2]|0;if((n|0)==(e|0)){k[m>>2]=0;o=k[m+4>>2]|0;if(!o){p=m;break}else q=o;while(1){o=k[q>>2]|0;if(o){q=o;continue}o=k[q+4>>2]|0;if(!o){r=q;break}else q=o}p=r;break}else{k[m+4>>2]=0;if(!n){p=m;break}else s=n;while(1){o=k[s>>2]|0;if(o){s=o;continue}o=k[s+4>>2]|0;if(!o){t=s;break}else s=o}p=t;break}}else p=0;while(0);m=k[f>>2]|0;do if(m){n=k[e+16>>2]|0;o=m;while(1){if(n>>>0<(k[o+16>>2]|0)>>>0){u=k[o>>2]|0;if(!u){v=o;w=o;x=20;break}else y=u}else{u=o+4|0;z=k[u>>2]|0;if(!z){A=u;B=o;x=23;break}else y=z}o=y}if((x|0)==20){x=0;C=v;D=w;break}else if((x|0)==23){x=0;C=A;D=B;break}}else{C=f;D=f}while(0);k[e>>2]=0;k[e+4>>2]=0;k[h>>2]=D;k[C>>2]=e;m=k[k[a>>2]>>2]|0;if(!m)E=e;else{k[a>>2]=m;E=k[C>>2]|0}ui(k[g>>2]|0,E);k[d>>2]=(k[d>>2]|0)+1;m=k[j+4>>2]|0;if(!m){o=j;while(1){n=k[o+8>>2]|0;if((k[n>>2]|0)==(o|0)){F=n;break}else o=n}}else{o=m;while(1){h=k[o>>2]|0;if(!h){F=o;break}else o=h}}k[b>>2]=F;if(!p)break a;else{i=F;j=F;e=p}}e=k[l+8>>2]|0;if(!e)G=l;else{j=e;while(1){e=k[j+8>>2]|0;if(!e){H=j;break}else j=e}G=H}Tka(a,G)}while(0);G=k[b>>2]|0;H=k[c>>2]|0;if((G|0)==(H|0))return;c=a+4|0;l=a+4|0;p=G;F=G;while(1){G=F+16|0;E=k[c>>2]|0;do if(E){C=k[G>>2]|0;D=E;while(1){if(C>>>0<(k[D+16>>2]|0)>>>0){B=k[D>>2]|0;if(!B){I=D;J=D;x=39;break}else K=B}else{B=D+4|0;A=k[B>>2]|0;if(!A){L=B;M=D;x=42;break}else K=A}D=K}if((x|0)==39){x=0;N=I;O=J;break}else if((x|0)==42){x=0;N=L;O=M;break}}else{N=c;O=c}while(0);E=KBa(24)|0;D=G;C=k[D+4>>2]|0;A=E+16|0;k[A>>2]=k[D>>2];k[A+4>>2]=C;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=O;k[N>>2]=E;C=k[k[a>>2]>>2]|0;if(!C)P=E;else{k[a>>2]=C;P=k[N>>2]|0}ui(k[l>>2]|0,P);k[d>>2]=(k[d>>2]|0)+1;C=k[p+4>>2]|0;if(!C){E=p;while(1){A=k[E+8>>2]|0;if((k[A>>2]|0)==(E|0)){Q=A;break}else E=A}}else{E=C;while(1){G=k[E>>2]|0;if(!G){Q=E;break}else E=G}}k[b>>2]=Q;if((Q|0)==(H|0))break;else{p=Q;F=Q}}return}function zka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+16|0;e=d;f=KBa(104)|0;g=f+16|0;h=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[g>>0]=h;i[g+1>>0]=h>>8;i[g+2>>0]=h>>16;i[g+3>>0]=h>>24;k[f+24>>2]=k[c+8>>2];g=f+32|0;j=c+16|0;m=g+40|0;do{k[g>>2]=k[j>>2];g=g+4|0;j=j+4|0}while((g|0)<(m|0));k[f+72>>2]=k[c+56>>2];k[f+76>>2]=k[c+60>>2];j=c+64|0;k[f+80>>2]=k[j>>2];g=f+84|0;m=c+68|0;k[g>>2]=k[m>>2];k[j>>2]=0;k[m>>2]=0;k[f+88>>2]=k[c+72>>2];m=c+76|0;k[f+92>>2]=k[m>>2];j=f+96|0;n=c+80|0;k[j>>2]=k[n>>2];k[m>>2]=0;k[n>>2]=0;n=b+4|0;m=k[n>>2]|0;c=h&255;o=h>>>8&255;p=h>>>16&255;q=h>>>24&255;do if(m){h=m;while(1){s=i[h+16>>0]|0;t=(c&255)<(s&255);if(!t)if((c&255)<=(s&255)){u=i[h+17>>0]|0;if((o&255)>=(u&255))if((o&255)<=(u&255)){u=i[h+18>>0]|0;if((p&255)>=(u&255))if((p&255)>(u&255))v=12;else{u=i[h+19>>0]|0;w=q<<24>>24!=u<<24>>24;x=(q&255)<(u&255);v=9}else{w=1;x=1;v=9}}else v=12;else{w=1;x=1;v=9}}else v=12;else{w=1;x=1;v=9}if((v|0)==9){v=0;if(x&w){u=k[h>>2]|0;if(!u){y=h;z=h;v=11;break}else A=u}else v=12}if((v|0)==12){v=0;if((s&255)>=(c&255)){if(t){B=h;v=23;break}t=i[h+17>>0]|0;if((t&255)>=(o&255)){if((t&255)>(o&255)){B=h;v=23;break}t=i[h+18>>0]|0;if((t&255)>=(p&255)){if((t&255)>(p&255)){B=h;v=23;break}t=i[h+19>>0]|0;C=t<<24>>24!=q<<24>>24;D=(t&255)<(q&255)}else{C=1;D=1}}else{C=1;D=1}}else{C=1;D=1}if(!(D&C)){B=h;v=23;break}t=h+4|0;s=k[t>>2]|0;if(!s){E=t;F=h;v=22;break}else A=s}h=A}if((v|0)==11){h=z;k[e>>2]=h;G=y;H=h;break}else if((v|0)==22){h=F;k[e>>2]=h;G=E;H=h;break}else if((v|0)==23){h=B;k[e>>2]=h;G=e;H=h;break}}else{h=n;k[e>>2]=h;G=n;H=h}while(0);n=k[G>>2]|0;if(!n){k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=H;k[G>>2]=f;H=k[k[b>>2]>>2]|0;if(!H)I=f;else{k[b>>2]=H;I=k[G>>2]|0}ui(k[b+4>>2]|0,I);I=b+8|0;k[I>>2]=(k[I>>2]|0)+1;J=1;K=f}else{J=0;K=n}k[a>>2]=K;i[a+4>>0]=J;if(J<<24>>24){r=d;return}J=k[j>>2]|0;if(J)j0a(J);J=k[g>>2]|0;if(J)j0a(J);OBa(f);r=d;return}function Aka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;c=k[a+4>>2]|0;a:do if(c){a=i[b>>0]|0;d=i[b+1>>0]|0;e=i[b+2>>0]|0;f=i[b+3>>0]|0;g=c;while(1){h=i[g+16>>0]|0;j=(a&255)<(h&255);if(!j)if((a&255)<=(h&255)){l=i[g+17>>0]|0;if((d&255)>=(l&255))if((d&255)<=(l&255)){l=i[g+18>>0]|0;if((e&255)>=(l&255))if((e&255)>(l&255))m=12;else{l=i[g+19>>0]|0;n=f<<24>>24!=l<<24>>24;o=(f&255)<(l&255);m=10}else{n=1;o=1;m=10}}else m=12;else{n=1;o=1;m=10}}else m=12;else{n=1;o=1;m=10}if((m|0)==10){m=0;if(o&n){l=k[g>>2]|0;if(!l)break a;else p=l}else m=12}if((m|0)==12){m=0;if((h&255)>=(a&255)){if(j){q=g;m=22;break}j=i[g+17>>0]|0;if((j&255)>=(d&255)){if((j&255)>(d&255)){r=g;m=26;break}j=i[g+18>>0]|0;if((j&255)>=(e&255)){if((j&255)>(e&255)){r=g;m=26;break}j=i[g+19>>0]|0;s=j<<24>>24!=f<<24>>24;t=(j&255)<(f&255)}else{s=1;t=1}}else{s=1;t=1}}else{s=1;t=1}if(!(t&s)){q=g;m=22;break}j=k[g+4>>2]|0;if(!j)break a;else p=j}g=p}if((m|0)==22){if(!q)break;else r=q;u=r+24|0;return u|0}else if((m|0)==26){u=r+24|0;return u|0}}while(0);u=Rd(8)|0;x=0;xa(671,u|0,296399);r=x;x=0;if(r&1){r=Hc()|0;Fc(u|0);Sc(r|0)}else{k[u>>2]=47544;Gf(u|0,9024,933)}return 0}function Bka(a,b){a=a|0;b=b|0;if(!b)return;Bka(a,k[b>>2]|0);Bka(a,k[b+4>>2]|0);a=k[b+96>>2]|0;if(a)j0a(a);a=k[b+84>>2]|0;if(a)j0a(a);OBa(b);return}function Cka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+64|0;d=c+40|0;e=c;k[a+88>>2]=b;if(!(Pia((b|0)>-1,264493,91,264508,264549)|0)){r=c;return}c=e;b=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));c=e+20|0;b=e+24|0;k[b>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;a=e+4|0;f=e+8|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=26536;k[e>>2]=26500;k[c>>2]=26560;x=0;nb(102,e|0,264549,264508,91);x=0;e=Hc()|0;k[a>>2]=26592;k[a+-4>>2]=26620;k[a+16>>2]=26644;K2a(f);k[c>>2]=20796;c=k[b>>2]|0;if(!c)Sc(e|0);x=0;f=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!f)Sc(e|0);k[b>>2]=0;Sc(e|0)}function Dka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+112|0;e=d+80|0;f=d;g=b+28|0;h=b+32|0;i=k[h>>2]|0;if((i|0)==(k[b+36>>2]|0)){yD(g,c);j=k[h>>2]|0}else{xD(i,c);c=(k[h>>2]|0)+116|0;k[h>>2]=c;j=c}c=((j-(k[g>>2]|0)|0)/116|0)+-1|0;k[a>>2]=5;g=a+8|0;k[g>>2]=c;c=a+12|0;k[c>>2]=k[e>>2];k[c+4>>2]=k[e+4>>2];k[c+8>>2]=k[e+8>>2];k[c+12>>2]=k[e+12>>2];k[c+16>>2]=k[e+16>>2];k[c+20>>2]=k[e+20>>2];k[c+24>>2]=k[e+24>>2];k[a+40>>2]=1;e=a+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=a+56|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;k[f>>2]=6;e=f+8|0;a=g;g=e+40|0;do{k[e>>2]=k[a>>2];e=e+4|0;a=a+4|0}while((e|0)<(g|0));a=f+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=f+56|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,b|0,f|0)|0;b=x;x=0;if(b&1){b=Hc()|0;a=k[f+72>>2]|0;if(a)j0a(a);a=k[f+60>>2]|0;if(!a)Sc(b|0);j0a(a);Sc(b|0)}else{b=k[f+72>>2]|0;if(b)j0a(b);b=k[f+60>>2]|0;if(!b){r=d;return}j0a(b);r=d;return}}function Eka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+80|0;d=c;e=l[b>>0]|0;k[d>>2]=1;k[d+8>>2]=e;k[d+40>>2]=1;e=d+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=d+56|0;b=d+60|0;f=d+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,a|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;e=k[f>>2]|0;if(e)j0a(e);e=k[b>>2]|0;if(!e)Sc(d|0);j0a(e);Sc(d|0)}else{d=k[f>>2]|0;if(d)j0a(d);d=k[b>>2]|0;if(!d){r=c;return a|0}j0a(d);r=c;return a|0}return 0}function Fka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;c=r;r=r+16|0;d=c+8|0;e=c;if(!b){k[a+32>>2]=1;k[a>>2]=0;r=c;return}f=RLa(b)|0;g=a+32|0;k[g>>2]=1;k[a>>2]=0;if(!f){r=c;return}h=i[b>>0]|0;if(h<<24>>24==45){j=f+-1|0;l=b+1|0;if(j){m=l;n=i[l>>0]|0;o=1;p=j;q=7}}else{m=b;n=h;o=0;p=f;q=7}if((q|0)==7){a:do if(n<<24>>24==48){b:do if(p>>>0>1){switch(i[m+1>>0]|0){case 88:case 120:break;default:{q=11;break b}}s=m+2|0;t=p+-2|0;u=16}else q=11;while(0);if((q|0)==11){s=m;t=p+-1|0;u=8}if(t){f=(u|0)==8;switch(u|0){case 8:case 16:break;default:{v=s;w=i[s>>0]|0;q=15;break a}}h=f?3:4;f=32/(h>>>0)|0;b=i[s>>0]|0;if(b<<24>>24){j=s;l=b;b=ia(f,h)|0;c:while(1){y=j;z=l;A=0;B=0;while(1){if(B>>>0>=f>>>0){C=y;D=A;E=b;break}F=z<<24>>24;do if((z+-48&255)<10)G=F+-48|0;else{if((z+-97&255)<6){G=F+-87|0;break}if((z+-65&255)>=6)break c;G=F+-55|0}while(0);if(G>>>0>=u>>>0)break c;F=G|A<>0]|0;I=B+1|0;if(!(z<<24>>24)){J=F;K=H;L=I;q=29;break}else{y=H;A=F;B=I}}if((q|0)==29){q=0;C=K;D=J;E=ia(L,h)|0}HB(a,E,0);k[a>>2]=k[a>>2]|D;l=i[C>>0]|0;if(!(l<<24>>24))break a;else{j=C;b=E}}H0a(d,263919);x=0;nb(109,d|0,263976,264399,1360);x=0;b=Hc()|0;j=M;qCa(d);N=j;O=b;Sc(O|0)}}}else{v=m;w=n;q=15}while(0);d:do if((q|0)==15?w<<24>>24!=0:0){n=v;m=1;d=1e9;E=w;e:while(1){if((E+-48&255)>=10)break;C=(E<<24>>24)+-48|0;D=n+1|0;L=i[D>>0]|0;do if(L<<24>>24){if((L+-48&255)>=10)break e;J=(C*10|0)+-48+(L<<24>>24)|0;K=n+2|0;G=i[K>>0]|0;if(G<<24>>24){if((G+-48&255)>=10)break e;u=(J*10|0)+-48+(G<<24>>24)|0;G=n+3|0;s=i[G>>0]|0;if(s<<24>>24){if((s+-48&255)>=10)break e;t=(u*10|0)+-48+(s<<24>>24)|0;s=n+4|0;p=i[s>>0]|0;if(p<<24>>24){if((p+-48&255)>=10)break e;b=(t*10|0)+-48+(p<<24>>24)|0;p=n+5|0;j=i[p>>0]|0;if(j<<24>>24){if((j+-48&255)>=10)break e;l=(b*10|0)+-48+(j<<24>>24)|0;j=n+6|0;h=i[j>>0]|0;if(!(h<<24>>24)){P=l;Q=j;R=5;q=34;break}if((h+-48&255)>=10)break e;j=(l*10|0)+-48+(h<<24>>24)|0;h=n+7|0;l=i[h>>0]|0;if(!(l<<24>>24)){P=j;Q=h;R=6;q=34;break}if((l+-48&255)>=10)break e;h=(j*10|0)+-48+(l<<24>>24)|0;l=n+8|0;j=i[l>>0]|0;if(!(j<<24>>24)){P=h;Q=l;R=7;q=34;break}if((j+-48&255)>=10)break e;l=(h*10|0)+-48+(j<<24>>24)|0;j=n+9|0;if(!(i[j>>0]|0)){P=l;Q=j;R=8;q=34}else{S=l;T=j;U=d}}else{P=b;Q=p;R=4;q=34}}else{P=t;Q=s;R=3;q=34}}else{P=u;Q=G;R=2;q=34}}else{P=J;Q=K;R=1;q=34}}else{P=C;Q=D;R=0;q=34}while(0);if((q|0)==34){q=0;S=P;T=Q;U=k[39472+(R<<2)>>2]|0}f:do if(U){D=a+(m<<2)|0;if((a|0)!=(D|0)){C=0;L=0;K=a;while(1){J=Qyb(k[K>>2]|0,0,U|0,0)|0;G=Hyb(J|0,M|0,C|0,L|0)|0;J=M;k[K>>2]=G;K=K+4|0;if((K|0)==(D|0)){V=J;W=0;break}else{C=J;L=0}}if(!((V|0)==0&(W|0)==0)?(L=k[g>>2]|0,C=L+1|0,D=C>>>0>8?8:C,k[g>>2]=D,D>>>0>L>>>0):0)k[a+(L<<2)>>2]=V}L=k[g>>2]|0;D=L+-1|0;if(!D)X=L;else{C=L;L=D;while(1){if(k[a+(L<<2)>>2]|0){X=C;break f}k[g>>2]=L;D=L+-1|0;if(!D){X=L;break}else{K=L;L=D;C=K}}}}else{k[g>>2]=1;k[a>>2]=0;X=1}while(0);g:do if(S){if(!X){Y=X;Z=S}else{C=S;L=0;K=0;while(1){D=a+(K<<2)|0;J=Hyb(k[D>>2]|0,0,C|0,L|0)|0;G=M;k[D>>2]=J;if((G|0)==0&0==0)break g;K=K+1|0;J=k[g>>2]|0;if(K>>>0>=J>>>0){_=J;$=G;break}else{C=G;L=0}}Y=_;Z=$}L=Y+1|0;C=L>>>0>8?8:L;k[g>>2]=C;if(C>>>0>Y>>>0)k[a+(Y<<2)>>2]=Z}while(0);C=k[g>>2]|0;L=C+-1|0;h:do if(!L)aa=C;else{K=C;G=L;while(1){if(k[a+(G<<2)>>2]|0){aa=K;break h}k[g>>2]=G;J=G+-1|0;if(!J){aa=G;break}else{D=G;G=J;K=D}}}while(0);E=i[T>>0]|0;if(!(E<<24>>24))break d;else{n=T;m=aa;d=U}}H0a(e,264450);x=0;nb(109,e|0,263976,264399,1389);x=0;d=Hc()|0;m=M;qCa(e);N=m;O=d;Sc(O|0)}while(0);if(!o){r=c;return}}NC(a);r=c;return}function Gka(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+128|0;c=b+40|0;d=b;k[d>>2]=0;k[d+32>>2]=1;k[c>>2]=7;e=c+8|0;f=d;d=e+40|0;do{k[e>>2]=k[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(d|0));f=c+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=c+56|0;e=c+60|0;d=c+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,a|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;a=k[d>>2]|0;if(a)j0a(a);a=k[e>>2]|0;if(!a)Sc(c|0);j0a(a);Sc(c|0)}else{c=k[d>>2]|0;if(c)j0a(c);c=k[e>>2]|0;if(!c){r=b;return}j0a(c);r=b;return}}function Hka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function Ika(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function Jka(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+32|0;c=b+12|0;d=b;e=(k[a>>2]|0)+136|0;f=(k[e>>2]|0)>-1;q2a(c,329672,0);x=0;pa(57,f|0,c|0,57,268696,268754);f=x;x=0;if(f&1){f=Hc()|0;K2a(c);Sc(f|0)}K2a(c);c=(k[e>>2]|0)==(k[a+4>>2]|0);q2a(d,263169,35);x=0;pa(57,c|0,d|0,45,261497,263205);c=x;x=0;if(c&1){c=Hc()|0;K2a(d);Sc(c|0)}else{K2a(d);r=b;return}}function Kka(a){a=a|0;OBa(a);return}function Lka(a){a=a|0;var b=0,c=0,d=0;b=KBa(12)|0;k[b>>2]=41720;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function Mka(a,b){a=a|0;b=b|0;var c=0,d=0;k[b>>2]=41720;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return}function Nka(a){a=a|0;return}function Oka(a){a=a|0;OBa(a);return}function Pka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;e=r;r=r+1008|0;f=e+996|0;g=e+984|0;h=e+976|0;j=e+964|0;l=e+608|0;m=e+528|0;n=e+952|0;o=e+912|0;p=e+896|0;q=e+880|0;s=e+872|0;t=e+448|0;u=e+856|0;v=e+400|0;w=e+848|0;y=e+832|0;z=e+320|0;A=e+240|0;B=e+160|0;C=e+804|0;D=e+792|0;E=e+780|0;F=e+768|0;G=e+760|0;H=e+720|0;I=e+704|0;J=e+688|0;K=e+80|0;L=e;N=k[d>>2]|0;d=k[a+8>>2]|0;O=a+4|0;a=k[O>>2]|0;P=(Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0)+24|0;a=k[P>>2]|0;if(a){Q=P;R=a;a:while(1){a=R;while(1){if((k[a+16>>2]|0)>>>0>=b>>>0){S=a;break}a=k[a+4>>2]|0;if(!a){T=Q;break a}}R=k[S>>2]|0;if(!R){T=S;break}else Q=S}if((T|0)!=(P|0)?(k[T+16>>2]|0)>>>0<=b>>>0:0)U=T;else V=8}else V=8;if((V|0)==8)U=P;P=k[O>>2]|0;if((U|0)==((Vf[k[(k[P>>2]|0)+16>>2]&1023](P)|0)+24|0)){W=0;r=e;return W|0}P=k[U+20>>2]|0;q2a(g,329672,0);x=0;pa(57,(P|0)!=0|0,g|0,513,261497,263307);U=x;x=0;if(U&1){U=Hc()|0;O=M;K2a(g);X=U;Y=O;Sc(X|0)}K2a(g);if((N|0)!=1){if((P|0)!=0?(N=iDa(P,4520,5464,0)|0,(N|0)!=0):0){Z=1;_=N}else{Z=(gma(k[d+8>>2]|0,0)|0)^1;_=0}q2a(F,263658,54);x=0;pa(57,Z|0,F|0,562,261497,263307);Z=x;x=0;if(Z&1){Z=Hc()|0;N=M;K2a(F);X=Z;Y=N;Sc(X|0)}K2a(F);Tf[k[(k[_>>2]|0)+32>>2]&2047](G,_);F=k[G>>2]|0;x=0;N=Ba(k[(k[F>>2]|0)+60>>2]|0,F|0)|0;F=x;x=0;if(F&1){F=Hc()|0;Z=M;g=k[G+4>>2]|0;if(!g){X=F;Y=Z;Sc(X|0)}j0a(g);X=F;Y=Z;Sc(X|0)}Z=k[G+4>>2]|0;if(Z)j0a(Z);Z=k[c+88>>2]|0;G=Z-(sma(k[d+8>>2]|0,_)|0)-N|0;if((G+-1|0)>>>0>15){k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[H+16>>2]=0;k[H+20>>2]=0;k[H+24>>2]=0;_=H+20|0;Z=H+24|0;k[Z>>2]=0;k[H+28>>2]=0;k[H+32>>2]=0;k[H+36>>2]=-1;F=H+4|0;g=F+-4|0;O=F+16|0;U=H+8|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);k[H+4>>2]=40936;k[H>>2]=40900;k[_>>2]=40960;x=0;fb(140,J|0,270638,45);T=x;x=0;if(T&1){T=Hc()|0;$=T;aa=M}else{k[I>>2]=21048;T=I+4|0;x=0;xa(604,T|0,J|0);b=x;x=0;if(b&1){b=Hc()|0;ba=b;ca=M}else{x=0;b=Ta(596,H|0,I|0)|0;H=x;x=0;if(!(H&1)){x=0;nb(135,b|0,263307,261497,569);x=0}b=Hc()|0;H=M;k[I>>2]=21048;K2a(T);ba=b;ca=H}K2a(J);$=ba;aa=ca}k[F>>2]=40992;k[g>>2]=41020;k[O>>2]=41044;K2a(U);k[_>>2]=20796;_=k[Z>>2]|0;if(_){x=0;U=Ba(k[(k[_>>2]|0)+16>>2]|0,_|0)|0;_=x;x=0;if(_&1){_=Hc(0)|0;Fg(_)}if(U)k[Z>>2]=0}X=$;Y=aa;Sc(X|0)}if(!N){W=1;r=e;return W|0}aa=G+143&255;G=K+8|0;$=K+40|0;Z=K+48|0;U=K+56|0;_=K+60|0;O=K+72|0;g=L+8|0;F=L+40|0;ca=L+48|0;ba=L+56|0;J=L+60|0;H=L+72|0;b=0;while(1){q2a(f,296239,35);K2a(f);k[K>>2]=1;k[G>>2]=aa;k[$>>2]=1;T=Z;k[T>>2]=-1;k[T+4>>2]=-1;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,c|0,K|0)|0;T=x;x=0;if(T&1){V=168;break}T=k[O>>2]|0;if(T)j0a(T);T=k[_>>2]|0;if(T)j0a(T);k[L>>2]=1;k[g>>2]=80;k[F>>2]=1;T=ca;k[T>>2]=-1;k[T+4>>2]=-1;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[ba+16>>2]=0;x=0;Ta(539,c|0,L|0)|0;T=x;x=0;if(T&1){V=172;break}T=k[H>>2]|0;if(T)j0a(T);T=k[J>>2]|0;if(T)j0a(T);b=b+1|0;if(b>>>0>=N>>>0){W=1;V=177;break}}if((V|0)==168){N=Hc()|0;b=M;L=k[O>>2]|0;if(L)j0a(L);L=k[_>>2]|0;if(!L){X=N;Y=b;Sc(X|0)}j0a(L);X=N;Y=b;Sc(X|0)}else if((V|0)==172){b=Hc()|0;N=M;L=k[H>>2]|0;if(L)j0a(L);L=k[J>>2]|0;if(!L){X=b;Y=N;Sc(X|0)}j0a(L);X=b;Y=N;Sc(X|0)}else if((V|0)==177){r=e;return W|0}}Tf[k[(k[P>>2]|0)+32>>2]&2047](h,P);N=k[h>>2]|0;x=0;fb(140,j|0,263518,52);b=x;x=0;do if(!(b&1)){x=0;pa(57,(N|0)!=0|0,j|0,516,261497,263307);L=x;x=0;if(L&1){L=Hc()|0;J=M;K2a(j);da=L;ea=J;break}K2a(j);J=k[h+4>>2]|0;if(J)j0a(J);J=iDa(P,4520,5424,0)|0;if(J){kma(m,k[d+8>>2]|0,J);J=k[m>>2]|0;x=0;fb(140,f|0,329672,0);L=x;x=0;do if(L&1){H=Hc()|0;fa=M;ga=H;V=35}else{x=0;pa(56,(J|0)==4|(J|0)==8|0,f|0,71,296096,296141);H=x;x=0;if(H&1){H=Hc()|0;_=M;K2a(f);fa=_;ga=H;V=35;break}K2a(f);k[l>>2]=4;H=l+8|0;_=m+8|0;O=H+40|0;do{k[H>>2]=k[_>>2];H=H+4|0;_=_+4|0}while((H|0)<(O|0));_=l+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=l+56|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;x=0;Ta(539,c|0,l|0)|0;_=x;x=0;if(_&1){_=Hc()|0;H=M;O=k[l+72>>2]|0;if(O)j0a(O);O=k[l+60>>2]|0;if(!O){ha=_;ia=H;break}j0a(O);ha=_;ia=H;break}H=k[l+72>>2]|0;if(H)j0a(H);H=k[l+60>>2]|0;if(H)j0a(H);H=k[m+72>>2]|0;if(H)j0a(H);H=k[m+60>>2]|0;if(!H){W=1;r=e;return W|0}j0a(H);W=1;r=e;return W|0}while(0);if((V|0)==35){ha=ga;ia=fa}J=k[m+72>>2]|0;if(J)j0a(J);J=k[m+60>>2]|0;if(!J){X=ha;Y=ia;Sc(X|0)}j0a(J);X=ha;Y=ia;Sc(X|0)}J=iDa(P,4520,5464,0)|0;if(!J){L=iDa(P,4520,5312,0)|0;if(!L){q2a(E,263632,25);x=0;pa(57,0,E|0,555,261497,263307);H=x;x=0;if(H&1){H=Hc()|0;_=M;K2a(E);X=H;Y=_;Sc(X|0)}else{K2a(E);W=1;r=e;return W|0}}else{_=(i[L+72>>0]|0)!=0;q2a(D,329672,0);x=0;pa(57,_|0,D|0,551,261497,263307);_=x;x=0;if(_&1){_=Hc()|0;H=M;K2a(D);X=_;Y=H;Sc(X|0)}else{K2a(D);Ska(c,k[L+24>>2]|0);W=1;r=e;return W|0}}}L=(i[J+58>>0]|0)==0;q2a(n,329672,0);x=0;pa(57,L|0,n|0,521,261497,263307);L=x;x=0;if(L&1){L=Hc()|0;H=M;K2a(n);X=L;Y=H;Sc(X|0)}K2a(n);H=d+8|0;if(gma(k[H>>2]|0,J)|0){L=k[c+88>>2]|0;_=L-(sma(k[H>>2]|0,J)|0)|0;if((_+-1|0)>>>0>15){k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[o+20>>2]=0;k[o+24>>2]=0;L=o+20|0;O=o+24|0;k[O>>2]=0;k[o+28>>2]=0;k[o+32>>2]=0;k[o+36>>2]=-1;ba=o+4|0;ca=ba+-4|0;F=ba+16|0;g=o+8|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);k[o+4>>2]=40936;k[o>>2]=40900;k[L>>2]=40960;x=0;fb(140,q|0,270638,45);K=x;x=0;if(K&1){K=Hc()|0;ja=K;ka=M}else{k[p>>2]=21048;K=p+4|0;x=0;xa(604,K|0,q|0);U=x;x=0;if(U&1){U=Hc()|0;la=U;ma=M}else{x=0;U=Ta(596,o|0,p|0)|0;Z=x;x=0;if(!(Z&1)){x=0;nb(135,U|0,263307,261497,529);x=0}U=Hc()|0;Z=M;k[p>>2]=21048;K2a(K);la=U;ma=Z}K2a(q);ja=la;ka=ma}k[ba>>2]=40992;k[ca>>2]=41020;k[F>>2]=41044;K2a(g);k[L>>2]=20796;L=k[O>>2]|0;if(L){x=0;g=Ba(k[(k[L>>2]|0)+16>>2]|0,L|0)|0;L=x;x=0;if(L&1){L=Hc(0)|0;Fg(L)}if(g)k[O>>2]=0}X=ja;Y=ka;Sc(X|0)}O=s+4|0;g=_+127&255;_=t+8|0;L=t+40|0;F=t+48|0;ca=t+56|0;ba=t+60|0;Z=t+72|0;U=0;while(1){Tf[k[(k[J>>2]|0)+32>>2]&2047](s,J);K=k[s>>2]|0;x=0;$=Ba(k[(k[K>>2]|0)+60>>2]|0,K|0)|0;K=x;x=0;if(K&1){V=68;break}K=k[O>>2]|0;if(K)j0a(K);if(U>>>0>=$>>>0){W=1;V=177;break}q2a(f,295946,34);K2a(f);k[t>>2]=1;k[_>>2]=g;k[L>>2]=1;$=F;k[$>>2]=-1;k[$+4>>2]=-1;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;x=0;Ta(539,c|0,t|0)|0;$=x;x=0;if($&1){V=76;break}$=k[Z>>2]|0;if($)j0a($);$=k[ba>>2]|0;if($)j0a($);U=U+1|0}if((V|0)==68){U=Hc()|0;ca=M;F=k[O>>2]|0;if(!F){X=U;Y=ca;Sc(X|0)}j0a(F);X=U;Y=ca;Sc(X|0)}else if((V|0)==76){ca=Hc()|0;U=M;F=k[Z>>2]|0;if(F)j0a(F);F=k[ba>>2]|0;if(!F){X=ca;Y=U;Sc(X|0)}j0a(F);X=ca;Y=U;Sc(X|0)}else if((V|0)==177){r=e;return W|0}}U=k[(k[H>>2]|0)+192>>2]|0;b:do if(!U)na=0;else{ca=U;while(1){F=k[ca+16>>2]|0;if(F>>>0>J>>>0)oa=ca;else{if(F>>>0>=J>>>0){na=1;break b}oa=ca+4|0}ca=k[oa>>2]|0;if(!ca){na=0;break}}}while(0);q2a(u,263571,22);x=0;pa(57,na|0,u|0,535,261497,263307);U=x;x=0;if(U&1){U=Hc()|0;ba=M;K2a(u);X=U;Y=ba;Sc(X|0)}K2a(u);vma(v,k[H>>2]|0,J);Tf[k[(k[J>>2]|0)+32>>2]&2047](w,J);ba=k[w>>2]|0;x=0;U=Ba(k[(k[ba>>2]|0)+56>>2]|0,ba|0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;Z=M;O=k[w+4>>2]|0;if(!O){X=ba;Y=Z;Sc(X|0)}j0a(O);X=ba;Y=Z;Sc(X|0)}Z=k[w+4>>2]|0;if(Z)j0a(Z);if(!U){U=(k[v+40>>2]|0)==0;q2a(y,263594,37);x=0;pa(57,U|0,y|0,539,261497,263307);U=x;x=0;if(U&1){U=Hc()|0;Z=M;K2a(y);X=U;Y=Z;Sc(X|0)}K2a(y);Z=k[v>>2]|0;U=v+4|0;ba=k[v+32>>2]|0;O=k[v+36>>2]|0;k[z>>2]=2;k[z+8>>2]=Z;Z=z+12|0;k[Z>>2]=k[U>>2];k[Z+4>>2]=k[U+4>>2];k[Z+8>>2]=k[U+8>>2];k[Z+12>>2]=k[U+12>>2];k[Z+16>>2]=k[U+16>>2];k[Z+20>>2]=k[U+20>>2];k[Z+24>>2]=k[U+24>>2];k[z+40>>2]=ba;k[z+44>>2]=O;O=z+48|0;k[O>>2]=-1;k[O+4>>2]=-1;O=z+56|0;ba=z+60|0;U=z+72|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[O+16>>2]=0;x=0;Ta(539,c|0,z|0)|0;O=x;x=0;if(O&1){O=Hc()|0;Z=M;ca=k[U>>2]|0;if(ca)j0a(ca);ca=k[ba>>2]|0;if(!ca){X=O;Y=Z;Sc(X|0)}j0a(ca);X=O;Y=Z;Sc(X|0)}else{Z=k[U>>2]|0;if(Z)j0a(Z);Z=k[ba>>2]|0;if(!Z){W=1;r=e;return W|0}j0a(Z);W=1;r=e;return W|0}}Z=k[v>>2]|0;ba=v+4|0;U=k[v+32>>2]|0;O=k[v+36>>2]|0;k[A>>2]=2;k[A+8>>2]=Z;Z=A+12|0;k[Z>>2]=k[ba>>2];k[Z+4>>2]=k[ba+4>>2];k[Z+8>>2]=k[ba+8>>2];k[Z+12>>2]=k[ba+12>>2];k[Z+16>>2]=k[ba+16>>2];k[Z+20>>2]=k[ba+20>>2];k[Z+24>>2]=k[ba+24>>2];k[A+40>>2]=U;k[A+44>>2]=O;O=A+48|0;k[O>>2]=-1;k[O+4>>2]=-1;O=A+56|0;U=A+60|0;ba=A+72|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[O+16>>2]=0;x=0;Ta(539,c|0,A|0)|0;O=x;x=0;if(O&1){O=Hc()|0;Z=M;ca=k[ba>>2]|0;if(ca)j0a(ca);ca=k[U>>2]|0;if(!ca){X=O;Y=Z;Sc(X|0)}j0a(ca);X=O;Y=Z;Sc(X|0)}Z=k[ba>>2]|0;if(Z)j0a(Z);Z=k[U>>2]|0;if(Z)j0a(Z);Z=k[v+40>>2]|0;k[B>>2]=2;k[B+8>>2]=Z;Z=B+12|0;k[Z>>2]=k[C>>2];k[Z+4>>2]=k[C+4>>2];k[Z+8>>2]=k[C+8>>2];k[Z+12>>2]=k[C+12>>2];k[Z+16>>2]=k[C+16>>2];k[Z+20>>2]=k[C+20>>2];k[Z+24>>2]=k[C+24>>2];k[B+40>>2]=1;Z=B+48|0;k[Z>>2]=-1;k[Z+4>>2]=-1;Z=B+56|0;U=B+60|0;ba=B+72|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[Z+16>>2]=0;x=0;Ta(539,c|0,B|0)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;O=M;ca=k[ba>>2]|0;if(ca)j0a(ca);ca=k[U>>2]|0;if(!ca){X=Z;Y=O;Sc(X|0)}j0a(ca);X=Z;Y=O;Sc(X|0)}else{O=k[ba>>2]|0;if(O)j0a(O);O=k[U>>2]|0;if(!O){W=1;r=e;return W|0}j0a(O);W=1;r=e;return W|0}}else{O=Hc()|0;da=O;ea=M}while(0);W=k[h+4>>2]|0;if(!W){X=da;Y=ea;Sc(X|0)}j0a(W);X=da;Y=ea;Sc(X|0);return 0}function Qka(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==263238?a+4|0:0)|0}function Rka(a){a=a|0;return 7272}function Ska(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+80|0;d=c;qD(d,a,b);x=0;Ta(539,a|0,d|0)|0;a=x;x=0;if(a&1){a=Hc()|0;b=k[d+72>>2]|0;if(b)j0a(b);b=k[d+60>>2]|0;if(!b)Sc(a|0);j0a(b);Sc(a|0)}else{a=k[d+72>>2]|0;if(a)j0a(a);a=k[d+60>>2]|0;if(!a){r=c;return}j0a(a);r=c;return}}function Tka(a,b){a=a|0;b=b|0;if(!b)return;else{Tka(a,k[b>>2]|0);Tka(a,k[b+4>>2]|0);OBa(b);return}}function Uka(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;b=r;r=r+16|0;c=b+4|0;d=b;e=a+16|0;f=k[e>>2]|0;if(f>>>0>1023){k[e>>2]=f+-1024;f=a+4|0;e=k[f>>2]|0;g=k[e>>2]|0;h=e+4|0;k[f>>2]=h;e=a+8|0;i=k[e>>2]|0;j=a+12|0;l=k[j>>2]|0;m=l;n=i;do if((i|0)==(l|0)){o=k[a>>2]|0;p=o;if(h>>>0>o>>>0){q=h;s=((q-p>>2)+1|0)/-2|0;t=h+(s<<2)|0;u=n-q|0;Eyb(t|0,h|0,u|0)|0;q=t+(u>>2<<2)|0;k[e>>2]=q;k[f>>2]=(k[f>>2]|0)+(s<<2);v=q;break}q=m-p>>1;p=(q|0)==0?1:q;q=KBa(p<<2)|0;s=q;u=q+(p>>>2<<2)|0;t=u;w=q+(p<<2)|0;if((h|0)==(i|0)){y=t;z=o}else{o=u;u=h;p=t;while(1){k[o>>2]=k[u>>2];o=p+4|0;q=o;u=u+4|0;if((u|0)==(i|0)){A=q;break}else p=q}y=A;z=k[a>>2]|0}k[a>>2]=s;k[f>>2]=t;k[e>>2]=y;k[j>>2]=w;if(!z)v=y;else{OBa(z);v=k[e>>2]|0}}else v=i;while(0);k[v>>2]=g;k[e>>2]=(k[e>>2]|0)+4;r=b;return}e=a+8|0;g=k[e>>2]|0;v=a+4|0;i=k[v>>2]|0;z=g-i|0;y=z>>2;j=a+12|0;f=k[j>>2]|0;A=f-(k[a>>2]|0)|0;h=g;m=i;if(y>>>0>2>>>0){i=KBa(4096)|0;if((f|0)!=(g|0)){k[c>>2]=i;Vka(a,c);r=b;return}k[d>>2]=i;Wka(a,d);d=k[v>>2]|0;i=k[d>>2]|0;c=d+4|0;k[v>>2]=c;d=k[e>>2]|0;g=k[j>>2]|0;f=g;n=d;do if((d|0)==(g|0)){l=k[a>>2]|0;p=l;if(c>>>0>l>>>0){u=c;o=((u-p>>2)+1|0)/-2|0;q=c+(o<<2)|0;B=n-u|0;Eyb(q|0,c|0,B|0)|0;u=q+(B>>2<<2)|0;k[e>>2]=u;k[v>>2]=(k[v>>2]|0)+(o<<2);C=u;break}u=f-p>>1;p=(u|0)==0?1:u;u=KBa(p<<2)|0;o=u;B=u+(p>>>2<<2)|0;q=B;D=u+(p<<2)|0;if((c|0)==(d|0)){E=q;F=l}else{l=B;B=c;p=q;while(1){k[l>>2]=k[B>>2];l=p+4|0;u=l;B=B+4|0;if((B|0)==(d|0)){G=u;break}else p=u}E=G;F=k[a>>2]|0}k[a>>2]=o;k[v>>2]=q;k[e>>2]=E;k[j>>2]=D;if(!F)C=E;else{OBa(F);C=k[e>>2]|0}}else C=d;while(0);k[C>>2]=i;k[e>>2]=(k[e>>2]|0)+4;r=b;return}i=A>>1;A=(i|0)==0?1:i;i=KBa(A<<2)|0;C=i;d=i+(y<<2)|0;F=i+(A<<2)|0;x=0;E=Ba(563,4096)|0;G=x;x=0;a:do if(G&1)H=29;else{c=E;do if((y|0)==(A|0)){if((z|0)>0){I=d+(((y+1|0)/-2|0)<<2)|0;J=h;K=m;L=F;N=C;break}f=z>>1;n=(f|0)==0?1:f;x=0;f=Ba(563,n<<2|0)|0;g=x;x=0;if(g&1){H=29;break a}OBa(i);I=f+(n>>>2<<2)|0;J=k[e>>2]|0;K=k[v>>2]|0;L=f+(n<<2)|0;N=f}else{I=d;J=h;K=m;L=F;N=C}while(0);D=I;k[I>>2]=c;q=I+4|0;b:do if((J|0)==(K|0)){O=L;P=q;Q=D;R=N}else{o=D;f=N;n=q;g=L;p=J;c:while(1){p=p+-4|0;B=o;do if((B|0)==(f|0)){l=n;if(l>>>0>>0){w=l+((((g-n>>2)+1|0)/2|0)<<2)|0;t=n-o|0;s=w+(0-(t>>2)<<2)|0;Eyb(s|0,o|0,t|0)|0;S=s;T=s;U=g;V=w;W=f;break}w=g-f>>1;s=(w|0)==0?1:w;x=0;w=Ba(563,s<<2|0)|0;t=x;x=0;if(t&1){X=f;break c}t=w;u=w+((s+3|0)>>>2<<2)|0;Y=u;Z=w+(s<<2)|0;if((B|0)==(l|0))_=Y;else{s=u;w=B;$=Y;while(1){k[s>>2]=k[w>>2];s=$+4|0;aa=s;w=w+4|0;if((w|0)==(l|0)){_=aa;break}else $=aa}}if(!o){S=u;T=Y;U=Z;V=_;W=t}else{OBa(o);S=u;T=Y;U=Z;V=_;W=t}}else{S=B;T=o;U=g;V=n;W=f}while(0);k[S+-4>>2]=k[p>>2];B=T+-4|0;if((p|0)==(k[v>>2]|0)){O=U;P=V;Q=B;R=W;break b}else{o=B;f=W;n=V;g=U}}g=Hc()|0;ba=M;ca=g;da=X;break a}while(0);q=k[a>>2]|0;k[a>>2]=R;k[v>>2]=Q;k[e>>2]=P;k[j>>2]=O;if(!q){r=b;return}OBa(q);r=b;return}while(0);if((H|0)==29){H=Hc(0)|0;me(H|0)|0;OBa(k[d+-4>>2]|0);x=0;hb(46);x=0;d=Hc()|0;H=M;x=0;hb(45);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{ba=H;ca=d;da=C}}if(!da)Sc(ca|0);OBa(da);Sc(ca|0)}function Vka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+8|0;d=k[c>>2]|0;e=a+12|0;f=k[e>>2]|0;g=f;h=d;do if((d|0)==(f|0)){i=a+4|0;j=k[i>>2]|0;l=k[a>>2]|0;m=l;if(j>>>0>l>>>0){n=j;o=((n-m>>2)+1|0)/-2|0;p=j+(o<<2)|0;q=h-n|0;Eyb(p|0,j|0,q|0)|0;n=p+(q>>2<<2)|0;k[c>>2]=n;k[i>>2]=(k[i>>2]|0)+(o<<2);r=n;break}n=g-m>>1;m=(n|0)==0?1:n;n=KBa(m<<2)|0;o=n;q=n+(m>>>2<<2)|0;p=q;s=n+(m<<2)|0;if((j|0)==(d|0)){t=p;u=l}else{l=q;q=j;j=p;while(1){k[l>>2]=k[q>>2];l=j+4|0;m=l;q=q+4|0;if((q|0)==(d|0)){v=m;break}else j=m}t=v;u=k[a>>2]|0}k[a>>2]=o;k[i>>2]=p;k[c>>2]=t;k[e>>2]=s;if(!u)r=t;else{OBa(u);r=k[c>>2]|0}}else r=d;while(0);k[r>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+4;return}function Wka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[c>>2]|0;e=k[a>>2]|0;f=e;do if((d|0)==(e|0)){g=a+8|0;h=k[g>>2]|0;i=a+12|0;j=k[i>>2]|0;l=j;if(h>>>0>>0){j=h;m=((l-j>>2)+1|0)/2|0;n=j-d|0;j=h+(m<<2)+(0-(n>>2)<<2)|0;Eyb(j|0,d|0,n|0)|0;k[c>>2]=j;k[g>>2]=(k[g>>2]|0)+(m<<2);o=j;break}j=l-f>>1;l=(j|0)==0?1:j;j=KBa(l<<2)|0;m=j;n=j+((l+3|0)>>>2<<2)|0;p=n;q=j+(l<<2)|0;if((d|0)==(h|0)){r=p;s=d}else{l=n;j=d;t=p;while(1){k[l>>2]=k[j>>2];l=t+4|0;u=l;j=j+4|0;if((j|0)==(h|0)){v=u;break}else t=u}r=v;s=k[a>>2]|0}k[a>>2]=m;k[c>>2]=p;k[g>>2]=r;k[i>>2]=q;if(!s)o=n;else{OBa(s);o=k[c>>2]|0}}else o=d;while(0);k[o+-4>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+-4;return}function Xka(a){a=a|0;OBa(a);return}function Yka(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=41764;k[b+4>>2]=k[a+4>>2];return b|0}function Zka(a,b){a=a|0;b=b|0;k[b>>2]=41764;k[b+4>>2]=k[a+4>>2];return}function _ka(a){a=a|0;return}function $ka(a){a=a|0;OBa(a);return}function ala(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;a=b+244|0;c=k[a>>2]|0;k[a>>2]=c+-1;a=b+232|0;d=k[a>>2]|0;e=k[b+228>>2]|0;if((1-c-(k[b+240>>2]|0)+((d|0)==(e|0)?0:(d-e<<8)+-1|0)|0)>>>0<=2047){yma(b);return}OBa(k[d+-4>>2]|0);k[a>>2]=(k[a>>2]|0)+-4;yma(b);return}function bla(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==264590?a+4|0:0)|0}function cla(a){a=a|0;return 7296}function dla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+80|0;c=b;d=k[a>>2]|0;k[c>>2]=2;k[c+8>>2]=96;k[c+40>>2]=1;e=c+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=c+56|0;f=c+60|0;g=c+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,d+48|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;d=k[g>>2]|0;if(d)j0a(d);d=k[f>>2]|0;if(!d)Sc(c|0);j0a(d);Sc(c|0)}else{c=k[g>>2]|0;if(c)j0a(c);c=k[f>>2]|0;if(!c){ela(a);r=b;return}j0a(c);ela(a);r=b;return}}function ela(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+80|0;c=b;d=k[a>>2]|0;k[c>>2]=2;k[c+8>>2]=64;k[c+40>>2]=1;a=c+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=c+56|0;e=c+60|0;f=c+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;a=d+48|0;x=0;Ta(539,a|0,c|0)|0;d=x;x=0;if(d&1){d=Hc()|0;g=k[f>>2]|0;if(g)j0a(g);g=k[e>>2]|0;if(!g)Sc(d|0);j0a(g);Sc(d|0)}d=k[f>>2]|0;if(d)j0a(d);d=k[e>>2]|0;if(d)j0a(d);k[c>>2]=1;k[c+8>>2]=82;k[c+40>>2]=1;d=c+48|0;k[d>>2]=-1;k[d+4>>2]=-1;d=c+56|0;e=c+60|0;f=c+72|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;x=0;Ta(539,a|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;a=k[f>>2]|0;if(a)j0a(a);a=k[e>>2]|0;if(!a)Sc(c|0);j0a(a);Sc(c|0)}else{c=k[f>>2]|0;if(c)j0a(c);c=k[e>>2]|0;if(!c){r=b;return}j0a(c);r=b;return}}function fla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+80|0;c=b;d=k[a>>2]|0;k[c>>2]=2;k[c+8>>2]=64;k[c+40>>2]=1;a=c+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=c+56|0;e=c+60|0;f=c+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;a=d+48|0;x=0;Ta(539,a|0,c|0)|0;d=x;x=0;if(d&1){d=Hc()|0;g=k[f>>2]|0;if(g)j0a(g);g=k[e>>2]|0;if(!g)Sc(d|0);j0a(g);Sc(d|0)}d=k[f>>2]|0;if(d)j0a(d);d=k[e>>2]|0;if(d)j0a(d);k[c>>2]=1;k[c+8>>2]=81;k[c+40>>2]=1;d=c+48|0;k[d>>2]=-1;k[d+4>>2]=-1;d=c+56|0;e=c+60|0;f=c+72|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;x=0;Ta(539,a|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;a=k[f>>2]|0;if(a)j0a(a);a=k[e>>2]|0;if(!a)Sc(c|0);j0a(a);Sc(c|0)}else{c=k[f>>2]|0;if(c)j0a(c);c=k[e>>2]|0;if(!c){r=b;return}j0a(c);r=b;return}}function gla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+80|0;c=b;fla(a);d=k[a>>2]|0;k[c>>2]=1;k[c+8>>2]=144;k[c+40>>2]=1;e=c+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=c+56|0;f=c+60|0;g=c+72|0;h=d+48|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,h|0,c|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=k[g>>2]|0;if(d)j0a(d);d=k[f>>2]|0;if(!d)Sc(e|0);j0a(d);Sc(e|0)}e=k[g>>2]|0;if(e)j0a(e);e=k[f>>2]|0;if(e)j0a(e);k[c>>2]=1;k[c+8>>2]=129;k[c+40>>2]=1;e=c+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=c+56|0;f=c+60|0;g=c+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,h|0,c|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=k[g>>2]|0;if(d)j0a(d);d=k[f>>2]|0;if(!d)Sc(e|0);j0a(d);Sc(e|0)}e=k[g>>2]|0;if(e)j0a(e);e=k[f>>2]|0;if(e)j0a(e);k[c>>2]=1;k[c+8>>2]=1;k[c+40>>2]=1;e=c+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=c+56|0;f=c+60|0;g=c+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,h|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;h=k[g>>2]|0;if(h)j0a(h);h=k[f>>2]|0;if(!h)Sc(c|0);j0a(h);Sc(c|0)}else{c=k[g>>2]|0;if(c)j0a(c);c=k[f>>2]|0;if(!c){ela(a);r=b;return}j0a(c);ela(a);r=b;return}}function hla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+80|0;c=b;fla(a);d=k[a>>2]|0;k[c>>2]=1;k[c+8>>2]=128;k[c+40>>2]=1;e=c+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=c+56|0;f=c+60|0;g=c+72|0;h=d+48|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,h|0,c|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=k[g>>2]|0;if(d)j0a(d);d=k[f>>2]|0;if(!d)Sc(e|0);j0a(d);Sc(e|0)}e=k[g>>2]|0;if(e)j0a(e);e=k[f>>2]|0;if(e)j0a(e);k[c>>2]=1;k[c+8>>2]=145;k[c+40>>2]=1;e=c+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=c+56|0;f=c+60|0;g=c+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,h|0,c|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=k[g>>2]|0;if(d)j0a(d);d=k[f>>2]|0;if(!d)Sc(e|0);j0a(d);Sc(e|0)}e=k[g>>2]|0;if(e)j0a(e);e=k[f>>2]|0;if(e)j0a(e);k[c>>2]=1;k[c+8>>2]=3;k[c+40>>2]=1;e=c+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=c+56|0;f=c+60|0;g=c+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,h|0,c|0)|0;h=x;x=0;if(h&1){h=Hc()|0;e=k[g>>2]|0;if(e)j0a(e);e=k[f>>2]|0;if(!e)Sc(h|0);j0a(e);Sc(h|0)}h=k[g>>2]|0;if(h)j0a(h);h=k[f>>2]|0;if(h)j0a(h);h=k[a>>2]|0;k[c>>2]=1;k[c+8>>2]=144;k[c+40>>2]=1;a=c+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=c+56|0;f=c+60|0;g=c+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,h+48|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;h=k[g>>2]|0;if(h)j0a(h);h=k[f>>2]|0;if(!h)Sc(c|0);j0a(h);Sc(c|0)}else{c=k[g>>2]|0;if(c)j0a(c);c=k[f>>2]|0;if(!c){r=b;return}j0a(c);r=b;return}}function ila(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=r;r=r+128|0;g=f;h=f+108|0;i=f+80|0;j=(Vf[k[k[c>>2]>>2]&1023](c)|0)!=5;q2a(h,264796,39);x=0;pa(57,j|0,h|0,77,264836,264879);j=x;x=0;if(j&1){j=Hc()|0;K2a(h);Sc(j|0)}K2a(h);h=k[a>>2]|0;k[g>>2]=2;k[g+8>>2]=b;b=g+12|0;k[b>>2]=k[i>>2];k[b+4>>2]=k[i+4>>2];k[b+8>>2]=k[i+8>>2];k[b+12>>2]=k[i+12>>2];k[b+16>>2]=k[i+16>>2];k[b+20>>2]=k[i+20>>2];k[b+24>>2]=k[i+24>>2];k[g+40>>2]=1;i=g+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=g+56|0;b=g+60|0;j=g+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,h+48|0,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;h=k[j>>2]|0;if(h)j0a(h);h=k[b>>2]|0;if(!h)Sc(g|0);j0a(h);Sc(g|0)}else{g=k[j>>2]|0;if(g)j0a(g);g=k[b>>2]|0;if(!g){l=jla(a,c,d,e)|0;r=f;return l|0}j0a(g);l=jla(a,c,d,e)|0;r=f;return l|0}return 0}function jla(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;e=r;r=r+224|0;f=e+120|0;g=e+80|0;h=e+200|0;i=e;j=e+40|0;l=cg[k[(k[b>>2]|0)+28>>2]&1023](b,d)|0;d=(Vf[k[k[b>>2]>>2]&1023](b)|0)==6;if(!l){b=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;m=f+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=f+56|0;n=f+60|0;o=f+72|0;p=b+48|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,p|0,f|0)|0;m=x;x=0;if(m&1){m=Hc()|0;b=k[o>>2]|0;if(b)j0a(b);b=k[n>>2]|0;if(!b)Sc(m|0);j0a(b);Sc(m|0)}m=k[o>>2]|0;if(m)j0a(m);m=k[n>>2]|0;if(m)j0a(m);k[g>>2]=0;k[g+32>>2]=1;k[f>>2]=2;q=f+8|0;s=g;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));g=f+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=f+56|0;m=f+60|0;n=f+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,p|0,f|0)|0;p=x;x=0;if(p&1){p=Hc()|0;g=k[n>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(!g)Sc(p|0);j0a(g);Sc(p|0)}else{p=k[n>>2]|0;if(p)j0a(p);p=k[m>>2]|0;if(p)j0a(p);r=e;return l|0}}q2a(h,264992,51);x=0;pa(57,l>>>0<33|0,h|0,809,264836,265044);p=x;x=0;if(p&1){p=Hc()|0;K2a(h);Sc(p|0)}K2a(h);Iia(k[a>>2]|0,c?53:81)|0;if((l|0)==32){r=e;return l|0}k[j>>2]=1;k[j+32>>2]=1;c=32-l<<3;q=f;s=j;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));HB(f,c,0);q=i;s=f;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));c=k[a>>2]|0;k[f>>2]=2;q=f+8|0;s=i;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));j=f+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=f+56|0;h=f+60|0;p=f+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;j=c+48|0;x=0;Ta(539,j|0,f|0)|0;c=x;x=0;if(c&1){c=Hc()|0;m=k[p>>2]|0;if(m)j0a(m);m=k[h>>2]|0;if(!m)Sc(c|0);j0a(m);Sc(c|0)}c=k[p>>2]|0;if(c)j0a(c);c=k[h>>2]|0;if(c)j0a(c);k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;c=f+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=f+56|0;h=f+60|0;p=f+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,j|0,f|0)|0;c=x;x=0;if(c&1){c=Hc()|0;m=k[p>>2]|0;if(m)j0a(m);m=k[h>>2]|0;if(!m)Sc(c|0);j0a(m);Sc(c|0)}c=k[p>>2]|0;if(c)j0a(c);c=k[h>>2]|0;if(c)j0a(c);k[f>>2]=1;k[f+8>>2]=4;k[f+40>>2]=1;c=f+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=f+56|0;h=f+60|0;p=f+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,j|0,f|0)|0;j=x;x=0;if(j&1){j=Hc()|0;c=k[p>>2]|0;if(c)j0a(c);c=k[h>>2]|0;if(!c)Sc(j|0);j0a(c);Sc(j|0)}j=k[p>>2]|0;if(j)j0a(j);j=k[h>>2]|0;if(j)j0a(j);do if(d){j=k[a>>2]|0;k[f>>2]=2;q=f+8|0;s=i;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));h=f+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=f+56|0;p=f+60|0;c=f+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;h=j+48|0;x=0;Ta(539,h|0,f|0)|0;m=x;x=0;if(m&1){m=Hc()|0;n=k[c>>2]|0;if(n)j0a(n);n=k[p>>2]|0;if(!n)Sc(m|0);j0a(n);Sc(m|0)}m=k[c>>2]|0;if(m)j0a(m);m=k[p>>2]|0;if(m)j0a(m);k[f>>2]=1;k[f+8>>2]=2;k[f+40>>2]=1;m=f+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=f+56|0;p=f+60|0;c=f+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,h|0,f|0)|0;h=x;x=0;if(!(h&1)){h=k[c>>2]|0;if(h)j0a(h);h=k[p>>2]|0;if(h)j0a(h);break}h=Hc()|0;m=k[c>>2]|0;if(m)j0a(m);m=k[p>>2]|0;if(!m)Sc(h|0);j0a(m);Sc(h|0)}while(0);r=e;return l|0}function kla(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;f=r;r=r+192|0;g=f+40|0;h=f+172|0;i=f+160|0;j=f+148|0;l=f;m=f+120|0;do if(e){n=k[a>>2]|0;k[g>>2]=1;k[g+8>>2]=128;k[g+40>>2]=1;o=g+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=g+56|0;p=g+60|0;q=g+72|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;x=0;Ta(539,n+48|0,g|0)|0;n=x;x=0;if(!(n&1)){n=k[q>>2]|0;if(n)j0a(n);n=k[p>>2]|0;if(n)j0a(n);break}n=Hc()|0;o=k[q>>2]|0;if(o)j0a(o);o=k[p>>2]|0;if(!o)Sc(n|0);j0a(o);Sc(n|0)}while(0);n=iDa(b,168,6704,0)|0;if(!n){o=jla(a,b,c,d)|0;if(!e){r=f;return}p=Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0;if(p)Bla(a,p+1|0);p=k[a>>2]|0;k[g>>2]=2;k[g+8>>2]=o;o=g+12|0;k[o>>2]=k[m>>2];k[o+4>>2]=k[m+4>>2];k[o+8>>2]=k[m+8>>2];k[o+12>>2]=k[m+12>>2];k[o+16>>2]=k[m+16>>2];k[o+20>>2]=k[m+20>>2];k[o+24>>2]=k[m+24>>2];k[g+40>>2]=1;m=g+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=g+56|0;o=g+60|0;b=g+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;m=p+48|0;x=0;Ta(539,m|0,g|0)|0;p=x;x=0;if(p&1){p=Hc()|0;q=k[b>>2]|0;if(q)j0a(q);q=k[o>>2]|0;if(!q)Sc(p|0);j0a(q);Sc(p|0)}p=k[b>>2]|0;if(p)j0a(p);p=k[o>>2]|0;if(p)j0a(p);k[g>>2]=1;k[g+8>>2]=1;k[g+40>>2]=1;p=g+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=g+56|0;o=g+60|0;b=g+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,m|0,g|0)|0;m=x;x=0;if(m&1){m=Hc()|0;p=k[b>>2]|0;if(p)j0a(p);p=k[o>>2]|0;if(!p)Sc(m|0);j0a(p);Sc(m|0)}else{m=k[b>>2]|0;if(m)j0a(m);m=k[o>>2]|0;if(m)j0a(m);r=f;return}}m=(Vf[k[(k[n>>2]|0)+36>>2]&1023](n)|0)^1;q2a(h,329672,0);x=0;pa(57,m|0,h|0,94,264836,265149);m=x;x=0;if(m&1){m=Hc()|0;o=M;K2a(h);s=o;t=m;Sc(t|0)}K2a(h);q2a(i,329672,0);x=0;pa(57,c^1|0,i|0,95,264836,265149);c=x;x=0;if(c&1){c=Hc()|0;h=M;K2a(i);s=h;t=c;Sc(t|0)}K2a(i);q2a(j,329672,0);x=0;pa(57,d|0,j|0,96,264836,265149);d=x;x=0;if(d&1){d=Hc()|0;i=M;K2a(j);s=i;t=d;Sc(t|0)}K2a(j);if(!e){r=f;return}e=k[a>>2]|0;s9(l,n);k[g>>2]=2;n=g+8|0;a=l;l=n+40|0;do{k[n>>2]=k[a>>2];n=n+4|0;a=a+4|0}while((n|0)<(l|0));a=g+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=g+56|0;n=g+60|0;l=g+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;a=e+48|0;x=0;Ta(539,a|0,g|0)|0;e=x;x=0;if(e&1){e=Hc()|0;j=k[l>>2]|0;if(j)j0a(j);j=k[n>>2]|0;if(!j)Sc(e|0);j0a(j);Sc(e|0)}e=k[l>>2]|0;if(e)j0a(e);e=k[n>>2]|0;if(e)j0a(e);k[g>>2]=1;k[g+8>>2]=1;k[g+40>>2]=1;e=g+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=g+56|0;n=g+60|0;l=g+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,a|0,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;a=k[l>>2]|0;if(a)j0a(a);a=k[n>>2]|0;if(!a)Sc(g|0);j0a(a);Sc(g|0)}else{g=k[l>>2]|0;if(g)j0a(g);g=k[n>>2]|0;if(g)j0a(g);r=f;return}}function lla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(c>>>0>b>>>0){if(!b)return;d=c+b|0;e=0;do{Cla(a,d);e=e+1|0}while((e|0)!=(b|0));return}else{if(!c)return;e=c+b|0;b=0;do{Bla(a,e);b=b+1|0}while((b|0)!=(c|0));return}}function mla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+144|0;d=c;e=c+112|0;f=c+80|0;n8(e,256,0);x=0;g=Fa(141,a|0,e|0,1)|0;h=x;x=0;if(h&1){h=Hc()|0;k[e>>2]=20456;xh(e+12|0,k[e+16>>2]|0);i=k[e+8>>2]|0;if(!i)Sc(h|0);k0a(i);Sc(h|0)}k[e>>2]=20456;xh(e+12|0,k[e+16>>2]|0);h=k[e+8>>2]|0;if(h)k0a(h);if(!g){r=c;return}g=k[a>>2]|0;k[d>>2]=2;k[d+8>>2]=b;b=d+12|0;k[b>>2]=k[f>>2];k[b+4>>2]=k[f+4>>2];k[b+8>>2]=k[f+8>>2];k[b+12>>2]=k[f+12>>2];k[b+16>>2]=k[f+16>>2];k[b+20>>2]=k[f+20>>2];k[b+24>>2]=k[f+24>>2];k[d+40>>2]=1;f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;b=d+60|0;a=d+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;f=g+48|0;x=0;Ta(539,f|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;h=k[a>>2]|0;if(h)j0a(h);h=k[b>>2]|0;if(!h)Sc(g|0);j0a(h);Sc(g|0)}g=k[a>>2]|0;if(g)j0a(g);g=k[b>>2]|0;if(g)j0a(g);k[d>>2]=1;k[d+8>>2]=82;k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;b=d+60|0;a=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,f|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;f=k[a>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(!f)Sc(d|0);j0a(f);Sc(d|0)}else{d=k[a>>2]|0;if(d)j0a(d);d=k[b>>2]|0;if(d)j0a(d);r=c;return}}function nla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=r;r=r+176|0;e=d+80|0;f=d+160|0;g=d+40|0;h=d;i=cg[k[(k[b>>2]|0)+28>>2]&1023](b,c)|0;j=(Vf[k[k[b>>2]>>2]&1023](b)|0)==6;if(!i){b=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;l=e+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=e+56|0;m=e+60|0;n=e+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,b+48|0,e|0)|0;b=x;x=0;if(b&1){b=Hc()|0;l=k[n>>2]|0;if(l)j0a(l);l=k[m>>2]|0;if(!l)Sc(b|0);j0a(l);Sc(b|0)}else{b=k[n>>2]|0;if(b)j0a(b);b=k[m>>2]|0;if(b)j0a(b);r=d;return i|0}}q2a(f,265253,45);x=0;pa(57,i>>>0<33|0,f|0,842,264836,265299);b=x;x=0;if(b&1){b=Hc()|0;K2a(f);Sc(b|0)}K2a(f);if((i|0)==32|j|c){r=d;return i|0}c=k[a>>2]|0;k[h>>2]=1;k[h+32>>2]=1;a=32-i<<3;j=e;f=h;h=j+40|0;do{k[j>>2]=k[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(h|0));HB(e,a,0);j=g;f=e;h=j+40|0;do{k[j>>2]=k[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(h|0));k[e>>2]=2;j=e+8|0;f=g;h=j+40|0;do{k[j>>2]=k[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(h|0));f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;j=e+60|0;h=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;f=c+48|0;x=0;Ta(539,f|0,e|0)|0;c=x;x=0;if(c&1){c=Hc()|0;g=k[h>>2]|0;if(g)j0a(g);g=k[j>>2]|0;if(!g)Sc(c|0);j0a(g);Sc(c|0)}c=k[h>>2]|0;if(c)j0a(c);c=k[j>>2]|0;if(c)j0a(c);k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;c=e+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=e+56|0;j=e+60|0;h=e+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,f|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;f=k[h>>2]|0;if(f)j0a(f);f=k[j>>2]|0;if(!f)Sc(e|0);j0a(f);Sc(e|0)}else{e=k[h>>2]|0;if(e)j0a(e);e=k[j>>2]|0;if(e)j0a(e);r=d;return i|0}return 0}function ola(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+240|0;e=d;f=d+216|0;g=d+184|0;h=d+176|0;j=d+148|0;l=d+120|0;m=d+108|0;n=d+80|0;o=iDa(b,168,6688,0)|0;if(o){p=(k[o+24>>2]|0)==2;q2a(f,329672,0);x=0;pa(57,p|0,f|0,123,264836,265402);p=x;x=0;if(p&1){p=Hc()|0;o=M;K2a(f);q=p;s=o;Sc(q|0)}K2a(f);n8(g,256,0);x=0;fb(320,a|0,g|0,c|0);f=x;x=0;if(f&1){f=Hc()|0;o=M;k[g>>2]=20456;xh(g+12|0,k[g+16>>2]|0);p=k[g+8>>2]|0;if(!p){q=f;s=o;Sc(q|0)}k0a(p);q=f;s=o;Sc(q|0)}else{k[g>>2]=20456;xh(g+12|0,k[g+16>>2]|0);o=k[g+8>>2]|0;if(!o){r=d;return}k0a(o);r=d;return}}o=iDa(b,168,6640,0)|0;if(!o){g=nla(a,b,c)|0;if(!g){r=d;return}f=(Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0)==1;q2a(m,265493,59);x=0;pa(57,f|0,m|0,144,264836,265402);f=x;x=0;if(f&1){f=Hc()|0;b=M;K2a(m);q=f;s=b;Sc(q|0)}K2a(m);m=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=129;k[e+40>>2]=1;q=e+48|0;k[q>>2]=-1;k[q+4>>2]=-1;q=e+56|0;b=e+60|0;s=e+72|0;f=m+48|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;x=0;Ta(539,f|0,e|0)|0;q=x;x=0;if(q&1){q=Hc()|0;m=k[s>>2]|0;if(m)j0a(m);m=k[b>>2]|0;if(!m)Sc(q|0);j0a(m);Sc(q|0)}q=k[s>>2]|0;if(q)j0a(q);q=k[b>>2]|0;if(q)j0a(q);k[e>>2]=1;k[e+8>>2]=82;k[e+40>>2]=1;q=e+48|0;k[q>>2]=-1;k[q+4>>2]=-1;q=e+56|0;b=e+60|0;s=e+72|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;x=0;Ta(539,f|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;q=k[s>>2]|0;if(q)j0a(q);q=k[b>>2]|0;if(!q)Sc(f|0);j0a(q);Sc(f|0)}f=k[s>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(f)j0a(f);f=k[a>>2]|0;k[e>>2]=2;k[e+8>>2]=g;g=e+12|0;k[g>>2]=k[n>>2];k[g+4>>2]=k[n+4>>2];k[g+8>>2]=k[n+8>>2];k[g+12>>2]=k[n+12>>2];k[g+16>>2]=k[n+16>>2];k[g+20>>2]=k[n+20>>2];k[g+24>>2]=k[n+24>>2];k[e+40>>2]=1;n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;g=e+60|0;b=e+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;n=f+48|0;x=0;Ta(539,n|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;s=k[b>>2]|0;if(s)j0a(s);s=k[g>>2]|0;if(!s)Sc(f|0);j0a(s);Sc(f|0)}f=k[b>>2]|0;if(f)j0a(f);f=k[g>>2]|0;if(f)j0a(f);k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;g=e+60|0;b=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,n|0,e|0)|0;n=x;x=0;if(n&1){n=Hc()|0;f=k[b>>2]|0;if(f)j0a(f);f=k[g>>2]|0;if(!f)Sc(n|0);j0a(f);Sc(n|0)}else{n=k[b>>2]|0;if(n)j0a(n);n=k[g>>2]|0;if(n)j0a(n);r=d;return}}n=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=128;k[e+40>>2]=1;g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;b=e+60|0;f=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,n+48|0,e|0)|0;n=x;x=0;if(n&1){n=Hc()|0;g=k[f>>2]|0;if(g)j0a(g);g=k[b>>2]|0;if(!g)Sc(n|0);j0a(g);Sc(n|0)}n=k[f>>2]|0;if(n)j0a(n);n=k[b>>2]|0;if(n)j0a(n);n=o+24|0;b=i[n>>0]|0;f=(b&1)==0;k[h>>2]=f?o+25|0:k[o+32>>2]|0;g=o+28|0;k[h+4>>2]=f?(b&255)>>>1:k[g>>2]|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];pla(a,e);h=k[a>>2]|0;b=i[n>>0]|0;if(!(b&1))t=(b&255)>>>1;else t=k[g>>2]|0;do if(c){k[e>>2]=2;k[e+8>>2]=t+31&-32;g=e+12|0;k[g>>2]=k[j>>2];k[g+4>>2]=k[j+4>>2];k[g+8>>2]=k[j+8>>2];k[g+12>>2]=k[j+12>>2];k[g+16>>2]=k[j+16>>2];k[g+20>>2]=k[j+20>>2];k[g+24>>2]=k[j+24>>2];k[e+40>>2]=1;g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;b=e+60|0;n=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,h+48|0,e|0)|0;g=x;x=0;if(!(g&1)){g=k[n>>2]|0;if(g)j0a(g);g=k[b>>2]|0;if(g)j0a(g);break}g=Hc()|0;f=k[n>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(!f)Sc(g|0);j0a(f);Sc(g|0)}else{k[e>>2]=2;k[e+8>>2]=t;g=e+12|0;k[g>>2]=k[l>>2];k[g+4>>2]=k[l+4>>2];k[g+8>>2]=k[l+8>>2];k[g+12>>2]=k[l+12>>2];k[g+16>>2]=k[l+16>>2];k[g+20>>2]=k[l+20>>2];k[g+24>>2]=k[l+24>>2];k[e+40>>2]=1;g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;f=e+60|0;b=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,h+48|0,e|0)|0;g=x;x=0;if(!(g&1)){g=k[b>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(g)j0a(g);break}g=Hc()|0;n=k[b>>2]|0;if(n)j0a(n);n=k[f>>2]|0;if(!n)Sc(g|0);j0a(n);Sc(g|0)}while(0);h=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;a=e+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=e+56|0;l=e+60|0;t=e+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,h+48|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;h=k[t>>2]|0;if(h)j0a(h);h=k[l>>2]|0;if(!h)Sc(e|0);j0a(h);Sc(e|0)}else{e=k[t>>2]|0;if(e)j0a(e);e=k[l>>2]|0;if(e)j0a(e);r=d;return}}function pla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;c=r;r=r+304|0;d=c+80|0;e=c+40|0;f=c;g=c+232|0;h=c+264|0;j=c+200|0;l=c+188|0;m=c+160|0;n=k[b+4>>2]|0;if(n>>>0<129){o=k[a>>2]|0;a:do if(!n)p=o;else{q=h+32|0;s=e+32|0;t=d+32|0;u=d+4|0;v=d+32|0;w=e+4|0;y=d+8|0;z=d+12|0;A=d+40|0;B=d+48|0;C=d+56|0;D=d+60|0;E=d+72|0;F=j+12|0;G=j+16|0;H=j+8|0;I=k[b>>2]|0;J=(I|0)==0;K=o;L=0;while(1){if(!(n>>>0>>0|J)){N=I+L|0;O=n-L|0;if((O|0)==32){P=h;Q=N;R=P+32|0;do{i[P>>0]=i[Q>>0]|0;P=P+1|0;Q=Q+1|0}while((P|0)<(R|0))}else{S=O;T=N;U=18}}else{S=0;T=0;U=18}if((U|0)==18){U=0;P=h;R=P+32|0;do{i[P>>0]=0;P=P+1|0}while((P|0)<(R|0));N=S>>>0>32?32:S;if(N){O=0;do{i[h+O>>0]=i[T+O>>0]|0;O=O+1|0}while(O>>>0>>0)}}N=0;O=1;V=h;while(1){W=i[V>>0]|0;k[d>>2]=N;k[u>>2]=k[g>>2];k[u+4>>2]=k[g+4>>2];k[u+8>>2]=k[g+8>>2];k[u+12>>2]=k[g+12>>2];k[u+16>>2]=k[g+16>>2];k[u+20>>2]=k[g+20>>2];k[u+24>>2]=k[g+24>>2];k[v>>2]=O;HB(d,8,0);P=f;Q=d;R=P+40|0;do{k[P>>2]=k[Q>>2];P=P+4|0;Q=Q+4|0}while((P|0)<(R|0));k[e>>2]=0;k[s>>2]=1;k[d>>2]=W&255;k[t>>2]=1;YB(e,f,d);X=k[e>>2]|0;k[g>>2]=k[w>>2];k[g+4>>2]=k[w+4>>2];k[g+8>>2]=k[w+8>>2];k[g+12>>2]=k[w+12>>2];k[g+16>>2]=k[w+16>>2];k[g+20>>2]=k[w+20>>2];k[g+24>>2]=k[w+24>>2];Y=k[s>>2]|0;V=V+1|0;if((V|0)==(q|0)){Z=X;_=Y;break}else{N=X;O=Y}}k[d>>2]=2;k[y>>2]=Z;k[z>>2]=k[g>>2];k[z+4>>2]=k[g+4>>2];k[z+8>>2]=k[g+8>>2];k[z+12>>2]=k[g+12>>2];k[z+16>>2]=k[g+16>>2];k[z+20>>2]=k[g+20>>2];k[z+24>>2]=k[g+24>>2];k[A>>2]=_;O=B;k[O>>2]=-1;k[O+4>>2]=-1;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[C+16>>2]=0;x=0;Ta(539,K+48|0,d|0)|0;O=x;x=0;if(O&1)break;O=k[E>>2]|0;if(O)j0a(O);O=k[D>>2]|0;if(O)j0a(O);n8(j,256,0);x=0;fb(320,a|0,j|0,1);O=x;x=0;if(O&1){U=36;break}k[j>>2]=20456;xh(F,k[G>>2]|0);O=k[H>>2]|0;if(O)k0a(O);L=L+32|0;O=k[a>>2]|0;if(n>>>0<=L>>>0){p=O;break a}else K=O}if((U|0)==36){K=Hc()|0;L=M;k[j>>2]=20456;xh(F,k[G>>2]|0);C=k[H>>2]|0;if(!C){$=L;aa=K;Sc(aa|0)}k0a(C);$=L;aa=K;Sc(aa|0)}K=Hc()|0;L=k[E>>2]|0;if(L)j0a(L);L=k[D>>2]|0;if(!L)Sc(K|0);j0a(L);Sc(K|0)}while(0);k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;j=d+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=d+56|0;_=d+60|0;g=d+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,p+48|0,d|0)|0;p=x;x=0;if(p&1){p=Hc()|0;j=k[g>>2]|0;if(j)j0a(j);j=k[_>>2]|0;if(!j)Sc(p|0);j0a(j);Sc(p|0)}else{p=k[g>>2]|0;if(p)j0a(p);p=k[_>>2]|0;if(p)j0a(p);r=c;return}}p=k[a>>2]|0;_=k[b>>2]|0;b=_+n|0;k[l>>2]=0;g=l+4|0;k[g>>2]=0;k[l+8>>2]=0;if(!((n|0)<0?(x=0,va(1473,l|0),j=x,x=0,j&1):0))U=40;if((U|0)==40?(x=0,U=Ba(563,n|0)|0,j=x,x=0,!(j&1)):0){k[g>>2]=U;k[l>>2]=U;k[l+8>>2]=U+n;j=_;_=U;do{i[_>>0]=i[j>>0]|0;_=(k[g>>2]|0)+1|0;k[g>>2]=_;j=j+1|0}while((j|0)!=(b|0));x=0;b=Ta(603,p+48|0,l|0)|0;p=x;x=0;if(p&1){p=Hc()|0;j=M;_=k[l>>2]|0;if(!_){$=j;aa=p;Sc(aa|0)}if((k[g>>2]|0)!=(_|0))k[g>>2]=_;OBa(_);$=j;aa=p;Sc(aa|0)}aa=k[b+60>>2]|0;p=(aa|0)==0;if(!p)h0a(aa);j=k[b+72>>2]|0;if(j){h0a(j);j0a(j)}if(!p)j0a(aa);aa=k[l>>2]|0;if(aa){if((k[g>>2]|0)!=(aa|0))k[g>>2]=aa;OBa(aa)}aa=k[a>>2]|0;k[d>>2]=2;k[d+8>>2]=n;n=d+12|0;k[n>>2]=k[m>>2];k[n+4>>2]=k[m+4>>2];k[n+8>>2]=k[m+8>>2];k[n+12>>2]=k[m+12>>2];k[n+16>>2]=k[m+16>>2];k[n+20>>2]=k[m+20>>2];k[n+24>>2]=k[m+24>>2];k[d+40>>2]=1;m=d+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=d+56|0;n=d+60|0;p=d+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;m=aa+48|0;x=0;Ta(539,m|0,d|0)|0;aa=x;x=0;if(aa&1){aa=Hc()|0;j=k[p>>2]|0;if(j)j0a(j);j=k[n>>2]|0;if(!j)Sc(aa|0);j0a(j);Sc(aa|0)}aa=k[p>>2]|0;if(aa)j0a(aa);aa=k[n>>2]|0;if(aa)j0a(aa);k[d>>2]=1;k[d+8>>2]=145;k[d+40>>2]=1;aa=d+48|0;k[aa>>2]=-1;k[aa+4>>2]=-1;aa=d+56|0;n=d+60|0;p=d+72|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[aa+16>>2]=0;x=0;Ta(539,m|0,d|0)|0;m=x;x=0;if(m&1){m=Hc()|0;aa=k[p>>2]|0;if(aa)j0a(aa);aa=k[n>>2]|0;if(!aa)Sc(m|0);j0a(aa);Sc(m|0)}m=k[p>>2]|0;if(m)j0a(m);m=k[n>>2]|0;if(m)j0a(m);m=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=57;k[d+40>>2]=1;a=d+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=d+56|0;n=d+60|0;p=d+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,m+48|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;m=k[p>>2]|0;if(m)j0a(m);m=k[n>>2]|0;if(!m)Sc(d|0);j0a(m);Sc(d|0)}else{d=k[p>>2]|0;if(d)j0a(d);d=k[n>>2]|0;if(d)j0a(d);r=c;return}}c=Hc()|0;d=k[l>>2]|0;if(!d)Sc(c|0);if((k[g>>2]|0)!=(d|0))k[g>>2]=d;OBa(d);Sc(c|0)}function qla(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0;g=r;r=r+1152|0;h=g+680|0;j=g+600|0;l=g+1128|0;m=g+520|0;n=g+440|0;o=g+1116|0;p=g+1104|0;q=g+1092|0;s=g+360|0;t=g+280|0;u=g+200|0;v=g+1080|0;w=g+120|0;y=g+40|0;z=g+1068|0;A=g+1056|0;B=g+1048|0;C=g+1040|0;D=g+1032|0;E=g+1024|0;F=g+1016|0;G=g+1008|0;H=g+992|0;I=g+980|0;J=g+968|0;K=g+960|0;L=g+952|0;N=g+944|0;O=g+928|0;P=g;Q=g+916|0;R=g+904|0;S=g+892|0;T=g+888|0;U=g+876|0;V=g+848|0;W=g+816|0;X=g+804|0;Y=g+800|0;Z=g+768|0;_=g+760|0;NU(z,(k[c>>2]|0)==(k[c+4>>2]|0)?b:c);c=z+4|0;$=k[c>>2]|0;aa=k[z>>2]|0;ba=b+4|0;ca=k[ba>>2]|0;da=k[b>>2]|0;x=0;fb(140,A|0,329672,0);ea=x;x=0;a:do if(!(ea&1)){x=0;pa(57,($-aa|0)==(ca-da|0)|0,A|0,161,264836,265553);fa=x;x=0;if(fa&1){fa=Hc()|0;ga=M;K2a(A);ha=fa;ia=ga;break}K2a(A);ga=k[z>>2]|0;fa=k[c>>2]|0;b:do if((ga|0)!=(fa|0)){ja=E+4|0;ka=F+4|0;la=G+4|0;ma=C+4|0;na=D+4|0;oa=B+4|0;qa=K+4|0;ra=L+4|0;sa=N+4|0;ta=ga;while(1){ua=k[ta>>2]|0;x=0;xa(k[(k[ua>>2]|0)+64>>2]|0,B|0,ua|0);ua=x;x=0;if(ua&1){va=15;break}if(k[B>>2]|0){ua=k[ta>>2]|0;x=0;xa(k[(k[ua>>2]|0)+64>>2]|0,D|0,ua|0);ua=x;x=0;if(ua&1){va=58;break}ua=k[D>>2]|0;x=0;fb(k[(k[ua>>2]|0)+96>>2]|0,C|0,ua|0,f|0);ua=x;x=0;if(ua&1){va=59;break}if(!(k[C>>2]|0)){wa=1;ya=0;za=0}else{ua=k[ta>>2]|0;x=0;xa(k[(k[ua>>2]|0)+64>>2]|0,G|0,ua|0);ua=x;x=0;if(ua&1){va=60;break}ua=k[G>>2]|0;x=0;fb(k[(k[ua>>2]|0)+96>>2]|0,F|0,ua|0,f|0);ua=x;x=0;if(ua&1){va=61;break}ua=k[F>>2]|0;x=0;xa(k[(k[ua>>2]|0)+88>>2]|0,E|0,ua|0);ua=x;x=0;if(ua&1){va=62;break}wa=1;ya=1;za=(k[E>>2]|0)!=0}}else{wa=0;ya=0;za=0}ua=k[ta>>2]|0;x=0;fb(k[(k[ua>>2]|0)+76>>2]|0,J|0,ua|0,0);ua=x;x=0;if(ua&1){Aa=wa;Ca=ya;va=63;break}x=0;ua=Fa(86,J|0,0,265665)|0;Da=x;x=0;if(Da&1){Ea=wa;Ga=ya;va=64;break};k[I>>2]=k[ua>>2];k[I+4>>2]=k[ua+4>>2];k[I+8>>2]=k[ua+8>>2];k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;x=0;ua=Ta(484,I|0,265681)|0;Da=x;x=0;if(Da&1){Ha=wa;Ia=ya;va=65;break};k[H>>2]=k[ua>>2];k[H+4>>2]=k[ua+4>>2];k[H+8>>2]=k[ua+8>>2];k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;x=0;pa(57,za|0,H|0,169,264836,265553);ua=x;x=0;if(ua&1){Ja=wa;Ka=ya;va=66;break}K2a(H);K2a(I);K2a(J);if(ya){ua=k[ja>>2]|0;if(ua)j0a(ua);ua=k[ka>>2]|0;if(ua)j0a(ua);ua=k[la>>2]|0;if(ua)j0a(ua)}if(wa){ua=k[ma>>2]|0;if(ua)j0a(ua);ua=k[na>>2]|0;if(ua)j0a(ua)}ua=k[oa>>2]|0;if(ua)j0a(ua);ua=k[ta>>2]|0;x=0;xa(k[(k[ua>>2]|0)+64>>2]|0,N|0,ua|0);ua=x;x=0;if(ua&1){va=15;break}ua=k[N>>2]|0;x=0;fb(k[(k[ua>>2]|0)+96>>2]|0,L|0,ua|0,f|0);ua=x;x=0;if(ua&1){va=84;break}ua=k[L>>2]|0;x=0;xa(k[(k[ua>>2]|0)+88>>2]|0,K|0,ua|0);ua=x;x=0;if(ua&1){va=85;break}ua=k[K>>2]|0;Da=k[qa>>2]|0;k[K>>2]=0;k[qa>>2]=0;k[ta>>2]=ua;ua=ta+4|0;La=k[ua>>2]|0;k[ua>>2]=Da;if(La)j0a(La);La=k[qa>>2]|0;if(La)j0a(La);La=k[ra>>2]|0;if(La)j0a(La);La=k[sa>>2]|0;if(La)j0a(La);ta=ta+8|0;if((ta|0)==(fa|0))break b}switch(va|0){case 15:{ta=Hc()|0;Ma=M;Na=ta;va=17;break a;break}case 58:{Oa=Hc()|0;Pa=M;break}case 59:{Qa=Hc()|0;Ra=M;va=80;break}case 60:{Sa=Hc()|0;Ua=M;va=78;break}case 61:{Va=1;Wa=Hc()|0;Xa=M;va=75;break}case 62:{Ya=1;Za=Hc()|0;_a=M;va=73;break}case 63:{$a=Aa;ab=Ca;bb=Hc()|0;cb=M;va=69;break}case 64:{db=Ea;eb=Ga;gb=Hc()|0;ib=M;va=68;break}case 65:{jb=Hc()|0;kb=M;lb=Ha;mb=Ia;va=67;break}case 66:{ta=Hc()|0;qa=M;K2a(H);jb=ta;kb=qa;lb=Ja;mb=Ka;va=67;break}case 84:{ob=Hc()|0;pb=M;va=87;break}case 85:{qa=Hc()|0;ta=M;La=k[ra>>2]|0;if(!La){ob=qa;pb=ta;va=87}else{j0a(La);ob=qa;pb=ta;va=87}break}}if((va|0)==67){K2a(I);db=lb;eb=mb;gb=jb;ib=kb;va=68}else if((va|0)==87){ta=k[sa>>2]|0;if(!ta){ha=ob;ia=pb;break a}j0a(ta);ha=ob;ia=pb;break a}if((va|0)==68){K2a(J);$a=db;ab=eb;bb=gb;cb=ib;va=69}do if((va|0)==69){if(!ab)if($a){Sa=bb;Ua=cb;va=78;break}else{Oa=bb;Pa=cb;break}ta=k[ja>>2]|0;if(!ta){Ya=$a;Za=bb;_a=cb;va=73}else{j0a(ta);Ya=$a;Za=bb;_a=cb;va=73}}while(0);if((va|0)==73){ja=k[ka>>2]|0;if(!ja){Va=Ya;Wa=Za;Xa=_a;va=75}else{j0a(ja);Va=Ya;Wa=Za;Xa=_a;va=75}}do if((va|0)==75){ja=k[la>>2]|0;if(!ja)if(Va){Sa=Wa;Ua=Xa;va=78;break}else{Oa=Wa;Pa=Xa;break}else{j0a(ja);if(Va){Sa=Wa;Ua=Xa;va=78;break}else{Oa=Wa;Pa=Xa;break}}}while(0);if((va|0)==78){la=k[ma>>2]|0;if(!la){Qa=Sa;Ra=Ua;va=80}else{j0a(la);Qa=Sa;Ra=Ua;va=80}}if((va|0)==80){la=k[na>>2]|0;if(!la){Oa=Qa;Pa=Ra}else{j0a(la);Oa=Qa;Pa=Ra}}la=k[oa>>2]|0;if(!la){ha=Oa;ia=Pa;break a}j0a(la);ha=Oa;ia=Pa;break a}while(0);fa=k[a>>2]|0;k[y>>2]=1;k[y+8>>2]=128;k[y+40>>2]=1;ga=y+48|0;k[ga>>2]=-1;k[ga+4>>2]=-1;ga=y+56|0;la=y+60|0;ka=y+72|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[ga+16>>2]=0;x=0;Ta(539,fa+48|0,y|0)|0;fa=x;x=0;if(fa&1){fa=Hc()|0;ga=M;ja=k[ka>>2]|0;if(ja)j0a(ja);ja=k[la>>2]|0;if(!ja){Ma=ga;Na=fa;va=17;break}j0a(ja);Ma=ga;Na=fa;va=17;break}fa=k[ka>>2]|0;if(fa)j0a(fa);fa=k[la>>2]|0;if(fa)j0a(fa);fa=k[b>>2]|0;la=k[ba>>2]|0;do if((fa|0)!=(la|0)){ka=fa;ga=0;while(1){ja=k[ka>>2]|0;x=0;sa=Ba(k[(k[ja>>2]|0)+60>>2]|0,ja|0)|0;ja=x;x=0;if(ja&1){va=14;break}ja=sa+ga|0;ka=ka+8|0;if((ka|0)==(la|0)){qb=ja;va=92;break}else ga=ja}if((va|0)==14){ga=Hc()|0;Ma=M;Na=ga;va=17;break a}else if((va|0)==92){rb=k[ba>>2]|0;sb=k[b>>2]|0;tb=qb;break}}else{rb=la;sb=fa;tb=0}while(0);c:do if((rb|0)==(sb|0)){ub=rb;vb=sb;wb=0}else{fa=tb+2|0;la=u+8|0;ga=u+40|0;ka=u+48|0;oa=u+56|0;na=u+60|0;ma=u+72|0;ja=P+32|0;sa=t+8|0;ra=t+48|0;ta=t+56|0;qa=t+60|0;La=t+72|0;Da=s+8|0;ua=s+40|0;xb=s+48|0;yb=s+56|0;zb=s+60|0;Ab=s+72|0;Bb=0;Cb=0;Db=0;d:while(1){Eb=k[z>>2]|0;Fb=k[Eb+(Cb<<3)>>2]|0;Gb=k[Eb+(Cb<<3)+4>>2]|0;Eb=(Gb|0)==0;if(!Eb)h0a(Gb);Hb=Fb;Ib=(Fb|0)!=0;x=0;fb(140,O|0,265704,27);Jb=x;x=0;if(Jb&1){Kb=Gb;Lb=Eb;va=131;break}x=0;pa(57,Ib|0,O|0,187,264836,265553);Jb=x;x=0;if(Jb&1){Mb=Gb;Nb=Eb;va=133;break}K2a(O);Jb=Fb;x=0;Ob=Ba(k[(k[Jb>>2]|0)+36>>2]|0,Hb|0)|0;Pb=x;x=0;if(Pb&1){Kb=Gb;Lb=Eb;va=131;break}do if(e|Ob^1){Pb=k[(k[b>>2]|0)+(Cb<<3)>>2]|0;x=0;Qb=Ba(k[(k[Pb>>2]|0)+60>>2]|0,Pb|0)|0;Pb=x;x=0;if(Pb&1){Kb=Gb;Lb=Eb;va=131;break d}x=0;fb(338,a|0,fa-Db+Bb|0,Qb|0);Qb=x;x=0;if(Qb&1){Kb=Gb;Lb=Eb;va=131;break d}x=0;fb(140,Q|0,265704,27);Qb=x;x=0;if(Qb&1){Kb=Gb;Lb=Eb;va=131;break d}x=0;pa(57,Ib|0,Q|0,197,264836,265553);Qb=x;x=0;if(Qb&1){Rb=Gb;Sb=Eb;va=150;break d}K2a(Q);Qb=Gb;if(!Eb)h0a(Gb);Pb=k[(k[b>>2]|0)+(Cb<<3)>>2]|0;x=0;Tb=Ta(k[(k[Pb>>2]|0)+68>>2]|0,Pb|0,0)|0;Pb=x;x=0;if(Pb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}do if(Tb){x=0;Pb=Ba(k[(k[Jb>>2]|0)+56>>2]|0,Hb|0)|0;Xb=x;x=0;if(Xb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}if(!Pb){va=154;break}x=0;fb(140,R|0,329672,0);Pb=x;x=0;if(Pb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}x=0;pa(57,f|0,R|0,203,264836,265553);Pb=x;x=0;if(Pb&1){Yb=Gb;Zb=Eb;_b=Qb;va=152;break d}K2a(R);Pb=k[(k[b>>2]|0)+(Cb<<3)>>2]|0;x=0;Xb=Ba(k[(k[Pb>>2]|0)+60>>2]|0,Pb|0)|0;Pb=x;x=0;if(Pb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}x=0;fb(140,S|0,329672,0);Pb=x;x=0;if(Pb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}x=0;pa(57,(Xb|0)==1|0,S|0,204,264836,265553);Xb=x;x=0;if(Xb&1){$b=Gb;ac=Eb;bc=Qb;va=153;break d}K2a(S);cc=Fb;dc=Qb}else va=154;while(0);e:do if((va|0)==154){va=0;Tb=k[(k[b>>2]|0)+(Cb<<3)>>2]|0;x=0;Xb=Ta(k[(k[Tb>>2]|0)+68>>2]|0,Tb|0,0)|0;Tb=x;x=0;if(Tb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}do if(!Xb){Tb=k[(k[b>>2]|0)+(Cb<<3)>>2]|0;x=0;Pb=Ta(k[(k[Tb>>2]|0)+68>>2]|0,Tb|0,1)|0;Tb=x;x=0;if(Tb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}if(Pb)break;Pb=k[(k[b>>2]|0)+(Cb<<3)>>2]|0;x=0;Tb=Ba(k[k[Pb>>2]>>2]|0,Pb|0)|0;Pb=x;x=0;if(Pb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}if((Tb|0)==2)break;x=0;nb(137,a|0,k[(k[b>>2]|0)+(Cb<<3)>>2]|0,Hb|0,1);Tb=x;x=0;if(Tb&1){Ub=Gb;Vb=Eb;Wb=Qb;va=151;break d}else{cc=Fb;dc=Qb;break e}}while(0);Xb=k[b>>2]|0;Tb=k[Xb+(Cb<<3)>>2]|0;Pb=k[Xb+(Cb<<3)+4>>2]|0;Xb=Pb;if(Pb)h0a(Pb);if(Eb){cc=Tb;dc=Xb;break}j0a(Gb);cc=Tb;dc=Xb}while(0);Qb=cc;do if(cc){Xb=iDa(cc,168,6704,0)|0;if(!Xb){va=168;break}k[T>>2]=k[a>>2];x=0;fb(319,T|0,Xb|0,d|0);Xb=x;x=0;if(Xb&1){Ub=Gb;Vb=Eb;Wb=dc;va=151;break d}}else va=168;while(0);if((va|0)==168?(va=0,x=0,fb(320,a|0,Qb|0,d|0),Xb=x,x=0,Xb&1):0){Ub=Gb;Vb=Eb;Wb=dc;va=151;break d}if(!dc){ec=Bb;break}j0a(dc);ec=Bb}else{Xb=k[a>>2]|0;k[u>>2]=1;k[la>>2]=128;k[ga>>2]=1;Tb=ka;k[Tb>>2]=-1;k[Tb+4>>2]=-1;Tb=Xb+48|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[oa+16>>2]=0;x=0;Ta(539,Tb|0,u|0)|0;Xb=x;x=0;if(Xb&1){fc=Gb;gc=Eb;va=108;break d}Xb=k[ma>>2]|0;if(Xb)j0a(Xb);Xb=k[na>>2]|0;if(Xb)j0a(Xb);k[P>>2]=32;k[ja>>2]=1;k[t>>2]=2;Xb=sa;Pb=P;hc=Xb+40|0;do{k[Xb>>2]=k[Pb>>2];Xb=Xb+4|0;Pb=Pb+4|0}while((Xb|0)<(hc|0));Pb=ra;k[Pb>>2]=-1;k[Pb+4>>2]=-1;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[ta+16>>2]=0;x=0;Ta(539,Tb|0,t|0)|0;Pb=x;x=0;if(Pb&1){ic=Gb;jc=Eb;va=117;break d}Pb=k[La>>2]|0;if(Pb)j0a(Pb);Pb=k[qa>>2]|0;if(Pb)j0a(Pb);k[s>>2]=1;k[Da>>2]=1;k[ua>>2]=1;Pb=xb;k[Pb>>2]=-1;k[Pb+4>>2]=-1;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[yb+16>>2]=0;x=0;Ta(539,Tb|0,s|0)|0;Pb=x;x=0;if(Pb&1){kc=Gb;lc=Eb;va=126;break d}Pb=k[Ab>>2]|0;if(Pb)j0a(Pb);Pb=k[zb>>2]|0;if(Pb)j0a(Pb);ec=Bb+1|0}while(0);Fb=k[(k[b>>2]|0)+(Cb<<3)>>2]|0;x=0;Hb=Ba(k[(k[Fb>>2]|0)+60>>2]|0,Fb|0)|0;Fb=x;x=0;if(Fb&1){Kb=Gb;Lb=Eb;va=131;break}if(!Eb)j0a(Gb);Cb=Cb+1|0;Fb=k[ba>>2]|0;Jb=k[b>>2]|0;if(Cb>>>0>=Fb-Jb>>3>>>0){ub=Fb;vb=Jb;wb=ec;break c}else{Bb=ec;Db=Hb+Db|0}}if((va|0)==108){Db=Hc()|0;Bb=M;Cb=k[ma>>2]|0;if(Cb)j0a(Cb);Cb=k[na>>2]|0;if(!Cb){mc=gc;nc=fc;oc=Bb;pc=Db;va=132}else{j0a(Cb);mc=gc;nc=fc;oc=Bb;pc=Db;va=132}}else if((va|0)==117){Db=Hc()|0;Bb=M;Cb=k[La>>2]|0;if(Cb)j0a(Cb);Cb=k[qa>>2]|0;if(!Cb){mc=jc;nc=ic;oc=Bb;pc=Db;va=132}else{j0a(Cb);mc=jc;nc=ic;oc=Bb;pc=Db;va=132}}else if((va|0)==126){Db=Hc()|0;Bb=M;Cb=k[Ab>>2]|0;if(Cb)j0a(Cb);Cb=k[zb>>2]|0;if(!Cb){mc=lc;nc=kc;oc=Bb;pc=Db;va=132}else{j0a(Cb);mc=lc;nc=kc;oc=Bb;pc=Db;va=132}}else if((va|0)==131){Db=Hc()|0;mc=Lb;nc=Kb;oc=M;pc=Db;va=132}else if((va|0)==133){Db=Hc()|0;Bb=M;K2a(O);qc=Db;rc=Bb;sc=Mb;tc=Nb}else if((va|0)==150){Bb=Hc()|0;Db=M;K2a(Q);qc=Bb;rc=Db;sc=Rb;tc=Sb}else if((va|0)==151){Db=Hc()|0;uc=Db;vc=M;wc=Wb;xc=Vb;yc=Ub;va=171}else if((va|0)==152){Db=Hc()|0;Bb=M;K2a(R);uc=Db;vc=Bb;wc=_b;xc=Zb;yc=Yb;va=171}else if((va|0)==153){Bb=Hc()|0;Db=M;K2a(S);uc=Bb;vc=Db;wc=bc;xc=ac;yc=$b;va=171}if((va|0)==132){qc=pc;rc=oc;sc=nc;tc=mc}else if((va|0)==171)if(!wc){qc=uc;rc=vc;sc=yc;tc=xc}else{j0a(wc);qc=uc;rc=vc;sc=yc;tc=xc}if(tc){ha=qc;ia=rc;break a}j0a(sc);ha=qc;ia=rc;break a}while(0);f:do if((ub|0)!=(vb|0)){Db=wb+2|0;Bb=(wb+1|0)>>>0<16;Cb=wb+129&255;yb=n+8|0;xb=n+40|0;ua=n+48|0;Da=n+56|0;ta=n+60|0;ra=n+72|0;sa=m+8|0;ja=m+40|0;oa=m+48|0;ka=m+56|0;ga=m+60|0;la=m+72|0;fa=j+8|0;Hb=j+40|0;Jb=j+48|0;Fb=j+56|0;Ib=j+60|0;Ob=j+72|0;Pb=h+8|0;Xb=h+12|0;hc=h+40|0;Qb=h+48|0;zc=h+56|0;Ac=h+60|0;Bc=h+72|0;Cc=W+12|0;Dc=W+16|0;Ec=W+8|0;Fc=tb+2+wb|0;Gc=Z+12|0;Ic=Z+16|0;Jc=Z+8|0;Kc=w+8|0;Lc=w+40|0;Mc=w+48|0;Nc=w+56|0;Oc=w+60|0;Pc=w+72|0;Qc=0;Rc=0;Tc=0;while(1){Uc=k[z>>2]|0;Vc=k[Uc+(Qc<<3)>>2]|0;Wc=k[Uc+(Qc<<3)+4>>2]|0;Uc=(Wc|0)==0;if(!Uc)h0a(Wc);x=0;fb(140,U|0,265704,27);Xc=x;x=0;if(Xc&1){Yc=Wc;Zc=Uc;va=244;break}x=0;pa(57,(Vc|0)!=0|0,U|0,229,264836,265553);Xc=x;x=0;if(Xc&1){_c=Wc;$c=Uc;va=247;break}K2a(U);x=0;Xc=Ba(k[(k[Vc>>2]|0)+36>>2]|0,Vc|0)|0;Vc=x;x=0;if(Vc&1){Yc=Wc;Zc=Uc;va=244;break}if(e|Xc^1)ad=Tc;else{Xc=k[a>>2]|0;x=0;fb(140,o|0,295946,34);Vc=x;x=0;if(Vc&1){Yc=Wc;Zc=Uc;va=244;break}x=0;pa(51,Bb|0,o|0,210,295981,296025);Vc=x;x=0;if(Vc&1){bd=Wc;cd=Uc;va=190;break}K2a(o);x=0;Vc=Ta(594,Xc|0,Cb|0)|0;Xc=x;x=0;if(Xc&1){Yc=Wc;Zc=Uc;va=244;break}k[n>>2]=1;k[yb>>2]=129;k[xb>>2]=1;Xc=ua;k[Xc>>2]=-1;k[Xc+4>>2]=-1;k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;k[Da+12>>2]=0;k[Da+16>>2]=0;x=0;Ta(539,Vc+48|0,n|0)|0;Vc=x;x=0;if(Vc&1){dd=Wc;ed=Uc;va=197;break}Vc=k[ra>>2]|0;if(Vc)j0a(Vc);Vc=k[ta>>2]|0;if(Vc)j0a(Vc);Vc=k[a>>2]|0;k[m>>2]=1;k[sa>>2]=3;k[ja>>2]=1;Xc=oa;k[Xc>>2]=-1;k[Xc+4>>2]=-1;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[ka+16>>2]=0;x=0;Ta(539,Vc+48|0,m|0)|0;Vc=x;x=0;if(Vc&1){fd=Wc;gd=Uc;va=206;break}Vc=k[la>>2]|0;if(Vc)j0a(Vc);Vc=k[ga>>2]|0;if(Vc)j0a(Vc);Vc=k[a>>2]|0;Xc=Db-Tc|0;x=0;fb(140,l|0,295946,34);hd=x;x=0;if(hd&1){Yc=Wc;Zc=Uc;va=244;break}x=0;pa(51,(Xc+-1|0)>>>0<16|0,l|0,210,295981,296025);hd=x;x=0;if(hd&1){id=Wc;jd=Uc;va=212;break}K2a(l);x=0;Ta(594,Vc|0,Xc+127&255|0)|0;Xc=x;x=0;if(Xc&1){Yc=Wc;Zc=Uc;va=244;break}Xc=k[a>>2]|0;k[j>>2]=1;k[fa>>2]=82;k[Hb>>2]=1;Vc=Jb;k[Vc>>2]=-1;k[Vc+4>>2]=-1;k[Fb>>2]=0;k[Fb+4>>2]=0;k[Fb+8>>2]=0;k[Fb+12>>2]=0;k[Fb+16>>2]=0;x=0;Ta(539,Xc+48|0,j|0)|0;Xc=x;x=0;if(Xc&1){kd=Wc;ld=Uc;va=219;break}Xc=k[Ob>>2]|0;if(Xc)j0a(Xc);Xc=k[Ib>>2]|0;if(Xc)j0a(Xc);Xc=k[(k[b>>2]|0)+(Qc<<3)>>2]|0;x=0;Vc=Ba(k[k[Xc>>2]>>2]|0,Xc|0)|0;Xc=x;x=0;if(Xc&1){Yc=Wc;Zc=Uc;va=244;break}Xc=k[(k[b>>2]|0)+(Qc<<3)>>2]|0;if((Vc|0)==2){Vc=iDa(Xc,168,6640,0)|0;if(!Vc){md=Wc;nd=Uc;va=226;break}hd=k[a>>2]|0;od=i[Vc+24>>0]|0;if(!(od&1))pd=(od&255)>>>1;else pd=k[Vc+28>>2]|0;k[h>>2]=2;k[Pb>>2]=pd;k[Xb>>2]=k[V>>2];k[Xb+4>>2]=k[V+4>>2];k[Xb+8>>2]=k[V+8>>2];k[Xb+12>>2]=k[V+12>>2];k[Xb+16>>2]=k[V+16>>2];k[Xb+20>>2]=k[V+20>>2];k[Xb+24>>2]=k[V+24>>2];k[hc>>2]=1;od=Qb;k[od>>2]=-1;k[od+4>>2]=-1;k[zc>>2]=0;k[zc+4>>2]=0;k[zc+8>>2]=0;k[zc+12>>2]=0;k[zc+16>>2]=0;x=0;Ta(539,hd+48|0,h|0)|0;hd=x;x=0;if(hd&1){qd=Wc;rd=Uc;va=235;break}hd=k[Bc>>2]|0;if(hd)j0a(hd);hd=k[Ac>>2]|0;if(hd)j0a(hd);x=0;fb(247,W|0,256,0);hd=x;x=0;if(hd&1){Yc=Wc;Zc=Uc;va=244;break}x=0;fb(320,a|0,W|0,1);hd=x;x=0;if(hd&1){sd=Wc;td=Uc;va=248;break}k[W>>2]=20456;xh(Cc,k[Dc>>2]|0);hd=k[Ec>>2]|0;if(hd)k0a(hd);x=0;fb(320,a|0,Vc|0,d|0);Vc=x;x=0;if(Vc&1){Yc=Wc;Zc=Uc;va=244;break}}else{x=0;Vc=Ba(k[k[Xc>>2]>>2]|0,Xc|0)|0;Xc=x;x=0;if(Xc&1){Yc=Wc;Zc=Uc;va=244;break}x=0;fb(140,X|0,265732,21);Xc=x;x=0;if(Xc&1){Yc=Wc;Zc=Uc;va=244;break}x=0;pa(57,(Vc|0)==5|0,X|0,248,264836,265553);Vc=x;x=0;if(Vc&1){ud=Wc;vd=Uc;va=282;break}K2a(X);Vc=iDa(k[(k[b>>2]|0)+(Qc<<3)>>2]|0,168,6704,0)|0;if(!Vc){wd=Wc;xd=Uc;va=254;break}x=0;Xc=Ba(k[(k[Vc>>2]|0)+60>>2]|0,Vc|0)|0;hd=x;x=0;if(hd&1){Yc=Wc;Zc=Uc;va=244;break}x=0;fb(338,a|0,Fc-Rc|0,Xc|0);Xc=x;x=0;if(Xc&1){Yc=Wc;Zc=Uc;va=244;break}Xc=k[a>>2]|0;x=0;hd=Ba(k[(k[Vc>>2]|0)+60>>2]|0,Vc|0)|0;od=x;x=0;if(od&1){Yc=Wc;Zc=Uc;va=244;break}x=0;fb(140,q|0,295946,34);od=x;x=0;if(od&1){Yc=Wc;Zc=Uc;va=244;break}x=0;pa(51,hd>>>0<16|0,q|0,210,295981,296025);od=x;x=0;if(od&1){yd=Wc;zd=Uc;va=260;break}K2a(q);x=0;Ta(594,Xc|0,hd+128&255|0)|0;hd=x;x=0;if(hd&1){Yc=Wc;Zc=Uc;va=244;break}k[Y>>2]=k[a>>2];x=0;fb(312,Y|0,Vc|0,1);hd=x;x=0;if(hd&1){Yc=Wc;Zc=Uc;va=244;break}x=0;fb(247,Z|0,256,0);hd=x;x=0;if(hd&1){Yc=Wc;Zc=Uc;va=244;break}x=0;fb(320,a|0,Z|0,1);hd=x;x=0;if(hd&1){Ad=Wc;Bd=Uc;va=283;break}k[Z>>2]=20456;xh(Gc,k[Ic>>2]|0);hd=k[Jc>>2]|0;if(hd)k0a(hd);hd=k[a>>2]|0;x=0;Xc=Ba(k[(k[Vc>>2]|0)+60>>2]|0,Vc|0)|0;od=x;x=0;if(od&1){Yc=Wc;Zc=Uc;va=244;break}x=0;fb(140,v|0,296239,35);od=x;x=0;if(od&1){Yc=Wc;Zc=Uc;va=244;break}x=0;pa(51,Xc>>>0<16|0,v|0,217,295981,296275);od=x;x=0;if(od&1){Cd=Wc;Dd=Uc;va=270;break}K2a(v);x=0;od=Ta(594,hd|0,Xc+144&255|0)|0;Xc=x;x=0;if(Xc&1){Yc=Wc;Zc=Uc;va=244;break}k[w>>2]=1;k[Kc>>2]=80;k[Lc>>2]=1;Xc=Mc;k[Xc>>2]=-1;k[Xc+4>>2]=-1;k[Nc>>2]=0;k[Nc+4>>2]=0;k[Nc+8>>2]=0;k[Nc+12>>2]=0;k[Nc+16>>2]=0;x=0;Ta(539,od+48|0,w|0)|0;od=x;x=0;if(od&1){Ed=Wc;Fd=Uc;va=277;break}od=k[Pc>>2]|0;if(od)j0a(od);od=k[Oc>>2]|0;if(od)j0a(od);k[_>>2]=k[a>>2];x=0;fb(319,_|0,Vc|0,d|0);Vc=x;x=0;if(Vc&1){Yc=Wc;Zc=Uc;va=244;break}}ad=Tc+1|0}Vc=k[(k[b>>2]|0)+(Qc<<3)>>2]|0;x=0;od=Ba(k[(k[Vc>>2]|0)+60>>2]|0,Vc|0)|0;Vc=x;x=0;if(Vc&1){Yc=Wc;Zc=Uc;va=244;break}if(!Uc)j0a(Wc);Qc=Qc+1|0;if(Qc>>>0>=(k[ba>>2]|0)-(k[b>>2]|0)>>3>>>0)break f;else{Rc=od+Rc|0;Tc=ad}}switch(va|0){case 190:{Tc=Hc()|0;Rc=M;K2a(o);Gd=cd;Hd=bd;Id=Rc;Jd=Tc;va=246;break}case 197:{Tc=Hc()|0;Rc=M;Qc=k[ra>>2]|0;if(Qc)j0a(Qc);Qc=k[ta>>2]|0;if(!Qc){Gd=ed;Hd=dd;Id=Rc;Jd=Tc;va=246}else{j0a(Qc);Gd=ed;Hd=dd;Id=Rc;Jd=Tc;va=246}break}case 206:{Tc=Hc()|0;Rc=M;Qc=k[la>>2]|0;if(Qc)j0a(Qc);Qc=k[ga>>2]|0;if(!Qc){Gd=gd;Hd=fd;Id=Rc;Jd=Tc;va=246}else{j0a(Qc);Gd=gd;Hd=fd;Id=Rc;Jd=Tc;va=246}break}case 212:{Tc=Hc()|0;Rc=M;K2a(l);Gd=jd;Hd=id;Id=Rc;Jd=Tc;va=246;break}case 219:{Tc=Hc()|0;Rc=M;Qc=k[Ob>>2]|0;if(Qc)j0a(Qc);Qc=k[Ib>>2]|0;if(!Qc){Gd=ld;Hd=kd;Id=Rc;Jd=Tc;va=246}else{j0a(Qc);Gd=ld;Hd=kd;Id=Rc;Jd=Tc;va=246}break}case 226:{x=0;hb(49);x=0;Kd=nd;Ld=md;va=245;break}case 235:{Tc=Hc()|0;Rc=M;Qc=k[Bc>>2]|0;if(Qc)j0a(Qc);Qc=k[Ac>>2]|0;if(!Qc){Gd=rd;Hd=qd;Id=Rc;Jd=Tc;va=246}else{j0a(Qc);Gd=rd;Hd=qd;Id=Rc;Jd=Tc;va=246}break}case 244:{Tc=Hc()|0;Gd=Zc;Hd=Yc;Id=M;Jd=Tc;va=246;break}case 247:{Tc=Hc()|0;Rc=M;K2a(U);Md=Tc;Nd=Rc;Od=_c;Pd=$c;break}case 248:{Rc=Hc()|0;Tc=M;k[W>>2]=20456;xh(Cc,k[Dc>>2]|0);Qc=k[Ec>>2]|0;if(!Qc){Md=Rc;Nd=Tc;Od=sd;Pd=td}else{k0a(Qc);Md=Rc;Nd=Tc;Od=sd;Pd=td}break}case 254:{x=0;hb(49);x=0;Kd=xd;Ld=wd;va=245;break}case 260:{Tc=Hc()|0;Rc=M;K2a(q);Gd=zd;Hd=yd;Id=Rc;Jd=Tc;va=246;break}case 270:{Tc=Hc()|0;Rc=M;K2a(v);Gd=Dd;Hd=Cd;Id=Rc;Jd=Tc;va=246;break}case 277:{Tc=Hc()|0;Rc=M;Qc=k[Pc>>2]|0;if(Qc)j0a(Qc);Qc=k[Oc>>2]|0;if(!Qc){Gd=Fd;Hd=Ed;Id=Rc;Jd=Tc;va=246}else{j0a(Qc);Gd=Fd;Hd=Ed;Id=Rc;Jd=Tc;va=246}break}case 282:{Tc=Hc()|0;Rc=M;K2a(X);Md=Tc;Nd=Rc;Od=ud;Pd=vd;break}case 283:{Rc=Hc()|0;Tc=M;k[Z>>2]=20456;xh(Gc,k[Ic>>2]|0);Qc=k[Jc>>2]|0;if(!Qc){Md=Rc;Nd=Tc;Od=Ad;Pd=Bd}else{k0a(Qc);Md=Rc;Nd=Tc;Od=Ad;Pd=Bd}break}}if((va|0)==245){Tc=Hc()|0;Gd=Kd;Hd=Ld;Id=M;Jd=Tc;va=246}if((va|0)==246){Md=Jd;Nd=Id;Od=Hd;Pd=Gd}if(Pd){ha=Md;ia=Nd;break a}j0a(Od);ha=Md;ia=Nd;break a}while(0);Tc=k[a>>2]|0;Rc=wb+tb|0;Qc=Rc+1|0;x=0;fb(140,p|0,296239,35);Nc=x;x=0;if(!(Nc&1)){x=0;pa(51,Rc>>>0<16|0,p|0,217,295981,296275);Nc=x;x=0;if(Nc&1){Nc=Hc()|0;Mc=M;K2a(p);Ma=Mc;Na=Nc;va=17;break}K2a(p);x=0;Ta(594,Tc|0,Rc+144&255|0)|0;Rc=x;x=0;if(!(Rc&1)?(x=0,xa(822,a|0,Qc|0),Qc=x,x=0,!(Qc&1)):0){Qc=k[z>>2]|0;if(!Qc){r=g;return}Rc=k[c>>2]|0;if((Rc|0)==(Qc|0))Qd=Qc;else{Tc=Rc;while(1){Rc=Tc+-8|0;k[c>>2]=Rc;Nc=k[Tc+-4>>2]|0;if(!Nc)Rd=Rc;else{j0a(Nc);Rd=k[c>>2]|0}if((Rd|0)==(Qc|0))break;else Tc=Rd}Qd=k[z>>2]|0}OBa(Qd);r=g;return}else va=16}else va=16}else va=16;while(0);if((va|0)==16){g=Hc()|0;Ma=M;Na=g;va=17}if((va|0)==17){ha=Na;ia=Ma}Ma=k[z>>2]|0;if(!Ma)Sc(ha|0);ia=k[c>>2]|0;if((ia|0)==(Ma|0))Sd=Ma;else{Na=ia;while(1){ia=Na+-8|0;k[c>>2]=ia;va=k[Na+-4>>2]|0;if(!va)Td=ia;else{j0a(va);Td=k[c>>2]|0}if((Td|0)==(Ma|0))break;else Na=Td}Sd=k[z>>2]|0}OBa(Sd);Sc(ha|0)}function rla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=k[a>>2]|0;c=k[a+4>>2]|0;if((b|0)==(c|0)){d=0;return d|0}else{e=b;f=0}while(1){b=k[e>>2]|0;a=(Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0)+f|0;e=e+8|0;if((e|0)==(c|0)){d=a;break}else f=a}return d|0}function sla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+32|0;e=d+12|0;f=d;q2a(f,270638,45);x=0;pa(57,b>>>0<17|0,f|0,720,264836,265754);g=x;x=0;if(g&1){g=Hc()|0;K2a(f);Sc(g|0)}K2a(f);if(!c){r=d;return}f=(b+-1|0)>>>0<16;g=b+127&255;b=0;while(1){h=k[a>>2]|0;q2a(e,295946,34);x=0;pa(51,f|0,e|0,210,295981,296025);i=x;x=0;if(i&1){j=7;break}K2a(e);Iia(h,g)|0;b=b+1|0;if(b>>>0>=c>>>0){j=4;break}}if((j|0)==4){r=d;return}else if((j|0)==7){j=Hc()|0;K2a(e);Sc(j|0)}}function tla(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0;e=r;r=r+2448|0;f=e+1584|0;g=e+1504|0;h=e+1464|0;j=e+1384|0;l=e+1304|0;m=e+1224|0;n=e+1104|0;o=e+984|0;p=e+904|0;q=e+2360|0;s=e+2348|0;t=e+2336|0;u=e+2324|0;v=e+664|0;w=e+584|0;y=e+504|0;z=e+424|0;A=e+320|0;B=e+1184|0;C=e+1064|0;D=e+2384|0;E=e+2372|0;F=e+864|0;G=e+824|0;H=e+784|0;I=e+744|0;J=e+2312|0;K=e+2300|0;L=e+2288|0;N=e+384|0;O=e+344|0;P=e+2280|0;Q=e+2268|0;R=e+2256|0;S=e+2244|0;T=e+1888|0;U=e+2232|0;V=e+2224|0;W=e+2212|0;X=e+2184|0;Y=e+2416|0;Z=e+2172|0;_=e+2144|0;$=e+2112|0;aa=e+336|0;ba=e+2096|0;ca=e+2084|0;da=e+2072|0;ea=e+2060|0;fa=e+2048|0;ga=e+2044|0;ha=e+2040|0;ia=e+280|0;ja=e+2008|0;ka=e+1996|0;la=e+1992|0;ma=e+240|0;na=e+120|0;oa=e+40|0;qa=e+1988|0;ra=e+1976|0;sa=e+1960|0;ta=e+200|0;ua=e+1944|0;va=e+1932|0;wa=e+1920|0;ya=e+1876|0;za=e+1864|0;Aa=e+1844|0;Ca=e+1832|0;Da=e+1820|0;Ea=e+1808|0;Ga=e+1796|0;Ha=e+1784|0;Ia=e;Ja=e+1756|0;Ka=e+1744|0;La=e+1728|0;Ma=e+1856|0;Na=e+1712|0;Oa=e+1700|0;Pa=e+1688|0;Qa=e+1676|0;Ra=e+1664|0;if(!(d|(cg[k[(k[b>>2]|0)+20>>2]&1023](b,c)|0)^1)){r=e;return}Sa=Vf[k[k[b>>2]>>2]&1023](b)|0;Ua=Vf[k[k[c>>2]>>2]&1023](c)|0;a:do switch(Sa|0){case 6:{Va=iDa(b,168,6656,0)|0;if(!Va)BBa();if(!Ua){Wa=iDa(c,168,6592,0)|0;if(!Wa)BBa();Xa=k[a>>2]|0;k[C>>2]=1;k[C+32>>2]=1;Ya=Va+24|0;Za=256-(k[Ya>>2]<<3)|0;_a=g;$a=C;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));if((Za|0)<0){D0a(f,265832);k[f>>2]=47544;x=0;nb(96,f|0,265867,265975,711);x=0;bb=Hc()|0;nCa(f);Sc(bb|0)}HB(g,Za,((Za|0)<0)<<31>>31);_a=B;$a=g;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));k[f>>2]=2;_a=f+8|0;$a=B;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));Za=f+48|0;k[Za>>2]=-1;k[Za+4>>2]=-1;Za=f+56|0;bb=f+60|0;cb=f+72|0;k[Za>>2]=0;k[Za+4>>2]=0;k[Za+8>>2]=0;k[Za+12>>2]=0;k[Za+16>>2]=0;Za=Xa+48|0;x=0;Ta(539,Za|0,f|0)|0;db=x;x=0;if(db&1){db=Hc()|0;eb=k[cb>>2]|0;if(eb)j0a(eb);eb=k[bb>>2]|0;if(!eb)Sc(db|0);j0a(eb);Sc(db|0)}db=k[cb>>2]|0;if(db)j0a(db);db=k[bb>>2]|0;if(db)j0a(db);k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;db=f+48|0;k[db>>2]=-1;k[db+4>>2]=-1;db=f+56|0;bb=f+60|0;cb=f+72|0;k[db>>2]=0;k[db+4>>2]=0;k[db+8>>2]=0;k[db+12>>2]=0;k[db+16>>2]=0;x=0;Ta(539,Za|0,f|0)|0;db=x;x=0;if(db&1){db=Hc()|0;eb=k[cb>>2]|0;if(eb)j0a(eb);eb=k[bb>>2]|0;if(!eb)Sc(db|0);j0a(eb);Sc(db|0)}db=k[cb>>2]|0;if(db)j0a(db);db=k[bb>>2]|0;if(db)j0a(db);k[f>>2]=1;k[f+8>>2]=4;k[f+40>>2]=1;db=f+48|0;k[db>>2]=-1;k[db+4>>2]=-1;db=f+56|0;bb=f+60|0;cb=f+72|0;k[db>>2]=0;k[db+4>>2]=0;k[db+8>>2]=0;k[db+12>>2]=0;k[db+16>>2]=0;x=0;Ta(539,Za|0,f|0)|0;Za=x;x=0;if(Za&1){Za=Hc()|0;db=k[cb>>2]|0;if(db)j0a(db);db=k[bb>>2]|0;if(!db)Sc(Za|0);j0a(db);Sc(Za|0)}Za=k[cb>>2]|0;if(Za)j0a(Za);Za=k[bb>>2]|0;if(Za)j0a(Za);Za=k[Ya>>2]<<3;if((k[Wa+24>>2]|0)>=(Za|0)){r=e;return}n8(D,Za,0);x=0;nb(137,a|0,D|0,c|0,d|0);Za=x;x=0;if(Za&1){Za=Hc()|0;bb=M;k[D>>2]=20456;xh(D+12|0,k[D+16>>2]|0);cb=k[D+8>>2]|0;if(!cb){gb=Za;ib=bb;Sc(gb|0)}k0a(cb);gb=Za;ib=bb;Sc(gb|0)}else{k[D>>2]=20456;xh(D+12|0,k[D+16>>2]|0);bb=k[D+8>>2]|0;if(!bb){r=e;return}k0a(bb);r=e;return}}q2a(E,266037,34);x=0;pa(57,(Ua|0)==6|0,E|0,335,264836,266072);bb=x;x=0;if(bb&1){bb=Hc()|0;Za=M;K2a(E);gb=bb;ib=Za;Sc(gb|0)}K2a(E);Za=iDa(c,168,6656,0)|0;if(!Za)BBa();bb=k[Va+24>>2]|0;if(!((k[Za+24>>2]|0)>(bb|0)|d)){r=e;return}Za=k[a>>2]|0;if(!bb){k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;cb=f+48|0;k[cb>>2]=-1;k[cb+4>>2]=-1;cb=f+56|0;db=f+60|0;eb=f+72|0;jb=Za+48|0;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[cb+16>>2]=0;x=0;Ta(539,jb|0,f|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;kb=k[eb>>2]|0;if(kb)j0a(kb);kb=k[db>>2]|0;if(!kb)Sc(cb|0);j0a(kb);Sc(cb|0)}cb=k[eb>>2]|0;if(cb)j0a(cb);cb=k[db>>2]|0;if(cb)j0a(cb);k[F>>2]=0;k[F+32>>2]=1;k[f>>2]=2;_a=f+8|0;$a=F;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));Va=f+48|0;k[Va>>2]=-1;k[Va+4>>2]=-1;Va=f+56|0;Wa=f+60|0;Ya=f+72|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,jb|0,f|0)|0;Va=x;x=0;if(Va&1){Va=Hc()|0;Xa=k[Ya>>2]|0;if(Xa)j0a(Xa);Xa=k[Wa>>2]|0;if(!Xa)Sc(Va|0);j0a(Xa);Sc(Va|0)}else{Va=k[Ya>>2]|0;if(Va)j0a(Va);Va=k[Wa>>2]|0;if(Va)j0a(Va);r=e;return}}k[I>>2]=1;k[I+32>>2]=1;Va=256-(bb<<3)|0;_a=g;$a=I;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));if((Va|0)<0){D0a(f,265832);k[f>>2]=47544;x=0;nb(96,f|0,265867,265975,711);x=0;bb=Hc()|0;nCa(f);Sc(bb|0)}HB(g,Va,((Va|0)<0)<<31>>31);_a=H;$a=g;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));k[g>>2]=0;k[g+32>>2]=1;k[f>>2]=1;JB(g,H,f);_a=G;$a=g;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));k[f>>2]=2;_a=f+8|0;$a=G;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));Va=f+48|0;k[Va>>2]=-1;k[Va+4>>2]=-1;Va=f+56|0;bb=f+60|0;jb=f+72|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,Za+48|0,f|0)|0;Va=x;x=0;if(Va&1){Va=Hc()|0;Wa=k[jb>>2]|0;if(Wa)j0a(Wa);Wa=k[bb>>2]|0;if(!Wa)Sc(Va|0);j0a(Wa);Sc(Va|0)}Va=k[jb>>2]|0;if(Va)j0a(Va);Va=k[bb>>2]|0;if(Va)j0a(Va);Va=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=25;k[f+40>>2]=1;bb=f+48|0;k[bb>>2]=-1;k[bb+4>>2]=-1;bb=f+56|0;jb=f+60|0;Wa=f+72|0;Ya=Va+48|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[bb+16>>2]=0;x=0;Ta(539,Ya|0,f|0)|0;bb=x;x=0;if(bb&1){bb=Hc()|0;Va=k[Wa>>2]|0;if(Va)j0a(Va);Va=k[jb>>2]|0;if(!Va)Sc(bb|0);j0a(Va);Sc(bb|0)}bb=k[Wa>>2]|0;if(bb)j0a(bb);bb=k[jb>>2]|0;if(bb)j0a(bb);k[f>>2]=1;k[f+8>>2]=22;k[f+40>>2]=1;bb=f+48|0;k[bb>>2]=-1;k[bb+4>>2]=-1;bb=f+56|0;jb=f+60|0;Wa=f+72|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[bb+16>>2]=0;x=0;Ta(539,Ya|0,f|0)|0;Ya=x;x=0;if(Ya&1){Ya=Hc()|0;bb=k[Wa>>2]|0;if(bb)j0a(bb);bb=k[jb>>2]|0;if(!bb)Sc(Ya|0);j0a(bb);Sc(Ya|0)}else{Ya=k[Wa>>2]|0;if(Ya)j0a(Ya);Ya=k[jb>>2]|0;if(Ya)j0a(Ya);r=e;return}break}case 10:{q2a(J,329672,0);x=0;pa(57,(Ua|0)==0|(Ua|0)==10|0,J|0,351,264836,266072);Ya=x;x=0;if(Ya&1){Ya=Hc()|0;jb=M;K2a(J);gb=Ya;ib=jb;Sc(gb|0)}else{K2a(J);r=e;return}break}case 4:{q2a(K,273480,37);x=0;pa(57,0,K|0,354,264836,266072);jb=x;x=0;if(!(jb&1)){K2a(K);break a}jb=Hc()|0;Ya=M;K2a(K);gb=jb;ib=Ya;Sc(gb|0);break}case 1:case 7:case 0:break;case 2:{Ya=iDa(b,168,6640,0)|0;if(!Ya)BBa();jb=i[Ya+24>>0]|0;Wa=(jb&1)==0;bb=Wa?Ya+25|0:k[Ya+32>>2]|0;Va=bb;Xa=Wa?(jb&255)>>>1:k[Ya+28>>2]|0;switch(Ua|0){case 6:{q2a(W,329672,0);x=0;pa(57,Xa>>>0<33|0,W|0,423,264836,266072);Ya=x;x=0;if(Ya&1){Ya=Hc()|0;jb=M;K2a(W);gb=Ya;ib=jb;Sc(gb|0)}K2a(W);jb=k[a>>2]|0;if((Xa|0)!=32){_a=Y;ab=_a+32|0;do{i[_a>>0]=0;_a=_a+1|0}while((_a|0)<(ab|0));Za=Xa>>>0>32?32:Xa;if(Za){Ya=0;do{i[Y+Ya>>0]=i[bb+Ya>>0]|0;Ya=Ya+1|0}while(Ya>>>0>>0)}}else{_a=Y;$a=bb;ab=_a+32|0;do{i[_a>>0]=i[$a>>0]|0;_a=_a+1|0;$a=$a+1|0}while((_a|0)<(ab|0))}bb=Y+32|0;Za=g+32|0;Ya=f+32|0;Wa=f+4|0;cb=f+32|0;db=g+4|0;eb=0;kb=1;lb=Y;while(1){mb=i[lb>>0]|0;k[f>>2]=eb;k[Wa>>2]=k[X>>2];k[Wa+4>>2]=k[X+4>>2];k[Wa+8>>2]=k[X+8>>2];k[Wa+12>>2]=k[X+12>>2];k[Wa+16>>2]=k[X+16>>2];k[Wa+20>>2]=k[X+20>>2];k[Wa+24>>2]=k[X+24>>2];k[cb>>2]=kb;HB(f,8,0);_a=h;$a=f;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));k[g>>2]=0;k[Za>>2]=1;k[f>>2]=mb&255;k[Ya>>2]=1;YB(g,h,f);ob=k[g>>2]|0;k[X>>2]=k[db>>2];k[X+4>>2]=k[db+4>>2];k[X+8>>2]=k[db+8>>2];k[X+12>>2]=k[db+12>>2];k[X+16>>2]=k[db+16>>2];k[X+20>>2]=k[db+20>>2];k[X+24>>2]=k[db+24>>2];pb=k[Za>>2]|0;lb=lb+1|0;if((lb|0)==(bb|0)){qb=ob;rb=pb;break}else{eb=ob;kb=pb}}k[f>>2]=2;k[f+8>>2]=qb;kb=f+12|0;k[kb>>2]=k[X>>2];k[kb+4>>2]=k[X+4>>2];k[kb+8>>2]=k[X+8>>2];k[kb+12>>2]=k[X+12>>2];k[kb+16>>2]=k[X+16>>2];k[kb+20>>2]=k[X+20>>2];k[kb+24>>2]=k[X+24>>2];k[f+40>>2]=rb;kb=f+48|0;k[kb>>2]=-1;k[kb+4>>2]=-1;kb=f+56|0;eb=f+60|0;bb=f+72|0;k[kb>>2]=0;k[kb+4>>2]=0;k[kb+8>>2]=0;k[kb+12>>2]=0;k[kb+16>>2]=0;x=0;Ta(539,jb+48|0,f|0)|0;kb=x;x=0;if(kb&1){kb=Hc()|0;lb=k[bb>>2]|0;if(lb)j0a(lb);lb=k[eb>>2]|0;if(!lb)Sc(kb|0);j0a(lb);Sc(kb|0)}else{kb=k[bb>>2]|0;if(kb)j0a(kb);kb=k[eb>>2]|0;if(kb)j0a(kb);r=e;return}break}case 5:{kb=iDa(c,168,6704,0)|0;if(!kb)BBa();eb=(k[kb+32>>2]|0)!=0;q2a(Z,329672,0);x=0;pa(57,eb|0,Z|0,429,264836,266072);eb=x;x=0;if(eb&1){eb=Hc()|0;kb=M;K2a(Z);gb=eb;ib=kb;Sc(gb|0)}K2a(Z);kb=k[a>>2]|0;k[f>>2]=2;k[f+8>>2]=Xa+63&-32;k[f+40>>2]=1;eb=f+48|0;k[eb>>2]=-1;k[eb+4>>2]=-1;eb=f+56|0;bb=f+60|0;lb=f+72|0;k[eb>>2]=0;k[eb+4>>2]=0;k[eb+8>>2]=0;k[eb+12>>2]=0;k[eb+16>>2]=0;x=0;Ta(539,kb+48|0,f|0)|0;kb=x;x=0;if(kb&1){kb=Hc()|0;eb=k[lb>>2]|0;if(eb)j0a(eb);eb=k[bb>>2]|0;if(!eb)Sc(kb|0);j0a(eb);Sc(kb|0)}kb=k[lb>>2]|0;if(kb)j0a(kb);kb=k[bb>>2]|0;if(kb)j0a(kb);gla(a);kb=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=128;k[f+40>>2]=1;bb=f+48|0;k[bb>>2]=-1;k[bb+4>>2]=-1;bb=f+56|0;lb=f+60|0;eb=f+72|0;Za=kb+48|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[bb+16>>2]=0;x=0;Ta(539,Za|0,f|0)|0;bb=x;x=0;if(bb&1){bb=Hc()|0;kb=k[eb>>2]|0;if(kb)j0a(kb);kb=k[lb>>2]|0;if(!kb)Sc(bb|0);j0a(kb);Sc(bb|0)}bb=k[eb>>2]|0;if(bb)j0a(bb);bb=k[lb>>2]|0;if(bb)j0a(bb);k[f>>2]=2;k[f+8>>2]=Xa;bb=f+12|0;k[bb>>2]=k[_>>2];k[bb+4>>2]=k[_+4>>2];k[bb+8>>2]=k[_+8>>2];k[bb+12>>2]=k[_+12>>2];k[bb+16>>2]=k[_+16>>2];k[bb+20>>2]=k[_+20>>2];k[bb+24>>2]=k[_+24>>2];k[f+40>>2]=1;bb=f+48|0;k[bb>>2]=-1;k[bb+4>>2]=-1;bb=f+56|0;lb=f+60|0;eb=f+72|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[bb+16>>2]=0;x=0;Ta(539,Za|0,f|0)|0;Za=x;x=0;if(Za&1){Za=Hc()|0;bb=k[eb>>2]|0;if(bb)j0a(bb);bb=k[lb>>2]|0;if(!bb)Sc(Za|0);j0a(bb);Sc(Za|0)}Za=k[eb>>2]|0;if(Za)j0a(Za);Za=k[lb>>2]|0;if(Za)j0a(Za);n8($,256,0);x=0;fb(320,a|0,$|0,1);Za=x;x=0;if(Za&1){Za=Hc()|0;lb=M;k[$>>2]=20456;xh($+12|0,k[$+16>>2]|0);eb=k[$+8>>2]|0;if(!eb){gb=Za;ib=lb;Sc(gb|0)}k0a(eb);gb=Za;ib=lb;Sc(gb|0)}else{k[$>>2]=20456;xh($+12|0,k[$+16>>2]|0);lb=k[$+8>>2]|0;if(lb)k0a(lb);k[aa>>2]=Va;k[aa+4>>2]=Xa;k[f>>2]=k[aa>>2];k[f+4>>2]=k[aa+4>>2];pla(a,f);r=e;return}break}default:{jg[k[(k[c>>2]|0)+76>>2]&511](da,c,0);x=0;lb=Fa(86,da|0,0,266277)|0;Za=x;x=0;if(Za&1){Za=Hc()|0;sb=Za;tb=M}else{k[ca>>2]=k[lb>>2];k[ca+4>>2]=k[lb+4>>2];k[ca+8>>2]=k[lb+8>>2];k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;x=0;lb=Ta(484,ca|0,266320)|0;Za=x;x=0;do if(Za&1){eb=Hc()|0;ub=eb;vb=M}else{k[ba>>2]=k[lb>>2];k[ba+4>>2]=k[lb+4>>2];k[ba+8>>2]=k[lb+8>>2];k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;x=0;pa(57,0,ba|0,444,264836,266072);eb=x;x=0;if(eb&1){eb=Hc()|0;bb=M;K2a(ba);ub=eb;vb=bb;break}K2a(ba);K2a(ca);K2a(da);r=e;return}while(0);K2a(ca);sb=ub;tb=vb}K2a(da);gb=sb;ib=tb;Sc(gb|0)}}break}case 5:{q2a(ea,329672,0);x=0;pa(57,(Ua|0)==5|0,ea|0,449,264836,266072);lb=x;x=0;if(lb&1){lb=Hc()|0;Za=M;K2a(ea);gb=lb;ib=Za;Sc(gb|0)}K2a(ea);Za=iDa(b,168,6704,0)|0;if(!Za)BBa();lb=iDa(c,168,6704,0)|0;if(!lb)BBa();switch(k[lb+24>>2]|0){case 0:{if(!(i[lb+28>>0]|0))if((k[Za+32>>2]|0)!=0?(k[lb+32>>2]|0)!=0:0)wb=275;else xb=0;else wb=275;if((wb|0)==275)xb=(k[Za+24>>2]|0)==0;q2a(fa,266332,35);x=0;pa(57,xb|0,fa|0,460,264836,266072);Xa=x;x=0;if(Xa&1){Xa=Hc()|0;Va=M;K2a(fa);gb=Xa;ib=Va;Sc(gb|0)}else{K2a(fa);r=e;return}break}case 2:{Va=Za+24|0;if((k[Va>>2]|0)==2){r=e;return}Xa=Vf[k[(k[Za>>2]|0)+60>>2]&1023](Za)|0;k[ga>>2]=k[a>>2];yia(ga,Za,0);jb=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=128;k[f+40>>2]=1;bb=f+48|0;k[bb>>2]=-1;k[bb+4>>2]=-1;bb=f+56|0;eb=f+60|0;kb=f+72|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[bb+16>>2]=0;x=0;Ta(539,jb+48|0,f|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;bb=k[kb>>2]|0;if(bb)j0a(bb);bb=k[eb>>2]|0;if(!bb)Sc(jb|0);j0a(bb);Sc(jb|0)}jb=k[kb>>2]|0;if(jb)j0a(jb);jb=k[eb>>2]|0;if(jb)j0a(jb);k[ha>>2]=k[a>>2];zia(ha,lb,1);do if(Vf[k[(k[lb>>2]|0)+36>>2]&1023](lb)|0){jb=k[a>>2]|0;k[ia>>2]=32;k[ia+32>>2]=1;k[f>>2]=2;_a=f+8|0;$a=ia;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));mb=f+48|0;k[mb>>2]=-1;k[mb+4>>2]=-1;mb=f+56|0;eb=f+60|0;kb=f+72|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;mb=jb+48|0;x=0;Ta(539,mb|0,f|0)|0;bb=x;x=0;if(bb&1){bb=Hc()|0;db=k[kb>>2]|0;if(db)j0a(db);db=k[eb>>2]|0;if(!db)Sc(bb|0);j0a(db);Sc(bb|0)}bb=k[kb>>2]|0;if(bb)j0a(bb);bb=k[eb>>2]|0;if(bb)j0a(bb);k[f>>2]=1;k[f+8>>2]=1;k[f+40>>2]=1;bb=f+48|0;k[bb>>2]=-1;k[bb+4>>2]=-1;bb=f+56|0;eb=f+60|0;kb=f+72|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[bb+16>>2]=0;x=0;Ta(539,mb|0,f|0)|0;mb=x;x=0;if(!(mb&1)){mb=k[kb>>2]|0;if(mb)j0a(mb);mb=k[eb>>2]|0;if(mb)j0a(mb);break}mb=Hc()|0;bb=k[kb>>2]|0;if(bb)j0a(bb);bb=k[eb>>2]|0;if(!bb)Sc(mb|0);j0a(bb);Sc(mb|0)}while(0);gla(a);mb=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=128;k[f+40>>2]=1;bb=f+48|0;k[bb>>2]=-1;k[bb+4>>2]=-1;bb=f+56|0;eb=f+60|0;kb=f+72|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[bb+16>>2]=0;x=0;Ta(539,mb+48|0,f|0)|0;mb=x;x=0;if(mb&1){mb=Hc()|0;bb=k[kb>>2]|0;if(bb)j0a(bb);bb=k[eb>>2]|0;if(!bb)Sc(mb|0);j0a(bb);Sc(mb|0)}mb=k[kb>>2]|0;if(mb)j0a(mb);mb=k[eb>>2]|0;if(mb)j0a(mb);mb=Xa+2|0;if(Xa>>>0>=4294967294){if(mb){eb=Xa+3|0;kb=0;do{Bla(a,eb);kb=kb+1|0}while((kb|0)!=(mb|0))}}else Cla(a,Xa+3|0);do if(Vf[k[(k[lb>>2]|0)+36>>2]&1023](lb)|0){kb=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=129;k[f+40>>2]=1;eb=f+48|0;k[eb>>2]=-1;k[eb+4>>2]=-1;eb=f+56|0;bb=f+60|0;db=f+72|0;k[eb>>2]=0;k[eb+4>>2]=0;k[eb+8>>2]=0;k[eb+12>>2]=0;k[eb+16>>2]=0;x=0;Ta(539,kb+48|0,f|0)|0;kb=x;x=0;if(kb&1){kb=Hc()|0;eb=k[db>>2]|0;if(eb)j0a(eb);eb=k[bb>>2]|0;if(!eb)Sc(kb|0);j0a(eb);Sc(kb|0)}kb=k[db>>2]|0;if(kb)j0a(kb);kb=k[bb>>2]|0;if(kb)j0a(kb);n8(ja,256,0);x=0;fb(320,a|0,ja|0,1);kb=x;x=0;if(!(kb&1)){k[ja>>2]=20456;xh(ja+12|0,k[ja+16>>2]|0);kb=k[ja+8>>2]|0;if(!kb)break;k0a(kb);break}kb=Hc()|0;bb=M;k[ja>>2]=20456;xh(ja+12|0,k[ja+16>>2]|0);db=k[ja+8>>2]|0;if(!db){gb=kb;ib=bb;Sc(gb|0)}k0a(db);gb=kb;ib=bb;Sc(gb|0)}while(0);bb=lb+36|0;kb=(k[bb>>2]|0)!=0;q2a(f,329672,0);x=0;pa(57,kb|0,f|0,588,285183,276209);kb=x;x=0;if(kb&1){kb=Hc()|0;K2a(f);Sc(kb|0)}K2a(f);kb=k[bb>>2]|0;b:do if(Vf[k[(k[kb>>2]|0)+56>>2]&1023](kb)|0){db=Za+36|0;eb=(k[db>>2]|0)!=0;q2a(f,329672,0);x=0;pa(57,eb|0,f|0,588,285183,276209);eb=x;x=0;if(eb&1){eb=Hc()|0;K2a(f);Sc(eb|0)}K2a(f);eb=k[db>>2]|0;db=Vf[k[(k[eb>>2]|0)+56>>2]&1023](eb)|0;q2a(ka,329672,0);x=0;pa(57,db|0,ka|0,490,264836,266072);db=x;x=0;if(!(db&1)){K2a(ka);sla(a,mb,Xa);k[la>>2]=k[a>>2];Cia(la,Za,1);break}db=Hc()|0;eb=M;K2a(ka);gb=db;ib=eb;Sc(gb|0)}else{eb=k[a>>2]|0;k[ma>>2]=0;k[ma+32>>2]=1;k[f>>2]=2;_a=f+8|0;$a=ma;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));jb=f+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=f+56|0;db=f+60|0;Ya=f+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;jb=eb+48|0;x=0;Ta(539,jb|0,f|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;Wa=k[Ya>>2]|0;if(Wa)j0a(Wa);Wa=k[db>>2]|0;if(!Wa)Sc(cb|0);j0a(Wa);Sc(cb|0)}cb=k[Ya>>2]|0;if(cb)j0a(cb);cb=k[db>>2]|0;if(cb)j0a(cb);k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;cb=f+48|0;k[cb>>2]=-1;k[cb+4>>2]=-1;cb=f+56|0;db=f+60|0;Ya=f+72|0;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[cb+16>>2]=0;x=0;Ta(539,jb|0,f|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;cb=k[Ya>>2]|0;if(cb)j0a(cb);cb=k[db>>2]|0;if(!cb)Sc(jb|0);j0a(cb);Sc(jb|0)}jb=k[Ya>>2]|0;if(jb)j0a(jb);jb=k[db>>2]|0;if(jb)j0a(jb);jb=(k[a>>2]|0)+48|0;db=k[jb>>2]|0;k[jb>>2]=db+1;k[na>>2]=8;k[na+8>>2]=db;k[na+40>>2]=1;db=na+48|0;k[db>>2]=-1;k[db+4>>2]=-1;db=na+56|0;k[db>>2]=0;k[db+4>>2]=0;k[db+8>>2]=0;k[db+12>>2]=0;k[db+16>>2]=0;x=0;Ta(539,(k[a>>2]|0)+48|0,na|0)|0;db=x;x=0;do if(db&1)wb=421;else{jb=k[a>>2]|0;k[z>>2]=1;k[z+8>>2]=130;k[z+40>>2]=1;Ya=z+48|0;k[Ya>>2]=-1;k[Ya+4>>2]=-1;Ya=z+56|0;cb=z+60|0;Wa=z+72|0;pb=jb+48|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[Ya+16>>2]=0;x=0;Ta(539,pb|0,z|0)|0;Ya=x;x=0;if(Ya&1){Ya=Hc()|0;jb=M;ob=k[Wa>>2]|0;if(ob)j0a(ob);ob=k[cb>>2]|0;if(!ob){yb=jb;zb=Ya;wb=422;break}j0a(ob);yb=jb;zb=Ya;wb=422;break}Ya=k[Wa>>2]|0;if(Ya)j0a(Ya);Ya=k[cb>>2]|0;if(Ya)j0a(Ya);k[y>>2]=1;k[y+8>>2]=130;k[y+40>>2]=1;Ya=y+48|0;k[Ya>>2]=-1;k[Ya+4>>2]=-1;Ya=y+56|0;cb=y+60|0;Wa=y+72|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[Ya+16>>2]=0;x=0;Ta(539,pb|0,y|0)|0;pb=x;x=0;if(pb&1){pb=Hc()|0;Ya=M;jb=k[Wa>>2]|0;if(jb)j0a(jb);jb=k[cb>>2]|0;if(!jb){yb=Ya;zb=pb;wb=422;break}j0a(jb);yb=Ya;zb=pb;wb=422;break}pb=k[Wa>>2]|0;if(pb)j0a(pb);pb=k[cb>>2]|0;if(pb)j0a(pb);pb=k[a>>2]|0;k[w>>2]=1;k[w+8>>2]=16;k[w+40>>2]=1;cb=w+48|0;k[cb>>2]=-1;k[cb+4>>2]=-1;cb=w+56|0;Wa=w+60|0;Ya=w+72|0;jb=pb+48|0;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[cb+16>>2]=0;x=0;Ta(539,jb|0,w|0)|0;cb=x;x=0;if(cb&1){cb=Hc()|0;pb=M;ob=k[Ya>>2]|0;if(ob)j0a(ob);ob=k[Wa>>2]|0;if(!ob){yb=pb;zb=cb;wb=422;break}j0a(ob);yb=pb;zb=cb;wb=422;break}cb=k[Ya>>2]|0;if(cb)j0a(cb);cb=k[Wa>>2]|0;if(cb)j0a(cb);k[v>>2]=1;k[v+8>>2]=21;k[v+40>>2]=1;cb=v+48|0;k[cb>>2]=-1;k[cb+4>>2]=-1;cb=v+56|0;Wa=v+60|0;Ya=v+72|0;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[cb+16>>2]=0;x=0;Ta(539,jb|0,v|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;cb=M;pb=k[Ya>>2]|0;if(pb)j0a(pb);pb=k[Wa>>2]|0;if(!pb){yb=cb;zb=jb;wb=422;break}j0a(pb);yb=cb;zb=jb;wb=422;break}jb=k[Ya>>2]|0;if(jb)j0a(jb);jb=k[Wa>>2]|0;if(jb)j0a(jb);x=0;xa(819,oa|0,k[a>>2]|0);jb=x;x=0;if(jb&1){wb=421;break}x=0;fb(338,a|0,Xa+3|0,Xa|0);jb=x;x=0;c:do if(jb&1)wb=423;else{x=0;fb(338,a|0,mb|0,1);Wa=x;x=0;if(Wa&1){wb=423;break}k[qa>>2]=k[a>>2];x=0;fb(318,qa|0,Za|0,0);Wa=x;x=0;if(Wa&1){wb=423;break}do if(!(k[Va>>2]|0)){Wa=k[a>>2]|0;Ya=Za+36|0;cb=k[Ya>>2]|0;x=0;fb(140,u|0,329672,0);pb=x;x=0;if(pb&1){wb=423;break c}x=0;pa(57,(cb|0)!=0|0,u|0,588,285183,276209);cb=x;x=0;if(cb&1){cb=Hc()|0;pb=M;K2a(u);Ab=pb;Bb=cb;wb=424;break c}K2a(u);x=0;fb(317,ra|0,Wa|0,k[Ya>>2]|0);Wa=x;x=0;if(Wa&1){wb=423;break c}k[sa>>2]=-1;k[sa+4>>2]=-1;k[sa+8>>2]=0;Wa=sa+12|0;k[Wa>>2]=0;x=0;fb(122,ra|0,sa|0,1);cb=x;x=0;if(cb&1){cb=Hc()|0;pb=M;ob=k[Wa>>2]|0;if(!ob){Cb=cb;Db=pb;break c}j0a(ob);Cb=cb;Db=pb;break c}else{pb=k[Wa>>2]|0;if(!pb){Eb=Ya;break}j0a(pb);Eb=Ya;break}}else Eb=Za+36|0;while(0);Ya=k[Eb>>2]|0;x=0;fb(140,t|0,329672,0);pb=x;x=0;if(pb&1){wb=423;break}x=0;pa(57,(Ya|0)!=0|0,t|0,588,285183,276209);Ya=x;x=0;if(Ya&1){Ya=Hc()|0;pb=M;K2a(t);Ab=pb;Bb=Ya;wb=424;break}K2a(t);Ya=k[Eb>>2]|0;pb=k[bb>>2]|0;x=0;fb(140,s|0,329672,0);Wa=x;x=0;if(Wa&1){wb=423;break}x=0;pa(57,(pb|0)!=0|0,s|0,588,285183,276209);pb=x;x=0;if(pb&1){pb=Hc()|0;Wa=M;K2a(s);Ab=Wa;Bb=pb;wb=424;break}K2a(s);x=0;nb(137,a|0,Ya|0,k[bb>>2]|0,d|0);Ya=x;x=0;if(Ya&1){wb=423;break}Ya=k[bb>>2]|0;x=0;fb(140,q|0,329672,0);pb=x;x=0;if(pb&1){wb=423;break}x=0;pa(57,(Ya|0)!=0|0,q|0,588,285183,276209);Ya=x;x=0;if(Ya&1){Ya=Hc()|0;pb=M;K2a(q);Ab=pb;Bb=Ya;wb=424;break}K2a(q);x=0;fb(320,a|0,k[bb>>2]|0,1);Ya=x;x=0;if(Ya&1){wb=423;break}Ya=k[a>>2]|0;k[p>>2]=1;k[p+8>>2]=144;k[p+40>>2]=1;pb=p+48|0;k[pb>>2]=-1;k[pb+4>>2]=-1;pb=p+56|0;Wa=p+60|0;cb=p+72|0;ob=Ya+48|0;k[pb>>2]=0;k[pb+4>>2]=0;k[pb+8>>2]=0;k[pb+12>>2]=0;k[pb+16>>2]=0;x=0;Ta(539,ob|0,p|0)|0;pb=x;x=0;if(pb&1){pb=Hc()|0;Ya=M;Fb=k[cb>>2]|0;if(Fb)j0a(Fb);Fb=k[Wa>>2]|0;if(!Fb){Ab=Ya;Bb=pb;wb=424;break}j0a(Fb);Ab=Ya;Bb=pb;wb=424;break}pb=k[cb>>2]|0;if(pb)j0a(pb);pb=k[Wa>>2]|0;if(pb)j0a(pb);k[ta>>2]=1;k[ta+32>>2]=1;k[o>>2]=2;_a=o+8|0;$a=ta;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));pb=o+48|0;k[pb>>2]=-1;k[pb+4>>2]=-1;pb=o+56|0;Wa=o+60|0;cb=o+72|0;k[pb>>2]=0;k[pb+4>>2]=0;k[pb+8>>2]=0;k[pb+12>>2]=0;k[pb+16>>2]=0;x=0;Ta(539,ob|0,o|0)|0;pb=x;x=0;if(pb&1){pb=Hc()|0;Ya=M;Fb=k[cb>>2]|0;if(Fb)j0a(Fb);Fb=k[Wa>>2]|0;if(!Fb){Ab=Ya;Bb=pb;wb=424;break}j0a(Fb);Ab=Ya;Bb=pb;wb=424;break}pb=k[cb>>2]|0;if(pb)j0a(pb);pb=k[Wa>>2]|0;if(pb)j0a(pb);k[n>>2]=1;k[n+8>>2]=1;k[n+40>>2]=1;pb=n+48|0;k[pb>>2]=-1;k[pb+4>>2]=-1;pb=n+56|0;Wa=n+60|0;cb=n+72|0;k[pb>>2]=0;k[pb+4>>2]=0;k[pb+8>>2]=0;k[pb+12>>2]=0;k[pb+16>>2]=0;x=0;Ta(539,ob|0,n|0)|0;pb=x;x=0;if(pb&1){pb=Hc()|0;Ya=M;Fb=k[cb>>2]|0;if(Fb)j0a(Fb);Fb=k[Wa>>2]|0;if(!Fb){Ab=Ya;Bb=pb;wb=424;break}j0a(Fb);Ab=Ya;Bb=pb;wb=424;break}pb=k[cb>>2]|0;if(pb)j0a(pb);pb=k[Wa>>2]|0;if(pb)j0a(pb);pb=k[a>>2]|0;k[m>>2]=1;k[m+8>>2]=144;k[m+40>>2]=1;Wa=m+48|0;k[Wa>>2]=-1;k[Wa+4>>2]=-1;Wa=m+56|0;cb=m+60|0;Ya=m+72|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[Wa+16>>2]=0;x=0;Ta(539,pb+48|0,m|0)|0;pb=x;x=0;if(pb&1){pb=Hc()|0;Wa=M;Fb=k[Ya>>2]|0;if(Fb)j0a(Fb);Fb=k[cb>>2]|0;if(!Fb){Ab=Wa;Bb=pb;wb=424;break}j0a(Fb);Ab=Wa;Bb=pb;wb=424;break}pb=k[Ya>>2]|0;if(pb)j0a(pb);pb=k[cb>>2]|0;if(pb)j0a(pb);x=0;fb(314,l|0,(k[a>>2]|0)+48|0,na|0);pb=x;x=0;if(pb&1){wb=423;break}pb=k[l+72>>2]|0;if(pb)j0a(pb);pb=k[l+60>>2]|0;if(pb)j0a(pb);x=0;Ta(539,(k[a>>2]|0)+48|0,oa|0)|0;pb=x;x=0;if(pb&1){wb=423;break}pb=k[a>>2]|0;k[j>>2]=1;k[j+8>>2]=80;k[j+40>>2]=1;cb=j+48|0;k[cb>>2]=-1;k[cb+4>>2]=-1;cb=j+56|0;Ya=j+60|0;Wa=j+72|0;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[cb+16>>2]=0;x=0;Ta(539,pb+48|0,j|0)|0;pb=x;x=0;if(pb&1){pb=Hc()|0;cb=M;Fb=k[Wa>>2]|0;if(Fb)j0a(Fb);Fb=k[Ya>>2]|0;if(!Fb){Ab=cb;Bb=pb;wb=424;break}j0a(Fb);Ab=cb;Bb=pb;wb=424;break}pb=k[Wa>>2]|0;if(pb)j0a(pb);pb=k[Ya>>2]|0;if(pb)j0a(pb);pb=k[oa+72>>2]|0;if(pb)j0a(pb);pb=k[oa+60>>2]|0;if(pb)j0a(pb);pb=k[na+72>>2]|0;if(pb)j0a(pb);pb=k[na+60>>2]|0;if(pb)j0a(pb);break b}while(0);if((wb|0)==423){jb=Hc()|0;Ab=M;Bb=jb;wb=424}if((wb|0)==424){Cb=Bb;Db=Ab}jb=k[oa+72>>2]|0;if(jb)j0a(jb);jb=k[oa+60>>2]|0;if(!jb){Gb=Cb;Hb=Db;break}j0a(jb);Gb=Cb;Hb=Db}while(0);if((wb|0)==421){db=Hc()|0;yb=M;zb=db;wb=422}if((wb|0)==422){Gb=zb;Hb=yb}db=k[na+72>>2]|0;if(db)j0a(db);db=k[na+60>>2]|0;if(!db){gb=Gb;ib=Hb;Sc(gb|0)}j0a(db);gb=Gb;ib=Hb;Sc(gb|0)}while(0);ula(a,mb);r=e;return}case 1:{if((k[lb+32>>2]|0)!=0?(k[Za+32>>2]|0)!=0:0)Ib=(k[Za+24>>2]|0)==1;else Ib=0;q2a(ua,266368,36);x=0;pa(57,Ib|0,ua|0,527,264836,266072);bb=x;x=0;if(bb&1){bb=Hc()|0;Va=M;K2a(ua);gb=bb;ib=Va;Sc(gb|0)}else{K2a(ua);r=e;return}break}default:{jg[k[(k[b>>2]|0)+76>>2]&511](Aa,b,0);x=0;Va=Fa(86,Aa|0,0,266405)|0;bb=x;x=0;if(bb&1){bb=Hc()|0;Jb=bb;Kb=M}else{k[za>>2]=k[Va>>2];k[za+4>>2]=k[Va+4>>2];k[za+8>>2]=k[Va+8>>2];k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;x=0;Va=Ta(484,za|0,266430)|0;bb=x;x=0;if(bb&1){bb=Hc()|0;Lb=bb;Mb=M}else{k[ya>>2]=k[Va>>2];k[ya+4>>2]=k[Va+4>>2];k[ya+8>>2]=k[Va+8>>2];k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;x=0;fb(k[(k[c>>2]|0)+76>>2]|0,Ca|0,c|0,0);Va=x;x=0;if(Va&1){Va=Hc()|0;Nb=Va;Ob=M}else{Va=i[Ca>>0]|0;bb=(Va&1)==0;x=0;Xa=Fa(88,ya|0,(bb?Ca+1|0:k[Ca+8>>2]|0)|0,(bb?(Va&255)>>>1:k[Ca+4>>2]|0)|0)|0;Va=x;x=0;if(Va&1){Va=Hc()|0;Pb=Va;Qb=M}else{k[wa>>2]=k[Xa>>2];k[wa+4>>2]=k[Xa+4>>2];k[wa+8>>2]=k[Xa+8>>2];k[Xa>>2]=0;k[Xa+4>>2]=0;k[Xa+8>>2]=0;x=0;Xa=Ta(484,wa|0,266320)|0;Va=x;x=0;do if(Va&1){bb=Hc()|0;Rb=bb;Sb=M}else{k[va>>2]=k[Xa>>2];k[va+4>>2]=k[Xa+4>>2];k[va+8>>2]=k[Xa+8>>2];k[Xa>>2]=0;k[Xa+4>>2]=0;k[Xa+8>>2]=0;x=0;pa(57,0,va|0,537,264836,266072);bb=x;x=0;if(bb&1){bb=Hc()|0;kb=M;K2a(va);Rb=bb;Sb=kb;break}K2a(va);K2a(wa);K2a(Ca);K2a(ya);K2a(za);K2a(Aa);r=e;return}while(0);K2a(wa);Pb=Rb;Qb=Sb}K2a(Ca);Nb=Pb;Ob=Qb}K2a(ya);Lb=Nb;Mb=Ob}K2a(za);Jb=Lb;Kb=Mb}K2a(Aa);gb=Jb;ib=Kb;Sc(gb|0)}}break}case 8:{q2a(Da,329672,0);x=0;pa(57,(Ua|0)==8|0,Da|0,543,264836,266072);Xa=x;x=0;if(Xa&1){Xa=Hc()|0;Va=M;K2a(Da);gb=Xa;ib=Va;Sc(gb|0)}K2a(Da);Va=iDa(c,168,6720,0)|0;if(!Va)BBa();Xa=iDa(b,168,6720,0)|0;if(!Xa)BBa();Za=Va+24|0;if((k[Za>>2]|0)==1)Tb=0;else Tb=(k[Xa+24>>2]|0)!=1;q2a(Ea,329672,0);x=0;pa(57,Tb|0,Ea|0,549,264836,266072);lb=x;x=0;if(lb&1){lb=Hc()|0;mb=M;K2a(Ea);gb=lb;ib=mb;Sc(gb|0)}K2a(Ea);switch(k[Za>>2]|0){case 0:{if(!(i[Va+28>>0]|0))Ub=0;else Ub=(k[Xa+24>>2]|0)==0;q2a(Ga,266332,35);x=0;pa(57,Ub|0,Ga|0,558,264836,266072);Za=x;x=0;if(Za&1){Za=Hc()|0;mb=M;K2a(Ga);gb=Za;ib=mb;Sc(gb|0)}else{K2a(Ga);r=e;return}break}case 2:{mb=k[Xa+24>>2]|0;if((mb|0)==2){r=e;return}q2a(Ha,329672,0);x=0;pa(57,(mb|0)==0|0,Ha|0,564,264836,266072);mb=x;x=0;if(mb&1){mb=Hc()|0;Za=M;K2a(Ha);gb=mb;ib=Za;Sc(gb|0)}K2a(Ha);Za=k[a>>2]|0;F9(Ia,Xa);k[f>>2]=2;_a=f+8|0;$a=Ia;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));mb=f+48|0;k[mb>>2]=-1;k[mb+4>>2]=-1;mb=f+56|0;lb=f+60|0;kb=f+72|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;x=0;Ta(539,Za+48|0,f|0)|0;mb=x;x=0;if(mb&1){mb=Hc()|0;bb=k[kb>>2]|0;if(bb)j0a(bb);bb=k[lb>>2]|0;if(!bb)Sc(mb|0);j0a(bb);Sc(mb|0)}mb=k[kb>>2]|0;if(mb)j0a(mb);mb=k[lb>>2]|0;if(mb)j0a(mb);gla(a);mb=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;lb=f+48|0;k[lb>>2]=-1;k[lb+4>>2]=-1;lb=f+56|0;kb=f+60|0;bb=f+72|0;db=mb+48|0;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[lb+16>>2]=0;x=0;Ta(539,db|0,f|0)|0;lb=x;x=0;if(lb&1){lb=Hc()|0;mb=k[bb>>2]|0;if(mb)j0a(mb);mb=k[kb>>2]|0;if(!mb)Sc(lb|0);j0a(mb);Sc(lb|0)}lb=k[bb>>2]|0;if(lb)j0a(lb);lb=k[kb>>2]|0;if(lb)j0a(lb);k[f>>2]=1;k[f+8>>2]=129;k[f+40>>2]=1;lb=f+48|0;k[lb>>2]=-1;k[lb+4>>2]=-1;lb=f+56|0;kb=f+60|0;bb=f+72|0;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[lb+16>>2]=0;x=0;Ta(539,db|0,f|0)|0;db=x;x=0;if(db&1){db=Hc()|0;lb=k[bb>>2]|0;if(lb)j0a(lb);lb=k[kb>>2]|0;if(!lb)Sc(db|0);j0a(lb);Sc(db|0)}db=k[bb>>2]|0;if(db)j0a(db);db=k[kb>>2]|0;if(db)j0a(db);db=j8(Xa,0)|0;kb=k[db>>2]|0;bb=k[db+4>>2]|0;d:do if((kb|0)!=(bb|0)){db=f+8|0;lb=f+48|0;mb=f+56|0;eb=f+60|0;jb=f+72|0;pb=f+8|0;Ya=f+40|0;Wa=f+48|0;cb=f+56|0;Fb=f+60|0;Vb=f+72|0;Wb=f+8|0;Xb=f+40|0;Yb=f+48|0;Zb=f+56|0;_b=f+60|0;$b=f+72|0;ac=f+8|0;bc=f+12|0;cc=f+40|0;dc=f+48|0;ec=f+56|0;fc=f+60|0;gc=f+72|0;hc=La+4|0;ic=La+8|0;jc=La+12|0;kc=Ma+4|0;lc=kb;while(1){mc=lc+12|0;nc=k[mc>>2]|0;if(Vf[k[(k[nc>>2]|0)+52>>2]&1023](nc)|0){nc=N9(Xa,lc)|0;oc=k[a>>2]|0;k[f>>2]=2;_a=db;$a=nc;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));pc=lb;k[pc>>2]=-1;k[pc+4>>2]=-1;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;pc=oc+48|0;x=0;Ta(539,pc|0,f|0)|0;qc=x;x=0;if(qc&1){wb=609;break}qc=k[jb>>2]|0;if(qc)j0a(qc);qc=k[eb>>2]|0;if(qc)j0a(qc);k[f>>2]=1;k[pb>>2]=130;k[Ya>>2]=1;qc=Wa;k[qc>>2]=-1;k[qc+4>>2]=-1;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[cb+16>>2]=0;x=0;Ta(539,pc|0,f|0)|0;qc=x;x=0;if(qc&1){wb=619;break}qc=k[Vb>>2]|0;if(qc)j0a(qc);qc=k[Fb>>2]|0;if(qc)j0a(qc);k[f>>2]=1;k[Wb>>2]=1;k[Xb>>2]=1;qc=Yb;k[qc>>2]=-1;k[qc+4>>2]=-1;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,pc|0,f|0)|0;pc=x;x=0;if(pc&1){wb=629;break}pc=k[$b>>2]|0;if(pc)j0a(pc);pc=k[_b>>2]|0;if(pc)j0a(pc);pc=k[a>>2]|0;qc=k[nc+40>>2]|0;k[f>>2]=2;k[ac>>2]=qc;k[bc>>2]=k[Ja>>2];k[bc+4>>2]=k[Ja+4>>2];k[bc+8>>2]=k[Ja+8>>2];k[bc+12>>2]=k[Ja+12>>2];k[bc+16>>2]=k[Ja+16>>2];k[bc+20>>2]=k[Ja+20>>2];k[bc+24>>2]=k[Ja+24>>2];k[cc>>2]=1;qc=dc;k[qc>>2]=-1;k[qc+4>>2]=-1;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,pc+48|0,f|0)|0;pc=x;x=0;if(pc&1){wb=639;break}pc=k[gc>>2]|0;if(pc)j0a(pc);pc=k[fc>>2]|0;if(pc)j0a(pc);$ia(Ka,k[a>>2]|0,k[mc>>2]|0);k[La>>2]=-1;k[hc>>2]=-1;k[ic>>2]=0;k[jc>>2]=0;x=0;fb(122,Ka|0,La|0,1);pc=x;x=0;if(pc&1){wb=655;break}pc=k[jc>>2]|0;if(pc)j0a(pc);uja(Ma,j8(Va,0)|0,lc);pc=k[Ma>>2]|0;x=0;fb(140,Na|0,266435,32);qc=x;x=0;if(qc&1){wb=657;break}x=0;pa(57,(pc|0)!=0|0,Na|0,579,264836,266072);qc=x;x=0;if(qc&1){wb=658;break}K2a(Na);x=0;nb(137,a|0,k[mc>>2]|0,pc|0,1);qc=x;x=0;if(qc&1){wb=657;break}x=0;fb(320,a|0,pc|0,1);pc=x;x=0;if(pc&1){wb=657;break}pc=k[kc>>2]|0;if(pc)j0a(pc)}lc=lc+24|0;if((lc|0)==(bb|0))break d}if((wb|0)==609){lc=Hc()|0;ic=k[jb>>2]|0;if(ic)j0a(ic);ic=k[eb>>2]|0;if(!ic)Sc(lc|0);j0a(ic);Sc(lc|0)}else if((wb|0)==619){lc=Hc()|0;ic=k[Vb>>2]|0;if(ic)j0a(ic);ic=k[Fb>>2]|0;if(!ic)Sc(lc|0);j0a(ic);Sc(lc|0)}else if((wb|0)==629){lc=Hc()|0;ic=k[$b>>2]|0;if(ic)j0a(ic);ic=k[_b>>2]|0;if(!ic)Sc(lc|0);j0a(ic);Sc(lc|0)}else if((wb|0)==639){lc=Hc()|0;ic=k[gc>>2]|0;if(ic)j0a(ic);ic=k[fc>>2]|0;if(!ic)Sc(lc|0);j0a(ic);Sc(lc|0)}else if((wb|0)==655){lc=Hc()|0;ic=M;hc=k[jc>>2]|0;if(!hc){gb=lc;ib=ic;Sc(gb|0)}j0a(hc);gb=lc;ib=ic;Sc(gb|0)}else if((wb|0)==657){ic=Hc()|0;rc=ic;sc=M}else if((wb|0)==658){ic=Hc()|0;lc=M;K2a(Na);rc=ic;sc=lc}lc=k[kc>>2]|0;if(!lc){gb=rc;ib=sc;Sc(gb|0)}j0a(lc);gb=rc;ib=sc;Sc(gb|0)}while(0);bb=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;Va=f+48|0;k[Va>>2]=-1;k[Va+4>>2]=-1;Va=f+56|0;Xa=f+60|0;kb=f+72|0;Za=bb+48|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,Za|0,f|0)|0;Va=x;x=0;if(Va&1){Va=Hc()|0;bb=k[kb>>2]|0;if(bb)j0a(bb);bb=k[Xa>>2]|0;if(!bb)Sc(Va|0);j0a(bb);Sc(Va|0)}Va=k[kb>>2]|0;if(Va)j0a(Va);Va=k[Xa>>2]|0;if(Va)j0a(Va);k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;Va=f+48|0;k[Va>>2]=-1;k[Va+4>>2]=-1;Va=f+56|0;Xa=f+60|0;kb=f+72|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Va+16>>2]=0;x=0;Ta(539,Za|0,f|0)|0;Za=x;x=0;if(Za&1){Za=Hc()|0;Va=k[kb>>2]|0;if(Va)j0a(Va);Va=k[Xa>>2]|0;if(!Va)Sc(Za|0);j0a(Va);Sc(Za|0)}else{Za=k[kb>>2]|0;if(Za)j0a(Za);Za=k[Xa>>2]|0;if(Za)j0a(Za);r=e;return}break}case 1:{q2a(Oa,266468,49);x=0;pa(57,0,Oa|0,587,264836,266072);Za=x;x=0;if(Za&1){Za=Hc()|0;Xa=M;K2a(Oa);gb=Za;ib=Xa;Sc(gb|0)}else{K2a(Oa);r=e;return}break}default:{r=e;return}}break}case 11:{Xa=iDa(b,168,6752,0)|0;if(!Xa)BBa();Za=iDa(c,168,6752,0)|0;if(!Za)BBa();kb=Za+24|0;Va=k[kb>>2]|0;bb=Za+28|0;Za=k[bb>>2]|0;if((Va|0)!=(Za|0))if(!(k[Za+-8>>2]|0))tc=1;else tc=(k[Va>>2]|0)!=0;else tc=0;Va=Vf[k[(k[Xa>>2]|0)+60>>2]&1023](Xa)|0;Za=Xa+24|0;lc=Xa+28|0;Xa=k[Za>>2]|0;if((k[lc>>2]|0)==(Xa|0)){r=e;return}ic=g+8|0;hc=g+40|0;ec=g+48|0;dc=g+56|0;cc=g+60|0;bc=g+72|0;ac=f+8|0;Zb=f+40|0;Yb=f+48|0;Xb=f+56|0;Wb=f+60|0;cb=f+72|0;Wa=Xa;Xa=Va;Va=0;e:while(1){Ya=Wa;pb=k[Ya+(Va<<3)>>2]|0;mb=k[Ya+(Va<<3)+4>>2]|0;Ya=(mb|0)==0;if(!Ya)h0a(mb);lb=k[kb>>2]|0;db=(k[bb>>2]|0)-lb>>3;pc=lb;if(tc)if(Va>>>0>>0){lb=k[pc+(Va<<3)>>2]|0;qc=k[pc+(Va<<3)+4>>2]|0;uc=qc;if(!qc){vc=lb;wc=uc}else{h0a(qc);vc=lb;wc=uc}}else{vc=0;wc=0}else{uc=(k[lc>>2]|0)-(k[Za>>2]|0)>>3;if((db+Va|0)>>>0>=uc>>>0){lb=Va-uc+db|0;db=k[pc+(lb<<3)>>2]|0;uc=k[pc+(lb<<3)+4>>2]|0;lb=uc;if(!uc){vc=db;wc=lb}else{h0a(uc);vc=db;wc=lb}}else{vc=0;wc=0}}if(!pb){x=0;fb(140,Pa|0,329672,0);lb=x;x=0;if(lb&1){xc=mb;yc=Ya;zc=wc;wb=683;break}x=0;pa(57,(vc|0)==0|0,Pa|0,612,264836,266072);lb=x;x=0;if(lb&1){Ac=mb;Bc=Ya;Cc=wc;wb=692;break}K2a(Pa);Dc=Xa}else{x=0;lb=Ba(k[(k[pb>>2]|0)+60>>2]|0,pb|0)|0;db=x;x=0;if(db&1){xc=mb;yc=Ya;zc=wc;wb=683;break}db=vc;if(vc){x=0;uc=Ba(k[(k[vc>>2]|0)+60>>2]|0,db|0)|0;pc=x;x=0;if(pc&1){xc=mb;yc=Ya;zc=wc;wb=683;break}x=0;pc=Ta(k[(k[pb>>2]|0)+24>>2]|0,pb|0,db|0)|0;qc=x;x=0;if(qc&1){xc=mb;yc=Ya;zc=wc;wb=683;break}if(pc|d){if((lb|0)!=0?(x=0,fb(338,a|0,Xa|0,lb|0),pc=x,x=0,pc&1):0){xc=mb;yc=Ya;zc=wc;wb=683;break}x=0;nb(137,a|0,pb|0,db|0,d|0);db=x;x=0;if(db&1){xc=mb;yc=Ya;zc=wc;wb=683;break}else{Ec=uc;wb=701}}}else{Ec=0;wb=701}do if((wb|0)==701?(wb=0,(Ec|lb|0)!=0):0){uc=Ec>>>0>>0;db=uc?Ec:lb;if(db){pb=Xa-lb+Ec|0;pc=(pb+-1|0)>>>0<16;qc=pb+143&255;pb=0;do{Fc=k[a>>2]|0;x=0;fb(140,h|0,296239,35);Gc=x;x=0;if(Gc&1){Ic=mb;Jc=Ya;Kc=wc;wb=682;break e}x=0;pa(51,pc|0,h|0,217,295981,296275);Gc=x;x=0;if(Gc&1){Lc=mb;Mc=Ya;Nc=wc;wb=715;break e}K2a(h);x=0;Gc=Ta(594,Fc|0,qc|0)|0;Fc=x;x=0;if(Fc&1){Ic=mb;Jc=Ya;Kc=wc;wb=682;break e}k[g>>2]=1;k[ic>>2]=80;k[hc>>2]=1;Fc=ec;k[Fc>>2]=-1;k[Fc+4>>2]=-1;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[dc+16>>2]=0;x=0;Ta(539,Gc+48|0,g|0)|0;Gc=x;x=0;if(Gc&1){Oc=mb;Pc=Ya;Qc=wc;wb=722;break e}Gc=k[bc>>2]|0;if(Gc)j0a(Gc);Gc=k[cc>>2]|0;if(Gc)j0a(Gc);pb=pb+1|0}while(pb>>>0>>0)}f:do if(uc){if((Xa|0)==1){db=Ec;while(1){pb=k[a>>2]|0;k[f>>2]=1;k[ac>>2]=80;k[Zb>>2]=1;qc=Yb;k[qc>>2]=-1;k[qc+4>>2]=-1;k[Xb>>2]=0;k[Xb+4>>2]=0;k[Xb+8>>2]=0;k[Xb+12>>2]=0;k[Xb+16>>2]=0;x=0;Ta(539,pb+48|0,f|0)|0;pb=x;x=0;if(pb&1){Rc=mb;Tc=Ya;Uc=wc;wb=712;break e}pb=k[cb>>2]|0;if(pb)j0a(pb);pb=k[Wb>>2]|0;if(pb)j0a(pb);db=db+1|0;if(db>>>0>=lb>>>0)break f}}else Vc=Ec;do{x=0;xa(844,a|0,Xa|0);db=x;x=0;if(db&1){Wc=mb;Xc=Ya;Yc=wc;wb=679;break e}db=k[a>>2]|0;k[f>>2]=1;k[ac>>2]=80;k[Zb>>2]=1;ob=Yb;k[ob>>2]=-1;k[ob+4>>2]=-1;k[Xb>>2]=0;k[Xb+4>>2]=0;k[Xb+8>>2]=0;k[Xb+12>>2]=0;k[Xb+16>>2]=0;x=0;Ta(539,db+48|0,f|0)|0;db=x;x=0;if(db&1){Zc=mb;_c=Ya;$c=wc;wb=734;break e}db=k[cb>>2]|0;if(db)j0a(db);db=k[Wb>>2]|0;if(db)j0a(db);Vc=Vc+1|0}while(Vc>>>0>>0)}while(0);if(Ec>>>0>lb>>>0){uc=Xa+-1-lb+Ec|0;db=Ec-lb|0;if(uc>>>0>db>>>0){if((Ec|0)==(lb|0))break;ob=uc+db|0;pb=0;do{x=0;xa(845,a|0,ob|0);qc=x;x=0;if(qc&1){ad=mb;bd=Ya;cd=wc;wb=680;break e}pb=pb+1|0}while((pb|0)!=(db|0))}else{if(!uc)break;pb=uc+db|0;ob=0;do{x=0;xa(844,a|0,pb|0);qc=x;x=0;if(qc&1){dd=mb;ed=Ya;fd=wc;wb=681;break e}ob=ob+1|0}while((ob|0)!=(uc|0))}}}while(0);Dc=Xa-lb|0}if(wc)j0a(wc);if(!Ya)j0a(mb);Va=Va+1|0;Wa=k[Za>>2]|0;if(Va>>>0>=(k[lc>>2]|0)-Wa>>3>>>0){wb=786;break}else Xa=Dc}switch(wb|0){case 679:{Xa=Hc()|0;gd=Yc;hd=Xc;id=Wc;jd=M;kd=Xa;wb=684;break}case 680:{Xa=Hc()|0;gd=cd;hd=bd;id=ad;jd=M;kd=Xa;wb=684;break}case 681:{Xa=Hc()|0;gd=fd;hd=ed;id=dd;jd=M;kd=Xa;wb=684;break}case 682:{Xa=Hc()|0;gd=Kc;hd=Jc;id=Ic;jd=M;kd=Xa;wb=684;break}case 683:{Xa=Hc()|0;gd=zc;hd=yc;id=xc;jd=M;kd=Xa;wb=684;break}case 692:{Xa=Hc()|0;Wa=M;K2a(Pa);ld=Xa;md=Wa;nd=Cc;od=Ac;pd=Bc;break}case 712:{qd=Hc()|0;rd=M;sd=Uc;td=Tc;ud=Rc;wb=735;break}case 715:{Wa=Hc()|0;Xa=M;K2a(h);gd=Nc;hd=Mc;id=Lc;jd=Xa;kd=Wa;wb=684;break}case 722:{Wa=Hc()|0;Xa=M;lc=k[bc>>2]|0;if(lc)j0a(lc);lc=k[cc>>2]|0;if(!lc){gd=Qc;hd=Pc;id=Oc;jd=Xa;kd=Wa;wb=684}else{j0a(lc);gd=Qc;hd=Pc;id=Oc;jd=Xa;kd=Wa;wb=684}break}case 734:{qd=Hc()|0;rd=M;sd=$c;td=_c;ud=Zc;wb=735;break}case 786:{r=e;return}}if((wb|0)==735){Wa=k[cb>>2]|0;if(Wa)j0a(Wa);Wa=k[Wb>>2]|0;if(!Wa){gd=sd;hd=td;id=ud;jd=rd;kd=qd;wb=684}else{j0a(Wa);gd=sd;hd=td;id=ud;jd=rd;kd=qd;wb=684}}if((wb|0)==684){ld=kd;md=jd;nd=gd;od=id;pd=hd}if(nd)j0a(nd);if(pd){gb=ld;ib=md;Sc(gb|0)}j0a(od);gb=ld;ib=md;Sc(gb|0);break}case 3:{Wa=cg[k[(k[c>>2]|0)+20>>2]&1023](c,b)|0;q2a(Qa,266518,28);x=0;pa(57,Wa|0,Qa|0,648,264836,266072);Wa=x;x=0;if(Wa&1){Wa=Hc()|0;Xa=M;K2a(Qa);gb=Wa;ib=Xa;Sc(gb|0)}K2a(Qa);if(d){Xa=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=21;k[f+40>>2]=1;Wa=f+48|0;k[Wa>>2]=-1;k[Wa+4>>2]=-1;Wa=f+56|0;lc=f+60|0;Va=f+72|0;Za=Xa+48|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[Wa+16>>2]=0;x=0;Ta(539,Za|0,f|0)|0;Wa=x;x=0;if(Wa&1){Wa=Hc()|0;Xa=k[Va>>2]|0;if(Xa)j0a(Xa);Xa=k[lc>>2]|0;if(!Xa)Sc(Wa|0);j0a(Xa);Sc(Wa|0)}Wa=k[Va>>2]|0;if(Wa)j0a(Wa);Wa=k[lc>>2]|0;if(Wa)j0a(Wa);k[f>>2]=1;k[f+8>>2]=21;k[f+40>>2]=1;Wa=f+48|0;k[Wa>>2]=-1;k[Wa+4>>2]=-1;Wa=f+56|0;lc=f+60|0;Va=f+72|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[Wa+16>>2]=0;x=0;Ta(539,Za|0,f|0)|0;Za=x;x=0;if(!(Za&1)){Za=k[Va>>2]|0;if(Za)j0a(Za);Za=k[lc>>2]|0;if(Za)j0a(Za);wb=783;break a}Za=Hc()|0;Wa=k[Va>>2]|0;if(Wa)j0a(Wa);Wa=k[lc>>2]|0;if(!Wa)Sc(Za|0);j0a(Wa);Sc(Za|0)}else wb=783;break}default:wb=783}while(0);if((wb|0)==783){Qa=cg[k[(k[b>>2]|0)+20>>2]&1023](b,c)|0;q2a(Ra,266037,34);x=0;pa(57,Qa|0,Ra|0,653,264836,266072);Qa=x;x=0;if(Qa&1){Qa=Hc()|0;md=M;K2a(Ra);gb=Qa;ib=md;Sc(gb|0)}else{K2a(Ra);r=e;return}}switch(Ua|0){case 6:{q2a(L,266183,47);x=0;pa(57,Sa>>>0<2|0,L|0,361,264836,266072);Ra=x;x=0;if(Ra&1){Ra=Hc()|0;md=M;K2a(L);gb=Ra;ib=md;Sc(gb|0)}K2a(L);L=iDa(c,168,6656,0)|0;if(!L)BBa();md=iDa(b,168,6592,0)|0;Ra=L+24|0;if((md|0)!=0?(k[Ra>>2]<<3|0)>(k[md+24>>2]|0):0)yla(a,md);md=k[a>>2]|0;k[O>>2]=1;k[O+32>>2]=1;L=256-(k[Ra>>2]<<3)|0;_a=g;$a=O;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));if((L|0)<0){D0a(f,265832);k[f>>2]=47544;x=0;nb(96,f|0,265867,265975,711);x=0;O=Hc()|0;nCa(f);Sc(O|0)}HB(g,L,((L|0)<0)<<31>>31);_a=N;$a=g;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));k[f>>2]=2;_a=f+8|0;$a=N;ab=_a+40|0;do{k[_a>>2]=k[$a>>2];_a=_a+4|0;$a=$a+4|0}while((_a|0)<(ab|0));$a=f+48|0;k[$a>>2]=-1;k[$a+4>>2]=-1;$a=f+56|0;_a=f+60|0;ab=f+72|0;k[$a>>2]=0;k[$a+4>>2]=0;k[$a+8>>2]=0;k[$a+12>>2]=0;k[$a+16>>2]=0;$a=md+48|0;x=0;Ta(539,$a|0,f|0)|0;md=x;x=0;if(md&1){md=Hc()|0;N=k[ab>>2]|0;if(N)j0a(N);N=k[_a>>2]|0;if(!N)Sc(md|0);j0a(N);Sc(md|0)}md=k[ab>>2]|0;if(md)j0a(md);md=k[_a>>2]|0;if(md)j0a(md);k[f>>2]=1;k[f+8>>2]=2;k[f+40>>2]=1;md=f+48|0;k[md>>2]=-1;k[md+4>>2]=-1;md=f+56|0;_a=f+60|0;ab=f+72|0;k[md>>2]=0;k[md+4>>2]=0;k[md+8>>2]=0;k[md+12>>2]=0;k[md+16>>2]=0;x=0;Ta(539,$a|0,f|0)|0;f=x;x=0;if(f&1){f=Hc()|0;$a=k[ab>>2]|0;if($a)j0a($a);$a=k[_a>>2]|0;if(!$a)Sc(f|0);j0a($a);Sc(f|0)}else{f=k[ab>>2]|0;if(f)j0a(f);f=k[_a>>2]|0;if(f)j0a(f);r=e;return}break}case 10:{Tf[k[(k[b>>2]|0)+64>>2]&2047](P,b);x=0;nb(137,a|0,b|0,k[P>>2]|0,1);f=x;x=0;if(f&1){f=Hc()|0;_a=M;ab=k[P+4>>2]|0;if(!ab){gb=f;ib=_a;Sc(gb|0)}j0a(ab);gb=f;ib=_a;Sc(gb|0)}else{_a=k[P+4>>2]|0;if(!_a){r=e;return}j0a(_a);r=e;return}break}case 4:{q2a(Q,266231,45);x=0;pa(57,Sa>>>0<2|(Sa|0)==4|0,Q|0,380,264836,266072);_a=x;x=0;if(_a&1){_a=Hc()|0;P=M;K2a(Q);gb=_a;ib=P;Sc(gb|0)}K2a(Q);Q=iDa(c,168,6608,0)|0;if(!Q)BBa();P=iDa(b,168,6592,0)|0;if((P|0)!=0?(k[Q+24>>2]|0)>(k[P+24>>2]|0):0)yla(a,P);q2a(R,273480,37);x=0;pa(57,0,R|0,386,264836,266072);P=x;x=0;if(P&1){P=Hc()|0;Q=M;K2a(R);gb=P;ib=Q;Sc(gb|0)}else{K2a(R);r=e;return}break}default:{R=(Ua|0)==0;q2a(S,329672,0);x=0;pa(57,R|(Ua|0)==7|0,S|0,390,264836,266072);Ua=x;x=0;if(Ua&1){Ua=Hc()|0;Q=M;K2a(S);gb=Ua;ib=Q;Sc(gb|0)}K2a(S);n8(T,0,2);if(R){R=iDa(c,168,6592,0)|0;if(!R){x=0;hb(49);x=0;wb=181}else{vd=R;wb=162}}else{vd=T;wb=162}g:do if((wb|0)==162){switch(Sa|0){case 1:{R=iDa(b,168,6624,0)|0;if(!R){x=0;hb(49);x=0;wb=181;break g}c=R+40|0;k[A>>2]=0;S=A+8|0;k[S>>2]=0;Q=A+13|0;i[Q>>0]=1;Ua=k[R+48>>2]|0;P=Ua>>>0>134217728?134217728:Ua;if(P>>>0>2){_a=P>>>0>8?P:8;x=0;f=Ba(563,_a<<2|0)|0;ab=x;x=0;if(ab&1){wb=181;break g}i[Q>>0]=0;k[S>>2]=P;k[A>>2]=_a;k[A+4>>2]=f;wd=f}else{k[S>>2]=P;wd=A}Dyb(wd|0,((i[R+53>>0]|0)==0?k[R+44>>2]|0:c)|0,Ua<<2|0)|0;Ua=i[R+52>>0]|0;i[A+12>>0]=Ua;c=i[Q>>0]|0;if(Ua<<24>>24==0&(k[S>>2]|0)==1)xd=(k[(c<<24>>24==0?k[A+4>>2]|0:A)>>2]|0)==1;else xd=0;if(!(c<<24>>24))OBa(k[A+4>>2]|0);x=0;fb(140,U|0,273480,37);c=x;x=0;if(c&1){wb=181;break g}x=0;pa(57,xd|0,U|0,399,264836,266072);c=x;x=0;if(c&1){c=Hc()|0;S=M;K2a(U);yd=c;zd=S;break g}K2a(U);S=k[vd+24>>2]|0;x=0;xa(842,V|0,R|0);R=x;x=0;if(R&1){wb=181;break g}R=(S|0)<(k[(k[V>>2]|0)+24>>2]|0)&d;S=k[V+4>>2]|0;if(S)j0a(S);if(R?(x=0,xa(843,a|0,vd|0),R=x,x=0,R&1):0){wb=181;break g}break}case 0:{R=iDa(b,168,6592,0)|0;if(!R){x=0;hb(49);x=0;wb=181;break g}else{Ad=R;wb=185}break}default:{Ad=T;wb=185}}do if((wb|0)==185){if((k[vd+24>>2]|0)>(k[Ad+24>>2]|0)){x=0;xa(843,a|0,Ad|0);R=x;x=0;if(R&1){wb=181;break g}else break}if(d?(x=0,xa(843,a|0,vd|0),R=x,x=0,R&1):0){wb=181;break g}}while(0);k[T>>2]=20456;xh(T+12|0,k[T+16>>2]|0);Wb=k[T+8>>2]|0;if(Wb)k0a(Wb);r=e;return}while(0);if((wb|0)==181){wb=Hc()|0;yd=wb;zd=M}k[T>>2]=20456;xh(T+12|0,k[T+16>>2]|0);wb=k[T+8>>2]|0;if(!wb){gb=yd;ib=zd;Sc(gb|0)}k0a(wb);gb=yd;ib=zd;Sc(gb|0)}}}function ula(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+80|0;d=c;if(!b){r=c;return}e=d+8|0;f=d+40|0;g=d+48|0;h=d+56|0;i=d+60|0;j=d+72|0;l=0;while(1){m=k[a>>2]|0;k[d>>2]=1;k[e>>2]=80;k[f>>2]=1;n=g;k[n>>2]=-1;k[n+4>>2]=-1;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,m+48|0,d|0)|0;m=x;x=0;if(m&1)break;m=k[j>>2]|0;if(m)j0a(m);m=k[i>>2]|0;if(m)j0a(m);l=l+1|0;if(l>>>0>=b>>>0){o=3;break}}if((o|0)==3){r=c;return}c=Hc()|0;o=k[j>>2]|0;if(o)j0a(o);o=k[i>>2]|0;if(!o)Sc(c|0);j0a(o);Sc(c|0)}function vla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+864|0;d=c+760|0;e=c+680|0;f=c+600|0;g=c+520|0;h=c+440|0;i=c+360|0;j=c+280|0;l=c+200|0;m=c+852|0;n=c+120|0;o=c+840|0;p=c+40|0;q=c;s=(k[a>>2]|0)+48|0;t=k[s>>2]|0;k[s>>2]=t+1;k[p>>2]=8;k[p+8>>2]=t;k[p+40>>2]=1;t=p+48|0;k[t>>2]=-1;k[t+4>>2]=-1;t=p+56|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;x=0;Ta(539,(k[a>>2]|0)+48|0,p|0)|0;t=x;x=0;do if(!(t&1)?(s=b+36|0,u=k[s>>2]|0,x=0,fb(140,o|0,329672,0),v=x,x=0,!(v&1)):0){x=0;pa(57,(u|0)!=0|0,o|0,588,285183,276209);u=x;x=0;if(u&1){u=Hc()|0;v=M;K2a(o);w=v;y=u;break}K2a(o);x=0;xa(834,a|0,k[s>>2]|0);u=x;x=0;if(!(u&1)?(u=k[s>>2]|0,x=0,fb(140,m|0,329672,0),v=x,x=0,!(v&1)):0){x=0;pa(57,(u|0)!=0|0,m|0,588,285183,276209);u=x;x=0;if(u&1){u=Hc()|0;v=M;K2a(m);w=v;y=u;break}K2a(m);x=0;fb(320,a|0,k[s>>2]|0,1);s=x;x=0;if(!(s&1)){s=k[a>>2]|0;k[l>>2]=1;k[l+8>>2]=144;k[l+40>>2]=1;u=l+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=l+56|0;v=l+60|0;z=l+72|0;A=s+48|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,A|0,l|0)|0;u=x;x=0;if(u&1){u=Hc()|0;s=M;B=k[z>>2]|0;if(B)j0a(B);B=k[v>>2]|0;if(!B){w=s;y=u;break}j0a(B);w=s;y=u;break}u=k[z>>2]|0;if(u)j0a(u);u=k[v>>2]|0;if(u)j0a(u);k[q>>2]=1;k[q+32>>2]=1;k[j>>2]=2;u=j+8|0;v=q;z=u+40|0;do{k[u>>2]=k[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(z|0));v=j+48|0;k[v>>2]=-1;k[v+4>>2]=-1;v=j+56|0;u=j+60|0;z=j+72|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;Ta(539,A|0,j|0)|0;v=x;x=0;if(v&1){v=Hc()|0;s=M;B=k[z>>2]|0;if(B)j0a(B);B=k[u>>2]|0;if(!B){w=s;y=v;break}j0a(B);w=s;y=v;break}v=k[z>>2]|0;if(v)j0a(v);v=k[u>>2]|0;if(v)j0a(v);k[i>>2]=1;k[i+8>>2]=144;k[i+40>>2]=1;v=i+48|0;k[v>>2]=-1;k[v+4>>2]=-1;v=i+56|0;u=i+60|0;z=i+72|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;Ta(539,A|0,i|0)|0;v=x;x=0;if(v&1){v=Hc()|0;s=M;B=k[z>>2]|0;if(B)j0a(B);B=k[u>>2]|0;if(!B){w=s;y=v;break}j0a(B);w=s;y=v;break}v=k[z>>2]|0;if(v)j0a(v);v=k[u>>2]|0;if(v)j0a(v);v=k[a>>2]|0;k[h>>2]=1;k[h+8>>2]=3;k[h+40>>2]=1;u=h+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=h+56|0;z=h+60|0;s=h+72|0;B=v+48|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,B|0,h|0)|0;u=x;x=0;if(u&1){u=Hc()|0;v=M;C=k[s>>2]|0;if(C)j0a(C);C=k[z>>2]|0;if(!C){w=v;y=u;break}j0a(C);w=v;y=u;break}u=k[s>>2]|0;if(u)j0a(u);u=k[z>>2]|0;if(u)j0a(u);k[g>>2]=1;k[g+8>>2]=144;k[g+40>>2]=1;u=g+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=g+56|0;z=g+60|0;s=g+72|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,B|0,g|0)|0;B=x;x=0;if(B&1){B=Hc()|0;u=M;v=k[s>>2]|0;if(v)j0a(v);v=k[z>>2]|0;if(!v){w=u;y=B;break}j0a(v);w=u;y=B;break}B=k[s>>2]|0;if(B)j0a(B);B=k[z>>2]|0;if(B)j0a(B);B=k[a>>2]|0;k[f>>2]=1;k[f+8>>2]=129;k[f+40>>2]=1;z=f+48|0;k[z>>2]=-1;k[z+4>>2]=-1;z=f+56|0;s=f+60|0;u=f+72|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[z+16>>2]=0;x=0;Ta(539,B+48|0,f|0)|0;B=x;x=0;if(B&1){B=Hc()|0;z=M;v=k[u>>2]|0;if(v)j0a(v);v=k[s>>2]|0;if(!v){w=z;y=B;break}j0a(v);w=z;y=B;break}B=k[u>>2]|0;if(B)j0a(B);B=k[s>>2]|0;if(B)j0a(B);x=0;fb(315,e|0,(k[a>>2]|0)+48|0,p|0);B=x;x=0;if(B&1){D=92;break}B=k[e+72>>2]|0;if(B)j0a(B);B=k[e+60>>2]|0;if(B)j0a(B);B=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;s=d+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=d+56|0;u=d+60|0;z=d+72|0;v=B+48|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,v|0,d|0)|0;s=x;x=0;if(s&1){s=Hc()|0;B=M;C=k[z>>2]|0;if(C)j0a(C);C=k[u>>2]|0;if(!C){w=B;y=s;break}j0a(C);w=B;y=s;break}s=k[z>>2]|0;if(s)j0a(s);s=k[u>>2]|0;if(s)j0a(s);k[n>>2]=1;k[n+8>>2]=80;k[n+40>>2]=1;s=n+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=n+56|0;u=n+60|0;z=n+72|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,v|0,n|0)|0;v=x;x=0;if(v&1){v=Hc()|0;s=M;B=k[z>>2]|0;if(B)j0a(B);B=k[u>>2]|0;if(!B){w=s;y=v;break}j0a(B);w=s;y=v;break}v=k[z>>2]|0;if(v)j0a(v);v=k[u>>2]|0;if(v)j0a(v);v=k[p+72>>2]|0;if(v)j0a(v);v=k[p+60>>2]|0;if(!v){r=c;return}j0a(v);r=c;return}else D=92}else D=92}else D=92;while(0);if((D|0)==92){D=Hc()|0;w=M;y=D}D=k[p+72>>2]|0;if(D)j0a(D);D=k[p+60>>2]|0;if(!D)Sc(y|0);j0a(D);Sc(y|0)}function wla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+256|0;d=c+80|0;e=c+40|0;f=c+244|0;g=c+216|0;h=c;i=c+184|0;j=c+172|0;l=c+160|0;m=iDa(b,168,6688,0)|0;if((m|0)!=0?(n=k[m+24>>2]|0,(n|0)!=0):0){q2a(f,329672,0);x=0;pa(57,(n|0)==2|0,f|0,667,264836,266547);n=x;x=0;if(n&1){n=Hc()|0;m=M;K2a(f);o=n;p=m;Sc(o|0)}K2a(f);f=k[a>>2]|0;m=cg[k[(k[b>>2]|0)+28>>2]&1023](b,1)|0;k[d>>2]=2;k[d+8>>2]=m>>>0>32?m:32;m=d+12|0;k[m>>2]=k[g>>2];k[m+4>>2]=k[g+4>>2];k[m+8>>2]=k[g+8>>2];k[m+12>>2]=k[g+12>>2];k[m+16>>2]=k[g+16>>2];k[m+20>>2]=k[g+20>>2];k[m+24>>2]=k[g+24>>2];k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;m=d+60|0;n=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,f+48|0,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;g=k[n>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(!g)Sc(f|0);j0a(g);Sc(f|0)}f=k[n>>2]|0;if(f)j0a(f);f=k[m>>2]|0;if(f)j0a(f);gla(a);f=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=128;k[d+40>>2]=1;m=d+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=d+56|0;n=d+60|0;g=d+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,f+48|0,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;m=k[g>>2]|0;if(m)j0a(m);m=k[n>>2]|0;if(!m)Sc(f|0);j0a(m);Sc(f|0)}f=k[g>>2]|0;if(f)j0a(f);f=k[n>>2]|0;if(f)j0a(f);f=iDa(b,168,6720,0)|0;a:do if(!f){n=iDa(b,168,6704,0)|0;if(!n){jg[k[(k[b>>2]|0)+76>>2]&511](l,b,0);x=0;g=Fa(86,l|0,0,266625)|0;m=x;x=0;do if(!(m&1)){k[j>>2]=k[g>>2];k[j+4>>2]=k[g+4>>2];k[j+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;pa(57,0,j|0,696,264836,266547);q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(j);t=q;u=s;break}else{K2a(j);K2a(l);break a}}else{s=Hc()|0;t=s;u=M}while(0);K2a(l);o=t;p=u;Sc(o|0)}if(Vf[k[(k[n>>2]|0)+36>>2]&1023](n)|0){g=k[a>>2]|0;k[h>>2]=0;k[h+32>>2]=1;k[d>>2]=2;v=d+8|0;w=h;y=v+40|0;do{k[v>>2]=k[w>>2];v=v+4|0;w=w+4|0}while((v|0)<(y|0));m=d+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=d+56|0;s=d+60|0;q=d+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,g+48|0,d|0)|0;m=x;x=0;if(m&1){m=Hc()|0;z=k[q>>2]|0;if(z)j0a(z);z=k[s>>2]|0;if(!z)Sc(m|0);j0a(z);Sc(m|0)}m=k[q>>2]|0;if(m)j0a(m);m=k[s>>2]|0;if(m)j0a(m);n8(i,256,0);x=0;fb(320,a|0,i|0,1);m=x;x=0;if(!(m&1)){k[i>>2]=20456;xh(i+12|0,k[i+16>>2]|0);m=k[i+8>>2]|0;if(!m)break;k0a(m);break}m=Hc()|0;s=M;k[i>>2]=20456;xh(i+12|0,k[i+16>>2]|0);q=k[i+8>>2]|0;if(!q){o=m;p=s;Sc(o|0)}k0a(q);o=m;p=s;Sc(o|0)}s=n+48|0;if((k[s>>2]|0)!=0?1:(k[n+80>>2]|0)>>>0>1){m=k[a>>2]|0;k[d>>2]=2;v=d+8|0;w=s;y=v+40|0;do{k[v>>2]=k[w>>2];v=v+4|0;w=w+4|0}while((v|0)<(y|0));g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;s=d+60|0;q=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;g=m+48|0;x=0;Ta(539,g|0,d|0)|0;z=x;x=0;if(z&1){z=Hc()|0;A=k[q>>2]|0;if(A)j0a(A);A=k[s>>2]|0;if(!A)Sc(z|0);j0a(A);Sc(z|0)}z=k[q>>2]|0;if(z)j0a(z);z=k[s>>2]|0;if(z)j0a(z);k[d>>2]=1;k[d+8>>2]=144;k[d+40>>2]=1;z=d+48|0;k[z>>2]=-1;k[z+4>>2]=-1;z=d+56|0;s=d+60|0;q=d+72|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[z+16>>2]=0;x=0;Ta(539,g|0,d|0)|0;g=x;x=0;if(!(g&1)){g=k[q>>2]|0;if(g)j0a(g);g=k[s>>2]|0;if(g)j0a(g);vla(a,n);break}g=Hc()|0;z=k[q>>2]|0;if(z)j0a(z);z=k[s>>2]|0;if(!z)Sc(g|0);j0a(z);Sc(g|0)}}else{g=j8(f,0)|0;z=k[g>>2]|0;s=k[g+4>>2]|0;if((z|0)!=(s|0)){g=z;do{z=g+12|0;wla(a,k[z>>2]|0);ola(a,k[z>>2]|0,1);g=g+24|0}while((g|0)!=(s|0))}}while(0);f=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;o=d+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=d+56|0;p=d+60|0;i=d+72|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;x=0;Ta(539,f+48|0,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;o=k[i>>2]|0;if(o)j0a(o);o=k[p>>2]|0;if(!o)Sc(f|0);j0a(o);Sc(f|0)}else{f=k[i>>2]|0;if(f)j0a(f);f=k[p>>2]|0;if(f)j0a(f);r=c;return}}if(!(Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0)){r=c;return}f=e+32|0;p=d+8|0;i=d+48|0;o=d+56|0;h=d+60|0;u=d+72|0;t=0;while(1){l=k[a>>2]|0;k[e>>2]=0;k[f>>2]=1;k[d>>2]=2;v=p;w=e;y=v+40|0;do{k[v>>2]=k[w>>2];v=v+4|0;w=w+4|0}while((v|0)<(y|0));j=i;k[j>>2]=-1;k[j+4>>2]=-1;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;x=0;Ta(539,l+48|0,d|0)|0;j=x;x=0;if(j&1)break;j=k[u>>2]|0;if(j)j0a(j);j=k[h>>2]|0;if(j)j0a(j);t=t+1|0;if(t>>>0>=(Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0)>>>0){B=97;break}}if((B|0)==97){r=c;return}c=Hc()|0;B=k[u>>2]|0;if(B)j0a(B);B=k[h>>2]|0;if(!B)Sc(c|0);j0a(B);Sc(c|0)}function xla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+288|0;c=b+120|0;d=b+80|0;e=b+256|0;f=b+40|0;g=b;h=b+228|0;i=b+200|0;j=k[a>>2]|0;k[c>>2]=1;k[c+8>>2]=130;k[c+40>>2]=1;l=c+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=c+56|0;m=c+60|0;n=c+72|0;o=j+48|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,o|0,c|0)|0;l=x;x=0;if(l&1){l=Hc()|0;j=k[n>>2]|0;if(j)j0a(j);j=k[m>>2]|0;if(!j)Sc(l|0);j0a(j);Sc(l|0)}l=k[n>>2]|0;if(l)j0a(l);l=k[m>>2]|0;if(l)j0a(l);k[c>>2]=1;k[c+8>>2]=144;k[c+40>>2]=1;l=c+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=c+56|0;m=c+60|0;n=c+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,o|0,c|0)|0;o=x;x=0;if(o&1){o=Hc()|0;l=k[n>>2]|0;if(l)j0a(l);l=k[m>>2]|0;if(!l)Sc(o|0);j0a(l);Sc(o|0)}o=k[n>>2]|0;if(o)j0a(o);o=k[m>>2]|0;if(o)j0a(o);o=k[a>>2]|0;k[d>>2]=0;k[d+32>>2]=1;k[c>>2]=2;m=c+8|0;n=d;d=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(d|0));l=c+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=c+56|0;j=c+60|0;p=c+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;l=o+48|0;x=0;Ta(539,l|0,c|0)|0;o=x;x=0;if(o&1){o=Hc()|0;q=k[p>>2]|0;if(q)j0a(q);q=k[j>>2]|0;if(!q)Sc(o|0);j0a(q);Sc(o|0)}o=k[p>>2]|0;if(o)j0a(o);o=k[j>>2]|0;if(o)j0a(o);k[c>>2]=2;k[c+8>>2]=4;o=c+12|0;k[o>>2]=k[e>>2];k[o+4>>2]=k[e+4>>2];k[o+8>>2]=k[e+8>>2];k[o+12>>2]=k[e+12>>2];k[o+16>>2]=k[e+16>>2];k[o+20>>2]=k[e+20>>2];k[o+24>>2]=k[e+24>>2];k[c+40>>2]=1;e=c+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=c+56|0;o=c+60|0;j=c+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,l|0,c|0)|0;l=x;x=0;if(l&1){l=Hc()|0;e=k[j>>2]|0;if(e)j0a(e);e=k[o>>2]|0;if(!e)Sc(l|0);j0a(e);Sc(l|0)}l=k[j>>2]|0;if(l)j0a(l);l=k[o>>2]|0;if(l)j0a(l);l=k[a>>2]|0;k[f>>2]=32;k[f+32>>2]=1;k[c>>2]=2;m=c+8|0;n=f;d=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(d|0));f=c+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=c+56|0;o=c+60|0;j=c+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;f=l+48|0;x=0;Ta(539,f|0,c|0)|0;l=x;x=0;if(l&1){l=Hc()|0;e=k[j>>2]|0;if(e)j0a(e);e=k[o>>2]|0;if(!e)Sc(l|0);j0a(e);Sc(l|0)}l=k[j>>2]|0;if(l)j0a(l);l=k[o>>2]|0;if(l)j0a(l);k[c>>2]=1;k[c+8>>2]=132;k[c+40>>2]=1;l=c+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=c+56|0;o=c+60|0;j=c+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,f|0,c|0)|0;l=x;x=0;if(l&1){l=Hc()|0;e=k[j>>2]|0;if(e)j0a(e);e=k[o>>2]|0;if(!e)Sc(l|0);j0a(e);Sc(l|0)}l=k[j>>2]|0;if(l)j0a(l);l=k[o>>2]|0;if(l)j0a(l);k[g>>2]=31;k[g+32>>2]=1;k[c>>2]=2;m=c+8|0;n=g;d=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(d|0));n=c+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=c+56|0;m=c+60|0;d=c+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,f|0,c|0)|0;n=x;x=0;if(n&1){n=Hc()|0;g=k[d>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(!g)Sc(n|0);j0a(g);Sc(n|0)}n=k[d>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(n)j0a(n);k[c>>2]=1;k[c+8>>2]=1;k[c+40>>2]=1;n=c+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=c+56|0;m=c+60|0;d=c+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,f|0,c|0)|0;f=x;x=0;if(f&1){f=Hc()|0;n=k[d>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(!n)Sc(f|0);j0a(n);Sc(f|0)}f=k[d>>2]|0;if(f)j0a(f);f=k[m>>2]|0;if(f)j0a(f);f=k[a>>2]|0;k[c>>2]=1;k[c+8>>2]=4;k[c+40>>2]=1;m=c+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=c+56|0;d=c+60|0;n=c+72|0;g=f+48|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,g|0,c|0)|0;m=x;x=0;if(m&1){m=Hc()|0;f=k[n>>2]|0;if(f)j0a(f);f=k[d>>2]|0;if(!f)Sc(m|0);j0a(f);Sc(m|0)}m=k[n>>2]|0;if(m)j0a(m);m=k[d>>2]|0;if(m)j0a(m);k[c>>2]=2;k[c+8>>2]=3;m=c+12|0;k[m>>2]=k[h>>2];k[m+4>>2]=k[h+4>>2];k[m+8>>2]=k[h+8>>2];k[m+12>>2]=k[h+12>>2];k[m+16>>2]=k[h+16>>2];k[m+20>>2]=k[h+20>>2];k[m+24>>2]=k[h+24>>2];k[c+40>>2]=1;h=c+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=c+56|0;m=c+60|0;d=c+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,g|0,c|0)|0;h=x;x=0;if(h&1){h=Hc()|0;n=k[d>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(!n)Sc(h|0);j0a(n);Sc(h|0)}h=k[d>>2]|0;if(h)j0a(h);h=k[m>>2]|0;if(h)j0a(h);k[c>>2]=1;k[c+8>>2]=2;k[c+40>>2]=1;h=c+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=c+56|0;m=c+60|0;d=c+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,g|0,c|0)|0;g=x;x=0;if(g&1){g=Hc()|0;h=k[d>>2]|0;if(h)j0a(h);h=k[m>>2]|0;if(!h)Sc(g|0);j0a(h);Sc(g|0)}g=k[d>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(g)j0a(g);g=k[a>>2]|0;k[c>>2]=2;k[c+8>>2]=15;m=c+12|0;k[m>>2]=k[i>>2];k[m+4>>2]=k[i+4>>2];k[m+8>>2]=k[i+8>>2];k[m+12>>2]=k[i+12>>2];k[m+16>>2]=k[i+16>>2];k[m+20>>2]=k[i+20>>2];k[m+24>>2]=k[i+24>>2];k[c+40>>2]=1;i=c+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=c+56|0;m=c+60|0;d=c+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;i=g+48|0;x=0;Ta(539,i|0,c|0)|0;g=x;x=0;if(g&1){g=Hc()|0;h=k[d>>2]|0;if(h)j0a(h);h=k[m>>2]|0;if(!h)Sc(g|0);j0a(h);Sc(g|0)}g=k[d>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(g)j0a(g);k[c>>2]=1;k[c+8>>2]=1;k[c+40>>2]=1;g=c+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=c+56|0;m=c+60|0;d=c+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,i|0,c|0)|0;i=x;x=0;if(i&1){i=Hc()|0;g=k[d>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(!g)Sc(i|0);j0a(g);Sc(i|0)}i=k[d>>2]|0;if(i)j0a(i);i=k[m>>2]|0;if(i)j0a(i);i=k[a>>2]|0;k[c>>2]=1;k[c+8>>2]=241;k[c+40>>2]=1;m=c+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=c+56|0;d=c+60|0;g=c+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,i+48|0,c|0)|0;i=x;x=0;if(i&1){i=Hc()|0;m=k[g>>2]|0;if(m)j0a(m);m=k[d>>2]|0;if(!m)Sc(i|0);j0a(m);Sc(i|0)}i=k[g>>2]|0;if(i)j0a(i);i=k[d>>2]|0;if(i)j0a(i);i=k[a>>2]|0;k[c>>2]=1;k[c+8>>2]=80;k[c+40>>2]=1;a=c+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=c+56|0;d=c+60|0;g=c+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,i+48|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;i=k[g>>2]|0;if(i)j0a(i);i=k[d>>2]|0;if(!i)Sc(c|0);j0a(i);Sc(c|0)}else{c=k[g>>2]|0;if(c)j0a(c);c=k[d>>2]|0;if(!c){r=b;return}j0a(c);r=b;return}}function yla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+288|0;d=c+200|0;e=c+120|0;f=c+160|0;g=c+80|0;h=c+40|0;i=c;j=k[b+24>>2]|0;if((j|0)==256){r=c;return}l=k[a>>2]|0;if((k[b+28>>2]|0)==1){b=(j|0)/8|0;a=(j|0)<8;k[f>>2]=a?1-b|0:b+-1|0;k[f+32>>2]=1;if(a)NC(f);k[d>>2]=2;m=d+8|0;n=f;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));f=d+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=d+56|0;a=d+60|0;b=d+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;f=l+48|0;x=0;Ta(539,f|0,d|0)|0;p=x;x=0;if(p&1){p=Hc()|0;q=k[b>>2]|0;if(q)j0a(q);q=k[a>>2]|0;if(!q)Sc(p|0);j0a(q);Sc(p|0)}p=k[b>>2]|0;if(p)j0a(p);p=k[a>>2]|0;if(p)j0a(p);k[d>>2]=1;k[d+8>>2]=11;k[d+40>>2]=1;p=d+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=d+56|0;a=d+60|0;b=d+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,f|0,d|0)|0;f=x;x=0;if(f&1){f=Hc()|0;p=k[b>>2]|0;if(p)j0a(p);p=k[a>>2]|0;if(!p)Sc(f|0);j0a(p);Sc(f|0)}else{f=k[b>>2]|0;if(f)j0a(f);f=k[a>>2]|0;if(f)j0a(f);r=c;return}}else{k[i>>2]=1;k[i+32>>2]=1;m=e;n=i;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));if((j|0)<0){D0a(d,265832);k[d>>2]=47544;x=0;nb(96,d|0,265867,265975,711);x=0;i=Hc()|0;nCa(d);Sc(i|0)}HB(e,j,((j|0)<0)<<31>>31);m=h;n=e;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));k[e>>2]=0;k[e+32>>2]=1;k[d>>2]=1;JB(e,h,d);m=g;n=e;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));k[d>>2]=2;m=d+8|0;n=g;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));n=d+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=d+56|0;m=d+60|0;o=d+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;n=l+48|0;x=0;Ta(539,n|0,d|0)|0;l=x;x=0;if(l&1){l=Hc()|0;g=k[o>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(!g)Sc(l|0);j0a(g);Sc(l|0)}l=k[o>>2]|0;if(l)j0a(l);l=k[m>>2]|0;if(l)j0a(l);k[d>>2]=1;k[d+8>>2]=22;k[d+40>>2]=1;l=d+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=d+56|0;m=d+60|0;o=d+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,n|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;n=k[o>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(!n)Sc(d|0);j0a(n);Sc(d|0)}else{d=k[o>>2]|0;if(d)j0a(d);d=k[m>>2]|0;if(d)j0a(d);r=c;return}}}function zla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(b>>>0>c>>>0){if(!c)return;d=c+b|0;e=0;do{Cla(a,d);e=e+1|0}while((e|0)!=(c|0));return}else{if(!b)return;e=c+b|0;c=0;do{Bla(a,e);c=c+1|0}while((c|0)!=(b|0));return}}function Ala(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+192|0;d=c;e=c+176|0;f=c+136|0;g=c+112|0;h=c+96|0;i=c+80|0;j=k[a>>2]|0;l=tma(j,sma(j,b)|0)|0;j=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;m=k[j>>2]|0;j=Vf[k[(k[m>>2]|0)+60>>2]&1023](m)|0;q2a(e,266669,36);x=0;pa(57,l>>>0>=j>>>0|0,e|0,706,264836,266706);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(e);o=n;p=m;Sc(p|0)}K2a(e);e=l-j|0;if((e+1|0)>>>0<=16){if(!j){r=c;return}l=e>>>0<16;m=e+144&255;e=d+8|0;n=d+40|0;q=d+48|0;s=d+56|0;t=d+60|0;u=d+72|0;v=0;while(1){w=k[a>>2]|0;q2a(d,296239,35);x=0;pa(51,l|0,d|0,217,295981,296275);y=x;x=0;if(y&1){z=27;break}K2a(d);y=Iia(w,m)|0;k[d>>2]=1;k[e>>2]=80;k[n>>2]=1;w=q;k[w>>2]=-1;k[w+4>>2]=-1;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;x=0;Ta(539,y+48|0,d|0)|0;y=x;x=0;if(y&1){z=33;break}y=k[u>>2]|0;if(y)j0a(y);y=k[t>>2]|0;if(y)j0a(y);v=v+1|0;if(v>>>0>=j>>>0){z=25;break}}if((z|0)==25){r=c;return}else if((z|0)==27){c=Hc()|0;K2a(d);Sc(c|0)}else if((z|0)==33){z=Hc()|0;c=k[u>>2]|0;if(c)j0a(c);c=k[t>>2]|0;if(!c)Sc(z|0);j0a(c);Sc(z|0)}}z=f;c=z+36|0;do{k[z>>2]=0;z=z+4|0}while((z|0)<(c|0));z=f+20|0;c=f+24|0;k[c>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;t=f+4|0;u=t+-4|0;j=t+16|0;v=f+8|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[f+4>>2]=40936;k[f>>2]=40900;k[z>>2]=40960;k[g>>2]=31456;d=b+8|0;s=k[d+4>>2]|0;q=g+4|0;k[q>>2]=k[d>>2];k[q+4>>2]=s;k[g+12>>2]=k[b+16>>2];s=k[b+20>>2]|0;k[g+16>>2]=s;b=(s|0)==0;if(!b)h0a(s);x=0;q=Ta(595,f|0,g|0)|0;f=x;x=0;if(!(f&1)?(x=0,fb(140,i|0,270638,45),f=x,x=0,!(f&1)):0){k[h>>2]=21048;f=h+4|0;x=0;xa(604,f|0,i|0);d=x;x=0;if(d&1){d=Hc()|0;A=M;B=d}else{x=0;d=Ta(596,q|0,h|0)|0;q=x;x=0;if(!(q&1)){x=0;nb(135,d|0,266706,264836,713);x=0}d=Hc()|0;q=M;k[h>>2]=21048;K2a(f);A=q;B=d}K2a(i);C=A;D=B}else{B=Hc()|0;C=M;D=B}k[g>>2]=31456;if(!b)j0a(s);k[t>>2]=40992;k[u>>2]=41020;k[j>>2]=41044;K2a(v);k[z>>2]=20796;z=k[c>>2]|0;if(z){x=0;v=Ba(k[(k[z>>2]|0)+16>>2]|0,z|0)|0;z=x;x=0;if(z&1){z=Hc(0)|0;Fg(z)}if(v)k[c>>2]=0}o=C;p=D;Sc(p|0)}function Bla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+12|0;e=c;q2a(e,270638,45);x=0;pa(57,(b+-1|0)>>>0<17|0,e|0,749,264836,266805);f=x;x=0;if(f&1){f=Hc()|0;K2a(e);Sc(f|0)}K2a(e);if(b>>>0<=1){r=c;return}e=1;while(1){f=k[a>>2]|0;q2a(d,296239,35);x=0;pa(51,(e+-1|0)>>>0<16|0,d|0,217,295981,296275);g=x;x=0;if(g&1){h=7;break}K2a(d);Iia(f,e+143&255)|0;e=e+1|0;if(e>>>0>=b>>>0){h=4;break}}if((h|0)==4){r=c;return}else if((h|0)==7){h=Hc()|0;K2a(d);Sc(h|0)}}function Cla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+32|0;d=c+12|0;e=c;q2a(e,270638,45);x=0;pa(57,(b+-1|0)>>>0<17|0,e|0,742,264836,266870);f=x;x=0;if(f&1){f=Hc()|0;K2a(e);Sc(f|0)}K2a(e);if(b>>>0<=1){r=c;return}e=1;while(1){f=k[a>>2]|0;g=b-e|0;q2a(d,296239,35);x=0;pa(51,(g+-1|0)>>>0<16|0,d|0,217,295981,296275);h=x;x=0;if(h&1){i=7;break}K2a(d);Iia(f,g+143&255)|0;e=e+1|0;if(e>>>0>=b>>>0){i=4;break}}if((i|0)==4){r=c;return}else if((i|0)==7){i=Hc()|0;K2a(d);Sc(i|0)}}function Dla(a,b){a=a|0;b=b|0;ula(a,Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0);return}function Ela(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=r;r=r+160|0;c=b+80|0;d=b+40|0;e=b;mla(a,0);f=k[a>>2]|0;k[d>>2]=32;k[d+32>>2]=1;k[c>>2]=2;a=c+8|0;g=d;d=a+40|0;do{k[a>>2]=k[g>>2];a=a+4|0;g=g+4|0}while((a|0)<(d|0));h=c+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=c+56|0;i=c+60|0;j=c+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;h=f+48|0;x=0;Ta(539,h|0,c|0)|0;f=x;x=0;if(f&1){f=Hc()|0;l=k[j>>2]|0;if(l)j0a(l);l=k[i>>2]|0;if(!l)Sc(f|0);j0a(l);Sc(f|0)}f=k[j>>2]|0;if(f)j0a(f);f=k[i>>2]|0;if(f)j0a(f);k[e>>2]=0;k[e+32>>2]=1;k[c>>2]=2;a=c+8|0;g=e;d=a+40|0;do{k[a>>2]=k[g>>2];a=a+4|0;g=g+4|0}while((a|0)<(d|0));g=c+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=c+56|0;a=c+60|0;d=c+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,h|0,c|0)|0;g=x;x=0;if(g&1){g=Hc()|0;e=k[d>>2]|0;if(e)j0a(e);e=k[a>>2]|0;if(!e)Sc(g|0);j0a(e);Sc(g|0)}g=k[d>>2]|0;if(g)j0a(g);g=k[a>>2]|0;if(g)j0a(g);k[c>>2]=1;k[c+8>>2]=32;k[c+40>>2]=1;g=c+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=c+56|0;a=c+60|0;d=c+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,h|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;h=k[d>>2]|0;if(h)j0a(h);h=k[a>>2]|0;if(!h)Sc(c|0);j0a(h);Sc(c|0)}else{c=k[d>>2]|0;if(c)j0a(c);c=k[a>>2]|0;if(!c){r=b;return}j0a(c);r=b;return}}function Fla(){k[10456]=0;k[10457]=0;k[10458]=0;return}function Gla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+80|0;d=c;FB(d,a,b);x=0;b=Ta(539,a|0,d|0)|0;a=x;x=0;if(a&1){a=Hc()|0;e=k[d+72>>2]|0;if(e)j0a(e);e=k[d+60>>2]|0;if(!e)Sc(a|0);j0a(e);Sc(a|0)}else{a=k[d+72>>2]|0;if(a)j0a(a);a=k[d+60>>2]|0;if(!a){r=c;return b|0}j0a(a);r=c;return b|0}return 0}function Hla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+416|0;e=d+160|0;f=d+88|0;g=d;h=d+72|0;j=a+260|0;l=i[a>>0]|0;k[f>>2]=41352;i[f+4>>0]=l;k[f+8>>2]=j;l=f+60|0;k[f+64>>2]=0;k[f+68>>2]=0;m=f+64|0;n=f+12|0;o=n+48|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));k[l>>2]=m;Fyb(e|0,0,248)|0;k[e>>2]=e+4;k[e+16>>2]=0;k[e+20>>2]=0;k[e+12>>2]=e+16;m=e+24|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;k[m+20>>2]=0;k[e+48>>2]=1;k[e+52>>2]=0;k[e+56>>2]=0;k[e+60>>2]=0;k[e+68>>2]=0;k[e+72>>2]=0;k[e+64>>2]=e+68;k[e+76>>2]=0;k[e+80>>2]=0;k[e+84>>2]=0;k[e+92>>2]=0;k[e+96>>2]=0;k[e+88>>2]=e+92;k[e+104>>2]=0;k[e+108>>2]=0;k[e+100>>2]=e+104;k[e+112>>2]=0;k[e+116>>2]=0;k[e+120>>2]=0;k[e+128>>2]=0;k[e+132>>2]=0;k[e+124>>2]=e+128;k[e+136>>2]=0;k[e+140>>2]=0;k[e+144>>2]=0;k[e+148>>2]=-1;k[e+152>>2]=-1;k[e+156>>2]=0;k[e+160>>2]=0;k[e+168>>2]=0;k[e+172>>2]=0;k[e+164>>2]=e+168;k[e+180>>2]=0;k[e+184>>2]=0;k[e+176>>2]=e+180;k[e+192>>2]=0;k[e+196>>2]=0;k[e+188>>2]=e+192;k[e+204>>2]=0;k[e+208>>2]=0;k[e+200>>2]=e+204;n=e+212|0;o=n+36|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));Lla(j,e)|0;Mla(e);x=0;fb(339,f|0,b|0,c|0);m=x;x=0;if(m&1){m=Hc()|0;p=M;q=m;Nla(f);Sc(q|0)}m=a+8|0;l=i[a>>0]|0;k[g>>2]=41352;i[g+4>>0]=l;k[g+8>>2]=m;l=g+60|0;k[g+64>>2]=0;k[g+68>>2]=0;s=g+64|0;n=g+12|0;o=n+48|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));k[l>>2]=s;Fyb(e|0,0,248)|0;k[e>>2]=e+4;k[e+16>>2]=0;k[e+20>>2]=0;k[e+12>>2]=e+16;s=e+24|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;k[s+20>>2]=0;k[e+48>>2]=1;k[e+52>>2]=0;k[e+56>>2]=0;k[e+60>>2]=0;k[e+68>>2]=0;k[e+72>>2]=0;k[e+64>>2]=e+68;k[e+76>>2]=0;k[e+80>>2]=0;k[e+84>>2]=0;k[e+92>>2]=0;k[e+96>>2]=0;k[e+88>>2]=e+92;k[e+104>>2]=0;k[e+108>>2]=0;k[e+100>>2]=e+104;k[e+112>>2]=0;k[e+116>>2]=0;k[e+120>>2]=0;k[e+128>>2]=0;k[e+132>>2]=0;k[e+124>>2]=e+128;k[e+136>>2]=0;k[e+140>>2]=0;k[e+144>>2]=0;k[e+148>>2]=-1;k[e+152>>2]=-1;k[e+156>>2]=0;k[e+160>>2]=0;k[e+168>>2]=0;k[e+172>>2]=0;k[e+164>>2]=e+168;k[e+180>>2]=0;k[e+184>>2]=0;k[e+176>>2]=e+180;k[e+192>>2]=0;k[e+196>>2]=0;k[e+188>>2]=e+192;k[e+204>>2]=0;k[e+208>>2]=0;k[e+200>>2]=e+204;n=e+212|0;o=n+36|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));Lla(m,e)|0;Mla(e);x=0;e=db(74,g|0,j|0,b|0,c|0)|0;c=x;x=0;do if(!(c&1)){j=a+256|0;k[j>>2]=e;if((i[a>>0]|0)!=0?(x=0,db(75,a+56|0,1,1,k[a+4>>2]|0)|0,n=x,x=0,n&1):0){t=6;break}if(!(i[b+72>>0]|0)){Nla(g);Nla(f);r=d;return}n=k[j>>2]|0;x=0;fb(140,h|0,329672,0);o=x;x=0;if(!(o&1)){x=0;pa(57,(n|0)!=-1|0,h|0,47,266933,266971);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(h);u=o;v=n;break}K2a(h);x=0;xa(846,m|0,k[j>>2]|0);j=x;x=0;if(!(j&1)){Nla(g);Nla(f);r=d;return}else t=6}else t=6}else t=6;while(0);if((t|0)==6){t=Hc()|0;u=M;v=t}Nla(g);p=u;q=v;Nla(f);Sc(q|0)}function Ila(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+320|0;e=d+72|0;f=d;g=a+8|0;h=i[a>>0]|0;k[f>>2]=41352;i[f+4>>0]=h;k[f+8>>2]=g;h=f+60|0;k[f+64>>2]=0;k[f+68>>2]=0;j=f+64|0;l=f+12|0;m=l+48|0;do{k[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k[h>>2]=j;Fyb(e|0,0,248)|0;k[e>>2]=e+4;k[e+16>>2]=0;k[e+20>>2]=0;k[e+12>>2]=e+16;j=e+24|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[j+20>>2]=0;k[e+48>>2]=1;k[e+52>>2]=0;k[e+56>>2]=0;k[e+60>>2]=0;k[e+68>>2]=0;k[e+72>>2]=0;k[e+64>>2]=e+68;k[e+76>>2]=0;k[e+80>>2]=0;k[e+84>>2]=0;k[e+92>>2]=0;k[e+96>>2]=0;k[e+88>>2]=e+92;k[e+104>>2]=0;k[e+108>>2]=0;k[e+100>>2]=e+104;k[e+112>>2]=0;k[e+116>>2]=0;k[e+120>>2]=0;k[e+128>>2]=0;k[e+132>>2]=0;k[e+124>>2]=e+128;k[e+136>>2]=0;k[e+140>>2]=0;k[e+144>>2]=0;k[e+148>>2]=-1;k[e+152>>2]=-1;k[e+156>>2]=0;k[e+160>>2]=0;k[e+168>>2]=0;k[e+172>>2]=0;k[e+164>>2]=e+168;k[e+180>>2]=0;k[e+184>>2]=0;k[e+176>>2]=e+180;k[e+192>>2]=0;k[e+196>>2]=0;k[e+188>>2]=e+192;k[e+204>>2]=0;k[e+208>>2]=0;k[e+200>>2]=e+204;l=e+212|0;m=l+36|0;do{k[l>>2]=0;l=l+4|0}while((l|0)<(m|0));Lla(g,e)|0;Mla(e);x=0;e=Fa(142,f|0,b|0,c|0)|0;c=x;x=0;if(c&1){n=Hc()|0;o=M;Nla(f);Sc(n|0)}k[a+256>>2]=e;if(!(i[a>>0]|0)){Nla(f);r=d;return}x=0;db(75,a+56|0,1,1,k[a+4>>2]|0)|0;a=x;x=0;if(a&1){n=Hc()|0;o=M;Nla(f);Sc(n|0)}else{Nla(f);r=d;return}}function Jla(a,b,c){a=a|0;b=b|0;c=c|0;ima(a,b+260|0,c);return}function Kla(){k[10459]=0;k[10460]=0;k[10461]=0;return}function Lla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+4|0;Sla(a,k[f>>2]|0);k[a>>2]=k[b>>2];g=b+4|0;h=k[g>>2]|0;k[f>>2]=h;j=b+8|0;l=k[j>>2]|0;k[a+8>>2]=l;if(!l)k[a>>2]=f;else{k[h+8>>2]=f;k[b>>2]=g;k[g>>2]=0;k[j>>2]=0}j=a+12|0;g=b+12|0;f=a+16|0;aba(j,k[f>>2]|0);k[j>>2]=k[g>>2];h=b+16|0;l=k[h>>2]|0;k[f>>2]=l;m=b+20|0;n=k[m>>2]|0;k[a+20>>2]=n;if(!n)k[j>>2]=f;else{k[l+8>>2]=f;k[g>>2]=h;k[h>>2]=0;k[m>>2]=0}i[d>>0]=i[e>>0]|0;Tla(a+24|0,b+24|0,d);Ula(a+48|0,b+48|0)|0;m=a+164|0;h=b+164|0;g=a+168|0;aba(m,k[g>>2]|0);k[m>>2]=k[h>>2];f=b+168|0;l=k[f>>2]|0;k[g>>2]=l;j=b+172|0;n=k[j>>2]|0;k[a+172>>2]=n;if(!n)k[m>>2]=g;else{k[l+8>>2]=g;k[h>>2]=f;k[f>>2]=0;k[j>>2]=0}j=a+176|0;f=b+176|0;h=a+180|0;Tka(j,k[h>>2]|0);k[j>>2]=k[f>>2];g=b+180|0;l=k[g>>2]|0;k[h>>2]=l;m=b+184|0;n=k[m>>2]|0;k[a+184>>2]=n;if(!n)k[j>>2]=h;else{k[l+8>>2]=h;k[f>>2]=g;k[g>>2]=0;k[m>>2]=0}m=a+188|0;g=b+188|0;f=a+192|0;Qla(m,k[f>>2]|0);k[m>>2]=k[g>>2];h=b+192|0;l=k[h>>2]|0;k[f>>2]=l;j=b+196|0;n=k[j>>2]|0;k[a+196>>2]=n;if(!n)k[m>>2]=f;else{k[l+8>>2]=f;k[g>>2]=h;k[h>>2]=0;k[j>>2]=0}j=a+200|0;h=b+200|0;g=a+204|0;Pla(j,k[g>>2]|0);k[j>>2]=k[h>>2];f=b+204|0;l=k[f>>2]|0;k[g>>2]=l;m=b+208|0;n=k[m>>2]|0;k[a+208>>2]=n;if(!n)k[j>>2]=g;else{k[l+8>>2]=g;k[h>>2]=f;k[f>>2]=0;k[m>>2]=0}m=a+212|0;f=b+212|0;h=k[m>>2]|0;g=a+216|0;if(!h){o=a+220|0;p=k[f>>2]|0;k[m>>2]=p;q=b+216|0;s=k[q>>2]|0;k[g>>2]=s;t=b+220|0;u=k[t>>2]|0;k[o>>2]=u;k[t>>2]=0;k[q>>2]=0;k[f>>2]=0;v=a+224|0;w=b+224|0;i[d>>0]=i[e>>0]|0;Vla(v,w,d);r=c;return a|0}l=k[g>>2]|0;if((l|0)!=(h|0))k[g>>2]=l+(~((l+-4-h|0)>>>2)<<2);OBa(h);h=a+220|0;k[h>>2]=0;k[g>>2]=0;k[m>>2]=0;o=h;p=k[f>>2]|0;k[m>>2]=p;q=b+216|0;s=k[q>>2]|0;k[g>>2]=s;t=b+220|0;u=k[t>>2]|0;k[o>>2]=u;k[t>>2]=0;k[q>>2]=0;k[f>>2]=0;v=a+224|0;w=b+224|0;i[d>>0]=i[e>>0]|0;Vla(v,w,d);r=c;return a|0}function Mla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=a+228|0;c=k[b>>2]|0;d=a+240|0;e=k[d>>2]|0;f=c+(e>>>10<<2)|0;g=a+232|0;h=k[g>>2]|0;i=h;j=c;if((h|0)==(c|0)){l=0;m=a+244|0;n=0}else{h=a+244|0;o=(k[h>>2]|0)+e|0;l=(k[c+(o>>>10<<2)>>2]|0)+((o&1023)<<2)|0;m=h;n=(k[f>>2]|0)+((e&1023)<<2)|0}e=n;n=f;a:while(1){f=e;do{h=f;if((h|0)==(l|0))break a;f=h+4|0}while((f-(k[n>>2]|0)|0)!=4096);f=n+4|0;e=k[f>>2]|0;n=f}k[m>>2]=0;m=i-j>>2;if(m>>>0>2){j=c;do{OBa(k[j>>2]|0);j=(k[b>>2]|0)+4|0;k[b>>2]=j;c=(k[g>>2]|0)-j>>2}while(c>>>0>2);p=c}else p=m;switch(p|0){case 1:{k[d>>2]=512;break}case 2:{k[d>>2]=1024;break}default:{}}d=k[b>>2]|0;p=k[g>>2]|0;if((d|0)!=(p|0)){m=d;do{OBa(k[m>>2]|0);m=m+4|0}while((m|0)!=(p|0));p=k[b>>2]|0;b=k[g>>2]|0;if((b|0)!=(p|0))k[g>>2]=b+(~((b+-4-p|0)>>>2)<<2)}p=k[a+224>>2]|0;if(p)OBa(p);p=k[a+212>>2]|0;b=p;if(p){g=a+216|0;m=k[g>>2]|0;if((m|0)!=(p|0))k[g>>2]=m+(~((m+-4-b|0)>>>2)<<2);OBa(p)}Pla(a+200|0,k[a+204>>2]|0);Qla(a+188|0,k[a+192>>2]|0);Tka(a+176|0,k[a+180>>2]|0);aba(a+164|0,k[a+168>>2]|0);IE(a+48|0);Rla(a);return}function Nla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=41352;Ola(a+60|0,k[a+64>>2]|0);b=a+36|0;c=k[b>>2]|0;if(c){d=a+40|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{k[d>>2]=g+-80;e=k[g+-8>>2]|0;if(e)j0a(e);e=k[g+-20>>2]|0;if(e)j0a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f)}f=a+24|0;b=k[f>>2]|0;if(b){c=a+28|0;g=k[c>>2]|0;if((g|0)==(b|0))h=b;else{d=g;do{k[c>>2]=d+-80;g=k[d+-8>>2]|0;if(g)j0a(g);g=k[d+-20>>2]|0;if(g)j0a(g);d=k[c>>2]|0}while((d|0)!=(b|0));h=k[f>>2]|0}OBa(h)}h=a+12|0;f=k[h>>2]|0;if(!f)return;b=a+16|0;a=k[b>>2]|0;if((a|0)==(f|0))i=f;else{d=a;do{k[b>>2]=d+-80;a=k[d+-8>>2]|0;if(a)j0a(a);a=k[d+-20>>2]|0;if(a)j0a(a);d=k[b>>2]|0}while((d|0)!=(f|0));i=k[h>>2]|0}OBa(i);return}function Ola(a,b){a=a|0;b=b|0;if(!b)return;else{Ola(a,k[b>>2]|0);Ola(a,k[b+4>>2]|0);OBa(b);return}}function Pla(a,b){a=a|0;b=b|0;if(!b)return;else{Pla(a,k[b>>2]|0);Pla(a,k[b+4>>2]|0);OBa(b);return}}function Qla(a,b){a=a|0;b=b|0;if(!b)return;else{Qla(a,k[b>>2]|0);Qla(a,k[b+4>>2]|0);OBa(b);return}}function Rla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=a+28|0;c=k[b>>2]|0;d=a+40|0;e=k[d>>2]|0;f=c+(e>>>10<<2)|0;g=a+32|0;h=k[g>>2]|0;i=h;j=c;if((h|0)==(c|0)){l=0;m=a+44|0;n=0}else{h=a+44|0;o=(k[h>>2]|0)+e|0;l=(k[c+(o>>>10<<2)>>2]|0)+((o&1023)<<2)|0;m=h;n=(k[f>>2]|0)+((e&1023)<<2)|0}e=n;n=f;a:while(1){f=e;do{h=f;if((h|0)==(l|0))break a;f=h+4|0}while((f-(k[n>>2]|0)|0)!=4096);f=n+4|0;e=k[f>>2]|0;n=f}k[m>>2]=0;m=i-j>>2;if(m>>>0>2){j=c;do{OBa(k[j>>2]|0);j=(k[b>>2]|0)+4|0;k[b>>2]=j;c=(k[g>>2]|0)-j>>2}while(c>>>0>2);p=c}else p=m;switch(p|0){case 1:{k[d>>2]=512;break}case 2:{k[d>>2]=1024;break}default:{}}d=k[b>>2]|0;p=k[g>>2]|0;if((d|0)!=(p|0)){m=d;do{OBa(k[m>>2]|0);m=m+4|0}while((m|0)!=(p|0));p=k[b>>2]|0;b=k[g>>2]|0;if((b|0)!=(p|0))k[g>>2]=b+(~((b+-4-p|0)>>>2)<<2)}p=k[a+24>>2]|0;if(p)OBa(p);aba(a+12|0,k[a+16>>2]|0);Sla(a,k[a+4>>2]|0);return}function Sla(a,b){a=a|0;b=b|0;if(!b)return;Sla(a,k[b>>2]|0);Sla(a,k[b+4>>2]|0);a=k[b+96>>2]|0;if(a)j0a(a);a=k[b+84>>2]|0;if(a)j0a(a);OBa(b);return}function Tla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[c>>2]|0;e=a+16|0;f=k[e>>2]|0;g=d+(f>>>10<<2)|0;h=a+8|0;i=k[h>>2]|0;j=i;l=d;if((i|0)==(d|0)){m=0;n=a+20|0;o=0}else{i=a+20|0;p=(k[i>>2]|0)+f|0;m=(k[d+(p>>>10<<2)>>2]|0)+((p&1023)<<2)|0;n=i;o=(k[g>>2]|0)+((f&1023)<<2)|0}f=o;o=g;a:while(1){g=f;do{i=g;if((i|0)==(m|0))break a;g=i+4|0}while((g-(k[o>>2]|0)|0)!=4096);g=o+4|0;f=k[g>>2]|0;o=g}k[n>>2]=0;n=j-l>>2;if(n>>>0>2){l=d;do{OBa(k[l>>2]|0);l=(k[c>>2]|0)+4|0;k[c>>2]=l;d=(k[h>>2]|0)-l>>2}while(d>>>0>2);q=d}else q=n;switch(q|0){case 1:{k[e>>2]=512;break}case 2:{k[e>>2]=1024;break}default:{}}Yla(a);q=k[c>>2]|0;n=k[h>>2]|0;if((n|0)!=(q|0))k[h>>2]=n+(~((n+-4-q|0)>>>2)<<2);Zla(a);k[a>>2]=k[b>>2];k[c>>2]=k[b+4>>2];k[h>>2]=k[b+8>>2];k[a+12>>2]=k[b+12>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;h=b+16|0;k[e>>2]=k[h>>2];e=b+20|0;k[a+20>>2]=k[e>>2];k[e>>2]=0;k[h>>2]=0;return}function Ula(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;k[a>>2]=k[b>>2];c=a+4|0;d=b+4|0;e=k[c>>2]|0;if(!e){f=a+8|0;g=a+12|0}else{h=a+8|0;i=k[h>>2]|0;if((i|0)==(e|0))j=e;else{l=i;do{k[h>>2]=l+-80;i=k[l+-8>>2]|0;if(i)j0a(i);i=k[l+-20>>2]|0;if(i)j0a(i);l=k[h>>2]|0}while((l|0)!=(e|0));j=k[c>>2]|0}OBa(j);j=a+12|0;k[j>>2]=0;k[h>>2]=0;k[c>>2]=0;f=h;g=j}k[c>>2]=k[d>>2];c=b+8|0;k[f>>2]=k[c>>2];f=b+12|0;k[g>>2]=k[f>>2];k[f>>2]=0;k[c>>2]=0;k[d>>2]=0;d=a+16|0;c=b+16|0;f=a+20|0;KE(d,k[f>>2]|0);k[d>>2]=k[c>>2];g=b+20|0;j=k[g>>2]|0;k[f>>2]=j;h=b+24|0;e=k[h>>2]|0;k[a+24>>2]=e;if(!e)k[d>>2]=f;else{k[j+8>>2]=f;k[c>>2]=g;k[g>>2]=0;k[h>>2]=0}h=a+28|0;g=b+28|0;c=k[h>>2]|0;if(!c){m=a+32|0;n=a+36|0}else{f=a+32|0;j=k[f>>2]|0;if((j|0)==(c|0))o=c;else{d=j;do{j=d+-116|0;k[f>>2]=j;IE(j);d=k[f>>2]|0}while((d|0)!=(c|0));o=k[h>>2]|0}OBa(o);o=a+36|0;k[o>>2]=0;k[f>>2]=0;k[h>>2]=0;m=f;n=o}k[h>>2]=k[g>>2];h=b+32|0;k[m>>2]=k[h>>2];m=b+36|0;k[n>>2]=k[m>>2];k[m>>2]=0;k[h>>2]=0;k[g>>2]=0;g=a+40|0;h=b+40|0;m=a+44|0;JE(g,k[m>>2]|0);k[g>>2]=k[h>>2];n=b+44|0;o=k[n>>2]|0;k[m>>2]=o;f=b+48|0;c=k[f>>2]|0;k[a+48>>2]=c;if(!c)k[g>>2]=m;else{k[o+8>>2]=m;k[h>>2]=n;k[n>>2]=0;k[f>>2]=0}f=a+52|0;n=b+52|0;h=a+56|0;JE(f,k[h>>2]|0);k[f>>2]=k[n>>2];m=b+56|0;o=k[m>>2]|0;k[h>>2]=o;g=b+60|0;c=k[g>>2]|0;k[a+60>>2]=c;if(!c)k[f>>2]=h;else{k[o+8>>2]=h;k[n>>2]=m;k[m>>2]=0;k[g>>2]=0}g=a+64|0;m=b+64|0;n=k[g>>2]|0;h=a+68|0;if(!n)p=a+72|0;else{if((k[h>>2]|0)!=(n|0))k[h>>2]=n;OBa(n);n=a+72|0;k[n>>2]=0;k[h>>2]=0;k[g>>2]=0;p=n}k[g>>2]=k[m>>2];g=b+68|0;k[h>>2]=k[g>>2];h=b+72|0;k[p>>2]=k[h>>2];k[h>>2]=0;k[g>>2]=0;k[m>>2]=0;m=a+76|0;g=b+76|0;h=a+80|0;Ci(m,k[h>>2]|0);k[m>>2]=k[g>>2];p=b+80|0;n=k[p>>2]|0;k[h>>2]=n;o=b+84|0;f=k[o>>2]|0;k[a+84>>2]=f;if(!f)k[m>>2]=h;else{k[n+8>>2]=h;k[g>>2]=p;k[p>>2]=0;k[o>>2]=0}o=a+88|0;p=b+88|0;k[o>>2]=k[p>>2];k[o+4>>2]=k[p+4>>2];k[o+8>>2]=k[p+8>>2];k[a+100>>2]=k[b+100>>2];k[a+104>>2]=k[b+104>>2];p=b+108|0;o=k[p>>2]|0;g=b+112|0;b=k[g>>2]|0;k[p>>2]=0;k[g>>2]=0;k[a+108>>2]=o;o=a+112|0;g=k[o>>2]|0;k[o>>2]=b;if(!g)return a|0;j0a(g);return a|0}function Vla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[c>>2]|0;e=a+16|0;f=k[e>>2]|0;g=d+(f>>>10<<2)|0;h=a+8|0;i=k[h>>2]|0;j=i;l=d;if((i|0)==(d|0)){m=0;n=a+20|0;o=0}else{i=a+20|0;p=(k[i>>2]|0)+f|0;m=(k[d+(p>>>10<<2)>>2]|0)+((p&1023)<<2)|0;n=i;o=(k[g>>2]|0)+((f&1023)<<2)|0}f=o;o=g;a:while(1){g=f;do{i=g;if((i|0)==(m|0))break a;g=i+4|0}while((g-(k[o>>2]|0)|0)!=4096);g=o+4|0;f=k[g>>2]|0;o=g}k[n>>2]=0;n=j-l>>2;if(n>>>0>2){l=d;do{OBa(k[l>>2]|0);l=(k[c>>2]|0)+4|0;k[c>>2]=l;d=(k[h>>2]|0)-l>>2}while(d>>>0>2);q=d}else q=n;switch(q|0){case 1:{k[e>>2]=512;break}case 2:{k[e>>2]=1024;break}default:{}}Wla(a);q=k[c>>2]|0;n=k[h>>2]|0;if((n|0)!=(q|0))k[h>>2]=n+(~((n+-4-q|0)>>>2)<<2);Xla(a);k[a>>2]=k[b>>2];k[c>>2]=k[b+4>>2];k[h>>2]=k[b+8>>2];k[a+12>>2]=k[b+12>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;h=b+16|0;k[e>>2]=k[h>>2];e=b+20|0;k[a+20>>2]=k[e>>2];k[e>>2]=0;k[h>>2]=0;return}function Wla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=a+20|0;c=k[b>>2]|0;if(!c){d=a+8|0;e=k[d>>2]|0;f=a+4|0;if((e|0)!=(k[f>>2]|0)){g=e;do{OBa(k[g+-4>>2]|0);g=(k[d>>2]|0)+-4|0;k[d>>2]=g}while((g|0)!=(k[f>>2]|0))}k[a+16>>2]=0;Xla(a);return}f=a+16|0;g=k[f>>2]|0;d=a+4|0;if(g>>>0>1023){OBa(k[k[d>>2]>>2]|0);e=(k[d>>2]|0)+4|0;k[d>>2]=e;h=(k[f>>2]|0)+-1024|0;k[f>>2]=h;i=e;j=h;l=k[b>>2]|0}else{i=k[d>>2]|0;j=g;l=c}c=a+8|0;g=k[c>>2]|0;if((((g|0)==(i|0)?0:(g-i<<8)+-1|0)-(l+j)|0)>>>0<=1023){Xla(a);return}OBa(k[g+-4>>2]|0);k[c>>2]=(k[c>>2]|0)+-4;Xla(a);return}function Xla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=a+12|0;c=k[a>>2]|0;d=a+8|0;e=k[d>>2]|0;f=a+4|0;g=k[f>>2]|0;h=e-g|0;i=h>>2;j=g;l=e;m=c;if((k[b>>2]|0)-c>>2>>>0<=i>>>0)return;do if(i){x=0;c=Ba(563,h|0)|0;n=x;x=0;if(!(n&1)){o=c;break}c=Hc(0)|0;me(c|0)|0;x=0;hb(45);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else return}else o=0;while(0);h=o;c=o+(i<<2)|0;if((j|0)==(l|0)){p=g;q=e;r=m}else{m=o;e=j;j=h;while(1){k[m>>2]=k[e>>2];g=j+4|0;i=e+4|0;if((i|0)==(l|0))break;else{m=g;e=i;j=g}}p=k[f>>2]|0;q=k[d>>2]|0;r=k[a>>2]|0}k[a>>2]=h;k[f>>2]=h;k[d>>2]=o+(q-p>>2<<2);k[b>>2]=c;if(!r)return;OBa(r);return}function Yla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=a+20|0;c=k[b>>2]|0;if(!c){d=a+8|0;e=k[d>>2]|0;f=a+4|0;if((e|0)!=(k[f>>2]|0)){g=e;do{OBa(k[g+-4>>2]|0);g=(k[d>>2]|0)+-4|0;k[d>>2]=g}while((g|0)!=(k[f>>2]|0))}k[a+16>>2]=0;Zla(a);return}f=a+16|0;g=k[f>>2]|0;d=a+4|0;if(g>>>0>1023){OBa(k[k[d>>2]>>2]|0);e=(k[d>>2]|0)+4|0;k[d>>2]=e;h=(k[f>>2]|0)+-1024|0;k[f>>2]=h;i=e;j=h;l=k[b>>2]|0}else{i=k[d>>2]|0;j=g;l=c}c=a+8|0;g=k[c>>2]|0;if((((g|0)==(i|0)?0:(g-i<<8)+-1|0)-(l+j)|0)>>>0<=1023){Zla(a);return}OBa(k[g+-4>>2]|0);k[c>>2]=(k[c>>2]|0)+-4;Zla(a);return}function Zla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=a+12|0;c=k[a>>2]|0;d=a+8|0;e=k[d>>2]|0;f=a+4|0;g=k[f>>2]|0;h=e-g|0;i=h>>2;j=g;l=e;m=c;if((k[b>>2]|0)-c>>2>>>0<=i>>>0)return;do if(i){x=0;c=Ba(563,h|0)|0;n=x;x=0;if(!(n&1)){o=c;break}c=Hc(0)|0;me(c|0)|0;x=0;hb(45);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else return}else o=0;while(0);h=o;c=o+(i<<2)|0;if((j|0)==(l|0)){p=g;q=e;r=m}else{m=o;e=j;j=h;while(1){k[m>>2]=k[e>>2];g=j+4|0;i=e+4|0;if((i|0)==(l|0))break;else{m=g;e=i;j=g}}p=k[f>>2]|0;q=k[d>>2]|0;r=k[a>>2]|0}k[a>>2]=h;k[f>>2]=h;k[d>>2]=o+(q-p>>2<<2);k[b>>2]=c;if(!r)return;OBa(r);return}function _la(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+16|0;d=c;e=a+164|0;f=KBa(20)|0;k[f+16>>2]=b;g=a+168|0;h=k[g>>2]|0;do if(h){i=h;while(1){j=k[i+16>>2]|0;if(b>>>0>>0){l=k[i>>2]|0;if(!l){m=i;n=i;o=4;break}else p=l}else{if(j>>>0>=b>>>0){q=i;o=9;break}j=i+4|0;l=k[j>>2]|0;if(!l){s=j;t=i;o=8;break}else p=l}i=p}if((o|0)==4){k[d>>2]=n;u=m;v=n;break}else if((o|0)==8){k[d>>2]=t;u=s;v=t;break}else if((o|0)==9){k[d>>2]=q;u=d;v=q;break}}else{k[d>>2]=g;u=g;v=g}while(0);if(k[u>>2]|0){OBa(f);r=c;return}k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=v;k[u>>2]=f;v=k[k[e>>2]>>2]|0;if(!v)w=f;else{k[e>>2]=v;w=k[u>>2]|0}ui(k[a+168>>2]|0,w);w=a+172|0;k[w>>2]=(k[w>>2]|0)+1;r=c;return}function $la(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;e=r;r=r+16|0;f=e;g=a+188|0;h=b;i=a+192|0;j=k[i>>2]|0;do if(j){l=j;while(1){m=k[l+16>>2]|0;if(b>>>0>>0){n=k[l>>2]|0;if(!n){o=l;p=l;q=5;break}else s=n}else{if(m>>>0>=b>>>0){t=l;q=11;break}m=l+4|0;n=k[m>>2]|0;if(!n){u=m;v=l;q=9;break}else s=n}l=s}if((q|0)==5){k[f>>2]=p;w=o;x=p;break}else if((q|0)==9){k[f>>2]=v;w=u;x=v;break}else if((q|0)==11){k[f>>2]=t;if(!t){w=f;x=t;break}else y=t;z=y+24|0;Eyb(z|0,c|0,36)|0;A=y+64|0;k[A>>2]=d;r=e;return}}else{k[f>>2]=i;w=i;x=i}while(0);i=KBa(72)|0;k[i+16>>2]=h;k[i+24>>2]=0;k[i+56>>2]=1;k[i+64>>2]=0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=x;k[w>>2]=i;x=k[k[g>>2]>>2]|0;if(!x)B=i;else{k[g>>2]=x;B=k[w>>2]|0}ui(k[a+192>>2]|0,B);B=a+196|0;k[B>>2]=(k[B>>2]|0)+1;y=i;z=y+24|0;Eyb(z|0,c|0,36)|0;A=y+64|0;k[A>>2]=d;r=e;return}function ama(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+80|0;d=c;bma(a,b);hma(d,a,b,a);x=0;Ta(539,a+48|0,d|0)|0;a=x;x=0;if(a&1){a=Hc()|0;b=k[d+72>>2]|0;if(b)j0a(b);b=k[d+60>>2]|0;if(!b)Sc(a|0);j0a(b);Sc(a|0)}else{a=k[d+72>>2]|0;if(a)j0a(a);a=k[d+60>>2]|0;if(!a){r=c;return}j0a(a);r=c;return}}function bma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+16|0;d=c;e=a+44|0;f=k[e>>2]|0;if(((f|0)!=0?(g=a+28|0,h=k[g>>2]|0,i=a+40|0,j=k[i>>2]|0,(k[(k[h+(j>>>10<<2)>>2]|0)+((j&1023)<<2)>>2]|0)==(b|0)):0)?(k[e>>2]=f+-1,f=j+1|0,k[i>>2]=f,f>>>0>2047):0){OBa(k[h>>2]|0);k[g>>2]=(k[g>>2]|0)+4;k[i>>2]=(k[i>>2]|0)+-1024}i=a+12|0;g=KBa(20)|0;k[g+16>>2]=b;h=a+16|0;f=k[h>>2]|0;do if(f){j=f;while(1){e=k[j+16>>2]|0;if(e>>>0>b>>>0){l=k[j>>2]|0;if(!l){m=j;n=j;o=8;break}else p=l}else{if(e>>>0>=b>>>0){q=j;o=13;break}e=j+4|0;l=k[e>>2]|0;if(!l){s=e;t=j;o=12;break}else p=l}j=p}if((o|0)==8){k[d>>2]=n;u=m;v=n;break}else if((o|0)==12){k[d>>2]=t;u=s;v=t;break}else if((o|0)==13){k[d>>2]=q;u=d;v=q;break}}else{k[d>>2]=h;u=h;v=h}while(0);if(k[u>>2]|0){OBa(g);r=c;return}k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=v;k[u>>2]=g;v=k[k[i>>2]>>2]|0;if(!v)w=g;else{k[i>>2]=v;w=k[u>>2]|0}ui(k[a+16>>2]|0,w);w=a+20|0;k[w>>2]=(k[w>>2]|0)+1;r=c;return}function cma(a,b,c){a=a|0;b=b|0;c=c|0;hma(a,b,c,b);return}function dma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+16|0;e=d+12|0;f=d;g=a+136|0;h=k[g>>2]|0;q2a(f,329672,0);x=0;pa(57,(h|0)>-1&h>>>0>=c>>>0|0,f|0,63,267129,267174);h=x;x=0;if(h&1){h=Hc()|0;K2a(f);Sc(h|0)}K2a(f);f=(k[g>>2]|0)-c|0;c=a+200|0;g=b;h=a+204|0;i=k[h>>2]|0;do if(i){j=i;while(1){l=k[j+16>>2]|0;if(b>>>0>>0){m=k[j>>2]|0;if(!m){n=j;o=j;p=6;break}else q=m}else{if(l>>>0>=b>>>0){s=j;p=12;break}l=j+4|0;m=k[l>>2]|0;if(!m){t=l;u=j;p=10;break}else q=m}j=q}if((p|0)==6){k[e>>2]=o;v=n;w=o;break}else if((p|0)==10){k[e>>2]=u;v=t;w=u;break}else if((p|0)==12){k[e>>2]=s;if(!s){v=e;w=s;break}else y=s;z=y+20|0;k[z>>2]=f;r=d;return}}else{k[e>>2]=h;v=h;w=h}while(0);h=KBa(24)|0;k[h+16>>2]=g;k[h+20>>2]=0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=w;k[v>>2]=h;w=k[k[c>>2]>>2]|0;if(!w)A=h;else{k[c>>2]=w;A=k[v>>2]|0}ui(k[a+204>>2]|0,A);A=a+208|0;k[A>>2]=(k[A>>2]|0)+1;y=h;z=y+20|0;k[z>>2]=f;r=d;return}function ema(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c;e=a+200|0;f=a+204|0;g=k[f>>2]|0;a:do if(!g)h=0;else{i=g;while(1){j=k[i+16>>2]|0;if(b>>>0>>0)l=i;else{if(j>>>0>=b>>>0){h=1;break a}l=i+4|0}i=k[l>>2]|0;if(!i){h=0;break}}}while(0);q2a(d,329672,0);x=0;pa(57,h|0,d|0,69,267129,267281);h=x;x=0;if(h&1){h=Hc()|0;K2a(d);Sc(h|0)}K2a(d);d=k[f>>2]|0;if(!d){r=c;return}else{m=f;n=d}b:while(1){h=n;while(1){if((k[h+16>>2]|0)>>>0>=b>>>0){o=h;break}h=k[h+4>>2]|0;if(!h){p=m;break b}}n=k[o>>2]|0;if(!n){p=o;break}else m=o}if((p|0)==(f|0)){r=c;return}if(b>>>0<(k[p+16>>2]|0)>>>0){r=c;return}b=k[p+4>>2]|0;if(!b){f=p;while(1){o=k[f+8>>2]|0;if((k[o>>2]|0)==(f|0)){q=o;break}else f=o}}else{f=b;while(1){b=k[f>>2]|0;if(!b){q=f;break}else f=b}}if((k[e>>2]|0)==(p|0))k[e>>2]=q;q=a+208|0;k[q>>2]=(k[q>>2]|0)+-1;hk(d,p);OBa(p);r=c;return}function fma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+16|0;d=c;e=a+180|0;a=k[e>>2]|0;if(a){f=e;g=a;a:while(1){a=g;while(1){if((k[a+16>>2]|0)>>>0>=b>>>0){h=a;break}a=k[a+4>>2]|0;if(!a){i=f;break a}}g=k[h>>2]|0;if(!g){i=h;break}else f=h}if((i|0)!=(e|0)?(k[i+16>>2]|0)>>>0<=b>>>0:0)j=i;else l=8}else l=8;if((l|0)==8)j=e;q2a(d,267377,28);x=0;pa(57,(j|0)!=(e|0)|0,d|0,76,267129,267406);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);r=c;return k[j+20>>2]|0}return 0}function gma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a+204>>2]|0;if(!c){d=0;return d|0}else e=c;while(1){c=k[e+16>>2]|0;if(c>>>0>b>>>0)f=e;else{if(c>>>0>=b>>>0){d=1;g=7;break}f=e+4|0}e=k[f>>2]|0;if(!e){d=0;g=7;break}}if((g|0)==7)return d|0;return 0}function hma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;e=r;r=r+144|0;f=e+128|0;g=e+120|0;h=e+88|0;i=e;j=b+4|0;l=k[j>>2]|0;if(l){m=j;n=l;a:while(1){l=n;while(1){if((k[l+16>>2]|0)>>>0>=c>>>0){o=l;break}l=k[l+4>>2]|0;if(!l){p=m;break a}}n=k[o>>2]|0;if(!n){p=o;break}else m=o}if((p|0)!=(j|0)?(k[p+16>>2]|0)>>>0<=c>>>0:0){j=k[p+24>>2]|0;q2a(f,329672,0);x=0;pa(56,(j|0)==4|(j|0)==8|0,f|0,70,296096,267525);j=x;x=0;if(j&1){j=Hc()|0;K2a(f);Sc(j|0)}K2a(f);k[a>>2]=8;j=a+8|0;o=p+32|0;p=j+40|0;do{k[j>>2]=k[o>>2];j=j+4|0;o=o+4|0}while((j|0)<(p|0));o=a+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=a+56|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;r=e;return}}o=d+48|0;d=k[o>>2]|0;k[o>>2]=d+1;o=c;k[i>>2]=o;k[i+8>>2]=8;k[i+16>>2]=d;k[i+48>>2]=1;c=i+56|0;k[c>>2]=-1;k[c+4>>2]=-1;c=i+64|0;j=i+68|0;p=i+80|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;fb(340,g|0,b|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;g=M;c=k[p>>2]|0;if(c)j0a(c);c=k[j>>2]|0;if(!c){q=g;s=i;Sc(s|0)}j0a(c);q=g;s=i;Sc(s|0)}i=k[p>>2]|0;if(i)j0a(i);i=k[j>>2]|0;if(i)j0a(i);i=k[b+32>>2]|0;j=b+28|0;p=k[j>>2]|0;g=b+40|0;c=k[g>>2]|0;m=b+44|0;n=k[m>>2]|0;l=p;if((((i|0)==(p|0)?0:(i-p<<8)+-1|0)|0)==(n+c|0)){x=0;va(1515,b+24|0);b=x;x=0;if(b&1)t=20;else{u=k[g>>2]|0;v=k[m>>2]|0;w=k[j>>2]|0;t=16}}else{u=c;v=n;w=l;t=16}do if((t|0)==16){l=v+u|0;k[(k[w+(l>>>10<<2)>>2]|0)+((l&1023)<<2)>>2]=o;k[m>>2]=v+1;x=0;fb(140,f|0,329672,0);l=x;x=0;if(l&1)t=20;else{x=0;pa(56,1,f|0,70,296096,267525);l=x;x=0;if(l&1){l=Hc()|0;n=M;K2a(f);y=n;z=l;break}K2a(f);k[a>>2]=8;k[a+8>>2]=d;l=a+12|0;k[l>>2]=k[h>>2];k[l+4>>2]=k[h+4>>2];k[l+8>>2]=k[h+8>>2];k[l+12>>2]=k[h+12>>2];k[l+16>>2]=k[h+16>>2];k[l+20>>2]=k[h+20>>2];k[l+24>>2]=k[h+24>>2];k[a+40>>2]=1;l=a+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=a+56|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;r=e;return}}while(0);if((t|0)==20){t=Hc()|0;y=M;z=t}q=y;s=z;Sc(s|0)}function ima(a,b,c){a=a|0;b=b|0;c=c|0;jma(a,b,c);return}function jma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+64|0;e=d+40|0;f=d;g=b+4|0;b=k[g>>2]|0;if(b){h=g;i=b;a:while(1){b=i;while(1){if((k[b+16>>2]|0)>>>0>=c>>>0){j=b;break}b=k[b+4>>2]|0;if(!b){l=h;break a}}i=k[j>>2]|0;if(!i){l=j;break}else h=j}if((l|0)!=(g|0)?(k[l+16>>2]|0)>>>0<=c>>>0:0){c=k[l+24>>2]|0;q2a(e,329672,0);x=0;pa(56,(c|0)==4|(c|0)==8|0,e|0,70,296096,267525);c=x;x=0;if(c&1){c=Hc()|0;K2a(e);Sc(c|0)}K2a(e);k[a>>2]=8;m=a+8|0;n=l+32|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));l=a+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=a+56|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;r=d;return}}k[f>>2]=0;k[f+32>>2]=1;k[a>>2]=0;m=a+8|0;n=f;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));n=a+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=a+56|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;r=d;return}function kma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=r;r=r+32|0;e=d+16|0;f=d+4|0;g=d;h=k[c+36>>2]|0;if(((h|0)!=0?(j=iDa(h,5224,5312,0)|0,(j|0)!=0):0)?(i[j+72>>0]|0)!=0:0){hma(a,b,c,b);r=d;return}j=b+212|0;h=(k[j>>2]|0)!=(k[b+216>>2]|0);q2a(f,267584,29);x=0;pa(57,h|0,f|0,103,267129,267614);h=x;x=0;if(h&1){h=Hc()|0;K2a(f);Sc(h|0)}K2a(f);k[g>>2]=k[j>>2];k[e>>2]=k[g>>2];lma(a,b,c,e);r=d;return}function lma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;e=r;r=r+240|0;f=e+216|0;g=e+128|0;h=e+112|0;j=e+24|0;l=e+12|0;m=e;n2a(f,k[c+24>>2]|0);x=0;fb(143,g|0,c|0,1);c=x;x=0;if(c&1){c=Hc()|0;n=c;o=M;K2a(f);Sc(n|0)}c=k[d>>2]|0;d=b+216|0;a:do if((c|0)!=(k[d>>2]|0)){p=h+4|0;q=f+4|0;s=f+8|0;t=f+1|0;u=c;b:while(1){x=0;xa(590,h|0,(k[u>>2]|0)+60|0);v=x;x=0;if(v&1){w=8;break}v=k[h>>2]|0;y=k[p>>2]|0;if((v|0)==(y|0)){z=5;A=v}else{B=v;c:while(1){v=k[B>>2]|0;C=k[v+24>>2]|0;D=i[C>>0]|0;E=(D&1)==0;F=(D&255)>>>1;D=E?F:k[C+4>>2]|0;G=i[f>>0]|0;H=(G&1)==0;d:do if((D|0)==((H?(G&255)>>>1:k[q>>2]|0)|0)){I=H?t:k[s>>2]|0;if(E){if(D){J=F;K=C+1|0;L=I;while(1){if((i[K>>0]|0)!=(i[L>>0]|0))break d;J=J+-1|0;if(!J)break;else{K=K+1|0;L=L+1|0}}}}else if(ZLa(k[C+8>>2]|0,I,D)|0)break;if(!(i[v+77>>0]|0)){x=0;fb(143,j|0,v|0,1);L=x;x=0;if(L&1){w=22;break b}x=0;L=Ta(568,j|0,g|0)|0;K=x;x=0;if(K&1){w=25;break b}Dg(j);if(L){N=v;w=21;break c}}}while(0);B=B+4|0;if((B|0)==(y|0)){O=5;break}}if((w|0)==21){w=0;x=0;nb(138,a|0,b|0,N|0,b|0);y=x;x=0;if(y&1){w=23;break}else O=1}z=O;A=k[h>>2]|0}y=A;if(A){B=k[p>>2]|0;if((B|0)!=(A|0))k[p>>2]=B+(~((B+-4-y|0)>>>2)<<2);OBa(A)}if((z|0)!=5){w=47;break}u=u+4|0;if((u|0)==(k[d>>2]|0)){P=q;w=38;break a}}if((w|0)==8){q=Hc()|0;Q=M;R=q;w=9;break}else if((w|0)==22){q=Hc()|0;S=q;T=M;w=24}else if((w|0)==23){q=Hc()|0;S=q;T=M;w=24}else if((w|0)==25){q=Hc()|0;u=M;Dg(j);U=q;V=u}else if((w|0)==47){Dg(g);K2a(f);r=e;return}if((w|0)==24){U=S;V=T}u=k[h>>2]|0;q=u;if(!u){W=U;X=V}else{s=k[p>>2]|0;if((s|0)!=(u|0))k[p>>2]=s+(~((s+-4-q|0)>>>2)<<2);OBa(u);W=U;X=V}}else{P=f+4|0;w=38}while(0);do if((w|0)==38){k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;V=i[f>>0]|0;U=(V&1)==0?(V&255)>>>1:k[P>>2]|0;x=0;nb(83,m|0,267733,15,U+15|0);V=x;x=0;if(!(V&1)?(x=0,Fa(88,m|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,U|0)|0,U=x,x=0,!(U&1)):0){x=0;U=Ta(484,m|0,280207)|0;V=x;x=0;do if(V&1){h=Hc()|0;Y=h;Z=M}else{k[l>>2]=k[U>>2];k[l+4>>2]=k[U+4>>2];k[l+8>>2]=k[U+8>>2];k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;x=0;pa(57,0,l|0,246,267129,267749);h=x;x=0;if(h&1){h=Hc()|0;T=M;K2a(l);Y=h;Z=T;break}K2a(l);K2a(m);T=b+48|0;h=k[T>>2]|0;k[T>>2]=h+1;k[a>>2]=8;k[a+8>>2]=h;k[a+40>>2]=1;h=a+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=a+56|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;Dg(g);K2a(f);r=e;return}while(0);K2a(m);W=Y;X=Z;break}U=Hc()|0;V=M;K2a(m);Q=V;R=U;w=9}while(0);if((w|0)==9){W=R;X=Q}Dg(g);n=W;o=X;K2a(f);Sc(n|0)}function mma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=r;r=r+32|0;f=e+16|0;g=e+4|0;h=e;i=(k[b+212>>2]|0)!=(k[b+216>>2]|0);q2a(g,267584,29);x=0;pa(57,i|0,g|0,109,267129,267920);i=x;x=0;if(i&1){i=Hc()|0;K2a(g);Sc(i|0)}else{K2a(g);g=nma(b,d)|0;k[h>>2]=g;k[f>>2]=k[h>>2];lma(a,b,c,f);r=e;return}}function nma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+32|0;d=c+12|0;e=c;f=a+212|0;g=a+216|0;a=(k[f>>2]|0)!=(k[g>>2]|0);q2a(d,267584,29);x=0;pa(57,a|0,d|0,252,267129,268080);a=x;x=0;if(a&1){a=Hc()|0;h=M;K2a(d);i=h;j=a;Sc(j|0)}K2a(d);d=k[f>>2]|0;f=k[g>>2]|0;a:do if((d|0)==(f|0))l=d;else{g=d;while(1){if((k[g>>2]|0)==(b|0)){l=g;break a}g=g+4|0;if((g|0)==(f|0)){l=f;break}}}while(0);q2a(e,268226,40);x=0;pa(57,(l|0)!=(f|0)|0,e|0,254,267129,268080);f=x;x=0;if(!(f&1)){K2a(e);r=c;return l+4|0}l=Hc()|0;c=M;K2a(e);i=c;j=l;Sc(j|0);return 0}function oma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=nma(a,b)|0;b=a+216|0;if((c|0)==(k[b>>2]|0)){d=0;return d|0}else e=c;while(1){if(o4(k[e>>2]|0)|0){f=e;break}e=e+4|0;if((e|0)==(k[b>>2]|0)){d=0;g=5;break}}if((g|0)==5)return d|0;d=o4(k[f>>2]|0)|0;return d|0}function pma(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=a+44|0;c=k[b>>2]|0;if(!c){d=0;return d|0}e=a+28|0;f=a+40|0;g=a+16|0;a=k[e>>2]|0;h=c;c=k[f>>2]|0;a:while(1){i=k[g>>2]|0;j=c>>>10;if(!i){l=c;m=a;n=j;o=13;break}p=k[(k[a+(j<<2)>>2]|0)+((c&1023)<<2)>>2]|0;j=i;while(1){i=k[j+16>>2]|0;if(p>>>0>>0)q=j;else{if(i>>>0>=p>>>0)break;q=j+4|0}j=k[q>>2]|0;if(!j){d=p;o=14;break a}}p=h+-1|0;k[b>>2]=p;j=c+1|0;k[f>>2]=j;if(j>>>0>2047){OBa(k[a>>2]|0);i=(k[e>>2]|0)+4|0;k[e>>2]=i;r=(k[f>>2]|0)+-1024|0;k[f>>2]=r;s=i;t=k[b>>2]|0;u=r}else{s=a;t=p;u=j}if(!t){d=0;o=14;break}else{a=s;h=t;c=u}}if((o|0)==13){d=k[(k[m+(n<<2)>>2]|0)+((l&1023)<<2)>>2]|0;return d|0}else if((o|0)==14)return d|0;return 0}function qma(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;b=a+44|0;c=k[b>>2]|0;if(!c){d=0;return d|0}e=a+28|0;f=a+40|0;g=a+16|0;a=c;c=k[f>>2]|0;a:while(1){h=k[g>>2]|0;i=k[e>>2]|0;j=c>>>10;if(!h){l=c;m=i;n=j;o=13;break}p=c&1023;q=k[(k[i+(j<<2)>>2]|0)+(p<<2)>>2]|0;r=h;while(1){h=k[r+16>>2]|0;if(q>>>0>>0)s=r;else{if(h>>>0>=q>>>0)break;s=r+4|0}r=k[s>>2]|0;if(!r){t=p;u=i;v=j;break a}}j=a+-1|0;k[b>>2]=j;p=c+1|0;k[f>>2]=p;if(p>>>0>2047){OBa(k[i>>2]|0);k[e>>2]=(k[e>>2]|0)+4;r=(k[f>>2]|0)+-1024|0;k[f>>2]=r;w=k[b>>2]|0;x=r}else{w=j;x=p}if(!w){d=0;o=15;break}else{a=w;c=x}}if((o|0)==13){t=l&1023;u=m;v=n}else if((o|0)==15)return d|0;d=k[(k[u+(v<<2)>>2]|0)+(t<<2)>>2]|0;return d|0}function rma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;c=r;r=r+128|0;d=c+104|0;e=c+92|0;f=c+80|0;g=c+40|0;h=c+24|0;j=c+12|0;l=c;m=a+212|0;n=a+216|0;a=(k[m>>2]|0)!=(k[n>>2]|0);q2a(e,267584,29);x=0;pa(57,a|0,e|0,130,267129,268267);a=x;x=0;if(a&1){a=Hc()|0;o=M;K2a(e);p=o;q=a;Sc(q|0)}K2a(e);e=k[m>>2]|0;m=k[n>>2]|0;a:do if((e|0)==(m|0)){s=b+4|0;t=b}else{n=f+4|0;a=b+4|0;o=b+8|0;u=b+1|0;v=0;w=e;while(1){xU(f,(k[w>>2]|0)+60|0);y=k[f>>2]|0;z=k[n>>2]|0;A=(y|0)==(z|0);b:do if(A){B=4;C=v}else{D=i[b>>0]|0;E=(D&1)==0;F=E?(D&255)>>>1:k[a>>2]|0;D=E?u:k[o>>2]|0;E=(F|0)==0;G=y;while(1){H=k[G>>2]|0;I=k[H+24>>2]|0;J=i[I>>0]|0;K=(J&1)==0;L=(J&255)>>>1;c:do if(((K?L:k[I+4>>2]|0)|0)==(F|0)){if(!K)if(!(ZLa(k[I+8>>2]|0,D,F)|0)){B=1;C=H;break b}else break;if(E){B=1;C=H;break b}J=L;N=I+1|0;O=D;while(1){if((i[N>>0]|0)!=(i[O>>0]|0))break c;J=J+-1|0;if(!J){B=1;C=H;break b}else{N=N+1|0;O=O+1|0}}}while(0);G=G+4|0;if((G|0)==(z|0)){B=4;C=v;break}}}while(0);G=y;if(y){if(!A)k[n>>2]=z+(~((z+-4-G|0)>>>2)<<2);OBa(y)}w=w+4|0;if((B|0)!=4){P=C;break}if((w|0)==(m|0)){s=a;t=b;break a}else v=C}r=c;return P|0}while(0);P=g;c=P+36|0;do{k[P>>2]=0;P=P+4|0}while((P|0)<(c|0));P=g+20|0;c=g+24|0;k[c>>2]=0;k[g+28>>2]=0;k[g+32>>2]=0;k[g+36>>2]=-1;C=g+4|0;m=C+-4|0;B=C+16|0;f=g+8|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[g+4>>2]=20924;k[g>>2]=20888;k[P>>2]=20948;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;d=i[t>>0]|0;e=(d&1)==0?(d&255)>>>1:k[s>>2]|0;x=0;nb(83,l|0,268379,18,e+18|0);s=x;x=0;if(!(s&1)?(x=0,Fa(88,l|0,((i[t>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,e|0)|0,e=x,x=0,!(e&1)):0){x=0;e=Ta(484,l|0,280207)|0;b=x;x=0;if(b&1){b=Hc()|0;Q=b;R=M}else{k[j>>2]=k[e>>2];k[j+4>>2]=k[e+4>>2];k[j+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[h>>2]=21048;e=h+4|0;x=0;xa(604,e|0,j|0);b=x;x=0;if(b&1){b=Hc()|0;S=b;T=M}else{x=0;b=Ta(494,g|0,h|0)|0;g=x;x=0;if(!(g&1)){x=0;nb(87,b|0,268267,267129,136);x=0}b=Hc()|0;g=M;k[h>>2]=21048;K2a(e);S=b;T=g}K2a(j);Q=S;R=T}K2a(l);U=Q;V=R}else{R=Hc()|0;Q=M;K2a(l);U=R;V=Q}k[C>>2]=20980;k[m>>2]=21008;k[B>>2]=21032;K2a(f);k[P>>2]=20796;P=k[c>>2]|0;if(P){x=0;f=Ba(k[(k[P>>2]|0)+16>>2]|0,P|0)|0;P=x;x=0;if(P&1){P=Hc(0)|0;Fg(P)}if(f)k[c>>2]=0}p=V;q=U;Sc(q|0);return 0}function sma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+16|0;d=c;e=a+204|0;a=k[e>>2]|0;if(a){f=e;g=a;a:while(1){a=g;while(1){if((k[a+16>>2]|0)>>>0>=b>>>0){h=a;break}a=k[a+4>>2]|0;if(!a){i=f;break a}}g=k[h>>2]|0;if(!g){i=h;break}else f=h}if((i|0)!=(e|0)?(k[i+16>>2]|0)>>>0<=b>>>0:0)j=i;else l=8}else l=8;if((l|0)==8)j=e;q2a(d,268398,28);x=0;pa(57,(j|0)!=(e|0)|0,d|0,142,267129,268427);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);r=c;return k[j+20>>2]|0}return 0}function tma(a,b){a=a|0;b=b|0;return (k[a+136>>2]|0)+~b|0}function uma(a,b){a=a|0;b=b|0;return (k[a+136>>2]|0)+~b|0}function vma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d;f=b+192|0;b=k[f>>2]|0;if(b){g=f;h=b;a:while(1){b=h;while(1){if((k[b+16>>2]|0)>>>0>=c>>>0){i=b;break}b=k[b+4>>2]|0;if(!b){j=g;break a}}h=k[i>>2]|0;if(!h){j=i;break}else g=i}if((j|0)!=(f|0)?(k[j+16>>2]|0)>>>0<=c>>>0:0)l=j;else m=8}else m=8;if((m|0)==8)l=f;q2a(e,268540,30);x=0;pa(57,(l|0)!=(f|0)|0,e|0,159,267129,268571);f=x;x=0;if(f&1){f=Hc()|0;K2a(e);Sc(f|0)}else{K2a(e);e=a;f=l+24|0;m=e+40|0;do{k[e>>2]=k[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(m|0));k[a+40>>2]=k[l+64>>2];r=d;return}}function wma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c;k[d>>2]=1;k[d+8>>2]=86;k[d+40>>2]=1;e=d+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=d+56|0;f=d+60|0;g=d+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;k[d+64>>2]=b;x=0;Ta(539,a+48|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;b=k[g>>2]|0;if(b)j0a(b);b=k[f>>2]|0;if(!b)Sc(d|0);j0a(b);Sc(d|0)}else{d=k[g>>2]|0;if(d)j0a(d);d=k[f>>2]|0;if(!d){r=c;return a|0}j0a(d);r=c;return a|0}return 0}function xma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+32|0;d=c;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;e=d+8|0;f=d+4|0;g=d+16|0;h=d+20|0;x=0;va(1513,d|0);i=x;x=0;if(i&1){i=Hc()|0;Ema(d);Sc(i|0)}i=k[h>>2]|0;j=k[g>>2]|0;l=i+j|0;k[(k[(k[f>>2]|0)+(l>>>10<<2)>>2]|0)+((l&1023)<<2)>>2]=b;b=i+1|0;l=a+224|0;m=k[l>>2]|0;k[l>>2]=k[d>>2];k[d>>2]=m;m=a+228|0;l=k[m>>2]|0;n=k[f>>2]|0;k[m>>2]=n;k[f>>2]=l;l=a+232|0;f=k[l>>2]|0;k[l>>2]=k[e>>2];k[e>>2]=f;f=a+236|0;e=d+12|0;l=k[f>>2]|0;k[f>>2]=k[e>>2];k[e>>2]=l;l=a+240|0;e=k[l>>2]|0;k[l>>2]=j;k[g>>2]=e;e=a+244|0;g=k[e>>2]|0;k[e>>2]=b;k[h>>2]=g;if(b){b=i+j|0;j=k[(k[n+(b>>>10<<2)>>2]|0)+((b&1023)<<2)>>2]|0;b=j+8|0;n=k[b>>2]|0;i=k[b+4>>2]|0;b=k[j+16>>2]|0;g=k[j+20>>2]|0;if(!g){o=b;p=n;q=i;s=4}else{h0a(g);j=a+148|0;k[j>>2]=n;k[j+4>>2]=i;h0a(g);t=b;u=g;v=g;w=0}}else{o=0;p=-1;q=-1;s=4}if((s|0)==4){s=a+148|0;k[s>>2]=p;k[s+4>>2]=q;t=o;u=0;v=0;w=1}k[a+156>>2]=t;t=a+160|0;a=k[t>>2]|0;k[t>>2]=u;if(a)j0a(a);if(w){Ema(d);r=c;return}j0a(v);Ema(d);r=c;return}function yma(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;b=k[a+244>>2]|0;if(b){c=b+-1+(k[a+240>>2]|0)|0;b=k[(k[(k[a+228>>2]|0)+(c>>>10<<2)>>2]|0)+((c&1023)<<2)>>2]|0;c=b+8|0;d=k[c>>2]|0;e=k[c+4>>2]|0;c=k[b+16>>2]|0;f=k[b+20>>2]|0;if(!f){g=c;h=d;i=e;j=3}else{h0a(f);b=a+148|0;k[b>>2]=d;k[b+4>>2]=e;h0a(f);l=c;m=f;n=f;o=0}}else{g=0;h=-1;i=-1;j=3}if((j|0)==3){j=a+148|0;k[j>>2]=h;k[j+4>>2]=i;l=g;m=0;n=0;o=1}k[a+156>>2]=l;l=a+160|0;a=k[l>>2]|0;k[l>>2]=m;if(a)j0a(a);if(o)return;j0a(n);return}function zma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;e=r;r=r+96|0;f=e+84|0;g=e+72|0;h=e+56|0;j=e+68|0;l=e+36|0;m=e;n=e+24|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;a:do if(k[d+8>>2]|0){x=0;Ta(493,g|0,b|0)|0;o=x;x=0;if(!(o&1)){o=k[d>>2]|0;p=d+4|0;if((o|0)!=(p|0)){q=g+1|0;s=g+8|0;t=g+4|0;u=o;while(1){x=0;nb(139,h|0,g|0,u+16|0,u+28|0);o=x;x=0;if(o&1){v=5;break}if(!(i[g>>0]&1)){i[q>>0]=0;i[g>>0]=0}else{i[k[s>>2]>>0]=0;k[t>>2]=0}x=0;xa(603,g|0,0);o=x;x=0;if(o&1){v=13;break};k[g>>2]=k[h>>2];k[g+4>>2]=k[h+4>>2];k[g+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;K2a(h);o=k[u+4>>2]|0;if(!o){w=u;while(1){y=k[w+8>>2]|0;if((k[y>>2]|0)==(w|0)){z=y;break}else w=y}}else{w=o;while(1){y=k[w>>2]|0;if(!y){z=w;break}else w=y}}if((z|0)==(p|0)){A=g;v=19;break a}else u=z}if((v|0)==5){u=Hc()|0;B=M;C=u;break}else if((v|0)==13){u=Hc(0)|0;Fg(u)}}else{A=g;v=19}}else v=6}else{A=b;v=19}while(0);do if((v|0)==19){b=a+136|0;z=k[b>>2]|0;x=0;fb(140,f|0,329672,0);h=x;x=0;if(h&1)v=6;else{x=0;pa(57,(z|0)>-1|0,f|0,57,268696,268754);z=x;x=0;if(z&1){z=Hc()|0;h=M;K2a(f);B=h;C=z;break}K2a(f);k[j>>2]=k[b>>2];b=m+16|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;k[b>>2]=m;k[m>>2]=41856;k[m+4>>2]=c;k[m+8>>2]=j;x=0;z=db(76,l|0,A|0,a+48|0,m|0)|0;h=x;x=0;do if(!(h&1)?(x=0,fb(140,n|0,329672,0),d=x,x=0,!(d&1)):0){x=0;pa(57,z|0,n|0,220,267129,268819);d=x;x=0;if(d&1){d=Hc()|0;u=M;K2a(n);D=d;E=u;break}K2a(n);u=k[b>>2]|0;if((u|0)!=(m|0)){if(u)Sf[k[(k[u>>2]|0)+20>>2]&2047](u)}else Sf[k[(k[m>>2]|0)+16>>2]&2047](m);u=l+8|0;d=k[u>>2]|0;if(d){p=l+12|0;t=k[p>>2]|0;if((t|0)==(d|0))F=d;else{s=t;while(1){t=s+-8|0;k[p>>2]=t;q=k[s+-4>>2]|0;if(!q)G=t;else{j0a(q);G=k[p>>2]|0}if((G|0)==(d|0))break;else s=G}F=k[u>>2]|0}OBa(F)}s=k[l+4>>2]|0;if(!s){K2a(g);r=e;return}j0a(s);K2a(g);r=e;return}else v=39;while(0);if((v|0)==39){z=Hc()|0;D=z;E=M}z=k[b>>2]|0;if((z|0)!=(m|0)){if(z)Sf[k[(k[z>>2]|0)+20>>2]&2047](z)}else Sf[k[(k[z>>2]|0)+16>>2]&2047](z);z=l+8|0;h=k[z>>2]|0;if(h){s=l+12|0;d=k[s>>2]|0;if((d|0)==(h|0))H=h;else{p=d;while(1){d=p+-8|0;k[s>>2]=d;q=k[p+-4>>2]|0;if(!q)I=d;else{j0a(q);I=k[s>>2]|0}if((I|0)==(h|0))break;else p=I}H=k[z>>2]|0}OBa(H)}p=k[l+4>>2]|0;if(!p){J=D;K=E;K2a(g);Sc(J|0)}j0a(p);J=D;K=E;K2a(g);Sc(J|0)}}while(0);if((v|0)==6){v=Hc()|0;B=M;C=v}J=C;K=B;K2a(g);Sc(J|0)}function Ama(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+352|0;d=c+240|0;e=c+200|0;f=c+320|0;g=c+80|0;h=c+120|0;j=c;l=c+292|0;m=c+280|0;n=a+76|0;o=k[n>>2]|0;if((((k[a+80>>2]|0)-o|0)/116|0)>>>0>b>>>0)p=o;else{Kpb(n);p=k[n>>2]|0}n=p+(b*116|0)|0;k[h>>2]=1;k[h+8>>2]=80;k[h+40>>2]=1;b=h+48|0;k[b>>2]=-1;k[b+4>>2]=-1;b=h+56|0;p=h+60|0;o=h+72|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;x=0;xa(847,n|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;b=M;a=k[o>>2]|0;if(a)j0a(a);a=k[p>>2]|0;if(!a){q=b;s=h;Sc(s|0)}j0a(a);q=b;s=h;Sc(s|0)}h=k[o>>2]|0;if(h)j0a(h);h=k[p>>2]|0;if(h)j0a(h);rsa(m);h=k[m>>2]|0;p=m+4|0;o=k[p>>2]|0;if((h|0)==(o|0)){t=l;u=0;v=1}else{b=e+32|0;a=d+32|0;w=d+4|0;y=d+32|0;z=e+4|0;A=h;h=0;B=1;while(1){C=i[A>>0]|0;k[d>>2]=h;k[w>>2]=k[l>>2];k[w+4>>2]=k[l+4>>2];k[w+8>>2]=k[l+8>>2];k[w+12>>2]=k[l+12>>2];k[w+16>>2]=k[l+16>>2];k[w+20>>2]=k[l+20>>2];k[w+24>>2]=k[l+24>>2];k[y>>2]=B;HB(d,8,0);D=g;E=d;F=D+40|0;do{k[D>>2]=k[E>>2];D=D+4|0;E=E+4|0}while((D|0)<(F|0));k[e>>2]=0;k[b>>2]=1;k[d>>2]=C&255;k[a>>2]=1;YB(e,g,d);E=k[e>>2]|0;k[f>>2]=k[z>>2];k[f+4>>2]=k[z+4>>2];k[f+8>>2]=k[z+8>>2];k[f+12>>2]=k[z+12>>2];k[f+16>>2]=k[z+16>>2];k[f+20>>2]=k[z+20>>2];k[f+24>>2]=k[z+24>>2];D=k[b>>2]|0;k[l>>2]=k[f>>2];k[l+4>>2]=k[f+4>>2];k[l+8>>2]=k[f+8>>2];k[l+12>>2]=k[f+12>>2];k[l+16>>2]=k[f+16>>2];k[l+20>>2]=k[f+20>>2];k[l+24>>2]=k[f+24>>2];A=A+1|0;if((A|0)==(o|0)){t=l;u=E;v=D;break}else{h=E;B=D}}}k[j>>2]=2;k[j+8>>2]=u;u=j+12|0;k[u>>2]=k[t>>2];k[u+4>>2]=k[t+4>>2];k[u+8>>2]=k[t+8>>2];k[u+12>>2]=k[t+12>>2];k[u+16>>2]=k[t+16>>2];k[u+20>>2]=k[t+20>>2];k[u+24>>2]=k[t+24>>2];k[j+40>>2]=v;v=j+48|0;k[v>>2]=-1;k[v+4>>2]=-1;v=j+56|0;t=j+60|0;u=j+72|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;x=0;xa(847,n|0,j|0);j=x;x=0;if(j&1){j=Hc()|0;n=M;v=k[u>>2]|0;if(v)j0a(v);v=k[t>>2]|0;if(v)j0a(v);v=k[m>>2]|0;if(!v){q=n;s=j;Sc(s|0)}if((k[p>>2]|0)!=(v|0))k[p>>2]=v;OBa(v);q=n;s=j;Sc(s|0)}else{s=k[u>>2]|0;if(s)j0a(s);s=k[t>>2]|0;if(s)j0a(s);s=k[m>>2]|0;if(!s){r=c;return}if((k[p>>2]|0)!=(s|0))k[p>>2]=s;OBa(s);r=c;return}}function Bma(){k[10473]=0;k[10474]=0;k[10475]=0;return}function Cma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;d=r;r=r+16|0;e=d;f=KBa(104)|0;g=k[c>>2]|0;k[f+16>>2]=g;k[f+24>>2]=k[c+8>>2];h=f+32|0;j=c+16|0;l=h+40|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));k[f+72>>2]=k[c+56>>2];k[f+76>>2]=k[c+60>>2];j=c+64|0;k[f+80>>2]=k[j>>2];h=f+84|0;l=c+68|0;k[h>>2]=k[l>>2];k[j>>2]=0;k[l>>2]=0;k[f+88>>2]=k[c+72>>2];l=c+76|0;k[f+92>>2]=k[l>>2];j=f+96|0;m=c+80|0;k[j>>2]=k[m>>2];k[l>>2]=0;k[m>>2]=0;m=b+4|0;l=k[m>>2]|0;c=g;do if(l){g=l;while(1){n=k[g+16>>2]|0;if(c>>>0>>0){o=k[g>>2]|0;if(!o){p=g;q=g;s=4;break}else t=o}else{if(n>>>0>=c>>>0){u=g;s=9;break}n=g+4|0;o=k[n>>2]|0;if(!o){v=n;w=g;s=8;break}else t=o}g=t}if((s|0)==4){k[e>>2]=q;x=p;y=q;break}else if((s|0)==8){k[e>>2]=w;x=v;y=w;break}else if((s|0)==9){k[e>>2]=u;x=e;y=u;break}}else{k[e>>2]=m;x=m;y=m}while(0);m=k[x>>2]|0;if(!m){k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=y;k[x>>2]=f;y=k[k[b>>2]>>2]|0;if(!y)z=f;else{k[b>>2]=y;z=k[x>>2]|0}ui(k[b+4>>2]|0,z);z=b+8|0;k[z>>2]=(k[z>>2]|0)+1;A=1;B=f}else{A=0;B=m}k[a>>2]=B;i[a+4>>0]=A;if(A<<24>>24){r=d;return}A=k[j>>2]|0;if(A)j0a(A);A=k[h>>2]|0;if(A)j0a(A);OBa(f);r=d;return}function Dma(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;b=r;r=r+16|0;c=b+4|0;d=b;e=a+16|0;f=k[e>>2]|0;if(f>>>0>1023){k[e>>2]=f+-1024;f=a+4|0;e=k[f>>2]|0;g=k[e>>2]|0;h=e+4|0;k[f>>2]=h;e=a+8|0;i=k[e>>2]|0;j=a+12|0;l=k[j>>2]|0;m=l;n=i;do if((i|0)==(l|0)){o=k[a>>2]|0;p=o;if(h>>>0>o>>>0){q=h;s=((q-p>>2)+1|0)/-2|0;t=h+(s<<2)|0;u=n-q|0;Eyb(t|0,h|0,u|0)|0;q=t+(u>>2<<2)|0;k[e>>2]=q;k[f>>2]=(k[f>>2]|0)+(s<<2);v=q;break}q=m-p>>1;p=(q|0)==0?1:q;q=KBa(p<<2)|0;s=q;u=q+(p>>>2<<2)|0;t=u;w=q+(p<<2)|0;if((h|0)==(i|0)){y=t;z=o}else{o=u;u=h;p=t;while(1){k[o>>2]=k[u>>2];o=p+4|0;q=o;u=u+4|0;if((u|0)==(i|0)){A=q;break}else p=q}y=A;z=k[a>>2]|0}k[a>>2]=s;k[f>>2]=t;k[e>>2]=y;k[j>>2]=w;if(!z)v=y;else{OBa(z);v=k[e>>2]|0}}else v=i;while(0);k[v>>2]=g;k[e>>2]=(k[e>>2]|0)+4;r=b;return}e=a+8|0;g=k[e>>2]|0;v=a+4|0;i=k[v>>2]|0;z=g-i|0;y=z>>2;j=a+12|0;f=k[j>>2]|0;A=f-(k[a>>2]|0)|0;h=g;m=i;if(y>>>0>2>>>0){i=KBa(4096)|0;if((f|0)!=(g|0)){k[c>>2]=i;Pma(a,c);r=b;return}k[d>>2]=i;Qma(a,d);d=k[v>>2]|0;i=k[d>>2]|0;c=d+4|0;k[v>>2]=c;d=k[e>>2]|0;g=k[j>>2]|0;f=g;n=d;do if((d|0)==(g|0)){l=k[a>>2]|0;p=l;if(c>>>0>l>>>0){u=c;o=((u-p>>2)+1|0)/-2|0;q=c+(o<<2)|0;B=n-u|0;Eyb(q|0,c|0,B|0)|0;u=q+(B>>2<<2)|0;k[e>>2]=u;k[v>>2]=(k[v>>2]|0)+(o<<2);C=u;break}u=f-p>>1;p=(u|0)==0?1:u;u=KBa(p<<2)|0;o=u;B=u+(p>>>2<<2)|0;q=B;D=u+(p<<2)|0;if((c|0)==(d|0)){E=q;F=l}else{l=B;B=c;p=q;while(1){k[l>>2]=k[B>>2];l=p+4|0;u=l;B=B+4|0;if((B|0)==(d|0)){G=u;break}else p=u}E=G;F=k[a>>2]|0}k[a>>2]=o;k[v>>2]=q;k[e>>2]=E;k[j>>2]=D;if(!F)C=E;else{OBa(F);C=k[e>>2]|0}}else C=d;while(0);k[C>>2]=i;k[e>>2]=(k[e>>2]|0)+4;r=b;return}i=A>>1;A=(i|0)==0?1:i;i=KBa(A<<2)|0;C=i;d=i+(y<<2)|0;F=i+(A<<2)|0;x=0;E=Ba(563,4096)|0;G=x;x=0;a:do if(G&1)H=29;else{c=E;do if((y|0)==(A|0)){if((z|0)>0){I=d+(((y+1|0)/-2|0)<<2)|0;J=h;K=m;L=F;N=C;break}f=z>>1;n=(f|0)==0?1:f;x=0;f=Ba(563,n<<2|0)|0;g=x;x=0;if(g&1){H=29;break a}OBa(i);I=f+(n>>>2<<2)|0;J=k[e>>2]|0;K=k[v>>2]|0;L=f+(n<<2)|0;N=f}else{I=d;J=h;K=m;L=F;N=C}while(0);D=I;k[I>>2]=c;q=I+4|0;b:do if((J|0)==(K|0)){O=L;P=q;Q=D;R=N}else{o=D;f=N;n=q;g=L;p=J;c:while(1){p=p+-4|0;B=o;do if((B|0)==(f|0)){l=n;if(l>>>0>>0){w=l+((((g-n>>2)+1|0)/2|0)<<2)|0;t=n-o|0;s=w+(0-(t>>2)<<2)|0;Eyb(s|0,o|0,t|0)|0;S=s;T=s;U=g;V=w;W=f;break}w=g-f>>1;s=(w|0)==0?1:w;x=0;w=Ba(563,s<<2|0)|0;t=x;x=0;if(t&1){X=f;break c}t=w;u=w+((s+3|0)>>>2<<2)|0;Y=u;Z=w+(s<<2)|0;if((B|0)==(l|0))_=Y;else{s=u;w=B;$=Y;while(1){k[s>>2]=k[w>>2];s=$+4|0;aa=s;w=w+4|0;if((w|0)==(l|0)){_=aa;break}else $=aa}}if(!o){S=u;T=Y;U=Z;V=_;W=t}else{OBa(o);S=u;T=Y;U=Z;V=_;W=t}}else{S=B;T=o;U=g;V=n;W=f}while(0);k[S+-4>>2]=k[p>>2];B=T+-4|0;if((p|0)==(k[v>>2]|0)){O=U;P=V;Q=B;R=W;break b}else{o=B;f=W;n=V;g=U}}g=Hc()|0;ba=M;ca=g;da=X;break a}while(0);q=k[a>>2]|0;k[a>>2]=R;k[v>>2]=Q;k[e>>2]=P;k[j>>2]=O;if(!q){r=b;return}OBa(q);r=b;return}while(0);if((H|0)==29){H=Hc(0)|0;me(H|0)|0;OBa(k[d+-4>>2]|0);x=0;hb(46);x=0;d=Hc()|0;H=M;x=0;hb(45);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{ba=H;ca=d;da=C}}if(!da)Sc(ca|0);OBa(da);Sc(ca|0)}function Ema(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=a+4|0;c=k[b>>2]|0;d=a+16|0;e=k[d>>2]|0;f=c+(e>>>10<<2)|0;g=a+8|0;h=k[g>>2]|0;i=h;j=c;if((h|0)==(c|0)){l=0;m=a+20|0;n=0}else{h=a+20|0;o=(k[h>>2]|0)+e|0;l=(k[c+(o>>>10<<2)>>2]|0)+((o&1023)<<2)|0;m=h;n=(k[f>>2]|0)+((e&1023)<<2)|0}e=n;n=f;a:while(1){f=e;do{h=f;if((h|0)==(l|0))break a;f=h+4|0}while((f-(k[n>>2]|0)|0)!=4096);f=n+4|0;e=k[f>>2]|0;n=f}k[m>>2]=0;m=i-j>>2;if(m>>>0>2){j=c;do{OBa(k[j>>2]|0);j=(k[b>>2]|0)+4|0;k[b>>2]=j;c=(k[g>>2]|0)-j>>2}while(c>>>0>2);p=c}else p=m;switch(p|0){case 1:{k[d>>2]=512;break}case 2:{k[d>>2]=1024;break}default:{}}d=k[b>>2]|0;p=k[g>>2]|0;if((d|0)!=(p|0)){m=d;do{OBa(k[m>>2]|0);m=m+4|0}while((m|0)!=(p|0));p=k[b>>2]|0;b=k[g>>2]|0;if((b|0)!=(p|0))k[g>>2]=b+(~((b+-4-p|0)>>>2)<<2)}p=k[a>>2]|0;if(!p)return;OBa(p);return}function Fma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;e=r;r=r+64|0;f=e+56|0;g=e+40|0;h=e+24|0;j=e+16|0;l=e;m=e+32|0;n=i[c>>0]|0;o=(n&1)==0;p=o?c+1|0:k[c+8>>2]|0;q=o?(n&255)>>>1:k[c+4>>2]|0;c=p+q|0;n=c;o=p;s=i[d>>0]|0;t=(s&1)==0;u=t?d+1|0:k[d+8>>2]|0;v=u+(t?(s&255)>>>1:k[d+4>>2]|0)|0;d=u;u=i[b>>0]|0;s=(u&1)==0;t=s?b+1|0:k[b+8>>2]|0;w=s?(u&255)>>>1:k[b+4>>2]|0;u=t+w|0;s=u;a:do if(!w)x=11;else{if(!q){k[m>>2]=s;k[m+4>>2]=s;y=u;z=u;break}else A=t;b:while(1){B=A;c:do if((A|0)==(u|0)){C=B;D=p}else{E=p;F=A;G=B;while(1){if((E|0)==(c|0)){H=G;I=B;J=A;break b}if((i[F>>0]|0)!=(i[E>>0]|0)){C=G;D=E;break c}F=F+1|0;K=F;L=E+1|0;if((F|0)==(u|0)){C=K;D=L;break}else{E=L;G=K}}}while(0);if((D|0)==(c|0)){H=C;I=B;J=A;break}A=A+1|0;if((A|0)==(u|0)){x=11;break a}}k[m>>2]=I;k[m+4>>2]=H;y=J;z=H}while(0);if((x|0)==11){k[m>>2]=s;k[m+4>>2]=s;y=u;z=u}u=j;k[u>>2]=d;k[u+4>>2]=v;k[l>>2]=o;k[l+4>>2]=n;if((y|0)==(z|0)){n2a(a,b);r=e;return}else{z=h;k[z>>2]=d;k[z+4>>2]=v;k[g>>2]=k[l>>2];k[g+4>>2]=k[l+4>>2];k[g+8>>2]=k[l+8>>2];k[f>>2]=k[h>>2];k[f+4>>2]=k[h+4>>2];Oma(a,b,g,f,m,j);r=e;return}}function Gma(a){a=a|0;OBa(a);return}function Hma(a){a=a|0;var b=0,c=0,d=0;b=KBa(12)|0;k[b>>2]=41856;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function Ima(a,b){a=a|0;b=b|0;var c=0,d=0;k[b>>2]=41856;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return}function Jma(a){a=a|0;return}function Kma(a){a=a|0;OBa(a);return}function Lma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;e=r;r=r+336|0;f=e+312|0;g=e+272|0;h=e+256|0;j=e+240|0;l=e+160|0;m=e+80|0;n=e;o=k[a+4>>2]|0;p=k[a+8>>2]|0;a=k[d>>2]|0;d=k[o>>2]|0;q=k[o+4>>2]|0;o=b+16|0;a:do if((d|0)==(q|0))s=d;else{t=i[o>>0]|0;u=(t&1)==0;v=u?(t&255)>>>1:k[b+20>>2]|0;t=u?o+1|0:k[b+24>>2]|0;if(!v){u=d;while(1){w=i[u>>0]|0;if(!(((w&1)==0?(w&255)>>>1:k[u+4>>2]|0)|0)){s=u;break a}u=u+12|0;if((u|0)==(q|0)){y=0;break}}r=e;return y|0}else z=d;while(1){u=i[z>>0]|0;w=(u&1)==0;A=(u&255)>>>1;b:do if(((w?A:k[z+4>>2]|0)|0)==(v|0)){if(!w)if(!(ZLa(k[z+8>>2]|0,t,v)|0)){s=z;break a}else break;u=A;B=z+1|0;C=t;while(1){if((i[B>>0]|0)!=(i[C>>0]|0))break b;u=u+-1|0;if(!u){s=z;break a}else{B=B+1|0;C=C+1|0}}}while(0);z=z+12|0;if((z|0)==(q|0)){y=0;break}}r=e;return y|0}while(0);if((s|0)==(q|0)){y=0;r=e;return y|0}z=(k[c+88>>2]|0)-(k[p>>2]|0)+((q-s|0)/12|0)|0;if((z+-1|0)>>>0>15){k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;k[g+20>>2]=0;k[g+24>>2]=0;s=g+20|0;q=g+24|0;k[q>>2]=0;k[g+28>>2]=0;k[g+32>>2]=0;k[g+36>>2]=-1;p=g+4|0;d=p+-4|0;b=p+16|0;o=g+8|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);k[g+4>>2]=40936;k[g>>2]=40900;k[s>>2]=40960;x=0;fb(140,j|0,270638,45);t=x;x=0;if(t&1){t=Hc()|0;D=M;E=t}else{k[h>>2]=21048;t=h+4|0;x=0;xa(604,t|0,j|0);v=x;x=0;if(v&1){v=Hc()|0;F=M;G=v}else{x=0;v=Ta(596,g|0,h|0)|0;g=x;x=0;if(!(g&1)){x=0;nb(135,v|0,269161,267129,209);x=0}v=Hc()|0;g=M;k[h>>2]=21048;K2a(t);F=g;G=v}K2a(j);D=F;E=G}k[p>>2]=40992;k[d>>2]=41020;k[b>>2]=41044;K2a(o);k[s>>2]=20796;s=k[q>>2]|0;if(s){x=0;o=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(o)k[q>>2]=0}H=D;I=E;Sc(I|0)}if((a|0)==1){q2a(f,295946,34);K2a(f);k[l>>2]=1;k[l+8>>2]=z+127&255;k[l+40>>2]=1;a=l+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=l+56|0;E=l+60|0;D=l+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,c|0,l|0)|0;l=x;x=0;if(l&1){l=Hc()|0;a=M;q=k[D>>2]|0;if(q)j0a(q);q=k[E>>2]|0;if(!q){H=a;I=l;Sc(I|0)}j0a(q);H=a;I=l;Sc(I|0)}else{l=k[D>>2]|0;if(l)j0a(l);l=k[E>>2]|0;if(!l){y=1;r=e;return y|0}j0a(l);y=1;r=e;return y|0}}q2a(f,296239,35);K2a(f);k[m>>2]=1;k[m+8>>2]=z+143&255;k[m+40>>2]=1;z=m+48|0;k[z>>2]=-1;k[z+4>>2]=-1;z=m+56|0;f=m+60|0;l=m+72|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[z+16>>2]=0;x=0;Ta(539,c|0,m|0)|0;m=x;x=0;if(m&1){m=Hc()|0;z=M;E=k[l>>2]|0;if(E)j0a(E);E=k[f>>2]|0;if(!E){H=z;I=m;Sc(I|0)}j0a(E);H=z;I=m;Sc(I|0)}m=k[l>>2]|0;if(m)j0a(m);m=k[f>>2]|0;if(m)j0a(m);k[n>>2]=1;k[n+8>>2]=80;k[n+40>>2]=1;m=n+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=n+56|0;f=n+60|0;l=n+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,c|0,n|0)|0;n=x;x=0;if(n&1){n=Hc()|0;c=M;m=k[l>>2]|0;if(m)j0a(m);m=k[f>>2]|0;if(!m){H=c;I=n;Sc(I|0)}j0a(m);H=c;I=n;Sc(I|0)}else{I=k[l>>2]|0;if(I)j0a(I);I=k[f>>2]|0;if(!I){y=1;r=e;return y|0}j0a(I);y=1;r=e;return y|0}return 0}function Mma(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==268946?a+4|0:0)|0}function Nma(a){a=a|0;return 7320}function Oma(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;g=r;r=r+48|0;h=g+44|0;j=g+40|0;l=g+36|0;m=g+32|0;n=g+28|0;o=g+24|0;p=g+20|0;q=g+16|0;s=g+12|0;t=g+8|0;u=g+4|0;v=g;w=k[e>>2]|0;y=k[e+4>>2]|0;e=f;f=k[e>>2]|0;z=k[e+4>>2]|0;e=i[b>>0]|0;A=b+8|0;B=k[A>>2]|0;C=b+1|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;D=a+8|0;E=a+4|0;F=a+1|0;G=b+4|0;H=c+4|0;I=z;z=f;f=y;y=w;w=B;J=e;K=(e&1)==0?C:B;a:while(1){B=w;e=J;L=y;N=f;O=K;while(1){P=N;Q=i[a>>0]|0;R=(Q&1)==0;S=(R?F:k[D>>2]|0)+(R?(Q&255)>>>1:k[E>>2]|0)|0;if((L|0)==(P|0)){T=B;U=e;V=S;W=O;break a}k[m>>2]=S;k[n>>2]=O;k[o>>2]=L;x=0;k[l>>2]=k[m>>2];k[j>>2]=k[n>>2];k[h>>2]=k[o>>2];db(72,a|0,l|0,j|0,h|0)|0;S=x;x=0;if(S&1){X=16;break a}S=i[a>>0]|0;Q=(S&1)==0;k[p>>2]=(Q?F:k[D>>2]|0)+(Q?(S&255)>>>1:k[E>>2]|0);k[q>>2]=z;k[s>>2]=I;x=0;k[l>>2]=k[p>>2];k[j>>2]=k[q>>2];k[h>>2]=k[s>>2];db(72,a|0,l|0,j|0,h|0)|0;S=x;x=0;if(S&1){X=16;break a}S=i[b>>0]|0;Q=(S&1)==0;R=k[A>>2]|0;Y=(Q?C:R)+(Q?(S&255)>>>1:k[G>>2]|0)|0;Q=Y;b:do if((P|0)!=(Y|0)?(Z=k[c>>2]|0,_=k[H>>2]|0,(Z|0)!=(_|0)):0){$=N;aa=P;while(1){ba=$;c:do if((ba|0)==(Y|0)){ca=$;da=Z}else{ea=$;fa=Z;ga=ba;while(1){if((fa|0)==(_|0)){ha=$;ia=ea;break b}if((i[ga>>0]|0)!=(i[fa>>0]|0)){ca=ea;da=fa;break c}ga=ga+1|0;ja=ga;ka=fa+1|0;if((ga|0)==(Y|0)){ca=ja;da=ka;break}else{ea=ja;fa=ka}}}while(0);if((da|0)==(_|0)){ha=$;ia=ca;break b}ba=aa+1|0;if((ba|0)==(Y|0)){ha=Q;ia=Q;break}else{$=ba;aa=ba}}}else{ha=Q;ia=Q}while(0);if((ha|0)==(ia|0)){B=R;e=S;L=ha;N=ia;O=P}else{la=P;ma=S;na=R;oa=ia;pa=ha;break}}O=d;I=k[O+4>>2]|0;z=k[O>>2]|0;f=oa;y=pa;w=na;J=ma;K=la}if((X|0)==16){X=Hc()|0;qa=X;ra=M;K2a(a);Sc(qa|0)}X=(U&1)==0;la=(X?C:T)+(X?(U&255)>>>1:k[G>>2]|0)|0;k[t>>2]=V;k[u>>2]=W;k[v>>2]=la;x=0;k[l>>2]=k[t>>2];k[j>>2]=k[u>>2];k[h>>2]=k[v>>2];db(72,a|0,l|0,j|0,h|0)|0;h=x;x=0;if(!(h&1)){r=g;return}g=Hc()|0;qa=g;ra=M;K2a(a);Sc(qa|0)}function Pma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+8|0;d=k[c>>2]|0;e=a+12|0;f=k[e>>2]|0;g=f;h=d;do if((d|0)==(f|0)){i=a+4|0;j=k[i>>2]|0;l=k[a>>2]|0;m=l;if(j>>>0>l>>>0){n=j;o=((n-m>>2)+1|0)/-2|0;p=j+(o<<2)|0;q=h-n|0;Eyb(p|0,j|0,q|0)|0;n=p+(q>>2<<2)|0;k[c>>2]=n;k[i>>2]=(k[i>>2]|0)+(o<<2);r=n;break}n=g-m>>1;m=(n|0)==0?1:n;n=KBa(m<<2)|0;o=n;q=n+(m>>>2<<2)|0;p=q;s=n+(m<<2)|0;if((j|0)==(d|0)){t=p;u=l}else{l=q;q=j;j=p;while(1){k[l>>2]=k[q>>2];l=j+4|0;m=l;q=q+4|0;if((q|0)==(d|0)){v=m;break}else j=m}t=v;u=k[a>>2]|0}k[a>>2]=o;k[i>>2]=p;k[c>>2]=t;k[e>>2]=s;if(!u)r=t;else{OBa(u);r=k[c>>2]|0}}else r=d;while(0);k[r>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+4;return}function Qma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[c>>2]|0;e=k[a>>2]|0;f=e;do if((d|0)==(e|0)){g=a+8|0;h=k[g>>2]|0;i=a+12|0;j=k[i>>2]|0;l=j;if(h>>>0>>0){j=h;m=((l-j>>2)+1|0)/2|0;n=j-d|0;j=h+(m<<2)+(0-(n>>2)<<2)|0;Eyb(j|0,d|0,n|0)|0;k[c>>2]=j;k[g>>2]=(k[g>>2]|0)+(m<<2);o=j;break}j=l-f>>1;l=(j|0)==0?1:j;j=KBa(l<<2)|0;m=j;n=j+((l+3|0)>>>2<<2)|0;p=n;q=j+(l<<2)|0;if((d|0)==(h|0)){r=p;s=d}else{l=n;j=d;t=p;while(1){k[l>>2]=k[j>>2];l=t+4|0;u=l;j=j+4|0;if((j|0)==(h|0)){v=u;break}else t=u}r=v;s=k[a>>2]|0}k[a>>2]=m;k[c>>2]=p;k[g>>2]=r;k[i>>2]=q;if(!s)o=n;else{OBa(s);o=k[c>>2]|0}}else o=d;while(0);k[o+-4>>2]=k[b>>2];k[c>>2]=(k[c>>2]|0)+-4;return}function Rma(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+12>>2]&2047](b,a);return}function Sma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+80|0;d=c+60|0;e=c;f=c+56|0;g=c+48|0;h=c+40|0;i=c+36|0;j=c+24|0;l=b+48|0;m=k[l>>2]|0;if(!m){r=c;return}n=Vf[k[(k[m>>2]|0)+16>>2]&1023](m)|0;m=k[n+4>>2]|0;o=k[n+8>>2]|0;n=o;p=(o|0)==0;if(!p)h0a(o);x=0;fb(140,d|0,269785,31);q=x;x=0;do if(!(q&1)){x=0;pa(57,(m|0)!=0|0,d|0,52,269817,269865);s=x;x=0;if(s&1){s=Hc()|0;t=M;K2a(d);u=t;v=s;w=n;break}K2a(d);s=a+8|0;x=0;fb(327,e|0,k[s>>2]|0,b|0);t=x;x=0;if(!(t&1)){t=k[l>>2]|0;x=0;xa(k[(k[t>>2]|0)+12>>2]|0,t|0,a|0);t=x;x=0;do if((!(t&1)?(x=0,y=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,z=x,x=0,!(z&1)):0)?(z=k[y+4>>2]|0,x=0,y=Ta(k[(k[z>>2]|0)+68>>2]|0,z|0,0)|0,z=x,x=0,!(z&1)):0){z=k[s>>2]|0;if(y){k[f>>2]=z;x=0;xa(k[(k[m>>2]|0)+64>>2]|0,g|0,m|0);y=x;x=0;if(y&1){A=n;B=21;break}x=0;nb(137,f|0,m|0,k[g>>2]|0,0);y=x;x=0;if(y&1){y=Hc()|0;C=M;D=k[g+4>>2]|0;if(!D){E=C;F=y;G=n;break}j0a(D);E=C;F=y;G=n;break}y=k[g+4>>2]|0;if(y)j0a(y);x=0;xa(k[(k[m>>2]|0)+64>>2]|0,h|0,m|0);y=x;x=0;if(y&1){A=n;B=21;break}y=k[h>>2]|0;C=h+4|0;D=k[C>>2]|0;k[h>>2]=0;k[C>>2]=0;if(!p?(j0a(o),H=k[C>>2]|0,(H|0)!=0):0){j0a(H);I=y;J=D}else{I=y;J=D}}else{k[i>>2]=z;x=0;z=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;D=x;x=0;if(D&1){A=n;B=21;break}x=0;nb(137,i|0,m|0,k[z+4>>2]|0,0);z=x;x=0;if(z&1){A=n;B=21;break}x=0;z=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;D=x;x=0;if(D&1){A=n;B=21;break}D=k[z+4>>2]|0;y=k[z+8>>2]|0;z=y;if(y)h0a(y);if(p){I=D;J=z}else{j0a(o);I=D;J=z}}x=0;fb(341,j|0,k[s>>2]|0,b|0);z=x;x=0;if(!(z&1)?(x=0,nb(66,j|0,I|0,b+8|0,1),z=x,x=0,!(z&1)):0){oy(e);if(!J){r=c;return}j0a(J);r=c;return}else{A=J;B=21}}else{A=n;B=21}while(0);if((B|0)==21){s=Hc()|0;E=M;F=s;G=A}oy(e);u=E;v=F;w=G}else B=19}else B=19;while(0);if((B|0)==19){B=Hc()|0;u=M;v=B;w=n}if(!w)Sc(v|0);j0a(w);Sc(v|0)}function Tma(a){a=a|0;return k[a+8>>2]|0}function Uma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+16|0;e=c+4|0;f=c;g=(i[b+58>>0]|0)!=0;q2a(e,329672,0);x=0;pa(57,g|0,e|0,72,269817,269983);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}K2a(e);e=b+48|0;g=k[e>>2]|0;Tf[k[(k[g>>2]|0)+12>>2]&2047](g,a);g=a+8|0;k[f>>2]=k[g>>2];a=k[e>>2]|0;e=(Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0)+4|0;a=k[e>>2]|0;e=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;tla(f,a,k[e>>2]|0,0);e=k[g>>2]|0;a=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;b=k[a>>2]|0;a=Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0;q2a(d,295946,34);x=0;pa(51,a>>>0<16|0,d|0,210,295981,296025);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}else{K2a(d);Iia(e,a+128&255)|0;wma(k[g>>2]|0,2)|0;r=c;return}}function Vma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0;c=r;r=r+2096|0;d=c+2072|0;e=c+1592|0;f=c+1512|0;g=c+1432|0;h=c+1352|0;j=c+1272|0;l=c+1192|0;m=c+2060|0;n=c+1112|0;o=c+2048|0;p=c+1032|0;q=c+952|0;s=c+872|0;t=c+2036|0;u=c+792|0;v=c+712|0;w=c+632|0;y=c+552|0;z=c+472|0;A=c+392|0;B=c+312|0;C=c+232|0;D=c+2024|0;E=c+208|0;F=c+1936|0;G=c+1920|0;H=c+160|0;I=c+1880|0;J=c+1868|0;K=c+1856|0;L=c+1852|0;N=c+1848|0;O=c+1844|0;P=c+120|0;Q=c+80|0;R=c+40|0;S=c+1840|0;T=c+1836|0;U=c+1824|0;V=c+1820|0;W=c+1808|0;X=c;Y=c+1780|0;Z=c+1912|0;_=c+1768|0;$=c+1752|0;aa=c+1748|0;ba=c+1744|0;ca=c+1732|0;da=c+1720|0;ea=c+1704|0;fa=c+1696|0;ga=c+1684|0;ha=c+1672|0;ia=(i[b+58>>0]|0)==0;q2a(D,329672,0);x=0;pa(57,ia|0,D|0,83,269817,270100);ia=x;x=0;if(ia&1){ia=Hc()|0;ja=M;K2a(D);ka=ia;la=ja;Sc(ka|0)}K2a(D);D=a+8|0;xka(E,k[D>>2]|0,b);x=0;xa(742,F|0,b|0);a=x;x=0;if(a&1){a=Hc()|0;ma=a;na=M}else{x=0;xa(591,G|0,F|0);a=x;x=0;if(!(a&1)){x=0;fb(342,H|0,k[D>>2]|0,b|0);a=x;x=0;do if(!(a&1)){ja=(k[D>>2]|0)+48|0;k[C>>2]=2;ia=C+8|0;oa=H;qa=ia+40|0;do{k[ia>>2]=k[oa>>2];ia=ia+4|0;oa=oa+4|0}while((ia|0)<(qa|0));ra=C+48|0;k[ra>>2]=-1;k[ra+4>>2]=-1;ra=C+56|0;sa=C+60|0;ta=C+72|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[ra+16>>2]=0;x=0;Ta(539,ja|0,C|0)|0;ra=x;x=0;if(ra&1){ra=Hc()|0;ua=M;va=k[ta>>2]|0;if(va)j0a(va);va=k[sa>>2]|0;if(!va){wa=ua;ya=ra;za=33;break}j0a(va);wa=ua;ya=ra;za=33;break}ra=k[ta>>2]|0;if(ra)j0a(ra);ra=k[sa>>2]|0;if(ra)j0a(ra);ra=k[H+40>>2]|0;k[B>>2]=2;k[B+8>>2]=ra;ra=B+12|0;k[ra>>2]=k[I>>2];k[ra+4>>2]=k[I+4>>2];k[ra+8>>2]=k[I+8>>2];k[ra+12>>2]=k[I+12>>2];k[ra+16>>2]=k[I+16>>2];k[ra+20>>2]=k[I+20>>2];k[ra+24>>2]=k[I+24>>2];k[B+40>>2]=1;ra=B+48|0;k[ra>>2]=-1;k[ra+4>>2]=-1;ra=B+56|0;sa=B+60|0;ta=B+72|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[ra+16>>2]=0;x=0;Ta(539,ja|0,B|0)|0;ra=x;x=0;if(ra&1){ra=Hc()|0;ua=M;va=k[ta>>2]|0;if(va)j0a(va);va=k[sa>>2]|0;if(!va){wa=ua;ya=ra;za=33;break}j0a(va);wa=ua;ya=ra;za=33;break}ra=k[ta>>2]|0;if(ra)j0a(ra);ra=k[sa>>2]|0;if(ra)j0a(ra);x=0;ra=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;sa=x;x=0;if(!(sa&1)){sa=k[ra+4>>2]|0;ta=k[ra+8>>2]|0;ra=ta;if(ta)h0a(ta);ta=G+4|0;a:do if((k[ta>>2]|0)==(k[G>>2]|0)){Aa=ra;Ca=sa;za=170}else{ua=u+8|0;va=u+40|0;Da=u+48|0;Ea=u+56|0;Fa=u+60|0;Ga=u+72|0;Ha=(k[10454]|0)>>>0>63;Ia=A+8|0;Ja=A+40|0;Ka=A+48|0;La=A+56|0;Ma=A+60|0;Na=A+72|0;Oa=P+32|0;Pa=z+8|0;Qa=z+48|0;Ra=z+56|0;Sa=z+60|0;Ua=z+72|0;Va=Q+32|0;Wa=y+8|0;Xa=y+48|0;Ya=y+56|0;Za=y+60|0;_a=y+72|0;$a=w+8|0;ab=w+40|0;bb=w+48|0;cb=w+56|0;db=w+60|0;eb=w+72|0;gb=R+32|0;hb=v+8|0;ib=v+48|0;jb=v+56|0;kb=v+60|0;lb=v+72|0;mb=sa;ob=ra;pb=0;b:while(1){do if(!mb)za=118;else{qb=mb;rb=iDa(qb,168,6784,0)|0;if(!rb){sb=iDa(qb,168,6704,0)|0;if(!sb){za=118;break}qb=k[D>>2]|0;k[u>>2]=1;k[ua>>2]=80;k[va>>2]=1;tb=Da;k[tb>>2]=-1;k[tb+4>>2]=-1;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[Ea+16>>2]=0;x=0;Ta(539,qb+48|0,u|0)|0;qb=x;x=0;if(qb&1){ub=ob;za=105;break b}qb=k[Ga>>2]|0;if(qb)j0a(qb);qb=k[Fa>>2]|0;if(qb)j0a(qb);k[S>>2]=k[D>>2];x=0;fb(338,S|0,1-pb+((k[ta>>2]|0)-(k[G>>2]|0)>>3)|0,1);qb=x;x=0;if(qb&1){vb=ob;za=94;break b}k[T>>2]=k[D>>2];x=0;fb(318,T|0,sb|0,1);qb=x;x=0;if(qb&1){vb=ob;za=94;break b}qb=sb+36|0;tb=k[qb>>2]|0;x=0;fb(140,t|0,329672,0);wb=x;x=0;if(wb&1){vb=ob;za=94;break b}x=0;pa(57,(tb|0)!=0|0,t|0,588,285183,276209);tb=x;x=0;if(tb&1){xb=ob;za=113;break b}K2a(t);tb=k[qb>>2]|0;qb=k[sb+40>>2]|0;sb=qb;if(qb)h0a(qb);if(!ob){yb=sb;zb=tb;break}j0a(ob);yb=sb;zb=tb;break}x=0;fb(140,J|0,329672,0);tb=x;x=0;if(tb&1){vb=ob;za=94;break b}x=0;pa(57,Ha|0,J|0,99,269817,270100);tb=x;x=0;if(tb&1){Ab=ob;za=97;break b}K2a(J);tb=k[(k[G>>2]|0)+(pb<<3)>>2]|0;x=0;sb=Ba(k[(k[tb>>2]|0)+36>>2]|0,tb|0)|0;tb=x;x=0;if(tb&1){vb=ob;za=94;break b}x=0;fb(140,K|0,270212,70);tb=x;x=0;if(tb&1){vb=ob;za=94;break b}x=0;pa(57,sb^1|0,K|0,103,269817,270100);sb=x;x=0;if(sb&1){Bb=ob;za=98;break b}K2a(K);sb=k[D>>2]|0;k[A>>2]=1;k[Ia>>2]=80;k[Ja>>2]=1;tb=Ka;k[tb>>2]=-1;k[tb+4>>2]=-1;k[La>>2]=0;k[La+4>>2]=0;k[La+8>>2]=0;k[La+12>>2]=0;k[La+16>>2]=0;x=0;Ta(539,sb+48|0,A|0)|0;sb=x;x=0;if(sb&1){Cb=ob;za=46;break b}sb=k[Na>>2]|0;if(sb)j0a(sb);sb=k[Ma>>2]|0;if(sb)j0a(sb);k[L>>2]=k[D>>2];x=0;xa(848,L|0,32);sb=x;x=0;if(sb&1){vb=ob;za=94;break b}k[N>>2]=k[D>>2];x=0;fb(338,N|0,((k[ta>>2]|0)-(k[G>>2]|0)>>3)-pb|0,1);sb=x;x=0;if(sb&1){vb=ob;za=94;break b}k[O>>2]=k[D>>2];x=0;xa(848,O|0,0);sb=x;x=0;if(sb&1){vb=ob;za=94;break b}sb=k[D>>2]|0;k[P>>2]=64;k[Oa>>2]=1;tb=sb+48|0;k[z>>2]=2;ia=Pa;oa=P;qa=ia+40|0;do{k[ia>>2]=k[oa>>2];ia=ia+4|0;oa=oa+4|0}while((ia|0)<(qa|0));sb=Qa;k[sb>>2]=-1;k[sb+4>>2]=-1;k[Ra>>2]=0;k[Ra+4>>2]=0;k[Ra+8>>2]=0;k[Ra+12>>2]=0;k[Ra+16>>2]=0;x=0;Ta(539,tb|0,z|0)|0;sb=x;x=0;if(sb&1){Db=ob;za=58;break b}sb=k[Ua>>2]|0;if(sb)j0a(sb);sb=k[Sa>>2]|0;if(sb)j0a(sb);k[Q>>2]=0;k[Va>>2]=1;k[y>>2]=2;ia=Wa;oa=Q;qa=ia+40|0;do{k[ia>>2]=k[oa>>2];ia=ia+4|0;oa=oa+4|0}while((ia|0)<(qa|0));sb=Xa;k[sb>>2]=-1;k[sb+4>>2]=-1;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[Ya+16>>2]=0;x=0;Ta(539,tb|0,y|0)|0;sb=x;x=0;if(sb&1){Eb=ob;za=67;break b}sb=k[_a>>2]|0;if(sb)j0a(sb);sb=k[Za>>2]|0;if(sb)j0a(sb);k[w>>2]=1;k[$a>>2]=32;k[ab>>2]=1;sb=bb;k[sb>>2]=-1;k[sb+4>>2]=-1;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[cb+16>>2]=0;x=0;Ta(539,tb|0,w|0)|0;sb=x;x=0;if(sb&1){Fb=ob;za=76;break b}sb=k[eb>>2]|0;if(sb)j0a(sb);sb=k[db>>2]|0;if(sb)j0a(sb);sb=k[D>>2]|0;k[R>>2]=0;k[gb>>2]=1;qb=sb+48|0;k[v>>2]=2;ia=hb;oa=R;qa=ia+40|0;do{k[ia>>2]=k[oa>>2];ia=ia+4|0;oa=oa+4|0}while((ia|0)<(qa|0));tb=ib;k[tb>>2]=-1;k[tb+4>>2]=-1;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,qb|0,v|0)|0;tb=x;x=0;if(tb&1){Gb=ob;za=85;break b}tb=k[lb>>2]|0;if(tb)j0a(tb);tb=k[kb>>2]|0;if(tb)j0a(tb);tb=k[rb+32>>2]|0;sb=k[rb+36>>2]|0;wb=sb;if(sb)h0a(sb);if(!ob){yb=wb;zb=tb;break}j0a(ob);yb=wb;zb=tb}while(0);if((za|0)==118){za=0;x=0;fb(140,U|0,270283,61);tb=x;x=0;if(tb&1){vb=ob;za=94;break}x=0;pa(57,0,U|0,125,269817,270100);tb=x;x=0;if(tb&1){Hb=ob;za=121;break}K2a(U);yb=ob;zb=mb}pb=pb+1|0;tb=(k[ta>>2]|0)-(k[G>>2]|0)>>3;if(pb>>>0>=tb>>>0){Ib=yb;Jb=zb;Kb=tb;za=28;break}else{mb=zb;ob=yb}}switch(za|0){case 28:{if((Kb|0)!=1){if(Kb>>>0<=1){Aa=Ib;Ca=Jb;za=170;break a}ob=k[D>>2]|0;x=0;fb(140,o|0,296239,35);mb=x;x=0;if(mb&1){Lb=Ib;za=95;break a}x=0;pa(51,(Kb+-1|0)>>>0<16|0,o|0,217,295981,296275);mb=x;x=0;if(mb&1){mb=Hc()|0;pb=M;K2a(o);Mb=Ib;Nb=pb;Ob=mb;za=96;break a}K2a(o);x=0;Ta(594,ob|0,Kb+143&255|0)|0;ob=x;x=0;if(ob&1){Lb=Ib;za=95;break a}ob=k[D>>2]|0;k[n>>2]=1;k[n+8>>2]=80;k[n+40>>2]=1;mb=n+48|0;k[mb>>2]=-1;k[mb+4>>2]=-1;mb=n+56|0;pb=n+60|0;jb=n+72|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;x=0;Ta(539,ob+48|0,n|0)|0;ob=x;x=0;if(ob&1){ob=Hc()|0;mb=M;ib=k[jb>>2]|0;if(ib)j0a(ib);ib=k[pb>>2]|0;if(!ib){Mb=Ib;Nb=mb;Ob=ob;za=96;break a}j0a(ib);Mb=Ib;Nb=mb;Ob=ob;za=96;break a}ob=k[jb>>2]|0;if(ob)j0a(ob);ob=k[pb>>2]|0;if(ob)j0a(ob);ob=k[D>>2]|0;pb=(k[ta>>2]|0)-(k[G>>2]|0)>>3;x=0;fb(140,m|0,296239,35);jb=x;x=0;if(jb&1){Lb=Ib;za=95;break a}x=0;pa(51,(pb+-1|0)>>>0<16|0,m|0,217,295981,296275);jb=x;x=0;if(jb&1){jb=Hc()|0;mb=M;K2a(m);Mb=Ib;Nb=mb;Ob=jb;za=96;break a}K2a(m);x=0;Ta(594,ob|0,pb+143&255|0)|0;pb=x;x=0;if(pb&1){Lb=Ib;za=95;break a}k[V>>2]=k[D>>2];x=0;xa(822,V|0,((k[ta>>2]|0)-(k[G>>2]|0)>>3)+-1|0);pb=x;x=0;if(pb&1){Lb=Ib;za=95;break a}else{Aa=Ib;Ca=Jb;za=170;break a}}pb=k[D>>2]|0;k[s>>2]=1;k[s+8>>2]=145;k[s+40>>2]=1;ob=s+48|0;k[ob>>2]=-1;k[ob+4>>2]=-1;ob=s+56|0;jb=s+60|0;mb=s+72|0;ib=pb+48|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[ob+16>>2]=0;x=0;Ta(539,ib|0,s|0)|0;ob=x;x=0;if(ob&1){ob=Hc()|0;pb=M;hb=k[mb>>2]|0;if(hb)j0a(hb);hb=k[jb>>2]|0;if(!hb){Mb=Ib;Nb=pb;Ob=ob;za=96;break a}j0a(hb);Mb=Ib;Nb=pb;Ob=ob;za=96;break a}ob=k[mb>>2]|0;if(ob)j0a(ob);ob=k[jb>>2]|0;if(ob)j0a(ob);k[q>>2]=1;k[q+8>>2]=80;k[q+40>>2]=1;ob=q+48|0;k[ob>>2]=-1;k[ob+4>>2]=-1;ob=q+56|0;jb=q+60|0;mb=q+72|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[ob+16>>2]=0;x=0;Ta(539,ib|0,q|0)|0;ob=x;x=0;if(ob&1){ob=Hc()|0;pb=M;hb=k[mb>>2]|0;if(hb)j0a(hb);hb=k[jb>>2]|0;if(!hb){Mb=Ib;Nb=pb;Ob=ob;za=96;break a}j0a(hb);Mb=Ib;Nb=pb;Ob=ob;za=96;break a}ob=k[mb>>2]|0;if(ob)j0a(ob);ob=k[jb>>2]|0;if(ob)j0a(ob);k[p>>2]=1;k[p+8>>2]=144;k[p+40>>2]=1;ob=p+48|0;k[ob>>2]=-1;k[ob+4>>2]=-1;ob=p+56|0;jb=p+60|0;mb=p+72|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[ob+16>>2]=0;x=0;Ta(539,ib|0,p|0)|0;ib=x;x=0;if(ib&1){ib=Hc()|0;ob=M;pb=k[mb>>2]|0;if(pb)j0a(pb);pb=k[jb>>2]|0;if(!pb){Mb=Ib;Nb=ob;Ob=ib;za=96;break a}j0a(pb);Mb=Ib;Nb=ob;Ob=ib;za=96;break a}ib=k[mb>>2]|0;if(ib)j0a(ib);ib=k[jb>>2]|0;if(ib)j0a(ib);Aa=Ib;Ca=Jb;za=170;break a;break}case 46:{ib=Hc()|0;jb=M;mb=k[Na>>2]|0;if(mb)j0a(mb);mb=k[Ma>>2]|0;if(!mb){Mb=Cb;Nb=jb;Ob=ib;za=96;break a}j0a(mb);Mb=Cb;Nb=jb;Ob=ib;za=96;break a;break}case 58:{ib=Hc()|0;jb=M;mb=k[Ua>>2]|0;if(mb)j0a(mb);mb=k[Sa>>2]|0;if(!mb){Mb=Db;Nb=jb;Ob=ib;za=96;break a}j0a(mb);Mb=Db;Nb=jb;Ob=ib;za=96;break a;break}case 67:{ib=Hc()|0;jb=M;mb=k[_a>>2]|0;if(mb)j0a(mb);mb=k[Za>>2]|0;if(!mb){Mb=Eb;Nb=jb;Ob=ib;za=96;break a}j0a(mb);Mb=Eb;Nb=jb;Ob=ib;za=96;break a;break}case 76:{ib=Hc()|0;jb=M;mb=k[eb>>2]|0;if(mb)j0a(mb);mb=k[db>>2]|0;if(!mb){Mb=Fb;Nb=jb;Ob=ib;za=96;break a}j0a(mb);Mb=Fb;Nb=jb;Ob=ib;za=96;break a;break}case 85:{ib=Hc()|0;jb=M;mb=k[lb>>2]|0;if(mb)j0a(mb);mb=k[kb>>2]|0;if(!mb){Mb=Gb;Nb=jb;Ob=ib;za=96;break a}j0a(mb);Mb=Gb;Nb=jb;Ob=ib;za=96;break a;break}case 94:{ib=Hc()|0;Mb=vb;Nb=M;Ob=ib;za=96;break a;break}case 97:{ib=Hc()|0;jb=M;K2a(J);Pb=ib;Qb=jb;Rb=Ab;break a;break}case 98:{jb=Hc()|0;ib=M;K2a(K);Pb=jb;Qb=ib;Rb=Bb;break a;break}case 105:{ib=Hc()|0;jb=M;mb=k[Ga>>2]|0;if(mb)j0a(mb);mb=k[Fa>>2]|0;if(!mb){Mb=ub;Nb=jb;Ob=ib;za=96;break a}j0a(mb);Mb=ub;Nb=jb;Ob=ib;za=96;break a;break}case 113:{ib=Hc()|0;jb=M;K2a(t);Mb=xb;Nb=jb;Ob=ib;za=96;break a;break}case 121:{ib=Hc()|0;jb=M;K2a(U);Pb=ib;Qb=jb;Rb=Hb;break a;break}}}while(0);c:do if((za|0)==170){ra=F+36|0;sa=F+40|0;ja=k[sa>>2]|0;jb=k[ra>>2]|0;x=0;fb(140,W|0,329672,0);ib=x;x=0;if(ib&1){Lb=Aa;za=95}else{x=0;pa(57,(ja|0)!=(jb|0)|0,W|0,138,269817,270100);jb=x;x=0;if(jb&1){jb=Hc()|0;ja=M;K2a(W);Pb=jb;Qb=ja;Rb=Aa;break}K2a(W);ja=Ca;do if(!Ca)za=257;else{jb=iDa(Ca,168,6720,0)|0;if(!jb){za=257;break}ib=k[D>>2]|0;k[l>>2]=1;k[l+8>>2]=80;k[l+40>>2]=1;mb=l+48|0;k[mb>>2]=-1;k[mb+4>>2]=-1;mb=l+56|0;ob=l+60|0;pb=l+72|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[mb+16>>2]=0;x=0;Ta(539,ib+48|0,l|0)|0;ib=x;x=0;if(ib&1){ib=Hc()|0;mb=M;hb=k[pb>>2]|0;if(hb)j0a(hb);hb=k[ob>>2]|0;if(!hb){Mb=Aa;Nb=mb;Ob=ib;za=96;break c}j0a(hb);Mb=Aa;Nb=mb;Ob=ib;za=96;break c}ib=k[pb>>2]|0;if(ib)j0a(ib);ib=k[ob>>2]|0;if(ib)j0a(ib);ib=F+60|0;ob=F+64|0;d:do if((k[ob>>2]|0)==(k[ib>>2]|0))Sb=0;else{pb=h+8|0;mb=h+40|0;hb=h+48|0;gb=h+56|0;cb=h+60|0;bb=h+72|0;ab=g+8|0;$a=g+48|0;Ya=g+56|0;Xa=g+60|0;Wa=g+72|0;Va=f+8|0;Ra=f+40|0;Qa=f+48|0;Pa=f+56|0;Oa=f+60|0;La=f+72|0;Ka=e+8|0;Ja=e+12|0;Ia=e+40|0;Ha=e+48|0;Ea=e+56|0;Da=e+60|0;va=e+72|0;ua=$+4|0;tb=$+8|0;wb=$+12|0;sb=Z+4|0;Tb=0;Ub=0;e:while(1){Vb=k[(k[ra>>2]|0)+(Tb<<3)>>2]|0;x=0;Wb=Ba(k[k[Vb>>2]>>2]|0,Vb|0)|0;Vb=x;x=0;if(Vb&1){za=93;break}f:do if((Wb|0)==12)Xb=Ub;else{Vb=k[(k[ra>>2]|0)+(Tb<<3)>>2]|0;do if(Vb){Yb=iDa(Vb,168,6704,0)|0;if(!Yb)break;if(!(k[Yb+32>>2]|0)){Xb=Ub;break f}}while(0);x=0;Vb=Ta(597,jb|0,(k[ib>>2]|0)+(Tb*12|0)|0)|0;Yb=x;x=0;if(Yb&1){za=93;break e}Yb=k[D>>2]|0;k[h>>2]=1;k[pb>>2]=128;k[mb>>2]=1;Zb=hb;k[Zb>>2]=-1;k[Zb+4>>2]=-1;Zb=Yb+48|0;k[gb>>2]=0;k[gb+4>>2]=0;k[gb+8>>2]=0;k[gb+12>>2]=0;k[gb+16>>2]=0;x=0;Ta(539,Zb|0,h|0)|0;Yb=x;x=0;if(Yb&1){za=207;break e}Yb=k[bb>>2]|0;if(Yb)j0a(Yb);Yb=k[cb>>2]|0;if(Yb)j0a(Yb);ia=X;oa=Vb;qa=ia+40|0;do{k[ia>>2]=k[oa>>2];ia=ia+4|0;oa=oa+4|0}while((ia|0)<(qa|0));k[g>>2]=2;ia=ab;oa=X;qa=ia+40|0;do{k[ia>>2]=k[oa>>2];ia=ia+4|0;oa=oa+4|0}while((ia|0)<(qa|0));Yb=$a;k[Yb>>2]=-1;k[Yb+4>>2]=-1;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[Ya+16>>2]=0;x=0;Ta(539,Zb|0,g|0)|0;Yb=x;x=0;if(Yb&1){za=216;break e}Yb=k[Wa>>2]|0;if(Yb)j0a(Yb);Yb=k[Xa>>2]|0;if(Yb)j0a(Yb);k[f>>2]=1;k[Va>>2]=1;k[Ra>>2]=1;Yb=Qa;k[Yb>>2]=-1;k[Yb+4>>2]=-1;k[Pa>>2]=0;k[Pa+4>>2]=0;k[Pa+8>>2]=0;k[Pa+12>>2]=0;k[Pa+16>>2]=0;x=0;Ta(539,Zb|0,f|0)|0;Yb=x;x=0;if(Yb&1){za=225;break e}Yb=k[La>>2]|0;if(Yb)j0a(Yb);Yb=k[Oa>>2]|0;if(Yb)j0a(Yb);Yb=k[Vb+40>>2]|0;k[e>>2]=2;k[Ka>>2]=Yb;k[Ja>>2]=k[Y>>2];k[Ja+4>>2]=k[Y+4>>2];k[Ja+8>>2]=k[Y+8>>2];k[Ja+12>>2]=k[Y+12>>2];k[Ja+16>>2]=k[Y+16>>2];k[Ja+20>>2]=k[Y+20>>2];k[Ja+24>>2]=k[Y+24>>2];k[Ia>>2]=1;Yb=Ha;k[Yb>>2]=-1;k[Yb+4>>2]=-1;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[Ea+16>>2]=0;x=0;Ta(539,Zb|0,e|0)|0;Yb=x;x=0;if(Yb&1){za=234;break e}Yb=k[va>>2]|0;if(Yb)j0a(Yb);Yb=k[Da>>2]|0;if(Yb)j0a(Yb);Yb=k[ib>>2]|0;x=0;_b=Ta(572,jb|0,0)|0;$b=x;x=0;if($b&1){za=93;break e}x=0;fb(321,Z|0,_b|0,Yb+(Tb*12|0)|0);Yb=x;x=0;if(Yb&1){za=93;break e}Yb=k[Z>>2]|0;x=0;fb(317,_|0,k[D>>2]|0,Yb|0);_b=x;x=0;if(_b&1){za=252;break e}k[$>>2]=-1;k[ua>>2]=-1;k[tb>>2]=0;k[wb>>2]=0;x=0;fb(122,_|0,$|0,1);_b=x;x=0;if(_b&1){za=253;break e}_b=k[wb>>2]|0;if(_b)j0a(_b);k[aa>>2]=k[D>>2];x=0;nb(137,aa|0,Yb|0,k[(k[ra>>2]|0)+(Tb<<3)>>2]|0,0);Yb=x;x=0;if(Yb&1){za=252;break e}k[ba>>2]=k[D>>2];Yb=k[(k[ra>>2]|0)+(Tb<<3)>>2]|0;x=0;_b=Ba(k[(k[Yb>>2]|0)+60>>2]|0,Yb|0)|0;Yb=x;x=0;if(Yb&1){za=252;break e}x=0;fb(334,ba|0,_b|0,1);_b=x;x=0;if(_b&1){za=252;break e}_b=k[(k[ra>>2]|0)+(Tb<<3)>>2]|0;x=0;Yb=Ba(k[(k[_b>>2]|0)+60>>2]|0,_b|0)|0;_b=x;x=0;if(_b&1){za=252;break e}_b=k[sb>>2]|0;if(_b)j0a(_b);Xb=Yb+Ub|0}while(0);Tb=Tb+1|0;if(Tb>>>0>=(((k[ob>>2]|0)-(k[ib>>2]|0)|0)/12|0)>>>0){Sb=Xb;break d}else Ub=Xb}do if((za|0)==93){Ub=Hc()|0;Mb=Aa;Nb=M;Ob=Ub;za=96;break c}else if((za|0)==207){Ub=Hc()|0;Tb=M;tb=k[bb>>2]|0;if(tb)j0a(tb);tb=k[cb>>2]|0;if(!tb){Mb=Aa;Nb=Tb;Ob=Ub;za=96;break c}j0a(tb);Mb=Aa;Nb=Tb;Ob=Ub;za=96;break c}else if((za|0)==216){Ub=Hc()|0;Tb=M;tb=k[Wa>>2]|0;if(tb)j0a(tb);tb=k[Xa>>2]|0;if(!tb){Mb=Aa;Nb=Tb;Ob=Ub;za=96;break c}j0a(tb);Mb=Aa;Nb=Tb;Ob=Ub;za=96;break c}else if((za|0)==225){Ub=Hc()|0;Tb=M;tb=k[La>>2]|0;if(tb)j0a(tb);tb=k[Oa>>2]|0;if(!tb){Mb=Aa;Nb=Tb;Ob=Ub;za=96;break c}j0a(tb);Mb=Aa;Nb=Tb;Ob=Ub;za=96;break c}else if((za|0)==234){Ub=Hc()|0;Tb=M;tb=k[va>>2]|0;if(tb)j0a(tb);tb=k[Da>>2]|0;if(!tb){Mb=Aa;Nb=Tb;Ob=Ub;za=96;break c}j0a(tb);Mb=Aa;Nb=Tb;Ob=Ub;za=96;break c}else if((za|0)==252){Ub=Hc()|0;ac=Ub;bc=M}else if((za|0)==253){Ub=Hc()|0;Tb=M;tb=k[wb>>2]|0;if(!tb){ac=Ub;bc=Tb;break}j0a(tb);ac=Ub;bc=Tb}while(0);wb=k[sb>>2]|0;if(!wb){Pb=ac;Qb=bc;Rb=Aa;break c}j0a(wb);Pb=ac;Qb=bc;Rb=Aa;break c}while(0);ib=k[D>>2]|0;k[j>>2]=1;k[j+8>>2]=80;k[j+40>>2]=1;ob=j+48|0;k[ob>>2]=-1;k[ob+4>>2]=-1;ob=j+56|0;jb=j+60|0;wb=j+72|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[ob+16>>2]=0;x=0;Ta(539,ib+48|0,j|0)|0;ib=x;x=0;if(ib&1){ib=Hc()|0;ob=M;Da=k[wb>>2]|0;if(Da)j0a(Da);Da=k[jb>>2]|0;if(!Da){Mb=Aa;Nb=ob;Ob=ib;za=96;break c}j0a(Da);Mb=Aa;Nb=ob;Ob=ib;za=96;break c}ib=k[wb>>2]|0;if(ib)j0a(ib);ib=k[jb>>2]|0;if(ib)j0a(ib);cc=Sb}while(0);if((za|0)==257){Fa=k[sa>>2]|0;Ga=k[ra>>2]|0;x=0;fb(140,ca|0,329672,0);kb=x;x=0;if(kb&1){Lb=Aa;za=95;break}x=0;pa(57,(Fa-Ga|0)==8|0,ca|0,167,269817,270100);Ga=x;x=0;if(Ga&1){Ga=Hc()|0;Fa=M;K2a(ca);Pb=Ga;Qb=Fa;Rb=Aa;break}K2a(ca);x=0;fb(317,da|0,k[D>>2]|0,ja|0);Fa=x;x=0;if(Fa&1){Lb=Aa;za=95;break}k[ea>>2]=-1;k[ea+4>>2]=-1;k[ea+8>>2]=0;Fa=ea+12|0;k[Fa>>2]=0;x=0;fb(122,da|0,ea|0,1);Ga=x;x=0;if(Ga&1){Ga=Hc()|0;kb=M;lb=k[Fa>>2]|0;if(!lb){Pb=Ga;Qb=kb;Rb=Aa;break}j0a(lb);Pb=Ga;Qb=kb;Rb=Aa;break}kb=k[Fa>>2]|0;if(kb)j0a(kb);k[fa>>2]=k[D>>2];x=0;nb(137,fa|0,ja|0,k[k[ra>>2]>>2]|0,0);kb=x;x=0;if(kb&1){Lb=Aa;za=95;break}kb=k[k[ra>>2]>>2]|0;x=0;Fa=Ba(k[(k[kb>>2]|0)+60>>2]|0,kb|0)|0;kb=x;x=0;if(kb&1){Lb=Aa;za=95;break}else cc=Fa}x=0;Fa=Ba(607,ra|0)|0;kb=x;x=0;if(kb&1){Lb=Aa;za=95;break}x=0;fb(140,ga|0,329672,0);kb=x;x=0;if(kb&1){Lb=Aa;za=95;break}x=0;pa(57,(cc|0)==(Fa|0)|0,ga|0,172,269817,270100);Fa=x;x=0;if(Fa&1){Fa=Hc()|0;kb=M;K2a(ga);Pb=Fa;Qb=kb;Rb=Aa;break}K2a(ga);x=0;fb(140,ha|0,270345,18);kb=x;x=0;if(kb&1){Lb=Aa;za=95;break}kb=cc>>>0<16;x=0;pa(57,kb|0,ha|0,173,269817,270100);Fa=x;x=0;if(Fa&1){Fa=Hc()|0;Ga=M;K2a(ha);Pb=Fa;Qb=Ga;Rb=Aa;break}K2a(ha);Ga=k[D>>2]|0;x=0;fb(140,d|0,295946,34);Fa=x;x=0;if(Fa&1){Lb=Aa;za=95;break}x=0;pa(51,kb|0,d|0,210,295981,296025);kb=x;x=0;if(kb&1){kb=Hc()|0;Fa=M;K2a(d);Mb=Aa;Nb=Fa;Ob=kb;za=96;break}K2a(d);x=0;Ta(594,Ga|0,cc+128&255|0)|0;Ga=x;x=0;if(Ga&1){Lb=Aa;za=95;break}x=0;Ta(602,k[D>>2]|0,2)|0;Ga=x;x=0;if(Ga&1){Lb=Aa;za=95;break}if(Aa)j0a(Aa);Ga=k[G>>2]|0;if(!Ga){Dg(F);oy(E);r=c;return}kb=k[ta>>2]|0;if((kb|0)==(Ga|0))dc=Ga;else{Fa=kb;while(1){kb=Fa+-8|0;k[ta>>2]=kb;lb=k[Fa+-4>>2]|0;if(!lb)ec=kb;else{j0a(lb);ec=k[ta>>2]|0}if((ec|0)==(Ga|0))break;else Fa=ec}dc=k[G>>2]|0}OBa(dc);Dg(F);oy(E);r=c;return}}while(0);if((za|0)==95){ta=Hc()|0;Mb=Lb;Nb=M;Ob=ta;za=96}if((za|0)==96){Pb=Ob;Qb=Nb;Rb=Mb}if(!Rb){fc=Pb;gc=Qb}else{j0a(Rb);fc=Pb;gc=Qb}}else za=32}else za=32;while(0);if((za|0)==32){Qb=Hc()|0;wa=M;ya=Qb;za=33}if((za|0)==33){fc=ya;gc=wa}wa=k[G>>2]|0;if(!wa){hc=fc;ic=gc}else{ya=G+4|0;za=k[ya>>2]|0;if((za|0)==(wa|0))jc=wa;else{Qb=za;while(1){za=Qb+-8|0;k[ya>>2]=za;Pb=k[Qb+-4>>2]|0;if(!Pb)kc=za;else{j0a(Pb);kc=k[ya>>2]|0}if((kc|0)==(wa|0))break;else Qb=kc}jc=k[G>>2]|0}OBa(jc);hc=fc;ic=gc}}else{gc=Hc()|0;hc=gc;ic=M}Dg(F);ma=hc;na=ic}oy(E);ka=ma;la=na;Sc(ka|0)}function Wma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+192|0;d=c+160|0;e=c+80|0;f=c+188|0;g=c;h=c+184|0;i=a+8|0;xka(d,k[i>>2]|0,b);j=k[b+24>>2]|0;x=0;xa(k[(k[j>>2]|0)+12>>2]|0,j|0,a|0);j=x;x=0;if(!(j&1)?(x=0,xa(819,e|0,k[i>>2]|0),j=x,x=0,!(j&1)):0){j=b+40|0;l=k[j>>2]|0;x=0;xa(k[(k[l>>2]|0)+12>>2]|0,l|0,a|0);l=x;x=0;if((((!(l&1)?(k[f>>2]=k[i>>2],l=k[j>>2]|0,x=0,j=Ba(k[(k[l>>2]|0)+16>>2]|0,l|0)|0,l=x,x=0,!(l&1)):0)?(l=k[j+4>>2]|0,x=0,j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,m=x,x=0,!(m&1)):0)?(x=0,nb(137,f|0,l|0,k[j+4>>2]|0,0),j=x,x=0,!(j&1)):0)?(x=0,xa(821,g|0,k[i>>2]|0),j=x,x=0,!(j&1)):0){x=0;Ta(539,(k[i>>2]|0)+48|0,e|0)|0;j=x;x=0;if((((((((!(j&1)?(x=0,j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,l=x,x=0,!(l&1)):0)?(l=k[j+4>>2]|0,x=0,j=Ba(k[(k[l>>2]|0)+60>>2]|0,l|0)|0,l=x,x=0,!(l&1)):0)?(x=0,xa(823,(k[i>>2]|0)+48|0,0-j|0),j=x,x=0,!(j&1)):0)?(j=b+32|0,l=k[j>>2]|0,x=0,xa(k[(k[l>>2]|0)+12>>2]|0,l|0,a|0),a=x,x=0,!(a&1)):0)?(k[h>>2]=k[i>>2],a=k[j>>2]|0,x=0,j=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0,a=x,x=0,!(a&1)):0)?(a=k[j+4>>2]|0,x=0,j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,b=x,x=0,!(b&1)):0)?(x=0,nb(137,h|0,a|0,k[j+4>>2]|0,0),j=x,x=0,!(j&1)):0)?(x=0,Ta(539,(k[i>>2]|0)+48|0,g|0)|0,i=x,x=0,!(i&1)):0){i=k[g+72>>2]|0;if(i)j0a(i);i=k[g+60>>2]|0;if(i)j0a(i);i=k[e+72>>2]|0;if(i)j0a(i);i=k[e+60>>2]|0;if(!i){oy(d);r=c;return 0}j0a(i);oy(d);r=c;return 0}c=Hc()|0;i=M;j=k[g+72>>2]|0;if(j)j0a(j);j=k[g+60>>2]|0;if(!j){n=c;o=i}else{j0a(j);n=c;o=i}}else{i=Hc()|0;n=i;o=M}i=k[e+72>>2]|0;if(i)j0a(i);i=k[e+60>>2]|0;if(!i){p=n;q=o;oy(d);Sc(p|0)}j0a(i);p=n;q=o;oy(d);Sc(p|0)}o=Hc()|0;p=o;q=M;oy(d);Sc(p|0);return 0}function Xma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;c=r;r=r+192|0;d=c+172|0;e=c+160|0;f=c+24|0;g=c;h=c+152|0;i=c+148|0;j=c+136|0;l=c+124|0;m=c+120|0;n=c+116|0;o=c+104|0;p=a+8|0;xka(g,k[p>>2]|0,b);q=b+36|0;s=k[q>>2]|0;x=0;xa(k[(k[s>>2]|0)+12>>2]|0,s|0,a|0);s=x;x=0;if(((!(s&1)?(s=k[q>>2]|0,x=0,t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0,s=x,x=0,!(s&1)):0)?(s=k[t+4>>2]|0,t=k[(k[s>>2]|0)+72>>2]|0,u=b+24|0,v=k[u>>2]|0,x=0,w=Ba(k[(k[v>>2]|0)+16>>2]|0,v|0)|0,v=x,x=0,!(v&1)):0)?(x=0,fb(t|0,h|0,s|0,w+4|0),w=x,x=0,!(w&1)):0){k[i>>2]=k[p>>2];w=k[q>>2]|0;x=0;q=Ba(k[(k[w>>2]|0)+16>>2]|0,w|0)|0;w=x;x=0;a:do if(((!(w&1)?(x=0,nb(137,i|0,k[q+4>>2]|0,k[h>>2]|0,0),s=x,x=0,!(s&1)):0)?(s=k[u>>2]|0,x=0,xa(k[(k[s>>2]|0)+12>>2]|0,s|0,a|0),s=x,x=0,!(s&1)):0)?(s=a+12|0,t=k[s>>2]|0,x=0,fb(140,j|0,270364,21),v=x,x=0,!(v&1)):0){x=0;pa(57,(t|0)!=0|0,j|0,207,269817,270386);t=x;x=0;if(t&1){t=Hc()|0;v=M;K2a(j);y=t;z=v;break}K2a(j);v=k[b+32>>2]|0;b:do if((v|0)!=12){x=0;t=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;A=x;x=0;if(A&1){B=24;break a}A=k[t+4>>2]|0;x=0;t=Ba(k[(k[A>>2]|0)+56>>2]|0,A|0)|0;A=x;x=0;if(A&1){B=24;break a}x=0;fb(140,l|0,270475,55);A=x;x=0;if(A&1){B=24;break a}x=0;pa(57,t|0,l|0,212,269817,270386);t=x;x=0;if(t&1){t=Hc()|0;A=M;K2a(l);y=t;z=A;break a}K2a(l);A=k[s>>2]|0;x=0;t=Ba(k[k[A>>2]>>2]|0,A|0)|0;A=x;x=0;if(A&1){B=24;break a}x=0;A=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;C=x;x=0;if(C&1){B=24;break a}C=k[A+4>>2]|0;x=0;A=Ba(k[(k[C>>2]|0)+60>>2]|0,C|0)|0;C=x;x=0;if(C&1){B=24;break a}C=(t|0)!=0;if(C){k[m>>2]=k[p>>2];D=A+t|0;x=0;fb(338,m|0,D|0,A|0);E=x;x=0;if(E&1){B=24;break a}k[n>>2]=k[p>>2];x=0;fb(338,n|0,D|0,t|0);D=x;x=0;if(D&1){B=24;break a}}D=k[s>>2]|0;E=b+8|0;x=0;fb(k[(k[D>>2]|0)+4>>2]|0,D|0,E|0,1);D=x;x=0;if(D&1){B=24;break a}x=0;fb(140,d|0,329672,0);D=x;x=0;if(D&1){B=24;break a}x=0;pa(57,(v+-12|0)>>>0<12|0,d|0,282,293207,270531);D=x;x=0;if(D&1){D=Hc()|0;F=M;K2a(d);G=F;H=D;B=25;break a}K2a(d);x=0;D=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;F=x;x=0;if(F&1){B=24;break a}x=0;fb(343,a|0,v+14|0,k[D+4>>2]|0);D=x;x=0;if(D&1){B=24;break a}if(!C){I=E;break}C=A+t|0;x=0;fb(140,o|0,270638,45);t=x;x=0;if(t&1){B=24;break a}x=0;pa(57,C>>>0<17|0,o|0,225,269817,270386);t=x;x=0;if(t&1){t=Hc()|0;D=M;K2a(o);y=t;z=D;break a}K2a(o);if(!A){I=E;break}D=(C+-1|0)>>>0<16;t=C+143&255;C=f+8|0;F=f+40|0;J=f+48|0;K=f+56|0;L=f+60|0;N=f+72|0;O=0;while(1){P=k[p>>2]|0;x=0;fb(140,e|0,296239,35);Q=x;x=0;if(Q&1){B=23;break}x=0;pa(51,D|0,e|0,217,295981,296275);Q=x;x=0;if(Q&1){B=42;break}K2a(e);x=0;Q=Ta(594,P|0,t|0)|0;P=x;x=0;if(P&1){B=23;break}k[f>>2]=1;k[C>>2]=80;k[F>>2]=1;P=J;k[P>>2]=-1;k[P+4>>2]=-1;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;x=0;Ta(539,Q+48|0,f|0)|0;Q=x;x=0;if(Q&1){B=49;break}Q=k[N>>2]|0;if(Q)j0a(Q);Q=k[L>>2]|0;if(Q)j0a(Q);O=O+1|0;if(O>>>0>=A>>>0){I=E;break b}}if((B|0)==23){E=Hc()|0;G=M;H=E;B=25;break a}else if((B|0)==42){E=Hc()|0;A=M;K2a(e);G=A;H=E;B=25;break a}else if((B|0)==49){E=Hc()|0;A=M;O=k[N>>2]|0;if(O)j0a(O);O=k[L>>2]|0;if(!O){G=A;H=E;B=25;break a}j0a(O);G=A;H=E;B=25;break a}}else I=b+8|0;while(0);v=k[s>>2]|0;x=0;nb(k[(k[v>>2]|0)+8>>2]|0,v|0,k[h>>2]|0,I|0,0);v=x;x=0;if(!(v&1)){v=k[s>>2]|0;k[s>>2]=0;if(v)OBa(v);v=k[h+4>>2]|0;if(!v){oy(g);r=c;return 0}j0a(v);oy(g);r=c;return 0}else B=24}else B=24;while(0);if((B|0)==24){c=Hc()|0;G=M;H=c;B=25}if((B|0)==25){y=H;z=G}G=k[h+4>>2]|0;if(!G){R=y;S=z;oy(g);Sc(R|0)}j0a(G);R=y;S=z;oy(g);Sc(R|0)}z=Hc()|0;R=z;S=M;oy(g);Sc(R|0);return 0}function Yma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+96|0;e=d+72|0;f=d+32|0;g=d+16|0;h=d;if((b+-33|0)>>>0<6){mna(a,b,c);r=d;return}switch(b|0){case 27:case 28:case 29:case 46:{nna(a,b);r=d;return}default:{}}if((b+-30|0)>>>0<3)ona(0,0);b=f;d=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(d|0));b=f+20|0;d=f+24|0;k[d>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;a=f+4|0;c=a+-4|0;i=a+16|0;j=f+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=20924;k[f>>2]=20888;k[b>>2]=20948;x=0;fb(140,h|0,270684,24);e=x;x=0;if(e&1){e=Hc()|0;l=M;m=e}else{k[g>>2]=21048;e=g+4|0;x=0;xa(604,e|0,h|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,f|0,g|0)|0;f=x;x=0;if(!(f&1)){x=0;nb(87,n|0,270709,269817,1311);x=0}n=Hc()|0;f=M;k[g>>2]=21048;K2a(e);o=f;p=n}K2a(h);l=o;m=p}k[a>>2]=20980;k[c>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[d>>2]|0;if(!b)Sc(m|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(m|0);k[d>>2]=0;Sc(m|0)}function Zma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+208|0;d=c+80|0;e=c+188|0;f=c+40|0;g=c;h=c+184|0;j=c+180|0;l=c+176|0;m=c+164|0;n=c+160|0;if(i[b+36>>0]|0){o=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;p=iDa(k[o>>2]|0,168,6704,0)|0;if(!p)BBa();o=(Vf[k[(k[p>>2]|0)+36>>2]&1023](p)|0)^1;q2a(e,270825,45);x=0;pa(57,o|0,e|0,242,269817,270871);o=x;x=0;if(o&1){o=Hc()|0;q=M;K2a(e);s=o;t=q;Sc(s|0)}K2a(e);e=a+8|0;q=k[e>>2]|0;k[f>>2]=32;k[f+32>>2]=1;s9(g,p);o=k[g+32>>2]|0;a:do if((o|0)==1){u=1;while(1){if((u|0)<=0){v=0;break a}u=u+-1|0;w=k[f+(u<<2)>>2]|0;y=k[g+(u<<2)>>2]|0;if((w|0)!=(y|0)){z=w;A=y;break}}v=z>>>0>A>>>0?1:-1}else v=(o|0)==0?1:-1;while(0);o=q+48|0;k[d>>2]=2;q=d+8|0;A=(v|0)<0?g:f;f=q+40|0;do{k[q>>2]=k[A>>2];q=q+4|0;A=A+4|0}while((q|0)<(f|0));A=d+48|0;k[A>>2]=-1;k[A+4>>2]=-1;A=d+56|0;q=d+60|0;f=d+72|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[A+16>>2]=0;x=0;Ta(539,o|0,d|0)|0;o=x;x=0;if(o&1){o=Hc()|0;A=k[f>>2]|0;if(A)j0a(A);A=k[q>>2]|0;if(!A)Sc(o|0);j0a(A);Sc(o|0)}o=k[f>>2]|0;if(o)j0a(o);o=k[q>>2]|0;if(o)j0a(o);k[h>>2]=k[e>>2];gla(h);h=k[e>>2]|0;k[d>>2]=1;k[d+8>>2]=128;k[d+40>>2]=1;o=d+48|0;k[o>>2]=-1;k[o+4>>2]=-1;o=d+56|0;q=d+60|0;f=d+72|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;x=0;Ta(539,h+48|0,d|0)|0;h=x;x=0;if(h&1){h=Hc()|0;o=k[f>>2]|0;if(o)j0a(o);o=k[q>>2]|0;if(!o)Sc(h|0);j0a(o);Sc(h|0)}h=k[f>>2]|0;if(h)j0a(h);h=k[q>>2]|0;if(h)j0a(h);h=k[b+24>>2]|0;q=k[b+28>>2]|0;b:do if((h|0)!=(q|0)){f=p+36|0;o=h;while(1){A=k[o>>2]|0;Tf[k[(k[A>>2]|0)+12>>2]&2047](A,a);k[j>>2]=k[e>>2];A=k[o>>2]|0;g=(Vf[k[(k[A>>2]|0)+16>>2]&1023](A)|0)+4|0;A=k[g>>2]|0;g=(k[f>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,g|0,d|0,588,285183,276209);g=x;x=0;if(g&1){B=46;break}K2a(d);tla(j,A,k[f>>2]|0,1);k[l>>2]=k[e>>2];A=(k[f>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,A|0,d|0,588,285183,276209);A=x;x=0;if(A&1){B=48;break}K2a(d);ola(l,k[f>>2]|0,1);o=o+8|0;if((o|0)==(q|0))break b}if((B|0)==46){o=Hc()|0;K2a(d);Sc(o|0)}else if((B|0)==48){o=Hc()|0;K2a(d);Sc(o|0)}}while(0);q=k[e>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;e=d+48|0;k[e>>2]=-1;k[e+4>>2]=-1;e=d+56|0;l=d+60|0;j=d+72|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;x=0;Ta(539,q+48|0,d|0)|0;q=x;x=0;if(q&1){q=Hc()|0;e=k[j>>2]|0;if(e)j0a(e);e=k[l>>2]|0;if(!e)Sc(q|0);j0a(e);Sc(q|0)}else{q=k[j>>2]|0;if(q)j0a(q);q=k[l>>2]|0;if(q)j0a(q);r=c;return 0}}else{k[d>>2]=0;q=d+4|0;k[q>>2]=0;k[d+8>>2]=0;l=b+24|0;j=k[l>>2]|0;e=b+28|0;h=k[e>>2]|0;c:do if((j|0)!=(h|0)){p=d+8|0;o=a+12|0;f=j;d:while(1){A=k[f>>2]|0;do if(!A){x=0;g=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;v=x;x=0;if(v&1){B=53;break d}if(i[g+13>>0]|0){k[n>>2]=0;g=k[q>>2]|0;if(g>>>0<(k[p>>2]|0)>>>0){k[g>>2]=0;k[q>>2]=g+4;k[n>>2]=0;break}x=0;xa(849,d|0,n|0);g=x;x=0;if(g&1){B=73;break d}g=k[n>>2]|0;k[n>>2]=0;if(g)OBa(g)}}else{x=0;xa(k[(k[A>>2]|0)+12>>2]|0,A|0,a|0);g=x;x=0;if(g&1){B=53;break d}x=0;g=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;v=x;x=0;if(v&1){B=53;break d}if(i[g+13>>0]|0){g=k[o>>2]|0;x=0;fb(140,m|0,329672,0);v=x;x=0;if(v&1){B=53;break d}x=0;pa(57,(g|0)!=0|0,m|0,265,269817,270871);g=x;x=0;if(g&1){B=65;break d}K2a(m);g=k[q>>2]|0;if(g>>>0>=(k[p>>2]|0)>>>0){x=0;xa(849,d|0,o|0);v=x;x=0;if(v&1){B=53;break d}else break}else{v=k[o>>2]|0;k[o>>2]=0;k[g>>2]=v;k[q>>2]=g+4;break}}}while(0);f=f+8|0;if((f|0)==(h|0)){B=52;break c}}if((B|0)==53){f=Hc()|0;C=f;D=M;B=55;break}else if((B|0)==65){f=Hc()|0;o=M;K2a(m);E=f;F=o;break}else if((B|0)==73){o=Hc()|0;f=M;p=k[n>>2]|0;k[n>>2]=0;if(!p){E=o;F=f;break}OBa(p);E=o;F=f;break}}else B=52;while(0);e:do if((B|0)==52){x=0;n=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;m=x;x=0;f:do if(!(m&1)){do if(i[n+13>>0]|0){h=a+12|0;if(((k[e>>2]|0)-(k[l>>2]|0)|0)==8){j=k[d>>2]|0;f=k[j>>2]|0;k[j>>2]=0;j=k[h>>2]|0;k[h>>2]=f;if(!j)break;OBa(j);break}x=0;j=Ba(563,24)|0;f=x;x=0;if(f&1)break f;x=0;fb(344,j|0,k[a+8>>2]|0,d|0);f=x;x=0;if(f&1){f=Hc()|0;o=M;OBa(j);E=f;F=o;break e}o=k[h>>2]|0;k[h>>2]=j;if(o)OBa(o)}while(0);o=k[d>>2]|0;if(o){j=k[q>>2]|0;if((j|0)==(o|0))G=o;else{h=j;do{j=h+-4|0;k[q>>2]=j;f=k[j>>2]|0;k[j>>2]=0;if(f)OBa(f);h=k[q>>2]|0}while((h|0)!=(o|0));G=k[d>>2]|0}OBa(G)}r=c;return 0}while(0);n=Hc()|0;C=n;D=M;B=55}while(0);if((B|0)==55){E=C;F=D}D=k[d>>2]|0;if(!D){s=E;t=F;Sc(s|0)}C=k[q>>2]|0;if((C|0)==(D|0))H=D;else{B=C;do{C=B+-4|0;k[q>>2]=C;c=k[C>>2]|0;k[C>>2]=0;if(c)OBa(c);B=k[q>>2]|0}while((B|0)!=(D|0));H=k[d>>2]|0}OBa(H);s=E;t=F;Sc(s|0)}return 0}function _ma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;c=r;r=r+1104|0;d=c+1084|0;e=c+864|0;f=c+784|0;g=c+1072|0;h=c+704|0;j=c+624|0;l=c+544|0;m=c+464|0;n=c+1060|0;o=c+384|0;p=c+304|0;q=c+224|0;s=c+144|0;t=c+80|0;u=c+104|0;v=c+1048|0;w=c+1036|0;y=c+1024|0;z=c+40|0;A=c;B=c+984|0;C=c+968|0;D=c+956|0;E=c+944|0;F=a+8|0;xka(t,k[F>>2]|0,b);x=0;G=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;H=x;x=0;a:do if(!(H&1)?(I=k[G+4>>2]|0,x=0,J=Ba(k[k[I>>2]>>2]|0,I|0)|0,I=x,x=0,!(I&1)):0){if((J|0)==1){J=k[F>>2]|0;x=0;I=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;K=x;x=0;if(K&1){L=18;break}K=k[I+4>>2]|0;x=0;fb(k[(k[K>>2]|0)+84>>2]|0,u|0,K|0,0);K=x;x=0;if(K&1){L=18;break}K=J+48|0;k[s>>2]=2;N=s+8|0;O=u;P=N+40|0;do{k[N>>2]=k[O>>2];N=N+4|0;O=O+4|0}while((N|0)<(P|0));J=s+48|0;k[J>>2]=-1;k[J+4>>2]=-1;J=s+56|0;I=s+60|0;Q=s+72|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[J+16>>2]=0;x=0;Ta(539,K|0,s|0)|0;J=x;x=0;if(J&1){J=Hc()|0;R=M;S=k[Q>>2]|0;if(S)j0a(S);S=k[I>>2]|0;if(!S){T=R;U=J;break}j0a(S);T=R;U=J;break}J=k[Q>>2]|0;if(J)j0a(J);J=k[I>>2]|0;if(J)j0a(J);oy(t);r=c;return 0}J=k[b+28>>2]|0;x=0;xa(k[(k[J>>2]|0)+12>>2]|0,J|0,a|0);J=x;x=0;if(!(J&1)){J=b+24|0;switch(k[J>>2]|0){case 45:{I=k[F>>2]|0;k[q>>2]=1;k[q+8>>2]=21;k[q+40>>2]=1;Q=q+48|0;k[Q>>2]=-1;k[Q+4>>2]=-1;Q=q+56|0;R=q+60|0;S=q+72|0;k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=0;k[Q+12>>2]=0;k[Q+16>>2]=0;x=0;Ta(539,I+48|0,q|0)|0;I=x;x=0;if(I&1){I=Hc()|0;Q=M;V=k[S>>2]|0;if(V)j0a(V);V=k[R>>2]|0;if(!V){T=Q;U=I;break a}j0a(V);T=Q;U=I;break a}I=k[S>>2]|0;if(I)j0a(I);I=k[R>>2]|0;if(I)j0a(I);oy(t);r=c;return 0}case 46:{I=k[F>>2]|0;k[p>>2]=1;k[p+8>>2]=25;k[p+40>>2]=1;R=p+48|0;k[R>>2]=-1;k[R+4>>2]=-1;R=p+56|0;S=p+60|0;Q=p+72|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[R+16>>2]=0;x=0;Ta(539,I+48|0,p|0)|0;I=x;x=0;if(I&1){I=Hc()|0;R=M;V=k[Q>>2]|0;if(V)j0a(V);V=k[S>>2]|0;if(!V){T=R;U=I;break a}j0a(V);T=R;U=I;break a}I=k[Q>>2]|0;if(I)j0a(I);I=k[S>>2]|0;if(I)j0a(I);oy(t);r=c;return 0}case 49:{I=a+12|0;S=k[I>>2]|0;x=0;fb(140,v|0,270364,21);Q=x;x=0;if(Q&1){L=18;break a}x=0;pa(57,(S|0)!=0|0,v|0,302,269817,270965);S=x;x=0;if(S&1){S=Hc()|0;Q=M;K2a(v);W=Q;X=S;oy(t);Sc(X|0)}K2a(v);S=k[I>>2]|0;x=0;fb(k[(k[S>>2]|0)+12>>2]|0,S|0,b+8|0,1);S=x;x=0;if(S&1){L=18;break a}S=k[I>>2]|0;k[I>>2]=0;if(!S){oy(t);r=c;return 0}OBa(S);oy(t);r=c;return 0}case 48:case 47:{S=a+12|0;I=k[S>>2]|0;x=0;fb(140,w|0,270364,21);Q=x;x=0;if(Q&1){L=18;break a}x=0;pa(57,(I|0)!=0|0,w|0,308,269817,270965);I=x;x=0;if(I&1){I=Hc()|0;Q=M;K2a(w);W=Q;X=I;oy(t);Sc(X|0)}K2a(w);I=k[S>>2]|0;Q=b+8|0;x=0;fb(k[(k[I>>2]|0)+4>>2]|0,I|0,Q|0,0);I=x;x=0;if(I&1){L=18;break a}I=b+36|0;b:do if(!(i[I>>0]|0)){x=0;R=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;V=x;x=0;if(V&1){L=18;break a}V=k[R+4>>2]|0;x=0;R=Ba(k[(k[V>>2]|0)+60>>2]|0,V|0)|0;V=x;x=0;if(V&1){L=18;break a}x=0;fb(140,y|0,271058,32);V=x;x=0;if(V&1){L=18;break a}x=0;pa(57,(R|0)==1|0,y|0,313,269817,270965);R=x;x=0;if(R&1){R=Hc()|0;V=M;K2a(y);W=V;X=R;oy(t);Sc(X|0)}K2a(y);R=k[F>>2]|0;k[o>>2]=1;k[o+8>>2]=128;k[o+40>>2]=1;V=o+48|0;k[V>>2]=-1;k[V+4>>2]=-1;V=o+56|0;Y=o+60|0;Z=o+72|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[V+16>>2]=0;x=0;Ta(539,R+48|0,o|0)|0;R=x;x=0;if(R&1){R=Hc()|0;V=M;_=k[Z>>2]|0;if(_)j0a(_);_=k[Y>>2]|0;if(!_){T=V;U=R;break a}j0a(_);T=V;U=R;break a}R=k[Z>>2]|0;if(R)j0a(R);R=k[Y>>2]|0;if(R)j0a(R);R=k[S>>2]|0;x=0;Y=Ba(k[k[R>>2]>>2]|0,R|0)|0;R=x;x=0;if(R&1){L=18;break a}if(Y){Y=k[S>>2]|0;x=0;R=Ba(k[k[Y>>2]>>2]|0,Y|0)|0;Y=x;x=0;if(Y&1){L=18;break a}Y=R+1|0;while(1){if(!Y)break b;R=k[F>>2]|0;Z=Y;Y=Y+-1|0;x=0;fb(140,n|0,296239,35);V=x;x=0;if(V&1){L=17;break}x=0;pa(51,Y>>>0<16|0,n|0,217,295981,296275);V=x;x=0;if(V&1){L=74;break}K2a(n);x=0;Ta(594,R|0,Z+143&255|0)|0;Z=x;x=0;if(Z&1){L=17;break}}if((L|0)==17){Y=Hc()|0;T=M;U=Y;break a}else if((L|0)==74){Y=Hc()|0;Z=M;K2a(n);T=Z;U=Y;break a}}}while(0);K=k[F>>2]|0;k[z>>2]=1;k[z+32>>2]=1;Y=K+48|0;k[m>>2]=2;N=m+8|0;O=z;P=N+40|0;do{k[N>>2]=k[O>>2];N=N+4|0;O=O+4|0}while((N|0)<(P|0));K=m+48|0;k[K>>2]=-1;k[K+4>>2]=-1;K=m+56|0;Z=m+60|0;R=m+72|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;x=0;Ta(539,Y|0,m|0)|0;K=x;x=0;if(K&1){K=Hc()|0;V=M;_=k[R>>2]|0;if(_)j0a(_);_=k[Z>>2]|0;if(!_){T=V;U=K;break a}j0a(_);T=V;U=K;break a}K=k[R>>2]|0;if(K)j0a(K);K=k[Z>>2]|0;if(K)j0a(K);K=k[F>>2]|0;if((k[J>>2]|0)==47){k[l>>2]=1;k[l+8>>2]=1;k[l+40>>2]=1;Z=l+48|0;k[Z>>2]=-1;k[Z+4>>2]=-1;Z=l+56|0;R=l+60|0;V=l+72|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[Z+16>>2]=0;x=0;Ta(539,K+48|0,l|0)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;_=M;$=k[V>>2]|0;if($)j0a($);$=k[R>>2]|0;if(!$){T=_;U=Z;break a}j0a($);T=_;U=Z;break a}Z=k[V>>2]|0;if(Z)j0a(Z);Z=k[R>>2]|0;if(Z)j0a(Z)}else{k[j>>2]=1;k[j+8>>2]=144;k[j+40>>2]=1;Z=j+48|0;k[Z>>2]=-1;k[Z+4>>2]=-1;Z=j+56|0;R=j+60|0;V=j+72|0;_=K+48|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[Z+16>>2]=0;x=0;Ta(539,_|0,j|0)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;K=M;$=k[V>>2]|0;if($)j0a($);$=k[R>>2]|0;if(!$){T=K;U=Z;break a}j0a($);T=K;U=Z;break a}Z=k[V>>2]|0;if(Z)j0a(Z);Z=k[R>>2]|0;if(Z)j0a(Z);k[h>>2]=1;k[h+8>>2]=3;k[h+40>>2]=1;Z=h+48|0;k[Z>>2]=-1;k[Z+4>>2]=-1;Z=h+56|0;R=h+60|0;V=h+72|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[Z+16>>2]=0;x=0;Ta(539,_|0,h|0)|0;_=x;x=0;if(_&1){_=Hc()|0;Z=M;K=k[V>>2]|0;if(K)j0a(K);K=k[R>>2]|0;if(!K){T=Z;U=_;break a}j0a(K);T=Z;U=_;break a}_=k[V>>2]|0;if(_)j0a(_);_=k[R>>2]|0;if(_)j0a(_)}_=k[S>>2]|0;x=0;R=Ba(k[k[_>>2]>>2]|0,_|0)|0;_=x;x=0;if(_&1){L=18;break a}_=R;while(1){if(!_){L=118;break}R=k[F>>2]|0;V=_;_=_+-1|0;x=0;fb(140,g|0,296239,35);Z=x;x=0;if(Z&1){L=16;break}x=0;pa(51,_>>>0<16|0,g|0,217,295981,296275);Z=x;x=0;if(Z&1){L=121;break}K2a(g);x=0;Ta(594,R|0,V+143&255|0)|0;V=x;x=0;if(V&1){L=16;break}}if((L|0)==16){_=Hc()|0;T=M;U=_;break a}else if((L|0)==118){_=k[S>>2]|0;Y=k[(k[_>>2]|0)+8>>2]|0;x=0;V=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;R=x;x=0;if(R&1){L=18;break a}x=0;nb(Y|0,_|0,k[V+4>>2]|0,Q|0,(i[I>>0]|0)==0|0);V=x;x=0;if(V&1){L=18;break a}V=k[S>>2]|0;k[S>>2]=0;if(!V){oy(t);r=c;return 0}OBa(V);oy(t);r=c;return 0}else if((L|0)==121){V=Hc()|0;_=M;K2a(g);T=_;U=V;break a}break}case 34:{V=k[F>>2]|0;k[A>>2]=0;k[A+32>>2]=1;_=V+48|0;k[f>>2]=2;N=f+8|0;O=A;P=N+40|0;do{k[N>>2]=k[O>>2];N=N+4|0;O=O+4|0}while((N|0)<(P|0));S=f+48|0;k[S>>2]=-1;k[S+4>>2]=-1;S=f+56|0;I=f+60|0;Q=f+72|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[S+16>>2]=0;x=0;Ta(539,_|0,f|0)|0;S=x;x=0;if(S&1){S=Hc()|0;V=M;Y=k[Q>>2]|0;if(Y)j0a(Y);Y=k[I>>2]|0;if(!Y){T=V;U=S;break a}j0a(Y);T=V;U=S;break a}S=k[Q>>2]|0;if(S)j0a(S);S=k[I>>2]|0;if(S)j0a(S);k[e>>2]=1;k[e+8>>2]=3;k[e+40>>2]=1;S=e+48|0;k[S>>2]=-1;k[S+4>>2]=-1;S=e+56|0;I=e+60|0;Q=e+72|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[S+16>>2]=0;x=0;Ta(539,_|0,e|0)|0;S=x;x=0;if(S&1){S=Hc()|0;V=M;Y=k[Q>>2]|0;if(Y)j0a(Y);Y=k[I>>2]|0;if(!Y){T=V;U=S;break a}j0a(Y);T=V;U=S;break a}S=k[Q>>2]|0;if(S)j0a(S);S=k[I>>2]|0;if(S)j0a(S);oy(t);r=c;return 0}case 33:{oy(t);r=c;return 0}default:{N=B;P=N+36|0;do{k[N>>2]=0;N=N+4|0}while((N|0)<(P|0));_=B+20|0;S=B+24|0;k[S>>2]=0;k[B+28>>2]=0;k[B+32>>2]=0;k[B+36>>2]=-1;I=B+4|0;Q=I+-4|0;V=I+16|0;Y=B+8|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[B+4>>2]=20924;k[B>>2]=20888;k[_>>2]=20948;R=k[J>>2]|0;x=0;fb(140,d|0,329672,0);Z=x;x=0;do if(!(Z&1)){x=0;pa(57,(R|0)<141|0,d|0,303,293207,293255);K=x;x=0;if(K&1){K=Hc()|0;$=M;K2a(d);aa=$;ba=K;L=154;break}K2a(d);K=k[46308+(R<<2)>>2]|0;$=RLa(K)|0;x=0;fb(140,E|0,K|0,$|0);$=x;x=0;if(!($&1)){x=0;$=Fa(86,E|0,0,271091)|0;K=x;x=0;if(K&1){K=Hc()|0;ca=M;da=K}else{k[D>>2]=k[$>>2];k[D+4>>2]=k[$+4>>2];k[D+8>>2]=k[$+8>>2];k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[C>>2]=21048;$=C+4|0;x=0;xa(604,$|0,D|0);K=x;x=0;if(K&1){K=Hc()|0;ea=M;fa=K}else{x=0;K=Ta(494,B|0,C|0)|0;ga=x;x=0;if(!(ga&1)){x=0;nb(87,K|0,270965,269817,341);x=0}K=Hc()|0;ga=M;k[C>>2]=21048;K2a($);ea=ga;fa=K}K2a(D);ca=ea;da=fa}K2a(E);ha=ca;ia=da}else L=153}else L=153;while(0);if((L|0)==153){R=Hc()|0;aa=M;ba=R;L=154}if((L|0)==154){ha=aa;ia=ba}k[I>>2]=20980;k[Q>>2]=21008;k[V>>2]=21032;K2a(Y);k[_>>2]=20796;R=k[S>>2]|0;if(R){x=0;Z=Ba(k[(k[R>>2]|0)+16>>2]|0,R|0)|0;R=x;x=0;if(R&1){R=Hc(0)|0;Fg(R)}if(Z)k[S>>2]=0}W=ha;X=ia;oy(t);Sc(X|0)}}}else L=18}else L=18;while(0);if((L|0)==18){L=Hc()|0;T=M;U=L}W=T;X=U;oy(t);Sc(X|0);return 0}function $ma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+176|0;d=c+64|0;e=c+40|0;f=c+160|0;g=c;h=c+156|0;j=c+152|0;l=c+148|0;m=c+144|0;n=a+8|0;xka(e,k[n>>2]|0,b);o=k[b+24>>2]|0;p=k[b+36>>2]|0;x=0;q=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;s=x;x=0;a:do if(!(s&1)?(t=k[q+24>>2]|0,x=0,fb(140,f|0,329672,0),u=x,x=0,!(u&1)):0){x=0;pa(57,(t|0)!=0|0,f|0,351,269817,271116);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(f);v=t;w=u;oy(e);Sc(v|0)}K2a(f);x=0;u=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;t=x;x=0;if(!(t&1)){t=k[u+24>>2]|0;u=k[b+32>>2]|0;if((u+-25|0)>>>0<2){x=0;xa(850,a|0,b|0);y=x;x=0;if(y&1){z=7;break}oy(e);r=c;return 0}x=0;y=Ba(k[k[t>>2]>>2]|0,t|0)|0;A=x;x=0;if(!(A&1)){if((y|0)==1){y=k[n>>2]|0;x=0;fb(k[(k[t>>2]|0)+84>>2]|0,g|0,t|0,0);A=x;x=0;if(A&1){z=7;break}A=y+48|0;k[d>>2]=2;y=d+8|0;B=g;C=y+40|0;do{k[y>>2]=k[B>>2];y=y+4|0;B=B+4|0}while((y|0)<(C|0));B=d+48|0;k[B>>2]=-1;k[B+4>>2]=-1;B=d+56|0;y=d+60|0;C=d+72|0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[B+12>>2]=0;k[B+16>>2]=0;x=0;Ta(539,A|0,d|0)|0;B=x;x=0;if(B&1){B=Hc()|0;D=M;E=k[C>>2]|0;if(E)j0a(E);E=k[y>>2]|0;if(!E){F=D;G=B;break}j0a(E);F=D;G=B;break}B=k[C>>2]|0;if(B)j0a(B);B=k[y>>2]|0;if(B)j0a(B);oy(e);r=c;return 0}B=(u+-39|0)>>>0<6;x=0;y=Ba(k[k[t>>2]>>2]|0,t|0)|0;C=x;x=0;if(!(C&1)){C=B|(u&-2|0)==36&(y|0)==0;do if(((i[a+4>>0]|0)!=0?(y=u+-27|0,y>>>0<14):0)?(12615>>>(y&16383)&1)!=0:0){if(!(iDa(p,5864,6056,0)|0)){x=0;y=Ba(k[(k[p>>2]|0)+16>>2]|0,p|0)|0;D=x;x=0;if(D&1){z=7;break a}D=k[y+4>>2]|0;x=0;y=Ba(k[k[D>>2]>>2]|0,D|0)|0;D=x;x=0;if(D&1){z=7;break a}if((y|0)!=1){z=41;break}}if(!(iDa(o,5864,6056,0)|0)){x=0;y=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;D=x;x=0;if(D&1){z=7;break a}D=k[y+4>>2]|0;x=0;y=Ba(k[k[D>>2]>>2]|0,D|0)|0;D=x;x=0;if(D&1){z=7;break a}if((y|0)!=1){x=0;xa(k[(k[o>>2]|0)+12>>2]|0,o|0,a|0);y=x;x=0;if(y&1){z=7;break a}k[h>>2]=k[n>>2];x=0;y=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;D=x;x=0;if(D&1){z=7;break a}x=0;nb(137,h|0,k[y+4>>2]|0,t|0,C|0);y=x;x=0;if(y&1){z=7;break a}x=0;xa(k[(k[p>>2]|0)+12>>2]|0,p|0,a|0);y=x;x=0;if(y&1){z=7;break a}k[j>>2]=k[n>>2];x=0;y=Ba(k[(k[p>>2]|0)+16>>2]|0,p|0)|0;D=x;x=0;if(D&1){z=7;break a}x=0;nb(137,j|0,k[y+4>>2]|0,t|0,C|0);y=x;x=0;if(y&1){z=7;break a}}else z=41}else z=41}else z=41;while(0);if((z|0)==41){x=0;xa(k[(k[p>>2]|0)+12>>2]|0,p|0,a|0);A=x;x=0;if(A&1){z=7;break}k[l>>2]=k[n>>2];x=0;A=Ba(k[(k[p>>2]|0)+16>>2]|0,p|0)|0;y=x;x=0;if(y&1){z=7;break}x=0;nb(137,l|0,k[A+4>>2]|0,t|0,C|0);A=x;x=0;if(A&1){z=7;break}x=0;xa(k[(k[o>>2]|0)+12>>2]|0,o|0,a|0);A=x;x=0;if(A&1){z=7;break}k[m>>2]=k[n>>2];x=0;A=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;y=x;x=0;if(y&1){z=7;break}x=0;nb(137,m|0,k[A+4>>2]|0,t|0,C|0);A=x;x=0;if(A&1){z=7;break}}x=0;if(B){bna(a,u,t);A=x;x=0;if(A&1){z=7;break}oy(e);r=c;return 0}else{Yma(a,u,t);A=x;x=0;if(A&1){z=7;break}oy(e);r=c;return 0}}else z=7}else z=7}else z=7}else z=7;while(0);if((z|0)==7){z=Hc()|0;F=M;G=z}v=G;w=F;oy(e);Sc(v|0);return 0}function ana(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+176|0;d=c+80|0;e=c+160|0;f=c;g=k[b+32>>2]|0;q2a(e,329672,0);x=0;pa(57,(g+-25|0)>>>0<2|0,e|0,1252,269817,271210);h=x;x=0;if(h&1){h=Hc()|0;i=M;K2a(e);j=i;l=h;Sc(l|0)}h=(g|0)==26;K2a(e);e=k[b+24>>2]|0;Tf[k[(k[e>>2]|0)+12>>2]&2047](e,a);e=a+8|0;g=k[e>>2]|0;k[d>>2]=1;k[d+8>>2]=128;k[d+40>>2]=1;i=d+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=d+56|0;m=d+60|0;n=d+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,g+48|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;i=k[n>>2]|0;if(i)j0a(i);i=k[m>>2]|0;if(!i)Sc(g|0);j0a(i);Sc(g|0)}g=k[n>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(g)j0a(g);do if(h){g=k[e>>2]|0;k[d>>2]=1;k[d+8>>2]=21;k[d+40>>2]=1;m=d+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=d+56|0;n=d+60|0;i=d+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,g+48|0,d|0)|0;g=x;x=0;if(!(g&1)){g=k[i>>2]|0;if(g)j0a(g);g=k[n>>2]|0;if(g)j0a(g);break}g=Hc()|0;m=k[i>>2]|0;if(m)j0a(m);m=k[n>>2]|0;if(!m)Sc(g|0);j0a(m);Sc(g|0)}while(0);Jia(f,k[e>>2]|0);h=k[e>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;g=d+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=d+56|0;m=d+60|0;n=d+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,h+48|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;h=M;g=k[n>>2]|0;if(g)j0a(g);g=k[m>>2]|0;if(!g){o=h;p=d}else{j0a(g);o=h;p=d}}else{d=k[n>>2]|0;if(d)j0a(d);d=k[m>>2]|0;if(d)j0a(d);d=k[b+36>>2]|0;x=0;xa(k[(k[d>>2]|0)+12>>2]|0,d|0,a|0);a=x;x=0;if(!(a&1)?(x=0,Ta(539,(k[e>>2]|0)+48|0,f|0)|0,e=x,x=0,!(e&1)):0){e=k[f+72>>2]|0;if(e)j0a(e);e=k[f+60>>2]|0;if(!e){r=c;return}j0a(e);r=c;return}c=Hc()|0;o=M;p=c}c=k[f+72>>2]|0;if(c)j0a(c);c=k[f+60>>2]|0;if(!c){j=o;l=p;Sc(l|0)}j0a(c);j=o;l=p;Sc(l|0)}function bna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+160|0;e=d;f=d+112|0;g=d+96|0;h=d+80|0;if((b+-39|0)>>>0<2){i=(b|0)==40;j=a+8|0;l=k[j>>2]|0;k[e>>2]=1;k[e+8>>2]=20;k[e+40>>2]=1;m=e+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=e+56|0;n=e+60|0;o=e+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,l+48|0,e|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=k[o>>2]|0;if(m)j0a(m);m=k[n>>2]|0;if(!m)Sc(l|0);j0a(m);Sc(l|0)}l=k[o>>2]|0;if(l)j0a(l);l=k[n>>2]|0;if(l)j0a(l);if(!i){r=d;return}i=k[j>>2]|0;k[e>>2]=1;k[e+8>>2]=21;k[e+40>>2]=1;j=e+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=e+56|0;l=e+60|0;n=e+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,i+48|0,e|0)|0;i=x;x=0;if(i&1){i=Hc()|0;j=k[n>>2]|0;if(j)j0a(j);j=k[l>>2]|0;if(!j)Sc(i|0);j0a(j);Sc(i|0)}else{i=k[n>>2]|0;if(i)j0a(i);i=k[l>>2]|0;if(i)j0a(i);r=d;return}}i=iDa(c,168,6592,0)|0;if(!i)p=0;else p=(k[i+28>>2]|0)==1;switch(b|0){case 44:{b=Iia(k[a+8>>2]|0,p?18:16)|0;k[e>>2]=1;k[e+8>>2]=21;k[e+40>>2]=1;i=e+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=e+56|0;c=e+60|0;l=e+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,b+48|0,e|0)|0;b=x;x=0;if(b&1){b=Hc()|0;i=k[l>>2]|0;if(i)j0a(i);i=k[c>>2]|0;if(!i)Sc(b|0);j0a(i);Sc(b|0)}else{b=k[l>>2]|0;if(b)j0a(b);b=k[c>>2]|0;if(b)j0a(b);r=d;return}break}case 43:{b=Iia(k[a+8>>2]|0,p?19:17)|0;k[e>>2]=1;k[e+8>>2]=21;k[e+40>>2]=1;c=e+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=e+56|0;l=e+60|0;i=e+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,b+48|0,e|0)|0;b=x;x=0;if(b&1){b=Hc()|0;c=k[i>>2]|0;if(c)j0a(c);c=k[l>>2]|0;if(!c)Sc(b|0);j0a(c);Sc(b|0)}else{b=k[i>>2]|0;if(b)j0a(b);b=k[l>>2]|0;if(b)j0a(b);r=d;return}break}case 42:{Iia(k[a+8>>2]|0,p?19:17)|0;r=d;return}case 41:{Iia(k[a+8>>2]|0,p?18:16)|0;r=d;return}default:{d=f;p=d+36|0;do{k[d>>2]=0;d=d+4|0}while((d|0)<(p|0));d=f+20|0;p=f+24|0;k[p>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;a=f+4|0;b=a+-4|0;l=a+16|0;i=f+8|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=20924;k[f>>2]=20888;k[d>>2]=20948;x=0;fb(140,h|0,271314,28);e=x;x=0;if(e&1){e=Hc()|0;q=M;s=e}else{k[g>>2]=21048;e=g+4|0;x=0;xa(604,e|0,h|0);c=x;x=0;if(c&1){c=Hc()|0;t=M;u=c}else{x=0;c=Ta(494,f|0,g|0)|0;f=x;x=0;if(!(f&1)){x=0;nb(87,c|0,271343,269817,1297);x=0}c=Hc()|0;f=M;k[g>>2]=21048;K2a(e);t=f;u=c}K2a(h);q=t;s=u}k[a>>2]=20980;k[b>>2]=21008;k[l>>2]=21032;K2a(i);k[d>>2]=20796;d=k[p>>2]|0;if(!d)Sc(s|0);x=0;i=Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(!i)Sc(s|0);k[p>>2]=0;Sc(s|0)}}}function cna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Eg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0;c=r;r=r+6992|0;d=c+5616|0;e=c+5536|0;f=c+5456|0;g=c+5376|0;h=c+5296|0;j=c+5216|0;m=c+5136|0;n=c+5056|0;o=c+4976|0;p=c+6940|0;q=c+4896|0;s=c+4816|0;t=c+4736|0;u=c+4656|0;v=c+4576|0;w=c+4496|0;y=c+4416|0;z=c+4336|0;A=c+4256|0;B=c+4176|0;C=c+6928|0;D=c+4096|0;E=c+4016|0;F=c+3936|0;G=c+3856|0;H=c+3776|0;I=c+3696|0;J=c+3616|0;K=c+6916|0;L=c+3536|0;N=c+3456|0;O=c+3376|0;P=c+3296|0;Q=c+6904|0;R=c+3216|0;S=c+3208|0;T=c+6896|0;U=c+3128|0;V=c+6884|0;W=c+6872|0;X=c+3048|0;Y=c+2968|0;Z=c+2888|0;_=c+2808|0;$=c+2728|0;aa=c+2648|0;ba=c+2568|0;ca=c+2488|0;da=c+2408|0;ea=c+2328|0;fa=c+6860|0;ga=c+2248|0;ha=c+2168|0;ia=c+6848|0;ja=c+2088|0;ka=c+2008|0;la=c+1928|0;ma=c+1848|0;na=c+1768|0;oa=c+1688|0;qa=c+6836|0;ra=c+1608|0;sa=c+1528|0;ta=c+1448|0;ua=c+1368|0;wa=c+1288|0;ya=c+1208|0;za=c+1128|0;Aa=c+1048|0;Ca=c+968|0;Da=c+888|0;Ea=c+808|0;Fa=c+6724|0;Ga=c+6720|0;Ha=c+6716|0;Ia=c+6708|0;Ja=c+6700|0;Ka=c+6684|0;Ma=c+704|0;Oa=c+6824|0;Pa=c+6812|0;Qa=c+6800|0;Ra=c+6788|0;Sa=c+6784|0;Ua=c+6776|0;Va=c+6656|0;Wa=c+6764|0;Xa=c+6752|0;Ya=c+6632|0;Za=c+6740|0;_a=c+6728|0;$a=c+768|0;ab=c+728|0;bb=c+6712|0;cb=c+6704|0;db=c+6688|0;eb=c+6680|0;gb=c+6668|0;ib=c+6644|0;jb=c+624|0;kb=c+6616|0;lb=c+6604|0;mb=c+6580|0;ob=c+6564|0;pb=c+6544|0;qb=c+6528|0;rb=c+6504|0;sb=c+6484|0;tb=c+6620|0;ub=c+6480|0;vb=c+544|0;wb=c+6476|0;xb=c+6464|0;yb=c+6460|0;zb=c+344|0;Ab=c+264|0;Cb=c+6456|0;Db=c+6424|0;Eb=c+6392|0;Fb=c+6388|0;Gb=c+6376|0;Hb=c+6288|0;Ib=c+6272|0;Jb=c+6260|0;Kb=c+6248|0;Lb=c+6236|0;Mb=c+6224|0;Nb=c+6220|0;Ob=c+6208|0;Pb=c+6592|0;Qb=c+6204|0;Rb=c+6200|0;Sb=c+6188|0;Tb=c+6184|0;Ub=c+6180|0;Vb=c+6168|0;Wb=c+6164|0;Xb=c+6160|0;Yb=c+6148|0;Zb=c+6136|0;_b=c+6124|0;$b=c+6120|0;ac=c+6108|0;bc=c+6104|0;cc=c+6100|0;dc=c+6088|0;ec=c+6076|0;fc=c+6072|0;gc=c+6068|0;hc=c+6056|0;ic=c+6028|0;jc=c+6016|0;kc=c+6952|0;lc=c+6004|0;mc=c+6568|0;nc=c+6552|0;oc=c+5992|0;pc=c+5988|0;qc=c+5984|0;rc=c+5980|0;sc=c+5976|0;tc=c+5964|0;uc=c+5960|0;vc=c+5928|0;wc=c+120|0;xc=c+5916|0;yc=c+5904|0;zc=c+5892|0;Ac=c+5880|0;Bc=c+6536|0;Cc=c+5868|0;Dc=c+6520|0;Ec=c+5864|0;Fc=c+5860|0;Gc=c+80|0;Ic=c+5856|0;Jc=c+5852|0;Lc=c+6496|0;Mc=c+5848|0;Nc=c+5844|0;Oc=c+5840|0;Pc=c+5828|0;Qc=c+5816|0;Rc=c+5804|0;Tc=c+5800|0;Uc=c+5768|0;Vc=c+5764|0;Wc=c+464|0;Xc=c+5736|0;Yc=c+40|0;Zc=c+5732|0;_c=c+384|0;$c=c;ad=c+5728|0;bd=c+5688|0;cd=c+5672|0;dd=c+5656|0;ed=a+8|0;xka(Ma,k[ed>>2]|0,b);x=0;fd=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;gd=x;x=0;a:do if(!(gd&1)){if(i[fd+24>>0]|0){hd=b+32|0;k[Ja>>2]=k[hd>>2];id=b+36|0;k[Ka>>2]=k[id>>2];x=0;k[e>>2]=k[Ja>>2];k[d>>2]=k[Ka>>2];fb(345,Oa|0,e|0,d|0);jd=x;x=0;if(jd&1)break;jd=Oa+4|0;kd=k[jd>>2]|0;ld=k[Oa>>2]|0;x=0;fb(140,Pa|0,329672,0);md=x;x=0;do if(md&1){nd=Hc()|0;od=nd;pd=M}else{x=0;pa(57,(kd-ld|0)==8|0,Pa|0,403,269817,271452);nd=x;x=0;if(nd&1){nd=Hc()|0;qd=M;K2a(Pa);od=nd;pd=qd;break}K2a(Pa);qd=k[Oa>>2]|0;if(qd){nd=k[jd>>2]|0;if((nd|0)==(qd|0))rd=qd;else{sd=nd;while(1){nd=sd+-8|0;k[jd>>2]=nd;td=k[sd+-4>>2]|0;if(!td)ud=nd;else{j0a(td);ud=k[jd>>2]|0}if((ud|0)==(qd|0))break;else sd=ud}rd=k[Oa>>2]|0}OBa(rd)}sd=k[b+44>>2]|0;qd=k[b+48>>2]|0;x=0;fb(140,Qa|0,329672,0);td=x;x=0;if(td&1)break a;x=0;pa(57,(sd|0)==(qd|0)|0,Qa|0,404,269817,271452);qd=x;x=0;if(qd&1){qd=Hc()|0;sd=M;K2a(Qa);vd=qd;wd=sd;oy(Ma);Sc(vd|0)}K2a(Qa);k[Ha>>2]=k[hd>>2];k[Ia>>2]=k[id>>2];x=0;k[e>>2]=k[Ha>>2];k[d>>2]=k[Ia>>2];fb(345,Ra|0,e|0,d|0);sd=x;x=0;if(sd&1)break a;sd=k[Ra>>2]|0;qd=k[sd>>2]|0;if(sd){td=Ra+4|0;nd=k[td>>2]|0;if((nd|0)==(sd|0))xd=sd;else{yd=nd;while(1){nd=yd+-8|0;k[td>>2]=nd;zd=k[yd+-4>>2]|0;if(!zd)Ad=nd;else{j0a(zd);Ad=k[td>>2]|0}if((Ad|0)==(sd|0))break;else yd=Ad}xd=k[Ra>>2]|0}OBa(xd)}x=0;xa(k[(k[qd>>2]|0)+12>>2]|0,qd|0,a|0);yd=x;x=0;if(yd&1)break a;k[Sa>>2]=k[ed>>2];x=0;yd=Ba(k[(k[qd>>2]|0)+16>>2]|0,qd|0)|0;sd=x;x=0;if(sd&1)break a;sd=k[yd+4>>2]|0;x=0;yd=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;td=x;x=0;if(td&1)break a;x=0;nb(137,Sa|0,sd|0,k[yd+4>>2]|0,0);yd=x;x=0;if(yd&1)break a;oy(Ma);r=c;return 0}while(0);id=k[Oa>>2]|0;if(!id){vd=od;wd=pd;oy(Ma);Sc(vd|0)}hd=k[jd>>2]|0;if((hd|0)==(id|0))Bd=id;else{ld=hd;while(1){hd=ld+-8|0;k[jd>>2]=hd;kd=k[ld+-4>>2]|0;if(!kd)Dd=hd;else{j0a(kd);Dd=k[jd>>2]|0}if((Dd|0)==(id|0))break;else ld=Dd}Bd=k[Oa>>2]|0}OBa(Bd);vd=od;wd=pd;oy(Ma);Sc(vd|0)}x=0;ld=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;id=x;x=0;do if(!(id&1)){jd=(i[ld+25>>0]|0)==0;kd=b+24|0;hd=k[kd>>2]|0;x=0;md=Ba(k[(k[hd>>2]|0)+16>>2]|0,hd|0)|0;hd=x;x=0;yd=hd&1;if(jd){if(yd){Ed=0;Fd=47;break}jd=k[md+4>>2]|0;if((jd|0)!=0?(hd=iDa(jd,168,6768,0)|0,(hd|0)!=0):0){jd=hd;hd=k[md+8>>2]|0;sd=hd;if(!hd){Gd=jd;Hd=sd}else{h0a(hd);Gd=jd;Hd=sd}}else{Gd=0;Hd=0}}else{if(yd){Ed=0;Fd=47;break}yd=iDa(k[md+4>>2]|0,168,6800,0)|0;if(!yd){x=0;hb(49);x=0;Ed=0;Fd=47;break}md=iDa(k[yd+24>>2]|0,168,6720,0)|0;if(!md){x=0;hb(49);x=0;Ed=0;Fd=47;break}x=0;xa(851,Ua|0,md|0);md=x;x=0;if(md&1){Ed=0;Fd=47;break}md=k[Ua>>2]|0;yd=Ua+4|0;sd=k[yd>>2]|0;k[Ua>>2]=0;k[yd>>2]=0;Gd=md;Hd=sd}sd=Gd;x=0;xa(591,Va|0,sd|0);md=x;x=0;if(!(md&1)){k[Fa>>2]=k[b+32>>2];k[Ga>>2]=k[b+36>>2];x=0;k[e>>2]=k[Fa>>2];k[d>>2]=k[Ga>>2];fb(345,Wa|0,e|0,d|0);md=x;x=0;if(!(md&1)){md=b+44|0;do if(!(i[sd+76>>0]|0)){yd=k[Wa+4>>2]|0;jd=k[Wa>>2]|0;hd=k[Va+4>>2]|0;td=k[Va>>2]|0;x=0;fb(140,Xa|0,329672,0);zd=x;x=0;if(zd&1){zd=Hc()|0;Id=zd;Jd=M;break}x=0;pa(57,(yd-jd|0)==(hd-td|0)|0,Xa|0,425,269817,271452);td=x;x=0;if(td&1){td=Hc()|0;hd=M;K2a(Xa);Id=td;Jd=hd;break}else{K2a(Xa);Fd=62;break}}else Fd=62;while(0);if((Fd|0)==62){k[Ya>>2]=0;qd=Ya+4|0;k[qd>>2]=0;k[Ya+8>>2]=0;hd=b+48|0;b:do if((k[md>>2]|0)==(k[hd>>2]|0)){x=0;fb(346,Ya|0,k[Wa>>2]|0,k[Wa+4>>2]|0);td=x;x=0;if(td&1)Fd=69;else Fd=106}else{x=0;xa(749,Za|0,sd|0);td=x;x=0;if(!(td&1)){td=k[Za>>2]|0;jd=Za+4|0;yd=k[jd>>2]|0;do if((td|0)==(yd|0))Kd=td;else{zd=Ya+8|0;nd=td;c:while(1){Ld=k[md>>2]|0;if((k[hd>>2]|0)==(Ld|0))Md=0;else{Nd=nd+4|0;Od=nd+1|0;Pd=nd+8|0;Qd=Ld;Ld=0;while(1){Rd=k[Qd+(Ld<<3)>>2]|0;Sd=i[nd>>0]|0;Td=(Sd&1)==0;Ud=(Sd&255)>>>1;Sd=Td?Ud:k[Nd>>2]|0;Vd=i[Rd>>0]|0;Wd=(Vd&1)==0;d:do if((Sd|0)==((Wd?(Vd&255)>>>1:k[Rd+4>>2]|0)|0)){Xd=Wd?Rd+1|0:k[Rd+8>>2]|0;do if(!Td){if(ZLa(k[Pd>>2]|0,Xd,Sd)|0){Yd=0;break d}}else{if(!Sd)break;else{Zd=Ud;_d=Od;$d=Xd}while(1){if((i[_d>>0]|0)!=(i[$d>>0]|0)){Yd=0;break d}Zd=Zd+-1|0;if(!Zd)break;else{_d=_d+1|0;$d=$d+1|0}}}while(0);Xd=k[Wa>>2]|0;ae=Xd+(Ld<<3)|0;be=k[qd>>2]|0;if((be|0)==(k[zd>>2]|0)){x=0;xa(852,Ya|0,ae|0);ce=x;x=0;if(ce&1){Fd=94;break c}else{Yd=1;break}}k[be>>2]=k[ae>>2];ae=k[Xd+(Ld<<3)+4>>2]|0;k[be+4>>2]=ae;if(!ae)de=be;else{h0a(ae);de=k[qd>>2]|0}k[qd>>2]=de+8;Yd=1}else Yd=0;while(0);Ld=Ld+1|0;Qd=k[md>>2]|0;if(Yd|Ld>>>0>=(k[hd>>2]|0)-Qd>>3>>>0){Md=Yd;break}}}x=0;fb(140,_a|0,329672,0);Qd=x;x=0;if(Qd&1){Fd=95;break}x=0;pa(57,Md|0,_a|0,440,269817,271452);Qd=x;x=0;if(Qd&1){Fd=100;break}K2a(_a);nd=nd+12|0;if((nd|0)==(yd|0)){Fd=76;break}}if((Fd|0)==76){Kd=k[Za>>2]|0;break}else if((Fd|0)==94){nd=Hc()|0;ee=nd;fe=M;Fd=96}else if((Fd|0)==95){nd=Hc()|0;ee=nd;fe=M;Fd=96}else if((Fd|0)==100){nd=Hc()|0;zd=M;K2a(_a);ge=nd;he=zd}if((Fd|0)==96){ge=ee;he=fe}zd=k[Za>>2]|0;if(!zd){ie=ge;je=he;break b}nd=k[jd>>2]|0;if((nd|0)==(zd|0))ke=zd;else{Qd=nd;do{nd=Qd+-12|0;k[jd>>2]=nd;K2a(nd);Qd=k[jd>>2]|0}while((Qd|0)!=(zd|0));ke=k[Za>>2]|0}OBa(ke);ie=ge;je=he;break b}while(0);if(!Kd)Fd=106;else{yd=k[jd>>2]|0;if((yd|0)==(Kd|0))le=Kd;else{td=yd;do{yd=td+-12|0;k[jd>>2]=yd;K2a(yd);td=k[jd>>2]|0}while((td|0)!=(Kd|0));le=k[Za>>2]|0}OBa(le);Fd=106}}else Fd=69}while(0);e:do if((Fd|0)==106){x=0;hd=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;md=x;x=0;if(md&1)Fd=69;else{f:do if(i[hd+25>>0]|0){md=k[kd>>2]|0;x=0;td=Ba(k[(k[md>>2]|0)+16>>2]|0,md|0)|0;md=x;x=0;if(md&1){Fd=69;break e}md=iDa(k[td+4>>2]|0,168,6800,0)|0;if(!md){x=0;hb(49);x=0;Fd=69;break e}td=iDa(k[md+24>>2]|0,168,6720,0)|0;if(!td){x=0;hb(49);x=0;Fd=69;break e}md=k[ed>>2]|0;k[$a>>2]=32;k[$a+32>>2]=1;x=0;xa(853,ab|0,td|0);td=x;x=0;if(td&1){Fd=69;break e}td=k[ab+32>>2]|0;g:do if((td|0)==1){jd=1;while(1){jd=jd+-1|0;if((jd|0)<=-1){me=0;break g}yd=k[$a+(jd<<2)>>2]|0;zd=k[ab+(jd<<2)>>2]|0;if((yd|0)!=(zd|0)){ne=yd;oe=zd;break}}me=ne>>>0>oe>>>0?1:-1}else me=(td|0)==0?1:-1;while(0);td=md+48|0;k[Ea>>2]=2;pe=Ea+8|0;qe=(me|0)<0?ab:$a;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));md=Ea+48|0;k[md>>2]=-1;k[md+4>>2]=-1;md=Ea+56|0;jd=Ea+60|0;zd=Ea+72|0;k[md>>2]=0;k[md+4>>2]=0;k[md+8>>2]=0;k[md+12>>2]=0;k[md+16>>2]=0;x=0;Ta(539,td|0,Ea|0)|0;md=x;x=0;if(md&1){md=Hc()|0;yd=M;Qd=k[zd>>2]|0;if(Qd)j0a(Qd);Qd=k[jd>>2]|0;if(!Qd){se=yd;te=md;Fd=70;break e}j0a(Qd);se=yd;te=md;Fd=70;break e}md=k[zd>>2]|0;if(md)j0a(md);md=k[jd>>2]|0;if(md)j0a(md);k[bb>>2]=k[ed>>2];x=0;va(1516,bb|0);md=x;x=0;if(md&1){Fd=69;break e}md=k[ed>>2]|0;k[Da>>2]=1;k[Da+8>>2]=128;k[Da+40>>2]=1;jd=Da+48|0;k[jd>>2]=-1;k[jd+4>>2]=-1;jd=Da+56|0;zd=Da+60|0;yd=Da+72|0;k[jd>>2]=0;k[jd+4>>2]=0;k[jd+8>>2]=0;k[jd+12>>2]=0;k[jd+16>>2]=0;x=0;Ta(539,md+48|0,Da|0)|0;md=x;x=0;if(md&1){md=Hc()|0;jd=M;Qd=k[yd>>2]|0;if(Qd)j0a(Qd);Qd=k[zd>>2]|0;if(!Qd){se=jd;te=md;Fd=70;break e}j0a(Qd);se=jd;te=md;Fd=70;break e}md=k[yd>>2]|0;if(md)j0a(md);md=k[zd>>2]|0;if(md)j0a(md);md=k[Ya>>2]|0;h:do if((k[qd>>2]|0)!=(md|0)){zd=gb+4|0;yd=db+4|0;jd=md;Qd=0;while(1){nd=k[jd+(Qd<<3)>>2]|0;x=0;xa(k[(k[nd>>2]|0)+12>>2]|0,nd|0,a|0);nd=x;x=0;if(nd&1){Fd=68;break}k[cb>>2]=k[ed>>2];nd=k[(k[Ya>>2]|0)+(Qd<<3)>>2]|0;x=0;Ld=Ba(k[(k[nd>>2]|0)+16>>2]|0,nd|0)|0;nd=x;x=0;if(nd&1){Fd=68;break}nd=k[Ld+4>>2]|0;x=0;xa(591,db|0,sd|0);Ld=x;x=0;if(Ld&1){Fd=68;break}x=0;nb(137,cb|0,nd|0,k[(k[db>>2]|0)+(Qd<<3)>>2]|0,0);nd=x;x=0;if(nd&1){Fd=172;break}nd=k[db>>2]|0;if(nd){Ld=k[yd>>2]|0;if((Ld|0)==(nd|0))ue=nd;else{Od=Ld;while(1){Ld=Od+-8|0;k[yd>>2]=Ld;Pd=k[Od+-4>>2]|0;if(!Pd)ve=Ld;else{j0a(Pd);ve=k[yd>>2]|0}if((ve|0)==(nd|0))break;else Od=ve}ue=k[db>>2]|0}OBa(ue)}k[eb>>2]=k[ed>>2];x=0;xa(591,gb|0,sd|0);Od=x;x=0;if(Od&1){Fd=68;break}x=0;fb(320,eb|0,k[(k[gb>>2]|0)+(Qd<<3)>>2]|0,1);Od=x;x=0;if(Od&1){Fd=179;break}Od=k[gb>>2]|0;if(Od){nd=k[zd>>2]|0;if((nd|0)==(Od|0))we=Od;else{Pd=nd;while(1){nd=Pd+-8|0;k[zd>>2]=nd;Ld=k[Pd+-4>>2]|0;if(!Ld)xe=nd;else{j0a(Ld);xe=k[zd>>2]|0}if((xe|0)==(Od|0))break;else Pd=xe}we=k[gb>>2]|0}OBa(we)}Qd=Qd+1|0;jd=k[Ya>>2]|0;if(Qd>>>0>=(k[qd>>2]|0)-jd>>3>>>0)break h}if((Fd|0)==68){jd=Hc()|0;se=M;te=jd;Fd=70;break e}else if((Fd|0)==172){jd=Hc()|0;Qd=M;Pd=k[db>>2]|0;if(!Pd){ie=jd;je=Qd;break e}Od=k[yd>>2]|0;if((Od|0)==(Pd|0))ye=Pd;else{Ld=Od;while(1){Od=Ld+-8|0;k[yd>>2]=Od;nd=k[Ld+-4>>2]|0;if(!nd)ze=Od;else{j0a(nd);ze=k[yd>>2]|0}if((ze|0)==(Pd|0))break;else Ld=ze}ye=k[db>>2]|0}OBa(ye);ie=jd;je=Qd;break e}else if((Fd|0)==179){Ld=Hc()|0;Pd=M;yd=k[gb>>2]|0;if(!yd){ie=Ld;je=Pd;break e}nd=k[zd>>2]|0;if((nd|0)==(yd|0))Ae=yd;else{Od=nd;while(1){nd=Od+-8|0;k[zd>>2]=nd;Nd=k[Od+-4>>2]|0;if(!Nd)Be=nd;else{j0a(Nd);Be=k[zd>>2]|0}if((Be|0)==(yd|0))break;else Od=Be}Ae=k[gb>>2]|0}OBa(Ae);ie=Ld;je=Pd;break e}}while(0);md=k[ed>>2]|0;k[Ca>>2]=1;k[Ca+8>>2]=80;k[Ca+40>>2]=1;td=Ca+48|0;k[td>>2]=-1;k[td+4>>2]=-1;td=Ca+56|0;Od=Ca+60|0;yd=Ca+72|0;k[td>>2]=0;k[td+4>>2]=0;k[td+8>>2]=0;k[td+12>>2]=0;k[td+16>>2]=0;x=0;Ta(539,md+48|0,Ca|0)|0;md=x;x=0;if(md&1){md=Hc()|0;td=M;zd=k[yd>>2]|0;if(zd)j0a(zd);zd=k[Od>>2]|0;if(!zd){se=td;te=md;Fd=70;break e}j0a(zd);se=td;te=md;Fd=70;break e}md=k[yd>>2]|0;if(md)j0a(md);md=k[Od>>2]|0;if(md)j0a(md)}else{md=sd+79|0;Od=sd+72|0;do if(i[md>>0]|0){yd=k[Od>>2]|0;x=0;fb(140,ib|0,329672,0);td=x;x=0;if(td&1){Fd=69;break e}x=0;pa(57,(yd|0)==3|(yd|0)==0|0,ib|0,465,269817,271452);yd=x;x=0;if(yd&1){yd=Hc()|0;td=M;K2a(ib);ie=yd;je=td;break e}else{K2a(ib);break}}while(0);td=k[Od>>2]|0;do switch(td|0){case 0:{x=0;xa(827,jb|0,k[ed>>2]|0);yd=x;x=0;if(yd&1){Fd=69;break e}yd=k[Ya>>2]|0;i:do if((k[qd>>2]|0)==(yd|0))Fd=196;else{zd=lb+4|0;Qd=yd;jd=0;while(1){Nd=k[Qd+(jd<<3)>>2]|0;x=0;xa(k[(k[Nd>>2]|0)+12>>2]|0,Nd|0,a|0);Nd=x;x=0;if(Nd&1){Fd=209;break}k[kb>>2]=k[ed>>2];Nd=k[(k[Ya>>2]|0)+(jd<<3)>>2]|0;x=0;nd=Ba(k[(k[Nd>>2]|0)+16>>2]|0,Nd|0)|0;Nd=x;x=0;if(Nd&1){Fd=209;break}Nd=k[nd+4>>2]|0;x=0;xa(591,lb|0,sd|0);nd=x;x=0;if(nd&1){Fd=209;break}x=0;nb(137,kb|0,Nd|0,k[(k[lb>>2]|0)+(jd<<3)>>2]|0,0);Nd=x;x=0;if(Nd&1)break;Nd=k[lb>>2]|0;if(Nd){nd=k[zd>>2]|0;if((nd|0)==(Nd|0))Ce=Nd;else{Ud=nd;while(1){nd=Ud+-8|0;k[zd>>2]=nd;Sd=k[Ud+-4>>2]|0;if(!Sd)De=nd;else{j0a(Sd);De=k[zd>>2]|0}if((De|0)==(Nd|0))break;else Ud=De}Ce=k[lb>>2]|0}OBa(Ce)}jd=jd+1|0;Qd=k[Ya>>2]|0;if(jd>>>0>=(k[qd>>2]|0)-Qd>>3>>>0){Fd=196;break i}}if((Fd|0)==209){Qd=Hc()|0;Ee=Qd;Fe=M;Fd=211;break}Qd=Hc()|0;jd=M;Ud=k[lb>>2]|0;if(!Ud){Ge=Qd;He=jd;break}Nd=k[zd>>2]|0;if((Nd|0)==(Ud|0))Ie=Ud;else{Sd=Nd;while(1){Nd=Sd+-8|0;k[zd>>2]=Nd;nd=k[Sd+-4>>2]|0;if(!nd)Je=Nd;else{j0a(nd);Je=k[zd>>2]|0}if((Je|0)==(Ud|0))break;else Sd=Je}Ie=k[lb>>2]|0}OBa(Ie);Ge=Qd;He=jd}while(0);j:do if((Fd|0)==196){yd=k[kd>>2]|0;x=0;xa(k[(k[yd>>2]|0)+12>>2]|0,yd|0,a|0);yd=x;x=0;k:do if(!(yd&1)){x=0;xa(591,mb|0,sd|0);Pd=x;x=0;if(Pd&1)break;x=0;Pd=Ba(607,mb|0)|0;Ld=x;x=0;if(Ld&1){Ld=Hc()|0;Sd=M;Ud=k[mb>>2]|0;if(!Ud){Ge=Ld;He=Sd;break j}zd=mb+4|0;nd=k[zd>>2]|0;if((nd|0)==(Ud|0))Ke=Ud;else{Nd=nd;while(1){nd=Nd+-8|0;k[zd>>2]=nd;Td=k[Nd+-4>>2]|0;if(!Td)Le=nd;else{j0a(Td);Le=k[zd>>2]|0}if((Le|0)==(Ud|0))break;else Nd=Le}Ke=k[mb>>2]|0}OBa(Ke);Ge=Ld;He=Sd;break j}Nd=k[mb>>2]|0;if(Nd){Ud=mb+4|0;zd=k[Ud>>2]|0;if((zd|0)==(Nd|0))Me=Nd;else{Td=zd;while(1){zd=Td+-8|0;k[Ud>>2]=zd;nd=k[Td+-4>>2]|0;if(!nd)Ne=zd;else{j0a(nd);Ne=k[Ud>>2]|0}if((Ne|0)==(Nd|0))break;else Td=Ne}Me=k[mb>>2]|0}OBa(Me)}l:do if(!(i[md>>0]|0))Oe=Pd;else{k[ob>>2]=k[ed>>2];x=0;xa(751,pb|0,sd|0);Td=x;x=0;if(Td&1)break k;Td=k[pb>>2]|0;x=0;Nd=Ba(k[(k[Td>>2]|0)+60>>2]|0,Td|0)|0;Td=x;x=0;do if(!(Td&1)){x=0;fb(333,ob|0,Pd+1|0,Nd|0);Ud=x;x=0;if(Ud&1)break;Ud=k[pb+4>>2]|0;if(Ud)j0a(Ud);x=0;xa(751,qb|0,sd|0);Ud=x;x=0;if(Ud&1)break k;Ud=k[qb>>2]|0;x=0;Sd=Ba(k[(k[Ud>>2]|0)+60>>2]|0,Ud|0)|0;Ud=x;x=0;if(Ud&1){Ud=Hc()|0;Ld=M;nd=k[qb+4>>2]|0;if(!nd){Ge=Ud;He=Ld;break j}j0a(nd);Ge=Ud;He=Ld;break j}else{Ld=Sd+Pd|0;Sd=k[qb+4>>2]|0;if(!Sd){Oe=Ld;break l}j0a(Sd);Oe=Ld;break l}}while(0);Nd=Hc()|0;Td=M;Ld=k[pb+4>>2]|0;if(!Ld){Ge=Nd;He=Td;break j}j0a(Ld);Ge=Nd;He=Td;break j}while(0);x=0;Ta(602,k[ed>>2]|0,1)|0;Pd=x;x=0;if(Pd&1)break;x=0;Ta(539,(k[ed>>2]|0)+48|0,jb|0)|0;Pd=x;x=0;if(Pd&1)break;x=0;Pd=Ba(607,sd+36|0)|0;Td=x;x=0;if(Td&1)break;x=0;xa(823,(k[ed>>2]|0)+48|0,Pd+~Oe|0);Pd=x;x=0;if(Pd&1)break;Pd=k[jb+72>>2]|0;if(Pd)j0a(Pd);Pd=k[jb+60>>2]|0;if(Pd)j0a(Pd);break f}while(0);yd=Hc()|0;Ee=yd;Fe=M;Fd=211}while(0);if((Fd|0)==211){Ge=Ee;He=Fe}yd=k[jb+72>>2]|0;if(yd)j0a(yd);yd=k[jb+60>>2]|0;if(!yd){ie=Ge;je=He;break e}j0a(yd);ie=Ge;je=He;break e;break}case 6:case 5:case 4:case 3:case 2:case 1:{yd=k[kd>>2]|0;x=0;xa(k[(k[yd>>2]|0)+12>>2]|0,yd|0,a|0);yd=x;x=0;if(yd&1){Fd=69;break e}x=0;fb(347,a|0,sd|0,Ya|0);yd=x;x=0;if(yd&1){Fd=69;break e}else break f;break}case 7:{yd=k[kd>>2]|0;x=0;xa(k[(k[yd>>2]|0)+12>>2]|0,yd|0,a|0);yd=x;x=0;if(yd&1){Fd=69;break e}yd=i[sd+77>>0]|0;x=0;fb(140,rb|0,271543,36);jd=x;x=0;if(jd&1){Fd=69;break e}x=0;pa(57,yd<<24>>24==0|0,rb|0,509,269817,271452);yd=x;x=0;if(yd&1){yd=Hc()|0;jd=M;K2a(rb);ie=yd;je=jd;break e}K2a(rb);jd=sd+36|0;yd=k[sd+40>>2]|0;Qd=k[jd>>2]|0;x=0;fb(140,sb|0,329672,0);Pd=x;x=0;if(Pd&1){Fd=69;break e}x=0;pa(57,(yd-Qd|0)==8|0,sb|0,510,269817,271452);Qd=x;x=0;if(Qd&1){Qd=Hc()|0;yd=M;K2a(sb);ie=Qd;je=yd;break e}K2a(sb);k[tb>>2]=0;yd=tb+4|0;k[yd>>2]=0;k[tb+8>>2]=0;Qd=k[Ya>>2]|0;Pd=k[qd>>2]|0;m:do if((Qd|0)==(Pd|0))Fd=271;else{Td=tb+8|0;Nd=Qd;while(1){Ld=k[Nd>>2]|0;x=0;xa(k[(k[Ld>>2]|0)+12>>2]|0,Ld|0,a|0);Ld=x;x=0;if(Ld&1)break;Ld=k[Nd>>2]|0;x=0;Sd=Ba(k[(k[Ld>>2]|0)+16>>2]|0,Ld|0)|0;Ld=x;x=0;if(Ld&1)break;Ld=Sd+4|0;Ud=k[yd>>2]|0;if((Ud|0)==(k[Td>>2]|0)){x=0;xa(743,tb|0,Ld|0);nd=x;x=0;if(nd&1)break}else{k[Ud>>2]=k[Ld>>2];Ld=k[Sd+8>>2]|0;k[Ud+4>>2]=Ld;if(!Ld)Pe=Ud;else{h0a(Ld);Pe=k[yd>>2]|0}k[yd>>2]=Pe+8}Nd=Nd+8|0;if((Nd|0)==(Pd|0)){Fd=271;break m}}Nd=Hc()|0;Qe=Nd;Re=M;Fd=284}while(0);n:do if((Fd|0)==271){Pd=iDa(k[k[jd>>2]>>2]|0,168,6672,0)|0;do if(!Pd){x=0;hb(49);x=0}else{x=0;Qd=Ta(604,k[ed>>2]|0,k[Pd+24>>2]|0)|0;Nd=x;x=0;if(Nd&1)break;k[ub>>2]=k[ed>>2];x=0;va(1508,ub|0);Nd=x;x=0;if(Nd&1)break;x=0;fb(330,vb|0,(k[ed>>2]|0)+48|0,Qd|0);Qd=x;x=0;if(Qd&1)break;Qd=k[ed>>2]|0;k[ua>>2]=1;k[ua+8>>2]=128;k[ua+40>>2]=1;Nd=ua+48|0;k[Nd>>2]=-1;k[Nd+4>>2]=-1;Nd=ua+56|0;Td=ua+60|0;Ld=ua+72|0;Ud=Qd+48|0;k[Nd>>2]=0;k[Nd+4>>2]=0;k[Nd+8>>2]=0;k[Nd+12>>2]=0;k[Nd+16>>2]=0;x=0;Ta(539,Ud|0,ua|0)|0;Nd=x;x=0;o:do if(Nd&1){Qd=Hc()|0;Sd=M;nd=k[Ld>>2]|0;if(nd)j0a(nd);nd=k[Td>>2]|0;if(!nd){Se=Sd;Te=Qd;Fd=349;break}j0a(nd);Se=Sd;Te=Qd;Fd=349}else{Qd=k[Ld>>2]|0;if(Qd)j0a(Qd);Qd=k[Td>>2]|0;if(Qd)j0a(Qd);x=0;Ta(539,Ud|0,vb|0)|0;Qd=x;x=0;do if(!(Qd&1)){Sd=k[ed>>2]|0;k[ta>>2]=1;k[ta+8>>2]=131;k[ta+40>>2]=1;nd=ta+48|0;k[nd>>2]=-1;k[nd+4>>2]=-1;nd=ta+56|0;zd=ta+60|0;Rd=ta+72|0;Wd=Sd+48|0;k[nd>>2]=0;k[nd+4>>2]=0;k[nd+8>>2]=0;k[nd+12>>2]=0;k[nd+16>>2]=0;x=0;Ta(539,Wd|0,ta|0)|0;nd=x;x=0;if(nd&1){nd=Hc()|0;Sd=M;Vd=k[Rd>>2]|0;if(Vd)j0a(Vd);Vd=k[zd>>2]|0;if(!Vd){Se=Sd;Te=nd;Fd=349;break o}j0a(Vd);Se=Sd;Te=nd;Fd=349;break o}nd=k[Rd>>2]|0;if(nd)j0a(nd);nd=k[zd>>2]|0;if(nd)j0a(nd);k[sa>>2]=1;k[sa+8>>2]=57;k[sa+40>>2]=1;nd=sa+48|0;k[nd>>2]=-1;k[nd+4>>2]=-1;nd=sa+56|0;zd=sa+60|0;Rd=sa+72|0;k[nd>>2]=0;k[nd+4>>2]=0;k[nd+8>>2]=0;k[nd+12>>2]=0;k[nd+16>>2]=0;x=0;Ta(539,Wd|0,sa|0)|0;Wd=x;x=0;if(Wd&1){Wd=Hc()|0;nd=M;Sd=k[Rd>>2]|0;if(Sd)j0a(Sd);Sd=k[zd>>2]|0;if(!Sd){Se=nd;Te=Wd;Fd=349;break o}j0a(Sd);Se=nd;Te=Wd;Fd=349;break o}Wd=k[Rd>>2]|0;if(Wd)j0a(Wd);Wd=k[zd>>2]|0;if(Wd)j0a(Wd);Wd=k[ed>>2]|0;k[ra>>2]=1;k[ra+8>>2]=1;k[ra+40>>2]=1;zd=ra+48|0;k[zd>>2]=-1;k[zd+4>>2]=-1;zd=ra+56|0;Rd=ra+60|0;nd=ra+72|0;k[zd>>2]=0;k[zd+4>>2]=0;k[zd+8>>2]=0;k[zd+12>>2]=0;k[zd+16>>2]=0;x=0;Ta(539,Wd+48|0,ra|0)|0;Wd=x;x=0;if(Wd&1){Wd=Hc()|0;zd=M;Sd=k[nd>>2]|0;if(Sd)j0a(Sd);Sd=k[Rd>>2]|0;if(!Sd){Se=zd;Te=Wd;Fd=349;break o}j0a(Sd);Se=zd;Te=Wd;Fd=349;break o}Wd=k[nd>>2]|0;if(Wd)j0a(Wd);Wd=k[Rd>>2]|0;if(Wd)j0a(Wd);k[wb>>2]=k[ed>>2];x=0;xa(591,xb|0,sd|0);Wd=x;x=0;if(Wd&1)break;x=0;La(59,wb|0,tb|0,xb|0,1,0,0);Wd=x;x=0;if(Wd&1){Wd=Hc()|0;Rd=M;nd=k[xb>>2]|0;if(!nd){Ue=Wd;Ve=Rd;break o}zd=xb+4|0;Sd=k[zd>>2]|0;if((Sd|0)==(nd|0))We=nd;else{Vd=Sd;while(1){Sd=Vd+-8|0;k[zd>>2]=Sd;ae=k[Vd+-4>>2]|0;if(!ae)Xe=Sd;else{j0a(ae);Xe=k[zd>>2]|0}if((Xe|0)==(nd|0))break;else Vd=Xe}We=k[xb>>2]|0}OBa(We);Ue=Wd;Ve=Rd;break o}Vd=k[xb>>2]|0;if(Vd){nd=xb+4|0;zd=k[nd>>2]|0;if((zd|0)==(Vd|0))Ye=Vd;else{ae=zd;while(1){zd=ae+-8|0;k[nd>>2]=zd;Sd=k[ae+-4>>2]|0;if(!Sd)Ze=zd;else{j0a(Sd);Ze=k[nd>>2]|0}if((Ze|0)==(Vd|0))break;else ae=Ze}Ye=k[xb>>2]|0}OBa(Ye)}k[yb>>2]=k[ed>>2];x=0;va(1517,yb|0);ae=x;x=0;if(ae&1)break;ae=sd+78|0;Vd=k[ed>>2]|0;if(!(i[ae>>0]|0)){k[zb>>2]=0;k[zb+32>>2]=1;nd=Vd+48|0;k[na>>2]=2;pe=na+8|0;qe=zb;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));Rd=na+48|0;k[Rd>>2]=-1;k[Rd+4>>2]=-1;Rd=na+56|0;Wd=na+60|0;Sd=na+72|0;k[Rd>>2]=0;k[Rd+4>>2]=0;k[Rd+8>>2]=0;k[Rd+12>>2]=0;k[Rd+16>>2]=0;x=0;Ta(539,nd|0,na|0)|0;Rd=x;x=0;if(Rd&1){Rd=Hc()|0;zd=M;be=k[Sd>>2]|0;if(be)j0a(be);be=k[Wd>>2]|0;if(!be){Se=zd;Te=Rd;Fd=349;break o}j0a(be);Se=zd;Te=Rd;Fd=349;break o}Rd=k[Sd>>2]|0;if(Rd)j0a(Rd);Rd=k[Wd>>2]|0;if(Rd)j0a(Rd)}else{x=0;fb(140,qa|0,295946,34);Rd=x;x=0;if(Rd&1)break;K2a(qa);k[oa>>2]=1;k[oa+8>>2]=130;k[oa+40>>2]=1;Rd=oa+48|0;k[Rd>>2]=-1;k[Rd+4>>2]=-1;Rd=oa+56|0;Wd=oa+60|0;Sd=oa+72|0;k[Rd>>2]=0;k[Rd+4>>2]=0;k[Rd+8>>2]=0;k[Rd+12>>2]=0;k[Rd+16>>2]=0;x=0;Ta(539,Vd+48|0,oa|0)|0;Rd=x;x=0;if(Rd&1){Rd=Hc()|0;zd=M;be=k[Sd>>2]|0;if(be)j0a(be);be=k[Wd>>2]|0;if(!be){Se=zd;Te=Rd;Fd=349;break o}j0a(be);Se=zd;Te=Rd;Fd=349;break o}Rd=k[Sd>>2]|0;if(Rd)j0a(Rd);Rd=k[Wd>>2]|0;if(Rd)j0a(Rd)}Rd=k[ed>>2]|0;k[ma>>2]=1;k[ma+8>>2]=240;k[ma+40>>2]=1;Wd=ma+48|0;k[Wd>>2]=-1;k[Wd+4>>2]=-1;Wd=ma+56|0;Sd=ma+60|0;zd=ma+72|0;k[Wd>>2]=0;k[Wd+4>>2]=0;k[Wd+8>>2]=0;k[Wd+12>>2]=0;k[Wd+16>>2]=0;x=0;Ta(539,Rd+48|0,ma|0)|0;Rd=x;x=0;if(Rd&1){Rd=Hc()|0;Wd=M;be=k[zd>>2]|0;if(be)j0a(be);be=k[Sd>>2]|0;if(!be){Se=Wd;Te=Rd;Fd=349;break o}j0a(be);Se=Wd;Te=Rd;Fd=349;break o}Rd=k[zd>>2]|0;if(Rd)j0a(Rd);Rd=k[Sd>>2]|0;if(Rd)j0a(Rd);Rd=k[ed>>2]|0;k[la>>2]=1;k[la+8>>2]=128;k[la+40>>2]=1;Sd=la+48|0;k[Sd>>2]=-1;k[Sd+4>>2]=-1;Sd=la+56|0;zd=la+60|0;Wd=la+72|0;be=Rd+48|0;k[Sd>>2]=0;k[Sd+4>>2]=0;k[Sd+8>>2]=0;k[Sd+12>>2]=0;k[Sd+16>>2]=0;x=0;Ta(539,be|0,la|0)|0;Sd=x;x=0;if(Sd&1){Sd=Hc()|0;Rd=M;Xd=k[Wd>>2]|0;if(Xd)j0a(Xd);Xd=k[zd>>2]|0;if(!Xd){Se=Rd;Te=Sd;Fd=349;break o}j0a(Xd);Se=Rd;Te=Sd;Fd=349;break o}Sd=k[Wd>>2]|0;if(Sd)j0a(Sd);Sd=k[zd>>2]|0;if(Sd)j0a(Sd);k[ka>>2]=1;k[ka+8>>2]=21;k[ka+40>>2]=1;Sd=ka+48|0;k[Sd>>2]=-1;k[Sd+4>>2]=-1;Sd=ka+56|0;zd=ka+60|0;Wd=ka+72|0;k[Sd>>2]=0;k[Sd+4>>2]=0;k[Sd+8>>2]=0;k[Sd+12>>2]=0;k[Sd+16>>2]=0;x=0;Ta(539,be|0,ka|0)|0;be=x;x=0;if(be&1){be=Hc()|0;Sd=M;Rd=k[Wd>>2]|0;if(Rd)j0a(Rd);Rd=k[zd>>2]|0;if(!Rd){Se=Sd;Te=be;Fd=349;break o}j0a(Rd);Se=Sd;Te=be;Fd=349;break o}be=k[Wd>>2]|0;if(be)j0a(be);be=k[zd>>2]|0;if(be)j0a(be);be=k[ed>>2]|0;k[Ab>>2]=4;k[Ab+8>>2]=0;k[Ab+40>>2]=1;zd=Ab+48|0;k[zd>>2]=-1;k[zd+4>>2]=-1;zd=Ab+56|0;k[zd>>2]=0;k[zd+4>>2]=0;k[zd+8>>2]=0;k[zd+12>>2]=0;k[zd+16>>2]=0;x=0;fb(315,ja|0,be+48|0,Ab|0);be=x;x=0;if(be&1){be=Hc()|0;Ue=be;Ve=M;break o}be=k[ja+72>>2]|0;if(be)j0a(be);be=k[ja+60>>2]|0;if(be)j0a(be);if(i[ae>>0]|0){be=k[ed>>2]|0;x=0;fb(140,ia|0,296239,35);zd=x;x=0;if(zd&1)break;K2a(ia);k[ha>>2]=1;k[ha+8>>2]=144;k[ha+40>>2]=1;zd=ha+48|0;k[zd>>2]=-1;k[zd+4>>2]=-1;zd=ha+56|0;Wd=ha+60|0;Sd=ha+72|0;Rd=be+48|0;k[zd>>2]=0;k[zd+4>>2]=0;k[zd+8>>2]=0;k[zd+12>>2]=0;k[zd+16>>2]=0;x=0;Ta(539,Rd|0,ha|0)|0;zd=x;x=0;if(zd&1){zd=Hc()|0;be=M;Xd=k[Sd>>2]|0;if(Xd)j0a(Xd);Xd=k[Wd>>2]|0;if(!Xd){Se=be;Te=zd;Fd=349;break o}j0a(Xd);Se=be;Te=zd;Fd=349;break o}zd=k[Sd>>2]|0;if(zd)j0a(zd);zd=k[Wd>>2]|0;if(zd)j0a(zd);k[ga>>2]=1;k[ga+8>>2]=80;k[ga+40>>2]=1;zd=ga+48|0;k[zd>>2]=-1;k[zd+4>>2]=-1;zd=ga+56|0;Wd=ga+60|0;Sd=ga+72|0;k[zd>>2]=0;k[zd+4>>2]=0;k[zd+8>>2]=0;k[zd+12>>2]=0;k[zd+16>>2]=0;x=0;Ta(539,Rd|0,ga|0)|0;Rd=x;x=0;if(Rd&1){Rd=Hc()|0;zd=M;be=k[Sd>>2]|0;if(be)j0a(be);be=k[Wd>>2]|0;if(!be){Se=zd;Te=Rd;Fd=349;break o}j0a(be);Se=zd;Te=Rd;Fd=349;break o}Rd=k[Sd>>2]|0;if(Rd)j0a(Rd);Rd=k[Wd>>2]|0;if(Rd)j0a(Rd)}Rd=k[vb+72>>2]|0;if(Rd)j0a(Rd);Rd=k[vb+60>>2]|0;if(Rd)j0a(Rd);Rd=k[tb>>2]|0;if(Rd){Wd=k[yd>>2]|0;if((Wd|0)==(Rd|0))_e=Rd;else{Sd=Wd;while(1){Wd=Sd+-8|0;k[yd>>2]=Wd;zd=k[Sd+-4>>2]|0;if(!zd)$e=Wd;else{j0a(zd);$e=k[yd>>2]|0}if(($e|0)==(Rd|0))break;else Sd=$e}_e=k[tb>>2]|0}OBa(_e)}break f}while(0);Qd=Hc()|0;Se=M;Te=Qd;Fd=349}while(0);if((Fd|0)==349){Ue=Te;Ve=Se}Ud=k[vb+72>>2]|0;if(Ud)j0a(Ud);Ud=k[vb+60>>2]|0;if(!Ud){af=Ue;bf=Ve;break n}j0a(Ud);af=Ue;bf=Ve;break n}while(0);Pd=Hc()|0;Qe=Pd;Re=M;Fd=284}while(0);if((Fd|0)==284){af=Qe;bf=Re}jd=k[tb>>2]|0;if(!jd){ie=af;je=bf;break e}Pd=k[yd>>2]|0;if((Pd|0)==(jd|0))cf=jd;else{Ud=Pd;while(1){Pd=Ud+-8|0;k[yd>>2]=Pd;Td=k[Ud+-4>>2]|0;if(!Td)df=Pd;else{j0a(Td);df=k[yd>>2]|0}if((df|0)==(jd|0))break;else Ud=df}cf=k[tb>>2]|0}OBa(cf);ie=af;je=bf;break e;break}case 20:{Ud=k[kd>>2]|0;x=0;xa(k[(k[Ud>>2]|0)+12>>2]|0,Ud|0,a|0);Ud=x;x=0;if(Ud&1){Fd=69;break e}Ud=k[k[Ya>>2]>>2]|0;x=0;xa(k[(k[Ud>>2]|0)+12>>2]|0,Ud|0,a|0);Ud=x;x=0;if(Ud&1){Fd=69;break e}k[Cb>>2]=k[ed>>2];Ud=k[k[Ya>>2]>>2]|0;x=0;jd=Ba(k[(k[Ud>>2]|0)+16>>2]|0,Ud|0)|0;Ud=x;x=0;if(Ud&1){Fd=69;break e}Ud=k[jd+4>>2]|0;x=0;fb(247,Db|0,256,0);jd=x;x=0;if(jd&1){Fd=69;break e}x=0;nb(137,Cb|0,Ud|0,Db|0,1);Ud=x;x=0;if(Ud&1){Ud=Hc()|0;jd=M;k[Db>>2]=20456;xh(Db+12|0,k[Db+16>>2]|0);yd=k[Db+8>>2]|0;if(!yd){ie=Ud;je=jd;break e}k0a(yd);ie=Ud;je=jd;break e}k[Db>>2]=20456;xh(Db+12|0,k[Db+16>>2]|0);jd=k[Db+8>>2]|0;if(jd)k0a(jd);jd=sd+77|0;Ud=i[jd>>0]|0;yd=(l[sd+78>>0]|0)+(Ud&255)|0;if(!yd)ef=Ud;else{Ud=k[ed>>2]|0;x=0;fb(140,fa|0,296239,35);Td=x;x=0;if(Td&1){Fd=69;break e}x=0;pa(51,(yd+-1|0)>>>0<16|0,fa|0,217,295981,296275);Td=x;x=0;if(Td&1){Td=Hc()|0;Pd=M;K2a(fa);se=Pd;te=Td;Fd=70;break e}K2a(fa);x=0;Ta(594,Ud|0,yd+143&255|0)|0;yd=x;x=0;if(yd&1){Fd=69;break e}ef=i[jd>>0]|0}if(!(ef<<24>>24))break f;jd=k[ed>>2]|0;k[ea>>2]=1;k[ea+8>>2]=80;k[ea+40>>2]=1;yd=ea+48|0;k[yd>>2]=-1;k[yd+4>>2]=-1;yd=ea+56|0;Ud=ea+60|0;Td=ea+72|0;k[yd>>2]=0;k[yd+4>>2]=0;k[yd+8>>2]=0;k[yd+12>>2]=0;k[yd+16>>2]=0;x=0;Ta(539,jd+48|0,ea|0)|0;jd=x;x=0;if(jd&1){jd=Hc()|0;yd=M;Pd=k[Td>>2]|0;if(Pd)j0a(Pd);Pd=k[Ud>>2]|0;if(!Pd){se=yd;te=jd;Fd=70;break e}j0a(Pd);se=yd;te=jd;Fd=70;break e}jd=k[Td>>2]|0;if(jd)j0a(jd);jd=k[Ud>>2]|0;if(jd)j0a(jd);break f;break}case 21:{jd=k[kd>>2]|0;x=0;xa(k[(k[jd>>2]|0)+12>>2]|0,jd|0,a|0);jd=x;x=0;if(jd&1){Fd=69;break e}if(i[sd+78>>0]|0){jd=k[ed>>2]|0;k[da>>2]=1;k[da+8>>2]=80;k[da+40>>2]=1;Ud=da+48|0;k[Ud>>2]=-1;k[Ud+4>>2]=-1;Ud=da+56|0;Td=da+60|0;yd=da+72|0;k[Ud>>2]=0;k[Ud+4>>2]=0;k[Ud+8>>2]=0;k[Ud+12>>2]=0;k[Ud+16>>2]=0;x=0;Ta(539,jd+48|0,da|0)|0;jd=x;x=0;if(jd&1){jd=Hc()|0;Ud=M;Pd=k[yd>>2]|0;if(Pd)j0a(Pd);Pd=k[Td>>2]|0;if(!Pd){se=Ud;te=jd;Fd=70;break e}j0a(Pd);se=Ud;te=jd;Fd=70;break e}jd=k[yd>>2]|0;if(jd)j0a(jd);jd=k[Td>>2]|0;if(jd)j0a(jd)}jd=k[k[Ya>>2]>>2]|0;x=0;xa(k[(k[jd>>2]|0)+12>>2]|0,jd|0,a|0);jd=x;x=0;if(jd&1){Fd=69;break e}else break f;break}case 8:{jd=k[kd>>2]|0;x=0;xa(k[(k[jd>>2]|0)+12>>2]|0,jd|0,a|0);jd=x;x=0;if(jd&1){Fd=69;break e}jd=(k[ed>>2]|0)+48|0;k[ca>>2]=2;k[ca+8>>2]=2300;Td=ca+12|0;k[Td>>2]=k[Eb>>2];k[Td+4>>2]=k[Eb+4>>2];k[Td+8>>2]=k[Eb+8>>2];k[Td+12>>2]=k[Eb+12>>2];k[Td+16>>2]=k[Eb+16>>2];k[Td+20>>2]=k[Eb+20>>2];k[Td+24>>2]=k[Eb+24>>2];k[ca+40>>2]=1;Td=ca+48|0;k[Td>>2]=-1;k[Td+4>>2]=-1;Td=ca+56|0;yd=ca+60|0;Ud=ca+72|0;k[Td>>2]=0;k[Td+4>>2]=0;k[Td+8>>2]=0;k[Td+12>>2]=0;k[Td+16>>2]=0;x=0;Ta(539,jd|0,ca|0)|0;jd=x;x=0;if(jd&1){jd=Hc()|0;Td=M;Pd=k[Ud>>2]|0;if(Pd)j0a(Pd);Pd=k[yd>>2]|0;if(!Pd){se=Td;te=jd;Fd=70;break e}j0a(Pd);se=Td;te=jd;Fd=70;break e}jd=k[Ud>>2]|0;if(jd)j0a(jd);jd=k[yd>>2]|0;if(jd)j0a(jd);jd=k[k[Ya>>2]>>2]|0;x=0;xa(k[(k[jd>>2]|0)+12>>2]|0,jd|0,a|0);jd=x;x=0;if(jd&1){Fd=69;break e}k[Fb>>2]=k[ed>>2];jd=k[k[Ya>>2]>>2]|0;x=0;yd=Ba(k[(k[jd>>2]|0)+16>>2]|0,jd|0)|0;jd=x;x=0;if(jd&1){Fd=69;break e}jd=k[yd+4>>2]|0;x=0;xa(591,Gb|0,sd|0);yd=x;x=0;if(yd&1){Fd=69;break e}x=0;nb(137,Fb|0,jd|0,k[k[Gb>>2]>>2]|0,1);jd=x;x=0;if(jd&1){jd=Hc()|0;yd=M;Ud=k[Gb>>2]|0;if(!Ud){ie=jd;je=yd;break e}Td=Gb+4|0;Pd=k[Td>>2]|0;if((Pd|0)==(Ud|0))ff=Ud;else{Ld=Pd;while(1){Pd=Ld+-8|0;k[Td>>2]=Pd;Nd=k[Ld+-4>>2]|0;if(!Nd)gf=Pd;else{j0a(Nd);gf=k[Td>>2]|0}if((gf|0)==(Ud|0))break;else Ld=gf}ff=k[Gb>>2]|0}OBa(ff);ie=jd;je=yd;break e}Ld=k[Gb>>2]|0;if(Ld){Ud=Gb+4|0;Td=k[Ud>>2]|0;if((Td|0)==(Ld|0))hf=Ld;else{Nd=Td;while(1){Td=Nd+-8|0;k[Ud>>2]=Td;Pd=k[Nd+-4>>2]|0;if(!Pd)jf=Td;else{j0a(Pd);jf=k[Ud>>2]|0}if((jf|0)==(Ld|0))break;else Nd=jf}hf=k[Gb>>2]|0}OBa(hf)}Nd=k[ed>>2]|0;k[ba>>2]=1;k[ba+8>>2]=144;k[ba+40>>2]=1;Ld=ba+48|0;k[Ld>>2]=-1;k[Ld+4>>2]=-1;Ld=ba+56|0;Ud=ba+60|0;yd=ba+72|0;jd=Nd+48|0;k[Ld>>2]=0;k[Ld+4>>2]=0;k[Ld+8>>2]=0;k[Ld+12>>2]=0;k[Ld+16>>2]=0;x=0;Ta(539,jd|0,ba|0)|0;Ld=x;x=0;if(Ld&1){Ld=Hc()|0;Nd=M;Pd=k[yd>>2]|0;if(Pd)j0a(Pd);Pd=k[Ud>>2]|0;if(!Pd){se=Nd;te=Ld;Fd=70;break e}j0a(Pd);se=Nd;te=Ld;Fd=70;break e}Ld=k[yd>>2]|0;if(Ld)j0a(Ld);Ld=k[Ud>>2]|0;if(Ld)j0a(Ld);k[aa>>2]=1;k[aa+8>>2]=129;k[aa+40>>2]=1;Ld=aa+48|0;k[Ld>>2]=-1;k[Ld+4>>2]=-1;Ld=aa+56|0;Ud=aa+60|0;yd=aa+72|0;k[Ld>>2]=0;k[Ld+4>>2]=0;k[Ld+8>>2]=0;k[Ld+12>>2]=0;k[Ld+16>>2]=0;x=0;Ta(539,jd|0,aa|0)|0;jd=x;x=0;if(jd&1){jd=Hc()|0;Ld=M;Nd=k[yd>>2]|0;if(Nd)j0a(Nd);Nd=k[Ud>>2]|0;if(!Nd){se=Ld;te=jd;Fd=70;break e}j0a(Nd);se=Ld;te=jd;Fd=70;break e}jd=k[yd>>2]|0;if(jd)j0a(jd);jd=k[Ud>>2]|0;if(jd)j0a(jd);jd=k[ed>>2]|0;k[$>>2]=1;k[$+8>>2]=21;k[$+40>>2]=1;Ud=$+48|0;k[Ud>>2]=-1;k[Ud+4>>2]=-1;Ud=$+56|0;yd=$+60|0;Ld=$+72|0;Nd=jd+48|0;k[Ud>>2]=0;k[Ud+4>>2]=0;k[Ud+8>>2]=0;k[Ud+12>>2]=0;k[Ud+16>>2]=0;x=0;Ta(539,Nd|0,$|0)|0;Ud=x;x=0;if(Ud&1){Ud=Hc()|0;jd=M;Pd=k[Ld>>2]|0;if(Pd)j0a(Pd);Pd=k[yd>>2]|0;if(!Pd){se=jd;te=Ud;Fd=70;break e}j0a(Pd);se=jd;te=Ud;Fd=70;break e}Ud=k[Ld>>2]|0;if(Ud)j0a(Ud);Ud=k[yd>>2]|0;if(Ud)j0a(Ud);k[_>>2]=1;k[_+8>>2]=2;k[_+40>>2]=1;Ud=_+48|0;k[Ud>>2]=-1;k[Ud+4>>2]=-1;Ud=_+56|0;yd=_+60|0;Ld=_+72|0;k[Ud>>2]=0;k[Ud+4>>2]=0;k[Ud+8>>2]=0;k[Ud+12>>2]=0;k[Ud+16>>2]=0;x=0;Ta(539,Nd|0,_|0)|0;Ud=x;x=0;if(Ud&1){Ud=Hc()|0;jd=M;Pd=k[Ld>>2]|0;if(Pd)j0a(Pd);Pd=k[yd>>2]|0;if(!Pd){se=jd;te=Ud;Fd=70;break e}j0a(Pd);se=jd;te=Ud;Fd=70;break e}Ud=k[Ld>>2]|0;if(Ud)j0a(Ud);Ud=k[yd>>2]|0;if(Ud)j0a(Ud);k[Z>>2]=1;k[Z+8>>2]=144;k[Z+40>>2]=1;Ud=Z+48|0;k[Ud>>2]=-1;k[Ud+4>>2]=-1;Ud=Z+56|0;yd=Z+60|0;Ld=Z+72|0;k[Ud>>2]=0;k[Ud+4>>2]=0;k[Ud+8>>2]=0;k[Ud+12>>2]=0;k[Ud+16>>2]=0;x=0;Ta(539,Nd|0,Z|0)|0;Nd=x;x=0;if(Nd&1){Nd=Hc()|0;Ud=M;jd=k[Ld>>2]|0;if(jd)j0a(jd);jd=k[yd>>2]|0;if(!jd){se=Ud;te=Nd;Fd=70;break e}j0a(jd);se=Ud;te=Nd;Fd=70;break e}Nd=k[Ld>>2]|0;if(Nd)j0a(Nd);Nd=k[yd>>2]|0;if(Nd)j0a(Nd);k[Ib>>2]=0;k[Ib+4>>2]=0;k[Ib+8>>2]=0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Kb>>2]=0;k[Kb+4>>2]=0;k[Kb+8>>2]=0;k[Lb>>2]=0;k[Lb+4>>2]=0;k[Lb+8>>2]=0;x=0;Na(42,Hb|0,Ib|0,Jb|0,Kb|0,Lb|0,4,0,0,0,0,1,1,0);Nd=x;x=0;if(Nd&1){Nd=Hc()|0;ie=Nd;je=M;break e}k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;x=0;fb(347,a|0,Hb|0,Mb|0);Nd=x;x=0;if(Nd&1){Nd=Hc()|0;yd=M;Dg(Hb);ie=Nd;je=yd;break e}else{Dg(Hb);break f}break}case 10:{yd=k[k[Ya>>2]>>2]|0;x=0;xa(k[(k[yd>>2]|0)+12>>2]|0,yd|0,a|0);yd=x;x=0;if(yd&1){Fd=69;break e}k[Nb>>2]=k[ed>>2];yd=k[k[Ya>>2]>>2]|0;x=0;Nd=Ba(k[(k[yd>>2]|0)+16>>2]|0,yd|0)|0;yd=x;x=0;if(yd&1){Fd=69;break e}yd=k[Nd+4>>2]|0;x=0;xa(591,Ob|0,sd|0);Nd=x;x=0;if(Nd&1){Fd=69;break e}x=0;nb(137,Nb|0,yd|0,k[k[Ob>>2]>>2]|0,1);yd=x;x=0;if(yd&1){yd=Hc()|0;Nd=M;Ld=k[Ob>>2]|0;if(!Ld){ie=yd;je=Nd;break e}Ud=Ob+4|0;jd=k[Ud>>2]|0;if((jd|0)==(Ld|0))kf=Ld;else{Pd=jd;while(1){jd=Pd+-8|0;k[Ud>>2]=jd;Td=k[Pd+-4>>2]|0;if(!Td)lf=jd;else{j0a(Td);lf=k[Ud>>2]|0}if((lf|0)==(Ld|0))break;else Pd=lf}kf=k[Ob>>2]|0}OBa(kf);ie=yd;je=Nd;break e}Pd=k[Ob>>2]|0;if(Pd){Ld=Ob+4|0;Ud=k[Ld>>2]|0;if((Ud|0)==(Pd|0))mf=Pd;else{Td=Ud;while(1){Ud=Td+-8|0;k[Ld>>2]=Ud;jd=k[Td+-4>>2]|0;if(!jd)nf=Ud;else{j0a(jd);nf=k[Ld>>2]|0}if((nf|0)==(Pd|0))break;else Td=nf}mf=k[Ob>>2]|0}OBa(mf)}Td=k[ed>>2]|0;k[Y>>2]=1;k[Y+8>>2]=255;k[Y+40>>2]=1;Pd=Y+48|0;k[Pd>>2]=-1;k[Pd+4>>2]=-1;Pd=Y+56|0;Ld=Y+60|0;Nd=Y+72|0;k[Pd>>2]=0;k[Pd+4>>2]=0;k[Pd+8>>2]=0;k[Pd+12>>2]=0;k[Pd+16>>2]=0;x=0;Ta(539,Td+48|0,Y|0)|0;Td=x;x=0;if(Td&1){Td=Hc()|0;Pd=M;yd=k[Nd>>2]|0;if(yd)j0a(yd);yd=k[Ld>>2]|0;if(!yd){se=Pd;te=Td;Fd=70;break e}j0a(yd);se=Pd;te=Td;Fd=70;break e}Td=k[Nd>>2]|0;if(Td)j0a(Td);Td=k[Ld>>2]|0;if(Td)j0a(Td);break f;break}case 9:{k[Pb>>2]=0;Td=Pb+4|0;k[Td>>2]=0;k[Pb+8>>2]=0;Ld=k[Ya>>2]|0;Nd=k[qd>>2]|0;p:do if((Ld|0)==(Nd|0))Fd=602;else{Pd=Pb+8|0;yd=Ld;while(1){jd=k[yd>>2]|0;x=0;xa(k[(k[jd>>2]|0)+12>>2]|0,jd|0,a|0);jd=x;x=0;if(jd&1)break;jd=k[yd>>2]|0;x=0;Ud=Ba(k[(k[jd>>2]|0)+16>>2]|0,jd|0)|0;jd=x;x=0;if(jd&1)break;jd=Ud+4|0;Qd=k[Td>>2]|0;if((Qd|0)==(k[Pd>>2]|0)){x=0;xa(743,Pb|0,jd|0);Sd=x;x=0;if(Sd&1)break}else{k[Qd>>2]=k[jd>>2];jd=k[Ud+8>>2]|0;k[Qd+4>>2]=jd;if(!jd)of=Qd;else{h0a(jd);of=k[Td>>2]|0}k[Td>>2]=of+8}yd=yd+8|0;if((yd|0)==(Nd|0)){Fd=602;break p}}yd=Hc()|0;pf=M;qf=yd;Fd=601}while(0);q:do if((Fd|0)==602){k[Qb>>2]=k[ed>>2];x=0;va(1508,Qb|0);Nd=x;x=0;do if(!(Nd&1)){k[Rb>>2]=k[ed>>2];k[Sb>>2]=0;Ld=Sb+4|0;k[Ld>>2]=0;k[Sb+8>>2]=0;yd=(k[Od>>2]|0)+-9|0;if(yd>>>0<5)rf=(6>>>(yd&31)&1)!=0;else rf=1;x=0;La(59,Rb|0,Pb|0,Sb|0,rf|0,1,0);yd=x;x=0;if(yd&1){yd=Hc()|0;Pd=M;jd=k[Sb>>2]|0;if(!jd){sf=yd;tf=Pd;break q}Qd=k[Ld>>2]|0;if((Qd|0)==(jd|0))uf=jd;else{Ud=Qd;while(1){Qd=Ud+-8|0;k[Ld>>2]=Qd;Sd=k[Ud+-4>>2]|0;if(!Sd)vf=Qd;else{j0a(Sd);vf=k[Ld>>2]|0}if((vf|0)==(jd|0))break;else Ud=vf}uf=k[Sb>>2]|0}OBa(uf);sf=yd;tf=Pd;break q}Ud=k[Sb>>2]|0;if(Ud){jd=k[Ld>>2]|0;if((jd|0)==(Ud|0))wf=Ud;else{Sd=jd;while(1){jd=Sd+-8|0;k[Ld>>2]=jd;Qd=k[Sd+-4>>2]|0;if(!Qd)xf=jd;else{j0a(Qd);xf=k[Ld>>2]|0}if((xf|0)==(Ud|0))break;else Sd=xf}wf=k[Sb>>2]|0}OBa(wf)}k[Tb>>2]=k[ed>>2];x=0;va(1517,Tb|0);Sd=x;x=0;if(Sd&1)break;Sd=k[ed>>2]|0;k[X>>2]=1;k[X+8>>2]=32;k[X+40>>2]=1;Ud=X+48|0;k[Ud>>2]=-1;k[Ud+4>>2]=-1;Ud=X+56|0;Ld=X+60|0;Pd=X+72|0;k[Ud>>2]=0;k[Ud+4>>2]=0;k[Ud+8>>2]=0;k[Ud+12>>2]=0;k[Ud+16>>2]=0;x=0;Ta(539,Sd+48|0,X|0)|0;Sd=x;x=0;if(Sd&1){Sd=Hc()|0;Ud=M;yd=k[Pd>>2]|0;if(yd)j0a(yd);yd=k[Ld>>2]|0;if(!yd){pf=Ud;qf=Sd;Fd=601;break q}j0a(yd);pf=Ud;qf=Sd;Fd=601;break q}Sd=k[Pd>>2]|0;if(Sd)j0a(Sd);Sd=k[Ld>>2]|0;if(Sd)j0a(Sd);Sd=k[Pb>>2]|0;if(Sd){Ld=k[Td>>2]|0;if((Ld|0)==(Sd|0))yf=Sd;else{Pd=Ld;while(1){Ld=Pd+-8|0;k[Td>>2]=Ld;Ud=k[Pd+-4>>2]|0;if(!Ud)zf=Ld;else{j0a(Ud);zf=k[Td>>2]|0}if((zf|0)==(Sd|0))break;else Pd=zf}yf=k[Pb>>2]|0}OBa(yf)}break f}while(0);Nd=Hc()|0;pf=M;qf=Nd;Fd=601}while(0);if((Fd|0)==601){sf=qf;tf=pf}Nd=k[Pb>>2]|0;if(!Nd){ie=sf;je=tf;break e}Pd=k[Td>>2]|0;if((Pd|0)==(Nd|0))Af=Nd;else{Sd=Pd;while(1){Pd=Sd+-8|0;k[Td>>2]=Pd;Ud=k[Sd+-4>>2]|0;if(!Ud)Bf=Pd;else{j0a(Ud);Bf=k[Td>>2]|0}if((Bf|0)==(Nd|0))break;else Sd=Bf}Af=k[Pb>>2]|0}OBa(Af);ie=sf;je=tf;break e;break}case 18:case 17:case 16:case 15:case 14:{Sd=td+-14|0;Nd=k[Ya>>2]|0;r:do if(!Sd)Cf=Nd;else{Td=Vb+4|0;Ud=Nd;Pd=Sd;while(1){Ld=k[Ud+(Pd<<3)>>2]|0;x=0;xa(k[(k[Ld>>2]|0)+12>>2]|0,Ld|0,a|0);Ld=x;x=0;if(Ld&1){Fd=64;break}k[Ub>>2]=k[ed>>2];Ld=k[(k[Ya>>2]|0)+(Pd<<3)>>2]|0;x=0;yd=Ba(k[(k[Ld>>2]|0)+16>>2]|0,Ld|0)|0;Ld=x;x=0;if(Ld&1){Fd=64;break}Ld=k[yd+4>>2]|0;x=0;xa(591,Vb|0,sd|0);yd=x;x=0;if(yd&1){Fd=64;break}x=0;nb(137,Ub|0,Ld|0,k[(k[Vb>>2]|0)+(Pd<<3)>>2]|0,1);Ld=x;x=0;if(Ld&1)break;Ld=k[Vb>>2]|0;if(Ld){yd=k[Td>>2]|0;if((yd|0)==(Ld|0))Df=Ld;else{Qd=yd;while(1){yd=Qd+-8|0;k[Td>>2]=yd;jd=k[Qd+-4>>2]|0;if(!jd)Ef=yd;else{j0a(jd);Ef=k[Td>>2]|0}if((Ef|0)==(Ld|0))break;else Qd=Ef}Df=k[Vb>>2]|0}OBa(Df)}Pd=Pd+-1|0;Qd=k[Ya>>2]|0;if(!Pd){Cf=Qd;break r}else Ud=Qd}if((Fd|0)==64){Ud=Hc()|0;se=M;te=Ud;Fd=70;break e}Ud=Hc()|0;Pd=M;Qd=k[Vb>>2]|0;if(!Qd){ie=Ud;je=Pd;break e}Ld=k[Td>>2]|0;if((Ld|0)==(Qd|0))Ff=Qd;else{jd=Ld;while(1){Ld=jd+-8|0;k[Td>>2]=Ld;yd=k[jd+-4>>2]|0;if(!yd)Gf=Ld;else{j0a(yd);Gf=k[Td>>2]|0}if((Gf|0)==(Qd|0))break;else jd=Gf}Ff=k[Vb>>2]|0}OBa(Ff);ie=Ud;je=Pd;break e}while(0);Nd=k[Cf>>2]|0;x=0;xa(k[(k[Nd>>2]|0)+12>>2]|0,Nd|0,a|0);Nd=x;x=0;if(Nd&1){Fd=69;break e}k[Wb>>2]=k[ed>>2];x=0;va(1508,Wb|0);Nd=x;x=0;if(Nd&1){Fd=69;break e}k[Xb>>2]=k[ed>>2];Nd=k[k[Ya>>2]>>2]|0;x=0;jd=Ba(k[(k[Nd>>2]|0)+16>>2]|0,Nd|0)|0;Nd=x;x=0;if(Nd&1){Nd=Hc()|0;ie=Nd;je=M;break e}Nd=k[jd+4>>2]|0;Qd=k[jd+8>>2]|0;jd=(Qd|0)==0;if(!jd)h0a(Qd);k[Yb>>2]=0;Td=Yb+4|0;k[Td>>2]=0;k[Yb+8>>2]=0;x=0;yd=Ba(563,8)|0;Ld=x;x=0;do if(Ld&1){Rd=Hc()|0;Hf=Rd;If=M}else{k[Td>>2]=yd;k[Yb>>2]=yd;k[Yb+8>>2]=yd+8;k[yd>>2]=Nd;k[yd+4>>2]=Qd;if(jd)Jf=yd;else{h0a(Qd);Jf=k[Td>>2]|0}k[Td>>2]=Jf+8;x=0;xa(591,_b|0,sd|0);Rd=x;x=0;do if(Rd&1){ae=Hc()|0;Kf=ae;Lf=M}else{ae=k[_b>>2]|0;Vd=k[ae>>2]|0;nd=k[ae+4>>2]|0;ae=(nd|0)==0;if(!ae)h0a(nd);k[Zb>>2]=0;zd=Zb+4|0;k[zd>>2]=0;k[Zb+8>>2]=0;x=0;Wd=Ba(563,8)|0;be=x;x=0;do if(!(be&1)){k[zd>>2]=Wd;k[Zb>>2]=Wd;k[Zb+8>>2]=Wd+8;k[Wd>>2]=Vd;k[Wd+4>>2]=nd;if(ae)Mf=Wd;else{h0a(nd);Mf=k[zd>>2]|0}k[zd>>2]=Mf+8;x=0;La(59,Xb|0,Yb|0,Zb|0,0,1,0);Xd=x;x=0;if(Xd&1){Xd=Hc()|0;ce=M;Nf=k[Zb>>2]|0;if(!Nf){Of=Xd;Pf=ce;break}Qf=k[zd>>2]|0;if((Qf|0)==(Nf|0))Rf=Nf;else{Sf=Qf;while(1){Qf=Sf+-8|0;k[zd>>2]=Qf;Tf=k[Sf+-4>>2]|0;if(!Tf)Uf=Qf;else{j0a(Tf);Uf=k[zd>>2]|0}if((Uf|0)==(Nf|0))break;else Sf=Uf}Rf=k[Zb>>2]|0}OBa(Rf);Of=Xd;Pf=ce;break}Sf=k[Zb>>2]|0;if(Sf){Nf=k[zd>>2]|0;if((Nf|0)==(Sf|0))Vf=Sf;else{Tf=Nf;while(1){Nf=Tf+-8|0;k[zd>>2]=Nf;Qf=k[Tf+-4>>2]|0;if(!Qf)Wf=Nf;else{j0a(Qf);Wf=k[zd>>2]|0}if((Wf|0)==(Sf|0))break;else Tf=Wf}Vf=k[Zb>>2]|0}OBa(Vf)}if(!ae)j0a(nd);Tf=k[_b>>2]|0;if(Tf){Sf=_b+4|0;ce=k[Sf>>2]|0;if((ce|0)==(Tf|0))Xf=Tf;else{Xd=ce;while(1){ce=Xd+-8|0;k[Sf>>2]=ce;Qf=k[Xd+-4>>2]|0;if(!Qf)Yf=ce;else{j0a(Qf);Yf=k[Sf>>2]|0}if((Yf|0)==(Tf|0))break;else Xd=Yf}Xf=k[_b>>2]|0}OBa(Xf)}Xd=k[Yb>>2]|0;if(Xd){Tf=k[Td>>2]|0;if((Tf|0)==(Xd|0))Zf=Xd;else{Sf=Tf;while(1){Tf=Sf+-8|0;k[Td>>2]=Tf;Qf=k[Sf+-4>>2]|0;if(!Qf)_f=Tf;else{j0a(Qf);_f=k[Td>>2]|0}if((_f|0)==(Xd|0))break;else Sf=_f}Zf=k[Yb>>2]|0}OBa(Zf)}if(!jd)j0a(Qd);k[$b>>2]=k[ed>>2];x=0;va(1517,$b|0);Sf=x;x=0;if(Sf&1){Fd=69;break e}Sf=k[ed>>2]|0;x=0;fb(140,W|0,271580,34);Xd=x;x=0;if(Xd&1){Fd=69;break e}x=0;pa(51,Sd>>>0<5|0,W|0,224,295981,271615);Xd=x;x=0;if(!(Xd&1)){K2a(W);x=0;Ta(594,Sf|0,td+146&255|0)|0;Sf=x;x=0;if(Sf&1){Fd=69;break e}else break f}else{Sf=Hc()|0;Xd=M;K2a(W);se=Xd;te=Sf;Fd=70;break e}}else{Sf=Hc()|0;Of=Sf;Pf=M}while(0);if(!ae)j0a(nd);zd=k[_b>>2]|0;if(!zd){Kf=Of;Lf=Pf;break}Wd=_b+4|0;Vd=k[Wd>>2]|0;if((Vd|0)==(zd|0))$f=zd;else{be=Vd;while(1){Vd=be+-8|0;k[Wd>>2]=Vd;Sf=k[be+-4>>2]|0;if(!Sf)ag=Vd;else{j0a(Sf);ag=k[Wd>>2]|0}if((ag|0)==(zd|0))break;else be=ag}$f=k[_b>>2]|0}OBa($f);Kf=Of;Lf=Pf}while(0);Rd=k[Yb>>2]|0;if(!Rd){Hf=Kf;If=Lf;break}Pd=k[Td>>2]|0;if((Pd|0)==(Rd|0))bg=Rd;else{Ud=Pd;while(1){Pd=Ud+-8|0;k[Td>>2]=Pd;be=k[Ud+-4>>2]|0;if(!be)cg=Pd;else{j0a(be);cg=k[Td>>2]|0}if((cg|0)==(Rd|0))break;else Ud=cg}bg=k[Yb>>2]|0}OBa(bg);Hf=Kf;If=Lf}while(0);if(jd){ie=Hf;je=If;break e}j0a(Qd);ie=Hf;je=If;break e;break}case 19:{Td=k[kd>>2]|0;x=0;xa(k[(k[Td>>2]|0)+12>>2]|0,Td|0,a|0);Td=x;x=0;if(Td&1){Fd=69;break e}Td=sd+84|0;Sd=k[Td>>2]|0;x=0;fb(140,V|0,285127,55);yd=x;x=0;if(yd&1){Fd=69;break e}x=0;pa(57,(Sd|0)!=0|0,V|0,917,285183,285227);Sd=x;x=0;if(Sd&1){Sd=Hc()|0;yd=M;K2a(V);se=yd;te=Sd;Fd=70;break e}K2a(V);Sd=iDa(k[Td>>2]|0,4520,5528,0)|0;if(!Sd){x=0;hb(49);x=0;Fd=69;break e}Td=Sd+52|0;yd=hc+4|0;Nd=dc+4|0;Ld=dc+8|0;Ud=dc+8|0;Rd=ec+4|0;be=ec+8|0;Pd=ec+8|0;zd=U+8|0;Wd=U+40|0;nd=U+48|0;ae=U+56|0;Sf=U+60|0;Vd=U+72|0;Xd=ac+4|0;Qf=(k[qd>>2]|0)-(k[Ya>>2]|0)>>3;Tf=0;s:while(1){ce=Qf;while(1){if(!ce){dg=Tf;Fd=749;break s}Nf=ce+-1|0;if(!(i[(k[(k[(k[Td>>2]|0)+24>>2]|0)+(Nf<<3)>>2]|0)+57>>0]|0))ce=Nf;else{eg=Nf;break}}ce=Tf+1|0;Nf=k[(k[Ya>>2]|0)+(eg<<3)>>2]|0;x=0;xa(k[(k[Nf>>2]|0)+12>>2]|0,Nf|0,a|0);Nf=x;x=0;if(Nf&1){Fd=65;break}x=0;xa(591,ac|0,sd|0);Nf=x;x=0;if(Nf&1){Fd=65;break}Nf=k[ac>>2]|0;fg=k[Nf+(eg<<3)>>2]|0;do if(!fg){gg=Nf;hg=0;ig=0;Fd=757}else{jg=iDa(fg,168,6704,0)|0;if(!jg){gg=Nf;hg=0;ig=0;Fd=757;break}kg=jg;jg=k[Nf+(eg<<3)+4>>2]|0;if(!jg){lg=Nf;mg=kg;ng=0;Fd=758;break}h0a(jg);gg=k[ac>>2]|0;hg=jg;ig=kg;Fd=757}while(0);if((Fd|0)==757){Fd=0;if(!gg){og=ig;pg=hg}else{lg=gg;mg=ig;ng=hg;Fd=758}}if((Fd|0)==758){Fd=0;Nf=k[Xd>>2]|0;if((Nf|0)==(lg|0))qg=lg;else{fg=Nf;while(1){Nf=fg+-8|0;k[Xd>>2]=Nf;kg=k[fg+-4>>2]|0;if(!kg)rg=Nf;else{j0a(kg);rg=k[Xd>>2]|0}if((rg|0)==(lg|0))break;else fg=rg}qg=k[ac>>2]|0}OBa(qg);og=mg;pg=ng}fg=k[ed>>2]|0;do if(og){k[bc>>2]=fg;x=0;va(1508,bc|0);kg=x;x=0;if(kg&1){sg=pg;Fd=807;break s}k[cc>>2]=k[ed>>2];kg=k[(k[Ya>>2]|0)+(eg<<3)>>2]|0;x=0;Nf=Ba(k[(k[kg>>2]|0)+16>>2]|0,kg|0)|0;kg=x;x=0;if(kg&1){tg=pg;Fd=809;break s}kg=k[Nf+4>>2]|0;jg=k[Nf+8>>2]|0;Nf=(jg|0)==0;if(!Nf)h0a(jg);k[dc>>2]=0;k[Nd>>2]=0;k[Ld>>2]=0;x=0;ug=Ba(563,8)|0;vg=x;x=0;if(vg&1){wg=pg;xg=jg;yg=Nf;Fd=810;break s}k[Nd>>2]=ug;k[dc>>2]=ug;k[Ud>>2]=ug+8;k[ug>>2]=kg;k[ug+4>>2]=jg;if(Nf)zg=ug;else{h0a(jg);zg=k[Nd>>2]|0}k[Nd>>2]=zg+8;ug=(pg|0)==0;if(!ug)h0a(pg);k[ec>>2]=0;k[Rd>>2]=0;k[be>>2]=0;x=0;kg=Ba(563,8)|0;vg=x;x=0;if(vg&1){Ag=pg;Bg=jg;Cg=Nf;Eg=ug;Fd=811;break s}k[Rd>>2]=kg;k[ec>>2]=kg;k[Pd>>2]=kg+8;k[kg>>2]=og;k[kg+4>>2]=pg;if(ug)Gg=kg;else{h0a(pg);Gg=k[Rd>>2]|0}k[Rd>>2]=Gg+8;x=0;La(59,cc|0,dc|0,ec|0,0,1,0);kg=x;x=0;if(kg&1){Hg=pg;Ig=jg;Jg=Nf;Kg=ug;Fd=812;break s}kg=k[ec>>2]|0;if(kg){vg=k[Rd>>2]|0;if((vg|0)==(kg|0))Lg=kg;else{Mg=vg;while(1){vg=Mg+-8|0;k[Rd>>2]=vg;Ng=k[Mg+-4>>2]|0;if(!Ng)Og=vg;else{j0a(Ng);Og=k[Rd>>2]|0}if((Og|0)==(kg|0))break;else Mg=Og}Lg=k[ec>>2]|0}OBa(Lg)}if(!ug)j0a(pg);Mg=k[dc>>2]|0;if(Mg){kg=k[Nd>>2]|0;if((kg|0)==(Mg|0))Pg=Mg;else{Ng=kg;while(1){kg=Ng+-8|0;k[Nd>>2]=kg;vg=k[Ng+-4>>2]|0;if(!vg)Qg=kg;else{j0a(vg);Qg=k[Nd>>2]|0}if((Qg|0)==(Mg|0))break;else Ng=Qg}Pg=k[dc>>2]|0}OBa(Pg)}if(!Nf)j0a(jg);k[fc>>2]=k[ed>>2];x=0;va(1517,fc|0);Ng=x;x=0;if(Ng&1){sg=pg;Fd=807;break s}Ng=k[ed>>2]|0;k[U>>2]=1;k[zd>>2]=32;k[Wd>>2]=1;Mg=nd;k[Mg>>2]=-1;k[Mg+4>>2]=-1;k[ae>>2]=0;k[ae+4>>2]=0;k[ae+8>>2]=0;k[ae+12>>2]=0;k[ae+16>>2]=0;x=0;Ta(539,Ng+48|0,U|0)|0;Ng=x;x=0;if(Ng&1){Rg=pg;Fd=802;break s}Ng=k[Vd>>2]|0;if(Ng)j0a(Ng);Ng=k[Sf>>2]|0;if(Ng)j0a(Ng)}else{k[gc>>2]=fg;Ng=k[(k[Ya>>2]|0)+(eg<<3)>>2]|0;x=0;Mg=Ba(k[(k[Ng>>2]|0)+16>>2]|0,Ng|0)|0;Ng=x;x=0;if(Ng&1){sg=pg;Fd=807;break s}Ng=k[Mg+4>>2]|0;x=0;xa(591,hc|0,sd|0);Mg=x;x=0;if(Mg&1){sg=pg;Fd=807;break s}x=0;nb(137,gc|0,Ng|0,k[(k[hc>>2]|0)+(eg<<3)>>2]|0,1);Ng=x;x=0;if(Ng&1){Sg=pg;Fd=840;break s}Ng=k[hc>>2]|0;if(!Ng)break;Mg=k[yd>>2]|0;if((Mg|0)==(Ng|0))Tg=Ng;else{ug=Mg;while(1){Mg=ug+-8|0;k[yd>>2]=Mg;vg=k[ug+-4>>2]|0;if(!vg)Ug=Mg;else{j0a(vg);Ug=k[yd>>2]|0}if((Ug|0)==(Ng|0))break;else ug=Ug}Tg=k[hc>>2]|0}OBa(Tg)}while(0);if(!pg){Qf=eg;Tf=ce;continue}j0a(pg);Qf=eg;Tf=ce}do if((Fd|0)==65){Tf=Hc()|0;se=M;te=Tf;Fd=70;break e}else if((Fd|0)==749){t:do if(!(i[Sd+76>>0]|0)){Tf=k[ed>>2]|0;x=0;xa(586,jc|0,sd|0);Qf=x;x=0;if(Qf&1){Fd=69;break e}Qf=i[jc>>0]|0;ae=(Qf&1)==0;nd=ae?(Qf&255)>>>1:k[jc+4>>2]|0;Qf=ae?jc+1|0:k[jc+8>>2]|0;pe=kc;re=pe+32|0;do{i[pe>>0]=0;pe=pe+1|0}while((pe|0)<(re|0));k[S>>2]=Qf;k[S+4>>2]=nd;k[T>>2]=kc;k[T+4>>2]=32;x=0;k[e>>2]=k[S>>2];k[e+4>>2]=k[S+4>>2];k[d>>2]=k[T>>2];k[d+4>>2]=k[T+4>>2];Ta(532,e|0,d|0)|0;ae=x;x=0;do if(ae&1){Wd=Hc()|0;Vg=M;Wg=Wd}else{Wd=kc+32|0;zd=e+32|0;Pd=d+32|0;be=d+4|0;Ud=d+32|0;Ld=e+4|0;Xd=0;Qd=1;jd=kc;while(1){fg=i[jd>>0]|0;k[d>>2]=Xd;k[be>>2]=k[ic>>2];k[be+4>>2]=k[ic+4>>2];k[be+8>>2]=k[ic+8>>2];k[be+12>>2]=k[ic+12>>2];k[be+16>>2]=k[ic+16>>2];k[be+20>>2]=k[ic+20>>2];k[be+24>>2]=k[ic+24>>2];k[Ud>>2]=Qd;HB(d,8,0);pe=f;qe=d;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));k[e>>2]=0;k[zd>>2]=1;k[d>>2]=fg&255;k[Pd>>2]=1;YB(e,f,d);ug=k[e>>2]|0;k[ic>>2]=k[Ld>>2];k[ic+4>>2]=k[Ld+4>>2];k[ic+8>>2]=k[Ld+8>>2];k[ic+12>>2]=k[Ld+12>>2];k[ic+16>>2]=k[Ld+16>>2];k[ic+20>>2]=k[Ld+20>>2];k[ic+24>>2]=k[Ld+24>>2];Ng=k[zd>>2]|0;jd=jd+1|0;if((jd|0)==(Wd|0)){Xg=ug;Yg=Ng;break}else{Xd=ug;Qd=Ng}}k[R>>2]=2;k[R+8>>2]=Xg;Qd=R+12|0;k[Qd>>2]=k[ic>>2];k[Qd+4>>2]=k[ic+4>>2];k[Qd+8>>2]=k[ic+8>>2];k[Qd+12>>2]=k[ic+12>>2];k[Qd+16>>2]=k[ic+16>>2];k[Qd+20>>2]=k[ic+20>>2];k[Qd+24>>2]=k[ic+24>>2];k[R+40>>2]=Yg;Qd=R+48|0;k[Qd>>2]=-1;k[Qd+4>>2]=-1;Qd=R+56|0;Xd=R+60|0;Wd=R+72|0;k[Qd>>2]=0;k[Qd+4>>2]=0;k[Qd+8>>2]=0;k[Qd+12>>2]=0;k[Qd+16>>2]=0;x=0;Ta(539,Tf+48|0,R|0)|0;Qd=x;x=0;if(Qd&1){Qd=Hc()|0;jd=M;zd=k[Wd>>2]|0;if(zd)j0a(zd);zd=k[Xd>>2]|0;if(!zd){Vg=jd;Wg=Qd;break}j0a(zd);Vg=jd;Wg=Qd;break}Qd=k[Wd>>2]|0;if(Qd)j0a(Qd);Qd=k[Xd>>2]|0;if(Qd)j0a(Qd);K2a(jc);Zg=dg+1|0;break t}while(0);K2a(jc);ie=Wg;je=Vg;break e}else Zg=dg;while(0);x=0;fb(140,lc|0,271686,27);ce=x;x=0;if(ce&1){Fd=69;break e}ce=Zg>>>0<5;x=0;pa(57,ce|0,lc|0,676,269817,271452);Tf=x;x=0;if(Tf&1){Tf=Hc()|0;ae=M;K2a(lc);ie=Tf;je=ae;break e}K2a(lc);k[mc>>2]=0;ae=mc+4|0;k[ae>>2]=0;k[mc+8>>2]=0;k[nc>>2]=0;Tf=nc+4|0;k[Tf>>2]=0;k[nc+8>>2]=0;nd=k[Ya>>2]|0;u:do if((k[qd>>2]|0)==(nd|0))Fd=904;else{Qf=mc+8|0;Qd=nc+8|0;Xd=oc+4|0;Wd=nd;jd=0;v:while(1){do if(!(i[(k[(k[(k[Td>>2]|0)+24>>2]|0)+(jd<<3)>>2]|0)+57>>0]|0)){zd=k[Wd+(jd<<3)>>2]|0;x=0;xa(k[(k[zd>>2]|0)+12>>2]|0,zd|0,a|0);zd=x;x=0;if(zd&1){Fd=893;break v}zd=k[(k[Ya>>2]|0)+(jd<<3)>>2]|0;x=0;Ld=Ba(k[(k[zd>>2]|0)+16>>2]|0,zd|0)|0;zd=x;x=0;if(zd&1){Fd=893;break v}zd=Ld+4|0;Pd=k[ae>>2]|0;if((Pd|0)==(k[Qf>>2]|0)){x=0;xa(743,mc|0,zd|0);Ud=x;x=0;if(Ud&1){Fd=893;break v}}else{k[Pd>>2]=k[zd>>2];zd=k[Ld+8>>2]|0;k[Pd+4>>2]=zd;if(!zd)_g=Pd;else{h0a(zd);_g=k[ae>>2]|0}k[ae>>2]=_g+8}x=0;xa(591,oc|0,sd|0);zd=x;x=0;if(zd&1){Fd=893;break v}zd=k[oc>>2]|0;Pd=zd+(jd<<3)|0;Ld=k[Tf>>2]|0;if((Ld|0)==(k[Qd>>2]|0)){x=0;xa(743,nc|0,Pd|0);Ud=x;x=0;if(Ud&1)break v}else{k[Ld>>2]=k[Pd>>2];Pd=k[zd+(jd<<3)+4>>2]|0;k[Ld+4>>2]=Pd;if(!Pd)$g=Ld;else{h0a(Pd);$g=k[Tf>>2]|0}k[Tf>>2]=$g+8}Pd=k[oc>>2]|0;if(!Pd)break;Ld=k[Xd>>2]|0;if((Ld|0)==(Pd|0))ah=Pd;else{zd=Ld;while(1){Ld=zd+-8|0;k[Xd>>2]=Ld;Ud=k[zd+-4>>2]|0;if(!Ud)bh=Ld;else{j0a(Ud);bh=k[Xd>>2]|0}if((bh|0)==(Pd|0))break;else zd=bh}ah=k[oc>>2]|0}OBa(ah)}while(0);jd=jd+1|0;Wd=k[Ya>>2]|0;if(jd>>>0>=(k[qd>>2]|0)-Wd>>3>>>0){Fd=904;break u}}if((Fd|0)==893){Wd=Hc()|0;ch=M;dh=Wd;Fd=895;break}Wd=Hc()|0;jd=M;Qd=k[oc>>2]|0;if(!Qd){eh=Wd;fh=jd;break}Qf=k[Xd>>2]|0;if((Qf|0)==(Qd|0))gh=Qd;else{zd=Qf;while(1){Qf=zd+-8|0;k[Xd>>2]=Qf;Pd=k[zd+-4>>2]|0;if(!Pd)hh=Qf;else{j0a(Pd);hh=k[Xd>>2]|0}if((hh|0)==(Qd|0))break;else zd=hh}gh=k[oc>>2]|0}OBa(gh);eh=Wd;fh=jd}while(0);w:do if((Fd|0)==904){k[pc>>2]=k[ed>>2];x=0;va(1508,pc|0);nd=x;x=0;do if(!(nd&1)){k[qc>>2]=k[ed>>2];x=0;La(59,qc|0,mc|0,nc|0,1,0,0);zd=x;x=0;if(zd&1)break;k[rc>>2]=k[ed>>2];x=0;va(1517,rc|0);zd=x;x=0;if(zd&1)break;zd=k[ed>>2]|0;x=0;fb(140,Q|0,271580,34);Qd=x;x=0;if(Qd&1)break;x=0;pa(51,ce|0,Q|0,224,295981,271615);Qd=x;x=0;if(Qd&1){Qd=Hc()|0;Xd=M;K2a(Q);ch=Xd;dh=Qd;Fd=895;break w}K2a(Q);x=0;Ta(594,zd|0,Zg+160&255|0)|0;zd=x;x=0;if(zd&1)break;zd=k[nc>>2]|0;if(zd){Qd=k[Tf>>2]|0;if((Qd|0)==(zd|0))ih=zd;else{Xd=Qd;while(1){Qd=Xd+-8|0;k[Tf>>2]=Qd;Pd=k[Xd+-4>>2]|0;if(!Pd)jh=Qd;else{j0a(Pd);jh=k[Tf>>2]|0}if((jh|0)==(zd|0))break;else Xd=jh}ih=k[nc>>2]|0}OBa(ih)}Xd=k[mc>>2]|0;if(Xd){zd=k[ae>>2]|0;if((zd|0)==(Xd|0))kh=Xd;else{Pd=zd;while(1){zd=Pd+-8|0;k[ae>>2]=zd;Qd=k[Pd+-4>>2]|0;if(!Qd)lh=zd;else{j0a(Qd);lh=k[ae>>2]|0}if((lh|0)==(Xd|0))break;else Pd=lh}kh=k[mc>>2]|0}OBa(kh)}break f}while(0);nd=Hc()|0;ch=M;dh=nd;Fd=895}while(0);if((Fd|0)==895){eh=dh;fh=ch}ce=k[nc>>2]|0;if(ce){nd=k[Tf>>2]|0;if((nd|0)==(ce|0))mh=ce;else{jd=nd;while(1){nd=jd+-8|0;k[Tf>>2]=nd;Wd=k[jd+-4>>2]|0;if(!Wd)nh=nd;else{j0a(Wd);nh=k[Tf>>2]|0}if((nh|0)==(ce|0))break;else jd=nh}mh=k[nc>>2]|0}OBa(mh)}jd=k[mc>>2]|0;if(!jd){ie=eh;je=fh;break e}ce=k[ae>>2]|0;if((ce|0)==(jd|0))oh=jd;else{Tf=ce;while(1){ce=Tf+-8|0;k[ae>>2]=ce;Wd=k[Tf+-4>>2]|0;if(!Wd)ph=ce;else{j0a(Wd);ph=k[ae>>2]|0}if((ph|0)==(jd|0))break;else Tf=ph}oh=k[mc>>2]|0}OBa(oh);ie=eh;je=fh;break e}else if((Fd|0)==802){Tf=Hc()|0;jd=M;ae=k[Vd>>2]|0;if(ae)j0a(ae);ae=k[Sf>>2]|0;if(!ae){qh=Rg;rh=jd;sh=Tf;Fd=808;break}j0a(ae);qh=Rg;rh=jd;sh=Tf;Fd=808}else if((Fd|0)==807){Tf=Hc()|0;qh=sg;rh=M;sh=Tf;Fd=808}else if((Fd|0)==809){Tf=Hc()|0;th=Tf;uh=M;vh=tg}else if((Fd|0)==810){Tf=Hc()|0;wh=Tf;yh=M;zh=xg;Ah=yg;Bh=wg;Fd=828}else if((Fd|0)==811){Tf=Hc()|0;Ch=Tf;Dh=M;Eh=Ag;Fh=Eg;Gh=Cg;Hh=Bg;Fd=819}else if((Fd|0)==812){Tf=Hc()|0;jd=M;ae=k[ec>>2]|0;if(!ae){Ch=Tf;Dh=jd;Eh=Hg;Fh=Kg;Gh=Jg;Hh=Ig;Fd=819;break}Wd=k[Rd>>2]|0;if((Wd|0)==(ae|0))Ih=ae;else{ce=Wd;while(1){Wd=ce+-8|0;k[Rd>>2]=Wd;nd=k[ce+-4>>2]|0;if(!nd)Jh=Wd;else{j0a(nd);Jh=k[Rd>>2]|0}if((Jh|0)==(ae|0))break;else ce=Jh}Ih=k[ec>>2]|0}OBa(Ih);Ch=Tf;Dh=jd;Eh=Hg;Fh=Kg;Gh=Jg;Hh=Ig;Fd=819}else if((Fd|0)==840){ce=Hc()|0;ae=M;nd=k[hc>>2]|0;if(!nd){th=ce;uh=ae;vh=Sg;break}Wd=k[yd>>2]|0;if((Wd|0)==(nd|0))Kh=nd;else{Pd=Wd;while(1){Wd=Pd+-8|0;k[yd>>2]=Wd;Xd=k[Pd+-4>>2]|0;if(!Xd)Lh=Wd;else{j0a(Xd);Lh=k[yd>>2]|0}if((Lh|0)==(nd|0))break;else Pd=Lh}Kh=k[hc>>2]|0}OBa(Kh);th=ce;uh=ae;vh=Sg}while(0);do if((Fd|0)==808){th=sh;uh=rh;vh=qh}else if((Fd|0)==819){if(!Fh)j0a(Eh);yd=k[dc>>2]|0;if(!yd){wh=Ch;yh=Dh;zh=Hh;Ah=Gh;Bh=Eh;Fd=828;break}Rd=k[Nd>>2]|0;if((Rd|0)==(yd|0))Mh=yd;else{Sf=Rd;while(1){Rd=Sf+-8|0;k[Nd>>2]=Rd;Vd=k[Sf+-4>>2]|0;if(!Vd)Nh=Rd;else{j0a(Vd);Nh=k[Nd>>2]|0}if((Nh|0)==(yd|0))break;else Sf=Nh}Mh=k[dc>>2]|0}OBa(Mh);wh=Ch;yh=Dh;zh=Hh;Ah=Gh;Bh=Eh;Fd=828}while(0);do if((Fd|0)==828){if(Ah){th=wh;uh=yh;vh=Bh;break}j0a(zh);th=wh;uh=yh;vh=Bh}while(0);if(!vh){ie=th;je=uh;break e}j0a(vh);ie=th;je=uh;break e;break}case 22:{Nd=k[k[Ya>>2]>>2]|0;x=0;xa(k[(k[Nd>>2]|0)+12>>2]|0,Nd|0,a|0);Nd=x;x=0;if(Nd&1){Fd=69;break e}k[sc>>2]=k[ed>>2];Nd=k[k[Ya>>2]>>2]|0;x=0;Sf=Ba(k[(k[Nd>>2]|0)+16>>2]|0,Nd|0)|0;Nd=x;x=0;if(Nd&1){Fd=69;break e}Nd=k[Sf+4>>2]|0;x=0;xa(591,tc|0,sd|0);Sf=x;x=0;if(Sf&1){Fd=69;break e}x=0;nb(137,sc|0,Nd|0,k[k[tc>>2]>>2]|0,1);Nd=x;x=0;if(Nd&1){Nd=Hc()|0;Sf=M;yd=k[tc>>2]|0;if(!yd){ie=Nd;je=Sf;break e}ae=tc+4|0;ce=k[ae>>2]|0;if((ce|0)==(yd|0))Oh=yd;else{Vd=ce;while(1){ce=Vd+-8|0;k[ae>>2]=ce;Rd=k[Vd+-4>>2]|0;if(!Rd)Ph=ce;else{j0a(Rd);Ph=k[ae>>2]|0}if((Ph|0)==(yd|0))break;else Vd=Ph}Oh=k[tc>>2]|0}OBa(Oh);ie=Nd;je=Sf;break e}Vd=k[tc>>2]|0;if(Vd){yd=tc+4|0;ae=k[yd>>2]|0;if((ae|0)==(Vd|0))Qh=Vd;else{Rd=ae;while(1){ae=Rd+-8|0;k[yd>>2]=ae;ce=k[Rd+-4>>2]|0;if(!ce)Rh=ae;else{j0a(ce);Rh=k[yd>>2]|0}if((Rh|0)==(Vd|0))break;else Rd=Rh}Qh=k[tc>>2]|0}OBa(Qh)}Rd=k[ed>>2]|0;k[P>>2]=1;k[P+8>>2]=64;k[P+40>>2]=1;Vd=P+48|0;k[Vd>>2]=-1;k[Vd+4>>2]=-1;Vd=P+56|0;yd=P+60|0;Sf=P+72|0;k[Vd>>2]=0;k[Vd+4>>2]=0;k[Vd+8>>2]=0;k[Vd+12>>2]=0;k[Vd+16>>2]=0;x=0;Ta(539,Rd+48|0,P|0)|0;Rd=x;x=0;if(Rd&1){Rd=Hc()|0;Vd=M;Nd=k[Sf>>2]|0;if(Nd)j0a(Nd);Nd=k[yd>>2]|0;if(!Nd){se=Vd;te=Rd;Fd=70;break e}j0a(Nd);se=Vd;te=Rd;Fd=70;break e}Rd=k[Sf>>2]|0;if(Rd)j0a(Rd);Rd=k[yd>>2]|0;if(Rd)j0a(Rd);break f;break}case 24:case 23:{Rd=vc+12|0;yd=vc+16|0;Sf=vc+8|0;Vd=k[(k[Ya>>2]|0)+16>>2]|0;x=0;xa(k[(k[Vd>>2]|0)+12>>2]|0,Vd|0,a|0);Vd=x;x=0;x:do if(!(Vd&1)){k[uc>>2]=k[ed>>2];Nd=k[(k[Ya>>2]|0)+16>>2]|0;x=0;ce=Ba(k[(k[Nd>>2]|0)+16>>2]|0,Nd|0)|0;Nd=x;x=0;if(Nd&1)break;Nd=k[ce+4>>2]|0;x=0;fb(247,vc|0,256,0);ce=x;x=0;if(ce&1)break;x=0;nb(137,uc|0,Nd|0,vc|0,0);Nd=x;x=0;do if(!(Nd&1)){k[vc>>2]=20456;xh(Rd,k[yd>>2]|0);ce=k[Sf>>2]|0;if(ce)k0a(ce);ce=k[(k[Ya>>2]|0)+8>>2]|0;x=0;xa(k[(k[ce>>2]|0)+12>>2]|0,ce|0,a|0);ce=x;x=0;if(ce&1)break x;k[uc>>2]=k[ed>>2];ce=k[(k[Ya>>2]|0)+8>>2]|0;x=0;ae=Ba(k[(k[ce>>2]|0)+16>>2]|0,ce|0)|0;ce=x;x=0;if(ce&1)break x;ce=k[ae+4>>2]|0;x=0;fb(247,vc|0,256,0);ae=x;x=0;if(ae&1)break x;x=0;nb(137,uc|0,ce|0,vc|0,0);ce=x;x=0;if(ce&1)break;k[vc>>2]=20456;xh(Rd,k[yd>>2]|0);ce=k[Sf>>2]|0;if(ce)k0a(ce);ce=k[k[Ya>>2]>>2]|0;x=0;xa(k[(k[ce>>2]|0)+12>>2]|0,ce|0,a|0);ce=x;x=0;if(ce&1)break x;k[uc>>2]=k[ed>>2];ce=k[k[Ya>>2]>>2]|0;x=0;ae=Ba(k[(k[ce>>2]|0)+16>>2]|0,ce|0)|0;ce=x;x=0;if(ce&1)break x;ce=k[ae+4>>2]|0;x=0;fb(247,vc|0,256,0);ae=x;x=0;if(ae&1)break x;x=0;nb(137,uc|0,ce|0,vc|0,0);ce=x;x=0;if(ce&1)break;k[vc>>2]=20456;xh(Rd,k[yd>>2]|0);ce=k[Sf>>2]|0;if(ce)k0a(ce);ce=k[ed>>2]|0;if((k[Od>>2]|0)==23){k[O>>2]=1;k[O+8>>2]=8;k[O+40>>2]=1;ae=O+48|0;k[ae>>2]=-1;k[ae+4>>2]=-1;ae=O+56|0;Td=O+60|0;Sd=O+72|0;k[ae>>2]=0;k[ae+4>>2]=0;k[ae+8>>2]=0;k[ae+12>>2]=0;k[ae+16>>2]=0;x=0;Ta(539,ce+48|0,O|0)|0;ae=x;x=0;if(ae&1){ae=Hc()|0;Pd=M;nd=k[Sd>>2]|0;if(nd)j0a(nd);nd=k[Td>>2]|0;if(!nd){se=Pd;te=ae;Fd=70;break e}j0a(nd);se=Pd;te=ae;Fd=70;break e}ae=k[Sd>>2]|0;if(ae)j0a(ae);ae=k[Td>>2]|0;if(ae)j0a(ae);break f}else{k[N>>2]=1;k[N+8>>2]=9;k[N+40>>2]=1;ae=N+48|0;k[ae>>2]=-1;k[ae+4>>2]=-1;ae=N+56|0;Td=N+60|0;Sd=N+72|0;k[ae>>2]=0;k[ae+4>>2]=0;k[ae+8>>2]=0;k[ae+12>>2]=0;k[ae+16>>2]=0;x=0;Ta(539,ce+48|0,N|0)|0;ce=x;x=0;if(ce&1){ce=Hc()|0;ae=M;Pd=k[Sd>>2]|0;if(Pd)j0a(Pd);Pd=k[Td>>2]|0;if(!Pd){se=ae;te=ce;Fd=70;break e}j0a(Pd);se=ae;te=ce;Fd=70;break e}ce=k[Sd>>2]|0;if(ce)j0a(ce);ce=k[Td>>2]|0;if(ce)j0a(ce);break f}}while(0);Nd=Hc()|0;ce=M;k[vc>>2]=20456;xh(Rd,k[yd>>2]|0);Td=k[Sf>>2]|0;if(!Td){ie=Nd;je=ce;break e}k0a(Td);ie=Nd;je=ce;break e}while(0);Sf=Hc()|0;se=M;te=Sf;Fd=70;break e;break}case 13:case 12:case 11:{Sf=k[kd>>2]|0;x=0;xa(k[(k[Sf>>2]|0)+12>>2]|0,Sf|0,a|0);Sf=x;x=0;if(Sf&1){Fd=69;break e}y:do if(!(i[7352]|0)){if(!(Bb(7352)|0))break;k[wc>>2]=11;k[wc+8>>2]=1;k[wc+40>>2]=1;k[wc+48>>2]=12;k[wc+56>>2]=2;k[wc+88>>2]=1;k[wc+96>>2]=13;k[wc+104>>2]=3;k[wc+136>>2]=1;k[10569]=0;k[10570]=0;k[10568]=42276;x=0;Sf=Ba(563,64)|0;yd=x;x=0;do if(!(yd&1)){Rd=Sf+16|0;k[Rd>>2]=11;pe=Sf+24|0;qe=wc+8|0;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));k[f>>2]=42276;k[d>>2]=k[f>>2];Vd=tna(42272,d,e,Rd)|0;ce=k[Vd>>2]|0;do if(!ce){Nd=k[e>>2]|0;k[Sf>>2]=0;k[Sf+4>>2]=0;k[Sf+8>>2]=Nd;k[Vd>>2]=Sf;Nd=k[k[10568]>>2]|0;if(!Nd)Sh=Sf;else{k[10568]=Nd;Sh=k[Vd>>2]|0}ui(k[10569]|0,Sh);k[10570]=(k[10570]|0)+1}else{if((ce|0)==(Sf|0))break;OBa(Sf)}while(0);x=0;ce=Ba(563,64)|0;Vd=x;x=0;if(Vd&1)break;Vd=ce+16|0;k[Vd>>2]=12;pe=ce+24|0;qe=wc+56|0;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));k[f>>2]=42276;k[d>>2]=k[f>>2];Rd=tna(42272,d,e,Vd)|0;Nd=k[Rd>>2]|0;do if(!Nd){Td=k[e>>2]|0;k[ce>>2]=0;k[ce+4>>2]=0;k[ce+8>>2]=Td;k[Rd>>2]=ce;Td=k[k[10568]>>2]|0;if(!Td)Th=ce;else{k[10568]=Td;Th=k[Rd>>2]|0}ui(k[10569]|0,Th);k[10570]=(k[10570]|0)+1}else{if((Nd|0)==(ce|0))break;OBa(ce)}while(0);x=0;ce=Ba(563,64)|0;Nd=x;x=0;if(Nd&1)break;Nd=ce+16|0;k[Nd>>2]=13;pe=ce+24|0;qe=wc+104|0;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));k[f>>2]=42276;k[d>>2]=k[f>>2];Rd=tna(42272,d,e,Nd)|0;Vd=k[Rd>>2]|0;do if(!Vd){Td=k[e>>2]|0;k[ce>>2]=0;k[ce+4>>2]=0;k[ce+8>>2]=Td;k[Rd>>2]=ce;Td=k[k[10568]>>2]|0;if(!Td)Uh=ce;else{k[10568]=Td;Uh=k[Rd>>2]|0}ui(k[10569]|0,Uh);k[10570]=(k[10570]|0)+1}else{if((Vd|0)==(ce|0))break;OBa(ce)}while(0);Kc(7352);break y}while(0);Sf=Hc()|0;yd=M;una(42272,k[10569]|0);Cd(7352);ie=Sf;je=yd;break e}while(0);yd=k[ed>>2]|0;Sf=k[10569]|0;do if(Sf){ce=k[Od>>2]|0;Vd=42276;Rd=Sf;z:while(1){Nd=Rd;while(1){if((k[Nd+16>>2]|0)>=(ce|0)){Vh=Nd;break}Nd=k[Nd+4>>2]|0;if(!Nd){Wh=Vd;break z}}Rd=k[Vh>>2]|0;if(!Rd){Wh=Vh;break}else Vd=Vh}if((Wh|0)==42276){Fd=1015;break}if((ce|0)>=(k[Wh+16>>2]|0))Xh=Wh;else Fd=1015}else Fd=1015;while(0);if((Fd|0)==1015)Xh=42276;Sf=yd+48|0;k[L>>2]=2;pe=L+8|0;qe=Xh+24|0;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));yd=L+48|0;k[yd>>2]=-1;k[yd+4>>2]=-1;yd=L+56|0;Vd=L+60|0;Rd=L+72|0;k[yd>>2]=0;k[yd+4>>2]=0;k[yd+8>>2]=0;k[yd+12>>2]=0;k[yd+16>>2]=0;x=0;Ta(539,Sf|0,L|0)|0;yd=x;x=0;if(yd&1){yd=Hc()|0;Nd=M;Td=k[Rd>>2]|0;if(Td)j0a(Td);Td=k[Vd>>2]|0;if(!Td){se=Nd;te=yd;Fd=70;break e}j0a(Td);se=Nd;te=yd;Fd=70;break e}yd=k[Rd>>2]|0;if(yd)j0a(yd);yd=k[Vd>>2]|0;if(yd)j0a(yd);x=0;yd=Ba(k[(k[Gd>>2]|0)+60>>2]|0,sd|0)|0;Vd=x;x=0;if(Vd&1){Fd=69;break e}Vd=yd;while(1){if(!Vd){Fd=1028;break}yd=k[ed>>2]|0;Rd=Vd;Vd=Vd+-1|0;x=0;fb(140,K|0,296239,35);Nd=x;x=0;if(Nd&1){Fd=67;break}x=0;pa(51,Vd>>>0<16|0,K|0,217,295981,296275);Nd=x;x=0;if(Nd&1){Fd=1032;break}K2a(K);x=0;Ta(594,yd|0,Rd+143&255|0)|0;Rd=x;x=0;if(Rd&1){Fd=67;break}}if((Fd|0)==67){Vd=Hc()|0;se=M;te=Vd;Fd=70;break e}else if((Fd|0)==1028){x=0;fb(347,a|0,sd|0,Ya|0);Vd=x;x=0;if(Vd&1){Fd=69;break e}else break f}else if((Fd|0)==1032){Vd=Hc()|0;Sf=M;K2a(K);se=Sf;te=Vd;Fd=70;break e}break}case 25:case 26:{Vd=k[kd>>2]|0;x=0;xa(k[(k[Vd>>2]|0)+12>>2]|0,Vd|0,a|0);Vd=x;x=0;if(Vd&1){Fd=69;break e}x=0;xa(591,xc|0,sd|0);Vd=x;x=0;if(Vd&1){Fd=69;break e}Vd=xc+4|0;Sf=k[Vd>>2]|0;Rd=k[xc>>2]|0;x=0;fb(140,yc|0,329672,0);yd=x;x=0;do if(yd&1){Nd=Hc()|0;Yh=Nd;Zh=M}else{x=0;pa(57,(Sf-Rd|0)==8|0,yc|0,734,269817,271452);Nd=x;x=0;if(Nd&1){Nd=Hc()|0;Td=M;K2a(yc);Yh=Nd;Zh=Td;break}K2a(yc);Td=k[xc>>2]|0;if(Td){Nd=k[Vd>>2]|0;if((Nd|0)==(Td|0))_h=Td;else{Sd=Nd;while(1){Nd=Sd+-8|0;k[Vd>>2]=Nd;ae=k[Sd+-4>>2]|0;if(!ae)$h=Nd;else{j0a(ae);$h=k[Vd>>2]|0}if(($h|0)==(Td|0))break;else Sd=$h}_h=k[xc>>2]|0}OBa(_h)}x=0;xa(591,zc|0,sd|0);Sd=x;x=0;if(Sd&1){Fd=69;break e}Sd=k[k[zc>>2]>>2]|0;x=0;fb(140,Ac|0,329672,0);Td=x;x=0;do if(Td&1){ce=Hc()|0;ai=ce;bi=M}else{x=0;pa(57,(Sd|0)!=0|0,Ac|0,735,269817,271452);ce=x;x=0;if(ce&1){ce=Hc()|0;ae=M;K2a(Ac);ai=ce;bi=ae;break}K2a(Ac);ae=k[zc>>2]|0;if(ae){ce=zc+4|0;Nd=k[ce>>2]|0;if((Nd|0)==(ae|0))ci=ae;else{Pd=Nd;while(1){Nd=Pd+-8|0;k[ce>>2]=Nd;nd=k[Pd+-4>>2]|0;if(!nd)di=Nd;else{j0a(nd);di=k[ce>>2]|0}if((di|0)==(ae|0))break;else Pd=di}ci=k[zc>>2]|0}OBa(ci)}x=0;xa(591,Cc|0,sd|0);Pd=x;x=0;if(Pd&1){Fd=69;break e}Pd=k[Cc>>2]|0;k[Bc>>2]=k[Pd>>2];ae=Bc+4|0;ce=k[Pd+4>>2]|0;k[ae>>2]=ce;if(!ce)ei=Pd;else{h0a(ce);ei=k[Cc>>2]|0}if(ei){ce=Cc+4|0;Pd=k[ce>>2]|0;if((Pd|0)==(ei|0))fi=ei;else{nd=Pd;while(1){Pd=nd+-8|0;k[ce>>2]=Pd;Nd=k[nd+-4>>2]|0;if(!Nd)gi=Pd;else{j0a(Nd);gi=k[ce>>2]|0}if((gi|0)==(ei|0))break;else nd=gi}fi=k[Cc>>2]|0}OBa(fi)}do if((k[Od>>2]|0)==25){k[Ec>>2]=0;x=0;fb(258,Dc|0,Ec|0,Bc|0);nd=x;x=0;if(nd&1){Fd=1172;break}hi=k[Dc>>2]|0;Fd=1073}else{x=0;nd=Ba(563,104)|0;ce=x;x=0;if(ce&1){Fd=1172;break}k[nd+4>>2]=0;k[nd+8>>2]=0;k[nd>>2]=31932;ce=nd+16|0;x=0;fb(283,ce|0,0,0);Nd=x;x=0;if(Nd&1){Nd=Hc()|0;Pd=M;c0a(nd);OBa(nd);ii=Pd;ji=Nd;Fd=1173;break}k[Dc>>2]=ce;k[Dc+4>>2]=nd;i0a(nd);k[nd+20>>2]=ce;Nd=nd+24|0;Pd=k[Nd>>2]|0;k[Nd>>2]=nd;if(!Pd){hi=ce;Fd=1073;break}k0a(Pd);hi=ce;Fd=1073}while(0);do if((Fd|0)==1073){k[Fc>>2]=k[ed>>2];x=0;fb(312,Fc|0,hi|0,0);ce=x;x=0;do if(ce&1)Fd=1174;else{Pd=k[ed>>2]|0;k[J>>2]=1;k[J+8>>2]=128;k[J+40>>2]=1;nd=J+48|0;k[nd>>2]=-1;k[nd+4>>2]=-1;nd=J+56|0;Nd=J+60|0;jd=J+72|0;k[nd>>2]=0;k[nd+4>>2]=0;k[nd+8>>2]=0;k[nd+12>>2]=0;k[nd+16>>2]=0;x=0;Ta(539,Pd+48|0,J|0)|0;Pd=x;x=0;if(Pd&1){Pd=Hc()|0;nd=M;Tf=k[jd>>2]|0;if(Tf)j0a(Tf);Tf=k[Nd>>2]|0;if(!Tf){ki=nd;li=Pd;Fd=1175;break}j0a(Tf);ki=nd;li=Pd;Fd=1175;break}Pd=k[jd>>2]|0;if(Pd)j0a(Pd);Pd=k[Nd>>2]|0;if(Pd)j0a(Pd);Pd=k[ed>>2]|0;k[Gc>>2]=1;k[Gc+32>>2]=1;Nd=Pd+48|0;k[I>>2]=2;pe=I+8|0;qe=Gc;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));Pd=I+48|0;k[Pd>>2]=-1;k[Pd+4>>2]=-1;Pd=I+56|0;jd=I+60|0;nd=I+72|0;k[Pd>>2]=0;k[Pd+4>>2]=0;k[Pd+8>>2]=0;k[Pd+12>>2]=0;k[Pd+16>>2]=0;x=0;Ta(539,Nd|0,I|0)|0;Pd=x;x=0;if(Pd&1){Pd=Hc()|0;Tf=M;Xd=k[nd>>2]|0;if(Xd)j0a(Xd);Xd=k[jd>>2]|0;if(!Xd){ki=Tf;li=Pd;Fd=1175;break}j0a(Xd);ki=Tf;li=Pd;Fd=1175;break}Pd=k[nd>>2]|0;if(Pd)j0a(Pd);Pd=k[jd>>2]|0;if(Pd)j0a(Pd);k[H>>2]=1;k[H+8>>2]=1;k[H+40>>2]=1;Pd=H+48|0;k[Pd>>2]=-1;k[Pd+4>>2]=-1;Pd=H+56|0;jd=H+60|0;nd=H+72|0;k[Pd>>2]=0;k[Pd+4>>2]=0;k[Pd+8>>2]=0;k[Pd+12>>2]=0;k[Pd+16>>2]=0;x=0;Ta(539,Nd|0,H|0)|0;Pd=x;x=0;if(Pd&1){Pd=Hc()|0;Tf=M;Xd=k[nd>>2]|0;if(Xd)j0a(Xd);Xd=k[jd>>2]|0;if(!Xd){ki=Tf;li=Pd;Fd=1175;break}j0a(Xd);ki=Tf;li=Pd;Fd=1175;break}Pd=k[nd>>2]|0;if(Pd)j0a(Pd);Pd=k[jd>>2]|0;if(Pd)j0a(Pd);Pd=k[ed>>2]|0;k[G>>2]=1;k[G+8>>2]=130;k[G+40>>2]=1;jd=G+48|0;k[jd>>2]=-1;k[jd+4>>2]=-1;jd=G+56|0;nd=G+60|0;Tf=G+72|0;Xd=Pd+48|0;k[jd>>2]=0;k[jd+4>>2]=0;k[jd+8>>2]=0;k[jd+12>>2]=0;k[jd+16>>2]=0;x=0;Ta(539,Xd|0,G|0)|0;jd=x;x=0;if(jd&1){jd=Hc()|0;Pd=M;Wd=k[Tf>>2]|0;if(Wd)j0a(Wd);Wd=k[nd>>2]|0;if(!Wd){ki=Pd;li=jd;Fd=1175;break}j0a(Wd);ki=Pd;li=jd;Fd=1175;break}jd=k[Tf>>2]|0;if(jd)j0a(jd);jd=k[nd>>2]|0;if(jd)j0a(jd);k[F>>2]=1;k[F+8>>2]=129;k[F+40>>2]=1;jd=F+48|0;k[jd>>2]=-1;k[jd+4>>2]=-1;jd=F+56|0;nd=F+60|0;Tf=F+72|0;k[jd>>2]=0;k[jd+4>>2]=0;k[jd+8>>2]=0;k[jd+12>>2]=0;k[jd+16>>2]=0;x=0;Ta(539,Xd|0,F|0)|0;Xd=x;x=0;if(Xd&1){Xd=Hc()|0;jd=M;Pd=k[Tf>>2]|0;if(Pd)j0a(Pd);Pd=k[nd>>2]|0;if(!Pd){ki=jd;li=Xd;Fd=1175;break}j0a(Pd);ki=jd;li=Xd;Fd=1175;break}Xd=k[Tf>>2]|0;if(Xd)j0a(Xd);Xd=k[nd>>2]|0;if(Xd)j0a(Xd);k[Ic>>2]=k[ed>>2];x=0;xa(854,Ic|0,hi|0);Xd=x;x=0;if(Xd&1){Fd=1174;break}Xd=k[ed>>2]|0;k[E>>2]=1;k[E+8>>2]=145;k[E+40>>2]=1;nd=E+48|0;k[nd>>2]=-1;k[nd+4>>2]=-1;nd=E+56|0;Tf=E+60|0;jd=E+72|0;Pd=Xd+48|0;k[nd>>2]=0;k[nd+4>>2]=0;k[nd+8>>2]=0;k[nd+12>>2]=0;k[nd+16>>2]=0;x=0;Ta(539,Pd|0,E|0)|0;nd=x;x=0;if(nd&1){nd=Hc()|0;Xd=M;Wd=k[jd>>2]|0;if(Wd)j0a(Wd);Wd=k[Tf>>2]|0;if(!Wd){ki=Xd;li=nd;Fd=1175;break}j0a(Wd);ki=Xd;li=nd;Fd=1175;break}nd=k[jd>>2]|0;if(nd)j0a(nd);nd=k[Tf>>2]|0;if(nd)j0a(nd);k[D>>2]=1;k[D+8>>2]=144;k[D+40>>2]=1;nd=D+48|0;k[nd>>2]=-1;k[nd+4>>2]=-1;nd=D+56|0;Tf=D+60|0;jd=D+72|0;k[nd>>2]=0;k[nd+4>>2]=0;k[nd+8>>2]=0;k[nd+12>>2]=0;k[nd+16>>2]=0;x=0;Ta(539,Pd|0,D|0)|0;Pd=x;x=0;if(Pd&1){Pd=Hc()|0;nd=M;Xd=k[jd>>2]|0;if(Xd)j0a(Xd);Xd=k[Tf>>2]|0;if(!Xd){ki=nd;li=Pd;Fd=1175;break}j0a(Xd);ki=nd;li=Pd;Fd=1175;break}Pd=k[jd>>2]|0;if(Pd)j0a(Pd);Pd=k[Tf>>2]|0;if(Pd)j0a(Pd);k[Jc>>2]=k[ed>>2];x=0;fb(318,Jc|0,hi|0,0);Pd=x;x=0;if(Pd&1){Fd=1174;break}Pd=k[k[Ya>>2]>>2]|0;x=0;xa(k[(k[Pd>>2]|0)+12>>2]|0,Pd|0,a|0);Pd=x;x=0;if(Pd&1){Fd=1174;break}Pd=k[k[Ya>>2]>>2]|0;x=0;Tf=Ba(k[(k[Pd>>2]|0)+16>>2]|0,Pd|0)|0;Pd=x;x=0;if(Pd&1){Fd=1174;break}Pd=k[Tf+4>>2]|0;Tf=k[(k[Pd>>2]|0)+72>>2]|0;jd=hi+36|0;nd=k[jd>>2]|0;x=0;fb(140,C|0,329672,0);Xd=x;x=0;if(Xd&1){Fd=1174;break}x=0;pa(57,(nd|0)!=0|0,C|0,588,285183,276209);nd=x;x=0;if(nd&1){nd=Hc()|0;Xd=M;K2a(C);ki=Xd;li=nd;Fd=1175;break}K2a(C);x=0;fb(Tf|0,Lc|0,Pd|0,jd|0);jd=x;x=0;if(jd&1){Fd=1174;break}k[Mc>>2]=k[ed>>2];jd=k[k[Ya>>2]>>2]|0;x=0;Pd=Ba(k[(k[jd>>2]|0)+16>>2]|0,jd|0)|0;jd=x;x=0;do if(!(jd&1)){x=0;nb(137,Mc|0,k[Pd+4>>2]|0,k[Lc>>2]|0,0);Tf=x;x=0;if(Tf&1)break;k[Nc>>2]=k[ed>>2];Tf=k[Lc>>2]|0;x=0;nd=Ba(k[(k[Tf>>2]|0)+60>>2]|0,Tf|0)|0;Tf=x;x=0;if(Tf&1)break;x=0;fb(334,Nc|0,nd+1|0,1);nd=x;x=0;if(nd&1)break;k[Oc>>2]=k[ed>>2];nd=k[Lc>>2]|0;x=0;Tf=Ba(k[(k[nd>>2]|0)+60>>2]|0,nd|0)|0;nd=x;x=0;if(nd&1)break;x=0;fb(334,Oc|0,Tf+1|0,1);Tf=x;x=0;if(Tf&1)break;Tf=k[ed>>2]|0;if((k[Od>>2]|0)==25){x=0;fb(317,Pc|0,Tf|0,k[Bc>>2]|0);nd=x;x=0;if(nd&1)break;x=0;nb(66,Pc|0,k[Lc>>2]|0,b+8|0,1);nd=x;x=0;if(nd&1)break}else{x=0;xa(855,Qc|0,Tf|0);Tf=x;x=0;if(Tf&1)break;x=0;nb(k[(k[Qc>>2]|0)+8>>2]|0,Qc|0,k[Lc>>2]|0,b+8|0,1);Tf=x;x=0;if(Tf&1)break}Tf=k[Lc+4>>2]|0;if(Tf)j0a(Tf);Tf=k[Dc+4>>2]|0;if(Tf)j0a(Tf);Tf=k[ae>>2]|0;if(Tf)j0a(Tf);break f}while(0);Pd=Hc()|0;jd=M;Nd=k[Lc+4>>2]|0;if(!Nd){mi=Pd;ni=jd;break}j0a(Nd);mi=Pd;ni=jd}while(0);if((Fd|0)==1174){ce=Hc()|0;ki=M;li=ce;Fd=1175}if((Fd|0)==1175){mi=li;ni=ki}ce=k[Dc+4>>2]|0;if(!ce){oi=mi;pi=ni;break}j0a(ce);oi=mi;pi=ni}else if((Fd|0)==1172){ce=Hc()|0;ii=M;ji=ce;Fd=1173}while(0);if((Fd|0)==1173){oi=ji;pi=ii}ce=k[ae>>2]|0;if(!ce){ie=oi;je=pi;break e}j0a(ce);ie=oi;je=pi;break e}while(0);Sd=k[zc>>2]|0;if(!Sd){ie=ai;je=bi;break e}Td=zc+4|0;ce=k[Td>>2]|0;if((ce|0)==(Sd|0))qi=Sd;else{jd=ce;while(1){ce=jd+-8|0;k[Td>>2]=ce;Pd=k[jd+-4>>2]|0;if(!Pd)ri=ce;else{j0a(Pd);ri=k[Td>>2]|0}if((ri|0)==(Sd|0))break;else jd=ri}qi=k[zc>>2]|0}OBa(qi);ie=ai;je=bi;break e}while(0);Rd=k[xc>>2]|0;if(!Rd){ie=Yh;je=Zh;break e}Sf=k[Vd>>2]|0;if((Sf|0)==(Rd|0))si=Rd;else{yd=Sf;while(1){Sf=yd+-8|0;k[Vd>>2]=Sf;jd=k[yd+-4>>2]|0;if(!jd)ti=Sf;else{j0a(jd);ti=k[Vd>>2]|0}if((ti|0)==(Rd|0))break;else yd=ti}si=k[xc>>2]|0}OBa(si);ie=Yh;je=Zh;break e;break}case 27:{x=0;yd=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Rd=x;x=0;if(Rd&1){Fd=69;break e}Rd=iDa(k[yd+4>>2]|0,168,6704,0)|0;if(!Rd){x=0;hb(49);x=0;Fd=69;break e}yd=k[kd>>2]|0;x=0;xa(k[(k[yd>>2]|0)+12>>2]|0,yd|0,a|0);yd=x;x=0;if(yd&1){Fd=69;break e}yd=k[qd>>2]|0;Vd=k[Ya>>2]|0;x=0;fb(140,Rc|0,329672,0);jd=x;x=0;if(jd&1){Fd=69;break e}x=0;pa(57,(yd-Vd|0)==8|0,Rc|0,773,269817,271452);Vd=x;x=0;if(Vd&1){Vd=Hc()|0;yd=M;K2a(Rc);ie=Vd;je=yd;break e}K2a(Rc);yd=k[k[Ya>>2]>>2]|0;x=0;xa(k[(k[yd>>2]|0)+12>>2]|0,yd|0,a|0);yd=x;x=0;if(yd&1){Fd=69;break e}k[Tc>>2]=k[ed>>2];yd=k[k[Ya>>2]>>2]|0;x=0;Vd=Ba(k[(k[yd>>2]|0)+16>>2]|0,yd|0)|0;yd=x;x=0;if(yd&1){Fd=69;break e}yd=k[Vd+4>>2]|0;x=0;fb(247,Uc|0,256,0);Vd=x;x=0;if(Vd&1){Fd=69;break e}x=0;nb(137,Tc|0,yd|0,Uc|0,0);yd=x;x=0;if(yd&1){yd=Hc()|0;Vd=M;k[Uc>>2]=20456;xh(Uc+12|0,k[Uc+16>>2]|0);jd=k[Uc+8>>2]|0;if(!jd){ie=yd;je=Vd;break e}k0a(jd);ie=yd;je=Vd;break e}k[Uc>>2]=20456;xh(Uc+12|0,k[Uc+16>>2]|0);Vd=k[Uc+8>>2]|0;if(Vd)k0a(Vd);k[Vc>>2]=k[ed>>2];x=0;va(1508,Vc|0);Vd=x;x=0;if(Vd&1){Fd=69;break e}Vd=k[ed>>2]|0;k[B>>2]=1;k[B+8>>2]=128;k[B+40>>2]=1;yd=B+48|0;k[yd>>2]=-1;k[yd+4>>2]=-1;yd=B+56|0;jd=B+60|0;Sf=B+72|0;Sd=Vd+48|0;k[yd>>2]=0;k[yd+4>>2]=0;k[yd+8>>2]=0;k[yd+12>>2]=0;k[yd+16>>2]=0;x=0;Ta(539,Sd|0,B|0)|0;yd=x;x=0;if(yd&1){yd=Hc()|0;Vd=M;Td=k[Sf>>2]|0;if(Td)j0a(Td);Td=k[jd>>2]|0;if(!Td){se=Vd;te=yd;Fd=70;break e}j0a(Td);se=Vd;te=yd;Fd=70;break e}yd=k[Sf>>2]|0;if(yd)j0a(yd);yd=k[jd>>2]|0;if(yd)j0a(yd);k[A>>2]=1;k[A+8>>2]=89;k[A+40>>2]=1;yd=A+48|0;k[yd>>2]=-1;k[yd+4>>2]=-1;yd=A+56|0;jd=A+60|0;Sf=A+72|0;k[yd>>2]=0;k[yd+4>>2]=0;k[yd+8>>2]=0;k[yd+12>>2]=0;k[yd+16>>2]=0;x=0;Ta(539,Sd|0,A|0)|0;Sd=x;x=0;if(Sd&1){Sd=Hc()|0;yd=M;Vd=k[Sf>>2]|0;if(Vd)j0a(Vd);Vd=k[jd>>2]|0;if(!Vd){se=yd;te=Sd;Fd=70;break e}j0a(Vd);se=yd;te=Sd;Fd=70;break e}Sd=k[Sf>>2]|0;if(Sd)j0a(Sd);Sd=k[jd>>2]|0;if(Sd)j0a(Sd);Sd=k[ed>>2]|0;k[z>>2]=1;k[z+8>>2]=16;k[z+40>>2]=1;jd=z+48|0;k[jd>>2]=-1;k[jd+4>>2]=-1;jd=z+56|0;Sf=z+60|0;yd=z+72|0;k[jd>>2]=0;k[jd+4>>2]=0;k[jd+8>>2]=0;k[jd+12>>2]=0;k[jd+16>>2]=0;x=0;Ta(539,Sd+48|0,z|0)|0;Sd=x;x=0;if(Sd&1){Sd=Hc()|0;jd=M;Vd=k[yd>>2]|0;if(Vd)j0a(Vd);Vd=k[Sf>>2]|0;if(!Vd){se=jd;te=Sd;Fd=70;break e}j0a(Vd);se=jd;te=Sd;Fd=70;break e}Sd=k[yd>>2]|0;if(Sd)j0a(Sd);Sd=k[Sf>>2]|0;if(Sd)j0a(Sd);x=0;xa(819,Wc|0,k[ed>>2]|0);Sd=x;x=0;if(Sd&1){Fd=69;break e}Sd=k[ed>>2]|0;k[y>>2]=1;k[y+8>>2]=80;k[y+40>>2]=1;Sf=y+48|0;k[Sf>>2]=-1;k[Sf+4>>2]=-1;Sf=y+56|0;yd=y+60|0;jd=y+72|0;k[Sf>>2]=0;k[Sf+4>>2]=0;k[Sf+8>>2]=0;k[Sf+12>>2]=0;k[Sf+16>>2]=0;x=0;Ta(539,Sd+48|0,y|0)|0;Sd=x;x=0;A:do if(Sd&1){Sf=Hc()|0;Vd=M;Td=k[jd>>2]|0;if(Td)j0a(Td);Td=k[yd>>2]|0;if(!Td){vi=Vd;wi=Sf;Fd=1383;break}j0a(Td);vi=Vd;wi=Sf;Fd=1383}else{Sf=k[jd>>2]|0;if(Sf)j0a(Sf);Sf=k[yd>>2]|0;if(Sf)j0a(Sf);Sf=k[ed>>2]|0;k[w>>2]=1;k[w+8>>2]=89;k[w+40>>2]=1;Vd=w+48|0;k[Vd>>2]=-1;k[Vd+4>>2]=-1;Vd=w+56|0;Td=w+60|0;Pd=w+72|0;k[Vd>>2]=0;k[Vd+4>>2]=0;k[Vd+8>>2]=0;k[Vd+12>>2]=0;k[Vd+16>>2]=0;x=0;Ta(539,Sf+48|0,w|0)|0;Sf=x;x=0;if(Sf&1){Sf=Hc()|0;Vd=M;ce=k[Pd>>2]|0;if(ce)j0a(ce);ce=k[Td>>2]|0;if(!ce){vi=Vd;wi=Sf;Fd=1383;break}j0a(ce);vi=Vd;wi=Sf;Fd=1383;break}Sf=k[Pd>>2]|0;if(Sf)j0a(Sf);Sf=k[Td>>2]|0;if(Sf)j0a(Sf);x=0;Ta(539,(k[ed>>2]|0)+48|0,Wc|0)|0;Sf=x;x=0;do if(!(Sf&1)){Td=k[ed>>2]|0;k[v>>2]=1;k[v+8>>2]=144;k[v+40>>2]=1;Pd=v+48|0;k[Pd>>2]=-1;k[Pd+4>>2]=-1;Pd=v+56|0;Vd=v+60|0;ce=v+72|0;k[Pd>>2]=0;k[Pd+4>>2]=0;k[Pd+8>>2]=0;k[Pd+12>>2]=0;k[Pd+16>>2]=0;x=0;Ta(539,Td+48|0,v|0)|0;Td=x;x=0;if(Td&1){Td=Hc()|0;Pd=M;Nd=k[ce>>2]|0;if(Nd)j0a(Nd);Nd=k[Vd>>2]|0;if(!Nd){vi=Pd;wi=Td;Fd=1383;break A}j0a(Nd);vi=Pd;wi=Td;Fd=1383;break A}Td=k[ce>>2]|0;if(Td)j0a(Td);Td=k[Vd>>2]|0;if(Td)j0a(Td);Td=k[ed>>2]|0;k[u>>2]=1;k[u+8>>2]=128;k[u+40>>2]=1;Vd=u+48|0;k[Vd>>2]=-1;k[Vd+4>>2]=-1;Vd=u+56|0;ce=u+60|0;Pd=u+72|0;Nd=Td+48|0;k[Vd>>2]=0;k[Vd+4>>2]=0;k[Vd+8>>2]=0;k[Vd+12>>2]=0;k[Vd+16>>2]=0;x=0;Ta(539,Nd|0,u|0)|0;Vd=x;x=0;if(Vd&1){Vd=Hc()|0;Td=M;Tf=k[Pd>>2]|0;if(Tf)j0a(Tf);Tf=k[ce>>2]|0;if(!Tf){vi=Td;wi=Vd;Fd=1383;break A}j0a(Tf);vi=Td;wi=Vd;Fd=1383;break A}Vd=k[Pd>>2]|0;if(Vd)j0a(Vd);Vd=k[ce>>2]|0;if(Vd)j0a(Vd);k[t>>2]=1;k[t+8>>2]=130;k[t+40>>2]=1;Vd=t+48|0;k[Vd>>2]=-1;k[Vd+4>>2]=-1;Vd=t+56|0;ce=t+60|0;Pd=t+72|0;k[Vd>>2]=0;k[Vd+4>>2]=0;k[Vd+8>>2]=0;k[Vd+12>>2]=0;k[Vd+16>>2]=0;x=0;Ta(539,Nd|0,t|0)|0;Vd=x;x=0;if(Vd&1){Vd=Hc()|0;Td=M;Tf=k[Pd>>2]|0;if(Tf)j0a(Tf);Tf=k[ce>>2]|0;if(!Tf){vi=Td;wi=Vd;Fd=1383;break A}j0a(Tf);vi=Td;wi=Vd;Fd=1383;break A}Vd=k[Pd>>2]|0;if(Vd)j0a(Vd);Vd=k[ce>>2]|0;if(Vd)j0a(Vd);k[s>>2]=1;k[s+8>>2]=82;k[s+40>>2]=1;Vd=s+48|0;k[Vd>>2]=-1;k[Vd+4>>2]=-1;Vd=s+56|0;ce=s+60|0;Pd=s+72|0;k[Vd>>2]=0;k[Vd+4>>2]=0;k[Vd+8>>2]=0;k[Vd+12>>2]=0;k[Vd+16>>2]=0;x=0;Ta(539,Nd|0,s|0)|0;Nd=x;x=0;if(Nd&1){Nd=Hc()|0;Vd=M;Td=k[Pd>>2]|0;if(Td)j0a(Td);Td=k[ce>>2]|0;if(!Td){vi=Vd;wi=Nd;Fd=1383;break A}j0a(Td);vi=Vd;wi=Nd;Fd=1383;break A}Nd=k[Pd>>2]|0;if(Nd)j0a(Nd);Nd=k[ce>>2]|0;if(Nd)j0a(Nd);Nd=k[ed>>2]|0;k[q>>2]=1;k[q+8>>2]=128;k[q+40>>2]=1;ce=q+48|0;k[ce>>2]=-1;k[ce+4>>2]=-1;ce=q+56|0;Pd=q+60|0;Vd=q+72|0;Td=Nd+48|0;k[ce>>2]=0;k[ce+4>>2]=0;k[ce+8>>2]=0;k[ce+12>>2]=0;k[ce+16>>2]=0;x=0;Ta(539,Td|0,q|0)|0;ce=x;x=0;if(ce&1){ce=Hc()|0;Nd=M;Tf=k[Vd>>2]|0;if(Tf)j0a(Tf);Tf=k[Pd>>2]|0;if(!Tf){vi=Nd;wi=ce;Fd=1383;break A}j0a(Tf);vi=Nd;wi=ce;Fd=1383;break A}ce=k[Vd>>2]|0;if(ce)j0a(ce);ce=k[Pd>>2]|0;if(ce)j0a(ce);ce=Rd+36|0;Pd=k[ce>>2]|0;x=0;fb(140,p|0,329672,0);Vd=x;x=0;if(Vd&1)break;x=0;pa(57,(Pd|0)!=0|0,p|0,588,285183,276209);Pd=x;x=0;if(Pd&1){Pd=Hc()|0;Vd=M;K2a(p);vi=Vd;wi=Pd;Fd=1383;break A}K2a(p);Pd=k[ce>>2]|0;x=0;Vd=Ba(k[(k[Pd>>2]|0)+32>>2]|0,Pd|0)|0;Pd=x;x=0;if(Pd&1)break;k[o>>2]=2;k[o+8>>2]=Vd;Vd=o+12|0;k[Vd>>2]=k[Xc>>2];k[Vd+4>>2]=k[Xc+4>>2];k[Vd+8>>2]=k[Xc+8>>2];k[Vd+12>>2]=k[Xc+12>>2];k[Vd+16>>2]=k[Xc+16>>2];k[Vd+20>>2]=k[Xc+20>>2];k[Vd+24>>2]=k[Xc+24>>2];k[o+40>>2]=1;Vd=o+48|0;k[Vd>>2]=-1;k[Vd+4>>2]=-1;Vd=o+56|0;Pd=o+60|0;Nd=o+72|0;k[Vd>>2]=0;k[Vd+4>>2]=0;k[Vd+8>>2]=0;k[Vd+12>>2]=0;k[Vd+16>>2]=0;x=0;Ta(539,Td|0,o|0)|0;Td=x;x=0;if(Td&1){Td=Hc()|0;Vd=M;Tf=k[Nd>>2]|0;if(Tf)j0a(Tf);Tf=k[Pd>>2]|0;if(!Tf){vi=Vd;wi=Td;Fd=1383;break A}j0a(Tf);vi=Vd;wi=Td;Fd=1383;break A}Td=k[Nd>>2]|0;if(Td)j0a(Td);Td=k[Pd>>2]|0;if(Td)j0a(Td);Td=k[ed>>2]|0;k[n>>2]=1;k[n+8>>2]=2;k[n+40>>2]=1;Pd=n+48|0;k[Pd>>2]=-1;k[Pd+4>>2]=-1;Pd=n+56|0;Nd=n+60|0;Vd=n+72|0;Tf=Td+48|0;k[Pd>>2]=0;k[Pd+4>>2]=0;k[Pd+8>>2]=0;k[Pd+12>>2]=0;k[Pd+16>>2]=0;x=0;Ta(539,Tf|0,n|0)|0;Pd=x;x=0;if(Pd&1){Pd=Hc()|0;Td=M;nd=k[Vd>>2]|0;if(nd)j0a(nd);nd=k[Nd>>2]|0;if(!nd){vi=Td;wi=Pd;Fd=1383;break A}j0a(nd);vi=Td;wi=Pd;Fd=1383;break A}Pd=k[Vd>>2]|0;if(Pd)j0a(Pd);Pd=k[Nd>>2]|0;if(Pd)j0a(Pd);k[Yc>>2]=32;k[Yc+32>>2]=1;k[m>>2]=2;pe=m+8|0;qe=Yc;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));ae=m+48|0;k[ae>>2]=-1;k[ae+4>>2]=-1;ae=m+56|0;Pd=m+60|0;Nd=m+72|0;k[ae>>2]=0;k[ae+4>>2]=0;k[ae+8>>2]=0;k[ae+12>>2]=0;k[ae+16>>2]=0;x=0;Ta(539,Tf|0,m|0)|0;ae=x;x=0;if(ae&1){ae=Hc()|0;Vd=M;Td=k[Nd>>2]|0;if(Td)j0a(Td);Td=k[Pd>>2]|0;if(!Td){vi=Vd;wi=ae;Fd=1383;break A}j0a(Td);vi=Vd;wi=ae;Fd=1383;break A}ae=k[Nd>>2]|0;if(ae)j0a(ae);ae=k[Pd>>2]|0;if(ae)j0a(ae);k[j>>2]=1;k[j+8>>2]=1;k[j+40>>2]=1;ae=j+48|0;k[ae>>2]=-1;k[ae+4>>2]=-1;ae=j+56|0;Pd=j+60|0;Nd=j+72|0;k[ae>>2]=0;k[ae+4>>2]=0;k[ae+8>>2]=0;k[ae+12>>2]=0;k[ae+16>>2]=0;x=0;Ta(539,Tf|0,j|0)|0;ae=x;x=0;if(ae&1){ae=Hc()|0;Vd=M;Td=k[Nd>>2]|0;if(Td)j0a(Td);Td=k[Pd>>2]|0;if(!Td){vi=Vd;wi=ae;Fd=1383;break A}j0a(Td);vi=Vd;wi=ae;Fd=1383;break A}ae=k[Nd>>2]|0;if(ae)j0a(ae);ae=k[Pd>>2]|0;if(ae)j0a(ae);ae=k[ed>>2]|0;k[h>>2]=1;k[h+8>>2]=130;k[h+40>>2]=1;Pd=h+48|0;k[Pd>>2]=-1;k[Pd+4>>2]=-1;Pd=h+56|0;Nd=h+60|0;Vd=h+72|0;Td=ae+48|0;k[Pd>>2]=0;k[Pd+4>>2]=0;k[Pd+8>>2]=0;k[Pd+12>>2]=0;k[Pd+16>>2]=0;x=0;Ta(539,Td|0,h|0)|0;Pd=x;x=0;if(Pd&1){Pd=Hc()|0;ae=M;nd=k[Vd>>2]|0;if(nd)j0a(nd);nd=k[Nd>>2]|0;if(!nd){vi=ae;wi=Pd;Fd=1383;break A}j0a(nd);vi=ae;wi=Pd;Fd=1383;break A}Pd=k[Vd>>2]|0;if(Pd)j0a(Pd);Pd=k[Nd>>2]|0;if(Pd)j0a(Pd);k[g>>2]=1;k[g+8>>2]=1;k[g+40>>2]=1;Pd=g+48|0;k[Pd>>2]=-1;k[Pd+4>>2]=-1;Pd=g+56|0;Nd=g+60|0;Vd=g+72|0;k[Pd>>2]=0;k[Pd+4>>2]=0;k[Pd+8>>2]=0;k[Pd+12>>2]=0;k[Pd+16>>2]=0;x=0;Ta(539,Td|0,g|0)|0;Td=x;x=0;if(Td&1){Td=Hc()|0;Pd=M;ae=k[Vd>>2]|0;if(ae)j0a(ae);ae=k[Nd>>2]|0;if(!ae){vi=Pd;wi=Td;Fd=1383;break A}j0a(ae);vi=Pd;wi=Td;Fd=1383;break A}Td=k[Vd>>2]|0;if(Td)j0a(Td);Td=k[Nd>>2]|0;if(Td)j0a(Td);k[Zc>>2]=k[ed>>2];x=0;va(1510,Zc|0);Td=x;x=0;if(Td&1)break;Td=k[ed>>2]|0;k[f>>2]=1;k[f+8>>2]=128;k[f+40>>2]=1;Nd=f+48|0;k[Nd>>2]=-1;k[Nd+4>>2]=-1;Nd=f+56|0;Vd=f+60|0;Pd=f+72|0;ae=Td+48|0;k[Nd>>2]=0;k[Nd+4>>2]=0;k[Nd+8>>2]=0;k[Nd+12>>2]=0;k[Nd+16>>2]=0;x=0;Ta(539,ae|0,f|0)|0;Nd=x;x=0;if(Nd&1){Nd=Hc()|0;Td=M;nd=k[Pd>>2]|0;if(nd)j0a(nd);nd=k[Vd>>2]|0;if(!nd){vi=Td;wi=Nd;Fd=1383;break A}j0a(nd);vi=Td;wi=Nd;Fd=1383;break A}Nd=k[Pd>>2]|0;if(Nd)j0a(Nd);Nd=k[Vd>>2]|0;if(Nd)j0a(Nd);k[e>>2]=1;k[e+8>>2]=21;k[e+40>>2]=1;Nd=e+48|0;k[Nd>>2]=-1;k[Nd+4>>2]=-1;Nd=e+56|0;Vd=e+60|0;Pd=e+72|0;k[Nd>>2]=0;k[Nd+4>>2]=0;k[Nd+8>>2]=0;k[Nd+12>>2]=0;k[Nd+16>>2]=0;x=0;Ta(539,ae|0,e|0)|0;ae=x;x=0;if(ae&1){ae=Hc()|0;Nd=M;Td=k[Pd>>2]|0;if(Td)j0a(Td);Td=k[Vd>>2]|0;if(!Td){vi=Nd;wi=ae;Fd=1383;break A}j0a(Td);vi=Nd;wi=ae;Fd=1383;break A}ae=k[Pd>>2]|0;if(ae)j0a(ae);ae=k[Vd>>2]|0;if(ae)j0a(ae);x=0;xa(819,_c|0,k[ed>>2]|0);ae=x;x=0;if(ae&1)break;ae=k[ce>>2]|0;x=0;fb(140,d|0,329672,0);Vd=x;x=0;B:do if(Vd&1)Fd=1384;else{x=0;pa(57,(ae|0)!=0|0,d|0,588,285183,276209);Pd=x;x=0;if(Pd&1){Pd=Hc()|0;Nd=M;K2a(d);xi=Nd;yi=Pd;break}K2a(d);Pd=k[ce>>2]|0;do if(Pd){if(!(iDa(Pd,168,6688,0)|0))break;Nd=k[ed>>2]|0;k[wa>>2]=1;k[wa+8>>2]=129;k[wa+40>>2]=1;Td=wa+48|0;k[Td>>2]=-1;k[Td+4>>2]=-1;Td=wa+56|0;nd=wa+60|0;Xd=wa+72|0;Wd=Nd+48|0;k[Td>>2]=0;k[Td+4>>2]=0;k[Td+8>>2]=0;k[Td+12>>2]=0;k[Td+16>>2]=0;x=0;Ta(539,Wd|0,wa|0)|0;Td=x;x=0;if(Td&1){Td=Hc()|0;Nd=M;Qd=k[Xd>>2]|0;if(Qd)j0a(Qd);Qd=k[nd>>2]|0;if(!Qd){xi=Nd;yi=Td;break B}j0a(Qd);xi=Nd;yi=Td;break B}Td=k[Xd>>2]|0;if(Td)j0a(Td);Td=k[nd>>2]|0;if(Td)j0a(Td);k[$c>>2]=32;k[$c+32>>2]=1;k[ya>>2]=2;pe=ya+8|0;qe=$c;re=pe+40|0;do{k[pe>>2]=k[qe>>2];pe=pe+4|0;qe=qe+4|0}while((pe|0)<(re|0));Td=ya+48|0;k[Td>>2]=-1;k[Td+4>>2]=-1;Td=ya+56|0;nd=ya+60|0;Xd=ya+72|0;k[Td>>2]=0;k[Td+4>>2]=0;k[Td+8>>2]=0;k[Td+12>>2]=0;k[Td+16>>2]=0;x=0;Ta(539,Wd|0,ya|0)|0;Td=x;x=0;if(Td&1){Td=Hc()|0;Nd=M;Qd=k[Xd>>2]|0;if(Qd)j0a(Qd);Qd=k[nd>>2]|0;if(!Qd){xi=Nd;yi=Td;break B}j0a(Qd);xi=Nd;yi=Td;break B}Td=k[Xd>>2]|0;if(Td)j0a(Td);Td=k[nd>>2]|0;if(Td)j0a(Td);k[za>>2]=1;k[za+8>>2]=1;k[za+40>>2]=1;Td=za+48|0;k[Td>>2]=-1;k[Td+4>>2]=-1;Td=za+56|0;nd=za+60|0;Xd=za+72|0;k[Td>>2]=0;k[Td+4>>2]=0;k[Td+8>>2]=0;k[Td+12>>2]=0;k[Td+16>>2]=0;x=0;Ta(539,Wd|0,za|0)|0;Td=x;x=0;if(Td&1){Td=Hc()|0;Nd=M;Qd=k[Xd>>2]|0;if(Qd)j0a(Qd);Qd=k[nd>>2]|0;if(!Qd){xi=Nd;yi=Td;break B}j0a(Qd);xi=Nd;yi=Td;break B}Td=k[Xd>>2]|0;if(Td)j0a(Td);Td=k[nd>>2]|0;if(Td)j0a(Td);k[ad>>2]=k[ed>>2];x=0;xa(856,ad|0,Rd|0);Td=x;x=0;if(Td&1){Fd=1384;break B}}while(0);x=0;Ta(539,(k[ed>>2]|0)+48|0,_c|0)|0;Pd=x;x=0;if(Pd&1){Fd=1384;break}Pd=k[ed>>2]|0;k[Aa>>2]=1;k[Aa+8>>2]=80;k[Aa+40>>2]=1;Td=Aa+48|0;k[Td>>2]=-1;k[Td+4>>2]=-1;Td=Aa+56|0;nd=Aa+60|0;Xd=Aa+72|0;k[Td>>2]=0;k[Td+4>>2]=0;k[Td+8>>2]=0;k[Td+12>>2]=0;k[Td+16>>2]=0;x=0;Ta(539,Pd+48|0,Aa|0)|0;Pd=x;x=0;if(Pd&1){Pd=Hc()|0;Td=M;Nd=k[Xd>>2]|0;if(Nd)j0a(Nd);Nd=k[nd>>2]|0;if(!Nd){xi=Td;yi=Pd;break}j0a(Nd);xi=Td;yi=Pd;break}Pd=k[Xd>>2]|0;if(Pd)j0a(Pd);Pd=k[nd>>2]|0;if(Pd)j0a(Pd);Pd=k[_c+72>>2]|0;if(Pd)j0a(Pd);Pd=k[_c+60>>2]|0;if(Pd)j0a(Pd);Pd=k[Wc+72>>2]|0;if(Pd)j0a(Pd);Pd=k[Wc+60>>2]|0;if(Pd)j0a(Pd);break f}while(0);if((Fd|0)==1384){ce=Hc()|0;xi=M;yi=ce}ce=k[_c+72>>2]|0;if(ce)j0a(ce);ce=k[_c+60>>2]|0;if(!ce){zi=yi;Ai=xi;break A}j0a(ce);zi=yi;Ai=xi;break A}while(0);Sf=Hc()|0;vi=M;wi=Sf;Fd=1383}while(0);if((Fd|0)==1383){zi=wi;Ai=vi}Rd=k[Wc+72>>2]|0;if(Rd)j0a(Rd);Rd=k[Wc+60>>2]|0;if(!Rd){ie=zi;je=Ai;break e}j0a(Rd);ie=zi;je=Ai;break e;break}default:{pe=bd;re=pe+36|0;do{k[pe>>2]=0;pe=pe+4|0}while((pe|0)<(re|0));Rd=bd+20|0;yd=bd+24|0;k[yd>>2]=0;k[bd+28>>2]=0;k[bd+32>>2]=0;k[bd+36>>2]=-1;jd=bd+4|0;k[jd>>2]=20980;Sd=jd+-4|0;k[Sd>>2]=21008;Sf=jd+16|0;k[Sf>>2]=21032;ce=bd+8|0;k[ce>>2]=0;k[ce+4>>2]=0;k[ce+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[bd+4>>2]=20924;k[bd>>2]=20888;k[Rd>>2]=20948;x=0;fb(140,dd|0,271714,22);ae=x;x=0;if(ae&1){ae=Hc()|0;Bi=ae;Ci=M}else{k[cd>>2]=21048;ae=cd+4|0;x=0;xa(604,ae|0,dd|0);Vd=x;x=0;if(Vd&1){Vd=Hc()|0;Di=Vd;Ei=M}else{x=0;Vd=Ta(494,bd|0,cd|0)|0;Tf=x;x=0;if(!(Tf&1)){x=0;nb(87,Vd|0,271452,269817,818);x=0}Vd=Hc()|0;Tf=M;k[cd>>2]=21048;K2a(ae);Di=Vd;Ei=Tf}K2a(dd);Bi=Di;Ci=Ei}k[jd>>2]=20980;k[Sd>>2]=21008;k[Sf>>2]=21032;K2a(ce);k[Rd>>2]=20796;Rd=k[yd>>2]|0;do if(Rd){x=0;ce=Ba(k[(k[Rd>>2]|0)+16>>2]|0,Rd|0)|0;Sf=x;x=0;if(Sf&1){Sf=Hc(0)|0;Fg(Sf)}if(!ce)break;k[yd>>2]=0}while(0);ie=Bi;je=Ci;break e}}while(0)}while(0);hd=k[Ya>>2]|0;if(hd){Od=k[qd>>2]|0;if((Od|0)==(hd|0))Fi=hd;else{td=Od;while(1){Od=td+-8|0;k[qd>>2]=Od;md=k[td+-4>>2]|0;if(!md)Gi=Od;else{j0a(md);Gi=k[qd>>2]|0}if((Gi|0)==(hd|0))break;else td=Gi}Fi=k[Ya>>2]|0}OBa(Fi)}td=k[Wa>>2]|0;if(td){hd=Wa+4|0;md=k[hd>>2]|0;if((md|0)==(td|0))Hi=td;else{Od=md;while(1){md=Od+-8|0;k[hd>>2]=md;yd=k[Od+-4>>2]|0;if(!yd)Ii=md;else{j0a(yd);Ii=k[hd>>2]|0}if((Ii|0)==(td|0))break;else Od=Ii}Hi=k[Wa>>2]|0}OBa(Hi)}Od=k[Va>>2]|0;if(Od){td=Va+4|0;hd=k[td>>2]|0;if((hd|0)==(Od|0))Ji=Od;else{yd=hd;while(1){hd=yd+-8|0;k[td>>2]=hd;md=k[yd+-4>>2]|0;if(!md)Ki=hd;else{j0a(md);Ki=k[td>>2]|0}if((Ki|0)==(Od|0))break;else yd=Ki}Ji=k[Va>>2]|0}OBa(Ji)}if(!Hd){oy(Ma);r=c;return 0}j0a(Hd);oy(Ma);r=c;return 0}}while(0);if((Fd|0)==69){kd=Hc()|0;se=M;te=kd;Fd=70}if((Fd|0)==70){ie=te;je=se}kd=k[Ya>>2]|0;if(!kd){Id=ie;Jd=je}else{sd=k[qd>>2]|0;if((sd|0)==(kd|0))Li=kd;else{yd=sd;while(1){sd=yd+-8|0;k[qd>>2]=sd;Od=k[yd+-4>>2]|0;if(!Od)Mi=sd;else{j0a(Od);Mi=k[qd>>2]|0}if((Mi|0)==(kd|0))break;else yd=Mi}Li=k[Ya>>2]|0}OBa(Li);Id=ie;Jd=je}}yd=k[Wa>>2]|0;if(!yd){Ni=Id;Oi=Jd}else{kd=Wa+4|0;qd=k[kd>>2]|0;if((qd|0)==(yd|0))Pi=yd;else{Od=qd;while(1){qd=Od+-8|0;k[kd>>2]=qd;sd=k[Od+-4>>2]|0;if(!sd)Qi=qd;else{j0a(sd);Qi=k[kd>>2]|0}if((Qi|0)==(yd|0))break;else Od=Qi}Pi=k[Wa>>2]|0}OBa(Pi);Ni=Id;Oi=Jd}}else{Od=Hc()|0;Ni=Od;Oi=M}Od=k[Va>>2]|0;if(!Od){Ri=Ni;Si=Oi;Ti=Hd}else{yd=Va+4|0;kd=k[yd>>2]|0;if((kd|0)==(Od|0))Ui=Od;else{sd=kd;while(1){kd=sd+-8|0;k[yd>>2]=kd;qd=k[sd+-4>>2]|0;if(!qd)Vi=kd;else{j0a(qd);Vi=k[yd>>2]|0}if((Vi|0)==(Od|0))break;else sd=Vi}Ui=k[Va>>2]|0}OBa(Ui);Ri=Ni;Si=Oi;Ti=Hd}}else{Ed=Hd;Fd=47}}else{Ed=0;Fd=47}while(0);if((Fd|0)==47){ld=Hc()|0;Ri=ld;Si=M;Ti=Ed}if(!Ti){vd=Ri;wd=Si;oy(Ma);Sc(vd|0)}j0a(Ti);vd=Ri;wd=Si;oy(Ma);Sc(vd|0)}while(0);Si=Hc()|0;vd=Si;wd=M;oy(Ma);Sc(vd|0);return 0}function dna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0;d=r;r=r+4080|0;e=d+3480|0;f=d+3400|0;g=d+4060|0;h=d+3320|0;j=d+3240|0;m=d+3160|0;n=d+3080|0;o=d+3e3|0;p=d+2920|0;q=d+4048|0;s=d+2840|0;t=d+2760|0;u=d+2680|0;v=d+2600|0;w=d+4036|0;y=d+2520|0;z=d+4024|0;A=d+2440|0;B=d+2360|0;C=d+2280|0;D=d+2200|0;E=d+2120|0;F=d+2040|0;G=d+1960|0;H=d+1880|0;I=d+1800|0;J=d+1720|0;K=d+1640|0;L=d+1560|0;N=d+1480|0;O=d+4012|0;P=d+1400|0;Q=d+1320|0;R=d+1240|0;S=d+1160|0;T=d+1080|0;U=d+1e3|0;V=d+920|0;W=d+840|0;X=d+760|0;Y=d+4e3|0;Z=d+680|0;_=d+600|0;$=d+520|0;aa=d+440|0;ba=d+3988|0;ca=d+3964|0;da=d+3944|0;ea=d+3936|0;fa=d+3928|0;ga=d+3912|0;ha=d+3976|0;ia=d+3952|0;ja=d+3904|0;ka=d+3896|0;la=d+3864|0;ma=d+3856|0;na=d+3848|0;oa=d+3840|0;qa=d+3824|0;ra=d+3820|0;sa=d+360|0;ta=d+320|0;ua=d+3816|0;wa=d+280|0;ya=d+3812|0;za=d+3784|0;Aa=d+3780|0;Ca=d+3776|0;Da=d+3744|0;Ea=d+3736|0;Ga=d+3708|0;Ha=d+3704|0;Ia=d+240|0;Ja=d+3692|0;Ka=d+200|0;Ma=d+120|0;Na=d+400|0;Oa=d+40|0;Pa=d+3688|0;Qa=d+3684|0;Ra=d+3680|0;Sa=d+3648|0;Ua=d+3640|0;Va=d+3608|0;Wa=d+3576|0;Xa=d;Ya=d+3572|0;Za=d+3568|0;_a=d+3564|0;$a=d+3560|0;ab=b+76|0;if(!(i[ab>>0]|0)){bb=(k[c+4>>2]|0)-(k[c>>2]|0)|0;gaa(ba,b);cb=1;db=(bb|0)==((k[ba+4>>2]|0)-(k[ba>>2]|0)|0)}else{cb=0;db=1}x=0;fb(140,ca|0,329672,0);bb=x;x=0;do if(bb&1){eb=Hc()|0;gb=eb;hb=M}else{x=0;pa(57,db|0,ca|0,1396,269817,271737);eb=x;x=0;if(eb&1){eb=Hc()|0;ib=M;K2a(ca);gb=eb;hb=ib;break}K2a(ca);if(cb?(ib=k[ba>>2]|0,(ib|0)!=0):0){eb=ba+4|0;jb=k[eb>>2]|0;if((jb|0)==(ib|0))kb=ib;else{lb=jb;while(1){jb=lb+-8|0;k[eb>>2]=jb;mb=k[lb+-4>>2]|0;if(!mb)ob=jb;else{j0a(mb);ob=k[eb>>2]|0}if((ob|0)==(ib|0))break;else lb=ob}kb=k[ba>>2]|0}OBa(kb)}lb=b+79|0;do if(!(i[lb>>0]|0))pb=0;else{iaa(da,b);ib=k[da>>2]|0;x=0;eb=Ba(k[(k[ib>>2]|0)+60>>2]|0,ib|0)|0;ib=x;x=0;if(!(ib&1)){ib=k[da+4>>2]|0;if(!ib){pb=eb;break}j0a(ib);pb=eb;break}eb=Hc()|0;ib=M;mb=k[da+4>>2]|0;if(!mb){qb=eb;rb=ib;Sc(qb|0)}j0a(mb);qb=eb;rb=ib;Sc(qb|0)}while(0);ib=b+77|0;eb=b+78|0;mb=(l[eb>>0]|0)+(l[ib>>0]|0)|0;jb=a+8|0;sb=k[jb>>2]|0;tb=uma(sb,pb+1+mb+((raa(b)|0)&1^1)|0)|0;sb=uma(k[jb>>2]|0,mb)|0;ub=uma(k[jb>>2]|0,1)|0;do if(i[lb>>0]|0){k[ea>>2]=k[jb>>2];iaa(fa,b);vb=k[fa>>2]|0;x=0;wb=Ba(k[(k[vb>>2]|0)+60>>2]|0,vb|0)|0;vb=x;x=0;if(!(vb&1)?(x=0,fb(334,ea|0,mb|0,wb|0),wb=x,x=0,!(wb&1)):0){wb=k[fa+4>>2]|0;if(!wb)break;j0a(wb);break}wb=Hc()|0;vb=M;xb=k[fa+4>>2]|0;if(!xb){qb=wb;rb=vb;Sc(qb|0)}j0a(xb);qb=wb;rb=vb;Sc(qb|0)}while(0);vb=b+72|0;wb=k[vb>>2]|0;xb=(wb&-2|0)==4;yb=(wb|0)==5|(wb|0)==2;zb=(wb|0)==6|(wb|0)==3;a:do if(!xb?(Ab=k[b+36>>2]|0,Bb=k[b+40>>2]|0,(Ab|0)!=(Bb|0)):0){Cb=Ab;Ab=0;while(1){Db=k[Cb>>2]|0;Eb=(Vf[k[(k[Db>>2]|0)+36>>2]&1023](Db)|0)^1;q2a(ga,271903,49);x=0;pa(57,Eb|0,ga|0,1428,269817,271737);Eb=x;x=0;if(Eb&1)break;K2a(ga);Eb=k[Cb>>2]|0;Db=(cg[k[(k[Eb>>2]|0)+28>>2]&1023](Eb,1)|0)+Ab|0;Cb=Cb+8|0;if((Cb|0)==(Bb|0)){Fb=Db;break a}else Ab=Db}Ab=Hc()|0;Bb=M;K2a(ga);qb=Ab;rb=Bb;Sc(qb|0)}else Fb=0;while(0);k[ha>>2]=0;Bb=ha+4|0;k[Bb>>2]=0;k[ha+8>>2]=0;x=0;xa(591,ia|0,b|0);Ab=x;x=0;if(!(Ab&1)){b:do if((wb+-4|0)>>>0<3?(Ab=k[c>>2]|0,(Ab|0)!=(k[c+4>>2]|0)):0){Cb=k[Ab>>2]|0;x=0;Ab=Ba(k[(k[Cb>>2]|0)+16>>2]|0,Cb|0)|0;Cb=x;x=0;if(!(Cb&1)?(Cb=k[Ab+4>>2]|0,x=0,xa(k[(k[Cb>>2]|0)+64>>2]|0,ja|0,Cb|0),Cb=x,x=0,!(Cb&1)):0){Cb=k[ja>>2]|0;x=0;Ab=Ta(k[(k[Cb>>2]|0)+28>>2]|0,Cb|0,0)|0;Cb=x;x=0;if(Cb&1){Cb=Hc()|0;Db=M;Eb=k[ja+4>>2]|0;if(!Eb){Gb=Cb;Hb=Db;break}j0a(Eb);Gb=Cb;Hb=Db;break}Db=k[10453]|0;Cb=(Ab|0)==(Db|0);Ab=k[ja+4>>2]|0;if(!Ab){if(!Cb){Ib=0;Jb=sb;Kb=ub;Lb=74;break}}else{j0a(Ab);if(!Cb){Ib=0;Jb=sb;Kb=ub;Lb=74;break}}Cb=k[k[c>>2]>>2]|0;x=0;xa(k[(k[Cb>>2]|0)+12>>2]|0,Cb|0,a|0);Cb=x;x=0;if((!(Cb&1)?(k[ka>>2]=k[jb>>2],Cb=k[k[c>>2]>>2]|0,x=0,Ab=Ba(k[(k[Cb>>2]|0)+16>>2]|0,Cb|0)|0,Cb=x,x=0,!(Cb&1)):0)?(Cb=k[Ab+4>>2]|0,x=0,fb(247,la|0,Db<<3|0,0),Db=x,x=0,!(Db&1)):0){x=0;nb(137,ka|0,Cb|0,la|0,1);Cb=x;x=0;if(Cb&1){Cb=Hc()|0;Db=M;k[la>>2]=20456;xh(la+12|0,k[la+16>>2]|0);Ab=k[la+8>>2]|0;if(!Ab){Gb=Cb;Hb=Db;break}k0a(Ab);Gb=Cb;Hb=Db;break}k[la>>2]=20456;xh(la+12|0,k[la+16>>2]|0);Db=k[la+8>>2]|0;if(Db)k0a(Db);c:do if(mb){Db=0;while(1){Cb=k[jb>>2]|0;Ab=mb-Db|0;x=0;fb(140,Y|0,296239,35);Eb=x;x=0;if(Eb&1){Lb=62;break}x=0;pa(51,(Ab+-1|0)>>>0<16|0,Y|0,217,295981,296275);Eb=x;x=0;if(Eb&1){Lb=71;break}K2a(Y);x=0;Ta(594,Cb|0,Ab+143&255|0)|0;Ab=x;x=0;if(Ab&1){Lb=62;break}Db=Db+1|0;if(mb>>>0<=Db>>>0)break c}if((Lb|0)==62){Db=Hc()|0;Mb=M;Nb=Db;Lb=64;break b}else if((Lb|0)==71){Db=Hc()|0;Ab=M;K2a(Y);Mb=Ab;Nb=Db;Lb=64;break b}}while(0);Ib=1;Jb=sb+1|0;Kb=ub+1|0;Lb=74}else Lb=63}else Lb=63}else{Ib=0;Jb=sb;Kb=ub;Lb=74}while(0);d:do if((Lb|0)==74){do if(i[lb>>0]|0){x=0;xa(751,ma|0,b|0);ub=x;x=0;if(ub&1){Lb=63;break d}ub=k[Bb>>2]|0;do if(ub>>>0>=(k[ha+8>>2]|0)>>>0){x=0;xa(745,ha|0,ma|0);sb=x;x=0;if(sb&1){sb=Hc()|0;Db=M;Ab=k[ma+4>>2]|0;if(!Ab){Gb=sb;Hb=Db;break d}j0a(Ab);Gb=sb;Hb=Db;break d}else{Db=k[ma+4>>2]|0;if(!Db)break;j0a(Db);break}}else{k[ub>>2]=k[ma>>2];Db=ma+4|0;k[ub+4>>2]=k[Db>>2];k[ma>>2]=0;k[Db>>2]=0;k[Bb>>2]=ub+8}while(0);k[na>>2]=k[ia>>2];x=0;xa(751,oa|0,b|0);ub=x;x=0;if(ub&1){Lb=63;break d}x=0;k[e>>2]=k[na>>2];Fa(143,ia|0,e|0,oa|0)|0;ub=x;x=0;if(ub&1){ub=Hc()|0;Db=M;sb=k[oa+4>>2]|0;if(!sb){Gb=ub;Hb=Db;break d}j0a(sb);Gb=ub;Hb=Db;break d}else{Db=k[oa+4>>2]|0;if(!Db)break;j0a(Db);break}}while(0);Db=Ib&1;ub=c+4|0;sb=k[c>>2]|0;e:do if(Db>>>0<(k[ub>>2]|0)-sb>>3>>>0){Ab=ha+8|0;Cb=sb;Eb=Db;while(1){Ob=k[Cb+(Eb<<3)>>2]|0;x=0;xa(k[(k[Ob>>2]|0)+12>>2]|0,Ob|0,a|0);Ob=x;x=0;if(Ob&1)break;Ob=k[(k[c>>2]|0)+(Eb<<3)>>2]|0;x=0;Pb=Ba(k[(k[Ob>>2]|0)+16>>2]|0,Ob|0)|0;Ob=x;x=0;if(Ob&1)break;Ob=Pb+4|0;Qb=k[Bb>>2]|0;if((Qb|0)==(k[Ab>>2]|0)){x=0;xa(743,ha|0,Ob|0);Rb=x;x=0;if(Rb&1)break}else{k[Qb>>2]=k[Ob>>2];Ob=k[Pb+8>>2]|0;k[Qb+4>>2]=Ob;if(!Ob)Sb=Qb;else{h0a(Ob);Sb=k[Bb>>2]|0}k[Bb>>2]=Sb+8}Eb=Eb+1|0;Cb=k[c>>2]|0;if(Eb>>>0>=(k[ub>>2]|0)-Cb>>3>>>0)break e}Cb=Hc()|0;Mb=M;Nb=Cb;Lb=64;break d}while(0);ub=(wb|0)==11;if(ub){x=0;fb(140,qa|0,329672,0);Db=x;x=0;if(Db&1){Lb=63;break}x=0;pa(57,(Fb+-1|0)>>>0<32|0,qa|0,1472,269817,271737);Db=x;x=0;if(Db&1){Db=Hc()|0;sb=M;K2a(qa);Gb=Db;Hb=sb;break}K2a(qa);k[ra>>2]=k[jb>>2];x=0;va(1508,ra|0);sb=x;x=0;if(sb&1){Lb=63;break}sb=k[jb>>2]|0;k[X>>2]=1;k[X+8>>2]=128;k[X+40>>2]=1;Db=X+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=X+56|0;Cb=X+60|0;Eb=X+72|0;Ab=sb+48|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Ab|0,X|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;sb=M;Ob=k[Eb>>2]|0;if(Ob)j0a(Ob);Ob=k[Cb>>2]|0;if(!Ob){Mb=sb;Nb=Db;Lb=64;break}j0a(Ob);Mb=sb;Nb=Db;Lb=64;break}Db=k[Eb>>2]|0;if(Db)j0a(Db);Db=k[Cb>>2]|0;if(Db)j0a(Db);k[sa>>2]=0;k[sa+32>>2]=1;k[W>>2]=2;Tb=W+8|0;Ub=sa;Vb=Tb+40|0;do{k[Tb>>2]=k[Ub>>2];Tb=Tb+4|0;Ub=Ub+4|0}while((Tb|0)<(Vb|0));Db=W+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=W+56|0;Cb=W+60|0;Eb=W+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Ab|0,W|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;sb=M;Ob=k[Eb>>2]|0;if(Ob)j0a(Ob);Ob=k[Cb>>2]|0;if(!Ob){Mb=sb;Nb=Db;Lb=64;break}j0a(Ob);Mb=sb;Nb=Db;Lb=64;break}Db=k[Eb>>2]|0;if(Db)j0a(Db);Db=k[Cb>>2]|0;if(Db)j0a(Db);k[V>>2]=1;k[V+8>>2]=82;k[V+40>>2]=1;Db=V+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=V+56|0;Cb=V+60|0;Eb=V+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Ab|0,V|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;sb=M;Ob=k[Eb>>2]|0;if(Ob)j0a(Ob);Ob=k[Cb>>2]|0;if(!Ob){Mb=sb;Nb=Db;Lb=64;break}j0a(Ob);Mb=sb;Nb=Db;Lb=64;break}Db=k[Eb>>2]|0;if(Db)j0a(Db);Db=k[Cb>>2]|0;if(Db)j0a(Db);Db=k[jb>>2]|0;k[ta>>2]=32;k[ta+32>>2]=1;Cb=Db+48|0;k[U>>2]=2;Tb=U+8|0;Ub=ta;Vb=Tb+40|0;do{k[Tb>>2]=k[Ub>>2];Tb=Tb+4|0;Ub=Ub+4|0}while((Tb|0)<(Vb|0));Ab=U+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=U+56|0;Db=U+60|0;Eb=U+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Cb|0,U|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;sb=M;Ob=k[Eb>>2]|0;if(Ob)j0a(Ob);Ob=k[Db>>2]|0;if(!Ob){Mb=sb;Nb=Ab;Lb=64;break}j0a(Ob);Mb=sb;Nb=Ab;Lb=64;break}Ab=k[Eb>>2]|0;if(Ab)j0a(Ab);Ab=k[Db>>2]|0;if(Ab)j0a(Ab);k[T>>2]=1;k[T+8>>2]=1;k[T+40>>2]=1;Ab=T+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=T+56|0;Db=T+60|0;Eb=T+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Cb|0,T|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;sb=M;Ob=k[Eb>>2]|0;if(Ob)j0a(Ob);Ob=k[Db>>2]|0;if(!Ob){Mb=sb;Nb=Ab;Lb=64;break}j0a(Ob);Mb=sb;Nb=Ab;Lb=64;break}Ab=k[Eb>>2]|0;if(Ab)j0a(Ab);Ab=k[Db>>2]|0;if(Ab)j0a(Ab);k[ua>>2]=k[jb>>2];x=0;va(1510,ua|0);Ab=x;x=0;if(Ab&1){Lb=63;break}}if((Fb|0)!=0&(i[ib>>0]|0)==0){Ab=k[jb>>2]|0;k[wa>>2]=0;k[wa+32>>2]=1;Db=Ab+48|0;k[S>>2]=2;Tb=S+8|0;Ub=wa;Vb=Tb+40|0;do{k[Tb>>2]=k[Ub>>2];Tb=Tb+4|0;Ub=Ub+4|0}while((Tb|0)<(Vb|0));Cb=S+48|0;k[Cb>>2]=-1;k[Cb+4>>2]=-1;Cb=S+56|0;Ab=S+60|0;Eb=S+72|0;k[Cb>>2]=0;k[Cb+4>>2]=0;k[Cb+8>>2]=0;k[Cb+12>>2]=0;k[Cb+16>>2]=0;x=0;Ta(539,Db|0,S|0)|0;Cb=x;x=0;if(Cb&1){Cb=Hc()|0;sb=M;Ob=k[Eb>>2]|0;if(Ob)j0a(Ob);Ob=k[Ab>>2]|0;if(!Ob){Mb=sb;Nb=Cb;Lb=64;break}j0a(Ob);Mb=sb;Nb=Cb;Lb=64;break}Cb=k[Eb>>2]|0;if(Cb)j0a(Cb);Cb=k[Ab>>2]|0;if(Cb)j0a(Cb);k[ya>>2]=k[jb>>2];x=0;va(1508,ya|0);Cb=x;x=0;if(Cb&1){Lb=63;break}Cb=(k[jb>>2]|0)+48|0;k[R>>2]=2;k[R+8>>2]=Fb;Ab=R+12|0;k[Ab>>2]=k[za>>2];k[Ab+4>>2]=k[za+4>>2];k[Ab+8>>2]=k[za+8>>2];k[Ab+12>>2]=k[za+12>>2];k[Ab+16>>2]=k[za+16>>2];k[Ab+20>>2]=k[za+20>>2];k[Ab+24>>2]=k[za+24>>2];k[R+40>>2]=1;Ab=R+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=R+56|0;Eb=R+60|0;sb=R+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Cb|0,R|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ob=M;Qb=k[sb>>2]|0;if(Qb)j0a(Qb);Qb=k[Eb>>2]|0;if(!Qb){Mb=Ob;Nb=Ab;Lb=64;break}j0a(Qb);Mb=Ob;Nb=Ab;Lb=64;break}Ab=k[sb>>2]|0;if(Ab)j0a(Ab);Ab=k[Eb>>2]|0;if(Ab)j0a(Ab);k[Q>>2]=1;k[Q+8>>2]=1;k[Q+40>>2]=1;Ab=Q+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=Q+56|0;Eb=Q+60|0;sb=Q+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Cb|0,Q|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ob=M;Qb=k[sb>>2]|0;if(Qb)j0a(Qb);Qb=k[Eb>>2]|0;if(!Qb){Mb=Ob;Nb=Ab;Lb=64;break}j0a(Qb);Mb=Ob;Nb=Ab;Lb=64;break}Ab=k[sb>>2]|0;if(Ab)j0a(Ab);Ab=k[Eb>>2]|0;if(Ab)j0a(Ab);k[P>>2]=1;k[P+8>>2]=82;k[P+40>>2]=1;Ab=P+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=P+56|0;Eb=P+60|0;sb=P+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Cb|0,P|0)|0;Cb=x;x=0;if(Cb&1){Cb=Hc()|0;Ab=M;Ob=k[sb>>2]|0;if(Ob)j0a(Ob);Ob=k[Eb>>2]|0;if(!Ob){Mb=Ab;Nb=Cb;Lb=64;break}j0a(Ob);Mb=Ab;Nb=Cb;Lb=64;break}Cb=k[sb>>2]|0;if(Cb)j0a(Cb);Cb=k[Eb>>2]|0;if(Cb)j0a(Cb);Wb=jb}else Wb=jb;k[Aa>>2]=k[Wb>>2];x=0;va(1508,Aa|0);Cb=x;x=0;if(!(Cb&1)?(x=0,Cb=Ba(608,b|0)|0,Eb=x,x=0,!(Eb&1)):0){do if(Ib|Cb^1){Eb=k[jb>>2]|0;x=0;sb=Ba(607,ha|0)|0;Ab=x;x=0;if(Ab&1){Lb=63;break d}Ab=mb+2+sb|0;x=0;fb(140,O|0,295946,34);sb=x;x=0;if(sb&1){Lb=63;break d}x=0;pa(51,(Ab+-1|0)>>>0<16|0,O|0,210,295981,296025);sb=x;x=0;if(sb&1){sb=Hc()|0;Ob=M;K2a(O);Mb=Ob;Nb=sb;Lb=64;break d}K2a(O);x=0;Ta(594,Eb|0,Ab+127&255|0)|0;Ab=x;x=0;if(Ab&1){Lb=63;break d}k[Ca>>2]=k[Wb>>2];x=0;fb(247,Da|0,k[10453]<<3|0,0);Ab=x;x=0;if(Ab&1){Lb=63;break d}x=0;fb(320,Ca|0,Da|0,0);Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Eb=M;k[Da>>2]=20456;xh(Da+12|0,k[Da+16>>2]|0);sb=k[Da+8>>2]|0;if(!sb){Gb=Ab;Hb=Eb;break d}k0a(sb);Gb=Ab;Hb=Eb;break d}else{k[Da>>2]=20456;xh(Da+12|0,k[Da+16>>2]|0);Eb=k[Da+8>>2]|0;if(!Eb)break;k0a(Eb);break}}while(0);k[Ea>>2]=k[Wb>>2];Cb=(k[vb>>2]|0)+-9|0;if(Cb>>>0<5)Xb=(6>>>(Cb&31)&1)!=0;else Xb=1;x=0;La(59,Ea|0,ha|0,ia|0,Xb|0,(i[ab>>0]|0)!=0|0,yb|zb|0);Cb=x;x=0;if(Cb&1){Lb=63;break}Cb=(k[jb>>2]|0)+48|0;k[N>>2]=2;k[N+8>>2]=Fb;Db=N+12|0;k[Db>>2]=k[Ga>>2];k[Db+4>>2]=k[Ga+4>>2];k[Db+8>>2]=k[Ga+8>>2];k[Db+12>>2]=k[Ga+12>>2];k[Db+16>>2]=k[Ga+16>>2];k[Db+20>>2]=k[Ga+20>>2];k[Db+24>>2]=k[Ga+24>>2];k[N+40>>2]=1;Db=N+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=N+56|0;Eb=N+60|0;Ab=N+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Cb|0,N|0)|0;Cb=x;x=0;if(Cb&1){Cb=Hc()|0;Db=M;sb=k[Ab>>2]|0;if(sb)j0a(sb);sb=k[Eb>>2]|0;if(!sb){Mb=Db;Nb=Cb;Lb=64;break}j0a(sb);Mb=Db;Nb=Cb;Lb=64;break}Cb=k[Ab>>2]|0;if(Cb)j0a(Cb);Cb=k[Eb>>2]|0;if(Cb)j0a(Cb);k[Ha>>2]=k[Wb>>2];x=0;va(1508,Ha|0);Cb=x;x=0;if(Cb&1){Lb=63;break}Cb=k[jb>>2]|0;if(ub){k[Ia>>2]=32;k[Ia+32>>2]=1;Eb=Cb+48|0;k[L>>2]=2;Tb=L+8|0;Ub=Ia;Vb=Tb+40|0;do{k[Tb>>2]=k[Ub>>2];Tb=Tb+4|0;Ub=Ub+4|0}while((Tb|0)<(Vb|0));Ab=L+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=L+56|0;Db=L+60|0;sb=L+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Eb|0,L|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ob=M;Qb=k[sb>>2]|0;if(Qb)j0a(Qb);Qb=k[Db>>2]|0;if(!Qb){Mb=Ob;Nb=Ab;Lb=64;break}j0a(Qb);Mb=Ob;Nb=Ab;Lb=64;break}Ab=k[sb>>2]|0;if(Ab)j0a(Ab);Ab=k[Db>>2]|0;if(Ab)j0a(Ab);k[K>>2]=1;k[K+8>>2]=129;k[K+40>>2]=1;Ab=K+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=K+56|0;Db=K+60|0;sb=K+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Eb|0,K|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ob=M;Qb=k[sb>>2]|0;if(Qb)j0a(Qb);Qb=k[Db>>2]|0;if(!Qb){Mb=Ob;Nb=Ab;Lb=64;break}j0a(Qb);Mb=Ob;Nb=Ab;Lb=64;break}Ab=k[sb>>2]|0;if(Ab)j0a(Ab);Ab=k[Db>>2]|0;if(Ab)j0a(Ab);k[J>>2]=1;k[J+8>>2]=3;k[J+40>>2]=1;Ab=J+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=J+56|0;Db=J+60|0;sb=J+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Eb|0,J|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ob=M;Qb=k[sb>>2]|0;if(Qb)j0a(Qb);Qb=k[Db>>2]|0;if(!Qb){Mb=Ob;Nb=Ab;Lb=64;break}j0a(Qb);Mb=Ob;Nb=Ab;Lb=64;break}Ab=k[sb>>2]|0;if(Ab)j0a(Ab);Ab=k[Db>>2]|0;if(Ab)j0a(Ab);k[I>>2]=1;k[I+8>>2]=144;k[I+40>>2]=1;Ab=I+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=I+56|0;Db=I+60|0;sb=I+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Eb|0,I|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Ob=M;Qb=k[sb>>2]|0;if(Qb)j0a(Qb);Qb=k[Db>>2]|0;if(!Qb){Mb=Ob;Nb=Ab;Lb=64;break}j0a(Qb);Mb=Ob;Nb=Ab;Lb=64;break}Ab=k[sb>>2]|0;if(Ab)j0a(Ab);Ab=k[Db>>2]|0;if(Ab)j0a(Ab);Ab=k[jb>>2]|0;k[H>>2]=1;k[H+8>>2]=128;k[H+40>>2]=1;Db=H+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=H+56|0;sb=H+60|0;Ob=H+72|0;Qb=Ab+48|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Qb|0,H|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;Ab=M;Pb=k[Ob>>2]|0;if(Pb)j0a(Pb);Pb=k[sb>>2]|0;if(!Pb){Mb=Ab;Nb=Db;Lb=64;break}j0a(Pb);Mb=Ab;Nb=Db;Lb=64;break}Db=k[Ob>>2]|0;if(Db)j0a(Db);Db=k[sb>>2]|0;if(Db)j0a(Db);k[G>>2]=1;k[G+8>>2]=132;k[G+40>>2]=1;Db=G+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=G+56|0;sb=G+60|0;Ob=G+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Qb|0,G|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;Ab=M;Pb=k[Ob>>2]|0;if(Pb)j0a(Pb);Pb=k[sb>>2]|0;if(!Pb){Mb=Ab;Nb=Db;Lb=64;break}j0a(Pb);Mb=Ab;Nb=Db;Lb=64;break}Db=k[Ob>>2]|0;if(Db)j0a(Db);Db=k[sb>>2]|0;if(Db)j0a(Db);k[F>>2]=1;k[F+8>>2]=3;k[F+40>>2]=1;Db=F+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=F+56|0;sb=F+60|0;Ob=F+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Qb|0,F|0)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Db=M;Ab=k[Ob>>2]|0;if(Ab)j0a(Ab);Ab=k[sb>>2]|0;if(!Ab){Mb=Db;Nb=Qb;Lb=64;break}j0a(Ab);Mb=Db;Nb=Qb;Lb=64;break}Qb=k[Ob>>2]|0;if(Qb)j0a(Qb);Qb=k[sb>>2]|0;if(Qb)j0a(Qb);Qb=k[jb>>2]|0;k[E>>2]=1;k[E+8>>2]=144;k[E+40>>2]=1;sb=E+48|0;k[sb>>2]=-1;k[sb+4>>2]=-1;sb=E+56|0;Ob=E+60|0;Db=E+72|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[sb+16>>2]=0;x=0;Ta(539,Qb+48|0,E|0)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;sb=M;Ab=k[Db>>2]|0;if(Ab)j0a(Ab);Ab=k[Ob>>2]|0;if(!Ab){Mb=sb;Nb=Qb;Lb=64;break}j0a(Ab);Mb=sb;Nb=Qb;Lb=64;break}Qb=k[Db>>2]|0;if(Qb)j0a(Qb);Qb=k[Ob>>2]|0;if(Qb)j0a(Qb)}else{k[D>>2]=1;k[D+8>>2]=128;k[D+40>>2]=1;Qb=D+48|0;k[Qb>>2]=-1;k[Qb+4>>2]=-1;Qb=D+56|0;Ob=D+60|0;Db=D+72|0;sb=Cb+48|0;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;Ta(539,sb|0,D|0)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Ab=M;Pb=k[Db>>2]|0;if(Pb)j0a(Pb);Pb=k[Ob>>2]|0;if(!Pb){Mb=Ab;Nb=Qb;Lb=64;break}j0a(Pb);Mb=Ab;Nb=Qb;Lb=64;break}Qb=k[Db>>2]|0;if(Qb)j0a(Qb);Qb=k[Ob>>2]|0;if(Qb)j0a(Qb);k[C>>2]=1;k[C+8>>2]=131;k[C+40>>2]=1;Qb=C+48|0;k[Qb>>2]=-1;k[Qb+4>>2]=-1;Qb=C+56|0;Ob=C+60|0;Db=C+72|0;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;Ta(539,sb|0,C|0)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Ab=M;Pb=k[Db>>2]|0;if(Pb)j0a(Pb);Pb=k[Ob>>2]|0;if(!Pb){Mb=Ab;Nb=Qb;Lb=64;break}j0a(Pb);Mb=Ab;Nb=Qb;Lb=64;break}Qb=k[Db>>2]|0;if(Qb)j0a(Qb);Qb=k[Ob>>2]|0;if(Qb)j0a(Qb);k[B>>2]=1;k[B+8>>2]=3;k[B+40>>2]=1;Qb=B+48|0;k[Qb>>2]=-1;k[Qb+4>>2]=-1;Qb=B+56|0;Ob=B+60|0;Db=B+72|0;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;Ta(539,sb|0,B|0)|0;sb=x;x=0;if(sb&1){sb=Hc()|0;Qb=M;Ab=k[Db>>2]|0;if(Ab)j0a(Ab);Ab=k[Ob>>2]|0;if(!Ab){Mb=Qb;Nb=sb;Lb=64;break}j0a(Ab);Mb=Qb;Nb=sb;Lb=64;break}sb=k[Db>>2]|0;if(sb)j0a(sb);sb=k[Ob>>2]|0;if(sb)j0a(sb);sb=k[jb>>2]|0;k[A>>2]=1;k[A+8>>2]=129;k[A+40>>2]=1;Ob=A+48|0;k[Ob>>2]=-1;k[Ob+4>>2]=-1;Ob=A+56|0;Db=A+60|0;Qb=A+72|0;k[Ob>>2]=0;k[Ob+4>>2]=0;k[Ob+8>>2]=0;k[Ob+12>>2]=0;k[Ob+16>>2]=0;x=0;Ta(539,sb+48|0,A|0)|0;sb=x;x=0;if(sb&1){sb=Hc()|0;Ob=M;Ab=k[Qb>>2]|0;if(Ab)j0a(Ab);Ab=k[Db>>2]|0;if(!Ab){Mb=Ob;Nb=sb;Lb=64;break}j0a(Ab);Mb=Ob;Nb=sb;Lb=64;break}sb=k[Qb>>2]|0;if(sb)j0a(sb);sb=k[Db>>2]|0;if(sb)j0a(sb)}sb=(i[eb>>0]|0)!=0;f:do switch(wb|0){case 3:case 6:{x=0;fb(140,Ja|0,271953,26);Db=x;x=0;if(Db&1){Lb=63;break d}x=0;pa(57,sb^1|0,Ja|0,1539,269817,271737);Db=x;x=0;if(Db&1){Db=Hc()|0;Qb=M;K2a(Ja);Gb=Db;Hb=Qb;break d}else{K2a(Ja);break f}break}default:{Qb=k[jb>>2]|0;if(sb){x=0;Db=Ta(605,Qb|0,Kb|0)|0;Ob=x;x=0;if(Ob&1){Lb=63;break d}x=0;fb(140,z|0,295946,34);Ob=x;x=0;if(Ob&1){Lb=63;break d}x=0;pa(51,(Db+-1|0)>>>0<16|0,z|0,210,295981,296025);Ob=x;x=0;if(!(Ob&1)){K2a(z);x=0;Ta(594,Qb|0,Db+127&255|0)|0;Db=x;x=0;if(Db&1){Lb=63;break d}else break f}else{Db=Hc()|0;Ob=M;K2a(z);Mb=Ob;Nb=Db;Lb=64;break d}}k[Ka>>2]=0;k[Ka+32>>2]=1;Db=Qb+48|0;k[y>>2]=2;Tb=y+8|0;Ub=Ka;Vb=Tb+40|0;do{k[Tb>>2]=k[Ub>>2];Tb=Tb+4|0;Ub=Ub+4|0}while((Tb|0)<(Vb|0));Qb=y+48|0;k[Qb>>2]=-1;k[Qb+4>>2]=-1;Qb=y+56|0;Ob=y+60|0;Ab=y+72|0;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;Ta(539,Db|0,y|0)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Pb=M;Rb=k[Ab>>2]|0;if(Rb)j0a(Rb);Rb=k[Ob>>2]|0;if(!Rb){Mb=Pb;Nb=Qb;Lb=64;break d}j0a(Rb);Mb=Pb;Nb=Qb;Lb=64;break d}Qb=k[Ab>>2]|0;if(Qb)j0a(Qb);Qb=k[Ob>>2]|0;if(Qb)j0a(Qb)}}while(0);sb=k[jb>>2]|0;x=0;Cb=Ta(605,sb|0,tb|0)|0;Eb=x;x=0;if(Eb&1){Lb=63;break}x=0;fb(140,w|0,295946,34);Eb=x;x=0;if(Eb&1){Lb=63;break}x=0;pa(51,(Cb+-1|0)>>>0<16|0,w|0,210,295981,296025);Eb=x;x=0;if(Eb&1){Eb=Hc()|0;Qb=M;K2a(w);Mb=Qb;Nb=Eb;Lb=64;break}K2a(w);x=0;Ta(594,sb|0,Cb+127&255|0)|0;Cb=x;x=0;if(Cb&1){Lb=63;break}if((wb+-1|0)>>>0<3){Cb=k[jb>>2]|0;k[v>>2]=1;k[v+8>>2]=128;k[v+40>>2]=1;sb=v+48|0;k[sb>>2]=-1;k[sb+4>>2]=-1;sb=v+56|0;Eb=v+60|0;Qb=v+72|0;Ob=Cb+48|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[sb+16>>2]=0;x=0;Ta(539,Ob|0,v|0)|0;sb=x;x=0;if(sb&1){sb=Hc()|0;Cb=M;Ab=k[Qb>>2]|0;if(Ab)j0a(Ab);Ab=k[Eb>>2]|0;if(!Ab){Mb=Cb;Nb=sb;Lb=64;break}j0a(Ab);Mb=Cb;Nb=sb;Lb=64;break}sb=k[Qb>>2]|0;if(sb)j0a(sb);sb=k[Eb>>2]|0;if(sb)j0a(sb);k[u>>2]=1;k[u+8>>2]=59;k[u+40>>2]=1;sb=u+48|0;k[sb>>2]=-1;k[sb+4>>2]=-1;sb=u+56|0;Eb=u+60|0;Qb=u+72|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[sb+16>>2]=0;x=0;Ta(539,Ob|0,u|0)|0;sb=x;x=0;if(sb&1){sb=Hc()|0;Cb=M;Ab=k[Qb>>2]|0;if(Ab)j0a(Ab);Ab=k[Eb>>2]|0;if(!Ab){Mb=Cb;Nb=sb;Lb=64;break}j0a(Ab);Mb=Cb;Nb=sb;Lb=64;break}sb=k[Qb>>2]|0;if(sb)j0a(sb);sb=k[Eb>>2]|0;if(sb)j0a(sb);k[t>>2]=1;k[t+8>>2]=21;k[t+40>>2]=1;sb=t+48|0;k[sb>>2]=-1;k[sb+4>>2]=-1;sb=t+56|0;Eb=t+60|0;Qb=t+72|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[sb+16>>2]=0;x=0;Ta(539,Ob|0,t|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;sb=M;Cb=k[Qb>>2]|0;if(Cb)j0a(Cb);Cb=k[Eb>>2]|0;if(!Cb){Mb=sb;Nb=Ob;Lb=64;break}j0a(Cb);Mb=sb;Nb=Ob;Lb=64;break}Ob=k[Qb>>2]|0;if(Ob)j0a(Ob);Ob=k[Eb>>2]|0;if(Ob)j0a(Ob);Ob=k[jb>>2]|0;k[Ma>>2]=4;k[Ma+8>>2]=0;k[Ma+40>>2]=1;Eb=Ma+48|0;k[Eb>>2]=-1;k[Eb+4>>2]=-1;Eb=Ma+56|0;k[Eb>>2]=0;k[Eb+4>>2]=0;k[Eb+8>>2]=0;k[Eb+12>>2]=0;k[Eb+16>>2]=0;x=0;fb(315,s|0,Ob+48|0,Ma|0);Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Gb=Ob;Hb=M;break}Ob=k[s+72>>2]|0;if(Ob)j0a(Ob);Ob=k[s+60>>2]|0;if(Ob)j0a(Ob);Yb=1}else Yb=0;do if(!(i[ib>>0]|0)){k[Na>>2]=50;Ob=Na+32|0;k[Ob>>2]=1;g:do if(!(i[eb>>0]|0))Zb=1;else{Eb=9e3;Qb=0;sb=0;while(1){Cb=Na+(sb<<2)|0;Ab=Hyb(k[Cb>>2]|0,0,Eb|0,Qb|0)|0;Pb=M;k[Cb>>2]=Ab;if((Pb|0)==0&0==0)break;sb=sb+1|0;Ab=k[Ob>>2]|0;if(sb>>>0>=Ab>>>0){_b=Ab;$b=Pb;Lb=398;break}else{Eb=Pb;Qb=0}}do if((Lb|0)==398){Qb=_b+1|0;Eb=Qb>>>0>8?8:Qb;k[Ob>>2]=Eb;if(Eb>>>0<=_b>>>0)break;k[Na+(_b<<2)>>2]=$b}while(0);Eb=k[Ob>>2]|0;Qb=Eb+-1|0;if(!Qb){Zb=Eb;break}else{ac=Qb;bc=Eb}while(1){if(k[Na+(ac<<2)>>2]|0){Zb=bc;break g}k[Ob>>2]=ac;Eb=ac+-1|0;if(!Eb){Zb=ac;break}else{Qb=ac;ac=Eb;bc=Qb}}}while(0);h:do switch(wb|0){case 3:case 6:case 2:case 5:break;default:{if(Yb)break h;i:do if(!Zb){cc=Zb;dc=25e3;Lb=409}else{Db=25e3;Qb=0;Eb=0;while(1){sb=Na+(Eb<<2)|0;Pb=Hyb(k[sb>>2]|0,0,Db|0,Qb|0)|0;Ab=M;k[sb>>2]=Pb;if((Ab|0)==0&0==0)break i;Eb=Eb+1|0;Pb=k[Ob>>2]|0;if(Eb>>>0>=Pb>>>0){ec=Pb;fc=Ab;break}else{Db=Ab;Qb=0}}cc=ec;dc=fc;Lb=409}while(0);do if((Lb|0)==409){Qb=cc+1|0;Db=Qb>>>0>8?8:Qb;k[Ob>>2]=Db;if(Db>>>0<=cc>>>0)break;k[Na+(cc<<2)>>2]=dc}while(0);Db=(k[Ob>>2]|0)+-1|0;if(!Db)break h;else gc=Db;do{if(k[Na+(gc<<2)>>2]|0)break h;k[Ob>>2]=gc;gc=gc+-1|0}while((gc|0)!=0)}}while(0);Ob=(k[jb>>2]|0)+48|0;k[p>>2]=2;Tb=p+8|0;Ub=Na;Vb=Tb+40|0;do{k[Tb>>2]=k[Ub>>2];Tb=Tb+4|0;Ub=Ub+4|0}while((Tb|0)<(Vb|0));Db=p+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=p+56|0;Qb=p+60|0;Eb=p+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Ob|0,p|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;Ab=M;Pb=k[Eb>>2]|0;if(Pb)j0a(Pb);Pb=k[Qb>>2]|0;if(!Pb){Mb=Ab;Nb=Db;Lb=64;break d}j0a(Pb);Mb=Ab;Nb=Db;Lb=64;break d}Db=k[Eb>>2]|0;if(Db)j0a(Db);Db=k[Qb>>2]|0;if(Db)j0a(Db);k[o>>2]=1;k[o+8>>2]=90;k[o+40>>2]=1;Db=o+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=o+56|0;Qb=o+60|0;Eb=o+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Ob|0,o|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;Ab=M;Pb=k[Eb>>2]|0;if(Pb)j0a(Pb);Pb=k[Qb>>2]|0;if(!Pb){Mb=Ab;Nb=Db;Lb=64;break d}j0a(Pb);Mb=Ab;Nb=Db;Lb=64;break d}Db=k[Eb>>2]|0;if(Db)j0a(Db);Db=k[Qb>>2]|0;if(Db)j0a(Db);k[n>>2]=1;k[n+8>>2]=3;k[n+40>>2]=1;Db=n+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=n+56|0;Qb=n+60|0;Eb=n+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Ob|0,n|0)|0;Db=x;x=0;if(Db&1){Db=Hc()|0;Ab=M;Pb=k[Eb>>2]|0;if(Pb)j0a(Pb);Pb=k[Qb>>2]|0;if(!Pb){Mb=Ab;Nb=Db;Lb=64;break d}j0a(Pb);Mb=Ab;Nb=Db;Lb=64;break d}Db=k[Eb>>2]|0;if(Db)j0a(Db);Db=k[Qb>>2]|0;if(Db)j0a(Db)}else{Db=k[jb>>2]|0;x=0;Qb=Ta(605,Db|0,Jb|0)|0;Eb=x;x=0;if(Eb&1){Lb=63;break d}x=0;fb(140,q|0,295946,34);Eb=x;x=0;if(Eb&1){Lb=63;break d}x=0;pa(51,(Qb+-1|0)>>>0<16|0,q|0,210,295981,296025);Eb=x;x=0;if(!(Eb&1)){K2a(q);x=0;Ta(594,Db|0,Qb+127&255|0)|0;Qb=x;x=0;if(Qb&1){Lb=63;break d}else break}else{Qb=Hc()|0;Db=M;K2a(q);Mb=Db;Nb=Qb;Lb=64;break d}}while(0);j:do switch(wb|0){case 3:case 6:{Qb=k[jb>>2]|0;k[m>>2]=1;k[m+8>>2]=244;k[m+40>>2]=1;Db=m+48|0;k[Db>>2]=-1;k[Db+4>>2]=-1;Db=m+56|0;Eb=m+60|0;Ab=m+72|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[Db+16>>2]=0;x=0;Ta(539,Qb+48|0,m|0)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Db=M;Pb=k[Ab>>2]|0;if(Pb)j0a(Pb);Pb=k[Eb>>2]|0;if(!Pb){Mb=Db;Nb=Qb;Lb=64;break d}j0a(Pb);Mb=Db;Nb=Qb;Lb=64;break d}Qb=k[Ab>>2]|0;if(Qb)j0a(Qb);Qb=k[Eb>>2]|0;if(Qb)j0a(Qb);break}default:{Qb=k[jb>>2]|0;switch(wb|0){case 2:case 5:{k[j>>2]=1;k[j+8>>2]=242;k[j+40>>2]=1;Eb=j+48|0;k[Eb>>2]=-1;k[Eb+4>>2]=-1;Eb=j+56|0;Ab=j+60|0;Db=j+72|0;k[Eb>>2]=0;k[Eb+4>>2]=0;k[Eb+8>>2]=0;k[Eb+12>>2]=0;k[Eb+16>>2]=0;x=0;Ta(539,Qb+48|0,j|0)|0;Eb=x;x=0;if(Eb&1){Eb=Hc()|0;Pb=M;sb=k[Db>>2]|0;if(sb)j0a(sb);sb=k[Ab>>2]|0;if(!sb){Mb=Pb;Nb=Eb;Lb=64;break d}j0a(sb);Mb=Pb;Nb=Eb;Lb=64;break d}Eb=k[Db>>2]|0;if(Eb)j0a(Eb);Eb=k[Ab>>2]|0;if(Eb)j0a(Eb);break j;break}default:{k[h>>2]=1;k[h+8>>2]=241;k[h+40>>2]=1;Eb=h+48|0;k[Eb>>2]=-1;k[Eb+4>>2]=-1;Eb=h+56|0;Ab=h+60|0;Db=h+72|0;k[Eb>>2]=0;k[Eb+4>>2]=0;k[Eb+8>>2]=0;k[Eb+12>>2]=0;k[Eb+16>>2]=0;x=0;Ta(539,Qb+48|0,h|0)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Eb=M;Pb=k[Db>>2]|0;if(Pb)j0a(Pb);Pb=k[Ab>>2]|0;if(!Pb){Mb=Eb;Nb=Qb;Lb=64;break d}j0a(Pb);Mb=Eb;Nb=Qb;Lb=64;break d}Qb=k[Db>>2]|0;if(Qb)j0a(Qb);Qb=k[Ab>>2]|0;if(Qb)j0a(Qb);break j}}}}while(0);Qb=i[eb>>0]|0;Ab=i[ib>>0]|0;x=0;Db=Ba(608,b|0)|0;Eb=x;x=0;if(Eb&1){Lb=63;break}Eb=(Qb<<24>>24!=0?3:2)+(Ab&255)+((Ib|Db^1)&1)|0;Db=k[jb>>2]|0;do if(xb){x=0;fb(140,g|0,296239,35);Ab=x;x=0;if(Ab&1){Lb=63;break d}x=0;pa(51,(Eb+-1|0)>>>0<16|0,g|0,217,295981,296275);Ab=x;x=0;if(!(Ab&1)){K2a(g);x=0;Ta(594,Db|0,Eb+143&255|0)|0;Ab=x;x=0;if(Ab&1){Lb=63;break d}else break}else{Ab=Hc()|0;Qb=M;K2a(g);Mb=Qb;Nb=Ab;Lb=64;break d}}else{k[f>>2]=1;k[f+8>>2]=21;k[f+40>>2]=1;Ab=f+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=f+56|0;Qb=f+60|0;Pb=f+72|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,Db+48|0,f|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;sb=M;Cb=k[Pb>>2]|0;if(Cb)j0a(Cb);Cb=k[Qb>>2]|0;if(!Cb){Mb=sb;Nb=Ab;Lb=64;break d}j0a(Cb);Mb=sb;Nb=Ab;Lb=64;break d}Ab=k[Pb>>2]|0;if(Ab)j0a(Ab);Ab=k[Qb>>2]|0;if(Ab)j0a(Ab);Ab=k[jb>>2]|0;k[Oa>>2]=4;k[Oa+8>>2]=0;k[Oa+40>>2]=1;Qb=Oa+48|0;k[Qb>>2]=-1;k[Qb+4>>2]=-1;Qb=Oa+56|0;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;fb(315,e|0,Ab+48|0,Oa|0);Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Gb=Ab;Hb=M;break d}Ab=k[e+72>>2]|0;if(Ab)j0a(Ab);Ab=k[e+60>>2]|0;if(Ab)j0a(Ab)}while(0);k[Pa>>2]=k[Wb>>2];x=0;xa(822,Pa|0,Eb|0);Db=x;x=0;if(Db&1){Lb=63;break}k:do if(!xb){if((wb|0)==13){k[Qa>>2]=k[Wb>>2];x=0;va(1508,Qa|0);Db=x;x=0;if(Db&1){Lb=63;break d}k[Ra>>2]=k[Wb>>2];x=0;fb(247,Sa|0,160,0);Db=x;x=0;if(Db&1){Lb=63;break d}x=0;pa(61,Ra|0,Sa|0,0,1,0);Db=x;x=0;if(Db&1){Db=Hc()|0;Ab=M;k[Sa>>2]=20456;xh(Sa+12|0,k[Sa+16>>2]|0);Qb=k[Sa+8>>2]|0;if(!Qb){Gb=Db;Hb=Ab;break d}k0a(Qb);Gb=Db;Hb=Ab;break d}k[Sa>>2]=20456;xh(Sa+12|0,k[Sa+16>>2]|0);Ab=k[Sa+8>>2]|0;if(Ab)k0a(Ab);k[Ua>>2]=k[Wb>>2];x=0;fb(247,Va|0,160,0);Ab=x;x=0;if(Ab&1){Lb=63;break d}x=0;xa(752,Wa|0,20);Ab=x;x=0;do if(Ab&1){Db=Hc()|0;hc=Db;ic=M}else{x=0;nb(137,Ua|0,Va|0,Wa|0,0);Db=x;x=0;if(Db&1){Db=Hc()|0;Qb=M;k[Wa>>2]=20456;xh(Wa+12|0,k[Wa+16>>2]|0);Pb=k[Wa+8>>2]|0;if(!Pb){hc=Db;ic=Qb;break}k0a(Pb);hc=Db;ic=Qb;break}k[Wa>>2]=20456;xh(Wa+12|0,k[Wa+16>>2]|0);Qb=k[Wa+8>>2]|0;if(Qb)k0a(Qb);k[Va>>2]=20456;xh(Va+12|0,k[Va+16>>2]|0);Qb=k[Va+8>>2]|0;if(!Qb)break k;k0a(Qb);break k}while(0);k[Va>>2]=20456;xh(Va+12|0,k[Va+16>>2]|0);Ab=k[Va+8>>2]|0;if(!Ab){Gb=hc;Hb=ic;break d}k0a(Ab);Gb=hc;Hb=ic;break d}if(!ub){Ab=b+36|0;Ob=b+40|0;if((k[Ab>>2]|0)==(k[Ob>>2]|0))break;k[Za>>2]=k[Wb>>2];x=0;va(1508,Za|0);Qb=x;x=0;if(Qb&1){Lb=63;break d}Qb=k[Ab>>2]|0;Ab=k[Ob>>2]|0;Ob=k[jb>>2]|0;do if((Qb|0)!=(Ab|0)){Db=Ob;Pb=Qb;sb=0;do{k[_a>>2]=Db;x=0;pa(61,_a|0,k[Pb>>2]|0,0,1,1);Cb=x;x=0;if(Cb&1){Lb=60;break}Cb=k[Pb>>2]|0;if(!Cb)jc=0;else jc=iDa(Cb,168,6688,0)|0;sb=sb|(jc|0)!=0;Pb=Pb+8|0;Db=k[jb>>2]|0}while((Pb|0)!=(Ab|0));if((Lb|0)==60){Pb=Hc()|0;Mb=M;Nb=Pb;Lb=64;break d}if(!sb){kc=Db;break}k[$a>>2]=Db;x=0;va(1510,$a|0);Pb=x;x=0;if(Pb&1){Lb=63;break d}else break k}else kc=Ob;while(0);k[aa>>2]=1;k[aa+8>>2]=80;k[aa+40>>2]=1;Ob=aa+48|0;k[Ob>>2]=-1;k[Ob+4>>2]=-1;Ob=aa+56|0;Ab=aa+60|0;Qb=aa+72|0;k[Ob>>2]=0;k[Ob+4>>2]=0;k[Ob+8>>2]=0;k[Ob+12>>2]=0;k[Ob+16>>2]=0;x=0;Ta(539,kc+48|0,aa|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Pb=M;Cb=k[Qb>>2]|0;if(Cb)j0a(Cb);Cb=k[Ab>>2]|0;if(!Cb){Mb=Pb;Nb=Ob;Lb=64;break d}j0a(Cb);Mb=Pb;Nb=Ob;Lb=64;break d}Ob=k[Qb>>2]|0;if(Ob)j0a(Ob);Ob=k[Ab>>2]|0;if(Ob)j0a(Ob);break}Ob=k[jb>>2]|0;k[Xa>>2]=32;k[Xa+32>>2]=1;Ab=Ob+48|0;k[Z>>2]=2;Tb=Z+8|0;Ub=Xa;Vb=Tb+40|0;do{k[Tb>>2]=k[Ub>>2];Tb=Tb+4|0;Ub=Ub+4|0}while((Tb|0)<(Vb|0));Ob=Z+48|0;k[Ob>>2]=-1;k[Ob+4>>2]=-1;Ob=Z+56|0;Qb=Z+60|0;Pb=Z+72|0;k[Ob>>2]=0;k[Ob+4>>2]=0;k[Ob+8>>2]=0;k[Ob+12>>2]=0;k[Ob+16>>2]=0;x=0;Ta(539,Ab|0,Z|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Cb=M;Rb=k[Pb>>2]|0;if(Rb)j0a(Rb);Rb=k[Qb>>2]|0;if(!Rb){Mb=Cb;Nb=Ob;Lb=64;break d}j0a(Rb);Mb=Cb;Nb=Ob;Lb=64;break d}Ob=k[Pb>>2]|0;if(Ob)j0a(Ob);Ob=k[Qb>>2]|0;if(Ob)j0a(Ob);k[Ya>>2]=k[Wb>>2];x=0;va(1508,Ya|0);Ob=x;x=0;if(Ob&1){Lb=63;break d}Ob=k[jb>>2]|0;k[_>>2]=1;k[_+8>>2]=3;k[_+40>>2]=1;Qb=_+48|0;k[Qb>>2]=-1;k[Qb+4>>2]=-1;Qb=_+56|0;Pb=_+60|0;Cb=_+72|0;Rb=Ob+48|0;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;Ta(539,Rb|0,_|0)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Ob=M;lc=k[Cb>>2]|0;if(lc)j0a(lc);lc=k[Pb>>2]|0;if(!lc){Mb=Ob;Nb=Qb;Lb=64;break d}j0a(lc);Mb=Ob;Nb=Qb;Lb=64;break d}Qb=k[Cb>>2]|0;if(Qb)j0a(Qb);Qb=k[Pb>>2]|0;if(Qb)j0a(Qb);k[$>>2]=1;k[$+8>>2]=81;k[$+40>>2]=1;Qb=$+48|0;k[Qb>>2]=-1;k[Qb+4>>2]=-1;Qb=$+56|0;Pb=$+60|0;Cb=$+72|0;k[Qb>>2]=0;k[Qb+4>>2]=0;k[Qb+8>>2]=0;k[Qb+12>>2]=0;k[Qb+16>>2]=0;x=0;Ta(539,Rb|0,$|0)|0;Rb=x;x=0;if(Rb&1){Rb=Hc()|0;Qb=M;Ob=k[Cb>>2]|0;if(Ob)j0a(Ob);Ob=k[Pb>>2]|0;if(!Ob){Mb=Qb;Nb=Rb;Lb=64;break d}j0a(Ob);Mb=Qb;Nb=Rb;Lb=64;break d}Rb=k[Cb>>2]|0;if(Rb)j0a(Rb);Rb=k[Pb>>2]|0;if(Rb)j0a(Rb)}while(0);ub=k[ia>>2]|0;if(ub){Eb=ia+4|0;Rb=k[Eb>>2]|0;if((Rb|0)==(ub|0))mc=ub;else{Pb=Rb;while(1){Rb=Pb+-8|0;k[Eb>>2]=Rb;Cb=k[Pb+-4>>2]|0;if(!Cb)nc=Rb;else{j0a(Cb);nc=k[Eb>>2]|0}if((nc|0)==(ub|0))break;else Pb=nc}mc=k[ia>>2]|0}OBa(mc)}Pb=k[ha>>2]|0;if(!Pb){r=d;return}ub=k[Bb>>2]|0;if((ub|0)==(Pb|0))oc=Pb;else{Eb=ub;while(1){ub=Eb+-8|0;k[Bb>>2]=ub;Cb=k[Eb+-4>>2]|0;if(!Cb)pc=ub;else{j0a(Cb);pc=k[Bb>>2]|0}if((pc|0)==(Pb|0))break;else Eb=pc}oc=k[ha>>2]|0}OBa(oc);r=d;return}else Lb=63}while(0);if((Lb|0)==63){jb=Hc()|0;Mb=M;Nb=jb;Lb=64}if((Lb|0)==64){Gb=Nb;Hb=Mb}jb=k[ia>>2]|0;if(!jb){qc=Gb;rc=Hb}else{wb=ia+4|0;xb=k[wb>>2]|0;if((xb|0)==(jb|0))sc=jb;else{ib=xb;while(1){xb=ib+-8|0;k[wb>>2]=xb;eb=k[ib+-4>>2]|0;if(!eb)tc=xb;else{j0a(eb);tc=k[wb>>2]|0}if((tc|0)==(jb|0))break;else ib=tc}sc=k[ia>>2]|0}OBa(sc);qc=Gb;rc=Hb}}else{ib=Hc()|0;qc=ib;rc=M}ib=k[ha>>2]|0;if(!ib){qb=qc;rb=rc;Sc(qb|0)}jb=k[Bb>>2]|0;if((jb|0)==(ib|0))uc=ib;else{wb=jb;while(1){jb=wb+-8|0;k[Bb>>2]=jb;eb=k[wb+-4>>2]|0;if(!eb)vc=jb;else{j0a(eb);vc=k[Bb>>2]|0}if((vc|0)==(ib|0))break;else wb=vc}uc=k[ha>>2]|0}OBa(uc);qb=qc;rb=rc;Sc(qb|0)}while(0);if(!cb){qb=gb;rb=hb;Sc(qb|0)}cb=k[ba>>2]|0;if(!cb){qb=gb;rb=hb;Sc(qb|0)}rc=ba+4|0;qc=k[rc>>2]|0;if((qc|0)==(cb|0))wc=cb;else{uc=qc;while(1){qc=uc+-8|0;k[rc>>2]=qc;ha=k[uc+-4>>2]|0;if(!ha)xc=qc;else{j0a(ha);xc=k[rc>>2]|0}if((xc|0)==(cb|0))break;else uc=xc}wc=k[ba>>2]|0}OBa(wc);qb=gb;rb=hb;Sc(qb|0)}function ena(a,b){a=a|0;b=b|0;return 0}function fna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0;c=r;r=r+4384|0;d=c+3344|0;e=c+3264|0;f=c+3184|0;g=c+3104|0;h=c+3024|0;j=c+2944|0;l=c+2864|0;m=c+2784|0;n=c+2704|0;o=c+2624|0;p=c+2544|0;q=c+2464|0;s=c+2384|0;t=c+2304|0;u=c+2224|0;v=c+2144|0;w=c+2064|0;y=c+1984|0;z=c+1904|0;A=c+1824|0;B=c+1744|0;C=c+1664|0;D=c+1584|0;E=c+1504|0;F=c+1424|0;G=c+1344|0;H=c+1264|0;I=c+4376|0;J=c+1184|0;K=c+1104|0;L=c+4364|0;N=c+1024|0;O=c+4336|0;P=c+864|0;Q=c+704|0;R=c+4320|0;S=c+4300|0;T=c+4276|0;U=c+680|0;V=c+4360|0;W=c+4352|0;X=c+944|0;Y=c+784|0;Z=c+4332|0;_=c+4312|0;$=c+4288|0;aa=c+4264|0;ba=c+640|0;ca=c+4232|0;da=c+4224|0;ea=c+600|0;fa=c+4208|0;ga=c+520|0;ha=c+440|0;ia=c+4180|0;ja=c+4168|0;ka=c+360|0;la=c+280|0;ma=c+4236|0;na=c+240|0;oa=c+4080|0;qa=c+200|0;ra=c+3992|0;sa=c+3980|0;ta=c+3976|0;ua=c+3944|0;va=c+3936|0;wa=c+3904|0;ya=c+3888|0;za=c+3840|0;Aa=c+3832|0;Ca=c+3800|0;Da=c+3760|0;Ea=c+3744|0;Ga=c+3728|0;Ha=c+3720|0;Ia=c+3708|0;Ja=c+160|0;Ka=c+120|0;La=c+80|0;Ma=c+3680|0;Na=c+3640|0;Oa=c+3624|0;Pa=c+3608|0;Qa=c+3580|0;Ra=c+40|0;Sa=c+3568|0;Ua=c+3540|0;Va=c+3536|0;Wa=c+3524|0;Xa=c+3512|0;Ya=c+3508|0;Za=c;_a=c+3496|0;$a=c+3456|0;ab=c+3440|0;bb=c+3424|0;cb=a+8|0;xka(U,k[cb>>2]|0,b);db=b+32|0;eb=k[db>>2]|0;x=0;gb=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;ib=x;x=0;a:do if(!(ib&1)){jb=k[gb+4>>2]|0;if(((jb|0)!=0?(kb=iDa(jb,168,6768,0)|0,(kb|0)!=0):0)?(i[kb+79>>0]|0)!=0:0){jb=b+24|0;lb=k[jb>>2]|0;x=0;xa(k[(k[lb>>2]|0)+12>>2]|0,lb|0,a|0);lb=x;x=0;if(lb&1){mb=3;break}k[V>>2]=k[cb>>2];lb=k[jb>>2]|0;x=0;jb=Ba(k[(k[lb>>2]|0)+16>>2]|0,lb|0)|0;lb=x;x=0;if(lb&1){mb=3;break}lb=k[jb+4>>2]|0;x=0;xa(751,W|0,kb|0);jb=x;x=0;if(jb&1){mb=3;break}x=0;nb(137,V|0,lb|0,k[W>>2]|0,1);lb=x;x=0;if(lb&1){lb=Hc()|0;jb=M;ob=k[W+4>>2]|0;if(!ob){pb=lb;qb=jb;oy(U);Sc(pb|0)}j0a(ob);pb=lb;qb=jb;oy(U);Sc(pb|0)}jb=k[W+4>>2]|0;if(jb)j0a(jb);jb=k[kb+72>>2]|0;if(jb){x=0;fb(140,$|0,329672,0);lb=x;x=0;if(lb&1){mb=3;break}x=0;pa(57,(jb|0)==3|0,$|0,853,269817,271980);jb=x;x=0;if(jb&1){jb=Hc()|0;lb=M;K2a($);pb=jb;qb=lb;oy(U);Sc(pb|0)}K2a($);lb=kb+84|0;jb=k[lb>>2]|0;x=0;fb(140,R|0,285127,55);ob=x;x=0;if(ob&1){mb=3;break}x=0;pa(57,(jb|0)!=0|0,R|0,917,285183,285227);jb=x;x=0;if(jb&1){jb=Hc()|0;ob=M;K2a(R);rb=ob;sb=jb;break}K2a(R);jb=k[(k[lb>>2]|0)+36>>2]|0;if((jb|0)!=0?(lb=iDa(jb,5224,5312,0)|0,(lb|0)!=0):0){tb=(i[lb+72>>0]|0)!=0;ub=lb}else{tb=0;ub=0}x=0;fb(140,aa|0,329672,0);lb=x;x=0;if(lb&1){mb=3;break}x=0;pa(57,tb|0,aa|0,855,269817,271980);lb=x;x=0;if(lb&1){lb=Hc()|0;jb=M;K2a(aa);pb=lb;qb=jb;oy(U);Sc(pb|0)}K2a(aa);x=0;xa(857,(k[cb>>2]|0)+48|0,k[ub+24>>2]|0);jb=x;x=0;if(jb&1){mb=3;break}jb=k[cb>>2]|0;x=0;xa(858,ba|0,kb|0);lb=x;x=0;if(lb&1){mb=3;break}lb=jb+48|0;k[Q>>2]=2;vb=Q+8|0;wb=ba;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));jb=Q+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=Q+56|0;ob=Q+60|0;yb=Q+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,lb|0,Q|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;zb=M;Ab=k[yb>>2]|0;if(Ab)j0a(Ab);Ab=k[ob>>2]|0;if(!Ab){rb=zb;sb=jb;break}j0a(Ab);rb=zb;sb=jb;break}jb=k[yb>>2]|0;if(jb)j0a(jb);jb=k[ob>>2]|0;if(jb)j0a(jb);k[ca>>2]=k[cb>>2];x=0;xa(751,da|0,kb|0);jb=x;x=0;if(jb&1){mb=3;break}jb=k[da>>2]|0;x=0;ob=Ba(k[(k[jb>>2]|0)+60>>2]|0,jb|0)|0;jb=x;x=0;do if(!(jb&1)){x=0;fb(333,ca|0,ob|0,2);yb=x;x=0;if(yb&1)break;yb=k[da+4>>2]|0;if(!yb){oy(U);r=c;return 0}j0a(yb);oy(U);r=c;return 0}while(0);ob=Hc()|0;jb=M;lb=k[da+4>>2]|0;if(!lb){pb=ob;qb=jb;oy(U);Sc(pb|0)}j0a(lb);pb=ob;qb=jb;oy(U);Sc(pb|0)}jb=k[cb>>2]|0;ob=kb+84|0;lb=k[ob>>2]|0;x=0;fb(140,T|0,285127,55);yb=x;x=0;if(yb&1){mb=3;break}x=0;pa(57,(lb|0)!=0|0,T|0,917,285183,285227);lb=x;x=0;if(lb&1){lb=Hc()|0;yb=M;K2a(T);rb=yb;sb=lb;break}K2a(T);lb=iDa(k[ob>>2]|0,4520,5424,0)|0;if(!lb){x=0;hb(49);x=0;mb=3;break}x=0;fb(329,Y|0,jb|0,lb|0);lb=x;x=0;if(lb&1){mb=3;break}lb=k[Y>>2]|0;x=0;fb(140,S|0,329672,0);ob=x;x=0;do if(ob&1){yb=Hc()|0;Bb=M;Cb=yb;mb=40}else{x=0;pa(56,(lb|0)==4|(lb|0)==8|0,S|0,71,296096,296141);yb=x;x=0;if(yb&1){yb=Hc()|0;zb=M;K2a(S);Bb=zb;Cb=yb;mb=40;break}K2a(S);k[X>>2]=4;vb=X+8|0;wb=Y+8|0;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));yb=X+48|0;k[yb>>2]=-1;k[yb+4>>2]=-1;yb=X+56|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[yb+16>>2]=0;x=0;Ta(539,jb+48|0,X|0)|0;yb=x;x=0;if(yb&1){yb=Hc()|0;zb=M;Ab=k[X+72>>2]|0;if(Ab)j0a(Ab);Ab=k[X+60>>2]|0;if(!Ab){Db=yb;Eb=zb;break}j0a(Ab);Db=yb;Eb=zb;break}zb=k[X+72>>2]|0;if(zb)j0a(zb);zb=k[X+60>>2]|0;if(zb)j0a(zb);zb=k[Y+72>>2]|0;if(zb)j0a(zb);zb=k[Y+60>>2]|0;if(zb)j0a(zb);k[Z>>2]=k[cb>>2];x=0;xa(751,_|0,kb|0);zb=x;x=0;if(zb&1){mb=3;break a}zb=k[_>>2]|0;x=0;yb=Ba(k[(k[zb>>2]|0)+60>>2]|0,zb|0)|0;zb=x;x=0;do if(!(zb&1)){x=0;fb(333,Z|0,yb|0,1);Ab=x;x=0;if(Ab&1)break;Ab=k[_+4>>2]|0;if(!Ab){oy(U);r=c;return 0}j0a(Ab);oy(U);r=c;return 0}while(0);yb=Hc()|0;zb=M;Ab=k[_+4>>2]|0;if(!Ab){pb=yb;qb=zb;oy(U);Sc(pb|0)}j0a(Ab);pb=yb;qb=zb;oy(U);Sc(pb|0)}while(0);if((mb|0)==40){Db=Cb;Eb=Bb}kb=k[Y+72>>2]|0;if(kb)j0a(kb);kb=k[Y+60>>2]|0;if(!kb){pb=Db;qb=Eb;oy(U);Sc(pb|0)}j0a(kb);pb=Db;qb=Eb;oy(U);Sc(pb|0)}kb=b+24|0;jb=k[kb>>2]|0;x=0;lb=Ba(k[(k[jb>>2]|0)+16>>2]|0,jb|0)|0;jb=x;x=0;if(!(jb&1)){jb=k[lb+4>>2]|0;if((jb|0)!=0?(lb=iDa(jb,168,6800,0)|0,(lb|0)!=0):0){jb=k[lb+24>>2]|0;do if(!jb)Fb=0;else{if(!(iDa(jb,168,6672,0)|0)){Fb=iDa(jb,168,6736,0)|0;break}x=0;lb=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;ob=x;x=0;if(ob&1){mb=3;break a}ob=k[lb+4>>2]|0;if((ob|0)!=0?(lb=iDa(ob,168,6768,0)|0,(lb|0)!=0):0){if(k[lb+72>>2]|0){ob=k[kb>>2]|0;x=0;xa(k[(k[ob>>2]|0)+12>>2]|0,ob|0,a|0);ob=x;x=0;if(ob&1){mb=3;break a}ob=k[cb>>2]|0;x=0;xa(858,ea|0,lb|0);lb=x;x=0;if(lb&1){mb=3;break a}lb=ob+48|0;k[P>>2]=2;vb=P+8|0;wb=ea;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));ob=P+48|0;k[ob>>2]=-1;k[ob+4>>2]=-1;ob=P+56|0;zb=P+60|0;yb=P+72|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[ob+16>>2]=0;x=0;Ta(539,lb|0,P|0)|0;ob=x;x=0;if(ob&1){ob=Hc()|0;Ab=M;Gb=k[yb>>2]|0;if(Gb)j0a(Gb);Gb=k[zb>>2]|0;if(!Gb){rb=Ab;sb=ob;break a}j0a(Gb);rb=Ab;sb=ob;break a}ob=k[yb>>2]|0;if(ob)j0a(ob);ob=k[zb>>2]|0;if(ob)j0a(ob);oy(U);r=c;return 0}x=0;ob=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;zb=x;x=0;if(zb&1){mb=3;break a}zb=k[ob+24>>2]|0;if(!zb)Hb=0;else Hb=iDa(zb,4520,5424,0)|0;x=0;fb(140,fa|0,272071,35);zb=x;x=0;if(zb&1){mb=3;break a}x=0;pa(57,(Hb|0)!=0|0,fa|0,882,269817,271980);zb=x;x=0;if(zb&1){zb=Hc()|0;ob=M;K2a(fa);pb=zb;qb=ob;oy(U);Sc(pb|0)}K2a(fa);ob=k[cb>>2]|0;x=0;fb(329,ha|0,ob|0,Hb|0);zb=x;x=0;if(zb&1){mb=3;break a}zb=k[ha>>2]|0;x=0;fb(140,O|0,329672,0);yb=x;x=0;do if(yb&1){Ab=Hc()|0;Ib=M;Jb=Ab;mb=122}else{x=0;pa(56,(zb|0)==4|(zb|0)==8|0,O|0,71,296096,296141);Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Gb=M;K2a(O);Ib=Gb;Jb=Ab;mb=122;break}K2a(O);k[ga>>2]=4;vb=ga+8|0;wb=ha+8|0;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));Ab=ga+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=ga+56|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,ob+48|0,ga|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Gb=M;Kb=k[ga+72>>2]|0;if(Kb)j0a(Kb);Kb=k[ga+60>>2]|0;if(!Kb){Lb=Ab;Mb=Gb;break}j0a(Kb);Lb=Ab;Mb=Gb;break}Gb=k[ga+72>>2]|0;if(Gb)j0a(Gb);Gb=k[ga+60>>2]|0;if(Gb)j0a(Gb);Gb=k[ha+72>>2]|0;if(Gb)j0a(Gb);Gb=k[ha+60>>2]|0;if(!Gb){oy(U);r=c;return 0}j0a(Gb);oy(U);r=c;return 0}while(0);if((mb|0)==122){Lb=Jb;Mb=Ib}ob=k[ha+72>>2]|0;if(ob)j0a(ob);ob=k[ha+60>>2]|0;if(!ob){pb=Lb;qb=Mb;oy(U);Sc(pb|0)}j0a(ob);pb=Lb;qb=Mb;oy(U);Sc(pb|0)}ob=k[kb>>2]|0;x=0;xa(k[(k[ob>>2]|0)+12>>2]|0,ob|0,a|0);ob=x;x=0;if(ob&1){mb=3;break a}oy(U);r=c;return 0}while(0);jb=k[kb>>2]|0;x=0;xa(k[(k[jb>>2]|0)+12>>2]|0,jb|0,a|0);jb=x;x=0;ob=jb&1;if(!Fb){if(ob){mb=3;break}oy(U);r=c;return 0}if(ob){mb=3;break}ob=k[cb>>2]|0;x=0;jb=Ta(606,Fb|0,k[db>>2]|0)|0;zb=x;x=0;if(zb&1){mb=3;break}k[N>>2]=2;k[N+8>>2]=jb;jb=N+12|0;k[jb>>2]=k[ia>>2];k[jb+4>>2]=k[ia+4>>2];k[jb+8>>2]=k[ia+8>>2];k[jb+12>>2]=k[ia+12>>2];k[jb+16>>2]=k[ia+16>>2];k[jb+20>>2]=k[ia+20>>2];k[jb+24>>2]=k[ia+24>>2];k[N+40>>2]=1;jb=N+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=N+56|0;zb=N+60|0;yb=N+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,ob+48|0,N|0)|0;ob=x;x=0;if(ob&1){ob=Hc()|0;jb=M;lb=k[yb>>2]|0;if(lb)j0a(lb);lb=k[zb>>2]|0;if(!lb){rb=jb;sb=ob;break}j0a(lb);rb=jb;sb=ob;break}ob=k[yb>>2]|0;if(ob)j0a(ob);ob=k[zb>>2]|0;if(ob)j0a(ob);oy(U);r=c;return 0}ob=k[kb>>2]|0;x=0;xa(k[(k[ob>>2]|0)+12>>2]|0,ob|0,a|0);ob=x;x=0;if((!(ob&1)?(ob=k[kb>>2]|0,x=0,zb=Ba(k[(k[ob>>2]|0)+16>>2]|0,ob|0)|0,ob=x,x=0,!(ob&1)):0)?(ob=k[zb+4>>2]|0,x=0,zb=Ba(k[k[ob>>2]>>2]|0,ob|0)|0,ob=x,x=0,!(ob&1)):0){switch(zb|0){case 7:{zb=k[kb>>2]|0;x=0;ob=Ba(k[(k[zb>>2]|0)+16>>2]|0,zb|0)|0;zb=x;x=0;if(zb&1){mb=3;break a}zb=iDa(k[ob+4>>2]|0,168,6672,0)|0;if(!zb){x=0;hb(49);x=0;mb=3;break a}ob=(i[zb+28>>0]|0)==0;x=0;yb=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;jb=x;x=0;lb=jb&1;if(!ob){if(lb){mb=3;break a}ob=k[yb+24>>2]|0;x=0;fb(140,ja|0,272107,36);jb=x;x=0;if(jb&1){mb=3;break a}x=0;pa(57,(ob|0)!=0|0,ja|0,908,269817,271980);ob=x;x=0;if(ob&1){ob=Hc()|0;jb=M;K2a(ja);pb=ob;qb=jb;oy(U);Sc(pb|0)}K2a(ja);jb=k[cb>>2]|0;x=0;ob=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Gb=x;x=0;if(Gb&1){mb=3;break a}Gb=iDa(k[ob+24>>2]|0,4520,5424,0)|0;if(!Gb){x=0;hb(49);x=0;mb=3;break a}x=0;nb(140,la|0,jb|0,Gb|0,k[zb+24>>2]|0);Gb=x;x=0;if(Gb&1){mb=3;break a}Gb=k[la>>2]|0;x=0;fb(140,L|0,329672,0);ob=x;x=0;do if(ob&1){Ab=Hc()|0;Nb=M;Ob=Ab;mb=176}else{x=0;pa(56,(Gb|0)==4|(Gb|0)==8|0,L|0,71,296096,296141);Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Kb=M;K2a(L);Nb=Kb;Ob=Ab;mb=176;break}K2a(L);k[ka>>2]=4;vb=ka+8|0;wb=la+8|0;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));Ab=ka+48|0;k[Ab>>2]=-1;k[Ab+4>>2]=-1;Ab=ka+56|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[Ab+16>>2]=0;x=0;Ta(539,jb+48|0,ka|0)|0;Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Kb=M;Pb=k[ka+72>>2]|0;if(Pb)j0a(Pb);Pb=k[ka+60>>2]|0;if(!Pb){Qb=Ab;Rb=Kb;break}j0a(Pb);Qb=Ab;Rb=Kb;break}Kb=k[ka+72>>2]|0;if(Kb)j0a(Kb);Kb=k[ka+60>>2]|0;if(Kb)j0a(Kb);Kb=k[la+72>>2]|0;if(Kb)j0a(Kb);Kb=k[la+60>>2]|0;if(!Kb){oy(U);r=c;return 0}j0a(Kb);oy(U);r=c;return 0}while(0);if((mb|0)==176){Qb=Ob;Rb=Nb}jb=k[la+72>>2]|0;if(jb)j0a(jb);jb=k[la+60>>2]|0;if(!jb){pb=Qb;qb=Rb;oy(U);Sc(pb|0)}j0a(jb);pb=Qb;qb=Rb;oy(U);Sc(pb|0)}if(lb){mb=3;break a}jb=k[yb+24>>2]|0;if(jb){Gb=iDa(jb,4520,5464,0)|0;do if(!Gb){ob=iDa(jb,4520,5424,0)|0;if(!ob){x=0;fb(140,sa|0,272144,49);Kb=x;x=0;if(Kb&1){mb=3;break a}x=0;pa(57,0,sa|0,925,269817,271980);Kb=x;x=0;if(!(Kb&1)){K2a(sa);Sb=0;Tb=1;break}Kb=Hc()|0;Ab=M;K2a(sa);pb=Kb;qb=Ab;oy(U);Sc(pb|0)}else{x=0;fb(143,ra|0,ob|0,1);ob=x;x=0;if(ob&1){mb=3;break a}x=0;xa(858,qa|0,ra|0);ob=x;x=0;if(!(ob&1)){ob=k[qa>>2]|0;Ab=qa+4|0;k[ma>>2]=k[Ab>>2];k[ma+4>>2]=k[Ab+4>>2];k[ma+8>>2]=k[Ab+8>>2];k[ma+12>>2]=k[Ab+12>>2];k[ma+16>>2]=k[Ab+16>>2];k[ma+20>>2]=k[Ab+20>>2];k[ma+24>>2]=k[Ab+24>>2];Ab=k[qa+32>>2]|0;Dg(ra);Sb=ob;Tb=Ab;break}Ab=Hc()|0;ob=M;Dg(ra);pb=Ab;qb=ob;oy(U);Sc(pb|0)}}else{x=0;xa(742,oa|0,Gb|0);ob=x;x=0;if(ob&1){mb=3;break a}x=0;xa(858,na|0,oa|0);ob=x;x=0;if(!(ob&1)){ob=k[na>>2]|0;Ab=na+4|0;k[ma>>2]=k[Ab>>2];k[ma+4>>2]=k[Ab+4>>2];k[ma+8>>2]=k[Ab+8>>2];k[ma+12>>2]=k[Ab+12>>2];k[ma+16>>2]=k[Ab+16>>2];k[ma+20>>2]=k[Ab+20>>2];k[ma+24>>2]=k[Ab+24>>2];Ab=k[na+32>>2]|0;Dg(oa);Sb=ob;Tb=Ab;break}Ab=Hc()|0;ob=M;Dg(oa);pb=Ab;qb=ob;oy(U);Sc(pb|0)}while(0);k[ta>>2]=k[cb>>2];x=0;fb(247,ua|0,0,2);Gb=x;x=0;if(Gb&1){mb=3;break a}x=0;nb(137,ta|0,zb|0,ua|0,1);Gb=x;x=0;if(Gb&1){Gb=Hc()|0;jb=M;k[ua>>2]=20456;xh(ua+12|0,k[ua+16>>2]|0);yb=k[ua+8>>2]|0;if(!yb){pb=Gb;qb=jb;oy(U);Sc(pb|0)}k0a(yb);pb=Gb;qb=jb;oy(U);Sc(pb|0)}k[ua>>2]=20456;xh(ua+12|0,k[ua+16>>2]|0);jb=k[ua+8>>2]|0;if(jb)k0a(jb);jb=(k[cb>>2]|0)+48|0;k[K>>2]=2;k[K+8>>2]=Sb;Gb=K+12|0;k[Gb>>2]=k[ma>>2];k[Gb+4>>2]=k[ma+4>>2];k[Gb+8>>2]=k[ma+8>>2];k[Gb+12>>2]=k[ma+12>>2];k[Gb+16>>2]=k[ma+16>>2];k[Gb+20>>2]=k[ma+20>>2];k[Gb+24>>2]=k[ma+24>>2];k[K+40>>2]=Tb;Gb=K+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=K+56|0;yb=K+60|0;lb=K+72|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,jb|0,K|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;Gb=M;ob=k[lb>>2]|0;if(ob)j0a(ob);ob=k[yb>>2]|0;if(!ob){rb=Gb;sb=jb;break a}j0a(ob);rb=Gb;sb=jb;break a}jb=k[lb>>2]|0;if(jb)j0a(jb);jb=k[yb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}break}case 0:break;case 9:{jb=k[kb>>2]|0;x=0;yb=Ba(k[(k[jb>>2]|0)+16>>2]|0,jb|0)|0;jb=x;x=0;if(jb&1){mb=3;break a}x=0;jb=Ta(572,k[yb+4>>2]|0,0)|0;yb=x;x=0;if(yb&1){mb=3;break a}x=0;fb(321,Ha|0,jb|0,eb|0);jb=x;x=0;if(jb&1){mb=3;break a}jb=k[Ha>>2]|0;x=0;fb(140,Ia|0,272263,34);yb=x;x=0;do if(yb&1){lb=Hc()|0;Ub=lb;Vb=M}else{x=0;pa(57,(jb|0)!=0|0,Ia|0,957,269817,271980);lb=x;x=0;if(lb&1){lb=Hc()|0;Gb=M;K2a(Ia);Ub=lb;Vb=Gb;break}K2a(Ia);Gb=k[Ha+4>>2]|0;if(!Gb){oy(U);r=c;return 0}j0a(Gb);oy(U);r=c;return 0}while(0);jb=k[Ha+4>>2]|0;if(!jb){pb=Ub;qb=Vb;oy(U);Sc(pb|0)}j0a(jb);pb=Ub;qb=Vb;oy(U);Sc(pb|0);break}case 15:{if(!(b5a(eb,272298)|0)){jb=k[cb>>2]|0;k[H>>2]=1;k[H+8>>2]=65;k[H+40>>2]=1;yb=H+48|0;k[yb>>2]=-1;k[yb+4>>2]=-1;yb=H+56|0;zb=H+60|0;Gb=H+72|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[yb+16>>2]=0;x=0;Ta(539,jb+48|0,H|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;yb=M;lb=k[Gb>>2]|0;if(lb)j0a(lb);lb=k[zb>>2]|0;if(!lb){rb=yb;sb=jb;break a}j0a(lb);rb=yb;sb=jb;break a}jb=k[Gb>>2]|0;if(jb)j0a(jb);jb=k[zb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272307)|0)){jb=k[cb>>2]|0;k[G>>2]=1;k[G+8>>2]=66;k[G+40>>2]=1;zb=G+48|0;k[zb>>2]=-1;k[zb+4>>2]=-1;zb=G+56|0;Gb=G+60|0;yb=G+72|0;k[zb>>2]=0;k[zb+4>>2]=0;k[zb+8>>2]=0;k[zb+12>>2]=0;k[zb+16>>2]=0;x=0;Ta(539,jb+48|0,G|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;zb=M;lb=k[yb>>2]|0;if(lb)j0a(lb);lb=k[Gb>>2]|0;if(!lb){rb=zb;sb=jb;break a}j0a(lb);rb=zb;sb=jb;break a}jb=k[yb>>2]|0;if(jb)j0a(jb);jb=k[Gb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272317)|0)){jb=k[cb>>2]|0;k[F>>2]=1;k[F+8>>2]=68;k[F+40>>2]=1;Gb=F+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=F+56|0;yb=F+60|0;zb=F+72|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,jb+48|0,F|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;Gb=M;lb=k[zb>>2]|0;if(lb)j0a(lb);lb=k[yb>>2]|0;if(!lb){rb=Gb;sb=jb;break a}j0a(lb);rb=Gb;sb=jb;break a}jb=k[zb>>2]|0;if(jb)j0a(jb);jb=k[yb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272328)|0)){jb=k[cb>>2]|0;k[E>>2]=1;k[E+8>>2]=67;k[E+40>>2]=1;yb=E+48|0;k[yb>>2]=-1;k[yb+4>>2]=-1;yb=E+56|0;zb=E+60|0;Gb=E+72|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[yb+16>>2]=0;x=0;Ta(539,jb+48|0,E|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;yb=M;lb=k[Gb>>2]|0;if(lb)j0a(lb);lb=k[zb>>2]|0;if(!lb){rb=yb;sb=jb;break a}j0a(lb);rb=yb;sb=jb;break a}jb=k[Gb>>2]|0;if(jb)j0a(jb);jb=k[zb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272335)|0)){jb=k[cb>>2]|0;k[D>>2]=1;k[D+8>>2]=69;k[D+40>>2]=1;zb=D+48|0;k[zb>>2]=-1;k[zb+4>>2]=-1;zb=D+56|0;Gb=D+60|0;yb=D+72|0;k[zb>>2]=0;k[zb+4>>2]=0;k[zb+8>>2]=0;k[zb+12>>2]=0;k[zb+16>>2]=0;x=0;Ta(539,jb+48|0,D|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;zb=M;lb=k[yb>>2]|0;if(lb)j0a(lb);lb=k[Gb>>2]|0;if(!lb){rb=zb;sb=jb;break a}j0a(lb);rb=zb;sb=jb;break a}jb=k[yb>>2]|0;if(jb)j0a(jb);jb=k[Gb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272344)|0)){jb=k[cb>>2]|0;k[C>>2]=1;k[C+8>>2]=51;k[C+40>>2]=1;Gb=C+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=C+56|0;yb=C+60|0;zb=C+72|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,jb+48|0,C|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;Gb=M;lb=k[zb>>2]|0;if(lb)j0a(lb);lb=k[yb>>2]|0;if(!lb){rb=Gb;sb=jb;break a}j0a(lb);rb=Gb;sb=jb;break a}jb=k[zb>>2]|0;if(jb)j0a(jb);jb=k[yb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272351)|0)){jb=k[cb>>2]|0;k[B>>2]=1;k[B+8>>2]=52;k[B+40>>2]=1;yb=B+48|0;k[yb>>2]=-1;k[yb+4>>2]=-1;yb=B+56|0;zb=B+60|0;Gb=B+72|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[yb+16>>2]=0;x=0;Ta(539,jb+48|0,B|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;yb=M;lb=k[Gb>>2]|0;if(lb)j0a(lb);lb=k[zb>>2]|0;if(!lb){rb=yb;sb=jb;break a}j0a(lb);rb=yb;sb=jb;break a}jb=k[Gb>>2]|0;if(jb)j0a(jb);jb=k[zb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272357)|0)){jb=k[cb>>2]|0;k[A>>2]=1;k[A+8>>2]=50;k[A+40>>2]=1;zb=A+48|0;k[zb>>2]=-1;k[zb+4>>2]=-1;zb=A+56|0;Gb=A+60|0;yb=A+72|0;k[zb>>2]=0;k[zb+4>>2]=0;k[zb+8>>2]=0;k[zb+12>>2]=0;k[zb+16>>2]=0;x=0;Ta(539,jb+48|0,A|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;zb=M;lb=k[yb>>2]|0;if(lb)j0a(lb);lb=k[Gb>>2]|0;if(!lb){rb=zb;sb=jb;break a}j0a(lb);rb=zb;sb=jb;break a}jb=k[yb>>2]|0;if(jb)j0a(jb);jb=k[Gb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272364)|0)){jb=k[cb>>2]|0;k[z>>2]=1;k[z+8>>2]=90;k[z+40>>2]=1;Gb=z+48|0;k[Gb>>2]=-1;k[Gb+4>>2]=-1;Gb=z+56|0;yb=z+60|0;zb=z+72|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[Gb+16>>2]=0;x=0;Ta(539,jb+48|0,z|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;Gb=M;lb=k[zb>>2]|0;if(lb)j0a(lb);lb=k[yb>>2]|0;if(!lb){rb=Gb;sb=jb;break a}j0a(lb);rb=Gb;sb=jb;break a}jb=k[zb>>2]|0;if(jb)j0a(jb);jb=k[yb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272368)|0)){jb=k[cb>>2]|0;k[y>>2]=1;k[y+8>>2]=58;k[y+40>>2]=1;yb=y+48|0;k[yb>>2]=-1;k[yb+4>>2]=-1;yb=y+56|0;zb=y+60|0;Gb=y+72|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[yb+16>>2]=0;x=0;Ta(539,jb+48|0,y|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;yb=M;lb=k[Gb>>2]|0;if(lb)j0a(lb);lb=k[zb>>2]|0;if(!lb){rb=yb;sb=jb;break a}j0a(lb);rb=yb;sb=jb;break a}jb=k[Gb>>2]|0;if(jb)j0a(jb);jb=k[zb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(!(b5a(eb,272377)|0)){jb=k[cb>>2]|0;k[Ja>>2]=0;k[Ja+32>>2]=1;zb=jb+48|0;k[w>>2]=2;vb=w+8|0;wb=Ja;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));jb=w+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=w+56|0;Gb=w+60|0;yb=w+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,zb|0,w|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;lb=M;ob=k[yb>>2]|0;if(ob)j0a(ob);ob=k[Gb>>2]|0;if(!ob){rb=lb;sb=jb;break a}j0a(ob);rb=lb;sb=jb;break a}jb=k[yb>>2]|0;if(jb)j0a(jb);jb=k[Gb>>2]|0;if(jb)j0a(jb);k[v>>2]=1;k[v+8>>2]=54;k[v+40>>2]=1;jb=v+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=v+56|0;Gb=v+60|0;yb=v+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,zb|0,v|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;lb=M;ob=k[yb>>2]|0;if(ob)j0a(ob);ob=k[Gb>>2]|0;if(!ob){rb=lb;sb=jb;break a}j0a(ob);rb=lb;sb=jb;break a}jb=k[yb>>2]|0;if(jb)j0a(jb);jb=k[Gb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}if(b5a(eb,272382)|0){vb=Na;xb=vb+36|0;do{k[vb>>2]=0;vb=vb+4|0}while((vb|0)<(xb|0));zb=Na+20|0;jb=Na+24|0;k[jb>>2]=0;k[Na+28>>2]=0;k[Na+32>>2]=0;k[Na+36>>2]=-1;Gb=Na+4|0;yb=Gb+-4|0;lb=Gb+16|0;ob=Na+8|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[Na+4>>2]=20924;k[Na>>2]=20888;k[zb>>2]=20948;x=0;fb(140,Pa|0,272386,21);Ab=x;x=0;if(Ab&1){Ab=Hc()|0;Wb=Ab;Xb=M}else{k[Oa>>2]=21048;Ab=Oa+4|0;x=0;xa(604,Ab|0,Pa|0);Kb=x;x=0;if(Kb&1){Kb=Hc()|0;Yb=Kb;Zb=M}else{x=0;Kb=Ta(494,Na|0,Oa|0)|0;Pb=x;x=0;if(!(Pb&1)){x=0;nb(87,Kb|0,271980,269817,987);x=0}Kb=Hc()|0;Pb=M;k[Oa>>2]=21048;K2a(Ab);Yb=Kb;Zb=Pb}K2a(Pa);Wb=Yb;Xb=Zb}k[Gb>>2]=20980;k[yb>>2]=21008;k[lb>>2]=21032;K2a(ob);k[zb>>2]=20796;zb=k[jb>>2]|0;do if(zb){x=0;ob=Ba(k[(k[zb>>2]|0)+16>>2]|0,zb|0)|0;lb=x;x=0;if(lb&1){lb=Hc(0)|0;Fg(lb)}if(!ob)break;k[jb>>2]=0}while(0);pb=Wb;qb=Xb;oy(U);Sc(pb|0)}jb=k[cb>>2]|0;k[Ka>>2]=0;k[Ka+32>>2]=1;zb=jb+48|0;k[u>>2]=2;vb=u+8|0;wb=Ka;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));jb=u+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=u+56|0;ob=u+60|0;lb=u+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,zb|0,u|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;yb=M;Gb=k[lb>>2]|0;if(Gb)j0a(Gb);Gb=k[ob>>2]|0;if(!Gb){rb=yb;sb=jb;break a}j0a(Gb);rb=yb;sb=jb;break a}jb=k[lb>>2]|0;if(jb)j0a(jb);jb=k[ob>>2]|0;if(jb)j0a(jb);k[t>>2]=1;k[t+8>>2]=53;k[t+40>>2]=1;jb=t+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=t+56|0;ob=t+60|0;lb=t+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,zb|0,t|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;yb=M;Gb=k[lb>>2]|0;if(Gb)j0a(Gb);Gb=k[ob>>2]|0;if(!Gb){rb=yb;sb=jb;break a}j0a(Gb);rb=yb;sb=jb;break a}jb=k[lb>>2]|0;if(jb)j0a(jb);jb=k[ob>>2]|0;if(jb)j0a(jb);k[d>>2]=-1;jb=d+4|0;k[jb>>2]=k[Ma>>2];k[jb+4>>2]=k[Ma+4>>2];k[jb+8>>2]=k[Ma+8>>2];k[jb+12>>2]=k[Ma+12>>2];k[jb+16>>2]=k[Ma+16>>2];k[jb+20>>2]=k[Ma+20>>2];k[jb+24>>2]=k[Ma+24>>2];k[d+32>>2]=1;HB(d,224,0);vb=La;wb=d;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));k[s>>2]=2;vb=s+8|0;wb=La;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));jb=s+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=s+56|0;ob=s+60|0;lb=s+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,zb|0,s|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;yb=M;Gb=k[lb>>2]|0;if(Gb)j0a(Gb);Gb=k[ob>>2]|0;if(!Gb){rb=yb;sb=jb;break a}j0a(Gb);rb=yb;sb=jb;break a}jb=k[lb>>2]|0;if(jb)j0a(jb);jb=k[ob>>2]|0;if(jb)j0a(jb);k[q>>2]=1;k[q+8>>2]=22;k[q+40>>2]=1;jb=q+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=q+56|0;ob=q+60|0;lb=q+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,zb|0,q|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;yb=M;Gb=k[lb>>2]|0;if(Gb)j0a(Gb);Gb=k[ob>>2]|0;if(!Gb){rb=yb;sb=jb;break a}j0a(Gb);rb=yb;sb=jb;break a}jb=k[lb>>2]|0;if(jb)j0a(jb);jb=k[ob>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}case 8:{jb=k[kb>>2]|0;x=0;ob=Ba(k[(k[jb>>2]|0)+16>>2]|0,jb|0)|0;jb=x;x=0;if(jb&1){mb=3;break a}jb=iDa(k[ob+4>>2]|0,168,6720,0)|0;if(!jb){x=0;hb(49);x=0;mb=3;break a}switch(k[jb+24>>2]|0){case 0:{x=0;ob=Ta(597,jb|0,eb|0)|0;lb=x;x=0;if(lb&1){mb=3;break a}lb=(k[cb>>2]|0)+48|0;k[p>>2]=2;vb=p+8|0;wb=ob;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));zb=p+48|0;k[zb>>2]=-1;k[zb+4>>2]=-1;zb=p+56|0;yb=p+60|0;Gb=p+72|0;k[zb>>2]=0;k[zb+4>>2]=0;k[zb+8>>2]=0;k[zb+12>>2]=0;k[zb+16>>2]=0;x=0;Ta(539,lb|0,p|0)|0;zb=x;x=0;if(zb&1){zb=Hc()|0;Pb=M;Kb=k[Gb>>2]|0;if(Kb)j0a(Kb);Kb=k[yb>>2]|0;if(!Kb){rb=Pb;sb=zb;break a}j0a(Kb);rb=Pb;sb=zb;break a}zb=k[Gb>>2]|0;if(zb)j0a(zb);zb=k[yb>>2]|0;if(zb)j0a(zb);k[o>>2]=1;k[o+8>>2]=1;k[o+40>>2]=1;zb=o+48|0;k[zb>>2]=-1;k[zb+4>>2]=-1;zb=o+56|0;yb=o+60|0;Gb=o+72|0;k[zb>>2]=0;k[zb+4>>2]=0;k[zb+8>>2]=0;k[zb+12>>2]=0;k[zb+16>>2]=0;x=0;Ta(539,lb|0,o|0)|0;zb=x;x=0;if(zb&1){zb=Hc()|0;Pb=M;Kb=k[Gb>>2]|0;if(Kb)j0a(Kb);Kb=k[yb>>2]|0;if(!Kb){rb=Pb;sb=zb;break a}j0a(Kb);rb=Pb;sb=zb;break a}zb=k[Gb>>2]|0;if(zb)j0a(zb);zb=k[yb>>2]|0;if(zb)j0a(zb);zb=k[ob+40>>2]|0;k[n>>2]=2;k[n+8>>2]=zb;zb=n+12|0;k[zb>>2]=k[Qa>>2];k[zb+4>>2]=k[Qa+4>>2];k[zb+8>>2]=k[Qa+8>>2];k[zb+12>>2]=k[Qa+12>>2];k[zb+16>>2]=k[Qa+16>>2];k[zb+20>>2]=k[Qa+20>>2];k[zb+24>>2]=k[Qa+24>>2];k[n+40>>2]=1;zb=n+48|0;k[zb>>2]=-1;k[zb+4>>2]=-1;zb=n+56|0;yb=n+60|0;Gb=n+72|0;k[zb>>2]=0;k[zb+4>>2]=0;k[zb+8>>2]=0;k[zb+12>>2]=0;k[zb+16>>2]=0;x=0;Ta(539,lb|0,n|0)|0;zb=x;x=0;if(zb&1){zb=Hc()|0;Pb=M;Kb=k[Gb>>2]|0;if(Kb)j0a(Kb);Kb=k[yb>>2]|0;if(!Kb){rb=Pb;sb=zb;break a}j0a(Kb);rb=Pb;sb=zb;break a}zb=k[Gb>>2]|0;if(zb)j0a(zb);zb=k[yb>>2]|0;if(zb)j0a(zb);x=0;zb=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;yb=x;x=0;if(yb&1){mb=3;break a}x=0;fb(348,a|0,b|0,k[zb+4>>2]|0);zb=x;x=0;if(zb&1){mb=3;break a}oy(U);r=c;return 0}case 2:{zb=k[cb>>2]|0;x=0;fb(322,Ra|0,jb|0,eb|0);yb=x;x=0;if(yb&1){mb=3;break a}yb=zb+48|0;k[m>>2]=2;vb=m+8|0;wb=Ra;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));jb=m+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=m+56|0;lb=m+60|0;ob=m+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,yb|0,m|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;zb=M;Gb=k[ob>>2]|0;if(Gb)j0a(Gb);Gb=k[lb>>2]|0;if(!Gb){rb=zb;sb=jb;break a}j0a(Gb);rb=zb;sb=jb;break a}jb=k[ob>>2]|0;if(jb)j0a(jb);jb=k[lb>>2]|0;if(jb)j0a(jb);k[l>>2]=1;k[l+8>>2]=1;k[l+40>>2]=1;jb=l+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=l+56|0;lb=l+60|0;ob=l+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,yb|0,l|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;zb=M;Gb=k[ob>>2]|0;if(Gb)j0a(Gb);Gb=k[lb>>2]|0;if(!Gb){rb=zb;sb=jb;break a}j0a(Gb);rb=zb;sb=jb;break a}jb=k[ob>>2]|0;if(jb)j0a(jb);jb=k[lb>>2]|0;if(jb)j0a(jb);x=0;jb=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;lb=x;x=0;if(lb&1){mb=3;break a}x=0;fb(349,a|0,b|0,k[jb+4>>2]|0);jb=x;x=0;if(jb&1){mb=3;break a}oy(U);r=c;return 0}default:{x=0;fb(140,Sa|0,272408,33);jb=x;x=0;if(jb&1){mb=3;break a}x=0;pa(57,0,Sa|0,1008,269817,271980);jb=x;x=0;if(jb&1){jb=Hc()|0;lb=M;K2a(Sa);pb=jb;qb=lb;oy(U);Sc(pb|0)}else{K2a(Sa);oy(U);r=c;return 0}}}break}case 10:{lb=k[kb>>2]|0;x=0;jb=Ba(k[(k[lb>>2]|0)+16>>2]|0,lb|0)|0;lb=x;x=0;if(lb&1){mb=3;break a}lb=iDa(k[jb+4>>2]|0,168,6736,0)|0;if(!lb){x=0;hb(49);x=0;mb=3;break a}jb=k[cb>>2]|0;x=0;ob=Ta(606,lb|0,k[db>>2]|0)|0;lb=x;x=0;if(lb&1){mb=3;break a}k[j>>2]=2;k[j+8>>2]=ob;ob=j+12|0;k[ob>>2]=k[Ua>>2];k[ob+4>>2]=k[Ua+4>>2];k[ob+8>>2]=k[Ua+8>>2];k[ob+12>>2]=k[Ua+12>>2];k[ob+16>>2]=k[Ua+16>>2];k[ob+20>>2]=k[Ua+20>>2];k[ob+24>>2]=k[Ua+24>>2];k[j+40>>2]=1;ob=j+48|0;k[ob>>2]=-1;k[ob+4>>2]=-1;ob=j+56|0;lb=j+60|0;zb=j+72|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[ob+16>>2]=0;x=0;Ta(539,jb+48|0,j|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;ob=M;Gb=k[zb>>2]|0;if(Gb)j0a(Gb);Gb=k[lb>>2]|0;if(!Gb){rb=ob;sb=jb;break a}j0a(Gb);rb=ob;sb=jb;break a}jb=k[zb>>2]|0;if(jb)j0a(jb);jb=k[lb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}case 5:{jb=k[kb>>2]|0;x=0;lb=Ba(k[(k[jb>>2]|0)+16>>2]|0,jb|0)|0;jb=x;x=0;if(jb&1){mb=3;break a}jb=iDa(k[lb+4>>2]|0,168,6704,0)|0;if(!jb){x=0;hb(49);x=0;mb=3;break a}if(b5a(eb,278976)|0){if(b5a(eb,272442)|0){x=0;fb(140,Xa|0,272501,21);lb=x;x=0;if(lb&1){mb=3;break a}x=0;pa(57,0,Xa|0,1050,269817,271980);lb=x;x=0;if(lb&1){lb=Hc()|0;zb=M;K2a(Xa);pb=lb;qb=zb;oy(U);Sc(pb|0)}else{K2a(Xa);oy(U);r=c;return 0}}x=0;zb=Ba(k[(k[jb>>2]|0)+36>>2]|0,jb|0)|0;lb=x;x=0;if(lb&1){mb=3;break a}if(zb)_b=(k[jb+24>>2]|0)==0;else _b=0;x=0;fb(140,Wa|0,272447,53);zb=x;x=0;if(zb&1){mb=3;break a}x=0;pa(57,_b|0,Wa|0,1047,269817,271980);zb=x;x=0;if(zb&1){zb=Hc()|0;lb=M;K2a(Wa);pb=zb;qb=lb;oy(U);Sc(pb|0)}else{K2a(Wa);oy(U);r=c;return 0}}x=0;lb=Ba(k[(k[jb>>2]|0)+36>>2]|0,jb|0)|0;zb=x;x=0;if(zb&1){mb=3;break a}if(!lb){k[Va>>2]=k[cb>>2];x=0;xa(841,Va|0,jb|0);lb=x;x=0;if(lb&1){mb=3;break a}lb=(k[cb>>2]|0)+48|0;k[h>>2]=2;vb=h+8|0;wb=jb+48|0;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));yb=h+48|0;k[yb>>2]=-1;k[yb+4>>2]=-1;yb=h+56|0;zb=h+60|0;ob=h+72|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[yb+16>>2]=0;x=0;Ta(539,lb|0,h|0)|0;yb=x;x=0;if(yb&1){yb=Hc()|0;Gb=M;Pb=k[ob>>2]|0;if(Pb)j0a(Pb);Pb=k[zb>>2]|0;if(!Pb){rb=Gb;sb=yb;break a}j0a(Pb);rb=Gb;sb=yb;break a}yb=k[ob>>2]|0;if(yb)j0a(yb);yb=k[zb>>2]|0;if(yb)j0a(yb);oy(U);r=c;return 0}switch(k[jb+24>>2]|0){case 1:{yb=k[cb>>2]|0;k[g>>2]=1;k[g+8>>2]=144;k[g+40>>2]=1;zb=g+48|0;k[zb>>2]=-1;k[zb+4>>2]=-1;zb=g+56|0;ob=g+60|0;Gb=g+72|0;Pb=yb+48|0;k[zb>>2]=0;k[zb+4>>2]=0;k[zb+8>>2]=0;k[zb+12>>2]=0;k[zb+16>>2]=0;x=0;Ta(539,Pb|0,g|0)|0;zb=x;x=0;if(zb&1){zb=Hc()|0;yb=M;Kb=k[Gb>>2]|0;if(Kb)j0a(Kb);Kb=k[ob>>2]|0;if(!Kb){rb=yb;sb=zb;break a}j0a(Kb);rb=yb;sb=zb;break a}zb=k[Gb>>2]|0;if(zb)j0a(zb);zb=k[ob>>2]|0;if(zb)j0a(zb);k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;zb=f+48|0;k[zb>>2]=-1;k[zb+4>>2]=-1;zb=f+56|0;ob=f+60|0;Gb=f+72|0;k[zb>>2]=0;k[zb+4>>2]=0;k[zb+8>>2]=0;k[zb+12>>2]=0;k[zb+16>>2]=0;x=0;Ta(539,Pb|0,f|0)|0;Pb=x;x=0;if(Pb&1){Pb=Hc()|0;zb=M;yb=k[Gb>>2]|0;if(yb)j0a(yb);yb=k[ob>>2]|0;if(!yb){rb=zb;sb=Pb;break a}j0a(yb);rb=zb;sb=Pb;break a}Pb=k[Gb>>2]|0;if(Pb)j0a(Pb);Pb=k[ob>>2]|0;if(Pb)j0a(Pb);oy(U);r=c;return 0}case 0:{x=0;fb(350,a|0,b|0,jb|0);Pb=x;x=0;if(Pb&1){mb=3;break a}oy(U);r=c;return 0}case 2:{Pb=k[cb>>2]|0;k[e>>2]=1;k[e+8>>2]=81;k[e+40>>2]=1;ob=e+48|0;k[ob>>2]=-1;k[ob+4>>2]=-1;ob=e+56|0;Gb=e+60|0;zb=e+72|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[ob+16>>2]=0;x=0;Ta(539,Pb+48|0,e|0)|0;Pb=x;x=0;if(Pb&1){Pb=Hc()|0;ob=M;yb=k[zb>>2]|0;if(yb)j0a(yb);yb=k[Gb>>2]|0;if(!yb){rb=ob;sb=Pb;break a}j0a(yb);rb=ob;sb=Pb;break a}Pb=k[zb>>2]|0;if(Pb)j0a(Pb);Pb=k[Gb>>2]|0;if(Pb)j0a(Pb);oy(U);r=c;return 0}default:{oy(U);r=c;return 0}}break}case 6:{Pb=k[kb>>2]|0;x=0;Gb=Ba(k[(k[Pb>>2]|0)+16>>2]|0,Pb|0)|0;Pb=x;x=0;if(Pb&1){mb=3;break a}Pb=iDa(k[Gb+4>>2]|0,168,6656,0)|0;if(!Pb){x=0;hb(49);x=0;mb=3;break a}k[Ya>>2]=k[cb>>2];x=0;xa(841,Ya|0,Pb|0);Gb=x;x=0;if(Gb&1){mb=3;break a}if(b5a(eb,278976)|0){x=0;fb(140,_a|0,272523,27);Gb=x;x=0;if(Gb&1){mb=3;break a}x=0;pa(57,0,_a|0,1060,269817,271980);Gb=x;x=0;if(Gb&1){Gb=Hc()|0;zb=M;K2a(_a);pb=Gb;qb=zb;oy(U);Sc(pb|0)}else{K2a(_a);oy(U);r=c;return 0}}zb=k[cb>>2]|0;Gb=k[Pb+24>>2]|0;Pb=(Gb|0)<0;k[Za>>2]=Pb?0-Gb|0:Gb;k[Za+32>>2]=1;if(Pb)NC(Za);Pb=zb+48|0;k[d>>2]=2;vb=d+8|0;wb=Za;xb=vb+40|0;do{k[vb>>2]=k[wb>>2];vb=vb+4|0;wb=wb+4|0}while((vb|0)<(xb|0));jb=d+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=d+56|0;lb=d+60|0;zb=d+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,Pb|0,d|0)|0;jb=x;x=0;if(jb&1){jb=Hc()|0;Gb=M;ob=k[zb>>2]|0;if(ob)j0a(ob);ob=k[lb>>2]|0;if(!ob){rb=Gb;sb=jb;break a}j0a(ob);rb=Gb;sb=jb;break a}jb=k[zb>>2]|0;if(jb)j0a(jb);jb=k[lb>>2]|0;if(jb)j0a(jb);oy(U);r=c;return 0}default:{vb=$a;xb=vb+36|0;do{k[vb>>2]=0;vb=vb+4|0}while((vb|0)<(xb|0));Pb=$a+20|0;jb=$a+24|0;k[jb>>2]=0;k[$a+28>>2]=0;k[$a+32>>2]=0;k[$a+36>>2]=-1;lb=$a+4|0;zb=lb+-4|0;Gb=lb+16|0;ob=$a+8|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[$a+4>>2]=20924;k[$a>>2]=20888;k[Pb>>2]=20948;x=0;fb(140,bb|0,272551,30);yb=x;x=0;if(yb&1){yb=Hc()|0;$b=yb;ac=M}else{k[ab>>2]=21048;yb=ab+4|0;x=0;xa(604,yb|0,bb|0);Kb=x;x=0;if(Kb&1){Kb=Hc()|0;bc=Kb;cc=M}else{x=0;Kb=Ta(494,$a|0,ab|0)|0;Ab=x;x=0;if(!(Ab&1)){x=0;nb(87,Kb|0,271980,269817,1064);x=0}Kb=Hc()|0;Ab=M;k[ab>>2]=21048;K2a(yb);bc=Kb;cc=Ab}K2a(bb);$b=bc;ac=cc}k[lb>>2]=20980;k[zb>>2]=21008;k[Gb>>2]=21032;K2a(ob);k[Pb>>2]=20796;Pb=k[jb>>2]|0;if(Pb){x=0;ob=Ba(k[(k[Pb>>2]|0)+16>>2]|0,Pb|0)|0;Pb=x;x=0;if(Pb&1){Pb=Hc(0)|0;Fg(Pb)}if(ob)k[jb>>2]=0}pb=$b;qb=ac;oy(U);Sc(pb|0)}}if(!(b5a(eb,272194)|0)){k[va>>2]=k[cb>>2];jb=k[kb>>2]|0;x=0;ob=Ba(k[(k[jb>>2]|0)+16>>2]|0,jb|0)|0;jb=x;x=0;if(jb&1){mb=3;break}jb=k[ob+4>>2]|0;x=0;fb(247,wa|0,0,2);ob=x;x=0;if(ob&1){mb=3;break}x=0;nb(137,va|0,jb|0,wa|0,1);jb=x;x=0;if(jb&1){jb=Hc()|0;ob=M;k[wa>>2]=20456;xh(wa+12|0,k[wa+16>>2]|0);Pb=k[wa+8>>2]|0;if(!Pb){pb=jb;qb=ob;oy(U);Sc(pb|0)}k0a(Pb);pb=jb;qb=ob;oy(U);Sc(pb|0)}k[wa>>2]=20456;xh(wa+12|0,k[wa+16>>2]|0);ob=k[wa+8>>2]|0;if(ob)k0a(ob);ob=k[cb>>2]|0;k[J>>2]=1;k[J+8>>2]=49;k[J+40>>2]=1;jb=J+48|0;k[jb>>2]=-1;k[jb+4>>2]=-1;jb=J+56|0;Pb=J+60|0;Gb=J+72|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[jb+16>>2]=0;x=0;Ta(539,ob+48|0,J|0)|0;ob=x;x=0;if(ob&1){ob=Hc()|0;jb=M;zb=k[Gb>>2]|0;if(zb)j0a(zb);zb=k[Pb>>2]|0;if(!zb){rb=jb;sb=ob;break}j0a(zb);rb=jb;sb=ob;break}ob=k[Gb>>2]|0;if(ob)j0a(ob);ob=k[Pb>>2]|0;if(ob)j0a(ob);oy(U);r=c;return 0}x=0;fb(140,za|0,272202,4);ob=x;x=0;if(!(ob&1)){ob=za+12|0;x=0;fb(140,ob|0,278991,4);Pb=x;x=0;if(!(Pb&1)){Pb=za+24|0;x=0;fb(140,Pb|0,272207,8);Gb=x;x=0;if(!(Gb&1)){Gb=za+36|0;x=0;fb(140,Gb|0,272216,12);jb=x;x=0;if(jb&1)dc=Gb;else{k[ya+4>>2]=0;k[ya+8>>2]=0;Gb=ya+4|0;k[ya>>2]=Gb;k[I>>2]=Gb;x=0;k[d>>2]=k[I>>2];Fa(134,ya|0,d|0,za|0)|0;jb=x;x=0;if(((!(jb&1)?(k[I>>2]=Gb,x=0,k[d>>2]=k[I>>2],Fa(134,ya|0,d|0,za+12|0)|0,jb=x,x=0,!(jb&1)):0)?(k[I>>2]=Gb,x=0,k[d>>2]=k[I>>2],Fa(134,ya|0,d|0,za+24|0)|0,jb=x,x=0,!(jb&1)):0)?(k[I>>2]=Gb,x=0,k[d>>2]=k[I>>2],Fa(134,ya|0,d|0,za+36|0)|0,jb=x,x=0,!(jb&1)):0){jb=k[Gb>>2]|0;do if(jb){zb=i[eb>>0]|0;lb=(zb&1)==0;Ab=lb?(zb&255)>>>1:k[eb+4>>2]|0;zb=lb?eb+1|0:k[eb+8>>2]|0;lb=jb;while(1){Kb=lb+16|0;yb=i[Kb>>0]|0;ec=(yb&1)==0;fc=ec?(yb&255)>>>1:k[lb+20>>2]|0;yb=ec?Kb+1|0:k[lb+24>>2]|0;Kb=fc>>>0>>0;ec=ZLa(zb,yb,Kb?fc:Ab)|0;gc=Ab>>>0>>0;if((((ec|0)==0?(gc?-2147483648:0):ec)|0)<0)hc=lb;else{ec=ZLa(yb,zb,gc?Ab:fc)|0;if((((ec|0)==0?(Kb?-2147483648:0):ec)|0)>=0)break;hc=lb+4|0}lb=k[hc>>2]|0;if(!lb){mb=247;break}}if((mb|0)==247){Ws(ya,jb);K2a(za+36|0);K2a(za+24|0);K2a(za+12|0);K2a(za);break}Ws(ya,jb);K2a(za+36|0);K2a(za+24|0);K2a(za+12|0);K2a(za);k[Aa>>2]=k[cb>>2];lb=k[kb>>2]|0;x=0;Ab=Ba(k[(k[lb>>2]|0)+16>>2]|0,lb|0)|0;lb=x;x=0;if(lb&1){mb=3;break a}lb=k[Ab+4>>2]|0;x=0;fb(247,Ca|0,0,2);Ab=x;x=0;if(Ab&1){mb=3;break a}x=0;nb(137,Aa|0,lb|0,Ca|0,1);lb=x;x=0;if(lb&1){lb=Hc()|0;Ab=M;k[Ca>>2]=20456;xh(Ca+12|0,k[Ca+16>>2]|0);zb=k[Ca+8>>2]|0;if(!zb){pb=lb;qb=Ab;oy(U);Sc(pb|0)}k0a(zb);pb=lb;qb=Ab;oy(U);Sc(pb|0)}else{k[Ca>>2]=20456;xh(Ca+12|0,k[Ca+16>>2]|0);Ab=k[Ca+8>>2]|0;if(!Ab){oy(U);r=c;return 0}k0a(Ab);oy(U);r=c;return 0}}else{Ws(ya,jb);K2a(za+36|0);K2a(za+24|0);K2a(za+12|0);K2a(za)}while(0);vb=Da;xb=vb+36|0;do{k[vb>>2]=0;vb=vb+4|0}while((vb|0)<(xb|0));jb=Da+20|0;kb=Da+24|0;k[kb>>2]=0;k[Da+28>>2]=0;k[Da+32>>2]=0;k[Da+36>>2]=-1;Ab=Da+4|0;lb=Ab+-4|0;zb=Ab+16|0;ec=Da+8|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[Da+4>>2]=20924;k[Da>>2]=20888;k[jb>>2]=20948;x=0;fb(140,Ga|0,272229,33);Kb=x;x=0;if(Kb&1){Kb=Hc()|0;ic=Kb;jc=M}else{k[Ea>>2]=21048;Kb=Ea+4|0;x=0;xa(604,Kb|0,Ga|0);fc=x;x=0;if(fc&1){fc=Hc()|0;kc=fc;lc=M}else{x=0;fc=Ta(494,Da|0,Ea|0)|0;gc=x;x=0;if(!(gc&1)){x=0;nb(87,fc|0,271980,269817,953);x=0}fc=Hc()|0;gc=M;k[Ea>>2]=21048;K2a(Kb);kc=fc;lc=gc}K2a(Ga);ic=kc;jc=lc}k[Ab>>2]=20980;k[lb>>2]=21008;k[zb>>2]=21032;K2a(ec);k[jb>>2]=20796;jb=k[kb>>2]|0;do if(jb){x=0;ec=Ba(k[(k[jb>>2]|0)+16>>2]|0,jb|0)|0;zb=x;x=0;if(zb&1){zb=Hc(0)|0;Fg(zb)}if(!ec)break;k[kb>>2]=0}while(0);pb=ic;qb=jc;oy(U);Sc(pb|0)}kb=Hc()|0;jb=M;Ws(ya,k[Gb>>2]|0);K2a(za+36|0);K2a(za+24|0);K2a(za+12|0);K2a(za);pb=kb;qb=jb;oy(U);Sc(pb|0)}}else dc=Pb}else dc=ob}else dc=za;jb=Hc()|0;kb=M;if((za|0)==(dc|0)){pb=jb;qb=kb;oy(U);Sc(pb|0)}else mc=dc;do{mc=mc+-12|0;K2a(mc)}while((mc|0)!=(za|0));pb=jb;qb=kb;oy(U);Sc(pb|0)}else mb=3}else mb=3}else mb=3;while(0);if((mb|0)==3){mb=Hc()|0;rb=M;sb=mb}pb=sb;qb=rb;oy(U);Sc(pb|0);return 0}function gna(a,b){a=a|0;b=b|0;var c=0;c=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;wna(a,b,k[c>>2]|0);return}function hna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0;c=r;r=r+1808|0;d=c+1384|0;e=c+1304|0;f=c+1224|0;g=c+1144|0;h=c+1064|0;j=c+984|0;l=c+904|0;m=c+824|0;n=c+1792|0;o=c+1780|0;p=c+1768|0;q=c+744|0;s=c+664|0;t=c+584|0;u=c+504|0;v=c+424|0;w=c+344|0;y=c+320|0;z=c+1756|0;A=c+1752|0;B=c+1748|0;C=c+1736|0;D=c+1724|0;E=c+1720|0;F=c+1688|0;G=c+1680|0;H=c+280|0;I=c+1668|0;J=c+1664|0;K=c+1632|0;L=c+240|0;N=c+200|0;O=c+1620|0;P=c+1616|0;Q=c+1584|0;R=c+1580|0;S=c+1568|0;T=c+1804|0;U=c+1556|0;V=c+1552|0;W=c+1540|0;X=c+1536|0;Y=c+1504|0;Z=c+160|0;_=c+80|0;$=c+40|0;aa=c;ba=c+1488|0;ca=c+1476|0;da=c+1464|0;ea=a+8|0;xka(y,k[ea>>2]|0,b);fa=b+24|0;ga=k[fa>>2]|0;x=0;xa(k[(k[ga>>2]|0)+12>>2]|0,ga|0,a|0);ga=x;x=0;a:do if((!(ga&1)?(ha=k[fa>>2]|0,x=0,ia=Ba(k[(k[ha>>2]|0)+16>>2]|0,ha|0)|0,ha=x,x=0,!(ha&1)):0)?(ha=k[ia+4>>2]|0,x=0,ia=Ba(k[k[ha>>2]>>2]|0,ha|0)|0,ja=x,x=0,!(ja&1)):0){if((ia|0)==12){ia=iDa(ha,168,6784,0)|0;if(!ia){x=0;hb(49);x=0;ka=59;break}ja=k[ia+24>>2]|0;la=k[ia+28>>2]|0;ia=(la|0)==0;if(!ia)h0a(la);ma=b+32|0;na=k[ma>>2]|0;x=0;fb(140,z|0,272582,26);oa=x;x=0;b:do if(!(oa&1)){x=0;pa(57,(na|0)!=0|0,z|0,1080,269817,272609);qa=x;x=0;if(qa&1){qa=Hc()|0;ra=M;K2a(z);sa=qa;ta=ra;break}K2a(z);ra=ja;x=0;qa=Ba(k[(k[ja>>2]|0)+36>>2]|0,ra|0)|0;ua=x;x=0;if(!(ua&1)){c:do if(!qa){ua=k[ea>>2]|0;k[H>>2]=0;k[H+32>>2]=1;wa=ua+48|0;k[v>>2]=2;ya=v+8|0;za=H;Aa=ya+40|0;do{k[ya>>2]=k[za>>2];ya=ya+4|0;za=za+4|0}while((ya|0)<(Aa|0));ua=v+48|0;k[ua>>2]=-1;k[ua+4>>2]=-1;ua=v+56|0;Ca=v+60|0;Da=v+72|0;k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua+12>>2]=0;k[ua+16>>2]=0;x=0;Ta(539,wa|0,v|0)|0;ua=x;x=0;if(ua&1){ua=Hc()|0;Ea=M;Fa=k[Da>>2]|0;if(Fa)j0a(Fa);Fa=k[Ca>>2]|0;if(!Fa){Ga=Ea;Ha=ua;ka=62;break b}j0a(Fa);Ga=Ea;Ha=ua;ka=62;break b}ua=k[Da>>2]|0;if(ua)j0a(ua);ua=k[Ca>>2]|0;if(ua)j0a(ua);x=0;fb(351,a|0,ra|0,k[ma>>2]|0);ua=x;x=0;if(ua&1){ka=61;break b}ua=k[ea>>2]|0;k[u>>2]=1;k[u+8>>2]=144;k[u+40>>2]=1;Ca=u+48|0;k[Ca>>2]=-1;k[Ca+4>>2]=-1;Ca=u+56|0;Da=u+60|0;Ea=u+72|0;k[Ca>>2]=0;k[Ca+4>>2]=0;k[Ca+8>>2]=0;k[Ca+12>>2]=0;k[Ca+16>>2]=0;x=0;Ta(539,ua+48|0,u|0)|0;ua=x;x=0;if(ua&1){ua=Hc()|0;Ca=M;Fa=k[Ea>>2]|0;if(Fa)j0a(Fa);Fa=k[Da>>2]|0;if(!Fa){Ga=Ca;Ha=ua;ka=62;break b}j0a(Fa);Ga=Ca;Ha=ua;ka=62;break b}ua=k[Ea>>2]|0;if(ua)j0a(ua);ua=k[Da>>2]|0;if(ua)j0a(ua);ua=k[10454]|0;x=0;fb(140,I|0,329672,0);Da=x;x=0;if(Da&1){ka=61;break b}x=0;pa(57,ua>>>0>63|0,I|0,1102,269817,272609);ua=x;x=0;if(ua&1){ua=Hc()|0;Da=M;K2a(I);sa=ua;ta=Da;break b}K2a(I);k[J>>2]=k[ea>>2];x=0;fb(247,K|0,256,0);Da=x;x=0;if(Da&1){ka=61;break b}x=0;fb(320,J|0,K|0,1);Da=x;x=0;if(Da&1){Da=Hc()|0;ua=M;k[K>>2]=20456;xh(K+12|0,k[K+16>>2]|0);Ea=k[K+8>>2]|0;if(!Ea){sa=Da;ta=ua;break b}k0a(Ea);sa=Da;ta=ua;break b}k[K>>2]=20456;xh(K+12|0,k[K+16>>2]|0);ua=k[K+8>>2]|0;if(ua)k0a(ua);ua=k[ea>>2]|0;k[L>>2]=0;k[L+32>>2]=1;Da=ua+48|0;k[t>>2]=2;ya=t+8|0;za=L;Aa=ya+40|0;do{k[ya>>2]=k[za>>2];ya=ya+4|0;za=za+4|0}while((ya|0)<(Aa|0));wa=t+48|0;k[wa>>2]=-1;k[wa+4>>2]=-1;wa=t+56|0;ua=t+60|0;Ea=t+72|0;k[wa>>2]=0;k[wa+4>>2]=0;k[wa+8>>2]=0;k[wa+12>>2]=0;k[wa+16>>2]=0;x=0;Ta(539,Da|0,t|0)|0;wa=x;x=0;if(wa&1){wa=Hc()|0;Ca=M;Fa=k[Ea>>2]|0;if(Fa)j0a(Fa);Fa=k[ua>>2]|0;if(!Fa){Ga=Ca;Ha=wa;ka=62;break b}j0a(Fa);Ga=Ca;Ha=wa;ka=62;break b}wa=k[Ea>>2]|0;if(wa)j0a(wa);wa=k[ua>>2]|0;if(wa)j0a(wa)}else{wa=k[ma>>2]|0;x=0;xa(k[(k[wa>>2]|0)+12>>2]|0,wa|0,a|0);wa=x;x=0;if(wa&1){ka=61;break b}k[A>>2]=k[ea>>2];x=0;va(1508,A|0);wa=x;x=0;if(wa&1){ka=61;break b}k[B>>2]=k[ea>>2];wa=k[ma>>2]|0;x=0;ua=Ba(k[(k[wa>>2]|0)+16>>2]|0,wa|0)|0;wa=x;x=0;if(wa&1){wa=Hc()|0;sa=wa;ta=M;break b}wa=k[ua+4>>2]|0;Ea=k[ua+8>>2]|0;ua=(Ea|0)==0;if(!ua)h0a(Ea);k[C>>2]=0;Ca=C+4|0;k[Ca>>2]=0;k[C+8>>2]=0;x=0;Fa=Ba(563,8)|0;Ia=x;x=0;do if(Ia&1){Ja=Hc()|0;Ka=Ja;Ma=M}else{k[Ca>>2]=Fa;k[C>>2]=Fa;k[C+8>>2]=Fa+8;k[Fa>>2]=wa;k[Fa+4>>2]=Ea;if(ua)Na=Fa;else{h0a(Ea);Na=k[Ca>>2]|0}k[Ca>>2]=Na+8;if(!ia)h0a(la);k[D>>2]=0;Ja=D+4|0;k[Ja>>2]=0;k[D+8>>2]=0;x=0;Oa=Ba(563,8)|0;Pa=x;x=0;do if(!(Pa&1)){k[Ja>>2]=Oa;k[D>>2]=Oa;k[D+8>>2]=Oa+8;k[Oa>>2]=ja;k[Oa+4>>2]=la;if(ia)Qa=Oa;else{h0a(la);Qa=k[Ja>>2]|0}k[Ja>>2]=Qa+8;x=0;La(59,B|0,C|0,D|0,0,1,0);Ra=x;x=0;if(Ra&1){Ra=Hc()|0;Sa=M;Ua=k[D>>2]|0;if(!Ua){Va=Ra;Wa=Sa;break}Xa=k[Ja>>2]|0;if((Xa|0)==(Ua|0))Ya=Ua;else{Za=Xa;while(1){Xa=Za+-8|0;k[Ja>>2]=Xa;_a=k[Za+-4>>2]|0;if(!_a)$a=Xa;else{j0a(_a);$a=k[Ja>>2]|0}if(($a|0)==(Ua|0))break;else Za=$a}Ya=k[D>>2]|0}OBa(Ya);Va=Ra;Wa=Sa;break}Za=k[D>>2]|0;if(Za){Ua=k[Ja>>2]|0;if((Ua|0)==(Za|0))ab=Za;else{_a=Ua;while(1){Ua=_a+-8|0;k[Ja>>2]=Ua;Xa=k[_a+-4>>2]|0;if(!Xa)bb=Ua;else{j0a(Xa);bb=k[Ja>>2]|0}if((bb|0)==(Za|0))break;else _a=bb}ab=k[D>>2]|0}OBa(ab)}if(!ia)j0a(la);_a=k[C>>2]|0;if(_a){Za=k[Ca>>2]|0;if((Za|0)==(_a|0))cb=_a;else{Sa=Za;while(1){Za=Sa+-8|0;k[Ca>>2]=Za;Ra=k[Sa+-4>>2]|0;if(!Ra)db=Za;else{j0a(Ra);db=k[Ca>>2]|0}if((db|0)==(_a|0))break;else Sa=db}cb=k[C>>2]|0}OBa(cb)}if(!ua)j0a(Ea);Sa=k[ea>>2]|0;k[w>>2]=1;k[w+8>>2]=144;k[w+40>>2]=1;_a=w+48|0;k[_a>>2]=-1;k[_a+4>>2]=-1;_a=w+56|0;Ra=w+60|0;Za=w+72|0;k[_a>>2]=0;k[_a+4>>2]=0;k[_a+8>>2]=0;k[_a+12>>2]=0;k[_a+16>>2]=0;x=0;Ta(539,Sa+48|0,w|0)|0;Sa=x;x=0;if(Sa&1){Sa=Hc()|0;_a=M;Xa=k[Za>>2]|0;if(Xa)j0a(Xa);Xa=k[Ra>>2]|0;if(!Xa){Ga=_a;Ha=Sa;ka=62;break b}j0a(Xa);Ga=_a;Ha=Sa;ka=62;break b}Sa=k[Za>>2]|0;if(Sa)j0a(Sa);Sa=k[Ra>>2]|0;if(Sa)j0a(Sa);k[E>>2]=k[ea>>2];x=0;fb(247,F|0,256,0);Sa=x;x=0;if(Sa&1){ka=61;break b}x=0;fb(320,E|0,F|0,1);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;Ra=M;k[F>>2]=20456;xh(F+12|0,k[F+16>>2]|0);Za=k[F+8>>2]|0;if(!Za){sa=Sa;ta=Ra;break b}k0a(Za);sa=Sa;ta=Ra;break b}k[F>>2]=20456;xh(F+12|0,k[F+16>>2]|0);Ra=k[F+8>>2]|0;if(Ra)k0a(Ra);k[G>>2]=k[ea>>2];x=0;va(1517,G|0);Ra=x;x=0;if(Ra&1){ka=61;break b}else break c}else{Ra=Hc()|0;Va=Ra;Wa=M}while(0);if(!ia)j0a(la);Ja=k[C>>2]|0;if(!Ja){Ka=Va;Ma=Wa;break}Oa=k[Ca>>2]|0;if((Oa|0)==(Ja|0))eb=Ja;else{Pa=Oa;while(1){Oa=Pa+-8|0;k[Ca>>2]=Oa;Ra=k[Pa+-4>>2]|0;if(!Ra)gb=Oa;else{j0a(Ra);gb=k[Ca>>2]|0}if((gb|0)==(Ja|0))break;else Pa=gb}eb=k[C>>2]|0}OBa(eb);Ka=Va;Ma=Wa}while(0);if(ua){sa=Ka;ta=Ma;break b}j0a(Ea);sa=Ka;ta=Ma;break b}while(0);ra=k[ea>>2]|0;k[s>>2]=1;k[s+8>>2]=32;k[s+40>>2]=1;qa=s+48|0;k[qa>>2]=-1;k[qa+4>>2]=-1;qa=s+56|0;Ca=s+60|0;Fa=s+72|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[qa+16>>2]=0;x=0;Ta(539,ra+48|0,s|0)|0;ra=x;x=0;if(ra&1){ra=Hc()|0;qa=M;wa=k[Fa>>2]|0;if(wa)j0a(wa);wa=k[Ca>>2]|0;if(!wa){Ga=qa;Ha=ra;ka=62;break}j0a(wa);Ga=qa;Ha=ra;ka=62;break}ra=k[Fa>>2]|0;if(ra)j0a(ra);ra=k[Ca>>2]|0;if(ra)j0a(ra);ra=k[ea>>2]|0;k[N>>2]=0;k[N+32>>2]=1;Ca=ra+48|0;k[q>>2]=2;ya=q+8|0;za=N;Aa=ya+40|0;do{k[ya>>2]=k[za>>2];ya=ya+4|0;za=za+4|0}while((ya|0)<(Aa|0));ra=q+48|0;k[ra>>2]=-1;k[ra+4>>2]=-1;ra=q+56|0;Fa=q+60|0;qa=q+72|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[ra+16>>2]=0;x=0;Ta(539,Ca|0,q|0)|0;ra=x;x=0;if(ra&1){ra=Hc()|0;wa=M;Ia=k[qa>>2]|0;if(Ia)j0a(Ia);Ia=k[Fa>>2]|0;if(!Ia){Ga=wa;Ha=ra;ka=62;break}j0a(Ia);Ga=wa;Ha=ra;ka=62;break}ra=k[qa>>2]|0;if(ra)j0a(ra);ra=k[Fa>>2]|0;if(ra)j0a(ra);x=0;ra=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Fa=x;x=0;if(!(Fa&1)){x=0;fb(348,a|0,b|0,k[ra+4>>2]|0);ra=x;x=0;if(ra&1){ka=61;break}if(ia){oy(y);r=c;return 0}j0a(la);oy(y);r=c;return 0}else ka=61}else ka=61}else ka=61;while(0);if((ka|0)==61){ja=Hc()|0;Ga=M;Ha=ja;ka=62}if((ka|0)==62){sa=Ha;ta=Ga}if(ia){ib=sa;jb=ta;oy(y);Sc(ib|0)}j0a(la);ib=sa;jb=ta;oy(y);Sc(ib|0)}x=0;ja=Ba(k[k[ha>>2]>>2]|0,ha|0)|0;ma=x;x=0;if(!(ma&1)){if((ja|0)==5){ja=iDa(ha,168,6704,0)|0;if(!ja){x=0;hb(49);x=0;ka=59;break}ma=b+32|0;na=k[ma>>2]|0;x=0;fb(140,O|0,272582,26);oa=x;x=0;if(oa&1){ka=59;break}x=0;pa(57,(na|0)!=0|0,O|0,1113,269817,272609);na=x;x=0;if(na&1){na=Hc()|0;oa=M;K2a(O);ib=na;jb=oa;oy(y);Sc(ib|0)}K2a(O);oa=k[ma>>2]|0;x=0;xa(k[(k[oa>>2]|0)+12>>2]|0,oa|0,a|0);oa=x;x=0;if(oa&1){ka=59;break}k[P>>2]=k[ea>>2];oa=k[ma>>2]|0;x=0;ma=Ba(k[(k[oa>>2]|0)+16>>2]|0,oa|0)|0;oa=x;x=0;if(oa&1){ka=59;break}oa=k[ma+4>>2]|0;x=0;fb(247,Q|0,256,0);ma=x;x=0;if(ma&1){ka=59;break}x=0;nb(137,P|0,oa|0,Q|0,1);oa=x;x=0;if(oa&1){oa=Hc()|0;ma=M;k[Q>>2]=20456;xh(Q+12|0,k[Q+16>>2]|0);na=k[Q+8>>2]|0;if(!na){ib=oa;jb=ma;oy(y);Sc(ib|0)}k0a(na);ib=oa;jb=ma;oy(y);Sc(ib|0)}k[Q>>2]=20456;xh(Q+12|0,k[Q+16>>2]|0);ma=k[Q+8>>2]|0;if(ma)k0a(ma);k[R>>2]=k[ea>>2];x=0;fb(318,R|0,ja|0,1);ma=x;x=0;if(ma&1){ka=59;break}switch(k[ja+24>>2]|0){case 0:{ma=k[ja+32>>2]|0;if(!ma){x=0;oa=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;na=x;x=0;if(na&1){ka=59;break a}x=0;fb(348,a|0,b|0,k[oa+4>>2]|0);oa=x;x=0;if(oa&1){ka=59;break a}oy(y);r=c;return 0}x=0;fb(140,S|0,272699,38);oa=x;x=0;if(oa&1){ka=59;break a}x=0;pa(57,(ma|0)!=2|0,S|0,1124,269817,272609);ma=x;x=0;if(ma&1){ma=Hc()|0;oa=M;K2a(S);ib=ma;jb=oa;oy(y);Sc(ib|0)}else{K2a(S);x=0;xa(859,a|0,b|0);oa=x;x=0;if(oa&1){ka=59;break a}oy(y);r=c;return 0}break}case 2:{x=0;oa=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;ma=x;x=0;if(ma&1){ka=59;break a}ma=k[oa+4>>2]|0;i[T>>0]=(k[ja+32>>2]|0)==0&1;x=0;nb(141,a|0,b|0,ma|0,T|0);ma=x;x=0;if(ma&1){ka=59;break a}oy(y);r=c;return 0}case 1:{ma=ja+36|0;oa=k[ma>>2]|0;x=0;fb(140,p|0,329672,0);na=x;x=0;if(na&1){ka=59;break a}x=0;pa(57,(oa|0)!=0|0,p|0,588,285183,276209);oa=x;x=0;if(oa&1){oa=Hc()|0;na=M;K2a(p);kb=na;lb=oa;break a}K2a(p);oa=k[ma>>2]|0;x=0;na=Ba(k[(k[oa>>2]|0)+36>>2]|0,oa|0)|0;oa=x;x=0;if(oa&1){ka=59;break a}x=0;fb(140,U|0,272738,34);oa=x;x=0;if(oa&1){ka=59;break a}x=0;pa(57,na^1|0,U|0,1135,269817,272609);na=x;x=0;if(na&1){na=Hc()|0;oa=M;K2a(U);ib=na;jb=oa;oy(y);Sc(ib|0)}K2a(U);oa=k[ma>>2]|0;x=0;fb(140,o|0,329672,0);na=x;x=0;if(na&1){ka=59;break a}x=0;pa(57,(oa|0)!=0|0,o|0,588,285183,276209);oa=x;x=0;if(oa&1){oa=Hc()|0;na=M;K2a(o);kb=na;lb=oa;break a}K2a(o);oa=k[ma>>2]|0;x=0;na=Ba(k[(k[oa>>2]|0)+56>>2]|0,oa|0)|0;oa=x;x=0;if(oa&1){ka=59;break a}if(!na){oy(y);r=c;return 0}k[V>>2]=k[ea>>2];na=k[ma>>2]|0;x=0;fb(140,n|0,329672,0);oa=x;x=0;if(oa&1){ka=59;break a}x=0;pa(57,(na|0)!=0|0,n|0,588,285183,276209);na=x;x=0;if(na&1){na=Hc()|0;oa=M;K2a(n);kb=oa;lb=na;break a}K2a(n);x=0;pa(61,V|0,k[ma>>2]|0,1,(k[ja+32>>2]|0)==0|0,0);ja=x;x=0;if(ja&1){ka=59;break a}oy(y);r=c;return 0}default:{oy(y);r=c;return 0}}}x=0;ja=Ba(k[k[ha>>2]>>2]|0,ha|0)|0;ma=x;x=0;if(!(ma&1)){if((ja|0)!=6){x=0;ja=Ba(k[k[ha>>2]>>2]|0,ha|0)|0;ma=x;x=0;if(ma&1){ka=59;break}if((ja|0)!=13){x=0;fb(140,da|0,272773,49);ja=x;x=0;if(ja&1){ka=59;break}x=0;pa(57,0,da|0,1170,269817,272609);ja=x;x=0;if(ja&1){ja=Hc()|0;ma=M;K2a(da);ib=ja;jb=ma;oy(y);Sc(ib|0)}else{K2a(da);oy(y);r=c;return 0}}x=0;ma=Ba(k[(k[ha>>2]|0)+60>>2]|0,ha|0)|0;ja=x;x=0;if(ja&1){ka=59;break}x=0;fb(140,ba|0,329672,0);ja=x;x=0;if(ja&1){ka=59;break}x=0;pa(57,(ma|0)==0|0,ba|0,1165,269817,272609);ma=x;x=0;if(ma&1){ma=Hc()|0;ja=M;K2a(ba);ib=ma;jb=ja;oy(y);Sc(ib|0)}K2a(ba);x=0;ja=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;ma=x;x=0;if(ma&1){ka=59;break}ma=k[ja+4>>2]|0;x=0;ja=Ba(k[(k[ma>>2]|0)+60>>2]|0,ma|0)|0;ma=x;x=0;if(ma&1){ka=59;break}x=0;fb(140,ca|0,329672,0);ma=x;x=0;if(ma&1){ka=59;break}x=0;pa(57,(ja|0)==0|0,ca|0,1166,269817,272609);ja=x;x=0;if(ja&1){ja=Hc()|0;ma=M;K2a(ca);ib=ja;jb=ma;oy(y);Sc(ib|0)}else{K2a(ca);oy(y);r=c;return 0}}ma=iDa(ha,168,6656,0)|0;if(!ma){x=0;hb(49);x=0;ka=59;break}ja=b+32|0;na=k[ja>>2]|0;x=0;fb(140,W|0,272582,26);oa=x;x=0;if(!(oa&1)){x=0;pa(57,(na|0)!=0|0,W|0,1149,269817,272609);na=x;x=0;if(na&1){na=Hc()|0;oa=M;K2a(W);ib=na;jb=oa;oy(y);Sc(ib|0)}K2a(W);oa=k[ja>>2]|0;x=0;xa(k[(k[oa>>2]|0)+12>>2]|0,oa|0,a|0);oa=x;x=0;if((!(oa&1)?(k[X>>2]=k[ea>>2],oa=k[ja>>2]|0,x=0,ja=Ba(k[(k[oa>>2]|0)+16>>2]|0,oa|0)|0,oa=x,x=0,!(oa&1)):0)?(oa=k[ja+4>>2]|0,x=0,fb(247,Y|0,256,0),ja=x,x=0,!(ja&1)):0){x=0;nb(137,X|0,oa|0,Y|0,1);oa=x;x=0;if(oa&1){oa=Hc()|0;ja=M;k[Y>>2]=20456;xh(Y+12|0,k[Y+16>>2]|0);na=k[Y+8>>2]|0;if(!na){ib=oa;jb=ja;oy(y);Sc(ib|0)}k0a(na);ib=oa;jb=ja;oy(y);Sc(ib|0)}k[Y>>2]=20456;xh(Y+12|0,k[Y+16>>2]|0);ja=k[Y+8>>2]|0;if(ja)k0a(ja);ja=k[ea>>2]|0;oa=k[ma+24>>2]|0;ma=(oa|0)<0;k[Z>>2]=ma?0-oa|0:oa;k[Z+32>>2]=1;if(ma)NC(Z);ma=ja+48|0;k[m>>2]=2;ya=m+8|0;za=Z;Aa=ya+40|0;do{k[ya>>2]=k[za>>2];ya=ya+4|0;za=za+4|0}while((ya|0)<(Aa|0));ha=m+48|0;k[ha>>2]=-1;k[ha+4>>2]=-1;ha=m+56|0;la=m+60|0;ia=m+72|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[ha+16>>2]=0;x=0;Ta(539,ma|0,m|0)|0;ha=x;x=0;if(ha&1){ha=Hc()|0;ja=M;oa=k[ia>>2]|0;if(oa)j0a(oa);oa=k[la>>2]|0;if(!oa){kb=ja;lb=ha;break}j0a(oa);kb=ja;lb=ha;break}ha=k[ia>>2]|0;if(ha)j0a(ha);ha=k[la>>2]|0;if(ha)j0a(ha);ha=k[ea>>2]|0;k[l>>2]=1;k[l+8>>2]=129;k[l+40>>2]=1;la=l+48|0;k[la>>2]=-1;k[la+4>>2]=-1;la=l+56|0;ia=l+60|0;ja=l+72|0;oa=ha+48|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[la+16>>2]=0;x=0;Ta(539,oa|0,l|0)|0;la=x;x=0;if(la&1){la=Hc()|0;ha=M;na=k[ja>>2]|0;if(na)j0a(na);na=k[ia>>2]|0;if(!na){kb=ha;lb=la;break}j0a(na);kb=ha;lb=la;break}la=k[ja>>2]|0;if(la)j0a(la);la=k[ia>>2]|0;if(la)j0a(la);k[j>>2]=1;k[j+8>>2]=16;k[j+40>>2]=1;la=j+48|0;k[la>>2]=-1;k[la+4>>2]=-1;la=j+56|0;ia=j+60|0;ja=j+72|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[la+16>>2]=0;x=0;Ta(539,oa|0,j|0)|0;la=x;x=0;if(la&1){la=Hc()|0;ha=M;na=k[ja>>2]|0;if(na)j0a(na);na=k[ia>>2]|0;if(!na){kb=ha;lb=la;break}j0a(na);kb=ha;lb=la;break}la=k[ja>>2]|0;if(la)j0a(la);la=k[ia>>2]|0;if(la)j0a(la);k[h>>2]=1;k[h+8>>2]=21;k[h+40>>2]=1;la=h+48|0;k[la>>2]=-1;k[la+4>>2]=-1;la=h+56|0;ia=h+60|0;ja=h+72|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[la+16>>2]=0;x=0;Ta(539,oa|0,h|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;la=M;ha=k[ja>>2]|0;if(ha)j0a(ha);ha=k[ia>>2]|0;if(!ha){kb=la;lb=oa;break}j0a(ha);kb=la;lb=oa;break}oa=k[ja>>2]|0;if(oa)j0a(oa);oa=k[ia>>2]|0;if(oa)j0a(oa);oa=k[ea>>2]|0;k[_>>2]=4;k[_+8>>2]=0;k[_+40>>2]=1;ia=_+48|0;k[ia>>2]=-1;k[ia+4>>2]=-1;ia=_+56|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[ia+16>>2]=0;x=0;fb(315,g|0,oa+48|0,_|0);oa=x;x=0;if(oa&1){oa=Hc()|0;ib=oa;jb=M;oy(y);Sc(ib|0)}oa=k[g+72>>2]|0;if(oa)j0a(oa);oa=k[g+60>>2]|0;if(oa)j0a(oa);oa=k[ea>>2]|0;k[f>>2]=1;k[f+8>>2]=26;k[f+40>>2]=1;ia=f+48|0;k[ia>>2]=-1;k[ia+4>>2]=-1;ia=f+56|0;ja=f+60|0;la=f+72|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[ia+16>>2]=0;x=0;Ta(539,oa+48|0,f|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;ia=M;ha=k[la>>2]|0;if(ha)j0a(ha);ha=k[ja>>2]|0;if(!ha){kb=ia;lb=oa;break}j0a(ha);kb=ia;lb=oa;break}oa=k[la>>2]|0;if(oa)j0a(oa);oa=k[ja>>2]|0;if(oa)j0a(oa);oa=k[ea>>2]|0;k[aa>>2]=1;k[aa+32>>2]=1;ya=d;za=aa;Aa=ya+40|0;do{k[ya>>2]=k[za>>2];ya=ya+4|0;za=za+4|0}while((ya|0)<(Aa|0));HB(d,248,0);ya=$;za=d;Aa=ya+40|0;do{k[ya>>2]=k[za>>2];ya=ya+4|0;za=za+4|0}while((ya|0)<(Aa|0));ma=oa+48|0;k[e>>2]=2;ya=e+8|0;za=$;Aa=ya+40|0;do{k[ya>>2]=k[za>>2];ya=ya+4|0;za=za+4|0}while((ya|0)<(Aa|0));oa=e+48|0;k[oa>>2]=-1;k[oa+4>>2]=-1;oa=e+56|0;ja=e+60|0;la=e+72|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[oa+16>>2]=0;x=0;Ta(539,ma|0,e|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;ia=M;ha=k[la>>2]|0;if(ha)j0a(ha);ha=k[ja>>2]|0;if(!ha){kb=ia;lb=oa;break}j0a(ha);kb=ia;lb=oa;break}oa=k[la>>2]|0;if(oa)j0a(oa);oa=k[ja>>2]|0;if(oa)j0a(oa);k[d>>2]=1;k[d+8>>2]=2;k[d+40>>2]=1;oa=d+48|0;k[oa>>2]=-1;k[oa+4>>2]=-1;oa=d+56|0;ja=d+60|0;la=d+72|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[oa+16>>2]=0;x=0;Ta(539,ma|0,d|0)|0;oa=x;x=0;if(oa&1){oa=Hc()|0;ia=M;ha=k[la>>2]|0;if(ha)j0a(ha);ha=k[ja>>2]|0;if(!ha){kb=ia;lb=oa;break}j0a(ha);kb=ia;lb=oa;break}oa=k[la>>2]|0;if(oa)j0a(oa);oa=k[ja>>2]|0;if(oa)j0a(oa);oy(y);r=c;return 0}else ka=59}else ka=59}else ka=59}else ka=59}else ka=59;while(0);if((ka|0)==59){ka=Hc()|0;kb=M;lb=ka}ib=lb;jb=kb;oy(y);Sc(ib|0);return 0}function ina(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+32|0;e=d+8|0;f=d+4|0;g=d;h=Vf[k[(k[b>>2]|0)+56>>2]&1023](b)|0;q2a(e,272823,36);x=0;pa(57,h|0,e|0,1630,269817,272860);h=x;x=0;if(h&1){h=Hc()|0;K2a(e);Sc(h|0)}else{K2a(e);Tf[k[(k[c>>2]|0)+12>>2]&2047](c,a);e=a+8|0;k[f>>2]=k[e>>2];a=(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0;tla(f,k[a>>2]|0,b,1);k[g>>2]=k[e>>2];ola(g,b,1);r=d;return}}function jna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;c=r;r=r+464|0;d=c+440|0;e=c+264|0;f=c+184|0;g=c+160|0;h=c+432|0;j=c+424|0;l=c+80|0;m=c;n=c+416|0;o=c+376|0;p=c+360|0;q=c+344|0;s=a+8|0;xka(g,k[s>>2]|0,b);x=0;t=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;u=x;x=0;a:do if(u&1)v=3;else{w=k[t+24>>2]|0;do if(w){y=iDa(w,4520,5008,0)|0;if(y){x=0;xa(k[(k[y>>2]|0)+32>>2]|0,h|0,y|0);z=x;x=0;if(z&1){v=3;break a}z=k[h>>2]|0;x=0;A=Ba(k[k[z>>2]>>2]|0,z|0)|0;z=x;x=0;if(z&1){z=Hc()|0;B=M;C=k[h+4>>2]|0;if(!C){D=z;E=B;oy(g);Sc(D|0)}j0a(C);D=z;E=B;oy(g);Sc(D|0)}B=k[h+4>>2]|0;if(B)j0a(B);switch(A|0){case 7:{x=0;xa(k[(k[y>>2]|0)+32>>2]|0,j|0,y|0);y=x;x=0;if(y&1){v=3;break a}y=iDa(k[j>>2]|0,168,6672,0)|0;if(!y){x=0;hb(49);x=0;A=Hc()|0;B=M;z=k[j+4>>2]|0;if(!z){D=A;E=B;oy(g);Sc(D|0)}j0a(z);D=A;E=B;oy(g);Sc(D|0)}B=(i[y+28>>0]|0)==0;y=k[j+4>>2]|0;if(y)j0a(y);if(!B){oy(g);r=c;return}B=k[s>>2]|0;k[f>>2]=1;k[f+8>>2]=48;k[f+40>>2]=1;y=f+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=f+56|0;A=f+60|0;z=f+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,B+48|0,f|0)|0;B=x;x=0;if(B&1){B=Hc()|0;y=M;C=k[z>>2]|0;if(C)j0a(C);C=k[A>>2]|0;if(!C){F=y;G=B;break a}j0a(C);F=y;G=B;break a}B=k[z>>2]|0;if(B)j0a(B);B=k[A>>2]|0;if(B)j0a(B);oy(g);r=c;return}case 0:{B=k[s>>2]|0;k[e>>2]=1;k[e+8>>2]=66;k[e+40>>2]=1;A=e+48|0;k[A>>2]=-1;k[A+4>>2]=-1;A=e+56|0;z=e+60|0;y=e+72|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[A+16>>2]=0;x=0;Ta(539,B+48|0,e|0)|0;B=x;x=0;if(B&1){B=Hc()|0;A=M;C=k[y>>2]|0;if(C)j0a(C);C=k[z>>2]|0;if(!C){F=A;G=B;break a}j0a(C);F=A;G=B;break a}B=k[y>>2]|0;if(B)j0a(B);B=k[z>>2]|0;if(B)j0a(B);oy(g);r=c;return}default:{oy(g);r=c;return}}}B=iDa(w,4520,5424,0)|0;if(!B){z=iDa(w,4520,5464,0)|0;if(z){if(!(i[z+58>>0]|0)){x=0;fb(353,a|0,w|0,b|0);y=x;x=0;if(y&1){v=3;break a}oy(g);r=c;return}y=z+48|0;A=k[y>>2]|0;x=0;xa(k[(k[A>>2]|0)+12>>2]|0,A|0,a|0);A=x;x=0;if(A&1){v=3;break a}k[n>>2]=k[s>>2];A=k[y>>2]|0;x=0;y=Ba(k[(k[A>>2]|0)+16>>2]|0,A|0)|0;A=x;x=0;if(A&1){v=3;break a}A=k[y+4>>2]|0;x=0;y=Ba(k[(k[z>>2]|0)+16>>2]|0,z|0)|0;z=x;x=0;if(z&1){v=3;break a}x=0;nb(137,n|0,A|0,k[y+4>>2]|0,0);y=x;x=0;if(y&1){v=3;break a}oy(g);r=c;return}y=iDa(w,4520,5312,0)|0;if(y){if(!(i[y+72>>0]|0)){oy(g);r=c;return}x=0;xa(857,(k[s>>2]|0)+48|0,k[y+24>>2]|0);y=x;x=0;if(y&1){v=3;break a}oy(g);r=c;return}if(iDa(w,4520,5528,0)|0){oy(g);r=c;return}if(iDa(w,4520,5248,0)|0){oy(g);r=c;return}if(!(iDa(w,4520,5376,0)|0))break;oy(g);r=c;return}y=k[s>>2]|0;x=0;fb(352,m|0,y|0,B|0);B=x;x=0;if(B&1){v=3;break a}B=k[m>>2]|0;x=0;fb(140,d|0,329672,0);A=x;x=0;do if(A&1){z=Hc()|0;H=M;I=z;v=55}else{x=0;pa(56,(B|0)==4|(B|0)==8|0,d|0,71,296096,296141);z=x;x=0;if(z&1){z=Hc()|0;C=M;K2a(d);H=C;I=z;v=55;break}K2a(d);k[l>>2]=4;J=l+8|0;z=m+8|0;K=J+40|0;do{k[J>>2]=k[z>>2];J=J+4|0;z=z+4|0}while((J|0)<(K|0));z=l+48|0;k[z>>2]=-1;k[z+4>>2]=-1;z=l+56|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[z+16>>2]=0;x=0;Ta(539,y+48|0,l|0)|0;z=x;x=0;if(z&1){z=Hc()|0;C=M;L=k[l+72>>2]|0;if(L)j0a(L);L=k[l+60>>2]|0;if(!L){N=z;O=C;break}j0a(L);N=z;O=C;break}C=k[l+72>>2]|0;if(C)j0a(C);C=k[l+60>>2]|0;if(C)j0a(C);C=k[m+72>>2]|0;if(C)j0a(C);C=k[m+60>>2]|0;if(!C){oy(g);r=c;return}j0a(C);oy(g);r=c;return}while(0);if((v|0)==55){N=I;O=H}y=k[m+72>>2]|0;if(y)j0a(y);y=k[m+60>>2]|0;if(!y){D=N;E=O;oy(g);Sc(D|0)}j0a(y);D=N;E=O;oy(g);Sc(D|0)}while(0);J=o;K=J+36|0;do{k[J>>2]=0;J=J+4|0}while((J|0)<(K|0));w=o+20|0;y=o+24|0;k[y>>2]=0;k[o+28>>2]=0;k[o+32>>2]=0;k[o+36>>2]=-1;B=o+4|0;A=B+-4|0;C=B+16|0;z=o+8|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[o+4>>2]=20924;k[o>>2]=20888;k[w>>2]=20948;x=0;fb(140,q|0,272993,51);L=x;x=0;if(L&1){L=Hc()|0;P=L;Q=M}else{k[p>>2]=21048;L=p+4|0;x=0;xa(604,L|0,q|0);R=x;x=0;if(R&1){R=Hc()|0;S=R;T=M}else{x=0;R=Ta(494,o|0,p|0)|0;U=x;x=0;if(!(U&1)){x=0;nb(87,R|0,273045,269817,1227);x=0}R=Hc()|0;U=M;k[p>>2]=21048;K2a(L);S=R;T=U}K2a(q);P=S;Q=T}k[B>>2]=20980;k[A>>2]=21008;k[C>>2]=21032;K2a(z);k[w>>2]=20796;w=k[y>>2]|0;if(w){x=0;z=Ba(k[(k[w>>2]|0)+16>>2]|0,w|0)|0;w=x;x=0;if(w&1){w=Hc(0)|0;Fg(w)}if(z)k[y>>2]=0}D=P;E=Q;oy(g);Sc(D|0)}while(0);if((v|0)==3){v=Hc()|0;F=M;G=v}D=G;E=F;oy(g);Sc(D|0)}function kna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+112|0;e=d+96|0;f=d+56|0;g=d+32|0;h=d+16|0;i=d;j=a+8|0;if(gma(k[j>>2]|0,b)|0){l=iDa(b,4520,5464,0)|0;if(!l)BBa();Bna(a,c,l);r=d;return}l=k[(k[j>>2]|0)+192>>2]|0;a:do if(l){j=l;while(1){m=k[j+16>>2]|0;if(m>>>0>b>>>0)n=j;else{if(m>>>0>=b>>>0)break;n=j+4|0}j=k[n>>2]|0;if(!j)break a}j=iDa(b,4520,5464,0)|0;if(!j)BBa();Cna(a,c,j);r=d;return}while(0);d=f;a=d+36|0;do{k[d>>2]=0;d=d+4|0}while((d|0)<(a|0));d=f+20|0;a=f+24|0;k[a>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;b=f+4|0;n=b+-4|0;l=b+16|0;j=f+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=20924;k[f>>2]=20888;k[d>>2]=20948;k[g>>2]=31456;e=c+8|0;m=k[e+4>>2]|0;o=g+4|0;k[o>>2]=k[e>>2];k[o+4>>2]=m;k[g+12>>2]=k[c+16>>2];m=k[c+20>>2]|0;k[g+16>>2]=m;c=(m|0)==0;if(!c)h0a(m);x=0;o=Ta(598,f|0,g|0)|0;f=x;x=0;if(!(f&1)?(x=0,fb(140,i|0,273137,54),f=x,x=0,!(f&1)):0){k[h>>2]=21048;f=h+4|0;x=0;xa(604,f|0,i|0);e=x;x=0;if(e&1){e=Hc()|0;p=M;q=e}else{x=0;e=Ta(494,o|0,h|0)|0;o=x;x=0;if(!(o&1)){x=0;nb(87,e|0,273192,269817,1645);x=0}e=Hc()|0;o=M;k[h>>2]=21048;K2a(f);p=o;q=e}K2a(i);s=p;t=q}else{q=Hc()|0;s=M;t=q}k[g>>2]=31456;if(!c)j0a(m);k[b>>2]=20980;k[n>>2]=21008;k[l>>2]=21032;K2a(j);k[d>>2]=20796;d=k[a>>2]|0;if(!d)Sc(t|0);x=0;j=Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(!j)Sc(t|0);k[a>>2]=0;Sc(t|0)}function lna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;c=r;r=r+224|0;d=c+64|0;e=c;f=c+24|0;g=c+176|0;h=c+160|0;i=c+144|0;j=a+8|0;xka(e,k[j>>2]|0,b);x=0;a=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;oy(e);Sc(n|0)}l=k[a+4>>2]|0;o=k[a+8>>2]|0;a=(o|0)==0;if(!a)h0a(o);x=0;p=Ba(k[k[l>>2]>>2]|0,l|0)|0;q=x;x=0;a:do if(q&1)s=7;else{switch(p|0){case 3:case 1:{t=k[j>>2]|0;x=0;fb(k[(k[l>>2]|0)+84>>2]|0,f|0,l|0,b|0);u=x;x=0;if(u&1){s=7;break a}u=t+48|0;k[d>>2]=2;v=d+8|0;t=f;w=v+40|0;do{k[v>>2]=k[t>>2];v=v+4|0;t=t+4|0}while((v|0)<(w|0));t=d+48|0;k[t>>2]=-1;k[t+4>>2]=-1;t=d+56|0;y=d+60|0;z=d+72|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;x=0;Ta(539,u|0,d|0)|0;t=x;x=0;if(t&1){t=Hc()|0;A=M;B=k[z>>2]|0;if(B)j0a(B);B=k[y>>2]|0;if(!B){C=A;D=t;s=8;break a}j0a(B);C=A;D=t;s=8;break a}t=k[z>>2]|0;if(t)j0a(t);t=k[y>>2]|0;if(t)j0a(t);break}case 2:break;default:{v=g;w=v+36|0;do{k[v>>2]=0;v=v+4|0}while((v|0)<(w|0));u=g+20|0;t=g+24|0;k[t>>2]=0;k[g+28>>2]=0;k[g+32>>2]=0;k[g+36>>2]=-1;y=g+4|0;z=y+-4|0;A=y+16|0;B=g+8|0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[g+4>>2]=20924;k[g>>2]=20888;k[u>>2]=20948;x=0;fb(140,i|0,273328,62);E=x;x=0;if(E&1){E=Hc()|0;F=M;G=E}else{k[h>>2]=21048;E=h+4|0;x=0;xa(604,E|0,i|0);H=x;x=0;if(H&1){H=Hc()|0;I=M;J=H}else{x=0;H=Ta(494,g|0,h|0)|0;K=x;x=0;if(!(K&1)){x=0;nb(87,H|0,273391,269817,1245);x=0}H=Hc()|0;K=M;k[h>>2]=21048;K2a(E);I=K;J=H}K2a(i);F=I;G=J}k[y>>2]=20980;k[z>>2]=21008;k[A>>2]=21032;K2a(B);k[u>>2]=20796;u=k[t>>2]|0;if(u){x=0;B=Ba(k[(k[u>>2]|0)+16>>2]|0,u|0)|0;u=x;x=0;if(u&1){u=Hc(0)|0;Fg(u)}if(B)k[t>>2]=0}L=F;N=G;break a}}if(a){oy(e);r=c;return}j0a(o);oy(e);r=c;return}while(0);if((s|0)==7){c=Hc()|0;C=M;D=c;s=8}if((s|0)==8){L=C;N=D}if(a){m=L;n=N;oy(e);Sc(n|0)}j0a(o);m=L;n=N;oy(e);Sc(n|0)}function mna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+256|0;e=d+80|0;f=d+232|0;g=d;h=d+192|0;i=d+176|0;j=d+160|0;l=iDa(c,168,6592,0)|0;if(!l)BBa();m=(k[l+28>>2]|0)==1;do if((Vf[k[k[c>>2]>>2]&1023](c)|0)==4){q2a(f,273480,37);x=0;pa(57,0,f|0,1320,269817,273518);l=x;x=0;if(!(l&1)){K2a(f);break}l=Hc()|0;n=M;K2a(f);o=n;p=l;Sc(p|0)}while(0);switch(b|0){case 33:{f=k[a+8>>2]|0;k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;c=e+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=e+56|0;l=e+60|0;n=e+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,f+48|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;c=k[n>>2]|0;if(c)j0a(c);c=k[l>>2]|0;if(!c)Sc(f|0);j0a(c);Sc(f|0)}else{f=k[n>>2]|0;if(f)j0a(f);f=k[l>>2]|0;if(f)j0a(f);r=d;return}break}case 34:{f=k[a+8>>2]|0;k[e>>2]=1;k[e+8>>2]=3;k[e+40>>2]=1;l=e+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=e+56|0;n=e+60|0;c=e+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,f+48|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;l=k[c>>2]|0;if(l)j0a(l);l=k[n>>2]|0;if(!l)Sc(f|0);j0a(l);Sc(f|0)}else{f=k[c>>2]|0;if(f)j0a(f);f=k[n>>2]|0;if(f)j0a(f);r=d;return}break}case 35:{f=k[a+8>>2]|0;k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;c=e+60|0;l=e+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,f+48|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;n=k[l>>2]|0;if(n)j0a(n);n=k[c>>2]|0;if(!n)Sc(f|0);j0a(n);Sc(f|0)}else{f=k[l>>2]|0;if(f)j0a(f);f=k[c>>2]|0;if(f)j0a(f);r=d;return}break}case 37:case 36:{f=a+8|0;c=k[f>>2]|0;k[e>>2]=1;k[e+8>>2]=129;k[e+40>>2]=1;l=e+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=e+56|0;n=e+60|0;q=e+72|0;s=c+48|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,s|0,e|0)|0;l=x;x=0;if(l&1){l=Hc()|0;c=k[q>>2]|0;if(c)j0a(c);c=k[n>>2]|0;if(!c)Sc(l|0);j0a(c);Sc(l|0)}l=k[q>>2]|0;if(l)j0a(l);l=k[n>>2]|0;if(l)j0a(l);k[e>>2]=1;k[e+8>>2]=21;k[e+40>>2]=1;l=e+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=e+56|0;n=e+60|0;q=e+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,s|0,e|0)|0;s=x;x=0;if(s&1){s=Hc()|0;l=k[q>>2]|0;if(l)j0a(l);l=k[n>>2]|0;if(!l)Sc(s|0);j0a(l);Sc(s|0)}s=k[q>>2]|0;if(s)j0a(s);s=k[n>>2]|0;if(s)j0a(s);s=k[f>>2]|0;k[g>>2]=4;k[g+8>>2]=0;k[g+40>>2]=1;n=g+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=g+56|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;fb(315,e|0,s+48|0,g|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;p=g;Sc(p|0)}g=k[e+72>>2]|0;if(g)j0a(g);g=k[e+60>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if((b|0)==36){Iia(g,m?5:4)|0;r=d;return}else{Iia(g,m?7:6)|0;r=d;return}break}case 38:{m=k[a+8>>2]|0;k[e>>2]=1;k[e+8>>2]=10;k[e+40>>2]=1;a=e+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=e+56|0;g=e+60|0;b=e+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,m+48|0,e|0)|0;m=x;x=0;if(m&1){m=Hc()|0;a=k[b>>2]|0;if(a)j0a(a);a=k[g>>2]|0;if(!a)Sc(m|0);j0a(a);Sc(m|0)}else{m=k[b>>2]|0;if(m)j0a(m);m=k[g>>2]|0;if(m)j0a(m);r=d;return}break}default:{d=h;m=d+36|0;do{k[d>>2]=0;d=d+4|0}while((d|0)<(m|0));d=h+20|0;m=h+24|0;k[m>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;g=h+4|0;b=g+-4|0;a=g+16|0;f=h+8|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[h+4>>2]=20924;k[h>>2]=20888;k[d>>2]=20948;x=0;fb(140,j|0,273630,28);e=x;x=0;if(e&1){e=Hc()|0;t=M;u=e}else{k[i>>2]=21048;e=i+4|0;x=0;xa(604,e|0,j|0);s=x;x=0;if(s&1){s=Hc()|0;v=M;w=s}else{x=0;s=Ta(494,h|0,i|0)|0;h=x;x=0;if(!(h&1)){x=0;nb(87,s|0,273518,269817,1350);x=0}s=Hc()|0;h=M;k[i>>2]=21048;K2a(e);v=h;w=s}K2a(j);t=v;u=w}k[g>>2]=20980;k[b>>2]=21008;k[a>>2]=21032;K2a(f);k[d>>2]=20796;d=k[m>>2]|0;if(d){x=0;f=Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(f)k[m>>2]=0}o=t;p=u;Sc(p|0)}}}function nna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+160|0;d=c;e=c+112|0;f=c+96|0;g=c+80|0;switch(b|0){case 27:{b=k[a+8>>2]|0;k[d>>2]=1;k[d+8>>2]=23;k[d+40>>2]=1;h=d+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=d+56|0;i=d+60|0;j=d+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,b+48|0,d|0)|0;b=x;x=0;if(b&1){b=Hc()|0;h=k[j>>2]|0;if(h)j0a(h);h=k[i>>2]|0;if(!h)Sc(b|0);j0a(h);Sc(b|0)}else{b=k[j>>2]|0;if(b)j0a(b);b=k[i>>2]|0;if(b)j0a(b);r=c;return}break}case 29:{b=k[a+8>>2]|0;k[d>>2]=1;k[d+8>>2]=22;k[d+40>>2]=1;i=d+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=d+56|0;j=d+60|0;h=d+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,b+48|0,d|0)|0;b=x;x=0;if(b&1){b=Hc()|0;i=k[h>>2]|0;if(i)j0a(i);i=k[j>>2]|0;if(!i)Sc(b|0);j0a(i);Sc(b|0)}else{b=k[h>>2]|0;if(b)j0a(b);b=k[j>>2]|0;if(b)j0a(b);r=c;return}break}case 28:{b=k[a+8>>2]|0;k[d>>2]=1;k[d+8>>2]=24;k[d+40>>2]=1;a=d+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=d+56|0;j=d+60|0;h=d+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,b+48|0,d|0)|0;b=x;x=0;if(b&1){b=Hc()|0;a=k[h>>2]|0;if(a)j0a(a);a=k[j>>2]|0;if(!a)Sc(b|0);j0a(a);Sc(b|0)}else{b=k[h>>2]|0;if(b)j0a(b);b=k[j>>2]|0;if(b)j0a(b);r=c;return}break}default:{c=e;b=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));c=e+20|0;b=e+24|0;k[b>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;j=e+4|0;h=j+-4|0;a=j+16|0;i=e+8|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=20924;k[e>>2]=20888;k[c>>2]=20948;x=0;fb(140,g|0,273659,21);d=x;x=0;if(d&1){d=Hc()|0;l=M;m=d}else{k[f>>2]=21048;d=f+4|0;x=0;xa(604,d|0,g|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,e|0,f|0)|0;e=x;x=0;if(!(e&1)){x=0;nb(87,n|0,273681,269817,1368);x=0}n=Hc()|0;e=M;k[f>>2]=21048;K2a(d);o=e;p=n}K2a(g);l=o;m=p}k[j>>2]=20980;k[h>>2]=21008;k[a>>2]=21032;K2a(i);k[c>>2]=20796;c=k[b>>2]|0;if(!c)Sc(m|0);x=0;i=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!i)Sc(m|0);k[b>>2]=0;Sc(m|0)}}}function ona(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+96|0;a=b+72|0;c=b+32|0;d=b+16|0;e=b;b=c;f=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(f|0));b=c+20|0;f=c+24|0;k[f>>2]=0;k[c+28>>2]=0;k[c+32>>2]=0;k[c+36>>2]=-1;g=c+4|0;h=g+-4|0;i=g+16|0;j=c+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;K2a(a);k[c+4>>2]=20924;k[c>>2]=20888;k[b>>2]=20948;x=0;fb(140,e|0,273757,36);a=x;x=0;if(a&1){a=Hc()|0;l=M;m=a}else{k[d>>2]=21048;a=d+4|0;x=0;xa(604,a|0,e|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,c|0,d|0)|0;c=x;x=0;if(!(c&1)){x=0;nb(87,n|0,273794,269817,1374);x=0}n=Hc()|0;c=M;k[d>>2]=21048;K2a(a);o=c;p=n}K2a(e);l=o;m=p}k[g>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[f>>2]|0;if(!b)Sc(m|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(m|0);k[f>>2]=0;Sc(m|0)}function pna(){k[10571]=0;k[10572]=0;k[10573]=0;return}function qna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=(k[c>>2]|0)-f>>2;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=1073741823;n=(k[c>>2]|0)-f>>2;o=6}if((o|0)==6){i=m;j=KBa(m<<2)|0;l=n}n=j+(l<<2)|0;l=n;m=j+(i<<2)|0;i=k[b>>2]|0;k[b>>2]=0;k[n>>2]=i;i=n+4|0;b=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(b|0)){p=l;q=b;r=b}else{o=j;j=n;n=l;while(1){o=o+-4|0;l=k[o>>2]|0;k[o>>2]=0;k[j+-4>>2]=l;j=n+-4|0;l=j;if((o|0)==(b|0)){s=l;break}else n=l}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=i;k[d>>2]=m;m=q;if((r|0)!=(m|0)){d=r;do{d=d+-4|0;r=k[d>>2]|0;k[d>>2]=0;if(r)OBa(r)}while((d|0)!=(m|0))}if(!q)return;OBa(q);return}function rna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;d=b;e=c-d>>3;f=a+8|0;g=k[f>>2]|0;h=k[a>>2]|0;i=h;if(e>>>0>g-h>>3>>>0){if(!h)j=g;else{g=a+4|0;l=k[g>>2]|0;if((l|0)==(i|0))m=h;else{n=l;while(1){l=n+-8|0;k[g>>2]=l;o=k[n+-4>>2]|0;if(!o)p=l;else{j0a(o);p=k[g>>2]|0}if((p|0)==(i|0))break;else n=p}m=k[a>>2]|0}OBa(m);k[f>>2]=0;k[g>>2]=0;k[a>>2]=0;j=0}if(e>>>0>536870911){HBa(a);q=k[a>>2]|0;r=k[f>>2]|0}else{q=0;r=j}j=r-q|0;if(j>>3>>>0<268435455){q=j>>2;j=q>>>0>>0?e:q;if(j>>>0>536870911){HBa(a);s=j}else s=j}else s=536870911;j=KBa(s<<3)|0;q=a+4|0;k[q>>2]=j;k[a>>2]=j;k[f>>2]=j+(s<<3);if((b|0)==(c|0))return;s=b;f=j;do{k[f>>2]=k[s>>2];j=k[s+4>>2]|0;k[f+4>>2]=j;if(!j)t=f;else{h0a(j);t=k[q>>2]|0}f=t+8|0;k[q>>2]=f;s=s+8|0}while((s|0)!=(c|0));return}s=a+4|0;a=(k[s>>2]|0)-h>>3;h=e>>>0>a>>>0;e=b+(a<<3)|0;a=h?e:c;if((a|0)==(b|0))u=i;else{f=a+-8-d|0;d=b;b=i;while(1){q=k[d>>2]|0;t=k[d+4>>2]|0;if(t)h0a(t);k[b>>2]=q;q=b+4|0;j=k[q>>2]|0;k[q>>2]=t;if(j)j0a(j);d=d+8|0;if((d|0)==(a|0))break;else b=b+8|0}u=i+((f>>>3)+1<<3)|0}if(!h){h=k[s>>2]|0;if((h|0)==(u|0))return;else v=h;while(1){h=v+-8|0;k[s>>2]=h;f=k[v+-4>>2]|0;if(!f)w=h;else{j0a(f);w=k[s>>2]|0}if((w|0)==(u|0))break;else v=w}return}if((a|0)==(c|0))return;a=e;e=k[s>>2]|0;do{k[e>>2]=k[a>>2];w=k[a+4>>2]|0;k[e+4>>2]=w;if(!w)x=e;else{h0a(w);x=k[s>>2]|0}e=x+8|0;k[s>>2]=e;a=a+8|0}while((a|0)!=(c|0));return}function sna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=k[b+4>>2]|0;k[m+(n<<3)+4>>2]=l;if(!l){t=o;u=d}else{h0a(l);t=k[c>>2]|0;u=k[a>>2]|0}l=q+8|0;if((t|0)==(u|0)){v=r;w=t;x=t}else{d=t;t=q;q=r;while(1){r=d;d=d+-8|0;k[t+-8>>2]=k[d>>2];o=r+-4|0;k[t+-4>>2]=k[o>>2];k[d>>2]=0;k[o>>2]=0;t=q+-8|0;o=t;if((d|0)==(u|0)){y=o;break}else q=o}v=y;w=k[a>>2]|0;x=k[c>>2]|0}k[a>>2]=v;k[c>>2]=l;k[g>>2]=p;p=w;if((x|0)!=(p|0)){g=x;do{x=k[g+-4>>2]|0;g=g+-8|0;if(x)j0a(x)}while((g|0)!=(p|0))}if(!w)return;OBa(w);return}function tna(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,(g|0)>=(h|0)):0){if((h|0)>=(g|0)){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?(g|0)>=(k[o+16>>2]|0):0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if((g|0)<(m|0)){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if((m|0)>=(g|0)){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>=(o|0)){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if((o|0)<(d|0)){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if((d|0)>=(o|0)){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function una(a,b){a=a|0;b=b|0;if(!b)return;else{una(a,k[b>>2]|0);una(a,k[b+4>>2]|0);OBa(b);return}}function vna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=r;r=r+32|0;e=d;f=k[a>>2]|0;g=f;h=(k[b>>2]|0)-g>>3;b=f+(h<<3)|0;i=a+4|0;j=k[i>>2]|0;l=a+8|0;m=k[l>>2]|0;n=j;o=m;if(j>>>0>>0){if((b|0)==(j|0)){k[b>>2]=k[c>>2];m=c+4|0;k[f+(h<<3)+4>>2]=k[m>>2];k[c>>2]=0;k[m>>2]=0;k[i>>2]=b+8;p=b;r=d;return p|0}m=n-(b+8)>>3;q=b+(m<<3)|0;if(q>>>0>>0){s=(j+(0-m<<3)+~b|0)>>>3;t=j;u=q;while(1){k[t>>2]=k[u>>2];v=u+4|0;k[t+4>>2]=k[v>>2];k[u>>2]=0;k[v>>2]=0;u=u+8|0;if(u>>>0>=j>>>0)break;else t=t+8|0}k[i>>2]=j+(s+1<<3)}if(m){m=q;q=j;do{j=q;q=q+-8|0;s=m;m=m+-8|0;t=k[m>>2]|0;u=s+-4|0;s=k[u>>2]|0;k[m>>2]=0;k[u>>2]=0;k[q>>2]=t;t=j+-4|0;j=k[t>>2]|0;k[t>>2]=s;if(j)j0a(j)}while((m|0)!=(b|0))}m=k[c>>2]|0;q=c+4|0;j=k[q>>2]|0;k[c>>2]=0;k[q>>2]=0;k[b>>2]=m;m=f+(h<<3)+4|0;h=k[m>>2]|0;k[m>>2]=j;if(!h){p=b;r=d;return p|0}j0a(h);p=b;r=d;return p|0}h=(n-g>>3)+1|0;if(h>>>0>536870911){HBa(a);w=l;y=k[a>>2]|0;z=k[l>>2]|0}else{w=l;y=g;z=o}o=z-y|0;if(o>>3>>>0<268435455){z=o>>2;A=z>>>0>>0?h:z}else A=536870911;k[e+12>>2]=0;k[e+16>>2]=a+8;if(!A)B=0;else B=KBa(A<<3)|0;k[e>>2]=B;z=B+(b-y>>3<<3)|0;y=e+8|0;k[y>>2]=z;h=e+4|0;k[h>>2]=z;z=e+12|0;k[z>>2]=B+(A<<3);x=0;xa(860,e|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;A=k[h>>2]|0;B=k[y>>2]|0;if((B|0)!=(A|0)){o=~((B+-8-A|0)>>>3);g=B;do{l=k[g+-4>>2]|0;g=g+-8|0;if(l)j0a(l)}while((g|0)!=(A|0));k[y>>2]=B+(o<<3)}o=k[e>>2]|0;if(!o)Sc(c|0);OBa(o);Sc(c|0)}c=k[h>>2]|0;o=k[a>>2]|0;if((o|0)==(b|0))C=c;else{B=b;A=c;while(1){g=B;B=B+-8|0;k[A+-8>>2]=k[B>>2];l=g+-4|0;k[A+-4>>2]=k[l>>2];k[B>>2]=0;k[l>>2]=0;l=(k[h>>2]|0)+-8|0;k[h>>2]=l;if((B|0)==(o|0)){C=l;break}else A=l}}A=k[i>>2]|0;if((A|0)==(b|0)){D=h;E=C;F=A}else{C=b;b=k[y>>2]|0;do{k[b>>2]=k[C>>2];o=C+4|0;k[b+4>>2]=k[o>>2];k[C>>2]=0;k[o>>2]=0;C=C+8|0;b=(k[y>>2]|0)+8|0;k[y>>2]=b}while((C|0)!=(A|0));D=h;E=k[h>>2]|0;F=k[i>>2]|0}A=k[a>>2]|0;k[a>>2]=E;k[D>>2]=A;k[i>>2]=k[y>>2];k[y>>2]=F;i=k[w>>2]|0;k[w>>2]=k[z>>2];k[z>>2]=i;i=k[D>>2]|0;k[e>>2]=i;e=k[h>>2]|0;h=F;if((h|0)!=(e|0)){F=~((h+-8-e|0)>>>3);D=h;do{z=k[D+-4>>2]|0;D=D+-8|0;if(z)j0a(z)}while((D|0)!=(e|0));k[y>>2]=h+(F<<3)}if(i)OBa(i);p=c;r=d;return p|0}function wna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=a+12|0;g=(k[f>>2]|0)==0;q2a(e,273872,54);x=0;pa(57,g|0,e|0,130,273927,275151);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(e);j=h;l=g;Sc(l|0)}K2a(e);e=KBa(12)|0;x=0;fb(317,e|0,k[a+8>>2]|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;a=M;OBa(e);j=a;l=c;Sc(l|0)}x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;a=x;x=0;do if(!(a&1)){if(!(i[c+13>>0]|0)){x=0;fb(k[(k[e>>2]|0)+4>>2]|0,e|0,b+8|0,1);g=x;x=0;if(g&1)break;OBa(e);r=d;return}g=k[f>>2]|0;k[f>>2]=e;if(!g){r=d;return}OBa(g);r=d;return}while(0);d=Hc()|0;f=M;OBa(e);j=f;l=d;Sc(l|0)}function xna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=a+12|0;g=(k[f>>2]|0)==0;q2a(e,273872,54);x=0;pa(57,g|0,e|0,130,273927,274965);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(e);j=h;l=g;Sc(l|0)}K2a(e);e=KBa(16)|0;x=0;nb(134,e|0,k[a+8>>2]|0,c|0,1);c=x;x=0;if(c&1){c=Hc()|0;a=M;OBa(e);j=a;l=c;Sc(l|0)}x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;a=x;x=0;do if(!(a&1)){if(!(i[c+13>>0]|0)){x=0;fb(k[(k[e>>2]|0)+4>>2]|0,e|0,b+8|0,1);g=x;x=0;if(g&1)break;OBa(e);r=d;return}g=k[f>>2]|0;k[f>>2]=e;if(!g){r=d;return}OBa(g);r=d;return}while(0);d=Hc()|0;f=M;OBa(e);j=f;l=d;Sc(l|0)}function yna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=a+12|0;g=(k[f>>2]|0)==0;q2a(e,273872,54);x=0;pa(57,g|0,e|0,130,273927,274766);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(e);j=h;l=g;Sc(l|0)}K2a(e);e=KBa(16)|0;x=0;fb(354,e|0,k[a+8>>2]|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;a=M;OBa(e);j=a;l=c;Sc(l|0)}x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;a=x;x=0;do if(!(a&1)){if(!(i[c+13>>0]|0)){x=0;fb(k[(k[e>>2]|0)+4>>2]|0,e|0,b+8|0,1);g=x;x=0;if(g&1)break;OBa(e);r=d;return}g=k[f>>2]|0;k[f>>2]=e;if(!g){r=d;return}OBa(g);r=d;return}while(0);d=Hc()|0;f=M;OBa(e);j=f;l=d;Sc(l|0)}function zna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+16|0;d=c;e=a+12|0;f=(k[e>>2]|0)==0;q2a(d,273872,54);x=0;pa(57,f|0,d|0,130,273927,274586);f=x;x=0;if(f&1){f=Hc()|0;g=M;K2a(d);h=g;j=f;Sc(j|0)}K2a(d);d=KBa(12)|0;x=0;xa(855,d|0,k[a+8>>2]|0);a=x;x=0;if(a&1){a=Hc()|0;f=M;OBa(d);h=f;j=a;Sc(j|0)}x=0;a=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;f=x;x=0;do if(!(f&1)){if(!(i[a+13>>0]|0)){x=0;fb(k[(k[d>>2]|0)+4>>2]|0,d|0,b+8|0,1);g=x;x=0;if(g&1)break;OBa(d);r=c;return}g=k[e>>2]|0;k[e>>2]=d;if(!g){r=c;return}OBa(g);r=c;return}while(0);c=Hc()|0;e=M;OBa(d);h=e;j=c;Sc(j|0)}function Ana(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;e=r;r=r+16|0;f=e;g=a+12|0;h=(k[g>>2]|0)==0;q2a(f,273872,54);x=0;pa(57,h|0,f|0,130,273927,274394);h=x;x=0;if(h&1){h=Hc()|0;j=M;K2a(f);l=j;m=h;Sc(m|0)}K2a(f);f=KBa(16)|0;x=0;nb(134,f|0,k[a+8>>2]|0,c|0,(i[d>>0]|0)!=0|0);d=x;x=0;if(d&1){d=Hc()|0;c=M;OBa(f);l=c;m=d;Sc(m|0)}x=0;d=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;c=x;x=0;do if(!(c&1)){if(!(i[d+13>>0]|0)){x=0;fb(k[(k[f>>2]|0)+4>>2]|0,f|0,b+8|0,1);a=x;x=0;if(a&1)break;OBa(f);r=e;return}a=k[g>>2]|0;k[g>>2]=f;if(!a){r=e;return}OBa(a);r=e;return}while(0);e=Hc()|0;g=M;OBa(f);l=g;m=e;Sc(m|0)}function Bna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=a+12|0;g=(k[f>>2]|0)==0;q2a(e,273872,54);x=0;pa(57,g|0,e|0,130,273927,274190);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(e);j=h;l=g;Sc(l|0)}K2a(e);e=KBa(20)|0;x=0;fb(355,e|0,k[a+8>>2]|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;a=M;OBa(e);j=a;l=c;Sc(l|0)}x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;a=x;x=0;do if(!(a&1)){if(!(i[c+13>>0]|0)){x=0;fb(k[(k[e>>2]|0)+4>>2]|0,e|0,b+8|0,1);g=x;x=0;if(g&1)break;OBa(e);r=d;return}g=k[f>>2]|0;k[f>>2]=e;if(!g){r=d;return}OBa(g);r=d;return}while(0);d=Hc()|0;f=M;OBa(e);j=f;l=d;Sc(l|0)}function Cna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=a+12|0;g=(k[f>>2]|0)==0;q2a(e,273872,54);x=0;pa(57,g|0,e|0,130,273927,273988);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(e);j=h;l=g;Sc(l|0)}K2a(e);e=KBa(12)|0;x=0;fb(341,e|0,k[a+8>>2]|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;a=M;OBa(e);j=a;l=c;Sc(l|0)}x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;a=x;x=0;do if(!(a&1)){if(!(i[c+13>>0]|0)){x=0;fb(k[(k[e>>2]|0)+4>>2]|0,e|0,b+8|0,1);g=x;x=0;if(g&1)break;OBa(e);r=d;return}g=k[f>>2]|0;k[f>>2]=e;if(!g){r=d;return}OBa(g);r=d;return}while(0);d=Hc()|0;f=M;OBa(e);j=f;l=d;Sc(l|0)}function Dna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=a+8|0;d=k[c>>2]|0;e=a+12|0;f=k[e>>2]|0;g=f;do if((d|0)==(f|0)){h=a+4|0;i=k[h>>2]|0;j=k[a>>2]|0;l=j;if(i>>>0>j>>>0){m=i;n=((m-l>>3)+1|0)/-2|0;o=i+(n<<3)|0;if((i|0)==(d|0)){p=o;q=d}else{r=d+-8-m|0;m=i;s=o;while(1){t=k[m>>2]|0;u=m+4|0;v=k[u>>2]|0;k[m>>2]=0;k[u>>2]=0;k[s>>2]=t;t=s+4|0;u=k[t>>2]|0;k[t>>2]=v;if(u)j0a(u);m=m+8|0;if((m|0)==(d|0))break;else s=s+8|0}p=o+((r>>>3)+1<<3)|0;q=k[h>>2]|0}k[c>>2]=p;k[h>>2]=q+(n<<3);break}s=g-l>>2;m=(s|0)==0?1:s;s=KBa(m<<3)|0;u=s;v=s+(m>>>2<<3)|0;t=v;w=s+(m<<3)|0;if((i|0)!=(d|0)){m=(d+-8-i|0)>>>3;s=i;x=v;while(1){k[x>>2]=k[s>>2];y=s+4|0;k[x+4>>2]=k[y>>2];k[s>>2]=0;k[y>>2]=0;s=s+8|0;if((s|0)==(d|0))break;else x=x+8|0}x=k[a>>2]|0;s=k[h>>2]|0;i=k[c>>2]|0;k[a>>2]=u;k[h>>2]=t;k[c>>2]=v+(m+1<<3);k[e>>2]=w;if((i|0)==(s|0))z=x;else{l=i;do{i=k[l+-4>>2]|0;l=l+-8|0;if(i)j0a(i)}while((l|0)!=(s|0));z=x}}else{k[a>>2]=u;k[h>>2]=t;k[c>>2]=t;k[e>>2]=w;z=j}if(z)OBa(z)}while(0);z=k[c>>2]|0;k[z>>2]=k[b>>2];e=b+4|0;k[z+4>>2]=k[e>>2];k[b>>2]=0;k[e>>2]=0;k[c>>2]=z+8;return}function Ena(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+64|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;h=a+40|0;j=a+44|0;l=k[j>>2]|0;m=l;if((l-(k[h>>2]|0)|0)==16){l=i[m+-16>>0]|0;if(!(l&1))n=(l&255)>>>1;else n=k[m+-12>>2]|0;if(!n)o=21;else o=6}else o=6;do if((o|0)==6){x=0;fb(140,e|0,275370,39);n=x;x=0;if(!(n&1)){x=0;fb(356,a|0,b|0,e|0);n=x;x=0;if(n&1){n=Hc(7384,4496)|0;m=M;K2a(e);p=n;q=m;break}else{K2a(e);o=21;break}}else o=9}while(0);do if((o|0)==21){x=0;fb(140,d|0,275611,494);e=x;x=0;if(!(e&1)){e=d+12|0;k[e>>2]=0;m=k[j>>2]|0;if(m>>>0>=(k[a+48>>2]|0)>>>0){x=0;xa(861,h|0,d|0);n=x;x=0;if(n&1){n=Hc(7384,4496)|0;l=M;K2a(d);s=l;t=n;o=10;break}}else{k[m>>2]=k[d>>2];k[m+4>>2]=k[d+4>>2];k[m+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[m+12>>2]=k[e>>2];k[j>>2]=(k[j>>2]|0)+16}K2a(d);x=0;xa(k[(k[b>>2]|0)+12>>2]|0,b|0,a|0);e=x;x=0;if(!(e&1)){u=a+5|0;v=i[u>>0]|0;w=v<<24>>24==0;r=c;return w|0}else o=9}else o=9}while(0);if((o|0)==9){b=Hc(7384,4496)|0;s=M;t=b;o=10}if((o|0)==10){p=t;q=s}if((q|0)==(hf(7384)|0)){me(p|0)|0;x=0;fb(140,g|0,275410,78);s=x;x=0;do if(s&1){t=Hc()|0;y=t;z=M}else{x=0;pa(57,0,g|0,41,275489,275532);t=x;x=0;if(t&1){t=Hc()|0;o=M;K2a(g);y=t;z=o;break}K2a(g);ge();u=a+5|0;v=i[u>>0]|0;w=v<<24>>24==0;r=c;return w|0}while(0);x=0;hb(45);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}else{C=y;D=z;Sc(C|0)}}if((q|0)!=(hf(4496)|0)){C=p;D=q;Sc(C|0)}me(p|0)|0;p=i[a+5>>0]|0;x=0;fb(140,f|0,329672,0);q=x;x=0;do if(q&1){z=Hc()|0;E=z;F=M}else{x=0;pa(57,p<<24>>24!=0|0,f|0,45,275489,275532);z=x;x=0;if(z&1){z=Hc()|0;y=M;K2a(f);E=z;F=y;break}K2a(f);ge();u=a+5|0;v=i[u>>0]|0;w=v<<24>>24==0;r=c;return w|0}while(0);x=0;hb(45);w=x;x=0;if(w&1){A=Hc(0)|0;B=M;Fg(A)}else{C=E;D=F;Sc(C|0)}return 0}function Fna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+64|0;e=d+40|0;f=d;Ina(a,b,c);c=f;b=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));c=f+20|0;b=f+24|0;k[b>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;a=f+4|0;d=f+8|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=31624;k[f>>2]=31588;k[c>>2]=31648;x=0;nb(114,f|0,276106,275489,71);x=0;f=Hc()|0;k[a>>2]=31680;k[a+-4>>2]=31708;k[a+16>>2]=31732;K2a(d);k[c>>2]=20796;c=k[b>>2]|0;if(!c)Sc(f|0);x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d)Sc(f|0);k[b>>2]=0;Sc(f|0)}function Gna(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;q2a(c,275611,494);d=c+12|0;k[d>>2]=0;e=a+44|0;f=k[e>>2]|0;if(f>>>0<(k[a+48>>2]|0)>>>0){k[f>>2]=k[c>>2];k[f+4>>2]=k[c+4>>2];k[f+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[f+12>>2]=k[d>>2];k[e>>2]=(k[e>>2]|0)+16;K2a(c);r=b;return}x=0;xa(861,a+40|0,c|0);a=x;x=0;if(a&1){a=Hc()|0;K2a(c);Sc(a|0)}else{K2a(c);r=b;return}}function Hna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;g=k[b+40>>2]|0;h=k[b+44>>2]|0;if((g|0)==(h|0)){r=c;return}b=d+8|0;j=d+1|0;l=d+4|0;m=g;while(1){x=0;fb(180,f|0,k[m+12>>2]|0,9);g=x;x=0;if(g&1){n=9;break}g=i[m>>0]|0;o=(g&1)==0;x=0;p=Fa(88,f|0,(o?m+1|0:k[m+8>>2]|0)|0,(o?(g&255)>>>1:k[m+4>>2]|0)|0)|0;g=x;x=0;if(g&1){n=10;break};k[e>>2]=k[p>>2];k[e+4>>2]=k[p+4>>2];k[e+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;x=0;p=Ta(484,e|0,324246)|0;g=x;x=0;if(g&1){n=11;break};k[d>>2]=k[p>>2];k[d+4>>2]=k[p+4>>2];k[d+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;p=i[d>>0]|0;g=(p&1)==0;x=0;Fa(88,a|0,(g?j:k[b>>2]|0)|0,(g?(p&255)>>>1:k[l>>2]|0)|0)|0;p=x;x=0;if(p&1){n=12;break}K2a(d);K2a(e);K2a(f);m=m+16|0;if((m|0)==(h|0)){n=3;break}}if((n|0)==3){r=c;return}else if((n|0)==9){c=Hc()|0;q=M;s=c;K2a(a);Sc(s|0)}else if((n|0)==10){c=Hc()|0;t=M;u=c}else if((n|0)==11){c=Hc()|0;v=M;w=c;n=13}else if((n|0)==12){c=Hc()|0;h=M;K2a(d);v=h;w=c;n=13}if((n|0)==13){K2a(e);t=v;u=w}K2a(f);q=t;s=u;K2a(a);Sc(s|0)}function Ina(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+48|0;e=d+24|0;f=d+8|0;g=d;h=KBa(68)|0;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=31248;j=h+12|0;x=0;xa(731,j|0,5);l=x;x=0;if(l&1){l=Hc()|0;c0a(h);OBa(h);Sc(l|0)}l=j;k[e>>2]=31456;m=b+8|0;n=k[m+4>>2]|0;o=e+4|0;k[o>>2]=k[m>>2];k[o+4>>2]=n;k[e+12>>2]=k[b+16>>2];n=k[b+20>>2]|0;k[e+16>>2]=n;b=(n|0)==0;if(!b)h0a(n);x=0;o=Ta(566,j|0,e|0)|0;j=x;x=0;do if(!(j&1)?(k[f>>2]=21048,m=f+4|0,x=0,xa(604,m|0,c|0),p=x,x=0,!(p&1)):0){x=0;Ta(564,o|0,f|0)|0;p=x;x=0;if(p&1){p=Hc()|0;q=M;k[f>>2]=21048;K2a(m);s=q;t=p;break}k[f>>2]=21048;K2a(m);k[e>>2]=31456;if(!b)j0a(n);m=k[a+52>>2]|0;k[g>>2]=l;p=g+4|0;k[p>>2]=h;h0a(h);q=m+4|0;u=k[q>>2]|0;if(u>>>0<(k[m+8>>2]|0)>>>0){k[u>>2]=l;k[u+4>>2]=h;k[g>>2]=0;k[p>>2]=0;k[q>>2]=u+8;v=a+5|0;i[v>>0]=1;j0a(h);r=d;return}x=0;xa(732,m|0,g|0);m=x;x=0;if(m&1){m=Hc()|0;u=M;q=k[p>>2]|0;if(!q){w=u;y=m;j0a(h);Sc(y|0)}j0a(q);w=u;y=m;j0a(h);Sc(y|0)}else{m=k[p>>2]|0;if(!m){v=a+5|0;i[v>>0]=1;j0a(h);r=d;return}j0a(m);v=a+5|0;i[v>>0]=1;j0a(h);r=d;return}}else z=16;while(0);if((z|0)==16){z=Hc()|0;s=M;t=z}k[e>>2]=31456;if(b){w=s;y=t;j0a(h);Sc(y|0)}j0a(n);w=s;y=t;j0a(h);Sc(y|0)}function Jna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+128|0;e=d+108|0;f=d+84|0;g=d+96|0;h=d+72|0;j=d+32|0;l=d+16|0;m=d;if((Vf[k[k[c>>2]>>2]&1023](c)|0)==3){q2a(a,301569,4);r=d;return}n=iDa(c,168,6592,0)|0;do if(!n){o=iDa(c,168,6704,0)|0;if(o){if(k[o+32>>2]|0)break;if(!(Vf[k[(k[o>>2]|0)+36>>2]&1023](o)|0))break;if(!(cg[k[(k[o>>2]|0)+68>>2]&1023](o,2)|0))break;p=o+36|0;o=(k[p>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,o|0,e|0,588,285183,276209);o=x;x=0;if(o&1){o=Hc()|0;K2a(e);Sc(o|0)}K2a(e);Jna(f,b,k[p>>2]|0);k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;p=i[f>>0]|0;o=(p&1)==0?(p&255)>>>1:k[f+4>>2]|0;x=0;nb(83,a|0,276271,6,o+6|0);p=x;x=0;if(!(p&1)?(x=0,Fa(88,a|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,o|0)|0,o=x,x=0,!(o&1)):0){K2a(f);r=d;return}o=Hc()|0;p=M;K2a(a);K2a(f);q=p;s=o;Sc(s|0)}o=iDa(c,168,6784,0)|0;if(o){p=o+24|0;t=(k[p>>2]|0)!=0;q2a(g,276278,31);x=0;pa(57,t|0,g|0,94,275489,276310);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(g);q=u;s=t;Sc(s|0)}K2a(g);if(iDa(k[p>>2]|0,168,6592,0)|0){p=o+32|0;o=(k[p>>2]|0)!=0;q2a(h,276396,33);x=0;pa(57,o|0,h|0,99,275489,276310);o=x;x=0;if(o&1){o=Hc()|0;t=M;K2a(h);q=t;s=o;Sc(s|0)}K2a(h);Jna(e,b,k[p>>2]|0);k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;p=i[e>>0]|0;o=(p&1)==0?(p&255)>>>1:k[e+4>>2]|0;x=0;nb(83,a|0,276271,6,o+6|0);p=x;x=0;if(!(p&1)?(x=0,Fa(88,a|0,((i[e>>0]&1)==0?e+1|0:k[e+8>>2]|0)|0,o|0)|0,o=x,x=0,!(o&1)):0){K2a(e);r=d;return}o=Hc()|0;p=M;K2a(a);K2a(e);q=p;s=o;Sc(s|0)}}}else if(((k[n+28>>2]|0)+-1|0)>>>0>=2?(k[n+24>>2]|0)==256:0){q2a(a,276201,7);r=d;return}while(0);d=j;a=d+36|0;do{k[d>>2]=0;d=d+4|0}while((d|0)<(a|0));d=j+20|0;a=j+24|0;k[a>>2]=0;k[j+28>>2]=0;k[j+32>>2]=0;k[j+36>>2]=-1;n=j+4|0;b=n+-4|0;h=n+16|0;g=j+8|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[j+4>>2]=42728;k[j>>2]=42692;k[d>>2]=42752;x=0;fb(k[(k[c>>2]|0)+76>>2]|0,m|0,c|0,1);c=x;x=0;if(c&1){c=Hc()|0;v=M;w=c}else{k[l>>2]=42768;c=l+4|0;x=0;xa(604,c|0,m|0);e=x;x=0;if(e&1){e=Hc()|0;y=M;z=e}else{x=0;e=Ta(607,j|0,l|0)|0;j=x;x=0;if(!(j&1)){x=0;nb(142,e|0,276310,275489,107);x=0}e=Hc()|0;j=M;k[l>>2]=42768;K2a(c);y=j;z=e}K2a(m);v=y;w=z}k[n>>2]=42804;k[b>>2]=42832;k[h>>2]=42856;K2a(g);k[d>>2]=20796;d=k[a>>2]|0;if(d){x=0;g=Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(g)k[a>>2]=0}q=v;s=w;Sc(s|0)}function Kna(a,b){a=a|0;b=b|0;var c=0,d=0;Lna(a);c=i[b>>0]|0;d=(c&1)==0;O3a((k[a+44>>2]|0)+-16|0,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0;Lna(a);return}function Lna(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;d=a+44|0;e=k[d>>2]|0;f=i[e+-16>>0]|0;if(!(f&1))g=(f&255)>>>1;else g=k[e+-12>>2]|0;if(!g){r=b;return}q2a(c,329672,0);g=c+12|0;e=k[d>>2]|0;k[g>>2]=k[e+-4>>2];if(e>>>0>=(k[a+48>>2]|0)>>>0){x=0;xa(861,a+40|0,c|0);a=x;x=0;if(a&1){a=Hc()|0;K2a(c);Sc(a|0)}}else{k[e>>2]=k[c>>2];k[e+4>>2]=k[c+4>>2];k[e+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[e+12>>2]=k[g>>2];k[d>>2]=(k[d>>2]|0)+16}K2a(c);r=b;return}function Mna(a,b){a=a|0;b=b|0;var c=0,d=0;c=i[b>>0]|0;d=(c&1)==0;O3a((k[a+44>>2]|0)+-16|0,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0;return}function Nna(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;Lna(a);d=a+44|0;a=(k[(k[d>>2]|0)+-4>>2]|0)!=0;q2a(c,329672,0);x=0;pa(57,a|0,c|0,131,275489,276430);a=x;x=0;if(a&1){a=Hc()|0;K2a(c);Sc(a|0)}else{K2a(c);c=(k[d>>2]|0)+-4|0;k[c>>2]=(k[c>>2]|0)+-1;r=b;return}}function Ona(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0;c=r;r=r+592|0;d=c+568|0;e=c+540|0;f=c+556|0;g=c+544|0;h=c+528|0;j=c+504|0;l=c+480|0;m=c+468|0;n=c+456|0;o=c+444|0;p=c+432|0;q=c+420|0;s=c+408|0;t=c+396|0;u=c+384|0;v=c+372|0;w=c+360|0;y=c+348|0;z=c+516|0;A=c+336|0;B=c+492|0;C=c+324|0;D=c+312|0;E=c+300|0;F=c+288|0;G=c+276|0;H=c+264|0;I=c+252|0;J=c+240|0;K=c+228|0;L=c+216|0;N=c+204|0;O=c+192|0;P=c+180|0;Q=c+168|0;R=c+156|0;S=c+144|0;T=c+132|0;U=c+120|0;V=c+108|0;W=c+96|0;X=c+84|0;Y=c+72|0;Z=c+60|0;_=c+48|0;$=c+36|0;aa=c+24|0;ba=c+12|0;ca=c;da=a+4|0;do if(i[da>>0]|0){q2a(f,276477,37);x=0;fb(357,a|0,b|0,f|0);ea=x;x=0;if(!(ea&1)){K2a(f);break}ea=Hc()|0;fa=M;K2a(f);ga=ea;ha=fa;Sc(ga|0)}while(0);i[da>>0]=1;da=a+8|0;k[da>>2]=b;do if(i[b+72>>0]|0){q2a(g,276515,24);x=0;fb(357,a|0,b|0,g|0);f=x;x=0;if(!(f&1)){K2a(g);break}f=Hc()|0;fa=M;K2a(g);ga=f;ha=fa;Sc(ga|0)}while(0);g=k[b+24>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;fa=i[g>>0]|0;f=(fa&1)==0?(fa&255)>>>1:k[g+4>>2]|0;x=0;nb(83,h|0,276540,16,f+16|0);fa=x;x=0;if(fa&1){ia=Hc()|0;ja=M;K2a(h);Sc(ia|0)}x=0;Fa(88,h|0,((i[g>>0]&1)==0?g+1|0:k[g+8>>2]|0)|0,f|0)|0;f=x;x=0;if(f&1){ia=Hc()|0;ja=M;K2a(h);Sc(ia|0)}x=0;va(1518,a|0);ia=x;x=0;if((!(ia&1)?(ia=a+44|0,ja=i[h>>0]|0,f=(ja&1)==0,x=0,Fa(88,(k[ia>>2]|0)+-16|0,(f?h+1|0:k[h+8>>2]|0)|0,(f?(ja&255)>>>1:k[h+4>>2]|0)|0)|0,ja=x,x=0,!(ja&1)):0)?(x=0,va(1518,a|0),ja=x,x=0,!(ja&1)):0){K2a(h);Lna(a);ja=(k[ia>>2]|0)+-4|0;k[ja>>2]=(k[ja>>2]|0)+1;q2a(j,276557,18);x=0;va(1518,a|0);ja=x;x=0;if((!(ja&1)?(ja=i[j>>0]|0,f=(ja&1)==0,x=0,Fa(88,(k[ia>>2]|0)+-16|0,(f?j+1|0:k[j+8>>2]|0)|0,(f?(ja&255)>>>1:k[j+4>>2]|0)|0)|0,ja=x,x=0,!(ja&1)):0)?(x=0,va(1518,a|0),ja=x,x=0,!(ja&1)):0){K2a(j);q2a(l,276576,18);x=0;va(1518,a|0);ja=x;x=0;if((!(ja&1)?(ja=i[l>>0]|0,f=(ja&1)==0,x=0,Fa(88,(k[ia>>2]|0)+-16|0,(f?l+1|0:k[l+8>>2]|0)|0,(f?(ja&255)>>>1:k[l+4>>2]|0)|0)|0,ja=x,x=0,!(ja&1)):0)?(x=0,va(1518,a|0),ja=x,x=0,!(ja&1)):0){K2a(l);q2a(m,276595,18);x=0;va(1518,a|0);ja=x;x=0;if((!(ja&1)?(ja=i[m>>0]|0,f=(ja&1)==0,x=0,Fa(88,(k[ia>>2]|0)+-16|0,(f?m+1|0:k[m+8>>2]|0)|0,(f?(ja&255)>>>1:k[m+4>>2]|0)|0)|0,ja=x,x=0,!(ja&1)):0)?(x=0,va(1518,a|0),ja=x,x=0,!(ja&1)):0){K2a(m);q2a(n,276614,22);x=0;va(1518,a|0);ja=x;x=0;do if(!(ja&1)){f=i[n>>0]|0;g=(f&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(g?n+1|0:k[n+8>>2]|0)|0,(g?(f&255)>>>1:k[n+4>>2]|0)|0)|0;f=x;x=0;if(f&1)break;x=0;va(1518,a|0);f=x;x=0;if(f&1)break;K2a(n);q2a(o,276637,31);x=0;va(1518,a|0);f=x;x=0;do if(!(f&1)){g=i[o>>0]|0;fa=(g&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(fa?o+1|0:k[o+8>>2]|0)|0,(fa?(g&255)>>>1:k[o+4>>2]|0)|0)|0;g=x;x=0;if(g&1)break;x=0;va(1518,a|0);g=x;x=0;if(g&1)break;K2a(o);q2a(p,276669,28);x=0;va(1518,a|0);g=x;x=0;do if(!(g&1)){fa=i[p>>0]|0;ea=(fa&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(ea?p+1|0:k[p+8>>2]|0)|0,(ea?(fa&255)>>>1:k[p+4>>2]|0)|0)|0;fa=x;x=0;if(fa&1)break;x=0;va(1518,a|0);fa=x;x=0;if(fa&1)break;K2a(p);q2a(q,276698,18);x=0;va(1518,a|0);fa=x;x=0;do if(!(fa&1)){ea=i[q>>0]|0;ka=(ea&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(ka?q+1|0:k[q+8>>2]|0)|0,(ka?(ea&255)>>>1:k[q+4>>2]|0)|0)|0;ea=x;x=0;if(ea&1)break;x=0;va(1518,a|0);ea=x;x=0;if(ea&1)break;K2a(q);q2a(s,276717,16);x=0;va(1518,a|0);ea=x;x=0;do if(!(ea&1)){ka=i[s>>0]|0;la=(ka&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(la?s+1|0:k[s+8>>2]|0)|0,(la?(ka&255)>>>1:k[s+4>>2]|0)|0)|0;ka=x;x=0;if(ka&1)break;x=0;va(1518,a|0);ka=x;x=0;if(ka&1)break;K2a(s);q2a(t,276734,16);x=0;va(1518,a|0);ka=x;x=0;do if(!(ka&1)){la=i[t>>0]|0;ma=(la&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(ma?t+1|0:k[t+8>>2]|0)|0,(ma?(la&255)>>>1:k[t+4>>2]|0)|0)|0;la=x;x=0;if(la&1)break;x=0;va(1518,a|0);la=x;x=0;if(la&1)break;K2a(t);la=b+60|0;DU(u,la);ma=k[u>>2]|0;na=u+4|0;oa=k[na>>2]|0;qa=(ma|0)==(oa|0);ra=ma;if(ma){if(!qa)k[na>>2]=oa+(~((oa+-4-ra|0)>>>2)<<2);OBa(ma)}a:do if(qa){q2a(v,276751,15);x=0;va(1518,a|0);ma=x;x=0;do if(!(ma&1)){ra=i[v>>0]|0;oa=(ra&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(oa?v+1|0:k[v+8>>2]|0)|0,(oa?(ra&255)>>>1:k[v+4>>2]|0)|0)|0;ra=x;x=0;if(ra&1)break;x=0;va(1518,a|0);ra=x;x=0;if(ra&1)break;K2a(v);break a}while(0);ma=Hc()|0;ra=M;K2a(v);ga=ma;ha=ra;Sc(ga|0)}else{q2a(w,276767,14);x=0;va(1518,a|0);ra=x;x=0;do if(!(ra&1)){ma=i[w>>0]|0;oa=(ma&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(oa?w+1|0:k[w+8>>2]|0)|0,(oa?(ma&255)>>>1:k[w+4>>2]|0)|0)|0;ma=x;x=0;if(ma&1)break;x=0;va(1518,a|0);ma=x;x=0;if(ma&1)break;K2a(w);Lna(a);ma=(k[ia>>2]|0)+-4|0;k[ma>>2]=(k[ma>>2]|0)+1;ma=a+12|0;DU(y,la);oa=k[ma>>2]|0;na=oa;sa=a+16|0;if(!oa)ta=a+20|0;else{ua=k[sa>>2]|0;if((ua|0)!=(oa|0))k[sa>>2]=ua+(~((ua+-4-na|0)>>>2)<<2);OBa(oa);oa=a+20|0;k[oa>>2]=0;k[sa>>2]=0;k[ma>>2]=0;ta=oa}k[ma>>2]=k[y>>2];oa=y+4|0;k[sa>>2]=k[oa>>2];na=y+8|0;k[ta>>2]=k[na>>2];k[na>>2]=0;k[oa>>2]=0;k[y>>2]=0;oa=k[ma>>2]|0;ma=k[sa>>2]|0;b:do if((oa|0)!=(ma|0)){sa=z+1|0;na=z+8|0;ua=z+4|0;wa=F+8|0;ya=F+1|0;za=F+4|0;Aa=B+4|0;Ca=B+8|0;Da=B+1|0;Ea=d+4|0;Ga=oa;c:while(1){Ha=k[Ga>>2]|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;x=0;Ia=Ba(k[(k[Ha>>2]|0)+16>>2]|0,Ha|0)|0;Ja=x;x=0;do if(Ja&1)Ka=86;else{x=0;fb(358,A|0,a|0,k[Ia+4>>2]|0);La=x;x=0;if(La&1){Ka=86;break}if(!(i[z>>0]&1)){i[sa>>0]=0;i[z>>0]=0}else{i[k[na>>2]>>0]=0;k[ua>>2]=0}x=0;xa(603,z|0,0);La=x;x=0;if(La&1){Ka=84;break c};k[z>>2]=k[A>>2];k[z+4>>2]=k[A+4>>2];k[z+8>>2]=k[A+8>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;K2a(A)}while(0);if((Ka|0)==86){Ka=0;Ia=Hc(7384)|0;Ja=M;if((Ja|0)!=(hf(7384)|0)){Ma=Ia;Na=Ja;break}Ja=me(Ia|0)|0;Ia=Ja+(k[(k[Ja>>2]|0)+-28>>2]|0)|0;d:do if(!Ia)Ka=103;else{Ja=k[Ia+4>>2]|0;do if(Ja){La=k[(k[Ja>>2]|0)+4>>2]|0;k[e>>2]=7408;x=0;fb(La|0,d|0,Ja|0,e|0);La=x;x=0;if(La&1){Ka=119;break c}La=k[d>>2]|0;Oa=(La|0)==0;Pa=La+4|0;Qa=k[Ea>>2]|0;do if(Qa){Ra=Qa+4|0;Sa=k[Ra>>2]|0;k[Ra>>2]=Sa+-1;if((Sa|0)!=1)break;x=0;va(k[(k[Qa>>2]|0)+8>>2]|0,Qa|0);Sa=x;x=0;if(Sa&1){Ka=96;break c}Sa=Qa+8|0;Ra=k[Sa>>2]|0;k[Sa>>2]=Ra+-1;if((Ra|0)!=1)break;x=0;va(k[(k[Qa>>2]|0)+12>>2]|0,Qa|0);Ra=x;x=0;if(Ra&1){Ka=96;break c}}while(0);if(Oa)break;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;Qa=i[Pa>>0]|0;Ra=(Qa&1)==0?(Qa&255)>>>1:k[La+8>>2]|0;x=0;nb(83,C|0,276782,2,Ra+2|0);Qa=x;x=0;if(Qa&1){Ka=101;break c}x=0;Fa(88,C|0,((i[Pa>>0]&1)==0?Pa+1|0:k[La+12>>2]|0)|0,Ra|0)|0;Ra=x;x=0;if(Ra&1){Ka=101;break c}x=0;Ra=Ta(484,C|0,276785)|0;Qa=x;x=0;if(Qa&1){Ka=122;break c};k[B>>2]=k[Ra>>2];k[B+4>>2]=k[Ra+4>>2];k[B+8>>2]=k[Ra+8>>2];k[Ra>>2]=0;k[Ra+4>>2]=0;k[Ra+8>>2]=0;K2a(C);break d}while(0);Ka=103}while(0);if((Ka|0)==103?(Ka=0,x=0,fb(140,B|0,329672,0),Ia=x,x=0,Ia&1):0){Ka=121;break};k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;Ia=i[B>>0]|0;Ja=(Ia&1)==0?(Ia&255)>>>1:k[Aa>>2]|0;x=0;nb(83,E|0,294875,4,Ja+4|0);Ia=x;x=0;if(Ia&1){Ka=123;break}x=0;Fa(88,E|0,((i[B>>0]&1)==0?Da:k[Ca>>2]|0)|0,Ja|0)|0;Ja=x;x=0;if(Ja&1){Ka=123;break}x=0;Ja=Ta(484,E|0,276787)|0;Ia=x;x=0;if(Ia&1){Ka=124;break};k[D>>2]=k[Ja>>2];k[D+4>>2]=k[Ja+4>>2];k[D+8>>2]=k[Ja+8>>2];k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;x=0;fb(356,a|0,Ha|0,D|0);Ja=x;x=0;if(Ja&1){Ka=125;break}K2a(D);K2a(E);K2a(B);x=0;hb(45);Ja=x;x=0;if(Ja&1){Ka=128;break}}Ja=k[Ha+24>>2]|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;Ia=i[Ja>>0]|0;Ra=(Ia&1)==0?(Ia&255)>>>1:k[Ja+4>>2]|0;x=0;nb(83,H|0,276822,9,Ra+9|0);Ia=x;x=0;if(Ia&1){Ka=112;break}x=0;Fa(88,H|0,((i[Ja>>0]&1)==0?Ja+1|0:k[Ja+8>>2]|0)|0,Ra|0)|0;Ra=x;x=0;if(Ra&1){Ka=112;break}x=0;Ra=Ta(484,H|0,325552)|0;Ja=x;x=0;if(Ja&1){Ka=131;break};k[G>>2]=k[Ra>>2];k[G+4>>2]=k[Ra+4>>2];k[G+8>>2]=k[Ra+8>>2];k[Ra>>2]=0;k[Ra+4>>2]=0;k[Ra+8>>2]=0;Ra=i[z>>0]|0;Ja=(Ra&1)==0;x=0;Ia=Fa(88,G|0,(Ja?sa:k[na>>2]|0)|0,(Ja?(Ra&255)>>>1:k[ua>>2]|0)|0)|0;Ra=x;x=0;if(Ra&1){Ka=132;break};k[F>>2]=k[Ia>>2];k[F+4>>2]=k[Ia+4>>2];k[F+8>>2]=k[Ia+8>>2];k[Ia>>2]=0;k[Ia+4>>2]=0;k[Ia+8>>2]=0;x=0;va(1518,a|0);Ia=x;x=0;if(Ia&1){Ka=133;break}Ia=i[F>>0]|0;Ra=(Ia&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(Ra?ya:k[wa>>2]|0)|0,(Ra?(Ia&255)>>>1:k[za>>2]|0)|0)|0;Ia=x;x=0;if(Ia&1){Ka=133;break}x=0;va(1518,a|0);Ia=x;x=0;if(Ia&1){Ka=133;break}K2a(F);K2a(G);K2a(H);K2a(z);Ga=Ga+4|0;if((Ga|0)==(ma|0))break b}switch(Ka|0){case 84:{Fg(Hc(0)|0);break}case 96:{Fg(Hc(0)|0);break}case 101:{Ga=Hc()|0;za=M;K2a(C);Ua=za;Va=Ga;Ka=120;break}case 112:{Ga=Hc()|0;za=M;K2a(H);Wa=za;Xa=Ga;Ka=129;break}case 119:{Ga=Hc()|0;Ua=M;Va=Ga;Ka=120;break}case 121:{Ya=Hc()|0;Za=M;Ka=130;break}case 122:{Ga=Hc()|0;za=M;K2a(C);Ya=Ga;Za=za;Ka=130;break}case 123:{za=Hc()|0;Ga=M;K2a(E);_a=za;$a=Ga;Ka=127;break}case 124:{ab=Hc()|0;bb=M;Ka=126;break}case 125:{Ga=Hc()|0;za=M;K2a(D);ab=Ga;bb=za;Ka=126;break}case 128:{za=Hc()|0;Wa=M;Xa=za;Ka=129;break}case 131:{cb=Hc()|0;db=M;Ka=135;break}case 132:{eb=Hc()|0;gb=M;Ka=134;break}case 133:{za=Hc()|0;Ga=M;K2a(F);eb=za;gb=Ga;Ka=134;break}}if((Ka|0)==120){Ya=Va;Za=Ua;Ka=130}else if((Ka|0)==126){K2a(E);_a=ab;$a=bb;Ka=127}else if((Ka|0)==129){Ma=Xa;Na=Wa}else if((Ka|0)==134){K2a(G);cb=eb;db=gb;Ka=135}if((Ka|0)==127){K2a(B);Ya=_a;Za=$a;Ka=130}else if((Ka|0)==135){K2a(H);Ma=cb;Na=db}do if((Ka|0)==130){x=0;hb(45);Ga=x;x=0;if(!(Ga&1)){Ma=Ya;Na=Za;break}Ga=Hc(0)|0;Fg(Ga)}while(0);K2a(z);ga=Ma;ha=Na;Sc(ga|0)}while(0);Lna(a);ma=(k[(k[ia>>2]|0)+-4>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,ma|0,d|0,131,275489,276430);ma=x;x=0;if(ma&1){ma=Hc()|0;K2a(d);Sc(ma|0)}K2a(d);ma=(k[ia>>2]|0)+-4|0;k[ma>>2]=(k[ma>>2]|0)+-1;q2a(I,294913,1);x=0;va(1518,a|0);ma=x;x=0;do if(!(ma&1)){oa=i[I>>0]|0;Ga=(oa&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(Ga?I+1|0:k[I+8>>2]|0)|0,(Ga?(oa&255)>>>1:k[I+4>>2]|0)|0)|0;oa=x;x=0;if(oa&1)break;x=0;va(1518,a|0);oa=x;x=0;if(oa&1)break;K2a(I);break a}while(0);ma=Hc()|0;oa=M;K2a(I);ga=ma;ha=oa;Sc(ga|0)}while(0);ra=Hc()|0;oa=M;K2a(w);ga=ra;ha=oa;Sc(ga|0)}while(0);q2a(J,276832,16);x=0;va(1518,a|0);qa=x;x=0;do if(!(qa&1)){oa=i[J>>0]|0;ra=(oa&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(ra?J+1|0:k[J+8>>2]|0)|0,(ra?(oa&255)>>>1:k[J+4>>2]|0)|0)|0;oa=x;x=0;if(oa&1)break;x=0;va(1518,a|0);oa=x;x=0;if(oa&1)break;K2a(J);Lna(a);oa=(k[ia>>2]|0)+-4|0;k[oa>>2]=(k[oa>>2]|0)+1;q2a(K,276849,25);x=0;va(1518,a|0);oa=x;x=0;do if(!(oa&1)){ra=i[K>>0]|0;ma=(ra&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(ma?K+1|0:k[K+8>>2]|0)|0,(ma?(ra&255)>>>1:k[K+4>>2]|0)|0)|0;ra=x;x=0;if(ra&1)break;x=0;va(1518,a|0);ra=x;x=0;if(ra&1)break;K2a(K);q2a(L,276875,14);x=0;va(1518,a|0);ra=x;x=0;do if(!(ra&1)){ma=i[L>>0]|0;Ga=(ma&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(Ga?L+1|0:k[L+8>>2]|0)|0,(Ga?(ma&255)>>>1:k[L+4>>2]|0)|0)|0;ma=x;x=0;if(ma&1)break;x=0;va(1518,a|0);ma=x;x=0;if(ma&1)break;K2a(L);Lna(a);ma=(k[(k[ia>>2]|0)+-4>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,ma|0,d|0,131,275489,276430);ma=x;x=0;if(ma&1){ma=Hc()|0;K2a(d);Sc(ma|0)}K2a(d);ma=(k[ia>>2]|0)+-4|0;k[ma>>2]=(k[ma>>2]|0)+-1;q2a(N,294913,1);x=0;va(1518,a|0);ma=x;x=0;do if(!(ma&1)){Ga=i[N>>0]|0;za=(Ga&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(za?N+1|0:k[N+8>>2]|0)|0,(za?(Ga&255)>>>1:k[N+4>>2]|0)|0)|0;Ga=x;x=0;if(Ga&1)break;x=0;va(1518,a|0);Ga=x;x=0;if(Ga&1)break;K2a(N);q2a(O,276890,39);x=0;va(1518,a|0);Ga=x;x=0;do if(!(Ga&1)){za=i[O>>0]|0;wa=(za&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(wa?O+1|0:k[O+8>>2]|0)|0,(wa?(za&255)>>>1:k[O+4>>2]|0)|0)|0;za=x;x=0;if(za&1)break;x=0;va(1518,a|0);za=x;x=0;if(za&1)break;K2a(O);Lna(a);za=(k[ia>>2]|0)+-4|0;k[za>>2]=(k[za>>2]|0)+1;q2a(P,276930,47);x=0;va(1518,a|0);za=x;x=0;do if(!(za&1)){wa=i[P>>0]|0;ya=(wa&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(ya?P+1|0:k[P+8>>2]|0)|0,(ya?(wa&255)>>>1:k[P+4>>2]|0)|0)|0;wa=x;x=0;if(wa&1)break;x=0;va(1518,a|0);wa=x;x=0;if(wa&1)break;K2a(P);q2a(Q,276978,15);x=0;va(1518,a|0);wa=x;x=0;do if(!(wa&1)){ya=i[Q>>0]|0;ua=(ya&1)==0;x=0;Fa(88,(k[ia>>2]|0)+-16|0,(ua?Q+1|0:k[Q+8>>2]|0)|0,(ua?(ya&255)>>>1:k[Q+4>>2]|0)|0)|0;ya=x;x=0;if(ya&1)break;x=0;va(1518,a|0);ya=x;x=0;if(ya&1)break;K2a(Q);ya=k[da>>2]|0;Pna(a,(Vf[k[(k[ya>>2]|0)+16>>2]&1023](ya)|0)+16|0);Lna(a);ya=(k[(k[ia>>2]|0)+-4>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,ya|0,d|0,131,275489,276430);ya=x;x=0;if(ya&1){ya=Hc()|0;K2a(d);Sc(ya|0)}K2a(d);ya=(k[ia>>2]|0)+-4|0;k[ya>>2]=(k[ya>>2]|0)+-1;ya=k[b+48>>2]|0;do if((ya|0)!=(k[b+52>>2]|0)){ua=k[ya>>2]|0;q2a(R,276994,26);x=0;fb(357,a|0,ua|0,R|0);ua=x;x=0;if(!(ua&1)){K2a(R);break}ua=Hc()|0;na=M;K2a(R);ga=ua;ha=na;Sc(ga|0)}while(0);kU(S,la);ya=k[S>>2]|0;na=S+4|0;ua=k[na>>2]|0;sa=(ya|0)==(ua|0);Ca=ya;if(ya){if(!sa)k[na>>2]=ua+(~((ua+-4-Ca|0)>>>2)<<2);OBa(ya)}e:do if(!sa){kU(T,la);ya=k[k[T>>2]>>2]|0;x=0;fb(140,U|0,277021,33);Ca=x;x=0;do if(Ca&1){ua=Hc()|0;ib=ua;jb=M}else{x=0;fb(357,a|0,ya|0,U|0);ua=x;x=0;if(ua&1){ua=Hc()|0;na=M;K2a(U);ib=ua;jb=na;break}K2a(U);na=k[T>>2]|0;if(!na)break e;ua=T+4|0;Da=k[ua>>2]|0;if((Da|0)!=(na|0))k[ua>>2]=Da+(~((Da+-4-na|0)>>>2)<<2);OBa(na);break e}while(0);ya=k[T>>2]|0;if(!ya){ga=ib;ha=jb;Sc(ga|0)}Ca=T+4|0;na=k[Ca>>2]|0;if((na|0)!=(ya|0))k[Ca>>2]=na+(~((na+-4-ya|0)>>>2)<<2);OBa(ya);ga=ib;ha=jb;Sc(ga|0)}while(0);Nba(V,la);sa=k[V>>2]|0;ya=V+4|0;na=k[ya>>2]|0;Ca=(sa|0)==(na|0);Da=sa;if(sa){if(!Ca)k[ya>>2]=na+(~((na+-4-Da|0)>>>2)<<2);OBa(sa)}f:do if(!Ca){Nba(W,la);sa=k[k[W>>2]>>2]|0;x=0;fb(140,X|0,277021,33);Da=x;x=0;do if(Da&1){na=Hc()|0;kb=na;lb=M}else{x=0;fb(357,a|0,sa|0,X|0);na=x;x=0;if(na&1){na=Hc()|0;ya=M;K2a(X);kb=na;lb=ya;break}K2a(X);ya=k[W>>2]|0;if(!ya)break f;na=W+4|0;ua=k[na>>2]|0;if((ua|0)!=(ya|0))k[na>>2]=ua+(~((ua+-4-ya|0)>>>2)<<2);OBa(ya);break f}while(0);sa=k[W>>2]|0;if(!sa){ga=kb;ha=lb;Sc(ga|0)}Da=W+4|0;ya=k[Da>>2]|0;if((ya|0)!=(sa|0))k[Da>>2]=ya+(~((ya+-4-sa|0)>>>2)<<2);OBa(sa);ga=kb;ha=lb;Sc(ga|0)}while(0);f5(Y,la);Ca=k[Y>>2]|0;sa=Y+4|0;ya=k[sa>>2]|0;Da=(Ca|0)==(ya|0);ua=Ca;if(Ca){if(!Da)k[sa>>2]=ya+(~((ya+-4-ua|0)>>>2)<<2);OBa(Ca)}g:do if(!Da){f5(Z,la);Ca=k[k[Z>>2]>>2]|0;x=0;fb(140,_|0,277055,21);ua=x;x=0;do if(ua&1){ya=Hc()|0;mb=ya;ob=M}else{x=0;fb(357,a|0,Ca|0,_|0);ya=x;x=0;if(ya&1){ya=Hc()|0;sa=M;K2a(_);mb=ya;ob=sa;break}K2a(_);sa=k[Z>>2]|0;if(!sa)break g;ya=Z+4|0;na=k[ya>>2]|0;if((na|0)!=(sa|0))k[ya>>2]=na+(~((na+-4-sa|0)>>>2)<<2);OBa(sa);break g}while(0);Ca=k[Z>>2]|0;if(!Ca){ga=mb;ha=ob;Sc(ga|0)}ua=Z+4|0;sa=k[ua>>2]|0;if((sa|0)!=(Ca|0))k[ua>>2]=sa+(~((sa+-4-Ca|0)>>>2)<<2);OBa(Ca);ga=mb;ha=ob;Sc(ga|0)}while(0);xU($,la);Da=k[$>>2]|0;Ca=$+4|0;sa=k[Ca>>2]|0;ua=(Da|0)==(sa|0);na=Da;if(Da){if(!ua)k[Ca>>2]=sa+(~((sa+-4-na|0)>>>2)<<2);OBa(Da)}h:do if(!ua){xU(aa,la);Da=k[k[aa>>2]>>2]|0;x=0;fb(140,ba|0,277077,24);na=x;x=0;do if(na&1){sa=Hc()|0;pb=sa;qb=M}else{x=0;fb(357,a|0,Da|0,ba|0);sa=x;x=0;if(sa&1){sa=Hc()|0;Ca=M;K2a(ba);pb=sa;qb=Ca;break}K2a(ba);Ca=k[aa>>2]|0;if(!Ca)break h;sa=aa+4|0;ya=k[sa>>2]|0;if((ya|0)!=(Ca|0))k[sa>>2]=ya+(~((ya+-4-Ca|0)>>>2)<<2);OBa(Ca);break h}while(0);Da=k[aa>>2]|0;if(!Da){ga=pb;ha=qb;Sc(ga|0)}na=aa+4|0;Ca=k[na>>2]|0;if((Ca|0)!=(Da|0))k[na>>2]=Ca+(~((Ca+-4-Da|0)>>>2)<<2);OBa(Da);ga=pb;ha=qb;Sc(ga|0)}while(0);Zg(ca,la);ua=k[ca>>2]|0;Da=ca+4|0;Ca=k[Da>>2]|0;do if((ua|0)==(Ca|0))rb=ua;else{na=ua;while(1){ya=k[na>>2]|0;x=0;xa(k[(k[ya>>2]|0)+12>>2]|0,ya|0,a|0);ya=x;x=0;if(ya&1)break;na=na+4|0;if((na|0)==(Ca|0)){Ka=246;break}}if((Ka|0)==246){rb=k[ca>>2]|0;break}na=Hc()|0;ya=M;sa=k[ca>>2]|0;if(!sa){ga=na;ha=ya;Sc(ga|0)}Aa=k[Da>>2]|0;if((Aa|0)!=(sa|0))k[Da>>2]=Aa+(~((Aa+-4-sa|0)>>>2)<<2);OBa(sa);ga=na;ha=ya;Sc(ga|0)}while(0);if(!rb){r=c;return 0}Ca=k[Da>>2]|0;if((Ca|0)!=(rb|0))k[Da>>2]=Ca+(~((Ca+-4-rb|0)>>>2)<<2);OBa(rb);r=c;return 0}while(0);wa=Hc()|0;La=M;K2a(Q);ga=wa;ha=La;Sc(ga|0)}while(0);za=Hc()|0;La=M;K2a(P);ga=za;ha=La;Sc(ga|0)}while(0);Ga=Hc()|0;Ha=M;K2a(O);ga=Ga;ha=Ha;Sc(ga|0)}while(0);ma=Hc()|0;Ha=M;K2a(N);ga=ma;ha=Ha;Sc(ga|0)}while(0);ra=Hc()|0;Ha=M;K2a(L);ga=ra;ha=Ha;Sc(ga|0)}while(0);oa=Hc()|0;Ha=M;K2a(K);ga=oa;ha=Ha;Sc(ga|0)}while(0);la=Hc()|0;qa=M;K2a(J);ga=la;ha=qa;Sc(ga|0)}while(0);ka=Hc()|0;qa=M;K2a(t);ga=ka;ha=qa;Sc(ga|0)}while(0);ea=Hc()|0;qa=M;K2a(s);ga=ea;ha=qa;Sc(ga|0)}while(0);fa=Hc()|0;qa=M;K2a(q);ga=fa;ha=qa;Sc(ga|0)}while(0);g=Hc()|0;qa=M;K2a(p);ga=g;ha=qa;Sc(ga|0)}while(0);f=Hc()|0;qa=M;K2a(o);ga=f;ha=qa;Sc(ga|0)}while(0);o=Hc()|0;p=M;K2a(n);ga=o;ha=p;Sc(ga|0)}p=Hc()|0;o=M;K2a(m);ga=p;ha=o;Sc(ga|0)}o=Hc()|0;p=M;K2a(l);ga=o;ha=p;Sc(ga|0)}p=Hc()|0;o=M;K2a(j);ga=p;ha=o;Sc(ga|0)}o=Hc()|0;p=M;K2a(h);ga=o;ha=p;Sc(ga|0);return 0}function Pna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+32|0;d=c+24|0;e=c+12|0;f=c;q2a(e,277102,4);soa(d,b+4|0,e);b=k[d>>2]|0;g=k[d+4>>2]|0;K2a(e);e=b;if((e|0)==(g|0)){r=c;return}d=a+44|0;h=f+8|0;j=f+1|0;l=f+4|0;m=e;e=b;while(1){noa(f,a,m+28|0);x=0;va(1518,a|0);b=x;x=0;if(b&1){n=11;break}b=i[f>>0]|0;o=(b&1)==0;x=0;Fa(88,(k[d>>2]|0)+-16|0,(o?j:k[h>>2]|0)|0,(o?(b&255)>>>1:k[l>>2]|0)|0)|0;b=x;x=0;if(b&1){n=11;break}x=0;va(1518,a|0);b=x;x=0;if(b&1){n=11;break}K2a(f);b=e;o=k[b+4>>2]|0;if(!o){p=b;while(1){b=k[p+8>>2]|0;if((k[b>>2]|0)==(p|0)){q=b;break}else p=b}}else{p=o;while(1){b=k[p>>2]|0;if(!b){q=p;break}else p=b}}if((q|0)==(g|0)){n=3;break}else{m=q;e=q}}if((n|0)==3){r=c;return}else if((n|0)==11){n=Hc()|0;K2a(f);Sc(n|0)}}function Qna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;b=r;r=r+32|0;c=b+12|0;d=b;k[a+8>>2]=0;e=k[a+12>>2]|0;f=a+16|0;g=k[f>>2]|0;if((g|0)!=(e|0))k[f>>2]=g+(~((g+-4-e|0)>>>2)<<2);Lna(a);e=a+44|0;g=(k[(k[e>>2]|0)+-4>>2]|0)!=0;q2a(c,329672,0);x=0;pa(57,g|0,c|0,131,275489,276430);g=x;x=0;if(g&1){g=Hc()|0;K2a(c);Sc(g|0)}K2a(c);c=(k[e>>2]|0)+-4|0;k[c>>2]=(k[c>>2]|0)+-1;q2a(d,277107,3);x=0;va(1518,a|0);c=x;x=0;if(c&1){h=Hc()|0;j=M;K2a(d);Sc(h|0)}c=i[d>>0]|0;g=(c&1)==0;x=0;Fa(88,(k[e>>2]|0)+-16|0,(g?d+1|0:k[d+8>>2]|0)|0,(g?(c&255)>>>1:k[d+4>>2]|0)|0)|0;c=x;x=0;if(c&1){h=Hc()|0;j=M;K2a(d);Sc(h|0)}x=0;va(1518,a|0);a=x;x=0;if(a&1){h=Hc()|0;j=M;K2a(d);Sc(h|0)}else{K2a(d);r=b;return}}function Rna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0;c=r;r=r+928|0;d=c+912|0;e=c+904|0;f=c+896|0;g=c+892|0;h=c+880|0;j=c+872|0;l=c+864|0;m=c+856|0;n=c+852|0;o=c+840|0;p=c+816|0;q=c+792|0;s=c+768|0;t=c+744|0;u=c+720|0;v=c+828|0;w=c+684|0;y=c+672|0;z=c+660|0;A=c+648|0;B=c+636|0;C=c+624|0;D=c+612|0;E=c+600|0;F=c+588|0;G=c+576|0;H=c+804|0;I=c+780|0;J=c+564|0;K=c+552|0;L=c+540|0;N=c+528|0;O=c+516|0;P=c+504|0;Q=c+492|0;R=c+480|0;S=c+468|0;T=c+456|0;U=c+444|0;V=c+432|0;W=c+420|0;X=c+408|0;Y=c+396|0;Z=c+384|0;_=c+372|0;$=c+756|0;aa=c+360|0;ba=c+348|0;ca=c+336|0;da=c+324|0;ea=c+312|0;fa=c+300|0;ga=c+288|0;ha=c+276|0;ia=c+264|0;ja=c+732|0;ka=c+252|0;la=c+240|0;ma=c+228|0;na=c+216|0;oa=c+204|0;qa=c+192|0;ra=c+180|0;sa=c+168|0;ta=c+156|0;ua=c+144|0;wa=c+132|0;ya=c+708|0;za=c+120|0;Aa=c+108|0;Ca=c+96|0;Da=c+696|0;Ea=c+84|0;Ga=c+72|0;Ha=c+60|0;Ia=c+48|0;Ja=c+36|0;Ka=c+24|0;La=c+12|0;Ma=c;if(!(i[b+76>>0]|0)){q2a(p,277111,38);x=0;fb(357,a|0,b|0,p|0);Na=x;x=0;if(Na&1){Na=Hc()|0;Oa=M;K2a(p);Pa=Na;Qa=Oa;Sc(Pa|0)}else{K2a(p);r=c;return 0}}p=b+24|0;Oa=k[p>>2]|0;Na=i[Oa>>0]|0;if(!(Na&1))Ra=(Na&255)>>>1;else Ra=k[Oa+4>>2]|0;if(!Ra){q2a(q,277150,33);x=0;fb(357,a|0,b|0,q|0);Ra=x;x=0;if(Ra&1){Ra=Hc()|0;Oa=M;K2a(q);Pa=Ra;Qa=Oa;Sc(Pa|0)}else{K2a(q);r=c;return 0}}if((k[b+80>>2]|0)!=(k[b+84>>2]|0)){q2a(s,277077,24);x=0;fb(357,a|0,b|0,s|0);q=x;x=0;if(q&1){q=Hc()|0;Oa=M;K2a(s);Pa=q;Qa=Oa;Sc(Pa|0)}else{K2a(s);r=c;return 0}}s=a+28|0;Oa=a+32|0;toa(s,k[Oa>>2]|0);k[a+36>>2]=0;k[s>>2]=Oa;k[Oa>>2]=0;Oa=b+52|0;q=k[Oa>>2]|0;Ra=k[q+24>>2]|0;Na=k[q+28>>2]|0;if((Ra|0)!=(Na|0)){q=Ra;do{Ra=k[q>>2]|0;Sa=uoa(s,k[Ra+24>>2]|0)|0;k[Sa>>2]=Ra;q=q+8|0}while((q|0)!=(Na|0))}Na=b+60|0;q=k[Na>>2]|0;Ra=k[q+24>>2]|0;Sa=k[q+28>>2]|0;if((Ra|0)!=(Sa|0)){q=Ra;do{Ra=k[q>>2]|0;Ua=uoa(s,k[Ra+24>>2]|0)|0;k[Ua>>2]=Ra;q=q+8|0}while((q|0)!=(Sa|0))}Sa=b+40|0;q=k[Sa>>2]|0;Ra=b+44|0;Ua=k[Ra>>2]|0;if((q|0)!=(Ua|0)){Va=q;do{q=k[Va>>2]|0;Wa=uoa(s,k[q+24>>2]|0)|0;k[Wa>>2]=q;Va=Va+4|0}while((Va|0)!=(Ua|0))}Ua=k[p>>2]|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;p=i[Ua>>0]|0;Va=(p&1)==0?(p&255)>>>1:k[Ua+4>>2]|0;x=0;nb(83,t|0,277184,9,Va+9|0);p=x;x=0;if(p&1){Xa=Hc()|0;Ya=M;K2a(t);Sc(Xa|0)}x=0;Fa(88,t|0,((i[Ua>>0]&1)==0?Ua+1|0:k[Ua+8>>2]|0)|0,Va|0)|0;Va=x;x=0;if(Va&1){Xa=Hc()|0;Ya=M;K2a(t);Sc(Xa|0)}Xa=a+44|0;Ya=i[t>>0]|0;Va=(Ya&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(Va?t+1|0:k[t+8>>2]|0)|0,(Va?(Ya&255)>>>1:k[t+4>>2]|0)|0)|0;Ya=x;x=0;if(Ya&1){Ya=Hc()|0;Va=M;K2a(t);Pa=Ya;Qa=Va;Sc(Pa|0)}K2a(t);q2a(u,277194,16);t=i[u>>0]|0;Va=(t&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(Va?u+1|0:k[u+8>>2]|0)|0,(Va?(t&255)>>>1:k[u+4>>2]|0)|0)|0;t=x;x=0;if(t&1){t=Hc()|0;Va=M;K2a(u);Pa=t;Qa=Va;Sc(Pa|0)}K2a(u);u=k[Oa>>2]|0;Va=k[u+24>>2]|0;t=k[u+28>>2]|0;a:do if((Va|0)!=(t|0)){u=v+1|0;Ya=v+8|0;Ua=v+4|0;p=C+8|0;s=C+1|0;q=C+4|0;Wa=A+4|0;Za=A+8|0;_a=A+1|0;$a=m+4|0;ab=Va;b:while(1){k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;bb=k[ab>>2]|0;x=0;cb=Ba(k[(k[bb>>2]|0)+16>>2]|0,bb|0)|0;bb=x;x=0;if(!(bb&1)?(x=0,fb(358,w|0,a|0,k[cb+4>>2]|0),cb=x,x=0,!(cb&1)):0){if(!(i[v>>0]&1)){i[u>>0]=0;i[v>>0]=0}else{i[k[Ya>>2]>>0]=0;k[Ua>>2]=0}x=0;xa(603,v|0,0);cb=x;x=0;if(cb&1){db=38;break};k[v>>2]=k[w>>2];k[v+4>>2]=k[w+4>>2];k[v+8>>2]=k[w+8>>2];k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;K2a(w)}else{cb=Hc(7384)|0;bb=M;if((bb|0)!=(hf(7384)|0)){eb=cb;gb=bb;break}bb=me(cb|0)|0;cb=bb+(k[(k[bb>>2]|0)+-28>>2]|0)|0;c:do if(!cb)db=53;else{bb=k[cb+4>>2]|0;do if(bb){ib=k[(k[bb>>2]|0)+4>>2]|0;k[n>>2]=7408;x=0;fb(ib|0,m|0,bb|0,n|0);ib=x;x=0;if(ib&1){db=66;break b}ib=k[m>>2]|0;jb=(ib|0)==0;kb=ib+4|0;ib=k[$a>>2]|0;do if(ib){lb=ib+4|0;mb=k[lb>>2]|0;k[lb>>2]=mb+-1;if((mb|0)!=1)break;x=0;va(k[(k[ib>>2]|0)+8>>2]|0,ib|0);mb=x;x=0;if(mb&1){db=49;break b}mb=ib+8|0;lb=k[mb>>2]|0;k[mb>>2]=lb+-1;if((lb|0)!=1)break;x=0;va(k[(k[ib>>2]|0)+12>>2]|0,ib|0);lb=x;x=0;if(lb&1){db=49;break b}}while(0);if(jb)break;ib=k[ab>>2]|0;x=0;xa(604,A|0,kb|0);lb=x;x=0;if(lb&1){db=66;break b}else{ob=ib;break c}}while(0);db=53}while(0);if((db|0)==53){db=0;cb=k[ab>>2]|0;x=0;fb(140,A|0,329672,0);bb=x;x=0;if(bb&1){db=66;break}else ob=cb};k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;cb=i[A>>0]|0;bb=(cb&1)==0?(cb&255)>>>1:k[Wa>>2]|0;x=0;nb(83,z|0,277211,16,bb+16|0);cb=x;x=0;if(cb&1){db=67;break}x=0;Fa(88,z|0,((i[A>>0]&1)==0?_a:k[Za>>2]|0)|0,bb|0)|0;bb=x;x=0;if(bb&1){db=67;break}x=0;bb=Ta(484,z|0,277228)|0;cb=x;x=0;if(cb&1){db=68;break};k[y>>2]=k[bb>>2];k[y+4>>2]=k[bb+4>>2];k[y+8>>2]=k[bb+8>>2];k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;x=0;fb(357,a|0,ob|0,y|0);bb=x;x=0;if(bb&1){db=69;break}K2a(y);K2a(z);K2a(A);x=0;hb(45);bb=x;x=0;if(bb&1){db=72;break}}bb=k[ab>>2]|0;cb=k[bb+24>>2]|0;ib=i[cb>>0]|0;if(!(ib&1))pb=(ib&255)>>>1;else pb=k[cb+4>>2]|0;if(!pb){x=0;fb(140,B|0,277245,44);lb=x;x=0;if(lb&1){db=72;break}x=0;fb(357,a|0,bb|0,B|0);bb=x;x=0;if(bb&1){db=75;break}K2a(B);bb=k[(k[ab>>2]|0)+24>>2]|0;qb=i[bb>>0]|0;rb=bb}else{qb=ib;rb=cb};k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;cb=(qb&1)==0?(qb&255)>>>1:k[rb+4>>2]|0;x=0;nb(83,F|0,277290,6,cb+6|0);ib=x;x=0;if(ib&1){db=78;break}x=0;Fa(88,F|0,((i[rb>>0]&1)==0?rb+1|0:k[rb+8>>2]|0)|0,cb|0)|0;cb=x;x=0;if(cb&1){db=78;break}x=0;cb=Ta(484,F|0,325552)|0;ib=x;x=0;if(ib&1){db=84;break};k[E>>2]=k[cb>>2];k[E+4>>2]=k[cb+4>>2];k[E+8>>2]=k[cb+8>>2];k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;cb=i[v>>0]|0;ib=(cb&1)==0;x=0;bb=Fa(88,E|0,(ib?u:k[Ya>>2]|0)|0,(ib?(cb&255)>>>1:k[Ua>>2]|0)|0)|0;cb=x;x=0;if(cb&1){db=85;break};k[D>>2]=k[bb>>2];k[D+4>>2]=k[bb+4>>2];k[D+8>>2]=k[bb+8>>2];k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;x=0;bb=Ta(484,D|0,300015)|0;cb=x;x=0;if(cb&1){db=86;break};k[C>>2]=k[bb>>2];k[C+4>>2]=k[bb+4>>2];k[C+8>>2]=k[bb+8>>2];k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;bb=i[C>>0]|0;cb=(bb&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(cb?s:k[p>>2]|0)|0,(cb?(bb&255)>>>1:k[q>>2]|0)|0)|0;bb=x;x=0;if(bb&1){db=87;break}K2a(C);K2a(D);K2a(E);K2a(F);K2a(v);ab=ab+8|0;if((ab|0)==(t|0))break a}switch(db|0){case 38:{Fg(Hc(0)|0);break}case 49:{Fg(Hc(0)|0);break}case 66:{sb=Hc()|0;tb=M;db=74;break}case 67:{ab=Hc()|0;q=M;K2a(z);ub=ab;vb=q;db=71;break}case 68:{wb=Hc()|0;xb=M;db=70;break}case 69:{q=Hc()|0;ab=M;K2a(y);wb=q;xb=ab;db=70;break}case 72:{ab=Hc()|0;yb=M;zb=ab;db=73;break}case 75:{ab=Hc()|0;q=M;K2a(B);eb=ab;gb=q;break}case 78:{q=Hc()|0;ab=M;K2a(F);yb=ab;zb=q;db=73;break}case 84:{Ab=Hc()|0;Bb=M;db=90;break}case 85:{Cb=Hc()|0;Db=M;db=89;break}case 86:{Eb=Hc()|0;Fb=M;db=88;break}case 87:{q=Hc()|0;ab=M;K2a(C);Eb=q;Fb=ab;db=88;break}}if((db|0)==70){K2a(z);ub=wb;vb=xb;db=71}else if((db|0)==73){eb=zb;gb=yb}else if((db|0)==88){K2a(D);Cb=Eb;Db=Fb;db=89}if((db|0)==71){K2a(A);sb=ub;tb=vb;db=74}else if((db|0)==89){K2a(E);Ab=Cb;Bb=Db;db=90}if((db|0)==74){x=0;hb(45);ab=x;x=0;if(ab&1){Gb=Hc(0)|0;Hb=M;Fg(Gb)}else{eb=sb;gb=tb}}else if((db|0)==90){K2a(F);eb=Ab;gb=Bb}K2a(v);Pa=eb;Qa=gb;Sc(Pa|0)}while(0);q2a(G,294915,1);gb=i[G>>0]|0;eb=(gb&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(eb?G+1|0:k[G+8>>2]|0)|0,(eb?(gb&255)>>>1:k[G+4>>2]|0)|0)|0;gb=x;x=0;if(gb&1){gb=Hc()|0;eb=M;K2a(G);Pa=gb;Qa=eb;Sc(Pa|0)}K2a(G);Lna(a);G=(k[Xa>>2]|0)+-4|0;k[G>>2]=(k[G>>2]|0)+1;Lna(a);G=(k[Xa>>2]|0)+-4|0;k[G>>2]=(k[G>>2]|0)+1;q2a(H,300108,1);G=k[Na>>2]|0;eb=k[G+24>>2]|0;gb=k[G+28>>2]|0;d:do if((eb|0)==(gb|0)){Ib=H+4|0;db=95}else{G=I+1|0;v=I+8|0;Bb=I+4|0;Ab=H+4|0;F=N+4|0;tb=N+8|0;sb=N+1|0;Db=j+4|0;Cb=eb;e:while(1){k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;E=k[Cb>>2]|0;x=0;vb=Ba(k[(k[E>>2]|0)+16>>2]|0,E|0)|0;E=x;x=0;if(!(E&1)?(x=0,fb(358,J|0,a|0,k[vb+4>>2]|0),vb=x,x=0,!(vb&1)):0){if(!(i[I>>0]&1)){i[G>>0]=0;i[I>>0]=0}else{i[k[v>>2]>>0]=0;k[Bb>>2]=0}x=0;xa(603,I|0,0);vb=x;x=0;if(vb&1){db=109;break};k[I>>2]=k[J>>2];k[I+4>>2]=k[J+4>>2];k[I+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;K2a(J)}else{vb=Hc(7384)|0;E=M;if((E|0)!=(hf(7384)|0)){Jb=vb;Kb=E;break}E=me(vb|0)|0;vb=E+(k[(k[E>>2]|0)+-28>>2]|0)|0;f:do if(!vb)db=124;else{E=k[vb+4>>2]|0;do if(E){ub=k[(k[E>>2]|0)+4>>2]|0;k[l>>2]=7408;x=0;fb(ub|0,j|0,E|0,l|0);ub=x;x=0;if(ub&1){db=132;break e}ub=k[j>>2]|0;A=(ub|0)==0;Fb=ub+4|0;ub=k[Db>>2]|0;do if(ub){Eb=ub+4|0;D=k[Eb>>2]|0;k[Eb>>2]=D+-1;if((D|0)!=1)break;x=0;va(k[(k[ub>>2]|0)+8>>2]|0,ub|0);D=x;x=0;if(D&1){db=120;break e}D=ub+8|0;Eb=k[D>>2]|0;k[D>>2]=Eb+-1;if((Eb|0)!=1)break;x=0;va(k[(k[ub>>2]|0)+12>>2]|0,ub|0);Eb=x;x=0;if(Eb&1){db=120;break e}}while(0);if(A)break;ub=k[Cb>>2]|0;x=0;xa(604,N|0,Fb|0);kb=x;x=0;if(kb&1){db=132;break e}else{Lb=ub;break f}}while(0);db=124}while(0);if((db|0)==124){db=0;vb=k[Cb>>2]|0;x=0;fb(140,N|0,329672,0);E=x;x=0;if(E&1){db=132;break}else Lb=vb};k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;vb=i[N>>0]|0;E=(vb&1)==0?(vb&255)>>>1:k[F>>2]|0;x=0;nb(83,L|0,277297,15,E+15|0);vb=x;x=0;if(vb&1){db=133;break}x=0;Fa(88,L|0,((i[N>>0]&1)==0?sb:k[tb>>2]|0)|0,E|0)|0;E=x;x=0;if(E&1){db=133;break}x=0;E=Ta(484,L|0,277313)|0;vb=x;x=0;if(vb&1){db=134;break};k[K>>2]=k[E>>2];k[K+4>>2]=k[E+4>>2];k[K+8>>2]=k[E+8>>2];k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;x=0;fb(357,a|0,Lb|0,K|0);E=x;x=0;if(E&1){db=135;break}K2a(K);K2a(L);K2a(N);x=0;hb(45);E=x;x=0;if(E&1){db=138;break}}E=i[H>>0]|0;if((((E&1)==0?(E&255)>>>1:k[Ab>>2]|0)|0)!=1?(x=0,Ta(484,H|0,300110)|0,E=x,x=0,E&1):0){db=138;break}E=i[I>>0]|0;vb=(E&1)==0;x=0;Fa(88,H|0,(vb?G:k[v>>2]|0)|0,(vb?(E&255)>>>1:k[Bb>>2]|0)|0)|0;E=x;x=0;if(E&1){db=138;break}K2a(I);Cb=Cb+8|0;if((Cb|0)==(gb|0)){Ib=Ab;db=95;break d}}if((db|0)==109){Ab=Hc(0)|0;Fg(Ab)}else if((db|0)==120){Ab=Hc(0)|0;Fg(Ab)}else if((db|0)==132){Ab=Hc()|0;Mb=Ab;Nb=M;db=139}else if((db|0)==133){Ab=Hc()|0;Cb=M;K2a(L);Ob=Ab;Pb=Cb;db=137}else if((db|0)==134){Cb=Hc()|0;Qb=Cb;Rb=M;db=136}else if((db|0)==135){Cb=Hc()|0;Ab=M;K2a(K);Qb=Cb;Rb=Ab;db=136}else if((db|0)==138){Ab=Hc()|0;Jb=Ab;Kb=M}if((db|0)==136){K2a(L);Ob=Qb;Pb=Rb;db=137}if((db|0)==137){K2a(N);Mb=Ob;Nb=Pb;db=139}if((db|0)==139){x=0;hb(45);Ab=x;x=0;if(Ab&1){Gb=Hc(0)|0;Hb=M;Fg(Gb)}else{Jb=Mb;Kb=Nb}}K2a(I);Sb=Jb;Tb=Kb}while(0);g:do if((db|0)==95){k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;Kb=i[H>>0]|0;Jb=(Kb&1)==0;I=Jb?(Kb&255)>>>1:k[Ib>>2]|0;x=0;nb(83,O|0,(Jb?H+1|0:k[H+8>>2]|0)|0,I|0,I+1|0);I=x;x=0;h:do if(!(I&1)?(x=0,Fa(88,O|0,300015,1)|0,Jb=x,x=0,!(Jb&1)):0){Jb=i[O>>0]|0;Kb=(Jb&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(Kb?O+1|0:k[O+8>>2]|0)|0,(Kb?(Jb&255)>>>1:k[O+4>>2]|0)|0)|0;Jb=x;x=0;if(Jb&1){Jb=Hc()|0;Kb=M;K2a(O);Sb=Jb;Tb=Kb;break g}K2a(O);x=0;va(1518,a|0);Kb=x;x=0;i:do if(!(Kb&1)){Jb=k[(k[Xa>>2]|0)+-4>>2]|0;x=0;fb(140,h|0,329672,0);Nb=x;x=0;if(Nb&1)break;x=0;pa(57,(Jb|0)!=0|0,h|0,131,275489,276430);Jb=x;x=0;if(Jb&1){Jb=Hc()|0;Nb=M;K2a(h);Ub=Nb;Vb=Jb;break h}K2a(h);Jb=(k[Xa>>2]|0)+-4|0;k[Jb>>2]=(k[Jb>>2]|0)+-1;x=0;Jb=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Nb=x;x=0;if(Nb&1)break;x=0;xa(862,a|0,Jb+4|0);Jb=x;x=0;if(Jb&1)break;Jb=a+8|0;Nb=k[Jb>>2]|0;do if(!Nb){x=0;fb(140,P|0,277329,40);Mb=x;x=0;if(Mb&1)break i;x=0;fb(357,a|0,b|0,P|0);Mb=x;x=0;if(Mb&1){Mb=Hc()|0;Pb=M;K2a(P);Sb=Mb;Tb=Pb;break g}else{K2a(P);Wb=k[Jb>>2]|0;break}}else Wb=Nb;while(0);x=0;Nb=Ba(k[(k[Wb>>2]|0)+16>>2]|0,Wb|0)|0;Jb=x;x=0;if(Jb&1)break;x=0;xa(862,a|0,Nb+16|0);Nb=x;x=0;if(Nb&1)break;x=0;j:do if(!(i[b+78>>0]|0)){q2a(R,276978,15);Nb=x;x=0;if(Nb&1)break i;x=0;va(1518,a|0);Nb=x;x=0;do if(!(Nb&1)){Jb=i[R>>0]|0;Pb=(Jb&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(Pb?R+1|0:k[R+8>>2]|0)|0,(Pb?(Jb&255)>>>1:k[R+4>>2]|0)|0)|0;Jb=x;x=0;if(Jb&1)break;x=0;va(1518,a|0);Jb=x;x=0;if(Jb&1)break;K2a(R);break j}while(0);Nb=Hc()|0;Fb=M;K2a(R);Sb=Nb;Tb=Fb;break g}else{q2a(Q,277370,29);Fb=x;x=0;if(Fb&1)break i;x=0;va(1518,a|0);Fb=x;x=0;do if(!(Fb&1)){Nb=i[Q>>0]|0;A=(Nb&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(A?Q+1|0:k[Q+8>>2]|0)|0,(A?(Nb&255)>>>1:k[Q+4>>2]|0)|0)|0;Nb=x;x=0;if(Nb&1)break;x=0;va(1518,a|0);Nb=x;x=0;if(Nb&1)break;K2a(Q);break j}while(0);Fb=Hc()|0;Nb=M;K2a(Q);Sb=Fb;Tb=Nb;break g}while(0);x=0;fb(140,S|0,301260,1);Nb=x;x=0;if(Nb&1)break;x=0;va(1518,a|0);Nb=x;x=0;do if(!(Nb&1)){Fb=i[S>>0]|0;A=(Fb&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(A?S+1|0:k[S+8>>2]|0)|0,(A?(Fb&255)>>>1:k[S+4>>2]|0)|0)|0;Fb=x;x=0;if(Fb&1)break;x=0;va(1518,a|0);Fb=x;x=0;if(Fb&1)break;K2a(S);x=0;xa(863,V|0,a|0);Fb=x;x=0;if(Fb&1)break i;x=0;Fb=Fa(86,V|0,0,277400)|0;A=x;x=0;if(A&1){A=Hc()|0;Xb=A;Yb=M}else{k[U>>2]=k[Fb>>2];k[U+4>>2]=k[Fb+4>>2];k[U+8>>2]=k[Fb+8>>2];k[Fb>>2]=0;k[Fb+4>>2]=0;k[Fb+8>>2]=0;x=0;Fb=Ta(484,U|0,277451)|0;A=x;x=0;if(A&1){A=Hc()|0;Zb=A;_b=M}else{k[T>>2]=k[Fb>>2];k[T+4>>2]=k[Fb+4>>2];k[T+8>>2]=k[Fb+8>>2];k[Fb>>2]=0;k[Fb+4>>2]=0;k[Fb+8>>2]=0;x=0;va(1518,a|0);Fb=x;x=0;do if(!(Fb&1)){A=i[T>>0]|0;Jb=(A&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(Jb?T+1|0:k[T+8>>2]|0)|0,(Jb?(A&255)>>>1:k[T+4>>2]|0)|0)|0;A=x;x=0;if(A&1)break;x=0;va(1518,a|0);A=x;x=0;if(A&1)break;K2a(T);K2a(U);K2a(V);A=k[Oa>>2]|0;Jb=k[A+24>>2]|0;Pb=k[A+28>>2]|0;k:do if((Jb|0)!=(Pb|0)){A=W+8|0;Mb=W+1|0;Ob=W+4|0;N=Jb;while(1){Rb=k[(k[N>>2]|0)+24>>2]|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;Qb=i[Rb>>0]|0;L=(Qb&1)==0?(Qb&255)>>>1:k[Rb+4>>2]|0;x=0;nb(83,Z|0,277457,5,L+5|0);Qb=x;x=0;if(Qb&1){db=191;break}x=0;Fa(88,Z|0,((i[Rb>>0]&1)==0?Rb+1|0:k[Rb+8>>2]|0)|0,L|0)|0;L=x;x=0;if(L&1){db=191;break}x=0;L=Ta(484,Z|0,277463)|0;Rb=x;x=0;if(Rb&1){db=199;break};k[Y>>2]=k[L>>2];k[Y+4>>2]=k[L+4>>2];k[Y+8>>2]=k[L+8>>2];k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;L=k[(k[N>>2]|0)+24>>2]|0;Rb=i[L>>0]|0;Qb=(Rb&1)==0;x=0;K=Fa(88,Y|0,(Qb?L+1|0:k[L+8>>2]|0)|0,(Qb?(Rb&255)>>>1:k[L+4>>2]|0)|0)|0;L=x;x=0;if(L&1){db=200;break};k[X>>2]=k[K>>2];k[X+4>>2]=k[K+4>>2];k[X+8>>2]=k[K+8>>2];k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;x=0;K=Ta(484,X|0,277475)|0;L=x;x=0;if(L&1){db=201;break};k[W>>2]=k[K>>2];k[W+4>>2]=k[K+4>>2];k[W+8>>2]=k[K+8>>2];k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;x=0;va(1518,a|0);K=x;x=0;if(K&1){db=202;break}K=i[W>>0]|0;L=(K&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(L?Mb:k[A>>2]|0)|0,(L?(K&255)>>>1:k[Ob>>2]|0)|0)|0;K=x;x=0;if(K&1){db=202;break}x=0;va(1518,a|0);K=x;x=0;if(K&1){db=202;break}K2a(W);K2a(X);K2a(Y);K2a(Z);N=N+8|0;if((N|0)==(Pb|0))break k}if((db|0)==191){N=Hc()|0;Ob=M;K2a(Z);Ub=Ob;Vb=N;break h}else if((db|0)==199){N=Hc()|0;$b=N;ac=M}else if((db|0)==200){N=Hc()|0;bc=N;cc=M;db=204}else if((db|0)==201){N=Hc()|0;dc=N;ec=M;db=203}else if((db|0)==202){N=Hc()|0;Ob=M;K2a(W);dc=N;ec=Ob;db=203}if((db|0)==203){K2a(X);bc=dc;cc=ec;db=204}if((db|0)==204){K2a(Y);$b=bc;ac=cc}K2a(Z);Sb=$b;Tb=ac;break g}while(0);Pb=k[Na>>2]|0;Jb=k[Pb+24>>2]|0;Ob=k[Pb+28>>2]|0;l:do if((Jb|0)!=(Ob|0)){Pb=$+1|0;N=$+8|0;A=$+4|0;Mb=ea+8|0;K=ea+1|0;L=ea+4|0;Rb=da+4|0;Qb=da+8|0;gb=da+1|0;Lb=f+4|0;j=Jb;m:while(1){l=k[j>>2]|0;J=k[l+24>>2]|0;eb=i[J>>0]|0;if(!(eb&1))fc=(eb&255)>>>1;else fc=k[J+4>>2]|0;if(!fc){x=0;fb(140,_|0,277479,43);J=x;x=0;if(J&1){db=100;break}x=0;fb(357,a|0,l|0,_|0);l=x;x=0;if(l&1){db=217;break}K2a(_)};k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;l=k[j>>2]|0;x=0;J=Ba(k[(k[l>>2]|0)+16>>2]|0,l|0)|0;l=x;x=0;do if(l&1)db=226;else{x=0;fb(358,aa|0,a|0,k[J+4>>2]|0);eb=x;x=0;if(eb&1){db=226;break}if(!(i[$>>0]&1)){i[Pb>>0]=0;i[$>>0]=0}else{i[k[N>>2]>>0]=0;k[A>>2]=0}x=0;xa(603,$|0,0);eb=x;x=0;if(eb&1){db=224;break m};k[$>>2]=k[aa>>2];k[$+4>>2]=k[aa+4>>2];k[$+8>>2]=k[aa+8>>2];k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;K2a(aa)}while(0);if((db|0)==226){db=0;J=Hc(7384)|0;l=M;if((l|0)!=(hf(7384)|0)){gc=J;hc=l;break}l=me(J|0)|0;J=l+(k[(k[l>>2]|0)+-28>>2]|0)|0;n:do if(!J)db=239;else{l=k[J+4>>2]|0;do if(l){eb=k[(k[l>>2]|0)+4>>2]|0;k[g>>2]=7408;x=0;fb(eb|0,f|0,l|0,g|0);eb=x;x=0;if(eb&1){db=255;break m}eb=k[f>>2]|0;Ab=(eb|0)==0;Cb=eb+4|0;eb=k[Lb>>2]|0;do if(eb){Bb=eb+4|0;v=k[Bb>>2]|0;k[Bb>>2]=v+-1;if((v|0)!=1)break;x=0;va(k[(k[eb>>2]|0)+8>>2]|0,eb|0);v=x;x=0;if(v&1){db=235;break m}v=eb+8|0;Bb=k[v>>2]|0;k[v>>2]=Bb+-1;if((Bb|0)!=1)break;x=0;va(k[(k[eb>>2]|0)+12>>2]|0,eb|0);Bb=x;x=0;if(Bb&1){db=235;break m}}while(0);if(Ab)break;eb=k[j>>2]|0;x=0;xa(604,da|0,Cb|0);Bb=x;x=0;if(Bb&1){db=255;break m}else{ic=eb;break n}}while(0);db=239}while(0);if((db|0)==239){db=0;J=k[j>>2]|0;x=0;fb(140,da|0,329672,0);l=x;x=0;if(l&1){db=255;break}else ic=J};k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;J=i[da>>0]|0;l=(J&1)==0?(J&255)>>>1:k[Rb>>2]|0;x=0;nb(83,ca|0,277523,5,l+5|0);J=x;x=0;if(J&1){db=256;break}x=0;Fa(88,ca|0,((i[da>>0]&1)==0?gb:k[Qb>>2]|0)|0,l|0)|0;l=x;x=0;if(l&1){db=256;break}x=0;l=Ta(484,ca|0,277529)|0;J=x;x=0;if(J&1){db=257;break};k[ba>>2]=k[l>>2];k[ba+4>>2]=k[l+4>>2];k[ba+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;fb(357,a|0,ic|0,ba|0);l=x;x=0;if(l&1){db=258;break}K2a(ba);K2a(ca);K2a(da);x=0;hb(45);l=x;x=0;if(l&1){db=261;break}}l=k[(k[j>>2]|0)+24>>2]|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;J=i[l>>0]|0;eb=(J&1)==0?(J&255)>>>1:k[l+4>>2]|0;x=0;nb(83,ha|0,277457,5,eb+5|0);J=x;x=0;if(J&1){db=247;break}x=0;Fa(88,ha|0,((i[l>>0]&1)==0?l+1|0:k[l+8>>2]|0)|0,eb|0)|0;eb=x;x=0;if(eb&1){db=247;break}x=0;eb=Ta(484,ha|0,277568)|0;l=x;x=0;if(l&1){db=264;break};k[ga>>2]=k[eb>>2];k[ga+4>>2]=k[eb+4>>2];k[ga+8>>2]=k[eb+8>>2];k[eb>>2]=0;k[eb+4>>2]=0;k[eb+8>>2]=0;eb=i[$>>0]|0;l=(eb&1)==0;x=0;J=Fa(88,ga|0,(l?Pb:k[N>>2]|0)|0,(l?(eb&255)>>>1:k[A>>2]|0)|0)|0;eb=x;x=0;if(eb&1){db=265;break};k[fa>>2]=k[J>>2];k[fa+4>>2]=k[J+4>>2];k[fa+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;x=0;J=Ta(484,fa|0,277575)|0;eb=x;x=0;if(eb&1){db=266;break};k[ea>>2]=k[J>>2];k[ea+4>>2]=k[J+4>>2];k[ea+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;x=0;va(1518,a|0);J=x;x=0;if(J&1){db=267;break}J=i[ea>>0]|0;eb=(J&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(eb?K:k[Mb>>2]|0)|0,(eb?(J&255)>>>1:k[L>>2]|0)|0)|0;J=x;x=0;if(J&1){db=267;break}x=0;va(1518,a|0);J=x;x=0;if(J&1){db=267;break}K2a(ea);K2a(fa);K2a(ga);K2a(ha);K2a($);j=j+8|0;if((j|0)==(Ob|0))break l}switch(db|0){case 100:{j=Hc()|0;Ub=M;Vb=j;break h;break}case 217:{j=Hc()|0;L=M;K2a(_);Sb=j;Tb=L;break g;break}case 224:{Fg(Hc(0)|0);break}case 235:{Fg(Hc(0)|0);break}case 247:{L=Hc()|0;j=M;K2a(ha);jc=j;kc=L;db=262;break}case 255:{lc=Hc()|0;mc=M;db=263;break}case 256:{L=Hc()|0;j=M;K2a(ca);nc=L;oc=j;db=260;break}case 257:{pc=Hc()|0;qc=M;db=259;break}case 258:{j=Hc()|0;L=M;K2a(ba);pc=j;qc=L;db=259;break}case 261:{L=Hc()|0;jc=M;kc=L;db=262;break}case 264:{rc=Hc()|0;sc=M;db=270;break}case 265:{tc=Hc()|0;uc=M;db=269;break}case 266:{vc=Hc()|0;wc=M;db=268;break}case 267:{L=Hc()|0;j=M;K2a(ea);vc=L;wc=j;db=268;break}}if((db|0)==259){K2a(ca);nc=pc;oc=qc;db=260}else if((db|0)==262){gc=kc;hc=jc}else if((db|0)==268){K2a(fa);tc=vc;uc=wc;db=269}if((db|0)==260){K2a(da);lc=nc;mc=oc;db=263}else if((db|0)==269){K2a(ga);rc=tc;sc=uc;db=270}do if((db|0)==263){x=0;hb(45);j=x;x=0;if(!(j&1)){gc=lc;hc=mc;break}Gb=Hc(0)|0;Hb=M;Fg(Gb)}else if((db|0)==270){K2a(ha);gc=rc;hc=sc}while(0);K2a($);Sb=gc;Tb=hc;break g}while(0);Ob=k[Sa>>2]|0;Jb=k[Ra>>2]|0;o:do if((Ob|0)!=(Jb|0)){j=ja+1|0;L=ja+8|0;Mb=ja+4|0;K=oa+8|0;A=oa+1|0;N=oa+4|0;Pb=na+4|0;Qb=na+8|0;gb=na+1|0;Rb=d+4|0;Lb=Ob;p:while(1){J=k[Lb>>2]|0;eb=J+24|0;l=k[eb>>2]|0;Bb=i[l>>0]|0;if(!(Bb&1))xc=(Bb&255)>>>1;else xc=k[l+4>>2]|0;if(!xc){x=0;fb(140,ia|0,277596,36);l=x;x=0;if(l&1){db=99;break}x=0;fb(357,a|0,J|0,ia|0);l=x;x=0;if(l&1){db=280;break}K2a(ia)};k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;x=0;l=Ba(k[(k[J>>2]|0)+16>>2]|0,J|0)|0;Bb=x;x=0;do if(Bb&1)db=289;else{x=0;fb(358,ka|0,a|0,k[l+4>>2]|0);v=x;x=0;if(v&1){db=289;break}if(!(i[ja>>0]&1)){i[j>>0]=0;i[ja>>0]=0}else{i[k[L>>2]>>0]=0;k[Mb>>2]=0}x=0;xa(603,ja|0,0);v=x;x=0;if(v&1){db=287;break p};k[ja>>2]=k[ka>>2];k[ja+4>>2]=k[ka+4>>2];k[ja+8>>2]=k[ka+8>>2];k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;K2a(ka)}while(0);if((db|0)==289){db=0;l=Hc(7384)|0;Bb=M;if((Bb|0)!=(hf(7384)|0)){yc=l;zc=Bb;break}Bb=me(l|0)|0;l=Bb+(k[(k[Bb>>2]|0)+-28>>2]|0)|0;q:do if(!l)db=302;else{Bb=k[l+4>>2]|0;do if(Bb){v=k[(k[Bb>>2]|0)+4>>2]|0;k[e>>2]=7408;x=0;fb(v|0,d|0,Bb|0,e|0);v=x;x=0;if(v&1){db=318;break p}v=k[d>>2]|0;G=(v|0)==0;tb=v+4|0;v=k[Rb>>2]|0;do if(v){sb=v+4|0;F=k[sb>>2]|0;k[sb>>2]=F+-1;if((F|0)!=1)break;x=0;va(k[(k[v>>2]|0)+8>>2]|0,v|0);F=x;x=0;if(F&1){db=298;break p}F=v+8|0;sb=k[F>>2]|0;k[F>>2]=sb+-1;if((sb|0)!=1)break;x=0;va(k[(k[v>>2]|0)+12>>2]|0,v|0);sb=x;x=0;if(sb&1){db=298;break p}}while(0);if(G)break;x=0;xa(604,na|0,tb|0);v=x;x=0;if(v&1){db=318;break p}else break q}while(0);db=302}while(0);if((db|0)==302?(db=0,x=0,fb(140,na|0,329672,0),l=x,x=0,l&1):0){db=318;break};k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;l=i[na>>0]|0;Bb=(l&1)==0?(l&255)>>>1:k[Pb>>2]|0;x=0;nb(83,ma|0,277523,5,Bb+5|0);l=x;x=0;if(l&1){db=319;break}x=0;Fa(88,ma|0,((i[na>>0]&1)==0?gb:k[Qb>>2]|0)|0,Bb|0)|0;Bb=x;x=0;if(Bb&1){db=319;break}x=0;Bb=Ta(484,ma|0,277633)|0;l=x;x=0;if(l&1){db=320;break};k[la>>2]=k[Bb>>2];k[la+4>>2]=k[Bb+4>>2];k[la+8>>2]=k[Bb+8>>2];k[Bb>>2]=0;k[Bb+4>>2]=0;k[Bb+8>>2]=0;x=0;fb(357,a|0,J|0,la|0);Bb=x;x=0;if(Bb&1){db=321;break}K2a(la);K2a(ma);K2a(na);x=0;hb(45);Bb=x;x=0;if(Bb&1){db=324;break}}Bb=k[eb>>2]|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;l=i[Bb>>0]|0;v=(l&1)==0?(l&255)>>>1:k[Bb+4>>2]|0;x=0;nb(83,sa|0,277457,5,v+5|0);l=x;x=0;if(l&1){db=310;break}x=0;Fa(88,sa|0,((i[Bb>>0]&1)==0?Bb+1|0:k[Bb+8>>2]|0)|0,v|0)|0;v=x;x=0;if(v&1){db=310;break}x=0;v=Ta(484,sa|0,277568)|0;Bb=x;x=0;if(Bb&1){db=327;break};k[ra>>2]=k[v>>2];k[ra+4>>2]=k[v+4>>2];k[ra+8>>2]=k[v+8>>2];k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;v=i[ja>>0]|0;Bb=(v&1)==0;x=0;l=Fa(88,ra|0,(Bb?j:k[L>>2]|0)|0,(Bb?(v&255)>>>1:k[Mb>>2]|0)|0)|0;v=x;x=0;if(v&1){db=328;break};k[qa>>2]=k[l>>2];k[qa+4>>2]=k[l+4>>2];k[qa+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;l=Ta(484,qa|0,277575)|0;v=x;x=0;if(v&1){db=329;break};k[oa>>2]=k[l>>2];k[oa+4>>2]=k[l+4>>2];k[oa+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;va(1518,a|0);l=x;x=0;if(l&1){db=330;break}l=i[oa>>0]|0;v=(l&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(v?A:k[K>>2]|0)|0,(v?(l&255)>>>1:k[N>>2]|0)|0)|0;l=x;x=0;if(l&1){db=330;break}x=0;va(1518,a|0);l=x;x=0;if(l&1){db=330;break}K2a(oa);K2a(qa);K2a(ra);K2a(sa);K2a(ja);Lb=Lb+4|0;if((Lb|0)==(Jb|0))break o}switch(db|0){case 99:{Lb=Hc()|0;Ub=M;Vb=Lb;break h;break}case 280:{Lb=Hc()|0;N=M;K2a(ia);Sb=Lb;Tb=N;break g;break}case 287:{Fg(Hc(0)|0);break}case 298:{Fg(Hc(0)|0);break}case 310:{N=Hc()|0;Lb=M;K2a(sa);Ac=Lb;Bc=N;db=325;break}case 318:{Cc=Hc()|0;Dc=M;db=326;break}case 319:{N=Hc()|0;Lb=M;K2a(ma);Ec=N;Fc=Lb;db=323;break}case 320:{Gc=Hc()|0;Ic=M;db=322;break}case 321:{Lb=Hc()|0;N=M;K2a(la);Gc=Lb;Ic=N;db=322;break}case 324:{N=Hc()|0;Ac=M;Bc=N;db=325;break}case 327:{Jc=Hc()|0;Kc=M;db=333;break}case 328:{Lc=Hc()|0;Mc=M;db=332;break}case 329:{Nc=Hc()|0;Oc=M;db=331;break}case 330:{N=Hc()|0;Lb=M;K2a(oa);Nc=N;Oc=Lb;db=331;break}}if((db|0)==322){K2a(ma);Ec=Gc;Fc=Ic;db=323}else if((db|0)==325){yc=Bc;zc=Ac}else if((db|0)==331){K2a(qa);Lc=Nc;Mc=Oc;db=332}if((db|0)==323){K2a(na);Cc=Ec;Dc=Fc;db=326}else if((db|0)==332){K2a(ra);Jc=Lc;Kc=Mc;db=333}do if((db|0)==326){x=0;hb(45);Lb=x;x=0;if(!(Lb&1)){yc=Cc;zc=Dc;break}Gb=Hc(0)|0;Hb=M;Fg(Gb)}else if((db|0)==333){K2a(sa);yc=Jc;zc=Kc}while(0);K2a(ja);Sb=yc;Tb=zc;break g}while(0);x=0;fb(140,ta|0,293858,3);Jb=x;x=0;if(Jb&1)break i;x=0;va(1518,a|0);Jb=x;x=0;do if(!(Jb&1)){Ob=i[ta>>0]|0;Lb=(Ob&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(Lb?ta+1|0:k[ta+8>>2]|0)|0,(Lb?(Ob&255)>>>1:k[ta+4>>2]|0)|0)|0;Ob=x;x=0;if(Ob&1)break;x=0;va(1518,a|0);Ob=x;x=0;if(Ob&1)break;K2a(ta);Ob=k[b+92>>2]|0;x=0;xa(k[(k[Ob>>2]|0)+12>>2]|0,Ob|0,a|0);Ob=x;x=0;if(Ob&1)break i;x=0;fb(140,ua|0,294917,1);Ob=x;x=0;if(Ob&1)break i;Ob=i[ua>>0]|0;Lb=(Ob&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(Lb?ua+1|0:k[ua+8>>2]|0)|0,(Lb?(Ob&255)>>>1:k[ua+4>>2]|0)|0)|0;Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Lb=M;K2a(ua);Sb=Ob;Tb=Lb;break g}K2a(ua);x=0;fb(140,wa|0,277676,12);Lb=x;x=0;if(Lb&1)break i;x=0;va(1518,a|0);Lb=x;x=0;do if(!(Lb&1)){Ob=i[wa>>0]|0;N=(Ob&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(N?wa+1|0:k[wa+8>>2]|0)|0,(N?(Ob&255)>>>1:k[wa+4>>2]|0)|0)|0;Ob=x;x=0;if(Ob&1)break;x=0;va(1518,a|0);Ob=x;x=0;if(Ob&1)break;K2a(wa);k[ya>>2]=0;k[ya+4>>2]=0;k[ya+8>>2]=0;Ob=k[Na>>2]|0;N=k[Ob+24>>2]|0;K=k[Ob+28>>2]|0;Ob=ya+4|0;r:do if((N|0)!=(K|0)){A=za+8|0;Mb=za+1|0;L=za+4|0;j=0;Qb=0;gb=N;while(1){if((((j&1)==0?(j&255)>>>1:Qb)|0)!=0?(x=0,Ta(484,ya|0,300110)|0,Pb=x,x=0,Pb&1):0){db=353;break}Pb=k[(k[gb>>2]|0)+24>>2]|0;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;Rb=i[Pb>>0]|0;l=(Rb&1)==0?(Rb&255)>>>1:k[Pb+4>>2]|0;x=0;nb(83,za|0,277706,2,l+2|0);Rb=x;x=0;if(Rb&1){db=360;break}x=0;Fa(88,za|0,((i[Pb>>0]&1)==0?Pb+1|0:k[Pb+8>>2]|0)|0,l|0)|0;l=x;x=0;if(l&1){db=360;break}l=i[za>>0]|0;Pb=(l&1)==0;x=0;Fa(88,ya|0,(Pb?Mb:k[A>>2]|0)|0,(Pb?(l&255)>>>1:k[L>>2]|0)|0)|0;l=x;x=0;if(l&1){db=363;break}K2a(za);gb=gb+8|0;l=i[ya>>0]|0;Pb=k[Ob>>2]|0;if((gb|0)==(K|0)){Pc=l;Qc=Pb;db=347;break r}else{j=l;Qb=Pb}}if((db|0)==353){Qb=Hc()|0;Rc=M;Tc=Qb;db=355;break}else if((db|0)==360){Qb=Hc()|0;j=M;K2a(za);Rc=j;Tc=Qb;db=355;break}else if((db|0)==363){Qb=Hc()|0;j=M;K2a(za);Uc=Qb;Vc=j;break}}else{Pc=0;Qc=0;db=347}while(0);s:do if((db|0)==347){k[Ca>>2]=0;k[Ca+4>>2]=0;k[Ca+8>>2]=0;K=(Pc&1)==0?(Pc&255)>>>1:Qc;x=0;nb(83,Ca|0,277689,16,K+16|0);N=x;x=0;do if(!(N&1)){eb=ya+8|0;J=ya+1|0;x=0;Fa(88,Ca|0,((i[ya>>0]&1)==0?J:k[eb>>2]|0)|0,K|0)|0;j=x;x=0;if(j&1)break;x=0;j=Ta(484,Ca|0,277709)|0;Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Wc=Qb;Xc=M}else{k[Aa>>2]=k[j>>2];k[Aa+4>>2]=k[j+4>>2];k[Aa+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;va(1518,a|0);j=x;x=0;do if(!(j&1)){Qb=i[Aa>>0]|0;gb=(Qb&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(gb?Aa+1|0:k[Aa+8>>2]|0)|0,(gb?(Qb&255)>>>1:k[Aa+4>>2]|0)|0)|0;Qb=x;x=0;if(Qb&1)break;x=0;va(1518,a|0);Qb=x;x=0;if(Qb&1)break;K2a(Aa);K2a(Ca);x=0;fb(140,Da|0,277713,49);Qb=x;x=0;if(Qb&1){Qb=Hc()|0;Rc=M;Tc=Qb;db=355;break s}Qb=k[a+12>>2]|0;gb=k[a+16>>2]|0;t:do if((Qb|0)==(gb|0))db=371;else{L=Ea+8|0;A=Ea+1|0;Mb=Ea+4|0;Pb=Qb;while(1){l=(k[Pb>>2]|0)+24|0;Rb=k[l>>2]|0;k[Ia>>2]=0;k[Ia+4>>2]=0;k[Ia+8>>2]=0;v=i[Rb>>0]|0;Bb=(v&1)==0?(v&255)>>>1:k[Rb+4>>2]|0;x=0;nb(83,Ia|0,277763,14,Bb+14|0);v=x;x=0;if(v&1){db=379;break}x=0;Fa(88,Ia|0,((i[Rb>>0]&1)==0?Rb+1|0:k[Rb+8>>2]|0)|0,Bb|0)|0;Bb=x;x=0;if(Bb&1){db=379;break}x=0;Bb=Ta(484,Ia|0,277778)|0;Rb=x;x=0;if(Rb&1){db=387;break};k[Ha>>2]=k[Bb>>2];k[Ha+4>>2]=k[Bb+4>>2];k[Ha+8>>2]=k[Bb+8>>2];k[Bb>>2]=0;k[Bb+4>>2]=0;k[Bb+8>>2]=0;Bb=k[l>>2]|0;l=i[Bb>>0]|0;Rb=(l&1)==0;x=0;v=Fa(88,Ha|0,(Rb?Bb+1|0:k[Bb+8>>2]|0)|0,(Rb?(l&255)>>>1:k[Bb+4>>2]|0)|0)|0;Bb=x;x=0;if(Bb&1){db=388;break};k[Ga>>2]=k[v>>2];k[Ga+4>>2]=k[v+4>>2];k[Ga+8>>2]=k[v+8>>2];k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;x=0;v=Ta(484,Ga|0,277801)|0;Bb=x;x=0;if(Bb&1){db=389;break};k[Ea>>2]=k[v>>2];k[Ea+4>>2]=k[v+4>>2];k[Ea+8>>2]=k[v+8>>2];k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;v=i[Ea>>0]|0;Bb=(v&1)==0;x=0;Fa(88,Da|0,(Bb?A:k[L>>2]|0)|0,(Bb?(v&255)>>>1:k[Mb>>2]|0)|0)|0;v=x;x=0;if(v&1){db=390;break}K2a(Ea);K2a(Ga);K2a(Ha);K2a(Ia);Pb=Pb+4|0;if((Pb|0)==(gb|0)){db=371;break t}}if((db|0)==379){Pb=Hc()|0;Mb=M;K2a(Ia);Yc=Mb;Zc=Pb;db=386;break}else if((db|0)==387){Pb=Hc()|0;_c=Pb;$c=M}else if((db|0)==388){Pb=Hc()|0;ad=Pb;bd=M;db=392}else if((db|0)==389){Pb=Hc()|0;cd=Pb;dd=M;db=391}else if((db|0)==390){Pb=Hc()|0;Mb=M;K2a(Ea);cd=Pb;dd=Mb;db=391}if((db|0)==391){K2a(Ga);ad=cd;bd=dd;db=392}if((db|0)==392){K2a(Ha);_c=ad;$c=bd}K2a(Ia);ed=_c;fd=$c}while(0);u:do if((db|0)==371){k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;gb=i[ya>>0]|0;Qb=(gb&1)==0?(gb&255)>>>1:k[Ob>>2]|0;x=0;nb(83,Ka|0,300108,1,Qb+1|0);gb=x;x=0;do if(!(gb&1)){x=0;Fa(88,Ka|0,((i[ya>>0]&1)==0?J:k[eb>>2]|0)|0,Qb|0)|0;Mb=x;x=0;if(Mb&1)break;x=0;Mb=Ta(484,Ka|0,300015)|0;Pb=x;x=0;do if(Pb&1){L=Hc()|0;gd=L;hd=M}else{k[Ja>>2]=k[Mb>>2];k[Ja+4>>2]=k[Mb+4>>2];k[Ja+8>>2]=k[Mb+8>>2];k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;L=i[Ja>>0]|0;A=(L&1)==0;x=0;Fa(88,Da|0,(A?Ja+1|0:k[Ja+8>>2]|0)|0,(A?(L&255)>>>1:k[Ja+4>>2]|0)|0)|0;L=x;x=0;if(L&1){L=Hc()|0;A=M;K2a(Ja);gd=L;hd=A;break}K2a(Ja);K2a(Ka);x=0;va(1518,a|0);A=x;x=0;v:do if(!(A&1)){L=i[Da>>0]|0;v=(L&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(v?Da+1|0:k[Da+8>>2]|0)|0,(v?(L&255)>>>1:k[Da+4>>2]|0)|0)|0;L=x;x=0;if(L&1)break;x=0;va(1518,a|0);L=x;x=0;if(L&1)break;x=0;va(1518,a|0);L=x;x=0;if(L&1)break;L=k[(k[Xa>>2]|0)+-4>>2]|0;x=0;fb(140,o|0,329672,0);v=x;x=0;if(v&1)break;x=0;pa(57,(L|0)!=0|0,o|0,131,275489,276430);L=x;x=0;if(L&1){L=Hc()|0;v=M;K2a(o);Yc=v;Zc=L;db=386;break u}K2a(o);L=(k[Xa>>2]|0)+-4|0;k[L>>2]=(k[L>>2]|0)+-1;x=0;fb(140,La|0,277107,3);L=x;x=0;if(L&1)break;x=0;va(1518,a|0);L=x;x=0;do if(!(L&1)){v=i[La>>0]|0;Bb=(v&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(Bb?La+1|0:k[La+8>>2]|0)|0,(Bb?(v&255)>>>1:k[La+4>>2]|0)|0)|0;v=x;x=0;if(v&1)break;x=0;va(1518,a|0);v=x;x=0;if(v&1)break;K2a(La);x=0;fb(140,Ma|0,329672,0);v=x;x=0;if(v&1)break v;x=0;va(1518,a|0);v=x;x=0;do if(!(v&1)){Bb=i[Ma>>0]|0;l=(Bb&1)==0;x=0;Fa(88,(k[Xa>>2]|0)+-16|0,(l?Ma+1|0:k[Ma+8>>2]|0)|0,(l?(Bb&255)>>>1:k[Ma+4>>2]|0)|0)|0;Bb=x;x=0;if(Bb&1)break;x=0;va(1518,a|0);Bb=x;x=0;if(Bb&1)break;K2a(Ma);K2a(Da);K2a(ya);K2a(H);r=c;return 0}while(0);v=Hc()|0;Bb=M;K2a(Ma);ed=v;fd=Bb;break u}while(0);L=Hc()|0;Bb=M;K2a(La);ed=L;fd=Bb;break u}while(0);A=Hc()|0;Yc=M;Zc=A;db=386;break u}while(0);K2a(Ka);ed=gd;fd=hd;break u}while(0);Qb=Hc()|0;gb=M;K2a(Ka);Yc=gb;Zc=Qb;db=386}while(0);if((db|0)==386){ed=Zc;fd=Yc}K2a(Da);Uc=ed;Vc=fd;break s}while(0);eb=Hc()|0;J=M;K2a(Aa);Wc=eb;Xc=J}K2a(Ca);Uc=Wc;Vc=Xc;break s}while(0);K=Hc()|0;N=M;K2a(Ca);Rc=N;Tc=K;db=355}while(0);if((db|0)==355){Uc=Tc;Vc=Rc}K2a(ya);Sb=Uc;Tb=Vc;break g}while(0);Lb=Hc()|0;Ob=M;K2a(wa);Sb=Lb;Tb=Ob;break g}while(0);Jb=Hc()|0;Ob=M;K2a(ta);Sb=Jb;Tb=Ob;break g}while(0);Fb=Hc()|0;Ob=M;K2a(T);Zb=Fb;_b=Ob}K2a(U);Xb=Zb;Yb=_b}K2a(V);Sb=Xb;Tb=Yb;break g}while(0);Nb=Hc()|0;Ob=M;K2a(S);Sb=Nb;Tb=Ob;break g}while(0);Kb=Hc()|0;Ub=M;Vb=Kb}else db=97;while(0);if((db|0)==97){I=Hc()|0;Kb=M;K2a(O);Ub=Kb;Vb=I}Sb=Vb;Tb=Ub}while(0);K2a(H);Pa=Sb;Qa=Tb;Sc(Pa|0);return 0}function Sna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+48|0;d=c+36|0;e=c+24|0;f=c+12|0;g=c;h=b+12|0;j=b+16|0;if((k[h>>2]|0)==(k[j>>2]|0)){q2a(a,329832,2);r=c;return}q2a(d,294911,1);b=k[h>>2]|0;h=k[j>>2]|0;a:do if((b|0)==(h|0))l=5;else{j=e+8|0;m=e+1|0;n=e+4|0;o=b;p=1;while(1){q=k[o>>2]|0;if(!p?(x=0,Ta(484,d|0,277801)|0,s=x,x=0,s&1):0){l=10;break}s=q+24|0;q=k[s>>2]|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;t=i[q>>0]|0;u=(t&1)==0?(t&255)>>>1:k[q+4>>2]|0;x=0;nb(83,g|0,287459,1,u+1|0);t=x;x=0;if(t&1){l=14;break}x=0;Fa(88,g|0,((i[q>>0]&1)==0?q+1|0:k[q+8>>2]|0)|0,u|0)|0;u=x;x=0;if(u&1){l=14;break}x=0;u=Ta(484,g|0,277804)|0;q=x;x=0;if(q&1){l=19;break};k[f>>2]=k[u>>2];k[f+4>>2]=k[u+4>>2];k[f+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;u=k[s>>2]|0;s=i[u>>0]|0;q=(s&1)==0;x=0;t=Fa(88,f|0,(q?u+1|0:k[u+8>>2]|0)|0,(q?(s&255)>>>1:k[u+4>>2]|0)|0)|0;u=x;x=0;if(u&1){l=20;break};k[e>>2]=k[t>>2];k[e+4>>2]=k[t+4>>2];k[e+8>>2]=k[t+8>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;t=i[e>>0]|0;u=(t&1)==0;x=0;Fa(88,d|0,(u?m:k[j>>2]|0)|0,(u?(t&255)>>>1:k[n>>2]|0)|0)|0;t=x;x=0;if(t&1){l=21;break}K2a(e);K2a(f);K2a(g);o=o+4|0;if((o|0)==(h|0)){l=5;break a}else p=0}if((l|0)==10){p=Hc()|0;v=M;w=p;break}else if((l|0)==14){p=Hc()|0;o=M;K2a(g);v=o;w=p;break}else if((l|0)==19){p=Hc()|0;y=M;z=p}else if((l|0)==20){p=Hc()|0;A=M;B=p;l=22}else if((l|0)==21){p=Hc()|0;o=M;K2a(e);A=o;B=p;l=22}if((l|0)==22){K2a(f);y=A;z=B}K2a(g);C=y;D=z;K2a(d);Sc(D|0)}while(0);if((l|0)==5){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;l=i[d>>0]|0;z=(l&1)==0;y=z?(l&255)>>>1:k[d+4>>2]|0;x=0;nb(83,a|0,(z?d+1|0:k[d+8>>2]|0)|0,y|0,y+1|0);y=x;x=0;if(!(y&1)?(x=0,Fa(88,a|0,294913,1)|0,y=x,x=0,!(y&1)):0){K2a(d);r=c;return}c=Hc()|0;y=M;K2a(a);v=y;w=c}C=v;D=w;K2a(d);Sc(D|0)}function Tna(a,b){a=a|0;b=b|0;var c=0;b=a+28|0;c=a+32|0;toa(b,k[c>>2]|0);k[a+36>>2]=0;k[b>>2]=c;k[c>>2]=0;return}function Una(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;Pna(a,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);q2a(e,277822,5);g=a+44|0;h=i[e>>0]|0;j=(h&1)==0;x=0;Fa(88,(k[g>>2]|0)+-16|0,(j?e+1|0:k[e+8>>2]|0)|0,(j?(h&255)>>>1:k[e+4>>2]|0)|0)|0;h=x;x=0;if(h&1){h=Hc()|0;j=M;K2a(e);l=j;m=h;Sc(m|0)}K2a(e);Lna(a);e=(k[g>>2]|0)+-4|0;k[e>>2]=(k[e>>2]|0)+1;e=b+32|0;h=b+36|0;b=k[e>>2]|0;if((k[h>>2]|0)!=(b|0)){j=a+40|0;n=b;b=0;do{o=k[n+(b<<3)>>2]|0;Tf[k[(k[o>>2]|0)+12>>2]&2047](o,a);do if((b|0)!=(((k[h>>2]|0)-(k[e>>2]|0)>>3)+-1|0)){o=k[j>>2]|0;p=k[g>>2]|0;while(1){q=p+-16|0;if((q|0)==(o|0)){s=p;t=11;break}u=i[q>>0]|0;if(!(u&1))v=(u&255)>>>1;else v=k[p+-12>>2]|0;if(!v)p=q;else{w=q;y=p;z=u;break}}if((t|0)==11){t=0;w=o;y=s;z=i[o>>0]|0}p=(z&1)==0;u=p?w+1|0:k[y+-8>>2]|0;q=u+(p?(z&255)>>>1:k[y+-12>>2]|0)|0;p=277827;do{A=(p|0)==277822;if((q|0)==(u|0)|A){t=19;break}q=q+-1|0;p=p+-1|0}while((i[q>>0]|0)==(i[p>>0]|0));if((t|0)==19?(t=0,A):0)break;J3a(w,294917)|0}while(0);Lna(a);b=b+1|0;n=k[e>>2]|0}while(b>>>0<(k[h>>2]|0)-n>>3>>>0)}Lna(a);a=(k[(k[g>>2]|0)+-4>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,a|0,d|0,131,275489,276430);a=x;x=0;if(a&1){a=Hc()|0;K2a(d);Sc(a|0)}K2a(d);d=(k[g>>2]|0)+-4|0;k[d>>2]=(k[d>>2]|0)+-1;q2a(f,277107,3);d=i[f>>0]|0;a=(d&1)==0;x=0;Fa(88,(k[g>>2]|0)+-16|0,(a?f+1|0:k[f+8>>2]|0)|0,(a?(d&255)>>>1:k[f+4>>2]|0)|0)|0;d=x;x=0;if(!(d&1)){K2a(f);r=c;return 0}c=Hc()|0;d=M;K2a(f);l=d;m=c;Sc(m|0);return 0}function Vna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;Pna(a,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);q2a(d,277828,3);g=a+44|0;h=i[d>>0]|0;j=(h&1)==0;x=0;Fa(88,(k[g>>2]|0)+-16|0,(j?d+1|0:k[d+8>>2]|0)|0,(j?(h&255)>>>1:k[d+4>>2]|0)|0)|0;h=x;x=0;if(h&1){h=Hc()|0;j=M;K2a(d);l=j;m=h;Sc(m|0)}K2a(d);d=k[b+32>>2]|0;Tf[k[(k[d>>2]|0)+12>>2]&2047](d,a);q2a(e,277832,5);d=i[e>>0]|0;h=(d&1)==0;x=0;Fa(88,(k[g>>2]|0)+-16|0,(h?e+1|0:k[e+8>>2]|0)|0,(h?(d&255)>>>1:k[e+4>>2]|0)|0)|0;d=x;x=0;if(d&1){d=Hc()|0;h=M;K2a(e);l=h;m=d;Sc(m|0)}K2a(e);Wna(a,k[b+40>>2]|0);e=b+48|0;if(!(k[e>>2]|0)){r=c;return 0}Lna(a);q2a(f,293479,4);b=i[f>>0]|0;d=(b&1)==0;x=0;Fa(88,(k[g>>2]|0)+-16|0,(d?f+1|0:k[f+8>>2]|0)|0,(d?(b&255)>>>1:k[f+4>>2]|0)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;d=M;K2a(f);l=d;m=b;Sc(m|0)}else{K2a(f);Wna(a,k[e>>2]|0);r=c;return 0}return 0}function Wna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=(iDa(b,5640,5688,0)|0)==0;Lna(a);if(!e){Tf[k[(k[b>>2]|0)+12>>2]&2047](b,a);Lna(a);r=c;return}e=a+44|0;f=(k[e>>2]|0)+-4|0;k[f>>2]=(k[f>>2]|0)+1;Tf[k[(k[b>>2]|0)+12>>2]&2047](b,a);Lna(a);a=(k[(k[e>>2]|0)+-4>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,a|0,d|0,131,275489,276430);a=x;x=0;if(a&1){a=Hc()|0;K2a(d);Sc(a|0)}K2a(d);d=(k[e>>2]|0)+-4|0;k[d>>2]=(k[d>>2]|0)+-1;r=c;return}function Xna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;Pna(a,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);q2a(d,277838,6);g=a+44|0;h=i[d>>0]|0;j=(h&1)==0;x=0;Fa(88,(k[g>>2]|0)+-16|0,(j?d+1|0:k[d+8>>2]|0)|0,(j?(h&255)>>>1:k[d+4>>2]|0)|0)|0;h=x;x=0;if(h&1){h=Hc()|0;j=M;K2a(d);l=j;m=h;Sc(m|0)}K2a(d);d=k[b+32>>2]|0;Tf[k[(k[d>>2]|0)+12>>2]&2047](d,a);Lna(a);q2a(e,293476,2);d=i[e>>0]|0;h=(d&1)==0;x=0;Fa(88,(k[g>>2]|0)+-16|0,(h?e+1|0:k[e+8>>2]|0)|0,(h?(d&255)>>>1:k[e+4>>2]|0)|0)|0;d=x;x=0;if(d&1){d=Hc()|0;h=M;K2a(e);l=h;m=d;Sc(m|0)}K2a(e);Wna(a,k[b+40>>2]|0);q2a(f,277845,4);b=i[f>>0]|0;a=(b&1)==0;x=0;Fa(88,(k[g>>2]|0)+-16|0,(a?f+1|0:k[f+8>>2]|0)|0,(a?(b&255)>>>1:k[f+4>>2]|0)|0)|0;b=x;x=0;if(!(b&1)){K2a(f);r=c;return 0}c=Hc()|0;b=M;K2a(f);l=b;m=c;Sc(m|0);return 0}function Yna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+80|0;d=c+60|0;e=c+48|0;f=c+36|0;g=c+24|0;h=c+12|0;j=c;Pna(a,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);l=b+32|0;if(!(k[l>>2]|0)){q2a(j,277676,12);m=i[j>>0]|0;n=(m&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(n?j+1|0:k[j+8>>2]|0)|0,(n?(m&255)>>>1:k[j+4>>2]|0)|0)|0;m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(j);o=n;p=m;Sc(p|0)}else{K2a(j);r=c;return 0}}j=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+20|0;m=(k[j>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,m|0,d|0,428,275489,277850);m=x;x=0;if(m&1){m=Hc()|0;j=M;K2a(d);o=j;p=m;Sc(p|0)}K2a(d);d=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+20|0;m=k[d>>2]|0;d=k[m+24>>2]|0;if(((k[m+28>>2]|0)-d|0)!=8){q2a(e,277931,74);x=0;fb(357,a|0,b|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;m=M;K2a(e);o=m;p=b;Sc(p|0)}else{K2a(e);r=c;return 0}}e=k[(k[d>>2]|0)+24>>2]|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;d=i[e>>0]|0;b=(d&1)==0?(d&255)>>>1:k[e+4>>2]|0;x=0;nb(83,g|0,278006,7,b+7|0);d=x;x=0;if(d&1){q=Hc()|0;s=M;K2a(g);Sc(q|0)}x=0;Fa(88,g|0,((i[e>>0]&1)==0?e+1|0:k[e+8>>2]|0)|0,b|0)|0;b=x;x=0;if(b&1){q=Hc()|0;s=M;K2a(g);Sc(q|0)}x=0;q=Ta(484,g|0,278014)|0;s=x;x=0;do if(!(s&1)){k[f>>2]=k[q>>2];k[f+4>>2]=k[q+4>>2];k[f+8>>2]=k[q+8>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;b=a+44|0;e=i[f>>0]|0;d=(e&1)==0;x=0;Fa(88,(k[b>>2]|0)+-16|0,(d?f+1|0:k[f+8>>2]|0)|0,(d?(e&255)>>>1:k[f+4>>2]|0)|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=M;K2a(f);t=d;u=e;break}K2a(f);K2a(g);e=k[l>>2]|0;Tf[k[(k[e>>2]|0)+12>>2]&2047](e,a);q2a(h,278019,18);e=i[h>>0]|0;d=(e&1)==0;x=0;Fa(88,(k[b>>2]|0)+-16|0,(d?h+1|0:k[h+8>>2]|0)|0,(d?(e&255)>>>1:k[h+4>>2]|0)|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=M;K2a(h);o=d;p=e;Sc(p|0)}else{K2a(h);r=c;return 0}}else{e=Hc()|0;t=M;u=e}while(0);K2a(g);o=t;p=u;Sc(p|0);return 0}function Zna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;Pna(a,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);q2a(d,278038,12);b=i[d>>0]|0;e=(b&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(e?d+1|0:k[d+8>>2]|0)|0,(e?(b&255)>>>1:k[d+4>>2]|0)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}else{K2a(d);r=c;return 0}return 0}function _na(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;Pna(a,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);g=k[b+32>>2]|0;h=g;if(((k[b+36>>2]|0)-g|0)!=8){q2a(d,278051,33);x=0;fb(357,a|0,b|0,d|0);g=x;x=0;if(g&1){g=Hc()|0;j=M;K2a(d);l=j;m=g;Sc(m|0)}else{K2a(d);r=c;return 0}}d=b+44|0;if(!(k[d>>2]|0)){r=c;return 0}b=k[(k[h>>2]|0)+24>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;h=i[b>>0]|0;g=(h&1)==0?(h&255)>>>1:k[b+4>>2]|0;x=0;nb(83,f|0,287459,1,g+1|0);h=x;x=0;if(h&1){n=Hc()|0;o=M;K2a(f);Sc(n|0)}x=0;Fa(88,f|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,g|0)|0;g=x;x=0;if(g&1){n=Hc()|0;o=M;K2a(f);Sc(n|0)}x=0;n=Ta(484,f|0,278014)|0;o=x;x=0;do if(o&1){g=Hc()|0;p=M;q=g}else{k[e>>2]=k[n>>2];k[e+4>>2]=k[n+4>>2];k[e+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;g=i[e>>0]|0;b=(g&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(b?e+1|0:k[e+8>>2]|0)|0,(b?(g&255)>>>1:k[e+4>>2]|0)|0)|0;g=x;x=0;if(g&1){g=Hc()|0;b=M;K2a(e);p=b;q=g;break}K2a(e);K2a(f);g=k[d>>2]|0;Tf[k[(k[g>>2]|0)+12>>2]&2047](g,a);r=c;return 0}while(0);K2a(f);l=p;m=q;Sc(m|0);return 0}function $na(a,b){a=a|0;b=b|0;Pna(a,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);return 1}function aoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+32|0;d=c+12|0;e=c;do if((k[b+32>>2]|0)!=12){q2a(d,278085,34);x=0;fb(357,a|0,b|0,d|0);f=x;x=0;if(!(f&1)){K2a(d);break}f=Hc()|0;g=M;K2a(d);h=g;j=f;Sc(j|0)}while(0);d=k[b+24>>2]|0;Tf[k[(k[d>>2]|0)+12>>2]&2047](d,a);q2a(e,(i[a+24>>0]|0)!=0?278014:278120,4);d=i[e>>0]|0;f=(d&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(f?e+1|0:k[e+8>>2]|0)|0,(f?(d&255)>>>1:k[e+4>>2]|0)|0)|0;d=x;x=0;if(!(d&1)){K2a(e);d=k[b+36>>2]|0;Tf[k[(k[d>>2]|0)+12>>2]&2047](d,a);r=c;return 0}c=Hc()|0;a=M;K2a(e);h=a;j=c;Sc(j|0);return 0}function boa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+32|0;d=c+12|0;e=c;do if(((k[b+28>>2]|0)-(k[b+24>>2]|0)|0)!=8){q2a(d,278125,49);x=0;fb(357,a|0,b|0,d|0);f=x;x=0;if(!(f&1)){K2a(d);break}f=Hc()|0;g=M;K2a(d);h=g;j=f;Sc(j|0)}while(0);q2a(e,300108,1);d=i[e>>0]|0;b=(d&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(b?e+1|0:k[e+8>>2]|0)|0,(b?(d&255)>>>1:k[e+4>>2]|0)|0)|0;d=x;x=0;if(!(d&1)){K2a(e);r=c;return 1}c=Hc()|0;d=M;K2a(e);h=d;j=c;Sc(j|0);return 0}function coa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+96|0;d=c+88|0;e=c+84|0;f=c+72|0;g=c+60|0;h=c+48|0;j=c+36|0;l=c+24|0;m=c+12|0;n=c;x=0;o=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;p=x;x=0;if(!(p&1)?(x=0,fb(358,f|0,a|0,k[o+4>>2]|0),o=x,x=0,!(o&1)):0)K2a(f);else q=4;a:do if((q|0)==4){f=Hc(7384)|0;o=M;if((o|0)!=(hf(7384)|0)){s=f;t=o;Sc(s|0)}o=me(f|0)|0;f=o+(k[(k[o>>2]|0)+-28>>2]|0)|0;do if(!f)q=17;else{o=k[f+4>>2]|0;if(o){p=k[(k[o>>2]|0)+4>>2]|0;k[e>>2]=7408;x=0;fb(p|0,d|0,o|0,e|0);o=x;x=0;if(o&1){q=24;break}o=k[d>>2]|0;p=(o|0)==0;u=o+4|0;o=k[d+4>>2]|0;if((o|0)!=0?(v=o+4|0,w=k[v>>2]|0,k[v>>2]=w+-1,(w|0)==1):0){x=0;va(k[(k[o>>2]|0)+8>>2]|0,o|0);w=x;x=0;if(w&1){y=Hc(0)|0;z=M;Fg(y)}w=o+8|0;v=k[w>>2]|0;k[w>>2]=v+-1;if((v|0)==1?(x=0,va(k[(k[o>>2]|0)+12>>2]|0,o|0),o=x,x=0,o&1):0){y=Hc(0)|0;z=M;Fg(y)}}if(!p){x=0;xa(604,j|0,u|0);u=x;x=0;if(u&1){q=24;break}else{q=18;break}}}q=17}while(0);if((q|0)==17){x=0;fb(140,j|0,329672,0);f=x;x=0;if(f&1)q=24;else q=18}if((q|0)==18){k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;f=i[j>>0]|0;u=(f&1)==0?(f&255)>>>1:k[j+4>>2]|0;x=0;nb(83,h|0,278175,6,u+6|0);f=x;x=0;if(!(f&1)?(x=0,Fa(88,h|0,((i[j>>0]&1)==0?j+1|0:k[j+8>>2]|0)|0,u|0)|0,u=x,x=0,!(u&1)):0){x=0;u=Ta(484,h|0,278182)|0;f=x;x=0;do if(!(f&1)){k[g>>2]=k[u>>2];k[g+4>>2]=k[u+4>>2];k[g+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;x=0;fb(357,a|0,b|0,g|0);p=x;x=0;if(p&1){p=Hc()|0;o=M;K2a(g);A=p;B=o;break}else{K2a(g);K2a(h);K2a(j);ge();break a}}else{o=Hc()|0;A=o;B=M}while(0);K2a(h);C=A;D=B}else{u=Hc()|0;f=M;K2a(h);C=u;D=f}K2a(j);E=C;F=D}else if((q|0)==24){f=Hc()|0;E=f;F=M}x=0;hb(45);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else{s=E;t=F;Sc(s|0)}}while(0);do if((k[b+24>>2]|0)==45){q2a(l,278214,5);F=a+44|0;E=i[l>>0]|0;q=(E&1)==0;x=0;Fa(88,(k[F>>2]|0)+-16|0,(q?l+1|0:k[l+8>>2]|0)|0,(q?(E&255)>>>1:k[l+4>>2]|0)|0)|0;E=x;x=0;if(!(E&1)){K2a(l);G=F;break}F=Hc()|0;E=M;K2a(l);s=F;t=E;Sc(s|0)}else{q2a(m,278220,23);x=0;fb(357,a|0,b|0,m|0);E=x;x=0;if(!(E&1)){K2a(m);G=a+44|0;break}E=Hc()|0;F=M;K2a(m);s=E;t=F;Sc(s|0)}while(0);m=k[b+28>>2]|0;Tf[k[(k[m>>2]|0)+12>>2]&2047](m,a);q2a(n,300015,1);a=i[n>>0]|0;m=(a&1)==0;x=0;Fa(88,(k[G>>2]|0)+-16|0,(m?n+1|0:k[n+8>>2]|0)|0,(m?(a&255)>>>1:k[n+4>>2]|0)|0)|0;a=x;x=0;if(!(a&1)){K2a(n);r=c;return 0}c=Hc()|0;a=M;K2a(n);s=c;t=a;Sc(s|0);return 0}function doa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+304|0;d=c+40|0;e=c+296|0;f=c+292|0;g=c+280|0;h=c+268|0;j=c+256|0;l=c+244|0;m=c+232|0;n=c;o=c+104|0;p=c+92|0;q=c+80|0;s=c+68|0;t=c+56|0;u=k[b+24>>2]|0;v=k[b+36>>2]|0;w=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+24|0;y=(k[w>>2]|0)!=0;q2a(g,329672,0);x=0;pa(57,y|0,g|0,527,275489,278244);y=x;x=0;if(y&1){y=Hc()|0;w=M;K2a(g);z=y;A=w;Sc(z|0)}K2a(g);g=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+24|0;w=k[g>>2]|0;g=k[b+32>>2]|0;if((Vf[k[k[w>>2]>>2]&1023](w)|0)==1){y=iDa(w,168,6624,0)|0;if(!y)BBa();k[d>>2]=0;B=d+8|0;k[B>>2]=0;C=d+13|0;i[C>>0]=1;D=k[y+48>>2]|0;E=D>>>0>134217728?134217728:D;if(E>>>0>2){F=E>>>0>8?E:8;G=KBa(F<<2)|0;i[C>>0]=0;k[B>>2]=E;k[d>>2]=F;k[d+4>>2]=G;H=G}else{k[B>>2]=E;H=d}Dyb(H|0,((i[y+53>>0]|0)==0?k[y+44>>2]|0:y+40|0)|0,D<<2|0)|0;D=i[y+52>>0]|0;i[d+12>>0]=D;y=i[C>>0]|0;if(D<<24>>24==0&(k[B>>2]|0)==1)I=(k[(y<<24>>24==0?k[d+4>>2]|0:d)>>2]|0)!=1;else I=1;if(!(y<<24>>24))OBa(k[d+4>>2]|0);if(I){q2a(h,278334,33);x=0;fb(357,a|0,b|0,h|0);I=x;x=0;if(I&1){I=Hc()|0;y=M;K2a(h);z=I;A=y;Sc(z|0)}else{K2a(h);J=0;r=c;return J|0}}jg[k[(k[w>>2]|0)+84>>2]&511](n,w,0);voa(m,n);x=0;n=Fa(86,m|0,0,278368)|0;w=x;x=0;if(w&1){w=Hc()|0;K=w;L=M}else{k[l>>2]=k[n>>2];k[l+4>>2]=k[n+4>>2];k[l+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;n=Ta(484,l|0,300015)|0;w=x;x=0;do if(w&1){h=Hc()|0;N=h;O=M}else{k[j>>2]=k[n>>2];k[j+4>>2]=k[n+4>>2];k[j+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;h=i[j>>0]|0;y=(h&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(y?j+1|0:k[j+8>>2]|0)|0,(y?(h&255)>>>1:k[j+4>>2]|0)|0)|0;h=x;x=0;if(h&1){h=Hc()|0;y=M;K2a(j);N=h;O=y;break}K2a(j);K2a(l);K2a(m);J=0;r=c;return J|0}while(0);K2a(l);K=N;L=O}K2a(m);z=K;A=L;Sc(z|0)}do if((i[7424]|0)==0?(Bb(7424)|0)!=0:0){k[o>>2]=26;k[o+4>>2]=278377;k[o+8>>2]=25;k[o+12>>2]=278382;k[o+16>>2]=27;k[o+20>>2]=278387;k[o+24>>2]=28;k[o+28>>2]=278393;k[o+32>>2]=29;k[o+36>>2]=278400;k[o+40>>2]=33;k[o+44>>2]=278407;k[o+48>>2]=34;k[o+52>>2]=278411;k[o+56>>2]=35;k[o+60>>2]=278415;k[o+64>>2]=36;k[o+68>>2]=278419;k[o+72>>2]=37;k[o+76>>2]=278423;k[o+80>>2]=39;k[o+84>>2]=278429;k[o+88>>2]=40;k[o+92>>2]=278433;k[o+96>>2]=41;k[o+100>>2]=278438;k[o+104>>2]=42;k[o+108>>2]=278442;k[o+112>>2]=43;k[o+116>>2]=278446;k[o+120>>2]=44;k[o+124>>2]=278451;k[10717]=0;k[10718]=0;k[10716]=42868;L=o+128|0;K=o;while(1){x=0;m=Ba(563,24)|0;O=x;x=0;if(O&1)break;O=m+16|0;N=K;l=k[N+4>>2]|0;j=O;k[j>>2]=k[N>>2];k[j+4>>2]=l;k[f>>2]=42868;k[d>>2]=k[f>>2];l=woa(42864,d,e,O)|0;O=k[l>>2]|0;if(O){if((O|0)!=(m|0))OBa(m)}else{O=k[e>>2]|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=O;k[l>>2]=m;O=k[k[10716]>>2]|0;if(!O)P=m;else{k[10716]=O;P=k[l>>2]|0}ui(k[10717]|0,P);k[10718]=(k[10718]|0)+1}K=K+8|0;if((K|0)==(L|0)){Q=37;break}}if((Q|0)==37){Kc(7424);break}L=Hc()|0;K=M;xoa(42864,k[10717]|0);Cd(7424);z=L;A=K;Sc(z|0)}while(0);Q=k[10717]|0;a:do if(Q){P=Q;while(1){e=k[P+16>>2]|0;if((g|0)<(e|0))R=P;else{if((e|0)>=(g|0))break;R=P+4|0}P=k[R>>2]|0;if(!P)break a}q2a(q,300108,1);P=a+44|0;e=i[q>>0]|0;d=(e&1)==0;x=0;Fa(88,(k[P>>2]|0)+-16|0,(d?q+1|0:k[q+8>>2]|0)|0,(d?(e&255)>>>1:k[q+4>>2]|0)|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=M;K2a(q);z=e;A=d;Sc(z|0)}K2a(q);Tf[k[(k[u>>2]|0)+12>>2]&2047](u,a);d=k[10717]|0;b:do if(d){e=d;while(1){f=k[e+16>>2]|0;if((g|0)<(f|0)){o=k[e>>2]|0;if(!o)break b;else S=o}else{if((f|0)>=(g|0)){T=e;break}f=k[e+4>>2]|0;if(!f)break b;else S=f}e=S}if(T){e=k[T+20>>2]|0;q2a(s,e,RLa(e)|0);e=i[s>>0]|0;f=(e&1)==0;x=0;Fa(88,(k[P>>2]|0)+-16|0,(f?s+1|0:k[s+8>>2]|0)|0,(f?(e&255)>>>1:k[s+4>>2]|0)|0)|0;e=x;x=0;if(e&1){e=Hc()|0;f=M;K2a(s);z=e;A=f;Sc(z|0)}K2a(s);Tf[k[(k[v>>2]|0)+12>>2]&2047](v,a);q2a(t,300015,1);f=i[t>>0]|0;e=(f&1)==0;x=0;Fa(88,(k[P>>2]|0)+-16|0,(e?t+1|0:k[t+8>>2]|0)|0,(e?(f&255)>>>1:k[t+4>>2]|0)|0)|0;f=x;x=0;if(f&1){f=Hc()|0;e=M;K2a(t);z=f;A=e;Sc(z|0)}else{K2a(t);J=0;r=c;return J|0}}}while(0);P=Rd(8)|0;x=0;xa(671,P|0,296399);d=x;x=0;if(d&1){d=Hc()|0;Fc(P|0);Sc(d|0)}else{k[P>>2]=47544;Gf(P|0,9024,933)}}while(0);q2a(p,278220,23);x=0;fb(357,a|0,b|0,p|0);b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(p);z=b;A=a;Sc(z|0)}else{K2a(p);J=1;r=c;return J|0}return 0}function eoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0;c=r;r=r+432|0;d=c+420|0;e=c+416|0;f=c+280|0;g=c+264|0;h=c+404|0;j=c+392|0;l=c+380|0;m=c+368|0;n=c+356|0;o=c+344|0;p=c+332|0;q=c+320|0;s=c+308|0;t=c+296|0;u=c+284|0;v=c+268|0;w=c+252|0;y=c+240|0;z=c+228|0;A=c+216|0;B=c+204|0;C=c+192|0;D=c+180|0;E=c+168|0;F=c+156|0;G=c+144|0;H=c+132|0;I=c+120|0;J=c+108|0;K=c+96|0;L=c+84|0;N=c+72|0;O=c+60|0;P=c+48|0;Q=c+36|0;R=c+24|0;S=c+12|0;T=c;U=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+24|0;if((i[U>>0]|0)==0?(U=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+25|0,(i[U>>0]|0)==0):0){U=b+24|0;V=k[U>>2]|0;W=(Vf[k[(k[V>>2]|0)+16>>2]&1023](V)|0)+4|0;V=iDa(k[W>>2]|0,168,6768,0)|0;if(!V)BBa();W=V+72|0;switch(k[W>>2]|0){case 24:case 23:{q2a(j,278496,19);V=a+44|0;X=i[j>>0]|0;Y=(X&1)==0;x=0;Fa(88,(k[V>>2]|0)+-16|0,(Y?j+1|0:k[j+8>>2]|0)|0,(Y?(X&255)>>>1:k[j+4>>2]|0)|0)|0;X=x;x=0;if(X&1){X=Hc()|0;Y=M;K2a(j);Z=X;_=Y;Sc(Z|0)}K2a(j);q2a(l,(k[W>>2]|0)==23?324192:329972,1);W=i[l>>0]|0;j=(W&1)==0;x=0;Fa(88,(k[V>>2]|0)+-16|0,(j?l+1|0:k[l+8>>2]|0)|0,(j?(W&255)>>>1:k[l+4>>2]|0)|0)|0;W=x;x=0;if(W&1){W=Hc()|0;j=M;K2a(l);Z=W;_=j;Sc(Z|0)}K2a(l);q2a(m,278516,10);l=i[m>>0]|0;j=(l&1)==0;x=0;Fa(88,(k[V>>2]|0)+-16|0,(j?m+1|0:k[m+8>>2]|0)|0,(j?(l&255)>>>1:k[m+4>>2]|0)|0)|0;l=x;x=0;if(l&1){l=Hc()|0;j=M;K2a(m);Z=l;_=j;Sc(Z|0)}K2a(m);m=b+32|0;k[f>>2]=k[m>>2];j=b+36|0;k[g>>2]=k[j>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];UU(n,e,d);l=n+4|0;W=k[n>>2]|0;if((k[l>>2]|0)==(W|0)){x=0;va(1484,n|0);Y=x;x=0;if(!(Y&1)){$=k[n>>2]|0;aa=16}}else{$=W;aa=16}if((aa|0)==16?(W=k[$>>2]|0,x=0,xa(k[(k[W>>2]|0)+12>>2]|0,W|0,a|0),W=x,x=0,!(W&1)):0){W=k[n>>2]|0;if(W){$=k[l>>2]|0;if(($|0)==(W|0))ba=W;else{Y=$;while(1){$=Y+-8|0;k[l>>2]=$;X=k[Y+-4>>2]|0;if(!X)ca=$;else{j0a(X);ca=k[l>>2]|0}if((ca|0)==(W|0))break;else Y=ca}ba=k[n>>2]|0}OBa(ba)}q2a(o,278516,10);ba=i[o>>0]|0;ca=(ba&1)==0;x=0;Fa(88,(k[V>>2]|0)+-16|0,(ca?o+1|0:k[o+8>>2]|0)|0,(ca?(ba&255)>>>1:k[o+4>>2]|0)|0)|0;ba=x;x=0;if(ba&1){ba=Hc()|0;ca=M;K2a(o);Z=ba;_=ca;Sc(Z|0)}K2a(o);k[f>>2]=k[m>>2];k[g>>2]=k[j>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];UU(p,e,d);o=p+4|0;ca=k[p>>2]|0;if((k[o>>2]|0)-ca>>3>>>0<=1){x=0;va(1484,p|0);ba=x;x=0;if(!(ba&1)){da=k[p>>2]|0;aa=29}}else{da=ca;aa=29}if((aa|0)==29?(ca=k[da+8>>2]|0,x=0,xa(k[(k[ca>>2]|0)+12>>2]|0,ca|0,a|0),ca=x,x=0,!(ca&1)):0){ca=k[p>>2]|0;if(ca){da=k[o>>2]|0;if((da|0)==(ca|0))ea=ca;else{ba=da;while(1){da=ba+-8|0;k[o>>2]=da;Y=k[ba+-4>>2]|0;if(!Y)fa=da;else{j0a(Y);fa=k[o>>2]|0}if((fa|0)==(ca|0))break;else ba=fa}ea=k[p>>2]|0}OBa(ea)}q2a(q,278527,11);ea=i[q>>0]|0;fa=(ea&1)==0;x=0;Fa(88,(k[V>>2]|0)+-16|0,(fa?q+1|0:k[q+8>>2]|0)|0,(fa?(ea&255)>>>1:k[q+4>>2]|0)|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;fa=M;K2a(q);Z=ea;_=fa;Sc(Z|0)}K2a(q);k[f>>2]=k[m>>2];k[g>>2]=k[j>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];UU(s,e,d);j=s+4|0;m=k[s>>2]|0;do if((k[j>>2]|0)-m>>3>>>0>2){ga=m;aa=42}else{x=0;va(1484,s|0);q=x;x=0;if(q&1)break;ga=k[s>>2]|0;aa=42}while(0);do if((aa|0)==42){m=k[ga+16>>2]|0;x=0;xa(k[(k[m>>2]|0)+12>>2]|0,m|0,a|0);m=x;x=0;if(m&1)break;m=k[s>>2]|0;if(m){q=k[j>>2]|0;if((q|0)==(m|0))ha=m;else{fa=q;while(1){q=fa+-8|0;k[j>>2]=q;ea=k[fa+-4>>2]|0;if(!ea)ia=q;else{j0a(ea);ia=k[j>>2]|0}if((ia|0)==(m|0))break;else fa=ia}ha=k[s>>2]|0}OBa(ha)}q2a(t,278539,3);fa=i[t>>0]|0;m=(fa&1)==0;x=0;Fa(88,(k[V>>2]|0)+-16|0,(m?t+1|0:k[t+8>>2]|0)|0,(m?(fa&255)>>>1:k[t+4>>2]|0)|0)|0;fa=x;x=0;if(fa&1){fa=Hc()|0;m=M;K2a(t);Z=fa;_=m;Sc(Z|0)}else{K2a(t);ja=0;r=c;return ja|0}}while(0);t=Hc()|0;V=M;ha=k[s>>2]|0;if(!ha){Z=t;_=V;Sc(Z|0)}ia=k[j>>2]|0;if((ia|0)==(ha|0))ka=ha;else{ga=ia;while(1){ia=ga+-8|0;k[j>>2]=ia;m=k[ga+-4>>2]|0;if(!m)la=ia;else{j0a(m);la=k[j>>2]|0}if((la|0)==(ha|0))break;else ga=la}ka=k[s>>2]|0}OBa(ka);Z=t;_=V;Sc(Z|0)}V=Hc()|0;t=M;ka=k[p>>2]|0;if(!ka){Z=V;_=t;Sc(Z|0)}s=k[o>>2]|0;if((s|0)==(ka|0))ma=ka;else{la=s;while(1){s=la+-8|0;k[o>>2]=s;ga=k[la+-4>>2]|0;if(!ga)na=s;else{j0a(ga);na=k[o>>2]|0}if((na|0)==(ka|0))break;else la=na}ma=k[p>>2]|0}OBa(ma);Z=V;_=t;Sc(Z|0)}t=Hc()|0;V=M;ma=k[n>>2]|0;if(!ma){Z=t;_=V;Sc(Z|0)}p=k[l>>2]|0;if((p|0)==(ma|0))oa=ma;else{na=p;while(1){p=na+-8|0;k[l>>2]=p;la=k[na+-4>>2]|0;if(!la)qa=p;else{j0a(la);qa=k[l>>2]|0}if((qa|0)==(ma|0))break;else na=qa}oa=k[n>>2]|0}OBa(oa);Z=t;_=V;Sc(Z|0);break}case 0:{if((k[b+44>>2]|0)!=(k[b+48>>2]|0)){q2a(u,278543,50);x=0;fb(357,a|0,b|0,u|0);V=x;x=0;if(V&1){V=Hc()|0;t=M;K2a(u);Z=V;_=t;Sc(Z|0)}else{K2a(u);ja=1;r=c;return ja|0}}q2a(v,300108,1);u=a+44|0;t=i[v>>0]|0;V=(t&1)==0;x=0;Fa(88,(k[u>>2]|0)+-16|0,(V?v+1|0:k[v+8>>2]|0)|0,(V?(t&255)>>>1:k[v+4>>2]|0)|0)|0;t=x;x=0;if(t&1){t=Hc()|0;V=M;K2a(v);Z=t;_=V;Sc(Z|0)}K2a(v);v=k[U>>2]|0;Tf[k[(k[v>>2]|0)+12>>2]&2047](v,a);q2a(w,278594,6);v=i[w>>0]|0;V=(v&1)==0;x=0;Fa(88,(k[u>>2]|0)+-16|0,(V?w+1|0:k[w+8>>2]|0)|0,(V?(v&255)>>>1:k[w+4>>2]|0)|0)|0;v=x;x=0;if(v&1){v=Hc()|0;V=M;K2a(w);Z=v;_=V;Sc(Z|0)}K2a(w);k[f>>2]=k[b+32>>2];k[g>>2]=k[b+36>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];UU(y,e,d);w=k[y>>2]|0;V=y+4|0;v=k[V>>2]|0;do if((w|0)==(v|0))ra=w;else{t=z+8|0;oa=z+1|0;n=z+4|0;qa=w;while(1){x=0;fb(140,z|0,324196,1);na=x;x=0;if(na&1){aa=102;break}na=i[z>>0]|0;ma=(na&1)==0;x=0;Fa(88,(k[u>>2]|0)+-16|0,(ma?oa:k[t>>2]|0)|0,(ma?(na&255)>>>1:k[n>>2]|0)|0)|0;na=x;x=0;if(na&1){aa=103;break}K2a(z);na=k[qa>>2]|0;x=0;xa(k[(k[na>>2]|0)+12>>2]|0,na|0,a|0);na=x;x=0;if(na&1){aa=102;break}qa=qa+8|0;if((qa|0)==(v|0)){aa=87;break}}if((aa|0)==87){ra=k[y>>2]|0;break}else if((aa|0)==102){qa=Hc()|0;sa=qa;ta=M}else if((aa|0)==103){qa=Hc()|0;n=M;K2a(z);sa=qa;ta=n}n=k[y>>2]|0;if(!n){Z=sa;_=ta;Sc(Z|0)}qa=k[V>>2]|0;if((qa|0)==(n|0))ua=n;else{t=qa;while(1){qa=t+-8|0;k[V>>2]=qa;oa=k[t+-4>>2]|0;if(!oa)wa=qa;else{j0a(oa);wa=k[V>>2]|0}if((wa|0)==(n|0))break;else t=wa}ua=k[y>>2]|0}OBa(ua);Z=sa;_=ta;Sc(Z|0)}while(0);if(ra){ta=k[V>>2]|0;if((ta|0)==(ra|0))ya=ra;else{sa=ta;while(1){ta=sa+-8|0;k[V>>2]=ta;ua=k[sa+-4>>2]|0;if(!ua)za=ta;else{j0a(ua);za=k[V>>2]|0}if((za|0)==(ra|0))break;else sa=za}ya=k[y>>2]|0}OBa(ya)}q2a(A,300015,1);ya=i[A>>0]|0;y=(ya&1)==0;x=0;Fa(88,(k[u>>2]|0)+-16|0,(y?A+1|0:k[A+8>>2]|0)|0,(y?(ya&255)>>>1:k[A+4>>2]|0)|0)|0;ya=x;x=0;if(ya&1){ya=Hc()|0;y=M;K2a(A);Z=ya;_=y;Sc(Z|0)}else{K2a(A);ja=0;r=c;return ja|0}break}case 4:{k[f>>2]=k[b+32>>2];k[g>>2]=k[b+36>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];UU(B,e,d);A=k[B>>2]|0;y=B+4|0;ya=k[y>>2]|0;u=(A|0)==(ya|0);if(A){if(u)Aa=A;else{za=ya;while(1){ya=za+-8|0;k[y>>2]=ya;sa=k[za+-4>>2]|0;if(!sa)Ba=ya;else{j0a(sa);Ba=k[y>>2]|0}if((Ba|0)==(A|0))break;else za=Ba}Aa=k[B>>2]|0}OBa(Aa)}if(!u){q2a(C,278543,50);x=0;fb(357,a|0,b|0,C|0);u=x;x=0;if(u&1){u=Hc()|0;Aa=M;K2a(C);Z=u;_=Aa;Sc(Z|0)}else{K2a(C);ja=1;r=c;return ja|0}}q2a(D,300108,1);C=a+44|0;Aa=i[D>>0]|0;u=(Aa&1)==0;x=0;Fa(88,(k[C>>2]|0)+-16|0,(u?D+1|0:k[D+8>>2]|0)|0,(u?(Aa&255)>>>1:k[D+4>>2]|0)|0)|0;Aa=x;x=0;if(Aa&1){Aa=Hc()|0;u=M;K2a(D);Z=Aa;_=u;Sc(Z|0)}K2a(D);Lna(a);D=(k[C>>2]|0)+-4|0;k[D>>2]=(k[D>>2]|0)+1;q2a(E,278601,18);D=i[E>>0]|0;u=(D&1)==0;x=0;Fa(88,(k[C>>2]|0)+-16|0,(u?E+1|0:k[E+8>>2]|0)|0,(u?(D&255)>>>1:k[E+4>>2]|0)|0)|0;D=x;x=0;if(D&1){D=Hc()|0;u=M;K2a(E);Z=D;_=u;Sc(Z|0)}K2a(E);E=k[U>>2]|0;Tf[k[(k[E>>2]|0)+12>>2]&2047](E,a);q2a(F,278620,30);x=0;va(1518,a|0);E=x;x=0;if((!(E&1)?(E=i[F>>0]|0,U=(E&1)==0,x=0,Fa(88,(k[C>>2]|0)+-16|0,(U?F+1|0:k[F+8>>2]|0)|0,(U?(E&255)>>>1:k[F+4>>2]|0)|0)|0,E=x,x=0,!(E&1)):0)?(x=0,va(1518,a|0),E=x,x=0,!(E&1)):0){K2a(F);Lna(a);E=(k[C>>2]|0)+-4|0;k[E>>2]=(k[E>>2]|0)+1;q2a(G,278651,37);x=0;va(1518,a|0);E=x;x=0;if((!(E&1)?(E=i[G>>0]|0,U=(E&1)==0,x=0,Fa(88,(k[C>>2]|0)+-16|0,(U?G+1|0:k[G+8>>2]|0)|0,(U?(E&255)>>>1:k[G+4>>2]|0)|0)|0,E=x,x=0,!(E&1)):0)?(x=0,va(1518,a|0),E=x,x=0,!(E&1)):0){K2a(G);q2a(H,277822,5);x=0;va(1518,a|0);E=x;x=0;do if(!(E&1)?(U=i[H>>0]|0,u=(U&1)==0,x=0,Fa(88,(k[C>>2]|0)+-16|0,(u?H+1|0:k[H+8>>2]|0)|0,(u?(U&255)>>>1:k[H+4>>2]|0)|0)|0,U=x,x=0,!(U&1)):0){x=0;va(1518,a|0);U=x;x=0;if(U&1)break;K2a(H);Lna(a);U=(k[C>>2]|0)+-4|0;k[U>>2]=(k[U>>2]|0)+1;q2a(I,278689,38);x=0;va(1518,a|0);U=x;x=0;do if(!(U&1)){u=i[I>>0]|0;D=(u&1)==0;x=0;Fa(88,(k[C>>2]|0)+-16|0,(D?I+1|0:k[I+8>>2]|0)|0,(D?(u&255)>>>1:k[I+4>>2]|0)|0)|0;u=x;x=0;if(u&1)break;x=0;va(1518,a|0);u=x;x=0;if(u&1)break;K2a(I);q2a(J,278728,90);x=0;va(1518,a|0);u=x;x=0;do if(!(u&1)){D=i[J>>0]|0;Aa=(D&1)==0;x=0;Fa(88,(k[C>>2]|0)+-16|0,(Aa?J+1|0:k[J+8>>2]|0)|0,(Aa?(D&255)>>>1:k[J+4>>2]|0)|0)|0;D=x;x=0;if(D&1)break;x=0;va(1518,a|0);D=x;x=0;if(D&1)break;K2a(J);Lna(a);D=(k[(k[C>>2]|0)+-4>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,D|0,d|0,131,275489,276430);D=x;x=0;if(D&1){D=Hc()|0;K2a(d);Sc(D|0)}K2a(d);D=(k[C>>2]|0)+-4|0;k[D>>2]=(k[D>>2]|0)+-1;q2a(K,277107,3);x=0;va(1518,a|0);D=x;x=0;do if(!(D&1)){Aa=i[K>>0]|0;B=(Aa&1)==0;x=0;Fa(88,(k[C>>2]|0)+-16|0,(B?K+1|0:k[K+8>>2]|0)|0,(B?(Aa&255)>>>1:k[K+4>>2]|0)|0)|0;Aa=x;x=0;if(Aa&1)break;x=0;va(1518,a|0);Aa=x;x=0;if(Aa&1)break;K2a(K);Lna(a);Aa=(k[(k[C>>2]|0)+-4>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,Aa|0,d|0,131,275489,276430);Aa=x;x=0;if(Aa&1){Aa=Hc()|0;K2a(d);Sc(Aa|0)}K2a(d);Aa=(k[C>>2]|0)+-4|0;k[Aa>>2]=(k[Aa>>2]|0)+-1;q2a(L,278819,10);x=0;va(1518,a|0);Aa=x;x=0;do if(!(Aa&1)){B=i[L>>0]|0;Ba=(B&1)==0;x=0;Fa(88,(k[C>>2]|0)+-16|0,(Ba?L+1|0:k[L+8>>2]|0)|0,(Ba?(B&255)>>>1:k[L+4>>2]|0)|0)|0;B=x;x=0;if(B&1)break;x=0;va(1518,a|0);B=x;x=0;if(B&1)break;K2a(L);Lna(a);B=(k[(k[C>>2]|0)+-4>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,B|0,d|0,131,275489,276430);B=x;x=0;if(B&1){B=Hc()|0;K2a(d);Sc(B|0)}K2a(d);B=(k[C>>2]|0)+-4|0;k[B>>2]=(k[B>>2]|0)+-1;q2a(N,300015,1);B=i[N>>0]|0;Ba=(B&1)==0;x=0;Fa(88,(k[C>>2]|0)+-16|0,(Ba?N+1|0:k[N+8>>2]|0)|0,(Ba?(B&255)>>>1:k[N+4>>2]|0)|0)|0;B=x;x=0;if(B&1){B=Hc()|0;Ba=M;K2a(N);Z=B;_=Ba;Sc(Z|0)}else{K2a(N);ja=0;r=c;return ja|0}}while(0);Aa=Hc()|0;Ba=M;K2a(L);Z=Aa;_=Ba;Sc(Z|0)}while(0);D=Hc()|0;Ba=M;K2a(K);Z=D;_=Ba;Sc(Z|0)}while(0);u=Hc()|0;Ba=M;K2a(J);Z=u;_=Ba;Sc(Z|0)}while(0);U=Hc()|0;Ba=M;K2a(I);Z=U;_=Ba;Sc(Z|0)}while(0);I=Hc()|0;J=M;K2a(H);Z=I;_=J;Sc(Z|0)}J=Hc()|0;I=M;K2a(G);Z=J;_=I;Sc(Z|0)}I=Hc()|0;J=M;K2a(F);Z=I;_=J;Sc(Z|0);break}case 21:{q2a(O,278830,13);J=a+44|0;I=i[O>>0]|0;F=(I&1)==0;x=0;Fa(88,(k[J>>2]|0)+-16|0,(F?O+1|0:k[O+8>>2]|0)|0,(F?(I&255)>>>1:k[O+4>>2]|0)|0)|0;I=x;x=0;if(I&1){I=Hc()|0;F=M;K2a(O);Z=I;_=F;Sc(Z|0)}K2a(O);O=b+32|0;k[f>>2]=k[O>>2];F=b+36|0;k[g>>2]=k[F>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];UU(P,e,d);I=P+4|0;G=k[I>>2]|0;H=k[P>>2]|0;x=0;fb(140,Q|0,329672,0);K=x;x=0;do if(!(K&1)){x=0;pa(57,(G-H|0)==8|0,Q|0,650,275489,278844);L=x;x=0;if(L&1){L=Hc()|0;N=M;K2a(Q);Ca=L;Da=N;break}K2a(Q);N=k[P>>2]|0;if(N){L=k[I>>2]|0;if((L|0)==(N|0))Ea=N;else{C=L;while(1){L=C+-8|0;k[I>>2]=L;E=k[C+-4>>2]|0;if(!E)Ga=L;else{j0a(E);Ga=k[I>>2]|0}if((Ga|0)==(N|0))break;else C=Ga}Ea=k[P>>2]|0}OBa(Ea)}k[f>>2]=k[O>>2];k[g>>2]=k[F>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];UU(R,e,d);C=k[k[R>>2]>>2]|0;x=0;xa(k[(k[C>>2]|0)+12>>2]|0,C|0,a|0);C=x;x=0;if(C&1){C=Hc()|0;N=M;E=k[R>>2]|0;if(!E){Z=C;_=N;Sc(Z|0)}L=R+4|0;Ba=k[L>>2]|0;if((Ba|0)==(E|0))Ha=E;else{U=Ba;while(1){Ba=U+-8|0;k[L>>2]=Ba;u=k[U+-4>>2]|0;if(!u)Ia=Ba;else{j0a(u);Ia=k[L>>2]|0}if((Ia|0)==(E|0))break;else U=Ia}Ha=k[R>>2]|0}OBa(Ha);Z=C;_=N;Sc(Z|0)}U=k[R>>2]|0;if(U){E=R+4|0;L=k[E>>2]|0;if((L|0)==(U|0))Ja=U;else{u=L;while(1){L=u+-8|0;k[E>>2]=L;Ba=k[u+-4>>2]|0;if(!Ba)Ka=L;else{j0a(Ba);Ka=k[E>>2]|0}if((Ka|0)==(U|0))break;else u=Ka}Ja=k[R>>2]|0}OBa(Ja)}q2a(S,278931,4);u=i[S>>0]|0;U=(u&1)==0;x=0;Fa(88,(k[J>>2]|0)+-16|0,(U?S+1|0:k[S+8>>2]|0)|0,(U?(u&255)>>>1:k[S+4>>2]|0)|0)|0;u=x;x=0;if(u&1){u=Hc()|0;U=M;K2a(S);Z=u;_=U;Sc(Z|0)}else{K2a(S);ja=0;r=c;return ja|0}}else{U=Hc()|0;Ca=U;Da=M}while(0);S=k[P>>2]|0;if(!S){Z=Ca;_=Da;Sc(Z|0)}J=k[I>>2]|0;if((J|0)==(S|0))La=S;else{Ja=J;while(1){J=Ja+-8|0;k[I>>2]=J;R=k[Ja+-4>>2]|0;if(!R)Ma=J;else{j0a(R);Ma=k[I>>2]|0}if((Ma|0)==(S|0))break;else Ja=Ma}La=k[P>>2]|0}OBa(La);Z=Ca;_=Da;Sc(Z|0);break}default:{q2a(T,278936,39);x=0;fb(357,a|0,b|0,T|0);Da=x;x=0;if(Da&1){Da=Hc()|0;Ca=M;K2a(T);Z=Da;_=Ca;Sc(Z|0)}else{K2a(T);ja=1;r=c;return ja|0}}}}q2a(h,278456,39);x=0;fb(357,a|0,b|0,h|0);b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(h);Z=b;_=a;Sc(Z|0)}else{K2a(h);ja=1;r=c;return ja|0}return 0}function foa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+96|0;d=c+72|0;e=c+60|0;f=c+48|0;g=c+16|0;h=c;j=b+24|0;l=k[j>>2]|0;m=(Vf[k[(k[l>>2]|0)+16>>2]&1023](l)|0)+4|0;l=k[m>>2]|0;m=b+32|0;if(((Vf[k[k[l>>2]>>2]&1023](l)|0)==5?(b5a(k[m>>2]|0,278976)|0)==0:0)?(l=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+13|0,(i[l>>0]|0)==0):0){q2a(d,278368,8);l=a+44|0;n=i[d>>0]|0;o=(n&1)==0;x=0;Fa(88,(k[l>>2]|0)+-16|0,(o?d+1|0:k[d+8>>2]|0)|0,(o?(n&255)>>>1:k[d+4>>2]|0)|0)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(d);p=o;q=n;Sc(q|0)}K2a(d);d=k[j>>2]|0;Tf[k[(k[d>>2]|0)+12>>2]&2047](d,a);q2a(e,278983,7);d=i[e>>0]|0;n=(d&1)==0;x=0;Fa(88,(k[l>>2]|0)+-16|0,(n?e+1|0:k[e+8>>2]|0)|0,(n?(d&255)>>>1:k[e+4>>2]|0)|0)|0;d=x;x=0;if(d&1){d=Hc()|0;n=M;K2a(e);p=n;q=d;Sc(q|0)}K2a(e);q2a(f,300015,1);e=i[f>>0]|0;d=(e&1)==0;x=0;Fa(88,(k[l>>2]|0)+-16|0,(d?f+1|0:k[f+8>>2]|0)|0,(d?(e&255)>>>1:k[f+4>>2]|0)|0)|0;e=x;x=0;if(e&1){e=Hc()|0;d=M;K2a(f);p=d;q=e;Sc(q|0)}else{K2a(f);r=c;return 0}}do if(!(b5a(k[m>>2]|0,278991)|0)){f=k[j>>2]|0;e=(Vf[k[(k[f>>2]|0)+16>>2]&1023](f)|0)+4|0;f=k[e>>2]|0;e=k[(k[f>>2]|0)+20>>2]|0;n8(g,160,2);x=0;d=Ta(e|0,f|0,g|0)|0;f=x;x=0;if(f&1){f=Hc()|0;e=M;k[g>>2]=20456;xh(g+12|0,k[g+16>>2]|0);l=k[g+8>>2]|0;if(!l){p=e;q=f;Sc(q|0)}k0a(l);p=e;q=f;Sc(q|0)}k[g>>2]=20456;xh(g+12|0,k[g+16>>2]|0);f=k[g+8>>2]|0;if(!f){if(!d)break;r=c;return 0}else{k0a(f);if(!d)break;r=c;return 0}}while(0);q2a(h,278996,52);x=0;fb(357,a|0,b|0,h|0);b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(h);p=a;q=b;Sc(q|0)}else{K2a(h);r=c;return 0}return 0}function goa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+80|0;d=c+60|0;e=c+48|0;f=c+36|0;g=c+24|0;h=c+12|0;j=c;l=b+24|0;m=k[l>>2]|0;n=(Vf[k[(k[m>>2]|0)+16>>2]&1023](m)|0)+4|0;m=k[n>>2]|0;if((m|0)!=0?(iDa(m,168,6704,0)|0)!=0:0){m=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+13|0;if(i[m>>0]|0){q2a(e,279089,43);x=0;fb(357,a|0,b|0,e|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(e);o=n;p=m;Sc(p|0)}else{K2a(e);q=1;r=c;return q|0}}q2a(f,300108,1);e=a+44|0;m=i[f>>0]|0;n=(m&1)==0;x=0;Fa(88,(k[e>>2]|0)+-16|0,(n?f+1|0:k[f+8>>2]|0)|0,(n?(m&255)>>>1:k[f+4>>2]|0)|0)|0;m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(f);o=n;p=m;Sc(p|0)}K2a(f);f=k[l>>2]|0;Tf[k[(k[f>>2]|0)+12>>2]&2047](f,a);q2a(g,279133,8);f=i[g>>0]|0;l=(f&1)==0;x=0;Fa(88,(k[e>>2]|0)+-16|0,(l?g+1|0:k[g+8>>2]|0)|0,(l?(f&255)>>>1:k[g+4>>2]|0)|0)|0;f=x;x=0;if(f&1){f=Hc()|0;l=M;K2a(g);o=l;p=f;Sc(p|0)}K2a(g);g=k[b+32>>2]|0;Tf[k[(k[g>>2]|0)+12>>2]&2047](g,a);q2a(h,316824,1);g=i[h>>0]|0;f=(g&1)==0;x=0;Fa(88,(k[e>>2]|0)+-16|0,(f?h+1|0:k[h+8>>2]|0)|0,(f?(g&255)>>>1:k[h+4>>2]|0)|0)|0;g=x;x=0;if(g&1){g=Hc()|0;f=M;K2a(h);o=f;p=g;Sc(p|0)}K2a(h);q2a(j,300015,1);h=i[j>>0]|0;g=(h&1)==0;x=0;Fa(88,(k[e>>2]|0)+-16|0,(g?j+1|0:k[j+8>>2]|0)|0,(g?(h&255)>>>1:k[j+4>>2]|0)|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=M;K2a(j);o=g;p=h;Sc(p|0)}else{K2a(j);q=0;r=c;return q|0}}q2a(d,279049,39);x=0;fb(357,a|0,b|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(d);o=a;p=b;Sc(p|0)}else{K2a(d);q=1;r=c;return q|0}return 0}function hoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+80|0;d=c+60|0;e=c+48|0;f=c+36|0;g=c+24|0;h=c+12|0;j=c;l=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+24|0;m=k[l>>2]|0;if(m){l=iDa(m,4520,5424,0)|0;if(l){n=k[l+24>>2]|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;l=i[n>>0]|0;o=(l&1)==0?(l&255)>>>1:k[n+4>>2]|0;x=0;nb(83,d|0,287459,1,o+1|0);l=x;x=0;if(l&1){p=Hc()|0;q=M;K2a(d);Sc(p|0)}x=0;Fa(88,d|0,((i[n>>0]&1)==0?n+1|0:k[n+8>>2]|0)|0,o|0)|0;o=x;x=0;if(o&1){p=Hc()|0;q=M;K2a(d);Sc(p|0)}p=i[d>>0]|0;q=(p&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(q?d+1|0:k[d+8>>2]|0)|0,(q?(p&255)>>>1:k[d+4>>2]|0)|0)|0;p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(d);s=p;t=q;Sc(s|0)}else{K2a(d);r=c;return 0}}d=iDa(m,4520,5464,0)|0;if(d){m=k[a+16>>2]|0;q=k[a+12>>2]|0;a:do if((q|0)==(m|0))u=m;else{p=q;while(1){if((k[p>>2]|0)==(d|0)){u=p;break a}p=p+4|0;if((p|0)==(m|0)){u=m;break}}}while(0);q=(m|0)!=(u|0);u=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+13|0;m=i[u>>0]|0;do if(!q){if(!(m<<24>>24)){q2a(f,279156,2);u=i[f>>0]|0;p=(u&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(p?f+1|0:k[f+8>>2]|0)|0,(p?(u&255)>>>1:k[f+4>>2]|0)|0)|0;u=x;x=0;if(!(u&1)){K2a(f);break}u=Hc()|0;p=M;K2a(f);s=u;t=p;Sc(s|0)}}else{q2a(e,279142,13);p=i[e>>0]|0;u=(p&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(u?e+1|0:k[e+8>>2]|0)|0,(u?(p&255)>>>1:k[e+4>>2]|0)|0)|0;p=x;x=0;if(!(p&1)){K2a(e);break}p=Hc()|0;u=M;K2a(e);s=p;t=u;Sc(s|0)}while(0);e=k[d+24>>2]|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;d=i[e>>0]|0;f=(d&1)==0?(d&255)>>>1:k[e+4>>2]|0;x=0;nb(83,g|0,287459,1,f+1|0);d=x;x=0;if(d&1){v=Hc()|0;w=M;K2a(g);Sc(v|0)}x=0;Fa(88,g|0,((i[e>>0]&1)==0?e+1|0:k[e+8>>2]|0)|0,f|0)|0;f=x;x=0;if(f&1){v=Hc()|0;w=M;K2a(g);Sc(v|0)}v=a+44|0;w=i[g>>0]|0;f=(w&1)==0;x=0;Fa(88,(k[v>>2]|0)+-16|0,(f?g+1|0:k[g+8>>2]|0)|0,(f?(w&255)>>>1:k[g+4>>2]|0)|0)|0;w=x;x=0;if(w&1){w=Hc()|0;f=M;K2a(g);s=w;t=f;Sc(s|0)}K2a(g);do if(m<<24>>24==0&(q^1)){q2a(h,300015,1);g=i[h>>0]|0;f=(g&1)==0;x=0;Fa(88,(k[v>>2]|0)+-16|0,(f?h+1|0:k[h+8>>2]|0)|0,(f?(g&255)>>>1:k[h+4>>2]|0)|0)|0;g=x;x=0;if(!(g&1)){K2a(h);break}g=Hc()|0;f=M;K2a(h);s=g;t=f;Sc(s|0)}while(0);i[a+24>>0]=q&1^1;r=c;return 0}}q2a(j,279159,14);x=0;fb(357,a|0,b|0,j|0);b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(j);s=b;t=a;Sc(s|0)}else{K2a(j);r=c;return 0}return 0}function ioa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=k[a+16>>2]|0;d=k[a+12>>2]|0;a:do if((d|0)==(c|0))e=c;else{a=d;while(1){if((k[a>>2]|0)==(b|0)){e=a;break a}a=a+4|0;if((a|0)==(c|0)){e=c;break}}}while(0);return (c|0)!=(e|0)|0}function joa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0;c=r;r=r+192|0;d=c+80|0;e=c+40|0;f=c+168|0;g=c+156|0;h=c+144|0;j=c+132|0;l=c+120|0;m=c+108|0;n=c;o=c+96|0;p=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;q=k[p+4>>2]|0;s=k[p+8>>2]|0;p=(s|0)==0;if(!p)h0a(s);x=0;t=Ba(k[k[q>>2]>>2]|0,q|0)|0;u=x;x=0;a:do if(u&1)v=5;else{b:do switch(t|0){case 3:{x=0;fb(k[(k[q>>2]|0)+84>>2]|0,e|0,q|0,b|0);w=x;x=0;if(w&1){v=5;break a}x=0;if((k[e>>2]|0)==0?(k[e+32>>2]|0)==1:0){q2a(f,330267,5);w=x;x=0;if(w&1){v=5;break a}w=i[f>>0]|0;y=(w&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(y?f+1|0:k[f+8>>2]|0)|0,(y?(w&255)>>>1:k[f+4>>2]|0)|0)|0;w=x;x=0;if(w&1){w=Hc()|0;y=M;K2a(f);z=w;A=y;break a}else{K2a(f);break b}}else{q2a(g,330262,4);y=x;x=0;if(y&1){v=5;break a}y=i[g>>0]|0;w=(y&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(w?g+1|0:k[g+8>>2]|0)|0,(w?(y&255)>>>1:k[g+4>>2]|0)|0)|0;y=x;x=0;if(y&1){y=Hc()|0;w=M;K2a(g);z=y;A=w;break a}else{K2a(g);break b}}break}case 1:{w=iDa(q,168,6624,0)|0;if(!w){x=0;hb(49);x=0;v=5;break a}y=w+40|0;k[d>>2]=0;B=d+8|0;k[B>>2]=0;C=d+13|0;i[C>>0]=1;D=k[w+48>>2]|0;E=D>>>0>134217728?134217728:D;if(E>>>0>2){F=E>>>0>8?E:8;x=0;G=Ba(563,F<<2|0)|0;H=x;x=0;if(H&1){v=5;break a}i[C>>0]=0;k[B>>2]=E;k[d>>2]=F;k[d+4>>2]=G;I=G}else{k[B>>2]=E;I=d}Dyb(I|0,((i[w+53>>0]|0)==0?k[w+44>>2]|0:y)|0,D<<2|0)|0;D=i[w+52>>0]|0;i[d+12>>0]=D;w=i[C>>0]|0;if(D<<24>>24==0&(k[B>>2]|0)==1)J=(k[(w<<24>>24==0?k[d+4>>2]|0:d)>>2]|0)!=1;else J=1;if(!(w<<24>>24))OBa(k[d+4>>2]|0);if(J){x=0;fb(140,h|0,278334,33);w=x;x=0;if(w&1){v=5;break a}x=0;fb(357,a|0,b|0,h|0);w=x;x=0;if(w&1){w=Hc()|0;B=M;K2a(h);z=w;A=B;break a}else{K2a(h);break b}}x=0;fb(k[(k[q>>2]|0)+84>>2]|0,n|0,q|0,b|0);B=x;x=0;if(B&1){v=5;break a}x=0;xa(864,m|0,n|0);B=x;x=0;if(B&1){v=5;break a}x=0;B=Fa(86,m|0,0,278368)|0;w=x;x=0;if(w&1){w=Hc()|0;K=w;L=M}else{k[l>>2]=k[B>>2];k[l+4>>2]=k[B+4>>2];k[l+8>>2]=k[B+8>>2];k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;x=0;B=Ta(484,l|0,300015)|0;w=x;x=0;do if(!(w&1)){k[j>>2]=k[B>>2];k[j+4>>2]=k[B+4>>2];k[j+8>>2]=k[B+8>>2];k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;D=i[j>>0]|0;C=(D&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(C?j+1|0:k[j+8>>2]|0)|0,(C?(D&255)>>>1:k[j+4>>2]|0)|0)|0;D=x;x=0;if(D&1){D=Hc()|0;C=M;K2a(j);N=D;O=C;break}else{K2a(j);K2a(l);K2a(m);break b}}else{C=Hc()|0;N=C;O=M}while(0);K2a(l);K=N;L=O}K2a(m);z=K;A=L;break a;break}default:{x=0;fb(140,o|0,279159,14);B=x;x=0;if(B&1){v=5;break a}x=0;fb(357,a|0,b|0,o|0);B=x;x=0;if(B&1){B=Hc()|0;w=M;K2a(o);z=B;A=w;break a}else{K2a(o);break b}}}while(0);if(p){r=c;return 0}j0a(s);r=c;return 0}while(0);if((v|0)==5){v=Hc()|0;z=v;A=M}if(p)Sc(z|0);j0a(s);Sc(z|0);return 0}function koa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=k[a+12>>2]|0;d=k[a+16>>2]|0;if((c|0)==(d|0)){e=0;return e|0}a=i[b>>0]|0;f=(a&1)==0;g=f?(a&255)>>>1:k[b+4>>2]|0;a=f?b+1|0:k[b+8>>2]|0;b=(g|0)==0;f=c;a:while(1){c=k[(k[f>>2]|0)+24>>2]|0;h=i[c>>0]|0;j=(h&1)==0;l=(h&255)>>>1;b:do if(((j?l:k[c+4>>2]|0)|0)==(g|0)){if(!j)if(!(ZLa(k[c+8>>2]|0,a,g)|0)){e=1;m=11;break a}else break;if(b){e=1;m=11;break a}h=l;n=c+1|0;o=a;while(1){if((i[n>>0]|0)!=(i[o>>0]|0))break b;h=h+-1|0;if(!h){e=1;m=11;break a}else{n=n+1|0;o=o+1|0}}}while(0);f=f+4|0;if((f|0)==(d|0)){e=0;m=11;break}}if((m|0)==11)return e|0;return 0}function loa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=k[a+28>>2]|0;d=a+32|0;if((c|0)==(d|0)){e=0;return e|0}a=c;while(1){if((k[a+28>>2]|0)==(b|0)){e=1;f=9;break}c=k[a+4>>2]|0;if(!c){g=a;while(1){h=k[g+8>>2]|0;if((k[h>>2]|0)==(g|0)){i=h;break}else g=h}}else{g=c;while(1){h=k[g>>2]|0;if(!h){i=g;break}else g=h}}if((i|0)==(d|0)){e=0;f=9;break}else a=i}if((f|0)==9)return e|0;return 0}function moa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=k[a+32>>2]|0;if(!c){d=0;return d|0}a=i[b>>0]|0;e=(a&1)==0;f=e?(a&255)>>>1:k[b+4>>2]|0;a=e?b+1|0:k[b+8>>2]|0;b=c;while(1){c=b+16|0;e=i[c>>0]|0;g=(e&1)==0;h=g?(e&255)>>>1:k[b+20>>2]|0;e=g?c+1|0:k[b+24>>2]|0;c=h>>>0>>0;g=ZLa(a,e,c?h:f)|0;j=f>>>0>>0;if((((g|0)==0?(j?-2147483648:0):g)|0)<0)l=b;else{g=ZLa(e,a,j?f:h)|0;if((((g|0)==0?(c?-2147483648:0):g)|0)>=0){d=1;m=8;break}l=b+4|0}b=k[l>>2]|0;if(!b){d=0;m=8;break}}if((m|0)==8)return d|0;return 0}function noa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0;d=r;r=r+64|0;e=d+48|0;f=d+36|0;g=d+24|0;h=d+12|0;j=d;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;l=i[c>>0]|0;m=(l&1)==0;n=c+8|0;o=c+1|0;p=m?o:c+1|0;q=m?c+8|0:n;s=c+4|0;t=e+8|0;u=e+4|0;v=b+32|0;w=b+12|0;y=b+16|0;b=a+1|0;z=a+4|0;A=a+8|0;B=e+1|0;C=h+8|0;D=h+1|0;E=h+4|0;F=f+8|0;G=f+1|0;H=f+4|0;I=l;l=m?o:k[n>>2]|0;a:while(1){n=(I&1)==0;o=(n?p:k[q>>2]|0)+(n?(I&255)>>>1:k[s>>2]|0)|0;b:do if((l|0)==(o|0))J=l;else{n=l;while(1){if((i[n>>0]|0)==35){J=n;break b}n=n+1|0;if((n|0)==(o|0)){J=o;break}}}while(0);o=J;n=l;m=i[a>>0]|0;if(!(m&1)){K=m;L=(m&255)>>>1;N=10}else{m=k[a>>2]|0;K=m&255;L=k[z>>2]|0;N=(m&-2)+-1|0}m=o-n|0;do if((J|0)!=(l|0)){if((N-L|0)>>>0>>0){x=0;Pa(42,a|0,N|0,L+m-N|0,L|0,L|0,0,0);O=x;x=0;if(O&1){P=20;break a}Q=i[a>>0]|0}else Q=K;if(!(Q&1))R=b;else R=k[A>>2]|0;O=l;S=n;T=R+L|0;while(1){i[T>>0]=i[O>>0]|0;U=T+1|0;V=S+1|0;if((V|0)==(J|0)){W=U;break}else{O=V;S=V;T=U}}i[W>>0]=0;T=L+m|0;if(!(i[a>>0]&1)){i[a>>0]=T<<1;break}else{k[z>>2]=T;break}}while(0);m=i[c>>0]|0;n=(m&1)==0;T=(n?p:k[q>>2]|0)+(n?(m&255)>>>1:k[s>>2]|0)|0;if((J|0)==(T|0)){P=87;break}m=J+1|0;c:do if((m|0)==(T|0))X=T;else{n=m;while(1){S=i[n>>0]|0;switch(S<<24>>24){case 36:case 95:break;default:if((S+-48&255)>9&((S&-33)+-65&255)>25){X=n;break c}}n=n+1|0;if((n|0)==(T|0)){X=T;break c}}}while(0);T=X;n=m;S=T-n|0;if(S>>>0>4294967279){x=0;va(1471,e|0);O=x;x=0;if(O&1){P=20;break}else P=29}else if(S>>>0<11){i[e>>0]=S<<1;Y=B}else P=29;if((P|0)==29){P=0;O=S+16&-16;x=0;U=Ba(563,O|0)|0;V=x;x=0;if(V&1){P=20;break}k[t>>2]=U;k[e>>2]=O|1;k[u>>2]=S;Y=U}if((m|0)==(X|0))Z=Y;else{U=m;S=n;n=Y;while(1){i[n>>0]=i[U>>0]|0;O=S+1|0;V=n+1|0;if((O|0)==(X|0)){Z=V;break}else{U=O;S=O;n=V}}}i[Z>>0]=0;n=k[v>>2]|0;d:do if(!n)P=51;else{S=i[e>>0]|0;U=(S&1)==0;m=U?(S&255)>>>1:k[u>>2]|0;S=U?B:k[t>>2]|0;U=n;while(1){V=U+16|0;O=i[V>>0]|0;_=(O&1)==0;$=_?(O&255)>>>1:k[U+20>>2]|0;O=_?V+1|0:k[U+24>>2]|0;V=$>>>0>>0;_=ZLa(S,O,V?$:m)|0;aa=m>>>0<$>>>0;if((((_|0)==0?(aa?-2147483648:0):_)|0)<0)ba=U;else{_=ZLa(O,S,aa?m:$)|0;if((((_|0)==0?(V?-2147483648:0):_)|0)>=0)break;ba=U+4|0}U=k[ba>>2]|0;if(!U){P=51;break d}}k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;nb(83,g|0,279174,3,m+3|0);U=x;x=0;if(U&1){P=42;break a}x=0;Fa(88,g|0,((i[e>>0]&1)==0?B:k[t>>2]|0)|0,m|0)|0;U=x;x=0;if(U&1){P=42;break a}x=0;U=Ta(484,g|0,300015)|0;S=x;x=0;if(S&1){P=48;break a};k[f>>2]=k[U>>2];k[f+4>>2]=k[U+4>>2];k[f+8>>2]=k[U+8>>2];k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;U=i[f>>0]|0;S=(U&1)==0;x=0;Fa(88,a|0,(S?G:k[F>>2]|0)|0,(S?(U&255)>>>1:k[H>>2]|0)|0)|0;U=x;x=0;if(U&1){P=49;break a}K2a(f);K2a(g)}while(0);e:do if((P|0)==51){P=0;n=k[w>>2]|0;U=k[y>>2]|0;f:do if((n|0)!=(U|0)){S=i[e>>0]|0;_=(S&1)==0;V=_?(S&255)>>>1:k[u>>2]|0;S=_?B:k[t>>2]|0;g:do if(!V){_=n;while(1){$=k[(k[_>>2]|0)+24>>2]|0;aa=i[$>>0]|0;if(!(((aa&1)==0?(aa&255)>>>1:k[$+4>>2]|0)|0))break g;_=_+4|0;if((_|0)==(U|0))break f}}else{_=n;while(1){$=k[(k[_>>2]|0)+24>>2]|0;aa=i[$>>0]|0;O=(aa&1)==0;ca=(aa&255)>>>1;h:do if(((O?ca:k[$+4>>2]|0)|0)==(V|0)){if(!O)if(!(ZLa(k[$+8>>2]|0,S,V)|0))break g;else break;aa=ca;da=$+1|0;ea=S;while(1){if((i[da>>0]|0)!=(i[ea>>0]|0))break h;aa=aa+-1|0;if(!aa)break g;else{da=da+1|0;ea=ea+1|0}}}while(0);_=_+4|0;if((_|0)==(U|0))break f}}while(0);k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;nb(83,j|0,279178,15,V+15|0);S=x;x=0;if(S&1){P=64;break a}x=0;Fa(88,j|0,((i[e>>0]&1)==0?B:k[t>>2]|0)|0,V|0)|0;S=x;x=0;if(S&1){P=64;break a}x=0;S=Ta(484,j|0,300015)|0;_=x;x=0;if(_&1){P=68;break a};k[h>>2]=k[S>>2];k[h+4>>2]=k[S+4>>2];k[h+8>>2]=k[S+8>>2];k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;S=i[h>>0]|0;_=(S&1)==0;x=0;Fa(88,a|0,(_?D:k[C>>2]|0)|0,(_?(S&255)>>>1:k[E>>2]|0)|0)|0;S=x;x=0;if(S&1){P=69;break a}K2a(h);K2a(j);break e}while(0);U=i[a>>0]|0;if(!(U&1)){fa=(U&255)>>>1;ga=10;ha=U}else{U=k[a>>2]|0;fa=k[z>>2]|0;ga=(U&-2)+-1|0;ha=U&255}U=T-o|0;if((X|0)!=(J|0)){if((ga-fa|0)>>>0>>0){x=0;Pa(42,a|0,ga|0,fa+U-ga|0,fa|0,fa|0,0,0);n=x;x=0;if(n&1){P=46;break a}ia=i[a>>0]|0}else ia=ha;if(!(ia&1))ja=b;else ja=k[A>>2]|0;n=J;m=o;S=ja+fa|0;while(1){i[S>>0]=i[n>>0]|0;_=S+1|0;$=m+1|0;if(($|0)==(X|0)){ka=_;break}else{n=$;m=$;S=_}}i[ka>>0]=0;S=fa+U|0;if(!(i[a>>0]&1)){i[a>>0]=S<<1;break}else{k[z>>2]=S;break}}}while(0);K2a(e);I=i[c>>0]|0;l=X}if((P|0)==20){X=Hc()|0;la=M;ma=X;K2a(a);Sc(ma|0)}else if((P|0)==42){X=Hc()|0;l=M;K2a(g);na=l;oa=X;P=47}else if((P|0)==46){X=Hc()|0;na=M;oa=X;P=47}else if((P|0)==48){X=Hc()|0;pa=M;qa=X;P=50}else if((P|0)==49){X=Hc()|0;l=M;K2a(f);pa=l;qa=X;P=50}else if((P|0)==64){X=Hc()|0;l=M;K2a(j);na=l;oa=X;P=47}else if((P|0)==68){X=Hc()|0;ra=M;sa=X;P=70}else if((P|0)==69){X=Hc()|0;l=M;K2a(h);ra=l;sa=X;P=70}else if((P|0)==87){r=d;return}if((P|0)==47){ta=na;ua=oa}else if((P|0)==50){K2a(g);ta=pa;ua=qa}else if((P|0)==70){K2a(j);ta=ra;ua=sa}K2a(e);la=ta;ma=ua;K2a(a);Sc(ma|0)}function ooa(){k[10784]=0;k[10785]=0;k[10786]=0;return}function poa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>4)+1|0;if(e>>>0>268435455){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>4>>>0<134217727){h=g>>3;g=h>>>0>>0?e:h;h=(k[c>>2]|0)-f>>4;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=268435455;n=(k[c>>2]|0)-f>>4;o=6}if((o|0)==6){i=m;j=KBa(m<<4)|0;l=n}n=j+(l<<4)|0;m=n;o=j+(i<<4)|0;k[n>>2]=k[b>>2];k[n+4>>2]=k[b+4>>2];k[n+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[j+(l<<4)+12>>2]=k[b+12>>2];b=n+16|0;l=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(l|0)){p=m;q=l;r=l}else{i=j;j=n;n=m;while(1){m=j+-16|0;f=i;i=i+-16|0;k[m>>2]=k[i>>2];k[m+4>>2]=k[i+4>>2];k[m+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[j+-4>>2]=k[f+-4>>2];j=n+-16|0;f=j;if((i|0)==(l|0)){s=f;break}else n=f}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{d=d+-16|0;K2a(d)}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function qoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=42768;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(359,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=7408;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function roa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=42804;j=e+-4|0;k[j>>2]=42832;a=e+16|0;k[a>>2]=42856;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=42728;k[f>>2]=42692;k[h>>2]=42752;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1519,f|0);x=0;d=Hc()|0;k[e>>2]=42804;k[j>>2]=42832;k[a>>2]=42856;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function soa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=b+4|0;b=k[d>>2]|0;a:do if(!b)e=d;else{f=i[c>>0]|0;g=(f&1)==0;h=g?(f&255)>>>1:k[c+4>>2]|0;f=g?c+1|0:k[c+8>>2]|0;g=d;j=b;b:while(1){l=j;while(1){m=l+16|0;n=i[m>>0]|0;o=(n&1)==0;p=o?(n&255)>>>1:k[l+20>>2]|0;n=o?m+1|0:k[l+24>>2]|0;m=p>>>0>>0;o=ZLa(f,n,m?p:h)|0;q=h>>>0

      >>0;if((((o|0)==0?(q?-2147483648:0):o)|0)<0){r=l;break}o=ZLa(n,f,q?h:p)|0;if((((o|0)==0?(m?-2147483648:0):o)|0)>=0){s=g;t=l;break b}l=k[l+4>>2]|0;if(!l){e=g;break a}}j=k[r>>2]|0;if(!j){e=r;break a}else g=r}g=k[t>>2]|0;c:do if(!g)u=t;else{j=t;l=g;while(1){o=l;while(1){m=o+16|0;p=i[m>>0]|0;q=(p&1)==0;n=q?(p&255)>>>1:k[o+20>>2]|0;p=ZLa(q?m+1|0:k[o+24>>2]|0,f,h>>>0>>0?h:n)|0;if((((p|0)==0?(n>>>0>>0?-2147483648:0):p)|0)>=0){v=o;break}o=k[o+4>>2]|0;if(!o){u=j;break c}}l=k[v>>2]|0;if(!l){u=v;break}else j=v}}while(0);g=u;j=k[t+4>>2]|0;d:do if(!j)w=s;else{l=s;o=j;while(1){p=o;while(1){n=p+16|0;m=i[n>>0]|0;q=(m&1)==0;x=q?(m&255)>>>1:k[p+20>>2]|0;m=ZLa(f,q?n+1|0:k[p+24>>2]|0,x>>>0>>0?x:h)|0;if((((m|0)==0?(h>>>0>>0?-2147483648:0):m)|0)<0){y=p;break}p=k[p+4>>2]|0;if(!p){w=l;break d}}o=k[y>>2]|0;if(!o){w=y;break}else l=y}}while(0);k[a>>2]=g;k[a+4>>2]=w;return}while(0);w=e;k[a>>2]=w;k[a+4>>2]=w;return}function toa(a,b){a=a|0;b=b|0;if(!b)return;else{toa(a,k[b>>2]|0);toa(a,k[b+4>>2]|0);K2a(b+16|0);OBa(b);return}}function uoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=Boa(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(32)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}k[f+28>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function voa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+160|0;d=c+136|0;e=c;f=e+56|0;g=e+4|0;k[e>>2]=20356;k[f>>2]=20376;x=0;xa(582,e+56|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;mab(f);Sc(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,g|0);h=x;x=0;do if(!(h&1)){k[g>>2]=20392;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,g|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);K2a(l);obb(g);o=n;p=m;break}K2a(d);x=0;Ta(541,e|0,b|0)|0;m=x;x=0;if(m&1){q=Hc()|0;s=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);Sc(q|0)}x=0;xa(584,a|0,g|0);m=x;x=0;if(m&1){q=Hc()|0;s=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);Sc(q|0)}else{k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);r=c;return}}else{l=Hc()|0;o=M;p=l}while(0);i=o;j=p;mab(f);Sc(j|0)}function woa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,(g|0)>=(h|0)):0){if((h|0)>=(g|0)){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?(g|0)>=(k[o+16>>2]|0):0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if((g|0)<(m|0)){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if((m|0)>=(g|0)){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>=(o|0)){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if((o|0)<(d|0)){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if((d|0)>=(o|0)){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function xoa(a,b){a=a|0;b=b|0;if(!b)return;else{xoa(a,k[b>>2]|0);xoa(a,k[b+4>>2]|0);OBa(b);return}}function yoa(a,b){a=a|0;b=b|0;return 1}function zoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;b=r;r=r+16|0;c=b;q2a(c,300015,1);d=i[c>>0]|0;e=(d&1)==0;x=0;Fa(88,(k[a+44>>2]|0)+-16|0,(e?c+1|0:k[c+8>>2]|0)|0,(e?(d&255)>>>1:k[c+4>>2]|0)|0)|0;d=x;x=0;if(d&1){d=Hc()|0;K2a(c);Sc(d|0)}else{K2a(c);r=b;return}}function Aoa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;q2a(d,279194,43);x=0;fb(357,a|0,b|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}else{K2a(d);r=c;return 0}return 0}function Boa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function Coa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=42804;h=g+-4|0;k[h>>2]=42832;n=g+16|0;k[n>>2]=42856;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=42728;k[c>>2]=42692;k[f>>2]=42752;x=0;xa(865,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,7432,971);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=42804;k[h>>2]=42832;k[n>>2]=42856;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function Doa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=42900;h=g+-4|0;k[h>>2]=42928;i=g+16|0;k[i>>2]=42952;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=43036;k[a>>2]=42992;k[a+20>>2]=43060;k[a+40>>2]=43088;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=42900;k[h>>2]=42928;k[i>>2]=42952;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Eoa(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=42900;k[b+-4>>2]=42928;k[b+16>>2]=42952;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Foa(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=42900;k[b+-4>>2]=42928;k[b+16>>2]=42952;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Goa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(360,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function Hoa(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(866,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,7432,971)}function Ioa(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=42900;k[a+-4>>2]=42928;k[a+16>>2]=42952;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Joa(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=42900;k[a+-4>>2]=42928;k[a+16>>2]=42952;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Koa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(360,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function Loa(a){a=a|0;Hoa(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Moa(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=42900;k[a+-4>>2]=42928;k[a+16>>2]=42952;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function Noa(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=42900;k[a+-4>>2]=42928;k[a+16>>2]=42952;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function Ooa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=42900;h=g+-4|0;k[h>>2]=42928;i=g+16|0;k[i>>2]=42952;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=43036;k[a>>2]=42992;k[a+20>>2]=43060;k[a+40>>2]=43088;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=42900;k[h>>2]=42928;k[i>>2]=42952;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function Poa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=42900;k[h+-4>>2]=42928;k[h+16>>2]=42952;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=43036;k[a>>2]=42992;k[d>>2]=43060;k[a+40>>2]=43088;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function Qoa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;x=0;a=Ba(563,16)|0;d=x;x=0;if(d&1){d=Hc(0)|0;me(d|0)|0;if(b)Sf[k[(k[b>>2]|0)+8>>2]&2047](b);x=0;hb(46);x=0;d=Hc()|0;x=0;hb(45);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}k[a+4>>2]=1;k[a+8>>2]=1;k[a>>2]=43112;k[a+12>>2]=b;b=k[c>>2]|0;k[c>>2]=a;if(!b)return;a=b+4|0;c=k[a>>2]|0;k[a>>2]=c+-1;if((c|0)!=1)return;x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);c=x;x=0;if(c&1){f=Hc(0)|0;g=M;Fg(f)}c=b+8|0;a=k[c>>2]|0;k[c>>2]=a+-1;if((a|0)!=1)return;x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){f=Hc(0)|0;g=M;Fg(f)}else return}function Roa(a){a=a|0;OBa(a);return}function Soa(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Sf[k[(k[b>>2]|0)+8>>2]&2047](b);return}function Toa(a,b){a=a|0;b=b|0;return 0}function Uoa(a){a=a|0;return 0}function Voa(a,b){a=a|0;b=b|0;Yoa(a,b);return}function Woa(a){a=a|0;k[a>>2]=42768;K2a(a+4|0);return}function Xoa(a){a=a|0;k[a>>2]=42768;K2a(a+4|0);OBa(a);return}function Yoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+80|0;d=c+64|0;e=c+60|0;f=c+48|0;g=c+36|0;h=c+24|0;j=c+12|0;l=c;q2a(j,279604,38);k[e>>2]=(i[j>>0]&1)==0?j+1|0:k[j+8>>2]|0;x=0;k[d>>2]=k[e>>2];Fa(91,j|0,d|0,91)|0;d=x;x=0;if(d&1){d=Hc()|0;m=M;n=d;K2a(j);Sc(n|0)};k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;d=Ta(484,h|0,279643)|0;e=x;x=0;if(e&1){e=Hc()|0;o=M;p=e}else{k[g>>2]=k[d>>2];k[g+4>>2]=k[d+4>>2];k[g+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(610,l|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;q=M;s=b}else{b=i[l>>0]|0;d=(b&1)==0;x=0;e=Fa(88,g|0,(d?l+1|0:k[l+8>>2]|0)|0,(d?(b&255)>>>1:k[l+4>>2]|0)|0)|0;b=x;x=0;do if(!(b&1)){k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(605,f|0,10);d=x;x=0;if(d&1){d=Hc()|0;t=M;K2a(f);u=t;v=d;break}else{k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);K2a(l);K2a(g);K2a(h);K2a(j);r=c;return}}else{d=Hc()|0;u=M;v=d}while(0);K2a(l);q=u;s=v}K2a(g);o=q;p=s}K2a(h);m=o;n=p;K2a(j);Sc(n|0)}function Zoa(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=42804;k[b+-4>>2]=42832;k[b+16>>2]=42856;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function _oa(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=42804;k[b+-4>>2]=42832;k[b+16>>2]=42856;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function $oa(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=42804;k[a+-4>>2]=42832;k[a+16>>2]=42856;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function apa(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=42804;k[a+-4>>2]=42832;k[a+16>>2]=42856;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function bpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+16|0;d=k[c>>2]|0;do if(d)if((d|0)==(b|0)){k[a+16>>2]=a;e=k[c>>2]|0;Tf[k[(k[e>>2]|0)+12>>2]&2047](e,a);break}else{e=Vf[k[(k[d>>2]|0)+8>>2]&1023](d)|0;k[a+16>>2]=e;break}else k[a+16>>2]=0;while(0);d=a+24|0;k[a+44>>2]=0;k[a+48>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;i[d+12>>0]=0;k[a+40>>2]=a+44;d=a+52|0;k[a+76>>2]=0;k[a+80>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[a+72>>2]=a+76;d=a+84|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;return}function cpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0;c=r;r=r+96|0;d=c+72|0;e=c+36|0;f=c+24|0;g=c+12|0;h=c;k[d>>2]=0;j=d+4|0;k[j>>2]=0;k[d+8>>2]=0;l=k[b>>2]|0;m=k[b+4>>2]|0;do if((l|0)==(m|0)){n=j;o=d+8|0;p=d;q=0;s=0;t=0}else{b=e+1|0;u=e+12|0;v=g+8|0;w=g+4|0;y=g+1|0;z=u+1|0;A=h+8|0;B=h+4|0;C=e+24|0;D=C+1|0;E=d+8|0;F=e+32|0;G=e+28|0;H=h+1|0;I=e+20|0;J=e+16|0;K=e+8|0;L=e+4|0;N=f+8|0;O=f+4|0;P=f+1|0;Q=l;a:while(1){R=i[Q>>0]|0;S=(R&1)==0;if(S){T=Q+1|0;U=(R&255)>>>1;V=Q+1|0}else{W=k[Q+8>>2]|0;T=W;U=k[Q+4>>2]|0;V=W}W=T+U|0;b:do if((V|0)==(W|0))X=V;else{Y=V;while(1){if((i[Y>>0]|0)==61){X=Y;break b}Y=Y+1|0;if((Y|0)==(W|0)){X=W;break}}}while(0);W=X;if(S){Z=Q+1|0;_=(R&255)>>>1}else{Z=k[Q+8>>2]|0;_=k[Q+4>>2]|0}if((X|0)!=(Z+_|0)){if(S)$=Q+1|0;else $=k[Q+8>>2]|0;c:do if(($|0)!=(X|0)){Y=$;while(1){if((i[Y>>0]|0)==58){aa=Y;break}Y=Y+1|0;if((Y|0)==(X|0)){ba=27;break c}}Y=aa;ca=e;da=ca+36|0;do{k[ca>>2]=0;ca=ca+4|0}while((ca|0)<(da|0));ea=(aa|0)==(X|0);if(!ea){if(!(i[Q>>0]&1))fa=Q+1|0;else fa=k[Q+8>>2]|0;ga=fa;ha=Y-ga|0;if(ha>>>0>4294967279){x=0;va(1471,f|0);ia=x;x=0;if(ia&1){ba=100;break a}else ba=37}else if(ha>>>0<11){i[f>>0]=ha<<1;ja=P}else ba=37;if((ba|0)==37){ba=0;ia=ha+16&-16;x=0;ka=Ba(563,ia|0)|0;la=x;x=0;if(la&1){ba=100;break a}k[N>>2]=ka;k[f>>2]=ia|1;k[O>>2]=ha;ja=ka}if((fa|0)==(aa|0))ma=ja;else{ka=fa;ha=ga;ga=ja;while(1){i[ga>>0]=i[ka>>0]|0;ia=ha+1|0;la=ga+1|0;if((ia|0)==(aa|0)){ma=la;break}else{ka=ia;ha=ia;ga=la}}}i[ma>>0]=0;if(!(i[e>>0]&1)){na=aa;oa=ea;ba=43}else{i[k[K>>2]>>0]=0;k[L>>2]=0;pa=aa;qa=ea}}else{ra=aa;ba=29}}else ba=27;while(0);if((ba|0)==27){ba=0;ca=e;da=ca+36|0;do{k[ca>>2]=0;ca=ca+4|0}while((ca|0)<(da|0));ra=X;ba=29}if((ba|0)==29){ba=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;na=ra;oa=1;ba=43}if((ba|0)==43){ba=0;i[b>>0]=0;i[e>>0]=0;pa=na;qa=oa}x=0;xa(603,e|0,0);S=x;x=0;if(S&1){ba=45;break};k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);if(qa){if(!(i[Q>>0]&1))sa=Q+1|0;else sa=k[Q+8>>2]|0;S=sa;R=W-S|0;if(R>>>0>4294967279){x=0;va(1471,g|0);ga=x;x=0;if(ga&1){ba=100;break}else ba=54}else if(R>>>0<11){i[g>>0]=R<<1;ta=y}else ba=54;if((ba|0)==54){ba=0;ga=R+16&-16;x=0;ha=Ba(563,ga|0)|0;ka=x;x=0;if(ka&1){ba=100;break}k[v>>2]=ha;k[g>>2]=ga|1;k[w>>2]=R;ta=ha}if((sa|0)==(X|0))ua=ta;else{ha=sa;R=S;S=ta;while(1){i[S>>0]=i[ha>>0]|0;ga=R+1|0;ka=S+1|0;if((ga|0)==(X|0)){ua=ka;break}else{ha=ga;R=ga;S=ka}}}i[ua>>0]=0}else{S=pa+1|0;R=S;ha=W-R|0;if(ha>>>0>4294967279){x=0;va(1471,g|0);ka=x;x=0;if(ka&1){ba=100;break}else ba=63}else if(ha>>>0<11){i[g>>0]=ha<<1;wa=y}else ba=63;if((ba|0)==63){ba=0;ka=ha+16&-16;x=0;ga=Ba(563,ka|0)|0;Y=x;x=0;if(Y&1){ba=100;break}k[v>>2]=ga;k[g>>2]=ka|1;k[w>>2]=ha;wa=ga}if((S|0)==(X|0))ya=wa;else{ga=S;S=R;R=wa;while(1){i[R>>0]=i[ga>>0]|0;ha=S+1|0;ka=R+1|0;if((ha|0)==(X|0)){ya=ka;break}else{ga=ha;S=ha;R=ka}}}i[ya>>0]=0}if(!(i[u>>0]&1)){i[z>>0]=0;i[u>>0]=0}else{i[k[I>>2]>>0]=0;k[J>>2]=0}x=0;xa(603,u|0,0);R=x;x=0;if(R&1){ba=72;break};k[u>>2]=k[g>>2];k[u+4>>2]=k[g+4>>2];k[u+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);R=X+1|0;S=i[Q>>0]|0;if(!(S&1)){za=Q+1|0;Aa=(S&255)>>>1}else{za=k[Q+8>>2]|0;Aa=k[Q+4>>2]|0}S=za+Aa|0;ga=R;W=S-ga|0;if(W>>>0>4294967279){x=0;va(1471,h|0);ka=x;x=0;if(ka&1){ba=100;break}else ba=80}else if(W>>>0<11){i[h>>0]=W<<1;Ca=H}else ba=80;if((ba|0)==80){ba=0;ka=W+16&-16;x=0;ha=Ba(563,ka|0)|0;Y=x;x=0;if(Y&1){ba=100;break}k[A>>2]=ha;k[h>>2]=ka|1;k[B>>2]=W;Ca=ha}if((R|0)==(S|0))Da=Ca;else{ha=R;R=ga;ga=Ca;while(1){i[ga>>0]=i[ha>>0]|0;W=R+1|0;ka=ga+1|0;if((W|0)==(S|0)){Da=ka;break}else{ha=W;R=W;ga=ka}}}i[Da>>0]=0;if(!(i[C>>0]&1)){i[D>>0]=0;i[C>>0]=0}else{i[k[F>>2]>>0]=0;k[G>>2]=0}x=0;xa(603,C|0,0);ga=x;x=0;if(ga&1){ba=88;break};k[C>>2]=k[h>>2];k[C+4>>2]=k[h+4>>2];k[C+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;K2a(h);ga=k[j>>2]|0;if((ga|0)==(k[E>>2]|0)){x=0;xa(867,d|0,e|0);R=x;x=0;if(R&1){ba=100;break}}else{x=0;xa(604,ga|0,e|0);R=x;x=0;if(R&1){ba=100;break}R=ga+12|0;x=0;xa(604,R|0,u|0);ha=x;x=0;if(ha&1){Ea=ga;ba=93;break}x=0;xa(604,ga+24|0,C|0);ha=x;x=0;if(ha&1){Fa=ga;Ga=R;ba=94;break}k[j>>2]=(k[j>>2]|0)+36}K2a(C);K2a(u);K2a(e)}Q=Q+12|0;if((Q|0)==(m|0)){ba=4;break}}if((ba|0)==4){n=j;o=E;p=d;q=k[d>>2]|0;s=k[j>>2]|0;t=k[E>>2]|0;break}else if((ba|0)==45){Q=Hc(0)|0;Fg(Q)}else if((ba|0)==72){Q=Hc(0)|0;Fg(Q)}else if((ba|0)==88){Q=Hc(0)|0;Fg(Q)}else if((ba|0)==93){Q=Hc()|0;Ha=M;Ia=Q;Ja=Ea;ba=95}else if((ba|0)==94){Q=Hc()|0;G=M;K2a(Ga);Ha=G;Ia=Q;Ja=Fa;ba=95}else if((ba|0)==100){Q=Hc()|0;Ka=M;La=Q}if((ba|0)==95){K2a(Ja);Ka=Ha;La=Ia}K2a(C);K2a(u);K2a(e);Q=k[d>>2]|0;if(!Q)Sc(La|0);G=k[j>>2]|0;if((G|0)==(Q|0))Ma=Q;else{F=G;do{G=F+-36|0;k[j>>2]=G;K2a(F+-12|0);K2a(F+-24|0);K2a(G);F=k[j>>2]|0}while((F|0)!=(Q|0));Ma=k[d>>2]|0}OBa(Ma);Sc(La|0)}while(0);La=a+24|0;Ma=k[La>>2]|0;k[La>>2]=q;k[p>>2]=Ma;p=a+28|0;q=k[p>>2]|0;k[p>>2]=s;k[n>>2]=q;n=a+32|0;a=k[n>>2]|0;k[n>>2]=t;k[o>>2]=a;a=Ma;o=q;if(!Ma){r=c;return}if((o|0)==(a|0))Na=Ma;else{Ma=o;do{o=Ma+-36|0;k[j>>2]=o;K2a(Ma+-12|0);K2a(Ma+-24|0);K2a(o);Ma=k[j>>2]|0}while((Ma|0)!=(a|0));Na=k[d>>2]|0}OBa(Na);r=c;return}function dpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c;i[a+36>>0]=0;e=a+40|0;if(b){b=k[e>>2]|0;f=a+44|0;if((b|0)!=(f|0)){g=d+12|0;h=d+16|0;j=d+20|0;l=d+24|0;m=d+28|0;n=b;while(1){n2a(d,n+16|0);k[g>>2]=k[n+28>>2];b=k[n+32>>2]|0;k[h>>2]=b;if(b)h0a(b);k[j>>2]=k[n+36>>2];b=k[n+40>>2]|0;k[l>>2]=b;if(b)h0a(b);i[m>>0]=i[n+44>>0]|0;k[g>>2]=0;b=k[h>>2]|0;k[h>>2]=0;if(b)j0a(b);k[j>>2]=0;b=k[l>>2]|0;k[l>>2]=0;if((b|0)!=0?(j0a(b),b=k[l>>2]|0,(b|0)!=0):0)j0a(b);b=k[h>>2]|0;if(b)j0a(b);K2a(d);b=k[n+4>>2]|0;if(!b){o=n;while(1){p=k[o+8>>2]|0;if((k[p>>2]|0)==(o|0)){q=p;break}else o=p}}else{o=b;while(1){p=k[o>>2]|0;if(!p){q=o;break}else o=p}}if((q|0)==(f|0))break;else n=q}}}else{q=a+44|0;Di(e,k[q>>2]|0);k[a+48>>2]=0;k[e>>2]=q;k[q>>2]=0}k[a+52>>2]=0;q=a+56|0;e=k[q>>2]|0;k[q>>2]=0;if(e)j0a(e);e=k[a+60>>2]|0;q=a+64|0;n=k[q>>2]|0;if((n|0)!=(e|0))k[q>>2]=n+(~((n+-4-e|0)>>>2)<<2);e=a+72|0;n=a+76|0;Ai(e,k[n>>2]|0);k[a+80>>2]=0;k[e>>2]=n;k[n>>2]=0;n=k[a+96>>2]|0;e=a+100|0;a=k[e>>2]|0;if((a|0)==(n|0)){r=c;return}else s=a;while(1){a=s+-8|0;k[e>>2]=a;q=k[s+-4>>2]|0;if(!q)t=a;else{j0a(q);t=k[e>>2]|0}if((t|0)==(n|0))break;else s=t}r=c;return}function epa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;e=r;r=r+16|0;f=e;g=a+40|0;h=k[a+44>>2]|0;a:do if(!h)j=0;else{l=i[b>>0]|0;m=(l&1)==0;n=m?(l&255)>>>1:k[b+4>>2]|0;l=m?b+1|0:k[b+8>>2]|0;m=h;while(1){o=m+16|0;p=i[o>>0]|0;q=(p&1)==0;s=q?(p&255)>>>1:k[m+20>>2]|0;p=q?o+1|0:k[m+24>>2]|0;o=s>>>0>>0;q=ZLa(l,p,o?s:n)|0;t=n>>>0>>0;if((((q|0)==0?(t?-2147483648:0):q)|0)<0)u=m;else{q=ZLa(p,l,t?n:s)|0;if((((q|0)==0?(o?-2147483648:0):q)|0)>=0){j=1;break a}u=m+4|0}m=k[u>>2]|0;if(!m){j=0;break}}}while(0);dpa(a,1);a=Rpa(g,b)|0;n2a(f,c);k[f+12>>2]=0;x=0;c=Ba(563,200)|0;u=x;x=0;if(u&1){u=Hc()|0;v=M;w=u;K2a(f);Sc(w|0)}k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=43156;u=c+12|0;x=0;fb(361,u|0,f|0,b|0);h=x;x=0;if(h&1){h=Hc()|0;m=M;c0a(c);OBa(c);v=m;w=h;K2a(f);Sc(w|0)}w=(j|0)!=0;k[a>>2]=u;u=a+4|0;a=k[u>>2]|0;k[u>>2]=c;if(!a){K2a(f);y=Rpa(g,b)|0;z=y+16|0;A=d&1;i[z>>0]=A;r=e;return w|0}j0a(a);K2a(f);y=Rpa(g,b)|0;z=y+16|0;A=d&1;i[z>>0]=A;r=e;return w|0}function fpa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;dpa(a,0);q2a(d,329672,0);x=0;db(56,a|0,d|0,b|0,0)|0;b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}else{K2a(d);r=c;return}}function gpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0;b=r;r=r+224|0;c=b+204|0;d=b+192|0;e=b+168|0;f=b+136|0;g=b+104|0;h=b+80|0;j=b+64|0;l=b+176|0;m=b+152|0;n=b+116|0;o=b+48|0;p=b+36|0;q=b+24|0;s=b+92|0;t=b+12|0;u=b;v=a+96|0;w=k[v>>2]|0;y=a+100|0;z=k[y>>2]|0;if((z|0)!=(w|0)){A=z;while(1){z=A+-8|0;k[y>>2]=z;B=k[A+-4>>2]|0;if(!B)C=z;else{j0a(B);C=k[y>>2]|0}if((C|0)==(w|0))break;else A=C}}C=a+36|0;i[C>>0]=0;k[c>>2]=0;A=c+4|0;k[A>>2]=0;k[c+8>>2]=0;w=a+40|0;B=k[w>>2]|0;z=a+44|0;do if((B|0)!=(z|0)){D=c+8|0;E=B;F=0;G=0;while(1){H=E+16|0;x=0;if((F|0)==(G|0)){Rx(c,H);I=x;x=0;if(I&1){J=11;break}}else{n2a(F,H);H=x;x=0;if(H&1){J=11;break}k[A>>2]=(k[A>>2]|0)+12}H=k[E+4>>2]|0;if(!H){I=E;while(1){K=k[I+8>>2]|0;if((k[K>>2]|0)==(I|0)){L=K;break}else I=K}}else{I=H;while(1){K=k[I>>2]|0;if(!K){L=I;break}else I=K}}if((L|0)==(z|0)){J=8;break}E=L;F=k[A>>2]|0;G=k[D>>2]|0}if((J|0)==8){D=k[c>>2]|0;N=c;O=A;P=k[A>>2]|0;Q=D;R=D;J=9;break}else if((J|0)==11){D=Hc()|0;S=D;T=M;break}}else{N=c;O=A;P=0;Q=0;R=0;J=9}while(0);if((J|0)==9){k[d+4>>2]=0;k[d+8>>2]=0;L=d+4|0;k[d>>2]=L;a:do if((P|0)==(Q|0))J=22;else{z=f+4|0;B=f+8|0;D=f+12|0;G=e+4|0;F=h+4|0;E=j+12|0;I=c+8|0;H=R;K=0;b:while(1){U=H+(K*12|0)|0;x=0;V=Ta(608,w|0,U|0)|0;W=x;x=0;if(W&1){J=48;break}x=0;va(1520,k[V>>2]|0);W=x;x=0;if(W&1){J=48;break}W=V+8|0;k[f>>2]=0;k[z>>2]=0;k[B>>2]=v;i[D>>0]=0;x=0;fb(362,e|0,f|0,V|0);X=x;x=0;if(X&1){J=51;break}X=k[e>>2]|0;Y=k[G>>2]|0;k[e>>2]=0;k[G>>2]=0;k[W>>2]=X;X=V+12|0;V=k[X>>2]|0;k[X>>2]=Y;if(V)j0a(V);V=k[G>>2]|0;if(V)j0a(V);V=k[z>>2]|0;if(V)j0a(V);V=k[W>>2]|0;x=0;Y=Ta(609,d|0,U|0)|0;X=x;x=0;if(X&1){J=48;break}k[Y>>2]=V;V=k[W>>2]|0;if(!V){Y=k[v>>2]|0;X=k[y>>2]|0;c:do if((Y|0)==(X|0))Z=0;else{_=Y;while(1){$=k[_>>2]|0;aa=k[_+4>>2]|0;if(!aa){if((k[$+4>>2]|0)!=6){Z=1;break c}}else{h0a(aa);ba=(k[$+4>>2]|0)==6;j0a(aa);if(!ba){Z=1;break c}}_=_+8|0;if((_|0)==(X|0)){Z=0;break}}}while(0);x=0;fb(140,g|0,279694,46);X=x;x=0;if(X&1){J=48;break}x=0;pa(57,Z|0,g|0,115,279741,279786);X=x;x=0;if(X&1){J=53;break}K2a(g)}else{x=0;X=Ba(k[(k[V>>2]|0)+16>>2]|0,V|0)|0;Y=x;x=0;if(Y&1){J=48;break}x=0;Ta(493,X+4|0,U|0)|0;X=x;x=0;if(X&1){J=48;break}x=0;nb(143,h|0,a|0,k[W>>2]|0,U|0);X=x;x=0;if(X&1){J=48;break}X=k[h>>2]|0;if((X|0)!=(F|0)){Y=X;while(1){X=Y+16|0;x=0;_=Ta(608,w|0,X|0)|0;ba=x;x=0;if(ba&1){J=59;break b}x=0;xa(604,j|0,Y+28|0);ba=x;x=0;if(ba&1){J=59;break b}k[E>>2]=0;x=0;ba=Ba(563,200)|0;aa=x;x=0;if(aa&1){J=76;break b}k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba>>2]=43156;aa=ba+12|0;x=0;fb(361,aa|0,j|0,X|0);$=x;x=0;if($&1){ca=ba;J=64;break b}k[_>>2]=aa;aa=_+4|0;_=k[aa>>2]|0;k[aa>>2]=ba;if(_)j0a(_);K2a(j);_=k[A>>2]|0;x=0;if((_|0)==(k[I>>2]|0)){Rx(c,X);ba=x;x=0;if(ba&1){J=59;break b}}else{n2a(_,X);X=x;x=0;if(X&1){J=59;break b}k[A>>2]=(k[A>>2]|0)+12}X=k[Y+4>>2]|0;if(!X){_=Y;while(1){ba=k[_+8>>2]|0;if((k[ba>>2]|0)==(_|0)){da=ba;break}else _=ba}}else{_=X;while(1){ba=k[_>>2]|0;if(!ba){da=_;break}else _=ba}}if((da|0)==(F|0))break;else Y=da}}xi(h,k[F>>2]|0)}K=K+1|0;H=k[N>>2]|0;if(K>>>0>=(((k[O>>2]|0)-H|0)/12|0)>>>0){J=22;break a}}if((J|0)==48){H=Hc()|0;ea=M;fa=H;J=50;break}else if((J|0)==51){H=Hc()|0;K=M;I=k[z>>2]|0;if(!I){ga=H;ha=K;break}j0a(I);ga=H;ha=K;break}else if((J|0)==53){K=Hc()|0;H=M;K2a(g);ga=K;ha=H;break}else if((J|0)==59){H=Hc()|0;ia=M;ja=H}else if((J|0)==64){H=Hc()|0;K=M;c0a(ca);OBa(ca);ka=K;la=H;J=77}else if((J|0)==76){H=Hc()|0;ka=M;la=H;J=77}if((J|0)==77){K2a(j);ia=ka;ja=la}xi(h,k[F>>2]|0);ga=ja;ha=ia}while(0);d:do if((J|0)==22){ia=k[v>>2]|0;ja=k[y>>2]|0;e:do if((ia|0)==(ja|0))J=80;else{h=ia;while(1){la=k[h>>2]|0;ka=k[h+4>>2]|0;if(!ka){if((k[la+4>>2]|0)!=6){ma=0;break e}}else{h0a(ka);j=(k[la+4>>2]|0)==6;j0a(ka);if(!j){ma=0;break e}}h=h+8|0;if((h|0)==(ja|0)){J=80;break}}}while(0);do if((J|0)==80){x=0;va(1521,a|0);ja=x;x=0;if(!(ja&1)){k[l>>2]=34684;k[l+4>>2]=v;i[l+8>>0]=0;i[l+9>>0]=0;k[l+12>>2]=0;ja=a+60|0;ia=k[ja>>2]|0;F=a+64|0;z=k[F>>2]|0;do if((ia|0)!=(z|0)){h=ia;j=1;while(1){x=0;ka=Ta(610,l|0,k[(k[h>>2]|0)+8>>2]|0)|0;la=x;x=0;if(la&1){J=47;break}la=j&ka;h=h+4|0;if((h|0)==(z|0)){na=la;J=82;break}else j=la}if((J|0)==47){j=Hc()|0;ea=M;fa=j;J=50;break d}else if((J|0)==82){oa=k[ja>>2]|0;qa=k[F>>2]|0;ra=na;break}}else{oa=ia;qa=ia;ra=1}while(0);k[m>>2]=32292;i[m+4>>0]=0;k[m+8>>2]=v;f:do if((oa|0)==(qa|0))sa=ra;else{ia=oa;z=ra;while(1){x=0;j=Ta(611,m|0,k[(k[ia>>2]|0)+8>>2]|0)|0;h=x;x=0;if(h&1)break;h=z&j;ia=ia+4|0;if((ia|0)==(qa|0)){sa=h;break f}else z=h}z=Hc()|0;ea=M;fa=z;J=50;break d}while(0);z=a+52|0;x=0;ia=Ba(563,52)|0;h=x;x=0;if(!(h&1)){k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia>>2]=43184;h=ia+12|0;x=0;va(1522,h|0);j=x;x=0;if(j&1){j=Hc()|0;la=M;c0a(ia);OBa(ia);ea=la;fa=j;J=50;break d}k[z>>2]=h;j=a+56|0;la=k[j>>2]|0;k[j>>2]=ia;if(!la){ta=z;ua=h}else{j0a(la);ta=z;ua=k[z>>2]|0}x=0;xa(868,o|0,ua|0);z=x;x=0;if(!(z&1)){x=0;fb(363,n|0,o|0,v|0);z=x;x=0;if(z&1){z=Hc()|0;la=M;h=k[o>>2]|0;if(!h){ga=z;ha=la;break d}ia=o+4|0;j=k[ia>>2]|0;if((j|0)!=(h|0))k[ia>>2]=j+(~((j+-4-h|0)>>>2)<<2);OBa(h);ga=z;ha=la;break d}la=k[o>>2]|0;z=la;if(la){h=o+4|0;j=k[h>>2]|0;if((j|0)!=(la|0))k[h>>2]=j+(~((j+-4-z|0)>>>2)<<2);OBa(la)}la=k[ja>>2]|0;z=k[F>>2]|0;g:do if((la|0)!=(z|0)){j=la;do{x=0;h=Ta(612,n|0,k[(k[j>>2]|0)+8>>2]|0)|0;ia=x;x=0;if(ia&1){J=111;break}j=j+4|0;if(!h){wa=0;J=193;break g}}while((j|0)!=(z|0));if((J|0)==111){j=Hc()|0;ya=j;za=M;J=113;break}j=k[ja>>2]|0;h=k[F>>2]|0;if((j|0)!=(h|0)){ia=j;do{x=0;j=Fa(144,n|0,k[(k[ia>>2]|0)+8>>2]|0,d|0)|0;ka=x;x=0;if(ka&1){J=110;break}ia=ia+4|0;if(!j){wa=0;J=193;break g}}while((ia|0)!=(h|0));if((J|0)==110){h=Hc()|0;ya=h;za=M;J=113;break}h=k[ja>>2]|0;ia=k[F>>2]|0;if((h|0)==(ia|0)){J=153;break}j=p+4|0;ka=a+72|0;ca=h;h:while(1){x=0;xa(869,p|0,(k[(k[ca>>2]|0)+8>>2]|0)+24|0);h=x;x=0;if(h&1){J=109;break}h=k[p>>2]|0;g=k[j>>2]|0;if((h|0)==(g|0)){Aa=19;Ca=h}else{O=h;i:while(1){h=k[O>>2]|0;do if(h){N=iDa(h,5224,5312,0)|0;if(!N)break;x=0;xa(870,k[ta>>2]|0,N|0);da=x;x=0;if(da&1)break h;x=0;da=Ba(609,k[ta>>2]|0)|0;w=x;x=0;if(w&1)break h;x=0;w=Ta(613,n|0,da|0)|0;da=x;x=0;if(da&1)break h;if(!w){Da=1;break i}x=0;w=Ba(610,k[ta>>2]|0)|0;da=x;x=0;if(da&1)break h;x=0;da=Ta(613,n|0,w|0)|0;w=x;x=0;if(w&1)break h;if(!da){Da=1;break i}x=0;da=Ta(614,n|0,N|0)|0;w=x;x=0;if(w&1)break h;if(!da){Da=1;break i}x=0;da=Ta(615,ka|0,k[N+24>>2]|0)|0;w=x;x=0;if(w&1)break h;k[da>>2]=N}while(0);O=O+8|0;if((O|0)==(g|0)){Da=19;break}}Aa=Da;Ca=k[p>>2]|0}if(Ca){g=k[j>>2]|0;if((g|0)==(Ca|0))Ea=Ca;else{O=g;while(1){g=O+-8|0;k[j>>2]=g;h=k[O+-4>>2]|0;if(!h)Ga=g;else{j0a(h);Ga=k[j>>2]|0}if((Ga|0)==(Ca|0))break;else O=Ga}Ea=k[p>>2]|0}OBa(Ea)}ca=ca+4|0;if((Aa|0)!=19){wa=0;J=193;break g}if((ca|0)==(ia|0)){J=153;break g}}if((J|0)==109){ia=Hc()|0;ya=ia;za=M;J=113;break}ia=Hc()|0;ca=M;ka=k[p>>2]|0;if(!ka){Ha=ia;Ia=ca;break}O=k[j>>2]|0;if((O|0)==(ka|0))Ja=ka;else{h=O;while(1){O=h+-8|0;k[j>>2]=O;g=k[h+-4>>2]|0;if(!g)Ka=O;else{j0a(g);Ka=k[j>>2]|0}if((Ka|0)==(ka|0))break;else h=Ka}Ja=k[p>>2]|0}OBa(Ja);Ha=ia;Ia=ca}else J=153}else J=153;while(0);j:do if((J|0)==153){x=0;z=Ba(611,a|0)|0;la=x;x=0;if(la&1){la=Hc()|0;ya=la;za=M;J=113;break}la=sa&z;z=k[ja>>2]|0;h=k[F>>2]|0;k:do if((z|0)==(h|0))La=la;else{ka=q+4|0;j=s+4|0;g=s+8|0;O=a+72|0;N=z;da=la;l:while(1){x=0;xa(869,q|0,(k[(k[N>>2]|0)+8>>2]|0)+24|0);w=x;x=0;if(w&1){J=108;break}w=k[q>>2]|0;Z=k[ka>>2]|0;if((w|0)==(Z|0)){Ma=w;Na=da}else{e=w;w=da;while(1){f=k[e>>2]|0;do if(!f)Oa=w;else{R=iDa(f,5224,5312,0)|0;if(!R){Oa=w;break}x=0;xa(870,k[ta>>2]|0,R|0);Q=x;x=0;if(Q&1){J=180;break l}x=0;Q=Ba(609,k[ta>>2]|0)|0;P=x;x=0;if(P&1){J=180;break l}x=0;Ta(613,n|0,Q|0)|0;Q=x;x=0;if(Q&1){J=180;break l}k[s>>2]=30880;k[j>>2]=0;k[g>>2]=v;x=0;Q=Ta(616,s|0,R|0)|0;P=x;x=0;if(P&1){J=180;break l}if(Q){x=0;xa(871,t|0,R|0);Q=x;x=0;if(Q&1){J=180;break l}x=0;xa(872,R|0,t|0);Q=x;x=0;if(Q&1){J=181;break l}K2a(t);x=0;xa(873,u|0,R|0);Q=x;x=0;if(Q&1){J=180;break l}x=0;xa(874,R|0,u|0);Q=x;x=0;if(Q&1){J=182;break l}K2a(u);Pa=w}else Pa=0;x=0;Q=Ta(615,O|0,k[R+24>>2]|0)|0;P=x;x=0;if(P&1){J=180;break l}k[Q>>2]=R;Oa=Pa}while(0);e=e+8|0;if((e|0)==(Z|0)){Qa=Oa;break}else w=Oa}Ma=k[q>>2]|0;Na=Qa}if(Ma){w=k[ka>>2]|0;if((w|0)==(Ma|0))Ra=Ma;else{Z=w;while(1){w=Z+-8|0;k[ka>>2]=w;e=k[Z+-4>>2]|0;if(!e)Sa=w;else{j0a(e);Sa=k[ka>>2]|0}if((Sa|0)==(Ma|0))break;else Z=Sa}Ra=k[q>>2]|0}OBa(Ra)}N=N+4|0;if((N|0)==(h|0)){La=Na;break k}else da=Na}if((J|0)==108){da=Hc()|0;ya=da;za=M;J=113;break j}else if((J|0)==180){da=Hc()|0;Ua=da;Va=M}else if((J|0)==181){da=Hc()|0;N=M;K2a(t);Ua=da;Va=N}else if((J|0)==182){N=Hc()|0;da=M;K2a(u);Ua=N;Va=da}da=k[q>>2]|0;if(!da){Ha=Ua;Ia=Va;break j}N=k[ka>>2]|0;if((N|0)==(da|0))Wa=da;else{O=N;while(1){N=O+-8|0;k[ka>>2]=N;g=k[O+-4>>2]|0;if(!g)Xa=N;else{j0a(g);Xa=k[ka>>2]|0}if((Xa|0)==(da|0))break;else O=Xa}Wa=k[q>>2]|0}OBa(Wa);Ha=Ua;Ia=Va;break j}while(0);i[C>>0]=La&1;wa=La;J=193}while(0);if((J|0)==113){Ha=ya;Ia=za}else if((J|0)==193){R$(n,k[n+4>>2]|0);ma=wa;break}R$(n,k[n+4>>2]|0);ga=Ha;ha=Ia;break d}}}F=Hc()|0;ea=M;fa=F;J=50;break d}while(0);Vpa(d,k[L>>2]|0);F=k[c>>2]|0;if(!F){r=b;return ma|0}ja=k[A>>2]|0;if((ja|0)==(F|0))Ya=F;else{h=ja;do{ja=h+-12|0;k[A>>2]=ja;K2a(ja);h=k[A>>2]|0}while((h|0)!=(F|0));Ya=k[c>>2]|0}OBa(Ya);r=b;return ma|0}while(0);if((J|0)==50){ga=fa;ha=ea}Vpa(d,k[L>>2]|0);S=ga;T=ha}ha=k[c>>2]|0;if(!ha)Sc(S|0);T=k[A>>2]|0;if((T|0)==(ha|0))Za=ha;else{ga=T;do{T=ga+-12|0;k[A>>2]=T;K2a(T);ga=k[A>>2]|0}while((ga|0)!=(ha|0));Za=k[c>>2]|0}OBa(Za);Sc(S|0);return 0}function hpa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0;e=r;r=r+160|0;f=e+136|0;g=e+148|0;h=e+104|0;j=e+120|0;l=e+88|0;m=e+64|0;n=e+48|0;o=e+32|0;p=e+20|0;q=e+8|0;s=e;k[a+4>>2]=0;k[a+8>>2]=0;t=a+4|0;k[a>>2]=t;x=0;xa(869,f|0,c+24|0);c=x;x=0;if(c&1){c=Hc()|0;u=c;v=M;w=t;y=k[w>>2]|0;xi(a,y);Sc(u|0)}c=k[f>>2]|0;z=f+4|0;A=k[z>>2]|0;a:do if((c|0)==(A|0))B=c;else{C=g+1|0;D=b+44|0;E=j+4|0;F=b+16|0;G=m+4|0;H=m+12|0;I=m+16|0;J=g+4|0;K=g+8|0;L=j+12|0;N=E+1|0;O=j+8|0;P=n+4|0;Q=s+4|0;R=b+100|0;S=b+104|0;T=b+96|0;U=l+4|0;V=c;b:while(1){W=k[V>>2]|0;if((W|0)!=0?(X=iDa(W,5224,5296,0)|0,(X|0)!=0):0){x=0;nb(144,g|0,0,k[X+40>>2]|0,d|0);W=x;x=0;if(W&1){Y=39;break}x=0;nb(145,h|0,b|0,g|0,d|0);W=x;x=0;if(W&1){Y=40;break}if(!(i[g>>0]&1)){i[C>>0]=0;i[g>>0]=0}else{i[k[K>>2]>>0]=0;k[J>>2]=0}x=0;xa(603,g|0,0);W=x;x=0;if(W&1){Y=22;break};k[g>>2]=k[h>>2];k[g+4>>2]=k[h+4>>2];k[g+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;K2a(h);x=0;W=Ba(k[(k[X>>2]|0)+16>>2]|0,X|0)|0;Z=x;x=0;if(Z&1){Y=40;break}x=0;Ta(493,W+4|0,g|0)|0;W=x;x=0;if(W&1){Y=40;break}W=k[D>>2]|0;c:do if(!W)Y=32;else{Z=i[g>>0]|0;_=(Z&1)==0;$=_?(Z&255)>>>1:k[J>>2]|0;Z=_?C:k[K>>2]|0;_=W;while(1){aa=_+16|0;ba=i[aa>>0]|0;ca=(ba&1)==0;da=ca?(ba&255)>>>1:k[_+20>>2]|0;ba=ca?aa+1|0:k[_+24>>2]|0;aa=da>>>0<$>>>0;ca=ZLa(Z,ba,aa?da:$)|0;ea=$>>>0>>0;if((((ca|0)==0?(ea?-2147483648:0):ca)|0)<0)fa=_;else{ca=ZLa(ba,Z,ea?$:da)|0;if((((ca|0)==0?(aa?-2147483648:0):ca)|0)>=0)break c;fa=_+4|0}_=k[fa>>2]|0;if(!_){Y=32;break}}}while(0);d:do if((Y|0)==32){Y=0;W=k[t>>2]|0;if(W){_=i[g>>0]|0;$=(_&1)==0;Z=$?(_&255)>>>1:k[J>>2]|0;_=$?C:k[K>>2]|0;$=W;do{W=$+16|0;ca=i[W>>0]|0;aa=(ca&1)==0;da=aa?(ca&255)>>>1:k[$+20>>2]|0;ca=aa?W+1|0:k[$+24>>2]|0;W=da>>>0>>0;aa=ZLa(_,ca,W?da:Z)|0;ea=Z>>>0>>0;if((((aa|0)==0?(ea?-2147483648:0):aa)|0)<0)ga=$;else{aa=ZLa(ca,_,ea?Z:da)|0;if((((aa|0)==0?(W?-2147483648:0):aa)|0)>=0)break d;ga=$+4|0}$=k[ga>>2]|0}while(($|0)!=0)}i[j>>0]=0;x=0;fb(140,E|0,279829,28);$=x;x=0;if($&1){Y=40;break b}$=k[F>>2]|0;if($){x=0;fb(k[(k[$>>2]|0)+24>>2]|0,l|0,$|0,g|0);$=x;x=0;if($&1){Y=50;break b}i[j>>0]=i[l>>0]|0;if(!(i[E>>0]&1)){i[N>>0]=0;i[E>>0]=0}else{i[k[L>>2]>>0]=0;k[O>>2]=0}x=0;xa(603,E|0,0);$=x;x=0;if($&1){Y=48;break b};k[E>>2]=k[U>>2];k[E+4>>2]=k[U+4>>2];k[E+8>>2]=k[U+8>>2];k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;K2a(U)}x=0;do if(i[j>>0]|0){$=Ig(a,g)|0;Z=x;x=0;if(Z&1){Y=50;break b}x=0;Ta(493,$|0,E|0)|0;$=x;x=0;if($&1){Y=50;break b}}else{$=KBa(68)|0;Z=x;x=0;if(Z&1){Y=50;break b}k[$+4>>2]=0;k[$+8>>2]=0;k[$>>2]=31248;Z=$+12|0;x=0;xa(731,Z|0,2);_=x;x=0;if(_&1){ha=$;Y=57;break b}_=Z;aa=$;k[m>>2]=31456;W=X+8|0;da=k[W+4>>2]|0;ea=G;k[ea>>2]=k[W>>2];k[ea+4>>2]=da;k[H>>2]=k[X+16>>2];da=k[X+20>>2]|0;k[I>>2]=da;ea=(da|0)==0;if(!ea)h0a(da);x=0;W=Ta(566,Z|0,m|0)|0;Z=x;x=0;if(Z&1){ia=$;ja=da;ka=ea;Y=75;break b};k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;Z=i[g>>0]|0;ca=(Z&1)==0?(Z&255)>>>1:k[J>>2]|0;x=0;nb(83,q|0,279858,8,ca+8|0);Z=x;x=0;if(Z&1){la=$;ma=da;na=ea;Y=63;break b}x=0;Fa(88,q|0,((i[g>>0]&1)==0?C:k[K>>2]|0)|0,ca|0)|0;ca=x;x=0;if(ca&1){la=$;ma=da;na=ea;Y=63;break b}x=0;ca=Ta(484,q|0,279867)|0;Z=x;x=0;if(Z&1){oa=$;pa=da;qa=ea;Y=77;break b};k[p>>2]=k[ca>>2];k[p+4>>2]=k[ca+4>>2];k[p+8>>2]=k[ca+8>>2];k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;ca=i[E>>0]|0;Z=(ca&1)==0;x=0;ba=Fa(88,p|0,(Z?N:k[L>>2]|0)|0,(Z?(ca&255)>>>1:k[O>>2]|0)|0)|0;ca=x;x=0;if(ca&1){ra=$;sa=da;ta=ea;Y=78;break b};k[o>>2]=k[ba>>2];k[o+4>>2]=k[ba+4>>2];k[o+8>>2]=k[ba+8>>2];k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[n>>2]=21048;x=0;xa(604,P|0,o|0);ba=x;x=0;if(ba&1){ua=$;va=da;wa=ea;Y=79;break b}x=0;Ta(564,W|0,n|0)|0;W=x;x=0;if(W&1){ya=$;za=da;Aa=ea;Y=80;break b}k[n>>2]=21048;K2a(P);K2a(o);K2a(p);K2a(q);k[m>>2]=31456;if(!ea)j0a(da);k[s>>2]=_;k[Q>>2]=aa;da=k[R>>2]|0;if(da>>>0<(k[S>>2]|0)>>>0){k[da>>2]=_;k[da+4>>2]=aa;k[s>>2]=0;k[Q>>2]=0;k[R>>2]=da+8;break}x=0;xa(732,T|0,s|0);da=x;x=0;if(da&1){Y=86;break b}da=k[Q>>2]|0;if(!da)break;j0a(da)}while(0);K2a(E)}while(0);K2a(g)}V=V+8|0;if((V|0)==(A|0)){Y=4;break}}switch(Y|0){case 4:{B=k[f>>2]|0;break a;break}case 22:{Fg(Hc(0)|0);break}case 39:{Ca=Hc()|0;Da=M;break}case 40:{Ea=Hc()|0;Ga=M;Y=92;break}case 48:{Fg(Hc(0)|0);break}case 50:{V=Hc()|0;Ha=M;Ia=V;Y=51;break}case 57:{V=Hc()|0;T=M;c0a(ha);OBa(ha);Ha=T;Ia=V;Y=51;break}case 63:{V=Hc()|0;T=M;K2a(q);Ja=na;Ka=ma;La=la;Ma=T;Na=V;Y=76;break}case 75:{V=Hc()|0;Ja=ka;Ka=ja;La=ia;Ma=M;Na=V;Y=76;break}case 77:{Oa=Hc()|0;Pa=M;Qa=qa;Ra=pa;Sa=oa;Y=83;break}case 78:{Ua=Hc()|0;Va=M;Wa=ta;Xa=sa;Ya=ra;Y=82;break}case 79:{Za=Hc()|0;_a=M;$a=wa;ab=va;bb=ua;Y=81;break}case 80:{V=Hc()|0;T=M;k[n>>2]=21048;K2a(P);Za=V;_a=T;$a=Aa;ab=za;bb=ya;Y=81;break}case 86:{T=Hc()|0;V=M;R=k[Q>>2]|0;if(!R){cb=T;db=V;Y=91}else{j0a(R);cb=T;db=V;Y=91}break}}if((Y|0)==51){cb=Ia;db=Ha;Y=91}else if((Y|0)==76){eb=Na;gb=Ma;hb=Ka;ib=La;jb=Ja;Y=84}else if((Y|0)==81){K2a(o);Ua=Za;Va=_a;Wa=$a;Xa=ab;Ya=bb;Y=82}if((Y|0)==82){K2a(p);Oa=Ua;Pa=Va;Qa=Wa;Ra=Xa;Sa=Ya;Y=83}if((Y|0)==83){K2a(q);eb=Oa;gb=Pa;hb=Ra;ib=Sa;jb=Qa;Y=84}if((Y|0)==84){k[m>>2]=31456;if(!jb)j0a(hb);j0a(ib);cb=eb;db=gb;Y=91}if((Y|0)==91){K2a(E);Ea=cb;Ga=db;Y=92}if((Y|0)==92){K2a(g);Ca=Ea;Da=Ga}V=k[f>>2]|0;if(!V){u=Ca;v=Da;w=t;y=k[w>>2]|0;xi(a,y);Sc(u|0)}T=k[z>>2]|0;if((T|0)==(V|0))kb=V;else{R=T;while(1){T=R+-8|0;k[z>>2]=T;S=k[R+-4>>2]|0;if(!S)lb=T;else{j0a(S);lb=k[z>>2]|0}if((lb|0)==(V|0))break;else R=lb}kb=k[f>>2]|0}OBa(kb);u=Ca;v=Da;w=t;y=k[w>>2]|0;xi(a,y);Sc(u|0)}while(0);if(!B){r=e;return}u=k[z>>2]|0;if((u|0)==(B|0))mb=B;else{y=u;while(1){u=y+-8|0;k[z>>2]=u;a=k[y+-4>>2]|0;if(!a)ob=u;else{j0a(a);ob=k[z>>2]|0}if((ob|0)==(B|0))break;else y=ob}mb=k[f>>2]|0}OBa(mb);r=e;return}function ipa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;b=r;r=r+64|0;c=b+48|0;d=b+36|0;e=b+24|0;f=b;k[d>>2]=0;g=d+4|0;k[g>>2]=0;k[d+8>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;h=e+4|0;k[e>>2]=h;j=f+16|0;x=0;l=Ba(563,20)|0;m=x;x=0;a:do if(m&1){n=Hc()|0;o=n;p=M}else{k[l>>2]=43212;k[l+4>>2]=e;k[l+8>>2]=a;k[l+12>>2]=f;k[l+16>>2]=d;k[j>>2]=l;n=k[a+40>>2]|0;q=a+44|0;do if((n|0)==(q|0)){s=g;t=d+8|0;u=d;v=0;w=0;y=0;z=l}else{A=n;while(1){if(!(i[A+44>>0]|0)){k[c>>2]=A+28;B=k[j>>2]|0;if(!B){C=23;break}x=0;xa(k[(k[B>>2]|0)+24>>2]|0,B|0,c|0);B=x;x=0;if(B&1){C=16;break}}B=k[A+4>>2]|0;if(!B){D=A;while(1){E=k[D+8>>2]|0;if((k[E>>2]|0)==(D|0)){F=E;break}else D=E}}else{D=B;while(1){E=k[D>>2]|0;if(!E){F=D;break}else D=E}}if((F|0)==(q|0)){C=5;break}else A=F}if((C|0)==5){A=d+8|0;s=g;t=A;u=d;v=k[d>>2]|0;w=k[g>>2]|0;y=k[A>>2]|0;z=k[j>>2]|0;break}else if((C|0)==16){A=Hc()|0;G=A;H=M}else if((C|0)==23){A=Rd(4)|0;k[A>>2]=26200;x=0;fb(149,A|0,2216,320);x=0;A=Hc()|0;G=A;H=M}A=k[j>>2]|0;if((A|0)==(f|0)){Sf[k[(k[A>>2]|0)+16>>2]&2047](A);o=G;p=H;break a}if(!A){o=G;p=H;break a}Sf[k[(k[A>>2]|0)+20>>2]&2047](A);o=G;p=H;break a}while(0);q=a+60|0;n=k[q>>2]|0;k[q>>2]=v;k[u>>2]=n;n=a+64|0;q=k[n>>2]|0;k[n>>2]=w;k[s>>2]=q;q=a+68|0;n=k[q>>2]|0;k[q>>2]=y;k[t>>2]=n;if((z|0)!=(f|0)){if(z)Sf[k[(k[z>>2]|0)+20>>2]&2047](z)}else Sf[k[(k[f>>2]|0)+16>>2]&2047](f);Wpa(e,k[h>>2]|0);n=k[d>>2]|0;if(!n){r=b;return}q=k[g>>2]|0;if((q|0)!=(n|0))k[g>>2]=q+(~((q+-4-n|0)>>>2)<<2);OBa(n);r=b;return}while(0);Wpa(e,k[h>>2]|0);h=k[d>>2]|0;if(!h)Sc(o|0);d=k[g>>2]|0;if((d|0)!=(h|0))k[g>>2]=d+(~((d+-4-h|0)>>>2)<<2);OBa(h);Sc(o|0)}function jpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0;b=r;r=r+144|0;c=b+120|0;d=b+108|0;e=b+88|0;f=b+72|0;g=b+60|0;h=b+48|0;j=b+32|0;l=b+20|0;m=b+8|0;n=b;k[c+4>>2]=0;k[c+8>>2]=0;o=c+4|0;k[c>>2]=o;p=k[a+60>>2]|0;q=k[a+64>>2]|0;if((p|0)==(q|0)){s=0;t=0;u=t^1;Xpa(c,s);r=b;return u|0}v=d+4|0;w=e+4|0;y=e+12|0;z=e+16|0;A=f+4|0;B=l+4|0;C=j+4|0;D=j+4|0;E=n+4|0;F=a+100|0;G=a+104|0;H=a+96|0;a=j+8|0;I=p;p=0;a:while(1){x=0;xa(869,d|0,(k[(k[I>>2]|0)+8>>2]|0)+24|0);J=x;x=0;if(J&1){K=16;break}J=k[d>>2]|0;L=k[v>>2]|0;if((J|0)==(L|0)){N=J;O=p}else{P=J;J=p;while(1){Q=k[P>>2]|0;b:do if(((Q|0)!=0?(R=iDa(Q,5224,5312,0)|0,(R|0)!=0):0)?(i[R+72>>0]|0)!=0:0){S=R+24|0;T=k[S>>2]|0;U=k[o>>2]|0;c:do if(U){V=i[T>>0]|0;W=(V&1)==0;X=W?(V&255)>>>1:k[T+4>>2]|0;V=W?T+1|0:k[T+8>>2]|0;W=U;while(1){Y=W+16|0;Z=i[Y>>0]|0;_=(Z&1)==0;$=_?(Z&255)>>>1:k[W+20>>2]|0;Z=_?Y+1|0:k[W+24>>2]|0;Y=$>>>0>>0;_=ZLa(V,Z,Y?$:X)|0;aa=X>>>0<$>>>0;if((((_|0)==0?(aa?-2147483648:0):_)|0)<0)ba=W;else{_=ZLa(Z,V,aa?X:$)|0;if((((_|0)==0?(Y?-2147483648:0):_)|0)>=0)break;ba=W+4|0}W=k[ba>>2]|0;if(!W)break c}x=0;W=Ba(563,68)|0;X=x;x=0;if(X&1){K=66;break a}k[W+4>>2]=0;k[W+8>>2]=0;k[W>>2]=31248;X=W+12|0;x=0;xa(731,X|0,0);V=x;x=0;if(V&1){ca=W;K=29;break a}V=X;k[e>>2]=31456;_=R+8|0;Y=k[_+4>>2]|0;$=w;k[$>>2]=k[_>>2];k[$+4>>2]=Y;k[y>>2]=k[R+16>>2];Y=k[R+20>>2]|0;k[z>>2]=Y;$=(Y|0)==0;if(!$)h0a(Y);x=0;_=Ta(566,X|0,e|0)|0;X=x;x=0;if(X&1){da=W;ea=Y;fa=$;K=68;break a}X=k[S>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;aa=i[X>>0]|0;Z=(aa&1)==0?(aa&255)>>>1:k[X+4>>2]|0;x=0;nb(83,h|0,279881,9,Z+9|0);aa=x;x=0;if(aa&1){ga=W;ha=Y;ia=$;K=35;break a}x=0;Fa(88,h|0,((i[X>>0]&1)==0?X+1|0:k[X+8>>2]|0)|0,Z|0)|0;Z=x;x=0;if(Z&1){ga=W;ha=Y;ia=$;K=35;break a}x=0;Z=Ta(484,h|0,279891)|0;X=x;x=0;if(X&1){ja=W;ka=Y;la=$;K=70;break a};k[g>>2]=k[Z>>2];k[g+4>>2]=k[Z+4>>2];k[g+8>>2]=k[Z+8>>2];k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[f>>2]=21048;x=0;xa(604,A|0,g|0);Z=x;x=0;if(Z&1){ma=W;na=Y;oa=$;K=71;break a}x=0;Z=Ta(564,_|0,f|0)|0;_=x;x=0;if(_&1){pa=W;qa=Y;ra=$;K=72;break a};k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;fb(140,m|0,279950,30);_=x;x=0;if(_&1){sa=W;ta=Y;ua=$;K=73;break a}x=0;_=Ta(617,c|0,k[S>>2]|0)|0;X=x;x=0;if(X&1){va=W;wa=Y;ya=$;K=74;break a}x=0;X=Fa(131,l|0,m|0,_|0)|0;_=x;x=0;if(_&1){va=W;wa=Y;ya=$;K=74;break a}k[j>>2]=31476;x=0;xa(735,C|0,X|0);X=x;x=0;if(X&1){va=W;wa=Y;ya=$;K=74;break a}x=0;Ta(567,Z|0,j|0)|0;Z=x;x=0;if(Z&1){za=W;Aa=Y;Ca=$;K=75;break a}k[j>>2]=31476;Z=k[D>>2]|0;if(Z){X=k[a>>2]|0;if((X|0)==(Z|0))Da=Z;else{_=X;do{X=_+-28|0;k[a>>2]=X;aa=k[_+-4>>2]|0;if(aa)j0a(aa);K2a(X);_=k[a>>2]|0}while((_|0)!=(Z|0));Da=k[D>>2]|0}OBa(Da)}K2a(m);Z=k[l>>2]|0;if(Z){_=k[B>>2]|0;if((_|0)==(Z|0))Ea=Z;else{X=_;do{_=X+-28|0;k[B>>2]=_;aa=k[X+-4>>2]|0;if(aa)j0a(aa);K2a(_);X=k[B>>2]|0}while((X|0)!=(Z|0));Ea=k[l>>2]|0}OBa(Ea)}k[f>>2]=21048;K2a(A);K2a(g);K2a(h);k[e>>2]=31456;if(!$)j0a(Y);k[n>>2]=V;k[E>>2]=W;h0a(W);Z=k[F>>2]|0;do if(Z>>>0<(k[G>>2]|0)>>>0){k[Z>>2]=V;k[Z+4>>2]=W;k[n>>2]=0;k[E>>2]=0;k[F>>2]=Z+8}else{x=0;xa(732,H|0,n|0);X=x;x=0;if(X&1){Ga=W;K=95;break a}X=k[E>>2]|0;if(!X)break;j0a(X)}while(0);j0a(W);Ha=1;break b}while(0);x=0;S=Ta(617,c|0,T|0)|0;U=x;x=0;if(U&1){K=66;break a}U=R+8|0;Z=k[U+4>>2]|0;V=S;k[V>>2]=k[U>>2];k[V+4>>2]=Z;Z=k[R+16>>2]|0;V=k[R+20>>2]|0;if(V)h0a(V);k[S+8>>2]=Z;Z=S+12|0;S=k[Z>>2]|0;k[Z>>2]=V;if(S){j0a(S);Ha=J}else Ha=J}else Ha=J;while(0);P=P+8|0;if((P|0)==(L|0)){Ia=Ha;break}else J=Ha}N=k[d>>2]|0;O=Ia}if(N){J=k[v>>2]|0;if((J|0)==(N|0))Ja=N;else{L=J;while(1){J=L+-8|0;k[v>>2]=J;P=k[L+-4>>2]|0;if(!P)Ka=J;else{j0a(P);Ka=k[v>>2]|0}if((Ka|0)==(N|0))break;else L=Ka}Ja=k[d>>2]|0}OBa(Ja)}I=I+4|0;if((I|0)==(q|0)){La=O;K=3;break}else p=O}switch(K|0){case 3:{s=k[o>>2]|0;t=La;u=t^1;Xpa(c,s);r=b;return u|0}case 16:{u=Hc()|0;Ma=M;Na=u;Oa=k[o>>2]|0;Xpa(c,Oa);Sc(Na|0);break}case 29:{u=Hc()|0;b=M;c0a(ca);OBa(ca);Pa=b;Qa=u;K=67;break}case 35:{u=Hc()|0;b=M;K2a(h);Ra=ia;Sa=ha;Ua=ga;Va=b;Wa=u;K=69;break}case 66:{u=Hc()|0;Pa=M;Qa=u;K=67;break}case 68:{u=Hc()|0;Ra=fa;Sa=ea;Ua=da;Va=M;Wa=u;K=69;break}case 70:{u=Hc()|0;Xa=M;Ya=u;Za=la;_a=ka;$a=ja;K=92;break}case 71:{ja=Hc()|0;ab=M;bb=ja;cb=oa;db=na;eb=ma;K=91;break}case 72:{ma=Hc()|0;gb=M;hb=ma;ib=ra;jb=qa;kb=pa;K=90;break}case 73:{pa=Hc()|0;lb=M;mb=pa;ob=ua;pb=ta;qb=sa;K=83;break}case 74:{sa=Hc()|0;rb=M;sb=sa;tb=ya;ub=wa;vb=va;K=82;break}case 75:{va=Hc()|0;wa=M;k[j>>2]=31476;j=k[D>>2]|0;if(!j){rb=wa;sb=va;tb=Ca;ub=Aa;vb=za;K=82}else{ya=k[a>>2]|0;if((ya|0)==(j|0))wb=j;else{sa=ya;do{ya=sa+-28|0;k[a>>2]=ya;ta=k[sa+-4>>2]|0;if(ta)j0a(ta);K2a(ya);sa=k[a>>2]|0}while((sa|0)!=(j|0));wb=k[D>>2]|0}OBa(wb);rb=wa;sb=va;tb=Ca;ub=Aa;vb=za;K=82}break}case 95:{za=Hc()|0;Aa=M;Ca=k[E>>2]|0;if(!Ca){xb=Aa;yb=za;zb=Ga;K=97}else{j0a(Ca);xb=Aa;yb=za;zb=Ga;K=97}break}}if((K|0)==67){Ab=Pa;Bb=Qa}else if((K|0)==69){Cb=Va;Db=Wa;Eb=Sa;Fb=Ra;Gb=Ua;K=93}else if((K|0)==82){K2a(m);lb=rb;mb=sb;ob=tb;pb=ub;qb=vb;K=83}if((K|0)==83){vb=k[l>>2]|0;if(!vb){gb=lb;hb=mb;ib=ob;jb=pb;kb=qb;K=90}else{ub=k[B>>2]|0;if((ub|0)==(vb|0))Hb=vb;else{tb=ub;do{ub=tb+-28|0;k[B>>2]=ub;sb=k[tb+-4>>2]|0;if(sb)j0a(sb);K2a(ub);tb=k[B>>2]|0}while((tb|0)!=(vb|0));Hb=k[l>>2]|0}OBa(Hb);gb=lb;hb=mb;ib=ob;jb=pb;kb=qb;K=90}}if((K|0)==90){k[f>>2]=21048;K2a(A);ab=gb;bb=hb;cb=ib;db=jb;eb=kb;K=91}if((K|0)==91){K2a(g);Xa=ab;Ya=bb;Za=cb;_a=db;$a=eb;K=92}if((K|0)==92){K2a(h);Cb=Xa;Db=Ya;Eb=_a;Fb=Za;Gb=$a;K=93}if((K|0)==93){k[e>>2]=31456;if(Fb){xb=Cb;yb=Db;zb=Gb;K=97}else{j0a(Eb);xb=Cb;yb=Db;zb=Gb;K=97}}if((K|0)==97){j0a(zb);Ab=xb;Bb=yb}yb=k[d>>2]|0;if(!yb){Ma=Ab;Na=Bb;Oa=k[o>>2]|0;Xpa(c,Oa);Sc(Na|0)}xb=k[v>>2]|0;if((xb|0)==(yb|0))Ib=yb;else{zb=xb;while(1){xb=zb+-8|0;k[v>>2]=xb;K=k[zb+-4>>2]|0;if(!K)Jb=xb;else{j0a(K);Jb=k[v>>2]|0}if((Jb|0)==(yb|0))break;else zb=Jb}Ib=k[d>>2]|0}OBa(Ib);Ma=Ab;Na=Bb;Oa=k[o>>2]|0;Xpa(c,Oa);Sc(Na|0);return 0}function kpa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;dpa(a,0);q2a(d,329672,0);x=0;db(56,a|0,d|0,b|0,0)|0;b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}else{K2a(d);d=gpa(a)|0;r=c;return d|0}return 0}function lpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+96|0;d=c+72|0;e=c+32|0;f=c+16|0;g=c;if(!(i[b+36>>0]|0)){h=e;j=h+36|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(j|0));h=e+20|0;j=e+24|0;k[j>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;l=e+4|0;m=l+-4|0;n=l+16|0;o=e+8|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=40936;k[e>>2]=40900;k[h>>2]=40960;x=0;fb(140,g|0,279981,27);d=x;x=0;if(d&1){d=Hc()|0;p=d;q=M}else{k[f>>2]=21048;d=f+4|0;x=0;xa(604,d|0,g|0);s=x;x=0;if(s&1){s=Hc()|0;t=s;u=M}else{x=0;s=Ta(596,e|0,f|0)|0;e=x;x=0;if(!(e&1)){x=0;nb(135,s|0,280009,279741,199);x=0}s=Hc()|0;e=M;k[f>>2]=21048;K2a(d);t=s;u=e}K2a(g);p=t;q=u}k[l>>2]=40992;k[m>>2]=41020;k[n>>2]=41044;K2a(o);k[h>>2]=20796;h=k[j>>2]|0;if(h){x=0;o=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}if(o)k[j>>2]=0}v=p;w=q;Sc(v|0)}k[a>>2]=0;q=a+4|0;k[q>>2]=0;k[a+8>>2]=0;p=k[b+72>>2]|0;j=b+76|0;if((p|0)==(j|0)){r=c;return}b=a+8|0;o=p;p=0;h=0;while(1){n=o+16|0;x=0;if((p|0)==(h|0)){Rx(a,n);m=x;x=0;if(m&1)break}else{n2a(p,n);n=x;x=0;if(n&1)break;k[q>>2]=(k[q>>2]|0)+12}n=k[o+4>>2]|0;if(!n){m=o;while(1){l=k[m+8>>2]|0;if((k[l>>2]|0)==(m|0)){y=l;break}else m=l}}else{m=n;while(1){l=k[m>>2]|0;if(!l){y=m;break}else m=l}}if((y|0)==(j|0)){z=18;break}o=y;p=k[q>>2]|0;h=k[b>>2]|0}if((z|0)==18){r=c;return}c=Hc()|0;z=M;b=k[a>>2]|0;if(!b){v=c;w=z;Sc(v|0)}h=k[q>>2]|0;if((h|0)==(b|0))A=b;else{p=h;do{h=p+-12|0;k[q>>2]=h;K2a(h);p=k[q>>2]|0}while((p|0)!=(b|0));A=k[a>>2]|0}OBa(A);v=c;w=z;Sc(v|0)}function mpa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;d=r;r=r+32|0;e=d+12|0;f=d;if((i[a+36>>0]|0)==0?!(gpa(a)|0):0){g=0;r=d;return g|0}k[e+4>>2]=0;k[e+8>>2]=0;h=e+4|0;k[e>>2]=h;j=k[a+60>>2]|0;l=k[a+64>>2]|0;do if((j|0)==(l|0))m=0;else{n=f+4|0;o=j;a:while(1){x=0;xa(869,f|0,(k[(k[o>>2]|0)+8>>2]|0)+24|0);p=x;x=0;if(p&1){q=18;break}p=k[f>>2]|0;s=k[n>>2]|0;if((p|0)==(s|0))t=p;else{u=p;do{p=k[u>>2]|0;if(((p|0)!=0?(v=iDa(p,5224,5312,0)|0,(v|0)!=0):0)?(x=0,pa(62,a|0,b|0,c|0,v|0,e|0),v=x,x=0,v&1):0){q=22;break a}u=u+8|0}while((u|0)!=(s|0));t=k[f>>2]|0}if(t){s=k[n>>2]|0;if((s|0)==(t|0))w=t;else{u=s;while(1){s=u+-8|0;k[n>>2]=s;v=k[u+-4>>2]|0;if(!v)y=s;else{j0a(v);y=k[n>>2]|0}if((y|0)==(t|0))break;else u=y}w=k[f>>2]|0}OBa(w)}o=o+4|0;if((o|0)==(l|0)){q=5;break}}if((q|0)==5){m=k[h>>2]|0;break}else if((q|0)==18){o=Hc()|0;z=M;A=o}else if((q|0)==22){o=Hc()|0;u=M;v=k[f>>2]|0;if(!v){z=u;A=o}else{s=k[n>>2]|0;if((s|0)==(v|0))B=v;else{p=s;while(1){s=p+-8|0;k[n>>2]=s;C=k[p+-4>>2]|0;if(!C)D=s;else{j0a(C);D=k[n>>2]|0}if((D|0)==(v|0))break;else p=D}B=k[f>>2]|0}OBa(B);z=u;A=o}}Tka(e,k[h>>2]|0);Sc(A|0)}while(0);Tka(e,m);g=1;r=d;return g|0}function npa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;f=r;r=r+592|0;g=f+584|0;h=f+580|0;j=f+48|0;l=f+24|0;m=f+72|0;n=f;o=b&1;p=e+4|0;q=k[p>>2]|0;a:do if(q){s=q;while(1){t=k[s+16>>2]|0;if(t>>>0>d>>>0)u=s;else{if(t>>>0>=d>>>0)break;u=s+4|0}s=k[u>>2]|0;if(!s)break a}r=f;return}while(0);u=(Vf[k[(k[d>>2]|0)+16>>2]&1023](d)|0)+32|0;if(!(i[u>>0]|0)){r=f;return}u=Vf[k[(k[d>>2]|0)+16>>2]&1023](d)|0;q=k[u+48>>2]|0;s=u+52|0;if((q|0)!=(s|0)){u=q;while(1){npa(a,b,c,k[u+16>>2]|0,e);q=k[u+4>>2]|0;if(!q){t=u;while(1){v=k[t+8>>2]|0;if((k[v>>2]|0)==(t|0)){w=v;break}else t=v}}else{t=q;while(1){v=k[t>>2]|0;if(!v){w=t;break}else t=v}}if((w|0)==(s|0))break;else u=w}}w=KBa(520)|0;k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=43256;u=w+12|0;Zpa(u,b,c);b=u;x=0;fb(364,u|0,d|0,e|0);u=x;x=0;do if(!(u&1)){s=_pa(a+72|0,h,k[d+24>>2]|0)|0;t=k[s>>2]|0;if(!t){s=Rd(8)|0;x=0;xa(671,s|0,296399);q=x;x=0;if(q&1){q=Hc()|0;v=M;Fc(s|0);y=v;z=q;break}else{k[s>>2]=47544;x=0;fb(149,s|0,9024,933);x=0;A=86;break}}s=t+28|0;h0a(w);k[s+4>>2]=b;t=s+8|0;q=k[t>>2]|0;k[t>>2]=w;if(q)j0a(q);q=w+68|0;x=0;t=Ba(587,q|0)|0;v=x;x=0;if(!(v&1)?(x=0,xa(704,j|0,t|0),t=x,x=0,!(t&1)):0){t=s+12|0;v=k[t>>2]|0;B=s+16|0;if(!v)C=s+20|0;else{if((k[B>>2]|0)!=(v|0))k[B>>2]=v;OBa(v);v=s+20|0;k[v>>2]=0;k[B>>2]=0;k[t>>2]=0;C=v}k[t>>2]=k[j>>2];t=j+4|0;k[B>>2]=k[t>>2];B=j+8|0;k[C>>2]=k[B>>2];k[B>>2]=0;k[t>>2]=0;k[j>>2]=0;B=s+24|0;v=j+12|0;D=s+28|0;Ci(B,k[D>>2]|0);k[B>>2]=k[v>>2];E=j+16|0;F=k[E>>2]|0;k[D>>2]=F;G=j+20|0;H=k[G>>2]|0;k[s+32>>2]=H;if(!H){k[B>>2]=D;I=k[E>>2]|0}else{k[F+8>>2]=D;k[v>>2]=E;k[E>>2]=0;k[G>>2]=0;I=0}Ci(j+12|0,I);G=k[j>>2]|0;if(G){if((k[t>>2]|0)!=(G|0))k[t>>2]=G;OBa(G)}G=k[w+268>>2]|0;t=w+96|0;E=k[t>>2]|0;if((((k[w+100>>2]|0)-E|0)/116|0)>>>0>G>>>0)J=E;else{x=0;va(1484,t|0);E=x;x=0;if(E&1){A=86;break}J=k[t>>2]|0}x=0;t=Ba(587,J+(G*116|0)|0)|0;G=x;x=0;if(!(G&1)?(x=0,xa(704,l|0,t|0),t=x,x=0,!(t&1)):0){t=s+36|0;G=k[t>>2]|0;E=s+40|0;if(!G)K=s+44|0;else{if((k[E>>2]|0)!=(G|0))k[E>>2]=G;OBa(G);G=s+44|0;k[G>>2]=0;k[E>>2]=0;k[t>>2]=0;K=G}k[t>>2]=k[l>>2];t=l+4|0;k[E>>2]=k[t>>2];E=l+8|0;k[K>>2]=k[E>>2];k[E>>2]=0;k[t>>2]=0;k[l>>2]=0;E=s+48|0;G=l+12|0;v=s+52|0;Ci(E,k[v>>2]|0);k[E>>2]=k[G>>2];D=l+16|0;F=k[D>>2]|0;k[v>>2]=F;B=l+20|0;H=k[B>>2]|0;k[s+56>>2]=H;if(!H){k[E>>2]=v;L=k[D>>2]|0}else{k[F+8>>2]=v;k[G>>2]=D;k[D>>2]=0;k[B>>2]=0;L=0}Ci(l+12|0,L);B=k[l>>2]|0;if(B){if((k[t>>2]|0)!=(B|0))k[t>>2]=B;OBa(B)}B=k[p>>2]|0;do if(B){t=k[s>>2]|0;D=B;while(1){G=k[D+16>>2]|0;if(t>>>0>>0){v=k[D>>2]|0;if(!v){N=D;O=D;A=58;break}else P=v}else{if(G>>>0>=t>>>0){Q=D;A=64;break}G=D+4|0;v=k[G>>2]|0;if(!v){R=G;S=D;A=62;break}else P=v}D=P}if((A|0)==58){k[g>>2]=O;T=N;U=O;A=65;break}else if((A|0)==62){k[g>>2]=S;T=R;U=S;A=65;break}else if((A|0)==64){k[g>>2]=Q;if(!Q){T=g;U=Q;A=65;break}else{V=Q;break}}}else{k[g>>2]=p;T=p;U=p;A=65}while(0);if((A|0)==65){x=0;B=Ba(563,24)|0;D=x;x=0;if(D&1){A=86;break}k[B+16>>2]=k[s>>2];k[B+20>>2]=0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=U;k[T>>2]=B;D=k[k[e>>2]>>2]|0;if(!D)W=B;else{k[e>>2]=D;W=k[T>>2]|0}ui(k[e+4>>2]|0,W);D=e+8|0;k[D>>2]=(k[D>>2]|0)+1;V=B}k[V+20>>2]=q;i[m>>0]=o;k[m+4>>2]=c;B=m+8|0;k[m+12>>2]=0;k[m+16>>2]=0;k[B>>2]=m+12;k[m+24>>2]=0;k[m+28>>2]=0;k[m+20>>2]=m+24;D=m+32|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[D+16>>2]=0;k[D+20>>2]=0;k[m+56>>2]=1;k[m+60>>2]=0;k[m+64>>2]=0;k[m+68>>2]=0;k[m+76>>2]=0;k[m+80>>2]=0;k[m+72>>2]=m+76;k[m+84>>2]=0;k[m+88>>2]=0;k[m+92>>2]=0;k[m+100>>2]=0;k[m+104>>2]=0;k[m+96>>2]=m+100;k[m+112>>2]=0;k[m+116>>2]=0;k[m+108>>2]=m+112;k[m+120>>2]=0;k[m+124>>2]=0;k[m+128>>2]=0;k[m+136>>2]=0;k[m+140>>2]=0;k[m+132>>2]=m+136;k[m+144>>2]=0;k[m+148>>2]=0;k[m+152>>2]=0;k[m+156>>2]=-1;k[m+160>>2]=-1;k[m+164>>2]=0;k[m+168>>2]=0;k[m+176>>2]=0;k[m+180>>2]=0;k[m+172>>2]=m+176;k[m+188>>2]=0;k[m+192>>2]=0;k[m+184>>2]=m+188;k[m+200>>2]=0;k[m+204>>2]=0;k[m+196>>2]=m+200;k[m+212>>2]=0;k[m+216>>2]=0;k[m+208>>2]=m+212;D=m+220|0;t=D+36|0;do{k[D>>2]=0;D=D+4|0}while((D|0)<(t|0));k[m+256>>2]=-1;q=m+260|0;k[m+264>>2]=0;k[m+268>>2]=0;k[q>>2]=m+264;k[m+276>>2]=0;k[m+280>>2]=0;k[m+272>>2]=m+276;v=m+284|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;k[v+20>>2]=0;k[m+308>>2]=1;k[m+312>>2]=0;k[m+316>>2]=0;k[m+320>>2]=0;k[m+328>>2]=0;k[m+332>>2]=0;k[m+324>>2]=m+328;k[m+336>>2]=0;k[m+340>>2]=0;k[m+344>>2]=0;k[m+352>>2]=0;k[m+356>>2]=0;k[m+348>>2]=m+352;k[m+364>>2]=0;k[m+368>>2]=0;k[m+360>>2]=m+364;k[m+372>>2]=0;k[m+376>>2]=0;k[m+380>>2]=0;k[m+388>>2]=0;k[m+392>>2]=0;k[m+384>>2]=m+388;k[m+396>>2]=0;k[m+400>>2]=0;k[m+404>>2]=0;k[m+408>>2]=-1;k[m+412>>2]=-1;k[m+416>>2]=0;k[m+420>>2]=0;k[m+428>>2]=0;k[m+432>>2]=0;k[m+424>>2]=m+428;k[m+440>>2]=0;k[m+444>>2]=0;k[m+436>>2]=m+440;k[m+452>>2]=0;k[m+456>>2]=0;k[m+448>>2]=m+452;k[m+464>>2]=0;k[m+468>>2]=0;k[m+460>>2]=m+464;D=m+472|0;t=D+36|0;do{k[D>>2]=0;D=D+4|0}while((D|0)<(t|0));x=0;fb(365,m|0,d|0,e|0);D=x;x=0;do if(!(D&1)){x=0;t=Ba(587,m+56|0)|0;v=x;x=0;if(v&1)break;x=0;xa(704,n|0,t|0);t=x;x=0;if(t&1)break;t=s+60|0;v=k[t>>2]|0;G=s+64|0;if(!v)X=s+68|0;else{if((k[G>>2]|0)!=(v|0))k[G>>2]=v;OBa(v);v=s+68|0;k[v>>2]=0;k[G>>2]=0;k[t>>2]=0;X=v}k[t>>2]=k[n>>2];t=n+4|0;k[G>>2]=k[t>>2];G=n+8|0;k[X>>2]=k[G>>2];k[G>>2]=0;k[t>>2]=0;k[n>>2]=0;G=s+72|0;v=n+12|0;F=s+76|0;Ci(G,k[F>>2]|0);k[G>>2]=k[v>>2];E=n+16|0;H=k[E>>2]|0;k[F>>2]=H;Y=n+20|0;Z=k[Y>>2]|0;k[s+80>>2]=Z;if(!Z){k[G>>2]=F;_=k[E>>2]|0}else{k[H+8>>2]=F;k[v>>2]=E;k[E>>2]=0;k[Y>>2]=0;_=0}Ci(n+12|0,_);Y=k[n>>2]|0;if(Y){if((k[t>>2]|0)!=(Y|0))k[t>>2]=Y;OBa(Y)}Mla(q);Mla(B);j0a(w);r=f;return}while(0);s=Hc()|0;D=M;Mla(q);Mla(B);$=s;aa=D;j0a(w);Sc($|0)}else A=86}else A=86}else A=86;while(0);if((A|0)==86){A=Hc()|0;y=M;z=A}$=z;aa=y;j0a(w);Sc($|0)}function opa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;dpa(a,0);q2a(e,329672,0);x=0;db(56,a|0,e|0,b|0,0)|0;b=x;x=0;if(b&1){b=Hc()|0;K2a(e);Sc(b|0)}K2a(e);if(!(gpa(a)|0)){f=0;r=d;return f|0}f=mpa(a,c,200)|0;r=d;return f|0}function ppa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a+72>>2]|0;d=a+76|0;if((c|0)==(d|0))return;a=c;while(1){PC(a+40|0,b);PC(a+64|0,b);PC(a+88|0,b);c=k[a+4>>2]|0;if(!c){e=a;while(1){f=k[e+8>>2]|0;if((k[f>>2]|0)==(e|0)){g=f;break}else e=f}}else{e=c;while(1){f=k[e>>2]|0;if(!f){g=e;break}else e=f}}if((g|0)==(d|0))break;else a=g}return}function qpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+80|0;d=c+16|0;e=c;$pa(d,(b|0)==0?a+96|0:b);b=k[a+60>>2]|0;f=k[a+64>>2]|0;a:do if((b|0)==(f|0))g=17;else{h=b;while(1){x=0;j=Ta(618,d|0,k[(k[h>>2]|0)+8>>2]|0)|0;l=x;x=0;if(l&1)break;h=h+4|0;if(!j){m=0;g=24;break a}if((h|0)==(f|0)){g=17;break a}}h=Hc()|0;n=h;o=M;g=7}while(0);do if((g|0)==17){x=0;xa(875,e|0,d|0);f=x;x=0;if(f&1){f=Hc()|0;n=f;o=M;g=7;break}f=a+84|0;if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[a+92>>2]>>0]=0;k[a+88>>2]=0}x=0;xa(603,f|0,0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);m=1;g=24;break}}while(0);if((g|0)==7){k[d>>2]=42304;e=d+40|0;a=k[e>>2]|0;if(a){o=d+44|0;f=k[o>>2]|0;if((f|0)==(a|0))p=a;else{b=f;do{f=b+-16|0;k[o>>2]=f;K2a(f);b=k[o>>2]|0}while((b|0)!=(a|0));p=k[e>>2]|0}OBa(p)}toa(d+28|0,k[d+32>>2]|0);p=k[d+12>>2]|0;if(!p)Sc(n|0);e=d+16|0;a=k[e>>2]|0;if((a|0)!=(p|0))k[e>>2]=a+(~((a+-4-p|0)>>>2)<<2);OBa(p);Sc(n|0)}else if((g|0)==24){k[d>>2]=42304;g=d+40|0;n=k[g>>2]|0;if(n){p=d+44|0;a=k[p>>2]|0;if((a|0)==(n|0))q=n;else{e=a;do{a=e+-16|0;k[p>>2]=a;K2a(a);e=k[p>>2]|0}while((e|0)!=(n|0));q=k[g>>2]|0}OBa(q)}toa(d+28|0,k[d+32>>2]|0);q=k[d+12>>2]|0;if(!q){r=c;return m|0}g=d+16|0;d=k[g>>2]|0;if((d|0)!=(q|0))k[g>>2]=d+(~((d+-4-q|0)>>>2)<<2);OBa(q);r=c;return m|0}return 0}function rpa(a,b){a=a|0;b=b|0;var c=0,d=0;c=(spa(a,b)|0)+4|0;if(!(k[c>>2]|0)){d=0;return d|0}c=(spa(a,b)|0)+4|0;d=(k[c>>2]|0)+60|0;return d|0}function spa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;c=r;r=r+192|0;d=c+176|0;e=c+136|0;f=c+104|0;g=c+92|0;h=c+120|0;j=c+80|0;l=c+40|0;m=c+24|0;n=c+12|0;o=c;if(!(k[a+80>>2]|0)){p=e;q=p+36|0;do{k[p>>2]=0;p=p+4|0}while((p|0)<(q|0));s=e+20|0;t=e+24|0;k[t>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;u=e+4|0;v=u+-4|0;w=u+16|0;y=e+8|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=40936;k[e>>2]=40900;k[s>>2]=40960;x=0;fb(140,g|0,280076,28);z=x;x=0;if(z&1){z=Hc()|0;A=z;B=M}else{k[f>>2]=21048;z=f+4|0;x=0;xa(604,z|0,g|0);C=x;x=0;if(C&1){C=Hc()|0;D=C;E=M}else{x=0;C=Ta(596,e|0,f|0)|0;e=x;x=0;if(!(e&1)){x=0;nb(135,C|0,280105,279741,594);x=0}C=Hc()|0;e=M;k[f>>2]=21048;K2a(z);D=C;E=e}K2a(g);A=D;B=E}k[u>>2]=40992;k[v>>2]=41020;k[w>>2]=41044;K2a(y);k[s>>2]=20796;s=k[t>>2]|0;if(s){x=0;y=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(y)k[t>>2]=0}F=A;G=B;Sc(F|0)}n2a(h,b);B=i[b>>0]|0;A=b+4|0;a:do if((((B&1)==0?(B&255)>>>1:k[A>>2]|0)|0)==0?(t=k[a+40>>2]|0,y=a+44|0,(t|0)!=(y|0)):0){s=j+4|0;w=t;b:while(1){x=0;xa(869,j|0,(k[w+36>>2]|0)+24|0);t=x;x=0;if(t&1){H=19;break}t=k[j>>2]|0;v=k[s>>2]|0;if((t|0)==(v|0))I=t;else{u=t;do{t=k[u>>2]|0;if(((t|0)!=0?(E=iDa(t,5224,5312,0)|0,(E|0)!=0):0)?(x=0,Ta(493,h|0,k[E+24>>2]|0)|0,E=x,x=0,E&1):0)break b;u=u+8|0}while((u|0)!=(v|0));I=k[j>>2]|0}if(I){v=k[s>>2]|0;if((v|0)==(I|0))J=I;else{u=v;while(1){v=u+-8|0;k[s>>2]=v;E=k[u+-4>>2]|0;if(!E)K=v;else{j0a(E);K=k[s>>2]|0}if((K|0)==(I|0))break;else u=K}J=k[j>>2]|0}OBa(J)}u=k[w+4>>2]|0;if(!u){E=w;while(1){v=k[E+8>>2]|0;if((k[v>>2]|0)==(E|0)){L=v;break}else E=v}}else{E=u;while(1){v=k[E>>2]|0;if(!v){L=E;break}else E=v}}if((L|0)==(y|0)){H=46;break a}else w=L}if((H|0)==19){w=Hc()|0;N=w;O=M;break}w=Hc()|0;y=M;E=k[j>>2]|0;if(!E){N=w;O=y}else{u=k[s>>2]|0;if((u|0)==(E|0))P=E;else{v=u;while(1){u=v+-8|0;k[s>>2]=u;t=k[v+-4>>2]|0;if(!t)Q=u;else{j0a(t);Q=k[s>>2]|0}if((Q|0)==(E|0))break;else v=Q}P=k[j>>2]|0}OBa(P);N=w;O=y}}else H=46;while(0);if((H|0)==46){H=aqa(a+72|0,h)|0;if((H|0)!=(a+76|0)){K2a(h);r=c;return H+28|0}p=l;q=p+36|0;do{k[p>>2]=0;p=p+4|0}while((p|0)<(q|0));p=l+20|0;q=l+24|0;k[q>>2]=0;k[l+28>>2]=0;k[l+32>>2]=0;k[l+36>>2]=-1;H=l+4|0;c=H+-4|0;a=H+16|0;P=l+8|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[l+4>>2]=40936;k[l>>2]=40900;k[p>>2]=40960;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;d=i[b>>0]|0;j=(d&1)==0?(d&255)>>>1:k[A>>2]|0;x=0;nb(83,o|0,280197,9,j+9|0);A=x;x=0;if(!(A&1)?(x=0,Fa(88,o|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,j|0)|0,j=x,x=0,!(j&1)):0){x=0;j=Ta(484,o|0,280207)|0;b=x;x=0;if(b&1){b=Hc()|0;R=b;S=M}else{k[n>>2]=k[j>>2];k[n+4>>2]=k[j+4>>2];k[n+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[m>>2]=21048;j=m+4|0;x=0;xa(604,j|0,n|0);b=x;x=0;if(b&1){b=Hc()|0;T=b;U=M}else{x=0;b=Ta(596,l|0,m|0)|0;l=x;x=0;if(!(l&1)){x=0;nb(135,b|0,280105,279741,604);x=0}b=Hc()|0;l=M;k[m>>2]=21048;K2a(j);T=b;U=l}K2a(n);R=T;S=U}K2a(o);V=R;W=S}else{S=Hc()|0;R=M;K2a(o);V=S;W=R}k[H>>2]=40992;k[c>>2]=41020;k[a>>2]=41044;K2a(P);k[p>>2]=20796;p=k[q>>2]|0;if(p){x=0;P=Ba(k[(k[p>>2]|0)+16>>2]|0,p|0)|0;p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)}if(P)k[q>>2]=0}N=V;O=W}K2a(h);F=N;G=O;Sc(F|0);return 0}function tpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=(spa(a,b)|0)+4|0;if(!(k[c>>2]|0)){d=0;return d|0}c=(spa(a,b)|0)+4|0;b=k[c>>2]|0;c=k[b+256>>2]|0;a=b+84|0;e=k[a>>2]|0;if((((k[b+88>>2]|0)-e|0)/116|0)>>>0>c>>>0)f=e;else{Kpb(a);f=k[a>>2]|0}d=f+(c*116|0)+4|0;return d|0}function upa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=(spa(a,b)|0)+96|0;if(k[c>>2]|0){d=k[c>>2]|0;return d|0}e=(spa(a,b)|0)+4|0;if(!(k[e>>2]|0)){d=k[c>>2]|0;return d|0}e=(spa(a,b)|0)+4|0;b=(k[e>>2]|0)+60|0;e=KBa(12)|0;x=0;fb(366,e|0,a|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(e);Sc(b|0)}b=k[c>>2]|0;k[c>>2]=e;if(!b){d=k[c>>2]|0;return d|0}K2a(b);OBa(b);d=k[c>>2]|0;return d|0}function vpa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;d=r;r=r+64|0;e=d+48|0;f=d+36|0;g=d+24|0;h=d+12|0;j=d;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[f+4>>2]=0;l=f+8|0;k[l>>2]=0;m=f+4|0;k[f>>2]=m;n=k[b+40>>2]|0;o=b+44|0;a:do if((n|0)!=(o|0)){b=n;p=0;while(1){x=0;q=Ta(619,f|0,b+16|0)|0;s=x;x=0;if(s&1)break;k[q>>2]=p;q=k[b+4>>2]|0;if(!q){s=b;while(1){t=k[s+8>>2]|0;if((k[t>>2]|0)==(s|0)){u=t;break}else s=t}}else{s=q;while(1){t=k[s>>2]|0;if(!t){u=s;break}else s=t}}if((u|0)==(o|0))break a;b=u;p=k[l>>2]|0}p=Hc()|0;b=M;zi(f,k[m>>2]|0);v=p;w=b;K2a(a);Sc(v|0)}while(0);l=k[c>>2]|0;u=k[c+4>>2]|0;if((l|0)==(u|0)){y=m;z=k[y>>2]|0;zi(f,z);r=d;return}c=j+8|0;o=j+1|0;n=j+4|0;b=h+8|0;p=h+1|0;s=h+4|0;q=g+8|0;t=g+1|0;A=g+4|0;B=a+4|0;C=l;l=0;D=-1;E=-1;F=-1;b:while(1){G=i[a>>0]|0;if(!(G&1))H=(G&255)>>>1;else H=k[B>>2]|0;if((H|0)!=0?(x=0,Ta(484,a|0,294917)|0,G=x,x=0,G&1):0){I=20;break}G=C+48|0;J=k[G>>2]|0;if((J|0)==-1)K=-1;else{L=k[C+52>>2]|0;K=(L|0)==-1?-1:L-J|0}J=k[C+56>>2]|0;c:do if((J|0)!=0?(L=k[m>>2]|0,(L|0)!=0):0){N=i[J>>0]|0;O=(N&1)==0;P=O?(N&255)>>>1:k[J+4>>2]|0;N=O?J+1|0:k[J+8>>2]|0;O=L;while(1){L=O+16|0;Q=i[L>>0]|0;R=(Q&1)==0;S=R?(Q&255)>>>1:k[O+20>>2]|0;Q=R?L+1|0:k[O+24>>2]|0;L=S>>>0

      >>0;R=ZLa(N,Q,L?S:P)|0;T=P>>>0>>0;if((((R|0)==0?(T?-2147483648:0):R)|0)<0)U=O;else{R=ZLa(Q,N,T?P:S)|0;if((((R|0)==0?(L?-2147483648:0):R)|0)>=0)break;U=O+4|0}O=k[U>>2]|0;if(!O){V=-1;break c}}O=cqa(f,e,J)|0;P=k[O>>2]|0;if(!P){I=33;break b}V=k[P+28>>2]|0}else V=-1;while(0);J=k[C+64>>2]|0;P=l;l=(J|0)==1?105:(J|0)==2?111:45;J=(l&255|0)==(P<<24>>24|0);if(J)if((V|0)==(E|0))if((K|0)==(D|0)){if((k[G>>2]|0)!=(F|0)){W=1;I=41}}else{W=2;I=41}else{W=3;I=41}else{W=4;I=41}if((I|0)==41){I=0;P=k[G>>2]|0;if((P|0)!=(F|0)){x=0;xa(815,g|0,P|0);P=x;x=0;if(P&1){I=20;break}P=i[g>>0]|0;O=(P&1)==0;x=0;Fa(88,a|0,(O?t:k[q>>2]|0)|0,(O?(P&255)>>>1:k[A>>2]|0)|0)|0;P=x;x=0;if(P&1){I=45;break}K2a(g)}if((W|0)!=1){x=0;xa(605,a|0,58);P=x;x=0;if(P&1){I=20;break}if((K|0)!=(D|0)){x=0;xa(815,h|0,K|0);P=x;x=0;if(P&1){I=20;break}P=i[h>>0]|0;O=(P&1)==0;x=0;Fa(88,a|0,(O?p:k[b>>2]|0)|0,(O?(P&255)>>>1:k[s>>2]|0)|0)|0;P=x;x=0;if(P&1){I=52;break}K2a(h)}if((W|0)!=2){x=0;xa(605,a|0,58);P=x;x=0;if(P&1){I=20;break}if((V|0)!=(E|0)){x=0;xa(815,j|0,V|0);P=x;x=0;if(P&1){I=20;break}P=i[j>>0]|0;O=(P&1)==0;x=0;Fa(88,a|0,(O?o:k[c>>2]|0)|0,(O?(P&255)>>>1:k[n>>2]|0)|0)|0;P=x;x=0;if(P&1){I=59;break}K2a(j)}if((W|0)!=3){x=0;xa(605,a|0,58);P=x;x=0;if(P&1){I=20;break}if(!J?(x=0,xa(605,a|0,l|0),J=x,x=0,J&1):0){I=20;break}}}}}C=C+80|0;if((C|0)==(u|0)){y=m;I=13;break}else{D=K;E=V;F=k[G>>2]|0}}do if((I|0)==13){z=k[y>>2]|0;zi(f,z);r=d;return}else if((I|0)==20){F=Hc()|0;X=M;Y=F;I=21}else if((I|0)==33){F=Rd(8)|0;x=0;xa(671,F|0,296399);V=x;x=0;if(V&1){V=Hc()|0;E=M;Fc(F|0);X=E;Y=V;I=21;break}else{k[F>>2]=47544;x=0;fb(149,F|0,9024,933);x=0;F=Hc()|0;X=M;Y=F;I=21;break}}else if((I|0)==45){F=Hc()|0;V=M;K2a(g);Z=F;_=V}else if((I|0)==52){V=Hc()|0;F=M;K2a(h);Z=V;_=F}else if((I|0)==59){F=Hc()|0;V=M;K2a(j);Z=F;_=V}while(0);if((I|0)==21){Z=Y;_=X}zi(f,k[m>>2]|0);v=Z;w=_;K2a(a);Sc(v|0)}function wpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=(spa(a,b)|0)+100|0;if(k[c>>2]|0){d=k[c>>2]|0;return d|0}e=(spa(a,b)|0)+4|0;if(!(k[e>>2]|0)){d=k[c>>2]|0;return d|0}e=(spa(a,b)|0)+4|0;b=k[e>>2]|0;e=k[b+256>>2]|0;f=b+84|0;g=k[f>>2]|0;if((((k[b+88>>2]|0)-g|0)/116|0)>>>0>e>>>0)h=g;else{Kpb(f);h=k[f>>2]|0}f=KBa(12)|0;x=0;fb(366,f|0,a|0,h+(e*116|0)+4|0);e=x;x=0;if(e&1){e=Hc()|0;OBa(f);Sc(e|0)}e=k[c>>2]|0;k[c>>2]=f;if(!e){d=k[c>>2]|0;return d|0}K2a(e);OBa(e);d=k[c>>2]|0;return d|0}function xpa(a,b){a=a|0;b=b|0;return (spa(a,b)|0)+12|0}function ypa(a,b){a=a|0;b=b|0;return (spa(a,b)|0)+36|0}function zpa(a,b){a=a|0;b=b|0;return (spa(a,b)|0)+60|0}function Apa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+32|0;e=d+24|0;f=d+16|0;g=d;h=d+8|0;j=spa(b,c)|0;c=k[j+36>>2]|0;b=k[j+40>>2]|0;l=c;m=b;if((c|0)!=(b|0)?(k[j+56>>2]|0)==0:0){j=m-l|0;n=a;o=n+32|0;do{i[n>>0]=0;n=n+1|0}while((n|0)<(o|0));m=g;k[m>>2]=l;k[m+4>>2]=j;k[h>>2]=a;k[h+4>>2]=32;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];_q(f,e)|0;r=d;return}n=a;o=n+32|0;do{i[n>>0]=0;n=n+1|0}while((n|0)<(o|0));r=d;return}function Bpa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g;i=(spa(b,d)|0)+4|0;d=k[i>>2]|0;if(d){q2a(h,329672,0);x=0;La(60,a|0,d+56|0,c|0,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;K2a(h);Sc(f|0)}K2a(h);r=g;return}f=ei(c,280219,30)|0;c=zab(f+(k[(k[f>>2]|0)+-12>>2]|0)|0)|0;k[h>>2]=c;x=0;c=Ta(495,h|0,74148)|0;e=x;x=0;if(e&1){j=Hc()|0;l=M;$pb(h);Sc(j|0)}x=0;e=Ta(k[(k[c>>2]|0)+28>>2]|0,c|0,10)|0;c=x;x=0;if(c&1){j=Hc()|0;l=M;$pb(h);Sc(j|0)}$pb(h);pfb(f,e)|0;cdb(f)|0;iu(a,0);r=g;return}function Cpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=k[b+40>>2]|0;e=b+44|0;if((d|0)==(e|0))return;b=a+8|0;f=d;d=0;g=0;while(1){h=f+16|0;x=0;if((d|0)==(g|0)){Rx(a,h);i=x;x=0;if(i&1)break}else{n2a(d,h);h=x;x=0;if(h&1)break;k[c>>2]=(k[c>>2]|0)+12}h=k[f+4>>2]|0;if(!h){i=f;while(1){j=k[i+8>>2]|0;if((k[j>>2]|0)==(i|0)){l=j;break}else i=j}}else{i=h;while(1){j=k[i>>2]|0;if(!j){l=i;break}else i=j}}if((l|0)==(e|0)){m=3;break}f=l;d=k[c>>2]|0;g=k[b>>2]|0}if((m|0)==3)return;m=Hc()|0;b=k[a>>2]|0;if(!b)Sc(m|0);g=k[c>>2]|0;if((g|0)==(b|0))n=b;else{d=g;do{g=d+-12|0;k[c>>2]=g;K2a(g);d=k[c>>2]|0}while((d|0)!=(b|0));n=k[a>>2]|0}OBa(n);Sc(m|0)}function Dpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a+4>>2]=0;c=a+8|0;k[c>>2]=0;d=a+4|0;k[a>>2]=d;e=k[b+40>>2]|0;f=b+44|0;if((e|0)==(f|0))return;b=e;e=0;while(1){x=0;g=Ta(619,a|0,b+16|0)|0;h=x;x=0;if(h&1){i=4;break}k[g>>2]=e;g=k[b+4>>2]|0;if(!g){h=b;while(1){j=k[h+8>>2]|0;if((k[j>>2]|0)==(h|0)){l=j;break}else h=j}}else{h=g;while(1){j=k[h>>2]|0;if(!j){l=h;break}else h=j}}if((l|0)==(f|0)){i=3;break}b=l;e=k[c>>2]|0}if((i|0)==3)return;else if((i|0)==4){i=Hc()|0;zi(a,k[d>>2]|0);Sc(i|0)}}function Epa(a,b){a=a|0;b=b|0;return Fpa(a,b,3)|0}function Fpa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+160|0;e=d+144|0;f=d+104|0;g=d+88|0;h=d+72|0;j=d+32|0;l=d+16|0;m=d;if(!(i[a+36>>0]|0)){n=f;o=n+36|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));p=f+20|0;q=f+24|0;k[q>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;s=f+4|0;t=s+-4|0;u=s+16|0;v=f+8|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=40936;k[f>>2]=40900;k[p>>2]=40960;x=0;fb(140,h|0,279981,27);w=x;x=0;if(w&1){w=Hc()|0;y=w;z=M}else{k[g>>2]=21048;w=g+4|0;x=0;xa(604,w|0,h|0);A=x;x=0;if(A&1){A=Hc()|0;B=A;C=M}else{x=0;A=Ta(596,f|0,g|0)|0;f=x;x=0;if(!(f&1)){x=0;nb(135,A|0,280250,279741,344);x=0}A=Hc()|0;f=M;k[g>>2]=21048;K2a(w);B=A;C=f}K2a(h);y=B;z=C}k[s>>2]=40992;k[t>>2]=41020;k[u>>2]=41044;K2a(v);k[p>>2]=20796;p=k[q>>2]|0;if(p){x=0;v=Ba(k[(k[p>>2]|0)+16>>2]|0,p|0)|0;p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)}if(v)k[q>>2]=0}D=y;E=z;Sc(D|0)}z=spa(a,b)|0;switch(c<<24>>24){case 1:{F=z+88|0;break}case 2:{F=z+92|0;break}case 3:{F=z+84|0;break}default:{n=j;o=n+36|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));n=j+20|0;o=j+24|0;k[o>>2]=0;k[j+28>>2]=0;k[j+32>>2]=0;k[j+36>>2]=-1;b=j+4|0;a=b+-4|0;y=b+16|0;q=j+8|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[j+4>>2]=20924;k[j>>2]=20888;k[n>>2]=20948;x=0;fb(140,m|0,280359,27);e=x;x=0;if(e&1){e=Hc()|0;G=e;H=M}else{k[l>>2]=21048;e=l+4|0;x=0;xa(604,e|0,m|0);v=x;x=0;if(v&1){v=Hc()|0;I=v;J=M}else{x=0;v=Ta(494,j|0,l|0)|0;j=x;x=0;if(!(j&1)){x=0;nb(87,v|0,280250,279741,362);x=0}v=Hc()|0;j=M;k[l>>2]=21048;K2a(e);I=v;J=j}K2a(m);G=I;H=J}k[b>>2]=20980;k[a>>2]=21008;k[y>>2]=21032;K2a(q);k[n>>2]=20796;n=k[o>>2]|0;if(n){x=0;q=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(q)k[o>>2]=0}D=G;E=H;Sc(D|0)}}H=k[F>>2]|0;if(H){K=H;r=d;return K|0}H=KBa(12)|0;x=0;fb(367,H|0,k[z>>2]|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;z=M;OBa(H);D=c;E=z;Sc(D|0)}D=k[F>>2]|0;k[F>>2]=H;if(!D){K=H;r=d;return K|0}K2a(D);OBa(D);K=k[F>>2]|0;r=d;return K|0}function Gpa(a,b){a=a|0;b=b|0;var c=0;c=Hpa(a,b)|0;return k[c>>2]|0}function Hpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+96|0;d=c+72|0;e=c+32|0;f=c+16|0;g=c;h=dqa(a+40|0,b)|0;if((h|0)!=(a+44|0)){r=c;return h+28|0}h=e;c=h+36|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(c|0));h=e+20|0;c=e+24|0;k[c>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;a=e+4|0;b=a+-4|0;i=a+16|0;j=e+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=40936;k[e>>2]=40900;k[h>>2]=40960;x=0;fb(140,g|0,280387,28);d=x;x=0;if(d&1){d=Hc()|0;l=M;m=d}else{k[f>>2]=21048;d=f+4|0;x=0;xa(604,d|0,g|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(596,e|0,f|0)|0;e=x;x=0;if(!(e&1)){x=0;nb(135,n|0,280416,279741,612);x=0}n=Hc()|0;e=M;k[f>>2]=21048;K2a(d);o=e;p=n}K2a(g);l=o;m=p}k[a>>2]=40992;k[b>>2]=41020;k[i>>2]=41044;K2a(j);k[h>>2]=20796;h=k[c>>2]|0;if(!h)Sc(m|0);x=0;j=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}if(!j)Sc(m|0);k[c>>2]=0;Sc(m|0);return 0}function Ipa(a,b){a=a|0;b=b|0;var c=0;c=(Hpa(a,b)|0)+8|0;return k[c>>2]|0}function Jpa(a,b){a=a|0;b=b|0;var c=0;c=spa(a,b)|0;return k[c>>2]|0}function Kpa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+80|0;e=d;f=(spa(a,b)|0)+4|0;b=k[f>>2]|0;if(!b){g=0;r=d;return g|0}Jla(e,b,c);a:do if(!(k[e>>2]|0))h=0;else{c=k[f>>2]|0;b=k[c+256>>2]|0;a=c+84|0;i=k[a>>2]|0;do if((((k[c+88>>2]|0)-i|0)/116|0)>>>0<=b>>>0){x=0;va(1484,a|0);j=x;x=0;if(j&1){j=Hc()|0;l=j;m=M;break}else{n=k[a>>2]|0;o=14;break}}else{n=i;o=14}while(0);if((o|0)==14){i=n+(b*116|0)+4|0;a=n+(b*116|0)+8|0;c=k[a>>2]|0;j=k[i>>2]|0;if((c|0)==(j|0)){h=0;break}p=e+8|0;q=e+40|0;s=j;j=c;c=0;b:while(1){t=s;c:do if((k[t+(c*80|0)>>2]|0)==8){if(((j-s|0)/80|0)>>>0>c>>>0){u=t;v=s}else{x=0;va(1484,i|0);w=x;x=0;if(w&1)break b;w=k[i>>2]|0;u=w;v=w}w=k[u+(c*80|0)+40>>2]|0;if((w|0)==(k[q>>2]|0)){y=u+(c*80|0)+8|0;z=y+(w<<2)|0;if((y|0)==(z|0)){h=c;break a}else{A=y;B=p}while(1){if((k[A>>2]|0)!=(k[B>>2]|0)){C=v;break c}A=A+4|0;if((A|0)==(z|0)){h=c;break a}else B=B+4|0}}else C=v}else C=s;while(0);c=c+1|0;j=k[a>>2]|0;if(c>>>0>=((j-C|0)/80|0)>>>0){h=0;break a}else s=C}s=Hc()|0;l=s;m=M}s=k[e+72>>2]|0;if(s)j0a(s);s=k[e+60>>2]|0;if(!s)Sc(l|0);j0a(s);Sc(l|0)}while(0);l=k[e+72>>2]|0;if(l)j0a(l);l=k[e+60>>2]|0;if(l)j0a(l);g=h;r=d;return g|0}function Lpa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d+8|0;f=d;g=c+8|0;h=Hpa(b,k[g>>2]|0)|0;Rsa(e,(k[h>>2]|0)+160|0,k[c>>2]|0);h=k[e>>2]|0;i=k[e+4>>2]|0;e=Hpa(b,k[g>>2]|0)|0;Rsa(f,(k[e>>2]|0)+160|0,k[c+4>>2]|0);c=(k[f>>2]|0)+1|0;e=(k[f+4>>2]|0)+1|0;k[a>>2]=h+1;k[a+4>>2]=i+1;k[a+8>>2]=c;k[a+12>>2]=e;r=d;return}function Mpa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;b=r;r=r+112|0;e=b+88|0;f=b+76|0;g=b+64|0;h=b+52|0;j=b+32|0;l=b+12|0;m=b;n=i[c>>0]|0;o=(n&1)==0;if(((o?(n&255)>>>1:k[c+4>>2]|0)|0)!=0?(i[(o?c+1|0:k[c+8>>2]|0)>>0]|0)==46:0){n2a(g,c);x=0;xa(604,h|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;q=d;K2a(g);Sc(q|0)}x=0;Ba(573,h|0)|0;d=x;x=0;do if(!(d&1)?(x=0,xa(629,j|0,g|0),o=x,x=0,!(o&1)):0){o=j+12|0;n=l+12|0;s=j+16|0;t=l+16|0;while(1){x=0;xa(630,l|0,g|0);u=x;x=0;if(u&1){v=15;break}if((k[o>>2]|0)==(k[n>>2]|0)){u=(k[s>>2]|0)==(k[t>>2]|0);K2a(l);if(u){v=12;break}}else K2a(l);x=0;fb(140,f|0,280504,2);u=x;x=0;if(u&1){v=15;break}u=mo(j,f)|0;K2a(f);if(u){x=0;fb(140,e|0,324339,1);u=x;x=0;if(u&1){v=15;break}u=mo(j,e)|0;K2a(e);if((u|0)!=0?(x=0,Ta(501,h|0,j|0)|0,u=x,x=0,u&1):0){v=15;break}}else{x=0;xa(632,m|0,h|0);u=x;x=0;if(u&1){v=15;break}x=0;Ta(493,h|0,m|0)|0;u=x;x=0;if(u&1){v=21;break}K2a(m)}x=0;va(1468,j|0);u=x;x=0;if(u&1){v=15;break}}if((v|0)==12){K2a(j);x=0;xa(604,a|0,h|0);t=x;x=0;if(t&1){v=14;break}K2a(h);K2a(g);r=b;return}else if((v|0)==15){t=Hc()|0;w=M;y=t}else if((v|0)==21){t=Hc()|0;s=M;K2a(m);w=s;y=t}K2a(j);z=w;A=y}else v=14;while(0);if((v|0)==14){v=Hc()|0;z=M;A=v}K2a(h);p=z;q=A;K2a(g);Sc(q|0)}n2a(a,c);r=b;return}function Npa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0;e=r;r=r+16|0;f=e;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;g=k[b+24>>2]|0;h=k[b+28>>2]|0;a:do if((g|0)==(h|0)){j=0;l=3}else{b=d+4|0;m=c+4|0;n=c+1|0;o=c+8|0;p=d+1|0;q=d+8|0;s=g;t=0;b:while(1){if(t){u=i[s+12>>0]|0;if(!(u&1))v=(u&255)>>>1;else v=k[s+16>>2]|0;if(v>>>0<=t>>>0)w=t;else l=9}else l=9;c:do if((l|0)==9){l=0;u=i[s>>0]|0;y=(u&1)==0;z=y?(u&255)>>>1:k[s+4>>2]|0;u=i[d>>0]|0;A=(u&1)==0;if(z>>>0<=(A?(u&255)>>>1:k[b>>2]|0)>>>0){u=y?s+1|0:k[s+8>>2]|0;y=u+z|0;if(z){z=u;u=A?p:k[q>>2]|0;while(1){if((i[z>>0]|0)!=(i[u>>0]|0)){w=t;break c}z=z+1|0;if((z|0)==(y|0))break;else u=u+1|0}}u=s+12|0;y=i[u>>0]|0;z=(y&1)==0;A=k[s+16>>2]|0;B=(y&255)>>>1;y=z?B:A;C=i[c>>0]|0;D=(C&1)==0;if(y>>>0<=(D?(C&255)>>>1:k[m>>2]|0)>>>0){C=z?u+1|0:k[s+20>>2]|0;u=C+y|0;if(y){y=C;C=D?n:k[o>>2]|0;while(1){if((i[y>>0]|0)!=(i[C>>0]|0)){w=t;break c}y=y+1|0;if((y|0)==(u|0))break;else C=C+1|0}}x=0;Ta(493,f|0,s+24|0)|0;C=x;x=0;if(C&1)break b;else w=z?B:A}else w=t}else w=t}while(0);s=s+36|0;if((s|0)==(h|0)){j=w;l=3;break a}else t=w}t=Hc()|0;E=t;F=M}while(0);do if((l|0)==3){x=0;xa(604,a|0,f|0);w=x;x=0;if(w&1){w=Hc()|0;E=w;F=M;break}w=i[c>>0]|0;h=(w&1)==0;d=h?c+1|0:k[c+8>>2]|0;v=d+j|0;g=h?(w&255)>>>1:k[c+4>>2]|0;w=d+g|0;d=v;h=i[a>>0]|0;if(!(h&1)){G=(h&255)>>>1;H=10;I=h}else{h=k[a>>2]|0;G=k[a+4>>2]|0;H=(h&-2)+-1|0;I=h&255}h=w-d|0;if((g|0)==(j|0)){K2a(f);r=e;return}do if((H-G|0)>>>0>>0){x=0;Pa(42,a|0,H|0,G+h-H|0,G|0,G|0,0,0);g=x;x=0;if(!(g&1)){J=i[a>>0]|0;break}g=Hc()|0;t=M;K2a(a);K=t;L=g;K2a(f);Sc(L|0)}else J=I;while(0);if(!(J&1))N=a+1|0;else N=k[a+8>>2]|0;g=v;t=d;s=N+G|0;while(1){i[s>>0]=i[g>>0]|0;o=s+1|0;n=t+1|0;if((n|0)==(w|0)){O=o;break}else{g=n;t=n;s=o}}i[O>>0]=0;s=G+h|0;if(!(i[a>>0]&1)){i[a>>0]=s<<1;K2a(f);r=e;return}else{k[a+4>>2]=s;K2a(f);r=e;return}}while(0);K=F;L=E;K2a(f);Sc(L|0)}function Opa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,329672,0);x=0;e=Ta(620,b|0,d|0)|0;b=x;x=0;if(!(b&1)?(x=0,xa(604,a|0,k[(k[e>>2]|0)+24>>2]|0),e=x,x=0,!(e&1)):0){K2a(d);r=c;return}c=Hc()|0;K2a(d);Sc(c|0)}function Ppa(){var a=0;a=gp()|0;k[10819]=a;a=gp()|0;k[10820]=a;a=hp()|0;k[10821]=a;k[10822]=0;k[10823]=0;k[10824]=0;return}function Qpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/36|0)+1|0;if(e>>>0>119304647){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/36|0;if(g>>>0<59652323){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/36|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=119304647;n=((k[c>>2]|0)-f|0)/36|0;o=6}if((o|0)==6){i=m;j=KBa(m*36|0)|0;l=n}n=j+(l*36|0)|0;m=n;o=j+(i*36|0)|0;x=0;xa(604,n|0,b|0);i=x;x=0;if(i&1){i=Hc()|0;p=M;q=i}else{i=j+(l*36|0)+12|0;x=0;xa(604,i|0,b+12|0);f=x;x=0;do if(f&1){h=Hc()|0;r=M;s=h}else{x=0;xa(604,j+(l*36|0)+24|0,b+24|0);h=x;x=0;if(h&1){h=Hc()|0;g=M;K2a(i);r=g;s=h;break}h=n+36|0;g=k[a>>2]|0;e=k[c>>2]|0;if((e|0)==(g|0)){t=m;u=g;v=g}else{w=e;e=n;y=m;while(1){z=e+-36|0;A=w;w=w+-36|0;k[z>>2]=k[w>>2];k[z+4>>2]=k[w+4>>2];k[z+8>>2]=k[w+8>>2];k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;z=e+-24|0;B=A+-24|0;k[z>>2]=k[B>>2];k[z+4>>2]=k[B+4>>2];k[z+8>>2]=k[B+8>>2];k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;B=e+-12|0;z=A+-12|0;k[B>>2]=k[z>>2];k[B+4>>2]=k[z+4>>2];k[B+8>>2]=k[z+8>>2];k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;e=y+-36|0;z=e;if((w|0)==(g|0)){C=z;break}else y=z}t=C;u=k[a>>2]|0;v=k[c>>2]|0}k[a>>2]=t;k[c>>2]=h;k[d>>2]=o;y=u;if((v|0)!=(y|0)){g=v;do{K2a(g+-12|0);K2a(g+-24|0);g=g+-36|0;K2a(g)}while((g|0)!=(y|0))}if(!u)return;OBa(u);return}while(0);K2a(n);p=r;q=s}if(!j)Sc(q|0);OBa(j);Sc(q|0)}function Rpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=Eqa(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(48)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}b=f+28|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function Spa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;k[a+4>>2]=-1;k[a+8>>2]=-1;d=a+12|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[d+24>>2]=0;k[a+44>>2]=-1;k[a+48>>2]=-1;d=a+52|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[d+24>>2]=0;k[a+84>>2]=-1;k[a+88>>2]=-1;d=a+92|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[d+24>>2]=0;k[a+124>>2]=-1;k[a+128>>2]=-1;d=a+132|0;e=d+52|0;do{k[d>>2]=0;d=d+4|0}while((d|0)<(e|0));x=0;fb(368,a|0,b|0,c|0);c=x;x=0;if(!(c&1))return;c=Hc()|0;b=k[a+180>>2]|0;if(b)j0a(b);K2a(a+160|0);K2a(a+140|0);b=k[a+136>>2]|0;if(b)j0a(b);K2a(a+100|0);b=k[a+96>>2]|0;if(b)j0a(b);K2a(a+60|0);b=k[a+56>>2]|0;if(b)j0a(b);K2a(a+20|0);b=k[a+16>>2]|0;if(!b)Sc(c|0);j0a(b);Sc(c|0)}function Tpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=yqa(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(32)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}k[f+28>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function Upa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;e=_pa(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(132)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}b=f+52|0;i=f+56|0;j=f+28|0;l=j+64|0;do{k[j>>2]=0;j=j+4|0}while((j|0)<(l|0));k[b>>2]=i;k[f+64>>2]=0;k[f+68>>2]=0;k[f+72>>2]=0;i=f+80|0;k[i>>2]=0;k[f+84>>2]=0;k[f+76>>2]=i;k[f+88>>2]=0;k[f+92>>2]=0;k[f+96>>2]=0;i=f+104|0;k[i>>2]=0;k[f+108>>2]=0;k[f+100>>2]=i;i=f+112|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;i=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=i;k[e>>2]=f;i=k[k[a>>2]>>2]|0;if(!i)m=f;else{k[a>>2]=i;m=k[e>>2]|0}ui(k[a+4>>2]|0,m);m=a+8|0;k[m>>2]=(k[m>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function Vpa(a,b){a=a|0;b=b|0;if(!b)return;else{Vpa(a,k[b>>2]|0);Vpa(a,k[b+4>>2]|0);K2a(b+16|0);OBa(b);return}}function Wpa(a,b){a=a|0;b=b|0;if(!b)return;else{Wpa(a,k[b>>2]|0);Wpa(a,k[b+4>>2]|0);OBa(b);return}}function Xpa(a,b){a=a|0;b=b|0;if(!b)return;Xpa(a,k[b>>2]|0);Xpa(a,k[b+4>>2]|0);a=k[b+40>>2]|0;if(a)j0a(a);K2a(b+16|0);OBa(b);return}function Ypa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=iqa(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(44)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}k[f+28>>2]=-1;k[f+32>>2]=-1;k[f+36>>2]=0;k[f+40>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function Zpa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;i[a>>0]=b&1;k[a+4>>2]=c;k[a+12>>2]=0;k[a+16>>2]=0;k[a+8>>2]=a+12;k[a+24>>2]=0;k[a+28>>2]=0;k[a+20>>2]=a+24;c=a+32|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;k[c+20>>2]=0;k[a+56>>2]=1;k[a+60>>2]=0;k[a+64>>2]=0;k[a+68>>2]=0;k[a+76>>2]=0;k[a+80>>2]=0;k[a+72>>2]=a+76;k[a+84>>2]=0;k[a+88>>2]=0;k[a+92>>2]=0;k[a+100>>2]=0;k[a+104>>2]=0;k[a+96>>2]=a+100;k[a+112>>2]=0;k[a+116>>2]=0;k[a+108>>2]=a+112;k[a+120>>2]=0;k[a+124>>2]=0;k[a+128>>2]=0;k[a+136>>2]=0;k[a+140>>2]=0;k[a+132>>2]=a+136;k[a+144>>2]=0;k[a+148>>2]=0;k[a+152>>2]=0;k[a+156>>2]=-1;k[a+160>>2]=-1;k[a+164>>2]=0;k[a+168>>2]=0;k[a+176>>2]=0;k[a+180>>2]=0;k[a+172>>2]=a+176;k[a+188>>2]=0;k[a+192>>2]=0;k[a+184>>2]=a+188;k[a+200>>2]=0;k[a+204>>2]=0;k[a+196>>2]=a+200;k[a+212>>2]=0;k[a+216>>2]=0;k[a+208>>2]=a+212;c=a+220|0;b=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));k[a+256>>2]=-1;k[a+264>>2]=0;k[a+268>>2]=0;k[a+260>>2]=a+264;k[a+276>>2]=0;k[a+280>>2]=0;k[a+272>>2]=a+276;d=a+284|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[a+308>>2]=1;k[a+312>>2]=0;k[a+316>>2]=0;k[a+320>>2]=0;k[a+328>>2]=0;k[a+332>>2]=0;k[a+324>>2]=a+328;k[a+336>>2]=0;k[a+340>>2]=0;k[a+344>>2]=0;k[a+352>>2]=0;k[a+356>>2]=0;k[a+348>>2]=a+352;k[a+364>>2]=0;k[a+368>>2]=0;k[a+360>>2]=a+364;k[a+372>>2]=0;k[a+376>>2]=0;k[a+380>>2]=0;k[a+388>>2]=0;k[a+392>>2]=0;k[a+384>>2]=a+388;k[a+396>>2]=0;k[a+400>>2]=0;k[a+404>>2]=0;k[a+408>>2]=-1;k[a+412>>2]=-1;k[a+416>>2]=0;k[a+420>>2]=0;k[a+428>>2]=0;k[a+432>>2]=0;k[a+424>>2]=a+428;k[a+440>>2]=0;k[a+444>>2]=0;k[a+436>>2]=a+440;k[a+452>>2]=0;k[a+456>>2]=0;k[a+448>>2]=a+452;k[a+464>>2]=0;k[a+468>>2]=0;k[a+460>>2]=a+464;c=a+472|0;b=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));return}function _pa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function $pa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+16|0;d=c;k[a>>2]=42304;i[a+4>>0]=0;i[a+5>>0]=0;e=a+8|0;f=a+28|0;k[a+32>>2]=0;k[a+36>>2]=0;g=a+32|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;i[e+16>>0]=0;k[f>>2]=g;e=a+40|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[e>>2]=0;h=a+44|0;k[h>>2]=0;k[a+48>>2]=0;x=0;j=Ba(563,16)|0;l=x;x=0;if(!(l&1)){k[h>>2]=j;k[e>>2]=j;k[a+48>>2]=j+16;x=0;xa(604,j|0,d|0);l=x;x=0;if(!(l&1)){k[j+12>>2]=k[d+12>>2];k[h>>2]=(k[h>>2]|0)+16;K2a(d);k[a+52>>2]=b;r=c;return}c=Hc()|0;b=M;j=k[e>>2]|0;if(!j){m=c;n=b}else{l=k[h>>2]|0;if((l|0)==(j|0))o=j;else{p=l;do{l=p+-16|0;k[h>>2]=l;K2a(l);p=k[h>>2]|0}while((p|0)!=(j|0));o=k[e>>2]|0}OBa(o);m=c;n=b}}else{b=Hc()|0;m=b;n=M}K2a(d);toa(f,k[g>>2]|0);g=k[a+12>>2]|0;if(!g)Sc(m|0);f=a+16|0;a=k[f>>2]|0;if((a|0)!=(g|0))k[f>>2]=a+(~((a+-4-g|0)>>>2)<<2);OBa(g);Sc(m|0)}function aqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=a+4|0;a=k[c>>2]|0;if(a){d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=e?b+1|0:k[b+8>>2]|0;b=c;e=a;a:while(1){a=e;while(1){g=a+16|0;h=i[g>>0]|0;j=(h&1)==0;l=j?(h&255)>>>1:k[a+20>>2]|0;h=ZLa(j?g+1|0:k[a+24>>2]|0,d,f>>>0>>0?f:l)|0;if((((h|0)==0?(l>>>0>>0?-2147483648:0):h)|0)>=0){m=a;break}a=k[a+4>>2]|0;if(!a){n=b;break a}}e=k[m>>2]|0;if(!e){n=m;break}else b=m}if((n|0)!=(c|0)?(m=n+16|0,b=i[m>>0]|0,e=(b&1)==0,a=e?(b&255)>>>1:k[n+20>>2]|0,b=ZLa(d,e?m+1|0:k[n+24>>2]|0,a>>>0>>0?a:f)|0,(((b|0)==0?(f>>>0>>0?-2147483648:0):b)|0)>=0):0){o=n;return o|0}}o=c;return o|0}function bqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=cqa(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(32)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}k[f+28>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function cqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function dqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=a+4|0;a=k[c>>2]|0;if(a){d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=e?b+1|0:k[b+8>>2]|0;b=c;e=a;a:while(1){a=e;while(1){g=a+16|0;h=i[g>>0]|0;j=(h&1)==0;l=j?(h&255)>>>1:k[a+20>>2]|0;h=ZLa(j?g+1|0:k[a+24>>2]|0,d,f>>>0>>0?f:l)|0;if((((h|0)==0?(l>>>0>>0?-2147483648:0):h)|0)>=0){m=a;break}a=k[a+4>>2]|0;if(!a){n=b;break a}}e=k[m>>2]|0;if(!e){n=m;break}else b=m}if((n|0)!=(c|0)?(m=n+16|0,b=i[m>>0]|0,e=(b&1)==0,a=e?(b&255)>>>1:k[n+20>>2]|0,b=ZLa(d,e?m+1|0:k[n+24>>2]|0,a>>>0>>0?a:f)|0,(((b|0)==0?(f>>>0>>0?-2147483648:0):b)|0)>=0):0){o=n;return o|0}}o=c;return o|0}function eqa(a){a=a|0;k[a>>2]=43256;Mla(a+272|0);Mla(a+20|0);c0a(a);return}function fqa(a){a=a|0;k[a>>2]=43256;Mla(a+272|0);Mla(a+20|0);c0a(a);OBa(a);return}function gqa(a){a=a|0;Mla(a+272|0);Mla(a+20|0);return}function hqa(a){a=a|0;OBa(a);return}function iqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function jqa(a){a=a|0;return}function kqa(a){a=a|0;OBa(a);return}function lqa(a){a=a|0;var b=0,c=0;b=KBa(20)|0;c=a+4|0;k[b>>2]=43212;a=b+4|0;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];k[a+12>>2]=k[c+12>>2];return b|0}function mqa(a,b){a=a|0;b=b|0;var c=0;c=a+4|0;k[b>>2]=43212;a=b+4|0;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];k[a+12>>2]=k[c+12>>2];return}function nqa(a){a=a|0;return}function oqa(a){a=a|0;OBa(a);return}function pqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+48|0;d=c+40|0;e=c+36|0;f=c+24|0;g=c+12|0;h=c;j=k[b>>2]|0;k[e>>2]=j;b=k[a+8>>2]|0;l=k[a+4>>2]|0;m=l+4|0;n=k[m>>2]|0;o=j;do if(n){p=n;do{q=k[p+16>>2]|0;if(q>>>0>j>>>0)s=p;else{if(q>>>0>=j>>>0){t=68;break}s=p+4|0}p=k[s>>2]|0}while((p|0)!=0);if((t|0)==68){r=c;return}p=n;while(1){q=k[p+16>>2]|0;if(q>>>0>j>>>0){u=k[p>>2]|0;if(!u){v=p;w=p;t=10;break}else y=u}else{if(q>>>0>=j>>>0){z=p;t=15;break}q=p+4|0;u=k[q>>2]|0;if(!u){A=q;B=p;t=14;break}else y=u}p=y}if((t|0)==10){k[d>>2]=w;C=v;D=d;E=w;break}else if((t|0)==14){k[d>>2]=B;C=A;D=d;E=B;break}else if((t|0)==15){k[d>>2]=z;C=d;D=d;E=z;break}}else{k[d>>2]=m;C=m;D=d;E=m}while(0);if(!(k[C>>2]|0)){m=KBa(20)|0;k[m+16>>2]=o;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=E;k[C>>2]=m;E=k[k[l>>2]>>2]|0;if(!E)F=m;else{k[l>>2]=E;F=k[C>>2]|0}ui(k[l+4>>2]|0,F);F=l+8|0;k[F>>2]=(k[F>>2]|0)+1}T$(f,(k[j+8>>2]|0)+24|0);j=k[f>>2]|0;F=f+4|0;l=k[F>>2]|0;do if((j|0)==(l|0))G=j;else{C=b+40|0;E=b+44|0;m=a+12|0;D=j;while(1){z=k[D>>2]|0;if((z|0)!=0?(B=iDa(z,5224,5296,0)|0,(B|0)!=0):0){x=0;z=Ba(k[(k[B>>2]|0)+16>>2]|0,B|0)|0;A=x;x=0;if(A&1){t=55;break}A=z+4|0;w=i[A>>0]|0;v=z+8|0;y=k[v>>2]|0;x=0;fb(140,g|0,329672,0);n=x;x=0;if(n&1){t=55;break}x=0;pa(57,(((w&1)==0?(w&255)>>>1:y)|0)!=0|0,g|0,498,279741,280637);y=x;x=0;if(y&1){t=57;break}K2a(g);y=k[E>>2]|0;a:do if(!y)H=0;else{w=i[A>>0]|0;n=(w&1)==0;s=n?(w&255)>>>1:k[v>>2]|0;w=n?A+1|0:k[z+12>>2]|0;n=y;while(1){p=n+16|0;u=i[p>>0]|0;q=(u&1)==0;I=q?(u&255)>>>1:k[n+20>>2]|0;u=q?p+1|0:k[n+24>>2]|0;p=I>>>0>>0;q=ZLa(w,u,p?I:s)|0;J=s>>>0>>0;if((((q|0)==0?(J?-2147483648:0):q)|0)<0)K=n;else{q=ZLa(u,w,J?s:I)|0;if((((q|0)==0?(p?-2147483648:0):q)|0)>=0){H=1;break a}K=n+4|0}n=k[K>>2]|0;if(!n){H=0;break}}}while(0);x=0;fb(140,h|0,329672,0);y=x;x=0;if(y&1){t=55;break}x=0;pa(57,(H|0)!=0|0,h|0,499,279741,280637);y=x;x=0;if(y&1){t=58;break}K2a(h);x=0;y=Ta(608,C|0,A|0)|0;z=x;x=0;if(z&1){t=55;break}z=k[y+8>>2]|0;x=0;y=Ba(k[(k[B>>2]|0)+16>>2]|0,B|0)|0;v=x;x=0;if(v&1){t=55;break}k[y+16>>2]=z;z=k[m>>2]|0;x=0;y=Ta(608,C|0,A|0)|0;v=x;x=0;if(v&1){t=55;break}k[d>>2]=y;y=k[z+16>>2]|0;if(!y){t=52;break}x=0;xa(k[(k[y>>2]|0)+24>>2]|0,y|0,d|0);y=x;x=0;if(y&1){t=55;break}}D=D+8|0;if((D|0)==(l|0)){t=23;break}}if((t|0)==23){G=k[f>>2]|0;break}else if((t|0)==52){D=Rd(4)|0;k[D>>2]=26200;x=0;fb(149,D|0,2216,320);x=0;D=Hc()|0;L=D;N=M;t=56}else if((t|0)==55){D=Hc()|0;L=D;N=M;t=56}else if((t|0)==57){D=Hc()|0;C=M;K2a(g);O=C;P=D}else if((t|0)==58){D=Hc()|0;C=M;K2a(h);O=C;P=D}if((t|0)==56){O=N;P=L}D=k[f>>2]|0;if(!D)Sc(P|0);C=k[F>>2]|0;if((C|0)==(D|0))Q=D;else{m=C;while(1){C=m+-8|0;k[F>>2]=C;E=k[m+-4>>2]|0;if(!E)R=C;else{j0a(E);R=k[F>>2]|0}if((R|0)==(D|0))break;else m=R}Q=k[f>>2]|0}OBa(Q);Sc(P|0)}while(0);if(G){P=k[F>>2]|0;if((P|0)==(G|0))S=G;else{Q=P;while(1){P=Q+-8|0;k[F>>2]=P;R=k[Q+-4>>2]|0;if(!R)T=P;else{j0a(R);T=k[F>>2]|0}if((T|0)==(G|0))break;else Q=T}S=k[f>>2]|0}OBa(S)}S=k[a+16>>2]|0;a=S+4|0;f=k[a>>2]|0;if((f|0)==(k[S+8>>2]|0)){sqa(S,e);r=c;return}else{k[f>>2]=o;k[a>>2]=(k[a>>2]|0)+4;r=c;return}}function qqa(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==280583?a+4|0:0)|0}function rqa(a){a=a|0;return 7512}function sqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function tqa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=43184;b=a+12|0;xqa(a+40|0,k[a+44>>2]|0);xqa(a+28|0,k[a+32>>2]|0);c=k[b>>2]|0;if(!c){c0a(a);return}d=a+16|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f);c0a(a);return}function uqa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=43184;b=a+12|0;xqa(a+40|0,k[a+44>>2]|0);xqa(a+28|0,k[a+32>>2]|0);c=k[b>>2]|0;if(!c){c0a(a);OBa(a);return}d=a+16|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f);c0a(a);OBa(a);return}function vqa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=a+12|0;xqa(a+40|0,k[a+44>>2]|0);xqa(a+28|0,k[a+32>>2]|0);c=k[b>>2]|0;if(!c)return;d=a+16|0;a=k[d>>2]|0;if((a|0)==(c|0))e=c;else{f=a;while(1){a=f+-8|0;k[d>>2]=a;g=k[f+-4>>2]|0;if(!g)h=a;else{j0a(g);h=k[d>>2]|0}if((h|0)==(c|0))break;else f=h}e=k[b>>2]|0}OBa(e);return}function wqa(a){a=a|0;OBa(a);return}function xqa(a,b){a=a|0;b=b|0;if(!b)return;xqa(a,k[b>>2]|0);xqa(a,k[b+4>>2]|0);a=k[b+24>>2]|0;if(a)j0a(a);OBa(b);return}function yqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function zqa(a){a=a|0;k[a>>2]=43156;Dqa(a+12|0);c0a(a);return}function Aqa(a){a=a|0;k[a>>2]=43156;Dqa(a+12|0);c0a(a);OBa(a);return}function Bqa(a){a=a|0;Dqa(a+12|0);return}function Cqa(a){a=a|0;OBa(a);return}function Dqa(a){a=a|0;var b=0;b=k[a+180>>2]|0;if(b)j0a(b);K2a(a+160|0);K2a(a+140|0);b=k[a+136>>2]|0;if(b)j0a(b);K2a(a+100|0);b=k[a+96>>2]|0;if(b)j0a(b);K2a(a+60|0);b=k[a+56>>2]|0;if(b)j0a(b);K2a(a+20|0);b=k[a+16>>2]|0;if(!b)return;j0a(b);return}function Eqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function Fqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;d=r;r=r+336|0;e=d+312|0;f=d+324|0;g=d+288|0;h=d+260|0;j=d+248|0;l=d+200|0;m=d+96|0;n=d+48|0;o=d+272|0;p=d+136|0;q=d+24|0;s=d;t=k[c>>2]|0;u=c+4|0;v=k[u>>2]|0;if((t|0)==(v|0))w=0;else{y=t;t=0;while(1){z=((k[y>>2]|0)==0&1)+t|0;y=y+4|0;if((y|0)==(v|0)){w=z;break}else t=z}}q2a(e,329672,0);x=0;pa(57,(w|0)==0|0,e|0,45,281120,281164);w=x;x=0;if(w&1){w=Hc()|0;t=M;K2a(e);A=w;B=t;Sc(A|0)}K2a(e);k[f+4>>2]=0;k[f+8>>2]=0;e=f+4|0;k[f>>2]=e;k[g>>2]=0;k[g+4>>2]=b;i[g+8>>0]=1;k[g+16>>2]=0;k[g+20>>2]=0;t=g+16|0;k[g+12>>2]=t;x=0;xa(698,h|0,g|0);w=x;x=0;a:do if(!(w&1)){v=k[h>>2]|0;y=h+4|0;z=k[y>>2]|0;do if((v|0)==(z|0))C=v;else{D=m+32|0;E=l+4|0;F=l+8|0;G=v;b:while(1){H=G+32|0;I=k[H>>2]|0;x=0;fb(140,j|0,329672,0);J=x;x=0;if(J&1){K=34;break}x=0;pa(49,(I|0)!=0|0,j|0,51,281120,281164);I=x;x=0;if(I&1){K=36;break}K2a(j);I=k[H>>2]|0;x=0;H=Ba(563,108)|0;J=x;x=0;if(J&1){K=34;break}k[H+4>>2]=0;k[H+8>>2]=0;k[H>>2]=30572;J=H+12|0;x=0;xa(668,J|0,I|0);I=x;x=0;if(I&1){L=H;K=28;break}k[m>>2]=0;k[D>>2]=1;k[l>>2]=J;k[E>>2]=H;h0a(H);J=F;I=m;N=J+40|0;do{k[J>>2]=k[I>>2];J=J+4|0;I=I+4|0}while((J|0)<(N|0));j0a(H);I=k[b>>2]|0;J=k[G+4>>2]|0;N=I+(J*80|0)|0;O=k[G>>2]|0;if((O|0)!=(J|0)){J=I+(O*80|0)|0;do{x=0;O=Ta(621,f|0,J+48|0)|0;I=x;x=0;if(I&1){K=41;break b}x=0;fb(231,n|0,l|0,J|0);I=x;x=0;if(I&1){K=41;break b}x=0;Ta(535,O|0,n|0)|0;O=x;x=0;if(O&1){K=41;break b}J=J+80|0}while((J|0)!=(N|0))}N=k[E>>2]|0;if(N)j0a(N);G=G+48|0;if((G|0)==(z|0)){K=7;break}}if((K|0)==7){C=k[h>>2]|0;break}else if((K|0)==28){G=Hc()|0;F=M;c0a(L);OBa(L);P=F;Q=G;K=35}else if((K|0)==34){G=Hc()|0;P=M;Q=G;K=35}else if((K|0)==36){G=Hc()|0;F=M;K2a(j);R=G;S=F}else if((K|0)==41){F=Hc()|0;G=M;D=k[E>>2]|0;if(!D){R=F;S=G}else{j0a(D);R=F;S=G}}if((K|0)==35){R=Q;S=P}G=k[h>>2]|0;if(!G){T=R;U=S;break a}F=k[y>>2]|0;if((F|0)==(G|0))V=G;else{D=F;do{k[y>>2]=D+-48;F=k[D+-4>>2]|0;if(F)j0a(F);F=k[D+-12>>2]|0;if(F)j0a(F);F=k[D+-40>>2]|0;N=F;if(F){J=D+-36|0;H=k[J>>2]|0;if((H|0)!=(F|0))k[J>>2]=H+(~((H+-4-N|0)>>>2)<<2);OBa(F)}D=k[y>>2]|0}while((D|0)!=(G|0));V=k[h>>2]|0}OBa(V);T=R;U=S;break a}while(0);if(C){z=k[y>>2]|0;if((z|0)==(C|0))W=C;else{v=z;do{k[y>>2]=v+-48;z=k[v+-4>>2]|0;if(z)j0a(z);z=k[v+-12>>2]|0;if(z)j0a(z);z=k[v+-40>>2]|0;G=z;if(z){D=v+-36|0;E=k[D>>2]|0;if((E|0)!=(z|0))k[D>>2]=E+(~((E+-4-G|0)>>>2)<<2);OBa(z)}v=k[y>>2]|0}while((v|0)!=(C|0));W=k[h>>2]|0}OBa(W)}x=0;xa(876,o|0,c|0);v=x;x=0;if(!(v&1)){k[a+4>>2]=0;k[a+8>>2]=0;v=a+4|0;k[a>>2]=v;y=q+16|0;k[y>>2]=q;k[q>>2]=43308;k[q+4>>2]=o;k[q+8>>2]=a;k[q+12>>2]=f;z=s+16|0;k[z>>2]=s;k[s>>2]=43352;k[s+4>>2]=a;x=0;fb(369,p|0,q|0,s|0);G=x;x=0;c:do if(G&1){E=Hc()|0;D=M;F=k[z>>2]|0;if((F|0)!=(s|0)){if(F)Sf[k[(k[F>>2]|0)+20>>2]&2047](F)}else Sf[k[(k[F>>2]|0)+16>>2]&2047](F);F=k[y>>2]|0;if((F|0)==(q|0)){Sf[k[(k[F>>2]|0)+16>>2]&2047](F);X=E;Y=D;break}if(!F){X=E;Y=D}else{Sf[k[(k[F>>2]|0)+20>>2]&2047](F);X=E;Y=D}}else{D=k[z>>2]|0;if((D|0)!=(s|0)){if(D)Sf[k[(k[D>>2]|0)+20>>2]&2047](D)}else Sf[k[(k[s>>2]|0)+16>>2]&2047](s);D=k[y>>2]|0;if((D|0)!=(q|0)){if(D)Sf[k[(k[D>>2]|0)+20>>2]&2047](D)}else Sf[k[(k[q>>2]|0)+16>>2]&2047](q);D=k[c>>2]|0;E=k[u>>2]|0;d:do if((D|0)!=(E|0)){F=D;while(1){N=k[F>>2]|0;x=0;xa(k[(k[N>>2]|0)+12>>2]|0,N|0,p|0);N=x;x=0;if(N&1)break;F=F+4|0;if((F|0)==(E|0))break d}F=Hc()|0;N=M;k[p>>2]=43396;H=k[p+56>>2]|0;if((H|0)!=(p+40|0)){if(H)Sf[k[(k[H>>2]|0)+20>>2]&2047](H)}else Sf[k[(k[H>>2]|0)+16>>2]&2047](H);H=k[p+32>>2]|0;if((H|0)!=(p+16|0)){if(H)Sf[k[(k[H>>2]|0)+20>>2]&2047](H)}else Sf[k[(k[H>>2]|0)+16>>2]&2047](H);H=k[p+4>>2]|0;if(!H){X=F;Y=N;break c}J=p+8|0;O=k[J>>2]|0;if((O|0)!=(H|0))k[J>>2]=O+(~((O+-4-H|0)>>>2)<<2);OBa(H);X=F;Y=N;break c}while(0);k[p>>2]=43396;E=p+40|0;D=k[p+56>>2]|0;if((D|0)!=(E|0)){if(D)Sf[k[(k[D>>2]|0)+20>>2]&2047](D)}else Sf[k[(k[E>>2]|0)+16>>2]&2047](E);E=p+16|0;D=k[p+32>>2]|0;if((D|0)!=(E|0)){if(D)Sf[k[(k[D>>2]|0)+20>>2]&2047](D)}else Sf[k[(k[E>>2]|0)+16>>2]&2047](E);E=k[p+4>>2]|0;if(!E){Z=o+4|0;_=k[Z>>2]|0;Nqa(o,_);$=g+12|0;aa=k[t>>2]|0;HD($,aa);ba=k[e>>2]|0;Oqa(f,ba);r=d;return}D=p+8|0;N=k[D>>2]|0;if((N|0)!=(E|0))k[D>>2]=N+(~((N+-4-E|0)>>>2)<<2);OBa(E);Z=o+4|0;_=k[Z>>2]|0;Nqa(o,_);$=g+12|0;aa=k[t>>2]|0;HD($,aa);ba=k[e>>2]|0;Oqa(f,ba);r=d;return}while(0);Pqa(a,k[v>>2]|0);Nqa(o,k[o+4>>2]|0);T=X;U=Y}else K=23}else K=23;while(0);if((K|0)==23){K=Hc()|0;T=K;U=M}HD(g+12|0,k[t>>2]|0);Oqa(f,k[e>>2]|0);A=T;B=U;Sc(A|0)}function Gqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+128|0;d=c+104|0;e=c+48|0;f=c+24|0;g=c;k[d+4>>2]=0;k[d+8>>2]=0;h=d+4|0;k[d>>2]=h;k[a+4>>2]=0;k[a+8>>2]=0;i=a+4|0;k[a>>2]=i;j=f+16|0;k[j>>2]=0;l=g+16|0;k[l>>2]=g;k[g>>2]=43764;k[g+4>>2]=d;k[g+8>>2]=a;k[e>>2]=43808;m=e+8|0;k[e+24>>2]=0;n=e+32|0;k[e+48>>2]=n;x=0;xa(k[(k[g>>2]|0)+12>>2]|0,g|0,n|0);o=x;x=0;a:do if(o&1){p=Hc()|0;q=M;s=k[e+24>>2]|0;if((s|0)!=(m|0)){if(s)Sf[k[(k[s>>2]|0)+20>>2]&2047](s)}else Sf[k[(k[m>>2]|0)+16>>2]&2047](s);s=k[l>>2]|0;if((s|0)!=(g|0)){if(s)Sf[k[(k[s>>2]|0)+20>>2]&2047](s)}else Sf[k[(k[g>>2]|0)+16>>2]&2047](g);s=k[j>>2]|0;if((s|0)==(f|0)){Sf[k[(k[s>>2]|0)+16>>2]&2047](s);t=p;u=q;break}if(!s){t=p;u=q}else{Sf[k[(k[s>>2]|0)+20>>2]&2047](s);t=p;u=q}}else{q=k[l>>2]|0;if((q|0)!=(g|0)){if(q)Sf[k[(k[q>>2]|0)+20>>2]&2047](q)}else Sf[k[(k[g>>2]|0)+16>>2]&2047](g);q=k[j>>2]|0;if((q|0)!=(f|0)){if(q)Sf[k[(k[q>>2]|0)+20>>2]&2047](q)}else Sf[k[(k[f>>2]|0)+16>>2]&2047](f);q=k[b>>2]|0;p=k[b+4>>2]|0;b:do if((q|0)!=(p|0)){s=q;while(1){v=k[s>>2]|0;x=0;xa(k[(k[v>>2]|0)+12>>2]|0,v|0,e|0);v=x;x=0;if(v&1)break;s=s+4|0;if((s|0)==(p|0))break b}s=Hc()|0;v=M;k[e>>2]=43808;w=k[e+48>>2]|0;if((w|0)!=(n|0)){if(w)Sf[k[(k[w>>2]|0)+20>>2]&2047](w)}else Sf[k[(k[n>>2]|0)+16>>2]&2047](n);w=k[e+24>>2]|0;if((w|0)==(m|0)){Sf[k[(k[m>>2]|0)+16>>2]&2047](m);t=s;u=v;break a}if(!w){t=s;u=v;break a}Sf[k[(k[w>>2]|0)+20>>2]&2047](w);t=s;u=v;break a}while(0);k[e>>2]=43808;p=k[e+48>>2]|0;if((p|0)!=(n|0)){if(p)Sf[k[(k[p>>2]|0)+20>>2]&2047](p)}else Sf[k[(k[n>>2]|0)+16>>2]&2047](n);p=k[e+24>>2]|0;if((p|0)==(m|0)){Sf[k[(k[m>>2]|0)+16>>2]&2047](m);y=k[h>>2]|0;Qqa(d,y);r=c;return}if(!p){y=k[h>>2]|0;Qqa(d,y);r=c;return}Sf[k[(k[p>>2]|0)+20>>2]&2047](p);y=k[h>>2]|0;Qqa(d,y);r=c;return}while(0);Nqa(a,k[i>>2]|0);Qqa(d,k[h>>2]|0);Sc(t|0)}function Hqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;d=r;r=r+256|0;e=d+224|0;f=d+236|0;g=d+160|0;h=d+72|0;i=d+48|0;j=d+96|0;l=d+24|0;m=d;n=k[c>>2]|0;o=c+4|0;p=k[o>>2]|0;if((n|0)==(p|0))q=0;else{s=n;n=0;while(1){t=((k[s>>2]|0)==0&1)+n|0;s=s+4|0;if((s|0)==(p|0)){q=t;break}else n=t}}q2a(e,329672,0);x=0;pa(57,(q|0)==0|0,e|0,83,281120,281339);q=x;x=0;if(q&1){q=Hc()|0;n=M;K2a(e);u=q;v=n;Sc(u|0)}K2a(e);k[f+4>>2]=0;k[f+8>>2]=0;e=f+4|0;k[f>>2]=e;n=f;q=h+16|0;k[q>>2]=h;k[h>>2]=44176;k[h+4>>2]=n;p=i+16|0;k[p>>2]=i;k[i>>2]=44220;k[i+4>>2]=n;x=0;fb(369,g|0,h|0,i|0);s=x;x=0;do if(s&1){t=Hc()|0;w=M;y=k[p>>2]|0;if((y|0)!=(i|0)){if(y)Sf[k[(k[y>>2]|0)+20>>2]&2047](y)}else Sf[k[(k[y>>2]|0)+16>>2]&2047](y);y=k[q>>2]|0;if((y|0)==(h|0)){Sf[k[(k[y>>2]|0)+16>>2]&2047](y);z=t;A=w;break}if(!y){z=t;A=w}else{Sf[k[(k[y>>2]|0)+20>>2]&2047](y);z=t;A=w}}else{w=k[p>>2]|0;if((w|0)!=(i|0)){if(w)Sf[k[(k[w>>2]|0)+20>>2]&2047](w)}else Sf[k[(k[i>>2]|0)+16>>2]&2047](i);w=k[q>>2]|0;if((w|0)!=(h|0)){if(w)Sf[k[(k[w>>2]|0)+20>>2]&2047](w)}else Sf[k[(k[h>>2]|0)+16>>2]&2047](h);w=k[c>>2]|0;t=k[o>>2]|0;a:do if((w|0)==(t|0))B=27;else{y=w;while(1){C=k[y>>2]|0;x=0;xa(k[(k[C>>2]|0)+12>>2]|0,C|0,g|0);C=x;x=0;if(C&1)break;y=y+4|0;if((y|0)==(t|0)){B=27;break a}}y=Hc()|0;D=y;E=M}while(0);if((B|0)==27){k[a+4>>2]=0;k[a+8>>2]=0;t=a+4|0;k[a>>2]=t;w=l+16|0;k[w>>2]=l;k[l>>2]=44264;k[l+4>>2]=n;y=m+16|0;k[y>>2]=m;k[m>>2]=44308;k[m+4>>2]=f;k[m+8>>2]=a;k[m+12>>2]=b;x=0;fb(369,j|0,l|0,m|0);C=x;x=0;b:do if(C&1){F=Hc()|0;G=M;H=k[y>>2]|0;if((H|0)!=(m|0)){if(H)Sf[k[(k[H>>2]|0)+20>>2]&2047](H)}else Sf[k[(k[H>>2]|0)+16>>2]&2047](H);H=k[w>>2]|0;if((H|0)==(l|0)){Sf[k[(k[H>>2]|0)+16>>2]&2047](H);I=F;J=G;break}if(!H){I=F;J=G}else{Sf[k[(k[H>>2]|0)+20>>2]&2047](H);I=F;J=G}}else{G=k[y>>2]|0;if((G|0)!=(m|0)){if(G)Sf[k[(k[G>>2]|0)+20>>2]&2047](G)}else Sf[k[(k[m>>2]|0)+16>>2]&2047](m);G=k[w>>2]|0;if((G|0)!=(l|0)){if(G)Sf[k[(k[G>>2]|0)+20>>2]&2047](G)}else Sf[k[(k[l>>2]|0)+16>>2]&2047](l);G=k[c>>2]|0;F=k[o>>2]|0;c:do if((G|0)!=(F|0)){H=G;while(1){K=k[H>>2]|0;x=0;xa(k[(k[K>>2]|0)+12>>2]|0,K|0,j|0);K=x;x=0;if(K&1)break;H=H+4|0;if((H|0)==(F|0))break c}H=Hc()|0;K=M;k[j>>2]=43396;L=k[j+56>>2]|0;if((L|0)!=(j+40|0)){if(L)Sf[k[(k[L>>2]|0)+20>>2]&2047](L)}else Sf[k[(k[L>>2]|0)+16>>2]&2047](L);L=k[j+32>>2]|0;if((L|0)!=(j+16|0)){if(L)Sf[k[(k[L>>2]|0)+20>>2]&2047](L)}else Sf[k[(k[L>>2]|0)+16>>2]&2047](L);L=k[j+4>>2]|0;if(!L){I=H;J=K;break b}N=j+8|0;O=k[N>>2]|0;if((O|0)!=(L|0))k[N>>2]=O+(~((O+-4-L|0)>>>2)<<2);OBa(L);I=H;J=K;break b}while(0);k[j>>2]=43396;F=j+40|0;G=k[j+56>>2]|0;if((G|0)!=(F|0)){if(G)Sf[k[(k[G>>2]|0)+20>>2]&2047](G)}else Sf[k[(k[F>>2]|0)+16>>2]&2047](F);F=j+16|0;G=k[j+32>>2]|0;if((G|0)!=(F|0)){if(G)Sf[k[(k[G>>2]|0)+20>>2]&2047](G)}else Sf[k[(k[F>>2]|0)+16>>2]&2047](F);F=k[j+4>>2]|0;G=F;if(F){K=j+8|0;H=k[K>>2]|0;if((H|0)!=(F|0))k[K>>2]=H+(~((H+-4-G|0)>>>2)<<2);OBa(F)}k[g>>2]=43396;F=g+40|0;G=k[g+56>>2]|0;if((G|0)!=(F|0)){if(G)Sf[k[(k[G>>2]|0)+20>>2]&2047](G)}else Sf[k[(k[F>>2]|0)+16>>2]&2047](F);F=g+16|0;G=k[g+32>>2]|0;if((G|0)!=(F|0)){if(G)Sf[k[(k[G>>2]|0)+20>>2]&2047](G)}else Sf[k[(k[F>>2]|0)+16>>2]&2047](F);F=k[g+4>>2]|0;if(!F){P=k[e>>2]|0;Rqa(f,P);r=d;return}G=g+8|0;H=k[G>>2]|0;if((H|0)!=(F|0))k[G>>2]=H+(~((H+-4-F|0)>>>2)<<2);OBa(F);P=k[e>>2]|0;Rqa(f,P);r=d;return}while(0);via(a,k[t>>2]|0);D=I;E=J}k[g>>2]=43396;w=k[g+56>>2]|0;if((w|0)!=(g+40|0)){if(w)Sf[k[(k[w>>2]|0)+20>>2]&2047](w)}else Sf[k[(k[w>>2]|0)+16>>2]&2047](w);w=k[g+32>>2]|0;if((w|0)!=(g+16|0)){if(w)Sf[k[(k[w>>2]|0)+20>>2]&2047](w)}else Sf[k[(k[w>>2]|0)+16>>2]&2047](w);w=k[g+4>>2]|0;y=w;if(!w){z=D;A=E}else{C=g+8|0;F=k[C>>2]|0;if((F|0)!=(w|0))k[C>>2]=F+(~((F+-4-y|0)>>>2)<<2);OBa(w);z=D;A=E}}while(0);Rqa(f,k[e>>2]|0);u=z;v=A;Sc(u|0)}function Iqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0;d=r;r=r+704|0;e=d+488|0;f=d+664|0;g=d+480|0;h=d+656|0;j=d+648|0;m=d+400|0;n=d+616|0;o=d+672|0;p=d+604|0;q=d+320|0;s=d+592|0;t=d+240|0;u=d+200|0;v=d+580|0;w=d+120|0;y=d+568|0;z=d+40|0;A=d+540|0;B=d;C=d+528|0;vS(j);D=i[c>>0]|0;E=(D&1)==0;F=E?(D&255)>>>1:k[c+4>>2]|0;a:do if(F){D=k[(k[j>>2]|0)+56>>2]|0;G=E?c+1|0:k[c+8>>2]|0;H=o;I=H+32|0;do{i[H>>0]=0;H=H+1|0}while((H|0)<(I|0));k[g>>2]=G;k[g+4>>2]=F;k[h>>2]=o;k[h+4>>2]=32;x=0;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];Ta(532,f|0,e|0)|0;J=x;x=0;if(!(J&1)){J=((l[o+1>>0]|0|(l[o>>0]|0)<<8)<<8|(l[o+2>>0]|0))<<8|(l[o+3>>0]|0);k[m>>2]=2;k[m+8>>2]=J;J=m+12|0;k[J>>2]=k[n>>2];k[J+4>>2]=k[n+4>>2];k[J+8>>2]=k[n+8>>2];k[J+12>>2]=k[n+12>>2];k[J+16>>2]=k[n+16>>2];k[J+20>>2]=k[n+20>>2];k[J+24>>2]=k[n+24>>2];k[m+40>>2]=1;J=m+48|0;k[J>>2]=-1;k[J+4>>2]=-1;J=m+56|0;K=m+60|0;L=m+72|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[J+16>>2]=0;k[p>>2]=0;J=p+4|0;k[J>>2]=0;k[p+8>>2]=0;x=0;N=Va(93,D|0,m|0,p|0,1,0)|0;O=x;x=0;if(O&1){O=Hc()|0;P=M;Q=k[p>>2]|0;R=Q;if(Q){S=k[J>>2]|0;if((S|0)!=(Q|0))k[J>>2]=S+(~((S+-4-R|0)>>>2)<<2);OBa(Q)}Q=k[L>>2]|0;if(Q)j0a(Q);Q=k[K>>2]|0;if(!Q){T=O;U=P;break}j0a(Q);T=O;U=P;break}P=k[p>>2]|0;O=P;if(P){Q=k[J>>2]|0;if((Q|0)!=(P|0))k[J>>2]=Q+(~((Q+-4-O|0)>>>2)<<2);OBa(P)}P=k[L>>2]|0;if(P)j0a(P);P=k[K>>2]|0;if(P)j0a(P);k[q>>2]=1;k[q+8>>2]=53;k[q+40>>2]=1;P=q+48|0;k[P>>2]=-1;k[P+4>>2]=-1;P=q+56|0;K=q+60|0;L=q+72|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[P+16>>2]=0;k[u>>2]=0;k[u+32>>2]=1;P=u+4|0;k[t>>2]=2;k[t+8>>2]=0;O=t+12|0;k[O>>2]=k[P>>2];k[O+4>>2]=k[P+4>>2];k[O+8>>2]=k[P+8>>2];k[O+12>>2]=k[P+12>>2];k[O+16>>2]=k[P+16>>2];k[O+20>>2]=k[P+20>>2];k[O+24>>2]=k[P+24>>2];k[t+40>>2]=1;P=t+48|0;k[P>>2]=-1;k[P+4>>2]=-1;P=t+56|0;O=t+60|0;Q=t+72|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[P+16>>2]=0;k[v>>2]=0;P=v+4|0;k[P>>2]=0;k[v+8>>2]=0;x=0;J=Va(93,D|0,t|0,v|0,1,0)|0;R=x;x=0;do if(R&1){S=Hc()|0;V=M;W=S;X=62}else{k[s>>2]=0;S=s+4|0;k[S>>2]=0;k[s+8>>2]=0;x=0;Y=Ba(563,4)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;V=M;W=Z;X=62;break}k[s>>2]=Y;Z=Y+4|0;k[s+8>>2]=Z;k[Y>>2]=J;k[S>>2]=Z;x=0;Z=Va(93,D|0,q|0,s|0,1,0)|0;Y=x;x=0;if(Y&1){Y=Hc()|0;_=M;$=k[s>>2]|0;if(!$){aa=Y;ba=_;break}ca=k[S>>2]|0;if((ca|0)!=($|0))k[S>>2]=ca+(~((ca+-4-$|0)>>>2)<<2);OBa($);aa=Y;ba=_;break}_=k[s>>2]|0;Y=_;if(_){$=k[S>>2]|0;if(($|0)!=(_|0))k[S>>2]=$+(~(($+-4-Y|0)>>>2)<<2);OBa(_)}_=k[v>>2]|0;Y=_;if(_){$=k[P>>2]|0;if(($|0)!=(_|0))k[P>>2]=$+(~(($+-4-Y|0)>>>2)<<2);OBa(_)}_=k[Q>>2]|0;if(_)j0a(_);_=k[O>>2]|0;if(_)j0a(_);_=k[L>>2]|0;if(_)j0a(_);_=k[K>>2]|0;if(_)j0a(_);k[w>>2]=1;k[w+8>>2]=4;k[w+40>>2]=1;_=w+48|0;k[_>>2]=-1;k[_+4>>2]=-1;_=w+56|0;Y=w+60|0;$=w+72|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;k[B>>2]=1;k[B+32>>2]=1;H=e;_=B;I=H+40|0;do{k[H>>2]=k[_>>2];H=H+4|0;_=_+4|0}while((H|0)<(I|0));HB(e,224,0);_=k[e>>2]|0;S=e+4|0;k[A>>2]=k[S>>2];k[A+4>>2]=k[S+4>>2];k[A+8>>2]=k[S+8>>2];k[A+12>>2]=k[S+12>>2];k[A+16>>2]=k[S+16>>2];k[A+20>>2]=k[S+20>>2];k[A+24>>2]=k[S+24>>2];S=k[e+32>>2]|0;ca=k[e+36>>2]|0;k[z>>2]=2;k[z+8>>2]=_;_=z+12|0;k[_>>2]=k[A>>2];k[_+4>>2]=k[A+4>>2];k[_+8>>2]=k[A+8>>2];k[_+12>>2]=k[A+12>>2];k[_+16>>2]=k[A+16>>2];k[_+20>>2]=k[A+20>>2];k[_+24>>2]=k[A+24>>2];k[z+40>>2]=S;k[z+44>>2]=ca;ca=z+48|0;k[ca>>2]=-1;k[ca+4>>2]=-1;ca=z+56|0;S=z+60|0;_=z+72|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[ca+16>>2]=0;k[C>>2]=0;ca=C+4|0;k[ca>>2]=0;k[C+8>>2]=0;x=0;da=Va(93,D|0,z|0,C|0,1,0)|0;ea=x;x=0;do if(ea&1){fa=Hc()|0;ga=M;ha=fa;X=80}else{k[y>>2]=0;fa=y+4|0;k[fa>>2]=0;k[y+8>>2]=0;x=0;ia=Ba(563,8)|0;ja=x;x=0;if(ja&1){ja=Hc()|0;ga=M;ha=ja;X=80;break}k[y>>2]=ia;ja=ia+8|0;k[y+8>>2]=ja;k[ia>>2]=Z;k[ia+4>>2]=da;k[fa>>2]=ja;x=0;pa(63,D|0,N|0,w|0,y|0,1);ja=x;x=0;if(ja&1){ja=Hc()|0;ia=M;ka=k[y>>2]|0;if(!ka){la=ja;ma=ia;break}na=k[fa>>2]|0;if((na|0)!=(ka|0))k[fa>>2]=na+(~((na+-4-ka|0)>>>2)<<2);OBa(ka);la=ja;ma=ia;break}ia=k[y>>2]|0;ja=ia;if(ia){ka=k[fa>>2]|0;if((ka|0)!=(ia|0))k[fa>>2]=ka+(~((ka+-4-ja|0)>>>2)<<2);OBa(ia)}ia=k[C>>2]|0;ja=ia;if(ia){ka=k[ca>>2]|0;if((ka|0)!=(ia|0))k[ca>>2]=ka+(~((ka+-4-ja|0)>>>2)<<2);OBa(ia)}ia=k[_>>2]|0;if(ia)j0a(ia);ia=k[S>>2]|0;if(ia)j0a(ia);ia=k[$>>2]|0;if(ia)j0a(ia);ia=k[Y>>2]|0;if(!ia){X=97;break a}j0a(ia);X=97;break a}while(0);if((X|0)==80){la=ha;ma=ga}da=k[C>>2]|0;Z=da;if(da){ea=k[ca>>2]|0;if((ea|0)!=(da|0))k[ca>>2]=ea+(~((ea+-4-Z|0)>>>2)<<2);OBa(da)}da=k[_>>2]|0;if(da)j0a(da);da=k[S>>2]|0;if(da)j0a(da);da=k[$>>2]|0;if(da)j0a(da);da=k[Y>>2]|0;if(!da){T=la;U=ma;break a}j0a(da);T=la;U=ma;break a}while(0);if((X|0)==62){aa=W;ba=V}N=k[v>>2]|0;D=N;if(N){H=k[P>>2]|0;if((H|0)!=(N|0))k[P>>2]=H+(~((H+-4-D|0)>>>2)<<2);OBa(N)}N=k[Q>>2]|0;if(N)j0a(N);N=k[O>>2]|0;if(N)j0a(N);N=k[L>>2]|0;if(N)j0a(N);N=k[K>>2]|0;if(!N){T=aa;U=ba}else{j0a(N);T=aa;U=ba}}else X=52}else X=97;while(0);do if((X|0)==97){x=0;xa(877,e|0,b|0);ba=x;x=0;if(ba&1)X=52;else{x=0;nb(146,a|0,e|0,0,j|0);ba=x;x=0;if(ba&1){ba=Hc()|0;aa=M;nR(e+12|0,k[e+16>>2]|0);v=k[e>>2]|0;if(!v){T=ba;U=aa;break}V=e+4|0;W=k[V>>2]|0;if((W|0)==(v|0))oa=v;else{ma=W;do{W=ma+-4|0;k[V>>2]=W;la=k[W>>2]|0;k[W>>2]=0;if(la){xy(la+104|0,k[la+108>>2]|0);W=k[la+8>>2]|0;if(W)j0a(W);OBa(la)}ma=k[V>>2]|0}while((ma|0)!=(v|0));oa=k[e>>2]|0}OBa(oa);T=ba;U=aa;break}nR(e+12|0,k[e+16>>2]|0);v=k[e>>2]|0;if(v){ma=e+4|0;V=k[ma>>2]|0;if((V|0)==(v|0))qa=v;else{K=V;do{V=K+-4|0;k[ma>>2]=V;L=k[V>>2]|0;k[V>>2]=0;if(L){xy(L+104|0,k[L+108>>2]|0);V=k[L+8>>2]|0;if(V)j0a(V);OBa(L)}K=k[ma>>2]|0}while((K|0)!=(v|0));qa=k[e>>2]|0}OBa(qa)}v=k[j+4>>2]|0;if(!v){r=d;return}j0a(v);r=d;return}}while(0);if((X|0)==52){X=Hc()|0;T=X;U=M}U=k[j+4>>2]|0;if(!U)Sc(T|0);j0a(U);Sc(T|0)}function Jqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=r;r=r+288|0;f=e+272|0;g=e+264|0;h=e+120|0;j=e+80|0;l=e+248|0;m=e;n=e+232|0;o=e+200|0;vS(g);p=k[d+52>>2]|0;d=k[p+24>>2]|0;q=k[p+28>>2]|0;do if((d|0)!=(q|0)){p=d;s=0;while(1){t=k[p>>2]|0;x=0;u=Ba(k[(k[t>>2]|0)+16>>2]|0,t|0)|0;t=x;x=0;if(t&1){v=7;break}t=k[u+4>>2]|0;x=0;u=Ba(k[(k[t>>2]|0)+60>>2]|0,t|0)|0;t=x;x=0;if(t&1){v=7;break}t=u+s|0;p=p+8|0;if((p|0)==(q|0)){w=t;break}else s=t}if((v|0)==7){s=Hc()|0;y=M;z=s;v=56;break}if(w>>>0>16){k[a>>2]=0;k[a+32>>2]=1;i[a+40>>0]=1;v=53}else{A=w;v=8}}else{A=0;v=8}while(0);a:do if((v|0)==8){k[j>>2]=16;k[j+32>>2]=1;NC(j);k[h>>2]=4;w=h+8|0;q=j;d=w+40|0;do{k[w>>2]=k[q>>2];w=w+4|0;q=q+4|0}while((w|0)<(d|0));q=h+48|0;k[q>>2]=-1;k[q+4>>2]=-1;q=h+56|0;w=h+60|0;d=h+72|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;x=0;nb(93,l|0,k[g>>2]|0,h|0,1);q=x;x=0;b:do if(!(q&1)){do if(A){s=k[g>>2]|0;x=0;fb(140,f|0,296239,35);p=x;x=0;if(p&1){v=18;break b}x=0;pa(51,(A+-1|0)>>>0<16|0,f|0,217,295981,296275);p=x;x=0;if(p&1){p=Hc()|0;t=M;K2a(f);B=t;C=p;v=19;break b}K2a(f);k[m>>2]=1;k[m+8>>2]=A+143&255;k[m+40>>2]=1;p=m+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=m+56|0;t=m+60|0;u=m+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;nb(93,n|0,s|0,m|0,0);s=x;x=0;if(s&1){s=Hc()|0;p=M;D=k[u>>2]|0;if(D)j0a(D);D=k[t>>2]|0;if(!D){E=p;F=s;break b}j0a(D);E=p;F=s;break b}else{s=k[u>>2]|0;if(s)j0a(s);s=k[t>>2]|0;if(!s)break;j0a(s);break}}while(0);x=0;xa(877,o|0,b|0);s=x;x=0;if(!(s&1)){x=0;nb(146,a|0,o|0,k[c>>2]|0,g|0);s=x;x=0;if(s&1){s=Hc()|0;t=M;nR(o+12|0,k[o+16>>2]|0);u=k[o>>2]|0;if(!u){E=t;F=s;break}p=o+4|0;D=k[p>>2]|0;if((D|0)==(u|0))G=u;else{H=D;do{D=H+-4|0;k[p>>2]=D;I=k[D>>2]|0;k[D>>2]=0;if(I){xy(I+104|0,k[I+108>>2]|0);D=k[I+8>>2]|0;if(D)j0a(D);OBa(I)}H=k[p>>2]|0}while((H|0)!=(u|0));G=k[o>>2]|0}OBa(G);E=t;F=s;break}nR(o+12|0,k[o+16>>2]|0);u=k[o>>2]|0;if(u){H=o+4|0;p=k[H>>2]|0;if((p|0)==(u|0))J=u;else{I=p;do{p=I+-4|0;k[H>>2]=p;D=k[p>>2]|0;k[p>>2]=0;if(D){xy(D+104|0,k[D+108>>2]|0);p=k[D+8>>2]|0;if(p)j0a(p);OBa(D)}I=k[H>>2]|0}while((I|0)!=(u|0));J=k[o>>2]|0}OBa(J)}u=k[d>>2]|0;if(u)j0a(u);u=k[w>>2]|0;if(u)j0a(u);v=53;break a}else v=18}else v=18;while(0);if((v|0)==18){q=Hc()|0;B=M;C=q;v=19}if((v|0)==19){E=B;F=C}q=k[d>>2]|0;if(q)j0a(q);q=k[w>>2]|0;if(!q){y=E;z=F;v=56}else{j0a(q);y=E;z=F;v=56}}while(0);if((v|0)==53){F=k[g+4>>2]|0;if(!F){r=e;return}j0a(F);r=e;return}else if((v|0)==56){v=k[g+4>>2]|0;if(!v)Sc(z|0);j0a(v);Sc(z|0)}}function Kqa(){k[11086]=0;k[11087]=0;k[11088]=0;return}function Lqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=f;while(1){h=g+16|0;if(Jra(b,h)|0){j=k[g>>2]|0;if(!j){l=g;m=g;n=4;break}else o=j}else{if(!(Jra(h,b)|0)){p=g;n=9;break}h=g+4|0;j=k[h>>2]|0;if(!j){q=h;s=g;n=8;break}else o=j}g=o}if((n|0)==4){k[d>>2]=m;t=l;u=m;break}else if((n|0)==8){k[d>>2]=s;t=q;u=s;break}else if((n|0)==9){k[d>>2]=p;v=d;w=p;x=p;n=11;break}}else{k[d>>2]=e;v=e;w=f;x=e;n=11}while(0);if((n|0)==11)if(!w){t=v;u=x}else{y=w;z=y+32|0;r=c;return z|0}w=KBa(80)|0;x=b;v=k[x+4>>2]|0;n=w+16|0;k[n>>2]=k[x>>2];k[n+4>>2]=v;k[w+24>>2]=k[b+8>>2];v=k[b+12>>2]|0;k[w+28>>2]=v;if(v)h0a(v);k[w+32>>2]=0;k[w+64>>2]=1;i[w+72>>0]=0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=u;k[t>>2]=w;u=k[k[a>>2]>>2]|0;if(!u)A=w;else{k[a>>2]=u;A=k[t>>2]|0}ui(k[a+4>>2]|0,A);A=a+8|0;k[A>>2]=(k[A>>2]|0)+1;y=w;z=y+32|0;r=c;return z|0}function Mqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;k[a>>2]=43396;d=a+4|0;k[d>>2]=0;e=a+8|0;k[e>>2]=0;k[a+12>>2]=0;f=a+16|0;g=b+16|0;h=k[g>>2]|0;do if(!h){k[a+32>>2]=0;i=7}else{if((h|0)==(b|0)){k[a+32>>2]=f;j=k[g>>2]|0;x=0;xa(k[(k[j>>2]|0)+12>>2]|0,j|0,f|0);j=x;x=0;if(!(j&1)){i=7;break}}else{x=0;j=Ba(k[(k[h>>2]|0)+8>>2]|0,h|0)|0;l=x;x=0;if(!(l&1)){k[a+32>>2]=j;i=7;break}}j=Hc()|0;m=M;n=j}while(0);do if((i|0)==7){h=a+40|0;g=c+16|0;b=k[g>>2]|0;if(!b){k[a+56>>2]=0;return}if((b|0)==(c|0)){k[a+56>>2]=h;j=k[g>>2]|0;x=0;xa(k[(k[j>>2]|0)+12>>2]|0,j|0,h|0);h=x;x=0;if(!(h&1))return}else{x=0;h=Ba(k[(k[b>>2]|0)+8>>2]|0,b|0)|0;b=x;x=0;if(!(b&1)){k[a+56>>2]=h;return}}h=Hc()|0;b=M;j=k[a+32>>2]|0;if((j|0)==(f|0)){Sf[k[(k[f>>2]|0)+16>>2]&2047](f);m=b;n=h;break}if(!j){m=b;n=h}else{Sf[k[(k[j>>2]|0)+20>>2]&2047](j);m=b;n=h}}while(0);m=k[d>>2]|0;if(!m)Sc(n|0);d=k[e>>2]|0;if((d|0)!=(m|0))k[e>>2]=d+(~((d+-4-m|0)>>>2)<<2);OBa(m);Sc(n|0)}function Nqa(a,b){a=a|0;b=b|0;if(!b)return;else{Nqa(a,k[b>>2]|0);Nqa(a,k[b+4>>2]|0);OBa(b);return}}function Oqa(a,b){a=a|0;b=b|0;if(!b)return;Oqa(a,k[b>>2]|0);Oqa(a,k[b+4>>2]|0);a=k[b+28>>2]|0;if(a)j0a(a);OBa(b);return}function Pqa(a,b){a=a|0;b=b|0;if(!b)return;else{Pqa(a,k[b>>2]|0);Pqa(a,k[b+4>>2]|0);OBa(b);return}}function Qqa(a,b){a=a|0;b=b|0;if(!b)return;Qqa(a,k[b>>2]|0);Qqa(a,k[b+4>>2]|0);a=k[b+28>>2]|0;if(a)j0a(a);OBa(b);return}function Rqa(a,b){a=a|0;b=b|0;if(!b)return;else{Rqa(a,k[b>>2]|0);Rqa(a,k[b+4>>2]|0);OBa(b);return}}function Sqa(a){a=a|0;return}function Tqa(a){a=a|0;OBa(a);return}function Uqa(a){a=a|0;var b=0,c=0;b=KBa(16)|0;c=a+4|0;k[b>>2]=44308;a=b+4|0;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];return b|0}function Vqa(a,b){a=a|0;b=b|0;var c=0;c=a+4|0;k[b>>2]=44308;a=b+4|0;k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];return}function Wqa(a){a=a|0;return}function Xqa(a){a=a|0;OBa(a);return}function Yqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;d=r;r=r+16|0;e=d;f=k[a+4>>2]|0;g=k[f+4>>2]|0;if(!g){r=d;return}else h=g;while(1){j=k[h+16>>2]|0;if(j>>>0>c>>>0)l=h;else{if(j>>>0>=c>>>0){m=7;break}l=h+4|0}h=k[l>>2]|0;if(!h){n=g;m=20;break}}do if((m|0)==7){h=c;l=g;while(1){j=k[l+16>>2]|0;if(j>>>0>c>>>0){o=k[l>>2]|0;if(!o){p=l;q=l;m=10;break}else s=o}else{if(j>>>0>=c>>>0){t=l;m=15;break}j=l+4|0;o=k[j>>2]|0;if(!o){u=j;v=l;m=14;break}else s=o}l=s}if((m|0)==10){k[e>>2]=q;w=p;y=q;m=16}else if((m|0)==14){k[e>>2]=v;w=u;y=v;m=16}else if((m|0)==15){k[e>>2]=t;if(!t){w=e;y=0;m=16}else z=t}if((m|0)==16){l=KBa(24)|0;k[l+16>>2]=h;k[l+20>>2]=0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=y;k[w>>2]=l;o=k[k[f>>2]>>2]|0;if(!o)A=l;else{k[f>>2]=o;A=k[w>>2]|0}ui(k[f+4>>2]|0,A);o=f+8|0;k[o>>2]=(k[o>>2]|0)+1;z=l}if(!(k[z+20>>2]|0))B=h;else{r=d;return}}else if((m|0)==20){while(1){m=0;l=k[n+16>>2]|0;if(l>>>0>b>>>0)C=n;else{if(l>>>0>=b>>>0){D=g;break}C=n+4|0}n=k[C>>2]|0;if(!n){m=62;break}else m=20}if((m|0)==62){r=d;return}while(1){h=k[D+16>>2]|0;if(h>>>0>b>>>0){l=k[D>>2]|0;if(!l)break;else E=l}else{if(h>>>0>=b>>>0){F=D;m=30;break}h=k[D+4>>2]|0;if(!h)break;else E=h}D=E}if((m|0)==30?(F|0)!=0:0)if((k[F+20>>2]|0)>0){B=c;break}else{r=d;return}h=Rd(8)|0;x=0;xa(671,h|0,296399);l=x;x=0;if(l&1){l=Hc()|0;Fc(h|0);Sc(l|0)}else{k[h>>2]=47544;Gf(h|0,9024,933)}}while(0);F=k[a+8>>2]|0;E=F+4|0;D=k[E>>2]|0;do if(D){b=D;while(1){n=k[b+16>>2]|0;if(n>>>0>c>>>0){C=k[b>>2]|0;if(!C){G=b;H=b;m=39;break}else I=C}else{if(n>>>0>=c>>>0){J=b;m=45;break}n=b+4|0;C=k[n>>2]|0;if(!C){K=n;L=b;m=43;break}else I=C}b=I}if((m|0)==39){k[e>>2]=H;M=G;N=H;m=46;break}else if((m|0)==43){k[e>>2]=L;M=K;N=L;m=46;break}else if((m|0)==45){k[e>>2]=J;if(!J){M=e;N=J;m=46;break}else{O=J;break}}}else{k[e>>2]=E;M=E;N=E;m=46}while(0);if((m|0)==46){m=KBa(72)|0;k[m+16>>2]=B;k[m+24>>2]=0;k[m+56>>2]=1;i[m+64>>0]=0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=N;k[M>>2]=m;N=k[k[F>>2]>>2]|0;if(!N)P=m;else{k[F>>2]=N;P=k[M>>2]|0}ui(k[F+4>>2]|0,P);P=F+8|0;k[P>>2]=(k[P>>2]|0)+1;O=m}m=O+24|0;P=k[(k[a+12>>2]|0)+4>>2]|0;a:do if(P){a=P;while(1){F=k[a+16>>2]|0;if(F>>>0>c>>>0){M=k[a>>2]|0;if(!M)break a;else Q=M}else{if(F>>>0>=c>>>0){R=a;break}F=k[a+4>>2]|0;if(!F)break a;else Q=F}a=Q}if(R){a=R+72|0;if((m|0)!=(a|0)){F=R+104|0;k[O+56>>2]=k[F>>2];Dyb(m|0,a|0,k[F>>2]<<2|0)|0}i[O+64>>0]=i[R+112>>0]|0;r=d;return}}while(0);d=Rd(8)|0;x=0;xa(671,d|0,296399);R=x;x=0;if(R&1){R=Hc()|0;Fc(d|0);Sc(R|0)}else{k[d>>2]=47544;Gf(d|0,9024,933)}}function Zqa(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==281549?a+4|0:0)|0}function _qa(a){a=a|0;return 7576}function $qa(a){a=a|0;return}function ara(a){a=a|0;OBa(a);return}function bra(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=44264;k[b+4>>2]=k[a+4>>2];return b|0}function cra(a,b){a=a|0;b=b|0;k[b>>2]=44264;k[b+4>>2]=k[a+4>>2];return}function dra(a){a=a|0;return}function era(a){a=a|0;OBa(a);return}function fra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[(k[a+4>>2]|0)+4>>2]|0;if(!c){d=0;return d|0}else e=c;while(1){c=k[e+16>>2]|0;if(c>>>0>b>>>0)f=e;else{if(c>>>0>=b>>>0){d=1;g=7;break}f=e+4|0}e=k[f>>2]|0;if(!e){d=0;g=7;break}}if((g|0)==7)return d|0;return 0}function gra(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==282091?a+4|0:0)|0}function hra(a){a=a|0;return 7608}function ira(a){a=a|0;OBa(a);return}function jra(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=44220;k[b+4>>2]=k[a+4>>2];return b|0}function kra(a,b){a=a|0;b=b|0;k[b>>2]=44220;k[b+4>>2]=k[a+4>>2];return}function lra(a){a=a|0;return}function mra(a){a=a|0;OBa(a);return}function nra(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;d=r;r=r+16|0;e=d;f=a+4|0;a=k[f>>2]|0;g=k[a+4>>2]|0;if(!g){r=d;return}else h=g;while(1){i=k[h+16>>2]|0;if(i>>>0>c>>>0)j=h;else{if(i>>>0>=c>>>0)break;j=h+4|0}h=k[j>>2]|0;if(!h){l=46;break}}if((l|0)==46){r=d;return}h=b;j=g;while(1){i=k[j+16>>2]|0;if(i>>>0>b>>>0){m=k[j>>2]|0;if(!m){n=j;o=j;l=10;break}else p=m}else{if(i>>>0>=b>>>0){q=j;l=15;break}i=j+4|0;m=k[i>>2]|0;if(!m){s=i;t=j;l=14;break}else p=m}j=p}if((l|0)==10){k[e>>2]=o;u=n;v=o;l=16}else if((l|0)==14){k[e>>2]=t;u=s;v=t;l=16}else if((l|0)==15){k[e>>2]=q;if(!q){u=e;v=0;l=16}else{w=a;x=g;y=q}}if((l|0)==16){q=KBa(24)|0;k[q+16>>2]=h;k[q+20>>2]=0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=v;k[u>>2]=q;v=k[k[a>>2]>>2]|0;if(!v)z=q;else{k[a>>2]=v;z=k[u>>2]|0}ui(k[a+4>>2]|0,z);z=a+8|0;k[z>>2]=(k[z>>2]|0)+1;z=k[f>>2]|0;w=z;x=k[z+4>>2]|0;y=q}q=y+20|0;y=c;z=w+4|0;do if(x){a=x;while(1){u=k[a+16>>2]|0;if(u>>>0>c>>>0){v=k[a>>2]|0;if(!v){A=a;B=a;l=22;break}else C=v}else{if(u>>>0>=c>>>0){D=a;l=28;break}u=a+4|0;v=k[u>>2]|0;if(!v){E=u;F=a;l=26;break}else C=v}a=C}if((l|0)==22){k[e>>2]=B;G=A;H=B;l=29;break}else if((l|0)==26){k[e>>2]=F;G=E;H=F;l=29;break}else if((l|0)==28){k[e>>2]=D;if(!D){G=e;H=D;l=29;break}else{I=w;J=D;break}}}else{k[e>>2]=z;G=z;H=z;l=29}while(0);if((l|0)==29){z=KBa(24)|0;k[z+16>>2]=y;k[z+20>>2]=0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=H;k[G>>2]=z;H=k[k[w>>2]>>2]|0;if(!H)K=z;else{k[w>>2]=H;K=k[G>>2]|0}ui(k[w+4>>2]|0,K);K=w+8|0;k[K>>2]=(k[K>>2]|0)+1;I=k[f>>2]|0;J=z}z=(k[J+20>>2]|0)+1|0;J=k[q>>2]|0;q=(J|0)<(z|0)?z:J;J=I+4|0;z=k[J>>2]|0;do if(z){f=z;while(1){K=k[f+16>>2]|0;if(K>>>0>b>>>0){w=k[f>>2]|0;if(!w){L=f;M=f;l=35;break}else N=w}else{if(K>>>0>=b>>>0){O=f;l=41;break}K=f+4|0;w=k[K>>2]|0;if(!w){P=K;Q=f;l=39;break}else N=w}f=N}if((l|0)==35){k[e>>2]=M;R=L;S=M;l=42;break}else if((l|0)==39){k[e>>2]=Q;R=P;S=Q;l=42;break}else if((l|0)==41){k[e>>2]=O;if(!O){R=e;S=O;l=42;break}else{T=O;break}}}else{k[e>>2]=J;R=J;S=J;l=42}while(0);if((l|0)==42){l=KBa(24)|0;k[l+16>>2]=h;k[l+20>>2]=0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=S;k[R>>2]=l;S=k[k[I>>2]>>2]|0;if(!S)U=l;else{k[I>>2]=S;U=k[R>>2]|0}ui(k[I+4>>2]|0,U);U=I+8|0;k[U>>2]=(k[U>>2]|0)+1;T=l}k[T+20>>2]=q;r=d;return}function ora(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==282627?a+4|0:0)|0}function pra(a){a=a|0;return 7640}function qra(a){a=a|0;OBa(a);return}function rra(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=44176;k[b+4>>2]=k[a+4>>2];return b|0}function sra(a,b){a=a|0;b=b|0;k[b>>2]=44176;k[b+4>>2]=k[a+4>>2];return}function tra(a){a=a|0;return}function ura(a){a=a|0;OBa(a);return}function vra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+16|0;d=c;e=k[a+4>>2]|0;if(!(iDa(b,5224,5640,0)|0)){r=c;return 1}a=b;f=e+4|0;g=k[f>>2]|0;do if(g){h=g;while(1){i=k[h+16>>2]|0;if(i>>>0>b>>>0){j=k[h>>2]|0;if(!j){l=h;m=h;n=5;break}else o=j}else{if(i>>>0>=b>>>0){p=h;n=11;break}i=h+4|0;j=k[i>>2]|0;if(!j){q=i;s=h;n=9;break}else o=j}h=o}if((n|0)==5){k[d>>2]=m;t=l;u=m;n=12;break}else if((n|0)==9){k[d>>2]=s;t=q;u=s;n=12;break}else if((n|0)==11){k[d>>2]=p;if(!p){t=d;u=p;n=12;break}else{v=p;break}}}else{k[d>>2]=f;t=f;u=f;n=12}while(0);if((n|0)==12){n=KBa(24)|0;k[n+16>>2]=a;k[n+20>>2]=0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=u;k[t>>2]=n;u=k[k[e>>2]>>2]|0;if(!u)w=n;else{k[e>>2]=u;w=k[t>>2]|0}ui(k[e+4>>2]|0,w);w=e+8|0;k[w>>2]=(k[w>>2]|0)+1;v=n}k[v+20>>2]=0;r=c;return 1}function wra(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==283108?a+4|0:0)|0}function xra(a){a=a|0;return 7664}function yra(a,b){a=a|0;b=b|0;var c=0,d=0;c=k[a+24>>2]|0;if(!c){d=1;return d|0}d=cg[k[(k[c>>2]|0)+24>>2]&1023](c,b)|0;return d|0}function zra(a,b){a=a|0;b=b|0;var c=0;c=k[a+48>>2]|0;if(!c){a=Rd(4)|0;k[a>>2]=26200;Gf(a|0,2216,320)}else{Tf[k[(k[c>>2]|0)+24>>2]&2047](c,b);return}}function Ara(a){a=a|0;return}function Bra(a){a=a|0;OBa(a);return}function Cra(a){a=a|0;var b=0,c=0,d=0;b=KBa(12)|0;k[b>>2]=43764;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function Dra(a,b){a=a|0;b=b|0;var c=0,d=0;k[b>>2]=43764;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return}function Era(a){a=a|0;return}function Fra(a){a=a|0;OBa(a);return}function Gra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;g=b+8|0;h=k[f+4>>2]|0;do if(h){i=h;while(1){j=i+16|0;if(Jra(g,j)|0)l=i;else{if(!(Jra(j,g)|0)){m=23;break}l=i+4|0}i=k[l>>2]|0;if(!i){m=7;break}}if((m|0)==7){n=k[e>>2]|0;break}else if((m|0)==23){r=c;return}}else n=f;while(0);f=Kra(n,g)|0;k[f>>2]=b;f=k[a+8>>2]|0;a=KBa(20)|0;k[a+16>>2]=b;g=f+4|0;n=k[g>>2]|0;do if(n){e=n;while(1){l=k[e+16>>2]|0;if(l>>>0>b>>>0){h=k[e>>2]|0;if(!h){o=e;p=e;m=11;break}else q=h}else{if(l>>>0>=b>>>0){s=e;m=16;break}l=e+4|0;h=k[l>>2]|0;if(!h){t=l;u=e;m=15;break}else q=h}e=q}if((m|0)==11){k[d>>2]=p;v=o;w=p;break}else if((m|0)==15){k[d>>2]=u;v=t;w=u;break}else if((m|0)==16){k[d>>2]=s;v=d;w=s;break}}else{k[d>>2]=g;v=g;w=g}while(0);if(k[v>>2]|0){OBa(a);r=c;return}k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=w;k[v>>2]=a;w=k[k[f>>2]>>2]|0;if(!w)x=a;else{k[f>>2]=w;x=k[v>>2]|0}ui(k[f+4>>2]|0,x);x=f+8|0;k[x>>2]=(k[x>>2]|0)+1;r=c;return}function Hra(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==283620?a+4|0:0)|0}function Ira(a){a=a|0;return 7704}function Jra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+48|0;d=c+20|0;e=c;f=k[a+8>>2]|0;g=(f|0)==0;h=b+8|0;j=k[h>>2]|0;if(!g)if(!j)l=0;else{n2a(d,f);f=d+12|0;k[f>>2]=k[a>>2];m=d+16|0;k[m>>2]=k[a+4>>2];x=0;xa(604,e|0,k[h>>2]|0);h=x;x=0;if(h&1){h=Hc()|0;K2a(d);Sc(h|0)}h=k[b>>2]|0;k[e+12>>2]=h;a=k[b+4>>2]|0;k[e+16>>2]=a;b=i[d>>0]|0;n=(b&1)==0;o=n?(b&255)>>>1:k[d+4>>2]|0;b=i[e>>0]|0;p=(b&1)==0;q=p?(b&255)>>>1:k[e+4>>2]|0;b=n?d+1|0:k[d+8>>2]|0;n=p?e+1|0:k[e+8>>2]|0;p=q>>>0>>0;s=p?q:o;t=ZLa(b,n,s)|0;u=o>>>0>>0;v=u?-2147483648:0;if((((t|0)==0?v:t)|0)>=0?(t=u?o:q,q=ZLa(n,b,t)|0,o=p?-2147483648:0,!((((q|0)==0?o:q)|0)>-1?(k[f>>2]|0)<(h|0):0)):0){q=ZLa(n,b,t)|0;if((((q|0)==0?o:q)|0)>=0?(q=ZLa(b,n,s)|0,!((((q|0)==0?v:q)|0)>-1?(h|0)<(k[f>>2]|0):0)):0)w=(k[m>>2]|0)<(a|0);else w=0}else w=1;K2a(e);K2a(d);y=w;r=c;return y|0}else l=(j|0)!=0;y=g&l;r=c;return y|0}function Kra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=f;while(1){h=g+16|0;if(Jra(b,h)|0){i=k[g>>2]|0;if(!i){j=g;l=g;m=4;break}else n=i}else{if(!(Jra(h,b)|0)){o=g;m=9;break}h=g+4|0;i=k[h>>2]|0;if(!i){p=h;q=g;m=8;break}else n=i}g=n}if((m|0)==4){k[d>>2]=l;s=j;t=l;break}else if((m|0)==8){k[d>>2]=q;s=p;t=q;break}else if((m|0)==9){k[d>>2]=o;u=d;v=o;w=o;m=11;break}}else{k[d>>2]=e;u=e;v=f;w=e;m=11}while(0);if((m|0)==11)if(!v){s=u;t=w}else{x=v;y=x+32|0;r=c;return y|0}v=KBa(36)|0;w=b;u=k[w+4>>2]|0;m=v+16|0;k[m>>2]=k[w>>2];k[m+4>>2]=u;k[v+24>>2]=k[b+8>>2];u=k[b+12>>2]|0;k[v+28>>2]=u;if(u)h0a(u);k[v+32>>2]=0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=t;k[s>>2]=v;t=k[k[a>>2]>>2]|0;if(!t)z=v;else{k[a>>2]=t;z=k[s>>2]|0}ui(k[a+4>>2]|0,z);z=a+8|0;k[z>>2]=(k[z>>2]|0)+1;x=v;y=x+32|0;r=c;return y|0}function Lra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;k[d>>2]=b;e=a+8|0;f=k[e>>2]|0;if(f>>>0<(k[a+12>>2]|0)>>>0){k[f>>2]=b;k[e>>2]=(k[e>>2]|0)+4}else Nra(a+4|0,d);d=k[a+32>>2]|0;if(!d){a=Rd(4)|0;k[a>>2]=26200;Gf(a|0,2216,320)}else{a=cg[k[(k[d>>2]|0)+24>>2]&1023](d,b)|0;r=c;return a|0}return 0}function Mra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;d=k[c>>2]|0;e=d+-4|0;k[c>>2]=e;if((k[a+4>>2]|0)==(e|0))return;e=k[a+56>>2]|0;if(!e){a=Rd(4)|0;k[a>>2]=26200;Gf(a|0,2216,320)}jg[k[(k[e>>2]|0)+24>>2]&511](e,k[d+-8>>2]|0,b);return} -function VWa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=r;r=r+16|0;f=e;a:do if((b|0)!=0?(i[a>>0]|0)!=0:0){k[c>>2]=1;g=i[a>>0]|0;switch(g<<24>>24){case 42:{h=-5;break a;break}case 92:{j=a+1|0;if((d&2|0)==0&(i[j>>0]|0)!=0){k[c>>2]=2;l=j;m=i[j>>0]|0;n=1;o=30}else p=92;break}case 91:{b:do if(b>>>0>1){switch(i[a+1>>0]|0){case 33:case 94:break;default:{q=1;break b}}q=2}else q=1;while(0);if(q>>>0>>0)s=((i[a+q>>0]|0)==93&1)+q|0;else s=q;c:do if(s>>>0>>0){j=s;while(1){t=i[a+j>>0]|0;switch(t<<24>>24){case 93:case 0:{u=j;o=26;break c;break}default:{}}v=j+1|0;d:do if(v>>>0>>0?(w=i[a+v>>0]|0,t<<24>>24==91&w<<24>>24!=0):0){switch(w<<24>>24){case 61:case 46:case 58:break;default:{x=j;break d}}y=j+2|0;if(y>>>0>>0)z=(i[a+y>>0]|0)==0?y:j+3|0;else z=y;e:do if(z>>>0>>0){y=z;while(1){A=i[a+y>>0]|0;if(!(A<<24>>24)){B=y;break e}if(!(A<<24>>24!=93?1:(i[a+(y+-1)>>0]|0)!=w<<24>>24)){B=y;break e}A=y+1|0;if(A>>>0>>0)y=A;else{B=A;break}}}else B=z;while(0);if((B|0)==(b|0)){C=91;D=1;break c}if(!(i[a+B>>0]|0)){u=B;o=26;break c}else x=B}else x=j;while(0);t=x+1|0;if(t>>>0>>0)j=t;else{u=t;o=26;break c}}}else{u=s;o=26}while(0);if((o|0)==26)if((u|0)==(b|0)){C=91;D=1}else{j=(i[a+u>>0]|0)==0;C=j?91:-3;D=j?1:u+1|0}k[c>>2]=D;h=C;break a;break}case 63:{h=-4;break a;break}default:{l=a;m=g;n=0;o=30}}if((o|0)==30)if(m<<24>>24<0){j=tVa(f,l,b)|0;if((j|0)<0){k[c>>2]=0;E=-2}else{k[c>>2]=j+n;E=k[f>>2]|0}h=E;break}else p=m;h=p<<24>>24}else o=3;while(0);if((o|0)==3){k[c>>2]=0;h=0}r=e;return h|0}function WWa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;f=r;r=r+16|0;g=f+4|0;h=f;if(((e&4|0)!=0?(i[c>>0]|0)==46:0)?(i[a>>0]|0)!=46:0)j=1;else{l=a;m=d;n=c;o=b;p=4}a:do if((p|0)==4){b:while(1){p=0;b=VWa(l,o,g,e)|0;switch(b|0){case -2:{j=1;break a;break}case -5:{q=l;s=m;t=n;u=o;break b;break}default:{}}c=sYa(n,m,h)|0;if((c|0)<1){v=b;p=8;break}d=k[h>>2]|0;a=n+d|0;w=m-d|0;switch(b|0){case -3:{if(!(tYa(l,c)|0)){j=1;break a}break}case -4:break;default:if((c|0)!=(b|0)){j=1;break a}}b=k[g>>2]|0;l=l+b|0;m=w;n=a;o=o-b|0;p=4}if((p|0)==8){j=(v|0)!=0&1;break}b=q+1|0;a=GMa(b,u+-1|0)|0;w=b+a|0;c:do if((a|0)>0){c=w;d=b;x=b;y=0;while(1){switch(VWa(d,c-d|0,g,e)|0){case -2:{j=1;break a;break}case -5:{z=d+1|0;A=0;break}default:{z=x;A=y+1|0}}d=d+(k[g>>2]|0)|0;if(d>>>0>=w>>>0){B=z;C=A;break c}else{x=z;y=A}}}else{B=b;C=0}while(0);a=GMa(t,s)|0;y=t+a|0;if(a>>>0>=C>>>0){x=(C|0)!=0;if((a|0)>0&x){a=y;d=C;while(1){c=a+-1|0;D=i[c>>0]|0;if(D<<24>>24<=-1){E=a+-1|0;if(E>>>0>t>>>0&(D&-64)<<24>>24==-128){D=E;F=a;while(1){G=D+-1|0;if(G>>>0>t>>>0?(i[F+-2>>0]&-64)<<24>>24==-128:0){H=D;D=G;F=H}else{I=G;break}}}else I=E}else I=c;d=d+-1|0;F=(d|0)!=0;if(!(I>>>0>t>>>0&F)){J=F;K=I;break}else a=I}}else{J=x;K=y}if(!J){a=w;d=B;F=VWa(B,a-d|0,g,e)|0;D=k[g>>2]|0;G=y;H=K;L=sYa(K,G-H|0,h)|0;d:do if((L|0)<1)M=F;else{N=F;O=D;P=B+D|0;Q=L;R=K;while(1){R=R+(k[h>>2]|0)|0;switch(N|0){case -3:{if(!(tYa(P+(0-O)|0,Q)|0)){j=1;break a}break}case -4:break;default:if((Q|0)!=(N|0)){j=1;break a}}S=VWa(P,a-P|0,g,e)|0;T=k[g>>2]|0;Q=sYa(R,G-R|0,h)|0;if((Q|0)<1){M=S;break d}else{N=S;O=T;P=P+T|0}}}while(0);if(!M)if(b>>>0>>0){G=b;a=t;while(1){L=d-G|0;D=VWa(G,L,g,e)|0;F=k[g>>2]|0;y=G+F|0;e:do if((D|0)==-5){U=y;V=a}else{w=a;x=y;P=F;O=D;while(1){N=P;Q=x;R=O;c=w;f:while(1){E=sYa(c,H-c|0,h)|0;if(!E){j=1;break a}switch(R|0){case -3:{if(!(tYa(Q+(0-N)|0,E)|0))break f;break}case -4:break;default:if((E|0)!=(R|0))break f}E=c+(k[h>>2]|0)|0;R=VWa(Q,d-Q|0,g,e)|0;N=k[g>>2]|0;T=Q+N|0;if((R|0)==-5){U=T;V=E;break e}else{Q=T;c=E}}if((sYa(w,H-w|0,h)|0)>0)W=w+(k[h>>2]|0)|0;else{c=w;while(1){Q=c+1|0;if((sYa(Q,H-Q|0,h)|0)<0)c=Q;else{W=Q;break}}}O=VWa(G,L,g,e)|0;P=k[g>>2]|0;c=G+P|0;if((O|0)==-5){U=c;V=W;break}else{w=W;x=c}}}while(0);if(U>>>0>>0){G=U;a=V}else{j=0;break}}}else j=0;else j=1}else j=1}else j=1}while(0);r=f;return j|0}function XWa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;a:do if((a|0)>0){e=0;while(1){f=k[c+(e<<2)>>2]|0;g=k[d+(e<<2)>>2]|0;if(!(k[b+(e<<2)>>2]|0)){if((f|0)<(g|0)){h=1;break a}if((f|0)>(g|0)){h=0;break a}}else{if((f|0)>(g|0)){h=1;break a}if((f|0)<(g|0)){h=0;break a}}e=e+1|0;if((e|0)>=(a|0)){h=0;break}}}else h=0;while(0);return h|0}function YWa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((c&8|0)==0&(f|0)>-1){c=k[d+16>>2]|0;g=d+28|0;h=k[g>>2]|0;i=(a|0)!=0;if(i&(h|0)!=0){j=d+48|0;d=0;do{l=k[c+(d*12|0)>>2]|0;if((l|0)==(k[j>>2]|0))m=f;else m=k[e+(l<<2)>>2]|0;l=b+(d<<3)|0;k[l>>2]=m;n=k[c+(d*12|0)+4>>2]|0;if((n|0)==(k[j>>2]|0))o=f;else o=k[e+(n<<2)>>2]|0;n=b+(d<<3)+4|0;k[n>>2]=o;if((m|0)==-1|(o|0)==-1){k[n>>2]=-1;k[l>>2]=-1}d=d+1|0;l=k[g>>2]|0}while(d>>>0>>0&d>>>0>>0);p=l}else p=h;if(i&(p|0)!=0){i=0;while(1){h=b+(i<<3)+4|0;d=k[c+(i*12|0)+8>>2]|0;if((d|0)!=0?(g=k[d>>2]|0,(g|0)>-1):0){o=b+(i<<3)|0;m=g;g=k[o>>2]|0;e=0;while(1){if((g|0)>=(k[b+(m<<3)>>2]|0)?(k[h>>2]|0)<=(k[b+(m<<3)+4>>2]|0):0)q=g;else{k[h>>2]=-1;k[o>>2]=-1;q=-1}e=e+1|0;m=k[d+(e<<2)>>2]|0;if((m|0)<=-1)break;else g=q}}g=i+1|0;if(g>>>0>>0&g>>>0

      >>0)i=g;else{r=g;break}}}else r=0}else r=0;if(r>>>0>>0){i=r;do{k[b+(i<<3)>>2]=-1;k[b+(i<<3)+4>>2]=-1;i=i+1|0}while((i|0)!=(a|0))}return}function ZWa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=k[a>>2]|0;a:do if(!d)e=0;else{f=(c|0)==0;g=a;h=d;while(1){if(f){if(zIa(b,h)|0){e=1;break a}}else{i=JIa(b)|0;if(zIa(i,k[g>>2]|0)|0){e=1;break a}i=KIa(b)|0;if(zIa(i,k[g>>2]|0)|0){e=1;break a}}g=g+4|0;h=k[g>>2]|0;if(!h){e=0;break}}}while(0);return e|0}function _Wa(a,b){a=a|0;b=b|0;return 0}function $Wa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;f=r;r=r+352|0;g=f+80|0;h=f+76|0;j=f;l=(RLa(b)|0)+1|0;n=r;r=r+((1*l|0)+15&-16)|0;l=RLa(a)|0;o=c&64;p=(c>>>5&4|o>>>5)^4;q=VLa(b,47)|0;if(!q){s=b;t=0}else{OLa(n,b)|0;i[n+(q-b)>>0]=0;b=q;while(1)if((i[b>>0]|0)==47)b=b+1|0;else{s=n;t=b;break}}b=i[s>>0]|0;a:do if(!(b<<24>>24))u=1;else{n=(o|0)==0;q=s;v=b;w=0;while(1){switch(v<<24>>24|0){case 42:case 63:{u=0;break a;break}case 92:{if(n){u=0;break a}else x=w;break}case 91:{x=1;break}case 93:{if(!w)x=0;else{u=0;break a}break}default:x=w}q=q+1|0;v=i[q>>0]|0;if(!(v<<24>>24)){u=1;break a}else w=x}}while(0);x=i[a>>0]|0;if(x<<24>>24==47)y=(i[a+1>>0]|0)==0?0:l;else y=l;l=_Sa(x<<24>>24!=0?a:324339)|0;x=HSa()|0;b=k[x>>2]|0;b:do if(!l){switch(b|0){case 20:{z=0;break b;break}case 13:{if(((i[s>>0]|0)==0?(vTa(a,j)|0)==0:0)?(k[j+12>>2]&61440|0)==16384:0){z=(aXa(e,a,y,y)|0)!=0&1;break b}break}default:{}}x=(cg[d&1023](a,b)|0|c&1|0)==0;z=x?0:2}else{if(!(i[s>>0]|0)){x=(aXa(e,a,y,y)|0)!=0&1;$Sa(l)|0;z=x;break}x=QSa(l,g,h)|0;o=(x|0)!=0;w=k[h>>2]|0;c:do if((w|0)!=0&(o^1)){v=y+2|0;q=(u|0)==0;n=(t|0)!=0;A=(c&2|0)==0;B=y+1|0;C=j+12|0;D=w;d:while(1){E=v+(m[D+8>>1]|0)|0;F=sf()|0;G=r;r=r+((1*E|0)+15&-16)|0;E=(k[h>>2]|0)+11|0;if(q){if(!(_Pa(s,E,p)|0))H=28}else if(!(YLa(s,E)|0))H=28;e:do if((H|0)==28){H=0;f:do if(n?(E=i[(k[h>>2]|0)+10>>0]|0,E<<24>>24!=0):0){I=(E&255)<<12&61440;if((I|0)<40960)switch(I|0){case 16384:{break f;break}default:break e}else switch(I|0){case 40960:{break f;break}default:break e}}while(0);if(!(i[a>>0]|0))J=(k[h>>2]|0)+11|0;else{Dyb(G|0,a|0,y|0)|0;I=G+y|0;i[I>>0]=47;OLa(I+1|0,(k[h>>2]|0)+11|0)|0;J=G}if(n){I=$Wa(J,t,c,d,e)|0;if(!I)break;else{K=F;L=I;H=36;break d}}do if(A)M=0;else{I=i[(k[h>>2]|0)+10>>0]|0;if(I<<24>>24!=0?(E=(I&255)<<12&61440,(E|0)!=40960):0){M=(E|0)==16384&1;break}vTa(J,j)|0;M=(k[C>>2]&61440|0)==16384&1}while(0);if(aXa(e,J,B+(m[(k[h>>2]|0)+8>>1]|0)|0,M)|0){N=F;H=43;break d}}while(0);Ec(F|0);G=QSa(l,g,h)|0;E=(G|0)!=0;D=k[h>>2]|0;if(!((D|0)!=0&(E^1))){O=G;P=E;break c}}if((H|0)==36){$Sa(l)|0;Q=L;R=K}else if((H|0)==43){$Sa(l)|0;Q=1;R=N}Ec(R|0);z=Q;break b}else{O=x;P=o}while(0);$Sa(l)|0;if(P?(cg[d&1023](a,O)|0|c&1|0)!=0:0){z=2;break}z=0}while(0);r=f;return z|0}function aXa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=xYa(c+9|0)|0;if(!e)f=-1;else{k[k[a>>2]>>2]=e;k[e>>2]=0;c=e+4|0;OLa(c,b)|0;if(d){d=c+(RLa(c)|0)|0;i[d>>0]=47;i[d+1>>0]=0}k[a>>2]=e;f=0}return f|0}function bXa(a,b){a=a|0;b=b|0;return YLa(k[a>>2]|0,k[b>>2]|0)|0}function cXa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0;b=r;r=r+384|0;c=b+276|0;d=b+272|0;e=b+268|0;f=b+320|0;g=b+264|0;h=b+8|0;j=b;l=k[a+4>>2]|0;m=l+12|0;n=k[m>>2]|0;if(!(k[a+40>>2]|0)){o=a+20|0;k[d>>2]=k[o>>2];k[c>>2]=k[d>>2];eXa(l,c)|0;k[d>>2]=2;k[c>>2]=k[d>>2];eXa(l,c)|0;k[o>>2]=(k[o>>2]|0)+1}k[d>>2]=0;k[c>>2]=k[d>>2];o=eXa(l,c)|0;p=a+12|0;q=a+16|0;k[q>>2]=k[p>>2];s=k[m>>2]|0;t=(o|0)==0;a:do if(!((o|0)!=0|t&(s|0)>(n|0)^1)){u=l+16|0;v=a+36|0;w=a+24|0;x=a+20|0;y=a+28|0;z=c+1|0;A=c+12|0;B=c+40|0;C=c+24|0;D=c+8|0;E=s;F=0;G=0;b:while(1){H=E+-1|0;k[m>>2]=H;I=k[u>>2]|0;c:do switch(k[I+(H<<2)>>2]|0){case 0:{if((k[v>>2]&1|0)!=0?(k[d>>2]=7,k[c>>2]=k[d>>2],J=eXa(l,c)|0,(J|0)!=0):0){K=F;L=G;M=J;break c}k[d>>2]=3;k[c>>2]=k[d>>2];K=F;L=G;M=eXa(l,c)|0;break}case 3:{k[d>>2]=5;k[c>>2]=k[d>>2];J=eXa(l,c)|0;if(!J){k[d>>2]=4;k[c>>2]=k[d>>2];K=F;L=G;M=eXa(l,c)|0}else{K=F;L=G;M=J}break}case 4:{k[d>>2]=9;k[c>>2]=k[d>>2];J=eXa(l,c)|0;if(!J){k[d>>2]=1;k[c>>2]=k[d>>2];K=F;L=G;M=eXa(l,c)|0}else{K=F;L=G;M=J}break}case 5:{J=k[p>>2]|0;N=i[J>>0]|0;if(N<<24>>24!=0?(O=k[v>>2]&1,P=(O|0)!=0,!(N<<24>>24==124&P)):0){do if(!((G|0)>0&(N<<24>>24==41&P))){if(N<<24>>24==92&(O|0)==0?(i[J+1>>0]|0)==41:0)break;k[d>>2]=5;k[c>>2]=k[d>>2];Q=eXa(l,c)|0;if(Q){K=F;L=G;M=Q;break c}k[d>>2]=F;k[c>>2]=k[d>>2];Q=eXa(l,c)|0;if(Q){K=F;L=G;M=Q;break c}k[d>>2]=6;k[c>>2]=k[d>>2];Q=eXa(l,c)|0;if(Q){K=F;L=G;M=Q;break c}k[d>>2]=4;k[c>>2]=k[d>>2];K=F;L=G;M=eXa(l,c)|0;break c}while(0);N=(O|G|0)==0?8:0;P=G+-1|0;if(!O){k[p>>2]=J+2;K=F;L=P;M=N}else{K=F;L=P;M=N}}else{K=F;L=G;M=0}break}case 6:{N=E+-2|0;k[m>>2]=N;P=gXa(k[a>>2]|0,k[I+(N<<2)>>2]|0,F)|0;if(!P){R=12;break a}K=P;L=G;M=0;break}case 7:{P=k[p>>2]|0;switch(i[P>>0]|0){case 124:break;case 41:{k[p>>2]=P+1;K=F;L=G;M=0;break c;break}default:{K=F;L=G;M=0;break c}}k[d>>2]=7;k[c>>2]=k[d>>2];P=eXa(l,c)|0;if(!P){k[d>>2]=F;k[c>>2]=k[d>>2];N=eXa(l,c)|0;if(!N){k[d>>2]=8;k[c>>2]=k[d>>2];Q=eXa(l,c)|0;if(!Q){k[d>>2]=3;k[c>>2]=k[d>>2];S=eXa(l,c)|0;if(!S){k[p>>2]=(k[p>>2]|0)+1;K=F;L=G;M=0}else{K=F;L=G;M=S}}else{K=F;L=G;M=Q}}else{K=F;L=G;M=N}}else{K=F;L=G;M=P}break}case 8:{P=E+-2|0;k[m>>2]=P;N=jXa(k[a>>2]|0,k[I+(P<<2)>>2]|0,F)|0;if(!N){R=12;break a}K=N;L=G;M=0;break}case 9:{N=k[p>>2]|0;P=i[N>>0]|0;switch(P<<24>>24|0){case 63:case 43:{if(!(k[v>>2]&1)){K=F;L=G;M=0;break c}else T=38;break}case 42:{T=38;break}case 92:{Q=k[v>>2]|0;if(Q&1){K=F;L=G;M=0;break c}S=N+1|0;if((i[S>>0]|0)!=123){K=F;L=G;M=0;break c}k[p>>2]=S;U=S;V=Q;break}case 123:{Q=k[v>>2]|0;if(!(Q&1)){K=F;L=G;M=0;break c}else{U=N;V=Q}break}default:{K=F;L=G;M=0;break c}}if((T|0)==38){T=0;k[p>>2]=N+1;N=hXa(k[a>>2]|0,F,P<<24>>24==43&1,P<<24>>24==63?1:-1,0)|0;if(!N){R=12;break a}k[d>>2]=9;k[c>>2]=k[d>>2];K=N;L=G;M=eXa(l,c)|0;break c}N=U+1|0;k[p>>2]=N;P=i[N>>0]|0;if((P+-48&255)<10){Q=P<<24>>24;if((Q+-48|0)>>>0<10){W=Q;X=-1;Y=N}else{R=10;break a}while(1){Q=W+-48+(((X|0)<0?0:X)*10|0)|0;S=Y+1|0;Z=i[S>>0]|0;W=Z<<24>>24;if((W+-48|0)>>>0>=10){_=S;$=Z;aa=Y;ba=Q;break}else{X=Q;Y=S}}}else{_=N;$=P;aa=U;ba=-1}if($<<24>>24==44){J=aa+2|0;O=i[J>>0]|0;S=O<<24>>24;if((S+-48|0)>>>0<10){Q=S;S=-1;Z=J;while(1){ca=Q+-48+(((S|0)<0?0:S)*10|0)|0;da=Z+1|0;ea=i[da>>0]|0;Q=ea<<24>>24;if((Q+-48|0)>>>0>=10){fa=da;ga=ea;ha=ca;T=50;break}else{S=ca;Z=da}}}else{ia=J;ja=O;ka=-1}}else{fa=_;ga=$;ha=ba;T=50}if((T|0)==50){T=0;if((ha|0)>-1?(ba|0)>(ha|0)|(ha|0)>255:0){R=10;break a}else{ia=fa;ja=ga;ka=ha}}if(!(ja<<24>>24)){R=9;break a}if((ia|0)==(N|0)){R=10;break a}if(!(V&1)){if(ja<<24>>24!=92){R=10;break a}if((i[ia+1>>0]|0)!=125){R=10;break a}la=ia+2|0}else{if(ja<<24>>24!=125){R=10;break a}la=ia+1|0}Z=la;if(ka|ba){S=(ka&ba|0)<0;Q=hXa(k[a>>2]|0,F,S?1:ba,S?1:ka,0)|0;if(!Q){R=12;break a}else ma=Q}else{Q=iXa(k[a>>2]|0,0,20)|0;if(!Q){R=12;break a}S=k[Q+4>>2]|0;k[S>>2]=-1;k[S+4>>2]=-1;k[S+8>>2]=-1;ma=Q}k[p>>2]=Z;k[d>>2]=9;k[c>>2]=k[d>>2];K=ma;L=G;M=eXa(l,c)|0;break}case 1:{Z=k[p>>2]|0;d:do switch(i[Z>>0]|0){case 40:{if(!(k[v>>2]&1))na=Z;else{oa=Z;T=67}break}case 91:{Q=Z+1|0;k[p>>2]=Q;S=xYa(128)|0;k[g>>2]=S;if(!S){T=72;break b}if((i[Q>>0]|0)==94){S=Z+2|0;k[p>>2]=S;pa=S;qa=1}else{pa=Q;qa=0}k[c>>2]=0;k[d>>2]=32;Q=0;S=pa;P=0;e:while(1){switch(i[S>>0]|0){case 0:{ra=Q;sa=S;ta=7;break e;break}case 93:{if(S>>>0>(k[p>>2]|0)>>>0){ua=Q;va=S;wa=P;T=78;break e}break}default:{}}da=tVa(e,S,-1)|0;if((da|0)<0){k[e>>2]=-1;xa=1}else xa=da;da=S+xa|0;if((i[da>>0]|0)==45?(i[da+1>>0]|0)!=93:0){ca=k[e>>2]|0;ea=S+(xa+1)|0;ya=tVa(e,ea,-1)|0;if((ya|0)<0){k[e>>2]=-1;za=-1;Aa=1}else{za=k[e>>2]|0;Aa=ya}ya=ea+Aa|0;if(ca>>>0>za>>>0){Ba=3;Ca=Q;Da=ya;Ea=11}else{Fa=0;Ga=za;Ha=ca;Ia=ya;Ja=P;T=97}}else T=87;f:do if((T|0)==87){T=0;g:do switch(i[S>>0]|0){case 91:{switch(i[S+1>>0]|0){case 61:case 46:{Ba=3;Ca=Q;Da=S;Ea=3;break f;break}case 58:break;default:{Ka=P;break g}}ya=S+2|0;ca=ya;while(1){ea=i[ca>>0]|0;La=ea<<24>>24==0;if(ea<<24>>24!=58&(La^1))ca=ca+1|0;else break}if(La){Ma=0;Na=S;Oa=4}else{ea=ca-S+-2|0;Pa=(ea|0)>63?63:ea;xMa(f,ya,Pa)|0;i[f+Pa>>0]=0;Pa=AIa(f)|0;Ma=Pa;Na=ca+2|0;Oa=(Pa|0)==0?4:P}Fa=Ma;Ga=1114111;Ha=0;Ia=Na;Ja=Oa;T=97;break f;break}case 45:{if((i[S+1>>0]|0)==93)Ka=P;else Ka=(k[p>>2]|0)==(S|0)?P:11;break}default:Ka=P}while(0);Pa=k[e>>2]|0;Fa=0;Ga=Pa;Ha=Pa;Ia=da;Ja=Ka;T=97}while(0);h:do if((T|0)==97){T=0;if(!Ja){if(qa&(Fa|0)!=0)if((Q|0)>63){Qa=Q;Ra=12}else{k[h+(Q<<2)>>2]=Fa;Qa=Q+1|0;Ra=0}else{da=qYa(k[a>>2]|0,Ha,Ga,c,d,g)|0;if(da){Ba=3;Ca=Q;Da=Ia;Ea=da;break}k[(k[(k[(k[g>>2]|0)+((k[c>>2]|0)+-1<<2)>>2]|0)+4>>2]|0)+12>>2]=Fa;Qa=Q;Ra=0}if(!((Ra|Fa|0)!=0|(k[v>>2]&2|0)==0)){da=Ha;Pa=Ra;while(1){if(da>>>0>Ga>>>0){Sa=Pa;break}do if(!(UIa(da)|0)){ea=da+1|0;if(!(HIa(da)|0)){Ta=ea;Ua=Pa;break}Va=KIa(da)|0;i:do if(!(HIa(ea)|0)){Wa=Va;Xa=ea}else{Ya=Va;Za=ea;while(1){if(Za>>>0>Ga>>>0|(KIa(Za)|0)!=(Ya+1|0)){Wa=Ya;Xa=Za;break i}_a=Za+1|0;$a=KIa(Za)|0;if(!(HIa(_a)|0)){Wa=$a;Xa=_a;break}else{Ya=$a;Za=_a}}}while(0);Ta=Xa;Ua=qYa(k[a>>2]|0,Va,Wa,c,d,g)|0}else{ea=JIa(da)|0;Za=da+1|0;j:do if(!(UIa(Za)|0)){ab=ea;bb=Za}else{Ya=ea;_a=Za;while(1){if(_a>>>0>Ga>>>0|(JIa(_a)|0)!=(Ya+1|0)){ab=Ya;bb=_a;break j}$a=JIa(_a)|0;cb=_a+1|0;if(!(UIa(cb)|0)){ab=$a;bb=cb;break}else{Ya=$a;_a=cb}}}while(0);Ta=bb;Ua=qYa(k[a>>2]|0,ea,ab,c,d,g)|0}while(0);if(!Ua){da=Ta;Pa=0}else{Ba=3;Ca=Qa;Da=Ia;Ea=Ua;break h}}if(!Sa)db=0;else{Ba=3;Ca=Qa;Da=Ia;Ea=Sa;break}}else db=Ra;Ba=0;Ca=Qa;Da=Ia;Ea=db}else{Ba=3;Ca=Q;Da=Ia;Ea=Ja}}while(0);if(!(Ba|Ea)){Q=Ca;S=Da;P=Ea}else{ra=Ca;sa=Da;ta=Ea;break}}if((T|0)==78){T=0;ra=ua;sa=va+1|0;ta=wa}P=k[c>>2]|0;k[p>>2]=sa;k:do if(!ta){if(qa)YNa(k[g>>2]|0,P,4,634);if((P|0)>0){S=(ra|0)>0;Q=ra<<2;Pa=Q+4|0;da=k[g>>2]|0;ca=0;ya=0;Za=0;Va=0;while(1){_a=k[(k[da+(Za<<2)>>2]|0)+4>>2]|0;Ya=k[_a>>2]|0;cb=_a+4|0;$a=k[cb>>2]|0;do if(qa){if((Ya|0)<(ca|0)){eb=$a+1|0;fb=da;gb=(eb|0)>=(ca|0)?eb:ca;hb=ya;ib=Va;jb=0;break}if((Ya|0)>(ya|0)){k[_a>>2]=ya;k[cb>>2]=Ya+-1;kb=_a}else kb=0;eb=$a+1|0;lb=eb;mb=eb;nb=kb;T=130}else{lb=ca;mb=ya;nb=_a;T=130}while(0);do if((T|0)==130){T=0;if(nb){k[nb+8>>2]=k[w>>2];if(S){_a=dQa(k[a>>2]|0,0,0,0,Pa)|0;$a=nb+16|0;k[$a>>2]=_a;if(!_a){ob=Va;pb=12;break k}Dyb(_a|0,h|0,Q|0)|0;k[(k[$a>>2]|0)+(ra<<2)>>2]=0}else k[nb+16>>2]=0;if(!Va){$a=k[g>>2]|0;fb=$a;gb=lb;hb=mb;ib=k[$a+(Za<<2)>>2]|0;jb=0;break}else{$a=k[g>>2]|0;_a=jXa(k[a>>2]|0,Va,k[$a+(Za<<2)>>2]|0)|0;fb=$a;gb=lb;hb=mb;ib=_a;jb=(_a|0)==0?12:0;break}}else{fb=da;gb=lb;hb=mb;ib=Va;jb=0}}while(0);Za=Za+1|0;if(!((Za|0)<(P|0)&(jb|0)==0)){qb=hb;rb=ib;sb=jb;break}else{da=fb;ca=gb;ya=hb;Va=ib}}}else{qb=0;rb=0;sb=0}if(qa&(sb|0)==0){Va=k[w>>2]|0;ya=iXa(k[a>>2]|0,0,20)|0;if(ya){ca=k[ya+4>>2]|0;k[ca>>2]=qb;k[ca+4>>2]=1114111;k[ca+8>>2]=Va;if((ra|0)>0){Va=ra<<2;da=dQa(k[a>>2]|0,0,0,0,Va+4|0)|0;Za=ca+16|0;k[Za>>2]=da;if(!da){ob=rb;pb=12;break}Dyb(da|0,h|0,Va|0)|0;k[(k[Za>>2]|0)+(ra<<2)>>2]=0}else k[ca+16>>2]=0;if(!rb){ob=ya;pb=0}else{ca=jXa(k[a>>2]|0,rb,ya)|0;ob=ca;pb=(ca|0)==0?12:0}}else{ob=rb;pb=12}}else{ob=rb;pb=sb}}else{ob=0;pb=ta}while(0);yYa(k[g>>2]|0);k[w>>2]=(k[w>>2]|0)+1;if(!pb){K=ob;L=G;M=0;break c}else{R=pb;break a}break}case 92:{P=Z+1|0;ca=i[P>>0]|0;do if(!(k[v>>2]&1))if(ca<<24>>24!=40){ya=Z+1|0;Za=i[ya>>0]|0;if(Za<<24>>24==41){T=212;break d}else{tb=ya;ub=Za;break}}else{k[p>>2]=P;oa=P;T=67;break d}else{tb=P;ub=ca}while(0);ca=ub<<24>>24==0;if(ca){R=5;break a}else{vb=61808;wb=0}while(1){if((i[61804+(wb<<3)>>0]|0)==ub<<24>>24){xb=vb;break}wb=wb+1|0;P=61804+(wb<<3)+4|0;if((wb|0)==12){xb=P;break}else vb=P}P=k[xb>>2]|0;if(P){Za=c;ya=a;Va=Za+40|0;do{k[Za>>2]=k[ya>>2];Za=Za+4|0;ya=ya+4|0}while((Za|0)<(Va|0));k[A>>2]=P;k[B>>2]=1;ya=cXa(c)|0;if(ya){yb=ya;T=157;break b}k[p>>2]=(k[p>>2]|0)+2;k[w>>2]=k[C>>2];K=k[D>>2]|0;L=G;M=0;break c}if(ca){R=5;break a}k[p>>2]=tb;ya=i[tb>>0]|0;l:do switch(ya|0){case 98:{Za=iXa(k[a>>2]|0,0,20)|0;if(!Za)zb=0;else{Va=k[Za+4>>2]|0;k[Va>>2]=-2;k[Va+4>>2]=64;k[Va+8>>2]=-1;zb=Za}k[p>>2]=(k[p>>2]|0)+1;Ab=zb;break}case 66:{Za=iXa(k[a>>2]|0,0,20)|0;if(!Za)Bb=0;else{Va=k[Za+4>>2]|0;k[Va>>2]=-2;k[Va+4>>2]=128;k[Va+8>>2]=-1;Bb=Za}k[p>>2]=(k[p>>2]|0)+1;Ab=Bb;break}case 60:{Za=iXa(k[a>>2]|0,0,20)|0;if(!Za)Cb=0;else{Va=k[Za+4>>2]|0;k[Va>>2]=-2;k[Va+4>>2]=16;k[Va+8>>2]=-1;Cb=Za}k[p>>2]=(k[p>>2]|0)+1;Ab=Cb;break}case 62:{Za=iXa(k[a>>2]|0,0,20)|0;if(!Za)Db=0;else{Va=k[Za+4>>2]|0;k[Va>>2]=-2;k[Va+4>>2]=32;k[Va+8>>2]=-1;Db=Za}k[p>>2]=(k[p>>2]|0)+1;Ab=Db;break}case 120:{Za=Z+2|0;k[p>>2]=Za;Va=i[Za>>0]|0;if(Va<<24>>24==123){da=Z+3|0;k[p>>2]=da;Q=da;da=Za;Za=0;m:while(1){Pa=i[Q>>0]|0;switch(Pa<<24>>24){case 0:case 125:{Eb=da;Fb=Za;break m;break}default:{}}if(!(FIa(Pa<<24>>24)|0)){T=188;break b}Pa=k[p>>2]|0;i[c+Za>>0]=i[Pa>>0]|0;S=Za+1|0;Q=Pa+1|0;k[p>>2]=Q;if(S>>>0>31){Eb=Pa;Fb=S;break}else{da=Pa;Za=S}}k[p>>2]=Eb+2;i[c+Fb>>0]=0;Za=lOa(c,0,16)|0;da=k[w>>2]|0;Q=iXa(k[a>>2]|0,0,20)|0;if(!Q)Gb=0;else{S=k[Q+4>>2]|0;k[S>>2]=Za;k[S+4>>2]=Za;k[S+8>>2]=da;Gb=Q}k[w>>2]=(k[w>>2]|0)+1;Ab=Gb;break l}else{i[c>>0]=0;i[c+1>>0]=0;i[c+2>>0]=0;Q=(FIa(Va<<24>>24)|0)==0;da=k[p>>2]|0;if(Q)Hb=da;else{i[c>>0]=i[da>>0]|0;Q=da+1|0;k[p>>2]=Q;Hb=Q}if(FIa(i[Hb>>0]|0)|0){Q=k[p>>2]|0;i[z>>0]=i[Q>>0]|0;k[p>>2]=Q+1}Q=lOa(c,0,16)|0;da=k[w>>2]|0;S=iXa(k[a>>2]|0,0,20)|0;if(!S)Ib=0;else{Za=k[S+4>>2]|0;k[Za>>2]=Q;k[Za+4>>2]=Q;k[Za+8>>2]=da;Ib=S}k[w>>2]=(k[w>>2]|0)+1;Ab=Ib;break l}break}default:{S=(WIa(ya)|0)==0;da=k[p>>2]|0;if(S){na=da;break d}S=(i[da>>0]|0)+-48|0;da=k[w>>2]|0;Za=iXa(k[a>>2]|0,0,20)|0;if(!Za){R=12;break a}Q=k[Za+4>>2]|0;k[Q>>2]=-4;k[Q+4>>2]=S;k[Q+8>>2]=da;k[w>>2]=(k[w>>2]|0)+1;da=k[y>>2]|0;k[y>>2]=(S|0)<(da|0)?da:S;k[p>>2]=(k[p>>2]|0)+1;K=Za;L=G;M=0;break c}}while(0);if(!Ab){R=12;break a}else{K=Ab;L=G;M=0;break c}break}case 46:{ya=(k[v>>2]&4|0)==0;ca=k[w>>2]|0;P=iXa(k[a>>2]|0,0,20)|0;Za=(P|0)==0;if(ya){if(Za){R=12;break a}ya=k[P+4>>2]|0;k[ya>>2]=0;k[ya+4>>2]=1114111;k[ya+8>>2]=ca;Jb=P;Kb=(k[w>>2]|0)+1|0}else{if(Za){R=12;break a}Za=k[P+4>>2]|0;k[Za>>2]=0;k[Za+4>>2]=9;k[Za+8>>2]=ca;ca=k[w>>2]|0;Za=iXa(k[a>>2]|0,0,20)|0;if(!Za){R=12;break a}ya=k[Za+4>>2]|0;k[ya>>2]=11;k[ya+4>>2]=1114111;k[ya+8>>2]=ca+1;ca=jXa(k[a>>2]|0,P,Za)|0;if(!ca){R=12;break a}Jb=ca;Kb=(k[w>>2]|0)+2|0}k[w>>2]=Kb;k[p>>2]=(k[p>>2]|0)+1;K=Jb;L=G;M=0;break c;break}case 94:{if(!(k[v>>2]&1)){if((Z|0)!=(k[q>>2]|0)){na=Z;break d}k[d>>2]=5;k[c>>2]=k[d>>2];ca=eXa(l,c)|0;if(ca){K=F;L=G;M=ca;break c}}ca=iXa(k[a>>2]|0,0,20)|0;if(!ca){R=12;break a}Za=k[ca+4>>2]|0;k[Za>>2]=-2;k[Za+4>>2]=1;k[Za+8>>2]=-1;k[p>>2]=(k[p>>2]|0)+1;K=ca;L=G;M=0;break c;break}case 36:{if((k[v>>2]&1|0)==0?(i[Z+1>>0]|0)!=0:0){na=Z;break d}ca=iXa(k[a>>2]|0,0,20)|0;if(!ca){R=12;break a}Za=k[ca+4>>2]|0;k[Za>>2]=-2;k[Za+4>>2]=2;k[Za+8>>2]=-1;k[p>>2]=(k[p>>2]|0)+1;K=ca;L=G;M=0;break c;break}case 41:{if(!G)na=Z;else T=211;break}case 63:case 43:case 123:case 124:case 42:{T=211;break}case 0:{T=212;break}default:na=Z}while(0);if((T|0)==67){T=0;N=G+1|0;k[p>>2]=oa+1;k[d>>2]=k[x>>2];k[c>>2]=k[d>>2];O=eXa(l,c)|0;if(O){K=F;L=N;M=O;break c}k[d>>2]=2;k[c>>2]=k[d>>2];O=eXa(l,c)|0;if(O){K=F;L=N;M=O;break c}k[d>>2]=0;k[c>>2]=k[d>>2];O=eXa(l,c)|0;if(O){K=F;L=N;M=O;break c}k[x>>2]=(k[x>>2]|0)+1;K=F;L=N;M=0;break c}else if((T|0)==211){T=0;if(!(k[v>>2]&1))na=Z;else T=212}if((T|0)==212){T=0;N=iXa(k[a>>2]|0,0,20)|0;if(!N){R=12;break a}O=k[N+4>>2]|0;k[O>>2]=-1;k[O+4>>2]=-1;k[O+8>>2]=-1;K=N;L=G;M=0;break c}N=tVa(j,na,-1)|0;if((N|0)<0){k[j>>2]=-1;Lb=1}else Lb=N;do if(k[v>>2]&2){if((HIa(k[j>>2]|0)|0)==0?(UIa(k[j>>2]|0)|0)==0:0){T=222;break}N=k[a>>2]|0;O=JIa(k[j>>2]|0)|0;J=JIa(k[j>>2]|0)|0;ca=k[w>>2]|0;Za=iXa(N,0,20)|0;if(!Za){R=12;break a}N=k[Za+4>>2]|0;k[N>>2]=O;k[N+4>>2]=J;k[N+8>>2]=ca;ca=k[a>>2]|0;N=KIa(k[j>>2]|0)|0;J=KIa(k[j>>2]|0)|0;O=k[w>>2]|0;P=iXa(ca,0,20)|0;if(!P){R=12;break a}ca=k[P+4>>2]|0;k[ca>>2]=N;k[ca+4>>2]=J;k[ca+8>>2]=O;O=jXa(k[a>>2]|0,Za,P)|0;if(!O){R=12;break a}else Mb=O}else T=222;while(0);if((T|0)==222){T=0;Z=k[j>>2]|0;O=k[w>>2]|0;P=iXa(k[a>>2]|0,0,20)|0;if(!P){R=12;break a}Za=k[P+4>>2]|0;k[Za>>2]=Z;k[Za+4>>2]=Z;k[Za+8>>2]=O;Mb=P}k[w>>2]=(k[w>>2]|0)+1;k[p>>2]=(k[p>>2]|0)+Lb;K=Mb;L=G;M=0;break}case 2:{P=E+-2|0;k[m>>2]=P;O=k[I+(P<<2)>>2]|0;P=F;if((k[P+12>>2]|0)>-1){Za=iXa(k[a>>2]|0,0,20)|0;if(!Za){R=12;break a}Z=k[Za+4>>2]|0;k[Z>>2]=-1;k[Z+4>>2]=-1;k[Z+8>>2]=-1;Z=gXa(k[a>>2]|0,Za,P)|0;if(!Z){R=12;break a}k[Z+16>>2]=k[P+16>>2];Nb=Z}else Nb=F;Z=Nb;k[Z+12>>2]=O;O=Z+16|0;k[O>>2]=(k[O>>2]|0)+1;K=Nb;L=G;M=0;break}case 10:{O=E+-2|0;k[m>>2]=O;k[v>>2]=k[I+(O<<2)>>2];K=F;L=G;M=0;break}default:{K=F;L=G;M=0}}while(0);E=k[m>>2]|0;I=(M|0)==0;if((M|0)!=0|I&(E|0)>(n|0)^1){Ob=K;Pb=I;Qb=L;Rb=M;T=231;break a}else{F=K;G=L}}if((T|0)==72){R=12;break}else if((T|0)==157){R=yb;break}else if((T|0)==188){R=9;break}}else{Ob=0;Pb=t;Qb=0;Rb=o;T=231}while(0);if((T|0)==231){T=(Qb|0)>0;if(T|Pb^1)R=T?8:Rb;else{k[a+8>>2]=Ob;R=Rb}}r=b;return R|0}function dXa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0;e=r;r=r+16|0;f=e+4|0;g=e;h=b+12|0;j=k[h>>2]|0;l=(a|0)==0|(d|0)==0;if(!l){k[d+48>>2]=0;k[k[d+36>>2]>>2]=-1}m=k[d+28>>2]|0;n=xYa((m<<3)+8|0)|0;do if(!n)o=12;else{k[n>>2]=-1;p=xYa((m<<2)+4|0)|0;if(!p){yYa(n);o=12;break}k[p>>2]=-1;q=0;while(1)if(q>>>0>m>>>0)break;else q=q+1|0;k[g>>2]=c;k[f>>2]=k[g>>2];eXa(b,f)|0;k[g>>2]=0;k[f>>2]=k[g>>2];q=eXa(b,f)|0;s=k[h>>2]|0;a:do if((q|0)!=0|(s|0)<=(j|0)){t=-1;u=0;v=0;w=n;x=q;y=0}else{z=b+16|0;A=d+32|0;B=d+36|0;C=d+16|0;D=s;E=0;F=-1;G=1;H=0;I=0;J=n;K=0;while(1){L=D+-1|0;k[h>>2]=L;M=k[z>>2]|0;switch(k[M+(L<<2)>>2]|0){case 6:{L=D+-2|0;k[h>>2]=L;N=k[M+(L<<2)>>2]|0;L=0;while(1){O=J+(L<<2)|0;P=L+1|0;if((k[O>>2]|0)>-1)L=P;else{Q=O;R=P;break}}k[Q>>2]=N<<1|1;k[J+(R<<2)>>2]=-1;L=0;while(1)if((k[p+(L<<2)>>2]|0)>-1)L=L+1|0;else{S=L;break}k[p+(S+-1<<2)>>2]=-1;T=E;U=F;V=G;W=H;X=I;Y=J;Z=0;_=K;break}case 0:{L=D+-2|0;k[h>>2]=L;N=k[M+(L<<2)>>2]|0;L=N+12|0;P=k[L>>2]|0;if((P|0)>-1){O=0;while(1){$=J+(O<<2)|0;aa=O+1|0;if((k[$>>2]|0)>-1)O=aa;else{ba=$;ca=aa;break}}k[ba>>2]=P<<1;k[J+(ca<<2)>>2]=-1;if(!l){O=0;while(1)if((k[p+(O<<2)>>2]|0)>-1)O=O+1|0;else{da=O;break}O=(k[C>>2]|0)+(P*12|0)+8|0;k[O>>2]=0;if((da|0)>0){aa=xYa((da<<2)+4|0)|0;if(!aa){t=F;u=H;v=I;w=J;x=12;y=K;break a}k[O>>2]=aa;O=k[p>>2]|0;if((O|0)>-1){$=O;O=aa;ea=0;while(1){k[O>>2]=$;ea=ea+1|0;$=k[p+(ea<<2)>>2]|0;fa=aa+(ea<<2)|0;if(($|0)<=-1){ga=fa;break}else O=fa}}else ga=aa;k[ga>>2]=-1}}k[g>>2]=k[L>>2];k[f>>2]=k[g>>2];O=eXa(b,f)|0;if(O){t=F;u=H;v=I;w=J;x=O;y=K;break a}k[g>>2]=6;k[f>>2]=k[g>>2];O=eXa(b,f)|0;if(O){t=F;u=H;v=I;w=J;x=O;y=K;break a}}b:do switch(k[N>>2]|0){case 0:{O=k[k[N+4>>2]>>2]|0;if((O|0)>-1|(O|0)==-4?(k[J>>2]|0)>-1:0){if(l){k[N+20>>2]=1;ha=F;ia=H;ja=0}else{O=nYa(a,N,K)|0;k[(k[A>>2]|0)+(K<<2)>>2]=E;if((F|0)>-1){$=k[B>>2]|0;ea=0;while(1){P=$+(ea<<2)|0;fa=ea+1|0;if((k[P>>2]|0)>-1)ea=fa;else{ka=P;la=fa;ma=ea;break}}k[ka>>2]=K;k[$+(la<<2)>>2]=F;k[$+(ma+2<<2)>>2]=-1;na=-1;oa=H+1|0}else{na=F;oa=H}oYa(J,d,K);ha=na;ia=oa;ja=O}k[J>>2]=-1;pa=E;qa=ha;ra=G+1|0;sa=ia;ta=I+1|0;ua=ja;va=G}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=0;va=K}break}case 1:{ea=k[N+4>>2]|0;fa=k[ea>>2]|0;P=k[ea+4>>2]|0;k[g>>2]=N;k[f>>2]=k[g>>2];ea=eXa(b,f)|0;if(!ea){k[g>>2]=5;k[f>>2]=k[g>>2];wa=eXa(b,f)|0;if(!wa){k[g>>2]=P;k[f>>2]=k[g>>2];xa=eXa(b,f)|0;if(!xa){k[g>>2]=0;k[f>>2]=k[g>>2];ya=eXa(b,f)|0;if(!ya){za=fa+20|0;k[g>>2]=(k[za>>2]|0)+G;k[f>>2]=k[g>>2];Aa=eXa(b,f)|0;if(!Aa){if((k[za>>2]|0)>0){za=(k[P+20>>2]|0)>0;Ba=(za&1)+G|0;Ca=za?G:-1}else{Ba=G;Ca=-1}k[g>>2]=Ca;k[f>>2]=k[g>>2];za=eXa(b,f)|0;if(!za){k[g>>2]=4;k[f>>2]=k[g>>2];P=eXa(b,f)|0;if(!P){k[g>>2]=fa;k[f>>2]=k[g>>2];fa=eXa(b,f)|0;if(!fa){k[g>>2]=0;k[f>>2]=k[g>>2];pa=E;qa=F;ra=Ba;sa=H;ta=I;ua=eXa(b,f)|0;va=K}else{pa=E;qa=F;ra=Ba;sa=H;ta=I;ua=fa;va=K}}else{pa=E;qa=F;ra=Ba;sa=H;ta=I;ua=P;va=K}}else{pa=E;qa=F;ra=Ba;sa=H;ta=I;ua=za;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Aa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=ya;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=xa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=wa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=ea;va=K}break}case 2:{ea=k[N+4>>2]|0;if(l){if((k[J>>2]|0)>-1)Da=1;else Da=(i[ea+12>>0]&1)!=0;k[g>>2]=Da&1;k[f>>2]=k[g>>2];wa=eXa(b,f)|0;if(wa){pa=E;qa=F;ra=G;sa=H;ta=I;ua=wa;va=K;break b}}else{k[g>>2]=K;k[f>>2]=k[g>>2];wa=eXa(b,f)|0;if(wa){pa=E;qa=F;ra=G;sa=H;ta=I;ua=wa;va=K;break b}k[g>>2]=i[ea+12>>0]&1;k[f>>2]=k[g>>2];wa=eXa(b,f)|0;if(wa){pa=E;qa=F;ra=G;sa=H;ta=I;ua=wa;va=K;break b}}k[g>>2]=N;k[f>>2]=k[g>>2];wa=eXa(b,f)|0;if(!wa){k[g>>2]=1;k[f>>2]=k[g>>2];xa=eXa(b,f)|0;if(!xa){k[g>>2]=k[ea>>2];k[f>>2]=k[g>>2];ya=eXa(b,f)|0;if(!ya){k[g>>2]=0;k[f>>2]=k[g>>2];Aa=eXa(b,f)|0;if(!Aa){if((k[J>>2]|0)<=-1?(i[ea+12>>0]&1)==0:0){pa=0;qa=F;ra=G;sa=H;ta=I;ua=0;va=K;break b}if(l){Ea=F;Fa=H;Ga=0}else{za=nYa(a,N,K)|0;k[(k[A>>2]|0)+(K<<2)>>2]=(i[ea+12>>0]&1)==0?E:1;if((F|0)>-1){ea=k[B>>2]|0;P=0;while(1){fa=ea+(P<<2)|0;Ha=P+1|0;if((k[fa>>2]|0)>-1)P=Ha;else{Ia=fa;Ja=Ha;Ka=P;break}}k[Ia>>2]=K;k[ea+(Ja<<2)>>2]=F;k[ea+(Ka+2<<2)>>2]=-1;La=-1;Ma=H+1|0}else{La=F;Ma=H}oYa(J,d,K);Ea=La;Fa=Ma;Ga=za}k[J>>2]=-1;pa=0;qa=Ea;ra=G+1|0;sa=Fa;ta=I+1|0;ua=Ga;va=G}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Aa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=ya;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=xa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=wa;va=K}break}case 3:{P=k[N+4>>2]|0;O=k[P>>2]|0;$=k[P+4>>2]|0;P=(k[J>>2]|0)>-1;Ha=G+1|0;k[g>>2]=P?Ha:G;k[f>>2]=k[g>>2];fa=eXa(b,f)|0;if(!fa){k[g>>2]=P?G:K;k[f>>2]=k[g>>2];P=eXa(b,f)|0;if(!P){k[g>>2]=J;k[f>>2]=k[g>>2];Na=eXa(b,f)|0;if(!Na){k[g>>2]=(k[J>>2]|0)>>>31^1;k[f>>2]=k[g>>2];Oa=eXa(b,f)|0;if(!Oa){k[g>>2]=N;k[f>>2]=k[g>>2];Pa=eXa(b,f)|0;if(!Pa){k[g>>2]=$;k[f>>2]=k[g>>2];Qa=eXa(b,f)|0;if(!Qa){k[g>>2]=O;k[f>>2]=k[g>>2];Ra=eXa(b,f)|0;if(!Ra){k[g>>2]=3;k[f>>2]=k[g>>2];Sa=eXa(b,f)|0;if(!Sa){k[g>>2]=$;k[f>>2]=k[g>>2];$=eXa(b,f)|0;if(!$){k[g>>2]=0;k[f>>2]=k[g>>2];Ta=eXa(b,f)|0;if(!Ta){k[g>>2]=2;k[f>>2]=k[g>>2];Ua=eXa(b,f)|0;if(Ua){pa=E;qa=F;ra=G;sa=H;ta=I;ua=Ua;va=K;break b}k[g>>2]=O;k[f>>2]=k[g>>2];O=eXa(b,f)|0;if(O){pa=E;qa=F;ra=G;sa=H;ta=I;ua=O;va=K;break b}k[g>>2]=0;k[f>>2]=k[g>>2];O=eXa(b,f)|0;if(O){pa=E;qa=F;ra=G;sa=H;ta=I;ua=O;va=K;break b}if((k[J>>2]|0)>-1){if(l){Va=F;Wa=H;Xa=0}else{O=nYa(a,N,K)|0;k[(k[A>>2]|0)+(K<<2)>>2]=E;if((F|0)>-1){Ua=k[B>>2]|0;Ya=0;while(1){Za=Ua+(Ya<<2)|0;_a=Ya+1|0;if((k[Za>>2]|0)>-1)Ya=_a;else{$a=Za;ab=_a;bb=Ya;break}}k[$a>>2]=K;k[Ua+(ab<<2)>>2]=F;k[Ua+(bb+2<<2)>>2]=-1;cb=-1;db=H+1|0}else{cb=F;db=H}oYa(J,d,K);Va=cb;Wa=db;Xa=O}k[J>>2]=-1;eb=Va;fb=Ha;gb=Wa;hb=I+1|0;ib=Xa;jb=G}else{eb=F;fb=G;gb=H;hb=I;ib=0;jb=K}Ya=(k[N+16>>2]|0)>0;pa=E;qa=eb;ra=Ya?fb+2|0:fb;sa=gb;ta=hb;ua=ib;va=Ya?fb+1|0:jb}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Ta;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=$;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Sa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Ra;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Qa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Pa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Oa;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=Na;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=P;va=K}}else{pa=E;qa=F;ra=G;sa=H;ta=I;ua=fa;va=K}break}default:{pa=E;qa=F;ra=G;sa=H;ta=I;ua=0;va=K}}while(0);N=k[L>>2]|0;if((N|0)>-1){aa=0;while(1){Ya=p+(aa<<2)|0;wa=aa+1|0;if((k[Ya>>2]|0)>-1)aa=wa;else{kb=Ya;lb=wa;break}}k[kb>>2]=N;k[p+(lb<<2)>>2]=-1;T=pa;U=qa;V=ra;W=sa;X=ta;Y=J;Z=ua;_=va}else{T=pa;U=qa;V=ra;W=sa;X=ta;Y=J;Z=ua;_=va}break}case 1:{aa=D+-2|0;k[h>>2]=aa;L=k[M+(aa<<2)>>2]|0;if(l){aa=k[(k[k[L+4>>2]>>2]|0)+20>>2]|0;wa=D+-3|0;k[h>>2]=wa;k[L+20>>2]=(k[M+(wa<<2)>>2]|0)+aa;mb=0;nb=-1}else{aa=D+-3|0;k[h>>2]=aa;wa=k[M+(aa<<2)>>2]|0;aa=D+-4|0;k[h>>2]=aa;mb=wa;nb=(wa|0)==0?F:k[M+(aa<<2)>>2]|0}T=l?E:(mb|0)==0&1;U=nb;V=G;W=H;X=I;Y=J;Z=0;_=K;break}case 4:{aa=D+-2|0;k[h>>2]=aa;wa=k[M+(aa<<2)>>2]|0;aa=D+-3|0;k[h>>2]=aa;T=E;U=F;V=k[M+(aa<<2)>>2]|0;W=H;X=I;Y=J;Z=0;_=(wa|0)>-1?wa:K;break}case 5:{wa=D+-2|0;k[h>>2]=wa;aa=k[M+(wa<<2)>>2]|0;if(l){wa=k[aa+4>>2]|0;k[aa+20>>2]=(k[(k[wa+4>>2]|0)+20>>2]|0)+(k[(k[wa>>2]|0)+20>>2]|0);T=E;U=F;V=G;W=H;X=I;Y=J;Z=0;_=K}else{T=E;U=F;V=G;W=H;X=I;Y=J;Z=0;_=K}break}case 2:{wa=J;while(1)if((k[wa>>2]|0)>-1)wa=wa+4|0;else{T=E;U=F;V=G;W=H;X=I;Y=wa;Z=0;_=K;break}break}case 3:{wa=k[M+(D+-2<<2)>>2]|0;N=k[M+(D+-3<<2)>>2]|0;aa=k[M+(D+-4<<2)>>2]|0;L=D+-5|0;k[h>>2]=L;if(l){Ya=k[aa+4>>2]|0;xa=k[aa+16>>2]|0;k[aa+20>>2]=(k[(k[Ya>>2]|0)+20>>2]|0)+(k[M+(L<<2)>>2]|0)+(k[(k[Ya+4>>2]|0)+20>>2]|0)+((xa|0)>0?2:0);ob=xa}else ob=k[aa+16>>2]|0;aa=k[M+(D+-6<<2)>>2]|0;xa=D+-7|0;k[h>>2]=xa;Ya=k[M+(xa<<2)>>2]|0;xa=D+-8|0;k[h>>2]=xa;L=k[M+(xa<<2)>>2]|0;if((ob|0)>0){if(l)pb=0;else{pYa(a,wa,Ya)|0;k[(k[A>>2]|0)+(Ya<<2)>>2]=1;Ya=pYa(a,N,L)|0;k[(k[A>>2]|0)+(L<<2)>>2]=1;pb=Ya}T=1;U=F;V=G;W=H;X=I+2|0;Y=aa;Z=pb;_=K}else{T=1;U=F;V=G;W=H;X=I;Y=aa;Z=0;_=K}break}default:{T=E;U=F;V=G;W=H;X=I;Y=J;Z=0;_=K}}D=k[h>>2]|0;if((Z|0)!=0|(D|0)<=(j|0)){t=U;u=W;v=X;w=Y;x=Z;y=_;break a}else{E=T;F=U;G=V;H=W;I=X;J=Y;K=_}}}while(0);if(!l?(oYa(w,d,y),(t|0)>-1):0){s=k[d+36>>2]|0;q=0;while(1){K=s+(q<<2)|0;J=q+1|0;if((k[K>>2]|0)>-1)q=J;else{qb=K;rb=J;sb=q;break}}k[qb>>2]=y;k[s+(rb<<2)>>2]=t;k[s+(sb+2<<2)>>2]=-1;tb=u+1|0}else tb=u;k[d+48>>2]=v;k[d+40>>2]=v;k[d+44>>2]=tb;yYa(n);yYa(p);o=x}while(0);r=e;return o|0}function eXa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+12|0;f=k[e>>2]|0;g=k[a>>2]|0;if((f|0)>=(g|0)){h=k[a+4>>2]|0;if((g|0)<(h|0)?(i=(k[a+8>>2]|0)+g|0,g=(i|0)>(h|0)?h:i,i=a+16|0,h=AYa(k[i>>2]|0,g<<2)|0,(h|0)!=0):0){k[a>>2]=g;k[i>>2]=h;k[d>>2]=k[b>>2];eXa(a,d)|0;j=0}else j=12}else{k[(k[a+16>>2]|0)+(f<<2)>>2]=k[b>>2];k[e>>2]=(k[e>>2]|0)+1;j=0}r=c;return j|0}function fXa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;j=r;r=r+16|0;l=j+4|0;m=j;n=b+12|0;o=k[n>>2]|0;k[m>>2]=c;k[l>>2]=k[m>>2];eXa(b,l)|0;k[m>>2]=0;k[l>>2]=k[m>>2];c=eXa(b,l)|0;a:do if(!c){p=b+16|0;q=(d&1|0)==0;s=(d&2|0)!=0;t=1;u=0;v=g;while(1){w=k[n>>2]|0;if((w|0)>(o|0)){x=w;y=v}else{z=u;A=0;break a}b:while(1){w=k[p>>2]|0;B=x;c:while(1){C=B+-1|0;k[n>>2]=C;switch(k[w+(C<<2)>>2]|0){case 1:{D=B;E=w;F=7;break c;break}case 0:{C=B+-2|0;k[n>>2]=C;G=k[w+(C<<2)>>2]|0;switch(k[G>>2]|0){case 0:{H=G;I=y;F=9;break b;break}case 3:{J=G;K=y;F=20;break b;break}case 1:{L=G;M=y;F=27;break b;break}case 2:{N=G;F=34;break c;break}default:{}}break}default:{}}B=k[n>>2]|0;if((B|0)<=(o|0)){z=u;A=0;break a}}if((F|0)==7){F=0;B=D+-2|0;k[n>>2]=B;O=k[E+(B<<2)>>2]|0}else if((F|0)==34){F=0;B=k[N+4>>2]|0;k[m>>2]=k[B>>2];k[l>>2]=k[m>>2];w=eXa(b,l)|0;if(w){z=u;A=w;break a}k[m>>2]=0;k[l>>2]=k[m>>2];w=eXa(b,l)|0;if(w){z=u;A=w;break a}w=hXa(a,k[B>>2]|0,k[B+4>>2]|0,k[B+8>>2]|0,i[B+12>>0]&1)|0;k[y>>2]=w;if(!w){z=u;A=12;break a}O=k[w+4>>2]|0}x=k[n>>2]|0;if((x|0)<=(o|0)){z=u;A=0;break a}else y=O}if((F|0)==9){F=0;w=k[H+4>>2]|0;B=k[w+8>>2]|0;G=k[w>>2]|0;C=k[w+4>>2]|0;if(!((G|0)>-1|(G|0)==-4))if(q|(G|0)!=-3)if((G|0)==-3)if(s&(t|0)!=0){k[f+(C<<2)>>2]=1;P=0;Q=C;R=-3;S=u;T=B}else{P=t;Q=C;R=-3;S=u;T=B}else{P=t;Q=C;R=G;S=u;T=B}else{P=t;Q=-1;R=-1;S=u;T=-1}else{P=t;Q=C;R=G;S=u+1|0;T=(k[e>>2]|0)+B|0}B=iXa(a,0,20)|0;if(!B){k[I>>2]=0;U=12}else{G=B+4|0;C=k[G>>2]|0;k[C>>2]=R;k[C+4>>2]=Q;k[C+8>>2]=T;k[I>>2]=B;B=k[G>>2]|0;k[B+12>>2]=k[w+12>>2];k[B+16>>2]=k[w+16>>2];U=0}if((T|0)>(k[h>>2]|0)){k[h>>2]=T;V=P;W=S;X=I;Y=U}else{V=P;W=S;X=I;Y=U}}else if((F|0)==20){F=0;w=k[J+4>>2]|0;B=w+4|0;G=jXa(a,k[w>>2]|0,k[B>>2]|0)|0;k[K>>2]=G;if(!G){z=u;A=12;break a}C=k[G+4>>2]|0;k[m>>2]=k[B>>2];k[l>>2]=k[m>>2];B=eXa(b,l)|0;if(B){z=u;A=B;break a}k[m>>2]=0;k[l>>2]=k[m>>2];B=eXa(b,l)|0;if(B){z=u;A=B;break a}k[m>>2]=C+4;k[l>>2]=k[m>>2];B=eXa(b,l)|0;if(B){z=u;A=B;break a}k[m>>2]=1;k[l>>2]=k[m>>2];B=eXa(b,l)|0;if(B){z=u;A=B;break a}k[m>>2]=k[w>>2];k[l>>2]=k[m>>2];w=eXa(b,l)|0;if(w){z=u;A=w;break a}k[m>>2]=0;k[l>>2]=k[m>>2];V=t;W=u;X=C;Y=eXa(b,l)|0}else if((F|0)==27){F=0;C=k[L+4>>2]|0;w=C+4|0;B=gXa(a,k[C>>2]|0,k[w>>2]|0)|0;k[M>>2]=B;if(!B){z=u;A=12;break a}G=k[B+4>>2]|0;k[G>>2]=0;B=G+4|0;k[B>>2]=0;k[m>>2]=k[w>>2];k[l>>2]=k[m>>2];w=eXa(b,l)|0;if(w){z=u;A=w;break a}k[m>>2]=0;k[l>>2]=k[m>>2];w=eXa(b,l)|0;if(w){z=u;A=w;break a}k[m>>2]=B;k[l>>2]=k[m>>2];B=eXa(b,l)|0;if(B){z=u;A=B;break a}k[m>>2]=1;k[l>>2]=k[m>>2];B=eXa(b,l)|0;if(B){z=u;A=B;break a}k[m>>2]=k[C>>2];k[l>>2]=k[m>>2];C=eXa(b,l)|0;if(C){z=u;A=C;break a}k[m>>2]=0;k[l>>2]=k[m>>2];V=t;W=u;X=G;Y=eXa(b,l)|0}if(!Y){t=V;u=W;v=X}else{z=W;A=Y;break}}}else{z=0;A=c}while(0);k[e>>2]=(k[e>>2]|0)+z;r=j;return A|0}function gXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=iXa(a,1,8)|0;if(!d)e=0;else{a=k[d+4>>2]|0;k[a>>2]=b;k[a+4>>2]=c;k[d+16>>2]=(k[c+16>>2]|0)+(k[b+16>>2]|0);e=d}return e|0}function hXa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=iXa(a,2,16)|0;if(!f)g=0;else{a=k[f+4>>2]|0;k[a>>2]=b;k[a+4>>2]=c;k[a+8>>2]=d;d=a+12|0;i[d>>0]=i[d>>0]&-2|e&1;k[f+16>>2]=k[b+16>>2];g=f}return g|0}function iXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=dQa(a,0,0,1,32)|0;if((d|0)!=0?(e=dQa(a,0,0,1,c)|0,k[d+4>>2]=e,(e|0)!=0):0){k[d>>2]=b;k[d+8>>2]=-1;k[d+12>>2]=-1;f=d}else f=0;return f|0}function jXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=iXa(a,3,8)|0;if(!d)e=0;else{a=k[d+4>>2]|0;k[a>>2]=b;k[a+4>>2]=c;k[d+16>>2]=(k[c+16>>2]|0)+(k[b+16>>2]|0);e=d}return e|0}function kXa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=dQa(a,0,0,1,64)|0;if(!h)i=0;else{k[h>>2]=b;k[h+4>>2]=c;k[h+8>>2]=d;k[h+20>>2]=e;k[h+24>>2]=f;k[h+28>>2]=g;k[h+32>>2]=-1;k[h+36>>2]=-1;k[h+40>>2]=-1;i=h}return i|0}function lXa(a){a=a|0;var b=0,c=0;b=dQa(a,0,0,1,32)|0;if(!b)c=0;else{k[b>>2]=-1;k[b+4>>2]=-1;k[b+8>>2]=-1;c=b}return c|0}function mXa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=(d|0)==0;if(f)g=0;else{h=0;while(1)if((k[d+(h<<2)>>2]|0)>-1)h=h+1|0;else{g=h;break}}h=0;while(1)if((k[b+(h<<5)>>2]|0)>-1)h=h+1|0;else{i=h;break}h=0;while(1)if((k[c+(h<<5)>>2]|0)>-1)h=h+1|0;else{j=h;break}h=dQa(a,0,0,1,(j+i<<5)+32|0)|0;a:do if(!h)l=0;else{i=k[b>>2]|0;if((i|0)>-1){j=(g|0)>0;m=i;i=0;while(1){k[h+(i<<5)>>2]=m;k[h+(i<<5)+4>>2]=k[b+(i<<5)+4>>2];k[h+(i<<5)+8>>2]=k[b+(i<<5)+8>>2];k[h+(i<<5)+16>>2]=k[b+(i<<5)+16>>2]|e;k[h+(i<<5)+20>>2]=k[b+(i<<5)+20>>2];k[h+(i<<5)+24>>2]=k[b+(i<<5)+24>>2];k[h+(i<<5)+28>>2]=k[b+(i<<5)+28>>2];n=b+(i<<5)+12|0;o=k[n>>2]|0;p=(o|0)==0;if(f&p)k[h+(i<<5)+12>>2]=0;else{if(p)q=0;else{p=0;while(1)if((k[o+(p<<2)>>2]|0)>-1)p=p+1|0;else{q=p;break}}p=dQa(a,0,0,0,(q+g<<2)+4|0)|0;if(!p){l=0;break a}if((q|0)>0){o=k[n>>2]|0;r=0;do{k[p+(r<<2)>>2]=k[o+(r<<2)>>2];r=r+1|0}while((r|0)!=(q|0));s=q}else s=0;if(j){r=0;do{k[p+(r+s<<2)>>2]=k[d+(r<<2)>>2];r=r+1|0}while((r|0)!=(g|0));t=g}else t=0;k[p+(t+s<<2)>>2]=-1;k[h+(i<<5)+12>>2]=p}r=i+1|0;m=k[b+(r<<5)>>2]|0;if((m|0)<=-1){u=r;break}else i=r}}else u=0;i=k[c>>2]|0;m=h+(u<<5)|0;if((i|0)>-1){j=i;i=m;r=u;o=0;while(1){k[i>>2]=j;k[h+(r<<5)+4>>2]=k[c+(o<<5)+4>>2];k[h+(r<<5)+8>>2]=k[c+(o<<5)+8>>2];k[h+(r<<5)+16>>2]=k[c+(o<<5)+16>>2];k[h+(r<<5)+20>>2]=k[c+(o<<5)+20>>2];k[h+(r<<5)+24>>2]=k[c+(o<<5)+24>>2];k[h+(r<<5)+28>>2]=k[c+(o<<5)+28>>2];n=c+(o<<5)+12|0;v=k[n>>2]|0;if(!v)k[h+(r<<5)+12>>2]=0;else{w=0;while(1)if((k[v+(w<<2)>>2]|0)>-1)w=w+1|0;else{x=w;break}w=dQa(a,0,0,0,(x<<2)+4|0)|0;if(!w){l=0;break a}if((x|0)>0){v=k[n>>2]|0;p=0;do{k[w+(p<<2)>>2]=k[v+(p<<2)>>2];p=p+1|0}while((p|0)!=(x|0));y=x}else y=0;k[w+(y<<2)>>2]=-1;k[h+(r<<5)+12>>2]=w}o=o+1|0;j=k[c+(o<<5)>>2]|0;r=o+u|0;p=h+(r<<5)|0;if((j|0)<=-1){z=p;break}else i=p}}else z=m;k[z>>2]=-1;l=h}while(0);return l|0}function nXa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;f=r;r=r+16|0;g=f+4|0;h=f;i=a+12|0;j=k[i>>2]|0;l=(e|0)!=0;if(l)k[e>>2]=0;k[h>>2]=b;k[g>>2]=k[h>>2];b=eXa(a,g)|0;a:do if(!b){m=a+16|0;n=(c|0)==0;o=(d|0)==0;p=k[i>>2]|0;if((p|0)>(j|0)){q=p;while(1){p=q+-1|0;k[i>>2]=p;s=k[(k[m>>2]|0)+(p<<2)>>2]|0;b:do switch(k[s>>2]|0){case 0:{p=k[s+4>>2]|0;switch(k[p>>2]|0){case -3:break;case -2:{if(o)break b;k[d>>2]=k[d>>2]|k[p+4>>2];break b;break}default:break b}t=k[p+4>>2]|0;if((t|0)>-1){c:do if(!n){p=k[c>>2]|0;d:do if((p|0)>-1){u=p;v=c;w=0;while(1){if((u|0)==(t|0)){x=v;y=w;break}z=w+1|0;A=c+(z<<2)|0;u=k[A>>2]|0;if((u|0)<=-1){B=A;C=z;break d}else{v=A;w=z}}if((t|0)<0){B=x;C=y}else break c}else{B=c;C=0}while(0);k[B>>2]=t;k[c+(C+1<<2)>>2]=-1}while(0);if(l)k[e>>2]=(k[e>>2]|0)+1}break}case 3:{t=k[s+4>>2]|0;p=k[t>>2]|0;if(k[p+8>>2]|0){k[h>>2]=p;k[g>>2]=k[h>>2];D=eXa(a,g)|0;E=6;break b}p=k[t+4>>2]|0;if(k[p+8>>2]|0){k[h>>2]=p;k[g>>2]=k[h>>2];D=eXa(a,g)|0;E=6}break}case 1:{p=k[s+4>>2]|0;k[h>>2]=k[p>>2];k[g>>2]=k[h>>2];t=eXa(a,g)|0;if(t){F=t;break a}k[h>>2]=k[p+4>>2];k[g>>2]=k[h>>2];D=eXa(a,g)|0;E=6;break}case 2:{p=k[k[s+4>>2]>>2]|0;if(k[p+8>>2]|0){k[h>>2]=p;k[g>>2]=k[h>>2];D=eXa(a,g)|0;E=6}break}default:{}}while(0);if((E|0)==6?(E=0,(D|0)!=0):0){F=D;break a}q=k[i>>2]|0;if((q|0)<=(j|0)){F=0;break a}}}else F=0}else F=b;while(0);r=f;return F|0}function oXa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a;a:while(1){switch(k[e>>2]|0){case 2:{a=k[e+4>>2]|0;if((k[a+8>>2]|0)==-1?(f=k[a>>2]|0,g=mYa(k[f+28>>2]|0,k[f+24>>2]|0,b,c,d)|0,(g|0)!=0):0){h=g;break a}else i=a;break}case 3:{a=k[e+4>>2]|0;g=oXa(k[a>>2]|0,b,c,d)|0;if(g){h=g;break a}i=a+4|0;break}case 1:{a=k[e+4>>2]|0;g=a+4|0;f=mYa(k[(k[a>>2]|0)+28>>2]|0,k[(k[g>>2]|0)+24>>2]|0,b,c,d)|0;if(f){h=f;break a}f=oXa(k[a>>2]|0,b,c,d)|0;if(!f)i=g;else{h=f;break a}break}default:{h=0;break a}}e=k[i>>2]|0}return h|0}function pXa(a,b,c){a=a|0;b=b|0;c=c|0;return SQa(a,b,c)|0}function qXa(a){a=a|0;if(!(k[a+68>>2]|0))qRa(a);return}function rXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d;k[e>>2]=b;b=k[a+84>>2]|0;a=b+8|0;f=k[a>>2]|0;g=f+c|0;h=b+20|0;i=k[h>>2]|0;if(g>>>0>=i>>>0){j=g+1|i<<1|1;if(j>>>0<=536870911?(g=b+12|0,l=AYa(k[g>>2]|0,j<<2)|0,(l|0)!=0):0){k[g>>2]=l;k[k[b>>2]>>2]=l;l=k[h>>2]|0;Fyb((k[g>>2]|0)+(l<<2)|0,0,j-l<<2|0)|0;k[h>>2]=j;m=g;n=k[a>>2]|0;o=j;p=6}else q=0}else{m=b+12|0;n=f;o=i;p=6}if((p|0)==6){p=HVa((k[m>>2]|0)+(n<<2)|0,e,c,o-n|0,b+24|0)|0;if((p|0)==-1)q=0;else{n=(k[a>>2]|0)+p|0;k[a>>2]=n;a=b+16|0;if(n>>>0>=(k[a>>2]|0)>>>0)k[a>>2]=n;k[k[b+4>>2]>>2]=n;q=c}}r=d;return q|0}function sXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d;f=k[a+84>>2]|0;if(c>>>0<=2?(k[e>>2]=0,a=f+8|0,k[e+4>>2]=k[a>>2],k[e+8>>2]=k[f+16>>2],g=k[e+(c<<2)>>2]|0,!((b|0)<(0-g|0)|(536870911-g|0)<(b|0))):0){c=f+24|0;k[c>>2]=0;k[c+4>>2]=0;c=g+b|0;k[a>>2]=c;h=c}else{c=HSa()|0;k[c>>2]=22;h=-1}r=d;return h|0}function tXa(a){a=a|0;return 0}function uXa(a){a=a|0;var b=0,c=0;if(a){if((k[a+76>>2]|0)>-1)pRa(a)|0;if((k[a+20>>2]|0)>>>0>(k[a+28>>2]|0)>>>0)Xf[k[a+36>>2]&255](a,0,0)|0;b=k[a+4>>2]|0;c=k[a+8>>2]|0;if(b>>>0>>0)Xf[k[a+40>>2]&255](a,b-c|0,1)|0}return}function vXa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0.0,na=0;f=r;r=r+128|0;g=f+88|0;h=f+72|0;l=f+40|0;m=f+32|0;n=f+24|0;o=f+16|0;q=f+8|0;s=f+108|0;t=f;u=f+112|0;v=f+104|0;k[s>>2]=b;b=(a|0)!=0;w=0;x=0;y=0;a:while(1){do if((w|0)>-1){if((x|0)<=(2147483647-w|0)){z=x+w|0;break}if(!(k[a>>2]&32)){A=HSa()|0;k[A>>2]=75;z=-1}else z=-1}else z=w;while(0);A=k[s>>2]|0;B=k[A>>2]|0;if(!B){C=z;D=y;E=82;break}else{F=B;G=A}b:while(1){switch(F|0){case 37:case 0:{H=G;break b;break}default:{}}B=G+4|0;k[s>>2]=B;F=k[B>>2]|0;G=B}B=(WLa(H,61796)|0)>>>1;I=k[s>>2]|0;k[s>>2]=I+(B<<1<<2);J=I+(B<<2)-A>>2;if(b)iYa(a,A,J);if(J){w=z;x=J;continue}J=(WIa(k[(k[s>>2]|0)+4>>2]|0)|0)==0;B=k[s>>2]|0;if(!J?(k[B+8>>2]|0)==36:0){K=(k[B+4>>2]|0)+-48|0;L=1;M=B+12|0}else{K=-1;L=y;M=B+4|0}k[s>>2]=M;B=k[M>>2]|0;c:do if((B&-32|0)==32){J=B;I=M;N=0;while(1){O=1<>2]=O;T=k[O>>2]|0;if((T&-32|0)==32){J=T;I=O;N=S}else{P=T;Q=O;R=S;break}}}else{P=B;Q=M;R=0}while(0);if((P|0)==42){if((WIa(k[Q+4>>2]|0)|0)!=0?(B=k[s>>2]|0,(k[B+8>>2]|0)==36):0){A=B+4|0;k[e+((k[A>>2]|0)+-48<<2)>>2]=10;U=1;V=B+12|0;W=k[d+((k[A>>2]|0)+-48<<3)>>2]|0}else{if(L){X=-1;break}if(b){A=(k[c>>2]|0)+(4-1)&~(4-1);B=k[A>>2]|0;k[c>>2]=A+4;Y=B}else Y=0;U=0;V=(k[s>>2]|0)+4|0;W=Y}k[s>>2]=V;if((W|0)<0){Z=V;_=R|8192;$=U;aa=0-W|0}else{Z=V;_=R;$=U;aa=W}}else{B=jYa(s)|0;if((B|0)<0){X=-1;break}Z=k[s>>2]|0;_=R;$=L;aa=B}do if((k[Z>>2]|0)==46){if((k[Z+4>>2]|0)!=42){k[s>>2]=Z+4;B=jYa(s)|0;ba=k[s>>2]|0;ca=B;break}B=Z+8|0;A=(k[B>>2]|0)+-48|0;if(A>>>0<10?(k[Z+12>>2]|0)==36:0){k[e+(A<<2)>>2]=10;A=k[d+((k[B>>2]|0)+-48<<3)>>2]|0;N=Z+16|0;k[s>>2]=N;ba=N;ca=A;break}if($){X=-1;break a}if(b){A=(k[c>>2]|0)+(4-1)&~(4-1);N=k[A>>2]|0;k[c>>2]=A+4;da=N}else da=0;k[s>>2]=B;ba=B;ca=da}else{ba=Z;ca=-1}while(0);B=ba;N=0;while(1){A=(k[B>>2]|0)+-65|0;if(A>>>0>57){X=-1;break a}I=B+4|0;k[s>>2]=I;J=i[323721+(N*58|0)+A>>0]|0;A=J&255;if((A+-1|0)>>>0<8){B=I;N=A}else{ea=I;fa=J;ga=A;ha=N;break}}if(!(fa<<24>>24)){X=-1;break}N=(K|0)>-1;do if(fa<<24>>24==19)if(N){X=-1;break a}else E=52;else{if(N){k[e+(K<<2)>>2]=ga;B=d+(K<<3)|0;A=k[B+4>>2]|0;J=t;k[J>>2]=k[B>>2];k[J+4>>2]=A;E=52;break}if(!b){X=0;break a}kYa(t,ga,c);ia=k[s>>2]|0}while(0);if((E|0)==52){E=0;if(b)ia=ea;else{w=z;x=0;y=$;continue}}N=k[ia+-4>>2]|0;A=(ha|0)!=0&(N&15|0)==3?N&-33:N;switch(A|0){case 110:{switch(ha|0){case 0:{k[k[t>>2]>>2]=z;w=z;x=0;y=$;continue a;break}case 1:{k[k[t>>2]>>2]=z;w=z;x=0;y=$;continue a;break}case 2:{N=k[t>>2]|0;k[N>>2]=z;k[N+4>>2]=((z|0)<0)<<31>>31;w=z;x=0;y=$;continue a;break}case 3:{j[k[t>>2]>>1]=z;w=z;x=0;y=$;continue a;break}case 4:{i[k[t>>2]>>0]=z;w=z;x=0;y=$;continue a;break}case 6:{k[k[t>>2]>>2]=z;w=z;x=0;y=$;continue a;break}case 7:{N=k[t>>2]|0;k[N>>2]=z;k[N+4>>2]=((z|0)<0)<<31>>31;w=z;x=0;y=$;continue a;break}default:{w=z;x=0;y=$;continue a}}break}case 99:{SRa(AVa(k[t>>2]|0)|0,a)|0;w=z;x=1;y=$;continue a;break}case 67:{SRa(k[t>>2]|0,a)|0;w=z;x=1;y=$;continue a;break}case 83:{N=k[t>>2]|0;J=ZMa(N,0,ca)|0;B=(J|0)==0?ca:J-N>>2;J=(aa|0)<(B|0)?B:aa;if(!(_&8192)){k[q>>2]=J-B;k[q+4>>2]=329672;vQa(a,324185,q)|0;iYa(a,N,B);w=z;x=J;y=$;continue a}else{iYa(a,N,B);k[o>>2]=J-B;k[o+4>>2]=329672;vQa(a,324185,o)|0;w=z;x=J;y=$;continue a}break}case 115:{J=(ca|0)<0?2147483647:ca;d:do if((J|0)>0){B=k[t>>2]|0;N=0;while(1){I=tVa(v,B,4)|0;if((I|0)<=0){ja=I;ka=N;break}S=N+1|0;if((S|0)<(J|0)){B=B+I|0;N=S}else{la=S;break d}}if((ja|0)<0){X=-1;break a}else la=ka}else la=0;while(0);J=(aa|0)<(la|0)?la:aa;N=(_&8192|0)!=0;if(!N){k[n>>2]=J-la;k[n+4>>2]=329672;vQa(a,324185,n)|0}if(la){B=k[t>>2]|0;S=la;do{S=S+-1|0;B=B+(tVa(v,B,4)|0)|0;SRa(k[v>>2]|0,a)|0}while((S|0)!=0)}if(!N){w=z;x=J;y=$;continue a}k[m>>2]=J-la;k[m+4>>2]=329672;vQa(a,324185,m)|0;w=z;x=J;y=$;continue a;break}default:{S=A|32;B=i[324200+(S+-97)>>0]|0;k[l>>2]=324190+(_>>>3&1^1);k[l+4>>2]=324192+(_>>>11&1^1);k[l+8>>2]=324194+(_>>>13&1^1);k[l+12>>2]=324196+(_&1^1);k[l+16>>2]=324198+(_>>>16&1^1);k[l+20>>2]=B;k[l+24>>2]=A;uRa(u,16,324224,l)|0;switch(S|0){case 103:case 102:case 101:case 97:{ma=+p[t>>3];k[h>>2]=aa;k[h+4>>2]=ca;p[h+8>>3]=ma;w=z;x=vQa(a,u,h)|0;y=$;continue a;break}case 112:case 120:case 117:case 111:case 105:case 100:{S=t;B=k[S>>2]|0;I=k[S+4>>2]|0;k[g>>2]=aa;k[g+4>>2]=ca;S=g+8|0;k[S>>2]=B;k[S+4>>2]=I;w=z;x=vQa(a,u,g)|0;y=$;continue a;break}default:{w=z;x=0;y=$;continue a}}}}}e:do if((E|0)==82)if(!a)if(D){$=1;while(1){y=k[e+($<<2)>>2]|0;if(!y){na=$;break}kYa(d+($<<3)|0,y,c);$=$+1|0;if(($|0)>=10){X=1;break e}}if((na|0)<10){$=na;while(1){if(k[e+($<<2)>>2]|0){X=-1;break e}$=$+1|0;if(($|0)>=10){X=1;break}}}else X=1}else X=0;else X=C;while(0);r=f;return X|0}function wXa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0.0,bb=0.0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0.0,ib=0.0,jb=0.0,kb=0.0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0.0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0.0,Wb=0.0,Xb=0.0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0;f=r;r=r+624|0;g=f+24|0;h=f+16|0;m=f+588|0;n=f+576|0;o=f;q=f+536|0;s=f+8|0;u=f+528|0;v=(a|0)!=0;w=q+40|0;x=w;y=q+39|0;q=s+4|0;z=n+12|0;A=n+11|0;n=m;B=z;C=B-n|0;D=-2-n|0;E=B+2|0;F=g+288|0;G=m+9|0;H=G;I=m+8|0;J=b;b=0;K=0;L=0;a:while(1){do if((b|0)>-1)if((K|0)>(2147483647-b|0)){N=HSa()|0;k[N>>2]=75;O=-1;break}else{O=K+b|0;break}else O=b;while(0);N=i[J>>0]|0;if(!(N<<24>>24)){P=O;Q=L;R=242;break}else{S=N;T=J}b:while(1){switch(S<<24>>24){case 37:{U=T;V=T;R=9;break b;break}case 0:{W=T;X=T;break b;break}default:{}}N=T+1|0;S=i[N>>0]|0;T=N}c:do if((R|0)==9)while(1){R=0;if((i[U+1>>0]|0)!=37){W=U;X=V;break c}N=V+1|0;Y=U+2|0;if((i[Y>>0]|0)==37){U=Y;V=N;R=9}else{W=Y;X=N;break}}while(0);N=X-J|0;if(v?(k[a>>2]&32|0)==0:0)ERa(J,N,a)|0;if((X|0)!=(J|0)){J=W;b=O;K=N;continue}Y=W+1|0;Z=i[Y>>0]|0;_=(Z<<24>>24)+-48|0;if(_>>>0<10){$=(i[W+2>>0]|0)==36;aa=$?W+3|0:Y;ba=i[aa>>0]|0;ca=$?_:-1;da=$?1:L;ea=aa}else{ba=Z;ca=-1;da=L;ea=Y}Y=ba<<24>>24;d:do if((Y&-32|0)==32){Z=Y;aa=ba;$=0;_=ea;while(1){if(!(1<>24)+-32|$;ka=_+1|0;la=i[ka>>0]|0;Z=la<<24>>24;if((Z&-32|0)!=32){fa=la;ga=ja;ha=ka;break}else{aa=la;$=ja;_=ka}}}else{fa=ba;ga=0;ha=ea}while(0);do if(fa<<24>>24==42){Y=ha+1|0;_=(i[Y>>0]|0)+-48|0;if(_>>>0<10?(i[ha+2>>0]|0)==36:0){k[e+(_<<2)>>2]=10;ma=1;na=ha+3|0;oa=k[d+((i[Y>>0]|0)+-48<<3)>>2]|0}else{if(da){pa=-1;break a}if(!v){qa=Y;ra=ga;sa=0;ta=0;break}_=(k[c>>2]|0)+(4-1)&~(4-1);$=k[_>>2]|0;k[c>>2]=_+4;ma=0;na=Y;oa=$}if((oa|0)<0){qa=na;ra=ga|8192;sa=ma;ta=0-oa|0}else{qa=na;ra=ga;sa=ma;ta=oa}}else{$=(fa<<24>>24)+-48|0;if($>>>0<10){Y=ha;_=0;aa=$;while(1){$=(_*10|0)+aa|0;Z=Y+1|0;aa=(i[Z>>0]|0)+-48|0;if(aa>>>0>=10){ua=$;va=Z;break}else{Y=Z;_=$}}if((ua|0)<0){pa=-1;break a}else{qa=va;ra=ga;sa=da;ta=ua}}else{qa=ha;ra=ga;sa=da;ta=0}}while(0);e:do if((i[qa>>0]|0)==46){_=qa+1|0;Y=i[_>>0]|0;if(Y<<24>>24!=42){aa=(Y<<24>>24)+-48|0;if(aa>>>0<10){wa=_;xa=0;ya=aa}else{za=_;Aa=0;break}while(1){_=(xa*10|0)+ya|0;aa=wa+1|0;ya=(i[aa>>0]|0)+-48|0;if(ya>>>0>=10){za=aa;Aa=_;break e}else{wa=aa;xa=_}}}_=qa+2|0;aa=(i[_>>0]|0)+-48|0;if(aa>>>0<10?(i[qa+3>>0]|0)==36:0){k[e+(aa<<2)>>2]=10;za=qa+4|0;Aa=k[d+((i[_>>0]|0)+-48<<3)>>2]|0;break}if(sa){pa=-1;break a}if(v){aa=(k[c>>2]|0)+(4-1)&~(4-1);Y=k[aa>>2]|0;k[c>>2]=aa+4;za=_;Aa=Y}else{za=_;Aa=0}}else{za=qa;Aa=-1}while(0);_=za;Y=0;while(1){aa=(i[_>>0]|0)+-65|0;if(aa>>>0>57){pa=-1;break a}$=_+1|0;Z=i[323189+(Y*58|0)+aa>>0]|0;aa=Z&255;if((aa+-1|0)>>>0<8){_=$;Y=aa}else{Ba=_;Ca=$;Da=Z;Ea=aa;Fa=Y;break}}if(!(Da<<24>>24)){pa=-1;break}Y=(ca|0)>-1;do if(Da<<24>>24==19)if(Y){pa=-1;break a}else R=52;else{if(Y){k[e+(ca<<2)>>2]=Ea;_=d+(ca<<3)|0;aa=k[_+4>>2]|0;Z=o;k[Z>>2]=k[_>>2];k[Z+4>>2]=aa;R=52;break}if(!v){pa=0;break a}fYa(o,Ea,c)}while(0);if((R|0)==52?(R=0,!v):0){J=Ca;b=O;K=N;L=sa;continue}Y=i[Ba>>0]|0;aa=(Fa|0)!=0&(Y&15|0)==3?Y&-33:Y;Y=ra&-65537;Z=(ra&8192|0)==0?ra:Y;f:do switch(aa|0){case 110:{switch(Fa|0){case 0:{k[k[o>>2]>>2]=O;J=Ca;b=O;K=N;L=sa;continue a;break}case 1:{k[k[o>>2]>>2]=O;J=Ca;b=O;K=N;L=sa;continue a;break}case 2:{_=k[o>>2]|0;k[_>>2]=O;k[_+4>>2]=((O|0)<0)<<31>>31;J=Ca;b=O;K=N;L=sa;continue a;break}case 3:{j[k[o>>2]>>1]=O;J=Ca;b=O;K=N;L=sa;continue a;break}case 4:{i[k[o>>2]>>0]=O;J=Ca;b=O;K=N;L=sa;continue a;break}case 6:{k[k[o>>2]>>2]=O;J=Ca;b=O;K=N;L=sa;continue a;break}case 7:{_=k[o>>2]|0;k[_>>2]=O;k[_+4>>2]=((O|0)<0)<<31>>31;J=Ca;b=O;K=N;L=sa;continue a;break}default:{J=Ca;b=O;K=N;L=sa;continue a}}break}case 112:{Ga=Z|8;Ha=Aa>>>0>8?Aa:8;Ia=120;R=64;break}case 88:case 120:{Ga=Z;Ha=Aa;Ia=aa;R=64;break}case 111:{_=o;$=k[_>>2]|0;ka=k[_+4>>2]|0;if(($|0)==0&(ka|0)==0)Ja=w;else{_=w;ja=$;$=ka;while(1){ka=_+-1|0;i[ka>>0]=ja&7|48;ja=Iyb(ja|0,$|0,3)|0;$=M;if((ja|0)==0&($|0)==0){Ja=ka;break}else _=ka}}if(!(Z&8)){Ka=Ja;La=Z;Ma=Aa;Na=0;Oa=323669;R=77}else{_=x-Ja+1|0;Ka=Ja;La=Z;Ma=(Aa|0)<(_|0)?_:Aa;Na=0;Oa=323669;R=77}break}case 105:case 100:{_=o;$=k[_>>2]|0;ja=k[_+4>>2]|0;if((ja|0)<0){_=Gyb(0,0,$|0,ja|0)|0;ka=M;la=o;k[la>>2]=_;k[la+4>>2]=ka;Pa=_;Qa=ka;Ra=1;Sa=323669;R=76;break f}if(!(Z&2048)){ka=Z&1;Pa=$;Qa=ja;Ra=ka;Sa=(ka|0)==0?323669:323671;R=76}else{Pa=$;Qa=ja;Ra=1;Sa=323670;R=76}break}case 117:{ja=o;Pa=k[ja>>2]|0;Qa=k[ja+4>>2]|0;Ra=0;Sa=323669;R=76;break}case 99:{i[y>>0]=k[o>>2];Ta=y;Ua=Y;Va=1;Wa=0;Xa=323669;Ya=w;break}case 109:{ja=HSa()|0;Za=ISa(k[ja>>2]|0)|0;R=82;break}case 115:{ja=k[o>>2]|0;Za=(ja|0)!=0?ja:323679;R=82;break}case 67:{k[s>>2]=k[o>>2];k[q>>2]=0;k[o>>2]=s;_a=-1;R=86;break}case 83:{if(!Aa){hYa(a,32,ta,0,Z);$a=0;R=98}else{_a=Aa;R=86}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{ab=+p[o>>3];k[h>>2]=0;p[t>>3]=ab;if((k[t+4>>2]|0)>=0)if(!(Z&2048)){ja=Z&1;bb=ab;cb=ja;db=(ja|0)==0?323687:323692}else{bb=ab;cb=1;db=323689}else{bb=-ab;cb=1;db=323686}p[t>>3]=bb;ja=k[t+4>>2]&2146435072;do if(ja>>>0<2146435072|(ja|0)==2146435072&0<0){ab=+YHa(bb,h)*2.0;$=ab!=0.0;if($)k[h>>2]=(k[h>>2]|0)+-1;ka=aa|32;if((ka|0)==97){_=aa&32;la=(_|0)==0?db:db+9|0;eb=cb|2;fb=12-Aa|0;do if(!(Aa>>>0>11|(fb|0)==0)){gb=fb;hb=8.0;while(1){gb=gb+-1|0;ib=hb*16.0;if(!gb){jb=ib;break}else hb=ib}if((i[la>>0]|0)==45){kb=-(jb+(-ab-jb));break}else{kb=ab+jb-jb;break}}else kb=ab;while(0);fb=k[h>>2]|0;gb=(fb|0)<0?0-fb|0:fb;lb=gYa(gb,((gb|0)<0)<<31>>31,z)|0;if((lb|0)==(z|0)){i[A>>0]=48;mb=A}else mb=lb;i[mb+-1>>0]=(fb>>31&2)+43;fb=mb+-2|0;i[fb>>0]=aa+15;lb=(Aa|0)<1;gb=(Z&8|0)==0;hb=kb;nb=m;while(1){ob=~~hb;pb=nb+1|0;i[nb>>0]=l[323653+ob>>0]|_;hb=(hb-+(ob|0))*16.0;do if((pb-n|0)==1){if(gb&(lb&hb==0.0)){qb=pb;break}i[pb>>0]=46;qb=nb+2|0}else qb=pb;while(0);if(!(hb!=0.0)){rb=qb;break}else nb=qb}nb=rb;lb=(Aa|0)!=0&(D+nb|0)<(Aa|0)?E+Aa-fb|0:C-fb+nb|0;gb=lb+eb|0;hYa(a,32,ta,gb,Z);if(!(k[a>>2]&32))ERa(la,eb,a)|0;hYa(a,48,ta,gb,Z^65536);_=nb-n|0;if(!(k[a>>2]&32))ERa(m,_,a)|0;nb=B-fb|0;hYa(a,48,lb-(_+nb)|0,0,0);if(!(k[a>>2]&32))ERa(fb,nb,a)|0;hYa(a,32,ta,gb,Z^8192);sb=(gb|0)<(ta|0)?ta:gb;break}gb=(Aa|0)<0?6:Aa;if($){nb=(k[h>>2]|0)+-28|0;k[h>>2]=nb;tb=ab*268435456.0;ub=nb}else{tb=ab;ub=k[h>>2]|0}nb=(ub|0)<0?g:F;_=nb;hb=tb;lb=nb;while(1){pb=~~hb>>>0;k[lb>>2]=pb;ob=lb+4|0;hb=(hb-+(pb>>>0))*1.0e9;if(!(hb!=0.0)){vb=ob;break}else lb=ob}lb=k[h>>2]|0;if((lb|0)>0){$=lb;fb=nb;eb=vb;while(1){la=($|0)>29?29:$;ob=eb+-4|0;do if(ob>>>0>>0)wb=fb;else{pb=0;xb=ob;while(1){yb=Kyb(k[xb>>2]|0,0,la|0)|0;zb=Hyb(yb|0,M|0,pb|0,0)|0;yb=M;Ab=Syb(zb|0,yb|0,1e9,0)|0;k[xb>>2]=Ab;Ab=Ryb(zb|0,yb|0,1e9,0)|0;xb=xb+-4|0;if(xb>>>0>>0){Bb=Ab;break}else pb=Ab}if(!Bb){wb=fb;break}pb=fb+-4|0;k[pb>>2]=Bb;wb=pb}while(0);ob=eb;while(1){if(ob>>>0<=wb>>>0){Cb=ob;break}pb=ob+-4|0;if(!(k[pb>>2]|0))ob=pb;else{Cb=ob;break}}ob=(k[h>>2]|0)-la|0;k[h>>2]=ob;if((ob|0)>0){$=ob;fb=wb;eb=Cb}else{Db=ob;Eb=wb;Fb=Cb;break}}}else{Db=lb;Eb=nb;Fb=vb}if((Db|0)<0){eb=((gb+25|0)/9|0)+1|0;fb=(ka|0)==102;$=Db;ob=Eb;pb=Fb;while(1){xb=0-$|0;Ab=(xb|0)>9?9:xb;do if(ob>>>0>>0){xb=(1<>>Ab;zb=0;Gb=ob;while(1){Hb=k[Gb>>2]|0;k[Gb>>2]=(Hb>>>Ab)+zb;Ib=ia(Hb&xb,yb)|0;Gb=Gb+4|0;if(Gb>>>0>=pb>>>0){Jb=Ib;break}else zb=Ib}zb=(k[ob>>2]|0)==0?ob+4|0:ob;if(!Jb){Kb=zb;Lb=pb;break}k[pb>>2]=Jb;Kb=zb;Lb=pb+4|0}else{Kb=(k[ob>>2]|0)==0?ob+4|0:ob;Lb=pb}while(0);la=fb?nb:Kb;zb=(Lb-la>>2|0)>(eb|0)?la+(eb<<2)|0:Lb;$=(k[h>>2]|0)+Ab|0;k[h>>2]=$;if(($|0)>=0){Mb=Kb;Nb=zb;break}else{ob=Kb;pb=zb}}}else{Mb=Eb;Nb=Fb}do if(Mb>>>0>>0){pb=(_-Mb>>2)*9|0;ob=k[Mb>>2]|0;if(ob>>>0<10){Ob=pb;break}else{Pb=pb;Qb=10}while(1){Qb=Qb*10|0;pb=Pb+1|0;if(ob>>>0>>0){Ob=pb;break}else Pb=pb}}else Ob=0;while(0);ob=(ka|0)==103;Ab=(gb|0)!=0;pb=gb-((ka|0)!=102?Ob:0)+((Ab&ob)<<31>>31)|0;if((pb|0)<(((Nb-_>>2)*9|0)+-9|0)){$=pb+9216|0;pb=nb+4+((($|0)/9|0)+-1024<<2)|0;eb=(($|0)%9|0)+1|0;if((eb|0)<9){$=10;fb=eb;while(1){eb=$*10|0;fb=fb+1|0;if((fb|0)==9){Rb=eb;break}else $=eb}}else Rb=10;$=k[pb>>2]|0;fb=($>>>0)%(Rb>>>0)|0;ka=(pb+4|0)==(Nb|0);do if(ka&(fb|0)==0){Sb=Mb;Tb=pb;Ub=Ob}else{hb=((($>>>0)/(Rb>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;eb=(Rb|0)/2|0;if(fb>>>0>>0)Vb=.5;else Vb=ka&(fb|0)==(eb|0)?1.0:1.5;do if(!cb){Wb=hb;Xb=Vb}else{if((i[db>>0]|0)!=45){Wb=hb;Xb=Vb;break}Wb=-hb;Xb=-Vb}while(0);eb=$-fb|0;k[pb>>2]=eb;if(!(Wb+Xb!=Wb)){Sb=Mb;Tb=pb;Ub=Ob;break}lb=eb+Rb|0;k[pb>>2]=lb;if(lb>>>0>999999999){lb=Mb;eb=pb;while(1){zb=eb+-4|0;k[eb>>2]=0;if(zb>>>0>>0){la=lb+-4|0;k[la>>2]=0;Yb=la}else Yb=lb;la=(k[zb>>2]|0)+1|0;k[zb>>2]=la;if(la>>>0>999999999){lb=Yb;eb=zb}else{Zb=Yb;_b=zb;break}}}else{Zb=Mb;_b=pb}eb=(_-Zb>>2)*9|0;lb=k[Zb>>2]|0;if(lb>>>0<10){Sb=Zb;Tb=_b;Ub=eb;break}else{$b=eb;ac=10}while(1){ac=ac*10|0;eb=$b+1|0;if(lb>>>0>>0){Sb=Zb;Tb=_b;Ub=eb;break}else $b=eb}}while(0);pb=Tb+4|0;bc=Sb;cc=Ub;dc=Nb>>>0>pb>>>0?pb:Nb}else{bc=Mb;cc=Ob;dc=Nb}pb=0-cc|0;fb=dc;while(1){if(fb>>>0<=bc>>>0){ec=0;fc=fb;break}$=fb+-4|0;if(!(k[$>>2]|0))fb=$;else{ec=1;fc=fb;break}}do if(ob){fb=(Ab&1^1)+gb|0;if((fb|0)>(cc|0)&(cc|0)>-5){gc=aa+-1|0;hc=fb+-1-cc|0}else{gc=aa+-2|0;hc=fb+-1|0}fb=Z&8;if(fb){ic=gc;jc=hc;kc=fb;break}do if(ec){fb=k[fc+-4>>2]|0;if(!fb){lc=9;break}if(!((fb>>>0)%10|0)){mc=10;nc=0}else{lc=0;break}while(1){mc=mc*10|0;$=nc+1|0;if((fb>>>0)%(mc>>>0)|0){lc=$;break}else nc=$}}else lc=9;while(0);fb=((fc-_>>2)*9|0)+-9|0;if((gc|32|0)==102){$=fb-lc|0;ka=($|0)<0?0:$;ic=gc;jc=(hc|0)<(ka|0)?hc:ka;kc=0;break}else{ka=fb+cc-lc|0;fb=(ka|0)<0?0:ka;ic=gc;jc=(hc|0)<(fb|0)?hc:fb;kc=0;break}}else{ic=aa;jc=gb;kc=Z&8}while(0);gb=jc|kc;_=(gb|0)!=0&1;Ab=(ic|32|0)==102;if(Ab){oc=(cc|0)>0?cc:0;pc=0}else{ob=(cc|0)<0?pb:cc;fb=gYa(ob,((ob|0)<0)<<31>>31,z)|0;if((B-fb|0)<2){ob=fb;while(1){ka=ob+-1|0;i[ka>>0]=48;if((B-ka|0)<2)ob=ka;else{qc=ka;break}}}else qc=fb;i[qc+-1>>0]=(cc>>31&2)+43;ob=qc+-2|0;i[ob>>0]=ic;oc=B-ob|0;pc=ob}ob=cb+1+jc+_+oc|0;hYa(a,32,ta,ob,Z);if(!(k[a>>2]&32))ERa(db,cb,a)|0;hYa(a,48,ta,ob,Z^65536);do if(Ab){pb=bc>>>0>nb>>>0?nb:bc;ka=pb;while(1){$=gYa(k[ka>>2]|0,0,G)|0;do if((ka|0)==(pb|0)){if(($|0)!=(G|0)){rc=$;break}i[I>>0]=48;rc=I}else{if($>>>0>m>>>0)sc=$;else{rc=$;break}while(1){lb=sc+-1|0;i[lb>>0]=48;if(lb>>>0>m>>>0)sc=lb;else{rc=lb;break}}}while(0);if(!(k[a>>2]&32))ERa(rc,H-rc|0,a)|0;$=ka+4|0;if($>>>0>nb>>>0){tc=$;break}else ka=$}do if(gb){if(k[a>>2]&32)break;ERa(324339,1,a)|0}while(0);if((jc|0)>0&tc>>>0>>0){ka=jc;pb=tc;while(1){$=gYa(k[pb>>2]|0,0,G)|0;if($>>>0>m>>>0){lb=$;while(1){eb=lb+-1|0;i[eb>>0]=48;if(eb>>>0>m>>>0)lb=eb;else{uc=eb;break}}}else uc=$;if(!(k[a>>2]&32))ERa(uc,(ka|0)>9?9:ka,a)|0;pb=pb+4|0;lb=ka+-9|0;if(!((ka|0)>9&pb>>>0>>0)){vc=lb;break}else ka=lb}}else vc=jc;hYa(a,48,vc+9|0,9,0)}else{ka=ec?fc:bc+4|0;if((jc|0)>-1){pb=(kc|0)==0;lb=jc;eb=bc;while(1){zb=gYa(k[eb>>2]|0,0,G)|0;if((zb|0)==(G|0)){i[I>>0]=48;wc=I}else wc=zb;do if((eb|0)==(bc|0)){zb=wc+1|0;if(!(k[a>>2]&32))ERa(wc,1,a)|0;if(pb&(lb|0)<1){xc=zb;break}if(k[a>>2]&32){xc=zb;break}ERa(324339,1,a)|0;xc=zb}else{if(wc>>>0>m>>>0)yc=wc;else{xc=wc;break}while(1){zb=yc+-1|0;i[zb>>0]=48;if(zb>>>0>m>>>0)yc=zb;else{xc=zb;break}}}while(0);$=H-xc|0;if(!(k[a>>2]&32))ERa(xc,(lb|0)>($|0)?$:lb,a)|0;zb=lb-$|0;eb=eb+4|0;if(!(eb>>>0>>0&(zb|0)>-1)){zc=zb;break}else lb=zb}}else zc=jc;hYa(a,48,zc+18|0,18,0);if(k[a>>2]&32)break;ERa(pc,B-pc|0,a)|0}while(0);hYa(a,32,ta,ob,Z^8192);sb=(ob|0)<(ta|0)?ta:ob}else{gb=(aa&32|0)!=0;nb=bb!=bb|0.0!=0.0;Ab=nb?0:cb;_=Ab+3|0;hYa(a,32,ta,_,Y);fb=k[a>>2]|0;if(!(fb&32)){ERa(db,Ab,a)|0;Ac=k[a>>2]|0}else Ac=fb;if(!(Ac&32))ERa(nb?(gb?323713:323717):gb?323705:323709,3,a)|0;hYa(a,32,ta,_,Z^8192);sb=(_|0)<(ta|0)?ta:_}while(0);J=Ca;b=O;K=sb;L=sa;continue a;break}default:{Ta=J;Ua=Z;Va=Aa;Wa=0;Xa=323669;Ya=w}}while(0);g:do if((R|0)==64){R=0;aa=o;N=k[aa>>2]|0;ja=k[aa+4>>2]|0;aa=Ia&32;if(!((N|0)==0&(ja|0)==0)){_=w;gb=N;N=ja;while(1){ja=_+-1|0;i[ja>>0]=l[323653+(gb&15)>>0]|aa;gb=Iyb(gb|0,N|0,4)|0;N=M;if((gb|0)==0&(N|0)==0){Bc=ja;break}else _=ja}_=o;if((Ga&8|0)==0|(k[_>>2]|0)==0&(k[_+4>>2]|0)==0){Ka=Bc;La=Ga;Ma=Ha;Na=0;Oa=323669;R=77}else{Ka=Bc;La=Ga;Ma=Ha;Na=2;Oa=323669+(Ia>>4)|0;R=77}}else{Ka=w;La=Ga;Ma=Ha;Na=0;Oa=323669;R=77}}else if((R|0)==76){R=0;Ka=gYa(Pa,Qa,w)|0;La=Z;Ma=Aa;Na=Ra;Oa=Sa;R=77}else if((R|0)==82){R=0;_=_Ma(Za,0,Aa)|0;N=(_|0)==0;Ta=Za;Ua=Y;Va=N?Aa:_-Za|0;Wa=0;Xa=323669;Ya=N?Za+Aa|0:_}else if((R|0)==86){R=0;_=0;N=0;gb=k[o>>2]|0;while(1){aa=k[gb>>2]|0;if(!aa){Cc=_;Dc=N;break}ja=DVa(u,aa)|0;if((ja|0)<0|ja>>>0>(_a-_|0)>>>0){Cc=_;Dc=ja;break}aa=ja+_|0;if(_a>>>0>aa>>>0){_=aa;N=ja;gb=gb+4|0}else{Cc=aa;Dc=ja;break}}if((Dc|0)<0){pa=-1;break a}hYa(a,32,ta,Cc,Z);if(!Cc){$a=0;R=98}else{gb=0;N=k[o>>2]|0;while(1){_=k[N>>2]|0;if(!_){$a=Cc;R=98;break g}ja=DVa(u,_)|0;gb=ja+gb|0;if((gb|0)>(Cc|0)){$a=Cc;R=98;break g}if(!(k[a>>2]&32))ERa(u,ja,a)|0;if(gb>>>0>=Cc>>>0){$a=Cc;R=98;break}else N=N+4|0}}}while(0);if((R|0)==98){R=0;hYa(a,32,ta,$a,Z^8192);J=Ca;b=O;K=(ta|0)>($a|0)?ta:$a;L=sa;continue}if((R|0)==77){R=0;Y=(Ma|0)>-1?La&-65537:La;N=o;gb=(k[N>>2]|0)!=0|(k[N+4>>2]|0)!=0;if((Ma|0)!=0|gb){N=(gb&1^1)+(x-Ka)|0;Ta=Ka;Ua=Y;Va=(Ma|0)>(N|0)?Ma:N;Wa=Na;Xa=Oa;Ya=w}else{Ta=w;Ua=Y;Va=0;Wa=Na;Xa=Oa;Ya=w}}Y=Ya-Ta|0;N=(Va|0)<(Y|0)?Y:Va;gb=Wa+N|0;ja=(ta|0)<(gb|0)?gb:ta;hYa(a,32,ja,gb,Ua);if(!(k[a>>2]&32))ERa(Xa,Wa,a)|0;hYa(a,48,ja,gb,Ua^65536);hYa(a,48,N,Y,0);if(!(k[a>>2]&32))ERa(Ta,Y,a)|0;hYa(a,32,ja,gb,Ua^8192);J=Ca;b=O;K=ja;L=sa}h:do if((R|0)==242)if(!a)if(Q){sa=1;while(1){L=k[e+(sa<<2)>>2]|0;if(!L){Ec=sa;break}fYa(d+(sa<<3)|0,L,c);sa=sa+1|0;if((sa|0)>=10){pa=1;break h}}if((Ec|0)<10){sa=Ec;while(1){if(k[e+(sa<<2)>>2]|0){pa=-1;break h}sa=sa+1|0;if((sa|0)>=10){pa=1;break}}}else pa=1}else pa=0;else pa=P;while(0);r=f;return pa|0}function xXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=k[a+84>>2]|0;e=k[d+4>>2]|0;f=k[d>>2]|0;g=e>>>0>>0?0:e-f|0;if(g>>>0>>0){k[a>>2]=k[a>>2]|16;h=g}else h=c;c=d+12|0;Dyb(b|0,(k[c>>2]|0)+f|0,h|0)|0;f=(k[d>>2]|0)+h|0;k[d>>2]=f;b=g-h|0;g=k[a+48>>2]|0;e=b>>>0>g>>>0?g:b;b=k[a+44>>2]|0;k[a+4>>2]=b;g=b;k[a+8>>2]=g+e;Dyb(g|0,(k[c>>2]|0)+f|0,e|0)|0;k[d>>2]=(k[d>>2]|0)+e;return h|0}function yXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=k[a+84>>2]|0;e=a+20|0;f=k[e>>2]|0;g=k[a+28>>2]|0;h=g;j=f-h|0;if((f|0)!=(h|0)?(k[e>>2]=g,(yXa(a,g,j)|0)>>>0>>0):0)l=0;else m=3;do if((m|0)==3){if((k[d+16>>2]|0)==97){j=d+4|0;g=k[j>>2]|0;k[d>>2]=g;n=j;o=d;p=g}else{n=d+4|0;o=d;p=k[d>>2]|0}g=d+8|0;j=(k[g>>2]|0)-p|0;e=j>>>0>>0?j:c;j=d+12|0;Dyb((k[j>>2]|0)+p|0,b|0,e|0)|0;h=(k[o>>2]|0)+e|0;k[o>>2]=h;if(h>>>0>(k[n>>2]|0)>>>0){k[n>>2]=h;f=k[g>>2]|0;if(h>>>0>>0){i[(k[j>>2]|0)+h>>0]=0;l=e;break}if(!((f|0)==0|(k[a>>2]&4|0)==0)){i[(k[j>>2]|0)+(f+-1)>>0]=0;l=e}else l=e}else l=e}while(0);return l|0}function zXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;f=k[a+84>>2]|0;if((c>>>0<=2?(k[e>>2]=0,k[e+4>>2]=k[f>>2],k[e+8>>2]=k[f+4>>2],a=k[e+(c<<2)>>2]|0,(b|0)>=(0-a|0)):0)?((k[f+8>>2]|0)-a|0)>=(b|0):0){c=a+b|0;k[f>>2]=c;g=c}else{c=HSa()|0;k[c>>2]=22;g=-1}r=d;return g|0}function AXa(a){a=a|0;return 0}function BXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=k[a+84>>2]|0;e=a+20|0;f=k[e>>2]|0;g=k[a+28>>2]|0;h=g;i=f-h|0;if((f|0)!=(h|0)?(k[e>>2]=g,(BXa(a,g,i)|0)>>>0>>0):0)j=0;else l=3;do if((l|0)==3){i=d+8|0;g=k[i>>2]|0;a=g+c|0;e=d+20|0;h=k[e>>2]|0;if(a>>>0>>0){m=d+12|0;n=g}else{g=a+1|h<<1|1;h=d+12|0;a=AYa(k[h>>2]|0,g)|0;if(!a){j=0;break}k[h>>2]=a;k[k[d>>2]>>2]=a;a=k[e>>2]|0;Fyb((k[h>>2]|0)+a|0,0,g-a|0)|0;k[e>>2]=g;m=h;n=k[i>>2]|0}Dyb((k[m>>2]|0)+n|0,b|0,c|0)|0;h=(k[i>>2]|0)+c|0;k[i>>2]=h;i=d+16|0;if(h>>>0>=(k[i>>2]|0)>>>0)k[i>>2]=h;k[k[d+4>>2]>>2]=h;j=c}while(0);return j|0}function CXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;f=k[a+84>>2]|0;if(c>>>0<=2?(k[e>>2]=0,a=f+8|0,k[e+4>>2]=k[a>>2],k[e+8>>2]=k[f+16>>2],f=k[e+(c<<2)>>2]|0,!((b|0)<(0-f|0)|(2147483647-f|0)<(b|0))):0){c=f+b|0;k[a>>2]=c;g=c}else{c=HSa()|0;k[c>>2]=22;g=-1}r=d;return g|0}function DXa(a){a=a|0;return 0}function EXa(a){a=a|0;if(!(k[a+68>>2]|0))qRa(a);return}function FXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+16|0;e=d;f=a+84|0;g=k[f>>2]|0;k[e>>2]=g;do if(g){h=a+44|0;j=zVa(k[h>>2]|0,e,k[a+48>>2]|0,0)|0;if((j|0)==-1){k[a+8>>2]=0;k[a+4>>2]=0;l=0;break}m=k[h>>2]|0;h=a+4|0;k[h>>2]=m;n=m;k[a+8>>2]=n+j;k[f>>2]=k[e>>2];if((c|0)!=0&(j|0)!=0){k[h>>2]=n+1;i[b>>0]=i[n>>0]|0;l=1}else l=0}else l=0;while(0);r=d;return l|0}function GXa(a,b,c){a=a|0;b=b|0;c=c|0;return ESa(a,b,c)|0}function HXa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;c=a+28|0;if((k[b>>2]|0)>>>0>(k[c>>2]|0)>>>0?(Xf[k[a+36>>2]&255](a,0,0)|0,(k[b>>2]|0)==0):0)d=-1;else{e=a+4|0;f=k[e>>2]|0;g=a+8|0;h=k[g>>2]|0;if(f>>>0>>0)Xf[k[a+40>>2]&255](a,f-h|0,1)|0;k[a+16>>2]=0;k[c>>2]=0;k[b>>2]=0;k[g>>2]=0;k[e>>2]=0;d=0}return d|0}function IXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=k[a+84>>2]|0;e=k[a+28>>2]|0;if((e|0)!=(b|0)?(IXa(a,e,(k[a+20>>2]|0)-e|0)|0)==-1:0)f=-1;else{e=d+4|0;a:do if((c|0)!=0&(k[e>>2]|0)!=0){a=b;g=c;h=k[d>>2]|0;while(1){i=tVa(h,a,g)|0;if((i|0)<=-1){j=i;break a}l=(k[e>>2]|0)+-1|0;k[e>>2]=l;h=(k[d>>2]|0)+4|0;k[d>>2]=h;if(!((g|0)!=(i|0)&(l|0)!=0)){j=i;break}else{a=a+i|0;g=g-i|0}}}else j=0;while(0);k[k[d>>2]>>2]=0;f=(j|0)<0?j:c}return f|0}function JXa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;e=r;r=r+4272|0;f=e+8|0;g=e;a:do if(((((((((i[b>>0]|0)==36?(i[b+1>>0]|0)==50:0)?(h=b+2|0,j=(i[h>>0]|0)+-97|0,j>>>0<=25):0)?(25165825>>>j&1|0)!=0:0)?(i[b+3>>0]|0)==36:0)?(j=(i[b+4>>0]|0)+-48|0,j>>>0<=1):0)?(m=(i[b+5>>0]|0)+-48|0,m>>>0<=9):0)?(i[b+6>>0]|0)==36:0)?(n=1<>>0>=d>>>0):0){j=f+4240|0;m=f+4256|0;o=j;p=b+7|0;while(1){q=(l[p>>0]|0)+-32|0;if(q>>>0>95){s=0;break a}t=i[323002+q>>0]|0;if((t&255)>63){s=0;break a}q=(l[p+1>>0]|0)+-32|0;if(q>>>0>95){s=0;break a}u=i[323002+q>>0]|0;q=u&255;if((u&255)>63){s=0;break a}u=o+1|0;i[o>>0]=q>>>4&3|(t&255)<<2;if(u>>>0>=m>>>0)break;t=(l[p+2>>0]|0)+-32|0;if(t>>>0>95){s=0;break a}v=i[323002+t>>0]|0;t=v&255;if((v&255)>63){s=0;break a}v=o+2|0;i[u>>0]=t>>>2&15|q<<4;if(v>>>0>=m>>>0)break;q=(l[p+3>>0]|0)+-32|0;if(q>>>0>95){s=0;break a}u=i[323002+q>>0]|0;if((u&255)>63){s=0;break a}o=o+3|0;i[v>>0]=u&255|t<<6;if(o>>>0>=m>>>0)break;else p=p+4|0}p=k[j>>2]|0;m=p<<16|p>>>16;p=f+4244|0;k[j>>2]=m<<8&-16711936|m>>>8&16711935;m=k[p>>2]|0;o=m<<16|m>>>16;m=f+4248|0;k[p>>2]=o<<8&-16711936|o>>>8&16711935;o=k[m>>2]|0;p=o<<16|o>>>16;o=f+4252|0;k[m>>2]=p<<8&-16711936|p>>>8&16711935;p=k[o>>2]|0;m=p<<16|p>>>16;k[o>>2]=m<<8&-16711936|m>>>8&16711935;m=f+4168|0;KXa(a,m,f,i[323098+((i[h>>0]|0)+-97)>>0]|0);Dyb(f+72|0,57676,4096)|0;o=f+4244|0;p=f+4248|0;t=f+4252|0;u=eYa(f,k[j>>2]|0,k[o>>2]|0,f,f)|0;v=f+8|0;q=f;do{w=eYa(f,k[p>>2]^u,k[t>>2]^k[q+4>>2],v,v)|0;x=q;q=q+16|0;u=eYa(f,k[j>>2]^w,k[o>>2]^k[x+12>>2],q,q)|0;v=x+24|0}while(v>>>0>>0);v=f+64|0;q=f+68|0;u=n;do{h=0;do{x=f+(h<<2)|0;k[x>>2]=k[x>>2]^k[f+4168+(h<<2)>>2];x=h|1;w=f+(x<<2)|0;k[w>>2]=k[w>>2]^k[f+4168+(x<<2)>>2];h=h+2|0}while((h|0)<18);eYa(f,0,0,f,m)|0;h=k[j>>2]|0;x=k[o>>2]|0;w=k[p>>2]|0;y=k[t>>2]|0;z=0;do{A=f+(z<<2)|0;k[A>>2]=k[A>>2]^h;A=f+((z|1)<<2)|0;k[A>>2]=k[A>>2]^x;A=f+((z|2)<<2)|0;k[A>>2]=k[A>>2]^w;A=f+((z|3)<<2)|0;k[A>>2]=k[A>>2]^y;z=z+4|0}while((z|0)<16);k[v>>2]=k[v>>2]^h;k[q>>2]=k[q>>2]^x;eYa(f,0,0,f,m)|0;u=u+-1|0}while((u|0)!=0);u=g+4|0;m=0;do{q=k[61772+(m<<2)>>2]|0;v=m|1;t=k[61772+(v<<2)>>2]|0;k[u>>2]=t;p=eYa(f,q,t,g,g)|0;t=63;while(1){q=eYa(f,p,k[u>>2]|0,g,g)|0;t=t+-1|0;if(!t){B=q;break}else p=q}k[f+4240+(m<<2)>>2]=B;k[f+4240+(v<<2)>>2]=k[u>>2];m=m+2|0}while((m|0)<6);m=c;u=b;p=m+28|0;do{i[m>>0]=i[u>>0]|0;m=m+1|0;u=u+1|0}while((m|0)<(p|0));i[c+28>>0]=i[323124+(l[323002+((i[b+28>>0]|0)+-32)>>0]&48)>>0]|0;u=j;m=6;while(1){p=k[u>>2]|0;t=p<<16|p>>>16;k[u>>2]=t<<8&-16711936|t>>>8&16711935;m=m+-1|0;if(!m)break;else u=u+4|0}u=j+23|0;m=c+29|0;t=j;while(1){p=t+1|0;x=l[t>>0]|0;h=m+1|0;i[m>>0]=i[323124+(x>>>2)>>0]|0;q=x<<4&48;if(p>>>0>=u>>>0){C=h;D=q;E=38;break}x=t+2|0;o=l[p>>0]|0;p=m+2|0;i[h>>0]=i[323124+(o>>>4|q)>>0]|0;q=o<<2&60;if(x>>>0>=u>>>0){F=p;G=q;E=40;break}t=t+3|0;o=l[x>>0]|0;i[p>>0]=i[323124+(o>>>6|q)>>0]|0;i[m+3>>0]=i[323124+(o&63)>>0]|0;if(t>>>0>=u>>>0)break;else m=m+4|0}if((E|0)==38)i[C>>0]=i[323124+D>>0]|0;else if((E|0)==40)i[F>>0]=i[323124+G>>0]|0;i[c+60>>0]=0;s=c}else s=0;while(0);r=e;return s|0}function KXa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=r;r=r+16|0;f=e;g=d&255;d=g<<15;h=f+4|0;j=f+((g&1)<<2)|0;g=0;m=0;n=a;o=0;while(1){k[h>>2]=0;k[f>>2]=0;p=0;q=0;s=0;t=n;u=o;while(1){v=q<<8;k[f>>2]=v;w=l[t>>0]|v;k[f>>2]=w;v=p<<8;k[h>>2]=v;x=i[t>>0]|0;y=x|v;k[h>>2]=y;v=((s|0)==0?0:x&128)|u;x=(i[t>>0]|0)==0?a:t+1|0;s=s+1|0;if((s|0)==4){z=w;A=y;B=x;C=v;break}else{p=y;q=w;t=x;u=v}}u=A^z|g;t=k[j>>2]|0;k[b+(m<<2)>>2]=t;k[c+(m<<2)>>2]=k[57604+(m<<2)>>2]^t;t=m+1|0;if((t|0)==18){D=u;E=C;break}else{g=u;m=t;n=B;o=C}}k[c>>2]=k[c>>2]^d&65536&E<<9&-65536-(D&65535|D>>>16);r=e;return}function LXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=r;r=r+256|0;e=d+112|0;f=d+104|0;g=d;h=d+216|0;j=d+184|0;m=d+152|0;n=d+128|0;o=d+124|0;p=n;q=p+20|0;do{i[p>>0]=0;p=p+1|0}while((p|0)<(q|0));p=GMa(a,257)|0;a:do if(p>>>0<=256?(eMa(b,322873,3)|0)==0:0){q=b+3|0;do if(!(eMa(q,322877,7)|0)){s=b+10|0;if(((i[s>>0]|0)+-48|0)>>>0<10?(t=kOa(s,o,10)|0,s=k[o>>2]|0,(i[s>>0]|0)==36):0){u=t>>>0<1e3?1e3:t>>>0>9999999?9999999:t;k[f>>2]=u;ORa(n,322885,f)|0;v=u;w=s+1|0;break}x=0;break a}else{v=5e3;w=q}while(0);b:do switch(i[w>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=0;break}default:{switch(i[w+1>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=1;break b;break}default:{}}switch(i[w+2>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=2;break b;break}default:{}}switch(i[w+3>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=3;break b;break}default:{}}switch(i[w+4>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=4;break b;break}default:{}}switch(i[w+5>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=5;break b;break}default:{}}switch(i[w+6>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=6;break b;break}default:{}}switch(i[w+7>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=7;break b;break}default:{}}switch(i[w+8>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=8;break b;break}default:{}}switch(i[w+9>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=9;break b;break}default:{}}switch(i[w+10>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=10;break b;break}default:{}}switch(i[w+11>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=11;break b;break}default:{}}switch(i[w+12>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=12;break b;break}default:{}}switch(i[w+13>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=13;break b;break}default:{}}switch(i[w+14>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=14;break b;break}default:{}}switch(i[w+15>>0]|0){case 58:case 10:{x=0;break a;break}case 0:case 36:{y=15;break b;break}default:{}}y=16}}while(0);q=g;k[q>>2]=0;k[q+4>>2]=0;q=g+8|0;k[q>>2]=1779033703;s=g+12|0;k[s>>2]=-1150833019;u=g+16|0;k[u>>2]=1013904242;t=g+20|0;k[t>>2]=-1521486534;z=g+24|0;k[z>>2]=1359893119;A=g+28|0;k[A>>2]=-1694144372;B=g+32|0;k[B>>2]=528734635;C=g+36|0;k[C>>2]=1541459225;aYa(g,a,p);aYa(g,w,y);aYa(g,a,p);bYa(g,h);D=g;k[D>>2]=0;k[D+4>>2]=0;k[q>>2]=1779033703;k[s>>2]=-1150833019;k[u>>2]=1013904242;k[t>>2]=-1521486534;k[z>>2]=1359893119;k[A>>2]=-1694144372;k[B>>2]=528734635;k[C>>2]=1541459225;aYa(g,a,p);aYa(g,w,y);cYa(g,p,h);D=(p|0)==0;if(!D){E=p;do{if(!(E&1))aYa(g,a,p);else aYa(g,h,32);E=E>>>1}while((E|0)!=0);bYa(g,h);E=g;k[E>>2]=0;k[E+4>>2]=0;k[q>>2]=1779033703;k[s>>2]=-1150833019;k[u>>2]=1013904242;k[t>>2]=-1521486534;k[z>>2]=1359893119;k[A>>2]=-1694144372;k[B>>2]=528734635;k[C>>2]=1541459225;if(!D){E=0;do{aYa(g,a,p);E=E+1|0}while((E|0)!=(p|0))}}else{bYa(g,h);E=g;k[E>>2]=0;k[E+4>>2]=0;k[q>>2]=1779033703;k[s>>2]=-1150833019;k[u>>2]=1013904242;k[t>>2]=-1521486534;k[z>>2]=1359893119;k[A>>2]=-1694144372;k[B>>2]=528734635;k[C>>2]=1541459225}bYa(g,j);E=g;k[E>>2]=0;k[E+4>>2]=0;k[q>>2]=1779033703;k[s>>2]=-1150833019;k[u>>2]=1013904242;k[t>>2]=-1521486534;k[z>>2]=1359893119;k[A>>2]=-1694144372;k[B>>2]=528734635;k[C>>2]=1541459225;E=(l[h>>0]|0)+15|0;D=0;while(1){aYa(g,w,y);if((D|0)==(E|0))break;else D=D+1|0}bYa(g,m);if(v){D=0;do{E=g;k[E>>2]=0;k[E+4>>2]=0;k[q>>2]=1779033703;k[s>>2]=-1150833019;k[u>>2]=1013904242;k[t>>2]=-1521486534;k[z>>2]=1359893119;k[A>>2]=-1694144372;k[B>>2]=528734635;k[C>>2]=1541459225;E=(D&1|0)!=0;if(E)cYa(g,p,j);else aYa(g,h,32);if((D>>>0)%3|0)aYa(g,m,y);if((D>>>0)%7|0)cYa(g,p,j);if(E)aYa(g,h,32);else cYa(g,p,j);bYa(g,h);D=D+1|0}while((D|0)!=(v|0))}k[e>>2]=n;k[e+4>>2]=y;k[e+8>>2]=w;D=ORa(c,322896,e)|0;C=D+40|0;B=0;A=c+D|0;while(1){D=l[h+(l[322907+(B*3|0)>>0]|0)>>0]|0;z=l[h+(l[322907+(B*3|0)+1>>0]|0)>>0]<<8;t=l[h+(l[322907+(B*3|0)+2>>0]|0)>>0]|0;i[A>>0]=i[322937+(t&63)>>0]|0;i[A+1>>0]=i[322937+((z|t)>>>6&63)>>0]|0;i[A+2>>0]=i[322937+((z|D<<16)>>>12&63)>>0]|0;i[A+3>>0]=i[322937+(D>>>2)>>0]|0;B=B+1|0;if((B|0)==10)break;else A=A+4|0}A=c+C|0;B=l[h+31>>0]|0;D=l[h+30>>0]|0;z=A+1|0;i[A>>0]=i[322937+(D&63)>>0]|0;i[z>>0]=i[322937+((B<<8|D)>>>6&63)>>0]|0;i[z+1>>0]=i[322937+(B>>>4)>>0]|0;i[A+3>>0]=0;x=c}else x=0;while(0);r=d;return x|0}function MXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;d=r;r=r+160|0;e=d+140|0;f=d+136|0;g=d+8|0;h=d+144|0;j=d+4|0;m=d;n=h+7|0;o=a;a=h;while(1){i[a>>0]=l[o>>0]<<1;a=a+1|0;p=(i[o>>0]|0)==0?o:o+1|0;if(a>>>0>n>>>0){q=p;break}else o=p}PTa(h,g);o=i[b>>0]|0;a:do switch(o<<24>>24){case 95:{a=0;p=1;while(1){s=i[b+p>>0]|0;t=s&255;u=s<<24>>24>-1?t:t|-256;if((u|0)>64)v=((u|0)>96?-59:-53)+u|0;else v=u+-46|0;u=v&63;if((i[322937+u>>0]|0)!=s<<24>>24){w=0;break a}s=u<<(p*6|0)+-6|a;p=p+1|0;if(p>>>0>=5){x=s;break}else a=s}if(!x)w=0;else{a=5;p=0;while(1){s=i[b+a>>0]|0;u=s&255;t=s<<24>>24>-1?u:u|-256;if((t|0)>64)y=((t|0)>96?-59:-53)+t|0;else y=t+-46|0;t=y&63;if((i[322937+t>>0]|0)!=s<<24>>24){w=0;break a}s=t<<(a*6|0)+-30|p;a=a+1|0;if(a>>>0>=9){z=s;break}else p=s}if(i[q>>0]|0){p=h+3|0;a=h+2|0;s=h+1|0;t=h+6|0;u=h+5|0;A=h+4|0;B=q;while(1){QTa(l[a>>0]<<8|l[p>>0]|l[s>>0]<<16|l[h>>0]<<24,l[t>>0]<<8|l[n>>0]|l[u>>0]<<16|l[A>>0]<<24,e,f,1,0,g);C=k[e>>2]|0;i[h>>0]=C>>>24;i[s>>0]=C>>>16;i[a>>0]=C>>>8;i[p>>0]=C;C=k[f>>2]|0;i[A>>0]=C>>>24;i[u>>0]=C>>>16;i[t>>0]=C>>>8;i[n>>0]=C;C=B;D=h;while(1){E=i[C>>0]|0;if(!(E<<24>>24)){F=C;break}G=C+1|0;i[D>>0]=l[D>>0]^(E&255)<<1;D=D+1|0;if(D>>>0>n>>>0){F=G;break}else C=G}PTa(h,g);if(!(i[F>>0]|0))break;else B=F}}B=c;t=b;u=B+9|0;do{i[B>>0]=i[t>>0]|0;B=B+1|0;t=t+1|0}while((B|0)<(u|0));t=c+9|0;i[t>>0]=0;H=9;I=x;J=t;K=z;L=26}break}case 58:case 10:case 0:{w=0;break}default:{t=b+1|0;B=i[t>>0]|0;switch(B<<24>>24){case 58:case 10:case 0:{w=0;break a;break}default:{}}u=B&255;A=B<<24>>24>-1?u:u|-256;if((A|0)>64)M=((A|0)>96?-59:-53)+A|0;else M=A+-46|0;A=o&255;u=o<<24>>24>-1?A:A|-256;if((u|0)>64)N=((u|0)>96?-59:-53)+u|0;else N=u+-46|0;i[c>>0]=o;i[c+1>>0]=i[t>>0]|0;H=2;I=25;J=c+2|0;K=N&63|M<<6&4032;L=26}}while(0);if((L|0)==26){L=0;M=8388608;N=1;o=0;while(1){b=((N&K|0)==0?0:M)|o;L=L+1|0;if((L|0)==24){O=b;break}else{M=M>>>1;N=N<<1;o=b}}QTa(0,0,j,m,I,O,g);g=k[j>>2]|0;j=c+H+1|0;i[J>>0]=i[322937+(g>>>26)>>0]|0;J=j+1|0;i[j>>0]=i[322937+(g>>>20&63)>>0]|0;j=J+1|0;i[J>>0]=i[322937+(g>>>14&63)>>0]|0;J=j+1|0;i[j>>0]=i[322937+(g>>>8&63)>>0]|0;j=k[m>>2]|0;m=j>>>16;H=J+1|0;i[J>>0]=i[322937+(g>>>2&63)>>0]|0;J=H+1|0;i[H>>0]=i[322937+((m|g<<16)>>>12&63)>>0]|0;g=J+1|0;i[J>>0]=i[322937+(j>>>22&63)>>0]|0;J=g+1|0;i[g>>0]=i[322937+(m&63)>>0]|0;m=J+1|0;i[J>>0]=i[322937+(j>>>10&63)>>0]|0;J=m+1|0;i[m>>0]=i[322937+(j>>>4&63)>>0]|0;i[J>>0]=i[322937+(j<<2&60)>>0]|0;i[J+1>>0]=0;w=c}r=d;return w|0}function NXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=r;r=r+448|0;e=d+208|0;f=d+200|0;g=d;h=d+376|0;j=d+312|0;m=d+248|0;n=d+224|0;o=d+220|0;p=n;q=p+20|0;do{i[p>>0]=0;p=p+1|0}while((p|0)<(q|0));p=0;while(1){if(!(i[a+p>>0]|0)){s=p;t=4;break}p=p+1|0;if(p>>>0>=257){u=0;break}}a:do if((t|0)==4)if(!(eMa(b,322795,3)|0)){p=b+3|0;do if(!(eMa(p,322877,7)|0)){q=b+10|0;if(((i[q>>0]|0)+-48|0)>>>0<10?(v=kOa(q,o,10)|0,q=k[o>>2]|0,(i[q>>0]|0)==36):0){w=v>>>0<1e3?1e3:v>>>0>9999999?9999999:v;k[f>>2]=w;ORa(n,322885,f)|0;x=w;y=q+1|0;break}u=0;break a}else{x=5e3;y=p}while(0);b:do switch(i[y>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=0;break}default:{switch(i[y+1>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=1;break b;break}default:{}}switch(i[y+2>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=2;break b;break}default:{}}switch(i[y+3>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=3;break b;break}default:{}}switch(i[y+4>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=4;break b;break}default:{}}switch(i[y+5>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=5;break b;break}default:{}}switch(i[y+6>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=6;break b;break}default:{}}switch(i[y+7>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=7;break b;break}default:{}}switch(i[y+8>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=8;break b;break}default:{}}switch(i[y+9>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=9;break b;break}default:{}}switch(i[y+10>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=10;break b;break}default:{}}switch(i[y+11>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=11;break b;break}default:{}}switch(i[y+12>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=12;break b;break}default:{}}switch(i[y+13>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=13;break b;break}default:{}}switch(i[y+14>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=14;break b;break}default:{}}switch(i[y+15>>0]|0){case 58:case 10:{u=0;break a;break}case 0:case 36:{z=15;break b;break}default:{}}z=16}}while(0);p=g;k[p>>2]=0;k[p+4>>2]=0;p=g+8|0;q=p;k[q>>2]=-205731576;k[q+4>>2]=1779033703;q=g+16|0;w=q;k[w>>2]=-2067093701;k[w+4>>2]=-1150833019;w=g+24|0;v=w;k[v>>2]=-23791573;k[v+4>>2]=1013904242;v=g+32|0;A=v;k[A>>2]=1595750129;k[A+4>>2]=-1521486534;A=g+40|0;B=A;k[B>>2]=-1377402159;k[B+4>>2]=1359893119;B=g+48|0;C=B;k[C>>2]=725511199;k[C+4>>2]=-1694144372;C=g+56|0;D=C;k[D>>2]=-79577749;k[D+4>>2]=528734635;D=g+64|0;E=D;k[E>>2]=327033209;k[E+4>>2]=1541459225;YXa(g,a,s);YXa(g,y,z);YXa(g,a,s);ZXa(g,h);E=g;k[E>>2]=0;k[E+4>>2]=0;E=p;k[E>>2]=-205731576;k[E+4>>2]=1779033703;E=q;k[E>>2]=-2067093701;k[E+4>>2]=-1150833019;E=w;k[E>>2]=-23791573;k[E+4>>2]=1013904242;E=v;k[E>>2]=1595750129;k[E+4>>2]=-1521486534;E=A;k[E>>2]=-1377402159;k[E+4>>2]=1359893119;E=B;k[E>>2]=725511199;k[E+4>>2]=-1694144372;E=C;k[E>>2]=-79577749;k[E+4>>2]=528734635;E=D;k[E>>2]=327033209;k[E+4>>2]=1541459225;YXa(g,a,s);YXa(g,y,z);_Xa(g,s,h);E=(s|0)==0;if(!E){F=s;do{if(!(F&1))YXa(g,a,s);else YXa(g,h,64);F=F>>>1}while((F|0)!=0);ZXa(g,h);F=g;k[F>>2]=0;k[F+4>>2]=0;F=p;k[F>>2]=-205731576;k[F+4>>2]=1779033703;F=q;k[F>>2]=-2067093701;k[F+4>>2]=-1150833019;F=w;k[F>>2]=-23791573;k[F+4>>2]=1013904242;F=v;k[F>>2]=1595750129;k[F+4>>2]=-1521486534;F=A;k[F>>2]=-1377402159;k[F+4>>2]=1359893119;F=B;k[F>>2]=725511199;k[F+4>>2]=-1694144372;F=C;k[F>>2]=-79577749;k[F+4>>2]=528734635;F=D;k[F>>2]=327033209;k[F+4>>2]=1541459225;if(!E){F=0;do{YXa(g,a,s);F=F+1|0}while((F|0)!=(s|0))}}else{ZXa(g,h);F=g;k[F>>2]=0;k[F+4>>2]=0;F=p;k[F>>2]=-205731576;k[F+4>>2]=1779033703;F=q;k[F>>2]=-2067093701;k[F+4>>2]=-1150833019;F=w;k[F>>2]=-23791573;k[F+4>>2]=1013904242;F=v;k[F>>2]=1595750129;k[F+4>>2]=-1521486534;F=A;k[F>>2]=-1377402159;k[F+4>>2]=1359893119;F=B;k[F>>2]=725511199;k[F+4>>2]=-1694144372;F=C;k[F>>2]=-79577749;k[F+4>>2]=528734635;F=D;k[F>>2]=327033209;k[F+4>>2]=1541459225}ZXa(g,j);F=g;k[F>>2]=0;k[F+4>>2]=0;F=p;k[F>>2]=-205731576;k[F+4>>2]=1779033703;F=q;k[F>>2]=-2067093701;k[F+4>>2]=-1150833019;F=w;k[F>>2]=-23791573;k[F+4>>2]=1013904242;F=v;k[F>>2]=1595750129;k[F+4>>2]=-1521486534;F=A;k[F>>2]=-1377402159;k[F+4>>2]=1359893119;F=B;k[F>>2]=725511199;k[F+4>>2]=-1694144372;F=C;k[F>>2]=-79577749;k[F+4>>2]=528734635;F=D;k[F>>2]=327033209;k[F+4>>2]=1541459225;F=(l[h>>0]|0)+15|0;E=0;while(1){YXa(g,y,z);if((E|0)==(F|0))break;else E=E+1|0}ZXa(g,m);if(x){E=0;do{F=g;k[F>>2]=0;k[F+4>>2]=0;F=p;k[F>>2]=-205731576;k[F+4>>2]=1779033703;F=q;k[F>>2]=-2067093701;k[F+4>>2]=-1150833019;F=w;k[F>>2]=-23791573;k[F+4>>2]=1013904242;F=v;k[F>>2]=1595750129;k[F+4>>2]=-1521486534;F=A;k[F>>2]=-1377402159;k[F+4>>2]=1359893119;F=B;k[F>>2]=725511199;k[F+4>>2]=-1694144372;F=C;k[F>>2]=-79577749;k[F+4>>2]=528734635;F=D;k[F>>2]=327033209;k[F+4>>2]=1541459225;F=(E&1|0)!=0;if(F)_Xa(g,s,j);else YXa(g,h,64);if((E>>>0)%3|0)YXa(g,m,z);if((E>>>0)%7|0)_Xa(g,s,j);if(F)YXa(g,h,64);else _Xa(g,s,j);ZXa(g,h);E=E+1|0}while((E|0)!=(x|0))}k[e>>2]=n;k[e+4>>2]=z;k[e+8>>2]=y;E=ORa(c,322799,e)|0;D=E+84|0;C=0;B=c+E|0;while(1){E=l[h+(l[322810+(C*3|0)>>0]|0)>>0]|0;A=l[h+(l[322810+(C*3|0)+1>>0]|0)>>0]<<8;v=l[h+(l[322810+(C*3|0)+2>>0]|0)>>0]|0;i[B>>0]=i[322937+(v&63)>>0]|0;i[B+1>>0]=i[322937+((A|v)>>>6&63)>>0]|0;i[B+2>>0]=i[322937+((A|E<<16)>>>12&63)>>0]|0;i[B+3>>0]=i[322937+(E>>>2)>>0]|0;C=C+1|0;if((C|0)==21)break;else B=B+4|0}B=c+D|0;C=l[h+63>>0]|0;i[B>>0]=i[322937+(C&63)>>0]|0;i[B+1>>0]=i[322937+(C>>>6)>>0]|0;i[B+2>>0]=0;u=c}else u=0;while(0);r=d;return u|0}function OXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+112|0;e=d;f=d+88|0;g=GMa(a,30001)|0;if(g>>>0<=3e4?(eMa(b,322776,3)|0)==0:0){h=b+3|0;a:do switch(i[h>>0]|0){case 36:case 0:{j=0;break}default:{switch(i[b+4>>0]|0){case 36:case 0:{j=1;break a;break}default:{}}switch(i[b+5>>0]|0){case 36:case 0:{j=2;break a;break}default:{}}switch(i[b+6>>0]|0){case 36:case 0:{j=3;break a;break}default:{}}switch(i[b+7>>0]|0){case 36:case 0:{j=4;break a;break}default:{}}switch(i[b+8>>0]|0){case 36:case 0:{j=5;break a;break}default:{}}switch(i[b+9>>0]|0){case 36:case 0:{j=6;break a;break}default:{}}switch(i[b+10>>0]|0){case 36:case 0:{j=7;break a;break}default:{}}j=8}}while(0);m=e;k[m>>2]=0;k[m+4>>2]=0;m=e+8|0;k[m>>2]=1732584193;n=e+12|0;k[n>>2]=-271733879;o=e+16|0;k[o>>2]=-1732584194;p=e+20|0;k[p>>2]=271733878;VXa(e,a,g);VXa(e,h,j);VXa(e,a,g);WXa(e,f);q=e;k[q>>2]=0;k[q+4>>2]=0;k[m>>2]=1732584193;k[n>>2]=-271733879;k[o>>2]=-1732584194;k[p>>2]=271733878;VXa(e,a,g);q=j+3|0;VXa(e,b,q);if(g>>>0>16){s=g+-17&-16;t=g;do{VXa(e,f,16);t=t+-16|0}while(t>>>0>16);u=g+-16-s|0}else u=g;VXa(e,f,u);i[f>>0]=0;if(g){u=g;do{if(!(u&1))VXa(e,a,1);else VXa(e,f,1);u=u>>>1}while((u|0)!=0)}WXa(e,f);u=0;do{s=e;k[s>>2]=0;k[s+4>>2]=0;k[m>>2]=1732584193;k[n>>2]=-271733879;k[o>>2]=-1732584194;k[p>>2]=271733878;s=(u&1|0)!=0;if(s)VXa(e,a,g);else VXa(e,f,16);if((u>>>0)%3|0)VXa(e,h,j);if((u>>>0)%7|0)VXa(e,a,g);if(s)VXa(e,f,16);else VXa(e,a,g);WXa(e,f);u=u+1|0}while((u|0)!=1e3);Dyb(c|0,b|0,q|0)|0;q=c+3+j|0;i[q>>0]=36;b=j+24|0;j=0;u=q+1|0;while(1){q=l[f+(l[322780+(j*3|0)>>0]|0)>>0]|0;e=l[f+(l[322780+(j*3|0)+1>>0]|0)>>0]<<8;g=l[f+(l[322780+(j*3|0)+2>>0]|0)>>0]|0;i[u>>0]=i[322937+(g&63)>>0]|0;i[u+1>>0]=i[322937+((e|g)>>>6&63)>>0]|0;i[u+2>>0]=i[322937+((e|q<<16)>>>12&63)>>0]|0;i[u+3>>0]=i[322937+(q>>>2)>>0]|0;j=j+1|0;if((j|0)==5)break;else u=u+4|0}u=c+b|0;b=l[f+11>>0]|0;i[u>>0]=i[322937+(b&63)>>0]|0;i[u+1>>0]=i[322937+(b>>>6)>>0]|0;i[u+2>>0]=0;v=c}else v=0;r=d;return v|0}function PXa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+32|0;c=b+16|0;d=b;e=a+20|0;do if(!(k[e>>2]|0)){if(((k[a+16>>2]|0)!=0?(f=k[a>>2]|0,(f|0)>-1):0)?(f|0)!=(BUa()|0):0){k[c>>2]=k[3774];k[c+4>>2]=k[3775];k[c+8>>2]=k[3776];k[c+12>>2]=k[3777];hNa(6,d)|0;f=uNa(6,c)|0;k[e>>2]=0-f;if(!((f|0)!=0?(k[12086]|0)!=0:0)){k[e>>2]=1;uNa(6,d)|0}break}k[e>>2]=1}while(0);r=b;return}function QXa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+64|0;c=b+40|0;d=b+32|0;e=b+24|0;f=b+8|0;g=yd(202,b|0)|0;k[f>>2]=g;k[f+4>>2]=-1;if(!((zd(204,f|0)|0)==0?(f=yd(201,b+16|0)|0,k[e>>2]=f,k[e+4>>2]=-1,(Ad(203,e|0)|0)==0):0)){k[d>>2]=1;md(1,d|0)|0}d=k[a+4>>2]|0;e=k[a+8>>2]|0;k[c>>2]=k[a>>2];k[c+4>>2]=d;k[c+8>>2]=e;k[c+12>>2]=0;e=gc(307,c|0)|0;c=0;while(1){if((e|0)==(k[56508+(c<<2)>>2]|0)){h=c;break}d=c+1|0;if(d>>>0<13)c=d;else{h=d;break}}r=b;return h|0}function RXa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;c=a+4|0;d=k[c>>2]|0;e=a+100|0;if(d>>>0<(k[e>>2]|0)>>>0){k[c>>2]=d+1;f=l[d>>0]|0}else f=NVa(a)|0;switch(f|0){case 43:case 45:{d=(f|0)==45&1;g=k[c>>2]|0;if(g>>>0<(k[e>>2]|0)>>>0){k[c>>2]=g+1;h=l[g>>0]|0}else h=NVa(a)|0;if((b|0)!=0&(h+-48|0)>>>0>9?(k[e>>2]|0)!=0:0){k[c>>2]=(k[c>>2]|0)+-1;i=h;j=d}else{i=h;j=d}break}default:{i=f;j=0}}if((i+-48|0)>>>0>9)if(!(k[e>>2]|0)){m=-2147483648;n=0}else{k[c>>2]=(k[c>>2]|0)+-1;m=-2147483648;n=0}else{f=i;i=0;while(1){d=f+-48+(i*10|0)|0;h=k[c>>2]|0;if(h>>>0<(k[e>>2]|0)>>>0){k[c>>2]=h+1;o=l[h>>0]|0}else o=NVa(a)|0;if((o+-48|0)>>>0<10&(d|0)<214748364){f=o;i=d}else{p=d;q=o;break}}o=((p|0)<0)<<31>>31;if((q+-48|0)>>>0<10){i=p;f=o;d=q;while(1){h=Qyb(i|0,f|0,10,0)|0;b=M;g=Hyb(d|0,((d|0)<0)<<31>>31|0,-48,-1)|0;r=Hyb(g|0,M|0,h|0,b|0)|0;b=M;h=k[c>>2]|0;if(h>>>0<(k[e>>2]|0)>>>0){k[c>>2]=h+1;s=l[h>>0]|0}else s=NVa(a)|0;if((s+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&r>>>0<2061584302)){i=r;f=b;d=s}else{t=r;u=b;v=s;break}}}else{t=p;u=o;v=q}if((v+-48|0)>>>0<10)do{v=k[c>>2]|0;if(v>>>0<(k[e>>2]|0)>>>0){k[c>>2]=v+1;w=l[v>>0]|0}else w=NVa(a)|0}while((w+-48|0)>>>0<10);if(k[e>>2]|0)k[c>>2]=(k[c>>2]|0)+-1;c=(j|0)!=0;j=Gyb(0,0,t|0,u|0)|0;m=c?M:u;n=c?j:t}M=m;return n|0}function SXa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=k[14153]|0;if(!b)k[k[14156]>>2]=a;else{k[14154]=(b|0)==31|(b|0)==7?3:1;k[14155]=0;if((b|0)>0){b=k[14156]|0;c=0;d=a;a=0;do{e=Qyb(d|0,c|0,1284865837,1481765933)|0;d=Hyb(e|0,M|0,1,0)|0;c=M;k[b+(a<<2)>>2]=c;a=a+1|0}while((a|0)<(k[14153]|0));f=b}else f=k[14156]|0;k[f>>2]=k[f>>2]|1}return}function TXa(a){a=a|0;return}function UXa(){return}function VXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=a;e=k[d>>2]|0;f=e&63;g=Hyb(e|0,k[d+4>>2]|0,c|0,0)|0;d=a;k[d>>2]=g;k[d+4>>2]=M;do if(f){d=64-f|0;g=a+24+f|0;if(d>>>0>c>>>0){Dyb(g|0,b|0,c|0)|0;break}else{Dyb(g|0,b|0,d|0)|0;XXa(a,a+24|0);h=c-d|0;i=b+d|0;j=5;break}}else{h=c;i=b;j=5}while(0);if((j|0)==5){if(h>>>0>63){j=h+-64|0;b=j&-64;c=i+(b+64)|0;f=h;d=i;while(1){XXa(a,d);f=f+-64|0;if(f>>>0<=63)break;else d=d+64|0}l=j-b|0;m=c}else{l=h;m=i}Dyb(a+24|0,m|0,l|0)|0}return}function WXa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]&63;d=c+1|0;i[a+24+c>>0]=-128;e=a+24|0;if(d>>>0>56){Fyb(a+24+d|0,0,c^63|0)|0;XXa(a,e);f=0}else f=d;Fyb(a+24+f|0,0,56-f|0)|0;f=a;d=k[f>>2]|0;c=k[f+4>>2]|0;f=Kyb(d|0,c|0,3)|0;g=a;k[g>>2]=f;k[g+4>>2]=M;i[a+80>>0]=f;f=Iyb(d|0,c|0,5)|0;i[a+81>>0]=f;f=Iyb(d|0,c|0,13)|0;i[a+82>>0]=f;f=Iyb(d|0,c|0,21)|0;i[a+83>>0]=f;f=Iyb(d|0,c|0,29)|0;i[a+84>>0]=f;f=Iyb(d|0,c|0,37)|0;i[a+85>>0]=f;f=Iyb(d|0,c|0,45)|0;i[a+86>>0]=f;f=Iyb(d|0,c|0,53)|0;i[a+87>>0]=f;XXa(a,e);e=0;do{f=a+8+(e<<2)|0;c=e<<2;i[b+c>>0]=k[f>>2];i[b+(c|1)>>0]=(k[f>>2]|0)>>>8;i[b+(c|2)>>0]=(k[f>>2]|0)>>>16;i[b+(c|3)>>0]=(k[f>>2]|0)>>>24;e=e+1|0}while((e|0)!=4);return}function XXa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;c=r;r=r+64|0;d=c;e=0;do{f=e<<2;k[d+(e<<2)>>2]=(l[b+(f|1)>>0]|0)<<8|(l[b+f>>0]|0)|(l[b+(f|2)>>0]|0)<<16|(l[b+(f|3)>>0]|0)<<24;e=e+1|0}while((e|0)!=16);e=a+8|0;b=k[e>>2]|0;f=a+12|0;g=k[f>>2]|0;h=a+16|0;i=k[h>>2]|0;j=a+20|0;a=k[j>>2]|0;m=b;n=g;o=i;p=a;q=0;while(1){s=((p^o)&n^p)+m+(k[d+(q<<2)>>2]|0)+(k[57092+(q<<2)>>2]|0)|0;t=(s>>>25|s<<7)+n|0;s=q|1;u=(k[d+(s<<2)>>2]|0)+p+(k[57092+(s<<2)>>2]|0)+(t&(o^n)^o)|0;s=(u>>>20|u<<12)+t|0;u=q|2;v=(k[d+(u<<2)>>2]|0)+o+(k[57092+(u<<2)>>2]|0)+(s&(t^n)^n)|0;u=(v>>>15|v<<17)+s|0;v=q|3;w=(k[d+(v<<2)>>2]|0)+n+(k[57092+(v<<2)>>2]|0)+(u&(s^t)^t)|0;v=(w>>>10|w<<22)+u|0;q=q+4|0;if(q>>>0>=16){x=t;y=v;z=u;A=s;B=16;break}else{m=t;n=v;o=u;p=s}}while(1){p=(A&(z^y)^z)+x+(k[d+((B*5&12|1)<<2)>>2]|0)+(k[57092+(B<<2)>>2]|0)|0;o=(p>>>27|p<<5)+y|0;p=B|1;n=(k[d+(((p*5|0)+1&15)<<2)>>2]|0)+A+(k[57092+(p<<2)>>2]|0)+((o^y)&z^y)|0;p=(n>>>23|n<<9)+o|0;n=B|2;m=(k[d+((n*5&14|1)<<2)>>2]|0)+z+(k[57092+(n<<2)>>2]|0)+((p^o)&y^o)|0;n=(m>>>18|m<<14)+p|0;m=B|3;q=(k[d+(((m*5|0)+1&15)<<2)>>2]|0)+y+(k[57092+(m<<2)>>2]|0)+((n^p)&o^p)|0;m=(q>>>12|q<<20)+n|0;B=B+4|0;if(B>>>0>=32){C=o;D=m;E=n;F=p;G=32;break}else{x=o;y=m;z=n;A=p}}while(1){A=E^D;z=(A^F)+C+(k[d+(((G*3|0)+5&13)<<2)>>2]|0)+(k[57092+(G<<2)>>2]|0)|0;y=(z>>>28|z<<4)+D|0;z=G|1;x=(k[d+(((z*3|0)+5&15)<<2)>>2]|0)+F+(k[57092+(z<<2)>>2]|0)+(A^y)|0;A=(x>>>21|x<<11)+y|0;x=G|2;z=(k[d+(((x*3|0)+5&15)<<2)>>2]|0)+E+(k[57092+(x<<2)>>2]|0)+(y^D^A)|0;x=(z>>>16|z<<16)+A|0;z=G|3;B=(k[d+(((z*3|0)+5&15)<<2)>>2]|0)+D+(k[57092+(z<<2)>>2]|0)+(A^y^x)|0;z=(B>>>9|B<<23)+x|0;G=G+4|0;if(G>>>0>=48){H=y;I=z;J=x;K=A;L=48;break}else{C=y;D=z;E=x;F=A}}while(1){F=((I|~K)^J)+H+(k[d+((L*7&12)<<2)>>2]|0)+(k[57092+(L<<2)>>2]|0)|0;E=(F>>>26|F<<6)+I|0;F=L|1;D=(k[d+((F*7&15)<<2)>>2]|0)+K+(k[57092+(F<<2)>>2]|0)+((E|~J)^I)|0;F=(D>>>22|D<<10)+E|0;D=L|2;C=(k[d+((D*7&14)<<2)>>2]|0)+J+(k[57092+(D<<2)>>2]|0)+((F|~I)^E)|0;D=(C>>>17|C<<15)+F|0;C=L|3;G=(k[d+((C*7&15)<<2)>>2]|0)+I+(k[57092+(C<<2)>>2]|0)+((D|~E)^F)|0;C=(G>>>11|G<<21)+D|0;L=L+4|0;if(L>>>0>=64){M=E;N=F;O=D;P=C;break}else{H=E;I=C;J=D;K=F}}k[e>>2]=b+M;k[f>>2]=g+P;k[h>>2]=i+O;k[j>>2]=a+N;r=c;return}function YXa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=a;e=k[d>>2]|0;f=e&127;g=Hyb(e|0,k[d+4>>2]|0,c|0,0)|0;d=a;k[d>>2]=g;k[d+4>>2]=M;do if(f){d=128-f|0;g=a+72+f|0;if(d>>>0>c>>>0){Dyb(g|0,b|0,c|0)|0;break}else{Dyb(g|0,b|0,d|0)|0;$Xa(a,a+72|0);h=c-d|0;i=b+d|0;j=5;break}}else{h=c;i=b;j=5}while(0);if((j|0)==5){if(h>>>0>127){j=h+-128|0;b=j&-128;c=i+(b+128)|0;f=h;d=i;while(1){$Xa(a,d);f=f+-128|0;if(f>>>0<=127)break;else d=d+128|0}l=j-b|0;m=c}else{l=h;m=i}Dyb(a+72|0,m|0,l|0)|0}return}function ZXa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]&127;d=c+1|0;i[a+72+c>>0]=-128;e=a+72|0;if(d>>>0>112){Fyb(a+72+d|0,0,c^127|0)|0;$Xa(a,e);f=0}else f=d;Fyb(a+72+f|0,0,120-f|0)|0;f=a;d=k[f>>2]|0;c=k[f+4>>2]|0;f=Kyb(d|0,c|0,3)|0;g=a;k[g>>2]=f;k[g+4>>2]=M;g=Iyb(d|0,c|0,53)|0;i[a+192>>0]=g;g=Iyb(d|0,c|0,45)|0;i[a+193>>0]=g;g=Iyb(d|0,c|0,37)|0;i[a+194>>0]=g;g=Iyb(d|0,c|0,29)|0;i[a+195>>0]=g;g=Iyb(d|0,c|0,21)|0;i[a+196>>0]=g;g=Iyb(d|0,c|0,13)|0;i[a+197>>0]=g;g=Iyb(d|0,c|0,5)|0;i[a+198>>0]=g;i[a+199>>0]=f;$Xa(a,e);e=0;do{f=a+8+(e<<3)|0;g=f;c=Iyb(k[g>>2]|0,k[g+4>>2]|0,56)|0;g=e<<3;i[b+g>>0]=c;c=f;d=Iyb(k[c>>2]|0,k[c+4>>2]|0,48)|0;i[b+(g|1)>>0]=d;d=f;c=Iyb(k[d>>2]|0,k[d+4>>2]|0,40)|0;i[b+(g|2)>>0]=c;i[b+(g|3)>>0]=k[f+4>>2];c=f;d=Iyb(k[c>>2]|0,k[c+4>>2]|0,24)|0;i[b+(g|4)>>0]=d;d=f;c=Iyb(k[d>>2]|0,k[d+4>>2]|0,16)|0;i[b+(g|5)>>0]=c;c=f;d=Iyb(k[c>>2]|0,k[c+4>>2]|0,8)|0;i[b+(g|6)>>0]=d;i[b+(g|7)>>0]=k[f>>2];e=e+1|0}while((e|0)!=8);return}function _Xa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(b>>>0>64){d=b+-65&-64;e=b;do{YXa(a,c,64);e=e+-64|0}while(e>>>0>64);f=b+-64-d|0}else f=b;YXa(a,c,f);return}function $Xa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;c=r;r=r+640|0;d=c;e=0;do{f=e<<3;g=Kyb(l[b+f>>0]|0|0,0,56)|0;h=M;i=Kyb(l[b+(f|1)>>0]|0|0,0,48)|0;j=M|h;h=Kyb(l[b+(f|2)>>0]|0|0,0,40)|0;m=j|M|(l[b+(f|3)>>0]|0);j=Kyb(l[b+(f|4)>>0]|0|0,0,24)|0;n=m|M;m=Kyb(l[b+(f|5)>>0]|0|0,0,16)|0;o=n|M;n=Kyb(l[b+(f|6)>>0]|0|0,0,8)|0;p=d+(e<<3)|0;k[p>>2]=i|g|h|j|m|n|(l[b+(f|7)>>0]|0);k[p+4>>2]=o|M;e=e+1|0}while((e|0)!=16);e=d;b=k[e>>2]|0;o=k[e+4>>2]|0;e=16;do{p=d+(e+-2<<3)|0;f=k[p>>2]|0;n=k[p+4>>2]|0;p=Iyb(f|0,n|0,19)|0;m=M;j=Kyb(f|0,n|0,45)|0;h=M|m;m=Iyb(f|0,n|0,61)|0;g=M;i=Kyb(f|0,n|0,3)|0;q=M|g;g=Iyb(f|0,n|0,6)|0;n=q^M^h;h=d+(e+-7<<3)|0;q=k[h>>2]|0;f=k[h+4>>2]|0;h=d+(e+-15<<3)|0;s=b;b=k[h>>2]|0;t=o;o=k[h+4>>2]|0;h=Iyb(b|0,o|0,1)|0;u=M;v=Kyb(b|0,o|0,63)|0;w=M|u;u=Iyb(b|0,o|0,8)|0;x=M;y=Kyb(b|0,o|0,56)|0;z=M|x;x=Iyb(b|0,o|0,7)|0;A=z^M^w;w=Hyb(s|0,t|0,q|0,f|0)|0;f=Hyb(w|0,M|0,(i|m)^g^(j|p)|0,n|0)|0;n=Hyb(f|0,M|0,(y|u)^x^(v|h)|0,A|0)|0;A=d+(e<<3)|0;k[A>>2]=n;k[A+4>>2]=M;e=e+1|0}while((e|0)!=80);e=a+8|0;o=e;b=k[o>>2]|0;A=k[o+4>>2]|0;o=a+16|0;n=o;h=k[n>>2]|0;v=k[n+4>>2]|0;n=a+24|0;x=n;u=k[x>>2]|0;y=k[x+4>>2]|0;x=a+32|0;f=x;p=k[f>>2]|0;j=k[f+4>>2]|0;f=a+40|0;g=f;m=k[g>>2]|0;i=k[g+4>>2]|0;g=a+48|0;w=g;q=k[w>>2]|0;t=k[w+4>>2]|0;w=a+56|0;s=w;z=k[s>>2]|0;B=k[s+4>>2]|0;s=a+64|0;a=s;C=k[a>>2]|0;D=k[a+4>>2]|0;a=m;E=i;F=C;G=D;H=q;I=z;J=t;K=B;L=b;N=A;O=h;P=v;Q=u;R=y;S=p;T=j;U=0;while(1){V=Iyb(a|0,E|0,14)|0;W=M;X=Kyb(a|0,E|0,50)|0;Y=M|W;W=Iyb(a|0,E|0,18)|0;Z=M;_=Kyb(a|0,E|0,46)|0;$=Y^(M|Z);Z=Iyb(a|0,E|0,41)|0;Y=M;aa=Kyb(a|0,E|0,23)|0;ba=Hyb((X|V)^(_|W)^(aa|Z)|0,$^(M|Y)|0,F|0,G|0)|0;Y=Hyb(ba|0,M|0,(I^H)&a^I|0,(K^J)&E^K|0)|0;ba=15112+(U<<3)|0;$=Hyb(Y|0,M|0,k[ba>>2]|0,k[ba+4>>2]|0)|0;ba=d+(U<<3)|0;Y=Hyb($|0,M|0,k[ba>>2]|0,k[ba+4>>2]|0)|0;ba=M;$=Iyb(L|0,N|0,28)|0;Z=M;aa=Kyb(L|0,N|0,36)|0;W=M|Z;Z=Iyb(L|0,N|0,34)|0;_=M;V=Kyb(L|0,N|0,30)|0;X=W^(M|_);_=Iyb(L|0,N|0,39)|0;W=M;ca=Kyb(L|0,N|0,25)|0;da=Hyb((aa|$)^(V|Z)^(ca|_)|0,X^(M|W)|0,Q&(O|L)|O&L|0,R&(P|N)|P&N|0)|0;W=M;X=Hyb(Y|0,ba|0,S|0,T|0)|0;_=M;ca=Hyb(da|0,W|0,Y|0,ba|0)|0;ba=M;U=U+1|0;if((U|0)==80){ea=ca;fa=ba;ga=L;ha=N;ia=O;ja=P;ka=Q;la=R;ma=X;na=_;oa=a;pa=E;qa=H;ra=J;sa=I;ta=K;break}else{Y=N;W=L;da=E;Z=a;V=K;$=I;a=X;E=_;L=ca;N=ba;T=R;S=Q;R=P;Q=O;P=Y;O=W;K=J;J=da;I=H;H=Z;G=V;F=$}}F=Hyb(b|0,A|0,ea|0,fa|0)|0;fa=e;k[fa>>2]=F;k[fa+4>>2]=M;fa=Hyb(h|0,v|0,ga|0,ha|0)|0;ha=o;k[ha>>2]=fa;k[ha+4>>2]=M;ha=Hyb(u|0,y|0,ia|0,ja|0)|0;ja=n;k[ja>>2]=ha;k[ja+4>>2]=M;ja=Hyb(p|0,j|0,ka|0,la|0)|0;la=x;k[la>>2]=ja;k[la+4>>2]=M;la=Hyb(m|0,i|0,ma|0,na|0)|0;na=f;k[na>>2]=la;k[na+4>>2]=M;na=Hyb(q|0,t|0,oa|0,pa|0)|0;pa=g;k[pa>>2]=na;k[pa+4>>2]=M;pa=Hyb(z|0,B|0,qa|0,ra|0)|0;ra=w;k[ra>>2]=pa;k[ra+4>>2]=M;ra=Hyb(C|0,D|0,sa|0,ta|0)|0;ta=s;k[ta>>2]=ra;k[ta+4>>2]=M;r=c;return}function aYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=a;e=k[d>>2]|0;f=e&63;g=Hyb(e|0,k[d+4>>2]|0,c|0,0)|0;d=a;k[d>>2]=g;k[d+4>>2]=M;do if(f){d=64-f|0;g=a+40+f|0;if(d>>>0>c>>>0){Dyb(g|0,b|0,c|0)|0;break}else{Dyb(g|0,b|0,d|0)|0;dYa(a,a+40|0);h=c-d|0;i=b+d|0;j=5;break}}else{h=c;i=b;j=5}while(0);if((j|0)==5){if(h>>>0>63){j=h+-64|0;b=j&-64;c=i+(b+64)|0;f=h;d=i;while(1){dYa(a,d);f=f+-64|0;if(f>>>0<=63)break;else d=d+64|0}l=j-b|0;m=c}else{l=h;m=i}Dyb(a+40|0,m|0,l|0)|0}return}function bYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]&63;d=c+1|0;i[a+40+c>>0]=-128;e=a+40|0;if(d>>>0>56){Fyb(a+40+d|0,0,c^63|0)|0;dYa(a,e);f=0}else f=d;Fyb(a+40+f|0,0,56-f|0)|0;f=a;d=k[f>>2]|0;c=k[f+4>>2]|0;f=Kyb(d|0,c|0,3)|0;g=a;k[g>>2]=f;k[g+4>>2]=M;g=Iyb(d|0,c|0,53)|0;i[a+96>>0]=g;g=Iyb(d|0,c|0,45)|0;i[a+97>>0]=g;g=Iyb(d|0,c|0,37)|0;i[a+98>>0]=g;g=Iyb(d|0,c|0,29)|0;i[a+99>>0]=g;g=Iyb(d|0,c|0,21)|0;i[a+100>>0]=g;g=Iyb(d|0,c|0,13)|0;i[a+101>>0]=g;g=Iyb(d|0,c|0,5)|0;i[a+102>>0]=g;i[a+103>>0]=f;dYa(a,e);e=0;do{f=a+8+(e<<2)|0;g=e<<2;i[b+g>>0]=(k[f>>2]|0)>>>24;i[b+(g|1)>>0]=(k[f>>2]|0)>>>16;i[b+(g|2)>>0]=(k[f>>2]|0)>>>8;i[b+(g|3)>>0]=k[f>>2];e=e+1|0}while((e|0)!=8);return}function cYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(b>>>0>32){d=b+-33&-32;e=b;do{aYa(a,c,32);e=e+-32|0}while(e>>>0>32);f=b+-32-d|0}else f=b;aYa(a,c,f);return}function dYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;c=r;r=r+256|0;d=c;e=0;do{f=e<<2;k[d+(e<<2)>>2]=(l[b+(f|1)>>0]|0)<<16|(l[b+f>>0]|0)<<24|(l[b+(f|2)>>0]|0)<<8|(l[b+(f|3)>>0]|0);e=e+1|0}while((e|0)!=16);e=k[d>>2]|0;b=16;do{f=k[d+(b+-2<<2)>>2]|0;g=e;e=k[d+(b+-15<<2)>>2]|0;k[d+(b<<2)>>2]=g+(k[d+(b+-7<<2)>>2]|0)+((f<<13|f>>>19)^f>>>10^(f<<15|f>>>17))+((e<<14|e>>>18)^e>>>3^(e<<25|e>>>7));b=b+1|0}while((b|0)!=64);b=a+8|0;e=k[b>>2]|0;f=a+12|0;g=k[f>>2]|0;h=a+16|0;i=k[h>>2]|0;j=a+20|0;m=k[j>>2]|0;n=a+24|0;o=k[n>>2]|0;p=a+28|0;q=k[p>>2]|0;s=a+32|0;t=k[s>>2]|0;u=a+36|0;a=k[u>>2]|0;v=e;w=g;x=i;y=m;z=o;A=q;B=t;C=a;D=0;while(1){E=((z<<26|z>>>6)^(z<<21|z>>>11)^(z<<7|z>>>25))+C+((B^A)&z^B)+(k[57348+(D<<2)>>2]|0)+(k[d+(D<<2)>>2]|0)|0;F=E+y|0;G=((v<<30|v>>>2)^(v<<19|v>>>13)^(v<<10|v>>>22))+(x&(w|v)|w&v)+E|0;D=D+1|0;if((D|0)==64){H=F;I=G;J=v;K=w;L=x;M=z;N=A;O=B;break}else{E=z;P=v;v=G;z=F;C=B;B=A;A=E;y=x;x=w;w=P}}k[b>>2]=e+I;k[f>>2]=g+J;k[h>>2]=i+K;k[j>>2]=m+L;k[n>>2]=o+H;k[p>>2]=q+M;k[s>>2]=t+N;k[u>>2]=a+O;r=c;return}function eYa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=a+68|0;g=b;b=c;c=d;while(1){d=b;h=k[a>>2]^g;i=0;while(1){j=i|1;l=k[a+(j<<2)>>2]^d^((k[a+72+(h>>>24<<2)>>2]|0)+(k[a+1096+((h>>>16&255)<<2)>>2]|0)^k[a+2120+((h>>>8&255)<<2)>>2])+(k[a+3144+((h&255)<<2)>>2]|0);m=k[a+(j+1<<2)>>2]^h^((k[a+72+(l>>>24<<2)>>2]|0)+(k[a+1096+((l>>>16&255)<<2)>>2]|0)^k[a+2120+((l>>>8&255)<<2)>>2])+(k[a+3144+((l&255)<<2)>>2]|0);i=i+2|0;if((i|0)>=16){n=l;o=m;break}else{d=l;h=m}}h=k[f>>2]^n;k[c>>2]=h;d=c+8|0;k[c+4>>2]=o;if(d>>>0>>0){g=h;b=o;c=d}else{p=h;break}}return p|0}function fYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{d=(k[c>>2]|0)+(4-1)&~(4-1);e=k[d>>2]|0;k[c>>2]=d+4;k[a>>2]=e;break a;break}case 10:{e=(k[c>>2]|0)+(4-1)&~(4-1);d=k[e>>2]|0;k[c>>2]=e+4;e=a;k[e>>2]=d;k[e+4>>2]=((d|0)<0)<<31>>31;break a;break}case 11:{d=(k[c>>2]|0)+(4-1)&~(4-1);e=k[d>>2]|0;k[c>>2]=d+4;d=a;k[d>>2]=e;k[d+4>>2]=0;break a;break}case 12:{d=(k[c>>2]|0)+(8-1)&~(8-1);e=d;f=k[e>>2]|0;g=k[e+4>>2]|0;k[c>>2]=d+8;d=a;k[d>>2]=f;k[d+4>>2]=g;break a;break}case 13:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=(d&65535)<<16>>16;d=a;k[d>>2]=g;k[d+4>>2]=((g|0)<0)<<31>>31;break a;break}case 14:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=a;k[g>>2]=d&65535;k[g+4>>2]=0;break a;break}case 15:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=(d&255)<<24>>24;d=a;k[d>>2]=g;k[d+4>>2]=((g|0)<0)<<31>>31;break a;break}case 16:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=a;k[g>>2]=d&255;k[g+4>>2]=0;break a;break}case 17:{g=(k[c>>2]|0)+(8-1)&~(8-1);h=+p[g>>3];k[c>>2]=g+8;p[a>>3]=h;break a;break}case 18:{g=(k[c>>2]|0)+(8-1)&~(8-1);h=+p[g>>3];k[c>>2]=g+8;p[a>>3]=h;break a;break}default:break a}while(0);while(0);return}function gYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;if(b>>>0>0|(b|0)==0&a>>>0>4294967295){d=c;e=a;f=b;while(1){b=Syb(e|0,f|0,10,0)|0;g=d+-1|0;i[g>>0]=b|48;b=Ryb(e|0,f|0,10,0)|0;if(f>>>0>9|(f|0)==9&e>>>0>4294967295){d=g;e=b;f=M}else{h=g;j=b;break}}k=h;l=j}else{k=c;l=a}if(!l)m=k;else{a=k;k=l;while(1){l=a+-1|0;i[l>>0]=(k>>>0)%10|0|48;if(k>>>0<10){m=l;break}else{a=l;k=(k>>>0)/10|0}}}return m|0}function hYa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=r;r=r+256|0;g=f;do if((c|0)>(d|0)&(e&73728|0)==0){h=c-d|0;Fyb(g|0,b|0,(h>>>0>256?256:h)|0)|0;i=k[a>>2]|0;j=(i&32|0)==0;if(h>>>0>255){l=c-d|0;m=h;n=i;i=j;while(1){if(i){ERa(g,256,a)|0;o=k[a>>2]|0}else o=n;m=m+-256|0;i=(o&32|0)==0;if(m>>>0<=255)break;else n=o}if(i)p=l&255;else break}else if(j)p=h;else break;ERa(g,p,a)|0}while(0);r=f;return}function iYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a:do if(c){d=b;e=c;while(1){e=e+-1|0;if(k[a>>2]&32)break a;SRa(k[d>>2]|0,a)|0;if(!e)break;else d=d+4|0}}while(0);return}function jYa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;if(!(WIa(k[k[a>>2]>>2]|0)|0))b=0;else{c=0;while(1){d=k[a>>2]|0;e=(c*10|0)+-48+(k[d>>2]|0)|0;f=d+4|0;k[a>>2]=f;if(!(WIa(k[f>>2]|0)|0)){b=e;break}else c=e}}return b|0}function kYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{d=(k[c>>2]|0)+(4-1)&~(4-1);e=k[d>>2]|0;k[c>>2]=d+4;k[a>>2]=e;break a;break}case 10:{e=(k[c>>2]|0)+(4-1)&~(4-1);d=k[e>>2]|0;k[c>>2]=e+4;e=a;k[e>>2]=d;k[e+4>>2]=((d|0)<0)<<31>>31;break a;break}case 11:{d=(k[c>>2]|0)+(4-1)&~(4-1);e=k[d>>2]|0;k[c>>2]=d+4;d=a;k[d>>2]=e;k[d+4>>2]=0;break a;break}case 12:{d=(k[c>>2]|0)+(8-1)&~(8-1);e=d;f=k[e>>2]|0;g=k[e+4>>2]|0;k[c>>2]=d+8;d=a;k[d>>2]=f;k[d+4>>2]=g;break a;break}case 13:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=(d&65535)<<16>>16;d=a;k[d>>2]=g;k[d+4>>2]=((g|0)<0)<<31>>31;break a;break}case 14:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=a;k[g>>2]=d&65535;k[g+4>>2]=0;break a;break}case 15:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=(d&255)<<24>>24;d=a;k[d>>2]=g;k[d+4>>2]=((g|0)<0)<<31>>31;break a;break}case 16:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=a;k[g>>2]=d&255;k[g+4>>2]=0;break a;break}case 17:{g=(k[c>>2]|0)+(8-1)&~(8-1);h=+p[g>>3];k[c>>2]=g+8;p[a>>3]=h;break a;break}case 18:{g=(k[c>>2]|0)+(8-1)&~(8-1);h=+p[g>>3];k[c>>2]=g+8;p[a>>3]=h;break a;break}default:break a}while(0);while(0);return}function lYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=a+20|0;e=k[d>>2]|0;f=(k[a+16>>2]|0)-e|0;a=f>>>0>c>>>0?c:f;Dyb(e|0,b|0,a|0)|0;k[d>>2]=(k[d>>2]|0)+a;return c|0}function mYa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;f=k[a>>2]|0;g=(f|0)>-1;a:do if(!c)if(g){h=b+32|0;i=f;j=a;l=a;while(1){if((k[b>>2]|0)>-1?(m=d+(i<<2)|0,k[m>>2]=(k[m>>2]|0)+1,(k[h>>2]|0)>-1):0){m=h;do{n=d+(k[j>>2]<<2)|0;k[n>>2]=(k[n>>2]|0)+1;m=m+32|0}while((k[m>>2]|0)>-1)}m=l+32|0;n=k[m>>2]|0;if((n|0)>-1){i=n;j=m;l=m}else{o=0;break}}}else o=0;else if(g){l=a;j=a;while(1){i=k[b>>2]|0;b:do if((i|0)>-1){h=j+4|0;m=j+8|0;n=j+16|0;p=j+20|0;q=j+24|0;r=j+28|0;s=j+12|0;t=b;u=i;v=-1;while(1){w=t;x=u;while(1){if((x|0)!=(v|0)){y=w;z=x;break}w=w+32|0;x=k[w>>2]|0;if((x|0)<=-1)break b}x=c+(k[e+(k[l>>2]<<2)>>2]<<5)|0;while(1){w=x+8|0;if(!(k[w>>2]|0)){A=w;B=x;break}else x=x+32|0}k[B+40>>2]=0;k[B>>2]=k[h>>2];k[B+4>>2]=k[m>>2];k[A>>2]=c+(k[e+(z<<2)>>2]<<5);k[B+12>>2]=z;x=k[p>>2]|0;w=k[y+16>>2]|k[n>>2]|((x|0)!=0?4:0)|((k[q>>2]|0)!=0?8:0);C=B+20|0;k[C>>2]=w;D=k[r>>2]|0;if((D|0)>-1){k[C>>2]=w|256;E=D}else E=x;k[B+24>>2]=E;x=k[q>>2]|0;if(!x)k[B+28>>2]=0;else{D=0;while(1){w=D+1|0;if(!(k[x+(D<<2)>>2]|0)){F=w;break}else D=w}D=xYa(F<<2)|0;k[B+28>>2]=D;if(!D){o=12;break a}x=k[q>>2]|0;w=k[x>>2]|0;if(!w)G=D;else{C=w;w=D;H=0;while(1){k[w>>2]=C;H=H+1|0;C=k[x+(H<<2)>>2]|0;I=D+(H<<2)|0;if(!C){G=I;break}else w=I}}k[G>>2]=0}w=k[s>>2]|0;if(!w)J=0;else{C=0;while(1)if((k[w+(C<<2)>>2]|0)>-1)C=C+1|0;else{J=C;break}}C=y+12|0;w=k[C>>2]|0;if(!w)K=0;else{H=0;while(1)if((k[w+(H<<2)>>2]|0)>-1)H=H+1|0;else{K=H;break}}H=B+16|0;w=k[H>>2]|0;if(w)yYa(w);k[H>>2]=0;w=K+J|0;if((w|0)>0){D=xYa((w<<2)+4|0)|0;k[H>>2]=D;if(!D){o=12;break a}H=k[s>>2]|0;if((H|0)!=0?(w=k[H>>2]|0,(w|0)>-1):0){x=w;w=0;while(1){k[D+(w<<2)>>2]=x;I=w+1|0;x=k[H+(I<<2)>>2]|0;if((x|0)<=-1){L=I;break}else w=I}}else L=0;w=k[C>>2]|0;if((w|0)!=0?(x=k[w>>2]|0,(x|0)>-1):0){H=(L|0)>0;I=x;x=0;M=L;while(1){c:do if(H){N=0;while(1){if((k[D+(N<<2)>>2]|0)==(I|0)){O=M;break c}N=N+1|0;if((N|0)>=(L|0)){P=39;break}}}else P=39;while(0);if((P|0)==39){P=0;k[D+(M<<2)>>2]=I;O=M+1|0}x=x+1|0;I=k[w+(x<<2)>>2]|0;if((I|0)<=-1){Q=O;break}else M=O}}else Q=L;k[D+(Q<<2)>>2]=-1}M=y+32|0;I=k[M>>2]|0;if((I|0)>-1){t=M;u=I;v=z}else break}}while(0);i=j+32|0;if((k[i>>2]|0)>-1){l=i;j=i}else{o=0;break}}}else o=0;while(0);return o|0}function nYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=dQa(a,0,0,0,8)|0;do if(d){e=iXa(a,0,20)|0;if(!e){k[d>>2]=0;f=12;break}g=k[e+4>>2]|0;k[g>>2]=-3;k[g+4>>2]=c;k[g+8>>2]=-1;k[d>>2]=e;e=dQa(a,0,0,0,32)|0;k[d+4>>2]=e;if(e){g=b+4|0;k[e+4>>2]=k[g>>2];k[e>>2]=k[b>>2];k[e+8>>2]=-1;k[e+12>>2]=-1;k[e+24>>2]=0;k[e+28>>2]=0;k[e+20>>2]=0;k[g>>2]=d;k[b>>2]=1;f=0}else f=12}else f=12;while(0);return f|0}function oYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=k[a>>2]|0;if((d|0)>-1){e=k[b+16>>2]|0;b=d;d=0;do{f=(b|0)/2|0;if(!(b&1))k[e+(f*12|0)>>2]=c;else k[e+(f*12|0)+4>>2]=c;d=d+1|0;b=k[a+(d<<2)>>2]|0}while((b|0)>-1)}k[a>>2]=-1;return}function pYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=dQa(a,0,0,0,8)|0;do if(d){e=iXa(a,0,20)|0;if(!e){k[d+4>>2]=0;f=12;break}g=k[e+4>>2]|0;k[g>>2]=-3;k[g+4>>2]=c;k[g+8>>2]=-1;k[d+4>>2]=e;e=dQa(a,0,0,0,32)|0;k[d>>2]=e;if(e){g=b+4|0;k[e+4>>2]=k[g>>2];k[e>>2]=k[b>>2];k[e+8>>2]=-1;k[e+12>>2]=-1;k[e+24>>2]=0;k[e+28>>2]=0;k[e+20>>2]=0;k[g>>2]=d;k[b>>2]=1;f=0}else f=12}else f=12;while(0);return f|0}function qYa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=k[f>>2]|0;h=k[e>>2]|0;if((k[d>>2]|0)>=(h|0))if((h|0)<=1024?(k[e>>2]=h<<1,e=AYa(g,h<<3)|0,(e|0)!=0):0){k[f>>2]=e;i=e;j=5}else l=12;else{i=g;j=5}if((j|0)==5){j=iXa(a,0,20)|0;if(!j)m=0;else{a=k[j+4>>2]|0;k[a>>2]=b;k[a+4>>2]=c;k[a+8>>2]=-1;m=j}j=k[d>>2]|0;k[i+(j<<2)>>2]=m;k[d>>2]=j+1;l=(m|0)==0?12:0}return l|0}function rYa(a,b){a=a|0;b=b|0;var c=0;c=k[k[(k[a>>2]|0)+4>>2]>>2]|0;a=k[k[(k[b>>2]|0)+4>>2]>>2]|0;return ((c|0)<(a|0)?-1:(c|0)>(a|0)&1)|0}function sYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d;do if(!b){k[c>>2]=0;f=0}else{if((i[a>>0]|0)>=0){k[c>>2]=1;f=i[a>>0]|0;break}g=tVa(e,a,b)|0;if((g|0)<0){k[c>>2]=1;h=-1}else{k[c>>2]=g;h=k[e>>2]|0}f=h}while(0);r=d;return f|0}function tYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;c=r;r=r+32|0;d=c+16|0;e=c;f=a+1|0;g=i[f>>0]|0;switch(g<<24>>24){case 33:case 94:{h=a+2|0;j=h;l=i[h>>0]|0;m=f;n=1;break}default:{j=f;l=g;m=a;n=0}}a:do switch(l<<24>>24){case 93:{if((b|0)==93){o=n^1;break a}else{p=m+2|0;q=10;break a}break}case 45:{if((b|0)==45){o=n^1;break a}else{p=m+2|0;q=10;break a}break}default:{p=j;q=10}}while(0);b:do if((q|0)==10){k[d>>2]=i[p+-1>>0];j=n^1;m=p;c:while(1){l=i[m>>0]|0;d:do switch(l<<24>>24){case 93:{o=n;break b;break}case 45:{a=m+1|0;if((i[a>>0]|0)==93)q=27;else{g=tVa(e,a,4)|0;if((g|0)<0){s=0;break c}a=k[d>>2]|0;f=k[e>>2]|0;if((f|0)>=(a|0)?(b-a|0)>>>0<=(f-a|0)>>>0:0){s=j;break c}t=m+(g+-1)|0}break}case 91:{g=i[m+1>>0]|0;switch(g<<24>>24){case 61:case 46:case 58:break;default:{q=27;break d}}a=m+3|0;while(1){f=a+-1|0;if((i[f>>0]|0)==g<<24>>24?(i[a>>0]|0)==93:0){u=a;v=f;break}a=a+1|0}a=m+2|0;if((g<<24>>24==58?(f=v-a|0,(f|0)<16):0)?(Dyb(e|0,a|0,f|0)|0,i[e+f>>0]=0,(zIa(b,AIa(e)|0)|0)!=0):0){o=j;break b}else t=u;break}default:if(l<<24>>24>-1)q=27;else{f=tVa(d,m,4)|0;if((f|0)<0){o=0;break b}w=m+(f+-1)|0;x=k[d>>2]|0;q=30}}while(0);if((q|0)==27){q=0;f=l&255;k[d>>2]=f;w=m;x=f;q=30}if((q|0)==30){q=0;if((x|0)==(b|0)){o=j;break b}else t=w}m=t+1|0}o=s}while(0);r=c;return o|0}function uYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=a+84|0;e=k[d>>2]|0;f=(k[e>>2]|0)!=0?e:61908;e=a+48|0;g=a+44|0;a:do if(!(k[e>>2]|0))h=0;else{j=0;while(1){l=k[f+(j<<2)>>2]|0;if(!l){h=j;break a}i[(k[g>>2]|0)+j>>0]=(l|0)<128?l&255:64;l=j+1|0;if(l>>>0<(k[e>>2]|0)>>>0)j=l;else{h=l;break}}}while(0);e=k[g>>2]|0;g=a+4|0;k[g>>2]=e;j=e;k[a+8>>2]=j+h;k[d>>2]=f+(h<<2);if((c|0)!=0&(h|0)!=0){k[g>>2]=j+1;i[b>>0]=i[j>>0]|0;m=1}else m=0;return m|0}function vYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=a+84|0;e=k[d>>2]|0;f=(k[e>>2]|0)!=0?e:61908;e=a+48|0;g=a+44|0;a:do if(!(k[e>>2]|0))h=0;else{j=0;while(1){l=k[f+(j<<2)>>2]|0;if(!l){h=j;break a}i[(k[g>>2]|0)+j>>0]=(l|0)<128?l&255:64;l=j+1|0;if(l>>>0<(k[e>>2]|0)>>>0)j=l;else{h=l;break}}}while(0);e=k[g>>2]|0;g=a+4|0;k[g>>2]=e;j=e;k[a+8>>2]=j+h;k[d>>2]=f+(h<<2);if((c|0)!=0&(h|0)!=0){k[g>>2]=j+1;i[b>>0]=i[j>>0]|0;m=1}else m=0;return m|0}function wYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+256|0;e=d;a:do if((c|0)>=2?(f=b+(c<<2)|0,k[f>>2]=e,(a|0)!=0):0){g=a;h=e;while(1){i=g>>>0>256?256:g;Dyb(h|0,k[b>>2]|0,i|0)|0;j=0;do{l=b+(j<<2)|0;j=j+1|0;Dyb(k[l>>2]|0,k[b+(j<<2)>>2]|0,i|0)|0;k[l>>2]=(k[l>>2]|0)+i}while((j|0)!=(c|0));if((g|0)==(i|0))break a;g=g-i|0;h=k[f>>2]|0}}while(0);r=d;return}function xYa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0;do if(a>>>0<245){b=a>>>0<11?16:a+11&-8;c=b>>>3;d=k[16407]|0;e=d>>>c;if(e&3){f=(e&1^1)+c|0;g=65668+(f<<1<<2)|0;h=g+8|0;i=k[h>>2]|0;j=i+8|0;l=k[j>>2]|0;do if((g|0)!=(l|0)){if(l>>>0<(k[16411]|0)>>>0)Ub();m=l+12|0;if((k[m>>2]|0)==(i|0)){k[m>>2]=g;k[h>>2]=l;break}else Ub()}else k[16407]=d&~(1<>2]=l|3;h=i+l+4|0;k[h>>2]=k[h>>2]|1;n=j;return n|0}h=k[16409]|0;if(b>>>0>h>>>0){if(e){l=2<>>12&16;m=l>>>g;l=m>>>5&8;o=m>>>l;m=o>>>2&4;p=o>>>m;o=p>>>1&2;q=p>>>o;p=q>>>1&1;r=(l|g|m|o|p)+(q>>>p)|0;p=65668+(r<<1<<2)|0;q=p+8|0;o=k[q>>2]|0;m=o+8|0;g=k[m>>2]|0;do if((p|0)!=(g|0)){if(g>>>0<(k[16411]|0)>>>0)Ub();l=g+12|0;if((k[l>>2]|0)==(o|0)){k[l>>2]=p;k[q>>2]=g;s=k[16409]|0;break}else Ub()}else{k[16407]=d&~(1<>2]=b|3;d=o+b|0;k[d+4>>2]=h|1;k[d+h>>2]=h;if(s){g=k[16412]|0;q=s>>>3;p=65668+(q<<1<<2)|0;c=k[16407]|0;e=1<>2]|0;if(j>>>0<(k[16411]|0)>>>0)Ub();else{t=q;u=j}}else{k[16407]=c|e;t=p+8|0;u=p}k[t>>2]=g;k[u+12>>2]=g;k[g+8>>2]=u;k[g+12>>2]=p}k[16409]=h;k[16412]=d;n=m;return n|0}d=k[16408]|0;if(d){h=(d&0-d)+-1|0;d=h>>>12&16;p=h>>>d;h=p>>>5&8;g=p>>>h;p=g>>>2&4;e=g>>>p;g=e>>>1&2;c=e>>>g;e=c>>>1&1;j=k[65932+((h|d|p|g|e)+(c>>>e)<<2)>>2]|0;e=(k[j+4>>2]&-8)-b|0;c=j;g=j;while(1){j=k[c+16>>2]|0;if(!j){p=k[c+20>>2]|0;if(!p){v=e;w=g;break}else x=p}else x=j;j=(k[x+4>>2]&-8)-b|0;p=j>>>0>>0;e=p?j:e;c=x;g=p?x:g}g=k[16411]|0;if(w>>>0>>0)Ub();c=w+b|0;if(w>>>0>=c>>>0)Ub();e=k[w+24>>2]|0;m=k[w+12>>2]|0;do if((m|0)==(w|0)){o=w+20|0;r=k[o>>2]|0;if(!r){p=w+16|0;j=k[p>>2]|0;if(!j){y=0;break}else{z=j;A=p}}else{z=r;A=o}while(1){o=z+20|0;r=k[o>>2]|0;if(r){z=r;A=o;continue}o=z+16|0;r=k[o>>2]|0;if(!r){B=z;C=A;break}else{z=r;A=o}}if(C>>>0>>0)Ub();else{k[C>>2]=0;y=B;break}}else{o=k[w+8>>2]|0;if(o>>>0>>0)Ub();r=o+12|0;if((k[r>>2]|0)!=(w|0))Ub();p=m+8|0;if((k[p>>2]|0)==(w|0)){k[r>>2]=m;k[p>>2]=o;y=m;break}else Ub()}while(0);do if(e){m=k[w+28>>2]|0;g=65932+(m<<2)|0;if((w|0)==(k[g>>2]|0)){k[g>>2]=y;if(!y){k[16408]=k[16408]&~(1<>>0<(k[16411]|0)>>>0)Ub();m=e+16|0;if((k[m>>2]|0)==(w|0))k[m>>2]=y;else k[e+20>>2]=y;if(!y)break}m=k[16411]|0;if(y>>>0>>0)Ub();k[y+24>>2]=e;g=k[w+16>>2]|0;do if(g)if(g>>>0>>0)Ub();else{k[y+16>>2]=g;k[g+24>>2]=y;break}while(0);g=k[w+20>>2]|0;if(g)if(g>>>0<(k[16411]|0)>>>0)Ub();else{k[y+20>>2]=g;k[g+24>>2]=y;break}}while(0);if(v>>>0<16){e=v+b|0;k[w+4>>2]=e|3;g=w+e+4|0;k[g>>2]=k[g>>2]|1}else{k[w+4>>2]=b|3;k[c+4>>2]=v|1;k[c+v>>2]=v;g=k[16409]|0;if(g){e=k[16412]|0;m=g>>>3;g=65668+(m<<1<<2)|0;o=k[16407]|0;p=1<>2]|0;if(r>>>0<(k[16411]|0)>>>0)Ub();else{D=m;E=r}}else{k[16407]=o|p;D=g+8|0;E=g}k[D>>2]=e;k[E+12>>2]=e;k[e+8>>2]=E;k[e+12>>2]=g}k[16409]=v;k[16412]=c}n=w+8|0;return n|0}else F=b}else F=b}else if(a>>>0<=4294967231){g=a+11|0;e=g&-8;p=k[16408]|0;if(p){o=0-e|0;r=g>>>8;if(r)if(e>>>0>16777215)G=31;else{g=(r+1048320|0)>>>16&8;m=r<>>16&4;j=m<>>16&2;d=14-(r|g|m)+(j<>>15)|0;G=e>>>(d+7|0)&1|d<<1}else G=0;d=k[65932+(G<<2)>>2]|0;a:do if(!d){H=o;I=0;J=0;K=86}else{m=o;j=0;g=e<<((G|0)==31?0:25-(G>>>1)|0);r=d;h=0;while(1){q=k[r+4>>2]&-8;i=q-e|0;if(i>>>0>>0)if((q|0)==(e|0)){L=i;M=r;N=r;K=90;break a}else{O=i;P=r}else{O=m;P=h}i=k[r+20>>2]|0;r=k[r+16+(g>>>31<<2)>>2]|0;q=(i|0)==0|(i|0)==(r|0)?j:i;i=(r|0)==0;if(i){H=O;I=q;J=P;K=86;break}else{m=O;j=q;g=g<<(i&1^1);h=P}}}while(0);if((K|0)==86){if((I|0)==0&(J|0)==0){d=2<>>12&16;b=d>>>o;d=b>>>5&8;c=b>>>d;b=c>>>2&4;h=c>>>b;c=h>>>1&2;g=h>>>c;h=g>>>1&1;Q=k[65932+((d|o|b|c|h)+(g>>>h)<<2)>>2]|0}else Q=I;if(!Q){R=H;S=J}else{L=H;M=Q;N=J;K=90}}if((K|0)==90)while(1){K=0;h=(k[M+4>>2]&-8)-e|0;g=h>>>0>>0;c=g?h:L;h=g?M:N;g=k[M+16>>2]|0;if(g){L=c;M=g;N=h;K=90;continue}M=k[M+20>>2]|0;if(!M){R=c;S=h;break}else{L=c;N=h;K=90}}if((S|0)!=0?R>>>0<((k[16409]|0)-e|0)>>>0:0){p=k[16411]|0;if(S>>>0

      >>0)Ub();h=S+e|0;if(S>>>0>=h>>>0)Ub();c=k[S+24>>2]|0;g=k[S+12>>2]|0;do if((g|0)==(S|0)){b=S+20|0;o=k[b>>2]|0;if(!o){d=S+16|0;j=k[d>>2]|0;if(!j){T=0;break}else{U=j;V=d}}else{U=o;V=b}while(1){b=U+20|0;o=k[b>>2]|0;if(o){U=o;V=b;continue}b=U+16|0;o=k[b>>2]|0;if(!o){W=U;X=V;break}else{U=o;V=b}}if(X>>>0

      >>0)Ub();else{k[X>>2]=0;T=W;break}}else{b=k[S+8>>2]|0;if(b>>>0

      >>0)Ub();o=b+12|0;if((k[o>>2]|0)!=(S|0))Ub();d=g+8|0;if((k[d>>2]|0)==(S|0)){k[o>>2]=g;k[d>>2]=b;T=g;break}else Ub()}while(0);do if(c){g=k[S+28>>2]|0;p=65932+(g<<2)|0;if((S|0)==(k[p>>2]|0)){k[p>>2]=T;if(!T){k[16408]=k[16408]&~(1<>>0<(k[16411]|0)>>>0)Ub();g=c+16|0;if((k[g>>2]|0)==(S|0))k[g>>2]=T;else k[c+20>>2]=T;if(!T)break}g=k[16411]|0;if(T>>>0>>0)Ub();k[T+24>>2]=c;p=k[S+16>>2]|0;do if(p)if(p>>>0>>0)Ub();else{k[T+16>>2]=p;k[p+24>>2]=T;break}while(0);p=k[S+20>>2]|0;if(p)if(p>>>0<(k[16411]|0)>>>0)Ub();else{k[T+20>>2]=p;k[p+24>>2]=T;break}}while(0);do if(R>>>0>=16){k[S+4>>2]=e|3;k[h+4>>2]=R|1;k[h+R>>2]=R;c=R>>>3;if(R>>>0<256){p=65668+(c<<1<<2)|0;g=k[16407]|0;b=1<>2]|0;if(d>>>0<(k[16411]|0)>>>0)Ub();else{Y=c;Z=d}}else{k[16407]=g|b;Y=p+8|0;Z=p}k[Y>>2]=h;k[Z+12>>2]=h;k[h+8>>2]=Z;k[h+12>>2]=p;break}p=R>>>8;if(p)if(R>>>0>16777215)_=31;else{b=(p+1048320|0)>>>16&8;g=p<>>16&4;d=g<>>16&2;c=14-(p|b|g)+(d<>>15)|0;_=R>>>(c+7|0)&1|c<<1}else _=0;c=65932+(_<<2)|0;k[h+28>>2]=_;g=h+16|0;k[g+4>>2]=0;k[g>>2]=0;g=k[16408]|0;d=1<<_;if(!(g&d)){k[16408]=g|d;k[c>>2]=h;k[h+24>>2]=c;k[h+12>>2]=h;k[h+8>>2]=h;break}d=R<<((_|0)==31?0:25-(_>>>1)|0);g=k[c>>2]|0;while(1){if((k[g+4>>2]&-8|0)==(R|0)){$=g;K=148;break}c=g+16+(d>>>31<<2)|0;b=k[c>>2]|0;if(!b){aa=c;ba=g;K=145;break}else{d=d<<1;g=b}}if((K|0)==145)if(aa>>>0<(k[16411]|0)>>>0)Ub();else{k[aa>>2]=h;k[h+24>>2]=ba;k[h+12>>2]=h;k[h+8>>2]=h;break}else if((K|0)==148){g=$+8|0;d=k[g>>2]|0;b=k[16411]|0;if(d>>>0>=b>>>0&$>>>0>=b>>>0){k[d+12>>2]=h;k[g>>2]=h;k[h+8>>2]=d;k[h+12>>2]=$;k[h+24>>2]=0;break}else Ub()}}else{d=R+e|0;k[S+4>>2]=d|3;g=S+d+4|0;k[g>>2]=k[g>>2]|1}while(0);n=S+8|0;return n|0}else F=e}else F=e}else F=-1;while(0);S=k[16409]|0;if(S>>>0>=F>>>0){R=S-F|0;$=k[16412]|0;if(R>>>0>15){ba=$+F|0;k[16412]=ba;k[16409]=R;k[ba+4>>2]=R|1;k[ba+R>>2]=R;k[$+4>>2]=F|3}else{k[16409]=0;k[16412]=0;k[$+4>>2]=S|3;R=$+S+4|0;k[R>>2]=k[R>>2]|1}n=$+8|0;return n|0}$=k[16410]|0;if($>>>0>F>>>0){R=$-F|0;k[16410]=R;$=k[16413]|0;S=$+F|0;k[16413]=S;k[S+4>>2]=R|1;k[$+4>>2]=F|3;n=$+8|0;return n|0}do if(!(k[16525]|0)){$=Pb(30)|0;if(!($+-1&$)){k[16527]=$;k[16526]=$;k[16528]=-1;k[16529]=-1;k[16530]=0;k[16518]=0;$=(sd(0)|0)&-16^1431655768;k[16525]=$;break}else Ub()}while(0);$=F+48|0;R=k[16527]|0;S=F+47|0;ba=R+S|0;aa=0-R|0;R=ba&aa;if(R>>>0<=F>>>0){n=0;return n|0}_=k[16517]|0;if((_|0)!=0?(Z=k[16515]|0,Y=Z+R|0,Y>>>0<=Z>>>0|Y>>>0>_>>>0):0){n=0;return n|0}b:do if(!(k[16518]&4)){_=k[16413]|0;c:do if(_){Y=66076;while(1){Z=k[Y>>2]|0;if(Z>>>0<=_>>>0?(T=Y+4|0,(Z+(k[T>>2]|0)|0)>>>0>_>>>0):0){ca=Y;da=T;break}Y=k[Y+8>>2]|0;if(!Y){K=173;break c}}Y=ba-(k[16410]|0)&aa;if(Y>>>0<2147483647){T=Kb(Y|0)|0;if((T|0)==((k[ca>>2]|0)+(k[da>>2]|0)|0)){if((T|0)!=(-1|0)){ea=T;fa=Y;K=193;break b}}else{ga=T;ha=Y;K=183}}}else K=173;while(0);do if((K|0)==173?(_=Kb(0)|0,(_|0)!=(-1|0)):0){e=_;Y=k[16526]|0;T=Y+-1|0;if(!(T&e))ia=R;else ia=R-e+(T+e&0-Y)|0;Y=k[16515]|0;e=Y+ia|0;if(ia>>>0>F>>>0&ia>>>0<2147483647){T=k[16517]|0;if((T|0)!=0?e>>>0<=Y>>>0|e>>>0>T>>>0:0)break;T=Kb(ia|0)|0;if((T|0)==(_|0)){ea=_;fa=ia;K=193;break b}else{ga=T;ha=ia;K=183}}}while(0);d:do if((K|0)==183){T=0-ha|0;do if($>>>0>ha>>>0&(ha>>>0<2147483647&(ga|0)!=(-1|0))?(_=k[16527]|0,e=S-ha+_&0-_,e>>>0<2147483647):0)if((Kb(e|0)|0)==(-1|0)){Kb(T|0)|0;break d}else{ja=e+ha|0;break}else ja=ha;while(0);if((ga|0)!=(-1|0)){ea=ga;fa=ja;K=193;break b}}while(0);k[16518]=k[16518]|4;K=190}else K=190;while(0);if((((K|0)==190?R>>>0<2147483647:0)?(ja=Kb(R|0)|0,R=Kb(0)|0,ja>>>0>>0&((ja|0)!=(-1|0)&(R|0)!=(-1|0))):0)?(ga=R-ja|0,ga>>>0>(F+40|0)>>>0):0){ea=ja;fa=ga;K=193}if((K|0)==193){ga=(k[16515]|0)+fa|0;k[16515]=ga;if(ga>>>0>(k[16516]|0)>>>0)k[16516]=ga;ga=k[16413]|0;do if(ga){ja=66076;do{R=k[ja>>2]|0;ha=ja+4|0;S=k[ha>>2]|0;if((ea|0)==(R+S|0)){ka=R;la=ha;ma=S;na=ja;K=203;break}ja=k[ja+8>>2]|0}while((ja|0)!=0);if(((K|0)==203?(k[na+12>>2]&8|0)==0:0)?ga>>>0>>0&ga>>>0>=ka>>>0:0){k[la>>2]=ma+fa;ja=ga+8|0;S=(ja&7|0)==0?0:0-ja&7;ja=ga+S|0;ha=fa-S+(k[16410]|0)|0;k[16413]=ja;k[16410]=ha;k[ja+4>>2]=ha|1;k[ja+ha+4>>2]=40;k[16414]=k[16529];break}ha=k[16411]|0;if(ea>>>0>>0){k[16411]=ea;oa=ea}else oa=ha;ha=ea+fa|0;ja=66076;while(1){if((k[ja>>2]|0)==(ha|0)){pa=ja;qa=ja;K=211;break}ja=k[ja+8>>2]|0;if(!ja){ra=66076;break}}if((K|0)==211)if(!(k[qa+12>>2]&8)){k[pa>>2]=ea;ja=qa+4|0;k[ja>>2]=(k[ja>>2]|0)+fa;ja=ea+8|0;S=ea+((ja&7|0)==0?0:0-ja&7)|0;ja=ha+8|0;R=ha+((ja&7|0)==0?0:0-ja&7)|0;ja=S+F|0;$=R-S-F|0;k[S+4>>2]=F|3;do if((R|0)!=(ga|0)){if((R|0)==(k[16412]|0)){ia=(k[16409]|0)+$|0;k[16409]=ia;k[16412]=ja;k[ja+4>>2]=ia|1;k[ja+ia>>2]=ia;break}ia=k[R+4>>2]|0;if((ia&3|0)==1){da=ia&-8;ca=ia>>>3;e:do if(ia>>>0>=256){aa=k[R+24>>2]|0;ba=k[R+12>>2]|0;do if((ba|0)==(R|0)){T=R+16|0;e=T+4|0;_=k[e>>2]|0;if(!_){Y=k[T>>2]|0;if(!Y){sa=0;break}else{ta=Y;ua=T}}else{ta=_;ua=e}while(1){e=ta+20|0;_=k[e>>2]|0;if(_){ta=_;ua=e;continue}e=ta+16|0;_=k[e>>2]|0;if(!_){va=ta;wa=ua;break}else{ta=_;ua=e}}if(wa>>>0>>0)Ub();else{k[wa>>2]=0;sa=va;break}}else{e=k[R+8>>2]|0;if(e>>>0>>0)Ub();_=e+12|0;if((k[_>>2]|0)!=(R|0))Ub();T=ba+8|0;if((k[T>>2]|0)==(R|0)){k[_>>2]=ba;k[T>>2]=e;sa=ba;break}else Ub()}while(0);if(!aa)break;ba=k[R+28>>2]|0;e=65932+(ba<<2)|0;do if((R|0)!=(k[e>>2]|0)){if(aa>>>0<(k[16411]|0)>>>0)Ub();T=aa+16|0;if((k[T>>2]|0)==(R|0))k[T>>2]=sa;else k[aa+20>>2]=sa;if(!sa)break e}else{k[e>>2]=sa;if(sa)break;k[16408]=k[16408]&~(1<>>0>>0)Ub();k[sa+24>>2]=aa;e=R+16|0;T=k[e>>2]|0;do if(T)if(T>>>0>>0)Ub();else{k[sa+16>>2]=T;k[T+24>>2]=sa;break}while(0);T=k[e+4>>2]|0;if(!T)break;if(T>>>0<(k[16411]|0)>>>0)Ub();else{k[sa+20>>2]=T;k[T+24>>2]=sa;break}}else{T=k[R+8>>2]|0;ba=k[R+12>>2]|0;aa=65668+(ca<<1<<2)|0;do if((T|0)!=(aa|0)){if(T>>>0>>0)Ub();if((k[T+12>>2]|0)==(R|0))break;Ub()}while(0);if((ba|0)==(T|0)){k[16407]=k[16407]&~(1<>>0>>0)Ub();e=ba+8|0;if((k[e>>2]|0)==(R|0)){xa=e;break}Ub()}while(0);k[T+12>>2]=ba;k[xa>>2]=T}while(0);ya=R+da|0;za=da+$|0}else{ya=R;za=$}ca=ya+4|0;k[ca>>2]=k[ca>>2]&-2;k[ja+4>>2]=za|1;k[ja+za>>2]=za;ca=za>>>3;if(za>>>0<256){ia=65668+(ca<<1<<2)|0;aa=k[16407]|0;e=1<>2]|0;if(_>>>0>=(k[16411]|0)>>>0){Aa=ca;Ba=_;break}Ub()}while(0);k[Aa>>2]=ja;k[Ba+12>>2]=ja;k[ja+8>>2]=Ba;k[ja+12>>2]=ia;break}e=za>>>8;do if(!e)Ca=0;else{if(za>>>0>16777215){Ca=31;break}aa=(e+1048320|0)>>>16&8;da=e<>>16&4;ca=da<<_;da=(ca+245760|0)>>>16&2;Y=14-(_|aa|da)+(ca<>>15)|0;Ca=za>>>(Y+7|0)&1|Y<<1}while(0);e=65932+(Ca<<2)|0;k[ja+28>>2]=Ca;ia=ja+16|0;k[ia+4>>2]=0;k[ia>>2]=0;ia=k[16408]|0;Y=1<>2]=ja;k[ja+24>>2]=e;k[ja+12>>2]=ja;k[ja+8>>2]=ja;break}Y=za<<((Ca|0)==31?0:25-(Ca>>>1)|0);ia=k[e>>2]|0;while(1){if((k[ia+4>>2]&-8|0)==(za|0)){Da=ia;K=281;break}e=ia+16+(Y>>>31<<2)|0;da=k[e>>2]|0;if(!da){Ea=e;Fa=ia;K=278;break}else{Y=Y<<1;ia=da}}if((K|0)==278)if(Ea>>>0<(k[16411]|0)>>>0)Ub();else{k[Ea>>2]=ja;k[ja+24>>2]=Fa;k[ja+12>>2]=ja;k[ja+8>>2]=ja;break}else if((K|0)==281){ia=Da+8|0;Y=k[ia>>2]|0;da=k[16411]|0;if(Y>>>0>=da>>>0&Da>>>0>=da>>>0){k[Y+12>>2]=ja;k[ia>>2]=ja;k[ja+8>>2]=Y;k[ja+12>>2]=Da;k[ja+24>>2]=0;break}else Ub()}}else{Y=(k[16410]|0)+$|0;k[16410]=Y;k[16413]=ja;k[ja+4>>2]=Y|1}while(0);n=S+8|0;return n|0}else ra=66076;while(1){ja=k[ra>>2]|0;if(ja>>>0<=ga>>>0?($=ja+(k[ra+4>>2]|0)|0,$>>>0>ga>>>0):0){Ga=$;break}ra=k[ra+8>>2]|0}S=Ga+-47|0;$=S+8|0;ja=S+(($&7|0)==0?0:0-$&7)|0;$=ga+16|0;S=ja>>>0<$>>>0?ga:ja;ja=S+8|0;R=ea+8|0;ha=(R&7|0)==0?0:0-R&7;R=ea+ha|0;Y=fa+-40-ha|0;k[16413]=R;k[16410]=Y;k[R+4>>2]=Y|1;k[R+Y+4>>2]=40;k[16414]=k[16529];Y=S+4|0;k[Y>>2]=27;k[ja>>2]=k[16519];k[ja+4>>2]=k[16520];k[ja+8>>2]=k[16521];k[ja+12>>2]=k[16522];k[16519]=ea;k[16520]=fa;k[16522]=0;k[16521]=ja;ja=S+24|0;do{ja=ja+4|0;k[ja>>2]=7}while((ja+4|0)>>>0>>0);if((S|0)!=(ga|0)){ja=S-ga|0;k[Y>>2]=k[Y>>2]&-2;k[ga+4>>2]=ja|1;k[S>>2]=ja;R=ja>>>3;if(ja>>>0<256){ha=65668+(R<<1<<2)|0;ia=k[16407]|0;da=1<>2]|0;if(e>>>0<(k[16411]|0)>>>0)Ub();else{Ha=R;Ia=e}}else{k[16407]=ia|da;Ha=ha+8|0;Ia=ha}k[Ha>>2]=ga;k[Ia+12>>2]=ga;k[ga+8>>2]=Ia;k[ga+12>>2]=ha;break}ha=ja>>>8;if(ha)if(ja>>>0>16777215)Ja=31;else{da=(ha+1048320|0)>>>16&8;ia=ha<>>16&4;e=ia<>>16&2;R=14-(ha|da|ia)+(e<>>15)|0;Ja=ja>>>(R+7|0)&1|R<<1}else Ja=0;R=65932+(Ja<<2)|0;k[ga+28>>2]=Ja;k[ga+20>>2]=0;k[$>>2]=0;ia=k[16408]|0;e=1<>2]=ga;k[ga+24>>2]=R;k[ga+12>>2]=ga;k[ga+8>>2]=ga;break}e=ja<<((Ja|0)==31?0:25-(Ja>>>1)|0);ia=k[R>>2]|0;while(1){if((k[ia+4>>2]&-8|0)==(ja|0)){Ka=ia;K=307;break}R=ia+16+(e>>>31<<2)|0;da=k[R>>2]|0;if(!da){La=R;Ma=ia;K=304;break}else{e=e<<1;ia=da}}if((K|0)==304)if(La>>>0<(k[16411]|0)>>>0)Ub();else{k[La>>2]=ga;k[ga+24>>2]=Ma;k[ga+12>>2]=ga;k[ga+8>>2]=ga;break}else if((K|0)==307){ia=Ka+8|0;e=k[ia>>2]|0;ja=k[16411]|0;if(e>>>0>=ja>>>0&Ka>>>0>=ja>>>0){k[e+12>>2]=ga;k[ia>>2]=ga;k[ga+8>>2]=e;k[ga+12>>2]=Ka;k[ga+24>>2]=0;break}else Ub()}}}else{e=k[16411]|0;if((e|0)==0|ea>>>0>>0)k[16411]=ea;k[16519]=ea;k[16520]=fa;k[16522]=0;k[16416]=k[16525];k[16415]=-1;e=0;do{ia=65668+(e<<1<<2)|0;k[ia+12>>2]=ia;k[ia+8>>2]=ia;e=e+1|0}while((e|0)!=32);e=ea+8|0;ia=(e&7|0)==0?0:0-e&7;e=ea+ia|0;ja=fa+-40-ia|0;k[16413]=e;k[16410]=ja;k[e+4>>2]=ja|1;k[e+ja+4>>2]=40;k[16414]=k[16529]}while(0);fa=k[16410]|0;if(fa>>>0>F>>>0){ea=fa-F|0;k[16410]=ea;fa=k[16413]|0;ga=fa+F|0;k[16413]=ga;k[ga+4>>2]=ea|1;k[fa+4>>2]=F|3;n=fa+8|0;return n|0}}fa=HSa()|0;k[fa>>2]=12;n=0;return n|0}function yYa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;if(!a)return;b=a+-8|0;c=k[16411]|0;if(b>>>0>>0)Ub();d=k[a+-4>>2]|0;a=d&3;if((a|0)==1)Ub();e=d&-8;f=b+e|0;do if(!(d&1)){g=k[b>>2]|0;if(!a)return;h=b+(0-g)|0;i=g+e|0;if(h>>>0>>0)Ub();if((h|0)==(k[16412]|0)){j=f+4|0;l=k[j>>2]|0;if((l&3|0)!=3){m=h;n=i;break}k[16409]=i;k[j>>2]=l&-2;k[h+4>>2]=i|1;k[h+i>>2]=i;return}l=g>>>3;if(g>>>0<256){g=k[h+8>>2]|0;j=k[h+12>>2]|0;o=65668+(l<<1<<2)|0;if((g|0)!=(o|0)){if(g>>>0>>0)Ub();if((k[g+12>>2]|0)!=(h|0))Ub()}if((j|0)==(g|0)){k[16407]=k[16407]&~(1<>>0>>0)Ub();o=j+8|0;if((k[o>>2]|0)==(h|0))p=o;else Ub()}else p=j+8|0;k[g+12>>2]=j;k[p>>2]=g;m=h;n=i;break}g=k[h+24>>2]|0;j=k[h+12>>2]|0;do if((j|0)==(h|0)){o=h+16|0;l=o+4|0;q=k[l>>2]|0;if(!q){r=k[o>>2]|0;if(!r){s=0;break}else{t=r;u=o}}else{t=q;u=l}while(1){l=t+20|0;q=k[l>>2]|0;if(q){t=q;u=l;continue}l=t+16|0;q=k[l>>2]|0;if(!q){v=t;w=u;break}else{t=q;u=l}}if(w>>>0>>0)Ub();else{k[w>>2]=0;s=v;break}}else{l=k[h+8>>2]|0;if(l>>>0>>0)Ub();q=l+12|0;if((k[q>>2]|0)!=(h|0))Ub();o=j+8|0;if((k[o>>2]|0)==(h|0)){k[q>>2]=j;k[o>>2]=l;s=j;break}else Ub()}while(0);if(g){j=k[h+28>>2]|0;l=65932+(j<<2)|0;if((h|0)==(k[l>>2]|0)){k[l>>2]=s;if(!s){k[16408]=k[16408]&~(1<>>0<(k[16411]|0)>>>0)Ub();j=g+16|0;if((k[j>>2]|0)==(h|0))k[j>>2]=s;else k[g+20>>2]=s;if(!s){m=h;n=i;break}}j=k[16411]|0;if(s>>>0>>0)Ub();k[s+24>>2]=g;l=h+16|0;o=k[l>>2]|0;do if(o)if(o>>>0>>0)Ub();else{k[s+16>>2]=o;k[o+24>>2]=s;break}while(0);o=k[l+4>>2]|0;if(o)if(o>>>0<(k[16411]|0)>>>0)Ub();else{k[s+20>>2]=o;k[o+24>>2]=s;m=h;n=i;break}else{m=h;n=i}}else{m=h;n=i}}else{m=b;n=e}while(0);if(m>>>0>=f>>>0)Ub();e=f+4|0;b=k[e>>2]|0;if(!(b&1))Ub();if(!(b&2)){if((f|0)==(k[16413]|0)){s=(k[16410]|0)+n|0;k[16410]=s;k[16413]=m;k[m+4>>2]=s|1;if((m|0)!=(k[16412]|0))return;k[16412]=0;k[16409]=0;return}if((f|0)==(k[16412]|0)){s=(k[16409]|0)+n|0;k[16409]=s;k[16412]=m;k[m+4>>2]=s|1;k[m+s>>2]=s;return}s=(b&-8)+n|0;c=b>>>3;do if(b>>>0>=256){v=k[f+24>>2]|0;w=k[f+12>>2]|0;do if((w|0)==(f|0)){u=f+16|0;t=u+4|0;p=k[t>>2]|0;if(!p){a=k[u>>2]|0;if(!a){x=0;break}else{y=a;z=u}}else{y=p;z=t}while(1){t=y+20|0;p=k[t>>2]|0;if(p){y=p;z=t;continue}t=y+16|0;p=k[t>>2]|0;if(!p){A=y;B=z;break}else{y=p;z=t}}if(B>>>0<(k[16411]|0)>>>0)Ub();else{k[B>>2]=0;x=A;break}}else{t=k[f+8>>2]|0;if(t>>>0<(k[16411]|0)>>>0)Ub();p=t+12|0;if((k[p>>2]|0)!=(f|0))Ub();u=w+8|0;if((k[u>>2]|0)==(f|0)){k[p>>2]=w;k[u>>2]=t;x=w;break}else Ub()}while(0);if(v){w=k[f+28>>2]|0;i=65932+(w<<2)|0;if((f|0)==(k[i>>2]|0)){k[i>>2]=x;if(!x){k[16408]=k[16408]&~(1<>>0<(k[16411]|0)>>>0)Ub();w=v+16|0;if((k[w>>2]|0)==(f|0))k[w>>2]=x;else k[v+20>>2]=x;if(!x)break}w=k[16411]|0;if(x>>>0>>0)Ub();k[x+24>>2]=v;i=f+16|0;h=k[i>>2]|0;do if(h)if(h>>>0>>0)Ub();else{k[x+16>>2]=h;k[h+24>>2]=x;break}while(0);h=k[i+4>>2]|0;if(h)if(h>>>0<(k[16411]|0)>>>0)Ub();else{k[x+20>>2]=h;k[h+24>>2]=x;break}}}else{h=k[f+8>>2]|0;w=k[f+12>>2]|0;v=65668+(c<<1<<2)|0;if((h|0)!=(v|0)){if(h>>>0<(k[16411]|0)>>>0)Ub();if((k[h+12>>2]|0)!=(f|0))Ub()}if((w|0)==(h|0)){k[16407]=k[16407]&~(1<>>0<(k[16411]|0)>>>0)Ub();v=w+8|0;if((k[v>>2]|0)==(f|0))C=v;else Ub()}else C=w+8|0;k[h+12>>2]=w;k[C>>2]=h}while(0);k[m+4>>2]=s|1;k[m+s>>2]=s;if((m|0)==(k[16412]|0)){k[16409]=s;return}else D=s}else{k[e>>2]=b&-2;k[m+4>>2]=n|1;k[m+n>>2]=n;D=n}n=D>>>3;if(D>>>0<256){b=65668+(n<<1<<2)|0;e=k[16407]|0;s=1<>2]|0;if(C>>>0<(k[16411]|0)>>>0)Ub();else{E=n;F=C}}else{k[16407]=e|s;E=b+8|0;F=b}k[E>>2]=m;k[F+12>>2]=m;k[m+8>>2]=F;k[m+12>>2]=b;return}b=D>>>8;if(b)if(D>>>0>16777215)G=31;else{F=(b+1048320|0)>>>16&8;E=b<>>16&4;s=E<>>16&2;e=14-(b|F|E)+(s<>>15)|0;G=D>>>(e+7|0)&1|e<<1}else G=0;e=65932+(G<<2)|0;k[m+28>>2]=G;k[m+20>>2]=0;k[m+16>>2]=0;E=k[16408]|0;s=1<>>1)|0);b=k[e>>2]|0;while(1){if((k[b+4>>2]&-8|0)==(D|0)){H=b;I=130;break}C=b+16+(F>>>31<<2)|0;n=k[C>>2]|0;if(!n){J=C;K=b;I=127;break}else{F=F<<1;b=n}}if((I|0)==127)if(J>>>0<(k[16411]|0)>>>0)Ub();else{k[J>>2]=m;k[m+24>>2]=K;k[m+12>>2]=m;k[m+8>>2]=m;break}else if((I|0)==130){b=H+8|0;F=k[b>>2]|0;i=k[16411]|0;if(F>>>0>=i>>>0&H>>>0>=i>>>0){k[F+12>>2]=m;k[b>>2]=m;k[m+8>>2]=F;k[m+12>>2]=H;k[m+24>>2]=0;break}else Ub()}}else{k[16408]=E|s;k[e>>2]=m;k[m+24>>2]=e;k[m+12>>2]=m;k[m+8>>2]=m}while(0);m=(k[16415]|0)+-1|0;k[16415]=m;if(!m)L=66084;else return;while(1){m=k[L>>2]|0;if(!m)break;else L=m+8|0}k[16415]=-1;return}function zYa(a,b){a=a|0;b=b|0;var c=0,d=0;if(a){c=ia(b,a)|0;if((b|a)>>>0>65535)d=((c>>>0)/(a>>>0)|0|0)==(b|0)?c:-1;else d=c}else d=0;c=xYa(d)|0;if(!c)return c|0;if(!(k[c+-4>>2]&3))return c|0;Fyb(c|0,0,d|0)|0;return c|0}function AYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!a){c=xYa(b)|0;return c|0}if(b>>>0>4294967231){d=HSa()|0;k[d>>2]=12;c=0;return c|0}d=SYa(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d){c=d+8|0;return c|0}d=xYa(b)|0;if(!d){c=0;return c|0}e=k[a+-4>>2]|0;f=(e&-8)-((e&3|0)==0?8:4)|0;Dyb(d|0,a|0,(f>>>0>>0?f:b)|0)|0;yYa(a);c=d;return c|0}function BYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!a){c=0;return c|0}if(b>>>0>4294967231){d=HSa()|0;k[d>>2]=12;c=0;return c|0}else{d=a+-8|0;e=(SYa(d,b>>>0<11?16:b+11&-8)|0)==(d|0);c=e?a:0;return c|0}return 0}function CYa(a,b){a=a|0;b=b|0;var c=0;if(a>>>0<9){c=xYa(b)|0;return c|0}else{c=TYa(a,b)|0;return c|0}return 0}function DYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;do if((b|0)!=8){d=b>>>2;if((b&3|0)!=0|(d|0)==0){e=22;return e|0}if(d+1073741823&d){e=22;return e|0}if((-64-b|0)>>>0>>0){e=12;return e|0}else{f=TYa(b>>>0<16?16:b,c)|0;break}}else f=xYa(c)|0;while(0);if(!f){e=12;return e|0}k[a>>2]=f;e=0;return e|0}function EYa(a){a=a|0;var b=0,c=0,d=0;if(k[16525]|0){b=k[16526]|0;c=CYa(b,a)|0;return c|0}d=Pb(30)|0;if(d+-1&d)Ub();k[16527]=d;k[16526]=d;k[16528]=-1;k[16529]=-1;k[16530]=0;k[16518]=0;d=(sd(0)|0)&-16^1431655768;k[16525]=d;b=k[16526]|0;c=CYa(b,a)|0;return c|0}function FYa(a){a=a|0;var b=0;do if(!(k[16525]|0)){b=Pb(30)|0;if(!(b+-1&b)){k[16527]=b;k[16526]=b;k[16528]=-1;k[16529]=-1;k[16530]=0;k[16518]=0;b=(sd(0)|0)&-16^1431655768;k[16525]=b;break}else Ub()}while(0);b=k[16526]|0;return CYa(b,a+-1+b&0-b)|0}function GYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=b;b=UYa(a,e,3,c)|0;r=d;return b|0}function HYa(a,b,c){a=a|0;b=b|0;c=c|0;return UYa(a,b,0,c)|0}function IYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=a+(b<<2)|0;if(!b)return 0;else d=a;a:while(1){a=k[d>>2]|0;do if(!a)e=d+4|0;else{b=a+-8|0;f=a+-4|0;g=k[f>>2]|0;h=g&-8;k[d>>2]=0;if(b>>>0<(k[16411]|0)>>>0|(g&3|0)==1){i=9;break a}j=d+4|0;l=b+h|0;if((j|0)!=(c|0)?(k[j>>2]|0)==(l+8|0):0){m=(k[l+4>>2]&-8)+h|0;k[f>>2]=g&1|m|2;g=b+m+4|0;k[g>>2]=k[g>>2]|1;k[j>>2]=a;e=j;break}VYa(b,h);e=j}while(0);if((e|0)==(c|0)){i=11;break}else d=e}if((i|0)==9)Ub();else if((i|0)==11)return 0;return 0}function JYa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;do if(!(k[16525]|0)){b=Pb(30)|0;if(!(b+-1&b)){k[16527]=b;k[16526]=b;k[16528]=-1;k[16529]=-1;k[16530]=0;k[16518]=0;b=(sd(0)|0)&-16^1431655768;k[16525]=b;break}else Ub()}while(0);if(a>>>0>=4294967232){c=0;d=c&1;return d|0}b=k[16413]|0;if(!b){c=0;d=c&1;return d|0}e=k[16410]|0;if(e>>>0>(a+40|0)>>>0){f=k[16527]|0;g=((-41-a+e+f|0)>>>0)/(f>>>0)|0;e=66076;while(1){a=k[e>>2]|0;if(a>>>0<=b>>>0?(h=e+4|0,(a+(k[h>>2]|0)|0)>>>0>b>>>0):0){i=e;j=h;l=e;break}e=k[e+8>>2]|0}e=ia(g+-1|0,f)|0;if(((k[l+12>>2]&8|0)==0?(l=Kb(0)|0,(l|0)==((k[i>>2]|0)+(k[j>>2]|0)|0)):0)?(i=Kb(0-(e>>>0>2147483646?-2147483648-f|0:e)|0)|0,e=Kb(0)|0,f=l-e|0,!((i|0)==(-1|0)|l>>>0<=e>>>0)):0){k[j>>2]=(k[j>>2]|0)-f;k[16515]=(k[16515]|0)-f;j=k[16413]|0;i=j+8|0;g=(i&7|0)==0?0:0-i&7;i=j+g|0;j=(k[16410]|0)-f-g|0;k[16413]=i;k[16410]=j;k[i+4>>2]=j|1;k[i+j+4>>2]=40;k[16414]=k[16529];c=(l|0)!=(e|0);d=c&1;return d|0}}if((k[16410]|0)>>>0<=(k[16414]|0)>>>0){c=0;d=c&1;return d|0}k[16414]=-1;c=0;d=c&1;return d|0}function KYa(){return k[16515]|0}function LYa(){return k[16516]|0}function MYa(){var a=0;a=k[16517]|0;return ((a|0)==0?-1:a)|0}function NYa(a){a=a|0;var b=0,c=0;if((a|0)==-1)b=0;else{c=k[16527]|0;b=a+-1+c&0-c}k[16517]=b;return b|0}function OYa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;do if(!(k[16525]|0)){b=Pb(30)|0;if(!(b+-1&b)){k[16527]=b;k[16526]=b;k[16528]=-1;k[16529]=-1;k[16530]=0;k[16518]=0;b=(sd(0)|0)&-16^1431655768;k[16525]=b;break}else Ub()}while(0);b=k[16413]|0;if(!b){c=0;d=0;e=0;f=0;g=0;h=0;i=0}else{j=k[16410]|0;l=j+40|0;m=l;n=1;o=66076;p=l;while(1){l=k[o>>2]|0;q=l+8|0;r=l+(k[o+4>>2]|0)|0;s=m;t=n;u=l+((q&7|0)==0?0:0-q&7)|0;q=p;while(1){if(u>>>0>=r>>>0|(u|0)==(b|0)){v=s;w=t;x=q;break}y=k[u+4>>2]|0;if((y|0)==7){v=s;w=t;x=q;break}z=y&-8;A=z+q|0;B=(y&3|0)==1;y=(B&1)+t|0;C=(B?z:0)+s|0;u=u+z|0;if(u>>>0>>0){v=C;w=y;x=A;break}else{s=C;t=y;q=A}}o=k[o+8>>2]|0;if(!o){D=v;E=w;F=x;break}else{m=v;n=w;p=x}}x=k[16515]|0;c=F;d=j;e=E;f=x-F|0;g=k[16516]|0;h=x-D|0;i=D}k[a>>2]=c;k[a+4>>2]=e;e=a+8|0;k[e>>2]=0;k[e+4>>2]=0;k[a+16>>2]=f;k[a+20>>2]=g;k[a+24>>2]=0;k[a+28>>2]=h;k[a+32>>2]=i;k[a+36>>2]=d;return}function PYa(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;a=r;r=r+32|0;b=a+16|0;c=a+8|0;d=a;do if(!(k[16525]|0)){e=Pb(30)|0;if(!(e+-1&e)){k[16527]=e;k[16526]=e;k[16528]=-1;k[16529]=-1;k[16530]=0;k[16518]=0;e=(sd(0)|0)&-16^1431655768;k[16525]=e;break}else Ub()}while(0);e=k[16413]|0;if(!e){f=0;g=0;h=0;i=k[12025]|0;k[d>>2]=g;vQa(i,324341,d)|0;k[c>>2]=f;vQa(i,324367,c)|0;k[b>>2]=h;vQa(i,324393,b)|0;r=a;return}j=k[16516]|0;l=k[16515]|0;m=66076;n=l+-40-(k[16410]|0)|0;while(1){o=k[m>>2]|0;p=o+8|0;q=o+(k[m+4>>2]|0)|0;s=o+((p&7|0)==0?0:0-p&7)|0;p=n;while(1){if(s>>>0>=q>>>0|(s|0)==(e|0)){t=p;break}u=k[s+4>>2]|0;if((u|0)==7){t=p;break}v=u&-8;w=p-((u&3|0)==1?v:0)|0;s=s+v|0;if(s>>>0>>0){t=w;break}else p=w}m=k[m+8>>2]|0;if(!m){f=l;g=j;h=t;break}else n=t}i=k[12025]|0;k[d>>2]=g;vQa(i,324341,d)|0;k[c>>2]=f;vQa(i,324367,c)|0;k[b>>2]=h;vQa(i,324393,b)|0;r=a;return}function QYa(a,b){a=a|0;b=b|0;var c=0,d=0;do if(!(k[16525]|0)){c=Pb(30)|0;if(!(c+-1&c)){k[16527]=c;k[16526]=c;k[16528]=-1;k[16529]=-1;k[16530]=0;k[16518]=0;c=(sd(0)|0)&-16^1431655768;k[16525]=c;break}else Ub()}while(0);switch(a|0){case -1:{k[16529]=b;d=1;return d|0}case -2:{if((k[16526]|0)>>>0>b>>>0){d=0;return d|0}if(b+-1&b){d=0;return d|0}k[16527]=b;d=1;return d|0}case -3:{k[16528]=b;d=1;return d|0}default:{d=0;return d|0}}return 0}function RYa(a){a=a|0;var b=0,c=0;if(!a){b=0;return b|0}c=k[a+-4>>2]|0;a=c&3;if((a|0)==1){b=0;return b|0}b=(c&-8)-((a|0)==0?8:4)|0;return b|0}function SYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;c=a+4|0;d=k[c>>2]|0;e=d&-8;f=a+e|0;g=k[16411]|0;h=d&3;if(!((h|0)!=1&a>>>0>=g>>>0&a>>>0>>0))Ub();i=k[f+4>>2]|0;if(!(i&1))Ub();if(!h){if(b>>>0<256){j=0;return j|0}if(e>>>0>=(b+4|0)>>>0?(e-b|0)>>>0<=k[16527]<<1>>>0:0){j=a;return j|0}j=0;return j|0}if(e>>>0>=b>>>0){h=e-b|0;if(h>>>0<=15){j=a;return j|0}l=a+b|0;k[c>>2]=d&1|b|2;k[l+4>>2]=h|3;m=l+h+4|0;k[m>>2]=k[m>>2]|1;VYa(l,h);j=a;return j|0}if((f|0)==(k[16413]|0)){h=(k[16410]|0)+e|0;if(h>>>0<=b>>>0){j=0;return j|0}l=h-b|0;h=a+b|0;k[c>>2]=d&1|b|2;k[h+4>>2]=l|1;k[16413]=h;k[16410]=l;j=a;return j|0}if((f|0)==(k[16412]|0)){l=(k[16409]|0)+e|0;if(l>>>0>>0){j=0;return j|0}h=l-b|0;if(h>>>0>15){m=a+b|0;n=m+h|0;k[c>>2]=d&1|b|2;k[m+4>>2]=h|1;k[n>>2]=h;o=n+4|0;k[o>>2]=k[o>>2]&-2;p=m;q=h}else{k[c>>2]=d&1|l|2;h=a+l+4|0;k[h>>2]=k[h>>2]|1;p=0;q=0}k[16409]=q;k[16412]=p;j=a;return j|0}if(i&2){j=0;return j|0}p=(i&-8)+e|0;if(p>>>0>>0){j=0;return j|0}e=p-b|0;q=i>>>3;do if(i>>>0>=256){h=k[f+24>>2]|0;l=k[f+12>>2]|0;do if((l|0)==(f|0)){m=f+16|0;o=m+4|0;n=k[o>>2]|0;if(!n){r=k[m>>2]|0;if(!r){s=0;break}else{t=r;u=m}}else{t=n;u=o}while(1){o=t+20|0;n=k[o>>2]|0;if(n){t=n;u=o;continue}o=t+16|0;n=k[o>>2]|0;if(!n){v=t;w=u;break}else{t=n;u=o}}if(w>>>0>>0)Ub();else{k[w>>2]=0;s=v;break}}else{o=k[f+8>>2]|0;if(o>>>0>>0)Ub();n=o+12|0;if((k[n>>2]|0)!=(f|0))Ub();m=l+8|0;if((k[m>>2]|0)==(f|0)){k[n>>2]=l;k[m>>2]=o;s=l;break}else Ub()}while(0);if(h){l=k[f+28>>2]|0;o=65932+(l<<2)|0;if((f|0)==(k[o>>2]|0)){k[o>>2]=s;if(!s){k[16408]=k[16408]&~(1<>>0<(k[16411]|0)>>>0)Ub();l=h+16|0;if((k[l>>2]|0)==(f|0))k[l>>2]=s;else k[h+20>>2]=s;if(!s)break}l=k[16411]|0;if(s>>>0>>0)Ub();k[s+24>>2]=h;o=f+16|0;m=k[o>>2]|0;do if(m)if(m>>>0>>0)Ub();else{k[s+16>>2]=m;k[m+24>>2]=s;break}while(0);m=k[o+4>>2]|0;if(m)if(m>>>0<(k[16411]|0)>>>0)Ub();else{k[s+20>>2]=m;k[m+24>>2]=s;break}}}else{m=k[f+8>>2]|0;l=k[f+12>>2]|0;h=65668+(q<<1<<2)|0;if((m|0)!=(h|0)){if(m>>>0>>0)Ub();if((k[m+12>>2]|0)!=(f|0))Ub()}if((l|0)==(m|0)){k[16407]=k[16407]&~(1<>>0>>0)Ub();h=l+8|0;if((k[h>>2]|0)==(f|0))x=h;else Ub()}else x=l+8|0;k[m+12>>2]=l;k[x>>2]=m}while(0);if(e>>>0<16){k[c>>2]=p|d&1|2;x=a+p+4|0;k[x>>2]=k[x>>2]|1;j=a;return j|0}else{x=a+b|0;k[c>>2]=d&1|b|2;k[x+4>>2]=e|3;b=x+e+4|0;k[b>>2]=k[b>>2]|1;VYa(x,e);j=a;return j|0}return 0}function TYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=a>>>0<16?16:a;if(!(c+-1&c))d=c;else{a=16;while(1)if(a>>>0>>0)a=a<<1;else{d=a;break}}if((-64-d|0)>>>0<=b>>>0){a=HSa()|0;k[a>>2]=12;e=0;return e|0}a=b>>>0<11?16:b+11&-8;b=xYa(a+12+d|0)|0;if(!b){e=0;return e|0}c=b+-8|0;do if(b&d+-1){f=(b+d+-1&0-d)+-8|0;g=c;h=(f-g|0)>>>0>15?f:f+d|0;f=h-g|0;g=b+-4|0;i=k[g>>2]|0;j=(i&-8)-f|0;if(!(i&3)){k[h>>2]=(k[c>>2]|0)+f;k[h+4>>2]=j;l=h;break}else{i=h+4|0;k[i>>2]=j|k[i>>2]&1|2;m=h+j+4|0;k[m>>2]=k[m>>2]|1;k[g>>2]=f|k[g>>2]&1|2;k[i>>2]=k[i>>2]|1;VYa(c,f);l=h;break}}else l=c;while(0);c=l+4|0;b=k[c>>2]|0;if((b&3|0)!=0?(d=b&-8,d>>>0>(a+16|0)>>>0):0){h=d-a|0;d=l+a|0;k[c>>2]=a|b&1|2;k[d+4>>2]=h|3;b=d+h+4|0;k[b>>2]=k[b>>2]|1;VYa(d,h)}e=l+8|0;return e|0}function UYa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;do if(!(k[16525]|0)){e=Pb(30)|0;if(!(e+-1&e)){k[16527]=e;k[16526]=e;k[16528]=-1;k[16529]=-1;k[16530]=0;k[16518]=0;e=(sd(0)|0)&-16^1431655768;k[16525]=e;break}else Ub()}while(0);e=(a|0)==0;do if(d)if(e){f=d;return f|0}else{g=0;h=d}else{if(!e){i=a<<2;g=i>>>0<11?16:i+11&-8;h=0;break}f=xYa(0)|0;return f|0}while(0);if(!(c&1)){e=0;d=0;while(1){i=k[b+(d<<2)>>2]|0;j=(i>>>0<11?16:i+11&-8)+e|0;d=d+1|0;if((d|0)==(a|0)){l=j;m=0;break}else e=j}}else{e=k[b>>2]|0;d=e>>>0<11?16:e+11&-8;l=ia(d,a)|0;m=d}d=xYa(g+-4+l|0)|0;if(!d){f=0;return f|0}e=d+-8|0;j=k[d+-4>>2]&-8;if(c&2)Fyb(d|0,0,-4-g+j|0)|0;if(!h){g=e+l|0;k[g+4>>2]=j-l|3;n=g+8|0;o=l}else{n=h;o=j}k[n>>2]=d;j=a+-1|0;a:do if(!j){p=e;q=o}else{if(!m){h=0;l=e;g=o;while(1){c=k[b+(h<<2)>>2]|0;i=c>>>0<11?16:c+11&-8;c=g-i|0;k[l+4>>2]=i|3;r=l+i|0;h=h+1|0;k[n+(h<<2)>>2]=r+8;if((h|0)==(j|0)){p=r;q=c;break a}else{l=r;g=c}}}g=(ia(m,j)|0)+-8|0;l=ia(m,1-a|0)|0;h=m|3;c=0;r=e;do{k[r+4>>2]=h;r=r+m|0;c=c+1|0;k[n+(c<<2)>>2]=r+8}while((c|0)!=(j|0));p=d+g|0;q=o+l|0}while(0);k[p+4>>2]=q|3;f=n;return f|0}function VYa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=a+b|0;d=k[a+4>>2]|0;do if(!(d&1)){e=k[a>>2]|0;if(!(d&3))return;f=a+(0-e)|0;g=e+b|0;h=k[16411]|0;if(f>>>0>>0)Ub();if((f|0)==(k[16412]|0)){i=c+4|0;j=k[i>>2]|0;if((j&3|0)!=3){l=f;m=g;break}k[16409]=g;k[i>>2]=j&-2;k[f+4>>2]=g|1;k[f+g>>2]=g;return}j=e>>>3;if(e>>>0<256){e=k[f+8>>2]|0;i=k[f+12>>2]|0;n=65668+(j<<1<<2)|0;if((e|0)!=(n|0)){if(e>>>0>>0)Ub();if((k[e+12>>2]|0)!=(f|0))Ub()}if((i|0)==(e|0)){k[16407]=k[16407]&~(1<>>0>>0)Ub();n=i+8|0;if((k[n>>2]|0)==(f|0))o=n;else Ub()}else o=i+8|0;k[e+12>>2]=i;k[o>>2]=e;l=f;m=g;break}e=k[f+24>>2]|0;i=k[f+12>>2]|0;do if((i|0)==(f|0)){n=f+16|0;j=n+4|0;p=k[j>>2]|0;if(!p){q=k[n>>2]|0;if(!q){r=0;break}else{s=q;t=n}}else{s=p;t=j}while(1){j=s+20|0;p=k[j>>2]|0;if(p){s=p;t=j;continue}j=s+16|0;p=k[j>>2]|0;if(!p){u=s;v=t;break}else{s=p;t=j}}if(v>>>0>>0)Ub();else{k[v>>2]=0;r=u;break}}else{j=k[f+8>>2]|0;if(j>>>0>>0)Ub();p=j+12|0;if((k[p>>2]|0)!=(f|0))Ub();n=i+8|0;if((k[n>>2]|0)==(f|0)){k[p>>2]=i;k[n>>2]=j;r=i;break}else Ub()}while(0);if(e){i=k[f+28>>2]|0;h=65932+(i<<2)|0;if((f|0)==(k[h>>2]|0)){k[h>>2]=r;if(!r){k[16408]=k[16408]&~(1<>>0<(k[16411]|0)>>>0)Ub();i=e+16|0;if((k[i>>2]|0)==(f|0))k[i>>2]=r;else k[e+20>>2]=r;if(!r){l=f;m=g;break}}i=k[16411]|0;if(r>>>0>>0)Ub();k[r+24>>2]=e;h=f+16|0;j=k[h>>2]|0;do if(j)if(j>>>0>>0)Ub();else{k[r+16>>2]=j;k[j+24>>2]=r;break}while(0);j=k[h+4>>2]|0;if(j)if(j>>>0<(k[16411]|0)>>>0)Ub();else{k[r+20>>2]=j;k[j+24>>2]=r;l=f;m=g;break}else{l=f;m=g}}else{l=f;m=g}}else{l=a;m=b}while(0);b=k[16411]|0;if(c>>>0>>0)Ub();a=c+4|0;r=k[a>>2]|0;if(!(r&2)){if((c|0)==(k[16413]|0)){u=(k[16410]|0)+m|0;k[16410]=u;k[16413]=l;k[l+4>>2]=u|1;if((l|0)!=(k[16412]|0))return;k[16412]=0;k[16409]=0;return}if((c|0)==(k[16412]|0)){u=(k[16409]|0)+m|0;k[16409]=u;k[16412]=l;k[l+4>>2]=u|1;k[l+u>>2]=u;return}u=(r&-8)+m|0;v=r>>>3;do if(r>>>0>=256){t=k[c+24>>2]|0;s=k[c+12>>2]|0;do if((s|0)==(c|0)){o=c+16|0;d=o+4|0;j=k[d>>2]|0;if(!j){i=k[o>>2]|0;if(!i){w=0;break}else{x=i;y=o}}else{x=j;y=d}while(1){d=x+20|0;j=k[d>>2]|0;if(j){x=j;y=d;continue}d=x+16|0;j=k[d>>2]|0;if(!j){z=x;A=y;break}else{x=j;y=d}}if(A>>>0>>0)Ub();else{k[A>>2]=0;w=z;break}}else{d=k[c+8>>2]|0;if(d>>>0>>0)Ub();j=d+12|0;if((k[j>>2]|0)!=(c|0))Ub();o=s+8|0;if((k[o>>2]|0)==(c|0)){k[j>>2]=s;k[o>>2]=d;w=s;break}else Ub()}while(0);if(t){s=k[c+28>>2]|0;g=65932+(s<<2)|0;if((c|0)==(k[g>>2]|0)){k[g>>2]=w;if(!w){k[16408]=k[16408]&~(1<>>0<(k[16411]|0)>>>0)Ub();s=t+16|0;if((k[s>>2]|0)==(c|0))k[s>>2]=w;else k[t+20>>2]=w;if(!w)break}s=k[16411]|0;if(w>>>0>>0)Ub();k[w+24>>2]=t;g=c+16|0;f=k[g>>2]|0;do if(f)if(f>>>0>>0)Ub();else{k[w+16>>2]=f;k[f+24>>2]=w;break}while(0);f=k[g+4>>2]|0;if(f)if(f>>>0<(k[16411]|0)>>>0)Ub();else{k[w+20>>2]=f;k[f+24>>2]=w;break}}}else{f=k[c+8>>2]|0;s=k[c+12>>2]|0;t=65668+(v<<1<<2)|0;if((f|0)!=(t|0)){if(f>>>0>>0)Ub();if((k[f+12>>2]|0)!=(c|0))Ub()}if((s|0)==(f|0)){k[16407]=k[16407]&~(1<>>0>>0)Ub();t=s+8|0;if((k[t>>2]|0)==(c|0))B=t;else Ub()}else B=s+8|0;k[f+12>>2]=s;k[B>>2]=f}while(0);k[l+4>>2]=u|1;k[l+u>>2]=u;if((l|0)==(k[16412]|0)){k[16409]=u;return}else C=u}else{k[a>>2]=r&-2;k[l+4>>2]=m|1;k[l+m>>2]=m;C=m}m=C>>>3;if(C>>>0<256){r=65668+(m<<1<<2)|0;a=k[16407]|0;u=1<>2]|0;if(B>>>0<(k[16411]|0)>>>0)Ub();else{D=m;E=B}}else{k[16407]=a|u;D=r+8|0;E=r}k[D>>2]=l;k[E+12>>2]=l;k[l+8>>2]=E;k[l+12>>2]=r;return}r=C>>>8;if(r)if(C>>>0>16777215)F=31;else{E=(r+1048320|0)>>>16&8;D=r<>>16&4;u=D<>>16&2;a=14-(r|E|D)+(u<>>15)|0;F=C>>>(a+7|0)&1|a<<1}else F=0;a=65932+(F<<2)|0;k[l+28>>2]=F;k[l+20>>2]=0;k[l+16>>2]=0;D=k[16408]|0;u=1<>2]=l;k[l+24>>2]=a;k[l+12>>2]=l;k[l+8>>2]=l;return}u=C<<((F|0)==31?0:25-(F>>>1)|0);F=k[a>>2]|0;while(1){if((k[F+4>>2]&-8|0)==(C|0)){G=F;H=127;break}a=F+16+(u>>>31<<2)|0;D=k[a>>2]|0;if(!D){I=a;J=F;H=124;break}else{u=u<<1;F=D}}if((H|0)==124){if(I>>>0<(k[16411]|0)>>>0)Ub();k[I>>2]=l;k[l+24>>2]=J;k[l+12>>2]=l;k[l+8>>2]=l;return}else if((H|0)==127){H=G+8|0;J=k[H>>2]|0;I=k[16411]|0;if(!(J>>>0>=I>>>0&G>>>0>=I>>>0))Ub();k[J+12>>2]=l;k[H>>2]=l;k[l+8>>2]=J;k[l+12>>2]=G;k[l+24>>2]=0;return}}function WYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-1|0;f=d;b:while(1){g=f;h=b-g|0;switch(h|0){case 1:case 0:{break a;break}case 2:{j=f;k=e;l=4;break a;break}case 3:{m=f;n=e;l=6;break a;break}case 4:{o=f;p=e;l=7;break a;break}case 5:{q=f;r=e;l=8;break a;break}default:{}}if((h|0)<31){s=f;t=a;l=10;break a}u=f+((h|0)/2|0)|0;if((h|0)>999){v=(h|0)/4|0;w=GZa(f,f+v|0,u,u+v|0,e,c)|0}else w=EZa(f,u,e,c)|0;v=i[f>>0]|0;h=i[u>>0]|0;do if(v<<24>>24>24){x=e;y=w}else{z=e;while(1){A=z+-1|0;if((f|0)==(A|0))break;B=i[A>>0]|0;if(B<<24>>24>24){C=B;D=A;l=29;break}else z=A}if((l|0)==29){l=0;i[f>>0]=C;i[D>>0]=v;x=D;y=w+1|0;break}z=f+1|0;A=i[e>>0]|0;if(v<<24>>24>24)E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=i[F>>0]|0;if(v<<24>>24>24){G=B;H=z;I=F;break}z=F;F=F+1|0;B=z}i[I>>0]=A;i[e>>0]=H;E=G+2|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=i[f>>0]|0;F=J;while(1){z=i[F>>0]|0;L=F+1|0;if(B<<24>>24>24){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-1|0;z=i[L>>0]|0;if(B<<24>>24>24)F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}i[O>>0]=Q;i[P>>0]=M;J=N;K=P}}while(0);v=f+1|0;c:do if(v>>>0>>0){h=v;A=x;F=u;B=y;while(1){z=i[F>>0]|0;L=h;while(1){R=i[L>>0]|0;S=L+1|0;if(R<<24>>24>24)L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-1|0;R=i[S>>0]|0;if(R<<24>>24>24){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}i[V>>0]=X;i[W>>0]=T;h=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=v;Z=u;_=y}while(0);if((Y|0)!=(Z|0)?(u=i[Z>>0]|0,v=i[Y>>0]|0,u<<24>>24>24):0){i[Y>>0]=u;i[Z>>0]=v;$=_+1|0}else $=_;if(!$){aa=XYa(f,Y,c)|0;v=Y+1|0;if(XYa(v,a,c)|0){l=46;break}if(aa){f=v;continue}}v=Y;if((v-g|0)>=(b-v|0)){ba=f;ca=Y;l=45;break}WYa(f,Y,c);f=Y+1|0}if((l|0)==45){l=0;WYa(ca+1|0,a,c);d=ba;a=ca;continue}else if((l|0)==46){l=0;if(aa)break;else{d=f;a=Y;continue}}}if((l|0)==4){Y=i[k>>0]|0;a=i[j>>0]|0;if(Y<<24>>24>24){i[j>>0]=Y;i[k>>0]=a}}else if((l|0)==6)EZa(m,m+1|0,n,c)|0;else if((l|0)==7)FZa(o,o+1|0,o+2|0,p,c)|0;else if((l|0)==8)GZa(q,q+1|0,q+2|0,q+3|0,r,c)|0;else if((l|0)==10)HZa(s,t,c);return}function XYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a|0){case 1:case 0:{d=1;break}case 2:{e=b+-1|0;f=i[e>>0]|0;g=i[a>>0]|0;if(f<<24>>24>24){i[a>>0]=f;i[e>>0]=g;d=1}else d=1;break}case 3:{EZa(a,a+1|0,b+-1|0,c)|0;d=1;break}case 4:{FZa(a,a+1|0,a+2|0,b+-1|0,c)|0;d=1;break}case 5:{GZa(a,a+1|0,a+2|0,a+3|0,b+-1|0,c)|0;d=1;break}default:{g=a+2|0;EZa(a,a+1|0,g,c)|0;c=0;e=a+3|0;f=g;while(1){if((e|0)==(b|0)){h=1;j=0;break}g=i[e>>0]|0;k=i[f>>0]|0;if(g<<24>>24>24){l=k;k=e;m=f;while(1){i[k>>0]=l;if((m|0)==(a|0)){n=a;break}o=m+-1|0;l=i[o>>0]|0;if(g<<24>>24>=l<<24>>24){n=m;break}else{p=m;m=o;k=p}}i[n>>0]=g;k=c+1|0;if((k|0)==8){h=0;j=(e+1|0)==(b|0);break}else q=k}else q=c;k=e;c=q;e=e+1|0;f=k}d=j|h}}return d|0}function YYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-4|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>2;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<124){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<2)|0;if((h|0)>3996){h=(i|0)/4|0;w=KZa(f,f+(h<<2)|0,v,v+(h<<2)|0,e,c)|0}else w=IZa(f,v,e,c)|0;h=k[f>>2]|0;i=k[v>>2]|0;do if((h|0)<(i|0)){x=e;y=w}else{z=e;while(1){A=z+-4|0;if((f|0)==(A|0))break;B=k[A>>2]|0;if((B|0)<(i|0)){C=B;D=A;m=29;break}else z=A}if((m|0)==29){m=0;k[f>>2]=C;k[D>>2]=h;x=D;y=w+1|0;break}z=f+4|0;A=k[e>>2]|0;if((h|0)<(A|0))E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=k[F>>2]|0;if((h|0)<(z|0)){G=B;H=z;I=F;break}z=F;F=F+4|0;B=z}k[I>>2]=A;k[e>>2]=H;E=G+8|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=k[f>>2]|0;F=J;while(1){z=k[F>>2]|0;L=F+4|0;if((B|0)<(z|0)){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-4|0;z=k[L>>2]|0;if((B|0)<(z|0))F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}k[O>>2]=Q;k[P>>2]=M;J=N;K=P}}while(0);h=f+4|0;c:do if(h>>>0>>0){i=h;A=x;F=v;B=y;while(1){z=k[F>>2]|0;L=i;while(1){R=k[L>>2]|0;S=L+4|0;if((R|0)<(z|0))L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-4|0;R=k[S>>2]|0;if((R|0)<(z|0)){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}k[V>>2]=X;k[W>>2]=T;i=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=h;Z=v;_=y}while(0);if((Y|0)!=(Z|0)?(v=k[Z>>2]|0,h=k[Y>>2]|0,(v|0)<(h|0)):0){k[Y>>2]=v;k[Z>>2]=h;$=_+1|0}else $=_;if(!$){aa=ZYa(f,Y,c)|0;h=Y+4|0;if(ZYa(h,a,c)|0){m=46;break}if(aa){f=h;continue}}h=Y;if((h-g|0)>=(b-h|0)){ba=f;ca=Y;m=45;break}YYa(f,Y,c);f=Y+4|0}if((m|0)==45){m=0;YYa(ca+4|0,a,c);d=ba;a=ca;continue}else if((m|0)==46){m=0;if(aa)break;else{d=f;a=Y;continue}}}if((m|0)==4){Y=k[l>>2]|0;a=k[j>>2]|0;if((Y|0)<(a|0)){k[j>>2]=Y;k[l>>2]=a}}else if((m|0)==6)IZa(n,n+4|0,o,c)|0;else if((m|0)==7)JZa(p,p+4|0,p+8|0,q,c)|0;else if((m|0)==8)KZa(r,r+4|0,r+8|0,r+12|0,s,c)|0;else if((m|0)==10)LZa(t,u,c);return}function ZYa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a>>2|0){case 1:case 0:{d=1;break}case 2:{e=b+-4|0;f=k[e>>2]|0;g=k[a>>2]|0;if((f|0)<(g|0)){k[a>>2]=f;k[e>>2]=g;d=1}else d=1;break}case 3:{IZa(a,a+4|0,b+-4|0,c)|0;d=1;break}case 4:{JZa(a,a+4|0,a+8|0,b+-4|0,c)|0;d=1;break}case 5:{KZa(a,a+4|0,a+8|0,a+12|0,b+-4|0,c)|0;d=1;break}default:{g=a+8|0;IZa(a,a+4|0,g,c)|0;c=0;e=a+12|0;f=g;while(1){if((e|0)==(b|0)){h=1;i=0;break}g=k[e>>2]|0;j=k[f>>2]|0;if((g|0)<(j|0)){l=j;j=e;m=f;while(1){k[j>>2]=l;if((m|0)==(a|0)){n=a;break}o=m+-4|0;l=k[o>>2]|0;if((g|0)>=(l|0)){n=m;break}else{p=m;m=o;j=p}}k[n>>2]=g;j=c+1|0;if((j|0)==8){h=0;i=(e+4|0)==(b|0);break}else q=j}else q=c;j=e;c=q;e=e+4|0;f=j}d=i|h}}return d|0}function _Ya(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-1|0;f=d;b:while(1){g=f;h=b-g|0;switch(h|0){case 1:case 0:{break a;break}case 2:{j=f;k=e;l=4;break a;break}case 3:{m=f;n=e;l=6;break a;break}case 4:{o=f;p=e;l=7;break a;break}case 5:{q=f;r=e;l=8;break a;break}default:{}}if((h|0)<31){s=f;t=a;l=10;break a}u=f+((h|0)/2|0)|0;if((h|0)>999){v=(h|0)/4|0;w=OZa(f,f+v|0,u,u+v|0,e,c)|0}else w=MZa(f,u,e,c)|0;v=i[f>>0]|0;h=i[u>>0]|0;do if(v<<24>>24>24){x=e;y=w}else{z=e;while(1){A=z+-1|0;if((f|0)==(A|0))break;B=i[A>>0]|0;if(B<<24>>24>24){C=B;D=A;l=29;break}else z=A}if((l|0)==29){l=0;i[f>>0]=C;i[D>>0]=v;x=D;y=w+1|0;break}z=f+1|0;A=i[e>>0]|0;if(v<<24>>24>24)E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=i[F>>0]|0;if(v<<24>>24>24){G=B;H=z;I=F;break}z=F;F=F+1|0;B=z}i[I>>0]=A;i[e>>0]=H;E=G+2|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=i[f>>0]|0;F=J;while(1){z=i[F>>0]|0;L=F+1|0;if(B<<24>>24>24){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-1|0;z=i[L>>0]|0;if(B<<24>>24>24)F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}i[O>>0]=Q;i[P>>0]=M;J=N;K=P}}while(0);v=f+1|0;c:do if(v>>>0>>0){h=v;A=x;F=u;B=y;while(1){z=i[F>>0]|0;L=h;while(1){R=i[L>>0]|0;S=L+1|0;if(R<<24>>24>24)L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-1|0;R=i[S>>0]|0;if(R<<24>>24>24){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}i[V>>0]=X;i[W>>0]=T;h=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=v;Z=u;_=y}while(0);if((Y|0)!=(Z|0)?(u=i[Z>>0]|0,v=i[Y>>0]|0,u<<24>>24>24):0){i[Y>>0]=u;i[Z>>0]=v;$=_+1|0}else $=_;if(!$){aa=$Ya(f,Y,c)|0;v=Y+1|0;if($Ya(v,a,c)|0){l=46;break}if(aa){f=v;continue}}v=Y;if((v-g|0)>=(b-v|0)){ba=f;ca=Y;l=45;break}_Ya(f,Y,c);f=Y+1|0}if((l|0)==45){l=0;_Ya(ca+1|0,a,c);d=ba;a=ca;continue}else if((l|0)==46){l=0;if(aa)break;else{d=f;a=Y;continue}}}if((l|0)==4){Y=i[k>>0]|0;a=i[j>>0]|0;if(Y<<24>>24>24){i[j>>0]=Y;i[k>>0]=a}}else if((l|0)==6)MZa(m,m+1|0,n,c)|0;else if((l|0)==7)NZa(o,o+1|0,o+2|0,p,c)|0;else if((l|0)==8)OZa(q,q+1|0,q+2|0,q+3|0,r,c)|0;else if((l|0)==10)PZa(s,t,c);return}function $Ya(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a|0){case 1:case 0:{d=1;break}case 2:{e=b+-1|0;f=i[e>>0]|0;g=i[a>>0]|0;if(f<<24>>24>24){i[a>>0]=f;i[e>>0]=g;d=1}else d=1;break}case 3:{MZa(a,a+1|0,b+-1|0,c)|0;d=1;break}case 4:{NZa(a,a+1|0,a+2|0,b+-1|0,c)|0;d=1;break}case 5:{OZa(a,a+1|0,a+2|0,a+3|0,b+-1|0,c)|0;d=1;break}default:{g=a+2|0;MZa(a,a+1|0,g,c)|0;c=0;e=a+3|0;f=g;while(1){if((e|0)==(b|0)){h=1;j=0;break}g=i[e>>0]|0;k=i[f>>0]|0;if(g<<24>>24>24){l=k;k=e;m=f;while(1){i[k>>0]=l;if((m|0)==(a|0)){n=a;break}o=m+-1|0;l=i[o>>0]|0;if(g<<24>>24>=l<<24>>24){n=m;break}else{p=m;m=o;k=p}}i[n>>0]=g;k=c+1|0;if((k|0)==8){h=0;j=(e+1|0)==(b|0);break}else q=k}else q=c;k=e;c=q;e=e+1|0;f=k}d=j|h}}return d|0}function aZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-1|0;f=d;b:while(1){g=f;h=b-g|0;switch(h|0){case 1:case 0:{break a;break}case 2:{j=f;k=e;l=4;break a;break}case 3:{m=f;n=e;l=6;break a;break}case 4:{o=f;p=e;l=7;break a;break}case 5:{q=f;r=e;l=8;break a;break}default:{}}if((h|0)<31){s=f;t=a;l=10;break a}u=f+((h|0)/2|0)|0;if((h|0)>999){v=(h|0)/4|0;w=SZa(f,f+v|0,u,u+v|0,e,c)|0}else w=QZa(f,u,e,c)|0;v=i[f>>0]|0;h=i[u>>0]|0;do if((v&255)<(h&255)){x=e;y=w}else{z=e;while(1){A=z+-1|0;if((f|0)==(A|0))break;B=i[A>>0]|0;if((B&255)<(h&255)){C=B;D=A;l=29;break}else z=A}if((l|0)==29){l=0;i[f>>0]=C;i[D>>0]=v;x=D;y=w+1|0;break}z=f+1|0;A=i[e>>0]|0;if((v&255)<(A&255))E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=i[F>>0]|0;if((v&255)<(z&255)){G=B;H=z;I=F;break}z=F;F=F+1|0;B=z}i[I>>0]=A;i[e>>0]=H;E=G+2|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=i[f>>0]|0;F=J;while(1){z=i[F>>0]|0;L=F+1|0;if((B&255)<(z&255)){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-1|0;z=i[L>>0]|0;if((B&255)<(z&255))F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}i[O>>0]=Q;i[P>>0]=M;J=N;K=P}}while(0);v=f+1|0;c:do if(v>>>0>>0){h=v;A=x;F=u;B=y;while(1){z=i[F>>0]|0;L=h;while(1){R=i[L>>0]|0;S=L+1|0;if((R&255)<(z&255))L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-1|0;R=i[S>>0]|0;if((R&255)<(z&255)){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}i[V>>0]=X;i[W>>0]=T;h=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=v;Z=u;_=y}while(0);if((Y|0)!=(Z|0)?(u=i[Z>>0]|0,v=i[Y>>0]|0,(u&255)<(v&255)):0){i[Y>>0]=u;i[Z>>0]=v;$=_+1|0}else $=_;if(!$){aa=bZa(f,Y,c)|0;v=Y+1|0;if(bZa(v,a,c)|0){l=46;break}if(aa){f=v;continue}}v=Y;if((v-g|0)>=(b-v|0)){ba=f;ca=Y;l=45;break}aZa(f,Y,c);f=Y+1|0}if((l|0)==45){l=0;aZa(ca+1|0,a,c);d=ba;a=ca;continue}else if((l|0)==46){l=0;if(aa)break;else{d=f;a=Y;continue}}}if((l|0)==4){Y=i[k>>0]|0;a=i[j>>0]|0;if((Y&255)<(a&255)){i[j>>0]=Y;i[k>>0]=a}}else if((l|0)==6)QZa(m,m+1|0,n,c)|0;else if((l|0)==7)RZa(o,o+1|0,o+2|0,p,c)|0;else if((l|0)==8)SZa(q,q+1|0,q+2|0,q+3|0,r,c)|0;else if((l|0)==10)TZa(s,t,c);return}function bZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a|0){case 1:case 0:{d=1;break}case 2:{e=b+-1|0;f=i[e>>0]|0;g=i[a>>0]|0;if((f&255)<(g&255)){i[a>>0]=f;i[e>>0]=g;d=1}else d=1;break}case 3:{QZa(a,a+1|0,b+-1|0,c)|0;d=1;break}case 4:{RZa(a,a+1|0,a+2|0,b+-1|0,c)|0;d=1;break}case 5:{SZa(a,a+1|0,a+2|0,a+3|0,b+-1|0,c)|0;d=1;break}default:{g=a+2|0;QZa(a,a+1|0,g,c)|0;c=0;e=a+3|0;f=g;while(1){if((e|0)==(b|0)){h=1;j=0;break}g=i[e>>0]|0;k=i[f>>0]|0;if((g&255)<(k&255)){l=k;k=e;m=f;while(1){i[k>>0]=l;if((m|0)==(a|0)){n=a;break}o=m+-1|0;l=i[o>>0]|0;if((g&255)>=(l&255)){n=m;break}else{p=m;m=o;k=p}}i[n>>0]=g;k=c+1|0;if((k|0)==8){h=0;j=(e+1|0)==(b|0);break}else q=k}else q=c;k=e;c=q;e=e+1|0;f=k}d=j|h}}return d|0}function cZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-2|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>1;switch(i|0){case 1:case 0:{break a;break}case 2:{k=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<62){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<1)|0;if((h|0)>1998){h=(i|0)/4|0;w=WZa(f,f+(h<<1)|0,v,v+(h<<1)|0,e,c)|0}else w=UZa(f,v,e,c)|0;h=j[f>>1]|0;i=j[v>>1]|0;do if(h<<16>>16>16){x=e;y=w}else{z=e;while(1){A=z+-2|0;if((f|0)==(A|0))break;B=j[A>>1]|0;if(B<<16>>16>16){C=B;D=A;m=29;break}else z=A}if((m|0)==29){m=0;j[f>>1]=C;j[D>>1]=h;x=D;y=w+1|0;break}z=f+2|0;A=j[e>>1]|0;if(h<<16>>16>16)E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=j[F>>1]|0;if(h<<16>>16>16){G=B;H=z;I=F;break}z=F;F=F+2|0;B=z}j[I>>1]=A;j[e>>1]=H;E=G+4|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=j[f>>1]|0;F=J;while(1){z=j[F>>1]|0;L=F+2|0;if(B<<16>>16>16){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-2|0;z=j[L>>1]|0;if(B<<16>>16>16)F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}j[O>>1]=Q;j[P>>1]=M;J=N;K=P}}while(0);h=f+2|0;c:do if(h>>>0>>0){i=h;A=x;F=v;B=y;while(1){z=j[F>>1]|0;L=i;while(1){R=j[L>>1]|0;S=L+2|0;if(R<<16>>16>16)L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-2|0;R=j[S>>1]|0;if(R<<16>>16>16){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}j[V>>1]=X;j[W>>1]=T;i=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=h;Z=v;_=y}while(0);if((Y|0)!=(Z|0)?(v=j[Z>>1]|0,h=j[Y>>1]|0,v<<16>>16>16):0){j[Y>>1]=v;j[Z>>1]=h;$=_+1|0}else $=_;if(!$){aa=dZa(f,Y,c)|0;h=Y+2|0;if(dZa(h,a,c)|0){m=46;break}if(aa){f=h;continue}}h=Y;if((h-g|0)>=(b-h|0)){ba=f;ca=Y;m=45;break}cZa(f,Y,c);f=Y+2|0}if((m|0)==45){m=0;cZa(ca+2|0,a,c);d=ba;a=ca;continue}else if((m|0)==46){m=0;if(aa)break;else{d=f;a=Y;continue}}}if((m|0)==4){Y=j[l>>1]|0;a=j[k>>1]|0;if(Y<<16>>16>16){j[k>>1]=Y;j[l>>1]=a}}else if((m|0)==6)UZa(n,n+2|0,o,c)|0;else if((m|0)==7)VZa(p,p+2|0,p+4|0,q,c)|0;else if((m|0)==8)WZa(r,r+2|0,r+4|0,r+6|0,s,c)|0;else if((m|0)==10)XZa(t,u,c);return}function dZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a>>1|0){case 1:case 0:{d=1;break}case 2:{e=b+-2|0;f=j[e>>1]|0;g=j[a>>1]|0;if(f<<16>>16>16){j[a>>1]=f;j[e>>1]=g;d=1}else d=1;break}case 3:{UZa(a,a+2|0,b+-2|0,c)|0;d=1;break}case 4:{VZa(a,a+2|0,a+4|0,b+-2|0,c)|0;d=1;break}case 5:{WZa(a,a+2|0,a+4|0,a+6|0,b+-2|0,c)|0;d=1;break}default:{g=a+4|0;UZa(a,a+2|0,g,c)|0;c=0;e=a+6|0;f=g;while(1){if((e|0)==(b|0)){h=1;i=0;break}g=j[e>>1]|0;k=j[f>>1]|0;if(g<<16>>16>16){l=k;k=e;m=f;while(1){j[k>>1]=l;if((m|0)==(a|0)){n=a;break}o=m+-2|0;l=j[o>>1]|0;if(g<<16>>16>=l<<16>>16){n=m;break}else{p=m;m=o;k=p}}j[n>>1]=g;k=c+1|0;if((k|0)==8){h=0;i=(e+2|0)==(b|0);break}else q=k}else q=c;k=e;c=q;e=e+2|0;f=k}d=i|h}}return d|0}function eZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-2|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>1;switch(i|0){case 1:case 0:{break a;break}case 2:{k=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<62){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<1)|0;if((h|0)>1998){h=(i|0)/4|0;w=_Za(f,f+(h<<1)|0,v,v+(h<<1)|0,e,c)|0}else w=YZa(f,v,e,c)|0;h=j[f>>1]|0;i=j[v>>1]|0;do if((h&65535)<(i&65535)){x=e;y=w}else{z=e;while(1){A=z+-2|0;if((f|0)==(A|0))break;B=j[A>>1]|0;if((B&65535)<(i&65535)){C=B;D=A;m=29;break}else z=A}if((m|0)==29){m=0;j[f>>1]=C;j[D>>1]=h;x=D;y=w+1|0;break}z=f+2|0;A=j[e>>1]|0;if((h&65535)<(A&65535))E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=j[F>>1]|0;if((h&65535)<(z&65535)){G=B;H=z;I=F;break}z=F;F=F+2|0;B=z}j[I>>1]=A;j[e>>1]=H;E=G+4|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=j[f>>1]|0;F=J;while(1){z=j[F>>1]|0;L=F+2|0;if((B&65535)<(z&65535)){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-2|0;z=j[L>>1]|0;if((B&65535)<(z&65535))F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}j[O>>1]=Q;j[P>>1]=M;J=N;K=P}}while(0);h=f+2|0;c:do if(h>>>0>>0){i=h;A=x;F=v;B=y;while(1){z=j[F>>1]|0;L=i;while(1){R=j[L>>1]|0;S=L+2|0;if((R&65535)<(z&65535))L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-2|0;R=j[S>>1]|0;if((R&65535)<(z&65535)){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}j[V>>1]=X;j[W>>1]=T;i=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=h;Z=v;_=y}while(0);if((Y|0)!=(Z|0)?(v=j[Z>>1]|0,h=j[Y>>1]|0,(v&65535)<(h&65535)):0){j[Y>>1]=v;j[Z>>1]=h;$=_+1|0}else $=_;if(!$){aa=fZa(f,Y,c)|0;h=Y+2|0;if(fZa(h,a,c)|0){m=46;break}if(aa){f=h;continue}}h=Y;if((h-g|0)>=(b-h|0)){ba=f;ca=Y;m=45;break}eZa(f,Y,c);f=Y+2|0}if((m|0)==45){m=0;eZa(ca+2|0,a,c);d=ba;a=ca;continue}else if((m|0)==46){m=0;if(aa)break;else{d=f;a=Y;continue}}}if((m|0)==4){Y=j[l>>1]|0;a=j[k>>1]|0;if((Y&65535)<(a&65535)){j[k>>1]=Y;j[l>>1]=a}}else if((m|0)==6)YZa(n,n+2|0,o,c)|0;else if((m|0)==7)ZZa(p,p+2|0,p+4|0,q,c)|0;else if((m|0)==8)_Za(r,r+2|0,r+4|0,r+6|0,s,c)|0;else if((m|0)==10)$Za(t,u,c);return}function fZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a>>1|0){case 1:case 0:{d=1;break}case 2:{e=b+-2|0;f=j[e>>1]|0;g=j[a>>1]|0;if((f&65535)<(g&65535)){j[a>>1]=f;j[e>>1]=g;d=1}else d=1;break}case 3:{YZa(a,a+2|0,b+-2|0,c)|0;d=1;break}case 4:{ZZa(a,a+2|0,a+4|0,b+-2|0,c)|0;d=1;break}case 5:{_Za(a,a+2|0,a+4|0,a+6|0,b+-2|0,c)|0;d=1;break}default:{g=a+4|0;YZa(a,a+2|0,g,c)|0;c=0;e=a+6|0;f=g;while(1){if((e|0)==(b|0)){h=1;i=0;break}g=j[e>>1]|0;k=j[f>>1]|0;if((g&65535)<(k&65535)){l=k;k=e;m=f;while(1){j[k>>1]=l;if((m|0)==(a|0)){n=a;break}o=m+-2|0;l=j[o>>1]|0;if((g&65535)>=(l&65535)){n=m;break}else{p=m;m=o;k=p}}j[n>>1]=g;k=c+1|0;if((k|0)==8){h=0;i=(e+2|0)==(b|0);break}else q=k}else q=c;k=e;c=q;e=e+2|0;f=k}d=i|h}}return d|0}function gZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-4|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>2;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<124){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<2)|0;if((h|0)>3996){h=(i|0)/4|0;w=c_a(f,f+(h<<2)|0,v,v+(h<<2)|0,e,c)|0}else w=a_a(f,v,e,c)|0;h=k[f>>2]|0;i=k[v>>2]|0;do if((h|0)<(i|0)){x=e;y=w}else{z=e;while(1){A=z+-4|0;if((f|0)==(A|0))break;B=k[A>>2]|0;if((B|0)<(i|0)){C=B;D=A;m=29;break}else z=A}if((m|0)==29){m=0;k[f>>2]=C;k[D>>2]=h;x=D;y=w+1|0;break}z=f+4|0;A=k[e>>2]|0;if((h|0)<(A|0))E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=k[F>>2]|0;if((h|0)<(z|0)){G=B;H=z;I=F;break}z=F;F=F+4|0;B=z}k[I>>2]=A;k[e>>2]=H;E=G+8|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=k[f>>2]|0;F=J;while(1){z=k[F>>2]|0;L=F+4|0;if((B|0)<(z|0)){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-4|0;z=k[L>>2]|0;if((B|0)<(z|0))F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}k[O>>2]=Q;k[P>>2]=M;J=N;K=P}}while(0);h=f+4|0;c:do if(h>>>0>>0){i=h;A=x;F=v;B=y;while(1){z=k[F>>2]|0;L=i;while(1){R=k[L>>2]|0;S=L+4|0;if((R|0)<(z|0))L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-4|0;R=k[S>>2]|0;if((R|0)<(z|0)){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}k[V>>2]=X;k[W>>2]=T;i=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=h;Z=v;_=y}while(0);if((Y|0)!=(Z|0)?(v=k[Z>>2]|0,h=k[Y>>2]|0,(v|0)<(h|0)):0){k[Y>>2]=v;k[Z>>2]=h;$=_+1|0}else $=_;if(!$){aa=hZa(f,Y,c)|0;h=Y+4|0;if(hZa(h,a,c)|0){m=46;break}if(aa){f=h;continue}}h=Y;if((h-g|0)>=(b-h|0)){ba=f;ca=Y;m=45;break}gZa(f,Y,c);f=Y+4|0}if((m|0)==45){m=0;gZa(ca+4|0,a,c);d=ba;a=ca;continue}else if((m|0)==46){m=0;if(aa)break;else{d=f;a=Y;continue}}}if((m|0)==4){Y=k[l>>2]|0;a=k[j>>2]|0;if((Y|0)<(a|0)){k[j>>2]=Y;k[l>>2]=a}}else if((m|0)==6)a_a(n,n+4|0,o,c)|0;else if((m|0)==7)b_a(p,p+4|0,p+8|0,q,c)|0;else if((m|0)==8)c_a(r,r+4|0,r+8|0,r+12|0,s,c)|0;else if((m|0)==10)d_a(t,u,c);return}function hZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a>>2|0){case 1:case 0:{d=1;break}case 2:{e=b+-4|0;f=k[e>>2]|0;g=k[a>>2]|0;if((f|0)<(g|0)){k[a>>2]=f;k[e>>2]=g;d=1}else d=1;break}case 3:{a_a(a,a+4|0,b+-4|0,c)|0;d=1;break}case 4:{b_a(a,a+4|0,a+8|0,b+-4|0,c)|0;d=1;break}case 5:{c_a(a,a+4|0,a+8|0,a+12|0,b+-4|0,c)|0;d=1;break}default:{g=a+8|0;a_a(a,a+4|0,g,c)|0;c=0;e=a+12|0;f=g;while(1){if((e|0)==(b|0)){h=1;i=0;break}g=k[e>>2]|0;j=k[f>>2]|0;if((g|0)<(j|0)){l=j;j=e;m=f;while(1){k[j>>2]=l;if((m|0)==(a|0)){n=a;break}o=m+-4|0;l=k[o>>2]|0;if((g|0)>=(l|0)){n=m;break}else{p=m;m=o;j=p}}k[n>>2]=g;j=c+1|0;if((j|0)==8){h=0;i=(e+4|0)==(b|0);break}else q=j}else q=c;j=e;c=q;e=e+4|0;f=j}d=i|h}}return d|0}function iZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-4|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>2;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<124){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<2)|0;if((h|0)>3996){h=(i|0)/4|0;w=g_a(f,f+(h<<2)|0,v,v+(h<<2)|0,e,c)|0}else w=e_a(f,v,e,c)|0;h=k[f>>2]|0;i=k[v>>2]|0;do if(h>>>0>>0){x=e;y=w}else{z=e;while(1){A=z+-4|0;if((f|0)==(A|0))break;B=k[A>>2]|0;if(B>>>0>>0){C=B;D=A;m=29;break}else z=A}if((m|0)==29){m=0;k[f>>2]=C;k[D>>2]=h;x=D;y=w+1|0;break}z=f+4|0;A=k[e>>2]|0;if(h>>>0>>0)E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=k[F>>2]|0;if(h>>>0>>0){G=B;H=z;I=F;break}z=F;F=F+4|0;B=z}k[I>>2]=A;k[e>>2]=H;E=G+8|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=k[f>>2]|0;F=J;while(1){z=k[F>>2]|0;L=F+4|0;if(B>>>0>>0){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-4|0;z=k[L>>2]|0;if(B>>>0>>0)F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}k[O>>2]=Q;k[P>>2]=M;J=N;K=P}}while(0);h=f+4|0;c:do if(h>>>0>>0){i=h;A=x;F=v;B=y;while(1){z=k[F>>2]|0;L=i;while(1){R=k[L>>2]|0;S=L+4|0;if(R>>>0>>0)L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-4|0;R=k[S>>2]|0;if(R>>>0>>0){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}k[V>>2]=X;k[W>>2]=T;i=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=h;Z=v;_=y}while(0);if((Y|0)!=(Z|0)?(v=k[Z>>2]|0,h=k[Y>>2]|0,v>>>0>>0):0){k[Y>>2]=v;k[Z>>2]=h;$=_+1|0}else $=_;if(!$){aa=jZa(f,Y,c)|0;h=Y+4|0;if(jZa(h,a,c)|0){m=46;break}if(aa){f=h;continue}}h=Y;if((h-g|0)>=(b-h|0)){ba=f;ca=Y;m=45;break}iZa(f,Y,c);f=Y+4|0}if((m|0)==45){m=0;iZa(ca+4|0,a,c);d=ba;a=ca;continue}else if((m|0)==46){m=0;if(aa)break;else{d=f;a=Y;continue}}}if((m|0)==4){Y=k[l>>2]|0;a=k[j>>2]|0;if(Y>>>0>>0){k[j>>2]=Y;k[l>>2]=a}}else if((m|0)==6)e_a(n,n+4|0,o,c)|0;else if((m|0)==7)f_a(p,p+4|0,p+8|0,q,c)|0;else if((m|0)==8)g_a(r,r+4|0,r+8|0,r+12|0,s,c)|0;else if((m|0)==10)h_a(t,u,c);return}function jZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a>>2|0){case 1:case 0:{d=1;break}case 2:{e=b+-4|0;f=k[e>>2]|0;g=k[a>>2]|0;if(f>>>0>>0){k[a>>2]=f;k[e>>2]=g;d=1}else d=1;break}case 3:{e_a(a,a+4|0,b+-4|0,c)|0;d=1;break}case 4:{f_a(a,a+4|0,a+8|0,b+-4|0,c)|0;d=1;break}case 5:{g_a(a,a+4|0,a+8|0,a+12|0,b+-4|0,c)|0;d=1;break}default:{g=a+8|0;e_a(a,a+4|0,g,c)|0;c=0;e=a+12|0;f=g;while(1){if((e|0)==(b|0)){h=1;i=0;break}g=k[e>>2]|0;j=k[f>>2]|0;if(g>>>0>>0){l=j;j=e;m=f;while(1){k[j>>2]=l;if((m|0)==(a|0)){n=a;break}o=m+-4|0;l=k[o>>2]|0;if(g>>>0>=l>>>0){n=m;break}else{p=m;m=o;j=p}}k[n>>2]=g;j=c+1|0;if((j|0)==8){h=0;i=(e+4|0)==(b|0);break}else q=j}else q=c;j=e;c=q;e=e+4|0;f=j}d=i|h}}return d|0}function kZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-4|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>2;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<124){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<2)|0;if((h|0)>3996){h=(i|0)/4|0;w=k_a(f,f+(h<<2)|0,v,v+(h<<2)|0,e,c)|0}else w=i_a(f,v,e,c)|0;h=k[f>>2]|0;i=k[v>>2]|0;do if((h|0)<(i|0)){x=e;y=w}else{z=e;while(1){A=z+-4|0;if((f|0)==(A|0))break;B=k[A>>2]|0;if((B|0)<(i|0)){C=B;D=A;m=29;break}else z=A}if((m|0)==29){m=0;k[f>>2]=C;k[D>>2]=h;x=D;y=w+1|0;break}z=f+4|0;A=k[e>>2]|0;if((h|0)<(A|0))E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=k[F>>2]|0;if((h|0)<(z|0)){G=B;H=z;I=F;break}z=F;F=F+4|0;B=z}k[I>>2]=A;k[e>>2]=H;E=G+8|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=k[f>>2]|0;F=J;while(1){z=k[F>>2]|0;L=F+4|0;if((B|0)<(z|0)){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-4|0;z=k[L>>2]|0;if((B|0)<(z|0))F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}k[O>>2]=Q;k[P>>2]=M;J=N;K=P}}while(0);h=f+4|0;c:do if(h>>>0>>0){i=h;A=x;F=v;B=y;while(1){z=k[F>>2]|0;L=i;while(1){R=k[L>>2]|0;S=L+4|0;if((R|0)<(z|0))L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-4|0;R=k[S>>2]|0;if((R|0)<(z|0)){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}k[V>>2]=X;k[W>>2]=T;i=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=h;Z=v;_=y}while(0);if((Y|0)!=(Z|0)?(v=k[Z>>2]|0,h=k[Y>>2]|0,(v|0)<(h|0)):0){k[Y>>2]=v;k[Z>>2]=h;$=_+1|0}else $=_;if(!$){aa=lZa(f,Y,c)|0;h=Y+4|0;if(lZa(h,a,c)|0){m=46;break}if(aa){f=h;continue}}h=Y;if((h-g|0)>=(b-h|0)){ba=f;ca=Y;m=45;break}kZa(f,Y,c);f=Y+4|0}if((m|0)==45){m=0;kZa(ca+4|0,a,c);d=ba;a=ca;continue}else if((m|0)==46){m=0;if(aa)break;else{d=f;a=Y;continue}}}if((m|0)==4){Y=k[l>>2]|0;a=k[j>>2]|0;if((Y|0)<(a|0)){k[j>>2]=Y;k[l>>2]=a}}else if((m|0)==6)i_a(n,n+4|0,o,c)|0;else if((m|0)==7)j_a(p,p+4|0,p+8|0,q,c)|0;else if((m|0)==8)k_a(r,r+4|0,r+8|0,r+12|0,s,c)|0;else if((m|0)==10)l_a(t,u,c);return}function lZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a>>2|0){case 1:case 0:{d=1;break}case 2:{e=b+-4|0;f=k[e>>2]|0;g=k[a>>2]|0;if((f|0)<(g|0)){k[a>>2]=f;k[e>>2]=g;d=1}else d=1;break}case 3:{i_a(a,a+4|0,b+-4|0,c)|0;d=1;break}case 4:{j_a(a,a+4|0,a+8|0,b+-4|0,c)|0;d=1;break}case 5:{k_a(a,a+4|0,a+8|0,a+12|0,b+-4|0,c)|0;d=1;break}default:{g=a+8|0;i_a(a,a+4|0,g,c)|0;c=0;e=a+12|0;f=g;while(1){if((e|0)==(b|0)){h=1;i=0;break}g=k[e>>2]|0;j=k[f>>2]|0;if((g|0)<(j|0)){l=j;j=e;m=f;while(1){k[j>>2]=l;if((m|0)==(a|0)){n=a;break}o=m+-4|0;l=k[o>>2]|0;if((g|0)>=(l|0)){n=m;break}else{p=m;m=o;j=p}}k[n>>2]=g;j=c+1|0;if((j|0)==8){h=0;i=(e+4|0)==(b|0);break}else q=j}else q=c;j=e;c=q;e=e+4|0;f=j}d=i|h}}return d|0}function mZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=a;a=b;a:while(1){b=a;e=a+-4|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>2;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<124){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<2)|0;if((h|0)>3996){h=(i|0)/4|0;w=o_a(f,f+(h<<2)|0,v,v+(h<<2)|0,e,c)|0}else w=m_a(f,v,e,c)|0;h=k[f>>2]|0;i=k[v>>2]|0;do if(h>>>0>>0){x=e;y=w}else{z=e;while(1){A=z+-4|0;if((f|0)==(A|0))break;B=k[A>>2]|0;if(B>>>0>>0){C=B;D=A;m=29;break}else z=A}if((m|0)==29){m=0;k[f>>2]=C;k[D>>2]=h;x=D;y=w+1|0;break}z=f+4|0;A=k[e>>2]|0;if(h>>>0>>0)E=z;else{B=f;F=z;while(1){if((F|0)==(e|0))break a;z=k[F>>2]|0;if(h>>>0>>0){G=B;H=z;I=F;break}z=F;F=F+4|0;B=z}k[I>>2]=A;k[e>>2]=H;E=G+8|0}if((E|0)==(e|0))break a;else{J=E;K=e}while(1){B=k[f>>2]|0;F=J;while(1){z=k[F>>2]|0;L=F+4|0;if(B>>>0>>0){M=z;N=L;O=F;break}else F=L}F=K;while(1){L=F+-4|0;z=k[L>>2]|0;if(B>>>0>>0)F=L;else{P=L;Q=z;break}}if(O>>>0>=P>>>0){f=O;continue b}k[O>>2]=Q;k[P>>2]=M;J=N;K=P}}while(0);h=f+4|0;c:do if(h>>>0>>0){i=h;A=x;F=v;B=y;while(1){z=k[F>>2]|0;L=i;while(1){R=k[L>>2]|0;S=L+4|0;if(R>>>0>>0)L=S;else{T=R;U=S;V=L;break}}L=A;while(1){S=L+-4|0;R=k[S>>2]|0;if(R>>>0>>0){W=S;X=R;break}else L=S}if(V>>>0>W>>>0){Y=V;Z=F;_=B;break c}k[V>>2]=X;k[W>>2]=T;i=U;A=W;F=(F|0)==(V|0)?W:F;B=B+1|0}}else{Y=h;Z=v;_=y}while(0);if((Y|0)!=(Z|0)?(v=k[Z>>2]|0,h=k[Y>>2]|0,v>>>0>>0):0){k[Y>>2]=v;k[Z>>2]=h;$=_+1|0}else $=_;if(!$){aa=nZa(f,Y,c)|0;h=Y+4|0;if(nZa(h,a,c)|0){m=46;break}if(aa){f=h;continue}}h=Y;if((h-g|0)>=(b-h|0)){ba=f;ca=Y;m=45;break}mZa(f,Y,c);f=Y+4|0}if((m|0)==45){m=0;mZa(ca+4|0,a,c);d=ba;a=ca;continue}else if((m|0)==46){m=0;if(aa)break;else{d=f;a=Y;continue}}}if((m|0)==4){Y=k[l>>2]|0;a=k[j>>2]|0;if(Y>>>0>>0){k[j>>2]=Y;k[l>>2]=a}}else if((m|0)==6)m_a(n,n+4|0,o,c)|0;else if((m|0)==7)n_a(p,p+4|0,p+8|0,q,c)|0;else if((m|0)==8)o_a(r,r+4|0,r+8|0,r+12|0,s,c)|0;else if((m|0)==10)p_a(t,u,c);return}function nZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;switch(b-a>>2|0){case 1:case 0:{d=1;break}case 2:{e=b+-4|0;f=k[e>>2]|0;g=k[a>>2]|0;if(f>>>0>>0){k[a>>2]=f;k[e>>2]=g;d=1}else d=1;break}case 3:{m_a(a,a+4|0,b+-4|0,c)|0;d=1;break}case 4:{n_a(a,a+4|0,a+8|0,b+-4|0,c)|0;d=1;break}case 5:{o_a(a,a+4|0,a+8|0,a+12|0,b+-4|0,c)|0;d=1;break}default:{g=a+8|0;m_a(a,a+4|0,g,c)|0;c=0;e=a+12|0;f=g;while(1){if((e|0)==(b|0)){h=1;i=0;break}g=k[e>>2]|0;j=k[f>>2]|0;if(g>>>0>>0){l=j;j=e;m=f;while(1){k[j>>2]=l;if((m|0)==(a|0)){n=a;break}o=m+-4|0;l=k[o>>2]|0;if(g>>>0>=l>>>0){n=m;break}else{p=m;m=o;j=p}}k[n>>2]=g;j=c+1|0;if((j|0)==8){h=0;i=(e+4|0)==(b|0);break}else q=j}else q=c;j=e;c=q;e=e+4|0;f=j}d=i|h}}return d|0}function oZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;d=a;a=b;a:while(1){b=a;e=a+-8|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>3;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<248){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<3)|0;if((h|0)>7992){h=(i|0)/4|0;w=s_a(f,f+(h<<3)|0,v,v+(h<<3)|0,e,c)|0}else w=q_a(f,v,e,c)|0;h=f;i=k[h>>2]|0;x=k[h+4>>2]|0;h=v;y=k[h>>2]|0;z=k[h+4>>2]|0;do if((x|0)<(z|0)|(x|0)==(z|0)&i>>>0>>0){A=e;B=w}else{h=e;while(1){C=h+-8|0;if((f|0)==(C|0))break;D=C;E=k[D>>2]|0;F=k[D+4>>2]|0;if((F|0)<(z|0)|(F|0)==(z|0)&E>>>0>>0){G=C;H=E;I=F;m=29;break}else h=C}if((m|0)==29){m=0;h=f;k[h>>2]=H;k[h+4>>2]=I;h=G;k[h>>2]=i;k[h+4>>2]=x;A=G;B=w+1|0;break}h=f+8|0;C=e;F=k[C>>2]|0;E=k[C+4>>2]|0;if((x|0)<(E|0)|(x|0)==(E|0)&i>>>0>>0)J=h;else{C=f;D=h;while(1){if((D|0)==(e|0))break a;h=D;K=k[h>>2]|0;L=k[h+4>>2]|0;if((x|0)<(L|0)|(x|0)==(L|0)&i>>>0>>0){M=C;N=K;O=L;P=D;break}L=D;D=D+8|0;C=L}C=P;k[C>>2]=F;k[C+4>>2]=E;C=e;k[C>>2]=N;k[C+4>>2]=O;J=M+16|0}if((J|0)==(e|0))break a;else{Q=J;R=e}while(1){C=f;D=k[C>>2]|0;L=k[C+4>>2]|0;C=Q;while(1){K=C;h=k[K>>2]|0;S=k[K+4>>2]|0;K=C+8|0;if((L|0)<(S|0)|(L|0)==(S|0)&D>>>0>>0){T=K;U=h;V=S;W=C;break}else C=K}C=R;while(1){K=C+-8|0;S=K;h=k[S>>2]|0;X=k[S+4>>2]|0;if((L|0)<(X|0)|(L|0)==(X|0)&D>>>0>>0)C=K;else{Y=K;Z=h;_=X;break}}if(W>>>0>=Y>>>0){f=W;continue b}C=W;k[C>>2]=Z;k[C+4>>2]=_;C=Y;k[C>>2]=U;k[C+4>>2]=V;Q=T;R=Y}}while(0);i=f+8|0;c:do if(i>>>0>>0){x=i;y=A;z=v;E=B;while(1){F=z;C=k[F>>2]|0;D=k[F+4>>2]|0;F=x;while(1){L=F;X=k[L>>2]|0;h=k[L+4>>2]|0;L=F+8|0;if((h|0)<(D|0)|(h|0)==(D|0)&X>>>0>>0)F=L;else{$=L;aa=X;ba=h;ca=F;break}}F=y;while(1){h=F+-8|0;X=h;L=k[X>>2]|0;K=k[X+4>>2]|0;if((K|0)<(D|0)|(K|0)==(D|0)&L>>>0>>0){da=h;ea=L;fa=K;break}else F=h}if(ca>>>0>da>>>0){ga=ca;ha=z;ia=E;break c}F=ca;k[F>>2]=ea;k[F+4>>2]=fa;F=da;k[F>>2]=aa;k[F+4>>2]=ba;x=$;y=da;z=(z|0)==(ca|0)?da:z;E=E+1|0}}else{ga=i;ha=v;ia=B}while(0);if((ga|0)!=(ha|0)?(v=ha,i=k[v>>2]|0,E=k[v+4>>2]|0,v=ga,z=k[v>>2]|0,y=k[v+4>>2]|0,(E|0)<(y|0)|(E|0)==(y|0)&i>>>0>>0):0){v=ga;k[v>>2]=i;k[v+4>>2]=E;E=ha;k[E>>2]=z;k[E+4>>2]=y;ja=ia+1|0}else ja=ia;if(!ja){ka=pZa(f,ga,c)|0;y=ga+8|0;if(pZa(y,a,c)|0){m=46;break}if(ka){f=y;continue}}y=ga;if((y-g|0)>=(b-y|0)){la=f;ma=ga;m=45;break}oZa(f,ga,c);f=ga+8|0}if((m|0)==45){m=0;oZa(ma+8|0,a,c);d=la;a=ma;continue}else if((m|0)==46){m=0;if(ka)break;else{d=f;a=ga;continue}}}if((m|0)==4){ga=l;a=k[ga>>2]|0;d=k[ga+4>>2]|0;ga=j;ka=k[ga>>2]|0;ma=k[ga+4>>2]|0;if((d|0)<(ma|0)|(d|0)==(ma|0)&a>>>0>>0){ga=j;k[ga>>2]=a;k[ga+4>>2]=d;d=l;k[d>>2]=ka;k[d+4>>2]=ma}}else if((m|0)==6)q_a(n,n+8|0,o,c)|0;else if((m|0)==7)r_a(p,p+8|0,p+16|0,q,c)|0;else if((m|0)==8)s_a(r,r+8|0,r+16|0,r+24|0,s,c)|0;else if((m|0)==10)t_a(t,u,c);return}function pZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;switch(b-a>>3|0){case 1:case 0:{d=1;break}case 2:{e=b+-8|0;f=e;g=k[f>>2]|0;h=k[f+4>>2]|0;f=a;i=k[f>>2]|0;j=k[f+4>>2]|0;if((h|0)<(j|0)|(h|0)==(j|0)&g>>>0>>0){f=a;k[f>>2]=g;k[f+4>>2]=h;h=e;k[h>>2]=i;k[h+4>>2]=j;d=1}else d=1;break}case 3:{q_a(a,a+8|0,b+-8|0,c)|0;d=1;break}case 4:{r_a(a,a+8|0,a+16|0,b+-8|0,c)|0;d=1;break}case 5:{s_a(a,a+8|0,a+16|0,a+24|0,b+-8|0,c)|0;d=1;break}default:{j=a+16|0;q_a(a,a+8|0,j,c)|0;c=0;h=a+24|0;i=j;while(1){if((h|0)==(b|0)){l=1;m=0;break}j=h;e=k[j>>2]|0;f=k[j+4>>2]|0;j=i;g=k[j>>2]|0;n=k[j+4>>2]|0;if((f|0)<(n|0)|(f|0)==(n|0)&e>>>0>>0){j=g;g=n;n=h;o=i;while(1){p=n;k[p>>2]=j;k[p+4>>2]=g;if((o|0)==(a|0)){q=a;break}p=o+-8|0;r=p;j=k[r>>2]|0;g=k[r+4>>2]|0;if(!((f|0)<(g|0)|(f|0)==(g|0)&e>>>0>>0)){q=o;break}else{r=o;o=p;n=r}}n=q;k[n>>2]=e;k[n+4>>2]=f;n=c+1|0;if((n|0)==8){l=0;m=(h+8|0)==(b|0);break}else s=n}else s=c;n=h;c=s;h=h+8|0;i=n}d=m|l}}return d|0}function qZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;d=a;a=b;a:while(1){b=a;e=a+-8|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>3;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;l=e;m=4;break a;break}case 3:{n=f;o=e;m=6;break a;break}case 4:{p=f;q=e;m=7;break a;break}case 5:{r=f;s=e;m=8;break a;break}default:{}}if((h|0)<248){t=f;u=a;m=10;break a}v=f+(((i|0)/2|0)<<3)|0;if((h|0)>7992){h=(i|0)/4|0;w=w_a(f,f+(h<<3)|0,v,v+(h<<3)|0,e,c)|0}else w=u_a(f,v,e,c)|0;h=f;i=k[h>>2]|0;x=k[h+4>>2]|0;h=v;y=k[h>>2]|0;z=k[h+4>>2]|0;do if(x>>>0>>0|(x|0)==(z|0)&i>>>0>>0){A=e;B=w}else{h=e;while(1){C=h+-8|0;if((f|0)==(C|0))break;D=C;E=k[D>>2]|0;F=k[D+4>>2]|0;if(F>>>0>>0|(F|0)==(z|0)&E>>>0>>0){G=C;H=E;I=F;m=29;break}else h=C}if((m|0)==29){m=0;h=f;k[h>>2]=H;k[h+4>>2]=I;h=G;k[h>>2]=i;k[h+4>>2]=x;A=G;B=w+1|0;break}h=f+8|0;C=e;F=k[C>>2]|0;E=k[C+4>>2]|0;if(x>>>0>>0|(x|0)==(E|0)&i>>>0>>0)J=h;else{C=f;D=h;while(1){if((D|0)==(e|0))break a;h=D;K=k[h>>2]|0;L=k[h+4>>2]|0;if(x>>>0>>0|(x|0)==(L|0)&i>>>0>>0){M=C;N=K;O=L;P=D;break}L=D;D=D+8|0;C=L}C=P;k[C>>2]=F;k[C+4>>2]=E;C=e;k[C>>2]=N;k[C+4>>2]=O;J=M+16|0}if((J|0)==(e|0))break a;else{Q=J;R=e}while(1){C=f;D=k[C>>2]|0;L=k[C+4>>2]|0;C=Q;while(1){K=C;h=k[K>>2]|0;S=k[K+4>>2]|0;K=C+8|0;if(L>>>0>>0|(L|0)==(S|0)&D>>>0>>0){T=K;U=h;V=S;W=C;break}else C=K}C=R;while(1){K=C+-8|0;S=K;h=k[S>>2]|0;X=k[S+4>>2]|0;if(L>>>0>>0|(L|0)==(X|0)&D>>>0>>0)C=K;else{Y=K;Z=h;_=X;break}}if(W>>>0>=Y>>>0){f=W;continue b}C=W;k[C>>2]=Z;k[C+4>>2]=_;C=Y;k[C>>2]=U;k[C+4>>2]=V;Q=T;R=Y}}while(0);i=f+8|0;c:do if(i>>>0>>0){x=i;y=A;z=v;E=B;while(1){F=z;C=k[F>>2]|0;D=k[F+4>>2]|0;F=x;while(1){L=F;X=k[L>>2]|0;h=k[L+4>>2]|0;L=F+8|0;if(h>>>0>>0|(h|0)==(D|0)&X>>>0>>0)F=L;else{$=L;aa=X;ba=h;ca=F;break}}F=y;while(1){h=F+-8|0;X=h;L=k[X>>2]|0;K=k[X+4>>2]|0;if(K>>>0>>0|(K|0)==(D|0)&L>>>0>>0){da=h;ea=L;fa=K;break}else F=h}if(ca>>>0>da>>>0){ga=ca;ha=z;ia=E;break c}F=ca;k[F>>2]=ea;k[F+4>>2]=fa;F=da;k[F>>2]=aa;k[F+4>>2]=ba;x=$;y=da;z=(z|0)==(ca|0)?da:z;E=E+1|0}}else{ga=i;ha=v;ia=B}while(0);if((ga|0)!=(ha|0)?(v=ha,i=k[v>>2]|0,E=k[v+4>>2]|0,v=ga,z=k[v>>2]|0,y=k[v+4>>2]|0,E>>>0>>0|(E|0)==(y|0)&i>>>0>>0):0){v=ga;k[v>>2]=i;k[v+4>>2]=E;E=ha;k[E>>2]=z;k[E+4>>2]=y;ja=ia+1|0}else ja=ia;if(!ja){ka=rZa(f,ga,c)|0;y=ga+8|0;if(rZa(y,a,c)|0){m=46;break}if(ka){f=y;continue}}y=ga;if((y-g|0)>=(b-y|0)){la=f;ma=ga;m=45;break}qZa(f,ga,c);f=ga+8|0}if((m|0)==45){m=0;qZa(ma+8|0,a,c);d=la;a=ma;continue}else if((m|0)==46){m=0;if(ka)break;else{d=f;a=ga;continue}}}if((m|0)==4){ga=l;a=k[ga>>2]|0;d=k[ga+4>>2]|0;ga=j;ka=k[ga>>2]|0;ma=k[ga+4>>2]|0;if(d>>>0>>0|(d|0)==(ma|0)&a>>>0>>0){ga=j;k[ga>>2]=a;k[ga+4>>2]=d;d=l;k[d>>2]=ka;k[d+4>>2]=ma}}else if((m|0)==6)u_a(n,n+8|0,o,c)|0;else if((m|0)==7)v_a(p,p+8|0,p+16|0,q,c)|0;else if((m|0)==8)w_a(r,r+8|0,r+16|0,r+24|0,s,c)|0;else if((m|0)==10)x_a(t,u,c);return}function rZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;switch(b-a>>3|0){case 1:case 0:{d=1;break}case 2:{e=b+-8|0;f=e;g=k[f>>2]|0;h=k[f+4>>2]|0;f=a;i=k[f>>2]|0;j=k[f+4>>2]|0;if(h>>>0>>0|(h|0)==(j|0)&g>>>0>>0){f=a;k[f>>2]=g;k[f+4>>2]=h;h=e;k[h>>2]=i;k[h+4>>2]=j;d=1}else d=1;break}case 3:{u_a(a,a+8|0,b+-8|0,c)|0;d=1;break}case 4:{v_a(a,a+8|0,a+16|0,b+-8|0,c)|0;d=1;break}case 5:{w_a(a,a+8|0,a+16|0,a+24|0,b+-8|0,c)|0;d=1;break}default:{j=a+16|0;u_a(a,a+8|0,j,c)|0;c=0;h=a+24|0;i=j;while(1){if((h|0)==(b|0)){l=1;m=0;break}j=h;e=k[j>>2]|0;f=k[j+4>>2]|0;j=i;g=k[j>>2]|0;n=k[j+4>>2]|0;if(f>>>0>>0|(f|0)==(n|0)&e>>>0>>0){j=g;g=n;n=h;o=i;while(1){p=n;k[p>>2]=j;k[p+4>>2]=g;if((o|0)==(a|0)){q=a;break}p=o+-8|0;r=p;j=k[r>>2]|0;g=k[r+4>>2]|0;if(!(f>>>0>>0|(f|0)==(g|0)&e>>>0>>0)){q=o;break}else{r=o;o=p;n=r}}n=q;k[n>>2]=e;k[n+4>>2]=f;n=c+1|0;if((n|0)==8){l=0;m=(h+8|0)==(b|0);break}else s=n}else s=c;n=h;c=s;h=h+8|0;i=n}d=m|l}}return d|0}function sZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0.0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0.0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0,Z=0,_=0.0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;d=a;a=b;a:while(1){b=a;e=a+-4|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>2;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;k=e;l=4;break a;break}case 3:{m=f;n=e;l=6;break a;break}case 4:{p=f;q=e;l=7;break a;break}case 5:{r=f;s=e;l=8;break a;break}default:{}}if((h|0)<124){t=f;u=a;l=10;break a}v=f+(((i|0)/2|0)<<2)|0;if((h|0)>3996){h=(i|0)/4|0;w=A_a(f,f+(h<<2)|0,v,v+(h<<2)|0,e,c)|0}else w=y_a(f,v,e,c)|0;x=+o[f>>2];y=+o[v>>2];do if(x>2];if(B>2]=C;o[D>>2]=x;z=D;A=w+1|0;break}h=f+4|0;B=+o[e>>2];if(x>2];if(x>2]=B;o[e>>2]=I;E=H+8|0}if((E|0)==(e|0))break a;else{K=E;L=e}while(1){G=+o[f>>2];i=K;while(1){M=+o[i>>2];F=i+4|0;if(G>2];if(G>>0>=Q>>>0){f=P;continue b}o[P>>2]=R;o[Q>>2]=N;K=O;L=Q}}while(0);i=f+4|0;c:do if(i>>>0>>0){F=i;h=z;S=v;T=A;while(1){x=+o[S>>2];U=F;while(1){y=+o[U>>2];V=U+4|0;if(y>2];if(y>>0>Z>>>0){$=Y;aa=S;ba=T;break c}o[Y>>2]=_;o[Z>>2]=W;F=X;h=Z;S=(S|0)==(Y|0)?Z:S;T=T+1|0}}else{$=i;aa=v;ba=A}while(0);if(($|0)!=(aa|0)?(x=+o[aa>>2],y=+o[$>>2],x>2]=x;o[aa>>2]=y;ca=ba+1|0}else ca=ba;if(!ca){da=tZa(f,$,c)|0;v=$+4|0;if(tZa(v,a,c)|0){l=46;break}if(da){f=v;continue}}v=$;if((v-g|0)>=(b-v|0)){ea=f;fa=$;l=45;break}sZa(f,$,c);f=$+4|0}if((l|0)==45){l=0;sZa(fa+4|0,a,c);d=ea;a=fa;continue}else if((l|0)==46){l=0;if(da)break;else{d=f;a=$;continue}}}if((l|0)==4){W=+o[k>>2];_=+o[j>>2];if(W<_){o[j>>2]=W;o[k>>2]=_}}else if((l|0)==6)y_a(m,m+4|0,n,c)|0;else if((l|0)==7)z_a(p,p+4|0,p+8|0,q,c)|0;else if((l|0)==8)A_a(r,r+4|0,r+8|0,r+12|0,s,c)|0;else if((l|0)==10)B_a(t,u,c);return}function tZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0,i=0,j=0,l=0,m=0,n=0,p=0,q=0,r=0;switch(b-a>>2|0){case 1:case 0:{d=1;break}case 2:{e=b+-4|0;f=+o[e>>2];g=+o[a>>2];if(f>2]=f;o[e>>2]=g;d=1}else d=1;break}case 3:{y_a(a,a+4|0,b+-4|0,c)|0;d=1;break}case 4:{z_a(a,a+4|0,a+8|0,b+-4|0,c)|0;d=1;break}case 5:{A_a(a,a+4|0,a+8|0,a+12|0,b+-4|0,c)|0;d=1;break}default:{e=a+8|0;y_a(a,a+4|0,e,c)|0;c=0;h=a+12|0;i=e;while(1){if((h|0)==(b|0)){j=1;l=0;break}g=+o[h>>2];if(g<+o[i>>2]){e=h;m=i;while(1){k[e>>2]=k[m>>2];if((m|0)==(a|0)){n=m;break}p=m+-4|0;if(g<+o[p>>2]){q=m;m=p;e=q}else{n=m;break}}o[n>>2]=g;m=c+1|0;if((m|0)==8){j=0;l=(h+4|0)==(b|0);break}else r=m}else r=c;m=h;c=r;h=h+4|0;i=m}d=l|j}}return d|0}function uZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0.0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0.0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0,Z=0,_=0.0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;d=a;a=b;a:while(1){b=a;e=a+-8|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>3;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;k=e;l=4;break a;break}case 3:{m=f;n=e;l=6;break a;break}case 4:{o=f;q=e;l=7;break a;break}case 5:{r=f;s=e;l=8;break a;break}default:{}}if((h|0)<248){t=f;u=a;l=10;break a}v=f+(((i|0)/2|0)<<3)|0;if((h|0)>7992){h=(i|0)/4|0;w=E_a(f,f+(h<<3)|0,v,v+(h<<3)|0,e,c)|0}else w=C_a(f,v,e,c)|0;x=+p[f>>3];y=+p[v>>3];do if(x>3];if(B>3]=C;p[D>>3]=x;z=D;A=w+1|0;break}h=f+8|0;B=+p[e>>3];if(x>3];if(x>3]=B;p[e>>3]=I;E=H+16|0}if((E|0)==(e|0))break a;else{K=E;L=e}while(1){G=+p[f>>3];i=K;while(1){M=+p[i>>3];F=i+8|0;if(G>3];if(G>>0>=Q>>>0){f=P;continue b}p[P>>3]=R;p[Q>>3]=N;K=O;L=Q}}while(0);i=f+8|0;c:do if(i>>>0>>0){F=i;h=z;S=v;T=A;while(1){x=+p[S>>3];U=F;while(1){y=+p[U>>3];V=U+8|0;if(y>3];if(y>>0>Z>>>0){$=Y;aa=S;ba=T;break c}p[Y>>3]=_;p[Z>>3]=W;F=X;h=Z;S=(S|0)==(Y|0)?Z:S;T=T+1|0}}else{$=i;aa=v;ba=A}while(0);if(($|0)!=(aa|0)?(x=+p[aa>>3],y=+p[$>>3],x>3]=x;p[aa>>3]=y;ca=ba+1|0}else ca=ba;if(!ca){da=vZa(f,$,c)|0;v=$+8|0;if(vZa(v,a,c)|0){l=46;break}if(da){f=v;continue}}v=$;if((v-g|0)>=(b-v|0)){ea=f;fa=$;l=45;break}uZa(f,$,c);f=$+8|0}if((l|0)==45){l=0;uZa(fa+8|0,a,c);d=ea;a=fa;continue}else if((l|0)==46){l=0;if(da)break;else{d=f;a=$;continue}}}if((l|0)==4){W=+p[k>>3];_=+p[j>>3];if(W<_){p[j>>3]=W;p[k>>3]=_}}else if((l|0)==6)C_a(m,m+8|0,n,c)|0;else if((l|0)==7)D_a(o,o+8|0,o+16|0,q,c)|0;else if((l|0)==8)E_a(r,r+8|0,r+16|0,r+24|0,s,c)|0;else if((l|0)==10)F_a(t,u,c);return}function vZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,q=0,r=0;switch(b-a>>3|0){case 1:case 0:{d=1;break}case 2:{e=b+-8|0;f=+p[e>>3];g=+p[a>>3];if(f>3]=f;p[e>>3]=g;d=1}else d=1;break}case 3:{C_a(a,a+8|0,b+-8|0,c)|0;d=1;break}case 4:{D_a(a,a+8|0,a+16|0,b+-8|0,c)|0;d=1;break}case 5:{E_a(a,a+8|0,a+16|0,a+24|0,b+-8|0,c)|0;d=1;break}default:{e=a+16|0;C_a(a,a+8|0,e,c)|0;c=0;h=a+24|0;i=e;while(1){if((h|0)==(b|0)){j=1;k=0;break}g=+p[h>>3];f=+p[i>>3];if(g>3]=l;if((m|0)==(a|0)){n=a;break}o=m+-8|0;l=+p[o>>3];if(!(g>3]=g;e=c+1|0;if((e|0)==8){j=0;k=(h+8|0)==(b|0);break}else r=e}else r=c;e=h;c=r;h=h+8|0;i=e}d=k|j}}return d|0}function wZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0.0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0.0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0,Z=0,_=0.0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;d=a;a=b;a:while(1){b=a;e=a+-8|0;f=d;b:while(1){g=f;h=b-g|0;i=h>>3;switch(i|0){case 1:case 0:{break a;break}case 2:{j=f;k=e;l=4;break a;break}case 3:{m=f;n=e;l=6;break a;break}case 4:{o=f;q=e;l=7;break a;break}case 5:{r=f;s=e;l=8;break a;break}default:{}}if((h|0)<248){t=f;u=a;l=10;break a}v=f+(((i|0)/2|0)<<3)|0;if((h|0)>7992){h=(i|0)/4|0;w=xZa(f,f+(h<<3)|0,v,v+(h<<3)|0,e,c)|0}else w=G_a(f,v,e,c)|0;x=+p[f>>3];y=+p[v>>3];do if(x>3];if(B>3]=C;p[D>>3]=x;z=D;A=w+1|0;break}h=f+8|0;B=+p[e>>3];if(x>3];if(x>3]=B;p[e>>3]=I;E=H+16|0}if((E|0)==(e|0))break a;else{K=E;L=e}while(1){G=+p[f>>3];i=K;while(1){M=+p[i>>3];F=i+8|0;if(G>3];if(G>>0>=Q>>>0){f=P;continue b}p[P>>3]=R;p[Q>>3]=N;K=O;L=Q}}while(0);i=f+8|0;c:do if(i>>>0>>0){F=i;h=z;S=v;T=A;while(1){x=+p[S>>3];U=F;while(1){y=+p[U>>3];V=U+8|0;if(y>3];if(y>>0>Z>>>0){$=Y;aa=S;ba=T;break c}p[Y>>3]=_;p[Z>>3]=W;F=X;h=Z;S=(S|0)==(Y|0)?Z:S;T=T+1|0}}else{$=i;aa=v;ba=A}while(0);if(($|0)!=(aa|0)?(x=+p[aa>>3],y=+p[$>>3],x>3]=x;p[aa>>3]=y;ca=ba+1|0}else ca=ba;if(!ca){da=yZa(f,$,c)|0;v=$+8|0;if(yZa(v,a,c)|0){l=46;break}if(da){f=v;continue}}v=$;if((v-g|0)>=(b-v|0)){ea=f;fa=$;l=45;break}wZa(f,$,c);f=$+8|0}if((l|0)==45){l=0;wZa(fa+8|0,a,c);d=ea;a=fa;continue}else if((l|0)==46){l=0;if(da)break;else{d=f;a=$;continue}}}if((l|0)==4){W=+p[k>>3];_=+p[j>>3];if(W<_){p[j>>3]=W;p[k>>3]=_}}else if((l|0)==6)G_a(m,m+8|0,n,c)|0;else if((l|0)==7)H_a(o,o+8|0,o+16|0,q,c)|0;else if((l|0)==8)xZa(r,r+8|0,r+16|0,r+24|0,s,c)|0;else if((l|0)==10)I_a(t,u,c);return}function xZa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0.0,i=0.0,j=0;g=H_a(a,b,c,d,f)|0;h=+p[e>>3];i=+p[d>>3];if(h>3]=h;p[e>>3]=i;e=g+1|0;i=+p[d>>3];h=+p[c>>3];if(i>3]=i;p[d>>3]=h;d=g+2|0;h=+p[c>>3];i=+p[b>>3];if(h>3]=h;p[c>>3]=i;i=+p[b>>3];h=+p[a>>3];if(i>3]=i;p[b>>3]=h;j=g+4|0}else j=g+3|0}else j=d}else j=e}else j=g;return j|0}function yZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,q=0,r=0;switch(b-a>>3|0){case 1:case 0:{d=1;break}case 2:{e=b+-8|0;f=+p[e>>3];g=+p[a>>3];if(f>3]=f;p[e>>3]=g;d=1}else d=1;break}case 3:{G_a(a,a+8|0,b+-8|0,c)|0;d=1;break}case 4:{H_a(a,a+8|0,a+16|0,b+-8|0,c)|0;d=1;break}case 5:{xZa(a,a+8|0,a+16|0,a+24|0,b+-8|0,c)|0;d=1;break}default:{e=a+16|0;G_a(a,a+8|0,e,c)|0;c=0;h=a+24|0;i=e;while(1){if((h|0)==(b|0)){j=1;k=0;break}g=+p[h>>3];f=+p[i>>3];if(g>3]=l;if((m|0)==(a|0)){n=a;break}o=m+-8|0;l=+p[o>>3];if(!(g>3]=g;e=c+1|0;if((e|0)==8){j=0;k=(h+8|0)==(b|0);break}else r=e}else r=c;e=h;c=r;h=h+8|0;i=e}d=k|j}}return d|0}function zZa(a){a=a|0;td(66128)|0;k[16531]=1;return}function AZa(a,b){a=a|0;b=b|0;k[16531]=(k[16531]|0)+1;return}function BZa(a){a=a|0;a=(k[16531]|0)+-1|0;k[16531]=a;if((a|0)==0?(x=0,Ba(567,66128)|0,a=x,x=0,a&1):0){a=Hc(0)|0;Fg(a)}return}function CZa(a){a=a|0;if((i[17224]|0)==0?(Bb(17224)|0)!=0:0){J_a(66156,5489);Kc(17224)}return K_a(66156)|0}function DZa(a){a=a|0;td(66128)|0;k[16531]=1;return}function EZa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;d=i[b>>0]|0;e=i[a>>0]|0;f=i[c>>0]|0;g=f<<24>>24>24;do if(d<<24>>24>24){if(g){i[a>>0]=f;i[c>>0]=e;h=1;break}i[a>>0]=d;i[b>>0]=e;j=i[c>>0]|0;if(j<<24>>24>24){i[b>>0]=j;i[c>>0]=e;h=2}else h=1}else if(g){i[b>>0]=f;i[c>>0]=d;j=i[b>>0]|0;k=i[a>>0]|0;if(j<<24>>24>24){i[a>>0]=j;i[b>>0]=k;h=2}else h=1}else h=0;while(0);return h|0}function FZa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=EZa(a,b,c,e)|0;e=i[d>>0]|0;g=i[c>>0]|0;if(e<<24>>24>24){i[c>>0]=e;i[d>>0]=g;g=f+1|0;d=i[c>>0]|0;e=i[b>>0]|0;if(d<<24>>24>24){i[b>>0]=d;i[c>>0]=e;e=i[b>>0]|0;c=i[a>>0]|0;if(e<<24>>24>24){i[a>>0]=e;i[b>>0]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function GZa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=FZa(a,b,c,d,f)|0;f=i[e>>0]|0;h=i[d>>0]|0;if(f<<24>>24>24){i[d>>0]=f;i[e>>0]=h;h=g+1|0;e=i[d>>0]|0;f=i[c>>0]|0;if(e<<24>>24>24){i[c>>0]=e;i[d>>0]=f;f=g+2|0;d=i[c>>0]|0;e=i[b>>0]|0;if(d<<24>>24>24){i[b>>0]=d;i[c>>0]=e;e=i[b>>0]|0;c=i[a>>0]|0;if(e<<24>>24>24){i[a>>0]=e;i[b>>0]=c;j=g+4|0}else j=g+3|0}else j=f}else j=h}else j=g;return j|0}function HZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=a+2|0;EZa(a,a+1|0,d,c)|0;c=a+3|0;e=d;while(1){if((c|0)==(b|0))break;d=i[c>>0]|0;f=i[e>>0]|0;if(d<<24>>24>24){g=f;f=c;h=e;while(1){i[f>>0]=g;if((h|0)==(a|0)){j=a;break}k=h+-1|0;g=i[k>>0]|0;if(d<<24>>24>=g<<24>>24){j=h;break}else{l=h;h=k;f=l}}i[j>>0]=d}f=c;c=c+1|0;e=f}return}function IZa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;d=k[b>>2]|0;e=k[a>>2]|0;f=k[c>>2]|0;g=(f|0)<(d|0);do if((d|0)<(e|0)){if(g){k[a>>2]=f;k[c>>2]=e;h=1;break}k[a>>2]=d;k[b>>2]=e;i=k[c>>2]|0;if((i|0)<(e|0)){k[b>>2]=i;k[c>>2]=e;h=2}else h=1}else if(g){k[b>>2]=f;k[c>>2]=d;i=k[b>>2]|0;j=k[a>>2]|0;if((i|0)<(j|0)){k[a>>2]=i;k[b>>2]=j;h=2}else h=1}else h=0;while(0);return h|0}function JZa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=IZa(a,b,c,e)|0;e=k[d>>2]|0;g=k[c>>2]|0;if((e|0)<(g|0)){k[c>>2]=e;k[d>>2]=g;g=f+1|0;d=k[c>>2]|0;e=k[b>>2]|0;if((d|0)<(e|0)){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if((e|0)<(c|0)){k[a>>2]=e;k[b>>2]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function KZa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=JZa(a,b,c,d,f)|0;f=k[e>>2]|0;h=k[d>>2]|0;if((f|0)<(h|0)){k[d>>2]=f;k[e>>2]=h;h=g+1|0;e=k[d>>2]|0;f=k[c>>2]|0;if((e|0)<(f|0)){k[c>>2]=e;k[d>>2]=f;f=g+2|0;d=k[c>>2]|0;e=k[b>>2]|0;if((d|0)<(e|0)){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if((e|0)<(c|0)){k[a>>2]=e;k[b>>2]=c;i=g+4|0}else i=g+3|0}else i=f}else i=h}else i=g;return i|0}function LZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=a+8|0;IZa(a,a+4|0,d,c)|0;c=a+12|0;e=d;while(1){if((c|0)==(b|0))break;d=k[c>>2]|0;f=k[e>>2]|0;if((d|0)<(f|0)){g=f;f=c;h=e;while(1){k[f>>2]=g;if((h|0)==(a|0)){i=a;break}j=h+-4|0;g=k[j>>2]|0;if((d|0)>=(g|0)){i=h;break}else{l=h;h=j;f=l}}k[i>>2]=d}f=c;c=c+4|0;e=f}return}function MZa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;d=i[b>>0]|0;e=i[a>>0]|0;f=i[c>>0]|0;g=f<<24>>24>24;do if(d<<24>>24>24){if(g){i[a>>0]=f;i[c>>0]=e;h=1;break}i[a>>0]=d;i[b>>0]=e;j=i[c>>0]|0;if(j<<24>>24>24){i[b>>0]=j;i[c>>0]=e;h=2}else h=1}else if(g){i[b>>0]=f;i[c>>0]=d;j=i[b>>0]|0;k=i[a>>0]|0;if(j<<24>>24>24){i[a>>0]=j;i[b>>0]=k;h=2}else h=1}else h=0;while(0);return h|0}function NZa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=MZa(a,b,c,e)|0;e=i[d>>0]|0;g=i[c>>0]|0;if(e<<24>>24>24){i[c>>0]=e;i[d>>0]=g;g=f+1|0;d=i[c>>0]|0;e=i[b>>0]|0;if(d<<24>>24>24){i[b>>0]=d;i[c>>0]=e;e=i[b>>0]|0;c=i[a>>0]|0;if(e<<24>>24>24){i[a>>0]=e;i[b>>0]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function OZa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=NZa(a,b,c,d,f)|0;f=i[e>>0]|0;h=i[d>>0]|0;if(f<<24>>24>24){i[d>>0]=f;i[e>>0]=h;h=g+1|0;e=i[d>>0]|0;f=i[c>>0]|0;if(e<<24>>24>24){i[c>>0]=e;i[d>>0]=f;f=g+2|0;d=i[c>>0]|0;e=i[b>>0]|0;if(d<<24>>24>24){i[b>>0]=d;i[c>>0]=e;e=i[b>>0]|0;c=i[a>>0]|0;if(e<<24>>24>24){i[a>>0]=e;i[b>>0]=c;j=g+4|0}else j=g+3|0}else j=f}else j=h}else j=g;return j|0}function PZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=a+2|0;MZa(a,a+1|0,d,c)|0;c=a+3|0;e=d;while(1){if((c|0)==(b|0))break;d=i[c>>0]|0;f=i[e>>0]|0;if(d<<24>>24>24){g=f;f=c;h=e;while(1){i[f>>0]=g;if((h|0)==(a|0)){j=a;break}k=h+-1|0;g=i[k>>0]|0;if(d<<24>>24>=g<<24>>24){j=h;break}else{l=h;h=k;f=l}}i[j>>0]=d}f=c;c=c+1|0;e=f}return}function QZa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;d=i[b>>0]|0;e=i[a>>0]|0;f=i[c>>0]|0;g=(f&255)<(d&255);do if((d&255)<(e&255)){if(g){i[a>>0]=f;i[c>>0]=e;h=1;break}i[a>>0]=d;i[b>>0]=e;j=i[c>>0]|0;if((j&255)<(e&255)){i[b>>0]=j;i[c>>0]=e;h=2}else h=1}else if(g){i[b>>0]=f;i[c>>0]=d;j=i[b>>0]|0;k=i[a>>0]|0;if((j&255)<(k&255)){i[a>>0]=j;i[b>>0]=k;h=2}else h=1}else h=0;while(0);return h|0}function RZa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=QZa(a,b,c,e)|0;e=i[d>>0]|0;g=i[c>>0]|0;if((e&255)<(g&255)){i[c>>0]=e;i[d>>0]=g;g=f+1|0;d=i[c>>0]|0;e=i[b>>0]|0;if((d&255)<(e&255)){i[b>>0]=d;i[c>>0]=e;e=i[b>>0]|0;c=i[a>>0]|0;if((e&255)<(c&255)){i[a>>0]=e;i[b>>0]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function SZa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=RZa(a,b,c,d,f)|0;f=i[e>>0]|0;h=i[d>>0]|0;if((f&255)<(h&255)){i[d>>0]=f;i[e>>0]=h;h=g+1|0;e=i[d>>0]|0;f=i[c>>0]|0;if((e&255)<(f&255)){i[c>>0]=e;i[d>>0]=f;f=g+2|0;d=i[c>>0]|0;e=i[b>>0]|0;if((d&255)<(e&255)){i[b>>0]=d;i[c>>0]=e;e=i[b>>0]|0;c=i[a>>0]|0;if((e&255)<(c&255)){i[a>>0]=e;i[b>>0]=c;j=g+4|0}else j=g+3|0}else j=f}else j=h}else j=g;return j|0}function TZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=a+2|0;QZa(a,a+1|0,d,c)|0;c=a+3|0;e=d;while(1){if((c|0)==(b|0))break;d=i[c>>0]|0;f=i[e>>0]|0;if((d&255)<(f&255)){g=f;f=c;h=e;while(1){i[f>>0]=g;if((h|0)==(a|0)){j=a;break}k=h+-1|0;g=i[k>>0]|0;if((d&255)>=(g&255)){j=h;break}else{l=h;h=k;f=l}}i[j>>0]=d}f=c;c=c+1|0;e=f}return}function UZa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,k=0;d=j[b>>1]|0;e=j[a>>1]|0;f=j[c>>1]|0;g=f<<16>>16>16;do if(d<<16>>16>16){if(g){j[a>>1]=f;j[c>>1]=e;h=1;break}j[a>>1]=d;j[b>>1]=e;i=j[c>>1]|0;if(i<<16>>16>16){j[b>>1]=i;j[c>>1]=e;h=2}else h=1}else if(g){j[b>>1]=f;j[c>>1]=d;i=j[b>>1]|0;k=j[a>>1]|0;if(i<<16>>16>16){j[a>>1]=i;j[b>>1]=k;h=2}else h=1}else h=0;while(0);return h|0}function VZa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=UZa(a,b,c,e)|0;e=j[d>>1]|0;g=j[c>>1]|0;if(e<<16>>16>16){j[c>>1]=e;j[d>>1]=g;g=f+1|0;d=j[c>>1]|0;e=j[b>>1]|0;if(d<<16>>16>16){j[b>>1]=d;j[c>>1]=e;e=j[b>>1]|0;c=j[a>>1]|0;if(e<<16>>16>16){j[a>>1]=e;j[b>>1]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function WZa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=VZa(a,b,c,d,f)|0;f=j[e>>1]|0;h=j[d>>1]|0;if(f<<16>>16>16){j[d>>1]=f;j[e>>1]=h;h=g+1|0;e=j[d>>1]|0;f=j[c>>1]|0;if(e<<16>>16>16){j[c>>1]=e;j[d>>1]=f;f=g+2|0;d=j[c>>1]|0;e=j[b>>1]|0;if(d<<16>>16>16){j[b>>1]=d;j[c>>1]=e;e=j[b>>1]|0;c=j[a>>1]|0;if(e<<16>>16>16){j[a>>1]=e;j[b>>1]=c;i=g+4|0}else i=g+3|0}else i=f}else i=h}else i=g;return i|0}function XZa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0;d=a+4|0;UZa(a,a+2|0,d,c)|0;c=a+6|0;e=d;while(1){if((c|0)==(b|0))break;d=j[c>>1]|0;f=j[e>>1]|0;if(d<<16>>16>16){g=f;f=c;h=e;while(1){j[f>>1]=g;if((h|0)==(a|0)){i=a;break}k=h+-2|0;g=j[k>>1]|0;if(d<<16>>16>=g<<16>>16){i=h;break}else{l=h;h=k;f=l}}j[i>>1]=d}f=c;c=c+2|0;e=f}return}function YZa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,k=0;d=j[b>>1]|0;e=j[a>>1]|0;f=j[c>>1]|0;g=(f&65535)<(d&65535);do if((d&65535)<(e&65535)){if(g){j[a>>1]=f;j[c>>1]=e;h=1;break}j[a>>1]=d;j[b>>1]=e;i=j[c>>1]|0;if((i&65535)<(e&65535)){j[b>>1]=i;j[c>>1]=e;h=2}else h=1}else if(g){j[b>>1]=f;j[c>>1]=d;i=j[b>>1]|0;k=j[a>>1]|0;if((i&65535)<(k&65535)){j[a>>1]=i;j[b>>1]=k;h=2}else h=1}else h=0;while(0);return h|0}function ZZa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=YZa(a,b,c,e)|0;e=j[d>>1]|0;g=j[c>>1]|0;if((e&65535)<(g&65535)){j[c>>1]=e;j[d>>1]=g;g=f+1|0;d=j[c>>1]|0;e=j[b>>1]|0;if((d&65535)<(e&65535)){j[b>>1]=d;j[c>>1]=e;e=j[b>>1]|0;c=j[a>>1]|0;if((e&65535)<(c&65535)){j[a>>1]=e;j[b>>1]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function _Za(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=ZZa(a,b,c,d,f)|0;f=j[e>>1]|0;h=j[d>>1]|0;if((f&65535)<(h&65535)){j[d>>1]=f;j[e>>1]=h;h=g+1|0;e=j[d>>1]|0;f=j[c>>1]|0;if((e&65535)<(f&65535)){j[c>>1]=e;j[d>>1]=f;f=g+2|0;d=j[c>>1]|0;e=j[b>>1]|0;if((d&65535)<(e&65535)){j[b>>1]=d;j[c>>1]=e;e=j[b>>1]|0;c=j[a>>1]|0;if((e&65535)<(c&65535)){j[a>>1]=e;j[b>>1]=c;i=g+4|0}else i=g+3|0}else i=f}else i=h}else i=g;return i|0}function $Za(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,k=0,l=0;d=a+4|0;YZa(a,a+2|0,d,c)|0;c=a+6|0;e=d;while(1){if((c|0)==(b|0))break;d=j[c>>1]|0;f=j[e>>1]|0;if((d&65535)<(f&65535)){g=f;f=c;h=e;while(1){j[f>>1]=g;if((h|0)==(a|0)){i=a;break}k=h+-2|0;g=j[k>>1]|0;if((d&65535)>=(g&65535)){i=h;break}else{l=h;h=k;f=l}}j[i>>1]=d}f=c;c=c+2|0;e=f}return}function a_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;d=k[b>>2]|0;e=k[a>>2]|0;f=k[c>>2]|0;g=(f|0)<(d|0);do if((d|0)<(e|0)){if(g){k[a>>2]=f;k[c>>2]=e;h=1;break}k[a>>2]=d;k[b>>2]=e;i=k[c>>2]|0;if((i|0)<(e|0)){k[b>>2]=i;k[c>>2]=e;h=2}else h=1}else if(g){k[b>>2]=f;k[c>>2]=d;i=k[b>>2]|0;j=k[a>>2]|0;if((i|0)<(j|0)){k[a>>2]=i;k[b>>2]=j;h=2}else h=1}else h=0;while(0);return h|0}function b_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a_a(a,b,c,e)|0;e=k[d>>2]|0;g=k[c>>2]|0;if((e|0)<(g|0)){k[c>>2]=e;k[d>>2]=g;g=f+1|0;d=k[c>>2]|0;e=k[b>>2]|0;if((d|0)<(e|0)){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if((e|0)<(c|0)){k[a>>2]=e;k[b>>2]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function c_a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b_a(a,b,c,d,f)|0;f=k[e>>2]|0;h=k[d>>2]|0;if((f|0)<(h|0)){k[d>>2]=f;k[e>>2]=h;h=g+1|0;e=k[d>>2]|0;f=k[c>>2]|0;if((e|0)<(f|0)){k[c>>2]=e;k[d>>2]=f;f=g+2|0;d=k[c>>2]|0;e=k[b>>2]|0;if((d|0)<(e|0)){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if((e|0)<(c|0)){k[a>>2]=e;k[b>>2]=c;i=g+4|0}else i=g+3|0}else i=f}else i=h}else i=g;return i|0}function d_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=a+8|0;a_a(a,a+4|0,d,c)|0;c=a+12|0;e=d;while(1){if((c|0)==(b|0))break;d=k[c>>2]|0;f=k[e>>2]|0;if((d|0)<(f|0)){g=f;f=c;h=e;while(1){k[f>>2]=g;if((h|0)==(a|0)){i=a;break}j=h+-4|0;g=k[j>>2]|0;if((d|0)>=(g|0)){i=h;break}else{l=h;h=j;f=l}}k[i>>2]=d}f=c;c=c+4|0;e=f}return}function e_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;d=k[b>>2]|0;e=k[a>>2]|0;f=k[c>>2]|0;g=f>>>0>>0;do if(d>>>0>>0){if(g){k[a>>2]=f;k[c>>2]=e;h=1;break}k[a>>2]=d;k[b>>2]=e;i=k[c>>2]|0;if(i>>>0>>0){k[b>>2]=i;k[c>>2]=e;h=2}else h=1}else if(g){k[b>>2]=f;k[c>>2]=d;i=k[b>>2]|0;j=k[a>>2]|0;if(i>>>0>>0){k[a>>2]=i;k[b>>2]=j;h=2}else h=1}else h=0;while(0);return h|0}function f_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=e_a(a,b,c,e)|0;e=k[d>>2]|0;g=k[c>>2]|0;if(e>>>0>>0){k[c>>2]=e;k[d>>2]=g;g=f+1|0;d=k[c>>2]|0;e=k[b>>2]|0;if(d>>>0>>0){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if(e>>>0>>0){k[a>>2]=e;k[b>>2]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function g_a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=f_a(a,b,c,d,f)|0;f=k[e>>2]|0;h=k[d>>2]|0;if(f>>>0>>0){k[d>>2]=f;k[e>>2]=h;h=g+1|0;e=k[d>>2]|0;f=k[c>>2]|0;if(e>>>0>>0){k[c>>2]=e;k[d>>2]=f;f=g+2|0;d=k[c>>2]|0;e=k[b>>2]|0;if(d>>>0>>0){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if(e>>>0>>0){k[a>>2]=e;k[b>>2]=c;i=g+4|0}else i=g+3|0}else i=f}else i=h}else i=g;return i|0}function h_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=a+8|0;e_a(a,a+4|0,d,c)|0;c=a+12|0;e=d;while(1){if((c|0)==(b|0))break;d=k[c>>2]|0;f=k[e>>2]|0;if(d>>>0>>0){g=f;f=c;h=e;while(1){k[f>>2]=g;if((h|0)==(a|0)){i=a;break}j=h+-4|0;g=k[j>>2]|0;if(d>>>0>=g>>>0){i=h;break}else{l=h;h=j;f=l}}k[i>>2]=d}f=c;c=c+4|0;e=f}return}function i_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;d=k[b>>2]|0;e=k[a>>2]|0;f=k[c>>2]|0;g=(f|0)<(d|0);do if((d|0)<(e|0)){if(g){k[a>>2]=f;k[c>>2]=e;h=1;break}k[a>>2]=d;k[b>>2]=e;i=k[c>>2]|0;if((i|0)<(e|0)){k[b>>2]=i;k[c>>2]=e;h=2}else h=1}else if(g){k[b>>2]=f;k[c>>2]=d;i=k[b>>2]|0;j=k[a>>2]|0;if((i|0)<(j|0)){k[a>>2]=i;k[b>>2]=j;h=2}else h=1}else h=0;while(0);return h|0}function j_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i_a(a,b,c,e)|0;e=k[d>>2]|0;g=k[c>>2]|0;if((e|0)<(g|0)){k[c>>2]=e;k[d>>2]=g;g=f+1|0;d=k[c>>2]|0;e=k[b>>2]|0;if((d|0)<(e|0)){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if((e|0)<(c|0)){k[a>>2]=e;k[b>>2]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function k_a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=j_a(a,b,c,d,f)|0;f=k[e>>2]|0;h=k[d>>2]|0;if((f|0)<(h|0)){k[d>>2]=f;k[e>>2]=h;h=g+1|0;e=k[d>>2]|0;f=k[c>>2]|0;if((e|0)<(f|0)){k[c>>2]=e;k[d>>2]=f;f=g+2|0;d=k[c>>2]|0;e=k[b>>2]|0;if((d|0)<(e|0)){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if((e|0)<(c|0)){k[a>>2]=e;k[b>>2]=c;i=g+4|0}else i=g+3|0}else i=f}else i=h}else i=g;return i|0}function l_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=a+8|0;i_a(a,a+4|0,d,c)|0;c=a+12|0;e=d;while(1){if((c|0)==(b|0))break;d=k[c>>2]|0;f=k[e>>2]|0;if((d|0)<(f|0)){g=f;f=c;h=e;while(1){k[f>>2]=g;if((h|0)==(a|0)){i=a;break}j=h+-4|0;g=k[j>>2]|0;if((d|0)>=(g|0)){i=h;break}else{l=h;h=j;f=l}}k[i>>2]=d}f=c;c=c+4|0;e=f}return}function m_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;d=k[b>>2]|0;e=k[a>>2]|0;f=k[c>>2]|0;g=f>>>0>>0;do if(d>>>0>>0){if(g){k[a>>2]=f;k[c>>2]=e;h=1;break}k[a>>2]=d;k[b>>2]=e;i=k[c>>2]|0;if(i>>>0>>0){k[b>>2]=i;k[c>>2]=e;h=2}else h=1}else if(g){k[b>>2]=f;k[c>>2]=d;i=k[b>>2]|0;j=k[a>>2]|0;if(i>>>0>>0){k[a>>2]=i;k[b>>2]=j;h=2}else h=1}else h=0;while(0);return h|0}function n_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=m_a(a,b,c,e)|0;e=k[d>>2]|0;g=k[c>>2]|0;if(e>>>0>>0){k[c>>2]=e;k[d>>2]=g;g=f+1|0;d=k[c>>2]|0;e=k[b>>2]|0;if(d>>>0>>0){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if(e>>>0>>0){k[a>>2]=e;k[b>>2]=c;h=f+3|0}else h=f+2|0}else h=g}else h=f;return h|0}function o_a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=n_a(a,b,c,d,f)|0;f=k[e>>2]|0;h=k[d>>2]|0;if(f>>>0>>0){k[d>>2]=f;k[e>>2]=h;h=g+1|0;e=k[d>>2]|0;f=k[c>>2]|0;if(e>>>0>>0){k[c>>2]=e;k[d>>2]=f;f=g+2|0;d=k[c>>2]|0;e=k[b>>2]|0;if(d>>>0>>0){k[b>>2]=d;k[c>>2]=e;e=k[b>>2]|0;c=k[a>>2]|0;if(e>>>0>>0){k[a>>2]=e;k[b>>2]=c;i=g+4|0}else i=g+3|0}else i=f}else i=h}else i=g;return i|0}function p_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=a+8|0;m_a(a,a+4|0,d,c)|0;c=a+12|0;e=d;while(1){if((c|0)==(b|0))break;d=k[c>>2]|0;f=k[e>>2]|0;if(d>>>0>>0){g=f;f=c;h=e;while(1){k[f>>2]=g;if((h|0)==(a|0)){i=a;break}j=h+-4|0;g=k[j>>2]|0;if(d>>>0>=g>>>0){i=h;break}else{l=h;h=j;f=l}}k[i>>2]=d}f=c;c=c+4|0;e=f}return}function q_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=b;e=k[d>>2]|0;f=k[d+4>>2]|0;d=a;g=k[d>>2]|0;h=k[d+4>>2]|0;d=c;i=k[d>>2]|0;j=k[d+4>>2]|0;d=(j|0)<(f|0)|(j|0)==(f|0)&i>>>0>>0;do if((f|0)<(h|0)|(f|0)==(h|0)&e>>>0>>0){if(d){l=a;k[l>>2]=i;k[l+4>>2]=j;l=c;k[l>>2]=g;k[l+4>>2]=h;m=1;break}l=a;k[l>>2]=e;k[l+4>>2]=f;l=b;k[l>>2]=g;k[l+4>>2]=h;l=c;n=k[l>>2]|0;o=k[l+4>>2]|0;if((o|0)<(h|0)|(o|0)==(h|0)&n>>>0>>0){l=b;k[l>>2]=n;k[l+4>>2]=o;o=c;k[o>>2]=g;k[o+4>>2]=h;m=2}else m=1}else if(d){o=b;k[o>>2]=i;k[o+4>>2]=j;o=c;k[o>>2]=e;k[o+4>>2]=f;o=b;l=k[o>>2]|0;n=k[o+4>>2]|0;o=a;p=k[o>>2]|0;q=k[o+4>>2]|0;if((n|0)<(q|0)|(n|0)==(q|0)&l>>>0

      >>0){o=a;k[o>>2]=l;k[o+4>>2]=n;n=b;k[n>>2]=p;k[n+4>>2]=q;m=2}else m=1}else m=0;while(0);return m|0}function r_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=q_a(a,b,c,e)|0;e=d;g=k[e>>2]|0;h=k[e+4>>2]|0;e=c;i=k[e>>2]|0;j=k[e+4>>2]|0;if((h|0)<(j|0)|(h|0)==(j|0)&g>>>0>>0){e=c;k[e>>2]=g;k[e+4>>2]=h;h=d;k[h>>2]=i;k[h+4>>2]=j;j=f+1|0;h=c;i=k[h>>2]|0;d=k[h+4>>2]|0;h=b;e=k[h>>2]|0;g=k[h+4>>2]|0;if((d|0)<(g|0)|(d|0)==(g|0)&i>>>0>>0){h=b;k[h>>2]=i;k[h+4>>2]=d;d=c;k[d>>2]=e;k[d+4>>2]=g;g=b;d=k[g>>2]|0;e=k[g+4>>2]|0;g=a;c=k[g>>2]|0;h=k[g+4>>2]|0;if((e|0)<(h|0)|(e|0)==(h|0)&d>>>0>>0){g=a;k[g>>2]=d;k[g+4>>2]=e;e=b;k[e>>2]=c;k[e+4>>2]=h;l=f+3|0}else l=f+2|0}else l=j}else l=f;return l|0}function s_a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r_a(a,b,c,d,f)|0;f=e;h=k[f>>2]|0;i=k[f+4>>2]|0;f=d;j=k[f>>2]|0;l=k[f+4>>2]|0;if((i|0)<(l|0)|(i|0)==(l|0)&h>>>0>>0){f=d;k[f>>2]=h;k[f+4>>2]=i;i=e;k[i>>2]=j;k[i+4>>2]=l;l=g+1|0;i=d;j=k[i>>2]|0;e=k[i+4>>2]|0;i=c;f=k[i>>2]|0;h=k[i+4>>2]|0;if((e|0)<(h|0)|(e|0)==(h|0)&j>>>0>>0){i=c;k[i>>2]=j;k[i+4>>2]=e;e=d;k[e>>2]=f;k[e+4>>2]=h;h=g+2|0;e=c;f=k[e>>2]|0;d=k[e+4>>2]|0;e=b;i=k[e>>2]|0;j=k[e+4>>2]|0;if((d|0)<(j|0)|(d|0)==(j|0)&f>>>0>>0){e=b;k[e>>2]=f;k[e+4>>2]=d;d=c;k[d>>2]=i;k[d+4>>2]=j;j=b;d=k[j>>2]|0;i=k[j+4>>2]|0;j=a;c=k[j>>2]|0;e=k[j+4>>2]|0;if((i|0)<(e|0)|(i|0)==(e|0)&d>>>0>>0){j=a;k[j>>2]=d;k[j+4>>2]=i;i=b;k[i>>2]=c;k[i+4>>2]=e;m=g+4|0}else m=g+3|0}else m=h}else m=l}else m=g;return m|0}function t_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=a+16|0;q_a(a,a+8|0,d,c)|0;c=a+24|0;e=d;while(1){if((c|0)==(b|0))break;d=c;f=k[d>>2]|0;g=k[d+4>>2]|0;d=e;h=k[d>>2]|0;i=k[d+4>>2]|0;if((g|0)<(i|0)|(g|0)==(i|0)&f>>>0>>0){d=h;h=i;i=c;j=e;while(1){l=i;k[l>>2]=d;k[l+4>>2]=h;if((j|0)==(a|0)){m=a;break}l=j+-8|0;n=l;d=k[n>>2]|0;h=k[n+4>>2]|0;if(!((g|0)<(h|0)|(g|0)==(h|0)&f>>>0>>0)){m=j;break}else{n=j;j=l;i=n}}i=m;k[i>>2]=f;k[i+4>>2]=g}i=c;c=c+8|0;e=i}return}function u_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=b;e=k[d>>2]|0;f=k[d+4>>2]|0;d=a;g=k[d>>2]|0;h=k[d+4>>2]|0;d=c;i=k[d>>2]|0;j=k[d+4>>2]|0;d=j>>>0>>0|(j|0)==(f|0)&i>>>0>>0;do if(f>>>0>>0|(f|0)==(h|0)&e>>>0>>0){if(d){l=a;k[l>>2]=i;k[l+4>>2]=j;l=c;k[l>>2]=g;k[l+4>>2]=h;m=1;break}l=a;k[l>>2]=e;k[l+4>>2]=f;l=b;k[l>>2]=g;k[l+4>>2]=h;l=c;n=k[l>>2]|0;o=k[l+4>>2]|0;if(o>>>0>>0|(o|0)==(h|0)&n>>>0>>0){l=b;k[l>>2]=n;k[l+4>>2]=o;o=c;k[o>>2]=g;k[o+4>>2]=h;m=2}else m=1}else if(d){o=b;k[o>>2]=i;k[o+4>>2]=j;o=c;k[o>>2]=e;k[o+4>>2]=f;o=b;l=k[o>>2]|0;n=k[o+4>>2]|0;o=a;p=k[o>>2]|0;q=k[o+4>>2]|0;if(n>>>0>>0|(n|0)==(q|0)&l>>>0

      >>0){o=a;k[o>>2]=l;k[o+4>>2]=n;n=b;k[n>>2]=p;k[n+4>>2]=q;m=2}else m=1}else m=0;while(0);return m|0}function v_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=u_a(a,b,c,e)|0;e=d;g=k[e>>2]|0;h=k[e+4>>2]|0;e=c;i=k[e>>2]|0;j=k[e+4>>2]|0;if(h>>>0>>0|(h|0)==(j|0)&g>>>0>>0){e=c;k[e>>2]=g;k[e+4>>2]=h;h=d;k[h>>2]=i;k[h+4>>2]=j;j=f+1|0;h=c;i=k[h>>2]|0;d=k[h+4>>2]|0;h=b;e=k[h>>2]|0;g=k[h+4>>2]|0;if(d>>>0>>0|(d|0)==(g|0)&i>>>0>>0){h=b;k[h>>2]=i;k[h+4>>2]=d;d=c;k[d>>2]=e;k[d+4>>2]=g;g=b;d=k[g>>2]|0;e=k[g+4>>2]|0;g=a;c=k[g>>2]|0;h=k[g+4>>2]|0;if(e>>>0>>0|(e|0)==(h|0)&d>>>0>>0){g=a;k[g>>2]=d;k[g+4>>2]=e;e=b;k[e>>2]=c;k[e+4>>2]=h;l=f+3|0}else l=f+2|0}else l=j}else l=f;return l|0}function w_a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=v_a(a,b,c,d,f)|0;f=e;h=k[f>>2]|0;i=k[f+4>>2]|0;f=d;j=k[f>>2]|0;l=k[f+4>>2]|0;if(i>>>0>>0|(i|0)==(l|0)&h>>>0>>0){f=d;k[f>>2]=h;k[f+4>>2]=i;i=e;k[i>>2]=j;k[i+4>>2]=l;l=g+1|0;i=d;j=k[i>>2]|0;e=k[i+4>>2]|0;i=c;f=k[i>>2]|0;h=k[i+4>>2]|0;if(e>>>0>>0|(e|0)==(h|0)&j>>>0>>0){i=c;k[i>>2]=j;k[i+4>>2]=e;e=d;k[e>>2]=f;k[e+4>>2]=h;h=g+2|0;e=c;f=k[e>>2]|0;d=k[e+4>>2]|0;e=b;i=k[e>>2]|0;j=k[e+4>>2]|0;if(d>>>0>>0|(d|0)==(j|0)&f>>>0>>0){e=b;k[e>>2]=f;k[e+4>>2]=d;d=c;k[d>>2]=i;k[d+4>>2]=j;j=b;d=k[j>>2]|0;i=k[j+4>>2]|0;j=a;c=k[j>>2]|0;e=k[j+4>>2]|0;if(i>>>0>>0|(i|0)==(e|0)&d>>>0>>0){j=a;k[j>>2]=d;k[j+4>>2]=i;i=b;k[i>>2]=c;k[i+4>>2]=e;m=g+4|0}else m=g+3|0}else m=h}else m=l}else m=g;return m|0}function x_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=a+16|0;u_a(a,a+8|0,d,c)|0;c=a+24|0;e=d;while(1){if((c|0)==(b|0))break;d=c;f=k[d>>2]|0;g=k[d+4>>2]|0;d=e;h=k[d>>2]|0;i=k[d+4>>2]|0;if(g>>>0>>0|(g|0)==(i|0)&f>>>0>>0){d=h;h=i;i=c;j=e;while(1){l=i;k[l>>2]=d;k[l+4>>2]=h;if((j|0)==(a|0)){m=a;break}l=j+-8|0;n=l;d=k[n>>2]|0;h=k[n+4>>2]|0;if(!(g>>>0>>0|(g|0)==(h|0)&f>>>0>>0)){m=j;break}else{n=j;j=l;i=n}}i=m;k[i>>2]=f;k[i+4>>2]=g}i=c;c=c+8|0;e=i}return}function y_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,h=0,i=0.0,j=0.0;e=+o[b>>2];f=+o[a>>2];g=+o[c>>2];d=g>2]=g;o[c>>2]=f;h=1;break}o[a>>2]=e;o[b>>2]=f;i=+o[c>>2];if(i>2]=i;o[c>>2]=f;h=2}else h=1}else if(d){o[b>>2]=g;o[c>>2]=e;i=+o[b>>2];j=+o[a>>2];if(i>2]=i;o[b>>2]=j;h=2}else h=1}else h=0;while(0);return h|0}function z_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0.0,h=0.0,i=0;f=y_a(a,b,c,e)|0;g=+o[d>>2];h=+o[c>>2];if(g>2]=g;o[d>>2]=h;d=f+1|0;h=+o[c>>2];g=+o[b>>2];if(h>2]=h;o[c>>2]=g;g=+o[b>>2];h=+o[a>>2];if(g>2]=g;o[b>>2]=h;i=f+3|0}else i=f+2|0}else i=d}else i=f;return i|0}function A_a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0.0,i=0.0,j=0;g=z_a(a,b,c,d,f)|0;h=+o[e>>2];i=+o[d>>2];if(h>2]=h;o[e>>2]=i;e=g+1|0;i=+o[d>>2];h=+o[c>>2];if(i>2]=i;o[d>>2]=h;d=g+2|0;h=+o[c>>2];i=+o[b>>2];if(h>2]=h;o[c>>2]=i;i=+o[b>>2];h=+o[a>>2];if(i>2]=i;o[b>>2]=h;j=g+4|0}else j=g+3|0}else j=d}else j=e}else j=g;return j|0}function B_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0,h=0,i=0,j=0;d=a+8|0;y_a(a,a+4|0,d,c)|0;c=a+12|0;e=d;while(1){if((c|0)==(b|0))break;f=+o[c>>2];if(f<+o[e>>2]){d=c;g=e;while(1){k[d>>2]=k[g>>2];if((g|0)==(a|0)){h=g;break}i=g+-4|0;if(f<+o[i>>2]){j=g;g=i;d=j}else{h=g;break}}o[h>>2]=f}g=c;c=c+4|0;e=g}return}function C_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,h=0,i=0.0,j=0.0;e=+p[b>>3];f=+p[a>>3];g=+p[c>>3];d=g>3]=g;p[c>>3]=f;h=1;break}p[a>>3]=e;p[b>>3]=f;i=+p[c>>3];if(i>3]=i;p[c>>3]=f;h=2}else h=1}else if(d){p[b>>3]=g;p[c>>3]=e;i=+p[b>>3];j=+p[a>>3];if(i>3]=i;p[b>>3]=j;h=2}else h=1}else h=0;while(0);return h|0}function D_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0.0,h=0.0,i=0;f=C_a(a,b,c,e)|0;g=+p[d>>3];h=+p[c>>3];if(g>3]=g;p[d>>3]=h;d=f+1|0;h=+p[c>>3];g=+p[b>>3];if(h>3]=h;p[c>>3]=g;g=+p[b>>3];h=+p[a>>3];if(g>3]=g;p[b>>3]=h;i=f+3|0}else i=f+2|0}else i=d}else i=f;return i|0}function E_a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0.0,i=0.0,j=0;g=D_a(a,b,c,d,f)|0;h=+p[e>>3];i=+p[d>>3];if(h>3]=h;p[e>>3]=i;e=g+1|0;i=+p[d>>3];h=+p[c>>3];if(i>3]=i;p[d>>3]=h;d=g+2|0;h=+p[c>>3];i=+p[b>>3];if(h>3]=h;p[c>>3]=i;i=+p[b>>3];h=+p[a>>3];if(i>3]=i;p[b>>3]=h;j=g+4|0}else j=g+3|0}else j=d}else j=e}else j=g;return j|0}function F_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0.0,i=0,j=0,k=0,l=0;d=a+16|0;C_a(a,a+8|0,d,c)|0;c=a+24|0;e=d;while(1){if((c|0)==(b|0))break;f=+p[c>>3];g=+p[e>>3];if(f>3]=h;if((i|0)==(a|0)){j=a;break}k=i+-8|0;h=+p[k>>3];if(!(f>3]=f}d=c;c=c+8|0;e=d}return}function G_a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,h=0,i=0.0,j=0.0;e=+p[b>>3];f=+p[a>>3];g=+p[c>>3];d=g>3]=g;p[c>>3]=f;h=1;break}p[a>>3]=e;p[b>>3]=f;i=+p[c>>3];if(i>3]=i;p[c>>3]=f;h=2}else h=1}else if(d){p[b>>3]=g;p[c>>3]=e;i=+p[b>>3];j=+p[a>>3];if(i>3]=i;p[b>>3]=j;h=2}else h=1}else h=0;while(0);return h|0}function H_a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0.0,h=0.0,i=0;f=G_a(a,b,c,e)|0;g=+p[d>>3];h=+p[c>>3];if(g>3]=g;p[d>>3]=h;d=f+1|0;h=+p[c>>3];g=+p[b>>3];if(h>3]=h;p[c>>3]=g;g=+p[b>>3];h=+p[a>>3];if(g>3]=g;p[b>>3]=h;i=f+3|0}else i=f+2|0}else i=d}else i=f;return i|0}function I_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0.0,i=0,j=0,k=0,l=0;d=a+16|0;G_a(a,a+8|0,d,c)|0;c=a+24|0;e=d;while(1){if((c|0)==(b|0))break;f=+p[c>>3];g=+p[e>>3];if(f>3]=h;if((i|0)==(a|0)){j=a;break}k=i+-8|0;h=+p[k>>3];if(!(f>3]=f}d=c;c=c+8|0;e=d}return}function J_a(a,b){a=a|0;b=b|0;var c=0,d=0;k[a>>2]=b;c=b;b=1;while(1){if((b|0)==624)break;d=(ia(c>>>30^c,1812433253)|0)+b|0;k[a+(b<<2)>>2]=d;c=d;b=b+1|0}k[a+2496>>2]=0;return}function K_a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+2496|0;c=k[b>>2]|0;d=((c+1|0)>>>0)%624|0;e=a+(c<<2)|0;f=k[a+(d<<2)>>2]|0;k[e>>2]=0-(f&1)&-1727483681^k[a+((((c+397|0)>>>0)%624|0)<<2)>>2]^(f&2147483646|k[e>>2]&-2147483648)>>>1;e=k[a+(k[b>>2]<<2)>>2]|0;a=e>>>11^e;k[b>>2]=d;d=a<<7&-1658038656^a;a=d<<15&-272236544^d;return a>>>18^a|0}function L_a(a){a=a|0;x=0;Ba(569,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function M_a(a){a=a|0;x=0;Ba(629,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function N_a(a){a=a|0;x=0;Ba(566,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function O_a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!((i[b+4>>0]|0)==0?(x=0,xa(935,1,324419),c=x,x=0,c&1):0))d=3;do if((d|0)==3?(x=0,c=Ta(500,a|0,k[b>>2]|0)|0,e=x,x=0,!(e&1)):0){if((c|0)!=0?(x=0,xa(935,c|0,324462),c=x,x=0,c&1):0)break;return}while(0);b=Hc(0)|0;Fg(b)}function P_a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;if(!((i[b+4>>0]|0)==0?(x=0,xa(935,1,324493),f=x,x=0,f&1):0))g=3;a:do if((g|0)==3){f=c;h=k[f>>2]|0;j=k[f+4>>2]|0;if(!((j|0)>15e8|(j|0)==15e8&h>>>0>59713)?(f=Oyb(h|0,j|0,1e9,0)|0,(j|0)<499999999|(j|0)==499999999&h>>>0<3294967296):0){k[e>>2]=f;l=Qyb(f|0,M|0,-1e9,-1)|0;f=Hyb(l|0,M|0,h|0,j|0)|0;k[e+4>>2]=f}else{k[e>>2]=2147483647;k[e+4>>2]=999999999}x=0;f=Fa(94,a|0,k[b>>2]|0,e|0)|0;j=x;x=0;if(!(j&1)){switch(f|0){case 0:case 110:break;default:{x=0;xa(935,f|0,324542);f=x;x=0;if(f&1)break a}}r=d;return}}while(0);d=Hc(0)|0;Fg(d)}function Q_a(a,b){a=a|0;b=b|0;var c=0,d=0;c=o9a()|0;d=Ne(k[c>>2]|0)|0;c=k[b>>2]|0;k[b>>2]=0;i[b+4>>0]=0;u9a(d,a,c);return}function R_a(a){a=a|0;return 324664}function S_a(a,b,c){a=a|0;b=b|0;c=c|0;switch(c|0){case 4:case 0:{q2a(a,324671,88);break}case 1:{q2a(a,324760,72);break}case 2:{q2a(a,324833,46);break}case 3:{q2a(a,324880,65);break}default:q2a(a,324946,30)}return}function T_a(){if((i[17280]|0)==0?(Bb(17280)|0)!=0:0){k[17184]=68708;Kc(17280)}return 68736}function U_a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;_0a(d,b);x=0;xa(936,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);k[a>>2]=68664;d=b;b=k[d+4>>2]|0;e=a+8|0;k[e>>2]=k[d>>2];k[e+4>>2]=b;r=c;return}}function V_a(a){a=a|0;nCa(a);return}function W_a(a){a=a|0;nCa(a);OBa(a);return}function X_a(a){a=a|0;if(a)Sf[k[(k[a>>2]|0)+4>>2]&2047](a);return}function Y_a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+32|0;c=b+16|0;d=b;e=b+8|0;f=a+12|0;k[d>>2]=f;g=d+4|0;i[g>>0]=1;T1a(f);f=a+88|0;if((k[f>>2]&1|0)==0?(k[c>>2]=0,h=(k[a+8>>2]|0)==0,Q9a(c),h):0){k[f>>2]=k[f>>2]|5;N_a(a+40|0);x=0;va(1533,d|0);a=x;x=0;if(a&1)j=11;else{if(i[g>>0]|0)V1a(k[d>>2]|0);r=b;return}}else j=4;do if((j|0)==4){b=Rd(16)|0;T_a()|0;k[e>>2]=2;k[e+4>>2]=68736;x=0;k[c>>2]=k[e>>2];k[c+4>>2]=k[e+4>>2];xa(937,b|0,c|0);a=x;x=0;if(a&1){a=Hc()|0;f=M;Fc(b|0);l=a;m=f;j=12;break}else{x=0;fb(149,b|0,17232,1273);x=0;j=11;break}}while(0);if((j|0)==11){c=Hc()|0;e=M;if(!(i[g>>0]|0)){n=c;o=e}else{l=c;m=e;j=12}}if((j|0)==12){V1a(k[d>>2]|0);n=l;o=m}Sc(n|0)}function Z_a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+32|0;c=b+16|0;d=b;e=b+8|0;f=a+12|0;k[d>>2]=f;g=d+4|0;i[g>>0]=1;T1a(f);f=a+88|0;if((k[f>>2]&1|0)==0?(k[c>>2]=0,h=(k[a+8>>2]|0)==0,Q9a(c),h):0){k[f>>2]=k[f>>2]|1;x=0;f=$a(50)|0;h=x;x=0;if(((!(h&1)?(x=0,h=Ba(630,k[f>>2]|0)|0,f=x,x=0,!(f&1)):0)?(x=0,xa(938,h|0,a|0),a=x,x=0,!(a&1)):0)?(x=0,va(1533,d|0),a=x,x=0,!(a&1)):0){if(i[g>>0]|0)V1a(k[d>>2]|0);r=b;return}else j=14}else j=4;do if((j|0)==4){b=Rd(16)|0;T_a()|0;k[e>>2]=2;k[e+4>>2]=68736;x=0;k[c>>2]=k[e>>2];k[c+4>>2]=k[e+4>>2];xa(937,b|0,c|0);a=x;x=0;if(a&1){a=Hc()|0;h=M;Fc(b|0);l=a;m=h;j=15;break}else{x=0;fb(149,b|0,17232,1273);x=0;j=14;break}}while(0);if((j|0)==14){c=Hc()|0;e=M;if(!(i[g>>0]|0)){n=c;o=e}else{l=c;m=e;j=15}}if((j|0)==15){V1a(k[d>>2]|0);n=l;o=m}Sc(n|0)}function __a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c+16|0;e=c;f=c+8|0;g=a+12|0;k[e>>2]=g;h=e+4|0;i[h>>0]=1;T1a(g);g=a+88|0;if((k[g>>2]&1|0)==0?(k[d>>2]=0,j=(k[a+8>>2]|0)==0,Q9a(d),j):0){S9a(a+8|0,b)|0;k[g>>2]=k[g>>2]|4;x=0;va(1533,e|0);g=x;x=0;if(g&1)l=11;else{N_a(a+40|0);if(i[h>>0]|0)V1a(k[e>>2]|0);r=c;return}}else l=4;do if((l|0)==4){c=Rd(16)|0;T_a()|0;k[f>>2]=2;k[f+4>>2]=68736;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];xa(937,c|0,d|0);a=x;x=0;if(a&1){a=Hc()|0;g=M;Fc(c|0);m=a;n=g;l=12;break}else{x=0;fb(149,c|0,17232,1273);x=0;l=11;break}}while(0);if((l|0)==11){d=Hc()|0;f=M;if(!(i[h>>0]|0)){o=d;p=f}else{m=d;n=f;l=12}}if((l|0)==12){V1a(k[e>>2]|0);o=m;p=n}Sc(o|0)}function $_a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+32|0;d=c+16|0;e=c;f=c+8|0;g=a+12|0;k[e>>2]=g;h=e+4|0;i[h>>0]=1;T1a(g);if((k[a+88>>2]&1|0)==0?(k[d>>2]=0,g=(k[a+8>>2]|0)==0,Q9a(d),g):0){S9a(a+8|0,b)|0;x=0;b=$a(50)|0;g=x;x=0;if(((!(g&1)?(x=0,g=Ba(630,k[b>>2]|0)|0,b=x,x=0,!(b&1)):0)?(x=0,xa(938,g|0,a|0),a=x,x=0,!(a&1)):0)?(x=0,va(1533,e|0),a=x,x=0,!(a&1)):0){if(i[h>>0]|0)V1a(k[e>>2]|0);r=c;return}else j=14}else j=4;do if((j|0)==4){c=Rd(16)|0;T_a()|0;k[f>>2]=2;k[f+4>>2]=68736;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];xa(937,c|0,d|0);a=x;x=0;if(a&1){a=Hc()|0;g=M;Fc(c|0);l=a;m=g;j=15;break}else{x=0;fb(149,c|0,17232,1273);x=0;j=14;break}}while(0);if((j|0)==14){d=Hc()|0;f=M;if(!(i[h>>0]|0)){n=d;o=f}else{l=d;m=f;j=15}}if((j|0)==15){V1a(k[e>>2]|0);n=l;o=m}Sc(n|0)}function a$a(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b;d=a+12|0;k[c>>2]=d;e=c+4|0;i[e>>0]=1;T1a(d);d=a+88|0;k[d>>2]=k[d>>2]|4;x=0;va(1533,c|0);d=x;x=0;if(d&1){d=Hc()|0;if(i[e>>0]|0)V1a(k[c>>2]|0);Sc(d|0)}else{N_a(a+40|0);if(i[e>>0]|0)V1a(k[c>>2]|0);r=b;return}}function b$a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;f=a+12|0;k[c>>2]=f;g=c+4|0;i[g>>0]=1;T1a(f);x=0;xa(939,a|0,c|0);f=x;x=0;do if(f&1){h=Hc()|0;j=M;l=h}else{h=a+8|0;k[d>>2]=0;m=(k[h>>2]|0)==0;Q9a(d);if(!m){R9a(e,h);x=0;va(1534,e|0);x=0;h=Hc()|0;m=M;Q9a(e);j=m;l=h;break}if(i[g>>0]|0)V1a(k[c>>2]|0);r=b;return}while(0);if(i[g>>0]|0)V1a(k[c>>2]|0);Sc(l|0)}function c$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+88|0;d=k[c>>2]|0;a:do if(!(d&4)){if(d&8){k[c>>2]=d&-9;r$a(b);Sf[k[(k[a>>2]|0)+12>>2]&2047](a);break}e=a+40|0;f=d;while(1){if(f&4)break a;O_a(e,b);f=k[c>>2]|0}}while(0);return}function d$a(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b;d=a+12|0;k[c>>2]=d;e=c+4|0;i[e>>0]=1;T1a(d);x=0;xa(939,a|0,c|0);a=x;x=0;if(a&1){a=Hc()|0;if(i[e>>0]|0)V1a(k[c>>2]|0);Sc(a|0)}else{if(i[e>>0]|0)V1a(k[c>>2]|0);r=b;return}}function e$a(a){a=a|0;var b=0,c=0;a=r;r=r+16|0;b=a+8|0;c=a;a=Rd(16)|0;T_a()|0;k[c>>2]=3;k[c+4>>2]=68736;x=0;k[b>>2]=k[c>>2];k[b+4>>2]=k[c+4>>2];xa(937,a|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Fc(a|0);Sc(b|0)}else Gf(a|0,17232,1273)}function f$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c+8|0;e=c;k[a>>2]=b;if(!(k[b+88>>2]&2)){e0a(b);b=k[a>>2]|0;a=b+12|0;T1a(a);f=b+88|0;k[f>>2]=k[f>>2]|2;V1a(a);r=c;return}c=Rd(16)|0;T_a()|0;k[e>>2]=1;k[e+4>>2]=68736;x=0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];xa(937,c|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;Fc(c|0);Sc(d|0)}else Gf(c|0,17232,1273)}function g$a(a){a=a|0;var b=0;b=k[a>>2]|0;if(b)f0a(b)|0;return}function h$a(a){a=a|0;var b=0;b=k[a>>2]|0;k[a>>2]=0;x=0;va(1535,b|0);a=x;x=0;if(a&1){a=Hc()|0;if(b)f0a(b)|0;Sc(a|0)}else{if(b)f0a(b)|0;return}}function i$a(a){a=a|0;var b=0,c=0,d=0;b=KBa(92)|0;k[b+4>>2]=0;k[b>>2]=68684;c=b+8|0;d=c+84|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(d|0));k[a>>2]=b;return}function j$a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=r;r=r+48|0;c=b+32|0;d=b+24|0;e=b+8|0;f=b;g=k[a>>2]|0;if(g){do if(!(k[g+88>>2]&1)){k[c>>2]=0;h=(k[g+8>>2]|0)==0;Q9a(c);if(h?(h=k[a>>2]|0,(k[h+4>>2]|0)>0):0){T_a()|0;k[f>>2]=4;k[f+4>>2]=68736;x=0;k[c>>2]=k[f>>2];k[c+4>>2]=k[f+4>>2];xa(937,e|0,c|0);i=x;x=0;if(i&1){i=Hc(0)|0;Fg(i)}i=s$a(e)|0;k[d>>2]=i;x=0;xa(940,h|0,d|0);h=x;x=0;if(h&1){h=Hc(0)|0;Q9a(d);nCa(e);Fg(h)}else{Q9a(d);nCa(e);break}}}while(0);f0a(k[a>>2]|0)|0}r=b;return}function k$a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;f=k[a>>2]|0;if(f){f$a(d,f);r=b;return k[d>>2]|0}d=Rd(16)|0;T_a()|0;k[e>>2]=3;k[e+4>>2]=68736;x=0;k[c>>2]=k[e>>2];k[c+4>>2]=k[e+4>>2];xa(937,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;Fc(d|0);Sc(c|0)}else Gf(d|0,17232,1273);return 0}function l$a(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+8|0;d=b;e=k[a>>2]|0;if(e){Y_a(e);r=b;return}b=Rd(16)|0;T_a()|0;k[d>>2]=3;k[d+4>>2]=68736;x=0;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];xa(937,b|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;Fc(b|0);Sc(c|0)}else Gf(b|0,17232,1273)}function m$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[a>>2]|0;do if(!g){a=Rd(16)|0;T_a()|0;k[e>>2]=3;k[e+4>>2]=68736;x=0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];xa(937,a|0,d|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;Fc(a|0);j=i;l=h;break}else Gf(a|0,17232,1273)}else{R9a(f,b);x=0;xa(940,g|0,f|0);a=x;x=0;if(a&1){a=Hc()|0;h=M;Q9a(f);j=h;l=a;break}else{Q9a(f);r=c;return}}while(0);Sc(l|0)}function n$a(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+8|0;d=b;e=k[a>>2]|0;if(e){Z_a(e);r=b;return}b=Rd(16)|0;T_a()|0;k[d>>2]=3;k[d+4>>2]=68736;x=0;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];xa(937,b|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;Fc(b|0);Sc(c|0)}else Gf(b|0,17232,1273)}function o$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[a>>2]|0;do if(!g){a=Rd(16)|0;T_a()|0;k[e>>2]=3;k[e+4>>2]=68736;x=0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];xa(937,a|0,d|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;Fc(a|0);j=i;l=h;break}else Gf(a|0,17232,1273)}else{R9a(f,b);x=0;xa(941,g|0,f|0);a=x;x=0;if(a&1){a=Hc()|0;h=M;Q9a(f);j=h;l=a;break}else{Q9a(f);r=c;return}}while(0);Sc(l|0)}function p$a(a){a=a|0;var b=0;b=k[a>>2]|0;if(b)f0a(b)|0;return}function q$a(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;if(c)e0a(c);c=k[a>>2]|0;if(c)f0a(c)|0;k[a>>2]=k[b>>2];return a|0}function r$a(a){a=a|0;var b=0;b=a+4|0;if(!(i[b>>0]|0))i1a(1,324977);V1a(k[a>>2]|0);i[b>>0]=0;return}function s$a(a){a=a|0;var b=0;b=Rd(16)|0;w$a(b,a);x=0;fb(149,b|0,17232,1273);x=0;b=Hc(0)|0;me(b|0)|0;b=U9a()|0;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return b|0;return 0}function t$a(a){a=a|0;k[a>>2]=68684;L_a(a+40|0);S1a(a+12|0);Q9a(a+8|0);return}function u$a(a){a=a|0;t$a(a);OBa(a);return}function v$a(a){a=a|0;OBa(a);return}function w$a(a,b){a=a|0;b=b|0;var c=0,d=0;E0a(a,b);k[a>>2]=68664;c=b+8|0;b=k[c+4>>2]|0;d=a+8|0;k[d>>2]=k[c>>2];k[d+4>>2]=b;return}function x$a(a){a=a|0;var b=0,c=0,d=0;a=k[12027]|0;B$a(69420,a,69476);k[17185]=71648;k[17187]=71668;k[17186]=0;x=0;xa(582,68748,69420);b=x;x=0;if(b&1){b=Hc()|0;mab(68748);Sc(b|0)}k[17205]=0;k[17206]=-1;b=k[12023]|0;C$a(69524,b,69484);k[17207]=71744;k[17208]=71764;x=0;xa(582,68832,69524);c=x;x=0;if(c&1){c=Hc()|0;mab(68832);Sc(c|0)}k[17226]=0;k[17227]=-1;c=k[12025]|0;C$a(69572,c,69492);k[17228]=71744;k[17229]=71764;x=0;xa(582,68916,69572);d=x;x=0;if(d&1){d=Hc()|0;mab(68916);Sc(d|0)}k[17247]=0;k[17248]=-1;d=k[68912+(k[(k[17228]|0)+-12>>2]|0)+24>>2]|0;k[17249]=71744;k[17250]=71764;x=0;xa(582,69e3,d|0);d=x;x=0;if(d&1){d=Hc()|0;mab(69e3);Sc(d|0)}k[17268]=0;k[17269]=-1;k[68740+(k[(k[17185]|0)+-12>>2]|0)+72>>2]=68828;d=68912+(k[(k[17228]|0)+-12>>2]|0)+4|0;k[d>>2]=k[d>>2]|8192;k[68912+(k[(k[17228]|0)+-12>>2]|0)+72>>2]=68828;D$a(69620,a,69500);k[17270]=71696;k[17272]=71716;k[17271]=0;x=0;xa(582,69088,69620);a=x;x=0;if(a&1){a=Hc()|0;Yab(69088);Sc(a|0)}k[17290]=0;k[17291]=-1;E$a(69676,b,69508);k[17292]=71792;k[17293]=71812;x=0;xa(582,69172,69676);b=x;x=0;if(b&1){b=Hc()|0;Yab(69172);Sc(b|0)}k[17311]=0;k[17312]=-1;E$a(69724,c,69516);k[17313]=71792;k[17314]=71812;x=0;xa(582,69256,69724);c=x;x=0;if(c&1){c=Hc()|0;Yab(69256);Sc(c|0)}k[17332]=0;k[17333]=-1;c=k[69252+(k[(k[17313]|0)+-12>>2]|0)+24>>2]|0;k[17334]=71792;k[17335]=71812;x=0;xa(582,69340,c|0);c=x;x=0;if(c&1){c=Hc()|0;Yab(69340);Sc(c|0)}else{k[17353]=0;k[17354]=-1;k[69080+(k[(k[17270]|0)+-12>>2]|0)+72>>2]=69168;c=69252+(k[(k[17313]|0)+-12>>2]|0)+4|0;k[c>>2]=k[c>>2]|8192;k[69252+(k[(k[17313]|0)+-12>>2]|0)+72>>2]=69168;return}}function y$a(a){a=a|0;x=0;Ba(586,68828)|0;a=x;x=0;if(((!(a&1)?(x=0,Ba(586,68996)|0,a=x,x=0,!(a&1)):0)?(x=0,Ba(631,69168)|0,a=x,x=0,!(a&1)):0)?(x=0,Ba(631,69336)|0,a=x,x=0,!(a&1)):0)return;a=Hc(0)|0;Fg(a)}function z$a(){x$a(0);return}function A$a(){return}function B$a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d+4|0;f=d;Ebb(a);k[a>>2]=69972;k[a+32>>2]=b;k[a+40>>2]=c;k[a+48>>2]=-1;i[a+52>>0]=0;_pb(e,a+4|0);k[f>>2]=k[e>>2];x=0;xa(524,a|0,f|0);e=x;x=0;if(e&1){e=Hc()|0;$pb(f);obb(a);Sc(e|0)}else{$pb(f);r=d;return}}function C$a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d+4|0;f=d;Ebb(a);k[a>>2]=69908;k[a+32>>2]=b;_pb(e,a+4|0);k[f>>2]=k[e>>2];x=0;e=Ta(495,f|0,74328)|0;b=x;x=0;if(b&1){b=Hc()|0;$pb(f);obb(a);Sc(b|0)}else{$pb(f);k[a+36>>2]=e;k[a+40>>2]=c;c=(Vf[k[(k[e>>2]|0)+28>>2]&1023](e)|0)&1;i[a+44>>0]=c;r=d;return}}function D$a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d+4|0;f=d;scb(a);k[a>>2]=69844;k[a+32>>2]=b;k[a+40>>2]=c;k[a+48>>2]=-1;i[a+52>>0]=0;_pb(e,a+4|0);k[f>>2]=k[e>>2];x=0;xa(522,a|0,f|0);e=x;x=0;if(e&1){e=Hc()|0;$pb(f);ccb(a);Sc(e|0)}else{$pb(f);r=d;return}}function E$a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d+4|0;f=d;scb(a);k[a>>2]=69780;k[a+32>>2]=b;_pb(e,a+4|0);k[f>>2]=k[e>>2];x=0;e=Ta(495,f|0,74336)|0;b=x;x=0;if(b&1){b=Hc()|0;$pb(f);ccb(a);Sc(b|0)}else{$pb(f);k[a+36>>2]=e;k[a+40>>2]=c;c=(Vf[k[(k[e>>2]|0)+28>>2]&1023](e)|0)&1;i[a+44>>0]=c;r=d;return}}function F$a(a){a=a|0;ccb(a);OBa(a);return}function G$a(a,b){a=a|0;b=b|0;var c=0;Vf[k[(k[a>>2]|0)+24>>2]&1023](a)|0;c=lqb(b,74336)|0;k[a+36>>2]=c;b=(Vf[k[(k[c>>2]|0)+28>>2]&1023](c)|0)&1;i[a+44>>0]=b;return}function H$a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+8|0;d=b;e=a+36|0;f=a+40|0;g=c+8|0;h=c;i=a+32|0;a:while(1){a=k[e>>2]|0;j=dg[k[(k[a>>2]|0)+20>>2]&127](a,k[f>>2]|0,c,g,d)|0;a=(k[d>>2]|0)-h|0;if((FRa(c,1,a,k[i>>2]|0)|0)!=(a|0)){l=-1;break}switch(j|0){case 1:break;case 2:{l=-1;break a;break}default:{m=4;break a}}}if((m|0)==4)l=((ZRa(k[i>>2]|0)|0)!=0)<<31>>31;r=b;return l|0}function I$a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:do if(!(i[a+44>>0]|0)){d=b;e=0;while(1){if((e|0)>=(c|0)){f=e;break a}if((cg[k[(k[a>>2]|0)+52>>2]&1023](a,k[d>>2]|0)|0)==-1){f=e;break a}d=d+4|0;e=e+1|0}}else f=FRa(b,4,c,k[a+32>>2]|0)|0;while(0);return f|0}function J$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=(b|0)==-1;do if(!h){k[e>>2]=b;if(i[a+44>>0]|0)if((FRa(e,4,1,k[a+32>>2]|0)|0)==1){j=14;break}else{l=-1;break}k[f>>2]=d;m=e+4|0;n=a+36|0;o=a+40|0;p=d+8|0;q=d;s=a+32|0;t=e;while(1){u=k[n>>2]|0;v=lg[k[(k[u>>2]|0)+12>>2]&127](u,k[o>>2]|0,t,m,g,d,p,f)|0;if((k[g>>2]|0)==(t|0)){j=13;break}if((v|0)==3){w=t;j=7;break}if(v>>>0>=2){j=13;break}u=(k[f>>2]|0)-q|0;if((FRa(d,1,u,k[s>>2]|0)|0)!=(u|0)){j=13;break}if((v|0)==1)t=k[g>>2]|0;else{j=12;break}}if((j|0)==7)if((FRa(w,1,1,k[s>>2]|0)|0)==1)j=12;else j=13;if((j|0)==12){j=14;break}else if((j|0)==13){l=-1;break}}else j=14;while(0);if((j|0)==14)l=h?0:b;r=c;return l|0}function K$a(a,b){a=a|0;b=b|0;var c=0,d=0;c=lqb(b,74336)|0;b=a+36|0;k[b>>2]=c;d=Vf[k[(k[c>>2]|0)+24>>2]&1023](c)|0;c=a+44|0;k[c>>2]=d;d=k[b>>2]|0;b=(Vf[k[(k[d>>2]|0)+28>>2]&1023](d)|0)&1;i[a+53>>0]=b;if((k[c>>2]|0)>8)mob(325035);return}function L$a(a){a=a|0;ccb(a);OBa(a);return}function M$a(a){a=a|0;return P$a(a,0)|0}function N$a(a){a=a|0;return P$a(a,1)|0}function O$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=a+52|0;j=(i[h>>0]|0)!=0;a:do if((b|0)==-1)if(j)l=-1;else{m=k[a+48>>2]|0;i[h>>0]=(m|0)!=-1&1;l=m}else{do if(j){m=a+48|0;k[f>>2]=k[m>>2];n=k[a+36>>2]|0;switch(lg[k[(k[n>>2]|0)+12>>2]&127](n,k[a+40>>2]|0,f,f+4|0,g,d,d+8|0,e)|0){case 1:case 2:{l=-1;break a;break}case 3:{i[d>>0]=k[m>>2];k[e>>2]=d+1;break}default:{}}n=a+32|0;while(1){o=k[e>>2]|0;if(o>>>0<=d>>>0){p=13;break}q=o+-1|0;k[e>>2]=q;if((sRa(i[q>>0]|0,k[n>>2]|0)|0)==-1){p=12;break}}if((p|0)==12){l=-1;break a}else if((p|0)==13){s=m;break}}else s=a+48|0;while(0);k[s>>2]=b;i[h>>0]=1;l=b}while(0);r=c;return l|0}function P$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=a+52|0;if(i[h>>0]|0){j=a+48|0;l=k[j>>2]|0;if(b){k[j>>2]=-1;i[h>>0]=0;m=l}else m=l}else{l=k[a+44>>2]|0;h=(l|0)>1?l:1;l=a+32|0;j=0;while(1){if((j|0)>=(h|0)){n=8;break}o=ZQa(k[l>>2]|0)|0;if((o|0)==-1){p=-1;break}i[d+j>>0]=o;j=j+1|0}if((n|0)==8){do if(!(i[a+53>>0]|0)){j=a+40|0;o=a+36|0;q=e+4|0;s=h;a:while(1){t=k[j>>2]|0;u=t;v=k[u>>2]|0;w=k[u+4>>2]|0;u=k[o>>2]|0;x=d+s|0;switch(lg[k[(k[u>>2]|0)+16>>2]&127](u,t,d,x,f,e,q,g)|0){case 3:{y=s;n=15;break a;break}case 2:{n=17;break a;break}case 1:break;default:{z=s;break a}}t=k[j>>2]|0;k[t>>2]=v;k[t+4>>2]=w;if((s|0)==8){n=17;break}w=ZQa(k[l>>2]|0)|0;if((w|0)==-1){n=17;break}i[x>>0]=w;s=s+1|0}if((n|0)==15){k[e>>2]=i[d>>0];z=y}else if((n|0)==17){A=-1;break}B=z;n=18}else{k[e>>2]=i[d>>0];B=h;n=18}while(0);b:do if((n|0)==18){if(b){h=k[e>>2]|0;k[a+48>>2]=h;A=h;break}else C=B;while(1){if((C|0)<=0)break;C=C+-1|0;if((sRa(i[d+C>>0]|0,k[l>>2]|0)|0)==-1){A=-1;break b}}A=k[e>>2]|0}while(0);p=A}m=p}r=c;return m|0}function Q$a(a){a=a|0;obb(a);OBa(a);return}function R$a(a,b){a=a|0;b=b|0;var c=0;Vf[k[(k[a>>2]|0)+24>>2]&1023](a)|0;c=lqb(b,74328)|0;k[a+36>>2]=c;b=(Vf[k[(k[c>>2]|0)+28>>2]&1023](c)|0)&1;i[a+44>>0]=b;return}function S$a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+8|0;d=b;e=a+36|0;f=a+40|0;g=c+8|0;h=c;i=a+32|0;a:while(1){a=k[e>>2]|0;j=dg[k[(k[a>>2]|0)+20>>2]&127](a,k[f>>2]|0,c,g,d)|0;a=(k[d>>2]|0)-h|0;if((FRa(c,1,a,k[i>>2]|0)|0)!=(a|0)){l=-1;break}switch(j|0){case 1:break;case 2:{l=-1;break a;break}default:{m=4;break a}}}if((m|0)==4)l=((ZRa(k[i>>2]|0)|0)!=0)<<31>>31;r=b;return l|0}function T$a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:do if(!(i[a+44>>0]|0)){d=b;e=0;while(1){if((e|0)>=(c|0)){f=e;break a}if((cg[k[(k[a>>2]|0)+52>>2]&1023](a,l[d>>0]|0)|0)==-1){f=e;break a}d=d+1|0;e=e+1|0}}else f=FRa(b,1,c,k[a+32>>2]|0)|0;while(0);return f|0}function U$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=(b|0)==-1;do if(!h){i[e>>0]=b;if(i[a+44>>0]|0)if((FRa(e,1,1,k[a+32>>2]|0)|0)==1){j=14;break}else{l=-1;break}k[f>>2]=d;m=e+1|0;n=a+36|0;o=a+40|0;p=d+8|0;q=d;s=a+32|0;t=e;while(1){u=k[n>>2]|0;v=lg[k[(k[u>>2]|0)+12>>2]&127](u,k[o>>2]|0,t,m,g,d,p,f)|0;if((k[g>>2]|0)==(t|0)){j=13;break}if((v|0)==3){w=t;j=7;break}if(v>>>0>=2){j=13;break}u=(k[f>>2]|0)-q|0;if((FRa(d,1,u,k[s>>2]|0)|0)!=(u|0)){j=13;break}if((v|0)==1)t=k[g>>2]|0;else{j=12;break}}if((j|0)==7)if((FRa(w,1,1,k[s>>2]|0)|0)==1)j=12;else j=13;if((j|0)==12){j=14;break}else if((j|0)==13){l=-1;break}}else j=14;while(0);if((j|0)==14)l=h?0:b;r=c;return l|0}function V$a(a,b){a=a|0;b=b|0;var c=0,d=0;c=lqb(b,74328)|0;b=a+36|0;k[b>>2]=c;d=Vf[k[(k[c>>2]|0)+24>>2]&1023](c)|0;c=a+44|0;k[c>>2]=d;d=k[b>>2]|0;b=(Vf[k[(k[d>>2]|0)+28>>2]&1023](d)|0)&1;i[a+53>>0]=b;if((k[c>>2]|0)>8)mob(325035);return}function W$a(a){a=a|0;obb(a);OBa(a);return}function X$a(a){a=a|0;return _$a(a,0)|0}function Y$a(a){a=a|0;return _$a(a,1)|0}function Z$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+32|0;d=c+16|0;e=c+4|0;f=c+8|0;g=c;h=a+52|0;j=(i[h>>0]|0)!=0;a:do if((b|0)==-1)if(j)l=-1;else{m=k[a+48>>2]|0;i[h>>0]=(m|0)!=-1&1;l=m}else{do if(j){m=a+48|0;i[f>>0]=k[m>>2];n=k[a+36>>2]|0;switch(lg[k[(k[n>>2]|0)+12>>2]&127](n,k[a+40>>2]|0,f,f+1|0,g,d,d+8|0,e)|0){case 1:case 2:{l=-1;break a;break}case 3:{i[d>>0]=k[m>>2];k[e>>2]=d+1;break}default:{}}n=a+32|0;while(1){o=k[e>>2]|0;if(o>>>0<=d>>>0){p=13;break}q=o+-1|0;k[e>>2]=q;if((sRa(i[q>>0]|0,k[n>>2]|0)|0)==-1){p=12;break}}if((p|0)==12){l=-1;break a}else if((p|0)==13){s=m;break}}else s=a+48|0;while(0);k[s>>2]=b;i[h>>0]=1;l=b}while(0);r=c;return l|0}function _$a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=a+52|0;if(i[h>>0]|0){j=a+48|0;m=k[j>>2]|0;if(b){k[j>>2]=-1;i[h>>0]=0;n=m}else n=m}else{m=k[a+44>>2]|0;h=(m|0)>1?m:1;m=a+32|0;j=0;while(1){if((j|0)>=(h|0)){o=8;break}p=ZQa(k[m>>2]|0)|0;if((p|0)==-1){q=-1;break}i[d+j>>0]=p;j=j+1|0}if((o|0)==8){do if(!(i[a+53>>0]|0)){j=a+40|0;p=a+36|0;s=e+1|0;t=h;a:while(1){u=k[j>>2]|0;v=u;w=k[v>>2]|0;x=k[v+4>>2]|0;v=k[p>>2]|0;y=d+t|0;switch(lg[k[(k[v>>2]|0)+16>>2]&127](v,u,d,y,f,e,s,g)|0){case 3:{z=t;o=15;break a;break}case 2:{o=17;break a;break}case 1:break;default:{A=t;break a}}u=k[j>>2]|0;k[u>>2]=w;k[u+4>>2]=x;if((t|0)==8){o=17;break}x=ZQa(k[m>>2]|0)|0;if((x|0)==-1){o=17;break}i[y>>0]=x;t=t+1|0}if((o|0)==15){i[e>>0]=i[d>>0]|0;A=z}else if((o|0)==17){B=-1;break}C=A;o=18}else{i[e>>0]=i[d>>0]|0;C=h;o=18}while(0);b:do if((o|0)==18){if(b){h=i[e>>0]|0;k[a+48>>2]=h&255;D=h}else{h=C;while(1){if((h|0)<=0)break;h=h+-1|0;if((sRa(l[d+h>>0]|0,k[m>>2]|0)|0)==-1){B=-1;break b}}D=i[e>>0]|0}B=D&255}while(0);q=B}n=q}r=c;return n|0}function $$a(a){a=a|0;return}function a0a(a){a=a|0;OBa(a);return}function b0a(a){a=a|0;return 325225}function c0a(a){a=a|0;return}function d0a(a){a=a|0;OBa(a);return}function e0a(a){a=a|0;var b=0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;return}function f0a(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;c=k[b>>2]|0;k[b>>2]=c+-1;if(!c){Sf[k[(k[a>>2]|0)+8>>2]&2047](a);d=1}else d=0;return d|0}function g0a(a){a=a|0;OBa(a);return}function h0a(a){a=a|0;var b=0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;return}function i0a(a){a=a|0;var b=0;b=a+8|0;k[b>>2]=(k[b>>2]|0)+1;return}function j0a(a){a=a|0;if(f0a(a)|0)k0a(a);return}function k0a(a){a=a|0;var b=0,c=0;b=a+8|0;c=k[b>>2]|0;k[b>>2]=c+-1;if(!c)Sf[k[(k[a>>2]|0)+16>>2]&2047](a);return}function l0a(a){a=a|0;var b=0,c=0,d=0,e=0;b=a+4|0;while(1){c=k[b>>2]|0;if((c|0)==-1){d=0;break}e=k[b>>2]|0;if((e|0)==(c|0))k[b>>2]=c+1;if((e|0)==(c|0)){d=a;break}}return d|0}function m0a(a,b){a=a|0;b=b|0;return 0}function n0a(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;a=0;while(1){if(U1a(b)|0)break;a=a+1|0;x=0;if(a>>>0>16){c=4;break}Ld()|0;d=x;x=0;if(d&1){c=6;break}}if((c|0)==6){a=Hc(0)|0;Fg(a)}if((c|0)==4?(T1a(b),b=x,x=0,b&1):0){b=Hc(0)|0;Fg(b)}return}function o0a(a){a=a|0;V1a(k[a>>2]|0);return}function p0a(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;d=b+4|0;if((i[17400]|0)==0?(Bb(17400)|0)!=0:0){k[17636]=70096;k[17637]=70124;k[17638]=70152;k[17639]=70180;k[17640]=70208;k[17641]=70236;k[17642]=70264;k[17643]=70292;k[17644]=70320;k[17645]=70348;k[17646]=70376;k[17647]=70404;k[17648]=70432;k[17649]=70460;k[17650]=70488;k[17651]=70516;Kc(17400)}k[c>>2]=a;a=70544+(((w0a(d,c,4)|0)&15)<<2)|0;r=b;return a|0}function q0a(a){a=a|0;return}function r0a(a,b){a=a|0;b=b|0;return}function s0a(a,b){a=a|0;b=b|0;return}function t0a(){return 0}function u0a(a){a=a|0;return a|0}function v0a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=k[d>>2]|0;if(e>>>0>=b>>>0?(f=k[c>>2]|0,g=f+(a+-1)&0-a,a=g,h=g-f|0,h>>>0<=(e-b|0)>>>0):0){k[c>>2]=a;k[d>>2]=e-h;i=a}else i=0;return i|0}function w0a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;a=c+~(c>>>0<3?c:3)+4&-4;d=c-a|0;e=c;f=b;g=c;while(1){if(e>>>0<=3){h=g;break}c=ia(l[f>>0]|l[f+1>>0]<<8|l[f+2>>0]<<16|l[f+3>>0]<<24,1540483477)|0;e=e+-4|0;f=f+4|0;g=(ia(c>>>24^c,1540483477)|0)^(ia(g,1540483477)|0)}g=b+a|0;switch(d|0){case 3:{i=(l[g+2>>0]|0)<<16^h;j=6;break}case 2:{i=h;j=6;break}case 1:{k=h;j=7;break}default:m=h}if((j|0)==6){k=(l[g+1>>0]|0)<<8^i;j=7}if((j|0)==7)m=ia((l[g>>0]|0)^k,1540483477)|0;k=ia(m>>>13^m,1540483477)|0;return k>>>15^k|0}function x0a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c+4|0;e=WPa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,0,c)|0;k[a>>2]=e;do if((e|0)<0){a=HSa()|0;f=k[a>>2]|0;B0a(d,325238,b);x=0;xa(935,f|0,((i[d>>0]&1)==0?d+1|0:k[d+8>>2]|0)|0);f=x;x=0;if(f&1){f=Hc()|0;K2a(d);Sc(f|0)}else{K2a(d);break}}while(0);r=c;return}function y0a(a){a=a|0;x=0;Ba(572,k[a>>2]|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function z0a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=r;r=r+16|0;c=b;d=4;e=c;while(1){if(!d)break;a:while(1){f=IUa(k[a>>2]|0,e,d)|0;switch(f|0){case 0:{g=4;break a;break}case -1:break;default:{h=f;break a}}f=HSa()|0;i=k[f>>2]|0;if((i|0)==4)continue;i1a(i,325290)}if((g|0)==4){g=0;i1a(61,325268);h=0}d=d-h|0;e=e+h|0}r=b;return k[c>>2]|0}function A0a(a){a=a|0;return 0.0}function B0a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=0;while(1){if((d|0)==3)break;k[a+(d<<2)>>2]=0;d=d+1|0}d=RLa(b)|0;e=i[c>>0]|0;f=(e&1)==0?(e&255)>>>1:k[c+4>>2]|0;x=0;nb(83,a|0,b|0,d|0,f+d|0);d=x;x=0;if(!(d&1)?(x=0,Fa(88,a|0,((i[c>>0]&1)==0?c+1|0:k[c+8>>2]|0)|0,f|0)|0,f=x,x=0,!(f&1)):0)return;f=Hc()|0;K2a(a);Sc(f|0)}function C0a(a,b){a=a|0;b=b|0;k[a>>2]=47444;x=0;xa(942,a+4|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else return}function D0a(a,b){a=a|0;b=b|0;k[a>>2]=47444;x=0;xa(942,a+4|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else return}function E0a(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=47444;c=k[b+4>>2]|0;k[a+4>>2]=c;a=c+-4|0;k[a>>2]=(k[a>>2]|0)+1;return}function F0a(a,b){a=a|0;b=b|0;L0a(a+4|0,b+4|0)|0;return a|0}function G0a(a,b){a=a|0;b=b|0;k[a>>2]=47464;x=0;xa(942,a+4|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else return}function H0a(a,b){a=a|0;b=b|0;k[a>>2]=47464;x=0;xa(942,a+4|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else return}function I0a(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=47464;c=k[b+4>>2]|0;k[a+4>>2]=c;a=c+-4|0;k[a>>2]=(k[a>>2]|0)+1;return}function J0a(a,b){a=a|0;b=b|0;L0a(a+4|0,b+4|0)|0;return a|0}function K0a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=RLa(b)|0;d=KBa(c+13|0)|0;k[d>>2]=c;k[d+4>>2]=c;k[d+8>>2]=0;e=d+12|0;Dyb(e|0,b|0,c+1|0)|0;k[a>>2]=e;return}function L0a(a,b){a=a|0;b=b|0;var c=0,d=0;c=k[a>>2]|0;d=k[b>>2]|0;k[a>>2]=d;b=d+-4|0;k[b>>2]=(k[b>>2]|0)+1;b=c+-4|0;d=k[b>>2]|0;k[b>>2]=d+-1;if((d+-1|0)<0)OBa(c+-12|0);return a|0}function M0a(a){a=a|0;k[a>>2]=70616;return}function N0a(a){a=a|0;OBa(a);return}function O0a(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=c;k[a+4>>2]=b;return}function P0a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;jg[k[(k[a>>2]|0)+12>>2]&511](e,a,b);if((k[e+4>>2]|0)==(k[c+4>>2]|0))f=(k[e>>2]|0)==(k[c>>2]|0);else f=0;r=d;return f|0}function Q0a(a,b,c){a=a|0;b=b|0;c=c|0;return ((k[b>>2]|0)==(c|0)?(k[b+4>>2]|0)==(a|0):0)|0}function R0a(a,b,c){a=a|0;b=b|0;c=c|0;b=ISa(c)|0;q2a(a,b,RLa(b)|0);return}function S0a(a){a=a|0;return 325468}function T0a(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)>256)q2a(a,325476,34);else R0a(a,0,c);return}function U0a(){if((i[17480]|0)==0?(Bb(17480)|0)!=0:0){k[17693]=70708;Kc(17480)}return 70772}function V0a(a){a=a|0;return 325511}function W0a(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)>256)q2a(a,325518,33);else R0a(a,0,c);return}function X0a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((c|0)>256){Y0a()|0;d=70776}else{U0a()|0;d=70772}k[a>>2]=c;k[a+4>>2]=d;return}function Y0a(){if((i[17488]|0)==0?(Bb(17488)|0)!=0:0){k[17694]=70744;Kc(17488)}return 70776}function Z0a(a,b){a=a|0;b=b|0;var c=0;c=k[b+4>>2]|0;jg[k[(k[c>>2]|0)+24>>2]&511](a,c,k[b>>2]|0);return}function _0a(a,b){a=a|0;b=b|0;var c=0;c=k[b+4>>2]|0;jg[k[(k[c>>2]|0)+24>>2]&511](a,c,k[b>>2]|0);return}function $0a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=k[b>>2]|0;do if(f){g=i[c>>0]|0;if(!(g&1))h=(g&255)>>>1;else h=k[c+4>>2]|0;if(!h)j=f;else{J3a(c,325552)|0;j=k[b>>2]|0}g=k[b+4>>2]|0;jg[k[(k[g>>2]|0)+24>>2]&511](e,g,j);g=i[e>>0]|0;l=(g&1)==0;x=0;Fa(88,c|0,(l?e+1|0:k[e+8>>2]|0)|0,(l?(g&255)>>>1:k[e+4>>2]|0)|0)|0;g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}else{K2a(e);break}}while(0);k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];a=0;while(1){if((a|0)==3)break;k[c+(a<<2)>>2]=0;a=a+1|0}r=d;return}function a1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+32|0;e=d+12|0;f=d;n2a(f,c);x=0;fb(417,e|0,b|0,f|0);c=x;x=0;do if(!(c&1)){x=0;xa(623,a|0,e|0);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(e);i=h;j=g;break}else{K2a(e);K2a(f);k[a>>2]=70652;g=b;h=k[g+4>>2]|0;l=a+8|0;k[l>>2]=k[g>>2];k[l+4>>2]=h;r=d;return}}else{h=Hc()|0;i=M;j=h}while(0);K2a(f);Sc(j|0)}function b1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+32|0;e=d+12|0;f=d;q2a(f,c,RLa(c)|0);x=0;fb(417,e|0,b|0,f|0);c=x;x=0;do if(!(c&1)){x=0;xa(623,a|0,e|0);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(e);i=h;j=g;break}else{K2a(e);K2a(f);k[a>>2]=70652;g=b;h=k[g+4>>2]|0;l=a+8|0;k[l>>2]=k[g>>2];k[l+4>>2]=h;r=d;return}}else{h=Hc()|0;i=M;j=h}while(0);K2a(f);Sc(j|0)}function c1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+32|0;d=c+12|0;e=c;q2a(e,329672,0);x=0;fb(417,d|0,b|0,e|0);f=x;x=0;do if(!(f&1)){x=0;xa(623,a|0,d|0);g=x;x=0;if(g&1){g=Hc()|0;h=M;K2a(d);i=h;j=g;break}else{K2a(d);K2a(e);k[a>>2]=70652;g=b;h=k[g+4>>2]|0;l=a+8|0;k[l>>2]=k[g>>2];k[l+4>>2]=h;r=c;return}}else{h=Hc()|0;i=M;j=h}while(0);K2a(e);Sc(j|0)}function d1a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+48|0;f=e+24|0;g=e+16|0;h=e;k[g>>2]=b;k[g+4>>2]=c;n2a(h,d);x=0;fb(417,f|0,g|0,h|0);g=x;x=0;do if(!(g&1)){x=0;xa(623,a|0,f|0);d=x;x=0;if(d&1){d=Hc()|0;i=M;K2a(f);j=i;l=d;break}else{K2a(f);K2a(h);k[a>>2]=70652;k[a+8>>2]=b;k[a+12>>2]=c;r=e;return}}else{d=Hc()|0;j=M;l=d}while(0);K2a(h);Sc(l|0)}function e1a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+48|0;f=e+24|0;g=e+16|0;h=e;k[g>>2]=b;k[g+4>>2]=c;q2a(h,d,RLa(d)|0);x=0;fb(417,f|0,g|0,h|0);g=x;x=0;do if(!(g&1)){x=0;xa(623,a|0,f|0);d=x;x=0;if(d&1){d=Hc()|0;i=M;K2a(f);j=i;l=d;break}else{K2a(f);K2a(h);k[a>>2]=70652;k[a+8>>2]=b;k[a+12>>2]=c;r=e;return}}else{d=Hc()|0;j=M;l=d}while(0);K2a(h);Sc(l|0)}function f1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+48|0;e=d+24|0;f=d+16|0;g=d;k[f>>2]=b;k[f+4>>2]=c;q2a(g,329672,0);x=0;fb(417,e|0,f|0,g|0);f=x;x=0;do if(!(f&1)){x=0;xa(623,a|0,e|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;K2a(e);j=i;l=h;break}else{K2a(e);K2a(g);k[a>>2]=70652;k[a+8>>2]=b;k[a+12>>2]=c;r=d;return}}else{h=Hc()|0;j=M;l=h}while(0);K2a(g);Sc(l|0)}function g1a(a){a=a|0;qCa(a);return}function h1a(a){a=a|0;qCa(a);OBa(a);return}function i1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c+8|0;e=c;c=Rd(16)|0;Y0a()|0;k[e>>2]=a;k[e+4>>2]=70776;x=0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];fb(418,c|0,d|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Fc(c|0);Sc(b|0)}else Gf(c|0,17408,1292)}function j1a(a){a=a|0;return}function k1a(a){a=a|0;OBa(a);return}function l1a(a){a=a|0;OBa(a);return}function m1a(a){a=a|0;OBa(a);return}function n1a(){if((i[17504]|0)==0?(Bb(17504)|0)!=0:0){k[17703]=0;k[17704]=0;k[17705]=0;k[17706]=0;k[17707]=0;k[17708]=0;Kc(17504)}return 70812}function o1a(){n1a()|0;return 70812}function p1a(a){a=a|0;var b=0;b=a+4|0;a=k[b>>2]|0;if(!a)return;else{p1a(a);yYa(k[b>>2]|0);return}}function q1a(a){a=a|0;var b=0;k[a>>2]=70788;yYa(k[a+12>>2]|0);b=a+8|0;a=k[b>>2]|0;if(a){Sf[k[k[a>>2]>>2]&2047](a);yYa(k[b>>2]|0)}return}function r1a(a){a=a|0;q1a(a);OBa(a);return}function s1a(a){a=a|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;return}function t1a(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;if(b){c=a+4|0;d=b;while(1){if((d|0)==(k[c>>2]|0))break;b=k[d>>2]|0;if(b){Sf[k[k[b>>2]>>2]&2047](b);yYa(k[d>>2]|0)}d=d+4|0}yYa(k[a>>2]|0)}d=a+12|0;c=k[d>>2]|0;if(c){b=a+16|0;a=c;while(1){if((a|0)==(k[b>>2]|0))break;c=k[a>>2]|0;if(c){p1a(c);yYa(k[a>>2]|0)}a=a+4|0}yYa(k[d>>2]|0)}return}function u1a(a,b){a=a|0;b=b|0;var c=0,d=0;P1a();T1a(70836);c=v1a(a,b)|0;if(!c){IQa(325584)|0;x=0;hb(54);x=0;b=Hc()|0;V1a(70836);Sc(b|0)}b=k[c+8>>2]|0;if(!b)d=0;else d=k[b+4>>2]|0;V1a(70836);return d|0}function v1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=k[a+12>>2]|0;f=k[a+16>>2]|0;a:do if((e|0)==(f|0))g=0;else{k[d>>2]=b;a=e+((((w0a(c+4|0,d,4)|0)>>>0)%(f-e>>2>>>0)|0)<<2)|0;while(1){h=k[a>>2]|0;if(!h){g=0;break a}if((k[h>>2]|0)==(b|0)){g=h;break a}a=h+4|0}}while(0);r=c;return g|0}function w1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+16|0;e=d;P1a();T1a(70836);f=k[a>>2]|0;g=k[a+4>>2]|0;a:do if((f|0)!=(g|0)?(k[e>>2]=c,h=f+((((w0a(d+4|0,e,4)|0)>>>0)%(g-f>>2>>>0)|0)<<2)|0,i=k[h>>2]|0,(i|0)!=0):0){h=i;while(1){if((k[h+4>>2]|0)==(c|0)){j=h;break}h=k[h+8>>2]|0;if(!h)break a}x=0;h=Ta(635,a|0,b|0)|0;i=x;x=0;if(!(i&1)?(x=0,xa(943,j|0,h|0),i=x,x=0,!(i&1)):0){k[h+8>>2]=j;break}h=Hc()|0;V1a(70836);Sc(h|0)}while(0);V1a(70836);r=d;return}function x1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+16|0;d=c;e=c+4|0;f=a+20|0;g=a+16|0;h=k[g>>2]|0;i=a+12|0;a=k[i>>2]|0;j=h-a|0;l=a;if(((k[f>>2]|0)+1|0)>>>0>j>>2>>>0){a=Q1a((j>>1)+1|0)|0;j=zYa(a,4)|0;if(!j){m=Rd(4)|0;SBa(m);Gf(m|0,8888,1238)}m=k[i>>2]|0;n=k[g>>2]|0;o=m;while(1){if((o|0)==(n|0))break;p=k[o>>2]|0;while(1){if(!p)break;k[d>>2]=k[p>>2];q=((w0a(e,d,4)|0)>>>0)%(a>>>0)|0;s=p+4|0;t=k[s>>2]|0;u=j+(q<<2)|0;k[s>>2]=k[u>>2];k[u>>2]=p;p=t}o=o+4|0}yYa(m);k[i>>2]=j;i=j+(a<<2)|0;k[g>>2]=i;v=j;w=i}else{v=l;w=h}k[d>>2]=b;h=((w0a(e,d,4)|0)>>>0)%(w-v>>2>>>0)|0;w=k[v+(h<<2)>>2]|0;d=xYa(12)|0;k[v+(h<<2)>>2]=d;if(!d){h=Rd(4)|0;SBa(h);Gf(h|0,8888,1238)}else{k[d>>2]=b;k[d+4>>2]=w;k[d+8>>2]=0;k[f>>2]=(k[f>>2]|0)+1;r=c;return d|0}return 0}function y1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=a+16|0;d=k[c>>2]|0;e=a+20|0;if((d|0)==(k[e>>2]|0)){f=a+12|0;a=k[f>>2]|0;g=d-a>>1;h=(g|0)==0?1:g;g=xYa(h<<2)|0;i=a;if(!g){a=Rd(4)|0;SBa(a);Gf(a|0,8888,1238)}if(h>>>0>1){a=h>>>1;Dyb(g|0,i|0,a<<2|0)|0;j=a}else j=0;yYa(i);k[f>>2]=g;f=g+(j<<2)|0;k[c>>2]=f;k[e>>2]=g+(h<<2);l=f}else l=d;k[c>>2]=l+4;k[l>>2]=b;return}function z1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+16|0;d=c;e=c+4|0;P1a();T1a(70836);f=a+8|0;g=a+4|0;h=k[g>>2]|0;i=k[a>>2]|0;j=h-i|0;l=i;do if(((k[f>>2]|0)+1|0)>>>0>j>>2>>>0){x=0;i=Ba(632,(j>>1)+1|0)|0;m=x;x=0;if(!(m&1)){m=zYa(i,4)|0;if(!m){n=Rd(4)|0;SBa(n);x=0;fb(149,n|0,8888,1238);x=0;break}n=k[a>>2]|0;o=k[g>>2]|0;p=n;while(1){if((p|0)==(o|0))break;q=k[p>>2]|0;while(1){if(!q)break;k[d>>2]=k[q+4>>2];s=((w0a(e,d,4)|0)>>>0)%(i>>>0)|0;t=q+8|0;u=k[t>>2]|0;v=m+(s<<2)|0;k[t>>2]=k[v>>2];k[v>>2]=q;q=u}p=p+4|0}yYa(n);k[a>>2]=m;p=m+(i<<2)|0;k[g>>2]=p;w=m;y=p;z=13}}else{w=l;y=h;z=13}while(0);do if((z|0)==13){k[d>>2]=b;h=((w0a(e,d,4)|0)>>>0)%(y-w>>2>>>0)|0;l=k[w+(h<<2)>>2]|0;g=xYa(24)|0;k[w+(h<<2)>>2]=g;if(!(k[(k[a>>2]|0)+(h<<2)>>2]|0)){h=Rd(4)|0;SBa(h);x=0;fb(149,h|0,8888,1238);x=0;break}else{k[g+4>>2]=b;k[g+8>>2]=l;k[f>>2]=(k[f>>2]|0)+1;V1a(70836);r=c;return g|0}}while(0);c=Hc()|0;V1a(70836);Sc(c|0);return 0}function A1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c;P1a();T1a(70836);e=k[a+12>>2]|0;f=k[a+16>>2]|0;a:do if((e|0)!=(f|0)?(k[d>>2]=b,g=e+((((w0a(c+4|0,d,4)|0)>>>0)%(f-e>>2>>>0)|0)<<2)|0,h=k[g>>2]|0,(h|0)!=0):0){i=h;h=0;while(1){if((k[i>>2]|0)==(b|0)){j=i;l=h;break}m=k[i+4>>2]|0;if(!m)break a;else{n=i;i=m;h=n}}h=k[j+4>>2]|0;if(!l)k[g>>2]=h;else k[l+4>>2]=h;h=k[j+8>>2]|0;yYa(j);i=a+20|0;k[i>>2]=(k[i>>2]|0)+-1;if((h|0)!=0?(x=0,xa(944,h|0,j|0),h=x,x=0,h&1):0){h=Hc()|0;V1a(70836);Sc(h|0)}}while(0);V1a(70836);r=c;return}function B1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=a+16|0;d=k[c>>2]|0;e=k[a+12>>2]|0;while(1){if((e|0)==(d|0))break;if((k[e>>2]|0)==(b|0)){f=e;g=5;break}e=e+4|0}if((g|0)==5?(f|0)!=(d|0):0){g=d+-4|0;k[c>>2]=g;if((g|0)!=(f|0))Eyb(f|0,f+4|0,g-f|0)|0;return}IQa(325622)|0;Ub()}function C1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;P1a();T1a(70836);e=k[a+4>>2]|0;f=k[a>>2]|0;a:do if((e|0)!=(f|0)?(k[d>>2]=b,a=f+((((w0a(c+4|0,d,4)|0)>>>0)%(e-f>>2>>>0)|0)<<2)|0,g=k[a>>2]|0,(g|0)!=0):0){a=g;while(1){if((k[a+4>>2]|0)==(b|0)){h=a;break}a=k[a+8>>2]|0;if(!a)break a}a=h+16|0;g=k[h+12>>2]|0;i=k[a>>2]|0;while(1){if((i|0)==(g|0))break a;j=i+-4|0;k[a>>2]=j;k[(k[j>>2]|0)+8>>2]=0;i=j}}while(0);V1a(70836);r=c;return}function D1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;P1a();T1a(70836);e=k[a+4>>2]|0;f=k[a>>2]|0;a:do if((e|0)==(f|0)){P1a();V1a(70836);g=0}else{k[d>>2]=b;a=f+((((w0a(c+4|0,d,4)|0)>>>0)%(e-f>>2>>>0)|0)<<2)|0;h=k[a>>2]|0;if(!h){P1a();V1a(70836);g=0;break}else i=h;do{if((k[i+4>>2]|0)==(b|0)){g=i;break a}i=k[i+8>>2]|0}while((i|0)!=0);P1a();V1a(70836);g=0}while(0);r=c;return g|0}function E1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;k[d>>2]=b;e=w0a(c+4|0,d,4)|0;d=k[a>>2]|0;f=k[d+(((e>>>0)%((k[a+4>>2]|0)-d>>2>>>0)|0)<<2)>>2]|0;if(!f){IQa(325673)|0;Ub()}else g=f;while(1){if((k[g+4>>2]|0)==(b|0)){h=g;i=6;break}g=k[g+8>>2]|0;if(!g){i=5;break}}if((i|0)==5){IQa(325716)|0;Ub()}else if((i|0)==6){r=c;return h|0}return 0}function F1a(a){a=a|0;P1a();V1a(70836);return}function G1a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c;P1a();T1a(70836);e=k[a+4>>2]|0;f=k[a>>2]|0;a:do if((e|0)!=(f|0)?(k[d>>2]=b,g=f+((((w0a(c+4|0,d,4)|0)>>>0)%(e-f>>2>>>0)|0)<<2)|0,h=k[g>>2]|0,(h|0)!=0):0){i=h;h=0;while(1){if((k[i+4>>2]|0)==(b|0)){j=i;l=h;break}m=k[i+8>>2]|0;if(!m)break a;else{n=i;i=m;h=n}}h=k[j+8>>2]|0;if(!l)k[g>>2]=h;else k[l+8>>2]=h;h=j+16|0;i=k[j+12>>2]|0;n=k[h>>2]|0;while(1){if((n|0)==(i|0))break;m=n+-4|0;k[h>>2]=m;k[(k[m>>2]|0)+8>>2]=0;n=m}yYa(i);yYa(j);n=a+8|0;k[n>>2]=(k[n>>2]|0)+-1}while(0);V1a(70836);r=c;return}function H1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;P1a();T1a(70836);d=v1a(a,b)|0;e=v1a(a,c)|0;if(e){c=k[e+8>>2]|0;if(!d){x=0;e=Ta(635,a|0,b|0)|0;b=x;x=0;if(!(b&1)){f=c;g=e;h=5}}else{i=c;j=d;h=6}}else{f=0;g=d;h=5}if((h|0)==5)if(!g){l=0;m=f;n=0;o=0;h=7}else{i=f;j=g;h=6}if((h|0)==6){l=k[j+8>>2]|0;m=i;n=1;o=j;h=7}do if((h|0)==7){if((l|0)!=(m|0)){if((l|0)!=0?(x=0,xa(944,l|0,o|0),j=x,x=0,j&1):0)break;if((n?(j=o+8|0,k[j>>2]=0,(m|0)!=0):0)?(k[j>>2]=m,x=0,xa(943,m|0,o|0),j=x,x=0,j&1):0)break}V1a(70836);return}while(0);o=Hc()|0;V1a(70836);Sc(o|0)}function I1a(a,b){a=a|0;b=b|0;var c=0,d=0;P1a();T1a(70836);c=v1a(a,b)|0;if((c|0)!=0?(a=k[c+8>>2]|0,(a|0)!=0):0){x=0;c=Ta(k[(k[a>>2]|0)+8>>2]|0,a|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;V1a(70836);Sc(b|0)}else d=c}else d=0;V1a(70836);return d|0}function J1a(a,b){a=a|0;b=b|0;var c=0,d=0;P1a();T1a(70836);c=v1a(a,b)|0;if((c|0)!=0?(a=k[c+8>>2]|0,(a|0)!=0):0){x=0;c=Ta(k[(k[a>>2]|0)+12>>2]|0,a|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;V1a(70836);Sc(b|0)}else d=c}else d=0;V1a(70836);return d|0}function K1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;P1a();T1a(70836);d=v1a(a,b)|0;if((d|0)!=0?(a=k[d+8>>2]|0,(a|0)!=0):0){x=0;d=Fa(k[(k[a>>2]|0)+16>>2]|0,a|0,b|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;V1a(70836);Sc(c|0)}else e=d}else e=0;V1a(70836);return e|0}function L1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;P1a();T1a(70836);d=v1a(a,b)|0;if((d|0)!=0?(a=k[d+8>>2]|0,(a|0)!=0):0){x=0;d=Fa(k[(k[a>>2]|0)+20>>2]|0,a|0,b|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;V1a(70836);Sc(c|0)}else e=d}else e=0;V1a(70836);return e|0}function M1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;P1a();T1a(70836);d=v1a(a,b)|0;b=v1a(a,c)|0;if(!d)e=0;else e=k[d+8>>2]|0;if(!b)f=0;else f=k[b+8>>2]|0;V1a(70836);return (e|0)!=0&(e|0)==(f|0)|0}function N1a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+16|0;e=d;f=d+4|0;P1a();T1a(70836);k[e>>2]=b;g=w0a(f,e,4)|0;h=k[a>>2]|0;i=(k[a+4>>2]|0)-h>>2;a=k[h+(((g>>>0)%(i>>>0)|0)<<2)>>2]|0;do if(!a){IQa(325759)|0;x=0;hb(54);x=0}else{g=a;while(1){if((k[g+4>>2]|0)==(b|0)){j=g;break}g=k[g+8>>2]|0;if(!g){l=6;break}}if((l|0)==6){IQa(325798)|0;x=0;hb(54);x=0;break}k[e>>2]=c;g=h+((((w0a(f,e,4)|0)>>>0)%(i>>>0)|0)<<2)|0;m=k[g>>2]|0;if(!m){IQa(325837)|0;x=0;hb(54);x=0;break}else n=m;while(1){if((k[n+4>>2]|0)==(c|0)){o=n;break}n=k[n+8>>2]|0;if(!n){l=11;break}}if((l|0)==11){IQa(325876)|0;x=0;hb(54);x=0;break}m=j+12|0;g=o+12|0;p=k[m>>2]|0;k[m>>2]=k[g>>2];k[g>>2]=p;p=j+16|0;q=o+16|0;s=k[p>>2]|0;k[p>>2]=k[q>>2];k[q>>2]=s;s=j+20|0;t=o+20|0;u=k[s>>2]|0;k[s>>2]=k[t>>2];k[t>>2]=u;u=k[p>>2]|0;p=k[m>>2]|0;while(1){if((p|0)==(u|0))break;k[(k[p>>2]|0)+8>>2]=j;p=p+4|0}p=k[q>>2]|0;u=k[g>>2]|0;while(1){if((u|0)==(p|0))break;k[(k[u>>2]|0)+8>>2]=o;u=u+4|0}V1a(70836);r=d;return}while(0);d=Hc()|0;V1a(70836);Sc(d|0)}function O1a(a,b){a=a|0;b=b|0;P1a();T1a(70836);x=0;Ta(635,a|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;V1a(70836);Sc(b|0)}else{V1a(70836);return}}function P1a(){if((i[17512]|0)==0?(Bb(17512)|0)!=0:0)Kc(17512);return}function Q1a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;k[d>>2]=a;do if(a>>>0>=212){if(a>>>0>4294967291){f=Rd(8)|0;x=0;xa(616,f|0,325915);g=x;x=0;if(g&1){g=Hc()|0;Fc(f|0);Sc(g|0)}else{k[f>>2]=47584;Gf(f|0,9072,1245)}}f=(a>>>0)/210|0;g=f*210|0;k[e>>2]=a-g;h=(R1a(71056,71248,e,c)|0)-71056>>2;i=h;j=f;f=(k[71056+(h<<2)>>2]|0)+g|0;a:while(1){g=5;while(1){if(g>>>0>=47){l=211;m=12;break}h=k[70864+(g<<2)>>2]|0;n=(f>>>0)/(h>>>0)|0;if(n>>>0>>0){o=f;m=110;break a}if((f|0)==(ia(n,h)|0))break;else g=g+1|0}b:do if((m|0)==12)while(1){m=0;g=(f>>>0)/(l>>>0)|0;if(g>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(g,l)|0))break b;g=l+10|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+12|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+16|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+18|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+22|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+28|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+30|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+36|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+40|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+42|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+46|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+52|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+58|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+60|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+66|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+70|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+72|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+78|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+82|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+88|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+96|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+100|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+102|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+106|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+108|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+112|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+120|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+126|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+130|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+136|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+138|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+142|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+148|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+150|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+156|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+162|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+166|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+168|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+172|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+178|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+180|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+186|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+190|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+192|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+196|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+198|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break b;g=l+208|0;h=(f>>>0)/(g>>>0)|0;if(h>>>0>>0){p=f;m=109;break a}if((f|0)==(ia(h,g)|0))break;else{l=l+210|0;m=12}}while(0);g=i+1|0;h=(g|0)==48;n=(h&1)+j|0;q=h?0:g;i=q;j=n;f=(k[71056+(q<<2)>>2]|0)+(n*210|0)|0}if((m|0)==109){k[d>>2]=p;s=p;break}else if((m|0)==110){k[d>>2]=o;s=o;break}}else{f=R1a(70864,71056,d,c)|0;s=k[f>>2]|0}while(0);r=b;return s|0}function R1a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;d=k[c>>2]|0;c=a;e=b-a>>2;a:while(1){a=e;while(1){if(!a){f=c;break a}b=(a|0)/2|0;g=c+(b<<2)|0;if((k[g>>2]|0)>>>0>>0){h=b;i=g;j=a;break}else a=b}c=i+4|0;e=j+-1-h|0}return f|0}function S1a(a){a=a|0;x=0;Ba(568,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function T1a(a){a=a|0;var b=0;b=td(a|0)|0;if(b)i1a(b,325940);return}function U1a(a){a=a|0;var b=0;x=0;b=Ba(633,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return (b|0)==0|0;return 0}function V1a(a){a=a|0;var b=0;x=0;b=Ba(567,a|0)|0;a=x;x=0;do if(!(a&1))if(!b)return;else{x=0;nb(177,325958,325966,47,326032);x=0;break}while(0);b=Hc(0)|0;Fg(b)}function W1a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;d=Df(c|0)|0;do if(!d){e=_b(c|0,1)|0;if(e){ff(c|0)|0;f=e;g=7;break}e=Lf(a|0,c|0)|0;h=ff(c|0)|0;if(!e){if(h){of(a|0)|0;f=h;g=7}}else{f=e;g=7}}else{f=d;g=7}while(0);if((g|0)==7)i1a(f,326039);r=b;return}function X1a(a){a=a|0;var b=0;x=0;b=Ba(568,a|0)|0;a=x;x=0;do if(!(a&1))if(!b)return;else{x=0;nb(177,326074,325966,85,326081);x=0;break}while(0);b=Hc(0)|0;Fg(b)}function Y1a(a){a=a|0;var b=0;b=td(a|0)|0;if(b)i1a(b,326098);return}function Z1a(a){a=a|0;var b=0;x=0;b=Ba(567,a|0)|0;a=x;x=0;do if(!(a&1))if(!b)return;else{x=0;nb(177,326074,325966,101,326032);x=0;break}while(0);b=Hc(0)|0;Fg(b)}function _1a(a){a=a|0;var b=0;x=0;b=Ba(633,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return (b|0)==0|0;return 0}function $1a(a){a=a|0;var b=0,c=0;b=a;c=b+76|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(c|0));i[a+76>>0]=0;return}function a2a(a){a=a|0;var b=0;x=0;va(1536,a|0);b=x;x=0;if(b&1){b=Hc(0)|0;L_a(a+28|0);S1a(a);Fg(b)}else{V1a(a);L_a(a+28|0);S1a(a);return}}function b2a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;k[c>>2]=a;d=c+4|0;i[d>>0]=1;T1a(a);e=a+76|0;f=a+28|0;while(1){if(!(i[e>>0]|0))break;O_a(f,c)}i[e>>0]=1;if(i[d>>0]|0)V1a(k[c>>2]|0);r=b;return}function c2a(a){a=a|0;var b=0,c=0,d=0;if(U1a(a)|0){b=a+76|0;if(!(i[b>>0]|0)){i[b>>0]=1;c=1}else c=0;V1a(a);d=c}else d=0;return d|0}function d2a(a){a=a|0;var b=0;x=0;va(1536,a|0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{i[a+76>>0]=0;M_a(a+28|0);V1a(a);return}}function e2a(a){a=a|0;var b=0;b=a;a=b+84|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function f2a(a){a=a|0;var b=0;x=0;va(1536,a|0);b=x;x=0;if(b&1){b=Hc(0)|0;L_a(a+28|0);S1a(a);Fg(b)}else{V1a(a);L_a(a+28|0);S1a(a);return}}function g2a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b;d=pf()|0;k[c>>2]=a;e=c+4|0;i[e>>0]=1;T1a(a);f=a+80|0;g=a+76|0;if((d|0)==(k[f>>2]|0)){h=k[g>>2]|0;do if((h|0)==-1){x=0;xa(935,11,326126);j=x;x=0;if(!(j&1)){l=k[g>>2]|0;break}j=Hc()|0;if(i[e>>0]|0)V1a(k[c>>2]|0);Sc(j|0)}else l=h;while(0);k[g>>2]=l+1}else{l=a+28|0;while(1){if(!(k[g>>2]|0))break;O_a(l,c)}k[g>>2]=1;k[f>>2]=d}if(i[e>>0]|0)V1a(k[c>>2]|0);r=b;return}function h2a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=pf()|0;if(U1a(a)|0){c=a+76|0;d=k[c>>2]|0;e=a+80|0;if(d)if((d|0)==-1?1:(b|0)!=(k[e>>2]|0))f=0;else{g=d;h=4}else{g=0;h=4}if((h|0)==4){k[c>>2]=g+1;k[e>>2]=b;f=1}V1a(a);i=f}else i=0;return i|0}function i2a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;k[c>>2]=a;d=c+4|0;i[d>>0]=1;x=0;va(1536,a|0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}e=a+76|0;f=(k[e>>2]|0)+-1|0;k[e>>2]=f;do if(!f){k[a+80>>2]=0;x=0;va(1533,c|0);e=x;x=0;if(!(e&1)){M_a(a+28|0);if(!(i[d>>0]|0))break;else{g=8;break}}e=Hc(0)|0;if(i[d>>0]|0)V1a(k[c>>2]|0);Fg(e)}else g=8;while(0);if((g|0)==8)V1a(k[c>>2]|0);r=b;return}function j2a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;td(71248)|0;while(1){if((k[a>>2]|0)!=1)break;Oe(71276,71248)|0}do if(!(k[a>>2]|0)){k[a>>2]=1;x=0;Ba(567,71248)|0;d=x;x=0;if((((!(d&1)?(x=0,va(c|0,b|0),d=x,x=0,!(d&1)):0)?(x=0,Ba(565,71248)|0,d=x,x=0,!(d&1)):0)?(k[a>>2]=-1,x=0,Ba(567,71248)|0,d=x,x=0,!(d&1)):0)?(x=0,Ba(566,71276)|0,d=x,x=0,!(d&1)):0)break;d=Hc(0)|0;me(d|0)|0;x=0;Ba(565,71248)|0;d=x;x=0;if((!(d&1)?(k[a>>2]=0,x=0,Ba(567,71248)|0,d=x,x=0,!(d&1)):0)?(x=0,Ba(566,71276)|0,d=x,x=0,!(d&1)):0){x=0;hb(46);x=0}d=Hc()|0;x=0;hb(45);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}else rf(71248)|0;while(0);return}function k2a(a){a=a|0;var b=0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function l2a(a){a=a|0;var b=0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function m2a(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function n2a(a,b){a=a|0;b=b|0;if(!(i[b>>0]&1)){k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2]}else q2a(a,k[b+8>>2]|0,k[b+4>>2]|0);return}function o2a(a){a=a|0;return a|0}function p2a(a){a=a|0;return (i[a>>0]&1)!=0|0}function q2a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(c>>>0>4294967279)GBa(a);if(c>>>0<11){i[a>>0]=c<<1;d=a+1|0}else{e=c+16&-16;f=KBa(e)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=c;d=f}Dyb(d|0,b|0,c|0)|0;i[d+c>>0]=0;return}function r2a(a){a=a|0;return k[a+8>>2]|0}function s2a(a){a=a|0;return k[a+4>>2]|0}function t2a(a,b,c){a=a|0;b=b|0;c=c|0;if(!(i[b>>0]&1)){k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2]}else q2a(a,k[b+8>>2]|0,k[b+4>>2]|0);return}function u2a(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function v2a(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function w2a(a){a=a|0;return a|0}function x2a(a){a=a|0;return k[a+8>>2]|0}function y2a(a,b){a=a|0;b=b|0;q2a(a,b,RLa(b)|0);return}function z2a(a,b,c){a=a|0;b=b|0;c=c|0;q2a(a,b,RLa(b)|0);return}function A2a(a,b,c){a=a|0;b=b|0;c=c|0;q2a(a,b,c);return}function B2a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;q2a(a,b,c);return}function C2a(a,b,c){a=a|0;b=b|0;c=c|0;D2a(a,b,c);return}function D2a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(b>>>0>4294967279)GBa(a);if(b>>>0<11){i[a>>0]=b<<1;d=a+1|0}else{e=b+16&-16;f=KBa(e)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=b;d=f}Fyb(d|0,c|0,b|0)|0;i[d+b>>0]=0;return}function E2a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;D2a(a,b,c);return}function F2a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;e=i[b>>0]|0;f=(e&1)==0;g=f?(e&255)>>>1:k[b+4>>2]|0;if(g>>>0>>0)VEa(a);else{e=g-c|0;q2a(a,(f?b+1|0:k[b+8>>2]|0)+c|0,e>>>0>>0?e:d);return}}function G2a(a){a=a|0;var b=0,c=0;b=i[a>>0]|0;if(!(b&1))c=(b&255)>>>1;else c=k[a+4>>2]|0;return c|0}function H2a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function I2a(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;_8a(a,c,c+(k[b+4>>2]|0)|0);return}function J2a(a,b,c){a=a|0;b=b|0;c=c|0;c=k[b>>2]|0;_8a(a,c,c+(k[b+4>>2]|0)|0);return}function K2a(a){a=a|0;if(i[a>>0]&1)OBa(k[a+8>>2]|0);return}function L2a(a){a=a|0;return k[a>>2]&-2|0}function M2a(a,b){a=a|0;b=b|0;var c=0,d=0;if((a|0)!=(b|0)){c=i[b>>0]|0;d=(c&1)==0;Z2a(a,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0}return a|0}function N2a(a,b){a=a|0;b=b|0;return}function O2a(a,b){a=a|0;b=b|0;var c=0,d=0;c=i[b>>0]|0;d=(c&1)==0;return Z2a(a,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0}function P2a(a,b){a=a|0;b=b|0;var c=0;if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}x=0;xa(603,a|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];c=0;while(1){if((c|0)==3)break;k[b+(c<<2)>>2]=0;c=c+1|0}return a|0}function Q2a(a,b,c){a=a|0;b=b|0;c=c|0;if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}x=0;xa(603,a|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function R2a(a,b){a=a|0;b=b|0;return S2a(a,b)|0}function S2a(a,b){a=a|0;b=b|0;return Z2a(a,b,RLa(b)|0)|0}function T2a(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(i[a>>0]&1)){i[a>>0]=2;c=a+1|0}else{d=k[a+8>>2]|0;k[a+4>>2]=1;c=d}i[c>>0]=b;i[c+1>>0]=0;return a|0}function U2a(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function V2a(a){a=a|0;return a+1|0}function W2a(a,b){a=a|0;b=b|0;i[a>>0]=b<<1;return}function X2a(a,b){a=a|0;b=b|0;return}function Y2a(a,b){a=a|0;b=b|0;return Z2a(a,k[b>>2]|0,k[b+4>>2]|0)|0}function Z2a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}d=(f&1)==0;do if(e>>>0>=c>>>0){if(d)g=a+1|0;else g=k[a+8>>2]|0;Eyb(g|0,b|0,c|0)|0;i[g+c>>0]=0;if(!(i[a>>0]&1)){i[a>>0]=c<<1;break}else{k[a+4>>2]=c;break}}else{if(d)h=(f&255)>>>1;else h=k[a+4>>2]|0;R3a(a,e,c-e|0,h,0,h,c,b)}while(0);return a|0}function _2a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function $2a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function a3a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function b3a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function c3a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+1|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+d|0}function d3a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+1|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+d|0}function e3a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;if(!(c&1)){d=b+1|0;e=(c&255)>>>1}else{d=k[b+8>>2]|0;e=k[b+4>>2]|0}b=d+e|0;k[a>>2]=b;k[a+4>>2]=b;return}function f3a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;if(!(c&1)){d=b+1|0;e=(c&255)>>>1}else{d=k[b+8>>2]|0;e=k[b+4>>2]|0}b=d+e|0;k[a>>2]=b;k[a+4>>2]=b;return}function g3a(a,b){a=a|0;b=b|0;var c=0;if(!(i[b>>0]&1))c=b+1|0;else c=k[b+8>>2]|0;b=c;k[a>>2]=b;k[a+4>>2]=b;return}function h3a(a,b){a=a|0;b=b|0;var c=0;if(!(i[b>>0]&1))c=b+1|0;else c=k[b+8>>2]|0;b=c;k[a>>2]=b;k[a+4>>2]=b;return}function i3a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function j3a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+1|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+d|0}function k3a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;if(!(c&1)){d=b+1|0;e=(c&255)>>>1}else{d=k[b+8>>2]|0;e=k[b+4>>2]|0}b=d+e|0;k[a>>2]=b;k[a+4>>2]=b;return}function l3a(a,b){a=a|0;b=b|0;var c=0;if(!(i[b>>0]&1))c=b+1|0;else c=k[b+8>>2]|0;b=c;k[a>>2]=b;k[a+4>>2]=b;return}function m3a(a){a=a|0;return (l[a>>0]|0)>>>1|0}function n3a(a){a=a|0;var b=0,c=0;b=i[a>>0]|0;if(!(b&1))c=(b&255)>>>1;else c=k[a+4>>2]|0;return c|0}function o3a(a){a=a|0;return -17}function p3a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=10;else b=(k[a>>2]&-2)+-1|0;return b|0}function q3a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=i[a>>0]|0;e=(d&1)==0;if(e)f=(d&255)>>>1;else f=k[a+4>>2]|0;do if(f>>>0>=b>>>0)if(e){i[a+1+b>>0]=0;i[a>>0]=b<<1;break}else{i[(k[a+8>>2]|0)+b>>0]=0;k[a+4>>2]=b;break}else r3a(a,b-f|0,c)|0;while(0);return}function r3a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;if(b){d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;if((e-g|0)>>>0>>0){S3a(a,e,b-e+g|0,g,g,0,0);h=i[a>>0]|0}else h=f;if(!(h&1))j=a+1|0;else j=k[a+8>>2]|0;Fyb(j+g|0,c|0,b|0)|0;c=g+b|0;if(!(i[a>>0]&1))i[a>>0]=c<<1;else k[a+4>>2]=c;i[j+c>>0]=0}return a|0}function s3a(a,b){a=a|0;b=b|0;if(!(i[a>>0]&1)){i[a+1+b>>0]=0;i[a>>0]=b<<1}else{i[(k[a+8>>2]|0)+b>>0]=0;k[a+4>>2]=b}return}function t3a(a,b){a=a|0;b=b|0;q3a(a,b,0);return}function u3a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;if(b>>>0>4294967279)GBa(a);c=i[a>>0]|0;if(!(c&1)){d=10;e=c}else{c=k[a>>2]|0;d=(c&-2)+-1|0;e=c&255}if(!(e&1))f=(e&255)>>>1;else f=k[a+4>>2]|0;c=f>>>0>b>>>0?f:b;if(c>>>0<11)g=10;else g=(c+16&-16)+-1|0;a:do if((g|0)!=(d|0)){do if((g|0)!=10){c=g+1|0;if(g>>>0<=d>>>0){x=0;b=Ba(563,c|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;me(h|0)|0;ge();break a}else j=b}else j=KBa(c)|0;if(!(e&1)){l=j;m=1;n=a+1|0;o=0;break}else{l=j;m=1;n=k[a+8>>2]|0;o=1;break}}else{l=a+1|0;m=0;n=k[a+8>>2]|0;o=1}while(0);if(!(e&1))p=(e&255)>>>1;else p=k[a+4>>2]|0;Dyb(l|0,n|0,p+1|0)|0;if(o)OBa(n);if(m){k[a>>2]=g+1|1;k[a+4>>2]=f;k[a+8>>2]=l;break}else{i[a>>0]=f<<1;break}}while(0);return}function v3a(a){a=a|0;var b=0;if(a>>>0<11)b=10;else b=(a+16&-16)+-1|0;return b|0}function w3a(a,b){a=a|0;b=b|0;k[a>>2]=b|1;return}function x3a(a,b){a=a|0;b=b|0;k[a+8>>2]=b;return}function y3a(a){a=a|0;return}function z3a(a){a=a|0;x=0;xa(603,a|0,0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function A3a(a){a=a|0;if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}return}function B3a(a){a=a|0;var b=0,c=0;b=i[a>>0]|0;if(!(b&1))c=(b&255)>>>1;else c=k[a+4>>2]|0;return (c|0)==0|0}function C3a(a,b){a=a|0;b=b|0;var c=0;if(!(i[a>>0]&1))c=a+1|0;else c=k[a+8>>2]|0;return c+b|0}function D3a(a,b){a=a|0;b=b|0;var c=0;if(!(i[a>>0]&1))c=a+1|0;else c=k[a+8>>2]|0;return c+b|0}function E3a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=i[a>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+4>>2]|0;if(e>>>0<=b>>>0)VEa(a);if(d)f=a+1|0;else f=k[a+8>>2]|0;return f+b|0}function F3a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=i[a>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+4>>2]|0;if(e>>>0<=b>>>0)VEa(a);if(d)f=a+1|0;else f=k[a+8>>2]|0;return f+b|0}function G3a(a,b){a=a|0;b=b|0;var c=0,d=0;c=i[b>>0]|0;d=(c&1)==0;return O3a(a,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0}function H3a(a,b){a=a|0;b=b|0;var c=0,d=0;c=i[b>>0]|0;d=(c&1)==0;return O3a(a,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0}function I3a(a,b){a=a|0;b=b|0;return J3a(a,b)|0}function J3a(a,b){a=a|0;b=b|0;return O3a(a,b,RLa(b)|0)|0}function K3a(a,b){a=a|0;b=b|0;L3a(a,b);return a|0}function L3a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=i[a>>0]|0;d=(c&1)!=0;if(d){e=(k[a>>2]&-2)+-1|0;f=k[a+4>>2]|0}else{e=10;f=(c&255)>>>1}if((f|0)==(e|0)){S3a(a,e,1,e,e,0,0);if(!(i[a>>0]&1))g=7;else g=8}else if(d)g=8;else g=7;if((g|0)==7){i[a>>0]=(f<<1)+2;h=a+1|0}else if((g|0)==8){g=k[a+8>>2]|0;k[a+4>>2]=f+1;h=g}g=h+f|0;i[g>>0]=b;i[g+1>>0]=0;return}function M3a(a,b){a=a|0;b=b|0;var c=0;c=b;return O3a(a,k[c>>2]|0,k[c+4>>2]|0)|0}function N3a(a,b){a=a|0;b=b|0;return O3a(a,k[b>>2]|0,k[b+4>>2]|0)|0}function O3a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;if((e-g|0)>>>0>=c>>>0){if(c){if(!(f&1))h=a+1|0;else h=k[a+8>>2]|0;Dyb(h+g|0,b|0,c|0)|0;f=g+c|0;if(!(i[a>>0]&1))i[a>>0]=f<<1;else k[a+4>>2]=f;i[h+f>>0]=0}}else R3a(a,e,c-e+g|0,g,g,0,c,b);return a|0}function P3a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=i[b>>0]|0;f=(e&1)==0;g=f?(e&255)>>>1:k[b+4>>2]|0;if(g>>>0>>0)VEa(a);else{e=g-c|0;return O3a(a,(f?b+1|0:k[b+8>>2]|0)+c|0,e>>>0>>0?e:d)|0}return 0}function Q3a(a,b){a=a|0;b=b|0;if(!(i[a>>0]&1))i[a>>0]=b<<1;else k[a+4>>2]=b;return}function R3a(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;if((-18-b|0)>>>0>>0)GBa(a);if(!(i[a>>0]&1))j=a+1|0;else j=k[a+8>>2]|0;if(b>>>0<2147483623){l=c+b|0;c=b<<1;m=l>>>0>>0?c:l;n=m>>>0<11?11:m+16&-16}else n=-17;m=KBa(n)|0;if(e)Dyb(m|0,j|0,e|0)|0;if(g)Dyb(m+e|0,h|0,g|0)|0;h=d-f|0;if((h|0)!=(e|0))Dyb(m+e+g|0,j+e+f|0,h-e|0)|0;if((b|0)!=10)OBa(j);k[a+8>>2]=m;k[a>>2]=n|1;n=h+g|0;k[a+4>>2]=n;i[m+n>>0]=0;return}function S3a(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0;if((-17-b|0)>>>0>>0)GBa(a);if(!(i[a>>0]&1))h=a+1|0;else h=k[a+8>>2]|0;if(b>>>0<2147483623){j=c+b|0;c=b<<1;l=j>>>0>>0?c:j;m=l>>>0<11?11:l+16&-16}else m=-17;l=KBa(m)|0;if(e)Dyb(l|0,h|0,e|0)|0;j=d-f|0;if((j|0)!=(e|0))Dyb(l+e+g|0,h+e+f|0,j-e|0)|0;if((b|0)!=10)OBa(h);k[a+8>>2]=l;k[a>>2]=m|1;return}function T3a(a){a=a|0;var b=0,c=0;b=i[a>>0]|0;if(!(b&1)){c=((b&255)>>>1)+-1|0;i[a>>0]=c<<1;i[a+1+c>>0]=0}else{c=a+4|0;b=(k[c>>2]|0)+-1|0;k[c>>2]=b;i[(k[a+8>>2]|0)+b>>0]=0}return}function U3a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function V3a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function W3a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+1|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+d+-1|0}function X3a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+1|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+d+-1|0}function Y3a(a,b){a=a|0;b=b|0;var c=0;if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}x=0;xa(603,a|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];c=0;while(1){if((c|0)==3)break;k[b+(c<<2)>>2]=0;c=c+1|0}return a|0}function Z3a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=i[b>>0]|0;f=(e&1)==0;g=f?(e&255)>>>1:k[b+4>>2]|0;if(g>>>0>>0)VEa(a);else{e=g-c|0;return Z2a(a,(f?b+1|0:k[b+8>>2]|0)+c|0,e>>>0>>0?e:d)|0}return 0}function _3a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(e>>>0>>0){if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;S3a(a,e,b-e|0,g,0,g,0);h=i[a>>0]|0}else h=f;if(!(h&1))j=a+1|0;else j=k[a+8>>2]|0;Fyb(j|0,c|0,b|0)|0;i[j+b>>0]=0;if(!(i[a>>0]&1))i[a>>0]=b<<1;else k[a+4>>2]=b;return a|0}function $3a(a,b){a=a|0;b=b|0;return Z2a(a,k[b>>2]|0,k[b+4>>2]|0)|0}function a4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i[c>>0]|0;e=(d&1)==0;return b4a(a,b,e?c+1|0:k[c+8>>2]|0,e?(d&255)>>>1:k[c+4>>2]|0)|0}function b4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=i[a>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+4>>2]|0;if(g>>>0>>0)VEa(a);if(f){h=10;j=e}else{e=k[a>>2]|0;h=(e&-2)+-1|0;j=e&255}if((h-g|0)>>>0>=d>>>0){if(d){if(!(j&1))l=a+1|0;else l=k[a+8>>2]|0;if((g|0)==(b|0)){m=c;n=l+b|0}else{j=l+b|0;Eyb(j+d|0,j|0,g-b|0)|0;m=j>>>0<=c>>>0&(l+g|0)>>>0>c>>>0?c+d|0:c;n=j}Eyb(n|0,m|0,d|0)|0;m=g+d|0;if(!(i[a>>0]&1))i[a>>0]=m<<1;else k[a+4>>2]=m;i[l+m>>0]=0}}else R3a(a,h,g+d-h|0,g,b,0,d,c);return a|0}function c4a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i[c>>0]|0;g=(f&1)==0;h=g?(f&255)>>>1:k[c+4>>2]|0;if(h>>>0>>0)VEa(a);else{f=h-d|0;return b4a(a,b,(g?c+1|0:k[c+8>>2]|0)+d|0,f>>>0>>0?f:e)|0}return 0}function d4a(a,b,c){a=a|0;b=b|0;c=c|0;return b4a(a,b,c,RLa(c)|0)|0}function e4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;e=i[a>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+4>>2]|0;if(g>>>0>>0)VEa(a);if(c){if(f){h=10;j=e}else{e=k[a>>2]|0;h=(e&-2)+-1|0;j=e&255}if((h-g|0)>>>0>=c>>>0){if(!(j&1))l=a+1|0;else l=k[a+8>>2]|0;if((g|0)==(b|0))m=l;else{j=l+b|0;Eyb(j+c|0,j|0,g-b|0)|0;m=l}}else{S3a(a,h,g+c-h|0,g,b,0,c);m=k[a+8>>2]|0}Fyb(m+b|0,d|0,c|0)|0;d=g+c|0;if(!(i[a>>0]&1))i[a>>0]=d<<1;else k[a+4>>2]=d;i[m+d>>0]=0}return a|0}function f4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[a>>0]|0;if(!(d&1)){e=10;f=(d&255)>>>1;g=(k[b>>2]|0)-(a+1)|0;h=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=k[a+4>>2]|0;g=(k[b>>2]|0)-(k[a+8>>2]|0)|0;h=d&255}if((e|0)!=(f|0)){if(!(h&1))j=a+1|0;else j=k[a+8>>2]|0;if((f|0)==(g|0))l=j;else{h=j+g|0;Eyb(h+1|0,h|0,f-g|0)|0;l=j}}else{S3a(a,f,1,f,g,0,1);l=k[a+8>>2]|0}i[l+g>>0]=c;c=f+1|0;i[l+c>>0]=0;l=i[a>>0]|0;if(!(l&1)){f=c<<1&255;i[a>>0]=f;m=f}else{k[a+4>>2]=c;m=l}if(!(m&1))n=a+1|0;else n=k[a+8>>2]|0;return n+g|0}function g4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(!(i[a>>0]&1))e=a+1|0;else e=k[a+8>>2]|0;f=(k[b>>2]|0)-e|0;e4a(a,f,c,d)|0;if(!(i[a>>0]&1))g=a+1|0;else g=k[a+8>>2]|0;return g+f|0}function h4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d+4|0;f=d;k[f>>2]=k[b>>2];b=k[c>>2]|0;g=b+(k[c+4>>2]|0)|0;k[e>>2]=k[f>>2];f=Fga(a,e,b,g)|0;r=d;return f|0}function i4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;e=(d&1)==0;if(e)f=(d&255)>>>1;else f=k[a+4>>2]|0;if(f>>>0>>0)VEa(a);if(c){if(e)g=a+1|0;else g=k[a+8>>2]|0;e=f-b|0;h=e>>>0>>0?e:c;if((e|0)==(h|0))j=d;else{d=g+b|0;Eyb(d|0,d+h|0,e-h|0)|0;j=i[a>>0]|0}e=f-h|0;if(!(j&1))i[a>>0]=e<<1;else k[a+4>>2]=e;i[g+e>>0]=0}return a|0}function j4a(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(i[a>>0]&1))c=a+1|0;else c=k[a+8>>2]|0;d=(k[b>>2]|0)-c|0;i4a(a,d,1)|0;return c+d|0}function k4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(!(i[a>>0]&1))d=a+1|0;else d=k[a+8>>2]|0;e=k[b>>2]|0;b=e-d|0;i4a(a,b,(k[c>>2]|0)-e|0)|0;return d+b|0}function l4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=i[d>>0]|0;f=(e&1)==0;return m4a(a,b,c,f?d+1|0:k[d+8>>2]|0,f?(e&255)>>>1:k[d+4>>2]|0)|0}function m4a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=i[a>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[a+4>>2]|0;if(h>>>0>>0)VEa(a);j=h-b|0;l=j>>>0>>0?j:c;if(g){m=10;n=f}else{f=k[a>>2]|0;m=(f&-2)+-1|0;n=f&255}if((l-h+m|0)>>>0>>0)R3a(a,m,h+e-l-m|0,h,b,l,e,d);else{if(!(n&1))o=a+1|0;else o=k[a+8>>2]|0;do if((l|0)!=(e|0)){n=j-l|0;if((j|0)==(l|0)){p=b;q=d;r=e;s=j;t=21}else{m=o+b|0;if(l>>>0>e>>>0){Eyb(m|0,d|0,e|0)|0;Eyb(m+e|0,m+l|0,n|0)|0;u=e;v=l;break}do if(m>>>0>>0&(o+h|0)>>>0>d>>>0)if((m+l|0)>>>0>d>>>0){Eyb(m|0,d|0,l|0)|0;w=l+b|0;x=d+e|0;y=e-l|0;z=0;break}else{w=b;x=d+(e-l)|0;y=e;z=l;break}else{w=b;x=d;y=e;z=l}while(0);m=o+w|0;Eyb(m+y|0,m+z|0,n|0)|0;p=w;q=x;r=y;s=z;t=21}}else{p=b;q=d;r=e;s=e;t=21}while(0);if((t|0)==21){Eyb(o+p|0,q|0,r|0)|0;u=r;v=s}s=u-v+h|0;if(!(i[a>>0]&1))i[a>>0]=s<<1;else k[a+4>>2]=s;i[o+s>>0]=0}return a|0}function n4a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i[d>>0]|0;h=(g&1)==0;j=h?(g&255)>>>1:k[d+4>>2]|0;if(j>>>0>>0)VEa(a);else{g=j-e|0;return m4a(a,b,c,(h?d+1|0:k[d+8>>2]|0)+e|0,g>>>0>>0?g:f)|0}return 0}function o4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return m4a(a,b,c,d,RLa(d)|0)|0}function p4a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;f=i[a>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[a+4>>2]|0;if(h>>>0>>0)VEa(a);j=h-b|0;l=j>>>0>>0?j:c;if(g){m=10;n=f}else{f=k[a>>2]|0;m=(f&-2)+-1|0;n=f&255}if((l-h+m|0)>>>0>=d>>>0){if(!(n&1))o=a+1|0;else o=k[a+8>>2]|0;if((l|0)==(d|0)|(j|0)==(l|0))p=o;else{n=o+b|0;Eyb(n+d|0,n+l|0,j-l|0)|0;p=o}}else{S3a(a,m,h+d-l-m|0,h,b,l,d);p=k[a+8>>2]|0}Fyb(p+b|0,e|0,d|0)|0;e=d-l+h|0;if(!(i[a>>0]&1))i[a>>0]=e<<1;else k[a+4>>2]=e;i[p+e>>0]=0;return a|0}function q4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(!(i[a>>0]&1))e=a+1|0;else e=k[a+8>>2]|0;f=k[b>>2]|0;b=i[d>>0]|0;g=(b&1)==0;return m4a(a,f-e|0,(k[c>>2]|0)-f|0,g?d+1|0:k[d+8>>2]|0,g?(b&255)>>>1:k[d+4>>2]|0)|0}function r4a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(!(i[a>>0]&1))f=a+1|0;else f=k[a+8>>2]|0;g=k[b>>2]|0;return m4a(a,g-f|0,(k[c>>2]|0)-g|0,d,e)|0}function s4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(!(i[a>>0]&1))e=a+1|0;else e=k[a+8>>2]|0;f=k[b>>2]|0;return o4a(a,f-e|0,(k[c>>2]|0)-f|0,d)|0}function t4a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(!(i[a>>0]&1))f=a+1|0;else f=k[a+8>>2]|0;g=k[b>>2]|0;return p4a(a,g-f|0,(k[c>>2]|0)-g|0,d,e)|0}function u4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=r;r=r+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;k[h>>2]=k[b>>2];k[i>>2]=k[c>>2];c=k[d>>2]|0;b=c+(k[d+4>>2]|0)|0;k[g>>2]=k[h>>2];k[f>>2]=k[i>>2];i=$8a(a,g,f,c,b)|0;r=e;return i|0}function v4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=i[a>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+4>>2]|0;if(g>>>0>>0)VEa(a);e=g-d|0;g=e>>>0>>0?e:c;if(f)h=a+1|0;else h=k[a+8>>2]|0;Dyb(b|0,h+d|0,g|0)|0;return g|0}function w4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;F2a(a,b,c,d,b);return}function x4a(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=k[a>>2];k[d+4>>2]=k[a+4>>2];k[d+8>>2]=k[a+8>>2];k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];k[b>>2]=k[d>>2];k[b+4>>2]=k[d+4>>2];k[b+8>>2]=k[d+8>>2];r=c;return}function y4a(a,b){a=a|0;b=b|0;return}function z4a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+1|0;else b=k[a+8>>2]|0;return b|0}function A4a(a,b){a=a|0;b=b|0;return}function B4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=d?b+1|0:k[b+8>>2]|0;h=d?(a&255)>>>1:k[b+4>>2]|0;if(!(e>>>0>>0|(e-c|0)>>>0>>0))if(!h)j=c;else{b=f+c|0;c=f+e|0;e=g+h|0;a:do if((c-b|0)<(h|0))l=c;else{a=c+(1-h)|0;d=b;while(1){if((d|0)==(a|0)){l=c;break a}if((i[d>>0]|0)==(i[g>>0]|0)){m=d;n=g;do{n=n+1|0;if((n|0)==(e|0)){l=d;break a}m=m+1|0}while((i[m>>0]|0)==(i[n>>0]|0))}d=d+1|0}}while(0);j=(l|0)==(c|0)?-1:l-f|0}else j=-1;return j|0}function C4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+1|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}if(!(f>>>0>>0|(f-c|0)>>>0>>0))if(!d)h=c;else{a=g+c|0;c=g+f|0;f=b+d|0;a:do if((c-a|0)<(d|0))j=c;else{e=c+(1-d)|0;l=a;while(1){if((l|0)==(e|0)){j=c;break a}if((i[l>>0]|0)==(i[b>>0]|0)){m=l;n=b;do{n=n+1|0;if((n|0)==(f|0)){j=l;break a}m=m+1|0}while((i[m>>0]|0)==(i[n>>0]|0))}l=l+1|0}}while(0);h=(j|0)==(c|0)?-1:j-g|0}else h=-1;return h|0}function D4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=RLa(b)|0;if(!(e>>>0>>0|(e-c|0)>>>0>>0))if(!a)g=c;else{d=f+c|0;c=f+e|0;e=b+a|0;a:do if((c-d|0)<(a|0))h=c;else{j=c+(1-a)|0;l=d;while(1){if((l|0)==(j|0)){h=c;break a}if((i[l>>0]|0)==(i[b>>0]|0)){m=l;n=b;do{n=n+1|0;if((n|0)==(e|0)){h=l;break a}m=m+1|0}while((i[m>>0]|0)==(i[n>>0]|0))}l=l+1|0}}while(0);g=(h|0)==(c|0)?-1:h-f|0}else g=-1;return g|0}function E4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}if(e>>>0>c>>>0){a=_Ma(f+c|0,b&255,e-c|0)|0;g=(a|0)==0?-1:a-f|0}else g=-1;return g|0}function F4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=d?b+1|0:k[b+8>>2]|0;h=d?(a&255)>>>1:k[b+4>>2]|0;b=e>>>0>>0?e:c;c=(e-b|0)>>>0>h>>>0?h+b|0:e;e=f+c|0;a:do if((h|0)==0|(c|0)<(h|0))j=e;else{b=f+(h+-1)|0;a=g+h+-1|0;d=e;b:while(1){if((b|0)==(d|0)){j=e;break a}l=d+-1|0;if((i[l>>0]|0)==(i[a>>0]|0)){m=l;n=a}else{d=l;continue}while(1){if((n|0)==(g|0)){j=m;break a}o=m+-1|0;p=n+-1|0;if((i[o>>0]|0)==(i[p>>0]|0)){m=o;n=p}else{d=l;continue b}}}}while(0);return ((h|0)!=0&(j|0)==(e|0)?-1:j-f|0)|0}function G4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+1|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}a=f>>>0>>0?f:c;c=(f-a|0)>>>0>d>>>0?a+d|0:f;f=g+c|0;a:do if((d|0)==0|(c|0)<(d|0))h=f;else{a=g+(d+-1)|0;e=b+d+-1|0;j=f;b:while(1){if((a|0)==(j|0)){h=f;break a}l=j+-1|0;if((i[l>>0]|0)==(i[e>>0]|0)){m=l;n=e}else{j=l;continue}while(1){if((n|0)==(b|0)){h=m;break a}o=m+-1|0;p=n+-1|0;if((i[o>>0]|0)==(i[p>>0]|0)){m=o;n=p}else{j=l;continue b}}}}while(0);return ((d|0)!=0&(h|0)==(f|0)?-1:h-g|0)|0}function H4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=RLa(b)|0;d=e>>>0>>0?e:c;c=(e-d|0)>>>0>a>>>0?d+a|0:e;e=f+c|0;a:do if((a|0)==0|(c|0)<(a|0))g=e;else{d=f+(a+-1)|0;h=b+a+-1|0;j=e;b:while(1){if((d|0)==(j|0)){g=e;break a}l=j+-1|0;if((i[l>>0]|0)==(i[h>>0]|0)){m=l;n=h}else{j=l;continue}while(1){if((n|0)==(b|0)){g=m;break a}o=m+-1|0;p=n+-1|0;if((i[o>>0]|0)==(i[p>>0]|0)){m=o;n=p}else{j=l;continue b}}}}while(0);return ((a|0)!=0&(g|0)==(e|0)?-1:g-f|0)|0}function I4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a:do if(!e)g=-1;else{a=f+(e>>>0>c>>>0?c+1|0:e)|0;while(1){if((a|0)==(f|0)){g=-1;break a}d=a+-1|0;if((i[d>>0]|0)==b<<24>>24){h=d;break}else a=d}g=h-f|0}while(0);return g|0}function J4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=d?b+1|0:k[b+8>>2]|0;h=d?(a&255)>>>1:k[b+4>>2]|0;if(e>>>0<=c>>>0|(h|0)==0)j=-1;else{b=f+e|0;e=g+h|0;h=f+c|0;a:while(1){if((h|0)==(b|0)){l=b;break}else m=g;while(1){if((m|0)==(e|0))break;if((i[h>>0]|0)==(i[m>>0]|0)){l=h;break a}else m=m+1|0}h=h+1|0}j=(l|0)==(b|0)?-1:l-f|0}return j|0}function K4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+1|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}if((d|0)==0|f>>>0<=c>>>0)h=-1;else{a=g+f|0;f=b+d|0;d=g+c|0;a:while(1){if((d|0)==(a|0)){j=a;break}else l=b;while(1){if((l|0)==(f|0))break;if((i[d>>0]|0)==(i[l>>0]|0)){j=d;break a}else l=l+1|0}d=d+1|0}h=(j|0)==(a|0)?-1:j-g|0}return h|0}function L4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=RLa(b)|0;if(e>>>0<=c>>>0|(a|0)==0)g=-1;else{d=f+e|0;e=b+a|0;a=f+c|0;a:while(1){if((a|0)==(d|0)){h=d;break}else j=b;while(1){if((j|0)==(e|0))break;if((i[a>>0]|0)==(i[j>>0]|0)){h=a;break a}else j=j+1|0}a=a+1|0}g=(h|0)==(d|0)?-1:h-f|0}return g|0}function M4a(a,b,c){a=a|0;b=b|0;c=c|0;return E4a(a,b,c)|0}function N4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=d?b+1|0:k[b+8>>2]|0;h=d?(a&255)>>>1:k[b+4>>2]|0;a:do if(!h)j=-1;else{b=f;a=f+(e>>>0>c>>>0?c+1|0:e)|0;while(1){if((a|0)==(f|0)){j=-1;break a}d=a+-1|0;if(!(a9a(g,h,d)|0))a=d;else{j=d-b|0;break}}}while(0);return j|0}function O4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+1|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}a:do if(!d)h=-1;else{a=g;e=g+(f>>>0>c>>>0?c+1|0:f)|0;while(1){if((e|0)==(g|0)){h=-1;break a}j=e+-1|0;if(!(a9a(b,d,j)|0))e=j;else{h=j-a|0;break}}}while(0);return h|0}function P4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=RLa(b)|0;a:do if(!a)g=-1;else{d=f;h=f+(e>>>0>c>>>0?c+1|0:e)|0;while(1){if((h|0)==(f|0)){g=-1;break a}j=h+-1|0;if(!(a9a(b,a,j)|0))h=j;else{g=j-d|0;break}}}while(0);return g|0}function Q4a(a,b,c){a=a|0;b=b|0;c=c|0;return I4a(a,b,c)|0}function R4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=d?b+1|0:k[b+8>>2]|0;h=d?(a&255)>>>1:k[b+4>>2]|0;a:do if(e>>>0>c>>>0){b=f+e|0;a=f+c|0;while(1){if((a|0)==(b|0)){j=-1;break a}if(!(a9a(g,h,a)|0)){l=a;break}a=a+1|0}j=l-f|0}else j=-1;while(0);return j|0}function S4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+1|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}a:do if(f>>>0>c>>>0){a=g+f|0;e=g+c|0;while(1){if((e|0)==(a|0)){h=-1;break a}if(!(a9a(b,d,e)|0)){j=e;break}e=e+1|0}h=j-g|0}else h=-1;while(0);return h|0}function T4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=RLa(b)|0;a:do if(e>>>0>c>>>0){d=f+e|0;g=f+c|0;while(1){if((g|0)==(d|0)){h=-1;break a}if(!(a9a(b,a,g)|0)){j=g;break}g=g+1|0}h=j-f|0}else h=-1;while(0);return h|0}function U4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a:do if(e>>>0>c>>>0){a=f+e|0;d=f+c|0;while(1){if((d|0)==(a|0)){g=-1;break a}if((i[d>>0]|0)!=b<<24>>24){h=d;break}d=d+1|0}g=h-f|0}else g=-1;while(0);return g|0}function V4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=d?b+1|0:k[b+8>>2]|0;h=d?(a&255)>>>1:k[b+4>>2]|0;b=f+(e>>>0>c>>>0?c+1|0:e)|0;while(1){if((b|0)==(f|0)){j=-1;break}e=b+-1|0;if(!(a9a(g,h,e)|0)){l=e;m=7;break}else b=e}if((m|0)==7)j=l-f|0;return j|0}function W4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+1|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}a=g+(f>>>0>c>>>0?c+1|0:f)|0;while(1){if((a|0)==(g|0)){h=-1;break}f=a+-1|0;if(!(a9a(b,d,f)|0)){j=f;l=7;break}else a=f}if((l|0)==7)h=j-g|0;return h|0}function X4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=RLa(b)|0;d=f+(e>>>0>c>>>0?c+1|0:e)|0;while(1){if((d|0)==(f|0)){g=-1;break}e=d+-1|0;if(!(a9a(b,a,e)|0)){h=e;j=7;break}else d=e}if((j|0)==7)g=h-f|0;return g|0}function Y4a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+1|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=f+(e>>>0>c>>>0?c+1|0:e)|0;while(1){if((a|0)==(f|0)){g=-1;break}e=a+-1|0;if((i[e>>0]|0)==b<<24>>24)a=e;else{h=e;j=7;break}}if((j|0)==7)g=h-f|0;return g|0}function Z4a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=i[a>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+4>>2]|0;c=i[b>>0]|0;f=(c&1)==0;g=f?(c&255)>>>1:k[b+4>>2]|0;if(d)h=a+1|0;else h=k[a+8>>2]|0;a=g>>>0>>0;d=ZLa(h,f?b+1|0:k[b+8>>2]|0,a?g:e)|0;if(!d)return (e>>>0>>0?-1:a&1)|0;else return d|0;return 0}function _4a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=i[d>>0]|0;f=(e&1)==0;return $4a(a,b,c,f?d+1|0:k[d+8>>2]|0,f?(e&255)>>>1:k[d+4>>2]|0)|0}function $4a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i[a>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[a+4>>2]|0;if((e|0)==-1|h>>>0>>0)VEa(a);f=h-b|0;h=f>>>0>>0?f:c;if(g)j=a+1|0;else j=k[a+8>>2]|0;a=h>>>0>e>>>0;g=ZLa(j+b|0,d,a?e:h)|0;if(!g)return (h>>>0>>0?-1:a&1)|0;else return g|0;return 0}function a5a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i[d>>0]|0;h=(g&1)==0;j=h?(g&255)>>>1:k[d+4>>2]|0;if(j>>>0>>0)VEa(a);else{g=j-e|0;return $4a(a,b,c,(h?d+1|0:k[d+8>>2]|0)+e|0,g>>>0>>0?g:f)|0}return 0}function b5a(a,b){a=a|0;b=b|0;var c=0,d=0;c=RLa(b)|0;x=0;d=Va(97,a|0,0,-1,b|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else return d|0;return 0}function c5a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return $4a(a,b,c,d,RLa(d)|0)|0}function d5a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i[a>>0]|0;if(!(b&1)){c=(b&255)>>>1;d=10;e=b}else{b=k[a>>2]|0;c=k[a+4>>2]|0;d=(b&-2)+-1|0;e=b&255}do if(c>>>0>d>>>0)f=0;else{if(e&1){b=k[a>>2]|0;if(((b&-2)+-1|0)>>>0<10){f=0;break}else g=b&255}else g=e;if((g&1)!=0?(k[a+8>>2]|0)==0:0){f=0;break}if(!(g&1))h=(g&255)>>>1;else h=k[a+4>>2]|0;if(!(g&1))j=a+1|0;else j=k[a+8>>2]|0;f=(i[j+h>>0]|0)==0}while(0);return f|0}function e5a(a){a=a|0;return a+1|0}function f5a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(d>>>0>4294967279)GBa(a);if(d>>>0<11){i[a>>0]=c<<1;e=a+1|0}else{f=d+16&-16;d=KBa(f)|0;k[a+8>>2]=d;k[a>>2]=f|1;k[a+4>>2]=c;e=d}Dyb(e|0,b|0,c|0)|0;i[e+c>>0]=0;return}function g5a(a,b,c){a=a|0;b=b|0;c=c|0;return}function h5a(a,b,c){a=a|0;b=b|0;c=c|0;return}function i5a(a,b,c){a=a|0;b=b|0;c=c|0;if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}x=0;xa(603,a|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function j5a(a,b){a=a|0;b=b|0;return}function k5a(a,b,c){a=a|0;b=b|0;c=c|0;return}function l5a(a,b,c){a=a|0;b=b|0;c=c|0;return}function m5a(a,b,c){a=a|0;b=b|0;c=c|0;return}function n5a(a,b,c){a=a|0;b=b|0;c=c|0;return}function o5a(a){a=a|0;var b=0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function p5a(a){a=a|0;var b=0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function q5a(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function r5a(a,b){a=a|0;b=b|0;if(!(i[b>>0]&1)){k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2]}else u5a(a,k[b+8>>2]|0,k[b+4>>2]|0);return}function s5a(a){a=a|0;return a|0}function t5a(a){a=a|0;return (i[a>>0]&1)!=0|0}function u5a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(c>>>0>1073741807)GBa(a);if(c>>>0<2){i[a>>0]=c<<1;d=a+4|0}else{e=c+4&-4;f=KBa(e<<2)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=c;d=f}_La(d,b,c)|0;k[d+(c<<2)>>2]=0;return}function v5a(a){a=a|0;return k[a+8>>2]|0}function w5a(a){a=a|0;return k[a+4>>2]|0}function x5a(a,b,c){a=a|0;b=b|0;c=c|0;if(!(i[b>>0]&1)){k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2]}else u5a(a,k[b+8>>2]|0,k[b+4>>2]|0);return}function y5a(a,b){a=a|0;b=b|0;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function z5a(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function A5a(a){a=a|0;return a|0}function B5a(a){a=a|0;return k[a+8>>2]|0}function C5a(a,b){a=a|0;b=b|0;u5a(a,b,$La(b)|0);return}function D5a(a,b,c){a=a|0;b=b|0;c=c|0;u5a(a,b,$La(b)|0);return}function E5a(a,b,c){a=a|0;b=b|0;c=c|0;u5a(a,b,c);return}function F5a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;u5a(a,b,c);return}function G5a(a,b,c){a=a|0;b=b|0;c=c|0;H5a(a,b,c);return}function H5a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(b>>>0>1073741807)GBa(a);if(b>>>0<2){i[a>>0]=b<<1;d=a+4|0}else{e=b+4&-4;f=KBa(e<<2)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=b;d=f}VMa(d,c,b)|0;k[d+(b<<2)>>2]=0;return}function I5a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;H5a(a,b,c);return}function J5a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;e=i[b>>0]|0;f=(e&1)==0;g=b+4|0;h=f?(e&255)>>>1:k[g>>2]|0;if(h>>>0>>0)VEa(a);else{e=h-c|0;u5a(a,(f?g:k[b+8>>2]|0)+(c<<2)|0,e>>>0>>0?e:d);return}}function K5a(a){a=a|0;var b=0,c=0;b=i[a>>0]|0;if(!(b&1))c=(b&255)>>>1;else c=k[a+4>>2]|0;return c|0}function L5a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function M5a(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;b9a(a,c,c+(k[b+4>>2]<<2)|0);return}function N5a(a,b,c){a=a|0;b=b|0;c=c|0;c=k[b>>2]|0;b9a(a,c,c+(k[b+4>>2]<<2)|0);return}function O5a(a){a=a|0;if(i[a>>0]&1)OBa(k[a+8>>2]|0);return}function P5a(a){a=a|0;return k[a>>2]&-2|0}function Q5a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if((a|0)!=(b|0)){c=i[b>>0]|0;d=(c&1)==0;e=b+4|0;b6a(a,d?e:k[b+8>>2]|0,d?(c&255)>>>1:k[e>>2]|0)|0}return a|0}function R5a(a,b){a=a|0;b=b|0;return}function S5a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;d=(c&1)==0;e=b+4|0;return b6a(a,d?e:k[b+8>>2]|0,d?(c&255)>>>1:k[e>>2]|0)|0}function T5a(a,b){a=a|0;b=b|0;var c=0;if(!(i[a>>0]&1))i[a>>0]=0;else k[k[a+8>>2]>>2]=0;k[a+4>>2]=0;x=0;xa(945,a|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];c=0;while(1){if((c|0)==3)break;k[b+(c<<2)>>2]=0;c=c+1|0}return a|0}function U5a(a,b,c){a=a|0;b=b|0;c=c|0;if(!(i[a>>0]&1))i[a>>0]=0;else k[k[a+8>>2]>>2]=0;k[a+4>>2]=0;x=0;xa(945,a|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function V5a(a,b){a=a|0;b=b|0;return W5a(a,b)|0}function W5a(a,b){a=a|0;b=b|0;return b6a(a,b,$La(b)|0)|0}function X5a(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(i[a>>0]&1)){i[a>>0]=2;c=a+4|0}else{d=k[a+8>>2]|0;k[a+4>>2]=1;c=d}k[c>>2]=b;k[c+4>>2]=0;return a|0}function Y5a(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function Z5a(a){a=a|0;return a+4|0}function _5a(a,b){a=a|0;b=b|0;i[a>>0]=b<<1;return}function $5a(a,b){a=a|0;b=b|0;return}function a6a(a,b){a=a|0;b=b|0;return b6a(a,k[b>>2]|0,k[b+4>>2]|0)|0}function b6a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=1;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}d=(f&1)==0;do if(e>>>0>=c>>>0){if(d)g=a+4|0;else g=k[a+8>>2]|0;uMa(g,b,c)|0;k[g+(c<<2)>>2]=0;if(!(i[a>>0]&1)){i[a>>0]=c<<1;break}else{k[a+4>>2]=c;break}}else{if(d)h=(f&255)>>>1;else h=k[a+4>>2]|0;V6a(a,e,c-e|0,h,0,h,c,b)}while(0);return a|0}function c6a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function d6a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function e6a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function f6a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function g6a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+4|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+(d<<2)|0}function h6a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+4|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+(d<<2)|0}function i6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;if(!(c&1)){d=b+4|0;e=(c&255)>>>1}else{d=k[b+8>>2]|0;e=k[b+4>>2]|0}b=d+(e<<2)|0;k[a>>2]=b;k[a+4>>2]=b;return}function j6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;if(!(c&1)){d=b+4|0;e=(c&255)>>>1}else{d=k[b+8>>2]|0;e=k[b+4>>2]|0}b=d+(e<<2)|0;k[a>>2]=b;k[a+4>>2]=b;return}function k6a(a,b){a=a|0;b=b|0;var c=0;if(!(i[b>>0]&1))c=b+4|0;else c=k[b+8>>2]|0;b=c;k[a>>2]=b;k[a+4>>2]=b;return}function l6a(a,b){a=a|0;b=b|0;var c=0;if(!(i[b>>0]&1))c=b+4|0;else c=k[b+8>>2]|0;b=c;k[a>>2]=b;k[a+4>>2]=b;return}function m6a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function n6a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+4|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+(d<<2)|0}function o6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;if(!(c&1)){d=b+4|0;e=(c&255)>>>1}else{d=k[b+8>>2]|0;e=k[b+4>>2]|0}b=d+(e<<2)|0;k[a>>2]=b;k[a+4>>2]=b;return}function p6a(a,b){a=a|0;b=b|0;var c=0;if(!(i[b>>0]&1))c=b+4|0;else c=k[b+8>>2]|0;b=c;k[a>>2]=b;k[a+4>>2]=b;return}function q6a(a){a=a|0;return (l[a>>0]|0)>>>1|0}function r6a(a){a=a|0;var b=0,c=0;b=i[a>>0]|0;if(!(b&1))c=(b&255)>>>1;else c=k[a+4>>2]|0;return c|0}function s6a(a){a=a|0;return 1073741807}function t6a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=1;else b=(k[a>>2]&-2)+-1|0;return b|0}function u6a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=i[a>>0]|0;e=(d&1)==0;if(e)f=(d&255)>>>1;else f=k[a+4>>2]|0;do if(f>>>0>=b>>>0)if(e){k[a+4+(b<<2)>>2]=0;i[a>>0]=b<<1;break}else{k[(k[a+8>>2]|0)+(b<<2)>>2]=0;k[a+4>>2]=b;break}else v6a(a,b-f|0,c)|0;while(0);return}function v6a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;if(b){d=i[a>>0]|0;if(!(d&1)){e=1;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;if((e-g|0)>>>0>>0){W6a(a,e,b-e+g|0,g,g,0,0);h=i[a>>0]|0}else h=f;if(!(h&1))j=a+4|0;else j=k[a+8>>2]|0;VMa(j+(g<<2)|0,c,b)|0;c=g+b|0;if(!(i[a>>0]&1))i[a>>0]=c<<1;else k[a+4>>2]=c;k[j+(c<<2)>>2]=0}return a|0}function w6a(a,b){a=a|0;b=b|0;if(!(i[a>>0]&1)){k[a+4+(b<<2)>>2]=0;i[a>>0]=b<<1}else{k[(k[a+8>>2]|0)+(b<<2)>>2]=0;k[a+4>>2]=b}return}function x6a(a,b){a=a|0;b=b|0;u6a(a,b,0);return}function y6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;if(b>>>0>1073741807)GBa(a);c=i[a>>0]|0;if(!(c&1)){d=1;e=c}else{c=k[a>>2]|0;d=(c&-2)+-1|0;e=c&255}if(!(e&1))f=(e&255)>>>1;else f=k[a+4>>2]|0;c=f>>>0>b>>>0?f:b;if(c>>>0<2)g=1;else g=(c+4&-4)+-1|0;a:do if((g|0)!=(d|0)){do if((g|0)!=1){c=(g<<2)+4|0;if(g>>>0<=d>>>0){x=0;b=Ba(563,c|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;me(h|0)|0;ge();break a}else j=b}else j=KBa(c)|0;if(!(e&1)){l=j;m=1;n=a+4|0;o=0;break}else{l=j;m=1;n=k[a+8>>2]|0;o=1;break}}else{l=a+4|0;m=0;n=k[a+8>>2]|0;o=1}while(0);if(!(e&1))p=(e&255)>>>1;else p=k[a+4>>2]|0;_La(l,n,p+1|0)|0;if(o)OBa(n);if(m){k[a>>2]=g+1|1;k[a+4>>2]=f;k[a+8>>2]=l;break}else{i[a>>0]=f<<1;break}}while(0);return}function z6a(a){a=a|0;var b=0;if(a>>>0<2)b=1;else b=(a+4&-4)+-1|0;return b|0}function A6a(a,b){a=a|0;b=b|0;k[a>>2]=b|1;return}function B6a(a,b){a=a|0;b=b|0;k[a+8>>2]=b;return}function C6a(a){a=a|0;return}function D6a(a){a=a|0;x=0;xa(945,a|0,0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function E6a(a){a=a|0;if(!(i[a>>0]&1))i[a>>0]=0;else k[k[a+8>>2]>>2]=0;k[a+4>>2]=0;return}function F6a(a){a=a|0;var b=0,c=0;b=i[a>>0]|0;if(!(b&1))c=(b&255)>>>1;else c=k[a+4>>2]|0;return (c|0)==0|0}function G6a(a,b){a=a|0;b=b|0;var c=0;if(!(i[a>>0]&1))c=a+4|0;else c=k[a+8>>2]|0;return c+(b<<2)|0}function H6a(a,b){a=a|0;b=b|0;var c=0;if(!(i[a>>0]&1))c=a+4|0;else c=k[a+8>>2]|0;return c+(b<<2)|0}function I6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=i[a>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+4>>2]|0;if(e>>>0<=b>>>0)VEa(a);if(d)f=a+4|0;else f=k[a+8>>2]|0;return f+(b<<2)|0}function J6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=i[a>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+4>>2]|0;if(e>>>0<=b>>>0)VEa(a);if(d)f=a+4|0;else f=k[a+8>>2]|0;return f+(b<<2)|0}function K6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;d=(c&1)==0;e=b+4|0;return S6a(a,d?e:k[b+8>>2]|0,d?(c&255)>>>1:k[e>>2]|0)|0}function L6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i[b>>0]|0;d=(c&1)==0;e=b+4|0;return S6a(a,d?e:k[b+8>>2]|0,d?(c&255)>>>1:k[e>>2]|0)|0}function M6a(a,b){a=a|0;b=b|0;return N6a(a,b)|0}function N6a(a,b){a=a|0;b=b|0;return S6a(a,b,$La(b)|0)|0}function O6a(a,b){a=a|0;b=b|0;P6a(a,b);return a|0}function P6a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=i[a>>0]|0;d=(c&1)!=0;if(d){e=(k[a>>2]&-2)+-1|0;f=k[a+4>>2]|0}else{e=1;f=(c&255)>>>1}if((f|0)==(e|0)){W6a(a,e,1,e,e,0,0);if(!(i[a>>0]&1))g=7;else g=8}else if(d)g=8;else g=7;if((g|0)==7){i[a>>0]=(f<<1)+2;h=a+4|0}else if((g|0)==8){g=k[a+8>>2]|0;k[a+4>>2]=f+1;h=g}g=h+(f<<2)|0;k[g>>2]=b;k[g+4>>2]=0;return}function Q6a(a,b){a=a|0;b=b|0;var c=0;c=b;return S6a(a,k[c>>2]|0,k[c+4>>2]|0)|0}function R6a(a,b){a=a|0;b=b|0;return S6a(a,k[b>>2]|0,k[b+4>>2]|0)|0}function S6a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=1;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;if((e-g|0)>>>0>=c>>>0){if(c){if(!(f&1))h=a+4|0;else h=k[a+8>>2]|0;_La(h+(g<<2)|0,b,c)|0;f=g+c|0;if(!(i[a>>0]&1))i[a>>0]=f<<1;else k[a+4>>2]=f;k[h+(f<<2)>>2]=0}}else V6a(a,e,c-e+g|0,g,g,0,c,b);return a|0}function T6a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=i[b>>0]|0;f=(e&1)==0;g=b+4|0;h=f?(e&255)>>>1:k[g>>2]|0;if(h>>>0>>0)VEa(a);else{e=h-c|0;return S6a(a,(f?g:k[b+8>>2]|0)+(c<<2)|0,e>>>0>>0?e:d)|0}return 0}function U6a(a,b){a=a|0;b=b|0;if(!(i[a>>0]&1))i[a>>0]=b<<1;else k[a+4>>2]=b;return}function V6a(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;if((1073741806-b|0)>>>0>>0)GBa(a);if(!(i[a>>0]&1))j=a+4|0;else j=k[a+8>>2]|0;if(b>>>0<536870887){l=c+b|0;c=b<<1;m=l>>>0>>0?c:l;n=m>>>0<2?2:m+4&-4}else n=1073741807;m=KBa(n<<2)|0;if(e)_La(m,j,e)|0;if(g)_La(m+(e<<2)|0,h,g)|0;h=d-f|0;if((h|0)!=(e|0))_La(m+(e<<2)+(g<<2)|0,j+(e<<2)+(f<<2)|0,h-e|0)|0;if((b|0)!=1)OBa(j);k[a+8>>2]=m;k[a>>2]=n|1;n=h+g|0;k[a+4>>2]=n;k[m+(n<<2)>>2]=0;return}function W6a(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0;if((1073741807-b|0)>>>0>>0)GBa(a);if(!(i[a>>0]&1))h=a+4|0;else h=k[a+8>>2]|0;if(b>>>0<536870887){j=c+b|0;c=b<<1;l=j>>>0>>0?c:j;m=l>>>0<2?2:l+4&-4}else m=1073741807;l=KBa(m<<2)|0;if(e)_La(l,h,e)|0;j=d-f|0;if((j|0)!=(e|0))_La(l+(e<<2)+(g<<2)|0,h+(e<<2)+(f<<2)|0,j-e|0)|0;if((b|0)!=1)OBa(h);k[a+8>>2]=l;k[a>>2]=m|1;return}function X6a(a){a=a|0;var b=0,c=0;b=i[a>>0]|0;if(!(b&1)){c=((b&255)>>>1)+-1|0;i[a>>0]=c<<1;k[a+4+(c<<2)>>2]=0}else{c=a+4|0;b=(k[c>>2]|0)+-1|0;k[c>>2]=b;k[(k[a+8>>2]|0)+(b<<2)>>2]=0}return}function Y6a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function Z6a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function _6a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+4|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+(d<<2)+-4|0}function $6a(a){a=a|0;var b=0,c=0,d=0;b=i[a>>0]|0;if(!(b&1)){c=a+4|0;d=(b&255)>>>1}else{c=k[a+8>>2]|0;d=k[a+4>>2]|0}return c+(d<<2)+-4|0}function a7a(a,b){a=a|0;b=b|0;var c=0;if(!(i[a>>0]&1))i[a>>0]=0;else k[k[a+8>>2]>>2]=0;k[a+4>>2]=0;x=0;xa(945,a|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];c=0;while(1){if((c|0)==3)break;k[b+(c<<2)>>2]=0;c=c+1|0}return a|0}function b7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=i[b>>0]|0;f=(e&1)==0;g=b+4|0;h=f?(e&255)>>>1:k[g>>2]|0;if(h>>>0>>0)VEa(a);else{e=h-c|0;return b6a(a,(f?g:k[b+8>>2]|0)+(c<<2)|0,e>>>0>>0?e:d)|0}return 0}function c7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=1;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(e>>>0>>0){if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;W6a(a,e,b-e|0,g,0,g,0);h=i[a>>0]|0}else h=f;if(!(h&1))j=a+4|0;else j=k[a+8>>2]|0;VMa(j,c,b)|0;k[j+(b<<2)>>2]=0;if(!(i[a>>0]&1))i[a>>0]=b<<1;else k[a+4>>2]=b;return a|0}function d7a(a,b){a=a|0;b=b|0;return b6a(a,k[b>>2]|0,k[b+4>>2]|0)|0}function e7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=i[c>>0]|0;e=(d&1)==0;f=c+4|0;return f7a(a,b,e?f:k[c+8>>2]|0,e?(d&255)>>>1:k[f>>2]|0)|0}function f7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=i[a>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+4>>2]|0;if(g>>>0>>0)VEa(a);if(f){h=1;j=e}else{e=k[a>>2]|0;h=(e&-2)+-1|0;j=e&255}if((h-g|0)>>>0>=d>>>0){if(d){if(!(j&1))l=a+4|0;else l=k[a+8>>2]|0;if((g|0)==(b|0)){m=c;n=l+(b<<2)|0}else{j=l+(b<<2)|0;uMa(j+(d<<2)|0,j,g-b|0)|0;m=j>>>0<=c>>>0&(l+(g<<2)|0)>>>0>c>>>0?c+(d<<2)|0:c;n=j}uMa(n,m,d)|0;m=g+d|0;if(!(i[a>>0]&1))i[a>>0]=m<<1;else k[a+4>>2]=m;k[l+(m<<2)>>2]=0}}else V6a(a,h,g+d-h|0,g,b,0,d,c);return a|0}function g7a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i[c>>0]|0;g=(f&1)==0;h=c+4|0;j=g?(f&255)>>>1:k[h>>2]|0;if(j>>>0>>0)VEa(a);else{f=j-d|0;return f7a(a,b,(g?h:k[c+8>>2]|0)+(d<<2)|0,f>>>0>>0?f:e)|0}return 0}function h7a(a,b,c){a=a|0;b=b|0;c=c|0;return f7a(a,b,c,$La(c)|0)|0}function i7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;e=i[a>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+4>>2]|0;if(g>>>0>>0)VEa(a);if(c){if(f){h=1;j=e}else{e=k[a>>2]|0;h=(e&-2)+-1|0;j=e&255}if((h-g|0)>>>0>=c>>>0){if(!(j&1))l=a+4|0;else l=k[a+8>>2]|0;if((g|0)==(b|0))m=l;else{j=l+(b<<2)|0;uMa(j+(c<<2)|0,j,g-b|0)|0;m=l}}else{W6a(a,h,g+c-h|0,g,b,0,c);m=k[a+8>>2]|0}VMa(m+(b<<2)|0,d,c)|0;d=g+c|0;if(!(i[a>>0]&1))i[a>>0]=d<<1;else k[a+4>>2]=d;k[m+(d<<2)>>2]=0}return a|0}function j7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[a>>0]|0;if(!(d&1)){e=(k[b>>2]|0)-(a+4)|0;f=1;g=(d&255)>>>1;h=d}else{d=k[a>>2]|0;e=(k[b>>2]|0)-(k[a+8>>2]|0)|0;f=(d&-2)+-1|0;g=k[a+4>>2]|0;h=d&255}d=e>>2;if((f|0)!=(g|0)){if(!(h&1))j=a+4|0;else j=k[a+8>>2]|0;if((g|0)==(d|0))l=j;else{h=j+(d<<2)|0;uMa(h+4|0,h,g-d|0)|0;l=j}}else{W6a(a,g,1,g,d,0,1);l=k[a+8>>2]|0}k[l+(d<<2)>>2]=c;c=g+1|0;k[l+(c<<2)>>2]=0;l=i[a>>0]|0;if(!(l&1)){g=c<<1&255;i[a>>0]=g;m=g}else{k[a+4>>2]=c;m=l}if(!(m&1))n=a+4|0;else n=k[a+8>>2]|0;return n+(d<<2)|0}function k7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(!(i[a>>0]&1))e=a+4|0;else e=k[a+8>>2]|0;f=(k[b>>2]|0)-e>>2;i7a(a,f,c,d)|0;if(!(i[a>>0]&1))g=a+4|0;else g=k[a+8>>2]|0;return g+(f<<2)|0}function l7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d+4|0;f=d;k[f>>2]=k[b>>2];b=k[c>>2]|0;g=b+(k[c+4>>2]<<2)|0;k[e>>2]=k[f>>2];f=c9a(a,e,b,g)|0;r=d;return f|0}function m7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;e=(d&1)==0;if(e)f=(d&255)>>>1;else f=k[a+4>>2]|0;if(f>>>0>>0)VEa(a);if(c){if(e)g=a+4|0;else g=k[a+8>>2]|0;e=f-b|0;h=e>>>0>>0?e:c;if((e|0)==(h|0))j=d;else{d=g+(b<<2)|0;uMa(d,d+(h<<2)|0,e-h|0)|0;j=i[a>>0]|0}e=f-h|0;if(!(j&1))i[a>>0]=e<<1;else k[a+4>>2]=e;k[g+(e<<2)>>2]=0}return a|0}function n7a(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(i[a>>0]&1))c=a+4|0;else c=k[a+8>>2]|0;d=(k[b>>2]|0)-c>>2;m7a(a,d,1)|0;return c+(d<<2)|0}function o7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(!(i[a>>0]&1))d=a+4|0;else d=k[a+8>>2]|0;e=k[b>>2]|0;b=e-d>>2;m7a(a,b,(k[c>>2]|0)-e>>2)|0;return d+(b<<2)|0}function p7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=i[d>>0]|0;f=(e&1)==0;g=d+4|0;return q7a(a,b,c,f?g:k[d+8>>2]|0,f?(e&255)>>>1:k[g>>2]|0)|0}function q7a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=i[a>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[a+4>>2]|0;if(h>>>0>>0)VEa(a);j=h-b|0;l=j>>>0>>0?j:c;if(g){m=1;n=f}else{f=k[a>>2]|0;m=(f&-2)+-1|0;n=f&255}if((l-h+m|0)>>>0>>0)V6a(a,m,h+e-l-m|0,h,b,l,e,d);else{if(!(n&1))o=a+4|0;else o=k[a+8>>2]|0;do if((l|0)!=(e|0)){n=j-l|0;if((j|0)==(l|0)){p=b;q=d;r=e;s=j;t=21}else{m=o+(b<<2)|0;if(l>>>0>e>>>0){uMa(m,d,e)|0;uMa(m+(e<<2)|0,m+(l<<2)|0,n)|0;u=e;v=l;break}do if(m>>>0>>0&(o+(h<<2)|0)>>>0>d>>>0)if((m+(l<<2)|0)>>>0>d>>>0){uMa(m,d,l)|0;w=l+b|0;x=d+(e<<2)|0;y=e-l|0;z=0;break}else{w=b;x=d+(e-l<<2)|0;y=e;z=l;break}else{w=b;x=d;y=e;z=l}while(0);m=o+(w<<2)|0;uMa(m+(y<<2)|0,m+(z<<2)|0,n)|0;p=w;q=x;r=y;s=z;t=21}}else{p=b;q=d;r=e;s=e;t=21}while(0);if((t|0)==21){uMa(o+(p<<2)|0,q,r)|0;u=r;v=s}s=u-v+h|0;if(!(i[a>>0]&1))i[a>>0]=s<<1;else k[a+4>>2]=s;k[o+(s<<2)>>2]=0}return a|0}function r7a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0;g=i[d>>0]|0;h=(g&1)==0;j=d+4|0;l=h?(g&255)>>>1:k[j>>2]|0;if(l>>>0>>0)VEa(a);else{g=l-e|0;return q7a(a,b,c,(h?j:k[d+8>>2]|0)+(e<<2)|0,g>>>0>>0?g:f)|0}return 0}function s7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return q7a(a,b,c,d,$La(d)|0)|0}function t7a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;f=i[a>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[a+4>>2]|0;if(h>>>0>>0)VEa(a);j=h-b|0;l=j>>>0>>0?j:c;if(g){m=1;n=f}else{f=k[a>>2]|0;m=(f&-2)+-1|0;n=f&255}if((l-h+m|0)>>>0>=d>>>0){if(!(n&1))o=a+4|0;else o=k[a+8>>2]|0;if((l|0)==(d|0)|(j|0)==(l|0))p=o;else{n=o+(b<<2)|0;uMa(n+(d<<2)|0,n+(l<<2)|0,j-l|0)|0;p=o}}else{W6a(a,m,h+d-l-m|0,h,b,l,d);p=k[a+8>>2]|0}VMa(p+(b<<2)|0,e,d)|0;e=d-l+h|0;if(!(i[a>>0]&1))i[a>>0]=e<<1;else k[a+4>>2]=e;k[p+(e<<2)>>2]=0;return a|0}function u7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;if(!(i[a>>0]&1))e=a+4|0;else e=k[a+8>>2]|0;f=k[b>>2]|0;b=i[d>>0]|0;g=(b&1)==0;h=d+4|0;return q7a(a,f-e>>2,(k[c>>2]|0)-f>>2,g?h:k[d+8>>2]|0,g?(b&255)>>>1:k[h>>2]|0)|0}function v7a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(!(i[a>>0]&1))f=a+4|0;else f=k[a+8>>2]|0;g=k[b>>2]|0;return q7a(a,g-f>>2,(k[c>>2]|0)-g>>2,d,e)|0}function w7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(!(i[a>>0]&1))e=a+4|0;else e=k[a+8>>2]|0;f=k[b>>2]|0;return s7a(a,f-e>>2,(k[c>>2]|0)-f>>2,d)|0}function x7a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(!(i[a>>0]&1))f=a+4|0;else f=k[a+8>>2]|0;g=k[b>>2]|0;return t7a(a,g-f>>2,(k[c>>2]|0)-g>>2,d,e)|0}function y7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=r;r=r+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;k[h>>2]=k[b>>2];k[i>>2]=k[c>>2];c=k[d>>2]|0;b=c+(k[d+4>>2]<<2)|0;k[g>>2]=k[h>>2];k[f>>2]=k[i>>2];i=d9a(a,g,f,c,b)|0;r=e;return i|0}function z7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=i[a>>0]|0;f=(e&1)==0;if(f)g=(e&255)>>>1;else g=k[a+4>>2]|0;if(g>>>0>>0)VEa(a);e=g-d|0;g=e>>>0>>0?e:c;if(f)h=a+4|0;else h=k[a+8>>2]|0;_La(b,h+(d<<2)|0,g)|0;return g|0}function A7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J5a(a,b,c,d,b);return}function B7a(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=k[a>>2];k[d+4>>2]=k[a+4>>2];k[d+8>>2]=k[a+8>>2];k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];k[b>>2]=k[d>>2];k[b+4>>2]=k[d+4>>2];k[b+8>>2]=k[d+8>>2];r=c;return}function C7a(a,b){a=a|0;b=b|0;return}function D7a(a){a=a|0;var b=0;if(!(i[a>>0]&1))b=a+4|0;else b=k[a+8>>2]|0;return b|0}function E7a(a,b){a=a|0;b=b|0;return}function F7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=b+4|0;h=d?g:k[b+8>>2]|0;b=d?(a&255)>>>1:k[g>>2]|0;if(!(e>>>0>>0|(e-c|0)>>>0>>0))if(!b)j=c;else{g=f+(c<<2)|0;c=f+(e<<2)|0;e=h+(b<<2)|0;a=b<<2>>2;a:do if(a)if((c-g>>2|0)<(a|0))l=c;else{b=c+(1-a<<2)|0;d=g;while(1){if((d|0)==(b|0)){l=c;break a}if((k[d>>2]|0)==(k[h>>2]|0)){m=d;n=h;do{n=n+4|0;if((n|0)==(e|0)){l=d;break a}m=m+4|0}while((k[m>>2]|0)==(k[n>>2]|0))}d=d+4|0}}else l=g;while(0);j=(l|0)==(c|0)?-1:l-f>>2}else j=-1;return j|0}function G7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+4|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}if(!(f>>>0>>0|(f-c|0)>>>0>>0))if(!d)h=c;else{a=g+(c<<2)|0;c=g+(f<<2)|0;f=b+(d<<2)|0;e=d<<2>>2;a:do if(e)if((c-a>>2|0)<(e|0))j=c;else{d=c+(1-e<<2)|0;l=a;while(1){if((l|0)==(d|0)){j=c;break a}if((k[l>>2]|0)==(k[b>>2]|0)){m=l;n=b;do{n=n+4|0;if((n|0)==(f|0)){j=l;break a}m=m+4|0}while((k[m>>2]|0)==(k[n>>2]|0))}l=l+4|0}}else j=a;while(0);h=(j|0)==(c|0)?-1:j-g>>2}else h=-1;return h|0}function H7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}x=0;a=Ba(634,b|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(!(e>>>0>>0|(e-c|0)>>>0>>0))if(!a)g=c;else{d=f+(c<<2)|0;c=f+(e<<2)|0;e=b+(a<<2)|0;h=a<<2>>2;a:do if(h)if((c-d>>2|0)<(h|0))j=c;else{a=c+(1-h<<2)|0;l=d;while(1){if((l|0)==(a|0)){j=c;break a}if((k[l>>2]|0)==(k[b>>2]|0)){m=l;n=b;do{n=n+4|0;if((n|0)==(e|0)){j=l;break a}m=m+4|0}while((k[m>>2]|0)==(k[n>>2]|0))}l=l+4|0}}else j=d;while(0);g=(j|0)==(c|0)?-1:j-f>>2}else g=-1;return g|0}function I7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}do if(e>>>0>c>>>0){x=0;a=Fa(167,f+(c<<2)|0,b|0,e-c|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else{g=(a|0)==0?-1:a-f>>2;break}}else g=-1;while(0);return g|0}function J7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=b+4|0;h=d?g:k[b+8>>2]|0;b=d?(a&255)>>>1:k[g>>2]|0;g=e>>>0>>0?e:c;c=(e-g|0)>>>0>b>>>0?b+g|0:e;e=f+(c<<2)|0;g=h+(b<<2)|0;a=b<<2>>2;a:do if((a|0)!=0?(c<<2>>2|0)>=(a|0):0){d=f+(a+-1<<2)|0;j=g+-4|0;l=e;b:while(1){if((d|0)==(l|0)){m=e;break a}n=l+-4|0;if((k[n>>2]|0)==(k[j>>2]|0)){o=n;p=j}else{l=n;continue}while(1){if((p|0)==(h|0)){m=o;break a}q=o+-4|0;r=p+-4|0;if((k[q>>2]|0)==(k[r>>2]|0)){o=q;p=r}else{l=n;continue b}}}}else m=e;while(0);return ((b|0)!=0&(m|0)==(e|0)?-1:m-f>>2)|0}function K7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+4|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}a=f>>>0>>0?f:c;c=(f-a|0)>>>0>d>>>0?a+d|0:f;f=g+(c<<2)|0;a=b+(d<<2)|0;e=d<<2>>2;a:do if((e|0)!=0?(c<<2>>2|0)>=(e|0):0){h=g+(e+-1<<2)|0;j=a+-4|0;l=f;b:while(1){if((h|0)==(l|0)){m=f;break a}n=l+-4|0;if((k[n>>2]|0)==(k[j>>2]|0)){o=n;p=j}else{l=n;continue}while(1){if((p|0)==(b|0)){m=o;break a}q=o+-4|0;r=p+-4|0;if((k[q>>2]|0)==(k[r>>2]|0)){o=q;p=r}else{l=n;continue b}}}}else m=f;while(0);return ((d|0)!=0&(m|0)==(f|0)?-1:m-g>>2)|0}function L7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}x=0;a=Ba(634,b|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}d=e>>>0>>0?e:c;c=(e-d|0)>>>0>a>>>0?d+a|0:e;e=f+(c<<2)|0;d=b+(a<<2)|0;g=a<<2>>2;a:do if((g|0)!=0?(c<<2>>2|0)>=(g|0):0){h=f+(g+-1<<2)|0;j=d+-4|0;l=e;b:while(1){if((h|0)==(l|0)){m=e;break a}n=l+-4|0;if((k[n>>2]|0)==(k[j>>2]|0)){o=n;p=j}else{l=n;continue}while(1){if((p|0)==(b|0)){m=o;break a}q=o+-4|0;r=p+-4|0;if((k[q>>2]|0)==(k[r>>2]|0)){o=q;p=r}else{l=n;continue b}}}}else m=e;while(0);return ((a|0)!=0&(m|0)==(e|0)?-1:m-f>>2)|0}function M7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a:do if(!e)g=-1;else{a=f+((e>>>0>c>>>0?c+1|0:e)<<2)|0;while(1){if((a|0)==(f|0)){g=-1;break a}d=a+-4|0;if((k[d>>2]|0)==(b|0)){h=d;break}else a=d}g=h-f>>2}while(0);return g|0}function N7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=b+4|0;h=d?g:k[b+8>>2]|0;b=d?(a&255)>>>1:k[g>>2]|0;if(e>>>0<=c>>>0|(b|0)==0)j=-1;else{g=f+(e<<2)|0;e=h+(b<<2)|0;b=f+(c<<2)|0;a:while(1){if((b|0)==(g|0)){l=g;break}else m=h;while(1){if((m|0)==(e|0))break;if((k[b>>2]|0)==(k[m>>2]|0)){l=b;break a}else m=m+4|0}b=b+4|0}j=(l|0)==(g|0)?-1:l-f>>2}return j|0}function O7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+4|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}if((d|0)==0|f>>>0<=c>>>0)h=-1;else{a=g+(f<<2)|0;f=b+(d<<2)|0;d=g+(c<<2)|0;a:while(1){if((d|0)==(a|0)){j=a;break}else l=b;while(1){if((l|0)==(f|0))break;if((k[d>>2]|0)==(k[l>>2]|0)){j=d;break a}else l=l+4|0}d=d+4|0}h=(j|0)==(a|0)?-1:j-g>>2}return h|0}function P7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}x=0;a=Ba(634,b|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(e>>>0<=c>>>0|(a|0)==0)g=-1;else{d=f+(e<<2)|0;e=b+(a<<2)|0;a=f+(c<<2)|0;a:while(1){if((a|0)==(d|0)){h=d;break}else j=b;while(1){if((j|0)==(e|0))break;if((k[a>>2]|0)==(k[j>>2]|0)){h=a;break a}else j=j+4|0}a=a+4|0}g=(h|0)==(d|0)?-1:h-f>>2}return g|0}function Q7a(a,b,c){a=a|0;b=b|0;c=c|0;return I7a(a,b,c)|0}function R7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=b+4|0;h=d?g:k[b+8>>2]|0;b=d?(a&255)>>>1:k[g>>2]|0;a:do if(!b)j=-1;else{g=f;a=f+((e>>>0>c>>>0?c+1|0:e)<<2)|0;while(1){if((a|0)==(f|0)){j=-1;break a}d=a+-4|0;x=0;l=Fa(167,h|0,k[d>>2]|0,b|0)|0;m=x;x=0;if(m&1)break;if(!l)a=d;else{j=d-g>>2;break a}}g=Hc(0)|0;Fg(g)}while(0);return j|0}function S7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+4|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}a:do if(!d)h=-1;else{a=g;e=g+((f>>>0>c>>>0?c+1|0:f)<<2)|0;while(1){if((e|0)==(g|0)){h=-1;break a}j=e+-4|0;x=0;l=Fa(167,b|0,k[j>>2]|0,d|0)|0;m=x;x=0;if(m&1)break;if(!l)e=j;else{h=j-a>>2;break a}}a=Hc(0)|0;Fg(a)}while(0);return h|0}function T7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}x=0;a=Ba(634,b|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}a:do if(!a)g=-1;else{d=f;h=f+((e>>>0>c>>>0?c+1|0:e)<<2)|0;while(1){if((h|0)==(f|0)){g=-1;break a}j=h+-4|0;x=0;l=Fa(167,b|0,k[j>>2]|0,a|0)|0;m=x;x=0;if(m&1)break;if(!l)h=j;else{g=j-d>>2;break a}}d=Hc(0)|0;Fg(d)}while(0);return g|0}function U7a(a,b,c){a=a|0;b=b|0;c=c|0;return M7a(a,b,c)|0}function V7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=b+4|0;h=d?g:k[b+8>>2]|0;b=d?(a&255)>>>1:k[g>>2]|0;a:do if(e>>>0>c>>>0){g=f+(e<<2)|0;a=f+(c<<2)|0;while(1){if((a|0)==(g|0)){j=-1;break a}x=0;d=Fa(167,h|0,k[a>>2]|0,b|0)|0;l=x;x=0;if(l&1){m=11;break}if(!d){n=a;m=10;break}a=a+4|0}if((m|0)==10){j=n-f>>2;break}else if((m|0)==11){a=Hc(0)|0;Fg(a)}}else j=-1;while(0);return j|0}function W7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+4|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}a:do if(f>>>0>c>>>0){a=g+(f<<2)|0;e=g+(c<<2)|0;while(1){if((e|0)==(a|0)){h=-1;break a}x=0;j=Fa(167,b|0,k[e>>2]|0,d|0)|0;l=x;x=0;if(l&1){m=11;break}if(!j){n=e;m=10;break}e=e+4|0}if((m|0)==10){h=n-g>>2;break}else if((m|0)==11){e=Hc(0)|0;Fg(e)}}else h=-1;while(0);return h|0}function X7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}x=0;a=Ba(634,b|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}a:do if(e>>>0>c>>>0){d=f+(e<<2)|0;g=f+(c<<2)|0;while(1){if((g|0)==(d|0)){h=-1;break a}x=0;j=Fa(167,b|0,k[g>>2]|0,a|0)|0;l=x;x=0;if(l&1){m=12;break}if(!j){n=g;m=11;break}g=g+4|0}if((m|0)==11){h=n-f>>2;break}else if((m|0)==12){g=Hc(0)|0;Fg(g)}}else h=-1;while(0);return h|0}function Y7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a:do if(e>>>0>c>>>0){a=f+(e<<2)|0;d=f+(c<<2)|0;while(1){if((d|0)==(a|0)){g=-1;break a}if((k[d>>2]|0)!=(b|0)){h=d;break}d=d+4|0}g=h-f>>2}else g=-1;while(0);return g|0}function Z7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=i[b>>0]|0;d=(a&1)==0;g=b+4|0;h=d?g:k[b+8>>2]|0;b=d?(a&255)>>>1:k[g>>2]|0;g=f+((e>>>0>c>>>0?c+1|0:e)<<2)|0;while(1){if((g|0)==(f|0)){j=-1;break}e=g+-4|0;x=0;c=Fa(167,h|0,k[e>>2]|0,b|0)|0;a=x;x=0;if(a&1){l=9;break}if(!c){m=e;l=8;break}else g=e}if((l|0)==8)j=m-f>>2;else if((l|0)==9){l=Hc(0)|0;Fg(l)}return j|0}function _7a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=a+4|0}else{f=k[a+4>>2]|0;g=k[a+8>>2]|0}a=g+((f>>>0>c>>>0?c+1|0:f)<<2)|0;while(1){if((a|0)==(g|0)){h=-1;break}f=a+-4|0;x=0;c=Fa(167,b|0,k[f>>2]|0,d|0)|0;e=x;x=0;if(e&1){j=9;break}if(!c){l=f;j=8;break}else a=f}if((j|0)==8)h=l-g>>2;else if((j|0)==9){j=Hc(0)|0;Fg(j)}return h|0}function $7a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}x=0;a=Ba(634,b|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}d=f+((e>>>0>c>>>0?c+1|0:e)<<2)|0;while(1){if((d|0)==(f|0)){g=-1;break}e=d+-4|0;x=0;c=Fa(167,b|0,k[e>>2]|0,a|0)|0;h=x;x=0;if(h&1){j=10;break}if(!c){l=e;j=9;break}else d=e}if((j|0)==9)g=l-f>>2;else if((j|0)==10){j=Hc(0)|0;Fg(j)}return g|0}function a8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i[a>>0]|0;if(!(d&1)){e=(d&255)>>>1;f=a+4|0}else{e=k[a+4>>2]|0;f=k[a+8>>2]|0}a=f+((e>>>0>c>>>0?c+1|0:e)<<2)|0;while(1){if((a|0)==(f|0)){g=-1;break}e=a+-4|0;if((k[e>>2]|0)==(b|0))a=e;else{h=e;j=7;break}}if((j|0)==7)g=h-f>>2;return g|0}function b8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=i[a>>0]|0;d=(c&1)==0;if(d)e=(c&255)>>>1;else e=k[a+4>>2]|0;c=i[b>>0]|0;f=(c&1)==0;g=b+4|0;h=f?(c&255)>>>1:k[g>>2]|0;if(d)j=a+4|0;else j=k[a+8>>2]|0;a=h>>>0>>0;x=0;d=Fa(168,j|0,(f?g:k[b+8>>2]|0)|0,(a?h:e)|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!d)return (e>>>0>>0?-1:a&1)|0;else return d|0;return 0}function c8a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=i[d>>0]|0;f=(e&1)==0;g=d+4|0;return d8a(a,b,c,f?g:k[d+8>>2]|0,f?(e&255)>>>1:k[g>>2]|0)|0}function d8a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i[a>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[a+4>>2]|0;if((e|0)==-1|h>>>0>>0)VEa(a);f=h-b|0;h=f>>>0>>0?f:c;if(g)j=a+4|0;else j=k[a+8>>2]|0;a=h>>>0>e>>>0;g=KMa(j+(b<<2)|0,d,a?e:h)|0;if(!g)return (h>>>0>>0?-1:a&1)|0;else return g|0;return 0}function e8a(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0;g=i[d>>0]|0;h=(g&1)==0;j=d+4|0;l=h?(g&255)>>>1:k[j>>2]|0;if(l>>>0>>0)VEa(a);else{g=l-e|0;return d8a(a,b,c,(h?j:k[d+8>>2]|0)+(e<<2)|0,g>>>0>>0?g:f)|0}return 0}function f8a(a,b){a=a|0;b=b|0;var c=0,d=0;x=0;c=Ba(634,b|0)|0;d=x;x=0;if(!(d&1)?(x=0,d=Va(98,a|0,0,-1,b|0,c|0)|0,c=x,x=0,!(c&1)):0)return d|0;d=Hc(0)|0;Fg(d);return 0}function g8a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return d8a(a,b,c,d,$La(d)|0)|0}function h8a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=i[a>>0]|0;if(!(b&1)){c=(b&255)>>>1;d=1;e=b}else{b=k[a>>2]|0;c=k[a+4>>2]|0;d=(b&-2)+-1|0;e=b&255}do if(c>>>0>d>>>0)f=0;else{if((e&1)!=0?(k[a+8>>2]|0)==0:0){f=0;break}if(!(e&1))g=(e&255)>>>1;else g=k[a+4>>2]|0;if(!(e&1))h=a+4|0;else h=k[a+8>>2]|0;f=(k[h+(g<<2)>>2]|0)==0}while(0);return f|0}function i8a(a){a=a|0;return a+4|0}function j8a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(d>>>0>1073741807)GBa(a);if(d>>>0<2){i[a>>0]=c<<1;e=a+4|0}else{f=d+4&-4;d=KBa(f<<2)|0;k[a+8>>2]=d;k[a>>2]=f|1;k[a+4>>2]=c;e=d}_La(e,b,c)|0;k[e+(c<<2)>>2]=0;return}function k8a(a,b,c){a=a|0;b=b|0;c=c|0;return}function l8a(a,b,c){a=a|0;b=b|0;c=c|0;return}function m8a(a,b,c){a=a|0;b=b|0;c=c|0;if(!(i[a>>0]&1))i[a>>0]=0;else k[k[a+8>>2]>>2]=0;k[a+4>>2]=0;x=0;xa(945,a|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function n8a(a,b){a=a|0;b=b|0;return}function o8a(a,b,c){a=a|0;b=b|0;c=c|0;return}function p8a(a,b,c){a=a|0;b=b|0;c=c|0;return}function q8a(a,b,c){a=a|0;b=b|0;c=c|0;return}function r8a(a,b,c){a=a|0;b=b|0;c=c|0;return}function s8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;q2a(e,326167,4);x=0;f=db(82,e|0,a|0,b|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;K2a(e);Sc(c|0)}else{K2a(e);r=d;return f|0}return 0}function t8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;q2a(e,326167,4);x=0;f=db(83,e|0,a|0,b|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;K2a(e);Sc(c|0)}else{K2a(e);r=d;return f|0}return 0}function u8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;q2a(e,326172,4);x=0;f=db(82,e|0,a|0,b|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;K2a(e);Sc(c|0)}else{K2a(e);r=d;return f|0}return 0}function v8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;q2a(e,326172,4);x=0;f=db(83,e|0,a|0,b|0,c|0)|0;c=x;x=0;if(c&1){c=Hc()|0;K2a(e);Sc(c|0)}else{K2a(e);r=d;return f|0}return 0}function w8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d+12|0;f=d;q2a(f,326177,5);g=(i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0;a=HSa()|0;h=k[a>>2]|0;k[a>>2]=0;j=kOa(g,e,c)|0;c=k[a>>2]|0;k[a>>2]=h;if(!((c|0)==34?(x=0,va(1537,f|0),c=x,x=0,c&1):0))l=3;do if((l|0)==3){c=k[e>>2]|0;h=c;if((c|0)==(g|0)?(x=0,va(1538,f|0),c=x,x=0,c&1):0)break;if(b)k[b>>2]=h-g;K2a(f);r=d;return j|0}while(0);j=Hc()|0;K2a(f);Sc(j|0);return 0}function x8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d+12|0;f=d;q2a(f,326177,5);g=(i[a>>0]&1)==0?a+4|0:k[a+8>>2]|0;a=HSa()|0;h=k[a>>2]|0;k[a>>2]=0;x=0;j=Fa(169,g|0,e|0,c|0)|0;c=x;x=0;do if(!(c&1)){l=k[a>>2]|0;k[a>>2]=h;if((l|0)==34?(x=0,va(1537,f|0),l=x,x=0,l&1):0)break;if((k[e>>2]|0)==(g|0)?(x=0,va(1538,f|0),l=x,x=0,l&1):0)break;if(b)k[b>>2]=(k[e>>2]|0)-g>>2;K2a(f);r=d;return j|0}while(0);j=Hc()|0;K2a(f);Sc(j|0);return 0}function y8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+12|0;f=d;q2a(f,326183,5);g=(i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0;a=HSa()|0;h=k[a>>2]|0;k[a>>2]=0;j=jOa(g,e,c)|0;c=M;l=k[a>>2]|0;k[a>>2]=h;if(!((l|0)==34?(x=0,va(1537,f|0),l=x,x=0,l&1):0))m=3;do if((m|0)==3){l=k[e>>2]|0;h=l;if((l|0)==(g|0)?(x=0,va(1538,f|0),l=x,x=0,l&1):0)break;if(b)k[b>>2]=h-g;K2a(f);M=c;r=d;return j|0}while(0);j=Hc()|0;K2a(f);Sc(j|0);return 0}function z8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+12|0;f=d;q2a(f,326183,5);g=(i[a>>0]&1)==0?a+4|0:k[a+8>>2]|0;a=HSa()|0;h=k[a>>2]|0;k[a>>2]=0;x=0;j=Fa(170,g|0,e|0,c|0)|0;c=M;l=x;x=0;do if(!(l&1)){m=k[a>>2]|0;k[a>>2]=h;if((m|0)==34?(x=0,va(1537,f|0),m=x,x=0,m&1):0)break;if((k[e>>2]|0)==(g|0)?(x=0,va(1538,f|0),m=x,x=0,m&1):0)break;if(b)k[b>>2]=(k[e>>2]|0)-g>>2;K2a(f);M=c;r=d;return j|0}while(0);j=Hc()|0;K2a(f);Sc(j|0);return 0}function A8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+12|0;f=d;q2a(f,326189,6);g=(i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0;a=HSa()|0;h=k[a>>2]|0;k[a>>2]=0;j=iOa(g,e,c)|0;c=M;l=k[a>>2]|0;k[a>>2]=h;if(!((l|0)==34?(x=0,va(1537,f|0),l=x,x=0,l&1):0))m=3;do if((m|0)==3){l=k[e>>2]|0;h=l;if((l|0)==(g|0)?(x=0,va(1538,f|0),l=x,x=0,l&1):0)break;if(b)k[b>>2]=h-g;K2a(f);M=c;r=d;return j|0}while(0);j=Hc()|0;K2a(f);Sc(j|0);return 0}function B8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+12|0;f=d;q2a(f,326189,6);g=(i[a>>0]&1)==0?a+4|0:k[a+8>>2]|0;a=HSa()|0;h=k[a>>2]|0;k[a>>2]=0;x=0;j=Fa(171,g|0,e|0,c|0)|0;c=M;l=x;x=0;do if(!(l&1)){m=k[a>>2]|0;k[a>>2]=h;if((m|0)==34?(x=0,va(1537,f|0),m=x,x=0,m&1):0)break;if((k[e>>2]|0)==(g|0)?(x=0,va(1538,f|0),m=x,x=0,m&1):0)break;if(b)k[b>>2]=(k[e>>2]|0)-g>>2;K2a(f);M=c;r=d;return j|0}while(0);j=Hc()|0;K2a(f);Sc(j|0);return 0}function C8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0;c=r;r=r+16|0;d=c+12|0;e=c;q2a(e,326196,4);f=(i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0;a=HSa()|0;g=k[a>>2]|0;k[a>>2]=0;h=+pOa(f,d);j=k[a>>2]|0;k[a>>2]=g;if(!((j|0)==34?(x=0,va(1537,e|0),j=x,x=0,j&1):0))l=3;do if((l|0)==3){j=k[d>>2]|0;g=j;if((j|0)==(f|0)?(x=0,va(1538,e|0),j=x,x=0,j&1):0)break;if(b)k[b>>2]=g-f;K2a(e);r=c;return +h}while(0);c=Hc()|0;K2a(e);Sc(c|0);return +(0.0)}function D8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0;c=r;r=r+16|0;d=c+12|0;e=c;q2a(e,326196,4);f=(i[a>>0]&1)==0?a+4|0:k[a+8>>2]|0;a=HSa()|0;g=k[a>>2]|0;k[a>>2]=0;x=0;h=+Za(42,f|0,d|0);j=x;x=0;do if(!(j&1)){l=k[a>>2]|0;k[a>>2]=g;if((l|0)==34?(x=0,va(1537,e|0),l=x,x=0,l&1):0)break;if((k[d>>2]|0)==(f|0)?(x=0,va(1538,e|0),l=x,x=0,l&1):0)break;if(b)k[b>>2]=(k[d>>2]|0)-f>>2;K2a(e);r=c;return +h}while(0);c=Hc()|0;K2a(e);Sc(c|0);return +(0.0)}function E8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0;c=r;r=r+16|0;d=c+12|0;e=c;q2a(e,326201,4);f=(i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0;a=HSa()|0;g=k[a>>2]|0;k[a>>2]=0;h=+qOa(f,d);j=k[a>>2]|0;k[a>>2]=g;if(!((j|0)==34?(x=0,va(1537,e|0),j=x,x=0,j&1):0))l=3;do if((l|0)==3){j=k[d>>2]|0;g=j;if((j|0)==(f|0)?(x=0,va(1538,e|0),j=x,x=0,j&1):0)break;if(b)k[b>>2]=g-f;K2a(e);r=c;return +h}while(0);c=Hc()|0;K2a(e);Sc(c|0);return +(0.0)}function F8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0;c=r;r=r+16|0;d=c+12|0;e=c;q2a(e,326201,4);f=(i[a>>0]&1)==0?a+4|0:k[a+8>>2]|0;a=HSa()|0;g=k[a>>2]|0;k[a>>2]=0;x=0;h=+Za(43,f|0,d|0);j=x;x=0;do if(!(j&1)){l=k[a>>2]|0;k[a>>2]=g;if((l|0)==34?(x=0,va(1537,e|0),l=x,x=0,l&1):0)break;if((k[d>>2]|0)==(f|0)?(x=0,va(1538,e|0),l=x,x=0,l&1):0)break;if(b)k[b>>2]=(k[d>>2]|0)-f>>2;K2a(e);r=c;return +h}while(0);c=Hc()|0;K2a(e);Sc(c|0);return +(0.0)}function G8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0;c=r;r=r+16|0;d=c+12|0;e=c;q2a(e,326206,5);f=(i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0;a=HSa()|0;g=k[a>>2]|0;k[a>>2]=0;h=+rOa(f,d);j=k[a>>2]|0;k[a>>2]=g;if(!((j|0)==34?(x=0,va(1537,e|0),j=x,x=0,j&1):0))l=3;do if((l|0)==3){j=k[d>>2]|0;g=j;if((j|0)==(f|0)?(x=0,va(1538,e|0),j=x,x=0,j&1):0)break;if(b)k[b>>2]=g-f;K2a(e);r=c;return +h}while(0);c=Hc()|0;K2a(e);Sc(c|0);return +(0.0)}function H8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0;c=r;r=r+16|0;d=c+12|0;e=c;q2a(e,326206,5);f=(i[a>>0]&1)==0?a+4|0:k[a+8>>2]|0;a=HSa()|0;g=k[a>>2]|0;k[a>>2]=0;x=0;h=+Za(44,f|0,d|0);j=x;x=0;do if(!(j&1)){l=k[a>>2]|0;k[a>>2]=g;if((l|0)==34?(x=0,va(1537,e|0),l=x,x=0,l&1):0)break;if((k[d>>2]|0)==(f|0)?(x=0,va(1538,e|0),l=x,x=0,l&1):0)break;if(b)k[b>>2]=(k[d>>2]|0)-f>>2;K2a(e);r=c;return +h}while(0);c=Hc()|0;K2a(e);Sc(c|0);return +(0.0)}function I8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;e=c+4|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}if(!(i[e>>0]&1))g=10;else g=(k[e>>2]&-2)+-1|0;x=0;fb(147,e|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}g=i[e>>0]|0;f=e+1|0;h=e+8|0;j=g;l=(g&1)==0?(g&255)>>>1:k[e+4>>2]|0;while(1){g=(j&1)==0?f:k[h>>2]|0;k[d>>2]=b;m=uRa(g,l+1|0,326212,d)|0;if((m|0)>-1)if(m>>>0>l>>>0)n=m;else{o=m;p=14;break}else n=l<<1|1;x=0;fb(147,e|0,n|0,0);m=x;x=0;if(m&1){p=19;break}j=i[e>>0]|0;l=n}do if((p|0)==14){x=0;fb(147,e|0,o|0,0);n=x;x=0;if(n&1){n=Hc()|0;q=n;s=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];n=0;while(1){if((n|0)==3)break;k[e+(n<<2)>>2]=0;n=n+1|0}K2a(e);r=c;return}else if((p|0)==19){n=Hc()|0;q=n;s=M}while(0);K2a(e);Sc(q|0)}function J8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;e=c+4|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}if(!(i[e>>0]&1))g=10;else g=(k[e>>2]&-2)+-1|0;x=0;fb(147,e|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}g=i[e>>0]|0;f=e+1|0;h=e+8|0;j=g;l=(g&1)==0?(g&255)>>>1:k[e+4>>2]|0;while(1){g=(j&1)==0?f:k[h>>2]|0;k[d>>2]=b;m=uRa(g,l+1|0,326215,d)|0;if((m|0)>-1)if(m>>>0>l>>>0)n=m;else{o=m;p=14;break}else n=l<<1|1;x=0;fb(147,e|0,n|0,0);m=x;x=0;if(m&1){p=19;break}j=i[e>>0]|0;l=n}do if((p|0)==14){x=0;fb(147,e|0,o|0,0);n=x;x=0;if(n&1){n=Hc()|0;q=n;s=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];n=0;while(1){if((n|0)==3)break;k[e+(n<<2)>>2]=0;n=n+1|0}K2a(e);r=c;return}else if((p|0)==19){n=Hc()|0;q=n;s=M}while(0);K2a(e);Sc(q|0)}function K8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;e=c+4|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}if(!(i[e>>0]&1))g=10;else g=(k[e>>2]&-2)+-1|0;x=0;fb(147,e|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}g=i[e>>0]|0;f=e+1|0;h=e+8|0;j=g;l=(g&1)==0?(g&255)>>>1:k[e+4>>2]|0;while(1){g=(j&1)==0?f:k[h>>2]|0;k[d>>2]=b;m=uRa(g,l+1|0,326218,d)|0;if((m|0)>-1)if(m>>>0>l>>>0)n=m;else{o=m;p=14;break}else n=l<<1|1;x=0;fb(147,e|0,n|0,0);m=x;x=0;if(m&1){p=19;break}j=i[e>>0]|0;l=n}do if((p|0)==14){x=0;fb(147,e|0,o|0,0);n=x;x=0;if(n&1){n=Hc()|0;q=n;s=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];n=0;while(1){if((n|0)==3)break;k[e+(n<<2)>>2]=0;n=n+1|0}K2a(e);r=c;return}else if((p|0)==19){n=Hc()|0;q=n;s=M}while(0);K2a(e);Sc(q|0)}function L8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;e=c+4|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}if(!(i[e>>0]&1))g=10;else g=(k[e>>2]&-2)+-1|0;x=0;fb(147,e|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}g=i[e>>0]|0;f=e+1|0;h=e+8|0;j=g;l=(g&1)==0?(g&255)>>>1:k[e+4>>2]|0;while(1){g=(j&1)==0?f:k[h>>2]|0;k[d>>2]=b;m=uRa(g,l+1|0,326222,d)|0;if((m|0)>-1)if(m>>>0>l>>>0)n=m;else{o=m;p=14;break}else n=l<<1|1;x=0;fb(147,e|0,n|0,0);m=x;x=0;if(m&1){p=19;break}j=i[e>>0]|0;l=n}do if((p|0)==14){x=0;fb(147,e|0,o|0,0);n=x;x=0;if(n&1){n=Hc()|0;q=n;s=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];n=0;while(1){if((n|0)==3)break;k[e+(n<<2)>>2]=0;n=n+1|0}K2a(e);r=c;return}else if((p|0)==19){n=Hc()|0;q=n;s=M}while(0);K2a(e);Sc(q|0)}function M8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+32|0;e=d;f=d+8|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}if(!(i[f>>0]&1))h=10;else h=(k[f>>2]&-2)+-1|0;x=0;fb(147,f|0,h|0,0);h=x;x=0;if(h&1){h=Hc()|0;K2a(f);Sc(h|0)}h=i[f>>0]|0;g=f+1|0;j=f+8|0;l=h;m=(h&1)==0?(h&255)>>>1:k[f+4>>2]|0;while(1){h=(l&1)==0?g:k[j>>2]|0;n=e;k[n>>2]=b;k[n+4>>2]=c;n=uRa(h,m+1|0,326226,e)|0;if((n|0)>-1)if(n>>>0>m>>>0)o=n;else{p=n;q=14;break}else o=m<<1|1;x=0;fb(147,f|0,o|0,0);n=x;x=0;if(n&1){q=19;break}l=i[f>>0]|0;m=o}do if((q|0)==14){x=0;fb(147,f|0,p|0,0);o=x;x=0;if(o&1){o=Hc()|0;s=o;t=M;break};k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];o=0;while(1){if((o|0)==3)break;k[f+(o<<2)>>2]=0;o=o+1|0}K2a(f);r=d;return}else if((q|0)==19){o=Hc()|0;s=o;t=M}while(0);K2a(f);Sc(s|0)}function N8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+32|0;e=d;f=d+8|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}if(!(i[f>>0]&1))h=10;else h=(k[f>>2]&-2)+-1|0;x=0;fb(147,f|0,h|0,0);h=x;x=0;if(h&1){h=Hc()|0;K2a(f);Sc(h|0)}h=i[f>>0]|0;g=f+1|0;j=f+8|0;l=h;m=(h&1)==0?(h&255)>>>1:k[f+4>>2]|0;while(1){h=(l&1)==0?g:k[j>>2]|0;n=e;k[n>>2]=b;k[n+4>>2]=c;n=uRa(h,m+1|0,326231,e)|0;if((n|0)>-1)if(n>>>0>m>>>0)o=n;else{p=n;q=14;break}else o=m<<1|1;x=0;fb(147,f|0,o|0,0);n=x;x=0;if(n&1){q=19;break}l=i[f>>0]|0;m=o}do if((q|0)==14){x=0;fb(147,f|0,p|0,0);o=x;x=0;if(o&1){o=Hc()|0;s=o;t=M;break};k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];o=0;while(1){if((o|0)==3)break;k[f+(o<<2)>>2]=0;o=o+1|0}K2a(f);r=d;return}else if((q|0)==19){o=Hc()|0;s=o;t=M}while(0);K2a(f);Sc(s|0)}function O8a(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c;e=c+8|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}if(!(i[e>>0]&1))g=10;else g=(k[e>>2]&-2)+-1|0;x=0;fb(147,e|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}g=i[e>>0]|0;f=e+1|0;h=b;j=e+8|0;l=g;m=(g&1)==0?(g&255)>>>1:k[e+4>>2]|0;while(1){g=(l&1)==0?f:k[j>>2]|0;p[d>>3]=h;n=uRa(g,m+1|0,326236,d)|0;if((n|0)>-1)if(n>>>0>m>>>0)o=n;else{q=n;s=14;break}else o=m<<1|1;x=0;fb(147,e|0,o|0,0);n=x;x=0;if(n&1){s=19;break}l=i[e>>0]|0;m=o}do if((s|0)==14){x=0;fb(147,e|0,q|0,0);o=x;x=0;if(o&1){o=Hc()|0;t=o;u=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];o=0;while(1){if((o|0)==3)break;k[e+(o<<2)>>2]=0;o=o+1|0}K2a(e);r=c;return}else if((s|0)==19){o=Hc()|0;t=o;u=M}while(0);K2a(e);Sc(t|0)}function P8a(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c;e=c+8|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}if(!(i[e>>0]&1))g=10;else g=(k[e>>2]&-2)+-1|0;x=0;fb(147,e|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}g=i[e>>0]|0;f=e+1|0;h=e+8|0;j=g;l=(g&1)==0?(g&255)>>>1:k[e+4>>2]|0;while(1){g=(j&1)==0?f:k[h>>2]|0;p[d>>3]=b;m=uRa(g,l+1|0,326236,d)|0;if((m|0)>-1)if(m>>>0>l>>>0)n=m;else{o=m;q=14;break}else n=l<<1|1;x=0;fb(147,e|0,n|0,0);m=x;x=0;if(m&1){q=19;break}j=i[e>>0]|0;l=n}do if((q|0)==14){x=0;fb(147,e|0,o|0,0);n=x;x=0;if(n&1){n=Hc()|0;s=n;t=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];n=0;while(1){if((n|0)==3)break;k[e+(n<<2)>>2]=0;n=n+1|0}K2a(e);r=c;return}else if((q|0)==19){n=Hc()|0;s=n;t=M}while(0);K2a(e);Sc(s|0)}function Q8a(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c;e=c+8|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}if(!(i[e>>0]&1))g=10;else g=(k[e>>2]&-2)+-1|0;x=0;fb(147,e|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;K2a(e);Sc(g|0)}g=i[e>>0]|0;f=e+1|0;h=e+8|0;j=g;l=(g&1)==0?(g&255)>>>1:k[e+4>>2]|0;while(1){g=(j&1)==0?f:k[h>>2]|0;p[d>>3]=b;m=uRa(g,l+1|0,329846,d)|0;if((m|0)>-1)if(m>>>0>l>>>0)n=m;else{o=m;q=14;break}else n=l<<1|1;x=0;fb(147,e|0,n|0,0);m=x;x=0;if(m&1){q=19;break}j=i[e>>0]|0;l=n}do if((q|0)==14){x=0;fb(147,e|0,o|0,0);n=x;x=0;if(n&1){n=Hc()|0;s=n;t=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];n=0;while(1){if((n|0)==3)break;k[e+(n<<2)>>2]=0;n=n+1|0}K2a(e);r=c;return}else if((q|0)==19){n=Hc()|0;s=n;t=M}while(0);K2a(e);Sc(s|0)}function R8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;e=c+4|0;H5a(e,23,0);if(!(i[e>>0]&1))f=1;else f=(k[e>>2]&-2)+-1|0;x=0;fb(419,e|0,f|0,0);f=x;x=0;if(f&1){f=Hc()|0;O5a(e);Sc(f|0)}f=i[e>>0]|0;g=e+4|0;h=e+8|0;j=f;l=(f&1)==0?(f&255)>>>1:k[g>>2]|0;while(1){f=(j&1)==0?g:k[h>>2]|0;x=0;k[d>>2]=b;m=db(84,f|0,l+1|0,71332,d|0)|0;f=x;x=0;if(f&1){n=17;break}if((m|0)>-1)if(m>>>0>l>>>0)o=m;else{p=m;n=12;break}else o=l<<1|1;x=0;fb(419,e|0,o|0,0);m=x;x=0;if(m&1){n=17;break}j=i[e>>0]|0;l=o}do if((n|0)==12){x=0;fb(419,e|0,p|0,0);o=x;x=0;if(o&1){o=Hc()|0;q=o;s=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];o=0;while(1){if((o|0)==3)break;k[e+(o<<2)>>2]=0;o=o+1|0}O5a(e);r=c;return}else if((n|0)==17){o=Hc()|0;q=o;s=M}while(0);O5a(e);Sc(q|0)}function S8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;e=c+4|0;H5a(e,23,0);if(!(i[e>>0]&1))f=1;else f=(k[e>>2]&-2)+-1|0;x=0;fb(419,e|0,f|0,0);f=x;x=0;if(f&1){f=Hc()|0;O5a(e);Sc(f|0)}f=i[e>>0]|0;g=e+4|0;h=e+8|0;j=f;l=(f&1)==0?(f&255)>>>1:k[g>>2]|0;while(1){f=(j&1)==0?g:k[h>>2]|0;x=0;k[d>>2]=b;m=db(84,f|0,l+1|0,71344,d|0)|0;f=x;x=0;if(f&1){n=17;break}if((m|0)>-1)if(m>>>0>l>>>0)o=m;else{p=m;n=12;break}else o=l<<1|1;x=0;fb(419,e|0,o|0,0);m=x;x=0;if(m&1){n=17;break}j=i[e>>0]|0;l=o}do if((n|0)==12){x=0;fb(419,e|0,p|0,0);o=x;x=0;if(o&1){o=Hc()|0;q=o;s=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];o=0;while(1){if((o|0)==3)break;k[e+(o<<2)>>2]=0;o=o+1|0}O5a(e);r=c;return}else if((n|0)==17){o=Hc()|0;q=o;s=M}while(0);O5a(e);Sc(q|0)}function T8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;e=c+4|0;H5a(e,23,0);if(!(i[e>>0]&1))f=1;else f=(k[e>>2]&-2)+-1|0;x=0;fb(419,e|0,f|0,0);f=x;x=0;if(f&1){f=Hc()|0;O5a(e);Sc(f|0)}f=i[e>>0]|0;g=e+4|0;h=e+8|0;j=f;l=(f&1)==0?(f&255)>>>1:k[g>>2]|0;while(1){f=(j&1)==0?g:k[h>>2]|0;x=0;k[d>>2]=b;m=db(84,f|0,l+1|0,71356,d|0)|0;f=x;x=0;if(f&1){n=17;break}if((m|0)>-1)if(m>>>0>l>>>0)o=m;else{p=m;n=12;break}else o=l<<1|1;x=0;fb(419,e|0,o|0,0);m=x;x=0;if(m&1){n=17;break}j=i[e>>0]|0;l=o}do if((n|0)==12){x=0;fb(419,e|0,p|0,0);o=x;x=0;if(o&1){o=Hc()|0;q=o;s=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];o=0;while(1){if((o|0)==3)break;k[e+(o<<2)>>2]=0;o=o+1|0}O5a(e);r=c;return}else if((n|0)==17){o=Hc()|0;q=o;s=M}while(0);O5a(e);Sc(q|0)}function U8a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;e=c+4|0;H5a(e,23,0);if(!(i[e>>0]&1))f=1;else f=(k[e>>2]&-2)+-1|0;x=0;fb(419,e|0,f|0,0);f=x;x=0;if(f&1){f=Hc()|0;O5a(e);Sc(f|0)}f=i[e>>0]|0;g=e+4|0;h=e+8|0;j=f;l=(f&1)==0?(f&255)>>>1:k[g>>2]|0;while(1){f=(j&1)==0?g:k[h>>2]|0;x=0;k[d>>2]=b;m=db(84,f|0,l+1|0,71372,d|0)|0;f=x;x=0;if(f&1){n=17;break}if((m|0)>-1)if(m>>>0>l>>>0)o=m;else{p=m;n=12;break}else o=l<<1|1;x=0;fb(419,e|0,o|0,0);m=x;x=0;if(m&1){n=17;break}j=i[e>>0]|0;l=o}do if((n|0)==12){x=0;fb(419,e|0,p|0,0);o=x;x=0;if(o&1){o=Hc()|0;q=o;s=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];o=0;while(1){if((o|0)==3)break;k[e+(o<<2)>>2]=0;o=o+1|0}O5a(e);r=c;return}else if((n|0)==17){o=Hc()|0;q=o;s=M}while(0);O5a(e);Sc(q|0)}function V8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+32|0;e=d;f=d+8|0;H5a(f,23,0);if(!(i[f>>0]&1))g=1;else g=(k[f>>2]&-2)+-1|0;x=0;fb(419,f|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;O5a(f);Sc(g|0)}g=i[f>>0]|0;h=f+4|0;j=f+8|0;l=g;m=(g&1)==0?(g&255)>>>1:k[h>>2]|0;while(1){g=(l&1)==0?h:k[j>>2]|0;x=0;n=e;k[n>>2]=b;k[n+4>>2]=c;n=db(84,g|0,m+1|0,71388,e|0)|0;g=x;x=0;if(g&1){o=17;break}if((n|0)>-1)if(n>>>0>m>>>0)p=n;else{q=n;o=12;break}else p=m<<1|1;x=0;fb(419,f|0,p|0,0);n=x;x=0;if(n&1){o=17;break}l=i[f>>0]|0;m=p}do if((o|0)==12){x=0;fb(419,f|0,q|0,0);p=x;x=0;if(p&1){p=Hc()|0;s=p;t=M;break};k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];p=0;while(1){if((p|0)==3)break;k[f+(p<<2)>>2]=0;p=p+1|0}O5a(f);r=d;return}else if((o|0)==17){p=Hc()|0;s=p;t=M}while(0);O5a(f);Sc(s|0)}function W8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+32|0;e=d;f=d+8|0;H5a(f,23,0);if(!(i[f>>0]&1))g=1;else g=(k[f>>2]&-2)+-1|0;x=0;fb(419,f|0,g|0,0);g=x;x=0;if(g&1){g=Hc()|0;O5a(f);Sc(g|0)}g=i[f>>0]|0;h=f+4|0;j=f+8|0;l=g;m=(g&1)==0?(g&255)>>>1:k[h>>2]|0;while(1){g=(l&1)==0?h:k[j>>2]|0;x=0;n=e;k[n>>2]=b;k[n+4>>2]=c;n=db(84,g|0,m+1|0,71408,e|0)|0;g=x;x=0;if(g&1){o=17;break}if((n|0)>-1)if(n>>>0>m>>>0)p=n;else{q=n;o=12;break}else p=m<<1|1;x=0;fb(419,f|0,p|0,0);n=x;x=0;if(n&1){o=17;break}l=i[f>>0]|0;m=p}do if((o|0)==12){x=0;fb(419,f|0,q|0,0);p=x;x=0;if(p&1){p=Hc()|0;s=p;t=M;break};k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];p=0;while(1){if((p|0)==3)break;k[f+(p<<2)>>2]=0;p=p+1|0}O5a(f);r=d;return}else if((o|0)==17){p=Hc()|0;s=p;t=M}while(0);O5a(f);Sc(s|0)}function X8a(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c;e=c+8|0;H5a(e,20,0);if(!(i[e>>0]&1))f=1;else f=(k[e>>2]&-2)+-1|0;x=0;fb(419,e|0,f|0,0);f=x;x=0;if(f&1){f=Hc()|0;O5a(e);Sc(f|0)}f=i[e>>0]|0;g=e+4|0;h=b;j=e+8|0;l=f;m=(f&1)==0?(f&255)>>>1:k[g>>2]|0;while(1){f=(l&1)==0?g:k[j>>2]|0;x=0;p[d>>3]=h;n=db(84,f|0,m+1|0,71428,d|0)|0;f=x;x=0;if(f&1){o=17;break}if((n|0)>-1)if(n>>>0>m>>>0)q=n;else{s=n;o=12;break}else q=m<<1|1;x=0;fb(419,e|0,q|0,0);n=x;x=0;if(n&1){o=17;break}l=i[e>>0]|0;m=q}do if((o|0)==12){x=0;fb(419,e|0,s|0,0);q=x;x=0;if(q&1){q=Hc()|0;t=q;u=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];q=0;while(1){if((q|0)==3)break;k[e+(q<<2)>>2]=0;q=q+1|0}O5a(e);r=c;return}else if((o|0)==17){q=Hc()|0;t=q;u=M}while(0);O5a(e);Sc(t|0)}function Y8a(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c;e=c+8|0;H5a(e,20,0);if(!(i[e>>0]&1))f=1;else f=(k[e>>2]&-2)+-1|0;x=0;fb(419,e|0,f|0,0);f=x;x=0;if(f&1){f=Hc()|0;O5a(e);Sc(f|0)}f=i[e>>0]|0;g=e+4|0;h=e+8|0;j=f;l=(f&1)==0?(f&255)>>>1:k[g>>2]|0;while(1){f=(j&1)==0?g:k[h>>2]|0;x=0;p[d>>3]=b;m=db(84,f|0,l+1|0,71428,d|0)|0;f=x;x=0;if(f&1){n=17;break}if((m|0)>-1)if(m>>>0>l>>>0)o=m;else{q=m;n=12;break}else o=l<<1|1;x=0;fb(419,e|0,o|0,0);m=x;x=0;if(m&1){n=17;break}j=i[e>>0]|0;l=o}do if((n|0)==12){x=0;fb(419,e|0,q|0,0);o=x;x=0;if(o&1){o=Hc()|0;s=o;t=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];o=0;while(1){if((o|0)==3)break;k[e+(o<<2)>>2]=0;o=o+1|0}O5a(e);r=c;return}else if((n|0)==17){o=Hc()|0;s=o;t=M}while(0);O5a(e);Sc(s|0)}function Z8a(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c;e=c+8|0;H5a(e,20,0);if(!(i[e>>0]&1))f=1;else f=(k[e>>2]&-2)+-1|0;x=0;fb(419,e|0,f|0,0);f=x;x=0;if(f&1){f=Hc()|0;O5a(e);Sc(f|0)}f=i[e>>0]|0;g=e+4|0;h=e+8|0;j=f;l=(f&1)==0?(f&255)>>>1:k[g>>2]|0;while(1){f=(j&1)==0?g:k[h>>2]|0;x=0;p[d>>3]=b;m=db(84,f|0,l+1|0,71440,d|0)|0;f=x;x=0;if(f&1){n=17;break}if((m|0)>-1)if(m>>>0>l>>>0)o=m;else{q=m;n=12;break}else o=l<<1|1;x=0;fb(419,e|0,o|0,0);m=x;x=0;if(m&1){n=17;break}j=i[e>>0]|0;l=o}do if((n|0)==12){x=0;fb(419,e|0,q|0,0);o=x;x=0;if(o&1){o=Hc()|0;s=o;t=M;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];o=0;while(1){if((o|0)==3)break;k[e+(o<<2)>>2]=0;o=o+1|0}O5a(e);r=c;return}else if((n|0)==17){o=Hc()|0;s=o;t=M}while(0);O5a(e);Sc(s|0)}function _8a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=b;e=c-d|0;if(e>>>0>4294967279)GBa(a);if(e>>>0<11){i[a>>0]=e<<1;f=a+1|0}else{g=e+16&-16;h=KBa(g)|0;k[a+8>>2]=h;k[a>>2]=g|1;k[a+4>>2]=e;f=h}h=c-d|0;d=b;b=f;while(1){if((d|0)==(c|0))break;i[b>>0]=i[d>>0]|0;d=d+1|0;b=b+1|0}i[f+h>>0]=0;return}function $8a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;f=r;r=r+16|0;g=f+4|0;h=f;j=k[c>>2]|0;l=d;d=k[b>>2]|0;while(1){m=(l|0)==(e|0);if((d|0)==(j|0)){n=3;break}if(m){o=d;n=6;break}i[d>>0]=i[l>>0]|0;p=d+1|0;k[b>>2]=p;l=l+1|0;d=p}if((n|0)==3){if(!m){k[h>>2]=d;k[g>>2]=k[h>>2];Fga(a,g,l,e)|0}}else if((n|0)==6){n=o;if(!(i[a>>0]&1))q=a+1|0;else q=k[a+8>>2]|0;i4a(a,n-q|0,(k[c>>2]|0)-n|0)|0}r=f;return a|0}function a9a(a,b,c){a=a|0;b=b|0;c=c|0;return _Ma(a,l[c>>0]|0,b)|0}function b9a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=b;e=c-d|0;f=e>>2;if(f>>>0>1073741807)GBa(a);if(f>>>0<2){i[a>>0]=e>>>1;g=a+4|0}else{e=f+4&-4;h=KBa(e<<2)|0;k[a+8>>2]=h;k[a>>2]=e|1;k[a+4>>2]=f;g=h}h=(c-d|0)>>>2;d=b;b=g;while(1){if((d|0)==(c|0))break;k[b>>2]=k[d>>2];d=d+4|0;b=b+4|0}k[g+(h<<2)>>2]=0;return}function c9a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=i[a>>0]|0;if(!(e&1)){f=(k[b>>2]|0)-(a+4)|0;g=(e&255)>>>1;h=1;j=e}else{e=k[a>>2]|0;f=(k[b>>2]|0)-(k[a+8>>2]|0)|0;g=k[a+4>>2]|0;h=(e&-2)+-1|0;j=e&255}e=f>>2;f=d-c>>2;if(!f)l=j;else{if((h-g|0)>>>0>=f>>>0){if(!(j&1))m=a+4|0;else m=k[a+8>>2]|0;if((g|0)==(e|0))n=m;else{j=m+(e<<2)|0;uMa(j+(f<<2)|0,j,g-e|0)|0;n=m}}else{W6a(a,h,g+f-h|0,g,e,0,f);n=k[a+8>>2]|0}h=g+f|0;if(!(i[a>>0]&1))i[a>>0]=h<<1;else k[a+4>>2]=h;k[n+(h<<2)>>2]=0;h=c;c=n+(e<<2)|0;while(1){if((h|0)==(d|0))break;k[c>>2]=k[h>>2];h=h+4|0;c=c+4|0}l=i[a>>0]|0}if(!(l&1))o=a+4|0;else o=k[a+8>>2]|0;return o+(e<<2)|0}function d9a(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;f=r;r=r+16|0;g=f+4|0;h=f;j=k[c>>2]|0;c=j;l=d;d=k[b>>2]|0;while(1){m=(l|0)==(e|0);if((d|0)==(j|0)){n=3;break}if(m){o=d;n=6;break}k[d>>2]=k[l>>2];p=d+4|0;k[b>>2]=p;l=l+4|0;d=p}if((n|0)==3){if(!m){k[h>>2]=d;k[g>>2]=k[h>>2];c9a(a,g,l,e)|0}}else if((n|0)==6){n=o;if(!(i[a>>0]&1))q=a+4|0;else q=k[a+8>>2]|0;m7a(a,n-q>>2,c-n>>2)|0}r=f;return a|0}function e9a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=r;r=r+16|0;f=e;g=(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0;b=HSa()|0;h=k[b>>2]|0;k[b>>2]=0;j=lOa(g,f,d)|0;d=k[b>>2]|0;k[b>>2]=h;if((d|0)==34)g9a(a);d=k[f>>2]|0;if((d|0)==(g|0))h9a(a);if(c)k[c>>2]=d-g;r=e;return j|0}function f9a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=r;r=r+16|0;f=e;g=(i[b>>0]&1)==0?b+4|0:k[b+8>>2]|0;b=HSa()|0;h=k[b>>2]|0;k[b>>2]=0;j=cOa(g,f,d)|0;d=k[b>>2]|0;k[b>>2]=h;if((d|0)==34)g9a(a);if((k[f>>2]|0)==(g|0))h9a(a);if(c)k[c>>2]=(k[f>>2]|0)-g>>2;r=e;return j|0}function g9a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;i9a(c,a,326255);a=Rd(8)|0;x=0;xa(936,a|0,c|0);b=x;x=0;if(b&1){b=Hc()|0;d=M;Fc(a|0);e=d;f=b}else{k[a>>2]=47544;x=0;fb(149,a|0,9024,933);x=0;a=Hc()|0;e=M;f=a}K2a(c);Sc(f|0)}function h9a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;i9a(c,a,326239);a=Rd(8)|0;x=0;xa(936,a|0,c|0);b=x;x=0;if(b&1){b=Hc()|0;d=M;Fc(a|0);e=d;f=b}else{k[a>>2]=47504;x=0;fb(149,a|0,8992,933);x=0;a=Hc()|0;e=M;f=a}K2a(c);Sc(f|0)}function i9a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=0;while(1){if((d|0)==3)break;k[a+(d<<2)>>2]=0;d=d+1|0}d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=RLa(c)|0;x=0;nb(83,a|0,(e?b+1|0:k[b+8>>2]|0)|0,f|0,f+d|0);f=x;x=0;if(!(f&1)?(x=0,Fa(88,a|0,c|0,d|0)|0,d=x,x=0,!(d&1)):0)return;d=Hc()|0;K2a(a);Sc(d|0)}function j9a(a){a=a|0;if(!(k[a>>2]|0))return;else fCa()}function k9a(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+8|0;d=b;e=te(k[a>>2]|0,0)|0;if(!e){k[a>>2]=0;r=b;return}b=Rd(16)|0;a=Y0a()|0;k[d>>2]=e;k[d+4>>2]=a;x=0;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];fb(418,b|0,c|0,326270);c=x;x=0;if(c&1){c=Hc()|0;Fc(b|0);Sc(c|0)}else Gf(b|0,17408,1292)}function l9a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b+8|0;d=b;e=k[a>>2]|0;if(e){f=oc(e|0)|0;if(!f){k[a>>2]=0;r=b;return}else g=f}else g=22;f=Rd(16)|0;b=Y0a()|0;k[d>>2]=g;k[d+4>>2]=b;x=0;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];fb(418,f|0,c|0,326290);c=x;x=0;if(c&1){c=Hc()|0;Fc(f|0);Sc(c|0)}else Gf(f|0,17408,1292)}function m9a(){var a=0,b=0;x=0;a=Ba(575,84)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else return ((a|0)<0?0:a)|0;return 0}function n9a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;d=a;a=k[d>>2]|0;e=k[d+4>>2]|0;if((e|0)>0|(e|0)==0&a>>>0>0){d=Oyb(a|0,e|0,1e9,0)|0;f=(e|0)<499999999|(e|0)==499999999&a>>>0<3294967296;g=Qyb(d|0,M|0,-1e9,-1)|0;h=Hyb(a|0,e|0,g|0,M|0)|0;k[c>>2]=f?d:2147483647;k[c+4>>2]=f?h:999999999;do{if((Xc(c|0,c|0)|0)!=-1)break;h=HSa()|0}while((k[h>>2]|0)==4)}r=b;return}function o9a(){var a=0;do if((i[17520]|0)==0?(Bb(17520)|0)!=0:0){x=0;va(1539,71456);a=x;x=0;if(a&1){a=Hc()|0;Cd(17520);Sc(a|0)}else{Kc(17520);break}}while(0);return 71456}function p9a(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+12|0;c=k[a+16>>2]|0;d=k[b>>2]|0;while(1){if((d|0)==(c|0))break;V1a(k[d+4>>2]|0);N_a(k[d>>2]|0);d=d+8|0}d=k[a+4>>2]|0;c=k[a>>2]|0;while(1){if((c|0)==(d|0)){e=6;break}x=0;va(1540,k[c>>2]|0);f=x;x=0;if(f&1){e=9;break}f0a(k[c>>2]|0)|0;c=c+4|0}if((e|0)==6){x9a(b);y9a(a);return}else if((e|0)==9){e=Hc(0)|0;x9a(b);y9a(a);Fg(e)}}function q9a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d;k[e>>2]=b;k[e+4>>2]=c;c=a+16|0;b=k[c>>2]|0;if(b>>>0<(k[a+20>>2]|0)>>>0){f=e;g=k[f+4>>2]|0;h=b;k[h>>2]=k[f>>2];k[h+4>>2]=g;k[c>>2]=(k[c>>2]|0)+8}else z9a(a+12|0,e);r=d;return}function r9a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;k[d>>2]=b;e=a+4|0;f=k[e>>2]|0;if((f|0)==(k[a+8>>2]|0))A9a(a,d);else{k[f>>2]=b;k[e>>2]=(k[e>>2]|0)+4}e0a(b);r=c;return}function s9a(a){a=a|0;var b=0;b=KBa(24)|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;k[a>>2]=b;return}function t9a(a){a=a|0;var b=0;b=k[a>>2]|0;if(b){p9a(b);OBa(b)}return}function u9a(a,b,c){a=a|0;b=b|0;c=c|0;q9a(k[a>>2]|0,b,c);return}function v9a(a,b){a=a|0;b=b|0;r9a(k[a>>2]|0,b);return}function w9a(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+8|0;d=b;e=wb(a|0,1541)|0;if(!e){r=b;return}b=Rd(16)|0;a=Y0a()|0;k[d>>2]=e;k[d+4>>2]=a;x=0;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];fb(418,b|0,c|0,326312);c=x;x=0;if(c&1){c=Hc()|0;Fc(b|0);Sc(c|0)}else Gf(b|0,17408,1292)}function x9a(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;if(b){c=a+4|0;a=k[c>>2]|0;while(1){if((a|0)==(b|0))break;d=a+-8|0;k[c>>2]=d;a=d}OBa(b)}return}function y9a(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;if(b){c=a+4|0;a=k[c>>2]|0;while(1){if((a|0)==(b|0))break;d=a+-4|0;k[c>>2]=d;a=d}OBa(b)}return}function z9a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;e=a+4|0;f=k[a>>2]|0;g=((k[e>>2]|0)-f>>3)+1|0;if(g>>>0>536870911){HBa(a);h=k[a>>2]|0}else h=f;f=(k[a+8>>2]|0)-h|0;if(f>>3>>>0<268435455){i=f>>2;j=i>>>0>>0?g:i}else j=536870911;E9a(d,j,(k[e>>2]|0)-h>>3,a+8|0);h=d+8|0;e=k[h>>2]|0;j=b;b=k[j+4>>2]|0;i=e;k[i>>2]=k[j>>2];k[i+4>>2]=b;k[h>>2]=e+8;F9a(a,d);G9a(d);r=c;return}function A9a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;e=a+4|0;f=k[a>>2]|0;g=((k[e>>2]|0)-f>>2)+1|0;if(g>>>0>1073741823){HBa(a);h=k[a>>2]|0}else h=f;f=(k[a+8>>2]|0)-h|0;if(f>>2>>>0<536870911){i=f>>1;j=i>>>0>>0?g:i}else j=1073741823;B9a(d,j,(k[e>>2]|0)-h>>2,a+8|0);h=d+8|0;e=k[h>>2]|0;k[e>>2]=k[b>>2];k[h>>2]=e+4;C9a(a,d);D9a(d);r=c;return}function B9a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;k[a+12>>2]=0;k[a+16>>2]=d;if(!b)e=0;else e=KBa(b<<2)|0;k[a>>2]=e;d=e+(c<<2)|0;k[a+8>>2]=d;k[a+4>>2]=d;k[a+12>>2]=e+(b<<2);return}function C9a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;d=a+4|0;e=b+4|0;f=(k[d>>2]|0)-c|0;g=(k[e>>2]|0)+(0-(f>>2)<<2)|0;k[e>>2]=g;Dyb(g|0,c|0,f|0)|0;f=k[a>>2]|0;k[a>>2]=k[e>>2];k[e>>2]=f;f=b+8|0;c=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=c;c=a+8|0;a=b+12|0;f=k[c>>2]|0;k[c>>2]=k[a>>2];k[a>>2]=f;k[b>>2]=k[e>>2];return}function D9a(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;c=a+8|0;d=k[c>>2]|0;while(1){if((d|0)==(b|0))break;e=d+-4|0;k[c>>2]=e;d=e}d=k[a>>2]|0;if(d)OBa(d);return}function E9a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;k[a+12>>2]=0;k[a+16>>2]=d;if(!b)e=0;else e=KBa(b<<3)|0;k[a>>2]=e;d=e+(c<<3)|0;k[a+8>>2]=d;k[a+4>>2]=d;k[a+12>>2]=e+(b<<3);return}function F9a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;d=a+4|0;e=b+4|0;f=(k[d>>2]|0)-c|0;g=(k[e>>2]|0)+(0-(f>>3)<<3)|0;k[e>>2]=g;Dyb(g|0,c|0,f|0)|0;f=k[a>>2]|0;k[a>>2]=k[e>>2];k[e>>2]=f;f=b+8|0;c=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=c;c=a+8|0;a=b+12|0;f=k[c>>2]|0;k[c>>2]=k[a>>2];k[a>>2]=f;k[b>>2]=k[e>>2];return}function G9a(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;c=a+8|0;d=k[c>>2]|0;while(1){if((d|0)==(b|0))break;e=d+-8|0;k[c>>2]=e;d=e}d=k[a>>2]|0;if(d)OBa(d);return}function H9a(a){a=a|0;if(a){t9a(a);OBa(a)}return}function I9a(a,b){a=a|0;b=b|0;k[a>>2]=0;k[a+4>>2]=0;J9a(a,b,0);return}function J9a(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=k[a>>2]|0;if(d){e=a+4|0;f=k[e>>2]|0;while(1){if((f|0)==(d|0))break;g=f+-4|0;k[e>>2]=g;f=g}OBa(d);k[e>>2]=0;k[a>>2]=0}a:do if(b){e=KBa(b<<2)|0;d=a+4|0;k[d>>2]=e;k[a>>2]=e;f=b;g=e;while(1){if(!f)break a;k[g>>2]=c;e=g+4|0;k[d>>2]=e;f=f+-1|0;g=e}}while(0);return}function K9a(a){a=a|0;x=0;fb(420,a|0,0,0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function L9a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+16|0;d=c;e=a+4|0;I9a(d,(k[e>>2]|0)-(k[a>>2]|0)>>2);f=k[e>>2]|0;e=k[a>>2]|0;g=f-e>>2;h=e;i=0;j=(f|0)!=(e|0)&1;while(1){if((i|0)==(g|0)){l=j;break}e=ia(k[h+(i<<2)>>2]|0,j)|0;i=i+1|0;j=e}j=a+16|0;x=0;fb(420,j|0,l|0,0);l=x;x=0;if(l&1){l=Hc()|0;K9a(d);Sc(l|0)}l=k[j>>2]|0;j=l;a:do if((k[a+20>>2]|0)!=(l|0)){k[j>>2]=b;i=k[d+4>>2]|0;h=k[d>>2]|0;g=i-h>>2;e=h;f=k[a>>2]|0;m=a+8|0;n=i-h>>2;h=0;b:while(1){i=g;while(1){o=i+-1|0;p=e+(o<<2)|0;q=(k[p>>2]|0)+1|0;k[p>>2]=q;if(q>>>0<(k[f+(o<<2)>>2]|0)>>>0){s=i;t=o;break}if(!o)break a;k[p>>2]=0;i=o}i=h+1|0;o=k[m>>2]|0;k[j+(i<<2)>>2]=(k[o+(t<<2)>>2]|0)+(k[j+(h<<2)>>2]|0);p=j+(i<<2)|0;q=s;while(1){if((q|0)==(n|0)){h=i;continue b}u=ia((k[f+(q<<2)>>2]|0)+-1|0,k[o+(q<<2)>>2]|0)|0;k[p>>2]=(k[p>>2]|0)-u;q=q+1|0}}}while(0);K9a(d);r=c;return}function M9a(){var a=0,b=0,c=0,d=0;a=r;r=r+16|0;b=a;ud(b|0,0)|0;c=k[b>>2]|0;d=k[b+4>>2]|0;b=Qyb(c|0,((c|0)<0)<<31>>31|0,1e6,0)|0;c=Hyb(b|0,M|0,d|0,((d|0)<0)<<31>>31|0)|0;r=a;return c|0}function N9a(a){a=a|0;var b=0;b=a;a=Oyb(k[b>>2]|0,k[b+4>>2]|0,1e6,0)|0;return a|0}function O9a(a){a=a|0;var b=0;b=Qyb(a|0,((a|0)<0)<<31>>31|0,1e6,0)|0;return b|0}function P9a(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0;a=r;r=r+16|0;b=a;x=0;c=Ta(499,1,b|0)|0;d=x;x=0;do if(!(d&1)){if((c|0)!=0?(e=HSa()|0,x=0,xa(935,k[e>>2]|0,326356),e=x,x=0,e&1):0)break;e=k[b>>2]|0;f=k[b+4>>2]|0;g=Qyb(e|0,((e|0)<0)<<31>>31|0,1e9,0)|0;e=Hyb(g|0,M|0,f|0,((f|0)<0)<<31>>31|0)|0;r=a;return e|0}while(0);a=Hc(0)|0;Fg(a);return 0}function Q9a(a){a=a|0;ef(k[a>>2]|0);return}function R9a(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;k[a>>2]=c;_d(c|0);return}function S9a(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;if((k[a>>2]|0)!=(c|0)){_d(c|0);ef(k[a>>2]|0);k[a>>2]=k[b>>2]}return a|0}function T9a(a){a=a|0;var b=0;k[a>>2]=71468;b=le()|0;k[a+4>>2]=b;return}function U9a(){return le()|0}function V9a(a){a=a|0;k[a>>2]=71468;ef(k[a+4>>2]|0);return}function W9a(a){a=a|0;V9a(a);OBa(a);return}function X9a(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;b=a+4|0;a=(k[b>>2]|0)==0;ef(0);if(a)fCa();else{a=k[b>>2]|0;k[c>>2]=a;_d(a|0);x=0;va(1534,c|0);x=0;c=Hc()|0;ef(a|0);Sc(c|0)}}function Y9a(a){a=a|0;mf(k[a>>2]|0);fCa()}function Z9a(a){a=a|0;return (k[a+16>>2]&5|0)==0|0}function _9a(a){a=a|0;return (k[a+16>>2]&5|0)!=0|0}function $9a(a){a=a|0;return (k[a+16>>2]&5|0)!=0|0}function aab(a){a=a|0;return k[a+16>>2]|0}function bab(a,b){a=a|0;b=b|0;cab(a,b);return}function cab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=(k[a+24>>2]|0)==0;k[a+16>>2]=e&1|b;if(!((e&1|b)&k[a+20>>2])){r=c;return}c=Rd(16)|0;vgb()|0;k[d>>2]=1;k[d+4>>2]=72184;x=0;fb(421,c|0,326907,d|0);d=x;x=0;if(d&1){d=Hc()|0;Fc(c|0);Sc(d|0)}else Gf(c|0,17536,1315)}function dab(a,b){a=a|0;b=b|0;cab(a,k[a+16>>2]|b);return}function eab(a){a=a|0;return (k[a+16>>2]|0)==0|0}function fab(a){a=a|0;return (k[a+16>>2]&2|0)!=0|0}function gab(a){a=a|0;return (k[a+16>>2]&1|0)!=0|0}function hab(a){a=a|0;return k[a+20>>2]|0}function iab(a,b){a=a|0;b=b|0;k[a+20>>2]=b;cab(a,k[a+16>>2]|0);return}function jab(a,b){a=a|0;b=b|0;k[a>>2]=71484;Eab(a,b);k[a+72>>2]=0;k[a+76>>2]=-1;return}function kab(a,b){a=a|0;b=b|0;Eab(a,b);k[a+72>>2]=0;k[a+76>>2]=-1;return}function lab(a){a=a|0;var b=0;k[a>>2]=72060;x=0;xa(946,a|0,0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else{$pb(a+28|0);yYa(k[a+32>>2]|0);yYa(k[a+36>>2]|0);yYa(k[a+48>>2]|0);yYa(k[a+60>>2]|0);return}}function mab(a){a=a|0;lab(a);return}function nab(a){a=a|0;lab(a);OBa(a);return}function oab(a){a=a|0;return k[a+72>>2]|0}function pab(a,b){a=a|0;b=b|0;var c=0;c=a+72|0;a=k[c>>2]|0;k[c>>2]=b;return a|0}function qab(a){a=a|0;return k[a+24>>2]|0}function rab(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+24|0;d=k[c>>2]|0;k[c>>2]=b;cab(a,0);return d|0}function sab(a,b){a=a|0;b=b|0;if((a|0)!=(b|0)){tab(a,0);uab(a,b);k[a+72>>2]=k[b+72>>2];k[a+76>>2]=k[b+76>>2];tab(a,2);k[a+20>>2]=k[b+20>>2];cab(a,k[a+16>>2]|0)}return a|0}function tab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+32|0;d=a+36|0;e=k[a+40>>2]|0;while(1){if(!e)break;f=e+-1|0;jg[k[(k[c>>2]|0)+(f<<2)>>2]&511](b,a,k[(k[d>>2]|0)+(f<<2)>>2]|0);e=f}return}function uab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=a+44|0;d=b+40|0;e=k[d>>2]|0;do if((k[c>>2]|0)>>>0>>0){f=e<<2;g=xYa(f)|0;h=g;if(!g){g=Rd(4)|0;SBa(g);x=0;fb(149,g|0,8888,1238);x=0;i=h;j=0;l=0;m=4;break}g=xYa(f)|0;f=g;if(!g){g=Rd(4)|0;SBa(g);x=0;fb(149,g|0,8888,1238);x=0;i=h;j=f;l=0;m=4}else{n=h;o=f;m=14}}else{n=0;o=0;m=14}while(0);do if((m|0)==14){e=a+56|0;f=b+52|0;h=k[f>>2]|0;if((k[e>>2]|0)>>>0>>0){g=xYa(h<<2)|0;h=g;if(!g){g=Rd(4)|0;SBa(g);x=0;fb(149,g|0,8888,1238);x=0;i=n;j=o;l=h;m=4;break}else p=h}else p=0;h=a+68|0;g=b+64|0;q=k[g>>2]|0;if((k[h>>2]|0)>>>0>>0){r=xYa(q<<2)|0;if(!r){q=Rd(4)|0;SBa(q);x=0;fb(149,q|0,8888,1238);x=0;q=Hc()|0;s=p;t=o;u=n;v=q;w=M;break}else y=r}else y=0;k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];k[a+12>>2]=k[b+12>>2];aqb(a+28|0,b+28|0)|0;r=a+32|0;if((k[c>>2]|0)>>>0<(k[d>>2]|0)>>>0){yYa(k[r>>2]|0);k[r>>2]=n;q=a+36|0;yYa(k[q>>2]|0);k[q>>2]=o;k[c>>2]=k[d>>2];z=q;A=0;B=0}else{z=a+36|0;A=o;B=n}q=a+40|0;C=b+32|0;D=b+36|0;E=0;while(1){k[q>>2]=E;if(E>>>0>=(k[d>>2]|0)>>>0)break;k[(k[r>>2]|0)+(E<<2)>>2]=k[(k[C>>2]|0)+(E<<2)>>2];k[(k[z>>2]|0)+(E<<2)>>2]=k[(k[D>>2]|0)+(E<<2)>>2];E=(k[q>>2]|0)+1|0}q=a+48|0;if((k[e>>2]|0)>>>0<(k[f>>2]|0)>>>0){yYa(k[q>>2]|0);k[q>>2]=p;k[e>>2]=k[f>>2];F=0}else F=p;E=a+52|0;D=k[b+48>>2]|0;C=0;while(1){k[E>>2]=C;if(C>>>0>=(k[f>>2]|0)>>>0)break;k[(k[q>>2]|0)+(C<<2)>>2]=k[D+(C<<2)>>2];C=C+1|0}C=a+60|0;if((k[h>>2]|0)>>>0<(k[g>>2]|0)>>>0){yYa(k[C>>2]|0);k[C>>2]=y;k[h>>2]=k[g>>2];G=0}else G=y;D=a+64|0;q=b+60|0;f=0;while(1){k[D>>2]=f;if(f>>>0>=(k[g>>2]|0)>>>0)break;k[(k[C>>2]|0)+(f<<2)>>2]=k[(k[q>>2]|0)+(f<<2)>>2];f=f+1|0}if(G)yYa(G);if(F)yYa(F);if(A)yYa(A);if(B)yYa(B);return}while(0);if((m|0)==4){m=Hc()|0;s=l;t=j;u=i;v=m;w=M}if(s)yYa(s);if(t)yYa(t);if(u)yYa(u);Sc(v|0)}function vab(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;d=a+76|0;e=k[d>>2]|0;do if((e|0)==-1){f=zab(a)|0;k[c>>2]=f;x=0;f=Ta(495,c|0,74148)|0;g=x;x=0;if(!(g&1)?(x=0,g=Ta(k[(k[f>>2]|0)+28>>2]|0,f|0,32)|0,f=x,x=0,!(f&1)):0){$pb(c);f=g<<24>>24;k[d>>2]=f;h=f;break}f=Hc()|0;$pb(c);Sc(f|0)}else h=e;while(0);r=b;return h&255|0}function wab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=zab(a)|0;k[d>>2]=e;x=0;e=Ta(495,d|0,74148)|0;a=x;x=0;if(!(a&1)?(x=0,a=Ta(k[(k[e>>2]|0)+28>>2]|0,e|0,b|0)|0,b=x,x=0,!(b&1)):0){$pb(d);r=c;return a|0}a=Hc()|0;$pb(d);Sc(a|0);return 0}function xab(a,b){a=a|0;b=b|0;var c=0;c=a+76|0;a=k[c>>2]&255;k[c>>2]=b<<24>>24;return a|0}function yab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+16|0;d=c+12|0;e=c+8|0;f=c+4|0;g=c;h=zab(a)|0;k[e>>2]=h;x=0;h=Ta(636,a|0,b|0)|0;i=x;x=0;do if(!(i&1)){k[f>>2]=h;$pb(f);j=k[a+24>>2]|0;if(j){x=0;xa(k[(k[j>>2]|0)+8>>2]|0,j|0,b|0);l=x;x=0;if(l&1)break;l=j+4|0;_pb(d,l);aqb(l,b)|0;k[g>>2]=k[d>>2];$pb(g)}r=c;return k[e>>2]|0}while(0);c=Hc()|0;$pb(e);Sc(c|0);return 0}function zab(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;_pb(c,a+28|0);r=b;return k[c>>2]|0}function Aab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=a+28|0;_pb(d,e);aqb(e,b)|0;x=0;xa(946,a|0,1);a=x;x=0;if(a&1){a=Hc()|0;$pb(d);Sc(a|0)}else{r=c;return k[d>>2]|0}return 0}function Bab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;Tf[k[(k[a>>2]|0)+8>>2]&2047](a,b);e=a+4|0;_pb(d,e);aqb(e,b)|0;r=c;return k[d>>2]|0}function Cab(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;f=zab(a)|0;k[e>>2]=f;x=0;f=Ta(495,e|0,74148)|0;a=x;x=0;if(!(a&1)?(x=0,a=Fa(k[(k[f>>2]|0)+36>>2]|0,f|0,b|0,c|0)|0,c=x,x=0,!(c&1)):0){$pb(e);r=d;return a|0}a=Hc()|0;$pb(e);Sc(a|0);return 0}function Dab(a){a=a|0;k[a>>2]=71484;return}function Eab(a,b){a=a|0;b=b|0;var c=0;k[a+24>>2]=b;k[a+16>>2]=(b|0)==0&1;k[a+20>>2]=0;k[a+4>>2]=4098;k[a+12>>2]=0;k[a+8>>2]=6;b=a+28|0;c=a+32|0;a=c+40|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(a|0));Zpb(b);return}function Fab(a,b){a=a|0;b=b|0;var c=0;Gab(a,b);c=b+72|0;k[a+72>>2]=k[c>>2];k[c>>2]=0;k[a+76>>2]=k[b+76>>2];return}function Gab(a,b){a=a|0;b=b|0;var c=0;k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];k[a+12>>2]=k[b+12>>2];k[a+16>>2]=k[b+16>>2];k[a+20>>2]=k[b+20>>2];k[a+24>>2]=0;_pb(a+28|0,b+28|0);c=b+32|0;k[a+32>>2]=k[c>>2];k[c>>2]=0;c=b+36|0;k[a+36>>2]=k[c>>2];k[c>>2]=0;c=b+40|0;k[a+40>>2]=k[c>>2];k[c>>2]=0;c=b+44|0;k[a+44>>2]=k[c>>2];k[c>>2]=0;c=b+48|0;k[a+48>>2]=k[c>>2];k[c>>2]=0;c=b+52|0;k[a+52>>2]=k[c>>2];k[c>>2]=0;c=b+56|0;k[a+56>>2]=k[c>>2];k[c>>2]=0;c=b+60|0;k[a+60>>2]=k[c>>2];k[c>>2]=0;c=b+64|0;k[a+64>>2]=k[c>>2];k[c>>2]=0;c=b+68|0;k[a+68>>2]=k[c>>2];k[c>>2]=0;return}function Hab(a,b){a=a|0;b=b|0;var c=0;Gab(a,b);c=b+72|0;k[a+72>>2]=k[c>>2];k[c>>2]=0;k[a+76>>2]=k[b+76>>2];return}function Iab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;Jab(a,b);c=a+72|0;d=b+72|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+76|0;a=b+76|0;b=k[e>>2]|0;k[e>>2]=k[a>>2];k[a>>2]=b;return}function Jab(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c;e=a+4|0;f=b+4|0;g=k[e>>2]|0;k[e>>2]=k[f>>2];k[f>>2]=g;g=a+8|0;f=b+8|0;e=k[g>>2]|0;k[g>>2]=k[f>>2];k[f>>2]=e;e=a+12|0;f=b+12|0;g=k[e>>2]|0;k[e>>2]=k[f>>2];k[f>>2]=g;g=a+16|0;f=b+16|0;e=k[g>>2]|0;k[g>>2]=k[f>>2];k[f>>2]=e;e=a+20|0;f=b+20|0;g=k[e>>2]|0;k[e>>2]=k[f>>2];k[f>>2]=g;g=a+28|0;f=b+28|0;_pb(d,g);aqb(g,f)|0;aqb(f,d)|0;$pb(d);d=a+32|0;f=b+32|0;g=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=g;g=a+36|0;f=b+36|0;d=k[g>>2]|0;k[g>>2]=k[f>>2];k[f>>2]=d;d=a+40|0;f=b+40|0;g=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=g;g=a+44|0;f=b+44|0;d=k[g>>2]|0;k[g>>2]=k[f>>2];k[f>>2]=d;d=a+48|0;f=b+48|0;g=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=g;g=a+52|0;f=b+52|0;d=k[g>>2]|0;k[g>>2]=k[f>>2];k[f>>2]=d;d=a+56|0;f=b+56|0;g=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=g;g=a+60|0;f=b+60|0;d=k[g>>2]|0;k[g>>2]=k[f>>2];k[f>>2]=d;d=a+64|0;f=b+64|0;g=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=g;g=a+68|0;a=b+68|0;b=k[g>>2]|0;k[g>>2]=k[a>>2];k[a>>2]=b;r=c;return}function Kab(a,b){a=a|0;b=b|0;k[a+24>>2]=b;return}function Lab(a){a=a|0;return (k[a+16>>2]&5|0)==0|0}function Mab(a){a=a|0;return (k[a+16>>2]&5|0)!=0|0}function Nab(a){a=a|0;return (k[a+16>>2]&5|0)!=0|0}function Oab(a){a=a|0;return k[a+16>>2]|0}function Pab(a,b){a=a|0;b=b|0;cab(a,b);return}function Qab(a,b){a=a|0;b=b|0;cab(a,k[a+16>>2]|b);return}function Rab(a){a=a|0;return (k[a+16>>2]|0)==0|0}function Sab(a){a=a|0;return (k[a+16>>2]&2|0)!=0|0}function Tab(a){a=a|0;return (k[a+16>>2]&1|0)!=0|0}function Uab(a){a=a|0;return k[a+20>>2]|0}function Vab(a,b){a=a|0;b=b|0;k[a+20>>2]=b;cab(a,k[a+16>>2]|0);return}function Wab(a,b){a=a|0;b=b|0;k[a>>2]=71500;Eab(a,b);k[a+72>>2]=0;k[a+76>>2]=-1;return}function Xab(a,b){a=a|0;b=b|0;Eab(a,b);k[a+72>>2]=0;k[a+76>>2]=-1;return}function Yab(a){a=a|0;lab(a);return}function Zab(a){a=a|0;lab(a);OBa(a);return}function _ab(a){a=a|0;return k[a+72>>2]|0}function $ab(a,b){a=a|0;b=b|0;var c=0;c=a+72|0;a=k[c>>2]|0;k[c>>2]=b;return a|0}function abb(a){a=a|0;return k[a+24>>2]|0}function bbb(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+24|0;d=k[c>>2]|0;k[c>>2]=b;cab(a,0);return d|0}function cbb(a,b){a=a|0;b=b|0;if((a|0)!=(b|0)){tab(a,0);uab(a,b);k[a+72>>2]=k[b+72>>2];k[a+76>>2]=k[b+76>>2];tab(a,2);k[a+20>>2]=k[b+20>>2];cab(a,k[a+16>>2]|0)}return a|0}function dbb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;d=a+76|0;e=k[d>>2]|0;do if((e|0)==-1){f=zab(a)|0;k[c>>2]=f;x=0;f=Ta(495,c|0,74140)|0;g=x;x=0;if(!(g&1)?(x=0,g=Ta(k[(k[f>>2]|0)+44>>2]|0,f|0,32)|0,f=x,x=0,!(f&1)):0){$pb(c);k[d>>2]=g;h=g;break}g=Hc()|0;$pb(c);Sc(g|0)}else h=e;while(0);r=b;return h|0}function ebb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=zab(a)|0;k[d>>2]=e;x=0;e=Ta(495,d|0,74140)|0;a=x;x=0;if(!(a&1)?(x=0,a=Ta(k[(k[e>>2]|0)+44>>2]|0,e|0,b|0)|0,b=x,x=0,!(b&1)):0){$pb(d);r=c;return a|0}a=Hc()|0;$pb(d);Sc(a|0);return 0}function fbb(a,b){a=a|0;b=b|0;var c=0;c=a+76|0;a=k[c>>2]|0;k[c>>2]=b;return a|0}function gbb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+16|0;d=c+12|0;e=c+8|0;f=c+4|0;g=c;h=zab(a)|0;k[e>>2]=h;x=0;h=Ta(636,a|0,b|0)|0;i=x;x=0;do if(!(i&1)){k[f>>2]=h;$pb(f);j=k[a+24>>2]|0;if(j){x=0;xa(k[(k[j>>2]|0)+8>>2]|0,j|0,b|0);l=x;x=0;if(l&1)break;l=j+4|0;_pb(d,l);aqb(l,b)|0;k[g>>2]=k[d>>2];$pb(g)}r=c;return k[e>>2]|0}while(0);c=Hc()|0;$pb(e);Sc(c|0);return 0}function hbb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;Tf[k[(k[a>>2]|0)+8>>2]&2047](a,b);e=a+4|0;_pb(d,e);aqb(e,b)|0;r=c;return k[d>>2]|0}function ibb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;f=zab(a)|0;k[e>>2]=f;x=0;f=Ta(495,e|0,74140)|0;a=x;x=0;if(!(a&1)?(x=0,a=Fa(k[(k[f>>2]|0)+52>>2]|0,f|0,b|0,c|0)|0,c=x,x=0,!(c&1)):0){$pb(e);r=d;return a|0}a=Hc()|0;$pb(e);Sc(a|0);return 0}function jbb(a){a=a|0;k[a>>2]=71500;return}function kbb(a,b){a=a|0;b=b|0;var c=0;Gab(a,b);c=b+72|0;k[a+72>>2]=k[c>>2];k[c>>2]=0;k[a+76>>2]=k[b+76>>2];return}function lbb(a,b){a=a|0;b=b|0;var c=0;Gab(a,b);c=b+72|0;k[a+72>>2]=k[c>>2];k[c>>2]=0;k[a+76>>2]=k[b+76>>2];return}function mbb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;Jab(a,b);c=a+72|0;d=b+72|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+76|0;a=b+76|0;b=k[e>>2]|0;k[e>>2]=k[a>>2];k[a>>2]=b;return}function nbb(a,b){a=a|0;b=b|0;k[a+24>>2]=b;return}function obb(a){a=a|0;k[a>>2]=71516;$pb(a+4|0);return}function pbb(a){a=a|0;k[a>>2]=71516;$pb(a+4|0);OBa(a);return}function qbb(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;_pb(c,a+4|0);r=b;return k[c>>2]|0}function rbb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+12>>2]&255](a,b,c)|0}function sbb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;_f[k[(k[b>>2]|0)+16>>2]&127](a,b,c,d,e,f);return}function tbb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+16|0;f=e;g=k[(k[b>>2]|0)+20>>2]|0;k[f>>2]=k[c>>2];k[f+4>>2]=k[c+4>>2];k[f+8>>2]=k[c+8>>2];k[f+12>>2]=k[c+12>>2];ng[g&255](a,b,f,d);r=e;return}function ubb(a){a=a|0;return Vf[k[(k[a>>2]|0)+24>>2]&1023](a)|0}function vbb(a){a=a|0;var b=0,c=0,d=0;b=k[a+12>>2]|0;c=k[a+16>>2]|0;if(b>>>0>>0)d=c-b|0;else d=Vf[k[(k[a>>2]|0)+28>>2]&1023](a)|0;return d|0}function wbb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+12|0;c=k[b>>2]|0;d=a+16|0;e=k[d>>2]|0;if((c|0)==(e|0))if((Vf[k[(k[a>>2]|0)+40>>2]&1023](a)|0)==-1)f=-1;else{g=k[b>>2]|0;h=k[d>>2]|0;i=5}else{d=c+1|0;k[b>>2]=d;g=d;h=e;i=5}do if((i|0)==5)if((g|0)==(h|0)){f=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;break}else{f=l[g>>0]|0;break}while(0);return f|0}function xbb(a){a=a|0;var b=0,c=0,d=0;b=a+12|0;c=k[b>>2]|0;if((c|0)==(k[a+16>>2]|0))d=Vf[k[(k[a>>2]|0)+40>>2]&1023](a)|0;else{k[b>>2]=c+1;d=l[c>>0]|0}return d|0}function ybb(a){a=a|0;var b=0,c=0;b=k[a+12>>2]|0;if((b|0)==(k[a+16>>2]|0))c=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else c=l[b>>0]|0;return c|0}function zbb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+32>>2]&255](a,b,c)|0}function Abb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+12|0;d=k[c>>2]|0;if((k[a+8>>2]|0)!=(d|0)?(e=d+-1|0,(i[e>>0]|0)==b<<24>>24):0){k[c>>2]=e;f=l[e>>0]|0}else f=cg[k[(k[a>>2]|0)+44>>2]&1023](a,b&255)|0;return f|0}function Bbb(a){a=a|0;var b=0,c=0,d=0;b=a+12|0;c=k[b>>2]|0;if((k[a+8>>2]|0)==(c|0))d=cg[k[(k[a>>2]|0)+44>>2]&1023](a,-1)|0;else{a=c+-1|0;k[b>>2]=a;d=l[a>>0]|0}return d|0}function Cbb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+24|0;d=k[c>>2]|0;if((d|0)==(k[a+28>>2]|0))e=cg[k[(k[a>>2]|0)+52>>2]&1023](a,b&255)|0;else{k[c>>2]=d+1;i[d>>0]=b;e=b&255}return e|0}function Dbb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+48>>2]&255](a,b,c)|0}function Ebb(a){a=a|0;var b=0;k[a>>2]=71516;Zpb(a+4|0);b=a+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;return}function Fbb(a,b){a=a|0;b=b|0;k[a>>2]=71516;_pb(a+4|0,b+4|0);k[a+8>>2]=k[b+8>>2];k[a+12>>2]=k[b+12>>2];k[a+16>>2]=k[b+16>>2];k[a+20>>2]=k[b+20>>2];k[a+24>>2]=k[b+24>>2];k[a+28>>2]=k[b+28>>2];return}function Gbb(a,b){a=a|0;b=b|0;aqb(a+4|0,b+4|0)|0;k[a+8>>2]=k[b+8>>2];k[a+12>>2]=k[b+12>>2];k[a+16>>2]=k[b+16>>2];k[a+20>>2]=k[b+20>>2];k[a+24>>2]=k[b+24>>2];k[a+28>>2]=k[b+28>>2];return a|0}function Hbb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=a+4|0;f=b+4|0;_pb(d,e);aqb(e,f)|0;aqb(f,d)|0;$pb(d);d=a+8|0;f=b+8|0;e=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=e;e=a+12|0;f=b+12|0;d=k[e>>2]|0;k[e>>2]=k[f>>2];k[f>>2]=d;d=a+16|0;f=b+16|0;e=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=e;e=a+20|0;f=b+20|0;d=k[e>>2]|0;k[e>>2]=k[f>>2];k[f>>2]=d;d=a+24|0;f=b+24|0;e=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=e;e=a+28|0;a=b+28|0;b=k[e>>2]|0;k[e>>2]=k[a>>2];k[a>>2]=b;r=c;return}function Ibb(a){a=a|0;return k[a+8>>2]|0}function Jbb(a){a=a|0;return k[a+12>>2]|0}function Kbb(a){a=a|0;return k[a+16>>2]|0}function Lbb(a,b){a=a|0;b=b|0;var c=0;c=a+12|0;k[c>>2]=(k[c>>2]|0)+b;return}function Mbb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a+8>>2]=b;k[a+12>>2]=c;k[a+16>>2]=d;return}function Nbb(a){a=a|0;return k[a+20>>2]|0}function Obb(a){a=a|0;return k[a+24>>2]|0}function Pbb(a){a=a|0;return k[a+28>>2]|0}function Qbb(a,b){a=a|0;b=b|0;var c=0;c=a+24|0;k[c>>2]=(k[c>>2]|0)+b;return}function Rbb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+24>>2]=b;k[a+20>>2]=b;k[a+28>>2]=c;return}function Sbb(a,b){a=a|0;b=b|0;return}function Tbb(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function Ubb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;f=a;k[f>>2]=0;k[f+4>>2]=0;f=a+8|0;k[f>>2]=-1;k[f+4>>2]=-1;return}function Vbb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=a;k[d>>2]=0;k[d+4>>2]=0;d=a+8|0;k[d>>2]=-1;k[d+4>>2]=-1;return}function Wbb(a){a=a|0;return 0}function Xbb(a){a=a|0;return 0}function Ybb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=a+12|0;e=a+16|0;f=b;b=0;while(1){if((b|0)>=(c|0)){g=b;break}h=k[d>>2]|0;if(h>>>0<(k[e>>2]|0)>>>0){k[d>>2]=h+1;j=i[h>>0]|0}else{h=Vf[k[(k[a>>2]|0)+40>>2]&1023](a)|0;if((h|0)==-1){g=b;break}j=h&255}i[f>>0]=j;f=f+1|0;b=b+1|0}return g|0}function Zbb(a){a=a|0;return -1}function _bb(a){a=a|0;var b=0,c=0;if((Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0)==-1)b=-1;else{c=a+12|0;a=k[c>>2]|0;k[c>>2]=a+1;b=l[a>>0]|0}return b|0}function $bb(a,b){a=a|0;b=b|0;return -1}function acb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=a+24|0;e=a+28|0;f=b;b=0;while(1){if((b|0)>=(c|0)){g=b;break}h=k[d>>2]|0;if(h>>>0>=(k[e>>2]|0)>>>0){if((cg[k[(k[a>>2]|0)+52>>2]&1023](a,l[f>>0]|0)|0)==-1){g=b;break}}else{j=i[f>>0]|0;k[d>>2]=h+1;i[h>>0]=j}f=f+1|0;b=b+1|0}return g|0}function bcb(a,b){a=a|0;b=b|0;return -1}function ccb(a){a=a|0;k[a>>2]=71580;$pb(a+4|0);return}function dcb(a){a=a|0;k[a>>2]=71580;$pb(a+4|0);OBa(a);return}function ecb(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;_pb(c,a+4|0);r=b;return k[c>>2]|0}function fcb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+12>>2]&255](a,b,c)|0}function gcb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;_f[k[(k[b>>2]|0)+16>>2]&127](a,b,c,d,e,f);return}function hcb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+16|0;f=e;g=k[(k[b>>2]|0)+20>>2]|0;k[f>>2]=k[c>>2];k[f+4>>2]=k[c+4>>2];k[f+8>>2]=k[c+8>>2];k[f+12>>2]=k[c+12>>2];ng[g&255](a,b,f,d);r=e;return}function icb(a){a=a|0;return Vf[k[(k[a>>2]|0)+24>>2]&1023](a)|0}function jcb(a){a=a|0;var b=0,c=0,d=0;b=k[a+12>>2]|0;c=k[a+16>>2]|0;if(b>>>0>>0)d=c-b>>2;else d=Vf[k[(k[a>>2]|0)+28>>2]&1023](a)|0;return d|0}function kcb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+12|0;c=k[b>>2]|0;d=a+16|0;if((c|0)==(k[d>>2]|0))e=Vf[k[(k[a>>2]|0)+40>>2]&1023](a)|0;else{k[b>>2]=c+4;e=k[c>>2]|0}do if((e|0)!=-1){c=k[b>>2]|0;if((c|0)==(k[d>>2]|0)){f=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;break}else{f=k[c>>2]|0;break}}else f=-1;while(0);return f|0}function lcb(a){a=a|0;var b=0,c=0,d=0;b=a+12|0;c=k[b>>2]|0;if((c|0)==(k[a+16>>2]|0))d=Vf[k[(k[a>>2]|0)+40>>2]&1023](a)|0;else{k[b>>2]=c+4;d=k[c>>2]|0}return d|0}function mcb(a){a=a|0;var b=0,c=0;b=k[a+12>>2]|0;if((b|0)==(k[a+16>>2]|0))c=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else c=k[b>>2]|0;return c|0}function ncb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+32>>2]&255](a,b,c)|0}function ocb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+12|0;d=k[c>>2]|0;if((k[a+8>>2]|0)!=(d|0)?(e=d+-4|0,(k[e>>2]|0)==(b|0)):0){k[c>>2]=e;f=b}else f=cg[k[(k[a>>2]|0)+44>>2]&1023](a,b)|0;return f|0}function pcb(a){a=a|0;var b=0,c=0,d=0;b=a+12|0;c=k[b>>2]|0;if((k[a+8>>2]|0)==(c|0))d=cg[k[(k[a>>2]|0)+44>>2]&1023](a,-1)|0;else{a=c+-4|0;k[b>>2]=a;d=k[a>>2]|0}return d|0}function qcb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+24|0;d=k[c>>2]|0;if((d|0)==(k[a+28>>2]|0))e=cg[k[(k[a>>2]|0)+52>>2]&1023](a,b)|0;else{k[c>>2]=d+4;k[d>>2]=b;e=b}return e|0}function rcb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+48>>2]&255](a,b,c)|0}function scb(a){a=a|0;var b=0;k[a>>2]=71580;Zpb(a+4|0);b=a+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;return}function tcb(a,b){a=a|0;b=b|0;k[a>>2]=71580;_pb(a+4|0,b+4|0);k[a+8>>2]=k[b+8>>2];k[a+12>>2]=k[b+12>>2];k[a+16>>2]=k[b+16>>2];k[a+20>>2]=k[b+20>>2];k[a+24>>2]=k[b+24>>2];k[a+28>>2]=k[b+28>>2];return}function ucb(a,b){a=a|0;b=b|0;aqb(a+4|0,b+4|0)|0;k[a+8>>2]=k[b+8>>2];k[a+12>>2]=k[b+12>>2];k[a+16>>2]=k[b+16>>2];k[a+20>>2]=k[b+20>>2];k[a+24>>2]=k[b+24>>2];k[a+28>>2]=k[b+28>>2];return a|0}function vcb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=a+4|0;f=b+4|0;_pb(d,e);aqb(e,f)|0;aqb(f,d)|0;$pb(d);d=a+8|0;f=b+8|0;e=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=e;e=a+12|0;f=b+12|0;d=k[e>>2]|0;k[e>>2]=k[f>>2];k[f>>2]=d;d=a+16|0;f=b+16|0;e=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=e;e=a+20|0;f=b+20|0;d=k[e>>2]|0;k[e>>2]=k[f>>2];k[f>>2]=d;d=a+24|0;f=b+24|0;e=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=e;e=a+28|0;a=b+28|0;b=k[e>>2]|0;k[e>>2]=k[a>>2];k[a>>2]=b;r=c;return}function wcb(a){a=a|0;return k[a+8>>2]|0}function xcb(a){a=a|0;return k[a+12>>2]|0}function ycb(a){a=a|0;return k[a+16>>2]|0}function zcb(a,b){a=a|0;b=b|0;var c=0;c=a+12|0;k[c>>2]=(k[c>>2]|0)+(b<<2);return}function Acb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a+8>>2]=b;k[a+12>>2]=c;k[a+16>>2]=d;return}function Bcb(a){a=a|0;return k[a+20>>2]|0}function Ccb(a){a=a|0;return k[a+24>>2]|0}function Dcb(a){a=a|0;return k[a+28>>2]|0}function Ecb(a,b){a=a|0;b=b|0;var c=0;c=a+24|0;k[c>>2]=(k[c>>2]|0)+(b<<2);return}function Fcb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+24>>2]=b;k[a+20>>2]=b;k[a+28>>2]=c;return}function Gcb(a,b){a=a|0;b=b|0;return}function Hcb(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function Icb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;f=a;k[f>>2]=0;k[f+4>>2]=0;f=a+8|0;k[f>>2]=-1;k[f+4>>2]=-1;return}function Jcb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=a;k[d>>2]=0;k[d+4>>2]=0;d=a+8|0;k[d>>2]=-1;k[d+4>>2]=-1;return}function Kcb(a){a=a|0;return 0}function Lcb(a){a=a|0;return 0}function Mcb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+12|0;e=a+16|0;f=b;b=0;while(1){if((b|0)>=(c|0)){g=b;break}h=k[d>>2]|0;if(h>>>0>=(k[e>>2]|0)>>>0){i=Vf[k[(k[a>>2]|0)+40>>2]&1023](a)|0;if((i|0)==-1){g=b;break}else j=i}else{k[d>>2]=h+4;j=k[h>>2]|0}k[f>>2]=j;f=f+4|0;b=b+1|0}return g|0}function Ncb(a){a=a|0;return -1}function Ocb(a){a=a|0;var b=0,c=0;if((Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0)==-1)b=-1;else{c=a+12|0;a=k[c>>2]|0;k[c>>2]=a+4;b=k[a>>2]|0}return b|0}function Pcb(a,b){a=a|0;b=b|0;return -1}function Qcb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+24|0;e=a+28|0;f=b;b=0;while(1){if((b|0)>=(c|0)){g=b;break}h=k[d>>2]|0;if(h>>>0>=(k[e>>2]|0)>>>0){if((cg[k[(k[a>>2]|0)+52>>2]&1023](a,k[f>>2]|0)|0)==-1){g=b;break}}else{i=k[f>>2]|0;k[d>>2]=h+4;k[h>>2]=i}f=f+4|0;b=b+1|0}return g|0}function Rcb(a,b){a=a|0;b=b|0;return -1}function Scb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+4>>2];k[a+4>>2]=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;Eab(b,c);k[b+72>>2]=0;k[b+76>>2]=-1;return}function Tcb(a,b){a=a|0;b=b|0;k[a>>2]=71648;k[a+8>>2]=71668;k[a+4>>2]=0;Eab(a+8|0,b);k[a+80>>2]=0;k[a+84>>2]=-1;return}function Ucb(a,b){a=a|0;b=b|0;return}function Vcb(a){a=a|0;lab(a+8|0);return}function Wcb(a){a=a|0;lab(a+(k[(k[a>>2]|0)+-12>>2]|0)+8|0);return}function Xcb(a){a=a|0;lab(a+8|0);OBa(a);return}function Ycb(a){a=a|0;Xcb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function Zcb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+4>>2];b=c+4|0;k[a+4>>2]=k[b>>2];k[b>>2]=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=c+(k[(k[c>>2]|0)+-12>>2]|0)|0;Gab(b,a);c=a+72|0;k[b+72>>2]=k[c>>2];k[c>>2]=0;k[b+76>>2]=k[a+76>>2];return}function _cb(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=71648;k[a+8>>2]=71668;c=b+4|0;k[a+4>>2]=k[c>>2];k[c>>2]=0;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Gab(a+8|0,c);b=c+72|0;k[a+80>>2]=k[b>>2];k[b>>2]=0;k[a+84>>2]=k[c+76>>2];return}function $cb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+4|0;d=b+4|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;d=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(e,d);b=e+72|0;c=d+72|0;f=k[b>>2]|0;k[b>>2]=k[c>>2];k[c>>2]=f;f=e+76|0;e=d+76|0;d=k[f>>2]|0;k[f>>2]=k[e>>2];k[e>>2]=d;return a|0}function adb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+4|0;d=b+4|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(e,a);b=e+72|0;d=a+72|0;c=k[b>>2]|0;k[b>>2]=k[d>>2];k[d>>2]=c;c=e+76|0;e=a+76|0;a=k[c>>2]|0;k[c>>2]=k[e>>2];k[e>>2]=a;return}function bdb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+16|0;e=d;i[a>>0]=0;f=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;g=k[f+16>>2]|0;if(!g){h=k[f+72>>2]|0;if(h)cdb(h)|0;do if(!c?(h=b+(k[(k[b>>2]|0)+-12>>2]|0)|0,(k[h+4>>2]&4096|0)!=0):0){m=zab(h)|0;k[e>>2]=m;x=0;m=Ta(495,e|0,74148)|0;h=x;x=0;if(h&1){h=Hc()|0;$pb(e);Sc(h|0)}$pb(e);h=k[b+(k[(k[b>>2]|0)+-12>>2]|0)+24>>2]|0;n=m+8|0;m=h;o=(h|0)==0;p=m+12|0;q=m+16|0;s=h;t=h;u=t+12|0;v=t+16|0;w=h;y=h;while(1){if(o){z=0;A=0;break}if((k[p>>2]|0)==(k[q>>2]|0)?(Vf[k[(k[s>>2]|0)+36>>2]&1023](m)|0)==-1:0){z=0;A=0;break}B=k[u>>2]|0;if((B|0)==(k[v>>2]|0))C=Vf[k[(k[w>>2]|0)+36>>2]&1023](t)|0;else C=l[B>>0]|0;if((C&255)<<24>>24<=-1){z=t;A=h;break}if(!(j[(k[n>>2]|0)+(C<<24>>24<<1)>>1]&8192)){z=t;A=h;break}B=k[u>>2]|0;if((B|0)==(k[v>>2]|0)){Vf[k[(k[y>>2]|0)+40>>2]&1023](t)|0;continue}else{k[u>>2]=B+1;continue}}if(A){if((k[z+12>>2]|0)!=(k[z+16>>2]|0))break;if((Vf[k[(k[A>>2]|0)+36>>2]&1023](z)|0)!=-1)break}u=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;cab(u,k[u+16>>2]|6)}while(0);i[a>>0]=(k[b+(k[(k[b>>2]|0)+-12>>2]|0)+16>>2]|0)==0&1}else cab(f,g|4);r=d;return}function cdb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;a:do if(k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0){x=0;xa(611,c|0,a|0);d=x;x=0;b:do if(d&1){e=Hc(0)|0;f=e}else{do if(i[c>>0]|0){e=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;g=Ba(k[(k[e>>2]|0)+24>>2]|0,e|0)|0;e=x;x=0;if(!(e&1)){if((g|0)!=-1)break;g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,g|0,k[g+16>>2]|1|0);g=x;x=0;if(!(g&1))break}g=Hc(0)|0;Yeb(c);f=g;break b}while(0);Yeb(c);break a}while(0);me(f|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);d=x;x=0;if(!(d&1)){ge();break}d=Hc()|0;x=0;hb(45);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(d|0)}while(0);r=b;return a|0}function ddb(a){a=a|0;return (i[a>>0]|0)!=0|0}function edb(a,b){a=a|0;b=b|0;return Vf[b&1023](a)|0}function fdb(a,b){a=a|0;b=b|0;Vf[b&1023](a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;return a|0}function gdb(a,b){a=a|0;b=b|0;Vf[b&1023](a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;return a|0}function hdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c;e=a+4|0;k[e>>2]=0;x=0;fb(177,d|0,a|0,1);f=x;x=0;a:do if(f&1)g=9;else{do if(i[d>>0]|0){if(!b){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|4|0);h=x;x=0;if(h&1){g=9;break a}else break}h=b+24|0;j=b+28|0;while(1){m=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;n=k[m+12>>2]|0;if((n|0)==(k[m+16>>2]|0)){x=0;o=Ba(k[(k[m>>2]|0)+36>>2]|0,m|0)|0;m=x;x=0;if(m&1){g=10;break}if((o|0)==-1){p=2;g=21;break}else q=o}else q=l[n>>0]|0;n=k[h>>2]|0;if((n|0)==(k[j>>2]|0)){x=0;o=Ta(k[(k[b>>2]|0)+52>>2]|0,b|0,q&255|0)|0;m=x;x=0;if(m&1){g=10;break}if((o|0)==-1){p=0;g=21;break}}else{k[h>>2]=n+1;i[n>>0]=q}k[e>>2]=(k[e>>2]|0)+1;n=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;o=n+12|0;m=k[o>>2]|0;if((m|0)==(k[n+16>>2]|0)){x=0;Ba(k[(k[n>>2]|0)+40>>2]|0,n|0)|0;n=x;x=0;if(n&1){g=10;break}else continue}else{k[o>>2]=m+1;continue}}if((g|0)==10){h=Hc(0)|0;s=h}else if((g|0)==21){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|((k[e>>2]|0)==0?p|4:p)|0);h=x;x=0;if(!(h&1))break;h=Hc(0)|0;s=h}me(s|0)|0;if((k[e>>2]|0)==0?(x=0,va(1542,a+(k[(k[a>>2]|0)+-12>>2]|0)|0),h=x,x=0,h&1):0){h=Hc(0)|0;x=0;hb(45);j=x;x=0;if(j&1){g=31;break a}else{t=h;u=a;v=a;g=24;break a}}x=0;hb(45);h=x;x=0;if(h&1){g=9;break a}}while(0);g=26}while(0);if((g|0)==9){e=Hc(0)|0;t=e;u=a;v=a;g=24}do if((g|0)==24){me(t|0)|0;x=0;va(1452,u+(k[(k[v>>2]|0)+-12>>2]|0)|0);e=x;x=0;if(!(e&1)){ge();g=26;break}e=Hc()|0;x=0;hb(45);s=x;x=0;if(s&1)g=31;else Sc(e|0)}while(0);if((g|0)==26){r=c;return a|0}else if((g|0)==31){g=Hc(0)|0;Fg(g)}return 0}function idb(a){a=a|0;var b=0;b=a+16|0;k[b>>2]=k[b>>2]|4;if(!(k[a+20>>2]&4))return;else dc()}function jdb(a){a=a|0;var b=0;b=a+16|0;k[b>>2]=k[b>>2]|1;if(!(k[a+20>>2]&1))return;else dc()}function kdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+12>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function ldb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+32|0;d=c+24|0;e=c+20|0;f=c+16|0;g=c+12|0;h=c+28|0;l=c+8|0;m=c+4|0;n=c;x=0;fb(177,h|0,a|0,0);o=x;x=0;a:do if(o&1)p=7;else do if(i[h>>0]|0){k[l>>2]=0;q=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[n>>2]=q;x=0;q=Ta(495,n|0,72340)|0;s=x;x=0;if(!(s&1)?(s=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,t=k[(k[q>>2]|0)+16>>2]|0,k[f>>2]=k[s+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(t|0,q|0,e|0,d|0,s|0,l|0,m|0)|0,s=x,x=0,!(s&1)):0){$pb(n);s=k[m>>2]|0;do if((s|0)>=-32768)if((s|0)>32767){q=k[l>>2]|4;k[l>>2]=q;j[b>>1]=32767;u=q;break}else{j[b>>1]=s;u=k[l>>2]|0;break}else{q=k[l>>2]|4;k[l>>2]=q;j[b>>1]=-32768;u=q}while(0);s=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,s|0,k[s+16>>2]|u|0);s=x;x=0;if(s&1){p=7;break a}break}s=Hc(0)|0;$pb(n);v=s;w=a;y=a;p=9;break a}while(0);while(0);if((p|0)==7){n=Hc(0)|0;v=n;w=a;y=a;p=9}do if((p|0)==9){me(v|0)|0;x=0;va(1452,w+(k[(k[y>>2]|0)+-12>>2]|0)|0);n=x;x=0;if(!(n&1)){ge();break}n=Hc()|0;x=0;hb(45);u=x;x=0;if(u&1){u=Hc(0)|0;Fg(u)}else Sc(n|0)}while(0);r=c;return a|0}function mdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+24>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function ndb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+32|0;d=c+24|0;e=c+20|0;f=c+16|0;g=c+12|0;h=c+28|0;j=c+8|0;l=c+4|0;m=c;x=0;fb(177,h|0,a|0,0);n=x;x=0;a:do if(n&1)o=6;else do if(i[h>>0]|0){k[j>>2]=0;p=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[m>>2]=p;x=0;p=Ta(495,m|0,72340)|0;q=x;x=0;if(!(q&1)?(q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,s=k[(k[p>>2]|0)+16>>2]|0,k[f>>2]=k[q+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(s|0,p|0,e|0,d|0,q|0,j|0,l|0)|0,q=x,x=0,!(q&1)):0){$pb(m);k[b>>2]=k[l>>2];q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,q|0,k[q+16>>2]|k[j>>2]|0);q=x;x=0;if(q&1){o=6;break a}break}q=Hc(0)|0;$pb(m);t=q;u=a;v=a;o=8;break a}while(0);while(0);if((o|0)==6){m=Hc(0)|0;t=m;u=a;v=a;o=8}do if((o|0)==8){me(t|0)|0;x=0;va(1452,u+(k[(k[v>>2]|0)+-12>>2]|0)|0);m=x;x=0;if(!(m&1)){ge();break}m=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(m|0)}while(0);r=c;return a|0}function odb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+28>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function pdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+16>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function qdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+32>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function rdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+20>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function sdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+36>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function tdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+40>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function udb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+44>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function vdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+48>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function wdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(177,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72340)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+52>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function xdb(a){a=a|0;return k[a+4>>2]|0}function ydb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0;b=r;r=r+16|0;c=b;d=a+4|0;k[d>>2]=0;x=0;fb(177,c|0,a|0,1);e=x;x=0;a:do if(e&1)f=8;else{do if(!(i[c>>0]|0))g=-1;else{h=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;j=h+12|0;m=k[j>>2]|0;if((m|0)==(k[h+16>>2]|0)){x=0;n=Ba(k[(k[h>>2]|0)+40>>2]|0,h|0)|0;h=x;x=0;if(h&1){f=8;break a}if((n|0)==-1){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|6|0);h=x;x=0;if(h&1){f=8;break a}else{g=-1;break}}else o=n}else{k[j>>2]=m+1;o=l[m>>0]|0}k[d>>2]=1;g=o}while(0);p=g}while(0);do if((f|0)==8){g=Hc(0)|0;me(g|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);g=x;x=0;if(!(g&1)){ge();p=-1;break}g=Hc()|0;x=0;hb(45);o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)}else Sc(g|0)}while(0);r=b;return p|0}function zdb(a,b){a=a|0;b=b|0;var c=0;c=ydb(a)|0;if((c|0)!=-1)i[b>>0]=c;return a|0}function Adb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;f=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[e>>2]=f;x=0;f=Ta(495,e|0,74148)|0;g=x;x=0;if(!(g&1)?(x=0,g=Ta(k[(k[f>>2]|0)+28>>2]|0,f|0,10)|0,f=x,x=0,!(f&1)):0){$pb(e);f=Bdb(a,b,c,g)|0;r=d;return f|0}f=Hc()|0;$pb(e);Sc(f|0);return 0}function Bdb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;e=r;r=r+16|0;f=e;g=a+4|0;k[g>>2]=0;x=0;fb(177,f|0,a|0,1);h=x;x=0;a:do if(h&1)j=11;else do if(i[f>>0]|0){if((c|0)<=0){m=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,m|0,k[m+16>>2]|4|0);m=x;x=0;if(m&1){j=11;break a}else break}m=c+-1|0;n=b;while(1){if((k[g>>2]|0)>=(m|0)){o=n;p=0;j=19;break}q=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;s=k[q+12>>2]|0;if((s|0)==(k[q+16>>2]|0)){x=0;t=Ba(k[(k[q>>2]|0)+36>>2]|0,q|0)|0;q=x;x=0;if(q&1){j=10;break}if((t|0)==-1){o=n;p=2;j=19;break}else u=t}else u=l[s>>0]|0;s=u&255;if(s<<24>>24==d<<24>>24){o=n;p=0;j=19;break}t=n+1|0;i[n>>0]=s;k[g>>2]=(k[g>>2]|0)+1;s=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;q=s+12|0;v=k[q>>2]|0;if((v|0)==(k[s+16>>2]|0)){x=0;Ba(k[(k[s>>2]|0)+40>>2]|0,s|0)|0;s=x;x=0;if(s&1){j=10;break}else{n=t;continue}}else{k[q>>2]=v+1;n=t;continue}}if((j|0)==10){n=Hc(0)|0;w=a;y=a;z=n;j=12;break a}else if((j|0)==19){i[o>>0]=0;n=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,n|0,k[n+16>>2]|((k[g>>2]|0)==0?p|4:p)|0);n=x;x=0;if(n&1){j=11;break a}else break}}while(0);while(0);if((j|0)==11){p=Hc(0)|0;w=a;y=a;z=p;j=12}do if((j|0)==12){me(z|0)|0;x=0;va(1452,w+(k[(k[y>>2]|0)+-12>>2]|0)|0);p=x;x=0;if(!(p&1)){ge();break}p=Hc()|0;x=0;hb(45);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(p|0)}while(0);r=e;return a|0}function Cdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[d>>2]=e;x=0;e=Ta(495,d|0,74148)|0;f=x;x=0;if(!(f&1)?(x=0,f=Ta(k[(k[e>>2]|0)+28>>2]|0,e|0,10)|0,e=x,x=0,!(e&1)):0){$pb(d);e=Ddb(a,b,f)|0;r=c;return e|0}e=Hc()|0;$pb(d);Sc(e|0);return 0}function Ddb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+16|0;e=d;f=a+4|0;k[f>>2]=0;x=0;fb(177,e|0,a|0,1);g=x;x=0;do if(!(g&1)){if(i[e>>0]|0){h=b+24|0;j=b+28|0;while(1){m=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;n=k[m+12>>2]|0;if((n|0)==(k[m+16>>2]|0)){x=0;o=Ba(k[(k[m>>2]|0)+36>>2]|0,m|0)|0;m=x;x=0;if(m&1){p=11;break}if((o|0)==-1){q=2;break}else s=o}else s=l[n>>0]|0;n=s&255;if(n<<24>>24==c<<24>>24){q=0;break}o=k[h>>2]|0;if((o|0)==(k[j>>2]|0)){x=0;m=Ta(k[(k[b>>2]|0)+52>>2]|0,b|0,s&255|0)|0;t=x;x=0;if(t&1){p=11;break}if((m|0)==-1){q=0;break}}else{k[h>>2]=o+1;i[o>>0]=n}k[f>>2]=(k[f>>2]|0)+1;n=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;o=n+12|0;m=k[o>>2]|0;if((m|0)==(k[n+16>>2]|0)){x=0;Ba(k[(k[n>>2]|0)+40>>2]|0,n|0)|0;n=x;x=0;if(n&1){p=11;break}else continue}else{k[o>>2]=m+1;continue}}if((p|0)==11){h=Hc(0)|0;me(h|0)|0;x=0;hb(45);h=x;x=0;if(h&1){p=8;break}else q=0}h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|((k[f>>2]|0)==0?q|4:q)|0);h=x;x=0;if(h&1){p=8;break}}}else p=8;while(0);do if((p|0)==8){q=Hc(0)|0;me(q|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);q=x;x=0;if(!(q&1)){ge();break}q=Hc()|0;x=0;hb(45);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(q|0)}while(0);r=d;return a|0}function Edb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;f=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[e>>2]=f;x=0;f=Ta(495,e|0,74148)|0;g=x;x=0;if(!(g&1)?(x=0,g=Ta(k[(k[f>>2]|0)+28>>2]|0,f|0,10)|0,f=x,x=0,!(f&1)):0){$pb(e);f=Fdb(a,b,c,g)|0;r=d;return f|0}f=Hc()|0;$pb(e);Sc(f|0);return 0}function Fdb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;e=r;r=r+16|0;f=e;g=a+4|0;k[g>>2]=0;x=0;fb(177,f|0,a|0,1);h=x;x=0;do if(!(h&1)){if(i[f>>0]|0){j=c+-1|0;m=b;while(1){n=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;o=k[n+12>>2]|0;if((o|0)==(k[n+16>>2]|0)){x=0;p=Ba(k[(k[n>>2]|0)+36>>2]|0,n|0)|0;n=x;x=0;if(n&1){q=8;break}if((p|0)==-1){s=m;t=2;break}else u=p}else u=l[o>>0]|0;o=u&255;if(o<<24>>24==d<<24>>24){v=m;q=14;break}if((k[g>>2]|0)>=(j|0)){s=m;t=4;break}p=m+1|0;i[m>>0]=o;o=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;n=o+12|0;w=k[n>>2]|0;if((w|0)==(k[o+16>>2]|0)){x=0;Ba(k[(k[o>>2]|0)+40>>2]|0,o|0)|0;o=x;x=0;if(o&1){q=8;break}}else k[n>>2]=w+1;k[g>>2]=(k[g>>2]|0)+1;m=p}if((q|0)==8){m=Hc(0)|0;y=a;z=a;A=m;q=10;break}if((q|0)==14){m=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;j=m+12|0;p=k[j>>2]|0;if((p|0)==(k[m+16>>2]|0)){x=0;Ba(k[(k[m>>2]|0)+40>>2]|0,m|0)|0;m=x;x=0;if(m&1){q=9;break}}else k[j>>2]=p+1;k[g>>2]=(k[g>>2]|0)+1;s=v;t=0}if((c|0)>0)i[s>>0]=0;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|((k[g>>2]|0)==0?t|4:t)|0);p=x;x=0;if(p&1){q=9;break}}}else q=9;while(0);if((q|0)==9){t=Hc(0)|0;y=a;z=a;A=t;q=10}do if((q|0)==10){me(A|0)|0;x=0;va(1452,y+(k[(k[z>>2]|0)+-12>>2]|0)|0);t=x;x=0;if(!(t&1)){ge();break}t=Hc()|0;x=0;hb(45);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(t|0)}while(0);r=e;return a|0}function Gdb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;d=r;r=r+16|0;e=d;f=a+4|0;k[f>>2]=0;x=0;fb(177,e|0,a|0,1);g=x;x=0;a:do if(!(g&1)){if(i[e>>0]|0){b:do if((b|0)==2147483647){while(1){h=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;j=h+12|0;m=k[j>>2]|0;if((m|0)==(k[h+16>>2]|0)){x=0;n=Ba(k[(k[h>>2]|0)+40>>2]|0,h|0)|0;h=x;x=0;if(h&1)break;if((n|0)==-1){o=2;break b}else p=n}else{k[j>>2]=m+1;p=l[m>>0]|0}k[f>>2]=(k[f>>2]|0)+1;if((p|0)==(c|0)){o=0;break b}}m=Hc(0)|0;q=a;s=a;t=m;u=13;break a}else{m=k[f>>2]|0;while(1){if((m|0)>=(b|0)){o=0;break b}j=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;n=j+12|0;h=k[n>>2]|0;if((h|0)==(k[j+16>>2]|0)){x=0;v=Ba(k[(k[j>>2]|0)+40>>2]|0,j|0)|0;j=x;x=0;if(j&1)break;if((v|0)==-1){o=2;break b}w=v;y=k[f>>2]|0}else{k[n>>2]=h+1;w=l[h>>0]|0;y=m}m=y+1|0;k[f>>2]=m;if((w|0)==(c|0)){o=0;break b}}m=Hc(0)|0;z=m;u=12;break a}while(0);m=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,m|0,k[m+16>>2]|o|0);m=x;x=0;if(m&1){u=11;break}}}else u=11;while(0);if((u|0)==11){o=Hc(0)|0;z=o;u=12}if((u|0)==12){q=a;s=a;t=z;u=13}do if((u|0)==13){me(t|0)|0;x=0;va(1452,s+(k[(k[q>>2]|0)+-12>>2]|0)|0);z=x;x=0;if(!(z&1)){ge();break}z=Hc()|0;x=0;hb(45);o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)}else Sc(z|0)}while(0);r=d;return a|0}function Hdb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0;b=r;r=r+16|0;c=b;k[a+4>>2]=0;x=0;fb(177,c|0,a|0,1);d=x;x=0;a:do if(d&1)e=8;else{do if(i[c>>0]|0){f=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;g=k[f+12>>2]|0;if((g|0)!=(k[f+16>>2]|0)){h=l[g>>0]|0;break}x=0;g=Ba(k[(k[f>>2]|0)+36>>2]|0,f|0)|0;f=x;x=0;if(f&1){e=8;break a}if((g|0)==-1){f=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,f|0,k[f+16>>2]|2|0);f=x;x=0;if(f&1){e=8;break a}else h=-1}else h=g}else h=-1;while(0);j=h}while(0);do if((e|0)==8){h=Hc(0)|0;me(h|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);h=x;x=0;if(!(h&1)){ge();j=-1;break}h=Hc()|0;x=0;hb(45);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else Sc(h|0)}while(0);r=b;return j|0}function Idb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=a+4|0;k[f>>2]=0;x=0;fb(177,e|0,a|0,1);g=x;x=0;do if(!(g&1)){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;if(!(i[e>>0]|0)){x=0;xa(612,h|0,k[h+16>>2]|4|0);j=x;x=0;if(j&1){l=6;break}}else{j=k[h+24>>2]|0;x=0;h=Fa(k[(k[j>>2]|0)+32>>2]|0,j|0,b|0,c|0)|0;j=x;x=0;if(j&1){l=6;break}k[f>>2]=h;if((h|0)!=(c|0)?(h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,x=0,xa(612,h|0,k[h+16>>2]|6|0),h=x,x=0,h&1):0){l=6;break}}}else l=6;while(0);do if((l|0)==6){c=Hc(0)|0;me(c|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);c=x;x=0;if(!(c&1)){ge();break}c=Hc()|0;x=0;hb(45);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(c|0)}while(0);r=d;return a|0}function Jdb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a+4|0;k[d>>2]=0;e=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;f=k[e+12>>2]|0;g=k[e+16>>2]|0;if(f>>>0>>0)h=g-f|0;else h=Vf[k[(k[e>>2]|0)+28>>2]&1023](e)|0;switch(h|0){case -1:{e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;cab(e,k[e+16>>2]|2);break}case 0:break;default:Idb(a,b,(h|0)>(c|0)?c:h)|0}return k[d>>2]|0}function Kdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+16|0;d=c;k[a+4>>2]=0;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,e|0,k[e+16>>2]&-3|0);e=x;x=0;a:do if(!(e&1)?(x=0,fb(177,d|0,a|0,1),f=x,x=0,!(f&1)):0){f=k[(k[a>>2]|0)+-12>>2]|0;g=a+f|0;do if(!(i[d>>0]|0)){x=0;xa(612,g|0,k[g+16>>2]|4|0);h=x;x=0;if(h&1){j=12;break a}}else{h=k[g+24>>2]|0;if(!h)l=f;else{m=h+12|0;n=k[m>>2]|0;if((k[h+8>>2]|0)!=(n|0)?(o=n+-1|0,(i[o>>0]|0)==b<<24>>24):0){k[m>>2]=o;break}x=0;o=Ta(k[(k[h>>2]|0)+44>>2]|0,h|0,b&255|0)|0;h=x;x=0;if(h&1){j=12;break a}if((o|0)!=-1)break;l=k[(k[a>>2]|0)+-12>>2]|0}o=a+l|0;x=0;xa(612,o|0,k[o+16>>2]|1|0);o=x;x=0;if(o&1){j=12;break a}}while(0)}else j=12;while(0);do if((j|0)==12){l=Hc(0)|0;me(l|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else Sc(l|0)}while(0);r=c;return a|0}function Ldb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b;k[a+4>>2]=0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,d|0,k[d+16>>2]&-3|0);d=x;x=0;a:do if(!(d&1)?(x=0,fb(177,c|0,a|0,1),e=x,x=0,!(e&1)):0){e=k[(k[a>>2]|0)+-12>>2]|0;f=a+e|0;do if(!(i[c>>0]|0)){x=0;xa(612,f|0,k[f+16>>2]|4|0);g=x;x=0;if(g&1){h=11;break a}}else{g=k[f+24>>2]|0;if(!g)j=e;else{l=g+12|0;m=k[l>>2]|0;if((k[g+8>>2]|0)!=(m|0)){k[l>>2]=m+-1;break}x=0;m=Ta(k[(k[g>>2]|0)+44>>2]|0,g|0,-1)|0;g=x;x=0;if(g&1){h=11;break a}if((m|0)!=-1)break;j=k[(k[a>>2]|0)+-12>>2]|0}m=a+j|0;x=0;xa(612,m|0,k[m+16>>2]|1|0);m=x;x=0;if(m&1){h=11;break a}}while(0)}else h=11;while(0);do if((h|0)==11){j=Hc(0)|0;me(j|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);j=x;x=0;if(!(j&1)){ge();break}j=Hc()|0;x=0;hb(45);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else Sc(j|0)}while(0);r=b;return a|0}function Mdb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;x=0;fb(177,c|0,a|0,1);d=x;x=0;do if(d&1)e=4;else{if(i[c>>0]|0){f=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;if(!f){g=-1;break}x=0;h=Ba(k[(k[f>>2]|0)+24>>2]|0,f|0)|0;f=x;x=0;if(f&1){e=4;break}if((h|0)==-1){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|1|0);h=x;x=0;if(h&1){e=4;break}g=-1;break}}g=0}while(0);do if((e|0)==4){c=Hc(0)|0;me(c|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);c=x;x=0;if(!(c&1)){ge();g=0;break}c=Hc()|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(c|0)}while(0);r=b;return g|0}function Ndb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+16|0;e=c;f=a;k[f>>2]=0;k[f+4>>2]=0;f=a+8|0;k[f>>2]=-1;k[f+4>>2]=-1;x=0;fb(177,d|0,b|0,1);f=x;x=0;do if(!(f&1)){if(i[d>>0]|0){g=k[b+(k[(k[b>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;La(k[(k[g>>2]|0)+16>>2]|0,e|0,g|0,0,0,1,8);g=x;x=0;if(g&1){h=5;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];k[a+12>>2]=k[e+12>>2]}}else h=5;while(0);do if((h|0)==5){e=Hc(0)|0;me(e|0)|0;x=0;va(1452,b+(k[(k[b>>2]|0)+-12>>2]|0)|0);e=x;x=0;if(!(e&1)){ge();break}e=Hc()|0;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else Sc(e|0)}while(0);r=c;return}function Odb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+48|0;d=c+16|0;e=c+32|0;f=c;g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,g|0,k[g+16>>2]&-3|0);g=x;x=0;do if(!(g&1)?(x=0,fb(177,e|0,a|0,1),h=x,x=0,!(h&1)):0){if(i[e>>0]|0){h=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;j=k[(k[h>>2]|0)+20>>2]|0;x=0;k[d>>2]=k[b>>2];k[d+4>>2]=k[b+4>>2];k[d+8>>2]=k[b+8>>2];k[d+12>>2]=k[b+12>>2];nb(j|0,f|0,h|0,d|0,8);h=x;x=0;if(h&1){l=7;break}h=f+8|0;if(((k[h>>2]|0)==-1?(k[h+4>>2]|0)==-1:0)?(h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,x=0,xa(612,h|0,k[h+16>>2]|4|0),h=x,x=0,h&1):0){l=7;break}}}else l=7;while(0);do if((l|0)==7){f=Hc(0)|0;me(f|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(f|0)}while(0);r=c;return a|0}function Pdb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=r;r=r+32|0;f=e+16|0;g=e;x=0;fb(177,f|0,a|0,1);h=x;x=0;do if(!(h&1)){if(i[f>>0]|0){j=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;La(k[(k[j>>2]|0)+16>>2]|0,g|0,j|0,b|0,c|0,d|0,8);j=x;x=0;if(j&1){l=6;break}j=g+8|0;if(((k[j>>2]|0)==-1?(k[j+4>>2]|0)==-1:0)?(j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,x=0,xa(612,j|0,k[j+16>>2]|4|0),j=x,x=0,j&1):0){l=6;break}}}else l=6;while(0);do if((l|0)==6){g=Hc(0)|0;me(g|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);g=x;x=0;if(!(g&1)){ge();break}g=Hc()|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(g|0)}while(0);r=e;return a|0}function Qdb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+4>>2];k[a+4>>2]=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;Eab(b,c);k[b+72>>2]=0;k[b+76>>2]=-1;return}function Rdb(a,b){a=a|0;b=b|0;k[a>>2]=71696;k[a+8>>2]=71716;k[a+4>>2]=0;Eab(a+8|0,b);k[a+80>>2]=0;k[a+84>>2]=-1;return}function Sdb(a,b){a=a|0;b=b|0;return}function Tdb(a){a=a|0;lab(a+8|0);return}function Udb(a){a=a|0;lab(a+(k[(k[a>>2]|0)+-12>>2]|0)+8|0);return}function Vdb(a){a=a|0;lab(a+8|0);OBa(a);return}function Wdb(a){a=a|0;Vdb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function Xdb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+4>>2];b=c+4|0;k[a+4>>2]=k[b>>2];k[b>>2]=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=c+(k[(k[c>>2]|0)+-12>>2]|0)|0;Gab(b,a);c=a+72|0;k[b+72>>2]=k[c>>2];k[c>>2]=0;k[b+76>>2]=k[a+76>>2];return}function Ydb(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=71696;k[a+8>>2]=71716;c=b+4|0;k[a+4>>2]=k[c>>2];k[c>>2]=0;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Gab(a+8|0,c);b=c+72|0;k[a+80>>2]=k[b>>2];k[b>>2]=0;k[a+84>>2]=k[c+76>>2];return}function Zdb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+4|0;d=b+4|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;d=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(e,d);b=e+72|0;c=d+72|0;f=k[b>>2]|0;k[b>>2]=k[c>>2];k[c>>2]=f;f=e+76|0;e=d+76|0;d=k[f>>2]|0;k[f>>2]=k[e>>2];k[e>>2]=d;return a|0}function _db(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+4|0;d=b+4|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(e,a);b=e+72|0;d=a+72|0;c=k[b>>2]|0;k[b>>2]=k[d>>2];k[d>>2]=c;c=e+76|0;e=a+76|0;a=k[c>>2]|0;k[c>>2]=k[e>>2];k[e>>2]=a;return}function $db(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+16|0;e=d;i[a>>0]=0;f=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;g=k[f+16>>2]|0;if(!g){h=k[f+72>>2]|0;if(h)aeb(h)|0;do if(!c?(h=b+(k[(k[b>>2]|0)+-12>>2]|0)|0,(k[h+4>>2]&4096|0)!=0):0){j=zab(h)|0;k[e>>2]=j;x=0;j=Ta(495,e|0,74140)|0;h=x;x=0;if(h&1){h=Hc()|0;$pb(e);Sc(h|0)}$pb(e);h=k[b+(k[(k[b>>2]|0)+-12>>2]|0)+24>>2]|0;l=h;m=(h|0)==0;n=l+12|0;o=l+16|0;p=h;while(1){if(m){q=0;s=0;break}t=k[n>>2]|0;if((t|0)==(k[o>>2]|0))u=Vf[k[(k[p>>2]|0)+36>>2]&1023](l)|0;else u=k[t>>2]|0;t=(u|0)==-1;v=t?0:h;if(t){q=0;s=0;break}t=v;w=t+12|0;y=k[w>>2]|0;z=t+16|0;if((y|0)==(k[z>>2]|0))A=Vf[k[(k[v>>2]|0)+36>>2]&1023](t)|0;else A=k[y>>2]|0;if(!(Xf[k[(k[j>>2]|0)+12>>2]&255](j,8192,A)|0)){q=t;s=h;break}y=k[w>>2]|0;if((y|0)==(k[z>>2]|0)){Vf[k[(k[v>>2]|0)+40>>2]&1023](t)|0;continue}else{k[w>>2]=y+4;continue}}if(s){h=k[q+12>>2]|0;if((h|0)==(k[q+16>>2]|0))B=Vf[k[(k[s>>2]|0)+36>>2]&1023](q)|0;else B=k[h>>2]|0;if((B|0)!=-1)break}h=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;cab(h,k[h+16>>2]|6)}while(0);i[a>>0]=(k[b+(k[(k[b>>2]|0)+-12>>2]|0)+16>>2]|0)==0&1}else cab(f,g|4);r=d;return}function aeb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;a:do if(k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0){x=0;xa(947,c|0,a|0);d=x;x=0;b:do if(d&1){e=Hc(0)|0;f=e}else{do if(i[c>>0]|0){e=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;g=Ba(k[(k[e>>2]|0)+24>>2]|0,e|0)|0;e=x;x=0;if(!(e&1)){if((g|0)!=-1)break;g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,g|0,k[g+16>>2]|1|0);g=x;x=0;if(!(g&1))break}g=Hc(0)|0;Ifb(c);f=g;break b}while(0);Ifb(c);break a}while(0);me(f|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);d=x;x=0;if(!(d&1)){ge();break}d=Hc()|0;x=0;hb(45);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(d|0)}while(0);r=b;return a|0}function beb(a){a=a|0;return (i[a>>0]|0)!=0|0}function ceb(a,b){a=a|0;b=b|0;return Vf[b&1023](a)|0}function deb(a,b){a=a|0;b=b|0;Vf[b&1023](a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;return a|0}function eeb(a,b){a=a|0;b=b|0;Vf[b&1023](a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;return a|0}function feb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+16|0;d=c;e=a+4|0;k[e>>2]=0;x=0;fb(422,d|0,a|0,1);f=x;x=0;a:do if(f&1)g=9;else{do if(i[d>>0]|0){if(!b){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|4|0);h=x;x=0;if(h&1){g=9;break a}else break}h=b+24|0;j=b+28|0;while(1){l=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;m=k[l+12>>2]|0;if((m|0)==(k[l+16>>2]|0)){x=0;n=Ba(k[(k[l>>2]|0)+36>>2]|0,l|0)|0;l=x;x=0;if(l&1){g=10;break}else o=n}else o=k[m>>2]|0;if((o|0)==-1){p=2;g=21;break}m=k[h>>2]|0;if((m|0)==(k[j>>2]|0)){x=0;n=Ta(k[(k[b>>2]|0)+52>>2]|0,b|0,o|0)|0;l=x;x=0;if(l&1){g=10;break}if((n|0)==-1){p=0;g=21;break}}else{k[h>>2]=m+4;k[m>>2]=o}k[e>>2]=(k[e>>2]|0)+1;m=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;n=m+12|0;l=k[n>>2]|0;if((l|0)==(k[m+16>>2]|0)){x=0;Ba(k[(k[m>>2]|0)+40>>2]|0,m|0)|0;m=x;x=0;if(m&1){g=10;break}else continue}else{k[n>>2]=l+4;continue}}if((g|0)==10){h=Hc(0)|0;q=h}else if((g|0)==21){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|((k[e>>2]|0)==0?p|4:p)|0);h=x;x=0;if(!(h&1))break;h=Hc(0)|0;q=h}me(q|0)|0;if((k[e>>2]|0)==0?(x=0,va(1542,a+(k[(k[a>>2]|0)+-12>>2]|0)|0),h=x,x=0,h&1):0){h=Hc(0)|0;x=0;hb(45);j=x;x=0;if(j&1){g=31;break a}else{s=h;t=a;u=a;g=24;break a}}x=0;hb(45);h=x;x=0;if(h&1){g=9;break a}}while(0);g=26}while(0);if((g|0)==9){e=Hc(0)|0;s=e;t=a;u=a;g=24}do if((g|0)==24){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);e=x;x=0;if(!(e&1)){ge();g=26;break}e=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1)g=31;else Sc(e|0)}while(0);if((g|0)==26){r=c;return a|0}else if((g|0)==31){g=Hc(0)|0;Fg(g)}return 0}function geb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+12>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function heb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+32|0;d=c+24|0;e=c+20|0;f=c+16|0;g=c+12|0;h=c+28|0;l=c+8|0;m=c+4|0;n=c;x=0;fb(422,h|0,a|0,0);o=x;x=0;a:do if(o&1)p=7;else do if(i[h>>0]|0){k[l>>2]=0;q=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[n>>2]=q;x=0;q=Ta(495,n|0,72412)|0;s=x;x=0;if(!(s&1)?(s=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,t=k[(k[q>>2]|0)+16>>2]|0,k[f>>2]=k[s+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(t|0,q|0,e|0,d|0,s|0,l|0,m|0)|0,s=x,x=0,!(s&1)):0){$pb(n);s=k[m>>2]|0;do if((s|0)>=-32768)if((s|0)>32767){q=k[l>>2]|4;k[l>>2]=q;j[b>>1]=32767;u=q;break}else{j[b>>1]=s;u=k[l>>2]|0;break}else{q=k[l>>2]|4;k[l>>2]=q;j[b>>1]=-32768;u=q}while(0);s=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,s|0,k[s+16>>2]|u|0);s=x;x=0;if(s&1){p=7;break a}break}s=Hc(0)|0;$pb(n);v=s;w=a;y=a;p=9;break a}while(0);while(0);if((p|0)==7){n=Hc(0)|0;v=n;w=a;y=a;p=9}do if((p|0)==9){me(v|0)|0;x=0;va(1452,w+(k[(k[y>>2]|0)+-12>>2]|0)|0);n=x;x=0;if(!(n&1)){ge();break}n=Hc()|0;x=0;hb(45);u=x;x=0;if(u&1){u=Hc(0)|0;Fg(u)}else Sc(n|0)}while(0);r=c;return a|0}function ieb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+24>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function jeb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+32|0;d=c+24|0;e=c+20|0;f=c+16|0;g=c+12|0;h=c+28|0;j=c+8|0;l=c+4|0;m=c;x=0;fb(422,h|0,a|0,0);n=x;x=0;a:do if(n&1)o=6;else do if(i[h>>0]|0){k[j>>2]=0;p=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[m>>2]=p;x=0;p=Ta(495,m|0,72412)|0;q=x;x=0;if(!(q&1)?(q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,s=k[(k[p>>2]|0)+16>>2]|0,k[f>>2]=k[q+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(s|0,p|0,e|0,d|0,q|0,j|0,l|0)|0,q=x,x=0,!(q&1)):0){$pb(m);k[b>>2]=k[l>>2];q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,q|0,k[q+16>>2]|k[j>>2]|0);q=x;x=0;if(q&1){o=6;break a}break}q=Hc(0)|0;$pb(m);t=q;u=a;v=a;o=8;break a}while(0);while(0);if((o|0)==6){m=Hc(0)|0;t=m;u=a;v=a;o=8}do if((o|0)==8){me(t|0)|0;x=0;va(1452,u+(k[(k[v>>2]|0)+-12>>2]|0)|0);m=x;x=0;if(!(m&1)){ge();break}m=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(m|0)}while(0);r=c;return a|0}function keb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+28>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function leb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+16>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function meb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+32>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function neb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+20>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function oeb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+36>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function peb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+40>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function qeb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+44>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function reb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+48>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function seb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c+24|0;j=c+4|0;l=c;x=0;fb(422,h|0,a|0,0);m=x;x=0;a:do if(m&1)n=7;else do if(i[h>>0]|0){k[j>>2]=0;o=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[l>>2]=o;x=0;o=Ta(495,l|0,72412)|0;p=x;x=0;if(!(p&1)?(p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,q=k[(k[o>>2]|0)+52>>2]|0,k[f>>2]=k[p+24>>2],k[g>>2]=0,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],za(q|0,o|0,e|0,d|0,p|0,j|0,b|0)|0,p=x,x=0,!(p&1)):0){$pb(l);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|k[j>>2]|0);p=x;x=0;if(p&1){n=7;break a}break}p=Hc(0)|0;$pb(l);s=p;t=a;u=a;n=9;break a}while(0);while(0);if((n|0)==7){l=Hc(0)|0;s=l;t=a;u=a;n=9}do if((n|0)==9){me(s|0)|0;x=0;va(1452,t+(k[(k[u>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=c;return a|0}function teb(a){a=a|0;return k[a+4>>2]|0}function ueb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b;d=a+4|0;k[d>>2]=0;x=0;fb(422,c|0,a|0,1);e=x;x=0;a:do if(e&1)f=8;else{do if(i[c>>0]|0){g=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;h=g+12|0;j=k[h>>2]|0;if((j|0)==(k[g+16>>2]|0)){x=0;l=Ba(k[(k[g>>2]|0)+40>>2]|0,g|0)|0;g=x;x=0;if(g&1){f=8;break a}else m=l}else{k[h>>2]=j+4;m=k[j>>2]|0}if((m|0)==-1){j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,j|0,k[j+16>>2]|6|0);j=x;x=0;if(j&1){f=8;break a}else{n=-1;break}}else{k[d>>2]=1;n=m;break}}else n=-1;while(0);o=n}while(0);do if((f|0)==8){n=Hc(0)|0;me(n|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);n=x;x=0;if(!(n&1)){ge();o=-1;break}n=Hc()|0;x=0;hb(45);m=x;x=0;if(m&1){m=Hc(0)|0;Fg(m)}else Sc(n|0)}while(0);r=b;return o|0}function veb(a,b){a=a|0;b=b|0;var c=0;c=ueb(a)|0;if((c|0)!=-1)k[b>>2]=c;return a|0}function web(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;f=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[e>>2]=f;x=0;f=Ta(495,e|0,74140)|0;g=x;x=0;if(!(g&1)?(x=0,g=Ta(k[(k[f>>2]|0)+44>>2]|0,f|0,10)|0,f=x,x=0,!(f&1)):0){$pb(e);f=xeb(a,b,c,g)|0;r=d;return f|0}f=Hc()|0;$pb(e);Sc(f|0);return 0}function xeb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;e=r;r=r+16|0;f=e;g=a+4|0;k[g>>2]=0;x=0;fb(422,f|0,a|0,1);h=x;x=0;a:do if(h&1)j=11;else do if(i[f>>0]|0){if((c|0)<=0){l=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,l|0,k[l+16>>2]|4|0);l=x;x=0;if(l&1){j=11;break a}else break}l=c+-1|0;m=b;while(1){if((k[g>>2]|0)>=(l|0)){n=m;o=0;j=19;break}p=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;q=k[p+12>>2]|0;if((q|0)==(k[p+16>>2]|0)){x=0;s=Ba(k[(k[p>>2]|0)+36>>2]|0,p|0)|0;p=x;x=0;if(p&1){j=10;break}else t=s}else t=k[q>>2]|0;if((t|0)==-1){n=m;o=2;j=19;break}if((t|0)==(d|0)){n=m;o=0;j=19;break}q=m+4|0;k[m>>2]=t;k[g>>2]=(k[g>>2]|0)+1;s=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;p=s+12|0;u=k[p>>2]|0;if((u|0)==(k[s+16>>2]|0)){x=0;Ba(k[(k[s>>2]|0)+40>>2]|0,s|0)|0;s=x;x=0;if(s&1){j=10;break}else{m=q;continue}}else{k[p>>2]=u+4;m=q;continue}}if((j|0)==10){m=Hc(0)|0;v=a;w=a;y=m;j=12;break a}else if((j|0)==19){k[n>>2]=0;m=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,m|0,k[m+16>>2]|((k[g>>2]|0)==0?o|4:o)|0);m=x;x=0;if(m&1){j=11;break a}else break}}while(0);while(0);if((j|0)==11){o=Hc(0)|0;v=a;w=a;y=o;j=12}do if((j|0)==12){me(y|0)|0;x=0;va(1452,v+(k[(k[w>>2]|0)+-12>>2]|0)|0);o=x;x=0;if(!(o&1)){ge();break}o=Hc()|0;x=0;hb(45);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(o|0)}while(0);r=e;return a|0}function yeb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[d>>2]=e;x=0;e=Ta(495,d|0,74140)|0;f=x;x=0;if(!(f&1)?(x=0,f=Ta(k[(k[e>>2]|0)+44>>2]|0,e|0,10)|0,e=x,x=0,!(e&1)):0){$pb(d);e=zeb(a,b,f)|0;r=c;return e|0}e=Hc()|0;$pb(d);Sc(e|0);return 0}function zeb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d;f=a+4|0;k[f>>2]=0;x=0;fb(422,e|0,a|0,1);g=x;x=0;do if(!(g&1)){if(i[e>>0]|0){h=b+24|0;j=b+28|0;while(1){l=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;m=k[l+12>>2]|0;if((m|0)==(k[l+16>>2]|0)){x=0;n=Ba(k[(k[l>>2]|0)+36>>2]|0,l|0)|0;l=x;x=0;if(l&1){o=11;break}else p=n}else p=k[m>>2]|0;if((p|0)==-1){q=2;break}if((p|0)==(c|0)){q=0;break}m=k[h>>2]|0;if((m|0)==(k[j>>2]|0)){x=0;n=Ta(k[(k[b>>2]|0)+52>>2]|0,b|0,p|0)|0;l=x;x=0;if(l&1){o=11;break}if((n|0)==-1){q=0;break}}else{k[h>>2]=m+4;k[m>>2]=p}k[f>>2]=(k[f>>2]|0)+1;m=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;n=m+12|0;l=k[n>>2]|0;if((l|0)==(k[m+16>>2]|0)){x=0;Ba(k[(k[m>>2]|0)+40>>2]|0,m|0)|0;m=x;x=0;if(m&1){o=11;break}else continue}else{k[n>>2]=l+4;continue}}if((o|0)==11){h=Hc(0)|0;me(h|0)|0;x=0;hb(45);h=x;x=0;if(h&1){o=8;break}else q=0}h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|((k[f>>2]|0)==0?q|4:q)|0);h=x;x=0;if(h&1){o=8;break}}}else o=8;while(0);do if((o|0)==8){q=Hc(0)|0;me(q|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);q=x;x=0;if(!(q&1)){ge();break}q=Hc()|0;x=0;hb(45);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(q|0)}while(0);r=d;return a|0}function Aeb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;f=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[e>>2]=f;x=0;f=Ta(495,e|0,74140)|0;g=x;x=0;if(!(g&1)?(x=0,g=Ta(k[(k[f>>2]|0)+44>>2]|0,f|0,10)|0,f=x,x=0,!(f&1)):0){$pb(e);f=Beb(a,b,c,g)|0;r=d;return f|0}f=Hc()|0;$pb(e);Sc(f|0);return 0}function Beb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;e=r;r=r+16|0;f=e;g=a+4|0;k[g>>2]=0;x=0;fb(422,f|0,a|0,1);h=x;x=0;do if(!(h&1)){if(i[f>>0]|0){j=c+-1|0;l=b;while(1){m=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;n=k[m+12>>2]|0;if((n|0)==(k[m+16>>2]|0)){x=0;o=Ba(k[(k[m>>2]|0)+36>>2]|0,m|0)|0;m=x;x=0;if(m&1){p=8;break}else q=o}else q=k[n>>2]|0;if((q|0)==-1){s=l;t=2;break}if((q|0)==(d|0)){u=l;p=14;break}n=k[g>>2]|0;if((n|0)>=(j|0)){s=l;t=4;break}o=l+4|0;k[l>>2]=q;m=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;v=m+12|0;w=k[v>>2]|0;if((w|0)==(k[m+16>>2]|0)){x=0;Ba(k[(k[m>>2]|0)+40>>2]|0,m|0)|0;m=x;x=0;if(m&1){p=8;break}y=k[g>>2]|0}else{k[v>>2]=w+4;y=n}k[g>>2]=y+1;l=o}if((p|0)==8){l=Hc(0)|0;z=a;A=a;B=l;p=10;break}if((p|0)==14){l=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;j=l+12|0;o=k[j>>2]|0;if((o|0)==(k[l+16>>2]|0)){x=0;Ba(k[(k[l>>2]|0)+40>>2]|0,l|0)|0;l=x;x=0;if(l&1){p=9;break}}else k[j>>2]=o+4;k[g>>2]=(k[g>>2]|0)+1;s=u;t=0}if((c|0)>0)k[s>>2]=0;o=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,o|0,k[o+16>>2]|((k[g>>2]|0)==0?t|4:t)|0);o=x;x=0;if(o&1){p=9;break}}}else p=9;while(0);if((p|0)==9){t=Hc(0)|0;z=a;A=a;B=t;p=10}do if((p|0)==10){me(B|0)|0;x=0;va(1452,z+(k[(k[A>>2]|0)+-12>>2]|0)|0);t=x;x=0;if(!(t&1)){ge();break}t=Hc()|0;x=0;hb(45);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(t|0)}while(0);r=e;return a|0}function Ceb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+16|0;e=d;f=a+4|0;k[f>>2]=0;x=0;fb(422,e|0,a|0,1);g=x;x=0;a:do if(!(g&1)){if(i[e>>0]|0){b:do if((b|0)==2147483647){while(1){h=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;j=h+12|0;l=k[j>>2]|0;if((l|0)==(k[h+16>>2]|0)){x=0;m=Ba(k[(k[h>>2]|0)+40>>2]|0,h|0)|0;h=x;x=0;if(h&1)break;else n=m}else{k[j>>2]=l+4;n=k[l>>2]|0}if((n|0)==-1){o=2;break b}k[f>>2]=(k[f>>2]|0)+1;if((n|0)==(c|0)){o=0;break b}}l=Hc(0)|0;p=a;q=a;s=l;t=13;break a}else{l=k[f>>2]|0;while(1){if((l|0)>=(b|0)){o=0;break b}j=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;m=j+12|0;h=k[m>>2]|0;if((h|0)==(k[j+16>>2]|0)){x=0;u=Ba(k[(k[j>>2]|0)+40>>2]|0,j|0)|0;j=x;x=0;if(j&1)break;else v=u}else{k[m>>2]=h+4;v=k[h>>2]|0}if((v|0)==-1){o=2;break b}l=(k[f>>2]|0)+1|0;k[f>>2]=l;if((v|0)==(c|0)){o=0;break b}}l=Hc(0)|0;w=l;t=12;break a}while(0);l=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,l|0,k[l+16>>2]|o|0);l=x;x=0;if(l&1){t=11;break}}}else t=11;while(0);if((t|0)==11){o=Hc(0)|0;w=o;t=12}if((t|0)==12){p=a;q=a;s=w;t=13}do if((t|0)==13){me(s|0)|0;x=0;va(1452,q+(k[(k[p>>2]|0)+-12>>2]|0)|0);w=x;x=0;if(!(w&1)){ge();break}w=Hc()|0;x=0;hb(45);o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)}else Sc(w|0)}while(0);r=d;return a|0}function Deb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b;k[a+4>>2]=0;x=0;fb(422,c|0,a|0,1);d=x;x=0;do if(d&1)e=8;else{if(i[c>>0]|0){f=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;g=k[f+12>>2]|0;if((g|0)==(k[f+16>>2]|0)){x=0;h=Ba(k[(k[f>>2]|0)+36>>2]|0,f|0)|0;f=x;x=0;if(f&1){e=8;break}else j=h}else j=k[g>>2]|0;if((j|0)==-1){g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,g|0,k[g+16>>2]|2|0);g=x;x=0;if(g&1){e=8;break}else l=-1}else l=j}else l=-1;m=l}while(0);do if((e|0)==8){l=Hc(0)|0;me(l|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();m=-1;break}l=Hc()|0;x=0;hb(45);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else Sc(l|0)}while(0);r=b;return m|0}function Eeb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=a+4|0;k[f>>2]=0;x=0;fb(422,e|0,a|0,1);g=x;x=0;do if(!(g&1)){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;if(!(i[e>>0]|0)){x=0;xa(612,h|0,k[h+16>>2]|4|0);j=x;x=0;if(j&1){l=6;break}}else{j=k[h+24>>2]|0;x=0;h=Fa(k[(k[j>>2]|0)+32>>2]|0,j|0,b|0,c|0)|0;j=x;x=0;if(j&1){l=6;break}k[f>>2]=h;if((h|0)!=(c|0)?(h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,x=0,xa(612,h|0,k[h+16>>2]|6|0),h=x,x=0,h&1):0){l=6;break}}}else l=6;while(0);do if((l|0)==6){c=Hc(0)|0;me(c|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);c=x;x=0;if(!(c&1)){ge();break}c=Hc()|0;x=0;hb(45);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else Sc(c|0)}while(0);r=d;return a|0}function Feb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a+4|0;k[d>>2]=0;e=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;f=k[e+12>>2]|0;g=k[e+16>>2]|0;if(f>>>0>>0)h=g-f>>2;else h=Vf[k[(k[e>>2]|0)+28>>2]&1023](e)|0;switch(h|0){case -1:{e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;cab(e,k[e+16>>2]|2);break}case 0:break;default:Eeb(a,b,(h|0)>(c|0)?c:h)|0}return k[d>>2]|0}function Geb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+16|0;d=c;k[a+4>>2]=0;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,e|0,k[e+16>>2]&-3|0);e=x;x=0;a:do if(!(e&1)?(x=0,fb(422,d|0,a|0,1),f=x,x=0,!(f&1)):0){f=k[(k[a>>2]|0)+-12>>2]|0;g=a+f|0;do if(!(i[d>>0]|0)){x=0;xa(612,g|0,k[g+16>>2]|4|0);h=x;x=0;if(h&1){j=12;break a}}else{h=k[g+24>>2]|0;if(!h)l=f;else{m=h+12|0;n=k[m>>2]|0;if((k[h+8>>2]|0)!=(n|0)?(o=n+-4|0,(k[o>>2]|0)==(b|0)):0){k[m>>2]=o;p=b}else{x=0;o=Ta(k[(k[h>>2]|0)+44>>2]|0,h|0,b|0)|0;h=x;x=0;if(h&1){j=12;break a}else p=o}if((p|0)!=-1)break;l=k[(k[a>>2]|0)+-12>>2]|0}o=a+l|0;x=0;xa(612,o|0,k[o+16>>2]|1|0);o=x;x=0;if(o&1){j=12;break a}}while(0)}else j=12;while(0);do if((j|0)==12){l=Hc(0)|0;me(l|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);l=x;x=0;if(!(l&1)){ge();break}l=Hc()|0;x=0;hb(45);p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)}else Sc(l|0)}while(0);r=c;return a|0}function Heb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b;k[a+4>>2]=0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,d|0,k[d+16>>2]&-3|0);d=x;x=0;a:do if(!(d&1)?(x=0,fb(422,c|0,a|0,1),e=x,x=0,!(e&1)):0){e=k[(k[a>>2]|0)+-12>>2]|0;f=a+e|0;do if(!(i[c>>0]|0)){x=0;xa(612,f|0,k[f+16>>2]|4|0);g=x;x=0;if(g&1){h=11;break a}}else{g=k[f+24>>2]|0;if(!g)j=e;else{l=g+12|0;m=k[l>>2]|0;if((k[g+8>>2]|0)==(m|0)){x=0;n=Ta(k[(k[g>>2]|0)+44>>2]|0,g|0,-1)|0;g=x;x=0;if(g&1){h=11;break a}else o=n}else{n=m+-4|0;k[l>>2]=n;o=k[n>>2]|0}if((o|0)!=-1)break;j=k[(k[a>>2]|0)+-12>>2]|0}n=a+j|0;x=0;xa(612,n|0,k[n+16>>2]|1|0);n=x;x=0;if(n&1){h=11;break a}}while(0)}else h=11;while(0);do if((h|0)==11){j=Hc(0)|0;me(j|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);j=x;x=0;if(!(j&1)){ge();break}j=Hc()|0;x=0;hb(45);o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)}else Sc(j|0)}while(0);r=b;return a|0}function Ieb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;x=0;fb(422,c|0,a|0,1);d=x;x=0;do if(d&1)e=4;else{if(i[c>>0]|0){f=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;if(!f){g=-1;break}x=0;h=Ba(k[(k[f>>2]|0)+24>>2]|0,f|0)|0;f=x;x=0;if(f&1){e=4;break}if((h|0)==-1){h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|1|0);h=x;x=0;if(h&1){e=4;break}g=-1;break}}g=0}while(0);do if((e|0)==4){c=Hc(0)|0;me(c|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);c=x;x=0;if(!(c&1)){ge();g=0;break}c=Hc()|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(c|0)}while(0);r=b;return g|0}function Jeb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+16|0;e=c;f=a;k[f>>2]=0;k[f+4>>2]=0;f=a+8|0;k[f>>2]=-1;k[f+4>>2]=-1;x=0;fb(422,d|0,b|0,1);f=x;x=0;do if(!(f&1)){if(i[d>>0]|0){g=k[b+(k[(k[b>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;La(k[(k[g>>2]|0)+16>>2]|0,e|0,g|0,0,0,1,8);g=x;x=0;if(g&1){h=5;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];k[a+12>>2]=k[e+12>>2]}}else h=5;while(0);do if((h|0)==5){e=Hc(0)|0;me(e|0)|0;x=0;va(1452,b+(k[(k[b>>2]|0)+-12>>2]|0)|0);e=x;x=0;if(!(e&1)){ge();break}e=Hc()|0;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else Sc(e|0)}while(0);r=c;return}function Keb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+48|0;d=c+16|0;e=c+32|0;f=c;g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,g|0,k[g+16>>2]&-3|0);g=x;x=0;do if(!(g&1)?(x=0,fb(422,e|0,a|0,1),h=x,x=0,!(h&1)):0){if(i[e>>0]|0){h=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;j=k[(k[h>>2]|0)+20>>2]|0;x=0;k[d>>2]=k[b>>2];k[d+4>>2]=k[b+4>>2];k[d+8>>2]=k[b+8>>2];k[d+12>>2]=k[b+12>>2];nb(j|0,f|0,h|0,d|0,8);h=x;x=0;if(h&1){l=7;break}h=f+8|0;if(((k[h>>2]|0)==-1?(k[h+4>>2]|0)==-1:0)?(h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,x=0,xa(612,h|0,k[h+16>>2]|4|0),h=x,x=0,h&1):0){l=7;break}}}else l=7;while(0);do if((l|0)==7){f=Hc(0)|0;me(f|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(f|0)}while(0);r=c;return a|0}function Leb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=r;r=r+32|0;f=e+16|0;g=e;x=0;fb(422,f|0,a|0,1);h=x;x=0;do if(!(h&1)){if(i[f>>0]|0){j=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;La(k[(k[j>>2]|0)+16>>2]|0,g|0,j|0,b|0,c|0,d|0,8);j=x;x=0;if(j&1){l=6;break}j=g+8|0;if(((k[j>>2]|0)==-1?(k[j+4>>2]|0)==-1:0)?(j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,x=0,xa(612,j|0,k[j+16>>2]|4|0),j=x,x=0,j&1):0){l=6;break}}}else l=6;while(0);do if((l|0)==6){g=Hc(0)|0;me(g|0)|0;x=0;va(1452,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);g=x;x=0;if(!(g&1)){ge();break}g=Hc()|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else Sc(g|0)}while(0);r=e;return a|0}function Meb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+4>>2];b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;Eab(b,c);k[b+72>>2]=0;k[b+76>>2]=-1;return}function Neb(a,b){a=a|0;b=b|0;k[a>>2]=71744;k[a+4>>2]=71764;Eab(a+4|0,b);k[a+76>>2]=0;k[a+80>>2]=-1;return}function Oeb(a,b){a=a|0;b=b|0;return}function Peb(a){a=a|0;lab(a+4|0);return}function Qeb(a){a=a|0;lab(a+(k[(k[a>>2]|0)+-12>>2]|0)+4|0);return}function Reb(a){a=a|0;lab(a+4|0);OBa(a);return}function Seb(a){a=a|0;Reb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function Teb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+4>>2];b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=c+(k[(k[c>>2]|0)+-12>>2]|0)|0;Gab(b,a);c=a+72|0;k[b+72>>2]=k[c>>2];k[c>>2]=0;k[b+76>>2]=k[a+76>>2];return}function Ueb(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=71744;k[a+4>>2]=71764;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Gab(a+4|0,c);b=c+72|0;k[a+76>>2]=k[b>>2];k[b>>2]=0;k[a+80>>2]=k[c+76>>2];return}function Veb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;d=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(c,d);b=c+72|0;e=d+72|0;f=k[b>>2]|0;k[b>>2]=k[e>>2];k[e>>2]=f;f=c+76|0;c=d+76|0;d=k[f>>2]|0;k[f>>2]=k[c>>2];k[c>>2]=d;return a|0}function Web(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(c,a);b=c+72|0;d=a+72|0;e=k[b>>2]|0;k[b>>2]=k[d>>2];k[d>>2]=e;e=c+76|0;c=a+76|0;a=k[e>>2]|0;k[e>>2]=k[c>>2];k[c>>2]=a;return}function Xeb(a,b){a=a|0;b=b|0;var c=0;i[a>>0]=0;k[a+4>>2]=b;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;if(!(k[c+16>>2]|0)){b=k[c+72>>2]|0;if(b)cdb(b)|0;i[a>>0]=1}return}function Yeb(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;c=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;do if((((k[c+24>>2]|0)!=0?(k[c+16>>2]|0)==0:0)?(k[c+4>>2]&8192|0)!=0:0)?!(Eb()|0):0){a=k[b>>2]|0;d=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;a=Ba(k[(k[d>>2]|0)+24>>2]|0,d|0)|0;d=x;x=0;if(!(d&1)){if((a|0)!=-1)break;a=k[b>>2]|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,d|0,k[d+16>>2]|1|0);d=x;x=0;if(!(d&1))break}d=Hc(0)|0;me(d|0)|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}}while(0);return}function Zeb(a){a=a|0;return (i[a>>0]|0)!=0|0}function _eb(a,b){a=a|0;b=b|0;return Vf[b&1023](a)|0}function $eb(a,b){a=a|0;b=b|0;Vf[b&1023](a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;return a|0}function afb(a,b){a=a|0;b=b|0;Vf[b&1023](a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;return a|0}function bfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+12>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z&255|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function cfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;p=k[j+4>>2]&74;q=zab(j)|0;k[g>>2]=q;x=0;q=Ta(495,g|0,72472)|0;j=x;x=0;if(j&1){j=Hc(0)|0;$pb(g);s=j}else{$pb(g);j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;t=k[j+24>>2]|0;u=j+76|0;v=k[u>>2]|0;do if((v|0)==-1){w=zab(j)|0;k[d>>2]=w;x=0;w=Ta(495,d|0,74148)|0;y=x;x=0;if(!(y&1)?(x=0,y=Ta(k[(k[w>>2]|0)+28>>2]|0,w|0,32)|0,w=x,x=0,!(w&1)):0){$pb(d);w=y<<24>>24;k[u>>2]=w;z=j;A=w;o=10;break}w=Hc(0)|0;$pb(d);B=w}else{z=j;A=v;o=10}while(0);if((o|0)==10){v=k[(k[q>>2]|0)+16>>2]|0;k[e>>2]=t;x=0;k[d>>2]=k[e>>2];j=Va(v|0,q|0,d|0,z|0,A&255|0,((p|0)==64|(p|0)==8?b&65535:b<<16>>16)|0)|0;v=x;x=0;if(!(v&1)){if(j)break;j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,j|0,k[j+16>>2]|5|0);j=x;x=0;if(!(j&1))break}j=Hc(0)|0;B=j}s=B}Yeb(f);l=s;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}else Sc(f|0)}while(0);r=c;return a|0}function dfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+24>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z&255|0,b&65535|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function efb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+16>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z&255|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function ffb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+24>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z&255|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function gfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+16>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z&255|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function hfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+24>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z&255|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function ifb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+32|0;e=d+16|0;f=d+12|0;g=d;h=d+8|0;x=0;xa(611,g|0,a|0);j=x;x=0;a:do if(j&1){l=Hc(0)|0;m=l;n=a;o=a;p=19}else{do if(i[g>>0]|0){l=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[h>>2]=l;x=0;l=Ta(495,h|0,72472)|0;q=x;x=0;if(q&1){q=Hc(0)|0;$pb(h);s=q}else{$pb(h);q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;t=k[q+24>>2]|0;u=q+76|0;v=k[u>>2]|0;do if((v|0)==-1){w=zab(q)|0;k[e>>2]=w;x=0;w=Ta(495,e|0,74148)|0;y=x;x=0;if(!(y&1)?(x=0,y=Ta(k[(k[w>>2]|0)+28>>2]|0,w|0,32)|0,w=x,x=0,!(w&1)):0){$pb(e);w=y<<24>>24;k[u>>2]=w;z=q;A=w;p=10;break}w=Hc(0)|0;$pb(e);B=w}else{z=q;A=v;p=10}while(0);if((p|0)==10){v=k[(k[l>>2]|0)+20>>2]|0;k[f>>2]=t;x=0;k[e>>2]=k[f>>2];q=za(v|0,l|0,e|0,z|0,A&255|0,b|0,c|0)|0;v=x;x=0;if(!(v&1)){if(q)break;q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,q|0,k[q+16>>2]|5|0);q=x;x=0;if(!(q&1))break}q=Hc(0)|0;B=q}s=B}Yeb(g);m=s;n=a;o=a;p=19;break a}while(0);Yeb(g)}while(0);do if((p|0)==19){me(m|0)|0;x=0;va(1452,n+(k[(k[o>>2]|0)+-12>>2]|0)|0);g=x;x=0;if(!(g&1)){ge();break}g=Hc()|0;x=0;hb(45);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}else Sc(g|0)}while(0);r=d;return a|0}function jfb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+32|0;e=d+16|0;f=d+12|0;g=d;h=d+8|0;x=0;xa(611,g|0,a|0);j=x;x=0;a:do if(j&1){l=Hc(0)|0;m=l;n=a;o=a;p=19}else{do if(i[g>>0]|0){l=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[h>>2]=l;x=0;l=Ta(495,h|0,72472)|0;q=x;x=0;if(q&1){q=Hc(0)|0;$pb(h);s=q}else{$pb(h);q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;t=k[q+24>>2]|0;u=q+76|0;v=k[u>>2]|0;do if((v|0)==-1){w=zab(q)|0;k[e>>2]=w;x=0;w=Ta(495,e|0,74148)|0;y=x;x=0;if(!(y&1)?(x=0,y=Ta(k[(k[w>>2]|0)+28>>2]|0,w|0,32)|0,w=x,x=0,!(w&1)):0){$pb(e);w=y<<24>>24;k[u>>2]=w;z=q;A=w;p=10;break}w=Hc(0)|0;$pb(e);B=w}else{z=q;A=v;p=10}while(0);if((p|0)==10){v=k[(k[l>>2]|0)+28>>2]|0;k[f>>2]=t;x=0;k[e>>2]=k[f>>2];q=za(v|0,l|0,e|0,z|0,A&255|0,b|0,c|0)|0;v=x;x=0;if(!(v&1)){if(q)break;q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,q|0,k[q+16>>2]|5|0);q=x;x=0;if(!(q&1))break}q=Hc(0)|0;B=q}s=B}Yeb(g);m=s;n=a;o=a;p=19;break a}while(0);Yeb(g)}while(0);do if((p|0)==19){me(m|0)|0;x=0;va(1452,n+(k[(k[o>>2]|0)+-12>>2]|0)|0);g=x;x=0;if(!(g&1)){ge();break}g=Hc()|0;x=0;hb(45);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}else Sc(g|0)}while(0);r=d;return a|0}function kfb(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+32>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=lb(u|0,j|0,d|0,y|0,z&255|0,+b)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function lfb(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+32>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=lb(u|0,j|0,d|0,y|0,z&255|0,+b)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function mfb(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+36>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=lb(u|0,j|0,d|0,y|0,z&255|0,+b)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function nfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(611,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72472)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74148)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);v=w<<24>>24;k[t>>2]=v;y=p;z=v;o=10;break}v=Hc(0)|0;$pb(d);A=v}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+40>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z&255|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Yeb(f);l=q;m=a;n=a;o=19;break a}while(0);Yeb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function ofb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+16|0;d=c;x=0;xa(611,d|0,a|0);e=x;x=0;a:do if(e&1){f=Hc(0)|0;g=f;h=a;j=a;m=33}else{b:do if(i[d>>0]|0){f=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;do if(!b){x=0;xa(612,f|0,k[f+16>>2]|1|0);n=x;x=0;if(n&1)m=18;else break b}else{n=k[f+24>>2]|0;o=n;p=(n|0)==0;q=o+24|0;s=o+28|0;t=n;n=0;u=b;while(1){if(!u){v=n;m=27;break}if((k[u+12>>2]|0)==(k[u+16>>2]|0)){x=0;w=Ba(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;y=x;x=0;if(y&1){m=19;break}y=(w|0)==-1?0:u;if(!y){v=n;m=27;break}else z=y}else z=u;y=z+12|0;w=k[y>>2]|0;A=z+16|0;if((w|0)==(k[A>>2]|0)){x=0;B=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;C=x;x=0;if(C&1){m=19;break}else D=B}else D=l[w>>0]|0;w=D&255;if(p){v=n;m=27;break}B=k[q>>2]|0;if((B|0)==(k[s>>2]|0)){x=0;C=Ta(k[(k[t>>2]|0)+52>>2]|0,o|0,D&255|0)|0;E=x;x=0;if(E&1){m=19;break}if((C|0)==-1){v=n;m=27;break}}else{k[q>>2]=B+1;i[B>>0]=w}w=k[y>>2]|0;if((w|0)==(k[A>>2]|0)){x=0;Ba(k[(k[z>>2]|0)+40>>2]|0,z|0)|0;A=x;x=0;if(A&1){m=19;break}}else k[y>>2]=w+1;n=n+1|0;u=z}if((m|0)==19){u=Hc(0)|0;F=u}else if((m|0)==27){if(v)break b;u=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,u|0,k[u+16>>2]|4|0);u=x;x=0;if(!(u&1))break b;u=Hc(0)|0;F=u}me(F|0)|0;x=0;va(1542,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);u=x;x=0;if(u&1){u=Hc(0)|0;x=0;hb(45);n=x;x=0;if(n&1){m=38;break a}else{G=u;break}}else{x=0;hb(45);u=x;x=0;if(u&1){m=18;break}else break b}}while(0);if((m|0)==18){f=Hc(0)|0;G=f}Yeb(d);g=G;h=a;j=a;m=33;break a}while(0);Yeb(d);m=35}while(0);do if((m|0)==33){me(g|0)|0;x=0;va(1452,h+(k[(k[j>>2]|0)+-12>>2]|0)|0);d=x;x=0;if(!(d&1)){ge();m=35;break}d=Hc()|0;x=0;hb(45);G=x;x=0;if(G&1)m=38;else Sc(d|0)}while(0);if((m|0)==35){r=c;return a|0}else if((m|0)==38){m=Hc(0)|0;Fg(m)}return 0}function pfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+16|0;d=c;x=0;xa(611,d|0,a|0);e=x;x=0;a:do if(e&1){f=Hc(0)|0;g=f;h=a;j=a;l=11}else{do if(i[d>>0]|0){f=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;m=f;if(f){n=m+24|0;o=k[n>>2]|0;if((o|0)!=(k[m+28>>2]|0)){k[n>>2]=o+1;i[o>>0]=b;break}x=0;o=Ta(k[(k[f>>2]|0)+52>>2]|0,m|0,b&255|0)|0;m=x;x=0;if(!(m&1))if((o|0)==-1)l=8;else break}else l=8;if((l|0)==8?(o=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,x=0,xa(612,o|0,k[o+16>>2]|1|0),o=x,x=0,!(o&1)):0)break;o=Hc(0)|0;Yeb(d);g=o;h=a;j=a;l=11;break a}while(0);Yeb(d)}while(0);do if((l|0)==11){me(g|0)|0;x=0;va(1452,h+(k[(k[j>>2]|0)+-12>>2]|0)|0);d=x;x=0;if(!(d&1)){ge();break}d=Hc()|0;x=0;hb(45);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else Sc(d|0)}while(0);r=c;return a|0}function qfb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+16|0;e=d;x=0;xa(611,e|0,a|0);f=x;x=0;a:do if(f&1){g=Hc(0)|0;h=g;j=a;l=a;m=8}else{do if((c|0)!=0&(i[e>>0]|0)!=0){g=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;n=Fa(k[(k[g>>2]|0)+48>>2]|0,g|0,b|0,c|0)|0;g=x;x=0;if(!(g&1)){if((n|0)==(c|0))break;n=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,n|0,k[n+16>>2]|1|0);n=x;x=0;if(!(n&1))break}n=Hc(0)|0;Yeb(e);h=n;j=a;l=a;m=8;break a}while(0);Yeb(e)}while(0);do if((m|0)==8){me(h|0)|0;x=0;va(1452,j+(k[(k[l>>2]|0)+-12>>2]|0)|0);e=x;x=0;if(!(e&1)){ge();break}e=Hc()|0;x=0;hb(45);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else Sc(e|0)}while(0);r=d;return a|0}function rfb(a,b){a=a|0;b=b|0;var c=0;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;if(!(k[c+16>>2]&5)){b=k[c+24>>2]|0;_f[k[(k[b>>2]|0)+16>>2]&127](a,b,0,0,1,16)}else{b=a;k[b>>2]=0;k[b+4>>2]=0;b=a+8|0;k[b>>2]=-1;k[b+4>>2]=-1}return}function sfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+48|0;d=c+16|0;e=c+32|0;f=c;Xeb(e,a);do if(i[e>>0]|0){g=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;h=k[(k[g>>2]|0)+20>>2]|0;x=0;k[d>>2]=k[b>>2];k[d+4>>2]=k[b+4>>2];k[d+8>>2]=k[b+8>>2];k[d+12>>2]=k[b+12>>2];nb(h|0,f|0,g|0,d|0,16);g=x;x=0;if(!(g&1)){g=f+8|0;if(!((k[g>>2]|0)==-1?(k[g+4>>2]|0)==-1:0))break;g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,g|0,k[g+16>>2]|4|0);g=x;x=0;if(!(g&1))break}g=Hc()|0;Yeb(e);Sc(g|0)}while(0);Yeb(e);r=c;return a|0}function tfb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+32|0;f=e+16|0;g=e;Xeb(f,a);do if(i[f>>0]|0){h=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;La(k[(k[h>>2]|0)+16>>2]|0,g|0,h|0,b|0,c|0,d|0,16);h=x;x=0;if(!(h&1)){h=g+8|0;if(!((k[h>>2]|0)==-1?(k[h+4>>2]|0)==-1:0))break;h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|4|0);h=x;x=0;if(!(h&1))break}h=Hc()|0;Yeb(f);Sc(h|0)}while(0);Yeb(f);r=e;return a|0}function ufb(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;k[a>>2]=c;k[a+(k[c+-12>>2]|0)>>2]=k[b+4>>2];return}function vfb(a){a=a|0;k[a>>2]=71744;k[a+4>>2]=71764;return}function wfb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+4>>2];b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;Eab(b,c);k[b+72>>2]=0;k[b+76>>2]=-1;return}function xfb(a,b){a=a|0;b=b|0;k[a>>2]=71792;k[a+4>>2]=71812;Eab(a+4|0,b);k[a+76>>2]=0;k[a+80>>2]=-1;return}function yfb(a,b){a=a|0;b=b|0;return}function zfb(a){a=a|0;lab(a+4|0);return}function Afb(a){a=a|0;lab(a+(k[(k[a>>2]|0)+-12>>2]|0)+4|0);return}function Bfb(a){a=a|0;lab(a+4|0);OBa(a);return}function Cfb(a){a=a|0;Bfb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function Dfb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+4>>2];b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=c+(k[(k[c>>2]|0)+-12>>2]|0)|0;Gab(b,a);c=a+72|0;k[b+72>>2]=k[c>>2];k[c>>2]=0;k[b+76>>2]=k[a+76>>2];return}function Efb(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=71792;k[a+4>>2]=71812;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Gab(a+4|0,c);b=c+72|0;k[a+76>>2]=k[b>>2];k[b>>2]=0;k[a+80>>2]=k[c+76>>2];return}function Ffb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;d=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(c,d);b=c+72|0;e=d+72|0;f=k[b>>2]|0;k[b>>2]=k[e>>2];k[e>>2]=f;f=c+76|0;c=d+76|0;d=k[f>>2]|0;k[f>>2]=k[c>>2];k[c>>2]=d;return a|0}function Gfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(c,a);b=c+72|0;d=a+72|0;e=k[b>>2]|0;k[b>>2]=k[d>>2];k[d>>2]=e;e=c+76|0;c=a+76|0;a=k[e>>2]|0;k[e>>2]=k[c>>2];k[c>>2]=a;return}function Hfb(a,b){a=a|0;b=b|0;var c=0;i[a>>0]=0;k[a+4>>2]=b;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;if(!(k[c+16>>2]|0)){b=k[c+72>>2]|0;if(b)aeb(b)|0;i[a>>0]=1}return}function Ifb(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;c=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;do if((((k[c+24>>2]|0)!=0?(k[c+16>>2]|0)==0:0)?(k[c+4>>2]&8192|0)!=0:0)?!(Eb()|0):0){a=k[b>>2]|0;d=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;a=Ba(k[(k[d>>2]|0)+24>>2]|0,d|0)|0;d=x;x=0;if(!(d&1)){if((a|0)!=-1)break;a=k[b>>2]|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,d|0,k[d+16>>2]|1|0);d=x;x=0;if(!(d&1))break}d=Hc(0)|0;me(d|0)|0;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}}while(0);return}function Jfb(a){a=a|0;return (i[a>>0]|0)!=0|0}function Kfb(a,b){a=a|0;b=b|0;return Vf[b&1023](a)|0}function Lfb(a,b){a=a|0;b=b|0;Vf[b&1023](a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;return a|0}function Mfb(a,b){a=a|0;b=b|0;Vf[b&1023](a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;return a|0}function Nfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+12>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Ofb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;p=k[j+4>>2]&74;q=zab(j)|0;k[g>>2]=q;x=0;q=Ta(495,g|0,72532)|0;j=x;x=0;if(j&1){j=Hc(0)|0;$pb(g);s=j}else{$pb(g);j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;t=k[j+24>>2]|0;u=j+76|0;v=k[u>>2]|0;do if((v|0)==-1){w=zab(j)|0;k[d>>2]=w;x=0;w=Ta(495,d|0,74140)|0;y=x;x=0;if(!(y&1)?(x=0,y=Ta(k[(k[w>>2]|0)+44>>2]|0,w|0,32)|0,w=x,x=0,!(w&1)):0){$pb(d);k[u>>2]=y;z=j;A=y;o=10;break}y=Hc(0)|0;$pb(d);B=y}else{z=j;A=v;o=10}while(0);if((o|0)==10){v=k[(k[q>>2]|0)+16>>2]|0;k[e>>2]=t;x=0;k[d>>2]=k[e>>2];j=Va(v|0,q|0,d|0,z|0,A|0,((p|0)==64|(p|0)==8?b&65535:b<<16>>16)|0)|0;v=x;x=0;if(!(v&1)){if(j)break;j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,j|0,k[j+16>>2]|5|0);j=x;x=0;if(!(j&1))break}j=Hc(0)|0;B=j}s=B}Ifb(f);l=s;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}else Sc(f|0)}while(0);r=c;return a|0}function Pfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+24>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z|0,b&65535|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Qfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+16>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Rfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+24>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Sfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+16>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Tfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+24>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Ufb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+32|0;e=d+16|0;f=d+12|0;g=d;h=d+8|0;x=0;xa(947,g|0,a|0);j=x;x=0;a:do if(j&1){l=Hc(0)|0;m=l;n=a;o=a;p=19}else{do if(i[g>>0]|0){l=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[h>>2]=l;x=0;l=Ta(495,h|0,72532)|0;q=x;x=0;if(q&1){q=Hc(0)|0;$pb(h);s=q}else{$pb(h);q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;t=k[q+24>>2]|0;u=q+76|0;v=k[u>>2]|0;do if((v|0)==-1){w=zab(q)|0;k[e>>2]=w;x=0;w=Ta(495,e|0,74140)|0;y=x;x=0;if(!(y&1)?(x=0,y=Ta(k[(k[w>>2]|0)+44>>2]|0,w|0,32)|0,w=x,x=0,!(w&1)):0){$pb(e);k[u>>2]=y;z=q;A=y;p=10;break}y=Hc(0)|0;$pb(e);B=y}else{z=q;A=v;p=10}while(0);if((p|0)==10){v=k[(k[l>>2]|0)+20>>2]|0;k[f>>2]=t;x=0;k[e>>2]=k[f>>2];q=za(v|0,l|0,e|0,z|0,A|0,b|0,c|0)|0;v=x;x=0;if(!(v&1)){if(q)break;q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,q|0,k[q+16>>2]|5|0);q=x;x=0;if(!(q&1))break}q=Hc(0)|0;B=q}s=B}Ifb(g);m=s;n=a;o=a;p=19;break a}while(0);Ifb(g)}while(0);do if((p|0)==19){me(m|0)|0;x=0;va(1452,n+(k[(k[o>>2]|0)+-12>>2]|0)|0);g=x;x=0;if(!(g&1)){ge();break}g=Hc()|0;x=0;hb(45);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}else Sc(g|0)}while(0);r=d;return a|0}function Vfb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+32|0;e=d+16|0;f=d+12|0;g=d;h=d+8|0;x=0;xa(947,g|0,a|0);j=x;x=0;a:do if(j&1){l=Hc(0)|0;m=l;n=a;o=a;p=19}else{do if(i[g>>0]|0){l=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[h>>2]=l;x=0;l=Ta(495,h|0,72532)|0;q=x;x=0;if(q&1){q=Hc(0)|0;$pb(h);s=q}else{$pb(h);q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;t=k[q+24>>2]|0;u=q+76|0;v=k[u>>2]|0;do if((v|0)==-1){w=zab(q)|0;k[e>>2]=w;x=0;w=Ta(495,e|0,74140)|0;y=x;x=0;if(!(y&1)?(x=0,y=Ta(k[(k[w>>2]|0)+44>>2]|0,w|0,32)|0,w=x,x=0,!(w&1)):0){$pb(e);k[u>>2]=y;z=q;A=y;p=10;break}y=Hc(0)|0;$pb(e);B=y}else{z=q;A=v;p=10}while(0);if((p|0)==10){v=k[(k[l>>2]|0)+28>>2]|0;k[f>>2]=t;x=0;k[e>>2]=k[f>>2];q=za(v|0,l|0,e|0,z|0,A|0,b|0,c|0)|0;v=x;x=0;if(!(v&1)){if(q)break;q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,q|0,k[q+16>>2]|5|0);q=x;x=0;if(!(q&1))break}q=Hc(0)|0;B=q}s=B}Ifb(g);m=s;n=a;o=a;p=19;break a}while(0);Ifb(g)}while(0);do if((p|0)==19){me(m|0)|0;x=0;va(1452,n+(k[(k[o>>2]|0)+-12>>2]|0)|0);g=x;x=0;if(!(g&1)){ge();break}g=Hc()|0;x=0;hb(45);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}else Sc(g|0)}while(0);r=d;return a|0}function Wfb(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+32>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=lb(u|0,j|0,d|0,y|0,z|0,+b)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Xfb(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+32>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=lb(u|0,j|0,d|0,y|0,z|0,+b)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Yfb(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+36>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=lb(u|0,j|0,d|0,y|0,z|0,+b)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function Zfb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;x=0;xa(947,f|0,a|0);h=x;x=0;a:do if(h&1){j=Hc(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=zab(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;x=0;j=Ta(495,g|0,72532)|0;p=x;x=0;if(p&1){p=Hc(0)|0;$pb(g);q=p}else{$pb(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=zab(p)|0;k[d>>2]=v;x=0;v=Ta(495,d|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,w=Ta(k[(k[v>>2]|0)+44>>2]|0,v|0,32)|0,v=x,x=0,!(v&1)):0){$pb(d);k[t>>2]=w;y=p;z=w;o=10;break}w=Hc(0)|0;$pb(d);A=w}else{y=p;z=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+40>>2]|0;k[e>>2]=s;x=0;k[d>>2]=k[e>>2];p=Va(u|0,j|0,d|0,y|0,z|0,b|0)|0;u=x;x=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,p|0,k[p+16>>2]|5|0);p=x;x=0;if(!(p&1))break}p=Hc(0)|0;A=p}q=A}Ifb(f);l=q;m=a;n=a;o=19;break a}while(0);Ifb(f)}while(0);do if((o|0)==19){me(l|0)|0;x=0;va(1452,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=x;x=0;if(!(f&1)){ge();break}f=Hc()|0;x=0;hb(45);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}else Sc(f|0)}while(0);r=c;return a|0}function _fb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+16|0;d=c;x=0;xa(947,d|0,a|0);e=x;x=0;a:do if(e&1){f=Hc(0)|0;g=f;h=a;j=a;l=33}else{b:do if(i[d>>0]|0){f=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;do if(!b){x=0;xa(612,f|0,k[f+16>>2]|1|0);m=x;x=0;if(m&1)l=18;else break b}else{m=k[f+24>>2]|0;n=b+12|0;o=b+16|0;p=m;q=(m|0)==0;s=p+24|0;t=p+28|0;u=m;m=0;while(1){v=k[n>>2]|0;if((v|0)==(k[o>>2]|0)){x=0;w=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;y=x;x=0;if(y&1){l=19;break}else z=w}else z=k[v>>2]|0;v=(z|0)==-1;w=v?0:b;if(v){A=m;l=27;break}v=w+12|0;y=k[v>>2]|0;B=w+16|0;if((y|0)==(k[B>>2]|0)){x=0;C=Ba(k[(k[w>>2]|0)+36>>2]|0,w|0)|0;D=x;x=0;if(D&1){l=19;break}else E=C}else E=k[y>>2]|0;if(q){A=m;l=27;break}y=k[s>>2]|0;if((y|0)==(k[t>>2]|0)){x=0;C=Ta(k[(k[u>>2]|0)+52>>2]|0,p|0,E|0)|0;D=x;x=0;if(D&1){l=19;break}else F=C}else{k[s>>2]=y+4;k[y>>2]=E;F=E}if((F|0)==-1){A=m;l=27;break}y=k[v>>2]|0;if((y|0)==(k[B>>2]|0)){x=0;Ba(k[(k[w>>2]|0)+40>>2]|0,w|0)|0;w=x;x=0;if(w&1){l=19;break}}else k[v>>2]=y+4;m=m+1|0}if((l|0)==19){m=Hc(0)|0;G=m}else if((l|0)==27){if(A)break b;m=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,m|0,k[m+16>>2]|4|0);m=x;x=0;if(!(m&1))break b;m=Hc(0)|0;G=m}me(G|0)|0;x=0;va(1542,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);m=x;x=0;if(m&1){m=Hc(0)|0;x=0;hb(45);s=x;x=0;if(s&1){l=38;break a}else{H=m;break}}else{x=0;hb(45);m=x;x=0;if(m&1){l=18;break}else break b}}while(0);if((l|0)==18){f=Hc(0)|0;H=f}Ifb(d);g=H;h=a;j=a;l=33;break a}while(0);Ifb(d);l=35}while(0);do if((l|0)==33){me(g|0)|0;x=0;va(1452,h+(k[(k[j>>2]|0)+-12>>2]|0)|0);d=x;x=0;if(!(d&1)){ge();l=35;break}d=Hc()|0;x=0;hb(45);H=x;x=0;if(H&1)l=38;else Sc(d|0)}while(0);if((l|0)==35){r=c;return a|0}else if((l|0)==38){l=Hc(0)|0;Fg(l)}return 0}function $fb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c;x=0;xa(947,d|0,a|0);e=x;x=0;a:do if(e&1){f=Hc(0)|0;g=f;h=a;j=a;l=11}else{b:do if(i[d>>0]|0){f=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;m=f;do if(f){n=m+24|0;o=k[n>>2]|0;if((o|0)==(k[m+28>>2]|0)){x=0;p=Ta(k[(k[f>>2]|0)+52>>2]|0,m|0,b|0)|0;q=x;x=0;if(q&1)break;else s=p}else{k[n>>2]=o+4;k[o>>2]=b;s=b}if((s|0)!=-1)break b;else l=8}else l=8;while(0);if((l|0)==8?(m=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,x=0,xa(612,m|0,k[m+16>>2]|1|0),m=x,x=0,!(m&1)):0)break;m=Hc(0)|0;Ifb(d);g=m;h=a;j=a;l=11;break a}while(0);Ifb(d)}while(0);do if((l|0)==11){me(g|0)|0;x=0;va(1452,h+(k[(k[j>>2]|0)+-12>>2]|0)|0);d=x;x=0;if(!(d&1)){ge();break}d=Hc()|0;x=0;hb(45);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}else Sc(d|0)}while(0);r=c;return a|0}function agb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+16|0;e=d;x=0;xa(947,e|0,a|0);f=x;x=0;a:do if(f&1){g=Hc(0)|0;h=g;j=a;l=a;m=8}else{do if((c|0)!=0&(i[e>>0]|0)!=0){g=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;n=Fa(k[(k[g>>2]|0)+48>>2]|0,g|0,b|0,c|0)|0;g=x;x=0;if(!(g&1)){if((n|0)==(c|0))break;n=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,n|0,k[n+16>>2]|1|0);n=x;x=0;if(!(n&1))break}n=Hc(0)|0;Ifb(e);h=n;j=a;l=a;m=8;break a}while(0);Ifb(e)}while(0);do if((m|0)==8){me(h|0)|0;x=0;va(1452,j+(k[(k[l>>2]|0)+-12>>2]|0)|0);e=x;x=0;if(!(e&1)){ge();break}e=Hc()|0;x=0;hb(45);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else Sc(e|0)}while(0);r=d;return a|0}function bgb(a,b){a=a|0;b=b|0;var c=0;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;if(!(k[c+16>>2]&5)){b=k[c+24>>2]|0;_f[k[(k[b>>2]|0)+16>>2]&127](a,b,0,0,1,16)}else{b=a;k[b>>2]=0;k[b+4>>2]=0;b=a+8|0;k[b>>2]=-1;k[b+4>>2]=-1}return}function cgb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+48|0;d=c+16|0;e=c+32|0;f=c;Hfb(e,a);do if(i[e>>0]|0){g=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;h=k[(k[g>>2]|0)+20>>2]|0;x=0;k[d>>2]=k[b>>2];k[d+4>>2]=k[b+4>>2];k[d+8>>2]=k[b+8>>2];k[d+12>>2]=k[b+12>>2];nb(h|0,f|0,g|0,d|0,16);g=x;x=0;if(!(g&1)){g=f+8|0;if(!((k[g>>2]|0)==-1?(k[g+4>>2]|0)==-1:0))break;g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,g|0,k[g+16>>2]|4|0);g=x;x=0;if(!(g&1))break}g=Hc()|0;Ifb(e);Sc(g|0)}while(0);Ifb(e);r=c;return a|0}function dgb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+32|0;f=e+16|0;g=e;Hfb(f,a);do if(i[f>>0]|0){h=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;x=0;La(k[(k[h>>2]|0)+16>>2]|0,g|0,h|0,b|0,c|0,d|0,16);h=x;x=0;if(!(h&1)){h=g+8|0;if(!((k[h>>2]|0)==-1?(k[h+4>>2]|0)==-1:0))break;h=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;x=0;xa(612,h|0,k[h+16>>2]|4|0);h=x;x=0;if(!(h&1))break}h=Hc()|0;Ifb(f);Sc(h|0)}while(0);Ifb(f);r=e;return a|0}function egb(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;k[a>>2]=c;k[a+(k[c+-12>>2]|0)>>2]=k[b+4>>2];return}function fgb(a){a=a|0;k[a>>2]=71792;k[a+4>>2]=71812;return}function ggb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b+4>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+8>>2];k[a+4>>2]=0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;Eab(d,c);k[d+72>>2]=0;k[d+76>>2]=-1;d=a+8|0;c=k[b+12>>2]|0;k[d>>2]=c;k[d+(k[c+-12>>2]|0)>>2]=k[b+16>>2];c=k[b>>2]|0;k[a>>2]=c;k[a+(k[c+-12>>2]|0)>>2]=k[b+20>>2];k[d>>2]=k[b+24>>2];return}function hgb(a,b){a=a|0;b=b|0;k[a>>2]=72080;k[a+12>>2]=72100;k[a+4>>2]=0;Eab(a+12|0,b);k[a+84>>2]=0;k[a+88>>2]=-1;k[a>>2]=71840;k[a+12>>2]=71880;k[a+8>>2]=71860;return}function igb(a,b){a=a|0;b=b|0;return}function jgb(a){a=a|0;lab(a+12|0);return}function kgb(a){a=a|0;lab(a+-8+12|0);return}function lgb(a){a=a|0;lab(a+(k[(k[a>>2]|0)+-12>>2]|0)+12|0);return}function mgb(a){a=a|0;lab(a+12|0);OBa(a);return}function ngb(a){a=a|0;mgb(a+-8|0);return}function ogb(a){a=a|0;mgb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function pgb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=k[b+4>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+8>>2];d=c+4|0;k[a+4>>2]=k[d>>2];k[d>>2]=0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;e=c+(k[(k[c>>2]|0)+-12>>2]|0)|0;Gab(d,e);c=e+72|0;k[d+72>>2]=k[c>>2];k[c>>2]=0;k[d+76>>2]=k[e+76>>2];e=a+8|0;d=k[b+12>>2]|0;k[e>>2]=d;k[e+(k[d+-12>>2]|0)>>2]=k[b+16>>2];d=k[b>>2]|0;k[a>>2]=d;k[a+(k[d+-12>>2]|0)>>2]=k[b+20>>2];k[e>>2]=k[b+24>>2];return}function qgb(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=72080;k[a+12>>2]=72100;c=b+4|0;k[a+4>>2]=k[c>>2];k[c>>2]=0;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Gab(a+12|0,c);b=c+72|0;k[a+84>>2]=k[b>>2];k[b>>2]=0;k[a+88>>2]=k[c+76>>2];k[a>>2]=71840;k[a+12>>2]=71880;k[a+8>>2]=71860;return}function rgb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+4|0;d=b+4|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;d=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(e,d);b=e+72|0;c=d+72|0;f=k[b>>2]|0;k[b>>2]=k[c>>2];k[c>>2]=f;f=e+76|0;e=d+76|0;d=k[f>>2]|0;k[f>>2]=k[e>>2];k[e>>2]=d;return a|0}function sgb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+4|0;d=b+4|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;Jab(e,a);b=e+72|0;d=a+72|0;c=k[b>>2]|0;k[b>>2]=k[d>>2];k[d>>2]=c;c=e+76|0;e=a+76|0;a=k[c>>2]|0;k[c>>2]=k[e>>2];k[e>>2]=a;return}function tgb(a){a=a|0;return 326923}function ugb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)!=1&(c|0)<257)R0a(a,b,c);else q2a(a,326932,35);return}function vgb(){if((i[17752]|0)==0?(Bb(17752)|0)!=0:0){k[18046]=72156;Kc(17752)}return 72184}function wgb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d+8|0;f=d;g=c;c=k[g+4>>2]|0;h=f;k[h>>2]=k[g>>2];k[h+4>>2]=c;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];a1a(a,e,b);k[a>>2]=71924;r=d;return}function xgb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d+8|0;f=d;g=c;c=k[g+4>>2]|0;h=f;k[h>>2]=k[g>>2];k[h+4>>2]=c;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];b1a(a,e,b);k[a>>2]=71924;r=d;return}function ygb(a){a=a|0;g1a(a);return}function zgb(a){a=a|0;g1a(a);OBa(a);return}function Agb(){var a=0;a=k[18012]|0;k[18012]=a+1;return a|0}function Bgb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=b+1|0;d=a+56|0;e=k[d>>2]|0;a:do if(c>>>0>e>>>0){if(c>>>0<2147483647){f=e<<1;g=f>>>0>>0?c:f}else g=-1;f=a+48|0;h=AYa(k[f>>2]|0,g<<2)|0;if(!h){cab(a,k[a+16>>2]|1);k[18047]=0;i=72188;break}k[f>>2]=h;f=a+52|0;j=k[f>>2]|0;l=k[d>>2]|0;m=h+(j<<2)|0;while(1){if(l>>>0>=g>>>0){n=f;o=j;p=h;q=10;break a}k[m>>2]=0;r=l+1|0;k[d>>2]=r;l=r;m=m+4|0}}else{m=a+52|0;n=m;o=k[m>>2]|0;p=k[a+48>>2]|0;q=10}while(0);if((q|0)==10){k[n>>2]=o>>>0>>0?c:o;i=p+(b<<2)|0}return i|0}function Cgb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=b+1|0;d=a+68|0;e=k[d>>2]|0;a:do if(c>>>0>e>>>0){if(c>>>0<2147483647){f=e<<1;g=f>>>0>>0?c:f}else g=-1;f=a+60|0;h=AYa(k[f>>2]|0,g<<2)|0;if(!h){cab(a,k[a+16>>2]|1);k[18048]=0;i=72192;break}k[f>>2]=h;j=a+64|0;l=k[j>>2]|0;m=k[d>>2]|0;n=h+(l<<2)|0;while(1){if(m>>>0>=g>>>0){o=f;p=j;q=l;r=10;break a}k[n>>2]=0;h=m+1|0;k[d>>2]=h;m=h;n=n+4|0}}else{n=a+64|0;o=a+60|0;p=n;q=k[n>>2]|0;r=10}while(0);if((r|0)==10){k[p>>2]=q>>>0>>0?c:q;i=(k[o>>2]|0)+(b<<2)|0}return i|0}function Dgb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=a+40|0;e=k[d>>2]|0;f=e+1|0;g=k[a+44>>2]|0;if(f>>>0>g>>>0){if(f>>>0<2147483647){h=g<<1;i=(h>>>0>>0?f:h)<<2}else i=-4;h=a+32|0;f=AYa(k[h>>2]|0,i)|0;if(!f)cab(a,k[a+16>>2]|1);k[h>>2]=f;f=a+36|0;g=AYa(k[f>>2]|0,i)|0;if(!g)cab(a,k[a+16>>2]|1);k[f>>2]=g;j=f;l=h;m=k[d>>2]|0}else{j=a+36|0;l=a+32|0;m=e}k[(k[l>>2]|0)+(m<<2)>>2]=b;k[(k[j>>2]|0)+(m<<2)>>2]=c;k[d>>2]=(k[d>>2]|0)+1;return}function Egb(a){a=a|0;lab(a);OBa(a);return}function Fgb(a){a=a|0;var b=0;b=(i[326968]|0)!=0;i[326968]=a&1;return b|0}function Ggb(a){a=a|0;OBa(a);return}function Hgb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=72204;return}function Igb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dg[k[(k[a>>2]|0)+12>>2]&127](a,b,c,d,e)|0}function Jgb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ng[k[(k[b>>2]|0)+16>>2]&255](a,b,c,d);return}function Kgb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+20>>2]&255](a,b,c)|0}function Lgb(a){a=a|0;return}function Mgb(a){a=a|0;return}function Ngb(a){a=a|0;OBa(a);return}function Ogb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;a=d;d=b;while(1){if((a|0)==(e|0)){f=d;g=7;break}if((d|0)==(c|0)){h=-1;break}b=i[d>>0]|0;j=i[a>>0]|0;if(b<<24>>24>24){h=-1;break}if(j<<24>>24>24){h=1;break}a=a+1|0;d=d+1|0}if((g|0)==7)h=(f|0)!=(c|0)&1;return h|0}function Pgb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;_8a(a,c,d);return}function Qgb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=0;d=b;while(1){if((d|0)==(c|0)){e=a;break}b=(i[d>>0]|0)+(a<<4)|0;f=b&-268435456;a=(f>>>24|f)^b;d=d+1|0}return e|0}function Rgb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=72244;return}function Sgb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dg[k[(k[a>>2]|0)+12>>2]&127](a,b,c,d,e)|0}function Tgb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ng[k[(k[b>>2]|0)+16>>2]&255](a,b,c,d);return}function Ugb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+20>>2]&255](a,b,c)|0}function Vgb(a){a=a|0;return}function Wgb(a){a=a|0;OBa(a);return}function Xgb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=d;d=b;while(1){if((a|0)==(e|0)){f=d;g=7;break}if((d|0)==(c|0)){h=-1;break}b=k[d>>2]|0;i=k[a>>2]|0;if((b|0)<(i|0)){h=-1;break}if((i|0)<(b|0)){h=1;break}a=a+4|0;d=d+4|0}if((g|0)==7)h=(f|0)!=(c|0)&1;return h|0}function Ygb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b9a(a,c,d);return}function Zgb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=0;d=b;while(1){if((d|0)==(c|0)){e=a;break}b=(k[d>>2]|0)+(a<<4)|0;f=b&-268435456;a=(f>>>24|f)^b;d=d+4|0}return e|0}function _gb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=72284;return}function $gb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+12>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function ahb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+16>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function bhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+20>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function chb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+24>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function dhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+28>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function ehb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+32>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function fhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+36>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function ghb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+40>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function hhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+44>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function ihb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+48>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function jhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+52>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function khb(a){a=a|0;return}function lhb(a){a=a|0;OBa(a);return}function mhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;g=r;r=r+64|0;h=g+48|0;j=g+24|0;l=g+16|0;m=g+20|0;n=g+12|0;o=g+8|0;p=g+4|0;q=g;a:do if(!(k[d+4>>2]&1)){k[l>>2]=-1;s=k[(k[a>>2]|0)+16>>2]|0;k[m>>2]=k[b>>2];k[n>>2]=k[c>>2];k[j>>2]=k[m>>2];k[h>>2]=k[n>>2];t=Uf[s&127](a,j,h,d,e,l)|0;k[b>>2]=t;switch(k[l>>2]|0){case 0:{i[f>>0]=0;break}case 1:{i[f>>0]=1;break}default:{i[f>>0]=1;k[e>>2]=4}}u=t}else{t=zab(d)|0;k[o>>2]=t;x=0;s=Ta(495,o|0,74148)|0;v=x;x=0;do if(!(v&1)){f0a(t)|0;w=zab(d)|0;k[p>>2]=w;x=0;y=Ta(495,p|0,74408)|0;z=x;x=0;if(z&1){z=Hc()|0;A=M;f0a(w)|0;B=z;C=A;break}f0a(w)|0;x=0;xa(k[(k[y>>2]|0)+24>>2]|0,j|0,y|0);w=x;x=0;if(!(w&1)){w=j+12|0;x=0;xa(k[(k[y>>2]|0)+28>>2]|0,w|0,y|0);y=x;x=0;if(!(y&1)){k[q>>2]=k[c>>2];x=0;k[h>>2]=k[q>>2];y=na(48,b|0,h|0,j|0,j+24|0,s|0,e|0,1)|0;A=x;x=0;if(A&1){A=Hc()|0;z=M;K2a(j+12|0);K2a(j);B=A;C=z;break}else{i[f>>0]=(y|0)==(j|0)&1;y=k[b>>2]|0;K2a(j+12|0);K2a(j);u=y;break a}}else D=w}else D=j;w=Hc()|0;y=M;if((j|0)==(D|0)){B=w;C=y}else{z=D;do{z=z+-12|0;K2a(z)}while((z|0)!=(j|0));B=w;C=y}}else{y=Hc()|0;w=M;f0a(t)|0;B=y;C=w}while(0);Sc(B|0)}while(0);r=g;return u|0}function nhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Gub(a,i,h,d,e,f)|0;r=g;return l|0}function ohb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Hub(a,i,h,d,e,f)|0;r=g;return l|0}function phb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Iub(a,i,h,d,e,f)|0;r=g;return l|0}function qhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Jub(a,i,h,d,e,f)|0;r=g;return l|0}function rhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Kub(a,i,h,d,e,f)|0;r=g;return l|0}function shb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Lub(a,i,h,d,e,f)|0;r=g;return l|0}function thb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Mub(a,i,h,d,e,f)|0;r=g;return l|0}function uhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Nub(a,i,h,d,e,f)|0;r=g;return l|0}function vhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Oub(a,i,h,d,e,f)|0;r=g;return l|0}function whb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+240|0;g=a;h=a+208|0;j=a+196|0;m=a+180|0;n=a+184|0;o=a+176|0;p=a+16|0;q=a+8|0;s=a+4|0;t=0;while(1){if((t|0)==3)break;k[j+(t<<2)>>2]=0;t=t+1|0}x=0;t=Ba(564,d|0)|0;d=x;x=0;do if(d&1){u=Hc()|0;v=u;w=M}else{k[m>>2]=t;x=0;u=Ta(495,m|0,74148)|0;y=x;x=0;if(!(y&1)?(x=0,db(k[(k[u>>2]|0)+32>>2]|0,u|0,326969,326995,h|0)|0,u=x,x=0,!(u&1)):0){f0a(t)|0;u=0;while(1){if((u|0)==3)break;k[n+(u<<2)>>2]=0;u=u+1|0}if(!(i[n>>0]&1))z=10;else z=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,z|0,0);u=x;x=0;a:do if(!(u&1)){y=n+8|0;A=n+1|0;B=(i[n>>0]&1)==0?A:k[y>>2]|0;k[o>>2]=B;k[q>>2]=p;k[s>>2]=0;C=n+4|0;D=k[b>>2]|0;E=B;b:while(1){if(D)if((k[D+12>>2]|0)==(k[D+16>>2]|0)){x=0;B=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;F=x;x=0;if(F&1){G=35;break}if((B|0)==-1){k[b>>2]=0;H=0}else H=D}else H=D;else H=0;B=(H|0)==0;F=k[c>>2]|0;do if(F){if((k[F+12>>2]|0)!=(k[F+16>>2]|0))if(B){I=F;break}else{J=F;K=H;L=E;break b}x=0;N=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;O=x;x=0;if(O&1){G=35;break b}if((N|0)!=-1)if(B){I=F;break}else{J=F;K=H;L=E;break b}else{k[c>>2]=0;G=25;break}}else G=25;while(0);if((G|0)==25){G=0;if(B){J=0;K=H;L=E;break}else I=0}F=i[n>>0]|0;N=(F&1)==0?(F&255)>>>1:k[C>>2]|0;if((k[o>>2]|0)==(E+N|0)){x=0;fb(147,n|0,N<<1|0,0);F=x;x=0;if(F&1){G=35;break}if(!(i[n>>0]&1))P=10;else P=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,P|0,0);F=x;x=0;if(F&1){G=35;break}F=(i[n>>0]&1)==0?A:k[y>>2]|0;k[o>>2]=F+N;Q=F}else Q=E;F=H+12|0;N=k[F>>2]|0;O=H+16|0;if((N|0)==(k[O>>2]|0)){x=0;R=Ba(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;S=x;x=0;if(S&1){G=35;break}else T=R}else T=l[N>>0]|0;if(xhb(T&255,16,Q,o,s,0,j,p,q,h)|0){J=I;K=H;L=Q;break}N=k[F>>2]|0;if((N|0)==(k[O>>2]|0)){x=0;Ba(k[(k[H>>2]|0)+40>>2]|0,H|0)|0;O=x;x=0;if(O&1){G=35;break}else{D=H;E=Q;continue}}else{k[F>>2]=N+1;D=H;E=Q;continue}}if((G|0)==35){E=Hc()|0;U=E;V=M;break}x=0;fb(147,n|0,(k[o>>2]|0)-L|0,0);E=x;x=0;if((!(E&1)?(E=i[n>>0]|0,D=k[y>>2]|0,x=0,C=$a(51)|0,N=x,x=0,!(N&1)):0)?(x=0,k[g>>2]=f,N=db(85,((E&1)==0?A:D)|0,C|0,329660,g|0)|0,C=x,x=0,!(C&1)):0){if((N|0)!=1)k[e>>2]=4;if(K)if((k[K+12>>2]|0)==(k[K+16>>2]|0)){x=0;N=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;C=x;x=0;if(C&1){G=36;break}if((N|0)==-1){k[b>>2]=0;W=0}else W=K}else W=K;else W=0;N=(W|0)==0;do if(J){if((k[J+12>>2]|0)==(k[J+16>>2]|0)){x=0;C=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;D=x;x=0;if(D&1){G=36;break a}if((C|0)==-1){k[c>>2]=0;G=61;break}}if(!N)G=62}else G=61;while(0);if((G|0)==61?N:0)G=62;if((G|0)==62)k[e>>2]=k[e>>2]|2;A=k[b>>2]|0;K2a(n);K2a(j);r=a;return A|0}else G=36}else G=36;while(0);if((G|0)==36){u=Hc()|0;U=u;V=M}K2a(n);v=U;w=V;break}u=Hc()|0;A=M;f0a(t)|0;v=u;w=A}while(0);K2a(j);Sc(v|0);return 0}function xhb(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0;m=k[d>>2]|0;n=(m|0)==(c|0);do if(n){o=(i[l+24>>0]|0)==a<<24>>24;if(!o?(i[l+25>>0]|0)!=a<<24>>24:0){p=5;break}k[d>>2]=c+1;i[c>>0]=o?43:45;k[e>>2]=0;q=0}else p=5;while(0);a:do if((p|0)==5){o=i[g>>0]|0;if(a<<24>>24==f<<24>>24?(((o&1)==0?(o&255)>>>1:k[g+4>>2]|0)|0)!=0:0){o=k[j>>2]|0;if((o-h|0)>=160){q=0;break}r=k[e>>2]|0;k[j>>2]=o+4;k[o>>2]=r;k[e>>2]=0;q=0;break}r=l+26|0;o=l;while(1){if((o|0)==(r|0)){s=r;break}if((i[o>>0]|0)==a<<24>>24){s=o;break}o=o+1|0}o=s-l|0;if((o|0)>23)q=-1;else{switch(b|0){case 10:case 8:{if((o|0)>=(b|0)){q=-1;break a}break}case 16:{if((o|0)>=22){if(n){q=-1;break a}if((m-c|0)>=3){q=-1;break a}if((i[m+-1>>0]|0)!=48){q=-1;break a}k[e>>2]=0;r=i[326969+o>>0]|0;k[d>>2]=m+1;i[m>>0]=r;q=0;break a}break}default:{}}r=i[326969+o>>0]|0;k[d>>2]=m+1;i[m>>0]=r;k[e>>2]=(k[e>>2]|0)+1;q=0}}while(0);return q|0}function yhb(){var a=0,b=0;do if((i[19248]|0)==0?(Bb(19248)|0)!=0:0){x=0;a=Fa(172,2147483647,332342,0)|0;b=x;x=0;if(b&1){b=Hc()|0;Cd(19248);Sc(b|0)}else{k[18896]=a;Kc(19248);break}}while(0);return k[18896]|0}function zhb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=72356;return}function Ahb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+12>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Bhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+16>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Chb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+20>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Dhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+24>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Ehb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+28>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Fhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+32>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Ghb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+36>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Hhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+40>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Ihb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+44>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Jhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+48>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Khb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+52>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Lhb(a){a=a|0;return}function Mhb(a){a=a|0;OBa(a);return}function Nhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;g=r;r=r+64|0;h=g+48|0;j=g+24|0;l=g+16|0;m=g+20|0;n=g+12|0;o=g+8|0;p=g+4|0;q=g;a:do if(!(k[d+4>>2]&1)){k[l>>2]=-1;s=k[(k[a>>2]|0)+16>>2]|0;k[m>>2]=k[b>>2];k[n>>2]=k[c>>2];k[j>>2]=k[m>>2];k[h>>2]=k[n>>2];t=Uf[s&127](a,j,h,d,e,l)|0;k[b>>2]=t;switch(k[l>>2]|0){case 0:{i[f>>0]=0;break}case 1:{i[f>>0]=1;break}default:{i[f>>0]=1;k[e>>2]=4}}u=t}else{t=zab(d)|0;k[o>>2]=t;x=0;s=Ta(495,o|0,74140)|0;v=x;x=0;do if(!(v&1)){f0a(t)|0;w=zab(d)|0;k[p>>2]=w;x=0;y=Ta(495,p|0,74416)|0;z=x;x=0;if(z&1){z=Hc()|0;A=M;f0a(w)|0;B=z;C=A;break}f0a(w)|0;x=0;xa(k[(k[y>>2]|0)+24>>2]|0,j|0,y|0);w=x;x=0;if(!(w&1)){w=j+12|0;x=0;xa(k[(k[y>>2]|0)+28>>2]|0,w|0,y|0);y=x;x=0;if(!(y&1)){k[q>>2]=k[c>>2];x=0;k[h>>2]=k[q>>2];y=na(49,b|0,h|0,j|0,j+24|0,s|0,e|0,1)|0;A=x;x=0;if(A&1){A=Hc()|0;z=M;O5a(j+12|0);O5a(j);B=A;C=z;break}else{i[f>>0]=(y|0)==(j|0)&1;y=k[b>>2]|0;O5a(j+12|0);O5a(j);u=y;break a}}else D=w}else D=j;w=Hc()|0;y=M;if((j|0)==(D|0)){B=w;C=y}else{z=D;do{z=z+-12|0;O5a(z)}while((z|0)!=(j|0));B=w;C=y}}else{y=Hc()|0;w=M;f0a(t)|0;B=y;C=w}while(0);Sc(B|0)}while(0);r=g;return u|0}function Ohb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Rub(a,i,h,d,e,f)|0;r=g;return l|0}function Phb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Sub(a,i,h,d,e,f)|0;r=g;return l|0}function Qhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Tub(a,i,h,d,e,f)|0;r=g;return l|0}function Rhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uub(a,i,h,d,e,f)|0;r=g;return l|0}function Shb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Vub(a,i,h,d,e,f)|0;r=g;return l|0}function Thb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Wub(a,i,h,d,e,f)|0;r=g;return l|0}function Uhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Xub(a,i,h,d,e,f)|0;r=g;return l|0}function Vhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Yub(a,i,h,d,e,f)|0;r=g;return l|0}function Whb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Zub(a,i,h,d,e,f)|0;r=g;return l|0}function Xhb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;a=r;r=r+320|0;g=a;h=a+208|0;j=a+196|0;l=a+180|0;m=a+184|0;n=a+176|0;o=a+16|0;p=a+8|0;q=a+4|0;s=0;while(1){if((s|0)==3)break;k[j+(s<<2)>>2]=0;s=s+1|0}x=0;s=Ba(564,d|0)|0;d=x;x=0;do if(d&1){t=Hc()|0;u=t;v=M}else{k[l>>2]=s;x=0;t=Ta(495,l|0,74140)|0;w=x;x=0;if(!(w&1)?(x=0,db(k[(k[t>>2]|0)+48>>2]|0,t|0,326969,326995,h|0)|0,t=x,x=0,!(t&1)):0){f0a(s)|0;t=0;while(1){if((t|0)==3)break;k[m+(t<<2)>>2]=0;t=t+1|0}if(!(i[m>>0]&1))y=10;else y=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,y|0,0);t=x;x=0;a:do if(!(t&1)){w=m+8|0;z=m+1|0;A=(i[m>>0]&1)==0?z:k[w>>2]|0;k[n>>2]=A;k[p>>2]=o;k[q>>2]=0;B=m+4|0;C=k[b>>2]|0;D=A;b:while(1){if(C){A=k[C+12>>2]|0;if((A|0)==(k[C+16>>2]|0)){x=0;E=Ba(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;F=x;x=0;if(F&1){G=36;break}else H=E}else H=k[A>>2]|0;if((H|0)==-1){k[b>>2]=0;I=0;J=1}else{I=C;J=0}}else{I=0;J=1}A=k[c>>2]|0;do if(A){E=k[A+12>>2]|0;if((E|0)==(k[A+16>>2]|0)){x=0;F=Ba(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;K=x;x=0;if(K&1){G=36;break b}else L=F}else L=k[E>>2]|0;if((L|0)!=-1)if(J){N=A;break}else{O=A;P=I;Q=D;break b}else{k[c>>2]=0;G=26;break}}else G=26;while(0);if((G|0)==26){G=0;if(J){O=0;P=I;Q=D;break}else N=0}A=i[m>>0]|0;E=(A&1)==0?(A&255)>>>1:k[B>>2]|0;if((k[n>>2]|0)==(D+E|0)){x=0;fb(147,m|0,E<<1|0,0);A=x;x=0;if(A&1){G=36;break}if(!(i[m>>0]&1))R=10;else R=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,R|0,0);A=x;x=0;if(A&1){G=36;break}A=(i[m>>0]&1)==0?z:k[w>>2]|0;k[n>>2]=A+E;S=A}else S=D;A=I+12|0;E=k[A>>2]|0;F=I+16|0;if((E|0)==(k[F>>2]|0)){x=0;K=Ba(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;T=x;x=0;if(T&1){G=36;break}else U=K}else U=k[E>>2]|0;if(Yhb(U,16,S,n,q,0,j,o,p,h)|0){O=N;P=I;Q=S;break}E=k[A>>2]|0;if((E|0)==(k[F>>2]|0)){x=0;Ba(k[(k[I>>2]|0)+40>>2]|0,I|0)|0;F=x;x=0;if(F&1){G=36;break}else{C=I;D=S;continue}}else{k[A>>2]=E+4;C=I;D=S;continue}}if((G|0)==36){D=Hc()|0;V=D;W=M;break}x=0;fb(147,m|0,(k[n>>2]|0)-Q|0,0);D=x;x=0;if((!(D&1)?(D=i[m>>0]|0,C=k[w>>2]|0,x=0,B=$a(51)|0,E=x,x=0,!(E&1)):0)?(x=0,k[g>>2]=f,E=db(85,((D&1)==0?z:C)|0,B|0,329660,g|0)|0,B=x,x=0,!(B&1)):0){if((E|0)!=1)k[e>>2]=4;if(P){E=k[P+12>>2]|0;if((E|0)==(k[P+16>>2]|0)){x=0;B=Ba(k[(k[P>>2]|0)+36>>2]|0,P|0)|0;C=x;x=0;if(C&1){G=37;break}else X=B}else X=k[E>>2]|0;if((X|0)==-1){k[b>>2]=0;Y=1}else Y=0}else Y=1;do if(O){E=k[O+12>>2]|0;if((E|0)==(k[O+16>>2]|0)){x=0;B=Ba(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;C=x;x=0;if(C&1){G=37;break a}else Z=B}else Z=k[E>>2]|0;if((Z|0)!=-1)if(Y)break;else{G=65;break}else{k[c>>2]=0;G=63;break}}else G=63;while(0);if((G|0)==63?Y:0)G=65;if((G|0)==65)k[e>>2]=k[e>>2]|2;z=k[b>>2]|0;K2a(m);K2a(j);r=a;return z|0}else G=37}else G=37;while(0);if((G|0)==37){t=Hc()|0;V=t;W=M}K2a(m);u=V;v=W;break}t=Hc()|0;z=M;f0a(s)|0;u=t;v=z}while(0);K2a(j);Sc(u|0);return 0}function Yhb(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0;m=k[d>>2]|0;n=(m|0)==(c|0);do if(n){o=(k[l+96>>2]|0)==(a|0);if(!o?(k[l+100>>2]|0)!=(a|0):0){p=5;break}k[d>>2]=c+1;i[c>>0]=o?43:45;k[e>>2]=0;q=0}else p=5;while(0);a:do if((p|0)==5){o=i[g>>0]|0;if((a|0)==(f|0)?(((o&1)==0?(o&255)>>>1:k[g+4>>2]|0)|0)!=0:0){o=k[j>>2]|0;if((o-h|0)>=160){q=0;break}r=k[e>>2]|0;k[j>>2]=o+4;k[o>>2]=r;k[e>>2]=0;q=0;break}r=l+104|0;o=l;while(1){if((o|0)==(r|0)){s=r;break}if((k[o>>2]|0)==(a|0)){s=o;break}o=o+4|0}o=s-l|0;r=o>>2;if((o|0)>92)q=-1;else{switch(b|0){case 10:case 8:{if((r|0)>=(b|0)){q=-1;break a}break}case 16:{if((o|0)>=88){if(n){q=-1;break a}if((m-c|0)>=3){q=-1;break a}if((i[m+-1>>0]|0)!=48){q=-1;break a}k[e>>2]=0;o=i[326969+r>>0]|0;k[d>>2]=m+1;i[m>>0]=o;q=0;break a}break}default:{}}o=i[326969+r>>0]|0;k[d>>2]=m+1;i[m>>0]=o;k[e>>2]=(k[e>>2]|0)+1;q=0}}while(0);return q|0}function Zhb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;g=zab(b)|0;k[f>>2]=g;x=0;b=Ta(495,f|0,74148)|0;h=x;x=0;if((((!(h&1)?(x=0,db(k[(k[b>>2]|0)+32>>2]|0,b|0,326969,326995,c|0)|0,c=x,x=0,!(c&1)):0)?(x=0,c=Ta(495,f|0,74408)|0,f=x,x=0,!(f&1)):0)?(x=0,f=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0,b=x,x=0,!(b&1)):0)?(i[d>>0]=f,x=0,xa(k[(k[c>>2]|0)+20>>2]|0,a|0,c|0),c=x,x=0,!(c&1)):0){f0a(g)|0;r=e;return}e=Hc()|0;f0a(g)|0;Sc(e|0)}function _hb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=r;r=r+16|0;g=f;h=zab(b)|0;k[g>>2]=h;x=0;b=Ta(495,g|0,74148)|0;j=x;x=0;if(((((!(j&1)?(x=0,db(k[(k[b>>2]|0)+32>>2]|0,b|0,326969,327001,c|0)|0,c=x,x=0,!(c&1)):0)?(x=0,c=Ta(495,g|0,74408)|0,g=x,x=0,!(g&1)):0)?(x=0,g=Ba(k[(k[c>>2]|0)+12>>2]|0,c|0)|0,b=x,x=0,!(b&1)):0)?(i[d>>0]=g,x=0,g=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0,d=x,x=0,!(d&1)):0)?(i[e>>0]=g,x=0,xa(k[(k[c>>2]|0)+20>>2]|0,a|0,c|0),c=x,x=0,!(c&1)):0){f0a(h)|0;r=f;return}f=Hc()|0;f0a(h)|0;Sc(f|0)}function $hb(a,b,c,d,e,f,g,h,j,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0;a:do if(a<<24>>24==f<<24>>24)if(i[b>>0]|0){i[b>>0]=0;p=k[e>>2]|0;k[e>>2]=p+1;i[p>>0]=46;p=i[h>>0]|0;if((((p&1)==0?(p&255)>>>1:k[h+4>>2]|0)|0)!=0?(p=k[m>>2]|0,(p-j|0)<160):0){q=k[n>>2]|0;k[m>>2]=p+4;k[p>>2]=q;r=0}else r=0}else r=-1;else{if(a<<24>>24==g<<24>>24?(q=i[h>>0]|0,(((q&1)==0?(q&255)>>>1:k[h+4>>2]|0)|0)!=0):0){if(!(i[b>>0]|0)){r=-1;break}q=k[m>>2]|0;if((q-j|0)>=160){r=0;break}p=k[n>>2]|0;k[m>>2]=q+4;k[q>>2]=p;k[n>>2]=0;r=0;break}p=o+32|0;q=o;while(1){if((q|0)==(p|0)){s=p;break}if((i[q>>0]|0)==a<<24>>24){s=q;break}q=q+1|0}q=s-o|0;if((q|0)>31)r=-1;else{p=i[326969+q>>0]|0;switch(q|0){case 24:case 25:{t=k[e>>2]|0;if((t|0)!=(d|0)?(l[t+-1>>0]&95|0)!=(l[c>>0]&127|0):0){r=-1;break a}k[e>>2]=t+1;i[t>>0]=p;r=0;break a;break}case 23:case 22:{i[c>>0]=80;t=k[e>>2]|0;k[e>>2]=t+1;i[t>>0]=p;r=0;break a;break}default:{t=p&95;if((((t|0)==(i[c>>0]|0)?(i[c>>0]=t|128,(i[b>>0]|0)!=0):0)?(i[b>>0]=0,t=i[h>>0]|0,(((t&1)==0?(t&255)>>>1:k[h+4>>2]|0)|0)!=0):0)?(t=k[m>>2]|0,(t-j|0)<160):0){u=k[n>>2]|0;k[m>>2]=t+4;k[t>>2]=u}u=k[e>>2]|0;k[e>>2]=u+1;i[u>>0]=p;if((q|0)>21){r=0;break a}k[n>>2]=(k[n>>2]|0)+1;r=0;break a}}}}while(0);return r|0}function aib(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;g=zab(b)|0;k[f>>2]=g;x=0;b=Ta(495,f|0,74140)|0;h=x;x=0;if((((!(h&1)?(x=0,db(k[(k[b>>2]|0)+48>>2]|0,b|0,326969,326995,c|0)|0,c=x,x=0,!(c&1)):0)?(x=0,c=Ta(495,f|0,74416)|0,f=x,x=0,!(f&1)):0)?(x=0,f=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0,b=x,x=0,!(b&1)):0)?(k[d>>2]=f,x=0,xa(k[(k[c>>2]|0)+20>>2]|0,a|0,c|0),c=x,x=0,!(c&1)):0){f0a(g)|0;r=e;return}e=Hc()|0;f0a(g)|0;Sc(e|0)}function bib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f;h=zab(b)|0;k[g>>2]=h;x=0;b=Ta(495,g|0,74140)|0;i=x;x=0;if(((((!(i&1)?(x=0,db(k[(k[b>>2]|0)+48>>2]|0,b|0,326969,327001,c|0)|0,c=x,x=0,!(c&1)):0)?(x=0,c=Ta(495,g|0,74416)|0,g=x,x=0,!(g&1)):0)?(x=0,g=Ba(k[(k[c>>2]|0)+12>>2]|0,c|0)|0,b=x,x=0,!(b&1)):0)?(k[d>>2]=g,x=0,g=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0,d=x,x=0,!(d&1)):0)?(k[e>>2]=g,x=0,xa(k[(k[c>>2]|0)+20>>2]|0,a|0,c|0),c=x,x=0,!(c&1)):0){f0a(h)|0;r=f;return}f=Hc()|0;f0a(h)|0;Sc(f|0)}function cib(a,b,c,d,e,f,g,h,j,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0;a:do if((a|0)==(f|0))if(i[b>>0]|0){i[b>>0]=0;p=k[e>>2]|0;k[e>>2]=p+1;i[p>>0]=46;p=i[h>>0]|0;if((((p&1)==0?(p&255)>>>1:k[h+4>>2]|0)|0)!=0?(p=k[m>>2]|0,(p-j|0)<160):0){q=k[n>>2]|0;k[m>>2]=p+4;k[p>>2]=q;r=0}else r=0}else r=-1;else{if((a|0)==(g|0)?(q=i[h>>0]|0,(((q&1)==0?(q&255)>>>1:k[h+4>>2]|0)|0)!=0):0){if(!(i[b>>0]|0)){r=-1;break}q=k[m>>2]|0;if((q-j|0)>=160){r=0;break}p=k[n>>2]|0;k[m>>2]=q+4;k[q>>2]=p;k[n>>2]=0;r=0;break}p=o+128|0;q=o;while(1){if((q|0)==(p|0)){s=p;break}if((k[q>>2]|0)==(a|0)){s=q;break}q=q+4|0}q=s-o|0;p=q>>2;if((q|0)<=124){t=i[326969+p>>0]|0;switch(p|0){case 24:case 25:{p=k[e>>2]|0;if((p|0)!=(d|0)?(l[p+-1>>0]&95|0)!=(l[c>>0]&127|0):0){r=-1;break a}k[e>>2]=p+1;i[p>>0]=t;r=0;break a;break}case 23:case 22:{i[c>>0]=80;break}default:{p=t&95;if((((p|0)==(i[c>>0]|0)?(i[c>>0]=p|128,(i[b>>0]|0)!=0):0)?(i[b>>0]=0,p=i[h>>0]|0,(((p&1)==0?(p&255)>>>1:k[h+4>>2]|0)|0)!=0):0)?(p=k[m>>2]|0,(p-j|0)<160):0){u=k[n>>2]|0;k[m>>2]=p+4;k[p>>2]=u}}}u=k[e>>2]|0;k[e>>2]=u+1;i[u>>0]=t;if((q|0)>84)r=0;else{k[n>>2]=(k[n>>2]|0)+1;r=0}}else r=-1}while(0);return r|0}function dib(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=72428;return}function eib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+12>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=dg[i&127](a,g,c,d,e)|0;r=f;return h|0}function fib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+16>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=dg[i&127](a,g,c,d,e)|0;r=f;return h|0}function gib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=k[(k[a>>2]|0)+20>>2]|0;k[i>>2]=k[b>>2];k[h>>2]=k[i>>2];i=Uf[j&127](a,h,c,d,e,f)|0;r=g;return i|0}function hib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+24>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=dg[i&127](a,g,c,d,e)|0;r=f;return h|0}function iib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=k[(k[a>>2]|0)+28>>2]|0;k[i>>2]=k[b>>2];k[h>>2]=k[i>>2];i=Uf[j&127](a,h,c,d,e,f)|0;r=g;return i|0}function jib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+32>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=mg[i&63](a,g,c,d,e)|0;r=f;return h|0}function kib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+36>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=mg[i&63](a,g,c,d,e)|0;r=f;return h|0}function lib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+40>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=dg[i&127](a,g,c,d,e)|0;r=f;return h|0}function mib(a){a=a|0;return}function nib(a){a=a|0;OBa(a);return}function oib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;f=r;r=r+32|0;g=f+8|0;h=f+4|0;j=f;a:do if(!(k[c+4>>2]&1)){l=k[(k[a>>2]|0)+24>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];m=dg[l&127](a,g,c,d,e&1)|0}else{l=zab(c)|0;k[j>>2]=l;x=0;n=Ta(495,j|0,74408)|0;o=x;x=0;do if(!(o&1)){f0a(l)|0;p=k[n>>2]|0;if(e)Tf[k[p+24>>2]&2047](g,n);else Tf[k[p+28>>2]&2047](g,n);p=i[g>>0]|0;q=(p&1)==0;s=g+1|0;t=g+8|0;u=q?s:g+1|0;v=g+4|0;w=p;p=q?s:k[g+8>>2]|0;b:while(1){s=(w&1)==0;if((p|0)==((s?u:k[t>>2]|0)+(s?(w&255)>>>1:k[v>>2]|0)|0)){y=9;break}s=i[p>>0]|0;q=k[b>>2]|0;do if(q){z=q+24|0;A=k[z>>2]|0;if((A|0)!=(k[q+28>>2]|0)){k[z>>2]=A+1;i[A>>0]=s;break}x=0;A=Ta(k[(k[q>>2]|0)+52>>2]|0,q|0,s&255|0)|0;z=x;x=0;if(z&1){y=18;break b}if((A|0)==-1)k[b>>2]=0}while(0);w=i[g>>0]|0;p=p+1|0}if((y|0)==9){p=k[b>>2]|0;K2a(g);m=p;break a}else if((y|0)==18){p=Hc()|0;w=M;K2a(g);B=w;C=p;break}}else{p=Hc()|0;w=M;f0a(l)|0;B=w;C=p}while(0);Sc(C|0)}while(0);r=f;return m|0}function pib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+64|0;f=a;g=a+56|0;h=a+44|0;j=a+20|0;l=a+16|0;m=a+8|0;n=a+12|0;o=a+4|0;i[g>>0]=i[329663]|0;i[g+1>>0]=i[329664]|0;i[g+2>>0]=i[329665]|0;i[g+3>>0]=i[329666]|0;i[g+4>>0]=i[329667]|0;i[g+5>>0]=i[329668]|0;qib(g+1|0,298996,1,k[c+4>>2]|0);p=yhb()|0;k[f>>2]=e;e=h+(_ub(h,12,p,g,f)|0)|0;g=rib(h,e,c)|0;p=zab(c)|0;k[n>>2]=p;x=0;Pa(47,h|0,g|0,e|0,j|0,l|0,m|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;f0a(p)|0;Sc(n|0)}else{f0a(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[f>>2]=k[o>>2];o=fi(f,j,b,l,c,d)|0;r=a;return o|0}return 0}function qib(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;if(!(d&2048))e=a;else{i[a>>0]=43;e=a+1|0}if(!(d&512)){f=b;g=e}else{i[e>>0]=35;f=b;g=e+1|0}while(1){e=i[f>>0]|0;if(!(e<<24>>24)){h=g;break}i[g>>0]=e;f=f+1|0;g=g+1|0}a:do switch(d&74|0){case 64:{i[h>>0]=111;break}case 8:{if(!(d&16384)){i[h>>0]=120;break a}else{i[h>>0]=88;break a}break}default:if(c){i[h>>0]=100;break a}else{i[h>>0]=117;break a}}while(0);return}function rib(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:do switch(k[c+4>>2]&176|0){case 16:{d=i[a>>0]|0;switch(d<<24>>24){case 43:case 45:{e=a+1|0;break a;break}default:{}}if((b-a|0)>1&d<<24>>24==48){switch(i[a+1>>0]|0){case 88:case 120:break;default:{f=7;break a}}e=a+2|0}else f=7;break}case 32:{e=b;break}default:f=7}while(0);if((f|0)==7)e=a;return e|0}function sib(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=r;r=r+16|0;j=h;l=lqb(g,74148)|0;m=lqb(g,74408)|0;Tf[k[(k[m>>2]|0)+20>>2]&2047](j,m);g=i[j>>0]|0;n=j+4|0;a:do if(!(((g&1)==0?(g&255)>>>1:k[n>>2]|0)|0)){x=0;db(k[(k[l>>2]|0)+32>>2]|0,l|0,a|0,c|0,d|0)|0;o=x;x=0;if(o&1)p=5;else{o=a;q=d+(c-o)|0;k[f>>2]=q;s=o;t=q;p=30}}else{k[f>>2]=d;q=i[a>>0]|0;switch(q<<24>>24){case 43:case 45:{x=0;o=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,q|0)|0;q=x;x=0;if(q&1){p=5;break a}q=k[f>>2]|0;k[f>>2]=q+1;i[q>>0]=o;u=a+1|0;break}default:u=a}b:do if((c-u|0)>1?(i[u>>0]|0)==48:0){o=u+1|0;switch(i[o>>0]|0){case 88:case 120:break;default:{v=u;break b}}x=0;q=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,48)|0;w=x;x=0;if(w&1){p=5;break a}w=k[f>>2]|0;k[f>>2]=w+1;i[w>>0]=q;x=0;q=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,i[o>>0]|0)|0;o=x;x=0;if(o&1){p=5;break a}o=k[f>>2]|0;k[f>>2]=o+1;i[o>>0]=q;v=u+2|0}else v=u;while(0);c:do if((v|0)!=(c|0)){q=c;o=v;while(1){w=q+-1|0;if(o>>>0>=w>>>0)break c;y=i[o>>0]|0;i[o>>0]=i[w>>0]|0;i[w>>0]=y;q=w;o=o+1|0}}while(0);x=0;o=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;q=x;x=0;if(!(q&1)){q=j+8|0;w=j+1|0;y=0;z=0;A=v;while(1){if(A>>>0>=c>>>0)break;B=i[((i[j>>0]&1)==0?w:k[q>>2]|0)+z>>0]|0;if(B<<24>>24!=0&(y|0)==(B<<24>>24|0)){B=k[f>>2]|0;k[f>>2]=B+1;i[B>>0]=o;B=i[j>>0]|0;C=0;D=(z>>>0<(((B&1)==0?(B&255)>>>1:k[n>>2]|0)+-1|0)>>>0&1)+z|0}else{C=y;D=z}x=0;B=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,i[A>>0]|0)|0;E=x;x=0;if(E&1){p=4;break}E=k[f>>2]|0;k[f>>2]=E+1;i[E>>0]=B;y=C+1|0;z=D;A=A+1|0}if((p|0)==4){A=Hc()|0;F=A;G=M;break}A=a;z=d+(v-A)|0;y=k[f>>2]|0;if((z|0)==(y|0)){s=A;t=z;p=30}else{o=y;y=z;while(1){z=o+-1|0;if(y>>>0>=z>>>0)break;q=i[y>>0]|0;i[y>>0]=i[z>>0]|0;i[z>>0]=q;o=z;y=y+1|0}s=A;t=k[f>>2]|0;p=30}}else p=5}while(0);if((p|0)==5){f=Hc()|0;F=f;G=M}else if((p|0)==30){k[e>>2]=(b|0)==(c|0)?t:d+(b-s)|0;K2a(j);r=h;return}K2a(j);Sc(F|0)}function tib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+96|0;g=a+8|0;h=a;i=a+74|0;j=a+32|0;l=a+28|0;m=a+20|0;n=a+24|0;o=a+16|0;p=h;k[p>>2]=37;k[p+4>>2]=0;qib(h+1|0,329669,1,k[c+4>>2]|0);p=yhb()|0;q=g;k[q>>2]=e;k[q+4>>2]=f;f=i+(_ub(i,22,p,h,g)|0)|0;h=rib(i,f,c)|0;p=zab(c)|0;k[n>>2]=p;x=0;Pa(47,i|0,h|0,f|0,j|0,l|0,m|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;f0a(p)|0;Sc(n|0)}else{f0a(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[g>>2]=k[o>>2];o=fi(g,j,b,l,c,d)|0;r=a;return o|0}return 0}function uib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+64|0;f=a;g=a+56|0;h=a+44|0;j=a+20|0;l=a+16|0;m=a+8|0;n=a+12|0;o=a+4|0;i[g>>0]=i[329663]|0;i[g+1>>0]=i[329664]|0;i[g+2>>0]=i[329665]|0;i[g+3>>0]=i[329666]|0;i[g+4>>0]=i[329667]|0;i[g+5>>0]=i[329668]|0;qib(g+1|0,298996,0,k[c+4>>2]|0);p=yhb()|0;k[f>>2]=e;e=h+(_ub(h,12,p,g,f)|0)|0;g=rib(h,e,c)|0;p=zab(c)|0;k[n>>2]=p;x=0;Pa(47,h|0,g|0,e|0,j|0,l|0,m|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;f0a(p)|0;Sc(n|0)}else{f0a(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[f>>2]=k[o>>2];o=fi(f,j,b,l,c,d)|0;r=a;return o|0}return 0}function vib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+112|0;g=a+8|0;h=a;i=a+75|0;j=a+32|0;l=a+28|0;m=a+20|0;n=a+24|0;o=a+16|0;p=h;k[p>>2]=37;k[p+4>>2]=0;qib(h+1|0,329669,0,k[c+4>>2]|0);p=yhb()|0;q=g;k[q>>2]=e;k[q+4>>2]=f;f=i+(_ub(i,23,p,h,g)|0)|0;h=rib(i,f,c)|0;p=zab(c)|0;k[n>>2]=p;x=0;Pa(47,i|0,h|0,f|0,j|0,l|0,m|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;f0a(p)|0;Sc(n|0)}else{f0a(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[g>>2]=k[o>>2];o=fi(g,j,b,l,c,d)|0;r=a;return o|0}return 0}function wib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;a=r;r=r+176|0;f=a+84|0;g=a+48|0;h=a+32|0;i=a+24|0;j=a+8|0;l=a;m=a+146|0;n=a+80|0;o=a+88|0;q=a+76|0;s=a+72|0;t=a+68|0;u=a+64|0;v=l;k[v>>2]=37;k[v+4>>2]=0;v=xib(l+1|0,329672,k[c+4>>2]|0)|0;k[n>>2]=m;w=yhb()|0;if(v){k[j>>2]=k[c+8>>2];p[j+8>>3]=e;y=_ub(m,30,w,l,j)|0}else{p[i>>3]=e;y=_ub(m,30,w,l,i)|0}do if((y|0)>29){x=0;i=$a(51)|0;w=x;x=0;j=w&1;if(v){if(!j?(x=0,k[h>>2]=k[c+8>>2],p[h+8>>3]=e,w=db(86,n|0,i|0,l|0,h|0)|0,z=x,x=0,!(z&1)):0){A=w;B=12}}else if(!j?(x=0,k[g>>2]=k[c+8>>2],p[g+8>>3]=e,j=db(86,n|0,i|0,l|0,g|0)|0,i=x,x=0,!(i&1)):0){A=j;B=12}if((B|0)==12){j=k[n>>2]|0;if(j){C=j;D=j;E=A;B=16;break}x=0;hb(55);j=x;x=0;if(!(j&1)){j=k[n>>2]|0;C=j;D=j;E=A;B=16;break}}j=Hc()|0;F=j;G=M}else{C=k[n>>2]|0;D=0;E=y;B=16}while(0);if((B|0)==16){y=C+E|0;A=rib(C,y,c)|0;do if((C|0)==(m|0)){H=m;I=0;J=o;B=22}else{g=xYa(E<<1)|0;if(!g){x=0;hb(55);l=x;x=0;if(l&1){K=0;B=20;break}L=k[n>>2]|0}else L=C;H=L;I=g;J=g;B=22}while(0);do if((B|0)==22){x=0;L=Ba(564,c|0)|0;C=x;x=0;if(!(C&1)){k[t>>2]=L;x=0;Pa(48,H|0,A|0,y|0,J|0,q|0,s|0,t|0);C=x;x=0;if(C&1){C=Hc()|0;n=M;f0a(L)|0;N=C;O=n;P=I;break}f0a(L)|0;k[u>>2]=k[b>>2];L=k[q>>2]|0;n=k[s>>2]|0;x=0;k[f>>2]=k[u>>2];C=za(80,f|0,J|0,L|0,n|0,c|0,d|0)|0;n=x;x=0;if(!(n&1)){k[b>>2]=C;if(I)yYa(I);if(D)yYa(D);r=a;return C|0}else{K=I;B=20}}else{K=I;B=20}}while(0);if((B|0)==20){B=Hc()|0;N=B;O=M;P=K}if(P)yYa(P);if(!D){F=N;G=O}else{yYa(D);F=N;G=O}}Sc(F|0);return 0}function xib(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;if(!(c&2048))d=a;else{i[a>>0]=43;d=a+1|0}if(!(c&1024))e=d;else{i[d>>0]=35;e=d+1|0}d=c&260;a=c>>>14;c=(d|0)==260;if(c){f=e;g=0}else{i[e>>0]=46;i[e+1>>0]=42;f=e+2|0;g=1}e=b;b=f;while(1){f=i[e>>0]|0;if(!(f<<24>>24)){h=b;break}i[b>>0]=f;e=e+1|0;b=b+1|0}a:do switch(d|0){case 4:{if(!(a&1)){i[h>>0]=102;break a}else{i[h>>0]=70;break a}break}case 256:{if(!(a&1)){i[h>>0]=101;break a}else{i[h>>0]=69;break a}break}default:{b=(a&1|0)!=0;if(c)if(b){i[h>>0]=65;break a}else{i[h>>0]=97;break a}else if(b){i[h>>0]=71;break a}else{i[h>>0]=103;break a}}}while(0);return g|0}function yib(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;h=r;r=r+16|0;j=h;l=lqb(g,74148)|0;m=lqb(g,74408)|0;Tf[k[(k[m>>2]|0)+20>>2]&2047](j,m);k[f>>2]=d;g=i[a>>0]|0;switch(g<<24>>24){case 43:case 45:{x=0;n=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,g|0)|0;g=x;x=0;if(g&1)o=8;else{g=k[f>>2]|0;k[f>>2]=g+1;i[g>>0]=n;p=a+1|0;o=10}break}default:{p=a;o=10}}a:do if((o|0)==10){n=c;b:do if((n-p|0)>1?(i[p>>0]|0)==48:0){g=p+1|0;switch(i[g>>0]|0){case 88:case 120:break;default:{q=p;o=21;break b}}x=0;s=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,48)|0;t=x;x=0;if(t&1){o=8;break a}t=k[f>>2]|0;k[f>>2]=t+1;i[t>>0]=s;s=p+2|0;x=0;t=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,i[g>>0]|0)|0;g=x;x=0;if(g&1){o=8;break a}g=k[f>>2]|0;k[f>>2]=g+1;i[g>>0]=t;t=s;while(1){if(t>>>0>=c>>>0){u=s;v=t;break b}g=i[t>>0]|0;x=0;w=$a(51)|0;y=x;x=0;if(y&1)break;x=0;y=Ta(637,g<<24>>24|0,w|0)|0;w=x;x=0;if(w&1)break;if(!y){u=s;v=t;break b}t=t+1|0}t=Hc()|0;z=t;A=M;break a}else{q=p;o=21}while(0);c:do if((o|0)==21){while(1){o=0;if(q>>>0>=c>>>0){u=p;v=q;break c}t=i[q>>0]|0;x=0;s=$a(51)|0;y=x;x=0;if(y&1)break;x=0;y=Ta(638,t<<24>>24|0,s|0)|0;s=x;x=0;if(s&1)break;if(!y){u=p;v=q;break c}q=q+1|0;o=21}y=Hc()|0;z=y;A=M;break a}while(0);y=i[j>>0]|0;s=j+4|0;d:do if(((y&1)==0?(y&255)>>>1:k[s>>2]|0)|0){e:do if((u|0)!=(v|0)){t=v;w=u;while(1){g=t+-1|0;if(w>>>0>=g>>>0)break e;B=i[w>>0]|0;i[w>>0]=i[g>>0]|0;i[g>>0]=B;t=g;w=w+1|0}}while(0);x=0;w=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;t=x;x=0;if(t&1){o=8;break a}t=j+8|0;g=j+1|0;B=0;C=0;D=u;while(1){if(D>>>0>=v>>>0)break;E=i[((i[j>>0]&1)==0?g:k[t>>2]|0)+C>>0]|0;if(E<<24>>24>0&(B|0)==(E<<24>>24|0)){E=k[f>>2]|0;k[f>>2]=E+1;i[E>>0]=w;E=i[j>>0]|0;F=0;G=(C>>>0<(((E&1)==0?(E&255)>>>1:k[s>>2]|0)+-1|0)>>>0&1)+C|0}else{F=B;G=C}x=0;E=Ta(k[(k[l>>2]|0)+28>>2]|0,l|0,i[D>>0]|0)|0;H=x;x=0;if(H&1){o=5;break}H=k[f>>2]|0;k[f>>2]=H+1;i[H>>0]=E;B=F+1|0;C=G;D=D+1|0}if((o|0)==5){D=Hc()|0;z=D;A=M;break a}D=d+(u-a)|0;C=k[f>>2]|0;if((D|0)==(C|0))I=l;else{B=C;C=D;while(1){D=B+-1|0;if(C>>>0>=D>>>0){I=l;break d}w=i[C>>0]|0;i[C>>0]=i[D>>0]|0;i[D>>0]=w;B=D;C=C+1|0}}}else{x=0;db(k[(k[l>>2]|0)+32>>2]|0,l|0,u|0,v|0,k[f>>2]|0)|0;C=x;x=0;if(C&1){o=8;break a}k[f>>2]=(k[f>>2]|0)+(v-u);I=l}while(0);s=v;while(1){if(s>>>0>=c>>>0){J=s;break}y=i[s>>0]|0;if(y<<24>>24==46){K=s;o=45;break}x=0;C=Ta(k[(k[I>>2]|0)+28>>2]|0,l|0,y|0)|0;y=x;x=0;if(y&1){o=4;break}y=k[f>>2]|0;k[f>>2]=y+1;i[y>>0]=C;s=s+1|0}if((o|0)==4){s=Hc()|0;z=s;A=M;break}if((o|0)==45){x=0;s=Ba(k[(k[m>>2]|0)+12>>2]|0,m|0)|0;C=x;x=0;if(C&1){o=8;break}C=k[f>>2]|0;k[f>>2]=C+1;i[C>>0]=s;J=K+1|0}x=0;db(k[(k[l>>2]|0)+32>>2]|0,l|0,J|0,c|0,k[f>>2]|0)|0;s=x;x=0;if(s&1)o=8;else{s=(k[f>>2]|0)+(n-J)|0;k[f>>2]=s;k[e>>2]=(b|0)==(c|0)?s:d+(b-a)|0;K2a(j);r=h;return}}while(0);if((o|0)==8){o=Hc()|0;z=o;A=M}K2a(j);Sc(z|0)}function zib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;a=r;r=r+176|0;f=a+76|0;g=a+48|0;h=a+32|0;i=a+24|0;j=a+8|0;l=a;m=a+138|0;n=a+72|0;o=a+80|0;q=a+68|0;s=a+64|0;t=a+60|0;u=a+56|0;v=l;k[v>>2]=37;k[v+4>>2]=0;v=xib(l+1|0,332360,k[c+4>>2]|0)|0;k[n>>2]=m;w=yhb()|0;if(v){k[j>>2]=k[c+8>>2];p[j+8>>3]=e;y=_ub(m,30,w,l,j)|0}else{p[i>>3]=e;y=_ub(m,30,w,l,i)|0}do if((y|0)>29){x=0;i=$a(51)|0;w=x;x=0;j=w&1;if(v){if(!j?(x=0,k[h>>2]=k[c+8>>2],p[h+8>>3]=e,w=db(86,n|0,i|0,l|0,h|0)|0,z=x,x=0,!(z&1)):0){A=w;B=12}}else if(!j?(x=0,p[g>>3]=e,j=db(86,n|0,i|0,l|0,g|0)|0,i=x,x=0,!(i&1)):0){A=j;B=12}if((B|0)==12){j=k[n>>2]|0;if(j){C=j;D=j;E=A;B=16;break}x=0;hb(55);j=x;x=0;if(!(j&1)){j=k[n>>2]|0;C=j;D=j;E=A;B=16;break}}j=Hc()|0;F=j;G=M}else{C=k[n>>2]|0;D=0;E=y;B=16}while(0);if((B|0)==16){y=C+E|0;A=rib(C,y,c)|0;do if((C|0)==(m|0)){H=m;I=0;J=o;B=22}else{g=xYa(E<<1)|0;if(!g){x=0;hb(55);l=x;x=0;if(l&1){K=0;B=20;break}L=k[n>>2]|0}else L=C;H=L;I=g;J=g;B=22}while(0);do if((B|0)==22){x=0;L=Ba(564,c|0)|0;C=x;x=0;if(!(C&1)){k[t>>2]=L;x=0;Pa(48,H|0,A|0,y|0,J|0,q|0,s|0,t|0);C=x;x=0;if(C&1){C=Hc()|0;n=M;f0a(L)|0;N=C;O=n;P=I;break}f0a(L)|0;k[u>>2]=k[b>>2];L=k[q>>2]|0;n=k[s>>2]|0;x=0;k[f>>2]=k[u>>2];C=za(80,f|0,J|0,L|0,n|0,c|0,d|0)|0;n=x;x=0;if(!(n&1)){k[b>>2]=C;if(I)yYa(I);if(D)yYa(D);r=a;return C|0}else{K=I;B=20}}else{K=I;B=20}}while(0);if((B|0)==20){B=Hc()|0;N=B;O=M;P=K}if(P)yYa(P);if(!D){F=N;G=O}else{yYa(D);F=N;G=O}}Sc(F|0);return 0}function Aib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+80|0;f=a;g=a+72|0;h=a+52|0;j=a+12|0;l=a+8|0;m=a+4|0;i[g>>0]=i[329673]|0;i[g+1>>0]=i[329674]|0;i[g+2>>0]=i[329675]|0;i[g+3>>0]=i[329676]|0;i[g+4>>0]=i[329677]|0;i[g+5>>0]=i[329678]|0;n=yhb()|0;k[f>>2]=e;e=_ub(h,20,n,g,f)|0;g=h+e|0;n=rib(h,g,c)|0;o=zab(c)|0;k[l>>2]=o;x=0;p=Ta(495,l|0,74148)|0;l=x;x=0;if(l&1){l=Hc()|0;f0a(o)|0;Sc(l|0)}else{f0a(o)|0;ig[k[(k[p>>2]|0)+32>>2]&127](p,h,g,j)|0;p=j+e|0;k[m>>2]=k[b>>2];k[f>>2]=k[m>>2];m=fi(f,j,(n|0)==(g|0)?p:j+(n-h)|0,p,c,d)|0;r=a;return m|0}return 0}function Bib(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=72488;return}function Cib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+12>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=dg[i&127](a,g,c,d,e)|0;r=f;return h|0}function Dib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+16>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=dg[i&127](a,g,c,d,e)|0;r=f;return h|0}function Eib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=k[(k[a>>2]|0)+20>>2]|0;k[i>>2]=k[b>>2];k[h>>2]=k[i>>2];i=Uf[j&127](a,h,c,d,e,f)|0;r=g;return i|0}function Fib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+24>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=dg[i&127](a,g,c,d,e)|0;r=f;return h|0}function Gib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=k[(k[a>>2]|0)+28>>2]|0;k[i>>2]=k[b>>2];k[h>>2]=k[i>>2];i=Uf[j&127](a,h,c,d,e,f)|0;r=g;return i|0}function Hib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+32>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=mg[i&63](a,g,c,d,e)|0;r=f;return h|0}function Iib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+36>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=mg[i&63](a,g,c,d,e)|0;r=f;return h|0}function Jib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f+4|0;h=f;i=k[(k[a>>2]|0)+40>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];h=dg[i&127](a,g,c,d,e)|0;r=f;return h|0}function Kib(a){a=a|0;return}function Lib(a){a=a|0;OBa(a);return}function Mib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;f=r;r=r+32|0;g=f+8|0;h=f+4|0;j=f;a:do if(!(k[c+4>>2]&1)){l=k[(k[a>>2]|0)+24>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];m=dg[l&127](a,g,c,d,e&1)|0}else{l=zab(c)|0;k[j>>2]=l;x=0;n=Ta(495,j|0,74416)|0;o=x;x=0;do if(!(o&1)){f0a(l)|0;p=k[n>>2]|0;if(e)Tf[k[p+24>>2]&2047](g,n);else Tf[k[p+28>>2]&2047](g,n);p=i[g>>0]|0;q=(p&1)==0;s=g+4|0;t=g+8|0;u=q?s:g+4|0;v=p;p=q?s:k[g+8>>2]|0;while(1){s=(v&1)==0;if((p|0)==((s?u:k[t>>2]|0)+((s?(v&255)>>>1:k[u>>2]|0)<<2)|0)){w=9;break}s=k[p>>2]|0;q=k[b>>2]|0;if(q){y=q+24|0;z=k[y>>2]|0;if((z|0)==(k[q+28>>2]|0)){x=0;A=Ta(k[(k[q>>2]|0)+52>>2]|0,q|0,s|0)|0;q=x;x=0;if(q&1){w=18;break}else B=A}else{k[y>>2]=z+4;k[z>>2]=s;B=s}if((B|0)==-1)k[b>>2]=0}v=i[g>>0]|0;p=p+4|0}if((w|0)==9){p=k[b>>2]|0;O5a(g);m=p;break a}else if((w|0)==18){p=Hc()|0;v=M;O5a(g);C=v;D=p;break}}else{p=Hc()|0;v=M;f0a(l)|0;C=v;D=p}while(0);Sc(D|0)}while(0);r=f;return m|0}function Nib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+128|0;f=a;g=a+116|0;h=a+104|0;j=a+20|0;l=a+16|0;m=a+8|0;n=a+12|0;o=a+4|0;i[g>>0]=i[329663]|0;i[g+1>>0]=i[329664]|0;i[g+2>>0]=i[329665]|0;i[g+3>>0]=i[329666]|0;i[g+4>>0]=i[329667]|0;i[g+5>>0]=i[329668]|0;qib(g+1|0,298996,1,k[c+4>>2]|0);p=yhb()|0;k[f>>2]=e;e=h+(_ub(h,12,p,g,f)|0)|0;g=rib(h,e,c)|0;p=zab(c)|0;k[n>>2]=p;x=0;Pa(49,h|0,g|0,e|0,j|0,l|0,m|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;f0a(p)|0;Sc(n|0)}else{f0a(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[f>>2]=k[o>>2];o=avb(f,j,b,l,c,d)|0;r=a;return o|0}return 0}function Oib(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=r;r=r+16|0;j=h;l=lqb(g,74140)|0;m=lqb(g,74416)|0;Tf[k[(k[m>>2]|0)+20>>2]&2047](j,m);g=i[j>>0]|0;n=j+4|0;a:do if(!(((g&1)==0?(g&255)>>>1:k[n>>2]|0)|0)){x=0;db(k[(k[l>>2]|0)+48>>2]|0,l|0,a|0,c|0,d|0)|0;o=x;x=0;if(o&1)p=5;else{o=a;q=d+(c-o<<2)|0;k[f>>2]=q;s=o;t=q;p=29}}else{k[f>>2]=d;q=i[a>>0]|0;switch(q<<24>>24){case 43:case 45:{x=0;o=Ta(k[(k[l>>2]|0)+44>>2]|0,l|0,q|0)|0;q=x;x=0;if(q&1){p=5;break a}q=k[f>>2]|0;k[f>>2]=q+4;k[q>>2]=o;u=a+1|0;break}default:u=a}b:do if((c-u|0)>1?(i[u>>0]|0)==48:0){o=u+1|0;switch(i[o>>0]|0){case 88:case 120:break;default:{v=u;break b}}x=0;q=Ta(k[(k[l>>2]|0)+44>>2]|0,l|0,48)|0;w=x;x=0;if(w&1){p=5;break a}w=k[f>>2]|0;k[f>>2]=w+4;k[w>>2]=q;x=0;q=Ta(k[(k[l>>2]|0)+44>>2]|0,l|0,i[o>>0]|0)|0;o=x;x=0;if(o&1){p=5;break a}o=k[f>>2]|0;k[f>>2]=o+4;k[o>>2]=q;v=u+2|0}else v=u;while(0);c:do if((v|0)!=(c|0)){q=c;o=v;while(1){w=q+-1|0;if(o>>>0>=w>>>0)break c;y=i[o>>0]|0;i[o>>0]=i[w>>0]|0;i[w>>0]=y;q=w;o=o+1|0}}while(0);x=0;o=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;q=x;x=0;if(!(q&1)){q=j+8|0;w=j+1|0;y=0;z=0;A=v;while(1){if(A>>>0>=c>>>0)break;B=i[((i[j>>0]&1)==0?w:k[q>>2]|0)+z>>0]|0;if(B<<24>>24!=0&(y|0)==(B<<24>>24|0)){B=k[f>>2]|0;k[f>>2]=B+4;k[B>>2]=o;B=i[j>>0]|0;C=0;D=(z>>>0<(((B&1)==0?(B&255)>>>1:k[n>>2]|0)+-1|0)>>>0&1)+z|0}else{C=y;D=z}x=0;B=Ta(k[(k[l>>2]|0)+44>>2]|0,l|0,i[A>>0]|0)|0;E=x;x=0;if(E&1){p=4;break}E=k[f>>2]|0;k[f>>2]=E+4;k[E>>2]=B;y=C+1|0;z=D;A=A+1|0}if((p|0)==4){A=Hc()|0;F=A;G=M;break}A=a;z=d+(v-A<<2)|0;y=k[f>>2]|0;if((z|0)==(y|0)){s=A;t=z;p=29}else{o=y;q=z;while(1){z=o+-4|0;if(q>>>0>=z>>>0){s=A;t=y;p=29;break a}w=k[q>>2]|0;k[q>>2]=k[z>>2];k[z>>2]=w;o=z;q=q+4|0}}}else p=5}while(0);if((p|0)==5){f=Hc()|0;F=f;G=M}else if((p|0)==29){k[e>>2]=(b|0)==(c|0)?t:d+(b-s<<2)|0;K2a(j);r=h;return}K2a(j);Sc(F|0)}function Pib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+224|0;g=a+8|0;h=a;i=a+196|0;j=a+32|0;l=a+28|0;m=a+20|0;n=a+24|0;o=a+16|0;p=h;k[p>>2]=37;k[p+4>>2]=0;qib(h+1|0,329669,1,k[c+4>>2]|0);p=yhb()|0;q=g;k[q>>2]=e;k[q+4>>2]=f;f=i+(_ub(i,22,p,h,g)|0)|0;h=rib(i,f,c)|0;p=zab(c)|0;k[n>>2]=p;x=0;Pa(49,i|0,h|0,f|0,j|0,l|0,m|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;f0a(p)|0;Sc(n|0)}else{f0a(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[g>>2]=k[o>>2];o=avb(g,j,b,l,c,d)|0;r=a;return o|0}return 0}function Qib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+128|0;f=a;g=a+116|0;h=a+104|0;j=a+20|0;l=a+16|0;m=a+8|0;n=a+12|0;o=a+4|0;i[g>>0]=i[329663]|0;i[g+1>>0]=i[329664]|0;i[g+2>>0]=i[329665]|0;i[g+3>>0]=i[329666]|0;i[g+4>>0]=i[329667]|0;i[g+5>>0]=i[329668]|0;qib(g+1|0,298996,0,k[c+4>>2]|0);p=yhb()|0;k[f>>2]=e;e=h+(_ub(h,12,p,g,f)|0)|0;g=rib(h,e,c)|0;p=zab(c)|0;k[n>>2]=p;x=0;Pa(49,h|0,g|0,e|0,j|0,l|0,m|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;f0a(p)|0;Sc(n|0)}else{f0a(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[f>>2]=k[o>>2];o=avb(f,j,b,l,c,d)|0;r=a;return o|0}return 0}function Rib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+240|0;g=a+8|0;h=a;i=a+204|0;j=a+32|0;l=a+28|0;m=a+20|0;n=a+24|0;o=a+16|0;p=h;k[p>>2]=37;k[p+4>>2]=0;qib(h+1|0,329669,0,k[c+4>>2]|0);p=yhb()|0;q=g;k[q>>2]=e;k[q+4>>2]=f;f=i+(_ub(i,23,p,h,g)|0)|0;h=rib(i,f,c)|0;p=zab(c)|0;k[n>>2]=p;x=0;Pa(49,i|0,h|0,f|0,j|0,l|0,m|0,n|0);n=x;x=0;if(n&1){n=Hc()|0;f0a(p)|0;Sc(n|0)}else{f0a(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[g>>2]=k[o>>2];o=avb(g,j,b,l,c,d)|0;r=a;return o|0}return 0}function Sib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;a=r;r=r+352|0;f=a+312|0;g=a+48|0;h=a+32|0;i=a+24|0;j=a+8|0;l=a;m=a+316|0;n=a+308|0;o=a+80|0;q=a+76|0;s=a+72|0;t=a+68|0;u=a+64|0;v=l;k[v>>2]=37;k[v+4>>2]=0;v=xib(l+1|0,329672,k[c+4>>2]|0)|0;k[n>>2]=m;w=yhb()|0;if(v){k[j>>2]=k[c+8>>2];p[j+8>>3]=e;y=_ub(m,30,w,l,j)|0}else{p[i>>3]=e;y=_ub(m,30,w,l,i)|0}do if((y|0)>29){x=0;i=$a(51)|0;w=x;x=0;j=w&1;if(v){if(!j?(x=0,k[h>>2]=k[c+8>>2],p[h+8>>3]=e,w=db(86,n|0,i|0,l|0,h|0)|0,z=x,x=0,!(z&1)):0){A=w;B=12}}else if(!j?(x=0,k[g>>2]=k[c+8>>2],p[g+8>>3]=e,j=db(86,n|0,i|0,l|0,g|0)|0,i=x,x=0,!(i&1)):0){A=j;B=12}if((B|0)==12){j=k[n>>2]|0;if(j){C=j;D=j;E=A;B=16;break}x=0;hb(55);j=x;x=0;if(!(j&1)){j=k[n>>2]|0;C=j;D=j;E=A;B=16;break}}j=Hc()|0;F=j;G=M}else{C=k[n>>2]|0;D=0;E=y;B=16}while(0);if((B|0)==16){y=C+E|0;A=rib(C,y,c)|0;do if((C|0)==(m|0)){H=m;I=0;J=o;B=22}else{g=xYa(E<<3)|0;if(!g){x=0;hb(55);l=x;x=0;if(l&1){K=0;B=20;break}L=k[n>>2]|0}else L=C;H=L;I=g;J=g;B=22}while(0);do if((B|0)==22){x=0;L=Ba(564,c|0)|0;C=x;x=0;if(!(C&1)){k[t>>2]=L;x=0;Pa(50,H|0,A|0,y|0,J|0,q|0,s|0,t|0);C=x;x=0;if(C&1){C=Hc()|0;n=M;f0a(L)|0;N=C;O=n;P=I;break}f0a(L)|0;k[u>>2]=k[b>>2];L=k[q>>2]|0;n=k[s>>2]|0;x=0;k[f>>2]=k[u>>2];C=za(81,f|0,J|0,L|0,n|0,c|0,d|0)|0;n=x;x=0;if(!(n&1)){k[b>>2]=C;if(I)yYa(I);if(D)yYa(D);r=a;return C|0}else{K=I;B=20}}else{K=I;B=20}}while(0);if((B|0)==20){B=Hc()|0;N=B;O=M;P=K}if(P)yYa(P);if(!D){F=N;G=O}else{yYa(D);F=N;G=O}}Sc(F|0);return 0}function Tib(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;h=r;r=r+16|0;j=h;l=lqb(g,74140)|0;m=lqb(g,74416)|0;Tf[k[(k[m>>2]|0)+20>>2]&2047](j,m);k[f>>2]=d;g=i[a>>0]|0;switch(g<<24>>24){case 43:case 45:{x=0;n=Ta(k[(k[l>>2]|0)+44>>2]|0,l|0,g|0)|0;g=x;x=0;if(g&1)o=8;else{g=k[f>>2]|0;k[f>>2]=g+4;k[g>>2]=n;p=a+1|0;o=10}break}default:{p=a;o=10}}a:do if((o|0)==10){n=c;b:do if((n-p|0)>1?(i[p>>0]|0)==48:0){g=p+1|0;switch(i[g>>0]|0){case 88:case 120:break;default:{q=p;o=21;break b}}x=0;s=Ta(k[(k[l>>2]|0)+44>>2]|0,l|0,48)|0;t=x;x=0;if(t&1){o=8;break a}t=k[f>>2]|0;k[f>>2]=t+4;k[t>>2]=s;s=p+2|0;x=0;t=Ta(k[(k[l>>2]|0)+44>>2]|0,l|0,i[g>>0]|0)|0;g=x;x=0;if(g&1){o=8;break a}g=k[f>>2]|0;k[f>>2]=g+4;k[g>>2]=t;t=s;while(1){if(t>>>0>=c>>>0){u=s;v=t;break b}g=i[t>>0]|0;x=0;w=$a(51)|0;y=x;x=0;if(y&1)break;x=0;y=Ta(637,g<<24>>24|0,w|0)|0;w=x;x=0;if(w&1)break;if(!y){u=s;v=t;break b}t=t+1|0}t=Hc()|0;z=t;A=M;break a}else{q=p;o=21}while(0);c:do if((o|0)==21){while(1){o=0;if(q>>>0>=c>>>0){u=p;v=q;break c}t=i[q>>0]|0;x=0;s=$a(51)|0;y=x;x=0;if(y&1)break;x=0;y=Ta(638,t<<24>>24|0,s|0)|0;s=x;x=0;if(s&1)break;if(!y){u=p;v=q;break c}q=q+1|0;o=21}y=Hc()|0;z=y;A=M;break a}while(0);y=i[j>>0]|0;s=j+4|0;d:do if(((y&1)==0?(y&255)>>>1:k[s>>2]|0)|0){e:do if((u|0)!=(v|0)){t=v;w=u;while(1){g=t+-1|0;if(w>>>0>=g>>>0)break e;B=i[w>>0]|0;i[w>>0]=i[g>>0]|0;i[g>>0]=B;t=g;w=w+1|0}}while(0);x=0;w=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;t=x;x=0;if(t&1){o=8;break a}t=j+8|0;g=j+1|0;B=0;C=0;D=u;while(1){if(D>>>0>=v>>>0)break;E=i[((i[j>>0]&1)==0?g:k[t>>2]|0)+C>>0]|0;if(E<<24>>24>0&(B|0)==(E<<24>>24|0)){E=k[f>>2]|0;k[f>>2]=E+4;k[E>>2]=w;E=i[j>>0]|0;F=0;G=(C>>>0<(((E&1)==0?(E&255)>>>1:k[s>>2]|0)+-1|0)>>>0&1)+C|0}else{F=B;G=C}x=0;E=Ta(k[(k[l>>2]|0)+44>>2]|0,l|0,i[D>>0]|0)|0;H=x;x=0;if(H&1){o=5;break}H=k[f>>2]|0;k[f>>2]=H+4;k[H>>2]=E;B=F+1|0;C=G;D=D+1|0}if((o|0)==5){D=Hc()|0;z=D;A=M;break a}D=d+(u-a<<2)|0;C=k[f>>2]|0;if((D|0)==(C|0)){I=l;J=D}else{B=C;w=D;while(1){D=B+-4|0;if(w>>>0>=D>>>0){I=l;J=C;break d}t=k[w>>2]|0;k[w>>2]=k[D>>2];k[D>>2]=t;B=D;w=w+4|0}}}else{x=0;db(k[(k[l>>2]|0)+48>>2]|0,l|0,u|0,v|0,k[f>>2]|0)|0;w=x;x=0;if(w&1){o=8;break a}w=(k[f>>2]|0)+(v-u<<2)|0;k[f>>2]=w;I=l;J=w}while(0);s=J;y=v;while(1){if(y>>>0>=c>>>0){K=s;L=y;break}w=i[y>>0]|0;if(w<<24>>24==46){N=y;o=45;break}x=0;B=Ta(k[(k[I>>2]|0)+44>>2]|0,l|0,w|0)|0;w=x;x=0;if(w&1){o=4;break}w=k[f>>2]|0;C=w+4|0;k[f>>2]=C;k[w>>2]=B;s=C;y=y+1|0}if((o|0)==4){y=Hc()|0;z=y;A=M;break}if((o|0)==45){x=0;y=Ba(k[(k[m>>2]|0)+12>>2]|0,m|0)|0;s=x;x=0;if(s&1){o=8;break}s=k[f>>2]|0;C=s+4|0;k[f>>2]=C;k[s>>2]=y;K=C;L=N+1|0}x=0;db(k[(k[l>>2]|0)+48>>2]|0,l|0,L|0,c|0,K|0)|0;C=x;x=0;if(C&1)o=8;else{C=(k[f>>2]|0)+(n-L<<2)|0;k[f>>2]=C;k[e>>2]=(b|0)==(c|0)?C:d+(b-a<<2)|0;K2a(j);r=h;return}}while(0);if((o|0)==8){o=Hc()|0;z=o;A=M}K2a(j);Sc(z|0)}function Uib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;a=r;r=r+352|0;f=a+304|0;g=a+48|0;h=a+32|0;i=a+24|0;j=a+8|0;l=a;m=a+308|0;n=a+300|0;o=a+72|0;q=a+68|0;s=a+64|0;t=a+60|0;u=a+56|0;v=l;k[v>>2]=37;k[v+4>>2]=0;v=xib(l+1|0,332360,k[c+4>>2]|0)|0;k[n>>2]=m;w=yhb()|0;if(v){k[j>>2]=k[c+8>>2];p[j+8>>3]=e;y=_ub(m,30,w,l,j)|0}else{p[i>>3]=e;y=_ub(m,30,w,l,i)|0}do if((y|0)>29){x=0;i=$a(51)|0;w=x;x=0;j=w&1;if(v){if(!j?(x=0,k[h>>2]=k[c+8>>2],p[h+8>>3]=e,w=db(86,n|0,i|0,l|0,h|0)|0,z=x,x=0,!(z&1)):0){A=w;B=12}}else if(!j?(x=0,p[g>>3]=e,j=db(86,n|0,i|0,l|0,g|0)|0,i=x,x=0,!(i&1)):0){A=j;B=12}if((B|0)==12){j=k[n>>2]|0;if(j){C=j;D=j;E=A;B=16;break}x=0;hb(55);j=x;x=0;if(!(j&1)){j=k[n>>2]|0;C=j;D=j;E=A;B=16;break}}j=Hc()|0;F=j;G=M}else{C=k[n>>2]|0;D=0;E=y;B=16}while(0);if((B|0)==16){y=C+E|0;A=rib(C,y,c)|0;do if((C|0)==(m|0)){H=m;I=0;J=o;B=22}else{g=xYa(E<<3)|0;if(!g){x=0;hb(55);l=x;x=0;if(l&1){K=0;B=20;break}L=k[n>>2]|0}else L=C;H=L;I=g;J=g;B=22}while(0);do if((B|0)==22){x=0;L=Ba(564,c|0)|0;C=x;x=0;if(!(C&1)){k[t>>2]=L;x=0;Pa(50,H|0,A|0,y|0,J|0,q|0,s|0,t|0);C=x;x=0;if(C&1){C=Hc()|0;n=M;f0a(L)|0;N=C;O=n;P=I;break}f0a(L)|0;k[u>>2]=k[b>>2];L=k[q>>2]|0;n=k[s>>2]|0;x=0;k[f>>2]=k[u>>2];C=za(81,f|0,J|0,L|0,n|0,c|0,d|0)|0;n=x;x=0;if(!(n&1)){k[b>>2]=C;if(I)yYa(I);if(D)yYa(D);r=a;return C|0}else{K=I;B=20}}else{K=I;B=20}}while(0);if((B|0)==20){B=Hc()|0;N=B;O=M;P=K}if(P)yYa(P);if(!D){F=N;G=O}else{yYa(D);F=N;G=O}}Sc(F|0);return 0}function Vib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+192|0;f=a;g=a+180|0;h=a+160|0;j=a+8|0;l=a+156|0;m=a+4|0;i[g>>0]=i[329673]|0;i[g+1>>0]=i[329674]|0;i[g+2>>0]=i[329675]|0;i[g+3>>0]=i[329676]|0;i[g+4>>0]=i[329677]|0;i[g+5>>0]=i[329678]|0;n=yhb()|0;k[f>>2]=e;e=_ub(h,20,n,g,f)|0;g=h+e|0;n=rib(h,g,c)|0;o=zab(c)|0;k[l>>2]=o;x=0;p=Ta(495,l|0,74140)|0;l=x;x=0;if(l&1){l=Hc()|0;f0a(o)|0;Sc(l|0)}else{f0a(o)|0;ig[k[(k[p>>2]|0)+48>>2]&127](p,h,g,j)|0;p=j+(e<<2)|0;k[m>>2]=k[b>>2];k[f>>2]=k[m>>2];m=avb(f,j,(n|0)==(g|0)?p:j+(n-h<<2)|0,p,c,d)|0;r=a;return m|0}return 0}function Wib(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=72548;k[a+8>>2]=72596;return}function Xib(a){a=a|0;return Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0}function Yib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+16>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Zib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+20>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function _ib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+24>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function $ib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+28>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function ajb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+32>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function bjb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0;i=r;r=r+16|0;j=i+12|0;l=i+8|0;m=i+4|0;n=i;o=k[(k[a>>2]|0)+36>>2]|0;k[m>>2]=k[b>>2];k[n>>2]=k[c>>2];k[l>>2]=k[m>>2];k[j>>2]=k[n>>2];n=lg[o&127](a,l,j,d,e,f,g,h)|0;r=i;return n|0}function cjb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;m=r;r=r+32|0;n=m+16|0;o=m+12|0;p=m+8|0;q=m+4|0;s=m;t=zab(d)|0;k[p>>2]=t;x=0;u=Ta(495,p|0,74148)|0;p=x;x=0;if(p&1){p=Hc()|0;f0a(t)|0;Sc(p|0)}f0a(t)|0;k[e>>2]=0;t=u+8|0;p=g;g=0;a:while(1){v=(p|0)!=(h|0);w=g;while(1){y=k[b>>2]|0;if(!(v&(w|0)==0)){z=y;break a}A=y;if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)?(Vf[k[(k[y>>2]|0)+36>>2]&1023](y)|0)==-1:0){k[b>>2]=0;B=0;C=0}else{B=A;C=y}else{B=A;C=0}A=(C|0)==0;y=k[c>>2]|0;D=y;do if(y){if((k[y+12>>2]|0)==(k[y+16>>2]|0)?(Vf[k[(k[y>>2]|0)+36>>2]&1023](y)|0)==-1:0){k[c>>2]=0;E=0;F=14;break}if(A){G=y;H=D}else{I=C;F=15;break a}}else{E=D;F=14}while(0);if((F|0)==14){F=0;if(A){I=C;F=15;break a}else{G=0;H=E}}if((Xf[k[(k[u>>2]|0)+36>>2]&255](u,i[p>>0]|0,0)|0)<<24>>24==37){J=B;K=C;L=H;F=18;break}D=i[p>>0]|0;if(D<<24>>24>-1?(y=k[t>>2]|0,(j[y+(D<<24>>24<<1)>>1]&8192)!=0):0){M=C;N=G;O=y;F=27;break}y=C+12|0;D=k[y>>2]|0;P=C+16|0;if((D|0)==(k[P>>2]|0))Q=Vf[k[(k[C>>2]|0)+36>>2]&1023](C)|0;else Q=l[D>>0]|0;D=cg[k[(k[u>>2]|0)+12>>2]&1023](u,Q&255)|0;if(D<<24>>24==(cg[k[(k[u>>2]|0)+12>>2]&1023](u,i[p>>0]|0)|0)<<24>>24){R=C;S=y;T=P;F=55;break}k[e>>2]=4;w=4}b:do if((F|0)==18){F=0;w=p+1|0;if((w|0)==(h|0)){U=K;F=19;break a}v=Xf[k[(k[u>>2]|0)+36>>2]&255](u,i[w>>0]|0,0)|0;switch(v<<24>>24){case 48:case 69:{P=p+2|0;if((P|0)==(h|0)){V=K;F=24;break a}W=w;X=Xf[k[(k[u>>2]|0)+36>>2]&255](u,i[P>>0]|0,0)|0;Y=v;break}default:{W=p;X=v;Y=0}}v=k[(k[a>>2]|0)+36>>2]|0;k[q>>2]=J;k[s>>2]=L;k[o>>2]=k[q>>2];k[n>>2]=k[s>>2];P=lg[v&127](a,o,n,d,e,f,X,Y)|0;k[b>>2]=P;Z=W+2|0}else if((F|0)==27){F=0;P=p;while(1){v=P+1|0;if((v|0)==(h|0)){_=h;break}w=i[v>>0]|0;if(w<<24>>24<=-1){_=v;break}if(!(j[O+(w<<24>>24<<1)>>1]&8192)){_=v;break}else P=v}P=N;A=M;v=N;while(1){if(A)if((k[A+12>>2]|0)==(k[A+16>>2]|0)?(Vf[k[(k[A>>2]|0)+36>>2]&1023](A)|0)==-1:0){k[b>>2]=0;$=0}else $=A;else $=0;w=($|0)==0;do if(v){if((k[v+12>>2]|0)!=(k[v+16>>2]|0))if(w){aa=P;ba=v;break}else{Z=_;break b}if((Vf[k[(k[v>>2]|0)+36>>2]&1023](v)|0)!=-1)if(w^(P|0)==0){aa=P;ba=P;break}else{Z=_;break b}else{k[c>>2]=0;ca=0;F=41;break}}else{ca=P;F=41}while(0);if((F|0)==41){F=0;if(w){Z=_;break b}else{aa=ca;ba=0}}y=$+12|0;D=k[y>>2]|0;da=$+16|0;if((D|0)==(k[da>>2]|0))ea=Vf[k[(k[$>>2]|0)+36>>2]&1023]($)|0;else ea=l[D>>0]|0;if((ea&255)<<24>>24<=-1){Z=_;break b}if(!(j[(k[t>>2]|0)+(ea<<24>>24<<1)>>1]&8192)){Z=_;break b}D=k[y>>2]|0;if((D|0)==(k[da>>2]|0)){Vf[k[(k[$>>2]|0)+40>>2]&1023]($)|0;P=aa;A=$;v=ba;continue}else{k[y>>2]=D+1;P=aa;A=$;v=ba;continue}}}else if((F|0)==55){F=0;v=k[S>>2]|0;if((v|0)==(k[T>>2]|0))Vf[k[(k[R>>2]|0)+40>>2]&1023](R)|0;else k[S>>2]=v+1;Z=p+1|0}while(0);p=Z;g=k[e>>2]|0}if((F|0)==15){k[e>>2]=4;z=I}else if((F|0)==19){k[e>>2]=4;z=U}else if((F|0)==24){k[e>>2]=4;z=V}if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)?(Vf[k[(k[z>>2]|0)+36>>2]&1023](z)|0)==-1:0){k[b>>2]=0;fa=0}else fa=z;else fa=0;z=(fa|0)==0;b=k[c>>2]|0;do if(b){if((k[b+12>>2]|0)==(k[b+16>>2]|0)?(Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0)==-1:0){k[c>>2]=0;F=70;break}if(!z)F=71}else F=70;while(0);if((F|0)==70?z:0)F=71;if((F|0)==71)k[e>>2]=k[e>>2]|2;r=m;return fa|0}function djb(a){a=a|0;return}function ejb(a){a=a|0;OBa(a);return}function fjb(a){a=a|0;return 2}function gjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=cjb(a,i,h,d,e,f,329679,329687)|0;r=g;return l|0}function hjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;g=r;r=r+16|0;h=g+12|0;j=g+8|0;l=g+4|0;m=g;n=a+8|0;o=Vf[k[(k[n>>2]|0)+20>>2]&1023](n)|0;k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];c=i[o>>0]|0;b=(c&1)==0;n=b?o+1|0:k[o+8>>2]|0;p=n+(b?(c&255)>>>1:k[o+4>>2]|0)|0;k[j>>2]=k[l>>2];k[h>>2]=k[m>>2];m=cjb(a,j,h,d,e,f,n,p)|0;r=g;return m|0}function ijb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=zab(d)|0;k[i>>2]=l;x=0;d=Ta(495,i|0,74148)|0;i=x;x=0;if(i&1){i=Hc()|0;f0a(l)|0;Sc(i|0)}else{f0a(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];jjb(a,f+24|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function jjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=a+8|0;a=Vf[k[k[j>>2]>>2]&1023](j)|0;k[i>>2]=k[d>>2];k[h>>2]=k[i>>2];i=(Fub(c,h,a,a+168|0,f,e,0)|0)-a|0;if((i|0)<168)k[b>>2]=((i|0)/12|0|0)%7|0;r=g;return}function kjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=zab(d)|0;k[i>>2]=l;x=0;d=Ta(495,i|0,74148)|0;i=x;x=0;if(i&1){i=Hc()|0;f0a(l)|0;Sc(i|0)}else{f0a(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];ljb(a,f+16|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function ljb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=a+8|0;a=Vf[k[(k[j>>2]|0)+4>>2]&1023](j)|0;k[i>>2]=k[d>>2];k[h>>2]=k[i>>2];i=(Fub(c,h,a,a+288|0,f,e,0)|0)-a|0;if((i|0)<288)k[b>>2]=((i|0)/12|0|0)%12|0;r=g;return}function mjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=zab(d)|0;k[i>>2]=l;x=0;d=Ta(495,i|0,74148)|0;i=x;x=0;if(i&1){i=Hc()|0;f0a(l)|0;Sc(i|0)}else{f0a(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];njb(a,f+20|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function njb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,4)|0;if(!(k[e>>2]&4)){if((h|0)<69)i=h+2e3|0;else i=(h+-69|0)>>>0<31?h+1900|0:h;k[b>>2]=i+-1900}r=a;return}function ojb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;h=r;r=r+144|0;j=h+132|0;l=h+116|0;m=h+128|0;n=h+124|0;o=h+120|0;p=h+112|0;q=h+108|0;s=h+104|0;t=h+100|0;u=h+96|0;v=h+92|0;w=h+88|0;y=h+84|0;z=h+80|0;A=h+76|0;B=h+72|0;C=h+68|0;D=h+64|0;E=h+60|0;F=h+56|0;G=h+52|0;H=h+48|0;I=h+44|0;J=h+40|0;K=h+36|0;L=h+32|0;M=h+28|0;N=h+24|0;O=h+20|0;P=h+16|0;Q=h+12|0;R=h+8|0;S=h+4|0;T=h;k[e>>2]=0;U=zab(d)|0;k[m>>2]=U;x=0;V=Ta(495,m|0,74148)|0;m=x;x=0;if(m&1){m=Hc()|0;f0a(U)|0;Sc(m|0)}f0a(U)|0;do switch(g<<24>>24|0){case 65:case 97:{k[n>>2]=k[c>>2];k[j>>2]=k[n>>2];jjb(a,f+24|0,b,j,e,V);W=28;break}case 104:case 66:case 98:{k[o>>2]=k[c>>2];k[j>>2]=k[o>>2];ljb(a,f+16|0,b,j,e,V);W=28;break}case 99:{U=a+8|0;m=Vf[k[(k[U>>2]|0)+12>>2]&1023](U)|0;k[p>>2]=k[b>>2];k[q>>2]=k[c>>2];U=i[m>>0]|0;X=(U&1)==0;Y=X?m+1|0:k[m+8>>2]|0;Z=Y+(X?(U&255)>>>1:k[m+4>>2]|0)|0;k[l>>2]=k[p>>2];k[j>>2]=k[q>>2];m=cjb(a,l,j,d,e,f,Y,Z)|0;k[b>>2]=m;W=28;break}case 101:case 100:{k[s>>2]=k[c>>2];k[j>>2]=k[s>>2];pjb(a,f+12|0,b,j,e,V);W=28;break}case 68:{k[t>>2]=k[b>>2];k[u>>2]=k[c>>2];k[l>>2]=k[t>>2];k[j>>2]=k[u>>2];m=cjb(a,l,j,d,e,f,329687,329695)|0;k[b>>2]=m;W=28;break}case 70:{k[v>>2]=k[b>>2];k[w>>2]=k[c>>2];k[l>>2]=k[v>>2];k[j>>2]=k[w>>2];m=cjb(a,l,j,d,e,f,329695,329703)|0;k[b>>2]=m;W=28;break}case 72:{k[y>>2]=k[c>>2];k[j>>2]=k[y>>2];qjb(a,f+8|0,b,j,e,V);W=28;break}case 73:{k[z>>2]=k[c>>2];k[j>>2]=k[z>>2];rjb(a,f+8|0,b,j,e,V);W=28;break}case 106:{k[A>>2]=k[c>>2];k[j>>2]=k[A>>2];sjb(a,f+28|0,b,j,e,V);W=28;break}case 109:{k[B>>2]=k[c>>2];k[j>>2]=k[B>>2];tjb(a,f+16|0,b,j,e,V);W=28;break}case 77:{k[C>>2]=k[c>>2];k[j>>2]=k[C>>2];ujb(a,f+4|0,b,j,e,V);W=28;break}case 116:case 110:{k[D>>2]=k[c>>2];k[j>>2]=k[D>>2];vjb(a,b,j,e,V);W=28;break}case 112:{k[E>>2]=k[c>>2];k[j>>2]=k[E>>2];wjb(a,f+8|0,b,j,e,V);W=28;break}case 114:{k[F>>2]=k[b>>2];k[G>>2]=k[c>>2];k[l>>2]=k[F>>2];k[j>>2]=k[G>>2];m=cjb(a,l,j,d,e,f,329703,329714)|0;k[b>>2]=m;W=28;break}case 82:{k[H>>2]=k[b>>2];k[I>>2]=k[c>>2];k[l>>2]=k[H>>2];k[j>>2]=k[I>>2];m=cjb(a,l,j,d,e,f,329714,329719)|0;k[b>>2]=m;W=28;break}case 83:{k[J>>2]=k[c>>2];k[j>>2]=k[J>>2];xjb(a,f,b,j,e,V);W=28;break}case 84:{k[K>>2]=k[b>>2];k[L>>2]=k[c>>2];k[l>>2]=k[K>>2];k[j>>2]=k[L>>2];m=cjb(a,l,j,d,e,f,329719,329727)|0;k[b>>2]=m;W=28;break}case 119:{k[M>>2]=k[c>>2];k[j>>2]=k[M>>2];yjb(a,f+24|0,b,j,e,V);W=28;break}case 120:{m=k[(k[a>>2]|0)+20>>2]|0;k[N>>2]=k[b>>2];k[O>>2]=k[c>>2];k[l>>2]=k[N>>2];k[j>>2]=k[O>>2];_=Uf[m&127](a,l,j,d,e,f)|0;break}case 88:{m=a+8|0;Z=Vf[k[(k[m>>2]|0)+24>>2]&1023](m)|0;k[P>>2]=k[b>>2];k[Q>>2]=k[c>>2];m=i[Z>>0]|0;Y=(m&1)==0;U=Y?Z+1|0:k[Z+8>>2]|0;X=U+(Y?(m&255)>>>1:k[Z+4>>2]|0)|0;k[l>>2]=k[P>>2];k[j>>2]=k[Q>>2];Z=cjb(a,l,j,d,e,f,U,X)|0;k[b>>2]=Z;W=28;break}case 121:{k[R>>2]=k[c>>2];k[j>>2]=k[R>>2];njb(a,f+20|0,b,j,e,V);W=28;break}case 89:{k[S>>2]=k[c>>2];k[j>>2]=k[S>>2];zjb(a,f+20|0,b,j,e,V);W=28;break}case 37:{k[T>>2]=k[c>>2];k[j>>2]=k[T>>2];Ajb(a,b,j,e,V);W=28;break}default:{k[e>>2]=k[e>>2]|4;W=28}}while(0);if((W|0)==28)_=k[b>>2]|0;r=h;return _|0}function pjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h+-1|0)>>>0<31&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function qjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<24&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function rjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h+-1|0)>>>0<12&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function sjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,3)|0;f=k[e>>2]|0;if((h|0)<366&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function tjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<13&(f&4|0)==0)k[b>>2]=h+-1;else k[e>>2]=f|4;r=a;return}function ujb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<60&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function vjb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,m=0,n=0,o=0,p=0,q=0;a=e+8|0;a:while(1){e=k[b>>2]|0;do if(e)if((k[e+12>>2]|0)==(k[e+16>>2]|0))if((Vf[k[(k[e>>2]|0)+36>>2]&1023](e)|0)==-1){k[b>>2]=0;f=0;break}else{f=k[b>>2]|0;break}else f=e;else f=0;while(0);e=(f|0)==0;g=k[c>>2]|0;do if(g){if((k[g+12>>2]|0)!=(k[g+16>>2]|0))if(e){h=g;break}else{i=g;break a}if((Vf[k[(k[g>>2]|0)+36>>2]&1023](g)|0)!=-1)if(e){h=g;break}else{i=g;break a}else{k[c>>2]=0;m=12;break}}else m=12;while(0);if((m|0)==12){m=0;if(e){i=0;break}else h=0}g=k[b>>2]|0;n=k[g+12>>2]|0;if((n|0)==(k[g+16>>2]|0))o=Vf[k[(k[g>>2]|0)+36>>2]&1023](g)|0;else o=l[n>>0]|0;if((o&255)<<24>>24<=-1){i=h;break}if(!(j[(k[a>>2]|0)+(o<<24>>24<<1)>>1]&8192)){i=h;break}n=k[b>>2]|0;g=n+12|0;p=k[g>>2]|0;if((p|0)==(k[n+16>>2]|0)){Vf[k[(k[n>>2]|0)+40>>2]&1023](n)|0;continue}else{k[g>>2]=p+1;continue}}h=k[b>>2]|0;do if(h)if((k[h+12>>2]|0)==(k[h+16>>2]|0))if((Vf[k[(k[h>>2]|0)+36>>2]&1023](h)|0)==-1){k[b>>2]=0;q=0;break}else{q=k[b>>2]|0;break}else q=h;else q=0;while(0);h=(q|0)==0;do if(i){if((k[i+12>>2]|0)==(k[i+16>>2]|0)?(Vf[k[(k[i>>2]|0)+36>>2]&1023](i)|0)==-1:0){k[c>>2]=0;m=32;break}if(!h)m=33}else m=32;while(0);if((m|0)==32?h:0)m=33;if((m|0)==33)k[d>>2]=k[d>>2]|2;return}function wjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0;g=r;r=r+16|0;h=g+4|0;j=g;l=a+8|0;a=Vf[k[(k[l>>2]|0)+8>>2]&1023](l)|0;l=i[a>>0]|0;if(!(l&1))m=(l&255)>>>1;else m=k[a+4>>2]|0;l=i[a+12>>0]|0;if(!(l&1))n=(l&255)>>>1;else n=k[a+16>>2]|0;do if((m|0)!=(0-n|0)){k[j>>2]=k[d>>2];k[h>>2]=k[j>>2];l=Fub(c,h,a,a+24|0,f,e,0)|0;o=k[b>>2]|0;if((l|0)==(a|0)&(o|0)==12){k[b>>2]=0;break}if((o|0)<12&(l-a|0)==12)k[b>>2]=o+12}else k[e>>2]=k[e>>2]|4;while(0);r=g;return}function xjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<61&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function yjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,1)|0;f=k[e>>2]|0;if((h|0)<7&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function zjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=bvb(c,g,e,f,4)|0;if(!(k[e>>2]&4))k[b>>2]=h+-1900;r=a;return}function Ajb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0;a=k[b>>2]|0;do if(a)if((k[a+12>>2]|0)==(k[a+16>>2]|0))if((Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0)==-1){k[b>>2]=0;f=0;break}else{f=k[b>>2]|0;break}else f=a;else f=0;while(0);a=(f|0)==0;f=k[c>>2]|0;do if(f){if((k[f+12>>2]|0)==(k[f+16>>2]|0)?(Vf[k[(k[f>>2]|0)+36>>2]&1023](f)|0)==-1:0){k[c>>2]=0;g=11;break}if(a){h=f;g=13}else g=12}else g=11;while(0);if((g|0)==11)if(a)g=12;else{h=0;g=13}a:do if((g|0)==12)k[d>>2]=k[d>>2]|6;else if((g|0)==13){a=k[b>>2]|0;f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))i=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else i=l[f>>0]|0;if((Xf[k[(k[e>>2]|0)+36>>2]&255](e,i&255,0)|0)<<24>>24!=37){k[d>>2]=k[d>>2]|4;break}f=k[b>>2]|0;a=f+12|0;j=k[a>>2]|0;if((j|0)==(k[f+16>>2]|0)){Vf[k[(k[f>>2]|0)+40>>2]&1023](f)|0;m=k[b>>2]|0;if(!m)n=0;else{o=m;g=21}}else{k[a>>2]=j+1;o=f;g=21}do if((g|0)==21)if((k[o+12>>2]|0)==(k[o+16>>2]|0))if((Vf[k[(k[o>>2]|0)+36>>2]&1023](o)|0)==-1){k[b>>2]=0;n=0;break}else{n=k[b>>2]|0;break}else n=o;while(0);f=(n|0)==0;do if(h){if((k[h+12>>2]|0)==(k[h+16>>2]|0)?(Vf[k[(k[h>>2]|0)+36>>2]&1023](h)|0)==-1:0){k[c>>2]=0;g=30;break}if(f)break a}else g=30;while(0);if((g|0)==30?!f:0)break;k[d>>2]=k[d>>2]|2}while(0);return}function Bjb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=72640;k[a+8>>2]=72688;return}function Cjb(a){a=a|0;return Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0}function Djb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+16>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Ejb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+20>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Fjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+24>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Gjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+28>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Hjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;m=k[(k[a>>2]|0)+32>>2]|0;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Uf[m&127](a,i,h,d,e,f)|0;r=g;return l|0}function Ijb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0;i=r;r=r+16|0;j=i+12|0;l=i+8|0;m=i+4|0;n=i;o=k[(k[a>>2]|0)+36>>2]|0;k[m>>2]=k[b>>2];k[n>>2]=k[c>>2];k[l>>2]=k[m>>2];k[j>>2]=k[n>>2];n=lg[o&127](a,l,j,d,e,f,g,h)|0;r=i;return n|0}function Jjb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;i=r;r=r+32|0;j=i+16|0;l=i+12|0;m=i+8|0;n=i+4|0;o=i;p=zab(d)|0;k[m>>2]=p;x=0;q=Ta(495,m|0,74140)|0;m=x;x=0;if(m&1){m=Hc()|0;f0a(p)|0;Sc(m|0)}f0a(p)|0;k[e>>2]=0;p=g;g=0;a:while(1){m=(p|0)!=(h|0);s=g;while(1){t=k[b>>2]|0;if(!(m&(s|0)==0)){u=t;break a}v=t;if(t){w=k[t+12>>2]|0;if((w|0)==(k[t+16>>2]|0))y=Vf[k[(k[t>>2]|0)+36>>2]&1023](t)|0;else y=k[w>>2]|0;if((y|0)==-1){k[b>>2]=0;z=0;A=0;B=1}else{z=t;A=v;B=0}}else{z=0;A=v;B=1}v=k[c>>2]|0;t=v;do if(v){w=k[v+12>>2]|0;if((w|0)==(k[v+16>>2]|0))C=Vf[k[(k[v>>2]|0)+36>>2]&1023](v)|0;else C=k[w>>2]|0;if((C|0)!=-1)if(B){D=v;E=t;break}else{F=z;G=19;break a}else{k[c>>2]=0;H=0;G=17;break}}else{H=t;G=17}while(0);if((G|0)==17){G=0;if(B){F=z;G=19;break a}else{D=0;E=H}}if((Xf[k[(k[q>>2]|0)+52>>2]&255](q,k[p>>2]|0,0)|0)<<24>>24==37){I=A;J=z;K=E;G=22;break}if(Xf[k[(k[q>>2]|0)+12>>2]&255](q,8192,k[p>>2]|0)|0){L=z;M=D;G=30;break}t=z+12|0;v=k[t>>2]|0;w=z+16|0;if((v|0)==(k[w>>2]|0))N=Vf[k[(k[z>>2]|0)+36>>2]&1023](z)|0;else N=k[v>>2]|0;v=cg[k[(k[q>>2]|0)+28>>2]&1023](q,N)|0;if((v|0)==(cg[k[(k[q>>2]|0)+28>>2]&1023](q,k[p>>2]|0)|0)){O=z;P=t;Q=w;G=59;break}k[e>>2]=4;s=4}b:do if((G|0)==22){G=0;s=p+4|0;if((s|0)==(h|0)){R=J;G=23;break a}m=Xf[k[(k[q>>2]|0)+52>>2]&255](q,k[s>>2]|0,0)|0;switch(m<<24>>24){case 48:case 69:{w=p+8|0;if((w|0)==(h|0)){S=J;G=28;break a}T=s;U=Xf[k[(k[q>>2]|0)+52>>2]&255](q,k[w>>2]|0,0)|0;V=m;break}default:{T=p;U=m;V=0}}m=k[(k[a>>2]|0)+36>>2]|0;k[n>>2]=I;k[o>>2]=K;k[l>>2]=k[n>>2];k[j>>2]=k[o>>2];w=lg[m&127](a,l,j,d,e,f,U,V)|0;k[b>>2]=w;W=T+8|0}else if((G|0)==30){G=0;w=p;while(1){m=w+4|0;if((m|0)==(h|0)){X=h;break}if(Xf[k[(k[q>>2]|0)+12>>2]&255](q,8192,k[m>>2]|0)|0)w=m;else{X=m;break}}w=M;m=L;s=M;while(1){if(m){t=k[m+12>>2]|0;if((t|0)==(k[m+16>>2]|0))Y=Vf[k[(k[m>>2]|0)+36>>2]&1023](m)|0;else Y=k[t>>2]|0;if((Y|0)==-1){k[b>>2]=0;Z=1;_=0}else{Z=0;_=m}}else{Z=1;_=0}do if(s){t=k[s+12>>2]|0;if((t|0)==(k[s+16>>2]|0))$=Vf[k[(k[s>>2]|0)+36>>2]&1023](s)|0;else $=k[t>>2]|0;if(($|0)!=-1)if(Z^(w|0)==0){aa=w;ba=w;break}else{W=X;break b}else{k[c>>2]=0;ca=0;G=46;break}}else{ca=w;G=46}while(0);if((G|0)==46){G=0;if(Z){W=X;break b}else{aa=ca;ba=0}}t=_+12|0;v=k[t>>2]|0;da=_+16|0;if((v|0)==(k[da>>2]|0))ea=Vf[k[(k[_>>2]|0)+36>>2]&1023](_)|0;else ea=k[v>>2]|0;if(!(Xf[k[(k[q>>2]|0)+12>>2]&255](q,8192,ea)|0)){W=X;break b}v=k[t>>2]|0;if((v|0)==(k[da>>2]|0)){Vf[k[(k[_>>2]|0)+40>>2]&1023](_)|0;w=aa;m=_;s=ba;continue}else{k[t>>2]=v+4;w=aa;m=_;s=ba;continue}}}else if((G|0)==59){G=0;s=k[P>>2]|0;if((s|0)==(k[Q>>2]|0))Vf[k[(k[O>>2]|0)+40>>2]&1023](O)|0;else k[P>>2]=s+4;W=p+4|0}while(0);p=W;g=k[e>>2]|0}if((G|0)==19){k[e>>2]=4;u=F}else if((G|0)==23){k[e>>2]=4;u=R}else if((G|0)==28){k[e>>2]=4;u=S}if(u){S=k[u+12>>2]|0;if((S|0)==(k[u+16>>2]|0))fa=Vf[k[(k[u>>2]|0)+36>>2]&1023](u)|0;else fa=k[S>>2]|0;if((fa|0)==-1){k[b>>2]=0;ga=0;ha=1}else{ga=u;ha=0}}else{ga=0;ha=1}u=k[c>>2]|0;do if(u){b=k[u+12>>2]|0;if((b|0)==(k[u+16>>2]|0))ia=Vf[k[(k[u>>2]|0)+36>>2]&1023](u)|0;else ia=k[b>>2]|0;if((ia|0)!=-1)if(ha)break;else{G=79;break}else{k[c>>2]=0;G=77;break}}else G=77;while(0);if((G|0)==77?ha:0)G=79;if((G|0)==79)k[e>>2]=k[e>>2]|2;r=i;return ga|0}function Kjb(a){a=a|0;return}function Ljb(a){a=a|0;OBa(a);return}function Mjb(a){a=a|0;return 2}function Njb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Jjb(a,i,h,d,e,f,75588,75620)|0;r=g;return l|0}function Ojb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;g=r;r=r+16|0;h=g+12|0;j=g+8|0;l=g+4|0;m=g;n=a+8|0;o=Vf[k[(k[n>>2]|0)+20>>2]&1023](n)|0;k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];c=i[o>>0]|0;b=(c&1)==0;n=o+4|0;p=b?n:k[o+8>>2]|0;o=p+((b?(c&255)>>>1:k[n>>2]|0)<<2)|0;k[j>>2]=k[l>>2];k[h>>2]=k[m>>2];m=Jjb(a,j,h,d,e,f,p,o)|0;r=g;return m|0}function Pjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=zab(d)|0;k[i>>2]=l;x=0;d=Ta(495,i|0,74140)|0;i=x;x=0;if(i&1){i=Hc()|0;f0a(l)|0;Sc(i|0)}else{f0a(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];Qjb(a,f+24|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function Qjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=a+8|0;a=Vf[k[k[j>>2]>>2]&1023](j)|0;k[i>>2]=k[d>>2];k[h>>2]=k[i>>2];i=(Qub(c,h,a,a+168|0,f,e,0)|0)-a|0;if((i|0)<168)k[b>>2]=((i|0)/12|0|0)%7|0;r=g;return}function Rjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=zab(d)|0;k[i>>2]=l;x=0;d=Ta(495,i|0,74140)|0;i=x;x=0;if(i&1){i=Hc()|0;f0a(l)|0;Sc(i|0)}else{f0a(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];Sjb(a,f+16|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function Sjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=a+8|0;a=Vf[k[(k[j>>2]|0)+4>>2]&1023](j)|0;k[i>>2]=k[d>>2];k[h>>2]=k[i>>2];i=(Qub(c,h,a,a+288|0,f,e,0)|0)-a|0;if((i|0)<288)k[b>>2]=((i|0)/12|0|0)%12|0;r=g;return}function Tjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=zab(d)|0;k[i>>2]=l;x=0;d=Ta(495,i|0,74140)|0;i=x;x=0;if(i&1){i=Hc()|0;f0a(l)|0;Sc(i|0)}else{f0a(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];Ujb(a,f+20|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function Ujb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,4)|0;if(!(k[e>>2]&4)){if((h|0)<69)i=h+2e3|0;else i=(h+-69|0)>>>0<31?h+1900|0:h;k[b>>2]=i+-1900}r=a;return}function Vjb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;h=r;r=r+144|0;j=h+132|0;l=h+116|0;m=h+128|0;n=h+124|0;o=h+120|0;p=h+112|0;q=h+108|0;s=h+104|0;t=h+100|0;u=h+96|0;v=h+92|0;w=h+88|0;y=h+84|0;z=h+80|0;A=h+76|0;B=h+72|0;C=h+68|0;D=h+64|0;E=h+60|0;F=h+56|0;G=h+52|0;H=h+48|0;I=h+44|0;J=h+40|0;K=h+36|0;L=h+32|0;M=h+28|0;N=h+24|0;O=h+20|0;P=h+16|0;Q=h+12|0;R=h+8|0;S=h+4|0;T=h;k[e>>2]=0;U=zab(d)|0;k[m>>2]=U;x=0;V=Ta(495,m|0,74140)|0;m=x;x=0;if(m&1){m=Hc()|0;f0a(U)|0;Sc(m|0)}f0a(U)|0;do switch(g<<24>>24|0){case 65:case 97:{k[n>>2]=k[c>>2];k[j>>2]=k[n>>2];Qjb(a,f+24|0,b,j,e,V);W=28;break}case 104:case 66:case 98:{k[o>>2]=k[c>>2];k[j>>2]=k[o>>2];Sjb(a,f+16|0,b,j,e,V);W=28;break}case 99:{U=a+8|0;m=Vf[k[(k[U>>2]|0)+12>>2]&1023](U)|0;k[p>>2]=k[b>>2];k[q>>2]=k[c>>2];U=i[m>>0]|0;X=(U&1)==0;Y=m+4|0;Z=X?Y:k[m+8>>2]|0;m=Z+((X?(U&255)>>>1:k[Y>>2]|0)<<2)|0;k[l>>2]=k[p>>2];k[j>>2]=k[q>>2];Y=Jjb(a,l,j,d,e,f,Z,m)|0;k[b>>2]=Y;W=28;break}case 101:case 100:{k[s>>2]=k[c>>2];k[j>>2]=k[s>>2];Wjb(a,f+12|0,b,j,e,V);W=28;break}case 68:{k[t>>2]=k[b>>2];k[u>>2]=k[c>>2];k[l>>2]=k[t>>2];k[j>>2]=k[u>>2];Y=Jjb(a,l,j,d,e,f,75620,75652)|0;k[b>>2]=Y;W=28;break}case 70:{k[v>>2]=k[b>>2];k[w>>2]=k[c>>2];k[l>>2]=k[v>>2];k[j>>2]=k[w>>2];Y=Jjb(a,l,j,d,e,f,75652,75684)|0;k[b>>2]=Y;W=28;break}case 72:{k[y>>2]=k[c>>2];k[j>>2]=k[y>>2];Xjb(a,f+8|0,b,j,e,V);W=28;break}case 73:{k[z>>2]=k[c>>2];k[j>>2]=k[z>>2];Yjb(a,f+8|0,b,j,e,V);W=28;break}case 106:{k[A>>2]=k[c>>2];k[j>>2]=k[A>>2];Zjb(a,f+28|0,b,j,e,V);W=28;break}case 109:{k[B>>2]=k[c>>2];k[j>>2]=k[B>>2];_jb(a,f+16|0,b,j,e,V);W=28;break}case 77:{k[C>>2]=k[c>>2];k[j>>2]=k[C>>2];$jb(a,f+4|0,b,j,e,V);W=28;break}case 116:case 110:{k[D>>2]=k[c>>2];k[j>>2]=k[D>>2];akb(a,b,j,e,V);W=28;break}case 112:{k[E>>2]=k[c>>2];k[j>>2]=k[E>>2];bkb(a,f+8|0,b,j,e,V);W=28;break}case 114:{k[F>>2]=k[b>>2];k[G>>2]=k[c>>2];k[l>>2]=k[F>>2];k[j>>2]=k[G>>2];Y=Jjb(a,l,j,d,e,f,75684,75728)|0;k[b>>2]=Y;W=28;break}case 82:{k[H>>2]=k[b>>2];k[I>>2]=k[c>>2];k[l>>2]=k[H>>2];k[j>>2]=k[I>>2];Y=Jjb(a,l,j,d,e,f,75728,75748)|0;k[b>>2]=Y;W=28;break}case 83:{k[J>>2]=k[c>>2];k[j>>2]=k[J>>2];ckb(a,f,b,j,e,V);W=28;break}case 84:{k[K>>2]=k[b>>2];k[L>>2]=k[c>>2];k[l>>2]=k[K>>2];k[j>>2]=k[L>>2];Y=Jjb(a,l,j,d,e,f,75748,75780)|0;k[b>>2]=Y;W=28;break}case 119:{k[M>>2]=k[c>>2];k[j>>2]=k[M>>2];dkb(a,f+24|0,b,j,e,V);W=28;break}case 120:{Y=k[(k[a>>2]|0)+20>>2]|0;k[N>>2]=k[b>>2];k[O>>2]=k[c>>2];k[l>>2]=k[N>>2];k[j>>2]=k[O>>2];_=Uf[Y&127](a,l,j,d,e,f)|0;break}case 88:{Y=a+8|0;m=Vf[k[(k[Y>>2]|0)+24>>2]&1023](Y)|0;k[P>>2]=k[b>>2];k[Q>>2]=k[c>>2];Y=i[m>>0]|0;Z=(Y&1)==0;U=m+4|0;X=Z?U:k[m+8>>2]|0;m=X+((Z?(Y&255)>>>1:k[U>>2]|0)<<2)|0;k[l>>2]=k[P>>2];k[j>>2]=k[Q>>2];U=Jjb(a,l,j,d,e,f,X,m)|0;k[b>>2]=U;W=28;break}case 121:{k[R>>2]=k[c>>2];k[j>>2]=k[R>>2];Ujb(a,f+20|0,b,j,e,V);W=28;break}case 89:{k[S>>2]=k[c>>2];k[j>>2]=k[S>>2];ekb(a,f+20|0,b,j,e,V);W=28;break}case 37:{k[T>>2]=k[c>>2];k[j>>2]=k[T>>2];fkb(a,b,j,e,V);W=28;break}default:{k[e>>2]=k[e>>2]|4;W=28}}while(0);if((W|0)==28)_=k[b>>2]|0;r=h;return _|0}function Wjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h+-1|0)>>>0<31&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Xjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<24&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Yjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h+-1|0)>>>0<12&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Zjb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,3)|0;f=k[e>>2]|0;if((h|0)<366&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function _jb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<13&(f&4|0)==0)k[b>>2]=h+-1;else k[e>>2]=f|4;r=a;return}function $jb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<60&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function akb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:while(1){a=k[b>>2]|0;do if(a){f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))g=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else g=k[f>>2]|0;if((g|0)==-1){k[b>>2]=0;h=1;break}else{h=(k[b>>2]|0)==0;break}}else h=1;while(0);a=k[c>>2]|0;do if(a){f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))i=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else i=k[f>>2]|0;if((i|0)!=-1)if(h){j=a;break}else{l=a;break a}else{k[c>>2]=0;m=15;break}}else m=15;while(0);if((m|0)==15){m=0;if(h){l=0;break}else j=0}a=k[b>>2]|0;f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))n=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else n=k[f>>2]|0;if(!(Xf[k[(k[e>>2]|0)+12>>2]&255](e,8192,n)|0)){l=j;break}f=k[b>>2]|0;a=f+12|0;o=k[a>>2]|0;if((o|0)==(k[f+16>>2]|0)){Vf[k[(k[f>>2]|0)+40>>2]&1023](f)|0;continue}else{k[a>>2]=o+4;continue}}j=k[b>>2]|0;do if(j){n=k[j+12>>2]|0;if((n|0)==(k[j+16>>2]|0))p=Vf[k[(k[j>>2]|0)+36>>2]&1023](j)|0;else p=k[n>>2]|0;if((p|0)==-1){k[b>>2]=0;q=1;break}else{q=(k[b>>2]|0)==0;break}}else q=1;while(0);do if(l){b=k[l+12>>2]|0;if((b|0)==(k[l+16>>2]|0))r=Vf[k[(k[l>>2]|0)+36>>2]&1023](l)|0;else r=k[b>>2]|0;if((r|0)!=-1)if(q)break;else{m=39;break}else{k[c>>2]=0;m=37;break}}else m=37;while(0);if((m|0)==37?q:0)m=39;if((m|0)==39)k[d>>2]=k[d>>2]|2;return}function bkb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0;g=r;r=r+16|0;h=g+4|0;j=g;l=a+8|0;a=Vf[k[(k[l>>2]|0)+8>>2]&1023](l)|0;l=i[a>>0]|0;if(!(l&1))m=(l&255)>>>1;else m=k[a+4>>2]|0;l=i[a+12>>0]|0;if(!(l&1))n=(l&255)>>>1;else n=k[a+16>>2]|0;do if((m|0)!=(0-n|0)){k[j>>2]=k[d>>2];k[h>>2]=k[j>>2];l=Qub(c,h,a,a+24|0,f,e,0)|0;o=k[b>>2]|0;if((l|0)==(a|0)&(o|0)==12){k[b>>2]=0;break}if((o|0)<12&(l-a|0)==12)k[b>>2]=o+12}else k[e>>2]=k[e>>2]|4;while(0);r=g;return}function ckb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<61&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function dkb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,1)|0;f=k[e>>2]|0;if((h|0)<7&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function ekb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=cvb(c,g,e,f,4)|0;if(!(k[e>>2]&4))k[b>>2]=h+-1900;r=a;return}function fkb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=k[b>>2]|0;do if(a){f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))g=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else g=k[f>>2]|0;if((g|0)==-1){k[b>>2]=0;h=1;break}else{h=(k[b>>2]|0)==0;break}}else h=1;while(0);g=k[c>>2]|0;do if(g){a=k[g+12>>2]|0;if((a|0)==(k[g+16>>2]|0))i=Vf[k[(k[g>>2]|0)+36>>2]&1023](g)|0;else i=k[a>>2]|0;if((i|0)!=-1)if(h){j=g;l=17;break}else{l=16;break}else{k[c>>2]=0;l=14;break}}else l=14;while(0);if((l|0)==14)if(h)l=16;else{j=0;l=17}a:do if((l|0)==16)k[d>>2]=k[d>>2]|6;else if((l|0)==17){h=k[b>>2]|0;g=k[h+12>>2]|0;if((g|0)==(k[h+16>>2]|0))m=Vf[k[(k[h>>2]|0)+36>>2]&1023](h)|0;else m=k[g>>2]|0;if((Xf[k[(k[e>>2]|0)+52>>2]&255](e,m,0)|0)<<24>>24!=37){k[d>>2]=k[d>>2]|4;break}g=k[b>>2]|0;h=g+12|0;i=k[h>>2]|0;if((i|0)==(k[g+16>>2]|0)){Vf[k[(k[g>>2]|0)+40>>2]&1023](g)|0;a=k[b>>2]|0;if(!a)n=1;else{o=a;l=25}}else{k[h>>2]=i+4;o=g;l=25}do if((l|0)==25){g=k[o+12>>2]|0;if((g|0)==(k[o+16>>2]|0))p=Vf[k[(k[o>>2]|0)+36>>2]&1023](o)|0;else p=k[g>>2]|0;if((p|0)==-1){k[b>>2]=0;n=1;break}else{n=(k[b>>2]|0)==0;break}}while(0);do if(j){g=k[j+12>>2]|0;if((g|0)==(k[j+16>>2]|0))q=Vf[k[(k[j>>2]|0)+36>>2]&1023](j)|0;else q=k[g>>2]|0;if((q|0)!=-1)if(n)break a;else break;else{k[c>>2]=0;l=37;break}}else l=37;while(0);if((l|0)==37?!n:0)break;k[d>>2]=k[d>>2]|2}while(0);return}function gkb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;c=a+8|0;k[a>>2]=72548;k[c>>2]=72596;x=0;xa(948,a+12|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=72732;k[c>>2]=72808;return}}function hkb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c;vub(a,b);e=a+172|0;f=a+4|0;do{g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}f=f+12|0}while((f|0)!=(e|0));e=a+460|0;f=a+172|0;do{g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}f=f+12|0}while((f|0)!=(e|0));e=a+460|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+472|0;e=0;while(1){if((e|0)==3)break;k[f+(e<<2)>>2]=0;e=e+1|0}e=a+484|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+496|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}g=a+508|0;h=0;while(1){if((h|0)==3)break;k[g+(h<<2)>>2]=0;h=h+1|0}h=a+520|0;i=0;while(1){if((i|0)==3)break;k[h+(i<<2)>>2]=0;i=i+1|0}x=0;xa(949,d|0,b|0);b=x;x=0;do if(!(b&1)){x=0;xa(950,a|0,d|0);i=x;x=0;if(i&1){i=Hc()|0;j=M;Cub(d);l=j;m=i;break}else{Cub(d);r=c;return}}else{i=Hc()|0;l=M;m=i}while(0);K2a(h);K2a(g);K2a(f);K2a(e);K2a(a+472|0);K2a(a+460|0);K2a(a+448|0);K2a(a+436|0);K2a(a+424|0);K2a(a+412|0);K2a(a+400|0);K2a(a+388|0);K2a(a+376|0);K2a(a+364|0);K2a(a+352|0);K2a(a+340|0);K2a(a+328|0);K2a(a+316|0);K2a(a+304|0);K2a(a+292|0);K2a(a+280|0);K2a(a+268|0);K2a(a+256|0);K2a(a+244|0);K2a(a+232|0);K2a(a+220|0);K2a(a+208|0);K2a(a+196|0);K2a(a+184|0);K2a(a+172|0);K2a(a+160|0);K2a(a+148|0);K2a(a+136|0);K2a(a+124|0);K2a(a+112|0);K2a(a+100|0);K2a(a+88|0);K2a(a+76|0);K2a(a+64|0);K2a(a+52|0);K2a(a+40|0);K2a(a+28|0);K2a(a+16|0);K2a(a+4|0);xub(a);Sc(m|0)}function ikb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;c=a+8|0;k[a>>2]=72548;k[c>>2]=72596;x=0;xa(951,a+12|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=72732;k[c>>2]=72808;return}}function jkb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c;wub(a,b);e=a+172|0;f=a+4|0;do{g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}f=f+12|0}while((f|0)!=(e|0));e=a+460|0;f=a+172|0;do{g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}f=f+12|0}while((f|0)!=(e|0));e=a+460|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+472|0;e=0;while(1){if((e|0)==3)break;k[f+(e<<2)>>2]=0;e=e+1|0}e=a+484|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+496|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}g=a+508|0;h=0;while(1){if((h|0)==3)break;k[g+(h<<2)>>2]=0;h=h+1|0}h=a+520|0;i=0;while(1){if((i|0)==3)break;k[h+(i<<2)>>2]=0;i=i+1|0}x=0;xa(952,d|0,b|0);b=x;x=0;do if(!(b&1)){x=0;xa(950,a|0,d|0);i=x;x=0;if(i&1){i=Hc()|0;j=M;Cub(d);l=j;m=i;break}else{Cub(d);r=c;return}}else{i=Hc()|0;l=M;m=i}while(0);K2a(h);K2a(g);K2a(f);K2a(e);K2a(a+472|0);K2a(a+460|0);K2a(a+448|0);K2a(a+436|0);K2a(a+424|0);K2a(a+412|0);K2a(a+400|0);K2a(a+388|0);K2a(a+376|0);K2a(a+364|0);K2a(a+352|0);K2a(a+340|0);K2a(a+328|0);K2a(a+316|0);K2a(a+304|0);K2a(a+292|0);K2a(a+280|0);K2a(a+268|0);K2a(a+256|0);K2a(a+244|0);K2a(a+232|0);K2a(a+220|0);K2a(a+208|0);K2a(a+196|0);K2a(a+184|0);K2a(a+172|0);K2a(a+160|0);K2a(a+148|0);K2a(a+136|0);K2a(a+124|0);K2a(a+112|0);K2a(a+100|0);K2a(a+88|0);K2a(a+76|0);K2a(a+64|0);K2a(a+52|0);K2a(a+40|0);K2a(a+28|0);K2a(a+16|0);K2a(a+4|0);xub(a);Sc(m|0)}function kkb(a){a=a|0;K2a(a+532|0);K2a(a+520|0);K2a(a+508|0);K2a(a+496|0);K2a(a+484|0);K2a(a+472|0);K2a(a+460|0);K2a(a+448|0);K2a(a+436|0);K2a(a+424|0);K2a(a+412|0);K2a(a+400|0);K2a(a+388|0);K2a(a+376|0);K2a(a+364|0);K2a(a+352|0);K2a(a+340|0);K2a(a+328|0);K2a(a+316|0);K2a(a+304|0);K2a(a+292|0);K2a(a+280|0);K2a(a+268|0);K2a(a+256|0);K2a(a+244|0);K2a(a+232|0);K2a(a+220|0);K2a(a+208|0);K2a(a+196|0);K2a(a+184|0);K2a(a+172|0);K2a(a+160|0);K2a(a+148|0);K2a(a+136|0);K2a(a+124|0);K2a(a+112|0);K2a(a+100|0);K2a(a+88|0);K2a(a+76|0);K2a(a+64|0);K2a(a+52|0);K2a(a+40|0);K2a(a+28|0);K2a(a+16|0);xub(a+12|0);return}function lkb(a){a=a|0;K2a(a+532|0);K2a(a+520|0);K2a(a+508|0);K2a(a+496|0);K2a(a+484|0);K2a(a+472|0);K2a(a+460|0);K2a(a+448|0);K2a(a+436|0);K2a(a+424|0);K2a(a+412|0);K2a(a+400|0);K2a(a+388|0);K2a(a+376|0);K2a(a+364|0);K2a(a+352|0);K2a(a+340|0);K2a(a+328|0);K2a(a+316|0);K2a(a+304|0);K2a(a+292|0);K2a(a+280|0);K2a(a+268|0);K2a(a+256|0);K2a(a+244|0);K2a(a+232|0);K2a(a+220|0);K2a(a+208|0);K2a(a+196|0);K2a(a+184|0);K2a(a+172|0);K2a(a+160|0);K2a(a+148|0);K2a(a+136|0);K2a(a+124|0);K2a(a+112|0);K2a(a+100|0);K2a(a+88|0);K2a(a+76|0);K2a(a+64|0);K2a(a+52|0);K2a(a+40|0);K2a(a+28|0);K2a(a+16|0);xub(a+12|0);OBa(a);return}function mkb(a){a=a|0;return nkb(a+12|0)|0}function nkb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;b=a+508|0;c=i[b>>0]|0;d=(c&1)==0;e=(c&255)>>>1;c=b+1|0;b=a+516|0;f=a+512|0;a=0;while(1){if(d)g=e;else g=k[f>>2]|0;if(a>>>0>=g>>>0){h=a;break}if(d)j=c;else j=k[b>>2]|0;if((i[j+a>>0]|0)==37){h=a;break}a=a+1|0}if(d)l=c;else l=k[b>>2]|0;a:do switch(i[l+(h+1)>>0]|0){case 89:case 121:{a=h+2|0;while(1){if(d)m=e;else m=k[f>>2]|0;if(a>>>0>=m>>>0){n=a;break}if(d)o=c;else o=k[b>>2]|0;if((i[o+a>>0]|0)==37){n=a;break}a=a+1|0}if(d)p=e;else p=k[f>>2]|0;if((n|0)==(p|0))q=116;else{if(d)r=c;else r=k[b>>2]|0;switch(i[r+(n+1)>>0]|0){case 109:{a=n+2|0;while(1){if(d)s=e;else s=k[f>>2]|0;if(a>>>0>=s>>>0){t=a;break}if(d)u=c;else u=k[b>>2]|0;if((i[u+a>>0]|0)==37){t=a;break}a=a+1|0}if(d)v=e;else v=k[f>>2]|0;if((t|0)==(v|0)){q=116;break a}if(d)w=c;else w=k[b>>2]|0;if((i[w+(t+1)>>0]|0)==100){x=3;break a}else{q=116;break a}break}case 100:{a=n+2|0;while(1){if(d)y=e;else y=k[f>>2]|0;if(a>>>0>=y>>>0){z=a;break}if(d)A=c;else A=k[b>>2]|0;if((i[A+a>>0]|0)==37){z=a;break}a=a+1|0}if(d)B=e;else B=k[f>>2]|0;if((z|0)==(B|0)){q=116;break a}if(d)C=c;else C=k[b>>2]|0;if((i[C+(z+1)>>0]|0)==109){x=4;break a}else{q=116;break a}break}default:{q=116;break a}}}break}case 109:{a=h+2|0;while(1){if(d)D=e;else D=k[f>>2]|0;if(a>>>0>=D>>>0){E=a;break}if(d)F=c;else F=k[b>>2]|0;if((i[F+a>>0]|0)==37){E=a;break}a=a+1|0}if(d)G=e;else G=k[f>>2]|0;if((E|0)!=(G|0)){if(d)H=c;else H=k[b>>2]|0;if((i[H+(E+1)>>0]|0)==100){a=E+2|0;while(1){if(d)I=e;else I=k[f>>2]|0;if(a>>>0>=I>>>0){J=a;break}if(d)K=c;else K=k[b>>2]|0;if((i[K+a>>0]|0)==37){J=a;break}a=a+1|0}if(d)L=e;else L=k[f>>2]|0;if((J|0)!=(L|0)){a=J+1|0;if(d)M=c;else M=k[b>>2]|0;if((i[M+a>>0]|0)!=121){if(d)N=c;else N=k[b>>2]|0;if((i[N+a>>0]|0)!=89)q=116;else x=2}else x=2}else q=116}else q=116}else q=116;break}case 100:{a=h+2|0;while(1){if(d)O=e;else O=k[f>>2]|0;if(a>>>0>=O>>>0){P=a;break}if(d)Q=c;else Q=k[b>>2]|0;if((i[Q+a>>0]|0)==37){P=a;break}a=a+1|0}if(d)R=e;else R=k[f>>2]|0;if((P|0)!=(R|0)){if(d)S=c;else S=k[b>>2]|0;if((i[S+(P+1)>>0]|0)==109){a=P+2|0;while(1){if(d)T=e;else T=k[f>>2]|0;if(a>>>0>=T>>>0){U=a;break}if(d)V=c;else V=k[b>>2]|0;if((i[V+a>>0]|0)==37){U=a;break}a=a+1|0}if(d)W=e;else W=k[f>>2]|0;if((U|0)!=(W|0)){a=U+1|0;if(d)X=c;else X=k[b>>2]|0;if((i[X+a>>0]|0)!=121){if(d)Y=c;else Y=k[b>>2]|0;if((i[Y+a>>0]|0)!=89)q=116;else x=1}else x=1}else q=116}else q=116}else q=116;break}default:q=116}while(0);if((q|0)==116)x=0;return x|0}function okb(a){a=a|0;return a+16|0}function pkb(a){a=a|0;return a+-8+16|0}function qkb(a){a=a|0;return a+184|0}function rkb(a){a=a|0;return a+-8+184|0}function skb(a){a=a|0;return a+472|0}function tkb(a){a=a|0;return a+-8+472|0}function ukb(a){a=a|0;return a+496|0}function vkb(a){a=a|0;return a+-8+496|0}function wkb(a){a=a|0;return a+508|0}function xkb(a){a=a|0;return a+-8+508|0}function ykb(a){a=a|0;return a+520|0}function zkb(a){a=a|0;return a+-8+520|0}function Akb(a){a=a|0;return a+532|0}function Bkb(a){a=a|0;return a+-8+532|0}function Ckb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;c=a+8|0;k[a>>2]=72640;k[c>>2]=72688;x=0;xa(953,a+12|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=72844;k[c>>2]=72920;return}}function Dkb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;vub(a,b);e=a+172|0;f=a+4|0;do{g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}f=f+12|0}while((f|0)!=(e|0));e=a+460|0;f=a+172|0;do{g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}f=f+12|0}while((f|0)!=(e|0));e=a+460|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+472|0;e=0;while(1){if((e|0)==3)break;k[f+(e<<2)>>2]=0;e=e+1|0}e=a+484|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+496|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}g=a+508|0;h=0;while(1){if((h|0)==3)break;k[g+(h<<2)>>2]=0;h=h+1|0}h=a+520|0;i=0;while(1){if((i|0)==3)break;k[h+(i<<2)>>2]=0;i=i+1|0}x=0;xa(954,d|0,b|0);b=x;x=0;do if(!(b&1)){x=0;xa(955,a|0,d|0);i=x;x=0;if(i&1){i=Hc()|0;j=M;Dub(d);l=j;m=i;break}else{Dub(d);r=c;return}}else{i=Hc()|0;l=M;m=i}while(0);O5a(h);O5a(g);O5a(f);O5a(e);O5a(a+472|0);O5a(a+460|0);O5a(a+448|0);O5a(a+436|0);O5a(a+424|0);O5a(a+412|0);O5a(a+400|0);O5a(a+388|0);O5a(a+376|0);O5a(a+364|0);O5a(a+352|0);O5a(a+340|0);O5a(a+328|0);O5a(a+316|0);O5a(a+304|0);O5a(a+292|0);O5a(a+280|0);O5a(a+268|0);O5a(a+256|0);O5a(a+244|0);O5a(a+232|0);O5a(a+220|0);O5a(a+208|0);O5a(a+196|0);O5a(a+184|0);O5a(a+172|0);O5a(a+160|0);O5a(a+148|0);O5a(a+136|0);O5a(a+124|0);O5a(a+112|0);O5a(a+100|0);O5a(a+88|0);O5a(a+76|0);O5a(a+64|0);O5a(a+52|0);O5a(a+40|0);O5a(a+28|0);O5a(a+16|0);O5a(a+4|0);xub(a);Sc(m|0)}function Ekb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;c=a+8|0;k[a>>2]=72640;k[c>>2]=72688;x=0;xa(956,a+12|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=72844;k[c>>2]=72920;return}}function Fkb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;wub(a,b);e=a+172|0;f=a+4|0;do{g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}f=f+12|0}while((f|0)!=(e|0));e=a+460|0;f=a+172|0;do{g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}f=f+12|0}while((f|0)!=(e|0));e=a+460|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+472|0;e=0;while(1){if((e|0)==3)break;k[f+(e<<2)>>2]=0;e=e+1|0}e=a+484|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+496|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}g=a+508|0;h=0;while(1){if((h|0)==3)break;k[g+(h<<2)>>2]=0;h=h+1|0}h=a+520|0;i=0;while(1){if((i|0)==3)break;k[h+(i<<2)>>2]=0;i=i+1|0}x=0;xa(957,d|0,b|0);b=x;x=0;do if(!(b&1)){x=0;xa(955,a|0,d|0);i=x;x=0;if(i&1){i=Hc()|0;j=M;Dub(d);l=j;m=i;break}else{Dub(d);r=c;return}}else{i=Hc()|0;l=M;m=i}while(0);O5a(h);O5a(g);O5a(f);O5a(e);O5a(a+472|0);O5a(a+460|0);O5a(a+448|0);O5a(a+436|0);O5a(a+424|0);O5a(a+412|0);O5a(a+400|0);O5a(a+388|0);O5a(a+376|0);O5a(a+364|0);O5a(a+352|0);O5a(a+340|0);O5a(a+328|0);O5a(a+316|0);O5a(a+304|0);O5a(a+292|0);O5a(a+280|0);O5a(a+268|0);O5a(a+256|0);O5a(a+244|0);O5a(a+232|0);O5a(a+220|0);O5a(a+208|0);O5a(a+196|0);O5a(a+184|0);O5a(a+172|0);O5a(a+160|0);O5a(a+148|0);O5a(a+136|0);O5a(a+124|0);O5a(a+112|0);O5a(a+100|0);O5a(a+88|0);O5a(a+76|0);O5a(a+64|0);O5a(a+52|0);O5a(a+40|0);O5a(a+28|0);O5a(a+16|0);O5a(a+4|0);xub(a);Sc(m|0)}function Gkb(a){a=a|0;O5a(a+532|0);O5a(a+520|0);O5a(a+508|0);O5a(a+496|0);O5a(a+484|0);O5a(a+472|0);O5a(a+460|0);O5a(a+448|0);O5a(a+436|0);O5a(a+424|0);O5a(a+412|0);O5a(a+400|0);O5a(a+388|0);O5a(a+376|0);O5a(a+364|0);O5a(a+352|0);O5a(a+340|0);O5a(a+328|0);O5a(a+316|0);O5a(a+304|0);O5a(a+292|0);O5a(a+280|0);O5a(a+268|0);O5a(a+256|0);O5a(a+244|0);O5a(a+232|0);O5a(a+220|0);O5a(a+208|0);O5a(a+196|0);O5a(a+184|0);O5a(a+172|0);O5a(a+160|0);O5a(a+148|0);O5a(a+136|0);O5a(a+124|0);O5a(a+112|0);O5a(a+100|0);O5a(a+88|0);O5a(a+76|0);O5a(a+64|0);O5a(a+52|0);O5a(a+40|0);O5a(a+28|0);O5a(a+16|0);xub(a+12|0);return}function Hkb(a){a=a|0;O5a(a+532|0);O5a(a+520|0);O5a(a+508|0);O5a(a+496|0);O5a(a+484|0);O5a(a+472|0);O5a(a+460|0);O5a(a+448|0);O5a(a+436|0);O5a(a+424|0);O5a(a+412|0);O5a(a+400|0);O5a(a+388|0);O5a(a+376|0);O5a(a+364|0);O5a(a+352|0);O5a(a+340|0);O5a(a+328|0);O5a(a+316|0);O5a(a+304|0);O5a(a+292|0);O5a(a+280|0);O5a(a+268|0);O5a(a+256|0);O5a(a+244|0);O5a(a+232|0);O5a(a+220|0);O5a(a+208|0);O5a(a+196|0);O5a(a+184|0);O5a(a+172|0);O5a(a+160|0);O5a(a+148|0);O5a(a+136|0);O5a(a+124|0);O5a(a+112|0);O5a(a+100|0);O5a(a+88|0);O5a(a+76|0);O5a(a+64|0);O5a(a+52|0);O5a(a+40|0);O5a(a+28|0);O5a(a+16|0);xub(a+12|0);OBa(a);return}function Ikb(a){a=a|0;return Jkb(a+12|0)|0}function Jkb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;b=i[a+508>>0]|0;c=(b&1)==0;d=(b&255)>>>1;b=a+512|0;e=a+516|0;a=0;while(1){if(c)f=d;else f=k[b>>2]|0;if(a>>>0>=f>>>0){g=a;break}if(c)h=b;else h=k[e>>2]|0;if((k[h+(a<<2)>>2]|0)==37){g=a;break}a=a+1|0}if(c)j=b;else j=k[e>>2]|0;a:do switch(k[j+(g+1<<2)>>2]|0){case 89:case 121:{a=g+2|0;while(1){if(c)l=d;else l=k[b>>2]|0;if(a>>>0>=l>>>0){m=a;break}if(c)n=b;else n=k[e>>2]|0;if((k[n+(a<<2)>>2]|0)==37){m=a;break}a=a+1|0}if(c)o=d;else o=k[b>>2]|0;if((m|0)==(o|0))p=116;else{if(c)q=b;else q=k[e>>2]|0;switch(k[q+(m+1<<2)>>2]|0){case 109:{a=m+2|0;while(1){if(c)r=d;else r=k[b>>2]|0;if(a>>>0>=r>>>0){s=a;break}if(c)t=b;else t=k[e>>2]|0;if((k[t+(a<<2)>>2]|0)==37){s=a;break}a=a+1|0}if(c)u=d;else u=k[b>>2]|0;if((s|0)==(u|0)){p=116;break a}if(c)v=b;else v=k[e>>2]|0;if((k[v+(s+1<<2)>>2]|0)==100){w=3;break a}else{p=116;break a}break}case 100:{a=m+2|0;while(1){if(c)x=d;else x=k[b>>2]|0;if(a>>>0>=x>>>0){y=a;break}if(c)z=b;else z=k[e>>2]|0;if((k[z+(a<<2)>>2]|0)==37){y=a;break}a=a+1|0}if(c)A=d;else A=k[b>>2]|0;if((y|0)==(A|0)){p=116;break a}if(c)B=b;else B=k[e>>2]|0;if((k[B+(y+1<<2)>>2]|0)==109){w=4;break a}else{p=116;break a}break}default:{p=116;break a}}}break}case 109:{a=g+2|0;while(1){if(c)C=d;else C=k[b>>2]|0;if(a>>>0>=C>>>0){D=a;break}if(c)E=b;else E=k[e>>2]|0;if((k[E+(a<<2)>>2]|0)==37){D=a;break}a=a+1|0}if(c)F=d;else F=k[b>>2]|0;if((D|0)!=(F|0)){if(c)G=b;else G=k[e>>2]|0;if((k[G+(D+1<<2)>>2]|0)==100){a=D+2|0;while(1){if(c)H=d;else H=k[b>>2]|0;if(a>>>0>=H>>>0){I=a;break}if(c)J=b;else J=k[e>>2]|0;if((k[J+(a<<2)>>2]|0)==37){I=a;break}a=a+1|0}if(c)K=d;else K=k[b>>2]|0;if((I|0)!=(K|0)){a=I+1|0;if(c)L=b;else L=k[e>>2]|0;if((k[L+(a<<2)>>2]|0)!=121){if(c)M=b;else M=k[e>>2]|0;if((k[M+(a<<2)>>2]|0)!=89)p=116;else w=2}else w=2}else p=116}else p=116}else p=116;break}case 100:{a=g+2|0;while(1){if(c)N=d;else N=k[b>>2]|0;if(a>>>0>=N>>>0){O=a;break}if(c)P=b;else P=k[e>>2]|0;if((k[P+(a<<2)>>2]|0)==37){O=a;break}a=a+1|0}if(c)Q=d;else Q=k[b>>2]|0;if((O|0)!=(Q|0)){if(c)R=b;else R=k[e>>2]|0;if((k[R+(O+1<<2)>>2]|0)==109){a=O+2|0;while(1){if(c)S=d;else S=k[b>>2]|0;if(a>>>0>=S>>>0){T=a;break}if(c)U=b;else U=k[e>>2]|0;if((k[U+(a<<2)>>2]|0)==37){T=a;break}a=a+1|0}if(c)V=d;else V=k[b>>2]|0;if((T|0)!=(V|0)){a=T+1|0;if(c)W=b;else W=k[e>>2]|0;if((k[W+(a<<2)>>2]|0)!=121){if(c)X=b;else X=k[e>>2]|0;if((k[X+(a<<2)>>2]|0)!=89)p=116;else w=1}else w=1}else p=116}else p=116}else p=116;break}default:p=116}while(0);if((p|0)==116)w=0;return w|0}function Kkb(a){a=a|0;return a+16|0}function Lkb(a){a=a|0;return a+-8+16|0}function Mkb(a){a=a|0;return a+184|0}function Nkb(a){a=a|0;return a+-8+184|0}function Okb(a){a=a|0;return a+472|0}function Pkb(a){a=a|0;return a+-8+472|0}function Qkb(a){a=a|0;return a+496|0}function Rkb(a){a=a|0;return a+-8+496|0}function Skb(a){a=a|0;return a+508|0}function Tkb(a){a=a|0;return a+-8+508|0}function Ukb(a){a=a|0;return a+520|0}function Vkb(a){a=a|0;return a+-8+520|0}function Wkb(a){a=a|0;return a+532|0}function Xkb(a){a=a|0;return a+-8+532|0}function Ykb(a,b){a=a|0;b=b|0;var c=0;k[a+4>>2]=b+-1;k[a>>2]=74592;x=0;b=$a(51)|0;c=x;x=0;if(c&1){c=Hc()|0;Sc(c|0)}else{k[a+8>>2]=b;k[a>>2]=72956;return}}function Zkb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;h=r;r=r+16|0;j=h+8|0;l=h+4|0;m=h;n=zab(c)|0;k[l>>2]=n;x=0;o=Ta(495,l|0,74148)|0;l=x;x=0;if(l&1){l=Hc()|0;f0a(n)|0;Sc(l|0)}f0a(n)|0;n=f;a:while(1){if((n|0)==(g|0)){p=31;break}do if((Xf[k[(k[o>>2]|0)+36>>2]&255](o,i[n>>0]|0,0)|0)<<24>>24!=37){f=i[n>>0]|0;l=k[b>>2]|0;if(l){q=l+24|0;s=k[q>>2]|0;if((s|0)!=(k[l+28>>2]|0)){k[q>>2]=s+1;i[s>>0]=f;t=n;break}if((cg[k[(k[l>>2]|0)+52>>2]&1023](l,f&255)|0)==-1){k[b>>2]=0;t=n}else t=n}else t=n}else{f=n+1|0;if((f|0)==(g|0)){u=n;p=6;break a}l=Xf[k[(k[o>>2]|0)+36>>2]&255](o,i[f>>0]|0,0)|0;switch(l<<24>>24){case 79:case 69:{s=n+2|0;if((s|0)==(g|0)){v=n;w=f;p=14;break a}y=s;z=Xf[k[(k[o>>2]|0)+36>>2]&255](o,i[s>>0]|0,0)|0;A=l;break}default:{y=f;z=l;A=0}}l=k[(k[a>>2]|0)+12>>2]|0;k[m>>2]=k[b>>2];k[j>>2]=k[m>>2];f=Of[l&63](a,j,c,d,e,z,A)|0;k[b>>2]=f;t=y}while(0);n=t+1|0}do if((p|0)==6){t=i[u>>0]|0;n=k[b>>2]|0;if(n){y=n+24|0;A=k[y>>2]|0;if((A|0)!=(k[n+28>>2]|0)){k[y>>2]=A+1;i[A>>0]=t;B=n;break}if((cg[k[(k[n>>2]|0)+52>>2]&1023](n,t&255)|0)==-1){k[b>>2]=0;B=0}else B=n}else B=0}else if((p|0)==14){n=i[v>>0]|0;t=k[b>>2]|0;if(t){A=t+24|0;y=k[A>>2]|0;z=t+28|0;if((y|0)==(k[z>>2]|0)){if((cg[k[(k[t>>2]|0)+52>>2]&1023](t,n&255)|0)==-1){k[b>>2]=0;B=0;break}}else{k[A>>2]=y+1;i[y>>0]=n}n=i[w>>0]|0;y=k[A>>2]|0;if((y|0)!=(k[z>>2]|0)){k[A>>2]=y+1;i[y>>0]=n;B=t;break}if((cg[k[(k[t>>2]|0)+52>>2]&1023](t,n&255)|0)==-1){k[b>>2]=0;B=0}else B=t}else B=0}else if((p|0)==31)B=k[b>>2]|0;while(0);r=h;return B|0}function _kb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0;h=r;r=r+16|0;i=h+4|0;j=h;l=k[(k[a>>2]|0)+12>>2]|0;k[j>>2]=k[b>>2];k[i>>2]=k[j>>2];j=Of[l&63](a,i,c,d,e,f,g)|0;r=h;return j|0}function $kb(a){a=a|0;alb(a+8|0);return}function alb(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;x=0;c=$a(51)|0;d=x;x=0;do if(!(d&1)){if((b|0)!=(c|0)?(x=0,va(1543,k[a>>2]|0),e=x,x=0,e&1):0)break;return}while(0);a=Hc(0)|0;Fg(a)}function blb(a){a=a|0;alb(a+8|0);OBa(a);return}function clb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0;d=r;r=r+112|0;c=d+4|0;h=d;k[h>>2]=c+100;dlb(a+8|0,c,h,e,f,g);g=k[h>>2]|0;h=c;c=k[b>>2]|0;while(1){if((h|0)==(g|0)){j=c;break}b=i[h>>0]|0;do if(c){f=c+24|0;e=k[f>>2]|0;if((e|0)==(k[c+28>>2]|0)){a=(cg[k[(k[c>>2]|0)+52>>2]&1023](c,b&255)|0)==-1;l=a?0:c;break}else{k[f>>2]=e+1;i[e>>0]=b;l=c;break}}else l=0;while(0);h=h+1|0;c=l}r=d;return j|0}function dlb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0;g=r;r=r+16|0;h=g;i[h>>0]=37;j=h+1|0;i[j>>0]=e;l=h+2|0;i[l>>0]=f;i[h+3>>0]=0;if(f<<24>>24){i[j>>0]=f;i[l>>0]=e}e=b+(gf(b|0,(k[c>>2]|0)-b|0,h|0,d|0,k[a>>2]|0)|0)|0;k[c>>2]=e;r=g;return}function elb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=74592;x=0;xa(958,a+8|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=72956;return}}function flb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=BKa(2147483647,b,0)|0;k[a>>2]=f;if(f){r=c;return}c=Rd(8)|0;f=RLa(b)|0;x=0;fb(140,e|0,b|0,f|0);f=x;x=0;do if(!(f&1)){x=0;b=Fa(86,e|0,0,329727)|0;a=x;x=0;if(a&1){a=Hc()|0;g=M;K2a(e);h=g;i=a;j=12;break};k[d>>2]=k[b>>2];k[d+4>>2]=k[b+4>>2];k[d+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}x=0;xa(623,c|0,d|0);a=x;x=0;if(a&1)l=1;else{x=0;fb(149,c|0,9040,1245);x=0;l=0}a=Hc()|0;b=M;K2a(d);K2a(e);if(l){h=b;i=a;j=12}else{m=b;n=a}}else{a=Hc()|0;h=M;i=a;j=12}while(0);if((j|0)==12){Fc(c|0);m=h;n=i}Sc(n|0)}function glb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=74592;x=0;xa(959,a+8|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=72956;return}}function hlb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;e=BKa(2147483647,(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,0)|0;k[a>>2]=e;if(e){r=c;return}c=Rd(8)|0;x=0;fb(423,d|0,329727,b|0);b=x;x=0;if(!(b&1)){x=0;xa(623,c|0,d|0);b=x;x=0;if(b&1)f=1;else{x=0;fb(149,c|0,9040,1245);x=0;f=0}b=Hc()|0;e=M;K2a(d);if(f){g=e;h=b;j=7}else{l=e;m=b}}else{b=Hc()|0;g=M;h=b;j=7}if((j|0)==7){Fc(c|0);l=g;m=h}Sc(m|0)}function ilb(a,b){a=a|0;b=b|0;var c=0;k[a+4>>2]=b+-1;k[a>>2]=74592;x=0;b=$a(51)|0;c=x;x=0;if(c&1){c=Hc()|0;Sc(c|0)}else{k[a+8>>2]=b;k[a>>2]=72988;return}}function jlb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;h=r;r=r+16|0;i=h+8|0;j=h+4|0;l=h;m=zab(c)|0;k[j>>2]=m;x=0;n=Ta(495,j|0,74140)|0;j=x;x=0;if(j&1){j=Hc()|0;f0a(m)|0;Sc(j|0)}f0a(m)|0;m=f;a:while(1){if((m|0)==(g|0)){o=35;break}if((Xf[k[(k[n>>2]|0)+52>>2]&255](n,k[m>>2]|0,0)|0)<<24>>24!=37){f=k[m>>2]|0;j=k[b>>2]|0;if(j){p=j+24|0;q=k[p>>2]|0;if((q|0)==(k[j+28>>2]|0))s=cg[k[(k[j>>2]|0)+52>>2]&1023](j,f)|0;else{k[p>>2]=q+4;k[q>>2]=f;s=f}if((s|0)==-1){k[b>>2]=0;t=m}else t=m}else t=m}else{f=m+4|0;if((f|0)==(g|0)){u=m;o=6;break}q=Xf[k[(k[n>>2]|0)+52>>2]&255](n,k[f>>2]|0,0)|0;switch(q<<24>>24){case 79:case 69:{p=m+8|0;if((p|0)==(g|0)){v=m;w=f;o=15;break a}y=p;z=Xf[k[(k[n>>2]|0)+52>>2]&255](n,k[p>>2]|0,0)|0;A=q;break}default:{y=f;z=q;A=0}}q=k[(k[a>>2]|0)+12>>2]|0;k[l>>2]=k[b>>2];k[i>>2]=k[l>>2];f=Of[q&63](a,i,c,d,e,z,A)|0;k[b>>2]=f;t=y}m=t+4|0}do if((o|0)==6){t=k[u>>2]|0;m=k[b>>2]|0;if(m){y=m+24|0;A=k[y>>2]|0;if((A|0)==(k[m+28>>2]|0))B=cg[k[(k[m>>2]|0)+52>>2]&1023](m,t)|0;else{k[y>>2]=A+4;k[A>>2]=t;B=t}if((B|0)==-1){k[b>>2]=0;C=0}else C=m}else C=0}else if((o|0)==15){m=k[v>>2]|0;t=k[b>>2]|0;if(t){A=t+24|0;y=k[A>>2]|0;z=t+28|0;if((y|0)==(k[z>>2]|0))D=cg[k[(k[t>>2]|0)+52>>2]&1023](t,m)|0;else{k[A>>2]=y+4;k[y>>2]=m;D=m}if((D|0)==-1){k[b>>2]=0;C=0;break}m=k[w>>2]|0;y=k[A>>2]|0;if((y|0)==(k[z>>2]|0))E=cg[k[(k[t>>2]|0)+52>>2]&1023](t,m)|0;else{k[A>>2]=y+4;k[y>>2]=m;E=m}if((E|0)==-1){k[b>>2]=0;C=0}else C=t}else C=0}else if((o|0)==35)C=k[b>>2]|0;while(0);r=h;return C|0}function klb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0;h=r;r=r+16|0;i=h+4|0;j=h;l=k[(k[a>>2]|0)+12>>2]|0;k[j>>2]=k[b>>2];k[i>>2]=k[j>>2];j=Of[l&63](a,i,c,d,e,f,g)|0;r=h;return j|0}function llb(a){a=a|0;alb(a+8|0);return}function mlb(a){a=a|0;alb(a+8|0);OBa(a);return}function nlb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0;d=r;r=r+416|0;c=d+8|0;h=d;k[h>>2]=c+400;olb(a+8|0,c,h,e,f,g);g=k[h>>2]|0;h=c;c=k[b>>2]|0;while(1){if((h|0)==(g|0)){i=c;break}b=k[h>>2]|0;if(!c)j=0;else{f=c+24|0;e=k[f>>2]|0;if((e|0)==(k[c+28>>2]|0))l=cg[k[(k[c>>2]|0)+52>>2]&1023](c,b)|0;else{k[f>>2]=e+4;k[e>>2]=b;l=b}j=(l|0)==-1?0:c}h=h+4|0;c=j}r=d;return i|0}function olb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+128|0;h=g+16|0;i=g+12|0;j=g;l=g+8|0;k[i>>2]=h+100;dlb(a,h,i,d,e,f);f=j;k[f>>2]=0;k[f+4>>2]=0;k[l>>2]=h;h=(k[c>>2]|0)-b>>2;f=ZKa(k[a>>2]|0)|0;x=0;a=db(87,b|0,l|0,h|0,j|0)|0;j=x;x=0;if(j&1){j=Hc()|0;if((f|0)!=0?(x=0,Ba(635,f|0)|0,h=x,x=0,h&1):0){h=Hc(0)|0;Fg(h)}Sc(j|0)}if((f|0)!=0?(x=0,Ba(635,f|0)|0,f=x,x=0,f&1):0){f=Hc(0)|0;Fg(f)}if((a|0)==-1)mob(329768);else{k[c>>2]=b+(a<<2);r=g;return}}function plb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=74592;x=0;xa(958,a+8|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=72988;return}}function qlb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=74592;x=0;xa(959,a+8|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=72988;return}}function rlb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=74592;x=0;xa(958,a+8|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=73020;return}}function slb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=74592;x=0;xa(959,a+8|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=73020;return}}function tlb(a){a=a|0;alb(a+8|0);return}function ulb(a){a=a|0;alb(a+8|0);OBa(a);return}function vlb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=74592;x=0;xa(958,a+8|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=73044;return}}function wlb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=74592;x=0;xa(959,a+8|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Sc(b|0)}else{k[a>>2]=73044;return}}function xlb(a){a=a|0;alb(a+8|0);return}function ylb(a){a=a|0;alb(a+8|0);OBa(a);return}function zlb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73068;return}function Alb(a){a=a|0;return Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0}function Blb(a){a=a|0;return Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0}function Clb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+20>>2]&2047](a,b);return}function Dlb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+24>>2]&2047](a,b);return}function Elb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+28>>2]&2047](a,b);return}function Flb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+32>>2]&2047](a,b);return}function Glb(a){a=a|0;return Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}function Hlb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+40>>2]&2047](a,b);return}function Ilb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+44>>2]&2047](a,b);return}function Jlb(a){a=a|0;return}function Klb(a){a=a|0;OBa(a);return}function Llb(a){a=a|0;return 127}function Mlb(a){a=a|0;return 127}function Nlb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Olb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Plb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Qlb(a,b){a=a|0;b=b|0;D2a(a,1,45);return}function Rlb(a){a=a|0;return 0}function Slb(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function Tlb(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function Ulb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73132;return}function Vlb(a){a=a|0;return Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0}function Wlb(a){a=a|0;return Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0}function Xlb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+20>>2]&2047](a,b);return}function Ylb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+24>>2]&2047](a,b);return}function Zlb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+28>>2]&2047](a,b);return}function _lb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+32>>2]&2047](a,b);return}function $lb(a){a=a|0;return Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}function amb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+40>>2]&2047](a,b);return}function bmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+44>>2]&2047](a,b);return}function cmb(a){a=a|0;return}function dmb(a){a=a|0;OBa(a);return}function emb(a){a=a|0;return 127}function fmb(a){a=a|0;return 127}function gmb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function hmb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function imb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function jmb(a,b){a=a|0;b=b|0;D2a(a,1,45);return}function kmb(a){a=a|0;return 0}function lmb(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function mmb(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function nmb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73196;return}function omb(a){a=a|0;return Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0}function pmb(a){a=a|0;return Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0}function qmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+20>>2]&2047](a,b);return}function rmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+24>>2]&2047](a,b);return}function smb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+28>>2]&2047](a,b);return}function tmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+32>>2]&2047](a,b);return}function umb(a){a=a|0;return Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}function vmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+40>>2]&2047](a,b);return}function wmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+44>>2]&2047](a,b);return}function xmb(a){a=a|0;return}function ymb(a){a=a|0;OBa(a);return}function zmb(a){a=a|0;return 2147483647}function Amb(a){a=a|0;return 2147483647}function Bmb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Cmb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Dmb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Emb(a,b){a=a|0;b=b|0;H5a(a,1,45);return}function Fmb(a){a=a|0;return 0}function Gmb(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function Hmb(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function Imb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73260;return}function Jmb(a){a=a|0;return Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0}function Kmb(a){a=a|0;return Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0}function Lmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+20>>2]&2047](a,b);return}function Mmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+24>>2]&2047](a,b);return}function Nmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+28>>2]&2047](a,b);return}function Omb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+32>>2]&2047](a,b);return}function Pmb(a){a=a|0;return Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}function Qmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+40>>2]&2047](a,b);return}function Rmb(a,b){a=a|0;b=b|0;Tf[k[(k[b>>2]|0)+44>>2]&2047](a,b);return}function Smb(a){a=a|0;return}function Tmb(a){a=a|0;OBa(a);return}function Umb(a){a=a|0;return 2147483647}function Vmb(a){a=a|0;return 2147483647}function Wmb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Xmb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Ymb(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Zmb(a,b){a=a|0;b=b|0;H5a(a,1,45);return}function _mb(a){a=a|0;return 0}function $mb(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function anb(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function bnb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a+4>>2]=c+-1;k[a>>2]=73324;c=a+12|0;d=0;while(1){if((d|0)==3)break;k[c+(d<<2)>>2]=0;d=d+1|0}d=a+24|0;e=0;while(1){if((e|0)==3)break;k[d+(e<<2)>>2]=0;e=e+1|0}e=a+36|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+48|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}x=0;xa(960,a|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(f);K2a(e);K2a(d);K2a(c);Sc(b|0)}else return}function cnb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+48|0;d=c+12|0;e=c;f=c+24|0;g=BKa(2147483647,b,0)|0;h=(g|0)==0;a:do if(h){j=Rd(8)|0;l=RLa(b)|0;x=0;fb(140,e|0,b|0,l|0);l=x;x=0;do if(!(l&1)){x=0;m=Fa(86,e|0,0,329789)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(e);p=n;q=o;break};k[d>>2]=k[m>>2];k[d+4>>2]=k[m+4>>2];k[d+8>>2]=k[m+8>>2];o=0;while(1){if((o|0)==3)break;k[m+(o<<2)>>2]=0;o=o+1|0}x=0;xa(623,j|0,d|0);o=x;x=0;if(o&1)s=1;else{x=0;fb(149,j|0,9040,1245);x=0;s=0}o=Hc()|0;m=M;K2a(d);K2a(e);if(s){p=o;q=m}else{t=o;u=m;break a}}else{m=Hc()|0;p=m;q=M}while(0);Fc(j|0);t=p;u=q}else{x=0;l=Ba(635,g|0)|0;m=x;x=0;do if(!(m&1)){x=0;o=$a(52)|0;n=x;x=0;if(n&1){n=Hc()|0;v=M;if(!l){w=v;y=n;break}x=0;Ba(635,l|0)|0;z=x;x=0;if(!(z&1)){w=v;y=n;break}n=Hc(0)|0;Fg(n)}if((l|0)!=0?(x=0,Ba(635,l|0)|0,n=x,x=0,n&1):0){n=Hc(0)|0;Fg(n)}n=i[k[o+20>>2]>>0]|0;i[a+8>>0]=n<<24>>24==0?127:n;n=i[k[o+24>>2]>>0]|0;i[a+9>>0]=n<<24>>24==0?127:n;x=0;Ta(496,a+12|0,k[o+28>>2]|0)|0;n=x;x=0;if(!(n&1)?(n=a+24|0,x=0,Ta(496,n|0,k[o+16>>2]|0)|0,v=x,x=0,!(v&1)):0){v=i[o+41>>0]|0;k[a+60>>2]=v<<24>>24==127?0:v<<24>>24;v=o+46|0;z=a+36|0;if(!(i[v>>0]|0)){x=0;Ta(496,z|0,329832)|0;A=x;x=0;if(A&1){B=22;break}}else{x=0;Ta(496,z|0,k[o+32>>2]|0)|0;z=x;x=0;if(z&1){B=22;break}}z=o+47|0;A=a+48|0;if(!(i[z>>0]|0)){x=0;Ta(496,A|0,329832)|0;C=x;x=0;if(C&1){B=22;break}}else{x=0;Ta(496,A|0,k[o+36>>2]|0)|0;A=x;x=0;if(A&1){B=22;break}}x=0;xa(604,f|0,n|0);A=x;x=0;if(!(A&1)){x=0;La(63,a+64|0,f|0,0,i[o+42>>0]|0,i[o+43>>0]|0,i[v>>0]|0);v=x;x=0;if(!(v&1)?(x=0,La(63,a+68|0,n|0,0,i[o+44>>0]|0,i[o+45>>0]|0,i[z>>0]|0),z=x,x=0,!(z&1)):0){K2a(f);x=0;va(1543,g|0);z=x;x=0;if(z&1){z=Hc(0)|0;Fg(z)}else{r=c;return}}z=Hc()|0;o=M;K2a(f);t=z;u=o;break a}else B=22}else B=22}else B=22;while(0);if((B|0)==22){l=Hc()|0;w=M;y=l}t=y;u=w}while(0);if(!h?(x=0,va(1543,g|0),g=x,x=0,g&1):0){g=Hc(0)|0;Fg(g)}Sc(t|0)}function dnb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a+4>>2]=c+-1;k[a>>2]=73324;c=a+12|0;d=0;while(1){if((d|0)==3)break;k[c+(d<<2)>>2]=0;d=d+1|0}d=a+24|0;e=0;while(1){if((e|0)==3)break;k[d+(e<<2)>>2]=0;e=e+1|0}e=a+36|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+48|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}x=0;xa(960,a|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(f);K2a(e);K2a(d);K2a(c);Sc(b|0)}else return}function enb(a){a=a|0;k[a>>2]=73324;K2a(a+48|0);K2a(a+36|0);K2a(a+24|0);K2a(a+12|0);return}function fnb(a){a=a|0;k[a>>2]=73324;K2a(a+48|0);K2a(a+36|0);K2a(a+24|0);K2a(a+12|0);OBa(a);return}function gnb(a){a=a|0;return i[a+8>>0]|0}function hnb(a){a=a|0;return i[a+9>>0]|0}function inb(a,b){a=a|0;b=b|0;n2a(a,b+12|0);return}function jnb(a,b){a=a|0;b=b|0;n2a(a,b+24|0);return}function knb(a,b){a=a|0;b=b|0;n2a(a,b+36|0);return}function lnb(a,b){a=a|0;b=b|0;n2a(a,b+48|0);return}function mnb(a){a=a|0;return k[a+60>>2]|0}function nnb(a,b){a=a|0;b=b|0;var c=0;c=b+64|0;b=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[a>>0]=b;i[a+1>>0]=b>>8;i[a+2>>0]=b>>16;i[a+3>>0]=b>>24;return}function onb(a,b){a=a|0;b=b|0;var c=0;c=b+68|0;b=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[a>>0]=b;i[a+1>>0]=b>>8;i[a+2>>0]=b>>16;i[a+3>>0]=b>>24;return}function pnb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a+4>>2]=c+-1;k[a>>2]=73380;c=a+12|0;d=0;while(1){if((d|0)==3)break;k[c+(d<<2)>>2]=0;d=d+1|0}d=a+24|0;e=0;while(1){if((e|0)==3)break;k[d+(e<<2)>>2]=0;e=e+1|0}e=a+36|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+48|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}x=0;xa(961,a|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(f);K2a(e);K2a(d);K2a(c);Sc(b|0)}else return}function qnb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+48|0;d=c+12|0;e=c;f=c+24|0;g=BKa(2147483647,b,0)|0;h=(g|0)==0;a:do if(h){j=Rd(8)|0;l=RLa(b)|0;x=0;fb(140,e|0,b|0,l|0);l=x;x=0;do if(!(l&1)){x=0;m=Fa(86,e|0,0,329789)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(e);p=n;q=o;break};k[d>>2]=k[m>>2];k[d+4>>2]=k[m+4>>2];k[d+8>>2]=k[m+8>>2];o=0;while(1){if((o|0)==3)break;k[m+(o<<2)>>2]=0;o=o+1|0}x=0;xa(623,j|0,d|0);o=x;x=0;if(o&1)s=1;else{x=0;fb(149,j|0,9040,1245);x=0;s=0}o=Hc()|0;m=M;K2a(d);K2a(e);if(s){p=o;q=m}else{t=o;u=m;break a}}else{m=Hc()|0;p=m;q=M}while(0);Fc(j|0);t=p;u=q}else{x=0;l=Ba(635,g|0)|0;m=x;x=0;do if(!(m&1)){x=0;o=$a(52)|0;n=x;x=0;if(n&1){n=Hc()|0;v=M;if(!l){w=v;y=n;break}x=0;Ba(635,l|0)|0;z=x;x=0;if(!(z&1)){w=v;y=n;break}n=Hc(0)|0;Fg(n)}if((l|0)!=0?(x=0,Ba(635,l|0)|0,n=x,x=0,n&1):0){n=Hc(0)|0;Fg(n)}n=i[k[o+20>>2]>>0]|0;i[a+8>>0]=n<<24>>24==0?127:n;n=i[k[o+24>>2]>>0]|0;i[a+9>>0]=n<<24>>24==0?127:n;x=0;Ta(496,a+12|0,k[o+28>>2]|0)|0;n=x;x=0;if(!(n&1)?(n=a+24|0,x=0,Ta(496,n|0,k[o+12>>2]|0)|0,v=x,x=0,!(v&1)):0){v=i[o+40>>0]|0;k[a+60>>2]=v<<24>>24==127?0:v<<24>>24;v=o+52|0;z=a+36|0;if(!(i[v>>0]|0)){x=0;Ta(496,z|0,329832)|0;A=x;x=0;if(A&1){B=22;break}}else{x=0;Ta(496,z|0,k[o+32>>2]|0)|0;z=x;x=0;if(z&1){B=22;break}}z=o+53|0;A=a+48|0;if(!(i[z>>0]|0)){x=0;Ta(496,A|0,329832)|0;C=x;x=0;if(C&1){B=22;break}}else{x=0;Ta(496,A|0,k[o+36>>2]|0)|0;A=x;x=0;if(A&1){B=22;break}}x=0;xa(604,f|0,n|0);A=x;x=0;if(!(A&1)){x=0;La(63,a+64|0,f|0,1,i[o+48>>0]|0,i[o+49>>0]|0,i[v>>0]|0);v=x;x=0;if(!(v&1)?(x=0,La(63,a+68|0,n|0,1,i[o+50>>0]|0,i[o+51>>0]|0,i[z>>0]|0),z=x,x=0,!(z&1)):0){K2a(f);x=0;va(1543,g|0);z=x;x=0;if(z&1){z=Hc(0)|0;Fg(z)}else{r=c;return}}z=Hc()|0;o=M;K2a(f);t=z;u=o;break a}else B=22}else B=22}else B=22;while(0);if((B|0)==22){l=Hc()|0;w=M;y=l}t=y;u=w}while(0);if(!h?(x=0,va(1543,g|0),g=x,x=0,g&1):0){g=Hc(0)|0;Fg(g)}Sc(t|0)}function rnb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a+4>>2]=c+-1;k[a>>2]=73380;c=a+12|0;d=0;while(1){if((d|0)==3)break;k[c+(d<<2)>>2]=0;d=d+1|0}d=a+24|0;e=0;while(1){if((e|0)==3)break;k[d+(e<<2)>>2]=0;e=e+1|0}e=a+36|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+48|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}x=0;xa(961,a|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(f);K2a(e);K2a(d);K2a(c);Sc(b|0)}else return}function snb(a){a=a|0;k[a>>2]=73380;K2a(a+48|0);K2a(a+36|0);K2a(a+24|0);K2a(a+12|0);return}function tnb(a){a=a|0;k[a>>2]=73380;K2a(a+48|0);K2a(a+36|0);K2a(a+24|0);K2a(a+12|0);OBa(a);return}function unb(a){a=a|0;return i[a+8>>0]|0}function vnb(a){a=a|0;return i[a+9>>0]|0}function wnb(a,b){a=a|0;b=b|0;n2a(a,b+12|0);return}function xnb(a,b){a=a|0;b=b|0;n2a(a,b+24|0);return}function ynb(a,b){a=a|0;b=b|0;n2a(a,b+36|0);return}function znb(a,b){a=a|0;b=b|0;n2a(a,b+48|0);return}function Anb(a){a=a|0;return k[a+60>>2]|0}function Bnb(a,b){a=a|0;b=b|0;var c=0;c=b+64|0;b=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[a>>0]=b;i[a+1>>0]=b>>8;i[a+2>>0]=b>>16;i[a+3>>0]=b>>24;return}function Cnb(a,b){a=a|0;b=b|0;var c=0;c=b+68|0;b=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[a>>0]=b;i[a+1>>0]=b>>8;i[a+2>>0]=b>>16;i[a+3>>0]=b>>24;return}function Dnb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a+4>>2]=c+-1;k[a>>2]=73436;c=a+16|0;d=0;while(1){if((d|0)==3)break;k[c+(d<<2)>>2]=0;d=d+1|0}d=a+28|0;e=0;while(1){if((e|0)==3)break;k[d+(e<<2)>>2]=0;e=e+1|0}e=a+40|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+52|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}x=0;xa(962,a|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;O5a(f);O5a(e);O5a(d);K2a(c);Sc(b|0)}else return}function Enb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+448|0;d=c+36|0;e=c+24|0;f=c+48|0;g=c;h=c+20|0;j=c+8|0;l=BKa(2147483647,b,0)|0;m=(l|0)==0;a:do if(m){n=Rd(8)|0;o=RLa(b)|0;x=0;fb(140,e|0,b|0,o|0);o=x;x=0;do if(!(o&1)){x=0;p=Fa(86,e|0,0,329789)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(e);t=q;u=s;break};k[d>>2]=k[p>>2];k[d+4>>2]=k[p+4>>2];k[d+8>>2]=k[p+8>>2];s=0;while(1){if((s|0)==3)break;k[p+(s<<2)>>2]=0;s=s+1|0}x=0;xa(623,n|0,d|0);s=x;x=0;if(s&1)v=1;else{x=0;fb(149,n|0,9040,1245);x=0;v=0}s=Hc()|0;p=M;K2a(d);K2a(e);if(v){t=s;u=p}else{w=s;y=p;break a}}else{p=Hc()|0;t=p;u=M}while(0);Fc(n|0);w=t;y=u}else{x=0;o=Ba(635,l|0)|0;p=x;x=0;do if(!(p&1)){x=0;s=$a(52)|0;q=x;x=0;if(q&1){q=Hc()|0;z=M;if(!o){A=z;B=q;break}x=0;Ba(635,o|0)|0;C=x;x=0;if(!(C&1)){A=z;B=q;break}q=Hc(0)|0;Fg(q)}if((o|0)!=0?(x=0,Ba(635,o|0)|0,q=x,x=0,q&1):0){q=Hc(0)|0;Fg(q)}q=i[k[s+20>>2]>>0]|0;k[a+8>>2]=q<<24>>24==0?2147483647:q<<24>>24;q=i[k[s+24>>2]>>0]|0;k[a+12>>2]=q<<24>>24==0?2147483647:q<<24>>24;x=0;Ta(496,a+16|0,k[s+28>>2]|0)|0;q=x;x=0;if(!(q&1)?(q=g,k[q>>2]=0,k[q+4>>2]=0,k[h>>2]=k[s+16>>2],x=0,q=Ba(635,l|0)|0,z=x,x=0,!(z&1)):0){x=0;z=db(87,f|0,h|0,100,g|0)|0;C=x;x=0;if(C&1){C=Hc()|0;D=M;if(!q){A=D;B=C;break}x=0;Ba(635,q|0)|0;E=x;x=0;if(!(E&1)){A=D;B=C;break}C=Hc(0)|0;Fg(C)}if((q|0)!=0?(x=0,Ba(635,q|0)|0,q=x,x=0,q&1):0){q=Hc(0)|0;Fg(q)}if((z|0)==-1?(x=0,va(1544,329768),q=x,x=0,q&1):0){F=22;break}q=a+28|0;x=0;Fa(173,q|0,f|0,f+(z<<2)|0)|0;z=x;x=0;if(!(z&1)){z=i[s+41>>0]|0;k[a+64>>2]=z<<24>>24==127?0:z<<24>>24;z=s+46|0;if(!(i[z>>0]|0)){x=0;Ta(639,a+40|0,75780)|0;C=x;x=0;if(C&1){F=22;break}}else{C=g;k[C>>2]=0;k[C+4>>2]=0;k[h>>2]=k[s+32>>2];x=0;C=Ba(635,l|0)|0;D=x;x=0;if(D&1){F=22;break}x=0;D=db(87,f|0,h|0,100,g|0)|0;E=x;x=0;if(E&1){E=Hc()|0;G=M;if(!C){A=G;B=E;break}x=0;Ba(635,C|0)|0;H=x;x=0;if(!(H&1)){A=G;B=E;break}E=Hc(0)|0;Fg(E)}if((C|0)!=0?(x=0,Ba(635,C|0)|0,C=x,x=0,C&1):0){C=Hc(0)|0;Fg(C)}if((D|0)==-1?(x=0,va(1544,329768),C=x,x=0,C&1):0){F=22;break}x=0;Fa(173,a+40|0,f|0,f+(D<<2)|0)|0;D=x;x=0;if(D&1){F=22;break}}D=s+47|0;if(!(i[D>>0]|0)){x=0;Ta(639,a+52|0,75780)|0;C=x;x=0;if(C&1){F=22;break}}else{C=g;k[C>>2]=0;k[C+4>>2]=0;k[h>>2]=k[s+36>>2];x=0;C=Ba(635,l|0)|0;E=x;x=0;if(E&1){F=22;break}x=0;E=db(87,f|0,h|0,100,g|0)|0;G=x;x=0;if(G&1){G=Hc()|0;H=M;if(!C){A=H;B=G;break}x=0;Ba(635,C|0)|0;I=x;x=0;if(!(I&1)){A=H;B=G;break}G=Hc(0)|0;Fg(G)}if((C|0)!=0?(x=0,Ba(635,C|0)|0,C=x,x=0,C&1):0){C=Hc(0)|0;Fg(C)}if((E|0)==-1?(x=0,va(1544,329768),C=x,x=0,C&1):0){F=22;break}x=0;Fa(173,a+52|0,f|0,f+(E<<2)|0)|0;E=x;x=0;if(E&1){F=22;break}}x=0;xa(963,j|0,q|0);E=x;x=0;if(!(E&1)){x=0;La(64,a+68|0,j|0,0,i[s+42>>0]|0,i[s+43>>0]|0,i[z>>0]|0);z=x;x=0;if(!(z&1)?(x=0,La(64,a+72|0,q|0,0,i[s+44>>0]|0,i[s+45>>0]|0,i[D>>0]|0),D=x,x=0,!(D&1)):0){O5a(j);x=0;va(1543,l|0);D=x;x=0;if(D&1){D=Hc(0)|0;Fg(D)}else{r=c;return}}D=Hc()|0;s=M;O5a(j);w=D;y=s;break a}else F=22}else F=22}else F=22}else F=22;while(0);if((F|0)==22){o=Hc()|0;A=M;B=o}w=B;y=A}while(0);if(!m?(x=0,va(1543,l|0),l=x,x=0,l&1):0){l=Hc(0)|0;Fg(l)}Sc(w|0)}function Fnb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a+4>>2]=c+-1;k[a>>2]=73436;c=a+16|0;d=0;while(1){if((d|0)==3)break;k[c+(d<<2)>>2]=0;d=d+1|0}d=a+28|0;e=0;while(1){if((e|0)==3)break;k[d+(e<<2)>>2]=0;e=e+1|0}e=a+40|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+52|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}x=0;xa(962,a|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=x;x=0;if(b&1){b=Hc()|0;O5a(f);O5a(e);O5a(d);K2a(c);Sc(b|0)}else return}function Gnb(a){a=a|0;k[a>>2]=73436;O5a(a+52|0);O5a(a+40|0);O5a(a+28|0);K2a(a+16|0);return}function Hnb(a){a=a|0;k[a>>2]=73436;O5a(a+52|0);O5a(a+40|0);O5a(a+28|0);K2a(a+16|0);OBa(a);return}function Inb(a){a=a|0;return k[a+8>>2]|0}function Jnb(a){a=a|0;return k[a+12>>2]|0}function Knb(a,b){a=a|0;b=b|0;n2a(a,b+16|0);return}function Lnb(a,b){a=a|0;b=b|0;r5a(a,b+28|0);return}function Mnb(a,b){a=a|0;b=b|0;r5a(a,b+40|0);return}function Nnb(a,b){a=a|0;b=b|0;r5a(a,b+52|0);return}function Onb(a){a=a|0;return k[a+64>>2]|0}function Pnb(a,b){a=a|0;b=b|0;var c=0;c=b+68|0;b=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[a>>0]=b;i[a+1>>0]=b>>8;i[a+2>>0]=b>>16;i[a+3>>0]=b>>24;return}function Qnb(a,b){a=a|0;b=b|0;var c=0;c=b+72|0;b=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[a>>0]=b;i[a+1>>0]=b>>8;i[a+2>>0]=b>>16;i[a+3>>0]=b>>24;return}function Rnb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a+4>>2]=c+-1;k[a>>2]=73492;c=a+16|0;d=0;while(1){if((d|0)==3)break;k[c+(d<<2)>>2]=0;d=d+1|0}d=a+28|0;e=0;while(1){if((e|0)==3)break;k[d+(e<<2)>>2]=0;e=e+1|0}e=a+40|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+52|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}x=0;xa(964,a|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;O5a(f);O5a(e);O5a(d);K2a(c);Sc(b|0)}else return}function Snb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+448|0;d=c+36|0;e=c+24|0;f=c+48|0;g=c;h=c+20|0;j=c+8|0;l=BKa(2147483647,b,0)|0;m=(l|0)==0;a:do if(m){n=Rd(8)|0;o=RLa(b)|0;x=0;fb(140,e|0,b|0,o|0);o=x;x=0;do if(!(o&1)){x=0;p=Fa(86,e|0,0,329789)|0;q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(e);t=q;u=s;break};k[d>>2]=k[p>>2];k[d+4>>2]=k[p+4>>2];k[d+8>>2]=k[p+8>>2];s=0;while(1){if((s|0)==3)break;k[p+(s<<2)>>2]=0;s=s+1|0}x=0;xa(623,n|0,d|0);s=x;x=0;if(s&1)v=1;else{x=0;fb(149,n|0,9040,1245);x=0;v=0}s=Hc()|0;p=M;K2a(d);K2a(e);if(v){t=s;u=p}else{w=s;y=p;break a}}else{p=Hc()|0;t=p;u=M}while(0);Fc(n|0);w=t;y=u}else{x=0;o=Ba(635,l|0)|0;p=x;x=0;do if(!(p&1)){x=0;s=$a(52)|0;q=x;x=0;if(q&1){q=Hc()|0;z=M;if(!o){A=z;B=q;break}x=0;Ba(635,o|0)|0;C=x;x=0;if(!(C&1)){A=z;B=q;break}q=Hc(0)|0;Fg(q)}if((o|0)!=0?(x=0,Ba(635,o|0)|0,q=x,x=0,q&1):0){q=Hc(0)|0;Fg(q)}q=i[k[s+20>>2]>>0]|0;k[a+8>>2]=q<<24>>24==0?2147483647:q<<24>>24;q=i[k[s+24>>2]>>0]|0;k[a+12>>2]=q<<24>>24==0?2147483647:q<<24>>24;x=0;Ta(496,a+16|0,k[s+28>>2]|0)|0;q=x;x=0;if(!(q&1)?(q=g,k[q>>2]=0,k[q+4>>2]=0,k[h>>2]=k[s+12>>2],x=0,q=Ba(635,l|0)|0,z=x,x=0,!(z&1)):0){x=0;z=db(87,f|0,h|0,100,g|0)|0;C=x;x=0;if(C&1){C=Hc()|0;D=M;if(!q){A=D;B=C;break}x=0;Ba(635,q|0)|0;E=x;x=0;if(!(E&1)){A=D;B=C;break}C=Hc(0)|0;Fg(C)}if((q|0)!=0?(x=0,Ba(635,q|0)|0,q=x,x=0,q&1):0){q=Hc(0)|0;Fg(q)}if((z|0)==-1?(x=0,va(1544,329768),q=x,x=0,q&1):0){F=22;break}q=a+28|0;x=0;Fa(173,q|0,f|0,f+(z<<2)|0)|0;z=x;x=0;if(!(z&1)){z=i[s+40>>0]|0;k[a+64>>2]=z<<24>>24==127?0:z<<24>>24;z=s+52|0;if(!(i[z>>0]|0)){x=0;Ta(639,a+40|0,75780)|0;C=x;x=0;if(C&1){F=22;break}}else{C=g;k[C>>2]=0;k[C+4>>2]=0;k[h>>2]=k[s+32>>2];x=0;C=Ba(635,l|0)|0;D=x;x=0;if(D&1){F=22;break}x=0;D=db(87,f|0,h|0,100,g|0)|0;E=x;x=0;if(E&1){E=Hc()|0;G=M;if(!C){A=G;B=E;break}x=0;Ba(635,C|0)|0;H=x;x=0;if(!(H&1)){A=G;B=E;break}E=Hc(0)|0;Fg(E)}if((C|0)!=0?(x=0,Ba(635,C|0)|0,C=x,x=0,C&1):0){C=Hc(0)|0;Fg(C)}if((D|0)==-1?(x=0,va(1544,329768),C=x,x=0,C&1):0){F=22;break}x=0;Fa(173,a+40|0,f|0,f+(D<<2)|0)|0;D=x;x=0;if(D&1){F=22;break}}D=s+53|0;if(!(i[D>>0]|0)){x=0;Ta(639,a+52|0,75780)|0;C=x;x=0;if(C&1){F=22;break}}else{C=g;k[C>>2]=0;k[C+4>>2]=0;k[h>>2]=k[s+36>>2];x=0;C=Ba(635,l|0)|0;E=x;x=0;if(E&1){F=22;break}x=0;E=db(87,f|0,h|0,100,g|0)|0;G=x;x=0;if(G&1){G=Hc()|0;H=M;if(!C){A=H;B=G;break}x=0;Ba(635,C|0)|0;I=x;x=0;if(!(I&1)){A=H;B=G;break}G=Hc(0)|0;Fg(G)}if((C|0)!=0?(x=0,Ba(635,C|0)|0,C=x,x=0,C&1):0){C=Hc(0)|0;Fg(C)}if((E|0)==-1?(x=0,va(1544,329768),C=x,x=0,C&1):0){F=22;break}x=0;Fa(173,a+52|0,f|0,f+(E<<2)|0)|0;E=x;x=0;if(E&1){F=22;break}}x=0;xa(963,j|0,q|0);E=x;x=0;if(!(E&1)){x=0;La(64,a+68|0,j|0,1,i[s+48>>0]|0,i[s+49>>0]|0,i[z>>0]|0);z=x;x=0;if(!(z&1)?(x=0,La(64,a+72|0,q|0,1,i[s+50>>0]|0,i[s+51>>0]|0,i[D>>0]|0),D=x,x=0,!(D&1)):0){O5a(j);x=0;va(1543,l|0);D=x;x=0;if(D&1){D=Hc(0)|0;Fg(D)}else{r=c;return}}D=Hc()|0;s=M;O5a(j);w=D;y=s;break a}else F=22}else F=22}else F=22}else F=22;while(0);if((F|0)==22){o=Hc()|0;A=M;B=o}w=B;y=A}while(0);if(!m?(x=0,va(1543,l|0),l=x,x=0,l&1):0){l=Hc(0)|0;Fg(l)}Sc(w|0)}function Tnb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;k[a+4>>2]=c+-1;k[a>>2]=73492;c=a+16|0;d=0;while(1){if((d|0)==3)break;k[c+(d<<2)>>2]=0;d=d+1|0}d=a+28|0;e=0;while(1){if((e|0)==3)break;k[d+(e<<2)>>2]=0;e=e+1|0}e=a+40|0;f=0;while(1){if((f|0)==3)break;k[e+(f<<2)>>2]=0;f=f+1|0}f=a+52|0;g=0;while(1){if((g|0)==3)break;k[f+(g<<2)>>2]=0;g=g+1|0}x=0;xa(964,a|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=x;x=0;if(b&1){b=Hc()|0;O5a(f);O5a(e);O5a(d);K2a(c);Sc(b|0)}else return}function Unb(a){a=a|0;k[a>>2]=73492;O5a(a+52|0);O5a(a+40|0);O5a(a+28|0);K2a(a+16|0);return}function Vnb(a){a=a|0;k[a>>2]=73492;O5a(a+52|0);O5a(a+40|0);O5a(a+28|0);K2a(a+16|0);OBa(a);return}function Wnb(a){a=a|0;return k[a+8>>2]|0}function Xnb(a){a=a|0;return k[a+12>>2]|0}function Ynb(a,b){a=a|0;b=b|0;n2a(a,b+16|0);return}function Znb(a,b){a=a|0;b=b|0;r5a(a,b+28|0);return}function _nb(a,b){a=a|0;b=b|0;r5a(a,b+40|0);return}function $nb(a,b){a=a|0;b=b|0;r5a(a,b+52|0);return}function aob(a){a=a|0;return k[a+64>>2]|0}function bob(a,b){a=a|0;b=b|0;var c=0;c=b+68|0;b=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[a>>0]=b;i[a+1>>0]=b>>8;i[a+2>>0]=b>>16;i[a+3>>0]=b>>24;return}function cob(a,b){a=a|0;b=b|0;var c=0;c=b+72|0;b=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[a>>0]=b;i[a+1>>0]=b>>8;i[a+2>>0]=b>>16;i[a+3>>0]=b>>24;return}function dob(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73548;return}function eob(a){a=a|0;return}function fob(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0;h=r;r=r+16|0;i=h+12|0;j=h+8|0;l=h+4|0;m=h;n=k[(k[a>>2]|0)+12>>2]|0;k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];k[j>>2]=k[l>>2];k[i>>2]=k[m>>2];m=Of[n&63](a,j,i,d,e,f,g)|0;r=h;return m|0}function gob(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0;h=r;r=r+16|0;i=h+12|0;j=h+8|0;l=h+4|0;m=h;n=k[(k[a>>2]|0)+16>>2]|0;k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];k[j>>2]=k[l>>2];k[i>>2]=k[m>>2];m=Of[n&63](a,j,i,d,e,f,g)|0;r=h;return m|0}function hob(a){a=a|0;return}function iob(a){a=a|0;OBa(a);return}function job(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;a=r;r=r+240|0;h=a+24|0;j=a;l=a+140|0;m=a+16|0;n=a+12|0;o=a+8|0;p=a+136|0;q=a+4|0;s=a+36|0;k[m>>2]=l;t=m+4|0;k[t>>2]=1545;u=l+100|0;x=0;v=Ba(564,e|0)|0;w=x;x=0;if(!(w&1)){k[o>>2]=v;x=0;v=Ta(495,o|0,74148)|0;w=x;x=0;a:do if(!(w&1)?(i[p>>0]=0,k[q>>2]=k[c>>2],y=k[e+4>>2]|0,x=0,k[h>>2]=k[q>>2],z=Da(42,b|0,h|0,d|0,o|0,y|0,f|0,p|0,v|0,m|0,n|0,u|0)|0,y=x,x=0,!(y&1)):0){b:do if(z){x=0;db(k[(k[v>>2]|0)+32>>2]|0,v|0,329835,329845,h|0)|0;y=x;x=0;if(y&1){A=10;break a}y=k[n>>2]|0;B=k[m>>2]|0;C=y-B|0;D=B;B=y;if((C|0)>98){y=xYa(C+2|0)|0;C=y;if(!y){x=0;hb(55);E=x;x=0;if(E&1)F=C;else{G=C;H=0;A=13}}else{G=C;H=y;A=13}}else{G=0;H=s;A=13}do if((A|0)==13){if(!(i[p>>0]|0))I=H;else{i[H>>0]=45;I=H+1|0}y=h+10|0;C=h;E=B;J=I;K=D;while(1){if(K>>>0>=E>>>0){L=J;break}N=i[K>>0]|0;O=h;while(1){if((O|0)==(y|0)){P=y;break}if((i[O>>0]|0)==N<<24>>24){P=O;break}O=O+1|0}i[J>>0]=i[329835+(P-C)>>0]|0;E=k[n>>2]|0;J=J+1|0;K=K+1|0}i[L>>0]=0;k[j>>2]=g;if((TQa(s,329846,j)|0)!=1?(x=0,va(1544,329850),K=x,x=0,K&1):0){F=G;break}if(G)yYa(G);break b}while(0);D=Hc()|0;B=M;if(!F){Q=D;R=B;S=m;break a}yYa(F);Q=D;R=B;S=m;break a}while(0);z=k[b>>2]|0;do if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)){x=0;B=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;D=x;x=0;if(D&1){A=10;break a}if((B|0)==-1){k[b>>2]=0;T=0;break}else{T=k[b>>2]|0;break}}else T=z;else T=0;while(0);z=(T|0)==0;B=k[c>>2]|0;do if(B){if((k[B+12>>2]|0)==(k[B+16>>2]|0)){x=0;D=Ba(k[(k[B>>2]|0)+36>>2]|0,B|0)|0;K=x;x=0;if(K&1){A=10;break a}if((D|0)==-1){k[c>>2]=0;A=39;break}}if(!z)A=40}else A=39;while(0);if((A|0)==39?z:0)A=40;if((A|0)==40)k[f>>2]=k[f>>2]|2;B=k[b>>2]|0;f0a(k[o>>2]|0)|0;D=k[m>>2]|0;k[m>>2]=0;if((D|0)!=0?(x=0,va(k[t>>2]|0,D|0),D=x,x=0,D&1):0){D=Hc(0)|0;Fg(D)}r=a;return B|0}else A=10;while(0);if((A|0)==10){a=Hc()|0;Q=a;R=M;S=m}f0a(k[o>>2]|0)|0;o=k[S>>2]|0;k[S>>2]=0;if(!o){U=Q;V=R}else{W=Q;X=R;Y=k[t>>2]|0;Z=o;A=47}}else{o=Hc()|0;k[m>>2]=0;W=o;X=M;Y=1545;Z=l;A=47}if((A|0)==47){x=0;va(Y|0,Z|0);Z=x;x=0;if(Z&1){Z=Hc(0)|0;Fg(Z)}else{U=W;V=X}}Sc(U|0);return 0}function kob(a){a=a|0;return}function lob(a,b,c,d,e,f,g,h,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0;p=r;r=r+512|0;q=p+88|0;s=p+96|0;t=p+80|0;u=p+72|0;v=p+68|0;w=p+500|0;y=p+497|0;z=p+496|0;A=p+56|0;B=p+44|0;C=p+32|0;D=p+20|0;E=p+8|0;F=p+4|0;G=p;k[q>>2]=o;k[t>>2]=s;o=t+4|0;k[o>>2]=1545;k[u>>2]=s;k[v>>2]=s+400;H=0;while(1){if((H|0)==3)break;k[A+(H<<2)>>2]=0;H=H+1|0}H=0;while(1){if((H|0)==3)break;k[B+(H<<2)>>2]=0;H=H+1|0}H=0;while(1){if((H|0)==3)break;k[C+(H<<2)>>2]=0;H=H+1|0}H=0;while(1){if((H|0)==3)break;k[D+(H<<2)>>2]=0;H=H+1|0}H=0;while(1){if((H|0)==3)break;k[E+(H<<2)>>2]=0;H=H+1|0}x=0;Ra(45,c|0,d|0,w|0,y|0,z|0,A|0,B|0,C|0,D|0,F|0);d=x;x=0;a:do if(d&1){c=Hc()|0;I=c;J=M}else{k[n>>2]=k[m>>2];c=h+8|0;H=C+4|0;K=D+4|0;L=D+8|0;N=D+1|0;O=C+8|0;P=C+1|0;Q=(e&512|0)!=0;R=B+8|0;S=B+1|0;T=B+4|0;U=E+4|0;V=E+8|0;W=E+1|0;X=w+3|0;Y=A+4|0;Z=s;_=0;$=0;b:while(1){if(_>>>0>=4){aa=Z;ba=$;ca=251;break}da=k[a>>2]|0;do if(da)if((k[da+12>>2]|0)==(k[da+16>>2]|0)){x=0;ea=Ba(k[(k[da>>2]|0)+36>>2]|0,da|0)|0;fa=x;x=0;if(fa&1){ca=38;break b}if((ea|0)==-1){k[a>>2]=0;ga=0;break}else{ga=k[a>>2]|0;break}}else ga=da;else ga=0;while(0);da=(ga|0)==0;ea=k[b>>2]|0;do if(ea){if((k[ea+12>>2]|0)!=(k[ea+16>>2]|0))if(da){ha=ea;break}else{aa=Z;ba=$;ca=251;break b}x=0;fa=Ba(k[(k[ea>>2]|0)+36>>2]|0,ea|0)|0;ia=x;x=0;if(ia&1){ca=38;break b}if((fa|0)!=-1)if(da){ha=ea;break}else{aa=Z;ba=$;ca=251;break b}else{k[b>>2]=0;ca=31;break}}else ca=31;while(0);if((ca|0)==31){ca=0;if(da){aa=Z;ba=$;ca=251;break}else ha=0}c:do switch(i[w+_>>0]|0){case 1:{if((_|0)!=3){ea=k[a>>2]|0;fa=k[ea+12>>2]|0;if((fa|0)==(k[ea+16>>2]|0)){x=0;ia=Ba(k[(k[ea>>2]|0)+36>>2]|0,ea|0)|0;ea=x;x=0;if(ea&1){ca=38;break b}else ja=ia}else ja=l[fa>>0]|0;if((ja&255)<<24>>24<=-1){ca=56;break b}if(!(j[(k[c>>2]|0)+(ja<<24>>24<<1)>>1]&8192)){ca=56;break b}fa=k[a>>2]|0;ia=fa+12|0;ea=k[ia>>2]|0;if((ea|0)==(k[fa+16>>2]|0)){x=0;ka=Ba(k[(k[fa>>2]|0)+40>>2]|0,fa|0)|0;fa=x;x=0;if(fa&1){ca=38;break b}else la=ka}else{k[ia>>2]=ea+1;la=l[ea>>0]|0}x=0;xa(605,E|0,la&255|0);ea=x;x=0;if(ea&1){ca=38;break b}else{ma=ha;na=ha;ca=58}}else{oa=Z;pa=$}break}case 0:{if((_|0)==3){oa=Z;pa=$}else{ma=ha;na=ha;ca=58}break}case 3:{ea=i[C>>0]|0;ia=(ea&1)==0?(ea&255)>>>1:k[H>>2]|0;ka=i[D>>0]|0;fa=(ka&1)==0?(ka&255)>>>1:k[K>>2]|0;if((ia|0)==(0-fa|0)){oa=Z;pa=$}else{if(!ia){ia=k[a>>2]|0;qa=k[ia+12>>2]|0;if((qa|0)==(k[ia+16>>2]|0)){x=0;ra=Ba(k[(k[ia>>2]|0)+36>>2]|0,ia|0)|0;ia=x;x=0;if(ia&1){ca=38;break b}sa=ra;ta=i[D>>0]|0}else{sa=l[qa>>0]|0;ta=ka}if((sa&255)<<24>>24!=(i[((ta&1)==0?N:k[L>>2]|0)>>0]|0)){oa=Z;pa=$;break c}ka=k[a>>2]|0;qa=ka+12|0;ra=k[qa>>2]|0;if((ra|0)==(k[ka+16>>2]|0)){x=0;Ba(k[(k[ka>>2]|0)+40>>2]|0,ka|0)|0;ka=x;x=0;if(ka&1){ca=38;break b}}else k[qa>>2]=ra+1;i[g>>0]=1;ra=i[D>>0]|0;oa=Z;pa=((ra&1)==0?(ra&255)>>>1:k[K>>2]|0)>>>0>1?D:$;break c}ra=k[a>>2]|0;qa=k[ra+12>>2]|0;ka=k[ra+16>>2]|0;ia=(qa|0)==(ka|0);if(!fa){if(ia){x=0;fa=Ba(k[(k[ra>>2]|0)+36>>2]|0,ra|0)|0;ua=x;x=0;if(ua&1){ca=38;break b}wa=fa;ya=i[C>>0]|0}else{wa=l[qa>>0]|0;ya=ea}if((wa&255)<<24>>24!=(i[((ya&1)==0?P:k[O>>2]|0)>>0]|0)){i[g>>0]=1;oa=Z;pa=$;break c}fa=k[a>>2]|0;ua=fa+12|0;za=k[ua>>2]|0;if((za|0)==(k[fa+16>>2]|0)){x=0;Ba(k[(k[fa>>2]|0)+40>>2]|0,fa|0)|0;fa=x;x=0;if(fa&1){ca=38;break b}}else k[ua>>2]=za+1;za=i[C>>0]|0;oa=Z;pa=((za&1)==0?(za&255)>>>1:k[H>>2]|0)>>>0>1?C:$;break c}if(ia){x=0;ia=Ba(k[(k[ra>>2]|0)+36>>2]|0,ra|0)|0;za=x;x=0;if(za&1){ca=38;break b}za=k[a>>2]|0;Aa=ia;Ca=i[C>>0]|0;Da=za;Ea=k[za+12>>2]|0;Fa=k[za+16>>2]|0}else{Aa=l[qa>>0]|0;Ca=ea;Da=ra;Ea=qa;Fa=ka}ka=Da+12|0;qa=(Ea|0)==(Fa|0);if((Aa&255)<<24>>24==(i[((Ca&1)==0?P:k[O>>2]|0)>>0]|0)){if(qa){x=0;Ba(k[(k[Da>>2]|0)+40>>2]|0,Da|0)|0;ra=x;x=0;if(ra&1){ca=38;break b}}else k[ka>>2]=Ea+1;ka=i[C>>0]|0;oa=Z;pa=((ka&1)==0?(ka&255)>>>1:k[H>>2]|0)>>>0>1?C:$;break c}if(qa){x=0;qa=Ba(k[(k[Da>>2]|0)+36>>2]|0,Da|0)|0;ka=x;x=0;if(ka&1){ca=38;break b}else Ga=qa}else Ga=l[Ea>>0]|0;if((Ga&255)<<24>>24!=(i[((i[D>>0]&1)==0?N:k[L>>2]|0)>>0]|0)){ca=120;break b}qa=k[a>>2]|0;ka=qa+12|0;ra=k[ka>>2]|0;if((ra|0)==(k[qa+16>>2]|0)){x=0;Ba(k[(k[qa>>2]|0)+40>>2]|0,qa|0)|0;qa=x;x=0;if(qa&1){ca=38;break b}}else k[ka>>2]=ra+1;i[g>>0]=1;ra=i[D>>0]|0;oa=Z;pa=((ra&1)==0?(ra&255)>>>1:k[K>>2]|0)>>>0>1?D:$}break}case 2:{if(!(_>>>0<2|($|0)!=0)?!(Q|(_|0)==2&(i[X>>0]|0)!=0):0){oa=Z;pa=0;break c}ra=i[B>>0]|0;ka=(ra&1)==0;qa=k[R>>2]|0;ea=ka?S:qa;za=ea;d:do if((_|0)!=0?(l[w+(_+-1)>>0]|0)<2:0){ia=ea+(ka?(ra&255)>>>1:k[T>>2]|0)|0;ua=k[c>>2]|0;fa=za;while(1){Ha=fa;if((Ha|0)==(ia|0)){Ia=fa;break}Ja=i[Ha>>0]|0;if(Ja<<24>>24<=-1){Ia=fa;break}if(!(j[ua+(Ja<<24>>24<<1)>>1]&8192)){Ia=fa;break}fa=Ha+1|0}fa=Ia-za|0;ua=i[E>>0]|0;ia=(ua&1)==0;Ha=ia?(ua&255)>>>1:k[U>>2]|0;if(fa>>>0<=Ha>>>0){ua=(ia?W:k[V>>2]|0)+Ha|0;Ha=ea;ia=ua+(0-fa)|0;while(1){if((ia|0)==(ua|0)){Ka=ha;La=ra;Ma=qa;Na=Ia;Oa=ha;break d}if((i[ia>>0]|0)!=(i[Ha>>0]|0)){Ka=ha;La=ra;Ma=qa;Na=za;Oa=ha;break d}Ha=Ha+1|0;ia=ia+1|0}}else{Ka=ha;La=ra;Ma=qa;Na=za;Oa=ha}}else{Ka=ha;La=ra;Ma=qa;Na=za;Oa=ha}while(0);e:while(1){za=(La&1)==0;qa=(za?S:Ma)+(za?(La&255)>>>1:k[T>>2]|0)|0;za=Na;if((za|0)==(qa|0)){Pa=qa;break}qa=k[a>>2]|0;do if(qa)if((k[qa+12>>2]|0)==(k[qa+16>>2]|0)){x=0;ra=Ba(k[(k[qa>>2]|0)+36>>2]|0,qa|0)|0;ea=x;x=0;if(ea&1){ca=35;break b}if((ra|0)==-1){k[a>>2]=0;Qa=0;break}else{Qa=k[a>>2]|0;break}}else Qa=qa;else Qa=0;while(0);qa=(Qa|0)==0;do if(Oa){if((k[Oa+12>>2]|0)!=(k[Oa+16>>2]|0))if(qa){Sa=Ka;Ta=Oa;break}else{Pa=za;break e}x=0;ra=Ba(k[(k[Oa>>2]|0)+36>>2]|0,Oa|0)|0;ea=x;x=0;if(ea&1){ca=35;break b}if((ra|0)!=-1)if(qa^(Ka|0)==0){Sa=Ka;Ta=Ka;break}else{Pa=za;break e}else{k[b>>2]=0;Ua=0;ca=148;break}}else{Ua=Ka;ca=148}while(0);if((ca|0)==148){ca=0;if(qa){Pa=za;break}else{Sa=Ua;Ta=0}}ra=k[a>>2]|0;ea=k[ra+12>>2]|0;if((ea|0)==(k[ra+16>>2]|0)){x=0;ka=Ba(k[(k[ra>>2]|0)+36>>2]|0,ra|0)|0;ra=x;x=0;if(ra&1){ca=35;break b}else Va=ka}else Va=l[ea>>0]|0;if((Va&255)<<24>>24!=(i[za>>0]|0)){Pa=za;break}ea=k[a>>2]|0;ka=ea+12|0;ra=k[ka>>2]|0;if((ra|0)==(k[ea+16>>2]|0)){x=0;Ba(k[(k[ea>>2]|0)+40>>2]|0,ea|0)|0;ea=x;x=0;if(ea&1){ca=35;break b}}else k[ka>>2]=ra+1;Ka=Sa;La=i[B>>0]|0;Ma=k[R>>2]|0;Na=za+1|0;Oa=Ta}if(Q?(ra=i[B>>0]|0,ka=(ra&1)==0,(Pa|0)!=((ka?S:k[R>>2]|0)+(ka?(ra&255)>>>1:k[T>>2]|0)|0)):0){ca=160;break b}else{oa=Z;pa=$}break}case 4:{ra=i[z>>0]|0;ka=ha;ea=ha;ia=Z;Ha=0;f:while(1){ua=k[a>>2]|0;do if(ua)if((k[ua+12>>2]|0)==(k[ua+16>>2]|0)){x=0;fa=Ba(k[(k[ua>>2]|0)+36>>2]|0,ua|0)|0;Ja=x;x=0;if(Ja&1){ca=37;break b}if((fa|0)==-1){k[a>>2]=0;Wa=0;break}else{Wa=k[a>>2]|0;break}}else Wa=ua;else Wa=0;while(0);ua=(Wa|0)==0;do if(ea){if((k[ea+12>>2]|0)!=(k[ea+16>>2]|0))if(ua){Xa=ka;Ya=ea;break}else{Za=ia;_a=ka;$a=Ha;break f}x=0;za=Ba(k[(k[ea>>2]|0)+36>>2]|0,ea|0)|0;qa=x;x=0;if(qa&1){ca=37;break b}if((za|0)!=-1)if(ua^(ka|0)==0){Xa=ka;Ya=ka;break}else{Za=ia;_a=ka;$a=Ha;break f}else{k[b>>2]=0;ab=0;ca=173;break}}else{ab=ka;ca=173}while(0);if((ca|0)==173){ca=0;if(ua){Za=ia;_a=ab;$a=Ha;break}else{Xa=ab;Ya=0}}za=k[a>>2]|0;qa=k[za+12>>2]|0;if((qa|0)==(k[za+16>>2]|0)){x=0;fa=Ba(k[(k[za>>2]|0)+36>>2]|0,za|0)|0;za=x;x=0;if(za&1){ca=37;break b}else bb=fa}else bb=l[qa>>0]|0;qa=bb&255;if(qa<<24>>24>-1?(j[(k[c>>2]|0)+(bb<<24>>24<<1)>>1]&2048)!=0:0){fa=k[n>>2]|0;if((fa|0)==(k[q>>2]|0)){x=0;fb(424,m|0,n|0,q|0);za=x;x=0;if(za&1){ca=37;break b}cb=k[n>>2]|0}else cb=fa;k[n>>2]=cb+1;i[cb>>0]=qa;db=ia;eb=Ha+1|0}else{fa=i[A>>0]|0;if(!(qa<<24>>24==ra<<24>>24&((Ha|0)!=0?(((fa&1)==0?(fa&255)>>>1:k[Y>>2]|0)|0)!=0:0))){Za=ia;_a=Xa;$a=Ha;break}if((ia|0)==(k[v>>2]|0)){x=0;fb(425,t|0,u|0,v|0);fa=x;x=0;if(fa&1){ca=37;break b}gb=k[u>>2]|0}else gb=ia;fa=gb+4|0;k[u>>2]=fa;k[gb>>2]=Ha;db=fa;eb=0}fa=k[a>>2]|0;qa=fa+12|0;za=k[qa>>2]|0;if((za|0)==(k[fa+16>>2]|0)){x=0;Ba(k[(k[fa>>2]|0)+40>>2]|0,fa|0)|0;fa=x;x=0;if(fa&1){ca=37;break b}else{ka=Xa;ea=Ya;ia=db;Ha=eb;continue}}else{k[qa>>2]=za+1;ka=Xa;ea=Ya;ia=db;Ha=eb;continue}}if(($a|0)!=0?(k[t>>2]|0)!=(Za|0):0){if((Za|0)==(k[v>>2]|0)){x=0;fb(425,t|0,u|0,v|0);Ha=x;x=0;if(Ha&1){ca=38;break b}hb=k[u>>2]|0}else hb=Za;Ha=hb+4|0;k[u>>2]=Ha;k[hb>>2]=$a;ib=Ha}else ib=Za;Ha=k[F>>2]|0;g:do if((Ha|0)>0){ia=k[a>>2]|0;do if(ia)if((k[ia+12>>2]|0)==(k[ia+16>>2]|0)){x=0;ea=Ba(k[(k[ia>>2]|0)+36>>2]|0,ia|0)|0;ka=x;x=0;if(ka&1){ca=38;break b}if((ea|0)==-1){k[a>>2]=0;jb=0;break}else{jb=k[a>>2]|0;break}}else jb=ia;else jb=0;while(0);ia=(jb|0)==0;do if(_a){if((k[_a+12>>2]|0)==(k[_a+16>>2]|0)){x=0;ua=Ba(k[(k[_a>>2]|0)+36>>2]|0,_a|0)|0;ea=x;x=0;if(ea&1){ca=38;break b}if((ua|0)==-1){k[b>>2]=0;ca=210;break}}if(ia)kb=_a;else{ca=215;break b}}else ca=210;while(0);if((ca|0)==210){ca=0;if(ia){ca=215;break b}else kb=0}ua=k[a>>2]|0;ea=k[ua+12>>2]|0;if((ea|0)==(k[ua+16>>2]|0)){x=0;ka=Ba(k[(k[ua>>2]|0)+36>>2]|0,ua|0)|0;ua=x;x=0;if(ua&1){ca=38;break b}else lb=ka}else lb=l[ea>>0]|0;if((lb&255)<<24>>24!=(i[y>>0]|0)){ca=215;break b}ea=k[a>>2]|0;ka=ea+12|0;ua=k[ka>>2]|0;if((ua|0)==(k[ea+16>>2]|0)){x=0;Ba(k[(k[ea>>2]|0)+40>>2]|0,ea|0)|0;ea=x;x=0;if(ea&1){ca=38;break b}else{mb=kb;nb=Ha;ob=kb}}else{k[ka>>2]=ua+1;mb=kb;nb=Ha;ob=kb}while(1){if((nb|0)<=0)break g;ua=k[a>>2]|0;do if(ua)if((k[ua+12>>2]|0)==(k[ua+16>>2]|0)){x=0;ka=Ba(k[(k[ua>>2]|0)+36>>2]|0,ua|0)|0;ea=x;x=0;if(ea&1){ca=36;break b}if((ka|0)==-1){k[a>>2]=0;pb=0;break}else{pb=k[a>>2]|0;break}}else pb=ua;else pb=0;while(0);ua=(pb|0)==0;do if(ob){if((k[ob+12>>2]|0)!=(k[ob+16>>2]|0))if(ua){qb=mb;rb=ob;break}else{ca=239;break b}x=0;ka=Ba(k[(k[ob>>2]|0)+36>>2]|0,ob|0)|0;ea=x;x=0;if(ea&1){ca=36;break b}if((ka|0)!=-1)if(ua^(mb|0)==0){qb=mb;rb=mb;break}else{ca=239;break b}else{k[b>>2]=0;sb=0;ca=232;break}}else{sb=mb;ca=232}while(0);if((ca|0)==232){ca=0;if(ua){ca=239;break b}else{qb=sb;rb=0}}ka=k[a>>2]|0;ea=k[ka+12>>2]|0;if((ea|0)==(k[ka+16>>2]|0)){x=0;ra=Ba(k[(k[ka>>2]|0)+36>>2]|0,ka|0)|0;ka=x;x=0;if(ka&1){ca=36;break b}else tb=ra}else tb=l[ea>>0]|0;if((tb&255)<<24>>24<=-1){ca=239;break b}if(!(j[(k[c>>2]|0)+(tb<<24>>24<<1)>>1]&2048)){ca=239;break b}if((k[n>>2]|0)==(k[q>>2]|0)?(x=0,fb(424,m|0,n|0,q|0),ea=x,x=0,ea&1):0){ca=36;break b}ea=k[a>>2]|0;ra=k[ea+12>>2]|0;if((ra|0)==(k[ea+16>>2]|0)){x=0;ka=Ba(k[(k[ea>>2]|0)+36>>2]|0,ea|0)|0;ea=x;x=0;if(ea&1){ca=36;break b}else ub=ka}else ub=l[ra>>0]|0;ra=k[n>>2]|0;k[n>>2]=ra+1;i[ra>>0]=ub;ra=nb+-1|0;k[F>>2]=ra;ka=k[a>>2]|0;ea=ka+12|0;za=k[ea>>2]|0;if((za|0)==(k[ka+16>>2]|0)){x=0;Ba(k[(k[ka>>2]|0)+40>>2]|0,ka|0)|0;ka=x;x=0;if(ka&1){ca=36;break b}else{mb=qb;nb=ra;ob=rb;continue}}else{k[ea>>2]=za+1;mb=qb;nb=ra;ob=rb;continue}}}while(0);if((k[n>>2]|0)==(k[m>>2]|0)){ca=249;break b}else{oa=ib;pa=$}break}default:{oa=Z;pa=$}}while(0);h:do if((ca|0)==58)while(1){ca=0;da=k[a>>2]|0;do if(da)if((k[da+12>>2]|0)==(k[da+16>>2]|0)){x=0;Ha=Ba(k[(k[da>>2]|0)+36>>2]|0,da|0)|0;ia=x;x=0;if(ia&1){ca=34;break b}if((Ha|0)==-1){k[a>>2]=0;vb=0;break}else{vb=k[a>>2]|0;break}}else vb=da;else vb=0;while(0);da=(vb|0)==0;do if(na){if((k[na+12>>2]|0)!=(k[na+16>>2]|0))if(da){wb=ma;xb=na;break}else{oa=Z;pa=$;break h}x=0;Ha=Ba(k[(k[na>>2]|0)+36>>2]|0,na|0)|0;ia=x;x=0;if(ia&1){ca=34;break b}if((Ha|0)!=-1)if(da^(ma|0)==0){wb=ma;xb=ma;break}else{oa=Z;pa=$;break h}else{k[b>>2]=0;yb=0;ca=70;break}}else{yb=ma;ca=70}while(0);if((ca|0)==70){ca=0;if(da){oa=Z;pa=$;break h}else{wb=yb;xb=0}}Ha=k[a>>2]|0;ia=k[Ha+12>>2]|0;if((ia|0)==(k[Ha+16>>2]|0)){x=0;ra=Ba(k[(k[Ha>>2]|0)+36>>2]|0,Ha|0)|0;Ha=x;x=0;if(Ha&1){ca=34;break b}else zb=ra}else zb=l[ia>>0]|0;if((zb&255)<<24>>24<=-1){oa=Z;pa=$;break h}if(!(j[(k[c>>2]|0)+(zb<<24>>24<<1)>>1]&8192)){oa=Z;pa=$;break h}ia=k[a>>2]|0;ra=ia+12|0;Ha=k[ra>>2]|0;if((Ha|0)==(k[ia+16>>2]|0)){x=0;za=Ba(k[(k[ia>>2]|0)+40>>2]|0,ia|0)|0;ia=x;x=0;if(ia&1){ca=34;break b}else Ab=za}else{k[ra>>2]=Ha+1;Ab=l[Ha>>0]|0}x=0;xa(605,E|0,Ab&255|0);Ha=x;x=0;if(Ha&1){ca=34;break b}else{ma=wb;na=xb;ca=58}}while(0);Z=oa;_=_+1|0;$=pa}i:switch(ca|0){case 34:{I=Hc()|0;J=M;break a;break}case 35:{I=Hc()|0;J=M;break a;break}case 36:{I=Hc()|0;J=M;break a;break}case 37:{I=Hc()|0;J=M;break a;break}case 38:{I=Hc()|0;J=M;break a;break}case 56:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 120:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 160:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 215:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 239:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 249:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 251:{j:do if(ba){$=ba+1|0;_=ba+8|0;Z=ba+4|0;c=1;k:while(1){Y=i[ba>>0]|0;if(!(Y&1))Cb=(Y&255)>>>1;else Cb=k[Z>>2]|0;if(c>>>0>=Cb>>>0)break j;Y=k[a>>2]|0;do if(Y)if((k[Y+12>>2]|0)==(k[Y+16>>2]|0)){x=0;T=Ba(k[(k[Y>>2]|0)+36>>2]|0,Y|0)|0;R=x;x=0;if(R&1){ca=33;break k}if((T|0)==-1){k[a>>2]=0;Db=0;break}else{Db=k[a>>2]|0;break}}else Db=Y;else Db=0;while(0);Y=(Db|0)==0;T=k[b>>2]|0;do if(T){if((k[T+12>>2]|0)==(k[T+16>>2]|0)){x=0;R=Ba(k[(k[T>>2]|0)+36>>2]|0,T|0)|0;S=x;x=0;if(S&1){ca=33;break k}if((R|0)==-1){k[b>>2]=0;ca=269;break}}if(!Y){ca=276;break k}}else ca=269;while(0);if((ca|0)==269?(ca=0,Y):0){ca=276;break}T=k[a>>2]|0;R=k[T+12>>2]|0;if((R|0)==(k[T+16>>2]|0)){x=0;S=Ba(k[(k[T>>2]|0)+36>>2]|0,T|0)|0;T=x;x=0;if(T&1){ca=33;break}else Eb=S}else Eb=l[R>>0]|0;if(!(i[ba>>0]&1))Fb=$;else Fb=k[_>>2]|0;if((Eb&255)<<24>>24!=(i[Fb+c>>0]|0)){ca=276;break}R=c+1|0;S=k[a>>2]|0;T=S+12|0;Q=k[T>>2]|0;if((Q|0)==(k[S+16>>2]|0)){x=0;Ba(k[(k[S>>2]|0)+40>>2]|0,S|0)|0;S=x;x=0;if(S&1){ca=33;break}else{c=R;continue}}else{k[T>>2]=Q+1;c=R;continue}}if((ca|0)==33){c=Hc()|0;I=c;J=M;break a}else if((ca|0)==276){k[f>>2]=k[f>>2]|4;Bb=0;break i}}while(0);c=k[t>>2]|0;if((c|0)!=(aa|0)){k[G>>2]=0;pob(A,c,aa,G);if(!(k[G>>2]|0)){Bb=1;break}else{k[f>>2]=k[f>>2]|4;Bb=0;break}}else Bb=1;break}}K2a(E);K2a(D);K2a(C);K2a(B);K2a(A);c=k[t>>2]|0;k[t>>2]=0;if((c|0)!=0?(x=0,va(k[o>>2]|0,c|0),c=x,x=0,c&1):0){c=Hc(0)|0;Fg(c)}r=p;return Bb|0}while(0);K2a(E);K2a(D);K2a(C);K2a(B);K2a(A);A=k[t>>2]|0;k[t>>2]=0;if((A|0)!=0?(x=0,va(k[o>>2]|0,A|0),A=x,x=0,A&1):0){A=Hc(0)|0;Fg(A)}Sc(I|0);return 0}function mob(a){a=a|0;var b=0;b=Rd(8)|0;x=0;xa(616,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,9040,1245)}function nob(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+144|0;h=a+24|0;j=a+32|0;l=a+16|0;m=a+8|0;n=a+4|0;o=a+28|0;p=a;k[l>>2]=j;q=l+4|0;k[q>>2]=1545;s=j+100|0;x=0;t=Ba(564,e|0)|0;u=x;x=0;if(!(u&1)){k[n>>2]=t;x=0;u=Ta(495,n|0,74148)|0;v=x;x=0;a:do if(!(v&1)?(i[o>>0]=0,w=k[c>>2]|0,k[p>>2]=w,y=k[e+4>>2]|0,z=w,x=0,k[h>>2]=k[p>>2],A=Da(42,b|0,h|0,d|0,n|0,y|0,f|0,o|0,u|0,l|0,m|0,s|0)|0,y=x,x=0,!(y&1)):0){if(A){if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}if(i[o>>0]|0){x=0;A=Ta(k[(k[u>>2]|0)+28>>2]|0,u|0,45)|0;y=x;x=0;if(y&1)break;x=0;xa(605,g|0,A|0);A=x;x=0;if(A&1)break}x=0;A=Ta(k[(k[u>>2]|0)+28>>2]|0,u|0,48)|0;y=x;x=0;if(y&1)break;y=k[m>>2]|0;B=y+-1|0;C=k[l>>2]|0;while(1){if(C>>>0>=B>>>0){D=C;break}if((i[C>>0]|0)!=A<<24>>24){D=C;break}C=C+1|0}x=0;Fa(174,g|0,D|0,y|0)|0;C=x;x=0;if(C&1)break}C=k[b>>2]|0;do if(C)if((k[C+12>>2]|0)==(k[C+16>>2]|0)){x=0;A=Ba(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;B=x;x=0;if(B&1)break a;if((A|0)==-1){k[b>>2]=0;E=0;break}else{E=k[b>>2]|0;break}}else E=C;else E=0;while(0);C=(E|0)==0;do if(w){if((k[z+12>>2]|0)==(k[z+16>>2]|0)){x=0;y=Ba(k[(k[w>>2]|0)+36>>2]|0,z|0)|0;A=x;x=0;if(A&1)break a;if((y|0)==-1){k[c>>2]=0;F=30;break}}if(!C)F=31}else F=30;while(0);if((F|0)==30?C:0)F=31;if((F|0)==31)k[f>>2]=k[f>>2]|2;z=k[b>>2]|0;f0a(t)|0;w=k[l>>2]|0;k[l>>2]=0;if((w|0)!=0?(x=0,va(k[q>>2]|0,w|0),w=x,x=0,w&1):0){w=Hc(0)|0;Fg(w)}r=a;return z|0}while(0);a=Hc()|0;b=M;f0a(t)|0;t=k[l>>2]|0;k[l>>2]=0;if(!t){G=b;H=a}else{I=a;J=b;K=t;F=37}}else{t=Hc()|0;k[l>>2]=0;I=t;J=M;K=j;F=37}if((F|0)==37){x=0;va(k[q>>2]|0,K|0);K=x;x=0;if(K&1){K=Hc(0)|0;Fg(K)}else{G=J;H=I}}Sc(H|0);return 0}function oob(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;m=r;r=r+112|0;n=m+100|0;o=m+88|0;p=m+76|0;q=m+64|0;s=m+52|0;t=m+48|0;u=m+36|0;v=m+24|0;w=m+12|0;y=m;if(a){a=lqb(b,73180)|0;Tf[k[(k[a>>2]|0)+44>>2]&2047](n,a);z=k[n>>2]|0;i[c>>0]=z;i[c+1>>0]=z>>8;i[c+2>>0]=z>>16;i[c+3>>0]=z>>24;Tf[k[(k[a>>2]|0)+32>>2]&2047](o,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}x=0;xa(603,j|0,0);z=x;x=0;if(z&1){z=Hc(0)|0;Fg(z)};k[j>>2]=k[o>>2];k[j+4>>2]=k[o+4>>2];k[j+8>>2]=k[o+8>>2];z=0;while(1){if((z|0)==3)break;k[o+(z<<2)>>2]=0;z=z+1|0}K2a(o);Tf[k[(k[a>>2]|0)+28>>2]&2047](p,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}x=0;xa(603,h|0,0);o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)};k[h>>2]=k[p>>2];k[h+4>>2]=k[p+4>>2];k[h+8>>2]=k[p+8>>2];o=0;while(1){if((o|0)==3)break;k[p+(o<<2)>>2]=0;o=o+1|0}K2a(p);p=Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0;i[d>>0]=p;p=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;i[e>>0]=p;Tf[k[(k[a>>2]|0)+20>>2]&2047](q,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}x=0;xa(603,f|0,0);p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)};k[f>>2]=k[q>>2];k[f+4>>2]=k[q+4>>2];k[f+8>>2]=k[q+8>>2];p=0;while(1){if((p|0)==3)break;k[q+(p<<2)>>2]=0;p=p+1|0}K2a(q);Tf[k[(k[a>>2]|0)+24>>2]&2047](s,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}x=0;xa(603,g|0,0);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)};k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}K2a(s);A=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}else{a=lqb(b,73116)|0;Tf[k[(k[a>>2]|0)+44>>2]&2047](t,a);b=k[t>>2]|0;i[c>>0]=b;i[c+1>>0]=b>>8;i[c+2>>0]=b>>16;i[c+3>>0]=b>>24;Tf[k[(k[a>>2]|0)+32>>2]&2047](u,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}x=0;xa(603,j|0,0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)};k[j>>2]=k[u>>2];k[j+4>>2]=k[u+4>>2];k[j+8>>2]=k[u+8>>2];j=0;while(1){if((j|0)==3)break;k[u+(j<<2)>>2]=0;j=j+1|0}K2a(u);Tf[k[(k[a>>2]|0)+28>>2]&2047](v,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}x=0;xa(603,h|0,0);u=x;x=0;if(u&1){u=Hc(0)|0;Fg(u)};k[h>>2]=k[v>>2];k[h+4>>2]=k[v+4>>2];k[h+8>>2]=k[v+8>>2];h=0;while(1){if((h|0)==3)break;k[v+(h<<2)>>2]=0;h=h+1|0}K2a(v);v=Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0;i[d>>0]=v;v=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;i[e>>0]=v;Tf[k[(k[a>>2]|0)+20>>2]&2047](w,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}x=0;xa(603,f|0,0);v=x;x=0;if(v&1){v=Hc(0)|0;Fg(v)};k[f>>2]=k[w>>2];k[f+4>>2]=k[w+4>>2];k[f+8>>2]=k[w+8>>2];f=0;while(1){if((f|0)==3)break;k[w+(f<<2)>>2]=0;f=f+1|0}K2a(w);Tf[k[(k[a>>2]|0)+24>>2]&2047](y,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}x=0;xa(603,g|0,0);w=x;x=0;if(w&1){w=Hc(0)|0;Fg(w)};k[g>>2]=k[y>>2];k[g+4>>2]=k[y+4>>2];k[g+8>>2]=k[y+8>>2];g=0;while(1){if((g|0)==3)break;k[y+(g<<2)>>2]=0;g=g+1|0}K2a(y);A=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}k[l>>2]=A;r=m;return}function pob(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i[a>>0]|0;f=a+4|0;g=k[f>>2]|0;do if(((e&1)==0?(e&255)>>>1:g)|0){if((b|0)==(c|0)){h=e;j=g}else{l=c;m=b;while(1){n=l+-4|0;if(m>>>0>=n>>>0)break;o=k[m>>2]|0;k[m>>2]=k[n>>2];k[n>>2]=o;l=n;m=m+4|0}h=i[a>>0]|0;j=k[f>>2]|0}m=(h&1)==0;l=m?a+1|0:k[a+8>>2]|0;n=c+-4|0;o=l+(m?(h&255)>>>1:j)|0;m=l;l=b;while(1){p=i[m>>0]|0;q=p<<24>>24<1|p<<24>>24==127;if(l>>>0>=n>>>0)break;if(!q?(p<<24>>24|0)!=(k[l>>2]|0):0){r=10;break}m=(o-m|0)>1?m+1|0:m;l=l+4|0}if((r|0)==10){k[d>>2]=4;break}if(!q?((k[n>>2]|0)+-1|0)>>>0>=p<<24>>24>>>0:0)k[d>>2]=4}while(0);return}function qob(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73584;return}function rob(a){a=a|0;return}function sob(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0;h=r;r=r+16|0;i=h+12|0;j=h+8|0;l=h+4|0;m=h;n=k[(k[a>>2]|0)+12>>2]|0;k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];k[j>>2]=k[l>>2];k[i>>2]=k[m>>2];m=Of[n&63](a,j,i,d,e,f,g)|0;r=h;return m|0}function tob(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0;h=r;r=r+16|0;i=h+12|0;j=h+8|0;l=h+4|0;m=h;n=k[(k[a>>2]|0)+16>>2]|0;k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];k[j>>2]=k[l>>2];k[i>>2]=k[m>>2];m=Of[n&63](a,j,i,d,e,f,g)|0;r=h;return m|0}function uob(a){a=a|0;return}function vob(a){a=a|0;OBa(a);return}function wob(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;a=r;r=r+576|0;h=a+424|0;j=a;l=a+24|0;m=a+16|0;n=a+12|0;o=a+8|0;p=a+564|0;q=a+4|0;s=a+464|0;k[m>>2]=l;t=m+4|0;k[t>>2]=1545;u=l+400|0;x=0;v=Ba(564,e|0)|0;w=x;x=0;if(!(w&1)){k[o>>2]=v;x=0;v=Ta(495,o|0,74140)|0;w=x;x=0;a:do if(!(w&1)?(i[p>>0]=0,k[q>>2]=k[c>>2],y=k[e+4>>2]|0,x=0,k[h>>2]=k[q>>2],z=Da(43,b|0,h|0,d|0,o|0,y|0,f|0,p|0,v|0,m|0,n|0,u|0)|0,y=x,x=0,!(y&1)):0){b:do if(z){x=0;db(k[(k[v>>2]|0)+48>>2]|0,v|0,329866,329876,h|0)|0;y=x;x=0;if(y&1){A=10;break a}y=k[n>>2]|0;B=k[m>>2]|0;C=y-B|0;D=B;B=y;if((C|0)>392){y=xYa((C>>2)+2|0)|0;C=y;if(!y){x=0;hb(55);E=x;x=0;if(E&1)F=C;else{G=C;H=0;A=13}}else{G=C;H=y;A=13}}else{G=0;H=s;A=13}do if((A|0)==13){if(!(i[p>>0]|0))I=H;else{i[H>>0]=45;I=H+1|0}y=h+40|0;C=h;E=B;J=I;K=D;while(1){if(K>>>0>=E>>>0){L=J;break}N=k[K>>2]|0;O=h;while(1){if((O|0)==(y|0)){P=y;break}if((k[O>>2]|0)==(N|0)){P=O;break}O=O+4|0}i[J>>0]=i[329866+(P-C>>2)>>0]|0;E=k[n>>2]|0;J=J+1|0;K=K+4|0}i[L>>0]=0;k[j>>2]=g;if((TQa(s,329846,j)|0)!=1?(x=0,va(1544,329850),K=x,x=0,K&1):0){F=G;break}if(G)yYa(G);break b}while(0);D=Hc()|0;B=M;if(!F){Q=D;R=B;S=m;break a}yYa(F);Q=D;R=B;S=m;break a}while(0);z=k[b>>2]|0;do if(z){B=k[z+12>>2]|0;if((B|0)==(k[z+16>>2]|0)){x=0;D=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;K=x;x=0;if(K&1){A=10;break a}else T=D}else T=k[B>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1;break}else{U=(k[b>>2]|0)==0;break}}else U=1;while(0);z=k[c>>2]|0;do if(z){B=k[z+12>>2]|0;if((B|0)==(k[z+16>>2]|0)){x=0;D=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;K=x;x=0;if(K&1){A=10;break a}else V=D}else V=k[B>>2]|0;if((V|0)!=-1)if(U)break;else{A=42;break}else{k[c>>2]=0;A=40;break}}else A=40;while(0);if((A|0)==40?U:0)A=42;if((A|0)==42)k[f>>2]=k[f>>2]|2;z=k[b>>2]|0;f0a(k[o>>2]|0)|0;B=k[m>>2]|0;k[m>>2]=0;if((B|0)!=0?(x=0,va(k[t>>2]|0,B|0),B=x,x=0,B&1):0){B=Hc(0)|0;Fg(B)}r=a;return z|0}else A=10;while(0);if((A|0)==10){a=Hc()|0;Q=a;R=M;S=m}f0a(k[o>>2]|0)|0;o=k[S>>2]|0;k[S>>2]=0;if(!o){W=Q;X=R}else{Y=Q;Z=R;_=k[t>>2]|0;$=o;A=49}}else{o=Hc()|0;k[m>>2]=0;Y=o;Z=M;_=1545;$=l;A=49}if((A|0)==49){x=0;va(_|0,$|0);$=x;x=0;if($&1){$=Hc(0)|0;Fg($)}else{W=Y;X=Z}}Sc(W|0);return 0}function xob(a,b,c,d,e,f,g,h,j,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;m=m|0;n=n|0;var o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0;o=r;r=r+512|0;p=o+96|0;q=o+104|0;s=o+88|0;t=o+80|0;u=o+76|0;v=o+504|0;w=o+72|0;y=o+68|0;z=o+56|0;A=o+44|0;B=o+32|0;C=o+20|0;D=o+8|0;E=o+4|0;F=o;k[p>>2]=n;k[s>>2]=q;n=s+4|0;k[n>>2]=1545;k[t>>2]=q;k[u>>2]=q+400;G=0;while(1){if((G|0)==3)break;k[z+(G<<2)>>2]=0;G=G+1|0}G=0;while(1){if((G|0)==3)break;k[A+(G<<2)>>2]=0;G=G+1|0}G=0;while(1){if((G|0)==3)break;k[B+(G<<2)>>2]=0;G=G+1|0}G=0;while(1){if((G|0)==3)break;k[C+(G<<2)>>2]=0;G=G+1|0}G=0;while(1){if((G|0)==3)break;k[D+(G<<2)>>2]=0;G=G+1|0}x=0;Ra(46,c|0,d|0,v|0,w|0,y|0,z|0,A|0,B|0,C|0,E|0);d=x;x=0;a:do if(d&1){c=Hc()|0;H=c;I=M}else{k[m>>2]=k[j>>2];c=B+4|0;G=C+4|0;J=C+8|0;K=B+8|0;L=(e&512|0)!=0;N=A+8|0;O=A+4|0;P=D+4|0;Q=D+8|0;R=v+3|0;S=z+4|0;T=q;U=0;V=0;b:while(1){if(U>>>0>=4){W=T;X=V;Y=259;break}Z=k[a>>2]|0;do if(Z){_=k[Z+12>>2]|0;if((_|0)==(k[Z+16>>2]|0)){x=0;$=Ba(k[(k[Z>>2]|0)+36>>2]|0,Z|0)|0;aa=x;x=0;if(aa&1){Y=40;break b}else ba=$}else ba=k[_>>2]|0;if((ba|0)==-1){k[a>>2]=0;ca=1;break}else{ca=(k[a>>2]|0)==0;break}}else ca=1;while(0);Z=k[b>>2]|0;do if(Z){_=k[Z+12>>2]|0;if((_|0)==(k[Z+16>>2]|0)){x=0;$=Ba(k[(k[Z>>2]|0)+36>>2]|0,Z|0)|0;aa=x;x=0;if(aa&1){Y=40;break b}else da=$}else da=k[_>>2]|0;if((da|0)!=-1)if(ca){ea=Z;break}else{W=T;X=V;Y=259;break b}else{k[b>>2]=0;Y=32;break}}else Y=32;while(0);if((Y|0)==32){Y=0;if(ca){W=T;X=V;Y=259;break}else ea=0}c:do switch(i[v+U>>0]|0){case 1:{if((U|0)!=3){Z=k[a>>2]|0;_=k[Z+12>>2]|0;if((_|0)==(k[Z+16>>2]|0)){x=0;$=Ba(k[(k[Z>>2]|0)+36>>2]|0,Z|0)|0;Z=x;x=0;if(Z&1){Y=40;break b}else fa=$}else fa=k[_>>2]|0;x=0;_=Fa(k[(k[h>>2]|0)+12>>2]|0,h|0,8192,fa|0)|0;$=x;x=0;if($&1){Y=40;break b}if(!_){Y=58;break b}_=k[a>>2]|0;$=_+12|0;Z=k[$>>2]|0;if((Z|0)==(k[_+16>>2]|0)){x=0;aa=Ba(k[(k[_>>2]|0)+40>>2]|0,_|0)|0;_=x;x=0;if(_&1){Y=40;break b}else ga=aa}else{k[$>>2]=Z+4;ga=k[Z>>2]|0}x=0;xa(965,D|0,ga|0);Z=x;x=0;if(Z&1){Y=40;break b}else{ha=ea;ia=ea;Y=60}}else{ja=T;ka=V}break}case 0:{if((U|0)==3){ja=T;ka=V}else{ha=ea;ia=ea;Y=60}break}case 3:{Z=i[B>>0]|0;$=(Z&1)==0?(Z&255)>>>1:k[c>>2]|0;aa=i[C>>0]|0;_=(aa&1)==0?(aa&255)>>>1:k[G>>2]|0;if(($|0)==(0-_|0)){ja=T;ka=V}else{if(!$){$=k[a>>2]|0;la=k[$+12>>2]|0;if((la|0)==(k[$+16>>2]|0)){x=0;ma=Ba(k[(k[$>>2]|0)+36>>2]|0,$|0)|0;$=x;x=0;if($&1){Y=40;break b}na=ma;oa=i[C>>0]|0}else{na=k[la>>2]|0;oa=aa}if((na|0)!=(k[((oa&1)==0?G:k[J>>2]|0)>>2]|0)){ja=T;ka=V;break c}aa=k[a>>2]|0;la=aa+12|0;ma=k[la>>2]|0;if((ma|0)==(k[aa+16>>2]|0)){x=0;Ba(k[(k[aa>>2]|0)+40>>2]|0,aa|0)|0;aa=x;x=0;if(aa&1){Y=40;break b}}else k[la>>2]=ma+4;i[g>>0]=1;ma=i[C>>0]|0;ja=T;ka=((ma&1)==0?(ma&255)>>>1:k[G>>2]|0)>>>0>1?C:V;break c}ma=k[a>>2]|0;la=k[ma+12>>2]|0;aa=k[ma+16>>2]|0;$=(la|0)==(aa|0);if(!_){if($){x=0;_=Ba(k[(k[ma>>2]|0)+36>>2]|0,ma|0)|0;pa=x;x=0;if(pa&1){Y=40;break b}qa=_;ra=i[B>>0]|0}else{qa=k[la>>2]|0;ra=Z}if((qa|0)!=(k[((ra&1)==0?c:k[K>>2]|0)>>2]|0)){i[g>>0]=1;ja=T;ka=V;break c}_=k[a>>2]|0;pa=_+12|0;sa=k[pa>>2]|0;if((sa|0)==(k[_+16>>2]|0)){x=0;Ba(k[(k[_>>2]|0)+40>>2]|0,_|0)|0;_=x;x=0;if(_&1){Y=40;break b}}else k[pa>>2]=sa+4;sa=i[B>>0]|0;ja=T;ka=((sa&1)==0?(sa&255)>>>1:k[c>>2]|0)>>>0>1?B:V;break c}if($){x=0;$=Ba(k[(k[ma>>2]|0)+36>>2]|0,ma|0)|0;sa=x;x=0;if(sa&1){Y=40;break b}sa=k[a>>2]|0;ta=$;ua=i[B>>0]|0;wa=sa;ya=k[sa+12>>2]|0;za=k[sa+16>>2]|0}else{ta=k[la>>2]|0;ua=Z;wa=ma;ya=la;za=aa}aa=wa+12|0;la=(ya|0)==(za|0);if((ta|0)==(k[((ua&1)==0?c:k[K>>2]|0)>>2]|0)){if(la){x=0;Ba(k[(k[wa>>2]|0)+40>>2]|0,wa|0)|0;ma=x;x=0;if(ma&1){Y=40;break b}}else k[aa>>2]=ya+4;aa=i[B>>0]|0;ja=T;ka=((aa&1)==0?(aa&255)>>>1:k[c>>2]|0)>>>0>1?B:V;break c}if(la){x=0;la=Ba(k[(k[wa>>2]|0)+36>>2]|0,wa|0)|0;aa=x;x=0;if(aa&1){Y=40;break b}else Aa=la}else Aa=k[ya>>2]|0;if((Aa|0)!=(k[((i[C>>0]&1)==0?G:k[J>>2]|0)>>2]|0)){Y=123;break b}la=k[a>>2]|0;aa=la+12|0;ma=k[aa>>2]|0;if((ma|0)==(k[la+16>>2]|0)){x=0;Ba(k[(k[la>>2]|0)+40>>2]|0,la|0)|0;la=x;x=0;if(la&1){Y=40;break b}}else k[aa>>2]=ma+4;i[g>>0]=1;ma=i[C>>0]|0;ja=T;ka=((ma&1)==0?(ma&255)>>>1:k[G>>2]|0)>>>0>1?C:V}break}case 2:{if(!(U>>>0<2|(V|0)!=0)?!(L|(U|0)==2&(i[R>>0]|0)!=0):0){ja=T;ka=0;break c}ma=i[A>>0]|0;aa=k[N>>2]|0;la=(ma&1)==0?O:aa;d:do if((U|0)!=0?(l[v+(U+-1)>>0]|0)<2:0){Z=ma;sa=aa;$=la;while(1){pa=(Z&1)==0;_=$;if((_|0)==((pa?O:sa)+((pa?(Z&255)>>>1:k[O>>2]|0)<<2)|0)){Ca=Z;Da=sa;Ea=$;break}x=0;pa=Fa(k[(k[h>>2]|0)+12>>2]|0,h|0,8192,k[_>>2]|0)|0;Ga=x;x=0;if(Ga&1){Y=37;break b}if(!pa){Ha=$;Y=131;break}Z=i[A>>0]|0;sa=k[N>>2]|0;$=_+4|0}if((Y|0)==131){Y=0;Ca=i[A>>0]|0;Da=k[N>>2]|0;Ea=Ha}$=(Ca&1)==0?O:Da;sa=$;Z=Ea-sa>>2;_=i[D>>0]|0;pa=(_&1)==0;Ga=pa?(_&255)>>>1:k[P>>2]|0;if(Z>>>0>Ga>>>0){Ia=ea;Ja=Ca;Ka=Da;La=sa;Ma=ea}else{_=(pa?P:k[Q>>2]|0)+(Ga<<2)|0;Ga=$;$=_+(0-Z<<2)|0;while(1){if(($|0)==(_|0)){Ia=ea;Ja=Ca;Ka=Da;La=Ea;Ma=ea;break d}if((k[$>>2]|0)!=(k[Ga>>2]|0)){Ia=ea;Ja=Ca;Ka=Da;La=sa;Ma=ea;break d}Ga=Ga+4|0;$=$+4|0}}}else{Ia=ea;Ja=ma;Ka=aa;La=la;Ma=ea}while(0);e:while(1){la=(Ja&1)==0;aa=(la?O:Ka)+((la?(Ja&255)>>>1:k[O>>2]|0)<<2)|0;la=La;if((la|0)==(aa|0)){Na=aa;break}aa=k[a>>2]|0;do if(aa){ma=k[aa+12>>2]|0;if((ma|0)==(k[aa+16>>2]|0)){x=0;$=Ba(k[(k[aa>>2]|0)+36>>2]|0,aa|0)|0;Ga=x;x=0;if(Ga&1){Y=36;break b}else Oa=$}else Oa=k[ma>>2]|0;if((Oa|0)==-1){k[a>>2]=0;Pa=1;break}else{Pa=(k[a>>2]|0)==0;break}}else Pa=1;while(0);do if(Ma){aa=k[Ma+12>>2]|0;if((aa|0)==(k[Ma+16>>2]|0)){x=0;ma=Ba(k[(k[Ma>>2]|0)+36>>2]|0,Ma|0)|0;$=x;x=0;if($&1){Y=36;break b}else Qa=ma}else Qa=k[aa>>2]|0;if((Qa|0)!=-1)if(Pa^(Ia|0)==0){Sa=Ia;Ta=Ia;break}else{Na=la;break e}else{k[b>>2]=0;Ua=0;Y=152;break}}else{Ua=Ia;Y=152}while(0);if((Y|0)==152){Y=0;if(Pa){Na=la;break}else{Sa=Ua;Ta=0}}aa=k[a>>2]|0;ma=k[aa+12>>2]|0;if((ma|0)==(k[aa+16>>2]|0)){x=0;$=Ba(k[(k[aa>>2]|0)+36>>2]|0,aa|0)|0;aa=x;x=0;if(aa&1){Y=36;break b}else Va=$}else Va=k[ma>>2]|0;if((Va|0)!=(k[la>>2]|0)){Na=la;break}ma=k[a>>2]|0;$=ma+12|0;aa=k[$>>2]|0;if((aa|0)==(k[ma+16>>2]|0)){x=0;Ba(k[(k[ma>>2]|0)+40>>2]|0,ma|0)|0;ma=x;x=0;if(ma&1){Y=36;break b}}else k[$>>2]=aa+4;Ia=Sa;Ja=i[A>>0]|0;Ka=k[N>>2]|0;La=la+4|0;Ma=Ta}if(L?(aa=i[A>>0]|0,$=(aa&1)==0,(Na|0)!=(($?O:k[N>>2]|0)+(($?(aa&255)>>>1:k[O>>2]|0)<<2)|0)):0){Y=164;break b}else{ja=T;ka=V}break}case 4:{aa=k[y>>2]|0;$=ea;ma=ea;Ga=T;sa=0;f:while(1){_=k[a>>2]|0;do if(_){Z=k[_+12>>2]|0;if((Z|0)==(k[_+16>>2]|0)){x=0;pa=Ba(k[(k[_>>2]|0)+36>>2]|0,_|0)|0;Wa=x;x=0;if(Wa&1){Y=39;break b}else Xa=pa}else Xa=k[Z>>2]|0;if((Xa|0)==-1){k[a>>2]=0;Ya=1;break}else{Ya=(k[a>>2]|0)==0;break}}else Ya=1;while(0);do if(ma){_=k[ma+12>>2]|0;if((_|0)==(k[ma+16>>2]|0)){x=0;la=Ba(k[(k[ma>>2]|0)+36>>2]|0,ma|0)|0;Z=x;x=0;if(Z&1){Y=39;break b}else Za=la}else Za=k[_>>2]|0;if((Za|0)!=-1)if(Ya^($|0)==0){_a=$;$a=$;break}else{ab=Ga;bb=$;cb=sa;break f}else{k[b>>2]=0;db=0;Y=178;break}}else{db=$;Y=178}while(0);if((Y|0)==178){Y=0;if(Ya){ab=Ga;bb=db;cb=sa;break}else{_a=db;$a=0}}_=k[a>>2]|0;la=k[_+12>>2]|0;if((la|0)==(k[_+16>>2]|0)){x=0;Z=Ba(k[(k[_>>2]|0)+36>>2]|0,_|0)|0;_=x;x=0;if(_&1){Y=39;break b}else eb=Z}else eb=k[la>>2]|0;x=0;la=Fa(k[(k[h>>2]|0)+12>>2]|0,h|0,2048,eb|0)|0;Z=x;x=0;if(Z&1){Y=39;break b}if(la){la=k[m>>2]|0;if((la|0)==(k[p>>2]|0)){x=0;fb(426,j|0,m|0,p|0);Z=x;x=0;if(Z&1){Y=39;break b}gb=k[m>>2]|0}else gb=la;k[m>>2]=gb+4;k[gb>>2]=eb;hb=Ga;ib=sa+1|0}else{la=i[z>>0]|0;if(!((eb|0)==(aa|0)&((sa|0)!=0?(((la&1)==0?(la&255)>>>1:k[S>>2]|0)|0)!=0:0))){ab=Ga;bb=_a;cb=sa;break}if((Ga|0)==(k[u>>2]|0)){x=0;fb(425,s|0,t|0,u|0);la=x;x=0;if(la&1){Y=39;break b}jb=k[t>>2]|0}else jb=Ga;la=jb+4|0;k[t>>2]=la;k[jb>>2]=sa;hb=la;ib=0}la=k[a>>2]|0;Z=la+12|0;_=k[Z>>2]|0;if((_|0)==(k[la+16>>2]|0)){x=0;Ba(k[(k[la>>2]|0)+40>>2]|0,la|0)|0;la=x;x=0;if(la&1){Y=39;break b}else{$=_a;ma=$a;Ga=hb;sa=ib;continue}}else{k[Z>>2]=_+4;$=_a;ma=$a;Ga=hb;sa=ib;continue}}if((cb|0)!=0?(k[s>>2]|0)!=(ab|0):0){if((ab|0)==(k[u>>2]|0)){x=0;fb(425,s|0,t|0,u|0);sa=x;x=0;if(sa&1){Y=40;break b}kb=k[t>>2]|0}else kb=ab;sa=kb+4|0;k[t>>2]=sa;k[kb>>2]=cb;lb=sa}else lb=ab;sa=k[E>>2]|0;g:do if((sa|0)>0){Ga=k[a>>2]|0;do if(Ga){ma=k[Ga+12>>2]|0;if((ma|0)==(k[Ga+16>>2]|0)){x=0;$=Ba(k[(k[Ga>>2]|0)+36>>2]|0,Ga|0)|0;aa=x;x=0;if(aa&1){Y=40;break b}else mb=$}else mb=k[ma>>2]|0;if((mb|0)==-1){k[a>>2]=0;nb=1;break}else{nb=(k[a>>2]|0)==0;break}}else nb=1;while(0);do if(bb){Ga=k[bb+12>>2]|0;if((Ga|0)==(k[bb+16>>2]|0)){x=0;ma=Ba(k[(k[bb>>2]|0)+36>>2]|0,bb|0)|0;$=x;x=0;if($&1){Y=40;break b}else ob=ma}else ob=k[Ga>>2]|0;if((ob|0)!=-1)if(nb){pb=bb;break}else{Y=222;break b}else{k[b>>2]=0;Y=216;break}}else Y=216;while(0);if((Y|0)==216){Y=0;if(nb){Y=222;break b}else pb=0}Ga=k[a>>2]|0;ma=k[Ga+12>>2]|0;if((ma|0)==(k[Ga+16>>2]|0)){x=0;$=Ba(k[(k[Ga>>2]|0)+36>>2]|0,Ga|0)|0;Ga=x;x=0;if(Ga&1){Y=40;break b}else qb=$}else qb=k[ma>>2]|0;if((qb|0)!=(k[w>>2]|0)){Y=222;break b}ma=k[a>>2]|0;$=ma+12|0;Ga=k[$>>2]|0;if((Ga|0)==(k[ma+16>>2]|0)){x=0;Ba(k[(k[ma>>2]|0)+40>>2]|0,ma|0)|0;ma=x;x=0;if(ma&1){Y=40;break b}else{rb=pb;sb=sa;tb=pb}}else{k[$>>2]=Ga+4;rb=pb;sb=sa;tb=pb}while(1){if((sb|0)<=0)break g;Ga=k[a>>2]|0;do if(Ga){$=k[Ga+12>>2]|0;if(($|0)==(k[Ga+16>>2]|0)){x=0;ma=Ba(k[(k[Ga>>2]|0)+36>>2]|0,Ga|0)|0;aa=x;x=0;if(aa&1){Y=38;break b}else ub=ma}else ub=k[$>>2]|0;if((ub|0)==-1){k[a>>2]=0;vb=1;break}else{vb=(k[a>>2]|0)==0;break}}else vb=1;while(0);do if(tb){Ga=k[tb+12>>2]|0;if((Ga|0)==(k[tb+16>>2]|0)){x=0;$=Ba(k[(k[tb>>2]|0)+36>>2]|0,tb|0)|0;ma=x;x=0;if(ma&1){Y=38;break b}else wb=$}else wb=k[Ga>>2]|0;if((wb|0)!=-1)if(vb^(rb|0)==0){xb=rb;yb=rb;break}else{Y=247;break b}else{k[b>>2]=0;zb=0;Y=240;break}}else{zb=rb;Y=240}while(0);if((Y|0)==240){Y=0;if(vb){Y=247;break b}else{xb=zb;yb=0}}Ga=k[a>>2]|0;$=k[Ga+12>>2]|0;if(($|0)==(k[Ga+16>>2]|0)){x=0;ma=Ba(k[(k[Ga>>2]|0)+36>>2]|0,Ga|0)|0;Ga=x;x=0;if(Ga&1){Y=38;break b}else Ab=ma}else Ab=k[$>>2]|0;x=0;$=Fa(k[(k[h>>2]|0)+12>>2]|0,h|0,2048,Ab|0)|0;ma=x;x=0;if(ma&1){Y=38;break b}if(!$){Y=247;break b}if((k[m>>2]|0)==(k[p>>2]|0)?(x=0,fb(426,j|0,m|0,p|0),$=x,x=0,$&1):0){Y=38;break b}$=k[a>>2]|0;ma=k[$+12>>2]|0;if((ma|0)==(k[$+16>>2]|0)){x=0;Ga=Ba(k[(k[$>>2]|0)+36>>2]|0,$|0)|0;$=x;x=0;if($&1){Y=38;break b}else Bb=Ga}else Bb=k[ma>>2]|0;ma=k[m>>2]|0;k[m>>2]=ma+4;k[ma>>2]=Bb;ma=sb+-1|0;k[E>>2]=ma;Ga=k[a>>2]|0;$=Ga+12|0;aa=k[$>>2]|0;if((aa|0)==(k[Ga+16>>2]|0)){x=0;Ba(k[(k[Ga>>2]|0)+40>>2]|0,Ga|0)|0;Ga=x;x=0;if(Ga&1){Y=38;break b}else{rb=xb;sb=ma;tb=yb;continue}}else{k[$>>2]=aa+4;rb=xb;sb=ma;tb=yb;continue}}}while(0);if((k[m>>2]|0)==(k[j>>2]|0)){Y=257;break b}else{ja=lb;ka=V}break}default:{ja=T;ka=V}}while(0);h:do if((Y|0)==60)while(1){Y=0;sa=k[a>>2]|0;do if(sa){ma=k[sa+12>>2]|0;if((ma|0)==(k[sa+16>>2]|0)){x=0;aa=Ba(k[(k[sa>>2]|0)+36>>2]|0,sa|0)|0;$=x;x=0;if($&1){Y=35;break b}else Cb=aa}else Cb=k[ma>>2]|0;if((Cb|0)==-1){k[a>>2]=0;Db=1;break}else{Db=(k[a>>2]|0)==0;break}}else Db=1;while(0);do if(ia){sa=k[ia+12>>2]|0;if((sa|0)==(k[ia+16>>2]|0)){x=0;ma=Ba(k[(k[ia>>2]|0)+36>>2]|0,ia|0)|0;aa=x;x=0;if(aa&1){Y=35;break b}else Eb=ma}else Eb=k[sa>>2]|0;if((Eb|0)!=-1)if(Db^(ha|0)==0){Fb=ha;Gb=ha;break}else{ja=T;ka=V;break h}else{k[b>>2]=0;Hb=0;Y=73;break}}else{Hb=ha;Y=73}while(0);if((Y|0)==73){Y=0;if(Db){ja=T;ka=V;break h}else{Fb=Hb;Gb=0}}sa=k[a>>2]|0;ma=k[sa+12>>2]|0;if((ma|0)==(k[sa+16>>2]|0)){x=0;aa=Ba(k[(k[sa>>2]|0)+36>>2]|0,sa|0)|0;sa=x;x=0;if(sa&1){Y=35;break b}else Ib=aa}else Ib=k[ma>>2]|0;x=0;ma=Fa(k[(k[h>>2]|0)+12>>2]|0,h|0,8192,Ib|0)|0;aa=x;x=0;if(aa&1){Y=35;break b}if(!ma){ja=T;ka=V;break h}ma=k[a>>2]|0;aa=ma+12|0;sa=k[aa>>2]|0;if((sa|0)==(k[ma+16>>2]|0)){x=0;$=Ba(k[(k[ma>>2]|0)+40>>2]|0,ma|0)|0;ma=x;x=0;if(ma&1){Y=35;break b}else Jb=$}else{k[aa>>2]=sa+4;Jb=k[sa>>2]|0}x=0;xa(965,D|0,Jb|0);sa=x;x=0;if(sa&1){Y=35;break b}else{ha=Fb;ia=Gb;Y=60}}while(0);T=ja;U=U+1|0;V=ka}i:switch(Y|0){case 35:{H=Hc()|0;I=M;break a;break}case 36:{H=Hc()|0;I=M;break a;break}case 37:{H=Hc()|0;I=M;break a;break}case 38:{H=Hc()|0;I=M;break a;break}case 39:{H=Hc()|0;I=M;break a;break}case 40:{H=Hc()|0;I=M;break a;break}case 58:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 123:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 164:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 222:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 247:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 257:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 259:{j:do if(X){V=X+4|0;U=X+8|0;T=1;k:while(1){S=i[X>>0]|0;if(!(S&1))Lb=(S&255)>>>1;else Lb=k[V>>2]|0;if(T>>>0>=Lb>>>0)break j;S=k[a>>2]|0;do if(S){O=k[S+12>>2]|0;if((O|0)==(k[S+16>>2]|0)){x=0;N=Ba(k[(k[S>>2]|0)+36>>2]|0,S|0)|0;L=x;x=0;if(L&1){Y=34;break k}else Mb=N}else Mb=k[O>>2]|0;if((Mb|0)==-1){k[a>>2]=0;Nb=1;break}else{Nb=(k[a>>2]|0)==0;break}}else Nb=1;while(0);S=k[b>>2]|0;do if(S){O=k[S+12>>2]|0;if((O|0)==(k[S+16>>2]|0)){x=0;N=Ba(k[(k[S>>2]|0)+36>>2]|0,S|0)|0;L=x;x=0;if(L&1){Y=34;break k}else Ob=N}else Ob=k[O>>2]|0;if((Ob|0)!=-1)if(Nb)break;else{Y=286;break k}else{k[b>>2]=0;Y=278;break}}else Y=278;while(0);if((Y|0)==278?(Y=0,Nb):0){Y=286;break}S=k[a>>2]|0;O=k[S+12>>2]|0;if((O|0)==(k[S+16>>2]|0)){x=0;N=Ba(k[(k[S>>2]|0)+36>>2]|0,S|0)|0;S=x;x=0;if(S&1){Y=34;break}else Pb=N}else Pb=k[O>>2]|0;if(!(i[X>>0]&1))Qb=V;else Qb=k[U>>2]|0;if((Pb|0)!=(k[Qb+(T<<2)>>2]|0)){Y=286;break}O=T+1|0;N=k[a>>2]|0;S=N+12|0;L=k[S>>2]|0;if((L|0)==(k[N+16>>2]|0)){x=0;Ba(k[(k[N>>2]|0)+40>>2]|0,N|0)|0;N=x;x=0;if(N&1){Y=34;break}else{T=O;continue}}else{k[S>>2]=L+4;T=O;continue}}if((Y|0)==34){T=Hc()|0;H=T;I=M;break a}else if((Y|0)==286){k[f>>2]=k[f>>2]|4;Kb=0;break i}}while(0);T=k[s>>2]|0;if((T|0)!=(W|0)){k[F>>2]=0;pob(z,T,W,F);if(!(k[F>>2]|0)){Kb=1;break}else{k[f>>2]=k[f>>2]|4;Kb=0;break}}else Kb=1;break}}O5a(D);O5a(C);O5a(B);O5a(A);K2a(z);T=k[s>>2]|0;k[s>>2]=0;if((T|0)!=0?(x=0,va(k[n>>2]|0,T|0),T=x,x=0,T&1):0){T=Hc(0)|0;Fg(T)}r=o;return Kb|0}while(0);O5a(D);O5a(C);O5a(B);O5a(A);K2a(z);z=k[s>>2]|0;k[s>>2]=0;if((z|0)!=0?(x=0,va(k[n>>2]|0,z|0),z=x,x=0,z&1):0){z=Hc(0)|0;Fg(z)}Sc(H|0);return 0}function yob(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0;a=r;r=r+432|0;h=a+424|0;j=a+24|0;l=a+16|0;m=a+8|0;n=a+4|0;o=a+428|0;p=a;k[l>>2]=j;q=l+4|0;k[q>>2]=1545;s=j+400|0;x=0;t=Ba(564,e|0)|0;u=x;x=0;if(!(u&1)){k[n>>2]=t;x=0;u=Ta(495,n|0,74140)|0;v=x;x=0;a:do if(!(v&1)?(i[o>>0]=0,w=k[c>>2]|0,k[p>>2]=w,y=k[e+4>>2]|0,z=w,x=0,k[h>>2]=k[p>>2],A=Da(43,b|0,h|0,d|0,n|0,y|0,f|0,o|0,u|0,l|0,m|0,s|0)|0,y=x,x=0,!(y&1)):0){if(A){if(!(i[g>>0]&1))i[g>>0]=0;else k[k[g+8>>2]>>2]=0;k[g+4>>2]=0;if(i[o>>0]|0){x=0;A=Ta(k[(k[u>>2]|0)+44>>2]|0,u|0,45)|0;y=x;x=0;if(y&1)break;x=0;xa(965,g|0,A|0);A=x;x=0;if(A&1)break}x=0;A=Ta(k[(k[u>>2]|0)+44>>2]|0,u|0,48)|0;y=x;x=0;if(y&1)break;y=k[m>>2]|0;B=y+-4|0;C=k[l>>2]|0;while(1){if(C>>>0>=B>>>0){D=C;break}if((k[C>>2]|0)!=(A|0)){D=C;break}C=C+4|0}x=0;Fa(175,g|0,D|0,y|0)|0;C=x;x=0;if(C&1)break}C=k[b>>2]|0;do if(C){A=k[C+12>>2]|0;if((A|0)==(k[C+16>>2]|0)){x=0;B=Ba(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;E=x;x=0;if(E&1)break a;else F=B}else F=k[A>>2]|0;if((F|0)==-1){k[b>>2]=0;G=1;break}else{G=(k[b>>2]|0)==0;break}}else G=1;while(0);do if(w){C=k[z+12>>2]|0;if((C|0)==(k[z+16>>2]|0)){x=0;y=Ba(k[(k[w>>2]|0)+36>>2]|0,z|0)|0;A=x;x=0;if(A&1)break a;else H=y}else H=k[C>>2]|0;if((H|0)!=-1)if(G)break;else{I=33;break}else{k[c>>2]=0;I=31;break}}else I=31;while(0);if((I|0)==31?G:0)I=33;if((I|0)==33)k[f>>2]=k[f>>2]|2;z=k[b>>2]|0;f0a(t)|0;w=k[l>>2]|0;k[l>>2]=0;if((w|0)!=0?(x=0,va(k[q>>2]|0,w|0),w=x,x=0,w&1):0){w=Hc(0)|0;Fg(w)}r=a;return z|0}while(0);a=Hc()|0;b=M;f0a(t)|0;t=k[l>>2]|0;k[l>>2]=0;if(!t){J=b;K=a}else{L=a;N=b;O=t;I=39}}else{t=Hc()|0;k[l>>2]=0;L=t;N=M;O=j;I=39}if((I|0)==39){x=0;va(k[q>>2]|0,O|0);O=x;x=0;if(O&1){O=Hc(0)|0;Fg(O)}else{J=N;K=L}}Sc(K|0);return 0}function zob(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;m=r;r=r+112|0;n=m+100|0;o=m+88|0;p=m+76|0;q=m+64|0;s=m+52|0;t=m+48|0;u=m+36|0;v=m+24|0;w=m+12|0;y=m;if(a){a=lqb(b,73308)|0;Tf[k[(k[a>>2]|0)+44>>2]&2047](n,a);z=k[n>>2]|0;i[c>>0]=z;i[c+1>>0]=z>>8;i[c+2>>0]=z>>16;i[c+3>>0]=z>>24;Tf[k[(k[a>>2]|0)+32>>2]&2047](o,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;x=0;xa(945,j|0,0);z=x;x=0;if(z&1){z=Hc(0)|0;Fg(z)};k[j>>2]=k[o>>2];k[j+4>>2]=k[o+4>>2];k[j+8>>2]=k[o+8>>2];z=0;while(1){if((z|0)==3)break;k[o+(z<<2)>>2]=0;z=z+1|0}O5a(o);Tf[k[(k[a>>2]|0)+28>>2]&2047](p,a);if(!(i[h>>0]&1))i[h>>0]=0;else k[k[h+8>>2]>>2]=0;k[h+4>>2]=0;x=0;xa(945,h|0,0);o=x;x=0;if(o&1){o=Hc(0)|0;Fg(o)};k[h>>2]=k[p>>2];k[h+4>>2]=k[p+4>>2];k[h+8>>2]=k[p+8>>2];o=0;while(1){if((o|0)==3)break;k[p+(o<<2)>>2]=0;o=o+1|0}O5a(p);p=Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0;k[d>>2]=p;p=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;k[e>>2]=p;Tf[k[(k[a>>2]|0)+20>>2]&2047](q,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}x=0;xa(603,f|0,0);p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)};k[f>>2]=k[q>>2];k[f+4>>2]=k[q+4>>2];k[f+8>>2]=k[q+8>>2];p=0;while(1){if((p|0)==3)break;k[q+(p<<2)>>2]=0;p=p+1|0}K2a(q);Tf[k[(k[a>>2]|0)+24>>2]&2047](s,a);if(!(i[g>>0]&1))i[g>>0]=0;else k[k[g+8>>2]>>2]=0;k[g+4>>2]=0;x=0;xa(945,g|0,0);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)};k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}O5a(s);A=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}else{a=lqb(b,73244)|0;Tf[k[(k[a>>2]|0)+44>>2]&2047](t,a);b=k[t>>2]|0;i[c>>0]=b;i[c+1>>0]=b>>8;i[c+2>>0]=b>>16;i[c+3>>0]=b>>24;Tf[k[(k[a>>2]|0)+32>>2]&2047](u,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;x=0;xa(945,j|0,0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)};k[j>>2]=k[u>>2];k[j+4>>2]=k[u+4>>2];k[j+8>>2]=k[u+8>>2];j=0;while(1){if((j|0)==3)break;k[u+(j<<2)>>2]=0;j=j+1|0}O5a(u);Tf[k[(k[a>>2]|0)+28>>2]&2047](v,a);if(!(i[h>>0]&1))i[h>>0]=0;else k[k[h+8>>2]>>2]=0;k[h+4>>2]=0;x=0;xa(945,h|0,0);u=x;x=0;if(u&1){u=Hc(0)|0;Fg(u)};k[h>>2]=k[v>>2];k[h+4>>2]=k[v+4>>2];k[h+8>>2]=k[v+8>>2];h=0;while(1){if((h|0)==3)break;k[v+(h<<2)>>2]=0;h=h+1|0}O5a(v);v=Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0;k[d>>2]=v;v=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;k[e>>2]=v;Tf[k[(k[a>>2]|0)+20>>2]&2047](w,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}x=0;xa(603,f|0,0);v=x;x=0;if(v&1){v=Hc(0)|0;Fg(v)};k[f>>2]=k[w>>2];k[f+4>>2]=k[w+4>>2];k[f+8>>2]=k[w+8>>2];f=0;while(1){if((f|0)==3)break;k[w+(f<<2)>>2]=0;f=f+1|0}K2a(w);Tf[k[(k[a>>2]|0)+24>>2]&2047](y,a);if(!(i[g>>0]&1))i[g>>0]=0;else k[k[g+8>>2]>>2]=0;k[g+4>>2]=0;x=0;xa(945,g|0,0);w=x;x=0;if(w&1){w=Hc(0)|0;Fg(w)};k[g>>2]=k[y>>2];k[g+4>>2]=k[y+4>>2];k[g+8>>2]=k[y+8>>2];g=0;while(1){if((g|0)==3)break;k[y+(g<<2)>>2]=0;g=g+1|0}O5a(y);A=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}k[l>>2]=A;r=m;return}function Aob(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73620;return}function Bob(a){a=a|0;return}function Cob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=k[(k[a>>2]|0)+12>>2]|0;k[i>>2]=k[b>>2];k[h>>2]=k[i>>2];i=Rf[j&63](a,h,c,d,e,f)|0;r=g;return i|0}function Dob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=k[(k[a>>2]|0)+16>>2]|0;k[i>>2]=k[b>>2];k[h>>2]=k[i>>2];i=Uf[j&127](a,h,c,d,e,f)|0;r=g;return i|0}function Eob(a){a=a|0;return}function Fob(a){a=a|0;OBa(a);return}function Gob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;a=r;r=r+384|0;g=a+8|0;h=a;j=a+284|0;l=a+72|0;m=a+184|0;n=a+68|0;o=a+180|0;q=a+177|0;s=a+176|0;t=a+56|0;u=a+44|0;v=a+32|0;w=a+28|0;y=a+76|0;z=a+24|0;A=a+16|0;B=a+20|0;k[l>>2]=j;p[g>>3]=f;C=uRa(j,100,329877,g)|0;do if(C>>>0>99){x=0;j=$a(51)|0;D=x;x=0;if(!(D&1)?(x=0,p[h>>3]=f,D=db(86,l|0,j|0,329877,h|0)|0,j=x,x=0,!(j&1)):0){j=k[l>>2]|0;if(!j){x=0;hb(55);E=x;x=0;if(E&1){F=0;G=0;H=8;break}I=k[l>>2]|0}else I=j;j=xYa(D)|0;E=j;if(!j){x=0;hb(55);J=x;x=0;if(J&1){F=I;G=E;H=8}else{K=E;L=I;N=0;O=D;H=11}}else{K=E;L=I;N=j;O=D;H=11}}else{F=0;G=0;H=8}}else{K=0;L=0;N=m;O=C;H=11}while(0);if((H|0)==11){x=0;C=Ba(564,d|0)|0;m=x;x=0;if(m&1){F=L;G=K;H=8}else{k[n>>2]=C;x=0;m=Ta(495,n|0,74148)|0;I=x;x=0;if(!(I&1)?(I=k[l>>2]|0,x=0,db(k[(k[m>>2]|0)+32>>2]|0,m|0,I|0,I+O|0,N|0)|0,I=x,x=0,!(I&1)):0){if(!O)P=0;else P=(i[k[l>>2]>>0]|0)==45;l=0;while(1){if((l|0)==3)break;k[t+(l<<2)>>2]=0;l=l+1|0}l=0;while(1){if((l|0)==3)break;k[u+(l<<2)>>2]=0;l=l+1|0}l=0;while(1){if((l|0)==3)break;k[v+(l<<2)>>2]=0;l=l+1|0}x=0;Ra(47,c|0,P|0,n|0,o|0,q|0,s|0,t|0,u|0,v|0,w|0);c=x;x=0;if(!(c&1)){c=k[w>>2]|0;if((O|0)>(c|0)){w=i[v>>0]|0;l=i[u>>0]|0;Q=(O-c<<1|1)+c+((w&1)==0?(w&255)>>>1:k[v+4>>2]|0)+((l&1)==0?(l&255)>>>1:k[u+4>>2]|0)|0}else{l=i[v>>0]|0;w=i[u>>0]|0;Q=c+2+((l&1)==0?(l&255)>>>1:k[v+4>>2]|0)+((w&1)==0?(w&255)>>>1:k[u+4>>2]|0)|0}if(Q>>>0>100){w=xYa(Q)|0;Q=w;if(!w){x=0;hb(55);l=x;x=0;if(l&1)R=Q;else{S=Q;T=0;H=36}}else{S=Q;T=w;H=36}}else{S=0;T=y;H=36}if((H|0)==36){x=0;Ha(42,T|0,z|0,A|0,k[d+4>>2]|0,N|0,N+O|0,m|0,P|0,o|0,i[q>>0]|0,i[s>>0]|0,t|0,u|0,v|0,c|0);c=x;x=0;if(!(c&1)?(k[B>>2]=k[b>>2],b=k[z>>2]|0,z=k[A>>2]|0,x=0,k[g>>2]=k[B>>2],B=za(80,g|0,T|0,b|0,z|0,d|0,e|0)|0,e=x,x=0,!(e&1)):0){if(!S)U=C;else{yYa(S);U=k[n>>2]|0}K2a(v);K2a(u);K2a(t);f0a(U)|0;if(K)yYa(K);if(L)yYa(L);r=a;return B|0}else R=S}S=Hc()|0;B=M;if(!R){V=S;W=B;X=C}else{yYa(R);V=S;W=B;X=k[n>>2]|0}}else{n=Hc()|0;V=n;W=M;X=C}K2a(v);K2a(u);K2a(t);Y=V;Z=W;_=X}else{X=Hc()|0;Y=X;Z=M;_=C}f0a(_)|0;$=Y;aa=Z;ba=K;ca=L}}if((H|0)==8){H=Hc()|0;$=H;aa=M;ba=G;ca=F}if(ba)yYa(ba);if(ca)yYa(ca);Sc($|0);return 0}function Hob(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;m=r;r=r+112|0;n=m+108|0;o=m+96|0;p=m+92|0;q=m+80|0;s=m+68|0;t=m+56|0;u=m+52|0;v=m+40|0;w=m+36|0;y=m+24|0;z=m+12|0;A=m;if(a){a=lqb(c,73180)|0;B=k[a>>2]|0;if(b){Tf[k[B+44>>2]&2047](n,a);C=k[n>>2]|0;i[d>>0]=C;i[d+1>>0]=C>>8;i[d+2>>0]=C>>16;i[d+3>>0]=C>>24;Tf[k[(k[a>>2]|0)+32>>2]&2047](o,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}x=0;xa(603,j|0,0);C=x;x=0;if(C&1){C=Hc(0)|0;Fg(C)};k[j>>2]=k[o>>2];k[j+4>>2]=k[o+4>>2];k[j+8>>2]=k[o+8>>2];C=0;while(1){if((C|0)==3)break;k[o+(C<<2)>>2]=0;C=C+1|0}K2a(o);D=a}else{Tf[k[B+40>>2]&2047](p,a);B=k[p>>2]|0;i[d>>0]=B;i[d+1>>0]=B>>8;i[d+2>>0]=B>>16;i[d+3>>0]=B>>24;Tf[k[(k[a>>2]|0)+28>>2]&2047](q,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}x=0;xa(603,j|0,0);B=x;x=0;if(B&1){B=Hc(0)|0;Fg(B)};k[j>>2]=k[q>>2];k[j+4>>2]=k[q+4>>2];k[j+8>>2]=k[q+8>>2];B=0;while(1){if((B|0)==3)break;k[q+(B<<2)>>2]=0;B=B+1|0}K2a(q);D=a}q=Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0;i[e>>0]=q;q=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;i[f>>0]=q;Tf[k[(k[D>>2]|0)+20>>2]&2047](s,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}x=0;xa(603,g|0,0);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)};k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}K2a(s);Tf[k[(k[D>>2]|0)+24>>2]&2047](t,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}x=0;xa(603,h|0,0);D=x;x=0;if(D&1){D=Hc(0)|0;Fg(D)};k[h>>2]=k[t>>2];k[h+4>>2]=k[t+4>>2];k[h+8>>2]=k[t+8>>2];D=0;while(1){if((D|0)==3)break;k[t+(D<<2)>>2]=0;D=D+1|0}K2a(t);E=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}else{a=lqb(c,73116)|0;c=k[a>>2]|0;if(b){Tf[k[c+44>>2]&2047](u,a);b=k[u>>2]|0;i[d>>0]=b;i[d+1>>0]=b>>8;i[d+2>>0]=b>>16;i[d+3>>0]=b>>24;Tf[k[(k[a>>2]|0)+32>>2]&2047](v,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}x=0;xa(603,j|0,0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)};k[j>>2]=k[v>>2];k[j+4>>2]=k[v+4>>2];k[j+8>>2]=k[v+8>>2];b=0;while(1){if((b|0)==3)break;k[v+(b<<2)>>2]=0;b=b+1|0}K2a(v);F=a}else{Tf[k[c+40>>2]&2047](w,a);c=k[w>>2]|0;i[d>>0]=c;i[d+1>>0]=c>>8;i[d+2>>0]=c>>16;i[d+3>>0]=c>>24;Tf[k[(k[a>>2]|0)+28>>2]&2047](y,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}x=0;xa(603,j|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[j>>2]=k[y>>2];k[j+4>>2]=k[y+4>>2];k[j+8>>2]=k[y+8>>2];j=0;while(1){if((j|0)==3)break;k[y+(j<<2)>>2]=0;j=j+1|0}K2a(y);F=a}y=Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0;i[e>>0]=y;y=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;i[f>>0]=y;Tf[k[(k[F>>2]|0)+20>>2]&2047](z,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}x=0;xa(603,g|0,0);y=x;x=0;if(y&1){y=Hc(0)|0;Fg(y)};k[g>>2]=k[z>>2];k[g+4>>2]=k[z+4>>2];k[g+8>>2]=k[z+8>>2];g=0;while(1){if((g|0)==3)break;k[z+(g<<2)>>2]=0;g=g+1|0}K2a(z);Tf[k[(k[F>>2]|0)+24>>2]&2047](A,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}x=0;xa(603,h|0,0);F=x;x=0;if(F&1){F=Hc(0)|0;Fg(F)};k[h>>2]=k[A>>2];k[h+4>>2]=k[A+4>>2];k[h+8>>2]=k[A+8>>2];h=0;while(1){if((h|0)==3)break;k[A+(h<<2)>>2]=0;h=h+1|0}K2a(A);E=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}k[l>>2]=E;r=m;return}function Iob(a,b,c,d,e,f,g,h,l,m,n,o,p,q,r){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;k[c>>2]=a;s=q+4|0;t=q+8|0;u=q+1|0;v=p+4|0;w=(d&512|0)==0;x=p+8|0;y=p+1|0;z=g+8|0;A=(r|0)>0;B=o+4|0;C=o+8|0;D=o+1|0;E=e;e=0;while(1){if((e|0)==4)break;a:do switch(i[l+e>>0]|0){case 0:{k[b>>2]=k[c>>2];F=E;break}case 1:{k[b>>2]=k[c>>2];G=cg[k[(k[g>>2]|0)+28>>2]&1023](g,32)|0;H=k[c>>2]|0;k[c>>2]=H+1;i[H>>0]=G;F=E;break}case 3:{G=i[q>>0]|0;H=(G&1)==0;if(!((H?(G&255)>>>1:k[s>>2]|0)|0))F=E;else{G=i[(H?u:k[t>>2]|0)>>0]|0;H=k[c>>2]|0;k[c>>2]=H+1;i[H>>0]=G;F=E}break}case 2:{G=i[p>>0]|0;H=(G&1)==0;I=H?(G&255)>>>1:k[v>>2]|0;if(w|(I|0)==0)F=E;else{G=H?y:k[x>>2]|0;H=G+I|0;I=k[c>>2]|0;J=G;while(1){if((J|0)==(H|0)){K=I;break}i[I>>0]=i[J>>0]|0;I=I+1|0;J=J+1|0}k[c>>2]=K;F=E}break}case 4:{J=k[c>>2]|0;I=h?E+1|0:E;H=k[z>>2]|0;G=I;while(1){if(G>>>0>=f>>>0){L=G;break}M=i[G>>0]|0;if(M<<24>>24<=-1){L=G;break}if(!(j[H+(M<<24>>24<<1)>>1]&2048)){L=G;break}G=G+1|0}if(A){G=L;H=r;while(1){N=(H|0)>0;if(!(G>>>0>I>>>0&N))break;M=G+-1|0;O=i[M>>0]|0;P=k[c>>2]|0;k[c>>2]=P+1;i[P>>0]=O;G=M;H=H+-1|0}if(N)Q=cg[k[(k[g>>2]|0)+28>>2]&1023](g,48)|0;else Q=0;M=H;while(1){O=k[c>>2]|0;k[c>>2]=O+1;if((M|0)<=0){R=O;break}i[O>>0]=Q;M=M+-1|0}i[R>>0]=m;S=G}else S=L;b:do if((S|0)==(I|0)){M=cg[k[(k[g>>2]|0)+28>>2]&1023](g,48)|0;H=k[c>>2]|0;k[c>>2]=H+1;i[H>>0]=M}else{M=i[o>>0]|0;H=(M&1)==0;if(!((H?(M&255)>>>1:k[B>>2]|0)|0)){T=S;U=-1;V=0;W=0}else{T=S;U=i[(H?D:k[C>>2]|0)>>0]|0;V=0;W=0}while(1){if((T|0)==(I|0))break b;if((W|0)==(U|0)){H=k[c>>2]|0;k[c>>2]=H+1;i[H>>0]=n;H=V+1|0;M=i[o>>0]|0;O=(M&1)==0;if(H>>>0<(O?(M&255)>>>1:k[B>>2]|0)>>>0){M=i[(O?D:k[C>>2]|0)+H>>0]|0;X=M<<24>>24==127?-1:M<<24>>24;Y=H;Z=0}else{X=W;Y=H;Z=0}}else{X=U;Y=V;Z=W}H=T+-1|0;M=i[H>>0]|0;O=k[c>>2]|0;k[c>>2]=O+1;i[O>>0]=M;T=H;U=X;V=Y;W=Z+1|0}}while(0);G=k[c>>2]|0;if((J|0)==(G|0))F=I;else{H=G;G=J;while(1){M=H+-1|0;if(G>>>0>=M>>>0){F=I;break a}O=i[G>>0]|0;i[G>>0]=i[M>>0]|0;i[M>>0]=O;H=M;G=G+1|0}}break}default:F=E}while(0);E=F;e=e+1|0}e=i[q>>0]|0;q=(e&1)==0;F=q?(e&255)>>>1:k[s>>2]|0;if(F>>>0>1){s=q?u:k[t>>2]|0;t=s+F|0;F=k[c>>2]|0;u=s;while(1){s=u+1|0;if((s|0)==(t|0)){_=F;break}i[F>>0]=i[s>>0]|0;F=F+1|0;u=s}k[c>>2]=_}switch(d&176|0){case 32:{k[b>>2]=k[c>>2];break}case 16:break;default:k[b>>2]=a}return}function Job(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+176|0;g=a+56|0;h=a+52|0;j=a+164|0;l=a+161|0;m=a+160|0;n=a+40|0;o=a+28|0;p=a+16|0;q=a+12|0;s=a+60|0;t=a+8|0;u=a+4|0;v=a;w=zab(d)|0;k[h>>2]=w;x=0;y=Ta(495,h|0,74148)|0;z=x;x=0;do if(z&1)A=22;else{B=i[f>>0]|0;C=(B&1)==0;D=f+4|0;if(!((C?(B&255)>>>1:k[D>>2]|0)|0))E=0;else{B=i[(C?f+1|0:k[f+8>>2]|0)>>0]|0;x=0;C=Ta(k[(k[y>>2]|0)+28>>2]|0,y|0,45)|0;F=x;x=0;if(F&1){A=22;break}E=B<<24>>24==C<<24>>24}C=0;while(1){if((C|0)==3)break;k[n+(C<<2)>>2]=0;C=C+1|0}C=0;while(1){if((C|0)==3)break;k[o+(C<<2)>>2]=0;C=C+1|0}C=0;while(1){if((C|0)==3)break;k[p+(C<<2)>>2]=0;C=C+1|0}x=0;Ra(47,c|0,E|0,h|0,j|0,l|0,m|0,n|0,o|0,p|0,q|0);C=x;x=0;if(!(C&1)){C=i[f>>0]|0;B=k[D>>2]|0;F=(C&1)==0?(C&255)>>>1:B;G=k[q>>2]|0;if((F|0)>(G|0)){H=i[p>>0]|0;I=i[o>>0]|0;J=(F-G<<1|1)+G+((H&1)==0?(H&255)>>>1:k[p+4>>2]|0)+((I&1)==0?(I&255)>>>1:k[o+4>>2]|0)|0}else{I=i[p>>0]|0;H=i[o>>0]|0;J=G+2+((I&1)==0?(I&255)>>>1:k[p+4>>2]|0)+((H&1)==0?(H&255)>>>1:k[o+4>>2]|0)|0}if(J>>>0>100){H=xYa(J)|0;I=H;if(!H){x=0;hb(55);F=x;x=0;if(F&1)K=I;else{L=i[f>>0]|0;N=k[D>>2]|0;O=I;P=0;A=26}}else{L=C;N=B;O=I;P=H;A=26}}else{L=C;N=B;O=0;P=s;A=26}if((A|0)==26){B=(L&1)==0;C=B?f+1|0:k[f+8>>2]|0;x=0;Ha(42,P|0,t|0,u|0,k[d+4>>2]|0,C|0,C+(B?(L&255)>>>1:N)|0,y|0,E|0,j|0,i[l>>0]|0,i[m>>0]|0,n|0,o|0,p|0,G|0);G=x;x=0;if(!(G&1)?(k[v>>2]=k[b>>2],G=k[t>>2]|0,B=k[u>>2]|0,x=0,k[g>>2]=k[v>>2],C=za(80,g|0,P|0,G|0,B|0,d|0,e|0)|0,B=x,x=0,!(B&1)):0){if(!O)Q=w;else{yYa(O);Q=k[h>>2]|0}K2a(p);K2a(o);K2a(n);f0a(Q)|0;r=a;return C|0}else K=O}C=Hc()|0;B=M;if(!K){R=C;S=B;T=w}else{yYa(K);R=C;S=B;T=k[h>>2]|0}}else{B=Hc()|0;R=B;S=M;T=w}K2a(p);K2a(o);K2a(n);U=R;V=S;W=T}while(0);if((A|0)==22){A=Hc()|0;U=A;V=M;W=w}f0a(W)|0;Sc(U|0);return 0}function Kob(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73656;return}function Lob(a){a=a|0;return}function Mob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=k[(k[a>>2]|0)+12>>2]|0;k[i>>2]=k[b>>2];k[h>>2]=k[i>>2];i=Rf[j&63](a,h,c,d,e,f)|0;r=g;return i|0}function Nob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=k[(k[a>>2]|0)+16>>2]|0;k[i>>2]=k[b>>2];k[h>>2]=k[i>>2];i=Uf[j&127](a,h,c,d,e,f)|0;r=g;return i|0}function Oob(a){a=a|0;return}function Pob(a){a=a|0;OBa(a);return}function Qob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;a=r;r=r+1008|0;g=a+8|0;h=a;j=a+896|0;l=a+888|0;m=a+488|0;n=a+480|0;o=a+892|0;q=a+476|0;s=a+472|0;t=a+460|0;u=a+448|0;v=a+436|0;w=a+432|0;y=a+32|0;z=a+24|0;A=a+16|0;B=a+20|0;k[l>>2]=j;p[g>>3]=f;C=uRa(j,100,329877,g)|0;do if(C>>>0>99){x=0;j=$a(51)|0;D=x;x=0;if(!(D&1)?(x=0,p[h>>3]=f,D=db(86,l|0,j|0,329877,h|0)|0,j=x,x=0,!(j&1)):0){j=k[l>>2]|0;if(!j){x=0;hb(55);E=x;x=0;if(E&1){F=0;G=0;H=8;break}I=k[l>>2]|0}else I=j;j=xYa(D<<2)|0;E=j;if(!j){x=0;hb(55);J=x;x=0;if(J&1){F=I;G=E;H=8}else{K=E;L=I;N=0;O=D;H=11}}else{K=E;L=I;N=j;O=D;H=11}}else{F=0;G=0;H=8}}else{K=0;L=0;N=m;O=C;H=11}while(0);if((H|0)==11){x=0;C=Ba(564,d|0)|0;m=x;x=0;if(m&1){F=L;G=K;H=8}else{k[n>>2]=C;x=0;m=Ta(495,n|0,74140)|0;I=x;x=0;if(!(I&1)?(I=k[l>>2]|0,x=0,db(k[(k[m>>2]|0)+48>>2]|0,m|0,I|0,I+O|0,N|0)|0,I=x,x=0,!(I&1)):0){if(!O)P=0;else P=(i[k[l>>2]>>0]|0)==45;l=0;while(1){if((l|0)==3)break;k[t+(l<<2)>>2]=0;l=l+1|0}l=0;while(1){if((l|0)==3)break;k[u+(l<<2)>>2]=0;l=l+1|0}l=0;while(1){if((l|0)==3)break;k[v+(l<<2)>>2]=0;l=l+1|0}x=0;Ra(48,c|0,P|0,n|0,o|0,q|0,s|0,t|0,u|0,v|0,w|0);c=x;x=0;if(!(c&1)){c=k[w>>2]|0;if((O|0)>(c|0)){w=i[v>>0]|0;l=i[u>>0]|0;Q=(O-c<<1|1)+c+((w&1)==0?(w&255)>>>1:k[v+4>>2]|0)+((l&1)==0?(l&255)>>>1:k[u+4>>2]|0)|0}else{l=i[v>>0]|0;w=i[u>>0]|0;Q=c+2+((l&1)==0?(l&255)>>>1:k[v+4>>2]|0)+((w&1)==0?(w&255)>>>1:k[u+4>>2]|0)|0}if(Q>>>0>100){w=xYa(Q<<2)|0;Q=w;if(!w){x=0;hb(55);l=x;x=0;if(l&1)R=Q;else{S=Q;T=0;H=36}}else{S=Q;T=w;H=36}}else{S=0;T=y;H=36}if((H|0)==36){x=0;Ha(43,T|0,z|0,A|0,k[d+4>>2]|0,N|0,N+(O<<2)|0,m|0,P|0,o|0,k[q>>2]|0,k[s>>2]|0,t|0,u|0,v|0,c|0);c=x;x=0;if(!(c&1)?(k[B>>2]=k[b>>2],b=k[z>>2]|0,z=k[A>>2]|0,x=0,k[g>>2]=k[B>>2],B=za(81,g|0,T|0,b|0,z|0,d|0,e|0)|0,e=x,x=0,!(e&1)):0){if(!S)U=C;else{yYa(S);U=k[n>>2]|0}O5a(v);O5a(u);K2a(t);f0a(U)|0;if(K)yYa(K);if(L)yYa(L);r=a;return B|0}else R=S}S=Hc()|0;B=M;if(!R){V=S;W=B;X=C}else{yYa(R);V=S;W=B;X=k[n>>2]|0}}else{n=Hc()|0;V=n;W=M;X=C}O5a(v);O5a(u);K2a(t);Y=V;Z=W;_=X}else{X=Hc()|0;Y=X;Z=M;_=C}f0a(_)|0;$=Y;aa=Z;ba=K;ca=L}}if((H|0)==8){H=Hc()|0;$=H;aa=M;ba=G;ca=F}if(ba)yYa(ba);if(ca)yYa(ca);Sc($|0);return 0}function Rob(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;m=r;r=r+112|0;n=m+108|0;o=m+96|0;p=m+92|0;q=m+80|0;s=m+68|0;t=m+56|0;u=m+52|0;v=m+40|0;w=m+36|0;y=m+24|0;z=m+12|0;A=m;if(a){a=lqb(c,73308)|0;B=k[a>>2]|0;if(b){Tf[k[B+44>>2]&2047](n,a);C=k[n>>2]|0;i[d>>0]=C;i[d+1>>0]=C>>8;i[d+2>>0]=C>>16;i[d+3>>0]=C>>24;Tf[k[(k[a>>2]|0)+32>>2]&2047](o,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;x=0;xa(945,j|0,0);C=x;x=0;if(C&1){C=Hc(0)|0;Fg(C)};k[j>>2]=k[o>>2];k[j+4>>2]=k[o+4>>2];k[j+8>>2]=k[o+8>>2];C=0;while(1){if((C|0)==3)break;k[o+(C<<2)>>2]=0;C=C+1|0}O5a(o)}else{Tf[k[B+40>>2]&2047](p,a);B=k[p>>2]|0;i[d>>0]=B;i[d+1>>0]=B>>8;i[d+2>>0]=B>>16;i[d+3>>0]=B>>24;Tf[k[(k[a>>2]|0)+28>>2]&2047](q,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;x=0;xa(945,j|0,0);B=x;x=0;if(B&1){B=Hc(0)|0;Fg(B)};k[j>>2]=k[q>>2];k[j+4>>2]=k[q+4>>2];k[j+8>>2]=k[q+8>>2];B=0;while(1){if((B|0)==3)break;k[q+(B<<2)>>2]=0;B=B+1|0}O5a(q)}q=Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0;k[e>>2]=q;q=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;k[f>>2]=q;Tf[k[(k[a>>2]|0)+20>>2]&2047](s,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}x=0;xa(603,g|0,0);q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)};k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}K2a(s);Tf[k[(k[a>>2]|0)+24>>2]&2047](t,a);if(!(i[h>>0]&1))i[h>>0]=0;else k[k[h+8>>2]>>2]=0;k[h+4>>2]=0;x=0;xa(945,h|0,0);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)};k[h>>2]=k[t>>2];k[h+4>>2]=k[t+4>>2];k[h+8>>2]=k[t+8>>2];s=0;while(1){if((s|0)==3)break;k[t+(s<<2)>>2]=0;s=s+1|0}O5a(t);D=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}else{a=lqb(c,73244)|0;c=k[a>>2]|0;if(b){Tf[k[c+44>>2]&2047](u,a);b=k[u>>2]|0;i[d>>0]=b;i[d+1>>0]=b>>8;i[d+2>>0]=b>>16;i[d+3>>0]=b>>24;Tf[k[(k[a>>2]|0)+32>>2]&2047](v,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;x=0;xa(945,j|0,0);b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)};k[j>>2]=k[v>>2];k[j+4>>2]=k[v+4>>2];k[j+8>>2]=k[v+8>>2];b=0;while(1){if((b|0)==3)break;k[v+(b<<2)>>2]=0;b=b+1|0}O5a(v)}else{Tf[k[c+40>>2]&2047](w,a);c=k[w>>2]|0;i[d>>0]=c;i[d+1>>0]=c>>8;i[d+2>>0]=c>>16;i[d+3>>0]=c>>24;Tf[k[(k[a>>2]|0)+28>>2]&2047](y,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;x=0;xa(945,j|0,0);c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)};k[j>>2]=k[y>>2];k[j+4>>2]=k[y+4>>2];k[j+8>>2]=k[y+8>>2];j=0;while(1){if((j|0)==3)break;k[y+(j<<2)>>2]=0;j=j+1|0}O5a(y)}y=Vf[k[(k[a>>2]|0)+12>>2]&1023](a)|0;k[e>>2]=y;y=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;k[f>>2]=y;Tf[k[(k[a>>2]|0)+20>>2]&2047](z,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}x=0;xa(603,g|0,0);y=x;x=0;if(y&1){y=Hc(0)|0;Fg(y)};k[g>>2]=k[z>>2];k[g+4>>2]=k[z+4>>2];k[g+8>>2]=k[z+8>>2];g=0;while(1){if((g|0)==3)break;k[z+(g<<2)>>2]=0;g=g+1|0}K2a(z);Tf[k[(k[a>>2]|0)+24>>2]&2047](A,a);if(!(i[h>>0]&1))i[h>>0]=0;else k[k[h+8>>2]>>2]=0;k[h+4>>2]=0;x=0;xa(945,h|0,0);z=x;x=0;if(z&1){z=Hc(0)|0;Fg(z)};k[h>>2]=k[A>>2];k[h+4>>2]=k[A+4>>2];k[h+8>>2]=k[A+8>>2];h=0;while(1){if((h|0)==3)break;k[A+(h<<2)>>2]=0;h=h+1|0}O5a(A);D=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0}k[l>>2]=D;r=m;return}function Sob(a,b,c,d,e,f,g,h,j,l,m,n,o,p,q){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;k[c>>2]=a;r=p+4|0;s=p+8|0;t=o+4|0;u=(d&512|0)==0;v=o+8|0;w=(q|0)>0;x=n+4|0;y=n+8|0;z=n+1|0;A=e;e=0;while(1){if((e|0)==4)break;a:do switch(i[j+e>>0]|0){case 0:{k[b>>2]=k[c>>2];B=A;break}case 1:{k[b>>2]=k[c>>2];C=cg[k[(k[g>>2]|0)+44>>2]&1023](g,32)|0;D=k[c>>2]|0;k[c>>2]=D+4;k[D>>2]=C;B=A;break}case 3:{C=i[p>>0]|0;D=(C&1)==0;if(!((D?(C&255)>>>1:k[r>>2]|0)|0))B=A;else{C=k[(D?r:k[s>>2]|0)>>2]|0;D=k[c>>2]|0;k[c>>2]=D+4;k[D>>2]=C;B=A}break}case 2:{C=i[o>>0]|0;D=(C&1)==0;E=D?(C&255)>>>1:k[t>>2]|0;if(u|(E|0)==0)B=A;else{C=D?t:k[v>>2]|0;D=C+(E<<2)|0;F=k[c>>2]|0;G=F;H=C;while(1){if((H|0)==(D|0))break;k[G>>2]=k[H>>2];G=G+4|0;H=H+4|0}k[c>>2]=F+(E<<2);B=A}break}case 4:{H=k[c>>2]|0;G=h?A+4|0:A;D=G;while(1){if(D>>>0>=f>>>0){I=D;break}if(!(Xf[k[(k[g>>2]|0)+12>>2]&255](g,2048,k[D>>2]|0)|0)){I=D;break}D=D+4|0}if(w){D=I;E=q;while(1){J=(E|0)>0;if(!(D>>>0>G>>>0&J))break;F=D+-4|0;C=k[F>>2]|0;K=k[c>>2]|0;k[c>>2]=K+4;k[K>>2]=C;D=F;E=E+-1|0}if(J)L=cg[k[(k[g>>2]|0)+44>>2]&1023](g,48)|0;else L=0;F=k[c>>2]|0;C=E;while(1){K=F+4|0;if((C|0)<=0){M=F;N=K;break}k[F>>2]=L;F=K;C=C+-1|0}k[c>>2]=N;k[M>>2]=l;O=D}else O=I;if((O|0)==(G|0)){C=cg[k[(k[g>>2]|0)+44>>2]&1023](g,48)|0;F=k[c>>2]|0;E=F+4|0;k[c>>2]=E;k[F>>2]=C;P=E}else{E=i[n>>0]|0;C=(E&1)==0;F=k[x>>2]|0;if(!((C?(E&255)>>>1:F)|0)){Q=O;R=-1;S=0;T=0}else{Q=O;R=i[(C?z:k[y>>2]|0)>>0]|0;S=0;T=0}while(1){if((Q|0)==(G|0))break;C=k[c>>2]|0;if((T|0)==(R|0)){E=C+4|0;k[c>>2]=E;k[C>>2]=m;K=S+1|0;U=i[n>>0]|0;V=(U&1)==0;if(K>>>0<(V?(U&255)>>>1:F)>>>0){U=i[(V?z:k[y>>2]|0)+K>>0]|0;W=E;X=U<<24>>24==127?-1:U<<24>>24;Y=K;Z=0}else{W=E;X=T;Y=K;Z=0}}else{W=C;X=R;Y=S;Z=T}C=Q+-4|0;K=k[C>>2]|0;k[c>>2]=W+4;k[W>>2]=K;Q=C;R=X;S=Y;T=Z+1|0}P=k[c>>2]|0}if((H|0)==(P|0))B=G;else{F=P;D=H;while(1){C=F+-4|0;if(D>>>0>=C>>>0){B=G;break a}K=k[D>>2]|0;k[D>>2]=k[C>>2];k[C>>2]=K;F=C;D=D+4|0}}break}default:B=A}while(0);A=B;e=e+1|0}e=i[p>>0]|0;p=(e&1)==0;B=p?(e&255)>>>1:k[r>>2]|0;if(B>>>0>1){e=p?r:k[s>>2]|0;s=e+4|0;r=e+(B<<2)|0;B=k[c>>2]|0;e=r-s|0;p=B;A=s;while(1){if((A|0)==(r|0))break;k[p>>2]=k[A>>2];p=p+4|0;A=A+4|0}k[c>>2]=B+(e>>>2<<2)}switch(d&176|0){case 32:{k[b>>2]=k[c>>2];break}case 16:break;default:k[b>>2]=a}return}function Tob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+480|0;g=a+468|0;h=a+464|0;j=a+472|0;l=a+460|0;m=a+456|0;n=a+444|0;o=a+432|0;p=a+420|0;q=a+416|0;s=a+16|0;t=a+8|0;u=a+4|0;v=a;w=zab(d)|0;k[h>>2]=w;x=0;y=Ta(495,h|0,74140)|0;z=x;x=0;do if(z&1)A=22;else{B=i[f>>0]|0;C=(B&1)==0;D=f+4|0;if(!((C?(B&255)>>>1:k[D>>2]|0)|0))E=0;else{B=k[(C?D:k[f+8>>2]|0)>>2]|0;x=0;C=Ta(k[(k[y>>2]|0)+44>>2]|0,y|0,45)|0;F=x;x=0;if(F&1){A=22;break}E=(B|0)==(C|0)}C=0;while(1){if((C|0)==3)break;k[n+(C<<2)>>2]=0;C=C+1|0}C=0;while(1){if((C|0)==3)break;k[o+(C<<2)>>2]=0;C=C+1|0}C=0;while(1){if((C|0)==3)break;k[p+(C<<2)>>2]=0;C=C+1|0}x=0;Ra(48,c|0,E|0,h|0,j|0,l|0,m|0,n|0,o|0,p|0,q|0);C=x;x=0;if(!(C&1)){C=i[f>>0]|0;B=k[D>>2]|0;F=(C&1)==0?(C&255)>>>1:B;G=k[q>>2]|0;if((F|0)>(G|0)){H=i[p>>0]|0;I=i[o>>0]|0;J=(F-G<<1|1)+G+((H&1)==0?(H&255)>>>1:k[p+4>>2]|0)+((I&1)==0?(I&255)>>>1:k[o+4>>2]|0)|0}else{I=i[p>>0]|0;H=i[o>>0]|0;J=G+2+((I&1)==0?(I&255)>>>1:k[p+4>>2]|0)+((H&1)==0?(H&255)>>>1:k[o+4>>2]|0)|0}if(J>>>0>100){H=xYa(J<<2)|0;I=H;if(!H){x=0;hb(55);F=x;x=0;if(F&1)K=I;else{L=i[f>>0]|0;N=k[D>>2]|0;O=I;P=0;A=26}}else{L=C;N=B;O=I;P=H;A=26}}else{L=C;N=B;O=0;P=s;A=26}if((A|0)==26){B=(L&1)==0;C=B?D:k[f+8>>2]|0;x=0;Ha(43,P|0,t|0,u|0,k[d+4>>2]|0,C|0,C+((B?(L&255)>>>1:N)<<2)|0,y|0,E|0,j|0,k[l>>2]|0,k[m>>2]|0,n|0,o|0,p|0,G|0);G=x;x=0;if(!(G&1)?(k[v>>2]=k[b>>2],G=k[t>>2]|0,B=k[u>>2]|0,x=0,k[g>>2]=k[v>>2],C=za(81,g|0,P|0,G|0,B|0,d|0,e|0)|0,B=x,x=0,!(B&1)):0){if(!O)Q=w;else{yYa(O);Q=k[h>>2]|0}O5a(p);O5a(o);K2a(n);f0a(Q)|0;r=a;return C|0}else K=O}C=Hc()|0;B=M;if(!K){R=C;S=B;T=w}else{yYa(K);R=C;S=B;T=k[h>>2]|0}}else{B=Hc()|0;R=B;S=M;T=w}O5a(p);O5a(o);K2a(n);U=R;V=S;W=T}while(0);if((A|0)==22){A=Hc()|0;U=A;V=M;W=w}f0a(W)|0;Sc(U|0);return 0}function Uob(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73692;return}function Vob(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+12>>2]&255](a,b,c)|0}function Wob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;_f[k[(k[b>>2]|0)+16>>2]&127](a,b,c,d,e,f);return}function Xob(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+20>>2]&2047](a,b);return}function Yob(a){a=a|0;return}function Zob(a){a=a|0;OBa(a);return}function _ob(a,b,c){a=a|0;b=b|0;c=c|0;c=pLa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,1)|0;return c>>>((c|0)!=(-1|0)&1)|0}function $ob(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;b=r;r=r+16|0;g=b;h=0;while(1){if((h|0)==3)break;k[g+(h<<2)>>2]=0;h=h+1|0}h=i[f>>0]|0;j=(h&1)==0;l=j?f+1|0:k[f+8>>2]|0;m=l+(j?(h&255)>>>1:k[f+4>>2]|0)|0;f=l;while(1){if(f>>>0>=m>>>0){n=8;break}x=0;xa(605,g|0,i[f>>0]|0);l=x;x=0;if(l&1){n=9;break}f=f+1|0}do if((n|0)==8){x=0;f=db(88,((c|0)==-1?-1:c<<1)|0,d|0,e|0,((i[g>>0]&1)==0?g+1|0:k[g+8>>2]|0)|0)|0;m=x;x=0;if(m&1){m=Hc()|0;o=m;p=M;n=11;break}m=0;while(1){if((m|0)==3)break;k[a+(m<<2)>>2]=0;m=m+1|0}m=f+(RLa(f)|0)|0;l=f;while(1){if(l>>>0>=m>>>0){n=20;break}x=0;xa(605,a|0,i[l>>0]|0);h=x;x=0;if(h&1){n=19;break}l=l+1|0}if((n|0)==19){l=Hc()|0;m=M;K2a(a);q=l;s=m;break}else if((n|0)==20){K2a(g);r=b;return}}else if((n|0)==9){m=Hc()|0;o=m;p=M;n=11}while(0);if((n|0)==11){q=o;s=p}K2a(g);Sc(q|0)}function apb(a,b){a=a|0;b=b|0;return}function bpb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=73732;return}function cpb(a,b,c){a=a|0;b=b|0;c=c|0;return Xf[k[(k[a>>2]|0)+12>>2]&255](a,b,c)|0}function dpb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;_f[k[(k[b>>2]|0)+16>>2]&127](a,b,c,d,e,f);return}function epb(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+20>>2]&2047](a,b);return}function fpb(a){a=a|0;return}function gpb(a){a=a|0;OBa(a);return}function hpb(a,b,c){a=a|0;b=b|0;c=c|0;c=pLa((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,1)|0;return c>>>((c|0)!=(-1|0)&1)|0}function ipb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;b=r;r=r+224|0;g=b+184|0;h=b+192|0;j=b+180|0;l=b+176|0;m=b+168|0;n=b+40|0;o=b+32|0;p=b+28|0;q=b+16|0;s=b+8|0;t=b;u=0;while(1){if((u|0)==3)break;k[q+(u<<2)>>2]=0;u=u+1|0}k[s+4>>2]=0;k[s>>2]=74872;u=i[f>>0]|0;v=(u&1)==0;w=f+4|0;y=v?w:k[f+8>>2]|0;f=y+((v?(u&255)>>>1:k[w>>2]|0)<<2)|0;w=h+32|0;u=y;y=0;a:while(1){if(!((y|0)!=2&u>>>0>>0)){z=13;break}k[l>>2]=u;x=0;v=jb(k[(k[s>>2]|0)+12>>2]|0,s|0,g|0,u|0,f|0,l|0,h|0,w|0,j|0)|0;A=x;x=0;if(A&1){z=16;break}if((v|0)==2?1:(k[l>>2]|0)==(u|0)){z=8;break}else B=h;while(1){if(B>>>0>=(k[j>>2]|0)>>>0)break;x=0;xa(605,q|0,i[B>>0]|0);A=x;x=0;if(A&1){z=15;break a}B=B+1|0}u=k[l>>2]|0;y=v}do if((z|0)==8){x=0;va(1544,329768);x=0;y=Hc()|0;C=y;D=M;z=17}else if((z|0)==13){x=0;y=db(88,((c|0)==-1?-1:c<<1)|0,d|0,e|0,((i[q>>0]&1)==0?q+1|0:k[q+8>>2]|0)|0)|0;l=x;x=0;if(l&1){l=Hc()|0;E=l;F=M;break}l=0;while(1){if((l|0)==3)break;k[a+(l<<2)>>2]=0;l=l+1|0}k[t+4>>2]=0;k[t>>2]=74968;l=y+(RLa(y)|0)|0;v=l;u=n+128|0;B=y;j=0;b:while(1){if(!((j|0)!=2&B>>>0>>0)){z=30;break}k[p>>2]=B;x=0;h=jb(k[(k[t>>2]|0)+16>>2]|0,t|0,m|0,B|0,((v-B|0)>32?B+32|0:l)|0,p|0,n|0,u|0,o|0)|0;w=x;x=0;if(w&1){z=32;break}if((h|0)==2?1:(k[p>>2]|0)==(B|0)){z=25;break}else G=n;while(1){if(G>>>0>=(k[o>>2]|0)>>>0)break;x=0;xa(965,a|0,k[G>>2]|0);w=x;x=0;if(w&1){z=31;break b}G=G+4|0}B=k[p>>2]|0;j=h}if((z|0)==25){x=0;va(1544,329768);x=0;j=Hc()|0;H=j;I=M}else if((z|0)==30){K2a(q);r=b;return}else if((z|0)==31){j=Hc()|0;H=j;I=M}else if((z|0)==32){j=Hc()|0;H=j;I=M}O5a(a);E=H;F=I}else if((z|0)==15){j=Hc()|0;C=j;D=M;z=17}else if((z|0)==16){j=Hc()|0;C=j;D=M;z=17}while(0);if((z|0)==17){E=C;F=D}K2a(q);Sc(E|0)}function jpb(a,b){a=a|0;b=b|0;return}function kpb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73772;return}function lpb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73772;return}function mpb(a){a=a|0;return}function npb(a){a=a|0;OBa(a);return}function opb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73804;return}function ppb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73804;return}function qpb(a){a=a|0;return}function rpb(a){a=a|0;OBa(a);return}function spb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73836;return}function tpb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73836;return}function upb(a){a=a|0;return}function vpb(a){a=a|0;OBa(a);return}function wpb(a,b,c){a=a|0;b=b|0;c=c|0;xpb(a,b,c);k[a>>2]=73884;return}function xpb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+32|0;e=d+12|0;f=d;k[a+4>>2]=c+-1;k[a>>2]=74352;x=0;c=Fa(172,2147483647,b|0,0)|0;g=x;x=0;a:do if(g&1){h=Hc()|0;i=M;j=h}else{k[a+8>>2]=c;if(c){r=d;return}h=Rd(8)|0;l=RLa(b)|0;x=0;fb(140,f|0,b|0,l|0);l=x;x=0;do if(!(l&1)){x=0;m=Fa(86,f|0,0,329883)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(f);p=o;q=n;break};k[e>>2]=k[m>>2];k[e+4>>2]=k[m+4>>2];k[e+8>>2]=k[m+8>>2];n=0;while(1){if((n|0)==3)break;k[m+(n<<2)>>2]=0;n=n+1|0}x=0;xa(623,h|0,e|0);n=x;x=0;if(n&1)s=1;else{x=0;fb(149,h|0,9040,1245);x=0;s=0}n=Hc()|0;m=M;K2a(e);K2a(f);if(s){p=m;q=n}else{i=m;j=n;break a}}else{n=Hc()|0;p=M;q=n}while(0);Fc(h|0);i=p;j=q}while(0);Sc(j|0)}function ypb(a,b,c){a=a|0;b=b|0;c=c|0;xpb(a,(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,c);k[a>>2]=73884;return}function zpb(a){a=a|0;Eub(a);return}function Apb(a){a=a|0;Eub(a);OBa(a);return}function Bpb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73932;return}function Cpb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73932;return}function Dpb(a){a=a|0;return}function Epb(a){a=a|0;OBa(a);return}function Fpb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73980;return}function Gpb(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=c+-1;k[a>>2]=73980;return}function Hpb(a){a=a|0;return}function Ipb(a){a=a|0;OBa(a);return}function Jpb(a){a=a|0;return}function Kpb(a){a=a|0;var b=0;a=Rd(8)|0;x=0;xa(671,a|0,329965);b=x;x=0;if(b&1){b=Hc()|0;Fc(a|0);Sc(b|0)}else{k[a>>2]=47544;Gf(a|0,9024,933)}}function Lpb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;k[a+4>>2]=b+-1;k[a>>2]=74060;b=a+8|0;x=0;xa(966,b|0,28);c=x;x=0;if(c&1){c=Hc()|0;d=M;e=c}else{c=a+144|0;x=0;fb(140,c|0,332342,1);f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f}else{f=k[b>>2]|0;j=a+12|0;l=k[j>>2]|0;while(1){if((l|0)==(f|0))break;m=l+-4|0;k[j>>2]=m;l=m}k[4815]=0;k[4814]=72204;x=0;xa(967,a|0,19256);l=x;x=0;do if((((((((((((((!(l&1)?(k[4817]=0,k[4816]=72244,x=0,xa(968,a|0,19264),j=x,x=0,!(j&1)):0)?(k[4819]=0,k[4818]=74164,k[4820]=0,i[19284]=0,j=Eqb()|0,k[4820]=j,x=0,xa(969,a|0,19272),j=x,x=0,!(j&1)):0)?(k[4823]=0,k[4822]=74612,x=0,xa(970,a|0,19288),j=x,x=0,!(j&1)):0)?(k[4825]=0,k[4824]=74680,x=0,xa(971,a|0,19296),j=x,x=0,!(j&1)):0)?(x=0,xa(972,19304,1),j=x,x=0,!(j&1)):0)?(x=0,xa(973,a|0,19304),j=x,x=0,!(j&1)):0)?(k[4831]=0,k[4830]=74728,x=0,xa(974,a|0,19320),j=x,x=0,!(j&1)):0)?(k[4833]=0,k[4832]=74776,x=0,xa(975,a|0,19328),j=x,x=0,!(j&1)):0)?(Ktb(19336,1),x=0,xa(976,a|0,19336),j=x,x=0,!(j&1)):0)?(Ltb(19360,1),x=0,xa(977,a|0,19360),j=x,x=0,!(j&1)):0)?(k[4849]=0,k[4848]=72284,x=0,xa(978,a|0,19392),j=x,x=0,!(j&1)):0)?(k[4851]=0,k[4850]=72356,x=0,xa(979,a|0,19400),j=x,x=0,!(j&1)):0)?(k[4853]=0,k[4852]=72428,x=0,xa(980,a|0,19408),j=x,x=0,!(j&1)):0)?(k[4855]=0,k[4854]=72488,x=0,xa(981,a|0,19416),j=x,x=0,!(j&1)):0){k[4857]=0;k[4856]=73068;x=0;xa(982,a|0,19424);j=x;x=0;if(j&1){n=42;break}k[4859]=0;k[4858]=73132;x=0;xa(983,a|0,19432);j=x;x=0;if(j&1){n=42;break}k[4861]=0;k[4860]=73196;x=0;xa(984,a|0,19440);j=x;x=0;if(j&1){n=42;break}k[4863]=0;k[4862]=73260;x=0;xa(985,a|0,19448);j=x;x=0;if(j&1){n=42;break}k[4865]=0;k[4864]=73548;x=0;xa(986,a|0,19456);j=x;x=0;if(j&1){n=42;break}k[4867]=0;k[4866]=73584;x=0;xa(987,a|0,19464);j=x;x=0;if(j&1){n=42;break}k[4869]=0;k[4868]=73620;x=0;xa(988,a|0,19472);j=x;x=0;if(j&1){n=42;break}k[4871]=0;k[4870]=73656;x=0;xa(989,a|0,19480);j=x;x=0;if(j&1){n=42;break}k[4873]=0;k[4872]=72548;k[4874]=72596;x=0;xa(990,a|0,19488);j=x;x=0;if(j&1){n=42;break}k[4877]=0;k[4876]=72640;k[4878]=72688;x=0;xa(991,a|0,19504);j=x;x=0;if(j&1){n=42;break}k[4881]=0;k[4880]=74592;x=0;j=$a(51)|0;f=x;x=0;if(f&1){f=Hc()|0;o=M;p=f;break}k[4882]=j;k[4880]=72956;x=0;xa(992,a|0,19520);j=x;x=0;if(j&1){n=42;break}k[4885]=0;k[4884]=74592;x=0;j=$a(51)|0;f=x;x=0;if(f&1){f=Hc()|0;o=M;p=f;break}k[4886]=j;k[4884]=72988;x=0;xa(993,a|0,19536);j=x;x=0;if(j&1){n=42;break}k[4889]=0;k[4888]=73692;x=0;xa(994,a|0,19552);j=x;x=0;if(j&1){n=42;break}k[4891]=0;k[4890]=73732;x=0;xa(995,a|0,19560);j=x;x=0;if(j&1){n=42;break}return}else n=42;while(0);if((n|0)==42){n=Hc()|0;o=M;p=n}K2a(c);g=o;h=p}Rvb(b);d=g;e=h}Sc(e|0)}function Mpb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;k[a+4>>2]=c+-1;k[a>>2]=74060;c=a+8|0;x=0;xa(966,c|0,28);d=x;x=0;if(d&1){d=Hc()|0;e=M;f=d}else{d=a+144|0;x=0;xa(604,d|0,b|0);b=x;x=0;do if(!(b&1)){x=0;g=$a(48)|0;h=x;x=0;do if(!(h&1)){j=k[g>>2]|0;if((j|0)!=(a|0)?(x=0,fb(427,c|0,k[j+8>>2]|0,k[j+12>>2]|0),j=x,x=0,j&1):0){l=11;break}j=a+12|0;m=0;while(1){n=k[c>>2]|0;if(m>>>0>=(k[j>>2]|0)-n>>2>>>0)break;o=k[n+(m<<2)>>2]|0;if(o)e0a(o);m=m+1|0}x=0;m=Ba(563,12)|0;o=x;x=0;if(!(o&1)){x=0;fb(428,m|0,d|0,0);o=x;x=0;if(o&1){o=Hc(0)|0;OBa(m);p=o;q=j;r=c;break}x=0;xa(996,a|0,m|0);m=x;x=0;if(!(m&1)?(x=0,m=Ba(563,12)|0,o=x,x=0,!(o&1)):0){x=0;fb(429,m|0,d|0,0);o=x;x=0;if(o&1){o=Hc(0)|0;OBa(m);p=o;q=j;r=c;break}x=0;xa(997,a|0,m|0);m=x;x=0;if(!(m&1)?(x=0,m=Ba(563,20)|0,o=x,x=0,!(o&1)):0){x=0;fb(430,m|0,d|0,0);o=x;x=0;if(o&1){o=Hc(0)|0;OBa(m);p=o;q=j;r=c;break}x=0;xa(998,a|0,m|0);m=x;x=0;if(!(m&1)?(x=0,m=Ba(563,12)|0,o=x,x=0,!(o&1)):0){x=0;fb(431,m|0,d|0,0);o=x;x=0;if(o&1){o=Hc(0)|0;OBa(m);p=o;q=j;r=c;break}x=0;xa(999,a|0,m|0);m=x;x=0;if(!(m&1)?(x=0,m=Ba(563,8)|0,o=x,x=0,!(o&1)):0){k[m+4>>2]=-1;k[m>>2]=73836;x=0;xa(1e3,a|0,m|0);m=x;x=0;if(m&1){l=11;break}x=0;m=Ba(563,12)|0;o=x;x=0;if(o&1){l=11;break}o=a+152|0;n=d+1|0;x=0;fb(432,m|0,((i[d>>0]&1)==0?n:k[o>>2]|0)|0,0);s=x;x=0;if(s&1){s=Hc(0)|0;OBa(m);p=s;q=j;r=c;break}k[m>>2]=73884;x=0;xa(1001,a|0,m|0);m=x;x=0;if(m&1){l=11;break}x=0;m=Ba(563,8)|0;s=x;x=0;if(s&1){l=11;break}k[m+4>>2]=-1;k[m>>2]=73932;x=0;xa(1002,a|0,m|0);m=x;x=0;if(m&1){l=11;break}x=0;m=Ba(563,8)|0;s=x;x=0;if(s&1){l=11;break}k[m+4>>2]=-1;k[m>>2]=73980;x=0;xa(1003,a|0,m|0);m=x;x=0;if(m&1){l=11;break}x=0;m=Ba(563,24)|0;s=x;x=0;if(s&1){l=11;break}x=0;fb(433,m|0,d|0,0);s=x;x=0;if(s&1){s=Hc(0)|0;OBa(m);p=s;q=j;r=c;break}x=0;xa(1004,a|0,m|0);m=x;x=0;if(m&1){l=11;break}x=0;m=Ba(563,28)|0;s=x;x=0;if(s&1){l=11;break}x=0;fb(434,m|0,d|0,0);s=x;x=0;if(s&1){s=Hc(0)|0;OBa(m);p=s;q=j;r=c;break}x=0;xa(1005,a|0,m|0);m=x;x=0;if(m&1){l=11;break}x=0;m=Ba(563,72)|0;s=x;x=0;if(s&1){l=11;break}k[m+4>>2]=-1;k[m>>2]=73324;s=m+12|0;t=0;while(1){if((t|0)==3)break;k[s+(t<<2)>>2]=0;t=t+1|0}t=m+24|0;u=0;while(1){if((u|0)==3)break;k[t+(u<<2)>>2]=0;u=u+1|0}u=m+36|0;v=0;while(1){if((v|0)==3)break;k[u+(v<<2)>>2]=0;v=v+1|0}v=m+48|0;w=0;while(1){if((w|0)==3)break;k[v+(w<<2)>>2]=0;w=w+1|0}x=0;xa(960,m|0,((i[d>>0]&1)==0?n:k[o>>2]|0)|0);w=x;x=0;if(w&1){w=Hc(0)|0;K2a(v);K2a(u);K2a(t);K2a(s);OBa(m);p=w;q=j;r=c;break}x=0;xa(1006,a|0,m|0);w=x;x=0;if(w&1){l=11;break}x=0;w=Ba(563,72)|0;y=x;x=0;if(y&1){l=11;break}k[w+4>>2]=-1;k[w>>2]=73380;y=w+12|0;z=0;while(1){if((z|0)==3)break;k[y+(z<<2)>>2]=0;z=z+1|0}z=w+24|0;m=0;while(1){if((m|0)==3)break;k[z+(m<<2)>>2]=0;m=m+1|0}m=w+36|0;s=0;while(1){if((s|0)==3)break;k[m+(s<<2)>>2]=0;s=s+1|0}s=w+48|0;t=0;while(1){if((t|0)==3)break;k[s+(t<<2)>>2]=0;t=t+1|0}x=0;xa(961,w|0,((i[d>>0]&1)==0?n:k[o>>2]|0)|0);t=x;x=0;if(t&1){t=Hc(0)|0;K2a(s);K2a(m);K2a(z);K2a(y);OBa(w);p=t;q=j;r=c;break}x=0;xa(1007,a|0,w|0);t=x;x=0;if(t&1){l=11;break}x=0;t=Ba(563,76)|0;u=x;x=0;if(u&1){l=11;break}k[t+4>>2]=-1;k[t>>2]=73436;u=t+16|0;v=0;while(1){if((v|0)==3)break;k[u+(v<<2)>>2]=0;v=v+1|0}v=t+28|0;w=0;while(1){if((w|0)==3)break;k[v+(w<<2)>>2]=0;w=w+1|0}w=t+40|0;y=0;while(1){if((y|0)==3)break;k[w+(y<<2)>>2]=0;y=y+1|0}y=t+52|0;z=0;while(1){if((z|0)==3)break;k[y+(z<<2)>>2]=0;z=z+1|0}x=0;xa(962,t|0,((i[d>>0]&1)==0?n:k[o>>2]|0)|0);z=x;x=0;if(z&1){z=Hc(0)|0;O5a(y);O5a(w);O5a(v);K2a(u);OBa(t);p=z;q=j;r=c;break}x=0;xa(1008,a|0,t|0);z=x;x=0;if(z&1){l=11;break}x=0;z=Ba(563,76)|0;m=x;x=0;if(m&1){l=11;break}k[z+4>>2]=-1;k[z>>2]=73492;m=z+16|0;s=0;while(1){if((s|0)==3)break;k[m+(s<<2)>>2]=0;s=s+1|0}s=z+28|0;t=0;while(1){if((t|0)==3)break;k[s+(t<<2)>>2]=0;t=t+1|0}t=z+40|0;u=0;while(1){if((u|0)==3)break;k[t+(u<<2)>>2]=0;u=u+1|0}u=z+52|0;v=0;while(1){if((v|0)==3)break;k[u+(v<<2)>>2]=0;v=v+1|0}x=0;xa(964,z|0,((i[d>>0]&1)==0?n:k[o>>2]|0)|0);v=x;x=0;if(v&1){v=Hc(0)|0;O5a(u);O5a(t);O5a(s);K2a(m);OBa(z);p=v;q=j;r=c;break}x=0;xa(1009,a|0,z|0);v=x;x=0;if(v&1){l=11;break}x=0;v=Ba(563,544)|0;w=x;x=0;if(w&1){l=11;break}k[v+4>>2]=-1;w=v+8|0;k[v>>2]=72548;k[w>>2]=72596;x=0;xa(951,v+12|0,d|0);y=x;x=0;if(y&1){y=Hc(0)|0;OBa(v);p=y;q=j;r=c;break}k[v>>2]=72732;k[w>>2]=72808;x=0;xa(1010,a|0,v|0);v=x;x=0;if(v&1){l=11;break}x=0;v=Ba(563,544)|0;w=x;x=0;if(w&1){l=11;break}k[v+4>>2]=-1;w=v+8|0;k[v>>2]=72640;k[w>>2]=72688;x=0;xa(956,v+12|0,d|0);y=x;x=0;if(y&1){y=Hc(0)|0;OBa(v);p=y;q=j;r=c;break}k[v>>2]=72844;k[w>>2]=72920;x=0;xa(1011,a|0,v|0);v=x;x=0;if(v&1){l=11;break}x=0;v=Ba(563,12)|0;w=x;x=0;if(w&1){l=11;break}k[v+4>>2]=-1;k[v>>2]=74592;x=0;xa(959,v+8|0,d|0);w=x;x=0;if(w&1){w=Hc(0)|0;OBa(v);p=w;q=j;r=c;break}k[v>>2]=73020;x=0;xa(1012,a|0,v|0);v=x;x=0;if(v&1){l=11;break}x=0;v=Ba(563,12)|0;w=x;x=0;if(w&1){l=11;break}k[v+4>>2]=-1;k[v>>2]=74592;x=0;xa(959,v+8|0,d|0);w=x;x=0;if(w&1){w=Hc(0)|0;OBa(v);p=w;q=j;r=c;break}k[v>>2]=73044;x=0;xa(1013,a|0,v|0);v=x;x=0;if(v&1){l=11;break}x=0;v=Ba(563,8)|0;w=x;x=0;if(w&1){l=11;break}k[v+4>>2]=-1;k[v>>2]=73772;x=0;xa(1014,a|0,v|0);v=x;x=0;if(v&1){l=11;break}x=0;v=Ba(563,8)|0;w=x;x=0;if(w&1){l=11;break}k[v+4>>2]=-1;k[v>>2]=73804;x=0;xa(1015,a|0,v|0);v=x;x=0;if(v&1){l=11;break}return}else l=11}else l=11}else l=11}else l=11}else l=11}else l=11;while(0);if((l|0)==11){g=Hc(0)|0;p=g;q=a+12|0;r=c}me(p|0)|0;g=0;while(1){h=k[r>>2]|0;if(g>>>0>=(k[q>>2]|0)-h>>2>>>0)break;v=k[h+(g<<2)>>2]|0;if(v)f0a(v)|0;g=g+1|0}x=0;hb(46);x=0;g=Hc()|0;v=M;x=0;hb(45);h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}else{K2a(d);A=v;B=g;break}}else{g=Hc()|0;A=M;B=g}while(0);Rvb(c);e=A;f=B}Sc(f|0)}function Npb(){var a=0;do if((i[19568]|0)==0?(Bb(19568)|0)!=0:0){x=0;$a(53)|0;a=x;x=0;if(a&1){a=Hc()|0;Cd(19568);Sc(a|0)}else{k[18949]=75792;Kc(19568);break}}while(0);return k[18949]|0}function Opb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;k[a+4>>2]=-1;k[a>>2]=74060;c=a+8|0;d=b+8|0;e=b+12|0;f=(k[e>>2]|0)-(k[d>>2]|0)>>2;x=0;xa(966,c|0,(f>>>0>28?f:28)|0);f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f}else{f=a+144|0;x=0;xa(604,f|0,b+144|0);i=x;x=0;do if(i&1){j=Hc()|0;l=M;m=j}else{if((a|0)!=(b|0)?(x=0,fb(427,c|0,k[d>>2]|0,k[e>>2]|0),j=x,x=0,j&1):0){j=Hc()|0;n=M;K2a(f);l=n;m=j;break}j=a+12|0;n=0;while(1){o=k[c>>2]|0;if(n>>>0>=(k[j>>2]|0)-o>>2>>>0)break;p=k[o+(n<<2)>>2]|0;if(p)e0a(p);n=n+1|0}return}while(0);Rvb(c);g=l;h=m}Sc(h|0)}function Ppb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;k[a+4>>2]=-1;k[a>>2]=74060;e=a+8|0;x=0;xa(966,e|0,28);f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f}else{f=a+144|0;x=0;fb(140,f|0,329972,1);j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j}else{if((a|0)!=(b|0)?(x=0,fb(427,e|0,k[b+8>>2]|0,k[b+12>>2]|0),b=x,x=0,b&1):0){b=Hc()|0;n=M;o=b}else{b=a+12|0;j=0;while(1){p=k[e>>2]|0;if(j>>>0>=(k[b>>2]|0)-p>>2>>>0)break;q=k[p+(j<<2)>>2]|0;if(q)e0a(q);j=j+1|0}do if(d&8){x=0;j=Ba(563,12)|0;q=x;x=0;if(!(q&1)){x=0;fb(428,j|0,c|0,0);q=x;x=0;if(q&1){q=Hc(0)|0;OBa(j);r=q;break}x=0;xa(996,a|0,j|0);j=x;x=0;if(!(j&1)?(x=0,j=Ba(563,12)|0,q=x,x=0,!(q&1)):0){x=0;fb(429,j|0,c|0,0);q=x;x=0;if(!(q&1)){x=0;xa(997,a|0,j|0);q=x;x=0;if(q&1){s=20;break}else{s=23;break}}else{q=Hc(0)|0;OBa(j);r=q;break}}else s=20}else s=20}else s=23;while(0);a:do if((s|0)==23){if(d&1){x=0;q=Ba(563,20)|0;j=x;x=0;if(j&1){s=20;break}x=0;fb(430,q|0,c|0,0);j=x;x=0;if(j&1){j=Hc(0)|0;OBa(q);r=j;break}x=0;xa(998,a|0,q|0);q=x;x=0;if(q&1){s=20;break}x=0;q=Ba(563,12)|0;j=x;x=0;if(j&1){s=20;break}x=0;fb(431,q|0,c|0,0);j=x;x=0;if(j&1){j=Hc(0)|0;OBa(q);r=j;break}x=0;xa(999,a|0,q|0);q=x;x=0;if(q&1){s=20;break}x=0;q=Ba(563,8)|0;j=x;x=0;if(j&1){s=20;break}k[q+4>>2]=-1;k[q>>2]=73836;x=0;xa(1e3,a|0,q|0);q=x;x=0;if(q&1){s=20;break}x=0;q=Ba(563,12)|0;j=x;x=0;if(j&1){s=20;break}x=0;fb(432,q|0,((i[c>>0]&1)==0?c+1|0:k[c+8>>2]|0)|0,0);j=x;x=0;if(j&1){j=Hc(0)|0;OBa(q);r=j;break}k[q>>2]=73884;x=0;xa(1001,a|0,q|0);q=x;x=0;if(q&1){s=20;break}x=0;q=Ba(563,8)|0;j=x;x=0;if(j&1){s=20;break}k[q+4>>2]=-1;k[q>>2]=73932;x=0;xa(1002,a|0,q|0);q=x;x=0;if(q&1){s=20;break}x=0;q=Ba(563,8)|0;j=x;x=0;if(j&1){s=20;break}k[q+4>>2]=-1;k[q>>2]=73980;x=0;xa(1003,a|0,q|0);q=x;x=0;if(q&1){s=20;break}}do if(d&16){x=0;q=Ba(563,72)|0;j=x;x=0;if(j&1){s=20;break a}k[q+4>>2]=-1;k[q>>2]=73324;j=q+12|0;p=0;while(1){if((p|0)==3)break;k[j+(p<<2)>>2]=0;p=p+1|0}p=q+24|0;t=0;while(1){if((t|0)==3)break;k[p+(t<<2)>>2]=0;t=t+1|0}t=q+36|0;u=0;while(1){if((u|0)==3)break;k[t+(u<<2)>>2]=0;u=u+1|0}u=q+48|0;v=0;while(1){if((v|0)==3)break;k[u+(v<<2)>>2]=0;v=v+1|0}v=c+8|0;w=c+1|0;x=0;xa(960,q|0,((i[c>>0]&1)==0?w:k[v>>2]|0)|0);y=x;x=0;if(y&1){y=Hc(0)|0;K2a(u);K2a(t);K2a(p);K2a(j);OBa(q);r=y;break a}x=0;xa(1006,a|0,q|0);y=x;x=0;if(y&1){s=20;break a}x=0;y=Ba(563,72)|0;z=x;x=0;if(z&1){s=20;break a}k[y+4>>2]=-1;k[y>>2]=73380;z=y+12|0;A=0;while(1){if((A|0)==3)break;k[z+(A<<2)>>2]=0;A=A+1|0}A=y+24|0;q=0;while(1){if((q|0)==3)break;k[A+(q<<2)>>2]=0;q=q+1|0}q=y+36|0;j=0;while(1){if((j|0)==3)break;k[q+(j<<2)>>2]=0;j=j+1|0}j=y+48|0;p=0;while(1){if((p|0)==3)break;k[j+(p<<2)>>2]=0;p=p+1|0}x=0;xa(961,y|0,((i[c>>0]&1)==0?w:k[v>>2]|0)|0);p=x;x=0;if(p&1){p=Hc(0)|0;K2a(j);K2a(q);K2a(A);K2a(z);OBa(y);r=p;break a}x=0;xa(1007,a|0,y|0);p=x;x=0;if(p&1){s=20;break a}x=0;p=Ba(563,76)|0;t=x;x=0;if(t&1){s=20;break a}k[p+4>>2]=-1;k[p>>2]=73436;t=p+16|0;u=0;while(1){if((u|0)==3)break;k[t+(u<<2)>>2]=0;u=u+1|0}u=p+28|0;y=0;while(1){if((y|0)==3)break;k[u+(y<<2)>>2]=0;y=y+1|0}y=p+40|0;z=0;while(1){if((z|0)==3)break;k[y+(z<<2)>>2]=0;z=z+1|0}z=p+52|0;A=0;while(1){if((A|0)==3)break;k[z+(A<<2)>>2]=0;A=A+1|0}x=0;xa(962,p|0,((i[c>>0]&1)==0?w:k[v>>2]|0)|0);A=x;x=0;if(A&1){A=Hc(0)|0;O5a(z);O5a(y);O5a(u);K2a(t);OBa(p);r=A;break a}x=0;xa(1008,a|0,p|0);A=x;x=0;if(A&1){s=20;break a}x=0;A=Ba(563,76)|0;q=x;x=0;if(q&1){s=20;break a}k[A+4>>2]=-1;k[A>>2]=73492;q=A+16|0;j=0;while(1){if((j|0)==3)break;k[q+(j<<2)>>2]=0;j=j+1|0}j=A+28|0;p=0;while(1){if((p|0)==3)break;k[j+(p<<2)>>2]=0;p=p+1|0}p=A+40|0;t=0;while(1){if((t|0)==3)break;k[p+(t<<2)>>2]=0;t=t+1|0}t=A+52|0;u=0;while(1){if((u|0)==3)break;k[t+(u<<2)>>2]=0;u=u+1|0}x=0;xa(964,A|0,((i[c>>0]&1)==0?w:k[v>>2]|0)|0);u=x;x=0;if(!(u&1)){x=0;xa(1009,a|0,A|0);u=x;x=0;if(u&1){s=20;break a}else break}else{u=Hc(0)|0;O5a(t);O5a(p);O5a(j);K2a(q);OBa(A);r=u;break a}}while(0);do if(d&2){x=0;u=Ba(563,24)|0;y=x;x=0;if(y&1){s=20;break a}x=0;fb(433,u|0,c|0,0);y=x;x=0;if(y&1){y=Hc(0)|0;OBa(u);r=y;break a}x=0;xa(1004,a|0,u|0);u=x;x=0;if(u&1){s=20;break a}x=0;u=Ba(563,28)|0;y=x;x=0;if(y&1){s=20;break a}x=0;fb(434,u|0,c|0,0);y=x;x=0;if(!(y&1)){x=0;xa(1005,a|0,u|0);y=x;x=0;if(y&1){s=20;break a}else break}else{y=Hc(0)|0;OBa(u);r=y;break a}}while(0);do if(d&4){x=0;y=Ba(563,544)|0;u=x;x=0;if(u&1){s=20;break a}k[y+4>>2]=-1;u=y+8|0;k[y>>2]=72548;k[u>>2]=72596;x=0;xa(951,y+12|0,c|0);z=x;x=0;if(z&1){z=Hc(0)|0;OBa(y);r=z;break a}k[y>>2]=72732;k[u>>2]=72808;x=0;xa(1010,a|0,y|0);y=x;x=0;if(y&1){s=20;break a}x=0;y=Ba(563,544)|0;u=x;x=0;if(u&1){s=20;break a}k[y+4>>2]=-1;u=y+8|0;k[y>>2]=72640;k[u>>2]=72688;x=0;xa(956,y+12|0,c|0);z=x;x=0;if(z&1){z=Hc(0)|0;OBa(y);r=z;break a}k[y>>2]=72844;k[u>>2]=72920;x=0;xa(1011,a|0,y|0);y=x;x=0;if(y&1){s=20;break a}x=0;y=Ba(563,12)|0;u=x;x=0;if(u&1){s=20;break a}k[y+4>>2]=-1;k[y>>2]=74592;x=0;xa(959,y+8|0,c|0);u=x;x=0;if(u&1){u=Hc(0)|0;OBa(y);r=u;break a}k[y>>2]=73020;x=0;xa(1012,a|0,y|0);y=x;x=0;if(y&1){s=20;break a}x=0;y=Ba(563,12)|0;u=x;x=0;if(u&1){s=20;break a}k[y+4>>2]=-1;k[y>>2]=74592;x=0;xa(959,y+8|0,c|0);u=x;x=0;if(!(u&1)){k[y>>2]=73044;x=0;xa(1013,a|0,y|0);u=x;x=0;if(u&1){s=20;break a}else break}else{u=Hc(0)|0;OBa(y);r=u;break a}}while(0);if(d&32){x=0;u=Ba(563,8)|0;y=x;x=0;if(y&1){s=20;break}k[u+4>>2]=-1;k[u>>2]=73772;x=0;xa(1014,a|0,u|0);u=x;x=0;if(u&1){s=20;break}x=0;u=Ba(563,8)|0;y=x;x=0;if(y&1){s=20;break}k[u+4>>2]=-1;k[u>>2]=73804;x=0;xa(1015,a|0,u|0);u=x;x=0;if(u&1){s=20;break}}return}while(0);if((s|0)==20){s=Hc(0)|0;r=s}me(r|0)|0;r=0;while(1){s=k[e>>2]|0;if(r>>>0>=(k[b>>2]|0)-s>>2>>>0)break;a=k[s+(r<<2)>>2]|0;if(a)f0a(a)|0;r=r+1|0}x=0;hb(46);x=0;r=Hc()|0;b=M;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else{n=b;o=r}}K2a(f);l=n;m=o}Rvb(e);g=l;h=m}Sc(h|0)}function Qpb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;k[a+4>>2]=-1;k[a>>2]=74060;e=a+8|0;x=0;xa(966,e|0,28);f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f}else{f=a+144|0;x=0;fb(140,f|0,329972,1);i=x;x=0;if(i&1){i=Hc()|0;j=M;l=i}else{if((a|0)!=(b|0)?(x=0,fb(427,e|0,k[b+8>>2]|0,k[b+12>>2]|0),b=x,x=0,b&1):0){b=Hc()|0;m=M;n=b}else{b=a+12|0;i=0;while(1){o=k[e>>2]|0;if(i>>>0>=(k[b>>2]|0)-o>>2>>>0)break;p=k[o+(i<<2)>>2]|0;if(p)e0a(p);i=i+1|0}if(d&8){x=0;xa(1016,a|0,c|0);i=x;x=0;if(!(i&1)?(x=0,xa(1017,a|0,c|0),i=x,x=0,!(i&1)):0)q=19}else q=19;do if((q|0)==19){if(d&1){x=0;xa(1018,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1019,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1020,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1021,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1022,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1023,a|0,c|0);i=x;x=0;if(i&1)break}if(d&16){x=0;xa(1024,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1025,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1026,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1027,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1028,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1029,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1030,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1031,a|0,c|0);i=x;x=0;if(i&1)break}if(d&2){x=0;xa(1032,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1033,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1034,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1035,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1036,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1037,a|0,c|0);i=x;x=0;if(i&1)break}if(d&4){x=0;xa(1038,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1039,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1040,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1041,a|0,c|0);i=x;x=0;if(i&1)break}if(d&32){x=0;xa(1042,a|0,c|0);i=x;x=0;if(i&1)break;x=0;xa(1043,a|0,c|0);i=x;x=0;if(i&1)break}return}while(0);c=Hc(0)|0;me(c|0)|0;c=0;while(1){a=k[e>>2]|0;if(c>>>0>=(k[b>>2]|0)-a>>2>>>0)break;d=k[a+(c<<2)>>2]|0;if(d)f0a(d)|0;c=c+1|0}x=0;hb(46);x=0;c=Hc()|0;b=M;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else{m=b;n=c}}K2a(f);j=m;l=n}Rvb(e);g=j;h=l}Sc(h|0)}function Rpb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;k[a+4>>2]=-1;k[a>>2]=74060;e=a+8|0;f=b+8|0;g=b+12|0;h=((k[g>>2]|0)-(k[f>>2]|0)>>2)+1|0;x=0;xa(966,e|0,(h>>>0>28?h:28)|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h}else{h=a+144|0;x=0;fb(140,h|0,329972,1);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l}else{e0a(c);if(!((a|0)!=(b|0)?(x=0,fb(427,e|0,k[f>>2]|0,k[g>>2]|0),b=x,x=0,b&1):0)){b=0;while(1){if(b>>>0>=(k[g>>2]|0)-(k[f>>2]|0)>>2>>>0)break;l=k[(k[e>>2]|0)+(b<<2)>>2]|0;if(l)e0a(l);b=b+1|0}x=0;fb(435,a|0,c|0,d|0);d=x;x=0;if(!(d&1)){if(c)f0a(c)|0;return}}d=Hc()|0;a=M;if(c)f0a(c)|0;K2a(h);m=a;n=d}Rvb(e);i=m;j=n}Sc(j|0)}function Spb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;e0a(b);d=a+8|0;e=k[d>>2]|0;do if((k[a+12>>2]|0)-e>>2>>>0>c>>>0){f=d;g=e}else{x=0;xa(1044,d|0,c+1|0);h=x;x=0;if(!(h&1)){f=d;g=k[d>>2]|0;break}h=Hc()|0;if(b)f0a(b)|0;Sc(h|0)}while(0);d=k[g+(c<<2)>>2]|0;if(!d)i=g;else{f0a(d)|0;i=k[f>>2]|0}k[i+(c<<2)>>2]=b;return}function Tpb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=74060;b=a+8|0;c=a+12|0;d=0;while(1){e=k[b>>2]|0;if(d>>>0>=(k[c>>2]|0)-e>>2>>>0)break;f=k[e+(d<<2)>>2]|0;if(f)f0a(f)|0;d=d+1|0}K2a(a+144|0);Rvb(b);return}function Upb(a){a=a|0;Tpb(a);OBa(a);return}function Vpb(a,b){a=a|0;b=b|0;if(Owb(a,b)|0)return k[(k[a+8>>2]|0)+(b<<2)>>2]|0;else{b=Rd(4)|0;CCa(b);Gf(b|0,9112,1201)}return 0}function Wpb(){Lpb(19576,1);k[18948]=19576;return 75792}function Xpb(){var a=0,b=0;a=Npb()|0;b=k[a>>2]|0;k[18950]=b;e0a(b);return 75800}function Ypb(){var a=0;do if((i[19736]|0)==0?(Bb(19736)|0)!=0:0){x=0;$a(54)|0;a=x;x=0;if(a&1){a=Hc()|0;Cd(19736);Sc(a|0)}else{k[18951]=75800;Kc(19736);break}}while(0);return k[18951]|0}function Zpb(a){a=a|0;var b=0,c=0;x=0;b=$a(55)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}else{c=k[b>>2]|0;k[a>>2]=c;e0a(c);return}}function _pb(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;k[a>>2]=c;e0a(c);return}function $pb(a){a=a|0;f0a(k[a>>2]|0)|0;return}function aqb(a,b){a=a|0;b=b|0;e0a(k[b>>2]|0);f0a(k[a>>2]|0)|0;k[a>>2]=k[b>>2];return a|0}function bqb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;do if(!b){e=Rd(8)|0;x=0;xa(616,e|0,329974);f=x;x=0;if(f&1){f=Hc()|0;g=M;Fc(e|0);h=g;i=f;break}else{x=0;fb(149,e|0,9040,1245);x=0;e=Hc()|0;h=M;i=e;break}}else{e=KBa(160)|0;f=RLa(b)|0;x=0;fb(140,d|0,b|0,f|0);f=x;x=0;do if(!(f&1)){x=0;fb(436,e|0,d|0,0);g=x;x=0;if(g&1){g=Hc()|0;j=M;K2a(d);l=j;m=g;break}else{K2a(d);k[a>>2]=e;e0a(e);r=c;return}}else{g=Hc()|0;l=M;m=g}while(0);OBa(e);h=l;i=m}while(0);Sc(i|0)}function cqb(a,b){a=a|0;b=b|0;var c=0;c=KBa(160)|0;x=0;fb(436,c|0,b|0,0);b=x;x=0;if(b&1){b=Hc()|0;OBa(c);Sc(b|0)}else{k[a>>2]=c;e0a(c);return}}function dqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;e=r;r=r+16|0;f=e;do if(!c){g=Rd(8)|0;x=0;xa(616,g|0,329974);h=x;x=0;if(h&1){h=Hc()|0;i=M;Fc(g|0);j=i;l=h;break}else{x=0;fb(149,g|0,9040,1245);x=0;g=Hc()|0;j=M;l=g;break}}else{g=KBa(160)|0;h=k[b>>2]|0;i=RLa(c)|0;x=0;fb(140,f|0,c|0,i|0);i=x;x=0;do if(!(i&1)){x=0;nb(178,g|0,h|0,f|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(f);o=n;p=m;break}else{K2a(f);k[a>>2]=g;e0a(g);r=e;return}}else{m=Hc()|0;o=M;p=m}while(0);OBa(g);j=o;l=p}while(0);Sc(l|0)}function eqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=KBa(160)|0;x=0;nb(178,e|0,k[b>>2]|0,c|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(e);Sc(d|0)}else{k[a>>2]=e;e0a(e);return}}function fqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=KBa(160)|0;x=0;nb(179,e|0,k[b>>2]|0,k[c>>2]|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(e);Sc(d|0)}else{k[a>>2]=e;e0a(e);return}}function gqb(a,b){a=a|0;b=b|0;n2a(a,(k[b>>2]|0)+144|0);return}function hqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;do if(c){e=KBa(160)|0;x=0;nb(180,e|0,k[b>>2]|0,c|0,d|0);f=x;x=0;if(f&1){f=Hc()|0;OBa(e);Sc(f|0)}else{k[a>>2]=e;g=e;break}}else{e=k[b>>2]|0;k[a>>2]=e;g=e}while(0);e0a(g);return}function iqb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+32|0;c=b+12|0;d=b;e=Ypb()|0;f=k[e>>2]|0;e0a(f);aqb(e,a)|0;x=0;xa(604,c|0,(k[e>>2]|0)+144|0);a=x;x=0;a:do if(a&1)g=6;else{h=(b5a(c,329972)|0)==0;K2a(c);do if(!h){x=0;xa(604,d|0,(k[e>>2]|0)+144|0);i=x;x=0;if(i&1){g=6;break a}x=0;i=x;x=0;if(i&1){i=Hc()|0;j=M;K2a(d);l=j;m=i;break a}else{K2a(d);break}}while(0);r=b;return f|0}while(0);if((g|0)==6){g=Hc()|0;l=M;m=g}f0a(f)|0;Sc(m|0);return 0}function jqb(a,b){a=a|0;b=b|0;var c=0;c=k[a>>2]|0;return Owb(c,kqb(b)|0)|0}function kqb(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;if((k[a>>2]|0)!=-1){k[c>>2]=a;k[c+4>>2]=1546;k[c+8>>2]=0;j2a(a,c,1547)}r=b;return (k[a+4>>2]|0)+-1|0}function lqb(a,b){a=a|0;b=b|0;var c=0;c=k[a>>2]|0;return Vpb(c,kqb(b)|0)|0}function mqb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=k[a>>2]|0;a:do if((c|0)!=(k[b>>2]|0))if((b5a(c+144|0,329972)|0)!=0?(d=k[a>>2]|0,e=d+144|0,f=k[b>>2]|0,g=f+144|0,h=i[e>>0]|0,j=(h&1)==0,l=(h&255)>>>1,h=j?l:k[d+148>>2]|0,m=i[g>>0]|0,n=(m&1)==0,(h|0)==((n?(m&255)>>>1:k[f+148>>2]|0)|0)):0){m=n?g+1|0:k[f+152>>2]|0;if(!j){o=(ZLa(k[d+152>>2]|0,m,h)|0)==0;break}h=l;l=e+1|0;e=m;while(1){if(!h){o=1;break a}if((i[l>>0]|0)!=(i[e>>0]|0)){o=0;break a}h=h+-1|0;l=l+1|0;e=e+1|0}}else o=0;else o=1;while(0);return o|0}function nqb(a){a=a|0;OBa(a);return}function oqb(a){a=a|0;if(a)Sf[k[(k[a>>2]|0)+4>>2]&2047](a);return}function pqb(a){a=a|0;var b=0;b=k[18518]|0;k[18518]=b+1;k[a+4>>2]=b+1;return}function qqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+32|0;e=d+12|0;f=d;k[a+4>>2]=c+-1;k[a>>2]=74084;x=0;c=Fa(172,2147483647,b|0,0)|0;g=x;x=0;a:do if(g&1){h=Hc()|0;i=M;j=h}else{k[a+8>>2]=c;if(c){r=d;return}h=Rd(8)|0;l=RLa(b)|0;x=0;fb(140,f|0,b|0,l|0);l=x;x=0;do if(!(l&1)){x=0;m=Fa(86,f|0,0,330003)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(f);p=o;q=n;break};k[e>>2]=k[m>>2];k[e+4>>2]=k[m+4>>2];k[e+8>>2]=k[m+8>>2];n=0;while(1){if((n|0)==3)break;k[m+(n<<2)>>2]=0;n=n+1|0}x=0;xa(623,h|0,e|0);n=x;x=0;if(n&1)s=1;else{x=0;fb(149,h|0,9040,1245);x=0;s=0}n=Hc()|0;m=M;K2a(e);K2a(f);if(s){p=m;q=n}else{i=m;j=n;break a}}else{n=Hc()|0;p=M;q=n}while(0);Fc(h|0);i=p;j=q}while(0);Sc(j|0)}function rqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d;k[a+4>>2]=c+-1;k[a>>2]=74084;x=0;c=Fa(172,2147483647,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,0)|0;f=x;x=0;do if(f&1){g=Hc()|0;h=M;j=g}else{k[a+8>>2]=c;if(c){r=d;return}g=Rd(8)|0;x=0;fb(423,e|0,330003,b|0);l=x;x=0;if(!(l&1)){x=0;xa(623,g|0,e|0);l=x;x=0;if(l&1)m=1;else{x=0;fb(149,g|0,9040,1245);x=0;m=0}l=Hc()|0;n=M;K2a(e);if(m){o=n;p=l}else{h=n;j=l;break}}else{l=Hc()|0;o=M;p=l}Fc(g|0);h=o;j=p}while(0);Sc(j|0)}function sqb(a){a=a|0;k[a>>2]=74084;x=0;va(1543,k[a+8>>2]|0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function tqb(a){a=a|0;sqb(a);OBa(a);return}function uqb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0;f=r;r=r+32|0;g=f+12|0;h=f;_8a(g,b,c);x=0;fb(437,h|0,d|0,e|0);e=x;x=0;do if(!(e&1)){x=0;d=Fa(176,((i[g>>0]&1)==0?g+1|0:k[g+8>>2]|0)|0,((i[h>>0]&1)==0?h+1|0:k[h+8>>2]|0)|0,k[a+8>>2]|0)|0;c=x;x=0;if(c&1){c=Hc()|0;b=M;K2a(h);j=b;l=c;break}else{K2a(h);K2a(g);r=f;return ((d|0)<0?-1:(d|0)<1?d:1)|0}}else{d=Hc()|0;j=M;l=d}while(0);K2a(g);Sc(l|0);return 0}function vqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+16|0;f=e;_8a(f,c,d);d=f+8|0;c=f+1|0;g=b+8|0;x=0;b=db(89,0,((i[f>>0]&1)==0?c:k[d>>2]|0)|0,0,k[g>>2]|0)|0;h=x;x=0;do if(!(h&1)?(x=0,fb(180,a|0,b|0,0),j=x,x=0,!(j&1)):0){j=i[a>>0]|0;if(!(j&1)){l=(j&255)>>>1;m=a+1|0;n=(i[f>>0]&1)==0?c:k[d>>2]|0}else{l=k[a+4>>2]|0;m=k[a+8>>2]|0;n=(i[f>>0]&1)==0?c:k[d>>2]|0}x=0;db(89,m|0,n|0,l+1|0,k[g>>2]|0)|0;j=x;x=0;if(j&1){j=Hc()|0;o=M;K2a(a);p=o;q=j;break}else{K2a(f);r=e;return}}else s=7;while(0);if((s|0)==7){s=Hc()|0;p=M;q=s}K2a(f);Sc(q|0)}function wqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+32|0;e=d+12|0;f=d;k[a+4>>2]=c+-1;k[a>>2]=74116;x=0;c=Fa(172,2147483647,b|0,0)|0;g=x;x=0;a:do if(g&1){h=Hc()|0;i=M;j=h}else{k[a+8>>2]=c;if(c){r=d;return}h=Rd(8)|0;l=RLa(b)|0;x=0;fb(140,f|0,b|0,l|0);l=x;x=0;do if(!(l&1)){x=0;m=Fa(86,f|0,0,330065)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(f);p=o;q=n;break};k[e>>2]=k[m>>2];k[e+4>>2]=k[m+4>>2];k[e+8>>2]=k[m+8>>2];n=0;while(1){if((n|0)==3)break;k[m+(n<<2)>>2]=0;n=n+1|0}x=0;xa(623,h|0,e|0);n=x;x=0;if(n&1)s=1;else{x=0;fb(149,h|0,9040,1245);x=0;s=0}n=Hc()|0;m=M;K2a(e);K2a(f);if(s){p=m;q=n}else{i=m;j=n;break a}}else{n=Hc()|0;p=M;q=n}while(0);Fc(h|0);i=p;j=q}while(0);Sc(j|0)}function xqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d;k[a+4>>2]=c+-1;k[a>>2]=74116;x=0;c=Fa(172,2147483647,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,0)|0;f=x;x=0;do if(f&1){g=Hc()|0;h=M;j=g}else{k[a+8>>2]=c;if(c){r=d;return}g=Rd(8)|0;x=0;fb(423,e|0,330065,b|0);l=x;x=0;if(!(l&1)){x=0;xa(623,g|0,e|0);l=x;x=0;if(l&1)m=1;else{x=0;fb(149,g|0,9040,1245);x=0;m=0}l=Hc()|0;n=M;K2a(e);if(m){o=n;p=l}else{h=n;j=l;break}}else{l=Hc()|0;o=M;p=l}Fc(g|0);h=o;j=p}while(0);Sc(j|0)}function yqb(a){a=a|0;k[a>>2]=74116;x=0;va(1543,k[a+8>>2]|0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function zqb(a){a=a|0;yqb(a);OBa(a);return}function Aqb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0;f=r;r=r+32|0;g=f+12|0;h=f;b9a(g,b,c);x=0;fb(438,h|0,d|0,e|0);e=x;x=0;do if(!(e&1)){x=0;d=Fa(177,((i[g>>0]&1)==0?g+4|0:k[g+8>>2]|0)|0,((i[h>>0]&1)==0?h+4|0:k[h+8>>2]|0)|0,k[a+8>>2]|0)|0;c=x;x=0;if(c&1){c=Hc()|0;b=M;O5a(h);j=b;l=c;break}else{O5a(h);O5a(g);r=f;return ((d|0)<0?-1:(d|0)<1?d:1)|0}}else{d=Hc()|0;j=M;l=d}while(0);O5a(g);Sc(l|0);return 0}function Bqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+16|0;f=e;b9a(f,c,d);d=f+8|0;c=f+4|0;g=b+8|0;x=0;b=db(90,0,((i[f>>0]&1)==0?c:k[d>>2]|0)|0,0,k[g>>2]|0)|0;h=x;x=0;do if(!(h&1)?(x=0,fb(439,a|0,b|0,0),j=x,x=0,!(j&1)):0){j=i[a>>0]|0;if(!(j&1)){l=(j&255)>>>1;m=a+4|0;n=(i[f>>0]&1)==0?c:k[d>>2]|0}else{l=k[a+4>>2]|0;m=k[a+8>>2]|0;n=(i[f>>0]&1)==0?c:k[d>>2]|0}x=0;db(90,m|0,n|0,l+1|0,k[g>>2]|0)|0;j=x;x=0;if(j&1){j=Hc()|0;o=M;O5a(a);p=o;q=j;break}else{O5a(f);r=e;return}}else s=7;while(0);if((s|0)==7){s=Hc()|0;p=M;q=s}O5a(f);Sc(q|0)}function Cqb(a){a=a|0;OBa(a);return}function Dqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c>>>0<128){a=(Eqb()|0)+(c<<1)|0;d=(j[a>>1]&b)<<16>>16!=0}else d=0;return d|0}function Eqb(){var a=0,b=0;x=0;a=$a(56)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else return k[a>>2]|0;return 0}function Fqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;a=(c-b|0)>>>2;e=d;d=b;while(1){if((d|0)==(c|0))break;f=k[d>>2]|0;if(f>>>0<128){g=(Eqb()|0)+(f<<1)|0;h=m[g>>1]|0}else h=0;j[e>>1]=h;e=e+2|0;d=d+4|0}return b+(a<<2)|0}function Gqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;a=c;while(1){if((a|0)==(d|0)){e=d;break}c=k[a>>2]|0;if(c>>>0<128?(f=(Eqb()|0)+(c<<1)|0,(j[f>>1]&b)<<16>>16!=0):0){e=a;break}a=a+4|0}return e|0}function Hqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;a=c;while(1){if((a|0)==(d|0)){e=d;break}c=k[a>>2]|0;if(c>>>0>=128){e=a;break}f=(Eqb()|0)+(c<<1)|0;if(!((j[f>>1]&b)<<16>>16)){e=a;break}a=a+4|0}return e|0}function Iqb(a,b){a=a|0;b=b|0;var c=0;if(b>>>0<128){a=(Jqb()|0)+(b<<2)|0;c=k[a>>2]|0}else c=b;return c|0}function Jqb(){var a=0,b=0;x=0;a=$a(57)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else return k[a>>2]|0;return 0}function Kqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a=(c-b|0)>>>2;d=b;while(1){if((d|0)==(c|0))break;e=k[d>>2]|0;if(e>>>0<128){f=(Jqb()|0)+(e<<2)|0;g=k[f>>2]|0}else g=e;k[d>>2]=g;d=d+4|0}return b+(a<<2)|0}function Lqb(a,b){a=a|0;b=b|0;var c=0;if(b>>>0<128){a=(Mqb()|0)+(b<<2)|0;c=k[a>>2]|0}else c=b;return c|0}function Mqb(){var a=0,b=0;x=0;a=$a(58)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}else return k[a>>2]|0;return 0}function Nqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a=(c-b|0)>>>2;d=b;while(1){if((d|0)==(c|0))break;e=k[d>>2]|0;if(e>>>0<128){f=(Mqb()|0)+(e<<2)|0;g=k[f>>2]|0}else g=e;k[d>>2]=g;d=d+4|0}return b+(a<<2)|0}function Oqb(a,b){a=a|0;b=b|0;return b<<24>>24|0}function Pqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=d;d=b;while(1){if((d|0)==(c|0))break;k[a>>2]=i[d>>0];a=a+4|0;d=d+1|0}return c|0}function Qqb(a,b,c){a=a|0;b=b|0;c=c|0;return (b>>>0<128?b&255:c)|0}function Rqb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a=(c-b|0)>>>2;f=e;e=b;while(1){if((e|0)==(c|0))break;g=k[e>>2]|0;i[f>>0]=g>>>0<128?g&255:d;f=f+1|0;e=e+4|0}return b+(a<<2)|0}function Sqb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a+4>>2]=d+-1;k[a>>2]=74164;d=a+8|0;k[d>>2]=b;i[a+12>>0]=c&1;if(!b){b=Eqb()|0;k[d>>2]=b}return}function Tqb(a){a=a|0;var b=0;k[a>>2]=74164;b=k[a+8>>2]|0;if((b|0)!=0?(i[a+12>>0]|0)!=0:0)QBa(b);return}function Uqb(a){a=a|0;Tqb(a);OBa(a);return}function Vqb(a,b){a=a|0;b=b|0;var c=0;if(b<<24>>24>-1){a=(Jqb()|0)+((b&255)<<2)|0;c=k[a>>2]&255}else c=b;return c|0}function Wqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=b;while(1){if((a|0)==(c|0))break;b=i[a>>0]|0;if(b<<24>>24>-1){d=(Jqb()|0)+(b<<24>>24<<2)|0;e=k[d>>2]&255}else e=b;i[a>>0]=e;a=a+1|0}return c|0}function Xqb(a,b){a=a|0;b=b|0;var c=0;if(b<<24>>24>-1){a=(Mqb()|0)+(b<<24>>24<<2)|0;c=k[a>>2]&255}else c=b;return c|0}function Yqb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=b;while(1){if((a|0)==(c|0))break;b=i[a>>0]|0;if(b<<24>>24>-1){d=(Mqb()|0)+(b<<24>>24<<2)|0;e=k[d>>2]&255}else e=b;i[a>>0]=e;a=a+1|0}return c|0}function Zqb(a,b){a=a|0;b=b|0;return b|0}function _qb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=d;d=b;while(1){if((d|0)==(c|0))break;i[a>>0]=i[d>>0]|0;a=a+1|0;d=d+1|0}return c|0}function $qb(a,b,c){a=a|0;b=b|0;c=c|0;return (b<<24>>24>-1?b:c)|0}function arb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=e;e=b;while(1){if((e|0)==(c|0))break;b=i[e>>0]|0;i[a>>0]=b<<24>>24>-1?b:d;a=a+1|0;e=e+1|0}return c|0}function brb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+32|0;e=d+12|0;f=d;Sqb(a,0,0,c);k[a>>2]=74216;x=0;c=Fa(172,2147483647,b|0,0)|0;g=x;x=0;a:do if(g&1){h=Hc()|0;i=M;j=h}else{k[a+16>>2]=c;if(c){r=d;return}h=Rd(8)|0;l=RLa(b)|0;x=0;fb(140,f|0,b|0,l|0);l=x;x=0;do if(!(l&1)){x=0;m=Fa(86,f|0,0,330143)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(f);p=o;q=n;break};k[e>>2]=k[m>>2];k[e+4>>2]=k[m+4>>2];k[e+8>>2]=k[m+8>>2];n=0;while(1){if((n|0)==3)break;k[m+(n<<2)>>2]=0;n=n+1|0}x=0;xa(623,h|0,e|0);n=x;x=0;if(n&1)s=1;else{x=0;fb(149,h|0,9040,1245);x=0;s=0}n=Hc()|0;m=M;K2a(e);K2a(f);if(s){p=m;q=n}else{i=m;j=n;break a}}else{n=Hc()|0;p=M;q=n}while(0);Fc(h|0);i=p;j=q}while(0);Tqb(a);Sc(j|0)}function crb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d;Sqb(a,0,0,c);k[a>>2]=74216;x=0;c=Fa(172,2147483647,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,0)|0;f=x;x=0;do if(f&1){g=Hc()|0;h=M;j=g}else{k[a+16>>2]=c;if(c){r=d;return}g=Rd(8)|0;x=0;fb(423,e|0,330143,b|0);l=x;x=0;if(!(l&1)){x=0;xa(623,g|0,e|0);l=x;x=0;if(l&1)m=1;else{x=0;fb(149,g|0,9040,1245);x=0;m=0}l=Hc()|0;n=M;K2a(e);if(m){o=n;p=l}else{h=n;j=l;break}}else{l=Hc()|0;o=M;p=l}Fc(g|0);h=o;j=p}while(0);Tqb(a);Sc(j|0)}function drb(a){a=a|0;Cub(a);OBa(a);return}function erb(a,b){a=a|0;b=b|0;return (CLa(b&255,k[a+16>>2]|0)|0)&255|0}function frb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=a+16|0;a=b;while(1){if((a|0)==(c|0))break;b=(CLa(l[a>>0]|0,k[d>>2]|0)|0)&255;i[a>>0]=b;a=a+1|0}return c|0}function grb(a,b){a=a|0;b=b|0;return (UKa(b&255,k[a+16>>2]|0)|0)&255|0}function hrb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=a+16|0;a=b;while(1){if((a|0)==(c|0))break;b=(UKa(l[a>>0]|0,k[d>>2]|0)|0)&255;i[a>>0]=b;a=a+1|0}return c|0}function irb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+32|0;e=d+12|0;f=d;k[a+4>>2]=c+-1;k[a>>2]=74268;x=0;c=Fa(172,2147483647,b|0,0)|0;g=x;x=0;a:do if(g&1){h=Hc()|0;i=M;j=h}else{k[a+8>>2]=c;if(c){r=d;return}h=Rd(8)|0;l=RLa(b)|0;x=0;fb(140,f|0,b|0,l|0);l=x;x=0;do if(!(l&1)){x=0;m=Fa(86,f|0,0,330201)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(f);p=o;q=n;break};k[e>>2]=k[m>>2];k[e+4>>2]=k[m+4>>2];k[e+8>>2]=k[m+8>>2];n=0;while(1){if((n|0)==3)break;k[m+(n<<2)>>2]=0;n=n+1|0}x=0;xa(623,h|0,e|0);n=x;x=0;if(n&1)s=1;else{x=0;fb(149,h|0,9040,1245);x=0;s=0}n=Hc()|0;m=M;K2a(e);K2a(f);if(s){p=m;q=n}else{i=m;j=n;break a}}else{n=Hc()|0;p=M;q=n}while(0);Fc(h|0);i=p;j=q}while(0);Sc(j|0)}function jrb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d;k[a+4>>2]=c+-1;k[a>>2]=74268;x=0;c=Fa(172,2147483647,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,0)|0;f=x;x=0;do if(f&1){g=Hc()|0;h=M;j=g}else{k[a+8>>2]=c;if(c){r=d;return}g=Rd(8)|0;x=0;fb(423,e|0,330201,b|0);l=x;x=0;if(!(l&1)){x=0;xa(623,g|0,e|0);l=x;x=0;if(l&1)m=1;else{x=0;fb(149,g|0,9040,1245);x=0;m=0}l=Hc()|0;n=M;K2a(e);if(m){o=n;p=l}else{h=n;j=l;break}}else{l=Hc()|0;o=M;p=l}Fc(g|0);h=o;j=p}while(0);Sc(j|0)}function krb(a){a=a|0;Dub(a);OBa(a);return}function lrb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=b&65535;if(!(d&8192))e=0;else e=(mLa(c,k[a+8>>2]|0)|0)!=0;if(!(d&16384))f=e;else f=e|(ILa(c,k[a+8>>2]|0)|0)!=0;if(!(d&2))g=f;else g=f|(YKa(c,k[a+8>>2]|0)|0)!=0;if(!(d&256))h=g;else h=g|(GLa(c,k[a+8>>2]|0)|0)!=0;if(!(d&512))i=h;else i=h|(DKa(c,k[a+8>>2]|0)|0)!=0;if(!(d&1024))j=i;else j=i|(GKa(c,k[a+8>>2]|0)|0)!=0;if(!(d&2048))l=j;else l=j|(IKa(c,k[a+8>>2]|0)|0)!=0;if(!(d&4))m=l;else m=l|(DLa(c,k[a+8>>2]|0)|0)!=0;if(!(d&4096))n=m;else n=m|(RKa(c,k[a+8>>2]|0)|0)!=0;if(!(d&1))o=n;else o=n|(tLa(c,k[a+8>>2]|0)|0)!=0;return o|0}function mrb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+8|0;a=(c-b|0)>>>2;f=b;g=d;while(1){if((f|0)==(c|0))break;d=k[f>>2]|0;if(d>>>0>=128){j[g>>1]=0;if(mLa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|8192;if(ILa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|16384;if(YKa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|2;if(GLa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|256;if(DKa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|512;if(GKa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|1024;if(IKa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|2048;if(DLa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|4;if(RKa(d,k[e>>2]|0)|0)j[g>>1]=m[g>>1]|0|4096}else{h=(Eqb()|0)+(d<<1)|0;j[g>>1]=j[h>>1]|0}f=f+4|0;g=g+2|0}return b+(a<<2)|0}function nrb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;e=a+8|0;a=b&65535;b=(a&8192|0)==0;f=(a&16384|0)==0;g=(a&2|0)==0;h=(a&256|0)==0;i=(a&512|0)==0;j=(a&1024|0)==0;l=(a&2048|0)==0;m=(a&4|0)==0;n=(a&4096|0)==0;o=(a&1|0)==0;a=c;while(1){if((a|0)==(d|0)){p=d;break}c=k[a>>2]|0;if(!b?(mLa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!f?(ILa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!g?(YKa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!h?(GLa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!i?(DKa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!j?(GKa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!l?(IKa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!m?(DLa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!n?(RKa(c,k[e>>2]|0)|0)!=0:0){p=a;break}if(!o?(tLa(c,k[e>>2]|0)|0)!=0:0){p=a;break}a=a+4|0}return p|0}function orb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=a+8|0;a=b&65535;b=(a&8192|0)==0;f=(a&16384|0)==0;g=(a&2|0)==0;h=(a&256|0)==0;i=(a&512|0)==0;j=(a&1024|0)==0;l=(a&2048|0)==0;m=(a&4|0)==0;n=(a&4096|0)==0;o=(a&1|0)==0;a=c;a:while(1){if((a|0)==(d|0)){p=d;break}c=k[a>>2]|0;if(!(!b?(mLa(c,k[e>>2]|0)|0)!=0:0))q=5;do if((q|0)==5){q=0;if(!f?(ILa(c,k[e>>2]|0)|0)!=0:0)break;if(!g?(YKa(c,k[e>>2]|0)|0)!=0:0)break;if(!h?(GLa(c,k[e>>2]|0)|0)!=0:0)break;if(!i?(DKa(c,k[e>>2]|0)|0)!=0:0)break;if(!j?(GKa(c,k[e>>2]|0)|0)!=0:0)break;if(!l?(IKa(c,k[e>>2]|0)|0)!=0:0)break;if(!m?(DLa(c,k[e>>2]|0)|0)!=0:0)break;if(!n?(RKa(c,k[e>>2]|0)|0)!=0:0)break;if(o){p=a;break a}if(!(tLa(c,k[e>>2]|0)|0)){p=a;break a}}while(0);a=a+4|0}return p|0}function prb(a,b){a=a|0;b=b|0;return ALa(b,k[a+8>>2]|0)|0}function qrb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=a+8|0;a=(c-b|0)>>>2;e=b;while(1){if((e|0)==(c|0))break;f=ALa(k[e>>2]|0,k[d>>2]|0)|0;k[e>>2]=f;e=e+4|0}return b+(a<<2)|0}function rrb(a,b){a=a|0;b=b|0;return WKa(b,k[a+8>>2]|0)|0}function srb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=a+8|0;a=(c-b|0)>>>2;e=b;while(1){if((e|0)==(c|0))break;f=WKa(k[e>>2]|0,k[d>>2]|0)|0;k[e>>2]=f;e=e+4|0}return b+(a<<2)|0}function trb(a,b){a=a|0;b=b|0;var c=0,d=0;c=ZKa(k[a+8>>2]|0)|0;x=0;a=Ba(636,b<<24>>24|0)|0;b=x;x=0;if(b&1){b=Hc()|0;if((c|0)!=0?(x=0,Ba(635,c|0)|0,d=x,x=0,d&1):0){d=Hc(0)|0;Fg(d)}Sc(b|0)}else{if((c|0)!=0?(x=0,Ba(635,c|0)|0,c=x,x=0,c&1):0){c=Hc(0)|0;Fg(c)}return a|0}return 0}function urb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=a+8|0;a=d;d=b;while(1){if((d|0)==(c|0)){f=12;break}b=i[d>>0]|0;g=ZKa(k[e>>2]|0)|0;x=0;h=Ba(636,b|0)|0;b=x;x=0;if(b&1){j=g;f=7;break}if((g|0)!=0?(x=0,Ba(635,g|0)|0,g=x,x=0,g&1):0){f=6;break}k[a>>2]=h;a=a+4|0;d=d+1|0}if((f|0)==6){d=Hc(0)|0;Fg(d)}else if((f|0)==7){d=Hc()|0;if((j|0)!=0?(x=0,Ba(635,j|0)|0,j=x,x=0,j&1):0){j=Hc(0)|0;Fg(j)}Sc(d|0)}else if((f|0)==12)return c|0;return 0}function vrb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ZKa(k[a+8>>2]|0)|0;x=0;a=Ba(637,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;if((d|0)!=0?(x=0,Ba(635,d|0)|0,e=x,x=0,e&1):0){e=Hc(0)|0;Fg(e)}Sc(b|0)}else{if((d|0)!=0?(x=0,Ba(635,d|0)|0,d=x,x=0,d&1):0){d=Hc(0)|0;Fg(d)}return ((a|0)!=-1?a&255:c)|0}return 0}function wrb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0;f=a+8|0;a=b;b=e;while(1){if((a|0)==(c|0)){g=12;break}e=k[a>>2]|0;h=ZKa(k[f>>2]|0)|0;x=0;j=Ba(637,e|0)|0;e=x;x=0;if(e&1){l=h;g=7;break}if((h|0)!=0?(x=0,Ba(635,h|0)|0,h=x,x=0,h&1):0){g=6;break}i[b>>0]=(j|0)!=-1?j&255:d;a=a+4|0;b=b+1|0}if((g|0)==6){b=Hc(0)|0;Fg(b)}else if((g|0)==7){b=Hc()|0;if((l|0)!=0?(x=0,Ba(635,l|0)|0,l=x,x=0,l&1):0){l=Hc(0)|0;Fg(l)}Sc(b|0)}else if((g|0)==12)return c|0;return 0}function xrb(a){a=a|0;OBa(a);return}function yrb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;k[e>>2]=c;k[h>>2]=f;return 3}function zrb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;k[e>>2]=c;k[h>>2]=f;return 3}function Arb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function Brb(a){a=a|0;return 1}function Crb(a){a=a|0;return 1}function Drb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;b=d-c|0;return (b>>>0>>0?b:e)|0}function Erb(a){a=a|0;return 1}function Frb(a,b){a=a|0;b=b|0;var c=0;k[a+4>>2]=b+-1;k[a>>2]=74352;x=0;b=$a(51)|0;c=x;x=0;if(c&1){c=Hc()|0;Sc(c|0)}else{k[a+8>>2]=b;return}}function Grb(a){a=a|0;Eub(a);OBa(a);return}function Hrb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;j=r;r=r+16|0;l=j;m=j+8|0;n=c;while(1){if((n|0)==(d|0)){o=d;break}if(!(k[n>>2]|0)){o=n;break}n=n+4|0}k[h>>2]=f;k[e>>2]=c;n=g;p=a+8|0;a=c;c=f;f=o;a:while(1){if((c|0)==(g|0)|(a|0)==(d|0)){q=a;s=53;break}o=b;t=k[o+4>>2]|0;u=l;k[u>>2]=k[o>>2];k[u+4>>2]=t;t=ZKa(k[p>>2]|0)|0;x=0;u=Va(99,c|0,e|0,f-a>>2|0,n-c|0,b|0)|0;o=x;x=0;if(o&1){v=t;s=11;break}if((t|0)!=0?(x=0,Ba(635,t|0)|0,t=x,x=0,t&1):0){s=10;break}switch(u|0){case -1:{w=a;y=c;s=16;break a;break}case 0:{z=1;s=50;break a;break}default:{}}t=(k[h>>2]|0)+u|0;k[h>>2]=t;if((t|0)==(g|0)){s=51;break}if((f|0)==(d|0)){A=t;B=k[e>>2]|0;C=d}else{t=ZKa(k[p>>2]|0)|0;x=0;u=Fa(178,m|0,0,b|0)|0;o=x;x=0;if(o&1){D=t;s=36;break}if((t|0)!=0?(x=0,Ba(635,t|0)|0,t=x,x=0,t&1):0){s=35;break}if((u|0)==-1){E=2;s=49;break}if(u>>>0>(n-(k[h>>2]|0)|0)>>>0){E=1;s=49;break}else{F=u;G=m}while(1){if(!F)break;u=i[G>>0]|0;t=k[h>>2]|0;k[h>>2]=t+1;i[t>>0]=u;F=F+-1|0;G=G+1|0}u=(k[e>>2]|0)+4|0;k[e>>2]=u;t=u;while(1){if((t|0)==(d|0)){H=d;break}if(!(k[t>>2]|0)){H=t;break}t=t+4|0}A=k[h>>2]|0;B=u;C=H}a=B;c=A;f=C}do if((s|0)==10){C=Hc(0)|0;Fg(C)}else if((s|0)==11){C=Hc()|0;if((v|0)!=0?(x=0,Ba(635,v|0)|0,f=x,x=0,f&1):0){f=Hc(0)|0;Fg(f)}Sc(C|0)}else if((s|0)==16){k[h>>2]=y;C=w;f=y;while(1){if((C|0)==(k[e>>2]|0)){I=C;s=28;break}A=k[C>>2]|0;c=ZKa(k[p>>2]|0)|0;x=0;B=Fa(178,f|0,A|0,l|0)|0;A=x;x=0;if(A&1){J=c;s=22;break}if((c|0)!=0?(x=0,Ba(635,c|0)|0,c=x,x=0,c&1):0){s=21;break}if((B|0)==-1){I=C;s=28;break}c=(k[h>>2]|0)+B|0;k[h>>2]=c;C=C+4|0;f=c}if((s|0)==21){f=Hc(0)|0;Fg(f)}else if((s|0)==22){f=Hc()|0;if((J|0)!=0?(x=0,Ba(635,J|0)|0,C=x,x=0,C&1):0){C=Hc(0)|0;Fg(C)}Sc(f|0)}else if((s|0)==28){k[e>>2]=I;z=2;s=50;break}}else if((s|0)==35){f=Hc(0)|0;Fg(f)}else if((s|0)==36){f=Hc()|0;if((D|0)!=0?(x=0,Ba(635,D|0)|0,C=x,x=0,C&1):0){C=Hc(0)|0;Fg(C)}Sc(f|0)}else if((s|0)==49){z=E;s=50}else if((s|0)==51){q=k[e>>2]|0;s=53}while(0);if((s|0)==50)K=z;else if((s|0)==53)K=(q|0)!=(d|0)&1;r=j;return K|0}function Irb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;j=r;r=r+16|0;l=j;m=c;while(1){if((m|0)==(d|0)){n=d;break}if(!(i[m>>0]|0)){n=m;break}m=m+1|0}k[h>>2]=f;k[e>>2]=c;m=g;o=a+8|0;a=c;c=f;f=n;a:while(1){if((c|0)==(g|0)|(a|0)==(d|0)){p=a;q=52;break}n=b;s=k[n+4>>2]|0;t=l;k[t>>2]=k[n>>2];k[t+4>>2]=s;s=f;t=ZKa(k[o>>2]|0)|0;x=0;n=Va(100,c|0,e|0,s-a|0,m-c>>2|0,b|0)|0;u=x;x=0;if(u&1){v=t;q=11;break}if((t|0)!=0?(x=0,Ba(635,t|0)|0,t=x,x=0,t&1):0){q=10;break}switch(n|0){case -1:{w=a;y=c;z=s;q=16;break a;break}case 0:{A=2;q=48;break a;break}default:{}}s=(k[h>>2]|0)+(n<<2)|0;k[h>>2]=s;if((s|0)==(g|0)){q=49;break}n=k[e>>2]|0;if((f|0)==(d|0)){B=n;C=s;D=d}else{t=ZKa(k[o>>2]|0)|0;x=0;u=db(91,s|0,n|0,1,b|0)|0;n=x;x=0;if(n&1){E=t;q=39;break}if((t|0)!=0?(x=0,Ba(635,t|0)|0,t=x,x=0,t&1):0){q=38;break}if(u){A=2;q=48;break}k[h>>2]=(k[h>>2]|0)+4;u=(k[e>>2]|0)+1|0;k[e>>2]=u;t=u;while(1){if((t|0)==(d|0)){F=d;break}if(!(i[t>>0]|0)){F=t;break}t=t+1|0}B=u;C=k[h>>2]|0;D=F}a=B;c=C;f=D}do if((q|0)==10){D=Hc(0)|0;Fg(D)}else if((q|0)==11){D=Hc()|0;if((v|0)!=0?(x=0,Ba(635,v|0)|0,f=x,x=0,f&1):0){f=Hc(0)|0;Fg(f)}Sc(D|0)}else if((q|0)==16){D=w;f=y;b:while(1){k[h>>2]=f;if((D|0)==(k[e>>2]|0)){G=D;q=32;break}C=ZKa(k[o>>2]|0)|0;x=0;c=db(91,f|0,D|0,z-D|0,l|0)|0;B=x;x=0;if(B&1){H=C;q=22;break}if((C|0)!=0?(x=0,Ba(635,C|0)|0,C=x,x=0,C&1):0){q=21;break}switch(c|0){case -1:{I=D;q=28;break b;break}case -2:{J=D;q=29;break b;break}case 0:{K=D+1|0;break}default:K=D+c|0}D=K;f=(k[h>>2]|0)+4|0}if((q|0)==21){f=Hc(0)|0;Fg(f)}else if((q|0)==22){f=Hc()|0;if((H|0)!=0?(x=0,Ba(635,H|0)|0,D=x,x=0,D&1):0){D=Hc(0)|0;Fg(D)}Sc(f|0)}else if((q|0)==28){k[e>>2]=I;A=2;q=48;break}else if((q|0)==29){k[e>>2]=J;A=1;q=48;break}else if((q|0)==32){k[e>>2]=G;A=(G|0)!=(d|0)&1;q=48;break}}else if((q|0)==38){f=Hc(0)|0;Fg(f)}else if((q|0)==39){f=Hc()|0;if((E|0)!=0?(x=0,Ba(635,E|0)|0,D=x,x=0,D&1):0){D=Hc(0)|0;Fg(D)}Sc(f|0)}else if((q|0)==49){p=k[e>>2]|0;q=52}while(0);if((q|0)==48)L=A;else if((q|0)==52)L=(p|0)!=(d|0)&1;r=j;return L|0}function Jrb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0;f=r;r=r+16|0;g=f;k[e>>2]=c;c=ZKa(k[a+8>>2]|0)|0;x=0;a=Fa(178,g|0,0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;if((c|0)!=0?(x=0,Ba(635,c|0)|0,h=x,x=0,h&1):0){h=Hc(0)|0;Fg(h)}Sc(b|0)}if((c|0)!=0?(x=0,Ba(635,c|0)|0,c=x,x=0,c&1):0){c=Hc(0)|0;Fg(c)}a:do switch(a|0){case 0:case -1:{j=2;break}default:{c=a+-1|0;if(c>>>0>(d-(k[e>>2]|0)|0)>>>0)j=1;else{b=c;c=g;while(1){if(!b){j=0;break a}h=i[c>>0]|0;l=k[e>>2]|0;k[e>>2]=l+1;i[l>>0]=h;b=b+-1|0;c=c+1|0}}}}while(0);r=f;return j|0}function Krb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+8|0;x=0;a=Ba(635,k[b>>2]|0)|0;c=x;x=0;do if(c&1)d=16;else{x=0;e=Fa(179,0,0,4)|0;f=x;x=0;if(f&1){f=Hc(0)|0;if(!a){g=f;break}x=0;Ba(635,a|0)|0;h=x;x=0;if(!(h&1)){g=f;break}f=Hc(0)|0;Fg(f)}if((a|0)!=0?(x=0,Ba(635,a|0)|0,f=x,x=0,f&1):0){f=Hc(0)|0;Fg(f)}if(!e){e=k[b>>2]|0;if(e){x=0;f=Ba(635,e|0)|0;e=x;x=0;if(e&1){d=16;break}if((f|0)!=0?(x=0,Ba(635,f|0)|0,f=x,x=0,f&1):0){f=Hc(0)|0;Fg(f)}else i=0}else i=1}else i=-1;return i|0}while(0);if((d|0)==16){d=Hc(0)|0;g=d}Fg(g);return 0}function Lrb(a){a=a|0;return 0}function Mrb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;f=d;g=a+8|0;a=c;c=0;h=0;a:while(1){if((a|0)==(d|0)|h>>>0>=e>>>0){i=c;j=15;break}l=ZKa(k[g>>2]|0)|0;x=0;m=Fa(180,a|0,f-a|0,b|0)|0;n=x;x=0;if(n&1){o=l;j=7;break}if((l|0)!=0?(x=0,Ba(635,l|0)|0,l=x,x=0,l&1):0){j=6;break}switch(m|0){case -2:case -1:{i=c;j=15;break a;break}case 0:{p=a+1|0;q=1;break}default:{p=a+m|0;q=m}}a=p;c=q+c|0;h=h+1|0}if((j|0)==6){h=Hc(0)|0;Fg(h)}else if((j|0)==7){h=Hc()|0;if((o|0)!=0?(x=0,Ba(635,o|0)|0,o=x,x=0,o&1):0){o=Hc(0)|0;Fg(o)}Sc(h|0)}else if((j|0)==15)return i|0;return 0}function Nrb(a){a=a|0;var b=0,c=0;b=k[a+8>>2]|0;if(b){x=0;a=Ba(635,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if((a|0)!=0?(x=0,Ba(635,a|0)|0,a=x,x=0,a&1):0){a=Hc(0)|0;Fg(a)}else c=4}else c=1;return c|0}function Orb(a){a=a|0;OBa(a);return}function Prb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;b=r;r=r+16|0;a=b+4|0;i=b;k[a>>2]=c;k[i>>2]=f;j=Qwb(c,d,a,f,g,i,1114111,0)|0;k[e>>2]=k[a>>2];k[h>>2]=k[i>>2];r=b;return j|0}function Qrb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;b=r;r=r+16|0;a=b+4|0;i=b;k[a>>2]=c;k[i>>2]=f;j=Rwb(c,d,a,f,g,i,1114111,0)|0;k[e>>2]=k[a>>2];k[h>>2]=k[i>>2];r=b;return j|0}function Rrb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function Srb(a){a=a|0;return 0}function Trb(a){a=a|0;return 0}function Urb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Swb(c,d,e,1114111,0)|0}function Vrb(a){a=a|0;return 4}function Wrb(a){a=a|0;OBa(a);return}function Xrb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;b=r;r=r+16|0;a=b+4|0;i=b;k[a>>2]=c;k[i>>2]=f;j=Twb(c,d,a,f,g,i,1114111,0)|0;k[e>>2]=k[a>>2];k[h>>2]=k[i>>2];r=b;return j|0}function Yrb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;b=r;r=r+16|0;a=b+4|0;i=b;k[a>>2]=c;k[i>>2]=f;j=Uwb(c,d,a,f,g,i,1114111,0)|0;k[e>>2]=k[a>>2];k[h>>2]=k[i>>2];r=b;return j|0}function Zrb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function _rb(a){a=a|0;return 0}function $rb(a){a=a|0;return 0}function asb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Vwb(c,d,e,1114111,0)|0}function bsb(a){a=a|0;return 4}function csb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Twb(c,d,i,f,g,j,k[a+12>>2]|0,k[a+16>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function dsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Uwb(c,d,i,f,g,j,k[a+12>>2]|0,k[a+16>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function esb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function fsb(a){a=a|0;return 0}function gsb(a){a=a|0;return 0}function hsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Vwb(c,d,e,k[a+12>>2]|0,k[a+16>>2]|0)|0}function isb(a){a=a|0;return ((k[a+16>>2]&4|0)==0?4:7)|0}function jsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;b=k[a+8>>2]|0;l=c;m=f;n=g;if(k[a+12>>2]&2)if((n-m|0)<3){o=1;p=l;q=m}else{i[f>>0]=-17;i[f+1>>0]=-69;i[f+2>>0]=-65;r=c;s=f+3|0;t=l;u=4}else{r=c;s=m;t=l;u=4}a:do if((u|0)==4)while(1){u=0;if(r>>>0>=d>>>0){o=0;p=t;q=s;break a}l=j[r>>1]|0;m=l&65535;if(m>>>0>b>>>0|(m&63488|0)==55296){o=2;p=t;q=s;break a}do if((l&65535)>=128){c=s;f=n-s|0;if((l&65535)<2048){if((f|0)<2){o=1;p=t;q=s;break a}i[c>>0]=m>>>6|192;i[c+1>>0]=m&63|128;v=c+2|0;break}else{if((f|0)<3){o=1;p=t;q=s;break a}i[c>>0]=m>>>12|224;i[c+1>>0]=m>>>6&63|128;i[c+2>>0]=m&63|128;v=c+3|0;break}}else{c=s;if((n-s|0)<1){o=1;p=t;q=s;break a}i[c>>0]=l;v=c+1|0}while(0);l=t+2|0;r=l;s=v;t=l;u=4}while(0);k[e>>2]=p;k[h>>2]=q;return o|0}function ksb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;b=k[a+8>>2]|0;m=c;n=d;if(((((n-m|0)>2?(k[a+12>>2]&4|0)!=0:0)?(i[c>>0]|0)==-17:0)?(i[c+1>>0]|0)==-69:0)?(i[c+2>>0]|0)==-65:0){o=f;p=c+3|0}else{o=f;p=m}a:while(1){m=p;f=m>>>0>>0;if(!(f&o>>>0>>0)){q=o;r=p;s=f;t=26;break}f=i[m>>0]|0;c=f&255;do if(f<<24>>24>-1){if(c>>>0>b>>>0){u=2;v=o;w=p;break a}j[o>>1]=f&255;x=m+1|0}else{if((f&255)<194){u=2;v=o;w=p;break a}if((f&255)<224){if((n-p|0)<2){u=1;v=o;w=p;break a}a=l[m+1>>0]|0;if((a&192|0)!=128){u=2;v=o;w=p;break a}y=a&63|c<<6&1984;if(y>>>0>b>>>0){u=2;v=o;w=p;break a}j[o>>1]=y;x=m+2|0;break}if((f&255)>=240){u=2;v=o;w=p;break a}if((n-p|0)<3){u=1;v=o;w=p;break a}y=i[m+1>>0]|0;a=i[m+2>>0]|0;switch(c|0){case 224:{if((y&-32)<<24>>24!=-96){u=2;v=o;w=p;break a}break}case 237:{if((y&-32)<<24>>24!=-128){u=2;v=o;w=p;break a}break}default:if((y&-64)<<24>>24!=-128){u=2;v=o;w=p;break a}}z=a&255;if((z&192|0)!=128){u=2;v=o;w=p;break a}a=(y&255)<<6&4032|c<<12|z&63;if((a&65535)>>>0>b>>>0){u=2;v=o;w=p;break a}j[o>>1]=a;x=m+3|0}while(0);o=o+2|0;p=x}if((t|0)==26){u=s&1;v=q;w=r}k[e>>2]=w;k[h>>2]=v;return u|0}function lsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function msb(a){a=a|0;return 0}function nsb(a){a=a|0;return 0}function osb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;b=k[a+8>>2]|0;f=d;if((((k[a+12>>2]&4|0)!=0?(f-c|0)>2:0)?(i[c>>0]|0)==-17:0)?(i[c+1>>0]|0)==-69:0){g=(i[c+2>>0]|0)==-65?c+3|0:c;h=0}else{g=c;h=0}a:while(1){if(!(h>>>0>>0&g>>>0>>0)){j=g;m=28;break}a=i[g>>0]|0;n=a&255;do if(a<<24>>24<=-1){if((a&255)<194){j=g;m=28;break a}if((a&255)<224){if((f-g|0)<2){j=g;m=28;break a}o=l[g+1>>0]|0;if((o&192|0)!=128){j=g;m=28;break a}if((o&63|n<<6&1984)>>>0>b>>>0){j=g;m=28;break a}p=g+2|0;break}if((a&255)>=240){j=g;m=28;break a}o=g;if((f-o|0)<3){j=g;m=28;break a}q=i[g+1>>0]|0;r=i[g+2>>0]|0;switch(n|0){case 224:{if((q&-32)<<24>>24!=-96){s=o;m=20;break a}break}case 237:{if((q&-32)<<24>>24!=-128){t=o;m=22;break a}break}default:if((q&-64)<<24>>24!=-128){u=o;m=24;break a}}o=r&255;if((o&192|0)!=128){j=g;m=28;break a}if(((q&255)<<6&4032|n<<12&61440|o&63)>>>0>b>>>0){j=g;m=28;break a}else p=g+3|0}else{if(n>>>0>b>>>0){j=g;m=28;break a}p=g+1|0}while(0);g=p;h=h+1|0}if((m|0)==20)v=s-c|0;else if((m|0)==22)v=t-c|0;else if((m|0)==24)v=u-c|0;else if((m|0)==28)v=j-c|0;return v|0}function psb(a){a=a|0;return ((k[a+12>>2]&4|0)==0?3:6)|0}function qsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Twb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function rsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Uwb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function ssb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function tsb(a){a=a|0;return 0}function usb(a){a=a|0;return 0}function vsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Vwb(c,d,e,k[a+8>>2]|0,k[a+12>>2]|0)|0}function wsb(a){a=a|0;return ((k[a+12>>2]&4|0)==0?4:7)|0}function xsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Wwb(c,d,i,f,g,j,k[a+12>>2]|0,k[a+16>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function ysb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Xwb(c,d,i,f,g,j,k[a+12>>2]|0,k[a+16>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function zsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function Asb(a){a=a|0;return 0}function Bsb(a){a=a|0;return 0}function Csb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ywb(c,d,e,k[a+12>>2]|0,k[a+16>>2]|0)|0}function Dsb(a){a=a|0;return (k[a+16>>2]|0)>>>1&2|4|0}function Esb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Zwb(c,d,i,f,g,j,k[a+12>>2]|0,k[a+16>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function Fsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=_wb(c,d,i,f,g,j,k[a+12>>2]|0,k[a+16>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function Gsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function Hsb(a){a=a|0;return 0}function Isb(a){a=a|0;return 0}function Jsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return $wb(c,d,e,k[a+12>>2]|0,k[a+16>>2]|0)|0}function Ksb(a){a=a|0;return (k[a+16>>2]|0)>>>1&2|4|0}function Lsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=k[a+8>>2]|0;l=c;m=f;n=g;if(k[a+12>>2]&2)if((n-m|0)<2){o=1;p=l;q=m}else{i[f>>0]=-2;i[f+1>>0]=-1;r=c;s=f+2|0;t=l;u=4}else{r=c;s=m;t=l;u=4}a:do if((u|0)==4)while(1){u=0;if(r>>>0>=d>>>0){o=0;p=t;q=s;break a}l=j[r>>1]|0;m=l&65535;if(m>>>0>b>>>0|(m&63488|0)==55296){o=2;p=t;q=s;break a}m=s;if((n-s|0)<2){o=1;p=t;q=s;break a}i[m>>0]=(l&65535)>>>8;i[m+1>>0]=l;l=t+2|0;r=l;s=m+2|0;t=l;u=4}while(0);k[e>>2]=p;k[h>>2]=q;return o|0}function Msb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;b=k[a+8>>2]|0;m=c;if((((k[a+12>>2]&4|0)!=0?(d-m|0)>1:0)?(i[c>>0]|0)==-2:0)?(i[c+1>>0]|0)==-1:0)n=c+2|0;else n=m;m=d+-1|0;c=f;f=n;while(1){n=f;if(!(n>>>0>>0&c>>>0>>0)){o=c;p=f;q=n;r=10;break}a=l[n>>0]<<8;s=a|l[n+1>>0];if((a&63488|0)==55296|s>>>0>b>>>0){t=2;u=c;v=f;break}j[c>>1]=s;c=c+2|0;f=n+2|0}if((r|0)==10){t=q>>>0>>0&1;u=o;v=p}k[e>>2]=v;k[h>>2]=u;return t|0}function Nsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function Osb(a){a=a|0;return 0}function Psb(a){a=a|0;return 0}function Qsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;b=k[a+8>>2]|0;if(((k[a+12>>2]&4|0)!=0?(d-c|0)>1:0)?(i[c>>0]|0)==-2:0)f=(i[c+1>>0]|0)==-1?c+2|0:c;else f=c;a=d+-1|0;d=f;f=0;while(1){if(!(f>>>0>>0&d>>>0>>0)){g=d;break}h=l[d>>0]<<8;if((h&63488|0)==55296){g=d;break}if((l[d+1>>0]|h)>>>0>b>>>0){g=d;break}else{d=d+2|0;f=f+1|0}}return g-c|0}function Rsb(a){a=a|0;return ((k[a+12>>2]|0)>>>1&2)+2|0}function Ssb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=k[a+8>>2]|0;l=c;m=f;n=g;if(k[a+12>>2]&2)if((n-m|0)<2){o=1;p=l;q=m}else{i[f>>0]=-1;i[f+1>>0]=-2;r=c;s=f+2|0;t=l;u=4}else{r=c;s=m;t=l;u=4}a:do if((u|0)==4)while(1){u=0;if(r>>>0>=d>>>0){o=0;p=t;q=s;break a}l=j[r>>1]|0;m=l&65535;if(m>>>0>b>>>0|(m&63488|0)==55296){o=2;p=t;q=s;break a}m=s;if((n-s|0)<2){o=1;p=t;q=s;break a}i[m>>0]=l;i[m+1>>0]=(l&65535)>>>8;l=t+2|0;r=l;s=m+2|0;t=l;u=4}while(0);k[e>>2]=p;k[h>>2]=q;return o|0}function Tsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;b=k[a+8>>2]|0;m=c;if((((k[a+12>>2]&4|0)!=0?(d-m|0)>1:0)?(i[c>>0]|0)==-1:0)?(i[c+1>>0]|0)==-2:0)n=c+2|0;else n=m;m=d+-1|0;c=f;f=n;while(1){n=f;if(!(n>>>0>>0&c>>>0>>0)){o=c;p=f;q=n;r=10;break}a=l[n+1>>0]<<8;s=a|l[n>>0];if((a&63488|0)==55296|s>>>0>b>>>0){t=2;u=c;v=f;break}j[c>>1]=s;c=c+2|0;f=n+2|0}if((r|0)==10){t=q>>>0>>0&1;u=o;v=p}k[e>>2]=v;k[h>>2]=u;return t|0}function Usb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function Vsb(a){a=a|0;return 0}function Wsb(a){a=a|0;return 0}function Xsb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;b=k[a+8>>2]|0;if(((k[a+12>>2]&4|0)!=0?(d-c|0)>1:0)?(i[c>>0]|0)==-1:0)f=(i[c+1>>0]|0)==-2?c+2|0:c;else f=c;a=d+-1|0;d=f;f=0;while(1){if(!(f>>>0>>0&d>>>0>>0)){g=d;break}h=l[d+1>>0]<<8;if((h&63488|0)==55296){g=d;break}if((l[d>>0]|h)>>>0>b>>>0){g=d;break}else{d=d+2|0;f=f+1|0}}return g-c|0}function Ysb(a){a=a|0;return ((k[a+12>>2]|0)>>>1&2)+2|0}function Zsb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Wwb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function _sb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Xwb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function $sb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function atb(a){a=a|0;return 0}function btb(a){a=a|0;return 0}function ctb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ywb(c,d,e,k[a+8>>2]|0,k[a+12>>2]|0)|0}function dtb(a){a=a|0;return (k[a+12>>2]|0)>>>1&2|4|0}function etb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Zwb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function ftb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=_wb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function gtb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function htb(a){a=a|0;return 0}function itb(a){a=a|0;return 0}function jtb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return $wb(c,d,e,k[a+8>>2]|0,k[a+12>>2]|0)|0}function ktb(a){a=a|0;return (k[a+12>>2]|0)>>>1&2|4|0}function ltb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=axb(c,d,i,f,g,j,k[a+12>>2]|0,k[a+16>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function mtb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=bxb(c,d,i,f,g,j,k[a+12>>2]|0,k[a+16>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function ntb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function otb(a){a=a|0;return 0}function ptb(a){a=a|0;return 0}function qtb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Swb(c,d,e,k[a+12>>2]|0,k[a+16>>2]|0)|0}function rtb(a){a=a|0;return ((k[a+16>>2]&4|0)==0?4:7)|0}function stb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Qwb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function ttb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=Rwb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function utb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function vtb(a){a=a|0;return 0}function wtb(a){a=a|0;return 0}function xtb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Swb(c,d,e,k[a+8>>2]|0,k[a+12>>2]|0)|0}function ytb(a){a=a|0;return ((k[a+12>>2]&4|0)==0?4:7)|0}function ztb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=axb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function Atb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0;b=r;r=r+16|0;i=b+4|0;j=b;k[i>>2]=c;k[j>>2]=f;l=bxb(c,d,i,f,g,j,k[a+8>>2]|0,k[a+12>>2]|0)|0;k[e>>2]=k[i>>2];k[h>>2]=k[j>>2];r=b;return l|0}function Btb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function Ctb(a){a=a|0;return 0}function Dtb(a){a=a|0;return 0}function Etb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Swb(c,d,e,k[a+8>>2]|0,k[a+12>>2]|0)|0}function Ftb(a){a=a|0;return ((k[a+12>>2]&4|0)==0?4:7)|0}function Gtb(a){a=a|0;OBa(a);return}function Htb(a){a=a|0;OBa(a);return}function Itb(a){a=a|0;OBa(a);return}function Jtb(a){a=a|0;OBa(a);return}function Ktb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=74432;i[a+8>>0]=46;i[a+9>>0]=44;b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function Ltb(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=74472;k[a+8>>2]=46;k[a+12>>2]=44;b=a+16|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function Mtb(a){a=a|0;k[a>>2]=74432;K2a(a+12|0);return}function Ntb(a){a=a|0;Mtb(a);OBa(a);return}function Otb(a){a=a|0;k[a>>2]=74472;K2a(a+16|0);return}function Ptb(a){a=a|0;Otb(a);OBa(a);return}function Qtb(a){a=a|0;return i[a+8>>0]|0}function Rtb(a){a=a|0;return k[a+8>>2]|0}function Stb(a){a=a|0;return i[a+9>>0]|0}function Ttb(a){a=a|0;return k[a+12>>2]|0}function Utb(a,b){a=a|0;b=b|0;n2a(a,b+12|0);return}function Vtb(a,b){a=a|0;b=b|0;n2a(a,b+16|0);return}function Wtb(a,b){a=a|0;b=b|0;q2a(a,330262,4);return}function Xtb(a,b){a=a|0;b=b|0;u5a(a,75808,$La(75808)|0);return}function Ytb(a,b){a=a|0;b=b|0;q2a(a,330267,5);return}function Ztb(a,b){a=a|0;b=b|0;u5a(a,75828,$La(75828)|0);return}function _tb(a,b,c){a=a|0;b=b|0;c=c|0;Ktb(a,c);k[a>>2]=74512;x=0;xa(1045,a|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Mtb(a);Sc(b|0)}else return}function $tb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+32|0;d=c+12|0;e=c;a:do if(YLa(b,332342)|0){f=BKa(2147483647,b,0)|0;g=(f|0)==0;b:do if(g){h=Rd(8)|0;j=RLa(b)|0;x=0;fb(140,e|0,b|0,j|0);j=x;x=0;do if(!(j&1)){x=0;l=Fa(86,e|0,0,330273)|0;m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(e);o=m;p=n;break};k[d>>2]=k[l>>2];k[d+4>>2]=k[l+4>>2];k[d+8>>2]=k[l+8>>2];n=0;while(1){if((n|0)==3)break;k[l+(n<<2)>>2]=0;n=n+1|0}x=0;xa(623,h|0,d|0);n=x;x=0;if(n&1)q=1;else{x=0;fb(149,h|0,9040,1245);x=0;q=0}n=Hc()|0;l=M;K2a(d);K2a(e);if(q){o=n;p=l}else{s=n;t=l;break b}}else{l=Hc()|0;o=l;p=M}while(0);Fc(h|0);s=o;t=p}else{x=0;j=Ba(635,f|0)|0;l=x;x=0;do if(!(l&1)){x=0;n=$a(52)|0;m=x;x=0;if(m&1){m=Hc()|0;u=M;if(!j){v=u;w=m;break}x=0;Ba(635,j|0)|0;y=x;x=0;if(!(y&1)){v=u;w=m;break}m=Hc(0)|0;Fg(m)}if((j|0)!=0?(x=0,Ba(635,j|0)|0,m=x,x=0,m&1):0){m=Hc(0)|0;Fg(m)}m=i[k[n>>2]>>0]|0;if(m<<24>>24)i[a+8>>0]=m;m=i[k[n+4>>2]>>0]|0;if(m<<24>>24)i[a+9>>0]=m;x=0;Ta(496,a+12|0,k[n+8>>2]|0)|0;n=x;x=0;if(!(n&1)){x=0;va(1543,f|0);n=x;x=0;if(!(n&1))break a;n=Hc(0)|0;Fg(n)}else z=24}else z=24;while(0);if((z|0)==24){j=Hc()|0;v=M;w=j}s=w;t=v}while(0);if(!g?(x=0,va(1543,f|0),j=x,x=0,j&1):0){j=Hc(0)|0;Fg(j)}Sc(s|0)}while(0);r=c;return}function aub(a,b,c){a=a|0;b=b|0;c=c|0;Ktb(a,c);k[a>>2]=74512;x=0;xa(1045,a|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=x;x=0;if(b&1){b=Hc()|0;Mtb(a);Sc(b|0)}else return}function bub(a){a=a|0;Mtb(a);OBa(a);return}function cub(a,b,c){a=a|0;b=b|0;c=c|0;Ltb(a,c);k[a>>2]=74552;x=0;xa(1046,a|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;Otb(a);Sc(b|0)}else return}function dub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+32|0;d=c+12|0;e=c;a:do if(YLa(b,332342)|0){f=BKa(2147483647,b,0)|0;g=(f|0)==0;b:do if(g){h=Rd(8)|0;j=RLa(b)|0;x=0;fb(140,e|0,b|0,j|0);j=x;x=0;do if(!(j&1)){x=0;l=Fa(86,e|0,0,330273)|0;m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(e);o=m;p=n;break};k[d>>2]=k[l>>2];k[d+4>>2]=k[l+4>>2];k[d+8>>2]=k[l+8>>2];n=0;while(1){if((n|0)==3)break;k[l+(n<<2)>>2]=0;n=n+1|0}x=0;xa(623,h|0,d|0);n=x;x=0;if(n&1)q=1;else{x=0;fb(149,h|0,9040,1245);x=0;q=0}n=Hc()|0;l=M;K2a(d);K2a(e);if(q){o=n;p=l}else{s=n;t=l;break b}}else{l=Hc()|0;o=l;p=M}while(0);Fc(h|0);s=o;t=p}else{x=0;j=Ba(635,f|0)|0;l=x;x=0;do if(!(l&1)){x=0;n=$a(52)|0;m=x;x=0;if(m&1){m=Hc()|0;u=M;if(!j){v=u;w=m;break}x=0;Ba(635,j|0)|0;y=x;x=0;if(!(y&1)){v=u;w=m;break}m=Hc(0)|0;Fg(m)}if((j|0)!=0?(x=0,Ba(635,j|0)|0,m=x,x=0,m&1):0){m=Hc(0)|0;Fg(m)}m=i[k[n>>2]>>0]|0;if(m<<24>>24)k[a+8>>2]=m<<24>>24;m=i[k[n+4>>2]>>0]|0;if(m<<24>>24)k[a+12>>2]=m<<24>>24;x=0;Ta(496,a+16|0,k[n+8>>2]|0)|0;n=x;x=0;if(!(n&1)){x=0;va(1543,f|0);n=x;x=0;if(!(n&1))break a;n=Hc(0)|0;Fg(n)}else z=24}else z=24;while(0);if((z|0)==24){j=Hc()|0;v=M;w=j}s=w;t=v}while(0);if(!g?(x=0,va(1543,f|0),j=x,x=0,j&1):0){j=Hc(0)|0;Fg(j)}Sc(s|0)}while(0);r=c;return}function eub(a,b,c){a=a|0;b=b|0;c=c|0;Ltb(a,c);k[a>>2]=74552;x=0;xa(1046,a|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=x;x=0;if(b&1){b=Hc()|0;Otb(a);Sc(b|0)}else return}function fub(a){a=a|0;Otb(a);OBa(a);return}function gub(a){a=a|0;var b=0;switch(k[a+4>>2]&74|0){case 64:{b=8;break}case 8:{b=16;break}case 0:{b=0;break}default:b=10}return b|0}function hub(a){a=a|0;var b=0;do if((i[19744]|0)==0?(Bb(19744)|0)!=0:0){if((i[19752]|0)==0?(Bb(19752)|0)!=0:0){a=75852;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=76020);Kc(19752)}x=0;Ta(496,75852,330337)|0;a=x;x=0;if(((((((((((((!(a&1)?(x=0,Ta(496,75864,330344)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75876,330351)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75888,330359)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75900,330369)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75912,330378)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75924,330385)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75936,330394)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75948,330398)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75960,330402)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75972,330406)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75984,330410)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,75996,330414)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(496,76008,330418)|0,a=x,x=0,!(a&1)):0){k[19005]=75852;Kc(19744);break}a=Hc()|0;Cd(19744);Sc(a|0)}while(0);return k[19005]|0}function iub(a){a=a|0;var b=0;do if((i[19760]|0)==0?(Bb(19760)|0)!=0:0){if((i[19768]|0)==0?(Bb(19768)|0)!=0:0){a=76024;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=76192);Kc(19768)}x=0;Ta(639,76024,76192)|0;a=x;x=0;if(((((((((((((!(a&1)?(x=0,Ta(639,76036,76220)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76048,76248)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76060,76280)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76072,76320)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76084,76356)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76096,76384)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76108,76420)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76120,76436)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76132,76452)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76144,76468)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76156,76484)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76168,76500)|0,a=x,x=0,!(a&1)):0)?(x=0,Ta(639,76180,76516)|0,a=x,x=0,!(a&1)):0){k[19133]=76024;Kc(19760);break}a=Hc()|0;Cd(19760);Sc(a|0)}while(0);return k[19133]|0}function jub(a){a=a|0;var b=0;a:do if((i[19776]|0)==0?(Bb(19776)|0)!=0:0){if((i[19784]|0)==0?(Bb(19784)|0)!=0:0){a=76536;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=76824);Kc(19784)}x=0;Ta(496,76536,330422)|0;a=x;x=0;do if((((((((((((((!(a&1)?(x=0,Ta(496,76548,330430)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76560,330439)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76572,330445)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76584,330451)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76596,330455)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76608,330460)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76620,330465)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76632,330472)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76644,330482)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76656,330490)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76668,330499)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76680,330508)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76692,330512)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(496,76704,330516)|0,b=x,x=0,!(b&1)):0){x=0;Ta(496,76716,330520)|0;b=x;x=0;if(b&1)break;x=0;Ta(496,76728,330451)|0;b=x;x=0;if(b&1)break;x=0;Ta(496,76740,330524)|0;b=x;x=0;if(b&1)break;x=0;Ta(496,76752,330528)|0;b=x;x=0;if(b&1)break;x=0;Ta(496,76764,330532)|0;b=x;x=0;if(b&1)break;x=0;Ta(496,76776,330536)|0;b=x;x=0;if(b&1)break;x=0;Ta(496,76788,330540)|0;b=x;x=0;if(b&1)break;x=0;Ta(496,76800,330544)|0;b=x;x=0;if(b&1)break;x=0;Ta(496,76812,330548)|0;b=x;x=0;if(b&1)break;k[19206]=76536;Kc(19776);break a}while(0);a=Hc()|0;Cd(19776);Sc(a|0)}while(0);return k[19206]|0}function kub(a){a=a|0;var b=0;a:do if((i[19792]|0)==0?(Bb(19792)|0)!=0:0){if((i[19800]|0)==0?(Bb(19800)|0)!=0:0){a=76828;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=77116);Kc(19800)}x=0;Ta(639,76828,77116)|0;a=x;x=0;do if((((((((((((((!(a&1)?(x=0,Ta(639,76840,77148)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76852,77184)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76864,77208)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76876,77232)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76888,77248)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76900,77268)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76912,77288)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76924,77316)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76936,77356)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76948,77388)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76960,77424)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76972,77460)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76984,77476)|0,b=x,x=0,!(b&1)):0)?(x=0,Ta(639,76996,77492)|0,b=x,x=0,!(b&1)):0){x=0;Ta(639,77008,77508)|0;b=x;x=0;if(b&1)break;x=0;Ta(639,77020,77232)|0;b=x;x=0;if(b&1)break;x=0;Ta(639,77032,77524)|0;b=x;x=0;if(b&1)break;x=0;Ta(639,77044,77540)|0;b=x;x=0;if(b&1)break;x=0;Ta(639,77056,77556)|0;b=x;x=0;if(b&1)break;x=0;Ta(639,77068,77572)|0;b=x;x=0;if(b&1)break;x=0;Ta(639,77080,77588)|0;b=x;x=0;if(b&1)break;x=0;Ta(639,77092,77604)|0;b=x;x=0;if(b&1)break;x=0;Ta(639,77104,77620)|0;b=x;x=0;if(b&1)break;k[19409]=76828;Kc(19792);break a}while(0);a=Hc()|0;Cd(19792);Sc(a|0)}while(0);return k[19409]|0}function lub(a){a=a|0;var b=0;do if((i[19808]|0)==0?(Bb(19808)|0)!=0:0){if((i[19816]|0)==0?(Bb(19816)|0)!=0:0){a=77640;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=77928);Kc(19816)}x=0;Ta(496,77640,330552)|0;a=x;x=0;if(!(a&1)?(x=0,Ta(496,77652,330555)|0,a=x,x=0,!(a&1)):0){k[19482]=77640;Kc(19808);break}a=Hc()|0;Cd(19808);Sc(a|0)}while(0);return k[19482]|0}function mub(a){a=a|0;var b=0;do if((i[19824]|0)==0?(Bb(19824)|0)!=0:0){if((i[19832]|0)==0?(Bb(19832)|0)!=0:0){a=77932;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=78220);Kc(19832)}x=0;Ta(639,77932,78220)|0;a=x;x=0;if(!(a&1)?(x=0,Ta(639,77944,78232)|0,a=x,x=0,!(a&1)):0){k[19561]=77932;Kc(19824);break}a=Hc()|0;Cd(19824);Sc(a|0)}while(0);return k[19561]|0}function nub(a){a=a|0;do if((i[19840]|0)==0?(Bb(19840)|0)!=0:0){x=0;fb(140,78248,330558,8);a=x;x=0;if(a&1){a=Hc()|0;Cd(19840);Sc(a|0)}else{Kc(19840);break}}while(0);return 78248}function oub(a){a=a|0;var b=0;do if((i[19848]|0)==0?(Bb(19848)|0)!=0:0){x=0;a=Ba(634,78260)|0;b=x;x=0;if(!(b&1)?(x=0,fb(440,78296,78260,a|0),a=x,x=0,!(a&1)):0){Kc(19848);break}a=Hc()|0;Cd(19848);Sc(a|0)}while(0);return 78296}function pub(a){a=a|0;do if((i[19856]|0)==0?(Bb(19856)|0)!=0:0){x=0;fb(140,78308,330567,8);a=x;x=0;if(a&1){a=Hc()|0;Cd(19856);Sc(a|0)}else{Kc(19856);break}}while(0);return 78308}function qub(a){a=a|0;var b=0;do if((i[19864]|0)==0?(Bb(19864)|0)!=0:0){x=0;a=Ba(634,78320)|0;b=x;x=0;if(!(b&1)?(x=0,fb(440,78356,78320,a|0),a=x,x=0,!(a&1)):0){Kc(19864);break}a=Hc()|0;Cd(19864);Sc(a|0)}while(0);return 78356}function rub(a){a=a|0;do if((i[19872]|0)==0?(Bb(19872)|0)!=0:0){x=0;fb(140,78368,330576,20);a=x;x=0;if(a&1){a=Hc()|0;Cd(19872);Sc(a|0)}else{Kc(19872);break}}while(0);return 78368}function sub(a){a=a|0;var b=0;do if((i[19880]|0)==0?(Bb(19880)|0)!=0:0){x=0;a=Ba(634,78380)|0;b=x;x=0;if(!(b&1)?(x=0,fb(440,78464,78380,a|0),a=x,x=0,!(a&1)):0){Kc(19880);break}a=Hc()|0;Cd(19880);Sc(a|0)}while(0);return 78464}function tub(a){a=a|0;do if((i[19888]|0)==0?(Bb(19888)|0)!=0:0){x=0;fb(140,78476,330597,11);a=x;x=0;if(a&1){a=Hc()|0;Cd(19888);Sc(a|0)}else{Kc(19888);break}}while(0);return 78476}function uub(a){a=a|0;var b=0;do if((i[19896]|0)==0?(Bb(19896)|0)!=0:0){x=0;a=Ba(634,78488)|0;b=x;x=0;if(!(b&1)?(x=0,fb(440,78536,78488,a|0),a=x,x=0,!(a&1)):0){Kc(19896);break}a=Hc()|0;Cd(19896);Sc(a|0)}while(0);return 78536}function vub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=BKa(2147483647,b,0)|0;k[a>>2]=f;if(f){r=c;return}c=Rd(8)|0;f=RLa(b)|0;x=0;fb(140,e|0,b|0,f|0);f=x;x=0;do if(!(f&1)){x=0;b=Fa(86,e|0,0,330609)|0;a=x;x=0;if(a&1){a=Hc()|0;g=M;K2a(e);h=g;i=a;j=12;break};k[d>>2]=k[b>>2];k[d+4>>2]=k[b+4>>2];k[d+8>>2]=k[b+8>>2];a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}x=0;xa(623,c|0,d|0);a=x;x=0;if(a&1)l=1;else{x=0;fb(149,c|0,9040,1245);x=0;l=0}a=Hc()|0;b=M;K2a(d);K2a(e);if(l){h=b;i=a;j=12}else{m=b;n=a}}else{a=Hc()|0;h=M;i=a;j=12}while(0);if((j|0)==12){Fc(c|0);m=h;n=i}Sc(n|0)}function wub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;e=BKa(2147483647,(i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,0)|0;k[a>>2]=e;if(e){r=c;return}c=Rd(8)|0;x=0;fb(423,d|0,330609,b|0);b=x;x=0;if(!(b&1)){x=0;xa(623,c|0,d|0);b=x;x=0;if(b&1)f=1;else{x=0;fb(149,c|0,9040,1245);x=0;f=0}b=Hc()|0;e=M;K2a(d);if(f){g=e;h=b;j=7}else{l=e;m=b}}else{b=Hc()|0;g=M;h=b;j=7}if((j|0)==7){Fc(c|0);l=g;m=h}Sc(m|0)}function xub(a){a=a|0;x=0;va(1543,k[a>>2]|0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function yub(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;e=r;r=r+160|0;f=e+12|0;g=e+60|0;h=e+56|0;l=e+8|0;m=e+4|0;n=e;o=f;p=o+44|0;do{k[o>>2]=0;o=o+4|0}while((o|0)<(p|0));k[f>>2]=59;k[f+4>>2]=55;k[f+8>>2]=23;k[f+12>>2]=31;k[f+16>>2]=11;k[f+20>>2]=161;k[f+24>>2]=6;k[f+28>>2]=364;k[f+32>>2]=-1;i[h>>0]=0;i[h+1>>0]=0;i[h+2>>0]=0;i[h>>0]=37;i[h+1>>0]=c;o=gf(g|0,100,h|0,f|0,k[b>>2]|0)|0;k[l>>2]=g;f=g;h=0;while(1){if((h|0)==3)break;k[a+(h<<2)>>2]=0;h=h+1|0}h=g+o|0;o=d+8|0;p=b+4|0;q=b+172|0;s=p;t=b+172|0;u=b+460|0;v=t;w=c<<24>>24==120;c=a+1|0;y=a+8|0;z=a+4|0;A=b+460|0;B=b+472|0;C=b+484|0;D=A;E=b+476|0;F=b+464|0;G=g;g=f;a:while(1){if((G|0)==(h|0)){H=91;break}f=i[G>>0]|0;if(f<<24>>24>-1?(j[(k[o>>2]|0)+(f<<24>>24<<1)>>1]&8192)!=0:0){x=0;xa(605,a|0,32);f=x;x=0;if(f&1){H=15;break}f=k[o>>2]|0;I=G;while(1){J=I+1|0;if((J|0)==(h|0)){K=h;break}L=i[J>>0]|0;if(L<<24>>24<=-1){K=J;break}if(!(j[f+(L<<24>>24<<1)>>1]&8192)){K=J;break}else I=J}k[l>>2]=K;N=K}else{k[m>>2]=g;k[n>>2]=0;x=0;I=na(50,m|0,h|0,p|0,q|0,d|0,n|0,0)|0;f=x;x=0;if(f&1){H=15;break}f=I-s|0;b:do if((f|0)<168){x=0;xa(605,a|0,37);I=x;x=0;if(I&1){H=15;break a}x=0;if((f|0)<84){L3a(a,65);I=x;x=0;if(I&1){H=15;break a}}else{L3a(a,97);I=x;x=0;if(I&1){H=15;break a}}k[l>>2]=k[m>>2]}else{k[m>>2]=g;x=0;I=na(50,m|0,h|0,t|0,u|0,d|0,n|0,0)|0;J=x;x=0;if(J&1){H=15;break a}J=I-v|0;I=(J|0)/12|0;if((J|0)<288){x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;if((J|0)<144){L3a(a,66);J=x;x=0;if(J&1){H=15;break a}}else{L3a(a,98);J=x;x=0;if(J&1){H=15;break a}}if(w){J=b+172+(I*12|0)|0;if(!(i[J>>0]&1))O=J+1|0;else O=k[b+172+(I*12|0)+8>>2]|0;I=i[O>>0]|0;if(I<<24>>24>-1?(j[(k[o>>2]|0)+(I<<24>>24<<1)>>1]&2048)!=0:0){I=i[a>>0]|0;if(!(I&1)){P=c;Q=(I&255)>>>1}else{P=k[y>>2]|0;Q=k[z>>2]|0}i[P+Q+-1>>0]=109}}k[l>>2]=k[m>>2];break}I=i[A>>0]|0;if(!(I&1))R=(I&255)>>>1;else R=k[F>>2]|0;I=i[B>>0]|0;if(!(I&1))S=(I&255)>>>1;else S=k[E>>2]|0;if((R|0)!=(0-S|0)){k[m>>2]=g;x=0;I=na(50,m|0,h|0,A|0,C|0,d|0,n|0,0)|0;J=x;x=0;if(J&1){H=15;break a}if((I-D|0)<24){x=0;xa(605,a|0,37);I=x;x=0;if(I&1){H=15;break a}x=0;xa(605,a|0,112);I=x;x=0;if(I&1){H=15;break a}k[l>>2]=k[m>>2];break}}k[m>>2]=g;I=g;J=i[I>>0]|0;if(J<<24>>24>-1?(j[(k[o>>2]|0)+(J<<24>>24<<1)>>1]&2048)!=0:0){x=0;J=Va(101,l|0,h|0,n|0,d|0,4)|0;L=x;x=0;if(L&1){H=15;break a}do switch(J|0){case 6:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,119);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 7:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,117);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 11:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,73);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 12:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,109);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 23:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,72);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 31:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,100);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 55:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,77);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 59:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,83);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 61:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,121);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 364:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,106);L=x;x=0;if(L&1){H=15;break a}else break b;break}case 2061:{x=0;xa(605,a|0,37);L=x;x=0;if(L&1){H=15;break a}x=0;xa(605,a|0,89);L=x;x=0;if(L&1){H=15;break a}else break b;break}default:{L=k[l>>2]|0;T=I;while(1){if((T|0)==(L|0))break b;x=0;xa(605,a|0,i[T>>0]|0);U=x;x=0;if(U&1){H=14;break a}U=T+1|0;k[m>>2]=U;T=U}}}while(0)}I=i[G>>0]|0;x=0;if(I<<24>>24!=37){L3a(a,I);I=x;x=0;if(I&1){H=15;break a}k[l>>2]=G+1;break}L3a(a,37);I=x;x=0;if(I&1){H=15;break a}x=0;xa(605,a|0,37);I=x;x=0;if(I&1){H=15;break a}k[l>>2]=G+1}while(0);N=k[l>>2]|0}G=N;g=N}if((H|0)==14){N=Hc()|0;V=N;W=M}else if((H|0)==15){N=Hc()|0;V=N;W=M}else if((H|0)==91){r=e;return}K2a(a);Sc(V|0)}function zub(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=r;r=r+576|0;f=e+424|0;g=e+472|0;h=e+468|0;j=e+24|0;l=e+20|0;m=e;n=e+16|0;o=e+12|0;p=e+8|0;q=f;s=q+44|0;do{k[q>>2]=0;q=q+4|0}while((q|0)<(s|0));k[f>>2]=59;k[f+4>>2]=55;k[f+8>>2]=23;k[f+12>>2]=31;k[f+16>>2]=11;k[f+20>>2]=161;k[f+24>>2]=6;k[f+28>>2]=364;k[f+32>>2]=-1;i[h>>0]=0;i[h+1>>0]=0;i[h+2>>0]=0;i[h>>0]=37;i[h+1>>0]=c;gf(g|0,100,h|0,f|0,k[b>>2]|0)|0;k[l>>2]=j;f=m;k[f>>2]=0;k[f+4>>2]=0;k[n>>2]=g;g=ZKa(k[b>>2]|0)|0;f=j;x=0;h=db(87,j|0,n|0,100,m|0)|0;m=x;x=0;if(m&1){m=Hc()|0;if((g|0)!=0?(x=0,Ba(635,g|0)|0,n=x,x=0,n&1):0){n=Hc(0)|0;Fg(n)}Sc(m|0)}if((g|0)!=0?(x=0,Ba(635,g|0)|0,g=x,x=0,g&1):0){g=Hc(0)|0;Fg(g)}if((h|0)==-1)mob(329768);g=0;while(1){if((g|0)==3)break;k[a+(g<<2)>>2]=0;g=g+1|0}g=j+(h<<2)|0;h=b+4|0;m=b+172|0;n=h;q=b+172|0;s=b+460|0;t=q;u=c<<24>>24==120;c=a+4|0;v=a+8|0;w=b+460|0;y=b+472|0;z=b+484|0;A=w;B=b+476|0;C=b+464|0;D=f;f=j;a:while(1){if((f|0)==(g|0)){E=102;break}x=0;j=Fa(k[(k[d>>2]|0)+12>>2]|0,d|0,8192,k[f>>2]|0)|0;F=x;x=0;if(F&1){E=25;break}if(j){x=0;xa(965,a|0,32);j=x;x=0;if(j&1){E=25;break}else G=f;while(1){j=G+4|0;if((j|0)==(g|0)){H=g;break}x=0;F=Fa(k[(k[d>>2]|0)+12>>2]|0,d|0,8192,k[j>>2]|0)|0;I=x;x=0;if(I&1){J=j;E=23;break a}if(F)G=j;else{H=j;break}}k[l>>2]=H;K=H}else{k[o>>2]=D;k[p>>2]=0;x=0;j=na(51,o|0,g|0,h|0,m|0,d|0,p|0,0)|0;F=x;x=0;if(F&1){E=25;break}F=j-n|0;b:do if((F|0)<168){x=0;xa(965,a|0,37);j=x;x=0;if(j&1){E=25;break a}x=0;if((F|0)<84){P6a(a,65);j=x;x=0;if(j&1){E=25;break a}}else{P6a(a,97);j=x;x=0;if(j&1){E=25;break a}}k[l>>2]=k[o>>2]}else{k[o>>2]=D;x=0;j=na(51,o|0,g|0,q|0,s|0,d|0,p|0,0)|0;I=x;x=0;if(I&1){E=25;break a}I=j-t|0;j=(I|0)/12|0;if((I|0)<288){x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;if((I|0)<144){P6a(a,66);I=x;x=0;if(I&1){E=25;break a}}else{P6a(a,98);I=x;x=0;if(I&1){E=25;break a}}do if(u){if(!(i[b+172+(j*12|0)>>0]&1))N=b+172+(j*12|0)+4|0;else N=k[b+172+(j*12|0)+8>>2]|0;x=0;I=Fa(k[(k[d>>2]|0)+12>>2]|0,d|0,2048,k[N>>2]|0)|0;L=x;x=0;if(L&1){E=25;break a}if(!I)break;I=i[a>>0]|0;if(!(I&1)){O=c;P=(I&255)>>>1}else{O=k[v>>2]|0;P=k[c>>2]|0}k[O+(P<<2)+-4>>2]=109}while(0);k[l>>2]=k[o>>2];break}j=i[w>>0]|0;if(!(j&1))Q=(j&255)>>>1;else Q=k[C>>2]|0;j=i[y>>0]|0;if(!(j&1))R=(j&255)>>>1;else R=k[B>>2]|0;if((Q|0)!=(0-R|0)){k[o>>2]=D;x=0;j=na(51,o|0,g|0,w|0,z|0,d|0,p|0,0)|0;I=x;x=0;if(I&1){E=25;break a}if((j-A|0)<24){x=0;xa(965,a|0,37);j=x;x=0;if(j&1){E=25;break a}x=0;xa(965,a|0,112);j=x;x=0;if(j&1){E=25;break a}k[l>>2]=k[o>>2];break}}k[o>>2]=D;j=D;x=0;I=Fa(k[(k[d>>2]|0)+12>>2]|0,d|0,2048,k[j>>2]|0)|0;L=x;x=0;if(L&1){E=25;break a}if(!I){x=0;I=Fa(k[(k[d>>2]|0)+52>>2]|0,d|0,k[f>>2]|0,0)|0;L=x;x=0;if(L&1){E=25;break a}if(I<<24>>24!=37){x=0;xa(965,a|0,k[f>>2]|0);I=x;x=0;if(I&1){E=25;break a}k[l>>2]=f+4;break}x=0;xa(965,a|0,37);I=x;x=0;if(I&1){E=25;break a}x=0;xa(965,a|0,37);I=x;x=0;if(I&1){E=25;break a}k[l>>2]=f+4;break}x=0;I=Va(102,l|0,g|0,p|0,d|0,4)|0;L=x;x=0;if(L&1){E=25;break a}do switch(I|0){case 6:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,119);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 7:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,117);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 11:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,73);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 12:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,109);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 23:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,72);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 31:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,100);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 55:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,77);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 59:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,83);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 61:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,121);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 364:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,106);L=x;x=0;if(L&1){E=25;break a}else break b;break}case 2061:{x=0;xa(965,a|0,37);L=x;x=0;if(L&1){E=25;break a}x=0;xa(965,a|0,89);L=x;x=0;if(L&1){E=25;break a}else break b;break}default:{L=k[l>>2]|0;S=j;while(1){if((S|0)==(L|0))break b;x=0;xa(965,a|0,k[S>>2]|0);T=x;x=0;if(T&1){E=24;break a}T=S+4|0;k[o>>2]=T;S=T}}}while(0)}while(0);K=k[l>>2]|0}D=K;f=K}if((E|0)==23){K=Hc()|0;k[l>>2]=J;U=K;V=M}else if((E|0)==24){K=Hc()|0;U=K;V=M}else if((E|0)==25){K=Hc()|0;U=K;V=M}else if((E|0)==102){r=e;return}O5a(a);Sc(U|0)}function Aub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+192|0;d=c+48|0;e=c+92|0;f=c+36|0;g=c+24|0;h=c+12|0;j=c;l=d;m=l+44|0;do{k[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=d+24|0;m=0;while(1){if((m|0)==7)break;k[l>>2]=m;gf(e|0,100,330650,d|0,k[a>>2]|0)|0;S2a(a+4+(m*12|0)|0,e)|0;gf(e|0,100,330653,d|0,k[a>>2]|0)|0;S2a(a+4+((m+7|0)*12|0)|0,e)|0;m=m+1|0}m=d+16|0;l=0;while(1){if((l|0)==12)break;k[m>>2]=l;gf(e|0,100,330656,d|0,k[a>>2]|0)|0;S2a(a+172+(l*12|0)|0,e)|0;gf(e|0,100,330659,d|0,k[a>>2]|0)|0;S2a(a+172+((l+12|0)*12|0)|0,e)|0;l=l+1|0}l=d+8|0;k[l>>2]=1;gf(e|0,100,329660,d|0,k[a>>2]|0)|0;S2a(a+460|0,e)|0;k[l>>2]=13;gf(e|0,100,329660,d|0,k[a>>2]|0)|0;S2a(a+472|0,e)|0;e=a+484|0;yub(f,a,99,b);if(!(i[e>>0]&1)){i[e+1>>0]=0;i[e>>0]=0}else{i[k[a+492>>2]>>0]=0;k[a+488>>2]=0}x=0;xa(603,e|0,0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)};k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];e=0;while(1){if((e|0)==3)break;k[f+(e<<2)>>2]=0;e=e+1|0}K2a(f);f=a+496|0;yub(g,a,114,b);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[a+504>>2]>>0]=0;k[a+500>>2]=0}x=0;xa(603,f|0,0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)};k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];f=0;while(1){if((f|0)==3)break;k[g+(f<<2)>>2]=0;f=f+1|0}K2a(g);g=a+508|0;yub(h,a,120,b);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[a+516>>2]>>0]=0;k[a+512>>2]=0}x=0;xa(603,g|0,0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)};k[g>>2]=k[h>>2];k[g+4>>2]=k[h+4>>2];k[g+8>>2]=k[h+8>>2];g=0;while(1){if((g|0)==3)break;k[h+(g<<2)>>2]=0;g=g+1|0}K2a(h);h=a+520|0;yub(j,a,88,b);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[a+528>>2]>>0]=0;k[a+524>>2]=0}x=0;xa(603,h|0,0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)};k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];h=0;while(1){if((h|0)==3)break;k[j+(h<<2)>>2]=0;h=h+1|0}K2a(j);r=c;return}function Bub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+608|0;d=c+464|0;e=c+508|0;f=c+64|0;g=c;h=c+56|0;j=c+44|0;l=c+32|0;m=c+20|0;n=c+8|0;o=d;p=o+44|0;do{k[o>>2]=0;o=o+4|0}while((o|0)<(p|0));o=g;k[o>>2]=0;k[o+4>>2]=0;o=d+24|0;p=0;while(1){if((p|0)>=7){q=3;break}k[o>>2]=p;gf(e|0,100,330650,d|0,k[a>>2]|0)|0;s=g;k[s>>2]=0;k[s+4>>2]=0;k[h>>2]=e;s=ZKa(k[a>>2]|0)|0;x=0;t=db(87,f|0,h|0,100,g|0)|0;u=x;x=0;if(u&1){v=s;q=8;break}if((s|0)!=0?(x=0,Ba(635,s|0)|0,s=x,x=0,s&1):0){q=7;break}if((t|0)==-1){q=13;break}ivb(a+4+(p*12|0)|0,f,f+(t<<2)|0)|0;gf(e|0,100,330653,d|0,k[a>>2]|0)|0;t=g;k[t>>2]=0;k[t+4>>2]=0;k[h>>2]=e;t=ZKa(k[a>>2]|0)|0;x=0;s=db(87,f|0,h|0,100,g|0)|0;u=x;x=0;if(u&1){w=t;q=18;break}if((t|0)!=0?(x=0,Ba(635,t|0)|0,t=x,x=0,t&1):0){q=17;break}if((s|0)==-1){q=23;break}ivb(a+4+((p+7|0)*12|0)|0,f,f+(s<<2)|0)|0;p=p+1|0}if((q|0)==3){p=d+16|0;o=0;while(1){if((o|0)>=12){q=26;break}k[p>>2]=o;gf(e|0,100,330656,d|0,k[a>>2]|0)|0;s=g;k[s>>2]=0;k[s+4>>2]=0;k[h>>2]=e;s=ZKa(k[a>>2]|0)|0;x=0;t=db(87,f|0,h|0,100,g|0)|0;u=x;x=0;if(u&1){y=s;q=39;break}if((s|0)!=0?(x=0,Ba(635,s|0)|0,s=x,x=0,s&1):0){q=38;break}if((t|0)==-1){q=44;break}ivb(a+172+(o*12|0)|0,f,f+(t<<2)|0)|0;gf(e|0,100,330659,d|0,k[a>>2]|0)|0;t=g;k[t>>2]=0;k[t+4>>2]=0;k[h>>2]=e;t=ZKa(k[a>>2]|0)|0;x=0;s=db(87,f|0,h|0,100,g|0)|0;u=x;x=0;if(u&1){z=t;q=49;break}if((t|0)!=0?(x=0,Ba(635,t|0)|0,t=x,x=0,t&1):0){q=48;break}if((s|0)==-1){q=54;break}ivb(a+172+((o+12|0)*12|0)|0,f,f+(s<<2)|0)|0;o=o+1|0}if((q|0)==26){o=d+8|0;k[o>>2]=1;gf(e|0,100,329660,d|0,k[a>>2]|0)|0;p=g;k[p>>2]=0;k[p+4>>2]=0;k[h>>2]=e;p=ZKa(k[a>>2]|0)|0;x=0;s=db(87,f|0,h|0,100,g|0)|0;t=x;x=0;if(t&1){t=Hc()|0;if((p|0)!=0?(x=0,Ba(635,p|0)|0,u=x,x=0,u&1):0){u=Hc(0)|0;Fg(u)}Sc(t|0)}if((p|0)!=0?(x=0,Ba(635,p|0)|0,p=x,x=0,p&1):0){p=Hc(0)|0;Fg(p)}if((s|0)==-1)mob(329768);ivb(a+460|0,f,f+(s<<2)|0)|0;k[o>>2]=13;gf(e|0,100,329660,d|0,k[a>>2]|0)|0;d=g;k[d>>2]=0;k[d+4>>2]=0;k[h>>2]=e;e=ZKa(k[a>>2]|0)|0;x=0;d=db(87,f|0,h|0,100,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;if((e|0)!=0?(x=0,Ba(635,e|0)|0,h=x,x=0,h&1):0){h=Hc(0)|0;Fg(h)}Sc(g|0)}if((e|0)!=0?(x=0,Ba(635,e|0)|0,e=x,x=0,e&1):0){e=Hc(0)|0;Fg(e)}if((d|0)==-1)mob(329768);ivb(a+472|0,f,f+(d<<2)|0)|0;d=a+484|0;zub(j,a,99,b);if(!(i[d>>0]&1))i[d>>0]=0;else k[k[a+492>>2]>>2]=0;k[a+488>>2]=0;x=0;xa(945,d|0,0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)};k[d>>2]=k[j>>2];k[d+4>>2]=k[j+4>>2];k[d+8>>2]=k[j+8>>2];d=0;while(1){if((d|0)==3)break;k[j+(d<<2)>>2]=0;d=d+1|0}O5a(j);j=a+496|0;zub(l,a,114,b);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[a+504>>2]>>2]=0;k[a+500>>2]=0;x=0;xa(945,j|0,0);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)};k[j>>2]=k[l>>2];k[j+4>>2]=k[l+4>>2];k[j+8>>2]=k[l+8>>2];j=0;while(1){if((j|0)==3)break;k[l+(j<<2)>>2]=0;j=j+1|0}O5a(l);l=a+508|0;zub(m,a,120,b);if(!(i[l>>0]&1))i[l>>0]=0;else k[k[a+516>>2]>>2]=0;k[a+512>>2]=0;x=0;xa(945,l|0,0);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)};k[l>>2]=k[m>>2];k[l+4>>2]=k[m+4>>2];k[l+8>>2]=k[m+8>>2];l=0;while(1){if((l|0)==3)break;k[m+(l<<2)>>2]=0;l=l+1|0}O5a(m);m=a+520|0;zub(n,a,88,b);if(!(i[m>>0]&1))i[m>>0]=0;else k[k[a+528>>2]>>2]=0;k[a+524>>2]=0;x=0;xa(945,m|0,0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)};k[m>>2]=k[n>>2];k[m+4>>2]=k[n+4>>2];k[m+8>>2]=k[n+8>>2];m=0;while(1){if((m|0)==3)break;k[n+(m<<2)>>2]=0;m=m+1|0}O5a(n);r=c;return}else if((q|0)==38){c=Hc(0)|0;Fg(c)}else if((q|0)==39){c=Hc()|0;if((y|0)!=0?(x=0,Ba(635,y|0)|0,y=x,x=0,y&1):0){y=Hc(0)|0;Fg(y)}Sc(c|0)}else if((q|0)==44)mob(329768);else if((q|0)==48){c=Hc(0)|0;Fg(c)}else if((q|0)==49){c=Hc()|0;if((z|0)!=0?(x=0,Ba(635,z|0)|0,z=x,x=0,z&1):0){z=Hc(0)|0;Fg(z)}Sc(c|0)}else if((q|0)==54)mob(329768)}else if((q|0)==7){c=Hc(0)|0;Fg(c)}else if((q|0)==8){c=Hc()|0;if((v|0)!=0?(x=0,Ba(635,v|0)|0,v=x,x=0,v&1):0){v=Hc(0)|0;Fg(v)}Sc(c|0)}else if((q|0)==13)mob(329768);else if((q|0)==17){c=Hc(0)|0;Fg(c)}else if((q|0)==18){c=Hc()|0;if((w|0)!=0?(x=0,Ba(635,w|0)|0,w=x,x=0,w&1):0){w=Hc(0)|0;Fg(w)}Sc(c|0)}else if((q|0)==23)mob(329768)}function Cub(a){a=a|0;var b=0;k[a>>2]=74216;x=0;va(1543,k[a+16>>2]|0);b=x;x=0;if(b&1){b=Hc(0)|0;Tqb(a);Fg(b)}else{Tqb(a);return}}function Dub(a){a=a|0;k[a>>2]=74268;x=0;va(1543,k[a+8>>2]|0);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else return}function Eub(a){a=a|0;var b=0,c=0,d=0,e=0;k[a>>2]=74352;b=a+8|0;a=k[b>>2]|0;x=0;c=$a(51)|0;d=x;x=0;do if(!(d&1)){if((a|0)!=(c|0)?(x=0,va(1543,k[b>>2]|0),e=x,x=0,e&1):0)break;return}while(0);b=Hc(0)|0;Fg(b)}function Fub(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;h=r;r=r+112|0;j=h;m=(d-c|0)/12|0;do if(m>>>0>100){n=xYa(m)|0;if((n|0)==0?(x=0,hb(55),o=x,x=0,o&1):0){p=0;q=6;break}s=n;t=n;q=11}else{s=0;t=j;q=11}while(0);a:do if((q|0)==11){j=c;n=0;o=m;u=t;while(1){if((j|0)==(d|0)){v=n;w=o;break}y=i[j>>0]|0;if(!(y&1))z=(y&255)>>>1;else z=k[j+4>>2]|0;if(!z){i[u>>0]=2;A=n+1|0;B=o+-1|0}else{i[u>>0]=1;A=n;B=o}j=j+12|0;n=A;o=B;u=u+1|0}u=0;o=v;n=w;b:while(1){j=k[a>>2]|0;do if(j)if((k[j+12>>2]|0)==(k[j+16>>2]|0)){x=0;y=Ba(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;C=x;x=0;if(C&1){q=5;break b}if((y|0)==-1){k[a>>2]=0;D=0;break}else{D=k[a>>2]|0;break}}else D=j;else D=0;while(0);j=(D|0)==0;y=k[b>>2]|0;if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)){x=0;C=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;E=x;x=0;if(E&1){q=5;break}if((C|0)==-1){k[b>>2]=0;F=0}else F=y}else F=y;else F=0;y=(F|0)==0;C=k[a>>2]|0;if(!((n|0)!=0&(j^y))){G=y;H=C;I=F;q=33;break}y=k[C+12>>2]|0;if((y|0)==(k[C+16>>2]|0)){x=0;j=Ba(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;C=x;x=0;if(C&1){q=5;break}else J=j}else J=l[y>>0]|0;y=J&255;if(!g){x=0;j=Ta(k[(k[e>>2]|0)+12>>2]|0,e|0,y|0)|0;C=x;x=0;if(C&1){q=5;break}else K=j}else K=y;y=u+1|0;j=0;C=c;E=o;L=n;N=t;while(1){if((C|0)==(d|0))break;do if((i[N>>0]|0)==1){if(!(i[C>>0]&1))O=C+1|0;else O=k[C+8>>2]|0;P=i[O+u>>0]|0;if(!g){x=0;Q=Ta(k[(k[e>>2]|0)+12>>2]|0,e|0,P|0)|0;R=x;x=0;if(R&1){q=4;break b}else S=Q}else S=P;if(K<<24>>24!=S<<24>>24){i[N>>0]=0;T=j;U=E;V=L+-1|0;break}P=i[C>>0]|0;if(!(P&1))W=(P&255)>>>1;else W=k[C+4>>2]|0;if((W|0)==(y|0)){i[N>>0]=2;T=1;U=E+1|0;V=L+-1|0}else{T=1;U=E;V=L}}else{T=j;U=E;V=L}while(0);j=T;C=C+12|0;E=U;L=V;N=N+1|0}if(!j){u=y;o=E;n=L;continue}N=k[a>>2]|0;C=N+12|0;P=k[C>>2]|0;if((P|0)==(k[N+16>>2]|0)){x=0;Ba(k[(k[N>>2]|0)+40>>2]|0,N|0)|0;N=x;x=0;if(N&1){q=5;break}}else k[C>>2]=P+1;if((E+L|0)>>>0>1){X=c;Y=E;Z=t}else{u=y;o=E;n=L;continue}while(1){if((X|0)==(d|0)){u=y;o=Y;n=L;continue b}if((i[Z>>0]|0)==2){P=i[X>>0]|0;if(!(P&1))_=(P&255)>>>1;else _=k[X+4>>2]|0;if((_|0)!=(y|0)){i[Z>>0]=0;$=Y+-1|0}else $=Y}else $=Y;X=X+12|0;Y=$;Z=Z+1|0}}if((q|0)==4){n=Hc()|0;aa=s;ba=n;ca=M;break}else if((q|0)==5){n=Hc()|0;aa=s;ba=n;ca=M;break}else if((q|0)==33){do if(H)if((k[H+12>>2]|0)==(k[H+16>>2]|0)){x=0;n=Ba(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;o=x;x=0;if(o&1){p=s;q=6;break a}if((n|0)==-1){k[a>>2]=0;da=0;break}else{da=k[a>>2]|0;break}}else da=H;else da=0;while(0);n=(da|0)==0;do if(!G){if((k[I+12>>2]|0)==(k[I+16>>2]|0)){x=0;o=Ba(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;u=x;x=0;if(u&1){p=s;q=6;break a}if((o|0)==-1){k[b>>2]=0;q=79;break}}if(n){ea=c;fa=t}else q=80}else q=79;while(0);if((q|0)==79)if(n)q=80;else{ea=c;fa=t}if((q|0)==80){k[f>>2]=k[f>>2]|2;ea=c;fa=t}while(1){if((ea|0)==(d|0)){q=84;break}if((i[fa>>0]|0)==2){ga=ea;break}ea=ea+12|0;fa=fa+1|0}if((q|0)==84){k[f>>2]=k[f>>2]|4;ga=d}if(s)yYa(s);r=h;return ga|0}}while(0);if((q|0)==6){q=Hc()|0;aa=p;ba=q;ca=M}if(aa)yYa(aa);Sc(ba|0);return 0}function Gub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=gub(d)|0;Zhb(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,t|0,0);t=x;x=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;y=i[h>>0]|0;z=k[b>>2]|0;A=v;b:while(1){if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)){x=0;v=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;B=x;x=0;if(B&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=z}else D=z;else D=0;v=(D|0)==0;B=k[c>>2]|0;do if(B){if((k[B+12>>2]|0)!=(k[B+16>>2]|0))if(v){E=B;break}else{F=B;G=D;H=A;break b}x=0;I=Ba(k[(k[B>>2]|0)+36>>2]|0,B|0)|0;J=x;x=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=B;break}else{F=B;G=D;H=A;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=A;break}else E=0}B=i[m>>0]|0;I=(B&1)==0?(B&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(A+I|0)){x=0;fb(147,m|0,I<<1|0,0);B=x;x=0;if(B&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,K|0,0);B=x;x=0;if(B&1){C=27;break}B=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=B+I;L=B}else L=A;B=D+12|0;I=k[B>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){x=0;N=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;O=x;x=0;if(O&1){C=27;break}else P=N}else P=l[I>>0]|0;if(xhb(P&255,s,L,n,q,y,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[B>>2]|0;if((I|0)==(k[J>>2]|0)){x=0;Ba(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=x;x=0;if(J&1){C=27;break}else{z=D;A=L;continue}}else{k[B>>2]=I+1;z=D;A=L;continue}}if((C|0)==27){A=Hc()|0;Q=A;R=M;break}A=i[j>>0]|0;if((((A&1)==0?(A&255)>>>1:k[j+4>>2]|0)|0)!=0?(A=k[p>>2]|0,(A-o|0)<160):0){z=k[q>>2]|0;k[p>>2]=A+4;k[A>>2]=z}x=0;z=db(92,H|0,k[n>>2]|0,e|0,s|0)|0;A=x;x=0;if(!(A&1)){k[f>>2]=z;pob(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){x=0;z=Ba(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;A=x;x=0;if(A&1){C=28;break}if((z|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;z=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){x=0;A=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;y=x;x=0;if(y&1){C=28;break a}if((A|0)==-1){k[c>>2]=0;C=52;break}}if(!z)C=53}else C=52;while(0);if((C|0)==52?z:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;A=k[b>>2]|0;K2a(m);K2a(j);r=a;return A|0}else C=28}else C=28;while(0);if((C|0)==28){C=Hc()|0;Q=C;R=M}K2a(m);K2a(j);Sc(Q|0);return 0}function Hub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=gub(d)|0;Zhb(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,t|0,0);t=x;x=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;y=i[h>>0]|0;z=k[b>>2]|0;A=v;b:while(1){if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)){x=0;v=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;B=x;x=0;if(B&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=z}else D=z;else D=0;v=(D|0)==0;B=k[c>>2]|0;do if(B){if((k[B+12>>2]|0)!=(k[B+16>>2]|0))if(v){E=B;break}else{F=B;G=D;H=A;break b}x=0;I=Ba(k[(k[B>>2]|0)+36>>2]|0,B|0)|0;J=x;x=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=B;break}else{F=B;G=D;H=A;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=A;break}else E=0}B=i[m>>0]|0;I=(B&1)==0?(B&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(A+I|0)){x=0;fb(147,m|0,I<<1|0,0);B=x;x=0;if(B&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,K|0,0);B=x;x=0;if(B&1){C=27;break}B=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=B+I;L=B}else L=A;B=D+12|0;I=k[B>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){x=0;N=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;O=x;x=0;if(O&1){C=27;break}else P=N}else P=l[I>>0]|0;if(xhb(P&255,s,L,n,q,y,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[B>>2]|0;if((I|0)==(k[J>>2]|0)){x=0;Ba(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=x;x=0;if(J&1){C=27;break}else{z=D;A=L;continue}}else{k[B>>2]=I+1;z=D;A=L;continue}}if((C|0)==27){A=Hc()|0;Q=A;R=M;break}A=i[j>>0]|0;if((((A&1)==0?(A&255)>>>1:k[j+4>>2]|0)|0)!=0?(A=k[p>>2]|0,(A-o|0)<160):0){z=k[q>>2]|0;k[p>>2]=A+4;k[A>>2]=z}x=0;z=db(93,H|0,k[n>>2]|0,e|0,s|0)|0;A=M;y=x;x=0;if(!(y&1)){y=f;k[y>>2]=z;k[y+4>>2]=A;pob(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){x=0;A=Ba(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;y=x;x=0;if(y&1){C=28;break}if((A|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;A=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){x=0;y=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;z=x;x=0;if(z&1){C=28;break a}if((y|0)==-1){k[c>>2]=0;C=52;break}}if(!A)C=53}else C=52;while(0);if((C|0)==52?A:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;K2a(m);K2a(j);r=a;return y|0}else C=28}else C=28;while(0);if((C|0)==28){C=Hc()|0;Q=C;R=M}K2a(m);K2a(j);Sc(Q|0);return 0}function Iub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;m=a+184|0;n=a+172|0;o=a+168|0;p=a+8|0;q=a+4|0;s=a;t=gub(d)|0;Zhb(m,d,g,h);d=0;while(1){if((d|0)==3)break;k[n+(d<<2)>>2]=0;d=d+1|0}if(!(i[n>>0]&1))u=10;else u=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,u|0,0);u=x;x=0;a:do if(!(u&1)){d=n+8|0;v=n+1|0;w=(i[n>>0]&1)==0?v:k[d>>2]|0;k[o>>2]=w;k[q>>2]=p;k[s>>2]=0;y=n+4|0;z=i[h>>0]|0;A=k[b>>2]|0;B=w;b:while(1){if(A)if((k[A+12>>2]|0)==(k[A+16>>2]|0)){x=0;w=Ba(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;C=x;x=0;if(C&1){D=27;break}if((w|0)==-1){k[b>>2]=0;E=0}else E=A}else E=A;else E=0;w=(E|0)==0;C=k[c>>2]|0;do if(C){if((k[C+12>>2]|0)!=(k[C+16>>2]|0))if(w){F=C;break}else{G=C;H=E;I=B;break b}x=0;J=Ba(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;K=x;x=0;if(K&1){D=27;break b}if((J|0)!=-1)if(w){F=C;break}else{G=C;H=E;I=B;break b}else{k[c>>2]=0;D=19;break}}else D=19;while(0);if((D|0)==19){D=0;if(w){G=0;H=E;I=B;break}else F=0}C=i[n>>0]|0;J=(C&1)==0?(C&255)>>>1:k[y>>2]|0;if((k[o>>2]|0)==(B+J|0)){x=0;fb(147,n|0,J<<1|0,0);C=x;x=0;if(C&1){D=27;break}if(!(i[n>>0]&1))L=10;else L=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,L|0,0);C=x;x=0;if(C&1){D=27;break}C=(i[n>>0]&1)==0?v:k[d>>2]|0;k[o>>2]=C+J;N=C}else N=B;C=E+12|0;J=k[C>>2]|0;K=E+16|0;if((J|0)==(k[K>>2]|0)){x=0;O=Ba(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;P=x;x=0;if(P&1){D=27;break}else Q=O}else Q=l[J>>0]|0;if(xhb(Q&255,t,N,o,s,z,m,p,q,g)|0){G=F;H=E;I=N;break}J=k[C>>2]|0;if((J|0)==(k[K>>2]|0)){x=0;Ba(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;K=x;x=0;if(K&1){D=27;break}else{A=E;B=N;continue}}else{k[C>>2]=J+1;A=E;B=N;continue}}if((D|0)==27){B=Hc()|0;R=B;S=M;break}B=i[m>>0]|0;if((((B&1)==0?(B&255)>>>1:k[m+4>>2]|0)|0)!=0?(B=k[q>>2]|0,(B-p|0)<160):0){A=k[s>>2]|0;k[q>>2]=B+4;k[B>>2]=A}x=0;A=db(94,I|0,k[o>>2]|0,e|0,t|0)|0;B=x;x=0;if(!(B&1)){j[f>>1]=A;pob(m,p,k[q>>2]|0,e);if(H)if((k[H+12>>2]|0)==(k[H+16>>2]|0)){x=0;A=Ba(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;B=x;x=0;if(B&1){D=28;break}if((A|0)==-1){k[b>>2]=0;T=0}else T=H}else T=H;else T=0;A=(T|0)==0;do if(G){if((k[G+12>>2]|0)==(k[G+16>>2]|0)){x=0;B=Ba(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;z=x;x=0;if(z&1){D=28;break a}if((B|0)==-1){k[c>>2]=0;D=52;break}}if(!A)D=53}else D=52;while(0);if((D|0)==52?A:0)D=53;if((D|0)==53)k[e>>2]=k[e>>2]|2;B=k[b>>2]|0;K2a(n);K2a(m);r=a;return B|0}else D=28}else D=28;while(0);if((D|0)==28){D=Hc()|0;R=D;S=M}K2a(n);K2a(m);Sc(R|0);return 0}function Jub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=gub(d)|0;Zhb(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,t|0,0);t=x;x=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;y=i[h>>0]|0;z=k[b>>2]|0;A=v;b:while(1){if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)){x=0;v=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;B=x;x=0;if(B&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=z}else D=z;else D=0;v=(D|0)==0;B=k[c>>2]|0;do if(B){if((k[B+12>>2]|0)!=(k[B+16>>2]|0))if(v){E=B;break}else{F=B;G=D;H=A;break b}x=0;I=Ba(k[(k[B>>2]|0)+36>>2]|0,B|0)|0;J=x;x=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=B;break}else{F=B;G=D;H=A;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=A;break}else E=0}B=i[m>>0]|0;I=(B&1)==0?(B&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(A+I|0)){x=0;fb(147,m|0,I<<1|0,0);B=x;x=0;if(B&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,K|0,0);B=x;x=0;if(B&1){C=27;break}B=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=B+I;L=B}else L=A;B=D+12|0;I=k[B>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){x=0;N=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;O=x;x=0;if(O&1){C=27;break}else P=N}else P=l[I>>0]|0;if(xhb(P&255,s,L,n,q,y,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[B>>2]|0;if((I|0)==(k[J>>2]|0)){x=0;Ba(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=x;x=0;if(J&1){C=27;break}else{z=D;A=L;continue}}else{k[B>>2]=I+1;z=D;A=L;continue}}if((C|0)==27){A=Hc()|0;Q=A;R=M;break}A=i[j>>0]|0;if((((A&1)==0?(A&255)>>>1:k[j+4>>2]|0)|0)!=0?(A=k[p>>2]|0,(A-o|0)<160):0){z=k[q>>2]|0;k[p>>2]=A+4;k[A>>2]=z}x=0;z=db(95,H|0,k[n>>2]|0,e|0,s|0)|0;A=x;x=0;if(!(A&1)){k[f>>2]=z;pob(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){x=0;z=Ba(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;A=x;x=0;if(A&1){C=28;break}if((z|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;z=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){x=0;A=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;y=x;x=0;if(y&1){C=28;break a}if((A|0)==-1){k[c>>2]=0;C=52;break}}if(!z)C=53}else C=52;while(0);if((C|0)==52?z:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;A=k[b>>2]|0;K2a(m);K2a(j);r=a;return A|0}else C=28}else C=28;while(0);if((C|0)==28){C=Hc()|0;Q=C;R=M}K2a(m);K2a(j);Sc(Q|0);return 0}function Kub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=gub(d)|0;Zhb(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,t|0,0);t=x;x=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;y=i[h>>0]|0;z=k[b>>2]|0;A=v;b:while(1){if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)){x=0;v=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;B=x;x=0;if(B&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=z}else D=z;else D=0;v=(D|0)==0;B=k[c>>2]|0;do if(B){if((k[B+12>>2]|0)!=(k[B+16>>2]|0))if(v){E=B;break}else{F=B;G=D;H=A;break b}x=0;I=Ba(k[(k[B>>2]|0)+36>>2]|0,B|0)|0;J=x;x=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=B;break}else{F=B;G=D;H=A;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=A;break}else E=0}B=i[m>>0]|0;I=(B&1)==0?(B&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(A+I|0)){x=0;fb(147,m|0,I<<1|0,0);B=x;x=0;if(B&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,K|0,0);B=x;x=0;if(B&1){C=27;break}B=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=B+I;L=B}else L=A;B=D+12|0;I=k[B>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){x=0;N=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;O=x;x=0;if(O&1){C=27;break}else P=N}else P=l[I>>0]|0;if(xhb(P&255,s,L,n,q,y,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[B>>2]|0;if((I|0)==(k[J>>2]|0)){x=0;Ba(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=x;x=0;if(J&1){C=27;break}else{z=D;A=L;continue}}else{k[B>>2]=I+1;z=D;A=L;continue}}if((C|0)==27){A=Hc()|0;Q=A;R=M;break}A=i[j>>0]|0;if((((A&1)==0?(A&255)>>>1:k[j+4>>2]|0)|0)!=0?(A=k[p>>2]|0,(A-o|0)<160):0){z=k[q>>2]|0;k[p>>2]=A+4;k[A>>2]=z}x=0;z=db(96,H|0,k[n>>2]|0,e|0,s|0)|0;A=x;x=0;if(!(A&1)){k[f>>2]=z;pob(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){x=0;z=Ba(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;A=x;x=0;if(A&1){C=28;break}if((z|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;z=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){x=0;A=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;y=x;x=0;if(y&1){C=28;break a}if((A|0)==-1){k[c>>2]=0;C=52;break}}if(!z)C=53}else C=52;while(0);if((C|0)==52?z:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;A=k[b>>2]|0;K2a(m);K2a(j);r=a;return A|0}else C=28}else C=28;while(0);if((C|0)==28){C=Hc()|0;Q=C;R=M}K2a(m);K2a(j);Sc(Q|0);return 0}function Lub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=gub(d)|0;Zhb(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,t|0,0);t=x;x=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;y=i[h>>0]|0;z=k[b>>2]|0;A=v;b:while(1){if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)){x=0;v=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;B=x;x=0;if(B&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=z}else D=z;else D=0;v=(D|0)==0;B=k[c>>2]|0;do if(B){if((k[B+12>>2]|0)!=(k[B+16>>2]|0))if(v){E=B;break}else{F=B;G=D;H=A;break b}x=0;I=Ba(k[(k[B>>2]|0)+36>>2]|0,B|0)|0;J=x;x=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=B;break}else{F=B;G=D;H=A;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=A;break}else E=0}B=i[m>>0]|0;I=(B&1)==0?(B&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(A+I|0)){x=0;fb(147,m|0,I<<1|0,0);B=x;x=0;if(B&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,K|0,0);B=x;x=0;if(B&1){C=27;break}B=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=B+I;L=B}else L=A;B=D+12|0;I=k[B>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){x=0;N=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;O=x;x=0;if(O&1){C=27;break}else P=N}else P=l[I>>0]|0;if(xhb(P&255,s,L,n,q,y,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[B>>2]|0;if((I|0)==(k[J>>2]|0)){x=0;Ba(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=x;x=0;if(J&1){C=27;break}else{z=D;A=L;continue}}else{k[B>>2]=I+1;z=D;A=L;continue}}if((C|0)==27){A=Hc()|0;Q=A;R=M;break}A=i[j>>0]|0;if((((A&1)==0?(A&255)>>>1:k[j+4>>2]|0)|0)!=0?(A=k[p>>2]|0,(A-o|0)<160):0){z=k[q>>2]|0;k[p>>2]=A+4;k[A>>2]=z}x=0;z=db(97,H|0,k[n>>2]|0,e|0,s|0)|0;A=M;y=x;x=0;if(!(y&1)){y=f;k[y>>2]=z;k[y+4>>2]=A;pob(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){x=0;A=Ba(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;y=x;x=0;if(y&1){C=28;break}if((A|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;A=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){x=0;y=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;z=x;x=0;if(z&1){C=28;break a}if((y|0)==-1){k[c>>2]=0;C=52;break}}if(!A)C=53}else C=52;while(0);if((C|0)==52?A:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;K2a(m);K2a(j);r=a;return y|0}else C=28}else C=28;while(0);if((C|0)==28){C=Hc()|0;Q=C;R=M}K2a(m);K2a(j);Sc(Q|0);return 0}function Mub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0;a=r;r=r+240|0;g=a+200|0;h=a+199|0;j=a+198|0;m=a+184|0;n=a+172|0;p=a+168|0;q=a+8|0;s=a+4|0;t=a;u=a+197|0;v=a+196|0;_hb(m,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[n+(d<<2)>>2]=0;d=d+1|0}if(!(i[n>>0]&1))w=10;else w=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,w|0,0);w=x;x=0;a:do if(!(w&1)){d=n+8|0;y=n+1|0;z=(i[n>>0]&1)==0?y:k[d>>2]|0;k[p>>2]=z;k[s>>2]=q;k[t>>2]=0;i[u>>0]=1;i[v>>0]=69;A=n+4|0;B=i[h>>0]|0;C=i[j>>0]|0;D=k[b>>2]|0;E=z;b:while(1){if(D)if((k[D+12>>2]|0)==(k[D+16>>2]|0)){x=0;z=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;F=x;x=0;if(F&1){G=27;break}if((z|0)==-1){k[b>>2]=0;H=0}else H=D}else H=D;else H=0;z=(H|0)==0;F=k[c>>2]|0;do if(F){if((k[F+12>>2]|0)!=(k[F+16>>2]|0))if(z){I=F;break}else{J=F;K=H;L=E;break b}x=0;N=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;O=x;x=0;if(O&1){G=27;break b}if((N|0)!=-1)if(z){I=F;break}else{J=F;K=H;L=E;break b}else{k[c>>2]=0;G=19;break}}else G=19;while(0);if((G|0)==19){G=0;if(z){J=0;K=H;L=E;break}else I=0}F=i[n>>0]|0;N=(F&1)==0?(F&255)>>>1:k[A>>2]|0;if((k[p>>2]|0)==(E+N|0)){x=0;fb(147,n|0,N<<1|0,0);F=x;x=0;if(F&1){G=27;break}if(!(i[n>>0]&1))P=10;else P=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,P|0,0);F=x;x=0;if(F&1){G=27;break}F=(i[n>>0]&1)==0?y:k[d>>2]|0;k[p>>2]=F+N;Q=F}else Q=E;F=H+12|0;N=k[F>>2]|0;O=H+16|0;if((N|0)==(k[O>>2]|0)){x=0;R=Ba(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;S=x;x=0;if(S&1){G=27;break}else T=R}else T=l[N>>0]|0;if($hb(T&255,u,v,Q,p,B,C,m,q,s,t,g)|0){J=I;K=H;L=Q;break}N=k[F>>2]|0;if((N|0)==(k[O>>2]|0)){x=0;Ba(k[(k[H>>2]|0)+40>>2]|0,H|0)|0;O=x;x=0;if(O&1){G=27;break}else{D=H;E=Q;continue}}else{k[F>>2]=N+1;D=H;E=Q;continue}}if((G|0)==27){E=Hc()|0;U=E;V=M;break}E=i[m>>0]|0;if(!((i[u>>0]|0)==0?1:(((E&1)==0?(E&255)>>>1:k[m+4>>2]|0)|0)==0)?(E=k[s>>2]|0,(E-q|0)<160):0){D=k[t>>2]|0;k[s>>2]=E+4;k[E>>2]=D}x=0;W=+Xa(42,L|0,k[p>>2]|0,e|0);D=x;x=0;if(!(D&1)){o[f>>2]=W;pob(m,q,k[s>>2]|0,e);if(K)if((k[K+12>>2]|0)==(k[K+16>>2]|0)){x=0;D=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;E=x;x=0;if(E&1){G=28;break}if((D|0)==-1){k[b>>2]=0;X=0}else X=K}else X=K;else X=0;D=(X|0)==0;do if(J){if((k[J+12>>2]|0)==(k[J+16>>2]|0)){x=0;E=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;C=x;x=0;if(C&1){G=28;break a}if((E|0)==-1){k[c>>2]=0;G=52;break}}if(!D)G=53}else G=52;while(0);if((G|0)==52?D:0)G=53;if((G|0)==53)k[e>>2]=k[e>>2]|2;E=k[b>>2]|0;K2a(n);K2a(m);r=a;return E|0}else G=28}else G=28;while(0);if((G|0)==28){G=Hc()|0;U=G;V=M}K2a(n);K2a(m);Sc(U|0);return 0}function Nub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0;a=r;r=r+240|0;g=a+200|0;h=a+199|0;j=a+198|0;m=a+184|0;n=a+172|0;o=a+168|0;q=a+8|0;s=a+4|0;t=a;u=a+197|0;v=a+196|0;_hb(m,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[n+(d<<2)>>2]=0;d=d+1|0}if(!(i[n>>0]&1))w=10;else w=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,w|0,0);w=x;x=0;a:do if(!(w&1)){d=n+8|0;y=n+1|0;z=(i[n>>0]&1)==0?y:k[d>>2]|0;k[o>>2]=z;k[s>>2]=q;k[t>>2]=0;i[u>>0]=1;i[v>>0]=69;A=n+4|0;B=i[h>>0]|0;C=i[j>>0]|0;D=k[b>>2]|0;E=z;b:while(1){if(D)if((k[D+12>>2]|0)==(k[D+16>>2]|0)){x=0;z=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;F=x;x=0;if(F&1){G=27;break}if((z|0)==-1){k[b>>2]=0;H=0}else H=D}else H=D;else H=0;z=(H|0)==0;F=k[c>>2]|0;do if(F){if((k[F+12>>2]|0)!=(k[F+16>>2]|0))if(z){I=F;break}else{J=F;K=H;L=E;break b}x=0;N=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;O=x;x=0;if(O&1){G=27;break b}if((N|0)!=-1)if(z){I=F;break}else{J=F;K=H;L=E;break b}else{k[c>>2]=0;G=19;break}}else G=19;while(0);if((G|0)==19){G=0;if(z){J=0;K=H;L=E;break}else I=0}F=i[n>>0]|0;N=(F&1)==0?(F&255)>>>1:k[A>>2]|0;if((k[o>>2]|0)==(E+N|0)){x=0;fb(147,n|0,N<<1|0,0);F=x;x=0;if(F&1){G=27;break}if(!(i[n>>0]&1))P=10;else P=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,P|0,0);F=x;x=0;if(F&1){G=27;break}F=(i[n>>0]&1)==0?y:k[d>>2]|0;k[o>>2]=F+N;Q=F}else Q=E;F=H+12|0;N=k[F>>2]|0;O=H+16|0;if((N|0)==(k[O>>2]|0)){x=0;R=Ba(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;S=x;x=0;if(S&1){G=27;break}else T=R}else T=l[N>>0]|0;if($hb(T&255,u,v,Q,o,B,C,m,q,s,t,g)|0){J=I;K=H;L=Q;break}N=k[F>>2]|0;if((N|0)==(k[O>>2]|0)){x=0;Ba(k[(k[H>>2]|0)+40>>2]|0,H|0)|0;O=x;x=0;if(O&1){G=27;break}else{D=H;E=Q;continue}}else{k[F>>2]=N+1;D=H;E=Q;continue}}if((G|0)==27){E=Hc()|0;U=E;V=M;break}E=i[m>>0]|0;if(!((i[u>>0]|0)==0?1:(((E&1)==0?(E&255)>>>1:k[m+4>>2]|0)|0)==0)?(E=k[s>>2]|0,(E-q|0)<160):0){D=k[t>>2]|0;k[s>>2]=E+4;k[E>>2]=D}x=0;W=+Xa(43,L|0,k[o>>2]|0,e|0);D=x;x=0;if(!(D&1)){p[f>>3]=W;pob(m,q,k[s>>2]|0,e);if(K)if((k[K+12>>2]|0)==(k[K+16>>2]|0)){x=0;D=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;E=x;x=0;if(E&1){G=28;break}if((D|0)==-1){k[b>>2]=0;X=0}else X=K}else X=K;else X=0;D=(X|0)==0;do if(J){if((k[J+12>>2]|0)==(k[J+16>>2]|0)){x=0;E=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;C=x;x=0;if(C&1){G=28;break a}if((E|0)==-1){k[c>>2]=0;G=52;break}}if(!D)G=53}else G=52;while(0);if((G|0)==52?D:0)G=53;if((G|0)==53)k[e>>2]=k[e>>2]|2;E=k[b>>2]|0;K2a(n);K2a(m);r=a;return E|0}else G=28}else G=28;while(0);if((G|0)==28){G=Hc()|0;U=G;V=M}K2a(n);K2a(m);Sc(U|0);return 0}function Oub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0;a=r;r=r+240|0;g=a+200|0;h=a+199|0;j=a+198|0;m=a+184|0;n=a+172|0;o=a+168|0;q=a+8|0;s=a+4|0;t=a;u=a+197|0;v=a+196|0;_hb(m,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[n+(d<<2)>>2]=0;d=d+1|0}if(!(i[n>>0]&1))w=10;else w=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,w|0,0);w=x;x=0;a:do if(!(w&1)){d=n+8|0;y=n+1|0;z=(i[n>>0]&1)==0?y:k[d>>2]|0;k[o>>2]=z;k[s>>2]=q;k[t>>2]=0;i[u>>0]=1;i[v>>0]=69;A=n+4|0;B=i[h>>0]|0;C=i[j>>0]|0;D=k[b>>2]|0;E=z;b:while(1){if(D)if((k[D+12>>2]|0)==(k[D+16>>2]|0)){x=0;z=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;F=x;x=0;if(F&1){G=27;break}if((z|0)==-1){k[b>>2]=0;H=0}else H=D}else H=D;else H=0;z=(H|0)==0;F=k[c>>2]|0;do if(F){if((k[F+12>>2]|0)!=(k[F+16>>2]|0))if(z){I=F;break}else{J=F;K=H;L=E;break b}x=0;N=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;O=x;x=0;if(O&1){G=27;break b}if((N|0)!=-1)if(z){I=F;break}else{J=F;K=H;L=E;break b}else{k[c>>2]=0;G=19;break}}else G=19;while(0);if((G|0)==19){G=0;if(z){J=0;K=H;L=E;break}else I=0}F=i[n>>0]|0;N=(F&1)==0?(F&255)>>>1:k[A>>2]|0;if((k[o>>2]|0)==(E+N|0)){x=0;fb(147,n|0,N<<1|0,0);F=x;x=0;if(F&1){G=27;break}if(!(i[n>>0]&1))P=10;else P=(k[n>>2]&-2)+-1|0;x=0;fb(147,n|0,P|0,0);F=x;x=0;if(F&1){G=27;break}F=(i[n>>0]&1)==0?y:k[d>>2]|0;k[o>>2]=F+N;Q=F}else Q=E;F=H+12|0;N=k[F>>2]|0;O=H+16|0;if((N|0)==(k[O>>2]|0)){x=0;R=Ba(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;S=x;x=0;if(S&1){G=27;break}else T=R}else T=l[N>>0]|0;if($hb(T&255,u,v,Q,o,B,C,m,q,s,t,g)|0){J=I;K=H;L=Q;break}N=k[F>>2]|0;if((N|0)==(k[O>>2]|0)){x=0;Ba(k[(k[H>>2]|0)+40>>2]|0,H|0)|0;O=x;x=0;if(O&1){G=27;break}else{D=H;E=Q;continue}}else{k[F>>2]=N+1;D=H;E=Q;continue}}if((G|0)==27){E=Hc()|0;U=E;V=M;break}E=i[m>>0]|0;if(!((i[u>>0]|0)==0?1:(((E&1)==0?(E&255)>>>1:k[m+4>>2]|0)|0)==0)?(E=k[s>>2]|0,(E-q|0)<160):0){D=k[t>>2]|0;k[s>>2]=E+4;k[E>>2]=D}x=0;W=+Xa(44,L|0,k[o>>2]|0,e|0);D=x;x=0;if(!(D&1)){p[f>>3]=W;pob(m,q,k[s>>2]|0,e);if(K)if((k[K+12>>2]|0)==(k[K+16>>2]|0)){x=0;D=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;E=x;x=0;if(E&1){G=28;break}if((D|0)==-1){k[b>>2]=0;X=0}else X=K}else X=K;else X=0;D=(X|0)==0;do if(J){if((k[J+12>>2]|0)==(k[J+16>>2]|0)){x=0;E=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;C=x;x=0;if(C&1){G=28;break a}if((E|0)==-1){k[c>>2]=0;G=52;break}}if(!D)G=53}else G=52;while(0);if((G|0)==52?D:0)G=53;if((G|0)==53)k[e>>2]=k[e>>2]|2;E=k[b>>2]|0;K2a(n);K2a(m);r=a;return E|0}else G=28}else G=28;while(0);if((G|0)==28){G=Hc()|0;U=G;V=M}K2a(n);K2a(m);Sc(U|0);return 0}function Pub(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=d;d=ZKa(b)|0;b=TRa(a,c,f)|0;if((d|0)!=0?(x=0,Ba(635,d|0)|0,d=x,x=0,d&1):0){d=Hc(0)|0;Fg(d)}r=e;return b|0}function Qub(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;h=r;r=r+112|0;j=h;l=(d-c|0)/12|0;do if(l>>>0>100){m=xYa(l)|0;if((m|0)==0?(x=0,hb(55),n=x,x=0,n&1):0){o=0;p=6;break}q=m;s=m;p=11}else{q=0;s=j;p=11}while(0);a:do if((p|0)==11){j=c;m=0;n=l;t=s;while(1){if((j|0)==(d|0)){u=m;v=n;break}w=i[j>>0]|0;if(!(w&1))y=(w&255)>>>1;else y=k[j+4>>2]|0;if(!y){i[t>>0]=2;z=m+1|0;A=n+-1|0}else{i[t>>0]=1;z=m;A=n}j=j+12|0;m=z;n=A;t=t+1|0}t=0;n=u;m=v;b:while(1){j=k[a>>2]|0;do if(j){w=k[j+12>>2]|0;if((w|0)==(k[j+16>>2]|0)){x=0;B=Ba(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;C=x;x=0;if(C&1){p=5;break b}else D=B}else D=k[w>>2]|0;if((D|0)==-1){k[a>>2]=0;E=1;break}else{E=(k[a>>2]|0)==0;break}}else E=1;while(0);j=k[b>>2]|0;if(j){w=k[j+12>>2]|0;if((w|0)==(k[j+16>>2]|0)){x=0;B=Ba(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;C=x;x=0;if(C&1){p=5;break}else F=B}else F=k[w>>2]|0;if((F|0)==-1){k[b>>2]=0;G=0;H=1}else{G=j;H=0}}else{G=0;H=1}j=k[a>>2]|0;if(!((m|0)!=0&(E^H))){I=j;J=G;p=35;break}w=k[j+12>>2]|0;if((w|0)==(k[j+16>>2]|0)){x=0;B=Ba(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;j=x;x=0;if(j&1){p=5;break}else K=B}else K=k[w>>2]|0;if(!g){x=0;w=Ta(k[(k[e>>2]|0)+28>>2]|0,e|0,K|0)|0;B=x;x=0;if(B&1){p=5;break}else L=w}else L=K;w=t+1|0;B=0;j=c;C=n;N=m;O=s;while(1){if((j|0)==(d|0))break;do if((i[O>>0]|0)==1){if(!(i[j>>0]&1))P=j+4|0;else P=k[j+8>>2]|0;Q=k[P+(t<<2)>>2]|0;if(!g){x=0;R=Ta(k[(k[e>>2]|0)+28>>2]|0,e|0,Q|0)|0;S=x;x=0;if(S&1){p=4;break b}else T=R}else T=Q;if((L|0)!=(T|0)){i[O>>0]=0;U=B;V=C;W=N+-1|0;break}Q=i[j>>0]|0;if(!(Q&1))X=(Q&255)>>>1;else X=k[j+4>>2]|0;if((X|0)==(w|0)){i[O>>0]=2;U=1;V=C+1|0;W=N+-1|0}else{U=1;V=C;W=N}}else{U=B;V=C;W=N}while(0);B=U;j=j+12|0;C=V;N=W;O=O+1|0}if(!B){t=w;n=C;m=N;continue}O=k[a>>2]|0;j=O+12|0;Q=k[j>>2]|0;if((Q|0)==(k[O+16>>2]|0)){x=0;Ba(k[(k[O>>2]|0)+40>>2]|0,O|0)|0;O=x;x=0;if(O&1){p=5;break}}else k[j>>2]=Q+4;if((C+N|0)>>>0>1){Y=c;Z=C;_=s}else{t=w;n=C;m=N;continue}while(1){if((Y|0)==(d|0)){t=w;n=Z;m=N;continue b}if((i[_>>0]|0)==2){Q=i[Y>>0]|0;if(!(Q&1))$=(Q&255)>>>1;else $=k[Y+4>>2]|0;if(($|0)!=(w|0)){i[_>>0]=0;aa=Z+-1|0}else aa=Z}else aa=Z;Y=Y+12|0;Z=aa;_=_+1|0}}if((p|0)==4){m=Hc()|0;ba=q;ca=m;da=M;break}else if((p|0)==5){m=Hc()|0;ba=q;ca=m;da=M;break}else if((p|0)==35){do if(I){m=k[I+12>>2]|0;if((m|0)==(k[I+16>>2]|0)){x=0;n=Ba(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;t=x;x=0;if(t&1){o=q;p=6;break a}else ea=n}else ea=k[m>>2]|0;if((ea|0)==-1){k[a>>2]=0;fa=1;break}else{fa=(k[a>>2]|0)==0;break}}else fa=1;while(0);do if(J){m=k[J+12>>2]|0;if((m|0)==(k[J+16>>2]|0)){x=0;n=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;t=x;x=0;if(t&1){o=q;p=6;break a}else ga=n}else ga=k[m>>2]|0;if((ga|0)!=-1)if(fa){ha=c;ia=s;break}else{p=84;break}else{k[b>>2]=0;p=82;break}}else p=82;while(0);if((p|0)==82)if(fa)p=84;else{ha=c;ia=s}if((p|0)==84){k[f>>2]=k[f>>2]|2;ha=c;ia=s}while(1){if((ha|0)==(d|0)){p=88;break}if((i[ia>>0]|0)==2){ja=ha;break}ha=ha+12|0;ia=ia+1|0}if((p|0)==88){k[f>>2]=k[f>>2]|4;ja=d}if(q)yYa(q);r=h;return ja|0}}while(0);if((p|0)==6){p=Hc()|0;ba=o;ca=p;da=M}if(ba)yYa(ba);Sc(ca|0);return 0}function Rub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=gub(d)|0;aib(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,s|0,0);s=x;x=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;y=k[b>>2]|0;z=u;b:while(1){if(y){u=k[y+12>>2]|0;if((u|0)==(k[y+16>>2]|0)){x=0;A=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;B=x;x=0;if(B&1){C=28;break}else D=A}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=y;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){A=k[u+12>>2]|0;if((A|0)==(k[u+16>>2]|0)){x=0;B=Ba(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=x;x=0;if(G&1){C=28;break b}else H=B}else H=k[A>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=z;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=z;break}else I=0}u=i[l>>0]|0;A=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(z+A|0)){x=0;fb(147,l|0,A<<1|0,0);u=x;x=0;if(u&1){C=28;break}if(!(i[l>>0]&1))N=10;else N=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,N|0,0);u=x;x=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+A;O=u}else O=z;u=E+12|0;A=k[u>>2]|0;B=E+16|0;if((A|0)==(k[B>>2]|0)){x=0;G=Ba(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;P=x;x=0;if(P&1){C=28;break}else Q=G}else Q=k[A>>2]|0;if(Yhb(Q,q,O,m,p,w,j,n,o,g)|0){J=I;K=E;L=O;break}A=k[u>>2]|0;if((A|0)==(k[B>>2]|0)){x=0;Ba(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;B=x;x=0;if(B&1){C=28;break}else{y=E;z=O;continue}}else{k[u>>2]=A+4;y=E;z=O;continue}}if((C|0)==28){z=Hc()|0;R=z;S=M;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[o>>2]|0,(z-n|0)<160):0){y=k[p>>2]|0;k[o>>2]=z+4;k[z>>2]=y}x=0;y=db(92,L|0,k[m>>2]|0,e|0,q|0)|0;z=x;x=0;if(!(z&1)){k[f>>2]=y;pob(j,n,k[o>>2]|0,e);if(K){y=k[K+12>>2]|0;if((y|0)==(k[K+16>>2]|0)){x=0;z=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;w=x;x=0;if(w&1){C=29;break}else T=z}else T=k[y>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){y=k[J+12>>2]|0;if((y|0)==(k[J+16>>2]|0)){x=0;z=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;w=x;x=0;if(w&1){C=29;break a}else V=z}else V=k[y>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;K2a(l);K2a(j);r=a;return y|0}else C=29}else C=29;while(0);if((C|0)==29){C=Hc()|0;R=C;S=M}K2a(l);K2a(j);Sc(R|0);return 0}function Sub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=gub(d)|0;aib(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,s|0,0);s=x;x=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;y=k[b>>2]|0;z=u;b:while(1){if(y){u=k[y+12>>2]|0;if((u|0)==(k[y+16>>2]|0)){x=0;A=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;B=x;x=0;if(B&1){C=28;break}else D=A}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=y;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){A=k[u+12>>2]|0;if((A|0)==(k[u+16>>2]|0)){x=0;B=Ba(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=x;x=0;if(G&1){C=28;break b}else H=B}else H=k[A>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=z;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=z;break}else I=0}u=i[l>>0]|0;A=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(z+A|0)){x=0;fb(147,l|0,A<<1|0,0);u=x;x=0;if(u&1){C=28;break}if(!(i[l>>0]&1))N=10;else N=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,N|0,0);u=x;x=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+A;O=u}else O=z;u=E+12|0;A=k[u>>2]|0;B=E+16|0;if((A|0)==(k[B>>2]|0)){x=0;G=Ba(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;P=x;x=0;if(P&1){C=28;break}else Q=G}else Q=k[A>>2]|0;if(Yhb(Q,q,O,m,p,w,j,n,o,g)|0){J=I;K=E;L=O;break}A=k[u>>2]|0;if((A|0)==(k[B>>2]|0)){x=0;Ba(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;B=x;x=0;if(B&1){C=28;break}else{y=E;z=O;continue}}else{k[u>>2]=A+4;y=E;z=O;continue}}if((C|0)==28){z=Hc()|0;R=z;S=M;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[o>>2]|0,(z-n|0)<160):0){y=k[p>>2]|0;k[o>>2]=z+4;k[z>>2]=y}x=0;y=db(93,L|0,k[m>>2]|0,e|0,q|0)|0;z=M;w=x;x=0;if(!(w&1)){w=f;k[w>>2]=y;k[w+4>>2]=z;pob(j,n,k[o>>2]|0,e);if(K){z=k[K+12>>2]|0;if((z|0)==(k[K+16>>2]|0)){x=0;w=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;y=x;x=0;if(y&1){C=29;break}else T=w}else T=k[z>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){z=k[J+12>>2]|0;if((z|0)==(k[J+16>>2]|0)){x=0;w=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;y=x;x=0;if(y&1){C=29;break a}else V=w}else V=k[z>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;z=k[b>>2]|0;K2a(l);K2a(j);r=a;return z|0}else C=29}else C=29;while(0);if((C|0)==29){C=Hc()|0;R=C;S=M}K2a(l);K2a(j);Sc(R|0);return 0}function Tub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;l=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=gub(d)|0;aib(l,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,t|0,0);t=x;x=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;y=k[h>>2]|0;z=k[b>>2]|0;A=v;b:while(1){if(z){v=k[z+12>>2]|0;if((v|0)==(k[z+16>>2]|0)){x=0;B=Ba(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;C=x;x=0;if(C&1){D=28;break}else E=B}else E=k[v>>2]|0;if((E|0)==-1){k[b>>2]=0;F=0;G=1}else{F=z;G=0}}else{F=0;G=1}v=k[c>>2]|0;do if(v){B=k[v+12>>2]|0;if((B|0)==(k[v+16>>2]|0)){x=0;C=Ba(k[(k[v>>2]|0)+36>>2]|0,v|0)|0;H=x;x=0;if(H&1){D=28;break b}else I=C}else I=k[B>>2]|0;if((I|0)!=-1)if(G){J=v;break}else{K=v;L=F;N=A;break b}else{k[c>>2]=0;D=20;break}}else D=20;while(0);if((D|0)==20){D=0;if(G){K=0;L=F;N=A;break}else J=0}v=i[m>>0]|0;B=(v&1)==0?(v&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(A+B|0)){x=0;fb(147,m|0,B<<1|0,0);v=x;x=0;if(v&1){D=28;break}if(!(i[m>>0]&1))O=10;else O=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,O|0,0);v=x;x=0;if(v&1){D=28;break}v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v+B;P=v}else P=A;v=F+12|0;B=k[v>>2]|0;C=F+16|0;if((B|0)==(k[C>>2]|0)){x=0;H=Ba(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;Q=x;x=0;if(Q&1){D=28;break}else R=H}else R=k[B>>2]|0;if(Yhb(R,s,P,n,q,y,l,o,p,g)|0){K=J;L=F;N=P;break}B=k[v>>2]|0;if((B|0)==(k[C>>2]|0)){x=0;Ba(k[(k[F>>2]|0)+40>>2]|0,F|0)|0;C=x;x=0;if(C&1){D=28;break}else{z=F;A=P;continue}}else{k[v>>2]=B+4;z=F;A=P;continue}}if((D|0)==28){A=Hc()|0;S=A;T=M;break}A=i[l>>0]|0;if((((A&1)==0?(A&255)>>>1:k[l+4>>2]|0)|0)!=0?(A=k[p>>2]|0,(A-o|0)<160):0){z=k[q>>2]|0;k[p>>2]=A+4;k[A>>2]=z}x=0;z=db(94,N|0,k[n>>2]|0,e|0,s|0)|0;A=x;x=0;if(!(A&1)){j[f>>1]=z;pob(l,o,k[p>>2]|0,e);if(L){z=k[L+12>>2]|0;if((z|0)==(k[L+16>>2]|0)){x=0;A=Ba(k[(k[L>>2]|0)+36>>2]|0,L|0)|0;y=x;x=0;if(y&1){D=29;break}else U=A}else U=k[z>>2]|0;if((U|0)==-1){k[b>>2]=0;V=1}else V=0}else V=1;do if(K){z=k[K+12>>2]|0;if((z|0)==(k[K+16>>2]|0)){x=0;A=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;y=x;x=0;if(y&1){D=29;break a}else W=A}else W=k[z>>2]|0;if((W|0)!=-1)if(V)break;else{D=56;break}else{k[c>>2]=0;D=54;break}}else D=54;while(0);if((D|0)==54?V:0)D=56;if((D|0)==56)k[e>>2]=k[e>>2]|2;z=k[b>>2]|0;K2a(m);K2a(l);r=a;return z|0}else D=29}else D=29;while(0);if((D|0)==29){D=Hc()|0;S=D;T=M}K2a(m);K2a(l);Sc(S|0);return 0}function Uub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=gub(d)|0;aib(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,s|0,0);s=x;x=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;y=k[b>>2]|0;z=u;b:while(1){if(y){u=k[y+12>>2]|0;if((u|0)==(k[y+16>>2]|0)){x=0;A=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;B=x;x=0;if(B&1){C=28;break}else D=A}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=y;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){A=k[u+12>>2]|0;if((A|0)==(k[u+16>>2]|0)){x=0;B=Ba(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=x;x=0;if(G&1){C=28;break b}else H=B}else H=k[A>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=z;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=z;break}else I=0}u=i[l>>0]|0;A=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(z+A|0)){x=0;fb(147,l|0,A<<1|0,0);u=x;x=0;if(u&1){C=28;break}if(!(i[l>>0]&1))N=10;else N=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,N|0,0);u=x;x=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+A;O=u}else O=z;u=E+12|0;A=k[u>>2]|0;B=E+16|0;if((A|0)==(k[B>>2]|0)){x=0;G=Ba(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;P=x;x=0;if(P&1){C=28;break}else Q=G}else Q=k[A>>2]|0;if(Yhb(Q,q,O,m,p,w,j,n,o,g)|0){J=I;K=E;L=O;break}A=k[u>>2]|0;if((A|0)==(k[B>>2]|0)){x=0;Ba(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;B=x;x=0;if(B&1){C=28;break}else{y=E;z=O;continue}}else{k[u>>2]=A+4;y=E;z=O;continue}}if((C|0)==28){z=Hc()|0;R=z;S=M;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[o>>2]|0,(z-n|0)<160):0){y=k[p>>2]|0;k[o>>2]=z+4;k[z>>2]=y}x=0;y=db(95,L|0,k[m>>2]|0,e|0,q|0)|0;z=x;x=0;if(!(z&1)){k[f>>2]=y;pob(j,n,k[o>>2]|0,e);if(K){y=k[K+12>>2]|0;if((y|0)==(k[K+16>>2]|0)){x=0;z=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;w=x;x=0;if(w&1){C=29;break}else T=z}else T=k[y>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){y=k[J+12>>2]|0;if((y|0)==(k[J+16>>2]|0)){x=0;z=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;w=x;x=0;if(w&1){C=29;break a}else V=z}else V=k[y>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;K2a(l);K2a(j);r=a;return y|0}else C=29}else C=29;while(0);if((C|0)==29){C=Hc()|0;R=C;S=M}K2a(l);K2a(j);Sc(R|0);return 0}function Vub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=gub(d)|0;aib(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,s|0,0);s=x;x=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;y=k[b>>2]|0;z=u;b:while(1){if(y){u=k[y+12>>2]|0;if((u|0)==(k[y+16>>2]|0)){x=0;A=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;B=x;x=0;if(B&1){C=28;break}else D=A}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=y;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){A=k[u+12>>2]|0;if((A|0)==(k[u+16>>2]|0)){x=0;B=Ba(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=x;x=0;if(G&1){C=28;break b}else H=B}else H=k[A>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=z;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=z;break}else I=0}u=i[l>>0]|0;A=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(z+A|0)){x=0;fb(147,l|0,A<<1|0,0);u=x;x=0;if(u&1){C=28;break}if(!(i[l>>0]&1))N=10;else N=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,N|0,0);u=x;x=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+A;O=u}else O=z;u=E+12|0;A=k[u>>2]|0;B=E+16|0;if((A|0)==(k[B>>2]|0)){x=0;G=Ba(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;P=x;x=0;if(P&1){C=28;break}else Q=G}else Q=k[A>>2]|0;if(Yhb(Q,q,O,m,p,w,j,n,o,g)|0){J=I;K=E;L=O;break}A=k[u>>2]|0;if((A|0)==(k[B>>2]|0)){x=0;Ba(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;B=x;x=0;if(B&1){C=28;break}else{y=E;z=O;continue}}else{k[u>>2]=A+4;y=E;z=O;continue}}if((C|0)==28){z=Hc()|0;R=z;S=M;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[o>>2]|0,(z-n|0)<160):0){y=k[p>>2]|0;k[o>>2]=z+4;k[z>>2]=y}x=0;y=db(96,L|0,k[m>>2]|0,e|0,q|0)|0;z=x;x=0;if(!(z&1)){k[f>>2]=y;pob(j,n,k[o>>2]|0,e);if(K){y=k[K+12>>2]|0;if((y|0)==(k[K+16>>2]|0)){x=0;z=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;w=x;x=0;if(w&1){C=29;break}else T=z}else T=k[y>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){y=k[J+12>>2]|0;if((y|0)==(k[J+16>>2]|0)){x=0;z=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;w=x;x=0;if(w&1){C=29;break a}else V=z}else V=k[y>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;K2a(l);K2a(j);r=a;return y|0}else C=29}else C=29;while(0);if((C|0)==29){C=Hc()|0;R=C;S=M}K2a(l);K2a(j);Sc(R|0);return 0}function Wub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=gub(d)|0;aib(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,s|0,0);s=x;x=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;y=k[b>>2]|0;z=u;b:while(1){if(y){u=k[y+12>>2]|0;if((u|0)==(k[y+16>>2]|0)){x=0;A=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;B=x;x=0;if(B&1){C=28;break}else D=A}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=y;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){A=k[u+12>>2]|0;if((A|0)==(k[u+16>>2]|0)){x=0;B=Ba(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=x;x=0;if(G&1){C=28;break b}else H=B}else H=k[A>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=z;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=z;break}else I=0}u=i[l>>0]|0;A=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(z+A|0)){x=0;fb(147,l|0,A<<1|0,0);u=x;x=0;if(u&1){C=28;break}if(!(i[l>>0]&1))N=10;else N=(k[l>>2]&-2)+-1|0;x=0;fb(147,l|0,N|0,0);u=x;x=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+A;O=u}else O=z;u=E+12|0;A=k[u>>2]|0;B=E+16|0;if((A|0)==(k[B>>2]|0)){x=0;G=Ba(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;P=x;x=0;if(P&1){C=28;break}else Q=G}else Q=k[A>>2]|0;if(Yhb(Q,q,O,m,p,w,j,n,o,g)|0){J=I;K=E;L=O;break}A=k[u>>2]|0;if((A|0)==(k[B>>2]|0)){x=0;Ba(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;B=x;x=0;if(B&1){C=28;break}else{y=E;z=O;continue}}else{k[u>>2]=A+4;y=E;z=O;continue}}if((C|0)==28){z=Hc()|0;R=z;S=M;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[o>>2]|0,(z-n|0)<160):0){y=k[p>>2]|0;k[o>>2]=z+4;k[z>>2]=y}x=0;y=db(97,L|0,k[m>>2]|0,e|0,q|0)|0;z=M;w=x;x=0;if(!(w&1)){w=f;k[w>>2]=y;k[w+4>>2]=z;pob(j,n,k[o>>2]|0,e);if(K){z=k[K+12>>2]|0;if((z|0)==(k[K+16>>2]|0)){x=0;w=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;y=x;x=0;if(y&1){C=29;break}else T=w}else T=k[z>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){z=k[J+12>>2]|0;if((z|0)==(k[J+16>>2]|0)){x=0;w=Ba(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;y=x;x=0;if(y&1){C=29;break a}else V=w}else V=k[z>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;z=k[b>>2]|0;K2a(l);K2a(j);r=a;return z|0}else C=29}else C=29;while(0);if((C|0)==29){C=Hc()|0;R=C;S=M}K2a(l);K2a(j);Sc(R|0);return 0}function Xub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0,Z=0,_=0;a=r;r=r+352|0;g=a+208|0;h=a+200|0;j=a+196|0;l=a+184|0;m=a+172|0;n=a+168|0;p=a+8|0;q=a+4|0;s=a;t=a+337|0;u=a+336|0;bib(l,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))v=10;else v=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,v|0,0);v=x;x=0;a:do if(!(v&1)){d=m+8|0;w=m+1|0;y=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=y;k[q>>2]=p;k[s>>2]=0;i[t>>0]=1;i[u>>0]=69;z=m+4|0;A=k[h>>2]|0;B=k[j>>2]|0;C=k[b>>2]|0;D=y;b:while(1){if(C){y=k[C+12>>2]|0;if((y|0)==(k[C+16>>2]|0)){x=0;E=Ba(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;F=x;x=0;if(F&1){G=28;break}else H=E}else H=k[y>>2]|0;if((H|0)==-1){k[b>>2]=0;I=0;J=1}else{I=C;J=0}}else{I=0;J=1}y=k[c>>2]|0;do if(y){E=k[y+12>>2]|0;if((E|0)==(k[y+16>>2]|0)){x=0;F=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;K=x;x=0;if(K&1){G=28;break b}else L=F}else L=k[E>>2]|0;if((L|0)!=-1)if(J){N=y;break}else{O=y;P=I;Q=D;break b}else{k[c>>2]=0;G=20;break}}else G=20;while(0);if((G|0)==20){G=0;if(J){O=0;P=I;Q=D;break}else N=0}y=i[m>>0]|0;E=(y&1)==0?(y&255)>>>1:k[z>>2]|0;if((k[n>>2]|0)==(D+E|0)){x=0;fb(147,m|0,E<<1|0,0);y=x;x=0;if(y&1){G=28;break}if(!(i[m>>0]&1))R=10;else R=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,R|0,0);y=x;x=0;if(y&1){G=28;break}y=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=y+E;S=y}else S=D;y=I+12|0;E=k[y>>2]|0;F=I+16|0;if((E|0)==(k[F>>2]|0)){x=0;K=Ba(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;T=x;x=0;if(T&1){G=28;break}else U=K}else U=k[E>>2]|0;if(cib(U,t,u,S,n,A,B,l,p,q,s,g)|0){O=N;P=I;Q=S;break}E=k[y>>2]|0;if((E|0)==(k[F>>2]|0)){x=0;Ba(k[(k[I>>2]|0)+40>>2]|0,I|0)|0;F=x;x=0;if(F&1){G=28;break}else{C=I;D=S;continue}}else{k[y>>2]=E+4;C=I;D=S;continue}}if((G|0)==28){D=Hc()|0;V=D;W=M;break}D=i[l>>0]|0;if(!((i[t>>0]|0)==0?1:(((D&1)==0?(D&255)>>>1:k[l+4>>2]|0)|0)==0)?(D=k[q>>2]|0,(D-p|0)<160):0){C=k[s>>2]|0;k[q>>2]=D+4;k[D>>2]=C}x=0;X=+Xa(42,Q|0,k[n>>2]|0,e|0);C=x;x=0;if(!(C&1)){o[f>>2]=X;pob(l,p,k[q>>2]|0,e);if(P){C=k[P+12>>2]|0;if((C|0)==(k[P+16>>2]|0)){x=0;D=Ba(k[(k[P>>2]|0)+36>>2]|0,P|0)|0;B=x;x=0;if(B&1){G=29;break}else Y=D}else Y=k[C>>2]|0;if((Y|0)==-1){k[b>>2]=0;Z=1}else Z=0}else Z=1;do if(O){C=k[O+12>>2]|0;if((C|0)==(k[O+16>>2]|0)){x=0;D=Ba(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;B=x;x=0;if(B&1){G=29;break a}else _=D}else _=k[C>>2]|0;if((_|0)!=-1)if(Z)break;else{G=56;break}else{k[c>>2]=0;G=54;break}}else G=54;while(0);if((G|0)==54?Z:0)G=56;if((G|0)==56)k[e>>2]=k[e>>2]|2;C=k[b>>2]|0;K2a(m);K2a(l);r=a;return C|0}else G=29}else G=29;while(0);if((G|0)==29){G=Hc()|0;V=G;W=M}K2a(m);K2a(l);Sc(V|0);return 0}function Yub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0,Z=0,_=0;a=r;r=r+352|0;g=a+208|0;h=a+200|0;j=a+196|0;l=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;q=a+4|0;s=a;t=a+337|0;u=a+336|0;bib(l,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))v=10;else v=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,v|0,0);v=x;x=0;a:do if(!(v&1)){d=m+8|0;w=m+1|0;y=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=y;k[q>>2]=o;k[s>>2]=0;i[t>>0]=1;i[u>>0]=69;z=m+4|0;A=k[h>>2]|0;B=k[j>>2]|0;C=k[b>>2]|0;D=y;b:while(1){if(C){y=k[C+12>>2]|0;if((y|0)==(k[C+16>>2]|0)){x=0;E=Ba(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;F=x;x=0;if(F&1){G=28;break}else H=E}else H=k[y>>2]|0;if((H|0)==-1){k[b>>2]=0;I=0;J=1}else{I=C;J=0}}else{I=0;J=1}y=k[c>>2]|0;do if(y){E=k[y+12>>2]|0;if((E|0)==(k[y+16>>2]|0)){x=0;F=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;K=x;x=0;if(K&1){G=28;break b}else L=F}else L=k[E>>2]|0;if((L|0)!=-1)if(J){N=y;break}else{O=y;P=I;Q=D;break b}else{k[c>>2]=0;G=20;break}}else G=20;while(0);if((G|0)==20){G=0;if(J){O=0;P=I;Q=D;break}else N=0}y=i[m>>0]|0;E=(y&1)==0?(y&255)>>>1:k[z>>2]|0;if((k[n>>2]|0)==(D+E|0)){x=0;fb(147,m|0,E<<1|0,0);y=x;x=0;if(y&1){G=28;break}if(!(i[m>>0]&1))R=10;else R=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,R|0,0);y=x;x=0;if(y&1){G=28;break}y=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=y+E;S=y}else S=D;y=I+12|0;E=k[y>>2]|0;F=I+16|0;if((E|0)==(k[F>>2]|0)){x=0;K=Ba(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;T=x;x=0;if(T&1){G=28;break}else U=K}else U=k[E>>2]|0;if(cib(U,t,u,S,n,A,B,l,o,q,s,g)|0){O=N;P=I;Q=S;break}E=k[y>>2]|0;if((E|0)==(k[F>>2]|0)){x=0;Ba(k[(k[I>>2]|0)+40>>2]|0,I|0)|0;F=x;x=0;if(F&1){G=28;break}else{C=I;D=S;continue}}else{k[y>>2]=E+4;C=I;D=S;continue}}if((G|0)==28){D=Hc()|0;V=D;W=M;break}D=i[l>>0]|0;if(!((i[t>>0]|0)==0?1:(((D&1)==0?(D&255)>>>1:k[l+4>>2]|0)|0)==0)?(D=k[q>>2]|0,(D-o|0)<160):0){C=k[s>>2]|0;k[q>>2]=D+4;k[D>>2]=C}x=0;X=+Xa(43,Q|0,k[n>>2]|0,e|0);C=x;x=0;if(!(C&1)){p[f>>3]=X;pob(l,o,k[q>>2]|0,e);if(P){C=k[P+12>>2]|0;if((C|0)==(k[P+16>>2]|0)){x=0;D=Ba(k[(k[P>>2]|0)+36>>2]|0,P|0)|0;B=x;x=0;if(B&1){G=29;break}else Y=D}else Y=k[C>>2]|0;if((Y|0)==-1){k[b>>2]=0;Z=1}else Z=0}else Z=1;do if(O){C=k[O+12>>2]|0;if((C|0)==(k[O+16>>2]|0)){x=0;D=Ba(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;B=x;x=0;if(B&1){G=29;break a}else _=D}else _=k[C>>2]|0;if((_|0)!=-1)if(Z)break;else{G=56;break}else{k[c>>2]=0;G=54;break}}else G=54;while(0);if((G|0)==54?Z:0)G=56;if((G|0)==56)k[e>>2]=k[e>>2]|2;C=k[b>>2]|0;K2a(m);K2a(l);r=a;return C|0}else G=29}else G=29;while(0);if((G|0)==29){G=Hc()|0;V=G;W=M}K2a(m);K2a(l);Sc(V|0);return 0}function Zub(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0,Z=0,_=0;a=r;r=r+352|0;g=a+208|0;h=a+200|0;j=a+196|0;l=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;q=a+4|0;s=a;t=a+337|0;u=a+336|0;bib(l,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))v=10;else v=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,v|0,0);v=x;x=0;a:do if(!(v&1)){d=m+8|0;w=m+1|0;y=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=y;k[q>>2]=o;k[s>>2]=0;i[t>>0]=1;i[u>>0]=69;z=m+4|0;A=k[h>>2]|0;B=k[j>>2]|0;C=k[b>>2]|0;D=y;b:while(1){if(C){y=k[C+12>>2]|0;if((y|0)==(k[C+16>>2]|0)){x=0;E=Ba(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;F=x;x=0;if(F&1){G=28;break}else H=E}else H=k[y>>2]|0;if((H|0)==-1){k[b>>2]=0;I=0;J=1}else{I=C;J=0}}else{I=0;J=1}y=k[c>>2]|0;do if(y){E=k[y+12>>2]|0;if((E|0)==(k[y+16>>2]|0)){x=0;F=Ba(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;K=x;x=0;if(K&1){G=28;break b}else L=F}else L=k[E>>2]|0;if((L|0)!=-1)if(J){N=y;break}else{O=y;P=I;Q=D;break b}else{k[c>>2]=0;G=20;break}}else G=20;while(0);if((G|0)==20){G=0;if(J){O=0;P=I;Q=D;break}else N=0}y=i[m>>0]|0;E=(y&1)==0?(y&255)>>>1:k[z>>2]|0;if((k[n>>2]|0)==(D+E|0)){x=0;fb(147,m|0,E<<1|0,0);y=x;x=0;if(y&1){G=28;break}if(!(i[m>>0]&1))R=10;else R=(k[m>>2]&-2)+-1|0;x=0;fb(147,m|0,R|0,0);y=x;x=0;if(y&1){G=28;break}y=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=y+E;S=y}else S=D;y=I+12|0;E=k[y>>2]|0;F=I+16|0;if((E|0)==(k[F>>2]|0)){x=0;K=Ba(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;T=x;x=0;if(T&1){G=28;break}else U=K}else U=k[E>>2]|0;if(cib(U,t,u,S,n,A,B,l,o,q,s,g)|0){O=N;P=I;Q=S;break}E=k[y>>2]|0;if((E|0)==(k[F>>2]|0)){x=0;Ba(k[(k[I>>2]|0)+40>>2]|0,I|0)|0;F=x;x=0;if(F&1){G=28;break}else{C=I;D=S;continue}}else{k[y>>2]=E+4;C=I;D=S;continue}}if((G|0)==28){D=Hc()|0;V=D;W=M;break}D=i[l>>0]|0;if(!((i[t>>0]|0)==0?1:(((D&1)==0?(D&255)>>>1:k[l+4>>2]|0)|0)==0)?(D=k[q>>2]|0,(D-o|0)<160):0){C=k[s>>2]|0;k[q>>2]=D+4;k[D>>2]=C}x=0;X=+Xa(44,Q|0,k[n>>2]|0,e|0);C=x;x=0;if(!(C&1)){p[f>>3]=X;pob(l,o,k[q>>2]|0,e);if(P){C=k[P+12>>2]|0;if((C|0)==(k[P+16>>2]|0)){x=0;D=Ba(k[(k[P>>2]|0)+36>>2]|0,P|0)|0;B=x;x=0;if(B&1){G=29;break}else Y=D}else Y=k[C>>2]|0;if((Y|0)==-1){k[b>>2]=0;Z=1}else Z=0}else Z=1;do if(O){C=k[O+12>>2]|0;if((C|0)==(k[O+16>>2]|0)){x=0;D=Ba(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;B=x;x=0;if(B&1){G=29;break a}else _=D}else _=k[C>>2]|0;if((_|0)!=-1)if(Z)break;else{G=56;break}else{k[c>>2]=0;G=54;break}}else G=54;while(0);if((G|0)==54?Z:0)G=56;if((G|0)==56)k[e>>2]=k[e>>2]|2;C=k[b>>2]|0;K2a(m);K2a(l);r=a;return C|0}else G=29}else G=29;while(0);if((G|0)==29){G=Hc()|0;V=G;W=M}K2a(m);K2a(l);Sc(V|0);return 0}function _ub(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=r;r=r+16|0;g=f;k[g>>2]=e;e=ZKa(c)|0;c=KQa(a,b,d,g)|0;if((e|0)!=0?(x=0,Ba(635,e|0)|0,e=x,x=0,e&1):0){e=Hc(0)|0;Fg(e)}r=f;return c|0}function $ub(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=d;d=ZKa(b)|0;x=0;b=Fa(181,a|0,c|0,f|0)|0;f=x;x=0;if(f&1){f=Hc()|0;if((d|0)!=0?(x=0,Ba(635,d|0)|0,c=x,x=0,c&1):0){c=Hc(0)|0;Fg(c)}Sc(f|0)}else{if((d|0)!=0?(x=0,Ba(635,d|0)|0,d=x,x=0,d&1):0){d=Hc(0)|0;Fg(d)}r=e;return b|0}return 0}function avb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;g=r;r=r+16|0;h=g;j=k[a>>2]|0;a:do if(!j)l=0;else{m=d;n=b;o=m-n>>2;p=e+12|0;q=k[p>>2]|0;s=(q|0)>(o|0)?q-o|0:0;o=c;q=o-n|0;n=q>>2;if((q|0)>0?(Xf[k[(k[j>>2]|0)+48>>2]&255](j,b,n)|0)!=(n|0):0){k[a>>2]=0;l=0;break}do if((s|0)>0){H5a(h,s,f);x=0;n=Fa(k[(k[j>>2]|0)+48>>2]|0,j|0,((i[h>>0]&1)==0?h+4|0:k[h+8>>2]|0)|0,s|0)|0;q=x;x=0;if(q&1){q=Hc()|0;O5a(h);Sc(q|0)}if((n|0)==(s|0)){O5a(h);break}else{k[a>>2]=0;O5a(h);l=0;break a}}while(0);s=m-o|0;n=s>>2;if((s|0)>0?(Xf[k[(k[j>>2]|0)+48>>2]&255](j,c,n)|0)!=(n|0):0){k[a>>2]=0;l=0;break}k[p>>2]=0;l=j}while(0);r=g;return l|0}function bvb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;f=k[a>>2]|0;do if(f)if((k[f+12>>2]|0)==(k[f+16>>2]|0))if((Vf[k[(k[f>>2]|0)+36>>2]&1023](f)|0)==-1){k[a>>2]=0;g=0;break}else{g=k[a>>2]|0;break}else g=f;else g=0;while(0);f=(g|0)==0;g=k[b>>2]|0;do if(g){if((k[g+12>>2]|0)==(k[g+16>>2]|0)?(Vf[k[(k[g>>2]|0)+36>>2]&1023](g)|0)==-1:0){k[b>>2]=0;h=11;break}if(f){i=g;h=13}else h=12}else h=11;while(0);if((h|0)==11)if(f)h=12;else{i=0;h=13}a:do if((h|0)==12){k[c>>2]=k[c>>2]|6;m=0}else if((h|0)==13){f=k[a>>2]|0;g=k[f+12>>2]|0;if((g|0)==(k[f+16>>2]|0))n=Vf[k[(k[f>>2]|0)+36>>2]&1023](f)|0;else n=l[g>>0]|0;g=n&255;if(g<<24>>24>-1?(f=d+8|0,(j[(k[f>>2]|0)+(n<<24>>24<<1)>>1]&2048)!=0):0){o=(Xf[k[(k[d>>2]|0)+36>>2]&255](d,g,0)|0)<<24>>24;g=k[a>>2]|0;p=g+12|0;q=k[p>>2]|0;if((q|0)==(k[g+16>>2]|0)){Vf[k[(k[g>>2]|0)+40>>2]&1023](g)|0;r=e;s=i;t=i;u=o}else{k[p>>2]=q+1;r=e;s=i;t=i;u=o}while(1){o=u+-48|0;q=r+-1|0;p=k[a>>2]|0;do if(p)if((k[p+12>>2]|0)==(k[p+16>>2]|0))if((Vf[k[(k[p>>2]|0)+36>>2]&1023](p)|0)==-1){k[a>>2]=0;v=0;break}else{v=k[a>>2]|0;break}else v=p;else v=0;while(0);p=(v|0)==0;if(t)if((k[t+12>>2]|0)==(k[t+16>>2]|0))if((Vf[k[(k[t>>2]|0)+36>>2]&1023](t)|0)==-1){k[b>>2]=0;w=0;x=0}else{w=s;x=s}else{w=s;x=t}else{w=s;x=0}g=k[a>>2]|0;if(!((r|0)>1&(p^(x|0)==0))){y=g;z=w;A=o;break}p=k[g+12>>2]|0;if((p|0)==(k[g+16>>2]|0))B=Vf[k[(k[g>>2]|0)+36>>2]&1023](g)|0;else B=l[p>>0]|0;p=B&255;if(p<<24>>24<=-1){m=o;break a}if(!(j[(k[f>>2]|0)+(B<<24>>24<<1)>>1]&2048)){m=o;break a}g=((Xf[k[(k[d>>2]|0)+36>>2]&255](d,p,0)|0)<<24>>24)+(o*10|0)|0;p=k[a>>2]|0;C=p+12|0;D=k[C>>2]|0;if((D|0)==(k[p+16>>2]|0)){Vf[k[(k[p>>2]|0)+40>>2]&1023](p)|0;r=q;s=w;t=x;u=g;continue}else{k[C>>2]=D+1;r=q;s=w;t=x;u=g;continue}}do if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0))if((Vf[k[(k[y>>2]|0)+36>>2]&1023](y)|0)==-1){k[a>>2]=0;E=0;break}else{E=k[a>>2]|0;break}else E=y;else E=0;while(0);f=(E|0)==0;do if(z){if((k[z+12>>2]|0)==(k[z+16>>2]|0)?(Vf[k[(k[z>>2]|0)+36>>2]&1023](z)|0)==-1:0){k[b>>2]=0;h=50;break}if(f){m=A;break a}}else h=50;while(0);if((h|0)==50?!f:0){m=A;break}k[c>>2]=k[c>>2]|2;m=A;break}k[c>>2]=k[c>>2]|4;m=0}while(0);return m|0}function cvb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=k[a>>2]|0;do if(f){g=k[f+12>>2]|0;if((g|0)==(k[f+16>>2]|0))h=Vf[k[(k[f>>2]|0)+36>>2]&1023](f)|0;else h=k[g>>2]|0;if((h|0)==-1){k[a>>2]=0;i=1;break}else{i=(k[a>>2]|0)==0;break}}else i=1;while(0);h=k[b>>2]|0;do if(h){f=k[h+12>>2]|0;if((f|0)==(k[h+16>>2]|0))j=Vf[k[(k[h>>2]|0)+36>>2]&1023](h)|0;else j=k[f>>2]|0;if((j|0)!=-1)if(i){l=h;m=17;break}else{m=16;break}else{k[b>>2]=0;m=14;break}}else m=14;while(0);if((m|0)==14)if(i)m=16;else{l=0;m=17}a:do if((m|0)==16){k[c>>2]=k[c>>2]|6;n=0}else if((m|0)==17){i=k[a>>2]|0;h=k[i+12>>2]|0;if((h|0)==(k[i+16>>2]|0))o=Vf[k[(k[i>>2]|0)+36>>2]&1023](i)|0;else o=k[h>>2]|0;if(!(Xf[k[(k[d>>2]|0)+12>>2]&255](d,2048,o)|0)){k[c>>2]=k[c>>2]|4;n=0;break}h=(Xf[k[(k[d>>2]|0)+52>>2]&255](d,o,0)|0)<<24>>24;i=k[a>>2]|0;j=i+12|0;f=k[j>>2]|0;if((f|0)==(k[i+16>>2]|0)){Vf[k[(k[i>>2]|0)+40>>2]&1023](i)|0;p=e;q=l;r=l;s=h}else{k[j>>2]=f+4;p=e;q=l;r=l;s=h}while(1){h=s+-48|0;f=p+-1|0;j=k[a>>2]|0;do if(j){i=k[j+12>>2]|0;if((i|0)==(k[j+16>>2]|0))t=Vf[k[(k[j>>2]|0)+36>>2]&1023](j)|0;else t=k[i>>2]|0;if((t|0)==-1){k[a>>2]=0;u=1;break}else{u=(k[a>>2]|0)==0;break}}else u=1;while(0);do if(r){j=k[r+12>>2]|0;if((j|0)==(k[r+16>>2]|0))v=Vf[k[(k[r>>2]|0)+36>>2]&1023](r)|0;else v=k[j>>2]|0;if((v|0)==-1){k[b>>2]=0;w=0;x=0;y=1;break}else{w=q;x=q;y=(q|0)==0;break}}else{w=q;x=0;y=1}while(0);j=k[a>>2]|0;if(!((p|0)>1&(u^y))){z=j;A=w;B=h;break}i=k[j+12>>2]|0;if((i|0)==(k[j+16>>2]|0))C=Vf[k[(k[j>>2]|0)+36>>2]&1023](j)|0;else C=k[i>>2]|0;if(!(Xf[k[(k[d>>2]|0)+12>>2]&255](d,2048,C)|0)){n=h;break a}i=((Xf[k[(k[d>>2]|0)+52>>2]&255](d,C,0)|0)<<24>>24)+(h*10|0)|0;j=k[a>>2]|0;g=j+12|0;D=k[g>>2]|0;if((D|0)==(k[j+16>>2]|0)){Vf[k[(k[j>>2]|0)+40>>2]&1023](j)|0;p=f;q=w;r=x;s=i;continue}else{k[g>>2]=D+4;p=f;q=w;r=x;s=i;continue}}do if(z){i=k[z+12>>2]|0;if((i|0)==(k[z+16>>2]|0))E=Vf[k[(k[z>>2]|0)+36>>2]&1023](z)|0;else E=k[i>>2]|0;if((E|0)==-1){k[a>>2]=0;F=1;break}else{F=(k[a>>2]|0)==0;break}}else F=1;while(0);do if(A){i=k[A+12>>2]|0;if((i|0)==(k[A+16>>2]|0))G=Vf[k[(k[A>>2]|0)+36>>2]&1023](A)|0;else G=k[i>>2]|0;if((G|0)!=-1)if(F){n=B;break a}else break;else{k[b>>2]=0;m=60;break}}else m=60;while(0);if((m|0)==60?!F:0){n=B;break}k[c>>2]=k[c>>2]|2;n=B}while(0);return n|0}function dvb(a,b){a=a|0;b=b|0;brb(a,b,1);k[a>>2]=78624;return}function evb(a,b){a=a|0;b=b|0;crb(a,b,1);k[a>>2]=78624;return}function fvb(a,b){a=a|0;b=b|0;irb(a,b,1);k[a>>2]=78556;return}function gvb(a,b){a=a|0;b=b|0;jrb(a,b,1);k[a>>2]=78556;return}function hvb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;g=r;r=r+32|0;h=g+20|0;j=g+16|0;l=g+12|0;m=g+8|0;n=g+4|0;o=g;if(c){c=i[b>>0]|0;p=(((c&1)==0?(c&255)>>>1:k[b+4>>2]|0)|0)==4}else p=0;a:do switch(d<<24>>24|0){case 0:{if(p?(c=i[b>>0]|0,q=(c&1)==0,s=q?b+1|0:k[b+8>>2]|0,t=s+3|0,u=q?(c&255)>>>1:k[b+4>>2]|0,c=s+u|0,q=s,v=c,(u|0)!=3):0)if((u|0)==4){u=i[t>>0]|0;Eyb(c+-3|0,s|0,3)|0;i[s>>0]=u}else{k[m>>2]=q;k[n>>2]=t;k[o>>2]=v;k[l>>2]=k[m>>2];k[j>>2]=k[n>>2];k[h>>2]=k[o>>2];Axb(l,j,h)|0}switch(f<<24>>24|0){case 0:{i[a>>0]=3;i[a+1>>0]=4;i[a+2>>0]=0;i[a+3>>0]=2;switch(e<<24>>24|0){case 2:case 0:{break a;break}case 1:break;default:{w=75;break a}}if(p)break a;e4a(b,0,1,32)|0;break a;break}case 1:{i[a>>0]=3;i[a+3>>0]=2;switch(e<<24>>24|0){case 0:{i[a+1>>0]=4;i[a+2>>0]=0;break a;break}case 1:{i[a+1>>0]=4;i[a+2>>0]=0;if(p)break a;e4a(b,0,1,32)|0;break a;break}case 2:{i[a+1>>0]=1;i[a+2>>0]=4;if(!p)break a;i4a(b,0,1)|0;break a;break}default:{w=75;break a}}break}case 2:{i[a>>0]=4;i[a+3>>0]=3;switch(e<<24>>24|0){case 0:{i[a+1>>0]=0;i[a+2>>0]=2;break a;break}case 1:{if(!p)e4a(b,0,1,32)|0;i[a+1>>0]=0;i[a+2>>0]=2;break a;break}case 2:{i[a+1>>0]=2;i[a+2>>0]=1;if(!p)break a;i4a(b,0,1)|0;break a;break}default:{w=75;break a}}break}case 3:{i[a>>0]=4;i[a+3>>0]=2;switch(e<<24>>24|0){case 0:{i[a+1>>0]=0;i[a+2>>0]=3;break a;break}case 1:{i[a+1>>0]=1;i[a+2>>0]=3;if(!p)break a;i4a(b,0,1)|0;break a;break}case 2:{i[a+1>>0]=3;i[a+2>>0]=0;if(p)break a;e4a(b,0,1,32)|0;break a;break}default:{w=75;break a}}break}case 4:{i[a>>0]=4;i[a+3>>0]=3;switch(e<<24>>24|0){case 0:{i[a+1>>0]=0;i[a+2>>0]=2;break a;break}case 1:{i[a+1>>0]=0;i[a+2>>0]=2;if(p)break a;e4a(b,0,1,32)|0;break a;break}case 2:{i[a+1>>0]=2;i[a+2>>0]=1;if(!p)break a;i4a(b,0,1)|0;break a;break}default:{w=75;break a}}break}default:{w=75;break a}}break}case 1:{switch(f<<24>>24|0){case 0:{i[a>>0]=3;i[a+1>>0]=2;i[a+2>>0]=0;i[a+3>>0]=4;switch(e<<24>>24|0){case 2:case 0:{break a;break}case 1:break;default:{w=75;break a}}if(p)break a;e4a(b,0,1,32)|0;break a;break}case 1:{i[a>>0]=3;i[a+3>>0]=4;switch(e<<24>>24|0){case 0:{i[a+1>>0]=2;i[a+2>>0]=0;break a;break}case 1:{i[a+1>>0]=2;i[a+2>>0]=0;if(p)break a;L3a(b,32);break a;break}case 2:{i[a+1>>0]=1;i[a+2>>0]=2;if(!p)break a;v=i[b>>0]|0;if(!(v&1)){t=((v&255)>>>1)+-1|0;i[b>>0]=t<<1;i[b+1+t>>0]=0;break a}else{t=b+4|0;v=(k[t>>2]|0)+-1|0;k[t>>2]=v;i[(k[b+8>>2]|0)+v>>0]=0;break a}break}default:{w=75;break a}}break}case 2:{i[a>>0]=2;i[a+3>>0]=3;switch(e<<24>>24|0){case 0:{i[a+1>>0]=0;i[a+2>>0]=4;break a;break}case 1:{i[a+1>>0]=0;i[a+2>>0]=4;if(p)break a;L3a(b,32);break a;break}case 2:{i[a+1>>0]=4;i[a+2>>0]=1;if(!p)break a;v=i[b>>0]|0;if(!(v&1)){t=((v&255)>>>1)+-1|0;i[b>>0]=t<<1;i[b+1+t>>0]=0;break a}else{t=b+4|0;v=(k[t>>2]|0)+-1|0;k[t>>2]=v;i[(k[b+8>>2]|0)+v>>0]=0;break a}break}default:{w=75;break a}}break}case 3:{i[a>>0]=3;i[a+3>>0]=4;switch(e<<24>>24|0){case 0:{i[a+1>>0]=2;i[a+2>>0]=0;break a;break}case 1:{i[a+1>>0]=2;i[a+2>>0]=0;if(p)break a;L3a(b,32);break a;break}case 2:{i[a+1>>0]=1;i[a+2>>0]=2;if(!p)break a;v=i[b>>0]|0;if(!(v&1)){t=((v&255)>>>1)+-1|0;i[b>>0]=t<<1;i[b+1+t>>0]=0;break a}else{t=b+4|0;v=(k[t>>2]|0)+-1|0;k[t>>2]=v;i[(k[b+8>>2]|0)+v>>0]=0;break a}break}default:{w=75;break a}}break}case 4:{i[a>>0]=2;i[a+3>>0]=4;switch(e<<24>>24|0){case 0:{i[a+1>>0]=3;i[a+2>>0]=0;break a;break}case 1:{i[a+1>>0]=3;i[a+2>>0]=1;if(!p)break a;v=i[b>>0]|0;if(!(v&1)){t=((v&255)>>>1)+-1|0;i[b>>0]=t<<1;i[b+1+t>>0]=0;break a}else{t=b+4|0;v=(k[t>>2]|0)+-1|0;k[t>>2]=v;i[(k[b+8>>2]|0)+v>>0]=0;break a}break}case 2:{i[a+1>>0]=0;i[a+2>>0]=3;if(p)break a;L3a(b,32);break a;break}default:{w=75;break a}}break}default:{w=75;break a}}break}default:w=75}while(0);if((w|0)==75){i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4}r=g;return}function ivb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=b;e=c-d|0;f=e>>2;g=i[a>>0]|0;if(!(g&1)){h=1;j=g}else{g=k[a>>2]|0;h=(g&-2)+-1|0;j=g&255}if(f>>>0>h>>>0){if(!(j&1))l=(j&255)>>>1;else l=k[a+4>>2]|0;W6a(a,h,f-h|0,l,0,l,0);m=i[a>>0]|0}else m=j;if(!(m&1))n=a+4|0;else n=k[a+8>>2]|0;m=(c-d|0)>>>2;d=b;b=n;while(1){if((d|0)==(c|0))break;k[b>>2]=k[d>>2];d=d+4|0;b=b+4|0}k[n+(m<<2)>>2]=0;if(!(i[a>>0]&1))i[a>>0]=e>>>1;else k[a+4>>2]=f;return a|0}function jvb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;g=r;r=r+32|0;h=g+20|0;j=g+16|0;l=g+12|0;m=g+8|0;n=g+4|0;o=g;if(c){c=i[b>>0]|0;p=(((c&1)==0?(c&255)>>>1:k[b+4>>2]|0)|0)==4}else p=0;a:do switch(d<<24>>24|0){case 0:{if(p?(c=i[b>>0]|0,q=(c&1)==0,s=b+4|0,t=q?s:k[b+8>>2]|0,u=t+12|0,v=q?(c&255)>>>1:k[s>>2]|0,s=t+(v<<2)|0,c=t,q=s,(v|0)!=3):0)if((v|0)==4){v=k[u>>2]|0;Eyb(s+-12|0,t|0,12)|0;k[t>>2]=v}else{k[m>>2]=c;k[n>>2]=u;k[o>>2]=q;k[l>>2]=k[m>>2];k[j>>2]=k[n>>2];k[h>>2]=k[o>>2];zxb(l,j,h)|0}switch(f<<24>>24|0){case 0:{i[a>>0]=3;i[a+1>>0]=4;i[a+2>>0]=0;i[a+3>>0]=2;switch(e<<24>>24|0){case 2:case 0:{break a;break}case 1:break;default:{w=75;break a}}if(p)break a;i7a(b,0,1,32)|0;break a;break}case 1:{i[a>>0]=3;i[a+3>>0]=2;switch(e<<24>>24|0){case 0:{i[a+1>>0]=4;i[a+2>>0]=0;break a;break}case 1:{i[a+1>>0]=4;i[a+2>>0]=0;if(p)break a;i7a(b,0,1,32)|0;break a;break}case 2:{i[a+1>>0]=1;i[a+2>>0]=4;if(!p)break a;m7a(b,0,1)|0;break a;break}default:{w=75;break a}}break}case 2:{i[a>>0]=4;i[a+3>>0]=3;switch(e<<24>>24|0){case 0:{i[a+1>>0]=0;i[a+2>>0]=2;break a;break}case 1:{if(!p)i7a(b,0,1,32)|0;i[a+1>>0]=0;i[a+2>>0]=2;break a;break}case 2:{i[a+1>>0]=2;i[a+2>>0]=1;if(!p)break a;m7a(b,0,1)|0;break a;break}default:{w=75;break a}}break}case 3:{i[a>>0]=4;i[a+3>>0]=2;switch(e<<24>>24|0){case 0:{i[a+1>>0]=0;i[a+2>>0]=3;break a;break}case 1:{i[a+1>>0]=1;i[a+2>>0]=3;if(!p)break a;m7a(b,0,1)|0;break a;break}case 2:{i[a+1>>0]=3;i[a+2>>0]=0;if(p)break a;i7a(b,0,1,32)|0;break a;break}default:{w=75;break a}}break}case 4:{i[a>>0]=4;i[a+3>>0]=3;switch(e<<24>>24|0){case 0:{i[a+1>>0]=0;i[a+2>>0]=2;break a;break}case 1:{i[a+1>>0]=0;i[a+2>>0]=2;if(p)break a;i7a(b,0,1,32)|0;break a;break}case 2:{i[a+1>>0]=2;i[a+2>>0]=1;if(!p)break a;m7a(b,0,1)|0;break a;break}default:{w=75;break a}}break}default:{w=75;break a}}break}case 1:{switch(f<<24>>24|0){case 0:{i[a>>0]=3;i[a+1>>0]=2;i[a+2>>0]=0;i[a+3>>0]=4;switch(e<<24>>24|0){case 2:case 0:{break a;break}case 1:break;default:{w=75;break a}}if(p)break a;i7a(b,0,1,32)|0;break a;break}case 1:{i[a>>0]=3;i[a+3>>0]=4;switch(e<<24>>24|0){case 0:{i[a+1>>0]=2;i[a+2>>0]=0;break a;break}case 1:{i[a+1>>0]=2;i[a+2>>0]=0;if(p)break a;P6a(b,32);break a;break}case 2:{i[a+1>>0]=1;i[a+2>>0]=2;if(!p)break a;q=i[b>>0]|0;if(!(q&1)){u=((q&255)>>>1)+-1|0;i[b>>0]=u<<1;k[b+4+(u<<2)>>2]=0;break a}else{u=b+4|0;q=(k[u>>2]|0)+-1|0;k[u>>2]=q;k[(k[b+8>>2]|0)+(q<<2)>>2]=0;break a}break}default:{w=75;break a}}break}case 2:{i[a>>0]=2;i[a+3>>0]=3;switch(e<<24>>24|0){case 0:{i[a+1>>0]=0;i[a+2>>0]=4;break a;break}case 1:{i[a+1>>0]=0;i[a+2>>0]=4;if(p)break a;P6a(b,32);break a;break}case 2:{i[a+1>>0]=4;i[a+2>>0]=1;if(!p)break a;q=i[b>>0]|0;if(!(q&1)){u=((q&255)>>>1)+-1|0;i[b>>0]=u<<1;k[b+4+(u<<2)>>2]=0;break a}else{u=b+4|0;q=(k[u>>2]|0)+-1|0;k[u>>2]=q;k[(k[b+8>>2]|0)+(q<<2)>>2]=0;break a}break}default:{w=75;break a}}break}case 3:{i[a>>0]=3;i[a+3>>0]=4;switch(e<<24>>24|0){case 0:{i[a+1>>0]=2;i[a+2>>0]=0;break a;break}case 1:{i[a+1>>0]=2;i[a+2>>0]=0;if(p)break a;P6a(b,32);break a;break}case 2:{i[a+1>>0]=1;i[a+2>>0]=2;if(!p)break a;q=i[b>>0]|0;if(!(q&1)){u=((q&255)>>>1)+-1|0;i[b>>0]=u<<1;k[b+4+(u<<2)>>2]=0;break a}else{u=b+4|0;q=(k[u>>2]|0)+-1|0;k[u>>2]=q;k[(k[b+8>>2]|0)+(q<<2)>>2]=0;break a}break}default:{w=75;break a}}break}case 4:{i[a>>0]=2;i[a+3>>0]=4;switch(e<<24>>24|0){case 0:{i[a+1>>0]=3;i[a+2>>0]=0;break a;break}case 1:{i[a+1>>0]=3;i[a+2>>0]=1;if(!p)break a;q=i[b>>0]|0;if(!(q&1)){u=((q&255)>>>1)+-1|0;i[b>>0]=u<<1;k[b+4+(u<<2)>>2]=0;break a}else{u=b+4|0;q=(k[u>>2]|0)+-1|0;k[u>>2]=q;k[(k[b+8>>2]|0)+(q<<2)>>2]=0;break a}break}case 2:{i[a+1>>0]=0;i[a+2>>0]=3;if(p)break a;P6a(b,32);break a;break}default:{w=75;break a}}break}default:{w=75;break a}}break}default:w=75}while(0);if((w|0)==75){i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4}r=g;return}function kvb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+4|0;e=(k[d>>2]|0)!=1545;f=k[a>>2]|0;g=(k[c>>2]|0)-f|0;h=g>>>0<2147483647?g<<1:-1;g=(k[b>>2]|0)-f|0;i=AYa(e?f:0,h)|0;if(!i)vDa();do if(!e){f=k[a>>2]|0;k[a>>2]=i;if(f){x=0;va(k[d>>2]|0,f|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else{j=k[a>>2]|0;break}}else j=i}else{k[a>>2]=i;j=i}while(0);k[d>>2]=1548;k[b>>2]=j+g;k[c>>2]=(k[a>>2]|0)+h;return}function lvb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+4|0;e=(k[d>>2]|0)!=1545;f=k[a>>2]|0;g=(k[c>>2]|0)-f|0;h=g>>>0<2147483647?g<<1:-1;g=(k[b>>2]|0)-f>>2;i=AYa(e?f:0,h)|0;if(!i)vDa();do if(!e){f=k[a>>2]|0;k[a>>2]=i;if(f){x=0;va(k[d>>2]|0,f|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else{j=k[a>>2]|0;break}}else j=i}else{k[a>>2]=i;j=i}while(0);k[d>>2]=1548;k[b>>2]=j+(g<<2);k[c>>2]=(k[a>>2]|0)+(h>>>2<<2);return}function mvb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=b;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=10;h=e}else{e=k[a>>2]|0;f=k[a+4>>2]|0;g=(e&-2)+-1|0;h=e&255}e=c-d|0;do if((c|0)!=(b|0)){if((g-f|0)>>>0>>0){S3a(a,g,f+e-g|0,f,f,0,0);j=i[a>>0]|0}else j=h;if(!(j&1))l=a+1|0;else l=k[a+8>>2]|0;m=c+(f-d)|0;n=b;o=l+f|0;while(1){if((n|0)==(c|0))break;i[o>>0]=i[n>>0]|0;n=n+1|0;o=o+1|0}i[l+m>>0]=0;o=f+e|0;if(!(i[a>>0]&1)){i[a>>0]=o<<1;break}else{k[a+4>>2]=o;break}}while(0);return a|0}function nvb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+4|0;e=(k[d>>2]|0)!=1545;f=k[a>>2]|0;g=(k[c>>2]|0)-f|0;h=g>>>0<2147483647?g<<1:-1;g=(k[b>>2]|0)-f>>2;i=AYa(e?f:0,h)|0;if(!i)vDa();do if(!e){f=k[a>>2]|0;k[a>>2]=i;if(f){x=0;va(k[d>>2]|0,f|0);f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}else{j=k[a>>2]|0;break}}else j=i}else{k[a>>2]=i;j=i}while(0);k[d>>2]=1548;k[b>>2]=j+(g<<2);k[c>>2]=(k[a>>2]|0)+(h>>>2<<2);return}function ovb(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;i[a+128>>0]=0;do if(b){x=0;xa(1047,a|0,b|0);c=x;x=0;if(c&1){c=Hc()|0;Rvb(a);Sc(c|0)}else{txb(a,b);break}}while(0);return}function pvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72228)|0);return}function qvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72268)|0);return}function rvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74148)|0);return}function svb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74140)|0);return}function tvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74328)|0);return}function uvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74336)|0);return}function vvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74392)|0);return}function wvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74400)|0);return}function xvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74408)|0);return}function yvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74416)|0);return}function zvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72340)|0);return}function Avb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72412)|0);return}function Bvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72472)|0);return}function Cvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72532)|0);return}function Dvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73116)|0);return}function Evb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73180)|0);return}function Fvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73244)|0);return}function Gvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73308)|0);return}function Hvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73568)|0);return}function Ivb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73604)|0);return}function Jvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73640)|0);return}function Kvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73676)|0);return}function Lvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72624)|0);return}function Mvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72716)|0);return}function Nvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72972)|0);return}function Ovb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73004)|0);return}function Pvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73716)|0);return}function Qvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73756)|0);return}function Rvb(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;do if(b){c=a+4|0;d=k[c>>2]|0;while(1){if((d|0)==(b|0))break;e=d+-4|0;k[c>>2]=e;d=e}if((a+16|0)==(b|0)){i[a+128>>0]=0;break}else{OBa(b);break}}while(0);return}function Svb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=b;e=c-d>>2;f=a+8|0;g=k[a>>2]|0;a:do if(e>>>0<=(k[f>>2]|0)-g>>2>>>0){h=a+4|0;i=(k[h>>2]|0)-g>>2;j=e>>>0>i>>>0;l=b+(i<<2)|0;i=(j?l:c)-d|0;Eyb(g|0,b|0,i|0)|0;m=g+(i>>2<<2)|0;if(j){j=l;while(1){if((j|0)==(c|0))break a;k[k[h>>2]>>2]=k[j>>2];k[h>>2]=(k[h>>2]|0)+4;j=j+4|0}}else{j=k[h>>2]|0;while(1){if((j|0)==(m|0))break a;l=j+-4|0;k[h>>2]=l;j=l}}}else{xxb(a);if(e>>>0>1073741823)HBa(a);j=(k[f>>2]|0)-(k[a>>2]|0)|0;if(j>>2>>>0<536870911){h=j>>1;n=h>>>0>>0?e:h}else n=1073741823;yxb(a,n);h=a+4|0;j=b;while(1){if((j|0)==(c|0))break a;k[k[h>>2]>>2]=k[j>>2];k[h>>2]=(k[h>>2]|0)+4;j=j+4|0}}while(0);return}function Tvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72228)|0);return}function Uvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72268)|0);return}function Vvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74148)|0);return}function Wvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74140)|0);return}function Xvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74328)|0);return}function Yvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74336)|0);return}function Zvb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74392)|0);return}function _vb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74400)|0);return}function $vb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74408)|0);return}function awb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(74416)|0);return}function bwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73116)|0);return}function cwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73180)|0);return}function dwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73244)|0);return}function ewb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73308)|0);return}function fwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72624)|0);return}function gwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72716)|0);return}function hwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(72972)|0);return}function iwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73004)|0);return}function jwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73716)|0);return}function kwb(a,b){a=a|0;b=b|0;Spb(a,b,kqb(73756)|0);return}function lwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72228)|0;Spb(a,Vpb(b,c)|0,c);return}function mwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72268)|0;Spb(a,Vpb(b,c)|0,c);return}function nwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(74148)|0;Spb(a,Vpb(b,c)|0,c);return}function owb(a,b){a=a|0;b=b|0;var c=0;c=kqb(74140)|0;Spb(a,Vpb(b,c)|0,c);return}function pwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(74328)|0;Spb(a,Vpb(b,c)|0,c);return}function qwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(74392)|0;Spb(a,Vpb(b,c)|0,c);return}function rwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(74400)|0;Spb(a,Vpb(b,c)|0,c);return}function swb(a,b){a=a|0;b=b|0;var c=0;c=kqb(74336)|0;Spb(a,Vpb(b,c)|0,c);return}function twb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73116)|0;Spb(a,Vpb(b,c)|0,c);return}function uwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73180)|0;Spb(a,Vpb(b,c)|0,c);return}function vwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73244)|0;Spb(a,Vpb(b,c)|0,c);return}function wwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73308)|0;Spb(a,Vpb(b,c)|0,c);return}function xwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73568)|0;Spb(a,Vpb(b,c)|0,c);return}function ywb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73604)|0;Spb(a,Vpb(b,c)|0,c);return}function zwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73640)|0;Spb(a,Vpb(b,c)|0,c);return}function Awb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73676)|0;Spb(a,Vpb(b,c)|0,c);return}function Bwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(74408)|0;Spb(a,Vpb(b,c)|0,c);return}function Cwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(74416)|0;Spb(a,Vpb(b,c)|0,c);return}function Dwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72340)|0;Spb(a,Vpb(b,c)|0,c);return}function Ewb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72412)|0;Spb(a,Vpb(b,c)|0,c);return}function Fwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72472)|0;Spb(a,Vpb(b,c)|0,c);return}function Gwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72532)|0;Spb(a,Vpb(b,c)|0,c);return}function Hwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72624)|0;Spb(a,Vpb(b,c)|0,c);return}function Iwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72716)|0;Spb(a,Vpb(b,c)|0,c);return}function Jwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(72972)|0;Spb(a,Vpb(b,c)|0,c);return}function Kwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73004)|0;Spb(a,Vpb(b,c)|0,c);return}function Lwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73716)|0;Spb(a,Vpb(b,c)|0,c);return}function Mwb(a,b){a=a|0;b=b|0;var c=0;c=kqb(73756)|0;Spb(a,Vpb(b,c)|0,c);return}function Nwb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=a+4|0;d=k[c>>2]|0;e=k[a>>2]|0;f=d-e>>2;g=e;e=d;a:do if(f>>>0>=b>>>0){if(f>>>0>b>>>0){d=g+(b<<2)|0;h=e;while(1){if((h|0)==(d|0))break a;i=h+-4|0;k[c>>2]=i;h=i}}}else sxb(a,b-f|0);while(0);return}function Owb(a,b){a=a|0;b=b|0;var c=0,d=0;c=k[a+8>>2]|0;if((k[a+12>>2]|0)-c>>2>>>0>b>>>0)d=(k[c+(b<<2)>>2]|0)!=0;else d=0;return d|0}function Pwb(a){a=a|0;var b=0,c=0,d=0,e=0;b=a+4|0;c=k[b>>2]|0;d=k[b+4>>2]|0;b=(k[a>>2]|0)+(d>>1)|0;if(!(d&1))e=c;else e=k[(k[b>>2]|0)+c>>2]|0;Sf[e&2047](b);return}function Qwb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var l=0,n=0,o=0,p=0,q=0,r=0;k[c>>2]=a;k[f>>2]=d;a=e;if(h&2)if((a-d|0)<3)l=1;else{k[f>>2]=d+1;i[d>>0]=-17;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-69;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-65;n=4}else n=4;a:do if((n|0)==4){d=b;h=k[c>>2]|0;while(1){if(h>>>0>=b>>>0){l=0;break a}e=j[h>>1]|0;o=e&65535;if(o>>>0>g>>>0){l=2;break a}do if((e&65535)<128){p=k[f>>2]|0;if((a-p|0)<1){l=1;break a}k[f>>2]=p+1;i[p>>0]=e}else{if((e&65535)<2048){p=k[f>>2]|0;if((a-p|0)<2){l=1;break a}k[f>>2]=p+1;i[p>>0]=o>>>6|192;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o&63|128;break}if((e&65535)<55296){p=k[f>>2]|0;if((a-p|0)<3){l=1;break a}k[f>>2]=p+1;i[p>>0]=o>>>12|224;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o>>>6&63|128;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o&63|128;break}if((e&65535)>=56320){if((e&65535)<57344){l=2;break a}p=k[f>>2]|0;if((a-p|0)<3){l=1;break a}k[f>>2]=p+1;i[p>>0]=o>>>12|224;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o>>>6&63|128;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o&63|128;break}if((d-h|0)<4){l=1;break a}p=h+2|0;q=m[p>>1]|0;if((q&64512|0)!=56320){l=2;break a}if((a-(k[f>>2]|0)|0)<4){l=1;break a}r=o&960;if(((r<<10)+65536|o<<10&64512|q&1023)>>>0>g>>>0){l=2;break a}k[c>>2]=p;p=(r>>>6)+1|0;r=k[f>>2]|0;k[f>>2]=r+1;i[r>>0]=p>>>2|240;r=k[f>>2]|0;k[f>>2]=r+1;i[r>>0]=o>>>2&15|p<<4&48|128;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o<<4&48|q>>>6&15|128;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=q&63|128}while(0);o=(k[c>>2]|0)+2|0;k[c>>2]=o;h=o}}while(0);return l|0}function Rwb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;k[c>>2]=a;k[f>>2]=d;if(h&4){h=k[c>>2]|0;d=b;if((((d-h|0)>2?(i[h>>0]|0)==-17:0)?(i[h+1>>0]|0)==-69:0)?(i[h+2>>0]|0)==-65:0){k[c>>2]=h+3;m=d}else m=d}else m=b;d=e;a:while(1){h=k[c>>2]|0;a=h>>>0>>0;if(!a){n=a;o=41;break}p=k[f>>2]|0;if(p>>>0>=e>>>0){n=a;o=41;break}a=i[h>>0]|0;q=a&255;if(q>>>0>g>>>0){r=2;break}do if(a<<24>>24>-1){j[p>>1]=a&255;k[c>>2]=h+1}else{if((a&255)<194){r=2;break a}if((a&255)<224){if((m-h|0)<2){r=1;break a}s=l[h+1>>0]|0;if((s&192|0)!=128){r=2;break a}t=s&63|q<<6&1984;if(t>>>0>g>>>0){r=2;break a}j[p>>1]=t;k[c>>2]=h+2;break}if((a&255)<240){if((m-h|0)<3){r=1;break a}t=i[h+1>>0]|0;s=i[h+2>>0]|0;switch(q|0){case 224:{if((t&-32)<<24>>24!=-96){r=2;break a}break}case 237:{if((t&-32)<<24>>24!=-128){r=2;break a}break}default:if((t&-64)<<24>>24!=-128){r=2;break a}}u=s&255;if((u&192|0)!=128){r=2;break a}s=(t&255)<<6&4032|q<<12|u&63;if((s&65535)>>>0>g>>>0){r=2;break a}j[p>>1]=s;k[c>>2]=h+3;break}if((a&255)>=245){r=2;break a}if((m-h|0)<4){r=1;break a}s=i[h+1>>0]|0;u=i[h+2>>0]|0;t=i[h+3>>0]|0;switch(q|0){case 240:{if((s+112&255)>=48){r=2;break a}break}case 244:{if((s&-16)<<24>>24!=-128){r=2;break a}break}default:if((s&-64)<<24>>24!=-128){r=2;break a}}v=u&255;if((v&192|0)!=128){r=2;break a}u=t&255;if((u&192|0)!=128){r=2;break a}if((d-p|0)<4){r=1;break a}t=q&7;w=s&255;s=v<<6;x=u&63;if((w<<12&258048|t<<18|s&4032|x)>>>0>g>>>0){r=2;break a}j[p>>1]=w<<2&60|v>>>4&3|((w>>>4&3|t<<2)<<6)+16320|55296;t=p+2|0;k[f>>2]=t;j[t>>1]=x|s&960|56320;k[c>>2]=(k[c>>2]|0)+4}while(0);k[f>>2]=(k[f>>2]|0)+2}if((o|0)==41)r=n&1;return r|0}function Swb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=b;if((((e&4|0)!=0?(f-a|0)>2:0)?(i[a>>0]|0)==-17:0)?(i[a+1>>0]|0)==-69:0){g=(i[a+2>>0]|0)==-65?a+3|0:a;h=0}else{g=a;h=0}a:while(1){if(!(h>>>0>>0&g>>>0>>0)){j=g;k=40;break}e=i[g>>0]|0;m=e&255;if(m>>>0>d>>>0){j=g;k=40;break}do if(e<<24>>24>-1){n=g+1|0;o=h}else{if((e&255)<194){j=g;k=40;break a}if((e&255)<224){if((f-g|0)<2){j=g;k=40;break a}p=l[g+1>>0]|0;if((p&192|0)!=128){j=g;k=40;break a}if((p&63|m<<6&1984)>>>0>d>>>0){j=g;k=40;break a}else{n=g+2|0;o=h;break}}if((e&255)<240){p=g;if((f-p|0)<3){j=g;k=40;break a}q=i[g+1>>0]|0;r=i[g+2>>0]|0;switch(m|0){case 224:{if((q&-32)<<24>>24!=-96){s=p;t=g;k=19;break a}break}case 237:{if((q&-32)<<24>>24!=-128){u=p;v=g;k=21;break a}break}default:if((q&-64)<<24>>24!=-128){w=p;x=g;k=23;break a}}p=r&255;if((p&192|0)!=128){j=g;k=40;break a}if(((q&255)<<6&4032|m<<12&61440|p&63)>>>0>d>>>0){j=g;k=40;break a}else{n=g+3|0;o=h;break}}if((e&255)>=245){j=g;k=40;break a}p=g;if((c-h|0)>>>0<2|(f-p|0)<4){j=g;k=40;break a}q=i[g+1>>0]|0;r=i[g+2>>0]|0;y=i[g+3>>0]|0;switch(m|0){case 240:{if((q+112&255)>=48){z=p;A=g;k=30;break a}break}case 244:{if((q&-16)<<24>>24!=-128){B=p;C=g;k=32;break a}break}default:if((q&-64)<<24>>24!=-128){D=p;E=g;k=34;break a}}p=r&255;if((p&192|0)!=128){j=g;k=40;break a}r=y&255;if((r&192|0)!=128){j=g;k=40;break a}if(((q&255)<<12&258048|m<<18&1835008|p<<6&4032|r&63)>>>0>d>>>0){j=g;k=40;break a}n=g+4|0;o=h+1|0}while(0);g=n;h=o+1|0}if((k|0)==19){o=a;F=0;G=s-o|0;H=o;I=t}else if((k|0)==21){t=a;F=0;G=u-t|0;H=t;I=v}else if((k|0)==23){v=a;F=0;G=w-v|0;H=v;I=x}else if((k|0)==30){x=a;F=0;G=z-x|0;H=x;I=A}else if((k|0)==32){A=a;F=0;G=B-A|0;H=A;I=C}else if((k|0)==34){C=a;F=0;G=D-C|0;H=C;I=E}else if((k|0)==40){F=1;G=0;H=a;I=j}return (F?I-H|0:G)|0}function Twb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;k[c>>2]=a;k[f>>2]=d;a=e;if(h&2)if((a-d|0)<3)j=1;else{k[f>>2]=d+1;i[d>>0]=-17;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-69;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-65;l=4}else l=4;a:do if((l|0)==4){d=k[c>>2]|0;while(1){if(d>>>0>=b>>>0){j=0;break a}h=k[d>>2]|0;if(h>>>0>g>>>0|(h&-2048|0)==55296){j=2;break a}do if(h>>>0>=128){if(h>>>0<2048){e=k[f>>2]|0;if((a-e|0)<2){j=1;break a}k[f>>2]=e+1;i[e>>0]=h>>>6|192;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=h&63|128;break}e=k[f>>2]|0;m=a-e|0;if(h>>>0<65536){if((m|0)<3){j=1;break a}k[f>>2]=e+1;i[e>>0]=h>>>12|224;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=h>>>6&63|128;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=h&63|128;break}else{if((m|0)<4){j=1;break a}k[f>>2]=e+1;i[e>>0]=h>>>18|240;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=h>>>12&63|128;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=h>>>6&63|128;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=h&63|128;break}}else{e=k[f>>2]|0;if((a-e|0)<1){j=1;break a}k[f>>2]=e+1;i[e>>0]=h}while(0);h=(k[c>>2]|0)+4|0;k[c>>2]=h;d=h}}while(0);return j|0}function Uwb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k[c>>2]=a;k[f>>2]=d;if(h&4){h=k[c>>2]|0;d=b;if((((d-h|0)>2?(i[h>>0]|0)==-17:0)?(i[h+1>>0]|0)==-69:0)?(i[h+2>>0]|0)==-65:0){k[c>>2]=h+3;j=d}else j=d}else j=b;a:while(1){d=k[c>>2]|0;h=d>>>0>>0;if(!h){m=h;n=40;break}a=k[f>>2]|0;if(a>>>0>=e>>>0){m=h;n=40;break}h=i[d>>0]|0;o=h&255;do if(h<<24>>24>-1){if(o>>>0>g>>>0){p=2;break a}k[a>>2]=o;k[c>>2]=d+1}else{if((h&255)<194){p=2;break a}if((h&255)<224){if((j-d|0)<2){p=1;break a}q=l[d+1>>0]|0;if((q&192|0)!=128){p=2;break a}r=q&63|o<<6&1984;if(r>>>0>g>>>0){p=2;break a}k[a>>2]=r;k[c>>2]=d+2;break}if((h&255)<240){if((j-d|0)<3){p=1;break a}r=i[d+1>>0]|0;q=i[d+2>>0]|0;switch(o|0){case 224:{if((r&-32)<<24>>24!=-96){p=2;break a}break}case 237:{if((r&-32)<<24>>24!=-128){p=2;break a}break}default:if((r&-64)<<24>>24!=-128){p=2;break a}}s=q&255;if((s&192|0)!=128){p=2;break a}q=(r&255)<<6&4032|o<<12&61440|s&63;if(q>>>0>g>>>0){p=2;break a}k[a>>2]=q;k[c>>2]=d+3;break}if((h&255)>=245){p=2;break a}if((j-d|0)<4){p=1;break a}q=i[d+1>>0]|0;s=i[d+2>>0]|0;r=i[d+3>>0]|0;switch(o|0){case 240:{if((q+112&255)>=48){p=2;break a}break}case 244:{if((q&-16)<<24>>24!=-128){p=2;break a}break}default:if((q&-64)<<24>>24!=-128){p=2;break a}}t=s&255;if((t&192|0)!=128){p=2;break a}s=r&255;if((s&192|0)!=128){p=2;break a}r=(q&255)<<12&258048|o<<18&1835008|t<<6&4032|s&63;if(r>>>0>g>>>0){p=2;break a}k[a>>2]=r;k[c>>2]=d+4}while(0);k[f>>2]=(k[f>>2]|0)+4}if((n|0)==40)p=m&1;return p|0}function Vwb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=b;if((((e&4|0)!=0?(f-a|0)>2:0)?(i[a>>0]|0)==-17:0)?(i[a+1>>0]|0)==-69:0){g=(i[a+2>>0]|0)==-65?a+3|0:a;h=0}else{g=a;h=0}a:while(1){if(!(h>>>0>>0&g>>>0>>0)){j=g;k=40;break}e=i[g>>0]|0;m=e&255;do if(e<<24>>24<=-1){if((e&255)<194){j=g;k=40;break a}if((e&255)<224){if((f-g|0)<2){j=g;k=40;break a}n=l[g+1>>0]|0;if((n&192|0)!=128){j=g;k=40;break a}if((n&63|m<<6&1984)>>>0>d>>>0){j=g;k=40;break a}o=g+2|0;break}if((e&255)<240){n=g;if((f-n|0)<3){j=g;k=40;break a}p=i[g+1>>0]|0;q=i[g+2>>0]|0;switch(m|0){case 224:{if((p&-32)<<24>>24!=-96){r=n;k=20;break a}break}case 237:{if((p&-32)<<24>>24!=-128){s=n;k=22;break a}break}default:if((p&-64)<<24>>24!=-128){t=n;k=24;break a}}n=q&255;if((n&192|0)!=128){j=g;k=40;break a}if(((p&255)<<6&4032|m<<12&61440|n&63)>>>0>d>>>0){j=g;k=40;break a}else{o=g+3|0;break}}if((e&255)>=245){j=g;k=40;break a}n=g;if((f-n|0)<4){j=g;k=40;break a}p=i[g+1>>0]|0;q=i[g+2>>0]|0;u=i[g+3>>0]|0;switch(m|0){case 240:{if((p+112&255)>=48){v=n;k=31;break a}break}case 244:{if((p&-16)<<24>>24!=-128){w=n;k=33;break a}break}default:if((p&-64)<<24>>24!=-128){x=n;k=35;break a}}n=q&255;if((n&192|0)!=128){j=g;k=40;break a}q=u&255;if((q&192|0)!=128){j=g;k=40;break a}if(((p&255)<<12&258048|m<<18&1835008|n<<6&4032|q&63)>>>0>d>>>0){j=g;k=40;break a}else o=g+4|0}else{if(m>>>0>d>>>0){j=g;k=40;break a}o=g+1|0}while(0);g=o;h=h+1|0}if((k|0)==20)y=r-a|0;else if((k|0)==22)y=s-a|0;else if((k|0)==24)y=t-a|0;else if((k|0)==31)y=v-a|0;else if((k|0)==33)y=w-a|0;else if((k|0)==35)y=x-a|0;else if((k|0)==40)y=j-a|0;return y|0}function Wwb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;k[c>>2]=a;k[f>>2]=d;a=e;if(h&2)if((a-d|0)<2)j=1;else{k[f>>2]=d+1;i[d>>0]=-2;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-1;l=4}else l=4;a:do if((l|0)==4){d=k[c>>2]|0;while(1){if(d>>>0>=b>>>0){j=0;break a}h=k[d>>2]|0;if(h>>>0>g>>>0|(h&-2048|0)==55296){j=2;break a}e=k[f>>2]|0;m=a-e|0;if(h>>>0<65536){if((m|0)<2){j=1;break a}k[f>>2]=e+1;i[e>>0]=h>>>8;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=h}else{if((m|0)<4){j=1;break a}m=h>>>10;n=(m&1984)+16320|0;k[f>>2]=e+1;i[e>>0]=n>>>8|216;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=n|m&63;m=k[f>>2]|0;k[f>>2]=m+1;i[m>>0]=h>>>8&3|220;m=k[f>>2]|0;k[f>>2]=m+1;i[m>>0]=h}h=(k[c>>2]|0)+4|0;k[c>>2]=h;d=h}}while(0);return j|0}function Xwb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k[c>>2]=a;k[f>>2]=d;if(h&4){h=k[c>>2]|0;d=b;if(((d-h|0)>1?(i[h>>0]|0)==-2:0)?(i[h+1>>0]|0)==-1:0){k[c>>2]=h+2;j=d}else j=d}else j=b;d=b+-1|0;a:while(1){h=k[c>>2]|0;if(h>>>0>=d>>>0){m=h;n=18;break}a=k[f>>2]|0;if(a>>>0>=e>>>0){m=h;n=18;break}o=l[h>>0]<<8;p=l[h+1>>0]|0;q=o|p;switch(o&64512|0){case 56320:{r=2;break a;break}case 55296:{if((j-h|0)<4){r=1;break a}o=l[h+2>>0]<<8;if((o&64512|0)!=56320){r=2;break a}s=(q<<10&983040)+65536|p<<10&64512|o&768|l[h+3>>0];if(s>>>0>g>>>0){r=2;break a}k[a>>2]=s;t=h+4|0;break}default:{if(q>>>0>g>>>0){r=2;break a}k[a>>2]=q;t=h+2|0}}k[c>>2]=t;k[f>>2]=(k[f>>2]|0)+4}if((n|0)==18)r=m>>>0>>0&1;return r|0}function Ywb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,m=0,n=0;f=b;if(((e&4|0)!=0?(f-a|0)>1:0)?(i[a>>0]|0)==-2:0)g=(i[a+1>>0]|0)==-1?a+2|0:a;else g=a;e=b+-1|0;b=g;g=0;a:while(1){if(!(g>>>0>>0&b>>>0>>0)){h=b;break}j=l[b>>0]<<8;k=l[b+1>>0]|0;m=j|k;switch(j&64512|0){case 56320:{h=b;break a;break}case 55296:{if((f-b|0)<4){h=b;break a}j=l[b+2>>0]<<8;if((j&64512|0)!=56320){h=b;break a}if(((m<<10&983040)+65536|k<<10&64512|j&768|l[b+3>>0])>>>0>d>>>0){h=b;break a}else n=b+4|0;break}default:{if(m>>>0>d>>>0){h=b;break a}n=b+2|0}}b=n;g=g+1|0}return h-a|0}function Zwb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;k[c>>2]=a;k[f>>2]=d;a=e;if(h&2)if((a-d|0)<2)j=1;else{k[f>>2]=d+1;i[d>>0]=-1;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-2;l=4}else l=4;a:do if((l|0)==4){d=k[c>>2]|0;while(1){if(d>>>0>=b>>>0){j=0;break a}h=k[d>>2]|0;if(h>>>0>g>>>0|(h&-2048|0)==55296){j=2;break a}e=k[f>>2]|0;m=a-e|0;if(h>>>0<65536){if((m|0)<2){j=1;break a}k[f>>2]=e+1;i[e>>0]=h;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=h>>>8}else{if((m|0)<4){j=1;break a}m=h>>>10;n=(m&1984)+16320|0;k[f>>2]=e+1;i[e>>0]=n|m&63;m=k[f>>2]|0;k[f>>2]=m+1;i[m>>0]=n>>>8|216;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=h;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=h>>>8&3|220}h=(k[c>>2]|0)+4|0;k[c>>2]=h;d=h}}while(0);return j|0}function _wb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k[c>>2]=a;k[f>>2]=d;if(h&4){h=k[c>>2]|0;d=b;if(((d-h|0)>1?(i[h>>0]|0)==-1:0)?(i[h+1>>0]|0)==-2:0){k[c>>2]=h+2;j=d}else j=d}else j=b;d=b+-1|0;a:while(1){h=k[c>>2]|0;if(h>>>0>=d>>>0){m=h;n=18;break}a=k[f>>2]|0;if(a>>>0>=e>>>0){m=h;n=18;break}o=l[h+1>>0]<<8;p=l[h>>0]|0;q=o|p;switch(o&64512|0){case 56320:{r=2;break a;break}case 55296:{if((j-h|0)<4){r=1;break a}o=l[h+3>>0]<<8;if((o&64512|0)!=56320){r=2;break a}s=(q<<10&983040)+65536|p<<10&64512|o&768|l[h+2>>0];if(s>>>0>g>>>0){r=2;break a}k[a>>2]=s;t=h+4|0;break}default:{if(q>>>0>g>>>0){r=2;break a}k[a>>2]=q;t=h+2|0}}k[c>>2]=t;k[f>>2]=(k[f>>2]|0)+4}if((n|0)==18)r=m>>>0>>0&1;return r|0}function $wb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,m=0,n=0;f=b;if(((e&4|0)!=0?(f-a|0)>1:0)?(i[a>>0]|0)==-1:0)g=(i[a+1>>0]|0)==-2?a+2|0:a;else g=a;e=b+-1|0;b=g;g=0;a:while(1){if(!(g>>>0>>0&b>>>0>>0)){h=b;break}j=l[b+1>>0]<<8;k=l[b>>0]|0;m=j|k;switch(j&64512|0){case 56320:{h=b;break a;break}case 55296:{if((f-b|0)<4){h=b;break a}j=l[b+3>>0]<<8;if((j&64512|0)!=56320){h=b;break a}if(((m<<10&983040)+65536|k<<10&64512|j&768|l[b+2>>0])>>>0>d>>>0){h=b;break a}else n=b+4|0;break}default:{if(m>>>0>d>>>0){h=b;break a}n=b+2|0}}b=n;g=g+1|0}return h-a|0}function axb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0;k[c>>2]=a;k[f>>2]=d;a=e;if(h&2)if((a-d|0)<3)j=1;else{k[f>>2]=d+1;i[d>>0]=-17;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-69;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-65;l=4}else l=4;a:do if((l|0)==4){d=b;h=k[c>>2]|0;while(1){if(h>>>0>=b>>>0){j=0;break a}e=k[h>>2]|0;m=e&65535;if(m>>>0>g>>>0){j=2;break a}do if(m>>>0<128){n=k[f>>2]|0;if((a-n|0)<1){j=1;break a}k[f>>2]=n+1;i[n>>0]=e}else{if(m>>>0<2048){n=k[f>>2]|0;if((a-n|0)<2){j=1;break a}k[f>>2]=n+1;i[n>>0]=e>>>6|192;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=e&63|128;break}if(m>>>0<55296){n=k[f>>2]|0;if((a-n|0)<3){j=1;break a}k[f>>2]=n+1;i[n>>0]=m>>>12|224;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=e>>>6&63|128;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=e&63|128;break}if(m>>>0>=56320){if(m>>>0<57344){j=2;break a}n=k[f>>2]|0;if((a-n|0)<3){j=1;break a}k[f>>2]=n+1;i[n>>0]=m>>>12|224;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=e>>>6&63|128;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=e&63|128;break}if((d-h|0)<8){j=1;break a}n=h+4|0;o=k[n>>2]|0;if((o&64512|0)!=56320){j=2;break a}if((a-(k[f>>2]|0)|0)<4){j=1;break a}p=e&960;if(((p<<10)+65536|e<<10&64512|o&1023)>>>0>g>>>0){j=2;break a}k[c>>2]=n;n=(p>>>6)+1|0;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=n>>>2|240;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=e>>>2&15|n<<4&48|128;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=e<<4&48|o>>>6&15|128;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=o&63|128}while(0);e=(k[c>>2]|0)+4|0;k[c>>2]=e;h=e}}while(0);return j|0}function bxb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;k[c>>2]=a;k[f>>2]=d;if(h&4){h=k[c>>2]|0;d=b;if((((d-h|0)>2?(i[h>>0]|0)==-17:0)?(i[h+1>>0]|0)==-69:0)?(i[h+2>>0]|0)==-65:0){k[c>>2]=h+3;j=d}else j=d}else j=b;d=e;a:while(1){h=k[c>>2]|0;a=h>>>0>>0;if(!a){m=a;n=41;break}o=k[f>>2]|0;if(o>>>0>=e>>>0){m=a;n=41;break}a=i[h>>0]|0;p=a&255;if(p>>>0>g>>>0){q=2;break}do if(a<<24>>24>-1){k[o>>2]=p;k[c>>2]=h+1}else{if((a&255)<194){q=2;break a}if((a&255)<224){if((j-h|0)<2){q=1;break a}r=l[h+1>>0]|0;if((r&192|0)!=128){q=2;break a}s=r&63|p<<6&1984;if(s>>>0>g>>>0){q=2;break a}k[o>>2]=s;k[c>>2]=h+2;break}if((a&255)<240){if((j-h|0)<3){q=1;break a}s=i[h+1>>0]|0;r=i[h+2>>0]|0;switch(p|0){case 224:{if((s&-32)<<24>>24!=-96){q=2;break a}break}case 237:{if((s&-32)<<24>>24!=-128){q=2;break a}break}default:if((s&-64)<<24>>24!=-128){q=2;break a}}t=r&255;if((t&192|0)!=128){q=2;break a}r=(s&255)<<6&4032|p<<12&61440|t&63;if(r>>>0>g>>>0){q=2;break a}k[o>>2]=r;k[c>>2]=h+3;break}if((a&255)>=245){q=2;break a}if((j-h|0)<4){q=1;break a}r=i[h+1>>0]|0;t=i[h+2>>0]|0;s=i[h+3>>0]|0;switch(p|0){case 240:{if((r+112&255)>=48){q=2;break a}break}case 244:{if((r&-16)<<24>>24!=-128){q=2;break a}break}default:if((r&-64)<<24>>24!=-128){q=2;break a}}u=t&255;if((u&192|0)!=128){q=2;break a}t=s&255;if((t&192|0)!=128){q=2;break a}if((d-o|0)<8){q=1;break a}s=p&7;v=r&255;r=u<<6;w=t&63;if((v<<12&258048|s<<18|r&4032|w)>>>0>g>>>0){q=2;break a}k[o>>2]=v<<2&60|u>>>4&3|((v>>>4&3|s<<2)<<6)+-64|55296;s=o+4|0;k[f>>2]=s;k[s>>2]=w|r&960|56320;k[c>>2]=(k[c>>2]|0)+4}while(0);k[f>>2]=(k[f>>2]|0)+4}if((n|0)==41)q=m&1;return q|0}function cxb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;h=r;r=r+112|0;j=h;l=(d-c|0)/12|0;do if(l>>>0>100){m=xYa(l)|0;if((m|0)==0?(x=0,hb(55),n=x,x=0,n&1):0){n=Hc()|0;o=n;p=M;break}q=m;s=m;t=11}else{q=0;s=j;t=11}while(0);if((t|0)==11){j=c;m=0;n=l;l=s;while(1){if((j|0)==(d|0)){u=m;v=n;break}w=i[j>>0]|0;if(!(w&1))y=(w&255)>>>1;else y=k[j+4>>2]|0;if(!y){i[l>>0]=2;z=m+1|0;A=n+-1|0}else{i[l>>0]=1;z=m;A=n}j=j+12|0;m=z;n=A;l=l+1|0}l=0;A=u;u=v;a:while(1){v=k[a>>2]|0;if(!((u|0)!=0&(v|0)!=(b|0))){B=v;t=22;break}n=i[v>>0]|0;if(!g){x=0;v=Ta(k[(k[e>>2]|0)+12>>2]|0,e|0,n|0)|0;z=x;x=0;if(z&1){t=5;break}else C=v}else C=n;n=l+1|0;v=0;z=c;m=A;j=u;y=s;while(1){if((z|0)==(d|0))break;do if((i[y>>0]|0)==1){if(!(i[z>>0]&1))D=z+1|0;else D=k[z+8>>2]|0;w=i[D+l>>0]|0;if(!g){x=0;E=Ta(k[(k[e>>2]|0)+12>>2]|0,e|0,w|0)|0;F=x;x=0;if(F&1){t=4;break a}else G=E}else G=w;if(C<<24>>24!=G<<24>>24){i[y>>0]=0;H=v;I=m;J=j+-1|0;break}w=i[z>>0]|0;if(!(w&1))K=(w&255)>>>1;else K=k[z+4>>2]|0;if((K|0)==(n|0)){i[y>>0]=2;H=1;I=m+1|0;J=j+-1|0}else{H=1;I=m;J=j}}else{H=v;I=m;J=j}while(0);v=H;z=z+12|0;m=I;j=J;y=y+1|0}if(!v){l=n;A=m;u=j;continue}k[a>>2]=(k[a>>2]|0)+1;if((m+j|0)>>>0>1){L=c;N=m;O=s}else{l=n;A=m;u=j;continue}while(1){if((L|0)==(d|0)){l=n;A=N;u=j;continue a}if((i[O>>0]|0)==2){y=i[L>>0]|0;if(!(y&1))P=(y&255)>>>1;else P=k[L+4>>2]|0;if((P|0)!=(n|0)){i[O>>0]=0;Q=N+-1|0}else Q=N}else Q=N;L=L+12|0;N=Q;O=O+1|0}}if((t|0)==4){O=Hc()|0;R=O;S=M}else if((t|0)==5){O=Hc()|0;R=O;S=M}else if((t|0)==22){if((B|0)==(b|0)){k[f>>2]=k[f>>2]|2;T=c;U=s}else{T=c;U=s}while(1){if((T|0)==(d|0)){t=55;break}if((i[U>>0]|0)==2){V=T;break}T=T+12|0;U=U+1|0}if((t|0)==55){k[f>>2]=k[f>>2]|4;V=d}if(q)yYa(q);r=h;return V|0}if(!q){o=R;p=S}else{yYa(q);o=R;p=S}}Sc(o|0);return 0}function dxb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=k[a>>2]|0;a:do if((f|0)==(b|0)){k[c>>2]=k[c>>2]|6;g=0}else{h=i[f>>0]|0;if(h<<24>>24>-1?(l=d+8|0,(j[(k[l>>2]|0)+(h<<24>>24<<1)>>1]&2048)!=0):0){m=e;n=(Xf[k[(k[d>>2]|0)+36>>2]&255](d,h,0)|0)<<24>>24;while(1){h=(k[a>>2]|0)+1|0;k[a>>2]=h;o=n+-48|0;if(!((m|0)>1&(h|0)!=(b|0))){p=o;q=h;break}r=i[h>>0]|0;if(r<<24>>24<=-1){g=o;break a}if(!(j[(k[l>>2]|0)+(r<<24>>24<<1)>>1]&2048)){g=o;break a}m=m+-1|0;n=((Xf[k[(k[d>>2]|0)+36>>2]&255](d,r,0)|0)<<24>>24)+(o*10|0)|0}if((q|0)!=(b|0)){g=p;break}k[c>>2]=k[c>>2]|2;g=p;break}k[c>>2]=k[c>>2]|4;g=0}while(0);return g|0}function exb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;h=r;r=r+112|0;j=h;l=(d-c|0)/12|0;do if(l>>>0>100){m=xYa(l)|0;if((m|0)==0?(x=0,hb(55),n=x,x=0,n&1):0){n=Hc()|0;o=n;p=M;break}q=m;s=m;t=11}else{q=0;s=j;t=11}while(0);if((t|0)==11){j=c;m=0;n=l;l=s;while(1){if((j|0)==(d|0)){u=m;v=n;break}w=i[j>>0]|0;if(!(w&1))y=(w&255)>>>1;else y=k[j+4>>2]|0;if(!y){i[l>>0]=2;z=m+1|0;A=n+-1|0}else{i[l>>0]=1;z=m;A=n}j=j+12|0;m=z;n=A;l=l+1|0}l=0;A=u;u=v;a:while(1){v=k[a>>2]|0;if(!((u|0)!=0&(v|0)!=(b|0))){B=v;t=22;break}n=k[v>>2]|0;if(!g){x=0;v=Ta(k[(k[e>>2]|0)+28>>2]|0,e|0,n|0)|0;z=x;x=0;if(z&1){t=5;break}else C=v}else C=n;n=l+1|0;v=0;z=c;m=A;j=u;y=s;while(1){if((z|0)==(d|0))break;do if((i[y>>0]|0)==1){if(!(i[z>>0]&1))D=z+4|0;else D=k[z+8>>2]|0;w=k[D+(l<<2)>>2]|0;if(!g){x=0;E=Ta(k[(k[e>>2]|0)+28>>2]|0,e|0,w|0)|0;F=x;x=0;if(F&1){t=4;break a}else G=E}else G=w;if((C|0)!=(G|0)){i[y>>0]=0;H=v;I=m;J=j+-1|0;break}w=i[z>>0]|0;if(!(w&1))K=(w&255)>>>1;else K=k[z+4>>2]|0;if((K|0)==(n|0)){i[y>>0]=2;H=1;I=m+1|0;J=j+-1|0}else{H=1;I=m;J=j}}else{H=v;I=m;J=j}while(0);v=H;z=z+12|0;m=I;j=J;y=y+1|0}if(!v){l=n;A=m;u=j;continue}k[a>>2]=(k[a>>2]|0)+4;if((m+j|0)>>>0>1){L=c;N=m;O=s}else{l=n;A=m;u=j;continue}while(1){if((L|0)==(d|0)){l=n;A=N;u=j;continue a}if((i[O>>0]|0)==2){y=i[L>>0]|0;if(!(y&1))P=(y&255)>>>1;else P=k[L+4>>2]|0;if((P|0)!=(n|0)){i[O>>0]=0;Q=N+-1|0}else Q=N}else Q=N;L=L+12|0;N=Q;O=O+1|0}}if((t|0)==4){O=Hc()|0;R=O;S=M}else if((t|0)==5){O=Hc()|0;R=O;S=M}else if((t|0)==22){if((B|0)==(b|0)){k[f>>2]=k[f>>2]|2;T=c;U=s}else{T=c;U=s}while(1){if((T|0)==(d|0)){t=55;break}if((i[U>>0]|0)==2){V=T;break}T=T+12|0;U=U+1|0}if((t|0)==55){k[f>>2]=k[f>>2]|4;V=d}if(q)yYa(q);r=h;return V|0}if(!q){o=R;p=S}else{yYa(q);o=R;p=S}}Sc(o|0);return 0}function fxb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;f=k[a>>2]|0;a:do if((f|0)!=(b|0)){g=k[f>>2]|0;if(!(Xf[k[(k[d>>2]|0)+12>>2]&255](d,2048,g)|0)){k[c>>2]=k[c>>2]|4;h=0;break}i=e;j=(Xf[k[(k[d>>2]|0)+52>>2]&255](d,g,0)|0)<<24>>24;while(1){g=(k[a>>2]|0)+4|0;k[a>>2]=g;l=j+-48|0;if(!((i|0)>1&(g|0)!=(b|0))){m=l;n=g;break}o=k[g>>2]|0;if(!(Xf[k[(k[d>>2]|0)+12>>2]&255](d,2048,o)|0)){h=l;break a}i=i+-1|0;j=((Xf[k[(k[d>>2]|0)+52>>2]&255](d,o,0)|0)<<24>>24)+(l*10|0)|0}if((n|0)==(b|0)){k[c>>2]=k[c>>2]|2;h=m}else h=m}else{k[c>>2]=k[c>>2]|6;h=0}while(0);return h|0}function gxb(a){a=a|0;Eub(a);OBa(a);return}function hxb(a){a=a|0;OBa(a);return}function ixb(a){a=a|0;OBa(a);return}function jxb(a){a=a|0;Eub(a);OBa(a);return}function kxb(a){a=a|0;Eub(a);OBa(a);return}function lxb(a){a=a|0;OBa(a);return}function mxb(a){a=a|0;OBa(a);return}function nxb(a){a=a|0;OBa(a);return}function oxb(a){a=a|0;OBa(a);return}function pxb(a){a=a|0;Eub(a);OBa(a);return}function qxb(a){a=a|0;OBa(a);return}function rxb(a){a=a|0;OBa(a);return}function sxb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;e=k[a+8>>2]|0;f=k[a+4>>2]|0;if(e-f>>2>>>0>>0){g=k[a>>2]|0;h=f-g>>2;f=h+b|0;if(f>>>0>1073741823)HBa(a);i=e-g|0;if(i>>2>>>0<536870911){g=i>>1;j=g>>>0>>0?f:g}else j=1073741823;uxb(d,j,h,a+16|0);h=d+8|0;j=k[h>>2]|0;Fyb(j|0,0,b<<2|0)|0;k[h>>2]=j+(b<<2);vxb(a,d);wxb(d)}else txb(a,b);r=c;return}function txb(a,b){a=a|0;b=b|0;var c=0;c=a+4|0;a=b;b=k[c>>2]|0;do{k[b>>2]=0;b=(k[c>>2]|0)+4|0;k[c>>2]=b;a=a+-1|0}while((a|0)!=0);return}function uxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;k[a+12>>2]=0;k[a+16>>2]=d;do if(b){e=d+112|0;if(b>>>0<29&(i[e>>0]|0)==0){i[e>>0]=1;f=d;break}else{f=KBa(b<<2)|0;break}}else f=0;while(0);k[a>>2]=f;d=f+(c<<2)|0;k[a+8>>2]=d;k[a+4>>2]=d;k[a+12>>2]=f+(b<<2);return}function vxb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;d=a+4|0;e=b+4|0;f=(k[d>>2]|0)-c|0;g=(k[e>>2]|0)+(0-(f>>2)<<2)|0;k[e>>2]=g;Dyb(g|0,c|0,f|0)|0;f=k[a>>2]|0;k[a>>2]=k[e>>2];k[e>>2]=f;f=b+8|0;c=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=c;c=a+8|0;a=b+12|0;f=k[c>>2]|0;k[c>>2]=k[a>>2];k[a>>2]=f;k[b>>2]=k[e>>2];return}function wxb(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;c=a+8|0;d=k[c>>2]|0;while(1){if((d|0)==(b|0))break;e=d+-4|0;k[c>>2]=e;d=e}d=k[a>>2]|0;do if(d){c=k[a+16>>2]|0;if((c|0)==(d|0)){i[c+112>>0]=0;break}else{OBa(d);break}}while(0);return}function xxb(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;if(b){c=a+4|0;d=k[c>>2]|0;while(1){if((d|0)==(b|0))break;e=d+-4|0;k[c>>2]=e;d=e}if((a+16|0)==(b|0))i[a+128>>0]=0;else OBa(b);k[a+8>>2]=0;k[c>>2]=0;k[a>>2]=0}return}function yxb(a,b){a=a|0;b=b|0;var c=0,d=0;if(b>>>0>1073741823)HBa(a);c=a+128|0;if(b>>>0<29&(i[c>>0]|0)==0){i[c>>0]=1;d=a+16|0}else d=KBa(b<<2)|0;k[a+4>>2]=d;k[a>>2]=d;k[a+8>>2]=d+(b<<2);return}function zxb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=k[b>>2]|0;e=k[a>>2]|0;f=d-e>>2;g=k[c>>2]|0;c=g-d>>2;h=e;if((f|0)==(c|0)){e=d;d=h;i=e;while(1){if((d|0)==(e|0))break;j=k[d>>2]|0;k[d>>2]=k[i>>2];k[i>>2]=j;d=d+4|0;i=i+4|0}l=k[b>>2]|0}else{b=f;i=c;while(1){d=(b|0)%(i|0)|0;if(!d){m=i;break}else{e=i;i=d;b=e}}b=k[a>>2]|0;a=h+(m<<2)|0;m=h;while(1){h=a;if((h|0)==(m|0)){n=m;break}i=h+-4|0;h=i;e=k[i>>2]|0;d=i+(f<<2)|0;j=h;while(1){k[j>>2]=k[d>>2];j=d;o=g-j>>2;p=(f|0)<(o|0)?d+(f<<2)|0:m+(f-o<<2)|0;if((p|0)==(i|0)){q=d;break}else d=p}k[q>>2]=e;a=h;m=b}l=n+(c<<2)|0}return l|0}function Axb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=k[b>>2]|0;e=k[a>>2]|0;f=d-e|0;g=(k[c>>2]|0)-d|0;h=e;if((f|0)==(g|0)){e=d;j=e;l=d;d=h;while(1){if((d|0)==(e|0))break;m=i[d>>0]|0;i[d>>0]=i[j>>0]|0;i[j>>0]=m;m=l+1|0;j=m;l=m;d=d+1|0}n=k[b>>2]|0}else{b=f;d=g;while(1){l=(b|0)%(d|0)|0;if(!l){o=d;break}else{j=d;d=l;b=j}}b=h+o|0;o=h;while(1){h=b;if((h|0)==(o|0)){p=o;break}d=h+-1|0;h=d;j=i[d>>0]|0;l=d+f|0;e=h;while(1){i[e>>0]=i[l>>0]|0;e=l;m=(k[c>>2]|0)-e|0;q=(f|0)<(m|0)?l+f|0:(k[a>>2]|0)+(f-m)|0;if((q|0)==(d|0)){r=l;break}else l=q}i[r>>0]=j;b=h;o=k[a>>2]|0}n=p+g|0}return n|0}function Bxb(a){a=a|0;Dub(a);OBa(a);return}function Cxb(a){a=a|0;Cub(a);OBa(a);return}function Dxb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0,h=0,i=0.0,j=0.0;d=r;r=r+16|0;e=d;if((a|0)==(b|0)){k[c>>2]=4;f=0.0}else{g=HSa()|0;h=k[g>>2]|0;k[g>>2]=0;i=+uOa(a,e,yhb()|0);a=k[g>>2]|0;if(!a)k[g>>2]=h;if((k[e>>2]|0)==(b|0))if((a|0)==34){k[c>>2]=4;j=i}else j=i;else{k[c>>2]=4;j=0.0}f=j}r=d;return +f}function Exb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0,h=0,i=0.0,j=0.0;d=r;r=r+16|0;e=d;if((a|0)==(b|0)){k[c>>2]=4;f=0.0}else{g=HSa()|0;h=k[g>>2]|0;k[g>>2]=0;i=+uOa(a,e,yhb()|0);a=k[g>>2]|0;if(!a)k[g>>2]=h;if((k[e>>2]|0)==(b|0))if((a|0)==34){k[c>>2]=4;j=i}else j=i;else{k[c>>2]=4;j=0.0}f=j}r=d;return +f}function Fxb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0,h=0,i=0.0,j=0.0;d=r;r=r+16|0;e=d;if((a|0)==(b|0)){k[c>>2]=4;f=0.0}else{g=HSa()|0;h=k[g>>2]|0;k[g>>2]=0;i=+uOa(a,e,yhb()|0);a=k[g>>2]|0;if(!a)k[g>>2]=h;if((k[e>>2]|0)==(b|0)){if((a|0)==34)k[c>>2]=4;j=i}else{k[c>>2]=4;j=0.0}f=j}r=d;return +f}function Gxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=r;r=r+16|0;f=e;do if((a|0)==(b|0)){k[c>>2]=4;g=0;h=0}else{if((i[a>>0]|0)==45){k[c>>2]=4;g=0;h=0;break}j=HSa()|0;l=k[j>>2]|0;k[j>>2]=0;m=KSa(a,f,d,yhb()|0)|0;n=M;o=k[j>>2]|0;if(!o)k[j>>2]=l;if((k[f>>2]|0)==(b|0))if((o|0)==34){k[c>>2]=4;p=-1;q=-1}else{p=m;q=n}else{k[c>>2]=4;p=0;q=0}g=q;h=p}while(0);M=g;r=e;return h|0}function Hxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;f=e;do if((a|0)==(b|0)){k[c>>2]=4;g=0}else{if((i[a>>0]|0)==45){k[c>>2]=4;g=0;break}h=HSa()|0;j=k[h>>2]|0;k[h>>2]=0;l=KSa(a,f,d,yhb()|0)|0;m=M;n=k[h>>2]|0;if(!n)k[h>>2]=j;do if((k[f>>2]|0)==(b|0))if(m>>>0>0|(m|0)==0&l>>>0>4294967295|(n|0)==34){k[c>>2]=4;o=-1;break}else{o=l;break}else{k[c>>2]=4;o=0}while(0);g=o}while(0);r=e;return g|0}function Ixb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;f=e;do if((a|0)==(b|0)){k[c>>2]=4;g=0}else{if((i[a>>0]|0)==45){k[c>>2]=4;g=0;break}h=HSa()|0;j=k[h>>2]|0;k[h>>2]=0;l=KSa(a,f,d,yhb()|0)|0;m=M;n=k[h>>2]|0;if(!n)k[h>>2]=j;do if((k[f>>2]|0)==(b|0))if(m>>>0>0|(m|0)==0&l>>>0>4294967295|(n|0)==34){k[c>>2]=4;o=-1;break}else{o=l;break}else{k[c>>2]=4;o=0}while(0);g=o}while(0);r=e;return g|0}function Jxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;f=e;do if((a|0)==(b|0)){k[c>>2]=4;g=0}else{if((i[a>>0]|0)==45){k[c>>2]=4;g=0;break}h=HSa()|0;j=k[h>>2]|0;k[h>>2]=0;l=KSa(a,f,d,yhb()|0)|0;m=M;n=k[h>>2]|0;if(!n)k[h>>2]=j;do if((k[f>>2]|0)==(b|0))if(m>>>0>0|(m|0)==0&l>>>0>65535|(n|0)==34){k[c>>2]=4;o=-1;break}else{o=l&65535;break}else{k[c>>2]=4;o=0}while(0);g=o}while(0);r=e;return g|0}function Kxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;e=r;r=r+16|0;f=e;if((a|0)==(b|0)){k[c>>2]=4;g=0;h=0}else{i=HSa()|0;j=k[i>>2]|0;k[i>>2]=0;l=LSa(a,f,d,yhb()|0)|0;d=M;a=k[i>>2]|0;if(!a)k[i>>2]=j;if((k[f>>2]|0)==(b|0))if((a|0)==34){k[c>>2]=4;a=(d|0)>0|(d|0)==0&l>>>0>0;m=a?-1:0;n=a?2147483647:-2147483648}else{m=l;n=d}else{k[c>>2]=4;m=0;n=0}g=n;h=m}M=g;r=e;return h|0}function Lxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+16|0;f=e;if((a|0)==(b|0)){k[c>>2]=4;g=0}else{h=HSa()|0;i=k[h>>2]|0;k[h>>2]=0;j=LSa(a,f,d,yhb()|0)|0;d=M;a=k[h>>2]|0;if(!a)k[h>>2]=i;a:do if((k[f>>2]|0)==(b|0)){do if((a|0)==34){k[c>>2]=4;if((d|0)>0|(d|0)==0&j>>>0>0){l=2147483647;break a}}else{if((d|0)<-1|(d|0)==-1&j>>>0<2147483648){k[c>>2]=4;break}if((d|0)>0|(d|0)==0&j>>>0>2147483647){k[c>>2]=4;l=2147483647;break a}else{l=j;break a}}while(0);l=-2147483648}else{k[c>>2]=4;l=0}while(0);g=l}r=e;return g|0}function Mxb(a,b){a=a|0;b=b|0;var c=0;do switch(b|0){case 1:{c=332205;break}case 2:{c=332147;break}case 3:{c=332070;break}case 4:{c=332018;break}case 5:{c=331973;break}case 6:{c=331928;break}case 7:{c=331883;break}case 8:{c=331821;break}case 9:{c=331735;break}case 10:{c=331650;break}case 11:{c=331590;break}case 12:{c=331498;break}case 13:{c=331378;break}case 14:{c=331333;break}case 15:{c=331281;break}default:c=331262}while(0);H0a(a,c);k[a>>2]=78676;k[a+8>>2]=b;return}function Nxb(a){a=a|0;qCa(a);return}function Oxb(a){a=a|0;qCa(a);OBa(a);return}function Pxb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=78688;d=111;a:while(1){e=d;while(1){if(!e){f=c;break a}g=(e|0)/2|0;h=c+(g<<3)|0;if((YLa(k[h>>2]|0,b)|0)<0){j=g;l=h;m=e;break}else e=g}c=l+8|0;d=m+-1-j|0}j=0;while(1){if((j|0)==3)break;k[a+(j<<2)>>2]=0;j=j+1|0}if(((f|0)!=79576?(YLa(b,k[f>>2]|0)|0)==0:0)?(x=0,Ta(640,a|0,i[f+4>>0]|0)|0,f=x,x=0,f&1):0){f=Hc()|0;K2a(a);Sc(f|0)}return}function Qxb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0;c=79576;d=15;a:while(1){e=d;while(1){if(!e){f=c;break a}g=(e|0)/2|0;h=c+(g<<3)|0;if((YLa(k[h>>2]|0,a)|0)<0){i=g;l=h;m=e;break}else e=g}c=l+8|0;d=m+-1-i|0}do if((f|0)!=79696?(YLa(a,k[f>>2]|0)|0)==0:0){i=j[f+4>>1]|0;m=i&65535;if(i<<16>>16==128){n=(m|3840)&65535;break}if((m&768|0)==0|b^1)n=i;else n=(m|1024)&65535}else n=0;while(0);return n|0}function Rxb(a,b){a=a|0;b=b|0;var c=0,d=0;c=b+8|0;d=k[c>>2]|0;a:do if((d|0)==(k[b+12>>2]|0)){k[b>>2]=-993;k[b+40>>2]=0}else switch(i[d>>0]|0){case 10:case 13:{k[b>>2]=-993;k[b+40>>2]=0;break a;break}default:{k[b>>2]=-995;k[c>>2]=d+1;k[b+40>>2]=k[a+4>>2];break a}}while(0);return}function Sxb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=b+8|0;d=k[c>>2]|0;do if((d|0)!=(k[b+12>>2]|0)){e=k[d>>2]|0;if((e|0)<8232)switch(e|0){case 10:case 13:{f=3;break}default:f=4}else switch(e|0){case 8233:case 8232:{f=3;break}default:f=4}if((f|0)==3){k[b>>2]=-993;k[b+40>>2]=0;break}else if((f|0)==4){k[b>>2]=-995;k[c>>2]=d+4;k[b+40>>2]=k[a+4>>2];break}}else{k[b>>2]=-993;k[b+40>>2]=0}while(0);return}function Txb(a,b){a=a|0;b=b|0;Ebb(a);k[a>>2]=79704;k[a+32>>2]=4;k[a+36>>2]=b;k[a+40>>2]=0;k[a+44>>2]=0;return}function Uxb(a,b,c){a=a|0;b=b|0;c=c|0;Ebb(a);k[a>>2]=79704;k[a+32>>2]=4;k[a+36>>2]=4096;k[a+40>>2]=b;k[a+44>>2]=c;return}function Vxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(!c)e=RLa(b)|0;else e=(c|0)<0?2147483647:c;if(!d)f=b+e|0;else{k[a+24>>2]=d;k[a+20>>2]=d;k[a+28>>2]=d+e;f=d}k[a+8>>2]=b;k[a+12>>2]=b;k[a+16>>2]=f;return}function Wxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ebb(a);k[a>>2]=79704;k[a+32>>2]=0;k[a+36>>2]=4096;k[a+40>>2]=0;k[a+44>>2]=0;Vxb(a,b,c,d);return}function Xxb(a,b,c){a=a|0;b=b|0;c=c|0;Ebb(a);k[a>>2]=79704;k[a+32>>2]=2;k[a+36>>2]=4096;k[a+40>>2]=0;k[a+44>>2]=0;Vxb(a,b,c,0);return}function Yxb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ebb(a);k[a>>2]=79704;k[a+32>>2]=0;k[a+36>>2]=4096;k[a+40>>2]=0;k[a+44>>2]=0;Vxb(a,b,c,d);return}function Zxb(a,b,c){a=a|0;b=b|0;c=c|0;Ebb(a);k[a>>2]=79704;k[a+32>>2]=2;k[a+36>>2]=4096;k[a+40>>2]=0;k[a+44>>2]=0;Vxb(a,b,c,0);return}function _xb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ebb(a);k[a>>2]=79704;k[a+32>>2]=0;k[a+36>>2]=4096;k[a+40>>2]=0;k[a+44>>2]=0;Vxb(a,b,c,d);return}function $xb(a,b,c){a=a|0;b=b|0;c=c|0;Ebb(a);k[a>>2]=79704;k[a+32>>2]=2;k[a+36>>2]=4096;k[a+40>>2]=0;k[a+44>>2]=0;Vxb(a,b,c,0);return}function ayb(a){a=a|0;var b=0,c=0;k[a>>2]=79704;b=k[a+8>>2]|0;do if((b|0)!=0?(k[a+32>>2]&9|0)==1:0){c=k[a+44>>2]|0;if(!c){QBa(b);break}x=0;va(c|0,b|0);c=x;x=0;if(c&1){c=Hc(0)|0;obb(a);Fg(c)}}while(0);obb(a);return}function byb(a){a=a|0;ayb(a);OBa(a);return}function cyb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;Hbb(a,b);c=a+32|0;d=b+32|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+36|0;d=b+36|0;c=k[e>>2]|0;k[e>>2]=k[d>>2];k[d>>2]=c;c=a+40|0;d=b+40|0;e=k[c>>2]|0;k[c>>2]=k[d>>2];k[d>>2]=e;e=a+44|0;a=b+44|0;b=k[e>>2]|0;k[e>>2]=k[a>>2];k[a>>2]=b;return}function dyb(a,b){a=a|0;b=b|0;var c=0;c=a+32|0;a=k[c>>2]|0;do if(a&4)if(b){k[c>>2]=a|8;break}else{k[c>>2]=a&-9;break}while(0);return}function eyb(a){a=a|0;var b=0,c=0;b=a+32|0;c=k[b>>2]|0;if(c&4)k[b>>2]=c|8;return k[a+8>>2]|0}function fyb(a){a=a|0;return (k[a+24>>2]|0)-(k[a+20>>2]|0)|0}function gyb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;do if((b|0)==-1)c=0;else{d=a+24|0;e=k[d>>2]|0;f=a+28|0;if((e|0)==(k[f>>2]|0)){g=a+32|0;if((k[g>>2]&12|0)!=4){c=-1;break}if(!e)h=k[a+16>>2]|0;else h=e;j=a+8|0;l=h-(k[j>>2]|0)|0;m=k[a+36>>2]|0;n=l<<1;o=m>>>0>>0?n:m;m=(o|0)==0?4096:o;o=k[a+40>>2]|0;if(!o)p=MBa(m)|0;else p=Vf[o&1023](m)|0;if(!p){c=-1;break}Dyb(p|0,k[j>>2]|0,l|0)|0;l=a+12|0;m=k[j>>2]|0;o=m;n=(k[l>>2]|0)-o|0;q=a+16|0;r=(k[q>>2]|0)-o|0;o=a+20|0;s=k[o>>2]|0;t=(k[d>>2]|0)-s|0;u=(k[f>>2]|0)-s|0;do if(k[g>>2]&1){s=k[a+44>>2]|0;if(!s){QBa(m);break}else{Sf[s&2047](m);break}}while(0);m=p+r|0;k[j>>2]=p;k[l>>2]=p+n;k[q>>2]=m;k[o>>2]=m;k[f>>2]=m+u;s=m+t|0;k[d>>2]=s;k[g>>2]=k[g>>2]|1;v=s}else v=e;i[v>>0]=b;k[d>>2]=(k[d>>2]|0)+1;c=b&255}while(0);return c|0}function hyb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+12|0;d=k[c>>2]|0;do if((k[a+8>>2]|0)!=(d|0)){if((b|0)==-1){k[c>>2]=d+-1;e=0;break}f=d+-1|0;if(!(k[a+32>>2]&2)){k[c>>2]=f;i[f>>0]=b;e=b;break}if((i[f>>0]|0)==(b<<24>>24|0)){k[c>>2]=f;e=b}else e=-1}else e=-1;while(0);return e|0}function iyb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+12|0;c=k[b>>2]|0;d=a+16|0;if((c|0)==(k[d>>2]|0)){e=k[a+24>>2]|0;if(c>>>0>>0){k[b>>2]=c;k[d>>2]=e;f=4}else g=-1}else f=4;if((f|0)==4)g=l[c>>0]|0;return g|0}function jyb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;g=f>>>3;h=f>>>4;switch(e|0){case 2:case 0:{i=((g|h)&1|0)!=0;break}case 1:{i=((g^h)&1|0)!=0;break}default:i=0}f=(g&1|0)!=0;if(f)j=i&(k[b+12>>2]|0)!=0;else j=i;i=(h&1|0)!=0;if(i)if(j&(k[b+24>>2]|0)!=0)l=9;else{m=-1;n=-1}else if(j)l=9;else{m=-1;n=-1}if((l|0)==9){l=b+28|0;j=k[l>>2]|0;h=j;if(!j)o=k[b+16>>2]|0;else o=j;switch(e|0){case 2:{e=o-(k[b+8>>2]|0)|0;p=e;q=((e|0)<0)<<31>>31;break}case 1:{e=(k[(f?b+12|0:b+24|0)>>2]|0)-(k[b+8>>2]|0)|0;p=e;q=((e|0)<0)<<31>>31;break}default:{p=0;q=0}}e=Hyb(p|0,q|0,c|0,d|0)|0;d=M;if((d|0)>-1|(d|0)==-1&e>>>0>4294967295?(c=b+8|0,q=k[c>>2]|0,p=o-q|0,o=((p|0)<0)<<31>>31,!((d|0)>(o|0)|(d|0)==(o|0)&e>>>0>p>>>0)):0){p=q+e|0;if(f){f=b+16|0;o=k[f>>2]|0;k[c>>2]=q;k[b+12>>2]=p;k[f>>2]=p>>>0>>0?o:p}if(i){i=b+20|0;o=k[i>>2]|0;k[i>>2]=p>>>0>>0?p:o;k[l>>2]=h;k[b+24>>2]=p;m=e;n=d}else{m=e;n=d}}else{m=-1;n=-1}}d=a;k[d>>2]=0;k[d+4>>2]=0;d=a+8|0;k[d>>2]=m;k[d+4>>2]=n;return}function kyb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=(d&8|0)!=0;f=d>>>4&1;do if(!((f|0)==0&(e^1))){if(e?(k[b+12>>2]|0)==0:0){g=-1;h=-1;break}d=(f|0)!=0;if(d?(k[b+24>>2]|0)==0:0){g=-1;h=-1;break}i=c+8|0;j=k[i>>2]|0;l=k[i+4>>2]|0;i=b+28|0;m=k[i>>2]|0;n=m;if(!m)o=k[b+16>>2]|0;else o=m;if((l|0)>-1|(l|0)==-1&j>>>0>4294967295?(m=b+8|0,p=k[m>>2]|0,q=o-p|0,r=((q|0)<0)<<31>>31,!((l|0)>(r|0)|(l|0)==(r|0)&j>>>0>q>>>0)):0){q=p+j|0;if(e){r=b+16|0;s=k[r>>2]|0;k[m>>2]=p;k[b+12>>2]=q;k[r>>2]=q>>>0>>0?s:q}if(d){d=b+20|0;s=k[d>>2]|0;k[d>>2]=q>>>0>>0?q:s;k[i>>2]=n;k[b+24>>2]=q;g=j;h=l}else{g=j;h=l}}else{g=-1;h=-1}}else{g=-1;h=-1}while(0);b=a;k[b>>2]=0;k[b+4>>2]=0;b=a+8|0;k[b>>2]=g;k[b+4>>2]=h;return}function lyb(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;k[a>>2]=c;k[a+(k[c+-12>>2]|0)>>2]=k[b+12>>2];ayb(a+8|0);return}function myb(a){a=a|0;lyb(a,79800);mab(a+56|0);return}function nyb(a){a=a|0;myb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function oyb(a){a=a|0;myb(a);OBa(a);return}function pyb(a){a=a|0;oyb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function qyb(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;k[a>>2]=c;k[a+(k[c+-12>>2]|0)>>2]=k[b+12>>2];ayb(a+4|0);return}function ryb(a){a=a|0;qyb(a,79856);mab(a+52|0);return}function syb(a){a=a|0;ryb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function tyb(a){a=a|0;ryb(a);OBa(a);return}function uyb(a){a=a|0;tyb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function vyb(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;k[a>>2]=c;k[a+(k[c+-12>>2]|0)>>2]=k[b+32>>2];k[a+8>>2]=k[b+36>>2];ayb(a+12|0);return}function wyb(a){a=a|0;vyb(a,79932);mab(a+60|0);return}function xyb(a){a=a|0;wyb(a+-8|0);return}function yyb(a){a=a|0;wyb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function zyb(a){a=a|0;wyb(a);OBa(a);return}function Ayb(a){a=a|0;zyb(a+-8|0);return}function Byb(a){a=a|0;zyb(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function Cyb(){}function Dyb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((c|0)>=4096)return Nb(a|0,b|0,c|0)|0;d=a|0;if((a&3)==(b&3)){while(a&3){if(!c)return d|0;i[a>>0]=i[b>>0]|0;a=a+1|0;b=b+1|0;c=c-1|0}while((c|0)>=4){k[a>>2]=k[b>>2];a=a+4|0;b=b+4|0;c=c-4|0}}while((c|0)>0){i[a>>0]=i[b>>0]|0;a=a+1|0;b=b+1|0;c=c-1|0}return d|0}function Eyb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((b|0)<(a|0)&(a|0)<(b+c|0)){d=a;b=b+c|0;a=a+c|0;while((c|0)>0){a=a-1|0;b=b-1|0;c=c-1|0;i[a>>0]=i[b>>0]|0}a=d}else Dyb(a,b,c)|0;return a|0}function Fyb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=a+c|0;if((c|0)>=20){b=b&255;e=a&3;f=b|b<<8|b<<16|b<<24;g=d&~3;if(e){e=a+4-e|0;while((a|0)<(e|0)){i[a>>0]=b;a=a+1|0}}while((a|0)<(g|0)){k[a>>2]=f;a=a+4|0}}while((a|0)<(d|0)){i[a>>0]=b;a=a+1|0}return a-c|0}function Gyb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return (M=e,a-c>>>0|0)|0}function Hyb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return (M=b+d+(e>>>0>>0|0)>>>0,e|0)|0}function Iyb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){M=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Jyb(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Kyb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){M=b<>>32-c;return a<>c;return a>>>c|(b&(1<>c-32|0}function Myb(a){a=a|0;var b=0;b=i[v+(a&255)>>0]|0;if((b|0)<8)return b|0;b=i[v+(a>>8&255)>>0]|0;if((b|0)<8)return b+8|0;b=i[v+(a>>16&255)>>0]|0;if((b|0)<8)return b+16|0;return (i[v+(a>>>24)>>0]|0)+24|0}function Nyb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=ia(d,c)|0;f=a>>>16;a=(e>>>16)+(ia(d,f)|0)|0;d=b>>>16;b=ia(d,c)|0;return (M=(a>>>16)+(ia(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0}function Oyb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b>>31|((b|0)<0?-1:0)<<1;f=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;g=d>>31|((d|0)<0?-1:0)<<1;h=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;i=Gyb(e^a,f^b,e,f)|0;b=M;a=g^e;e=h^f;return Gyb((Tyb(i,b,Gyb(g^c,h^d,g,h)|0,M,0)|0)^a,M^e,a,e)|0}function Pyb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+16|0;f=e|0;g=b>>31|((b|0)<0?-1:0)<<1;h=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;i=d>>31|((d|0)<0?-1:0)<<1;j=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;l=Gyb(g^a,h^b,g,h)|0;b=M;Tyb(l,b,Gyb(i^c,j^d,i,j)|0,M,f)|0;j=Gyb(k[f>>2]^g,k[f+4>>2]^h,g,h)|0;h=M;r=e;return (M=h,j)|0}function Qyb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=Nyb(e,a)|0;f=M;return (M=(ia(b,a)|0)+(ia(d,e)|0)+f|f&0,c|0|0)|0}function Ryb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Tyb(a,b,c,d,0)|0}function Syb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e|0;Tyb(a,b,c,d,f)|0;r=e;return (M=k[f+4>>2]|0,k[f>>2]|0)|0}function Tyb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=a;g=b;h=g;i=c;j=d;l=j;if(!h){m=(e|0)!=0;if(!l){if(m){k[e>>2]=(f>>>0)%(i>>>0);k[e+4>>2]=0}n=0;o=(f>>>0)/(i>>>0)>>>0;return (M=n,o)|0}else{if(!m){n=0;o=0;return (M=n,o)|0}k[e>>2]=a|0;k[e+4>>2]=b&0;n=0;o=0;return (M=n,o)|0}}m=(l|0)==0;do if(i){if(!m){p=(ka(l|0)|0)-(ka(h|0)|0)|0;if(p>>>0<=31){q=p+1|0;r=31-p|0;s=p-31>>31;t=q;u=f>>>(q>>>0)&s|h<>>(q>>>0)&s;w=0;x=f<>2]=a|0;k[e+4>>2]=g|b&0;n=0;o=0;return (M=n,o)|0}r=i-1|0;if(r&i){s=(ka(i|0)|0)+33-(ka(h|0)|0)|0;q=64-s|0;p=32-s|0;y=p>>31;z=s-32|0;A=z>>31;t=s;u=p-1>>31&h>>>(z>>>0)|(h<>>(s>>>0))&A;v=A&h>>>(s>>>0);w=f<>>(z>>>0))&y|f<>31;break}if(e){k[e>>2]=r&f;k[e+4>>2]=0}if((i|0)==1){n=g|b&0;o=a|0|0;return (M=n,o)|0}else{r=Myb(i|0)|0;n=h>>>(r>>>0)|0;o=h<<32-r|f>>>(r>>>0)|0;return (M=n,o)|0}}else{if(m){if(e){k[e>>2]=(h>>>0)%(i>>>0);k[e+4>>2]=0}n=0;o=(h>>>0)/(i>>>0)>>>0;return (M=n,o)|0}if(!f){if(e){k[e>>2]=0;k[e+4>>2]=(h>>>0)%(l>>>0)}n=0;o=(h>>>0)/(l>>>0)>>>0;return (M=n,o)|0}r=l-1|0;if(!(r&l)){if(e){k[e>>2]=a|0;k[e+4>>2]=r&h|b&0}n=0;o=h>>>((Myb(l|0)|0)>>>0);return (M=n,o)|0}r=(ka(l|0)|0)-(ka(h|0)|0)|0;if(r>>>0<=30){s=r+1|0;p=31-r|0;t=s;u=h<>>(s>>>0);v=h>>>(s>>>0);w=0;x=f<>2]=a|0;k[e+4>>2]=g|b&0;n=0;o=0;return (M=n,o)|0}while(0);if(!t){B=x;C=w;D=v;E=u;F=0;G=0}else{b=c|0|0;c=j|d&0;d=Hyb(b|0,c|0,-1,-1)|0;j=M;g=x;x=w;w=v;v=u;u=t;t=0;do{a=g;g=x>>>31|g<<1;x=t|x<<1;f=v<<1|a>>>31|0;a=v>>>31|w<<1|0;Gyb(d,j,f,a)|0;h=M;l=h>>31|((h|0)<0?-1:0)<<1;t=l&1;v=Gyb(f,a,l&b,(((h|0)<0?-1:0)>>31|((h|0)<0?-1:0)<<1)&c)|0;w=M;u=u-1|0}while((u|0)!=0);B=g;C=x;D=w;E=v;F=0;G=t}t=C;C=0;if(e){k[e>>2]=E;k[e+4>>2]=D}n=(t|0)>>>31|(B|C)<<1|(C<<1|t>>>31)&0|F;o=(t<<1|0>>>31)&-2|G;return (M=n,o)|0}function Uyb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Of[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Vyb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function Wyb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function Xyb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function Yyb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function Zyb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function _yb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function $yb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function azb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function bzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function czb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function dzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function ezb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function fzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function gzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function hzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function izb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function jzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function kzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function lzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function mzb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return oa(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function nzb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Pf[a&127](b|0,c|0,d|0,e|0,f|0)}function ozb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(0,a|0,b|0,c|0,d|0,e|0)}function pzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(1,a|0,b|0,c|0,d|0,e|0)}function qzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(2,a|0,b|0,c|0,d|0,e|0)}function rzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(3,a|0,b|0,c|0,d|0,e|0)}function szb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(4,a|0,b|0,c|0,d|0,e|0)}function tzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(5,a|0,b|0,c|0,d|0,e|0)}function uzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(6,a|0,b|0,c|0,d|0,e|0)}function vzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(7,a|0,b|0,c|0,d|0,e|0)}function wzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(8,a|0,b|0,c|0,d|0,e|0)}function xzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(9,a|0,b|0,c|0,d|0,e|0)}function yzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(10,a|0,b|0,c|0,d|0,e|0)}function zzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(11,a|0,b|0,c|0,d|0,e|0)}function Azb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(12,a|0,b|0,c|0,d|0,e|0)}function Bzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(13,a|0,b|0,c|0,d|0,e|0)}function Czb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(14,a|0,b|0,c|0,d|0,e|0)}function Dzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(15,a|0,b|0,c|0,d|0,e|0)}function Ezb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(16,a|0,b|0,c|0,d|0,e|0)}function Fzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(17,a|0,b|0,c|0,d|0,e|0)}function Gzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(18,a|0,b|0,c|0,d|0,e|0)}function Hzb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;qa(19,a|0,b|0,c|0,d|0,e|0)}function Izb(a,b,c){a=a|0;b=b|0;c=+c;Qf[a&63](b|0,+c)}function Jzb(a,b){a=a|0;b=+b;sa(0,a|0,+b)}function Kzb(a,b){a=a|0;b=+b;sa(1,a|0,+b)}function Lzb(a,b){a=a|0;b=+b;sa(2,a|0,+b)}function Mzb(a,b){a=a|0;b=+b;sa(3,a|0,+b)}function Nzb(a,b){a=a|0;b=+b;sa(4,a|0,+b)}function Ozb(a,b){a=a|0;b=+b;sa(5,a|0,+b)}function Pzb(a,b){a=a|0;b=+b;sa(6,a|0,+b)}function Qzb(a,b){a=a|0;b=+b;sa(7,a|0,+b)}function Rzb(a,b){a=a|0;b=+b;sa(8,a|0,+b)}function Szb(a,b){a=a|0;b=+b;sa(9,a|0,+b)}function Tzb(a,b){a=a|0;b=+b;sa(10,a|0,+b)}function Uzb(a,b){a=a|0;b=+b;sa(11,a|0,+b)}function Vzb(a,b){a=a|0;b=+b;sa(12,a|0,+b)}function Wzb(a,b){a=a|0;b=+b;sa(13,a|0,+b)}function Xzb(a,b){a=a|0;b=+b;sa(14,a|0,+b)}function Yzb(a,b){a=a|0;b=+b;sa(15,a|0,+b)}function Zzb(a,b){a=a|0;b=+b;sa(16,a|0,+b)}function _zb(a,b){a=a|0;b=+b;sa(17,a|0,+b)}function $zb(a,b){a=a|0;b=+b;sa(18,a|0,+b)}function aAb(a,b){a=a|0;b=+b;sa(19,a|0,+b)}function bAb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;return Rf[a&63](b|0,c|0,d|0,e|0,f|0,+g)|0}function cAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(0,a|0,b|0,c|0,d|0,e|0,+f)|0}function dAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(1,a|0,b|0,c|0,d|0,e|0,+f)|0}function eAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(2,a|0,b|0,c|0,d|0,e|0,+f)|0}function fAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(3,a|0,b|0,c|0,d|0,e|0,+f)|0}function gAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(4,a|0,b|0,c|0,d|0,e|0,+f)|0}function hAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(5,a|0,b|0,c|0,d|0,e|0,+f)|0}function iAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(6,a|0,b|0,c|0,d|0,e|0,+f)|0}function jAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(7,a|0,b|0,c|0,d|0,e|0,+f)|0}function kAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(8,a|0,b|0,c|0,d|0,e|0,+f)|0}function lAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(9,a|0,b|0,c|0,d|0,e|0,+f)|0}function mAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(10,a|0,b|0,c|0,d|0,e|0,+f)|0}function nAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(11,a|0,b|0,c|0,d|0,e|0,+f)|0}function oAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(12,a|0,b|0,c|0,d|0,e|0,+f)|0}function pAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(13,a|0,b|0,c|0,d|0,e|0,+f)|0}function qAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(14,a|0,b|0,c|0,d|0,e|0,+f)|0}function rAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(15,a|0,b|0,c|0,d|0,e|0,+f)|0}function sAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(16,a|0,b|0,c|0,d|0,e|0,+f)|0}function tAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(17,a|0,b|0,c|0,d|0,e|0,+f)|0}function uAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(18,a|0,b|0,c|0,d|0,e|0,+f)|0}function vAb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ua(19,a|0,b|0,c|0,d|0,e|0,+f)|0}function wAb(a,b){a=a|0;b=b|0;Sf[a&2047](b|0)}function xAb(a){a=a|0;wa(0,a|0)}function yAb(a){a=a|0;wa(1,a|0)}function zAb(a){a=a|0;wa(2,a|0)}function AAb(a){a=a|0;wa(3,a|0)}function BAb(a){a=a|0;wa(4,a|0)}function CAb(a){a=a|0;wa(5,a|0)}function DAb(a){a=a|0;wa(6,a|0)}function EAb(a){a=a|0;wa(7,a|0)}function FAb(a){a=a|0;wa(8,a|0)}function GAb(a){a=a|0;wa(9,a|0)}function HAb(a){a=a|0;wa(10,a|0)}function IAb(a){a=a|0;wa(11,a|0)}function JAb(a){a=a|0;wa(12,a|0)}function KAb(a){a=a|0;wa(13,a|0)}function LAb(a){a=a|0;wa(14,a|0)}function MAb(a){a=a|0;wa(15,a|0)}function NAb(a){a=a|0;wa(16,a|0)}function OAb(a){a=a|0;wa(17,a|0)}function PAb(a){a=a|0;wa(18,a|0)}function QAb(a){a=a|0;wa(19,a|0)}function RAb(a,b,c){a=a|0;b=b|0;c=c|0;Tf[a&2047](b|0,c|0)}function SAb(a,b){a=a|0;b=b|0;ya(0,a|0,b|0)}function TAb(a,b){a=a|0;b=b|0;ya(1,a|0,b|0)}function UAb(a,b){a=a|0;b=b|0;ya(2,a|0,b|0)}function VAb(a,b){a=a|0;b=b|0;ya(3,a|0,b|0)}function WAb(a,b){a=a|0;b=b|0;ya(4,a|0,b|0)}function XAb(a,b){a=a|0;b=b|0;ya(5,a|0,b|0)}function YAb(a,b){a=a|0;b=b|0;ya(6,a|0,b|0)}function ZAb(a,b){a=a|0;b=b|0;ya(7,a|0,b|0)}function _Ab(a,b){a=a|0;b=b|0;ya(8,a|0,b|0)}function $Ab(a,b){a=a|0;b=b|0;ya(9,a|0,b|0)}function aBb(a,b){a=a|0;b=b|0;ya(10,a|0,b|0)}function bBb(a,b){a=a|0;b=b|0;ya(11,a|0,b|0)}function cBb(a,b){a=a|0;b=b|0;ya(12,a|0,b|0)}function dBb(a,b){a=a|0;b=b|0;ya(13,a|0,b|0)}function eBb(a,b){a=a|0;b=b|0;ya(14,a|0,b|0)}function fBb(a,b){a=a|0;b=b|0;ya(15,a|0,b|0)}function gBb(a,b){a=a|0;b=b|0;ya(16,a|0,b|0)}function hBb(a,b){a=a|0;b=b|0;ya(17,a|0,b|0)}function iBb(a,b){a=a|0;b=b|0;ya(18,a|0,b|0)}function jBb(a,b){a=a|0;b=b|0;ya(19,a|0,b|0)}function kBb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Uf[a&127](b|0,c|0,d|0,e|0,f|0,g|0)|0}function lBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(0,a|0,b|0,c|0,d|0,e|0,f|0)|0}function mBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(1,a|0,b|0,c|0,d|0,e|0,f|0)|0}function nBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(2,a|0,b|0,c|0,d|0,e|0,f|0)|0}function oBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(3,a|0,b|0,c|0,d|0,e|0,f|0)|0}function pBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(4,a|0,b|0,c|0,d|0,e|0,f|0)|0}function qBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(5,a|0,b|0,c|0,d|0,e|0,f|0)|0}function rBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(6,a|0,b|0,c|0,d|0,e|0,f|0)|0}function sBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(7,a|0,b|0,c|0,d|0,e|0,f|0)|0}function tBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(8,a|0,b|0,c|0,d|0,e|0,f|0)|0}function uBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(9,a|0,b|0,c|0,d|0,e|0,f|0)|0}function vBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(10,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(11,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(12,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(13,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(14,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ABb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(15,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(16,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(17,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(18,a|0,b|0,c|0,d|0,e|0,f|0)|0}function EBb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Aa(19,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FBb(a,b){a=a|0;b=b|0;return Vf[a&1023](b|0)|0}function GBb(a){a=a|0;return Ca(0,a|0)|0}function HBb(a){a=a|0;return Ca(1,a|0)|0}function IBb(a){a=a|0;return Ca(2,a|0)|0}function JBb(a){a=a|0;return Ca(3,a|0)|0}function KBb(a){a=a|0;return Ca(4,a|0)|0}function LBb(a){a=a|0;return Ca(5,a|0)|0}function MBb(a){a=a|0;return Ca(6,a|0)|0}function NBb(a){a=a|0;return Ca(7,a|0)|0}function OBb(a){a=a|0;return Ca(8,a|0)|0}function PBb(a){a=a|0;return Ca(9,a|0)|0}function QBb(a){a=a|0;return Ca(10,a|0)|0}function RBb(a){a=a|0;return Ca(11,a|0)|0}function SBb(a){a=a|0;return Ca(12,a|0)|0}function TBb(a){a=a|0;return Ca(13,a|0)|0}function UBb(a){a=a|0;return Ca(14,a|0)|0}function VBb(a){a=a|0;return Ca(15,a|0)|0}function WBb(a){a=a|0;return Ca(16,a|0)|0}function XBb(a){a=a|0;return Ca(17,a|0)|0}function YBb(a){a=a|0;return Ca(18,a|0)|0}function ZBb(a){a=a|0;return Ca(19,a|0)|0}function _Bb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Wf[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function $Bb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function aCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function bCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function cCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function dCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function eCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function fCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function gCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function hCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function iCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function jCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function kCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function lCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function mCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function nCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function oCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function pCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function qCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function rCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function sCb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return Ea(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function tCb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Xf[a&255](b|0,c|0,d|0)|0}function uCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(0,a|0,b|0,c|0)|0}function vCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(1,a|0,b|0,c|0)|0}function wCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(2,a|0,b|0,c|0)|0}function xCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(3,a|0,b|0,c|0)|0}function yCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(4,a|0,b|0,c|0)|0}function zCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(5,a|0,b|0,c|0)|0}function ACb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(6,a|0,b|0,c|0)|0}function BCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(7,a|0,b|0,c|0)|0}function CCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(8,a|0,b|0,c|0)|0}function DCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(9,a|0,b|0,c|0)|0}function ECb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(10,a|0,b|0,c|0)|0}function FCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(11,a|0,b|0,c|0)|0}function GCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(12,a|0,b|0,c|0)|0}function HCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(13,a|0,b|0,c|0)|0}function ICb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(14,a|0,b|0,c|0)|0}function JCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(15,a|0,b|0,c|0)|0}function KCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(16,a|0,b|0,c|0)|0}function LCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(17,a|0,b|0,c|0)|0}function MCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(18,a|0,b|0,c|0)|0}function NCb(a,b,c){a=a|0;b=b|0;c=c|0;return Ga(19,a|0,b|0,c|0)|0}function OCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;Yf[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0,p|0)}function PCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function QCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function RCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function SCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function TCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function UCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function VCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function WCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function XCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function YCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function ZCb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function _Cb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function $Cb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function aDb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function bDb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function cDb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function dDb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function eDb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function fDb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function gDb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;Ia(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0)}function hDb(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;Zf[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function iDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function jDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function kDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function lDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function mDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function nDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function oDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function pDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function rDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function sDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function tDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function uDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function vDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function wDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function xDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function yDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function zDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function ADb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function BDb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ka(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function CDb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;_f[a&127](b|0,c|0,d|0,e|0,f|0,g|0)}function DDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(0,a|0,b|0,c|0,d|0,e|0,f|0)}function EDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(1,a|0,b|0,c|0,d|0,e|0,f|0)}function FDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(2,a|0,b|0,c|0,d|0,e|0,f|0)}function GDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(3,a|0,b|0,c|0,d|0,e|0,f|0)}function HDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(4,a|0,b|0,c|0,d|0,e|0,f|0)}function IDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(5,a|0,b|0,c|0,d|0,e|0,f|0)}function JDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(6,a|0,b|0,c|0,d|0,e|0,f|0)}function KDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(7,a|0,b|0,c|0,d|0,e|0,f|0)}function LDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(8,a|0,b|0,c|0,d|0,e|0,f|0)}function MDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(9,a|0,b|0,c|0,d|0,e|0,f|0)}function NDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(10,a|0,b|0,c|0,d|0,e|0,f|0)}function ODb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(11,a|0,b|0,c|0,d|0,e|0,f|0)}function PDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(12,a|0,b|0,c|0,d|0,e|0,f|0)}function QDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(13,a|0,b|0,c|0,d|0,e|0,f|0)}function RDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(14,a|0,b|0,c|0,d|0,e|0,f|0)}function SDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(15,a|0,b|0,c|0,d|0,e|0,f|0)}function TDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(16,a|0,b|0,c|0,d|0,e|0,f|0)}function UDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(17,a|0,b|0,c|0,d|0,e|0,f|0)}function VDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(18,a|0,b|0,c|0,d|0,e|0,f|0)}function WDb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(19,a|0,b|0,c|0,d|0,e|0,f|0)}function XDb(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;$f[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0)}function YDb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function ZDb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function _Db(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function $Db(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function aEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function bEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function cEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function dEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function eEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function fEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function gEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function hEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function iEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function jEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function kEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function lEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function mEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function nEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function oEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function pEb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;Oa(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function qEb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;ag[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function rEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function sEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function tEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function uEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function vEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function wEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function xEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function yEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function zEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function AEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function BEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function CEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function DEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function EEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function FEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function GEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function HEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function IEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function JEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function KEb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Qa(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function LEb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;bg[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function MEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function NEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function OEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function PEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function QEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function REb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function SEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function TEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function UEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function VEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function WEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function XEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function YEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function ZEb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function _Eb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function $Eb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function aFb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function bFb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function cFb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function dFb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Sa(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function eFb(a,b,c){a=a|0;b=b|0;c=c|0;return cg[a&1023](b|0,c|0)|0}function fFb(a,b){a=a|0;b=b|0;return Ua(0,a|0,b|0)|0}function gFb(a,b){a=a|0;b=b|0;return Ua(1,a|0,b|0)|0}function hFb(a,b){a=a|0;b=b|0;return Ua(2,a|0,b|0)|0}function iFb(a,b){a=a|0;b=b|0;return Ua(3,a|0,b|0)|0}function jFb(a,b){a=a|0;b=b|0;return Ua(4,a|0,b|0)|0}function kFb(a,b){a=a|0;b=b|0;return Ua(5,a|0,b|0)|0}function lFb(a,b){a=a|0;b=b|0;return Ua(6,a|0,b|0)|0}function mFb(a,b){a=a|0;b=b|0;return Ua(7,a|0,b|0)|0}function nFb(a,b){a=a|0;b=b|0;return Ua(8,a|0,b|0)|0}function oFb(a,b){a=a|0;b=b|0;return Ua(9,a|0,b|0)|0}function pFb(a,b){a=a|0;b=b|0;return Ua(10,a|0,b|0)|0}function qFb(a,b){a=a|0;b=b|0;return Ua(11,a|0,b|0)|0}function rFb(a,b){a=a|0;b=b|0;return Ua(12,a|0,b|0)|0}function sFb(a,b){a=a|0;b=b|0;return Ua(13,a|0,b|0)|0}function tFb(a,b){a=a|0;b=b|0;return Ua(14,a|0,b|0)|0}function uFb(a,b){a=a|0;b=b|0;return Ua(15,a|0,b|0)|0}function vFb(a,b){a=a|0;b=b|0;return Ua(16,a|0,b|0)|0}function wFb(a,b){a=a|0;b=b|0;return Ua(17,a|0,b|0)|0}function xFb(a,b){a=a|0;b=b|0;return Ua(18,a|0,b|0)|0}function yFb(a,b){a=a|0;b=b|0;return Ua(19,a|0,b|0)|0}function zFb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return dg[a&127](b|0,c|0,d|0,e|0,f|0)|0}function AFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(0,a|0,b|0,c|0,d|0,e|0)|0}function BFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(1,a|0,b|0,c|0,d|0,e|0)|0}function CFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(2,a|0,b|0,c|0,d|0,e|0)|0}function DFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(3,a|0,b|0,c|0,d|0,e|0)|0}function EFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(4,a|0,b|0,c|0,d|0,e|0)|0}function FFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(5,a|0,b|0,c|0,d|0,e|0)|0}function GFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(6,a|0,b|0,c|0,d|0,e|0)|0}function HFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(7,a|0,b|0,c|0,d|0,e|0)|0}function IFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(8,a|0,b|0,c|0,d|0,e|0)|0}function JFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(9,a|0,b|0,c|0,d|0,e|0)|0}function KFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(10,a|0,b|0,c|0,d|0,e|0)|0}function LFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(11,a|0,b|0,c|0,d|0,e|0)|0}function MFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(12,a|0,b|0,c|0,d|0,e|0)|0}function NFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(13,a|0,b|0,c|0,d|0,e|0)|0}function OFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(14,a|0,b|0,c|0,d|0,e|0)|0}function PFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(15,a|0,b|0,c|0,d|0,e|0)|0}function QFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(16,a|0,b|0,c|0,d|0,e|0)|0}function RFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(17,a|0,b|0,c|0,d|0,e|0)|0}function SFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(18,a|0,b|0,c|0,d|0,e|0)|0}function TFb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(19,a|0,b|0,c|0,d|0,e|0)|0}function UFb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +eg[a&63](b|0,c|0,d|0)}function VFb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(0,a|0,b|0,c|0)}function WFb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(1,a|0,b|0,c|0)}function XFb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(2,a|0,b|0,c|0)}function YFb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(3,a|0,b|0,c|0)}function ZFb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(4,a|0,b|0,c|0)}function _Fb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(5,a|0,b|0,c|0)}function $Fb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(6,a|0,b|0,c|0)}function aGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(7,a|0,b|0,c|0)}function bGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(8,a|0,b|0,c|0)}function cGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(9,a|0,b|0,c|0)}function dGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(10,a|0,b|0,c|0)}function eGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(11,a|0,b|0,c|0)}function fGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(12,a|0,b|0,c|0)}function gGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(13,a|0,b|0,c|0)}function hGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(14,a|0,b|0,c|0)}function iGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(15,a|0,b|0,c|0)}function jGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(16,a|0,b|0,c|0)}function kGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(17,a|0,b|0,c|0)}function lGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(18,a|0,b|0,c|0)}function mGb(a,b,c){a=a|0;b=b|0;c=c|0;return +Ya(19,a|0,b|0,c|0)}function nGb(a,b,c){a=a|0;b=b|0;c=c|0;return +fg[a&63](b|0,c|0)}function oGb(a,b){a=a|0;b=b|0;return +_a(0,a|0,b|0)}function pGb(a,b){a=a|0;b=b|0;return +_a(1,a|0,b|0)}function qGb(a,b){a=a|0;b=b|0;return +_a(2,a|0,b|0)}function rGb(a,b){a=a|0;b=b|0;return +_a(3,a|0,b|0)}function sGb(a,b){a=a|0;b=b|0;return +_a(4,a|0,b|0)}function tGb(a,b){a=a|0;b=b|0;return +_a(5,a|0,b|0)}function uGb(a,b){a=a|0;b=b|0;return +_a(6,a|0,b|0)}function vGb(a,b){a=a|0;b=b|0;return +_a(7,a|0,b|0)}function wGb(a,b){a=a|0;b=b|0;return +_a(8,a|0,b|0)}function xGb(a,b){a=a|0;b=b|0;return +_a(9,a|0,b|0)}function yGb(a,b){a=a|0;b=b|0;return +_a(10,a|0,b|0)}function zGb(a,b){a=a|0;b=b|0;return +_a(11,a|0,b|0)}function AGb(a,b){a=a|0;b=b|0;return +_a(12,a|0,b|0)}function BGb(a,b){a=a|0;b=b|0;return +_a(13,a|0,b|0)}function CGb(a,b){a=a|0;b=b|0;return +_a(14,a|0,b|0)}function DGb(a,b){a=a|0;b=b|0;return +_a(15,a|0,b|0)}function EGb(a,b){a=a|0;b=b|0;return +_a(16,a|0,b|0)}function FGb(a,b){a=a|0;b=b|0;return +_a(17,a|0,b|0)}function GGb(a,b){a=a|0;b=b|0;return +_a(18,a|0,b|0)}function HGb(a,b){a=a|0;b=b|0;return +_a(19,a|0,b|0)}function IGb(a){a=a|0;return gg[a&63]()|0}function JGb(){return ab(0)|0}function KGb(){return ab(1)|0}function LGb(){return ab(2)|0}function MGb(){return ab(3)|0}function NGb(){return ab(4)|0}function OGb(){return ab(5)|0}function PGb(){return ab(6)|0}function QGb(){return ab(7)|0}function RGb(){return ab(8)|0}function SGb(){return ab(9)|0}function TGb(){return ab(10)|0}function UGb(){return ab(11)|0}function VGb(){return ab(12)|0}function WGb(){return ab(13)|0}function XGb(){return ab(14)|0}function YGb(){return ab(15)|0}function ZGb(){return ab(16)|0}function _Gb(){return ab(17)|0}function $Gb(){return ab(18)|0}function aHb(){return ab(19)|0}function bHb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;hg[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)}function cHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function dHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function eHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function fHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function gHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function hHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function iHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function jHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function kHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function lHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function mHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function nHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function oHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function pHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function qHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function rHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function sHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function tHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function uHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function vHb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;cb(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function wHb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ig[a&127](b|0,c|0,d|0,e|0)|0}function xHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(0,a|0,b|0,c|0,d|0)|0}function yHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(1,a|0,b|0,c|0,d|0)|0}function zHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(2,a|0,b|0,c|0,d|0)|0}function AHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(3,a|0,b|0,c|0,d|0)|0}function BHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(4,a|0,b|0,c|0,d|0)|0}function CHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(5,a|0,b|0,c|0,d|0)|0}function DHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(6,a|0,b|0,c|0,d|0)|0}function EHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(7,a|0,b|0,c|0,d|0)|0}function FHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(8,a|0,b|0,c|0,d|0)|0}function GHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(9,a|0,b|0,c|0,d|0)|0}function HHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(10,a|0,b|0,c|0,d|0)|0}function IHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(11,a|0,b|0,c|0,d|0)|0}function JHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(12,a|0,b|0,c|0,d|0)|0}function KHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(13,a|0,b|0,c|0,d|0)|0}function LHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(14,a|0,b|0,c|0,d|0)|0}function MHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(15,a|0,b|0,c|0,d|0)|0}function NHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(16,a|0,b|0,c|0,d|0)|0}function OHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(17,a|0,b|0,c|0,d|0)|0}function PHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(18,a|0,b|0,c|0,d|0)|0}function QHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb(19,a|0,b|0,c|0,d|0)|0}function RHb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;jg[a&511](b|0,c|0,d|0)}function SHb(a,b,c){a=a|0;b=b|0;c=c|0;gb(0,a|0,b|0,c|0)}function THb(a,b,c){a=a|0;b=b|0;c=c|0;gb(1,a|0,b|0,c|0)}function UHb(a,b,c){a=a|0;b=b|0;c=c|0;gb(2,a|0,b|0,c|0)}function VHb(a,b,c){a=a|0;b=b|0;c=c|0;gb(3,a|0,b|0,c|0)}function WHb(a,b,c){a=a|0;b=b|0;c=c|0;gb(4,a|0,b|0,c|0)}function XHb(a,b,c){a=a|0;b=b|0;c=c|0;gb(5,a|0,b|0,c|0)}function YHb(a,b,c){a=a|0;b=b|0;c=c|0;gb(6,a|0,b|0,c|0)}function ZHb(a,b,c){a=a|0;b=b|0;c=c|0;gb(7,a|0,b|0,c|0)}function _Hb(a,b,c){a=a|0;b=b|0;c=c|0;gb(8,a|0,b|0,c|0)}function $Hb(a,b,c){a=a|0;b=b|0;c=c|0;gb(9,a|0,b|0,c|0)}function aIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(10,a|0,b|0,c|0)}function bIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(11,a|0,b|0,c|0)}function cIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(12,a|0,b|0,c|0)}function dIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(13,a|0,b|0,c|0)}function eIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(14,a|0,b|0,c|0)}function fIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(15,a|0,b|0,c|0)}function gIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(16,a|0,b|0,c|0)}function hIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(17,a|0,b|0,c|0)}function iIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(18,a|0,b|0,c|0)}function jIb(a,b,c){a=a|0;b=b|0;c=c|0;gb(19,a|0,b|0,c|0)}function kIb(a){a=a|0;kg[a&63]()}function lIb(){ib(0)}function mIb(){ib(1)}function nIb(){ib(2)}function oIb(){ib(3)}function pIb(){ib(4)}function qIb(){ib(5)}function rIb(){ib(6)}function sIb(){ib(7)}function tIb(){ib(8)}function uIb(){ib(9)}function vIb(){ib(10)}function wIb(){ib(11)}function xIb(){ib(12)}function yIb(){ib(13)}function zIb(){ib(14)}function AIb(){ib(15)}function BIb(){ib(16)}function CIb(){ib(17)}function DIb(){ib(18)}function EIb(){ib(19)}function FIb(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return lg[a&127](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function GIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function HIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function IIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function JIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function KIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function LIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function MIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function NIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function OIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function PIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function QIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(10,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function RIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(11,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function SIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(12,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function TIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(13,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function UIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(14,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function VIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(15,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function WIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(16,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function XIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(17,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function YIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(18,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function ZIb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return kb(19,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function _Ib(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return mg[a&63](b|0,c|0,d|0,e|0,+f)|0}function $Ib(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(0,a|0,b|0,c|0,d|0,+e)|0}function aJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(1,a|0,b|0,c|0,d|0,+e)|0}function bJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(2,a|0,b|0,c|0,d|0,+e)|0}function cJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(3,a|0,b|0,c|0,d|0,+e)|0}function dJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(4,a|0,b|0,c|0,d|0,+e)|0}function eJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(5,a|0,b|0,c|0,d|0,+e)|0}function fJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(6,a|0,b|0,c|0,d|0,+e)|0}function gJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(7,a|0,b|0,c|0,d|0,+e)|0}function hJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(8,a|0,b|0,c|0,d|0,+e)|0}function iJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(9,a|0,b|0,c|0,d|0,+e)|0}function jJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(10,a|0,b|0,c|0,d|0,+e)|0}function kJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(11,a|0,b|0,c|0,d|0,+e)|0}function lJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(12,a|0,b|0,c|0,d|0,+e)|0}function mJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(13,a|0,b|0,c|0,d|0,+e)|0}function nJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(14,a|0,b|0,c|0,d|0,+e)|0}function oJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(15,a|0,b|0,c|0,d|0,+e)|0}function pJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(16,a|0,b|0,c|0,d|0,+e)|0}function qJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(17,a|0,b|0,c|0,d|0,+e)|0}function rJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(18,a|0,b|0,c|0,d|0,+e)|0}function sJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return mb(19,a|0,b|0,c|0,d|0,+e)|0}function tJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ng[a&255](b|0,c|0,d|0,e|0)}function uJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(0,a|0,b|0,c|0,d|0)}function vJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(1,a|0,b|0,c|0,d|0)}function wJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(2,a|0,b|0,c|0,d|0)}function xJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(3,a|0,b|0,c|0,d|0)}function yJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(4,a|0,b|0,c|0,d|0)}function zJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(5,a|0,b|0,c|0,d|0)}function AJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(6,a|0,b|0,c|0,d|0)}function BJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(7,a|0,b|0,c|0,d|0)}function CJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(8,a|0,b|0,c|0,d|0)}function DJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(9,a|0,b|0,c|0,d|0)}function EJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(10,a|0,b|0,c|0,d|0)}function FJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(11,a|0,b|0,c|0,d|0)}function GJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(12,a|0,b|0,c|0,d|0)}function HJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(13,a|0,b|0,c|0,d|0)}function IJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(14,a|0,b|0,c|0,d|0)}function JJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(15,a|0,b|0,c|0,d|0)}function KJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(16,a|0,b|0,c|0,d|0)}function LJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(17,a|0,b|0,c|0,d|0)}function MJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(18,a|0,b|0,c|0,d|0)}function NJb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ob(19,a|0,b|0,c|0,d|0)}function OJb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;la(0);return 0}function PJb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;la(1)}function QJb(a,b){a=a|0;b=+b;la(2)}function RJb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;la(3);return 0}function SJb(a){a=a|0;la(4)}function TJb(a,b){a=a|0;b=b|0;la(5)}function UJb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;la(6);return 0}function VJb(a){a=a|0;la(7);return 0}function WJb(a){a=a|0;return td(a|0)|0}function XJb(a){a=a|0;return ze(a|0)|0}function YJb(a){a=a|0;return rf(a|0)|0}function ZJb(a){a=a|0;return of(a|0)|0}function _Jb(a){a=a|0;return Jf(a|0)|0}function $Jb(a){a=a|0;return oc(a|0)|0}function aKb(a){a=a|0;return Pb(a|0)|0}function bKb(a){a=a|0;return qe(a|0)|0}function cKb(a){a=a|0;return Ne(a|0)|0}function dKb(a){a=a|0;return Sd(a|0)|0}function eKb(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;la(8);return 0}function fKb(a,b,c){a=a|0;b=b|0;c=c|0;la(9);return 0}function gKb(a,b,c){a=a|0;b=b|0;c=c|0;return yc(a|0,b|0,c|0)|0}function hKb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;la(10)}function iKb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;la(11)}function jKb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;la(12)}function kKb(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;la(13)}function lKb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;la(14)}function mKb(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;la(15)}function nKb(a,b){a=a|0;b=b|0;la(16);return 0}function oKb(a,b){a=a|0;b=b|0;return wb(a|0,b|0)|0}function pKb(a,b){a=a|0;b=b|0;return te(a|0,b|0)|0}function qKb(a,b){a=a|0;b=b|0;return Gb(a|0,b|0)|0}function rKb(a,b){a=a|0;b=b|0;return Oe(a|0,b|0)|0}function sKb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;la(17);return 0}function tKb(a,b,c){a=a|0;b=b|0;c=c|0;la(18);return 0.0}function uKb(a,b){a=a|0;b=b|0;la(19);return 0.0}function vKb(){la(20);return 0}function wKb(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;la(21)}function xKb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;la(22);return 0}function yKb(a,b,c){a=a|0;b=b|0;c=c|0;la(23)}function zKb(a,b,c){a=a|0;b=b|0;c=c|0;Gf(a|0,b|0,c|0)}function AKb(){la(24)}function BKb(){Le()}function CKb(){ge()}function DKb(){dc()}function EKb(){Ub()}function FKb(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;la(25);return 0}function GKb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;la(26);return 0}function HKb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;la(27)}function IKb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Db(a|0,b|0,c|0,d|0)} -function rY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;e=r;r=r+160|0;f=e+144|0;g=e+16|0;h=e+12|0;j=e+72|0;l=e+60|0;m=e;n=e+48|0;o=e+36|0;p=e+24|0;do if((i[4880]|0)==0?(Bb(4880)|0)!=0:0){x=0;fb(140,j|0,285310,6);q=x;x=0;if(!(q&1)){q=j+12|0;x=0;fb(140,q|0,285323,3);s=x;x=0;if(!(s&1)){s=j+24|0;x=0;fb(140,s|0,286446,6);t=x;x=0;if(!(t&1)){t=j+36|0;x=0;fb(140,t|0,296966,6);u=x;x=0;if(!(u&1)){u=j+48|0;x=0;fb(140,u|0,286453,5);v=x;x=0;if(!(v&1)){v=j+60|0;x=0;fb(140,v|0,277102,4);w=x;x=0;if(w&1){y=v;z=15}else{k[8167]=0;k[8168]=0;k[8166]=32668;k[h>>2]=32668;x=0;k[f>>2]=k[h>>2];Fa(134,32664,f|0,j|0)|0;v=x;x=0;if(((((!(v&1)?(k[h>>2]=32668,x=0,k[f>>2]=k[h>>2],Fa(134,32664,f|0,j+12|0)|0,v=x,x=0,!(v&1)):0)?(k[h>>2]=32668,x=0,k[f>>2]=k[h>>2],Fa(134,32664,f|0,j+24|0)|0,v=x,x=0,!(v&1)):0)?(k[h>>2]=32668,x=0,k[f>>2]=k[h>>2],Fa(134,32664,f|0,j+36|0)|0,v=x,x=0,!(v&1)):0)?(k[h>>2]=32668,x=0,k[f>>2]=k[h>>2],Fa(134,32664,f|0,j+48|0)|0,v=x,x=0,!(v&1)):0)?(k[h>>2]=32668,x=0,k[f>>2]=k[h>>2],Fa(134,32664,f|0,j+60|0)|0,v=x,x=0,!(v&1)):0){K2a(j+60|0);K2a(j+48|0);K2a(j+36|0);K2a(j+24|0);K2a(j+12|0);K2a(j);Kc(4880);break}v=Hc()|0;w=M;Ws(32664,k[8167]|0);K2a(j+60|0);K2a(j+48|0);K2a(j+36|0);K2a(j+24|0);K2a(j+12|0);K2a(j);A=v;B=w}}else{y=u;z=15}}else{y=t;z=15}}else{y=s;z=15}}else{y=q;z=15}}else{y=j;z=15}if((z|0)==15){q=Hc()|0;s=M;if((j|0)==(y|0)){A=q;B=s}else{t=y;do{t=t+-12|0;K2a(t)}while((t|0)!=(j|0));A=q;B=s}}Cd(4880);C=A;D=B;Sc(C|0)}while(0);q2a(l,240250,9);x=0;pa(58,a|0,c|0,d|0,32664,l|0);c=x;x=0;if(c&1){c=Hc()|0;B=M;K2a(l);C=c;D=B;Sc(C|0)}K2a(l);k[m+4>>2]=0;k[m+8>>2]=0;l=m+4|0;k[m>>2]=l;B=k[b+52>>2]|0;c=k[B+24>>2]|0;A=k[B+28>>2]|0;a:do if((c|0)==(A|0))z=14;else{B=c;while(1){x=0;fb(255,g|0,m|0,k[(k[B>>2]|0)+24>>2]|0);j=x;x=0;if(j&1)break;B=B+8|0;if((B|0)==(A|0)){z=14;break a}}B=Hc()|0;E=B;F=M;z=23}while(0);b:do if((z|0)==14){A=k[b+60>>2]|0;c:do if((A|0)!=0?(g=k[A+24>>2]|0,c=k[A+28>>2]|0,(g|0)!=(c|0)):0){B=g;while(1){x=0;fb(255,f|0,m|0,k[(k[B>>2]|0)+24>>2]|0);g=x;x=0;if(g&1)break;B=B+8|0;if((B|0)==(c|0))break c}c=Hc()|0;E=c;F=M;z=23;break b}while(0);x=0;fb(140,n|0,286453,5);A=x;x=0;if(A&1){A=Hc()|0;E=A;F=M;z=23;break}BY(f,d+4|0,n);A=k[f>>2]|0;c=k[f+4>>2]|0;K2a(n);B=A;if((B|0)==(c|0)){G=k[l>>2]|0;Ws(m,G);r=e;return}g=B;B=A;while(1){A=g+40|0;j=k[l>>2]|0;y=i[A>>0]|0;d:do if(!j){H=k[g+44>>2]|0;z=43}else{h=(y&1)==0;s=k[g+44>>2]|0;q=h?(y&255)>>>1:s;t=h?A+1|0:k[g+48>>2]|0;h=j;while(1){u=h+16|0;w=i[u>>0]|0;v=(w&1)==0;I=v?(w&255)>>>1:k[h+20>>2]|0;w=v?u+1|0:k[h+24>>2]|0;u=I>>>0>>0;v=ZLa(t,w,u?I:q)|0;J=q>>>0>>0;if((((v|0)==0?(J?-2147483648:0):v)|0)<0)K=h;else{v=ZLa(w,t,J?q:I)|0;if((((v|0)==0?(u?-2147483648:0):v)|0)>=0)break d;K=h+4|0}h=k[K>>2]|0;if(!h){H=s;z=43;break}}}while(0);if((z|0)==43){z=0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;j=(y&1)==0?(y&255)>>>1:H;x=0;nb(83,p|0,240260,22,j+22|0);s=x;x=0;if(s&1){z=45;break}x=0;Fa(88,p|0,((i[A>>0]&1)==0?A+1|0:k[g+48>>2]|0)|0,j|0)|0;j=x;x=0;if(j&1){z=45;break}x=0;j=Ta(484,p|0,240283)|0;s=x;x=0;if(s&1){z=49;break};k[o>>2]=k[j>>2];k[o+4>>2]=k[j+4>>2];k[o+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;xa(766,a|0,o|0);j=x;x=0;if(j&1){z=50;break}K2a(o);K2a(p)}j=B;s=k[j+4>>2]|0;if(!s){h=j;while(1){j=k[h+8>>2]|0;if((k[j>>2]|0)==(h|0)){L=j;break}else h=j}}else{h=s;while(1){A=k[h>>2]|0;if(!A){L=h;break}else h=A}}if((L|0)==(c|0)){z=34;break}else{g=L;B=L}}if((z|0)==34){G=k[l>>2]|0;Ws(m,G);r=e;return}else if((z|0)==45){B=Hc()|0;g=M;K2a(p);N=l;O=g;P=B;z=24;break}else if((z|0)==49){B=Hc()|0;Q=B;R=M}else if((z|0)==50){B=Hc()|0;g=M;K2a(o);Q=B;R=g}K2a(p);S=Q;T=R;U=l}while(0);if((z|0)==23){N=l;O=F;P=E;z=24}if((z|0)==24){S=P;T=O;U=N}Ws(m,k[U>>2]|0);C=S;D=T;Sc(C|0)}function sY(a,b){a=a|0;b=b|0;rY(a,b,b+68|0,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);return 1}function tY(a,b){a=a|0;b=b|0;rY(a,b,b+68|0,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);return 1}function uY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c+28|0;e=c+24|0;f=c+12|0;g=c;h=iDa(b,5224,5640,0)|0;if(!h){r=c;return 1}a:do if((i[4888]|0)==0?(Bb(4888)|0)!=0:0){x=0;fb(140,f|0,277102,4);b=x;x=0;do if(!(b&1)){k[8170]=0;k[8171]=0;k[8169]=32680;k[e>>2]=32680;x=0;k[d>>2]=k[e>>2];Fa(134,32676,d|0,f|0)|0;j=x;x=0;if(j&1){j=Hc()|0;l=M;Ws(32676,k[8170]|0);K2a(f);m=j;n=l;break}else{K2a(f);Kc(4888);break a}}else{l=Hc()|0;m=l;n=M}while(0);Cd(4888);o=n;p=m;Sc(p|0)}while(0);m=(Vf[k[(k[h>>2]|0)+16>>2]&1023](h)|0)+4|0;q2a(g,240334,10);x=0;pa(58,a|0,h+24|0,m|0,32676,g|0);m=x;x=0;if(m&1){m=Hc()|0;h=M;K2a(g);o=h;p=m;Sc(p|0)}else{K2a(g);r=c;return 1}return 0}function vY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+8|0;e=c;f=KBa(68)|0;k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=31248;g=f+12|0;x=0;xa(731,g|0,1);h=x;x=0;if(h&1){h=Hc()|0;c0a(f);OBa(f);Sc(h|0)}h=g;k[d>>2]=21048;j=d+4|0;x=0;xa(604,j|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;l=M;m=b;j0a(f);Sc(m|0)}x=0;Ta(564,g|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;b=M;k[d>>2]=21048;K2a(j);l=b;m=g;j0a(f);Sc(m|0)}k[d>>2]=21048;K2a(j);j=k[a+8>>2]|0;k[e>>2]=h;d=e+4|0;k[d>>2]=f;h0a(f);g=j+4|0;b=k[g>>2]|0;if(b>>>0<(k[j+8>>2]|0)>>>0){k[b>>2]=h;k[b+4>>2]=f;k[e>>2]=0;k[d>>2]=0;k[g>>2]=b+8;n=a+4|0;i[n>>0]=1;j0a(f);r=c;return}x=0;xa(732,j|0,e|0);e=x;x=0;if(e&1){e=Hc()|0;j=M;b=k[d>>2]|0;if(!b){l=j;m=e;j0a(f);Sc(m|0)}j0a(b);l=j;m=e;j0a(f);Sc(m|0)}else{m=k[d>>2]|0;if(!m){n=a+4|0;i[n>>0]=1;j0a(f);r=c;return}j0a(m);n=a+4|0;i[n>>0]=1;j0a(f);r=c;return}}function wY(){k[8172]=0;k[8173]=0;k[8174]=0;return}function xY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=$Y(a,e,f,c)|0;e=k[g>>2]|0;if(e){h=e;r=d;return h|0}e=KBa(28)|0;x=0;xa(604,e+16|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(e);Sc(c|0)}c=k[f>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=c;k[g>>2]=e;c=k[k[a>>2]>>2]|0;if(!c)i=e;else{k[a>>2]=c;i=k[g>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;h=e;r=d;return h|0}function yY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=a+8|0;a:do if((k[d>>2]|0)!=0?(e=k[a>>2]|0,f=a+4|0,k[a>>2]=f,k[(k[f>>2]|0)+8>>2]=0,k[f>>2]=0,k[d>>2]=0,f=k[e+4>>2]|0,g=(f|0)==0?e:f,(g|0)!=0):0){f=k[c>>2]|0;e=k[b>>2]|0;h=e;i=e;e=g;while(1){if((h|0)==(f|0)){j=e;l=5;break}x=0;Ta(493,e+16|0,h+16|0)|0;g=x;x=0;if(g&1){m=e;break}x=0;Ta(493,e+28|0,h+28|0)|0;g=x;x=0;if(g&1){m=e;break}x=0;Ta(493,e+40|0,h+40|0)|0;g=x;x=0;if(g&1){m=e;break}g=k[e+8>>2]|0;do if(g){n=k[g>>2]|0;if((n|0)==(e|0)){k[g>>2]=0;o=k[g+4>>2]|0;if(!o){p=g;break}else q=o;while(1){o=k[q>>2]|0;if(o){q=o;continue}o=k[q+4>>2]|0;if(!o){r=q;break}else q=o}p=r;break}else{k[g+4>>2]=0;if(!n){p=g;break}else s=n;while(1){o=k[s>>2]|0;if(o){s=o;continue}o=k[s+4>>2]|0;if(!o){t=s;break}else s=o}p=t;break}}else p=0;while(0);ZY(a,e)|0;g=k[i+4>>2]|0;if(!g){n=i;while(1){o=k[n+8>>2]|0;if((k[o>>2]|0)==(n|0)){u=o;break}else n=o}}else{n=g;while(1){o=k[n>>2]|0;if(!o){u=n;break}else n=o}}k[b>>2]=u;if(!p)break a;else{h=u;i=u;e=p}}if((l|0)==5){e=k[j+8>>2]|0;if(!e)v=j;else{i=e;while(1){e=k[i+8>>2]|0;if(!e){w=i;break}else i=e}v=w}zY(a,v);break}i=Hc(0)|0;me(i|0)|0;i=k[m+8>>2]|0;if(!i)y=m;else{e=i;while(1){i=k[e+8>>2]|0;if(!i){z=e;break}else e=i}y=z}zY(a,y);x=0;hb(46);x=0;e=Hc()|0;x=0;hb(45);i=x;x=0;if(i&1){i=Hc(0)|0;Fg(i)}else Sc(e|0)}while(0);y=k[b>>2]|0;z=k[c>>2]|0;if((y|0)==(z|0))return;c=y;m=y;while(1){_Y(a,c+16|0)|0;y=k[m+4>>2]|0;if(!y){v=m;while(1){w=k[v+8>>2]|0;if((k[w>>2]|0)==(v|0)){A=w;break}else v=w}}else{v=y;while(1){w=k[v>>2]|0;if(!w){A=v;break}else v=w}}k[b>>2]=A;if((A|0)==(z|0))break;else{c=A;m=A}}return}function zY(a,b){a=a|0;b=b|0;if(!b)return;else{zY(a,k[b>>2]|0);zY(a,k[b+4>>2]|0);K2a(b+40|0);K2a(b+28|0);K2a(b+16|0);OBa(b);return}}function AY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+16|0;e=d;f=Zs(b,e,c)|0;g=k[f>>2]|0;if(g){h=0;j=g;l=j;k[a>>2]=l;m=a+4|0;i[m>>0]=h;r=d;return}g=KBa(28)|0;x=0;xa(604,g+16|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(g);Sc(c|0)}c=k[e>>2]|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=c;k[f>>2]=g;c=k[k[b>>2]>>2]|0;if(!c)n=g;else{k[b>>2]=c;n=k[f>>2]|0}ui(k[b+4>>2]|0,n);n=b+8|0;k[n>>2]=(k[n>>2]|0)+1;h=1;j=g;l=j;k[a>>2]=l;m=a+4|0;i[m>>0]=h;r=d;return}function BY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=b+4|0;b=k[d>>2]|0;a:do if(!b)e=d;else{f=i[c>>0]|0;g=(f&1)==0;h=g?(f&255)>>>1:k[c+4>>2]|0;f=g?c+1|0:k[c+8>>2]|0;g=d;j=b;b:while(1){l=j;while(1){m=l+16|0;n=i[m>>0]|0;o=(n&1)==0;p=o?(n&255)>>>1:k[l+20>>2]|0;n=o?m+1|0:k[l+24>>2]|0;m=p>>>0>>0;o=ZLa(f,n,m?p:h)|0;q=h>>>0

      >>0;if((((o|0)==0?(q?-2147483648:0):o)|0)<0){r=l;break}o=ZLa(n,f,q?h:p)|0;if((((o|0)==0?(m?-2147483648:0):o)|0)>=0){s=g;t=l;break b}l=k[l+4>>2]|0;if(!l){e=g;break a}}j=k[r>>2]|0;if(!j){e=r;break a}else g=r}g=k[t>>2]|0;c:do if(!g)u=t;else{j=t;l=g;while(1){o=l;while(1){m=o+16|0;p=i[m>>0]|0;q=(p&1)==0;n=q?(p&255)>>>1:k[o+20>>2]|0;p=ZLa(q?m+1|0:k[o+24>>2]|0,f,h>>>0>>0?h:n)|0;if((((p|0)==0?(n>>>0>>0?-2147483648:0):p)|0)>=0){v=o;break}o=k[o+4>>2]|0;if(!o){u=j;break c}}l=k[v>>2]|0;if(!l){u=v;break}else j=v}}while(0);g=u;j=k[t+4>>2]|0;d:do if(!j)w=s;else{l=s;o=j;while(1){p=o;while(1){n=p+16|0;m=i[n>>0]|0;q=(m&1)==0;x=q?(m&255)>>>1:k[p+20>>2]|0;m=ZLa(f,q?n+1|0:k[p+24>>2]|0,x>>>0>>0?x:h)|0;if((((m|0)==0?(h>>>0>>0?-2147483648:0):m)|0)<0){y=p;break}p=k[p+4>>2]|0;if(!p){w=l;break d}}o=k[y>>2]|0;if(!o){w=y;break}else l=y}}while(0);k[a>>2]=g;k[a+4>>2]=w;return}while(0);w=e;k[a>>2]=w;k[a+4>>2]=w;return}function CY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function DY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function EY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function FY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function GY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function HY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function IY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function JY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function KY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function LY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function MY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function NY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function OY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function PY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function QY(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function RY(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function SY(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function TY(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function UY(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function VY(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function WY(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function XY(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function YY(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function ZY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;c=b+16|0;d=a+4|0;e=k[d>>2]|0;do if(e){f=i[c>>0]|0;g=(f&1)==0;h=g?(f&255)>>>1:k[b+20>>2]|0;f=g?c+1|0:k[b+24>>2]|0;g=e;while(1){j=g+16|0;l=i[j>>0]|0;m=(l&1)==0;n=m?(l&255)>>>1:k[g+20>>2]|0;l=ZLa(f,m?j+1|0:k[g+24>>2]|0,n>>>0>>0?n:h)|0;if((((l|0)==0?(h>>>0>>0?-2147483648:0):l)|0)<0){l=k[g>>2]|0;if(!l){o=g;p=g;q=5;break}else r=l}else{l=g+4|0;n=k[l>>2]|0;if(!n){s=l;t=g;q=8;break}else r=n}g=r}if((q|0)==5){u=o;v=p;break}else if((q|0)==8){u=s;v=t;break}}else{u=d;v=d}while(0);k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=v;k[u>>2]=b;v=k[k[a>>2]>>2]|0;if(!v){w=b;x=a+4|0;y=k[x>>2]|0;ui(y,w);z=a+8|0;A=k[z>>2]|0;B=A+1|0;k[z>>2]=B;return b|0}k[a>>2]=v;w=k[u>>2]|0;x=a+4|0;y=k[x>>2]|0;ui(y,w);z=a+8|0;A=k[z>>2]|0;B=A+1|0;k[z>>2]=B;return b|0}function _Y(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=a+4|0;d=k[c>>2]|0;do if(d){e=i[b>>0]|0;f=(e&1)==0;g=f?(e&255)>>>1:k[b+4>>2]|0;e=f?b+1|0:k[b+8>>2]|0;f=d;while(1){h=f+16|0;j=i[h>>0]|0;l=(j&1)==0;m=l?(j&255)>>>1:k[f+20>>2]|0;j=ZLa(e,l?h+1|0:k[f+24>>2]|0,m>>>0>>0?m:g)|0;if((((j|0)==0?(g>>>0>>0?-2147483648:0):j)|0)<0){j=k[f>>2]|0;if(!j){n=f;o=f;p=5;break}else q=j}else{j=f+4|0;m=k[j>>2]|0;if(!m){r=j;s=f;p=8;break}else q=m}f=q}if((p|0)==5){t=n;u=o;break}else if((p|0)==8){t=r;u=s;break}}else{t=c;u=c}while(0);c=KBa(52)|0;s=c+16|0;x=0;xa(604,s|0,b|0);r=x;x=0;if(r&1){r=Hc()|0;v=M;w=r;OBa(c);Sc(w|0)}r=c+28|0;x=0;xa(604,r|0,b+12|0);p=x;x=0;do if(p&1){o=Hc()|0;y=M;z=o}else{x=0;xa(604,c+40|0,b+24|0);o=x;x=0;if(o&1){o=Hc()|0;n=M;K2a(r);y=n;z=o;break}k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=u;k[t>>2]=c;o=k[k[a>>2]>>2]|0;if(!o){A=c;B=a+4|0;C=k[B>>2]|0;ui(C,A);D=a+8|0;E=k[D>>2]|0;F=E+1|0;k[D>>2]=F;return c|0}k[a>>2]=o;A=k[t>>2]|0;B=a+4|0;C=k[B>>2]|0;ui(C,A);D=a+8|0;E=k[D>>2]|0;F=E+1|0;k[D>>2]=F;return c|0}while(0);K2a(s);v=y;w=z;OBa(c);Sc(w|0);return 0}function $Y(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=f+16|0,h=i[d>>0]|0,j=(h&1)==0,l=j?(h&255)>>>1:k[d+4>>2]|0,h=i[g>>0]|0,m=(h&1)==0,n=m?(h&255)>>>1:k[f+20>>2]|0,h=j?d+1|0:k[d+8>>2]|0,j=m?g+1|0:k[f+24>>2]|0,g=n>>>0>>0,m=ZLa(h,j,g?n:l)|0,o=l>>>0>>0,(((m|0)==0?(o?-2147483648:0):m)|0)>=0):0){m=ZLa(j,h,o?l:n)|0;if((((m|0)==0?(g?-2147483648:0):m)|0)>=0){k[c>>2]=b;p=c;return p|0}m=f+4|0;g=k[m>>2]|0;n=(g|0)==0;if(n){o=f;while(1){j=k[o+8>>2]|0;if((k[j>>2]|0)==(o|0)){q=j;break}else o=j}}else{o=g;while(1){g=k[o>>2]|0;if(!g){q=o;break}else o=g}}if((q|0)!=(e|0)?(e=q+16|0,o=i[e>>0]|0,g=(o&1)==0,j=g?(o&255)>>>1:k[q+20>>2]|0,o=ZLa(h,g?e+1|0:k[q+24>>2]|0,j>>>0>>0?j:l)|0,(((o|0)==0?(l>>>0>>0?-2147483648:0):o)|0)>=0):0){p=Zs(a,c,d)|0;return p|0}if(n){k[c>>2]=f;p=m;return p|0}else{k[c>>2]=q;p=q;return p|0}}if((f|0)!=(k[a>>2]|0)){q=k[f>>2]|0;if(!q){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0))m=n;else{r=n;break}}}else{m=q;while(1){q=k[m+4>>2]|0;if(!q){r=m;break}else m=q}}m=r+16|0;q=i[m>>0]|0;n=(q&1)==0;o=n?(q&255)>>>1:k[r+20>>2]|0;q=i[d>>0]|0;j=(q&1)==0;l=j?(q&255)>>>1:k[d+4>>2]|0;q=ZLa(n?m+1|0:k[r+24>>2]|0,j?d+1|0:k[d+8>>2]|0,l>>>0>>0?l:o)|0;if((((q|0)==0?(o>>>0>>0?-2147483648:0):q)|0)<0)s=r;else{p=Zs(a,c,d)|0;return p|0}}else s=b;if(!(k[f>>2]|0)){k[c>>2]=f;p=f;return p|0}else{f=s;k[c>>2]=f;p=f+4|0;return p|0}return 0}function aZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+16|0;d=c;x=0;xa(k[(k[b>>2]|0)+12>>2]|0,b|0,a|0);b=x;x=0;if(!(b&1)){e=a+17|0;f=i[e>>0]|0;g=f<<24>>24==0;r=c;return g|0}b=Hc(4496)|0;h=M;if((h|0)!=(hf(4496)|0)){j=b;l=h;Sc(j|0)}me(b|0)|0;b=a+17|0;a=i[b>>0]|0;x=0;fb(140,d|0,329672,0);h=x;x=0;do if(h&1){m=Hc()|0;n=m;o=M}else{x=0;pa(57,a<<24>>24!=0|0,d|0,44,240381,240430);m=x;x=0;if(m&1){m=Hc()|0;p=M;K2a(d);n=m;o=p;break}K2a(d);ge();e=b;f=i[e>>0]|0;g=f<<24>>24==0;r=c;return g|0}while(0);x=0;hb(45);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else{j=n;l=o;Sc(j|0)}return 0}function bZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;g=a+8|0;k$(d,k[g>>2]|0,k[b+24>>2]|0,1);h=k[d>>2]|0;i=d+4|0;j=k[i>>2]|0;do if((h|0)==(j|0)){x=0;fb(140,e|0,240510,22);l=x;x=0;if(!(l&1)){x=0;fb(256,a|0,b+8|0,e|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;K2a(e);n=m;o=l;break}else{K2a(e);p=18;break}}else p=5}else{if((j-h|0)==4){l=k[h>>2]|0;x=0;m=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;q=x;x=0;if(q&1){p=5;break}k[m+24>>2]=l;p=18;break}x=0;l=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;m=x;x=0;if(!(m&1)?(x=0,nb(117,f|0,k[g>>2]|0,b|0,d|0),m=x,x=0,!(m&1)):0){m=l+28|0;q=k[m>>2]|0;s=q;t=l+32|0;if(!q)u=l+36|0;else{v=k[t>>2]|0;if((v|0)!=(q|0))k[t>>2]=v+(~((v+-4-s|0)>>>2)<<2);OBa(q);q=l+36|0;k[q>>2]=0;k[t>>2]=0;k[m>>2]=0;u=q}k[m>>2]=k[f>>2];m=f+4|0;k[t>>2]=k[m>>2];t=f+8|0;k[u>>2]=k[t>>2];k[t>>2]=0;k[m>>2]=0;k[f>>2]=0;p=18}else p=5}while(0);if((p|0)==5){f=Hc()|0;n=M;o=f}else if((p|0)==18){p=k[d>>2]|0;if(!p){r=c;return 0}f=k[i>>2]|0;if((f|0)!=(p|0))k[i>>2]=f+(~((f+-4-p|0)>>>2)<<2);OBa(p);r=c;return 0}c=k[d>>2]|0;if(!c)Sc(o|0);d=k[i>>2]|0;if((d|0)!=(c|0))k[i>>2]=d+(~((d+-4-c|0)>>>2)<<2);OBa(c);Sc(o|0);return 0}function cZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+64|0;e=d+40|0;f=d;mZ(a,b,c);c=f;b=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));c=f+20|0;b=f+24|0;k[b>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;a=f+4|0;d=f+8|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=31624;k[f>>2]=31588;k[c>>2]=31648;x=0;nb(114,f|0,240533,240381,263);x=0;f=Hc()|0;k[a>>2]=31680;k[a+-4>>2]=31708;k[a+16>>2]=31732;K2a(d);k[c>>2]=20796;c=k[b>>2]|0;if(!c)Sc(f|0);x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d)Sc(f|0);k[b>>2]=0;Sc(f|0)}function dZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;a=r;r=r+16|0;c=a;d=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;e8(c,b+24|0);b=k[c>>2]|0;e=c+4|0;f=k[e>>2]|0;k[c>>2]=0;k[e>>2]=0;k[d+4>>2]=b;b=d+8|0;d=k[b>>2]|0;k[b>>2]=f;if(d)j0a(d);d=k[e>>2]|0;if(!d){r=a;return 1}j0a(d);r=a;return 1}function eZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c+12|0;e=c;f=l$(k[a+8>>2]|0,b+24|0,1)|0;g=(f|0)==0;do if(g){q2a(d,240640,35);x=0;fb(256,a|0,b+8|0,d|0);h=x;x=0;if(!(h&1)){K2a(d);break}h=Hc()|0;j=M;K2a(d);l=h;m=j;Sc(l|0)}while(0);d=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+12|0;k[d>>2]=f;if(!g){g=iDa(f,4520,5376,0)|0;if(g){d=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;j=KBa(48)|0;k[j+4>>2]=0;k[j+8>>2]=0;k[j>>2]=33076;h=j+16|0;k[h>>2]=0;n=j+20|0;k[n>>2]=0;o=j+12|0;p=j+28|0;k[p>>2]=0;k[j+32>>2]=0;k[j+24>>2]=p;k[j+36>>2]=0;i[j+40>>0]=1;k[o>>2]=38380;k[j+44>>2]=g;g=o;o=j;i0a(j);k[h>>2]=g;h=k[n>>2]|0;k[n>>2]=o;if(h)k0a(h);k[d+4>>2]=g;g=d+8|0;d=k[g>>2]|0;k[g>>2]=o;if(!d){r=c;return}j0a(d);r=c;return}d=iDa(f,4520,5248,0)|0;if(d){o=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;g=KBa(40)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33104;h=g+16|0;k[h>>2]=0;n=g+20|0;k[n>>2]=0;j=g+12|0;p=g+28|0;k[p>>2]=0;k[g+32>>2]=0;k[g+24>>2]=p;k[j>>2]=38496;k[g+36>>2]=d;d=j;j=g;i0a(g);k[h>>2]=d;h=k[n>>2]|0;k[n>>2]=j;if(h)k0a(h);k[o+4>>2]=d;d=o+8|0;o=k[d>>2]|0;k[d>>2]=j;if(!o){r=c;return}j0a(o);r=c;return}o=iDa(f,4520,5312,0)|0;if(o){f=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;j=KBa(52)|0;k[j+4>>2]=0;k[j+8>>2]=0;k[j>>2]=33132;d=j+16|0;k[d>>2]=0;h=j+20|0;k[h>>2]=0;n=j+12|0;g=j+28|0;k[g>>2]=0;k[j+32>>2]=0;k[j+24>>2]=g;k[n>>2]=38268;k[j+36>>2]=o;i[j+40>>0]=0;k[j+44>>2]=0;k[j+48>>2]=0;o=n;n=j;i0a(j);k[d>>2]=o;d=k[h>>2]|0;k[h>>2]=n;if(d)k0a(d);k[f+4>>2]=o;o=f+8|0;f=k[o>>2]|0;k[o>>2]=n;if(!f){r=c;return}j0a(f);r=c;return}}q2a(e,240676,48);x=0;fb(257,a|0,b+8|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(e);l=b;m=a;Sc(l|0)}else{K2a(e);r=c;return}}function fZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+64|0;e=d+40|0;f=d;lZ(a,b,c);c=f;b=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));c=f+20|0;b=f+24|0;k[b>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;a=f+4|0;d=f+8|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=31624;k[f>>2]=31588;k[c>>2]=31648;x=0;nb(114,f|0,240725,240381,249);x=0;f=Hc()|0;k[a>>2]=31680;k[a+-4>>2]=31708;k[a+16>>2]=31732;K2a(d);k[c>>2]=20796;c=k[b>>2]|0;if(!c)Sc(f|0);x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d)Sc(f|0);k[b>>2]=0;Sc(f|0)}function gZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;a=r;r=r+32|0;c=a+24|0;d=a+16|0;e=a+8|0;f=a;g=k[b+24>>2]|0;h=Vf[k[(k[g>>2]|0)+16>>2]&1023](g)|0;k[c>>2]=k[h+4>>2];g=c+4|0;i=k[h+8>>2]|0;k[g>>2]=i;if(i)h0a(i);i=k[b+32>>2]|0;x=0;h=Ba(k[(k[i>>2]|0)+16>>2]|0,i|0)|0;i=x;x=0;if(!(i&1)){k[d>>2]=k[h+4>>2];i=d+4|0;j=k[h+8>>2]|0;k[i>>2]=j;if(j)h0a(j);x=0;fb(246,e|0,2,c|0);j=x;x=0;if(!(j&1)){j=k[e>>2]|0;h=e+4|0;l=k[h>>2]|0;k[e>>2]=0;k[h>>2]=0;k[c>>2]=j;j=k[g>>2]|0;k[g>>2]=l;if((j|0)!=0?(j0a(j),j=k[h>>2]|0,(j|0)!=0):0)j0a(j);x=0;fb(246,f|0,0,d|0);j=x;x=0;if(!(j&1)){j=k[f>>2]|0;h=f+4|0;l=k[h>>2]|0;k[f>>2]=0;k[h>>2]=0;k[d>>2]=j;j=k[i>>2]|0;k[i>>2]=l;if((j|0)!=0?(j0a(j),j=k[h>>2]|0,(j|0)!=0):0)j0a(j);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(!(b&1)?(x=0,b=Ba(563,52)|0,h=x,x=0,!(h&1)):0){k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=33160;h=b+16|0;k[h>>2]=0;l=b+20|0;k[l>>2]=0;f=b+12|0;e=b+28|0;k[e>>2]=0;k[b+32>>2]=0;k[b+24>>2]=e;k[f>>2]=38720;k[b+36>>2]=k[c>>2];c=k[g>>2]|0;k[b+40>>2]=c;if(c)h0a(c);k[b+44>>2]=k[d>>2];d=k[i>>2]|0;k[b+48>>2]=d;if(d)h0a(d);d=f;f=b;i0a(b);k[h>>2]=d;h=k[l>>2]|0;k[l>>2]=f;if(h)k0a(h);k[j+4>>2]=d;d=j+8|0;j=k[d>>2]|0;k[d>>2]=f;if(j)j0a(j);j=k[i>>2]|0;if(j)j0a(j);j=k[g>>2]|0;if(!j){r=a;return}j0a(j);r=a;return}}}a=Hc()|0;j=M;f=k[i>>2]|0;if(!f){m=j;n=a}else{j0a(f);m=j;n=a}}else{a=Hc()|0;m=M;n=a}a=k[g>>2]|0;if(!a)Sc(n|0);j0a(a);Sc(n|0)}function hZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+128|0;d=c+40|0;e=c+120|0;f=c+100|0;g=c+112|0;h=c+88|0;j=c+80|0;l=c+72|0;m=c;n=c+64|0;o=c+56|0;p=b+24|0;q=k[p>>2]|0;s=Vf[k[(k[q>>2]|0)+16>>2]&1023](q)|0;q=k[s+4>>2]|0;k[e>>2]=q;t=e+4|0;u=k[s+8>>2]|0;k[t>>2]=u;if(u)h0a(u);x=0;u=Ba(k[(k[q>>2]|0)+44>>2]|0,q|0)|0;q=x;x=0;a:do if(q&1)v=8;else{do if(!u){s=k[p>>2]|0;x=0;fb(140,f|0,240825,49);w=x;x=0;if(w&1){v=8;break a}x=0;fb(257,a|0,s+8|0,f|0);s=x;x=0;if(s&1){s=Hc()|0;w=M;K2a(f);y=s;z=w;break a}else{K2a(f);break}}while(0);w=k[b+32>>2]|0;do if(!w){x=0;s=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;A=x;x=0;if(A&1){v=8;break a}k[o>>2]=0;x=0;fb(258,n|0,o|0,e|0);A=x;x=0;if(A&1){v=8;break a}A=k[n>>2]|0;B=n+4|0;C=k[B>>2]|0;k[n>>2]=0;k[B>>2]=0;k[s+4>>2]=A;A=s+8|0;s=k[A>>2]|0;k[A>>2]=C;if(s)j0a(s)}else{x=0;s=Ba(k[(k[w>>2]|0)+16>>2]|0,w|0)|0;C=x;x=0;if(C&1){v=8;break a}if((k[s+4>>2]|0)==0?(k[g>>2]=33980,x=0,xa(k[(k[w>>2]|0)+12>>2]|0,w|0,g|0),s=x,x=0,s&1):0){v=8;break a}x=0;s=Ba(k[(k[w>>2]|0)+16>>2]|0,w|0)|0;C=x;x=0;if(C&1){v=8;break a}C=k[s+4>>2]|0;if((C|0)!=0?(s=iDa(C,168,6624,0)|0,(s|0)!=0):0){C=s+40|0;k[d>>2]=0;A=d+8|0;k[A>>2]=0;B=d+13|0;i[B>>0]=1;D=k[s+48>>2]|0;E=D>>>0>134217728?134217728:D;if(E>>>0>2){F=E>>>0>8?E:8;x=0;G=Ba(563,F<<2|0)|0;H=x;x=0;if(H&1){v=8;break a}i[B>>0]=0;k[A>>2]=E;k[d>>2]=F;k[d+4>>2]=G;I=G}else{k[A>>2]=E;I=d}Dyb(I|0,((i[s+53>>0]|0)==0?k[s+44>>2]|0:C)|0,D<<2|0)|0;D=i[s+52>>0]|0;i[d+12>>0]=D;C=i[B>>0]|0;if(D<<24>>24==0&(k[A>>2]|0)==1)J=(k[(C<<24>>24==0?k[d+4>>2]|0:d)>>2]|0)!=1;else J=1;if(!(C<<24>>24))OBa(k[d+4>>2]|0);if(!J){x=0;C=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;A=x;x=0;if(A&1){v=8;break a}k[l>>2]=0;x=0;fb(k[(k[s>>2]|0)+84>>2]|0,m|0,s|0,0);s=x;x=0;if(s&1){v=8;break a}x=0;nb(118,j|0,l|0,e|0,m|0);s=x;x=0;if(s&1){v=8;break a}s=k[j>>2]|0;A=j+4|0;D=k[A>>2]|0;k[j>>2]=0;k[A>>2]=0;k[C+4>>2]=s;s=C+8|0;C=k[s>>2]|0;k[s>>2]=D;if(!C)break;j0a(C);break}}x=0;fb(140,h|0,240875,47);C=x;x=0;if(C&1){v=8;break a}x=0;fb(257,a|0,w+8|0,h|0);C=x;x=0;if(C&1){C=Hc()|0;D=M;K2a(h);y=C;z=D;break a}else{K2a(h);break}}while(0);w=k[t>>2]|0;if(!w){r=c;return}j0a(w);r=c;return}while(0);if((v|0)==8){v=Hc()|0;y=v;z=M}z=k[t>>2]|0;if(!z)Sc(y|0);j0a(z);Sc(y|0)}function iZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+48|0;d=c+32|0;e=c+24|0;f=c;k[d>>2]=0;g=d+4|0;k[g>>2]=0;k[d+8>>2]=0;k[e>>2]=k[b+32>>2];k[e+4>>2]=d;h=f+16|0;k[h>>2]=f;k[f>>2]=33188;k[f+4>>2]=a;k[f+8>>2]=b;x=0;Ta(571,e|0,f|0)|0;e=x;x=0;if(e&1){e=Hc()|0;b=k[h>>2]|0;if((b|0)!=(f|0)){if(b)Sf[k[(k[b>>2]|0)+20>>2]&2047](b)}else Sf[k[(k[b>>2]|0)+16>>2]&2047](b);b=k[d>>2]|0;if(!b)Sc(e|0);a=k[g>>2]|0;if((a|0)==(b|0))i=b;else{j=a;while(1){a=j+-8|0;k[g>>2]=a;l=k[j+-4>>2]|0;if(!l)m=a;else{j0a(l);m=k[g>>2]|0}if((m|0)==(b|0))break;else j=m}i=k[d>>2]|0}OBa(i);Sc(e|0)}else{e=k[h>>2]|0;if((e|0)!=(f|0)){if(e)Sf[k[(k[e>>2]|0)+20>>2]&2047](e)}else Sf[k[(k[f>>2]|0)+16>>2]&2047](f);f=k[d>>2]|0;if(!f){r=c;return 0}e=k[g>>2]|0;if((e|0)==(f|0))n=f;else{h=e;while(1){e=h+-8|0;k[g>>2]=e;i=k[h+-4>>2]|0;if(!i)o=e;else{j0a(i);o=k[g>>2]|0}if((o|0)==(f|0))break;else h=o}n=k[d>>2]|0}OBa(n);r=c;return 0}return 0}function jZ(a,b){a=a|0;b=b|0;var c=0;c=k[a+12>>2]|0;a=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+20|0;k[a>>2]=c;return 1}function kZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;c=r;r=r+96|0;d=c+84|0;e=c+72|0;f=c+60|0;g=c+48|0;h=c+40|0;j=c+24|0;l=c+12|0;m=c;n=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;if(k[n>>2]|0){r=c;return}n=k[b+40>>2]|0;a:do if(!n){x=0;o=Ba(602,b|0)|0;p=x;x=0;if(!(p&1))if(!o){x=0;fb(140,m|0,241357,21);o=x;x=0;if(o&1){q=0;s=7}else{x=0;fb(257,a|0,b+8|0,m|0);o=x;x=0;if(!(o&1)){K2a(m);t=0;u=0;s=78;break}o=Hc()|0;p=M;K2a(m);v=o;w=p;Sc(v|0)}}else{t=0;u=0;s=78}else{q=0;s=7}}else{x=0;p=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;o=x;x=0;if(!(o&1)){o=k[p+4>>2]|0;y=k[p+8>>2]|0;p=y;z=(y|0)==0;if(!z)h0a(y);A=k[b+60>>2]|0;if((o|0)!=0?(B=iDa(o,168,6688,0)|0,(B|0)!=0):0){x=0;C=Ba(600,b|0)|0;D=x;x=0;if(D&1){q=p;s=7;break}b:do if(C){D=iDa(k[b+36>>2]|0,5224,4520,0)|0;if(!D){x=0;hb(49);x=0;q=p;s=7;break a}E=iDa(k[D+36>>2]|0,5224,5312,0)|0;if(!E){x=0;hb(49);x=0;q=p;s=7;break a}c:do if(!(i[E+72>>0]|0)){if(!A){F=1;G=1;break b}x=0;fb(140,e|0,241024,94);D=x;x=0;if(D&1){q=p;s=7;break a}x=0;fb(257,a|0,b+8|0,e|0);D=x;x=0;if(D&1){D=Hc()|0;H=M;K2a(e);I=D;J=H;K=p;break a}else{K2a(e);break}}else{switch(A|0){case 0:{F=1;G=1;break b;break}case 2:break;default:break c}x=0;fb(140,d|0,240923,100);H=x;x=0;if(H&1){q=p;s=7;break a}x=0;fb(257,a|0,b+8|0,d|0);H=x;x=0;if(H&1){H=Hc()|0;D=M;K2a(d);I=H;J=D;K=p;break a}else{K2a(d);break}}while(0);F=1;G=(A|0)==2?2:0}else{x=0;E=Ba(601,b|0)|0;D=x;x=0;if(D&1){q=p;s=7;break a}if(E){E=b+36|0;D=iDa(k[E>>2]|0,5224,4520,0)|0;if(!D){x=0;hb(49);x=0;q=p;s=7;break a}H=k[D+32>>2]|0;if(!H){x=0;L=Ba(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;D=x;x=0;if(D&1){q=p;s=7;break a}else N=L}else N=H;if((N|0)>2){H=iDa(k[E>>2]|0,5224,4520,0)|0;if(!H){x=0;hb(49);x=0;q=p;s=7;break a}E=iDa(k[H+36>>2]|0,5224,5312,0)|0;if(!E){x=0;hb(49);x=0;q=p;s=7;break a}d:do switch(A|0){case 0:{F=1;G=2;break b;break}case 1:{H=E+72|0;if(i[H>>0]|0){O=H;break d}x=0;fb(140,f|0,241119,88);L=x;x=0;if(L&1){q=p;s=7;break a}x=0;fb(257,a|0,b+8|0,f|0);L=x;x=0;if(L&1){L=Hc()|0;D=M;K2a(f);I=L;J=D;K=p;break a}else{K2a(f);O=H;break d}break}default:O=E+72|0}while(0);if(!(i[O>>0]|0)){F=1;G=2;break}F=1;G=(A|0)==2?2:0;break}}e:do if(i[b+58>>0]|0){switch(A|0){case 0:case 2:{P=2;break e;break}default:{}}x=0;fb(140,g|0,241208,67);E=x;x=0;if(E&1){q=p;s=7;break a}x=0;fb(257,a|0,b+8|0,g|0);E=x;x=0;if(E&1){E=Hc()|0;H=M;K2a(g);I=E;J=H;K=p;break a}else{K2a(g);P=2;break}}else{if(A){P=(A|0)==2?2:0;break}x=0;H=Ba(601,b|0)|0;E=x;x=0;if(E&1){q=p;s=7;break a}P=H?2:0}while(0);F=(i[b+56>>0]|0)==0;G=P}while(0);x=0;nb(k[(k[B>>2]|0)+104>>2]|0,h|0,B|0,G|0,F|0);C=x;x=0;if(C&1){q=p;s=7;break}C=k[h>>2]|0;H=h+4|0;E=k[H>>2]|0;k[h>>2]=0;k[H>>2]=0;if(!z?(j0a(y),D=k[H>>2]|0,(D|0)!=0):0){j0a(D);Q=C;R=E}else{Q=C;R=E}}else s=62;do if((s|0)==62)if(A){x=0;fb(140,j|0,241276,61);E=x;x=0;if(E&1){q=p;s=7;break a}x=0;fb(257,a|0,b+8|0,j|0);E=x;x=0;if(E&1){E=Hc()|0;C=M;K2a(j);I=E;J=C;K=p;break a}else{K2a(j);Q=o;R=p;break}}else{Q=o;R=p}while(0);if(!Q){x=0;fb(140,l|0,241338,18);p=x;x=0;if(!(p&1)){x=0;fb(257,a|0,b+8|0,l|0);p=x;x=0;if(p&1){p=Hc()|0;o=M;K2a(l);I=p;J=o;K=R;break}else{K2a(l);t=R;u=0;s=78;break}}else{q=R;s=7}}else{t=R;u=Q;s=78}}else{q=0;s=7}}while(0);if((s|0)==78){x=0;Q=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){q=t;s=7}else{b=t;R=(t|0)==0;if(!R)h0a(b);k[Q+4>>2]=u;u=Q+8|0;Q=k[u>>2]|0;k[u>>2]=t;if(Q)j0a(Q);if(R){r=c;return}j0a(b);r=c;return}}if((s|0)==7){s=Hc()|0;I=s;J=M;K=q}if(!K){v=I;w=J;Sc(v|0)}j0a(K);v=I;w=J;Sc(v|0)}function lZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;d=r;r=r+48|0;e=d+24|0;f=d+8|0;g=d;h=KBa(68)|0;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=31248;j=h+12|0;x=0;xa(731,j|0,3);l=x;x=0;if(l&1){l=Hc()|0;c0a(h);OBa(h);Sc(l|0)}l=j;k[e>>2]=31456;m=b;n=k[m+4>>2]|0;o=e+4|0;k[o>>2]=k[m>>2];k[o+4>>2]=n;k[e+12>>2]=k[b+8>>2];n=k[b+12>>2]|0;k[e+16>>2]=n;b=(n|0)==0;if(!b)h0a(n);x=0;o=Ta(566,j|0,e|0)|0;j=x;x=0;do if(!(j&1)?(k[f>>2]=21048,m=f+4|0,x=0,xa(604,m|0,c|0),p=x,x=0,!(p&1)):0){x=0;Ta(564,o|0,f|0)|0;p=x;x=0;if(p&1){p=Hc()|0;q=M;k[f>>2]=21048;K2a(m);s=q;t=p;break}k[f>>2]=21048;K2a(m);k[e>>2]=31456;if(!b)j0a(n);i[a+17>>0]=1;m=k[a+4>>2]|0;k[g>>2]=l;p=g+4|0;k[p>>2]=h;h0a(h);q=m+4|0;u=k[q>>2]|0;if(u>>>0<(k[m+8>>2]|0)>>>0){k[u>>2]=l;k[u+4>>2]=h;k[g>>2]=0;k[p>>2]=0;k[q>>2]=u+8;j0a(h);r=d;return}x=0;xa(732,m|0,g|0);m=x;x=0;if(m&1){m=Hc()|0;u=M;q=k[p>>2]|0;if(!q){v=u;w=m;j0a(h);Sc(w|0)}j0a(q);v=u;w=m;j0a(h);Sc(w|0)}else{m=k[p>>2]|0;if(!m){j0a(h);r=d;return}j0a(m);j0a(h);r=d;return}}else y=16;while(0);if((y|0)==16){y=Hc()|0;s=M;t=y}k[e>>2]=31456;if(b){v=s;w=t;j0a(h);Sc(w|0)}j0a(n);v=s;w=t;j0a(h);Sc(w|0)}function mZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;d=r;r=r+48|0;e=d+24|0;f=d+8|0;g=d;h=KBa(68)|0;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=31248;j=h+12|0;x=0;xa(731,j|0,0);l=x;x=0;if(l&1){l=Hc()|0;c0a(h);OBa(h);Sc(l|0)}l=j;k[e>>2]=31456;m=b;n=k[m+4>>2]|0;o=e+4|0;k[o>>2]=k[m>>2];k[o+4>>2]=n;k[e+12>>2]=k[b+8>>2];n=k[b+12>>2]|0;k[e+16>>2]=n;b=(n|0)==0;if(!b)h0a(n);x=0;o=Ta(566,j|0,e|0)|0;j=x;x=0;do if(!(j&1)?(k[f>>2]=21048,m=f+4|0,x=0,xa(604,m|0,c|0),p=x,x=0,!(p&1)):0){x=0;Ta(564,o|0,f|0)|0;p=x;x=0;if(p&1){p=Hc()|0;q=M;k[f>>2]=21048;K2a(m);s=q;t=p;break}k[f>>2]=21048;K2a(m);k[e>>2]=31456;if(!b)j0a(n);i[a+17>>0]=1;m=k[a+4>>2]|0;k[g>>2]=l;p=g+4|0;k[p>>2]=h;h0a(h);q=m+4|0;u=k[q>>2]|0;if(u>>>0<(k[m+8>>2]|0)>>>0){k[u>>2]=l;k[u+4>>2]=h;k[g>>2]=0;k[p>>2]=0;k[q>>2]=u+8;j0a(h);r=d;return}x=0;xa(732,m|0,g|0);m=x;x=0;if(m&1){m=Hc()|0;u=M;q=k[p>>2]|0;if(!q){v=u;w=m;j0a(h);Sc(w|0)}j0a(q);v=u;w=m;j0a(h);Sc(w|0)}else{m=k[p>>2]|0;if(!m){j0a(h);r=d;return}j0a(m);j0a(h);r=d;return}}else y=16;while(0);if((y|0)==16){y=Hc()|0;s=M;t=y}k[e>>2]=31456;if(b){v=s;w=t;j0a(h);Sc(w|0)}j0a(n);v=s;w=t;j0a(h);Sc(w|0)}function nZ(){k[8306]=0;k[8307]=0;k[8308]=0;return}function oZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=KBa(104)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=31932;f=e+16|0;g=k[b>>2]|0;b=e+20|0;k[b>>2]=0;h=e+24|0;k[h>>2]=0;j=e+28|0;l=e+32|0;k[l>>2]=0;k[e+36>>2]=0;k[j>>2]=l;k[e+40>>2]=g;i[e+44>>0]=1;k[f>>2]=38152;k[e+48>>2]=0;x=0;fb(252,e+52|0,f|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;k[f>>2]=20456;xh(j,k[l>>2]|0);l=k[h>>2]|0;if(!l){c0a(e);OBa(e);Sc(c|0)}k0a(l);c0a(e);OBa(e);Sc(c|0)}else{i[e+60>>0]=0;c=e+64|0;l=d;d=c+40|0;do{k[c>>2]=k[l>>2];c=c+4|0;l=l+4|0}while((c|0)<(d|0));k[a>>2]=f;k[a+4>>2]=e;i0a(e);k[b>>2]=f;f=k[h>>2]|0;k[h>>2]=e;if(!f)return;k0a(f);return}}function pZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=KBa(104)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=31932;e=d+16|0;f=k[b>>2]|0;b=d+20|0;k[b>>2]=0;g=d+24|0;k[g>>2]=0;h=d+28|0;j=d+32|0;k[j>>2]=0;k[d+36>>2]=0;k[h>>2]=j;k[d+40>>2]=f;i[d+44>>0]=1;k[e>>2]=38152;k[d+48>>2]=0;x=0;fb(252,d+52|0,e|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;k[e>>2]=20456;xh(h,k[j>>2]|0);j=k[g>>2]|0;if(!j){c0a(d);OBa(d);Sc(c|0)}k0a(j);c0a(d);OBa(d);Sc(c|0)}else{i[d+60>>0]=1;k[d+64>>2]=0;k[d+96>>2]=1;k[a>>2]=e;k[a+4>>2]=d;i0a(d);k[b>>2]=e;e=k[g>>2]|0;k[g>>2]=d;if(!e)return;k0a(e);return}}function qZ(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function rZ(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function sZ(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function tZ(a,b){a=a|0;b=b|0;return (i[a+16>>0]|0)!=0|0}function uZ(a){a=a|0;OBa(a);return}function vZ(a){a=a|0;var b=0,c=0,d=0;b=KBa(12)|0;k[b>>2]=33188;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function wZ(a,b){a=a|0;b=b|0;var c=0,d=0;k[b>>2]=33188;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return}function xZ(a){a=a|0;return}function yZ(a){a=a|0;OBa(a);return}function zZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+16|0;c=d+12|0;e=d;k$(e,k[(k[a+4>>2]|0)+8>>2]|0,b+16|0,1);f=e+4|0;g=k[e>>2]|0;a:do if(((k[f>>2]|0)-g|0)==4){h=k[g>>2]|0;i=k[a+8>>2]|0;x=0;j=Ba(k[(k[i>>2]|0)+16>>2]|0,i|0)|0;i=x;x=0;do if(!(i&1)){l=j+20|0;m=b;n=j+24|0;o=k[n>>2]|0;do if(o){p=o;while(1){q=k[p+16>>2]|0;if(q>>>0>b>>>0){s=k[p>>2]|0;if(!s){t=p;u=p;v=7;break}else w=s}else{if(q>>>0>=b>>>0){y=p;v=13;break}q=p+4|0;s=k[q>>2]|0;if(!s){z=q;A=p;v=11;break}else w=s}p=w}if((v|0)==7){k[c>>2]=u;B=t;C=u;v=14;break}else if((v|0)==11){k[c>>2]=A;B=z;C=A;v=14;break}else if((v|0)==13){k[c>>2]=y;if(!y){B=c;C=y;v=14;break}else{D=y;break}}}else{k[c>>2]=n;B=n;C=n;v=14}while(0);if((v|0)==14){x=0;n=Ba(563,24)|0;o=x;x=0;if(o&1)break;k[n+16>>2]=m;k[n+20>>2]=0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=C;k[B>>2]=n;o=k[k[l>>2]>>2]|0;if(!o)E=n;else{k[l>>2]=o;E=k[B>>2]|0}ui(k[j+24>>2]|0,E);o=j+28|0;k[o>>2]=(k[o>>2]|0)+1;D=n}k[D+20>>2]=h;F=1;G=k[e>>2]|0;break a}while(0);h=Hc()|0;j=k[e>>2]|0;if(!j)Sc(h|0);i=k[f>>2]|0;if((i|0)!=(j|0))k[f>>2]=i+(~((i+-4-j|0)>>>2)<<2);OBa(j);Sc(h|0)}else{F=0;G=g}while(0);if(!G){r=d;return F|0}g=k[f>>2]|0;if((g|0)!=(G|0))k[f>>2]=g+(~((g+-4-G|0)>>>2)<<2);OBa(G);r=d;return F|0}function AZ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==241379?a+4|0:0)|0}function BZ(a){a=a|0;return 4936}function CZ(a){a=a|0;var b=0,c=0;k[a>>2]=33160;b=a+12|0;k[b>>2]=38720;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function DZ(a){a=a|0;var b=0,c=0;k[a>>2]=33160;b=a+12|0;k[b>>2]=38720;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function EZ(a){a=a|0;var b=0,c=0;b=a+12|0;k[b>>2]=38720;c=k[a+48>>2]|0;if(c)j0a(c);c=k[a+40>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function FZ(a){a=a|0;OBa(a);return}function GZ(a){a=a|0;var b=0,c=0;k[a>>2]=33132;b=a+12|0;k[b>>2]=38268;c=k[a+48>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function HZ(a){a=a|0;var b=0,c=0;k[a>>2]=33132;b=a+12|0;k[b>>2]=38268;c=k[a+48>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function IZ(a){a=a|0;var b=0,c=0;b=a+12|0;k[b>>2]=38268;c=k[a+48>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function JZ(a){a=a|0;OBa(a);return}function KZ(a){a=a|0;var b=0;k[a>>2]=33104;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function LZ(a){a=a|0;var b=0;k[a>>2]=33104;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function MZ(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function NZ(a){a=a|0;OBa(a);return}function OZ(a){a=a|0;var b=0;k[a>>2]=33076;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function PZ(a){a=a|0;var b=0;k[a>>2]=33076;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function QZ(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function RZ(a){a=a|0;OBa(a);return}function SZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,_j=0,$j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0;b=r;r=r+1168|0;c=b+1032|0;d=b+1024|0;e=b+1016|0;f=b+1008|0;g=b+1e3|0;h=b+992|0;i=b+984|0;j=b+976|0;l=b+968|0;m=b+960|0;n=b+952|0;o=b+936|0;p=b+924|0;q=b+912|0;s=b+904|0;t=b+896|0;u=b+880|0;v=b+868|0;w=b+856|0;y=b+848|0;z=b+840|0;A=b+828|0;B=b+792|0;C=b+780|0;D=b+768|0;E=b+760|0;F=b+752|0;G=b+740|0;H=b+704|0;I=b+692|0;J=b+680|0;K=b+672|0;L=b+664|0;N=b+648|0;O=b+636|0;P=b+624|0;Q=b+616|0;R=b+608|0;S=b+592|0;T=b+580|0;U=b+568|0;V=b+560|0;W=b+552|0;X=b+536|0;Y=b+512|0;Z=b+496|0;_=b+488|0;$=b+480|0;aa=b+464|0;ba=b+428|0;ca=b+416|0;da=b+408|0;ea=b+400|0;fa=b+384|0;ga=b+336|0;ha=b+320|0;ia=b+312|0;ja=b+304|0;ka=b+288|0;la=b+228|0;ma=b+216|0;na=b+208|0;oa=b+200|0;pa=b+184|0;qa=b+172|0;ra=b+160|0;sa=b+152|0;ta=b+144|0;ua=b+128|0;va=b+80|0;wa=b+68|0;ya=b+56|0;za=b+48|0;Aa=b+40|0;Ca=b+24|0;Da=b+12|0;Ea=b;x=0;Fa=Ba(563,40)|0;Ga=x;x=0;if(!(Ga&1)){k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa>>2]=33244;Ga=Fa+16|0;k[Ga>>2]=0;Ha=Fa+20|0;k[Ha>>2]=0;Ia=Fa+12|0;Ja=Fa+28|0;k[Ja>>2]=0;k[Fa+32>>2]=0;k[Fa+24>>2]=Ja;k[Ia>>2]=39056;k[Fa+36>>2]=0;Ja=e+4|0;k[e>>2]=Ia;k[Ja>>2]=Fa;i0a(Fa);k[Ga>>2]=Ia;Ia=k[Ha>>2]|0;k[Ha>>2]=Fa;if(Ia)k0a(Ia);x=0;fb(259,d|0,254668,e|0);e=x;x=0;do if(!(e&1)){k[c>>2]=k[d>>2];Ia=d+4|0;k[c+4>>2]=k[Ia>>2];k[d>>2]=0;k[Ia>>2]=0;Ia=c+8|0;x=0;Fa=Ba(563,40)|0;Ha=x;x=0;if(Ha&1){Ha=Hc()|0;Ka=Ia;La=1;Ma=Ha;Na=M;break}k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa>>2]=33244;Ha=Fa+16|0;k[Ha>>2]=0;Ga=Fa+20|0;k[Ga>>2]=0;Oa=Fa+12|0;Qa=Fa+28|0;k[Qa>>2]=0;k[Fa+32>>2]=0;k[Fa+24>>2]=Qa;k[Oa>>2]=39056;k[Fa+36>>2]=1;Qa=g+4|0;k[g>>2]=Oa;k[Qa>>2]=Fa;i0a(Fa);k[Ha>>2]=Oa;Oa=k[Ga>>2]|0;k[Ga>>2]=Fa;if(Oa)k0a(Oa);x=0;fb(260,f|0,254674,g|0);Oa=x;x=0;do if(!(Oa&1)){k[Ia>>2]=k[f>>2];Fa=f+4|0;k[c+12>>2]=k[Fa>>2];k[f>>2]=0;k[Fa>>2]=0;Fa=c+16|0;x=0;Ga=Ba(563,40)|0;Ha=x;x=0;if(Ha&1){Ha=Hc()|0;Ra=Fa;Sa=1;Ta=Ha;Ua=M;break}k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga>>2]=33244;Ha=Ga+16|0;k[Ha>>2]=0;Va=Ga+20|0;k[Va>>2]=0;Wa=Ga+12|0;Xa=Ga+28|0;k[Xa>>2]=0;k[Ga+32>>2]=0;k[Ga+24>>2]=Xa;k[Wa>>2]=39056;k[Ga+36>>2]=2;Xa=i+4|0;k[i>>2]=Wa;k[Xa>>2]=Ga;i0a(Ga);k[Ha>>2]=Wa;Wa=k[Va>>2]|0;k[Va>>2]=Ga;if(Wa)k0a(Wa);x=0;fb(261,h|0,254678,i|0);Wa=x;x=0;a:do if(Wa&1){Ga=Hc()|0;Ya=Fa;Za=1;_a=Ga;$a=M}else{k[Fa>>2]=k[h>>2];Ga=h+4|0;k[c+20>>2]=k[Ga>>2];k[h>>2]=0;k[Ga>>2]=0;Ga=c+24|0;x=0;Va=Ba(563,44)|0;Ha=x;x=0;do if(Ha&1){ab=Hc()|0;bb=M;cb=ab}else{k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va>>2]=31848;ab=Va+12|0;x=0;fb(247,ab|0,256,0);db=x;x=0;if(db&1){db=Hc()|0;eb=M;c0a(Va);OBa(Va);bb=eb;cb=db;break}db=l+4|0;k[l>>2]=ab;k[db>>2]=Va;i0a(Va);k[Va+16>>2]=ab;ab=Va+20|0;eb=k[ab>>2]|0;k[ab>>2]=Va;if(eb)k0a(eb);x=0;fb(262,j|0,241974,l|0);eb=x;x=0;do if(eb&1){ab=Hc()|0;gb=Ga;hb=1;ib=ab;jb=M}else{k[Ga>>2]=k[j>>2];ab=j+4|0;k[c+28>>2]=k[ab>>2];k[j>>2]=0;k[ab>>2]=0;ab=c+32|0;x=0;fb(140,p|0,293736,7);kb=x;x=0;if(kb&1){kb=Hc()|0;gb=ab;hb=1;ib=kb;jb=M;break}k[o>>2]=0;kb=o+4|0;k[kb>>2]=0;k[o+8>>2]=0;x=0;lb=Ba(563,12)|0;mb=x;x=0;do if(mb&1){nb=Hc()|0;ob=nb;pb=M;qb=441}else{k[kb>>2]=lb;k[o>>2]=lb;k[o+8>>2]=lb+12;x=0;xa(604,lb|0,p|0);nb=x;x=0;if(nb&1){nb=Hc()|0;rb=M;sb=k[o>>2]|0;if(!sb){ob=nb;pb=rb;qb=441;break}tb=k[kb>>2]|0;if((tb|0)==(sb|0))ub=sb;else{vb=tb;do{tb=vb+-12|0;k[kb>>2]=tb;K2a(tb);vb=k[kb>>2]|0}while((vb|0)!=(sb|0));ub=k[o>>2]|0}OBa(ub);ob=nb;pb=rb;qb=441;break}k[kb>>2]=(k[kb>>2]|0)+12;k[q>>2]=0;sb=q+4|0;k[sb>>2]=0;k[q+8>>2]=0;x=0;vb=Ba(563,100)|0;tb=x;x=0;do if(tb&1){wb=Hc()|0;xb=M;yb=wb;qb=443}else{k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb>>2]=31496;wb=vb+12|0;x=0;Pa(44,wb|0,o|0,q|0,10,0,0,0);zb=x;x=0;if(zb&1){zb=Hc()|0;Ab=M;c0a(vb);OBa(vb);xb=Ab;yb=zb;qb=443;break}zb=n+4|0;k[n>>2]=wb;k[zb>>2]=vb;i0a(vb);k[vb+16>>2]=wb;wb=vb+20|0;Ab=k[wb>>2]|0;k[wb>>2]=vb;if(Ab)k0a(Ab);x=0;fb(263,m|0,241978,n|0);Ab=x;x=0;do if(Ab&1){wb=Hc()|0;Bb=ab;Cb=1;Db=wb;Eb=M}else{k[ab>>2]=k[m>>2];wb=m+4|0;k[c+36>>2]=k[wb>>2];k[m>>2]=0;k[wb>>2]=0;wb=c+40|0;x=0;fb(140,v|0,293736,7);Fb=x;x=0;if(Fb&1){Fb=Hc()|0;Bb=wb;Cb=1;Db=Fb;Eb=M;break}k[u>>2]=0;Fb=u+4|0;k[Fb>>2]=0;k[u+8>>2]=0;x=0;Gb=Ba(563,12)|0;Hb=x;x=0;do if(Hb&1){Ib=Hc()|0;Jb=Ib;Kb=M;qb=446}else{k[Fb>>2]=Gb;k[u>>2]=Gb;k[u+8>>2]=Gb+12;x=0;xa(604,Gb|0,v|0);Ib=x;x=0;if(Ib&1){Ib=Hc()|0;Lb=M;Mb=k[u>>2]|0;if(!Mb){Jb=Ib;Kb=Lb;qb=446;break}Nb=k[Fb>>2]|0;if((Nb|0)==(Mb|0))Ob=Mb;else{Pb=Nb;do{Nb=Pb+-12|0;k[Fb>>2]=Nb;K2a(Nb);Pb=k[Fb>>2]|0}while((Pb|0)!=(Mb|0));Ob=k[u>>2]|0}OBa(Ob);Jb=Ib;Kb=Lb;qb=446;break}k[Fb>>2]=(k[Fb>>2]|0)+12;k[w>>2]=0;Mb=w+4|0;k[Mb>>2]=0;k[w+8>>2]=0;x=0;Pb=Ba(563,100)|0;Nb=x;x=0;do if(Nb&1){Qb=Hc()|0;Rb=M;Sb=Qb;qb=448}else{k[Pb+4>>2]=0;k[Pb+8>>2]=0;k[Pb>>2]=31496;Qb=Pb+12|0;x=0;Pa(44,Qb|0,u|0,w|0,10,0,0,0);Tb=x;x=0;if(Tb&1){Tb=Hc()|0;Ub=M;c0a(Pb);OBa(Pb);Rb=Ub;Sb=Tb;qb=448;break}Tb=t+4|0;k[t>>2]=Qb;k[Tb>>2]=Pb;i0a(Pb);k[Pb+16>>2]=Qb;Qb=Pb+20|0;Ub=k[Qb>>2]|0;k[Qb>>2]=Pb;if(Ub)k0a(Ub);x=0;fb(264,s|0,296953,t|0);Ub=x;x=0;b:do if(Ub&1){Qb=Hc()|0;Vb=wb;Wb=1;Xb=Qb;Yb=M}else{k[wb>>2]=k[s>>2];Qb=s+4|0;k[c+44>>2]=k[Qb>>2];k[s>>2]=0;k[Qb>>2]=0;Qb=c+48|0;x=0;fb(140,B|0,276201,7);Zb=x;x=0;do if(Zb&1)_b=B;else{$b=B+12|0;x=0;fb(140,$b|0,276201,7);ac=x;x=0;if(ac&1){_b=$b;break}$b=B+24|0;x=0;fb(140,$b|0,276201,7);ac=x;x=0;if(ac&1){_b=$b;break}k[A>>2]=0;$b=A+4|0;k[$b>>2]=0;k[A+8>>2]=0;x=0;ac=Ba(563,36)|0;bc=x;x=0;c:do if(bc&1){cc=Hc()|0;dc=cc;ec=M;qb=452}else{k[$b>>2]=ac;k[A>>2]=ac;k[A+8>>2]=ac+36;x=0;xa(604,ac|0,B|0);cc=x;x=0;do if(!(cc&1)){fc=(k[$b>>2]|0)+12|0;k[$b>>2]=fc;x=0;xa(604,fc|0,B+12|0);fc=x;x=0;if(fc&1)break;fc=(k[$b>>2]|0)+12|0;k[$b>>2]=fc;x=0;xa(604,fc|0,B+24|0);fc=x;x=0;if(fc&1)break;k[$b>>2]=(k[$b>>2]|0)+12;x=0;fb(140,D|0,276201,7);fc=x;x=0;if(fc&1){fc=Hc()|0;gc=Qb;hc=1;ic=fc;jc=M}else{k[C>>2]=0;fc=C+4|0;k[fc>>2]=0;k[C+8>>2]=0;x=0;kc=Ba(563,12)|0;lc=x;x=0;do if(lc&1){mc=Hc()|0;nc=mc;oc=M;qb=454}else{k[fc>>2]=kc;k[C>>2]=kc;k[C+8>>2]=kc+12;x=0;xa(604,kc|0,D|0);mc=x;x=0;if(mc&1){mc=Hc()|0;pc=M;qc=k[C>>2]|0;if(!qc){nc=mc;oc=pc;qb=454;break}rc=k[fc>>2]|0;if((rc|0)==(qc|0))sc=qc;else{tc=rc;do{rc=tc+-12|0;k[fc>>2]=rc;K2a(rc);tc=k[fc>>2]|0}while((tc|0)!=(qc|0));sc=k[C>>2]|0}OBa(sc);nc=mc;oc=pc;qb=454;break}k[fc>>2]=(k[fc>>2]|0)+12;x=0;qc=Ba(563,100)|0;tc=x;x=0;do if(tc&1){rc=Hc()|0;uc=M;vc=rc;qb=456}else{k[qc+4>>2]=0;k[qc+8>>2]=0;k[qc>>2]=31496;rc=qc+12|0;x=0;Pa(44,rc|0,A|0,C|0,23,0,0,0);wc=x;x=0;if(wc&1){wc=Hc()|0;xc=M;c0a(qc);OBa(qc);uc=xc;vc=wc;qb=456;break}wc=z+4|0;k[z>>2]=rc;k[wc>>2]=qc;i0a(qc);k[qc+16>>2]=rc;rc=qc+20|0;xc=k[rc>>2]|0;k[rc>>2]=qc;if(xc)k0a(xc);x=0;fb(265,y|0,241986,z|0);xc=x;x=0;d:do if(xc&1){rc=Hc()|0;yc=Qb;zc=1;Ac=rc;Bc=M}else{k[Qb>>2]=k[y>>2];rc=y+4|0;k[c+52>>2]=k[rc>>2];k[y>>2]=0;k[rc>>2]=0;rc=c+56|0;x=0;fb(140,H|0,276201,7);Cc=x;x=0;do if(Cc&1)Dc=H;else{Ec=H+12|0;x=0;fb(140,Ec|0,276201,7);Fc=x;x=0;if(Fc&1){Dc=Ec;break}Ec=H+24|0;x=0;fb(140,Ec|0,276201,7);Fc=x;x=0;if(Fc&1){Dc=Ec;break}k[G>>2]=0;Ec=G+4|0;k[Ec>>2]=0;k[G+8>>2]=0;x=0;Fc=Ba(563,36)|0;Gc=x;x=0;e:do if(Gc&1){Ic=Hc()|0;Jc=Ic;Kc=M;qb=460}else{k[Ec>>2]=Fc;k[G>>2]=Fc;k[G+8>>2]=Fc+36;x=0;xa(604,Fc|0,H|0);Ic=x;x=0;do if(!(Ic&1)){Lc=(k[Ec>>2]|0)+12|0;k[Ec>>2]=Lc;x=0;xa(604,Lc|0,H+12|0);Lc=x;x=0;if(Lc&1)break;Lc=(k[Ec>>2]|0)+12|0;k[Ec>>2]=Lc;x=0;xa(604,Lc|0,H+24|0);Lc=x;x=0;if(Lc&1)break;k[Ec>>2]=(k[Ec>>2]|0)+12;x=0;fb(140,J|0,276201,7);Lc=x;x=0;if(Lc&1){Lc=Hc()|0;Mc=rc;Nc=1;Oc=Lc;Pc=M}else{k[I>>2]=0;Lc=I+4|0;k[Lc>>2]=0;k[I+8>>2]=0;x=0;Qc=Ba(563,12)|0;Rc=x;x=0;do if(Rc&1){Tc=Hc()|0;Uc=Tc;Vc=M;qb=462}else{k[Lc>>2]=Qc;k[I>>2]=Qc;k[I+8>>2]=Qc+12;x=0;xa(604,Qc|0,J|0);Tc=x;x=0;if(Tc&1){Tc=Hc()|0;Wc=M;Xc=k[I>>2]|0;if(!Xc){Uc=Tc;Vc=Wc;qb=462;break}Yc=k[Lc>>2]|0;if((Yc|0)==(Xc|0))Zc=Xc;else{_c=Yc;do{Yc=_c+-12|0;k[Lc>>2]=Yc;K2a(Yc);_c=k[Lc>>2]|0}while((_c|0)!=(Xc|0));Zc=k[I>>2]|0}OBa(Zc);Uc=Tc;Vc=Wc;qb=462;break}k[Lc>>2]=(k[Lc>>2]|0)+12;x=0;Xc=Ba(563,100)|0;_c=x;x=0;do if(_c&1){Yc=Hc()|0;$c=M;ad=Yc;qb=464}else{k[Xc+4>>2]=0;k[Xc+8>>2]=0;k[Xc>>2]=31496;Yc=Xc+12|0;x=0;Pa(44,Yc|0,G|0,I|0,24,0,0,0);bd=x;x=0;if(bd&1){bd=Hc()|0;cd=M;c0a(Xc);OBa(Xc);$c=cd;ad=bd;qb=464;break}bd=F+4|0;k[F>>2]=Yc;k[bd>>2]=Xc;i0a(Xc);k[Xc+16>>2]=Yc;Yc=Xc+20|0;cd=k[Yc>>2]|0;k[Yc>>2]=Xc;if(cd)k0a(cd);x=0;fb(265,E|0,241993,F|0);cd=x;x=0;do if(cd&1){Yc=Hc()|0;dd=rc;ed=1;fd=Yc;gd=M}else{k[rc>>2]=k[E>>2];Yc=E+4|0;k[c+60>>2]=k[Yc>>2];k[E>>2]=0;k[Yc>>2]=0;Yc=c+64|0;k[N>>2]=0;hd=N+4|0;k[hd>>2]=0;k[N+8>>2]=0;x=0;fb(140,P|0,254518,7);id=x;x=0;if(id&1){id=Hc()|0;jd=Yc;kd=1;ld=id;md=M}else{k[O>>2]=0;id=O+4|0;k[id>>2]=0;k[O+8>>2]=0;x=0;nd=Ba(563,12)|0;od=x;x=0;do if(od&1){pd=Hc()|0;qd=pd;rd=M;qb=467}else{k[id>>2]=nd;k[O>>2]=nd;k[O+8>>2]=nd+12;x=0;xa(604,nd|0,P|0);pd=x;x=0;if(pd&1){pd=Hc()|0;sd=M;td=k[O>>2]|0;if(!td){qd=pd;rd=sd;qb=467;break}ud=k[id>>2]|0;if((ud|0)==(td|0))vd=td;else{wd=ud;do{ud=wd+-12|0;k[id>>2]=ud;K2a(ud);wd=k[id>>2]|0}while((wd|0)!=(td|0));vd=k[O>>2]|0}OBa(vd);qd=pd;rd=sd;qb=467;break}k[id>>2]=(k[id>>2]|0)+12;x=0;td=Ba(563,100)|0;wd=x;x=0;do if(wd&1){ud=Hc()|0;xd=M;yd=ud;qb=469}else{k[td+4>>2]=0;k[td+8>>2]=0;k[td>>2]=31496;ud=td+12|0;x=0;Pa(44,ud|0,N|0,O|0,9,1,0,0);zd=x;x=0;if(zd&1){zd=Hc()|0;Ad=M;c0a(td);OBa(td);xd=Ad;yd=zd;qb=469;break}zd=L+4|0;k[L>>2]=ud;k[zd>>2]=td;i0a(td);k[td+16>>2]=ud;ud=td+20|0;Ad=k[ud>>2]|0;k[ud>>2]=td;if(Ad)k0a(Ad);x=0;fb(266,K|0,242e3,L|0);Ad=x;x=0;do if(Ad&1){ud=Hc()|0;Bd=Yc;Cd=1;Dd=ud;Ed=M}else{k[Yc>>2]=k[K>>2];ud=K+4|0;k[c+68>>2]=k[ud>>2];k[K>>2]=0;k[ud>>2]=0;ud=c+72|0;x=0;fb(140,T|0,254518,7);Fd=x;x=0;if(Fd&1){Fd=Hc()|0;Bd=ud;Cd=1;Dd=Fd;Ed=M;break}k[S>>2]=0;Fd=S+4|0;k[Fd>>2]=0;k[S+8>>2]=0;x=0;Gd=Ba(563,12)|0;Hd=x;x=0;do if(Hd&1){Id=Hc()|0;Jd=Id;Kd=M;qb=472}else{k[Fd>>2]=Gd;k[S>>2]=Gd;k[S+8>>2]=Gd+12;x=0;xa(604,Gd|0,T|0);Id=x;x=0;if(Id&1){Id=Hc()|0;Ld=M;Md=k[S>>2]|0;if(!Md){Jd=Id;Kd=Ld;qb=472;break}Nd=k[Fd>>2]|0;if((Nd|0)==(Md|0))Od=Md;else{Pd=Nd;do{Nd=Pd+-12|0;k[Fd>>2]=Nd;K2a(Nd);Pd=k[Fd>>2]|0}while((Pd|0)!=(Md|0));Od=k[S>>2]|0}OBa(Od);Jd=Id;Kd=Ld;qb=472;break}k[Fd>>2]=(k[Fd>>2]|0)+12;k[U>>2]=0;Md=U+4|0;k[Md>>2]=0;k[U+8>>2]=0;x=0;Pd=Ba(563,100)|0;Nd=x;x=0;do if(Nd&1){Qd=Hc()|0;Rd=M;Sd=Qd;qb=474}else{k[Pd+4>>2]=0;k[Pd+8>>2]=0;k[Pd>>2]=31496;Qd=Pd+12|0;x=0;Pa(44,Qd|0,S|0,U|0,14,0,0,0);Td=x;x=0;if(Td&1){Td=Hc()|0;Ud=M;c0a(Pd);OBa(Pd);Rd=Ud;Sd=Td;qb=474;break}Td=R+4|0;k[R>>2]=Qd;k[Td>>2]=Pd;i0a(Pd);k[Pd+16>>2]=Qd;Qd=Pd+20|0;Ud=k[Qd>>2]|0;k[Qd>>2]=Pd;if(Ud)k0a(Ud);x=0;fb(266,Q|0,242005,R|0);Ud=x;x=0;f:do if(Ud&1){Qd=Hc()|0;Vd=ud;Wd=1;Xd=Qd;Yd=M}else{k[ud>>2]=k[Q>>2];Qd=Q+4|0;k[c+76>>2]=k[Qd>>2];k[Q>>2]=0;k[Qd>>2]=0;Qd=c+80|0;x=0;fb(140,Y|0,254518,7);Zd=x;x=0;do if(Zd&1)_d=Y;else{$d=Y+12|0;x=0;fb(140,$d|0,254518,7);ae=x;x=0;if(ae&1){_d=$d;break}k[X>>2]=0;$d=X+4|0;k[$d>>2]=0;k[X+8>>2]=0;x=0;ae=Ba(563,24)|0;be=x;x=0;g:do if(be&1){ce=Hc()|0;de=ce;ee=M;qb=478}else{k[$d>>2]=ae;k[X>>2]=ae;k[X+8>>2]=ae+24;x=0;xa(604,ae|0,Y|0);ce=x;x=0;do if(!(ce&1)){fe=(k[$d>>2]|0)+12|0;k[$d>>2]=fe;x=0;xa(604,fe|0,Y+12|0);fe=x;x=0;if(fe&1)break;k[$d>>2]=(k[$d>>2]|0)+12;k[Z>>2]=0;fe=Z+4|0;k[fe>>2]=0;k[Z+8>>2]=0;x=0;ge=Ba(563,100)|0;he=x;x=0;do if(he&1){ie=Hc()|0;je=M;ke=ie;qb=480}else{k[ge+4>>2]=0;k[ge+8>>2]=0;k[ge>>2]=31496;ie=ge+12|0;x=0;Pa(44,ie|0,X|0,Z|0,15,0,0,0);le=x;x=0;if(le&1){le=Hc()|0;me=M;c0a(ge);OBa(ge);je=me;ke=le;qb=480;break}le=W+4|0;k[W>>2]=ie;k[le>>2]=ge;i0a(ge);k[ge+16>>2]=ie;ie=ge+20|0;me=k[ie>>2]|0;k[ie>>2]=ge;if(me)k0a(me);x=0;fb(266,V|0,242010,W|0);me=x;x=0;h:do if(me&1){ie=Hc()|0;ne=Qd;oe=1;pe=M;qe=ie}else{k[Qd>>2]=k[V>>2];ie=V+4|0;k[c+84>>2]=k[ie>>2];k[V>>2]=0;k[ie>>2]=0;ie=c+88|0;x=0;fb(140,ba|0,254518,7);re=x;x=0;do if(re&1)se=ba;else{te=ba+12|0;x=0;fb(140,te|0,254518,7);ue=x;x=0;if(ue&1){se=te;break}te=ba+24|0;x=0;fb(140,te|0,254518,7);ue=x;x=0;if(ue&1){se=te;break}k[aa>>2]=0;te=aa+4|0;k[te>>2]=0;k[aa+8>>2]=0;x=0;ue=Ba(563,36)|0;ve=x;x=0;i:do if(ve&1){we=Hc()|0;xe=we;ye=M;qb=484}else{k[te>>2]=ue;k[aa>>2]=ue;k[aa+8>>2]=ue+36;x=0;xa(604,ue|0,ba|0);we=x;x=0;do if(!(we&1)){ze=(k[te>>2]|0)+12|0;k[te>>2]=ze;x=0;xa(604,ze|0,ba+12|0);ze=x;x=0;if(ze&1)break;ze=(k[te>>2]|0)+12|0;k[te>>2]=ze;x=0;xa(604,ze|0,ba+24|0);ze=x;x=0;if(ze&1)break;k[te>>2]=(k[te>>2]|0)+12;k[ca>>2]=0;ze=ca+4|0;k[ze>>2]=0;k[ca+8>>2]=0;x=0;Ae=Ba(563,100)|0;Be=x;x=0;do if(Be&1){Ce=Hc()|0;De=M;Ee=Ce;qb=486}else{k[Ae+4>>2]=0;k[Ae+8>>2]=0;k[Ae>>2]=31496;Ce=Ae+12|0;x=0;Pa(44,Ce|0,aa|0,ca|0,16,0,0,0);Fe=x;x=0;if(Fe&1){Fe=Hc()|0;Ge=M;c0a(Ae);OBa(Ae);De=Ge;Ee=Fe;qb=486;break}Fe=$+4|0;k[$>>2]=Ce;k[Fe>>2]=Ae;i0a(Ae);k[Ae+16>>2]=Ce;Ce=Ae+20|0;Ge=k[Ce>>2]|0;k[Ce>>2]=Ae;if(Ge)k0a(Ge);x=0;fb(266,_|0,242015,$|0);Ge=x;x=0;j:do if(Ge&1){Ce=Hc()|0;He=ie;Ie=1;Je=M;Ke=Ce}else{k[ie>>2]=k[_>>2];Ce=_+4|0;k[c+92>>2]=k[Ce>>2];k[_>>2]=0;k[Ce>>2]=0;Ce=c+96|0;x=0;fb(140,ga|0,254518,7);Le=x;x=0;do if(Le&1)Me=ga;else{Ne=ga+12|0;x=0;fb(140,Ne|0,254518,7);Oe=x;x=0;if(Oe&1){Me=Ne;break}Ne=ga+24|0;x=0;fb(140,Ne|0,254518,7);Oe=x;x=0;if(Oe&1){Me=Ne;break}Ne=ga+36|0;x=0;fb(140,Ne|0,254518,7);Oe=x;x=0;if(Oe&1){Me=Ne;break}k[fa>>2]=0;Ne=fa+4|0;k[Ne>>2]=0;k[fa+8>>2]=0;x=0;Oe=Ba(563,48)|0;Pe=x;x=0;k:do if(Pe&1){Qe=Hc()|0;Re=Qe;Se=M;qb=490}else{k[Ne>>2]=Oe;k[fa>>2]=Oe;k[fa+8>>2]=Oe+48;x=0;xa(604,Oe|0,ga|0);Qe=x;x=0;do if(!(Qe&1)){Te=(k[Ne>>2]|0)+12|0;k[Ne>>2]=Te;x=0;xa(604,Te|0,ga+12|0);Te=x;x=0;if(Te&1)break;Te=(k[Ne>>2]|0)+12|0;k[Ne>>2]=Te;x=0;xa(604,Te|0,ga+24|0);Te=x;x=0;if(Te&1)break;Te=(k[Ne>>2]|0)+12|0;k[Ne>>2]=Te;x=0;xa(604,Te|0,ga+36|0);Te=x;x=0;if(Te&1)break;k[Ne>>2]=(k[Ne>>2]|0)+12;k[ha>>2]=0;Te=ha+4|0;k[Te>>2]=0;k[ha+8>>2]=0;x=0;Ue=Ba(563,100)|0;Ve=x;x=0;do if(Ve&1){We=Hc()|0;Xe=M;Ye=We;qb=492}else{k[Ue+4>>2]=0;k[Ue+8>>2]=0;k[Ue>>2]=31496;We=Ue+12|0;x=0;Pa(44,We|0,fa|0,ha|0,17,0,0,0);Ze=x;x=0;if(Ze&1){Ze=Hc()|0;_e=M;c0a(Ue);OBa(Ue);Xe=_e;Ye=Ze;qb=492;break}Ze=ea+4|0;k[ea>>2]=We;k[Ze>>2]=Ue;i0a(Ue);k[Ue+16>>2]=We;We=Ue+20|0;_e=k[We>>2]|0;k[We>>2]=Ue;if(_e)k0a(_e);x=0;fb(266,da|0,242020,ea|0);_e=x;x=0;l:do if(_e&1){We=Hc()|0;$e=Ce;af=1;bf=M;cf=We}else{k[Ce>>2]=k[da>>2];We=da+4|0;k[c+100>>2]=k[We>>2];k[da>>2]=0;k[We>>2]=0;We=c+104|0;x=0;fb(140,la|0,254518,7);df=x;x=0;do if(df&1)ef=la;else{ff=la+12|0;x=0;fb(140,ff|0,254518,7);gf=x;x=0;if(gf&1){ef=ff;break}ff=la+24|0;x=0;fb(140,ff|0,254518,7);gf=x;x=0;if(gf&1){ef=ff;break}ff=la+36|0;x=0;fb(140,ff|0,254518,7);gf=x;x=0;if(gf&1){ef=ff;break}ff=la+48|0;x=0;fb(140,ff|0,254518,7);gf=x;x=0;if(gf&1){ef=ff;break}k[ka>>2]=0;ff=ka+4|0;k[ff>>2]=0;k[ka+8>>2]=0;x=0;gf=Ba(563,60)|0;hf=x;x=0;m:do if(hf&1){jf=Hc()|0;kf=jf;lf=M;qb=496}else{k[ff>>2]=gf;k[ka>>2]=gf;k[ka+8>>2]=gf+60;x=0;xa(604,gf|0,la|0);jf=x;x=0;do if(!(jf&1)){mf=(k[ff>>2]|0)+12|0;k[ff>>2]=mf;x=0;xa(604,mf|0,la+12|0);mf=x;x=0;if(mf&1)break;mf=(k[ff>>2]|0)+12|0;k[ff>>2]=mf;x=0;xa(604,mf|0,la+24|0);mf=x;x=0;if(mf&1)break;mf=(k[ff>>2]|0)+12|0;k[ff>>2]=mf;x=0;xa(604,mf|0,la+36|0);mf=x;x=0;if(mf&1)break;mf=(k[ff>>2]|0)+12|0;k[ff>>2]=mf;x=0;xa(604,mf|0,la+48|0);mf=x;x=0;if(mf&1)break;k[ff>>2]=(k[ff>>2]|0)+12;k[ma>>2]=0;mf=ma+4|0;k[mf>>2]=0;k[ma+8>>2]=0;x=0;nf=Ba(563,100)|0;of=x;x=0;do if(of&1){pf=Hc()|0;qf=M;rf=pf;qb=498}else{k[nf+4>>2]=0;k[nf+8>>2]=0;k[nf>>2]=31496;pf=nf+12|0;x=0;Pa(44,pf|0,ka|0,ma|0,18,0,0,0);sf=x;x=0;if(sf&1){sf=Hc()|0;tf=M;c0a(nf);OBa(nf);qf=tf;rf=sf;qb=498;break}sf=ja+4|0;k[ja>>2]=pf;k[sf>>2]=nf;i0a(nf);k[nf+16>>2]=pf;pf=nf+20|0;tf=k[pf>>2]|0;k[pf>>2]=nf;if(tf)k0a(tf);x=0;fb(266,ia|0,242025,ja|0);tf=x;x=0;do if(tf&1){pf=Hc()|0;uf=We;vf=1;wf=M;xf=pf}else{k[We>>2]=k[ia>>2];pf=ia+4|0;k[c+108>>2]=k[pf>>2];k[ia>>2]=0;k[pf>>2]=0;pf=c+112|0;k[pa>>2]=0;yf=pa+4|0;k[yf>>2]=0;k[pa+8>>2]=0;x=0;fb(140,ra|0,254518,7);zf=x;x=0;if(zf&1){zf=Hc()|0;Af=1;Bf=M;Cf=zf;Df=pf}else{k[qa>>2]=0;zf=qa+4|0;k[zf>>2]=0;k[qa+8>>2]=0;x=0;Ef=Ba(563,12)|0;Ff=x;x=0;do if(Ff&1){Gf=Hc()|0;Hf=Gf;If=M;qb=501}else{k[zf>>2]=Ef;k[qa>>2]=Ef;k[qa+8>>2]=Ef+12;x=0;xa(604,Ef|0,ra|0);Gf=x;x=0;if(Gf&1){Gf=Hc()|0;Jf=M;Kf=k[qa>>2]|0;if(!Kf){Hf=Gf;If=Jf;qb=501;break}Lf=k[zf>>2]|0;if((Lf|0)==(Kf|0))Mf=Kf;else{Nf=Lf;do{Lf=Nf+-12|0;k[zf>>2]=Lf;K2a(Lf);Nf=k[zf>>2]|0}while((Nf|0)!=(Kf|0));Mf=k[qa>>2]|0}OBa(Mf);Hf=Gf;If=Jf;qb=501;break}k[zf>>2]=(k[zf>>2]|0)+12;x=0;Kf=Ba(563,100)|0;Nf=x;x=0;do if(Nf&1){Lf=Hc()|0;Of=M;Pf=Lf;qb=503}else{k[Kf+4>>2]=0;k[Kf+8>>2]=0;k[Kf>>2]=31496;Lf=Kf+12|0;x=0;Pa(44,Lf|0,pa|0,qa|0,12,1,0,0);Qf=x;x=0;if(Qf&1){Qf=Hc()|0;Rf=M;c0a(Kf);OBa(Kf);Of=Rf;Pf=Qf;qb=503;break}Qf=oa+4|0;k[oa>>2]=Lf;k[Qf>>2]=Kf;i0a(Kf);k[Kf+16>>2]=Lf;Lf=Kf+20|0;Rf=k[Lf>>2]|0;k[Lf>>2]=Kf;if(Rf)k0a(Rf);x=0;fb(265,na|0,242030,oa|0);Rf=x;x=0;n:do if(Rf&1){Lf=Hc()|0;Sf=1;Tf=M;Uf=Lf;Vf=pf}else{k[pf>>2]=k[na>>2];Lf=na+4|0;k[c+116>>2]=k[Lf>>2];k[na>>2]=0;k[Lf>>2]=0;Lf=c+120|0;x=0;fb(140,va|0,254518,7);Wf=x;x=0;do if(Wf&1)Xf=va;else{Yf=va+12|0;x=0;fb(140,Yf|0,242037,5);Zf=x;x=0;if(Zf&1){Xf=Yf;break}Yf=va+24|0;x=0;fb(140,Yf|0,254518,7);Zf=x;x=0;if(Zf&1){Xf=Yf;break}Yf=va+36|0;x=0;fb(140,Yf|0,254518,7);Zf=x;x=0;if(Zf&1){Xf=Yf;break}k[ua>>2]=0;Yf=ua+4|0;k[Yf>>2]=0;k[ua+8>>2]=0;x=0;Zf=Ba(563,48)|0;_f=x;x=0;o:do if(_f&1){$f=Hc()|0;ag=$f;bg=M;qb=507}else{k[Yf>>2]=Zf;k[ua>>2]=Zf;k[ua+8>>2]=Zf+48;x=0;xa(604,Zf|0,va|0);$f=x;x=0;do if(!($f&1)){cg=(k[Yf>>2]|0)+12|0;k[Yf>>2]=cg;x=0;xa(604,cg|0,va+12|0);cg=x;x=0;if(cg&1)break;cg=(k[Yf>>2]|0)+12|0;k[Yf>>2]=cg;x=0;xa(604,cg|0,va+24|0);cg=x;x=0;if(cg&1)break;cg=(k[Yf>>2]|0)+12|0;k[Yf>>2]=cg;x=0;xa(604,cg|0,va+36|0);cg=x;x=0;if(cg&1)break;k[Yf>>2]=(k[Yf>>2]|0)+12;x=0;fb(140,ya|0,293736,7);cg=x;x=0;if(cg&1){cg=Hc()|0;dg=Lf;eg=1;fg=M;gg=cg}else{k[wa>>2]=0;cg=wa+4|0;k[cg>>2]=0;k[wa+8>>2]=0;x=0;hg=Ba(563,12)|0;ig=x;x=0;do if(ig&1){jg=Hc()|0;kg=jg;lg=M;qb=509}else{k[cg>>2]=hg;k[wa>>2]=hg;k[wa+8>>2]=hg+12;x=0;xa(604,hg|0,ya|0);jg=x;x=0;if(jg&1){jg=Hc()|0;mg=M;ng=k[wa>>2]|0;if(!ng){kg=jg;lg=mg;qb=509;break}og=k[cg>>2]|0;if((og|0)==(ng|0))pg=ng;else{qg=og;do{og=qg+-12|0;k[cg>>2]=og;K2a(og);qg=k[cg>>2]|0}while((qg|0)!=(ng|0));pg=k[wa>>2]|0}OBa(pg);kg=jg;lg=mg;qb=509;break}k[cg>>2]=(k[cg>>2]|0)+12;x=0;ng=Ba(563,100)|0;qg=x;x=0;do if(qg&1){og=Hc()|0;rg=M;sg=og;qb=511}else{k[ng+4>>2]=0;k[ng+8>>2]=0;k[ng>>2]=31496;og=ng+12|0;x=0;Pa(44,og|0,ua|0,wa|0,11,0,0,0);tg=x;x=0;if(tg&1){tg=Hc()|0;ug=M;c0a(ng);OBa(ng);rg=ug;sg=tg;qb=511;break}tg=ta+4|0;k[ta>>2]=og;k[tg>>2]=ng;i0a(ng);k[ng+16>>2]=og;og=ng+20|0;ug=k[og>>2]|0;k[og>>2]=ng;if(ug)k0a(ug);x=0;fb(267,sa|0,242043,ta|0);ug=x;x=0;do if(ug&1){og=Hc()|0;vg=Lf;wg=1;xg=M;yg=og}else{k[Lf>>2]=k[sa>>2];og=sa+4|0;k[c+124>>2]=k[og>>2];k[sa>>2]=0;k[og>>2]=0;og=c+128|0;k[Ca>>2]=0;zg=Ca+4|0;k[zg>>2]=0;k[Ca+8>>2]=0;x=0;fb(140,Ea|0,242053,7);Ag=x;x=0;if(Ag&1){Ag=Hc()|0;Bg=1;Cg=M;Dg=Ag}else{k[Da>>2]=0;Ag=Da+4|0;k[Ag>>2]=0;k[Da+8>>2]=0;x=0;Eg=Ba(563,12)|0;Fg=x;x=0;do if(Fg&1){Gg=Hc()|0;Hg=Gg;Ig=M;qb=514}else{k[Ag>>2]=Eg;k[Da>>2]=Eg;k[Da+8>>2]=Eg+12;x=0;xa(604,Eg|0,Ea|0);Gg=x;x=0;if(Gg&1){Gg=Hc()|0;Jg=M;Kg=k[Da>>2]|0;if(!Kg){Hg=Gg;Ig=Jg;qb=514;break}Lg=k[Ag>>2]|0;if((Lg|0)==(Kg|0))Mg=Kg;else{Ng=Lg;do{Lg=Ng+-12|0;k[Ag>>2]=Lg;K2a(Lg);Ng=k[Ag>>2]|0}while((Ng|0)!=(Kg|0));Mg=k[Da>>2]|0}OBa(Mg);Hg=Gg;Ig=Jg;qb=514;break}k[Ag>>2]=(k[Ag>>2]|0)+12;x=0;Kg=Ba(563,100)|0;Ng=x;x=0;do if(Ng&1){Lg=Hc()|0;Og=M;Pg=Lg;qb=516}else{k[Kg+4>>2]=0;k[Kg+8>>2]=0;k[Kg>>2]=31496;Lg=Kg+12|0;x=0;Pa(44,Lg|0,Ca|0,Da|0,13,1,0,0);Qg=x;x=0;if(Qg&1){Qg=Hc()|0;Rg=M;c0a(Kg);OBa(Kg);Og=Rg;Pg=Qg;qb=516;break}Qg=Aa+4|0;k[Aa>>2]=Lg;k[Qg>>2]=Kg;i0a(Kg);k[Kg+16>>2]=Lg;Lg=Kg+20|0;Rg=k[Lg>>2]|0;k[Lg>>2]=Kg;if(Rg)k0a(Rg);x=0;fb(267,za|0,242061,Aa|0);Rg=x;x=0;do if(Rg&1){Lg=Hc()|0;Sg=1;Tg=Lg;Ug=M}else{k[og>>2]=k[za>>2];Lg=za+4|0;Vg=k[Lg>>2]|0;k[c+132>>2]=Vg;k[za>>2]=0;k[Lg>>2]=0;k[a>>2]=0;Lg=a+4|0;k[Lg>>2]=0;k[a+8>>2]=0;Wg=Vg;x=0;Xg=Ba(563,136)|0;Yg=x;x=0;if(Yg&1){Yg=Hc()|0;Zg=M;if(Vg)j0a(Wg);Wg=k[c+124>>2]|0;if(Wg)j0a(Wg);Wg=k[c+116>>2]|0;if(Wg)j0a(Wg);Wg=k[c+108>>2]|0;if(Wg)j0a(Wg);Wg=k[c+100>>2]|0;if(Wg)j0a(Wg);Wg=k[c+92>>2]|0;if(Wg)j0a(Wg);Wg=k[c+84>>2]|0;if(Wg)j0a(Wg);Wg=k[c+76>>2]|0;if(Wg)j0a(Wg);Wg=k[c+68>>2]|0;if(Wg)j0a(Wg);Wg=k[c+60>>2]|0;if(Wg)j0a(Wg);Wg=k[c+52>>2]|0;if(Wg)j0a(Wg);Wg=k[c+44>>2]|0;if(Wg)j0a(Wg);Wg=k[c+36>>2]|0;if(Wg)j0a(Wg);Wg=k[c+28>>2]|0;if(Wg)j0a(Wg);Wg=k[c+20>>2]|0;if(Wg)j0a(Wg);Wg=k[c+12>>2]|0;if(Wg)j0a(Wg);Wg=k[c+4>>2]|0;if(!Wg){Sg=0;Tg=Yg;Ug=Zg;break}j0a(Wg);Sg=0;Tg=Yg;Ug=Zg;break}k[Lg>>2]=Xg;k[a>>2]=Xg;k[a+8>>2]=Xg+136;Zg=c+136|0;Yg=c;Wg=Xg;do{k[Wg>>2]=k[Yg>>2];Xg=k[Yg+4>>2]|0;k[Wg+4>>2]=Xg;if(!Xg)_g=Wg;else{h0a(Xg);_g=k[Lg>>2]|0}Wg=_g+8|0;k[Lg>>2]=Wg;Yg=Yg+8|0}while((Yg|0)!=(Zg|0));Zg=k[c+132>>2]|0;if(Zg)j0a(Zg);Zg=k[c+124>>2]|0;if(Zg)j0a(Zg);Zg=k[c+116>>2]|0;if(Zg)j0a(Zg);Zg=k[c+108>>2]|0;if(Zg)j0a(Zg);Zg=k[c+100>>2]|0;if(Zg)j0a(Zg);Zg=k[c+92>>2]|0;if(Zg)j0a(Zg);Zg=k[c+84>>2]|0;if(Zg)j0a(Zg);Zg=k[c+76>>2]|0;if(Zg)j0a(Zg);Zg=k[c+68>>2]|0;if(Zg)j0a(Zg);Zg=k[c+60>>2]|0;if(Zg)j0a(Zg);Zg=k[c+52>>2]|0;if(Zg)j0a(Zg);Zg=k[c+44>>2]|0;if(Zg)j0a(Zg);Zg=k[c+36>>2]|0;if(Zg)j0a(Zg);Zg=k[c+28>>2]|0;if(Zg)j0a(Zg);Zg=k[c+20>>2]|0;if(Zg)j0a(Zg);Zg=k[c+12>>2]|0;if(Zg)j0a(Zg);Zg=k[c+4>>2]|0;if(Zg)j0a(Zg);Zg=k[Qg>>2]|0;if(Zg)j0a(Zg);Zg=k[Da>>2]|0;if(Zg){Yg=k[Ag>>2]|0;if((Yg|0)==(Zg|0))$g=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[Ag>>2]=Yg;K2a(Yg);Wg=k[Ag>>2]|0}while((Wg|0)!=(Zg|0));$g=k[Da>>2]|0}OBa($g)}K2a(Ea);Zg=k[Ca>>2]|0;if(Zg){Wg=k[zg>>2]|0;if((Wg|0)==(Zg|0))ah=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[zg>>2]=Wg;K2a(Wg);Yg=k[zg>>2]|0}while((Yg|0)!=(Zg|0));ah=k[Ca>>2]|0}OBa(ah)}Zg=k[tg>>2]|0;if(Zg)j0a(Zg);Zg=k[wa>>2]|0;if(Zg){Yg=k[cg>>2]|0;if((Yg|0)==(Zg|0))bh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[cg>>2]=Yg;K2a(Yg);Wg=k[cg>>2]|0}while((Wg|0)!=(Zg|0));bh=k[wa>>2]|0}OBa(bh)}K2a(ya);Zg=k[ua>>2]|0;if(Zg){Wg=k[Yf>>2]|0;if((Wg|0)==(Zg|0))ch=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[Yf>>2]=Wg;K2a(Wg);Yg=k[Yf>>2]|0}while((Yg|0)!=(Zg|0));ch=k[ua>>2]|0}OBa(ch)}K2a(va+36|0);K2a(va+24|0);K2a(va+12|0);K2a(va);Zg=k[Qf>>2]|0;if(Zg)j0a(Zg);Zg=k[qa>>2]|0;if(Zg){Yg=k[zf>>2]|0;if((Yg|0)==(Zg|0))dh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[zf>>2]=Yg;K2a(Yg);Wg=k[zf>>2]|0}while((Wg|0)!=(Zg|0));dh=k[qa>>2]|0}OBa(dh)}K2a(ra);Zg=k[pa>>2]|0;if(Zg){Wg=k[yf>>2]|0;if((Wg|0)==(Zg|0))eh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[yf>>2]=Wg;K2a(Wg);Yg=k[yf>>2]|0}while((Yg|0)!=(Zg|0));eh=k[pa>>2]|0}OBa(eh)}Zg=k[sf>>2]|0;if(Zg)j0a(Zg);Zg=k[ma>>2]|0;if(Zg){Yg=k[mf>>2]|0;if((Yg|0)==(Zg|0))fh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[mf>>2]=Yg;K2a(Yg);Wg=k[mf>>2]|0}while((Wg|0)!=(Zg|0));fh=k[ma>>2]|0}OBa(fh)}Zg=k[ka>>2]|0;if(Zg){Wg=k[ff>>2]|0;if((Wg|0)==(Zg|0))gh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[ff>>2]=Wg;K2a(Wg);Yg=k[ff>>2]|0}while((Yg|0)!=(Zg|0));gh=k[ka>>2]|0}OBa(gh)}K2a(la+48|0);K2a(la+36|0);K2a(la+24|0);K2a(la+12|0);K2a(la);Zg=k[Ze>>2]|0;if(Zg)j0a(Zg);Zg=k[ha>>2]|0;if(Zg){Yg=k[Te>>2]|0;if((Yg|0)==(Zg|0))hh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[Te>>2]=Yg;K2a(Yg);Wg=k[Te>>2]|0}while((Wg|0)!=(Zg|0));hh=k[ha>>2]|0}OBa(hh)}Zg=k[fa>>2]|0;if(Zg){Wg=k[Ne>>2]|0;if((Wg|0)==(Zg|0))ih=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[Ne>>2]=Wg;K2a(Wg);Yg=k[Ne>>2]|0}while((Yg|0)!=(Zg|0));ih=k[fa>>2]|0}OBa(ih)}K2a(ga+36|0);K2a(ga+24|0);K2a(ga+12|0);K2a(ga);Zg=k[Fe>>2]|0;if(Zg)j0a(Zg);Zg=k[ca>>2]|0;if(Zg){Yg=k[ze>>2]|0;if((Yg|0)==(Zg|0))jh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[ze>>2]=Yg;K2a(Yg);Wg=k[ze>>2]|0}while((Wg|0)!=(Zg|0));jh=k[ca>>2]|0}OBa(jh)}Zg=k[aa>>2]|0;if(Zg){Wg=k[te>>2]|0;if((Wg|0)==(Zg|0))kh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[te>>2]=Wg;K2a(Wg);Yg=k[te>>2]|0}while((Yg|0)!=(Zg|0));kh=k[aa>>2]|0}OBa(kh)}K2a(ba+24|0);K2a(ba+12|0);K2a(ba);Zg=k[le>>2]|0;if(Zg)j0a(Zg);Zg=k[Z>>2]|0;if(Zg){Yg=k[fe>>2]|0;if((Yg|0)==(Zg|0))lh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[fe>>2]=Yg;K2a(Yg);Wg=k[fe>>2]|0}while((Wg|0)!=(Zg|0));lh=k[Z>>2]|0}OBa(lh)}Zg=k[X>>2]|0;if(Zg){Wg=k[$d>>2]|0;if((Wg|0)==(Zg|0))mh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[$d>>2]=Wg;K2a(Wg);Yg=k[$d>>2]|0}while((Yg|0)!=(Zg|0));mh=k[X>>2]|0}OBa(mh)}K2a(Y+12|0);K2a(Y);Zg=k[Td>>2]|0;if(Zg)j0a(Zg);Zg=k[U>>2]|0;if(Zg){Yg=k[Md>>2]|0;if((Yg|0)==(Zg|0))nh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[Md>>2]=Yg;K2a(Yg);Wg=k[Md>>2]|0}while((Wg|0)!=(Zg|0));nh=k[U>>2]|0}OBa(nh)}Zg=k[S>>2]|0;if(Zg){Wg=k[Fd>>2]|0;if((Wg|0)==(Zg|0))oh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[Fd>>2]=Wg;K2a(Wg);Yg=k[Fd>>2]|0}while((Yg|0)!=(Zg|0));oh=k[S>>2]|0}OBa(oh)}K2a(T);Zg=k[zd>>2]|0;if(Zg)j0a(Zg);Zg=k[O>>2]|0;if(Zg){Yg=k[id>>2]|0;if((Yg|0)==(Zg|0))ph=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[id>>2]=Yg;K2a(Yg);Wg=k[id>>2]|0}while((Wg|0)!=(Zg|0));ph=k[O>>2]|0}OBa(ph)}K2a(P);Zg=k[N>>2]|0;if(Zg){Wg=k[hd>>2]|0;if((Wg|0)==(Zg|0))qh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[hd>>2]=Wg;K2a(Wg);Yg=k[hd>>2]|0}while((Yg|0)!=(Zg|0));qh=k[N>>2]|0}OBa(qh)}Zg=k[bd>>2]|0;if(Zg)j0a(Zg);Zg=k[I>>2]|0;if(Zg){Yg=k[Lc>>2]|0;if((Yg|0)==(Zg|0))rh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[Lc>>2]=Yg;K2a(Yg);Wg=k[Lc>>2]|0}while((Wg|0)!=(Zg|0));rh=k[I>>2]|0}OBa(rh)}K2a(J);Zg=k[G>>2]|0;if(Zg){Wg=k[Ec>>2]|0;if((Wg|0)==(Zg|0))sh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[Ec>>2]=Wg;K2a(Wg);Yg=k[Ec>>2]|0}while((Yg|0)!=(Zg|0));sh=k[G>>2]|0}OBa(sh)}K2a(H+24|0);K2a(H+12|0);K2a(H);Zg=k[wc>>2]|0;if(Zg)j0a(Zg);Zg=k[C>>2]|0;if(Zg){Yg=k[fc>>2]|0;if((Yg|0)==(Zg|0))th=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[fc>>2]=Yg;K2a(Yg);Wg=k[fc>>2]|0}while((Wg|0)!=(Zg|0));th=k[C>>2]|0}OBa(th)}K2a(D);Zg=k[A>>2]|0;if(Zg){Wg=k[$b>>2]|0;if((Wg|0)==(Zg|0))uh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[$b>>2]=Wg;K2a(Wg);Yg=k[$b>>2]|0}while((Yg|0)!=(Zg|0));uh=k[A>>2]|0}OBa(uh)}K2a(B+24|0);K2a(B+12|0);K2a(B);Zg=k[Tb>>2]|0;if(Zg)j0a(Zg);Zg=k[w>>2]|0;if(Zg){Yg=k[Mb>>2]|0;if((Yg|0)==(Zg|0))vh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[Mb>>2]=Yg;K2a(Yg);Wg=k[Mb>>2]|0}while((Wg|0)!=(Zg|0));vh=k[w>>2]|0}OBa(vh)}Zg=k[u>>2]|0;if(Zg){Wg=k[Fb>>2]|0;if((Wg|0)==(Zg|0))wh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[Fb>>2]=Wg;K2a(Wg);Yg=k[Fb>>2]|0}while((Yg|0)!=(Zg|0));wh=k[u>>2]|0}OBa(wh)}K2a(v);Zg=k[zb>>2]|0;if(Zg)j0a(Zg);Zg=k[q>>2]|0;if(Zg){Yg=k[sb>>2]|0;if((Yg|0)==(Zg|0))xh=Zg;else{Wg=Yg;do{Yg=Wg+-12|0;k[sb>>2]=Yg;K2a(Yg);Wg=k[sb>>2]|0}while((Wg|0)!=(Zg|0));xh=k[q>>2]|0}OBa(xh)}Zg=k[o>>2]|0;if(Zg){Wg=k[kb>>2]|0;if((Wg|0)==(Zg|0))yh=Zg;else{Yg=Wg;do{Wg=Yg+-12|0;k[kb>>2]=Wg;K2a(Wg);Yg=k[kb>>2]|0}while((Yg|0)!=(Zg|0));yh=k[o>>2]|0}OBa(yh)}K2a(p);Zg=k[db>>2]|0;if(Zg)j0a(Zg);Zg=k[Xa>>2]|0;if(Zg)j0a(Zg);Zg=k[Qa>>2]|0;if(Zg)j0a(Zg);Zg=k[Ja>>2]|0;if(!Zg){zh=a+12|0;k[zh>>2]=0;Ah=a+16|0;Bh=a+20|0;k[Bh>>2]=0;Ch=a+24|0;k[Ch>>2]=0;Dh=a+20|0;k[Ah>>2]=Dh;Eh=a+28|0;Fh=a+32|0;k[Fh>>2]=0;Gh=a+36|0;k[Gh>>2]=0;Hh=a+32|0;k[Eh>>2]=Hh;r=b;return}j0a(Zg);zh=a+12|0;k[zh>>2]=0;Ah=a+16|0;Bh=a+20|0;k[Bh>>2]=0;Ch=a+24|0;k[Ch>>2]=0;Dh=a+20|0;k[Ah>>2]=Dh;Eh=a+28|0;Fh=a+32|0;k[Fh>>2]=0;Gh=a+36|0;k[Gh>>2]=0;Hh=a+32|0;k[Eh>>2]=Hh;r=b;return}while(0);Rg=k[Qg>>2]|0;if(!Rg){Ih=Sg;Jh=Ug;Kh=Tg;break}j0a(Rg);Ih=Sg;Jh=Ug;Kh=Tg}while(0);if((qb|0)==516){Ih=1;Jh=Og;Kh=Pg}Kg=k[Da>>2]|0;if(!Kg){Lh=Ih;Mh=Jh;Nh=Kh;break}Ng=k[Ag>>2]|0;if((Ng|0)==(Kg|0))Oh=Kg;else{Jg=Ng;do{Ng=Jg+-12|0;k[Ag>>2]=Ng;K2a(Ng);Jg=k[Ag>>2]|0}while((Jg|0)!=(Kg|0));Oh=k[Da>>2]|0}OBa(Oh);Lh=Ih;Mh=Jh;Nh=Kh}while(0);if((qb|0)==514){Lh=1;Mh=Ig;Nh=Hg}K2a(Ea);Bg=Lh;Cg=Mh;Dg=Nh}Ag=k[Ca>>2]|0;if(!Ag){vg=og;wg=Bg;xg=Cg;yg=Dg;break}Eg=k[zg>>2]|0;if((Eg|0)==(Ag|0))Ph=Ag;else{Fg=Eg;do{Eg=Fg+-12|0;k[zg>>2]=Eg;K2a(Eg);Fg=k[zg>>2]|0}while((Fg|0)!=(Ag|0));Ph=k[Ca>>2]|0}OBa(Ph);vg=og;wg=Bg;xg=Cg;yg=Dg}while(0);ug=k[tg>>2]|0;if(!ug){Qh=vg;Rh=wg;Sh=xg;Th=yg;break}j0a(ug);Qh=vg;Rh=wg;Sh=xg;Th=yg}while(0);if((qb|0)==511){Qh=Lf;Rh=1;Sh=rg;Th=sg}ng=k[wa>>2]|0;if(!ng){Uh=Qh;Vh=Rh;Wh=Sh;Xh=Th;break}qg=k[cg>>2]|0;if((qg|0)==(ng|0))Yh=ng;else{mg=qg;do{qg=mg+-12|0;k[cg>>2]=qg;K2a(qg);mg=k[cg>>2]|0}while((mg|0)!=(ng|0));Yh=k[wa>>2]|0}OBa(Yh);Uh=Qh;Vh=Rh;Wh=Sh;Xh=Th}while(0);if((qb|0)==509){Uh=Lf;Vh=1;Wh=lg;Xh=kg}K2a(ya);dg=Uh;eg=Vh;fg=Wh;gg=Xh}cg=k[ua>>2]|0;if(!cg){Zh=dg;_h=eg;$h=fg;ai=gg;break o}hg=k[Yf>>2]|0;if((hg|0)==(cg|0))bi=cg;else{ig=hg;do{hg=ig+-12|0;k[Yf>>2]=hg;K2a(hg);ig=k[Yf>>2]|0}while((ig|0)!=(cg|0));bi=k[ua>>2]|0}OBa(bi);Zh=dg;_h=eg;$h=fg;ai=gg;break o}while(0);$f=Hc()|0;cg=M;ig=k[ua>>2]|0;if(!ig){ag=$f;bg=cg;qb=507;break}hg=k[Yf>>2]|0;if((hg|0)==(ig|0))ci=ig;else{ng=hg;do{hg=ng+-12|0;k[Yf>>2]=hg;K2a(hg);ng=k[Yf>>2]|0}while((ng|0)!=(ig|0));ci=k[ua>>2]|0}OBa(ci);ag=$f;bg=cg;qb=507}while(0);if((qb|0)==507){Zh=Lf;_h=1;$h=bg;ai=ag}K2a(va+36|0);K2a(va+24|0);K2a(va+12|0);K2a(va);Sf=_h;Tf=$h;Uf=ai;Vf=Zh;break n}while(0);Wf=Hc()|0;Yf=M;if((va|0)==(Xf|0)){Sf=1;Tf=Yf;Uf=Wf;Vf=Lf;break}else di=Xf;do{di=di+-12|0;K2a(di)}while((di|0)!=(va|0));Sf=1;Tf=Yf;Uf=Wf;Vf=Lf}while(0);Rf=k[Qf>>2]|0;if(!Rf){ei=Sf;fi=Tf;gi=Uf;hi=Vf;break}j0a(Rf);ei=Sf;fi=Tf;gi=Uf;hi=Vf}while(0);if((qb|0)==503){ei=1;fi=Of;gi=Pf;hi=pf}Kf=k[qa>>2]|0;if(!Kf){ii=ei;ji=fi;ki=gi;li=hi;break}Nf=k[zf>>2]|0;if((Nf|0)==(Kf|0))mi=Kf;else{Jf=Nf;do{Nf=Jf+-12|0;k[zf>>2]=Nf;K2a(Nf);Jf=k[zf>>2]|0}while((Jf|0)!=(Kf|0));mi=k[qa>>2]|0}OBa(mi);ii=ei;ji=fi;ki=gi;li=hi}while(0);if((qb|0)==501){ii=1;ji=If;ki=Hf;li=pf}K2a(ra);Af=ii;Bf=ji;Cf=ki;Df=li}zf=k[pa>>2]|0;if(!zf){uf=Df;vf=Af;wf=Bf;xf=Cf;break}Ef=k[yf>>2]|0;if((Ef|0)==(zf|0))ni=zf;else{Ff=Ef;do{Ef=Ff+-12|0;k[yf>>2]=Ef;K2a(Ef);Ff=k[yf>>2]|0}while((Ff|0)!=(zf|0));ni=k[pa>>2]|0}OBa(ni);uf=Df;vf=Af;wf=Bf;xf=Cf}while(0);tf=k[sf>>2]|0;if(!tf){oi=uf;pi=vf;qi=wf;ri=xf;break}j0a(tf);oi=uf;pi=vf;qi=wf;ri=xf}while(0);if((qb|0)==498){oi=We;pi=1;qi=qf;ri=rf}nf=k[ma>>2]|0;if(nf){of=k[mf>>2]|0;if((of|0)==(nf|0))si=nf;else{tf=of;do{of=tf+-12|0;k[mf>>2]=of;K2a(of);tf=k[mf>>2]|0}while((tf|0)!=(nf|0));si=k[ma>>2]|0}OBa(si)}nf=k[ka>>2]|0;if(!nf){ti=oi;ui=pi;vi=qi;wi=ri;break m}tf=k[ff>>2]|0;if((tf|0)==(nf|0))xi=nf;else{mf=tf;do{tf=mf+-12|0;k[ff>>2]=tf;K2a(tf);mf=k[ff>>2]|0}while((mf|0)!=(nf|0));xi=k[ka>>2]|0}OBa(xi);ti=oi;ui=pi;vi=qi;wi=ri;break m}while(0);jf=Hc()|0;nf=M;mf=k[ka>>2]|0;if(!mf){kf=jf;lf=nf;qb=496;break}tf=k[ff>>2]|0;if((tf|0)==(mf|0))yi=mf;else{of=tf;do{tf=of+-12|0;k[ff>>2]=tf;K2a(tf);of=k[ff>>2]|0}while((of|0)!=(mf|0));yi=k[ka>>2]|0}OBa(yi);kf=jf;lf=nf;qb=496}while(0);if((qb|0)==496){ti=We;ui=1;vi=lf;wi=kf}K2a(la+48|0);K2a(la+36|0);K2a(la+24|0);K2a(la+12|0);K2a(la);$e=ti;af=ui;bf=vi;cf=wi;break l}while(0);df=Hc()|0;ff=M;if((la|0)==(ef|0)){$e=We;af=1;bf=ff;cf=df;break}else zi=ef;do{zi=zi+-12|0;K2a(zi)}while((zi|0)!=(la|0));$e=We;af=1;bf=ff;cf=df}while(0);_e=k[Ze>>2]|0;if(!_e){Ai=$e;Bi=af;Ci=bf;Di=cf;break}j0a(_e);Ai=$e;Bi=af;Ci=bf;Di=cf}while(0);if((qb|0)==492){Ai=Ce;Bi=1;Ci=Xe;Di=Ye}Ue=k[ha>>2]|0;if(Ue){Ve=k[Te>>2]|0;if((Ve|0)==(Ue|0))Ei=Ue;else{_e=Ve;do{Ve=_e+-12|0;k[Te>>2]=Ve;K2a(Ve);_e=k[Te>>2]|0}while((_e|0)!=(Ue|0));Ei=k[ha>>2]|0}OBa(Ei)}Ue=k[fa>>2]|0;if(!Ue){Fi=Ai;Gi=Bi;Hi=Ci;Ii=Di;break k}_e=k[Ne>>2]|0;if((_e|0)==(Ue|0))Ji=Ue;else{Te=_e;do{_e=Te+-12|0;k[Ne>>2]=_e;K2a(_e);Te=k[Ne>>2]|0}while((Te|0)!=(Ue|0));Ji=k[fa>>2]|0}OBa(Ji);Fi=Ai;Gi=Bi;Hi=Ci;Ii=Di;break k}while(0);Qe=Hc()|0;Ue=M;Te=k[fa>>2]|0;if(!Te){Re=Qe;Se=Ue;qb=490;break}_e=k[Ne>>2]|0;if((_e|0)==(Te|0))Ki=Te;else{Ve=_e;do{_e=Ve+-12|0;k[Ne>>2]=_e;K2a(_e);Ve=k[Ne>>2]|0}while((Ve|0)!=(Te|0));Ki=k[fa>>2]|0}OBa(Ki);Re=Qe;Se=Ue;qb=490}while(0);if((qb|0)==490){Fi=Ce;Gi=1;Hi=Se;Ii=Re}K2a(ga+36|0);K2a(ga+24|0);K2a(ga+12|0);K2a(ga);He=Fi;Ie=Gi;Je=Hi;Ke=Ii;break j}while(0);Le=Hc()|0;Ne=M;if((ga|0)==(Me|0)){He=Ce;Ie=1;Je=Ne;Ke=Le;break}else Li=Me;do{Li=Li+-12|0;K2a(Li)}while((Li|0)!=(ga|0));He=Ce;Ie=1;Je=Ne;Ke=Le}while(0);Ge=k[Fe>>2]|0;if(!Ge){Mi=He;Ni=Ie;Oi=Je;Pi=Ke;break}j0a(Ge);Mi=He;Ni=Ie;Oi=Je;Pi=Ke}while(0);if((qb|0)==486){Mi=ie;Ni=1;Oi=De;Pi=Ee}Ae=k[ca>>2]|0;if(Ae){Be=k[ze>>2]|0;if((Be|0)==(Ae|0))Qi=Ae;else{Ge=Be;do{Be=Ge+-12|0;k[ze>>2]=Be;K2a(Be);Ge=k[ze>>2]|0}while((Ge|0)!=(Ae|0));Qi=k[ca>>2]|0}OBa(Qi)}Ae=k[aa>>2]|0;if(!Ae){Ri=Mi;Si=Ni;Ti=Oi;Ui=Pi;break i}Ge=k[te>>2]|0;if((Ge|0)==(Ae|0))Vi=Ae;else{ze=Ge;do{Ge=ze+-12|0;k[te>>2]=Ge;K2a(Ge);ze=k[te>>2]|0}while((ze|0)!=(Ae|0));Vi=k[aa>>2]|0}OBa(Vi);Ri=Mi;Si=Ni;Ti=Oi;Ui=Pi;break i}while(0);we=Hc()|0;Ae=M;ze=k[aa>>2]|0;if(!ze){xe=we;ye=Ae;qb=484;break}Ge=k[te>>2]|0;if((Ge|0)==(ze|0))Wi=ze;else{Be=Ge;do{Ge=Be+-12|0;k[te>>2]=Ge;K2a(Ge);Be=k[te>>2]|0}while((Be|0)!=(ze|0));Wi=k[aa>>2]|0}OBa(Wi);xe=we;ye=Ae;qb=484}while(0);if((qb|0)==484){Ri=ie;Si=1;Ti=ye;Ui=xe}K2a(ba+24|0);K2a(ba+12|0);K2a(ba);ne=Ri;oe=Si;pe=Ti;qe=Ui;break h}while(0);re=Hc()|0;te=M;if((ba|0)==(se|0)){ne=ie;oe=1;pe=te;qe=re;break}else Xi=se;do{Xi=Xi+-12|0;K2a(Xi)}while((Xi|0)!=(ba|0));ne=ie;oe=1;pe=te;qe=re}while(0);me=k[le>>2]|0;if(!me){Yi=ne;Zi=oe;_i=pe;$i=qe;break}j0a(me);Yi=ne;Zi=oe;_i=pe;$i=qe}while(0);if((qb|0)==480){Yi=Qd;Zi=1;_i=je;$i=ke}ge=k[Z>>2]|0;if(ge){he=k[fe>>2]|0;if((he|0)==(ge|0))aj=ge;else{me=he;do{he=me+-12|0;k[fe>>2]=he;K2a(he);me=k[fe>>2]|0}while((me|0)!=(ge|0));aj=k[Z>>2]|0}OBa(aj)}ge=k[X>>2]|0;if(!ge){bj=Yi;cj=Zi;dj=_i;ej=$i;break g}me=k[$d>>2]|0;if((me|0)==(ge|0))fj=ge;else{fe=me;do{me=fe+-12|0;k[$d>>2]=me;K2a(me);fe=k[$d>>2]|0}while((fe|0)!=(ge|0));fj=k[X>>2]|0}OBa(fj);bj=Yi;cj=Zi;dj=_i;ej=$i;break g}while(0);ce=Hc()|0;ge=M;fe=k[X>>2]|0;if(!fe){de=ce;ee=ge;qb=478;break}me=k[$d>>2]|0;if((me|0)==(fe|0))gj=fe;else{he=me;do{me=he+-12|0;k[$d>>2]=me;K2a(me);he=k[$d>>2]|0}while((he|0)!=(fe|0));gj=k[X>>2]|0}OBa(gj);de=ce;ee=ge;qb=478}while(0);if((qb|0)==478){bj=Qd;cj=1;dj=ee;ej=de}K2a(Y+12|0);K2a(Y);Vd=bj;Wd=cj;Xd=ej;Yd=dj;break f}while(0);Zd=Hc()|0;$d=M;if((Y|0)==(_d|0)){Vd=Qd;Wd=1;Xd=Zd;Yd=$d;break}else hj=_d;do{hj=hj+-12|0;K2a(hj)}while((hj|0)!=(Y|0));Vd=Qd;Wd=1;Xd=Zd;Yd=$d}while(0);Ud=k[Td>>2]|0;if(!Ud){ij=Vd;jj=Wd;kj=Xd;lj=Yd;break}j0a(Ud);ij=Vd;jj=Wd;kj=Xd;lj=Yd}while(0);if((qb|0)==474){ij=ud;jj=1;kj=Sd;lj=Rd}Pd=k[U>>2]|0;if(Pd){Nd=k[Md>>2]|0;if((Nd|0)==(Pd|0))mj=Pd;else{Ld=Nd;do{Nd=Ld+-12|0;k[Md>>2]=Nd;K2a(Nd);Ld=k[Md>>2]|0}while((Ld|0)!=(Pd|0));mj=k[U>>2]|0}OBa(mj)}Pd=k[S>>2]|0;if(!Pd){nj=ij;oj=jj;pj=kj;qj=lj;break}Ld=k[Fd>>2]|0;if((Ld|0)==(Pd|0))rj=Pd;else{Md=Ld;do{Ld=Md+-12|0;k[Fd>>2]=Ld;K2a(Ld);Md=k[Fd>>2]|0}while((Md|0)!=(Pd|0));rj=k[S>>2]|0}OBa(rj);nj=ij;oj=jj;pj=kj;qj=lj}while(0);if((qb|0)==472){nj=ud;oj=1;pj=Jd;qj=Kd}K2a(T);Bd=nj;Cd=oj;Dd=pj;Ed=qj}while(0);Ad=k[zd>>2]|0;if(!Ad){sj=Bd;tj=Cd;uj=Dd;vj=Ed;break}j0a(Ad);sj=Bd;tj=Cd;uj=Dd;vj=Ed}while(0);if((qb|0)==469){sj=Yc;tj=1;uj=yd;vj=xd}td=k[O>>2]|0;if(!td){wj=sj;xj=tj;yj=uj;zj=vj;break}wd=k[id>>2]|0;if((wd|0)==(td|0))Aj=td;else{sd=wd;do{wd=sd+-12|0;k[id>>2]=wd;K2a(wd);sd=k[id>>2]|0}while((sd|0)!=(td|0));Aj=k[O>>2]|0}OBa(Aj);wj=sj;xj=tj;yj=uj;zj=vj}while(0);if((qb|0)==467){wj=Yc;xj=1;yj=qd;zj=rd}K2a(P);jd=wj;kd=xj;ld=yj;md=zj}id=k[N>>2]|0;if(!id){dd=jd;ed=kd;fd=ld;gd=md;break}nd=k[hd>>2]|0;if((nd|0)==(id|0))Bj=id;else{od=nd;do{nd=od+-12|0;k[hd>>2]=nd;K2a(nd);od=k[hd>>2]|0}while((od|0)!=(id|0));Bj=k[N>>2]|0}OBa(Bj);dd=jd;ed=kd;fd=ld;gd=md}while(0);cd=k[bd>>2]|0;if(!cd){Cj=dd;Dj=ed;Ej=fd;Fj=gd;break}j0a(cd);Cj=dd;Dj=ed;Ej=fd;Fj=gd}while(0);if((qb|0)==464){Cj=rc;Dj=1;Ej=ad;Fj=$c}Xc=k[I>>2]|0;if(!Xc){Gj=Cj;Hj=Dj;Ij=Ej;Jj=Fj;break}_c=k[Lc>>2]|0;if((_c|0)==(Xc|0))Kj=Xc;else{Wc=_c;do{_c=Wc+-12|0;k[Lc>>2]=_c;K2a(_c);Wc=k[Lc>>2]|0}while((Wc|0)!=(Xc|0));Kj=k[I>>2]|0}OBa(Kj);Gj=Cj;Hj=Dj;Ij=Ej;Jj=Fj}while(0);if((qb|0)==462){Gj=rc;Hj=1;Ij=Uc;Jj=Vc}K2a(J);Mc=Gj;Nc=Hj;Oc=Ij;Pc=Jj}Lc=k[G>>2]|0;if(!Lc){Lj=Mc;Mj=Nc;Nj=Oc;Oj=Pc;break e}Qc=k[Ec>>2]|0;if((Qc|0)==(Lc|0))Pj=Lc;else{Rc=Qc;do{Qc=Rc+-12|0;k[Ec>>2]=Qc;K2a(Qc);Rc=k[Ec>>2]|0}while((Rc|0)!=(Lc|0));Pj=k[G>>2]|0}OBa(Pj);Lj=Mc;Mj=Nc;Nj=Oc;Oj=Pc;break e}while(0);Ic=Hc()|0;Lc=M;Rc=k[G>>2]|0;if(!Rc){Jc=Ic;Kc=Lc;qb=460;break}Qc=k[Ec>>2]|0;if((Qc|0)==(Rc|0))Qj=Rc;else{Xc=Qc;do{Qc=Xc+-12|0;k[Ec>>2]=Qc;K2a(Qc);Xc=k[Ec>>2]|0}while((Xc|0)!=(Rc|0));Qj=k[G>>2]|0}OBa(Qj);Jc=Ic;Kc=Lc;qb=460}while(0);if((qb|0)==460){Lj=rc;Mj=1;Nj=Jc;Oj=Kc}K2a(H+24|0);K2a(H+12|0);K2a(H);yc=Lj;zc=Mj;Ac=Nj;Bc=Oj;break d}while(0);Cc=Hc()|0;Ec=M;if((H|0)==(Dc|0)){yc=rc;zc=1;Ac=Cc;Bc=Ec;break}else Rj=Dc;do{Rj=Rj+-12|0;K2a(Rj)}while((Rj|0)!=(H|0));yc=rc;zc=1;Ac=Cc;Bc=Ec}while(0);xc=k[wc>>2]|0;if(!xc){Sj=yc;Tj=zc;Uj=Ac;Vj=Bc;break}j0a(xc);Sj=yc;Tj=zc;Uj=Ac;Vj=Bc}while(0);if((qb|0)==456){Sj=Qb;Tj=1;Uj=vc;Vj=uc}qc=k[C>>2]|0;if(!qc){Wj=Sj;Xj=Tj;Yj=Uj;Zj=Vj;break}tc=k[fc>>2]|0;if((tc|0)==(qc|0))_j=qc;else{pc=tc;do{tc=pc+-12|0;k[fc>>2]=tc;K2a(tc);pc=k[fc>>2]|0}while((pc|0)!=(qc|0));_j=k[C>>2]|0}OBa(_j);Wj=Sj;Xj=Tj;Yj=Uj;Zj=Vj}while(0);if((qb|0)==454){Wj=Qb;Xj=1;Yj=nc;Zj=oc}K2a(D);gc=Wj;hc=Xj;ic=Yj;jc=Zj}fc=k[A>>2]|0;if(!fc){$j=gc;ak=hc;bk=ic;ck=jc;break c}kc=k[$b>>2]|0;if((kc|0)==(fc|0))dk=fc;else{lc=kc;do{kc=lc+-12|0;k[$b>>2]=kc;K2a(kc);lc=k[$b>>2]|0}while((lc|0)!=(fc|0));dk=k[A>>2]|0}OBa(dk);$j=gc;ak=hc;bk=ic;ck=jc;break c}while(0);cc=Hc()|0;fc=M;lc=k[A>>2]|0;if(!lc){dc=cc;ec=fc;qb=452;break}kc=k[$b>>2]|0;if((kc|0)==(lc|0))ek=lc;else{qc=kc;do{kc=qc+-12|0;k[$b>>2]=kc;K2a(kc);qc=k[$b>>2]|0}while((qc|0)!=(lc|0));ek=k[A>>2]|0}OBa(ek);dc=cc;ec=fc;qb=452}while(0);if((qb|0)==452){$j=Qb;ak=1;bk=dc;ck=ec}K2a(B+24|0);K2a(B+12|0);K2a(B);Vb=$j;Wb=ak;Xb=bk;Yb=ck;break b}while(0);Zb=Hc()|0;$b=M;if((B|0)==(_b|0)){Vb=Qb;Wb=1;Xb=Zb;Yb=$b;break}else fk=_b;do{fk=fk+-12|0;K2a(fk)}while((fk|0)!=(B|0));Vb=Qb;Wb=1;Xb=Zb;Yb=$b}while(0);Ub=k[Tb>>2]|0;if(!Ub){gk=Vb;hk=Wb;ik=Xb;jk=Yb;break}j0a(Ub);gk=Vb;hk=Wb;ik=Xb;jk=Yb}while(0);if((qb|0)==448){gk=wb;hk=1;ik=Sb;jk=Rb}Pb=k[w>>2]|0;if(Pb){Nb=k[Mb>>2]|0;if((Nb|0)==(Pb|0))kk=Pb;else{Lb=Nb;do{Nb=Lb+-12|0;k[Mb>>2]=Nb;K2a(Nb);Lb=k[Mb>>2]|0}while((Lb|0)!=(Pb|0));kk=k[w>>2]|0}OBa(kk)}Pb=k[u>>2]|0;if(!Pb){lk=gk;mk=hk;nk=ik;ok=jk;break}Lb=k[Fb>>2]|0;if((Lb|0)==(Pb|0))pk=Pb;else{Mb=Lb;do{Lb=Mb+-12|0;k[Fb>>2]=Lb;K2a(Lb);Mb=k[Fb>>2]|0}while((Mb|0)!=(Pb|0));pk=k[u>>2]|0}OBa(pk);lk=gk;mk=hk;nk=ik;ok=jk}while(0);if((qb|0)==446){lk=wb;mk=1;nk=Jb;ok=Kb}K2a(v);Bb=lk;Cb=mk;Db=nk;Eb=ok}while(0);Ab=k[zb>>2]|0;if(!Ab){qk=Bb;rk=Cb;sk=Db;tk=Eb;break}j0a(Ab);qk=Bb;rk=Cb;sk=Db;tk=Eb}while(0);if((qb|0)==443){qk=ab;rk=1;sk=yb;tk=xb}vb=k[q>>2]|0;if(vb){tb=k[sb>>2]|0;if((tb|0)==(vb|0))uk=vb;else{rb=tb;do{tb=rb+-12|0;k[sb>>2]=tb;K2a(tb);rb=k[sb>>2]|0}while((rb|0)!=(vb|0));uk=k[q>>2]|0}OBa(uk)}vb=k[o>>2]|0;if(!vb){vk=qk;wk=rk;xk=sk;yk=tk;break}rb=k[kb>>2]|0;if((rb|0)==(vb|0))zk=vb;else{sb=rb;do{rb=sb+-12|0;k[kb>>2]=rb;K2a(rb);sb=k[kb>>2]|0}while((sb|0)!=(vb|0));zk=k[o>>2]|0}OBa(zk);vk=qk;wk=rk;xk=sk;yk=tk}while(0);if((qb|0)==441){vk=ab;wk=1;xk=ob;yk=pb}K2a(p);gb=vk;hb=wk;ib=xk;jb=yk}while(0);eb=k[db>>2]|0;if(!eb){Ya=gb;Za=hb;_a=ib;$a=jb;break a}j0a(eb);Ya=gb;Za=hb;_a=ib;$a=jb;break a}while(0);Ya=Ga;Za=1;_a=cb;$a=bb}while(0);Fa=k[Xa>>2]|0;if(!Fa){Ra=Ya;Sa=Za;Ta=_a;Ua=$a}else{j0a(Fa);Ra=Ya;Sa=Za;Ta=_a;Ua=$a}}else{Fa=Hc()|0;Ra=Ia;Sa=1;Ta=Fa;Ua=M}while(0);Ia=k[Qa>>2]|0;if(!Ia){Ka=Ra;La=Sa;Ma=Ta;Na=Ua}else{j0a(Ia);Ka=Ra;La=Sa;Ma=Ta;Na=Ua}}else{Ia=Hc()|0;Ka=c;La=1;Ma=Ia;Na=M}while(0);Ua=k[Ja>>2]|0;if(!Ua){Ak=Ka;Bk=La;Ck=Ma;Dk=Na}else{j0a(Ua);Ak=Ka;Bk=La;Ck=Ma;Dk=Na}}else{Na=Hc()|0;Ak=c;Bk=1;Ck=Na;Dk=M}if((c|0)==(Ak|0)|Bk^1)Sc(Ck|0);else Ek=Ak;do{Ak=k[Ek+-4>>2]|0;Ek=Ek+-8|0;if(Ak)j0a(Ak)}while((Ek|0)!=(c|0));Sc(Ck|0)}function TZ(a,b){a=a|0;b=b|0;k[a+12>>2]=b;return}function UZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=k[b+4>>2]|0;g=k[b>>2]|0;b=f-g|0;h=b>>3;i=a+8|0;j=g;g=f;do if(h){x=0;f=Ba(563,b>>1|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=l;n=M;break}else{l=f;k[a>>2]=l;k[e>>2]=l;k[i>>2]=f+(h<<2);o=4;break}}else o=4;while(0);if((o|0)==4){if((j|0)==(g|0)){r=c;return}h=j;while(1){j=k[h>>2]|0;p=k[h+4>>2]|0;q=(p|0)==0;if(!q)h0a(p);k[d>>2]=j;b=k[e>>2]|0;if(b>>>0>=(k[i>>2]|0)>>>0){x=0;xa(767,a|0,d|0);f=x;x=0;if(f&1)break}else{k[b>>2]=j;k[e>>2]=(k[e>>2]|0)+4}if(!q)j0a(p);h=h+8|0;if((h|0)==(g|0)){o=6;break}}if((o|0)==6){r=c;return}c=Hc()|0;o=M;if(q){m=c;n=o}else{j0a(p);m=c;n=o}}o=k[a>>2]|0;if(!o)Sc(m|0);a=k[e>>2]|0;if((a|0)!=(o|0))k[e>>2]=a+(~((a+-4-o|0)>>>2)<<2);OBa(o);Sc(m|0)}function VZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;f=a+16|0;g=a+12|0;h=a+20|0;j=k[h>>2]|0;do if(j){l=k[g>>2]|0;m=l;n=j;while(1){o=k[n+16>>2]|0;if(l>>>0>>0){p=k[n>>2]|0;if(!p){q=n;s=n;t=5;break}else u=p}else{if(o>>>0>=l>>>0){v=n;t=11;break}o=n+4|0;p=k[o>>2]|0;if(!p){w=o;y=n;t=9;break}else u=p}n=u}if((t|0)==5){k[c>>2]=s;z=q;A=m;B=s;t=12;break}else if((t|0)==9){k[c>>2]=y;z=w;A=m;B=y;t=12;break}else if((t|0)==11){k[c>>2]=v;if(!v){z=c;A=m;B=v;t=12;break}else{C=v;break}}}else{k[c>>2]=h;z=h;A=k[g>>2]|0;B=h;t=12}while(0);if((t|0)==12){v=KBa(28)|0;k[v+16>>2]=A;k[v+20>>2]=0;k[v+24>>2]=0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=B;k[z>>2]=v;B=k[k[f>>2]>>2]|0;if(!B)D=v;else{k[f>>2]=B;D=k[z>>2]|0}ui(k[a+20>>2]|0,D);D=a+24|0;k[D>>2]=(k[D>>2]|0)+1;C=v}if(!(k[C+20>>2]|0)){C=k[h>>2]|0;do if(C){v=k[g>>2]|0;D=v;z=C;while(1){B=k[z+16>>2]|0;if(v>>>0>>0){A=k[z>>2]|0;if(!A){E=z;F=z;t=20;break}else G=A}else{if(B>>>0>=v>>>0){H=z;t=26;break}B=z+4|0;A=k[B>>2]|0;if(!A){I=B;J=z;t=24;break}else G=A}z=G}if((t|0)==20){k[c>>2]=F;K=E;L=D;M=F;t=27;break}else if((t|0)==24){k[c>>2]=J;K=I;L=D;M=J;t=27;break}else if((t|0)==26){k[c>>2]=H;if(!H){K=c;L=D;M=H;t=27;break}else{N=D;O=H;break}}}else{k[c>>2]=h;K=h;L=k[g>>2]|0;M=h;t=27}while(0);if((t|0)==27){H=KBa(28)|0;k[H+16>>2]=L;k[H+20>>2]=0;k[H+24>>2]=0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=M;k[K>>2]=H;M=k[k[f>>2]>>2]|0;if(!M)P=H;else{k[f>>2]=M;P=k[K>>2]|0}ui(k[a+20>>2]|0,P);P=a+24|0;k[P>>2]=(k[P>>2]|0)+1;N=k[g>>2]|0;O=H}H=O+20|0;P=KBa(52)|0;k[P+4>>2]=0;k[P+8>>2]=0;k[P>>2]=33132;K=P+16|0;k[K>>2]=0;M=P+20|0;k[M>>2]=0;L=P+12|0;J=P+28|0;k[J>>2]=0;k[P+32>>2]=0;k[P+24>>2]=J;k[L>>2]=38268;k[P+36>>2]=N;i[P+40>>0]=0;k[P+44>>2]=0;k[P+48>>2]=0;N=e+4|0;k[e>>2]=L;k[N>>2]=P;i0a(P);k[K>>2]=L;L=k[M>>2]|0;k[M>>2]=P;if(L)k0a(L);x=0;fb(268,d|0,242071,e|0);e=x;x=0;if(e&1){e=Hc()|0;L=k[N>>2]|0;if(!L)Sc(e|0);j0a(L);Sc(e|0)}e=k[d>>2]|0;L=d+4|0;P=k[L>>2]|0;k[d>>2]=0;k[L>>2]=0;k[H>>2]=e;e=O+24|0;O=k[e>>2]|0;k[e>>2]=P;if(O)j0a(O);O=k[L>>2]|0;if(O)j0a(O);O=k[N>>2]|0;if(O)j0a(O)}O=k[h>>2]|0;do if(O){N=k[g>>2]|0;L=N;P=O;while(1){e=k[P+16>>2]|0;if(N>>>0>>0){H=k[P>>2]|0;if(!H){Q=P;R=P;t=46;break}else S=H}else{if(e>>>0>=N>>>0){T=P;t=52;break}e=P+4|0;H=k[e>>2]|0;if(!H){U=e;V=P;t=50;break}else S=H}P=S}if((t|0)==46){k[c>>2]=R;W=Q;X=L;Y=R;break}else if((t|0)==50){k[c>>2]=V;W=U;X=L;Y=V;break}else if((t|0)==52){k[c>>2]=T;if(!T){W=c;X=L;Y=T;break}else Z=T;_=Z+20|0;$=k[_>>2]|0;r=b;return $|0}}else{k[c>>2]=h;W=h;X=k[g>>2]|0;Y=h}while(0);h=KBa(28)|0;k[h+16>>2]=X;k[h+20>>2]=0;k[h+24>>2]=0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=Y;k[W>>2]=h;Y=k[k[f>>2]>>2]|0;if(!Y)aa=h;else{k[f>>2]=Y;aa=k[W>>2]|0}ui(k[a+20>>2]|0,aa);aa=a+24|0;k[aa>>2]=(k[aa>>2]|0)+1;Z=h;_=Z+20|0;$=k[_>>2]|0;r=b;return $|0}function WZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;f=a+28|0;g=a+12|0;h=a+32|0;j=k[h>>2]|0;do if(j){l=k[g>>2]|0;m=l;n=j;while(1){o=k[n+16>>2]|0;if(l>>>0>>0){p=k[n>>2]|0;if(!p){q=n;s=n;t=5;break}else u=p}else{if(o>>>0>=l>>>0){v=n;t=11;break}o=n+4|0;p=k[o>>2]|0;if(!p){w=o;y=n;t=9;break}else u=p}n=u}if((t|0)==5){k[c>>2]=s;z=q;A=m;B=s;t=12;break}else if((t|0)==9){k[c>>2]=y;z=w;A=m;B=y;t=12;break}else if((t|0)==11){k[c>>2]=v;if(!v){z=c;A=m;B=v;t=12;break}else{C=v;break}}}else{k[c>>2]=h;z=h;A=k[g>>2]|0;B=h;t=12}while(0);if((t|0)==12){v=KBa(28)|0;k[v+16>>2]=A;k[v+20>>2]=0;k[v+24>>2]=0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=B;k[z>>2]=v;B=k[k[f>>2]>>2]|0;if(!B)D=v;else{k[f>>2]=B;D=k[z>>2]|0}ui(k[a+32>>2]|0,D);D=a+36|0;k[D>>2]=(k[D>>2]|0)+1;C=v}if(!(k[C+20>>2]|0)){C=k[h>>2]|0;do if(C){v=k[g>>2]|0;D=v;z=C;while(1){B=k[z+16>>2]|0;if(v>>>0>>0){A=k[z>>2]|0;if(!A){E=z;F=z;t=20;break}else G=A}else{if(B>>>0>=v>>>0){H=z;t=26;break}B=z+4|0;A=k[B>>2]|0;if(!A){I=B;J=z;t=24;break}else G=A}z=G}if((t|0)==20){k[c>>2]=F;K=E;L=D;M=F;t=27;break}else if((t|0)==24){k[c>>2]=J;K=I;L=D;M=J;t=27;break}else if((t|0)==26){k[c>>2]=H;if(!H){K=c;L=D;M=H;t=27;break}else{N=D;O=H;break}}}else{k[c>>2]=h;K=h;L=k[g>>2]|0;M=h;t=27}while(0);if((t|0)==27){H=KBa(28)|0;k[H+16>>2]=L;k[H+20>>2]=0;k[H+24>>2]=0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=M;k[K>>2]=H;M=k[k[f>>2]>>2]|0;if(!M)P=H;else{k[f>>2]=M;P=k[K>>2]|0}ui(k[a+32>>2]|0,P);P=a+36|0;k[P>>2]=(k[P>>2]|0)+1;N=k[g>>2]|0;O=H}H=O+20|0;P=KBa(52)|0;k[P+4>>2]=0;k[P+8>>2]=0;k[P>>2]=33132;K=P+16|0;k[K>>2]=0;M=P+20|0;k[M>>2]=0;L=P+12|0;J=P+28|0;k[J>>2]=0;k[P+32>>2]=0;k[P+24>>2]=J;k[L>>2]=38268;k[P+36>>2]=N;i[P+40>>0]=1;k[P+44>>2]=0;k[P+48>>2]=0;N=e+4|0;k[e>>2]=L;k[N>>2]=P;i0a(P);k[K>>2]=L;L=k[M>>2]|0;k[M>>2]=P;if(L)k0a(L);x=0;fb(269,d|0,242076,e|0);e=x;x=0;if(e&1){e=Hc()|0;L=k[N>>2]|0;if(!L)Sc(e|0);j0a(L);Sc(e|0)}e=k[d>>2]|0;L=d+4|0;P=k[L>>2]|0;k[d>>2]=0;k[L>>2]=0;k[H>>2]=e;e=O+24|0;O=k[e>>2]|0;k[e>>2]=P;if(O)j0a(O);O=k[L>>2]|0;if(O)j0a(O);O=k[N>>2]|0;if(O)j0a(O)}O=k[h>>2]|0;do if(O){N=k[g>>2]|0;L=N;P=O;while(1){e=k[P+16>>2]|0;if(N>>>0>>0){H=k[P>>2]|0;if(!H){Q=P;R=P;t=46;break}else S=H}else{if(e>>>0>=N>>>0){T=P;t=52;break}e=P+4|0;H=k[e>>2]|0;if(!H){U=e;V=P;t=50;break}else S=H}P=S}if((t|0)==46){k[c>>2]=R;W=Q;X=L;Y=R;break}else if((t|0)==50){k[c>>2]=V;W=U;X=L;Y=V;break}else if((t|0)==52){k[c>>2]=T;if(!T){W=c;X=L;Y=T;break}else Z=T;_=Z+20|0;$=k[_>>2]|0;r=b;return $|0}}else{k[c>>2]=h;W=h;X=k[g>>2]|0;Y=h}while(0);h=KBa(28)|0;k[h+16>>2]=X;k[h+20>>2]=0;k[h+24>>2]=0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=Y;k[W>>2]=h;Y=k[k[f>>2]>>2]|0;if(!Y)aa=h;else{k[f>>2]=Y;aa=k[W>>2]|0}ui(k[a+32>>2]|0,aa);aa=a+36|0;k[aa>>2]=(k[aa>>2]|0)+1;Z=h;_=Z+20|0;$=k[_>>2]|0;r=b;return $|0}function XZ(){k[8354]=0;k[8355]=0;k[8356]=0;return}function YZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function ZZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function _Z(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function $Z(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function a_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;h=r;r=r+48|0;i=h+36|0;j=h+24|0;l=h+12|0;m=h;oaa(i,b);x=0;xa(768,j|0,c|0);c=x;x=0;do if(c&1){b=Hc()|0;n=M;o=b}else{k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;Na(42,a|0,i|0,j|0,l|0,m|0,d|0,e|0,0,f|0,g|0,0,0,0);b=x;x=0;if(b&1){b=Hc()|0;p=M;q=k[j>>2]|0;if(!q){n=p;o=b;break}s=j+4|0;t=k[s>>2]|0;if((t|0)==(q|0))u=q;else{v=t;while(1){t=v+-8|0;k[s>>2]=t;w=k[v+-4>>2]|0;if(!w)y=t;else{j0a(w);y=k[s>>2]|0}if((y|0)==(q|0))break;else v=y}u=k[j>>2]|0}OBa(u);n=p;o=b;break}v=k[j>>2]|0;if(v){q=j+4|0;s=k[q>>2]|0;if((s|0)==(v|0))z=v;else{w=s;while(1){s=w+-8|0;k[q>>2]=s;t=k[w+-4>>2]|0;if(!t)A=s;else{j0a(t);A=k[q>>2]|0}if((A|0)==(v|0))break;else w=A}z=k[j>>2]|0}OBa(z)}w=k[i>>2]|0;if(!w){r=h;return}v=i+4|0;q=k[v>>2]|0;if((q|0)==(w|0))B=w;else{b=q;while(1){q=b+-8|0;k[v>>2]=q;p=k[b+-4>>2]|0;if(!p)C=q;else{j0a(p);C=k[v>>2]|0}if((C|0)==(w|0))break;else b=C}B=k[i>>2]|0}OBa(B);r=h;return}while(0);h=k[i>>2]|0;if(!h)Sc(o|0);B=i+4|0;C=k[B>>2]|0;if((C|0)==(h|0))D=h;else{z=C;while(1){C=z+-8|0;k[B>>2]=C;j=k[z+-4>>2]|0;if(!j)E=C;else{j0a(j);E=k[B>>2]|0}if((E|0)==(h|0))break;else z=E}D=k[i>>2]|0}OBa(D);Sc(o|0)}function b_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function c_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function d_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function e_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function f_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function g_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function h_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function i_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+8|0;f=d;g=KBa(60)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33272;h=RLa(b)|0;x=0;fb(140,e|0,b|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;c0a(g);OBa(g);Sc(j|0)}h=g+12|0;k[f>>2]=k[c>>2];b=c+4|0;l=k[b>>2]|0;k[f+4>>2]=l;k[c>>2]=0;k[b>>2]=0;b=l;x=0;fb(270,h|0,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(l)j0a(b);K2a(e);i=c;j=f;c0a(g);OBa(g);Sc(j|0)}else{if(!l){K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}j0a(b);K2a(e);m=a+4|0;k[a>>2]=h;k[m>>2]=g;r=d;return}}function j_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d;k[e>>2]=-1;k[e+4>>2]=-1;k[e+8>>2]=0;f=e+12|0;k[f>>2]=0;x=0;g=Ba(563,24)|0;h=x;x=0;do if(h&1){i=Hc()|0;j=M;l=i}else{k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=33300;i=g+12|0;x=0;xa(604,i|0,b|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;c0a(g);OBa(g);j=n;l=m;break}x=0;xa(769,a|0,e|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;j0a(g);o=k[f>>2]|0;if(!o){p=m;q=n;Sc(p|0)}j0a(o);p=m;q=n;Sc(p|0)}k[a>>2]=33328;k[a+24>>2]=i;k[a+28>>2]=g;h0a(g);k[a+32>>2]=0;k[a+36>>2]=0;j0a(g);i=k[f>>2]|0;if(i)j0a(i);k[a>>2]=33376;k[a+40>>2]=k[c>>2];i=k[c+4>>2]|0;k[a+44>>2]=i;if(!i){r=d;return}h0a(i);r=d;return}while(0);p=l;q=j;Sc(p|0)}function k_(a){a=a|0;var b=0;k[a>>2]=33376;b=k[a+44>>2]|0;if(b)j0a(b);k[a>>2]=33328;b=k[a+28>>2]|0;if(!b){$4(a);return}j0a(b);$4(a);return}function l_(a){a=a|0;var b=0;k[a>>2]=33376;b=k[a+44>>2]|0;if(b)j0a(b);k[a>>2]=33328;b=k[a+28>>2]|0;if(!b){$4(a);OBa(a);return}j0a(b);$4(a);OBa(a);return}function m_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+96|0;a=b+72|0;c=b+32|0;d=b+16|0;e=b;b=c;f=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(f|0));b=c+20|0;f=c+24|0;k[f>>2]=0;k[c+28>>2]=0;k[c+32>>2]=0;k[c+36>>2]=-1;g=c+4|0;h=g+-4|0;i=g+16|0;j=c+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;K2a(a);k[c+4>>2]=20924;k[c>>2]=20888;k[b>>2]=20948;x=0;fb(140,e|0,242082,46);a=x;x=0;if(a&1){a=Hc()|0;l=M;m=a}else{k[d>>2]=21048;a=d+4|0;x=0;xa(604,a|0,e|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,c|0,d|0)|0;c=x;x=0;if(!(c&1)){x=0;nb(87,n|0,242230,288536,756);x=0}n=Hc()|0;c=M;k[d>>2]=21048;K2a(a);o=c;p=n}K2a(e);l=o;m=p}k[g>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[f>>2]|0;if(!b)Sc(m|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(m|0);k[f>>2]=0;Sc(m|0)}function n_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+96|0;a=b+72|0;c=b+32|0;d=b+16|0;e=b;b=c;f=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(f|0));b=c+20|0;f=c+24|0;k[f>>2]=0;k[c+28>>2]=0;k[c+32>>2]=0;k[c+36>>2]=-1;g=c+4|0;h=g+-4|0;i=g+16|0;j=c+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;K2a(a);k[c+4>>2]=20924;k[c>>2]=20888;k[b>>2]=20948;x=0;fb(140,e|0,242082,46);a=x;x=0;if(a&1){a=Hc()|0;l=M;m=a}else{k[d>>2]=21048;a=d+4|0;x=0;xa(604,a|0,e|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,c|0,d|0)|0;c=x;x=0;if(!(c&1)){x=0;nb(87,n|0,242129,288536,760);x=0}n=Hc()|0;c=M;k[d>>2]=21048;K2a(a);o=c;p=n}K2a(e);l=o;m=p}k[g>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[f>>2]|0;if(!b)Sc(m|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(m|0);k[f>>2]=0;Sc(m|0)}function o_(a){a=a|0;var b=0,c=0,d=0;b=k[a+32>>2]|0;if(b){c=b;d=(c|0)!=4;return d|0}c=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;d=(c|0)!=4;return d|0}function p_(a){a=a|0;return 0}function q_(a){a=a|0;return 0}function r_(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b+40>>2];c=k[b+44>>2]|0;k[a+4>>2]=c;if(!c)return;h0a(c);return}function s_(a){a=a|0;return 3}function t_(a){a=a|0;var b=0;k[a>>2]=33328;b=k[a+28>>2]|0;if(b)j0a(b);$4(a);return}function u_(a){a=a|0;var b=0;k[a>>2]=33328;b=k[a+28>>2]|0;if(b)j0a(b);$4(a);OBa(a);return}function v_(a){a=a|0;k[a>>2]=33300;K2a(a+12|0);c0a(a);return}function w_(a){a=a|0;k[a>>2]=33300;K2a(a+12|0);c0a(a);OBa(a);return}function x_(a){a=a|0;K2a(a+12|0);return}function y_(a){a=a|0;OBa(a);return}function z_(a){a=a|0;var b=0,c=0;k[a>>2]=33272;b=a+12|0;k[b>>2]=33376;c=k[a+56>>2]|0;if(c)j0a(c);k[b>>2]=33328;c=k[a+40>>2]|0;if(!c){$4(b);c0a(a);return}j0a(c);$4(b);c0a(a);return}function A_(a){a=a|0;var b=0,c=0;k[a>>2]=33272;b=a+12|0;k[b>>2]=33376;c=k[a+56>>2]|0;if(c)j0a(c);k[b>>2]=33328;c=k[a+40>>2]|0;if(c)j0a(c);$4(b);c0a(a);OBa(a);return}function B_(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function C_(a){a=a|0;OBa(a);return}function D_(a){a=a|0;var b=0;k[a>>2]=33244;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function E_(a){a=a|0;var b=0;k[a>>2]=33244;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function F_(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function G_(a){a=a|0;OBa(a);return}function H_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;g=a+12|0;h=a+24|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;k[g+20>>2]=0;j=i[b>>0]|0;l=(j&1)==0;m=l?b+1|0:k[b+8>>2]|0;n=l?(j&255)>>>1:k[b+4>>2]|0;b=m+n|0;a:do if(n){j=m;l=0;while(1){o=i[j>>0]|0;if((o+-48&255)>=10){p=j;q=l;break}s=(l*10|0)+-48+(o<<24>>24)|0;j=j+1|0;if((j|0)==(b|0)){t=s;u=4;break a}else l=s}k[a>>2]=q;if((p|0)!=(b|0)?(i[p>>0]|0)==46:0){l=p+1|0;b:do if((l|0)==(b|0))v=0;else{j=l;s=p;o=0;while(1){w=i[j>>0]|0;if((w+-48&255)>=10){y=s;z=j;A=o;break}B=(o*10|0)+-48+(w<<24>>24)|0;w=j+1|0;if((w|0)==(b|0)){v=B;break b}else{C=j;j=w;o=B;s=C}}k[a+4>>2]=A;if((z|0)==(b|0))break a;if((i[z>>0]|0)!=46)break a;s=y+2|0;o=s;c:do if((s|0)==(b|0)){D=o;E=0}else{j=s;C=o;B=0;while(1){w=i[j>>0]|0;if((w+-48&255)>=10){D=C;E=B;break c}F=(B*10|0)+-48+(w<<24>>24)|0;j=j+1|0;w=j;if((j|0)==(b|0)){D=w;E=F;break}else{C=w;B=F}}}while(0);k[a+8>>2]=E;o=D;do if((o|0)!=(b|0)?(i[o>>0]|0)==45:0){s=o+1|0;B=s;d:do if((s|0)==(b|0)){G=B;H=b}else{C=B;j=s;while(1){if((i[j>>0]|0)==43){G=C;H=j;break d}j=j+1|0;F=j;if((j|0)==(b|0)){G=F;H=b;break}else C=F}}while(0);C=G-B|0;if(C>>>0>4294967279){x=0;va(1471,e|0);j=x;x=0;if(j&1){I=Hc()|0;J=M;K2a(h);K2a(g);Sc(I|0)}else u=17}else if(C>>>0<11){i[e>>0]=C<<1;K=e+1|0}else u=17;do if((u|0)==17){j=C+16&-16;x=0;F=Ba(563,j|0)|0;w=x;x=0;if(w&1){I=Hc()|0;J=M;K2a(h);K2a(g);Sc(I|0)}else{k[e+8>>2]=F;k[e>>2]=j|1;k[e+4>>2]=C;K=F;break}}while(0);if((s|0)==(H|0))L=K;else{C=s;F=B;j=K;while(1){i[j>>0]=i[C>>0]|0;w=F+1|0;N=j+1|0;if((w|0)==(H|0)){L=N;break}else{C=w;F=w;j=N}}}i[L>>0]=0;if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[a+20>>2]>>0]=0;k[a+16>>2]=0}x=0;xa(603,g|0,0);j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else{k[g>>2]=k[e>>2];k[g+4>>2]=k[e+4>>2];k[g+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);O=G;break}}else O=D;while(0);o=O;do if((o|0)!=(b|0)?(i[o>>0]|0)==43:0){j=o+1|0;F=j;C=(j|0)==(b|0);if(C)P=F;else{B=j;do B=B+1|0;while((B|0)!=(b|0));P=b}B=P-F|0;if(B>>>0>4294967279){x=0;va(1471,f|0);s=x;x=0;if(s&1){I=Hc()|0;J=M;K2a(h);K2a(g);Sc(I|0)}else u=36}else if(B>>>0<11){i[f>>0]=B<<1;Q=f+1|0}else u=36;do if((u|0)==36){s=B+16&-16;x=0;N=Ba(563,s|0)|0;w=x;x=0;if(w&1){I=Hc()|0;J=M;K2a(h);K2a(g);Sc(I|0)}else{k[f+8>>2]=N;k[f>>2]=s|1;k[f+4>>2]=B;Q=N;break}}while(0);if(C)R=Q;else{B=j;N=F;s=Q;while(1){i[s>>0]=i[B>>0]|0;w=N+1|0;S=s+1|0;if((w|0)==(b|0)){R=S;break}else{B=w;N=w;s=S}}}i[R>>0]=0;if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[a+32>>2]>>0]=0;k[a+28>>2]=0}x=0;xa(603,h|0,0);s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}else{k[h>>2]=k[f>>2];k[h+4>>2]=k[f+4>>2];k[h+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);T=P;break}}else T=O;while(0);if((T|0)==(b|0)){r=c;return}o=Rd(36)|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[o+20>>2]=0;k[o+24>>2]=0;k[o+28>>2]=0;s=o+16|0;k[o+20>>2]=0;k[o+24>>2]=0;k[o+28>>2]=0;k[o+32>>2]=-1;k[o>>2]=33452;k[s>>2]=33476;N=o+4|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[o>>2]=33508;k[s>>2]=33532;x=0;fb(149,o|0,5072,749);x=0;I=Hc()|0;J=M;K2a(h);K2a(g);Sc(I|0)}while(0);k[a+4>>2]=v}}else{t=0;u=4}while(0);if((u|0)==4)k[a>>2]=t;t=Rd(36)|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;k[t+20>>2]=0;k[t+24>>2]=0;k[t+28>>2]=0;a=t+16|0;k[t+20>>2]=0;k[t+24>>2]=0;k[t+28>>2]=0;k[t+32>>2]=-1;k[t>>2]=33452;k[a>>2]=33476;u=t+4|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[t>>2]=33508;k[a>>2]=33532;x=0;fb(149,t|0,5072,749);x=0;I=Hc()|0;J=M;K2a(h);K2a(g);Sc(I|0)}function I_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+112|0;d=c+56|0;e=c+12|0;f=c;g=k[a>>2]|0;switch(g|0){case 46:{k[d>>2]=46;h=d+4|0;j=a+4|0;k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];j=d+16|0;n2a(j,a+16|0);h=d+28|0;x=0;xa(604,h|0,a+28|0);l=x;x=0;if(l&1){l=Hc()|0;K2a(j);Sc(l|0)}l=d+40|0;m=a+40|0;k[l>>2]=k[m>>2];k[d>>2]=44;x=0;n=Ta(574,d|0,b|0)|0;o=x;x=0;do if(!(o&1)){if(n){k[l>>2]=(k[m>>2]|0)>>>0>1?2:1;k[d>>2]=43;x=0;p=Ta(574,d|0,b|0)|0;q=x;x=0;if(q&1)break;else s=p}else s=0;K2a(h);K2a(j);t=s;r=c;return t|0}while(0);s=Hc()|0;d=M;K2a(h);K2a(j);u=d;v=s;Sc(v|0);break}case 28:{k[e>>2]=28;s=e+4|0;d=a+4|0;k[s>>2]=k[d>>2];k[s+4>>2]=k[d+4>>2];k[s+8>>2]=k[d+8>>2];d=e+16|0;n2a(d,a+16|0);s=e+28|0;x=0;xa(604,s|0,a+28|0);j=x;x=0;if(j&1){j=Hc()|0;K2a(d);Sc(j|0)}j=e+40|0;k[j>>2]=k[a+40>>2];k[e>>2]=44;x=0;h=Ta(574,e|0,b|0)|0;m=x;x=0;do if(!(m&1)){if(h){k[j>>2]=(k[e+4>>2]|0)==0?2:1;k[e>>2]=43;x=0;l=Ta(574,e|0,b|0)|0;n=x;x=0;if(n&1)break;else w=l}else w=0;K2a(s);K2a(d);t=w;r=c;return t|0}while(0);w=Hc()|0;e=M;K2a(s);K2a(d);u=e;v=w;Sc(v|0);break}default:{w=k[a+40>>2]|0;if(w){e=0;d=0;while(1){s=k[a+4+(d<<2)>>2]|0;if((s|0)==-1){y=0;z=e}else{y=(k[b+(d<<2)>>2]|0)-s|0;z=1}d=d+1|0;A=(y|0)==0;if(!(A&d>>>0>>0))break;else e=z}if(A){B=z;C=21}else D=y}else{B=0;C=21}if((C|0)==21){C=i[b+12>>0]|0;D=(((C&1)==0?(C&255)>>>1:k[b+16>>2]|0)|0)==0?0:B<<31>>31}switch(g|0){case 12:{t=(D|0)==0;r=c;return t|0}case 41:{t=(D|0)<0;r=c;return t|0}case 43:{t=(D|0)<1;r=c;return t|0}case 42:{t=(D|0)>0;r=c;return t|0}case 44:{t=(D|0)>-1;r=c;return t|0}default:{q2a(f,242633,25);x=0;pa(57,0,f|0,120,242659,242703);D=x;x=0;if(D&1){D=Hc()|0;g=M;K2a(f);u=g;v=D;Sc(v|0)}else{K2a(f);t=0;r=c;return t|0}}}}}return 0}function J_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;d=k[a+4>>2]|0;if((c|0)==(d|0)){e=1;return e|0}else f=c;while(1){if(!(I_(f,b)|0)){e=0;g=4;break}f=f+44|0;if((f|0)==(d|0)){e=1;g=4;break}}if((g|0)==4)return e|0;return 0}function K_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=k[a>>2]|0;d=k[a+4>>2]|0;if((c|0)==(d|0)){e=0;return e|0}else f=c;a:while(1){c=k[f>>2]|0;a=k[f+4>>2]|0;if((c|0)==(a|0)){e=1;g=6;break}else h=c;while(1){if(!(I_(h,b)|0))break;h=h+44|0;if((h|0)==(a|0)){e=1;g=6;break a}}f=f+12|0;if((f|0)==(d|0)){e=0;g=6;break}}if((g|0)==6)return e|0;return 0}function L_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c;M_(b);e=b+24|0;f=b+4|0;g=b+28|0;while(1){x=0;va(1500,b|0);h=x;x=0;if(h&1){i=6;break}h=k[e>>2]|0;j=k[b>>2]|0;if(h>>>0>=(k[f>>2]|0)-j>>2>>>0){i=9;break}if((k[j+(h<<2)>>2]|0)!=25){i=5;break}k[e>>2]=h+1;k[g>>2]=0}if((i|0)==5){g=Rd(36)|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;k[g+20>>2]=0;k[g+24>>2]=0;k[g+28>>2]=0;e=g+16|0;k[g+20>>2]=0;k[g+24>>2]=0;k[g+28>>2]=0;k[g+32>>2]=-1;k[g>>2]=33452;k[e>>2]=33476;f=g+4|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[g>>2]=33508;k[e>>2]=33532;x=0;fb(149,g|0,5072,749);x=0;g=Hc(5072)|0;l=g;m=M}else if((i|0)==6){g=Hc(5072)|0;l=g;m=M}else if((i|0)==9){n=b+32|0;W_(a,n);r=c;return}if((m|0)!=(hf(5072)|0))Sc(l|0);me(l|0)|0;M_(b);ge();n=b+32|0;W_(a,n);r=c;return}function M_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=a+32|0;c=k[b>>2]|0;if(!c){d=a+36|0;e=a+40|0;k[b>>2]=0;k[d>>2]=0;k[e>>2]=0;f=a+24|0;k[f>>2]=0;g=a+28|0;k[g>>2]=0;return}h=a+36|0;i=k[h>>2]|0;if((i|0)==(c|0))j=c;else{l=i;while(1){i=l+-12|0;k[h>>2]=i;m=k[i>>2]|0;if(!m)n=i;else{o=l+-8|0;p=k[o>>2]|0;if((p|0)==(m|0))q=m;else{r=p;do{k[o>>2]=r+-44;K2a(r+-16|0);K2a(r+-28|0);r=k[o>>2]|0}while((r|0)!=(m|0));q=k[i>>2]|0}OBa(q);n=k[h>>2]|0}if((n|0)==(c|0))break;else l=n}j=k[b>>2]|0}OBa(j);j=a+40|0;k[j>>2]=0;k[h>>2]=0;k[b>>2]=0;d=h;e=j;k[b>>2]=0;k[d>>2]=0;k[e>>2]=0;f=a+24|0;k[f>>2]=0;g=a+28|0;k[g>>2]=0;return}function N_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;b=r;r=r+144|0;c=b+132|0;d=b+88|0;e=b+44|0;f=b;k[c>>2]=0;g=c+4|0;k[g>>2]=0;k[c+8>>2]=0;x=0;xa(770,d|0,a|0);h=x;x=0;a:do if(h&1)i=13;else{j=c+8|0;x=0;xa(771,c|0,d|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;K2a(d+28|0);K2a(d+16|0);n=m;o=l;break}K2a(d+28|0);K2a(d+16|0);l=a+24|0;m=k[l>>2]|0;p=a+4|0;q=k[p>>2]|0;s=k[a>>2]|0;if(m>>>0>2>>>0?(k[s+(m<<2)>>2]|0)==34:0){k[k[c>>2]>>2]=44;k[l>>2]=m+1;k[a+28>>2]=0;x=0;xa(770,e|0,a|0);t=x;x=0;if(t&1){i=13;break}t=k[g>>2]|0;do if(t>>>0>=(k[j>>2]|0)>>>0){x=0;xa(771,c|0,e|0);u=x;x=0;if(u&1){u=Hc()|0;v=M;K2a(e+28|0);K2a(e+16|0);n=v;o=u;break a}else{w=e+28|0;y=e+16|0;break}}else{k[t>>2]=k[e>>2];u=t+4|0;v=e+4|0;k[u>>2]=k[v>>2];k[u+4>>2]=k[v+4>>2];k[u+8>>2]=k[v+8>>2];v=t+16|0;u=e+16|0;k[v>>2]=k[u>>2];k[v+4>>2]=k[u+4>>2];k[v+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;v=t+28|0;z=e+28|0;k[v>>2]=k[z>>2];k[v+4>>2]=k[z+4>>2];k[v+8>>2]=k[z+8>>2];k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[t+40>>2]=k[e+40>>2];k[g>>2]=(k[g>>2]|0)+44;w=z;y=u}while(0);K2a(w);K2a(y);k[(k[c>>2]|0)+44>>2]=43}else i=4;b:do if((i|0)==4?(t=f+4|0,u=f+16|0,z=f+28|0,v=f+40|0,m>>>0>2>>>0):0){A=s;B=m;while(1){if((k[A+(B<<2)>>2]|0)==25)break b;if((k[A+(B<<2)>>2]|0)==139)break b;x=0;xa(770,f|0,a|0);C=x;x=0;if(C&1){i=12;break}C=k[g>>2]|0;if(C>>>0>=(k[j>>2]|0)>>>0){x=0;xa(771,c|0,f|0);D=x;x=0;if(D&1){i=24;break}}else{k[C>>2]=k[f>>2];D=C+4|0;k[D>>2]=k[t>>2];k[D+4>>2]=k[t+4>>2];k[D+8>>2]=k[t+8>>2];D=C+16|0;k[D>>2]=k[u>>2];k[D+4>>2]=k[u+4>>2];k[D+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;D=C+28|0;k[D>>2]=k[z>>2];k[D+4>>2]=k[z+4>>2];k[D+8>>2]=k[z+8>>2];k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[C+40>>2]=k[v>>2];k[g>>2]=(k[g>>2]|0)+44}K2a(z);K2a(u);B=k[l>>2]|0;A=k[a>>2]|0;if(B>>>0>=(k[p>>2]|0)-A>>2>>>0)break b}if((i|0)==12){A=Hc()|0;E=A;F=M;i=14;break a}else if((i|0)==24){A=Hc()|0;B=M;K2a(z);K2a(u);n=B;o=A;break a}}while(0);p=a+36|0;l=k[p>>2]|0;if((l|0)==(k[a+40>>2]|0)){x=0;xa(773,a+32|0,c|0);j=x;x=0;if(j&1){i=13;break}}else{x=0;xa(772,l|0,c|0);l=x;x=0;if(l&1){i=13;break}k[p>>2]=(k[p>>2]|0)+12}p=k[c>>2]|0;if(!p){r=b;return}l=k[g>>2]|0;if((l|0)==(p|0))G=p;else{j=l;do{k[g>>2]=j+-44;K2a(j+-16|0);K2a(j+-28|0);j=k[g>>2]|0}while((j|0)!=(p|0));G=k[c>>2]|0}OBa(G);r=b;return}while(0);if((i|0)==13){b=Hc()|0;E=b;F=M;i=14}if((i|0)==14){n=F;o=E}E=k[c>>2]|0;if(!E)Sc(o|0);F=k[g>>2]|0;if((F|0)==(E|0))H=E;else{n=F;do{k[g>>2]=n+-44;K2a(n+-16|0);K2a(n+-28|0);n=k[g>>2]|0}while((n|0)!=(E|0));H=k[c>>2]|0}OBa(H);Sc(o|0)}function O_(a){a=a|0;var b=0,c=0,d=0;b=k[a+24>>2]|0;c=k[a>>2]|0;if(b>>>0>=(k[a+4>>2]|0)-c>>2>>>0){d=139;return d|0}d=k[c+(b<<2)>>2]|0;return d|0}function P_(a){a=a|0;var b=0;b=a+24|0;k[b>>2]=(k[b>>2]|0)+1;k[a+28>>2]=0;return}function Q_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+16|0;d=c;k[a>>2]=139;q2a(d,242814,5);x=0;xa(774,a+4|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}K2a(d);d=a+40|0;k[d>>2]=1;e=b+24|0;f=k[e>>2]|0;g=k[b>>2]|0;a:do if(f>>>0<(k[b+4>>2]|0)-g>>2>>>0){h=k[g+(f<<2)>>2]|0;switch(h|0){case 12:case 28:case 41:case 42:case 43:case 44:case 46:break;default:{j=7;break a}}k[a>>2]=h;k[e>>2]=f+1;h=b+28|0;k[h>>2]=0;l=h}else j=7;while(0);if((j|0)==7){k[a>>2]=12;l=b+28|0}k[d>>2]=0;f=b+12|0;g=b+16|0;while(1){x=0;h=Ba(603,b|0)|0;m=x;x=0;if(m&1){j=6;break}k[a+4+(k[d>>2]<<2)>>2]=h;h=(k[d>>2]|0)+1|0;k[d>>2]=h;m=k[e>>2]|0;n=k[f>>2]|0;o=n;if(m>>>0>=(((k[g>>2]|0)-n|0)/12|0)>>>0){j=25;break}n=k[l>>2]|0;p=o+(m*12|0)|0;q=i[p>>0]|0;s=(q&1)==0;if(s)t=(q&255)>>>1;else t=k[o+(m*12|0)+4>>2]|0;if(n>>>0>=t>>>0){j=25;break}if(s)u=p+1|0;else u=k[o+(m*12|0)+8>>2]|0;if((i[u+n>>0]|0)!=46){j=25;break}p=n+1|0;if(s)v=(q&255)>>>1;else v=k[o+(m*12|0)+4>>2]|0;if(p>>>0>>0)w=p;else{k[e>>2]=m+1;w=0}k[l>>2]=w;if(h>>>0>=3){j=25;break}}if((j|0)==6){w=Hc()|0;K2a(a+28|0);K2a(a+16|0);Sc(w|0)}else if((j|0)==25){r=c;return}}function R_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;b=r;r=r+16|0;c=b;d=a+24|0;e=k[d>>2]|0;f=k[a+12>>2]|0;g=e>>>0<(((k[a+16>>2]|0)-f|0)/12|0)>>>0;h=f;if(!g){j=Rd(36)|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[j+20>>2]=0;k[j+24>>2]=0;k[j+28>>2]=0;l=j+16|0;m=j+20|0;k[m>>2]=0;n=j+24|0;k[n>>2]=0;o=j+28|0;k[o>>2]=0;p=j+32|0;k[p>>2]=-1;k[j>>2]=33452;k[l>>2]=33476;q=j+4|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;K2a(c);k[j>>2]=33508;k[l>>2]=33532;Gf(j|0,5072,749)}f=k[a+28>>2]|0;s=h+(e*12|0)|0;t=i[s>>0]|0;u=(t&1)==0;if(u)v=(t&255)>>>1;else v=k[h+(e*12|0)+4>>2]|0;if(f>>>0>>0){if(u)w=s+1|0;else w=k[h+(e*12|0)+8>>2]|0;x=i[w+f>>0]|0}else x=-1;f=a+28|0;w=(k[f>>2]|0)+1|0;s=i[h+(e*12|0)>>0]|0;if(!(s&1))y=(s&255)>>>1;else y=k[h+(e*12|0)+4>>2]|0;if(w>>>0>>0){z=e;A=w}else{w=e+1|0;k[d>>2]=w;z=w;A=0}k[f>>2]=A;switch(x<<24>>24){case 48:{B=0;r=b;return B|0}case 42:case 88:case 120:{B=-1;r=b;return B|0}default:{if((x+-49&255)>=9){j=Rd(36)|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[j+20>>2]=0;k[j+24>>2]=0;k[j+28>>2]=0;l=j+16|0;m=j+20|0;k[m>>2]=0;n=j+24|0;k[n>>2]=0;o=j+28|0;k[o>>2]=0;p=j+32|0;k[p>>2]=-1;k[j>>2]=33452;k[l>>2]=33476;q=j+4|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;K2a(c);k[j>>2]=33508;k[l>>2]=33532;Gf(j|0,5072,749)}j=(x<<24>>24)+-48|0;if((z|0)!=(e|0)){B=j;r=b;return B|0}z=a+28|0;a=h+(e*12|0)|0;x=a+1|0;l=a+1|0;q=h+(e*12|0)+8|0;p=a+1|0;o=h+(e*12|0)+8|0;n=e+1|0;m=h+(e*12|0)+4|0;A=h+(e*12|0)+4|0;f=h+(e*12|0)+4|0;w=h+(e*12|0)+8|0;y=h+(e*12|0)+4|0;if(g)C=j;else{B=j;r=b;return B|0}while(1){j=k[z>>2]|0;e=i[a>>0]|0;h=(e&1)==0;if(h)D=(e&255)>>>1;else D=k[y>>2]|0;if(j>>>0>=D>>>0){B=C;E=51;break}if(h)F=x;else F=k[w>>2]|0;if((i[F+j>>0]|0)<=47){B=C;E=51;break}if(h)G=(e&255)>>>1;else G=k[f>>2]|0;if(j>>>0>>0){if(h)H=l;else H=k[q>>2]|0;if((i[H+j>>0]|0)>=58){B=C;E=51;break}}if(h)I=(e&255)>>>1;else I=k[A>>2]|0;if(j>>>0>>0){if(h)J=p;else J=k[o>>2]|0;K=i[J+j>>0]|0}else K=-1;s=C*10|0;if(s>>>0>>0){E=43;break}u=K<<24>>24;if((s+-48+u|0)>>>0>>0){E=43;break}v=u+s|0;s=j+1|0;if(h)L=(e&255)>>>1;else L=k[m>>2]|0;if(s>>>0>=L>>>0){M=v;E=49;break}k[z>>2]=s;s=v+-48|0;if(g)C=s;else{B=s;E=51;break}}if((E|0)==43){C=Rd(36)|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[C+16>>2]=0;k[C+20>>2]=0;k[C+24>>2]=0;k[C+28>>2]=0;g=C+16|0;k[C+20>>2]=0;k[C+24>>2]=0;k[C+28>>2]=0;k[C+32>>2]=-1;k[C>>2]=33452;k[g>>2]=33476;L=C+4|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;K2a(c);k[C>>2]=33508;k[g>>2]=33532;Gf(C|0,5072,749)}else if((E|0)==49){k[d>>2]=n;k[z>>2]=0;B=M+-48|0;r=b;return B|0}else if((E|0)==51){r=b;return B|0}}}return 0}function S_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0;b=k[a+24>>2]|0;c=k[a+12>>2]|0;d=c;if(b>>>0>=(((k[a+16>>2]|0)-c|0)/12|0)>>>0){e=-1;return e|0}c=k[a+28>>2]|0;a=d+(b*12|0)|0;f=i[a>>0]|0;g=(f&1)==0;if(g)h=(f&255)>>>1;else h=k[d+(b*12|0)+4>>2]|0;if(c>>>0>=h>>>0){e=-1;return e|0}if(g)j=a+1|0;else j=k[d+(b*12|0)+8>>2]|0;e=i[j+c>>0]|0;return e|0}function T_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=a+24|0;c=k[b>>2]|0;d=k[a+12>>2]|0;e=((k[a+16>>2]|0)-d|0)/12|0;f=d;do if(c>>>0>>0){d=a+28|0;g=(k[d>>2]|0)+1|0;h=i[f+(c*12|0)>>0]|0;if(!(h&1))j=(h&255)>>>1;else j=k[f+(c*12|0)+4>>2]|0;if(g>>>0>>0){k[d>>2]=g;l=c;break}else{g=c+1|0;k[b>>2]=g;k[d>>2]=0;l=g;break}}else l=c;while(0);if(l>>>0>=e>>>0){m=-1;return m|0}e=k[a+28>>2]|0;a=f+(l*12|0)|0;c=i[a>>0]|0;b=(c&1)==0;if(b)n=(c&255)>>>1;else n=k[f+(l*12|0)+4>>2]|0;if(e>>>0>=n>>>0){m=-1;return m|0}if(b)o=a+1|0;else o=k[f+(l*12|0)+8>>2]|0;m=i[o+e>>0]|0;return m|0}function U_(){k[8385]=0;k[8386]=0;k[8387]=0;return}function V_(a){a=a|0;var b=0,c=0;k[a>>2]=33452;k[a+16>>2]=33476;K2a(a+4|0);k[a+16>>2]=20796;b=a+20|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function W_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=k[d>>2]|0;f=k[b>>2]|0;g=e-f|0;h=(g|0)/12|0;if((e|0)==(f|0))return;if(h>>>0>357913941?(x=0,va(1473,a|0),f=x,x=0,f&1):0)i=10;else i=4;do if((i|0)==4){x=0;f=Ba(563,g|0)|0;e=x;x=0;if(!(e&1)){k[c>>2]=f;k[a>>2]=f;k[a+8>>2]=f+(h*12|0);e=k[b>>2]|0;j=k[d>>2]|0;if((e|0)==(j|0))return;l=e;e=f;while(1){x=0;xa(772,e|0,l|0);f=x;x=0;if(f&1){i=9;break}e=(k[c>>2]|0)+12|0;k[c>>2]=e;l=l+12|0;if((l|0)==(j|0)){i=22;break}}if((i|0)==9){j=Hc()|0;m=j;n=M;break}else if((i|0)==22)return}else i=10}while(0);if((i|0)==10){i=Hc()|0;m=i;n=M}n=k[a>>2]|0;if(!n)Sc(m|0);i=k[c>>2]|0;if((i|0)==(n|0))o=n;else{d=i;while(1){i=d+-12|0;k[c>>2]=i;b=k[i>>2]|0;if(!b)p=i;else{h=d+-8|0;g=k[h>>2]|0;if((g|0)==(b|0))q=b;else{j=g;do{k[h>>2]=j+-44;K2a(j+-16|0);K2a(j+-28|0);j=k[h>>2]|0}while((j|0)!=(b|0));q=k[i>>2]|0}OBa(q);p=k[c>>2]|0}if((p|0)==(n|0))break;else d=p}o=k[a>>2]|0}OBa(o);Sc(m|0)}function X_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/44|0)+1|0;if(e>>>0>97612893){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/44|0;if(g>>>0<48806446){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/44|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=97612893;n=((k[c>>2]|0)-f|0)/44|0;o=6}if((o|0)==6){i=m;j=KBa(m*44|0)|0;l=n}n=j+(l*44|0)|0;m=n;o=j+(i*44|0)|0;k[n>>2]=k[b>>2];i=j+(l*44|0)+4|0;f=b+4|0;k[i>>2]=k[f>>2];k[i+4>>2]=k[f+4>>2];k[i+8>>2]=k[f+8>>2];f=j+(l*44|0)+16|0;i=b+16|0;k[f>>2]=k[i>>2];k[f+4>>2]=k[i+4>>2];k[f+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;i=j+(l*44|0)+28|0;f=b+28|0;k[i>>2]=k[f>>2];k[i+4>>2]=k[f+4>>2];k[i+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[j+(l*44|0)+40>>2]=k[b+40>>2];b=n+44|0;l=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(l|0)){p=m;q=l;r=l}else{f=j;j=n;n=m;while(1){m=f;f=f+-44|0;k[j+-44>>2]=k[f>>2];i=j+-40|0;h=m+-40|0;k[i>>2]=k[h>>2];k[i+4>>2]=k[h+4>>2];k[i+8>>2]=k[h+8>>2];h=j+-28|0;i=m+-28|0;k[h>>2]=k[i>>2];k[h+4>>2]=k[i+4>>2];k[h+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;i=j+-16|0;h=m+-16|0;k[i>>2]=k[h>>2];k[i+4>>2]=k[h+4>>2];k[i+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[j+-4>>2]=k[m+-4>>2];j=n+-44|0;m=j;if((f|0)==(l|0)){s=m;break}else n=m}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{K2a(d+-16|0);K2a(d+-28|0);d=d+-44|0}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function Y_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=k[d>>2]|0;f=k[b>>2]|0;g=e-f|0;h=(g|0)/44|0;if((e|0)==(f|0))return;if(h>>>0>97612893?(x=0,va(1473,a|0),f=x,x=0,f&1):0)i=12;else i=4;do if((i|0)==4){x=0;f=Ba(563,g|0)|0;e=x;x=0;if(!(e&1)){k[c>>2]=f;k[a>>2]=f;k[a+8>>2]=f+(h*44|0);e=k[b>>2]|0;j=k[d>>2]|0;if((e|0)==(j|0))return;l=e;e=f;while(1){k[e>>2]=k[l>>2];f=e+4|0;m=l+4|0;k[f>>2]=k[m>>2];k[f+4>>2]=k[m+4>>2];k[f+8>>2]=k[m+8>>2];m=e+16|0;x=0;xa(604,m|0,l+16|0);f=x;x=0;if(f&1){i=11;break}x=0;xa(604,e+28|0,l+28|0);f=x;x=0;if(f&1){n=m;i=9;break}k[e+40>>2]=k[l+40>>2];e=(k[c>>2]|0)+44|0;k[c>>2]=e;l=l+44|0;if((l|0)==(j|0)){i=19;break}}if((i|0)==9){j=Hc()|0;l=M;K2a(n);o=l;p=j;break}else if((i|0)==11){j=Hc()|0;o=M;p=j;break}else if((i|0)==19)return}else i=12}while(0);if((i|0)==12){i=Hc()|0;o=M;p=i}i=k[a>>2]|0;if(!i)Sc(p|0);o=k[c>>2]|0;if((o|0)==(i|0))q=i;else{n=o;do{k[c>>2]=n+-44;K2a(n+-16|0);K2a(n+-28|0);n=k[c>>2]|0}while((n|0)!=(i|0));q=k[a>>2]|0}OBa(q);Sc(p|0)}function Z_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/12|0)+1|0;if(e>>>0>357913941){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/12|0;if(g>>>0<178956970){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/12|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=357913941;n=((k[c>>2]|0)-f|0)/12|0;o=6}if((o|0)==6){i=m;j=KBa(m*12|0)|0;l=n}n=j+(l*12|0)|0;l=n;m=j+(i*12|0)|0;x=0;xa(772,n|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;if(!j)Sc(b|0);OBa(j);Sc(b|0)}b=n+12|0;j=k[a>>2]|0;i=k[c>>2]|0;if((i|0)==(j|0)){p=l;q=j;r=j}else{o=i;i=n;n=l;while(1){l=i+-12|0;f=o;o=o+-12|0;k[l>>2]=0;h=i+-8|0;k[h>>2]=0;k[i+-4>>2]=0;k[l>>2]=k[o>>2];l=f+-8|0;k[h>>2]=k[l>>2];h=f+-4|0;k[i+-4>>2]=k[h>>2];k[h>>2]=0;k[l>>2]=0;k[o>>2]=0;i=n+-12|0;l=i;if((o|0)==(j|0)){s=l;break}else n=l}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=m;m=q;if((r|0)!=(m|0)){d=r;do{r=d;d=d+-12|0;b=k[d>>2]|0;if(b){c=r+-8|0;r=k[c>>2]|0;if((r|0)==(b|0))t=b;else{p=r;do{k[c>>2]=p+-44;K2a(p+-16|0);K2a(p+-28|0);p=k[c>>2]|0}while((p|0)!=(b|0));t=k[d>>2]|0}OBa(t)}}while((d|0)!=(m|0))}if(!q)return;OBa(q);return}function __(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=33452;k[a+16>>2]=33476;K2a(a+4|0);k[a+16>>2]=20796;b=a+20|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function $_(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=33452;a=b+16|0;k[a>>2]=33476;K2a(b+4|0);k[a>>2]=20796;a=b+20|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function a$(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=33452;a=b+16|0;k[a>>2]=33476;K2a(b+4|0);k[a>>2]=20796;a=b+20|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function b$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;d=r;r=r+16|0;e=d+4|0;f=d;g=a+4|0;k[g>>2]=0;h=a+8|0;k[h>>2]=0;i=a+4|0;k[a>>2]=i;k[a+12>>2]=0;k[a+16>>2]=c;x=0;c=Ba(563,28)|0;j=x;x=0;a:do if(!(j&1)){k[c+16>>2]=0;k[c+20>>2]=0;k[c+24>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=i;k[i>>2]=c;k[a>>2]=c;ui(c,c);k[h>>2]=(k[h>>2]|0)+1;do if(!(k[c+20>>2]|0)){l=k[i>>2]|0;do if(l){if(!(k[l+16>>2]|0)){k[e>>2]=l;m=l;break}else n=l;while(1){o=k[n>>2]|0;if(!o){p=n;q=n;s=7;break}if(!(k[o+16>>2]|0)){t=o;u=o;s=10;break}else n=o}if((s|0)==7){k[e>>2]=q;v=p;w=q;s=11;break}else if((s|0)==10){k[e>>2]=t;if(!t){v=e;w=t;s=11;break}else{m=u;break}}}else{k[e>>2]=i;v=i;w=i;s=11}while(0);if((s|0)==11){x=0;l=Ba(563,28)|0;o=x;x=0;if(o&1)break a;k[l+16>>2]=0;k[l+20>>2]=0;k[l+24>>2]=0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=w;k[v>>2]=l;o=k[k[a>>2]>>2]|0;if(!o)y=l;else{k[a>>2]=o;y=k[v>>2]|0}ui(k[g>>2]|0,y);k[h>>2]=(k[h>>2]|0)+1;m=l}x=0;l=Ba(563,32)|0;o=x;x=0;if(o&1)break a;k[l>>2]=0;k[l+4>>2]=0;o=l+8|0;z=l+12|0;k[z>>2]=0;k[l+16>>2]=0;k[o>>2]=z;A=l+20|0;B=l+24|0;k[B>>2]=0;k[l+28>>2]=0;k[A>>2]=B;B=l;x=0;C=Ba(563,16)|0;D=x;x=0;if(D&1){D=Hc()|0;E=M;Q$(A,0);Q$(o,k[z>>2]|0);OBa(l);F=E;G=D;H=k[i>>2]|0;R$(a,H);Sc(G|0)}else{k[C+4>>2]=0;k[C+8>>2]=0;k[C>>2]=33928;k[C+12>>2]=B;k[m+20>>2]=B;B=m+24|0;D=k[B>>2]|0;k[B>>2]=C;if(!D)break;j0a(D);break}}while(0);D=k[b>>2]|0;C=k[b+4>>2]|0;if((D|0)==(C|0)){r=d;return}B=i;E=D;while(1){D=k[E>>2]|0;l=k[i>>2]|0;do if(l){if(!(k[l+16>>2]|0)){k[f>>2]=l;I=l;break}else J=l;while(1){z=k[J>>2]|0;if(!z){K=J;L=J;s=30;break}if(!(k[z+16>>2]|0)){N=z;O=z;s=33;break}else J=z}if((s|0)==30){s=0;k[f>>2]=L;P=K;Q=L;s=34;break}else if((s|0)==33){s=0;k[f>>2]=N;if(!N){P=f;Q=N;s=34;break}else{I=O;break}}}else{k[f>>2]=i;P=i;Q=B;s=34}while(0);if((s|0)==34){s=0;x=0;l=Ba(563,28)|0;z=x;x=0;if(z&1)break;k[l+16>>2]=0;k[l+20>>2]=0;k[l+24>>2]=0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=Q;k[P>>2]=l;z=k[k[a>>2]>>2]|0;if(!z)R=l;else{k[a>>2]=z;R=k[P>>2]|0}ui(k[g>>2]|0,R);k[h>>2]=(k[h>>2]|0)+1;I=l}x=0;Va(95,k[I+20>>2]|0,D|0,0,0,0)|0;l=x;x=0;if(l&1)break;E=E+4|0;if((E|0)==(C|0)){s=25;break}}if((s|0)==25){r=d;return}C=Hc()|0;F=M;G=C;H=k[i>>2]|0;R$(a,H);Sc(G|0)}while(0);d=Hc()|0;F=M;G=d;H=k[i>>2]|0;R$(a,H);Sc(G|0)}function c$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;c=r;r=r+48|0;d=c+32|0;e=c+28|0;f=c+24|0;g=c+20|0;h=c;i=b;j=a+4|0;l=k[j>>2]|0;do if(l){m=l;while(1){n=k[m+16>>2]|0;if(b>>>0>>0){o=k[m>>2]|0;if(!o){p=m;q=m;s=4;break}else t=o}else{if(n>>>0>=b>>>0){u=m;s=10;break}n=m+4|0;o=k[n>>2]|0;if(!o){v=n;w=m;s=8;break}else t=o}m=t}if((s|0)==4){k[d>>2]=q;y=p;z=q;s=11;break}else if((s|0)==8){k[d>>2]=w;y=v;z=w;s=11;break}else if((s|0)==10){k[d>>2]=u;if(!u){y=d;z=u;s=11;break}else{A=u;break}}}else{k[d>>2]=j;y=j;z=j;s=11}while(0);if((s|0)==11){u=KBa(28)|0;k[u+16>>2]=i;k[u+20>>2]=0;k[u+24>>2]=0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=z;k[y>>2]=u;z=k[k[a>>2]>>2]|0;if(!z)B=u;else{k[a>>2]=z;B=k[y>>2]|0}ui(k[a+4>>2]|0,B);B=a+8|0;k[B>>2]=(k[B>>2]|0)+1;A=u}if(!(k[A+20>>2]|0)){A=k[j>>2]|0;do if(A){u=A;while(1){B=k[u+16>>2]|0;if(b>>>0>>0){y=k[u>>2]|0;if(!y){C=u;D=u;s=18;break}else E=y}else{if(B>>>0>=b>>>0){F=u;s=24;break}B=u+4|0;y=k[B>>2]|0;if(!y){G=B;H=u;s=22;break}else E=y}u=E}if((s|0)==18){k[d>>2]=D;I=C;J=D;s=25;break}else if((s|0)==22){k[d>>2]=H;I=G;J=H;s=25;break}else if((s|0)==24){k[d>>2]=F;if(!F){I=d;J=F;s=25;break}else{K=A;L=F;break}}}else{k[d>>2]=j;I=j;J=j;s=25}while(0);if((s|0)==25){F=KBa(28)|0;k[F+16>>2]=i;k[F+20>>2]=0;k[F+24>>2]=0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=J;k[I>>2]=F;J=k[k[a>>2]>>2]|0;if(!J)N=F;else{k[a>>2]=J;N=k[I>>2]|0}ui(k[a+4>>2]|0,N);N=a+8|0;k[N>>2]=(k[N>>2]|0)+1;K=k[j>>2]|0;L=F}F=L+20|0;N=KBa(32)|0;do if(K){if(!(k[K+16>>2]|0)){k[e>>2]=K;O=K;break}else P=K;while(1){I=k[P>>2]|0;if(!I){Q=P;R=P;s=32;break}if(!(k[I+16>>2]|0)){S=I;T=I;s=35;break}else P=I}if((s|0)==32){k[e>>2]=R;U=Q;V=R;s=36;break}else if((s|0)==35){k[e>>2]=S;if(!S){U=e;V=S;s=36;break}else{O=T;break}}}else{k[e>>2]=j;U=j;V=j;s=36}while(0);if((s|0)==36){x=0;T=Ba(563,28)|0;S=x;x=0;if(S&1){S=Hc()|0;R=M;OBa(N);W=R;X=S;Sc(X|0)}k[T+16>>2]=0;k[T+20>>2]=0;k[T+24>>2]=0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=V;k[U>>2]=T;V=k[k[a>>2]>>2]|0;if(!V)Y=T;else{k[a>>2]=V;Y=k[U>>2]|0}ui(k[a+4>>2]|0,Y);Y=a+8|0;k[Y>>2]=(k[Y>>2]|0)+1;O=T}T=k[O+20>>2]|0;k[N>>2]=0;k[N+4>>2]=T;T=N+8|0;O=N+12|0;k[O>>2]=0;k[N+16>>2]=0;k[T>>2]=O;Y=N+20|0;U=N+24|0;k[U>>2]=0;k[N+28>>2]=0;k[Y>>2]=U;U=N;x=0;V=Ba(563,16)|0;S=x;x=0;if(S&1){S=Hc()|0;Q$(Y,0);Q$(T,k[O>>2]|0);OBa(N);Sc(S|0)}k[V+4>>2]=0;k[V+8>>2]=0;k[V>>2]=33928;k[V+12>>2]=U;k[F>>2]=U;U=L+24|0;L=k[U>>2]|0;k[U>>2]=V;if(L)j0a(L)}L=k[j>>2]|0;do if(L){V=L;while(1){U=k[V+16>>2]|0;if(b>>>0>>0){F=k[V>>2]|0;if(!F){Z=V;_=V;s=48;break}else $=F}else{if(U>>>0>=b>>>0){aa=V;s=54;break}U=V+4|0;F=k[U>>2]|0;if(!F){ba=U;ca=V;s=52;break}else $=F}V=$}if((s|0)==48){k[d>>2]=_;da=Z;ea=_;s=55;break}else if((s|0)==52){k[d>>2]=ca;da=ba;ea=ca;s=55;break}else if((s|0)==54){k[d>>2]=aa;if(!aa){da=d;ea=aa;s=55;break}else{fa=aa;break}}}else{k[d>>2]=j;da=j;ea=j;s=55}while(0);if((s|0)==55){aa=KBa(28)|0;k[aa+16>>2]=i;k[aa+20>>2]=0;k[aa+24>>2]=0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=ea;k[da>>2]=aa;ea=k[k[a>>2]>>2]|0;if(!ea)ga=aa;else{k[a>>2]=ea;ga=k[da>>2]|0}ui(k[a+4>>2]|0,ga);ga=a+8|0;k[ga>>2]=(k[ga>>2]|0)+1;fa=aa}k[a+12>>2]=k[fa+20>>2];fa=a+16|0;x=0;nb(119,h|0,a|0,b|0,k[fa>>2]|0);h=x;x=0;do if(!(h&1)?(x=0,aa=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,ga=x,x=0,!(ga&1)):0){ga=k[j>>2]|0;do if(ga){da=ga;while(1){ea=k[da+16>>2]|0;if(b>>>0>>0){ca=k[da>>2]|0;if(!ca){ha=da;ia=da;s=63;break}else ja=ca}else{if(ea>>>0>=b>>>0){ka=da;s=69;break}ea=da+4|0;ca=k[ea>>2]|0;if(!ca){la=ea;ma=da;s=67;break}else ja=ca}da=ja}if((s|0)==63){k[d>>2]=ia;na=ha;oa=ia;s=70;break}else if((s|0)==67){k[d>>2]=ma;na=la;oa=ma;s=70;break}else if((s|0)==69){k[d>>2]=ka;if(!ka){na=d;oa=ka;s=70;break}else{pa=ka;break}}}else{k[d>>2]=j;na=j;oa=j;s=70}while(0);if((s|0)==70){x=0;ga=Ba(563,28)|0;da=x;x=0;if(da&1)break;k[ga+16>>2]=i;k[ga+20>>2]=0;k[ga+24>>2]=0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=oa;k[na>>2]=ga;da=k[k[a>>2]>>2]|0;if(!da)qa=ga;else{k[a>>2]=da;qa=k[na>>2]|0}ui(k[a+4>>2]|0,qa);da=a+8|0;k[da>>2]=(k[da>>2]|0)+1;pa=ga}ga=aa+16|0;da=k[pa+20>>2]|0;ca=da+8|0;if((ga|0)!=(ca|0)?(k[f>>2]=k[ca>>2],k[g>>2]=da+12,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],fb(271,ga|0,e|0,d|0),ga=x,x=0,ga&1):0)break;ra=1;r=c;return ra|0}while(0);d=Hc(4496)|0;e=M;if((e|0)!=(hf(4496)|0)){W=e;X=d;Sc(X|0)}me(d|0)|0;d=k[fa>>2]|0;if((k[d>>2]|0)!=(k[d+4>>2]|0)){ge();ra=0;r=c;return ra|0}x=0;hb(46);x=0;ra=Hc()|0;c=M;x=0;hb(45);d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}else{W=c;X=ra;Sc(X|0)}return 0}function d$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0;d=r;r=r+272|0;e=d+268|0;f=d+244|0;g=d+48|0;h=d+232|0;j=d+220|0;l=d+208|0;m=d+196|0;n=d+184|0;o=d+256|0;p=d+32|0;q=d+172|0;s=d+160|0;t=d+148|0;u=d+136|0;v=d+124|0;w=d+112|0;y=d+16|0;z=d+100|0;A=d+88|0;B=d;C=d+76|0;D=d+64|0;E=a+4|0;F=k[E>>2]|0;a:do if(F){G=F;while(1){H=k[G+16>>2]|0;if(b>>>0>>0){I=k[G>>2]|0;if(!I)break a;else J=I}else{if(H>>>0>=b>>>0){K=G;break}H=k[G+4>>2]|0;if(!H)break a;else J=H}G=J}if(K){G=k[K+20>>2]|0;T$(f,b+24|0);H=k[f>>2]|0;I=f+4|0;L=k[I>>2]|0;b:do if((H|0)==(L|0)){N=H;O=0}else{P=c+4|0;Q=g+8|0;R=g+12|0;S=B+8|0;T=B+12|0;U=o+4|0;V=p+8|0;W=p+12|0;X=y+8|0;Y=y+12|0;Z=H;_=0;c:while(1){$=k[Z>>2]|0;d:do if(($|0)!=0?(aa=iDa($,5224,5296,0)|0,(aa|0)!=0):0){x=0;ba=Ba(k[(k[aa>>2]|0)+16>>2]|0,aa|0)|0;ca=x;x=0;if(ca&1){da=44;break c}ca=ba+4|0;ea=k[P>>2]|0;e:do if(ea){fa=i[ca>>0]|0;ga=(fa&1)==0;ha=ba+8|0;ia=ga?(fa&255)>>>1:k[ha>>2]|0;fa=ba+12|0;ja=ca+1|0;ka=ga?ja:k[fa>>2]|0;ga=ea;while(1){la=ga+16|0;ma=i[la>>0]|0;na=(ma&1)==0;oa=na?(ma&255)>>>1:k[ga+20>>2]|0;ma=na?la+1|0:k[ga+24>>2]|0;la=oa>>>0>>0;na=ZLa(ka,ma,la?oa:ia)|0;qa=ia>>>0>>0;if((((na|0)==0?(qa?-2147483648:0):na)|0)<0)ra=ga;else{na=ZLa(ma,ka,qa?ia:oa)|0;if((((na|0)==0?(la?-2147483648:0):na)|0)>=0)break;ra=ga+4|0}ga=k[ra>>2]|0;if(!ga)break e}ga=U$(c,e,ca)|0;if(!ga){da=57;break c}ia=k[E>>2]|0;if(ia){ka=k[ga+28>>2]|0;ga=E;na=ia;f:while(1){ia=na;while(1){if((k[ia+16>>2]|0)>>>0>=ka>>>0){sa=ia;break}ia=k[ia+4>>2]|0;if(!ia){ta=ga;break f}}na=k[sa>>2]|0;if(!na){ta=sa;break}else ga=sa}if((ta|0)!=(E|0)?ka>>>0>=(k[ta+16>>2]|0)>>>0:0)ua=ta;else da=68}else da=68;if((da|0)==68){da=0;ua=E}x=0;fb(140,n|0,329672,0);ga=x;x=0;if(ga&1){da=44;break c}x=0;pa(57,(ua|0)!=(E|0)|0,n|0,87,242938,242988);ga=x;x=0;if(ga&1){da=73;break c}K2a(n);ga=k[aa+48>>2]|0;na=k[aa+52>>2]|0;if((ga|0)==(na|0)){ia=k[aa+24>>2]|0;la=i[ia>>0]|0;if(!(la&1))va=(la&255)>>>1;else va=k[ia+4>>2]|0;if(va){wa=_;break d}ia=k[ua+20>>2]|0;la=k[ia+8>>2]|0;oa=ia+12|0;if((la|0)==(oa|0)){wa=_;break d}ia=aa+8|0;qa=aa+16|0;ma=aa+20|0;ya=la;la=_;while(1){za=k[ya+28>>2]|0;Aa=k[ya+32>>2]|0;if((za|0)==(Aa|0))Ca=la;else{Da=ya+16|0;Ea=ya+20|0;Ga=ya+24|0;Ha=Da+1|0;Ia=za;za=la;while(1){x=0;Ja=Va(95,G|0,k[Ia>>2]|0,Da|0,0,0)|0;Ka=x;x=0;if(Ka&1){da=42;break c}do if(Ja)La=za;else{Ka=ia;Ma=k[Ka+4>>2]|0;Na=B;k[Na>>2]=k[Ka>>2];k[Na+4>>2]=Ma;k[S>>2]=k[qa>>2];Ma=k[ma>>2]|0;k[T>>2]=Ma;Na=(Ma|0)==0;if(!Na)h0a(Ma);k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;Ka=i[Da>>0]|0;Oa=(Ka&1)==0?(Ka&255)>>>1:k[Ea>>2]|0;x=0;nb(83,D|0,296347,12,Oa+12|0);Ka=x;x=0;if(Ka&1){Pa=Ma;Qa=Na;da=155;break c}x=0;Fa(88,D|0,((i[Da>>0]&1)==0?Ha:k[Ga>>2]|0)|0,Oa|0)|0;Oa=x;x=0;if(Oa&1){Pa=Ma;Qa=Na;da=155;break c}x=0;Oa=Ta(484,D|0,243164)|0;Ka=x;x=0;if(Ka&1){Ra=Ma;Sa=Na;da=156;break c};k[C>>2]=k[Oa>>2];k[C+4>>2]=k[Oa+4>>2];k[C+8>>2]=k[Oa+8>>2];k[Oa>>2]=0;k[Oa+4>>2]=0;k[Oa+8>>2]=0;x=0;fb(272,a|0,B|0,C|0);Oa=x;x=0;if(Oa&1){Ua=Ma;Wa=Na;da=157;break c}K2a(C);K2a(D);if(Na){La=1;break}j0a(Ma);La=1}while(0);Ia=Ia+4|0;if((Ia|0)==(Aa|0)){Ca=La;break}else za=La}}za=k[ya+4>>2]|0;if(!za){Aa=ya;while(1){Ia=k[Aa+8>>2]|0;if((k[Ia>>2]|0)==(Aa|0)){Xa=Ia;break}else Aa=Ia}}else{Aa=za;while(1){Ia=k[Aa>>2]|0;if(!Ia){Xa=Aa;break}else Aa=Ia}}if((Xa|0)==(oa|0)){wa=Ca;break d}else{ya=Xa;la=Ca}}}la=ua+20|0;ya=aa+8|0;oa=aa+16|0;ma=aa+20|0;qa=aa+40|0;ia=ga;ka=_;while(1){x=0;nb(120,o|0,k[la>>2]|0,k[(k[ia>>2]|0)+24>>2]|0,0);Aa=x;x=0;if(Aa&1){da=43;break c}Aa=k[o>>2]|0;za=k[U>>2]|0;do if((Aa|0)==(za|0)){Ia=ya;Ga=k[Ia+4>>2]|0;Ha=p;k[Ha>>2]=k[Ia>>2];k[Ha+4>>2]=Ga;k[V>>2]=k[oa>>2];Ga=k[ma>>2]|0;k[W>>2]=Ga;Ha=(Ga|0)==0;if(!Ha)h0a(Ga);Ia=k[(k[ia>>2]|0)+24>>2]|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;Da=i[Ia>>0]|0;Ea=(Da&1)==0?(Da&255)>>>1:k[Ia+4>>2]|0;x=0;nb(83,w|0,243129,13,Ea+13|0);Da=x;x=0;if(Da&1){Ya=Ga;Za=Ha;da=90;break c}x=0;Fa(88,w|0,((i[Ia>>0]&1)==0?Ia+1|0:k[Ia+8>>2]|0)|0,Ea|0)|0;Ea=x;x=0;if(Ea&1){Ya=Ga;Za=Ha;da=90;break c}x=0;Ea=Ta(484,w|0,243143)|0;Ia=x;x=0;if(Ia&1){_a=Ga;$a=Ha;da=91;break c};k[v>>2]=k[Ea>>2];k[v+4>>2]=k[Ea+4>>2];k[v+8>>2]=k[Ea+8>>2];k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;Ea=i[ca>>0]|0;Ia=(Ea&1)==0;x=0;Da=Fa(88,v|0,(Ia?ja:k[fa>>2]|0)|0,(Ia?(Ea&255)>>>1:k[ha>>2]|0)|0)|0;Ea=x;x=0;if(Ea&1){ab=Ga;bb=Ha;da=92;break c};k[u>>2]=k[Da>>2];k[u+4>>2]=k[Da+4>>2];k[u+8>>2]=k[Da+8>>2];k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;x=0;Da=Ta(484,u|0,242905)|0;Ea=x;x=0;if(Ea&1){cb=Ga;db=Ha;da=93;break c};k[t>>2]=k[Da>>2];k[t+4>>2]=k[Da+4>>2];k[t+8>>2]=k[Da+8>>2];k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;Da=k[qa>>2]|0;Ea=i[Da>>0]|0;Ia=(Ea&1)==0;x=0;Ja=Fa(88,t|0,(Ia?Da+1|0:k[Da+8>>2]|0)|0,(Ia?(Ea&255)>>>1:k[Da+4>>2]|0)|0)|0;Da=x;x=0;if(Da&1){eb=Ga;gb=Ha;da=94;break c};k[s>>2]=k[Ja>>2];k[s+4>>2]=k[Ja+4>>2];k[s+8>>2]=k[Ja+8>>2];k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;x=0;Ja=Ta(484,s|0,243160)|0;Da=x;x=0;if(Da&1){hb=Ga;ib=Ha;da=95;break c};k[q>>2]=k[Ja>>2];k[q+4>>2]=k[Ja+4>>2];k[q+8>>2]=k[Ja+8>>2];k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;x=0;fb(272,a|0,p|0,q|0);Ja=x;x=0;if(Ja&1){jb=Ga;kb=Ha;da=96;break c}K2a(q);K2a(s);K2a(t);K2a(u);K2a(v);K2a(w);if(Ha){lb=1;break}j0a(Ga);lb=1}else{Ga=ia+8|0;Ha=Aa;Ja=ka;while(1){Da=k[Ha>>2]|0;Ea=k[Ga>>2]|0;if(!Ea)mb=k[Da+24>>2]|0;else mb=Ea;x=0;Ea=Va(95,G|0,Da|0,mb|0,0,0)|0;Da=x;x=0;if(Da&1){da=89;break c}do if(Ea)ob=Ja;else{Da=ya;Ia=k[Da+4>>2]|0;Ma=y;k[Ma>>2]=k[Da>>2];k[Ma+4>>2]=Ia;k[X>>2]=k[oa>>2];Ia=k[ma>>2]|0;k[Y>>2]=Ia;Ma=(Ia|0)==0;if(!Ma)h0a(Ia);k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;Da=i[mb>>0]|0;Na=(Da&1)==0?(Da&255)>>>1:k[mb+4>>2]|0;x=0;nb(83,A|0,296347,12,Na+12|0);Da=x;x=0;if(Da&1){pb=Ia;qb=Ma;da=116;break c}x=0;Fa(88,A|0,((i[mb>>0]&1)==0?mb+1|0:k[mb+8>>2]|0)|0,Na|0)|0;Na=x;x=0;if(Na&1){pb=Ia;qb=Ma;da=116;break c}x=0;Na=Ta(484,A|0,243164)|0;Da=x;x=0;if(Da&1){rb=Ia;sb=Ma;da=117;break c};k[z>>2]=k[Na>>2];k[z+4>>2]=k[Na+4>>2];k[z+8>>2]=k[Na+8>>2];k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;x=0;fb(272,a|0,y|0,z|0);Na=x;x=0;if(Na&1){tb=Ia;ub=Ma;da=118;break c}K2a(z);K2a(A);if(Ma){ob=1;break}j0a(Ia);ob=1}while(0);Ha=Ha+4|0;if((Ha|0)==(za|0)){lb=ob;break}else Ja=ob}}while(0);za=k[o>>2]|0;Aa=za;if(za){Ja=k[U>>2]|0;if((Ja|0)!=(za|0))k[U>>2]=Ja+(~((Ja+-4-Aa|0)>>>2)<<2);OBa(za)}ia=ia+16|0;if((ia|0)==(na|0)){wa=lb;break d}else ka=lb}}while(0);ea=aa+8|0;ka=k[ea+4>>2]|0;na=g;k[na>>2]=k[ea>>2];k[na+4>>2]=ka;k[Q>>2]=k[aa+16>>2];ka=k[aa+20>>2]|0;k[R>>2]=ka;na=(ka|0)==0;if(!na)h0a(ka);k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;ea=i[ca>>0]|0;ia=(ea&1)==0?(ea&255)>>>1:k[ba+8>>2]|0;x=0;nb(83,m|0,242896,8,ia+8|0);ea=x;x=0;if(ea&1){vb=ka;wb=na;da=46;break c}x=0;Fa(88,m|0,((i[ca>>0]&1)==0?ca+1|0:k[ba+12>>2]|0)|0,ia|0)|0;ia=x;x=0;if(ia&1){vb=ka;wb=na;da=46;break c}x=0;ia=Ta(484,m|0,242905)|0;ea=x;x=0;if(ea&1){xb=ka;yb=na;da=47;break c};k[l>>2]=k[ia>>2];k[l+4>>2]=k[ia+4>>2];k[l+8>>2]=k[ia+8>>2];k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;ia=k[aa+40>>2]|0;ea=i[ia>>0]|0;ma=(ea&1)==0;x=0;oa=Fa(88,l|0,(ma?ia+1|0:k[ia+8>>2]|0)|0,(ma?(ea&255)>>>1:k[ia+4>>2]|0)|0)|0;ia=x;x=0;if(ia&1){zb=ka;Ab=na;da=48;break c};k[j>>2]=k[oa>>2];k[j+4>>2]=k[oa+4>>2];k[j+8>>2]=k[oa+8>>2];k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;x=0;oa=Ta(484,j|0,242924)|0;ia=x;x=0;if(ia&1){Bb=ka;Cb=na;da=49;break c};k[h>>2]=k[oa>>2];k[h+4>>2]=k[oa+4>>2];k[h+8>>2]=k[oa+8>>2];k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;x=0;fb(272,a|0,g|0,h|0);oa=x;x=0;if(oa&1){Db=ka;Eb=na;da=50;break c}K2a(h);K2a(j);K2a(l);K2a(m);if(na)wa=1;else{j0a(ka);wa=1}}else wa=_;while(0);Z=Z+8|0;if((Z|0)==(L|0)){Fb=wa;da=13;break}else _=wa}switch(da|0){case 13:{N=k[f>>2]|0;O=Fb;break b;break}case 42:{_=Hc()|0;Gb=M;Hb=_;da=45;break}case 43:{_=Hc()|0;Gb=M;Hb=_;da=45;break}case 44:{_=Hc()|0;Gb=M;Hb=_;da=45;break}case 46:{_=Hc()|0;Z=M;K2a(m);Ib=_;Jb=Z;Kb=vb;Lb=wb;da=54;break}case 47:{Mb=Hc()|0;Nb=M;Ob=yb;Pb=xb;da=53;break}case 48:{Qb=Hc()|0;Rb=M;Sb=Ab;Tb=zb;da=52;break}case 49:{Ub=Hc()|0;Vb=M;Wb=Cb;Xb=Bb;da=51;break}case 50:{Z=Hc()|0;_=M;K2a(h);Ub=Z;Vb=_;Wb=Eb;Xb=Db;da=51;break}case 57:{_=Rd(8)|0;x=0;xa(671,_|0,296399);Z=x;x=0;if(Z&1){Z=Hc()|0;R=M;Fc(_|0);Gb=R;Hb=Z;da=45;break}else{k[_>>2]=47544;x=0;fb(149,_|0,9024,933);x=0;_=Hc()|0;Gb=M;Hb=_;da=45;break}break}case 73:{_=Hc()|0;Z=M;K2a(n);Yb=_;Zb=Z;break}case 89:{_b=Hc()|0;$b=M;da=128;break}case 90:{Z=Hc()|0;_=M;K2a(w);ac=Z;bc=_;cc=Ya;dc=Za;da=102;break}case 91:{ec=Hc()|0;fc=M;gc=$a;hc=_a;da=101;break}case 92:{ic=Hc()|0;jc=M;kc=bb;lc=ab;da=100;break}case 93:{mc=Hc()|0;nc=M;oc=db;pc=cb;da=99;break}case 94:{qc=Hc()|0;rc=M;sc=gb;tc=eb;da=98;break}case 95:{uc=Hc()|0;vc=M;wc=ib;xc=hb;da=97;break}case 96:{_=Hc()|0;Z=M;K2a(q);uc=_;vc=Z;wc=kb;xc=jb;da=97;break}case 116:{Z=Hc()|0;_=M;K2a(A);yc=Z;zc=_;Ac=pb;Bc=qb;da=120;break}case 117:{Cc=Hc()|0;Dc=M;Ec=sb;Gc=rb;da=119;break}case 118:{_=Hc()|0;Z=M;K2a(z);Cc=_;Dc=Z;Ec=ub;Gc=tb;da=119;break}case 155:{Z=Hc()|0;_=M;K2a(D);Ic=Z;Jc=_;Kc=Pa;Lc=Qa;da=159;break}case 156:{_=Hc()|0;Mc=M;Nc=_;Oc=Sa;Pc=Ra;da=158;break}case 157:{_=Hc()|0;Z=M;K2a(C);Mc=Z;Nc=_;Oc=Wa;Pc=Ua;da=158;break}}if((da|0)==45){Yb=Hb;Zb=Gb}else if((da|0)==51){K2a(j);Qb=Ub;Rb=Vb;Sb=Wb;Tb=Xb;da=52}else if((da|0)==97){K2a(s);qc=uc;rc=vc;sc=wc;tc=xc;da=98}else if((da|0)==119){K2a(A);yc=Cc;zc=Dc;Ac=Gc;Bc=Ec;da=120}else if((da|0)==158){K2a(D);Ic=Nc;Jc=Mc;Kc=Pc;Lc=Oc;da=159}if((da|0)==52){K2a(l);Mb=Qb;Nb=Rb;Ob=Sb;Pb=Tb;da=53}else if((da|0)==98){K2a(t);mc=qc;nc=rc;oc=sc;pc=tc;da=99}else if((da|0)==120)if(Bc){_b=yc;$b=zc;da=128}else{j0a(Ac);_b=yc;$b=zc;da=128}else if((da|0)==159)if(Lc){Yb=Ic;Zb=Jc}else{j0a(Kc);Yb=Ic;Zb=Jc}if((da|0)==53){K2a(m);Ib=Mb;Jb=Nb;Kb=Pb;Lb=Ob;da=54}else if((da|0)==99){K2a(u);ic=mc;jc=nc;kc=oc;lc=pc;da=100}if((da|0)==54)if(Lb){Yb=Ib;Zb=Jb}else{j0a(Kb);Yb=Ib;Zb=Jb}else if((da|0)==100){K2a(v);ec=ic;fc=jc;gc=kc;hc=lc;da=101}if((da|0)==101){K2a(w);ac=ec;bc=fc;cc=hc;dc=gc;da=102}if((da|0)==102)if(dc){_b=ac;$b=bc;da=128}else{j0a(cc);_b=ac;$b=bc;da=128}if((da|0)==128){_=k[o>>2]|0;Z=_;if(!_){Yb=_b;Zb=$b}else{R=k[U>>2]|0;if((R|0)!=(_|0))k[U>>2]=R+(~((R+-4-Z|0)>>>2)<<2);OBa(_);Yb=_b;Zb=$b}}_=k[f>>2]|0;if(!_)Sc(Yb|0);Z=k[I>>2]|0;if((Z|0)==(_|0))Qc=_;else{R=Z;while(1){Z=R+-8|0;k[I>>2]=Z;Q=k[R+-4>>2]|0;if(!Q)Rc=Z;else{j0a(Q);Rc=k[I>>2]|0}if((Rc|0)==(_|0))break;else R=Rc}Qc=k[f>>2]|0}OBa(Qc);Sc(Yb|0)}while(0);if(!N){Tc=O^1;r=d;return Tc|0}L=k[I>>2]|0;if((L|0)==(N|0))Uc=N;else{G=L;while(1){L=G+-8|0;k[I>>2]=L;H=k[G+-4>>2]|0;if(!H)Vc=L;else{j0a(H);Vc=k[I>>2]|0}if((Vc|0)==(N|0))break;else G=Vc}Uc=k[f>>2]|0}OBa(Uc);Tc=O^1;r=d;return Tc|0}}while(0);Tc=Rd(8)|0;x=0;xa(671,Tc|0,296399);d=x;x=0;if(d&1){d=Hc()|0;Fc(Tc|0);Sc(d|0)}else{k[Tc>>2]=47544;Gf(Tc|0,9024,933)}return 0}function e$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+48|0;e=d+24|0;f=d+8|0;g=d;h=KBa(68)|0;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=31248;i=h+12|0;x=0;xa(731,i|0,0);j=x;x=0;if(j&1){j=Hc()|0;c0a(h);OBa(h);Sc(j|0)}j=i;k[e>>2]=31456;l=b;m=k[l+4>>2]|0;n=e+4|0;k[n>>2]=k[l>>2];k[n+4>>2]=m;k[e+12>>2]=k[b+8>>2];m=k[b+12>>2]|0;k[e+16>>2]=m;b=(m|0)==0;if(!b)h0a(m);x=0;n=Ta(566,i|0,e|0)|0;i=x;x=0;do if(!(i&1)?(k[f>>2]=21048,l=f+4|0,x=0,xa(604,l|0,c|0),o=x,x=0,!(o&1)):0){x=0;Ta(564,n|0,f|0)|0;o=x;x=0;if(o&1){o=Hc()|0;p=M;k[f>>2]=21048;K2a(l);q=p;s=o;break}k[f>>2]=21048;K2a(l);k[e>>2]=31456;if(!b)j0a(m);l=k[a+16>>2]|0;k[g>>2]=j;o=g+4|0;k[o>>2]=h;h0a(h);p=l+4|0;t=k[p>>2]|0;if(t>>>0<(k[l+8>>2]|0)>>>0){k[t>>2]=j;k[t+4>>2]=h;k[g>>2]=0;k[o>>2]=0;k[p>>2]=t+8;j0a(h);r=d;return}x=0;xa(732,l|0,g|0);l=x;x=0;if(l&1){l=Hc()|0;t=M;p=k[o>>2]|0;if(!p){u=t;v=l;j0a(h);Sc(v|0)}j0a(p);u=t;v=l;j0a(h);Sc(v|0)}else{l=k[o>>2]|0;if(!l){j0a(h);r=d;return}j0a(l);j0a(h);r=d;return}}else w=16;while(0);if((w|0)==16){w=Hc()|0;q=M;s=w}k[e>>2]=31456;if(b){u=q;v=s;j0a(h);Sc(v|0)}j0a(m);u=q;v=s;j0a(h);Sc(v|0)}function f$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0;c=r;r=r+144|0;d=c+128|0;e=c+124|0;f=c+120|0;g=c+116|0;h=c+112|0;j=c+108|0;l=c+76|0;m=c+88|0;n=c+64|0;o=c+32|0;p=c+44|0;q=c+20|0;s=c;t=k[b+36>>2]|0;u=a+4|0;v=k[u>>2]|0;do if(v){w=t;y=v;while(1){z=k[y+16>>2]|0;if(w>>>0>>0){A=k[y>>2]|0;if(!A){B=y;C=y;D=5;break}else E=A}else{if(z>>>0>=w>>>0){F=y;D=11;break}z=y+4|0;A=k[z>>2]|0;if(!A){G=z;H=y;D=9;break}else E=A}y=E}if((D|0)==5){k[j>>2]=C;I=B;J=C;D=12;break}else if((D|0)==9){k[j>>2]=H;I=G;J=H;D=12;break}else if((D|0)==11){k[j>>2]=F;if(!F){I=j;J=F;D=12;break}else{K=F;D=16;break}}}else{k[j>>2]=u;I=u;J=u;D=12}while(0);if((D|0)==12){x=0;j=Ba(563,28)|0;F=x;x=0;if(F&1)D=35;else{k[j+16>>2]=t;k[j+20>>2]=0;k[j+24>>2]=0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=J;k[I>>2]=j;J=k[k[a>>2]>>2]|0;if(!J)L=j;else{k[a>>2]=J;L=k[I>>2]|0}ui(k[a+4>>2]|0,L);L=a+8|0;k[L>>2]=(k[L>>2]|0)+1;K=j;D=16}}a:do if((D|0)==16){j=k[K+20>>2]|0;L=a+12|0;k[L>>2]=j;x=0;fb(140,l|0,329672,0);I=x;x=0;if(!(I&1)){x=0;pa(57,(j|0)!=0|0,l|0,140,242938,243184);j=x;x=0;if(j&1){j=Hc(4496)|0;I=M;K2a(l);N=j;O=I;break}K2a(l);I=a+16|0;j=k[I>>2]|0;k[m>>2]=32708;k[m+4>>2]=j;k[m+8>>2]=a;k[m+12>>2]=0;i[m+16>>0]=0;i[m+17>>0]=0;j=k[b+48>>2]|0;J=k[b+52>>2]|0;b:do if((j|0)==(J|0))P=1;else{t=j;F=1;while(1){x=0;H=Ta(575,m|0,k[t>>2]|0)|0;G=x;x=0;if(G&1)break;G=F&H;t=t+8|0;if((t|0)==(J|0)){P=G;break b}else F=G}F=Hc(4496)|0;Q=M;R=F;D=36;break a}while(0);J=b;j=k[u>>2]|0;do if(j){F=j;while(1){t=k[F+16>>2]|0;if(b>>>0>>0){G=k[F>>2]|0;if(!G){S=F;T=F;D=22;break}else U=G}else{if(t>>>0>=b>>>0){V=F;D=28;break}t=F+4|0;G=k[t>>2]|0;if(!G){W=t;X=F;D=26;break}else U=G}F=U}if((D|0)==22){k[g>>2]=T;Y=S;Z=T;D=29;break}else if((D|0)==26){k[g>>2]=X;Y=W;Z=X;D=29;break}else if((D|0)==28){k[g>>2]=V;if(!V){Y=g;Z=V;D=29;break}else{_=V;break}}}else{k[g>>2]=u;Y=u;Z=u;D=29}while(0);if((D|0)==29){x=0;j=Ba(563,28)|0;F=x;x=0;if(F&1){D=35;break}k[j+16>>2]=J;k[j+20>>2]=0;k[j+24>>2]=0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=Z;k[Y>>2]=j;F=k[k[a>>2]>>2]|0;if(!F)$=j;else{k[a>>2]=F;$=k[Y>>2]|0}ui(k[a+4>>2]|0,$);F=a+8|0;k[F>>2]=(k[F>>2]|0)+1;_=j}k[L>>2]=k[_+20>>2];if(P){x=0;xa(775,a|0,b|0);j=x;x=0;if(j&1){D=35;break}x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;F=x;x=0;if(F&1){D=35;break}F=(k[j+36>>2]|0)+4|0;x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;G=x;x=0;if(G&1){D=35;break}G=k[j+40>>2]|0;k[n>>2]=0;j=n+4|0;k[j>>2]=0;k[n+8>>2]=0;t=G-F|0;H=t>>2;C=G;do if(H){if(!(H>>>0>1073741823?(x=0,va(1473,n|0),G=x,x=0,G&1):0))D=47;if((D|0)==47?(x=0,G=Ba(563,t|0)|0,B=x,x=0,!(B&1)):0){k[j>>2]=G;k[n>>2]=G;k[n+8>>2]=G+(H<<2);do if((F|0)!=(C|0)){B=F;E=G;while(1){k[E>>2]=k[B>>2];v=k[j>>2]|0;y=v+4|0;k[j>>2]=y;B=B+4|0;if((B|0)==(C|0)){aa=v;ba=y;break}else E=y}E=k[n>>2]|0;if((E|0)==(ba|0))ca=E;else{B=E;while(1){x=0;xa(776,a|0,k[B>>2]|0);E=x;x=0;if(E&1)break;if((B|0)==(aa|0)){D=56;break}else B=B+4|0}if((D|0)==56){ca=k[n>>2]|0;break}B=Hc(4496)|0;E=M;y=k[n>>2]|0;if(!y){N=B;O=E;break a}v=k[j>>2]|0;if((v|0)!=(y|0))k[j>>2]=v+(~((v+-4-y|0)>>>2)<<2);OBa(y);N=B;O=E;break a}}else ca=G;while(0);if(!ca)break;G=k[j>>2]|0;if((G|0)!=(ca|0))k[j>>2]=G+(~((G+-4-ca|0)>>>2)<<2);OBa(ca);break}G=Hc(4496)|0;E=M;B=k[n>>2]|0;if(!B){Q=E;R=G;D=36;break a}y=k[j>>2]|0;if((y|0)!=(B|0))k[j>>2]=y+(~((y+-4-B|0)>>>2)<<2);OBa(B);Q=E;R=G;D=36;break a}while(0)}j=b+60|0;C=k[j>>2]|0;F=k[b+64>>2]|0;c:do if((C|0)==(F|0))da=P;else{H=u;t=a+4|0;G=a+8|0;E=b;B=C;y=P;while(1){v=k[B>>2]|0;w=k[u>>2]|0;A=(w|0)==0;do if(!A){z=w;while(1){ea=k[z+16>>2]|0;if(v>>>0>>0)fa=z;else{if(ea>>>0>=v>>>0){ga=v;break}fa=z+4|0}z=k[fa>>2]|0;if(!z){ga=b;break}}z=ga;if(!A){ea=w;while(1){ha=k[ea+16>>2]|0;if(ga>>>0>>0){ia=k[ea>>2]|0;if(!ia){ja=ea;ka=ea;D=81;break}else la=ia}else{if(ha>>>0>=ga>>>0){ma=ea;D=87;break}ha=ea+4|0;ia=k[ha>>2]|0;if(!ia){na=ha;oa=ea;D=85;break}else la=ia}ea=la}if((D|0)==81){D=0;k[d>>2]=ka;qa=ja;ra=z;sa=ka;D=88;break}else if((D|0)==85){D=0;k[d>>2]=oa;qa=na;ra=z;sa=oa;D=88;break}else if((D|0)==87){D=0;k[d>>2]=ma;if(!ma){qa=d;ra=z;sa=ma;D=88;break}else{ta=ma;break}}}else{ua=z;D=86}}else{ua=E;D=86}while(0);if((D|0)==86){D=0;k[d>>2]=u;qa=u;ra=ua;sa=H;D=88}if((D|0)==88){D=0;x=0;w=Ba(563,28)|0;A=x;x=0;if(A&1)break;k[w+16>>2]=ra;k[w+20>>2]=0;k[w+24>>2]=0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=sa;k[qa>>2]=w;A=k[k[a>>2]>>2]|0;if(!A)wa=w;else{k[a>>2]=A;wa=k[qa>>2]|0}ui(k[t>>2]|0,wa);k[G>>2]=(k[G>>2]|0)+1;ta=w}k[L>>2]=k[ta+20>>2];x=0;w=Ta(575,m|0,k[B>>2]|0)|0;A=x;x=0;if(A&1)break;A=y&w;B=B+8|0;if((B|0)==(F|0)){da=A;break c}else y=A}y=Hc(4496)|0;Q=M;R=y;D=36;break a}while(0);if(!da){ya=0;r=c;return ya|0}F=k[u>>2]|0;do if(F){C=F;while(1){y=k[C+16>>2]|0;if(b>>>0>>0){B=k[C>>2]|0;if(!B){za=C;Aa=C;D=97;break}else Ca=B}else{if(y>>>0>=b>>>0){Da=C;D=103;break}y=C+4|0;B=k[y>>2]|0;if(!B){Ea=y;Fa=C;D=101;break}else Ca=B}C=Ca}if((D|0)==97){k[e>>2]=Aa;Ga=za;Ha=Aa;D=104;break}else if((D|0)==101){k[e>>2]=Fa;Ga=Ea;Ha=Fa;D=104;break}else if((D|0)==103){k[e>>2]=Da;if(!Da){Ga=e;Ha=Da;D=104;break}else{Ia=Da;break}}}else{k[e>>2]=u;Ga=u;Ha=u;D=104}while(0);if((D|0)==104){x=0;F=Ba(563,28)|0;C=x;x=0;if(C&1){D=35;break}k[F+16>>2]=J;k[F+20>>2]=0;k[F+24>>2]=0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=Ha;k[Ga>>2]=F;C=k[k[a>>2]>>2]|0;if(!C)Ja=F;else{k[a>>2]=C;Ja=k[Ga>>2]|0}ui(k[a+4>>2]|0,Ja);C=a+8|0;k[C>>2]=(k[C>>2]|0)+1;Ia=F}k[L>>2]=k[Ia+20>>2];x=0;xa(736,o|0,j|0);F=x;x=0;if(!(F&1)){F=k[o>>2]|0;C=o+4|0;B=k[C>>2]|0;do if((F|0)==(B|0)){Ka=F;La=1}else{y=u;G=a+4|0;t=a+8|0;H=p+4|0;E=p+8|0;A=p+12|0;w=p+16|0;v=p+17|0;ea=F;ia=1;while(1){ha=k[ea>>2]|0;Ma=ha;Na=k[u>>2]|0;do if(Na){Oa=Na;while(1){Pa=k[Oa+16>>2]|0;if(ha>>>0>>0){Qa=k[Oa>>2]|0;if(!Qa){Ra=Oa;Sa=Oa;D=120;break}else Ua=Qa}else{if(Pa>>>0>=ha>>>0){Va=Oa;D=126;break}Pa=Oa+4|0;Qa=k[Pa>>2]|0;if(!Qa){Wa=Pa;Xa=Oa;D=124;break}else Ua=Qa}Oa=Ua}if((D|0)==120){D=0;k[f>>2]=Sa;Ya=Ra;Za=Sa;D=127;break}else if((D|0)==124){D=0;k[f>>2]=Xa;Ya=Wa;Za=Xa;D=127;break}else if((D|0)==126){D=0;k[f>>2]=Va;if(!Va){Ya=f;Za=Va;D=127;break}else{_a=Va;break}}}else{k[f>>2]=u;Ya=u;Za=y;D=127}while(0);if((D|0)==127){D=0;x=0;Na=Ba(563,28)|0;Oa=x;x=0;if(Oa&1)break;k[Na+16>>2]=Ma;k[Na+20>>2]=0;k[Na+24>>2]=0;k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=Za;k[Ya>>2]=Na;Oa=k[k[a>>2]>>2]|0;if(!Oa)$a=Na;else{k[a>>2]=Oa;$a=k[Ya>>2]|0}ui(k[G>>2]|0,$a);k[t>>2]=(k[t>>2]|0)+1;_a=Na}k[L>>2]=k[_a+20>>2];Na=k[I>>2]|0;k[p>>2]=32708;k[H>>2]=Na;k[E>>2]=a;k[A>>2]=0;i[w>>0]=1;i[v>>0]=0;x=0;Na=Ta(575,p|0,ha|0)|0;Oa=x;x=0;if(Oa&1)break;Oa=ia&Na;ea=ea+4|0;if((ea|0)==(B|0)){ab=Oa;D=111;break}else ia=Oa}if((D|0)==111){Ka=k[o>>2]|0;La=ab;break}ia=Hc(4496)|0;ea=M;v=k[o>>2]|0;if(!v){N=ia;O=ea;break a}w=k[C>>2]|0;if((w|0)!=(v|0))k[C>>2]=w+(~((w+-4-v|0)>>>2)<<2);OBa(v);N=ia;O=ea;break a}while(0);B=Ka;if(Ka){F=k[C>>2]|0;if((F|0)!=(Ka|0))k[C>>2]=F+(~((F+-4-B|0)>>>2)<<2);OBa(Ka)}x=0;xa(590,q|0,j|0);B=x;x=0;if(!(B&1)){B=k[q>>2]|0;F=q+4|0;J=k[F>>2]|0;do if((B|0)==(J|0)){bb=B;cb=La}else{ea=u;ia=a+4|0;v=a+8|0;w=s+4|0;A=s+8|0;E=s+12|0;H=s+16|0;t=s+17|0;G=B;y=La;while(1){Oa=k[G>>2]|0;Na=Oa;z=k[u>>2]|0;do if(z){Qa=z;while(1){Pa=k[Qa+16>>2]|0;if(Oa>>>0>>0){db=k[Qa>>2]|0;if(!db){eb=Qa;gb=Qa;D=147;break}else ib=db}else{if(Pa>>>0>=Oa>>>0){jb=Qa;D=153;break}Pa=Qa+4|0;db=k[Pa>>2]|0;if(!db){kb=Pa;lb=Qa;D=151;break}else ib=db}Qa=ib}if((D|0)==147){D=0;k[h>>2]=gb;mb=eb;nb=gb;D=154;break}else if((D|0)==151){D=0;k[h>>2]=lb;mb=kb;nb=lb;D=154;break}else if((D|0)==153){D=0;k[h>>2]=jb;if(!jb){mb=h;nb=jb;D=154;break}else{ob=jb;break}}}else{k[h>>2]=u;mb=u;nb=ea;D=154}while(0);if((D|0)==154){D=0;x=0;z=Ba(563,28)|0;ha=x;x=0;if(ha&1)break;k[z+16>>2]=Na;k[z+20>>2]=0;k[z+24>>2]=0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=nb;k[mb>>2]=z;ha=k[k[a>>2]>>2]|0;if(!ha)pb=z;else{k[a>>2]=ha;pb=k[mb>>2]|0}ui(k[ia>>2]|0,pb);k[v>>2]=(k[v>>2]|0)+1;ob=z}k[L>>2]=k[ob+20>>2];z=k[I>>2]|0;ha=k[Oa+60>>2]|0;k[s>>2]=32708;k[w>>2]=z;k[A>>2]=a;k[E>>2]=ha;i[H>>0]=1;i[t>>0]=0;x=0;ha=Ta(575,s|0,Oa|0)|0;z=x;x=0;if(z&1)break;z=y&ha;G=G+4|0;if((G|0)==(J|0)){qb=z;D=139;break}else y=z}if((D|0)==139){bb=k[q>>2]|0;cb=qb;break}y=Hc(4496)|0;G=M;t=k[q>>2]|0;if(!t){N=y;O=G;break a}H=k[F>>2]|0;if((H|0)!=(t|0))k[F>>2]=H+(~((H+-4-t|0)>>>2)<<2);OBa(t);N=y;O=G;break a}while(0);if(!bb){ya=cb;r=c;return ya|0}J=k[F>>2]|0;if((J|0)!=(bb|0))k[F>>2]=J+(~((J+-4-bb|0)>>>2)<<2);OBa(bb);ya=cb;r=c;return ya|0}else D=35}else D=35}else D=35}while(0);if((D|0)==35){ya=Hc(4496)|0;Q=M;R=ya;D=36}if((D|0)==36){N=R;O=Q}if((O|0)!=(hf(4496)|0)){rb=N;sb=O;Sc(rb|0)}me(N|0)|0;N=k[a+16>>2]|0;if((k[N>>2]|0)!=(k[N+4>>2]|0)){ge();r=c;return 0}x=0;hb(46);x=0;c=Hc()|0;N=M;x=0;hb(45);a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}else{rb=c;sb=N;Sc(rb|0)}return 0}function g$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;c=r;r=r+272|0;d=c+268|0;e=c+264|0;f=c+260|0;g=c+248|0;h=c+224|0;i=c+168|0;j=c+152|0;l=c+96|0;m=c+84|0;n=c+72|0;o=c+236|0;p=c+16|0;q=c;k[h>>2]=h;s=h+4|0;k[s>>2]=h;t=h+8|0;k[t>>2]=0;k[g>>2]=g;u=g+4|0;k[u>>2]=g;v=g+8|0;k[v>>2]=0;x=0;xa(777,g|0,h|0);w=x;x=0;if(w&1){w=Hc()|0;y=M;if((k[v>>2]|0)!=0?(z=k[u>>2]|0,A=(k[g>>2]|0)+4|0,B=k[z>>2]|0,k[B+4>>2]=k[A>>2],k[k[A>>2]>>2]=B,k[v>>2]=0,(z|0)!=(g|0)):0){B=z;do{z=B;B=k[B+4>>2]|0;A=z+8|0;C=z+16|0;if((k[C>>2]|0)!=0?(D=k[z+12>>2]|0,E=(k[A>>2]|0)+4|0,F=k[D>>2]|0,k[F+4>>2]=k[E>>2],k[k[E>>2]>>2]=F,k[C>>2]=0,(D|0)!=(A|0)):0){C=D;do{D=C;C=k[C+4>>2]|0;OBa(D)}while((C|0)!=(A|0))}OBa(z)}while((B|0)!=(g|0))}if(!(k[t>>2]|0)){G=w;H=y;Sc(G|0)}B=k[s>>2]|0;A=(k[h>>2]|0)+4|0;C=k[B>>2]|0;k[C+4>>2]=k[A>>2];k[k[A>>2]>>2]=C;k[t>>2]=0;if((B|0)==(h|0)){G=w;H=y;Sc(G|0)}else I=B;do{B=I;I=k[I+4>>2]|0;OBa(B)}while((I|0)!=(h|0));G=w;H=y;Sc(G|0)}if((k[t>>2]|0)!=0?(y=k[s>>2]|0,s=(k[h>>2]|0)+4|0,w=k[y>>2]|0,k[w+4>>2]=k[s>>2],k[k[s>>2]>>2]=w,k[t>>2]=0,(y|0)!=(h|0)):0){t=y;do{y=t;t=k[t+4>>2]|0;OBa(y)}while((t|0)!=(h|0))}h=k[b+48>>2]|0;t=k[b+52>>2]|0;a:do if((h|0)!=(t|0)){y=i+20|0;w=i+36|0;s=i+8|0;I=y+-20|0;B=y+16|0;C=i+24|0;A=i+36|0;D=i+40|0;F=l+20|0;E=l+36|0;J=l+8|0;K=F+-20|0;L=F+16|0;N=l+24|0;O=l+36|0;P=l+40|0;Q=n+4|0;R=n+8|0;S=h;b:while(1){T=k[(k[S>>2]|0)+24>>2]|0;x=0;U=Ba(k[(k[T>>2]|0)+16>>2]|0,T|0)|0;V=x;x=0;if(V&1){W=18;break}V=k[U+12>>2]|0;if(V){U=iDa(V,4520,5312,0)|0;V=U;if(!U){X=V;W=24}else Y=V}else{X=0;W=24}if((W|0)==24){W=0;x=0;fb(140,j|0,243283,18);V=x;x=0;if(V&1){W=18;break}x=0;fb(273,i|0,T|0,j|0);V=x;x=0;if(V&1){W=33;break}x=0;xa(778,a|0,i|0);V=x;x=0;if(V&1){W=34;break}k[y>>2]=31332;k[i>>2]=31296;k[w>>2]=31356;K2a(s);k[y>>2]=31388;k[I>>2]=31416;k[B>>2]=31440;K2a(C);k[A>>2]=20796;V=k[D>>2]|0;if(V){x=0;U=Ba(k[(k[V>>2]|0)+16>>2]|0,V|0)|0;V=x;x=0;if(V&1){W=31;break}if(U)k[D>>2]=0}K2a(j);Y=X}U=k[g>>2]|0;x=0;V=Ba(563,12)|0;Z=x;x=0;if(Z&1){W=18;break}k[V+8>>2]=Y;k[V>>2]=U+8;Z=U+12|0;_=k[Z>>2]|0;k[V+4>>2]=_;k[_>>2]=V;k[Z>>2]=V;V=U+16|0;k[V>>2]=(k[V>>2]|0)+1;x=0;V=Ba(k[(k[Y>>2]|0)+16>>2]|0,Y|0)|0;U=x;x=0;if(U&1){W=18;break}U=V+36|0;Z=k[U>>2]|0;_=V+40|0;V=k[_>>2]|0;if((Z|0)==(V|0)){x=0;fb(140,m|0,243302,64);$=x;x=0;if($&1){W=18;break}x=0;fb(273,l|0,T|0,m|0);T=x;x=0;if(T&1){W=53;break}x=0;xa(778,a|0,l|0);T=x;x=0;if(T&1){W=54;break}k[F>>2]=31332;k[l>>2]=31296;k[E>>2]=31356;K2a(J);k[F>>2]=31388;k[K>>2]=31416;k[L>>2]=31440;K2a(N);k[O>>2]=20796;T=k[P>>2]|0;if(T){x=0;$=Ba(k[(k[T>>2]|0)+16>>2]|0,T|0)|0;T=x;x=0;if(T&1){W=51;break}if($)k[P>>2]=0}K2a(m);aa=k[U>>2]|0;ba=k[_>>2]|0}else{aa=Z;ba=V}k[n>>2]=n;k[Q>>2]=n;k[R>>2]=0;if((aa|0)==(ba|0)){ca=0;da=n}else{V=aa;Z=n;_=0;while(1){x=0;U=Ba(563,12)|0;$=x;x=0;if($&1){ea=Z;fa=_;W=64;break b}k[U+8>>2]=k[V>>2];k[U+4>>2]=n;k[U>>2]=Z;k[Z+4>>2]=U;k[n>>2]=U;$=_+1|0;k[R>>2]=$;V=V+4|0;if((V|0)==(ba|0)){ga=U;ha=$;break}else{Z=U;_=$}}ca=ha;da=ga}x=0;_=Ba(563,20)|0;Z=x;x=0;if(Z&1){ia=da;ja=ca;W=72;break}Z=_+8|0;k[Z>>2]=Z;k[_+12>>2]=Z;V=_+16|0;k[V>>2]=0;if(ca){$=k[Q>>2]|0;U=da+4|0;T=k[$>>2]|0;k[T+4>>2]=k[U>>2];k[k[U>>2]>>2]=T;T=k[Z>>2]|0;k[T+4>>2]=$;k[$>>2]=T;k[Z>>2]=da;k[U>>2]=Z;k[V>>2]=ca;k[R>>2]=0}k[_>>2]=g;V=k[u>>2]|0;k[_+4>>2]=V;k[V>>2]=_;k[u>>2]=_;k[v>>2]=(k[v>>2]|0)+1;S=S+8|0;if((S|0)==(t|0)){ka=g;W=14;break a}}if((W|0)==18){S=Hc()|0;la=M;ma=S;W=20;break}else if((W|0)==31){S=Hc(0)|0;Fg(S)}else if((W|0)==33){S=Hc()|0;na=S;oa=M;W=40}else if((W|0)==34){S=Hc()|0;z=M;k[y>>2]=31332;k[i>>2]=31296;k[w>>2]=31356;K2a(s);k[y>>2]=31388;k[I>>2]=31416;k[B>>2]=31440;K2a(C);k[A>>2]=20796;_=k[D>>2]|0;if(_){x=0;V=Ba(k[(k[_>>2]|0)+16>>2]|0,_|0)|0;_=x;x=0;if(_&1){_=Hc(0)|0;Fg(_)}if(V)k[D>>2]=0}na=S;oa=z;W=40}else if((W|0)==51){z=Hc(0)|0;Fg(z)}else if((W|0)==53){z=Hc()|0;pa=z;qa=M;W=60}else if((W|0)==54){z=Hc()|0;S=M;k[F>>2]=31332;k[l>>2]=31296;k[E>>2]=31356;K2a(J);k[F>>2]=31388;k[K>>2]=31416;k[L>>2]=31440;K2a(N);k[O>>2]=20796;V=k[P>>2]|0;if(V){x=0;_=Ba(k[(k[V>>2]|0)+16>>2]|0,V|0)|0;V=x;x=0;if(V&1){V=Hc(0)|0;Fg(V)}if(_)k[P>>2]=0}pa=z;qa=S;W=60}else if((W|0)==64){S=Hc()|0;z=M;if(!fa){la=z;ma=S;W=20;break}_=k[Q>>2]|0;V=ea+4|0;Z=k[_>>2]|0;k[Z+4>>2]=k[V>>2];k[k[V>>2]>>2]=Z;k[R>>2]=0;if((_|0)==(n|0)){la=z;ma=S;W=20;break}else ra=_;while(1){_=ra;ra=k[ra+4>>2]|0;OBa(_);if((ra|0)==(n|0)){la=z;ma=S;W=20;break a}}}else if((W|0)==72){S=Hc()|0;z=M;if(!ja){sa=S;ta=z;break}P=k[Q>>2]|0;O=ia+4|0;N=k[P>>2]|0;k[N+4>>2]=k[O>>2];k[k[O>>2]>>2]=N;k[R>>2]=0;if((P|0)==(n|0)){sa=S;ta=z;break}else ua=P;while(1){P=ua;ua=k[ua+4>>2]|0;OBa(P);if((ua|0)==(n|0)){sa=S;ta=z;break a}}}if((W|0)==40){K2a(j);sa=na;ta=oa;break}else if((W|0)==60){K2a(m);sa=pa;ta=qa;break}}else{ka=g;W=14}while(0);do if((W|0)==14){qa=k[ka>>2]|0;x=0;pa=Ba(563,12)|0;m=x;x=0;if(!(m&1)?(k[pa+8>>2]=b,k[pa>>2]=qa+8,m=qa+12|0,oa=k[m>>2]|0,k[pa+4>>2]=oa,k[oa>>2]=pa,k[m>>2]=pa,pa=qa+16|0,k[pa>>2]=(k[pa>>2]|0)+1,x=0,xa(779,o|0,g|0),pa=x,x=0,!(pa&1)):0){pa=o+4|0;c:do if((k[o>>2]|0)==(k[pa>>2]|0)){x=0;fb(140,q|0,243367,45);qa=x;x=0;if(qa&1)W=87;else{x=0;fb(273,p|0,b|0,q|0);qa=x;x=0;do if(!(qa&1)){x=0;xa(778,a|0,p|0);m=x;x=0;if(m&1){m=Hc()|0;oa=M;na=p+20|0;k[na>>2]=31332;k[p>>2]=31296;k[p+36>>2]=31356;K2a(p+8|0);k[na>>2]=31388;k[na+-20>>2]=31416;k[na+16>>2]=31440;K2a(p+24|0);k[p+36>>2]=20796;na=p+40|0;j=k[na>>2]|0;if(j){x=0;n=Ba(k[(k[j>>2]|0)+16>>2]|0,j|0)|0;j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}if(n)k[na>>2]=0}va=m;wa=oa;break}else{oa=p+20|0;k[oa>>2]=31332;k[p>>2]=31296;k[p+36>>2]=31356;K2a(p+8|0);k[oa>>2]=31388;k[oa+-20>>2]=31416;k[oa+16>>2]=31440;K2a(p+24|0);k[p+36>>2]=20796;oa=p+40|0;m=k[oa>>2]|0;if(m){x=0;na=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;m=x;x=0;if(m&1){m=Hc(0)|0;Fg(m)}if(na)k[oa>>2]=0}K2a(q);W=97;break c}}else{oa=Hc()|0;va=oa;wa=M}while(0);K2a(q);ya=va;za=wa}}else W=97;while(0);d:do if((W|0)==97){x=0;qa=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;oa=x;x=0;if(!(oa&1)){oa=qa+36|0;if((oa|0)!=(o|0)?(x=0,fb(274,oa|0,k[o>>2]|0,k[pa>>2]|0),oa=x,x=0,oa&1):0){W=87;break}x=0;oa=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;qa=x;x=0;if(!(qa&1)){qa=oa+48|0;na=k[o>>2]|0;m=na+4|0;n=k[pa>>2]|0;do if((m|0)!=(n|0)){j=oa+52|0;ua=oa+52|0;ia=oa+56|0;ja=m;while(1){x=0;ra=Ba(563,20)|0;ea=x;x=0;if(ea&1){W=86;break}ea=ra+16|0;k[ea>>2]=k[ja>>2];k[f>>2]=j;k[d>>2]=k[f>>2];fa=XU(qa,d,e,ea)|0;ea=k[fa>>2]|0;if(ea){if((ea|0)!=(ra|0))OBa(ra)}else{ea=k[e>>2]|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=ea;k[fa>>2]=ra;ea=k[k[qa>>2]>>2]|0;if(!ea)Aa=ra;else{k[qa>>2]=ea;Aa=k[fa>>2]|0}ui(k[ua>>2]|0,Aa);k[ia>>2]=(k[ia>>2]|0)+1}ja=ja+4|0;if((ja|0)==(n|0)){W=111;break}}if((W|0)==86){ja=Hc()|0;Ca=ja;Da=M;W=88;break d}else if((W|0)==111){Ea=k[o>>2]|0;break}}else Ea=na;while(0);na=Ea;if(Ea){n=k[pa>>2]|0;if((n|0)!=(Ea|0))k[pa>>2]=n+(~((n+-4-na|0)>>>2)<<2);OBa(Ea)}if(!(k[v>>2]|0)){r=c;return}na=k[u>>2]|0;n=(k[ka>>2]|0)+4|0;qa=k[na>>2]|0;k[qa+4>>2]=k[n>>2];k[k[n>>2]>>2]=qa;k[v>>2]=0;if((na|0)==(g|0)){r=c;return}else Fa=na;do{na=Fa;Fa=k[Fa+4>>2]|0;qa=na+8|0;n=na+16|0;if((k[n>>2]|0)!=0?(m=k[na+12>>2]|0,oa=(k[qa>>2]|0)+4|0,ja=k[m>>2]|0,k[ja+4>>2]=k[oa>>2],k[k[oa>>2]>>2]=ja,k[n>>2]=0,(m|0)!=(qa|0)):0){n=m;do{m=n;n=k[n+4>>2]|0;OBa(m)}while((n|0)!=(qa|0))}OBa(na)}while((Fa|0)!=(g|0));r=c;return}else W=87}else W=87}while(0);if((W|0)==87){qa=Hc()|0;Ca=qa;Da=M;W=88}if((W|0)==88){ya=Ca;za=Da}qa=k[o>>2]|0;if(!qa){sa=ya;ta=za;break}n=k[pa>>2]|0;if((n|0)!=(qa|0))k[pa>>2]=n+(~((n+-4-qa|0)>>>2)<<2);OBa(qa);sa=ya;ta=za;break}qa=Hc()|0;la=M;ma=qa;W=20}while(0);if((W|0)==20){sa=ma;ta=la}if(!(k[v>>2]|0)){G=sa;H=ta;Sc(G|0)}la=k[u>>2]|0;u=(k[g>>2]|0)+4|0;ma=k[la>>2]|0;k[ma+4>>2]=k[u>>2];k[k[u>>2]>>2]=ma;k[v>>2]=0;if((la|0)==(g|0)){G=sa;H=ta;Sc(G|0)}else Ga=la;do{la=Ga;Ga=k[Ga+4>>2]|0;v=la+8|0;ma=la+16|0;if((k[ma>>2]|0)!=0?(u=k[la+12>>2]|0,W=(k[v>>2]|0)+4|0,za=k[u>>2]|0,k[za+4>>2]=k[W>>2],k[k[W>>2]>>2]=za,k[ma>>2]=0,(u|0)!=(v|0)):0){ma=u;do{u=ma;ma=k[ma+4>>2]|0;OBa(u)}while((ma|0)!=(v|0))}OBa(la)}while((Ga|0)!=(g|0));G=sa;H=ta;Sc(G|0)}function h$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;if(f){g=e;h=f;a:while(1){f=h;while(1){if((k[f+16>>2]|0)>>>0>=b>>>0){i=f;break}f=k[f+4>>2]|0;if(!f){j=g;break a}}h=k[i>>2]|0;if(!h){j=i;break}else g=i}if((j|0)!=(e|0)?b>>>0>=(k[j+16>>2]|0)>>>0:0)l=j;else m=8}else m=8;if((m|0)==8)l=e;q2a(d,329672,0);x=0;pa(57,(l|0)!=(e|0)|0,d|0,287,242938,243413);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}K2a(d);d=k[l+20>>2]|0;l=k[d+8>>2]|0;e=d+12|0;if((l|0)==(e|0)){r=c;return}d=a+12|0;a=l;while(1){l=k[a+28>>2]|0;m=k[a+32>>2]|0;if((l|0)!=(m|0)){j=l;do{l=k[j>>2]|0;if((k[l+36>>2]|0)==(b|0)?Vf[k[(k[l>>2]|0)+20>>2]&1023](l)|0:0){i=k[l+32>>2]|0;if(!i)n=Vf[k[(k[l>>2]|0)+36>>2]&1023](l)|0;else n=i;if((n|0)>1)H1(k[d>>2]|0,k[j>>2]|0,0,0,0)|0}j=j+4|0}while((j|0)!=(m|0))}m=k[a+4>>2]|0;if(!m){j=a;while(1){i=k[j+8>>2]|0;if((k[i>>2]|0)==(j|0)){o=i;break}else j=i}}else{j=m;while(1){i=k[j>>2]|0;if(!i){o=j;break}else j=i}}if((o|0)==(e|0))break;else a=o}r=c;return}function i$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+16|0;d=c+12|0;e=c;f=a+4|0;g=k[f>>2]|0;do if(g){if(!(k[g+16>>2]|0)){k[d>>2]=g;h=g;i=13;break}else j=g;while(1){l=k[j>>2]|0;if(!l){m=j;n=j;i=5;break}if(!(k[l+16>>2]|0)){o=l;p=l;i=8;break}else j=l}if((i|0)==5){k[d>>2]=n;q=m;s=n;i=9;break}else if((i|0)==8){k[d>>2]=o;if(!o){q=d;s=o;i=9;break}else{h=p;i=13;break}}}else{k[d>>2]=f;q=f;s=f;i=9}while(0);if((i|0)==9){x=0;f=Ba(563,28)|0;d=x;x=0;if(d&1)i=17;else{k[f+16>>2]=0;k[f+20>>2]=0;k[f+24>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=s;k[q>>2]=f;s=k[k[a>>2]>>2]|0;if(!s)t=f;else{k[a>>2]=s;t=k[q>>2]|0}ui(k[a+4>>2]|0,t);t=a+8|0;k[t>>2]=(k[t>>2]|0)+1;h=f;i=13}}do if((i|0)==13){x=0;Va(95,k[h+20>>2]|0,b|0,0,0,1)|0;f=x;x=0;if(!(f&1)?(f=k[b+36>>2]|0,x=0,fb(140,e|0,243518,41),t=x,x=0,!(t&1)):0){x=0;pa(57,(f|0)==0|0,e|0,212,242938,243560);f=x;x=0;if(f&1){f=Hc(4496)|0;t=M;K2a(e);u=t;v=f;break}K2a(e);w=1;r=c;return w|0}else i=17}while(0);if((i|0)==17){i=Hc(4496)|0;u=M;v=i}if((u|0)!=(hf(4496)|0)){y=u;z=v;Sc(z|0)}me(v|0)|0;v=k[a+16>>2]|0;if((k[v>>2]|0)!=(k[v+4>>2]|0)){ge();w=0;r=c;return w|0}x=0;hb(46);x=0;w=Hc()|0;c=M;x=0;hb(45);v=x;x=0;if(v&1){v=Hc(0)|0;Fg(v)}else{y=c;z=w;Sc(z|0)}return 0}function j$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b+4|0;b=k[e>>2]|0;if(b){f=e;g=b;a:while(1){b=g;while(1){if((k[b+16>>2]|0)>>>0>=d>>>0){h=b;break}b=k[b+4>>2]|0;if(!b){i=f;break a}}g=k[h>>2]|0;if(!g){i=h;break}else f=h}if((i|0)!=(e|0)?(k[i+16>>2]|0)>>>0<=d>>>0:0){I1(a,k[i+20>>2]|0,c,0);return}}k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}function k$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;I1(a,k[b+12>>2]|0,c,d);return}function l$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;d=r;r=r+48|0;e=d+12|0;f=d+24|0;g=d;h=b+4|0;i=(k[b>>2]|0)!=(k[h>>2]|0);q2a(e,329672,0);x=0;pa(57,i|0,e|0,238,242938,243655);i=x;x=0;if(i&1){i=Hc()|0;j=M;K2a(e);l=j;m=i;Sc(m|0)}K2a(e);I1(f,k[a+12>>2]|0,k[b>>2]|0,c);c=k[b>>2]|0;e=f+4|0;a:do if((((k[h>>2]|0)-c|0)/12|0)>>>0>1){i=a+4|0;j=f+8|0;n=g+4|0;o=g+8|0;p=k[f>>2]|0;q=c;s=p;t=p;p=1;b:while(1){u=s;v=q;w=k[e>>2]|0;if((w-s|0)!=4){y=w;z=s;A=t;B=35;break a}C=k[i>>2]|0;if(!C){D=t;E=w;B=38;break}F=k[u>>2]|0;G=C;while(1){H=k[G+16>>2]|0;if(F>>>0>>0)I=G;else{if(H>>>0>=F>>>0)break;I=G+4|0}G=k[I>>2]|0;if(!G){J=t;K=w;B=37;break b}}w=k[u>>2]|0;G=C;while(1){F=k[G+16>>2]|0;if(w>>>0>>0){H=k[G>>2]|0;if(!H){B=26;break b}else L=H}else{if(F>>>0>=w>>>0){N=G;break}F=k[G+4>>2]|0;if(!F){B=26;break b}else L=F}G=L}if(!N){B=26;break}x=0;nb(120,g|0,k[N+20>>2]|0,v+(p*12|0)|0,0);G=x;x=0;if(G&1){B=14;break}G=k[f>>2]|0;w=G;if(G){C=k[e>>2]|0;if((C|0)!=(G|0))k[e>>2]=C+(~((C+-4-w|0)>>>2)<<2);OBa(G);k[j>>2]=0;k[e>>2]=0;k[f>>2]=0}G=k[g>>2]|0;k[f>>2]=G;w=k[n>>2]|0;k[e>>2]=w;k[j>>2]=k[o>>2];k[o>>2]=0;k[n>>2]=0;k[g>>2]=0;p=p+1|0;q=k[b>>2]|0;C=G;if(p>>>0>=(((k[h>>2]|0)-q|0)/12|0)>>>0){y=w;z=G;A=C;B=35;break a}else{s=G;t=C}}do if((B|0)==14){t=Hc()|0;O=M;P=t}else if((B|0)==26){t=Rd(8)|0;x=0;xa(671,t|0,296399);s=x;x=0;if(s&1){s=Hc()|0;q=M;Fc(t|0);O=q;P=s;break}else{k[t>>2]=47544;x=0;fb(149,t|0,9024,933);x=0;t=Hc()|0;O=M;P=t;break}}else if((B|0)==37){Q=0;R=K;S=J;break a}else if((B|0)==38){Q=0;R=E;S=D;break a}while(0);t=k[f>>2]|0;if(!t){l=O;m=P;Sc(m|0)}s=k[e>>2]|0;if((s|0)!=(t|0))k[e>>2]=s+(~((s+-4-t|0)>>>2)<<2);OBa(t);l=O;m=P;Sc(m|0)}else{t=k[f>>2]|0;y=k[e>>2]|0;z=t;A=t;B=35}while(0);if((B|0)==35){B=y;if((y-z|0)==4){Q=k[A>>2]|0;R=B;S=A}else{Q=0;R=B;S=A}}if(!S){r=d;return Q|0}if((R|0)!=(S|0))k[f+4>>2]=R+(~((R+-4-S|0)>>>2)<<2);OBa(S);r=d;return Q|0}function m$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;e=r;r=r+256|0;f=e+168|0;g=e+64|0;h=e+52|0;i=e+80|0;j=e+40|0;l=e+28|0;m=e;n=e+16|0;o=d+4|0;p=(k[o>>2]|0)-(k[d>>2]|0)>>2>>>0>1;q2a(g,329672,0);x=0;pa(57,p|0,g|0,257,242938,243785);p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(g);s=p;t=q;Sc(s|0)}K2a(g);k[a>>2]=0;g=a+4|0;k[g>>2]=0;k[a+8>>2]=0;q=k[d>>2]|0;if((q|0)==(k[o>>2]|0)){r=e;return}d=i+36|0;p=j+4|0;u=a+8|0;v=c+8|0;w=m+8|0;y=c+16|0;z=m+12|0;A=c+20|0;c=l+4|0;B=q;a:while(1){q=k[B>>2]|0;x=0;fb(140,h|0,329672,0);C=x;x=0;if(C&1){D=37;break}x=0;pa(57,(q|0)!=0|0,h|0,262,242938,243785);q=x;x=0;if(q&1){D=39;break}K2a(h);q=iDa(k[B>>2]|0,4520,5424,0)|0;if(!q){D=9;break}x=0;fb(143,i|0,q|0,1);q=x;x=0;if(q&1){D=37;break}x=0;xa(591,l|0,i|0);q=x;x=0;if(q&1){D=41;break}x=0;fb(275,j|0,l|0,d|0);q=x;x=0;if(q&1){D=43;break}q=k[l>>2]|0;if(q){C=k[c>>2]|0;if((C|0)==(q|0))E=q;else{F=C;while(1){C=F+-8|0;k[c>>2]=C;G=k[F+-4>>2]|0;if(!G)H=C;else{j0a(G);H=k[c>>2]|0}if((H|0)==(q|0))break;else F=H}E=k[l>>2]|0}OBa(E)}F=k[j>>2]|0;q=k[p>>2]|0;if((F|0)==(q|0))I=F;else{G=F;do{F=k[G>>2]|0;C=k[G+4>>2]|0;J=(C|0)==0;if(!J)h0a(C);if(!F){F=v;K=k[F+4>>2]|0;L=m;k[L>>2]=k[F>>2];k[L+4>>2]=K;k[w>>2]=k[y>>2];K=k[A>>2]|0;k[z>>2]=K;L=(K|0)==0;if(!L)h0a(K);x=0;fb(140,n|0,243971,45);F=x;x=0;if(F&1){N=C;O=L;P=J;Q=K;D=59;break a}x=0;fb(276,b|0,m|0,n|0);F=x;x=0;if(F&1){R=L;S=C;T=J;U=K;D=60;break a}K2a(n);if(!L)j0a(K)}if(!J)j0a(C);G=G+8|0}while((G|0)!=(q|0));I=k[j>>2]|0}if(I){q=k[p>>2]|0;if((q|0)==(I|0))V=I;else{G=q;while(1){q=G+-8|0;k[p>>2]=q;C=k[G+-4>>2]|0;if(!C)W=q;else{j0a(C);W=k[p>>2]|0}if((W|0)==(I|0))break;else G=W}V=k[j>>2]|0}OBa(V)}G=k[g>>2]|0;C=k[a>>2]|0;b:do if((C|0)==(G|0))X=G;else{q=C;while(1){J=iDa(k[q>>2]|0,4520,5424,0)|0;if(!J){D=31;break a}x=0;fb(143,f|0,J|0,1);J=x;x=0;if(J&1){D=40;break a}x=0;J=Ta(568,i|0,f|0)|0;K=x;x=0;if(K&1){D=34;break a}Dg(f);if(J){X=q;break b}q=q+4|0;if((q|0)==(G|0)){X=G;break}}}while(0);do if((G|0)==(X|0)){C=k[g>>2]|0;if((C|0)==(k[u>>2]|0)){x=0;xa(753,a|0,B|0);q=x;x=0;if(q&1){D=41;break a}else break}else{k[C>>2]=k[B>>2];k[g>>2]=(k[g>>2]|0)+4;break}}while(0);Dg(i);B=B+4|0;if((B|0)==(k[o>>2]|0)){D=4;break}}switch(D|0){case 4:{r=e;return}case 9:{x=0;hb(49);x=0;Y=Hc()|0;Z=M;D=38;break}case 31:{x=0;hb(49);x=0;e=Hc()|0;_=M;$=e;D=42;break}case 34:{e=Hc()|0;o=M;Dg(f);_=o;$=e;D=42;break}case 37:{Y=Hc()|0;Z=M;D=38;break}case 39:{e=Hc()|0;o=M;K2a(h);aa=e;ba=o;break}case 40:{o=Hc()|0;_=M;$=o;D=42;break}case 41:{o=Hc()|0;_=M;$=o;D=42;break}case 43:{o=Hc()|0;e=M;h=k[l>>2]|0;if(!h){ca=o;da=e;D=80}else{f=k[c>>2]|0;if((f|0)==(h|0))ea=h;else{B=f;while(1){f=B+-8|0;k[c>>2]=f;u=k[B+-4>>2]|0;if(!u)fa=f;else{j0a(u);fa=k[c>>2]|0}if((fa|0)==(h|0))break;else B=fa}ea=k[l>>2]|0}OBa(ea);ca=o;da=e;D=80}break}case 59:{ga=Hc()|0;ha=M;ia=Q;ja=N;ka=O;la=P;D=61;break}case 60:{P=Hc()|0;O=M;K2a(n);ga=P;ha=O;ia=U;ja=S;ka=R;la=T;D=61;break}}if((D|0)==38){aa=Y;ba=Z}else if((D|0)==42){ca=$;da=_;D=80}else if((D|0)==61){if(!ka)j0a(ia);if(!la)j0a(ja);ja=k[j>>2]|0;if(!ja){ca=ga;da=ha;D=80}else{la=k[p>>2]|0;if((la|0)==(ja|0))ma=ja;else{ia=la;while(1){la=ia+-8|0;k[p>>2]=la;ka=k[ia+-4>>2]|0;if(!ka)na=la;else{j0a(ka);na=k[p>>2]|0}if((na|0)==(ja|0))break;else ia=na}ma=k[j>>2]|0}OBa(ma);ca=ga;da=ha;D=80}}if((D|0)==80){Dg(i);aa=ca;ba=da}da=k[a>>2]|0;if(!da){s=aa;t=ba;Sc(s|0)}a=k[g>>2]|0;if((a|0)!=(da|0))k[g>>2]=a+(~((a+-4-da|0)>>>2)<<2);OBa(da);s=aa;t=ba;Sc(s|0)}function n$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+80|0;e=d+56|0;f=d;g=d+16|0;d=b;h=k[d+4>>2]|0;i=f;k[i>>2]=k[d>>2];k[i+4>>2]=h;k[f+8>>2]=k[b+8>>2];h=k[b+12>>2]|0;k[f+12>>2]=h;b=(h|0)==0;if(!b)h0a(h);x=0;fb(272,a|0,f|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;f=M;if(b){j=f;l=c;Sc(l|0)}j0a(h);j=f;l=c;Sc(l|0)}if(!b)j0a(h);h=g;b=h+36|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(b|0));h=g+20|0;b=g+24|0;k[b>>2]=0;k[g+28>>2]=0;k[g+32>>2]=0;k[g+36>>2]=-1;c=g+4|0;f=g+8|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[g+4>>2]=31624;k[g>>2]=31588;k[h>>2]=31648;x=0;nb(114,g|0,244017,242938,405);x=0;g=Hc()|0;e=M;k[c>>2]=31680;k[c+-4>>2]=31708;k[c+16>>2]=31732;K2a(f);k[h>>2]=20796;h=k[b>>2]|0;if(h){x=0;f=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}if(f)k[b>>2]=0}j=e;l=g;Sc(l|0)}function o$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+64|0;d=c+40|0;e=c;q$(a,b);b=e;a=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(a|0));b=e+20|0;a=e+24|0;k[a>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;c=e+4|0;f=e+8|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=31624;k[e>>2]=31588;k[b>>2]=31648;x=0;nb(114,e|0,244123,242938,416);x=0;e=Hc()|0;k[c>>2]=31680;k[c+-4>>2]=31708;k[c+16>>2]=31732;K2a(f);k[b>>2]=20796;b=k[a>>2]|0;if(!b)Sc(e|0);x=0;f=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!f)Sc(e|0);k[a>>2]=0;Sc(e|0)}function p$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;f=r;r=r+80|0;g=f+56|0;h=f+40|0;i=f+24|0;j=f+8|0;l=f;m=KBa(68)|0;k[m+4>>2]=0;k[m+8>>2]=0;k[m>>2]=31248;n=m+12|0;x=0;xa(731,n|0,0);o=x;x=0;if(o&1){o=Hc()|0;c0a(m);OBa(m);Sc(o|0)}o=n;k[g>>2]=31456;p=b;q=k[p+4>>2]|0;s=g+4|0;k[s>>2]=k[p>>2];k[s+4>>2]=q;k[g+12>>2]=k[b+8>>2];q=k[b+12>>2]|0;k[g+16>>2]=q;b=(q|0)==0;if(!b)h0a(q);x=0;s=Ta(566,n|0,g|0)|0;n=x;x=0;if(!(n&1)?(k[h>>2]=21048,n=h+4|0,x=0,xa(604,n|0,c|0),c=x,x=0,!(c&1)):0){x=0;c=Ta(564,s|0,h|0)|0;s=x;x=0;if(!(s&1)){s=j+4|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;p=Fa(131,j|0,e|0,d|0)|0;d=x;x=0;do if(!(d&1)?(k[i>>2]=31476,x=0,xa(735,i+4|0,p|0),e=x,x=0,!(e&1)):0){x=0;Ta(567,c|0,i|0)|0;e=x;x=0;if(e&1){e=Hc()|0;t=M;k[i>>2]=31476;u=i+4|0;v=k[u>>2]|0;if(!v){w=t;y=e;break}z=i+8|0;A=k[z>>2]|0;if((A|0)==(v|0))B=v;else{C=A;do{A=C+-28|0;k[z>>2]=A;D=k[C+-4>>2]|0;if(D)j0a(D);K2a(A);C=k[z>>2]|0}while((C|0)!=(v|0));B=k[u>>2]|0}OBa(B);w=t;y=e;break}k[i>>2]=31476;v=i+4|0;C=k[v>>2]|0;if(C){z=i+8|0;A=k[z>>2]|0;if((A|0)==(C|0))E=C;else{D=A;do{A=D+-28|0;k[z>>2]=A;F=k[D+-4>>2]|0;if(F)j0a(F);K2a(A);D=k[z>>2]|0}while((D|0)!=(C|0));E=k[v>>2]|0}OBa(E)}C=k[j>>2]|0;if(C){D=k[s>>2]|0;if((D|0)==(C|0))G=C;else{z=D;do{D=z+-28|0;k[s>>2]=D;e=k[z+-4>>2]|0;if(e)j0a(e);K2a(D);z=k[s>>2]|0}while((z|0)!=(C|0));G=k[j>>2]|0}OBa(G)}k[h>>2]=21048;K2a(n);k[g>>2]=31456;if(!b)j0a(q);C=k[a+16>>2]|0;k[l>>2]=o;z=l+4|0;k[z>>2]=m;h0a(m);v=C+4|0;D=k[v>>2]|0;if(D>>>0<(k[C+8>>2]|0)>>>0){k[D>>2]=o;k[D+4>>2]=m;k[l>>2]=0;k[z>>2]=0;k[v>>2]=D+8;j0a(m);r=f;return}x=0;xa(732,C|0,l|0);C=x;x=0;if(C&1){C=Hc()|0;D=M;v=k[z>>2]|0;if(!v){H=D;I=C;j0a(m);Sc(I|0)}j0a(v);H=D;I=C;j0a(m);Sc(I|0)}else{C=k[z>>2]|0;if(!C){j0a(m);r=f;return}j0a(C);j0a(m);r=f;return}}else J=35;while(0);if((J|0)==35){J=Hc()|0;w=M;y=J}J=k[j>>2]|0;if(!J){K=w;L=y}else{f=k[s>>2]|0;if((f|0)==(J|0))N=J;else{l=f;do{f=l+-28|0;k[s>>2]=f;o=k[l+-4>>2]|0;if(o)j0a(o);K2a(f);l=k[s>>2]|0}while((l|0)!=(J|0));N=k[j>>2]|0}OBa(N);K=w;L=y}}else{y=Hc()|0;K=M;L=y}k[h>>2]=21048;K2a(n);O=K;P=L}else{L=Hc()|0;O=M;P=L}k[g>>2]=31456;if(b){H=O;I=P;j0a(m);Sc(I|0)}j0a(q);H=O;I=P;j0a(m);Sc(I|0)}function q$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=k[a+16>>2]|0;a=KBa(68)|0;k[a+4>>2]=0;k[a+8>>2]=0;k[a>>2]=31248;f=a+12|0;x=0;xa(780,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(a);OBa(a);Sc(b|0)}b=f;f=a;k[d>>2]=b;a=d+4|0;k[a>>2]=f;g=e+4|0;h=k[g>>2]|0;if(h>>>0<(k[e+8>>2]|0)>>>0){k[h>>2]=b;k[h+4>>2]=f;k[d>>2]=0;k[a>>2]=0;k[g>>2]=h+8;r=c;return}x=0;xa(732,e|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;e=k[a>>2]|0;if(!e)Sc(d|0);j0a(e);Sc(d|0)}else{d=k[a>>2]|0;if(!d){r=c;return}j0a(d);r=c;return}}function r$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=r;r=r+16|0;f=e;k[a>>2]=33560;k[a+4>>2]=b;k[a+8>>2]=c;k[a+12>>2]=0;k[a+16>>2]=d;d=k[b+4>>2]|0;a:do if(d){b=d;while(1){g=k[b+16>>2]|0;if(g>>>0>c>>>0){h=k[b>>2]|0;if(!h)break a;else i=h}else{if(g>>>0>=c>>>0){j=b;break}g=k[b+4>>2]|0;if(!g)break a;else i=g}b=i}if(j){b=(k[j+20>>2]|0)!=0;q2a(f,329672,0);x=0;pa(57,b|0,f|0,428,242938,244215);b=x;x=0;if(b&1){b=Hc()|0;K2a(f);Sc(b|0)}else{K2a(f);Tf[k[(k[c>>2]|0)+8>>2]&2047](c,a);r=e;return}}}while(0);e=Rd(8)|0;x=0;xa(671,e|0,296399);a=x;x=0;if(a&1){a=Hc()|0;Fc(e|0);Sc(a|0)}else{k[e>>2]=47544;Gf(e|0,9024,933)}}function s$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0;c=r;r=r+16|0;d=c+12|0;e=c;f=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+16|0;g=k[f>>2]|0;q2a(e,329672,0);x=0;pa(57,(g|0)!=0|0,e|0,435,242938,244419);f=x;x=0;if(f&1){f=Hc()|0;h=M;K2a(e);i=h;j=f;Sc(j|0)}K2a(e);e=a+4|0;f=k[e>>2]|0;h=g;l=f+4|0;m=k[l>>2]|0;do if(m){n=m;while(1){o=k[n+16>>2]|0;if(g>>>0>>0){p=k[n>>2]|0;if(!p){q=n;s=n;t=6;break}else u=p}else{if(o>>>0>=g>>>0){v=n;t=12;break}o=n+4|0;p=k[o>>2]|0;if(!p){w=o;y=n;t=10;break}else u=p}n=u}if((t|0)==6){k[d>>2]=s;z=q;A=s;t=13;break}else if((t|0)==10){k[d>>2]=y;z=w;A=y;t=13;break}else if((t|0)==12){k[d>>2]=v;if(!v){z=d;A=v;t=13;break}else{B=v;break}}}else{k[d>>2]=l;z=l;A=l;t=13}while(0);if((t|0)==13){l=KBa(28)|0;k[l+16>>2]=h;k[l+20>>2]=0;k[l+24>>2]=0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=A;k[z>>2]=l;A=k[k[f>>2]>>2]|0;if(!A)C=l;else{k[f>>2]=A;C=k[z>>2]|0}ui(k[f+4>>2]|0,C);C=f+8|0;k[C>>2]=(k[C>>2]|0)+1;B=l}if(!(k[B+20>>2]|0)){B=k[e>>2]|0;l=B+4|0;C=k[l>>2]|0;do if(C){f=C;while(1){z=k[f+16>>2]|0;if(g>>>0>>0){A=k[f>>2]|0;if(!A){D=f;E=f;t=21;break}else F=A}else{if(z>>>0>=g>>>0){G=f;t=27;break}z=f+4|0;A=k[z>>2]|0;if(!A){H=z;I=f;t=25;break}else F=A}f=F}if((t|0)==21){k[d>>2]=E;J=D;K=E;t=28;break}else if((t|0)==25){k[d>>2]=I;J=H;K=I;t=28;break}else if((t|0)==27){k[d>>2]=G;if(!G){J=d;K=G;t=28;break}else{L=B;N=G;break}}}else{k[d>>2]=l;J=l;K=l;t=28}while(0);if((t|0)==28){l=KBa(28)|0;k[l+16>>2]=h;k[l+20>>2]=0;k[l+24>>2]=0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=K;k[J>>2]=l;K=k[k[B>>2]>>2]|0;if(!K)O=l;else{k[B>>2]=K;O=k[J>>2]|0}ui(k[B+4>>2]|0,O);O=B+8|0;k[O>>2]=(k[O>>2]|0)+1;L=k[e>>2]|0;N=l}l=N+20|0;O=KBa(32)|0;B=L+4|0;J=k[B>>2]|0;do if(J){if(!(k[J+16>>2]|0)){k[d>>2]=J;P=J;break}else Q=J;while(1){K=k[Q>>2]|0;if(!K){R=Q;S=Q;t=35;break}if(!(k[K+16>>2]|0)){T=K;U=K;t=38;break}else Q=K}if((t|0)==35){k[d>>2]=S;V=R;W=S;t=39;break}else if((t|0)==38){k[d>>2]=T;if(!T){V=d;W=T;t=39;break}else{P=U;break}}}else{k[d>>2]=B;V=B;W=B;t=39}while(0);if((t|0)==39){x=0;B=Ba(563,28)|0;U=x;x=0;if(U&1){U=Hc()|0;T=M;OBa(O);i=T;j=U;Sc(j|0)}k[B+16>>2]=0;k[B+20>>2]=0;k[B+24>>2]=0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=W;k[V>>2]=B;W=k[k[L>>2]>>2]|0;if(!W)X=B;else{k[L>>2]=W;X=k[V>>2]|0}ui(k[L+4>>2]|0,X);X=L+8|0;k[X>>2]=(k[X>>2]|0)+1;P=B}B=k[P+20>>2]|0;k[O>>2]=0;k[O+4>>2]=B;B=O+8|0;P=O+12|0;k[P>>2]=0;k[O+16>>2]=0;k[B>>2]=P;X=O+20|0;L=O+24|0;k[L>>2]=0;k[O+28>>2]=0;k[X>>2]=L;L=O;x=0;V=Ba(563,16)|0;W=x;x=0;if(W&1){W=Hc()|0;Q$(X,0);Q$(B,k[P>>2]|0);OBa(O);Sc(W|0)}k[V+4>>2]=0;k[V+8>>2]=0;k[V>>2]=33928;k[V+12>>2]=L;k[l>>2]=L;L=N+24|0;N=k[L>>2]|0;k[L>>2]=V;if(N)j0a(N)}N=k[e>>2]|0;V=b;L=N+4|0;l=k[L>>2]|0;do if(l){W=l;while(1){O=k[W+16>>2]|0;if(b>>>0>>0){P=k[W>>2]|0;if(!P){Y=W;Z=W;t=53;break}else _=P}else{if(O>>>0>=b>>>0){$=W;t=59;break}O=W+4|0;P=k[O>>2]|0;if(!P){aa=O;ba=W;t=57;break}else _=P}W=_}if((t|0)==53){k[d>>2]=Z;ca=Y;da=Z;t=60;break}else if((t|0)==57){k[d>>2]=ba;ca=aa;da=ba;t=60;break}else if((t|0)==59){k[d>>2]=$;if(!$){ca=d;da=$;t=60;break}else{ea=N;fa=l;ga=$;break}}}else{k[d>>2]=L;ca=L;da=L;t=60}while(0);if((t|0)==60){L=KBa(28)|0;k[L+16>>2]=V;k[L+20>>2]=0;k[L+24>>2]=0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=da;k[ca>>2]=L;da=k[k[N>>2]>>2]|0;if(!da)ha=L;else{k[N>>2]=da;ha=k[ca>>2]|0}ui(k[N+4>>2]|0,ha);ha=N+8|0;k[ha>>2]=(k[ha>>2]|0)+1;ha=k[e>>2]|0;ea=ha;fa=k[ha+4>>2]|0;ga=L}L=ga+20|0;ha=ea+4|0;do if(fa){e=fa;while(1){N=k[e+16>>2]|0;if(g>>>0>>0){ca=k[e>>2]|0;if(!ca){ia=e;ja=e;t=67;break}else ka=ca}else{if(N>>>0>=g>>>0){la=e;t=73;break}N=e+4|0;ca=k[N>>2]|0;if(!ca){ma=N;na=e;t=71;break}else ka=ca}e=ka}if((t|0)==67){k[d>>2]=ja;oa=ia;qa=ja;t=74;break}else if((t|0)==71){k[d>>2]=na;oa=ma;qa=na;t=74;break}else if((t|0)==73){k[d>>2]=la;if(!la){oa=d;qa=la;t=74;break}else{ra=la;break}}}else{k[d>>2]=ha;oa=ha;qa=ha;t=74}while(0);if((t|0)==74){t=KBa(28)|0;k[t+16>>2]=h;k[t+20>>2]=0;k[t+24>>2]=0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=qa;k[oa>>2]=t;qa=k[k[ea>>2]>>2]|0;if(!qa)sa=t;else{k[ea>>2]=qa;sa=k[oa>>2]|0}ui(k[ea+4>>2]|0,sa);sa=ea+8|0;k[sa>>2]=(k[sa>>2]|0)+1;ra=t}t=k[ra+20>>2]|0;sa=k[ra+24>>2]|0;if(sa)h0a(sa);k[L>>2]=t;t=ga+24|0;ga=k[t>>2]|0;k[t>>2]=sa;if(!ga){t$(a,b,0);r=c;return 1}j0a(ga);t$(a,b,0);r=c;return 1}function t$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;d=r;r=r+80|0;e=d+68|0;f=d+56|0;g=d+16|0;h=d+44|0;i=d;j=d+32|0;l=a+4|0;m=k[l>>2]|0;n=a+8|0;o=m+4|0;p=k[o>>2]|0;do if(p){q=k[n>>2]|0;s=q;t=p;while(1){u=k[t+16>>2]|0;if(q>>>0>>0){v=k[t>>2]|0;if(!v){w=t;y=t;z=5;break}else A=v}else{if(u>>>0>=q>>>0){B=t;z=11;break}u=t+4|0;v=k[u>>2]|0;if(!v){C=u;D=t;z=9;break}else A=v}t=A}if((z|0)==5){k[e>>2]=y;E=w;F=s;G=y;z=12;break}else if((z|0)==9){k[e>>2]=D;E=C;F=s;G=D;z=12;break}else if((z|0)==11){k[e>>2]=B;if(!B){E=e;F=s;G=B;z=12;break}else{H=B;break}}}else{k[e>>2]=o;E=o;F=k[n>>2]|0;G=o;z=12}while(0);if((z|0)==12){o=KBa(28)|0;k[o+16>>2]=F;k[o+20>>2]=0;k[o+24>>2]=0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=G;k[E>>2]=o;G=k[k[m>>2]>>2]|0;if(!G)I=o;else{k[m>>2]=G;I=k[E>>2]|0}ui(k[m+4>>2]|0,I);I=m+8|0;k[I>>2]=(k[I>>2]|0)+1;H=o}o=k[H+20>>2]|0;a:do if(!(H1(o,b,0,(Vf[k[(k[b>>2]|0)+20>>2]&1023](b)|0)^1,0)|0)){H=k[l>>2]|0;I=H+4|0;m=k[I>>2]|0;do if(m){E=k[n>>2]|0;G=m;while(1){F=k[G+16>>2]|0;if(E>>>0>>0){B=k[G>>2]|0;if(!B){J=G;K=G;z=20;break}else L=B}else{if(F>>>0>=E>>>0){N=G;z=26;break}F=G+4|0;B=k[F>>2]|0;if(!B){O=F;P=G;z=24;break}else L=B}G=L}if((z|0)==20){k[e>>2]=K;Q=J;R=K;z=27;break}else if((z|0)==24){k[e>>2]=P;Q=O;R=P;z=27;break}else if((z|0)==26){k[e>>2]=N;if(!N){Q=e;R=N;z=27;break}else{S=N;z=31;break}}}else{k[e>>2]=I;Q=I;R=I;z=27}while(0);if((z|0)==27?(x=0,I=Ba(563,28)|0,m=x,x=0,!(m&1)):0){k[I+16>>2]=k[n>>2];k[I+20>>2]=0;k[I+24>>2]=0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=R;k[Q>>2]=I;m=k[k[H>>2]>>2]|0;if(!m)T=I;else{k[H>>2]=m;T=k[Q>>2]|0}ui(k[H+4>>2]|0,T);m=H+8|0;k[m>>2]=(k[m>>2]|0)+1;S=I;z=31}if(((z|0)==31?(x=0,I=Fa(136,k[S+20>>2]|0,b|0,0)|0,m=x,x=0,!(m&1)):0)?(x=0,fb(140,f|0,329672,0),m=x,x=0,!(m&1)):0){x=0;pa(57,(I|0)!=0|0,f|0,561,242938,244518);m=x;x=0;if(m&1){m=Hc()|0;s=M;K2a(f);U=s;V=m;Sc(V|0)}K2a(f);m=b+8|0;s=I+8|0;if((k[m>>2]|0)<(k[s>>2]|0)){G=m;E=k[G>>2]|0;B=k[G+4>>2]|0;G=k[b+16>>2]|0;F=k[b+20>>2]|0;D=F;if(F)h0a(F);F=s;C=k[F>>2]|0;y=k[F+4>>2]|0;F=k[I+16>>2]|0;w=k[I+20>>2]|0;A=w;if(!w){W=C;X=y;Y=F;Z=A;_=E;$=B;aa=G;ba=D}else{h0a(w);W=C;X=y;Y=F;Z=A;_=E;$=B;aa=G;ba=D}}else{D=s;s=k[D>>2]|0;G=k[D+4>>2]|0;D=k[I+16>>2]|0;B=k[I+20>>2]|0;I=B;if(B)h0a(B);B=m;m=k[B>>2]|0;E=k[B+4>>2]|0;B=k[b+16>>2]|0;A=k[b+20>>2]|0;F=A;if(!A){W=m;X=E;Y=B;Z=F;_=s;$=G;aa=D;ba=I}else{h0a(A);W=m;X=E;Y=B;Z=F;_=s;$=G;aa=D;ba=I}}I=g;k[I>>2]=W;k[I+4>>2]=X;k[g+8>>2]=Y;I=Z;k[g+12>>2]=I;D=(Z|0)==0;if(!D)h0a(I);x=0;fb(140,h|0,244625,28);G=x;x=0;if(G&1){G=Hc()|0;ca=G;da=M}else{G=i;k[G>>2]=_;k[G+4>>2]=$;k[i+8>>2]=aa;G=ba;k[i+12>>2]=G;s=(ba|0)==0;if(!s)h0a(G);x=0;fb(140,j|0,244654,33);F=x;x=0;do if(F&1){B=Hc()|0;ea=B;fa=M}else{x=0;pa(59,a|0,g|0,h|0,i|0,j|0);B=x;x=0;if(B&1){B=Hc()|0;E=M;K2a(j);ea=B;fa=E;break}K2a(j);if(ba)j0a(G);K2a(h);if(Z)j0a(I);if(!D)j0a(I);if(s)break a;j0a(G);break a}while(0);if(ba)j0a(G);K2a(h);ca=ea;da=fa}if(Z){j0a(I);j0a(Z)}if(!ba){U=da;V=ca;Sc(V|0)}j0a(ba);U=da;V=ca;Sc(V|0)}s=Hc()|0;U=M;V=s;Sc(V|0)}while(0);k[b+36>>2]=k[n>>2];if(!c){r=d;return}L$(a,b);r=d;return}function u$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;t$(a,b,1);e=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;b=e+4|0;v$(d,a);if(!(i[b>>0]&1)){i[b+1>>0]=0;i[b>>0]=0}else{i[k[e+12>>2]>>0]=0;k[e+8>>2]=0}x=0;xa(603,b|0,0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else{k[b>>2]=k[d>>2];k[b+4>>2]=k[d+4>>2];k[b+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);r=c;return 1}return 0}function v$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+32|0;d=c+24|0;e=c+12|0;f=c;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;g=k[b+8>>2]|0;if(!g){r=c;return}h=b+4|0;b=a+4|0;j=a+8|0;l=a+1|0;m=g;while(1){g=m;n=iDa(m,5224,4520,0)|0;if(n){o=i[a>>0]|0;p=(o&1)==0;if(p)q=(o&255)>>>1;else q=k[b>>2]|0;if(!q)s=o;else{k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;t=p?(o&255)>>>1:k[b>>2]|0;x=0;nb(83,e|0,324339,1,t+1|0);o=x;x=0;if(o&1){u=11;break}x=0;Fa(88,e|0,((i[a>>0]&1)==0?l:k[j>>2]|0)|0,t|0)|0;t=x;x=0;if(t&1){u=11;break}if(!(i[a>>0]&1)){i[l>>0]=0;i[a>>0]=0}else{i[k[j>>2]>>0]=0;k[b>>2]=0}x=0;xa(603,a|0,0);t=x;x=0;if(t&1){u=16;break};k[a>>2]=k[e>>2];k[a+4>>2]=k[e+4>>2];k[a+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);s=i[a>>0]|0}t=k[n+24>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;n=i[t>>0]|0;o=(n&1)==0;p=o?(n&255)>>>1:k[t+4>>2]|0;n=(s&1)==0?(s&255)>>>1:k[b>>2]|0;x=0;nb(83,f|0,(o?t+1|0:k[t+8>>2]|0)|0,p|0,n+p|0);p=x;x=0;if(p&1){u=22;break}x=0;Fa(88,f|0,((i[a>>0]&1)==0?l:k[j>>2]|0)|0,n|0)|0;n=x;x=0;if(n&1){u=22;break}if(!(i[a>>0]&1)){i[l>>0]=0;i[a>>0]=0}else{i[k[j>>2]>>0]=0;k[b>>2]=0}x=0;xa(603,a|0,0);n=x;x=0;if(n&1){u=27;break};k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f)}n=k[h>>2]|0;p=n+4|0;t=k[p>>2]|0;do if(t){o=t;while(1){v=k[o+16>>2]|0;if(g>>>0>>0){w=k[o>>2]|0;if(!w){y=o;z=o;u=32;break}else A=w}else{if(v>>>0>=g>>>0){B=o;u=38;break}v=o+4|0;w=k[v>>2]|0;if(!w){C=v;D=o;u=36;break}else A=w}o=A}if((u|0)==32){u=0;k[d>>2]=z;E=y;F=z;u=39;break}else if((u|0)==36){u=0;k[d>>2]=D;E=C;F=D;u=39;break}else if((u|0)==38){u=0;k[d>>2]=B;if(!B){E=d;F=B;u=39;break}else{G=B;break}}}else{k[d>>2]=p;E=p;F=p;u=39}while(0);if((u|0)==39){u=0;x=0;p=Ba(563,28)|0;g=x;x=0;if(g&1){u=18;break}k[p+16>>2]=m;k[p+20>>2]=0;k[p+24>>2]=0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=F;k[E>>2]=p;g=k[k[n>>2]>>2]|0;if(!g)H=p;else{k[n>>2]=g;H=k[E>>2]|0}ui(k[n+4>>2]|0,H);g=n+8|0;k[g>>2]=(k[g>>2]|0)+1;G=p}m=k[k[G+20>>2]>>2]|0;if(!m){u=3;break}}if((u|0)==3){r=c;return}else if((u|0)==11){c=Hc()|0;m=M;K2a(e);I=m;J=c;K2a(a);Sc(J|0)}else if((u|0)==16){c=Hc(0)|0;Fg(c)}else if((u|0)==18){c=Hc()|0;I=M;J=c;K2a(a);Sc(J|0)}else if((u|0)==22){c=Hc()|0;m=M;K2a(f);I=m;J=c;K2a(a);Sc(J|0)}else if((u|0)==27){u=Hc(0)|0;Fg(u)}}function w$(a,b){a=a|0;b=b|0;x$(a);return}function x$(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;b=r;r=r+16|0;c=b+12|0;d=b;e=a+8|0;f=(k[e>>2]|0)!=0;q2a(d,244688,26);x=0;pa(57,f|0,d|0,550,242938,244715);f=x;x=0;if(f&1){f=Hc()|0;K2a(d);Sc(f|0)}K2a(d);d=k[a+4>>2]|0;a=d+4|0;f=k[a>>2]|0;do if(f){g=k[e>>2]|0;h=g;i=f;while(1){j=k[i+16>>2]|0;if(g>>>0>>0){l=k[i>>2]|0;if(!l){m=i;n=i;o=6;break}else p=l}else{if(j>>>0>=g>>>0){q=i;o=12;break}j=i+4|0;l=k[j>>2]|0;if(!l){s=j;t=i;o=10;break}else p=l}i=p}if((o|0)==6){k[c>>2]=n;u=m;v=h;w=n;break}else if((o|0)==10){k[c>>2]=t;u=s;v=h;w=t;break}else if((o|0)==12){k[c>>2]=q;if(!q){u=c;v=h;w=q;break}else y=q;z=y+20|0;A=k[z>>2]|0;B=k[A>>2]|0;k[e>>2]=B;r=b;return}}else{k[c>>2]=a;u=a;v=k[e>>2]|0;w=a}while(0);a=KBa(28)|0;k[a+16>>2]=v;k[a+20>>2]=0;k[a+24>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=w;k[u>>2]=a;w=k[k[d>>2]>>2]|0;if(!w)C=a;else{k[d>>2]=w;C=k[u>>2]|0}ui(k[d+4>>2]|0,C);C=d+8|0;k[C>>2]=(k[C>>2]|0)+1;y=a;z=y+20|0;A=k[z>>2]|0;B=k[A>>2]|0;k[e>>2]=B;r=b;return}function y$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;t$(a,b,1);e=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;b=e+4|0;v$(d,a);if(!(i[b>>0]&1)){i[b+1>>0]=0;i[b>>0]=0}else{i[k[e+12>>2]>>0]=0;k[e+8>>2]=0}x=0;xa(603,b|0,0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else{k[b>>2]=k[d>>2];k[b+4>>2]=k[d+4>>2];k[b+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);r=c;return 1}return 0}function z$(a,b){a=a|0;b=b|0;x$(a);return}function A$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;t$(a,b,1);e=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;b=e+4|0;v$(d,a);if(!(i[b>>0]&1)){i[b+1>>0]=0;i[b>>0]=0}else{i[k[e+12>>2]>>0]=0;k[e+8>>2]=0}x=0;xa(603,b|0,0);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else{k[b>>2]=k[d>>2];k[b+4>>2]=k[d+4>>2];k[b+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);r=c;return 1}return 0}function B$(a,b){a=a|0;b=b|0;x$(a);return}function C$(a,b){a=a|0;b=b|0;t$(a,b,0);return 1}function D$(a,b){a=a|0;b=b|0;t$(a,b,1);k[a+12>>2]=b+40;return 1}function E$(a,b){a=a|0;b=b|0;k[a+12>>2]=0;x$(a);return}function F$(a,b){a=a|0;b=b|0;t$(a,b,1);k[a+12>>2]=b+40;return 1}function G$(a,b){a=a|0;b=b|0;k[a+12>>2]=0;x$(a);return}function H$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c+12|0;e=c;f=a+12|0;a=(k[f>>2]|0)!=0;q2a(e,244786,38);x=0;pa(57,a|0,e|0,515,242938,244825);a=x;x=0;if(a&1){a=Hc()|0;K2a(e);Sc(a|0)}K2a(e);e=k[b+32>>2]|0;a=k[b+36>>2]|0;if((e|0)==(a|0)){r=c;return}b=e;do{e=k[b>>2]|0;if(e){g=k[f>>2]|0;k[d>>2]=e;h=g+4|0;i=k[h>>2]|0;if(i>>>0<(k[g+8>>2]|0)>>>0){k[i>>2]=e;k[h>>2]=(k[h>>2]|0)+4}else _$(g,d)}b=b+8|0}while((b|0)!=(a|0));r=c;return}function I$(a,b){a=a|0;b=b|0;t$(a,b,0);return 1}function J$(a,b){a=a|0;b=b|0;t$(a,b,1);return 1}function K$(a,b){a=a|0;b=b|0;x$(a);return}function L$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;c=r;r=r+48|0;d=c+32|0;e=c+24|0;f=c+16|0;g=c+12|0;h=c;j=KBa(32)|0;l=a+8|0;m=k[l>>2]|0;n=a+4|0;a=k[n>>2]|0;o=a+4|0;p=k[o>>2]|0;q=m;do if(p){s=p;while(1){t=k[s+16>>2]|0;if(q>>>0>>0){u=k[s>>2]|0;if(!u){v=s;w=s;y=4;break}else z=u}else{if(t>>>0>=q>>>0){A=s;y=10;break}t=s+4|0;u=k[t>>2]|0;if(!u){B=t;C=s;y=8;break}else z=u}s=z}if((y|0)==4){k[d>>2]=w;D=v;E=w;y=11;break}else if((y|0)==8){k[d>>2]=C;D=B;E=C;y=11;break}else if((y|0)==10){k[d>>2]=A;if(!A){D=d;E=A;y=11;break}else{F=A;break}}}else{k[d>>2]=o;D=o;E=o;y=11}while(0);if((y|0)==11){x=0;o=Ba(563,28)|0;d=x;x=0;if(d&1){d=Hc()|0;A=M;OBa(j);G=A;H=d;Sc(H|0)}k[o+16>>2]=m;k[o+20>>2]=0;k[o+24>>2]=0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=E;k[D>>2]=o;E=k[k[a>>2]>>2]|0;if(!E)I=o;else{k[a>>2]=E;I=k[D>>2]|0}ui(k[a+4>>2]|0,I);I=a+8|0;k[I>>2]=(k[I>>2]|0)+1;F=o}o=k[F+20>>2]|0;k[j>>2]=m;k[j+4>>2]=o;o=j+8|0;m=j+12|0;k[m>>2]=0;k[j+16>>2]=0;k[o>>2]=m;F=j+20|0;I=j+24|0;k[I>>2]=0;k[j+28>>2]=0;k[F>>2]=I;k[e>>2]=j;x=0;I=Ba(563,16)|0;a=x;x=0;if(a&1){a=Hc()|0;Q$(F,0);Q$(o,k[m>>2]|0);OBa(j);Sc(a|0)}k[I+4>>2]=0;k[I+8>>2]=0;k[I>>2]=33928;k[I+12>>2]=j;j=e+4|0;k[j>>2]=I;I=k[n>>2]|0;k[g>>2]=b;x=0;nb(121,f|0,I|0,g|0,e|0);e=x;x=0;do if(!(e&1)?(g=i[f+4>>0]|0,x=0,fb(140,h|0,244940,24),I=x,x=0,!(I&1)):0){x=0;pa(57,g<<24>>24!=0|0,h|0,544,242938,244965);g=x;x=0;if(g&1){g=Hc()|0;I=M;K2a(h);J=I;K=g;break}K2a(h);k[l>>2]=b;g=k[j>>2]|0;if(!g){r=c;return}j0a(g);r=c;return}else y=24;while(0);if((y|0)==24){y=Hc()|0;J=M;K=y}y=k[j>>2]|0;if(!y){G=J;H=K;Sc(H|0)}j0a(y);G=J;H=K;Sc(H|0)}function M$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;f=r;r=r+80|0;g=f+56|0;h=f+40|0;i=f+24|0;j=f+8|0;l=f;m=KBa(68)|0;k[m+4>>2]=0;k[m+8>>2]=0;k[m>>2]=31248;n=m+12|0;x=0;xa(731,n|0,0);o=x;x=0;if(o&1){o=Hc()|0;c0a(m);OBa(m);Sc(o|0)}o=n;k[g>>2]=31456;p=b;q=k[p+4>>2]|0;s=g+4|0;k[s>>2]=k[p>>2];k[s+4>>2]=q;k[g+12>>2]=k[b+8>>2];q=k[b+12>>2]|0;k[g+16>>2]=q;b=(q|0)==0;if(!b)h0a(q);x=0;s=Ta(566,n|0,g|0)|0;n=x;x=0;if(!(n&1)?(k[h>>2]=21048,n=h+4|0,x=0,xa(604,n|0,c|0),c=x,x=0,!(c&1)):0){x=0;c=Ta(564,s|0,h|0)|0;s=x;x=0;if(!(s&1)){s=j+4|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;p=Fa(131,j|0,e|0,d|0)|0;d=x;x=0;do if(!(d&1)?(k[i>>2]=31476,x=0,xa(735,i+4|0,p|0),e=x,x=0,!(e&1)):0){x=0;Ta(567,c|0,i|0)|0;e=x;x=0;if(e&1){e=Hc()|0;t=M;k[i>>2]=31476;u=i+4|0;v=k[u>>2]|0;if(!v){w=t;y=e;break}z=i+8|0;A=k[z>>2]|0;if((A|0)==(v|0))B=v;else{C=A;do{A=C+-28|0;k[z>>2]=A;D=k[C+-4>>2]|0;if(D)j0a(D);K2a(A);C=k[z>>2]|0}while((C|0)!=(v|0));B=k[u>>2]|0}OBa(B);w=t;y=e;break}k[i>>2]=31476;v=i+4|0;C=k[v>>2]|0;if(C){z=i+8|0;A=k[z>>2]|0;if((A|0)==(C|0))E=C;else{D=A;do{A=D+-28|0;k[z>>2]=A;F=k[D+-4>>2]|0;if(F)j0a(F);K2a(A);D=k[z>>2]|0}while((D|0)!=(C|0));E=k[v>>2]|0}OBa(E)}C=k[j>>2]|0;if(C){D=k[s>>2]|0;if((D|0)==(C|0))G=C;else{z=D;do{D=z+-28|0;k[s>>2]=D;e=k[z+-4>>2]|0;if(e)j0a(e);K2a(D);z=k[s>>2]|0}while((z|0)!=(C|0));G=k[j>>2]|0}OBa(G)}k[h>>2]=21048;K2a(n);k[g>>2]=31456;if(!b)j0a(q);C=k[a+16>>2]|0;k[l>>2]=o;z=l+4|0;k[z>>2]=m;h0a(m);v=C+4|0;D=k[v>>2]|0;if(D>>>0<(k[C+8>>2]|0)>>>0){k[D>>2]=o;k[D+4>>2]=m;k[l>>2]=0;k[z>>2]=0;k[v>>2]=D+8;j0a(m);r=f;return}x=0;xa(732,C|0,l|0);C=x;x=0;if(C&1){C=Hc()|0;D=M;v=k[z>>2]|0;if(!v){H=D;I=C;j0a(m);Sc(I|0)}j0a(v);H=D;I=C;j0a(m);Sc(I|0)}else{C=k[z>>2]|0;if(!C){j0a(m);r=f;return}j0a(C);j0a(m);r=f;return}}else J=35;while(0);if((J|0)==35){J=Hc()|0;w=M;y=J}J=k[j>>2]|0;if(!J){K=w;L=y}else{f=k[s>>2]|0;if((f|0)==(J|0))N=J;else{l=f;do{f=l+-28|0;k[s>>2]=f;o=k[l+-4>>2]|0;if(o)j0a(o);K2a(f);l=k[s>>2]|0}while((l|0)!=(J|0));N=k[j>>2]|0}OBa(N);K=w;L=y}}else{y=Hc()|0;K=M;L=y}k[h>>2]=21048;K2a(n);O=K;P=L}else{L=Hc()|0;O=M;P=L}k[g>>2]=31456;if(b){H=O;I=P;j0a(m);Sc(I|0)}j0a(q);H=O;I=P;j0a(m);Sc(I|0)}function N$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+48|0;e=d+24|0;f=d+8|0;g=d;h=KBa(68)|0;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=31248;i=h+12|0;x=0;xa(731,i|0,0);j=x;x=0;if(j&1){j=Hc()|0;c0a(h);OBa(h);Sc(j|0)}j=i;k[e>>2]=31456;l=b;m=k[l+4>>2]|0;n=e+4|0;k[n>>2]=k[l>>2];k[n+4>>2]=m;k[e+12>>2]=k[b+8>>2];m=k[b+12>>2]|0;k[e+16>>2]=m;b=(m|0)==0;if(!b)h0a(m);x=0;n=Ta(566,i|0,e|0)|0;i=x;x=0;do if(!(i&1)?(k[f>>2]=21048,l=f+4|0,x=0,xa(604,l|0,c|0),o=x,x=0,!(o&1)):0){x=0;Ta(564,n|0,f|0)|0;o=x;x=0;if(o&1){o=Hc()|0;p=M;k[f>>2]=21048;K2a(l);q=p;s=o;break}k[f>>2]=21048;K2a(l);k[e>>2]=31456;if(!b)j0a(m);l=k[a+16>>2]|0;k[g>>2]=j;o=g+4|0;k[o>>2]=h;h0a(h);p=l+4|0;t=k[p>>2]|0;if(t>>>0<(k[l+8>>2]|0)>>>0){k[t>>2]=j;k[t+4>>2]=h;k[g>>2]=0;k[o>>2]=0;k[p>>2]=t+8;j0a(h);r=d;return}x=0;xa(732,l|0,g|0);l=x;x=0;if(l&1){l=Hc()|0;t=M;p=k[o>>2]|0;if(!p){u=t;v=l;j0a(h);Sc(v|0)}j0a(p);u=t;v=l;j0a(h);Sc(v|0)}else{l=k[o>>2]|0;if(!l){j0a(h);r=d;return}j0a(l);j0a(h);r=d;return}}else w=16;while(0);if((w|0)==16){w=Hc()|0;q=M;s=w}k[e>>2]=31456;if(b){u=q;v=s;j0a(h);Sc(v|0)}j0a(m);u=q;v=s;j0a(h);Sc(v|0)}function O$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+80|0;e=d+56|0;f=d;g=d+16|0;d=b;h=k[d+4>>2]|0;i=f;k[i>>2]=k[d>>2];k[i+4>>2]=h;k[f+8>>2]=k[b+8>>2];h=k[b+12>>2]|0;k[f+12>>2]=h;b=(h|0)==0;if(!b)h0a(h);x=0;fb(277,a|0,f|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;f=M;if(b){j=f;l=c;Sc(l|0)}j0a(h);j=f;l=c;Sc(l|0)}if(!b)j0a(h);h=g;b=h+36|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(b|0));h=g+20|0;b=g+24|0;k[b>>2]=0;k[g+28>>2]=0;k[g+32>>2]=0;k[g+36>>2]=-1;c=g+4|0;f=g+8|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[g+4>>2]=31624;k[g>>2]=31588;k[h>>2]=31648;x=0;nb(114,g|0,245069,242938,638);x=0;g=Hc()|0;e=M;k[c>>2]=31680;k[c+-4>>2]=31708;k[c+16>>2]=31732;K2a(f);k[h>>2]=20796;h=k[b>>2]|0;if(h){x=0;f=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}if(f)k[b>>2]=0}j=e;l=g;Sc(l|0)}function P$(){k[8487]=0;k[8488]=0;k[8489]=0;return}function Q$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!b)return;Q$(a,k[b>>2]|0);Q$(a,k[b+4>>2]|0);a=k[b+28>>2]|0;c=a;if(a){d=b+32|0;e=k[d>>2]|0;if((e|0)!=(a|0))k[d>>2]=e+(~((e+-4-c|0)>>>2)<<2);OBa(a)}K2a(b+16|0);OBa(b);return}function R$(a,b){a=a|0;b=b|0;if(!b)return;R$(a,k[b>>2]|0);R$(a,k[b+4>>2]|0);a=k[b+24>>2]|0;if(a)j0a(a);OBa(b);return}function S$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=a+8|0;a:do if((k[d>>2]|0)!=0?(e=k[a>>2]|0,f=a+4|0,k[a>>2]=f,k[(k[f>>2]|0)+8>>2]=0,k[f>>2]=0,k[d>>2]=0,f=k[e+4>>2]|0,g=(f|0)==0?e:f,(g|0)!=0):0){f=k[c>>2]|0;e=k[b>>2]|0;h=e;i=e;e=g;while(1){if((h|0)==(f|0)){j=e;l=5;break}x=0;Ta(493,e+16|0,h+16|0)|0;g=x;x=0;if(g&1){m=e;break}if((e|0)!=(h|0)?(x=0,fb(278,e+28|0,k[h+28>>2]|0,k[h+32>>2]|0),g=x,x=0,g&1):0){m=e;break}g=k[e+8>>2]|0;do if(g){n=k[g>>2]|0;if((n|0)==(e|0)){k[g>>2]=0;o=k[g+4>>2]|0;if(!o){p=g;break}else q=o;while(1){o=k[q>>2]|0;if(o){q=o;continue}o=k[q+4>>2]|0;if(!o){r=q;break}else q=o}p=r;break}else{k[g+4>>2]=0;if(!n){p=g;break}else s=n;while(1){o=k[s>>2]|0;if(o){s=o;continue}o=k[s+4>>2]|0;if(!o){t=s;break}else s=o}p=t;break}}else p=0;while(0);z1(a,e)|0;g=k[i+4>>2]|0;if(!g){n=i;while(1){o=k[n+8>>2]|0;if((k[o>>2]|0)==(n|0)){u=o;break}else n=o}}else{n=g;while(1){o=k[n>>2]|0;if(!o){u=n;break}else n=o}}k[b>>2]=u;if(!p)break a;else{h=u;i=u;e=p}}if((l|0)==5){e=k[j+8>>2]|0;if(!e)v=j;else{i=e;while(1){e=k[i+8>>2]|0;if(!e){w=i;break}else i=e}v=w}Q$(a,v);break}i=Hc(0)|0;me(i|0)|0;i=k[m+8>>2]|0;if(!i)y=m;else{e=i;while(1){i=k[e+8>>2]|0;if(!i){z=e;break}else e=i}y=z}Q$(a,y);x=0;hb(46);x=0;e=Hc()|0;x=0;hb(45);i=x;x=0;if(i&1){i=Hc(0)|0;Fg(i)}else Sc(e|0)}while(0);y=k[b>>2]|0;z=k[c>>2]|0;if((y|0)==(z|0))return;c=y;m=y;while(1){A1(a,c+16|0)|0;y=k[m+4>>2]|0;if(!y){v=m;while(1){w=k[v+8>>2]|0;if((k[w>>2]|0)==(v|0)){A=w;break}else v=w}}else{v=y;while(1){w=k[v>>2]|0;if(!w){A=v;break}else v=w}}k[b>>2]=A;if((A|0)==(z|0))break;else{c=A;m=A}}return}function T$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function U$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=k[d>>2]|0;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=k[m>>2]|0;return e|0}else if((o|0)==9){k[b>>2]=s;e=k[r>>2]|0;return e|0}else if((o|0)==10){k[b>>2]=q;e=q;return e|0}return 0}function V$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;c=KBa(20)|0;d=c+8|0;k[d>>2]=d;e=c+12|0;k[e>>2]=d;f=c+16|0;k[f>>2]=0;g=k[b+4>>2]|0;h=g;if((h|0)==(b|0)){i=c+4|0;k[i>>2]=a;j=k[a>>2]|0;k[c>>2]=j;l=j+4|0;k[l>>2]=c;k[a>>2]=c;m=a+8|0;n=k[m>>2]|0;o=n+1|0;k[m>>2]=o;return}p=h;h=d;q=0;r=g;while(1){x=0;g=h;h=Ba(563,12)|0;s=x;x=0;if(s&1){t=g;u=q;break}k[h+8>>2]=k[p+8>>2];k[h+4>>2]=d;k[h>>2]=g;k[g+4>>2]=h;k[d>>2]=h;q=q+1|0;k[f>>2]=q;r=k[r+4>>2]|0;p=r;if((p|0)==(b|0)){v=8;break}}if((v|0)==8){i=c+4|0;k[i>>2]=a;j=k[a>>2]|0;k[c>>2]=j;l=j+4|0;k[l>>2]=c;k[a>>2]=c;m=a+8|0;n=k[m>>2]|0;o=n+1|0;k[m>>2]=o;return}o=Hc()|0;if(!u){OBa(c);Sc(o|0)}u=k[e>>2]|0;e=t+4|0;t=k[u>>2]|0;k[t+4>>2]=k[e>>2];k[k[e>>2]>>2]=t;k[f>>2]=0;if((u|0)==(d|0)){OBa(c);Sc(o|0)}else w=u;do{u=w;w=k[w+4>>2]|0;OBa(u)}while((w|0)!=(d|0));OBa(c);Sc(o|0)}function W$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+48|0;d=c+28|0;e=c+24|0;f=c+16|0;g=c+4|0;h=c;k[e>>2]=b;k[f>>2]=b;k[f+4>>2]=e;i[d>>0]=i[c+32>>0]|0;u1(b,d);k[g>>2]=0;e=g+4|0;k[e>>2]=0;k[g+8>>2]=0;j=b+8|0;do if(k[j>>2]|0){l=g+8|0;m=b+4|0;while(1){x=0;n=Ba(604,f|0)|0;o=x;x=0;if(o&1){p=6;break}k[h>>2]=n;o=n;if(!n){p=25;break}n=k[e>>2]|0;if((n|0)==(k[l>>2]|0)){x=0;xa(781,g|0,h|0);q=x;x=0;if(q&1){p=6;break}}else{k[n>>2]=o;k[e>>2]=(k[e>>2]|0)+4}k[d>>2]=o;o=k[m>>2]|0;n=o;if((n|0)!=(b|0)){q=n;n=o;while(1){o=q+8|0;x1(o,d);s=q+16|0;if(!(k[s>>2]|0)){t=q+4|0;u=k[t>>2]|0;v=k[n>>2]|0;k[v+4>>2]=u;k[k[t>>2]>>2]=v;k[j>>2]=(k[j>>2]|0)+-1;if((k[s>>2]|0)!=0?(v=k[q+12>>2]|0,t=(k[o>>2]|0)+4|0,w=k[v>>2]|0,k[w+4>>2]=k[t>>2],k[k[t>>2]>>2]=w,k[s>>2]=0,(v|0)!=(o|0)):0){s=v;do{v=s;s=k[s+4>>2]|0;OBa(v)}while((s|0)!=(o|0))}OBa(n);y=u}else y=k[n+4>>2]|0;q=y;if((q|0)==(b|0))break;else n=y}}if(!(k[j>>2]|0)){p=23;break}}if((p|0)==6){m=Hc()|0;n=k[g>>2]|0;if(!n)Sc(m|0);q=k[e>>2]|0;if((q|0)!=(n|0))k[e>>2]=q+(~((q+-4-n|0)>>>2)<<2);OBa(n);Sc(m|0)}else if((p|0)==23){z=l;A=k[g>>2]|0;B=k[e>>2]|0;C=k[l>>2]|0;break}else if((p|0)==25){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;m=k[g>>2]|0;if(!m){r=c;return}n=k[e>>2]|0;if((n|0)!=(m|0))k[e>>2]=n+(~((n+-4-m|0)>>>2)<<2);OBa(m);r=c;return}}else{z=g+8|0;A=0;B=0;C=0}while(0);k[a>>2]=A;k[a+4>>2]=B;k[a+8>>2]=C;k[z>>2]=0;k[e>>2]=0;k[g>>2]=0;r=c;return}function X$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=b;e=c-d>>2;f=a+8|0;g=k[f>>2]|0;h=k[a>>2]|0;i=h;if(e>>>0<=g-h>>2>>>0){j=a+4|0;l=(k[j>>2]|0)-h>>2;m=e>>>0>l>>>0;n=b+(l<<2)|0;l=m?n:c;o=l-d|0;Eyb(h|0,b|0,o|0)|0;d=i+(o>>2<<2)|0;if(!m){m=k[j>>2]|0;if((m|0)==(d|0))return;k[j>>2]=m+(~((m+-4-d|0)>>>2)<<2);return}if((l|0)==(c|0))return;l=n;n=k[j>>2]|0;do{k[n>>2]=k[l>>2];n=(k[j>>2]|0)+4|0;k[j>>2]=n;l=l+4|0}while((l|0)!=(c|0));return}l=h;if(!h)p=g;else{g=a+4|0;n=k[g>>2]|0;if((n|0)!=(i|0))k[g>>2]=n+(~((n+-4-h|0)>>>2)<<2);OBa(l);k[f>>2]=0;k[g>>2]=0;k[a>>2]=0;p=0}if(e>>>0>1073741823){HBa(a);q=k[a>>2]|0;r=k[f>>2]|0}else{q=0;r=p}p=r-q|0;if(p>>2>>>0<536870911){q=p>>1;p=q>>>0>>0?e:q;if(p>>>0>1073741823){HBa(a);s=p}else s=p}else s=1073741823;p=KBa(s<<2)|0;q=a+4|0;k[q>>2]=p;k[a>>2]=p;k[f>>2]=p+(s<<2);if((b|0)==(c|0))return;s=b;b=p;do{k[b>>2]=k[s>>2];b=(k[q>>2]|0)+4|0;k[q>>2]=b;s=s+4|0}while((s|0)!=(c|0));return}function Y$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+16|0;e=d;NU(e,b);b=k[c>>2]|0;f=k[c+4>>2]|0;a:do if((b|0)==(f|0))g=9;else{c=e+4|0;h=e+8|0;i=b;while(1){j=k[c>>2]|0;if((j|0)==(k[h>>2]|0)){x=0;xa(743,e|0,i|0);l=x;x=0;if(l&1)break}else{k[j>>2]=k[i>>2];l=k[i+4>>2]|0;k[j+4>>2]=l;if(!l)m=j;else{h0a(l);m=k[c>>2]|0}k[c>>2]=m+8}i=i+8|0;if((i|0)==(f|0)){g=9;break a}}i=Hc()|0;n=i;o=M}while(0);do if((g|0)==9){x=0;xa(744,a|0,e|0);f=x;x=0;if(f&1){f=Hc()|0;n=f;o=M;break}f=k[e>>2]|0;if(!f){r=d;return}m=e+4|0;b=k[m>>2]|0;if((b|0)==(f|0))p=f;else{i=b;while(1){b=i+-8|0;k[m>>2]=b;c=k[i+-4>>2]|0;if(!c)q=b;else{j0a(c);q=k[m>>2]|0}if((q|0)==(f|0))break;else i=q}p=k[e>>2]|0}OBa(p);r=d;return}while(0);d=k[e>>2]|0;if(!d)Sc(n|0);p=e+4|0;q=k[p>>2]|0;if((q|0)==(d|0))s=d;else{o=q;while(1){q=o+-8|0;k[p>>2]=q;a=k[o+-4>>2]|0;if(!a)t=q;else{j0a(a);t=k[p>>2]|0}if((t|0)==(d|0))break;else o=t}s=k[e>>2]|0}OBa(s);Sc(n|0)}function Z$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+36|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+40>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+44|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+20|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=31388;c=h+-20|0;k[c>>2]=31416;i=h+16|0;k[i>>2]=31440;j=a+24|0;x=0;xa(604,j|0,e+4|0);e=x;x=0;do if(!(e&1)){k[a+20>>2]=31332;k[a>>2]=31296;k[d>>2]=31356;k[a+4>>2]=k[b+4>>2];x=0;xa(604,a+8|0,b+8|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;k[h>>2]=31388;k[c>>2]=31416;k[i>>2]=31440;K2a(j);n=m;o=l;break}else return}else{l=Hc()|0;n=M;o=l}while(0);k[d>>2]=20796;d=a+40|0;a=k[d>>2]|0;if(!a){f=n;g=o;Sc(g|0)}x=0;j=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!j){f=n;g=o;Sc(g|0)}k[d>>2]=0;f=n;g=o;Sc(g|0)}function _$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function $$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=r;r=r+16|0;f=e;g=KBa(28)|0;h=k[c>>2]|0;k[g+16>>2]=h;k[g+20>>2]=k[d>>2];c=g+24|0;j=d+4|0;k[c>>2]=k[j>>2];k[d>>2]=0;k[j>>2]=0;j=b+4|0;d=k[j>>2]|0;l=h;do if(d){h=d;while(1){m=k[h+16>>2]|0;if(l>>>0>>0){n=k[h>>2]|0;if(!n){o=h;p=h;q=4;break}else s=n}else{if(m>>>0>=l>>>0){t=h;q=9;break}m=h+4|0;n=k[m>>2]|0;if(!n){u=m;v=h;q=8;break}else s=n}h=s}if((q|0)==4){k[f>>2]=p;w=o;x=p;break}else if((q|0)==8){k[f>>2]=v;w=u;x=v;break}else if((q|0)==9){k[f>>2]=t;w=f;x=t;break}}else{k[f>>2]=j;w=j;x=j}while(0);j=k[w>>2]|0;if(!j){k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=x;k[w>>2]=g;x=k[k[b>>2]>>2]|0;if(!x)y=g;else{k[b>>2]=x;y=k[w>>2]|0}ui(k[b+4>>2]|0,y);y=b+8|0;k[y>>2]=(k[y>>2]|0)+1;z=1;A=g}else{z=0;A=j}k[a>>2]=A;i[a+4>>0]=z;if(z<<24>>24){r=e;return}z=k[c>>2]|0;if(z)j0a(z);OBa(g);r=e;return}function a0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function b0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function c0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function d0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function e0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function f0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function g0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function h0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function i0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function j0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function k0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function l0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function m0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function n0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function o0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function p0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function q0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function r0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function s0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function t0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function u0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function v0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function w0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function x0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function y0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function z0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function A0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function B0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function C0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function D0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function E0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function F0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function G0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function H0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function I0(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function J0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function K0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function L0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function M0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function N0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function O0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function P0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function Q0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function R0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function S0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function T0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function U0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function V0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function W0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function X0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function Y0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function Z0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function _0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function $0(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function a1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function b1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function c1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function d1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function e1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function f1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function g1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function h1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function i1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function j1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function k1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function l1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function m1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function n1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function o1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function p1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function q1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function r1(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function s1(a,b){a=a|0;b=b|0;return 1}function t1(a,b){a=a|0;b=b|0;return}function u1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=k[a+4>>2]|0;c=b;if((c|0)==(a|0))return;d=a+8|0;e=c;c=b;while(1){b=k[c+4>>2]|0;if(!(k[e+16>>2]|0)){f=b;a:do if((f|0)==(a|0)){g=b;h=a}else{i=f;j=b;while(1){if(k[i+16>>2]|0){g=j;h=i;break a}l=k[j+4>>2]|0;i=l;if((i|0)==(a|0)){g=l;h=a;break}else j=l}}while(0);if((e|0)!=(h|0)){f=(k[h>>2]|0)+4|0;j=k[c>>2]|0;k[j+4>>2]=k[f>>2];k[k[f>>2]>>2]=j;j=e;f=e;do{j=k[j+4>>2]|0;k[d>>2]=(k[d>>2]|0)+-1;i=f+8|0;l=f+16|0;if((k[l>>2]|0)!=0?(m=k[f+12>>2]|0,n=(k[i>>2]|0)+4|0,o=k[m>>2]|0,k[o+4>>2]=k[n>>2],k[k[n>>2]>>2]=o,k[l>>2]=0,(m|0)!=(i|0)):0){l=m;do{m=l;l=k[l+4>>2]|0;OBa(m)}while((l|0)!=(i|0))}OBa(f);f=j}while((f|0)!=(h|0))}if((g|0)==(a|0))p=g;else p=k[g+4>>2]|0}else p=b;e=p;if((e|0)==(a|0))break;else c=p}return}function v1(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+32|0;c=b+12|0;d=b;e=k[a>>2]|0;f=k[e+4>>2]|0;g=f;if((g|0)==(e|0)){h=0;r=b;return h|0}i=a+4|0;a=f;f=g;a:while(1){g=(k[f+16>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,g|0,d|0,341,242938,245207);g=x;x=0;if(g&1){j=13;break}K2a(d);g=f+12|0;l=k[(k[g>>2]|0)+8>>2]|0;m=k[k[i>>2]>>2]|0;n=k[m+4>>2]|0;o=n;if((o|0)==(m|0)){p=g;j=14;break}else{q=o;s=n}while(1){n=(k[q+16>>2]|0)!=0;q2a(c,329672,0);x=0;pa(57,n|0,c|0,330,242938,245352);n=x;x=0;if(n&1){j=11;break a}n=q+8|0;K2a(c);o=k[(k[q+12>>2]|0)+4>>2]|0;b:do if((o|0)==(n|0)){t=o;j=10}else{u=o;v=o;do{if((k[u+8>>2]|0)==(l|0)){t=u;j=10;break b}v=k[v+4>>2]|0;u=v}while((u|0)!=(n|0))}while(0);if((j|0)==10?(j=0,(t|0)!=(n|0)):0)break;s=k[s+4>>2]|0;q=s;if((q|0)==(m|0)){p=g;j=14;break a}}a=k[a+4>>2]|0;f=a;if((f|0)==(e|0)){h=0;j=16;break}}if((j|0)==11){e=Hc()|0;K2a(c);Sc(e|0)}else if((j|0)==13){e=Hc()|0;K2a(d);Sc(e|0)}else if((j|0)==14){h=k[(k[p>>2]|0)+8>>2]|0;r=b;return h|0}else if((j|0)==16){r=b;return h|0}return 0}function w1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function x1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+16|0;d=c;k[d>>2]=d;e=d+4|0;k[e>>2]=d;f=d+8|0;k[f>>2]=0;g=k[a+4>>2]|0;h=g;if((h|0)==(a|0)){r=c;return}i=a+8|0;if((d|0)==(a|0)){j=g;l=h;while(1){m=k[l+8>>2]|0;n=k[j+4>>2]|0;if((m|0)==(k[b>>2]|0)){o=n;a:do if((o|0)==(a|0)){p=n;q=a;s=0}else{t=o;u=n;while(1){if((k[t+8>>2]|0)!=(m|0)){p=u;q=t;s=1;break a}v=k[u+4>>2]|0;t=v;if((t|0)==(a|0)){p=v;q=a;s=0;break}else u=v}}while(0);if((l|0)!=(q|0)){m=k[p>>2]|0;o=m+4|0;u=k[j>>2]|0;k[u+4>>2]=k[o>>2];k[k[o>>2]>>2]=u;u=k[d>>2]|0;k[u+4>>2]=l;k[j>>2]=u;k[d>>2]=m;k[o>>2]=a}if(s)w=k[p+4>>2]|0;else w=p}else w=n;l=w;if((l|0)==(a|0))break;else j=w}r=c;return}w=d;j=h;h=g;g=0;while(1){l=k[j+8>>2]|0;p=k[h+4>>2]|0;if((l|0)==(k[b>>2]|0)){s=p;b:do if((s|0)==(a|0)){x=p;y=a;z=0}else{q=s;o=p;while(1){if((k[q+8>>2]|0)!=(l|0)){x=o;y=q;z=1;break b}m=k[o+4>>2]|0;q=m;if((q|0)==(a|0)){x=m;y=a;z=0;break}else o=m}}while(0);if((j|0)==(y|0)){A=w;B=g}else{l=j;s=0;while(1){n=s+1|0;l=k[l+4>>2]|0;if((l|0)==(y|0)){C=n;break}else s=n}k[i>>2]=(k[i>>2]|0)-C;s=g+C|0;k[f>>2]=s;l=k[x>>2]|0;n=l+4|0;o=k[h>>2]|0;k[o+4>>2]=k[n>>2];k[k[n>>2]>>2]=o;o=k[d>>2]|0;k[o+4>>2]=j;k[h>>2]=o;k[d>>2]=l;k[n>>2]=d;A=l;B=s}if(z){D=k[x+4>>2]|0;E=A;F=B}else{D=x;E=A;F=B}}else{D=p;E=w;F=g}j=D;if((j|0)==(a|0)){G=E;H=F;break}else{w=E;h=D;g=F}}if(!H){r=c;return}H=k[e>>2]|0;e=G+4|0;G=k[H>>2]|0;k[G+4>>2]=k[e>>2];k[k[e>>2]>>2]=G;k[f>>2]=0;if((H|0)==(d|0)){r=c;return}else I=H;do{H=I;I=k[I+4>>2]|0;OBa(H)}while((I|0)!=(d|0));r=c;return}function y1(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=b;e=c-d>>2;f=a+8|0;g=k[f>>2]|0;h=k[a>>2]|0;i=h;if(e>>>0<=g-h>>2>>>0){j=a+4|0;l=(k[j>>2]|0)-h>>2;m=e>>>0>l>>>0;n=b+(l<<2)|0;l=m?n:c;o=l-d|0;Eyb(h|0,b|0,o|0)|0;d=i+(o>>2<<2)|0;if(!m){m=k[j>>2]|0;if((m|0)==(d|0))return;k[j>>2]=m+(~((m+-4-d|0)>>>2)<<2);return}if((l|0)==(c|0))return;l=n;n=k[j>>2]|0;do{k[n>>2]=k[l>>2];n=(k[j>>2]|0)+4|0;k[j>>2]=n;l=l+4|0}while((l|0)!=(c|0));return}l=h;if(!h)p=g;else{g=a+4|0;n=k[g>>2]|0;if((n|0)!=(i|0))k[g>>2]=n+(~((n+-4-h|0)>>>2)<<2);OBa(l);k[f>>2]=0;k[g>>2]=0;k[a>>2]=0;p=0}if(e>>>0>1073741823){HBa(a);q=k[a>>2]|0;r=k[f>>2]|0}else{q=0;r=p}p=r-q|0;if(p>>2>>>0<536870911){q=p>>1;p=q>>>0>>0?e:q;if(p>>>0>1073741823){HBa(a);s=p}else s=p}else s=1073741823;p=KBa(s<<2)|0;q=a+4|0;k[q>>2]=p;k[a>>2]=p;k[f>>2]=p+(s<<2);if((b|0)==(c|0))return;s=b;b=p;do{k[b>>2]=k[s>>2];b=(k[q>>2]|0)+4|0;k[q>>2]=b;s=s+4|0}while((s|0)!=(c|0));return}function z1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;c=b+16|0;d=a+4|0;e=k[d>>2]|0;do if(e){f=i[c>>0]|0;g=(f&1)==0;h=g?(f&255)>>>1:k[b+20>>2]|0;f=g?c+1|0:k[b+24>>2]|0;g=e;while(1){j=g+16|0;l=i[j>>0]|0;m=(l&1)==0;n=m?(l&255)>>>1:k[g+20>>2]|0;l=ZLa(f,m?j+1|0:k[g+24>>2]|0,n>>>0>>0?n:h)|0;if((((l|0)==0?(h>>>0>>0?-2147483648:0):l)|0)<0){l=k[g>>2]|0;if(!l){o=g;p=g;q=5;break}else r=l}else{l=g+4|0;n=k[l>>2]|0;if(!n){s=l;t=g;q=8;break}else r=n}g=r}if((q|0)==5){u=o;v=p;break}else if((q|0)==8){u=s;v=t;break}}else{u=d;v=d}while(0);k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=v;k[u>>2]=b;v=k[k[a>>2]>>2]|0;if(!v){w=b;x=a+4|0;y=k[x>>2]|0;ui(y,w);z=a+8|0;A=k[z>>2]|0;B=A+1|0;k[z>>2]=B;return b|0}k[a>>2]=v;w=k[u>>2]|0;x=a+4|0;y=k[x>>2]|0;ui(y,w);z=a+8|0;A=k[z>>2]|0;B=A+1|0;k[z>>2]=B;return b|0}function A1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=a+4|0;d=k[c>>2]|0;do if(d){e=i[b>>0]|0;f=(e&1)==0;g=f?(e&255)>>>1:k[b+4>>2]|0;e=f?b+1|0:k[b+8>>2]|0;f=d;while(1){h=f+16|0;j=i[h>>0]|0;l=(j&1)==0;m=l?(j&255)>>>1:k[f+20>>2]|0;j=ZLa(e,l?h+1|0:k[f+24>>2]|0,m>>>0>>0?m:g)|0;if((((j|0)==0?(g>>>0>>0?-2147483648:0):j)|0)<0){j=k[f>>2]|0;if(!j){n=f;o=f;p=5;break}else q=j}else{j=f+4|0;m=k[j>>2]|0;if(!m){r=j;s=f;p=8;break}else q=m}f=q}if((p|0)==5){t=n;u=o;break}else if((p|0)==8){t=r;u=s;break}}else{t=c;u=c}while(0);c=KBa(40)|0;s=c+16|0;x=0;xa(604,s|0,b|0);r=x;x=0;if(r&1){r=Hc()|0;v=M;w=r;OBa(c);Sc(w|0)}x=0;xa(782,c+28|0,b+12|0);b=x;x=0;if(b&1){b=Hc()|0;r=M;K2a(s);v=r;w=b;OBa(c);Sc(w|0)}k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=u;k[t>>2]=c;u=k[k[a>>2]>>2]|0;if(!u){y=c;z=a+4|0;A=k[z>>2]|0;ui(A,y);B=a+8|0;C=k[B>>2]|0;D=C+1|0;k[B>>2]=D;return c|0}k[a>>2]=u;y=k[t>>2]|0;z=a+4|0;A=k[z>>2]|0;ui(A,y);B=a+8|0;C=k[B>>2]|0;D=C+1|0;k[B>>2]=D;return c|0}function B1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>2;if(!f)return;if(!(f>>>0>1073741823?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<2);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];f=(k[c>>2]|0)+4|0;k[c>>2]=f;d=d+4|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);a=k[c>>2]|0;if((a|0)!=(d|0))k[c>>2]=a+(~((a+-4-d|0)>>>2)<<2);OBa(d);Sc(b|0)}function C1(a){a=a|0;c0a(a);OBa(a);return}function D1(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Q$(b+20|0,k[b+24>>2]|0);Q$(b+8|0,k[b+12>>2]|0);OBa(b);return}function E1(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==245507?a+12|0:0)|0}function F1(a){a=a|0;OBa(a);return}function G1(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;d=r;r=r+32|0;e=d+28|0;f=d+24|0;g=d;h=d+12|0;j=(c|0)==0?k[b+24>>2]|0:c;c=i[j>>0]|0;if(!(c&1))l=(c&255)>>>1;else l=k[j+4>>2]|0;q2a(g,329672,0);x=0;pa(57,(l|0)!=0|0,g|0,38,245686,245737);l=x;x=0;if(l&1){l=Hc()|0;c=M;K2a(g);m=c;n=l;Sc(n|0)}K2a(g);k[h>>2]=0;g=h+4|0;k[g>>2]=0;k[h+8>>2]=0;l=a+8|0;c=k[a+12>>2]|0;a:do if(c){o=i[j>>0]|0;p=(o&1)==0;q=p?(o&255)>>>1:k[j+4>>2]|0;o=p?j+1|0:k[j+8>>2]|0;p=c;while(1){s=p+16|0;t=i[s>>0]|0;u=(t&1)==0;v=u?(t&255)>>>1:k[p+20>>2]|0;t=u?s+1|0:k[p+24>>2]|0;s=v>>>0>>0;u=ZLa(o,t,s?v:q)|0;w=q>>>0>>0;if((((u|0)==0?(w?-2147483648:0):u)|0)<0)y=p;else{u=ZLa(t,o,w?q:v)|0;if((((u|0)==0?(s?-2147483648:0):u)|0)>=0)break;y=p+4|0}p=k[y>>2]|0;if(!p){z=30;break a}}p=K1(l,f,j)|0;if(!p){q=Rd(8)|0;x=0;xa(671,q|0,296399);o=x;x=0;if(o&1){o=Hc()|0;u=M;Fc(q|0);A=u;B=o;break}else{k[q>>2]=47544;x=0;fb(149,q|0,9024,933);x=0;z=25;break}}q=p+28|0;p=k[q>>2]|0;o=k[q+4>>2]|0;if((p|0)!=(o|0)){q=h+8|0;u=p;while(1){p=k[g>>2]|0;if((p|0)==(k[q>>2]|0)){x=0;xa(753,h|0,u|0);s=x;x=0;if(s&1)break}else{k[p>>2]=k[u>>2];k[g>>2]=(k[g>>2]|0)+4}u=u+4|0;if((u|0)==(o|0)){z=30;break a}}o=Hc()|0;A=M;B=o}else z=30}else z=30;while(0);b:do if((z|0)==30){f=a+20|0;l=k[a+24>>2]|0;c:do if(l){y=i[j>>0]|0;c=(y&1)==0;o=c?(y&255)>>>1:k[j+4>>2]|0;y=c?j+1|0:k[j+8>>2]|0;c=l;while(1){u=c+16|0;q=i[u>>0]|0;p=(q&1)==0;s=p?(q&255)>>>1:k[c+20>>2]|0;q=p?u+1|0:k[c+24>>2]|0;u=s>>>0>>0;p=ZLa(y,q,u?s:o)|0;v=o>>>0>>0;if((((p|0)==0?(v?-2147483648:0):p)|0)<0)C=c;else{p=ZLa(q,y,v?o:s)|0;if((((p|0)==0?(u?-2147483648:0):p)|0)>=0)break;C=c+4|0}c=k[C>>2]|0;if(!c)break c}c=K1(f,e,j)|0;if(!c){o=Rd(8)|0;x=0;xa(671,o|0,296399);y=x;x=0;if(y&1){y=Hc()|0;p=M;Fc(o|0);A=p;B=y;break b}else{k[o>>2]=47544;x=0;fb(149,o|0,9024,933);x=0;z=25;break b}}o=c+28|0;c=k[o>>2]|0;y=k[o+4>>2]|0;if((c|0)!=(y|0)){o=h+8|0;p=c;while(1){c=k[g>>2]|0;if((c|0)==(k[o>>2]|0)){x=0;xa(753,h|0,p|0);u=x;x=0;if(u&1)break}else{k[c>>2]=k[p>>2];k[g>>2]=(k[g>>2]|0)+4}p=p+4|0;if((p|0)==(y|0))break c}y=Hc()|0;A=M;B=y;break b}}while(0);d:do if(!(iDa(b,4520,5424,0)|0)){f=k[g>>2]|0;l=k[h>>2]|0;y=l;p=f;if((f-l|0)==4?(k[y>>2]|0)==(b|0):0){D=0;E=y;F=p;break}if((y|0)==(p|0)){G=0;H=y;I=y;z=56}else{D=k[y>>2]|0;E=y;F=p}}else{p=k[h>>2]|0;y=k[g>>2]|0;if((p|0)==(y|0)){G=0;H=p;I=y;z=56}else{l=p;while(1){f=k[l>>2]|0;if(!f){G=0;H=p;I=y;z=56;break d}l=l+4|0;if(!(iDa(f,4520,5424,0)|0)){G=f;H=p;I=y;z=56;break d}if((l|0)==(y|0)){G=0;H=p;I=y;z=56;break}}}}while(0);if((z|0)==56)if(!H){J=G;r=d;return J|0}else{D=G;E=H;F=I}if((F|0)!=(E|0))k[g>>2]=F+(~((F+-4-E|0)>>>2)<<2);OBa(E);J=D;r=d;return J|0}while(0);if((z|0)==25){z=Hc()|0;A=M;B=z}z=k[h>>2]|0;if(!z){m=A;n=B;Sc(n|0)}h=k[g>>2]|0;if((h|0)!=(z|0))k[g>>2]=h+(~((h+-4-z|0)>>>2)<<2);OBa(z);m=A;n=B;Sc(n|0);return 0}function H1(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;f=r;r=r+32|0;g=f+20|0;h=f+4|0;j=f+8|0;l=f;m=(c|0)==0?k[b+24>>2]|0:c;c=i[m>>0]|0;if(!(c&1))n=(c&255)>>>1;else n=k[m+4>>2]|0;if(!n){o=1;r=f;return o|0}if(e){e=(iDa(b,4520,5424,0)|0)==0;q2a(j,245892,38);x=0;pa(57,e|0,j|0,74,245686,245931);e=x;x=0;if(e&1){e=Hc()|0;K2a(j);Sc(e|0)}K2a(j);j=a+8|0;e=L1(j,m)|0;if((e|0)!=(a+12|0)){k[h>>2]=e;k[g>>2]=k[h>>2];M1(j,g)|0}j=a+20|0;e=L1(j,m)|0;if((e|0)!=(a+24|0)){k[h>>2]=e;k[g>>2]=k[h>>2];M1(j,g)|0}}else if(G1(a,b,m)|0){o=0;r=f;return o|0}if(d)p=N1(a+20|0,m)|0;else p=N1(a+8|0,m)|0;m=p+4|0;a=k[m>>2]|0;d=k[p>>2]|0;a:do if((d|0)==(a|0))q=a;else{g=d;while(1){if((k[g>>2]|0)==(b|0)){q=g;break a}g=g+4|0;if((g|0)==(a|0)){q=a;break}}}while(0);if((a|0)!=(q|0)){o=1;r=f;return o|0}k[l>>2]=b;if(a>>>0<(k[p+8>>2]|0)>>>0){k[a>>2]=b;k[m>>2]=(k[m>>2]|0)+4;o=1;r=f;return o|0}else{g_(p,l);o=1;r=f;return o|0}return 0}function I1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;g=i[c>>0]|0;h=(((g&1)==0?(g&255)>>>1:k[c+4>>2]|0)|0)!=0;q2a(f,246060,30);x=0;pa(57,h|0,f|0,89,245686,246091);h=x;x=0;if(h&1){h=Hc()|0;K2a(f);Sc(h|0)}K2a(f);f=O1(b+8|0,c)|0;if((f|0)!=(b+12|0)){B1(a,f+28|0);r=e;return}if(d?(d=k[b+4>>2]|0,(d|0)!=0):0){I1(a,d,c,1);r=e;return}k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;r=e;return}function J1(){k[8490]=0;k[8491]=0;k[8492]=0;return}function K1(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=k[d>>2]|0;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=k[m>>2]|0;return e|0}else if((o|0)==9){k[b>>2]=s;e=k[r>>2]|0;return e|0}else if((o|0)==10){k[b>>2]=q;e=q;return e|0}return 0}function L1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=a+4|0;a=k[c>>2]|0;if(a){d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=e?b+1|0:k[b+8>>2]|0;b=c;e=a;a:while(1){a=e;while(1){g=a+16|0;h=i[g>>0]|0;j=(h&1)==0;l=j?(h&255)>>>1:k[a+20>>2]|0;h=ZLa(j?g+1|0:k[a+24>>2]|0,d,f>>>0>>0?f:l)|0;if((((h|0)==0?(l>>>0>>0?-2147483648:0):h)|0)>=0){m=a;break}a=k[a+4>>2]|0;if(!a){n=b;break a}}e=k[m>>2]|0;if(!e){n=m;break}else b=m}if((n|0)!=(c|0)?(m=n+16|0,b=i[m>>0]|0,e=(b&1)==0,a=e?(b&255)>>>1:k[n+20>>2]|0,b=ZLa(d,e?m+1|0:k[n+24>>2]|0,a>>>0>>0?a:f)|0,(((b|0)==0?(f>>>0>>0?-2147483648:0):b)|0)>=0):0){o=n;return o|0}}o=c;return o|0}function M1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[b>>2]|0;b=k[c+4>>2]|0;if(!b){d=c;while(1){e=k[d+8>>2]|0;if((k[e>>2]|0)==(d|0)){f=e;break}else d=e}}else{d=b;while(1){b=k[d>>2]|0;if(!b){f=d;break}else d=b}}if((k[a>>2]|0)==(c|0))k[a>>2]=f;d=a+8|0;k[d>>2]=(k[d>>2]|0)+-1;hk(k[a+4>>2]|0,c);a=k[c+28>>2]|0;if(!a){g=c+16|0;K2a(g);OBa(c);return f|0}d=c+32|0;b=k[d>>2]|0;if((b|0)!=(a|0))k[d>>2]=b+(~((b+-4-a|0)>>>2)<<2);OBa(a);g=c+16|0;K2a(g);OBa(c);return f|0}function N1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=P1(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(40)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function O1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=a+4|0;a=k[c>>2]|0;if(a){d=i[b>>0]|0;e=(d&1)==0;f=e?(d&255)>>>1:k[b+4>>2]|0;d=e?b+1|0:k[b+8>>2]|0;b=c;e=a;a:while(1){a=e;while(1){g=a+16|0;h=i[g>>0]|0;j=(h&1)==0;l=j?(h&255)>>>1:k[a+20>>2]|0;h=ZLa(j?g+1|0:k[a+24>>2]|0,d,f>>>0>>0?f:l)|0;if((((h|0)==0?(l>>>0>>0?-2147483648:0):h)|0)>=0){m=a;break}a=k[a+4>>2]|0;if(!a){n=b;break a}}e=k[m>>2]|0;if(!e){n=m;break}else b=m}if((n|0)!=(c|0)?(m=n+16|0,b=i[m>>0]|0,e=(b&1)==0,a=e?(b&255)>>>1:k[n+20>>2]|0,b=ZLa(d,e?m+1|0:k[n+24>>2]|0,a>>>0>>0?a:f)|0,(((b|0)==0?(f>>>0>>0?-2147483648:0):b)|0)>=0):0){o=n;return o|0}}o=c;return o|0}function P1(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function Q1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;a=r;r=r+80|0;c=a+16|0;d=a;e=a+72|0;f=b+28|0;g=k[f>>2]|0;h=(Vf[k[(k[g>>2]|0)+16>>2]&1023](g)|0)+4|0;g=k[h>>2]|0;if((g|0)!=0?(iDa(g,168,6624,0)|0)!=0:0){jg[k[(k[g>>2]|0)+12>>2]&511](e,g,k[b+24>>2]|0);x=0;g=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;h=M;i=k[e+4>>2]|0;if(!i){j=h;l=b;Sc(l|0)}j0a(i);j=h;l=b;Sc(l|0)}b=k[e>>2]|0;h=e+4|0;e=k[h>>2]|0;if(e)h0a(e);k[g+4>>2]=b;b=g+8|0;g=k[b>>2]|0;k[b>>2]=e;if(g)j0a(g);g=k[h>>2]|0;if(!g){r=a;return}j0a(g);r=a;return}a=k[f>>2]|0;q2a(d,246239,28);x=0;fb(273,c|0,a|0,d|0);a=x;x=0;if(a&1){a=Hc()|0;m=M;n=a}else{x=0;nb(122,c|0,246268,246363,35);x=0;a=Hc()|0;f=M;g=c+20|0;k[g>>2]=31332;k[c>>2]=31296;k[c+36>>2]=31356;K2a(c+8|0);k[g>>2]=31388;k[g+-20>>2]=31416;k[g+16>>2]=31440;K2a(c+24|0);k[c+36>>2]=20796;g=c+40|0;c=k[g>>2]|0;if(c){x=0;h=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(h)k[g>>2]=0}m=f;n=a}K2a(d);j=m;l=n;Sc(l|0)}function R1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;a=r;r=r+160|0;c=a+88|0;d=a+72|0;e=a+16|0;f=a;g=a+144|0;h=b+24|0;i=k[h>>2]|0;j=Vf[k[(k[i>>2]|0)+16>>2]&1023](i)|0;i=b+36|0;l=k[i>>2]|0;m=(Vf[k[(k[l>>2]|0)+16>>2]&1023](l)|0)+4|0;l=k[j+4>>2]|0;if((l|0)!=0?(iDa(l,168,6624,0)|0)!=0:0){j=k[m>>2]|0;if((j|0)!=0?(iDa(j,168,6624,0)|0)!=0:0){j=b+32|0;ng[k[(k[l>>2]|0)+16>>2]&255](g,l,k[j>>2]|0,m);if(((k[j>>2]|0)+-39|0)>>>0<6){x=0;j=Ba(563,36)|0;m=x;x=0;if(!(m&1)){k[j+4>>2]=0;k[j+8>>2]=0;k[j>>2]=31792;m=j+16|0;k[m>>2]=0;l=j+20|0;k[l>>2]=0;n=j+12|0;o=j+28|0;k[o>>2]=0;k[j+32>>2]=0;k[j+24>>2]=o;k[n>>2]=37924;o=n;n=j;i0a(j);k[m>>2]=o;m=k[l>>2]|0;k[l>>2]=n;if(m)k0a(m);k[g>>2]=o;o=g+4|0;m=k[o>>2]|0;k[o>>2]=n;if(!m)p=31;else{j0a(m);p=31}}}else p=31;if((p|0)==31?(x=0,p=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,b=x,x=0,!(b&1)):0){b=k[g>>2]|0;m=g+4|0;n=k[m>>2]|0;if(n)h0a(n);k[p+4>>2]=b;b=p+8|0;p=k[b>>2]|0;k[b>>2]=n;if(p)j0a(p);p=k[m>>2]|0;if(!p){r=a;return}j0a(p);r=a;return}a=Hc()|0;p=M;m=k[g+4>>2]|0;if(!m){q=p;s=a;Sc(s|0)}j0a(m);q=p;s=a;Sc(s|0)}a=k[i>>2]|0;q2a(f,246239,28);x=0;fb(273,e|0,a|0,f|0);a=x;x=0;if(a&1){a=Hc()|0;t=M;u=a}else{x=0;nb(122,e|0,246411,246363,47);x=0;a=Hc()|0;i=M;p=e+20|0;k[p>>2]=31332;k[e>>2]=31296;k[e+36>>2]=31356;K2a(e+8|0);k[p>>2]=31388;k[p+-20>>2]=31416;k[p+16>>2]=31440;K2a(e+24|0);k[e+36>>2]=20796;p=e+40|0;e=k[p>>2]|0;if(e){x=0;m=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(m)k[p>>2]=0}t=i;u=a}K2a(f);q=t;s=u;Sc(s|0)}u=k[h>>2]|0;q2a(d,246239,28);x=0;fb(273,c|0,u|0,d|0);u=x;x=0;if(u&1){u=Hc()|0;v=M;w=u}else{x=0;nb(122,c|0,246411,246363,45);x=0;u=Hc()|0;h=M;t=c+20|0;k[t>>2]=31332;k[c>>2]=31296;k[c+36>>2]=31356;K2a(c+8|0);k[t>>2]=31388;k[t+-20>>2]=31416;k[t+16>>2]=31440;K2a(c+24|0);k[c+36>>2]=20796;t=c+40|0;c=k[t>>2]|0;if(c){x=0;f=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(f)k[t>>2]=0}v=h;w=u}K2a(d);q=v;s=w;Sc(s|0)}function S1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;a=r;r=r+80|0;c=a+72|0;d=a+16|0;e=a;f=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;g8(c,b);g=k[c>>2]|0;h=c+4|0;i=k[h>>2]|0;k[c>>2]=0;k[h>>2]=0;k[f+4>>2]=g;g=f+8|0;f=k[g>>2]|0;k[g>>2]=i;if(f)j0a(f);f=k[h>>2]|0;if(f)j0a(f);f=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;if(k[f>>2]|0){r=a;return}q2a(e,246507,22);x=0;fb(273,d|0,b|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;j=M;l=b;K2a(e);Sc(l|0)}x=0;nb(122,d|0,246530,246363,58);x=0;b=Hc()|0;a=M;f=d+20|0;k[f>>2]=31332;k[d>>2]=31296;k[d+36>>2]=31356;K2a(d+8|0);k[f>>2]=31388;k[f+-20>>2]=31416;k[f+16>>2]=31440;K2a(d+24|0);k[d+36>>2]=20796;f=d+40|0;d=k[f>>2]|0;if(d){x=0;h=Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(h)k[f>>2]=0}j=a;l=b;K2a(e);Sc(l|0)}function T1(){k[8666]=0;k[8667]=0;k[8668]=0;return}function U1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+64|0;f=e;Z$(f,a);k[f+(k[(k[f>>2]|0)+-28>>2]|0)+8>>2]=b;k[f+(k[(k[f>>2]|0)+-28>>2]|0)+12>>2]=c;k[f+(k[(k[f>>2]|0)+-28>>2]|0)+16>>2]=d;x=0;va(1501,f|0);x=0;d=Hc()|0;c=f+20|0;k[c>>2]=31332;k[f>>2]=31296;k[f+36>>2]=31356;K2a(f+8|0);k[c>>2]=31388;k[c+-20>>2]=31416;k[c+16>>2]=31440;K2a(f+24|0);k[f+36>>2]=20796;c=f+40|0;f=k[c>>2]|0;if(!f)Sc(d|0);x=0;b=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!b)Sc(d|0);k[c>>2]=0;Sc(d|0)}function V1(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=r;r=r+64|0;c=b;b=Rd(60)|0;x=0;xa(780,c|0,a|0);a=x;x=0;if(!(a&1)){x=0;xa(783,b|0,c|0);a=x;x=0;if(a&1)d=1;else{x=0;fb(149,b|0,5168,756);x=0;d=0}a=Hc()|0;e=M;f=c+20|0;k[f>>2]=31332;k[c>>2]=31296;k[c+36>>2]=31356;K2a(c+8|0);k[f>>2]=31388;k[f+-20>>2]=31416;k[f+16>>2]=31440;K2a(c+24|0);k[c+36>>2]=20796;f=c+40|0;c=k[f>>2]|0;if(c){x=0;g=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(g)k[f>>2]=0}if(d){h=e;i=a}else{j=e;l=a;Sc(l|0)}}else{a=Hc()|0;h=M;i=a}Fc(b|0);j=h;l=i;Sc(l|0)}function W1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c;e=a+36|0;f=a+40|0;k[f>>2]=0;k[a+44>>2]=0;k[a+48>>2]=0;k[a+52>>2]=-1;g=a+20|0;k[g>>2]=34460;h=g+-20|0;k[h>>2]=34488;i=g+16|0;k[i>>2]=34512;j=a+24|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);d=a+56|0;k[d>>2]=21368;k[g>>2]=34404;k[a>>2]=34368;k[e>>2]=34428;k[a+4>>2]=k[b+4>>2];l=a+8|0;x=0;xa(604,l|0,b+8|0);m=x;x=0;do if(!(m&1)){k[a+20>>2]=34596;k[a>>2]=34552;k[a+36>>2]=34620;k[d>>2]=34648;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;k[g>>2]=34404;k[a>>2]=34368;k[e>>2]=34428;K2a(l);p=o;q=n;break}else{r=c;return}}else{n=Hc()|0;p=M;q=n}while(0);k[g>>2]=34460;k[h>>2]=34488;k[i>>2]=34512;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(q|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(q|0);k[f>>2]=0;Sc(q|0)}function X1(a){a=a|0;var b=0,c=0;b=a+20|0;k[b>>2]=34404;k[a>>2]=34368;k[a+36>>2]=34428;K2a(a+8|0);k[b>>2]=34460;k[b+-20>>2]=34488;k[b+16>>2]=34512;K2a(a+24|0);k[a+36>>2]=20796;b=a+40|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function Y1(a){a=a|0;var b=0,c=0,d=0;b=a+20|0;k[b>>2]=34404;k[a>>2]=34368;k[a+36>>2]=34428;K2a(a+8|0);k[b>>2]=34460;k[b+-20>>2]=34488;k[b+16>>2]=34512;K2a(a+24|0);k[a+36>>2]=20796;b=a+40|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function Z1(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(60)|0;x=0;i[c>>0]=i[b>>0]|0;fb(279,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function _1(a){a=a|0;var b=0;b=Rd(60)|0;x=0;xa(784,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,5168,756)}function $1(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+20|0;k[a>>2]=34404;k[b>>2]=34368;c=b+36|0;k[c>>2]=34428;K2a(b+8|0);k[a>>2]=34460;k[a+-20>>2]=34488;k[a+16>>2]=34512;K2a(b+24|0);k[c>>2]=20796;c=b+40|0;b=k[c>>2]|0;if(!b)return;x=0;a=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!a)return;k[c>>2]=0;return}function a2(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+20|0;k[a>>2]=34404;k[b>>2]=34368;c=b+36|0;k[c>>2]=34428;K2a(b+8|0);k[a>>2]=34460;k[a+-20>>2]=34488;k[a+16>>2]=34512;K2a(b+24|0);k[c>>2]=20796;c=b+40|0;a=k[c>>2]|0;if(!a){OBa(b);return}x=0;d=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!d){OBa(b);return}k[c>>2]=0;OBa(b);return}function b2(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(60)|0;x=0;i[c>>0]=i[b>>0]|0;fb(279,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function c2(a){a=a|0;_1(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function d2(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+20|0;k[a>>2]=34404;k[b>>2]=34368;c=b+36|0;k[c>>2]=34428;K2a(b+8|0);k[a>>2]=34460;k[a+-20>>2]=34488;k[a+16>>2]=34512;K2a(b+24|0);k[c>>2]=20796;c=b+40|0;b=k[c>>2]|0;if(!b)return;x=0;a=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!a)return;k[c>>2]=0;return}function e2(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+20|0;k[a>>2]=34404;k[b>>2]=34368;c=b+36|0;k[c>>2]=34428;K2a(b+8|0);k[a>>2]=34460;k[a+-20>>2]=34488;k[a+16>>2]=34512;K2a(b+24|0);k[c>>2]=20796;c=b+40|0;a=k[c>>2]|0;if(!a){OBa(b);return}x=0;d=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!d){OBa(b);return}k[c>>2]=0;OBa(b);return}function f2(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c;e=a+36|0;f=a+40|0;k[f>>2]=0;k[a+44>>2]=0;k[a+48>>2]=0;k[a+52>>2]=-1;g=a+20|0;k[g>>2]=34460;h=g+-20|0;k[h>>2]=34488;i=g+16|0;k[i>>2]=34512;j=a+24|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);d=a+56|0;k[d>>2]=21368;k[g>>2]=34404;k[a>>2]=34368;k[e>>2]=34428;k[a+4>>2]=k[b+4>>2];l=a+8|0;x=0;xa(604,l|0,b+8|0);m=x;x=0;do if(!(m&1)){k[a+20>>2]=34596;k[a>>2]=34552;k[a+36>>2]=34620;k[d>>2]=34648;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;k[g>>2]=34404;k[a>>2]=34368;k[e>>2]=34428;K2a(l);p=o;q=n;break}else{r=c;return}}else{n=Hc()|0;p=M;q=n}while(0);k[g>>2]=34460;k[h>>2]=34488;k[i>>2]=34512;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(q|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(q|0);k[f>>2]=0;Sc(q|0)}function g2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+36|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+40>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+44|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+20|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=34460;c=h+-20|0;k[c>>2]=34488;i=h+16|0;k[i>>2]=34512;j=a+24|0;x=0;xa(604,j|0,e+4|0);e=x;x=0;do if(!(e&1)){l=a+56|0;k[l>>2]=21368;k[h>>2]=34404;k[a>>2]=34368;k[a+36>>2]=34428;k[a+4>>2]=k[b+4>>2];x=0;xa(604,a+8|0,b+8|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;k[h>>2]=34460;k[c>>2]=34488;k[i>>2]=34512;K2a(j);o=n;p=m;break}else{k[a+20>>2]=34596;k[a>>2]=34552;k[d>>2]=34620;k[l>>2]=34648;return}}else{l=Hc()|0;o=M;p=l}while(0);k[d>>2]=20796;d=a+40|0;a=k[d>>2]|0;if(!a){f=o;g=p;Sc(g|0)}x=0;j=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!j){f=o;g=p;Sc(g|0)}k[d>>2]=0;f=o;g=p;Sc(g|0)}function h2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;Tf[k[(k[b>>2]|0)+12>>2]&2047](b,a);b=k[a+4>>2]|0;a=k[b>>2]|0;c=k[b+4>>2]|0;if((a|0)==(c|0)){d=1;return d|0}else e=a;while(1){a=k[e>>2]|0;b=k[e+4>>2]|0;if(!b){if((k[a+4>>2]|0)!=6){d=0;f=6;break}}else{h0a(b);g=(k[a+4>>2]|0)==6;j0a(b);if(!g){d=0;f=6;break}}e=e+8|0;if((e|0)==(c|0)){d=1;f=6;break}}if((f|0)==6)return d|0;return 0}function i2(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+48|0;e=d+24|0;f=d+8|0;g=d;h=KBa(68)|0;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=31248;i=h+12|0;x=0;xa(731,i|0,4);j=x;x=0;if(j&1){j=Hc()|0;c0a(h);OBa(h);Sc(j|0)}j=i;k[e>>2]=31456;l=b;m=k[l+4>>2]|0;n=e+4|0;k[n>>2]=k[l>>2];k[n+4>>2]=m;k[e+12>>2]=k[b+8>>2];m=k[b+12>>2]|0;k[e+16>>2]=m;b=(m|0)==0;if(!b)h0a(m);x=0;n=Ta(566,i|0,e|0)|0;i=x;x=0;do if(!(i&1)?(k[f>>2]=21048,l=f+4|0,x=0,xa(604,l|0,c|0),o=x,x=0,!(o&1)):0){x=0;Ta(564,n|0,f|0)|0;o=x;x=0;if(o&1){o=Hc()|0;p=M;k[f>>2]=21048;K2a(l);q=p;s=o;break}k[f>>2]=21048;K2a(l);k[e>>2]=31456;if(!b)j0a(m);l=k[a+4>>2]|0;k[g>>2]=j;o=g+4|0;k[o>>2]=h;h0a(h);p=l+4|0;t=k[p>>2]|0;if(t>>>0<(k[l+8>>2]|0)>>>0){k[t>>2]=j;k[t+4>>2]=h;k[g>>2]=0;k[o>>2]=0;k[p>>2]=t+8;j0a(h);r=d;return}x=0;xa(732,l|0,g|0);l=x;x=0;if(l&1){l=Hc()|0;t=M;p=k[o>>2]|0;if(!p){u=t;v=l;j0a(h);Sc(v|0)}j0a(p);u=t;v=l;j0a(h);Sc(v|0)}else{l=k[o>>2]|0;if(!l){j0a(h);r=d;return}j0a(l);j0a(h);r=d;return}}else w=16;while(0);if((w|0)==16){w=Hc()|0;q=M;s=w}k[e>>2]=31456;if(b){u=q;v=s;j0a(h);Sc(v|0)}j0a(m);u=q;v=s;j0a(h);Sc(v|0)}function j2(a,b){a=a|0;b=b|0;i[a+9>>0]=0;return 1}function k2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+128|0;d=c+96|0;e=c+80|0;f=c+68|0;g=c+56|0;h=c+44|0;j=c+32|0;l=c+20|0;m=c+8|0;n=c;if(i[a+9>>0]|0){r=c;return}o=KBa(68)|0;k[o+4>>2]=0;k[o+8>>2]=0;k[o>>2]=31248;p=o+12|0;x=0;xa(731,p|0,6);q=x;x=0;if(q&1){q=Hc()|0;c0a(o);OBa(o);Sc(q|0)}q=p;k[d>>2]=31456;s=b+8|0;t=k[s+4>>2]|0;u=d+4|0;k[u>>2]=k[s>>2];k[u+4>>2]=t;k[d+12>>2]=k[b+16>>2];t=k[b+20>>2]|0;k[d+16>>2]=t;b=(t|0)==0;if(!b)h0a(t);x=0;u=Ta(566,p|0,d|0)|0;p=x;x=0;if(!(p&1)?(x=0,fb(140,j|0,246711,56),p=x,x=0,!(p&1)):0){x=0;fb(140,l|0,246768,34);p=x;x=0;if(p&1){p=Hc()|0;v=M;w=p}else{p=i[l>>0]|0;s=(p&1)==0;x=0;y=Fa(88,j|0,(s?l+1|0:k[l+8>>2]|0)|0,(s?(p&255)>>>1:k[l+4>>2]|0)|0)|0;p=x;x=0;if(p&1){p=Hc()|0;z=M;A=p}else{k[h>>2]=k[y>>2];k[h+4>>2]=k[y+4>>2];k[h+8>>2]=k[y+8>>2];k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;x=0;y=Ta(484,h|0,k[11098]|0)|0;p=x;x=0;if(p&1){p=Hc()|0;B=M;C=p}else{k[g>>2]=k[y>>2];k[g+4>>2]=k[y+4>>2];k[g+8>>2]=k[y+8>>2];k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;x=0;fb(140,m|0,246803,3);y=x;x=0;if(y&1){y=Hc()|0;D=M;E=y}else{y=i[m>>0]|0;p=(y&1)==0;x=0;s=Fa(88,g|0,(p?m+1|0:k[m+8>>2]|0)|0,(p?(y&255)>>>1:k[m+4>>2]|0)|0)|0;y=x;x=0;if(y&1){y=Hc()|0;F=M;G=y}else{k[f>>2]=k[s>>2];k[f+4>>2]=k[s+4>>2];k[f+8>>2]=k[s+8>>2];k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[e>>2]=21048;s=e+4|0;x=0;xa(604,s|0,f|0);y=x;x=0;do if(y&1){p=Hc()|0;H=M;I=p}else{x=0;Ta(564,u|0,e|0)|0;p=x;x=0;if(p&1){p=Hc()|0;J=M;k[e>>2]=21048;K2a(s);H=J;I=p;break}k[e>>2]=21048;K2a(s);K2a(f);K2a(m);K2a(g);K2a(h);K2a(l);K2a(j);k[d>>2]=31456;if(!b)j0a(t);p=k[a+4>>2]|0;k[n>>2]=q;J=n+4|0;k[J>>2]=o;h0a(o);K=p+4|0;L=k[K>>2]|0;do if(L>>>0<(k[p+8>>2]|0)>>>0){k[L>>2]=q;k[L+4>>2]=o;k[n>>2]=0;k[J>>2]=0;k[K>>2]=L+8}else{x=0;xa(732,p|0,n|0);N=x;x=0;if(!(N&1)){N=k[J>>2]|0;if(!N)break;j0a(N);break}N=Hc()|0;O=M;P=k[J>>2]|0;if(!P){Q=O;R=N;j0a(o);Sc(R|0)}j0a(P);Q=O;R=N;j0a(o);Sc(R|0)}while(0);j0a(o);r=c;return}while(0);K2a(f);F=H;G=I}K2a(m);D=F;E=G}K2a(g);B=D;C=E}K2a(h);z=B;A=C}K2a(l);v=z;w=A}K2a(j);S=v;T=w}else{w=Hc()|0;S=M;T=w}k[d>>2]=31456;if(b){Q=S;R=T;j0a(o);Sc(R|0)}j0a(t);Q=S;R=T;j0a(o);Sc(R|0)}function l2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;c=r;r=r+224|0;d=c+176|0;e=c+164|0;f=c+140|0;g=c+116|0;h=c+104|0;j=c+92|0;l=c+152|0;m=c+128|0;n=c+52|0;o=c+48|0;p=c+56|0;q=c+36|0;s=c+24|0;t=c+12|0;u=c;v=b+24|0;w=b+28|0;y=(k[v>>2]|0)!=(k[w>>2]|0);q2a(f,329672,0);x=0;pa(57,y|0,f|0,68,246807,246851);y=x;x=0;if(y&1){y=Hc()|0;z=M;K2a(f);A=z;B=y;Sc(B|0)}K2a(f);f=b+36|0;y=b+40|0;z=((k[w>>2]|0)-(k[v>>2]|0)>>2|0)==(((k[y>>2]|0)-(k[f>>2]|0)|0)/12|0|0);q2a(g,329672,0);x=0;pa(57,z|0,g|0,69,246807,246851);z=x;x=0;if(z&1){z=Hc()|0;C=M;K2a(g);A=C;B=z;Sc(B|0)}K2a(g);g=k[v>>2]|0;do if((k[g>>2]|0)==119)D=g;else{if(!(b5a(k[f>>2]|0,246940)|0)){D=k[v>>2]|0;break}z=k[f>>2]|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;C=i[z>>0]|0;E=(C&1)==0?(C&255)>>>1:k[z+4>>2]|0;x=0;nb(83,j|0,246949,16,E+16|0);C=x;x=0;if(C&1){F=Hc()|0;G=M;K2a(j);Sc(F|0)}x=0;Fa(88,j|0,((i[z>>0]&1)==0?z+1|0:k[z+8>>2]|0)|0,E|0)|0;E=x;x=0;if(E&1){F=Hc()|0;G=M;K2a(j);Sc(F|0)}x=0;E=Ta(484,j|0,276785)|0;z=x;x=0;do if(z&1){C=Hc()|0;H=M;I=C}else{k[h>>2]=k[E>>2];k[h+4>>2]=k[E+4>>2];k[h+8>>2]=k[E+8>>2];k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;x=0;fb(280,a|0,b+8|0,h|0);C=x;x=0;if(C&1){C=Hc()|0;J=M;K2a(h);H=J;I=C;break}K2a(h);K2a(j);r=c;return 1}while(0);K2a(j);A=H;B=I;Sc(B|0)}while(0);I=D+4|0;D=k[w>>2]|0;w=I;k[l>>2]=0;H=l+4|0;k[H>>2]=0;k[l+8>>2]=0;j=D-w|0;h=j>>2;F=D;do if(h){if(!(h>>>0>1073741823?(x=0,va(1473,l|0),D=x,x=0,D&1):0))K=20;if((K|0)==20?(x=0,D=Ba(563,j|0)|0,G=x,x=0,!(G&1)):0){k[H>>2]=D;k[l>>2]=D;k[l+8>>2]=D+(h<<2);if((I|0)==(F|0))break;G=F+-4-w|0;v=I;g=D;while(1){k[g>>2]=k[v>>2];v=v+4|0;if((v|0)==(F|0))break;else g=g+4|0}k[H>>2]=D+((G>>>2)+1<<2);break}g=Hc()|0;v=k[l>>2]|0;if(!v)Sc(g|0);E=k[H>>2]|0;if((E|0)!=(v|0))k[H>>2]=E+(~((E+-4-v|0)>>>2)<<2);OBa(v);Sc(g|0)}while(0);k[n>>2]=(k[f>>2]|0)+12;k[o>>2]=k[y>>2];x=0;k[e>>2]=k[n>>2];k[d>>2]=k[o>>2];fb(281,m|0,e|0,d|0);o=x;x=0;if(!(o&1)){x=0;xa(785,d|0,l|0);o=x;x=0;do if(o&1){n=Hc()|0;L=M;N=n;K=49}else{x=0;xa(761,d+12|0,m|0);n=x;x=0;if(n&1){n=Hc()|0;y=M;f=k[d>>2]|0;if(!f){L=y;N=n;K=49;break}F=d+4|0;I=k[F>>2]|0;if((I|0)!=(f|0))k[F>>2]=I+(~((I+-4-f|0)>>>2)<<2);OBa(f);L=y;N=n;K=49;break}n=d+24|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;xa(786,e|0,d|0);n=x;x=0;if(!(n&1)){x=0;xa(604,q|0,44396);n=x;x=0;do if(n&1){y=Hc()|0;O=M;P=y}else{x=0;xa(774,p|0,q|0);y=x;x=0;if(y&1){y=Hc()|0;f=M;K2a(q);O=f;P=y;break}K2a(q);x=0;y=Ta(576,e|0,p|0)|0;f=x;x=0;a:do if(f&1)K=53;else{b:do if(!y){I=b+8|0;x=0;xa(604,u|0,44396);F=x;x=0;if(F&1){K=53;break a}x=0;F=Fa(86,u|0,0,246966)|0;w=x;x=0;if(w&1){w=Hc()|0;Q=M;R=w}else{k[t>>2]=k[F>>2];k[t+4>>2]=k[F+4>>2];k[t+8>>2]=k[F+8>>2];k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;x=0;F=Ta(484,t|0,247036)|0;w=x;x=0;do if(!(w&1)){k[s>>2]=k[F>>2];k[s+4>>2]=k[F+4>>2];k[s+8>>2]=k[F+8>>2];k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;x=0;fb(280,a|0,I|0,s|0);h=x;x=0;if(h&1){h=Hc()|0;j=M;K2a(s);S=j;T=h;break}else{K2a(s);K2a(t);K2a(u);break b}}else{h=Hc()|0;S=M;T=h}while(0);K2a(t);Q=S;R=T}K2a(u);U=Q;V=R;break a}while(0);i[a+9>>0]=1;K2a(p+24|0);K2a(p+12|0);I=k[e>>2]|0;if(I){F=e+4|0;w=k[F>>2]|0;if((w|0)==(I|0))W=I;else{h=w;while(1){w=h+-12|0;k[F>>2]=w;j=k[w>>2]|0;if(!j)X=w;else{g=h+-8|0;v=k[g>>2]|0;if((v|0)==(j|0))Y=j;else{E=v;do{k[g>>2]=E+-44;K2a(E+-16|0);K2a(E+-28|0);E=k[g>>2]|0}while((E|0)!=(j|0));Y=k[w>>2]|0}OBa(Y);X=k[F>>2]|0}if((X|0)==(I|0))break;else h=X}W=k[e>>2]|0}OBa(W)}y2(d);h=k[m>>2]|0;if(h){I=m+4|0;F=k[I>>2]|0;if((F|0)==(h|0))Z=h;else{j=F;do{F=j+-12|0;k[I>>2]=F;K2a(F);j=k[I>>2]|0}while((j|0)!=(h|0));Z=k[m>>2]|0}OBa(Z)}h=k[l>>2]|0;j=h;if(h){I=k[H>>2]|0;if((I|0)!=(h|0))k[H>>2]=I+(~((I+-4-j|0)>>>2)<<2);OBa(h)}r=c;return 1}while(0);if((K|0)==53){y=Hc()|0;U=M;V=y}K2a(p+24|0);K2a(p+12|0);O=U;P=V}while(0);n=k[e>>2]|0;if(!n){_=O;$=P}else{G=e+4|0;D=k[G>>2]|0;if((D|0)==(n|0))aa=n;else{y=D;while(1){D=y+-12|0;k[G>>2]=D;f=k[D>>2]|0;if(!f)ba=D;else{h=y+-8|0;j=k[h>>2]|0;if((j|0)==(f|0))ca=f;else{I=j;do{k[h>>2]=I+-44;K2a(I+-16|0);K2a(I+-28|0);I=k[h>>2]|0}while((I|0)!=(f|0));ca=k[D>>2]|0}OBa(ca);ba=k[G>>2]|0}if((ba|0)==(n|0))break;else y=ba}aa=k[e>>2]|0}OBa(aa);_=O;$=P}}else{y=Hc()|0;_=M;$=y}y2(d);da=_;ea=$}while(0);if((K|0)==49){da=L;ea=N}N=k[m>>2]|0;if(!N){fa=da;ga=ea}else{L=m+4|0;K=k[L>>2]|0;if((K|0)==(N|0))ha=N;else{$=K;do{K=$+-12|0;k[L>>2]=K;K2a(K);$=k[L>>2]|0}while(($|0)!=(N|0));ha=k[m>>2]|0}OBa(ha);fa=da;ga=ea}}else{ea=Hc()|0;fa=M;ga=ea}ea=k[l>>2]|0;if(!ea){A=fa;B=ga;Sc(B|0)}l=k[H>>2]|0;if((l|0)!=(ea|0))k[H>>2]=l+(~((l+-4-ea|0)>>>2)<<2);OBa(ea);A=fa;B=ga;Sc(B|0);return 0}function m2(a,b){a=a|0;b=b|0;i[a+8>>0]=0;return 1}function n2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=a+8|0;if(i[e>>0]|0){i[e>>0]=0;r=c;return}f=(k[b+76>>2]|0)+8|0;q2a(d,247125,35);x=0;fb(280,a|0,f|0,d|0);f=x;x=0;if(f&1){f=Hc()|0;K2a(d);Sc(f|0)}K2a(d);i[e>>0]=0;r=c;return}function o2(a,b){a=a|0;b=b|0;b=a+12|0;k[b>>2]=(k[b>>2]|0)+1;return 1}function p2(a,b){a=a|0;b=b|0;b=a+12|0;k[b>>2]=(k[b>>2]|0)+-1;return}function q2(a,b){a=a|0;b=b|0;b=a+12|0;k[b>>2]=(k[b>>2]|0)+1;return 1}function r2(a,b){a=a|0;b=b|0;b=a+12|0;k[b>>2]=(k[b>>2]|0)+-1;return}function s2(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;if((k[a+12>>2]|0)>=1){r=c;return 1}q2a(d,247161,48);x=0;fb(280,a|0,b+8|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}K2a(d);r=c;return 1}function t2(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;if((k[a+12>>2]|0)>=1){r=c;return 1}q2a(d,247210,45);x=0;fb(280,a|0,b+8|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}K2a(d);r=c;return 1}function u2(a,b){a=a|0;b=b|0;i[a+8>>0]=1;return 1}function v2(){k[8761]=0;k[8762]=0;k[8763]=0;return}function w2(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;k[a>>2]=0;d=a+4|0;k[d>>2]=0;k[a+8>>2]=0;e=k[b>>2]|0;b=k[c>>2]|0;c=b-e|0;f=(c|0)/12|0;g=e;h=b;if((b|0)==(e|0))return;if(f>>>0>357913941?(x=0,va(1473,a|0),e=x,x=0,e&1):0)i=10;else i=4;do if((i|0)==4){x=0;e=Ba(563,c|0)|0;b=x;x=0;if(!(b&1)){k[d>>2]=e;k[a>>2]=e;k[a+8>>2]=e+(f*12|0);if((g|0)==(h|0))return;b=e;e=g;while(1){x=0;xa(604,b|0,e|0);j=x;x=0;if(j&1){i=9;break}b=(k[d>>2]|0)+12|0;k[d>>2]=b;e=e+12|0;if((e|0)==(h|0)){i=17;break}}if((i|0)==9){e=Hc()|0;l=e;m=M;break}else if((i|0)==17)return}else i=10}while(0);if((i|0)==10){i=Hc()|0;l=i;m=M}m=k[a>>2]|0;if(!m)Sc(l|0);i=k[d>>2]|0;if((i|0)==(m|0))n=m;else{h=i;do{i=h+-12|0;k[d>>2]=i;K2a(i);h=k[d>>2]|0}while((h|0)!=(m|0));n=k[a>>2]|0}OBa(n);Sc(l|0)}function x2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>2;if(!f)return;if(!(f>>>0>1073741823?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<2);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=(b+-4-f|0)>>>2;e=f;f=h;while(1){k[f>>2]=k[e>>2];e=e+4|0;if((e|0)==(b|0))break;else f=f+4|0}k[c>>2]=h+(d+1<<2);return}d=Hc()|0;h=k[a>>2]|0;if(!h)Sc(d|0);a=k[c>>2]|0;if((a|0)!=(h|0))k[c>>2]=a+(~((a+-4-h|0)>>>2)<<2);OBa(h);Sc(d|0)}function y2(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;b=a+32|0;c=k[b>>2]|0;if(c){d=a+36|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-12|0;k[d>>2]=e;h=k[e>>2]|0;if(!h)i=e;else{j=g+-8|0;l=k[j>>2]|0;if((l|0)==(h|0))m=h;else{n=l;do{k[j>>2]=n+-44;K2a(n+-16|0);K2a(n+-28|0);n=k[j>>2]|0}while((n|0)!=(h|0));m=k[e>>2]|0}OBa(m);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=a+12|0;b=k[f>>2]|0;if(b){i=a+16|0;g=k[i>>2]|0;if((g|0)==(b|0))o=b;else{c=g;do{g=c+-12|0;k[i>>2]=g;K2a(g);c=k[i>>2]|0}while((c|0)!=(b|0));o=k[f>>2]|0}OBa(o)}o=k[a>>2]|0;if(!o)return;f=a+4|0;a=k[f>>2]|0;if((a|0)!=(o|0))k[f>>2]=a+(~((a+-4-o|0)>>>2)<<2);OBa(o);return}function z2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[k[b>>2]>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,d=k[a+28>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+176>>2]&2047](b,a);return}function A2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[k[b>>2]>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,d=k[a+28>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+176>>2]&2047](b,a);return}function B2(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+4>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+180>>2]&2047](b,a);return}function C2(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+4>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+180>>2]&2047](b,a);return}function D2(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+8>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+184>>2]&2047](b,a);return}function E2(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+8>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+184>>2]&2047](b,a);return}function F2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+12>>2]&1023](b,a)|0){c=k[a+48>>2]|0;d=k[a+52>>2]|0;if((c|0)!=(d|0)){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}d=k[a+60>>2]|0;e=k[a+64>>2]|0;if((d|0)!=(e|0)){c=d;do{d=k[c>>2]|0;Tf[k[(k[d>>2]|0)+8>>2]&2047](d,b);c=c+8|0}while((c|0)!=(e|0))}}Tf[k[(k[b>>2]|0)+188>>2]&2047](b,a);return}function G2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+12>>2]&1023](b,a)|0){c=k[a+48>>2]|0;d=k[a+52>>2]|0;if((c|0)!=(d|0)){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}d=k[a+60>>2]|0;e=k[a+64>>2]|0;if((d|0)!=(e|0)){c=d;do{d=k[c>>2]|0;Tf[k[(k[d>>2]|0)+12>>2]&2047](d,b);c=c+8|0}while((c|0)!=(e|0))}}Tf[k[(k[b>>2]|0)+188>>2]&2047](b,a);return}function H2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+16>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b),c=k[a+32>>2]|0,d=k[a+36>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+192>>2]&2047](b,a);return}function I2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+16>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b),c=k[a+32>>2]|0,d=k[a+36>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+192>>2]&2047](b,a);return}function J2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+28>>2]&1023](b,a)|0?(c=k[a+40>>2]|0,d=k[a+44>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+204>>2]&2047](b,a);return}function K2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+28>>2]&1023](b,a)|0?(c=k[a+40>>2]|0,d=k[a+44>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+204>>2]&2047](b,a);return}function L2(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+32>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+208>>2]&2047](b,a);return}function M2(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+32>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+208>>2]&2047](b,a);return}function N2(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+20>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b),c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+196>>2]&2047](b,a);return}function O2(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+24>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b),c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+196>>2]&2047](b,a);return}function P2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+24>>2]&1023](b,a)|0?(c=k[a+40>>2]|0,d=k[a+44>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+200>>2]&2047](b,a);return}function Q2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+20>>2]&1023](b,a)|0?(c=k[a+40>>2]|0,d=k[a+44>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+200>>2]&2047](b,a);return}function R2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+36>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,d=k[a+28>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+212>>2]&2047](b,a);return}function S2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+36>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,d=k[a+28>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+212>>2]&2047](b,a);return}function T2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+40>>2]&1023](b,a)|0){c=k[a+52>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);c=k[a+60>>2]|0;if(c)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);c=k[a+80>>2]|0;d=k[a+84>>2]|0;if((c|0)!=(d|0)){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}d=k[a+92>>2]|0;if(d)Tf[k[(k[d>>2]|0)+8>>2]&2047](d,b)}Tf[k[(k[b>>2]|0)+216>>2]&2047](b,a);return}function U2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+40>>2]&1023](b,a)|0){c=k[a+52>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);c=k[a+60>>2]|0;if(c)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);c=k[a+80>>2]|0;d=k[a+84>>2]|0;if((c|0)!=(d|0)){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}d=k[a+92>>2]|0;if(d)Tf[k[(k[d>>2]|0)+12>>2]&2047](d,b)}Tf[k[(k[b>>2]|0)+216>>2]&2047](b,a);return}function V2(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+44>>2]&1023](b,a)|0){c=k[a+40>>2]|0;if(c)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);c=k[a+48>>2]|0;if(c)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+220>>2]&2047](b,a);return}function W2(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+44>>2]&1023](b,a)|0){c=k[a+40>>2]|0;if(c)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);c=k[a+48>>2]|0;if(c)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+220>>2]&2047](b,a);return}function X2(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+48>>2]&1023](b,a)|0){c=k[a+52>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);c=k[a+76>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+224>>2]&2047](b,a);return}function Y2(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+48>>2]&1023](b,a)|0){c=k[a+52>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);c=k[a+76>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+224>>2]&2047](b,a);return}function Z2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+52>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b),c=k[a+32>>2]|0,d=k[a+36>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+228>>2]&2047](b,a);return}function _2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+52>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b),c=k[a+32>>2]|0,d=k[a+36>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+228>>2]&2047](b,a);return}function $2(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+56>>2]&1023](b,a)|0){c=k[a+52>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+232>>2]&2047](b,a);return}function a3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+56>>2]&1023](b,a)|0){c=k[a+52>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+232>>2]&2047](b,a);return}function b3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+60>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+236>>2]&2047](b,a);return}function c3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+60>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+236>>2]&2047](b,a);return}function d3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+64>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+240>>2]&2047](b,a);return}function e3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+64>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+240>>2]&2047](b,a);return}function f3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+68>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+244>>2]&2047](b,a);return}function g3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+68>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+244>>2]&2047](b,a);return}function h3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+72>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);c=k[a+32>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+248>>2]&2047](b,a);return}function i3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+72>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);c=k[a+32>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+248>>2]&2047](b,a);return}function j3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+76>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b),c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+252>>2]&2047](b,a);return}function k3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+76>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b),c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+252>>2]&2047](b,a);return}function l3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+80>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+256>>2]&2047](b,a);return}function m3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+104>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+280>>2]&2047](b,a);return}function n3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+84>>2]&1023](b,a)|0?(c=k[a+32>>2]|0,d=k[a+36>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+260>>2]&2047](b,a);return}function o3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+80>>2]&1023](b,a)|0?(c=k[a+32>>2]|0,d=k[a+36>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+256>>2]&2047](b,a);return}function p3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+88>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+264>>2]&2047](b,a);return}function q3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+84>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+260>>2]&2047](b,a);return}function r3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+92>>2]&1023](b,a)|0?(c=k[a+32>>2]|0,Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b),c=k[a+40>>2]|0,Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b),c=k[a+48>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+268>>2]&2047](b,a);return}function s3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+88>>2]&1023](b,a)|0?(c=k[a+32>>2]|0,Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b),c=k[a+40>>2]|0,Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b),c=k[a+48>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+264>>2]&2047](b,a);return}function t3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+96>>2]&1023](b,a)|0){c=k[a+32>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);c=k[a+40>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+272>>2]&2047](b,a);return}function u3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+92>>2]&1023](b,a)|0){c=k[a+32>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);c=k[a+40>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+268>>2]&2047](b,a);return}function v3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!(cg[k[(k[b>>2]|0)+100>>2]&1023](b,a)|0)){c=k[b>>2]|0;d=c+276|0;e=k[d>>2]|0;Tf[e&2047](b,a);return}f=k[a+32>>2]|0;if(f)Tf[k[(k[f>>2]|0)+8>>2]&2047](f,b);f=k[a+40>>2]|0;if(f)Tf[k[(k[f>>2]|0)+8>>2]&2047](f,b);f=k[a+48>>2]|0;if(f)Tf[k[(k[f>>2]|0)+8>>2]&2047](f,b);f=k[a+56>>2]|0;Tf[k[(k[f>>2]|0)+8>>2]&2047](f,b);c=k[b>>2]|0;d=c+276|0;e=k[d>>2]|0;Tf[e&2047](b,a);return}function w3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!(cg[k[(k[b>>2]|0)+96>>2]&1023](b,a)|0)){c=k[b>>2]|0;d=c+272|0;e=k[d>>2]|0;Tf[e&2047](b,a);return}f=k[a+32>>2]|0;if(f)Tf[k[(k[f>>2]|0)+12>>2]&2047](f,b);f=k[a+40>>2]|0;if(f)Tf[k[(k[f>>2]|0)+12>>2]&2047](f,b);f=k[a+48>>2]|0;if(f)Tf[k[(k[f>>2]|0)+12>>2]&2047](f,b);f=k[a+56>>2]|0;Tf[k[(k[f>>2]|0)+12>>2]&2047](f,b);c=k[b>>2]|0;d=c+272|0;e=k[d>>2]|0;Tf[e&2047](b,a);return}function x3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+104>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+280>>2]&2047](b,a);return}function y3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+100>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+276>>2]&2047](b,a);return}function z3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+108>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+284>>2]&2047](b,a);return}function A3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+108>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+284>>2]&2047](b,a);return}function B3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+112>>2]&1023](b,a)|0?(c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+288>>2]&2047](b,a);return}function C3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+112>>2]&1023](b,a)|0?(c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+288>>2]&2047](b,a);return}function D3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+116>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+292>>2]&2047](b,a);return}function E3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+116>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+292>>2]&2047](b,a);return}function F3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+124>>2]&1023](b,a)|0?(c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+300>>2]&2047](b,a);return}function G3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+124>>2]&1023](b,a)|0?(c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+300>>2]&2047](b,a);return}function H3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+120>>2]&1023](b,a)|0){c=k[a+32>>2]|0;d=k[a+36>>2]|0;if((c|0)!=(d|0)){e=c;do{c=k[e>>2]|0;if(c)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}d=k[a+44>>2]|0;if(d)Tf[k[(k[d>>2]|0)+8>>2]&2047](d,b)}Tf[k[(k[b>>2]|0)+296>>2]&2047](b,a);return}function I3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+120>>2]&1023](b,a)|0){c=k[a+32>>2]|0;d=k[a+36>>2]|0;if((c|0)!=(d|0)){e=c;do{c=k[e>>2]|0;if(c)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}d=k[a+44>>2]|0;if(d)Tf[k[(k[d>>2]|0)+12>>2]&2047](d,b)}Tf[k[(k[b>>2]|0)+296>>2]&2047](b,a);return}function J3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!(cg[k[(k[b>>2]|0)+128>>2]&1023](b,a)|0)){c=k[b>>2]|0;d=c+304|0;e=k[d>>2]|0;Tf[e&2047](b,a);return}f=k[a+24>>2]|0;Tf[k[(k[f>>2]|0)+8>>2]&2047](f,b);f=k[a+32>>2]|0;Tf[k[(k[f>>2]|0)+8>>2]&2047](f,b);f=k[a+40>>2]|0;Tf[k[(k[f>>2]|0)+8>>2]&2047](f,b);c=k[b>>2]|0;d=c+304|0;e=k[d>>2]|0;Tf[e&2047](b,a);return}function K3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!(cg[k[(k[b>>2]|0)+128>>2]&1023](b,a)|0)){c=k[b>>2]|0;d=c+304|0;e=k[d>>2]|0;Tf[e&2047](b,a);return}f=k[a+24>>2]|0;Tf[k[(k[f>>2]|0)+12>>2]&2047](f,b);f=k[a+32>>2]|0;Tf[k[(k[f>>2]|0)+12>>2]&2047](f,b);f=k[a+40>>2]|0;Tf[k[(k[f>>2]|0)+12>>2]&2047](f,b);c=k[b>>2]|0;d=c+304|0;e=k[d>>2]|0;Tf[e&2047](b,a);return}function L3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+132>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);c=k[a+36>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+308>>2]&2047](b,a);return}function M3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+132>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);c=k[a+36>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+308>>2]&2047](b,a);return}function N3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+136>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,d=k[a+28>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;if(c)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+312>>2]&2047](b,a);return}function O3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+136>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,d=k[a+28>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;if(c)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+312>>2]&2047](b,a);return}function P3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+140>>2]&1023](b,a)|0){c=k[a+28>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+316>>2]&2047](b,a);return}function Q3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+140>>2]&1023](b,a)|0){c=k[a+28>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+316>>2]&2047](b,a);return}function R3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+144>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);c=k[a+36>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+320>>2]&2047](b,a);return}function S3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+144>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);c=k[a+36>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+320>>2]&2047](b,a);return}function T3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+148>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b),c=k[a+32>>2]|0,d=k[a+36>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+324>>2]&2047](b,a);return}function U3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(cg[k[(k[b>>2]|0)+148>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b),c=k[a+32>>2]|0,d=k[a+36>>2]|0,(c|0)!=(d|0)):0){e=c;do{c=k[e>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);e=e+8|0}while((e|0)!=(d|0))}Tf[k[(k[b>>2]|0)+324>>2]&2047](b,a);return}function V3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+152>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+328>>2]&2047](b,a);return}function W3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+152>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+328>>2]&2047](b,a);return}function X3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+156>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+332>>2]&2047](b,a);return}function Y3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+156>>2]&1023](b,a)|0){c=k[a+24>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b)}Tf[k[(k[b>>2]|0)+332>>2]&2047](b,a);return}function Z3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+160>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b),c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+8>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+336>>2]&2047](b,a);return}function _3(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[b>>2]|0)+160>>2]&1023](b,a)|0?(c=k[a+24>>2]|0,Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b),c=k[a+32>>2]|0,(c|0)!=0):0)Tf[k[(k[c>>2]|0)+12>>2]&2047](c,b);Tf[k[(k[b>>2]|0)+336>>2]&2047](b,a);return}function $3(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+164>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+340>>2]&2047](b,a);return}function a4(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+164>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+340>>2]&2047](b,a);return}function b4(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+168>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+344>>2]&2047](b,a);return}function c4(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+168>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+344>>2]&2047](b,a);return}function d4(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+172>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+348>>2]&2047](b,a);return}function e4(a,b){a=a|0;b=b|0;cg[k[(k[b>>2]|0)+172>>2]&1023](b,a)|0;Tf[k[(k[b>>2]|0)+348>>2]&2047](b,a);return}function f4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;k[a>>2]=35064;k[a+4>>2]=0;c=b;d=k[c+4>>2]|0;e=a+8|0;k[e>>2]=k[c>>2];k[e+4>>2]=d;k[a+16>>2]=k[b+8>>2];d=k[b+12>>2]|0;k[a+20>>2]=d;if(!d)return;h0a(d);return}function g4(a){a=a|0;var b=0;k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function h4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(4)|0;k[a>>2]=36560;k[b>>2]=a;c=a;return c|0}function i4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+96|0;e=d+40|0;f=d+16|0;g=d;esa(e,3);k[f>>2]=31456;h=b+8|0;i=k[h+4>>2]|0;j=f+4|0;k[j>>2]=k[h>>2];k[j+4>>2]=i;k[f+12>>2]=k[b+16>>2];i=k[b+20>>2]|0;k[f+16>>2]=i;b=(i|0)==0;if(!b)h0a(i);x=0;j=Ta(566,e|0,f|0)|0;h=x;x=0;if(!(h&1)?(k[g>>2]=21048,h=g+4|0,x=0,xa(604,h|0,c|0),c=x,x=0,!(c&1)):0){x=0;c=Ta(564,j|0,g|0)|0;j=x;x=0;if(!(j&1)?(x=0,xa(780,a|0,c|0),c=x,x=0,!(c&1)):0){k[g>>2]=21048;K2a(h);k[f>>2]=31456;if(!b)j0a(i);c=e+20|0;k[c>>2]=31332;k[e>>2]=31296;k[e+36>>2]=31356;K2a(e+8|0);k[c>>2]=31388;k[c+-20>>2]=31416;k[c+16>>2]=31440;K2a(e+24|0);k[e+36>>2]=20796;c=e+40|0;a=k[c>>2]|0;if(!a){r=d;return}x=0;j=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!j){r=d;return}k[c>>2]=0;r=d;return}d=Hc()|0;c=M;k[g>>2]=21048;K2a(h);l=c;m=d}else{d=Hc()|0;l=M;m=d}k[f>>2]=31456;if(!b)j0a(i);i=e+20|0;k[i>>2]=31332;k[e>>2]=31296;k[e+36>>2]=31356;K2a(e+8|0);k[i>>2]=31388;k[i+-20>>2]=31416;k[i+16>>2]=31440;K2a(e+24|0);k[e+36>>2]=20796;i=e+40|0;e=k[i>>2]|0;if(!e)Sc(m|0);x=0;b=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!b)Sc(m|0);k[i>>2]=0;Sc(m|0)}function j4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(28)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a>>2]=36576;d=a+4|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;d=a+20|0;k[d>>2]=0;k[a+24>>2]=0;k[a+16>>2]=d;k[b>>2]=a;c=a;return c|0}function k4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(20)|0;k[a>>2]=0;k[a>>2]=36592;d=a+4|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[b>>2]=a;c=a;return c|0}function l4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+16|0;f=(k[e>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,f|0,d|0,75,248722,248751);f=x;x=0;if(f&1){f=Hc()|0;K2a(d);Sc(f|0)}K2a(d);d=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+16|0;b=k[d>>2]|0;d=KBa(40)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=36608;f=d+16|0;k[f>>2]=0;e=d+20|0;k[e>>2]=0;g=d+12|0;h=d+28|0;k[h>>2]=0;k[d+32>>2]=0;k[d+24>>2]=h;k[g>>2]=38944;k[d+36>>2]=b;b=g;g=d;i0a(d);k[f>>2]=b;f=k[e>>2]|0;k[e>>2]=g;if(!f){k[a>>2]=b;i=a+4|0;k[i>>2]=g;r=c;return}k0a(f);k[a>>2]=b;i=a+4|0;k[i>>2]=g;r=c;return}function m4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+24|0;e=c+12|0;f=c;b5(e,n4(b)|0);k[a+4>>2]=0;b=a+8|0;k[b>>2]=0;g=a+4|0;k[a>>2]=g;h=k[e>>2]|0;i=e+4|0;j=k[i>>2]|0;do if((h|0)!=(j|0)){l=h;while(1){x=0;fb(282,d|0,a|0,l|0);m=x;x=0;if(m&1){n=8;break}l=l+12|0;if((l|0)==(j|0)){n=4;break}}if((n|0)==4){o=k[e>>2]|0;p=k[i>>2]|0;q=k[b>>2]|0;n=5;break}else if((n|0)==8){l=Hc()|0;s=l;t=M;n=10;break}}else{o=h;p=j;q=0;n=5}while(0);do if((n|0)==5){x=0;fb(140,f|0,248816,54);j=x;x=0;if(j&1){j=Hc()|0;s=j;t=M;n=10;break}x=0;pa(57,((p-o|0)/12|0|0)==(q|0)|0,f|0,90,248722,248871);j=x;x=0;if(j&1){j=Hc()|0;h=M;K2a(f);u=h;v=j;break}K2a(f);j=k[e>>2]|0;if(!j){r=c;return}h=k[i>>2]|0;if((h|0)==(j|0))w=j;else{b=h;while(1){h=b+-12|0;k[i>>2]=h;d=k[b+-4>>2]|0;if(!d)y=h;else{j0a(d);y=k[i>>2]|0}if((y|0)==(j|0))break;else b=y}w=k[e>>2]|0}OBa(w);r=c;return}while(0);if((n|0)==10){u=t;v=s}Yg(a,k[g>>2]|0);g=k[e>>2]|0;if(!g)Sc(v|0);a=k[i>>2]|0;if((a|0)==(g|0))z=g;else{s=a;while(1){a=s+-12|0;k[i>>2]=a;t=k[s+-4>>2]|0;if(!t)A=a;else{j0a(t);A=k[i>>2]|0}if((A|0)==(g|0))break;else s=A}z=k[e>>2]|0}OBa(z);Sc(v|0)}function n4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0;b=r;r=r+192|0;c=b+144|0;d=b+136|0;e=b;f=b+128|0;g=b+112|0;h=b+100|0;j=b+76|0;m=b+88|0;n=b+56|0;o=b+40|0;p=b+32|0;q=b+24|0;s=b+64|0;t=b+152|0;u=b+8|0;v=a+112|0;w=k[v>>2]|0;if(w){y=w;r=b;return y|0}k[g+4>>2]=0;k[g+8>>2]=0;w=g+4|0;k[g>>2]=w;k[h+4>>2]=0;k[h+8>>2]=0;z=h+4|0;k[h>>2]=z;x=0;A=Ba(563,12)|0;B=x;x=0;if(!(B&1)?(k[A>>2]=0,k[A+4>>2]=0,k[A+8>>2]=0,k[v>>2]=A,x=0,A=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0,a=x,x=0,!(a&1)):0){a=k[A+36>>2]|0;B=k[A+40>>2]|0;a:do if((a|0)==(B|0)){C=h;D=z}else{A=j+4|0;E=j+8|0;F=m+4|0;G=o+4|0;H=q+4|0;I=s+8|0;J=s+1|0;K=s+4|0;L=e+4|0;N=f+4|0;O=t+1|0;P=t+2|0;Q=t+3|0;R=u+4|0;S=u+8|0;T=p+4|0;U=j+8|0;V=n+4|0;W=a;b:while(1){X=k[W>>2]|0;k[j>>2]=0;k[A>>2]=0;k[E>>2]=0;Y=X+60|0;x=0;xa(590,m|0,Y|0);X=x;x=0;if(X&1){Z=18;break}X=k[m>>2]|0;_=k[F>>2]|0;if((X|0)==(_|0))$=X;else{aa=X;do{X=k[aa>>2]|0;x=0;ba=Ba(k[(k[X>>2]|0)+28>>2]|0,X|0)|0;ca=x;x=0;if(ca&1){Z=32;break b}do if(ba){x=0;ca=Ba(563,100)|0;da=x;x=0;if(da&1){Z=32;break b}k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca>>2]=31496;da=ca+12|0;x=0;fb(143,da|0,X|0,0);ea=x;x=0;if(ea&1){fa=ca;Z=26;break b}ea=da;da=ca;i0a(ca);k[ca+16>>2]=ea;ga=ca+20|0;ca=k[ga>>2]|0;k[ga>>2]=da;if(ca)k0a(ca);k[n>>2]=ea;k[V>>2]=da;ca=k[A>>2]|0;if(ca>>>0<(k[U>>2]|0)>>>0){k[ca>>2]=ea;k[ca+4>>2]=da;k[n>>2]=0;k[V>>2]=0;k[A>>2]=ca+8;break}x=0;xa(787,j|0,n|0);ca=x;x=0;if(ca&1){Z=34;break b}ca=k[V>>2]|0;if(ca)j0a(ca)}while(0);aa=aa+4|0}while((aa|0)!=(_|0));$=k[m>>2]|0}_=$;if($){aa=k[F>>2]|0;if((aa|0)!=($|0))k[F>>2]=aa+(~((aa+-4-_|0)>>>2)<<2);OBa($)}x=0;xa(739,o|0,Y|0);_=x;x=0;if(_&1){Z=18;break}_=k[o>>2]|0;aa=k[G>>2]|0;if((_|0)==(aa|0))ha=_;else{X=_;do{_=k[X>>2]|0;x=0;ba=Ba(k[(k[_>>2]|0)+28>>2]|0,_|0)|0;ca=x;x=0;if(ca&1){Z=60;break b}do if(ba){x=0;ca=Ba(563,100)|0;da=x;x=0;if(da&1){Z=60;break b}k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca>>2]=31496;da=ca+12|0;x=0;xa(742,da|0,_|0);ea=x;x=0;if(ea&1){ia=ca;Z=54;break b}ea=da;da=ca;i0a(ca);k[ca+16>>2]=ea;ga=ca+20|0;ca=k[ga>>2]|0;k[ga>>2]=da;if(ca)k0a(ca);k[p>>2]=ea;k[T>>2]=da;ca=k[A>>2]|0;if(ca>>>0<(k[U>>2]|0)>>>0){k[ca>>2]=ea;k[ca+4>>2]=da;k[p>>2]=0;k[T>>2]=0;k[A>>2]=ca+8;break}x=0;xa(787,j|0,p|0);ca=x;x=0;if(ca&1){Z=62;break b}ca=k[T>>2]|0;if(!ca)break;j0a(ca)}while(0);X=X+4|0}while((X|0)!=(aa|0));ha=k[o>>2]|0}aa=ha;if(ha){X=k[G>>2]|0;if((X|0)!=(ha|0))k[G>>2]=X+(~((X+-4-aa|0)>>>2)<<2);OBa(ha)}aa=k[j>>2]|0;X=k[A>>2]|0;if((aa|0)==(X|0))ja=aa;else{Y=aa;do{x=0;xa(740,q|0,k[Y>>2]|0);aa=x;x=0;if(aa&1){Z=17;break b}aa=(k[q>>2]|0)==0;_=k[H>>2]|0;if(_)j0a(_);if(!aa){x=0;xa(586,s|0,k[Y>>2]|0);aa=x;x=0;if(aa&1){Z=17;break b}aa=k[z>>2]|0;c:do if(!aa)Z=90;else{_=i[s>>0]|0;ba=(_&1)==0;ca=ba?(_&255)>>>1:k[K>>2]|0;_=ba?J:k[I>>2]|0;ba=aa;while(1){da=ba+16|0;ea=i[da>>0]|0;ga=(ea&1)==0;ka=ga?(ea&255)>>>1:k[ba+20>>2]|0;ea=ga?da+1|0:k[ba+24>>2]|0;da=ka>>>0>>0;ga=ZLa(_,ea,da?ka:ca)|0;la=ca>>>0>>0;if((((ga|0)==0?(la?-2147483648:0):ga)|0)<0)ma=ba;else{ga=ZLa(ea,_,la?ca:ka)|0;if((((ga|0)==0?(da?-2147483648:0):ga)|0)>=0)break c;ma=ba+4|0}ba=k[ma>>2]|0;if(!ba){Z=90;break}}}while(0);do if((Z|0)==90){Z=0;x=0;fb(255,c|0,h|0,s|0);aa=x;x=0;if(aa&1){Z=99;break b}aa=i[s>>0]|0;ba=(aa&1)==0;ca=ba?(aa&255)>>>1:k[K>>2]|0;aa=ba?J:k[I>>2]|0;ba=t;_=ba+32|0;do{i[ba>>0]=0;ba=ba+1|0}while((ba|0)<(_|0));k[e>>2]=aa;k[L>>2]=ca;k[f>>2]=t;k[N>>2]=32;x=0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];k[c>>2]=k[f>>2];k[c+4>>2]=k[f+4>>2];Ta(532,d|0,c|0)|0;ba=x;x=0;if(ba&1){Z=99;break b}ba=k[v>>2]|0;_=(l[O>>0]|0)<<8|(l[t>>0]|0)|(l[P>>0]|0)<<16|(l[Q>>0]|0)<<24;k[u>>2]=_;ga=k[Y>>2]|0;k[R>>2]=ga;da=k[Y+4>>2]|0;k[S>>2]=da;if(da)h0a(da);ka=ba+4|0;la=k[ka>>2]|0;if(la>>>0<(k[ba+8>>2]|0)>>>0){i[la>>0]=_;i[la+1>>0]=_>>8;i[la+2>>0]=_>>16;i[la+3>>0]=_>>24;k[la+4>>2]=ga;k[la+8>>2]=da;k[R>>2]=0;k[S>>2]=0;k[ka>>2]=(k[ka>>2]|0)+12;break}x=0;xa(788,ba|0,u|0);ba=x;x=0;if(ba&1){Z=100;break b}ba=k[S>>2]|0;if(!ba)break;j0a(ba)}while(0);K2a(s)}Y=Y+8|0}while((Y|0)!=(X|0));ja=k[j>>2]|0}if(ja){X=k[A>>2]|0;if((X|0)==(ja|0))na=ja;else{Y=X;while(1){X=Y+-8|0;k[A>>2]=X;ba=k[Y+-4>>2]|0;if(!ba)oa=X;else{j0a(ba);oa=k[A>>2]|0}if((oa|0)==(ja|0))break;else Y=oa}na=k[j>>2]|0}OBa(na)}W=W+4|0;if((W|0)==(B|0)){C=h;D=z;break a}}switch(Z|0){case 17:{pa=Hc()|0;qa=M;Z=19;break}case 18:{pa=Hc()|0;qa=M;Z=19;break}case 26:{W=Hc()|0;R=M;c0a(fa);OBa(fa);ra=R;sa=W;Z=33;break}case 32:{W=Hc()|0;ra=M;sa=W;Z=33;break}case 34:{W=Hc()|0;R=M;Q=k[V>>2]|0;if(!Q){ta=W;ua=R;Z=37}else{j0a(Q);ta=W;ua=R;Z=37}break}case 54:{R=Hc()|0;W=M;c0a(ia);OBa(ia);va=W;wa=R;Z=61;break}case 60:{R=Hc()|0;va=M;wa=R;Z=61;break}case 62:{R=Hc()|0;W=M;Q=k[T>>2]|0;if(!Q){ya=R;za=W;Z=65}else{j0a(Q);ya=R;za=W;Z=65}break}case 99:{Aa=Hc()|0;Ca=M;Z=104;break}case 100:{W=Hc()|0;R=M;Q=k[S>>2]|0;if(!Q){Aa=W;Ca=R;Z=104}else{j0a(Q);Aa=W;Ca=R;Z=104}break}}if((Z|0)==19){Da=pa;Ea=qa}else if((Z|0)==33){ta=sa;ua=ra;Z=37}else if((Z|0)==61){ya=wa;za=va;Z=65}else if((Z|0)==104){K2a(s);Da=Aa;Ea=Ca}if((Z|0)==37){R=k[m>>2]|0;W=R;if(!R){Da=ta;Ea=ua}else{Q=k[F>>2]|0;if((Q|0)!=(R|0))k[F>>2]=Q+(~((Q+-4-W|0)>>>2)<<2);OBa(R);Da=ta;Ea=ua}}else if((Z|0)==65){R=k[o>>2]|0;W=R;if(!R){Da=ya;Ea=za}else{Q=k[G>>2]|0;if((Q|0)!=(R|0))k[G>>2]=Q+(~((Q+-4-W|0)>>>2)<<2);OBa(R);Da=ya;Ea=za}}R=k[j>>2]|0;if(!R){Fa=Da;Ga=Ea;Ha=h;Ia=z;Ja=k[Ia>>2]|0;Ws(Ha,Ja);Ka=k[w>>2]|0;Ws(g,Ka);Sc(Fa|0)}W=k[A>>2]|0;if((W|0)==(R|0))La=R;else{Q=W;while(1){W=Q+-8|0;k[A>>2]=W;P=k[Q+-4>>2]|0;if(!P)Ma=W;else{j0a(P);Ma=k[A>>2]|0}if((Ma|0)==(R|0))break;else Q=Ma}La=k[j>>2]|0}OBa(La);Fa=Da;Ga=Ea;Ha=h;Ia=z;Ja=k[Ia>>2]|0;Ws(Ha,Ja);Ka=k[w>>2]|0;Ws(g,Ka);Sc(Fa|0)}while(0);Ws(C,k[D>>2]|0);Ws(g,k[w>>2]|0);y=k[v>>2]|0;r=b;return y|0}y=Hc()|0;Fa=y;Ga=M;Ha=h;Ia=z;Ja=k[Ia>>2]|0;Ws(Ha,Ja);Ka=k[w>>2]|0;Ws(g,Ka);Sc(Fa|0);return 0}function o4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+16|0;c=b;Zg(c,a+60|0);a=k[c>>2]|0;d=c+4|0;c=k[d>>2]|0;e=(a|0)==(c|0);a:do if(e){f=2;g=0}else{h=0;j=a;while(1){l=k[j>>2]|0;m=i[l+77>>0]|0;n=m<<24>>24!=0?l:h;j=j+4|0;if(m<<24>>24){f=1;g=n;break a}if((j|0)==(c|0)){f=2;g=n;break}else h=n}}while(0);if(!a){o=(f|0)==2;p=o?0:g;r=b;return p|0}if(!e)k[d>>2]=c+(~((c+-4-a|0)>>>2)<<2);OBa(a);o=(f|0)==2;p=o?0:g;r=b;return p|0}function p4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+16|0;c=b;d=Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0;a=k[d+36>>2]|0;e=k[d+40>>2]|0;if((a|0)==(e|0)){f=0;r=b;return f|0}d=c+4|0;g=0;h=a;while(1){Zg(c,(k[h>>2]|0)+60|0);a=k[c>>2]|0;j=k[d>>2]|0;l=(a|0)==(j|0);a:do if(l){m=4;n=g}else{o=a;while(1){p=k[o>>2]|0;q=k[p+24>>2]|0;s=i[q>>0]|0;if(!(s&1))t=(s&255)>>>1;else t=k[q+4>>2]|0;o=o+4|0;if(!t){m=1;n=p;break a}if((o|0)==(j|0)){m=4;n=g;break}}}while(0);o=a;if(a){if(!l)k[d>>2]=j+(~((j+-4-o|0)>>>2)<<2);OBa(a)}h=h+4|0;if((m|0)!=4){f=n;u=15;break}if((h|0)==(e|0)){f=0;u=15;break}else g=n}if((u|0)==15){r=b;return f|0}return 0}function q4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;b=r;r=r+48|0;c=b+32|0;d=b+16|0;e=b;f=b+12|0;g=a+116|0;h=k[g>>2]|0;if(h){j=h;r=b;return j|0}k[d+4>>2]=0;k[d+8>>2]=0;h=d+4|0;k[d>>2]=h;x=0;l=Ba(563,12)|0;m=x;x=0;a:do if(!(m&1)?(k[l>>2]=0,k[l+4>>2]=0,k[l+8>>2]=0,k[g>>2]=l,x=0,n=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0,o=x,x=0,!(o&1)):0){o=k[n+36>>2]|0;p=k[n+40>>2]|0;b:do if((o|0)==(p|0)){q=d;s=h}else{n=e+4|0;t=o;c:while(1){x=0;xa(789,e|0,(k[t>>2]|0)+60|0);u=x;x=0;if(u&1){v=8;break}u=k[e>>2]|0;w=k[n>>2]|0;if((u|0)==(w|0))y=u;else{z=u;do{u=k[z>>2]|0;k[f>>2]=u;A=k[u+24>>2]|0;B=k[h>>2]|0;C=u;d:do if(!B)v=26;else{D=i[A>>0]|0;E=(D&1)==0;F=E?(D&255)>>>1:k[A+4>>2]|0;D=E?A+1|0:k[A+8>>2]|0;E=B;while(1){G=E+16|0;H=i[G>>0]|0;I=(H&1)==0;J=I?(H&255)>>>1:k[E+20>>2]|0;H=I?G+1|0:k[E+24>>2]|0;G=J>>>0>>0;I=ZLa(D,H,G?J:F)|0;K=F>>>0>>0;if((((I|0)==0?(K?-2147483648:0):I)|0)<0)L=E;else{I=ZLa(H,D,K?F:J)|0;if((((I|0)==0?(G?-2147483648:0):I)|0)>=0)break d;L=E+4|0}E=k[L>>2]|0;if(!E){v=26;break}}}while(0);do if((v|0)==26){v=0;x=0;fb(255,c|0,d|0,k[u+24>>2]|0);B=x;x=0;if(B&1)break c;B=k[g>>2]|0;A=B+4|0;E=k[A>>2]|0;if((E|0)==(k[B+8>>2]|0)){x=0;xa(790,B|0,f|0);B=x;x=0;if(B&1)break c;else break}else{k[E>>2]=C;k[A>>2]=(k[A>>2]|0)+4;break}}while(0);z=z+4|0}while((z|0)!=(w|0));y=k[e>>2]|0}w=y;if(y){z=k[n>>2]|0;if((z|0)!=(y|0))k[n>>2]=z+(~((z+-4-w|0)>>>2)<<2);OBa(y)}t=t+4|0;if((t|0)==(p|0)){q=d;s=h;break b}}if((v|0)==8){t=Hc()|0;N=d;O=h;P=t;Q=M;break a}t=Hc()|0;w=M;z=k[e>>2]|0;if(!z){R=t;S=w;T=d;U=h;V=k[U>>2]|0;Ws(T,V);Sc(R|0)}C=k[n>>2]|0;if((C|0)!=(z|0))k[n>>2]=C+(~((C+-4-z|0)>>>2)<<2);OBa(z);R=t;S=w;T=d;U=h;V=k[U>>2]|0;Ws(T,V);Sc(R|0)}while(0);Ws(q,k[s>>2]|0);j=k[g>>2]|0;r=b;return j|0}else v=9;while(0);if((v|0)==9){v=Hc()|0;N=d;O=h;P=v;Q=M}R=P;S=Q;T=N;U=O;V=k[U>>2]|0;Ws(T,V);Sc(R|0);return 0}function r4(a){a=a|0;return a+88|0}function s4(a){a=a|0;return a+76|0}function t4(a,b){a=a|0;b=b|0;M2a(a+88|0,b)|0;return}function u4(a,b){a=a|0;b=b|0;M2a(a+76|0,b)|0;return}function v4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;b=r;r=r+64|0;c=b+48|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=a+120|0;i=k[h>>2]|0;if(i){j=i;r=b;return j|0}k[c+4>>2]=0;k[c+8>>2]=0;i=c+4|0;k[c>>2]=i;x=0;l=Ba(563,12)|0;m=x;x=0;a:do if(!(m&1)?(k[l>>2]=0,k[l+4>>2]=0,k[l+8>>2]=0,k[h>>2]=l,k[d>>2]=c,k[d+4>>2]=a,n=a+60|0,x=0,xa(590,e|0,n|0),o=x,x=0,!(o&1)):0){o=k[e>>2]|0;p=e+4|0;q=k[p>>2]|0;do if((o|0)==(q|0))s=o;else{t=o;while(1){x=0;xa(791,d|0,k[t>>2]|0);u=x;x=0;if(u&1)break;t=t+4|0;if((t|0)==(q|0)){v=5;break}}if((v|0)==5){s=k[e>>2]|0;break}t=Hc()|0;u=M;w=k[e>>2]|0;if(!w){y=t;z=u;break a}A=k[p>>2]|0;if((A|0)!=(w|0))k[p>>2]=A+(~((A+-4-w|0)>>>2)<<2);OBa(w);y=t;z=u;break a}while(0);q=s;if(s){o=k[p>>2]|0;if((o|0)!=(s|0))k[p>>2]=o+(~((o+-4-q|0)>>>2)<<2);OBa(s)}x=0;xa(739,f|0,n|0);q=x;x=0;if(!(q&1)){q=k[f>>2]|0;o=f+4|0;u=k[o>>2]|0;do if((q|0)==(u|0))B=q;else{t=q;while(1){x=0;xa(791,d|0,k[t>>2]|0);w=x;x=0;if(w&1)break;t=t+4|0;if((t|0)==(u|0)){v=19;break}}if((v|0)==19){B=k[f>>2]|0;break}t=Hc()|0;w=M;A=k[f>>2]|0;if(!A){y=t;z=w;break a}C=k[o>>2]|0;if((C|0)!=(A|0))k[o>>2]=C+(~((C+-4-A|0)>>>2)<<2);OBa(A);y=t;z=w;break a}while(0);u=B;if(B){q=k[o>>2]|0;if((q|0)!=(B|0))k[o>>2]=q+(~((q+-4-u|0)>>>2)<<2);OBa(B)}x=0;xa(792,g|0,n|0);u=x;x=0;if(!(u&1)){u=k[g>>2]|0;q=g+4|0;p=k[q>>2]|0;do if((u|0)==(p|0))D=u;else{w=u;while(1){x=0;xa(791,d|0,k[w>>2]|0);t=x;x=0;if(t&1)break;w=w+4|0;if((w|0)==(p|0)){v=32;break}}if((v|0)==32){D=k[g>>2]|0;break}w=Hc()|0;t=M;A=k[g>>2]|0;if(!A){y=w;z=t;break a}C=k[q>>2]|0;if((C|0)!=(A|0))k[q>>2]=C+(~((C+-4-A|0)>>>2)<<2);OBa(A);y=w;z=t;break a}while(0);p=D;if(D){u=k[q>>2]|0;if((u|0)!=(D|0))k[q>>2]=u+(~((u+-4-p|0)>>>2)<<2);OBa(D)}Ws(c,k[i>>2]|0);j=k[h>>2]|0;r=b;return j|0}else v=11}else v=11}else v=11;while(0);if((v|0)==11){v=Hc()|0;y=v;z=M}Ws(c,k[i>>2]|0);Sc(y|0);return 0}function w4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=KBa(52)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=33132;d=c+16|0;k[d>>2]=0;e=c+20|0;k[e>>2]=0;f=c+12|0;g=c+28|0;k[g>>2]=0;k[c+32>>2]=0;k[c+24>>2]=g;k[f>>2]=38268;k[c+36>>2]=b;i[c+40>>0]=0;k[c+44>>2]=0;k[c+48>>2]=0;b=f;i0a(c);k[d>>2]=b;d=k[e>>2]|0;k[e>>2]=c;if(d)k0a(d);x=0;d=Ba(563,44)|0;e=x;x=0;if(e&1){e=Hc()|0;j0a(c);Sc(e|0)}k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=31876;e=d+16|0;k[e>>2]=0;f=d+20|0;k[f>>2]=0;g=d+12|0;h=d+28|0;k[h>>2]=0;k[d+32>>2]=0;k[d+24>>2]=h;k[g>>2]=38832;k[d+36>>2]=b;k[d+40>>2]=c;h0a(c);j0a(c);c=g;g=d;i0a(d);k[e>>2]=c;e=k[f>>2]|0;k[f>>2]=g;if(!e){k[a>>2]=c;j=a+4|0;k[j>>2]=g;return}k0a(e);k[a>>2]=c;j=a+4|0;k[j>>2]=g;return}function x4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(60)|0;d=a+16|0;e=a+20|0;f=a+24|0;g=a;h=g+56|0;do{k[g>>2]=0;g=g+4|0}while((g|0)<(h|0));k[e>>2]=f;k[a>>2]=36636;k[d>>2]=36652;i[a+32>>0]=1;k[a+36>>2]=0;k[a+40>>2]=0;k[a+44>>2]=0;d=a+52|0;k[d>>2]=0;k[a+56>>2]=0;k[a+48>>2]=d;k[b>>2]=a;c=a;return c|0}function y4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(12)|0;d=a;k[d>>2]=0;k[d+4>>2]=0;k[a>>2]=36668;k[a+4>>2]=0;k[a+8>>2]=0;k[b>>2]=a;c=a;return c|0}function z4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=KBa(48)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=33076;d=c+16|0;k[d>>2]=0;e=c+20|0;k[e>>2]=0;f=c+12|0;g=c+28|0;k[g>>2]=0;k[c+32>>2]=0;k[c+24>>2]=g;k[c+36>>2]=0;i[c+40>>0]=1;k[f>>2]=38380;k[c+44>>2]=b;b=f;i0a(c);k[d>>2]=b;d=k[e>>2]|0;k[e>>2]=c;if(d)k0a(d);x=0;d=Ba(563,44)|0;e=x;x=0;if(e&1){e=Hc()|0;j0a(c);Sc(e|0)}k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=31876;e=d+16|0;k[e>>2]=0;f=d+20|0;k[f>>2]=0;g=d+12|0;h=d+28|0;k[h>>2]=0;k[d+32>>2]=0;k[d+24>>2]=h;k[g>>2]=38832;k[d+36>>2]=b;k[d+40>>2]=c;h0a(c);j0a(c);c=g;g=d;i0a(d);k[e>>2]=c;e=k[f>>2]|0;k[f>>2]=g;if(!e){k[a>>2]=c;j=a+4|0;k[j>>2]=g;return}k0a(e);k[a>>2]=c;j=a+4|0;k[j>>2]=g;return}function A4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(16)|0;k[a>>2]=0;k[a>>2]=36684;d=a+4|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[b>>2]=a;c=a;return c|0}function B4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=k[b+36>>2]|0;if(!e)f=0;else f=iDa(e,5224,5248,0)|0;q2a(d,248972,40);x=0;pa(57,(f|0)!=0|0,d|0,245,248722,249013);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}K2a(d);d=KBa(40)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=33104;e=d+16|0;k[e>>2]=0;b=d+20|0;k[b>>2]=0;g=d+12|0;h=d+28|0;k[h>>2]=0;k[d+32>>2]=0;k[d+24>>2]=h;k[g>>2]=38496;k[d+36>>2]=f;f=g;g=d;i0a(d);k[e>>2]=f;e=k[b>>2]|0;k[b>>2]=g;if(!e){k[a>>2]=f;i=a+4|0;k[i>>2]=g;r=c;return}k0a(e);k[a>>2]=f;i=a+4|0;k[i>>2]=g;r=c;return}function C4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=KBa(40)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=33104;d=c+16|0;k[d>>2]=0;e=c+20|0;k[e>>2]=0;f=c+12|0;g=c+28|0;k[g>>2]=0;k[c+32>>2]=0;k[c+24>>2]=g;k[f>>2]=38496;k[c+36>>2]=b;b=f;i0a(c);k[d>>2]=b;d=k[e>>2]|0;k[e>>2]=c;if(d)k0a(d);x=0;d=Ba(563,44)|0;e=x;x=0;if(e&1){e=Hc()|0;j0a(c);Sc(e|0)}k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=31876;e=d+16|0;k[e>>2]=0;f=d+20|0;k[f>>2]=0;g=d+12|0;h=d+28|0;k[h>>2]=0;k[d+32>>2]=0;k[d+24>>2]=h;k[g>>2]=38832;k[d+36>>2]=b;k[d+40>>2]=c;h0a(c);j0a(c);c=g;g=d;i0a(d);k[e>>2]=c;e=k[f>>2]|0;k[f>>2]=g;if(!e){k[a>>2]=c;i=a+4|0;k[i>>2]=g;return}k0a(e);k[a>>2]=c;i=a+4|0;k[i>>2]=g;return}function D4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(16)|0;k[a>>2]=0;k[a>>2]=36684;d=a+4|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[b>>2]=a;c=a;return c|0}function E4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=KBa(100)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=31496;d=c+12|0;x=0;fb(143,d|0,b|0,1);b=x;x=0;if(b&1){b=Hc()|0;c0a(c);OBa(c);Sc(b|0)}b=d;d=c;i0a(c);k[c+16>>2]=b;e=c+20|0;c=k[e>>2]|0;k[e>>2]=d;if(!c){k[a>>2]=b;f=a+4|0;k[f>>2]=d;return}k0a(c);k[a>>2]=b;f=a+4|0;k[f>>2]=d;return}function F4(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+96|0;d=c;caa(d,b,1);x=0;xa(586,a|0,d|0);a=x;x=0;if(a&1){a=Hc()|0;Dg(d);Sc(a|0)}else{Dg(d);r=c;return}}function G4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(20)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+8>>2]=a+12;k[a>>2]=36700;k[a+4>>2]=36716;k[b>>2]=a;c=a;return c|0}function H4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=KBa(48)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=36732;d=c+12|0;x=0;xa(737,d|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(c);OBa(c);Sc(b|0)}b=d;d=c;i0a(c);k[c+16>>2]=b;e=c+20|0;c=k[e>>2]|0;k[e>>2]=d;if(!c){k[a>>2]=b;f=a+4|0;k[f>>2]=d;return}k0a(c);k[a>>2]=b;f=a+4|0;k[f>>2]=d;return}function I4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(20)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+8>>2]=a+12;k[a>>2]=36760;k[a+4>>2]=36776;k[b>>2]=a;c=a;return c|0}function J4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=KBa(100)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=31496;d=c+12|0;x=0;xa(793,d|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;c0a(c);OBa(c);Sc(b|0)}b=d;d=c;i0a(c);k[c+16>>2]=b;e=c+20|0;c=k[e>>2]|0;k[e>>2]=d;if(!c){k[a>>2]=b;f=a+4|0;k[f>>2]=d;return}k0a(c);k[a>>2]=b;f=a+4|0;k[f>>2]=d;return}function K4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(20)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+8>>2]=a+12;k[a>>2]=36792;k[a+4>>2]=36808;k[b>>2]=a;c=a;return c|0}function L4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(20)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a>>2]=36824;k[a+12>>2]=0;k[a+16>>2]=0;k[b>>2]=a;c=a;return c|0}function M4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=k[a+36>>2]|0;a:do if((b|0)!=0?(c=iDa(b,5224,6072,0)|0,(c|0)!=0):0){d=k[c+32>>2]|0;if(!d)e=Vf[k[(k[c>>2]|0)+36>>2]&1023](c)|0;else e=d;if((e|0)==4?(d=k[c+52>>2]|0,c=k[d+24>>2]|0,f=k[d+28>>2]|0,(c|0)!=(f|0)):0){d=c;while(1){if((k[d>>2]|0)==(a|0)){g=0;break}d=d+8|0;if((d|0)==(f|0))break a}return g|0}}while(0);g=(i[a+58>>0]|0)==0;return g|0}function N4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=k[a+36>>2]|0;if(!b){c=0;return c|0}d=iDa(b,5224,6072,0)|0;if(!d){c=0;return c|0}b=k[d+32>>2]|0;if(!b)e=Vf[k[(k[d>>2]|0)+36>>2]&1023](d)|0;else e=b;if((e|0)!=4){c=0;return c|0}e=k[d+52>>2]|0;d=k[e+24>>2]|0;b=k[e+28>>2]|0;if((d|0)==(b|0)){c=0;return c|0}else f=d;while(1){if((k[f>>2]|0)==(a|0)){c=1;g=9;break}f=f+8|0;if((f|0)==(b|0)){c=0;g=9;break}}if((g|0)==9)return c|0;return 0}function O4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=k[a+36>>2]|0;if(!b){c=0;return c|0}d=iDa(b,5224,6072,0)|0;if(!d){c=0;return c|0}b=k[d+52>>2]|0;e=k[b+24>>2]|0;f=k[b+28>>2]|0;a:do if((e|0)!=(f|0)){b=e;while(1){if((k[b>>2]|0)==(a|0)){c=1;break}b=b+8|0;if((b|0)==(f|0))break a}return c|0}while(0);f=k[d+60>>2]|0;if(!f){c=0;return c|0}d=k[f+24>>2]|0;e=k[f+28>>2]|0;if((d|0)==(e|0)){c=0;return c|0}else g=d;while(1){if((k[g>>2]|0)==(a|0)){c=1;h=10;break}g=g+8|0;if((g|0)==(e|0)){c=0;h=10;break}}if((h|0)==10)return c|0;return 0}function P4(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=k[a+36>>2]|0;if(!b){c=0;return c|0}d=iDa(b,5224,6072,0)|0;if(!d){c=0;return c|0}b=k[d+52>>2]|0;e=k[b+24>>2]|0;f=k[b+28>>2]|0;a:do if((e|0)!=(f|0)){b=e;while(1){if((k[b>>2]|0)==(a|0)){c=0;break}b=b+8|0;if((b|0)==(f|0))break a}return c|0}while(0);f=k[d+60>>2]|0;if(!f){c=1;return c|0}d=k[f+24>>2]|0;e=k[f+28>>2]|0;if((d|0)==(e|0)){c=1;return c|0}else g=d;while(1){if((k[g>>2]|0)==(a|0)){c=0;h=10;break}g=g+8|0;if((g|0)==(e|0)){c=1;h=10;break}}if((h|0)==10)return c|0;return 0}function Q4(a,b){a=a|0;b=b|0;var c=0;c=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;k[a>>2]=k[c+4>>2];b=k[c+8>>2]|0;k[a+4>>2]=b;if(!b)return;h0a(b);return}function R4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(12)|0;d=a;k[d>>2]=0;k[d+4>>2]=0;k[a>>2]=36840;k[a+4>>2]=0;k[a+8>>2]=0;k[b>>2]=a;c=a;return c|0}function S4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(20)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+8>>2]=a+12;k[a>>2]=36856;k[a+4>>2]=36872;k[b>>2]=a;c=a;return c|0}function T4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(32)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a+24>>2]=0;k[a+8>>2]=a+12;k[a>>2]=36888;k[a+4>>2]=36904;d=a+24|0;k[d>>2]=0;k[a+28>>2]=0;k[a+20>>2]=d;k[b>>2]=a;c=a;return c|0}function U4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(24)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+8>>2]=a+12;k[a>>2]=36920;k[a+4>>2]=36936;k[a+20>>2]=0;k[b>>2]=a;c=a;return c|0}function V4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(32)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a+24>>2]=0;k[a+8>>2]=a+12;k[a>>2]=36952;k[a+4>>2]=36968;k[a+20>>2]=0;k[a+24>>2]=0;k[a+28>>2]=0;k[b>>2]=a;c=a;return c|0}function W4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(24)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a>>2]=36984;d=a+4|0;k[a+16>>2]=0;k[a+20>>2]=0;k[d>>2]=0;k[d+4>>2]=0;j[d+8>>1]=0;k[b>>2]=a;c=a;return c|0}function X4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(28)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a>>2]=37e3;k[a+24>>2]=0;k[b>>2]=a;c=a;return c|0}function Y4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(32)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a+24>>2]=0;k[a>>2]=37016;k[a+24>>2]=0;k[a+28>>2]=0;k[b>>2]=a;c=a;return c|0}function Z4(a){a=a|0;var b=0,c=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(28)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a+24>>2]=0;k[a>>2]=37032;i[a+24>>0]=0;i[a+25>>0]=0;k[b>>2]=a;c=a;return c|0}function _4(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;if(a){c=a;return c|0}a=KBa(40)|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;k[a>>2]=37048;d=a+24|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[b>>2]=a;c=a;return c|0}function $4(a){a=a|0;var b=0;k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function a5(){k[9280]=0;k[9281]=0;k[9282]=0;return}function b5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=k[d>>2]|0;f=k[b>>2]|0;g=e-f|0;h=(g|0)/12|0;if((e|0)==(f|0))return;if(!(h>>>0>357913941?(x=0,va(1473,a|0),f=x,x=0,f&1):0))j=4;if((j|0)==4?(x=0,j=Ba(563,g|0)|0,g=x,x=0,!(g&1)):0){k[c>>2]=j;k[a>>2]=j;k[a+8>>2]=j+(h*12|0);h=k[b>>2]|0;b=k[d>>2]|0;if((h|0)==(b|0))return;d=h;h=j;do{j=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[h>>0]=j;i[h+1>>0]=j>>8;i[h+2>>0]=j>>16;i[h+3>>0]=j>>24;k[h+4>>2]=k[d+4>>2];j=k[d+8>>2]|0;k[h+8>>2]=j;if(j)h0a(j);h=(k[c>>2]|0)+12|0;k[c>>2]=h;d=d+12|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);h=k[c>>2]|0;if((h|0)==(d|0))m=d;else{j=h;while(1){h=j+-12|0;k[c>>2]=h;g=k[j+-4>>2]|0;if(!g)n=h;else{j0a(g);n=k[c>>2]|0}if((n|0)==(d|0))break;else j=n}m=k[a>>2]|0}OBa(m);Sc(b|0)}function c5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+16|0;e=d;f=KBa(28)|0;g=f+16|0;h=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[g>>0]=h;i[g+1>>0]=h>>8;i[g+2>>0]=h>>16;i[g+3>>0]=h>>24;k[f+20>>2]=k[c+4>>2];h=f+24|0;j=k[c+8>>2]|0;k[h>>2]=j;if(j)h0a(j);j=b+4|0;c=k[j>>2]|0;do if(c){m=i[g>>0]|0;n=i[f+17>>0]|0;o=i[f+18>>0]|0;p=i[f+19>>0]|0;q=c;while(1){s=i[q+16>>0]|0;t=(m&255)<(s&255);if(!t)if((m&255)<=(s&255)){u=i[q+17>>0]|0;if((n&255)>=(u&255))if((n&255)<=(u&255)){u=i[q+18>>0]|0;if((o&255)>=(u&255))if((o&255)>(u&255))v=15;else{u=i[q+19>>0]|0;w=p<<24>>24!=u<<24>>24;x=(p&255)<(u&255);v=12}else{w=1;x=1;v=12}}else v=15;else{w=1;x=1;v=12}}else v=15;else{w=1;x=1;v=12}if((v|0)==12){v=0;if(x&w){u=k[q>>2]|0;if(!u){y=q;z=q;v=14;break}else A=u}else v=15}if((v|0)==15){v=0;if((s&255)>=(m&255)){if(t){B=q;v=26;break}t=i[q+17>>0]|0;if((t&255)>=(n&255)){if((t&255)>(n&255)){B=q;v=26;break}t=i[q+18>>0]|0;if((t&255)>=(o&255)){if((t&255)>(o&255)){B=q;v=26;break}t=i[q+19>>0]|0;C=t<<24>>24!=p<<24>>24;D=(t&255)<(p&255)}else{C=1;D=1}}else{C=1;D=1}}else{C=1;D=1}if(!(D&C)){B=q;v=26;break}t=q+4|0;s=k[t>>2]|0;if(!s){E=t;F=q;v=25;break}else A=s}q=A}if((v|0)==14){q=z;k[e>>2]=q;G=y;H=q;break}else if((v|0)==25){q=F;k[e>>2]=q;G=E;H=q;break}else if((v|0)==26){q=B;k[e>>2]=q;G=e;H=q;break}}else{q=j;k[e>>2]=q;G=j;H=q}while(0);j=k[G>>2]|0;if(!j){k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=H;k[G>>2]=f;H=k[k[b>>2]>>2]|0;if(!H)I=f;else{k[b>>2]=H;I=k[G>>2]|0}ui(k[b+4>>2]|0,I);I=b+8|0;k[I>>2]=(k[I>>2]|0)+1;J=1;K=f}else{J=0;K=j}k[a>>2]=K;i[a+4>>0]=J;if(J<<24>>24){r=d;return}J=k[h>>2]|0;if(J)j0a(J);OBa(f);r=d;return}function d5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function e5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/12|0)+1|0;if(e>>>0>357913941){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=((k[g>>2]|0)-f|0)/12|0;if(h>>>0<178956970){j=h<<1;h=j>>>0>>0?e:j;j=k[c>>2]|0;e=(j-f|0)/12|0;m=j;if(!h){n=0;o=0;p=e;q=m}else{r=h;s=m;t=e;u=6}}else{e=k[c>>2]|0;r=357913941;s=e;t=(e-f|0)/12|0;u=6}if((u|0)==6){n=r;o=KBa(r*12|0)|0;p=t;q=s}s=o+(p*12|0)|0;t=s;r=o+(n*12|0)|0;n=l[b>>0]|l[b+1>>0]<<8|l[b+2>>0]<<16|l[b+3>>0]<<24;i[s>>0]=n;i[s+1>>0]=n>>8;i[s+2>>0]=n>>16;i[s+3>>0]=n>>24;n=b+4|0;k[o+(p*12|0)+4>>2]=k[n>>2];u=b+8|0;k[o+(p*12|0)+8>>2]=k[u>>2];k[n>>2]=0;k[u>>2]=0;u=s+12|0;if((q|0)==(d|0)){v=t;w=f}else{f=q;q=s;s=t;while(1){t=q+-12|0;n=f;f=f+-12|0;p=l[f>>0]|l[f+1>>0]<<8|l[f+2>>0]<<16|l[f+3>>0]<<24;i[t>>0]=p;i[t+1>>0]=p>>8;i[t+2>>0]=p>>16;i[t+3>>0]=p>>24;p=n+-8|0;k[q+-8>>2]=k[p>>2];t=n+-4|0;k[q+-4>>2]=k[t>>2];k[p>>2]=0;k[t>>2]=0;q=s+-12|0;t=q;if((f|0)==(d|0)){x=t;break}else s=t}v=x;w=k[a>>2]|0}k[a>>2]=v;v=k[c>>2]|0;k[c>>2]=u;k[g>>2]=r;r=w;if((v|0)!=(r|0)){g=v;do{v=k[g+-4>>2]|0;g=g+-12|0;if(v)j0a(v)}while((g|0)!=(r|0))}if(!w)return;OBa(r);return}function f5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=k[b>>2]|0;g=k[b+4>>2]|0;if((f|0)==(g|0)){r=c;return}b=a+8|0;h=f;a:while(1){f=k[h>>2]|0;do if(f){i=iDa(f,5224,5528,0)|0;k[d>>2]=i;j=i;if(i){i=k[e>>2]|0;if((i|0)==(k[b>>2]|0)){x=0;xa(790,a|0,d|0);l=x;x=0;if(l&1)break a;else break}else{k[i>>2]=j;k[e>>2]=(k[e>>2]|0)+4;break}}}else k[d>>2]=0;while(0);h=h+8|0;if((h|0)==(g|0)){m=3;break}}if((m|0)==3){r=c;return}c=Hc()|0;m=k[a>>2]|0;if(!m)Sc(c|0);a=k[e>>2]|0;if((a|0)!=(m|0))k[e>>2]=a+(~((a+-4-m|0)>>>2)<<2);OBa(m);Sc(c|0)}function g5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function h5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+16|0;d=c+8|0;e=c;k[e>>2]=b;f=k[a+4>>2]|0;g=b+24|0;h=k[g>>2]|0;j=k[(k[a>>2]|0)+4>>2]|0;l=b;a:do if(j){m=i[h>>0]|0;n=(m&1)==0;o=n?(m&255)>>>1:k[h+4>>2]|0;m=n?h+1|0:k[h+8>>2]|0;n=j;while(1){p=n+16|0;q=i[p>>0]|0;s=(q&1)==0;t=s?(q&255)>>>1:k[n+20>>2]|0;q=s?p+1|0:k[n+24>>2]|0;p=t>>>0>>0;s=ZLa(m,q,p?t:o)|0;u=o>>>0>>0;if((((s|0)==0?(u?-2147483648:0):s)|0)<0)v=n;else{s=ZLa(q,m,u?o:t)|0;if((((s|0)==0?(p?-2147483648:0):s)|0)>=0)break;v=n+4|0}n=k[v>>2]|0;if(!n)break a}r=c;return}while(0);if(!(Vf[k[(k[b>>2]|0)+20>>2]&1023](b)|0)){r=c;return}v=k[b+32>>2]|0;if(!v)w=Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0;else w=v;if((w|0)<=1){r=c;return}AY(d,k[a>>2]|0,k[g>>2]|0);g=k[f+120>>2]|0;f=g+4|0;a=k[f>>2]|0;if((a|0)==(k[g+8>>2]|0)){$U(g,e);r=c;return}else{k[a>>2]=l;k[f>>2]=(k[f>>2]|0)+4;r=c;return}}function i5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35092;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function j5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35092;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function k5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;k[a>>2]=35120;b=a+36|0;c=k[b>>2]|0;if(c){d=a+40|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-12|0;k[d>>2]=e;K2a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f)}f=k[a+24>>2]|0;b=f;if(f){c=a+28|0;g=k[c>>2]|0;if((g|0)!=(f|0))k[c>>2]=g+(~((g+-4-b|0)>>>2)<<2);OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function l5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;k[a>>2]=35120;b=a+36|0;c=k[b>>2]|0;if(c){d=a+40|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-12|0;k[d>>2]=e;K2a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f)}f=k[a+24>>2]|0;b=f;if(f){c=a+28|0;g=k[c>>2]|0;if((g|0)!=(f|0))k[c>>2]=g+(~((g+-4-b|0)>>>2)<<2);OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function m5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;k[a>>2]=35148;b=a+48|0;c=k[b>>2]|0;if(c){d=a+52|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{k[d>>2]=g+-16;e=k[g+-4>>2]|0;if(e)j0a(e);e=k[g+-12>>2]|0;if(e)j0a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f)}f=k[a+44>>2]|0;if(f)j0a(f);k[a>>2]=33328;f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function n5(a){a=a|0;m5(a);OBa(a);return}function o5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;k[a>>2]=35196;b=a+120|0;c=k[b>>2]|0;k[b>>2]=0;if(c){b=k[c>>2]|0;d=b;if(b){e=c+4|0;f=k[e>>2]|0;if((f|0)!=(b|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(b)}OBa(c)}c=a+116|0;b=k[c>>2]|0;k[c>>2]=0;if(b){c=k[b>>2]|0;d=c;if(c){f=b+4|0;e=k[f>>2]|0;if((e|0)!=(c|0))k[f>>2]=e+(~((e+-4-d|0)>>>2)<<2);OBa(c)}OBa(b)}b=a+112|0;c=k[b>>2]|0;k[b>>2]=0;if(c){b=k[c>>2]|0;if(b){d=c+4|0;e=k[d>>2]|0;if((e|0)==(b|0))g=b;else{f=e;while(1){e=f+-12|0;k[d>>2]=e;h=k[f+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(b|0))break;else f=i}g=k[c>>2]|0}OBa(g)}OBa(c)}c=k[a+100>>2]|0;g=c;if(c){i=a+104|0;f=k[i>>2]|0;if((f|0)!=(c|0))k[i>>2]=f+(~((f+-4-g|0)>>>2)<<2);OBa(c)}K2a(a+88|0);K2a(a+76|0);c=a+60|0;g=k[c>>2]|0;if(g){f=a+64|0;i=k[f>>2]|0;if((i|0)==(g|0))j=g;else{b=i;while(1){i=b+-8|0;k[f>>2]=i;d=k[b+-4>>2]|0;if(!d)l=i;else{j0a(d);l=k[f>>2]|0}if((l|0)==(g|0))break;else b=l}j=k[c>>2]|0}OBa(j)}j=a+48|0;c=k[j>>2]|0;if(c){l=a+52|0;b=k[l>>2]|0;if((b|0)==(c|0))m=c;else{g=b;while(1){b=g+-8|0;k[l>>2]=b;f=k[g+-4>>2]|0;if(!f)n=b;else{j0a(f);n=k[l>>2]|0}if((n|0)==(c|0))break;else g=n}m=k[j>>2]|0}OBa(m)}m=k[a+44>>2]|0;if(m)j0a(m);k[a>>2]=33328;m=k[a+28>>2]|0;if(m)j0a(m);k[a>>2]=35064;m=k[a+4>>2]|0;if(m)Sf[k[(k[m>>2]|0)+4>>2]&2047](m);m=k[a+20>>2]|0;if(!m)return;j0a(m);return}function p5(a){a=a|0;o5(a);OBa(a);return}function q5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35244;b=a+32|0;c=k[b>>2]|0;if(c){d=a+36|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function r5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35244;b=a+32|0;c=k[b>>2]|0;if(c){d=a+36|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function s5(a){a=a|0;var b=0;k[a>>2]=35272;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function t5(a){a=a|0;var b=0;k[a>>2]=35272;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function u5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35300;b=a+40|0;c=k[b>>2]|0;if(c){d=a+44|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=33328;f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function v5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35300;b=a+40|0;c=k[b>>2]|0;if(c){d=a+44|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=33328;f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function w5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35348;b=a+40|0;c=k[b>>2]|0;if(c){d=a+44|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=33328;f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function x5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35348;b=a+40|0;c=k[b>>2]|0;if(c){d=a+44|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=33328;f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function y5(a){a=a|0;var b=0;k[a>>2]=33328;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function z5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35444;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function A5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35444;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function B5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35472;b=k[a+96>>2]|0;if(b)j0a(b);b=a+80|0;c=k[b>>2]|0;if(c){d=a+84|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+72>>2]|0;if(!f){P6(a);return}j0a(f);P6(a);return}function C5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35472;b=k[a+96>>2]|0;if(b)j0a(b);b=a+80|0;c=k[b>>2]|0;if(c){d=a+84|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+72>>2]|0;if(!f){P6(a);OBa(a);return}j0a(f);P6(a);OBa(a);return}function D5(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+32>>2]|0;if(!b)c=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else c=b;if((c|0)==4){d=0;return d|0}if(i[a+77>>0]|0){d=0;return d|0}c=k[a+24>>2]|0;a=i[c>>0]|0;if(!(a&1))e=(a&255)>>>1;else e=k[c+4>>2]|0;d=(e|0)!=0;return d|0}function E5(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+32>>2]|0;if(!b)c=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;else c=b;if((c|0)<=2){d=0;return d|0}if(i[a+77>>0]|0){d=0;return d|0}c=k[a+24>>2]|0;a=i[c>>0]|0;if(!(a&1))e=(a&255)>>>1;else e=k[c+4>>2]|0;d=(e|0)!=0;return d|0}function F5(a){a=a|0;var b=0;k[a>>2]=35520;b=k[a+52>>2]|0;if(b)j0a(b);b=k[a+44>>2]|0;if(b)j0a(b);k[a>>2]=33328;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function G5(a){a=a|0;var b=0;k[a>>2]=35520;b=k[a+52>>2]|0;if(b)j0a(b);b=k[a+44>>2]|0;if(b)j0a(b);k[a>>2]=33328;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function H5(a){a=a|0;var b=0,c=0,d=0;b=k[a+32>>2]|0;if(b){c=b;d=(c|0)>2;return d|0}c=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;d=(c|0)>2;return d|0}function I5(a){a=a|0;return 2}function J5(a){a=a|0;var b=0;k[a>>2]=35568;b=k[a+80>>2]|0;if(b)j0a(b);b=k[a+72>>2]|0;if(!b){P6(a);return}j0a(b);P6(a);return}function K5(a){a=a|0;var b=0;k[a>>2]=35568;b=k[a+80>>2]|0;if(b)j0a(b);b=k[a+72>>2]|0;if(b)j0a(b);P6(a);OBa(a);return}function L5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35616;b=a+32|0;c=k[b>>2]|0;if(c){d=a+36|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function M5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35616;b=a+32|0;c=k[b>>2]|0;if(c){d=a+36|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function N5(a){a=a|0;var b=0;b=k[a+72>>2]|0;if(b)j0a(b);P6(a);return}function O5(a){a=a|0;var b=0;b=k[a+72>>2]|0;if(b)j0a(b);P6(a);OBa(a);return}function P5(a){a=a|0;var b=0;k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function Q5(a){a=a|0;var b=0;k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function R5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;k[a>>2]=35748;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-12|0;k[d>>2]=e;K2a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function S5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;k[a>>2]=35748;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-12|0;k[d>>2]=e;K2a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function T5(a){a=a|0;var b=0;k[a>>2]=35776;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function U5(a){a=a|0;var b=0;k[a>>2]=35776;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function V5(a){a=a|0;var b=0;k[a>>2]=35804;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function W5(a){a=a|0;var b=0;k[a>>2]=35804;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function X5(a){a=a|0;var b=0;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function Y5(a){a=a|0;var b=0;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function Z5(a){a=a|0;var b=0;k[a>>2]=35860;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function _5(a){a=a|0;var b=0;k[a>>2]=35860;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function $5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35888;b=a+32|0;c=k[b>>2]|0;if(c){d=a+36|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function a6(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=35888;b=a+32|0;c=k[b>>2]|0;if(c){d=a+36|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function b6(a){a=a|0;var b=0;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function c6(a){a=a|0;var b=0;k[a>>2]=35944;b=k[a+52>>2]|0;if(b)j0a(b);b=k[a+44>>2]|0;if(b)j0a(b);b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function d6(a){a=a|0;var b=0;k[a>>2]=35944;b=k[a+52>>2]|0;if(b)j0a(b);b=k[a+44>>2]|0;if(b)j0a(b);b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function e6(a){a=a|0;var b=0;k[a>>2]=35972;b=k[a+44>>2]|0;if(b)j0a(b);b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function f6(a){a=a|0;var b=0;k[a>>2]=35972;b=k[a+44>>2]|0;if(b)j0a(b);b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function g6(a){a=a|0;var b=0;k[a>>2]=36e3;b=k[a+60>>2]|0;if(b)j0a(b);b=k[a+52>>2]|0;if(b)j0a(b);b=k[a+44>>2]|0;if(b)j0a(b);b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function h6(a){a=a|0;g6(a);OBa(a);return}function i6(a){a=a|0;var b=0;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function j6(a){a=a|0;var b=0;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function k6(a){a=a|0;var b=0;k[a>>2]=36084;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function l6(a){a=a|0;var b=0;k[a>>2]=36084;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function m6(a){a=a|0;var b=0;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function n6(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=36140;b=k[a+48>>2]|0;if(b)j0a(b);b=a+32|0;c=k[b>>2]|0;if(c){d=a+36|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=k[a+28>>2]|0;if(f)j0a(f);k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function o6(a){a=a|0;n6(a);OBa(a);return}function p6(a){a=a|0;var b=0;k[a>>2]=36168;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function q6(a){a=a|0;var b=0;k[a>>2]=36168;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function r6(a){a=a|0;var b=0;k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function s6(a){a=a|0;var b=0;k[a>>2]=36224;b=k[a+44>>2]|0;if(b)j0a(b);b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function t6(a){a=a|0;var b=0;k[a>>2]=36224;b=k[a+44>>2]|0;if(b)j0a(b);b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function u6(a){a=a|0;var b=0;k[a>>2]=36252;b=k[a+40>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function v6(a){a=a|0;var b=0;k[a>>2]=36252;b=k[a+40>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function w6(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=36280;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f)return;j0a(f);return}function x6(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=36280;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}k[a>>2]=35064;f=k[a+4>>2]|0;if(f)Sf[k[(k[f>>2]|0)+4>>2]&2047](f);f=k[a+20>>2]|0;if(!f){OBa(a);return}j0a(f);OBa(a);return}function y6(a){a=a|0;var b=0;k[a>>2]=36308;b=k[a+32>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function z6(a){a=a|0;var b=0;k[a>>2]=36308;b=k[a+32>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function A6(a){a=a|0;var b=0;k[a>>2]=36336;b=k[a+40>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function B6(a){a=a|0;var b=0;k[a>>2]=36336;b=k[a+40>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function C6(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=36364;b=a+44|0;c=k[b>>2]|0;if(c){d=a+48|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}f=a+32|0;b=k[f>>2]|0;if(b){i=a+36|0;g=k[i>>2]|0;if((g|0)==(b|0))j=b;else{c=g;while(1){g=c+-8|0;k[i>>2]=g;d=k[c+-4>>2]|0;if(!d)l=g;else{j0a(d);l=k[i>>2]|0}if((l|0)==(b|0))break;else c=l}j=k[f>>2]|0}OBa(j)}j=k[a+28>>2]|0;if(j)j0a(j);k[a>>2]=35064;j=k[a+4>>2]|0;if(j)Sf[k[(k[j>>2]|0)+4>>2]&2047](j);j=k[a+20>>2]|0;if(!j)return;j0a(j);return}function D6(a){a=a|0;C6(a);OBa(a);return}function E6(a){a=a|0;var b=0;k[a>>2]=36392;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function F6(a){a=a|0;var b=0;k[a>>2]=36392;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function G6(a){a=a|0;var b=0;k[a>>2]=36420;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function H6(a){a=a|0;var b=0;k[a>>2]=36420;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function I6(a){a=a|0;var b=0;k[a>>2]=36448;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function J6(a){a=a|0;var b=0;k[a>>2]=36448;b=k[a+36>>2]|0;if(b)j0a(b);b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function K6(a){a=a|0;var b=0;k[a>>2]=36476;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function L6(a){a=a|0;var b=0;k[a>>2]=36476;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function M6(a){a=a|0;var b=0;k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function N6(a){a=a|0;var b=0;k[a>>2]=36532;b=k[a+32>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function O6(a){a=a|0;var b=0;k[a>>2]=36532;b=k[a+32>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function P6(a){a=a|0;var b=0,c=0,d=0,e=0;k[a>>2]=37064;b=k[a+64>>2]|0;if(b)j0a(b);b=k[a+56>>2]|0;if(b)j0a(b);b=k[a+40>>2]|0;c=b;if(b){d=a+44|0;e=k[d>>2]|0;if((e|0)!=(b|0))k[d>>2]=e+(~((e+-4-c|0)>>>2)<<2);OBa(b)}k[a>>2]=33328;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=35064;b=k[a+4>>2]|0;if(b)Sf[k[(k[b>>2]|0)+4>>2]&2047](b);b=k[a+20>>2]|0;if(!b)return;j0a(b);return}function Q6(a){a=a|0;P6(a);OBa(a);return}function R6(a){a=a|0;var b=0,c=0,d=0,e=0;k[a>>2]=37048;b=k[a+28>>2]|0;c=b;if(b){d=a+32|0;e=k[d>>2]|0;if((e|0)!=(b|0))k[d>>2]=e+(~((e+-4-c|0)>>>2)<<2);OBa(b)}k[a>>2]=36984;b=k[a+20>>2]|0;if(b)j0a(b);b=k[a+8>>2]|0;if(!b)return;j0a(b);return}function S6(a){a=a|0;var b=0,c=0,d=0,e=0;k[a>>2]=37048;b=k[a+28>>2]|0;c=b;if(b){d=a+32|0;e=k[d>>2]|0;if((e|0)!=(b|0))k[d>>2]=e+(~((e+-4-c|0)>>>2)<<2);OBa(b)}k[a>>2]=36984;b=k[a+20>>2]|0;if(b)j0a(b);b=k[a+8>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function T6(a){a=a|0;var b=0;k[a>>2]=36984;b=k[a+20>>2]|0;if(b)j0a(b);b=k[a+8>>2]|0;if(!b)return;j0a(b);return}function U6(a){a=a|0;var b=0;k[a>>2]=36984;b=k[a+20>>2]|0;if(b)j0a(b);b=k[a+8>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function V6(a){a=a|0;var b=0;k[a>>2]=37016;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=36984;b=k[a+20>>2]|0;if(b)j0a(b);b=k[a+8>>2]|0;if(!b)return;j0a(b);return}function W6(a){a=a|0;var b=0;k[a>>2]=37016;b=k[a+28>>2]|0;if(b)j0a(b);k[a>>2]=36984;b=k[a+20>>2]|0;if(b)j0a(b);b=k[a+8>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function X6(a){a=a|0;var b=0;k[a>>2]=36984;b=k[a+20>>2]|0;if(b)j0a(b);b=k[a+8>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function Y6(a){a=a|0;var b=0;k[a>>2]=36984;b=k[a+20>>2]|0;if(b)j0a(b);b=k[a+8>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function Z6(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=36952;b=a+4|0;k[b>>2]=36968;c=k[a+20>>2]|0;d=c;if(c){e=a+24|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[b>>2]=37112;zY(a+8|0,k[a+12>>2]|0);return}function _6(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=36952;b=a+4|0;k[b>>2]=36968;c=k[a+20>>2]|0;d=c;if(c){e=a+24|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[b>>2]=37112;zY(a+8|0,k[a+12>>2]|0);OBa(a);return}function $6(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+-4|0;k[b>>2]=36952;a=b+4|0;k[a>>2]=36968;c=k[b+20>>2]|0;d=c;if(c){e=b+24|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[a>>2]=37112;zY(b+8|0,k[b+12>>2]|0);return}function a7(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+-4|0;k[b>>2]=36952;a=b+4|0;k[a>>2]=36968;c=k[b+20>>2]|0;d=c;if(c){e=b+24|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[a>>2]=37112;zY(b+8|0,k[b+12>>2]|0);OBa(b);return}function b7(a){a=a|0;k[a>>2]=37112;zY(a+4|0,k[a+8>>2]|0);return}function c7(a){a=a|0;k[a>>2]=37112;zY(a+4|0,k[a+8>>2]|0);OBa(a);return}function d7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);return}function e7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);OBa(a);return}function f7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);return}function g7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);OBa(b);return}function h7(a){a=a|0;var b=0;k[a>>2]=36888;b=a+4|0;k[b>>2]=36904;l7(a+20|0,k[a+24>>2]|0);k[b>>2]=37112;zY(a+8|0,k[a+12>>2]|0);return}function i7(a){a=a|0;var b=0;k[a>>2]=36888;b=a+4|0;k[b>>2]=36904;l7(a+20|0,k[a+24>>2]|0);k[b>>2]=37112;zY(a+8|0,k[a+12>>2]|0);OBa(a);return}function j7(a){a=a|0;var b=0;b=a+-4|0;k[b>>2]=36888;a=b+4|0;k[a>>2]=36904;l7(b+20|0,k[b+24>>2]|0);k[a>>2]=37112;zY(b+8|0,k[b+12>>2]|0);return}function k7(a){a=a|0;var b=0;b=a+-4|0;k[b>>2]=36888;a=b+4|0;k[a>>2]=36904;l7(b+20|0,k[b+24>>2]|0);k[a>>2]=37112;zY(b+8|0,k[b+12>>2]|0);OBa(b);return}function l7(a,b){a=a|0;b=b|0;if(!b)return;else{l7(a,k[b>>2]|0);l7(a,k[b+4>>2]|0);OBa(b);return}}function m7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);OBa(a);return}function n7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);return}function o7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);OBa(b);return}function p7(a){a=a|0;var b=0;k[a>>2]=36840;b=k[a+8>>2]|0;if(!b)return;j0a(b);return}function q7(a){a=a|0;var b=0;k[a>>2]=36840;b=k[a+8>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function r7(a){a=a|0;var b=0;k[a>>2]=36668;b=k[a+8>>2]|0;if(!b)return;j0a(b);return}function s7(a){a=a|0;var b=0;k[a>>2]=36668;b=k[a+8>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function t7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);return}function u7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);OBa(a);return}function v7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);return}function w7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);OBa(b);return}function x7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);return}function y7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);OBa(a);return}function z7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);return}function A7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);OBa(b);return}function B7(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=36732;b=a+12|0;k[b>>2]=37700;c=a+36|0;d=k[c>>2]|0;if(d){e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function C7(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=36732;b=a+12|0;k[b>>2]=37700;c=a+36|0;d=k[c>>2]|0;if(d){e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function D7(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=a+12|0;k[b>>2]=37700;c=a+36|0;d=k[c>>2]|0;if(d){e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function E7(a){a=a|0;OBa(a);return}function F7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);return}function G7(a){a=a|0;k[a+4>>2]=37112;zY(a+8|0,k[a+12>>2]|0);OBa(a);return}function H7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);return}function I7(a){a=a|0;var b=0;b=a+-4|0;k[b+4>>2]=37112;zY(b+8|0,k[b+12>>2]|0);OBa(b);return}function J7(a){a=a|0;k[a>>2]=36684;K2a(a+4|0);return}function K7(a){a=a|0;k[a>>2]=36684;K2a(a+4|0);OBa(a);return}function L7(a){a=a|0;var b=0;k[a>>2]=36668;b=k[a+8>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function M7(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=36636;b=a+16|0;k[b>>2]=36652;CU(a+48|0,k[a+52>>2]|0);c=k[a+36>>2]|0;d=c;if(c){e=a+40|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[b>>2]=37112;zY(a+20|0,k[a+24>>2]|0);k[a>>2]=36684;K2a(a+4|0);return}function N7(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=36636;b=a+16|0;k[b>>2]=36652;CU(a+48|0,k[a+52>>2]|0);c=k[a+36>>2]|0;d=c;if(c){e=a+40|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[b>>2]=37112;zY(a+20|0,k[a+24>>2]|0);k[a>>2]=36684;K2a(a+4|0);OBa(a);return}function O7(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+-16|0;k[b>>2]=36636;a=b+16|0;k[a>>2]=36652;CU(b+48|0,k[b+52>>2]|0);c=k[b+36>>2]|0;d=c;if(c){e=b+40|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[a>>2]=37112;zY(b+20|0,k[b+24>>2]|0);k[b>>2]=36684;K2a(b+4|0);return}function P7(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+-16|0;k[b>>2]=36636;a=b+16|0;k[a>>2]=36652;CU(b+48|0,k[b+52>>2]|0);c=k[b+36>>2]|0;d=c;if(c){e=b+40|0;f=k[e>>2]|0;if((f|0)!=(c|0))k[e>>2]=f+(~((f+-4-d|0)>>>2)<<2);OBa(c)}k[a>>2]=37112;zY(b+20|0,k[b+24>>2]|0);k[b>>2]=36684;K2a(b+4|0);OBa(b);return}function Q7(a){a=a|0;var b=0;k[a>>2]=36608;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function R7(a){a=a|0;var b=0;k[a>>2]=36608;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function S7(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function T7(a){a=a|0;OBa(a);return}function U7(a){a=a|0;k[a>>2]=36592;K2a(a+4|0);return}function V7(a){a=a|0;k[a>>2]=36592;K2a(a+4|0);OBa(a);return}function W7(a){a=a|0;k[a>>2]=36576;Q$(a+16|0,k[a+20>>2]|0);K2a(a+4|0);return}function X7(a){a=a|0;k[a>>2]=36576;Q$(a+16|0,k[a+20>>2]|0);K2a(a+4|0);OBa(a);return}function Y7(a){a=a|0;return}function Z7(a){a=a|0;OBa(a);return}function _7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;c=r;r=r+480|0;d=c+472|0;e=c+476|0;f=c+216|0;g=c+448|0;h=c+464|0;l=c+232|0;m=c+460|0;n=c+392|0;o=c+376|0;p=c+364|0;q=c+176|0;s=c+136|0;t=c+352|0;u=c+96|0;v=c+56|0;w=c+344|0;y=c+40|0;z=c+336|0;A=c+280|0;B=c+264|0;C=c+248|0;D=c;k[f>>2]=0;k[f+8>>2]=1;E=f+12|0;i[E>>0]=0;F=f+13|0;i[F>>0]=1;G=g+4|0;k[G>>2]=0;H=g+8|0;k[H>>2]=0;I=g+4|0;k[g>>2]=I;J=b+4|0;K=k[b>>2]|0;do if((k[J>>2]|0)!=(K|0)){L=f+4|0;N=l+8|0;O=l+12|0;P=l+13|0;Q=h+4|0;R=l+4|0;S=I;T=q+32|0;U=s+32|0;V=u+32|0;W=K;X=0;Y=0;a:while(1){Z=W+(Y<<3)|0;_=k[Z>>2]|0;x=0;$=Ba(k[(k[_>>2]|0)+48>>2]|0,_|0)|0;_=x;x=0;if(_&1){aa=7;break}do if($){_=k[Z>>2]|0;x=0;ba=Ba(k[(k[_>>2]|0)+44>>2]|0,_|0)|0;_=x;x=0;if(_&1){aa=7;break a}do if((ba+X|0)>>>0>32){_=j[E>>1]|0;ca=(_&65535)>>>8&255;if(!((_&255)<<24>>24)){_=ca<<24>>24==0?k[L>>2]|0:f;da=k[_>>2]|0;if((da|0)==-1){x=0;fb(221,f|0,f|0,39160);ea=x;x=0;if(ea&1){aa=7;break a}else{fa=0;break}}else{k[_>>2]=da+1;fa=0;break}}else{da=ca<<24>>24==0?k[L>>2]|0:f;ca=k[da>>2]|0;if(!ca){x=0;fb(222,f|0,f|0,39160);_=x;x=0;if(_&1){aa=7;break a}else{fa=0;break}}else{k[da>>2]=ca+-1;fa=0;break}}}else fa=X;while(0);k[l>>2]=1;k[N>>2]=1;i[O>>0]=0;i[P>>0]=1;k[m>>2]=256;k[h>>2]=l;k[Q>>2]=m;x=0;ba=Ta(577,f|0,h|0)|0;ca=x;x=0;if(ca&1){aa=28;break a}if(!(i[P>>0]|0))OBa(k[R>>2]|0);if(!ba){aa=23;break a}ba=k[I>>2]|0;do if(ba){ca=ba;while(1){da=k[ca+16>>2]|0;if(Y>>>0>>0){_=k[ca>>2]|0;if(!_){ga=ca;ha=ca;aa=43;break}else ia=_}else{if(da>>>0>=Y>>>0){ja=ca;aa=49;break}da=ca+4|0;_=k[da>>2]|0;if(!_){ka=da;la=ca;aa=47;break}else ia=_}ca=ia}if((aa|0)==43){aa=0;k[d>>2]=ha;ma=ga;na=ha;aa=50;break}else if((aa|0)==47){aa=0;k[d>>2]=la;ma=ka;na=la;aa=50;break}else if((aa|0)==49){aa=0;k[d>>2]=ja;if(!ja){ma=d;na=ja;aa=50;break}else{oa=ja;break}}}else{k[d>>2]=I;ma=I;na=S;aa=50}while(0);if((aa|0)==50){aa=0;x=0;ba=Ba(563,72)|0;ca=x;x=0;if(ca&1){aa=7;break a}k[ba+16>>2]=Y;k[ba+24>>2]=0;k[ba+56>>2]=1;k[ba+64>>2]=0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=na;k[ma>>2]=ba;ca=k[k[g>>2]>>2]|0;if(!ca)qa=ba;else{k[g>>2]=ca;qa=k[ma>>2]|0}ui(k[G>>2]|0,qa);k[H>>2]=(k[H>>2]|0)+1;oa=ba}k[q>>2]=0;k[T>>2]=1;NB(q,f,d,e);Eyb(oa+24|0,q|0,36)|0;k[oa+64>>2]=fa;ba=k[Z>>2]|0;x=0;xa(k[(k[ba>>2]|0)+40>>2]|0,s|0,ba|0);ba=x;x=0;if(ba&1){aa=7;break a}ba=k[U>>2]|0;ca=k[s>>2]|0;x=0;fb(140,t|0,260310,21);_=x;x=0;if(_&1){aa=7;break a}x=0;pa(57,ba>>>0>1|(ca|0)!=0|0,t|0,56,250928,250855);ca=x;x=0;if(ca&1){aa=63;break a}K2a(t);ca=k[Z>>2]|0;x=0;xa(k[(k[ca>>2]|0)+40>>2]|0,u|0,ca|0);ca=x;x=0;if(ca&1){aa=7;break a}if((k[V>>2]|0)==1&(k[u>>2]|0)==1){ca=k[Z>>2]|0;x=0;ba=Ba(k[(k[ca>>2]|0)+44>>2]|0,ca|0)|0;ca=x;x=0;if(ca&1){aa=7;break a}if((ba+fa|0)>>>0<33){ba=k[Z>>2]|0;x=0;ca=Ba(k[(k[ba>>2]|0)+44>>2]|0,ba|0)|0;ba=x;x=0;if(ba&1){aa=7;break a}ra=ca+fa|0;break}}ca=k[Z>>2]|0;x=0;xa(k[(k[ca>>2]|0)+40>>2]|0,v|0,ca|0);ca=x;x=0;if(ca&1){aa=7;break a}x=0;if(!(i[E>>0]|0)){tz(f,f,v);ca=x;x=0;if(ca&1){aa=7;break a}else{ra=0;break}}else{uz(f,f,v);ca=x;x=0;if(ca&1){aa=7;break a}else{ra=0;break}}}else ra=X;while(0);Y=Y+1|0;W=k[b>>2]|0;if(Y>>>0>=(k[J>>2]|0)-W>>3>>>0){sa=ra;aa=3;break}else X=ra}if((aa|0)==3){if(!sa){aa=4;break}X=j[E>>1]|0;W=(X&65535)>>>8&255;if(!((X&255)<<24>>24)){X=W<<24>>24==0?k[f+4>>2]|0:f;Y=k[X>>2]|0;if((Y|0)==-1){x=0;fb(221,f|0,f|0,39160);V=x;x=0;if(V&1){aa=8;break}else{ta=f;aa=76;break}}else{k[X>>2]=Y+1;ta=f;aa=76;break}}else{Y=W<<24>>24==0?k[f+4>>2]|0:f;W=k[Y>>2]|0;if(!W){x=0;fb(222,f|0,f|0,39160);X=x;x=0;if(X&1){aa=8;break}else{ta=f;aa=76;break}}else{k[Y>>2]=W+-1;ta=f;aa=76;break}}}else if((aa|0)==7){W=Hc()|0;ua=W;va=M;aa=9;break}else if((aa|0)==23){x=0;xa(731,n|0,3);W=x;x=0;if(W&1){aa=8;break}x=0;fb(140,p|0,250825,29);W=x;x=0;if(W&1){W=Hc()|0;wa=M;ya=W}else{k[o>>2]=21048;W=o+4|0;x=0;xa(604,W|0,p|0);Y=x;x=0;if(Y&1){Y=Hc()|0;za=M;Aa=Y}else{x=0;Y=Ta(564,n|0,o|0)|0;X=x;x=0;if(!(X&1)){x=0;nb(122,Y|0,250855,250928,54);x=0}Y=Hc()|0;X=M;k[o>>2]=21048;K2a(W);za=X;Aa=Y}K2a(p);wa=za;ya=Aa}Y=n+20|0;k[Y>>2]=31332;k[n>>2]=31296;k[n+36>>2]=31356;K2a(n+8|0);k[Y>>2]=31388;k[Y+-20>>2]=31416;k[Y+16>>2]=31440;K2a(n+24|0);k[n+36>>2]=20796;Y=n+40|0;X=k[Y>>2]|0;if(X){x=0;W=Ba(k[(k[X>>2]|0)+16>>2]|0,X|0)|0;X=x;x=0;if(X&1){X=Hc(0)|0;Fg(X)}if(W)k[Y>>2]=0}Ca=wa;Da=ya;break}else if((aa|0)==28){Y=Hc()|0;W=M;if(i[P>>0]|0){Ca=W;Da=Y;break}OBa(k[R>>2]|0);Ca=W;Da=Y;break}else if((aa|0)==63){Y=Hc()|0;W=M;K2a(t);Ca=W;Da=Y;break}}else aa=4;while(0);if((aa|0)==4){ta=f;aa=76}do if((aa|0)==76){k[y>>2]=1;k[y+8>>2]=1;i[y+12>>0]=0;t=y+13|0;i[t>>0]=1;k[z>>2]=256;k[w>>2]=y;k[w+4>>2]=z;x=0;ya=Ta(577,ta|0,w|0)|0;wa=x;x=0;if(wa&1){wa=Hc()|0;n=M;if(i[t>>0]|0){Ca=n;Da=wa;break}OBa(k[y+4>>2]|0);Ca=n;Da=wa;break}if(!(i[t>>0]|0))OBa(k[y+4>>2]|0);if(ya){k[D>>2]=0;k[D+32>>2]=1;NB(D,ta,d,e);ya=a;t=D;wa=ya+36|0;do{k[ya>>2]=k[t>>2];ya=ya+4|0;t=t+4|0}while((ya|0)<(wa|0));t=a+40|0;ya=k[t>>2]|0;k[t>>2]=k[g>>2];k[g>>2]=ya;ya=a+44|0;wa=k[ya>>2]|0;R=k[I>>2]|0;k[ya>>2]=R;k[I>>2]=wa;P=a+48|0;n=k[P>>2]|0;Aa=k[H>>2]|0;k[P>>2]=Aa;k[H>>2]=n;if(!Aa)k[t>>2]=ya;else k[R+8>>2]=ya;if(!n)k[g>>2]=I;else k[wa+8>>2]=I;zh(g,wa);if(i[F>>0]|0){r=c;return}OBa(k[f+4>>2]|0);r=c;return}x=0;xa(731,A|0,3);wa=x;x=0;if(wa&1)aa=8;else{x=0;fb(140,C|0,250825,29);wa=x;x=0;if(wa&1){wa=Hc()|0;Ea=M;Fa=wa}else{k[B>>2]=21048;wa=B+4|0;x=0;xa(604,wa|0,C|0);n=x;x=0;if(n&1){n=Hc()|0;Ga=M;Ha=n}else{x=0;n=Ta(564,A|0,B|0)|0;ya=x;x=0;if(!(ya&1)){x=0;nb(122,n|0,250855,250928,68);x=0}n=Hc()|0;ya=M;k[B>>2]=21048;K2a(wa);Ga=ya;Ha=n}K2a(C);Ea=Ga;Fa=Ha}n=A+20|0;k[n>>2]=31332;k[A>>2]=31296;k[A+36>>2]=31356;K2a(A+8|0);k[n>>2]=31388;k[n+-20>>2]=31416;k[n+16>>2]=31440;K2a(A+24|0);k[A+36>>2]=20796;n=A+40|0;ya=k[n>>2]|0;if(ya){x=0;wa=Ba(k[(k[ya>>2]|0)+16>>2]|0,ya|0)|0;ya=x;x=0;if(ya&1){ya=Hc(0)|0;Fg(ya)}if(wa)k[n>>2]=0}Ca=Ea;Da=Fa}}while(0);if((aa|0)==8){Fa=Hc()|0;ua=Fa;va=M;aa=9}if((aa|0)==9){Ca=va;Da=ua}zh(g,k[I>>2]|0);if(i[F>>0]|0)Sc(Da|0);OBa(k[f+4>>2]|0);Sc(Da|0)}function $7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=k[a+44>>2]|0;if(!c){d=0;return d|0}else e=c;while(1){a=k[e+16>>2]|0;if(a>>>0>b>>>0)f=e;else{if(a>>>0>=b>>>0){g=c;break}f=e+4|0}e=k[f>>2]|0;if(!e){d=0;h=17;break}}if((h|0)==17)return d|0;while(1){e=k[g+16>>2]|0;if(e>>>0>b>>>0){f=k[g>>2]|0;if(!f)break;else i=f}else{if(e>>>0>=b>>>0){j=g;h=12;break}e=k[g+4>>2]|0;if(!e)break;else i=e}g=i}if((h|0)==12?(j|0)!=0:0){d=j+24|0;return d|0}d=Rd(8)|0;x=0;xa(671,d|0,296399);j=x;x=0;if(j&1){j=Hc()|0;Fc(d|0);Sc(j|0)}else{k[d>>2]=47544;Gf(d|0,9024,933)}return 0}function a8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=k[a>>2]|0;if(!c){d=a+4|0;e=a+8|0}else{f=a+4|0;g=k[f>>2]|0;if((g|0)==(c|0))h=c;else{i=g;do{g=i+-24|0;k[f>>2]=g;j=k[i+-8>>2]|0;if(j)j0a(j);K2a(g);i=k[f>>2]|0}while((i|0)!=(c|0));h=k[a>>2]|0}OBa(h);h=a+8|0;k[h>>2]=0;k[f>>2]=0;k[a>>2]=0;d=f;e=h}k[a>>2]=k[b>>2];h=b+4|0;k[d>>2]=k[h>>2];d=b+8|0;k[e>>2]=k[d>>2];k[d>>2]=0;k[h>>2]=0;k[b>>2]=0;h=a+12|0;d=b+12|0;b=k[d>>2]|0;k[d>>2]=0;d=k[h>>2]|0;k[h>>2]=b;if(!d)return a|0;zh(d+40|0,k[d+44>>2]|0);OBa(d);return a|0}function b8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[b>>2]|0;d=k[b+4>>2]|0;if((c|0)==(d|0))return;b=a+4|0;e=a+8|0;f=c;do{c=k[b>>2]|0;if((c|0)==(k[e>>2]|0))wW(a,f);else{n2a(c,f);k[c+12>>2]=k[f+12>>2];g=k[f+16>>2]|0;k[c+16>>2]=g;if(g)h0a(g);k[c+20>>2]=k[f+20>>2];k[b>>2]=(k[b>>2]|0)+24}f=f+24|0}while((f|0)!=(d|0));return}function c8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+16|0;d=c;e=a+12|0;a:do if(!(k[e>>2]|0)){k[d>>2]=0;f=d+4|0;k[f>>2]=0;k[d+8>>2]=0;g=a+4|0;h=k[g>>2]|0;j=k[a>>2]|0;l=(h-j|0)/24|0;m=d+8|0;n=j;o=h;do if((h|0)==(j|0)){p=0;q=0;s=8}else{if((h|0)==(j|0))t=0;else{x=0;u=Ba(563,l<<3|0)|0;v=x;x=0;if(v&1){s=11;break}t=u}u=t;v=t+(l<<3)|0;k[d>>2]=u;k[f>>2]=u;k[m>>2]=v;p=v;q=t;s=8}while(0);b:do if((s|0)==8){c:do if((n|0)!=(o|0)){l=n;j=q;h=p;while(1){v=l+12|0;if((j|0)==(h|0)){x=0;xa(743,d|0,v|0);u=x;x=0;if(u&1)break}else{k[j>>2]=k[v>>2];v=k[l+16>>2]|0;k[j+4>>2]=v;if(!v)w=j;else{h0a(v);w=k[f>>2]|0}k[f>>2]=w+8}v=l+24|0;if((v|0)==(o|0))break c;l=v;j=k[f>>2]|0;h=k[m>>2]|0}h=Hc()|0;y=h;z=M;break b}while(0);x=0;h=Ba(563,56)|0;j=x;x=0;if(!(j&1)){j=h+32|0;l=h;v=l+56|0;do{k[l>>2]=0;l=l+4|0}while((l|0)<(v|0));k[j>>2]=1;l=h+44|0;k[l>>2]=0;k[h+48>>2]=0;k[h+40>>2]=l;l=k[e>>2]|0;k[e>>2]=h;if(!l)A=h;else{zh(l+40|0,k[l+44>>2]|0);OBa(l);A=k[e>>2]|0}x=0;xa(794,A|0,d|0);l=x;x=0;if(!(l&1)){l=k[d>>2]|0;if(l){v=k[f>>2]|0;if((v|0)==(l|0))B=l;else{u=v;while(1){v=u+-8|0;k[f>>2]=v;C=k[u+-4>>2]|0;if(!C)D=v;else{j0a(C);D=k[f>>2]|0}if((D|0)==(l|0))break;else u=D}B=k[d>>2]|0}OBa(B)}E=g;F=a;break a}else s=11}else s=11}while(0);if((s|0)==11){g=Hc()|0;y=g;z=M}g=k[d>>2]|0;if(!g)Sc(y|0);m=k[f>>2]|0;if((m|0)==(g|0))G=g;else{o=m;while(1){m=o+-8|0;k[f>>2]=m;n=k[o+-4>>2]|0;if(!n)H=m;else{j0a(n);H=k[f>>2]|0}if((H|0)==(g|0))break;else o=H}G=k[d>>2]|0}OBa(G);Sc(y|0)}else{E=a+4|0;F=a}while(0);a=k[E>>2]|0;E=k[F>>2]|0;F=E;if((a|0)==(E|0)){I=0;r=c;return I|0}y=i[b>>0]|0;G=(y&1)==0;d=G?(y&255)>>>1:k[b+4>>2]|0;y=G?b+1|0:k[b+8>>2]|0;b=(d|0)==0;G=(a-E|0)/24|0;E=0;d:while(1){a=F+(E*24|0)|0;H=i[a>>0]|0;z=(H&1)==0;B=(H&255)>>>1;e:do if(((z?B:k[F+(E*24|0)+4>>2]|0)|0)==(d|0)){if(!z)if(!(ZLa(k[F+(E*24|0)+8>>2]|0,y,d)|0)){J=E;break d}else break;if(b){J=E;break d}H=B;D=a+1|0;A=y;while(1){if((i[D>>0]|0)!=(i[A>>0]|0))break e;H=H+-1|0;if(!H){J=E;break d}else{D=D+1|0;A=A+1|0}}}while(0);E=E+1|0;if(E>>>0>=G>>>0){I=0;s=49;break}}if((s|0)==49){r=c;return I|0}I=$7(k[e>>2]|0,J)|0;r=c;return I|0}function d8(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;q2a(c,329672,0);x=0;Ta(578,a|0,c|0)|0;d=x;x=0;if(d&1){d=Hc()|0;K2a(c);Sc(d|0)}else{K2a(c);r=b;return k[a+12>>2]|0}return 0}function e8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;c=r;r=r+144|0;d=c+120|0;e=c+108|0;f=c+96|0;g=c+133|0;h=c+56|0;j=c+40|0;l=c+24|0;m=c+12|0;n=c;o=c+132|0;p=k[b>>2]|0;i[g>>0]=0;Qaa(f,b,g);x=0;g=Fa(86,f|0,0,250959)|0;q=x;x=0;do if(q&1){s=Hc()|0;t=s;u=M}else{k[e>>2]=k[g>>2];k[e+4>>2]=k[g+4>>2];k[e+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;pa(57,(p+-98|0)>>>0<14|0,e|0,123,250928,251001);s=x;x=0;if(s&1){s=Hc()|0;v=M;K2a(e);t=s;u=v;break}K2a(e);K2a(f);v=k[b+4>>2]|0;s=k[b+8>>2]|0;do switch(k[b>>2]|0){case 107:{w=KBa(44)|0;k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=31848;y=w+12|0;x=0;fb(247,y|0,v|0,1);z=x;x=0;if(z&1){z=Hc()|0;c0a(w);OBa(w);Sc(z|0)}z=y;y=w;i0a(w);k[w+16>>2]=z;A=w+20|0;w=k[A>>2]|0;k[A>>2]=y;if(w)k0a(w);k[a>>2]=z;k[a+4>>2]=y;r=c;return}case 108:{y=KBa(44)|0;k[y+4>>2]=0;k[y+8>>2]=0;k[y>>2]=31848;z=y+12|0;x=0;fb(247,z|0,v|0,0);w=x;x=0;if(w&1){w=Hc()|0;c0a(y);OBa(y);Sc(w|0)}w=z;z=y;i0a(y);k[y+16>>2]=w;A=y+20|0;y=k[A>>2]|0;k[A>>2]=z;if(y)k0a(y);k[a>>2]=w;k[a+4>>2]=z;r=c;return}case 109:{z=KBa(40)|0;k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=31904;w=z+12|0;x=0;xa(752,w|0,v|0);y=x;x=0;if(y&1){y=Hc()|0;c0a(z);OBa(z);Sc(y|0)}y=w;w=z;i0a(z);k[z+16>>2]=y;A=z+20|0;z=k[A>>2]|0;k[A>>2]=w;if(z)k0a(z);k[a>>2]=y;k[a+4>>2]=w;r=c;return}case 110:{w=KBa(48)|0;k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=39172;y=w+12|0;x=0;nb(123,y|0,v|0,s|0,1);z=x;x=0;if(z&1){z=Hc()|0;c0a(w);OBa(w);Sc(z|0)}z=y;y=w;i0a(w);k[w+16>>2]=z;A=w+20|0;w=k[A>>2]|0;k[A>>2]=y;if(w)k0a(w);k[a>>2]=z;k[a+4>>2]=y;r=c;return}case 111:{y=KBa(48)|0;k[y+4>>2]=0;k[y+8>>2]=0;k[y>>2]=39172;z=y+12|0;x=0;nb(123,z|0,v|0,s|0,0);w=x;x=0;if(w&1){w=Hc()|0;c0a(y);OBa(y);Sc(w|0)}w=z;z=y;i0a(y);k[y+16>>2]=w;A=y+20|0;y=k[A>>2]|0;k[A>>2]=z;if(y)k0a(y);k[a>>2]=w;k[a+4>>2]=z;r=c;return}case 98:{z=KBa(44)|0;k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=31848;w=z+12|0;x=0;fb(247,w|0,256,1);y=x;x=0;if(y&1){y=Hc()|0;c0a(z);OBa(z);Sc(y|0)}y=w;w=z;i0a(z);k[z+16>>2]=y;A=z+20|0;z=k[A>>2]|0;k[A>>2]=w;if(z)k0a(z);k[a>>2]=y;k[a+4>>2]=w;r=c;return}case 99:{w=KBa(44)|0;k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=31848;y=w+12|0;x=0;fb(247,y|0,256,0);z=x;x=0;if(z&1){z=Hc()|0;c0a(w);OBa(w);Sc(z|0)}z=y;y=w;i0a(w);k[w+16>>2]=z;A=w+20|0;w=k[A>>2]|0;k[A>>2]=y;if(w)k0a(w);k[a>>2]=z;k[a+4>>2]=y;r=c;return}case 105:{y=KBa(48)|0;k[y+4>>2]=0;k[y+8>>2]=0;k[y>>2]=39172;z=y+12|0;x=0;nb(123,z|0,128,128,1);w=x;x=0;if(w&1){w=Hc()|0;c0a(y);OBa(y);Sc(w|0)}w=z;z=y;i0a(y);k[y+16>>2]=w;A=y+20|0;y=k[A>>2]|0;k[A>>2]=z;if(y)k0a(y);k[a>>2]=w;k[a+4>>2]=z;r=c;return}case 106:{z=KBa(48)|0;k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=39172;w=z+12|0;x=0;nb(123,w|0,128,128,0);y=x;x=0;if(y&1){y=Hc()|0;c0a(z);OBa(z);Sc(y|0)}y=w;w=z;i0a(z);k[z+16>>2]=y;A=z+20|0;z=k[A>>2]|0;k[A>>2]=w;if(z)k0a(z);k[a>>2]=y;k[a+4>>2]=w;r=c;return}case 101:{w=KBa(40)|0;k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=31904;y=w+12|0;x=0;xa(752,y|0,1);z=x;x=0;if(z&1){z=Hc()|0;c0a(w);OBa(w);Sc(z|0)}z=y;y=w;i0a(w);k[w+16>>2]=z;A=w+20|0;w=k[A>>2]|0;k[A>>2]=y;if(w)k0a(w);k[a>>2]=z;k[a+4>>2]=y;r=c;return}case 103:{y=KBa(44)|0;k[y+4>>2]=0;k[y+8>>2]=0;k[y>>2]=31848;z=y+12|0;x=0;fb(247,z|0,0,2);w=x;x=0;if(w&1){w=Hc()|0;c0a(y);OBa(y);Sc(w|0)}w=z;z=y;i0a(y);k[y+16>>2]=w;A=y+20|0;y=k[A>>2]|0;k[A>>2]=z;if(y)k0a(y);k[a>>2]=w;k[a+4>>2]=z;r=c;return}case 104:{z=KBa(36)|0;k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=31792;w=z+16|0;k[w>>2]=0;y=z+20|0;k[y>>2]=0;A=z+12|0;B=z+28|0;k[B>>2]=0;k[z+32>>2]=0;k[z+24>>2]=B;k[A>>2]=37924;B=A;A=z;i0a(z);k[w>>2]=B;w=k[y>>2]|0;k[y>>2]=A;if(w)k0a(w);k[a>>2]=B;k[a+4>>2]=A;r=c;return}case 100:{A=KBa(104)|0;k[A+4>>2]=0;k[A+8>>2]=0;k[A>>2]=31932;B=A+16|0;x=0;fb(283,B|0,0,0);w=x;x=0;if(w&1){w=Hc()|0;c0a(A);OBa(A);Sc(w|0)}w=B;B=A;i0a(A);k[A+20>>2]=w;y=A+24|0;A=k[y>>2]|0;k[y>>2]=B;if(A)k0a(A);k[a>>2]=w;k[a+4>>2]=B;r=c;return}case 102:{B=KBa(104)|0;k[B+4>>2]=0;k[B+8>>2]=0;k[B>>2]=31932;w=B+16|0;x=0;fb(283,w|0,0,1);A=x;x=0;if(A&1){A=Hc()|0;c0a(B);OBa(B);Sc(A|0)}A=w;w=B;i0a(B);k[B+20>>2]=A;y=B+24|0;B=k[y>>2]|0;k[y>>2]=w;if(B)k0a(B);k[a>>2]=A;k[a+4>>2]=w;r=c;return}default:{w=h;A=w+36|0;do{k[w>>2]=0;w=w+4|0}while((w|0)<(A|0));w=h+20|0;A=h+24|0;k[A>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;B=h+4|0;y=B+-4|0;z=B+16|0;C=h+8|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[h+4>>2]=20924;k[h>>2]=20888;k[w>>2]=20948;i[o>>0]=0;x=0;fb(284,n|0,b|0,o|0);D=x;x=0;if(D&1){D=Hc()|0;E=D;F=M}else{x=0;D=Fa(86,n|0,0,251112)|0;G=x;x=0;if(G&1){G=Hc()|0;H=G;I=M}else{k[m>>2]=k[D>>2];k[m+4>>2]=k[D+4>>2];k[m+8>>2]=k[D+8>>2];k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;x=0;D=Ta(484,m|0,251151)|0;G=x;x=0;if(G&1){G=Hc()|0;J=G;K=M}else{k[l>>2]=k[D>>2];k[l+4>>2]=k[D+4>>2];k[l+8>>2]=k[D+8>>2];k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[j>>2]=21048;D=j+4|0;x=0;xa(604,D|0,l|0);G=x;x=0;if(G&1){G=Hc()|0;L=G;N=M}else{x=0;G=Ta(494,h|0,j|0)|0;O=x;x=0;if(!(O&1)){x=0;nb(87,G|0,251001,250928,163);x=0}G=Hc()|0;O=M;k[j>>2]=21048;K2a(D);L=G;N=O}K2a(l);J=L;K=N}K2a(m);H=J;I=K}K2a(n);E=H;F=I}k[B>>2]=20980;k[y>>2]=21008;k[z>>2]=21032;K2a(C);k[w>>2]=20796;w=k[A>>2]|0;if(w){x=0;C=Ba(k[(k[w>>2]|0)+16>>2]|0,w|0)|0;w=x;x=0;if(w&1){w=Hc(0)|0;Fg(w)}if(C)k[A>>2]=0}P=E;Q=F;Sc(P|0)}}while(0)}while(0);K2a(f);P=t;Q=u;Sc(P|0)}function f8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+20|0;e=c+8|0;f=c+4|0;g=c;Eya(d,b);b=k[d>>2]|0;h=k[d+8>>2]|0;k[f>>2]=k[d+4>>2]&65535;k[g>>2]=h&65535;Cya(e,b,f,g);e8(a,e);r=c;return}function g8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+64|0;d=c;e=c+48|0;f=c+40|0;switch(k[b+24>>2]|0){case 115:case 114:{g=KBa(36)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=31792;h=g+16|0;k[h>>2]=0;j=g+20|0;k[j>>2]=0;l=g+12|0;m=g+28|0;k[m>>2]=0;k[g+32>>2]=0;k[g+24>>2]=m;k[l>>2]=37924;m=l;l=g;i0a(g);k[h>>2]=m;h=k[j>>2]|0;k[j>>2]=l;if(h)k0a(h);k[a>>2]=m;k[a+4>>2]=l;r=c;return}case 116:{h8(d,b);do if(!(i[d>>0]|0)){k[a>>2]=0;k[a+4>>2]=0}else{x=0;xa(795,e|0,d+8|0);l=x;x=0;if(!(l&1)){k[a>>2]=k[e>>2];l=e+4|0;k[a+4>>2]=k[l>>2];k[e>>2]=0;k[l>>2]=0;break}l=Hc()|0;if(!(i[d+37>>0]|0))OBa(k[d+28>>2]|0);if(i[d+21>>0]|0)Sc(l|0);OBa(k[d+12>>2]|0);Sc(l|0)}while(0);if(!(i[d+37>>0]|0))OBa(k[d+28>>2]|0);if(!(i[d+21>>0]|0))OBa(k[d+12>>2]|0);r=c;return}case 117:{Taa(f,b);k[a>>2]=k[f>>2];b=f+4|0;k[a+4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;r=c;return}default:{k[a>>2]=0;k[a+4>>2]=0;r=c;return}}}function h8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0;c=r;r=r+496|0;d=c+487|0;e=c+486|0;f=c+485|0;g=c+484|0;h=c+432|0;l=c+483|0;m=c+416|0;n=c+482|0;o=c+481|0;p=c+480|0;q=c+400|0;s=c+479|0;t=c+478|0;u=c+477|0;v=c+476|0;w=c+368|0;y=c+336|0;z=c+304|0;A=c+288|0;B=c+272|0;C=c+464|0;D=c+256|0;E=c+240|0;F=c+460|0;G=c+224|0;H=c+448|0;I=c+192|0;J=c+176|0;K=c+144|0;L=c+128|0;N=c+112|0;O=c+96|0;P=c+80|0;Q=c+64|0;R=c+48|0;S=c+32|0;T=c+16|0;U=c;k[w>>2]=0;V=w+8|0;k[V>>2]=1;W=w+12|0;i[W>>0]=0;X=w+13|0;i[X>>0]=1;Y=w+16|0;k[Y>>2]=1;Z=w+24|0;k[Z>>2]=1;_=w+28|0;i[_>>0]=0;$=w+29|0;i[$>>0]=1;k[y>>2]=0;aa=y+8|0;k[aa>>2]=1;ba=y+12|0;i[ba>>0]=0;ca=y+13|0;i[ca>>0]=1;da=y+16|0;k[da>>2]=1;ea=y+24|0;k[ea>>2]=1;fa=y+28|0;i[fa>>0]=0;ga=y+29|0;i[ga>>0]=1;k[A>>2]=1;k[A+8>>2]=1;i[A+12>>0]=0;i[A+13>>0]=1;ha=z+13|0;i[ha>>0]=1;k[z+8>>2]=1;k[z>>2]=k[A>>2];i[z+12>>0]=0;A=z+16|0;k[A>>2]=1;k[z+24>>2]=1;i[z+28>>0]=0;ia=z+29|0;i[ia>>0]=1;ja=b+28|0;ka=k[ja>>2]|0;la=i[ka>>0]|0;ma=(la&1)==0;if(ma){na=ka+1|0;oa=(la&255)>>>1;pa=ka+1|0}else{qa=k[ka+8>>2]|0;na=qa;oa=k[ka+4>>2]|0;pa=qa}qa=na+oa|0;a:do if((pa|0)==(qa|0))ra=pa;else{oa=pa;while(1){if((i[oa>>0]|0)==46){ra=oa;break a}oa=oa+1|0;if((oa|0)==(qa|0)){ra=qa;break}}}while(0);qa=ra;if(ma){sa=ka+1|0;ta=(la&255)>>>1}else{sa=k[ka+8>>2]|0;ta=k[ka+4>>2]|0}b:do if((ra|0)==(sa+ta|0)){k[J>>2]=0;k[J+8>>2]=1;i[J+12>>0]=0;pa=J+13|0;i[pa>>0]=1;x=0;fb(285,J|0,((i[ka>>0]&1)==0?ka+1|0:k[ka+8>>2]|0)|0,l|0);oa=x;x=0;if(oa&1){oa=Hc(0)|0;if(i[pa>>0]|0){ua=oa;wa=30;break}OBa(k[J+4>>2]|0);ua=oa;wa=30;break}k[h>>2]=1;k[h+8>>2]=1;i[h+12>>0]=0;oa=h+13|0;i[oa>>0]=1;x=0;Fa(137,w|0,J|0,h|0)|0;na=x;x=0;if(na&1){na=Hc(0)|0;if(!(i[oa>>0]|0))OBa(k[h+4>>2]|0);if(i[pa>>0]|0){ya=na;wa=152;break}OBa(k[J+4>>2]|0);ya=na;wa=152;break}else{if(!(i[oa>>0]|0))OBa(k[h+4>>2]|0);if(i[pa>>0]|0){wa=143;break}OBa(k[J+4>>2]|0);wa=143;break}}else{pa=ra+1|0;if(ma){za=ka+1|0;Aa=(la&255)>>>1}else{za=k[ka+8>>2]|0;Aa=k[ka+4>>2]|0}oa=za+Aa|0;c:do if((pa|0)!=(oa|0)){na=pa;while(1){x=0;Ca=Ba(605,i[na>>0]|0)|0;Da=x;x=0;if(Da&1){wa=28;break}if(!Ca){wa=26;break c}na=na+1|0;if((na|0)==(oa|0)){wa=18;break}}if((wa|0)==18){na=k[ja>>2]|0;Ea=i[na>>0]|0;Ga=na;wa=19;break}else if((wa|0)==28){na=Hc(0)|0;ua=na;wa=30;break b}}else{Ea=la;Ga=ka;wa=19}while(0);d:do if((wa|0)==19){if(!(Ea&1))Ha=Ga+1|0;else Ha=k[Ga+8>>2]|0;do if((Ha|0)!=(ra|0)){oa=Ha;while(1){x=0;na=Ba(605,i[oa>>0]|0)|0;Ca=x;x=0;if(Ca&1){wa=27;break}if(!na){wa=26;break d}oa=oa+1|0;if((oa|0)==(ra|0)){wa=31;break}}if((wa|0)==27){oa=Hc(0)|0;ua=oa;wa=30;break b}else if((wa|0)==31){oa=k[ja>>2]|0;Ia=i[oa>>0]|0;Ja=oa;break}}else{Ia=Ea;Ja=Ga}while(0);oa=(Ia&1)==0;if(oa){Ka=Ja+1|0;La=(Ia&255)>>>1}else{Ka=k[Ja+8>>2]|0;La=k[Ja+4>>2]|0}na=Ka+La|0;e:do if((pa|0)==(na|0))Ma=pa;else{Ca=pa;while(1){if((i[Ca>>0]|0)!=48){Ma=Ca;break e}Ca=Ca+1|0;if((Ca|0)==(na|0)){Ma=na;break}}}while(0);if(oa){Na=Ja+1|0;Oa=(Ia&255)>>>1}else{Na=k[Ja+8>>2]|0;Oa=k[Ja+4>>2]|0}na=Na+Oa|0;Ca=Ma;Da=na-Ca|0;if(Da>>>0>4294967279){x=0;va(1471,C|0);Pa=x;x=0;if(Pa&1)break;else wa=45}else if(Da>>>0<11){i[C>>0]=Da<<1;Qa=C+1|0}else wa=45;if((wa|0)==45){Pa=Da+16&-16;x=0;Ra=Ba(563,Pa|0)|0;Sa=x;x=0;if(Sa&1)break;k[C+8>>2]=Ra;k[C>>2]=Pa|1;k[C+4>>2]=Da;Qa=Ra}if((Ma|0)==(na|0))Ua=Qa;else{Ra=Ma;Da=Ca;Ca=Qa;while(1){i[Ca>>0]=i[Ra>>0]|0;Pa=Da+1|0;Sa=Ca+1|0;if((Pa|0)==(na|0)){Ua=Sa;break}else{Ra=Pa;Da=Pa;Ca=Sa}}}i[Ua>>0]=0;k[B>>2]=0;k[B+8>>2]=1;i[B+12>>0]=0;Ca=B+13|0;i[Ca>>0]=1;x=0;fb(285,B|0,((i[C>>0]&1)==0?C+1|0:k[C+8>>2]|0)|0,s|0);Da=x;x=0;do if(Da&1){Ra=Hc(0)|0;if(!(i[Ca>>0]|0))OBa(k[B+4>>2]|0);Va=Ra}else{k[q>>2]=1;k[q+8>>2]=1;i[q+12>>0]=0;Ra=q+13|0;i[Ra>>0]=1;x=0;Fa(137,z|0,B|0,q|0)|0;na=x;x=0;if(na&1){na=Hc(0)|0;if(!(i[Ra>>0]|0))OBa(k[q+4>>2]|0);if(i[Ca>>0]|0){Va=na;break}OBa(k[B+4>>2]|0);Va=na;break}if(!(i[Ra>>0]|0))OBa(k[q+4>>2]|0);if(!(i[Ca>>0]|0))OBa(k[B+4>>2]|0);K2a(C);k[E>>2]=10;k[E+8>>2]=1;i[E+12>>0]=0;Ra=E+13|0;i[Ra>>0]=1;na=k[ja>>2]|0;oa=i[na>>0]|0;if(!(oa&1)){Wa=na+1|0;Xa=(oa&255)>>>1}else{Wa=k[na+8>>2]|0;Xa=k[na+4>>2]|0}k[F>>2]=Wa+Xa-pa;k[D>>2]=0;k[D+8>>2]=1;i[D+12>>0]=0;na=D+13|0;i[na>>0]=1;x=0;nb(124,D|0,E|0,F|0,p|0);oa=x;x=0;do if(oa&1){Sa=Hc(0)|0;if(!(i[na>>0]|0))OBa(k[D+4>>2]|0);Ya=Sa}else{x=0;Ta(579,z|0,D|0)|0;Sa=x;x=0;if(Sa&1){Sa=Hc(0)|0;if(i[na>>0]|0){Ya=Sa;break}OBa(k[D+4>>2]|0);Ya=Sa;break}if(!(i[na>>0]|0))OBa(k[D+4>>2]|0);if(!(i[Ra>>0]|0))OBa(k[E+4>>2]|0);Sa=k[ja>>2]|0;if(!(i[Sa>>0]&1))Za=Sa+1|0;else Za=k[Sa+8>>2]|0;Sa=Za;Pa=qa-Sa|0;do if(Pa>>>0>4294967279){x=0;va(1471,H|0);_a=x;x=0;if(_a&1)break d;else wa=77}else{if(Pa>>>0>=11){wa=77;break}i[H>>0]=Pa<<1;$a=H+1|0}while(0);if((wa|0)==77){_a=Pa+16&-16;x=0;ab=Ba(563,_a|0)|0;bb=x;x=0;if(bb&1)break d;k[H+8>>2]=ab;k[H>>2]=_a|1;k[H+4>>2]=Pa;$a=ab}if((Za|0)==(ra|0))cb=$a;else{ab=Za;_a=Sa;bb=$a;while(1){i[bb>>0]=i[ab>>0]|0;db=_a+1|0;eb=bb+1|0;if((db|0)==(ra|0)){cb=eb;break}else{ab=db;_a=db;bb=eb}}}i[cb>>0]=0;k[G>>2]=0;k[G+8>>2]=1;i[G+12>>0]=0;bb=G+13|0;i[bb>>0]=1;x=0;fb(285,G|0,((i[H>>0]&1)==0?H+1|0:k[H+8>>2]|0)|0,n|0);_a=x;x=0;do if(_a&1){ab=Hc(0)|0;if(!(i[bb>>0]|0))OBa(k[G+4>>2]|0);gb=ab}else{k[m>>2]=1;k[m+8>>2]=1;i[m+12>>0]=0;ab=m+13|0;i[ab>>0]=1;x=0;Fa(137,y|0,G|0,m|0)|0;Sa=x;x=0;if(Sa&1){Sa=Hc(0)|0;if(!(i[ab>>0]|0))OBa(k[m+4>>2]|0);if(i[bb>>0]|0){gb=Sa;break}OBa(k[G+4>>2]|0);gb=Sa;break}if(!(i[ab>>0]|0))OBa(k[m+4>>2]|0);if(!(i[bb>>0]|0))OBa(k[G+4>>2]|0);K2a(H);k[I>>2]=0;ab=I+8|0;k[ab>>2]=0;Sa=I+13|0;i[Sa>>0]=1;Pa=k[aa>>2]|0;eb=Pa>>>0>134217728?134217728:Pa;if(eb>>>0>2){db=eb>>>0>8?eb:8;x=0;ib=Ba(563,db<<2|0)|0;jb=x;x=0;if(jb&1)break d;i[Sa>>0]=0;k[ab>>2]=eb;k[I>>2]=db;k[I+4>>2]=ib;kb=ib}else{k[ab>>2]=eb;kb=I}Dyb(kb|0,((i[ca>>0]|0)==0?k[y+4>>2]|0:y)|0,Pa<<2|0)|0;Pa=I+12|0;i[Pa>>0]=i[ba>>0]|0;eb=I+16|0;k[eb>>2]=0;ib=I+24|0;k[ib>>2]=0;db=I+29|0;i[db>>0]=1;jb=k[ea>>2]|0;lb=jb>>>0>134217728?134217728:jb;do if(lb>>>0>2){mb=lb>>>0>8?lb:8;x=0;ob=Ba(563,mb<<2|0)|0;pb=x;x=0;if(!(pb&1)){i[db>>0]=0;k[ib>>2]=lb;k[eb>>2]=mb;k[eb+4>>2]=ob;qb=ob;break}ob=Hc(0)|0;if(i[Sa>>0]|0){ua=ob;wa=30;break b}OBa(k[I+4>>2]|0);ua=ob;wa=30;break b}else{k[ib>>2]=lb;qb=eb}while(0);Dyb(qb|0,((i[ga>>0]|0)==0?k[da+4>>2]|0:da)|0,jb<<2|0)|0;lb=I+28|0;i[lb>>0]=i[fa>>0]|0;x=0;Ta(580,I|0,z|0)|0;ob=x;x=0;if(ob&1){ob=Hc(0)|0;if(!(i[db>>0]|0))OBa(k[eb+4>>2]|0);if(i[Sa>>0]|0){ua=ob;wa=30;break b}OBa(k[I+4>>2]|0);ua=ob;wa=30;break b}if(!(i[X>>0]|0))OBa(k[w+4>>2]|0);ob=k[ab>>2]|0;k[V>>2]=ob;mb=j[Pa>>1]|0;i[W>>0]=mb;pb=(mb&65535)>>>8&255;i[X>>0]=pb;if(!(pb<<24>>24)){pb=I;mb=k[pb+4>>2]|0;rb=w;k[rb>>2]=k[pb>>2];k[rb+4>>2]=mb;k[ab>>2]=0;i[Sa>>0]=1}else Dyb(w|0,I|0,ob<<2|0)|0;if(!(i[$>>0]|0))OBa(k[Y+4>>2]|0);ob=k[ib>>2]|0;k[Z>>2]=ob;mb=j[lb>>1]|0;i[_>>0]=mb;lb=(mb&65535)>>>8&255;i[$>>0]=lb;if(!(lb<<24>>24)){lb=eb;mb=k[lb+4>>2]|0;rb=Y;k[rb>>2]=k[lb>>2];k[rb+4>>2]=mb;k[ib>>2]=0;i[db>>0]=1}else Dyb(Y|0,eb|0,ob<<2|0)|0;if(i[Sa>>0]|0){wa=143;break b}OBa(k[I+4>>2]|0);wa=143;break b}while(0);K2a(H);ya=gb;wa=152;break b}while(0);if(i[Ra>>0]|0){ya=Ya;wa=152;break b}OBa(k[E+4>>2]|0);ya=Ya;wa=152;break b}while(0);K2a(C);ya=Va;wa=152;break b}while(0);if((wa|0)==26){x=0;hb(46);x=0}pa=Hc(0)|0;ua=pa;wa=30}while(0);f:do if((wa|0)==30){ya=ua;wa=152}else if((wa|0)==143){if(!(i[ia>>0]|0))OBa(k[A+4>>2]|0);if(!(i[ha>>0]|0))OBa(k[z+4>>2]|0);if(!(i[ga>>0]|0))OBa(k[da+4>>2]|0);if(!(i[ca>>0]|0))OBa(k[y+4>>2]|0);g:do switch(k[b+36>>2]|0){case 97:{k[U>>2]=0;k[U+8>>2]=1;i[U+12>>0]=0;Va=U+13|0;i[Va>>0]=1;x=0;fb(285,U|0,251233,v|0);C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){sb=Ya;tb=C;wa=162;break f}OBa(k[U+4>>2]|0);sb=Ya;tb=C;wa=162;break f}x=0;Ta(581,w|0,U|0)|0;C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){ub=Ya;vb=C;break f}OBa(k[U+4>>2]|0);ub=Ya;vb=C;break f}else{if(i[Va>>0]|0)break g;OBa(k[U+4>>2]|0);break g}break}case 96:{k[T>>2]=0;k[T+8>>2]=1;i[T+12>>0]=0;Va=T+13|0;i[Va>>0]=1;x=0;fb(285,T|0,251226,u|0);C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){sb=Ya;tb=C;wa=162;break f}OBa(k[T+4>>2]|0);sb=Ya;tb=C;wa=162;break f}x=0;Ta(581,w|0,T|0)|0;C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){ub=Ya;vb=C;break f}OBa(k[T+4>>2]|0);ub=Ya;vb=C;break f}else{if(i[Va>>0]|0)break g;OBa(k[T+4>>2]|0);break g}break}case 95:{k[S>>2]=0;k[S+8>>2]=1;i[S+12>>0]=0;Va=S+13|0;i[Va>>0]=1;x=0;fb(285,S|0,251220,t|0);C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){sb=Ya;tb=C;wa=162;break f}OBa(k[S+4>>2]|0);sb=Ya;tb=C;wa=162;break f}x=0;Ta(581,w|0,S|0)|0;C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){ub=Ya;vb=C;break f}OBa(k[S+4>>2]|0);ub=Ya;vb=C;break f}else{if(i[Va>>0]|0)break g;OBa(k[S+4>>2]|0);break g}break}case 89:{k[N>>2]=0;k[N+8>>2]=1;i[N+12>>0]=0;Va=N+13|0;i[Va>>0]=1;x=0;fb(285,N|0,251161,g|0);C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){sb=Ya;tb=C;wa=162;break f}OBa(k[N+4>>2]|0);sb=Ya;tb=C;wa=162;break f}x=0;Ta(581,w|0,N|0)|0;C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){ub=Ya;vb=C;break f}OBa(k[N+4>>2]|0);ub=Ya;vb=C;break f}else{if(i[Va>>0]|0)break g;OBa(k[N+4>>2]|0);break g}break}case 90:{k[O>>2]=0;k[O+8>>2]=1;i[O+12>>0]=0;Va=O+13|0;i[Va>>0]=1;x=0;fb(285,O|0,251175,f|0);C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){sb=Ya;tb=C;wa=162;break f}OBa(k[O+4>>2]|0);sb=Ya;tb=C;wa=162;break f}x=0;Ta(581,w|0,O|0)|0;C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){ub=Ya;vb=C;break f}OBa(k[O+4>>2]|0);ub=Ya;vb=C;break f}else{if(i[Va>>0]|0)break g;OBa(k[O+4>>2]|0);break g}break}case 91:{k[P>>2]=0;k[P+8>>2]=1;i[P+12>>0]=0;Va=P+13|0;i[Va>>0]=1;x=0;fb(285,P|0,251192,e|0);C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){sb=Ya;tb=C;wa=162;break f}OBa(k[P+4>>2]|0);sb=Ya;tb=C;wa=162;break f}x=0;Ta(581,w|0,P|0)|0;C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){ub=Ya;vb=C;break f}OBa(k[P+4>>2]|0);ub=Ya;vb=C;break f}else{if(i[Va>>0]|0)break g;OBa(k[P+4>>2]|0);break g}break}case 93:{k[Q>>2]=0;k[Q+8>>2]=1;i[Q+12>>0]=0;Va=Q+13|0;i[Va>>0]=1;x=0;fb(285,Q|0,251212,d|0);C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){sb=Ya;tb=C;wa=162;break f}OBa(k[Q+4>>2]|0);sb=Ya;tb=C;wa=162;break f}x=0;Ta(581,w|0,Q|0)|0;C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){ub=Ya;vb=C;break f}OBa(k[Q+4>>2]|0);ub=Ya;vb=C;break f}else{if(i[Va>>0]|0)break g;OBa(k[Q+4>>2]|0);break g}break}case 94:{k[R>>2]=0;k[R+8>>2]=1;i[R+12>>0]=0;Va=R+13|0;i[Va>>0]=1;x=0;fb(285,R|0,251215,o|0);C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){sb=Ya;tb=C;wa=162;break f}OBa(k[R+4>>2]|0);sb=Ya;tb=C;wa=162;break f}x=0;Ta(581,w|0,R|0)|0;C=x;x=0;if(C&1){C=Hc()|0;Ya=M;if(i[Va>>0]|0){ub=Ya;vb=C;break f}OBa(k[R+4>>2]|0);ub=Ya;vb=C;break f}else{if(i[Va>>0]|0)break g;OBa(k[R+4>>2]|0);break g}break}default:{}}while(0);i[a>>0]=1;x=0;xa(796,a+8|0,w|0);Va=x;x=0;if(Va&1)wa=161;else wa=228}while(0);if((wa|0)==152){if(!(i[ia>>0]|0))OBa(k[A+4>>2]|0);if(!(i[ha>>0]|0))OBa(k[z+4>>2]|0);if(!(i[ga>>0]|0))OBa(k[da+4>>2]|0);if(!(i[ca>>0]|0))OBa(k[y+4>>2]|0);me(ya|0)|0;k[L>>2]=0;k[L+8>>2]=1;i[L+12>>0]=0;i[L+13>>0]=1;i[K+13>>0]=1;k[K+8>>2]=1;k[K>>2]=k[L>>2];i[K+12>>0]=0;L=K+16|0;k[L>>2]=1;k[K+24>>2]=1;i[K+28>>0]=0;i[K+29>>0]=1;i[a>>0]=0;k[a+16>>2]=1;i[a+20>>0]=0;i[a+21>>0]=1;k[a+8>>2]=k[K>>2];k[a+32>>2]=1;i[a+36>>0]=0;i[a+37>>0]=1;k[a+24>>2]=k[L>>2];x=0;hb(45);L=x;x=0;if(L&1)wa=161;else wa=228}if((wa|0)==161){L=Hc()|0;sb=M;tb=L;wa=162}else if((wa|0)==228){if(!(i[$>>0]|0))OBa(k[Y+4>>2]|0);if(i[X>>0]|0){r=c;return}OBa(k[w+4>>2]|0);r=c;return}if((wa|0)==162){ub=sb;vb=tb}if(!(i[$>>0]|0))OBa(k[Y+4>>2]|0);if(i[X>>0]|0)Sc(vb|0);OBa(k[w+4>>2]|0);Sc(vb|0)}function i8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[c>>2]|0;if(cg[k[(k[d>>2]|0)+4>>2]&1023](d,k[b>>2]|0)|0){k[a>>2]=k[b>>2];d=k[b+4>>2]|0;k[a+4>>2]=d;if(!d)return;h0a(d);return}d=k[b>>2]|0;if(!(cg[k[(k[d>>2]|0)+4>>2]&1023](d,k[c>>2]|0)|0)){k[a>>2]=0;k[a+4>>2]=0;return}k[a>>2]=k[c>>2];d=k[c+4>>2]|0;k[a+4>>2]=d;if(!d)return;h0a(d);return}function j8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;c=r;r=r+32|0;d=c+24|0;e=c;f=c+12|0;g=b;h=a+12|0;i=a+16|0;j=k[i>>2]|0;do if(j){l=j;while(1){m=k[l+16>>2]|0;if(m>>>0>b>>>0){n=k[l>>2]|0;if(!n){o=l;p=l;q=4;break}else s=n}else{if(m>>>0>=b>>>0){t=l;q=10;break}m=l+4|0;n=k[m>>2]|0;if(!n){u=m;v=l;q=8;break}else s=n}l=s}if((q|0)==4){k[d>>2]=p;w=o;y=p;q=11;break}else if((q|0)==8){k[d>>2]=v;w=u;y=v;q=11;break}else if((q|0)==10){k[d>>2]=t;if(!t){w=d;y=t;q=11;break}else{z=t;break}}}else{k[d>>2]=i;w=i;y=i;q=11}while(0);if((q|0)==11){t=KBa(24)|0;k[t+16>>2]=g;k[t+20>>2]=0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=y;k[w>>2]=t;y=k[k[h>>2]>>2]|0;if(!y)A=t;else{k[h>>2]=y;A=k[w>>2]|0}ui(k[a+16>>2]|0,A);A=a+20|0;k[A>>2]=(k[A>>2]|0)+1;z=t}a:do if(!(k[z+20>>2]|0)){jg[k[(k[a>>2]|0)+100>>2]&511](e,a,b);b:do if(b){x=0;fb(286,f|0,a|0,b|0);t=x;x=0;if(!(t&1)){t=k[f>>2]|0;A=f+4|0;w=k[A>>2]|0;do if((t|0)==(w|0))B=t;else{y=e+4|0;v=e+8|0;u=t;while(1){p=k[y>>2]|0;if((p|0)==(k[v>>2]|0)){x=0;xa(760,e|0,u|0);o=x;x=0;if(o&1)break}else{x=0;xa(604,p|0,u|0);o=x;x=0;if(o&1)break;k[p+12>>2]=k[u+12>>2];o=k[u+16>>2]|0;k[p+16>>2]=o;if(o)h0a(o);k[p+20>>2]=k[u+20>>2];k[y>>2]=(k[y>>2]|0)+24}u=u+24|0;if((u|0)==(w|0)){q=26;break}}if((q|0)==26){B=k[f>>2]|0;break}u=Hc()|0;y=M;v=k[f>>2]|0;if(!v){C=y;D=u;break b}p=k[A>>2]|0;if((p|0)==(v|0))E=v;else{o=p;do{p=o+-24|0;k[A>>2]=p;s=k[o+-8>>2]|0;if(s)j0a(s);K2a(p);o=k[A>>2]|0}while((o|0)!=(v|0));E=k[f>>2]|0}OBa(E);C=y;D=u;break b}while(0);if(!B)q=42;else{w=k[A>>2]|0;if((w|0)==(B|0))F=B;else{t=w;do{w=t+-24|0;k[A>>2]=w;v=k[t+-8>>2]|0;if(v)j0a(v);K2a(w);t=k[A>>2]|0}while((t|0)!=(B|0));F=k[f>>2]|0}OBa(F);q=42}}else q=34}else q=42;while(0);do if((q|0)==42){t=k[i>>2]|0;do if(t){A=t;while(1){w=k[A+16>>2]|0;if(w>>>0>b>>>0){v=k[A>>2]|0;if(!v){G=A;H=A;q=45;break}else I=v}else{if(w>>>0>=b>>>0){J=A;q=51;break}w=A+4|0;v=k[w>>2]|0;if(!v){K=w;L=A;q=49;break}else I=v}A=I}if((q|0)==45){k[d>>2]=H;N=G;O=H;q=52;break}else if((q|0)==49){k[d>>2]=L;N=K;O=L;q=52;break}else if((q|0)==51){k[d>>2]=J;if(!J){N=d;O=J;q=52;break}else{P=J;break}}}else{k[d>>2]=i;N=i;O=i;q=52}while(0);if((q|0)==52){x=0;t=Ba(563,24)|0;A=x;x=0;if(A&1){q=34;break}k[t+16>>2]=g;k[t+20>>2]=0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=O;k[N>>2]=t;A=k[k[h>>2]>>2]|0;if(!A)Q=t;else{k[h>>2]=A;Q=k[N>>2]|0}ui(k[a+16>>2]|0,Q);A=a+20|0;k[A>>2]=(k[A>>2]|0)+1;P=t}t=P+20|0;x=0;A=Ba(563,16)|0;u=x;x=0;if(u&1)q=34;else{x=0;xa(797,A|0,e|0);u=x;x=0;if(u&1){u=Hc()|0;y=M;OBa(A);C=y;D=u;break}k[A+12>>2]=0;u=k[t>>2]|0;k[t>>2]=A;if(u){A=u+12|0;t=k[A>>2]|0;k[A>>2]=0;if(t){zh(t+40|0,k[t+44>>2]|0);OBa(t)}t=k[u>>2]|0;if(t){A=u+4|0;y=k[A>>2]|0;if((y|0)==(t|0))R=t;else{v=y;do{y=v+-24|0;k[A>>2]=y;w=k[v+-8>>2]|0;if(w)j0a(w);K2a(y);v=k[A>>2]|0}while((v|0)!=(t|0));R=k[u>>2]|0}OBa(R)}OBa(u)}t=k[e>>2]|0;if(t){v=e+4|0;A=k[v>>2]|0;if((A|0)==(t|0))S=t;else{y=A;do{A=y+-24|0;k[v>>2]=A;w=k[y+-8>>2]|0;if(w)j0a(w);K2a(A);y=k[v>>2]|0}while((y|0)!=(t|0));S=k[e>>2]|0}OBa(S)}break a}}while(0);if((q|0)==34){t=Hc()|0;C=M;D=t}t=k[e>>2]|0;if(!t)Sc(D|0);y=e+4|0;v=k[y>>2]|0;if((v|0)==(t|0))T=t;else{u=v;do{v=u+-24|0;k[y>>2]=v;A=k[u+-8>>2]|0;if(A)j0a(A);K2a(v);u=k[y>>2]|0}while((u|0)!=(t|0));T=k[e>>2]|0}OBa(T);Sc(D|0)}while(0);D=k[i>>2]|0;do if(D){T=D;while(1){e=k[T+16>>2]|0;if(e>>>0>b>>>0){C=k[T>>2]|0;if(!C){U=T;V=T;q=89;break}else W=C}else{if(e>>>0>=b>>>0){X=T;q=95;break}e=T+4|0;C=k[e>>2]|0;if(!C){Y=e;Z=T;q=93;break}else W=C}T=W}if((q|0)==89){k[d>>2]=V;_=U;$=V;break}else if((q|0)==93){k[d>>2]=Z;_=Y;$=Z;break}else if((q|0)==95){k[d>>2]=X;if(!X){_=d;$=X;break}else aa=X;ba=aa+20|0;ca=k[ba>>2]|0;r=c;return ca|0}}else{k[d>>2]=i;_=i;$=i}while(0);i=KBa(24)|0;k[i+16>>2]=g;k[i+20>>2]=0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=$;k[_>>2]=i;$=k[k[h>>2]>>2]|0;if(!$)da=i;else{k[h>>2]=$;da=k[_>>2]|0}ui(k[a+16>>2]|0,da);da=a+20|0;k[da>>2]=(k[da>>2]|0)+1;aa=i;ba=aa+20|0;ca=k[ba>>2]|0;r=c;return ca|0}function k8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;d=r;r=r+176|0;e=d+88|0;f=d+80|0;g=d+68|0;h=d+56|0;i=d+40|0;j=d+24|0;l=d+48|0;m=d;n=k[b+4>>2]|0;o=k[b+8>>2]|0;if(!o){p=Rd(4)|0;k[p>>2]=70084;Gf(p|0,17384,1289)}b=l0a(o)|0;if(!b){p=Rd(4)|0;k[p>>2]=70084;Gf(p|0,17384,1289)}p=n;if((n|0)!=0?(o=iDa(n,168,6688,0)|0,(o|0)!=0):0){x=0;nb(k[(k[o>>2]|0)+104>>2]|0,f|0,o|0,0,0);o=x;x=0;if(o&1){o=Hc()|0;n=M;j0a(b);q=o;s=n;Sc(q|0)}}else{k[f>>2]=p;k[f+4>>2]=b;h0a(b)}j0a(b);b=g+4|0;k[b>>2]=0;p=g+8|0;k[p>>2]=0;n=g+4|0;k[g>>2]=n;k[a>>2]=0;o=a+4|0;k[o>>2]=0;k[a+8>>2]=0;x=0;t=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;a:do if(c&1){u=Hc()|0;v=u;w=M;y=18}else{u=k[t+36>>2]|0;z=k[t+40>>2]|0;b:do if((u|0)==(z|0))A=n;else{B=h+4|0;C=j+4|0;D=n;E=l+4|0;F=m+12|0;G=m+16|0;H=m+20|0;I=a+8|0;J=i+4|0;K=u;c:while(1){x=0;xa(798,h|0,(k[K>>2]|0)+60|0);L=x;x=0;if(L&1){y=16;break}L=k[h>>2]|0;N=k[B>>2]|0;if((L|0)==(N|0))O=L;else{P=L;do{L=k[P>>2]|0;Q=k[L+32>>2]|0;do if(Q){R=k[f>>2]|0;S=k[(k[R>>2]|0)+24>>2]|0;x=0;T=Ba(k[(k[Q>>2]|0)+16>>2]|0,Q|0)|0;U=x;x=0;if(U&1){y=38;break c}U=k[T+4>>2]|0;V=U;if((U|0)!=0?(W=iDa(U,168,6688,0)|0,(W|0)!=0):0){x=0;nb(k[(k[W>>2]|0)+104>>2]|0,i|0,W|0,0,0);W=x;x=0;if(W&1){y=38;break c}}else y=32;if((y|0)==32?(y=0,k[i>>2]=V,V=k[T+8>>2]|0,k[J>>2]=V,(V|0)!=0):0)h0a(V);x=0;V=Ta(S|0,R|0,k[i>>2]|0)|0;R=x;x=0;if(R&1){y=40;break c}R=k[J>>2]|0;if(!R)if(V)break;else{y=42;break}else{j0a(R);if(V)break;else{y=42;break}}}else y=42;while(0);if((y|0)==42){y=0;Q=k[L+24>>2]|0;x=0;V=Ba(k[(k[Q>>2]|0)+16>>2]|0,Q|0)|0;Q=x;x=0;if(Q&1){y=38;break c}Q=iDa(k[V+12>>2]|0,4520,5312,0)|0;if(!Q){y=44;break c}x=0;xa(590,j|0,Q+60|0);Q=x;x=0;if(Q&1){y=38;break c}Q=k[j>>2]|0;V=k[C>>2]|0;if((Q|0)==(V|0))X=Q;else{R=Q;do{Q=k[R>>2]|0;x=0;S=Ba(k[(k[Q>>2]|0)+20>>2]|0,Q|0)|0;T=x;x=0;if(T&1){y=63;break c}d:do if(S){T=k[Q+32>>2]|0;if(!T){x=0;W=Ba(k[(k[Q>>2]|0)+36>>2]|0,Q|0)|0;U=x;x=0;if(U&1){y=63;break c}else Y=W}else Y=T;if((Y|0)<=1)break;T=k[n>>2]|0;W=(T|0)==0;if(!W){U=T;do{Z=k[U+16>>2]|0;if(Q>>>0>>0)_=U;else{if(Z>>>0>=Q>>>0)break d;_=U+4|0}U=k[_>>2]|0}while((U|0)!=0)}x=0;U=Ba(563,20)|0;Z=x;x=0;if(Z&1){y=63;break c}k[U+16>>2]=Q;do if(!W){Z=T;while(1){$=k[Z+16>>2]|0;if(Q>>>0<$>>>0){aa=k[Z>>2]|0;if(!aa){ba=Z;ca=Z;y=68;break}else da=aa}else{if($>>>0>=Q>>>0){ea=Z;y=73;break}$=Z+4|0;aa=k[$>>2]|0;if(!aa){fa=$;ga=Z;y=72;break}else da=aa}Z=da}if((y|0)==68){y=0;k[e>>2]=ca;ha=ba;ia=ca;break}else if((y|0)==72){y=0;k[e>>2]=ga;ha=fa;ia=ga;break}else if((y|0)==73){y=0;k[e>>2]=ea;ha=e;ia=ea;break}}else{k[e>>2]=n;ha=n;ia=D}while(0);if(!(k[ha>>2]|0)){k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=ia;k[ha>>2]=U;T=k[k[g>>2]>>2]|0;if(!T)ja=U;else{k[g>>2]=T;ja=k[ha>>2]|0}ui(k[b>>2]|0,ja);k[p>>2]=(k[p>>2]|0)+1}else OBa(U);x=0;fb(143,e|0,Q|0,0);T=x;x=0;if(T&1){y=63;break c}x=0;nb(125,l|0,e|0,1,1);T=x;x=0;if(T&1){y=95;break c}T=k[l>>2]|0;W=T;do if(!T){Z=k[E>>2]|0;if(Z){ka=Z;y=103}}else{Z=k[Q+24>>2]|0;aa=k[E>>2]|0;$=(aa|0)==0;if(!$)h0a(aa);x=0;xa(604,m|0,Z|0);Z=x;x=0;if(Z&1){la=aa;ma=$;y=96;break c}k[F>>2]=W;k[G>>2]=aa;if(!$)h0a(aa);k[H>>2]=Q;Z=k[o>>2]|0;do if(Z>>>0<(k[I>>2]|0)>>>0){k[Z>>2]=k[m>>2];k[Z+4>>2]=k[m+4>>2];k[Z+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[Z+12>>2]=k[F>>2];k[Z+16>>2]=k[G>>2];k[F>>2]=0;k[G>>2]=0;k[Z+20>>2]=k[H>>2];k[o>>2]=(k[o>>2]|0)+24}else{x=0;xa(799,a|0,m|0);na=x;x=0;if(na&1){oa=aa;pa=$;y=97;break c}na=k[G>>2]|0;if(!na)break;j0a(na)}while(0);K2a(m);if($)break;j0a(aa);ka=aa;y=103}while(0);if((y|0)==103){y=0;j0a(ka)}Dg(e)}while(0);R=R+4|0}while((R|0)!=(V|0));X=k[j>>2]|0}V=X;if(X){R=k[C>>2]|0;if((R|0)!=(X|0))k[C>>2]=R+(~((R+-4-V|0)>>>2)<<2);OBa(X)}}P=P+4|0}while((P|0)!=(N|0));O=k[h>>2]|0}N=O;if(O){P=k[B>>2]|0;if((P|0)!=(O|0))k[B>>2]=P+(~((P+-4-N|0)>>>2)<<2);OBa(O)}K=K+4|0;if((K|0)==(z|0)){A=n;break b}}if((y|0)==16){K=Hc()|0;v=K;w=M;y=18;break a}else if((y|0)==38){K=Hc()|0;qa=K;ra=M;y=39}else if((y|0)==40){K=Hc()|0;H=M;F=k[J>>2]|0;if(!F){sa=K;ta=H}else{j0a(F);sa=K;ta=H}}else if((y|0)==44){x=0;hb(49);x=0;H=Hc()|0;qa=H;ra=M;y=39}else if((y|0)==63){H=Hc()|0;ua=H;va=M;y=107}else if((y|0)==95){H=Hc()|0;wa=H;ya=M;y=106}else if((y|0)==96){H=Hc()|0;za=H;Aa=M;Ca=la;Da=ma;y=100}else if((y|0)==97){H=Hc()|0;K=M;F=k[G>>2]|0;if(F)j0a(F);K2a(m);za=H;Aa=K;Ca=oa;Da=pa;y=100}if((y|0)==39){sa=qa;ta=ra}else if((y|0)==100)if(Da){wa=za;ya=Aa;y=106}else{j0a(Ca);j0a(Ca);wa=za;ya=Aa;y=106}if((y|0)==106){Dg(e);ua=wa;va=ya;y=107}if((y|0)==107){K=k[j>>2]|0;H=K;if(!K){sa=ua;ta=va}else{F=k[C>>2]|0;if((F|0)!=(K|0))k[C>>2]=F+(~((F+-4-H|0)>>>2)<<2);OBa(K);sa=ua;ta=va}}K=k[h>>2]|0;if(!K){Ea=sa;Fa=ta;break a}H=k[B>>2]|0;if((H|0)!=(K|0))k[B>>2]=H+(~((H+-4-K|0)>>>2)<<2);OBa(K);Ea=sa;Fa=ta;break a}while(0);aba(g,k[A>>2]|0);z=k[f+4>>2]|0;if(!z){r=d;return}j0a(z);r=d;return}while(0);if((y|0)==18){Ea=v;Fa=w}w=k[a>>2]|0;if(w){v=k[o>>2]|0;if((v|0)==(w|0))Ga=w;else{y=v;do{v=y+-24|0;k[o>>2]=v;d=k[y+-8>>2]|0;if(d)j0a(d);K2a(v);y=k[o>>2]|0}while((y|0)!=(w|0));Ga=k[a>>2]|0}OBa(Ga)}aba(g,k[n>>2]|0);n=k[f+4>>2]|0;if(!n){q=Ea;s=Fa;Sc(q|0)}j0a(n);q=Ea;s=Fa;Sc(q|0)}function l8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=k[c>>2]|0;e=d;if((d|0)!=0?(f=iDa(d,168,6688,0)|0,(f|0)!=0):0){ng[k[(k[f>>2]|0)+104>>2]&255](a,f,b,0);return}k[a>>2]=e;e=k[c+4>>2]|0;k[a+4>>2]=e;if(!e)return;h0a(e);return}function m8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;e=r;r=r+64|0;f=e+60|0;g=e+48|0;h=e+24|0;j=e+44|0;l=e+8|0;m=e+32|0;n=e;i[f>>0]=d&1;k[g>>2]=0;d=g+4|0;k[d>>2]=0;k[g+8>>2]=0;o=k[b+24>>2]|0;p=k[b+28>>2]|0;a:do if((o|0)!=(p|0)){q=g+8|0;s=h+4|0;t=o;b:while(1){u=k[t>>2]|0;v=u;do if(((u|0)!=0?(w=iDa(u,168,6688,0)|0,(w|0)!=0):0)?(k[w+24>>2]|0)==1:0){x=0;nb(k[(k[w>>2]|0)+104>>2]|0,h|0,w|0,2,0);w=x;x=0;if(w&1){y=13;break b}w=k[d>>2]|0;if(w>>>0<(k[q>>2]|0)>>>0){k[w>>2]=k[h>>2];k[w+4>>2]=k[s>>2];k[h>>2]=0;k[s>>2]=0;k[d>>2]=w+8;break}x=0;xa(745,g|0,h|0);w=x;x=0;if(w&1)break b;w=k[s>>2]|0;if(w)j0a(w)}else y=18;while(0);do if((y|0)==18){y=0;u=k[d>>2]|0;if((u|0)==(k[q>>2]|0)){x=0;xa(743,g|0,t|0);w=x;x=0;if(w&1){y=13;break b}else break}k[u>>2]=v;w=k[t+4>>2]|0;k[u+4>>2]=w;if(!w)z=u;else{h0a(w);z=k[d>>2]|0}k[d>>2]=z+8}while(0);t=t+8|0;if((t|0)==(p|0)){y=3;break a}}if((y|0)==13){t=Hc()|0;A=t;B=M;y=15;break}t=Hc()|0;q=M;v=k[s>>2]|0;if(!v){C=t;D=q}else{j0a(v);C=t;D=q}}else y=3;while(0);c:do if((y|0)==3){p=k[b+72>>2]|0;k[j>>2]=p;do if(c){z=b+84|0;h=k[z>>2]|0;x=0;fb(140,l|0,251242,32);o=x;x=0;if(!(o&1)){x=0;pa(57,(h|0)!=0|0,l|0,2081,250928,251275);h=x;x=0;if(h&1){h=Hc()|0;o=M;K2a(l);C=h;D=o;break c}K2a(l);o=k[z>>2]|0;z=k[o+32>>2]|0;if(!z){x=0;h=Ba(k[(k[o>>2]|0)+36>>2]|0,o|0)|0;o=x;x=0;if(o&1)break;else E=h}else E=z;if((E|0)>2){k[j>>2]=3;F=3;y=32;break}else{k[j>>2]=0;F=0;y=32;break}}}else{F=p;y=32}while(0);if((y|0)==32?(x=0,xa(744,m|0,b+36|0),p=x,x=0,!(p&1)):0){d:do if((F|0)!=0?(p=k[m>>2]|0,s=k[m+4>>2]|0,(p|0)!=(s|0)):0){z=p;while(1){p=k[z>>2]|0;x=0;h=Ba(k[(k[p>>2]|0)+36>>2]|0,p|0)|0;p=x;x=0;if(p&1)break;if(h){x=0;h=Ba(563,36)|0;p=x;x=0;if(p&1)break;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=39200;p=h+16|0;k[p>>2]=0;o=h+20|0;k[o>>2]=0;q=h+12|0;t=h+28|0;k[t>>2]=0;k[h+32>>2]=0;k[h+24>>2]=t;k[q>>2]=39228;t=q;q=h;i0a(h);k[p>>2]=t;p=k[o>>2]|0;k[o>>2]=q;if(p)k0a(p);k[z>>2]=t;t=z+4|0;p=k[t>>2]|0;k[t>>2]=q;if(p)j0a(p)}z=z+8|0;if((z|0)==(s|0)){y=52;break d}}s=Hc()|0;G=m;H=s;I=M}else y=52;while(0);do if((y|0)==52){x=0;Na(43,n|0,g|0,m|0,b+48|0,b+60|0,j|0,b+76|0,b+84|0,b+80|0,b+81|0,b+77|0,b+78|0,f|0);s=x;x=0;if(s&1){s=Hc()|0;G=m;H=s;I=M;break}k[a>>2]=k[n>>2];s=n+4|0;k[a+4>>2]=k[s>>2];k[n>>2]=0;k[s>>2]=0;s=k[m>>2]|0;if(s){z=m+4|0;p=k[z>>2]|0;if((p|0)==(s|0))J=s;else{q=p;while(1){p=q+-8|0;k[z>>2]=p;t=k[q+-4>>2]|0;if(!t)K=p;else{j0a(t);K=k[z>>2]|0}if((K|0)==(s|0))break;else q=K}J=k[m>>2]|0}OBa(J)}q=k[g>>2]|0;if(!q){r=e;return}s=k[d>>2]|0;if((s|0)==(q|0))L=q;else{z=s;while(1){s=z+-8|0;k[d>>2]=s;t=k[z+-4>>2]|0;if(!t)N=s;else{j0a(t);N=k[d>>2]|0}if((N|0)==(q|0))break;else z=N}L=k[g>>2]|0}OBa(L);r=e;return}while(0);z=k[G>>2]|0;if(!z){C=H;D=I;break}q=m+4|0;t=k[q>>2]|0;if((t|0)==(z|0))O=z;else{s=t;while(1){t=s+-8|0;k[q>>2]=t;p=k[s+-4>>2]|0;if(!p)P=t;else{j0a(p);P=k[q>>2]|0}if((P|0)==(z|0))break;else s=P}O=k[m>>2]|0}OBa(O);C=H;D=I;break}s=Hc()|0;A=s;B=M;y=15}while(0);if((y|0)==15){C=A;D=B}B=k[g>>2]|0;if(!B)Sc(C|0);D=k[d>>2]|0;if((D|0)==(B|0))Q=B;else{A=D;while(1){D=A+-8|0;k[d>>2]=D;y=k[A+-4>>2]|0;if(!y)R=D;else{j0a(y);R=k[d>>2]|0}if((R|0)==(B|0))break;else A=R}Q=k[g>>2]|0}OBa(Q);Sc(C|0)}function n8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+32|0;e=d+24|0;f=d+12|0;g=d;k[e>>2]=b;k[a+4>>2]=0;h=a+8|0;k[h>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;i=a+16|0;k[a+12>>2]=i;k[a>>2]=37140;j=a+24|0;k[j>>2]=b;k[a+28>>2]=c;if((c|0)==2){k[j>>2]=160;l=160}else l=b;b=(l+-1|0)>>>0<256&(l&7|0)==0;x=0;xa(800,g|0,e|0);e=x;x=0;if(e&1){e=Hc()|0;m=M;n=e}else{x=0;e=Fa(86,g|0,0,251359)|0;l=x;x=0;do if(!(l&1)){k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;pa(57,b|0,f|0,258,250928,251397);j=x;x=0;if(j&1){j=Hc()|0;c=M;K2a(f);o=c;p=j;break}else{K2a(f);K2a(g);r=d;return}}else{j=Hc()|0;o=M;p=j}while(0);K2a(g);m=o;n=p}k[a>>2]=20456;xh(a+12|0,k[i>>2]|0);i=k[h>>2]|0;if(!i)Sc(n|0);k0a(i);Sc(n|0)}function o8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)==(Vf[k[k[a>>2]>>2]&1023](a)|0)){c=iDa(b,168,6592,0)|0;if(!c)BBa();d=k[c+24>>2]|0;e=k[a+24>>2]|0;if((d|0)<(e|0)){f=0;return f|0}g=k[a+28>>2]|0;if((g|0)!=2){h=(g|0)==1;g=(k[c+28>>2]|0)==1;return (h|g^1?g|h^1:(d|0)>(e|0))|0}f=(k[c+28>>2]|0)==2;return f|0}if((Vf[k[k[b>>2]>>2]&1023](b)|0)!=4){f=0;return f|0}c=iDa(b,168,6608,0)|0;if(!c)BBa();b=k[c+24>>2]|0;e=k[a+24>>2]|0;if((b|0)<(e|0)){f=0;return f|0}d=k[a+28>>2]|0;if((d|0)==2){f=0;return f|0}a=(d|0)==1;d=(k[c+32>>2]|0)==1;f=a|d^1?d|a^1:(b|0)>(e|0);return f|0}function p8(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)==(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=1;return d|0}if((Vf[k[k[b>>2]>>2]&1023](b)|0)==7){d=1;return d|0}if((Vf[k[k[b>>2]>>2]&1023](b)|0)==10){d=1;return d|0}if((Vf[k[k[b>>2]>>2]&1023](b)|0)==6){d=1;return d|0}d=(Vf[k[k[b>>2]>>2]&1023](b)|0)==4;return d|0}function q8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;if((c|0)==49){QU(e);k[a>>2]=k[e>>2];f=e+4|0;k[a+4>>2]=k[f>>2];k[e>>2]=0;k[f>>2]=0;r=d;return}if((k[b+28>>2]|0)==2){k[a>>2]=0;k[a+4>>2]=0;r=d;return}switch(c|0){case 33:case 34:case 46:case 47:case 48:break;default:{k[a>>2]=0;k[a+4>>2]=0;r=d;return}}k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(!a){k[c>>2]=0;g=Rd(4)|0;k[g>>2]=70084;Gf(g|0,17384,1289)}b=l0a(a)|0;k[c>>2]=b;if(!b){g=Rd(4)|0;k[g>>2]=70084;Gf(g|0,17384,1289)}else{r=d;return}}function r8(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6592,0)|0;if(!c)BBa();if((k[c+24>>2]|0)!=(k[a+24>>2]|0)){d=0;return d|0}d=(k[c+28>>2]|0)==(k[a+28>>2]|0);return d|0}function s8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[b+28>>2]|0;if((f|0)==2){q2a(a,293736,7);r=c;return}g=(f|0)==1;q2a(d,g?301574:293718,g?3:4);x=0;xa(800,e|0,b+24|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;j=b;K2a(d);Sc(j|0)}b=i[d>>0]|0;g=(b&1)==0;x=0;f=db(71,e|0,0,(g?d+1|0:k[d+8>>2]|0)|0,(g?(b&255)>>>1:k[d+4>>2]|0)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;g=M;K2a(e);h=g;j=b;K2a(d);Sc(j|0)}else{k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(e);K2a(d);r=c;return}}function t8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=k[d>>2]|0;if(((Vf[k[k[e>>2]>>2]&1023](e)|0)!=1?(e=k[d>>2]|0,(Vf[k[k[e>>2]>>2]&1023](e)|0)!=4):0)?(e=k[d>>2]|0,f=Vf[k[k[e>>2]>>2]&1023](e)|0,(f|0)!=(Vf[k[k[b>>2]>>2]&1023](b)|0)):0){k[a>>2]=0;k[a+4>>2]=0;return}f=k[b+4>>2]|0;e=k[b+8>>2]|0;if(!e){g=Rd(4)|0;k[g>>2]=70084;Gf(g|0,17384,1289)}b=l0a(e)|0;if(!b){g=Rd(4)|0;k[g>>2]=70084;Gf(g|0,17384,1289)}g=k[d>>2]|0;e=f;x=0;h=Ta(k[(k[g>>2]|0)+4>>2]|0,g|0,e|0)|0;g=x;x=0;if(g&1){i=Hc()|0;j=M;j0a(b);Sc(i|0)}do if(!h){x=0;g=Ta(k[(k[f>>2]|0)+4>>2]|0,e|0,k[d>>2]|0)|0;l=x;x=0;if(l&1){i=Hc()|0;j=M;j0a(b);Sc(i|0)}if(!g){j0a(b);m=0;n=17;break}g=k[d>>2]|0;l=k[d+4>>2]|0;o=l;if(!l){p=g;q=o;n=16}else{h0a(l);p=g;q=o;n=16}}else{h0a(b);p=f;q=b;n=16}while(0);a:do if((n|0)==16){j0a(b);if(!p){m=q;n=17}else{if((c+-39|0)>>>0<6){k[a>>2]=p;k[a+4>>2]=q;return}switch(c|0){case 25:case 26:case 45:{k[a>>2]=0;k[a+4>>2]=0;r=q;break a;break}default:{}}f=p;d=iDa(f,168,6592,0)|0;if(!d){if(iDa(f,168,6608,0)|0){f=q;if(!q)s=0;else{h0a(f);s=f}if((c|0)==38){k[a>>2]=0;k[a+4>>2]=0;t=1}else t=0;if(s)j0a(s);if(t){r=q;break}}}else{f=q;if(!q)u=0;else{h0a(f);u=f}if((k[d+28>>2]|0)==2){k[a>>2]=0;k[a+4>>2]=0;v=1}else v=0;if(u)j0a(u);if(v){r=q;break}}k[a>>2]=p;k[a+4>>2]=q;return}}while(0);if((n|0)==17){k[a>>2]=0;k[a+4>>2]=0;r=m}if(!r)return;j0a(r);return}function u8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0;c=r;r=r+336|0;d=c+216|0;e=c+204|0;f=c+192|0;g=c+180|0;h=c+168|0;i=c+156|0;j=c+144|0;l=c+132|0;m=c+120|0;n=c+108|0;o=c+96|0;p=c+84|0;q=c+72|0;s=c+60|0;t=c+48|0;u=c+36|0;v=c+24|0;w=c+12|0;y=c;if((k[b+28>>2]|0)!=2){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;r=c;return}x=0;fb(140,e|0,272194,7);b=x;x=0;if(b&1){b=Hc()|0;z=d;A=1;B=b;C=M}else{x=0;b=Ba(563,44)|0;D=x;x=0;do if(D&1){E=Hc()|0;F=M;G=E;H=80}else{k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31848;E=b+12|0;x=0;fb(247,E|0,256,0);I=x;x=0;if(I&1){I=Hc()|0;J=M;c0a(b);OBa(b);F=J;G=I;H=80;break}I=E;i0a(b);k[b+16>>2]=I;E=b+20|0;J=k[E>>2]|0;k[E>>2]=b;if(J)k0a(J);x=0;xa(604,d|0,e|0);J=x;x=0;if(!(J&1)){k[d+12>>2]=I;k[d+16>>2]=b;h0a(b);k[d+20>>2]=0;I=d+24|0;x=0;fb(140,f|0,278991,4);J=x;x=0;if(J&1){K=I;H=81}else{k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;fb(140,i|0,301569,4);J=x;x=0;if(J&1){J=Hc()|0;L=I;N=1;O=J;P=M}else{k[h>>2]=0;J=h+4|0;k[J>>2]=0;k[h+8>>2]=0;x=0;E=Ba(563,12)|0;Q=x;x=0;do if(Q&1){R=Hc()|0;S=R;T=M;H=83}else{k[J>>2]=E;k[h>>2]=E;k[h+8>>2]=E+12;x=0;xa(604,E|0,i|0);R=x;x=0;if(R&1){R=Hc()|0;U=M;OBa(E);S=R;T=U;H=83;break}k[J>>2]=E+12;x=0;U=Ba(563,100)|0;R=x;x=0;do if(R&1){V=Hc()|0;W=M;X=V;H=85}else{k[U+4>>2]=0;k[U+8>>2]=0;k[U>>2]=31496;V=U+12|0;x=0;Pa(44,V|0,g|0,h|0,4,1,0,1);Y=x;x=0;if(Y&1){Y=Hc()|0;Z=M;c0a(U);OBa(U);W=Z;X=Y;H=85;break}Y=V;i0a(U);k[U+16>>2]=Y;V=U+20|0;Z=k[V>>2]|0;k[V>>2]=U;if(Z)k0a(Z);x=0;xa(604,I|0,f|0);Z=x;x=0;do if(Z&1){_=I;H=86}else{k[d+36>>2]=Y;k[d+40>>2]=U;h0a(U);k[d+44>>2]=0;V=d+48|0;x=0;fb(140,j|0,272207,8);$=x;x=0;if($&1){_=V;H=86;break}k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;fb(140,n|0,301569,4);$=x;x=0;if($&1){$=Hc()|0;aa=V;ba=1;ca=$;da=M}else{k[m>>2]=0;$=m+4|0;k[$>>2]=0;k[m+8>>2]=0;x=0;ea=Ba(563,12)|0;fa=x;x=0;do if(fa&1){ga=Hc()|0;ha=ga;ia=M;H=88}else{k[$>>2]=ea;k[m>>2]=ea;k[m+8>>2]=ea+12;x=0;xa(604,ea|0,n|0);ga=x;x=0;if(ga&1){ga=Hc()|0;ja=M;OBa(ea);ha=ga;ia=ja;H=88;break}k[$>>2]=ea+12;x=0;ja=Ba(563,100)|0;ga=x;x=0;do if(ga&1){ka=Hc()|0;la=M;ma=ka;H=90}else{k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja>>2]=31496;ka=ja+12|0;x=0;Pa(44,ka|0,l|0,m|0,5,1,0,1);na=x;x=0;if(na&1){na=Hc()|0;oa=M;c0a(ja);OBa(ja);la=oa;ma=na;H=90;break}na=ka;i0a(ja);k[ja+16>>2]=na;ka=ja+20|0;oa=k[ka>>2]|0;k[ka>>2]=ja;if(oa)k0a(oa);x=0;xa(604,V|0,j|0);oa=x;x=0;do if(oa&1){pa=V;H=91}else{k[d+60>>2]=na;k[d+64>>2]=ja;h0a(ja);k[d+68>>2]=0;ka=d+72|0;x=0;fb(140,o|0,272216,12);qa=x;x=0;if(qa&1){pa=ka;H=91;break}k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;x=0;fb(140,s|0,301569,4);qa=x;x=0;if(qa&1){qa=Hc()|0;ra=ka;sa=1;ta=qa;ua=M}else{k[q>>2]=0;qa=q+4|0;k[qa>>2]=0;k[q+8>>2]=0;x=0;va=Ba(563,12)|0;wa=x;x=0;do if(wa&1){ya=Hc()|0;za=ya;Aa=M;H=93}else{k[qa>>2]=va;k[q>>2]=va;k[q+8>>2]=va+12;x=0;xa(604,va|0,s|0);ya=x;x=0;if(ya&1){ya=Hc()|0;Ca=M;OBa(va);za=ya;Aa=Ca;H=93;break}k[qa>>2]=va+12;x=0;Ca=Ba(563,100)|0;ya=x;x=0;do if(ya&1){Da=Hc()|0;Ea=M;Fa=Da;H=95}else{k[Ca+4>>2]=0;k[Ca+8>>2]=0;k[Ca>>2]=31496;Da=Ca+12|0;x=0;Pa(44,Da|0,p|0,q|0,6,1,0,0);Ga=x;x=0;if(Ga&1){Ga=Hc()|0;Ha=M;c0a(Ca);OBa(Ca);Ea=Ha;Fa=Ga;H=95;break}Ga=Da;i0a(Ca);k[Ca+16>>2]=Ga;Da=Ca+20|0;Ha=k[Da>>2]|0;k[Da>>2]=Ca;if(Ha)k0a(Ha);x=0;xa(604,ka|0,o|0);Ha=x;x=0;do if(Ha&1){Ia=ka;H=96}else{k[d+84>>2]=Ga;k[d+88>>2]=Ca;h0a(Ca);k[d+92>>2]=0;Da=d+96|0;x=0;fb(140,t|0,272202,4);Ja=x;x=0;if(Ja&1){Ia=Da;H=96;break}x=0;fb(140,v|0,293718,4);Ja=x;x=0;if(Ja&1){Ja=Hc()|0;Ka=1;La=Ja;Ma=M}else{k[u>>2]=0;Ja=u+4|0;k[Ja>>2]=0;k[u+8>>2]=0;x=0;Na=Ba(563,12)|0;Oa=x;x=0;do if(Oa&1){Qa=Hc()|0;Ra=Qa;Sa=M;H=98}else{k[Ja>>2]=Na;k[u>>2]=Na;k[u+8>>2]=Na+12;x=0;xa(604,Na|0,v|0);Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Ta=M;OBa(Na);Ra=Qa;Sa=Ta;H=98;break}k[Ja>>2]=Na+12;x=0;fb(140,y|0,301569,4);Ta=x;x=0;if(Ta&1){Ta=Hc()|0;Ua=1;Va=Ta;Wa=M}else{k[w>>2]=0;Ta=w+4|0;k[Ta>>2]=0;k[w+8>>2]=0;x=0;Qa=Ba(563,12)|0;Xa=x;x=0;do if(Xa&1){Ya=Hc()|0;Za=Ya;_a=M;H=100}else{k[Ta>>2]=Qa;k[w>>2]=Qa;k[w+8>>2]=Qa+12;x=0;xa(604,Qa|0,y|0);Ya=x;x=0;if(Ya&1){Ya=Hc()|0;$a=M;OBa(Qa);Za=Ya;_a=$a;H=100;break}k[Ta>>2]=Qa+12;x=0;$a=Ba(563,100)|0;Ya=x;x=0;do if(Ya&1){ab=Hc()|0;bb=M;cb=ab;H=102}else{k[$a+4>>2]=0;k[$a+8>>2]=0;k[$a>>2]=31496;ab=$a+12|0;x=0;Pa(44,ab|0,u|0,w|0,8,0,0,0);db=x;x=0;if(db&1){db=Hc()|0;eb=M;c0a($a);OBa($a);bb=eb;cb=db;H=102;break}db=ab;i0a($a);k[$a+16>>2]=db;ab=$a+20|0;eb=k[ab>>2]|0;k[ab>>2]=$a;if(eb)k0a(eb);x=0;xa(604,Da|0,t|0);eb=x;x=0;if(eb&1){eb=Hc()|0;gb=1;hb=eb;ib=M}else{k[d+108>>2]=db;k[d+112>>2]=$a;h0a($a);k[d+116>>2]=0;k[a>>2]=0;db=a+4|0;k[db>>2]=0;k[a+8>>2]=0;x=0;eb=Ba(563,120)|0;ab=x;x=0;if(ab&1){ab=Hc()|0;jb=ab;kb=M}else{k[db>>2]=eb;k[a>>2]=eb;k[a+8>>2]=eb+120;x=0;xa(604,eb|0,d|0);ab=x;x=0;if(ab&1){ab=Hc()|0;lb=ab;mb=M}else{k[eb+12>>2]=k[d+12>>2];ab=k[d+16>>2]|0;k[eb+16>>2]=ab;if(ab)h0a(ab);k[eb+20>>2]=k[d+20>>2];ab=eb+24|0;k[db>>2]=ab;x=0;xa(604,ab|0,d+24|0);nb=x;x=0;do if(nb&1)ob=ab;else{k[eb+36>>2]=k[d+36>>2];pb=k[d+40>>2]|0;k[eb+40>>2]=pb;if(pb)h0a(pb);k[eb+44>>2]=k[d+44>>2];pb=eb+48|0;k[db>>2]=pb;x=0;xa(604,pb|0,d+48|0);qb=x;x=0;if(qb&1){ob=pb;break}k[eb+60>>2]=k[d+60>>2];pb=k[d+64>>2]|0;k[eb+64>>2]=pb;if(pb)h0a(pb);k[eb+68>>2]=k[d+68>>2];pb=eb+72|0;k[db>>2]=pb;x=0;xa(604,pb|0,d+72|0);qb=x;x=0;if(qb&1){ob=pb;break}k[eb+84>>2]=k[d+84>>2];pb=k[d+88>>2]|0;k[eb+88>>2]=pb;if(pb)h0a(pb);k[eb+92>>2]=k[d+92>>2];pb=eb+96|0;k[db>>2]=pb;x=0;xa(604,pb|0,d+96|0);qb=x;x=0;if(qb&1){ob=pb;break}k[eb+108>>2]=k[d+108>>2];pb=k[d+112>>2]|0;k[eb+112>>2]=pb;if(pb)h0a(pb);k[eb+116>>2]=k[d+116>>2];k[db>>2]=eb+120;pb=k[d+112>>2]|0;if(pb)j0a(pb);K2a(d+96|0);pb=k[d+88>>2]|0;if(pb)j0a(pb);K2a(d+72|0);pb=k[d+64>>2]|0;if(pb)j0a(pb);K2a(d+48|0);pb=k[d+40>>2]|0;if(pb)j0a(pb);K2a(d+24|0);pb=k[d+16>>2]|0;if(pb)j0a(pb);K2a(d);j0a($a);K2a(Qa);k[Ta>>2]=Qa;OBa(Qa);K2a(y);K2a(Na);k[Ja>>2]=Na;OBa(Na);K2a(v);K2a(t);j0a(Ca);K2a(va);k[qa>>2]=va;OBa(va);K2a(s);K2a(o);j0a(ja);K2a(ea);k[$>>2]=ea;OBa(ea);K2a(n);K2a(j);j0a(U);K2a(E);k[J>>2]=E;OBa(E);K2a(i);K2a(f);j0a(b);K2a(e);r=c;return}while(0);ab=Hc()|0;nb=M;pb=ob;do{qb=k[pb+-8>>2]|0;pb=pb+-24|0;if(qb)j0a(qb);K2a(pb)}while((pb|0)!=(eb|0));k[db>>2]=eb;lb=ab;mb=nb}OBa(eb);jb=lb;kb=mb}pb=k[d+112>>2]|0;if(pb)j0a(pb);K2a(d+96|0);pb=k[d+88>>2]|0;if(pb)j0a(pb);K2a(d+72|0);pb=k[d+64>>2]|0;if(pb)j0a(pb);K2a(d+48|0);pb=k[d+40>>2]|0;if(pb)j0a(pb);K2a(d+24|0);pb=k[d+16>>2]|0;if(pb)j0a(pb);K2a(d);gb=0;hb=jb;ib=kb}j0a($a);rb=gb;sb=hb;tb=ib}while(0);if((H|0)==102){rb=1;sb=cb;tb=bb}K2a(Qa);k[Ta>>2]=Qa;OBa(Qa);ub=rb;vb=sb;wb=tb}while(0);if((H|0)==100){ub=1;vb=Za;wb=_a}K2a(y);Ua=ub;Va=vb;Wa=wb}K2a(Na);k[Ja>>2]=Na;OBa(Na);xb=Ua;yb=Va;zb=Wa}while(0);if((H|0)==98){xb=1;yb=Ra;zb=Sa}K2a(v);Ka=xb;La=yb;Ma=zb}K2a(t);Ab=Da;Bb=Ka;Cb=La;Db=Ma}while(0);if((H|0)==96){Ga=Hc()|0;Ab=Ia;Bb=1;Cb=Ga;Db=M}j0a(Ca);Eb=Ab;Fb=Bb;Gb=Cb;Hb=Db}while(0);if((H|0)==95){Eb=ka;Fb=1;Gb=Fa;Hb=Ea}K2a(va);k[qa>>2]=va;OBa(va);Ib=Eb;Jb=Fb;Kb=Gb;Lb=Hb}while(0);if((H|0)==93){Ib=ka;Jb=1;Kb=za;Lb=Aa}K2a(s);ra=Ib;sa=Jb;ta=Kb;ua=Lb}K2a(o);Mb=sa;Nb=ta;Ob=ua;Pb=ra}while(0);if((H|0)==91){na=Hc()|0;Mb=1;Nb=na;Ob=M;Pb=pa}j0a(ja);Qb=Mb;Rb=Nb;Sb=Ob;Tb=Pb}while(0);if((H|0)==90){Qb=1;Rb=ma;Sb=la;Tb=V}K2a(ea);k[$>>2]=ea;OBa(ea);Ub=Tb;Vb=Qb;Wb=Rb;Xb=Sb}while(0);if((H|0)==88){Ub=V;Vb=1;Wb=ha;Xb=ia}K2a(n);aa=Ub;ba=Vb;ca=Wb;da=Xb}K2a(j);Yb=aa;Zb=ba;_b=ca;$b=da}while(0);if((H|0)==86){Y=Hc()|0;Yb=_;Zb=1;_b=Y;$b=M}j0a(U);ac=Yb;bc=Zb;cc=_b;dc=$b}while(0);if((H|0)==85){ac=I;bc=1;cc=X;dc=W}K2a(E);k[J>>2]=E;OBa(E);ec=ac;fc=bc;gc=cc;hc=dc}while(0);if((H|0)==83){ec=I;fc=1;gc=S;hc=T}K2a(i);L=ec;N=fc;O=gc;P=hc}K2a(f);ic=L;jc=N;kc=O;lc=P}}else{K=d;H=81}if((H|0)==81){E=Hc()|0;ic=K;jc=1;kc=E;lc=M}j0a(b);mc=ic;nc=jc;oc=kc;pc=lc}while(0);if((H|0)==80){mc=d;nc=1;oc=G;pc=F}K2a(e);z=mc;A=nc;B=oc;C=pc}if((d|0)==(z|0)|A^1)Sc(B|0);else qc=z;do{z=k[qc+-8>>2]|0;qc=qc+-24|0;if(z)j0a(z);K2a(qc)}while((qc|0)!=(d|0));Sc(B|0)}function v8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;e=r;r=r+80|0;f=e+64|0;g=e+60|0;h=e+48|0;j=e+36|0;l=e+24|0;m=e+12|0;n=e;k[f>>2]=b;k[g>>2]=c;k[a+4>>2]=0;o=a+8|0;k[o>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;p=a+16|0;k[a+12>>2]=p;k[a>>2]=37252;k[a+24>>2]=b;k[a+28>>2]=c;k[a+32>>2]=d;if((b&7|0)==0&(b+-1+c|0)>>>0<256)q=(c&7|0)==0;else q=0;x=0;xa(800,m|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;s=M;t=f}else{x=0;f=Fa(86,m|0,0,251465)|0;c=x;x=0;if(c&1){c=Hc()|0;u=M;v=c}else{k[l>>2]=k[f>>2];k[l+4>>2]=k[f+4>>2];k[l+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;f=Ta(484,l|0,299014)|0;c=x;x=0;if(c&1){c=Hc()|0;w=M;y=c}else{k[j>>2]=k[f>>2];k[j+4>>2]=k[f+4>>2];k[j+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(800,n|0,g|0);g=x;x=0;if(g&1){g=Hc()|0;z=M;A=g}else{g=i[n>>0]|0;f=(g&1)==0;x=0;c=Fa(88,j|0,(f?n+1|0:k[n+8>>2]|0)|0,(f?(g&255)>>>1:k[n+4>>2]|0)|0)|0;g=x;x=0;do if(!(g&1)){k[h>>2]=k[c>>2];k[h+4>>2]=k[c+4>>2];k[h+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;pa(57,q|0,h|0,384,250928,251504);f=x;x=0;if(f&1){f=Hc()|0;b=M;K2a(h);B=b;C=f;break}else{K2a(h);K2a(n);K2a(j);K2a(l);K2a(m);r=e;return}}else{f=Hc()|0;B=M;C=f}while(0);K2a(n);z=B;A=C}K2a(j);w=z;y=A}K2a(l);u=w;v=y}K2a(m);s=u;t=v}k[a>>2]=20456;xh(a+12|0,k[p>>2]|0);p=k[o>>2]|0;if(!p)Sc(t|0);k0a(p);Sc(t|0)}function w8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0))return 0;c=iDa(b,168,6608,0)|0;if(!c)BBa();b=k[c+24>>2]|0;d=k[a+24>>2]|0;if((b|0)<(d|0))return 0;if((k[c+28>>2]|0)<(k[a+28>>2]|0))return 0;else{e=(k[a+32>>2]|0)==1;a=(k[c+32>>2]|0)==1;return (e|a^1?a|e^1:(b|0)>(d|0))|0}return 0}function x8(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)==(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=1;return d|0}if(!(Vf[k[k[b>>2]>>2]&1023](b)|0)){d=1;return d|0}d=(Vf[k[k[b>>2]>>2]&1023](b)|0)==6;return d|0}function y8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;switch(c|0){case 49:{QU(e);k[a>>2]=k[e>>2];c=e+4|0;k[a+4>>2]=k[c>>2];k[e>>2]=0;k[c>>2]=0;r=d;return}case 33:case 34:case 47:case 48:{k[a>>2]=k[b+4>>2];c=a+4|0;e=k[b+8>>2]|0;if(!e){k[c>>2]=0;f=Rd(4)|0;k[f>>2]=70084;Gf(f|0,17384,1289)}b=l0a(e)|0;k[c>>2]=b;if(!b){f=Rd(4)|0;k[f>>2]=70084;Gf(f|0,17384,1289)}else{r=d;return}break}default:{k[a>>2]=0;k[a+4>>2]=0;r=d;return}}}function z8(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6608,0)|0;if(!c)BBa();if((k[c+24>>2]|0)!=(k[a+24>>2]|0)){d=0;return d|0}if((k[c+28>>2]|0)!=(k[a+28>>2]|0)){d=0;return d|0}d=(k[c+32>>2]|0)==(k[a+32>>2]|0);return d|0}function A8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+64|0;d=c+48|0;e=c+36|0;f=c+24|0;g=c+12|0;h=c;j=(k[b+32>>2]|0)==1;q2a(d,j?293744:293750,j?5:6);x=0;xa(800,g|0,b+24|0);j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j;K2a(d);Sc(m|0)}j=i[d>>0]|0;n=(j&1)==0;x=0;o=db(71,g|0,0,(n?d+1|0:k[d+8>>2]|0)|0,(n?(j&255)>>>1:k[d+4>>2]|0)|0)|0;j=x;x=0;if(j&1){j=Hc()|0;p=M;q=j}else{k[f>>2]=k[o>>2];k[f+4>>2]=k[o+4>>2];k[f+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;x=0;o=Ta(484,f|0,299014)|0;j=x;x=0;if(j&1){j=Hc()|0;s=M;t=j}else{k[e>>2]=k[o>>2];k[e+4>>2]=k[o+4>>2];k[e+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;x=0;xa(800,h|0,b+28|0);b=x;x=0;do if(!(b&1)){o=i[h>>0]|0;j=(o&1)==0;x=0;n=Fa(88,e|0,(j?h+1|0:k[h+8>>2]|0)|0,(j?(o&255)>>>1:k[h+4>>2]|0)|0)|0;o=x;x=0;if(o&1){o=Hc()|0;j=M;K2a(h);u=j;v=o;break}else{k[a>>2]=k[n>>2];k[a+4>>2]=k[n+4>>2];k[a+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;K2a(h);K2a(e);K2a(f);K2a(g);K2a(d);r=c;return}}else{n=Hc()|0;u=M;v=n}while(0);K2a(e);s=u;t=v}K2a(f);p=s;q=t}K2a(g);l=p;m=q;K2a(d);Sc(m|0)}function B8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=k[d>>2]|0;if(((Vf[k[k[e>>2]>>2]&1023](e)|0)!=1?(e=k[d>>2]|0,f=Vf[k[k[e>>2]>>2]&1023](e)|0,(f|0)!=(Vf[k[k[b>>2]>>2]&1023](b)|0)):0)?(f=k[d>>2]|0,(Vf[k[k[f>>2]>>2]&1023](f)|0)!=0):0){k[a>>2]=0;k[a+4>>2]=0;return}f=k[b+4>>2]|0;e=k[b+8>>2]|0;if(!e){g=Rd(4)|0;k[g>>2]=70084;Gf(g|0,17384,1289)}b=l0a(e)|0;if(!b){g=Rd(4)|0;k[g>>2]=70084;Gf(g|0,17384,1289)}g=k[d>>2]|0;e=f;x=0;h=Ta(k[(k[g>>2]|0)+4>>2]|0,g|0,e|0)|0;g=x;x=0;if(g&1){i=Hc()|0;j=M;j0a(b);Sc(i|0)}do if(!h){x=0;g=Ta(k[(k[f>>2]|0)+4>>2]|0,e|0,k[d>>2]|0)|0;l=x;x=0;if(l&1){i=Hc()|0;j=M;j0a(b);Sc(i|0)}if(!g){j0a(b);m=0;n=17;break}g=k[d>>2]|0;l=k[d+4>>2]|0;o=l;if(!l){p=g;q=o;n=16}else{h0a(l);p=g;q=o;n=16}}else{h0a(b);p=f;q=b;n=16}while(0);a:do if((n|0)==16){j0a(b);if(!p){m=q;n=17}else{if((c+-39|0)>>>0<6){k[a>>2]=p;k[a+4>>2]=q;return}switch(c|0){case 25:case 26:case 45:case 27:case 28:case 29:case 46:{k[a>>2]=0;k[a+4>>2]=0;r=q;break a;break}default:{}}f=p;if(!(iDa(f,168,6608,0)|0)){d=iDa(f,168,6592,0)|0;if(d){f=q;if(!q)s=0;else{h0a(f);s=f}if((k[d+28>>2]|0)==2){k[a>>2]=0;k[a+4>>2]=0;t=1}else t=0;if(s)j0a(s);if(t){r=q;break}}}else{d=q;if(!q)u=0;else{h0a(d);u=d}if((c|0)==38){k[a>>2]=0;k[a+4>>2]=0;v=1}else v=0;if(u)j0a(u);if(v){r=q;break}}k[a>>2]=p;k[a+4>>2]=q;return}}while(0);if((n|0)==17){k[a>>2]=0;k[a+4>>2]=0;r=m}if(!r)return;j0a(r);return}function C8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0;c=r;r=r+448|0;d=c+384|0;e=c+368|0;f=c+328|0;g=c+440|0;h=c+288|0;j=c+272|0;l=c+256|0;m=c+216|0;n=c+176|0;o=c+424|0;p=c+128|0;q=c+88|0;s=c+48|0;t=c+432|0;u=c+144|0;v=c+32|0;w=c+416|0;y=c+16|0;z=c+408|0;A=c;B=c+400|0;if(!(Vf[k[k[b>>2]>>2]&1023](b)|0)){C=iDa(b,168,6592,0)|0;D=a+24|0;k[e>>2]=0;k[e+8>>2]=1;i[e+12>>0]=0;i[e+13>>0]=1;E=a+40|0;k[d>>2]=1;k[d+8>>2]=1;i[d+12>>0]=0;i[d+13>>0]=1;F=i[a+52>>0]|0;G=F<<24>>24==0;H=k[a+48>>2]|0;a:do if(G&(H|0)==1){I=(i[a+53>>0]|0)==0?k[E+4>>2]|0:E;if((k[I>>2]|0)==1){J=I;K=d;while(1){K=K+4|0;if((J|0)==(I|0))break;J=J+4|0;if((k[J>>2]|0)!=(k[K>>2]|0)){L=1;break a}}if(((i[a+36>>0]|0)==0?(k[a+32>>2]|0)==1:0)?(K=(i[a+37>>0]|0)==0?k[D+4>>2]|0:D,(k[K>>2]|0)==0):0){J=K;I=e;while(1){I=I+4|0;if((J|0)==(K|0))break;J=J+4|0;if((k[J>>2]|0)!=(k[I>>2]|0)){L=1;break a}}N=1;r=c;return N|0}else L=1}else L=1}else L=H;while(0);k[d>>2]=0;H=d+8|0;k[H>>2]=0;I=d+13|0;i[I>>0]=1;J=L>>>0>134217728?134217728:L;if(J>>>0>2){K=J>>>0>8?J:8;O=KBa(K<<2)|0;i[I>>0]=0;k[H>>2]=J;k[d>>2]=K;k[d+4>>2]=O;P=O}else{k[H>>2]=J;P=d}Dyb(P|0,((i[a+53>>0]|0)==0?k[E+4>>2]|0:E)|0,L<<2|0)|0;i[d+12>>0]=F;F=i[I>>0]|0;if(G&(k[H>>2]|0)==1)Q=(k[(F<<24>>24==0?k[d+4>>2]|0:d)>>2]|0)!=1;else Q=1;if(!(F<<24>>24))OBa(k[d+4>>2]|0);if(Q){N=0;r=c;return N|0}Q=C+28|0;F=(k[Q>>2]|0)==1&1;k[j>>2]=0;k[j+8>>2]=1;i[j+12>>0]=0;i[j+13>>0]=1;x=0;H=Ta(582,D|0,j|0)|0;j=x;x=0;if(j&1){j=Hc()|0;R=M;S=j;Sc(S|0)}do if(!H){if((k[Q>>2]|0)==1){k[p>>2]=0;j=p+8|0;k[j>>2]=0;G=p+13|0;i[G>>0]=1;I=k[a+32>>2]|0;L=I>>>0>134217728?134217728:I;if(L>>>0>2){E=L>>>0>8?L:8;P=KBa(E<<2)|0;i[G>>0]=0;k[j>>2]=L;k[p>>2]=E;k[p+4>>2]=P;T=P}else{k[j>>2]=L;T=p}Dyb(T|0,((i[a+37>>0]|0)==0?k[D+4>>2]|0:D)|0,I<<2|0)|0;i[p+12>>0]=i[a+36>>0]|0;k[o>>2]=p;k[s>>2]=1;k[s+32>>2]=1;I=(k[C+24>>2]|0)-F|0;U=f;V=s;W=U+40|0;do{k[U>>2]=k[V>>2];U=U+4|0;V=V+4|0}while((U|0)<(W|0));if((I|0)<0){x=0;xa(671,e|0,265832);L=x;x=0;if(L&1)X=58;else{k[e>>2]=47544;x=0;nb(96,e|0,265867,265975,711);x=0;L=Hc()|0;j=M;nCa(e);Y=j;Z=L}}else{HB(f,I,((I|0)<0)<<31>>31);U=q;V=f;W=U+40|0;do{k[U>>2]=k[V>>2];U=U+4|0;V=V+4|0}while((U|0)<(W|0));x=0;I=Ta(583,o|0,q|0)|0;L=x;x=0;if(!(L&1))if(!(i[G>>0]|0)){OBa(k[p+4>>2]|0);if(I)N=1;else break;r=c;return N|0}else{if(I)N=1;else break;r=c;return N|0}else X=58}if((X|0)==58){I=Hc()|0;Y=M;Z=I}if(i[G>>0]|0){R=Y;S=Z;Sc(S|0)}OBa(k[p+4>>2]|0);R=Y;S=Z;Sc(S|0)}}else{k[l>>2]=0;I=l+8|0;k[I>>2]=0;L=l+13|0;i[L>>0]=1;j=k[a+32>>2]|0;P=j>>>0>134217728?134217728:j;if(P>>>0>2){E=P>>>0>8?P:8;J=KBa(E<<2)|0;i[L>>0]=0;k[I>>2]=P;k[l>>2]=E;k[l+4>>2]=J;_=J}else{k[I>>2]=P;_=l}Dyb(_|0,((i[a+37>>0]|0)==0?k[D+4>>2]|0:D)|0,j<<2|0)|0;i[l+12>>0]=i[a+36>>0]|0;k[n>>2]=1;k[n+32>>2]=1;NC(n);j=256-(k[C+24>>2]|0)+F|0;U=h;V=n;W=U+40|0;do{k[U>>2]=k[V>>2];U=U+4|0;V=V+4|0}while((U|0)<(W|0));if((j|0)<0){x=0;xa(671,g|0,265832);G=x;x=0;if(G&1)X=44;else{k[g>>2]=47544;x=0;nb(96,g|0,265867,265975,711);x=0;G=Hc()|0;P=M;nCa(g);$=P;aa=G}}else{do if(j){G=Iyb(j|0,((j|0)<0)<<31>>31|0,5)|0;P=j&31;I=h+32|0;J=k[I>>2]|0;if(J>>>0<=G>>>0){k[I>>2]=1;k[h>>2]=0;break}E=((((k[h+(J+-1<<2)>>2]|0)>>>P|0)==0)<<31>>31)+(J-G)|0;if(!E){k[I>>2]=1;k[h>>2]=0;break}if(P){O=G+1|0;K=(k[h+(G<<2)>>2]|0)>>>P;k[h>>2]=K;if(O>>>0>>0){ba=32-P|0;ca=O;O=K;K=h;da=0;do{k[K>>2]=k[h+(ca<<2)>>2]<>2]|0)>>>P;K=h+(da<<2)|0;k[K>>2]=O}while(ca>>>0>>0)}}else{J=0;do{k[h+(J<<2)>>2]=k[h+(J+G<<2)>>2];J=J+1|0}while(J>>>0>>0)}k[I>>2]=E>>>0>8?8:E}while(0);U=m;V=h;W=U+40|0;do{k[U>>2]=k[V>>2];U=U+4|0;V=V+4|0}while((U|0)<(W|0));x=0;j=Ta(534,l|0,m|0)|0;J=x;x=0;if(J&1)X=44;else{if(!(i[L>>0]|0))OBa(k[l+4>>2]|0);if(j)break;else N=1;r=c;return N|0}}if((X|0)==44){j=Hc()|0;$=M;aa=j}if(i[L>>0]|0){R=$;S=aa;Sc(S|0)}OBa(k[l+4>>2]|0);R=$;S=aa;Sc(S|0)}while(0);N=0;r=c;return N|0}if((Vf[k[k[b>>2]>>2]&1023](b)|0)!=4){if((Vf[k[k[b>>2]>>2]&1023](b)|0)!=6){N=0;r=c;return N|0}aa=iDa(b,168,6656,0)|0;if(!aa)BBa();$=a+40|0;k[d>>2]=0;l=d+8|0;k[l>>2]=0;m=d+13|0;i[m>>0]=1;V=k[a+48>>2]|0;U=V>>>0>134217728?134217728:V;if(U>>>0>2){W=U>>>0>8?U:8;h=KBa(W<<2)|0;i[m>>0]=0;k[l>>2]=U;k[d>>2]=W;k[d+4>>2]=h;fa=h}else{k[l>>2]=U;fa=d}Dyb(fa|0,((i[a+53>>0]|0)==0?k[$+4>>2]|0:$)|0,V<<2|0)|0;V=i[a+52>>0]|0;i[d+12>>0]=V;$=i[m>>0]|0;if(V<<24>>24==0&(k[l>>2]|0)==1)ga=(k[($<<24>>24==0?k[d+4>>2]|0:d)>>2]|0)!=1;else ga=1;if(!($<<24>>24))OBa(k[d+4>>2]|0);if(ga){N=0;r=c;return N|0}ga=k[aa+24>>2]<<3;E8(B,a);aa=(ga|0)>=(k[(k[B>>2]|0)+24>>2]|0);ga=k[B+4>>2]|0;if(!ga){N=aa;r=c;return N|0}j0a(ga);N=aa;r=c;return N|0}D8(t,a);N=k[t>>2]|0;b:do if(!N){ha=0;ia=0}else{aa=a+24|0;k[y>>2]=1;k[y+8>>2]=1;i[y+12>>0]=0;ga=y+13|0;i[ga>>0]=1;k[z>>2]=k[N+28>>2];k[w>>2]=y;k[w+4>>2]=z;k[v>>2]=0;k[v+8>>2]=1;i[v+12>>0]=0;B=v+13|0;i[B>>0]=1;x=0;fb(184,v|0,w|0,d|0);$=x;x=0;c:do if(!($&1)){k[u>>2]=0;l=u+8|0;k[l>>2]=0;V=u+13|0;i[V>>0]=1;m=k[a+32>>2]|0;fa=m>>>0>134217728?134217728:m;do if(fa>>>0>2){U=fa>>>0>8?fa:8;x=0;h=Ba(563,U<<2|0)|0;W=x;x=0;if(W&1){W=Hc()|0;ja=M;ka=W;break}else{i[V>>0]=0;k[l>>2]=fa;k[u>>2]=U;k[u+4>>2]=h;la=h;X=71;break}}else{k[l>>2]=fa;la=u;X=71}while(0);d:do if((X|0)==71){Dyb(la|0,((i[a+37>>0]|0)==0?k[aa+4>>2]|0:aa)|0,m<<2|0)|0;i[u+12>>0]=i[a+36>>0]|0;fa=u+16|0;l=a+40|0;k[fa>>2]=0;E=u+24|0;k[E>>2]=0;I=u+29|0;i[I>>0]=1;h=k[a+48>>2]|0;U=h>>>0>134217728?134217728:h;do if(U>>>0>2){W=U>>>0>8?U:8;x=0;g=Ba(563,W<<2|0)|0;n=x;x=0;if(!(n&1)){i[I>>0]=0;k[E>>2]=U;k[fa>>2]=W;k[fa+4>>2]=g;ma=g;break}g=Hc()|0;W=M;if(i[V>>0]|0){ja=W;ka=g;break d}OBa(k[u+4>>2]|0);ja=W;ka=g;break d}else{k[E>>2]=U;ma=fa}while(0);Dyb(ma|0,((i[a+53>>0]|0)==0?k[l+4>>2]|0:l)|0,h<<2|0)|0;U=u+28|0;i[U>>0]=i[a+52>>0]|0;x=0;Ta(581,u|0,v|0)|0;g=x;x=0;if(g&1){g=Hc()|0;W=M;if(!(i[I>>0]|0))OBa(k[fa+4>>2]|0);if(i[V>>0]|0){ja=W;ka=g;break}OBa(k[u+4>>2]|0);ja=W;ka=g;break}if(!(i[B>>0]|0))OBa(k[v+4>>2]|0);if(!(i[ga>>0]|0))OBa(k[y+4>>2]|0);k[A>>2]=0;g=A+8|0;k[g>>2]=0;W=A+13|0;i[W>>0]=1;n=k[E>>2]|0;F=n>>>0>134217728?134217728:n;do if(F>>>0>2){C=F>>>0>8?F:8;x=0;D=Ba(563,C<<2|0)|0;_=x;x=0;if(_&1){_=Hc()|0;na=M;oa=_;break}else{i[W>>0]=0;k[g>>2]=F;k[A>>2]=C;k[A+4>>2]=D;pa=D;X=90;break}}else{k[g>>2]=F;pa=A;X=90}while(0);do if((X|0)==90){F=fa+4|0;Dyb(pa|0,((i[I>>0]|0)==0?k[F>>2]|0:fa)|0,n<<2|0)|0;E=i[U>>0]|0;i[A+12>>0]=E;h=i[W>>0]|0;if(E<<24>>24==0&(k[g>>2]|0)==1?(E=h<<24>>24==0,l=k[A+4>>2]|0,(k[(E?l:A)>>2]|0)==1):0){x=0;D=Ta(k[(k[N>>2]|0)+4>>2]|0,N|0,b|0)|0;C=x;x=0;if(C&1){C=Hc()|0;_=M;if(!E){na=_;oa=C;break}OBa(l);na=_;oa=C;break}else qa=D}else qa=0;if(!(h<<24>>24))OBa(k[A+4>>2]|0);if(!(i[I>>0]|0))OBa(k[F>>2]|0);if(!(i[V>>0]|0))OBa(k[u+4>>2]|0);ha=1;ia=qa;break b}while(0);if(!(i[I>>0]|0))OBa(k[fa+4>>2]|0);if(i[V>>0]|0){ra=na;sa=oa;break c}OBa(k[u+4>>2]|0);ra=na;sa=oa;break c}while(0);if(!(i[B>>0]|0)){OBa(k[v+4>>2]|0);ta=ja;ua=ka;X=104}else{ta=ja;ua=ka;X=104}}else{V=Hc()|0;m=M;if(!(i[B>>0]|0))OBa(k[v+4>>2]|0);ta=m;ua=V;X=104}while(0);if((X|0)==104)if(!(i[ga>>0]|0)){OBa(k[y+4>>2]|0);ra=ta;sa=ua}else{ra=ta;sa=ua}B=k[t+4>>2]|0;if(!B){R=ra;S=sa;Sc(S|0)}j0a(B);R=ra;S=sa;Sc(S|0)}while(0);S=k[t+4>>2]|0;if(!S){va=ha&ia;r=c;return va|0}j0a(S);va=ha&ia;r=c;return va|0}function D8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0;c=r;r=r+480|0;d=c+408|0;e=c+472|0;f=c+479|0;g=c+478|0;h=c+477|0;l=c+360|0;m=c+376|0;n=c+328|0;o=c+296|0;p=c+464|0;q=c+280|0;s=c+460|0;t=c+264|0;u=c+248|0;v=c+448|0;w=c+232|0;y=c+444|0;z=c+440|0;A=c+216|0;B=c+184|0;C=c+168|0;D=c+152|0;E=c+136|0;F=c+312|0;G=c+432|0;H=c+120|0;I=c+104|0;J=c+428|0;K=c+64|0;L=c+48|0;N=c+416|0;O=c+16|0;P=c;Q=b+24|0;k[l>>2]=0;k[l+8>>2]=1;i[l+12>>0]=0;i[l+13>>0]=1;x=0;b=Ta(584,Q|0,l|0)|0;l=x;x=0;if(l&1){l=Hc()|0;R=l;S=M;Sc(R|0)}iba(m,Q);a:do if(b){k[q>>2]=1;k[q+8>>2]=1;i[q+12>>0]=0;l=q+13|0;i[l>>0]=1;k[s>>2]=255;k[p>>2]=q;k[p+4>>2]=s;k[o>>2]=0;k[o+8>>2]=1;i[o+12>>0]=0;T=o+13|0;i[T>>0]=1;x=0;fb(184,o|0,p|0,c+476|0);U=x;x=0;do if(U&1){V=Hc()|0;W=M;if(!(i[T>>0]|0))OBa(k[o+4>>2]|0);X=V;Y=W}else{k[t>>2]=1;k[t+8>>2]=1;i[t+12>>0]=0;i[t+13>>0]=1;x=0;fb(287,n|0,o|0,t|0);W=x;x=0;if(W&1){W=Hc()|0;V=M;if(i[T>>0]|0){X=W;Y=V;break}OBa(k[o+4>>2]|0);X=W;Y=V;break}if(!(i[T>>0]|0))OBa(k[o+4>>2]|0);if(i[l>>0]|0){Z=19;break a}OBa(k[q+4>>2]|0);Z=19;break a}while(0);if(!(i[l>>0]|0)){OBa(k[q+4>>2]|0);_=X;$=Y}else{_=X;$=Y}}else{k[w>>2]=1;k[w+8>>2]=1;i[w+12>>0]=0;T=w+13|0;i[T>>0]=1;k[y>>2]=256;k[z>>2]=1;k[v>>2]=w;k[v+4>>2]=y;k[v+8>>2]=z;k[u>>2]=0;k[u+8>>2]=1;i[u+12>>0]=0;U=u+13|0;i[U>>0]=1;x=0;fb(288,u|0,v|0,h|0);V=x;x=0;do if(V&1){W=Hc()|0;aa=M;if(!(i[U>>0]|0))OBa(k[u+4>>2]|0);ba=W;ca=aa}else{k[A>>2]=1;k[A+8>>2]=1;i[A+12>>0]=0;i[A+13>>0]=1;x=0;fb(287,n|0,u|0,A|0);aa=x;x=0;if(aa&1){aa=Hc()|0;W=M;if(i[U>>0]|0){ba=aa;ca=W;break}OBa(k[u+4>>2]|0);ba=aa;ca=W;break}if(!(i[U>>0]|0))OBa(k[u+4>>2]|0);if(i[T>>0]|0){Z=19;break a}OBa(k[w+4>>2]|0);Z=19;break a}while(0);if(!(i[T>>0]|0)){OBa(k[w+4>>2]|0);_=ba;$=ca}else{_=ba;$=ca}}while(0);if((Z|0)==19){ca=C+8|0;ba=C+12|0;w=C+13|0;u=B+8|0;A=B+13|0;h=m+8|0;v=B+4|0;z=m+13|0;y=m+4|0;Y=m+12|0;X=B+12|0;q=B+16|0;o=m+16|0;t=B+24|0;p=B+29|0;s=m+24|0;U=q+4|0;V=m+29|0;l=o+4|0;W=m+28|0;aa=B+28|0;da=E+8|0;ea=E+12|0;fa=E+13|0;ga=D+8|0;ha=D+13|0;ia=D+4|0;ja=D+12|0;ka=0;while(1){k[C>>2]=256;k[ca>>2]=1;i[ba>>0]=0;i[w>>0]=1;k[B>>2]=0;k[u>>2]=0;i[A>>0]=1;la=k[h>>2]|0;ma=la>>>0>134217728?134217728:la;if(ma>>>0>2){na=ma>>>0>8?ma:8;x=0;oa=Ba(563,na<<2|0)|0;qa=x;x=0;if(qa&1){Z=65;break}i[A>>0]=0;k[u>>2]=ma;k[B>>2]=na;k[v>>2]=oa;ra=oa}else{k[u>>2]=ma;ra=B}Dyb(ra|0,((i[z>>0]|0)==0?k[y>>2]|0:m)|0,la<<2|0)|0;i[X>>0]=i[Y>>0]|0;k[q>>2]=0;k[t>>2]=0;i[p>>0]=1;la=k[s>>2]|0;ma=la>>>0>134217728?134217728:la;if(ma>>>0>2){oa=ma>>>0>8?ma:8;x=0;na=Ba(563,oa<<2|0)|0;qa=x;x=0;if(qa&1){Z=28;break}i[p>>0]=0;k[t>>2]=ma;k[q>>2]=oa;k[U>>2]=na;sa=na}else{k[t>>2]=ma;sa=q}Dyb(sa|0,((i[V>>0]|0)==0?k[l>>2]|0:o)|0,la<<2|0)|0;i[aa>>0]=i[W>>0]|0;x=0;Ta(581,B|0,C|0)|0;la=x;x=0;if(la&1){Z=31;break}x=0;la=Ta(585,n|0,B|0)|0;ma=x;x=0;if(ma&1){Z=67;break}if(!la){k[D>>2]=0;k[ga>>2]=0;i[ha>>0]=1;la=k[s>>2]|0;ma=la>>>0>134217728?134217728:la;if(ma>>>0>2){na=ma>>>0>8?ma:8;x=0;oa=Ba(563,na<<2|0)|0;qa=x;x=0;if(qa&1){Z=67;break}i[ha>>0]=0;k[ga>>2]=ma;k[D>>2]=na;k[ia>>2]=oa;ta=oa}else{k[ga>>2]=ma;ta=D}Dyb(ta|0,((i[V>>0]|0)==0?k[l>>2]|0:o)|0,la<<2|0)|0;la=i[W>>0]|0;i[ja>>0]=la;ma=i[ha>>0]|0;if(la<<24>>24==0&(k[ga>>2]|0)==1?(k[(ma<<24>>24==0?k[ia>>2]|0:D)>>2]|0)==1:0)ua=0;else ua=ka>>>0<256;if(!(ma<<24>>24)){OBa(k[ia>>2]|0);va=ua}else va=ua}else va=0;if(!(i[p>>0]|0))OBa(k[U>>2]|0);if(!(i[A>>0]|0))OBa(k[v>>2]|0);if(!va){wa=ka;Z=72;break}k[E>>2]=256;k[da>>2]=1;i[ea>>0]=0;i[fa>>0]=1;x=0;Ta(581,m|0,E|0)|0;ma=x;x=0;if(ma&1){Z=71;break}ka=ka+8|0}b:do if((Z|0)==28){ka=Hc()|0;E=M;if(!(i[A>>0]|0)){OBa(k[v>>2]|0);ya=E;za=ka;Z=66}else{ya=E;za=ka;Z=66}}else if((Z|0)==31){ka=Hc()|0;E=M;if(!(i[p>>0]|0))OBa(k[U>>2]|0);if(!(i[A>>0]|0)){OBa(k[v>>2]|0);ya=E;za=ka;Z=66}else{ya=E;za=ka;Z=66}}else if((Z|0)==65){ka=Hc()|0;ya=M;za=ka;Z=66}else if((Z|0)==67){ka=Hc()|0;E=M;if(!(i[p>>0]|0))OBa(k[U>>2]|0);if(!(i[A>>0]|0)){OBa(k[v>>2]|0);Aa=ka;Ca=E}else{Aa=ka;Ca=E}}else if((Z|0)==71){E=Hc()|0;Aa=E;Ca=M}else if((Z|0)==72){x=0;E=Ta(585,n|0,m|0)|0;ka=x;x=0;c:do if(!(ka&1)){d:do if(E){k[a>>2]=0;k[a+4>>2]=0}else{k[H>>2]=0;fa=H+8|0;k[fa>>2]=0;ea=H+13|0;i[ea>>0]=1;da=k[h>>2]|0;va=da>>>0>134217728?134217728:da;if(va>>>0>2){ua=va>>>0>8?va:8;x=0;ia=Ba(563,ua<<2|0)|0;D=x;x=0;if(D&1)break c;i[ea>>0]=0;k[fa>>2]=va;k[H>>2]=ua;k[H+4>>2]=ia;Da=ia}else{k[fa>>2]=va;Da=H}Dyb(Da|0,((i[z>>0]|0)==0?k[y>>2]|0:m)|0,da<<2|0)|0;i[H+12>>0]=i[Y>>0]|0;k[I>>2]=0;da=I+8|0;k[da>>2]=0;va=I+13|0;i[va>>0]=1;fa=k[s>>2]|0;ia=fa>>>0>134217728?134217728:fa;do if(ia>>>0>2){ua=ia>>>0>8?ia:8;x=0;D=Ba(563,ua<<2|0)|0;ga=x;x=0;if(ga&1){ga=Hc()|0;Ea=ga;Fa=M;break}else{i[va>>0]=0;k[da>>2]=ia;k[I>>2]=ua;k[I+4>>2]=D;Ga=D;Z=83;break}}else{k[da>>2]=ia;Ga=I;Z=83}while(0);do if((Z|0)==83){Dyb(Ga|0,((i[V>>0]|0)==0?k[l>>2]|0:o)|0,fa<<2|0)|0;i[I+12>>0]=i[W>>0]|0;k[G>>2]=H;k[G+4>>2]=I;k[F>>2]=0;ia=F+8|0;k[ia>>2]=1;da=F+12|0;i[da>>0]=0;D=F+13|0;i[D>>0]=1;x=0;fb(229,F|0,G|0,g|0);ua=x;x=0;if(ua&1){ua=Hc()|0;ga=M;if(!(i[D>>0]|0))OBa(k[F+4>>2]|0);if(i[va>>0]|0){Ea=ua;Fa=ga;break}OBa(k[I+4>>2]|0);Ea=ua;Fa=ga;break}if(!(i[va>>0]|0))OBa(k[I+4>>2]|0);if(!(i[ea>>0]|0))OBa(k[H+4>>2]|0);if(b?(k[J>>2]=1,ga=d,k[ga>>2]=F,k[ga+4>>2]=J,k[e>>2]=1,x=0,nb(126,F|0,d|0,e|0,f|0),ga=x,x=0,ga&1):0)Z=98;else Z=100;e:do if((Z|0)==100){k[K>>2]=1;k[K+32>>2]=1;NC(K);x=0;ga=Ta(534,F|0,K|0)|0;ua=x;x=0;if(ua&1)Z=98;else{do if(ga){k[a>>2]=0;k[a+4>>2]=0}else{k[L>>2]=0;ua=L+8|0;k[ua>>2]=0;ha=L+13|0;i[ha>>0]=1;ja=k[ia>>2]|0;ta=ja>>>0>134217728?134217728:ja;if(ta>>>0>2){B=ta>>>0>8?ta:8;x=0;C=Ba(563,B<<2|0)|0;aa=x;x=0;if(aa&1){Z=98;break e}i[ha>>0]=0;aa=L+4|0;k[ua>>2]=ta;k[L>>2]=B;k[aa>>2]=C;Ha=aa;Ia=C}else{k[ua>>2]=ta;Ha=L+4|0;Ia=L}Dyb(Ia|0,((i[D>>0]|0)==0?k[F+4>>2]|0:F)|0,ja<<2|0)|0;ja=L+12|0;i[ja>>0]=i[da>>0]|0;ta=0;while(1){C=j[ja>>1]|0;if((C&255)<<24>>24==0&(k[ua>>2]|0)==1?(aa=k[Ha>>2]|0,(k[((C&65535)<256?aa:L)>>2]|0)==0):0){Ja=aa;Ka=ta;break}x=0;fb(224,L|0,8,0);aa=x;x=0;if(aa&1){Z=124;break}else ta=ta+1|0}if((Z|0)==124){ta=Hc()|0;ua=M;if(i[ha>>0]|0){La=ta;Ma=ua;break e}OBa(k[Ha>>2]|0);La=ta;Ma=ua;break e}ua=Ka<<3;if(!(i[ha>>0]|0))OBa(Ja);x=0;fb(140,N|0,329672,0);ta=x;x=0;if(ta&1){Z=98;break e}x=0;pa(57,ua>>>0<257|0,N|0,808,250928,251586);ta=x;x=0;if(ta&1){ta=Hc()|0;ja=M;K2a(N);La=ta;Ma=ja;break e}K2a(N);ja=ua>>>0>>0?0:ua-wa|0;do if(b){x=0;xa(801,O|0,Q|0);ta=x;x=0;if(ta&1){Z=98;break e}k[P>>2]=1;k[P+8>>2]=1;i[P+12>>0]=0;i[P+13>>0]=1;x=0;ta=Ta(584,O|0,P|0)|0;aa=x;x=0;if(aa&1){aa=Hc()|0;C=M;if(!(i[O+29>>0]|0))OBa(k[O+16+4>>2]|0);if(i[O+13>>0]|0){La=aa;Ma=C;break e}OBa(k[O+4>>2]|0);La=aa;Ma=C;break e}C=ua>>>0>wa>>>0&ta;if(!(i[O+29>>0]|0))OBa(k[O+16+4>>2]|0);if(!(i[O+13>>0]|0)){OBa(k[O+4>>2]|0);if(!C){Na=ja;Oa=wa;break}}else if(!C){Na=ja;Oa=wa;break}Na=0;Oa=wa+8|0}else{Na=ja;Oa=wa}while(0);if(Oa>>>0>256|Na>>>0>256|(Na+Oa|0)>>>0>256){k[a>>2]=0;k[a+4>>2]=0;break}ja=(Na|Oa|0)==0;x=0;ua=Ba(563,48)|0;ha=x;x=0;if(ha&1){Z=98;break e}k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua>>2]=39172;ha=ua+12|0;x=0;nb(123,ha|0,(ja?0:Na)|0,(ja?8:Oa)|0,b&1|0);ja=x;x=0;if(ja&1){ja=Hc()|0;C=M;c0a(ua);OBa(ua);Pa=C;Qa=ja;Z=99;break e}ja=ha;ha=ua;i0a(ua);k[ua+16>>2]=ja;C=ua+20|0;ua=k[C>>2]|0;k[C>>2]=ha;if(ua)k0a(ua);k[a>>2]=ja;k[a+4>>2]=ha}while(0);if(!(i[D>>0]|0))OBa(k[F+4>>2]|0);break d}}while(0);if((Z|0)==98){da=Hc()|0;Pa=M;Qa=da;Z=99}if((Z|0)==99){La=Qa;Ma=Pa}if(i[D>>0]|0){Aa=La;Ca=Ma;break b}OBa(k[F+4>>2]|0);Aa=La;Ca=Ma;break b}while(0);if(i[ea>>0]|0){Aa=Ea;Ca=Fa;break b}OBa(k[H+4>>2]|0);Aa=Ea;Ca=Fa;break b}while(0);if(!(i[n+29>>0]|0))OBa(k[n+16+4>>2]|0);if(!(i[n+13>>0]|0))OBa(k[n+4>>2]|0);if(!(i[V>>0]|0))OBa(k[l>>2]|0);if(i[z>>0]|0){r=c;return}OBa(k[y>>2]|0);r=c;return}while(0);E=Hc()|0;Aa=E;Ca=M}while(0);if((Z|0)==66){Aa=za;Ca=ya}if(!(i[n+29>>0]|0))OBa(k[n+16+4>>2]|0);if(!(i[n+13>>0]|0)){OBa(k[n+4>>2]|0);_=Aa;$=Ca}else{_=Aa;$=Ca}}if(!(i[m+29>>0]|0))OBa(k[m+16+4>>2]|0);if(i[m+13>>0]|0){R=_;S=$;Sc(R|0)}OBa(k[m+4>>2]|0);R=_;S=$;Sc(R|0)}function E8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;c=r;r=r+128|0;d=c+72|0;e=c+108|0;f=c+96|0;g=c+56|0;h=c+92|0;l=c+88|0;m=c+16|0;n=c;o=b+40|0;k[d>>2]=0;p=d+8|0;k[p>>2]=0;q=d+13|0;i[q>>0]=1;s=k[b+48>>2]|0;t=s>>>0>134217728?134217728:s;if(t>>>0>2){u=t>>>0>8?t:8;v=KBa(u<<2)|0;i[q>>0]=0;k[p>>2]=t;k[d>>2]=u;k[d+4>>2]=v;w=v}else{k[p>>2]=t;w=d}Dyb(w|0,((i[b+53>>0]|0)==0?k[o+4>>2]|0:o)|0,s<<2|0)|0;s=i[b+52>>0]|0;i[d+12>>0]=s;o=i[q>>0]|0;if(s<<24>>24==0&(k[p>>2]|0)==1)y=(k[(o<<24>>24==0?k[d+4>>2]|0:d)>>2]|0)!=1;else y=1;if(!(o<<24>>24))OBa(k[d+4>>2]|0);q2a(f,251692,43);x=0;pa(57,y^1|0,f|0,765,250928,251736);y=x;x=0;if(y&1){y=Hc()|0;o=M;K2a(f);z=y;A=o;Sc(z|0)}K2a(f);f=b+24|0;k[g>>2]=0;o=g+8|0;k[o>>2]=0;y=g+13|0;i[y>>0]=1;p=k[b+32>>2]|0;s=p>>>0>134217728?134217728:p;if(s>>>0>2){q=s>>>0>8?s:8;w=KBa(q<<2)|0;i[y>>0]=0;k[o>>2]=s;k[g>>2]=q;k[g+4>>2]=w;B=w}else{k[o>>2]=s;B=g}Dyb(B|0,((i[b+37>>0]|0)==0?k[f+4>>2]|0:f)|0,p<<2|0)|0;p=i[b+36>>0]|0;b=g+12|0;i[b>>0]=p;if(p<<24>>24!=0?(k[h>>2]=0,k[l>>2]=1,k[d>>2]=h,k[d+4>>2]=g,k[d+8>>2]=l,k[e>>2]=1,x=0,nb(127,g|0,d|0,e|0,c+112|0),e=x,x=0,e&1):0)C=16;else C=17;a:do if((C|0)==17){k[m>>2]=1;k[m+32>>2]=1;NC(m);x=0;e=Ta(534,g|0,m|0)|0;d=x;x=0;if(d&1)C=16;else{b:do if(e){k[a>>2]=0;k[a+4>>2]=0}else{k[n>>2]=0;d=n+8|0;k[d>>2]=0;l=n+13|0;i[l>>0]=1;h=k[o>>2]|0;f=h>>>0>134217728?134217728:h;if(f>>>0>2){B=f>>>0>8?f:8;x=0;s=Ba(563,B<<2|0)|0;w=x;x=0;if(w&1){C=16;break a}i[l>>0]=0;w=n+4|0;k[d>>2]=f;k[n>>2]=B;k[w>>2]=s;D=w;E=s}else{k[d>>2]=f;D=n+4|0;E=n}Dyb(E|0,((i[y>>0]|0)==0?k[g+4>>2]|0:g)|0,h<<2|0)|0;h=n+12|0;i[h>>0]=i[b>>0]|0;f=0;while(1){s=j[h>>1]|0;if((s&255)<<24>>24==0&(k[d>>2]|0)==1?(w=k[D>>2]|0,(k[((s&65535)<256?w:n)>>2]|0)==0):0){F=w;G=f;C=28;break}x=0;fb(224,n|0,8,0);w=x;x=0;if(w&1){C=35;break}else f=f+1|0}do if((C|0)==28){x=0;f=Ba(563,44)|0;d=x;x=0;if(d&1){d=Hc()|0;H=M;I=d;break}k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=31848;d=f+12|0;x=0;fb(247,d|0,((G|0)==0?8:G<<3)|0,p&255|0);h=x;x=0;if(h&1){h=Hc()|0;w=M;c0a(f);OBa(f);H=w;I=h;break}h=d;d=f;i0a(f);k[f+16>>2]=h;w=f+20|0;f=k[w>>2]|0;k[w>>2]=d;if(f)k0a(f);k[a>>2]=h;k[a+4>>2]=d;if(i[l>>0]|0)break b;OBa(F);break b}else if((C|0)==35){d=Hc()|0;H=M;I=d}while(0);if(i[l>>0]|0){J=I;K=H;break a}OBa(k[D>>2]|0);J=I;K=H;break a}while(0);if(i[y>>0]|0){r=c;return}OBa(k[g+4>>2]|0);r=c;return}}while(0);if((C|0)==16){C=Hc()|0;J=C;K=M}if(i[y>>0]|0){z=J;A=K;Sc(z|0)}OBa(k[g+4>>2]|0);z=J;A=K;Sc(z|0)}function F8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;Tf[k[(k[a>>2]|0)+64>>2]&2047](d,a);a=k[d>>2]|0;if(a){x=0;e=Ta(k[(k[a>>2]|0)+8>>2]|0,a|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;a=k[d+4>>2]|0;if(!a)Sc(b|0);j0a(a);Sc(b|0)}else f=e}else f=0;e=k[d+4>>2]|0;if(!e){r=c;return f|0}j0a(e);r=c;return f|0}function G8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;d=r;r=r+176|0;e=d+144|0;f=d+172|0;g=d+128|0;h=d+96|0;l=d+80|0;m=d+168|0;n=d+64|0;o=d+32|0;p=d;q=d+160|0;k[h>>2]=0;s=h+8|0;k[s>>2]=1;t=h+12|0;i[t>>0]=0;u=h+13|0;i[u>>0]=1;v=h+16|0;k[v>>2]=1;w=h+24|0;k[w>>2]=1;y=h+28|0;i[y>>0]=0;z=h+29|0;i[z>>0]=1;a:do switch(c|0){case 46:{A=b+40|0;k[g>>2]=0;B=g+8|0;k[B>>2]=0;C=g+13|0;i[C>>0]=1;D=k[b+48>>2]|0;E=D>>>0>134217728?134217728:D;if(E>>>0>2){F=E>>>0>8?E:8;x=0;G=Ba(563,F<<2|0)|0;H=x;x=0;if(H&1){I=12;break a}i[C>>0]=0;k[B>>2]=E;k[g>>2]=F;k[g+4>>2]=G;J=G}else{k[B>>2]=E;J=g}Dyb(J|0,((i[b+53>>0]|0)==0?k[A+4>>2]|0:A)|0,D<<2|0)|0;D=i[b+52>>0]|0;i[g+12>>0]=D;A=i[C>>0]|0;if(D<<24>>24==0&(k[B>>2]|0)==1)K=(k[(A<<24>>24==0?k[g+4>>2]|0:g)>>2]|0)!=1;else K=1;if(!(A<<24>>24))OBa(k[g+4>>2]|0);if(K){k[a>>2]=0;k[a+4>>2]=0;I=73;break a}A=b+24|0;k[n>>2]=0;B=n+8|0;k[B>>2]=0;D=n+13|0;i[D>>0]=1;C=k[b+32>>2]|0;E=C>>>0>134217728?134217728:C;if(E>>>0>2){G=E>>>0>8?E:8;x=0;F=Ba(563,G<<2|0)|0;H=x;x=0;if(H&1){I=12;break a}i[D>>0]=0;k[B>>2]=E;k[n>>2]=G;k[n+4>>2]=F;L=F}else{k[B>>2]=E;L=n}Dyb(L|0,((i[b+37>>0]|0)==0?k[A+4>>2]|0:A)|0,C<<2|0)|0;i[n+12>>0]=i[b+36>>0]|0;k[m>>2]=n;k[l>>2]=0;k[l+8>>2]=1;i[l+12>>0]=0;C=l+13|0;i[C>>0]=1;x=0;fb(289,l|0,m|0,f|0);A=x;x=0;do if(A&1){E=Hc()|0;B=M;if(!(i[C>>0]|0))OBa(k[l+4>>2]|0);N=B;O=E}else{k[e>>2]=1;k[e+8>>2]=1;i[e+12>>0]=0;E=e+13|0;i[E>>0]=1;x=0;Fa(137,h|0,l|0,e|0)|0;B=x;x=0;if(B&1){B=Hc()|0;F=M;if(!(i[E>>0]|0))OBa(k[e+4>>2]|0);if(i[C>>0]|0){N=F;O=B;break}OBa(k[l+4>>2]|0);N=F;O=B;break}if(!(i[E>>0]|0))OBa(k[e+4>>2]|0);if(!(i[C>>0]|0))OBa(k[l+4>>2]|0);if(i[D>>0]|0){I=70;break a}OBa(k[n+4>>2]|0);I=70;break a}while(0);if(!(i[D>>0]|0)){OBa(k[n+4>>2]|0);P=N;Q=O}else{P=N;Q=O}break}case 33:{C=b+24|0;k[o>>2]=0;A=o+8|0;k[A>>2]=0;E=o+13|0;i[E>>0]=1;B=k[b+32>>2]|0;F=B>>>0>134217728?134217728:B;if(F>>>0>2){G=F>>>0>8?F:8;x=0;H=Ba(563,G<<2|0)|0;R=x;x=0;if(R&1){I=12;break a}i[E>>0]=0;k[A>>2]=F;k[o>>2]=G;k[o+4>>2]=H;S=H}else{k[A>>2]=F;S=o}Dyb(S|0,((i[b+37>>0]|0)==0?k[C+4>>2]|0:C)|0,B<<2|0)|0;B=o+12|0;i[B>>0]=i[b+36>>0]|0;C=o+16|0;F=b+40|0;k[C>>2]=0;H=o+24|0;k[H>>2]=0;G=o+29|0;i[G>>0]=1;R=k[b+48>>2]|0;T=R>>>0>134217728?134217728:R;do if(T>>>0>2){U=T>>>0>8?T:8;x=0;V=Ba(563,U<<2|0)|0;W=x;x=0;if(!(W&1)){i[G>>0]=0;k[H>>2]=T;k[C>>2]=U;k[C+4>>2]=V;X=V;break}V=Hc()|0;U=M;if(i[E>>0]|0){Y=U;Z=V;I=13;break a}OBa(k[o+4>>2]|0);Y=U;Z=V;I=13;break a}else{k[H>>2]=T;X=C}while(0);Dyb(X|0,((i[b+53>>0]|0)==0?k[F+4>>2]|0:F)|0,R<<2|0)|0;T=i[b+52>>0]|0;i[o+28>>0]=T;D=k[A>>2]|0;k[s>>2]=D;V=j[B>>1]|0;i[t>>0]=V;U=(V&65535)>>>8&255;i[u>>0]=U;if(U<<24>>24){Dyb(h|0,o|0,D<<2|0)|0;if(!(i[z>>0]|0))OBa(k[v+4>>2]|0)}else{D=o;U=k[D+4>>2]|0;V=h;k[V>>2]=k[D>>2];k[V+4>>2]=U;k[A>>2]=0;i[E>>0]=1}U=k[H>>2]|0;k[w>>2]=U;i[y>>0]=T;T=i[G>>0]|0;i[z>>0]=T;if(!(T<<24>>24)){T=C;V=k[T+4>>2]|0;D=v;k[D>>2]=k[T>>2];k[D+4>>2]=V;k[H>>2]=0;i[G>>0]=1;I=70;break a}else{Dyb(v|0,C|0,U<<2|0)|0;I=70;break a}break}case 34:{x=0;xa(802,p|0,b+24|0);U=x;x=0;if(!(U&1)){if(!(i[u>>0]|0))OBa(k[h+4>>2]|0);U=p+8|0;V=k[U>>2]|0;k[s>>2]=V;D=j[p+12>>1]|0;i[t>>0]=D;T=p+13|0;W=(D&65535)>>>8&255;i[u>>0]=W;if(!(W<<24>>24)){W=p;D=k[W+4>>2]|0;_=h;k[_>>2]=k[W>>2];k[_+4>>2]=D;k[U>>2]=0;i[T>>0]=1}else Dyb(h|0,p|0,V<<2|0)|0;V=p+16|0;if(!(i[z>>0]|0))OBa(k[v+4>>2]|0);U=p+24|0;D=k[U>>2]|0;k[w>>2]=D;_=j[p+28>>1]|0;i[y>>0]=_;W=(_&65535)>>>8&255;i[z>>0]=W;if(!(W<<24>>24)){W=V;_=k[W+4>>2]|0;$=v;k[$>>2]=k[W>>2];k[$+4>>2]=_;k[U>>2]=0;i[p+29>>0]=1}else Dyb(v|0,V|0,D<<2|0)|0;if(!(i[T>>0]|0)){OBa(k[p+4>>2]|0);I=70}else I=70}else I=12;break}case 121:{k[a>>2]=k[b+4>>2];T=a+4|0;D=k[b+8>>2]|0;if(D){V=l0a(D)|0;k[T>>2]=V;if(V){I=73;break a}}else k[T>>2]=0;T=Rd(4)|0;k[T>>2]=70084;x=0;fb(149,T|0,17384,1289);x=0;I=12;break}default:{k[a>>2]=0;k[a+4>>2]=0;I=73}}while(0);if((I|0)==70){x=0;xa(795,q|0,h|0);b=x;x=0;if(!(b&1)){k[a>>2]=k[q>>2];b=q+4|0;k[a+4>>2]=k[b>>2];k[q>>2]=0;k[b>>2]=0;if(!(i[z>>0]|0)){OBa(k[v+4>>2]|0);I=73}else I=73}else I=12}if((I|0)==12){b=Hc()|0;Y=M;Z=b;I=13}else if((I|0)==73){if(i[u>>0]|0){r=d;return}OBa(k[h+4>>2]|0);r=d;return}if((I|0)==13){P=Y;Q=Z}if(!(i[z>>0]|0))OBa(k[v+4>>2]|0);if(i[u>>0]|0)Sc(Q|0);OBa(k[h+4>>2]|0);Sc(Q|0)}function H8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0;e=r;r=r+944|0;f=e+864|0;g=e+848|0;h=e+929|0;l=e+832|0;m=e+816|0;n=e+928|0;o=e+800|0;p=e+784|0;q=e+768|0;s=e+752|0;t=e+736|0;u=e+920|0;v=e+912|0;w=e+904|0;y=e+640|0;z=e+720|0;A=e+704|0;B=e+688|0;C=e+672|0;D=e+592|0;E=e+576|0;F=e+544|0;G=e+512|0;H=e+496|0;I=e+464|0;J=e+432|0;K=e+400|0;L=e+368|0;N=e+608|0;O=e+336|0;P=e+304|0;Q=e+288|0;R=e+888|0;S=e+272|0;T=e+256|0;U=e+240|0;V=e+224|0;W=e+208|0;X=e+176|0;Y=e+160|0;Z=e+896|0;_=e+144|0;$=e+112|0;aa=e+560|0;ba=e+96|0;ca=e+528|0;da=e+80|0;ea=e+64|0;fa=e+32|0;ga=e;ha=e+880|0;ia=k[d>>2]|0;if((Vf[k[k[ia>>2]>>2]&1023](ia)|0)!=0?(ia=k[d>>2]|0,(Vf[k[k[ia>>2]>>2]&1023](ia)|0)!=4):0){ia=k[d>>2]|0;ja=Vf[k[k[ia>>2]>>2]&1023](ia)|0;if((ja|0)!=(Vf[k[k[b>>2]>>2]&1023](b)|0)){k[a>>2]=0;k[a+4>>2]=0;r=e;return}ja=iDa(k[d>>2]|0,168,6624,0)|0;if(!ja)BBa();if((c+-39|0)>>>0<6){Tf[k[(k[b>>2]|0)+64>>2]&2047](v,b);x=0;xa(k[(k[ja>>2]|0)+64>>2]|0,w|0,ja|0);ia=x;x=0;do if(ia&1){ka=Hc()|0;la=ka;ma=M}else{ka=k[v>>2]|0;if((ka|0)!=0?(k[w>>2]|0)!=0:0){x=0;nb(k[(k[ka>>2]|0)+16>>2]|0,a|0,ka|0,c|0,w|0);ka=x;x=0;if(ka&1){ka=Hc()|0;na=M;oa=k[w+4>>2]|0;if(!oa){la=ka;ma=na;break}j0a(oa);la=ka;ma=na;break}}else{k[a>>2]=0;k[a+4>>2]=0}na=k[w+4>>2]|0;if(na)j0a(na);na=k[v+4>>2]|0;if(na)j0a(na);r=e;return}while(0);w=k[v+4>>2]|0;if(!w){pa=la;qa=ma;Sc(pa|0)}j0a(w);pa=la;qa=ma;Sc(pa|0)}k[y>>2]=0;ma=y+8|0;k[ma>>2]=1;la=y+12|0;i[la>>0]=0;w=y+13|0;i[w>>0]=1;v=y+16|0;k[v>>2]=1;ia=y+24|0;k[ia>>2]=1;na=y+28|0;i[na>>0]=0;ka=y+29|0;i[ka>>0]=1;oa=b+40|0;k[t>>2]=0;ra=t+8|0;k[ra>>2]=0;sa=t+13|0;i[sa>>0]=1;ta=b+48|0;ua=k[ta>>2]|0;wa=ua>>>0>134217728?134217728:ua;if(wa>>>0>2){ya=wa>>>0>8?wa:8;x=0;za=Ba(563,ya<<2|0)|0;Aa=x;x=0;if(Aa&1)Ca=50;else{i[sa>>0]=0;k[ra>>2]=wa;k[t>>2]=ya;k[t+4>>2]=za;Da=za;Ca=35}}else{k[ra>>2]=wa;Da=t;Ca=35}a:do if((Ca|0)==35){wa=b+53|0;za=oa+4|0;Dyb(Da|0,((i[wa>>0]|0)==0?k[za>>2]|0:oa)|0,ua<<2|0)|0;ya=b+52|0;Aa=i[ya>>0]|0;i[t+12>>0]=Aa;Ea=i[sa>>0]|0;if(Aa<<24>>24==0&(k[ra>>2]|0)==1)Ga=(k[(Ea<<24>>24==0?k[t+4>>2]|0:t)>>2]|0)!=1;else Ga=1;if(!(Ea<<24>>24))OBa(k[t+4>>2]|0);if(Ga)Ha=1;else{Ea=ja+40|0;k[s>>2]=0;Aa=s+8|0;k[Aa>>2]=0;Ia=s+13|0;i[Ia>>0]=1;Ja=k[ja+48>>2]|0;Ka=Ja>>>0>134217728?134217728:Ja;if(Ka>>>0>2){La=Ka>>>0>8?Ka:8;x=0;Ma=Ba(563,La<<2|0)|0;Na=x;x=0;if(Na&1){Ca=50;break}i[Ia>>0]=0;k[Aa>>2]=Ka;k[s>>2]=La;k[s+4>>2]=Ma;Oa=Ma}else{k[Aa>>2]=Ka;Oa=s}Dyb(Oa|0,((i[ja+53>>0]|0)==0?k[ja+44>>2]|0:Ea)|0,Ja<<2|0)|0;Ja=i[ja+52>>0]|0;i[s+12>>0]=Ja;Ea=i[Ia>>0]|0;if(Ja<<24>>24==0&(k[Aa>>2]|0)==1)Pa=(k[(Ea<<24>>24==0?k[s+4>>2]|0:s)>>2]|0)!=1;else Pa=1;if(!(Ea<<24>>24))OBa(k[s+4>>2]|0);Ha=Pa}b:do switch(c|0){case 27:{if(Ha){k[a>>2]=0;k[a+4>>2]=0;break b}Ea=b+24|0;k[A>>2]=0;Aa=A+8|0;k[Aa>>2]=0;Ja=A+13|0;i[Ja>>0]=1;Ia=k[b+32>>2]|0;Ka=Ia>>>0>134217728?134217728:Ia;if(Ka>>>0>2){Ma=Ka>>>0>8?Ka:8;x=0;La=Ba(563,Ma<<2|0)|0;Na=x;x=0;if(Na&1){Ca=50;break a}i[Ja>>0]=0;k[Aa>>2]=Ka;k[A>>2]=Ma;k[A+4>>2]=La;Qa=La}else{k[Aa>>2]=Ka;Qa=A}Dyb(Qa|0,((i[b+37>>0]|0)==0?k[Ea+4>>2]|0:Ea)|0,Ia<<2|0)|0;i[A+12>>0]=i[b+36>>0]|0;Ia=ja+24|0;k[B>>2]=0;Ea=B+8|0;k[Ea>>2]=0;Ka=B+13|0;i[Ka>>0]=1;Aa=k[ja+32>>2]|0;La=Aa>>>0>134217728?134217728:Aa;do if(La>>>0>2){Ma=La>>>0>8?La:8;x=0;Na=Ba(563,Ma<<2|0)|0;Ra=x;x=0;if(Ra&1){Ra=Hc()|0;Sa=Ra;Ua=M;break}else{i[Ka>>0]=0;k[Ea>>2]=La;k[B>>2]=Ma;k[B+4>>2]=Na;Va=Na;Ca=62;break}}else{k[Ea>>2]=La;Va=B;Ca=62}while(0);if((Ca|0)==62){Dyb(Va|0,((i[ja+37>>0]|0)==0?k[ja+28>>2]|0:Ia)|0,Aa<<2|0)|0;i[B+12>>0]=i[ja+36>>0]|0;k[z>>2]=0;k[z+8>>2]=1;i[z+12>>0]=0;La=z+13|0;i[La>>0]=1;x=0;fb(290,z|0,A|0,B|0);Ea=x;x=0;do if(Ea&1){Na=Hc()|0;Ma=M;if(!(i[La>>0]|0))OBa(k[z+4>>2]|0);Wa=Na;Xa=Ma}else{k[q>>2]=1;k[q+8>>2]=1;i[q+12>>0]=0;Ma=q+13|0;i[Ma>>0]=1;x=0;Fa(137,y|0,z|0,q|0)|0;Na=x;x=0;if(Na&1){Na=Hc()|0;Ra=M;if(!(i[Ma>>0]|0))OBa(k[q+4>>2]|0);if(i[La>>0]|0){Wa=Na;Xa=Ra;break}OBa(k[z+4>>2]|0);Wa=Na;Xa=Ra;break}if(!(i[Ma>>0]|0))OBa(k[q+4>>2]|0);if(!(i[La>>0]|0))OBa(k[z+4>>2]|0);if(!(i[Ka>>0]|0))OBa(k[B+4>>2]|0);if(i[Ja>>0]|0){Ca=519;break b}OBa(k[A+4>>2]|0);Ca=519;break b}while(0);if(!(i[Ka>>0]|0)){OBa(k[B+4>>2]|0);Sa=Wa;Ua=Xa}else{Sa=Wa;Ua=Xa}}if(i[Ja>>0]|0){Ya=Sa;Za=Ua;break a}OBa(k[A+4>>2]|0);Ya=Sa;Za=Ua;break a;break}case 28:{if(Ha){k[a>>2]=0;k[a+4>>2]=0;break b}La=b+24|0;k[D>>2]=0;Ea=D+8|0;k[Ea>>2]=0;Aa=D+13|0;i[Aa>>0]=1;Ia=k[b+32>>2]|0;Ma=Ia>>>0>134217728?134217728:Ia;if(Ma>>>0>2){Ra=Ma>>>0>8?Ma:8;x=0;Na=Ba(563,Ra<<2|0)|0;_a=x;x=0;if(_a&1){Ca=50;break a}i[Aa>>0]=0;k[Ea>>2]=Ma;k[D>>2]=Ra;k[D+4>>2]=Na;$a=Na}else{k[Ea>>2]=Ma;$a=D}Dyb($a|0,((i[b+37>>0]|0)==0?k[La+4>>2]|0:La)|0,Ia<<2|0)|0;i[D+12>>0]=i[b+36>>0]|0;Ia=ja+24|0;k[E>>2]=0;La=E+8|0;k[La>>2]=0;Ma=E+13|0;i[Ma>>0]=1;Ea=k[ja+32>>2]|0;Na=Ea>>>0>134217728?134217728:Ea;do if(Na>>>0>2){Ra=Na>>>0>8?Na:8;x=0;_a=Ba(563,Ra<<2|0)|0;ab=x;x=0;if(ab&1){ab=Hc()|0;bb=ab;cb=M;break}else{i[Ma>>0]=0;k[La>>2]=Na;k[E>>2]=Ra;k[E+4>>2]=_a;db=_a;Ca=94;break}}else{k[La>>2]=Na;db=E;Ca=94}while(0);if((Ca|0)==94){Dyb(db|0,((i[ja+37>>0]|0)==0?k[ja+28>>2]|0:Ia)|0,Ea<<2|0)|0;i[E+12>>0]=i[ja+36>>0]|0;k[C>>2]=0;k[C+8>>2]=1;i[C+12>>0]=0;Na=C+13|0;i[Na>>0]=1;x=0;fb(291,C|0,D|0,E|0);La=x;x=0;do if(La&1){Ja=Hc()|0;Ka=M;if(!(i[Na>>0]|0))OBa(k[C+4>>2]|0);eb=Ja;gb=Ka}else{k[p>>2]=1;k[p+8>>2]=1;i[p+12>>0]=0;Ka=p+13|0;i[Ka>>0]=1;x=0;Fa(137,y|0,C|0,p|0)|0;Ja=x;x=0;if(Ja&1){Ja=Hc()|0;_a=M;if(!(i[Ka>>0]|0))OBa(k[p+4>>2]|0);if(i[Na>>0]|0){eb=Ja;gb=_a;break}OBa(k[C+4>>2]|0);eb=Ja;gb=_a;break}if(!(i[Ka>>0]|0))OBa(k[p+4>>2]|0);if(!(i[Na>>0]|0))OBa(k[C+4>>2]|0);if(!(i[Ma>>0]|0))OBa(k[E+4>>2]|0);if(i[Aa>>0]|0){Ca=519;break b}OBa(k[D+4>>2]|0);Ca=519;break b}while(0);if(!(i[Ma>>0]|0)){OBa(k[E+4>>2]|0);bb=eb;cb=gb}else{bb=eb;cb=gb}}if(i[Aa>>0]|0){Ya=bb;Za=cb;break a}OBa(k[D+4>>2]|0);Ya=bb;Za=cb;break a;break}case 29:{if(Ha){k[a>>2]=0;k[a+4>>2]=0;break b}Na=b+24|0;k[G>>2]=0;La=G+8|0;k[La>>2]=0;Ea=G+13|0;i[Ea>>0]=1;Ia=k[b+32>>2]|0;Ka=Ia>>>0>134217728?134217728:Ia;if(Ka>>>0>2){_a=Ka>>>0>8?Ka:8;x=0;Ja=Ba(563,_a<<2|0)|0;Ra=x;x=0;if(Ra&1){Ca=50;break a}i[Ea>>0]=0;k[La>>2]=Ka;k[G>>2]=_a;k[G+4>>2]=Ja;hb=Ja}else{k[La>>2]=Ka;hb=G}Dyb(hb|0,((i[b+37>>0]|0)==0?k[Na+4>>2]|0:Na)|0,Ia<<2|0)|0;i[G+12>>0]=i[b+36>>0]|0;Ia=ja+24|0;k[H>>2]=0;Na=H+8|0;k[Na>>2]=0;Ka=H+13|0;i[Ka>>0]=1;La=k[ja+32>>2]|0;Ja=La>>>0>134217728?134217728:La;do if(Ja>>>0>2){_a=Ja>>>0>8?Ja:8;x=0;Ra=Ba(563,_a<<2|0)|0;ab=x;x=0;if(ab&1){ab=Hc()|0;ib=ab;jb=M;break}else{i[Ka>>0]=0;k[Na>>2]=Ja;k[H>>2]=_a;k[H+4>>2]=Ra;kb=Ra;Ca=126;break}}else{k[Na>>2]=Ja;kb=H;Ca=126}while(0);if((Ca|0)==126){Dyb(kb|0,((i[ja+37>>0]|0)==0?k[ja+28>>2]|0:Ia)|0,La<<2|0)|0;i[H+12>>0]=i[ja+36>>0]|0;k[F>>2]=0;k[F+8>>2]=1;i[F+12>>0]=0;Ja=F+13|0;i[Ja>>0]=1;x=0;fb(292,F|0,G|0,H|0);Na=x;x=0;do if(Na&1){Aa=Hc()|0;Ma=M;if(!(i[Ja>>0]|0))OBa(k[F+4>>2]|0);lb=Aa;mb=Ma}else{k[o>>2]=1;k[o+8>>2]=1;i[o+12>>0]=0;Ma=o+13|0;i[Ma>>0]=1;x=0;Fa(137,y|0,F|0,o|0)|0;Aa=x;x=0;if(Aa&1){Aa=Hc()|0;Ra=M;if(!(i[Ma>>0]|0))OBa(k[o+4>>2]|0);if(i[Ja>>0]|0){lb=Aa;mb=Ra;break}OBa(k[F+4>>2]|0);lb=Aa;mb=Ra;break}if(!(i[Ma>>0]|0))OBa(k[o+4>>2]|0);if(!(i[Ja>>0]|0))OBa(k[F+4>>2]|0);if(!(i[Ka>>0]|0))OBa(k[H+4>>2]|0);if(i[Ea>>0]|0){Ca=519;break b}OBa(k[G+4>>2]|0);Ca=519;break b}while(0);if(!(i[Ka>>0]|0)){OBa(k[H+4>>2]|0);ib=lb;jb=mb}else{ib=lb;jb=mb}}if(i[Ea>>0]|0){Ya=ib;Za=jb;break a}OBa(k[G+4>>2]|0);Ya=ib;Za=jb;break a;break}case 33:{Ja=b+24|0;Na=ja+24|0;k[I>>2]=0;La=I+8|0;k[La>>2]=0;Ia=I+13|0;i[Ia>>0]=1;Ma=k[b+32>>2]|0;Ra=Ma>>>0>134217728?134217728:Ma;if(Ra>>>0>2){Aa=Ra>>>0>8?Ra:8;x=0;_a=Ba(563,Aa<<2|0)|0;ab=x;x=0;if(ab&1){Ca=50;break a}i[Ia>>0]=0;k[La>>2]=Ra;k[I>>2]=Aa;k[I+4>>2]=_a;ob=_a}else{k[La>>2]=Ra;ob=I}Dyb(ob|0,((i[b+37>>0]|0)==0?k[Ja+4>>2]|0:Ja)|0,Ma<<2|0)|0;Ma=I+12|0;i[Ma>>0]=i[b+36>>0]|0;Ja=I+16|0;k[Ja>>2]=0;Ra=I+24|0;k[Ra>>2]=0;_a=I+29|0;i[_a>>0]=1;Aa=k[ta>>2]|0;ab=Aa>>>0>134217728?134217728:Aa;do if(ab>>>0>2){pb=ab>>>0>8?ab:8;x=0;qb=Ba(563,pb<<2|0)|0;rb=x;x=0;if(!(rb&1)){i[_a>>0]=0;k[Ra>>2]=ab;k[Ja>>2]=pb;k[Ja+4>>2]=qb;sb=qb;break}qb=Hc()|0;pb=M;if(i[Ia>>0]|0){tb=pb;ub=qb;Ca=51;break a}OBa(k[I+4>>2]|0);tb=pb;ub=qb;Ca=51;break a}else{k[Ra>>2]=ab;sb=Ja}while(0);Dyb(sb|0,((i[wa>>0]|0)==0?k[za>>2]|0:oa)|0,Aa<<2|0)|0;ab=I+28|0;i[ab>>0]=i[ya>>0]|0;x=0;Ta(580,I|0,Na|0)|0;Ea=x;x=0;if(Ea&1){Ea=Hc()|0;Ka=M;if(!(i[_a>>0]|0))OBa(k[Ja+4>>2]|0);if(i[Ia>>0]|0){tb=Ka;ub=Ea;Ca=51;break a}OBa(k[I+4>>2]|0);tb=Ka;ub=Ea;Ca=51;break a}if(!(i[w>>0]|0))OBa(k[y+4>>2]|0);Ea=k[La>>2]|0;k[ma>>2]=Ea;Ka=j[Ma>>1]|0;i[la>>0]=Ka;qb=(Ka&65535)>>>8&255;i[w>>0]=qb;if(!(qb<<24>>24)){qb=I;Ka=k[qb+4>>2]|0;pb=y;k[pb>>2]=k[qb>>2];k[pb+4>>2]=Ka;k[La>>2]=0;i[Ia>>0]=1}else Dyb(y|0,I|0,Ea<<2|0)|0;if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);Ea=k[Ra>>2]|0;k[ia>>2]=Ea;Ka=j[ab>>1]|0;i[na>>0]=Ka;ab=(Ka&65535)>>>8&255;i[ka>>0]=ab;if(!(ab<<24>>24)){ab=Ja;Ka=k[ab+4>>2]|0;pb=v;k[pb>>2]=k[ab>>2];k[pb+4>>2]=Ka;k[Ra>>2]=0;i[_a>>0]=1}else Dyb(v|0,Ja|0,Ea<<2|0)|0;if(!(i[Ia>>0]|0)){OBa(k[I+4>>2]|0);Ca=519}else Ca=519;break}case 34:{Ea=b+24|0;Ka=ja+24|0;k[J>>2]=0;pb=J+8|0;k[pb>>2]=0;ab=J+13|0;i[ab>>0]=1;qb=k[b+32>>2]|0;rb=qb>>>0>134217728?134217728:qb;if(rb>>>0>2){vb=rb>>>0>8?rb:8;x=0;wb=Ba(563,vb<<2|0)|0;xb=x;x=0;if(xb&1){Ca=50;break a}i[ab>>0]=0;k[pb>>2]=rb;k[J>>2]=vb;k[J+4>>2]=wb;yb=wb}else{k[pb>>2]=rb;yb=J}Dyb(yb|0,((i[b+37>>0]|0)==0?k[Ea+4>>2]|0:Ea)|0,qb<<2|0)|0;qb=J+12|0;i[qb>>0]=i[b+36>>0]|0;Ea=J+16|0;k[Ea>>2]=0;rb=J+24|0;k[rb>>2]=0;wb=J+29|0;i[wb>>0]=1;vb=k[ta>>2]|0;xb=vb>>>0>134217728?134217728:vb;do if(xb>>>0>2){zb=xb>>>0>8?xb:8;x=0;Ab=Ba(563,zb<<2|0)|0;Bb=x;x=0;if(!(Bb&1)){i[wb>>0]=0;k[rb>>2]=xb;k[Ea>>2]=zb;k[Ea+4>>2]=Ab;Cb=Ab;break}Ab=Hc()|0;zb=M;if(i[ab>>0]|0){tb=zb;ub=Ab;Ca=51;break a}OBa(k[J+4>>2]|0);tb=zb;ub=Ab;Ca=51;break a}else{k[rb>>2]=xb;Cb=Ea}while(0);Dyb(Cb|0,((i[wa>>0]|0)==0?k[za>>2]|0:oa)|0,vb<<2|0)|0;xb=J+28|0;i[xb>>0]=i[ya>>0]|0;x=0;Ta(586,J|0,Ka|0)|0;Ia=x;x=0;if(Ia&1){Ia=Hc()|0;Ja=M;if(!(i[wb>>0]|0))OBa(k[Ea+4>>2]|0);if(i[ab>>0]|0){tb=Ja;ub=Ia;Ca=51;break a}OBa(k[J+4>>2]|0);tb=Ja;ub=Ia;Ca=51;break a}if(!(i[w>>0]|0))OBa(k[y+4>>2]|0);Ia=k[pb>>2]|0;k[ma>>2]=Ia;Ja=j[qb>>1]|0;i[la>>0]=Ja;_a=(Ja&65535)>>>8&255;i[w>>0]=_a;if(!(_a<<24>>24)){_a=J;Ja=k[_a+4>>2]|0;Ra=y;k[Ra>>2]=k[_a>>2];k[Ra+4>>2]=Ja;k[pb>>2]=0;i[ab>>0]=1}else Dyb(y|0,J|0,Ia<<2|0)|0;if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);Ia=k[rb>>2]|0;k[ia>>2]=Ia;Ja=j[xb>>1]|0;i[na>>0]=Ja;xb=(Ja&65535)>>>8&255;i[ka>>0]=xb;if(!(xb<<24>>24)){xb=Ea;Ja=k[xb+4>>2]|0;Ra=v;k[Ra>>2]=k[xb>>2];k[Ra+4>>2]=Ja;k[rb>>2]=0;i[wb>>0]=1}else Dyb(v|0,Ea|0,Ia<<2|0)|0;if(!(i[ab>>0]|0)){OBa(k[J+4>>2]|0);Ca=519}else Ca=519;break}case 35:{Ia=b+24|0;Ja=ja+24|0;k[K>>2]=0;Ra=K+8|0;k[Ra>>2]=0;xb=K+13|0;i[xb>>0]=1;_a=k[b+32>>2]|0;La=_a>>>0>134217728?134217728:_a;if(La>>>0>2){Ma=La>>>0>8?La:8;x=0;Na=Ba(563,Ma<<2|0)|0;Aa=x;x=0;if(Aa&1){Ca=50;break a}i[xb>>0]=0;k[Ra>>2]=La;k[K>>2]=Ma;k[K+4>>2]=Na;Db=Na}else{k[Ra>>2]=La;Db=K}Dyb(Db|0,((i[b+37>>0]|0)==0?k[Ia+4>>2]|0:Ia)|0,_a<<2|0)|0;_a=K+12|0;i[_a>>0]=i[b+36>>0]|0;Ia=K+16|0;k[Ia>>2]=0;La=K+24|0;k[La>>2]=0;Na=K+29|0;i[Na>>0]=1;Ma=k[ta>>2]|0;Aa=Ma>>>0>134217728?134217728:Ma;do if(Aa>>>0>2){Ab=Aa>>>0>8?Aa:8;x=0;zb=Ba(563,Ab<<2|0)|0;Bb=x;x=0;if(!(Bb&1)){i[Na>>0]=0;k[La>>2]=Aa;k[Ia>>2]=Ab;k[Ia+4>>2]=zb;Eb=zb;break}zb=Hc()|0;Ab=M;if(i[xb>>0]|0){tb=Ab;ub=zb;Ca=51;break a}OBa(k[K+4>>2]|0);tb=Ab;ub=zb;Ca=51;break a}else{k[La>>2]=Aa;Eb=Ia}while(0);Dyb(Eb|0,((i[wa>>0]|0)==0?k[za>>2]|0:oa)|0,Ma<<2|0)|0;Aa=K+28|0;i[Aa>>0]=i[ya>>0]|0;x=0;Ta(587,K|0,Ja|0)|0;ab=x;x=0;if(ab&1){ab=Hc()|0;Ea=M;if(!(i[Na>>0]|0))OBa(k[Ia+4>>2]|0);if(i[xb>>0]|0){tb=Ea;ub=ab;Ca=51;break a}OBa(k[K+4>>2]|0);tb=Ea;ub=ab;Ca=51;break a}if(!(i[w>>0]|0))OBa(k[y+4>>2]|0);ab=k[Ra>>2]|0;k[ma>>2]=ab;Ea=j[_a>>1]|0;i[la>>0]=Ea;wb=(Ea&65535)>>>8&255;i[w>>0]=wb;if(!(wb<<24>>24)){wb=K;Ea=k[wb+4>>2]|0;rb=y;k[rb>>2]=k[wb>>2];k[rb+4>>2]=Ea;k[Ra>>2]=0;i[xb>>0]=1}else Dyb(y|0,K|0,ab<<2|0)|0;if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);ab=k[La>>2]|0;k[ia>>2]=ab;Ea=j[Aa>>1]|0;i[na>>0]=Ea;Aa=(Ea&65535)>>>8&255;i[ka>>0]=Aa;if(!(Aa<<24>>24)){Aa=Ia;Ea=k[Aa+4>>2]|0;rb=v;k[rb>>2]=k[Aa>>2];k[rb+4>>2]=Ea;k[La>>2]=0;i[Na>>0]=1}else Dyb(v|0,Ia|0,ab<<2|0)|0;if(!(i[xb>>0]|0)){OBa(k[K+4>>2]|0);Ca=519}else Ca=519;break}case 36:{ab=ja+24|0;k[g>>2]=0;k[g+8>>2]=1;i[g+12>>0]=0;i[g+13>>0]=1;Ea=ja+40|0;k[f>>2]=1;k[f+8>>2]=1;i[f+12>>0]=0;i[f+13>>0]=1;c:do if(((i[ja+52>>0]|0)==0?(k[ja+48>>2]|0)==1:0)?(rb=(i[ja+53>>0]|0)==0?k[ja+44>>2]|0:Ea,(k[rb>>2]|0)==1):0){Aa=rb;wb=f;while(1){wb=wb+4|0;if((Aa|0)==(rb|0))break;Aa=Aa+4|0;if((k[Aa>>2]|0)!=(k[wb>>2]|0))break c}if(((i[ja+36>>0]|0)==0?(k[ja+32>>2]|0)==1:0)?(wb=(i[ja+37>>0]|0)==0?k[ja+28>>2]|0:ab,(k[wb>>2]|0)==0):0){Aa=wb;rb=g;while(1){rb=rb+4|0;if((Aa|0)==(wb|0))break;Aa=Aa+4|0;if((k[Aa>>2]|0)!=(k[rb>>2]|0))break c}k[a>>2]=0;k[a+4>>2]=0;break b}}while(0);Ea=b+24|0;k[L>>2]=0;xb=L+8|0;k[xb>>2]=0;Ia=L+13|0;i[Ia>>0]=1;Na=k[b+32>>2]|0;La=Na>>>0>134217728?134217728:Na;if(La>>>0>2){Ra=La>>>0>8?La:8;x=0;_a=Ba(563,Ra<<2|0)|0;Ja=x;x=0;if(Ja&1){Ca=50;break a}i[Ia>>0]=0;k[xb>>2]=La;k[L>>2]=Ra;k[L+4>>2]=_a;Fb=_a}else{k[xb>>2]=La;Fb=L}Dyb(Fb|0,((i[b+37>>0]|0)==0?k[Ea+4>>2]|0:Ea)|0,Na<<2|0)|0;Na=L+12|0;i[Na>>0]=i[b+36>>0]|0;Ea=L+16|0;k[Ea>>2]=0;La=L+24|0;k[La>>2]=0;_a=L+29|0;i[_a>>0]=1;Ra=k[ta>>2]|0;Ja=Ra>>>0>134217728?134217728:Ra;do if(Ja>>>0>2){Ma=Ja>>>0>8?Ja:8;x=0;rb=Ba(563,Ma<<2|0)|0;Aa=x;x=0;if(!(Aa&1)){i[_a>>0]=0;k[La>>2]=Ja;k[Ea>>2]=Ma;k[Ea+4>>2]=rb;Gb=rb;break}rb=Hc()|0;Ma=M;if(i[Ia>>0]|0){tb=Ma;ub=rb;Ca=51;break a}OBa(k[L+4>>2]|0);tb=Ma;ub=rb;Ca=51;break a}else{k[La>>2]=Ja;Gb=Ea}while(0);Dyb(Gb|0,((i[wa>>0]|0)==0?k[za>>2]|0:oa)|0,Ra<<2|0)|0;Ja=L+28|0;i[Ja>>0]=i[ya>>0]|0;x=0;Ta(588,L|0,ab|0)|0;rb=x;x=0;if(rb&1){rb=Hc()|0;Ma=M;if(!(i[_a>>0]|0))OBa(k[Ea+4>>2]|0);if(i[Ia>>0]|0){tb=Ma;ub=rb;Ca=51;break a}OBa(k[L+4>>2]|0);tb=Ma;ub=rb;Ca=51;break a}if(!(i[w>>0]|0))OBa(k[y+4>>2]|0);rb=k[xb>>2]|0;k[ma>>2]=rb;Ma=j[Na>>1]|0;i[la>>0]=Ma;Aa=(Ma&65535)>>>8&255;i[w>>0]=Aa;if(!(Aa<<24>>24)){Aa=L;Ma=k[Aa+4>>2]|0;wb=y;k[wb>>2]=k[Aa>>2];k[wb+4>>2]=Ma;k[xb>>2]=0;i[Ia>>0]=1}else Dyb(y|0,L|0,rb<<2|0)|0;if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);rb=k[La>>2]|0;k[ia>>2]=rb;Ma=j[Ja>>1]|0;i[na>>0]=Ma;Ja=(Ma&65535)>>>8&255;i[ka>>0]=Ja;if(!(Ja<<24>>24)){Ja=Ea;Ma=k[Ja+4>>2]|0;wb=v;k[wb>>2]=k[Ja>>2];k[wb+4>>2]=Ma;k[La>>2]=0;i[_a>>0]=1}else Dyb(v|0,Ea|0,rb<<2|0)|0;if(i[Ia>>0]|0){Ca=519;break b}OBa(k[L+4>>2]|0);Ca=519;break}case 37:{rb=ja+24|0;k[g>>2]=0;k[g+8>>2]=1;i[g+12>>0]=0;i[g+13>>0]=1;Ma=ja+40|0;k[f>>2]=1;k[f+8>>2]=1;i[f+12>>0]=0;i[f+13>>0]=1;wb=ja+52|0;d:do if(((i[wb>>0]|0)==0?(k[ja+48>>2]|0)==1:0)?(Ja=(i[ja+53>>0]|0)==0?k[ja+44>>2]|0:Ma,(k[Ja>>2]|0)==1):0){Aa=Ja;pb=f;while(1){pb=pb+4|0;if((Aa|0)==(Ja|0))break;Aa=Aa+4|0;if((k[Aa>>2]|0)!=(k[pb>>2]|0))break d}if(((i[ja+36>>0]|0)==0?(k[ja+32>>2]|0)==1:0)?(pb=(i[ja+37>>0]|0)==0?k[ja+28>>2]|0:rb,(k[pb>>2]|0)==0):0){Aa=pb;Ja=g;while(1){Ja=Ja+4|0;if((Aa|0)==(pb|0))break;Aa=Aa+4|0;if((k[Aa>>2]|0)!=(k[Ja>>2]|0))break d}k[a>>2]=0;k[a+4>>2]=0;break b}}while(0);if(!Ha){Ia=b+24|0;k[V>>2]=0;Ea=V+8|0;k[Ea>>2]=0;_a=V+13|0;i[_a>>0]=1;La=k[b+32>>2]|0;xb=La>>>0>134217728?134217728:La;if(xb>>>0>2){Na=xb>>>0>8?xb:8;x=0;ab=Ba(563,Na<<2|0)|0;Ra=x;x=0;if(Ra&1){Ca=50;break a}i[_a>>0]=0;k[Ea>>2]=xb;k[V>>2]=Na;k[V+4>>2]=ab;Hb=ab}else{k[Ea>>2]=xb;Hb=V}Dyb(Hb|0,((i[b+37>>0]|0)==0?k[Ia+4>>2]|0:Ia)|0,La<<2|0)|0;La=i[b+36>>0]|0;i[V+12>>0]=La;k[W>>2]=0;Ia=W+8|0;k[Ia>>2]=0;xb=W+13|0;i[xb>>0]=1;Ea=k[ja+32>>2]|0;ab=Ea>>>0>134217728?134217728:Ea;do if(ab>>>0>2){Na=ab>>>0>8?ab:8;x=0;Ra=Ba(563,Na<<2|0)|0;Ja=x;x=0;if(Ja&1){Ja=Hc()|0;Ib=Ja;Jb=M;break}else{i[xb>>0]=0;k[Ia>>2]=ab;k[W>>2]=Na;k[W+4>>2]=Ra;Kb=Ra;Ca=390;break}}else{k[Ia>>2]=ab;Kb=W;Ca=390}while(0);if((Ca|0)==390){Dyb(Kb|0,((i[ja+37>>0]|0)==0?k[ja+28>>2]|0:rb)|0,Ea<<2|0)|0;i[W+12>>0]=i[ja+36>>0]|0;k[U>>2]=0;ab=U+8|0;k[ab>>2]=1;Ia=U+12|0;i[Ia>>0]=0;Ra=U+13|0;i[Ra>>0]=1;x=0;nb(110,0,V|0,W|0,U|0);Na=x;x=0;do if(Na&1){Ja=Hc()|0;Aa=M;if(!(i[Ra>>0]|0))OBa(k[U+4>>2]|0);Lb=Ja;Mb=Aa}else{i[Ia>>0]=La;do if(La<<24>>24!=0&(k[ab>>2]|0)==1){if(k[((i[Ra>>0]|0)==0?k[U+4>>2]|0:U)>>2]|0)break;i[Ia>>0]=0}while(0);k[m>>2]=1;k[m+8>>2]=1;i[m+12>>0]=0;Aa=m+13|0;i[Aa>>0]=1;x=0;Fa(137,y|0,U|0,m|0)|0;Ja=x;x=0;if(Ja&1){Ja=Hc()|0;pb=M;if(!(i[Aa>>0]|0))OBa(k[m+4>>2]|0);if(i[Ra>>0]|0){Lb=Ja;Mb=pb;break}OBa(k[U+4>>2]|0);Lb=Ja;Mb=pb;break}if(!(i[Aa>>0]|0))OBa(k[m+4>>2]|0);if(!(i[Ra>>0]|0))OBa(k[U+4>>2]|0);if(!(i[xb>>0]|0))OBa(k[W+4>>2]|0);if(i[_a>>0]|0){Ca=519;break b}OBa(k[V+4>>2]|0);Ca=519;break b}while(0);if(!(i[xb>>0]|0)){OBa(k[W+4>>2]|0);Ib=Lb;Jb=Mb}else{Ib=Lb;Jb=Mb}}if(i[_a>>0]|0){Ya=Ib;Za=Jb;break a}OBa(k[V+4>>2]|0);Ya=Ib;Za=Jb;break a}Ra=b+24|0;k[N>>2]=0;Ia=N+8|0;k[Ia>>2]=0;ab=N+13|0;i[ab>>0]=1;La=b+32|0;Na=k[La>>2]|0;Ea=Na>>>0>134217728?134217728:Na;if(Ea>>>0>2){Aa=Ea>>>0>8?Ea:8;x=0;pb=Ba(563,Aa<<2|0)|0;Ja=x;x=0;if(Ja&1){Ca=50;break a}i[ab>>0]=0;k[Ia>>2]=Ea;k[N>>2]=Aa;k[N+4>>2]=pb;Nb=pb}else{k[Ia>>2]=Ea;Nb=N}Ea=b+37|0;pb=Ra+4|0;Dyb(Nb|0,((i[Ea>>0]|0)==0?k[pb>>2]|0:Ra)|0,Na<<2|0)|0;Na=b+36|0;Aa=N+12|0;i[Aa>>0]=i[Na>>0]|0;Ja=N+16|0;k[Ja>>2]=0;qb=N+24|0;k[qb>>2]=0;Ka=N+29|0;i[Ka>>0]=1;vb=k[ta>>2]|0;zb=vb>>>0>134217728?134217728:vb;do if(zb>>>0>2){Ab=zb>>>0>8?zb:8;x=0;Bb=Ba(563,Ab<<2|0)|0;Ob=x;x=0;if(!(Ob&1)){i[Ka>>0]=0;k[qb>>2]=zb;k[Ja>>2]=Ab;k[Ja+4>>2]=Bb;Pb=Bb;break}Bb=Hc()|0;Ab=M;if(i[ab>>0]|0){tb=Ab;ub=Bb;Ca=51;break a}OBa(k[N+4>>2]|0);tb=Ab;ub=Bb;Ca=51;break a}else{k[qb>>2]=zb;Pb=Ja}while(0);Dyb(Pb|0,((i[wa>>0]|0)==0?k[za>>2]|0:oa)|0,vb<<2|0)|0;zb=N+28|0;i[zb>>0]=i[ya>>0]|0;x=0;Ta(588,N|0,rb|0)|0;_a=x;x=0;if(_a&1){_a=Hc()|0;xb=M;if(!(i[Ka>>0]|0))OBa(k[Ja+4>>2]|0);if(i[ab>>0]|0){tb=xb;ub=_a;Ca=51;break a}OBa(k[N+4>>2]|0);tb=xb;ub=_a;Ca=51;break a}k[S>>2]=0;_a=S+8|0;k[_a>>2]=0;xb=S+13|0;i[xb>>0]=1;Bb=k[Ia>>2]|0;Ab=Bb>>>0>134217728?134217728:Bb;do if(Ab>>>0>2){Ob=Ab>>>0>8?Ab:8;x=0;Qb=Ba(563,Ob<<2|0)|0;Rb=x;x=0;if(Rb&1){Rb=Hc()|0;Sb=Rb;Tb=M;break}else{i[xb>>0]=0;k[_a>>2]=Ab;k[S>>2]=Ob;k[S+4>>2]=Qb;Ub=Qb;Ca=298;break}}else{k[_a>>2]=Ab;Ub=S;Ca=298}while(0);do if((Ca|0)==298){Ab=N+4|0;Dyb(Ub|0,((i[ab>>0]|0)==0?k[Ab>>2]|0:N)|0,Bb<<2|0)|0;i[S+12>>0]=i[Aa>>0]|0;k[T>>2]=0;_a=T+8|0;k[_a>>2]=0;Ia=T+13|0;i[Ia>>0]=1;vb=k[qb>>2]|0;Qb=vb>>>0>134217728?134217728:vb;do if(Qb>>>0>2){Ob=Qb>>>0>8?Qb:8;x=0;Rb=Ba(563,Ob<<2|0)|0;Vb=x;x=0;if(Vb&1){Vb=Hc()|0;Wb=Vb;Xb=M;break}else{i[Ia>>0]=0;k[_a>>2]=Qb;k[T>>2]=Ob;k[T+4>>2]=Rb;Yb=Rb;Ca=302;break}}else{k[_a>>2]=Qb;Yb=T;Ca=302}while(0);do if((Ca|0)==302){Qb=Ja+4|0;Dyb(Yb|0,((i[Ka>>0]|0)==0?k[Qb>>2]|0:Ja)|0,vb<<2|0)|0;i[T+12>>0]=i[zb>>0]|0;k[R>>2]=S;k[R+4>>2]=T;k[Q>>2]=0;k[Q+8>>2]=1;i[Q+12>>0]=0;_a=Q+13|0;i[_a>>0]=1;x=0;fb(229,Q|0,R|0,n|0);Rb=x;x=0;do if(Rb&1){Ob=Hc()|0;Vb=M;if(!(i[_a>>0]|0))OBa(k[Q+4>>2]|0);Zb=Ob;_b=Vb}else{k[P>>2]=0;Vb=P+8|0;k[Vb>>2]=0;Ob=P+13|0;i[Ob>>0]=1;$b=ja+32|0;ac=k[$b>>2]|0;bc=ac>>>0>134217728?134217728:ac;do if(bc>>>0>2){ac=bc>>>0>8?bc:8;x=0;cc=Ba(563,ac<<2|0)|0;dc=x;x=0;if(dc&1){dc=Hc()|0;ec=M;fc=dc;Ca=366;break}else{i[Ob>>0]=0;k[Vb>>2]=bc;k[P>>2]=ac;k[P+4>>2]=cc;gc=cc;Ca=309;break}}else{k[Vb>>2]=bc;gc=P;Ca=309}while(0);e:do if((Ca|0)==309){Dyb(gc|0,((i[ja+37>>0]|0)==0?k[ja+28>>2]|0:rb)|0,k[$b>>2]<<2|0)|0;i[P+12>>0]=i[ja+36>>0]|0;bc=P+16|0;k[bc>>2]=0;Vb=P+24|0;k[Vb>>2]=0;cc=P+29|0;i[cc>>0]=1;ac=ja+48|0;dc=k[ac>>2]|0;hc=dc>>>0>134217728?134217728:dc;do if(hc>>>0>2){dc=hc>>>0>8?hc:8;x=0;ic=Ba(563,dc<<2|0)|0;jc=x;x=0;if(!(jc&1)){i[cc>>0]=0;k[Vb>>2]=hc;k[bc>>2]=dc;k[bc+4>>2]=ic;kc=ic;break}ic=Hc()|0;dc=M;if(i[Ob>>0]|0){ec=dc;fc=ic;Ca=366;break e}OBa(k[P+4>>2]|0);ec=dc;fc=ic;Ca=366;break e}else{k[Vb>>2]=hc;kc=bc}while(0);Dyb(kc|0,((i[ja+53>>0]|0)==0?k[ja+44>>2]|0:Ma)|0,k[ac>>2]<<2|0)|0;i[P+28>>0]=i[wb>>0]|0;x=0;Ta(581,P|0,Q|0)|0;hc=x;x=0;if(hc&1){hc=Hc()|0;Vb=M;if(!(i[cc>>0]|0))OBa(k[bc+4>>2]|0);if(i[Ob>>0]|0){ec=Vb;fc=hc;Ca=366;break}OBa(k[P+4>>2]|0);ec=Vb;fc=hc;Ca=366;break}k[O>>2]=0;hc=O+8|0;k[hc>>2]=0;Vb=O+13|0;i[Vb>>0]=1;ic=k[La>>2]|0;dc=ic>>>0>134217728?134217728:ic;do if(dc>>>0>2){jc=dc>>>0>8?dc:8;x=0;lc=Ba(563,jc<<2|0)|0;mc=x;x=0;if(mc&1){mc=Hc()|0;nc=M;oc=mc;break}else{i[Vb>>0]=0;k[hc>>2]=dc;k[O>>2]=jc;k[O+4>>2]=lc;pc=lc;Ca=324;break}}else{k[hc>>2]=dc;pc=O;Ca=324}while(0);f:do if((Ca|0)==324){Dyb(pc|0,((i[Ea>>0]|0)==0?k[pb>>2]|0:Ra)|0,ic<<2|0)|0;dc=O+12|0;i[dc>>0]=i[Na>>0]|0;ac=O+16|0;k[ac>>2]=0;lc=O+24|0;k[lc>>2]=0;jc=O+29|0;i[jc>>0]=1;mc=k[ta>>2]|0;qc=mc>>>0>134217728?134217728:mc;do if(qc>>>0>2){rc=qc>>>0>8?qc:8;x=0;sc=Ba(563,rc<<2|0)|0;tc=x;x=0;if(!(tc&1)){i[jc>>0]=0;k[lc>>2]=qc;k[ac>>2]=rc;k[ac+4>>2]=sc;uc=sc;break}sc=Hc()|0;rc=M;if(i[Vb>>0]|0){nc=rc;oc=sc;break f}OBa(k[O+4>>2]|0);nc=rc;oc=sc;break f}else{k[lc>>2]=qc;uc=ac}while(0);Dyb(uc|0,((i[wa>>0]|0)==0?k[za>>2]|0:oa)|0,mc<<2|0)|0;qc=O+28|0;i[qc>>0]=i[ya>>0]|0;x=0;Ta(586,O|0,P|0)|0;sc=x;x=0;if(sc&1){sc=Hc()|0;rc=M;if(!(i[jc>>0]|0))OBa(k[ac+4>>2]|0);if(i[Vb>>0]|0){nc=rc;oc=sc;break}OBa(k[O+4>>2]|0);nc=rc;oc=sc;break}if(!(i[w>>0]|0))OBa(k[y+4>>2]|0);sc=k[hc>>2]|0;k[ma>>2]=sc;rc=j[dc>>1]|0;i[la>>0]=rc;tc=(rc&65535)>>>8&255;i[w>>0]=tc;if(!(tc<<24>>24)){tc=O;rc=k[tc+4>>2]|0;vc=y;k[vc>>2]=k[tc>>2];k[vc+4>>2]=rc;k[hc>>2]=0;i[Vb>>0]=1}else Dyb(y|0,O|0,sc<<2|0)|0;if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);sc=k[lc>>2]|0;k[ia>>2]=sc;rc=j[qc>>1]|0;i[na>>0]=rc;qc=(rc&65535)>>>8&255;i[ka>>0]=qc;if(!(qc<<24>>24)){qc=ac;rc=k[qc+4>>2]|0;vc=v;k[vc>>2]=k[qc>>2];k[vc+4>>2]=rc;k[lc>>2]=0;i[jc>>0]=1}else Dyb(v|0,ac|0,sc<<2|0)|0;if(!(i[Vb>>0]|0))OBa(k[O+4>>2]|0);if(!(i[cc>>0]|0))OBa(k[bc+4>>2]|0);if(!(i[Ob>>0]|0))OBa(k[P+4>>2]|0);if(!(i[_a>>0]|0))OBa(k[Q+4>>2]|0);if(!(i[Ia>>0]|0))OBa(k[T+4>>2]|0);if(!(i[xb>>0]|0))OBa(k[S+4>>2]|0);if(!(i[Ka>>0]|0))OBa(k[Qb>>2]|0);if(!(i[ab>>0]|0))OBa(k[Ab>>2]|0);Ca=519;break b}while(0);if(!(i[cc>>0]|0))OBa(k[bc+4>>2]|0);if(i[Ob>>0]|0){wc=oc;xc=nc;break}OBa(k[P+4>>2]|0);wc=oc;xc=nc}while(0);if((Ca|0)==366){wc=fc;xc=ec}if(i[_a>>0]|0){Zb=wc;_b=xc;break}OBa(k[Q+4>>2]|0);Zb=wc;_b=xc}while(0);if(i[Ia>>0]|0){Wb=Zb;Xb=_b;break}OBa(k[T+4>>2]|0);Wb=Zb;Xb=_b}while(0);if(i[xb>>0]|0){Sb=Wb;Tb=Xb;break}OBa(k[S+4>>2]|0);Sb=Wb;Tb=Xb}while(0);if(!(i[Ka>>0]|0))OBa(k[Ja+4>>2]|0);if(i[ab>>0]|0){Ya=Sb;Za=Tb;break a}OBa(k[N+4>>2]|0);Ya=Sb;Za=Tb;break a;break}case 38:{xb=ja+40|0;k[l>>2]=0;Na=l+8|0;k[Na>>2]=0;Ra=l+13|0;i[Ra>>0]=1;pb=k[ja+48>>2]|0;Ea=pb>>>0>134217728?134217728:pb;if(Ea>>>0>2){La=Ea>>>0>8?Ea:8;x=0;wb=Ba(563,La<<2|0)|0;Ma=x;x=0;if(Ma&1){Ca=50;break a}i[Ra>>0]=0;k[Na>>2]=Ea;k[l>>2]=La;k[l+4>>2]=wb;yc=wb}else{k[Na>>2]=Ea;yc=l}Dyb(yc|0,((i[ja+53>>0]|0)==0?k[ja+44>>2]|0:xb)|0,pb<<2|0)|0;pb=i[ja+52>>0]|0;i[l+12>>0]=pb;xb=i[Ra>>0]|0;if(pb<<24>>24==0&(k[Na>>2]|0)==1)zc=(k[(xb<<24>>24==0?k[l+4>>2]|0:l)>>2]|0)!=1;else zc=1;if(!(xb<<24>>24))OBa(k[l+4>>2]|0);if(zc){k[a>>2]=0;k[a+4>>2]=0;break b}xb=ja+24|0;x=0;xa(801,X|0,xb|0);Na=x;x=0;if(Na&1){Ca=50;break a}k[Y>>2]=-1;k[Y+8>>2]=1;i[Y+12>>0]=0;i[Y+13>>0]=1;x=0;Na=Ta(582,X|0,Y|0)|0;pb=x;x=0;if(pb&1){pb=Hc()|0;Ra=M;if(!(i[X+29>>0]|0))OBa(k[X+16+4>>2]|0);if(i[X+13>>0]|0){Ya=pb;Za=Ra;break a}OBa(k[X+4>>2]|0);Ya=pb;Za=Ra;break a}if(!(i[X+29>>0]|0))OBa(k[X+16+4>>2]|0);if(!(i[X+13>>0]|0))OBa(k[X+4>>2]|0);if(Na){k[a>>2]=0;k[a+4>>2]=0;break b}x=0;xa(801,$|0,xb|0);Na=x;x=0;if(Na&1){Ca=50;break a}k[_>>2]=0;Na=_+8|0;k[Na>>2]=0;Ra=_+13|0;i[Ra>>0]=1;pb=k[$+8>>2]|0;Ea=pb>>>0>134217728?134217728:pb;do if(Ea>>>0>2){wb=Ea>>>0>8?Ea:8;x=0;La=Ba(563,wb<<2|0)|0;Ma=x;x=0;if(Ma&1){Ma=Hc()|0;Ac=Ma;Bc=M;break}else{i[Ra>>0]=0;k[Na>>2]=Ea;k[_>>2]=wb;k[_+4>>2]=La;Cc=La;Ca=442;break}}else{k[Na>>2]=Ea;Cc=_;Ca=442}while(0);do if((Ca|0)==442){Ea=$+13|0;Na=$+4|0;Dyb(Cc|0,((i[Ea>>0]|0)==0?k[Na>>2]|0:$)|0,pb<<2|0)|0;ab=i[$+12>>0]|0;i[_+12>>0]=ab;if(ab<<24>>24){x=0;va(1502,h|0);x=0;ab=Hc()|0;Ja=M;if(i[Ra>>0]|0){Ac=ab;Bc=Ja;break}OBa(k[_+4>>2]|0);Ac=ab;Bc=Ja;break}Ja=(i[Ra>>0]|0)==0;ab=k[_+4>>2]|0;Ka=k[(Ja?ab:_)>>2]|0;if(Ja)OBa(ab);if(!(i[$+29>>0]|0))OBa(k[$+16+4>>2]|0);if(!(i[Ea>>0]|0))OBa(k[Na>>2]|0);k[Z>>2]=Ka;Ka=b+24|0;k[ba>>2]=0;Na=ba+8|0;k[Na>>2]=0;Ea=ba+13|0;i[Ea>>0]=1;ab=k[b+32>>2]|0;Ja=ab>>>0>134217728?134217728:ab;if(Ja>>>0>2){La=Ja>>>0>8?Ja:8;x=0;wb=Ba(563,La<<2|0)|0;Ma=x;x=0;if(Ma&1){Ca=50;break a}i[Ea>>0]=0;k[Na>>2]=Ja;k[ba>>2]=La;k[ba+4>>2]=wb;Dc=wb}else{k[Na>>2]=Ja;Dc=ba}Dyb(Dc|0,((i[b+37>>0]|0)==0?k[Ka+4>>2]|0:Ka)|0,ab<<2|0)|0;i[ba+12>>0]=i[b+36>>0]|0;k[aa>>2]=0;k[aa+8>>2]=1;i[aa+12>>0]=0;ab=aa+13|0;i[ab>>0]=1;x=0;nb(124,aa|0,ba|0,Z|0,g|0);Ka=x;x=0;if(Ka&1){Ka=Hc()|0;Ja=M;if(!(i[ab>>0]|0))OBa(k[aa+4>>2]|0);if(i[Ea>>0]|0){Ya=Ka;Za=Ja;break a}OBa(k[ba+4>>2]|0);Ya=Ka;Za=Ja;break a}if(!(i[Ea>>0]|0))OBa(k[ba+4>>2]|0);k[da>>2]=0;Ea=da+8|0;k[Ea>>2]=0;Ja=da+13|0;i[Ja>>0]=1;Ka=k[ta>>2]|0;Na=Ka>>>0>134217728?134217728:Ka;do if(Na>>>0>2){wb=Na>>>0>8?Na:8;x=0;La=Ba(563,wb<<2|0)|0;Ma=x;x=0;if(Ma&1){Ma=Hc()|0;Ec=Ma;Fc=M;break}else{i[Ja>>0]=0;k[Ea>>2]=Na;k[da>>2]=wb;k[da+4>>2]=La;Gc=La;Ca=463;break}}else{k[Ea>>2]=Na;Gc=da;Ca=463}while(0);do if((Ca|0)==463){Dyb(Gc|0,((i[wa>>0]|0)==0?k[za>>2]|0:oa)|0,Ka<<2|0)|0;i[da+12>>0]=i[ya>>0]|0;k[ca>>2]=0;k[ca+8>>2]=1;i[ca+12>>0]=0;Na=ca+13|0;i[Na>>0]=1;x=0;nb(124,ca|0,da|0,Z|0,f|0);Ea=x;x=0;if(Ea&1){Ea=Hc()|0;La=M;if(!(i[Na>>0]|0))OBa(k[ca+4>>2]|0);if(i[Ja>>0]|0){Ec=Ea;Fc=La;break}OBa(k[da+4>>2]|0);Ec=Ea;Fc=La;break}if(!(i[Ja>>0]|0))OBa(k[da+4>>2]|0);k[ea>>2]=0;k[ea+8>>2]=1;i[ea+12>>0]=0;i[ea+13>>0]=1;x=0;La=Ta(584,xb|0,ea|0)|0;Ea=x;x=0;do if(Ea&1){wb=Hc()|0;Ic=wb;Jc=M}else{x=0;do if(La){jba(ga,ca,aa);wb=x;x=0;if(wb&1){Ca=494;break}if(!(i[w>>0]|0))OBa(k[y+4>>2]|0);wb=ga+8|0;Ma=k[wb>>2]|0;k[ma>>2]=Ma;rb=j[ga+12>>1]|0;i[la>>0]=rb;zb=ga+13|0;qb=(rb&65535)>>>8&255;i[w>>0]=qb;if(!(qb<<24>>24)){qb=ga;rb=k[qb+4>>2]|0;Aa=y;k[Aa>>2]=k[qb>>2];k[Aa+4>>2]=rb;k[wb>>2]=0;i[zb>>0]=1}else Dyb(y|0,ga|0,Ma<<2|0)|0;Ma=ga+16|0;if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);wb=ga+24|0;rb=k[wb>>2]|0;k[ia>>2]=rb;Aa=j[ga+28>>1]|0;i[na>>0]=Aa;qb=(Aa&65535)>>>8&255;i[ka>>0]=qb;if(!(qb<<24>>24)){qb=Ma;Aa=k[qb+4>>2]|0;Bb=v;k[Bb>>2]=k[qb>>2];k[Bb+4>>2]=Aa;k[wb>>2]=0;i[ga+29>>0]=1}else Dyb(v|0,Ma|0,rb<<2|0)|0;if(i[zb>>0]|0)break;OBa(k[ga+4>>2]|0)}else{jba(fa,aa,ca);zb=x;x=0;if(zb&1){Ca=494;break}if(!(i[w>>0]|0))OBa(k[y+4>>2]|0);zb=fa+8|0;rb=k[zb>>2]|0;k[ma>>2]=rb;Ma=j[fa+12>>1]|0;i[la>>0]=Ma;wb=fa+13|0;Aa=(Ma&65535)>>>8&255;i[w>>0]=Aa;if(!(Aa<<24>>24)){Aa=fa;Ma=k[Aa+4>>2]|0;Bb=y;k[Bb>>2]=k[Aa>>2];k[Bb+4>>2]=Ma;k[zb>>2]=0;i[wb>>0]=1}else Dyb(y|0,fa|0,rb<<2|0)|0;rb=fa+16|0;if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);zb=fa+24|0;Ma=k[zb>>2]|0;k[ia>>2]=Ma;Bb=j[fa+28>>1]|0;i[na>>0]=Bb;Aa=(Bb&65535)>>>8&255;i[ka>>0]=Aa;if(!(Aa<<24>>24)){Aa=rb;Bb=k[Aa+4>>2]|0;qb=v;k[qb>>2]=k[Aa>>2];k[qb+4>>2]=Bb;k[zb>>2]=0;i[fa+29>>0]=1}else Dyb(v|0,rb|0,Ma<<2|0)|0;if(i[wb>>0]|0)break;OBa(k[fa+4>>2]|0)}while(0);if((Ca|0)==494){wb=Hc()|0;Ic=wb;Jc=M;break}if(!(i[Na>>0]|0))OBa(k[ca+4>>2]|0);if(!(i[ab>>0]|0))OBa(k[aa+4>>2]|0);Ca=519;break b}while(0);if(i[Na>>0]|0){Ec=Ic;Fc=Jc;break}OBa(k[ca+4>>2]|0);Ec=Ic;Fc=Jc}while(0);if(i[ab>>0]|0){Ya=Ec;Za=Fc;break a}OBa(k[aa+4>>2]|0);Ya=Ec;Za=Fc;break a}while(0);if(!(i[$+29>>0]|0))OBa(k[$+16+4>>2]|0);if(i[$+13>>0]|0){Ya=Ac;Za=Bc;break a}OBa(k[$+4>>2]|0);Ya=Ac;Za=Bc;break a;break}default:{k[a>>2]=0;k[a+4>>2]=0}}while(0);if((Ca|0)==519){x=0;xa(795,ha|0,y|0);ya=x;x=0;if(ya&1){Ca=50;break}k[a>>2]=k[ha>>2];ya=ha+4|0;k[a+4>>2]=k[ya>>2];k[ha>>2]=0;k[ya>>2]=0}if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);if(!(i[w>>0]|0))OBa(k[y+4>>2]|0);r=e;return}while(0);if((Ca|0)==50){ha=Hc()|0;tb=M;ub=ha;Ca=51}if((Ca|0)==51){Ya=ub;Za=tb}if(!(i[ka>>0]|0))OBa(k[v+4>>2]|0);if(i[w>>0]|0){pa=Ya;qa=Za;Sc(pa|0)}OBa(k[y+4>>2]|0);pa=Ya;qa=Za;Sc(pa|0)}Tf[k[(k[b>>2]|0)+64>>2]&2047](u,b);b=k[u>>2]|0;if(b){x=0;nb(k[(k[b>>2]|0)+16>>2]|0,a|0,b|0,c|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;c=M;b=k[u+4>>2]|0;if(!b){pa=d;qa=c;Sc(pa|0)}j0a(b);pa=d;qa=c;Sc(pa|0)}}else{k[a>>2]=0;k[a+4>>2]=0}a=k[u+4>>2]|0;if(a)j0a(a);r=e;return}function I8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6624,0)|0;if(!c)BBa();b=a+24|0;if((i[a+36>>0]|0)!=0^(i[c+36>>0]|0)!=0){d=0;return d|0}e=k[a+32>>2]|0;if((e|0)!=(k[c+32>>2]|0)){d=0;return d|0}f=(i[a+37>>0]|0)==0?k[b+4>>2]|0:b;b=f+(e<<2)|0;a:do if(e){g=f;h=(i[c+37>>0]|0)==0?k[c+28>>2]|0:c+24|0;while(1){if((k[g>>2]|0)!=(k[h>>2]|0)){d=0;break}g=g+4|0;if((g|0)==(b|0))break a;else h=h+4|0}return d|0}while(0);b=a+40|0;if((i[a+52>>0]|0)!=0^(i[c+52>>0]|0)!=0){d=0;return d|0}f=k[a+48>>2]|0;if((f|0)!=(k[c+48>>2]|0)){d=0;return d|0}e=(i[a+53>>0]|0)==0?k[b+4>>2]|0:b;b=e+(f<<2)|0;if(!f){d=1;return d|0}f=e;e=(i[c+53>>0]|0)==0?k[c+44>>2]|0:c+40|0;while(1){if((k[f>>2]|0)!=(k[e>>2]|0)){d=0;j=16;break}f=f+4|0;if((f|0)==(b|0)){d=1;j=16;break}else e=e+4|0}if((j|0)==16)return d|0;return 0}function J8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;c=r;r=r+128|0;d=c+48|0;e=c+125|0;f=c+124|0;g=c+112|0;h=c+32|0;j=c+100|0;l=c+88|0;m=c+76|0;n=c+16|0;o=c+64|0;p=c;q=b+40|0;k[d>>2]=0;s=d+8|0;k[s>>2]=0;t=d+13|0;i[t>>0]=1;u=b+48|0;v=k[u>>2]|0;w=v>>>0>134217728?134217728:v;if(w>>>0>2){y=w>>>0>8?w:8;z=KBa(y<<2)|0;i[t>>0]=0;k[s>>2]=w;k[d>>2]=y;k[d+4>>2]=z;A=z}else{k[s>>2]=w;A=d}w=b+53|0;z=q+4|0;Dyb(A|0,((i[w>>0]|0)==0?k[z>>2]|0:q)|0,v<<2|0)|0;v=b+52|0;A=i[v>>0]|0;i[d+12>>0]=A;y=i[t>>0]|0;if(A<<24>>24==0&(k[s>>2]|0)==1)B=(k[(y<<24>>24==0?k[d+4>>2]|0:d)>>2]|0)!=1;else B=1;if(!(y<<24>>24))OBa(k[d+4>>2]|0);y=b+24|0;if(!B){k[h>>2]=0;B=h+8|0;k[B>>2]=0;s=h+13|0;i[s>>0]=1;A=k[b+32>>2]|0;t=A>>>0>134217728?134217728:A;if(t>>>0>2){C=t>>>0>8?t:8;D=KBa(C<<2)|0;i[s>>0]=0;k[B>>2]=t;k[h>>2]=C;k[h+4>>2]=D;E=D}else{k[B>>2]=t;E=h}Dyb(E|0,((i[b+37>>0]|0)==0?k[y+4>>2]|0:y)|0,A<<2|0)|0;i[h+12>>0]=i[b+36>>0]|0;x=0;nb(128,g|0,h|0,0,f|0);f=x;x=0;do if(f&1){A=Hc()|0;F=M;G=A}else{x=0;A=Fa(86,g|0,0,251836)|0;E=x;x=0;if(E&1){E=Hc()|0;t=M;K2a(g);F=t;G=E;break};k[a>>2]=k[A>>2];k[a+4>>2]=k[A+4>>2];k[a+8>>2]=k[A+8>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;K2a(g);if(i[s>>0]|0){r=c;return}OBa(k[h+4>>2]|0);r=c;return}while(0);if(i[s>>0]|0){H=F;I=G;Sc(I|0)}OBa(k[h+4>>2]|0);H=F;I=G;Sc(I|0)}k[n>>2]=0;G=n+8|0;k[G>>2]=0;F=n+13|0;i[F>>0]=1;h=k[b+32>>2]|0;s=h>>>0>134217728?134217728:h;if(s>>>0>2){g=s>>>0>8?s:8;f=KBa(g<<2)|0;i[F>>0]=0;k[G>>2]=s;k[n>>2]=g;k[n+4>>2]=f;J=f}else{k[G>>2]=s;J=n}Dyb(J|0,((i[b+37>>0]|0)==0?k[y+4>>2]|0:y)|0,h<<2|0)|0;i[n+12>>0]=i[b+36>>0]|0;x=0;nb(128,m|0,n|0,0,e|0);e=x;x=0;if(e&1){e=Hc()|0;K=M;L=e}else{x=0;e=Fa(86,m|0,0,251847)|0;b=x;x=0;if(b&1){b=Hc()|0;N=M;O=b}else{k[l>>2]=k[e>>2];k[l+4>>2]=k[e+4>>2];k[l+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(605,l|0,47);e=x;x=0;if(e&1){e=Hc()|0;P=M;Q=e}else{k[j>>2]=k[l>>2];k[j+4>>2]=k[l+4>>2];k[j+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[p>>2]=0;e=p+8|0;k[e>>2]=0;b=p+13|0;i[b>>0]=1;h=k[u>>2]|0;u=h>>>0>134217728?134217728:h;do if(u>>>0>2){y=u>>>0>8?u:8;x=0;J=Ba(563,y<<2|0)|0;s=x;x=0;if(s&1){s=Hc()|0;R=M;S=s;break}else{i[b>>0]=0;k[e>>2]=u;k[p>>2]=y;k[p+4>>2]=J;T=J;U=30;break}}else{k[e>>2]=u;T=p;U=30}while(0);if((U|0)==30){Dyb(T|0,((i[w>>0]|0)==0?k[z>>2]|0:q)|0,h<<2|0)|0;i[p+12>>0]=i[v>>0]|0;x=0;nb(128,o|0,p|0,0,d|0);d=x;x=0;do if(d&1){v=Hc()|0;V=M;W=v}else{v=i[o>>0]|0;h=(v&1)==0;x=0;q=Fa(88,j|0,(h?o+1|0:k[o+8>>2]|0)|0,(h?(v&255)>>>1:k[o+4>>2]|0)|0)|0;v=x;x=0;if(v&1){v=Hc()|0;h=M;K2a(o);V=h;W=v;break};k[a>>2]=k[q>>2];k[a+4>>2]=k[q+4>>2];k[a+8>>2]=k[q+8>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;K2a(o);if(!(i[b>>0]|0))OBa(k[p+4>>2]|0);K2a(j);K2a(l);K2a(m);if(i[F>>0]|0){r=c;return}OBa(k[n+4>>2]|0);r=c;return}while(0);if(!(i[b>>0]|0)){OBa(k[p+4>>2]|0);R=V;S=W}else{R=V;S=W}}K2a(j);P=R;Q=S}K2a(l);N=P;O=Q}K2a(m);K=N;L=O}if(i[F>>0]|0){H=K;I=L;Sc(I|0)}OBa(k[n+4>>2]|0);H=K;I=L;Sc(I|0)}function K8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0;c=r;r=r+432|0;d=c+421|0;e=c+420|0;f=c+304|0;g=c+288|0;h=c+320|0;l=c+400|0;m=c+408|0;n=c+256|0;o=c+240|0;p=c+392|0;q=c+224|0;s=c+384|0;t=c+376|0;u=c+208|0;v=c+192|0;w=c+152|0;y=c+360|0;z=c+352|0;A=c+136|0;B=c+348|0;C=c+336|0;D=c+120|0;E=c+80|0;F=c+40|0;G=c;k[a>>2]=0;k[a+32>>2]=1;k[g>>2]=0;H=g+8|0;k[H>>2]=1;I=g+12|0;i[I>>0]=0;J=g+13|0;i[J>>0]=1;K=b+40|0;k[f>>2]=0;L=f+8|0;k[L>>2]=0;N=f+13|0;i[N>>0]=1;O=b+48|0;P=k[O>>2]|0;Q=P>>>0>134217728?134217728:P;if(Q>>>0>2){R=Q>>>0>8?Q:8;x=0;S=Ba(563,R<<2|0)|0;T=x;x=0;if(T&1)U=17;else{i[N>>0]=0;k[L>>2]=Q;k[f>>2]=R;k[f+4>>2]=S;V=S;U=5}}else{k[L>>2]=Q;V=f;U=5}a:do if((U|0)==5){Q=b+53|0;S=K+4|0;Dyb(V|0,((i[Q>>0]|0)==0?k[S>>2]|0:K)|0,P<<2|0)|0;R=b+52|0;T=i[R>>0]|0;i[f+12>>0]=T;W=i[N>>0]|0;if(T<<24>>24==0&(k[L>>2]|0)==1)X=(k[(W<<24>>24==0?k[f+4>>2]|0:f)>>2]|0)!=1;else X=1;if(!(W<<24>>24))OBa(k[f+4>>2]|0);b:do if(!X){W=b+24|0;k[h>>2]=0;T=h+8|0;k[T>>2]=0;Y=h+13|0;i[Y>>0]=1;Z=k[b+32>>2]|0;_=Z>>>0>134217728?134217728:Z;if(_>>>0>2){$=_>>>0>8?_:8;x=0;aa=Ba(563,$<<2|0)|0;ba=x;x=0;if(ba&1){U=17;break a}i[Y>>0]=0;k[T>>2]=_;k[h>>2]=$;k[h+4>>2]=aa;ca=aa}else{k[T>>2]=_;ca=h}Dyb(ca|0,((i[b+37>>0]|0)==0?k[W+4>>2]|0:W)|0,Z<<2|0)|0;Z=i[b+36>>0]|0;i[h+12>>0]=Z;W=k[T>>2]|0;k[H>>2]=W;i[I>>0]=Z;Z=i[Y>>0]|0;i[J>>0]=Z;if(!(Z<<24>>24)){Z=h;_=k[Z+4>>2]|0;aa=g;k[aa>>2]=k[Z>>2];k[aa+4>>2]=_;k[T>>2]=0;i[Y>>0]=1;break}else{Dyb(g|0,h|0,W<<2|0)|0;break}}else{x=0;xa(803,l|0,b|0);W=x;x=0;if(W&1){U=17;break a}W=k[l>>2]|0;x=0;fb(140,m|0,329672,0);Y=x;x=0;c:do if(!(Y&1)){x=0;pa(57,(W|0)!=0|0,m|0,738,250928,251863);T=x;x=0;if(T&1){T=Hc()|0;_=M;K2a(m);da=_;ea=T;break}K2a(m);T=b+24|0;k[q>>2]=1;k[q+8>>2]=1;i[q+12>>0]=0;_=q+13|0;i[_>>0]=1;k[s>>2]=k[W+28>>2];k[p>>2]=q;k[p+4>>2]=s;k[o>>2]=0;k[o+8>>2]=1;i[o+12>>0]=0;aa=o+13|0;i[aa>>0]=1;x=0;fb(184,o|0,p|0,e|0);Z=x;x=0;if(!(Z&1)){k[n>>2]=0;Z=n+8|0;k[Z>>2]=0;$=n+13|0;i[$>>0]=1;ba=k[b+32>>2]|0;fa=ba>>>0>134217728?134217728:ba;do if(fa>>>0>2){ga=fa>>>0>8?fa:8;x=0;ha=Ba(563,ga<<2|0)|0;ia=x;x=0;if(ia&1){ia=Hc()|0;ja=M;ka=ia;break}else{i[$>>0]=0;k[Z>>2]=fa;k[n>>2]=ga;k[n+4>>2]=ha;la=ha;U=28;break}}else{k[Z>>2]=fa;la=n;U=28}while(0);d:do if((U|0)==28){Dyb(la|0,((i[b+37>>0]|0)==0?k[T+4>>2]|0:T)|0,ba<<2|0)|0;fa=n+12|0;i[fa>>0]=i[b+36>>0]|0;ha=n+16|0;k[ha>>2]=0;ga=n+24|0;k[ga>>2]=0;ia=n+29|0;i[ia>>0]=1;ma=k[O>>2]|0;na=ma>>>0>134217728?134217728:ma;do if(na>>>0>2){oa=na>>>0>8?na:8;x=0;qa=Ba(563,oa<<2|0)|0;ra=x;x=0;if(!(ra&1)){i[ia>>0]=0;k[ga>>2]=na;k[ha>>2]=oa;k[ha+4>>2]=qa;sa=qa;break}qa=Hc()|0;oa=M;if(i[$>>0]|0){ja=oa;ka=qa;break d}OBa(k[n+4>>2]|0);ja=oa;ka=qa;break d}else{k[ga>>2]=na;sa=ha}while(0);Dyb(sa|0,((i[Q>>0]|0)==0?k[S>>2]|0:K)|0,ma<<2|0)|0;na=n+28|0;i[na>>0]=i[R>>0]|0;x=0;Ta(581,n|0,o|0)|0;qa=x;x=0;if(qa&1){qa=Hc()|0;oa=M;if(!(i[ia>>0]|0))OBa(k[ha+4>>2]|0);if(i[$>>0]|0){ja=oa;ka=qa;break}OBa(k[n+4>>2]|0);ja=oa;ka=qa;break}if(!(i[aa>>0]|0))OBa(k[o+4>>2]|0);if(!(i[_>>0]|0))OBa(k[q+4>>2]|0);k[u>>2]=0;qa=u+8|0;k[qa>>2]=0;oa=u+13|0;i[oa>>0]=1;ra=k[Z>>2]|0;ta=ra>>>0>134217728?134217728:ra;do if(ta>>>0>2){ua=ta>>>0>8?ta:8;x=0;va=Ba(563,ua<<2|0)|0;wa=x;x=0;if(wa&1){wa=Hc()|0;ya=M;za=wa;break}else{i[oa>>0]=0;k[qa>>2]=ta;k[u>>2]=ua;k[u+4>>2]=va;Aa=va;U=47;break}}else{k[qa>>2]=ta;Aa=u;U=47}while(0);do if((U|0)==47){ta=n+4|0;Dyb(Aa|0,((i[$>>0]|0)==0?k[ta>>2]|0:n)|0,ra<<2|0)|0;i[u+12>>0]=i[fa>>0]|0;k[v>>2]=0;qa=v+8|0;k[qa>>2]=0;ma=v+13|0;i[ma>>0]=1;va=k[ga>>2]|0;ua=va>>>0>134217728?134217728:va;do if(ua>>>0>2){wa=ua>>>0>8?ua:8;x=0;Ca=Ba(563,wa<<2|0)|0;Da=x;x=0;if(Da&1){Da=Hc()|0;Ea=M;Fa=Da;break}else{i[ma>>0]=0;k[qa>>2]=ua;k[v>>2]=wa;k[v+4>>2]=Ca;Ga=Ca;U=51;break}}else{k[qa>>2]=ua;Ga=v;U=51}while(0);do if((U|0)==51){ua=ha+4|0;Dyb(Ga|0,((i[ia>>0]|0)==0?k[ua>>2]|0:ha)|0,va<<2|0)|0;i[v+12>>0]=i[na>>0]|0;k[t>>2]=u;k[t+4>>2]=v;x=0;fb(229,g|0,t|0,d|0);qa=x;x=0;if(qa&1){qa=Hc()|0;Ca=M;if(i[ma>>0]|0){Ea=Ca;Fa=qa;break}OBa(k[v+4>>2]|0);Ea=Ca;Fa=qa;break}if(!(i[ma>>0]|0))OBa(k[v+4>>2]|0);if(!(i[oa>>0]|0))OBa(k[u+4>>2]|0);if(!(i[ia>>0]|0))OBa(k[ua>>2]|0);if(!(i[$>>0]|0))OBa(k[ta>>2]|0);ua=k[l+4>>2]|0;if(ua)j0a(ua);break b}while(0);if(i[oa>>0]|0){ya=Ea;za=Fa;break}OBa(k[u+4>>2]|0);ya=Ea;za=Fa}while(0);if(!(i[ia>>0]|0))OBa(k[ha+4>>2]|0);if(i[$>>0]|0){da=ya;ea=za;break c}OBa(k[n+4>>2]|0);da=ya;ea=za;break c}while(0);if(!(i[aa>>0]|0)){OBa(k[o+4>>2]|0);Ha=ja;Ia=ka}else{Ha=ja;Ia=ka}}else{$=Hc()|0;Z=M;if(!(i[aa>>0]|0))OBa(k[o+4>>2]|0);Ha=Z;Ia=$}if(!(i[_>>0]|0)){OBa(k[q+4>>2]|0);da=Ha;ea=Ia}else{da=Ha;ea=Ia}}else{$=Hc()|0;da=M;ea=$}while(0);W=k[l+4>>2]|0;if(!W){Ja=da;Ka=ea;break a}j0a(W);Ja=da;Ka=ea;break a}while(0);k[w>>2]=1;k[w+32>>2]=1;NC(w);x=0;R=Ta(534,g|0,w|0)|0;S=x;x=0;if(!(S&1)?(x=0,fb(140,y|0,251962,27),S=x,x=0,!(S&1)):0){x=0;pa(57,R^1|0,y|0,745,250928,251863);R=x;x=0;if(R&1){R=Hc()|0;S=M;K2a(y);Ja=S;Ka=R;break}K2a(y);k[A>>2]=1;k[A+8>>2]=1;i[A+12>>0]=0;R=A+13|0;i[R>>0]=1;k[B>>2]=255;k[z>>2]=A;k[z+4>>2]=B;x=0;S=Ta(589,g|0,z|0)|0;Q=x;x=0;do if(!(Q&1)?(x=0,fb(140,C|0,251990,26),W=x,x=0,!(W&1)):0){x=0;pa(57,S^1|0,C|0,746,250928,251863);W=x;x=0;if(W&1){W=Hc()|0;Y=M;K2a(C);La=Y;Ma=W;break}K2a(C);if(!(i[R>>0]|0))OBa(k[A+4>>2]|0);k[D>>2]=0;k[D+8>>2]=1;i[D+12>>0]=0;i[D+13>>0]=1;x=0;W=Ta(584,b+24|0,D|0)|0;Y=x;x=0;if(Y&1){Y=Hc()|0;Ja=M;Ka=Y;break a}if(W){k[G>>2]=0;W=G+32|0;Y=G+34|0;i[Y>>0]=0;$=k[H>>2]|0;Z=$>>>0>8?8:$;j[W>>1]=Z;ba=Z&65535;Dyb(G|0,((i[J>>0]|0)==0?k[g+4>>2]|0:g)|0,(ba>>>0<$>>>0?ba:$)<<2|0)|0;$=i[I>>0]|0;i[Y>>0]=$;ba=j[W>>1]|0;if($<<24>>24!=0&ba<<16>>16==1)if(!(k[G>>2]|0)){i[Y>>0]=0;Na=1}else Na=1;else Na=ba;ba=(Na&65535)+-1|0;e:do if(!ba)Oa=Na;else{$=ba;Z=Na;while(1){if(k[G+($<<2)>>2]|0){Oa=Z;break e}T=Z+-1<<16>>16;j[W>>1]=T;$=(T&65535)+-1|0;if(!$){Oa=T;break}else Z=T}}while(0);do if(Oa<<16>>16==1){if(k[G>>2]|0)break;i[Y>>0]=0}while(0);x=0;xa(804,F|0,G|0);Y=x;x=0;if(Y&1){U=17;break a}Pa=a;Qa=F;Ra=Pa+36|0;do{k[Pa>>2]=k[Qa>>2];Pa=Pa+4|0;Qa=Qa+4|0}while((Pa|0)<(Ra|0))}else{k[E>>2]=0;k[E+32>>2]=1;NB(E,g,d,e);Pa=a;Qa=E;Ra=Pa+36|0;do{k[Pa>>2]=k[Qa>>2];Pa=Pa+4|0;Qa=Qa+4|0}while((Pa|0)<(Ra|0))}if(i[J>>0]|0){r=c;return}OBa(k[g+4>>2]|0);r=c;return}else U=95;while(0);if((U|0)==95){S=Hc()|0;La=M;Ma=S}if(!(i[R>>0]|0)){OBa(k[A+4>>2]|0);Ja=La;Ka=Ma}else{Ja=La;Ka=Ma}}else U=17}while(0);if((U|0)==17){U=Hc()|0;Ja=M;Ka=U}if(i[J>>0]|0)Sc(Ka|0);OBa(k[g+4>>2]|0);Sc(Ka|0)}function L8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+32|0;d=c;e=c+24|0;f=c+16|0;g=b+40|0;k[d>>2]=0;h=d+8|0;k[h>>2]=0;j=d+13|0;i[j>>0]=1;l=k[b+48>>2]|0;m=l>>>0>134217728?134217728:l;if(m>>>0>2){n=m>>>0>8?m:8;o=KBa(n<<2)|0;i[j>>0]=0;k[h>>2]=m;k[d>>2]=n;k[d+4>>2]=o;p=o}else{k[h>>2]=m;p=d}Dyb(p|0,((i[b+53>>0]|0)==0?k[g+4>>2]|0:g)|0,l<<2|0)|0;l=i[b+52>>0]|0;i[d+12>>0]=l;g=i[j>>0]|0;if(l<<24>>24==0&(k[h>>2]|0)==1)q=(k[(g<<24>>24==0?k[d+4>>2]|0:d)>>2]|0)!=1;else q=1;if(!(g<<24>>24))OBa(k[d+4>>2]|0);if(q){D8(f,b);k[a>>2]=k[f>>2];q=f+4|0;k[a+4>>2]=k[q>>2];k[f>>2]=0;k[q>>2]=0;r=c;return}else{E8(e,b);k[a>>2]=k[e>>2];b=e+4|0;k[a+4>>2]=k[b>>2];k[e>>2]=0;k[b>>2]=0;r=c;return}}function M8(a,b){a=a|0;b=b|0;var c=0,d=0;k[a+4>>2]=0;c=a+8|0;k[c>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;d=a+16|0;k[a+12>>2]=d;k[a>>2]=37364;x=0;xa(604,a+24|0,k[b+28>>2]|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;k[a>>2]=20456;xh(a+12|0,k[d>>2]|0);d=k[c>>2]|0;if(!d)Sc(b|0);k0a(d);Sc(b|0)}function N8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=iDa(b,168,6656,0)|0;if(c){d=i[a+24>>0]|0;if(!(d&1))e=(d&255)>>>1;else e=k[a+28>>2]|0;f=(k[c+24>>2]|0)>>>0>=e>>>0;return f|0}e=iDa(b,168,6704,0)|0;if(!e){f=0;return f|0}if(!(k[e+32>>2]|0)){f=0;return f|0}if(!(cg[k[(k[e>>2]|0)+68>>2]&1023](e,0)|0)){f=1;return f|0}f=(i[e+28>>0]|0)==0;return f|0}function O8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6640,0)|0;if(!c)BBa();b=a+24|0;e=i[b>>0]|0;f=(e&1)==0;g=(e&255)>>>1;e=f?g:k[a+28>>2]|0;h=i[c+24>>0]|0;j=(h&1)==0;if((e|0)!=((j?(h&255)>>>1:k[c+28>>2]|0)|0)){d=0;return d|0}h=j?c+25|0:k[c+32>>2]|0;if(!f){d=(ZLa(k[a+32>>2]|0,h,e)|0)==0;return d|0}if(!e){d=1;return d|0}e=g;g=b+1|0;b=h;while(1){if((i[g>>0]|0)!=(i[b>>0]|0)){d=0;l=11;break}e=e+-1|0;if(!e){d=1;l=11;break}else{g=g+1|0;b=b+1|0}}if((l|0)==11)return d|0;return 0}function P8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+48|0;d=c+36|0;e=c+24|0;f=c+12|0;g=c;h=b+24|0;if(!(Tq(h,d)|0)){SQ(f,d);x=0;d=Fa(86,f|0,0,252017)|0;j=x;x=0;do if(j&1){l=Hc()|0;m=M;n=l}else{k[e>>2]=k[d>>2];k[e+4>>2]=k[d+4>>2];k[e+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;l=Ta(484,e|0,300015)|0;o=x;x=0;if(o&1){o=Hc()|0;p=M;K2a(e);m=p;n=o;break};k[a>>2]=k[l>>2];k[a+4>>2]=k[l+4>>2];k[a+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;K2a(e);K2a(f);r=c;return}while(0);K2a(f);q=m;s=n;Sc(s|0)};k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;n=i[h>>0]|0;m=(n&1)==0?(n&255)>>>1:k[b+28>>2]|0;x=0;nb(83,g|0,252078,16,m+16|0);n=x;x=0;if(n&1){t=Hc()|0;u=M;K2a(g);Sc(t|0)}x=0;Fa(88,g|0,((i[h>>0]&1)==0?h+1|0:k[b+32>>2]|0)|0,m|0)|0;m=x;x=0;if(m&1){t=Hc()|0;u=M;K2a(g);Sc(t|0)}x=0;t=Ta(484,g|0,276785)|0;u=x;x=0;if(u&1){u=Hc()|0;m=M;K2a(g);q=m;s=u;Sc(s|0)}else{k[a>>2]=k[t>>2];k[a+4>>2]=k[t+4>>2];k[a+8>>2]=k[t+8>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;K2a(g);r=c;return}}function Q8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=KBa(104)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31932;c=b+16|0;x=0;fb(283,c|0,2,1);d=x;x=0;if(d&1){d=Hc()|0;c0a(b);OBa(b);Sc(d|0)}d=c;c=b;i0a(b);k[b+20>>2]=d;e=b+24|0;b=k[e>>2]|0;k[e>>2]=c;if(!b){k[a>>2]=d;f=a+4|0;k[f>>2]=c;return}k0a(b);k[a>>2]=d;f=a+4|0;k[f>>2]=c;return}function R8(a,b){a=a|0;b=b|0;var c=0,d=0;c=i[b>>0]|0;d=(c&1)==0?(c&255)>>>1:k[b+4>>2]|0;if(d>>>0>=33){k[a>>2]=0;k[a+4>>2]=0;return}b=KBa(40)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31904;c=b+12|0;x=0;xa(752,c|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;c0a(b);OBa(b);Sc(d|0)}k[a>>2]=c;k[a+4>>2]=b;i0a(b);k[b+16>>2]=c;c=b+20|0;a=k[c>>2]|0;k[c>>2]=b;if(!a)return;k0a(a);return}function S8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c+12|0;e=c;k[a+4>>2]=0;f=a+8|0;k[f>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;g=a+16|0;k[a+12>>2]=g;k[a>>2]=37476;h=a+24|0;k[h>>2]=b;i=b>>>0<33;x=0;xa(800,e|0,h|0);h=x;x=0;if(h&1){h=Hc()|0;j=M;l=h}else{x=0;h=Fa(86,e|0,0,252095)|0;b=x;x=0;do if(!(b&1)){k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];k[d+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;pa(57,i|0,d|0,880,250928,252138);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);o=n;p=m;break}else{K2a(d);K2a(e);r=c;return}}else{m=Hc()|0;o=M;p=m}while(0);K2a(e);j=o;l=p}k[a>>2]=20456;xh(a+12|0,k[g>>2]|0);g=k[f>>2]|0;if(!g)Sc(l|0);k0a(g);Sc(l|0)}function T8(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6656,0)|0;if(!c)BBa();d=(k[c+24>>2]|0)>=(k[a+24>>2]|0);return d|0}function U8(a,b){a=a|0;b=b|0;var c=0,d=0;if(!(Vf[k[k[b>>2]>>2]&1023](b)|0)){c=1;return c|0}if((Vf[k[k[b>>2]>>2]&1023](b)|0)==4){c=1;return c|0}if((Vf[k[k[b>>2]>>2]&1023](b)|0)==7){c=1;return c|0}d=Vf[k[k[b>>2]>>2]&1023](b)|0;c=(d|0)==(Vf[k[k[a>>2]>>2]&1023](a)|0);return c|0}function V8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;switch(c|0){case 49:{QU(e);k[a>>2]=k[e>>2];c=e+4|0;k[a+4>>2]=k[c>>2];k[e>>2]=0;k[c>>2]=0;r=d;return}case 46:{k[a>>2]=k[b+4>>2];c=a+4|0;e=k[b+8>>2]|0;if(!e){k[c>>2]=0;f=Rd(4)|0;k[f>>2]=70084;Gf(f|0,17384,1289)}b=l0a(e)|0;k[c>>2]=b;if(!b){f=Rd(4)|0;k[f>>2]=70084;Gf(f|0,17384,1289)}else{r=d;return}break}default:{k[a>>2]=0;k[a+4>>2]=0;r=d;return}}}function W8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=k[b+4>>2]|0;f=k[b+8>>2]|0;if(!f){g=Rd(4)|0;k[g>>2]=70084;Gf(g|0,17384,1289)}b=l0a(f)|0;if(!b){g=Rd(4)|0;k[g>>2]=70084;Gf(g|0,17384,1289)}g=k[d>>2]|0;f=e;x=0;h=Ta(k[(k[g>>2]|0)+4>>2]|0,g|0,f|0)|0;g=x;x=0;if(g&1){i=Hc()|0;j=M;j0a(b);Sc(i|0)}if(!h){x=0;h=Ta(k[(k[e>>2]|0)+4>>2]|0,f|0,k[d>>2]|0)|0;f=x;x=0;if(f&1){i=Hc()|0;j=M;j0a(b);Sc(i|0)}if(h){h=k[d>>2]|0;i=k[d+4>>2]|0;if(!i){l=h;m=0;n=11}else{h0a(i);l=h;m=i;n=11}}else n=17}else{h0a(b);l=e;m=b;n=11}a:do if((n|0)==11){if((l|0)!=0?(e=iDa(l,168,6656,0)|0,(e|0)!=0):0){i=e;if(!m){o=i;p=0}else{h0a(m);q=i;r=m;n=16}}else if(!m){n=17;break}else{q=0;r=0;n=16}if((n|0)==16){j0a(m);o=q;p=r}j0a(b);if(o){b:do if((c+-39|0)>>>0>=6){switch(c|0){case 27:case 28:case 29:case 46:{break b;break}default:{}}k[a>>2]=0;k[a+4>>2]=0;s=p;n=26;break a}while(0);k[a>>2]=o;k[a+4>>2]=p;if(!p)return;else{h0a(p);t=p;break}}else{u=p;n=19}}while(0);if((n|0)==17){j0a(b);u=0;n=19}if((n|0)==19){k[a>>2]=0;k[a+4>>2]=0;s=u;n=26}if((n|0)==26)if(!s)return;else t=s;j0a(t);return}function X8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+48|0;b=c+16|0;d=c;x=0;fb(140,d|0,278976,6);e=x;x=0;if(e&1){e=Hc()|0;f=M;g=e;Sc(g|0)}x=0;e=Ba(563,44)|0;h=x;x=0;do if(h&1){i=Hc()|0;j=M;l=i;m=19}else{k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=31848;i=e+12|0;x=0;fb(247,i|0,8,0);n=x;x=0;if(n&1){n=Hc()|0;o=M;c0a(e);OBa(e);j=o;l=n;m=19;break}n=i;i0a(e);k[e+16>>2]=n;i=e+20|0;o=k[i>>2]|0;k[i>>2]=e;if(o)k0a(o);x=0;xa(604,b|0,d|0);o=x;x=0;if(o&1){o=Hc()|0;p=o;q=M}else{k[b+12>>2]=n;k[b+16>>2]=e;h0a(e);k[b+20>>2]=0;k[a>>2]=0;n=a+4|0;k[n>>2]=0;k[a+8>>2]=0;x=0;o=Ba(563,24)|0;i=x;x=0;do if(i&1){s=Hc()|0;t=s;u=M}else{k[n>>2]=o;k[a>>2]=o;k[a+8>>2]=o+24;x=0;xa(604,o|0,b|0);s=x;x=0;if(s&1){s=Hc()|0;v=M;OBa(o);t=s;u=v;break}k[o+12>>2]=k[b+12>>2];v=k[b+16>>2]|0;k[o+16>>2]=v;if(!v)w=0;else{h0a(v);w=k[b+16>>2]|0}k[o+20>>2]=k[b+20>>2];k[n>>2]=o+24;if(!w){K2a(b);j0a(e);K2a(d);r=c;return}j0a(w);K2a(b);j0a(e);K2a(d);r=c;return}while(0);o=k[b+16>>2]|0;if(o)j0a(o);K2a(b);p=t;q=u}j0a(e);y=q;z=p}while(0);if((m|0)==19){y=j;z=l}K2a(d);f=y;g=z;Sc(g|0)}function Y8(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6656,0)|0;if(!c)BBa();d=(k[c+24>>2]|0)==(k[a+24>>2]|0);return d|0}function Z8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;b=r;r=r+96|0;d=b+84|0;e=b+72|0;f=b+32|0;g=b+16|0;h=b;q2a(e,329672,0);x=0;pa(57,(c|0)!=0|0,e|0,938,250928,252189);i=x;x=0;if(i&1){i=Hc()|0;j=M;K2a(e);l=j;m=i;Sc(m|0)}K2a(e);switch(k[c+24>>2]|0){case 114:{k[a>>2]=1;k[a+32>>2]=1;r=b;return}case 115:{k[a>>2]=0;k[a+32>>2]=1;r=b;return}default:{b=f;a=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(a|0));b=f+20|0;a=f+24|0;k[a>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;c=f+4|0;e=c+-4|0;i=c+16|0;j=f+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[f+4>>2]=20924;k[f>>2]=20888;k[b>>2]=20948;x=0;fb(140,h|0,252278,47);d=x;x=0;if(d&1){d=Hc()|0;n=M;o=d}else{k[g>>2]=21048;d=g+4|0;x=0;xa(604,d|0,h|0);p=x;x=0;if(p&1){p=Hc()|0;q=M;s=p}else{x=0;p=Ta(494,f|0,g|0)|0;f=x;x=0;if(!(f&1)){x=0;nb(87,p|0,252189,250928,944);x=0}p=Hc()|0;f=M;k[g>>2]=21048;K2a(d);q=f;s=p}K2a(h);n=q;o=s}k[c>>2]=20980;k[e>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[a>>2]|0;if(b){x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(j)k[a>>2]=0}l=n;m=o;Sc(m|0)}}}function _8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;switch(c|0){case 49:{QU(e);k[a>>2]=k[e>>2];c=e+4|0;k[a+4>>2]=k[c>>2];k[e>>2]=0;k[c>>2]=0;r=d;return}case 45:{k[a>>2]=k[b+4>>2];c=a+4|0;e=k[b+8>>2]|0;if(!e){k[c>>2]=0;f=Rd(4)|0;k[f>>2]=70084;Gf(f|0,17384,1289)}b=l0a(e)|0;k[c>>2]=b;if(!b){f=Rd(4)|0;k[f>>2]=70084;Gf(f|0,17384,1289)}else{r=d;return}break}default:{k[a>>2]=0;k[a+4>>2]=0;r=d;return}}}function $8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=Vf[k[k[b>>2]>>2]&1023](b)|0;b=k[d>>2]|0;if((e|0)!=(Vf[k[k[b>>2]>>2]&1023](b)|0)){k[a>>2]=0;k[a+4>>2]=0;return}switch(c|0){case 25:case 26:case 39:case 40:case 41:case 42:case 43:case 44:break;default:{k[a>>2]=0;k[a+4>>2]=0;return}}k[a>>2]=k[d>>2];c=k[d+4>>2]|0;k[a+4>>2]=c;if(!c)return;h0a(c);return}function a9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;if(cg[k[(k[a>>2]|0)+20>>2]&1023](a,b)|0){c=1;return c|0}if(!(Vf[k[k[b>>2]>>2]&1023](b)|0)){d=iDa(b,168,6592,0)|0;if(!d)BBa();c=(k[d+28>>2]|0)==2;return c|0}if((Vf[k[k[b>>2]>>2]&1023](b)|0)!=7){c=0;return c|0}d=k[a+24>>2]|0;e=Vf[k[(k[d>>2]|0)+16>>2]&1023](d)|0;d=e+36|0;do if(i[a+28>>0]|0){f=e+40|0;g=k[f>>2]|0;h=k[d>>2]|0;if(g-h>>2>>>0<2){c=0;return c|0}else{j=f;l=h+4|0;m=g;break}}else{g=e+40|0;j=g;l=k[d>>2]|0;m=k[g>>2]|0}while(0);d=iDa(b,168,6672,0)|0;if(!d)BBa();b=k[d+24>>2]|0;a:do if((l|0)==(m|0))n=m;else{d=l;while(1){if((k[d>>2]|0)==(b|0)){n=d;break a}d=d+4|0;if((d|0)==(m|0)){n=m;break}}}while(0);c=(n|0)!=(k[j>>2]|0);return c|0}function b9(a,b){a=a|0;b=b|0;var c=0;if(cg[k[(k[a>>2]|0)+4>>2]&1023](a,b)|0){c=1;return c|0}if(!(Vf[k[k[b>>2]>>2]&1023](b)|0)){c=1;return c|0}c=(Vf[k[k[b>>2]>>2]&1023](b)|0)==7;return c|0}function c9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;b=r;r=r+16|0;d=b;if((c|0)==49){QU(d);k[a>>2]=k[d>>2];c=d+4|0;k[a+4>>2]=k[c>>2];k[d>>2]=0;k[c>>2]=0;r=b;return}else{k[a>>2]=0;k[a+4>>2]=0;r=b;return}}function d9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+32|0;e=d+24|0;f=d+16|0;g=d;if((c|0)!=49){k[a>>2]=0;k[a+4>>2]=0;r=d;return}switch(k[b+24>>2]|0){case 1:{k[a>>2]=0;k[a+4>>2]=0;r=d;return}case 2:{QU(e);k[a>>2]=k[e>>2];c=e+4|0;k[a+4>>2]=k[c>>2];k[e>>2]=0;k[c>>2]=0;r=d;return}case 0:{if(!(i[b+28>>0]|0)){QU(f);k[a>>2]=k[f>>2];b=f+4|0;k[a+4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;r=d;return}else{k[a>>2]=0;k[a+4>>2]=0;r=d;return}break}default:{q2a(g,329672,0);x=0;pa(57,0,g|0,1009,250928,252326);b=x;x=0;if(b&1){b=Hc()|0;K2a(g);Sc(b|0)}K2a(g);k[a>>2]=0;k[a+4>>2]=0;r=d;return}}}function e9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=k[b+24>>2]|0;b=k[c>>2]|0;e=b;if((b|0)!=0?(f=iDa(b,168,6688,0)|0,(f|0)!=0):0){ng[k[(k[f>>2]|0)+104>>2]&255](a,f,d,0);return}k[a>>2]=e;e=k[c+4>>2]|0;k[a+4>>2]=e;if(!e)return;h0a(e);return}function f9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+32|0;d=c+12|0;e=c;switch(k[b+24>>2]|0){case 0:{q2a(d,252416,8);x=0;f=Ta(484,d|0,((i[b+28>>0]|0)!=0?252425:252433)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;g=M;K2a(d);h=g;j=b;Sc(j|0)}else{k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(d);r=c;return}break}case 1:{q2a(a,252437,8);r=c;return}case 2:{q2a(a,293567,6);r=c;return}default:{q2a(e,329672,0);x=0;pa(57,0,e|0,1037,250928,252446);d=x;x=0;if(d&1){d=Hc()|0;f=M;K2a(e);h=f;j=d;Sc(j|0)}else{K2a(e);q2a(a,329672,0);r=c;return}}}}function g9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=Vf[k[k[b>>2]>>2]&1023](b)|0;if((g|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){h=0;r=c;return h|0}g=iDa(b,168,6704,0)|0;if(!g)BBa();b=k[g+32>>2]|0;j=k[a+32>>2]|0;if((b|0)!=0^(j|0)!=0){h=0;r=c;return h|0}if((b|0)==2^(j|0)==2){h=0;r=c;return h|0}switch(k[g+24>>2]|0){case 0:{if((k[a+24>>2]|0)!=0?(i[g+28>>0]|0)!=0:0){h=0;r=c;return h|0}if(!(i[g+28>>0]|0)){j=a+36|0;b=(k[j>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,b|0,d|0,588,285183,276209);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}K2a(d);b=k[j>>2]|0;j=k[(k[b>>2]|0)+4>>2]|0;l=g+36|0;m=(k[l>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,m|0,d|0,588,285183,276209);m=x;x=0;if(m&1){m=Hc()|0;K2a(d);Sc(m|0)}K2a(d);if(!(cg[j&1023](b,k[l>>2]|0)|0)){h=0;r=c;return h|0}if(Vf[k[(k[g>>2]|0)+36>>2]&1023](g)|0){h=1;r=c;return h|0}if(Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0){h=0;r=c;return h|0}l=k[g+80>>2]|0;b=k[a+80>>2]|0;a:do if((l|0)==(b|0)){j=g+48|0;m=a+48|0;n=l;while(1){n=n+-1|0;if((n|0)<=-1){o=0;break a}p=k[j+(n<<2)>>2]|0;q=k[m+(n<<2)>>2]|0;if((p|0)!=(q|0)){s=p;t=q;break}}o=s>>>0>t>>>0?1:-1}else o=l>>>0>b>>>0?1:-1;while(0);h=(o|0)>-1;r=c;return h|0}break}case 1:{if((k[a+24>>2]|0)!=1){h=0;r=c;return h|0}break}default:{}}o=a+24|0;b=k[o>>2]|0;l=a+36|0;t=(k[l>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,t|0,d|0,588,285183,276209);t=x;x=0;if(t&1){t=Hc()|0;K2a(d);Sc(t|0)}K2a(d);t=k[l>>2]|0;l=t;if((t|0)!=0?(s=iDa(t,168,6688,0)|0,(s|0)!=0):0)ng[k[(k[s>>2]|0)+104>>2]&255](e,s,b,0);else u=30;if((u|0)==30?(k[e>>2]=l,l=k[a+40>>2]|0,k[e+4>>2]=l,(l|0)!=0):0)h0a(l);l=k[e>>2]|0;b=k[(k[l>>2]|0)+24>>2]|0;s=k[o>>2]|0;o=g+36|0;t=k[o>>2]|0;x=0;fb(140,d|0,329672,0);n=x;x=0;do if(!(n&1)){x=0;pa(57,(t|0)!=0|0,d|0,588,285183,276209);m=x;x=0;if(m&1){m=Hc()|0;j=M;K2a(d);v=j;w=m;u=47;break}K2a(d);m=k[o>>2]|0;j=m;if((m|0)!=0?(q=iDa(m,168,6688,0)|0,(q|0)!=0):0){x=0;nb(k[(k[q>>2]|0)+104>>2]|0,f|0,q|0,s|0,0);q=x;x=0;if(q&1){u=46;break}}else u=38;if((u|0)==38?(k[f>>2]=j,j=k[g+40>>2]|0,k[f+4>>2]=j,(j|0)!=0):0)h0a(j);x=0;j=Ta(b|0,l|0,k[f>>2]|0)|0;q=x;x=0;if(q&1){q=Hc()|0;m=M;p=k[f+4>>2]|0;if(!p){y=m;z=q;break}j0a(p);y=m;z=q;break}q=k[f+4>>2]|0;if(q)j0a(q);q=k[e+4>>2]|0;if(q)j0a(q);if(j){h=0;r=c;return h|0}j=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;if(j^(Vf[k[(k[g>>2]|0)+36>>2]&1023](g)|0)){h=0;r=c;return h|0}if(Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0){h=1;r=c;return h|0}j=k[a+80>>2]|0;if((j|0)!=(k[g+80>>2]|0)){h=0;r=c;return h|0}q=a+48|0;m=q+(j<<2)|0;if((q|0)==(m|0)){h=1;r=c;return h|0}j=q;q=g+48|0;while(1){if((k[j>>2]|0)!=(k[q>>2]|0)){h=0;u=60;break}j=j+4|0;if((j|0)==(m|0)){h=1;u=60;break}else q=q+4|0}if((u|0)==60){r=c;return h|0}}else u=46;while(0);if((u|0)==46){h=Hc()|0;v=M;w=h;u=47}if((u|0)==47){y=v;z=w}w=k[e+4>>2]|0;if(!w)Sc(z|0);j0a(w);Sc(z|0);return 0}function h9(a,b){a=a|0;b=b|0;var c=0,d=0;if(cg[k[(k[a>>2]|0)+4>>2]&1023](a,b)|0){c=1;return c|0}d=Vf[k[k[b>>2]>>2]&1023](b)|0;if((d|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){c=0;return c|0}d=iDa(b,168,6704,0)|0;if(!d)BBa();if((k[d+24>>2]|0)!=(k[a+24>>2]|0)){c=0;return c|0}if(!(k[a+32>>2]|0)){c=0;return c|0}else return (k[d+32>>2]|0)!=0|0;return 0}function i9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+16|0;d=c;e=Vf[k[k[b>>2]>>2]&1023](b)|0;if((e|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){f=0;r=c;return f|0}e=iDa(b,168,6704,0)|0;if(!e)BBa();if((k[a+24>>2]|0)!=(k[e+24>>2]|0)){f=0;r=c;return f|0}if((i[a+28>>0]|0)!=0^(i[e+28>>0]|0)!=0){f=0;r=c;return f|0}b=k[e+32>>2]|0;g=k[a+32>>2]|0;if((b|0)!=0^(g|0)!=0){f=0;r=c;return f|0}if((b|0)==2^(g|0)==2){f=0;r=c;return f|0}g=Vf[k[(k[e>>2]|0)+36>>2]&1023](e)|0;if(g^(Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0)){f=0;r=c;return f|0}g=e+36|0;b=(k[g>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,b|0,d|0,588,285183,276209);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}K2a(d);b=k[g>>2]|0;g=k[(k[b>>2]|0)+24>>2]|0;h=a+36|0;j=(k[h>>2]|0)!=0;q2a(d,329672,0);x=0;pa(57,j|0,d|0,588,285183,276209);j=x;x=0;if(j&1){j=Hc()|0;K2a(d);Sc(j|0)}K2a(d);if(cg[g&1023](b,k[h>>2]|0)|0){f=0;r=c;return f|0}if(Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0){f=1;r=c;return f|0}h=k[a+80>>2]|0;if((h|0)!=(k[e+80>>2]|0)){f=0;r=c;return f|0}b=a+48|0;a=b+(h<<2)|0;if((b|0)==(a|0)){f=1;r=c;return f|0}h=b;b=e+48|0;while(1){if((k[h>>2]|0)!=(k[b>>2]|0)){f=0;l=20;break}h=h+4|0;if((h|0)==(a|0)){f=1;l=20;break}else b=b+4|0}if((l|0)==20){r=c;return f|0}return 0}function j9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+96|0;d=c+89|0;e=c+88|0;f=c+84|0;g=c+72|0;h=c+16|0;l=c;m=c+56|0;n=c+52|0;o=c+48|0;p=c+44|0;q=c+32|0;if(Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0){s=32;r=c;return s|0}k[l>>2]=0;t=l+8|0;k[t>>2]=1;u=l+12|0;i[u>>0]=0;v=l+13|0;i[v>>0]=1;w=k[a+80>>2]|0;y=w>>>0>134217728;z=y?134217728:w;if(z>>>0>2){A=z>>>0>8?z:8;B=KBa(A<<2)|0;k[B>>2]=k[l>>2];i[v>>0]=0;k[t>>2]=z;k[l>>2]=A;k[l+4>>2]=B;C=B}else{k[t>>2]=z;C=l}Dyb(C|0,a+48|0,(y?536870912:w<<2)|0)|0;i[u>>0]=0;if(!(i[v>>0]|0))D=k[l+4>>2]|0;else D=l;u=(k[t>>2]|0)+-1|0;a:do if(u){w=u;do{if(k[D+(w<<2)>>2]|0)break a;k[t>>2]=w;w=w+-1|0}while((w|0)!=0)}while(0);b:do if(!(k[a+32>>2]|0)){t=a+36|0;D=k[t>>2]|0;x=0;fb(140,g|0,329672,0);u=x;x=0;do if(!(u&1)){x=0;pa(57,(D|0)!=0|0,g|0,588,285183,276209);w=x;x=0;if(!(w&1)){K2a(g);w=k[t>>2]|0;x=0;y=Ta(k[(k[w>>2]|0)+28>>2]|0,w|0,b|0)|0;w=x;x=0;if(w&1)break;else{E=y;F=15;break b}}else{y=Hc()|0;w=M;K2a(g);G=w;H=y;break b}}while(0);t=Hc()|0;G=M;H=t}else{E=1;F=15}while(0);do if((F|0)==15){k[h>>2]=0;g=h+8|0;k[g>>2]=1;b=h+12|0;i[b>>0]=0;a=h+13|0;i[a>>0]=1;k[f>>2]=E;x=0;fb(201,h|0,l|0,f|0);t=x;x=0;if(t&1){t=Hc()|0;D=M;if(i[a>>0]|0){G=D;H=t;break}OBa(k[h+4>>2]|0);G=D;H=t;break}if(!(i[v>>0]|0))OBa(k[l+4>>2]|0);k[n>>2]=31;k[o>>2]=32;k[p>>2]=32;k[m>>2]=h;k[m+4>>2]=n;k[m+8>>2]=o;k[m+12>>2]=p;x=0;fb(293,h|0,m|0,e|0);t=x;x=0;do if(!(t&1)?(D=i[b>>0]|0,u=k[g>>2]|0,x=0,fb(140,q|0,252514,33),y=x,x=0,!(y&1)):0){x=0;pa(57,u>>>0<2|D<<24>>24!=0|0,q|0,1119,250928,252548);D=x;x=0;if(D&1){D=Hc()|0;u=M;K2a(q);I=u;J=D;break}K2a(q);D=j[b>>1]|0;if((D&255)<<24>>24){x=0;va(1502,d|0);x=0;F=31;break}u=(D&65535)<256;D=k[h+4>>2]|0;y=k[(u?D:h)>>2]|0;if(u)OBa(D);s=y;r=c;return s|0}else F=31;while(0);if((F|0)==31){b=Hc()|0;I=M;J=b}if(i[a>>0]|0){K=I;L=J;Sc(L|0)}OBa(k[h+4>>2]|0);K=I;L=J;Sc(L|0)}while(0);if(i[v>>0]|0){K=G;L=H;Sc(L|0)}OBa(k[l+4>>2]|0);K=G;L=H;Sc(L|0);return 0}function k9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;c=r;r=r+336|0;d=c+312|0;e=c+308|0;f=c+304|0;g=c+324|0;h=c+292|0;j=c+152|0;l=c+288|0;m=c+168|0;n=c+136|0;o=c+96|0;p=c+280|0;q=c+80|0;s=c+272|0;t=c+216|0;u=c+200|0;v=c+184|0;w=c+40|0;y=c;if(Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0){k[a>>2]=1;k[a+32>>2]=1;r=c;return}k[j>>2]=0;z=j+8|0;k[z>>2]=1;A=j+12|0;i[A>>0]=0;B=j+13|0;i[B>>0]=1;C=b+36|0;D=k[C>>2]|0;x=0;fb(140,h|0,329672,0);E=x;x=0;a:do if(!(E&1)){x=0;pa(57,(D|0)!=0|0,h|0,588,285183,276209);F=x;x=0;if(F&1){F=Hc()|0;G=M;K2a(h);H=G;I=F;J=18;break}K2a(h);F=k[C>>2]|0;x=0;G=Ba(k[(k[F>>2]|0)+44>>2]|0,F|0)|0;F=x;x=0;if(!(F&1)){b:do if(!G){F=i[B>>0]|0;do if(F<<24>>24==0?(k[j>>2]|0)==0:0){x=0;K=Ba(563,4)|0;L=x;x=0;if(L&1){L=Hc(0)|0;Fg(L)}else{L=j+4|0;N=k[L>>2]|0;Dyb(K|0,N|0,k[z>>2]<<2|0)|0;OBa(N);k[z>>2]=1;k[j>>2]=1;k[L>>2]=K;O=i[B>>0]|0;break}}else J=12;while(0);if((J|0)==12){k[z>>2]=1;O=F}if(!(O<<24>>24))P=k[j+4>>2]|0;else P=j;k[P>>2]=1;i[A>>0]=0;Q=j}else{if(G>>>0<32){k[l>>2]=32/(G>>>0)|0;K=b+48|0;k[m>>2]=0;L=m+8|0;k[L>>2]=1;N=m+12|0;i[N>>0]=0;R=m+13|0;i[R>>0]=1;S=k[b+80>>2]|0;T=S>>>0>134217728;U=T?134217728:S;do if(U>>>0>2){V=U>>>0>8?U:8;x=0;W=Ba(563,V<<2|0)|0;X=x;x=0;if(X&1){X=Hc()|0;H=M;I=X;J=18;break a}else{k[W>>2]=k[m>>2];i[R>>0]=0;k[L>>2]=U;k[m>>2]=V;k[m+4>>2]=W;Y=k[m+4>>2]|0;break}}else{k[L>>2]=U;Y=m}while(0);Dyb(Y|0,K|0,(T?536870912:S<<2)|0)|0;i[N>>0]=0;if(!(i[R>>0]|0))Z=k[m+4>>2]|0;else Z=m;U=(k[L>>2]|0)+-1|0;c:do if(U){F=U;do{if(k[Z+(F<<2)>>2]|0)break c;k[L>>2]=F;F=F+-1|0}while((F|0)!=0)}while(0);k[e>>2]=(k[l>>2]|0)+-1;x=0;fb(221,j|0,m|0,e|0);L=x;x=0;if(!(L&1)?(k[f>>2]=l,x=0,fb(294,j|0,f|0,g|0),L=x,x=0,!(L&1)):0){if(!(i[R>>0]|0))OBa(k[m+4>>2]|0);Q=j;break}L=Hc()|0;U=M;if(i[R>>0]|0){_=U;$=L;break a}OBa(k[m+4>>2]|0);_=U;$=L;break a}L=b+48|0;k[n>>2]=0;U=n+8|0;k[U>>2]=1;N=n+12|0;i[N>>0]=0;S=n+13|0;i[S>>0]=1;T=k[b+80>>2]|0;K=T>>>0>134217728;F=K?134217728:T;do if(F>>>0>2){W=F>>>0>8?F:8;x=0;V=Ba(563,W<<2|0)|0;X=x;x=0;if(X&1){X=Hc()|0;H=M;I=X;J=18;break a}else{k[V>>2]=k[n>>2];i[S>>0]=0;k[U>>2]=F;k[n>>2]=W;k[n+4>>2]=V;aa=k[n+4>>2]|0;break}}else{k[U>>2]=F;aa=n}while(0);Dyb(aa|0,L|0,(K?536870912:T<<2)|0)|0;i[N>>0]=0;if(!(i[S>>0]|0))ba=k[n+4>>2]|0;else ba=n;F=(k[U>>2]|0)+-1|0;d:do if(F){R=F;do{if(k[ba+(R<<2)>>2]|0)break d;k[U>>2]=R;R=R+-1|0}while((R|0)!=0)}while(0);U=k[C>>2]|0;x=0;fb(140,d|0,329672,0);F=x;x=0;do if(!(F&1)){x=0;pa(57,(U|0)!=0|0,d|0,588,285183,276209);N=x;x=0;if(N&1){N=Hc()|0;T=M;K2a(d);ca=T;da=N;break}K2a(d);N=k[C>>2]|0;x=0;xa(k[(k[N>>2]|0)+40>>2]|0,o|0,N|0);N=x;x=0;if(!(N&1)?(x=0,fb(295,j|0,n|0,o|0),N=x,x=0,!(N&1)):0){if(i[S>>0]|0){Q=j;break b}OBa(k[n+4>>2]|0);Q=j;break b}else J=54}else J=54;while(0);if((J|0)==54){U=Hc()|0;ca=M;da=U}if(i[S>>0]|0){_=ca;$=da;break a}OBa(k[n+4>>2]|0);_=ca;$=da;break a}while(0);k[q>>2]=1;k[q+8>>2]=1;i[q+12>>0]=0;G=q+13|0;i[G>>0]=1;k[s>>2]=256;k[p>>2]=q;k[p+4>>2]=s;x=0;U=Ta(577,Q|0,p|0)|0;F=x;x=0;if(F&1){F=Hc()|0;N=M;if(i[G>>0]|0){_=N;$=F;break}OBa(k[q+4>>2]|0);_=N;$=F;break}if(!(i[G>>0]|0))OBa(k[q+4>>2]|0);if(U){k[w>>2]=1;k[w+32>>2]=1;k[y>>2]=0;U=y+32|0;k[U>>2]=1;NB(y,Q,d,e);G=k[U>>2]|0;e:do if((G|0)==1){U=1;while(1){U=U+-1|0;if((U|0)<=-1){ea=0;break e}F=k[w+(U<<2)>>2]|0;N=k[y+(U<<2)>>2]|0;if((F|0)!=(N|0)){fa=F;ga=N;break}}ea=fa>>>0>ga>>>0?1:-1}else ea=(G|0)==0?1:-1;while(0);G=a;U=(ea|0)<0?y:w;S=G+40|0;do{k[G>>2]=k[U>>2];G=G+4|0;U=U+4|0}while((G|0)<(S|0));if(!(i[B>>0]|0))OBa(k[j+4>>2]|0);r=c;return}x=0;xa(731,t|0,3);U=x;x=0;if(!(U&1)){x=0;fb(140,v|0,252627,28);U=x;x=0;if(U&1){U=Hc()|0;ha=M;ia=U}else{k[u>>2]=21048;U=u+4|0;x=0;xa(604,U|0,v|0);G=x;x=0;if(G&1){G=Hc()|0;ja=M;ka=G}else{x=0;G=Ta(564,t|0,u|0)|0;S=x;x=0;if(!(S&1)){x=0;nb(122,G|0,252656,250928,1140);x=0}G=Hc()|0;S=M;k[u>>2]=21048;K2a(U);ja=S;ka=G}K2a(v);ha=ja;ia=ka}G=t+20|0;k[G>>2]=31332;k[t>>2]=31296;k[t+36>>2]=31356;K2a(t+8|0);k[G>>2]=31388;k[G+-20>>2]=31416;k[G+16>>2]=31440;K2a(t+24|0);k[t+36>>2]=20796;G=t+40|0;S=k[G>>2]|0;if(S){x=0;U=Ba(k[(k[S>>2]|0)+16>>2]|0,S|0)|0;S=x;x=0;if(S&1){S=Hc(0)|0;Fg(S)}if(U)k[G>>2]=0}_=ha;$=ia}else J=17}else J=17}else J=17;while(0);if((J|0)==17){ia=Hc()|0;H=M;I=ia;J=18}if((J|0)==18){_=H;$=I}if(i[B>>0]|0)Sc($|0);OBa(k[j+4>>2]|0);Sc($|0)}function l9(a){a=a|0;var b=0,c=0;if((k[a+24>>2]|0)!=1){b=1;return b|0}c=Vf[k[(k[a>>2]|0)+36>>2]&1023](a)|0;b=c?2:1;return b|0}function m9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;d=r;r=r+80|0;e=d+72|0;f=d+60|0;g=d+48|0;h=d+36|0;j=d+24|0;l=d+12|0;m=d;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;a:do switch(k[b+32>>2]|0){case 2:{x=0;Ta(496,a|0,293729)|0;n=x;x=0;if(n&1)o=3;else o=24;break}case 0:{n=b+36|0;p=k[n>>2]|0;x=0;fb(140,f|0,329672,0);q=x;x=0;if(!(q&1)){x=0;pa(57,(p|0)!=0|0,f|0,588,285183,276209);p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(f);s=q;t=p;break a}K2a(f);p=k[n>>2]|0;x=0;fb(k[(k[p>>2]|0)+76>>2]|0,h|0,p|0,c|0);p=x;x=0;if(!(p&1)){x=0;p=Ta(484,h|0,316822)|0;n=x;x=0;if(n&1){n=Hc()|0;q=M;K2a(h);u=q;v=n;K2a(a);Sc(v|0)};k[g>>2]=k[p>>2];k[g+4>>2]=k[p+4>>2];k[g+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}x=0;xa(603,a|0,0);p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)};k[a>>2]=k[g>>2];k[a+4>>2]=k[g+4>>2];k[a+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);K2a(h);x=0;p=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;n=x;x=0;if(!(n&1)){do if(!p){x=0;nb(103,j|0,b+48|0,0,e|0);n=x;x=0;if(n&1){o=3;break a}n=i[j>>0]|0;q=(n&1)==0;x=0;Fa(88,a|0,(q?j+1|0:k[j+8>>2]|0)|0,(q?(n&255)>>>1:k[j+4>>2]|0)|0)|0;n=x;x=0;if(!(n&1)){K2a(j);break}n=Hc()|0;q=M;K2a(j);u=q;v=n;K2a(a);Sc(v|0)}while(0);x=0;Ta(484,a|0,316824)|0;p=x;x=0;if(!(p&1))o=24;else o=3}else o=3}else o=3}else o=3;break}default:{x=0;Ta(496,a|0,293723)|0;p=x;x=0;if(p&1)o=3;else o=24}}while(0);if((o|0)==24){if(c){r=d;return}x=0;xa(805,m|0,b|0);b=x;x=0;if(b&1)o=3;else{x=0;b=Fa(86,m|0,0,324196)|0;c=x;x=0;do if(c&1){j=Hc()|0;w=M;y=j}else{k[l>>2]=k[b>>2];k[l+4>>2]=k[b+4>>2];k[l+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;j=i[l>>0]|0;e=(j&1)==0;x=0;Fa(88,a|0,(e?l+1|0:k[l+8>>2]|0)|0,(e?(j&255)>>>1:k[l+4>>2]|0)|0)|0;j=x;x=0;if(j&1){j=Hc()|0;e=M;K2a(l);w=e;y=j;break}K2a(l);K2a(m);r=d;return}while(0);K2a(m);u=w;v=y;K2a(a);Sc(v|0)}}if((o|0)==3){o=Hc()|0;s=M;t=o}u=s;v=t;K2a(a);Sc(v|0)}function n9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+64|0;e=d+48|0;f=d+36|0;g=d+24|0;h=d+12|0;j=d;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;a:do switch(k[b+32>>2]|0){case 2:{x=0;Ta(496,a|0,293729)|0;l=x;x=0;if(l&1)m=3;else m=24;break}case 0:{l=b+36|0;n=k[l>>2]|0;x=0;fb(140,f|0,329672,0);o=x;x=0;if(!(o&1)){x=0;pa(57,(n|0)!=0|0,f|0,588,285183,276209);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(f);p=o;q=n;break a}K2a(f);n=k[l>>2]|0;x=0;fb(k[(k[n>>2]|0)+80>>2]|0,h|0,n|0,0);n=x;x=0;if(!(n&1)){x=0;n=Ta(484,h|0,316822)|0;l=x;x=0;if(l&1){l=Hc()|0;o=M;K2a(h);s=o;t=l;K2a(a);Sc(t|0)};k[g>>2]=k[n>>2];k[g+4>>2]=k[n+4>>2];k[g+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}x=0;xa(603,a|0,0);n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)};k[a>>2]=k[g>>2];k[a+4>>2]=k[g+4>>2];k[a+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);K2a(h);x=0;n=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;l=x;x=0;if(!(l&1)){do if(!n){x=0;nb(103,j|0,b+48|0,0,e|0);l=x;x=0;if(l&1){m=3;break a}l=i[j>>0]|0;o=(l&1)==0;x=0;Fa(88,a|0,(o?j+1|0:k[j+8>>2]|0)|0,(o?(l&255)>>>1:k[j+4>>2]|0)|0)|0;l=x;x=0;if(!(l&1)){K2a(j);break}l=Hc()|0;o=M;K2a(j);s=o;t=l;K2a(a);Sc(t|0)}while(0);x=0;Ta(484,a|0,316824)|0;n=x;x=0;if(!(n&1))m=24;else m=3}else m=3}else m=3}else m=3;break}default:{x=0;Ta(496,a|0,293723)|0;n=x;x=0;if(n&1)m=3;else m=24}}while(0);if((m|0)==24){if(!c){r=d;return}if(k[b+24>>2]|0){r=d;return}x=0;Ta(484,a|0,252715)|0;b=x;x=0;if(b&1)m=3;else{r=d;return}}if((m|0)==3){m=Hc()|0;p=M;q=m}s=p;t=q;K2a(a);Sc(t|0)}function o9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0;c=r;r=r+192|0;d=c+168|0;e=c+144|0;f=c+128|0;g=c+104|0;h=c+88|0;i=c+80|0;j=c+64|0;l=c+52|0;m=c+40|0;n=c+28|0;o=c+16|0;p=c+4|0;q=c;k[a>>2]=0;s=a+4|0;k[s>>2]=0;k[a+8>>2]=0;t=b+32|0;if((k[t>>2]|0)==2){r=c;return}x=0;fb(140,f|0,278976,6);u=x;x=0;a:do if(u&1)v=68;else{x=0;w=Ba(563,44)|0;y=x;x=0;do if(y&1){z=Hc()|0;A=M;B=z;v=70}else{k[w+4>>2]=0;k[w+8>>2]=0;k[w>>2]=31848;z=w+12|0;x=0;fb(247,z|0,256,0);C=x;x=0;if(C&1){C=Hc()|0;D=M;c0a(w);OBa(w);A=D;B=C;v=70;break}C=z;i0a(w);k[w+16>>2]=C;z=w+20|0;D=k[z>>2]|0;k[z>>2]=w;if(D)k0a(D);x=0;xa(604,e|0,f|0);D=x;x=0;b:do if(D&1){z=Hc()|0;E=z;F=M}else{z=e+12|0;k[z>>2]=C;G=e+16|0;k[G>>2]=w;h0a(w);H=e+20|0;k[H>>2]=0;I=k[s>>2]|0;J=a+8|0;do if(I>>>0<(k[J>>2]|0)>>>0){k[I>>2]=k[e>>2];k[I+4>>2]=k[e+4>>2];k[I+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[I+12>>2]=k[z>>2];k[I+16>>2]=k[G>>2];k[z>>2]=0;k[G>>2]=0;k[I+20>>2]=k[H>>2];k[s>>2]=(k[s>>2]|0)+24}else{x=0;xa(799,a|0,e|0);K=x;x=0;if(!(K&1)){K=k[G>>2]|0;if(!K)break;j0a(K);break}K=Hc()|0;L=M;N=k[G>>2]|0;if(N)j0a(N);K2a(e);E=K;F=L;break b}while(0);K2a(e);j0a(w);K2a(f);x=0;G=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;H=x;x=0;if(H&1){v=68;break a}if(!G){r=c;return}if(k[b+24>>2]|0){r=c;return}x=0;fb(140,h|0,272442,4);G=x;x=0;if(G&1){v=68;break a}G=b+36|0;H=k[G>>2]|0;x=0;fb(140,d|0,329672,0);I=x;x=0;do if(!(I&1)){x=0;pa(57,(H|0)!=0|0,d|0,588,285183,276209);z=x;x=0;if(z&1){z=Hc()|0;L=M;K2a(d);O=L;P=z;v=78;break}K2a(d);z=k[G>>2]|0;L=k[b+40>>2]|0;K=(L|0)==0;if(!K)h0a(L);k[j>>2]=0;N=j+4|0;k[N>>2]=0;k[j+8>>2]=0;x=0;Q=Ba(563,8)|0;R=x;x=0;if(R&1){R=Hc()|0;S=R;T=M}else{k[N>>2]=Q;k[j>>2]=Q;k[j+8>>2]=Q+8;k[Q>>2]=z;k[Q+4>>2]=L;if(!K)h0a(L);k[N>>2]=Q+8;x=0;z=Ba(563,44)|0;R=x;x=0;do if(R&1){U=Hc()|0;V=M;W=U;v=81}else{k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=31848;U=z+12|0;x=0;fb(247,U|0,256,0);X=x;x=0;if(X&1){X=Hc()|0;Y=M;c0a(z);OBa(z);V=Y;W=X;v=81;break}X=U;i0a(z);k[z+16>>2]=X;U=z+20|0;Y=k[U>>2]|0;k[U>>2]=z;if(Y)k0a(Y);k[l>>2]=0;Y=l+4|0;k[Y>>2]=0;k[l+8>>2]=0;x=0;U=Ba(563,8)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;_=Z;$=M}else{k[l>>2]=U;k[l+8>>2]=U+8;k[U>>2]=X;k[U+4>>2]=z;h0a(z);k[Y>>2]=U+8;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[m>>2]=0;X=m+4|0;k[X>>2]=0;k[m+8>>2]=0;x=0;Z=Ba(563,12)|0;aa=x;x=0;do if(aa&1){ba=Hc()|0;ca=ba;da=M;v=83}else{k[X>>2]=Z;k[m>>2]=Z;k[m+8>>2]=Z+12;x=0;xa(604,Z|0,n|0);ba=x;x=0;if(ba&1){ba=Hc()|0;ea=M;OBa(Z);ca=ba;da=ea;v=83;break}k[X>>2]=Z+12;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[o>>2]=0;ea=o+4|0;k[ea>>2]=0;k[o+8>>2]=0;x=0;ba=Ba(563,12)|0;fa=x;x=0;do if(fa&1){ga=Hc()|0;ha=ga;ia=M;v=84}else{k[ea>>2]=ba;k[o>>2]=ba;k[o+8>>2]=ba+12;x=0;xa(604,ba|0,p|0);ga=x;x=0;if(ga&1){ga=Hc()|0;ja=M;OBa(ba);ha=ga;ia=ja;v=84;break}k[ea>>2]=ba+12;k[q>>2]=(k[t>>2]|0)!=0?26:25;x=0;La(57,i|0,j|0,l|0,m|0,o|0,q|0);ja=x;x=0;do if(ja&1){ga=Hc()|0;ka=ga;la=M}else{ga=k[i>>2]|0;ma=i+4|0;na=k[ma>>2]|0;k[i>>2]=0;k[ma>>2]=0;x=0;xa(604,g|0,h|0);ma=x;x=0;c:do if(ma&1){oa=Hc()|0;qa=oa;ra=M}else{oa=g+12|0;k[oa>>2]=ga;sa=g+16|0;ta=na;k[sa>>2]=ta;ua=(na|0)==0;if(!ua)h0a(ta);va=g+20|0;k[va>>2]=0;wa=k[s>>2]|0;do if(wa>>>0<(k[J>>2]|0)>>>0){k[wa>>2]=k[g>>2];k[wa+4>>2]=k[g+4>>2];k[wa+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[wa+12>>2]=k[oa>>2];k[wa+16>>2]=k[sa>>2];k[oa>>2]=0;k[sa>>2]=0;k[wa+20>>2]=k[va>>2];k[s>>2]=(k[s>>2]|0)+24}else{x=0;xa(799,a|0,g|0);ya=x;x=0;if(!(ya&1)){ya=k[sa>>2]|0;if(!ya)break;j0a(ya);break}ya=Hc()|0;za=M;Aa=k[sa>>2]|0;if(Aa)j0a(Aa);K2a(g);qa=ya;ra=za;break c}while(0);K2a(g);if(!ua)j0a(ta);sa=k[o>>2]|0;if(sa){va=k[ea>>2]|0;if((va|0)!=(sa|0)){wa=va;do{wa=wa+-12|0;K2a(wa)}while((wa|0)!=(sa|0));k[ea>>2]=sa}OBa(sa)}K2a(p);wa=k[m>>2]|0;if(wa){ta=k[X>>2]|0;if((ta|0)!=(wa|0)){ua=ta;do{ua=ua+-12|0;K2a(ua)}while((ua|0)!=(wa|0));k[X>>2]=wa}OBa(wa)}K2a(n);ua=k[U+4>>2]|0;if(ua)j0a(ua);k[Y>>2]=U;OBa(U);j0a(z);ua=k[Q+4>>2]|0;if(ua)j0a(ua);k[N>>2]=Q;OBa(Q);if(!K)j0a(L);K2a(h);r=c;return}while(0);if(!na){ka=qa;la=ra;break}j0a(na);ka=qa;la=ra}while(0);ja=k[o>>2]|0;if(!ja){Ca=ka;Da=la;break}ga=k[ea>>2]|0;if((ga|0)!=(ja|0)){ma=ga;do{ma=ma+-12|0;K2a(ma)}while((ma|0)!=(ja|0));k[ea>>2]=ja}OBa(ja);Ca=ka;Da=la}while(0);if((v|0)==84){Ca=ha;Da=ia}K2a(p);ea=k[m>>2]|0;if(!ea){Ea=Ca;Fa=Da;break}ba=k[X>>2]|0;if((ba|0)!=(ea|0)){fa=ba;do{fa=fa+-12|0;K2a(fa)}while((fa|0)!=(ea|0));k[X>>2]=ea}OBa(ea);Ea=Ca;Fa=Da}while(0);if((v|0)==83){Ea=ca;Fa=da}K2a(n);X=k[U+4>>2]|0;if(X)j0a(X);k[Y>>2]=U;OBa(U);_=Ea;$=Fa}j0a(z);Ga=_;Ha=$}while(0);if((v|0)==81){Ga=W;Ha=V}z=k[Q+4>>2]|0;if(z)j0a(z);k[N>>2]=Q;OBa(Q);S=Ga;T=Ha}if(K){Ia=S;Ja=T}else{j0a(L);Ia=S;Ja=T}}else{z=Hc()|0;O=M;P=z;v=78}while(0);if((v|0)==78){Ia=P;Ja=O}K2a(h);Ka=Ia;Ma=Ja;break a}while(0);j0a(w);Na=E;Oa=F}while(0);if((v|0)==70){Na=B;Oa=A}K2a(f);Ka=Na;Ma=Oa}while(0);if((v|0)==68){v=Hc()|0;Ka=v;Ma=M}Ma=k[a>>2]|0;if(!Ma)Sc(Ka|0);v=k[s>>2]|0;if((v|0)==(Ma|0))Pa=Ma;else{Oa=v;do{v=Oa+-24|0;k[s>>2]=v;Na=k[Oa+-8>>2]|0;if(Na)j0a(Na);K2a(v);Oa=k[s>>2]|0}while((Oa|0)!=(Ma|0));Pa=k[a>>2]|0}OBa(Pa);Sc(Ka|0)}function p9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(k[b+24>>2]|0){ng[k[(k[b>>2]|0)+104>>2]&255](a,b,2,1);return}b=KBa(44)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31848;c=b+12|0;x=0;fb(247,c|0,256,0);d=x;x=0;if(d&1){d=Hc()|0;c0a(b);OBa(b);Sc(d|0)}d=c;c=b;i0a(b);k[b+16>>2]=d;e=b+20|0;b=k[e>>2]|0;k[e>>2]=c;if(b)k0a(b);k[a>>2]=d;k[a+4>>2]=c;return}function q9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(k[b+24>>2]|0){k[a>>2]=k[b+4>>2];c=a+4|0;d=k[b+8>>2]|0;if(!d){k[c>>2]=0;e=Rd(4)|0;k[e>>2]=70084;Gf(e|0,17384,1289)}b=l0a(d)|0;k[c>>2]=b;if(!b){e=Rd(4)|0;k[e>>2]=70084;Gf(e|0,17384,1289)}else return}else{e=KBa(44)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=31848;b=e+12|0;x=0;fb(247,b|0,256,0);c=x;x=0;if(c&1){c=Hc()|0;c0a(e);OBa(e);Sc(c|0)}c=b;b=e;i0a(e);k[e+16>>2]=c;d=e+20|0;e=k[d>>2]|0;k[d>>2]=b;if(e)k0a(e);k[a>>2]=c;k[a+4>>2]=b;return}}function r9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d;if(c?(k[b+24>>2]|0)==0:0){k[a>>2]=k[b+4>>2];f=a+4|0;g=k[b+8>>2]|0;if(!g){k[f>>2]=0;h=Rd(4)|0;k[h>>2]=70084;Gf(h|0,17384,1289)}i=l0a(g)|0;k[f>>2]=i;if(!i){h=Rd(4)|0;k[h>>2]=70084;Gf(h|0,17384,1289)}else{r=d;return}}if(k[b+32>>2]|0){ng[k[(k[b>>2]|0)+104>>2]&255](a,b,2,1);r=d;return}h=b+36|0;i=k[h>>2]|0;jg[k[(k[i>>2]|0)+96>>2]&511](e,i,c);a:do if(!(k[e>>2]|0)){k[a>>2]=0;k[a+4>>2]=0}else{c=k[h>>2]|0;x=0;i=Ba(k[k[c>>2]>>2]|0,c|0)|0;c=x;x=0;do if(!(c&1)){if((i|0)==5){f=k[h>>2]|0;x=0;g=Ba(k[(k[f>>2]|0)+36>>2]|0,f|0)|0;f=x;x=0;if(f&1){j=16;break}if(g){k[a>>2]=0;k[a+4>>2]=0;break a}}x=0;g=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;f=x;x=0;if(!(f&1)){x=0;f=Ba(563,104)|0;l=x;x=0;m=l&1;if(g){if(m){j=16;break}k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=31932;g=f+16|0;x=0;fb(296,g|0,2,e|0);l=x;x=0;if(l&1){l=Hc()|0;n=M;c0a(f);OBa(f);o=n;p=l;break}l=g;g=f;i0a(f);k[f+20>>2]=l;n=f+24|0;q=k[n>>2]|0;k[n>>2]=g;if(q)k0a(q);k[a>>2]=l;k[a+4>>2]=g;break a}else{if(m){j=16;break}k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=31932;m=f+16|0;x=0;nb(129,m|0,2,e|0,b+48|0);g=x;x=0;if(g&1){g=Hc()|0;l=M;c0a(f);OBa(f);o=l;p=g;break}g=m;m=f;i0a(f);k[f+20>>2]=g;l=f+24|0;f=k[l>>2]|0;k[l>>2]=m;if(f)k0a(f);k[a>>2]=g;k[a+4>>2]=m;break a}}else j=16}else j=16;while(0);if((j|0)==16){i=Hc()|0;o=M;p=i}i=k[e+4>>2]|0;if(!i)Sc(p|0);j0a(i);Sc(p|0)}while(0);p=k[e+4>>2]|0;if(p)j0a(p);r=d;return}function s9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+80|0;d=c+68|0;e=c+72|0;f=c+56|0;g=c+44|0;h=c+16|0;j=c;l=c+32|0;m=(Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0)^1;q2a(f,329672,0);x=0;pa(57,m|0,f|0,1248,250928,252724);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(f);o=n;p=m;Sc(p|0)}K2a(f);f=(k[b+24>>2]|0)==2;q2a(g,329672,0);x=0;pa(57,f|0,g|0,1249,250928,252724);f=x;x=0;if(f&1){f=Hc()|0;m=M;K2a(g);o=m;p=f;Sc(p|0)}K2a(g);k[j>>2]=0;g=j+8|0;k[g>>2]=1;f=j+12|0;i[f>>0]=0;m=j+13|0;i[m>>0]=1;n=k[b+80>>2]|0;q=n>>>0>134217728;s=q?134217728:n;if(s>>>0>2){t=s>>>0>8?s:8;u=KBa(t<<2)|0;k[u>>2]=k[j>>2];i[m>>0]=0;k[g>>2]=s;k[j>>2]=t;k[j+4>>2]=u;v=u}else{k[g>>2]=s;v=j}Dyb(v|0,b+48|0,(q?536870912:n<<2)|0)|0;i[f>>0]=0;if(!(i[m>>0]|0))w=k[j+4>>2]|0;else w=j;f=(k[g>>2]|0)+-1|0;a:do if(f){n=f;do{if(k[w+(n<<2)>>2]|0)break a;k[g>>2]=n;n=n+-1|0}while((n|0)!=0)}while(0);g=k[b+36>>2]|0;x=0;b=Ba(k[(k[g>>2]|0)+32>>2]|0,g|0)|0;g=x;x=0;do if(g&1){w=Hc()|0;y=M;z=w}else{k[h>>2]=0;w=h+8|0;k[w>>2]=1;f=h+12|0;i[f>>0]=0;n=h+13|0;i[n>>0]=1;k[d>>2]=b;x=0;fb(201,h|0,j|0,d|0);q=x;x=0;if(q&1){q=Hc()|0;v=M;if(i[n>>0]|0){y=v;z=q;break}OBa(k[h+4>>2]|0);y=v;z=q;break}if(!(i[m>>0]|0))OBa(k[j+4>>2]|0);q=i[f>>0]|0;f=k[w>>2]|0;x=0;fb(140,l|0,252774,29);w=x;x=0;do if(w&1){v=Hc()|0;A=M;B=v}else{x=0;pa(57,f>>>0<2|q<<24>>24!=0|0,l|0,1251,250928,252724);v=x;x=0;if(v&1){v=Hc()|0;s=M;K2a(l);A=s;B=v;break}K2a(l);k[a>>2]=0;k[a+32>>2]=1;NB(a,h,d,e);if(i[n>>0]|0){r=c;return}OBa(k[h+4>>2]|0);r=c;return}while(0);if(i[n>>0]|0){o=A;p=B;Sc(p|0)}OBa(k[h+4>>2]|0);o=A;p=B;Sc(p|0)}while(0);if(i[m>>0]|0){o=y;p=z;Sc(p|0)}OBa(k[j+4>>2]|0);o=y;p=z;Sc(p|0)}function t9(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=r;r=r+16|0;f=e;g=KBa(104)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=31932;h=g+16|0;x=0;fb(283,h|0,c|0,0);c=x;x=0;if(c&1){c=Hc()|0;c0a(g);OBa(g);Sc(c|0)}c=h;i0a(g);k[g+20>>2]=c;h=g+24|0;j=k[h>>2]|0;k[h>>2]=g;if(j)k0a(j);i[g+44>>0]=d&1;k[g+48>>2]=k[b+32>>2];d=k[g+40>>2]|0;j=k[b+36>>2]|0;h=j;do if((j|0)!=0?(l=iDa(j,168,6688,0)|0,(l|0)!=0):0){x=0;nb(k[(k[l>>2]|0)+104>>2]|0,f|0,l|0,d|0,0);l=x;x=0;if(l&1){l=Hc()|0;j0a(g);Sc(l|0)}else{l=f+4|0;m=l;n=k[f>>2]|0;o=k[l>>2]|0;break}}else p=9;while(0);if((p|0)==9){k[f>>2]=h;p=f+4|0;d=k[b+40>>2]|0;k[p>>2]=d;j=d;if(!d){m=p;n=h;o=j}else{h0a(d);m=p;n=h;o=j}}k[f>>2]=0;k[m>>2]=0;k[g+52>>2]=n;n=g+56|0;f=k[n>>2]|0;k[n>>2]=o;if((f|0)!=0?(j0a(f),f=k[m>>2]|0,(f|0)!=0):0)j0a(f);i[g+60>>0]=i[b+44>>0]|0;f=g+64|0;m=b+48|0;if((f|0)==(m|0)){k[a>>2]=c;q=a+4|0;k[q>>2]=g;h0a(g);j0a(g);r=e;return}o=k[b+80>>2]|0;k[g+96>>2]=o;Dyb(f|0,m|0,o<<2|0)|0;k[a>>2]=c;q=a+4|0;k[q>>2]=g;h0a(g);j0a(g);r=e;return}function u9(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6672,0)|0;if(!c)BBa();if((k[c+24>>2]|0)!=(k[a+24>>2]|0)){d=0;return d|0}d=(i[c+28>>0]|0)==(i[a+28>>0]|0);return d|0}function v9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;g=b+24|0;h=(i[(k[g>>2]|0)+72>>0]|0)!=0;q2a(e,h?252804:252813,h?8:9);h=(i[b+28>>0]|0)!=0;x=0;fb(140,f|0,(h?252823:329672)|0,(h?6:0)|0);h=x;x=0;if(h&1){h=Hc()|0;j=M;l=h;K2a(e);Sc(l|0)}h=i[f>>0]|0;b=(h&1)==0;x=0;m=Fa(88,e|0,(b?f+1|0:k[f+8>>2]|0)|0,(b?(h&255)>>>1:k[f+4>>2]|0)|0)|0;h=x;x=0;do if(!(h&1)){k[d>>2]=k[m>>2];k[d+4>>2]=k[m+4>>2];k[d+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;b=k[(k[g>>2]|0)+24>>2]|0;n=i[b>>0]|0;o=(n&1)==0;x=0;p=Fa(88,d|0,(o?b+1|0:k[b+8>>2]|0)|0,(o?(n&255)>>>1:k[b+4>>2]|0)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;n=M;K2a(d);q=n;s=b;break}else{k[a>>2]=k[p>>2];k[a+4>>2]=k[p+4>>2];k[a+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;K2a(d);K2a(f);K2a(e);r=c;return}}else{p=Hc()|0;q=M;s=p}while(0);K2a(f);j=q;l=s;K2a(e);Sc(l|0)}function w9(a,b,c){a=a|0;b=b|0;c=c|0;c=k[b+24>>2]|0;n2a(a,(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0);return}function x9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0;c=r;r=r+160|0;d=c+140|0;e=c+128|0;f=c+96|0;g=c+84|0;h=c+72|0;j=c+48|0;l=c+32|0;m=c+8|0;n=c;n8(f,120,2);x=0;fb(69,a|0,f|0,0);o=x;x=0;if(o&1){o=Hc()|0;p=M;k[f>>2]=20456;xh(f+12|0,k[f+16>>2]|0);q=k[f+8>>2]|0;if(!q){s=o;t=p;Sc(s|0)}k0a(q);s=o;t=p;Sc(s|0)}k[f>>2]=20456;xh(f+12|0,k[f+16>>2]|0);p=k[f+8>>2]|0;if(p)k0a(p);p=b+24|0;f=k[p>>2]|0;a:do if(!(i[b+28>>0]|0)){if(i[f+72>>0]|0){r=c;return}x=0;xa(585,l|0,f|0);o=x;x=0;if(o&1)u=11;else{o=k[l>>2]|0;q=l+4|0;b:do if((o|0)!=(q|0)){v=n+4|0;w=m+12|0;y=m+16|0;z=m+20|0;A=a+4|0;B=a+8|0;C=o;while(1){D=C+20|0;E=(k[D>>2]|0)+84|0;F=k[E>>2]|0;x=0;fb(140,e|0,285127,55);G=x;x=0;if(G&1){u=81;break}x=0;pa(57,(F|0)!=0|0,e|0,917,285183,285227);F=x;x=0;if(F&1){u=85;break}K2a(e);F=k[(k[E>>2]|0)+24>>2]|0;x=0;nb(125,n|0,k[D>>2]|0,(i[(k[p>>2]|0)+72>>0]|0)!=0|0,0);E=x;x=0;if(E&1){u=81;break}E=k[n>>2]|0;G=k[v>>2]|0;k[n>>2]=0;k[v>>2]=0;H=(k[D>>2]|0)+84|0;D=k[H>>2]|0;x=0;fb(140,d|0,285127,55);I=x;x=0;if(I&1){J=G;u=105;break}x=0;pa(57,(D|0)!=0|0,d|0,917,285183,285227);D=x;x=0;if(D&1){K=G;u=89;break}K2a(d);D=k[H>>2]|0;x=0;xa(604,m|0,F|0);F=x;x=0;if(F&1){J=G;u=105;break}k[w>>2]=E;E=G;k[y>>2]=E;F=(G|0)==0;if(!F)h0a(E);k[z>>2]=D;D=k[A>>2]|0;if(D>>>0>=(k[B>>2]|0)>>>0){x=0;xa(799,a|0,m|0);H=x;x=0;if(H&1){L=G;u=107;break}G=k[y>>2]|0;if(G)j0a(G)}else{k[D>>2]=k[m>>2];k[D+4>>2]=k[m+4>>2];k[D+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[D+12>>2]=k[w>>2];k[D+16>>2]=k[y>>2];k[w>>2]=0;k[y>>2]=0;k[D+20>>2]=k[z>>2];k[A>>2]=(k[A>>2]|0)+24}K2a(m);if(!F)j0a(E);E=k[C+4>>2]|0;if(!E){F=C;while(1){D=k[F+8>>2]|0;if((k[D>>2]|0)==(F|0)){N=D;break}else F=D}}else{F=E;while(1){D=k[F>>2]|0;if(!D){N=F;break}else F=D}}if((N|0)==(q|0))break b;else C=N}if((u|0)==81){C=Hc()|0;O=M;P=C;u=82}else if((u|0)==85){C=Hc()|0;A=M;K2a(e);O=A;P=C;u=82}else if((u|0)==89){C=Hc()|0;A=M;K2a(d);Q=K;R=A;S=C;u=106}else if((u|0)==105){C=Hc()|0;Q=J;R=M;S=C;u=106}else if((u|0)==107){C=Hc()|0;A=M;z=k[y>>2]|0;if(z)j0a(z);K2a(m);T=C;U=A;V=L;u=110}if((u|0)==82){W=P;X=O}else if((u|0)==106){T=S;U=R;V=Q;u=110}if((u|0)==110)if(!V){W=T;X=U}else{j0a(V);W=T;X=U}Yg(l,k[q>>2]|0);Y=W;Z=X;break a}while(0);Yg(l,k[q>>2]|0);r=c;return}}else{x=0;o=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;A=x;x=0;if(!(A&1)){A=k[o+36>>2]|0;C=k[o+40>>2]|0;if((A|0)==(C|0)){r=c;return}o=g+4|0;z=a+4|0;w=j+12|0;B=j+16|0;v=j+20|0;F=a+8|0;E=A;c:while(1){x=0;xa(590,g|0,(k[E>>2]|0)+60|0);A=x;x=0;if(A&1){u=10;break}A=k[g>>2]|0;D=k[o>>2]|0;if((A|0)==(D|0))_=A;else{G=A;do{A=k[G>>2]|0;x=0;H=Ba(k[(k[A>>2]|0)+20>>2]|0,A|0)|0;I=x;x=0;if(I&1){u=26;break c}if(H){H=k[A+32>>2]|0;if(!H){x=0;I=Ba(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;$=x;x=0;if($&1){u=26;break c}else aa=I}else aa=H;if((aa|0)>1){x=0;H=Ba(563,100)|0;I=x;x=0;if(I&1){u=26;break c}k[H+4>>2]=0;k[H+8>>2]=0;k[H>>2]=31496;I=H+12|0;x=0;fb(143,I|0,A|0,1);$=x;x=0;if($&1){ba=H;u=32;break c}$=I;i0a(H);k[H+16>>2]=$;I=H+20|0;ca=k[I>>2]|0;k[I>>2]=H;if(ca)k0a(ca);ca=k[a>>2]|0;I=k[z>>2]|0;da=A+24|0;ea=k[da>>2]|0;d:do if((ca|0)==(I|0)){fa=ea;u=57}else{ga=H+36|0;ha=H+40|0;ia=ca;ja=ea;while(1){ka=i[ia>>0]|0;la=(ka&1)==0;ma=(ka&255)>>>1;ka=la?ma:k[ia+4>>2]|0;na=i[ja>>0]|0;oa=(na&1)==0;e:do if((ka|0)==((oa?(na&255)>>>1:k[ja+4>>2]|0)|0)){qa=oa?ja+1|0:k[ja+8>>2]|0;do if(!la){if(ZLa(k[ia+8>>2]|0,qa,ka)|0)break e}else{if(!ka)break;ra=ma;sa=ia+1|0;ta=qa;while(1){if((i[sa>>0]|0)!=(i[ta>>0]|0))break e;ra=ra+-1|0;if(!ra)break;else{sa=sa+1|0;ta=ta+1|0}}}while(0);qa=k[ia+12>>2]|0;if(!qa)ua=0;else ua=iDa(qa,168,6768,0)|0;x=0;fb(140,h|0,252830,22);qa=x;x=0;if(qa&1){va=H;u=43;break c}x=0;pa(57,(ua|0)!=0|0,h|0,1306,250928,252853);qa=x;x=0;if(qa&1){wa=H;u=55;break c}K2a(h);qa=k[ua+28>>2]|0;ta=k[ua+24>>2]|0;sa=k[ga>>2]|0;ra=ta;ya=qa;if((qa-ta|0)!=((k[ha>>2]|0)-sa|0))break;if((ra|0)==(ya|0))break d;ta=ra;ra=sa;while(1){sa=k[ta>>2]|0;x=0;qa=Ta(k[(k[sa>>2]|0)+20>>2]|0,sa|0,k[ra>>2]|0)|0;sa=x;x=0;if(sa&1){za=H;u=42;break c}if(!qa)break e;ta=ta+8|0;if((ta|0)==(ya|0))break d;else ra=ra+8|0}}while(0);ia=ia+24|0;ma=k[da>>2]|0;if((ia|0)==(I|0)){fa=ma;u=57;break}else ja=ma}}while(0);if((u|0)==57){u=0;h0a(H);x=0;xa(604,j|0,fa|0);I=x;x=0;if(I&1){Aa=H;u=64;break c}k[w>>2]=$;k[B>>2]=H;h0a(H);k[v>>2]=A;I=k[z>>2]|0;do if(I>>>0<(k[F>>2]|0)>>>0){k[I>>2]=k[j>>2];k[I+4>>2]=k[j+4>>2];k[I+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[I+12>>2]=k[w>>2];k[I+16>>2]=k[B>>2];k[w>>2]=0;k[B>>2]=0;k[I+20>>2]=k[v>>2];k[z>>2]=(k[z>>2]|0)+24}else{x=0;xa(799,a|0,j|0);da=x;x=0;if(da&1){Ca=H;u=65;break c}da=k[B>>2]|0;if(!da)break;j0a(da)}while(0);K2a(j);j0a(H)}j0a(H)}}G=G+4|0}while((G|0)!=(D|0));_=k[g>>2]|0}D=_;if(_){G=k[o>>2]|0;if((G|0)!=(_|0))k[o>>2]=G+(~((G+-4-D|0)>>>2)<<2);OBa(_)}E=E+4|0;if((E|0)==(C|0)){u=113;break}}if((u|0)==10){C=Hc()|0;Da=C;Ea=M;u=12;break}else if((u|0)==26){C=Hc()|0;Fa=M;Ga=C;u=27}else if((u|0)==32){C=Hc()|0;E=M;c0a(ba);OBa(ba);Fa=E;Ga=C;u=27}else if((u|0)==42){C=Hc()|0;Ha=za;Ia=C;Ja=M;u=44}else if((u|0)==43){C=Hc()|0;Ha=va;Ia=C;Ja=M;u=44}else if((u|0)==55){C=Hc()|0;E=M;K2a(h);Ka=C;La=E;Ma=wa;u=71}else if((u|0)==64){E=Hc()|0;Na=E;Oa=M;Pa=Aa;u=68}else if((u|0)==65){E=Hc()|0;C=M;z=k[B>>2]|0;if(z)j0a(z);K2a(j);Na=E;Oa=C;Pa=Ca;u=68}else if((u|0)==113){r=c;return}if((u|0)==27){Qa=Ga;Ra=Fa}else if((u|0)==44){Ka=Ia;La=Ja;Ma=Ha;u=71}else if((u|0)==68){j0a(Pa);Ka=Na;La=Oa;Ma=Pa;u=71}if((u|0)==71){j0a(Ma);Qa=Ka;Ra=La}C=k[g>>2]|0;E=C;if(!C){Y=Qa;Z=Ra}else{z=k[o>>2]|0;if((z|0)!=(C|0))k[o>>2]=z+(~((z+-4-E|0)>>>2)<<2);OBa(C);Y=Qa;Z=Ra}}else u=11}while(0);if((u|0)==11){Ra=Hc()|0;Da=Ra;Ea=M;u=12}if((u|0)==12){Y=Da;Z=Ea}Ea=k[a>>2]|0;if(!Ea){s=Y;t=Z;Sc(s|0)}Da=a+4|0;u=k[Da>>2]|0;if((u|0)==(Ea|0))Sa=Ea;else{Ra=u;do{u=Ra+-24|0;k[Da>>2]=u;Qa=k[Ra+-8>>2]|0;if(Qa)j0a(Qa);K2a(u);Ra=k[Da>>2]|0}while((Ra|0)!=(Ea|0));Sa=k[a>>2]|0}OBa(Sa);s=Y;t=Z;Sc(s|0)}function y9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=k[a+28>>2]|0;d=k[a+24>>2]|0;a=k[b+24>>2]|0;e=d;f=c;if((c-d|0)!=((k[b+28>>2]|0)-a|0)){g=0;return g|0}if((e|0)==(f|0)){g=1;return g|0}b=e;e=a;while(1){a=k[b>>2]|0;if(!(cg[k[(k[a>>2]|0)+20>>2]&1023](a,k[e>>2]|0)|0)){g=0;h=6;break}b=b+8|0;if((b|0)==(f|0)){g=1;h=6;break}else e=e+8|0}if((h|0)==6)return g|0;return 0}function z9(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;d=a+32|0;if(k[d>>2]|0){r=b;return d|0}A9(c,k[a+24>>2]|0);e=k[c>>2]|0;f=c+4|0;g=k[f>>2]|0;k[c>>2]=0;k[f>>2]=0;k[d>>2]=e;e=a+36|0;a=k[e>>2]|0;k[e>>2]=g;if(!a){r=b;return d|0}j0a(a);r=b;return d|0}function A9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;c=r;r=r+96|0;d=c+68|0;e=c+56|0;f=c+82|0;g=c+48|0;h=c+32|0;j=c+20|0;l=c+8|0;m=c+4|0;n=c+81|0;o=c;p=c+80|0;q=o4(b)|0;k[d>>2]=0;s=d+4|0;k[s>>2]=0;k[d+8>>2]=0;k[e>>2]=0;t=e+4|0;k[t>>2]=0;k[e+8>>2]=0;i[f>>0]=0;a:do if(!q)u=18;else{v=k[q+52>>2]|0;w=k[v+24>>2]|0;y=k[v+28>>2]|0;b:do if((w|0)!=(y|0)){v=e+8|0;z=d+8|0;A=w;B=0;C=0;while(1){D=k[(k[A>>2]|0)+24>>2]|0;x=0;if((B|0)==(C|0)){Rx(e,D);E=x;x=0;if(E&1)break}else{n2a(B,D);D=x;x=0;if(D&1)break;k[t>>2]=(k[t>>2]|0)+12}D=k[A>>2]|0;x=0;E=Ba(k[(k[D>>2]|0)+16>>2]|0,D|0)|0;D=x;x=0;if(D&1)break;D=E+4|0;F=k[s>>2]|0;if((F|0)==(k[z>>2]|0)){x=0;xa(743,d|0,D|0);G=x;x=0;if(G&1)break}else{k[F>>2]=k[D>>2];D=k[E+8>>2]|0;k[F+4>>2]=D;if(!D)H=F;else{h0a(D);H=k[s>>2]|0}k[s>>2]=H+8}D=A+8|0;if((D|0)==(y|0))break b;A=D;B=k[t>>2]|0;C=k[v>>2]|0}v=Hc()|0;I=v;J=M;break a}while(0);i[f>>0]=i[q+79>>0]|0;u=18}while(0);do if((u|0)==18){x=0;q=Ba(563,52)|0;H=x;x=0;if(H&1){H=Hc()|0;I=H;J=M;break}k[q+4>>2]=0;k[q+8>>2]=0;k[q>>2]=33132;H=q+16|0;k[H>>2]=0;y=q+20|0;k[y>>2]=0;w=q+12|0;v=q+28|0;k[v>>2]=0;k[q+32>>2]=0;k[q+24>>2]=v;k[w>>2]=38268;k[q+36>>2]=b;i[q+40>>0]=0;k[q+44>>2]=0;k[q+48>>2]=0;v=w;i0a(q);k[H>>2]=v;H=k[y>>2]|0;k[y>>2]=q;if(H)k0a(H);k[h>>2]=0;H=h+4|0;k[H>>2]=0;k[h+8>>2]=0;x=0;y=Ba(563,8)|0;w=x;x=0;if(w&1){w=Hc()|0;K=w;L=M}else{k[h>>2]=y;k[h+8>>2]=y+8;k[y>>2]=v;k[y+4>>2]=q;h0a(q);k[H>>2]=y+8;x=0;fb(140,l|0,329672,0);v=x;x=0;if(v&1){v=Hc()|0;N=v;O=M}else{k[j>>2]=0;v=j+4|0;k[v>>2]=0;k[j+8>>2]=0;x=0;w=Ba(563,12)|0;C=x;x=0;do if(C&1){B=Hc()|0;P=B;Q=M;u=51}else{k[v>>2]=w;k[j>>2]=w;k[j+8>>2]=w+12;x=0;xa(604,w|0,l|0);B=x;x=0;if(B&1){B=Hc()|0;A=M;OBa(w);P=B;Q=A;u=51;break}k[v>>2]=w+12;k[m>>2]=7;i[n>>0]=0;k[o>>2]=0;i[p>>0]=0;x=0;Ra(42,g|0,d|0,h|0,e|0,j|0,m|0,n|0,o|0,p|0,f|0);A=x;x=0;if(A&1){A=Hc()|0;B=M;z=k[j>>2]|0;if(!z){R=A;S=B;break}D=k[v>>2]|0;if((D|0)!=(z|0)){F=D;do{F=F+-12|0;K2a(F)}while((F|0)!=(z|0));k[v>>2]=z}OBa(z);R=A;S=B;break}k[a>>2]=k[g>>2];F=g+4|0;k[a+4>>2]=k[F>>2];k[g>>2]=0;k[F>>2]=0;F=k[j>>2]|0;if(F){D=k[v>>2]|0;if((D|0)!=(F|0)){E=D;do{E=E+-12|0;K2a(E)}while((E|0)!=(F|0));k[v>>2]=F}OBa(F)}K2a(l);E=k[y+4>>2]|0;if(E)j0a(E);k[H>>2]=y;OBa(y);j0a(q);E=k[e>>2]|0;if(E){B=k[t>>2]|0;if((B|0)==(E|0))T=E;else{A=B;do{B=A+-12|0;k[t>>2]=B;K2a(B);A=k[t>>2]|0}while((A|0)!=(E|0));T=k[e>>2]|0}OBa(T)}E=k[d>>2]|0;if(!E){r=c;return}A=k[s>>2]|0;if((A|0)==(E|0))U=E;else{F=A;while(1){A=F+-8|0;k[s>>2]=A;B=k[F+-4>>2]|0;if(!B)V=A;else{j0a(B);V=k[s>>2]|0}if((V|0)==(E|0))break;else F=V}U=k[d>>2]|0}OBa(U);r=c;return}while(0);if((u|0)==51){R=P;S=Q}K2a(l);N=R;O=S}v=k[y+4>>2]|0;if(v)j0a(v);k[H>>2]=y;OBa(y);K=N;L=O}j0a(q);I=K;J=L}while(0);L=k[e>>2]|0;if(L){J=k[t>>2]|0;if((J|0)==(L|0))W=L;else{K=J;do{J=K+-12|0;k[t>>2]=J;K2a(J);K=k[t>>2]|0}while((K|0)!=(L|0));W=k[e>>2]|0}OBa(W)}W=k[d>>2]|0;if(!W)Sc(I|0);e=k[s>>2]|0;if((e|0)==(W|0))X=W;else{L=e;while(1){e=L+-8|0;k[s>>2]=e;K=k[L+-4>>2]|0;if(!K)Y=e;else{j0a(K);Y=k[s>>2]|0}if((Y|0)==(W|0))break;else L=Y}X=k[d>>2]|0}OBa(X);Sc(I|0)}function B9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;c=r;r=r+160|0;d=c+140|0;e=c+124|0;f=c+136|0;g=c+112|0;h=c+56|0;j=c;k[d>>2]=0;l=d+4|0;k[l>>2]=0;k[d+8>>2]=0;m=k[b+24>>2]|0;x=0;b=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;m=x;x=0;a:do if(!(m&1)){n=k[b+40>>2]|0;o=k[b+36>>2]|0;do if((n|0)!=(o|0)){p=e+4|0;q=d+8|0;s=n;b:while(1){s=s+-4|0;x=0;xa(739,e|0,(k[s>>2]|0)+60|0);t=x;x=0;if(t&1){u=7;break}t=k[e>>2]|0;v=k[p>>2]|0;if((t|0)==(v|0))w=t;else{y=t;do{t=k[y>>2]|0;k[f>>2]=t;z=t;do if(!(i[t+58>>0]|0)){A=k[l>>2]|0;if((A|0)==(k[q>>2]|0)){x=0;xa(757,d|0,f|0);B=x;x=0;if(B&1){u=22;break b}else break}else{k[A>>2]=z;k[l>>2]=(k[l>>2]|0)+4;break}}while(0);y=y+4|0}while((y|0)!=(v|0));w=k[e>>2]|0}v=w;if(w){y=k[p>>2]|0;if((y|0)!=(w|0))k[p>>2]=y+(~((y+-4-v|0)>>>2)<<2);OBa(w)}if((s|0)==(o|0)){u=4;break}}if((u|0)==4){C=k[d>>2]|0;D=k[l>>2]|0;break}else if((u|0)==7){s=Hc()|0;E=s;F=M;u=9;break a}else if((u|0)==22){s=Hc()|0;q=M;v=k[e>>2]|0;if(!v){G=s;H=q;break a}y=k[p>>2]|0;if((y|0)!=(v|0))k[p>>2]=y+(~((y+-4-v|0)>>>2)<<2);OBa(v);G=s;H=q;break a}}else{C=0;D=0}while(0);k[g>>2]=0;o=g+4|0;k[o>>2]=0;k[g+8>>2]=0;c:do if((C|0)==(D|0))u=27;else{n=g+8|0;q=C;while(1){s=k[q>>2]|0;x=0;v=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1)break;s=v+4|0;y=k[o>>2]|0;if((y|0)==(k[n>>2]|0)){x=0;xa(743,g|0,s|0);z=x;x=0;if(z&1)break}else{k[y>>2]=k[s>>2];s=k[v+8>>2]|0;k[y+4>>2]=s;if(!s)I=y;else{h0a(s);I=k[o>>2]|0}k[o>>2]=I+8}q=q+4|0;if((q|0)==(D|0)){u=27;break c}}q=Hc()|0;J=q;K=M}while(0);if((u|0)==27){k[h>>2]=0;k[h+32>>2]=1;k[h+44>>2]=0;k[h+48>>2]=0;q=h+44|0;k[h+40>>2]=q;x=0;xa(794,h|0,g|0);n=x;x=0;d:do if(n&1){p=Hc()|0;L=p;N=M}else{k[a>>2]=0;p=a+4|0;k[p>>2]=0;k[a+8>>2]=0;e:do if((k[l>>2]|0)!=(k[d>>2]|0)){s=j+8|0;y=j+48|0;v=a+8|0;z=0;f:while(1){x=0;t=Ta(590,h|0,z|0)|0;A=x;x=0;if(A&1)break;do if(t){A=t+40|0;B=k[(k[d>>2]|0)+(z<<2)>>2]|0;k[j>>2]=B;O=s;P=t;Q=O+40|0;do{k[O>>2]=k[P>>2];O=O+4|0;P=P+4|0}while((O|0)<(Q|0));R=k[A>>2]|0;k[y>>2]=R;S=k[p>>2]|0;if(S>>>0>=(k[v>>2]|0)>>>0){x=0;xa(806,a|0,j|0);T=x;x=0;if(T&1)break f;else break}else{k[S>>2]=B;O=S+8|0;P=s;Q=O+40|0;do{k[O>>2]=k[P>>2];O=O+4|0;P=P+4|0}while((O|0)<(Q|0));k[S+48>>2]=R;k[p>>2]=(k[p>>2]|0)+56;break}}while(0);z=z+1|0;if(z>>>0>=(k[l>>2]|0)-(k[d>>2]|0)>>2>>>0)break e}z=Hc()|0;s=M;v=k[a>>2]|0;if(!v){L=z;N=s;break d}y=k[p>>2]|0;if((y|0)!=(v|0))k[p>>2]=y+(~(((y+-56-v|0)>>>0)/56|0)*56|0);OBa(v);L=z;N=s;break d}while(0);zh(h+40|0,k[q>>2]|0);p=k[g>>2]|0;if(p){s=k[o>>2]|0;if((s|0)==(p|0))U=p;else{z=s;while(1){s=z+-8|0;k[o>>2]=s;v=k[z+-4>>2]|0;if(!v)V=s;else{j0a(v);V=k[o>>2]|0}if((V|0)==(p|0))break;else z=V}U=k[g>>2]|0}OBa(U)}z=k[d>>2]|0;if(!z){r=c;return}p=k[l>>2]|0;if((p|0)!=(z|0))k[l>>2]=p+(~((p+-4-z|0)>>>2)<<2);OBa(z);r=c;return}while(0);zh(h+40|0,k[q>>2]|0);J=L;K=N}n=k[g>>2]|0;if(!n){G=J;H=K}else{z=k[o>>2]|0;if((z|0)==(n|0))W=n;else{p=z;while(1){z=p+-8|0;k[o>>2]=z;v=k[p+-4>>2]|0;if(!v)X=z;else{j0a(v);X=k[o>>2]|0}if((X|0)==(n|0))break;else p=X}W=k[g>>2]|0}OBa(W);G=J;H=K}}else{p=Hc()|0;E=p;F=M;u=9}while(0);if((u|0)==9){G=E;H=F}F=k[d>>2]|0;if(!F)Sc(G|0);d=k[l>>2]|0;if((d|0)!=(F|0))k[l>>2]=d+(~((d+-4-F|0)>>>2)<<2);OBa(F);Sc(G|0)}function C9(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6720,0)|0;if(!c)BBa();switch(k[c+24>>2]|0){case 0:{if((k[a+24>>2]|0)!=0?(i[c+28>>0]|0)!=0:0){d=0;return d|0}break}case 1:{if((k[a+24>>2]|0)!=1){d=0;return d|0}break}default:{}}d=(k[a+32>>2]|0)==(k[c+32>>2]|0);return d|0}function D9(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6720,0)|0;if(!c)BBa();if((k[a+24>>2]|0)!=(k[c+24>>2]|0)){d=0;return d|0}if((i[a+28>>0]|0)!=0^(i[c+28>>0]|0)!=0){d=0;return d|0}d=(k[c+32>>2]|0)==(k[a+32>>2]|0);return d|0}function E9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=j8(a,0)|0;a=k[c>>2]|0;d=k[c+4>>2]|0;if((a|0)==(d|0)){e=0;return e|0}else{f=a;g=0}while(1){a=f+12|0;c=k[a>>2]|0;if(!(Vf[k[(k[c>>2]|0)+52>>2]&1023](c)|0)){e=0;h=5;break}c=k[a>>2]|0;a=cg[k[(k[c>>2]|0)+28>>2]&1023](c,b)|0;if(!a){e=0;h=5;break}c=a+g|0;f=f+24|0;if((f|0)==(d|0)){e=c;h=5;break}else g=c}if((h|0)==5)return e|0;return 0}function F9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k[a>>2]=0;c=a+32|0;k[c>>2]=1;d=j8(b,0)|0;b=k[d>>2]|0;e=k[d+4>>2]|0;if((b|0)==(e|0))return;else{f=1;g=b}while(1){b=g+12|0;d=k[b>>2]|0;a:do if(Vf[k[(k[d>>2]|0)+52>>2]&1023](d)|0){h=k[b>>2]|0;i=Vf[k[(k[h>>2]|0)+32>>2]&1023](h)|0;b:do if(i){if(!f){j=f;l=i}else{h=i;m=0;n=0;while(1){o=a+(n<<2)|0;p=Hyb(k[o>>2]|0,0,h|0,m|0)|0;q=M;k[o>>2]=p;if((q|0)==0&0==0)break b;n=n+1|0;p=k[c>>2]|0;if(n>>>0>=p>>>0){r=p;s=q;break}else{h=q;m=0}}j=r;l=s}m=j+1|0;h=m>>>0>8?8:m;k[c>>2]=h;if(h>>>0>j>>>0)k[a+(j<<2)>>2]=l}while(0);i=k[c>>2]|0;h=i+-1|0;if(!h)t=i;else{m=h;h=i;while(1){if(k[a+(m<<2)>>2]|0){t=h;break a}k[c>>2]=m;i=m+-1|0;if(!i){t=m;break}else{n=m;m=i;h=n}}}}else t=f;while(0);g=g+24|0;if((g|0)==(e|0))break;else f=t}return}function G9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+64|0;d=c+40|0;e=c;k[e>>2]=1;k[e+32>>2]=1;f=j8(b,0)|0;q2a(d,329672,0);x=0;Ta(578,f|0,d|0)|0;b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}K2a(d);d=k[f+12>>2]|0;f=k[d+32>>2]|0;a:do if((f|0)==1){b=1;while(1){b=b+-1|0;if((b|0)<=-1){g=0;break a}h=k[e+(b<<2)>>2]|0;i=k[d+(b<<2)>>2]|0;if((h|0)!=(i|0)){j=h;l=i;break}}g=j>>>0>l>>>0?1:-1}else g=(f|0)==0?1:-1;while(0);f=a;a=(g|0)<0?d:e;e=f+40|0;do{k[f>>2]=k[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(e|0));r=c;return}function H9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+32|0;e=d+12|0;f=d;g=k[(k[b+32>>2]|0)+24>>2]|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;h=i[g>>0]|0;j=(h&1)==0?(h&255)>>>1:k[g+4>>2]|0;x=0;nb(83,a|0,252975,7,j+7|0);h=x;x=0;if(h&1){l=Hc()|0;m=M;K2a(a);Sc(l|0)}x=0;Fa(88,a|0,((i[g>>0]&1)==0?g+1|0:k[g+8>>2]|0)|0,j|0)|0;j=x;x=0;if(j&1){l=Hc()|0;m=M;K2a(a);Sc(l|0)}if(c){r=d;return}x=0;xa(805,f|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;n=M;o=b;K2a(a);Sc(o|0)}x=0;b=Fa(86,f|0,0,324196)|0;c=x;x=0;do if(c&1){l=Hc()|0;p=M;q=l}else{k[e>>2]=k[b>>2];k[e+4>>2]=k[b+4>>2];k[e+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;l=i[e>>0]|0;m=(l&1)==0;x=0;Fa(88,a|0,(m?e+1|0:k[e+8>>2]|0)|0,(m?(l&255)>>>1:k[e+4>>2]|0)|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;K2a(e);p=m;q=l;break}K2a(e);K2a(f);r=d;return}while(0);K2a(f);n=p;o=q;K2a(a);Sc(o|0)}function I9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0;c=r;r=r+32|0;d=c+8|0;e=c;k[a>>2]=0;f=a+4|0;k[f>>2]=0;k[a+8>>2]=0;g=k[b+32>>2]|0;h=k[g+40>>2]|0;i=k[g+44>>2]|0;if((h|0)==(i|0)){r=c;return}g=b+24|0;b=e+4|0;j=d+12|0;l=d+16|0;m=d+20|0;n=a+8|0;o=h;a:while(1){h=k[o>>2]|0;x=0;p=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;h=x;x=0;if(h&1){q=4;break}h=k[p+4>>2]|0;s=k[p+8>>2]|0;p=(s|0)==0;if(!p)h0a(s);do if(k[g>>2]|0){x=0;t=Ba(k[(k[h>>2]|0)+52>>2]|0,h|0)|0;u=x;x=0;if(u&1){v=s;w=p;q=12;break a}if(t){y=k[g>>2]|0;q=13;break}if(!p)j0a(s)}else{y=0;q=13}while(0);if((q|0)==13){q=0;t=k[(k[o>>2]|0)+24>>2]|0;if((h|0)!=0?(u=iDa(h,168,6688,0)|0,(u|0)!=0):0){x=0;nb(k[(k[u>>2]|0)+104>>2]|0,e|0,u|0,y|0,0);u=x;x=0;if(u&1){v=s;w=p;q=12;break}}else q=16;if((q|0)==16?(q=0,k[e>>2]=h,k[b>>2]=s,!p):0)h0a(s);u=k[o>>2]|0;x=0;xa(604,d|0,t|0);t=x;x=0;if(t&1){z=s;A=p;q=33;break}k[j>>2]=k[e>>2];t=k[b>>2]|0;k[l>>2]=t;if(t)h0a(t);k[m>>2]=u;u=k[f>>2]|0;if(u>>>0>=(k[n>>2]|0)>>>0){x=0;xa(799,a|0,d|0);t=x;x=0;if(t&1){B=s;C=p;q=34;break}t=k[l>>2]|0;if(t)j0a(t)}else{k[u>>2]=k[d>>2];k[u+4>>2]=k[d+4>>2];k[u+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[u+12>>2]=k[j>>2];k[u+16>>2]=k[l>>2];k[j>>2]=0;k[l>>2]=0;k[u+20>>2]=k[m>>2];k[f>>2]=(k[f>>2]|0)+24}K2a(d);u=k[b>>2]|0;if(u)j0a(u);if(!p)j0a(s)}o=o+8|0;if((o|0)==(i|0)){q=3;break}}if((q|0)==3){r=c;return}else if((q|0)==4){c=Hc()|0;D=M;E=c}else if((q|0)==12){c=Hc()|0;F=M;G=c;H=w;I=v;q=39}else if((q|0)==33){v=Hc()|0;J=M;K=v;L=A;N=z;q=37}else if((q|0)==34){z=Hc()|0;A=M;v=k[l>>2]|0;if(v)j0a(v);K2a(d);J=A;K=z;L=C;N=B;q=37}if((q|0)==37){B=k[b>>2]|0;if(!B){F=J;G=K;H=L;I=N;q=39}else{j0a(B);F=J;G=K;H=L;I=N;q=39}}if((q|0)==39)if(H){D=F;E=G}else{j0a(I);D=F;E=G}G=k[a>>2]|0;if(!G)Sc(E|0);F=k[f>>2]|0;if((F|0)==(G|0))O=G;else{D=F;do{F=D+-24|0;k[f>>2]=F;I=k[D+-8>>2]|0;if(I)j0a(I);K2a(F);D=k[f>>2]|0}while((D|0)!=(G|0));O=k[a>>2]|0}OBa(O);Sc(E|0)}function J9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c?(k[b+24>>2]|0)==0:0){k[a>>2]=k[b+4>>2];c=a+4|0;d=k[b+8>>2]|0;if(d){b=l0a(d)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}k[a>>2]=0;k[a+4>>2]=0;return}function K9(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=k[b+32>>2]|0;b=KBa(48)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=33076;f=b+16|0;k[f>>2]=0;g=b+20|0;k[g>>2]=0;h=b+12|0;j=b+28|0;k[j>>2]=0;k[b+32>>2]=0;k[b+24>>2]=j;k[b+36>>2]=c;c=b+40|0;i[c>>0]=1;k[h>>2]=38380;k[b+44>>2]=e;e=h;i0a(b);k[f>>2]=e;f=k[g>>2]|0;k[g>>2]=b;if(f)k0a(f);i[c>>0]=d&1;k[a>>2]=e;k[a+4>>2]=b;h0a(b);j0a(b);return}function L9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[b+32>>2]|0;n2a(a,(Vf[k[(k[d>>2]|0)+16>>2]&1023](d)|0)+4|0);if(!c)return;if(k[b+24>>2]|0)return;x=0;Ta(484,a|0,252715)|0;b=x;x=0;if(b&1){b=Hc()|0;K2a(a);Sc(b|0)}else return}function M9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;c=r;r=r+80|0;d=c+68|0;e=c+56|0;f=c+48|0;g=c+40|0;h=c+24|0;i=c+16|0;j=c+4|0;l=c;k[d>>2]=0;m=d+4|0;k[m>>2]=0;k[d+8>>2]=0;k[e>>2]=0;n=e+4|0;k[n>>2]=0;k[e+8>>2]=0;x=0;o=Ta(572,b|0,0)|0;p=x;x=0;a:do if(!(p&1)){q=k[o>>2]|0;s=k[o+4>>2]|0;b:do if((q|0)!=(s|0)){t=e+8|0;u=f+4|0;v=d+8|0;w=q;c:while(1){y=w+12|0;z=k[y>>2]|0;x=0;A=Ba(k[(k[z>>2]|0)+52>>2]|0,z|0)|0;z=x;x=0;if(z&1){B=5;break}do if(A){z=k[n>>2]|0;x=0;if((z|0)==(k[t>>2]|0)){Rx(e,w);C=x;x=0;if(C&1){B=5;break c}}else{n2a(z,w);z=x;x=0;if(z&1){B=5;break c}k[n>>2]=(k[n>>2]|0)+12}z=k[y>>2]|0;C=z;if((z|0)!=0?(D=iDa(z,168,6688,0)|0,(D|0)!=0):0){x=0;nb(k[(k[D>>2]|0)+104>>2]|0,f|0,D|0,2,0);D=x;x=0;if(D&1){B=5;break c}}else B=17;if((B|0)==17?(B=0,k[f>>2]=C,C=k[w+16>>2]|0,k[u>>2]=C,(C|0)!=0):0)h0a(C);C=k[m>>2]|0;if(C>>>0<(k[v>>2]|0)>>>0){k[C>>2]=k[f>>2];k[C+4>>2]=k[u>>2];k[f>>2]=0;k[u>>2]=0;k[m>>2]=C+8;break}x=0;xa(745,d|0,f|0);C=x;x=0;if(C&1)break c;C=k[u>>2]|0;if(C)j0a(C)}while(0);w=w+24|0;if((w|0)==(s|0))break b}if((B|0)==5){w=Hc()|0;E=w;F=M;B=7;break a}w=Hc()|0;v=M;t=k[u>>2]|0;if(!t){G=w;H=v;break a}j0a(t);G=w;H=v;break a}while(0);x=0;nb(k[(k[b>>2]|0)+104>>2]|0,i|0,b|0,2,0);s=x;x=0;if(s&1){s=Hc()|0;G=s;H=M;break}k[h>>2]=0;s=h+4|0;k[s>>2]=0;k[h+8>>2]=0;x=0;q=Ba(563,8)|0;v=x;x=0;do if(v&1){w=Hc()|0;I=w;J=M}else{k[s>>2]=q;k[h>>2]=q;k[h+8>>2]=q+8;k[q>>2]=k[i>>2];w=k[i+4>>2]|0;k[q+4>>2]=w;if(w)h0a(w);k[s>>2]=q+8;k[j>>2]=0;w=j+4|0;k[w>>2]=0;k[j+8>>2]=0;k[l>>2]=0;x=0;La(58,g|0,d|0,h|0,e|0,j|0,l|0);t=x;x=0;if(t&1){t=Hc()|0;y=M;A=k[j>>2]|0;if(A){C=k[w>>2]|0;if((C|0)!=(A|0)){D=C;do{D=D+-12|0;K2a(D)}while((D|0)!=(A|0));k[w>>2]=A}OBa(A)}D=k[q+4>>2]|0;if(D)j0a(D);k[s>>2]=q;OBa(q);I=t;J=y;break}k[a>>2]=k[g>>2];D=g+4|0;k[a+4>>2]=k[D>>2];k[g>>2]=0;k[D>>2]=0;D=k[j>>2]|0;if(D){u=k[w>>2]|0;if((u|0)!=(D|0)){C=u;do{C=C+-12|0;K2a(C)}while((C|0)!=(D|0));k[w>>2]=D}OBa(D)}C=k[q+4>>2]|0;if(C)j0a(C);k[s>>2]=q;OBa(q);C=k[i+4>>2]|0;if(C)j0a(C);C=k[e>>2]|0;if(C){y=k[n>>2]|0;if((y|0)==(C|0))K=C;else{t=y;do{y=t+-12|0;k[n>>2]=y;K2a(y);t=k[n>>2]|0}while((t|0)!=(C|0));K=k[e>>2]|0}OBa(K)}C=k[d>>2]|0;if(!C){r=c;return}t=k[m>>2]|0;if((t|0)==(C|0))L=C;else{D=t;while(1){t=D+-8|0;k[m>>2]=t;w=k[D+-4>>2]|0;if(!w)N=t;else{j0a(w);N=k[m>>2]|0}if((N|0)==(C|0))break;else D=N}L=k[d>>2]|0}OBa(L);r=c;return}while(0);q=k[i+4>>2]|0;if(!q){G=I;H=J}else{j0a(q);G=I;H=J}}else{q=Hc()|0;E=q;F=M;B=7}while(0);if((B|0)==7){G=E;H=F}F=k[e>>2]|0;if(F){H=k[n>>2]|0;if((H|0)==(F|0))O=F;else{E=H;do{H=E+-12|0;k[n>>2]=H;K2a(H);E=k[n>>2]|0}while((E|0)!=(F|0));O=k[e>>2]|0}OBa(O)}O=k[d>>2]|0;if(!O)Sc(G|0);e=k[m>>2]|0;if((e|0)==(O|0))P=O;else{F=e;while(1){e=F+-8|0;k[m>>2]=e;E=k[F+-4>>2]|0;if(!E)Q=e;else{j0a(E);Q=k[m>>2]|0}if((Q|0)==(O|0))break;else F=Q}P=k[d>>2]|0}OBa(P);Sc(G|0)}function N9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=c8(j8(a,0)|0,b)|0;q2a(d,252983,48);x=0;pa(57,(e|0)!=0|0,d|0,1482,250928,253032);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}else{K2a(d);r=c;return e|0}return 0}function O9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=r;r=r+64|0;e=d;f=d+40|0;k[e>>2]=0;g=e+32|0;k[g>>2]=1;h=j8(b,0)|0;b=k[h>>2]|0;j=k[h+4>>2]|0;a:do if((b|0)!=(j|0)){h=c+4|0;l=c+8|0;m=c+1|0;n=b;o=1;b:while(1){p=i[n>>0]|0;q=(p&1)==0;s=(p&255)>>>1;p=q?s:k[n+4>>2]|0;t=i[c>>0]|0;u=(t&1)==0;c:do if((p|0)==((u?(t&255)>>>1:k[h>>2]|0)|0)){v=u?m:k[l>>2]|0;if(!q)if(!(ZLa(k[n+8>>2]|0,v,p)|0))break b;else break;if(!p)break b;w=s;y=n+1|0;z=v;while(1){if((i[y>>0]|0)!=(i[z>>0]|0))break c;w=w+-1|0;if(!w)break b;else{y=y+1|0;z=z+1|0}}}while(0);s=k[n+12>>2]|0;p=Vf[k[(k[s>>2]|0)+32>>2]&1023](s)|0;d:do if(p){if(!o){A=o;B=p}else{s=p;q=0;u=0;while(1){t=e+(u<<2)|0;z=Hyb(k[t>>2]|0,0,s|0,q|0)|0;y=M;k[t>>2]=z;if((y|0)==0&0==0)break d;u=u+1|0;z=k[g>>2]|0;if(u>>>0>=z>>>0){C=z;D=y;break}else{s=y;q=0}}A=C;B=D}q=A+1|0;s=q>>>0>8?8:q;k[g>>2]=s;if(s>>>0>A>>>0)k[e+(A<<2)>>2]=B}while(0);p=k[g>>2]|0;s=p+-1|0;e:do if(!s)E=p;else{q=s;u=p;while(1){if(k[e+(q<<2)>>2]|0){E=u;break e}k[g>>2]=q;y=q+-1|0;if(!y){E=q;break}else{z=q;q=y;u=z}}}while(0);n=n+24|0;if((n|0)==(j|0))break a;else o=E}o=a;n=e;l=o+40|0;do{k[o>>2]=k[n>>2];o=o+4|0;n=n+4|0}while((o|0)<(l|0));r=d;return}while(0);q2a(f,253136,27);x=0;pa(57,0,f|0,1494,250928,253164);e=x;x=0;if(e&1){e=Hc()|0;K2a(f);Sc(e|0)}K2a(f);k[a>>2]=0;k[a+32>>2]=1;r=d;return}function P9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;k[a+4>>2]=0;k[a+8>>2]=0;e=a+4|0;k[a>>2]=e;f=k[b+32>>2]|0;b=k[f+40>>2]|0;g=k[f+44>>2]|0;if((b|0)==(g|0)){r=c;return}f=b;while(1){b=k[f>>2]|0;x=0;h=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){i=4;break}b=k[h+4>>2]|0;x=0;h=Ba(k[(k[b>>2]|0)+52>>2]|0,b|0)|0;b=x;x=0;if(b&1){i=4;break}if(!h?(x=0,fb(255,d|0,a|0,k[(k[f>>2]|0)+24>>2]|0),h=x,x=0,h&1):0){i=4;break}f=f+8|0;if((f|0)==(g|0)){i=3;break}}if((i|0)==3){r=c;return}else if((i|0)==4){i=Hc()|0;Ws(a,k[e>>2]|0);Sc(i|0)}}function Q9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;b=r;r=r+16|0;d=b;if((c|0)==49){QU(d);k[a>>2]=k[d>>2];c=d+4|0;k[a+4>>2]=k[c>>2];k[d>>2]=0;k[c>>2]=0;r=b;return}else{k[a>>2]=0;k[a+4>>2]=0;r=b;return}}function R9(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6736,0)|0;if(!c)BBa();d=(k[c+24>>2]|0)==(k[a+24>>2]|0);return d|0}function S9(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+24>>2]|0;a=(k[b+44>>2]|0)-(k[b+40>>2]|0)>>3;if(a>>>0<2){c=1;return c|0}b=a+-1|0;if(!b){c=0;return c|0}else{d=b;e=0}while(1){b=e+1|0;d=d>>>8;if(!d){c=b;break}else e=b}return c|0}function T9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c;q2a(d,253239,5);e=k[(k[b+24>>2]|0)+24>>2]|0;b=i[e>>0]|0;f=(b&1)==0;x=0;g=Fa(88,d|0,(f?e+1|0:k[e+8>>2]|0)|0,(f?(b&255)>>>1:k[e+4>>2]|0)|0)|0;e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{k[a>>2]=k[g>>2];k[a+4>>2]=k[g+4>>2];k[a+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(d);r=c;return}}function U9(a,b,c){a=a|0;b=b|0;c=c|0;c=k[b+24>>2]|0;n2a(a,(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0);return}function V9(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)==(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=1;return d|0}d=(Vf[k[k[b>>2]>>2]&1023](b)|0)==0;return d|0}function W9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+80|0;d=c+16|0;e=c;f=k[a+24>>2]|0;a=k[f+40>>2]|0;g=k[f+44>>2]|0;h=i[b>>0]|0;a:do if((a|0)!=(g|0)){j=(h&1)==0;l=k[b+4>>2]|0;m=j?(h&255)>>>1:l;n=j?b+1|0:k[b+8>>2]|0;j=(m|0)==0;o=a;p=0;b:while(1){q=k[(k[o>>2]|0)+24>>2]|0;s=i[q>>0]|0;t=(s&1)==0;u=(s&255)>>>1;c:do if(((t?u:k[q+4>>2]|0)|0)==(m|0)){if(!t){s=(ZLa(k[q+8>>2]|0,n,m)|0)==0;if(s){v=p;w=25;break b}else{y=(s&1^1)+p|0;break}}if(j){v=p;w=25;break b}s=u;z=q+1|0;A=n;while(1){if((i[z>>0]|0)!=(i[A>>0]|0)){w=10;break c}s=s+-1|0;if(!s){v=p;w=25;break b}else{z=z+1|0;A=A+1|0}}}else w=10;while(0);if((w|0)==10){w=0;y=p+1|0}o=o+8|0;if((o|0)==(g|0)){B=l;break a}else p=y}if((w|0)==25){r=c;return v|0}}else B=k[b+4>>2]|0;while(0);k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;v=(h&1)==0?(h&255)>>>1:B;x=0;nb(83,e|0,253245,30,v+30|0);B=x;x=0;if(B&1){C=Hc()|0;D=M;K2a(e);Sc(C|0)}x=0;Fa(88,e|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0,v|0)|0;v=x;x=0;if(v&1){C=Hc()|0;D=M;K2a(e);Sc(C|0)}x=0;fb(273,d|0,f|0,e|0);f=x;x=0;if(f&1){f=Hc()|0;E=M;F=f;K2a(e);Sc(F|0)}x=0;nb(122,d|0,253276,250928,1553);x=0;f=Hc()|0;C=M;D=d+20|0;k[D>>2]=31332;k[d>>2]=31296;k[d+36>>2]=31356;K2a(d+8|0);k[D>>2]=31388;k[D+-20>>2]=31416;k[D+16>>2]=31440;K2a(d+24|0);k[d+36>>2]=20796;D=d+40|0;d=k[D>>2]|0;if(d){x=0;v=Ba(k[(k[d>>2]|0)+16>>2]|0,d|0)|0;d=x;x=0;if(d&1){d=Hc(0)|0;Fg(d)}if(v)k[D>>2]=0}E=C;F=f;K2a(e);Sc(F|0);return 0}function X9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=iDa(b,168,6752,0)|0;if(!c){d=0;return d|0}b=c+24|0;e=k[b>>2]|0;f=c+28|0;c=k[f>>2]|0;g=a+24|0;h=c;i=e;if((e|0)==(c|0)){d=(k[g>>2]|0)==(k[a+28>>2]|0);return d|0}j=a+28|0;a=k[j>>2]|0;l=k[g>>2]|0;m=a-l|0;n=h-i|0;o=l;if(((m|0)!=(n|0)?(k[e>>2]|0)==0:0)?(k[c+-8>>2]|0)==0:0){d=0;return d|0}p=n>>3;if((k[c+-8>>2]|0)!=0?(k[e>>2]|0)!=0:0)q=p;else q=p+-1|0;n=m>>3;if(n>>>0>>0){d=0;return d|0}if((n>>>0>p>>>0?(k[e>>2]|0)!=0:0)?(k[c+-8>>2]|0)!=0:0){d=0;return d|0}if(!(k[c+-8>>2]|0))r=1;else r=(k[e>>2]|0)!=0;if(!((n>>>0

      >>0?n:p)|0)){d=1;return d|0}if(r){r=l;p=a;c=i;q=h;m=o;s=e;t=0;while(1){u=k[m+(t<<3)>>2]|0;v=k[s+(t<<3)>>2]|0;w=(v|0)==0;if(!u)if(w){x=c;y=q;z=r;A=p}else{d=0;B=30;break}else if(w){x=c;y=q;z=r;A=p}else{if(!(cg[k[(k[u>>2]|0)+4>>2]&1023](u,v)|0)){d=0;B=30;break}x=k[b>>2]|0;y=k[f>>2]|0;z=k[g>>2]|0;A=k[j>>2]|0}t=t+1|0;v=y-x>>3;u=A-z>>3;if(t>>>0>=(u>>>0>>0?u:v)>>>0){d=1;B=30;break}else{r=z;p=A;c=x;q=y;m=z;s=x}}if((B|0)==30)return d|0}else{x=l;l=a;a=n;n=i;i=h;h=o;o=e;e=0;s=0;while(1){z=e+-1|0;m=k[h+(z+a<<3)>>2]|0;y=k[o+(z+(i-n>>3)<<3)>>2]|0;z=(y|0)==0;if(!m)if(z){C=x;D=l;E=n;F=i}else{d=0;B=30;break}else if(z){C=x;D=l;E=n;F=i}else{if(!(cg[k[(k[m>>2]|0)+4>>2]&1023](m,y)|0)){d=0;B=30;break}C=k[g>>2]|0;D=k[j>>2]|0;E=k[b>>2]|0;F=k[f>>2]|0}y=s+1|0;m=F-E>>3;a=D-C>>3;if(y>>>0>=(a>>>0>>0?a:m)>>>0){d=1;B=30;break}else{x=C;l=D;n=E;i=F;h=C;o=E;e=~s;s=y}}if((B|0)==30)return d|0}return 0}function Y9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=iDa(b,168,6752,0)|0;if(!c){d=0;return d|0}b=k[a+28>>2]|0;e=k[a+24>>2]|0;a=k[c+24>>2]|0;f=e;g=b;if((b-e|0)!=((k[c+28>>2]|0)-a|0)){d=0;return d|0}if((f|0)==(g|0)){d=1;return d|0}c=f;f=a;while(1){if((k[c>>2]|0)!=(k[f>>2]|0)){d=0;h=7;break}c=c+8|0;if((c|0)==(g|0)){d=1;h=7;break}else f=f+8|0}if((h|0)==7)return d|0;return 0}function Z9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+48|0;e=d+24|0;f=d+12|0;g=d;h=b+24|0;j=b+28|0;if((k[h>>2]|0)==(k[j>>2]|0)){q2a(a,253351,7);r=d;return}q2a(e,253359,6);b=k[h>>2]|0;h=k[j>>2]|0;a:do if((b|0)==(h|0))l=5;else{j=f+8|0;m=f+1|0;n=f+4|0;o=b;while(1){p=k[o>>2]|0;if(!p){x=0;fb(140,g|0,329672,0);q=x;x=0;if(q&1){l=11;break}}else{x=0;fb(k[(k[p>>2]|0)+76>>2]|0,g|0,p|0,c|0);p=x;x=0;if(p&1){l=11;break}}x=0;p=Ta(484,g|0,301287)|0;q=x;x=0;if(q&1){l=19;break};k[f>>2]=k[p>>2];k[f+4>>2]=k[p+4>>2];k[f+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;p=i[f>>0]|0;q=(p&1)==0;x=0;Fa(88,e|0,(q?m:k[j>>2]|0)|0,(q?(p&255)>>>1:k[n>>2]|0)|0)|0;p=x;x=0;if(p&1){l=20;break}K2a(f);K2a(g);o=o+8|0;if((o|0)==(h|0)){l=5;break a}}if((l|0)==11){o=Hc()|0;s=M;t=o;break}else if((l|0)==19){o=Hc()|0;u=o;v=M}else if((l|0)==20){o=Hc()|0;n=M;K2a(f);u=o;v=n}K2a(g);w=u;y=v;K2a(e);Sc(w|0)}while(0);if((l|0)==5){l=i[e>>0]|0;if(!(l&1)){v=((l&255)>>>1)+-1|0;i[e>>0]=v<<1;i[e+1+v>>0]=0;z=e+8|0;A=e;B=e+4|0}else{v=e+4|0;l=(k[v>>2]|0)+-1|0;k[v>>2]=l;u=e+8|0;i[(k[u>>2]|0)+l>>0]=0;z=u;A=e;B=v};k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;v=i[e>>0]|0;u=(v&1)==0;l=u?(v&255)>>>1:k[B>>2]|0;x=0;nb(83,a|0,(u?A+1|0:k[z>>2]|0)|0,l|0,l+1|0);l=x;x=0;if(!(l&1)?(x=0,Fa(88,a|0,300015,1)|0,l=x,x=0,!(l&1)):0){K2a(e);r=d;return}d=Hc()|0;l=M;K2a(a);s=l;t=d}w=t;y=s;K2a(e);Sc(w|0)}function _9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+96|0;a=b+72|0;c=b+32|0;d=b+16|0;e=b;b=c;f=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(f|0));b=c+20|0;f=c+24|0;k[f>>2]=0;k[c+28>>2]=0;k[c+32>>2]=0;k[c+36>>2]=-1;g=c+4|0;h=g+-4|0;i=g+16|0;j=c+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;K2a(a);k[c+4>>2]=20924;k[c>>2]=20888;k[b>>2]=20948;x=0;fb(140,e|0,253366,50);a=x;x=0;if(a&1){a=Hc()|0;l=M;m=a}else{k[d>>2]=21048;a=d+4|0;x=0;xa(604,a|0,e|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,c|0,d|0)|0;c=x;x=0;if(!(c&1)){x=0;nb(87,n|0,253417,250928,1612);x=0}n=Hc()|0;c=M;k[d>>2]=21048;K2a(a);o=c;p=n}K2a(e);l=o;m=p}k[g>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[f>>2]|0;if(!b)Sc(m|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(m|0);k[f>>2]=0;Sc(m|0)}function $9(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=k[a+24>>2]|0;c=k[a+28>>2]|0;if((b|0)==(c|0)){d=0;return d|0}else{e=b;f=0}while(1){b=k[e>>2]|0;if(!b)g=0;else g=Vf[k[(k[b>>2]|0)+60>>2]&1023](b)|0;b=g+f|0;e=e+8|0;if((e|0)==(c|0)){d=b;break}else f=b}return d|0}function aaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;k[d>>2]=0;g=d+4|0;k[g>>2]=0;k[d+8>>2]=0;h=k[b+24>>2]|0;i=k[b+28>>2]|0;a:do if((h|0)!=(i|0)){b=e+4|0;j=d+8|0;l=h;while(1){m=k[l>>2]|0;if(m){x=0;xa(k[(k[m>>2]|0)+64>>2]|0,e|0,m|0);m=x;x=0;if(m&1){n=4;break}}else{k[e>>2]=0;k[b>>2]=0}m=k[g>>2]|0;if(m>>>0>=(k[j>>2]|0)>>>0){x=0;xa(745,d|0,e|0);o=x;x=0;if(o&1)break;o=k[b>>2]|0;if(o)j0a(o)}else{k[m>>2]=k[e>>2];k[m+4>>2]=k[b>>2];k[e>>2]=0;k[b>>2]=0;k[g>>2]=m+8}l=l+8|0;if((l|0)==(i|0)){n=3;break a}}if((n|0)==4){l=Hc()|0;p=l;q=M;n=6;break}l=Hc()|0;j=M;m=k[b>>2]|0;if(!m){s=l;t=j}else{j0a(m);s=l;t=j}}else n=3;while(0);do if((n|0)==3){x=0;xa(746,f|0,d|0);i=x;x=0;if(i&1){i=Hc()|0;p=i;q=M;n=6;break}k[a>>2]=k[f>>2];i=f+4|0;k[a+4>>2]=k[i>>2];k[f>>2]=0;k[i>>2]=0;i=k[d>>2]|0;if(!i){r=c;return}e=k[g>>2]|0;if((e|0)==(i|0))u=i;else{h=e;while(1){e=h+-8|0;k[g>>2]=e;j=k[h+-4>>2]|0;if(!j)v=e;else{j0a(j);v=k[g>>2]|0}if((v|0)==(i|0))break;else h=v}u=k[d>>2]|0}OBa(u);r=c;return}while(0);if((n|0)==6){s=p;t=q}q=k[d>>2]|0;if(!q)Sc(s|0);t=k[g>>2]|0;if((t|0)==(q|0))w=q;else{p=t;while(1){t=p+-8|0;k[g>>2]=t;n=k[p+-4>>2]|0;if(!n)y=t;else{j0a(n);y=k[g>>2]|0}if((y|0)==(q|0))break;else p=y}w=k[d>>2]|0}OBa(w);Sc(s|0)}function baa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;d=r;r=r+48|0;e=d+16|0;f=d+28|0;g=d+8|0;h=d;i=(k[c>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,i|0,e|0,1633,250928,253476);i=x;x=0;if(i&1){i=Hc()|0;j=M;K2a(e);l=i;m=j;Sc(l|0)}K2a(e);e=iDa(k[c>>2]|0,168,6752,0)|0;if(!e)BBa();c=e+24|0;j=k[c>>2]|0;i=e+28|0;e=k[i>>2]|0;n=e;o=j;if((j|0)!=(e|0))if(!(k[e+-8>>2]|0))p=1;else p=(k[j>>2]|0)!=0;else p=0;Hba(f,n-o>>3);o=k[i>>2]|0;n=k[c>>2]|0;j=o-n>>3;e=b+24|0;q=b+28|0;b=k[e>>2]|0;s=(k[q>>2]|0)-b>>3;t=b;b=n;a:do if((s>>>0>>0?s:j)|0){u=g+4|0;if(p){v=t;w=b;y=0;while(1){z=k[v+(y<<3)>>2]|0;if((z|0)!=0?(A=w+(y<<3)|0,(k[A>>2]|0)!=0):0){B=k[f>>2]|0;x=0;fb(k[(k[z>>2]|0)+72>>2]|0,g|0,z|0,A|0);A=x;x=0;if(A&1)break;A=k[g>>2]|0;z=k[u>>2]|0;k[g>>2]=0;k[u>>2]=0;k[B+(y<<3)>>2]=A;A=B+(y<<3)+4|0;B=k[A>>2]|0;k[A>>2]=z;if(B)j0a(B);B=k[u>>2]|0;if(B)j0a(B)}y=y+1|0;w=k[c>>2]|0;B=(k[i>>2]|0)-w>>3;v=k[e>>2]|0;z=(k[q>>2]|0)-v>>3;if(y>>>0>=(z>>>0>>0?z:B)>>>0){C=18;break a}}y=Hc()|0;D=f;E=y;F=M;break}else{y=s;v=n;w=o;B=t;z=b;A=0;G=0;while(1){H=A+-1|0;I=H+(w-v>>3)|0;J=k[B+(H+y<<3)>>2]|0;if((J|0)!=0?(H=z+(I<<3)|0,(k[H>>2]|0)!=0):0){K=k[f>>2]|0;x=0;fb(k[(k[J>>2]|0)+72>>2]|0,g|0,J|0,H|0);H=x;x=0;if(H&1)break;H=k[g>>2]|0;J=k[u>>2]|0;k[g>>2]=0;k[u>>2]=0;k[K+(I<<3)>>2]=H;H=K+(I<<3)+4|0;I=k[H>>2]|0;k[H>>2]=J;if(I)j0a(I);I=k[u>>2]|0;if(I)j0a(I)}I=G+1|0;J=k[i>>2]|0;H=k[c>>2]|0;K=J-H>>3;L=k[e>>2]|0;N=(k[q>>2]|0)-L>>3;if(I>>>0<(N>>>0>>0?N:K)>>>0){y=N;v=H;w=J;B=L;z=H;A=~G;G=I}else{C=18;break a}}G=Hc()|0;D=f;E=G;F=M;break}}else C=18;while(0);do if((C|0)==18){x=0;xa(746,h|0,f|0);q=x;x=0;if(q&1){q=Hc()|0;D=f;E=q;F=M;break}k[a>>2]=k[h>>2];q=h+4|0;k[a+4>>2]=k[q>>2];k[h>>2]=0;k[q>>2]=0;q=k[f>>2]|0;if(!q){r=d;return}e=f+4|0;c=k[e>>2]|0;if((c|0)==(q|0))O=q;else{i=c;while(1){c=i+-8|0;k[e>>2]=c;g=k[i+-4>>2]|0;if(!g)P=c;else{j0a(g);P=k[e>>2]|0}if((P|0)==(q|0))break;else i=P}O=k[f>>2]|0}OBa(O);r=d;return}while(0);d=k[D>>2]|0;if(!d){l=E;m=F;Sc(l|0)}D=f+4|0;O=k[D>>2]|0;if((O|0)==(d|0))Q=d;else{P=O;while(1){O=P+-8|0;k[D>>2]=O;h=k[P+-4>>2]|0;if(!h)R=O;else{j0a(h);R=k[D>>2]|0}if((R|0)==(d|0))break;else P=R}Q=k[f>>2]|0}OBa(Q);l=E;m=F;Sc(l|0)}function caa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0;d=r;r=r+48|0;e=d+36|0;f=d+24|0;g=d+12|0;h=d;k[a+4>>2]=0;j=a+8|0;k[j>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;l=a+16|0;k[a+12>>2]=l;k[a>>2]=37588;m=a+24|0;n=a+28|0;o=a+36|0;p=a+40|0;q=a+48|0;s=a+52|0;t=a+60|0;u=a+64|0;v=a+72|0;w=c&1^1;c=m;y=c+48|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(y|0));k[v>>2]=w;w=a+76|0;i[w>>0]=0;i[w+1>>0]=0;i[w+2>>0]=0;i[w+3>>0]=0;i[a+80>>0]=i[b+78>>0]|0;i[a+81>>0]=i[b+79>>0]|0;k[a+84>>2]=b;k[e>>2]=0;w=e+4|0;k[w>>2]=0;k[e+8>>2]=0;k[f>>2]=0;v=f+4|0;k[v>>2]=0;k[f+8>>2]=0;k[g>>2]=0;c=g+4|0;k[c>>2]=0;k[g+8>>2]=0;k[h>>2]=0;y=h+4|0;k[y>>2]=0;k[h+8>>2]=0;z=k[b+52>>2]|0;A=k[z+28>>2]|0;B=k[z+24>>2]|0;C=A-B|0;D=C>>3;E=e+8|0;if(D){x=0;F=Ba(563,C|0)|0;C=x;x=0;if(C&1)G=25;else{C=F;k[e>>2]=C;k[w>>2]=C;k[E>>2]=F+(D<<3);H=k[z+28>>2]|0;I=k[z+24>>2]|0;G=4}}else{H=A;I=B;G=4}a:do if((G|0)==4){B=z+28|0;A=H-I>>3;D=f+8|0;if(!A){J=0;K=0;L=H}else{x=0;F=Ba(563,A*12|0)|0;C=x;x=0;if(C&1){G=25;break}C=F;N=F+(A*12|0)|0;k[f>>2]=C;k[v>>2]=C;k[D>>2]=N;J=N;K=F;L=k[B>>2]|0}B=k[z+24>>2]|0;do if((B|0)!=(L|0)){F=B;N=K;C=J;while(1){A=k[(k[F>>2]|0)+24>>2]|0;x=0;if((N|0)==(C|0)){Rx(f,A);O=x;x=0;if(O&1){G=24;break}}else{n2a(N,A);A=x;x=0;if(A&1){G=24;break}k[v>>2]=(k[v>>2]|0)+12}A=k[F>>2]|0;x=0;O=Ba(k[(k[A>>2]|0)+16>>2]|0,A|0)|0;A=x;x=0;if(A&1){G=24;break}A=O+4|0;P=k[w>>2]|0;if((P|0)==(k[E>>2]|0)){x=0;xa(743,e|0,A|0);Q=x;x=0;if(Q&1){G=24;break}}else{k[P>>2]=k[A>>2];A=k[O+8>>2]|0;k[P+4>>2]=A;if(!A)R=P;else{h0a(A);R=k[w>>2]|0}k[w>>2]=R+8}A=F+8|0;if((A|0)==(L|0)){G=9;break}F=A;N=k[v>>2]|0;C=k[D>>2]|0}if((G|0)==9){C=g+8|0;S=C;T=g;U=C;V=k[g>>2]|0;W=k[C>>2]|0;break}else if((G|0)==24){C=Hc()|0;X=C;Y=M;break a}}else{C=g+8|0;S=C;T=g;U=C;V=0;W=0}while(0);B=b+60|0;C=k[B>>2]|0;N=(k[C+28>>2]|0)-(k[C+24>>2]|0)|0;C=N>>3;F=V;if(W-V>>3>>>0>>0){A=k[c>>2]|0;P=A-V>>3;O=A;if(!C)Z=0;else{x=0;A=Ba(563,N|0)|0;N=x;x=0;if(N&1){G=25;break}Z=A}A=Z+(P<<3)|0;P=A;N=Z+(C<<3)|0;if((O|0)==(F|0)){_=P;$=V;aa=F}else{C=O;O=P;Q=A;while(1){A=C;C=C+-8|0;k[Q+-8>>2]=k[C>>2];ba=A+-4|0;k[Q+-4>>2]=k[ba>>2];k[C>>2]=0;k[ba>>2]=0;Q=O+-8|0;ba=Q;if((C|0)==(F|0)){ca=ba;break}else O=ba}_=ca;$=k[T>>2]|0;aa=k[c>>2]|0}k[T>>2]=_;k[c>>2]=P;k[S>>2]=N;O=$;if((aa|0)!=(O|0)){F=aa;do{C=k[F+-4>>2]|0;F=F+-8|0;if(C)j0a(C)}while((F|0)!=(O|0))}if($)OBa($)}O=k[B>>2]|0;F=(k[O+28>>2]|0)-(k[O+24>>2]|0)>>3;O=h+8|0;N=k[h>>2]|0;P=N;if((((k[O>>2]|0)-N|0)/12|0)>>>0>>0){C=k[y>>2]|0;Q=(C-N|0)/12|0;ba=C;if(!F)da=0;else{x=0;C=Ba(563,F*12|0)|0;A=x;x=0;if(A&1){G=25;break}da=C}C=da+(Q*12|0)|0;Q=C;A=da+(F*12|0)|0;if((ba|0)==(P|0)){ea=Q;fa=N;ga=P}else{N=ba;ba=C;C=Q;while(1){F=ba+-12|0;N=N+-12|0;k[F>>2]=k[N>>2];k[F+4>>2]=k[N+4>>2];k[F+8>>2]=k[N+8>>2];k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;ba=C+-12|0;F=ba;if((N|0)==(P|0)){ha=F;break}else C=F}ea=ha;fa=k[h>>2]|0;ga=k[y>>2]|0}k[h>>2]=ea;k[y>>2]=Q;k[O>>2]=A;C=fa;if((ga|0)!=(C|0)){P=ga;do{P=P+-12|0;K2a(P)}while((P|0)!=(C|0))}if(fa)OBa(fa)}C=k[B>>2]|0;P=k[C+24>>2]|0;A=k[C+28>>2]|0;b:do if((P|0)!=(A|0)){C=P;while(1){Q=k[(k[C>>2]|0)+24>>2]|0;N=k[y>>2]|0;x=0;if((N|0)==(k[O>>2]|0)){Rx(h,Q);ba=x;x=0;if(ba&1)break}else{n2a(N,Q);Q=x;x=0;if(Q&1)break;k[y>>2]=(k[y>>2]|0)+12}Q=k[C>>2]|0;x=0;N=Ba(k[(k[Q>>2]|0)+16>>2]|0,Q|0)|0;Q=x;x=0;if(Q&1)break;Q=N+4|0;ba=k[c>>2]|0;if((ba|0)==(k[U>>2]|0)){x=0;xa(743,g|0,Q|0);F=x;x=0;if(F&1)break}else{k[ba>>2]=k[Q>>2];Q=k[N+8>>2]|0;k[ba+4>>2]=Q;if(!Q)ia=ba;else{h0a(Q);ia=k[c>>2]|0}k[c>>2]=ia+8}C=C+8|0;if((C|0)==(A|0))break b}C=Hc()|0;X=C;Y=M;break a}while(0);A=k[e>>2]|0;k[e>>2]=k[m>>2];k[m>>2]=A;A=k[w>>2]|0;k[w>>2]=k[n>>2];k[n>>2]=A;A=a+32|0;P=k[E>>2]|0;k[E>>2]=k[A>>2];k[A>>2]=P;P=k[f>>2]|0;k[f>>2]=k[q>>2];k[q>>2]=P;P=k[v>>2]|0;k[v>>2]=k[s>>2];k[s>>2]=P;P=a+56|0;A=k[D>>2]|0;k[D>>2]=k[P>>2];k[P>>2]=A;A=k[T>>2]|0;P=k[o>>2]|0;k[T>>2]=P;k[o>>2]=A;A=k[c>>2]|0;k[c>>2]=k[p>>2];k[p>>2]=A;A=a+44|0;B=k[S>>2]|0;k[S>>2]=k[A>>2];k[A>>2]=B;B=k[h>>2]|0;A=k[t>>2]|0;k[h>>2]=A;k[t>>2]=B;B=k[y>>2]|0;C=k[u>>2]|0;k[y>>2]=C;k[u>>2]=B;B=a+68|0;Q=k[O>>2]|0;k[O>>2]=k[B>>2];k[B>>2]=Q;Q=A;B=C;if(!A)ja=P;else{if((B|0)==(Q|0))ka=A;else{A=B;do{B=A+-12|0;k[y>>2]=B;K2a(B);A=k[y>>2]|0}while((A|0)!=(Q|0));ka=k[h>>2]|0}OBa(ka);ja=k[g>>2]|0}if(ja){Q=k[c>>2]|0;if((Q|0)==(ja|0))la=ja;else{A=Q;while(1){Q=A+-8|0;k[c>>2]=Q;O=k[A+-4>>2]|0;if(!O)ma=Q;else{j0a(O);ma=k[c>>2]|0}if((ma|0)==(ja|0))break;else A=ma}la=k[g>>2]|0}OBa(la)}A=k[f>>2]|0;if(A){O=k[v>>2]|0;if((O|0)==(A|0))na=A;else{Q=O;do{O=Q+-12|0;k[v>>2]=O;K2a(O);Q=k[v>>2]|0}while((Q|0)!=(A|0));na=k[f>>2]|0}OBa(na)}A=k[e>>2]|0;if(!A){r=d;return}Q=k[w>>2]|0;if((Q|0)==(A|0))oa=A;else{O=Q;while(1){Q=O+-8|0;k[w>>2]=Q;D=k[O+-4>>2]|0;if(!D)pa=Q;else{j0a(D);pa=k[w>>2]|0}if((pa|0)==(A|0))break;else O=pa}oa=k[e>>2]|0}OBa(oa);r=d;return}while(0);if((G|0)==25){G=Hc()|0;X=G;Y=M}Y=k[h>>2]|0;if(Y){G=k[y>>2]|0;if((G|0)==(Y|0))qa=Y;else{d=G;do{G=d+-12|0;k[y>>2]=G;K2a(G);d=k[y>>2]|0}while((d|0)!=(Y|0));qa=k[h>>2]|0}OBa(qa)}qa=k[g>>2]|0;if(qa){h=k[c>>2]|0;if((h|0)==(qa|0))ra=qa;else{Y=h;while(1){h=Y+-8|0;k[c>>2]=h;d=k[Y+-4>>2]|0;if(!d)sa=h;else{j0a(d);sa=k[c>>2]|0}if((sa|0)==(qa|0))break;else Y=sa}ra=k[g>>2]|0}OBa(ra)}ra=k[f>>2]|0;if(ra){g=k[v>>2]|0;if((g|0)==(ra|0))ta=ra;else{sa=g;do{g=sa+-12|0;k[v>>2]=g;K2a(g);sa=k[v>>2]|0}while((sa|0)!=(ra|0));ta=k[f>>2]|0}OBa(ta)}ta=k[e>>2]|0;if(ta){f=k[w>>2]|0;if((f|0)==(ta|0))ua=ta;else{ra=f;while(1){f=ra+-8|0;k[w>>2]=f;sa=k[ra+-4>>2]|0;if(!sa)va=f;else{j0a(sa);va=k[w>>2]|0}if((va|0)==(ta|0))break;else ra=va}ua=k[e>>2]|0}OBa(ua)}ua=k[t>>2]|0;if(ua){e=k[u>>2]|0;if((e|0)==(ua|0))wa=ua;else{va=e;do{e=va+-12|0;k[u>>2]=e;K2a(e);va=k[u>>2]|0}while((va|0)!=(ua|0));wa=k[t>>2]|0}OBa(wa)}wa=k[q>>2]|0;if(wa){t=k[s>>2]|0;if((t|0)==(wa|0))ya=wa;else{ua=t;do{t=ua+-12|0;k[s>>2]=t;K2a(t);ua=k[s>>2]|0}while((ua|0)!=(wa|0));ya=k[q>>2]|0}OBa(ya)}ya=k[o>>2]|0;if(ya){q=k[p>>2]|0;if((q|0)==(ya|0))za=ya;else{wa=q;while(1){q=wa+-8|0;k[p>>2]=q;ua=k[wa+-4>>2]|0;if(!ua)Aa=q;else{j0a(ua);Aa=k[p>>2]|0}if((Aa|0)==(ya|0))break;else wa=Aa}za=k[o>>2]|0}OBa(za)}za=k[m>>2]|0;if(za){o=k[n>>2]|0;if((o|0)==(za|0))Ca=za;else{Aa=o;while(1){o=Aa+-8|0;k[n>>2]=o;wa=k[Aa+-4>>2]|0;if(!wa)Da=o;else{j0a(wa);Da=k[n>>2]|0}if((Da|0)==(za|0))break;else Aa=Da}Ca=k[m>>2]|0}OBa(Ca)}k[a>>2]=20456;xh(a+12|0,k[l>>2]|0);l=k[j>>2]|0;if(!l)Sc(X|0);k0a(l);Sc(X|0)}function daa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0;c=r;r=r+128|0;d=c+104|0;e=c+92|0;f=c+80|0;g=c+56|0;h=c+32|0;j=c+24|0;l=c+68|0;m=c+44|0;n=c+16|0;o=c;k[a+4>>2]=0;p=a+8|0;k[p>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;q=a+16|0;k[a+12>>2]=q;k[a>>2]=37588;s=a+24|0;t=a+28|0;u=a+36|0;v=a+40|0;w=a+48|0;y=a+52|0;z=a+60|0;A=a+64|0;B=a+72|0;C=s;D=C+48|0;do{k[C>>2]=0;C=C+4|0}while((C|0)<(D|0));k[B>>2]=1;B=a+76|0;i[B>>0]=0;i[B+1>>0]=0;i[B+2>>0]=0;i[B+3>>0]=0;i[a+80>>0]=1;i[a+81>>0]=0;k[a+84>>2]=b;k[e>>2]=0;B=e+4|0;k[B>>2]=0;k[e+8>>2]=0;k[f>>2]=0;C=f+4|0;k[C>>2]=0;k[f+8>>2]=0;x=0;D=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(!(b&1)){b=k[D+4>>2]|0;E=k[D+8>>2]|0;D=E;if(E)h0a(E);a:do if(!b){F=D;G=0;H=51}else{E=f+8|0;I=j+4|0;J=e+8|0;K=b;L=D;b:while(1){N=K;O=iDa(N,168,6784,0)|0;do if(O){P=O+24|0;Q=k[B>>2]|0;if((Q|0)==(k[J>>2]|0)){x=0;xa(743,e|0,P|0);R=x;x=0;if(R&1){S=L;H=22;break b}}else{k[Q>>2]=k[P>>2];P=k[O+28>>2]|0;k[Q+4>>2]=P;if(!P)T=Q;else{h0a(P);T=k[B>>2]|0}k[B>>2]=T+8}x=0;fb(140,g|0,329672,0);P=x;x=0;if(P&1){S=L;H=22;break b}P=k[C>>2]|0;if(P>>>0>=(k[E>>2]|0)>>>0){x=0;xa(650,f|0,g|0);Q=x;x=0;if(Q&1){U=L;H=24;break b}}else{k[P>>2]=k[g>>2];k[P+4>>2]=k[g+4>>2];k[P+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[C>>2]=(k[C>>2]|0)+12}K2a(g);P=k[O+32>>2]|0;Q=k[O+36>>2]|0;R=Q;if(Q)h0a(Q);if(!L){V=R;W=P}else{j0a(L);V=R;W=P}}else{P=iDa(N,168,6704,0)|0;if(!P){F=L;G=K;H=51;break a}if(k[P+32>>2]|0){F=L;G=K;H=51;break a}R=P+36|0;Q=k[R>>2]|0;x=0;fb(140,d|0,329672,0);X=x;x=0;if(X&1){S=L;H=22;break b}x=0;pa(57,(Q|0)!=0|0,d|0,588,285183,276209);Q=x;x=0;if(Q&1){Y=L;H=29;break b}K2a(d);Q=k[R>>2]|0;R=k[P+40>>2]|0;P=R;if(R)h0a(R);if(L)j0a(L);x=0;fb(140,h|0,329672,0);R=x;x=0;if(R&1){S=P;H=22;break b}R=k[C>>2]|0;if(R>>>0>=(k[E>>2]|0)>>>0){x=0;xa(650,f|0,h|0);X=x;x=0;if(X&1){Z=P;H=48;break b}}else{k[R>>2]=k[h>>2];k[R+4>>2]=k[h+4>>2];k[R+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[C>>2]=(k[C>>2]|0)+12}K2a(h);x=0;R=Ba(563,44)|0;X=x;x=0;if(X&1){S=P;H=22;break b}k[R+4>>2]=0;k[R+8>>2]=0;k[R>>2]=31848;X=R+12|0;x=0;fb(247,X|0,256,0);_=x;x=0;if(_&1){$=P;aa=R;H=42;break b}_=X;X=R;i0a(R);k[R+16>>2]=_;ba=R+20|0;R=k[ba>>2]|0;k[ba>>2]=X;if(R)k0a(R);k[j>>2]=_;k[I>>2]=X;R=k[B>>2]|0;if(R>>>0<(k[J>>2]|0)>>>0){k[R>>2]=_;k[R+4>>2]=X;k[j>>2]=0;k[I>>2]=0;k[B>>2]=R+8;V=P;W=Q;break}x=0;xa(745,e|0,j|0);R=x;x=0;if(R&1){ca=P;H=49;break b}R=k[I>>2]|0;if(!R){V=P;W=Q;break}j0a(R);V=P;W=Q}while(0);if(!W){F=V;G=0;H=51;break a}else{K=W;L=V}}if((H|0)==22){L=Hc()|0;da=S;ea=M;fa=L}else if((H|0)==24){L=Hc()|0;K=M;K2a(g);ga=L;ha=K;ia=U;break}else if((H|0)==29){K=Hc()|0;L=M;K2a(d);da=Y;ea=L;fa=K}else if((H|0)==42){K=Hc()|0;L=M;c0a(aa);OBa(aa);da=$;ea=L;fa=K}else if((H|0)==48){K=Hc()|0;L=M;K2a(h);ga=K;ha=L;ia=Z;break}else if((H|0)==49){L=Hc()|0;K=M;J=k[I>>2]|0;if(!J){ga=L;ha=K;ia=ca;break}j0a(J);ga=L;ha=K;ia=ca;break}ga=fa;ha=ea;ia=da}while(0);if((H|0)==51){k[l>>2]=0;da=l+4|0;k[da>>2]=0;k[l+8>>2]=0;k[m>>2]=0;ea=m+4|0;k[ea>>2]=0;k[m+8>>2]=0;c:do if(G){fa=G;ca=iDa(fa,168,6720,0)|0;if(!ca){Z=iDa(fa,168,6688,0)|0;if(!Z){H=75;break}x=0;nb(k[(k[Z>>2]|0)+104>>2]|0,n|0,Z|0,2,0);Z=x;x=0;if(Z&1){H=56;break}else{H=77;break}}x=0;Z=Ta(572,ca|0,0)|0;ca=x;x=0;if(!(ca&1)){ca=k[Z>>2]|0;fa=k[Z+4>>2]|0;Z=l+8|0;h=m+8|0;if((ca|0)==(fa|0)){ja=Z;ka=h;H=90}else{$=ca;d:while(1){ca=$+12|0;aa=k[ca>>2]|0;x=0;Y=Ba(k[k[aa>>2]>>2]|0,aa|0)|0;aa=x;x=0;if(aa&1)break;do if((Y|0)!=12){aa=k[ca>>2]|0;d=aa;if(((aa|0)!=0?(U=iDa(aa,168,6704,0)|0,(U|0)!=0):0)?(k[U+32>>2]|0)==0:0)break;U=k[da>>2]|0;if((U|0)==(k[Z>>2]|0)){x=0;xa(743,l|0,ca|0);aa=x;x=0;if(aa&1)break d}else{k[U>>2]=d;d=k[$+16>>2]|0;k[U+4>>2]=d;if(!d)la=U;else{h0a(d);la=k[da>>2]|0}k[da>>2]=la+8}d=k[ea>>2]|0;x=0;if((d|0)==(k[h>>2]|0)){Rx(m,$);U=x;x=0;if(U&1)break d;else break}n2a(d,$);d=x;x=0;if(d&1)break d;k[ea>>2]=(k[ea>>2]|0)+12}while(0);$=$+24|0;if(($|0)==(fa|0)){ja=Z;ka=h;H=90;break c}}h=Hc()|0;ma=h;na=M;H=57}}else H=56}else H=75;while(0);if((H|0)==75){k[n>>2]=G;G=F;k[n+4>>2]=G;if(!F)H=77;else{h0a(G);H=77}}e:do if((H|0)==77){G=k[da>>2]|0;la=l+8|0;do if(G>>>0>=(k[la>>2]|0)>>>0){x=0;xa(745,l|0,n|0);h=x;x=0;if(h&1){h=Hc()|0;Z=M;fa=k[n+4>>2]|0;if(!fa){oa=h;qa=Z;break e}j0a(fa);oa=h;qa=Z;break e}else{Z=k[n+4>>2]|0;if(!Z)break;j0a(Z);break}}else{k[G>>2]=k[n>>2];Z=n+4|0;k[G+4>>2]=k[Z>>2];k[n>>2]=0;k[Z>>2]=0;k[da>>2]=G+8}while(0);x=0;fb(140,o|0,329672,0);G=x;x=0;if(G&1)H=56;else{G=k[ea>>2]|0;Z=m+8|0;if(G>>>0>=(k[Z>>2]|0)>>>0){x=0;xa(650,m|0,o|0);h=x;x=0;if(h&1){h=Hc()|0;fa=M;K2a(o);oa=h;qa=fa;break}}else{k[G>>2]=k[o>>2];k[G+4>>2]=k[o+4>>2];k[G+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[ea>>2]=(k[ea>>2]|0)+12}K2a(o);ja=la;ka=Z;H=90}}while(0);if((H|0)==56){o=Hc()|0;ma=o;na=M;H=57}else if((H|0)==90){o=k[e>>2]|0;k[e>>2]=k[s>>2];k[s>>2]=o;o=k[B>>2]|0;k[B>>2]=k[t>>2];k[t>>2]=o;o=e+8|0;n=a+32|0;Z=k[o>>2]|0;k[o>>2]=k[n>>2];k[n>>2]=Z;Z=k[f>>2]|0;k[f>>2]=k[w>>2];k[w>>2]=Z;Z=k[C>>2]|0;k[C>>2]=k[y>>2];k[y>>2]=Z;Z=f+8|0;n=a+56|0;o=k[Z>>2]|0;k[Z>>2]=k[n>>2];k[n>>2]=o;o=k[l>>2]|0;n=k[u>>2]|0;k[l>>2]=n;k[u>>2]=o;o=k[da>>2]|0;k[da>>2]=k[v>>2];k[v>>2]=o;o=a+44|0;Z=k[ja>>2]|0;k[ja>>2]=k[o>>2];k[o>>2]=Z;Z=k[m>>2]|0;o=k[z>>2]|0;k[m>>2]=o;k[z>>2]=Z;Z=k[ea>>2]|0;ja=k[A>>2]|0;k[ea>>2]=ja;k[A>>2]=Z;Z=a+68|0;G=k[ka>>2]|0;k[ka>>2]=k[Z>>2];k[Z>>2]=G;G=o;Z=ja;if(!o)ra=n;else{if((Z|0)==(G|0))sa=o;else{o=Z;do{Z=o+-12|0;k[ea>>2]=Z;K2a(Z);o=k[ea>>2]|0}while((o|0)!=(G|0));sa=k[m>>2]|0}OBa(sa);ra=k[l>>2]|0}if(ra){sa=k[da>>2]|0;if((sa|0)==(ra|0))ta=ra;else{G=sa;while(1){sa=G+-8|0;k[da>>2]=sa;o=k[G+-4>>2]|0;if(!o)ua=sa;else{j0a(o);ua=k[da>>2]|0}if((ua|0)==(ra|0))break;else G=ua}ta=k[l>>2]|0}OBa(ta)}if(F)j0a(F);ta=k[f>>2]|0;if(ta){ua=k[C>>2]|0;if((ua|0)==(ta|0))va=ta;else{G=ua;do{ua=G+-12|0;k[C>>2]=ua;K2a(ua);G=k[C>>2]|0}while((G|0)!=(ta|0));va=k[f>>2]|0}OBa(va)}va=k[e>>2]|0;if(!va){r=c;return}ta=k[B>>2]|0;if((ta|0)==(va|0))wa=va;else{G=ta;while(1){ta=G+-8|0;k[B>>2]=ta;ua=k[G+-4>>2]|0;if(!ua)ya=ta;else{j0a(ua);ya=k[B>>2]|0}if((ya|0)==(va|0))break;else G=ya}wa=k[e>>2]|0}OBa(wa);r=c;return}if((H|0)==57){oa=ma;qa=na}na=k[m>>2]|0;if(na){ma=k[ea>>2]|0;if((ma|0)==(na|0))za=na;else{H=ma;do{ma=H+-12|0;k[ea>>2]=ma;K2a(ma);H=k[ea>>2]|0}while((H|0)!=(na|0));za=k[m>>2]|0}OBa(za)}za=k[l>>2]|0;if(!za){ga=oa;ha=qa;ia=F}else{m=k[da>>2]|0;if((m|0)==(za|0))Aa=za;else{na=m;while(1){m=na+-8|0;k[da>>2]=m;H=k[na+-4>>2]|0;if(!H)Ca=m;else{j0a(H);Ca=k[da>>2]|0}if((Ca|0)==(za|0))break;else na=Ca}Aa=k[l>>2]|0}OBa(Aa);ga=oa;ha=qa;ia=F}}if(!ia){Da=ga;Ea=ha}else{j0a(ia);Da=ga;Ea=ha}}else{ha=Hc()|0;Da=ha;Ea=M}Ea=k[f>>2]|0;if(Ea){ha=k[C>>2]|0;if((ha|0)==(Ea|0))Fa=Ea;else{ga=ha;do{ha=ga+-12|0;k[C>>2]=ha;K2a(ha);ga=k[C>>2]|0}while((ga|0)!=(Ea|0));Fa=k[f>>2]|0}OBa(Fa)}Fa=k[e>>2]|0;if(Fa){f=k[B>>2]|0;if((f|0)==(Fa|0))Ga=Fa;else{Ea=f;while(1){f=Ea+-8|0;k[B>>2]=f;ga=k[Ea+-4>>2]|0;if(!ga)Ha=f;else{j0a(ga);Ha=k[B>>2]|0}if((Ha|0)==(Fa|0))break;else Ea=Ha}Ga=k[e>>2]|0}OBa(Ga)}Ga=k[z>>2]|0;if(Ga){e=k[A>>2]|0;if((e|0)==(Ga|0))Ia=Ga;else{Ha=e;do{e=Ha+-12|0;k[A>>2]=e;K2a(e);Ha=k[A>>2]|0}while((Ha|0)!=(Ga|0));Ia=k[z>>2]|0}OBa(Ia)}Ia=k[w>>2]|0;if(Ia){z=k[y>>2]|0;if((z|0)==(Ia|0))Ja=Ia;else{Ga=z;do{z=Ga+-12|0;k[y>>2]=z;K2a(z);Ga=k[y>>2]|0}while((Ga|0)!=(Ia|0));Ja=k[w>>2]|0}OBa(Ja)}Ja=k[u>>2]|0;if(Ja){w=k[v>>2]|0;if((w|0)==(Ja|0))Ka=Ja;else{Ia=w;while(1){w=Ia+-8|0;k[v>>2]=w;Ga=k[Ia+-4>>2]|0;if(!Ga)La=w;else{j0a(Ga);La=k[v>>2]|0}if((La|0)==(Ja|0))break;else Ia=La}Ka=k[u>>2]|0}OBa(Ka)}Ka=k[s>>2]|0;if(Ka){u=k[t>>2]|0;if((u|0)==(Ka|0))Ma=Ka;else{La=u;while(1){u=La+-8|0;k[t>>2]=u;Ia=k[La+-4>>2]|0;if(!Ia)Na=u;else{j0a(Ia);Na=k[t>>2]|0}if((Na|0)==(Ka|0))break;else La=Na}Ma=k[s>>2]|0}OBa(Ma)}k[a>>2]=20456;xh(a+12|0,k[q>>2]|0);q=k[p>>2]|0;if(!q)Sc(Da|0);k0a(q);Sc(Da|0)}function eaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0;c=r;r=r+32|0;d=c+12|0;e=c;k[a+4>>2]=0;f=a+8|0;k[f>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;g=a+16|0;k[a+12>>2]=g;k[a>>2]=37588;h=a+24|0;j=a+28|0;l=a+36|0;m=a+40|0;n=a+48|0;o=a+52|0;p=a+60|0;q=a+64|0;s=a+72|0;t=h;u=t+48|0;do{k[t>>2]=0;t=t+4|0}while((t|0)<(u|0));k[s>>2]=19;s=a+76|0;i[s>>0]=0;i[s+1>>0]=0;i[s+2>>0]=0;i[s+3>>0]=0;i[a+80>>0]=1;i[a+81>>0]=0;k[a+84>>2]=b;k[d>>2]=0;s=d+4|0;k[s>>2]=0;k[d+8>>2]=0;k[e>>2]=0;t=e+4|0;k[t>>2]=0;k[e+8>>2]=0;u=k[b+52>>2]|0;b=k[u+28>>2]|0;v=k[u+24>>2]|0;w=b-v|0;y=w>>3;z=d+8|0;if(y){x=0;A=Ba(563,w|0)|0;w=x;x=0;if(w&1)B=23;else{w=A;C=A+(y<<3)|0;k[d>>2]=w;k[s>>2]=w;k[z>>2]=C;D=k[u+28>>2]|0;E=C;F=w;G=k[u+24>>2]|0;B=4}}else{D=b;E=0;F=0;G=v;B=4}a:do if((B|0)==4){v=u+28|0;b=D-G>>3;w=e+8|0;if(!b){H=0;I=0;J=0;K=0;L=D}else{x=0;C=Ba(563,b*12|0)|0;y=x;x=0;if(y&1){B=23;break}y=C;A=C+(b*12|0)|0;b=A;k[e>>2]=y;k[t>>2]=y;k[w>>2]=b;H=b;I=y;J=A;K=C;L=k[v>>2]|0}v=k[u+24>>2]|0;do if((v|0)==(L|0)){N=a+32|0;O=n;P=t;Q=o;R=a+56|0;S=s;T=j;U=h;V=0;W=F;X=0;Y=F;Z=0;_=E;$=0;aa=I;ba=0;ca=I;da=0;ea=H}else{C=v;A=K;y=J;while(1){b=k[(k[C>>2]|0)+24>>2]|0;x=0;if((A|0)==(y|0)){Rx(e,b);fa=x;x=0;if(fa&1)break}else{n2a(A,b);b=x;x=0;if(b&1)break;k[t>>2]=(k[t>>2]|0)+12}b=k[C>>2]|0;x=0;fa=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1)break;b=fa+4|0;ga=k[s>>2]|0;if((ga|0)==(k[z>>2]|0)){x=0;xa(743,d|0,b|0);ha=x;x=0;if(ha&1)break}else{k[ga>>2]=k[b>>2];b=k[fa+8>>2]|0;k[ga+4>>2]=b;if(!b)ia=ga;else{h0a(b);ia=k[s>>2]|0}k[s>>2]=ia+8}b=C+8|0;if((b|0)==(L|0)){B=9;break}C=b;A=k[t>>2]|0;y=k[w>>2]|0}if((B|0)==9){y=a+32|0;A=a+56|0;N=y;O=n;P=t;Q=o;R=A;S=s;T=j;U=h;V=k[h>>2]|0;W=k[d>>2]|0;X=k[j>>2]|0;Y=k[s>>2]|0;Z=k[y>>2]|0;_=k[z>>2]|0;$=k[n>>2]|0;aa=k[e>>2]|0;ba=k[o>>2]|0;ca=k[t>>2]|0;da=k[A>>2]|0;ea=k[w>>2]|0;break}A=Hc()|0;y=M;C=k[e>>2]|0;if(!C){ja=A;ka=y;break a}b=k[t>>2]|0;if((b|0)==(C|0))la=C;else{ga=b;do{b=ga+-12|0;k[t>>2]=b;K2a(b);ga=k[t>>2]|0}while((ga|0)!=(C|0));la=k[e>>2]|0}OBa(la);ja=A;ka=y;break a}while(0);k[d>>2]=V;k[U>>2]=W;k[S>>2]=X;k[T>>2]=Y;k[z>>2]=Z;k[N>>2]=_;k[e>>2]=$;k[O>>2]=aa;k[P>>2]=ba;k[Q>>2]=ca;k[w>>2]=da;k[R>>2]=ea;v=$;C=ba;if(!$)ma=V;else{if((C|0)==(v|0))na=$;else{ga=C;do{C=ga+-12|0;k[t>>2]=C;K2a(C);ga=k[t>>2]|0}while((ga|0)!=(v|0));na=k[e>>2]|0}OBa(na);ma=k[d>>2]|0}if(!ma){r=c;return}v=k[s>>2]|0;if((v|0)==(ma|0))oa=ma;else{ga=v;while(1){v=ga+-8|0;k[s>>2]=v;w=k[ga+-4>>2]|0;if(!w)pa=v;else{j0a(w);pa=k[s>>2]|0}if((pa|0)==(ma|0))break;else ga=pa}oa=k[d>>2]|0}OBa(oa);r=c;return}while(0);if((B|0)==23){B=Hc()|0;ja=B;ka=M}ka=k[d>>2]|0;if(ka){B=k[s>>2]|0;if((B|0)==(ka|0))qa=ka;else{c=B;while(1){B=c+-8|0;k[s>>2]=B;oa=k[c+-4>>2]|0;if(!oa)ra=B;else{j0a(oa);ra=k[s>>2]|0}if((ra|0)==(ka|0))break;else c=ra}qa=k[d>>2]|0}OBa(qa)}qa=k[p>>2]|0;if(qa){d=k[q>>2]|0;if((d|0)==(qa|0))sa=qa;else{ra=d;do{d=ra+-12|0;k[q>>2]=d;K2a(d);ra=k[q>>2]|0}while((ra|0)!=(qa|0));sa=k[p>>2]|0}OBa(sa)}sa=k[n>>2]|0;if(sa){p=k[o>>2]|0;if((p|0)==(sa|0))ta=sa;else{qa=p;do{p=qa+-12|0;k[o>>2]=p;K2a(p);qa=k[o>>2]|0}while((qa|0)!=(sa|0));ta=k[n>>2]|0}OBa(ta)}ta=k[l>>2]|0;if(ta){n=k[m>>2]|0;if((n|0)==(ta|0))ua=ta;else{sa=n;while(1){n=sa+-8|0;k[m>>2]=n;qa=k[sa+-4>>2]|0;if(!qa)va=n;else{j0a(qa);va=k[m>>2]|0}if((va|0)==(ta|0))break;else sa=va}ua=k[l>>2]|0}OBa(ua)}ua=k[h>>2]|0;if(ua){l=k[j>>2]|0;if((l|0)==(ua|0))wa=ua;else{va=l;while(1){l=va+-8|0;k[j>>2]=l;sa=k[va+-4>>2]|0;if(!sa)ya=l;else{j0a(sa);ya=k[j>>2]|0}if((ya|0)==(ua|0))break;else va=ya}wa=k[h>>2]|0}OBa(wa)}k[a>>2]=20456;xh(a+12|0,k[g>>2]|0);g=k[f>>2]|0;if(!g)Sc(ja|0);k0a(g);Sc(ja|0)}function faa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c+12|0;e=c+8|0;f=c+4|0;g=c;h=b+48|0;if(!(i[b+79>>0]|0)){yW(a,h);r=c;return}else{k[f>>2]=(k[h>>2]|0)+12;k[g>>2]=k[b+52>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];w2(a,e,d);r=c;return}}function gaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c+12|0;e=c+8|0;f=c+4|0;g=c;h=b+24|0;if(!(i[b+79>>0]|0)){NU(a,h);r=c;return}else{k[f>>2]=(k[h>>2]|0)+8;k[g>>2]=k[b+28>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];Iba(a,e,d);r=c;return}}function haa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+16|0;d=c+8|0;e=c;f=Vf[k[k[b>>2]>>2]&1023](b)|0;if((f|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){g=0;r=c;return g|0}f=iDa(b,168,6768,0)|0;if(!f)BBa();if((k[a+72>>2]|0)!=(k[f+72>>2]|0)){g=0;r=c;return g|0}if((i[a+80>>0]|0)!=(i[f+80>>0]|0)){g=0;r=c;return g|0}b=k[a+28>>2]|0;h=k[a+24>>2]|0;j=k[f+24>>2]|0;l=h;m=b;if((b-h|0)!=((k[f+28>>2]|0)-j|0)){g=0;r=c;return g|0}h=a+36|0;b=a+40|0;n=k[b>>2]|0;o=k[h>>2]|0;p=f+36|0;if((n-o|0)!=((k[f+40>>2]|0)-(k[p>>2]|0)|0)){g=0;r=c;return g|0}do if((l|0)!=(m|0)){q=l;s=j;while(1){t=k[q>>2]|0;if(!(cg[k[(k[t>>2]|0)+20>>2]&1023](t,k[s>>2]|0)|0)){g=0;u=33;break}q=q+8|0;if((q|0)==(m|0)){u=11;break}else s=s+8|0}if((u|0)==11){v=k[h>>2]|0;w=k[b>>2]|0;break}else if((u|0)==33){r=c;return g|0}}else{v=o;w=n}while(0);a:do if((v|0)!=(w|0)){n=v;o=k[p>>2]|0;while(1){u=k[n>>2]|0;if(!(cg[k[(k[u>>2]|0)+20>>2]&1023](u,k[o>>2]|0)|0)){g=0;break}n=n+8|0;if((n|0)==(w|0))break a;else o=o+8|0}r=c;return g|0}while(0);if((i[a+77>>0]|0)!=(i[f+77>>0]|0)){g=0;r=c;return g|0}if((i[a+78>>0]|0)!=(i[f+78>>0]|0)){g=0;r=c;return g|0}w=(i[a+79>>0]|0)!=0;if(w^(i[f+79>>0]|0)!=0){g=0;r=c;return g|0}b:do if(w){iaa(d,a);p=k[d>>2]|0;v=k[(k[p>>2]|0)+24>>2]|0;x=0;xa(751,e|0,f|0);o=x;x=0;do if(o&1){n=Hc()|0;y=M;z=n}else{x=0;n=Ta(v|0,p|0,k[e>>2]|0)|0;u=x;x=0;if(u&1){u=Hc()|0;b=M;h=k[e+4>>2]|0;if(!h){y=b;z=u;break}j0a(h);y=b;z=u;break}u=k[e+4>>2]|0;if(u)j0a(u);u=k[d+4>>2]|0;if(!u){A=n;break b}j0a(u);A=n;break b}while(0);p=k[d+4>>2]|0;if(!p)Sc(z|0);j0a(p);Sc(z|0)}else A=0;while(0);g=A^1;r=c;return g|0}function iaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+32|0;d=c+12|0;e=c;f=(i[b+79>>0]|0)!=0;q2a(d,253570,22);x=0;pa(57,f|0,d|0,2133,250928,253593);f=x;x=0;if(f&1){f=Hc()|0;g=M;K2a(d);h=g;j=f;Sc(j|0)}K2a(d);d=b+24|0;f=b+28|0;b=(k[f>>2]|0)!=(k[d>>2]|0);q2a(e,253651,26);x=0;pa(57,b|0,e|0,2134,250928,253593);b=x;x=0;if(b&1){b=Hc()|0;g=M;K2a(e);h=g;j=b;Sc(j|0)}K2a(e);e=k[d>>2]|0;if((k[f>>2]|0)==(e|0)){Kpb(d);l=k[d>>2]|0}else l=e;k[a>>2]=k[l>>2];e=k[l+4>>2]|0;k[a+4>>2]=e;if(!e){r=c;return}h0a(e);r=c;return}function jaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;d=r;r=r+64|0;e=d+48|0;f=d+36|0;g=d+24|0;h=d+12|0;j=d;q2a(e,253678,10);l=k[b+24>>2]|0;m=b+28|0;a:do if((l|0)==(k[m>>2]|0))n=3;else{o=f+8|0;p=f+1|0;q=f+4|0;s=l;while(1){t=k[s>>2]|0;x=0;fb(k[(k[t>>2]|0)+76>>2]|0,g|0,t|0,c|0);t=x;x=0;if(t&1){n=9;break}s=s+8|0;x=0;t=Ta(484,g|0,((s|0)==(k[m>>2]|0)?329672:301287)|0)|0;u=x;x=0;if(u&1){n=12;break};k[f>>2]=k[t>>2];k[f+4>>2]=k[t+4>>2];k[f+8>>2]=k[t+8>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;t=i[f>>0]|0;u=(t&1)==0;x=0;Fa(88,e|0,(u?p:k[o>>2]|0)|0,(u?(t&255)>>>1:k[q>>2]|0)|0)|0;t=x;x=0;if(t&1){n=13;break}K2a(f);K2a(g);if((s|0)==(k[m>>2]|0)){n=3;break a}}if((n|0)==9){s=Hc()|0;v=M;w=s;break}else if((n|0)==12){s=Hc()|0;y=M;z=s}else if((n|0)==13){s=Hc()|0;q=M;K2a(f);y=q;z=s}K2a(g);A=y;B=z;K2a(e);Sc(B|0)}while(0);b:do if((n|0)==3){x=0;Ta(484,e|0,253689)|0;z=x;x=0;if(z&1){z=Hc()|0;v=M;w=z;break}z=k[b+36>>2]|0;y=b+40|0;c:do if((z|0)!=(k[y>>2]|0)){g=h+8|0;f=h+1|0;m=h+4|0;l=z;while(1){s=k[l>>2]|0;x=0;fb(k[(k[s>>2]|0)+76>>2]|0,j|0,s|0,c|0);s=x;x=0;if(s&1){n=8;break}l=l+8|0;x=0;s=Ta(484,j|0,((l|0)==(k[y>>2]|0)?329672:301287)|0)|0;q=x;x=0;if(q&1){n=24;break};k[h>>2]=k[s>>2];k[h+4>>2]=k[s+4>>2];k[h+8>>2]=k[s+8>>2];k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;s=i[h>>0]|0;q=(s&1)==0;x=0;Fa(88,e|0,(q?f:k[g>>2]|0)|0,(q?(s&255)>>>1:k[m>>2]|0)|0)|0;s=x;x=0;if(s&1){n=25;break}K2a(h);K2a(j);if((l|0)==(k[y>>2]|0))break c}if((n|0)==8){l=Hc()|0;v=M;w=l;break b}else if((n|0)==24){l=Hc()|0;C=M;D=l}else if((n|0)==25){l=Hc()|0;m=M;K2a(h);C=m;D=l}K2a(j);A=C;B=D;K2a(e);Sc(B|0)}while(0);k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;y=i[e>>0]|0;z=(y&1)==0;l=z?(y&255)>>>1:k[e+4>>2]|0;x=0;nb(83,a|0,(z?e+1|0:k[e+8>>2]|0)|0,l|0,l+1|0);l=x;x=0;if(!(l&1)?(x=0,Fa(88,a|0,300015,1)|0,l=x,x=0,!(l&1)):0){K2a(e);r=d;return}l=Hc()|0;z=M;K2a(a);v=z;w=l}while(0);A=v;B=w;K2a(e);Sc(B|0)}function kaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+96|0;a=b+72|0;c=b+32|0;d=b+16|0;e=b;b=c;f=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(f|0));b=c+20|0;f=c+24|0;k[f>>2]=0;k[c+28>>2]=0;k[c+32>>2]=0;k[c+36>>2]=-1;g=c+4|0;h=g+-4|0;i=g+16|0;j=c+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;K2a(a);k[c+4>>2]=20924;k[c>>2]=20888;k[b>>2]=20948;x=0;fb(140,e|0,253701,53);a=x;x=0;if(a&1){a=Hc()|0;l=M;m=a}else{k[d>>2]=21048;a=d+4|0;x=0;xa(604,a|0,e|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,c|0,d|0)|0;c=x;x=0;if(!(c&1)){x=0;nb(87,n|0,253755,250928,1841);x=0}n=Hc()|0;c=M;k[d>>2]=21048;K2a(a);o=c;p=n}K2a(e);l=o;m=p}k[g>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[f>>2]|0;if(!b)Sc(m|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(m|0);k[f>>2]=0;Sc(m|0)}function laa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0;b=r;r=r+16|0;c=b;d=k[a+72>>2]|0;do if((d&-2|0)==20){e=a+36|0;f=((k[a+40>>2]|0)-(k[e>>2]|0)|0)==8;q2a(c,329672,0);x=0;pa(57,f|0,c|0,1849,250928,253817);f=x;x=0;if(f&1){f=Hc()|0;K2a(c);Sc(f|0)}K2a(c);f=iDa(k[k[e>>2]>>2]|0,168,6768,0)|0;if(!f)BBa();else{g=k[f+72>>2]|0;break}}else g=d;while(0);a:do if((g+-1|0)>>>0<3)h=2;else{switch(g|0){case 0:case 4:case 5:case 6:{h=1;break a;break}default:{}}h=(g+-25|0)>>>0<2&1}while(0);g=(l[a+77>>0]|0)+h+(l[a+78>>0]|0)|0;if(!(i[a+79>>0]|0)){j=g;r=b;return j|0}h=k[k[a+24>>2]>>2]|0;j=(Vf[k[(k[h>>2]|0)+60>>2]&1023](h)|0)+g|0;r=b;return j|0}function maa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;c=r;r=r+64|0;d=c+36|0;e=c+48|0;f=c+24|0;g=c+16|0;h=c+8|0;j=c;l=b+84|0;m=(k[l>>2]|0)!=0;q2a(d,253887,56);x=0;pa(57,m|0,d|0,1874,250928,253944);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);o=m;p=n;Sc(o|0)}K2a(d);d=iDa(k[(k[l>>2]|0)+36>>2]|0,5224,5312,0)|0;if(!d)BBa();n=(i[d+72>>0]|0)!=0;k[e>>2]=0;d=e+4|0;k[d>>2]=0;k[e+8>>2]=0;k[f>>2]=0;m=f+4|0;k[m>>2]=0;k[f+8>>2]=0;q=k[b+24>>2]|0;s=k[b+28>>2]|0;a:do if((q|0)!=(s|0)){t=a+4|0;u=g+4|0;v=e+8|0;w=q;b:while(1){y=k[w>>2]|0;z=k[w+4>>2]|0;A=(z|0)==0;if(!A)h0a(z);x=0;fb(k[(k[y>>2]|0)+96>>2]|0,g|0,y|0,n|0);y=x;x=0;if(y&1){B=z;C=A;D=17;break}y=k[g>>2]|0;E=y;do if(!y){k[a>>2]=0;k[t>>2]=0;F=1}else{G=k[d>>2]|0;if((G|0)==(k[v>>2]|0)){x=0;xa(743,e|0,g|0);H=x;x=0;if(H&1){I=z;J=A;D=18;break b}else{F=0;break}}k[G>>2]=E;H=k[u>>2]|0;k[G+4>>2]=H;if(!H)K=G;else{h0a(H);K=k[d>>2]|0}k[d>>2]=K+8;F=0}while(0);E=k[u>>2]|0;if(E)j0a(E);if(!A)j0a(z);w=w+8|0;if(F){D=58;break a}if((w|0)==(s|0)){D=28;break a}}if((D|0)==17){w=Hc()|0;L=w;N=M;O=C;P=B}else if((D|0)==18){w=Hc()|0;v=M;t=k[u>>2]|0;if(!t){L=w;N=v;O=J;P=I}else{j0a(t);L=w;N=v;O=J;P=I}}if(O){Q=L;R=N;D=73}else{j0a(P);Q=L;R=N;D=73}}else D=28;while(0);c:do if((D|0)==28){N=k[b+36>>2]|0;L=k[b+40>>2]|0;d:do if((N|0)!=(L|0)){P=a+4|0;O=h+4|0;I=f+8|0;J=N;e:while(1){B=k[J>>2]|0;C=k[J+4>>2]|0;s=(C|0)==0;if(!s)h0a(C);x=0;fb(k[(k[B>>2]|0)+96>>2]|0,h|0,B|0,n|0);B=x;x=0;if(B&1){S=C;T=s;D=40;break}B=k[h>>2]|0;F=B;do if(!B){k[a>>2]=0;k[P>>2]=0;U=1}else{K=k[m>>2]|0;if((K|0)==(k[I>>2]|0)){x=0;xa(743,f|0,h|0);g=x;x=0;if(g&1){V=C;W=s;D=41;break e}else{U=0;break}}k[K>>2]=F;g=k[O>>2]|0;k[K+4>>2]=g;if(!g)X=K;else{h0a(g);X=k[m>>2]|0}k[m>>2]=X+8;U=0}while(0);F=k[O>>2]|0;if(F)j0a(F);if(!s)j0a(C);J=J+8|0;if(U){D=58;break c}if((J|0)==(L|0))break d}if((D|0)==40){J=Hc()|0;Y=J;Z=M;_=S;$=T}else if((D|0)==41){J=Hc()|0;I=M;P=k[O>>2]|0;if(!P){Y=J;Z=I;_=V;$=W}else{j0a(P);Y=J;Z=I;_=V;$=W}}if($){Q=Y;R=Z;D=73;break c}j0a(_);Q=Y;R=Z;D=73;break c}while(0);L=k[l>>2]|0;if(((L|0)!=0?(iDa(L,4520,5464,0)|0)!=0:0)?(k[f>>2]|0)==(k[m>>2]|0):0){k[a>>2]=0;k[a+4>>2]=0;D=58;break}x=0;Ra(43,j|0,e|0,f|0,b+48|0,b+60|0,b+72|0,b+76|0,l|0,b+80|0,b+81|0);L=x;x=0;if(L&1){L=Hc()|0;Q=L;R=M;D=73;break}else{k[a>>2]=k[j>>2];L=j+4|0;k[a+4>>2]=k[L>>2];k[j>>2]=0;k[L>>2]=0;D=58;break}}while(0);if((D|0)==58){j=k[f>>2]|0;if(j){a=k[m>>2]|0;if((a|0)==(j|0))aa=j;else{b=a;while(1){a=b+-8|0;k[m>>2]=a;l=k[b+-4>>2]|0;if(!l)ba=a;else{j0a(l);ba=k[m>>2]|0}if((ba|0)==(j|0))break;else b=ba}aa=k[f>>2]|0}OBa(aa)}aa=k[e>>2]|0;if(!aa){r=c;return}ba=k[d>>2]|0;if((ba|0)==(aa|0))ca=aa;else{b=ba;while(1){ba=b+-8|0;k[d>>2]=ba;j=k[b+-4>>2]|0;if(!j)da=ba;else{j0a(j);da=k[d>>2]|0}if((da|0)==(aa|0))break;else b=da}ca=k[e>>2]|0}OBa(ca);r=c;return}else if((D|0)==73){D=k[f>>2]|0;if(D){c=k[m>>2]|0;if((c|0)==(D|0))ea=D;else{ca=c;while(1){c=ca+-8|0;k[m>>2]=c;da=k[ca+-4>>2]|0;if(!da)fa=c;else{j0a(da);fa=k[m>>2]|0}if((fa|0)==(D|0))break;else ca=fa}ea=k[f>>2]|0}OBa(ea)}ea=k[e>>2]|0;if(!ea){o=Q;p=R;Sc(o|0)}f=k[d>>2]|0;if((f|0)==(ea|0))ga=ea;else{fa=f;while(1){f=fa+-8|0;k[d>>2]=f;ca=k[fa+-4>>2]|0;if(!ca)ha=f;else{j0a(ca);ha=k[d>>2]|0}if((ha|0)==(ea|0))break;else fa=ha}ga=k[e>>2]|0}OBa(ga);o=Q;p=R;Sc(o|0)}}function naa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0;c=r;r=r+288|0;d=c+264|0;e=c+281|0;f=c+280|0;g=c+256|0;h=c+279|0;j=c+278|0;l=c+232|0;m=c+216|0;n=c+208|0;o=c+196|0;p=c+184|0;q=c+172|0;s=c+160|0;t=c+148|0;u=c+136|0;v=c+132|0;w=c+277|0;y=c+128|0;z=c+276|0;A=c+275|0;B=c+104|0;C=c+88|0;D=c+80|0;E=c+68|0;F=c+56|0;G=c+44|0;H=c+32|0;I=c+20|0;J=c+8|0;K=c+4|0;L=c+274|0;N=c;O=c+273|0;P=c+272|0;Q=b+72|0;R=k[Q>>2]|0;switch(R|0){case 6:case 5:case 4:case 13:case 12:case 11:case 7:case 1:break;default:{k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;r=c;return}}k[a>>2]=0;S=a+4|0;k[S>>2]=0;k[a+8>>2]=0;a:do switch(R|0){case 3:case 6:{T=87;break}default:{U=b+81|0;b:do if(!(i[U>>0]|0))V=R;else{x=0;fb(140,m|0,272351,5);W=x;x=0;if(W&1){T=48;break a}x=0;fb(140,q|0,293718,4);W=x;x=0;if(W&1){W=Hc()|0;X=W;Y=M}else{k[p>>2]=0;W=p+4|0;k[W>>2]=0;k[p+8>>2]=0;x=0;Z=Ba(563,12)|0;_=x;x=0;do if(_&1){$=Hc()|0;aa=$;ba=M;T=50}else{k[W>>2]=Z;k[p>>2]=Z;k[p+8>>2]=Z+12;x=0;xa(604,Z|0,q|0);$=x;x=0;if($&1){$=Hc()|0;ca=M;OBa(Z);aa=$;ba=ca;T=50;break}k[W>>2]=Z+12;x=0;xa(768,o|0,p|0);ca=x;x=0;if(!(ca&1)){ca=b+77|0;i[h>>0]=i[ca>>0]|0;$=b+78|0;i[j>>0]=1;x=0;Na(44,g|0,b+24|0,b+36|0,b+48|0,b+60|0,Q|0,b+76|0,b+84|0,b+80|0,U|0,h|0,j|0,b+79|0);da=x;x=0;if(!(da&1)){da=k[g>>2]|0;ea=k[g+4>>2]|0;k[s>>2]=0;fa=s+4|0;k[fa>>2]=0;k[s+8>>2]=0;x=0;ga=Ba(563,8)|0;ha=x;x=0;if(ha&1){ha=Hc()|0;ia=ha;ja=M}else{k[fa>>2]=ga;k[s>>2]=ga;k[s+8>>2]=ga+8;k[ga>>2]=da;k[ga+4>>2]=ea;da=(ea|0)==0;if(!da)h0a(ea);k[fa>>2]=ga+8;k[t>>2]=0;ha=t+4|0;k[ha>>2]=0;k[t+8>>2]=0;k[u>>2]=0;ka=u+4|0;k[ka>>2]=0;k[u+8>>2]=0;k[v>>2]=21;i[w>>0]=0;k[y>>2]=0;i[z>>0]=0;i[A>>0]=0;x=0;bb(42,n|0,o|0,s|0,t|0,u|0,v|0,w|0,y|0,z|0,A|0,ca|0,$|0);$=x;x=0;if(!($&1)){$=k[n>>2]|0;ca=n+4|0;la=k[ca>>2]|0;k[n>>2]=0;k[ca>>2]=0;x=0;xa(604,l|0,m|0);ca=x;x=0;c:do if(ca&1){ma=Hc()|0;na=ma;oa=M}else{ma=l+12|0;k[ma>>2]=$;pa=l+16|0;qa=la;k[pa>>2]=qa;ra=(la|0)==0;if(!ra)h0a(qa);sa=l+20|0;k[sa>>2]=0;ta=k[S>>2]|0;do if(ta>>>0<(k[a+8>>2]|0)>>>0){k[ta>>2]=k[l>>2];k[ta+4>>2]=k[l+4>>2];k[ta+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[ta+12>>2]=k[ma>>2];k[ta+16>>2]=k[pa>>2];k[ma>>2]=0;k[pa>>2]=0;k[ta+20>>2]=k[sa>>2];k[S>>2]=(k[S>>2]|0)+24}else{x=0;xa(799,a|0,l|0);ua=x;x=0;if(!(ua&1)){ua=k[pa>>2]|0;if(!ua)break;j0a(ua);break}ua=Hc()|0;va=M;wa=k[pa>>2]|0;if(wa)j0a(wa);K2a(l);na=ua;oa=va;break c}while(0);K2a(l);if(!ra)j0a(qa);pa=k[u>>2]|0;if(pa){sa=k[ka>>2]|0;if((sa|0)!=(pa|0)){ta=sa;do{ta=ta+-12|0;K2a(ta)}while((ta|0)!=(pa|0));k[ka>>2]=pa}OBa(pa)}ta=k[t>>2]|0;if(ta){qa=k[ha>>2]|0;if((qa|0)!=(ta|0)){ra=qa;do{ra=ra+-12|0;K2a(ra)}while((ra|0)!=(ta|0));k[ha>>2]=ta}OBa(ta)}ra=k[ga+4>>2]|0;if(ra)j0a(ra);k[fa>>2]=ga;OBa(ga);if(!da)j0a(ea);ra=k[o>>2]|0;if(ra){pa=o+4|0;qa=k[pa>>2]|0;if((qa|0)==(ra|0))ya=ra;else{sa=qa;while(1){qa=sa+-8|0;k[pa>>2]=qa;ma=k[sa+-4>>2]|0;if(!ma)za=qa;else{j0a(ma);za=k[pa>>2]|0}if((za|0)==(ra|0))break;else sa=za}ya=k[o>>2]|0}OBa(ya)}K2a(Z);k[W>>2]=Z;OBa(Z);K2a(q);K2a(m);V=k[Q>>2]|0;break b}while(0);if(!la){Aa=na;Ca=oa}else{j0a(la);Aa=na;Ca=oa}}else{da=Hc()|0;Aa=da;Ca=M}da=k[u>>2]|0;if(da){$=k[ka>>2]|0;if(($|0)!=(da|0)){ca=$;do{ca=ca+-12|0;K2a(ca)}while((ca|0)!=(da|0));k[ka>>2]=da}OBa(da)}ca=k[t>>2]|0;if(ca){la=k[ha>>2]|0;if((la|0)!=(ca|0)){$=la;do{$=$+-12|0;K2a($)}while(($|0)!=(ca|0));k[ha>>2]=ca}OBa(ca)}$=k[ga+4>>2]|0;if($)j0a($);k[fa>>2]=ga;OBa(ga);ia=Aa;ja=Ca}if(!ea){Da=ia;Ea=ja}else{j0a(ea);Da=ia;Ea=ja}}else{$=Hc()|0;Da=$;Ea=M}$=k[o>>2]|0;if(!$){Fa=Da;Ga=Ea}else{da=o+4|0;ka=k[da>>2]|0;if((ka|0)==($|0))Ha=$;else{la=ka;while(1){ka=la+-8|0;k[da>>2]=ka;sa=k[la+-4>>2]|0;if(!sa)Ia=ka;else{j0a(sa);Ia=k[da>>2]|0}if((Ia|0)==($|0))break;else la=Ia}Ha=k[o>>2]|0}OBa(Ha);Fa=Da;Ga=Ea}}else{la=Hc()|0;Fa=la;Ga=M}K2a(Z);k[W>>2]=Z;OBa(Z);Ja=Fa;Ka=Ga}while(0);if((T|0)==50){Ja=aa;Ka=ba}K2a(q);X=Ja;Y=Ka}K2a(m);La=X;Ma=Y;break a}while(0);if((V|0)==7){r=c;return}else T=87}}while(0);if((T|0)==87){x=0;fb(140,C|0,272364,3);V=x;x=0;if(V&1)T=48;else{x=0;fb(140,G|0,293718,4);V=x;x=0;if(V&1){V=Hc()|0;Oa=V;Pa=M}else{k[F>>2]=0;V=F+4|0;k[V>>2]=0;k[F+8>>2]=0;x=0;Y=Ba(563,12)|0;X=x;x=0;do if(X&1){m=Hc()|0;Qa=m;Ra=M;T=132}else{k[V>>2]=Y;k[F>>2]=Y;k[F+8>>2]=Y+12;x=0;xa(604,Y|0,G|0);m=x;x=0;if(m&1){m=Hc()|0;Ka=M;OBa(Y);Qa=m;Ra=Ka;T=132;break}k[V>>2]=Y+12;x=0;xa(768,E|0,F|0);Ka=x;x=0;if(!(Ka&1)){Ka=b+77|0;i[e>>0]=1;m=b+78|0;i[f>>0]=i[m>>0]|0;x=0;Na(44,d|0,b+24|0,b+36|0,b+48|0,b+60|0,Q|0,b+76|0,b+84|0,b+80|0,b+81|0,e|0,f|0,b+79|0);Ja=x;x=0;if(!(Ja&1)){Ja=k[d>>2]|0;q=k[d+4>>2]|0;k[H>>2]=0;ba=H+4|0;k[ba>>2]=0;k[H+8>>2]=0;x=0;aa=Ba(563,8)|0;Ga=x;x=0;if(Ga&1){Ga=Hc()|0;Sa=Ga;Ta=M}else{k[ba>>2]=aa;k[H>>2]=aa;k[H+8>>2]=aa+8;k[aa>>2]=Ja;k[aa+4>>2]=q;Ja=(q|0)==0;if(!Ja)h0a(q);k[ba>>2]=aa+8;k[I>>2]=0;Ga=I+4|0;k[Ga>>2]=0;k[I+8>>2]=0;k[J>>2]=0;Fa=J+4|0;k[Fa>>2]=0;k[J+8>>2]=0;k[K>>2]=20;i[L>>0]=0;k[N>>2]=0;i[O>>0]=0;i[P>>0]=0;x=0;bb(42,D|0,E|0,H|0,I|0,J|0,K|0,L|0,N|0,O|0,P|0,Ka|0,m|0);m=x;x=0;if(!(m&1)){m=k[D>>2]|0;Ka=D+4|0;Ea=k[Ka>>2]|0;k[D>>2]=0;k[Ka>>2]=0;x=0;xa(604,B|0,C|0);Ka=x;x=0;d:do if(Ka&1){Da=Hc()|0;Ua=Da;Va=M}else{Da=B+12|0;k[Da>>2]=m;Ha=B+16|0;o=Ea;k[Ha>>2]=o;Ia=(Ea|0)==0;if(!Ia)h0a(o);ja=B+20|0;k[ja>>2]=0;ia=k[S>>2]|0;do if(ia>>>0<(k[a+8>>2]|0)>>>0){k[ia>>2]=k[B>>2];k[ia+4>>2]=k[B+4>>2];k[ia+8>>2]=k[B+8>>2];k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[ia+12>>2]=k[Da>>2];k[ia+16>>2]=k[Ha>>2];k[Da>>2]=0;k[Ha>>2]=0;k[ia+20>>2]=k[ja>>2];k[S>>2]=(k[S>>2]|0)+24}else{x=0;xa(799,a|0,B|0);Ca=x;x=0;if(!(Ca&1)){Ca=k[Ha>>2]|0;if(!Ca)break;j0a(Ca);break}Ca=Hc()|0;Aa=M;t=k[Ha>>2]|0;if(t)j0a(t);K2a(B);Ua=Ca;Va=Aa;break d}while(0);K2a(B);if(!Ia)j0a(o);Ha=k[J>>2]|0;if(Ha){ja=k[Fa>>2]|0;if((ja|0)!=(Ha|0)){ia=ja;do{ia=ia+-12|0;K2a(ia)}while((ia|0)!=(Ha|0));k[Fa>>2]=Ha}OBa(Ha)}ia=k[I>>2]|0;if(ia){o=k[Ga>>2]|0;if((o|0)!=(ia|0)){Ia=o;do{Ia=Ia+-12|0;K2a(Ia)}while((Ia|0)!=(ia|0));k[Ga>>2]=ia}OBa(ia)}Ia=k[aa+4>>2]|0;if(Ia)j0a(Ia);k[ba>>2]=aa;OBa(aa);if(!Ja)j0a(q);Ia=k[E>>2]|0;if(Ia){Ha=E+4|0;o=k[Ha>>2]|0;if((o|0)==(Ia|0))Wa=Ia;else{ja=o;while(1){o=ja+-8|0;k[Ha>>2]=o;Da=k[ja+-4>>2]|0;if(!Da)Xa=o;else{j0a(Da);Xa=k[Ha>>2]|0}if((Xa|0)==(Ia|0))break;else ja=Xa}Wa=k[E>>2]|0}OBa(Wa)}K2a(Y);k[V>>2]=Y;OBa(Y);K2a(G);K2a(C);r=c;return}while(0);if(!Ea){Ya=Ua;Za=Va}else{j0a(Ea);Ya=Ua;Za=Va}}else{Ja=Hc()|0;Ya=Ja;Za=M}Ja=k[J>>2]|0;if(Ja){m=k[Fa>>2]|0;if((m|0)!=(Ja|0)){Ka=m;do{Ka=Ka+-12|0;K2a(Ka)}while((Ka|0)!=(Ja|0));k[Fa>>2]=Ja}OBa(Ja)}Ka=k[I>>2]|0;if(Ka){Ea=k[Ga>>2]|0;if((Ea|0)!=(Ka|0)){m=Ea;do{m=m+-12|0;K2a(m)}while((m|0)!=(Ka|0));k[Ga>>2]=Ka}OBa(Ka)}m=k[aa+4>>2]|0;if(m)j0a(m);k[ba>>2]=aa;OBa(aa);Sa=Ya;Ta=Za}if(!q){_a=Sa;$a=Ta}else{j0a(q);_a=Sa;$a=Ta}}else{m=Hc()|0;_a=m;$a=M}m=k[E>>2]|0;if(!m){ab=_a;cb=$a}else{Ja=E+4|0;Fa=k[Ja>>2]|0;if((Fa|0)==(m|0))db=m;else{Ea=Fa;while(1){Fa=Ea+-8|0;k[Ja>>2]=Fa;ja=k[Ea+-4>>2]|0;if(!ja)eb=Fa;else{j0a(ja);eb=k[Ja>>2]|0}if((eb|0)==(m|0))break;else Ea=eb}db=k[E>>2]|0}OBa(db);ab=_a;cb=$a}}else{Ea=Hc()|0;ab=Ea;cb=M}K2a(Y);k[V>>2]=Y;OBa(Y);gb=ab;hb=cb}while(0);if((T|0)==132){gb=Qa;hb=Ra}K2a(G);Oa=gb;Pa=hb}K2a(C);La=Oa;Ma=Pa}}if((T|0)==48){T=Hc()|0;La=T;Ma=M}Ma=k[a>>2]|0;if(!Ma)Sc(La|0);T=k[S>>2]|0;if((T|0)==(Ma|0))ib=Ma;else{Pa=T;do{T=Pa+-24|0;k[S>>2]=T;Oa=k[Pa+-8>>2]|0;if(Oa)j0a(Oa);K2a(T);Pa=k[S>>2]|0}while((Pa|0)!=(Ma|0));ib=k[a>>2]|0}OBa(ib);Sc(La|0)}function oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+48|0;d=c+28|0;e=c+16|0;f=c+12|0;g=c+8|0;h=c;k[a>>2]=0;i=a+4|0;k[i>>2]=0;k[a+8>>2]=0;j=b+4|0;x=0;xa(807,a|0,((k[j>>2]|0)-(k[b>>2]|0)|0)/12|0|0);l=x;x=0;do if(!(l&1)){m=k[b>>2]|0;n=k[j>>2]|0;if((m|0)==(n|0)){r=c;return}o=d+4|0;p=d+8|0;q=a+8|0;s=h+4|0;t=m;while(1){x=0;xa(808,d|0,t|0);m=x;x=0;if(m&1){u=5;break}m=k[d>>2]|0;v=k[p>>2]|0;k[f>>2]=k[o>>2]&65535;k[g>>2]=v&65535;x=0;nb(130,e|0,m|0,f|0,g|0);m=x;x=0;if(m&1){u=5;break}x=0;xa(809,h|0,e|0);m=x;x=0;if(m&1){u=5;break}m=k[i>>2]|0;if(m>>>0>=(k[q>>2]|0)>>>0){x=0;xa(745,a|0,h|0);v=x;x=0;if(v&1){u=17;break}v=k[s>>2]|0;if(v)j0a(v)}else{k[m>>2]=k[h>>2];k[m+4>>2]=k[s>>2];k[h>>2]=0;k[s>>2]=0;k[i>>2]=m+8}t=t+12|0;if((t|0)==(n|0)){u=4;break}}if((u|0)==4){r=c;return}else if((u|0)==5){n=Hc()|0;w=n;y=M;u=7;break}else if((u|0)==17){n=Hc()|0;t=M;q=k[s>>2]|0;if(!q){z=n;A=t;break}j0a(q);z=n;A=t;break}}else{t=Hc()|0;w=t;y=M;u=7}while(0);if((u|0)==7){z=w;A=y}y=k[a>>2]|0;if(!y)Sc(z|0);A=k[i>>2]|0;if((A|0)==(y|0))B=y;else{w=A;while(1){A=w+-8|0;k[i>>2]=A;u=k[w+-4>>2]|0;if(!u)C=A;else{j0a(u);C=k[i>>2]|0}if((C|0)==(y|0))break;else w=C}B=k[a>>2]|0}OBa(B);Sc(z|0)}function paa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;g=e+9|0;h=e+8|0;i[g>>0]=((i[b+77>>0]|0)!=0|c)&1;i[h>>0]=((i[b+78>>0]|0)!=0|d)&1;Kba(f,b+24|0,b+36|0,b+48|0,b+60|0,b+72|0,b+76|0,b+84|0,b+80|0,b+81|0,g,h,b+79|0);k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];r=e;return}function qaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+48|0;e=d+44|0;f=d+40|0;g=d+36|0;h=d+32|0;j=d+8|0;l=d;m=d+20|0;n=a+79|0;o=(i[n>>0]|0)==0|(k[c>>2]|0)!=0;q2a(j,329672,0);x=0;pa(57,o|0,j|0,1966,250928,254023);o=x;x=0;if(o&1){o=Hc()|0;p=M;K2a(j);q=p;s=o;Sc(s|0)}K2a(j);do if(i[n>>0]|0){j=k[c>>2]|0;o=k[(k[j>>2]|0)+4>>2]|0;iaa(l,a);x=0;p=Ta(o|0,j|0,k[l>>2]|0)|0;j=x;x=0;if(j&1){j=Hc()|0;o=M;t=k[l+4>>2]|0;if(!t){q=o;s=j;Sc(s|0)}j0a(t);q=o;s=j;Sc(s|0)}j=k[l+4>>2]|0;if(!j){if(p)break;else u=0;r=d;return u|0}else{j0a(j);if(p)break;else u=0;r=d;return u|0}}while(0);l=a+24|0;if(!(i[n>>0]|0))NU(m,l);else{k[g>>2]=(k[l>>2]|0)+8;k[h>>2]=k[a+28>>2];k[f>>2]=k[g>>2];k[e>>2]=k[h>>2];Iba(m,f,e)}a:do if(!(i[a+76>>0]|0)){e=k[b+4>>2]|0;f=k[b>>2]|0;h=m+4|0;g=k[m>>2]|0;l=f;n=e;c=g;if((e-f|0)==((k[h>>2]|0)-g|0))if((l|0)==(n|0))v=1;else{g=l;l=c;while(1){c=k[g>>2]|0;x=0;f=Ta(k[(k[c>>2]|0)+4>>2]|0,c|0,k[l>>2]|0)|0;c=x;x=0;if(c&1)break;if(!f){v=0;break a}g=g+8|0;if((g|0)==(n|0)){v=1;break a}else l=l+8|0}l=Hc()|0;n=M;g=k[m>>2]|0;if(!g){q=n;s=l;Sc(s|0)}f=k[h>>2]|0;if((f|0)==(g|0))w=g;else{c=f;while(1){f=c+-8|0;k[h>>2]=f;e=k[c+-4>>2]|0;if(!e)y=f;else{j0a(e);y=k[h>>2]|0}if((y|0)==(g|0))break;else c=y}w=k[m>>2]|0}OBa(w);q=n;s=l;Sc(s|0)}else v=0}else v=1;while(0);s=k[m>>2]|0;if(s){q=m+4|0;w=k[q>>2]|0;if((w|0)==(s|0))z=s;else{y=w;while(1){w=y+-8|0;k[q>>2]=w;b=k[y+-4>>2]|0;if(!b)A=w;else{j0a(b);A=k[q>>2]|0}if((A|0)==(s|0))break;else y=A}z=k[m>>2]|0}OBa(z)}u=v;r=d;return u|0}function raa(a){a=a|0;var b=0;b=(k[a+72>>2]|0)+-4|0;if(b>>>0<10)return (903>>>(b&1023)&1)!=0|0;else return 0;return 0}function saa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+112|0;d=c+108|0;e=c+104|0;f=c+100|0;g=c+96|0;h=c+72|0;j=c+84|0;l=c+64|0;m=c+36|0;n=c+48|0;o=c+24|0;p=c+12|0;q=c;s=b+84|0;t=(k[s>>2]|0)!=0;q2a(h,254123,48);x=0;pa(57,t|0,h|0,2016,250928,254172);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(h);v=t;w=u;Sc(v|0)}K2a(h);h=k[s>>2]|0;s=iDa(k[h+36>>2]|0,5224,5312,0)|0;if(!s)BBa();u=(i[s+72>>0]|0)!=0;s=k[h+24>>2]|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;h=i[s>>0]|0;t=(h&1)==0;y=t?(h&255)>>>1:k[s+4>>2]|0;x=0;nb(83,j|0,(t?s+1|0:k[s+8>>2]|0)|0,y|0,y+1|0);y=x;x=0;if(y&1){z=Hc()|0;A=M;K2a(j);Sc(z|0)}x=0;Fa(88,j|0,300108,1)|0;y=x;x=0;if(y&1){z=Hc()|0;A=M;K2a(j);Sc(z|0)}x=0;xa(740,l|0,b|0);b=x;x=0;if(!(b&1)){b=k[l>>2]|0;x=0;fb(140,m|0,254234,33);z=x;x=0;do if(!(z&1)){x=0;pa(57,(b|0)!=0|0,m|0,2023,250928,254172);A=x;x=0;if(A&1){A=Hc()|0;y=M;K2a(m);B=A;C=y;break}K2a(m);y=b+24|0;if(!(i[b+79>>0]|0)){x=0;xa(744,n|0,y|0);A=x;x=0;if(A&1){D=20;break}}else{k[f>>2]=(k[y>>2]|0)+8;k[g>>2]=k[b+28>>2];x=0;k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];fb(297,n|0,e|0,d|0);y=x;x=0;if(y&1){D=20;break}}y=k[n>>2]|0;A=n+4|0;a:do if((y|0)==(k[A>>2]|0))D=15;else{s=p+8|0;t=p+1|0;h=p+4|0;E=y;while(1){F=k[E>>2]|0;x=0;fb(140,o|0,254268,35);G=x;x=0;if(G&1){D=28;break}x=0;pa(57,(F|0)!=0|0,o|0,2027,250928,254172);F=x;x=0;if(F&1){D=30;break}K2a(o);F=k[E>>2]|0;x=0;fb(k[(k[F>>2]|0)+80>>2]|0,q|0,F|0,u|0);F=x;x=0;if(F&1){D=28;break}E=E+8|0;x=0;F=Ta(484,q|0,((E|0)==(k[A>>2]|0)?329672:301287)|0)|0;G=x;x=0;if(G&1){D=31;break};k[p>>2]=k[F>>2];k[p+4>>2]=k[F+4>>2];k[p+8>>2]=k[F+8>>2];k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;F=i[p>>0]|0;G=(F&1)==0;x=0;Fa(88,j|0,(G?t:k[s>>2]|0)|0,(G?(F&255)>>>1:k[h>>2]|0)|0)|0;F=x;x=0;if(F&1){D=32;break}K2a(p);K2a(q);if((E|0)==(k[A>>2]|0)){D=15;break a}}if((D|0)==28){E=Hc()|0;H=M;I=E;D=29;break}else if((D|0)==30){E=Hc()|0;h=M;K2a(o);J=E;K=h;break}else if((D|0)==31){h=Hc()|0;L=h;N=M}else if((D|0)==32){h=Hc()|0;E=M;K2a(p);L=h;N=E}K2a(q);J=L;K=N}while(0);if((D|0)==15){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;y=i[j>>0]|0;E=(y&1)==0;h=E?(y&255)>>>1:k[j+4>>2]|0;x=0;nb(83,a|0,(E?j+1|0:k[j+8>>2]|0)|0,h|0,h+1|0);h=x;x=0;if(!(h&1)?(x=0,Fa(88,a|0,300015,1)|0,h=x,x=0,!(h&1)):0){h=k[n>>2]|0;if(h){E=k[A>>2]|0;if((E|0)==(h|0))O=h;else{y=E;while(1){E=y+-8|0;k[A>>2]=E;s=k[y+-4>>2]|0;if(!s)P=E;else{j0a(s);P=k[A>>2]|0}if((P|0)==(h|0))break;else y=P}O=k[n>>2]|0}OBa(O)}y=k[l+4>>2]|0;if(!y){K2a(j);r=c;return}j0a(y);K2a(j);r=c;return}y=Hc()|0;h=M;K2a(a);H=h;I=y;D=29}if((D|0)==29){J=I;K=H}y=k[n>>2]|0;if(!y){B=J;C=K}else{h=k[A>>2]|0;if((h|0)==(y|0))Q=y;else{s=h;while(1){h=s+-8|0;k[A>>2]=h;E=k[s+-4>>2]|0;if(!E)R=h;else{j0a(E);R=k[A>>2]|0}if((R|0)==(y|0))break;else s=R}Q=k[n>>2]|0}OBa(Q);B=J;C=K}}else D=20;while(0);if((D|0)==20){D=Hc()|0;B=D;C=M}D=k[l+4>>2]|0;if(!D){S=B;T=C}else{j0a(D);S=B;T=C}}else{C=Hc()|0;S=C;T=M}K2a(j);v=S;w=T;Sc(v|0)}function taa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0;c=r;r=r+80|0;d=c+40|0;e=c+32|0;f=c;g=c+24|0;h=c+48|0;j=c+8|0;saa(j,b);b=i[j>>0]|0;m=(b&1)==0;n=m?(b&255)>>>1:k[j+4>>2]|0;b=m?j+1|0:k[j+8>>2]|0;m=h;o=m+32|0;do{i[m>>0]=0;m=m+1|0}while((m|0)<(o|0));k[f>>2]=b;k[f+4>>2]=n;k[g>>2]=h;k[g+4>>2]=32;x=0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];Ta(532,e|0,d|0)|0;d=x;x=0;if(d&1){d=Hc()|0;K2a(j);Sc(d|0)}else{d=((l[h+1>>0]|0|(l[h>>0]|0)<<8)<<8|(l[h+2>>0]|0))<<8|(l[h+3>>0]|0);k[a+32>>2]=1;k[a>>2]=d;K2a(j);r=c;return}}function uaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+48|0;e=d+36|0;f=d+32|0;g=d+28|0;h=d+24|0;j=d+12|0;l=d;k[a>>2]=0;m=a+4|0;k[m>>2]=0;k[a+8>>2]=0;n=b+24|0;if(!(i[b+79>>0]|0)){x=0;xa(744,j|0,n|0);o=x;x=0;if(o&1)p=15;else p=4}else{k[g>>2]=(k[n>>2]|0)+8;k[h>>2]=k[b+28>>2];x=0;k[f>>2]=k[g>>2];k[e>>2]=k[h>>2];fb(297,j|0,f|0,e|0);e=x;x=0;if(e&1)p=15;else p=4}a:do if((p|0)==4){e=k[j>>2]|0;f=j+4|0;h=k[f>>2]|0;do if((e|0)==(h|0))q=e;else{g=a+8|0;b=e;while(1){n=k[b>>2]|0;x=0;fb(k[(k[n>>2]|0)+80>>2]|0,l|0,n|0,c|0);n=x;x=0;if(n&1){p=21;break}n=k[m>>2]|0;if(n>>>0>=(k[g>>2]|0)>>>0){x=0;xa(650,a|0,l|0);o=x;x=0;if(o&1){p=22;break}}else{k[n>>2]=k[l>>2];k[n+4>>2]=k[l+4>>2];k[n+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[m>>2]=(k[m>>2]|0)+12}K2a(l);b=b+8|0;if((b|0)==(h|0)){p=6;break}}if((p|0)==6){q=k[j>>2]|0;break}else if((p|0)==21){b=Hc()|0;s=M;t=b}else if((p|0)==22){b=Hc()|0;g=M;K2a(l);s=g;t=b}b=k[j>>2]|0;if(!b){u=s;v=t;break a}g=k[f>>2]|0;if((g|0)==(b|0))w=b;else{n=g;while(1){g=n+-8|0;k[f>>2]=g;o=k[n+-4>>2]|0;if(!o)y=g;else{j0a(o);y=k[f>>2]|0}if((y|0)==(b|0))break;else n=y}w=k[j>>2]|0}OBa(w);u=s;v=t;break a}while(0);if(!q){r=d;return}h=k[f>>2]|0;if((h|0)==(q|0))z=q;else{e=h;while(1){h=e+-8|0;k[f>>2]=h;n=k[e+-4>>2]|0;if(!n)A=h;else{j0a(n);A=k[f>>2]|0}if((A|0)==(q|0))break;else e=A}z=k[j>>2]|0}OBa(z);r=d;return}else if((p|0)==15){e=Hc()|0;u=M;v=e}while(0);u=k[a>>2]|0;if(!u)Sc(v|0);p=k[m>>2]|0;if((p|0)==(u|0))B=u;else{d=p;do{p=d+-12|0;k[m>>2]=p;K2a(p);d=k[m>>2]|0}while((d|0)!=(u|0));B=k[a>>2]|0}OBa(B);Sc(v|0)}function vaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+16|0;e=d;k[a>>2]=0;f=a+4|0;k[f>>2]=0;k[a+8>>2]=0;g=k[b+36>>2]|0;h=k[b+40>>2]|0;if((g|0)==(h|0)){r=d;return}b=a+8|0;i=g;while(1){g=k[i>>2]|0;x=0;fb(k[(k[g>>2]|0)+80>>2]|0,e|0,g|0,c|0);g=x;x=0;if(g&1){j=9;break}g=k[f>>2]|0;if(g>>>0>=(k[b>>2]|0)>>>0){x=0;xa(650,a|0,e|0);l=x;x=0;if(l&1){j=10;break}}else{k[g>>2]=k[e>>2];k[g+4>>2]=k[e+4>>2];k[g+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[f>>2]=(k[f>>2]|0)+12}K2a(e);i=i+8|0;if((i|0)==(h|0)){j=3;break}}if((j|0)==3){r=d;return}else if((j|0)==9){d=Hc()|0;m=M;n=d}else if((j|0)==10){j=Hc()|0;d=M;K2a(e);m=d;n=j}j=k[a>>2]|0;if(!j)Sc(n|0);d=k[f>>2]|0;if((d|0)==(j|0))o=j;else{m=d;do{d=m+-12|0;k[f>>2]=d;K2a(d);m=k[f>>2]|0}while((m|0)!=(j|0));o=k[a>>2]|0}OBa(o);Sc(n|0)}function waa(a,b){a=a|0;b=b|0;var c=0;c=k[b+84>>2]|0;if((c|0)!=0?(b=iDa(c,4520,6104,-2)|0,(b|0)!=0):0){k[a>>2]=k[b>>2];c=k[b+4>>2]|0;k[a+4>>2]=c;if(!c)return;h0a(c);return}k[a>>2]=0;k[a+4>>2]=0;return}function xaa(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6784,0)|0;if(!c)BBa();b=k[c+24>>2]|0;if(!(cg[k[(k[b>>2]|0)+20>>2]&1023](b,k[a+24>>2]|0)|0)){d=0;return d|0}b=k[c+32>>2]|0;d=cg[k[(k[b>>2]|0)+20>>2]&1023](b,k[a+32>>2]|0)|0;return d|0}function yaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+64|0;e=d+48|0;f=d+36|0;g=d+24|0;h=d+12|0;j=d;l=k[b+24>>2]|0;jg[k[(k[l>>2]|0)+76>>2]&511](h,l,c);x=0;l=Fa(86,h|0,0,254304)|0;m=x;x=0;if(m&1){m=Hc()|0;n=M;o=m;K2a(h);Sc(o|0)};k[g>>2]=k[l>>2];k[g+4>>2]=k[l+4>>2];k[g+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;l=Ta(484,g|0,254313)|0;m=x;x=0;if(m&1){m=Hc()|0;p=M;q=m}else{k[f>>2]=k[l>>2];k[f+4>>2]=k[l+4>>2];k[f+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;l=k[b+32>>2]|0;x=0;fb(k[(k[l>>2]|0)+76>>2]|0,j|0,l|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;s=M;t=c}else{c=i[j>>0]|0;l=(c&1)==0;x=0;b=Fa(88,f|0,(l?j+1|0:k[j+8>>2]|0)|0,(l?(c&255)>>>1:k[j+4>>2]|0)|0)|0;c=x;x=0;do if(!(c&1)){k[e>>2]=k[b>>2];k[e+4>>2]=k[b+4>>2];k[e+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;x=0;l=Ta(484,e|0,300015)|0;m=x;x=0;if(m&1){m=Hc()|0;u=M;K2a(e);v=u;w=m;break}else{k[a>>2]=k[l>>2];k[a+4>>2]=k[l+4>>2];k[a+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;K2a(e);K2a(j);K2a(f);K2a(g);K2a(h);r=d;return}}else{l=Hc()|0;v=M;w=l}while(0);K2a(j);s=v;t=w}K2a(f);p=s;q=t}K2a(g);n=p;o=q;K2a(h);Sc(o|0)}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+64|0;d=c+48|0;e=c+36|0;f=c+24|0;g=c+12|0;h=c;j=k[b+24>>2]|0;jg[k[(k[j>>2]|0)+80>>2]&511](g,j,0);x=0;j=Fa(86,g|0,0,254304)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(g);Sc(n|0)};k[f>>2]=k[j>>2];k[f+4>>2]=k[j+4>>2];k[f+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;j=Ta(484,f|0,254313)|0;l=x;x=0;if(l&1){l=Hc()|0;o=M;p=l}else{k[e>>2]=k[j>>2];k[e+4>>2]=k[j+4>>2];k[e+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;j=k[b+32>>2]|0;x=0;fb(k[(k[j>>2]|0)+80>>2]|0,h|0,j|0,0);j=x;x=0;if(j&1){j=Hc()|0;q=M;s=j}else{j=i[h>>0]|0;b=(j&1)==0;x=0;l=Fa(88,e|0,(b?h+1|0:k[h+8>>2]|0)|0,(b?(j&255)>>>1:k[h+4>>2]|0)|0)|0;j=x;x=0;do if(!(j&1)){k[d>>2]=k[l>>2];k[d+4>>2]=k[l+4>>2];k[d+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;b=Ta(484,d|0,300015)|0;t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(d);v=u;w=t;break}else{k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;K2a(d);K2a(h);K2a(e);K2a(f);K2a(g);r=c;return}}else{b=Hc()|0;v=M;w=b}while(0);K2a(h);q=v;s=w}K2a(e);o=q;p=s}K2a(f);m=o;n=p;K2a(g);Sc(n|0)}function Aaa(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6800,0)|0;if(!c)BBa();b=k[a+24>>2]|0;d=cg[k[(k[b>>2]|0)+20>>2]&1023](b,k[c+24>>2]|0)|0;return d|0}function Baa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+96|0;a=b+72|0;c=b+32|0;d=b+16|0;e=b;b=c;f=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(f|0));b=c+20|0;f=c+24|0;k[f>>2]=0;k[c+28>>2]=0;k[c+32>>2]=0;k[c+36>>2]=-1;g=c+4|0;h=g+-4|0;i=g+16|0;j=c+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;K2a(a);k[c+4>>2]=20924;k[c>>2]=20888;k[b>>2]=20948;x=0;fb(140,e|0,254318,49);a=x;x=0;if(a&1){a=Hc()|0;l=M;m=a}else{k[d>>2]=21048;a=d+4|0;x=0;xa(604,a|0,e|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,c|0,d|0)|0;c=x;x=0;if(!(c&1)){x=0;nb(87,n|0,254368,250928,2177);x=0}n=Hc()|0;c=M;k[d>>2]=21048;K2a(a);o=c;p=n}K2a(e);l=o;m=p}k[g>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[f>>2]|0;if(!b)Sc(m|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(m|0);k[f>>2]=0;Sc(m|0)}function Caa(a){a=a|0;var b=0,c=0;b=k[a+24>>2]|0;if(((b|0)!=0?(a=iDa(b,168,6672,0)|0,(a|0)!=0):0)?(i[(k[a+24>>2]|0)+72>>0]|0)!=0:0){c=1;return c|0}c=0;return c|0}function Daa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0;d=r;r=r+288|0;e=d+272|0;f=d+248|0;g=d+240|0;h=d+152|0;j=d+128|0;l=d+120|0;m=d+104|0;n=d+80|0;o=d+72|0;p=d+56|0;q=d+32|0;s=d+24|0;t=d;k[a>>2]=0;u=a+4|0;k[u>>2]=0;k[a+8>>2]=0;v=b+24|0;b=k[v>>2]|0;x=0;w=Ba(k[k[b>>2]>>2]|0,b|0)|0;b=x;x=0;a:do if(!(b&1)){y=k[v>>2]|0;if((w|0)!=7){x=0;z=Ba(k[k[y>>2]>>2]|0,y|0)|0;A=x;x=0;if(A&1){B=12;break}if((z|0)!=10){r=d;return}z=iDa(k[v>>2]|0,168,6736,0)|0;if(!z){x=0;hb(49);x=0;B=12;break}A=k[z+24>>2]|0;x=0;z=Ba(563,40)|0;C=x;x=0;if(C&1){B=12;break}k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=33104;C=z+16|0;k[C>>2]=0;D=z+20|0;k[D>>2]=0;E=z+12|0;F=z+28|0;k[F>>2]=0;k[z+32>>2]=0;k[z+24>>2]=F;k[E>>2]=38496;k[z+36>>2]=A;F=E;i0a(z);k[C>>2]=F;C=k[D>>2]|0;k[D>>2]=z;if(C)k0a(C);C=k[A+40>>2]|0;D=k[A+44>>2]|0;b:do if((C|0)!=(D|0)){A=t+12|0;E=t+16|0;G=t+20|0;H=a+8|0;I=C;while(1){J=k[(k[I>>2]|0)+24>>2]|0;h0a(z);x=0;xa(604,t|0,J|0);J=x;x=0;if(J&1){B=156;break}k[A>>2]=F;k[E>>2]=z;h0a(z);k[G>>2]=0;J=k[u>>2]|0;if(J>>>0>=(k[H>>2]|0)>>>0){x=0;xa(799,a|0,t|0);K=x;x=0;if(K&1){B=157;break}K=k[E>>2]|0;if(K)j0a(K)}else{k[J>>2]=k[t>>2];k[J+4>>2]=k[t+4>>2];k[J+8>>2]=k[t+8>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[J+12>>2]=k[A>>2];k[J+16>>2]=k[E>>2];k[A>>2]=0;k[E>>2]=0;k[J+20>>2]=k[G>>2];k[u>>2]=(k[u>>2]|0)+24}K2a(t);j0a(z);I=I+8|0;if((I|0)==(D|0))break b}if((B|0)==156){I=Hc()|0;L=I;N=M}else if((B|0)==157){I=Hc()|0;G=M;A=k[E>>2]|0;if(A)j0a(A);K2a(t);L=I;N=G}j0a(z);j0a(z);O=L;P=N;break a}while(0);j0a(z);r=d;return}D=iDa(y,168,6672,0)|0;if(!D){x=0;hb(49);x=0;B=12;break}F=k[D+24>>2]|0;if(!c)Q=0;else{x=0;D=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;C=x;x=0;if(C&1){B=12;break}C=k[D+36>>2]|0;G=k[D+40>>2]|0;c:do if((C|0)==(G|0))R=C;else{D=C;while(1){if((k[D>>2]|0)==(F|0)){R=D;break c}D=D+4|0;if((D|0)==(G|0)){R=G;break}}}while(0);Q=(R|0)!=(G|0)}if(i[F+72>>0]|0){x=0;xa(590,e|0,F+60|0);C=x;x=0;if(C&1){B=12;break}C=k[e>>2]|0;y=e+4|0;z=k[y>>2]|0;do if((C|0)==(z|0))S=C;else{D=g+4|0;E=f+12|0;I=f+16|0;A=f+20|0;H=a+8|0;J=C;d:while(1){K=k[J>>2]|0;x=0;T=Ba(k[(k[K>>2]|0)+20>>2]|0,K|0)|0;U=x;x=0;if(U&1){B=41;break}if(T){T=k[K+32>>2]|0;if(!T){x=0;U=Ba(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;V=x;x=0;if(V&1){B=41;break}else W=U}else W=T;if((W|0)>1){T=k[K+24>>2]|0;x=0;fb(143,h|0,K|0,1);U=x;x=0;if(U&1){B=41;break}x=0;nb(125,g|0,h|0,1,0);U=x;x=0;if(U&1){B=42;break}U=k[g>>2]|0;V=k[D>>2]|0;k[g>>2]=0;k[D>>2]=0;x=0;xa(604,f|0,T|0);T=x;x=0;if(T&1){X=V;B=43;break}k[E>>2]=U;U=V;k[I>>2]=U;T=(V|0)==0;if(!T)h0a(U);k[A>>2]=K;K=k[u>>2]|0;do if(K>>>0<(k[H>>2]|0)>>>0){k[K>>2]=k[f>>2];k[K+4>>2]=k[f+4>>2];k[K+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[K+12>>2]=k[E>>2];k[K+16>>2]=k[I>>2];k[E>>2]=0;k[I>>2]=0;k[K+20>>2]=k[A>>2];k[u>>2]=(k[u>>2]|0)+24}else{x=0;xa(799,a|0,f|0);Y=x;x=0;if(Y&1){Z=V;B=44;break d}Y=k[I>>2]|0;if(!Y)break;j0a(Y)}while(0);K2a(f);if(!T)j0a(U);Dg(h)}}J=J+4|0;if((J|0)==(z|0)){B=18;break}}if((B|0)==18){S=k[e>>2]|0;break}else if((B|0)==41){J=Hc()|0;_=J;$=M}else if((B|0)==42){J=Hc()|0;aa=J;ba=M;B=49}else if((B|0)==43){J=Hc()|0;ca=J;da=M;ea=X;B=47}else if((B|0)==44){J=Hc()|0;A=M;E=k[I>>2]|0;if(E)j0a(E);K2a(f);ca=J;da=A;ea=Z;B=47}if((B|0)==47)if(!ea){aa=ca;ba=da;B=49}else{j0a(ea);aa=ca;ba=da;B=49}if((B|0)==49){Dg(h);_=aa;$=ba}A=k[e>>2]|0;if(!A){O=_;P=$;break a}J=k[y>>2]|0;if((J|0)!=(A|0))k[y>>2]=J+(~((J+-4-A|0)>>>2)<<2);OBa(A);O=_;P=$;break a}while(0);z=S;if(S){C=k[y>>2]|0;if((C|0)!=(S|0))k[y>>2]=C+(~((C+-4-z|0)>>>2)<<2);OBa(S)}}if(Q){x=0;z=Ba(606,F|0)|0;C=x;x=0;if(C&1){B=12;break}C=k[z>>2]|0;G=k[z+4>>2]|0;if((C|0)==(G|0)){r=d;return}z=j+12|0;A=j+16|0;J=l+4|0;E=j+20|0;H=a+8|0;D=C;while(1){C=k[D>>2]|0;V=k[C+24>>2]|0;x=0;xa(k[(k[C>>2]|0)+32>>2]|0,l|0,C|0);K=x;x=0;if(K&1){B=11;break}x=0;xa(604,j|0,V|0);V=x;x=0;if(V&1){B=71;break}k[z>>2]=k[l>>2];V=k[J>>2]|0;k[A>>2]=V;if(V)h0a(V);k[E>>2]=C;C=k[u>>2]|0;if(C>>>0>=(k[H>>2]|0)>>>0){x=0;xa(799,a|0,j|0);V=x;x=0;if(V&1){B=72;break}V=k[A>>2]|0;if(V)j0a(V)}else{k[C>>2]=k[j>>2];k[C+4>>2]=k[j+4>>2];k[C+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[C+12>>2]=k[z>>2];k[C+16>>2]=k[A>>2];k[z>>2]=0;k[A>>2]=0;k[C+20>>2]=k[E>>2];k[u>>2]=(k[u>>2]|0)+24}K2a(j);C=k[J>>2]|0;if(C)j0a(C);D=D+4|0;if((D|0)==(G|0)){B=161;break}}if((B|0)==11){G=Hc()|0;fa=G;ga=M;B=13;break}else if((B|0)==71){G=Hc()|0;ha=G;ia=M}else if((B|0)==72){G=Hc()|0;D=M;E=k[A>>2]|0;if(E)j0a(E);K2a(j);ha=G;ia=D}else if((B|0)==161){r=d;return}D=k[J>>2]|0;if(!D){O=ha;P=ia;break}j0a(D);O=ha;P=ia;break}D=F+60|0;x=0;xa(792,m|0,D|0);G=x;x=0;if(!(G&1)){G=k[m>>2]|0;E=m+4|0;z=k[E>>2]|0;do if((G|0)==(z|0))ja=G;else{H=n+12|0;y=n+16|0;C=o+4|0;V=n+20|0;K=a+8|0;Y=G;while(1){ka=k[Y>>2]|0;la=k[ka+24>>2]|0;x=0;xa(k[(k[ka>>2]|0)+32>>2]|0,o|0,ka|0);ka=x;x=0;if(ka&1){B=98;break}ka=k[Y>>2]|0;x=0;xa(604,n|0,la|0);la=x;x=0;if(la&1){B=99;break}k[H>>2]=k[o>>2];la=k[C>>2]|0;k[y>>2]=la;if(la)h0a(la);k[V>>2]=ka;ka=k[u>>2]|0;if(ka>>>0>=(k[K>>2]|0)>>>0){x=0;xa(799,a|0,n|0);la=x;x=0;if(la&1){B=100;break}la=k[y>>2]|0;if(la)j0a(la)}else{k[ka>>2]=k[n>>2];k[ka+4>>2]=k[n+4>>2];k[ka+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[ka+12>>2]=k[H>>2];k[ka+16>>2]=k[y>>2];k[H>>2]=0;k[y>>2]=0;k[ka+20>>2]=k[V>>2];k[u>>2]=(k[u>>2]|0)+24}K2a(n);ka=k[C>>2]|0;if(ka)j0a(ka);Y=Y+4|0;if((Y|0)==(z|0)){B=80;break}}if((B|0)==80){ja=k[m>>2]|0;break}else if((B|0)==98){Y=Hc()|0;ma=Y;na=M}else if((B|0)==99){Y=Hc()|0;oa=Y;pa=M;B=103}else if((B|0)==100){Y=Hc()|0;V=M;H=k[y>>2]|0;if(H)j0a(H);K2a(n);oa=Y;pa=V;B=103}if((B|0)==103){V=k[C>>2]|0;if(!V){ma=oa;na=pa}else{j0a(V);ma=oa;na=pa}}V=k[m>>2]|0;if(!V){O=ma;P=na;break a}Y=k[E>>2]|0;if((Y|0)!=(V|0))k[E>>2]=Y+(~((Y+-4-V|0)>>>2)<<2);OBa(V);O=ma;P=na;break a}while(0);z=ja;if(ja){G=k[E>>2]|0;if((G|0)!=(ja|0))k[E>>2]=G+(~((G+-4-z|0)>>>2)<<2);OBa(ja)}x=0;xa(810,p|0,D|0);z=x;x=0;if(!(z&1)){z=k[p>>2]|0;G=p+4|0;F=k[G>>2]|0;do if((z|0)==(F|0))qa=z;else{J=q+12|0;A=q+16|0;V=s+4|0;Y=q+20|0;H=a+8|0;K=z;e:while(1){I=k[K>>2]|0;ka=k[I+24>>2]|0;x=0;xa(k[(k[I>>2]|0)+32>>2]|0,s|0,I|0);I=x;x=0;if(I&1){B=128;break}I=k[K>>2]|0;x=0;xa(604,q|0,ka|0);ka=x;x=0;if(ka&1){B=129;break}k[J>>2]=k[s>>2];ka=k[V>>2]|0;k[A>>2]=ka;if(ka)h0a(ka);k[Y>>2]=I;I=k[u>>2]|0;do if(I>>>0<(k[H>>2]|0)>>>0){k[I>>2]=k[q>>2];k[I+4>>2]=k[q+4>>2];k[I+8>>2]=k[q+8>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[I+12>>2]=k[J>>2];k[I+16>>2]=k[A>>2];k[J>>2]=0;k[A>>2]=0;k[I+20>>2]=k[Y>>2];k[u>>2]=(k[u>>2]|0)+24}else{x=0;xa(799,a|0,q|0);ka=x;x=0;if(ka&1){B=130;break e}ka=k[A>>2]|0;if(!ka)break;j0a(ka)}while(0);K2a(q);I=k[V>>2]|0;if(I)j0a(I);K=K+4|0;if((K|0)==(F|0)){B=111;break}}if((B|0)==111){qa=k[p>>2]|0;break}else if((B|0)==128){K=Hc()|0;ra=K;sa=M}else if((B|0)==129){K=Hc()|0;ta=K;ua=M;B=133}else if((B|0)==130){K=Hc()|0;Y=M;J=k[A>>2]|0;if(J)j0a(J);K2a(q);ta=K;ua=Y;B=133}if((B|0)==133){Y=k[V>>2]|0;if(!Y){ra=ta;sa=ua}else{j0a(Y);ra=ta;sa=ua}}Y=k[p>>2]|0;if(!Y){O=ra;P=sa;break a}K=k[G>>2]|0;if((K|0)!=(Y|0))k[G>>2]=K+(~((K+-4-Y|0)>>>2)<<2);OBa(Y);O=ra;P=sa;break a}while(0);if(!qa){r=d;return}F=k[G>>2]|0;if((F|0)!=(qa|0))k[G>>2]=F+(~((F+-4-qa|0)>>>2)<<2);OBa(qa);r=d;return}else B=12}else B=12}else B=12;while(0);if((B|0)==12){d=Hc()|0;fa=d;ga=M;B=13}if((B|0)==13){O=fa;P=ga}ga=k[a>>2]|0;if(!ga)Sc(O|0);P=k[u>>2]|0;if((P|0)==(ga|0))va=ga;else{fa=P;do{P=fa+-24|0;k[u>>2]=P;B=k[fa+-8>>2]|0;if(B)j0a(B);K2a(P);fa=k[u>>2]|0}while((fa|0)!=(ga|0));va=k[a>>2]|0}OBa(va);Sc(O|0)}function Eaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;c=r;r=r+16|0;d=c;k[a+4>>2]=0;e=a+8|0;k[e>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;f=a+16|0;k[a+12>>2]=f;k[a>>2]=37700;g=a+24|0;k[g>>2]=0;h=a+28|0;k[h>>2]=0;k[a+32>>2]=0;k[d>>2]=0;i=d+4|0;k[i>>2]=0;k[d+8>>2]=0;j=k[b+52>>2]|0;b=k[j+28>>2]|0;l=b-(k[j+24>>2]|0)|0;m=l>>3;n=d+8|0;do if(m){x=0;o=Ba(563,l|0)|0;p=x;x=0;if(p&1){p=Hc()|0;q=p;s=M;break}else{p=o;t=o+(m<<3)|0;k[d>>2]=p;k[i>>2]=p;k[n>>2]=t;u=t;v=p;w=k[j+28>>2]|0;y=4;break}}else{u=0;v=0;w=b;y=4}while(0);a:do if((y|0)==4){b=k[j+24>>2]|0;do if((b|0)==(w|0)){z=i;A=h;B=a+32|0;C=g;D=0;E=v;F=0;G=v;H=0;I=u}else{m=b;while(1){l=k[m>>2]|0;x=0;p=Ba(k[(k[l>>2]|0)+16>>2]|0,l|0)|0;l=x;x=0;if(l&1)break;l=p+4|0;t=k[i>>2]|0;if((t|0)==(k[n>>2]|0)){x=0;xa(743,d|0,l|0);o=x;x=0;if(o&1)break}else{k[t>>2]=k[l>>2];l=k[p+8>>2]|0;k[t+4>>2]=l;if(!l)J=t;else{h0a(l);J=k[i>>2]|0}k[i>>2]=J+8}m=m+8|0;if((m|0)==(w|0)){y=6;break}}if((y|0)==6){m=a+32|0;z=i;A=h;B=m;C=g;D=k[g>>2]|0;E=k[d>>2]|0;F=k[h>>2]|0;G=k[i>>2]|0;H=k[m>>2]|0;I=k[n>>2]|0;break}m=Hc()|0;l=M;t=k[d>>2]|0;if(!t){q=m;s=l;break a}p=k[i>>2]|0;if((p|0)==(t|0))K=t;else{o=p;while(1){p=o+-8|0;k[i>>2]=p;L=k[o+-4>>2]|0;if(!L)N=p;else{j0a(L);N=k[i>>2]|0}if((N|0)==(t|0))break;else o=N}K=k[d>>2]|0}OBa(K);q=m;s=l;break a}while(0);k[d>>2]=D;k[C>>2]=E;k[z>>2]=F;k[A>>2]=G;k[n>>2]=H;k[B>>2]=I;b=D;o=F;if(!D){r=c;return}if((o|0)==(b|0))O=D;else{t=o;while(1){o=t+-8|0;k[i>>2]=o;L=k[t+-4>>2]|0;if(!L)P=o;else{j0a(L);P=k[i>>2]|0}if((P|0)==(b|0))break;else t=P}O=k[d>>2]|0}OBa(O);r=c;return}while(0);c=k[g>>2]|0;if(c){O=k[h>>2]|0;if((O|0)==(c|0))Q=c;else{d=O;while(1){O=d+-8|0;k[h>>2]=O;P=k[d+-4>>2]|0;if(!P)R=O;else{j0a(P);R=k[h>>2]|0}if((R|0)==(c|0))break;else d=R}Q=k[g>>2]|0}OBa(Q)}k[a>>2]=20456;xh(a+12|0,k[f>>2]|0);f=k[e>>2]|0;if(!f)Sc(q|0);k0a(f);Sc(q|0)}function Faa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=r;r=r+96|0;a=b+72|0;c=b+32|0;d=b+16|0;e=b;b=c;f=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(f|0));b=c+20|0;f=c+24|0;k[f>>2]=0;k[c+28>>2]=0;k[c+32>>2]=0;k[c+36>>2]=-1;g=c+4|0;h=g+-4|0;i=g+16|0;j=c+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;K2a(a);k[c+4>>2]=20924;k[c>>2]=20888;k[b>>2]=20948;x=0;fb(140,e|0,254318,49);a=x;x=0;if(a&1){a=Hc()|0;l=M;m=a}else{k[d>>2]=21048;a=d+4|0;x=0;xa(604,a|0,e|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,c|0,d|0)|0;c=x;x=0;if(!(c&1)){x=0;nb(87,n|0,254426,250928,2246);x=0}n=Hc()|0;c=M;k[d>>2]=21048;K2a(a);o=c;p=n}K2a(e);l=o;m=p}k[g>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[b>>2]=20796;b=k[f>>2]|0;if(!b)Sc(m|0);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!j)Sc(m|0);k[f>>2]=0;Sc(m|0)}function Gaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6816,0)|0;if(!c)BBa();b=k[a+28>>2]|0;e=k[a+24>>2]|0;a=k[c+24>>2]|0;f=e;g=b;if((b-e|0)!=((k[c+28>>2]|0)-a|0)){d=0;return d|0}if((f|0)==(g|0)){d=1;return d|0}c=f;f=a;while(1){a=k[c>>2]|0;if(!(cg[k[(k[a>>2]|0)+20>>2]&1023](a,k[f>>2]|0)|0)){d=0;h=9;break}c=c+8|0;if((c|0)==(g|0)){d=1;h=9;break}else f=f+8|0}if((h|0)==9)return d|0;return 0}function Haa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;d=r;r=r+48|0;e=d+24|0;f=d+12|0;g=d;q2a(e,254488,10);h=k[b+24>>2]|0;j=b+28|0;a:do if((h|0)==(k[j>>2]|0))l=3;else{b=f+8|0;m=f+1|0;n=f+4|0;o=h;while(1){p=k[o>>2]|0;x=0;fb(k[(k[p>>2]|0)+76>>2]|0,g|0,p|0,c|0);p=x;x=0;if(p&1){l=10;break}o=o+8|0;x=0;p=Ta(484,g|0,((o|0)==(k[j>>2]|0)?329672:301287)|0)|0;q=x;x=0;if(q&1){l=12;break};k[f>>2]=k[p>>2];k[f+4>>2]=k[p+4>>2];k[f+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;p=i[f>>0]|0;q=(p&1)==0;x=0;Fa(88,e|0,(q?m:k[b>>2]|0)|0,(q?(p&255)>>>1:k[n>>2]|0)|0)|0;p=x;x=0;if(p&1){l=13;break}K2a(f);K2a(g);if((o|0)==(k[j>>2]|0)){l=3;break a}}if((l|0)==10){o=Hc()|0;s=M;t=o;break}else if((l|0)==12){o=Hc()|0;u=M;v=o}else if((l|0)==13){o=Hc()|0;n=M;K2a(f);u=n;v=o}K2a(g);w=u;y=v;K2a(e);Sc(y|0)}while(0);if((l|0)==3){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;l=i[e>>0]|0;v=(l&1)==0;u=v?(l&255)>>>1:k[e+4>>2]|0;x=0;nb(83,a|0,(v?e+1|0:k[e+8>>2]|0)|0,u|0,u+1|0);u=x;x=0;if(!(u&1)?(x=0,Fa(88,a|0,300015,1)|0,u=x,x=0,!(u&1)):0){K2a(e);r=d;return}d=Hc()|0;u=M;K2a(a);s=u;t=d}w=s;y=t;K2a(e);Sc(y|0)}function Iaa(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6832,0)|0;if(!c)BBa();d=(k[a+24>>2]|0)==(k[c+24>>2]|0);return d|0}function Jaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;c=r;r=r+32|0;d=c+8|0;e=c;k[a>>2]=0;f=a+4|0;k[f>>2]=0;k[a+8>>2]=0;g=k[b+24>>2]|0;x=0;b=Ba(k[(k[g>>2]|0)+16>>2]|0,g|0)|0;g=x;x=0;do if(!(g&1)){h=k[b+16>>2]|0;i=b+20|0;if((h|0)==(i|0)){r=c;return}j=d+12|0;l=d+16|0;m=e+4|0;n=d+20|0;o=a+8|0;p=h;a:while(1){h=k[p+28>>2]|0;q=k[p+32>>2]|0;if((h|0)!=(q|0)){s=p+16|0;t=h;do{h=k[t>>2]|0;x=0;xa(k[(k[h>>2]|0)+32>>2]|0,e|0,h|0);u=x;x=0;if(u&1){v=5;break a}x=0;xa(604,d|0,s|0);u=x;x=0;if(u&1){v=27;break a}k[j>>2]=k[e>>2];u=k[m>>2]|0;k[l>>2]=u;if(u)h0a(u);k[n>>2]=h;h=k[f>>2]|0;if(h>>>0>=(k[o>>2]|0)>>>0){x=0;xa(799,a|0,d|0);u=x;x=0;if(u&1){v=28;break a}u=k[l>>2]|0;if(u)j0a(u)}else{k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];k[h+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[h+12>>2]=k[j>>2];k[h+16>>2]=k[l>>2];k[j>>2]=0;k[l>>2]=0;k[h+20>>2]=k[n>>2];k[f>>2]=(k[f>>2]|0)+24}K2a(d);h=k[m>>2]|0;if(h)j0a(h);t=t+4|0}while((t|0)!=(q|0))}q=k[p+4>>2]|0;if(!q){t=p;while(1){s=k[t+8>>2]|0;if((k[s>>2]|0)==(t|0)){w=s;break}else t=s}}else{t=q;while(1){s=k[t>>2]|0;if(!s){w=t;break}else t=s}}if((w|0)==(i|0)){v=4;break}else p=w}if((v|0)==4){r=c;return}else if((v|0)==5){p=Hc()|0;y=p;z=M;v=7;break}else if((v|0)==27){p=Hc()|0;A=p;B=M}else if((v|0)==28){p=Hc()|0;i=M;n=k[l>>2]|0;if(n)j0a(n);K2a(d);A=p;B=i}i=k[m>>2]|0;if(!i){C=A;D=B}else{j0a(i);C=A;D=B}}else{i=Hc()|0;y=i;z=M;v=7}while(0);if((v|0)==7){C=y;D=z}z=k[a>>2]|0;if(!z)Sc(C|0);D=k[f>>2]|0;if((D|0)==(z|0))E=z;else{y=D;do{D=y+-24|0;k[f>>2]=D;v=k[y+-8>>2]|0;if(v)j0a(v);K2a(D);y=k[f>>2]|0}while((y|0)!=(z|0));E=k[a>>2]|0}OBa(E);Sc(C|0)}function Kaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;q2a(e,254499,8);g=k[b+24>>2]|0;x=0;b=Ba(k[(k[g>>2]|0)+16>>2]|0,g|0)|0;g=x;x=0;if(!(g&1)?(g=b+4|0,h=i[g>>0]|0,j=(h&1)==0,x=0,l=Fa(88,e|0,(j?g+1|0:k[b+12>>2]|0)|0,(j?(h&255)>>>1:k[b+8>>2]|0)|0)|0,b=x,x=0,!(b&1)):0){k[d>>2]=k[l>>2];k[d+4>>2]=k[l+4>>2];k[d+8>>2]=k[l+8>>2];k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;x=0;fb(140,f|0,276785,1);l=x;x=0;do if(!(l&1)){b=i[f>>0]|0;h=(b&1)==0;x=0;j=Fa(88,d|0,(h?f+1|0:k[f+8>>2]|0)|0,(h?(b&255)>>>1:k[f+4>>2]|0)|0)|0;b=x;x=0;if(b&1){b=Hc()|0;h=M;K2a(f);m=h;n=b;break}else{k[a>>2]=k[j>>2];k[a+4>>2]=k[j+4>>2];k[a+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;K2a(f);K2a(d);K2a(e);r=c;return}}else{j=Hc()|0;m=M;n=j}while(0);K2a(d);o=m;p=n;K2a(e);Sc(p|0)}n=Hc()|0;o=M;p=n;K2a(e);Sc(p|0)}function Laa(a,b){a=a|0;b=b|0;var c=0,d=0;c=Vf[k[k[b>>2]>>2]&1023](b)|0;if((c|0)!=(Vf[k[k[a>>2]>>2]&1023](a)|0)){d=0;return d|0}c=iDa(b,168,6848,0)|0;if(!c)BBa();d=(k[c+24>>2]|0)==(k[a+24>>2]|0);return d|0}function Maa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0;c=r;r=r+608|0;d=c+592|0;e=c+448|0;f=c+436|0;g=c+424|0;h=c+412|0;i=c+400|0;j=c+388|0;l=c+376|0;m=c+364|0;n=c+352|0;o=c+340|0;p=c+328|0;q=c+208|0;s=c+192|0;t=c+180|0;u=c+168|0;v=c+156|0;w=c+144|0;y=c+96|0;z=c+84|0;A=c+72|0;B=c+32|0;C=c+16|0;D=c;switch(k[b+24>>2]|0){case 0:{x=0;fb(140,f|0,272298,8);b=x;x=0;if(b&1){b=Hc()|0;E=1;F=b;G=M;H=e}else{x=0;b=Ba(563,44)|0;I=x;x=0;do if(I&1){J=Hc()|0;K=M;L=J;N=72}else{k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31848;J=b+12|0;x=0;fb(247,J|0,0,2);O=x;x=0;if(O&1){O=Hc()|0;P=M;c0a(b);OBa(b);K=P;L=O;N=72;break}O=J;i0a(b);k[b+16>>2]=O;J=b+20|0;P=k[J>>2]|0;k[J>>2]=b;if(P)k0a(P);x=0;xa(604,e|0,f|0);P=x;x=0;if(!(P&1)){k[e+12>>2]=O;k[e+16>>2]=b;h0a(b);k[e+20>>2]=0;O=e+24|0;x=0;fb(140,g|0,272307,9);P=x;x=0;if(P&1){Q=O;N=73}else{x=0;P=Ba(563,44)|0;J=x;x=0;do if(J&1){R=Hc()|0;S=M;T=R;N=75}else{k[P+4>>2]=0;k[P+8>>2]=0;k[P>>2]=31848;R=P+12|0;x=0;fb(247,R|0,256,0);U=x;x=0;if(U&1){U=Hc()|0;V=M;c0a(P);OBa(P);S=V;T=U;N=75;break}U=R;i0a(P);k[P+16>>2]=U;R=P+20|0;V=k[R>>2]|0;k[R>>2]=P;if(V)k0a(V);x=0;xa(604,O|0,g|0);V=x;x=0;if(!(V&1)){k[e+36>>2]=U;k[e+40>>2]=P;h0a(P);k[e+44>>2]=0;U=e+48|0;x=0;fb(140,h|0,254508,9);V=x;x=0;if(V&1){W=U;N=76}else{x=0;fb(140,j|0,293718,4);V=x;x=0;if(V&1){V=Hc()|0;X=1;Y=V;Z=M;_=U}else{k[i>>2]=0;V=i+4|0;k[V>>2]=0;k[i+8>>2]=0;x=0;R=Ba(563,12)|0;$=x;x=0;do if($&1){aa=Hc()|0;ba=aa;ca=M;N=78}else{k[V>>2]=R;k[i>>2]=R;k[i+8>>2]=R+12;x=0;xa(604,R|0,j|0);aa=x;x=0;if(aa&1){aa=Hc()|0;da=M;OBa(R);ba=aa;ca=da;N=78;break}k[V>>2]=R+12;x=0;fb(140,m|0,254518,7);da=x;x=0;if(da&1){da=Hc()|0;ea=U;fa=1;ga=da;ha=M}else{k[l>>2]=0;da=l+4|0;k[da>>2]=0;k[l+8>>2]=0;x=0;aa=Ba(563,12)|0;ia=x;x=0;do if(ia&1){ja=Hc()|0;ka=ja;la=M;N=80}else{k[da>>2]=aa;k[l>>2]=aa;k[l+8>>2]=aa+12;x=0;xa(604,aa|0,m|0);ja=x;x=0;if(ja&1){ja=Hc()|0;ma=M;OBa(aa);ka=ja;la=ma;N=80;break}k[da>>2]=aa+12;x=0;ma=Ba(563,100)|0;ja=x;x=0;do if(ja&1){na=Hc()|0;oa=M;pa=na;N=82}else{k[ma+4>>2]=0;k[ma+8>>2]=0;k[ma>>2]=31496;na=ma+12|0;x=0;Pa(44,na|0,i|0,l|0,22,0,0,0);qa=x;x=0;if(qa&1){qa=Hc()|0;ra=M;c0a(ma);OBa(ma);oa=ra;pa=qa;N=82;break}qa=na;i0a(ma);k[ma+16>>2]=qa;na=ma+20|0;ra=k[na>>2]|0;k[na>>2]=ma;if(ra)k0a(ra);x=0;xa(604,U|0,h|0);ra=x;x=0;do if(ra&1){sa=U;N=83}else{k[e+60>>2]=qa;k[e+64>>2]=ma;h0a(ma);k[e+68>>2]=0;na=e+72|0;x=0;fb(140,n|0,272317,10);ta=x;x=0;if(ta&1){sa=na;N=83;break}x=0;ta=Ba(563,44)|0;ua=x;x=0;do if(ua&1){va=Hc()|0;wa=M;ya=va;N=85}else{k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta>>2]=31848;va=ta+12|0;x=0;fb(247,va|0,256,0);za=x;x=0;if(za&1){za=Hc()|0;Aa=M;c0a(ta);OBa(ta);wa=Aa;ya=za;N=85;break}za=va;i0a(ta);k[ta+16>>2]=za;va=ta+20|0;Aa=k[va>>2]|0;k[va>>2]=ta;if(Aa)k0a(Aa);x=0;xa(604,na|0,n|0);Aa=x;x=0;do if(Aa&1){Ca=na;N=86}else{k[e+84>>2]=za;k[e+88>>2]=ta;h0a(ta);k[e+92>>2]=0;va=e+96|0;x=0;fb(140,o|0,272328,6);Da=x;x=0;if(Da&1){Ca=va;N=86;break}x=0;Da=Ba(563,44)|0;Ea=x;x=0;do if(Ea&1){Fa=Hc()|0;Ga=M;Ha=Fa;N=88}else{k[Da+4>>2]=0;k[Da+8>>2]=0;k[Da>>2]=31848;Fa=Da+12|0;x=0;fb(247,Fa|0,256,0);Ia=x;x=0;if(Ia&1){Ia=Hc()|0;Ja=M;c0a(Da);OBa(Da);Ga=Ja;Ha=Ia;N=88;break}Ia=Fa;i0a(Da);k[Da+16>>2]=Ia;Fa=Da+20|0;Ja=k[Fa>>2]|0;k[Fa>>2]=Da;if(Ja)k0a(Ja);x=0;xa(604,va|0,o|0);Ja=x;x=0;do if(Ja&1){Ka=va;N=89}else{k[e+108>>2]=Ia;k[e+112>>2]=Da;h0a(Da);k[e+116>>2]=0;Fa=e+120|0;x=0;fb(140,p|0,272335,8);La=x;x=0;if(La&1){Ka=Fa;N=89;break}x=0;La=Ba(563,44)|0;Ma=x;x=0;do if(Ma&1){Na=Hc()|0;Oa=M;Qa=Na;N=91}else{k[La+4>>2]=0;k[La+8>>2]=0;k[La>>2]=31848;Na=La+12|0;x=0;fb(247,Na|0,256,0);Ra=x;x=0;if(Ra&1){Ra=Hc()|0;Sa=M;c0a(La);OBa(La);Oa=Sa;Qa=Ra;N=91;break}Ra=Na;i0a(La);k[La+16>>2]=Ra;Na=La+20|0;Sa=k[Na>>2]|0;k[Na>>2]=La;if(Sa)k0a(Sa);x=0;xa(604,Fa|0,p|0);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;Ua=1;Va=Sa;Wa=M}else{k[e+132>>2]=Ra;k[e+136>>2]=La;h0a(La);k[e+140>>2]=0;k[a>>2]=0;Ra=a+4|0;k[Ra>>2]=0;k[a+8>>2]=0;x=0;Sa=Ba(563,144)|0;Na=x;x=0;if(Na&1){Na=Hc()|0;Xa=Na;Ya=M}else{k[Ra>>2]=Sa;k[a>>2]=Sa;k[a+8>>2]=Sa+144;x=0;xa(604,Sa|0,e|0);Na=x;x=0;if(Na&1){Na=Hc()|0;Za=Na;_a=M}else{k[Sa+12>>2]=k[e+12>>2];Na=k[e+16>>2]|0;k[Sa+16>>2]=Na;if(Na)h0a(Na);k[Sa+20>>2]=k[e+20>>2];Na=Sa+24|0;k[Ra>>2]=Na;x=0;xa(604,Na|0,e+24|0);$a=x;x=0;do if($a&1)ab=Na;else{k[Sa+36>>2]=k[e+36>>2];bb=k[e+40>>2]|0;k[Sa+40>>2]=bb;if(bb)h0a(bb);k[Sa+44>>2]=k[e+44>>2];bb=Sa+48|0;k[Ra>>2]=bb;x=0;xa(604,bb|0,e+48|0);cb=x;x=0;if(cb&1){ab=bb;break}k[Sa+60>>2]=k[e+60>>2];bb=k[e+64>>2]|0;k[Sa+64>>2]=bb;if(bb)h0a(bb);k[Sa+68>>2]=k[e+68>>2];bb=Sa+72|0;k[Ra>>2]=bb;x=0;xa(604,bb|0,e+72|0);cb=x;x=0;if(cb&1){ab=bb;break}k[Sa+84>>2]=k[e+84>>2];bb=k[e+88>>2]|0;k[Sa+88>>2]=bb;if(bb)h0a(bb);k[Sa+92>>2]=k[e+92>>2];bb=Sa+96|0;k[Ra>>2]=bb;x=0;xa(604,bb|0,e+96|0);cb=x;x=0;if(cb&1){ab=bb;break}k[Sa+108>>2]=k[e+108>>2];bb=k[e+112>>2]|0;k[Sa+112>>2]=bb;if(bb)h0a(bb);k[Sa+116>>2]=k[e+116>>2];bb=Sa+120|0;k[Ra>>2]=bb;x=0;xa(604,bb|0,e+120|0);cb=x;x=0;if(cb&1){ab=bb;break}k[Sa+132>>2]=k[e+132>>2];bb=k[e+136>>2]|0;k[Sa+136>>2]=bb;if(bb)h0a(bb);k[Sa+140>>2]=k[e+140>>2];k[Ra>>2]=Sa+144;bb=k[e+136>>2]|0;if(bb)j0a(bb);K2a(e+120|0);bb=k[e+112>>2]|0;if(bb)j0a(bb);K2a(e+96|0);bb=k[e+88>>2]|0;if(bb)j0a(bb);K2a(e+72|0);bb=k[e+64>>2]|0;if(bb)j0a(bb);K2a(e+48|0);bb=k[e+40>>2]|0;if(bb)j0a(bb);K2a(e+24|0);bb=k[e+16>>2]|0;if(bb)j0a(bb);K2a(e);j0a(La);K2a(p);j0a(Da);K2a(o);j0a(ta);K2a(n);j0a(ma);K2a(aa);k[da>>2]=aa;OBa(aa);K2a(m);K2a(R);k[V>>2]=R;OBa(R);K2a(j);K2a(h);j0a(P);K2a(g);j0a(b);K2a(f);r=c;return}while(0);Na=Hc()|0;$a=M;bb=ab;do{cb=k[bb+-8>>2]|0;bb=bb+-24|0;if(cb)j0a(cb);K2a(bb)}while((bb|0)!=(Sa|0));k[Ra>>2]=Sa;Za=Na;_a=$a}OBa(Sa);Xa=Za;Ya=_a}bb=k[e+136>>2]|0;if(bb)j0a(bb);K2a(e+120|0);bb=k[e+112>>2]|0;if(bb)j0a(bb);K2a(e+96|0);bb=k[e+88>>2]|0;if(bb)j0a(bb);K2a(e+72|0);bb=k[e+64>>2]|0;if(bb)j0a(bb);K2a(e+48|0);bb=k[e+40>>2]|0;if(bb)j0a(bb);K2a(e+24|0);bb=k[e+16>>2]|0;if(bb)j0a(bb);K2a(e);Ua=0;Va=Xa;Wa=Ya}j0a(La);db=Ua;eb=Va;gb=Wa}while(0);if((N|0)==91){db=1;eb=Qa;gb=Oa}K2a(p);hb=db;ib=eb;jb=gb;kb=Fa}while(0);if((N|0)==89){Ia=Hc()|0;hb=1;ib=Ia;jb=M;kb=Ka}j0a(Da);lb=hb;mb=ib;ob=jb;pb=kb}while(0);if((N|0)==88){lb=1;mb=Ha;ob=Ga;pb=va}K2a(o);qb=lb;rb=mb;sb=ob;tb=pb}while(0);if((N|0)==86){za=Hc()|0;qb=1;rb=za;sb=M;tb=Ca}j0a(ta);ub=qb;vb=rb;wb=sb;xb=tb}while(0);if((N|0)==85){ub=1;vb=ya;wb=wa;xb=na}K2a(n);yb=ub;zb=vb;Ab=wb;Bb=xb}while(0);if((N|0)==83){qa=Hc()|0;yb=1;zb=qa;Ab=M;Bb=sa}j0a(ma);Cb=Bb;Db=yb;Eb=zb;Fb=Ab}while(0);if((N|0)==82){Cb=U;Db=1;Eb=pa;Fb=oa}K2a(aa);k[da>>2]=aa;OBa(aa);Gb=Cb;Hb=Db;Ib=Eb;Jb=Fb}while(0);if((N|0)==80){Gb=U;Hb=1;Ib=ka;Jb=la}K2a(m);ea=Gb;fa=Hb;ga=Ib;ha=Jb}K2a(R);k[V>>2]=R;OBa(R);Kb=fa;Lb=ga;Mb=ha;Nb=ea}while(0);if((N|0)==78){Kb=1;Lb=ba;Mb=ca;Nb=U}K2a(j);X=Kb;Y=Lb;Z=Mb;_=Nb}K2a(h);Ob=X;Pb=Y;Qb=Z;Rb=_}}else{W=O;N=76}if((N|0)==76){R=Hc()|0;Ob=1;Pb=R;Qb=M;Rb=W}j0a(P);Sb=Ob;Tb=Pb;Ub=Qb;Vb=Rb}while(0);if((N|0)==75){Sb=1;Tb=T;Ub=S;Vb=O}K2a(g);Wb=Sb;Xb=Tb;Yb=Ub;Zb=Vb}}else{Q=e;N=73}if((N|0)==73){P=Hc()|0;Wb=1;Xb=P;Yb=M;Zb=Q}j0a(b);_b=Wb;$b=Xb;ac=Yb;bc=Zb}while(0);if((N|0)==72){_b=1;$b=L;ac=K;bc=e}K2a(f);E=_b;F=$b;G=ac;H=bc}if((e|0)==(H|0)|E^1){cc=F;dc=G;Sc(cc|0)}else ec=H;do{H=k[ec+-8>>2]|0;ec=ec+-24|0;if(H)j0a(H);K2a(ec)}while((ec|0)!=(e|0));cc=F;dc=G;Sc(cc|0);break}case 1:{x=0;fb(140,s|0,272344,6);G=x;x=0;if(G&1){G=Hc()|0;fc=1;gc=q;hc=M;ic=G}else{x=0;G=Ba(563,44)|0;F=x;x=0;do if(F&1){e=Hc()|0;jc=M;kc=e;N=168}else{k[G+4>>2]=0;k[G+8>>2]=0;k[G>>2]=31848;e=G+12|0;x=0;fb(247,e|0,0,2);ec=x;x=0;if(ec&1){ec=Hc()|0;H=M;c0a(G);OBa(G);jc=H;kc=ec;N=168;break}ec=e;i0a(G);k[G+16>>2]=ec;e=G+20|0;H=k[e>>2]|0;k[e>>2]=G;if(H)k0a(H);x=0;xa(604,q|0,s|0);H=x;x=0;if(!(H&1)){k[q+12>>2]=ec;k[q+16>>2]=G;h0a(G);k[q+20>>2]=0;ec=q+24|0;x=0;fb(140,t|0,272364,3);H=x;x=0;if(H&1){lc=ec;N=169}else{x=0;H=Ba(563,44)|0;e=x;x=0;do if(e&1){E=Hc()|0;mc=M;nc=E;N=171}else{k[H+4>>2]=0;k[H+8>>2]=0;k[H>>2]=31848;E=H+12|0;x=0;fb(247,E|0,256,0);bc=x;x=0;if(bc&1){bc=Hc()|0;ac=M;c0a(H);OBa(H);mc=ac;nc=bc;N=171;break}bc=E;i0a(H);k[H+16>>2]=bc;E=H+20|0;ac=k[E>>2]|0;k[E>>2]=H;if(ac)k0a(ac);x=0;xa(604,ec|0,t|0);ac=x;x=0;if(!(ac&1)){k[q+36>>2]=bc;k[q+40>>2]=H;h0a(H);k[q+44>>2]=0;bc=q+48|0;x=0;fb(140,u|0,272351,5);ac=x;x=0;if(ac&1){oc=bc;N=172}else{x=0;ac=Ba(563,44)|0;E=x;x=0;do if(E&1){$b=Hc()|0;pc=M;qc=$b;N=174}else{k[ac+4>>2]=0;k[ac+8>>2]=0;k[ac>>2]=31848;$b=ac+12|0;x=0;fb(247,$b|0,256,0);_b=x;x=0;if(_b&1){_b=Hc()|0;f=M;c0a(ac);OBa(ac);pc=f;qc=_b;N=174;break}_b=$b;i0a(ac);k[ac+16>>2]=_b;$b=ac+20|0;f=k[$b>>2]|0;k[$b>>2]=ac;if(f)k0a(f);x=0;xa(604,bc|0,u|0);f=x;x=0;do if(f&1){rc=bc;N=175}else{k[q+60>>2]=_b;k[q+64>>2]=ac;h0a(ac);k[q+68>>2]=0;$b=q+72|0;x=0;fb(140,v|0,272377,4);K=x;x=0;if(K&1){rc=$b;N=175;break}x=0;K=Ba(563,104)|0;L=x;x=0;do if(L&1){Zb=Hc()|0;sc=M;tc=Zb;N=177}else{k[K+4>>2]=0;k[K+8>>2]=0;k[K>>2]=31932;Zb=K+16|0;x=0;fb(283,Zb|0,1,0);Yb=x;x=0;if(Yb&1){Yb=Hc()|0;Xb=M;c0a(K);OBa(K);sc=Xb;tc=Yb;N=177;break}Yb=Zb;i0a(K);k[K+20>>2]=Yb;Zb=K+24|0;Xb=k[Zb>>2]|0;k[Zb>>2]=K;if(Xb)k0a(Xb);x=0;xa(604,$b|0,v|0);Xb=x;x=0;do if(Xb&1){uc=$b;N=178}else{k[q+84>>2]=Yb;k[q+88>>2]=K;h0a(K);k[q+92>>2]=0;Zb=q+96|0;x=0;fb(140,w|0,272382,3);Wb=x;x=0;if(Wb&1){uc=Zb;N=178;break}x=0;Wb=Ba(563,40)|0;b=x;x=0;do if(b&1){Q=Hc()|0;vc=M;wc=Q;N=180}else{k[Wb+4>>2]=0;k[Wb+8>>2]=0;k[Wb>>2]=31904;Q=Wb+12|0;x=0;xa(752,Q|0,4);Vb=x;x=0;if(Vb&1){Vb=Hc()|0;Ub=M;c0a(Wb);OBa(Wb);vc=Ub;wc=Vb;N=180;break}Vb=Q;i0a(Wb);k[Wb+16>>2]=Vb;Q=Wb+20|0;Ub=k[Q>>2]|0;k[Q>>2]=Wb;if(Ub)k0a(Ub);x=0;xa(604,Zb|0,w|0);Ub=x;x=0;if(Ub&1){Ub=Hc()|0;xc=1;yc=Ub;zc=M}else{k[q+108>>2]=Vb;k[q+112>>2]=Wb;h0a(Wb);k[q+116>>2]=0;k[a>>2]=0;Vb=a+4|0;k[Vb>>2]=0;k[a+8>>2]=0;x=0;Ub=Ba(563,120)|0;Q=x;x=0;if(Q&1){Q=Hc()|0;Ac=Q;Bc=M}else{k[Vb>>2]=Ub;k[a>>2]=Ub;k[a+8>>2]=Ub+120;x=0;xa(604,Ub|0,q|0);Q=x;x=0;if(Q&1){Q=Hc()|0;Cc=Q;Dc=M}else{k[Ub+12>>2]=k[q+12>>2];Q=k[q+16>>2]|0;k[Ub+16>>2]=Q;if(Q)h0a(Q);k[Ub+20>>2]=k[q+20>>2];Q=Ub+24|0;k[Vb>>2]=Q;x=0;xa(604,Q|0,q+24|0);Tb=x;x=0;do if(Tb&1)Ec=Q;else{k[Ub+36>>2]=k[q+36>>2];Sb=k[q+40>>2]|0;k[Ub+40>>2]=Sb;if(Sb)h0a(Sb);k[Ub+44>>2]=k[q+44>>2];Sb=Ub+48|0;k[Vb>>2]=Sb;x=0;xa(604,Sb|0,q+48|0);g=x;x=0;if(g&1){Ec=Sb;break}k[Ub+60>>2]=k[q+60>>2];Sb=k[q+64>>2]|0;k[Ub+64>>2]=Sb;if(Sb)h0a(Sb);k[Ub+68>>2]=k[q+68>>2];Sb=Ub+72|0;k[Vb>>2]=Sb;x=0;xa(604,Sb|0,q+72|0);g=x;x=0;if(g&1){Ec=Sb;break}k[Ub+84>>2]=k[q+84>>2];Sb=k[q+88>>2]|0;k[Ub+88>>2]=Sb;if(Sb)h0a(Sb);k[Ub+92>>2]=k[q+92>>2];Sb=Ub+96|0;k[Vb>>2]=Sb;x=0;xa(604,Sb|0,q+96|0);g=x;x=0;if(g&1){Ec=Sb;break}k[Ub+108>>2]=k[q+108>>2];Sb=k[q+112>>2]|0;k[Ub+112>>2]=Sb;if(Sb)h0a(Sb);k[Ub+116>>2]=k[q+116>>2];k[Vb>>2]=Ub+120;Sb=k[q+112>>2]|0;if(Sb)j0a(Sb);K2a(q+96|0);Sb=k[q+88>>2]|0;if(Sb)j0a(Sb);K2a(q+72|0);Sb=k[q+64>>2]|0;if(Sb)j0a(Sb);K2a(q+48|0);Sb=k[q+40>>2]|0;if(Sb)j0a(Sb);K2a(q+24|0);Sb=k[q+16>>2]|0;if(Sb)j0a(Sb);K2a(q);j0a(Wb);K2a(w);j0a(K);K2a(v);j0a(ac);K2a(u);j0a(H);K2a(t);j0a(G);K2a(s);r=c;return}while(0);Q=Hc()|0;Tb=M;Sb=Ec;do{g=k[Sb+-8>>2]|0;Sb=Sb+-24|0;if(g)j0a(g);K2a(Sb)}while((Sb|0)!=(Ub|0));k[Vb>>2]=Ub;Cc=Q;Dc=Tb}OBa(Ub);Ac=Cc;Bc=Dc}Sb=k[q+112>>2]|0;if(Sb)j0a(Sb);K2a(q+96|0);Sb=k[q+88>>2]|0;if(Sb)j0a(Sb);K2a(q+72|0);Sb=k[q+64>>2]|0;if(Sb)j0a(Sb);K2a(q+48|0);Sb=k[q+40>>2]|0;if(Sb)j0a(Sb);K2a(q+24|0);Sb=k[q+16>>2]|0;if(Sb)j0a(Sb);K2a(q);xc=0;yc=Ac;zc=Bc}j0a(Wb);Fc=xc;Gc=yc;Ic=zc}while(0);if((N|0)==180){Fc=1;Gc=wc;Ic=vc}K2a(w);Jc=Gc;Kc=Ic;Lc=Fc;Mc=Zb}while(0);if((N|0)==178){Yb=Hc()|0;Jc=Yb;Kc=M;Lc=1;Mc=uc}j0a(K);Nc=Jc;Oc=Kc;Pc=Lc;Qc=Mc}while(0);if((N|0)==177){Nc=tc;Oc=sc;Pc=1;Qc=$b}K2a(v);Rc=Nc;Tc=Oc;Uc=Pc;Vc=Qc}while(0);if((N|0)==175){_b=Hc()|0;Rc=_b;Tc=M;Uc=1;Vc=rc}j0a(ac);Wc=Rc;Xc=Tc;Yc=Uc;Zc=Vc}while(0);if((N|0)==174){Wc=qc;Xc=pc;Yc=1;Zc=bc}K2a(u);_c=Wc;$c=Xc;ad=Yc;bd=Zc}}else{oc=ec;N=172}if((N|0)==172){ac=Hc()|0;_c=ac;$c=M;ad=1;bd=oc}j0a(H);cd=_c;dd=$c;ed=ad;fd=bd}while(0);if((N|0)==171){cd=nc;dd=mc;ed=1;fd=ec}K2a(t);gd=fd;hd=cd;id=dd;jd=ed}}else{lc=q;N=169}if((N|0)==169){H=Hc()|0;gd=lc;hd=H;id=M;jd=1}j0a(G);kd=gd;ld=hd;md=id;nd=jd}while(0);if((N|0)==168){kd=q;ld=kc;md=jc;nd=1}K2a(s);fc=nd;gc=kd;hc=md;ic=ld}if((q|0)==(gc|0)|fc^1){cc=ic;dc=hc;Sc(cc|0)}else od=gc;do{gc=k[od+-8>>2]|0;od=od+-24|0;if(gc)j0a(gc);K2a(od)}while((od|0)!=(q|0));cc=ic;dc=hc;Sc(cc|0);break}case 2:{x=0;fb(140,z|0,272357,6);hc=x;x=0;if(hc&1){hc=Hc()|0;pd=hc;qd=M;rd=y;sd=1}else{x=0;hc=Ba(563,44)|0;ic=x;x=0;do if(ic&1){q=Hc()|0;td=M;ud=q;N=228}else{k[hc+4>>2]=0;k[hc+8>>2]=0;k[hc>>2]=31848;q=hc+12|0;x=0;fb(247,q|0,0,2);od=x;x=0;if(od&1){od=Hc()|0;gc=M;c0a(hc);OBa(hc);td=gc;ud=od;N=228;break}od=q;i0a(hc);k[hc+16>>2]=od;q=hc+20|0;gc=k[q>>2]|0;k[q>>2]=hc;if(gc)k0a(gc);x=0;xa(604,y|0,z|0);gc=x;x=0;if(!(gc&1)){k[y+12>>2]=od;k[y+16>>2]=hc;h0a(hc);k[y+20>>2]=0;od=y+24|0;x=0;fb(140,A|0,272368,8);gc=x;x=0;if(gc&1){vd=od;N=229}else{x=0;gc=Ba(563,44)|0;q=x;x=0;do if(q&1){fc=Hc()|0;wd=M;xd=fc;N=231}else{k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc>>2]=31848;fc=gc+12|0;x=0;fb(247,fc|0,256,0);ld=x;x=0;if(ld&1){ld=Hc()|0;md=M;c0a(gc);OBa(gc);wd=md;xd=ld;N=231;break}ld=fc;i0a(gc);k[gc+16>>2]=ld;fc=gc+20|0;md=k[fc>>2]|0;k[fc>>2]=gc;if(md)k0a(md);x=0;xa(604,od|0,A|0);md=x;x=0;if(md&1){md=Hc()|0;yd=1;zd=md;Ad=M}else{k[y+36>>2]=ld;k[y+40>>2]=gc;h0a(gc);k[y+44>>2]=0;k[a>>2]=0;ld=a+4|0;k[ld>>2]=0;k[a+8>>2]=0;x=0;md=Ba(563,48)|0;fc=x;x=0;if(fc&1){fc=Hc()|0;Bd=fc;Cd=M}else{k[ld>>2]=md;k[a>>2]=md;k[a+8>>2]=md+48;x=0;xa(604,md|0,y|0);fc=x;x=0;do if(fc&1){kd=Hc()|0;Dd=kd;Ed=M}else{k[md+12>>2]=k[y+12>>2];kd=k[y+16>>2]|0;k[md+16>>2]=kd;if(kd)h0a(kd);k[md+20>>2]=k[y+20>>2];kd=md+24|0;k[ld>>2]=kd;x=0;xa(604,kd|0,y+24|0);kd=x;x=0;if(kd&1){kd=Hc()|0;nd=M;s=k[md+16>>2]|0;if(s)j0a(s);K2a(md);k[ld>>2]=md;Dd=kd;Ed=nd;break}k[md+36>>2]=k[y+36>>2];nd=k[y+40>>2]|0;k[md+40>>2]=nd;if(nd)h0a(nd);k[md+44>>2]=k[y+44>>2];k[ld>>2]=md+48;nd=k[y+40>>2]|0;if(nd)j0a(nd);K2a(y+24|0);nd=k[y+16>>2]|0;if(nd)j0a(nd);K2a(y);j0a(gc);K2a(A);j0a(hc);K2a(z);r=c;return}while(0);OBa(md);Bd=Dd;Cd=Ed}ld=k[y+40>>2]|0;if(ld)j0a(ld);K2a(y+24|0);ld=k[y+16>>2]|0;if(ld)j0a(ld);K2a(y);yd=0;zd=Bd;Ad=Cd}j0a(gc);Fd=yd;Gd=zd;Hd=Ad}while(0);if((N|0)==231){Fd=1;Gd=xd;Hd=wd}K2a(A);Id=od;Jd=Fd;Kd=Gd;Ld=Hd}}else{vd=y;N=229}if((N|0)==229){gc=Hc()|0;Id=vd;Jd=1;Kd=gc;Ld=M}j0a(hc);Md=Id;Nd=Jd;Od=Kd;Pd=Ld}while(0);if((N|0)==228){Md=y;Nd=1;Od=ud;Pd=td}K2a(z);pd=Od;qd=Pd;rd=Md;sd=Nd}if((y|0)==(rd|0)|sd^1){cc=pd;dc=qd;Sc(cc|0)}else Qd=rd;do{rd=k[Qd+-8>>2]|0;Qd=Qd+-24|0;if(rd)j0a(rd);K2a(Qd)}while((Qd|0)!=(y|0));cc=pd;dc=qd;Sc(cc|0);break}default:{qd=B;pd=qd+36|0;do{k[qd>>2]=0;qd=qd+4|0}while((qd|0)<(pd|0));qd=B+20|0;pd=B+24|0;k[pd>>2]=0;k[B+28>>2]=0;k[B+32>>2]=0;k[B+36>>2]=-1;y=B+4|0;Qd=y+-4|0;rd=y+16|0;sd=B+8|0;k[sd>>2]=0;k[sd+4>>2]=0;k[sd+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[B+4>>2]=20924;k[B>>2]=20888;k[qd>>2]=20948;x=0;fb(140,D|0,254526,22);d=x;x=0;if(d&1){d=Hc()|0;Rd=M;Sd=d}else{k[C>>2]=21048;d=C+4|0;x=0;xa(604,d|0,D|0);Nd=x;x=0;if(Nd&1){Nd=Hc()|0;Td=Nd;Ud=M}else{x=0;Nd=Ta(494,B|0,C|0)|0;B=x;x=0;if(!(B&1)){x=0;nb(87,Nd|0,254549,250928,2329);x=0}Nd=Hc()|0;B=M;k[C>>2]=21048;K2a(d);Td=Nd;Ud=B}K2a(D);Rd=Ud;Sd=Td}k[y>>2]=20980;k[Qd>>2]=21008;k[rd>>2]=21032;K2a(sd);k[qd>>2]=20796;qd=k[pd>>2]|0;if(qd){x=0;sd=Ba(k[(k[qd>>2]|0)+16>>2]|0,qd|0)|0;qd=x;x=0;if(qd&1){qd=Hc(0)|0;Fg(qd)}if(sd)k[pd>>2]=0}cc=Sd;dc=Rd;Sc(cc|0)}}}function Naa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+96|0;d=c+72|0;e=c+32|0;f=c+16|0;g=c;switch(k[b+24>>2]|0){case 0:{q2a(a,254668,5);r=c;return}case 1:{q2a(a,254674,3);r=c;return}case 2:{q2a(a,254678,2);r=c;return}default:{c=e;a=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(a|0));c=e+20|0;a=e+24|0;k[a>>2]=0;k[e+28>>2]=0;k[e+32>>2]=0;k[e+36>>2]=-1;b=e+4|0;h=b+-4|0;i=b+16|0;j=e+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[e+4>>2]=20924;k[e>>2]=20888;k[c>>2]=20948;x=0;fb(140,g|0,254526,22);d=x;x=0;if(d&1){d=Hc()|0;l=M;m=d}else{k[f>>2]=21048;d=f+4|0;x=0;xa(604,d|0,g|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n}else{x=0;n=Ta(494,e|0,f|0)|0;e=x;x=0;if(!(e&1)){x=0;nb(87,n|0,254681,250928,2344);x=0}n=Hc()|0;e=M;k[f>>2]=21048;K2a(d);o=e;p=n}K2a(g);l=o;m=p}k[b>>2]=20980;k[h>>2]=21008;k[i>>2]=21032;K2a(j);k[c>>2]=20796;c=k[a>>2]|0;if(!c)Sc(m|0);x=0;j=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!j)Sc(m|0);k[a>>2]=0;Sc(m|0)}}}function Oaa(){k[9891]=0;k[9892]=0;k[9893]=0;return}function Paa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;x=0;fb(184,d|0,b|0,c+16|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[g>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}b=(i[a+12>>0]|0)!=0;g=j[f>>1]|0;f=(g&65535)>>>8&255;if(b^(g&255)<<24>>24!=0)h=b?-1:1;else{g=k[a+8>>2]|0;l=k[e>>2]|0;a:do if((g|0)==(l|0)){e=(i[a+13>>0]|0)==0?k[a+4>>2]|0:a;m=f<<24>>24==0?k[d+4>>2]|0:d;n=g;while(1){n=n+-1|0;if((n|0)<=-1){o=0;break a}p=k[e+(n<<2)>>2]|0;q=k[m+(n<<2)>>2]|0;if((p|0)!=(q|0)){s=p;t=q;break}}o=s>>>0>t>>>0?1:-1}else o=g>>>0>l>>>0?1:-1;while(0);h=b?0-o|0:o}o=(h|0)<0;if(f<<24>>24){r=c;return o|0}OBa(k[d+4>>2]|0);r=c;return o|0}function Qaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;d=r;r=r+128|0;e=d+108|0;f=d+96|0;g=d+84|0;h=d+72|0;j=d+60|0;l=d+48|0;m=d+36|0;n=d+24|0;o=d+12|0;p=d;q=k[b>>2]|0;q2a(e,329672,0);x=0;pa(57,(q|0)<141|0,e|0,303,293207,293255);s=x;x=0;if(s&1){s=Hc()|0;K2a(e);Sc(s|0)}K2a(e);e=k[46308+(q<<2)>>2]|0;q2a(f,e,RLa(e)|0);do if(!(i[c>>0]|0)){e=b+4|0;if((k[e>>2]|0)==0?(k[b+8>>2]|0)==0:0)break;q=i[f>>0]|0;s=f+4|0;t=k[s>>2]|0;x=0;fb(140,g|0,256690,64);u=x;x=0;do if(!(u&1)){x=0;pa(57,((q&1)==0?(q&255)>>>1:t)>>>0>2|0,g|0,345,293207,256755);v=x;x=0;if(v&1){v=Hc()|0;w=M;K2a(g);y=w;z=v;K2a(f);Sc(z|0)}K2a(g);v=i[f>>0]|0;w=(v&1)==0?(v&255)>>>1:k[s>>2]|0;if((k[b>>2]&-2|0)!=110){x=0;pa(48,o|0,f|0,0,w+-1|0,f|0);v=x;x=0;if(v&1)break;x=0;xa(811,p|0,k[e>>2]|0);v=x;x=0;do if(v&1){A=Hc()|0;B=M;C=A}else{A=i[p>>0]|0;D=(A&1)==0;x=0;E=Fa(88,o|0,(D?p+1|0:k[p+8>>2]|0)|0,(D?(A&255)>>>1:k[p+4>>2]|0)|0)|0;A=x;x=0;if(A&1){A=Hc()|0;D=M;K2a(p);B=D;C=A;break};k[a>>2]=k[E>>2];k[a+4>>2]=k[E+4>>2];k[a+8>>2]=k[E+8>>2];k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;K2a(p);K2a(o);K2a(f);r=d;return}while(0);K2a(o);y=B;z=C;K2a(f);Sc(z|0)}x=0;pa(48,l|0,f|0,0,w+-3|0,f|0);v=x;x=0;if(!(v&1)){x=0;xa(811,m|0,k[e>>2]|0);v=x;x=0;if(v&1){v=Hc()|0;F=M;G=v}else{v=i[m>>0]|0;E=(v&1)==0;x=0;A=Fa(88,l|0,(E?m+1|0:k[m+8>>2]|0)|0,(E?(v&255)>>>1:k[m+4>>2]|0)|0)|0;v=x;x=0;if(v&1){v=Hc()|0;H=M;I=v}else{k[j>>2]=k[A>>2];k[j+4>>2]=k[A+4>>2];k[j+8>>2]=k[A+8>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;x=0;A=Ta(484,j|0,299014)|0;v=x;x=0;if(v&1){v=Hc()|0;J=M;K=v}else{k[h>>2]=k[A>>2];k[h+4>>2]=k[A+4>>2];k[h+8>>2]=k[A+8>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;x=0;xa(811,n|0,k[b+8>>2]|0);A=x;x=0;do if(A&1){v=Hc()|0;L=M;N=v}else{v=i[n>>0]|0;E=(v&1)==0;x=0;D=Fa(88,h|0,(E?n+1|0:k[n+8>>2]|0)|0,(E?(v&255)>>>1:k[n+4>>2]|0)|0)|0;v=x;x=0;if(v&1){v=Hc()|0;E=M;K2a(n);L=E;N=v;break};k[a>>2]=k[D>>2];k[a+4>>2]=k[D+4>>2];k[a+8>>2]=k[D+8>>2];k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;K2a(n);K2a(h);K2a(j);K2a(m);K2a(l);K2a(f);r=d;return}while(0);K2a(h);J=L;K=N}K2a(j);H=J;I=K}K2a(m);F=H;G=I}K2a(l);y=F;z=G;K2a(f);Sc(z|0)}}while(0);e=Hc()|0;y=M;z=e;K2a(f);Sc(z|0)}while(0);k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);r=d;return}function Raa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k[a+4>>2]=0;d=a+8|0;k[d>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;e=a+16|0;k[a+12>>2]=e;k[a+24>>2]=b;i[a+28>>0]=1;k[a>>2]=38152;k[a+32>>2]=c?2:1;x=0;c=Ba(563,40)|0;b=x;x=0;do if(b&1){f=Hc()|0;g=0;h=M;j=f}else{k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=31904;f=c+12|0;x=0;xa(752,f|0,1);l=x;x=0;if(l&1){l=Hc()|0;m=M;c0a(c);OBa(c);g=k[e>>2]|0;h=m;j=l;break}l=f;f=c;i0a(c);k[c+16>>2]=l;m=c+20|0;n=k[m>>2]|0;k[m>>2]=f;if(!n){o=a+36|0;k[o>>2]=l;p=a+40|0;k[p>>2]=f;q=a+44|0;i[q>>0]=1;r=a+48|0;k[r>>2]=0;s=a+80|0;k[s>>2]=1;return}k0a(n);o=a+36|0;k[o>>2]=l;p=a+40|0;k[p>>2]=f;q=a+44|0;i[q>>0]=1;r=a+48|0;k[r>>2]=0;s=a+80|0;k[s>>2]=1;return}while(0);k[a>>2]=20456;xh(a+12|0,g);g=k[d>>2]|0;if(!g)Sc(j|0);k0a(g);Sc(j|0)}function Saa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=KBa(72)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=39544;d=c+20|0;k[d>>2]=0;e=c+24|0;k[e>>2]=0;f=c+16|0;g=c+28|0;h=c+32|0;k[h>>2]=0;k[c+36>>2]=0;k[g>>2]=h;k[f>>2]=37812;x=0;xa(796,c+40|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;k[f>>2]=20456;xh(g,k[h>>2]|0);h=k[e>>2]|0;if(!h){c0a(c);OBa(c);Sc(b|0)}k0a(h);c0a(c);OBa(c);Sc(b|0)}else{k[a>>2]=f;k[a+4>>2]=c;i0a(c);k[d>>2]=f;f=k[e>>2]|0;k[e>>2]=c;if(!f)return;k0a(f);return}}function Taa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=KBa(48)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=39516;d=c+16|0;k[d>>2]=0;e=c+20|0;k[e>>2]=0;f=c+12|0;g=c+24|0;h=c+28|0;k[h>>2]=0;k[c+32>>2]=0;k[g>>2]=h;k[f>>2]=37364;x=0;xa(604,c+36|0,k[b+28>>2]|0);b=x;x=0;if(b&1){b=Hc()|0;k[f>>2]=20456;xh(g,k[h>>2]|0);h=k[e>>2]|0;if(!h){c0a(c);OBa(c);Sc(b|0)}k0a(h);c0a(c);OBa(c);Sc(b|0)}else{k[a>>2]=f;k[a+4>>2]=c;i0a(c);k[d>>2]=f;f=k[e>>2]|0;k[e>>2]=c;if(!f)return;k0a(f);return}}function Uaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;c=r;r=r+32|0;d=c+16|0;e=c+24|0;f=c+8|0;g=c;if(!b)h=0;else h=RLa(b)|0;j=a+13|0;l=i[j>>0]|0;do if(l<<24>>24==0?(k[a>>2]|0)==0:0){x=0;m=Ba(563,4)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}else{n=a+4|0;o=k[n>>2]|0;p=a+8|0;Dyb(m|0,o|0,k[p>>2]<<2|0)|0;OBa(o);k[p>>2]=1;k[a>>2]=1;k[n>>2]=m;q=i[j>>0]|0;break}}else s=7;while(0);if((s|0)==7){k[a+8>>2]=1;q=l}if(!(q<<24>>24))t=k[a+4>>2]|0;else t=a;k[t>>2]=0;t=a+12|0;i[t>>0]=0;if(!h){r=c;return}q=i[b>>0]|0;if(q<<24>>24==45){l=h+-1|0;m=b+1|0;if(l){u=m;v=i[m>>0]|0;w=1;y=l;s=16}}else{u=b;v=q;w=0;y=h;s=16}a:do if((s|0)==16){b:do if(v<<24>>24==48){c:do if(y>>>0>1){switch(i[u+1>>0]|0){case 88:case 120:break;default:{s=20;break c}}z=u+2|0;A=y+-2|0;B=16}else s=20;while(0);if((s|0)==20){z=u;A=y+-1|0;B=8}d:do if(A){h=(B|0)==8;switch(B|0){case 8:case 16:break;default:{C=z;break b}}q=h?3:4;h=32/(q>>>0)|0;b=i[z>>0]|0;if(b<<24>>24){l=a+4|0;m=z;n=b;b=ia(h,q)|0;e:while(1){p=m;o=n;D=0;E=0;while(1){if(E>>>0>=h>>>0){F=p;G=D;H=b;break}I=o<<24>>24;do if((o+-48&255)<10)J=I+-48|0;else{if((o+-97&255)<6){J=I+-87|0;break}if((o+-65&255)>=6)break e;J=I+-55|0}while(0);if(J>>>0>=B>>>0)break e;I=J|D<>0]|0;L=E+1|0;if(!(o<<24>>24)){N=I;O=K;P=L;s=36;break}else{p=K;D=I;E=L}}if((s|0)==36){s=0;F=O;G=N;H=ia(P,q)|0}wz(a,H,0);if(!(i[j>>0]|0))Q=k[l>>2]|0;else Q=a;k[Q>>2]=k[Q>>2]|G;n=i[F>>0]|0;if(!(n<<24>>24))break d;else{m=F;b=H}}H0a(d,263919);x=0;nb(109,d|0,255962,264399,1360);x=0;b=Hc()|0;m=M;qCa(d);R=m;S=b;Sc(S|0)}}while(0);if(w)break a;r=c;return}else C=u;while(0);k[e>>2]=1e9;f:do if(i[C>>0]|0){b=C;g:while(1){k[f>>2]=0;m=i[b>>0]|0;if((m+-48&255)>=10)break;n=(m<<24>>24)+-48|0;k[f>>2]=n;m=b+1|0;l=i[m>>0]|0;do if(l<<24>>24){if((l+-48&255)>=10)break g;q=(l<<24>>24)+-48+(n*10|0)|0;k[f>>2]=q;h=b+2|0;E=i[h>>0]|0;if(E<<24>>24){if((E+-48&255)>=10)break g;D=(E<<24>>24)+-48+(q*10|0)|0;k[f>>2]=D;q=b+3|0;E=i[q>>0]|0;if(E<<24>>24){if((E+-48&255)>=10)break g;p=(E<<24>>24)+-48+(D*10|0)|0;k[f>>2]=p;D=b+4|0;E=i[D>>0]|0;if(E<<24>>24){if((E+-48&255)>=10)break g;o=(E<<24>>24)+-48+(p*10|0)|0;k[f>>2]=o;p=b+5|0;E=i[p>>0]|0;if(!(E<<24>>24)){T=p;U=4;s=45;break}if((E+-48&255)>=10)break g;p=(E<<24>>24)+-48+(o*10|0)|0;k[f>>2]=p;o=b+6|0;E=i[o>>0]|0;if(!(E<<24>>24)){T=o;U=5;s=45;break}if((E+-48&255)>=10)break g;o=(E<<24>>24)+-48+(p*10|0)|0;k[f>>2]=o;p=b+7|0;E=i[p>>0]|0;if(!(E<<24>>24)){T=p;U=6;s=45;break}if((E+-48&255)>=10)break g;p=(E<<24>>24)+-48+(o*10|0)|0;k[f>>2]=p;o=b+8|0;E=i[o>>0]|0;if(!(E<<24>>24)){T=o;U=7;s=45;break}if((E+-48&255)>=10)break g;k[f>>2]=(E<<24>>24)+-48+(p*10|0);p=b+9|0;if(!(i[p>>0]|0)){T=p;U=8;s=45}else V=p}else{T=D;U=3;s=45}}else{T=q;U=2;s=45}}else{T=h;U=1;s=45}}else{T=m;U=0;s=45}while(0);if((s|0)==45){s=0;k[e>>2]=k[39472+(U<<2)>>2];V=T}bC(a,a,e);if(!(i[t>>0]|0))CB(a,a,f);else BB(a,a,f);if(!(i[V>>0]|0))break f;else b=V}H0a(g,264450);x=0;nb(109,g|0,255962,264399,1389);x=0;b=Hc()|0;m=M;qCa(g);R=m;S=b;Sc(S|0)}while(0);if(!w){r=c;return}}while(0);w=i[t>>0]|0;i[t>>0]=w^1;if(w<<24>>24==1){r=c;return}if((k[a+8>>2]|0)!=1){r=c;return}if(!(i[j>>0]|0))W=k[a+4>>2]|0;else W=a;if(k[W>>2]|0){r=c;return}i[t>>0]=0;r=c;return}function Vaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if((a|0)!=(b|0)){d=a+8|0;k[d>>2]=0;e=b+8|0;f=k[e>>2]|0;g=f>>>0>134217728?134217728:f;f=a+13|0;h=i[f>>0]|0;j=h<<24>>24==0;if(j)l=k[a>>2]|0;else l=2;if(g>>>0>l>>>0){m=l<<2;l=m>>>0>>0?g:m;m=l>>>0>134217728?134217728:l;l=KBa(m<<2)|0;if(j){j=a+4|0;OBa(k[j>>2]|0);n=j}else{i[f>>0]=0;n=a+4|0}k[d>>2]=g;k[a>>2]=m;k[n>>2]=l;o=i[f>>0]|0}else{k[d>>2]=g;o=h}if(!(o<<24>>24))p=k[a+4>>2]|0;else p=a;Dyb(p|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,k[e>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0}b=a+16|0;if((b|0)==(c|0)){gea(a);return a|0}e=a+24|0;k[e>>2]=0;p=c+8|0;o=k[p>>2]|0;h=o>>>0>134217728?134217728:o;o=a+29|0;g=i[o>>0]|0;d=g<<24>>24==0;if(d)q=k[b>>2]|0;else q=2;if(h>>>0>q>>>0){f=q<<2;q=f>>>0>>0?h:f;f=q>>>0>134217728?134217728:q;q=KBa(f<<2)|0;if(d){d=b+4|0;OBa(k[d>>2]|0);r=d}else{i[o>>0]=0;r=b+4|0}k[e>>2]=h;k[b>>2]=f;k[r>>2]=q;s=i[o>>0]|0}else{k[e>>2]=h;s=g}if(!(s<<24>>24))t=k[b+4>>2]|0;else t=b;Dyb(t|0,((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)|0,k[p>>2]<<2|0)|0;i[a+28>>0]=i[c+12>>0]|0;gea(a);return a|0}function Waa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+48|0;e=d+16|0;f=d;if((a|0)==(b|0)){k[e>>2]=0;g=e+8|0;k[g>>2]=1;h=e+12|0;i[h>>0]=0;l=e+13|0;i[l>>0]=1;x=0;nb(124,e|0,a|0,c|0,d+32|0);m=x;x=0;do if(!(m&1)){if((e|0)==(a|0))n=i[l>>0]|0;else{o=a+8|0;k[o>>2]=0;p=k[g>>2]|0;q=p>>>0>134217728?134217728:p;s=a+13|0;t=i[s>>0]|0;u=t<<24>>24==0;v=u?k[a>>2]|0:2;if(q>>>0>v>>>0){w=v<<2;v=w>>>0>>0?q:w;w=v>>>0>134217728?134217728:v;x=0;v=Ba(563,w<<2|0)|0;y=x;x=0;if(y&1)break;if(u){u=a+4|0;OBa(k[u>>2]|0);z=u;A=k[g>>2]|0}else{i[s>>0]=0;z=a+4|0;A=p}k[o>>2]=q;k[a>>2]=w;k[z>>2]=v;B=i[s>>0]|0;C=A}else{k[o>>2]=q;B=t;C=p}Dyb((B<<24>>24==0?k[a+4>>2]|0:a)|0,((i[l>>0]|0)==0?k[e+4>>2]|0:e)|0,C<<2|0)|0;p=j[h>>1]|0;i[a+12>>0]=p;n=(p&65535)>>>8&255}if(!(n<<24>>24))OBa(k[e+4>>2]|0);r=d;return}while(0);n=Hc()|0;h=M;if(i[l>>0]|0){D=n;E=h;Sc(D|0)}OBa(k[e+4>>2]|0);D=n;E=h;Sc(D|0)}if(!(k[c>>2]&1)){h=a+13|0;n=i[h>>0]|0;do if(n<<24>>24==0&(k[a>>2]|0)==0){x=0;e=Ba(563,4)|0;l=x;x=0;if(l&1){l=Hc(0)|0;Fg(l)}else{l=a+4|0;C=k[l>>2]|0;B=a+8|0;Dyb(e|0,C|0,k[B>>2]<<2|0)|0;OBa(C);k[B>>2]=1;k[a>>2]=1;k[l>>2]=e;F=i[h>>0]|0;G=e;break}}else{k[a+8>>2]=1;F=n;G=k[a+4>>2]|0}while(0);k[(F<<24>>24==0?G:a)>>2]=1;i[a+12>>0]=0;H=b+8|0}else{G=a+8|0;k[G>>2]=0;F=b+8|0;n=k[F>>2]|0;h=n>>>0>134217728?134217728:n;n=a+13|0;e=i[n>>0]|0;l=e<<24>>24==0;B=l?k[a>>2]|0:2;if(h>>>0>B>>>0){C=B<<2;B=C>>>0>>0?h:C;C=B>>>0>134217728?134217728:B;B=KBa(C<<2)|0;if(l){l=a+4|0;OBa(k[l>>2]|0);I=l}else{i[n>>0]=0;I=a+4|0}k[G>>2]=h;k[a>>2]=C;k[I>>2]=B;J=i[n>>0]|0}else{k[G>>2]=h;J=e}Dyb((J<<24>>24==0?k[a+4>>2]|0:a)|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,k[F>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0;H=F}F=k[c>>2]|0;k[f>>2]=0;c=f+8|0;k[c>>2]=0;J=f+13|0;i[J>>0]=1;e=k[H>>2]|0;H=e>>>0>134217728?134217728:e;if(H>>>0>2){h=H>>>0>8?H:8;G=KBa(h<<2)|0;i[J>>0]=0;k[c>>2]=H;k[f>>2]=h;k[f+4>>2]=G;K=G}else{k[c>>2]=H;K=f}Dyb(K|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,e<<2|0)|0;i[f+12>>0]=i[b+12>>0]|0;b=F>>>1;a:do if(b){F=b;while(1){x=0;fb(217,f|0,f|0,f|0);e=x;x=0;if(e&1)break;if((F&1|0)!=0?(x=0,fb(217,a|0,a|0,f|0),e=x,x=0,e&1):0)break;F=F>>>1;if(!F)break a}F=Hc()|0;e=M;if(i[J>>0]|0){D=F;E=e;Sc(D|0)}OBa(k[f+4>>2]|0);D=F;E=e;Sc(D|0)}while(0);if(!(i[J>>0]|0))OBa(k[f+4>>2]|0);r=d;return}function Xaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=0;f=d+13|0;i[f>>0]=1;g=k[b+8>>2]|0;h=g>>>0>134217728?134217728:g;if(h>>>0>2){j=h>>>0>8?h:8;l=KBa(j<<2)|0;i[f>>0]=0;k[e>>2]=h;k[d>>2]=j;k[d+4>>2]=l;m=l}else{k[e>>2]=h;m=d}Dyb(m|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,g<<2|0)|0;i[d+12>>0]=i[b+12>>0]|0;k[d+16>>2]=1;k[d+24>>2]=1;i[d+28>>0]=0;i[d+29>>0]=1;x=0;b=Ta(588,a|0,d|0)|0;a=x;x=0;if(a&1){a=Hc()|0;if(i[f>>0]|0)Sc(a|0);OBa(k[d+4>>2]|0);Sc(a|0)}else{if(i[f>>0]|0){r=c;return b|0}OBa(k[d+4>>2]|0);r=c;return b|0}return 0}function Yaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+112|0;d=c+96|0;e=c+102|0;f=c+101|0;g=c+92|0;h=c+100|0;l=c+48|0;m=c+32|0;n=c+16|0;o=c+72|0;p=c;q=c+64|0;k[l>>2]=0;s=l+8|0;k[s>>2]=0;t=l+13|0;i[t>>0]=1;u=k[b+8>>2]|0;v=u>>>0>134217728?134217728:u;if(v>>>0>2){w=v>>>0>8?v:8;y=KBa(w<<2)|0;i[t>>0]=0;k[s>>2]=v;k[l>>2]=w;k[l+4>>2]=y;z=y}else{k[s>>2]=v;z=l}Dyb(z|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,u<<2|0)|0;i[l+12>>0]=i[b+12>>0]|0;u=b+16|0;k[m>>2]=0;z=m+8|0;k[z>>2]=0;v=m+13|0;i[v>>0]=1;s=k[b+24>>2]|0;y=s>>>0>134217728?134217728:s;do if(y>>>0>2){w=y>>>0>8?y:8;x=0;A=Ba(563,w<<2|0)|0;B=x;x=0;if(B&1){B=Hc()|0;C=M;D=B;break}else{i[v>>0]=0;k[z>>2]=y;k[m>>2]=w;k[m+4>>2]=A;E=A;F=8;break}}else{k[z>>2]=y;E=m;F=8}while(0);if((F|0)==8){Dyb(E|0,((i[b+29>>0]|0)==0?k[u+4>>2]|0:u)|0,s<<2|0)|0;i[m+12>>0]=i[b+28>>0]|0;b=a+16|0;x=0;fb(298,n|0,b|0,m|0);s=x;x=0;if(!(s&1)){k[g>>2]=n;x=0;fb(299,b|0,g|0,h|0);h=x;x=0;if((!(h&1)?(k[o>>2]=a,k[o+4>>2]=m,k[o+8>>2]=n,k[o+12>>2]=l,k[o+16>>2]=b,x=0,fb(300,a|0,o|0,f|0),f=x,x=0,!(f&1)):0)?(x=0,fb(298,p|0,a|0,n|0),f=x,x=0,!(f&1)):0){f=n+13|0;if(!(i[f>>0]|0))OBa(k[n+4>>2]|0);o=p+8|0;h=k[o>>2]|0;k[n+8>>2]=h;g=j[p+12>>1]|0;i[n+12>>0]=g;s=(g&65535)>>>8&255;i[f>>0]=s;if(!(s<<24>>24)){s=p;g=k[s+4>>2]|0;u=n;k[u>>2]=k[s>>2];k[u+4>>2]=g;k[o>>2]=0;i[p+13>>0]=1}else Dyb(n|0,p|0,h<<2|0)|0;k[d>>2]=n;x=0;fb(299,a|0,d|0,e|0);e=x;x=0;if(!(e&1)?(k[q>>2]=m,k[q+4>>2]=n,x=0,Ta(591,b|0,q|0)|0,q=x,x=0,!(q&1)):0){if(!(i[f>>0]|0))OBa(k[n+4>>2]|0);if(!(i[v>>0]|0))OBa(k[m+4>>2]|0);if(i[t>>0]|0){r=c;return a|0}OBa(k[l+4>>2]|0);r=c;return a|0}}a=Hc()|0;c=M;if(!(i[n+13>>0]|0)){OBa(k[n+4>>2]|0);G=c;H=a}else{G=c;H=a}}else{a=Hc()|0;G=M;H=a}if(!(i[v>>0]|0)){OBa(k[m+4>>2]|0);C=G;D=H}else{C=G;D=H}}if(i[t>>0]|0)Sc(D|0);OBa(k[l+4>>2]|0);Sc(D|0);return 0}function Zaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=0;f=d+13|0;i[f>>0]=1;g=k[b+8>>2]|0;h=g>>>0>134217728?134217728:g;if(h>>>0>2){j=h>>>0>8?h:8;l=KBa(j<<2)|0;i[f>>0]=0;k[e>>2]=h;k[d>>2]=j;k[d+4>>2]=l;m=l}else{k[e>>2]=h;m=d}Dyb(m|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,g<<2|0)|0;i[d+12>>0]=i[b+12>>0]|0;k[d+16>>2]=1;k[d+24>>2]=1;i[d+28>>0]=0;i[d+29>>0]=1;x=0;b=Ta(587,a|0,d|0)|0;a=x;x=0;if(a&1){a=Hc()|0;if(i[f>>0]|0)Sc(a|0);OBa(k[d+4>>2]|0);Sc(a|0)}else{if(i[f>>0]|0){r=c;return b|0}OBa(k[d+4>>2]|0);r=c;return b|0}return 0}function _aa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;k[a>>2]=0;c=a+8|0;k[c>>2]=0;d=a+13|0;i[d>>0]=1;e=b+8|0;f=k[e>>2]|0;g=f>>>0>134217728?134217728:f;if(g>>>0>2){f=g>>>0>8?g:8;h=KBa(f<<2)|0;i[d>>0]=0;k[c>>2]=g;k[a>>2]=f;k[a+4>>2]=h;j=h}else{k[c>>2]=g;j=a}Dyb(j|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,k[e>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0;e=a+16|0;j=b+16|0;k[e>>2]=0;g=a+24|0;k[g>>2]=0;c=a+29|0;i[c>>0]=1;h=b+24|0;f=k[h>>2]|0;l=f>>>0>134217728?134217728:f;if(l>>>0<=2){k[g>>2]=l;m=e;n=b+29|0;o=i[n>>0]|0;p=o<<24>>24==0;q=j+4|0;r=k[q>>2]|0;s=p?r:j;t=k[h>>2]|0;u=t<<2;Dyb(m|0,s|0,u|0)|0;v=b+28|0;w=i[v>>0]|0;y=a+28|0;i[y>>0]=w;return}f=l>>>0>8?l:8;x=0;z=Ba(563,f<<2|0)|0;A=x;x=0;if(!(A&1)){i[c>>0]=0;k[g>>2]=l;k[e>>2]=f;k[e+4>>2]=z;m=z;n=b+29|0;o=i[n>>0]|0;p=o<<24>>24==0;q=j+4|0;r=k[q>>2]|0;s=p?r:j;t=k[h>>2]|0;u=t<<2;Dyb(m|0,s|0,u|0)|0;v=b+28|0;w=i[v>>0]|0;y=a+28|0;i[y>>0]=w;return}w=Hc()|0;if(i[d>>0]|0)Sc(w|0);OBa(k[a+4>>2]|0);Sc(w|0)}function $aa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=k[d>>2]|0;f=k[b>>2]|0;g=e-f|0;h=(g|0)/24|0;if((e|0)==(f|0))return;if(h>>>0>178956970?(x=0,va(1473,a|0),f=x,x=0,f&1):0)i=12;else i=4;do if((i|0)==4){x=0;f=Ba(563,g|0)|0;e=x;x=0;if(!(e&1)){k[c>>2]=f;k[a>>2]=f;k[a+8>>2]=f+(h*24|0);e=k[b>>2]|0;j=k[d>>2]|0;if((e|0)==(j|0))return;l=e;e=f;while(1){x=0;xa(604,e|0,l|0);f=x;x=0;if(f&1){i=11;break}k[e+12>>2]=k[l+12>>2];f=k[l+16>>2]|0;k[e+16>>2]=f;if(f)h0a(f);k[e+20>>2]=k[l+20>>2];e=(k[c>>2]|0)+24|0;k[c>>2]=e;l=l+24|0;if((l|0)==(j|0)){i=21;break}}if((i|0)==11){j=Hc()|0;m=j;n=M;break}else if((i|0)==21)return}else i=12}while(0);if((i|0)==12){i=Hc()|0;m=i;n=M}n=k[a>>2]|0;if(!n)Sc(m|0);i=k[c>>2]|0;if((i|0)==(n|0))o=n;else{d=i;do{i=d+-24|0;k[c>>2]=i;b=k[d+-8>>2]|0;if(b)j0a(b);K2a(i);d=k[c>>2]|0}while((d|0)!=(n|0));o=k[a>>2]|0}OBa(o);Sc(m|0)}function aba(a,b){a=a|0;b=b|0;if(!b)return;else{aba(a,k[b>>2]|0);aba(a,k[b+4>>2]|0);OBa(b);return}}function bba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=k[b>>2]|0;g=k[b+4>>2]|0;if((f|0)==(g|0)){r=c;return}b=a+8|0;h=f;a:while(1){f=k[h>>2]|0;do if(f){i=iDa(f,5224,5360,0)|0;k[d>>2]=i;j=i;if(i){i=k[e>>2]|0;if((i|0)==(k[b>>2]|0)){x=0;xa(812,a|0,d|0);l=x;x=0;if(l&1)break a;else break}else{k[i>>2]=j;k[e>>2]=(k[e>>2]|0)+4;break}}}else k[d>>2]=0;while(0);h=h+8|0;if((h|0)==(g|0)){m=3;break}}if((m|0)==3){r=c;return}c=Hc()|0;m=k[a>>2]|0;if(!m)Sc(c|0);a=k[e>>2]|0;if((a|0)!=(m|0))k[e>>2]=a+(~((a+-4-m|0)>>>2)<<2);OBa(m);Sc(c|0)}function cba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/24|0)+1|0;if(e>>>0>178956970){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/24|0;if(g>>>0<89478485){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/24|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=178956970;n=((k[c>>2]|0)-f|0)/24|0;o=6}if((o|0)==6){i=m;j=KBa(m*24|0)|0;l=n}n=j+(l*24|0)|0;m=n;o=j+(i*24|0)|0;k[n>>2]=k[b>>2];k[n+4>>2]=k[b+4>>2];k[n+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;i=b+12|0;k[j+(l*24|0)+12>>2]=k[i>>2];f=b+16|0;k[j+(l*24|0)+16>>2]=k[f>>2];k[i>>2]=0;k[f>>2]=0;k[j+(l*24|0)+20>>2]=k[b+20>>2];b=n+24|0;l=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(l|0)){p=m;q=l;r=l}else{f=j;j=n;n=m;while(1){m=j+-24|0;i=f;f=f+-24|0;k[m>>2]=k[f>>2];k[m+4>>2]=k[f+4>>2];k[m+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;m=i+-12|0;k[j+-12>>2]=k[m>>2];h=i+-8|0;k[j+-8>>2]=k[h>>2];k[m>>2]=0;k[h>>2]=0;k[j+-4>>2]=k[i+-4>>2];j=n+-24|0;i=j;if((f|0)==(l|0)){s=i;break}else n=i}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{r=k[d+-8>>2]|0;d=d+-24|0;if(r)j0a(r);K2a(d)}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function dba(a,b,c,d,e,f,g,h,j,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;p=r;r=r+32|0;q=p+12|0;s=p;t=KBa(100)|0;k[t+4>>2]=0;k[t+8>>2]=0;k[t>>2]=31496;x=0;xa(761,q|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;u=M;v=d;c0a(t);OBa(t);Sc(v|0)}x=0;xa(761,s|0,e|0);e=x;x=0;do if(e&1){d=Hc()|0;w=M;y=d}else{d=t+12|0;x=0;Na(42,d|0,b|0,c|0,q|0,s|0,k[f>>2]|0,(i[g>>0]|0)!=0|0,k[h>>2]|0,(i[j>>0]|0)!=0|0,(i[l>>0]|0)!=0|0,(i[m>>0]|0)!=0|0,(i[n>>0]|0)!=0|0,(i[o>>0]|0)!=0|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;B=k[s>>2]|0;if(!B){w=A;y=z;break}C=s+4|0;D=k[C>>2]|0;if((D|0)==(B|0))E=B;else{F=D;do{D=F+-12|0;k[C>>2]=D;K2a(D);F=k[C>>2]|0}while((F|0)!=(B|0));E=k[s>>2]|0}OBa(E);w=A;y=z;break}B=k[s>>2]|0;if(B){F=s+4|0;C=k[F>>2]|0;if((C|0)==(B|0))G=B;else{D=C;do{C=D+-12|0;k[F>>2]=C;K2a(C);D=k[F>>2]|0}while((D|0)!=(B|0));G=k[s>>2]|0}OBa(G)}B=k[q>>2]|0;if(B){D=q+4|0;F=k[D>>2]|0;if((F|0)==(B|0))H=B;else{z=F;do{F=z+-12|0;k[D>>2]=F;K2a(F);z=k[D>>2]|0}while((z|0)!=(B|0));H=k[q>>2]|0}OBa(H)}k[a>>2]=d;k[a+4>>2]=t;i0a(t);k[t+16>>2]=d;B=t+20|0;z=k[B>>2]|0;k[B>>2]=t;if(!z){r=p;return}k0a(z);r=p;return}while(0);p=k[q>>2]|0;if(p){a=q+4|0;H=k[a>>2]|0;if((H|0)==(p|0))I=p;else{G=H;do{H=G+-12|0;k[a>>2]=H;K2a(H);G=k[a>>2]|0}while((G|0)!=(p|0));I=k[q>>2]|0}OBa(I)}u=w;v=y;c0a(t);OBa(t);Sc(v|0)}function eba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+160|0;d=c+136|0;e=c;f=e+56|0;g=e+4|0;k[e>>2]=20356;k[f>>2]=20376;x=0;xa(582,e+56|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;mab(f);Sc(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,g|0);h=x;x=0;do if(!(h&1)){k[g>>2]=20392;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,g|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);K2a(l);obb(g);o=n;p=m;break}K2a(d);x=0;Ta(477,e|0,k[b>>2]|0)|0;m=x;x=0;if(m&1){q=Hc()|0;s=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);Sc(q|0)}x=0;xa(584,a|0,g|0);m=x;x=0;if(m&1){q=Hc()|0;s=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);Sc(q|0)}else{k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);r=c;return}}else{l=Hc()|0;o=M;p=l}while(0);i=o;j=p;mab(f);Sc(j|0)}function fba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;a:do if(!((i[a+12>>0]|0)!=0^(i[b+12>>0]|0)!=0)?(e=k[a+8>>2]|0,(e|0)==(k[b+8>>2]|0)):0){f=(i[a+13>>0]|0)==0?k[a+4>>2]|0:a;g=f+(e<<2)|0;if(e){e=f;f=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;while(1){if((k[e>>2]|0)!=(k[f>>2]|0))break a;e=e+4|0;if((e|0)==(g|0))break;else f=f+4|0}}f=a+16|0;k[d>>2]=1;k[d+8>>2]=1;i[d+12>>0]=0;i[d+13>>0]=1;if(((i[a+28>>0]|0)==0?(k[a+24>>2]|0)==1:0)?(g=(i[a+29>>0]|0)==0?k[f+4>>2]|0:f,(k[g>>2]|0)==1):0){f=g;e=d;while(1){e=e+4|0;if((f|0)==(g|0)){h=0;break}f=f+4|0;if((k[f>>2]|0)!=(k[e>>2]|0))break a}r=c;return h|0}}while(0);h=(hba(a,b)|0)^1;r=c;return h|0}function gba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;h=k[a>>2]|0;if((h|0)==(d|0)){j=0;l=1}else{k[e>>2]=0;a=h+8|0;m=k[a>>2]|0;n=m>>>0>134217728?134217728:m;if(n>>>0>2){m=n>>>0>8?n:8;o=KBa(m<<2)|0;i[g>>0]=0;k[e>>2]=n;k[d>>2]=m;k[d+4>>2]=o;p=k[d+4>>2]|0}else{k[e>>2]=n;p=d}Dyb(p|0,((i[h+13>>0]|0)==0?k[h+4>>2]|0:h)|0,k[a>>2]<<2|0)|0;a=i[h+12>>0]|0;i[f>>0]=a;j=a;l=(k[e>>2]|0)==1}i[f>>0]=j^1;if(j<<24>>24!=1&l){if(!(i[g>>0]|0))q=k[d+4>>2]|0;else q=d;if(!(k[q>>2]|0))i[f>>0]=0}x=0;f=Ta(534,d|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;if(i[g>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}else{b=f^1;if(i[g>>0]|0){r=c;return b|0}OBa(k[d+4>>2]|0);r=c;return b|0}return 0}function hba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;c=r;r=r+64|0;d=c+32|0;e=c+16|0;f=c+48|0;g=c;k[d>>2]=0;k[d+8>>2]=1;i[d+12>>0]=0;i[d+13>>0]=1;h=a+16|0;k[f>>2]=a;k[f+4>>2]=h;k[e>>2]=0;l=e+8|0;k[l>>2]=1;m=e+12|0;i[m>>0]=0;n=e+13|0;i[n>>0]=1;x=0;fb(229,e|0,f|0,c+56|0);f=x;x=0;if(f&1){f=Hc()|0;o=M;if(!(i[n>>0]|0))OBa(k[e+4>>2]|0);p=o;q=f;Sc(q|0)}k[g>>2]=0;f=g+8|0;k[f>>2]=1;o=g+12|0;i[o>>0]=0;s=g+13|0;i[s>>0]=1;t=i[a+12>>0]|0;x=0;nb(110,0,a|0,h|0,g|0);u=x;x=0;do if(u&1){v=Hc()|0;w=M;if(!(i[s>>0]|0))OBa(k[g+4>>2]|0);y=w;z=v}else{i[o>>0]=t;if(t<<24>>24)if((k[f>>2]|0)==1?(k[((i[s>>0]|0)==0?k[g+4>>2]|0:g)>>2]|0)==0:0){i[o>>0]=0;A=0}else B=11;else A=0;while(1){if((B|0)==11){B=0;A=i[o>>0]|0}v=A<<24>>24!=0;if(!v){w=k[f>>2]|0;a:do if((w|0)==1){C=(i[s>>0]|0)==0?k[g+4>>2]|0:g;D=1;while(1){D=D+-1|0;if((D|0)<=-1){E=0;break a}F=k[C+(D<<2)>>2]|0;G=k[d+(D<<2)>>2]|0;if((F|0)!=(G|0)){H=F;I=G;break}}E=H>>>0>I>>>0?1:-1}else E=w>>>0>1?1:-1;while(0);if(((v?0-E|0:E)|0)>=0)break}x=0;if(A<<24>>24!=0^(i[a+28>>0]|0)!=0){$B(g,g,h);w=x;x=0;if(w&1){B=32;break}}else{aC(g,g,h);w=x;x=0;if(w&1){B=32;break}}w=j[m>>1]|0;D=(w&65535)>>>8&255;if(!((w&255)<<24>>24)){w=D<<24>>24==0?k[e+4>>2]|0:e;C=k[w>>2]|0;if(!C){x=0;fb(222,e|0,e|0,30348);G=x;x=0;if(G&1){B=32;break}else{B=11;continue}}else{k[w>>2]=C+-1;B=11;continue}}else{C=D<<24>>24==0?k[e+4>>2]|0:e;D=k[C>>2]|0;if((D|0)==-1){x=0;fb(221,e|0,e|0,30348);w=x;x=0;if(w&1){B=32;break}else{B=11;continue}}else{k[C>>2]=D+1;B=11;continue}}}if((B|0)==32){D=Hc()|0;C=M;if(i[s>>0]|0){y=C;z=D;break}OBa(k[g+4>>2]|0);y=C;z=D;break}D=j[m>>1]|0;C=(D&255)<<24>>24!=0;w=(D&65535)>>>8&255;if(C^(i[b+12>>0]|0)!=0)J=C?-1:1;else{D=k[l>>2]|0;G=k[b+8>>2]|0;b:do if((D|0)==(G|0)){F=w<<24>>24==0?k[e+4>>2]|0:e;K=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;L=D;while(1){L=L+-1|0;if((L|0)<=-1){N=0;break b}O=k[F+(L<<2)>>2]|0;P=k[K+(L<<2)>>2]|0;if((O|0)!=(P|0)){Q=O;R=P;break}}N=Q>>>0>R>>>0?1:-1}else N=D>>>0>G>>>0?1:-1;while(0);J=C?0-N|0:N}G=(J|0)<0;if(!(i[s>>0]|0)){OBa(k[g+4>>2]|0);S=i[n>>0]|0}else S=w;if(S<<24>>24){r=c;return G|0}OBa(k[e+4>>2]|0);r=c;return G|0}while(0);if(i[n>>0]|0){p=y;q=z;Sc(q|0)}OBa(k[e+4>>2]|0);p=y;q=z;Sc(q|0);return 0}function iba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;c=r;r=r+80|0;d=c+64|0;e=c+48|0;f=c+32|0;g=c+16|0;h=c;k[d>>2]=0;l=d+8|0;k[l>>2]=0;m=d+13|0;i[m>>0]=1;n=b+8|0;o=k[n>>2]|0;p=o>>>0>134217728?134217728:o;if(p>>>0>2){q=p>>>0>8?p:8;s=KBa(q<<2)|0;i[m>>0]=0;k[l>>2]=p;k[d>>2]=q;k[d+4>>2]=s;t=s}else{k[l>>2]=p;t=d}p=b+13|0;s=b+4|0;Dyb(t|0,((i[p>>0]|0)==0?k[s>>2]|0:b)|0,o<<2|0)|0;o=b+12|0;t=i[o>>0]|0;i[d+12>>0]=t;k[e>>2]=0;k[e+8>>2]=1;i[e+12>>0]=0;i[e+13>>0]=1;a:do if(!(t<<24>>24)){q=k[l>>2]|0;if((q|0)!=1){u=q>>>0>1?1:-1;break}q=(i[m>>0]|0)==0?k[d+4>>2]|0:d;v=1;while(1){v=v+-1|0;if((v|0)<=-1){u=0;break a}w=k[q+(v<<2)>>2]|0;y=k[e+(v<<2)>>2]|0;if((w|0)!=(y|0)){z=w;A=y;break}}u=z>>>0>A>>>0?1:-1}else u=-1;while(0);if(!(i[m>>0]|0))OBa(k[d+4>>2]|0);if((u|0)>-1){_aa(a,b);r=c;return}k[g>>2]=0;u=g+8|0;k[u>>2]=0;d=g+13|0;i[d>>0]=1;m=k[n>>2]|0;n=m>>>0>134217728?134217728:m;if(n>>>0>2){A=n>>>0>8?n:8;z=KBa(A<<2)|0;i[d>>0]=0;k[u>>2]=n;k[g>>2]=A;k[g+4>>2]=z;B=z}else{k[u>>2]=n;B=g}Dyb(B|0,((i[p>>0]|0)==0?k[s>>2]|0:b)|0,m<<2|0)|0;m=g+12|0;i[m>>0]=i[o>>0]|0;k[f>>2]=0;o=f+8|0;s=f+12|0;i[s>>0]=0;p=f+13|0;i[p>>0]=1;k[o>>2]=0;B=k[u>>2]|0;u=B>>>0>134217728?134217728:B;do if(u>>>0>2){n=u>>>0>8?u:8;x=0;z=Ba(563,n<<2|0)|0;A=x;x=0;if(A&1){A=Hc()|0;C=M;D=A;E=i[d>>0]|0;break}else{i[p>>0]=0;k[o>>2]=u;k[f>>2]=n;k[f+4>>2]=z;F=z;G=22;break}}else{k[o>>2]=u;F=f;G=22}while(0);if((G|0)==22){u=g+4|0;Dyb(F|0,((i[d>>0]|0)==0?k[u>>2]|0:g)|0,B<<2|0)|0;B=j[m>>1]|0;m=B&255;i[s>>0]=m^1;d=(B&65535)>>>8&255;if(m<<24>>24!=1&(k[o>>2]|0)==1){if(!(i[p>>0]|0))H=k[f+4>>2]|0;else H=f;if(!(k[H>>2]|0))i[s>>0]=0}s=b+16|0;k[h>>2]=0;H=h+8|0;k[H>>2]=0;o=h+13|0;i[o>>0]=1;m=k[b+24>>2]|0;B=m>>>0>134217728?134217728:m;do if(B>>>0>2){F=B>>>0>8?B:8;x=0;z=Ba(563,F<<2|0)|0;n=x;x=0;if(n&1){n=Hc()|0;I=M;J=n;break}else{i[o>>0]=0;k[H>>2]=B;k[h>>2]=F;k[h+4>>2]=z;K=z;G=31;break}}else{k[H>>2]=B;K=h;G=31}while(0);do if((G|0)==31){Dyb(K|0,((i[b+29>>0]|0)==0?k[s+4>>2]|0:s)|0,m<<2|0)|0;i[h+12>>0]=i[b+28>>0]|0;x=0;fb(287,a|0,f|0,h|0);B=x;x=0;if(B&1){B=Hc()|0;H=M;if(i[o>>0]|0){I=H;J=B;break}OBa(k[h+4>>2]|0);I=H;J=B;break}if(!(i[o>>0]|0))OBa(k[h+4>>2]|0);if(!(i[p>>0]|0))OBa(k[f+4>>2]|0);if(d<<24>>24){r=c;return}OBa(k[u>>2]|0);r=c;return}while(0);if(!(i[p>>0]|0)){OBa(k[f+4>>2]|0);C=I;D=J;E=d}else{C=I;D=J;E=d}}if(E<<24>>24)Sc(D|0);OBa(k[g+4>>2]|0);Sc(D|0)}function jba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;k[a>>2]=0;d=a+8|0;k[d>>2]=0;e=a+13|0;i[e>>0]=1;f=b+8|0;g=k[f>>2]|0;h=g>>>0>134217728?134217728:g;if(h>>>0>2){g=h>>>0>8?h:8;j=KBa(g<<2)|0;i[e>>0]=0;k[d>>2]=h;k[a>>2]=g;k[a+4>>2]=j;l=j}else{k[d>>2]=h;l=a}Dyb(l|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,k[f>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0;b=a+16|0;k[b>>2]=0;f=a+24|0;k[f>>2]=0;l=a+29|0;i[l>>0]=1;h=c+8|0;d=k[h>>2]|0;j=d>>>0>134217728?134217728:d;do if(j>>>0>2){d=j>>>0>8?j:8;x=0;g=Ba(563,d<<2|0)|0;m=x;x=0;if(m&1){m=Hc()|0;n=M;o=m;break}else{i[l>>0]=0;k[f>>2]=j;k[b>>2]=d;k[b+4>>2]=g;p=g;q=8;break}}else{k[f>>2]=j;p=b;q=8}while(0);if((q|0)==8){Dyb(p|0,((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)|0,k[h>>2]<<2|0)|0;i[a+28>>0]=i[c+12>>0]|0;x=0;va(1503,a|0);c=x;x=0;if(!(c&1))return;c=Hc()|0;h=M;if(!(i[l>>0]|0)){OBa(k[b+4>>2]|0);n=h;o=c}else{n=h;o=c}}if(i[e>>0]|0)Sc(o|0);OBa(k[a+4>>2]|0);Sc(o|0)}function kba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+32|0;d=c+12|0;e=c+8|0;f=c;g=b;h=k[g+4>>2]|0;j=f;k[j>>2]=k[g>>2];k[j+4>>2]=h;rz(a,f,c+16|0);f=k[k[b+8>>2]>>2]|0;if(!f){r=c;return}if((f|0)<0){k[d>>2]=0-f;if(!(i[a+12>>0]|0)){CB(a,a,d);r=c;return}else{BB(a,a,d);r=c;return}}else{k[e>>2]=f;if(!(i[a+12>>0]|0)){BB(a,a,e);r=c;return}else{CB(a,a,e);r=c;return}}}function lba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0;c=r;r=r+192|0;d=c+179|0;e=c+178|0;f=c+177|0;g=c+176|0;h=c+128|0;l=c+64|0;m=c+168|0;n=c;o=c+160|0;p=c+152|0;q=c+144|0;k[h>>2]=0;k[h+8>>2]=1;i[h+12>>0]=0;i[h+13>>0]=1;k[l>>2]=0;s=l+8|0;k[s>>2]=0;t=l+13|0;i[t>>0]=1;u=k[a+8>>2]|0;v=u>>>0>134217728?134217728:u;do if(v>>>0>2){w=v>>>0>8?v:8;x=0;y=Ba(563,w<<2|0)|0;z=x;x=0;if(!(z&1)){i[t>>0]=0;k[s>>2]=v;k[l>>2]=w;k[l+4>>2]=y;A=y;break}y=Hc()|0;B=M;C=y;Sc(C|0)}else{k[s>>2]=v;A=l}while(0);Dyb(A|0,((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)|0,u<<2|0)|0;u=a+12|0;A=l+12|0;i[A>>0]=i[u>>0]|0;v=l+16|0;y=a+16|0;k[v>>2]=0;w=l+24|0;k[w>>2]=0;z=l+29|0;i[z>>0]=1;D=k[a+24>>2]|0;E=D>>>0>134217728?134217728:D;do if(E>>>0>2){F=E>>>0>8?E:8;x=0;G=Ba(563,F<<2|0)|0;H=x;x=0;if(H&1){H=Hc()|0;I=M;J=H;break}else{i[z>>0]=0;k[w>>2]=E;k[v>>2]=F;k[v+4>>2]=G;K=G;L=9;break}}else{k[w>>2]=E;K=v;L=9}while(0);if((L|0)==9){Dyb(K|0,((i[a+29>>0]|0)==0?k[y+4>>2]|0:y)|0,D<<2|0)|0;D=l+28|0;i[D>>0]=i[a+28>>0]|0;K=l+32|0;k[m>>2]=a;k[m+4>>2]=y;k[K>>2]=0;E=l+40|0;k[E>>2]=1;G=l+44|0;i[G>>0]=0;F=l+45|0;i[F>>0]=1;x=0;fb(229,K|0,m|0,g|0);g=x;x=0;do if(g&1){m=Hc()|0;H=M;if(!(i[F>>0]|0))OBa(k[K+4>>2]|0);N=H;O=m}else{m=l+48|0;k[m>>2]=0;H=l+56|0;k[H>>2]=1;P=l+60|0;i[P>>0]=0;Q=l+61|0;i[Q>>0]=1;R=i[u>>0]|0;x=0;nb(110,0,a|0,y|0,m|0);S=x;x=0;if(S&1){S=Hc()|0;T=M;if(!(i[Q>>0]|0))OBa(k[m+4>>2]|0);if(i[F>>0]|0){N=T;O=S;break}OBa(k[K+4>>2]|0);N=T;O=S;break}i[P>>0]=R;if(R<<24>>24!=0&(k[H>>2]|0)==1?(k[((i[Q>>0]|0)==0?k[m+4>>2]|0:m)>>2]|0)==0:0)i[P>>0]=0;k[n>>2]=0;R=n+8|0;k[R>>2]=0;S=n+13|0;i[S>>0]=1;T=k[b+8>>2]|0;U=T>>>0>134217728?134217728:T;do if(U>>>0>2){V=U>>>0>8?U:8;x=0;W=Ba(563,V<<2|0)|0;X=x;x=0;if(X&1){X=Hc()|0;Y=M;Z=X;break}else{i[S>>0]=0;k[R>>2]=U;k[n>>2]=V;k[n+4>>2]=W;_=W;L=22;break}}else{k[R>>2]=U;_=n;L=22}while(0);a:do if((L|0)==22){Dyb(_|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,T<<2|0)|0;U=b+12|0;W=n+12|0;i[W>>0]=i[U>>0]|0;V=n+16|0;X=b+16|0;k[V>>2]=0;$=n+24|0;k[$>>2]=0;aa=n+29|0;i[aa>>0]=1;ba=k[b+24>>2]|0;ca=ba>>>0>134217728?134217728:ba;do if(ca>>>0>2){da=ca>>>0>8?ca:8;x=0;ea=Ba(563,da<<2|0)|0;fa=x;x=0;if(fa&1){fa=Hc()|0;ga=M;ha=fa;break}else{i[aa>>0]=0;k[$>>2]=ca;k[V>>2]=da;k[V+4>>2]=ea;ia=ea;L=26;break}}else{k[$>>2]=ca;ia=V;L=26}while(0);if((L|0)==26){Dyb(ia|0,((i[b+29>>0]|0)==0?k[X+4>>2]|0:X)|0,ba<<2|0)|0;ca=n+28|0;i[ca>>0]=i[b+28>>0]|0;ea=n+32|0;k[o>>2]=b;k[o+4>>2]=X;k[ea>>2]=0;da=n+40|0;k[da>>2]=1;fa=n+44|0;i[fa>>0]=0;ja=n+45|0;i[ja>>0]=1;x=0;fb(229,ea|0,o|0,f|0);ka=x;x=0;do if(ka&1){la=Hc()|0;ma=M;if(!(i[ja>>0]|0))OBa(k[ea+4>>2]|0);na=ma;oa=la}else{la=n+48|0;k[la>>2]=0;ma=n+56|0;k[ma>>2]=1;pa=n+60|0;i[pa>>0]=0;qa=n+61|0;i[qa>>0]=1;ra=i[U>>0]|0;x=0;nb(110,0,b|0,X|0,la|0);sa=x;x=0;if(sa&1){sa=Hc()|0;ta=M;if(!(i[qa>>0]|0))OBa(k[la+4>>2]|0);if(i[ja>>0]|0){na=ta;oa=sa;break}OBa(k[ea+4>>2]|0);na=ta;oa=sa;break}i[pa>>0]=ra;if(ra<<24>>24!=0&(k[ma>>2]|0)==1?(k[((i[qa>>0]|0)==0?k[la+4>>2]|0:la)>>2]|0)==0:0)i[pa>>0]=0;ra=K+4|0;sa=m+4|0;b:while(1){ta=j[P>>1]|0;ua=(ta&255)<<24>>24!=0;do if(!ua){va=k[H>>2]|0;if((va|0)!=1)if(va>>>0>1){L=37;break b}else break;va=(ta&65535)<256?k[sa>>2]|0:m;wa=1;while(1){wa=wa+-1|0;if((wa|0)<=-1){L=37;break b}xa=k[va+(wa<<2)>>2]|0;ya=k[h+(wa<<2)>>2]|0;if((xa|0)!=(ya|0)){za=xa;Aa=ya;break}}if(za>>>0>Aa>>>0){L=37;break b}}while(0);x=0;if(ua^(i[D>>0]|0)!=0){$B(m,m,v);ta=x;x=0;if(ta&1){L=74;break}}else{aC(m,m,v);ta=x;x=0;if(ta&1){L=74;break}}ta=j[G>>1]|0;wa=(ta&65535)>>>8&255;if(!((ta&255)<<24>>24)){ta=wa<<24>>24==0?k[ra>>2]|0:K;va=k[ta>>2]|0;if(!va){x=0;fb(222,K|0,K|0,30348);ya=x;x=0;if(ya&1){L=74;break}else continue}else{k[ta>>2]=va+-1;continue}}else{va=wa<<24>>24==0?k[ra>>2]|0:K;wa=k[va>>2]|0;if((wa|0)==-1){x=0;fb(221,K|0,K|0,30348);ta=x;x=0;if(ta&1){L=74;break}else continue}else{k[va>>2]=wa+1;continue}}}c:do if((L|0)==37){wa=ea+4|0;va=la+4|0;d:while(1){ta=j[pa>>1]|0;ya=ta&255;xa=ya<<24>>24!=0;do if(!xa){Ca=k[ma>>2]|0;if((Ca|0)!=1)if(Ca>>>0>1){Da=ya;break d}else break;Ca=(ta&65535)<256?k[va>>2]|0:la;Ea=1;while(1){Ea=Ea+-1|0;if((Ea|0)<=-1){Da=ya;break d}Fa=k[Ca+(Ea<<2)>>2]|0;Ga=k[h+(Ea<<2)>>2]|0;if((Fa|0)!=(Ga|0)){Ha=Fa;Ia=Ga;break}}if(Ha>>>0>Ia>>>0){Da=ya;break d}}while(0);x=0;if(xa^(i[ca>>0]|0)!=0){$B(la,la,V);ya=x;x=0;if(ya&1){L=73;break}}else{aC(la,la,V);ya=x;x=0;if(ya&1){L=73;break}}ya=j[fa>>1]|0;ta=(ya&65535)>>>8&255;if(!((ya&255)<<24>>24)){ya=ta<<24>>24==0?k[wa>>2]|0:ea;Ea=k[ya>>2]|0;if(!Ea){x=0;fb(222,ea|0,ea|0,30348);Ca=x;x=0;if(Ca&1){L=73;break}else continue}else{k[ya>>2]=Ea+-1;continue}}else{Ea=ta<<24>>24==0?k[wa>>2]|0:ea;ta=k[Ea>>2]|0;if((ta|0)==-1){x=0;fb(221,ea|0,ea|0,30348);ya=x;x=0;if(ya&1){L=73;break}else continue}else{k[Ea>>2]=ta+1;continue}}}if((L|0)==73){ua=Hc()|0;Ja=ua;Ka=M;break}ua=j[G>>1]|0;ta=ua&255;Ea=j[fa>>1]|0;ya=Ea&255;e:do if(ta<<24>>24!=0^ya<<24>>24!=0){Ca=ta<<24>>24!=0;if(Ca^ya<<24>>24!=0){La=Ca;L=120}else{Ma=Ca;L=121}}else{Ca=l+4|0;Ga=v+4|0;Fa=p+4|0;Na=n+4|0;Oa=V+4|0;Pa=q+4|0;Qa=(ua&65535)>>>8&255;Ra=(Ea&65535)>>>8&255;Sa=Da;Ta=ya;Ua=ta;Va=0;f:while(1){Wa=k[E>>2]|0;if((Wa|0)!=(k[da>>2]|0)){Xa=Ua;Ya=Ta;Za=Va;L=108;break}_a=Qa<<24>>24==0?k[ra>>2]|0:K;$a=_a+(Wa<<2)|0;if(Wa){Wa=_a;_a=Ra<<24>>24==0?k[wa>>2]|0:ea;while(1){if((k[Wa>>2]|0)!=(k[_a>>2]|0)){Xa=Ua;Ya=Ta;Za=Va;L=108;break f}Wa=Wa+4|0;if((Wa|0)==($a|0))break;else _a=_a+4|0}}_a=Va^1;$a=j[P>>1]|0;Wa=($a&255)<<24>>24!=0;ab=($a&65535)>>>8&255;if((k[H>>2]|0)==1&(Wa^1)?(k[(ab<<24>>24==0?k[sa>>2]|0:m)>>2]|0)==(k[h>>2]|0):0){bb=Sa;cb=Wa;db=ab;eb=Va;L=188;break}if(Sa<<24>>24==0&(k[ma>>2]|0)==1?(k[((i[qa>>0]|0)==0?k[va>>2]|0:la)>>2]|0)==(k[h>>2]|0):0){bb=Sa;cb=Wa;db=ab;eb=Va;L=188;break}k[s>>2]=0;ab=k[w>>2]|0;Wa=ab>>>0>134217728?134217728:ab;ab=i[t>>0]|0;$a=ab<<24>>24==0;if($a)gb=k[l>>2]|0;else gb=2;if(Wa>>>0>gb>>>0){hb=gb<<2;ib=hb>>>0>>0?Wa:hb;hb=ib>>>0>134217728?134217728:ib;x=0;ib=Ba(563,hb<<2|0)|0;jb=x;x=0;if(jb&1){L=72;break}if($a){OBa(k[Ca>>2]|0);kb=i[t>>0]|0}else{i[t>>0]=0;kb=0}k[s>>2]=Wa;k[l>>2]=hb;k[Ca>>2]=ib;lb=kb}else{k[s>>2]=Wa;lb=ab}if(!(lb<<24>>24))mb=k[Ca>>2]|0;else mb=l;Dyb(mb|0,((i[z>>0]|0)==0?k[Ga>>2]|0:v)|0,k[w>>2]<<2|0)|0;ab=j[D>>1]|0;i[A>>0]=ab;k[w>>2]=0;Wa=k[H>>2]|0;ib=Wa>>>0>134217728?134217728:Wa;Wa=(ab&65535)>>>8&255;ab=Wa<<24>>24==0;if(ab)ob=k[v>>2]|0;else ob=2;if(ib>>>0>ob>>>0){hb=ob<<2;$a=hb>>>0>>0?ib:hb;hb=$a>>>0>134217728?134217728:$a;x=0;$a=Ba(563,hb<<2|0)|0;jb=x;x=0;if(jb&1){L=72;break}if(ab){OBa(k[Ga>>2]|0);pb=i[z>>0]|0}else{i[z>>0]=0;pb=0}k[w>>2]=ib;k[v>>2]=hb;k[Ga>>2]=$a;qb=pb}else{k[w>>2]=ib;qb=Wa}if(!(qb<<24>>24))rb=k[Ga>>2]|0;else rb=v;Dyb(rb|0,((i[Q>>0]|0)==0?k[sa>>2]|0:m)|0,k[H>>2]<<2|0)|0;i[D>>0]=i[P>>0]|0;k[p>>2]=l;k[Fa>>2]=v;x=0;fb(229,K|0,p|0,e|0);Wa=x;x=0;if(Wa&1){L=72;break}Wa=i[A>>0]|0;x=0;nb(110,0,l|0,v|0,m|0);ib=x;x=0;if(ib&1){L=72;break}i[P>>0]=Wa;do if(Wa<<24>>24!=0&(k[H>>2]|0)==1){if(k[((i[Q>>0]|0)==0?k[sa>>2]|0:m)>>2]|0)break;i[P>>0]=0}while(0);k[R>>2]=0;Wa=k[$>>2]|0;ib=Wa>>>0>134217728?134217728:Wa;Wa=i[S>>0]|0;$a=Wa<<24>>24==0;if($a)sb=k[n>>2]|0;else sb=2;if(ib>>>0>sb>>>0){hb=sb<<2;ab=hb>>>0>>0?ib:hb;hb=ab>>>0>134217728?134217728:ab;x=0;ab=Ba(563,hb<<2|0)|0;jb=x;x=0;if(jb&1){L=72;break}if($a){OBa(k[Na>>2]|0);tb=i[S>>0]|0}else{i[S>>0]=0;tb=0}k[R>>2]=ib;k[n>>2]=hb;k[Na>>2]=ab;ub=tb}else{k[R>>2]=ib;ub=Wa}if(!(ub<<24>>24))vb=k[Na>>2]|0;else vb=n;Dyb(vb|0,((i[aa>>0]|0)==0?k[Oa>>2]|0:V)|0,k[$>>2]<<2|0)|0;Wa=j[ca>>1]|0;i[W>>0]=Wa;k[$>>2]=0;ib=k[ma>>2]|0;ab=ib>>>0>134217728?134217728:ib;ib=(Wa&65535)>>>8&255;Wa=ib<<24>>24==0;if(Wa)wb=k[V>>2]|0;else wb=2;if(ab>>>0>wb>>>0){hb=wb<<2;$a=hb>>>0>>0?ab:hb;hb=$a>>>0>134217728?134217728:$a;x=0;$a=Ba(563,hb<<2|0)|0;jb=x;x=0;if(jb&1){L=72;break}if(Wa){OBa(k[Oa>>2]|0);xb=i[aa>>0]|0}else{i[aa>>0]=0;xb=0}k[$>>2]=ab;k[V>>2]=hb;k[Oa>>2]=$a;yb=xb}else{k[$>>2]=ab;yb=ib}if(!(yb<<24>>24))zb=k[Oa>>2]|0;else zb=V;Dyb(zb|0,((i[qa>>0]|0)==0?k[va>>2]|0:la)|0,k[ma>>2]<<2|0)|0;i[ca>>0]=i[pa>>0]|0;k[q>>2]=n;k[Pa>>2]=V;x=0;fb(229,ea|0,q|0,d|0);ib=x;x=0;if(ib&1){L=72;break}ib=i[W>>0]|0;x=0;nb(110,0,n|0,V|0,la|0);ab=x;x=0;if(ab&1){L=72;break}i[pa>>0]=ib;do if(ib<<24>>24!=0&(k[ma>>2]|0)==1){if(k[((i[qa>>0]|0)==0?k[va>>2]|0:la)>>2]|0){Ab=ib;break}i[pa>>0]=0;Ab=0}else Ab=ib;while(0);ib=j[G>>1]|0;ab=ib&255;$a=j[fa>>1]|0;hb=$a&255;if(ab<<24>>24!=0^hb<<24>>24!=0){Xa=ab;Ya=hb;Za=_a;L=108;break}else{Qa=(ib&65535)>>>8&255;Ra=($a&65535)>>>8&255;Sa=Ab;Ta=hb;Ua=ab;Va=_a}}if((L|0)==72){Va=Hc()|0;Ja=Va;Ka=M;break c}else if((L|0)==108){Va=Xa<<24>>24!=0;Ua=Va^Ya<<24>>24!=0;if(!Za)if(Ua){La=Va;L=120;break}else{Ma=Va;L=121;break}if(Ua)Bb=Va?-1:1;else{Ua=k[E>>2]|0;Ta=k[da>>2]|0;g:do if((Ua|0)==(Ta|0)){Sa=(i[F>>0]|0)==0?k[ra>>2]|0:K;Ra=(i[ja>>0]|0)==0?k[wa>>2]|0:ea;Qa=Ua;while(1){Qa=Qa+-1|0;if((Qa|0)<=-1){Cb=0;break g}Pa=k[Sa+(Qa<<2)>>2]|0;Oa=k[Ra+(Qa<<2)>>2]|0;if((Pa|0)!=(Oa|0)){Db=Pa;Eb=Oa;break}}Cb=Db>>>0>Eb>>>0?1:-1}else Cb=Ua>>>0>Ta>>>0?1:-1;while(0);Bb=Va?0-Cb|0:Cb}Fb=(Bb|0)>0;break}else if((L|0)==188){h:do if(!(cb^bb<<24>>24!=0)){Ta=k[H>>2]|0;if((Ta|0)!=(k[ma>>2]|0))break;Ua=db<<24>>24==0?k[sa>>2]|0:m;Qa=Ua+(Ta<<2)|0;if(!Ta){Fb=0;break e}Ta=Ua;Ua=(i[qa>>0]|0)==0?k[va>>2]|0:la;while(1){if((k[Ta>>2]|0)!=(k[Ua>>2]|0))break h;Ta=Ta+4|0;if((Ta|0)==(Qa|0)){Fb=0;break e}else Ua=Ua+4|0}}while(0);i:do if((k[H>>2]|0)==1&(cb^1)){Va=db<<24>>24==0?k[sa>>2]|0:m;if(!(k[Va>>2]|0)){Gb=Va;Hb=h}else{Ib=1;break}while(1){Hb=Hb+4|0;if((Gb|0)==(Va|0)){Ib=0;break i}Gb=Gb+4|0;if((k[Gb>>2]|0)!=(k[Hb>>2]|0)){Ib=1;break}}}else Ib=1;while(0);Fb=(eb|0)!=1^Ib;break}}while(0);if((L|0)==120){Jb=La?-1:1;L=128}else if((L|0)==121){ta=k[E>>2]|0;ya=k[da>>2]|0;j:do if((ta|0)==(ya|0)){Ea=(i[F>>0]|0)==0?k[ra>>2]|0:K;ua=(i[ja>>0]|0)==0?k[wa>>2]|0:ea;Va=ta;while(1){Va=Va+-1|0;if((Va|0)<=-1){Kb=0;break j}Ua=k[Ea+(Va<<2)>>2]|0;Qa=k[ua+(Va<<2)>>2]|0;if((Ua|0)!=(Qa|0)){Lb=Ua;Mb=Qa;break}}Kb=Lb>>>0>Mb>>>0?1:-1}else Kb=ta>>>0>ya>>>0?1:-1;while(0);Jb=Ma?0-Kb|0:Kb;L=128}if((L|0)==128)Fb=(Jb|0)<0;if(!(i[qa>>0]|0))OBa(k[va>>2]|0);if(!(i[ja>>0]|0))OBa(k[wa>>2]|0);if(!(i[aa>>0]|0))OBa(k[V+4>>2]|0);if(!(i[S>>0]|0))OBa(k[n+4>>2]|0);if(!(i[Q>>0]|0))OBa(k[sa>>2]|0);if(!(i[F>>0]|0))OBa(k[ra>>2]|0);if(!(i[z>>0]|0))OBa(k[v+4>>2]|0);if(i[t>>0]|0){r=c;return Fb|0}OBa(k[l+4>>2]|0);r=c;return Fb|0}else if((L|0)==74){ya=Hc()|0;Ja=ya;Ka=M}while(0);if(!(i[qa>>0]|0))OBa(k[la+4>>2]|0);if(!(i[ja>>0]|0))OBa(k[ea+4>>2]|0);if(!(i[aa>>0]|0))OBa(k[V+4>>2]|0);if(i[S>>0]|0){Y=Ka;Z=Ja;break a}OBa(k[n+4>>2]|0);Y=Ka;Z=Ja;break a}while(0);if(!(i[aa>>0]|0)){OBa(k[V+4>>2]|0);ga=na;ha=oa}else{ga=na;ha=oa}}if(!(i[S>>0]|0)){OBa(k[n+4>>2]|0);Y=ga;Z=ha}else{Y=ga;Z=ha}}while(0);if(!(i[Q>>0]|0))OBa(k[m+4>>2]|0);if(!(i[F>>0]|0))OBa(k[K+4>>2]|0);if(!(i[z>>0]|0))OBa(k[v+4>>2]|0);if(i[t>>0]|0){B=Y;C=Z;Sc(C|0)}OBa(k[l+4>>2]|0);B=Y;C=Z;Sc(C|0)}while(0);if(!(i[z>>0]|0)){OBa(k[v+4>>2]|0);I=N;J=O}else{I=N;J=O}}if(i[t>>0]|0){B=I;C=J;Sc(C|0)}OBa(k[l+4>>2]|0);B=I;C=J;Sc(C|0);return 0}function mba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+32|0;e=d+16|0;f=d;k[f>>2]=0;g=f+8|0;k[g>>2]=1;h=f+12|0;i[h>>0]=0;j=f+13|0;i[j>>0]=1;x=0;fb(301,f|0,b|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[j>>0]|0)Sc(b|0);OBa(k[f+4>>2]|0);Sc(b|0)}b=k[c>>2]|0;do if((b|0)<0){x=0;xa(671,e|0,265832);c=x;x=0;if(c&1)l=21;else{k[e>>2]=47544;x=0;nb(96,e|0,255694,265975,711);x=0;c=Hc()|0;m=M;nCa(e);n=m;o=c}}else{if((f|0)!=(a|0)){c=a+8|0;k[c>>2]=0;m=k[g>>2]|0;p=m>>>0>134217728?134217728:m;q=a+13|0;s=i[q>>0]|0;t=s<<24>>24==0;u=t?k[a>>2]|0:2;if(p>>>0>u>>>0){v=u<<2;u=v>>>0

      >>0?p:v;v=u>>>0>134217728?134217728:u;x=0;u=Ba(563,v<<2|0)|0;w=x;x=0;if(w&1){l=21;break}if(t){t=a+4|0;OBa(k[t>>2]|0);y=k[g>>2]|0;z=t}else{i[q>>0]=0;y=m;z=a+4|0}k[c>>2]=p;k[a>>2]=v;k[z>>2]=u;A=i[q>>0]|0;B=y}else{k[c>>2]=p;A=s;B=m}Dyb((A<<24>>24==0?k[a+4>>2]|0:a)|0,((i[j>>0]|0)==0?k[f+4>>2]|0:f)|0,B<<2|0)|0;i[a+12>>0]=i[h>>0]|0}x=0;fb(302,a|0,b|0,0);m=x;x=0;if(m&1)l=21;else{if(i[j>>0]|0){r=d;return}OBa(k[f+4>>2]|0);r=d;return}}while(0);if((l|0)==21){l=Hc()|0;n=M;o=l}if(i[j>>0]|0)Sc(o|0);OBa(k[f+4>>2]|0);Sc(o|0)}function nba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+32|0;e=d+16|0;f=d;k[f>>2]=0;g=f+8|0;k[g>>2]=1;h=f+12|0;i[h>>0]=0;j=f+13|0;i[j>>0]=1;x=0;fb(303,f|0,b|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[j>>0]|0)Sc(b|0);OBa(k[f+4>>2]|0);Sc(b|0)}b=k[c>>2]|0;do if((b|0)<0){x=0;xa(671,e|0,265832);c=x;x=0;if(c&1)l=21;else{k[e>>2]=47544;x=0;nb(96,e|0,255694,265975,711);x=0;c=Hc()|0;m=M;nCa(e);n=m;o=c}}else{if((f|0)!=(a|0)){c=a+8|0;k[c>>2]=0;m=k[g>>2]|0;p=m>>>0>134217728?134217728:m;q=a+13|0;s=i[q>>0]|0;t=s<<24>>24==0;u=t?k[a>>2]|0:2;if(p>>>0>u>>>0){v=u<<2;u=v>>>0

      >>0?p:v;v=u>>>0>134217728?134217728:u;x=0;u=Ba(563,v<<2|0)|0;w=x;x=0;if(w&1){l=21;break}if(t){t=a+4|0;OBa(k[t>>2]|0);y=k[g>>2]|0;z=t}else{i[q>>0]=0;y=m;z=a+4|0}k[c>>2]=p;k[a>>2]=v;k[z>>2]=u;A=i[q>>0]|0;B=y}else{k[c>>2]=p;A=s;B=m}Dyb((A<<24>>24==0?k[a+4>>2]|0:a)|0,((i[j>>0]|0)==0?k[f+4>>2]|0:f)|0,B<<2|0)|0;i[a+12>>0]=i[h>>0]|0}x=0;fb(302,a|0,b|0,0);m=x;x=0;if(m&1)l=21;else{if(i[j>>0]|0){r=d;return}OBa(k[f+4>>2]|0);r=d;return}}while(0);if((l|0)==21){l=Hc()|0;n=M;o=l}if(i[j>>0]|0)Sc(o|0);OBa(k[f+4>>2]|0);Sc(o|0)}function oba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=k[b>>2]|0;if((c|0)==(a|0)){b=a+12|0;d=b;e=a+13|0;f=i[b>>0]|0}else{b=a+8|0;k[b>>2]=0;g=c+8|0;h=k[g>>2]|0;j=h>>>0>134217728?134217728:h;h=a+13|0;l=i[h>>0]|0;m=l<<24>>24==0;n=m?k[a>>2]|0:2;if(j>>>0>n>>>0){o=n<<2;n=o>>>0>>0?j:o;o=n>>>0>134217728?134217728:n;n=KBa(o<<2)|0;if(m){m=a+4|0;OBa(k[m>>2]|0);p=m}else{i[h>>0]=0;p=a+4|0}k[b>>2]=j;k[a>>2]=o;k[p>>2]=n;q=i[h>>0]|0}else{k[b>>2]=j;q=l}Dyb((q<<24>>24==0?k[a+4>>2]|0:a)|0,((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)|0,k[g>>2]<<2|0)|0;g=i[c+12>>0]|0;c=a+12|0;i[c>>0]=g;d=c;e=h;f=g}g=i[e>>0]|0;do if(!(f<<24>>24)){h=g<<24>>24==0?k[a+4>>2]|0:a;c=k[h>>2]|0;if((c|0)==-1){CB(a,a,39160);break}else{k[h>>2]=c+1;break}}else{c=g<<24>>24==0?k[a+4>>2]|0:a;h=k[c>>2]|0;if(!h){BB(a,a,39160);break}else{k[c>>2]=h+-1;break}}while(0);g=i[d>>0]|0;i[d>>0]=g^1;if(g<<24>>24==1)return;if((k[a+8>>2]|0)!=1)return;if(k[((i[e>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0)return;i[d>>0]=0;return}function pba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+48|0;d=c+32|0;e=c+16|0;f=c;k[e>>2]=0;g=e+8|0;k[g>>2]=0;h=e+13|0;i[h>>0]=1;l=k[b+8>>2]|0;m=l>>>0>134217728?134217728:l;if(m>>>0>2){n=m>>>0>8?m:8;o=KBa(n<<2)|0;i[h>>0]=0;k[g>>2]=m;k[e>>2]=n;k[e+4>>2]=o;p=o}else{k[g>>2]=m;p=e}Dyb(p|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,l<<2|0)|0;l=e+12|0;i[l>>0]=i[b+12>>0]|0;k[d>>2]=0;p=d+8|0;m=d+12|0;i[m>>0]=0;o=d+13|0;i[o>>0]=1;k[p>>2]=0;n=k[g>>2]|0;g=n>>>0>134217728?134217728:n;do if(g>>>0>2){q=g>>>0>8?g:8;x=0;s=Ba(563,q<<2|0)|0;t=x;x=0;if(t&1){t=Hc()|0;u=M;v=t;w=i[h>>0]|0;break}else{i[o>>0]=0;k[p>>2]=g;k[d>>2]=q;k[d+4>>2]=s;y=s;z=8;break}}else{k[p>>2]=g;y=d;z=8}while(0);if((z|0)==8){g=e+4|0;Dyb(y|0,((i[h>>0]|0)==0?k[g>>2]|0:e)|0,n<<2|0)|0;n=j[l>>1]|0;l=n&255;i[m>>0]=l^1;h=(n&65535)>>>8&255;if(l<<24>>24!=1&(k[p>>2]|0)==1){if(!(i[o>>0]|0))A=k[d+4>>2]|0;else A=d;if(!(k[A>>2]|0))i[m>>0]=0}m=b+16|0;k[f>>2]=0;A=f+8|0;k[A>>2]=0;p=f+13|0;i[p>>0]=1;l=k[b+24>>2]|0;n=l>>>0>134217728?134217728:l;do if(n>>>0>2){y=n>>>0>8?n:8;x=0;s=Ba(563,y<<2|0)|0;q=x;x=0;if(q&1){q=Hc()|0;B=M;C=q;break}else{i[p>>0]=0;k[A>>2]=n;k[f>>2]=y;k[f+4>>2]=s;D=s;z=17;break}}else{k[A>>2]=n;D=f;z=17}while(0);do if((z|0)==17){Dyb(D|0,((i[b+29>>0]|0)==0?k[m+4>>2]|0:m)|0,l<<2|0)|0;i[f+12>>0]=i[b+28>>0]|0;x=0;fb(287,a|0,d|0,f|0);n=x;x=0;if(n&1){n=Hc()|0;A=M;if(i[p>>0]|0){B=A;C=n;break}OBa(k[f+4>>2]|0);B=A;C=n;break}if(!(i[p>>0]|0))OBa(k[f+4>>2]|0);if(!(i[o>>0]|0))OBa(k[d+4>>2]|0);if(h<<24>>24){r=c;return}OBa(k[g>>2]|0);r=c;return}while(0);if(!(i[o>>0]|0)){OBa(k[d+4>>2]|0);u=B;v=C;w=h}else{u=B;v=C;w=h}}if(w<<24>>24)Sc(v|0);OBa(k[e+4>>2]|0);Sc(v|0)}function qba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+16|0;e=d+2|0;f=d+1|0;g=d;if((a|0)==(c|0)){i[e>>0]=i[f>>0]|0;cea(a,b,e,g);r=d;return}if((a|0)==(b|0)){i[e>>0]=i[f>>0]|0;cea(a,c,e,g);r=d;return}h=a+8|0;k[h>>2]=0;j=b+8|0;l=k[j>>2]|0;m=l>>>0>134217728?134217728:l;l=a+13|0;n=i[l>>0]|0;o=n<<24>>24==0;p=o?k[a>>2]|0:2;if(m>>>0>p>>>0){q=p<<2;p=q>>>0>>0?m:q;q=p>>>0>134217728?134217728:p;p=KBa(q<<2)|0;if(o){o=a+4|0;OBa(k[o>>2]|0);s=o}else{i[l>>0]=0;s=a+4|0}k[h>>2]=m;k[a>>2]=q;k[s>>2]=p;t=i[l>>0]|0}else{k[h>>2]=m;t=n}Dyb((t<<24>>24==0?k[a+4>>2]|0:a)|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,k[j>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0;i[e>>0]=i[f>>0]|0;cea(a,c,e,g);r=d;return}function rba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+16|0;e=d+2|0;f=d+1|0;g=d;if((a|0)==(c|0)){i[e>>0]=i[f>>0]|0;bea(a,b,e,g);r=d;return}if((a|0)==(b|0)){i[e>>0]=i[f>>0]|0;bea(a,c,e,g);r=d;return}h=a+8|0;k[h>>2]=0;j=b+8|0;l=k[j>>2]|0;m=l>>>0>134217728?134217728:l;l=a+13|0;n=i[l>>0]|0;o=n<<24>>24==0;p=o?k[a>>2]|0:2;if(m>>>0>p>>>0){q=p<<2;p=q>>>0>>0?m:q;q=p>>>0>134217728?134217728:p;p=KBa(q<<2)|0;if(o){o=a+4|0;OBa(k[o>>2]|0);s=o}else{i[l>>0]=0;s=a+4|0}k[h>>2]=m;k[a>>2]=q;k[s>>2]=p;t=i[l>>0]|0}else{k[h>>2]=m;t=n}Dyb((t<<24>>24==0?k[a+4>>2]|0:a)|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,k[j>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0;i[e>>0]=i[f>>0]|0;bea(a,c,e,g);r=d;return}function sba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+16|0;e=d+2|0;f=d+1|0;g=d;if((a|0)==(c|0)){i[e>>0]=i[f>>0]|0;aea(a,b,e,g);r=d;return}if((a|0)==(b|0)){i[e>>0]=i[f>>0]|0;aea(a,c,e,g);r=d;return}h=a+8|0;k[h>>2]=0;j=b+8|0;l=k[j>>2]|0;m=l>>>0>134217728?134217728:l;l=a+13|0;n=i[l>>0]|0;o=n<<24>>24==0;p=o?k[a>>2]|0:2;if(m>>>0>p>>>0){q=p<<2;p=q>>>0>>0?m:q;q=p>>>0>134217728?134217728:p;p=KBa(q<<2)|0;if(o){o=a+4|0;OBa(k[o>>2]|0);s=o}else{i[l>>0]=0;s=a+4|0}k[h>>2]=m;k[a>>2]=q;k[s>>2]=p;t=i[l>>0]|0}else{k[h>>2]=m;t=n}Dyb((t<<24>>24==0?k[a+4>>2]|0:a)|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,k[j>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0;i[e>>0]=i[f>>0]|0;aea(a,c,e,g);r=d;return}function tba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+112|0;d=c+96|0;e=c+102|0;f=c+101|0;g=c+92|0;h=c+100|0;l=c+48|0;m=c+32|0;n=c+16|0;o=c+72|0;p=c;q=c+64|0;k[l>>2]=0;s=l+8|0;k[s>>2]=0;t=l+13|0;i[t>>0]=1;u=k[b+8>>2]|0;v=u>>>0>134217728?134217728:u;if(v>>>0>2){w=v>>>0>8?v:8;y=KBa(w<<2)|0;i[t>>0]=0;k[s>>2]=v;k[l>>2]=w;k[l+4>>2]=y;z=y}else{k[s>>2]=v;z=l}Dyb(z|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,u<<2|0)|0;i[l+12>>0]=i[b+12>>0]|0;u=b+16|0;k[m>>2]=0;z=m+8|0;k[z>>2]=0;v=m+13|0;i[v>>0]=1;s=k[b+24>>2]|0;y=s>>>0>134217728?134217728:s;do if(y>>>0>2){w=y>>>0>8?y:8;x=0;A=Ba(563,w<<2|0)|0;B=x;x=0;if(B&1){B=Hc()|0;C=M;D=B;break}else{i[v>>0]=0;k[z>>2]=y;k[m>>2]=w;k[m+4>>2]=A;E=A;F=8;break}}else{k[z>>2]=y;E=m;F=8}while(0);if((F|0)==8){Dyb(E|0,((i[b+29>>0]|0)==0?k[u+4>>2]|0:u)|0,s<<2|0)|0;i[m+12>>0]=i[b+28>>0]|0;b=a+16|0;x=0;fb(298,n|0,b|0,m|0);s=x;x=0;if(!(s&1)){k[g>>2]=n;x=0;fb(299,b|0,g|0,h|0);h=x;x=0;if((!(h&1)?(k[o>>2]=a,k[o+4>>2]=m,k[o+8>>2]=n,k[o+12>>2]=l,k[o+16>>2]=b,x=0,fb(304,a|0,o|0,f|0),f=x,x=0,!(f&1)):0)?(x=0,fb(298,p|0,a|0,n|0),f=x,x=0,!(f&1)):0){f=n+13|0;if(!(i[f>>0]|0))OBa(k[n+4>>2]|0);o=p+8|0;h=k[o>>2]|0;k[n+8>>2]=h;g=j[p+12>>1]|0;i[n+12>>0]=g;s=(g&65535)>>>8&255;i[f>>0]=s;if(!(s<<24>>24)){s=p;g=k[s+4>>2]|0;u=n;k[u>>2]=k[s>>2];k[u+4>>2]=g;k[o>>2]=0;i[p+13>>0]=1}else Dyb(n|0,p|0,h<<2|0)|0;k[d>>2]=n;x=0;fb(299,a|0,d|0,e|0);e=x;x=0;if(!(e&1)?(k[q>>2]=m,k[q+4>>2]=n,x=0,Ta(591,b|0,q|0)|0,q=x,x=0,!(q&1)):0){if(!(i[f>>0]|0))OBa(k[n+4>>2]|0);if(!(i[v>>0]|0))OBa(k[m+4>>2]|0);if(i[t>>0]|0){r=c;return a|0}OBa(k[l+4>>2]|0);r=c;return a|0}}a=Hc()|0;c=M;if(!(i[n+13>>0]|0)){OBa(k[n+4>>2]|0);G=c;H=a}else{G=c;H=a}}else{a=Hc()|0;G=M;H=a}if(!(i[v>>0]|0)){OBa(k[m+4>>2]|0);C=G;D=H}else{C=G;D=H}}if(i[t>>0]|0)Sc(D|0);OBa(k[l+4>>2]|0);Sc(D|0);return 0}function uba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+112|0;d=c+97|0;e=c+96|0;f=c+48|0;g=c+32|0;h=c+16|0;j=c;l=c+80|0;m=c+64|0;k[f>>2]=0;n=f+8|0;k[n>>2]=0;o=f+13|0;i[o>>0]=1;p=k[b+8>>2]|0;q=p>>>0>134217728?134217728:p;if(q>>>0>2){s=q>>>0>8?q:8;t=KBa(s<<2)|0;i[o>>0]=0;k[n>>2]=q;k[f>>2]=s;k[f+4>>2]=t;u=t}else{k[n>>2]=q;u=f}Dyb(u|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,p<<2|0)|0;i[f+12>>0]=i[b+12>>0]|0;p=b+16|0;k[g>>2]=0;u=g+8|0;k[u>>2]=0;q=g+13|0;i[q>>0]=1;n=k[b+24>>2]|0;t=n>>>0>134217728?134217728:n;do if(t>>>0>2){s=t>>>0>8?t:8;x=0;v=Ba(563,s<<2|0)|0;w=x;x=0;if(w&1){w=Hc()|0;y=M;z=w;break}else{i[q>>0]=0;k[u>>2]=t;k[g>>2]=s;k[g+4>>2]=v;A=v;B=8;break}}else{k[u>>2]=t;A=g;B=8}while(0);if((B|0)==8){Dyb(A|0,((i[b+29>>0]|0)==0?k[p+4>>2]|0:p)|0,n<<2|0)|0;i[g+12>>0]=i[b+28>>0]|0;x=0;fb(298,h|0,a|0,g|0);b=x;x=0;if(!(b&1)){b=a+16|0;x=0;fb(298,j|0,f|0,b|0);n=x;x=0;if(!(n&1)){n=h;p=j;k[l>>2]=a;k[l+4>>2]=n;k[l+8>>2]=f;k[l+12>>2]=p;x=0;fb(305,a|0,l|0,e|0);e=x;x=0;if(!(e&1)?(k[m>>2]=b,k[m+4>>2]=p,k[m+8>>2]=g,k[m+12>>2]=n,x=0,fb(305,b|0,m|0,d|0),d=x,x=0,!(d&1)):0){if(!(i[j+13>>0]|0))OBa(k[j+4>>2]|0);if(!(i[h+13>>0]|0))OBa(k[h+4>>2]|0);if(!(i[q>>0]|0))OBa(k[g+4>>2]|0);if(i[o>>0]|0){r=c;return a|0}OBa(k[f+4>>2]|0);r=c;return a|0}a=Hc()|0;c=M;if(!(i[j+13>>0]|0)){OBa(k[j+4>>2]|0);C=c;D=a}else{C=c;D=a}}else{a=Hc()|0;C=M;D=a}if(!(i[h+13>>0]|0)){OBa(k[h+4>>2]|0);E=C;F=D}else{E=C;F=D}}else{D=Hc()|0;E=M;F=D}if(!(i[q>>0]|0)){OBa(k[g+4>>2]|0);y=E;z=F}else{y=E;z=F}}if(i[o>>0]|0)Sc(z|0);OBa(k[f+4>>2]|0);Sc(z|0);return 0}function vba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;c=r;r=r+128|0;d=c+121|0;e=c+120|0;f=c+64|0;g=c+48|0;h=c+32|0;j=c+16|0;l=c;m=c+104|0;n=c+88|0;o=c+84|0;p=c+80|0;k[f>>2]=0;q=f+8|0;k[q>>2]=0;s=f+13|0;i[s>>0]=1;t=k[b+8>>2]|0;u=t>>>0>134217728?134217728:t;if(u>>>0>2){v=u>>>0>8?u:8;w=KBa(v<<2)|0;i[s>>0]=0;k[q>>2]=u;k[f>>2]=v;k[f+4>>2]=w;y=w}else{k[q>>2]=u;y=f}Dyb(y|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,t<<2|0)|0;t=i[b+12>>0]|0;i[f+12>>0]=t;y=b+16|0;k[g>>2]=0;u=g+8|0;k[u>>2]=0;w=g+13|0;i[w>>0]=1;v=k[b+24>>2]|0;z=v>>>0>134217728?134217728:v;do if(z>>>0>2){A=z>>>0>8?z:8;x=0;B=Ba(563,A<<2|0)|0;C=x;x=0;if(C&1){C=Hc()|0;D=M;E=C;break}else{i[w>>0]=0;k[u>>2]=z;k[g>>2]=A;k[g+4>>2]=B;F=B;G=8;break}}else{k[u>>2]=z;F=g;G=8}while(0);if((G|0)==8){Dyb(F|0,((i[b+29>>0]|0)==0?k[y+4>>2]|0:y)|0,v<<2|0)|0;i[g+12>>0]=i[b+28>>0]|0;k[h>>2]=0;k[h+8>>2]=1;i[h+12>>0]=0;i[h+13>>0]=1;a:do if(t<<24>>24==0&(k[q>>2]|0)==1?(b=(i[s>>0]|0)==0?k[f+4>>2]|0:f,(k[b>>2]|0)==0):0){v=b;y=h;while(1){y=y+4|0;if((v|0)==(b|0))break;v=v+4|0;if((k[v>>2]|0)!=(k[y>>2]|0)){G=17;break a}}y=Rd(8)|0;x=0;xa(671,y|0,255640);v=x;x=0;if(v&1){v=Hc()|0;b=M;Fc(y|0);H=b;I=v;break}else{k[y>>2]=39460;x=0;fb(149,y|0,6944,933);x=0;G=15;break}}else G=17;while(0);b:do if((G|0)==17){c:do if(((i[a+12>>0]|0)==0?(k[a+8>>2]|0)==1:0)?(q=(i[a+13>>0]|0)==0?k[a+4>>2]|0:a,(k[q>>2]|0)==0):0){t=q;y=h;while(1){y=y+4|0;if((t|0)==(q|0))break c;t=t+4|0;if((k[t>>2]|0)!=(k[y>>2]|0)){G=22;break}}}else G=22;while(0);d:do if((G|0)==22){x=0;fb(298,j|0,a|0,f|0);y=x;x=0;if(y&1){G=15;break b}y=a+16|0;x=0;fb(298,l|0,g|0,y|0);t=x;x=0;if(!(t&1)){t=j;q=l;k[m>>2]=a;k[m+4>>2]=t;k[m+8>>2]=g;k[m+12>>2]=q;x=0;fb(305,a|0,m|0,e|0);v=x;x=0;do if(!(v&1)?(k[n>>2]=y,k[n+4>>2]=q,k[n+8>>2]=f,k[n+12>>2]=t,x=0,fb(305,y|0,n|0,d|0),b=x,x=0,!(b&1)):0){e:do if(!(i[a+28>>0]|0)){b=k[a+24>>2]|0;if((b|0)!=1)if(b>>>0>1)break;else{G=33;break}b=(i[a+29>>0]|0)==0?k[y+4>>2]|0:y;F=1;while(1){F=F+-1|0;if((F|0)<=-1)break e;z=k[b+(F<<2)>>2]|0;u=k[h+(F<<2)>>2]|0;if((z|0)!=(u|0)){J=z;K=u;break}}if(J>>>0<=K>>>0)G=33}else G=33;while(0);if((G|0)==33){k[o>>2]=a;x=0;Ta(592,a|0,o|0)|0;F=x;x=0;if(F&1)break;k[p>>2]=y;x=0;Ta(592,y|0,p|0)|0;F=x;x=0;if(F&1)break}if(!(i[l+13>>0]|0))OBa(k[l+4>>2]|0);if(!(i[j+13>>0]|0))OBa(k[j+4>>2]|0);break d}while(0);y=Hc()|0;t=M;if(!(i[l+13>>0]|0)){OBa(k[l+4>>2]|0);L=t;N=y}else{L=t;N=y}}else{y=Hc()|0;L=M;N=y}if(i[j+13>>0]|0){H=L;I=N;break b}OBa(k[j+4>>2]|0);H=L;I=N;break b}while(0);if(!(i[w>>0]|0))OBa(k[g+4>>2]|0);if(i[s>>0]|0){r=c;return a|0}OBa(k[f+4>>2]|0);r=c;return a|0}while(0);if((G|0)==15){G=Hc()|0;H=M;I=G}if(!(i[w>>0]|0)){OBa(k[g+4>>2]|0);D=H;E=I}else{D=H;E=I}}if(i[s>>0]|0)Sc(E|0);OBa(k[f+4>>2]|0);Sc(E|0);return 0}function wba(a){a=a|0;var b=0;a=r;r=r+16|0;b=a;H0a(b,255302);k[b>>2]=47564;x=0;nb(131,b|0,255358,255435,41);x=0;a=Hc()|0;qCa(b);Sc(a|0)}function xba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0;d=r;r=r+112|0;e=d+96|0;f=d+64|0;g=d+48|0;h=d+32|0;j=d+80|0;l=d+16|0;m=d;do if(!(c&64)){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;n=b+8|0;o=k[n>>2]|0;p=o<<5;if(!(c&8)){x=0;Fa(119,a|0,((p>>>0)/3|0)+1|0,48)|0;q=x;x=0;if(!(q&1)){q=i[a>>0]|0;if(!(q&1))s=(q&255)>>>1;else s=k[a+4>>2]|0;q=s+-1|0;k[g>>2]=0;t=g+8|0;k[t>>2]=0;u=g+13|0;i[u>>0]=1;v=k[n>>2]|0;n=v>>>0>134217728?134217728:v;if(n>>>0>2){w=n>>>0>8?n:8;x=0;y=Ba(563,w<<2|0)|0;z=x;x=0;if(z&1)break;i[u>>0]=0;k[t>>2]=n;k[g>>2]=w;k[g+4>>2]=y;A=y}else{k[t>>2]=n;A=g}Dyb(A|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,v<<2|0)|0;n=i[b+12>>0]|0;y=g+12|0;i[y>>0]=n;k[h>>2]=0;k[h+8>>2]=1;i[h+12>>0]=0;w=h+13|0;i[w>>0]=1;if(n<<24>>24){i[y>>0]=n^1;if(n<<24>>24!=1&(k[t>>2]|0)==1){if(!(i[u>>0]|0))B=k[g+4>>2]|0;else B=g;if(!(k[B>>2]|0)){i[y>>0]=0;C=1}else C=1}else C=1}else C=0;do if((v|0)==1){if(!(i[u>>0]|0))D=k[g+4>>2]|0;else D=g;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;Ta(537,D|0,j|0)|0;n=x;x=0;if(n&1){n=Hc()|0;z=M;K2a(j);E=z;F=n;G=83;break}if(!(i[a>>0]&1)){i[a+1>>0]=0;i[a>>0]=0}else{i[k[a+8>>2]>>0]=0;k[a+4>>2]=0}x=0;xa(603,a|0,0);n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}else{k[a>>2]=k[j>>2];k[a+4>>2]=k[j+4>>2];k[a+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;K2a(j);G=115;break}}else{n=l+13|0;i[n>>0]=1;k[l+8>>2]=1;k[l>>2]=1e9;i[l+12>>0]=0;z=g+4|0;H=m+8|0;I=m+12|0;J=m+13|0;K=m+4|0;L=h+4|0;N=a+1|0;O=a+8|0;P=q;while(1){if((k[t>>2]|0)==1?(k[((i[u>>0]|0)==0?k[z>>2]|0:g)>>2]|0)==0:0){G=112;break}k[m>>2]=0;k[H>>2]=1;i[I>>0]=0;i[J>>0]=1;x=0;nb(110,m|0,g|0,l|0,h|0);Q=x;x=0;if(Q&1)break;k[t>>2]=0;Q=k[H>>2]|0;R=Q>>>0>134217728?134217728:Q;Q=i[u>>0]|0;S=Q<<24>>24==0;if(S)T=k[g>>2]|0;else T=2;if(R>>>0>T>>>0){U=T<<2;V=U>>>0>>0?R:U;U=V>>>0>134217728?134217728:V;x=0;V=Ba(563,U<<2|0)|0;W=x;x=0;if(W&1)break;if(S){OBa(k[z>>2]|0);X=i[u>>0]|0}else{i[u>>0]=0;X=0}k[t>>2]=R;k[g>>2]=U;k[z>>2]=V;Y=X}else{k[t>>2]=R;Y=Q}if(!(Y<<24>>24))Z=k[z>>2]|0;else Z=g;Dyb(Z|0,((i[J>>0]|0)==0?k[K>>2]|0:m)|0,k[H>>2]<<2|0)|0;i[y>>0]=i[I>>0]|0;if(!(i[w>>0]|0))_=k[L>>2]|0;else _=h;Q=0;R=P;V=k[_>>2]|0;while(1){if(!(i[a>>0]&1))$=N;else $=k[O>>2]|0;i[$+R>>0]=(V>>>0)%10|0|48;U=R+-1|0;Q=Q+1|0;if(!((R|0)!=0&Q>>>0<9)){aa=U;break}else{R=U;V=(V>>>0)/10|0}}if(!(i[J>>0]|0))OBa(k[K>>2]|0);P=aa}if((G|0)==112){if(!(i[n>>0]|0))OBa(k[l+4>>2]|0);G=115;break}P=Hc()|0;O=M;if(!(i[J>>0]|0))OBa(k[K>>2]|0);if(!(i[n>>0]|0)){OBa(k[l+4>>2]|0);ba=P;ca=O}else{ba=P;ca=O}}while(0);if((G|0)==115){y=i[a>>0]|0;if(!(y&1)){da=(y&255)>>>1;ea=a+1|0}else{da=k[a+4>>2]|0;ea=k[a+8>>2]|0}a:do if(!da)fa=-1;else{y=ea+da|0;t=ea;while(1){if((i[t>>0]|0)!=48){ga=t;break}t=t+1|0;if((t|0)==(y|0)){fa=-1;break a}}fa=ga-ea|0}while(0);x=0;Fa(101,a|0,0,fa|0)|0;y=x;x=0;do if(!(y&1)){t=i[a>>0]|0;if(!(t&1))ha=(t&255)>>>1;else ha=k[a+4>>2]|0;if((ha|0)==0?(x=0,Ta(496,a|0,324198)|0,t=x,x=0,t&1):0)break;if(C){x=0;db(67,a|0,0,1,45)|0;t=x;x=0;if(t&1)break}else if((c&2048|0)!=0?(x=0,db(67,a|0,0,1,43)|0,t=x,x=0,t&1):0)break;if(!(i[w>>0]|0))OBa(k[h+4>>2]|0);if(!(i[u>>0]|0))OBa(k[g+4>>2]|0);r=d;return}while(0);y=Hc()|0;E=M;F=y;G=83}if((G|0)==83){ba=F;ca=E}if(!(i[w>>0]|0))OBa(k[h+4>>2]|0);if(i[u>>0]|0){ia=ba;ja=ca;K2a(a);Sc(ia|0)}OBa(k[g+4>>2]|0);ia=ba;ja=ca;K2a(a);Sc(ia|0)}}else{ka=0;la=o;ma=p;na=a;G=4}}else{k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;y=k[b+8>>2]|0;ka=1;la=y;ma=y<<5;na=a;G=4}while(0);do if((G|0)==4){if(i[b+12>>0]|0){x=0;xa(616,e|0,254749);ca=x;x=0;if(ca&1)break;x=0;nb(109,e|0,254809,264399,1533);x=0;ca=Hc()|0;ba=M;qCa(e);ia=ca;ja=ba;K2a(a);Sc(ia|0)}ba=ka?3:4;ca=(1<>2]=0;g=f+8|0;k[g>>2]=0;h=f+13|0;i[h>>0]=1;E=la>>>0>134217728?134217728:la;if(E>>>0>2){F=E>>>0>8?E:8;x=0;C=Ba(563,F<<2|0)|0;ha=x;x=0;if(ha&1)break;i[h>>0]=0;k[g>>2]=E;k[f>>2]=F;k[f+4>>2]=C;oa=C}else{k[g>>2]=E;oa=f}Dyb(oa|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,la<<2|0)|0;i[f+12>>0]=0;E=(ma>>>0)/(ba>>>0)|0;g=(ma>>>0)%(ba>>>0)|0;C=(g|0)!=0;x=0;Fa(119,a|0,(C&1)+E|0,48)|0;F=x;x=0;b:do if(!(F&1)){ha=i[na>>0]|0;if(!(ha&1))pa=(ha&255)>>>1;else pa=k[a+4>>2]|0;ha=pa+-1|0;c:do if(!E)qa=ha;else{fa=f+4|0;ea=a+1|0;ga=a+8|0;da=0;l=ha;while(1){if(!(i[h>>0]|0))ra=k[fa>>2]|0;else ra=f;aa=k[ra>>2]&ca;$=aa+48|0;if(!(i[na>>0]&1))sa=ea;else sa=k[ga>>2]|0;i[sa+l>>0]=($&255)<<24>>24>57?aa+55|0:$;x=0;fb(224,f|0,ba|0,0);$=x;x=0;if($&1)break;da=da+1|0;$=l+-1|0;if(da>>>0>=E>>>0){qa=$;break c}else l=$}l=Hc()|0;ta=l;ua=M;break b}while(0);if(C){if(!(i[h>>0]|0))va=k[f+4>>2]|0;else va=f;ha=k[va>>2]&(1<>0]&1))wa=a+1|0;else wa=k[a+8>>2]|0;i[wa+qa>>0]=(l&255)<<24>>24>57?ha+56|0:l}l=i[na>>0]|0;ha=(l&1)==0;if(ha){ya=(l&255)>>>1;za=a+1|0}else{ya=k[a+4>>2]|0;za=k[a+8>>2]|0}d:do if(!ya)Aa=-1;else{da=za+ya|0;ga=za;while(1){if((i[ga>>0]|0)!=48){Ca=ga;break}ga=ga+1|0;if((ga|0)==(da|0)){Aa=-1;break d}}Aa=Ca-za|0}while(0);if(ha)Da=(l&255)>>>1;else Da=k[a+4>>2]|0;if((Aa|0)==-1&(Da|0)!=0){if(ha)Ea=(l&255)>>>1;else Ea=k[a+4>>2]|0;Ga=Ea+-1|0}else Ga=Aa;x=0;Fa(101,a|0,0,Ga|0)|0;da=x;x=0;if(!(da&1)){if((c&512|0)!=0?(x=0,Fa(86,a|0,0,(ka?324198:257534)|0)|0,da=x,x=0,da&1):0){G=20;break}if(!(i[h>>0]|0))OBa(k[f+4>>2]|0);r=d;return}else G=20}else G=20;while(0);if((G|0)==20){g=Hc()|0;ta=g;ua=M}if(i[h>>0]|0){ia=ta;ja=ua;K2a(a);Sc(ia|0)}OBa(k[f+4>>2]|0);ia=ta;ja=ua;K2a(a);Sc(ia|0)}while(0);ua=Hc()|0;ia=ua;ja=M;K2a(a);Sc(ia|0)}function yba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+32|0;d=c+16|0;e=c;k[e>>2]=0;f=e+8|0;k[f>>2]=1;g=e+12|0;i[g>>0]=0;h=e+13|0;i[h>>0]=1;l=b;b=k[l+4>>2]|0;m=d;k[m>>2]=k[l>>2];k[m+4>>2]=b;x=0;fb(184,e|0,d|0,c+24|0);d=x;x=0;if(d&1){d=Hc()|0;if(i[h>>0]|0)Sc(d|0);OBa(k[e+4>>2]|0);Sc(d|0)}d=j[g>>1]|0;h=d&255;b=h^1;i[g>>0]=b;m=k[f>>2]|0;f=(d&65535)>>>8&255;if(h<<24>>24!=1&(m|0)==1){if(!(f<<24>>24))n=k[e+4>>2]|0;else n=e;if(!(k[n>>2]|0)){i[g>>0]=0;o=0}else o=b}else o=b;b=(i[a+12>>0]|0)!=0;if(b^o<<24>>24!=0)p=b?-1:1;else{o=k[a+8>>2]|0;a:do if((o|0)==(m|0)){g=(i[a+13>>0]|0)==0?k[a+4>>2]|0:a;n=f<<24>>24==0?k[e+4>>2]|0:e;h=m;while(1){h=h+-1|0;if((h|0)<=-1){q=0;break a}d=k[g+(h<<2)>>2]|0;l=k[n+(h<<2)>>2]|0;if((d|0)!=(l|0)){s=d;t=l;break}}q=s>>>0>t>>>0?1:-1}else q=o>>>0>m>>>0?1:-1;while(0);p=b?0-q|0:q}q=(p|0)<0;if(f<<24>>24){r=c;return q|0}OBa(k[e+4>>2]|0);r=c;return q|0}function zba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+32|0;d=c;e=c+12|0;f=c+8|0;g=b;h=k[g+4>>2]|0;j=k[b+8>>2]|0;l=d;k[l>>2]=k[g>>2];k[l+4>>2]=h;wda(a,d,e);k[f>>2]=j;xda(a,f,c+16|0);f=k[k[b+12>>2]>>2]|0;if((f|0)>0){k[d>>2]=f;bC(a,a,d);r=c;return}k[e>>2]=(f|0)<0?0-f|0:f;bC(a,a,e);e=a+12|0;f=i[e>>0]|0;i[e>>0]=f^1;if(f<<24>>24==1){r=c;return}if((k[a+8>>2]|0)!=1){r=c;return}if(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0){r=c;return}i[e>>0]=0;r=c;return}function Aba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+32|0;d=c+16|0;e=c;f=k[k[b>>2]>>2]|0;k[e>>2]=0;b=e+8|0;k[b>>2]=0;g=e+13|0;i[g>>0]=1;h=a+8|0;j=k[h>>2]|0;l=j>>>0>134217728?134217728:j;if(l>>>0>2){m=l>>>0>8?l:8;n=KBa(m<<2)|0;i[g>>0]=0;k[b>>2]=l;k[e>>2]=m;k[e+4>>2]=n;o=n}else{k[b>>2]=l;o=e}l=a+13|0;b=a+4|0;Dyb(o|0,((i[l>>0]|0)==0?k[b>>2]|0:a)|0,j<<2|0)|0;j=a+12|0;o=i[j>>0]|0;i[e+12>>0]=o;k[d>>2]=0;k[d+8>>2]=1;i[d+12>>0]=0;n=d+13|0;i[n>>0]=1;x=0;nb(107,a|0,e|0,f|0,d|0);f=x;x=0;if(f&1){f=Hc()|0;if(!(i[n>>0]|0))OBa(k[d+4>>2]|0);if(i[g>>0]|0)Sc(f|0);OBa(k[e+4>>2]|0);Sc(f|0)}i[j>>0]=o;if(o<<24>>24!=0&(k[h>>2]|0)==1?(k[((i[l>>0]|0)==0?k[b>>2]|0:a)>>2]|0)==0:0)i[j>>0]=0;if(!(i[n>>0]|0))OBa(k[d+4>>2]|0);if(i[g>>0]|0){r=c;return}OBa(k[e+4>>2]|0);r=c;return}function Bba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;d=r;r=r+32|0;e=d+16|0;f=d;g=k[b+8>>2]|0;h=k[c+32>>2]|0;j=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;if((g|0)==1){l=i[b+12>>0]|0;m=l<<24>>24==0;if((h|0)==1){n=Qyb(k[c>>2]|0,0,k[j>>2]|0,0)|0;o=M;p=a+13|0;q=(i[p>>0]|0)==0;s=a+4|0;t=k[s>>2]|0;u=q?t:a;k[u>>2]=n;k[u+4>>2]=o;u=(o|0)!=0?2:1;o=q?k[a>>2]|0:2;if(u>>>0>o>>>0){n=o<<2;o=n>>>0>>0?u:n;n=o>>>0>134217728?134217728:o;o=KBa(n<<2)|0;if(q){q=a+8|0;Dyb(o|0,t|0,k[q>>2]<<2|0)|0;OBa(t);v=q}else{q=a+8|0;Dyb(o|0,a|0,k[q>>2]<<2|0)|0;i[p>>0]=0;v=q}k[v>>2]=u;k[a>>2]=n;k[s>>2]=o}else k[a+8>>2]=u;u=a+12|0;i[u>>0]=0;w=u}else{k[e>>2]=k[j>>2];vda(a,c,e);w=a+12|0}i[w>>0]=l;if(m){r=d;return}if((k[a+8>>2]|0)!=1){r=d;return}if(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0){r=d;return}i[w>>0]=0;r=d;return}if((h|0)==1){w=i[b+12>>0]|0;k[e>>2]=k[c>>2];bC(a,b,e);m=a+12|0;i[m>>0]=w;if((w<<24>>24!=0?(k[a+8>>2]|0)==1:0)?(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0)==0:0)i[m>>0]=0;r=d;return}if((a|0)==(b|0)){k[e>>2]=0;m=e+8|0;k[m>>2]=0;w=e+13|0;i[w>>0]=1;l=g>>>0>134217728?134217728:g;if(l>>>0>2){u=l>>>0>8?l:8;o=KBa(u<<2)|0;i[w>>0]=0;k[m>>2]=l;k[e>>2]=u;k[e+4>>2]=o;y=o}else{k[m>>2]=l;y=e}Dyb(y|0,j|0,g<<2|0)|0;i[e+12>>0]=i[b+12>>0]|0;x=0;fb(295,b|0,e|0,c|0);y=x;x=0;if(y&1){y=Hc()|0;l=M;if(i[w>>0]|0){z=y;A=l;Sc(z|0)}OBa(k[e+4>>2]|0);z=y;A=l;Sc(z|0)}else{if(!(i[w>>0]|0))OBa(k[e+4>>2]|0);r=d;return}}if((c|0)==(a|0)){k[f>>2]=0;e=f+8|0;k[e>>2]=1;w=f+12|0;i[w>>0]=0;l=f+13|0;i[l>>0]=1;y=h>>>0>134217728;m=y?134217728:h;if(m>>>0>2){o=m>>>0>8?m:8;u=KBa(o<<2)|0;k[u>>2]=k[f>>2];i[l>>0]=0;k[e>>2]=m;k[f>>2]=o;k[f+4>>2]=u;B=u}else{k[e>>2]=m;B=f}Dyb(B|0,c|0,(y?536870912:h<<2)|0)|0;i[w>>0]=0;if(!(i[l>>0]|0))C=k[f+4>>2]|0;else C=f;w=(k[e>>2]|0)+-1|0;a:do if(w){y=w;do{if(k[C+(y<<2)>>2]|0)break a;k[e>>2]=y;y=y+-1|0}while((y|0)!=0)}while(0);x=0;fb(217,a|0,b|0,f|0);e=x;x=0;if(e&1){e=Hc()|0;C=M;if(i[l>>0]|0){z=e;A=C;Sc(z|0)}OBa(k[f+4>>2]|0);z=e;A=C;Sc(z|0)}else{if(!(i[l>>0]|0))OBa(k[f+4>>2]|0);r=d;return}}f=h+g|0;l=f>>>0>134217728?134217728:f;f=a+13|0;z=i[f>>0]|0;C=z<<24>>24==0;A=C?k[a>>2]|0:2;if(l>>>0>A>>>0){e=A<<2;A=e>>>0>>0?l:e;e=A>>>0>134217728?134217728:A;A=KBa(e<<2)|0;if(C){C=a+4|0;w=k[C>>2]|0;y=a+8|0;Dyb(A|0,w|0,k[y>>2]<<2|0)|0;OBa(w);D=y;E=C}else{C=a+8|0;Dyb(A|0,a|0,k[C>>2]<<2|0)|0;i[f>>0]=0;D=C;E=a+4|0}k[D>>2]=l;k[a>>2]=e;k[E>>2]=A;F=D;G=i[f>>0]|0}else{D=a+8|0;k[D>>2]=l;F=D;G=z}z=a+4|0;D=G<<24>>24==0?k[z>>2]|0:a;Fyb(D|0,0,l<<2|0)|0;do if(g){if(!h){Fyb(D|0,0,g<<2|0)|0;break}else H=0;do{l=j+(H<<2)|0;G=0;A=0;E=0;while(1){e=Qyb(k[c+(E<<2)>>2]|0,0,k[l>>2]|0,0)|0;C=Hyb(e|0,M|0,G|0,A|0)|0;e=D+(E+H<<2)|0;y=Hyb(C|0,M|0,k[e>>2]|0,0)|0;C=M;k[e>>2]=y;E=E+1|0;if((E|0)==(h|0)){I=C;break}else{G=C;A=0}}k[D+(H+h<<2)>>2]=I;H=H+1|0}while((H|0)!=(g|0))}while(0);g=(i[f>>0]|0)==0?k[z>>2]|0:a;z=k[F>>2]|0;f=z+-1|0;b:do if(!f)J=z;else{H=f;I=z;while(1){if(k[g+(H<<2)>>2]|0){J=I;break b}k[F>>2]=H;h=H+-1|0;if(!h){J=H;break}else{D=H;H=h;I=D}}}while(0);F=i[b+12>>0]|0;b=a+12|0;i[b>>0]=F;if(!(F<<24>>24!=0&(J|0)==1)){r=d;return}if(k[g>>2]|0){r=d;return}i[b>>0]=0;r=d;return}function Cba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;k[a+4>>2]=0;d=a+8|0;k[d>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;e=a+16|0;k[a+12>>2]=e;k[a+24>>2]=b;i[a+28>>0]=1;k[a>>2]=38152;k[a+32>>2]=0;f=a+36|0;g=k[c>>2]|0;h=g;if((g|0)!=0?(j=iDa(g,168,6688,0)|0,(j|0)!=0):0){x=0;nb(k[(k[j>>2]|0)+104>>2]|0,f|0,j|0,b|0,0);b=x;x=0;if(!(b&1)){l=a+44|0;i[l>>0]=1;m=a+48|0;k[m>>2]=0;n=a+80|0;k[n>>2]=1;return}b=Hc()|0;k[a>>2]=20456;xh(a+12|0,k[e>>2]|0);e=k[d>>2]|0;if(!e)Sc(b|0);k0a(e);Sc(b|0)}k[f>>2]=h;h=k[c+4>>2]|0;k[a+40>>2]=h;if(!h){l=a+44|0;i[l>>0]=1;m=a+48|0;k[m>>2]=0;n=a+80|0;k[n>>2]=1;return}h0a(h);l=a+44|0;i[l>>0]=1;m=a+48|0;k[m>>2]=0;n=a+80|0;k[n>>2]=1;return}function Dba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;k[a+4>>2]=0;e=a+8|0;k[e>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;f=a+16|0;k[a+12>>2]=f;k[a+24>>2]=b;i[a+28>>0]=1;k[a>>2]=38152;k[a+32>>2]=0;g=a+36|0;h=k[c>>2]|0;j=h;if((h|0)!=0?(l=iDa(h,168,6688,0)|0,(l|0)!=0):0){x=0;nb(k[(k[l>>2]|0)+104>>2]|0,g|0,l|0,b|0,0);b=x;x=0;if(b&1){b=Hc()|0;k[a>>2]=20456;xh(a+12|0,k[f>>2]|0);f=k[e>>2]|0;if(!f)Sc(b|0);k0a(f);Sc(b|0)}}else m=4;if((m|0)==4?(k[g>>2]=j,j=k[c+4>>2]|0,k[a+40>>2]=j,(j|0)!=0):0)h0a(j);i[a+44>>0]=0;j=a+48|0;a=d;d=j+40|0;do{k[j>>2]=k[a>>2];j=j+4|0;a=a+4|0}while((j|0)<(d|0));return}function Eba(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;h=r;r=r+32|0;m=h+12|0;n=h;o=KBa(100)|0;k[o+4>>2]=0;k[o+8>>2]=0;k[o>>2]=31496;x=0;xa(761,m|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;q=d;c0a(o);OBa(o);Sc(q|0)}d=o+12|0;s=n+4|0;t=k[e>>2]|0;k[n>>2]=t;u=e+4|0;v=k[u>>2]|0;k[s>>2]=v;w=e+8|0;k[n+8>>2]=k[w>>2];k[w>>2]=0;k[u>>2]=0;k[e>>2]=0;e=t;u=v;v=t;x=0;Na(42,d|0,b|0,c|0,m|0,n|0,k[f>>2]|0,(i[g>>0]|0)!=0|0,0,(i[j>>0]|0)!=0|0,(i[l>>0]|0)!=0|0,0,0,0);l=x;x=0;if(l&1){l=Hc()|0;j=M;if(t){if((u|0)!=(e|0)){g=u;do{g=g+-12|0;K2a(g)}while((g|0)!=(e|0));k[s>>2]=e}OBa(v)}g=k[m>>2]|0;if(!g){p=j;q=l;c0a(o);OBa(o);Sc(q|0)}f=m+4|0;n=k[f>>2]|0;if((n|0)==(g|0))y=g;else{c=n;do{n=c+-12|0;k[f>>2]=n;K2a(n);c=k[f>>2]|0}while((c|0)!=(g|0));y=k[m>>2]|0}OBa(y);p=j;q=l;c0a(o);OBa(o);Sc(q|0)}if(t){if((u|0)!=(e|0)){t=u;do{t=t+-12|0;K2a(t)}while((t|0)!=(e|0));k[s>>2]=e}OBa(v)}v=k[m>>2]|0;if(v){e=m+4|0;s=k[e>>2]|0;if((s|0)==(v|0))z=v;else{t=s;do{s=t+-12|0;k[e>>2]=s;K2a(s);t=k[e>>2]|0}while((t|0)!=(v|0));z=k[m>>2]|0}OBa(z)}k[a>>2]=d;k[a+4>>2]=o;i0a(o);k[o+16>>2]=d;d=o+20|0;a=k[d>>2]|0;k[d>>2]=o;if(!a){r=h;return}k0a(a);r=h;return}function Fba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/56|0)+1|0;if(e>>>0>76695844){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=((k[g>>2]|0)-f|0)/56|0;if(h>>>0<38347922){i=h<<1;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=(i-f|0)/56|0;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=76695844;q=e;r=(e-f|0)/56|0;s=6}if((s|0)==6){l=p;m=KBa(p*56|0)|0;n=r;o=q}q=m+(n*56|0)|0;r=q;p=m+(l*56|0)|0;k[q>>2]=k[b>>2];l=m+(n*56|0)+8|0;s=b+8|0;e=l+40|0;do{k[l>>2]=k[s>>2];l=l+4|0;s=s+4|0}while((l|0)<(e|0));k[m+(n*56|0)+48>>2]=k[b+48>>2];b=q+56|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-56|0;k[o+-56>>2]=k[f>>2];l=o+-48|0;s=r+-48|0;e=l+40|0;do{k[l>>2]=k[s>>2];l=l+4|0;s=s+4|0}while((l|0)<(e|0));k[o+-8>>2]=k[r+-8>>2];o=q+-56|0;n=o;if((f|0)==(d|0)){v=n;break}else q=n}t=v;u=k[a>>2]|0}k[a>>2]=t;k[c>>2]=b;k[g>>2]=p;if(!u)return;OBa(u);return}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;g=r;r=r+32|0;h=g+12|0;i=g;j=KBa(100)|0;k[j+4>>2]=0;k[j+8>>2]=0;k[j>>2]=31496;x=0;xa(761,h|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;l=M;m=d;c0a(j);OBa(j);Sc(m|0)}d=j+12|0;n=i+4|0;o=k[e>>2]|0;k[i>>2]=o;p=e+4|0;q=k[p>>2]|0;k[n>>2]=q;s=e+8|0;k[i+8>>2]=k[s>>2];k[s>>2]=0;k[p>>2]=0;k[e>>2]=0;e=o;p=q;q=o;x=0;Na(42,d|0,b|0,c|0,h|0,i|0,k[f>>2]|0,0,0,0,0,0,0,0);f=x;x=0;if(f&1){f=Hc()|0;i=M;if(o){if((p|0)!=(e|0)){c=p;do{c=c+-12|0;K2a(c)}while((c|0)!=(e|0));k[n>>2]=e}OBa(q)}c=k[h>>2]|0;if(!c){l=i;m=f;c0a(j);OBa(j);Sc(m|0)}b=h+4|0;s=k[b>>2]|0;if((s|0)==(c|0))t=c;else{u=s;do{s=u+-12|0;k[b>>2]=s;K2a(s);u=k[b>>2]|0}while((u|0)!=(c|0));t=k[h>>2]|0}OBa(t);l=i;m=f;c0a(j);OBa(j);Sc(m|0)}if(o){if((p|0)!=(e|0)){o=p;do{o=o+-12|0;K2a(o)}while((o|0)!=(e|0));k[n>>2]=e}OBa(q)}q=k[h>>2]|0;if(q){e=h+4|0;n=k[e>>2]|0;if((n|0)==(q|0))v=q;else{o=n;do{n=o+-12|0;k[e>>2]=n;K2a(n);o=k[e>>2]|0}while((o|0)!=(q|0));v=k[h>>2]|0}OBa(v)}k[a>>2]=d;k[a+4>>2]=j;i0a(j);k[j+16>>2]=d;d=j+20|0;a=k[d>>2]|0;k[d>>2]=j;if(!a){r=g;return}k0a(a);r=g;return}function Hba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;if(!b)return;if(!(b>>>0>536870911?(x=0,va(1473,a|0),d=x,x=0,d&1):0))e=4;if((e|0)==4?(x=0,e=Ba(563,b<<3|0)|0,d=x,x=0,!(d&1)):0){k[c>>2]=e;k[a>>2]=e;d=e+(b<<3)|0;k[a+8>>2]=d;f=b;b=e;while(1){k[b>>2]=0;k[b+4>>2]=0;f=f+-1|0;if(!f)break;else b=b+8|0}k[c>>2]=d;return}d=Hc()|0;b=k[a>>2]|0;if(!b)Sc(d|0);f=k[c>>2]|0;if((f|0)==(b|0))g=b;else{e=f;while(1){f=e+-8|0;k[c>>2]=f;h=k[e+-4>>2]|0;if(!h)i=f;else{j0a(h);i=k[c>>2]|0}if((i|0)==(b|0))break;else e=i}g=k[a>>2]|0}OBa(g);Sc(d|0)}function Iba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;d=a+4|0;k[d>>2]=0;k[a+8>>2]=0;e=k[b>>2]|0;b=k[c>>2]|0;c=b-e|0;f=c>>3;g=e;e=b;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),b=x,x=0,b&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,c|0)|0,c=x,x=0,!(c&1)):0){k[d>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);if((g|0)==(e|0))return;f=g;g=h;do{k[g>>2]=k[f>>2];h=k[f+4>>2]|0;k[g+4>>2]=h;if(!h)i=g;else{h0a(h);i=k[d>>2]|0}g=i+8|0;k[d>>2]=g;f=f+8|0}while((f|0)!=(e|0));return}e=Hc()|0;f=k[a>>2]|0;if(!f)Sc(e|0);g=k[d>>2]|0;if((g|0)==(f|0))j=f;else{i=g;while(1){g=i+-8|0;k[d>>2]=g;h=k[i+-4>>2]|0;if(!h)l=g;else{j0a(h);l=k[d>>2]|0}if((l|0)==(f|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(e|0)}function Jba(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;m=r;r=r+32|0;n=m+12|0;o=m;p=KBa(100)|0;k[p+4>>2]=0;k[p+8>>2]=0;k[p>>2]=31496;x=0;xa(761,n|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;q=M;s=d;c0a(p);OBa(p);Sc(s|0)}x=0;xa(761,o|0,e|0);e=x;x=0;do if(e&1){d=Hc()|0;t=M;u=d}else{d=p+12|0;x=0;Na(42,d|0,b|0,c|0,n|0,o|0,k[f>>2]|0,(i[g>>0]|0)!=0|0,k[h>>2]|0,(i[j>>0]|0)!=0|0,(i[l>>0]|0)!=0|0,0,0,0);v=x;x=0;if(v&1){v=Hc()|0;w=M;y=k[o>>2]|0;if(!y){t=w;u=v;break}z=o+4|0;A=k[z>>2]|0;if((A|0)==(y|0))B=y;else{C=A;do{A=C+-12|0;k[z>>2]=A;K2a(A);C=k[z>>2]|0}while((C|0)!=(y|0));B=k[o>>2]|0}OBa(B);t=w;u=v;break}y=k[o>>2]|0;if(y){C=o+4|0;z=k[C>>2]|0;if((z|0)==(y|0))D=y;else{A=z;do{z=A+-12|0;k[C>>2]=z;K2a(z);A=k[C>>2]|0}while((A|0)!=(y|0));D=k[o>>2]|0}OBa(D)}y=k[n>>2]|0;if(y){A=n+4|0;C=k[A>>2]|0;if((C|0)==(y|0))E=y;else{v=C;do{C=v+-12|0;k[A>>2]=C;K2a(C);v=k[A>>2]|0}while((v|0)!=(y|0));E=k[n>>2]|0}OBa(E)}k[a>>2]=d;k[a+4>>2]=p;i0a(p);k[p+16>>2]=d;y=p+20|0;v=k[y>>2]|0;k[y>>2]=p;if(!v){r=m;return}k0a(v);r=m;return}while(0);m=k[n>>2]|0;if(m){a=n+4|0;E=k[a>>2]|0;if((E|0)==(m|0))F=m;else{D=E;do{E=D+-12|0;k[a>>2]=E;K2a(E);D=k[a>>2]|0}while((D|0)!=(m|0));F=k[n>>2]|0}OBa(F)}q=t;s=u;c0a(p);OBa(p);Sc(s|0)}function Kba(a,b,c,d,e,f,g,h,j,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;p=r;r=r+32|0;q=p+12|0;s=p;t=KBa(100)|0;k[t+4>>2]=0;k[t+8>>2]=0;k[t>>2]=31496;x=0;xa(761,q|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;u=M;v=d;c0a(t);OBa(t);Sc(v|0)}x=0;xa(761,s|0,e|0);e=x;x=0;do if(e&1){d=Hc()|0;w=M;y=d}else{d=t+12|0;x=0;Na(42,d|0,b|0,c|0,q|0,s|0,k[f>>2]|0,(i[g>>0]|0)!=0|0,k[h>>2]|0,(i[j>>0]|0)!=0|0,(i[l>>0]|0)!=0|0,(i[m>>0]|0)!=0|0,(i[n>>0]|0)!=0|0,(i[o>>0]|0)!=0|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;B=k[s>>2]|0;if(!B){w=A;y=z;break}C=s+4|0;D=k[C>>2]|0;if((D|0)==(B|0))E=B;else{F=D;do{D=F+-12|0;k[C>>2]=D;K2a(D);F=k[C>>2]|0}while((F|0)!=(B|0));E=k[s>>2]|0}OBa(E);w=A;y=z;break}B=k[s>>2]|0;if(B){F=s+4|0;C=k[F>>2]|0;if((C|0)==(B|0))G=B;else{D=C;do{C=D+-12|0;k[F>>2]=C;K2a(C);D=k[F>>2]|0}while((D|0)!=(B|0));G=k[s>>2]|0}OBa(G)}B=k[q>>2]|0;if(B){D=q+4|0;F=k[D>>2]|0;if((F|0)==(B|0))H=B;else{z=F;do{F=z+-12|0;k[D>>2]=F;K2a(F);z=k[D>>2]|0}while((z|0)!=(B|0));H=k[q>>2]|0}OBa(H)}k[a>>2]=d;k[a+4>>2]=t;i0a(t);k[t+16>>2]=d;B=t+20|0;z=k[B>>2]|0;k[B>>2]=t;if(!z){r=p;return}k0a(z);r=p;return}while(0);p=k[q>>2]|0;if(p){a=q+4|0;H=k[a>>2]|0;if((H|0)==(p|0))I=p;else{G=H;do{H=G+-12|0;k[a>>2]=H;K2a(H);G=k[a>>2]|0}while((G|0)!=(p|0));I=k[q>>2]|0}OBa(I)}u=w;v=y;c0a(t);OBa(t);Sc(v|0)}function Lba(a,b,c,d,e,f,g,h,j,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;h=r;r=r+32|0;o=h+12|0;p=h;q=KBa(100)|0;k[q+4>>2]=0;k[q+8>>2]=0;k[q>>2]=31496;s=q+12|0;t=o+4|0;u=k[d>>2]|0;k[o>>2]=u;v=d+4|0;w=k[v>>2]|0;k[t>>2]=w;y=d+8|0;k[o+8>>2]=k[y>>2];k[y>>2]=0;k[v>>2]=0;k[d>>2]=0;d=p+4|0;v=k[e>>2]|0;k[p>>2]=v;y=e+4|0;z=k[y>>2]|0;k[d>>2]=z;A=e+8|0;k[p+8>>2]=k[A>>2];k[A>>2]=0;k[y>>2]=0;k[e>>2]=0;e=v;y=z;z=v;A=u;B=w;w=u;x=0;Na(42,s|0,b|0,c|0,o|0,p|0,k[f>>2]|0,(i[g>>0]|0)!=0|0,0,(i[j>>0]|0)!=0|0,(i[l>>0]|0)!=0|0,(i[m>>0]|0)!=0|0,(i[n>>0]|0)!=0|0,0);n=x;x=0;if(n&1){n=Hc()|0;if(v){if((y|0)!=(e|0)){m=y;do{m=m+-12|0;K2a(m)}while((m|0)!=(e|0));k[d>>2]=e}OBa(z)}if(!u){c0a(q);OBa(q);Sc(n|0)}if((B|0)!=(A|0)){m=B;do{m=m+-12|0;K2a(m)}while((m|0)!=(A|0));k[t>>2]=A}OBa(w);c0a(q);OBa(q);Sc(n|0)}if(v){if((y|0)!=(e|0)){v=y;do{v=v+-12|0;K2a(v)}while((v|0)!=(e|0));k[d>>2]=e}OBa(z)}if(u){if((B|0)!=(A|0)){u=B;do{u=u+-12|0;K2a(u)}while((u|0)!=(A|0));k[t>>2]=A}OBa(w)}k[a>>2]=s;k[a+4>>2]=q;i0a(q);k[q+16>>2]=s;s=q+20|0;a=k[s>>2]|0;k[s>>2]=q;if(!a){r=h;return}k0a(a);r=h;return}function Mba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=a+8|0;d=k[a>>2]|0;e=d;if((k[c>>2]|0)-d>>3>>>0>=b>>>0)return;f=a+4|0;g=k[f>>2]|0;h=g;if(!b)i=0;else i=KBa(b<<3)|0;j=i+(g-d>>3<<3)|0;g=j;l=i+(b<<3)|0;if((h|0)==(e|0)){m=g;n=d;o=e}else{d=h;h=j;j=g;while(1){b=d;d=d+-8|0;k[h+-8>>2]=k[d>>2];i=b+-4|0;k[h+-4>>2]=k[i>>2];k[d>>2]=0;k[i>>2]=0;h=j+-8|0;i=h;if((d|0)==(e|0)){p=i;break}else j=i}m=p;n=k[a>>2]|0;o=k[f>>2]|0}k[a>>2]=m;k[f>>2]=g;k[c>>2]=l;l=n;if((o|0)!=(l|0)){c=o;do{o=k[c+-4>>2]|0;c=c+-8|0;if(o)j0a(o)}while((c|0)!=(l|0))}if(!n)return;OBa(n);return}function Nba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=k[b>>2]|0;g=k[b+4>>2]|0;if((f|0)==(g|0)){r=c;return}b=a+8|0;h=f;a:while(1){f=k[h>>2]|0;do if(f){i=iDa(f,5224,5248,0)|0;k[d>>2]=i;j=i;if(i){i=k[e>>2]|0;if((i|0)==(k[b>>2]|0)){x=0;xa(813,a|0,d|0);l=x;x=0;if(l&1)break a;else break}else{k[i>>2]=j;k[e>>2]=(k[e>>2]|0)+4;break}}}else k[d>>2]=0;while(0);h=h+8|0;if((h|0)==(g|0)){m=3;break}}if((m|0)==3){r=c;return}c=Hc()|0;m=k[a>>2]|0;if(!m)Sc(c|0);a=k[e>>2]|0;if((a|0)!=(m|0))k[e>>2]=a+(~((a+-4-m|0)>>>2)<<2);OBa(m);Sc(c|0)}function Oba(a){a=a|0;return 0}function Pba(a,b){a=a|0;b=b|0;var c=0;if(b){c=32;return c|0}c=(k[a+24>>2]|0)/8|0;return c|0}function Qba(a){a=a|0;return (k[a+24>>2]|0)/8|0|0}function Rba(a){a=a|0;return 1}function Sba(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function Tba(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function Uba(a){a=a|0;return 4}function Vba(a,b){a=a|0;b=b|0;var c=0;if(b){c=32;return c|0}c=((k[a+28>>2]|0)+(k[a+24>>2]|0)|0)/8|0;return c|0}function Wba(a){a=a|0;return ((k[a+28>>2]|0)+(k[a+24>>2]|0)|0)/8|0|0}function Xba(a){a=a|0;return 1}function Yba(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function Zba(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function _ba(a){a=a|0;return 2}function $ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=0;k[a+4>>2]=0;return}function aca(a){a=a|0;return 0}function bca(a){a=a|0;return 0}function cca(a){a=a|0;return 0}function dca(a){a=a|0;return 6}function eca(a,b){a=a|0;b=b|0;var c=0;c=k[a+24>>2]|0;return ((c|0)>0&b?32:c)|0}function fca(a){a=a|0;return k[a+24>>2]|0}function gca(a){a=a|0;return 1}function hca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=r;r=r+16|0;d=c;eba(d,b+24|0);x=0;b=Fa(86,d|0,0,293723)|0;e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;K2a(d);r=c;return}}function ica(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function jca(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function kca(a){a=a|0;return 9}function lca(a){a=a|0;return 0}function mca(a){a=a|0;return 0}function nca(a){a=a|0;return 14}function oca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=0;k[a+4>>2]=0;return}function pca(a){a=a|0;return 0}function qca(a){a=a|0;return 0}function rca(a){a=a|0;return 0}function sca(a){a=a|0;return 1}function tca(a){a=a|0;return 0}function uca(a){a=a|0;return 0}function vca(a){a=a|0;return 3}function wca(a,b){a=a|0;b=b|0;return (b?32:1)|0}function xca(a){a=a|0;return 1}function yca(a){a=a|0;return 1}function zca(a,b,c){a=a|0;b=b|0;c=c|0;q2a(a,301569,4);return}function Aca(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function Bca(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function Cca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=0;k[a+4>>2]=0;return}function Dca(a){a=a|0;return 32}function Eca(a,b){a=a|0;b=b|0;ng[k[(k[b>>2]|0)+104>>2]&255](a,b,k[b+24>>2]|0,1);return}function Fca(a,b){a=a|0;b=b|0;return (k[a+24>>2]|0)==(b|0)|0}function Gca(a){a=a|0;return 5}function Hca(a){a=a|0;return (i[a+44>>0]|0)!=0|0}function Ica(a){a=a|0;var b=0;b=k[a+36>>2]|0;return Vf[k[(k[b>>2]|0)+52>>2]&1023](b)|0}function Jca(a){a=a|0;return 7}function Kca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;Tf[k[(k[a>>2]|0)+88>>2]&2047](d,a);a=k[d>>2]|0;x=0;e=Ta(k[(k[a>>2]|0)+28>>2]|0,a|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;a=k[d+4>>2]|0;if(!a)Sc(b|0);j0a(a);Sc(b|0)}else{b=k[d+4>>2]|0;if(!b){r=c;return e|0}j0a(b);r=c;return e|0}return 0}function Lca(a){a=a|0;return 20}function Mca(a){a=a|0;return 1}function Nca(a){a=a|0;return 1}function Oca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=KBa(44)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31848;c=b+12|0;x=0;fb(247,c|0,160,2);d=x;x=0;if(d&1){d=Hc()|0;c0a(b);OBa(b);Sc(d|0)}d=c;c=b;i0a(b);k[b+16>>2]=d;e=b+20|0;b=k[e>>2]|0;k[e>>2]=c;if(!b){k[a>>2]=d;f=a+4|0;k[f>>2]=c;return}k0a(b);k[a>>2]=d;f=a+4|0;k[f>>2]=c;return}function Pca(a,b,c){a=a|0;b=b|0;c=c|0;if(!c){Tf[k[(k[b>>2]|0)+88>>2]&2047](a,b);return}k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function Qca(a){a=a|0;return 8}function Rca(a){a=a|0;return 1}function Sca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(k[b+24>>2]|0){k[a>>2]=0;k[a+4>>2]=0;return}b=KBa(44)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31848;c=b+12|0;x=0;fb(247,c|0,256,0);d=x;x=0;if(d&1){d=Hc()|0;c0a(b);OBa(b);Sc(d|0)}d=c;c=b;i0a(b);k[b+16>>2]=d;e=b+20|0;b=k[e>>2]|0;k[e>>2]=c;if(b)k0a(b);k[a>>2]=d;k[a+4>>2]=c;return}function Tca(a){a=a|0;return 10}function Uca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;Tf[k[(k[a>>2]|0)+88>>2]&2047](d,a);a=k[d>>2]|0;x=0;e=Ta(k[(k[a>>2]|0)+28>>2]|0,a|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;a=k[d+4>>2]|0;if(!a)Sc(b|0);j0a(a);Sc(b|0)}else{b=k[d+4>>2]|0;if(!b){r=c;return e|0}j0a(b);r=c;return e|0}return 0}function Vca(a){a=a|0;return 1}function Wca(a){a=a|0;return 1}function Xca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=(Vf[k[(k[b>>2]|0)+44>>2]&1023](b)|0)<<3;b=KBa(44)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31848;d=b+12|0;x=0;fb(247,d|0,c|0,0);c=x;x=0;if(c&1){c=Hc()|0;c0a(b);OBa(b);Sc(c|0)}c=d;d=b;i0a(b);k[b+16>>2]=c;e=b+20|0;b=k[e>>2]|0;k[e>>2]=d;if(!b){k[a>>2]=c;f=a+4|0;k[f>>2]=d;return}k0a(b);k[a>>2]=c;f=a+4|0;k[f>>2]=d;return}function Yca(a,b,c){a=a|0;b=b|0;c=c|0;if(!c){Tf[k[(k[b>>2]|0)+88>>2]&2047](a,b);return}k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function Zca(a){a=a|0;return 11}function _ca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=0;k[a+4>>2]=0;return}function $ca(a){a=a|0;return 0}function ada(a){a=a|0;return 0}function bda(a){a=a|0;return 12}function cda(a){a=a|0;return 0}function dda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=KBa(44)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31848;c=b+12|0;x=0;fb(247,c|0,256,0);d=x;x=0;if(d&1){d=Hc()|0;c0a(b);OBa(b);Sc(d|0)}d=c;c=b;i0a(b);k[b+16>>2]=d;e=b+20|0;b=k[e>>2]|0;k[e>>2]=c;if(!b){k[a>>2]=d;f=a+4|0;k[f>>2]=c;return}k0a(b);k[a>>2]=d;f=a+4|0;k[f>>2]=c;return}function eda(a,b,c){a=a|0;b=b|0;c=c|0;if(!c){k[a>>2]=0;k[a+4>>2]=0;return}k[a>>2]=k[b+4>>2];c=a+4|0;a=k[b+8>>2]|0;if(a){b=l0a(a)|0;k[c>>2]=b;if(b)return}else k[c>>2]=0;c=Rd(4)|0;k[c>>2]=70084;Gf(c|0,17384,1289)}function fda(a){a=a|0;return 13}function gda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=0;k[a+4>>2]=0;return}function hda(a){a=a|0;return 0}function ida(a){a=a|0;return 0}function jda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+32|0;e=d+12|0;f=d;g=k[b+24>>2]|0;jg[k[(k[g>>2]|0)+76>>2]&511](f,g,c);x=0;c=Fa(86,f|0,0,254743)|0;g=x;x=0;if(g&1){g=Hc()|0;h=M;i=g;K2a(f);Sc(i|0)};k[e>>2]=k[c>>2];k[e+4>>2]=k[c+4>>2];k[e+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;c=Ta(484,e|0,300015)|0;g=x;x=0;if(!(g&1)){k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;K2a(e);K2a(f);r=d;return}d=Hc()|0;c=M;K2a(e);h=c;i=d;K2a(f);Sc(i|0)}function kda(a){a=a|0;return 16}function lda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=0;k[a+4>>2]=0;return}function mda(a){a=a|0;return 0}function nda(a){a=a|0;return 1}function oda(a){a=a|0;return 0}function pda(a){a=a|0;return 15}function qda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=0;k[a+4>>2]=0;return}function rda(a){a=a|0;return 0}function sda(a){a=a|0;return 1}function tda(a){a=a|0;return 0}function uda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function vda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if(!(k[c>>2]|0)){d=a+13|0;e=i[d>>0]|0;do if(e<<24>>24==0&(k[a>>2]|0)==0){x=0;f=Ba(563,4)|0;g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else{g=a+4|0;h=k[g>>2]|0;j=a+8|0;Dyb(f|0,h|0,k[j>>2]<<2|0)|0;OBa(h);k[j>>2]=1;k[a>>2]=1;k[g>>2]=f;l=i[d>>0]|0;m=f;break}}else{k[a+8>>2]=1;l=e;m=k[a+4>>2]|0}while(0);k[(l<<24>>24==0?m:a)>>2]=0;i[a+12>>0]=0;return}do if((a|0)==(b|0)){n=a+13|0;o=a}else{m=k[b+32>>2]|0;l=m>>>0>134217728?134217728:m;m=a+13|0;e=(i[m>>0]|0)==0;d=e?k[a>>2]|0:2;if(l>>>0<=d>>>0){k[a+8>>2]=l;n=m;o=a;break}f=d<<2;d=f>>>0>>0?l:f;f=d>>>0>134217728?134217728:d;d=KBa(f<<2)|0;if(e){e=a+4|0;g=k[e>>2]|0;j=a+8|0;Dyb(d|0,g|0,k[j>>2]<<2|0)|0;OBa(g);p=e;q=j}else{j=a+8|0;Dyb(d|0,a|0,k[j>>2]<<2|0)|0;i[m>>0]=0;p=a+4|0;q=j}k[q>>2]=l;k[a>>2]=f;k[p>>2]=d;n=m;o=a}while(0);p=i[n>>0]|0;q=p<<24>>24==0;m=a+4|0;d=k[m>>2]|0;f=q?d:o;l=a+8|0;j=k[l>>2]|0;e=f+(j<<2)|0;if(j){g=0;h=0;r=f;f=b;while(1){b=Qyb(k[c>>2]|0,0,k[f>>2]|0,0)|0;s=Hyb(b|0,M|0,g|0,h|0)|0;b=M;k[r>>2]=s;r=r+4|0;if((r|0)==(e|0)){t=b;u=0;break}else{g=b;h=0;f=f+4|0}}if(!((t|0)==0&(u|0)==0)){u=j+1|0;f=u>>>0>134217728?134217728:u;u=q?k[o>>2]|0:2;if(f>>>0>u>>>0){h=u<<2;u=h>>>0>>0?f:h;h=u>>>0>134217728?134217728:u;u=KBa(h<<2)|0;if(q){Dyb(u|0,d|0,j<<2|0)|0;OBa(d)}else{Dyb(u|0,a|0,j<<2|0)|0;i[n>>0]=0}k[l>>2]=f;k[o>>2]=h;k[m>>2]=u;v=i[n>>0]|0;w=u}else{k[l>>2]=f;v=p;w=d}k[(v<<24>>24==0?w:o)+(j<<2)>>2]=t}}i[a+12>>0]=0;return}function wda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+16|0;d=c+4|0;e=c;f=k[b>>2]|0;g=k[k[b+4>>2]>>2]|0;if((g|0)<0){k[d>>2]=0-g;if(!(i[f+12>>0]|0)){BB(a,f,d);r=c;return}else{CB(a,f,d);r=c;return}}if((g|0)>0){k[e>>2]=g;if(!(i[f+12>>0]|0)){CB(a,f,e);r=c;return}else{BB(a,f,e);r=c;return}}if((f|0)==(a|0)){r=c;return}e=a+8|0;k[e>>2]=0;g=f+8|0;d=k[g>>2]|0;b=d>>>0>134217728?134217728:d;d=a+13|0;h=i[d>>0]|0;j=h<<24>>24==0;l=j?k[a>>2]|0:2;if(b>>>0>l>>>0){m=l<<2;l=m>>>0>>0?b:m;m=l>>>0>134217728?134217728:l;l=KBa(m<<2)|0;if(j){j=a+4|0;OBa(k[j>>2]|0);n=j}else{i[d>>0]=0;n=a+4|0}k[e>>2]=b;k[a>>2]=m;k[n>>2]=l;o=i[d>>0]|0}else{k[e>>2]=b;o=h}Dyb((o<<24>>24==0?k[a+4>>2]|0:a)|0,((i[f+13>>0]|0)==0?k[f+4>>2]|0:f)|0,k[g>>2]<<2|0)|0;i[a+12>>0]=i[f+12>>0]|0;r=c;return}function xda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+32|0;d=c+16|0;e=c;f=k[k[b>>2]>>2]|0;k[e>>2]=0;b=e+8|0;k[b>>2]=0;g=e+13|0;i[g>>0]=1;h=a+8|0;j=k[h>>2]|0;l=j>>>0>134217728?134217728:j;if(l>>>0>2){m=l>>>0>8?l:8;n=KBa(m<<2)|0;i[g>>0]=0;k[b>>2]=l;k[e>>2]=m;k[e+4>>2]=n;o=n}else{k[b>>2]=l;o=e}l=a+13|0;b=a+4|0;Dyb(o|0,((i[l>>0]|0)==0?k[b>>2]|0:a)|0,j<<2|0)|0;j=a+12|0;o=i[j>>0]|0;i[e+12>>0]=o;k[d>>2]=0;k[d+8>>2]=1;i[d+12>>0]=0;n=d+13|0;i[n>>0]=1;x=0;nb(107,a|0,e|0,((f|0)<0?0-f|0:f)|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;if(!(i[n>>0]|0))OBa(k[d+4>>2]|0);if(i[g>>0]|0)Sc(m|0);OBa(k[e+4>>2]|0);Sc(m|0)}m=(o&255|0)!=(f>>>31|0);i[j>>0]=m&1;if(m&(k[h>>2]|0)==1?(k[((i[l>>0]|0)==0?k[b>>2]|0:a)>>2]|0)==0:0)i[j>>0]=0;if(!(i[n>>0]|0))OBa(k[d+4>>2]|0);if(i[g>>0]|0){r=c;return}OBa(k[e+4>>2]|0);r=c;return}function yda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;I0a(f,a);a=f+8|0;e=f+12|0;k[e>>2]=0;k[f>>2]=39340;k[a>>2]=39360;k[f+16>>2]=b;k[f+20>>2]=c;k[f+24>>2]=d;x=0;va(1504,f|0);x=0;d=Hc()|0;k[a>>2]=20796;a=k[e>>2]|0;if(!a){qCa(f);Sc(d|0)}x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c){qCa(f);Sc(d|0)}k[e>>2]=0;qCa(f);Sc(d|0)}function zda(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+32|0;c=b;b=Rd(32)|0;I0a(c,a);k[c>>2]=47564;d=c+8|0;k[d>>2]=20796;e=k[a+12>>2]|0;k[c+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(c);g=f;h=e}else{e=c+16|0;f=a+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[c>>2]=39340;k[d>>2]=39360;x=0;xa(814,b|0,c|0);f=x;x=0;if(f&1)i=1;else{x=0;fb(149,b|0,6880,925);x=0;i=0}f=Hc()|0;e=M;k[d>>2]=20796;d=c+12|0;a=k[d>>2]|0;if(a){x=0;j=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(j)k[d>>2]=0}qCa(c);if(i){g=e;h=f}else{l=e;m=f;Sc(m|0)}}Fc(b|0);l=g;m=h;Sc(m|0)}function Ada(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=a+28|0;k[c>>2]=21368;I0a(a,b);k[a>>2]=47564;d=a+8|0;k[d>>2]=20796;e=k[b+12>>2]|0;k[a+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(a);g=f;h=e;Sc(h|0)}e=a+16|0;f=b+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[a>>2]=39380;f=a+8|0;k[f>>2]=39408;k[c>>2]=39436;x=0;xa(608,f|0,b+8|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;f=M;k[d>>2]=20796;d=a+12|0;c=k[d>>2]|0;if(c){x=0;e=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(e)k[d>>2]=0}qCa(a);g=f;h=b;Sc(h|0)}function Bda(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(!c){qCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(a);return}k[b>>2]=0;qCa(a);return}function Cda(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}qCa(a);OBa(a);return}function Dda(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(32)|0;x=0;i[c>>0]=i[b>>0]|0;fb(306,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-12>>2]|0)|0}return 0}function Eda(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Rd(32)|0;c=b+28|0;k[c>>2]=21368;I0a(b,a);k[b>>2]=47564;d=b+8|0;k[d>>2]=20796;e=k[a+12>>2]|0;k[b+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;qCa(b);Fc(b|0);Sc(e|0)}e=b+16|0;f=a+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[b>>2]=39380;k[d>>2]=39408;k[c>>2]=39436;Gf(b|0,6880,925)}function Fda(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function Gda(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[a>>2]=0}qCa(b);OBa(b);return}function Hda(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(32)|0;x=0;i[c>>0]=i[b>>0]|0;fb(306,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-12>>2]|0)|0}return 0}function Ida(a){a=a|0;Eda(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function Jda(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function Kda(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);OBa(b);return}k[a>>2]=0;qCa(b);OBa(b);return}function Lda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=a+28|0;k[c>>2]=21368;I0a(a,b);k[a>>2]=47564;d=a+8|0;k[d>>2]=20796;e=k[b+12>>2]|0;k[a+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(a);g=f;h=e;Sc(h|0)}e=a+16|0;f=b+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[a>>2]=39380;f=a+8|0;k[f>>2]=39408;k[c>>2]=39436;x=0;xa(608,f|0,b+8|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;f=M;k[d>>2]=20796;d=a+12|0;c=k[d>>2]|0;if(c){x=0;e=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(e)k[d>>2]=0}qCa(a);g=f;h=b;Sc(h|0)}function Mda(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(!c){qCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(a);return}k[b>>2]=0;qCa(a);return}function Nda(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}qCa(a);OBa(a);return}function Oda(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function Pda(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[a>>2]=0}qCa(b);OBa(b);return}function Qda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=r;r=r+80|0;e=d+48|0;f=d+32|0;g=d+16|0;h=d;l=d+64|0;k[e>>2]=0;k[e+8>>2]=1;i[e+12>>0]=0;i[e+13>>0]=1;k[g>>2]=0;m=g+8|0;k[m>>2]=0;n=g+13|0;i[n>>0]=1;o=k[b+8>>2]|0;p=o>>>0>134217728?134217728:o;do if(p>>>0>2){q=p>>>0>8?p:8;x=0;s=Ba(563,q<<2|0)|0;t=x;x=0;if(!(t&1)){i[n>>0]=0;k[m>>2]=p;k[g>>2]=q;k[g+4>>2]=s;u=s;break}s=Hc()|0;v=M;w=s;Sc(w|0)}else{k[m>>2]=p;u=g}while(0);Dyb(u|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,o<<2|0)|0;i[g+12>>0]=i[b+12>>0]|0;k[h>>2]=0;b=h+8|0;k[b>>2]=0;o=h+13|0;i[o>>0]=1;u=k[c+8>>2]|0;p=u>>>0>134217728?134217728:u;do if(p>>>0>2){m=p>>>0>8?p:8;x=0;s=Ba(563,m<<2|0)|0;q=x;x=0;if(q&1){q=Hc()|0;y=M;z=q;break}else{i[o>>0]=0;k[b>>2]=p;k[h>>2]=m;k[h+4>>2]=s;A=s;B=9;break}}else{k[b>>2]=p;A=h;B=9}while(0);do if((B|0)==9){Dyb(A|0,((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)|0,u<<2|0)|0;i[h+12>>0]=i[c+12>>0]|0;x=0;fb(307,f|0,g|0,h|0);p=x;x=0;if(p&1){p=Hc()|0;b=M;if(i[o>>0]|0){y=b;z=p;break}OBa(k[h+4>>2]|0);y=b;z=p;break}if(!(i[o>>0]|0))OBa(k[h+4>>2]|0);if(!(i[n>>0]|0))OBa(k[g+4>>2]|0);p=j[f+12>>1]|0;b=p&255;s=(p&65535)>>>8&255;a:do if(!(b<<24>>24)){p=f+8|0;m=k[p>>2]|0;b:do if((m|0)==1){q=s<<24>>24==0?k[f+4>>2]|0:f;t=1;while(1){t=t+-1|0;if((t|0)<=-1)break b;C=k[q+(t<<2)>>2]|0;D=k[e+(t<<2)>>2]|0;if((C|0)!=(D|0)){E=C;F=D;break}}if(E>>>0<=F>>>0){B=21;break a}}else if(m>>>0<=1){B=21;break a}while(0);k[a>>2]=0;t=a+8|0;k[t>>2]=0;q=a+13|0;i[q>>0]=1;D=m>>>0>134217728?134217728:m;do if(D>>>0>2){C=D>>>0>8?D:8;x=0;G=Ba(563,C<<2|0)|0;H=x;x=0;if(H&1){H=Hc()|0;I=M;J=H;B=40;break a}else{i[q>>0]=0;k[t>>2]=D;k[a>>2]=C;k[a+4>>2]=G;K=G;break}}else{k[t>>2]=D;K=a}while(0);Dyb(K|0,(s<<24>>24==0?k[f+4>>2]|0:f)|0,k[p>>2]<<2|0)|0;i[a+12>>0]=b;L=s;B=30}else B=21;while(0);do if((B|0)==21){k[l>>2]=f;k[a>>2]=0;k[a+8>>2]=1;i[a+12>>0]=0;s=a+13|0;i[s>>0]=1;x=0;Ta(592,a|0,l|0)|0;b=x;x=0;if(!(b&1)){L=i[f+13>>0]|0;B=30;break}b=Hc()|0;D=M;if(!(i[s>>0]|0)){OBa(k[a+4>>2]|0);I=D;J=b;B=40}else{I=D;J=b;B=40}}while(0);if((B|0)==30){if(L<<24>>24){r=d;return}OBa(k[f+4>>2]|0);r=d;return}else if((B|0)==40){if(i[f+13>>0]|0){v=I;w=J;Sc(w|0)}OBa(k[f+4>>2]|0);v=I;w=J;Sc(w|0)}}while(0);if(i[n>>0]|0){v=y;w=z;Sc(w|0)}OBa(k[g+4>>2]|0);v=y;w=z;Sc(w|0)}function Rda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0;c=r;r=r+64|0;d=c+32|0;e=c+24|0;f=c+16|0;g=c+8|0;h=c;l=b+8|0;if(!((k[l>>2]|0)==(a|0)?1:(k[b+12>>2]|0)==(a|0))){m=b;n=k[m+4>>2]|0;o=e;k[o>>2]=k[m>>2];k[o+4>>2]=n;ZP(a,e,c+51|0);e=l;n=k[e+4>>2]|0;o=f;k[o>>2]=k[e>>2];k[o+4>>2]=n;Tda(a,f,c+50|0);r=c;return}if(!((k[b>>2]|0)==(a|0)?1:(k[b+4>>2]|0)==(a|0))){f=l;l=k[f+4>>2]|0;n=g;k[n>>2]=k[f>>2];k[n+4>>2]=l;ZP(a,g,c+49|0);g=b;l=k[g+4>>2]|0;n=h;k[n>>2]=k[g>>2];k[n+4>>2]=l;Tda(a,h,c+48|0);r=c;return}k[d>>2]=0;h=d+8|0;k[h>>2]=1;l=d+12|0;i[l>>0]=0;n=d+13|0;i[n>>0]=1;x=0;fb(305,d|0,b|0,c+52|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[n>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}else{b=d;g=k[b>>2]|0;f=k[b+4>>2]|0;b=a;o=k[b+4>>2]|0;e=d;k[e>>2]=k[b>>2];k[e+4>>2]=o;e=a;k[e>>2]=g;k[e+4>>2]=f;f=a+12|0;e=j[l>>1]|0;i[l>>0]=i[f>>0]|0;i[f>>0]=e;f=a+13|0;l=i[f>>0]|0;i[n>>0]=l;i[f>>0]=(e&65535)>>>8;e=a+8|0;a=k[h>>2]|0;k[h>>2]=k[e>>2];k[e>>2]=a;if(!(l<<24>>24))OBa(o);r=c;return}}function Sda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=k[b>>2]|0;if((c|0)==(a|0)){b=a+12|0;d=b;e=i[b>>0]|0}else{b=a+8|0;k[b>>2]=0;f=c+8|0;g=k[f>>2]|0;h=g>>>0>134217728?134217728:g;g=a+13|0;j=i[g>>0]|0;l=j<<24>>24==0;if(l)m=k[a>>2]|0;else m=2;if(h>>>0>m>>>0){n=m<<2;m=n>>>0>>0?h:n;n=m>>>0>134217728?134217728:m;m=KBa(n<<2)|0;if(l){l=a+4|0;OBa(k[l>>2]|0);o=l}else{i[g>>0]=0;o=a+4|0}k[b>>2]=h;k[a>>2]=n;k[o>>2]=m;p=i[g>>0]|0}else{k[b>>2]=h;p=j}if(!(p<<24>>24))q=k[a+4>>2]|0;else q=a;Dyb(q|0,((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)|0,k[f>>2]<<2|0)|0;f=i[c+12>>0]|0;c=a+12|0;i[c>>0]=f;d=c;e=f}i[d>>0]=e^1;if(e<<24>>24==1)return a|0;if((k[a+8>>2]|0)!=1)return a|0;if(!(i[a+13>>0]|0))r=k[a+4>>2]|0;else r=a;if(k[r>>2]|0)return a|0;i[d>>0]=0;return a|0}function Tda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=r;r=r+32|0;d=c;k[d>>2]=0;k[d+8>>2]=1;i[d+12>>0]=0;e=d+13|0;i[e>>0]=1;x=0;fb(229,d|0,b|0,c+16|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[e>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}x=0;fb(217,a|0,a|0,d|0);a=x;x=0;if(a&1){a=Hc()|0;if(i[e>>0]|0)Sc(a|0);OBa(k[d+4>>2]|0);Sc(a|0)}else{if(i[e>>0]|0){r=c;return}OBa(k[d+4>>2]|0);r=c;return}}function Uda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+32|0;e=d+16|0;f=d+20|0;g=d;k[g>>2]=0;k[g+8>>2]=1;i[g+12>>0]=0;i[g+13>>0]=1;h=b+12|0;l=c+12|0;m=c+8|0;n=c+13|0;o=c+4|0;p=b+8|0;q=b+13|0;s=b+4|0;while(1){t=j[h>>1]|0;if(((t&255)<<24>>24==0?(k[p>>2]|0)==1:0)?(k[((t&65535)<256?k[s>>2]|0:b)>>2]|0)==(k[g>>2]|0):0){u=5;break}k[e>>2]=b;Vda(c,e,f);t=j[l>>1]|0;if(((t&255)<<24>>24==0?(k[m>>2]|0)==1:0)?(k[((t&65535)<256?k[o>>2]|0:c)>>2]|0)==(k[g>>2]|0):0){u=11;break}k[e>>2]=c;Vda(b,e,f)}if((u|0)==5){k[a>>2]=0;f=k[m>>2]|0;k[a+8>>2]=f;e=j[l>>1]|0;i[a+12>>0]=e;l=(e&65535)>>>8&255;i[a+13>>0]=l;if(!(l<<24>>24)){l=c;e=k[l+4>>2]|0;g=a;k[g>>2]=k[l>>2];k[g+4>>2]=e;k[m>>2]=0;i[n>>0]=1;r=d;return}else{Dyb(a|0,c|0,f<<2|0)|0;r=d;return}}else if((u|0)==11){k[a>>2]=0;u=k[p>>2]|0;k[a+8>>2]=u;f=j[h>>1]|0;i[a+12>>0]=f;h=(f&65535)>>>8&255;i[a+13>>0]=h;if(!(h<<24>>24)){h=b;f=k[h+4>>2]|0;c=a;k[c>>2]=k[h>>2];k[c+4>>2]=f;k[p>>2]=0;i[q>>0]=1;r=d;return}else{Dyb(a|0,b|0,u<<2|0)|0;r=d;return}}}function Vda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c;e=k[b>>2]|0;k[d>>2]=0;b=d+8|0;k[b>>2]=0;f=d+13|0;i[f>>0]=1;g=a+8|0;h=k[g>>2]|0;j=h>>>0>134217728?134217728:h;if(j>>>0>2){l=j>>>0>8?j:8;m=KBa(l<<2)|0;i[f>>0]=0;k[b>>2]=j;k[d>>2]=l;k[d+4>>2]=m;n=m}else{k[b>>2]=j;n=d}j=a+13|0;b=a+4|0;Dyb(n|0,((i[j>>0]|0)==0?k[b>>2]|0:a)|0,h<<2|0)|0;h=a+12|0;n=i[h>>0]|0;i[d+12>>0]=n;x=0;nb(110,0,d|0,e|0,a|0);e=x;x=0;if(e&1){e=Hc()|0;if(i[f>>0]|0)Sc(e|0);OBa(k[d+4>>2]|0);Sc(e|0)}i[h>>0]=n;if(n<<24>>24!=0&(k[g>>2]|0)==1?(k[((i[j>>0]|0)==0?k[b>>2]|0:a)>>2]|0)==0:0)i[h>>0]=0;if(i[f>>0]|0){r=c;return}OBa(k[d+4>>2]|0);r=c;return}function Wda(a){a=a|0;nCa(a);OBa(a);return}function Xda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+32|0;d=c+16|0;e=c;f=k[b>>2]|0;k[e>>2]=0;b=e+8|0;k[b>>2]=0;g=e+13|0;i[g>>0]=1;h=a+8|0;j=k[h>>2]|0;l=j>>>0>134217728?134217728:j;if(l>>>0>2){m=l>>>0>8?l:8;n=KBa(m<<2)|0;i[g>>0]=0;k[b>>2]=l;k[e>>2]=m;k[e+4>>2]=n;o=n}else{k[b>>2]=l;o=e}l=a+13|0;b=a+4|0;Dyb(o|0,((i[l>>0]|0)==0?k[b>>2]|0:a)|0,j<<2|0)|0;j=a+12|0;o=i[j>>0]|0;i[e+12>>0]=o;k[d>>2]=0;k[d+8>>2]=1;i[d+12>>0]=0;n=d+13|0;i[n>>0]=1;m=i[f+12>>0]|0;x=0;nb(110,a|0,e|0,f|0,d|0);f=x;x=0;if(f&1){f=Hc()|0;if(!(i[n>>0]|0))OBa(k[d+4>>2]|0);if(i[g>>0]|0)Sc(f|0);OBa(k[e+4>>2]|0);Sc(f|0)}f=o<<24>>24!=0^m<<24>>24!=0;i[j>>0]=f&1;if(f&(k[h>>2]|0)==1?(k[((i[l>>0]|0)==0?k[b>>2]|0:a)>>2]|0)==0:0)i[j>>0]=0;if(!(i[n>>0]|0))OBa(k[d+4>>2]|0);if(i[g>>0]|0){r=c;return}OBa(k[e+4>>2]|0);r=c;return}function Yda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+64|0;d=c+32|0;e=c+16|0;f=c+8|0;g=c+54|0;h=c;l=c+53|0;m=c+40|0;n=c+52|0;o=k[b>>2]|0;p=(o|0)==(a|0);if(p)q=1;else q=(k[b+8>>2]|0)==(a|0)?1:(k[b+4>>2]|0)==(a|0);s=b+12|0;t=k[s>>2]|0;u=k[b+16>>2]|0;if(!((t|0)==(a|0)|(u|0)==(a|0))){v=b+4|0;w=k[v>>2]|0;y=k[v+4>>2]|0;if(p){p=d;k[p>>2]=w;k[p+4>>2]=y;Tda(a,d,e)}else{p=f;k[p>>2]=w;k[p+4>>2]=y;ZP(a,f,g);BM(a,a,o)}o=s;s=k[o+4>>2]|0;g=h;k[g>>2]=k[o>>2];k[g+4>>2]=s;_da(a,h,l);r=c;return}if(q){k[e>>2]=0;q=e+8|0;k[q>>2]=1;l=e+12|0;i[l>>0]=0;h=e+13|0;i[h>>0]=1;x=0;fb(304,e|0,b|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;if(i[h>>0]|0)Sc(d|0);OBa(k[e+4>>2]|0);Sc(d|0)}else{d=e;s=k[d>>2]|0;g=k[d+4>>2]|0;d=a;o=k[d+4>>2]|0;f=e;k[f>>2]=k[d>>2];k[f+4>>2]=o;f=a;k[f>>2]=s;k[f+4>>2]=g;g=a+12|0;f=j[l>>1]|0;i[l>>0]=i[g>>0]|0;i[g>>0]=f;g=a+13|0;l=i[g>>0]|0;i[h>>0]=l;i[g>>0]=(f&65535)>>>8;f=a+8|0;g=k[q>>2]|0;k[q>>2]=k[f>>2];k[f>>2]=g;if(!(l<<24>>24))OBa(o);r=c;return}}BM(a,t,u);k[m>>2]=k[b>>2];k[m+4>>2]=k[b+4>>2];k[m+8>>2]=k[b+8>>2];$da(a,m,n);n=a+12|0;m=i[n>>0]|0;i[n>>0]=m^1;if(m<<24>>24==1){r=c;return}if((k[a+8>>2]|0)!=1){r=c;return}if(!(i[a+13>>0]|0))z=k[a+4>>2]|0;else z=a;if(k[z>>2]|0){r=c;return}i[n>>0]=0;r=c;return}function Zda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+32|0;d=c;if(!((k[b>>2]|0)==(a|0)?1:(k[b+4>>2]|0)==(a|0))){Tda(a,b,c+16|0);r=c;return a|0}k[d>>2]=0;k[d+8>>2]=1;i[d+12>>0]=0;e=d+13|0;i[e>>0]=1;x=0;fb(229,d|0,b|0,c+17|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[e>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}x=0;fb(217,a|0,a|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[e>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}else{if(!(i[e>>0]|0))OBa(k[d+4>>2]|0);r=c;return a|0}return 0}function _da(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c;k[d>>2]=0;k[d+8>>2]=1;e=d+12|0;i[e>>0]=0;f=d+13|0;i[f>>0]=1;x=0;fb(217,d|0,k[b>>2]|0,k[b+4>>2]|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[f>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}x=0;if((i[a+12>>0]|0)!=0^(i[e>>0]|0)!=0){aC(a,a,d);e=x;x=0;if(e&1)g=11;else g=8}else{$B(a,a,d);a=x;x=0;if(a&1)g=11;else g=8}if((g|0)==8){if(i[f>>0]|0){r=c;return}OBa(k[d+4>>2]|0);r=c;return}else if((g|0)==11){g=Hc()|0;if(i[f>>0]|0)Sc(g|0);OBa(k[d+4>>2]|0);Sc(g|0)}}function $da(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+48|0;d=c+24|0;e=c+16|0;f=c+32|0;g=c;k[g>>2]=0;k[g+8>>2]=1;h=g+12|0;i[h>>0]=0;j=g+13|0;i[j>>0]=1;l=b+4|0;if((k[b>>2]|0)==(g|0)){m=l;n=k[m+4>>2]|0;o=d;k[o>>2]=k[m>>2];k[o+4>>2]=n;x=0;fb(308,g|0,d|0,c+33|0);d=x;x=0;if(d&1)p=6;else q=g}else{d=l;l=k[d+4>>2]|0;n=e;k[n>>2]=k[d>>2];k[n+4>>2]=l;x=0;fb(229,g|0,e|0,f|0);f=x;x=0;if(!(f&1)?(x=0,fb(217,g|0,g|0,k[b>>2]|0),b=x,x=0,!(b&1)):0)q=g;else p=6}if((p|0)==6){b=Hc()|0;if(i[j>>0]|0)Sc(b|0);OBa(k[g+4>>2]|0);Sc(b|0)}x=0;if((i[a+12>>0]|0)!=0^(i[h>>0]|0)!=0){aC(a,a,q);h=x;x=0;if(h&1)p=15;else p=12}else{$B(a,a,q);q=x;x=0;if(q&1)p=15;else p=12}if((p|0)==12){if(i[j>>0]|0){r=c;return}OBa(k[g+4>>2]|0);r=c;return}else if((p|0)==15){p=Hc()|0;if(i[j>>0]|0)Sc(p|0);OBa(k[g+4>>2]|0);Sc(p|0)}}function aea(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0;d=a+8|0;c=k[d>>2]|0;e=k[b+8>>2]|0;f=c>>>0>>0;g=f?e:c;h=g>>>0>134217728?134217728:g;j=a+13|0;l=i[j>>0]|0;m=l<<24>>24==0;n=m?k[a>>2]|0:2;if(h>>>0>n>>>0){o=n<<2;n=o>>>0>>0?h:o;o=n>>>0>134217728?134217728:n;n=KBa(o<<2)|0;if(m){m=a+4|0;p=k[m>>2]|0;Dyb(n|0,p|0,c<<2|0)|0;OBa(p);q=m}else{Dyb(n|0,a|0,c<<2|0)|0;i[j>>0]=0;q=a+4|0}k[d>>2]=h;k[a>>2]=o;k[q>>2]=n;r=i[j>>0]|0}else{k[d>>2]=h;r=l}l=a+4|0;h=r<<24>>24==0?k[l>>2]|0:a;r=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;if(f)Fyb(h+(c<<2)|0,0,(c>>>0>e>>>0?c:e)-c<<2|0)|0;f=a+12|0;n=(i[b+12>>0]|0)!=0;b=(e|0)==0;do if(!(i[f>>0]|0))if(n){if(b){s=1;t=0}else{q=1;o=0;m=0;while(1){p=Hyb(~k[r+(m<<2)>>2]|0,0,q|0,o|0)|0;u=M;v=h+(m<<2)|0;k[v>>2]=p&k[v>>2];m=m+1|0;if((m|0)==(e|0)){s=u;t=0;break}else{q=u;o=0}}}if(e>>>0>>0){w=s;x=t;y=e}else{z=34;break}while(1){o=Hyb(w|0,x|0,-1,0)|0;q=h+(y<<2)|0;k[q>>2]=k[q>>2]&o;y=y+1|0;if(y>>>0>=g>>>0){z=34;break}else{w=M;x=0}}}else{if(!b){o=0;do{q=h+(o<<2)|0;k[q>>2]=k[r+(o<<2)>>2]&k[q>>2];o=o+1|0}while((o|0)!=(e|0))}if(e>>>0>=g>>>0){z=34;break}Fyb(h+(e<<2)|0,0,(c>>>0>e>>>0?c:e)-e<<2|0)|0;z=34;break}else{if(!n){if(!b){o=1;q=0;m=0;while(1){u=h+(m<<2)|0;v=Hyb(~k[u>>2]|0,0,o|0,q|0)|0;k[u>>2]=v&k[r+(m<<2)>>2];m=m+1|0;if((m|0)==(e|0))break;else{o=M;q=0}}}if(e>>>0>=g>>>0){z=34;break}Fyb(h+(e<<2)|0,0,(c>>>0>e>>>0?c:e)-e<<2|0)|0;z=34;break}if(b){A=1;B=0;C=1;D=0}else{q=1;o=0;m=1;v=0;u=0;while(1){p=h+(u<<2)|0;E=Hyb(~k[p>>2]|0,0,m|0,v|0)|0;F=M;G=Hyb(~k[r+(u<<2)>>2]|0,0,q|0,o|0)|0;H=M;k[p>>2]=G&E;u=u+1|0;if((u|0)==(e|0)){A=H;B=0;C=F;D=0;break}else{q=H;o=0;m=F;v=0}}}if(e>>>0>>0){v=C;m=D;o=A;q=B;u=e;while(1){F=h+(u<<2)|0;H=Hyb(~k[F>>2]|0,0,v|0,m|0)|0;E=M;G=Hyb(o|0,q|0,-1,0)|0;p=M;k[F>>2]=H&G;u=u+1|0;if(u>>>0>=g>>>0){I=E;J=0;K=p;L=0;break}else{v=E;m=0;o=p;q=0}}}else{I=C;J=D;K=A;L=B}q=Hyb(I|0,J|0,-1,0)|0;o=M;o=Hyb(K|0,L|0,-1,0)|0;if((o&q|0)<0){i[f>>0]=1;q=k[d>>2]|0;if((q|0)==1?(k[((i[j>>0]|0)==0?k[l>>2]|0:a)>>2]|0)==0:0)i[f>>0]=0;if(!g)N=q;else{o=1;m=0;v=0;while(1){u=h+(v<<2)|0;p=Hyb(~k[u>>2]|0,0,o|0,m|0)|0;k[u>>2]=p;v=v+1|0;if(v>>>0>=g>>>0){N=q;break}else{o=M;m=0}}}}else z=34}while(0);if((z|0)==34){i[f>>0]=0;N=k[d>>2]|0}f=(i[j>>0]|0)==0?k[l>>2]|0:a;a=N+-1|0;if(!a)return;else O=a;while(1){if(k[f+(O<<2)>>2]|0){z=38;break}k[d>>2]=O;O=O+-1|0;if(!O){z=38;break}}if((z|0)==38)return}function bea(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;d=a+8|0;c=k[d>>2]|0;e=k[b+8>>2]|0;f=c>>>0>>0;g=f?e:c;h=g>>>0>134217728?134217728:g;j=a+13|0;l=i[j>>0]|0;m=l<<24>>24==0;n=m?k[a>>2]|0:2;if(h>>>0>n>>>0){o=n<<2;n=o>>>0>>0?h:o;o=n>>>0>134217728?134217728:n;n=KBa(o<<2)|0;if(m){m=a+4|0;p=k[m>>2]|0;Dyb(n|0,p|0,c<<2|0)|0;OBa(p);q=m}else{Dyb(n|0,a|0,c<<2|0)|0;i[j>>0]=0;q=a+4|0}k[d>>2]=h;k[a>>2]=o;k[q>>2]=n;r=i[j>>0]|0}else{k[d>>2]=h;r=l}l=a+4|0;h=r<<24>>24==0?k[l>>2]|0:a;r=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;if(f)Fyb(h+(c<<2)|0,0,(c>>>0>e>>>0?c:e)-c<<2|0)|0;c=a+12|0;f=(i[b+12>>0]|0)!=0;b=(e|0)==0;a:do if(!(i[c>>0]|0)){if(!f){if(b){s=36;break}else t=0;while(1){n=h+(t<<2)|0;k[n>>2]=k[r+(t<<2)>>2]^k[n>>2];t=t+1|0;if((t|0)==(e|0)){s=36;break a}}}if(b){u=0;v=1}else{n=1;q=0;o=0;while(1){m=Hyb(~k[r+(o<<2)>>2]|0,0,n|0,q|0)|0;p=M;w=h+(o<<2)|0;k[w>>2]=m^k[w>>2];o=o+1|0;if((o|0)==(e|0)){x=p;y=0;break}else{n=p;q=0}}q=Hyb(x|0,y|0,-1,0)|0;u=q;v=M}if(e>>>0>>0){q=u;n=v;o=e;while(1){p=h+(o<<2)|0;k[p>>2]=k[p>>2]^q;o=o+1|0;p=Hyb(n|0,0,-1,0)|0;if(o>>>0>=g>>>0){z=p;break}else{q=p;n=M}}A=z;s=30}else{A=u;s=30}}else if(f){if(b){B=1;C=0;D=1;E=0}else{n=1;q=0;o=1;p=0;w=0;while(1){m=h+(w<<2)|0;F=Hyb(~k[m>>2]|0,0,n|0,q|0)|0;G=M;H=Hyb(~k[r+(w<<2)>>2]|0,0,o|0,p|0)|0;I=M;k[m>>2]=H^F;w=w+1|0;if((w|0)==(e|0)){B=I;C=0;D=G;E=0;break}else{n=G;q=0;o=I;p=0}}}if(e>>>0>>0){p=D;o=E;q=B;n=C;w=e;while(1){I=h+(w<<2)|0;G=Hyb(~k[I>>2]|0,0,p|0,o|0)|0;F=M;H=Hyb(q|0,n|0,-1,0)|0;m=M;k[I>>2]=G^H;w=w+1|0;if(w>>>0>=g>>>0){J=F;K=0;L=m;N=0;break}else{p=F;o=0;q=m;n=0}}}else{J=D;K=E;L=B;N=C}n=Hyb(J|0,K|0,-1,0)|0;q=M;q=Hyb(L|0,N|0,-1,0)|0;A=q^n;s=30;break}else{if(b){O=1;P=0}else{n=1;q=0;o=0;while(1){p=h+(o<<2)|0;w=Hyb(~k[p>>2]|0,0,n|0,q|0)|0;m=M;k[p>>2]=w^k[r+(o<<2)>>2];o=o+1|0;if((o|0)==(e|0)){O=m;P=0;break}else{n=m;q=0}}}if(e>>>0>>0){q=O;n=P;o=e;while(1){m=h+(o<<2)|0;w=Hyb(~k[m>>2]|0,0,q|0,n|0)|0;p=M;k[m>>2]=w;o=o+1|0;if(o>>>0>=g>>>0){Q=p;R=0;break}else{q=p;n=0}}}else{Q=O;R=P}n=Hyb(Q|0,R|0,-1,0)|0;A=n;s=30;break}while(0);if((s|0)==30)if((A|0)<0){i[c>>0]=1;A=k[d>>2]|0;if((A|0)==1?(k[((i[j>>0]|0)==0?k[l>>2]|0:a)>>2]|0)==0:0)i[c>>0]=0;if(!g)S=A;else{R=1;Q=0;P=0;while(1){O=h+(P<<2)|0;e=Hyb(~k[O>>2]|0,0,R|0,Q|0)|0;k[O>>2]=e;P=P+1|0;if(P>>>0>=g>>>0){S=A;break}else{R=M;Q=0}}}}else s=36;if((s|0)==36){i[c>>0]=0;S=k[d>>2]|0}c=(i[j>>0]|0)==0?k[l>>2]|0:a;a=S+-1|0;if(!a)return;else T=a;while(1){if(k[c+(T<<2)>>2]|0){s=40;break}k[d>>2]=T;T=T+-1|0;if(!T){s=40;break}}if((s|0)==40)return}function cea(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;d=a+8|0;c=k[d>>2]|0;e=k[b+8>>2]|0;f=c>>>0>>0;g=f?e:c;h=g>>>0>134217728?134217728:g;j=a+13|0;l=i[j>>0]|0;m=l<<24>>24==0;n=m?k[a>>2]|0:2;if(h>>>0>n>>>0){o=n<<2;n=o>>>0>>0?h:o;o=n>>>0>134217728?134217728:n;n=KBa(o<<2)|0;if(m){m=a+4|0;p=k[m>>2]|0;Dyb(n|0,p|0,c<<2|0)|0;OBa(p);q=m}else{Dyb(n|0,a|0,c<<2|0)|0;i[j>>0]=0;q=a+4|0}k[d>>2]=h;k[a>>2]=o;k[q>>2]=n;r=i[j>>0]|0}else{k[d>>2]=h;r=l}l=a+4|0;h=r<<24>>24==0?k[l>>2]|0:a;r=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;if(f)Fyb(h+(c<<2)|0,0,(c>>>0>e>>>0?c:e)-c<<2|0)|0;c=a+12|0;f=(i[b+12>>0]|0)!=0;b=(e|0)==0;a:do if(!(i[c>>0]|0)){if(!f){if(b){s=36;break}else t=0;while(1){n=h+(t<<2)|0;k[n>>2]=k[r+(t<<2)>>2]|k[n>>2];t=t+1|0;if((t|0)==(e|0)){s=36;break a}}}if(b){u=0;v=1}else{n=1;q=0;o=0;while(1){m=Hyb(~k[r+(o<<2)>>2]|0,0,n|0,q|0)|0;p=M;w=h+(o<<2)|0;k[w>>2]=m|k[w>>2];o=o+1|0;if((o|0)==(e|0)){x=p;y=0;break}else{n=p;q=0}}q=Hyb(x|0,y|0,-1,0)|0;u=q;v=M}if(e>>>0>>0){q=u;n=v;o=e;while(1){p=h+(o<<2)|0;k[p>>2]=k[p>>2]|q;o=o+1|0;p=Hyb(n|0,0,-1,0)|0;if(o>>>0>=g>>>0){z=p;break}else{q=p;n=M}}A=z;s=30}else{A=u;s=30}}else if(f){if(b){B=1;C=0;D=1;E=0}else{n=1;q=0;o=1;p=0;w=0;while(1){m=h+(w<<2)|0;F=Hyb(~k[m>>2]|0,0,n|0,q|0)|0;G=M;H=Hyb(~k[r+(w<<2)>>2]|0,0,o|0,p|0)|0;I=M;k[m>>2]=H|F;w=w+1|0;if((w|0)==(e|0)){B=I;C=0;D=G;E=0;break}else{n=G;q=0;o=I;p=0}}}if(e>>>0>>0){p=D;o=E;q=B;n=C;w=e;while(1){I=h+(w<<2)|0;G=Hyb(~k[I>>2]|0,0,p|0,o|0)|0;F=M;H=Hyb(q|0,n|0,-1,0)|0;m=M;k[I>>2]=G|H;w=w+1|0;if(w>>>0>=g>>>0){J=F;K=0;L=m;N=0;break}else{p=F;o=0;q=m;n=0}}}else{J=D;K=E;L=B;N=C}n=Hyb(J|0,K|0,-1,0)|0;q=M;q=Hyb(L|0,N|0,-1,0)|0;A=q|n;s=30;break}else{if(b){O=1;P=0}else{n=1;q=0;o=0;while(1){p=h+(o<<2)|0;w=Hyb(~k[p>>2]|0,0,n|0,q|0)|0;m=M;k[p>>2]=w|k[r+(o<<2)>>2];o=o+1|0;if((o|0)==(e|0)){O=m;P=0;break}else{n=m;q=0}}}if(e>>>0>>0){q=O;n=P;o=e;while(1){m=h+(o<<2)|0;w=Hyb(~k[m>>2]|0,0,q|0,n|0)|0;p=M;k[m>>2]=w;o=o+1|0;if(o>>>0>=g>>>0){Q=p;R=0;break}else{q=p;n=0}}}else{Q=O;R=P}n=Hyb(Q|0,R|0,-1,0)|0;A=n;s=30;break}while(0);if((s|0)==30)if((A|0)<0){i[c>>0]=1;A=k[d>>2]|0;if((A|0)==1?(k[((i[j>>0]|0)==0?k[l>>2]|0:a)>>2]|0)==0:0)i[c>>0]=0;if(!g)S=A;else{R=1;Q=0;P=0;while(1){O=h+(P<<2)|0;e=Hyb(~k[O>>2]|0,0,R|0,Q|0)|0;k[O>>2]=e;P=P+1|0;if(P>>>0>=g>>>0){S=A;break}else{R=M;Q=0}}}}else s=36;if((s|0)==36){i[c>>0]=0;S=k[d>>2]|0}c=(i[j>>0]|0)==0?k[l>>2]|0:a;a=S+-1|0;if(!a)return;else T=a;while(1){if(k[c+(T<<2)>>2]|0){s=40;break}k[d>>2]=T;T=T+-1|0;if(!T){s=40;break}}if((s|0)==40)return}function dea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;c=r;r=r+16|0;d=c+4|0;e=c;f=k[b+4>>2]|0;k[d>>2]=k[k[b>>2]>>2];eea(a,d,f);f=k[k[b+8>>2]>>2]|0;if(!f){r=c;return}if((f|0)<0){k[d>>2]=0-f;if(!(i[a+12>>0]|0)){CB(a,a,d);r=c;return}else{BB(a,a,d);r=c;return}}else{k[e>>2]=f;if(!(i[a+12>>0]|0)){BB(a,a,e);r=c;return}else{CB(a,a,e);r=c;return}}}function eea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+16|0;e=d+4|0;f=d;g=k[b>>2]|0;do if(!g){if((a|0)!=(c|0)){b=a+8|0;k[b>>2]=0;h=c+8|0;j=k[h>>2]|0;l=j>>>0>134217728?134217728:j;j=a+13|0;m=i[j>>0]|0;n=m<<24>>24==0;o=n?k[a>>2]|0:2;if(l>>>0>o>>>0){p=o<<2;o=p>>>0>>0?l:p;p=o>>>0>134217728?134217728:o;o=KBa(p<<2)|0;if(n){n=a+4|0;OBa(k[n>>2]|0);q=n}else{i[j>>0]=0;q=a+4|0}k[b>>2]=l;k[a>>2]=p;k[q>>2]=o;s=i[j>>0]|0}else{k[b>>2]=l;s=m}Dyb((s<<24>>24==0?k[a+4>>2]|0:a)|0,((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)|0,k[h>>2]<<2|0)|0;i[a+12>>0]=i[c+12>>0]|0}}else if((g|0)<0){k[e>>2]=0-g;if(!(i[c+12>>0]|0)){CB(a,c,e);break}else{BB(a,c,e);break}}else{k[f>>2]=g;if(!(i[c+12>>0]|0)){BB(a,c,f);break}else{CB(a,c,f);break}}while(0);f=a+12|0;c=i[f>>0]|0;i[f>>0]=c^1;if(c<<24>>24==1){r=d;return}if((k[a+8>>2]|0)!=1){r=d;return}if(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0){r=d;return}i[f>>0]=0;r=d;return}function fea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+16|0;d=c+4|0;e=c;f=k[b>>2]|0;g=k[k[b+4>>2]>>2]|0;if(!g){if((f|0)==(a|0)){r=c;return}b=a+8|0;k[b>>2]=0;h=f+8|0;j=k[h>>2]|0;l=j>>>0>134217728?134217728:j;j=a+13|0;m=i[j>>0]|0;n=m<<24>>24==0;o=n?k[a>>2]|0:2;if(l>>>0>o>>>0){p=o<<2;o=p>>>0>>0?l:p;p=o>>>0>134217728?134217728:o;o=KBa(p<<2)|0;if(n){n=a+4|0;OBa(k[n>>2]|0);q=n}else{i[j>>0]=0;q=a+4|0}k[b>>2]=l;k[a>>2]=p;k[q>>2]=o;s=i[j>>0]|0}else{k[b>>2]=l;s=m}Dyb((s<<24>>24==0?k[a+4>>2]|0:a)|0,((i[f+13>>0]|0)==0?k[f+4>>2]|0:f)|0,k[h>>2]<<2|0)|0;i[a+12>>0]=i[f+12>>0]|0;r=c;return}if((g|0)<0){k[d>>2]=0-g;if(!(i[f+12>>0]|0)){CB(a,f,d);r=c;return}else{BB(a,f,d);r=c;return}}else{k[e>>2]=g;if(!(i[f+12>>0]|0)){BB(a,f,e);r=c;return}else{CB(a,f,e);r=c;return}}}function gea(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;b=r;r=r+80|0;c=b+60|0;d=b+65|0;e=b+56|0;f=b+64|0;g=b+32|0;h=b;j=b+16|0;l=b+52|0;m=b+48|0;k[g>>2]=0;k[g+8>>2]=1;i[g+12>>0]=0;i[g+13>>0]=1;n=a+16|0;o=a+28|0;a:do if(((i[o>>0]|0)==0?(k[a+24>>2]|0)==1:0)?(p=(i[a+29>>0]|0)==0?k[n+4>>2]|0:n,(k[p>>2]|0)==0):0){q=p;s=g;while(1){s=s+4|0;if((q|0)==(p|0))break;q=q+4|0;if((k[q>>2]|0)!=(k[s>>2]|0)){t=10;break a}}s=Rd(8)|0;x=0;xa(671,s|0,255640);q=x;x=0;if(!(q&1)){k[s>>2]=39460;x=0;fb(149,s|0,6944,933);x=0;break}q=Hc()|0;p=M;Fc(s|0);u=p;v=q;Sc(v|0)}else t=10;while(0);if((t|0)==10){b:do if(((i[a+12>>0]|0)==0?(k[a+8>>2]|0)==1:0)?(q=(i[a+13>>0]|0)==0?k[a+4>>2]|0:a,(k[q>>2]|0)==0):0){p=q;s=g;while(1){s=s+4|0;if((p|0)==(q|0))break;p=p+4|0;if((k[p>>2]|0)!=(k[s>>2]|0))break b}k[h>>2]=1;k[h+8>>2]=1;i[h+12>>0]=0;i[h+13>>0]=1;s=a+29|0;if(!(i[s>>0]|0))OBa(k[n+4>>2]|0);k[a+24>>2]=1;i[o>>0]=0;i[s>>0]=1;k[n>>2]=k[h>>2];r=b;return}while(0);x=0;fb(298,j|0,a|0,n|0);h=x;x=0;if(!(h&1)){k[e>>2]=j;x=0;fb(299,a|0,e|0,f|0);f=x;x=0;do if(!(f&1)?(k[c>>2]=j,x=0,fb(299,n|0,c|0,d|0),e=x,x=0,!(e&1)):0){c:do if(!(i[o>>0]|0)){e=k[a+24>>2]|0;if((e|0)!=1)if(e>>>0>1)break;else{t=28;break}e=(i[a+29>>0]|0)==0?k[n+4>>2]|0:n;h=1;while(1){h=h+-1|0;if((h|0)<=-1)break c;s=k[e+(h<<2)>>2]|0;p=k[g+(h<<2)>>2]|0;if((s|0)!=(p|0)){w=s;y=p;break}}if(w>>>0<=y>>>0)t=28}else t=28;while(0);if((t|0)==28){k[l>>2]=a;x=0;Ta(592,a|0,l|0)|0;h=x;x=0;if(h&1)break;k[m>>2]=n;x=0;Ta(592,n|0,m|0)|0;h=x;x=0;if(h&1)break}if(!(i[j+13>>0]|0))OBa(k[j+4>>2]|0);r=b;return}while(0);b=Hc()|0;m=M;if(i[j+13>>0]|0){u=m;v=b;Sc(v|0)}OBa(k[j+4>>2]|0);u=m;v=b;Sc(v|0)}}b=Hc()|0;u=M;v=b;Sc(v|0)}function hea(a){a=a|0;return 17}function iea(a,b){a=a|0;b=b|0;return 0}function jea(a,b){a=a|0;b=b|0;return 0}function kea(a,b){a=a|0;b=b|0;return 32}function lea(a){a=a|0;return 0}function mea(a){a=a|0;return 0}function nea(a){a=a|0;return 1}function oea(a){a=a|0;return 1}function pea(a,b,c){a=a|0;b=b|0;c=c|0;q2a(a,255803,25);return}function qea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=KBa(44)|0;k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31848;c=b+12|0;x=0;fb(247,c|0,256,0);d=x;x=0;if(d&1){d=Hc()|0;c0a(b);OBa(b);Sc(d|0)}d=c;c=b;i0a(b);k[b+16>>2]=d;e=b+20|0;b=k[e>>2]|0;k[e>>2]=c;if(!b){k[a>>2]=d;f=a+4|0;k[f>>2]=c;return}k0a(b);k[a>>2]=d;f=a+4|0;k[f>>2]=c;return}function rea(a){a=a|0;var b=0;k[a>>2]=39200;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function sea(a){a=a|0;var b=0;k[a>>2]=39200;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function tea(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function uea(a){a=a|0;OBa(a);return}function vea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function wea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+64|0;d=c+32|0;e=c+16|0;f=c+8|0;g=c+54|0;h=c;l=c+53|0;m=c+40|0;n=c+52|0;o=k[b>>2]|0;p=(o|0)==(a|0);if(p)q=1;else q=(k[b+8>>2]|0)==(a|0)?1:(k[b+4>>2]|0)==(a|0);s=b+12|0;t=k[s>>2]|0;u=k[b+16>>2]|0;if(!((t|0)==(a|0)|(u|0)==(a|0))){v=b+4|0;w=k[v>>2]|0;y=k[v+4>>2]|0;if(p){p=d;k[p>>2]=w;k[p+4>>2]=y;Tda(a,d,e)}else{p=f;k[p>>2]=w;k[p+4>>2]=y;ZP(a,f,g);BM(a,a,o)}o=s;s=k[o+4>>2]|0;g=h;k[g>>2]=k[o>>2];k[g+4>>2]=s;xea(a,h,l);r=c;return}if(!q){BM(a,t,u);k[m>>2]=k[b>>2];k[m+4>>2]=k[b+4>>2];k[m+8>>2]=k[b+8>>2];yea(a,m,n);r=c;return}k[e>>2]=0;n=e+8|0;k[n>>2]=1;m=e+12|0;i[m>>0]=0;u=e+13|0;i[u>>0]=1;x=0;fb(300,e|0,b|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;if(i[u>>0]|0)Sc(d|0);OBa(k[e+4>>2]|0);Sc(d|0)}else{d=e;b=k[d>>2]|0;t=k[d+4>>2]|0;d=a;q=k[d+4>>2]|0;l=e;k[l>>2]=k[d>>2];k[l+4>>2]=q;l=a;k[l>>2]=b;k[l+4>>2]=t;t=a+12|0;l=j[m>>1]|0;i[m>>0]=i[t>>0]|0;i[t>>0]=l;t=a+13|0;m=i[t>>0]|0;i[u>>0]=m;i[t>>0]=(l&65535)>>>8;l=a+8|0;a=k[n>>2]|0;k[n>>2]=k[l>>2];k[l>>2]=a;if(!(m<<24>>24))OBa(q);r=c;return}}function xea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c;k[d>>2]=0;k[d+8>>2]=1;e=d+12|0;i[e>>0]=0;f=d+13|0;i[f>>0]=1;x=0;fb(217,d|0,k[b>>2]|0,k[b+4>>2]|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[f>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}x=0;if((i[a+12>>0]|0)!=0^(i[e>>0]|0)!=0){$B(a,a,d);e=x;x=0;if(e&1)g=11;else g=8}else{aC(a,a,d);a=x;x=0;if(a&1)g=11;else g=8}if((g|0)==8){if(i[f>>0]|0){r=c;return}OBa(k[d+4>>2]|0);r=c;return}else if((g|0)==11){g=Hc()|0;if(i[f>>0]|0)Sc(g|0);OBa(k[d+4>>2]|0);Sc(g|0)}}function yea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+48|0;d=c+24|0;e=c+16|0;f=c+32|0;g=c;k[g>>2]=0;k[g+8>>2]=1;h=g+12|0;i[h>>0]=0;j=g+13|0;i[j>>0]=1;l=b+4|0;if((k[b>>2]|0)==(g|0)){m=l;n=k[m+4>>2]|0;o=d;k[o>>2]=k[m>>2];k[o+4>>2]=n;x=0;fb(308,g|0,d|0,c+33|0);d=x;x=0;if(d&1)p=6;else q=g}else{d=l;l=k[d+4>>2]|0;n=e;k[n>>2]=k[d>>2];k[n+4>>2]=l;x=0;fb(229,g|0,e|0,f|0);f=x;x=0;if(!(f&1)?(x=0,fb(217,g|0,g|0,k[b>>2]|0),b=x,x=0,!(b&1)):0)q=g;else p=6}if((p|0)==6){b=Hc()|0;if(i[j>>0]|0)Sc(b|0);OBa(k[g+4>>2]|0);Sc(b|0)}x=0;if((i[a+12>>0]|0)!=0^(i[h>>0]|0)!=0){$B(a,a,q);h=x;x=0;if(h&1)p=15;else p=12}else{aC(a,a,q);q=x;x=0;if(q&1)p=15;else p=12}if((p|0)==12){if(i[j>>0]|0){r=c;return}OBa(k[g+4>>2]|0);r=c;return}else if((p|0)==15){p=Hc()|0;if(i[j>>0]|0)Sc(p|0);OBa(k[g+4>>2]|0);Sc(p|0)}}function zea(a){a=a|0;var b=0;k[a>>2]=39516;b=a+12|0;k[b>>2]=37364;K2a(a+36|0);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function Aea(a){a=a|0;var b=0;k[a>>2]=39516;b=a+12|0;k[b>>2]=37364;K2a(a+36|0);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function Bea(a){a=a|0;var b=0;b=a+12|0;k[b>>2]=37364;K2a(a+36|0);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function Cea(a){a=a|0;OBa(a);return}function Dea(a){a=a|0;var b=0;k[a>>2]=39544;b=a+16|0;k[b>>2]=37812;if(!(i[a+69>>0]|0))OBa(k[a+56+4>>2]|0);if(!(i[a+53>>0]|0))OBa(k[a+40+4>>2]|0);k[b>>2]=20456;xh(a+28|0,k[a+32>>2]|0);b=k[a+24>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function Eea(a){a=a|0;var b=0;k[a>>2]=39544;b=a+16|0;k[b>>2]=37812;if(!(i[a+69>>0]|0))OBa(k[a+56+4>>2]|0);if(!(i[a+53>>0]|0))OBa(k[a+40+4>>2]|0);k[b>>2]=20456;xh(a+28|0,k[a+32>>2]|0);b=k[a+24>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function Fea(a){a=a|0;var b=0;b=a+16|0;k[b>>2]=37812;if(!(i[a+69>>0]|0))OBa(k[a+56+4>>2]|0);if(!(i[a+53>>0]|0))OBa(k[a+40+4>>2]|0);k[b>>2]=20456;xh(a+28|0,k[a+32>>2]|0);b=k[a+24>>2]|0;if(!b)return;k0a(b);return}function Gea(a){a=a|0;OBa(a);return}function Hea(a){a=a|0;var b=0;k[a>>2]=39172;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function Iea(a){a=a|0;var b=0;k[a>>2]=39172;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function Jea(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function Kea(a){a=a|0;OBa(a);return}function Lea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;f=r;r=r+240|0;g=f+192|0;h=f+144|0;i=f+96|0;j=f+216|0;l=f+72|0;m=f+168|0;n=f+48|0;o=f+24|0;p=f+120|0;q=f;iu(g,0);x=0;s=Ta(482,g|0,300151)|0;t=x;x=0;a:do if(!(t&1)?(x=0,fb(142,h|0,b|0,0),u=x,x=0,!(u&1)):0){x=0;Ta(476,s|0,h|0)|0;u=x;x=0;if(u&1){u=Hc()|0;v=M;xu(h);w=u;y=v;xu(g);Sc(w|0)}xu(h);x=0;v=Ta(482,g|0,256870)|0;u=x;x=0;if(!(u&1)?(x=0,fb(309,j|0,a|0,b+8|0),u=x,x=0,!(u&1)):0){x=0;xa(587,i|0,j|0);u=x;x=0;do if(u&1){z=Hc()|0;A=z;B=M}else{x=0;Ta(476,v|0,i|0)|0;z=x;x=0;if(z&1){z=Hc()|0;C=M;xu(i);A=z;B=C;break}xu(i);K2a(j);x=0;C=Ta(482,g|0,285342)|0;z=x;x=0;if(z&1)break a;x=0;xa(587,l|0,c|0);z=x;x=0;if(z&1)break a;x=0;Ta(476,C|0,l|0)|0;C=x;x=0;if(C&1){C=Hc()|0;z=M;xu(l);w=C;y=z;xu(g);Sc(w|0)}xu(l);z=k[d+4>>2]|0;b:do if(z){x=0;xa(588,m|0,0);C=x;x=0;if(C&1)break a;C=k[d>>2]|0;D=C+(z*40|0)|0;E=C;while(1){x=0;C=Ta(475,m|0,E|0)|0;F=x;x=0;if(F&1){G=25;break}x=0;xa(589,n|0,E+16|0);F=x;x=0;if(F&1){G=25;break}x=0;Ta(476,C|0,n|0)|0;C=x;x=0;if(C&1){G=28;break}xu(n);E=E+40|0;if((E|0)==(D|0)){G=14;break}}do if((G|0)==14){x=0;D=Ta(482,g|0,256874)|0;E=x;x=0;if(!(E&1)?(x=0,xa(589,o|0,m|0),E=x,x=0,!(E&1)):0){x=0;Ta(476,D|0,o|0)|0;D=x;x=0;if(D&1){D=Hc()|0;E=M;xu(o);H=D;I=E;break}else{xu(o);xu(m);break b}}E=Hc()|0;J=E;K=M;G=27}else if((G|0)==25){E=Hc()|0;J=E;K=M;G=27}else if((G|0)==28){E=Hc()|0;D=M;xu(n);H=E;I=D}while(0);if((G|0)==27){H=J;I=K}xu(m);w=H;y=I;xu(g);Sc(w|0)}while(0);z=a+52|0;D=a+48|0;E=(k[z>>2]|0)+-1+(k[D>>2]|0)|0;C=a+36|0;x=0;Ta(485,k[(k[(k[C>>2]|0)+(E>>>10<<2)>>2]|0)+((E&1023)<<2)>>2]|0,g|0)|0;E=x;x=0;if(E&1)break a;if(!e){xu(g);r=f;return}E=(k[z>>2]|0)+-1+(k[D>>2]|0)|0;F=k[(k[(k[C>>2]|0)+(E>>>10<<2)>>2]|0)+((E&1023)<<2)>>2]|0;x=0;E=Ba(560,F|0)|0;L=x;x=0;if(L&1)break a;x=0;L=Ta(518,F|0,E+-1|0)|0;E=x;x=0;if(E&1)break a;x=0;xa(588,p|0,6);E=x;x=0;if(E&1)break a;x=0;E=Ta(482,L|0,256885)|0;F=x;x=0;do if(F&1)G=47;else{x=0;xa(589,q|0,p|0);N=x;x=0;if(N&1){G=47;break}x=0;Ta(476,E|0,q|0)|0;N=x;x=0;if(N&1){N=Hc()|0;O=M;xu(q);P=N;Q=O;break}xu(q);x=0;O=Ta(482,L|0,256885)|0;N=x;x=0;if(N&1){G=47;break}N=O;O=k[a+40>>2]|0;R=k[C>>2]|0;S=k[D>>2]|0;T=k[z>>2]|0;U=R;if((((O|0)==(R|0)?0:(O-R<<8)+-1|0)|0)==(T+S|0)){x=0;va(1479,a+32|0);R=x;x=0;if(R&1){G=47;break}V=k[D>>2]|0;W=k[z>>2]|0;X=k[C>>2]|0}else{V=S;W=T;X=U}U=W+V|0;k[(k[X+(U>>>10<<2)>>2]|0)+((U&1023)<<2)>>2]=N;k[z>>2]=W+1;xu(p);xu(g);r=f;return}while(0);if((G|0)==47){z=Hc()|0;P=z;Q=M}xu(p);w=P;y=Q;xu(g);Sc(w|0)}while(0);K2a(j);w=A;y=B;xu(g);Sc(w|0)}}while(0);B=Hc()|0;w=B;y=M;xu(g);Sc(w|0)}function Mea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=r;r=r+80|0;e=d+72|0;f=d+60|0;g=d+48|0;h=d+36|0;j=d+24|0;l=d+12|0;m=d;n=k[c+8>>2]|0;a:do if((n|0)!=0?(o=b+60|0,p=k[b+64>>2]|0,(p|0)!=0):0){q=i[n>>0]|0;s=(q&1)==0;t=s?(q&255)>>>1:k[n+4>>2]|0;q=s?n+1|0:k[n+8>>2]|0;s=p;while(1){p=s+16|0;u=i[p>>0]|0;v=(u&1)==0;w=v?(u&255)>>>1:k[s+20>>2]|0;u=v?p+1|0:k[s+24>>2]|0;p=w>>>0>>0;v=ZLa(q,u,p?w:t)|0;y=t>>>0>>0;if((((v|0)==0?(y?-2147483648:0):v)|0)<0)z=s;else{v=ZLa(u,q,y?t:w)|0;if((((v|0)==0?(p?-2147483648:0):v)|0)>=0)break;z=s+4|0}s=k[z>>2]|0;if(!s){A=-1;break a}}s=Aga(o,e,n)|0;if(s){A=k[s+28>>2]|0;break}s=Rd(8)|0;x=0;xa(671,s|0,296399);t=x;x=0;if(t&1){t=Hc()|0;Fc(s|0);Sc(t|0)}else{k[s>>2]=47544;Gf(s|0,9024,933)}}else A=-1;while(0);n=k[c>>2]|0;if((n|0)>-1){e=k[c+4>>2]|0;B=(e|0)>-1?e-n|0:-1}else B=-1;I8a(j,n);x=0;n=Ta(484,j|0,294915)|0;e=x;x=0;if(e&1){e=Hc()|0;C=M;D=e;K2a(j);Sc(D|0)};k[h>>2]=k[n>>2];k[h+4>>2]=k[n+4>>2];k[h+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;xa(815,l|0,B|0);B=x;x=0;if(B&1){B=Hc()|0;E=M;F=B}else{B=i[l>>0]|0;n=(B&1)==0;x=0;e=Fa(88,h|0,(n?l+1|0:k[l+8>>2]|0)|0,(n?(B&255)>>>1:k[l+4>>2]|0)|0)|0;B=x;x=0;if(B&1){B=Hc()|0;G=M;H=B}else{k[g>>2]=k[e>>2];k[g+4>>2]=k[e+4>>2];k[g+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;e=Ta(484,g|0,294915)|0;B=x;x=0;if(B&1){B=Hc()|0;I=M;J=B}else{k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(815,m|0,A|0);A=x;x=0;do if(!(A&1)){e=i[m>>0]|0;B=(e&1)==0;x=0;n=Fa(88,f|0,(B?m+1|0:k[m+8>>2]|0)|0,(B?(e&255)>>>1:k[m+4>>2]|0)|0)|0;e=x;x=0;if(e&1){e=Hc()|0;B=M;K2a(m);K=B;L=e;break}else{k[a>>2]=k[n>>2];k[a+4>>2]=k[n+4>>2];k[a+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;K2a(m);K2a(f);K2a(g);K2a(l);K2a(h);K2a(j);r=d;return}}else{n=Hc()|0;K=M;L=n}while(0);K2a(f);I=K;J=L}K2a(g);G=I;H=J}K2a(l);E=G;F=H}K2a(h);C=E;D=F;K2a(j);Sc(D|0)}function Nea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;d=r;r=r+16|0;e=d+4|0;f=d;k[a>>2]=39584;i[a+4>>0]=0;g=a+8|0;iu(g,0);h=a+32|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;k[h+20>>2]=0;k[a+56>>2]=b;b=a+60|0;k[a+64>>2]=0;k[a+68>>2]=0;j=a+64|0;k[b>>2]=j;l=k[c>>2]|0;m=c+4|0;if((l|0)==(m|0)){r=d;return}c=j;n=l;o=l;while(1){k[f>>2]=c;x=0;k[e>>2]=k[f>>2];Fa(138,b|0,e|0,n+16|0)|0;l=x;x=0;if(l&1)break;l=k[o+4>>2]|0;if(!l){p=o;while(1){q=k[p+8>>2]|0;if((k[q>>2]|0)==(p|0)){s=q;break}else p=q}}else{p=l;while(1){q=k[p>>2]|0;if(!q){s=p;break}else p=q}}if((s|0)==(m|0)){t=8;break}else{n=s;o=s}}if((t|0)==8){r=d;return}d=Hc()|0;zi(b,k[j>>2]|0);j=a+36|0;b=k[j>>2]|0;t=a+48|0;s=k[t>>2]|0;o=b+(s>>>10<<2)|0;n=a+40|0;m=k[n>>2]|0;e=m;f=b;if((m|0)==(b|0)){u=0;v=a+52|0;w=0}else{m=a+52|0;a=(k[m>>2]|0)+s|0;u=(k[b+(a>>>10<<2)>>2]|0)+((a&1023)<<2)|0;v=m;w=(k[o>>2]|0)+((s&1023)<<2)|0}s=w;w=o;a:while(1){o=s;do{m=o;if((m|0)==(u|0))break a;o=m+4|0}while((o-(k[w>>2]|0)|0)!=4096);o=w+4|0;s=k[o>>2]|0;w=o}k[v>>2]=0;v=e-f>>2;if(v>>>0>2){f=b;do{OBa(k[f>>2]|0);f=(k[j>>2]|0)+4|0;k[j>>2]=f;b=(k[n>>2]|0)-f>>2}while(b>>>0>2);y=b}else y=v;switch(y|0){case 1:{k[t>>2]=512;break}case 2:{k[t>>2]=1024;break}default:{}}t=k[j>>2]|0;y=k[n>>2]|0;if((t|0)!=(y|0)){v=t;do{OBa(k[v>>2]|0);v=v+4|0}while((v|0)!=(y|0));y=k[j>>2]|0;j=k[n>>2]|0;if((j|0)!=(y|0))k[n>>2]=j+(~((j+-4-y|0)>>>2)<<2)}y=k[h>>2]|0;if(!y){xu(g);Sc(d|0)}OBa(y);xu(g);Sc(d|0)}function Oea(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+4|0;if(!(i[c>>0]|0)){d=k[a+56>>2]|0;Tf[k[(k[d>>2]|0)+12>>2]&2047](d,a)}i[c>>0]=1;Ox(b,a+8|0)|0;return}function Pea(a){a=a|0;var b=0,c=0;b=a+4|0;if(i[b>>0]|0){i[b>>0]=1;return}c=k[a+56>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,a);i[b>>0]=1;return}function Qea(a){a=a|0;var b=0,c=0;b=a+4|0;if(!(i[b>>0]|0)){c=k[a+56>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,a)}i[b>>0]=1;return a+8|0}function Rea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+80|0;c=b+48|0;d=b+24|0;e=b;iu(c,6);f=a+8|0;x=0;g=Ta(482,f|0,285342)|0;h=x;x=0;if(!(h&1)?(x=0,xa(593,d|0,256894),h=x,x=0,!(h&1)):0){x=0;Ta(476,g|0,d|0)|0;g=x;x=0;if(g&1){g=Hc()|0;h=M;xu(d);i=h;j=g;xu(c);Sc(j|0)}xu(d);x=0;d=Ta(482,f|0,256885)|0;g=x;x=0;if(!(g&1)?(x=0,xa(589,e|0,c|0),g=x,x=0,!(g&1)):0){x=0;Ta(476,d|0,e|0)|0;d=x;x=0;if(d&1){d=Hc()|0;g=M;xu(e);i=g;j=d;xu(c);Sc(j|0)}xu(e);x=0;e=Ta(482,f|0,256885)|0;f=x;x=0;if(!(f&1)){f=e;e=k[a+40>>2]|0;d=a+36|0;g=k[d>>2]|0;h=a+48|0;l=k[h>>2]|0;m=a+52|0;n=k[m>>2]|0;if((((e|0)==(g|0)?0:(e-g<<8)+-1|0)|0)!=(n+l|0)){o=l;p=n;q=g;s=p+o|0;t=s>>>10;u=q+(t<<2)|0;v=k[u>>2]|0;w=s&1023;y=v+(w<<2)|0;k[y>>2]=f;z=p+1|0;k[m>>2]=z;xu(c);r=b;return 1}x=0;va(1479,a+32|0);a=x;x=0;if(!(a&1)){o=k[h>>2]|0;p=k[m>>2]|0;q=k[d>>2]|0;s=p+o|0;t=s>>>10;u=q+(t<<2)|0;v=k[u>>2]|0;w=s&1023;y=v+(w<<2)|0;k[y>>2]=f;z=p+1|0;k[m>>2]=z;xu(c);r=b;return 1}}}}b=Hc()|0;i=M;j=b;xu(c);Sc(j|0);return 0}function Sea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+160|0;d=c+144|0;e=c+96|0;f=c+72|0;g=c+128|0;h=c+120|0;i=c+32|0;j=c;iu(e,6);l=k[b+36>>2]|0;m=k[b+40>>2]|0;a:do if((l|0)==(m|0))n=2;else{o=l;while(1){x=0;xa(587,f|0,o|0);p=x;x=0;if(p&1){n=3;break}x=0;Ta(485,e|0,f|0)|0;p=x;x=0;if(p&1)break;xu(f);o=o+12|0;if((o|0)==(m|0)){n=2;break a}}if((n|0)==3){o=Hc()|0;q=o;s=M;break}o=Hc()|0;p=M;xu(f);t=o;u=p;xu(e);Sc(t|0)}while(0);do if((n|0)==2){x=0;fb(140,g|0,257597,15);f=x;x=0;if(f&1){f=Hc()|0;q=f;s=M;break}k[j>>2]=256905;f=j+8|0;x=0;xa(589,f|0,e|0);m=x;x=0;if(m&1){m=Hc()|0;v=m;w=M}else{m=k[j>>2]|0;l=RLa(m)|0;x=0;fb(140,i|0,m|0,l|0);l=x;x=0;do if(!(l&1)){x=0;xa(816,i+16|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;p=M;K2a(i);y=p;z=m;n=18;break}k[h>>2]=i;k[h+4>>2]=1;x=0;k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];pa(60,a|0,b|0,g|0,d|0,0);m=x;x=0;if(m&1){m=Hc()|0;p=M;xu(i+16|0);K2a(i);A=m;B=p;break}else{xu(i+16|0);K2a(i);xu(f);K2a(g);xu(e);r=c;return 1}}else{p=Hc()|0;y=M;z=p;n=18}while(0);if((n|0)==18){A=z;B=y}xu(f);v=A;w=B}K2a(g);t=v;u=w;xu(e);Sc(t|0)}while(0);t=q;u=s;xu(e);Sc(t|0);return 0}function Tea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+96|0;d=c+80|0;e=c+64|0;f=c+56|0;g=c;h=c+40|0;q2a(e,256914,15);i=k[b+40>>2]|0;k[h>>2]=256930;j=h+4|0;x=0;xa(604,j|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;l=M;m=i;K2a(e);Sc(m|0)}i=k[h>>2]|0;h=RLa(i)|0;x=0;fb(140,g|0,i|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,j|0);i=x;x=0;if(i&1){i=Hc()|0;n=M;K2a(g);o=n;p=i;q=9;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);i=x;x=0;if(i&1){i=Hc()|0;n=M;xu(g+16|0);K2a(g);s=i;t=n;break}else{xu(g+16|0);K2a(g);K2a(j);K2a(e);r=c;return 1}}else{n=Hc()|0;o=M;p=n;q=9}while(0);if((q|0)==9){s=p;t=o}K2a(j);l=t;m=s;K2a(e);Sc(m|0);return 0}function Uea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;c=r;r=r+288|0;d=c+280|0;e=c+216|0;f=c+192|0;g=c+264|0;h=c+256|0;j=c+32|0;l=c+240|0;m=c;iu(e,6);x=0;n=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;o=x;x=0;a:do if(!(o&1)){p=k[n+36>>2]|0;q=k[n+40>>2]|0;b:do if((p|0)!=(q|0)){s=p;while(1){x=0;fb(142,f|0,k[s>>2]|0,0);t=x;x=0;if(t&1){u=4;break}x=0;Ta(485,e|0,f|0)|0;t=x;x=0;if(t&1)break;xu(f);s=s+4|0;if((s|0)==(q|0))break b}if((u|0)==4){s=Hc()|0;v=s;w=M;break a}s=Hc()|0;t=M;xu(f);y=s;z=t;xu(e);Sc(y|0)}while(0);x=0;fb(140,g|0,256935,18);q=x;x=0;if(!(q&1)){q=k[b+24>>2]|0;k[l>>2]=285342;p=l+4|0;x=0;xa(604,p|0,q|0);q=x;x=0;if(q&1){q=Hc()|0;A=1;B=j;C=q;D=M}else{q=k[l>>2]|0;t=RLa(q)|0;x=0;fb(140,j|0,q|0,t|0);t=x;x=0;do if(!(t&1)){x=0;xa(587,j+16|0,p|0);q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(j);E=j;F=s;G=q;u=30;break}q=j+40|0;s=i[b+72>>0]|0;x=0;fb(140,q|0,256954,9);H=x;x=0;if(!(H&1)){x=0;xa(817,j+56|0,s<<24>>24!=0|0);s=x;x=0;if(s&1){s=Hc()|0;H=M;K2a(q);E=q;F=H;G=s;u=30;break}s=j+80|0;x=0;H=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;I=x;x=0;if(!(I&1)?(I=i[H+32>>0]|0,x=0,fb(140,s|0,256964,16),H=x,x=0,!(H&1)):0){x=0;xa(817,j+96|0,I<<24>>24!=0|0);I=x;x=0;if(I&1){I=Hc()|0;H=M;K2a(s);E=s;F=H;G=I;u=30;break}I=j+120|0;k[m>>2]=256981;H=m+8|0;x=0;xa(589,H|0,e|0);J=x;x=0;if(J&1){K=I;u=29}else{J=k[m>>2]|0;L=RLa(J)|0;x=0;fb(140,I|0,J|0,L|0);L=x;x=0;do if(!(L&1)){x=0;xa(816,j+136|0,H|0);J=x;x=0;if(J&1){J=Hc()|0;N=M;K2a(I);O=N;P=J;u=32;break}k[h>>2]=j;k[h+4>>2]=4;x=0;k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];pa(60,a|0,b|0,g|0,d|0,1);J=x;x=0;if(J&1){J=Hc()|0;N=M;xu(j+136|0);K2a(j+120|0);xu(j+96|0);K2a(j+80|0);xu(j+56|0);K2a(j+40|0);xu(j+16|0);K2a(j);Q=0;R=J;S=N;break}else{xu(j+136|0);K2a(j+120|0);xu(j+96|0);K2a(j+80|0);xu(j+56|0);K2a(j+40|0);xu(j+16|0);K2a(j);xu(H);K2a(p);K2a(g);xu(e);r=c;return 1}}else{N=Hc()|0;O=M;P=N;u=32}while(0);if((u|0)==32){Q=1;R=P;S=O}xu(H);T=Q;U=I;V=R;W=S}}else{K=s;u=29}}else{K=q;u=29}}else{K=j;u=29}while(0);if((u|0)==29){t=Hc()|0;E=K;F=M;G=t;u=30}if((u|0)==30){T=1;U=E;V=G;W=F}K2a(p);A=T;B=U;C=V;D=W}if(!((j|0)==(B|0)|A^1)){t=B;do{xu(t+-24|0);t=t+-40|0;K2a(t)}while((t|0)!=(j|0))}K2a(g);y=C;z=D;xu(e);Sc(y|0)}else u=5}else u=5;while(0);if((u|0)==5){u=Hc()|0;v=u;w=M}y=v;z=w;xu(e);Sc(y|0);return 0}function Vea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,257685,20);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function Wea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,257005,17);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function Xea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+96|0;d=c+80|0;e=c+64|0;f=c+56|0;g=c;h=c+40|0;q2a(e,257023,16);i=k[b+24>>2]|0;k[h>>2]=285342;j=h+4|0;x=0;xa(604,j|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;l=M;m=i;K2a(e);Sc(m|0)}i=k[h>>2]|0;h=RLa(i)|0;x=0;fb(140,g|0,i|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,j|0);i=x;x=0;if(i&1){i=Hc()|0;n=M;K2a(g);o=n;p=i;q=9;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);i=x;x=0;if(i&1){i=Hc()|0;n=M;xu(g+16|0);K2a(g);s=i;t=n;break}else{xu(g+16|0);K2a(g);K2a(j);K2a(e);r=c;return 1}}else{n=Hc()|0;o=M;p=n;q=9}while(0);if((q|0)==9){s=p;t=o}K2a(j);l=t;m=s;K2a(e);Sc(m|0);return 0}function Yea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+96|0;d=c+80|0;e=c+64|0;f=c+56|0;g=c;h=c+40|0;q2a(e,257040,14);i=k[b+24>>2]|0;k[h>>2]=285342;j=h+4|0;x=0;xa(604,j|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;l=M;m=i;K2a(e);Sc(m|0)}i=k[h>>2]|0;h=RLa(i)|0;x=0;fb(140,g|0,i|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,j|0);i=x;x=0;if(i&1){i=Hc()|0;n=M;K2a(g);o=n;p=i;q=9;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);i=x;x=0;if(i&1){i=Hc()|0;n=M;xu(g+16|0);K2a(g);s=i;t=n;break}else{xu(g+16|0);K2a(g);K2a(j);K2a(e);r=c;return 1}}else{n=Hc()|0;o=M;p=n;q=9}while(0);if((q|0)==9){s=p;t=o}K2a(j);l=t;m=s;K2a(e);Sc(m|0);return 0}function Zea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+96|0;d=c+80|0;e=c+64|0;f=c+56|0;g=c;h=c+40|0;q2a(e,257055,9);i=k[b+24>>2]|0;k[h>>2]=285342;j=h+4|0;x=0;xa(604,j|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;l=M;m=i;K2a(e);Sc(m|0)}i=k[h>>2]|0;h=RLa(i)|0;x=0;fb(140,g|0,i|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,j|0);i=x;x=0;if(i&1){i=Hc()|0;n=M;K2a(g);o=n;p=i;q=9;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);i=x;x=0;if(i&1){i=Hc()|0;n=M;xu(g+16|0);K2a(g);s=i;t=n;break}else{xu(g+16|0);K2a(g);K2a(j);K2a(e);r=c;return 1}}else{n=Hc()|0;o=M;p=n;q=9}while(0);if((q|0)==9){s=p;t=o}K2a(j);l=t;m=s;K2a(e);Sc(m|0);return 0}function _ea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,257754,13);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function $ea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+176|0;d=c+160|0;e=c+144|0;f=c+136|0;g=c;h=c+120|0;q2a(e,257065,18);j=k[b+24>>2]|0;k[h>>2]=285342;l=h+4|0;x=0;xa(604,l|0,j|0);j=x;x=0;if(j&1){j=Hc()|0;m=1;n=M;o=j;p=g}else{j=k[h>>2]|0;h=RLa(j)|0;x=0;fb(140,g|0,j|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,l|0);j=x;x=0;if(j&1){j=Hc()|0;q=M;K2a(g);s=g;t=q;u=j;v=17;break}j=g+40|0;q=k[b+32>>2]|0;if(!q){x=0;w=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;y=x;x=0;if(y&1){z=j;v=16;break}else A=w}else A=q;x=0;fb(140,j|0,293595,6);q=x;x=0;if(!(q&1)){x=0;xa(817,g+56|0,(A|0)>2|0);q=x;x=0;if(q&1){q=Hc()|0;w=M;K2a(j);s=j;t=w;u=q;v=17;break}q=g+80|0;w=i[b+78>>0]|0;x=0;fb(140,q|0,293441,8);y=x;x=0;if(!(y&1)){x=0;xa(817,g+96|0,w<<24>>24!=0|0);w=x;x=0;if(w&1){w=Hc()|0;y=M;K2a(q);s=q;t=y;u=w;v=17;break}k[f>>2]=g;k[f+4>>2]=3;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);w=x;x=0;if(w&1){w=Hc()|0;y=M;xu(g+96|0);K2a(g+80|0);xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);B=0;C=w;D=q;E=y;break}else{xu(g+96|0);K2a(g+80|0);xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(l);K2a(e);r=c;return 1}}else{z=q;v=16}}else{z=j;v=16}}else{z=g;v=16}while(0);if((v|0)==16){c=Hc()|0;s=z;t=M;u=c;v=17}if((v|0)==17){B=1;C=u;D=s;E=t}K2a(l);m=B;n=E;o=C;p=D}if((g|0)==(p|0)|m^1){K2a(e);Sc(o|0)}else F=p;do{xu(F+-24|0);F=F+-40|0;K2a(F)}while((F|0)!=(g|0));K2a(e);Sc(o|0);return 0}function afa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+160|0;d=c+152|0;e=c+136|0;f=c+128|0;g=c;h=c+112|0;i=c+96|0;j=c+80|0;q2a(e,257084,19);l=k[b+24>>2]|0;k[h>>2]=285342;m=h+4|0;x=0;xa(604,m|0,l|0);l=x;x=0;if(l&1){l=Hc()|0;n=g;o=1;p=M;q=l}else{l=k[h>>2]|0;h=RLa(l)|0;x=0;fb(140,g|0,l|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,m|0);l=x;x=0;if(l&1){l=Hc()|0;s=M;K2a(g);t=g;u=s;v=l;w=17;break}l=g+40|0;x=0;s=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;y=x;x=0;if(y&1){z=l;w=16}else{if(!(k[s+4>>2]|0)){x=0;fb(140,j|0,257104,7);s=x;x=0;if(s&1){z=l;w=16;break}}else{x=0;s=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;y=x;x=0;if(y&1){z=l;w=16;break}y=k[s+4>>2]|0;x=0;fb(k[(k[y>>2]|0)+76>>2]|0,j|0,y|0,0);y=x;x=0;if(y&1){z=l;w=16;break}}k[i>>2]=293862;y=i+4|0;k[y>>2]=k[j>>2];k[y+4>>2]=k[j+4>>2];k[y+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;fb(140,l|0,293862,4);s=x;x=0;do if(!(s&1)){x=0;xa(587,g+56|0,y|0);A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(l);C=B;D=A;w=19;break}k[f>>2]=g;k[f+4>>2]=2;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);A=x;x=0;if(A&1){A=Hc()|0;B=M;xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);E=0;F=A;G=B;break}else{xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(y);K2a(j);K2a(m);K2a(e);r=c;return 1}}else{B=Hc()|0;C=M;D=B;w=19}while(0);if((w|0)==19){E=1;F=D;G=C}K2a(y);K2a(j);H=l;I=E;J=G;K=F}}else{z=g;w=16}while(0);if((w|0)==16){F=Hc()|0;t=z;u=M;v=F;w=17}if((w|0)==17){H=t;I=1;J=u;K=v}K2a(m);n=H;o=I;p=J;q=K}if((g|0)==(n|0)|o^1){K2a(e);Sc(q|0)}else L=n;do{xu(L+-24|0);L=L+-40|0;K2a(L)}while((L|0)!=(g|0));K2a(e);Sc(q|0);return 0}function bfa(a,b,c){a=a|0;b=b|0;c=c|0;b=(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0;if(!(k[b>>2]|0)){q2a(a,257104,7);return}else{b=(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0;c=k[b>>2]|0;jg[k[(k[c>>2]|0)+76>>2]&511](a,c,0);return}}function cfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+96|0;d=c+80|0;e=c+64|0;f=c+56|0;g=c;h=c+40|0;q2a(e,257112,18);i=k[b+24>>2]|0;k[h>>2]=285342;j=h+4|0;x=0;xa(604,j|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;l=M;m=i;K2a(e);Sc(m|0)}i=k[h>>2]|0;h=RLa(i)|0;x=0;fb(140,g|0,i|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,j|0);i=x;x=0;if(i&1){i=Hc()|0;n=M;K2a(g);o=n;p=i;q=9;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);i=x;x=0;if(i&1){i=Hc()|0;n=M;xu(g+16|0);K2a(g);s=i;t=n;break}else{xu(g+16|0);K2a(g);K2a(j);K2a(e);r=c;return 1}}else{n=Hc()|0;o=M;p=n;q=9}while(0);if((q|0)==9){s=p;t=o}K2a(j);l=t;m=s;K2a(e);Sc(m|0);return 0}function dfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,257131,18);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function efa(a,b){a=a|0;b=b|0;return 1}function ffa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+96|0;d=c+80|0;e=c+64|0;f=c+56|0;g=c;h=c+40|0;q2a(e,257150,15);i=k[b+24>>2]|0;k[h>>2]=285342;j=h+4|0;x=0;xa(604,j|0,i|0);i=x;x=0;if(i&1){i=Hc()|0;l=M;m=i;K2a(e);Sc(m|0)}i=k[h>>2]|0;h=RLa(i)|0;x=0;fb(140,g|0,i|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,j|0);i=x;x=0;if(i&1){i=Hc()|0;n=M;K2a(g);o=n;p=i;q=9;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);i=x;x=0;if(i&1){i=Hc()|0;n=M;xu(g+16|0);K2a(g);s=i;t=n;break}else{xu(g+16|0);K2a(g);K2a(j);K2a(e);r=c;return 1}}else{n=Hc()|0;o=M;p=n;q=9}while(0);if((q|0)==9){s=p;t=o}K2a(j);l=t;m=s;K2a(e);Sc(m|0);return 0}function gfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+112|0;d=c+96|0;e=c+80|0;f=c+72|0;g=c;h=c+56|0;j=c+40|0;l=c+104|0;q2a(e,257166,18);i[l>>0]=0;x=0;fb(284,j|0,b+24|0,l|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(e);Sc(n|0)}k[h>>2]=285342;l=h+4|0;k[l>>2]=k[j>>2];k[l+4>>2]=k[j+4>>2];k[l+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;fb(140,g|0,285342,4);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,l|0);o=x;x=0;if(o&1){o=Hc()|0;p=M;K2a(g);q=p;s=o;t=9;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);o=x;x=0;if(o&1){o=Hc()|0;p=M;xu(g+16|0);K2a(g);u=o;v=p;break}else{xu(g+16|0);K2a(g);K2a(l);K2a(j);K2a(e);r=c;return 1}}else{p=Hc()|0;q=M;s=p;t=9}while(0);if((t|0)==9){u=s;v=q}K2a(l);K2a(j);m=v;n=u;K2a(e);Sc(n|0);return 0}function hfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+112|0;d=c+96|0;e=c+80|0;f=c+72|0;g=c;h=c+56|0;i=c+40|0;q2a(e,257185,19);x=0;fb(310,i|0,b+24|0,324339);j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j;K2a(e);Sc(m|0)}k[h>>2]=285342;j=h+4|0;k[j>>2]=k[i>>2];k[j+4>>2]=k[i+4>>2];k[j+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;x=0;fb(140,g|0,285342,4);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,j|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(g);p=o;q=n;s=9;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);n=x;x=0;if(n&1){n=Hc()|0;o=M;xu(g+16|0);K2a(g);t=n;u=o;break}else{xu(g+16|0);K2a(g);K2a(j);K2a(i);K2a(e);r=c;return 1}}else{o=Hc()|0;p=M;q=o;s=9}while(0);if((s|0)==9){t=q;u=p}K2a(j);K2a(i);l=u;m=t;K2a(e);Sc(m|0);return 0}function ifa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,294396,7);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function jfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,257968,13);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function kfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,257982,14);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function lfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,257997,5);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function mfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,258003,20);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function nfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,258024,11);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function ofa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,258036,14);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function pfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,258051,12);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function qfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,294287,8);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function rfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,294275,5);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function sfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,294454,6);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function tfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,294484,5);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function ufa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,257205,27);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function vfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,258093,19);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function wfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,293948,11);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function xfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+144|0;d=c+132|0;e=c+120|0;f=c+112|0;g=c;h=c+96|0;i=c+80|0;q2a(e,257233,10);j=k[b+32>>2]|0;x=0;fb(140,d|0,329672,0);l=x;x=0;do if(!(l&1)){x=0;pa(57,(j|0)<141|0,d|0,303,293207,293255);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);o=g;p=n;q=m;s=18;break}K2a(d);m=k[46308+(j<<2)>>2]|0;x=0;fb(140,g|0,257244,8);n=x;x=0;if(!(n&1)){x=0;xa(593,g+16|0,m|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(g);o=g;p=n;q=m;s=18;break}m=g+40|0;x=0;n=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;t=x;x=0;if(t&1){u=m;s=17}else{if(!(k[n+4>>2]|0)){x=0;fb(140,i|0,257104,7);n=x;x=0;if(n&1){u=m;s=17;break}}else{x=0;n=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;t=x;x=0;if(t&1){u=m;s=17;break}t=k[n+4>>2]|0;x=0;fb(k[(k[t>>2]|0)+76>>2]|0,i|0,t|0,0);t=x;x=0;if(t&1){u=m;s=17;break}}k[h>>2]=293862;t=h+4|0;k[t>>2]=k[i>>2];k[t+4>>2]=k[i+4>>2];k[t+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;x=0;fb(140,m|0,293862,4);n=x;x=0;do if(!(n&1)){x=0;xa(587,g+56|0,t|0);v=x;x=0;if(v&1){v=Hc()|0;w=M;K2a(m);y=w;z=v;s=20;break}k[f>>2]=g;k[f+4>>2]=2;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);v=x;x=0;if(v&1){v=Hc()|0;w=M;xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);A=0;B=v;C=w;break}else{xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(t);K2a(i);K2a(e);r=c;return 1}}else{w=Hc()|0;y=M;z=w;s=20}while(0);if((s|0)==20){A=1;B=z;C=y}K2a(t);K2a(i);D=m;E=A;F=C;G=B}}else{u=g;s=17}}else{u=g;s=17}while(0);if((s|0)==17){B=Hc()|0;o=u;p=M;q=B;s=18}if((s|0)==18){D=o;E=1;F=p;G=q}if((g|0)==(D|0)|E^1){K2a(e);Sc(G|0)}else H=D;do{xu(H+-24|0);H=H+-40|0;K2a(H)}while((H|0)!=(g|0));K2a(e);Sc(G|0);return 0}function yfa(a,b,c){a=a|0;b=b|0;c=c|0;b=(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0;if(!(k[b>>2]|0)){q2a(a,257104,7);return}else{b=(Vf[k[(k[c>>2]|0)+16>>2]&1023](c)|0)+4|0;c=k[b>>2]|0;jg[k[(k[c>>2]|0)+76>>2]&511](a,c,0);return}}function zfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c+8|0;f=c;q2a(e,258158,15);k[f>>2]=0;k[f+4>>2]=0;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);d=x;x=0;if(d&1){d=Hc()|0;K2a(e);Sc(d|0)}else{K2a(e);r=c;return 1}return 0}function Afa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+192|0;d=c+172|0;e=c+160|0;f=c+152|0;g=c;h=c+136|0;j=c+120|0;q2a(e,257253,14);l=i[b+36>>0]|0;x=0;fb(140,g|0,258191,6);m=x;x=0;do if(!(m&1)){x=0;xa(817,g+16|0,l<<24>>24!=0|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(g);p=g;q=o;s=n;t=21;break}n=g+40|0;o=k[b+24>>2]|0;x=0;fb(140,d|0,329672,0);u=x;x=0;if(!(u&1)){x=0;pa(57,(o|0)<141|0,d|0,303,293207,293255);u=x;x=0;if(u&1){u=Hc()|0;v=M;K2a(d);p=n;q=v;s=u;t=21;break}K2a(d);u=k[46308+(o<<2)>>2]|0;x=0;fb(140,n|0,257244,8);o=x;x=0;if(!(o&1)){x=0;xa(593,g+56|0,u|0);u=x;x=0;if(u&1){u=Hc()|0;o=M;K2a(n);p=n;q=o;s=u;t=21;break}u=g+80|0;x=0;o=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;v=x;x=0;if(v&1){w=u;t=20}else{if(!(k[o+4>>2]|0)){x=0;fb(140,j|0,257104,7);o=x;x=0;if(o&1){w=u;t=20;break}}else{x=0;o=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;v=x;x=0;if(v&1){w=u;t=20;break}v=k[o+4>>2]|0;x=0;fb(k[(k[v>>2]|0)+76>>2]|0,j|0,v|0,0);v=x;x=0;if(v&1){w=u;t=20;break}}k[h>>2]=293862;v=h+4|0;k[v>>2]=k[j>>2];k[v+4>>2]=k[j+4>>2];k[v+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;fb(140,u|0,293862,4);o=x;x=0;do if(!(o&1)){x=0;xa(587,g+96|0,v|0);y=x;x=0;if(y&1){y=Hc()|0;z=M;K2a(u);A=z;B=y;t=23;break}k[f>>2]=g;k[f+4>>2]=3;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);y=x;x=0;if(y&1){y=Hc()|0;z=M;xu(g+96|0);K2a(g+80|0);xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);C=0;D=y;E=z;break}else{xu(g+96|0);K2a(g+80|0);xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(v);K2a(j);K2a(e);r=c;return 1}}else{z=Hc()|0;A=M;B=z;t=23}while(0);if((t|0)==23){C=1;D=B;E=A}K2a(v);K2a(j);F=u;G=C;H=E;I=D}}else{w=n;t=20}}else{w=n;t=20}}else{w=g;t=20}while(0);if((t|0)==20){D=Hc()|0;p=w;q=M;s=D;t=21}if((t|0)==21){F=p;G=1;H=q;I=s}if((g|0)==(F|0)|G^1){K2a(e);Sc(I|0)}else J=F;do{xu(J+-24|0);J=J+-40|0;K2a(J)}while((J|0)!=(g|0));K2a(e);Sc(I|0);return 0}function Bfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+144|0;d=c+132|0;e=c+120|0;f=c+112|0;g=c;h=c+96|0;i=c+80|0;q2a(e,257268,15);j=k[b+32>>2]|0;x=0;fb(140,d|0,329672,0);l=x;x=0;do if(!(l&1)){x=0;pa(57,(j|0)<141|0,d|0,303,293207,293255);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);o=g;p=n;q=m;s=18;break}K2a(d);m=k[46308+(j<<2)>>2]|0;x=0;fb(140,g|0,257244,8);n=x;x=0;if(!(n&1)){x=0;xa(593,g+16|0,m|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(g);o=g;p=n;q=m;s=18;break}m=g+40|0;x=0;n=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;t=x;x=0;if(t&1){u=m;s=17}else{if(!(k[n+4>>2]|0)){x=0;fb(140,i|0,257104,7);n=x;x=0;if(n&1){u=m;s=17;break}}else{x=0;n=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;t=x;x=0;if(t&1){u=m;s=17;break}t=k[n+4>>2]|0;x=0;fb(k[(k[t>>2]|0)+76>>2]|0,i|0,t|0,0);t=x;x=0;if(t&1){u=m;s=17;break}}k[h>>2]=293862;t=h+4|0;k[t>>2]=k[i>>2];k[t+4>>2]=k[i+4>>2];k[t+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;x=0;fb(140,m|0,293862,4);n=x;x=0;do if(!(n&1)){x=0;xa(587,g+56|0,t|0);v=x;x=0;if(v&1){v=Hc()|0;w=M;K2a(m);y=w;z=v;s=20;break}k[f>>2]=g;k[f+4>>2]=2;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);v=x;x=0;if(v&1){v=Hc()|0;w=M;xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);A=0;B=v;C=w;break}else{xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(t);K2a(i);K2a(e);r=c;return 1}}else{w=Hc()|0;y=M;z=w;s=20}while(0);if((s|0)==20){A=1;B=z;C=y}K2a(t);K2a(i);D=m;E=A;F=C;G=B}}else{u=g;s=17}}else{u=g;s=17}while(0);if((s|0)==17){B=Hc()|0;o=u;p=M;q=B;s=18}if((s|0)==18){D=o;E=1;F=p;G=q}if((g|0)==(D|0)|E^1){K2a(e);Sc(G|0)}else H=D;do{xu(H+-24|0);H=H+-40|0;K2a(H)}while((H|0)!=(g|0));K2a(e);Sc(G|0);return 0}function Cfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+144|0;d=c+136|0;e=c+120|0;f=c+112|0;g=c;h=c+96|0;j=c+80|0;q2a(e,258238,12);x=0;l=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;m=x;x=0;do if(!(m&1)?(n=i[l+24>>0]|0,x=0,fb(140,g|0,257284,15),o=x,x=0,!(o&1)):0){x=0;xa(817,g+16|0,n<<24>>24!=0|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(g);p=g;q=o;s=n;t=16;break}n=g+40|0;x=0;o=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;u=x;x=0;if(u&1){v=n;t=15}else{if(!(k[o+4>>2]|0)){x=0;fb(140,j|0,257104,7);o=x;x=0;if(o&1){v=n;t=15;break}}else{x=0;o=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;u=x;x=0;if(u&1){v=n;t=15;break}u=k[o+4>>2]|0;x=0;fb(k[(k[u>>2]|0)+76>>2]|0,j|0,u|0,0);u=x;x=0;if(u&1){v=n;t=15;break}}k[h>>2]=293862;u=h+4|0;k[u>>2]=k[j>>2];k[u+4>>2]=k[j+4>>2];k[u+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;fb(140,n|0,293862,4);o=x;x=0;do if(!(o&1)){x=0;xa(587,g+56|0,u|0);w=x;x=0;if(w&1){w=Hc()|0;y=M;K2a(n);z=y;A=w;t=18;break}k[f>>2]=g;k[f+4>>2]=2;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);w=x;x=0;if(w&1){w=Hc()|0;y=M;xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);B=0;C=w;D=y;break}else{xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(u);K2a(j);K2a(e);r=c;return 1}}else{y=Hc()|0;z=M;A=y;t=18}while(0);if((t|0)==18){B=1;C=A;D=z}K2a(u);K2a(j);E=n;F=B;G=D;H=C}}else{v=g;t=15}while(0);if((t|0)==15){C=Hc()|0;p=v;q=M;s=C;t=16}if((t|0)==16){E=p;F=1;G=q;H=s}if((g|0)==(E|0)|F^1){K2a(e);Sc(H|0)}else I=E;do{xu(I+-24|0);I=I+-40|0;K2a(I)}while((I|0)!=(g|0));K2a(e);Sc(H|0);return 0}function Dfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+112|0;d=c+96|0;e=c+80|0;f=c+72|0;g=c;h=c+56|0;i=c+40|0;q2a(e,258251,13);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;l=x;x=0;do if(!(l&1)){if(!(k[j+4>>2]|0)){x=0;fb(140,i|0,257104,7);m=x;x=0;if(m&1)break}else{x=0;m=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;n=x;x=0;if(n&1)break;n=k[m+4>>2]|0;x=0;fb(k[(k[n>>2]|0)+76>>2]|0,i|0,n|0,0);n=x;x=0;if(n&1)break}k[h>>2]=293862;n=h+4|0;k[n>>2]=k[i>>2];k[n+4>>2]=k[i+4>>2];k[n+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;x=0;fb(140,g|0,293862,4);m=x;x=0;do if(!(m&1)){x=0;xa(587,g+16|0,n|0);o=x;x=0;if(o&1){o=Hc()|0;p=M;K2a(g);q=p;s=o;t=13;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);o=x;x=0;if(o&1){o=Hc()|0;p=M;xu(g+16|0);K2a(g);u=o;v=p;break}else{xu(g+16|0);K2a(g);K2a(n);K2a(i);K2a(e);r=c;return 1}}else{p=Hc()|0;q=M;s=p;t=13}while(0);if((t|0)==13){u=s;v=q}K2a(n);K2a(i);w=v;y=u;K2a(e);Sc(y|0)}while(0);u=Hc()|0;w=M;y=u;K2a(e);Sc(y|0);return 0}function Efa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+160|0;d=c+152|0;e=c+136|0;f=c+128|0;g=c;h=c+112|0;i=c+96|0;j=c+80|0;q2a(e,257300,12);l=k[b+32>>2]|0;k[h>>2]=257313;m=h+4|0;x=0;xa(604,m|0,l|0);l=x;x=0;if(l&1){l=Hc()|0;n=g;o=1;p=M;q=l}else{l=k[h>>2]|0;h=RLa(l)|0;x=0;fb(140,g|0,l|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,m|0);l=x;x=0;if(l&1){l=Hc()|0;s=M;K2a(g);t=g;u=s;v=l;w=17;break}l=g+40|0;x=0;s=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;y=x;x=0;if(y&1){z=l;w=16}else{if(!(k[s+4>>2]|0)){x=0;fb(140,j|0,257104,7);s=x;x=0;if(s&1){z=l;w=16;break}}else{x=0;s=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;y=x;x=0;if(y&1){z=l;w=16;break}y=k[s+4>>2]|0;x=0;fb(k[(k[y>>2]|0)+76>>2]|0,j|0,y|0,0);y=x;x=0;if(y&1){z=l;w=16;break}}k[i>>2]=293862;y=i+4|0;k[y>>2]=k[j>>2];k[y+4>>2]=k[j+4>>2];k[y+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;fb(140,l|0,293862,4);s=x;x=0;do if(!(s&1)){x=0;xa(587,g+56|0,y|0);A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(l);C=B;D=A;w=19;break}k[f>>2]=g;k[f+4>>2]=2;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);A=x;x=0;if(A&1){A=Hc()|0;B=M;xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);E=0;F=A;G=B;break}else{xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(y);K2a(j);K2a(m);K2a(e);r=c;return 1}}else{B=Hc()|0;C=M;D=B;w=19}while(0);if((w|0)==19){E=1;F=D;G=C}K2a(y);K2a(j);H=l;I=E;J=G;K=F}}else{z=g;w=16}while(0);if((w|0)==16){F=Hc()|0;t=z;u=M;v=F;w=17}if((w|0)==17){H=t;I=1;J=u;K=v}K2a(m);n=H;o=I;p=J;q=K}if((g|0)==(n|0)|o^1){K2a(e);Sc(q|0)}else L=n;do{xu(L+-24|0);L=L+-40|0;K2a(L)}while((L|0)!=(g|0));K2a(e);Sc(q|0);return 0}function Ffa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+112|0;d=c+96|0;e=c+80|0;f=c+72|0;g=c;h=c+56|0;i=c+40|0;q2a(e,258289,11);x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;l=x;x=0;do if(!(l&1)){if(!(k[j+4>>2]|0)){x=0;fb(140,i|0,257104,7);m=x;x=0;if(m&1)break}else{x=0;m=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;n=x;x=0;if(n&1)break;n=k[m+4>>2]|0;x=0;fb(k[(k[n>>2]|0)+76>>2]|0,i|0,n|0,0);n=x;x=0;if(n&1)break}k[h>>2]=293862;n=h+4|0;k[n>>2]=k[i>>2];k[n+4>>2]=k[i+4>>2];k[n+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;x=0;fb(140,g|0,293862,4);m=x;x=0;do if(!(m&1)){x=0;xa(587,g+16|0,n|0);o=x;x=0;if(o&1){o=Hc()|0;p=M;K2a(g);q=p;s=o;t=13;break}k[f>>2]=g;k[f+4>>2]=1;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,1);o=x;x=0;if(o&1){o=Hc()|0;p=M;xu(g+16|0);K2a(g);u=o;v=p;break}else{xu(g+16|0);K2a(g);K2a(n);K2a(i);K2a(e);r=c;return 1}}else{p=Hc()|0;q=M;s=p;t=13}while(0);if((t|0)==13){u=s;v=q}K2a(n);K2a(i);w=v;y=u;K2a(e);Sc(y|0)}while(0);u=Hc()|0;w=M;y=u;K2a(e);Sc(y|0);return 0}function Gfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+160|0;d=c+152|0;e=c+136|0;f=c+128|0;g=c;h=c+112|0;i=c+96|0;j=c+80|0;q2a(e,294764,10);l=k[b+24>>2]|0;k[h>>2]=272351;m=h+4|0;x=0;xa(604,m|0,l|0);l=x;x=0;if(l&1){l=Hc()|0;n=g;o=1;p=M;q=l}else{l=k[h>>2]|0;h=RLa(l)|0;x=0;fb(140,g|0,l|0,h|0);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,m|0);l=x;x=0;if(l&1){l=Hc()|0;s=M;K2a(g);t=g;u=s;v=l;w=17;break}l=g+40|0;x=0;s=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;y=x;x=0;if(y&1){z=l;w=16}else{if(!(k[s+4>>2]|0)){x=0;fb(140,j|0,257104,7);s=x;x=0;if(s&1){z=l;w=16;break}}else{x=0;s=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;y=x;x=0;if(y&1){z=l;w=16;break}y=k[s+4>>2]|0;x=0;fb(k[(k[y>>2]|0)+76>>2]|0,j|0,y|0,0);y=x;x=0;if(y&1){z=l;w=16;break}}k[i>>2]=293862;y=i+4|0;k[y>>2]=k[j>>2];k[y+4>>2]=k[j+4>>2];k[y+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;fb(140,l|0,293862,4);s=x;x=0;do if(!(s&1)){x=0;xa(587,g+56|0,y|0);A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(l);C=B;D=A;w=19;break}k[f>>2]=g;k[f+4>>2]=2;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);A=x;x=0;if(A&1){A=Hc()|0;B=M;xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);E=0;F=A;G=B;break}else{xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(y);K2a(j);K2a(m);K2a(e);r=c;return 1}}else{B=Hc()|0;C=M;D=B;w=19}while(0);if((w|0)==19){E=1;F=D;G=C}K2a(y);K2a(j);H=l;I=E;J=G;K=F}}else{z=g;w=16}while(0);if((w|0)==16){F=Hc()|0;t=z;u=M;v=F;w=17}if((w|0)==17){H=t;I=1;J=u;K=v}K2a(m);n=H;o=I;p=J;q=K}if((g|0)==(n|0)|o^1){K2a(e);Sc(q|0)}else L=n;do{xu(L+-24|0);L=L+-40|0;K2a(L)}while((L|0)!=(g|0));K2a(e);Sc(q|0);return 0}function Hfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0;c=r;r=r+192|0;d=c+168|0;e=c+152|0;f=c+144|0;g=c;h=c+128|0;j=c+112|0;l=c+176|0;m=c+96|0;n=c+80|0;q2a(e,257325,28);i[l>>0]=0;x=0;fb(284,j|0,b+24|0,l|0);l=x;x=0;if(l&1){l=Hc()|0;o=g;p=1;q=l;s=M}else{k[h>>2]=272351;l=h+4|0;k[l>>2]=k[j>>2];k[l+4>>2]=k[j+4>>2];k[l+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;fb(140,g|0,272351,5);h=x;x=0;do if(!(h&1)){x=0;xa(587,g+16|0,l|0);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(g);v=g;w=u;y=t;z=17;break}t=g+40|0;x=0;u=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;A=x;x=0;if(A&1){B=t;z=16}else{if(!(k[u+4>>2]|0)){x=0;fb(140,n|0,257104,7);u=x;x=0;if(u&1){B=t;z=16;break}}else{x=0;u=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;A=x;x=0;if(A&1){B=t;z=16;break}A=k[u+4>>2]|0;x=0;fb(k[(k[A>>2]|0)+76>>2]|0,n|0,A|0,0);A=x;x=0;if(A&1){B=t;z=16;break}}k[m>>2]=293862;A=m+4|0;k[A>>2]=k[n>>2];k[A+4>>2]=k[n+4>>2];k[A+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;fb(140,t|0,293862,4);u=x;x=0;do if(!(u&1)){x=0;xa(587,g+56|0,A|0);C=x;x=0;if(C&1){C=Hc()|0;D=M;K2a(t);E=D;F=C;z=19;break}k[f>>2]=g;k[f+4>>2]=2;x=0;k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];pa(60,a|0,b|0,e|0,d|0,0);C=x;x=0;if(C&1){C=Hc()|0;D=M;xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);G=0;H=C;I=D;break}else{xu(g+56|0);K2a(g+40|0);xu(g+16|0);K2a(g);K2a(A);K2a(n);K2a(l);K2a(j);K2a(e);r=c;return 1}}else{D=Hc()|0;E=M;F=D;z=19}while(0);if((z|0)==19){G=1;H=F;I=E}K2a(A);K2a(n);J=t;K=G;L=I;N=H}}else{B=g;z=16}while(0);if((z|0)==16){H=Hc()|0;v=B;w=M;y=H;z=17}if((z|0)==17){J=v;K=1;L=w;N=y}K2a(l);K2a(j);o=J;p=K;q=N;s=L}if((g|0)==(o|0)|p^1){K2a(e);Sc(q|0)}else O=o;do{xu(O+-24|0);O=O+-40|0;K2a(O)}while((O|0)!=(g|0));K2a(e);Sc(q|0);return 0}function Ifa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0;c=r;r=r+496|0;d=c+480|0;e=c+476|0;f=c+344|0;g=c+368|0;h=c+464|0;i=c+456|0;j=c+144|0;l=c+112|0;m=c+88|0;n=c+56|0;o=c+440|0;p=c+424|0;q=c+24|0;s=c;t=c+408|0;u=c+392|0;v=k[b+24>>2]|0;q2a(d,329672,0);x=0;pa(57,(v|0)<141|0,d|0,303,293207,293255);w=x;x=0;if(w&1){w=Hc()|0;K2a(d);Sc(w|0)}K2a(d);w=k[46308+(v<<2)>>2]|0;k[e>>2]=0;v=b+28|0;ru(f,k[v>>2]|0);x=0;y=Ta(593,k[v>>2]|0,e|0)|0;e=x;x=0;a:do if(!(e&1)){do if(!y){x=0;xa(588,g|0,0);z=x;x=0;if(z&1)break a;x=0;Ta(476,f|0,g|0)|0;z=x;x=0;if(!(z&1)){xu(g);break}z=Hc()|0;A=M;xu(g);B=z;C=A;xu(f);Sc(B|0)}while(0);A=k[b+36>>2]|0;x=0;fb(140,h|0,257354,7);z=x;x=0;if(!(z&1)){x=0;if(!w){iu(m,0);z=x;x=0;if(z&1)D=46;else D=14}else{pu(m,w);z=x;x=0;if(z&1)D=46;else D=14}if((D|0)==14){k[l>>2]=257362;z=l+8|0;x=0;xa(816,z|0,m|0);E=x;x=0;if(E&1){E=Hc()|0;F=j;G=1;H=E;I=M}else{E=k[l>>2]|0;J=RLa(E)|0;x=0;fb(140,j|0,E|0,J|0);J=x;x=0;do if(!(J&1)){x=0;xa(816,j+16|0,z|0);E=x;x=0;if(E&1){E=Hc()|0;K=M;K2a(j);L=j;N=K;O=E;D=49;break}E=j+40|0;k[n>>2]=272351;K=n+8|0;x=0;xa(589,K|0,f|0);P=x;x=0;if(P&1){Q=E;D=48}else{P=k[n>>2]|0;R=RLa(P)|0;x=0;fb(140,E|0,P|0,R|0);R=x;x=0;do if(!(R&1)){x=0;xa(816,j+56|0,K|0);P=x;x=0;if(P&1){P=Hc()|0;S=M;K2a(E);T=E;U=S;V=P;D=51;break}P=j+80|0;x=0;nb(132,p|0,k[v>>2]|0,2,0);S=x;x=0;if(S&1){W=P;D=50}else{k[o>>2]=257368;S=o+4|0;k[S>>2]=k[p>>2];k[S+4>>2]=k[p+4>>2];k[S+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;x=0;fb(140,P|0,257368,8);X=x;x=0;b:do if(X&1){Y=P;D=52}else{x=0;xa(587,j+96|0,S|0);Z=x;x=0;if(Z&1){Z=Hc()|0;_=M;K2a(P);$=P;aa=_;ba=Z;D=53;break}Z=j+120|0;do if((A|0)==139){x=0;xa(588,s|0,0);_=x;x=0;if(_&1){Y=Z;D=52;break b}}else{x=0;fb(140,d|0,329672,0);_=x;x=0;if(_&1){Y=Z;D=52;break b}x=0;pa(57,(A|0)<141|0,d|0,303,293207,293255);_=x;x=0;if(!(_&1)){K2a(d);x=0;xa(593,s|0,k[46308+(A<<2)>>2]|0);_=x;x=0;if(_&1){Y=Z;D=52;break b}else break}else{_=Hc()|0;ca=M;K2a(d);$=Z;aa=ca;ba=_;D=53;break b}}while(0);k[q>>2]=257377;_=q+8|0;x=0;xa(816,_|0,s|0);ca=x;x=0;if(ca&1){ca=Hc()|0;da=1;ea=ca;fa=M;ga=Z}else{ca=k[q>>2]|0;ha=RLa(ca)|0;x=0;fb(140,Z|0,ca|0,ha|0);ha=x;x=0;do if(ha&1){ia=Z;D=55}else{x=0;xa(816,j+136|0,_|0);ca=x;x=0;if(ca&1){ca=Hc()|0;ja=M;K2a(Z);ka=Z;la=ja;ma=ca;D=56;break}ca=j+160|0;x=0;ja=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;na=x;x=0;if(na&1){ia=ca;D=55;break}if(!(k[ja+4>>2]|0)){x=0;fb(140,u|0,257104,7);ja=x;x=0;if(ja&1){ia=ca;D=55;break}}else{x=0;ja=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;na=x;x=0;if(na&1){ia=ca;D=55;break}na=k[ja+4>>2]|0;x=0;fb(k[(k[na>>2]|0)+76>>2]|0,u|0,na|0,0);na=x;x=0;if(na&1){ia=ca;D=55;break}}k[t>>2]=293862;na=t+4|0;k[na>>2]=k[u>>2];k[na+4>>2]=k[u+4>>2];k[na+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;x=0;fb(140,ca|0,293862,4);ja=x;x=0;do if(!(ja&1)){x=0;xa(587,j+176|0,na|0);oa=x;x=0;if(oa&1){oa=Hc()|0;qa=M;K2a(ca);ra=qa;sa=oa;D=58;break}k[i>>2]=j;k[i+4>>2]=5;x=0;k[d>>2]=k[i>>2];k[d+4>>2]=k[i+4>>2];pa(60,a|0,b|0,h|0,d|0,0);oa=x;x=0;if(oa&1){oa=Hc()|0;qa=M;xu(j+176|0);K2a(j+160|0);xu(j+136|0);K2a(j+120|0);xu(j+96|0);K2a(j+80|0);xu(j+56|0);K2a(j+40|0);xu(j+16|0);K2a(j);ta=0;ua=oa;va=qa;break}else{xu(j+176|0);K2a(j+160|0);xu(j+136|0);K2a(j+120|0);xu(j+96|0);K2a(j+80|0);xu(j+56|0);K2a(j+40|0);xu(j+16|0);K2a(j);K2a(na);K2a(u);xu(_);xu(s);K2a(S);K2a(p);xu(K);xu(z);xu(m);K2a(h);xu(f);r=c;return 1}}else{qa=Hc()|0;ra=M;sa=qa;D=58}while(0);if((D|0)==58){ta=1;ua=sa;va=ra}K2a(na);K2a(u);wa=ta;ya=ua;za=va;Aa=ca}while(0);if((D|0)==55){Z=Hc()|0;ka=ia;la=M;ma=Z;D=56}if((D|0)==56){wa=1;ya=ma;za=la;Aa=ka}xu(_);da=wa;ea=ya;fa=za;ga=Aa}xu(s);Ca=da;Da=ea;Ea=fa;Fa=ga}while(0);if((D|0)==52){P=Hc()|0;$=Y;aa=M;ba=P;D=53}if((D|0)==53){Ca=1;Da=ba;Ea=aa;Fa=$}K2a(S);K2a(p);Ga=Ca;Ha=Da;Ia=Ea;Ja=Fa}}else{W=E;D=50}while(0);if((D|0)==50){E=Hc()|0;T=W;U=M;V=E;D=51}if((D|0)==51){Ga=1;Ha=V;Ia=U;Ja=T}xu(K);Ka=Ga;La=Ha;Ma=Ia;Na=Ja}}else{Q=j;D=48}while(0);if((D|0)==48){A=Hc()|0;L=Q;N=M;O=A;D=49}if((D|0)==49){Ka=1;La=O;Ma=N;Na=L}xu(z);F=Na;G=Ka;H=La;I=Ma}xu(m);Oa=F;Pa=G;Qa=H;Ra=I}else if((D|0)==46){A=Hc()|0;Oa=j;Pa=1;Qa=A;Ra=M}if(!((j|0)==(Oa|0)|Pa^1)){A=Oa;do{xu(A+-24|0);A=A+-40|0;K2a(A)}while((A|0)!=(j|0))}K2a(h);B=Qa;C=Ra;xu(f);Sc(B|0)}}while(0);Ra=Hc()|0;B=Ra;C=M;xu(f);Sc(B|0);return 0}function Jfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Kfa(a,b){a=a|0;b=b|0;return}function Lfa(a,b){a=a|0;b=b|0;return}function Mfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Nfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Ofa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Pfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Qfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Rfa(a,b){a=a|0;b=b|0;return}function Sfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Tfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Ufa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Vfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Wfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Xfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function Yfa(a,b){a=a|0;b=b|0;return}function Zfa(a,b){a=a|0;b=b|0;return}function _fa(a,b){a=a|0;b=b|0;return}function $fa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function aga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function bga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function cga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function dga(a,b){a=a|0;b=b|0;return}function ega(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function fga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function gga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function hga(a,b){a=a|0;b=b|0;return}function iga(a,b){a=a|0;b=b|0;return}function jga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function kga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function lga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function mga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function nga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function oga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function pga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function qga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function rga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function sga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function tga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function uga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function vga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b;d=a+52|0;e=(k[d>>2]|0)!=0;q2a(c,257393,40);x=0;pa(57,e|0,c|0,157,257434,257489);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}K2a(c);c=k[d>>2]|0;k[d>>2]=c+-1;d=a+40|0;e=k[d>>2]|0;f=k[a+36>>2]|0;if((1-c-(k[a+48>>2]|0)+((e|0)==(f|0)?0:(e-f<<8)+-1|0)|0)>>>0<=2047){r=b;return}OBa(k[e+-4>>2]|0);k[d>>2]=(k[d>>2]|0)+-4;r=b;return}function wga(a,b){a=a|0;b=b|0;return}function xga(a,b){a=a|0;b=b|0;return}function yga(a,b){a=a|0;b=b|0;return}function zga(){k[9986]=0;k[9987]=0;k[9988]=0;return}function Aga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=k[d>>2]|0;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=k[m>>2]|0;return e|0}else if((o|0)==9){k[b>>2]=s;e=k[r>>2]|0;return e|0}else if((o|0)==10){k[b>>2]=q;e=q;return e|0}return 0}function Bga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(32)|0;i=h+16|0;x=0;xa(604,i|0,c|0);j=x;x=0;if(j&1){j=Hc()|0;OBa(h);Sc(j|0)}k[h+28>>2]=k[c+12>>2];k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=Gga(a,e,f,i)|0;i=k[g>>2]|0;if(!i){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)l=h;else{k[a>>2]=e;l=k[g>>2]|0}ui(k[a+4>>2]|0,l);l=a+8|0;k[l>>2]=(k[l>>2]|0)+1;m=h;r=d;return m|0}else{if((i|0)==(h|0)){m=i;r=d;return m|0}K2a(h+16|0);OBa(h);m=i;r=d;return m|0}return 0}function Cga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;j=d+16|0;l=d+12|0;m=d+8|0;n=d+4|0;o=d;p=k[b>>2]|0;q=k[b+4>>2]|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;do if((p|0)==(q|0))s=p;else{b=i[p>>0]|0;t=(b&1)==0;u=t?p+1|0:k[p+8>>2]|0;v=u+(t?(b&255)>>>1:k[p+4>>2]|0)|0;k[h>>2]=a+1;k[j>>2]=u;k[l>>2]=v;x=0;k[g>>2]=k[h>>2];k[f>>2]=k[j>>2];k[e>>2]=k[l>>2];db(72,a|0,g|0,f|0,e|0)|0;v=x;x=0;if(!(v&1)){s=p+12|0;break}v=Hc()|0;w=v;y=M;K2a(a);Sc(w|0)}while(0);if((s|0)==(q|0)){r=d;return}p=a+8|0;l=a+4|0;j=a+1|0;h=s;while(1){s=i[a>>0]|0;v=(s&1)==0;u=(v?j:k[p>>2]|0)+(v?(s&255)>>>1:k[l>>2]|0)|0;s=c+(RLa(c)|0)|0;k[f>>2]=u;x=0;k[e>>2]=k[f>>2];db(73,a|0,e|0,c|0,s|0)|0;s=x;x=0;if(s&1)break;s=i[a>>0]|0;u=(s&1)==0;v=i[h>>0]|0;b=(v&1)==0;t=b?h+1|0:k[h+8>>2]|0;z=t+(b?(v&255)>>>1:k[h+4>>2]|0)|0;k[m>>2]=(u?j:k[p>>2]|0)+(u?(s&255)>>>1:k[l>>2]|0);k[n>>2]=t;k[o>>2]=z;x=0;k[g>>2]=k[m>>2];k[f>>2]=k[n>>2];k[e>>2]=k[o>>2];db(72,a|0,g|0,f|0,e|0)|0;z=x;x=0;if(z&1)break;h=h+12|0;if((h|0)==(q|0)){A=12;break}}if((A|0)==12){r=d;return}d=Hc()|0;w=d;y=M;K2a(a);Sc(w|0)}function Dga(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=r;r=r+176|0;f=e+152|0;g=e+16|0;h=e;j=g+56|0;l=g+4|0;k[g>>2]=20356;k[j>>2]=20376;x=0;xa(582,g+56|0,l|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;o=m;mab(j);Sc(o|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=20300;k[g+56>>2]=20320;x=0;va(1449,l|0);m=x;x=0;do if(m&1){p=Hc()|0;q=M;s=p}else{k[l>>2]=20392;p=g+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;xa(583,l|0,f|0);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(f);K2a(p);obb(l);q=u;s=t;break}K2a(f);t=i[b>>0]|0;u=(t&1)==0;v=u?b+1|0:k[b+8>>2]|0;w=u?(t&255)>>>1:k[b+4>>2]|0;t=v+w|0;a:do if(!w)y=11;else{u=v;z=0;while(1){A=i[u>>0]|0;B=g+(k[(k[g>>2]|0)+-12>>2]|0)+4|0;k[B>>2]=k[B>>2]&-75|8;k[g+(k[(k[g>>2]|0)+-12>>2]|0)+76>>2]=48;k[g+(k[(k[g>>2]|0)+-12>>2]|0)+12>>2]=(z|0)!=0?2:c;x=0;Ta(477,g|0,A&255|0)|0;A=x;x=0;if(A&1)break;u=u+1|0;if((u|0)==(t|0)){y=11;break a}else z=z+1|0}z=Hc()|0;C=z;D=M}while(0);do if((y|0)==11){x=0;if((d|0)!=1){Fi(a,l);t=x;x=0;if(!(t&1)){k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);r=e;return}t=Hc()|0;E=M;F=t;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(F|0)}Fi(h,l);t=x;x=0;if(t&1){t=Hc()|0;C=t;D=M;break}x=0;t=Fa(86,h|0,0,257534)|0;v=x;x=0;if(v&1){v=Hc()|0;w=M;K2a(h);E=w;F=v;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(F|0)}else{k[a>>2]=k[t>>2];k[a+4>>2]=k[t+4>>2];k[a+8>>2]=k[t+8>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;K2a(h);k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);r=e;return}}while(0);E=D;F=C;k[g>>2]=20300;k[j>>2]=20320;k[l>>2]=20392;K2a(p);obb(l);mab(j);Sc(F|0)}while(0);n=q;o=s;mab(j);Sc(o|0)}function Ega(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=10;h=e;j=(k[b>>2]|0)-(a+1)|0}else{e=k[a>>2]|0;f=k[a+4>>2]|0;g=(e&-2)+-1|0;h=e&255;j=(k[b>>2]|0)-(k[a+8>>2]|0)|0}b=k[c>>2]|0;e=k[d>>2]|0;l=e-b|0;if((e|0)==(b|0))m=h;else{if((g-f|0)>>>0>=l>>>0){if(!(h&1))n=a+1|0;else n=k[a+8>>2]|0;if((f|0)==(j|0))o=n;else{h=n+j|0;Eyb(h+l|0,h|0,f-j|0)|0;o=n}}else{S3a(a,g,f-g+l|0,f,j,0,l);o=k[a+8>>2]|0}g=l+f|0;if(!(i[a>>0]&1))i[a>>0]=g<<1;else k[a+4>>2]=g;i[o+g>>0]=0;g=k[c>>2]|0;if((g|0)!=(k[d>>2]|0)){f=g;g=o+j|0;while(1){i[g>>0]=i[f>>0]|0;f=(k[c>>2]|0)+1|0;k[c>>2]=f;if((f|0)==(k[d>>2]|0))break;else g=g+1|0}}m=i[a>>0]|0}if(!(m&1)){p=a+1|0;q=p+j|0;return q|0}else{p=k[a+8>>2]|0;q=p+j|0;return q|0}return 0}function Fga(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;e=i[a>>0]|0;if(!(e&1)){f=(e&255)>>>1;g=10;h=e;j=(k[b>>2]|0)-(a+1)|0}else{e=k[a>>2]|0;f=k[a+4>>2]|0;g=(e&-2)+-1|0;h=e&255;j=(k[b>>2]|0)-(k[a+8>>2]|0)|0}b=d-c|0;if((d|0)==(c|0))l=h;else{if((g-f|0)>>>0>=b>>>0){if(!(h&1))m=a+1|0;else m=k[a+8>>2]|0;if((f|0)==(j|0))n=m;else{h=m+j|0;Eyb(h+b|0,h|0,f-j|0)|0;n=m}}else{S3a(a,g,f+b-g|0,f,j,0,b);n=k[a+8>>2]|0}g=f+b|0;if(!(i[a>>0]&1))i[a>>0]=g<<1;else k[a+4>>2]=g;i[n+g>>0]=0;g=c;c=n+j|0;while(1){i[c>>0]=i[g>>0]|0;g=g+1|0;if((g|0)==(d|0))break;else c=c+1|0}l=i[a>>0]|0}if(!(l&1)){o=a+1|0;p=o+j|0;return p|0}else{o=k[a+8>>2]|0;p=o+j|0;return p|0}return 0}function Gga(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=f+16|0,h=i[d>>0]|0,j=(h&1)==0,l=j?(h&255)>>>1:k[d+4>>2]|0,h=i[g>>0]|0,m=(h&1)==0,n=m?(h&255)>>>1:k[f+20>>2]|0,h=j?d+1|0:k[d+8>>2]|0,j=m?g+1|0:k[f+24>>2]|0,g=n>>>0>>0,m=ZLa(h,j,g?n:l)|0,o=l>>>0>>0,(((m|0)==0?(o?-2147483648:0):m)|0)>=0):0){m=ZLa(j,h,o?l:n)|0;if((((m|0)==0?(g?-2147483648:0):m)|0)>=0){k[c>>2]=b;p=c;return p|0}m=f+4|0;g=k[m>>2]|0;n=(g|0)==0;if(n){o=f;while(1){j=k[o+8>>2]|0;if((k[j>>2]|0)==(o|0)){q=j;break}else o=j}}else{o=g;while(1){g=k[o>>2]|0;if(!g){q=o;break}else o=g}}if((q|0)!=(e|0)?(e=q+16|0,o=i[e>>0]|0,g=(o&1)==0,j=g?(o&255)>>>1:k[q+20>>2]|0,o=ZLa(h,g?e+1|0:k[q+24>>2]|0,j>>>0>>0?j:l)|0,(((o|0)==0?(l>>>0>>0?-2147483648:0):o)|0)>=0):0){p=Hga(a,c,d)|0;return p|0}if(n){k[c>>2]=f;p=m;return p|0}else{k[c>>2]=q;p=q;return p|0}}if((f|0)!=(k[a>>2]|0)){q=k[f>>2]|0;if(!q){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0))m=n;else{r=n;break}}}else{m=q;while(1){q=k[m+4>>2]|0;if(!q){r=m;break}else m=q}}m=r+16|0;q=i[m>>0]|0;n=(q&1)==0;o=n?(q&255)>>>1:k[r+20>>2]|0;q=i[d>>0]|0;j=(q&1)==0;l=j?(q&255)>>>1:k[d+4>>2]|0;q=ZLa(n?m+1|0:k[r+24>>2]|0,j?d+1|0:k[d+8>>2]|0,l>>>0>>0?l:o)|0;if((((q|0)==0?(o>>>0>>0?-2147483648:0):q)|0)<0)s=r;else{p=Hga(a,c,d)|0;return p|0}}else s=b;if(!(k[f>>2]|0)){k[c>>2]=f;p=f;return p|0}else{f=s;k[c>>2]=f;p=f+4|0;return p|0}return 0}function Hga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function Iga(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=a+32|0;k[b>>2]=0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;if((c|0)==(d|0)){e=0;return e|0}f=c;do{c=k[f>>2]|0;Tf[k[(k[c>>2]|0)+12>>2]&2047](c,a);f=f+4|0}while((f|0)!=(d|0));e=k[b>>2]|0;return e|0}function Jga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=k[b+8>>2]|0;if((c|0)==-1?(k[b+12>>2]|0)==-1:0){d=0;return d|0}e=k[a+16>>2]|0;if((e|0)==-1?(k[a+20>>2]|0)==-1:0){d=0;return d|0}f=k[b+16>>2]|0;if(!f){d=0;return d|0}g=k[a+24>>2]|0;if(!g){d=0;return d|0}h=i[f>>0]|0;j=(h&1)==0;l=(h&255)>>>1;h=j?l:k[f+4>>2]|0;m=i[g>>0]|0;n=(m&1)==0;if((h|0)!=((n?(m&255)>>>1:k[g+4>>2]|0)|0)){d=0;return d|0}m=n?g+1|0:k[g+8>>2]|0;if(j){a:do if(h){j=l;g=f+1|0;n=m;while(1){if((i[g>>0]|0)!=(i[n>>0]|0)){d=0;break}j=j+-1|0;if(!j)break a;else{g=g+1|0;n=n+1|0}}return d|0}while(0);if((c|0)>(e|0)){d=0;return d|0}}else if((c|0)>(e|0)|(ZLa(k[f+8>>2]|0,m,h)|0)!=0){d=0;return d|0}if((k[a+20>>2]|0)>(k[b+12>>2]|0)){d=0;return d|0}k[a+32>>2]=b;d=1;return d|0}function Kga(){k[10081]=0;k[10082]=0;k[10083]=0;return}function Lga(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;e=r;r=r+16|0;f=e+4|0;g=e;k[a>>2]=40344;k[a+4>>2]=0;h=a+8|0;n2a(h,c);k[a+20>>2]=b;b=a+24|0;k[a+28>>2]=0;k[a+32>>2]=0;c=a+28|0;k[b>>2]=c;a=k[d>>2]|0;i=d+4|0;if((a|0)==(i|0)){r=e;return}d=c;j=a;l=a;while(1){k[g>>2]=d;x=0;k[f>>2]=k[g>>2];Fa(139,b|0,f|0,j+16|0)|0;a=x;x=0;if(a&1){m=9;break}a=k[l+4>>2]|0;if(!a){n=l;while(1){o=k[n+8>>2]|0;if((k[o>>2]|0)==(n|0)){p=o;break}else n=o}}else{n=a;while(1){o=k[n>>2]|0;if(!o){p=n;break}else n=o}}if((p|0)==(i|0)){m=8;break}else{j=p;l=p}}if((m|0)==8){r=e;return}else if((m|0)==9){m=Hc()|0;via(b,k[c>>2]|0);K2a(h);Sc(m|0)}}function Mga(a,b){a=a|0;b=b|0;var c=0;c=a+36|0;k[c>>2]=b;b=k[a+20>>2]|0;Tf[k[(k[b>>2]|0)+12>>2]&2047](b,a);k[c>>2]=0;return}function Nga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,257597,15);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function Oga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c+12|0;e=c;f=k[a+36>>2]|0;D2a(e,k[a+4>>2]<<1,32);a=i[e>>0]|0;g=(a&1)==0;x=0;h=Fa(92,f|0,(g?e+1|0:k[e+8>>2]|0)|0,(g?(a&255)>>>1:k[e+4>>2]|0)|0)|0;a=x;x=0;do if((!(a&1)?(g=i[b>>0]|0,f=(g&1)==0,x=0,j=Fa(92,h|0,(f?b+1|0:k[b+8>>2]|0)|0,(f?(g&255)>>>1:k[b+4>>2]|0)|0)|0,g=x,x=0,!(g&1)):0)?(x=0,g=Ba(564,j+(k[(k[j>>2]|0)+-12>>2]|0)|0)|0,f=x,x=0,!(f&1)):0){k[d>>2]=g;x=0;g=Ta(495,d|0,74148)|0;f=x;x=0;if(!(f&1)?(x=0,f=Ta(k[(k[g>>2]|0)+28>>2]|0,g|0,10)|0,g=x,x=0,!(g&1)):0){$pb(d);x=0;Ta(540,j|0,f|0)|0;f=x;x=0;if(f&1)break;x=0;Ba(586,j|0)|0;j=x;x=0;if(j&1)break;K2a(e);r=c;return}j=Hc()|0;f=M;$pb(d);l=f;m=j;K2a(e);Sc(m|0)}while(0);d=Hc()|0;l=M;m=d;K2a(e);Sc(m|0)}function Pga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+64|0;d=c+52|0;e=c+48|0;f=c+36|0;g=c+24|0;h=c+12|0;j=c;l=a+28|0;m=k[l>>2]|0;a:do if(m){n=m;while(1){o=k[n+16>>2]|0;if(o>>>0>b>>>0)p=n;else{if(o>>>0>=b>>>0)break;p=n+4|0}n=k[p>>2]|0;if(!n)break a}n=k[a+36>>2]|0;D2a(f,k[a+4>>2]<<1,32);o=i[f>>0]|0;q=(o&1)==0;x=0;s=Fa(92,n|0,(q?f+1|0:k[f+8>>2]|0)|0,(q?(o&255)>>>1:k[f+4>>2]|0)|0)|0;o=x;x=0;b:do if(!(o&1)?(x=0,q=Fa(92,s|0,257613,14)|0,n=x,x=0,!(n&1)):0){n=k[l>>2]|0;c:do if(n){t=n;while(1){u=k[t+16>>2]|0;if(u>>>0>b>>>0){v=k[t>>2]|0;if(!v)break c;else w=v}else{if(u>>>0>=b>>>0){y=t;break}u=k[t+4>>2]|0;if(!u)break c;else w=u}t=w}if(y){if(!(i[y+64>>0]|0)){t=q+(k[(k[q>>2]|0)+-12>>2]|0)+4|0;k[t>>2]=k[t>>2]&-75|2;x=0;t=Ta(541,q|0,y+24|0)|0;u=x;x=0;if(u&1){z=29;break b}else A=t}else{x=0;t=Fa(92,q|0,257628,5)|0;u=x;x=0;if(u&1){z=29;break b}else A=t}x=0;t=Ba(564,A+(k[(k[A>>2]|0)+-12>>2]|0)|0)|0;u=x;x=0;if(u&1){z=29;break b}k[e>>2]=t;x=0;t=Ta(495,e|0,74148)|0;u=x;x=0;if(!(u&1)?(x=0,u=Ta(k[(k[t>>2]|0)+28>>2]|0,t|0,10)|0,t=x,x=0,!(t&1)):0){$pb(e);x=0;Ta(540,A|0,u|0)|0;u=x;x=0;if(u&1){z=29;break b}x=0;Ba(586,A|0)|0;u=x;x=0;if(u&1){z=29;break b}K2a(f);break a}u=Hc()|0;t=M;$pb(e);B=t;C=u;break b}}while(0);q=Rd(8)|0;x=0;xa(671,q|0,296399);n=x;x=0;if(n&1){n=Hc()|0;u=M;Fc(q|0);B=u;C=n;break}else{k[q>>2]=47544;x=0;fb(149,q|0,9024,933);x=0;z=29;break}}else z=29;while(0);if((z|0)==29){s=Hc()|0;B=M;C=s}K2a(f);D=C;E=B;Sc(D|0)}while(0);B=a+8|0;C=i[B>>0]|0;if(!(C&1))F=(C&255)>>>1;else F=k[a+12>>2]|0;if(!F){r=c;return}F=k[a+36>>2]|0;D2a(g,k[a+4>>2]<<1,32);a=i[g>>0]|0;C=(a&1)==0;x=0;f=Fa(92,F|0,(C?g+1|0:k[g+8>>2]|0)|0,(C?(a&255)>>>1:k[g+4>>2]|0)|0)|0;a=x;x=0;if((!(a&1)?(x=0,a=Fa(92,f|0,257634,11)|0,f=x,x=0,!(f&1)):0)?(f=k[b+8>>2]|0,x=0,pa(48,j|0,B|0,f|0,(k[b+12>>2]|0)-f|0,B|0),B=x,x=0,!(B&1)):0){x=0;fb(311,h|0,j|0,0);B=x;x=0;if(B&1){B=Hc()|0;G=B;H=M}else{B=i[h>>0]|0;f=(B&1)==0;x=0;b=Fa(92,a|0,(f?h+1|0:k[h+8>>2]|0)|0,(f?(B&255)>>>1:k[h+4>>2]|0)|0)|0;B=x;x=0;do if(!(B&1)?(x=0,f=Ba(564,b+(k[(k[b>>2]|0)+-12>>2]|0)|0)|0,a=x,x=0,!(a&1)):0){k[d>>2]=f;x=0;f=Ta(495,d|0,74148)|0;a=x;x=0;if(!(a&1)?(x=0,a=Ta(k[(k[f>>2]|0)+28>>2]|0,f|0,10)|0,f=x,x=0,!(f&1)):0){$pb(d);x=0;Ta(540,b|0,a|0)|0;a=x;x=0;if(a&1){z=49;break}x=0;Ba(586,b|0)|0;a=x;x=0;if(a&1){z=49;break}K2a(h);K2a(j);K2a(g);r=c;return}a=Hc()|0;f=M;$pb(d);I=f;J=a}else z=49;while(0);if((z|0)==49){z=Hc()|0;I=M;J=z}K2a(h);G=J;H=I}K2a(j);K=G;L=H}else{H=Hc()|0;K=H;L=M}K2a(g);D=K;E=L;Sc(D|0)}function Qga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[b+40>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;g=i[f>>0]|0;h=(g&1)==0?(g&255)>>>1:k[f+4>>2]|0;x=0;nb(83,e|0,257646,17,h+17|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;Fa(88,e|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,h|0)|0;h=x;x=0;if(h&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;j=Ta(484,e|0,276785)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(e);Sc(n|0)};k[d>>2]=k[j>>2];k[d+4>>2]=k[j+4>>2];k[d+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;xa(818,a|0,d|0);j=x;x=0;if(!(j&1)){K2a(d);K2a(e);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}c=Hc()|0;b=M;K2a(d);m=b;n=c;K2a(e);Sc(n|0);return 0}function Rga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[b+24>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;g=i[f>>0]|0;h=(g&1)==0?(g&255)>>>1:k[f+4>>2]|0;x=0;nb(83,e|0,257664,20,h+20|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;Fa(88,e|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,h|0)|0;h=x;x=0;if(h&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;j=Ta(484,e|0,276785)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(e);Sc(n|0)};k[d>>2]=k[j>>2];k[d+4>>2]=k[j+4>>2];k[d+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;xa(818,a|0,d|0);j=x;x=0;if(!(j&1)){K2a(d);K2a(e);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}c=Hc()|0;b=M;K2a(d);m=b;n=c;K2a(e);Sc(n|0);return 0}function Sga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,257685,20);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function Tga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[b+24>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;g=i[f>>0]|0;h=(g&1)==0?(g&255)>>>1:k[f+4>>2]|0;x=0;nb(83,e|0,257706,18,h+18|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;Fa(88,e|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,h|0)|0;h=x;x=0;if(h&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;j=Ta(484,e|0,276785)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(e);Sc(n|0)};k[d>>2]=k[j>>2];k[d+4>>2]=k[j+4>>2];k[d+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;xa(818,a|0,d|0);j=x;x=0;if(!(j&1)){K2a(d);K2a(e);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}c=Hc()|0;b=M;K2a(d);m=b;n=c;K2a(e);Sc(n|0);return 0}function Uga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[b+24>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;b=i[f>>0]|0;g=(b&1)==0?(b&255)>>>1:k[f+4>>2]|0;x=0;nb(83,e|0,257725,16,g+16|0);b=x;x=0;if(b&1){h=Hc()|0;j=M;K2a(e);Sc(h|0)}x=0;Fa(88,e|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,g|0)|0;g=x;x=0;if(g&1){h=Hc()|0;j=M;K2a(e);Sc(h|0)}x=0;h=Ta(484,e|0,276785)|0;j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j;K2a(e);Sc(m|0)};k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];k[d+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;xa(818,a|0,d|0);h=x;x=0;if(!(h&1)){K2a(d);K2a(e);h=a+4|0;k[h>>2]=(k[h>>2]|0)+1;r=c;return 1}c=Hc()|0;h=M;K2a(d);l=h;m=c;K2a(e);Sc(m|0);return 0}function Vga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[b+24>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;b=i[f>>0]|0;g=(b&1)==0?(b&255)>>>1:k[f+4>>2]|0;x=0;nb(83,e|0,257742,11,g+11|0);b=x;x=0;if(b&1){h=Hc()|0;j=M;K2a(e);Sc(h|0)}x=0;Fa(88,e|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,g|0)|0;g=x;x=0;if(g&1){h=Hc()|0;j=M;K2a(e);Sc(h|0)}x=0;h=Ta(484,e|0,276785)|0;j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j;K2a(e);Sc(m|0)};k[d>>2]=k[h>>2];k[d+4>>2]=k[h+4>>2];k[d+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;xa(818,a|0,d|0);h=x;x=0;if(!(h&1)){K2a(d);K2a(e);h=a+4|0;k[h>>2]=(k[h>>2]|0)+1;r=c;return 1}c=Hc()|0;h=M;K2a(d);l=h;m=c;K2a(e);Sc(m|0);return 0}function Wga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,257754,13);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function Xga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+48|0;d=c+36|0;e=c+24|0;f=c+12|0;g=c;h=k[b+24>>2]|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;j=i[h>>0]|0;l=(j&1)==0?(j&255)>>>1:k[h+4>>2]|0;x=0;nb(83,g|0,257768,20,l+20|0);j=x;x=0;if(j&1){m=Hc()|0;n=M;K2a(g);Sc(m|0)}x=0;Fa(88,g|0,((i[h>>0]&1)==0?h+1|0:k[h+8>>2]|0)|0,l|0)|0;l=x;x=0;if(l&1){m=Hc()|0;n=M;K2a(g);Sc(m|0)}x=0;m=Ta(484,g|0,276785)|0;n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n;K2a(g);Sc(p|0)};k[f>>2]=k[m>>2];k[f+4>>2]=k[m+4>>2];k[f+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;m=k[b+32>>2]|0;if(!m){x=0;n=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;l=x;x=0;if(l&1)q=12;else{s=n;q=7}}else{s=m;q=7}if((q|0)==7){x=0;m=Ta(484,f|0,((s|0)>2?257789:329672)|0)|0;s=x;x=0;if(s&1)q=12;else{k[e>>2]=k[m>>2];k[e+4>>2]=k[m+4>>2];k[e+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;m=Ta(484,e|0,((i[b+78>>0]|0)!=0?257799:329672)|0)|0;s=x;x=0;do if(!(s&1)){k[d>>2]=k[m>>2];k[d+4>>2]=k[m+4>>2];k[d+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;xa(818,a|0,d|0);n=x;x=0;if(n&1){n=Hc()|0;l=M;K2a(d);t=l;u=n;break}else{K2a(d);K2a(e);K2a(f);K2a(g);Pga(a,b);n=a+4|0;k[n>>2]=(k[n>>2]|0)+1;r=c;return 1}}else{n=Hc()|0;t=M;u=n}while(0);K2a(e);v=t;w=u}}if((q|0)==12){q=Hc()|0;v=M;w=q}K2a(f);o=v;p=w;K2a(g);Sc(p|0);return 0}function Yga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;c=r;r=r+80|0;d=c+60|0;e=c+48|0;f=c+36|0;g=c+24|0;h=c+12|0;j=c;l=k[b+24>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;m=i[l>>0]|0;n=(m&1)==0?(m&255)>>>1:k[l+4>>2]|0;x=0;nb(83,e|0,257808,21,n+21|0);m=x;x=0;if(m&1){o=Hc()|0;p=M;K2a(e);Sc(o|0)}x=0;Fa(88,e|0,((i[l>>0]&1)==0?l+1|0:k[l+8>>2]|0)|0,n|0)|0;n=x;x=0;if(n&1){o=Hc()|0;p=M;K2a(e);Sc(o|0)}x=0;o=Ta(484,e|0,276785)|0;p=x;x=0;do if(p&1){n=Hc()|0;q=M;s=n}else{k[d>>2]=k[o>>2];k[d+4>>2]=k[o+4>>2];k[d+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;x=0;xa(818,a|0,d|0);n=x;x=0;if(n&1){n=Hc()|0;l=M;K2a(d);q=l;s=n;break}K2a(d);K2a(e);n=k[a+36>>2]|0;l=a+4|0;D2a(f,k[l>>2]<<1,32);m=i[f>>0]|0;t=(m&1)==0;x=0;u=Fa(92,n|0,(t?f+1|0:k[f+8>>2]|0)|0,(t?(m&255)>>>1:k[f+4>>2]|0)|0)|0;m=x;x=0;a:do if(!(m&1)?(x=0,t=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,n=x,x=0,!(n&1)):0){x=0;do if(!(k[t+4>>2]|0)){q2a(g,257840,16);n=x;x=0;if(n&1){n=Hc()|0;v=n;w=M;break a}else{y=0;z=g;A=17;break}}else{q2a(h,257830,9);n=x;x=0;if(n&1){A=25;break a}x=0;n=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;B=x;x=0;if(!(B&1)?(B=k[n+4>>2]|0,x=0,fb(k[(k[B>>2]|0)+76>>2]|0,j|0,B|0,0),B=x,x=0,!(B&1)):0){B=i[j>>0]|0;n=(B&1)==0;x=0;C=Fa(88,h|0,(n?j+1|0:k[j+8>>2]|0)|0,(n?(B&255)>>>1:k[j+4>>2]|0)|0)|0;B=x;x=0;if(B&1){B=Hc()|0;D=M;E=B;A=29;break}else{k[g>>2]=k[C>>2];k[g+4>>2]=k[C+4>>2];k[g+8>>2]=k[C+8>>2];k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;y=1;z=g;A=17;break}}C=Hc()|0;F=C;G=M}while(0);if((A|0)==17){t=i[z>>0]|0;C=(t&1)==0;x=0;B=Fa(92,u|0,(C?g+1|0:k[g+8>>2]|0)|0,(C?(t&255)>>>1:k[g+4>>2]|0)|0)|0;t=x;x=0;if(!(t&1)?(x=0,Fa(92,B|0,324246,1)|0,B=x,x=0,!(B&1)):0){K2a(g);if(!y){K2a(f);Pga(a,b);H=k[l>>2]|0;I=H+1|0;k[l>>2]=I;r=c;return 1}K2a(j);K2a(h);K2a(f);Pga(a,b);H=k[l>>2]|0;I=H+1|0;k[l>>2]=I;r=c;return 1}B=Hc()|0;t=M;K2a(g);if(y){D=t;E=B;A=29}else{v=B;w=t;break}}if((A|0)==29){K2a(j);F=E;G=D}K2a(h);v=F;w=G}else A=25;while(0);if((A|0)==25){l=Hc()|0;v=l;w=M}K2a(f);J=w;K=v;Sc(K|0)}while(0);K2a(e);J=q;K=s;Sc(K|0);return 0}function Zga(a,b){a=a|0;b=b|0;D2a(a,k[b+4>>2]<<1,32);return}function _ga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[b+24>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;g=i[f>>0]|0;h=(g&1)==0?(g&255)>>>1:k[f+4>>2]|0;x=0;nb(83,e|0,257857,20,h+20|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;Fa(88,e|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,h|0)|0;h=x;x=0;if(h&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;j=Ta(484,e|0,276785)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(e);Sc(n|0)};k[d>>2]=k[j>>2];k[d+4>>2]=k[j+4>>2];k[d+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;xa(818,a|0,d|0);j=x;x=0;if(!(j&1)){K2a(d);K2a(e);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}c=Hc()|0;b=M;K2a(d);m=b;n=c;K2a(e);Sc(n|0);return 0}function $ga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[(k[b+24>>2]|0)+24>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;g=i[f>>0]|0;h=(g&1)==0?(g&255)>>>1:k[f+4>>2]|0;x=0;nb(83,e|0,257878,20,h+20|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;Fa(88,e|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,h|0)|0;h=x;x=0;if(h&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;j=Ta(484,e|0,276785)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(e);Sc(n|0)};k[d>>2]=k[j>>2];k[d+4>>2]=k[j+4>>2];k[d+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;xa(818,a|0,d|0);j=x;x=0;if(!(j&1)){K2a(d);K2a(e);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}c=Hc()|0;b=M;K2a(d);m=b;n=c;K2a(e);Sc(n|0);return 0}function aha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+12|0;e=c;f=k[b+24>>2]|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;g=i[f>>0]|0;h=(g&1)==0?(g&255)>>>1:k[f+4>>2]|0;x=0;nb(83,e|0,257899,17,h+17|0);g=x;x=0;if(g&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;Fa(88,e|0,((i[f>>0]&1)==0?f+1|0:k[f+8>>2]|0)|0,h|0)|0;h=x;x=0;if(h&1){j=Hc()|0;l=M;K2a(e);Sc(j|0)}x=0;j=Ta(484,e|0,276785)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(e);Sc(n|0)};k[d>>2]=k[j>>2];k[d+4>>2]=k[j+4>>2];k[d+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;xa(818,a|0,d|0);j=x;x=0;if(!(j&1)){K2a(d);K2a(e);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}c=Hc()|0;b=M;K2a(d);m=b;n=c;K2a(e);Sc(n|0);return 0}function bha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,257917,8);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function cha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;g=c+36|0;q2a(e,257926,19);i[g>>0]=0;x=0;fb(284,f|0,b+24|0,g|0);g=x;x=0;if(g&1){g=Hc()|0;h=M;j=g;K2a(e);Sc(j|0)}g=i[f>>0]|0;l=(g&1)==0;x=0;m=Fa(88,e|0,(l?f+1|0:k[f+8>>2]|0)|0,(l?(g&255)>>>1:k[f+4>>2]|0)|0)|0;g=x;x=0;do if(!(g&1)){k[d>>2]=k[m>>2];k[d+4>>2]=k[m+4>>2];k[d+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;xa(818,a|0,d|0);l=x;x=0;if(l&1){l=Hc()|0;n=M;K2a(d);o=n;p=l;break}else{K2a(d);K2a(f);K2a(e);Pga(a,b);l=a+4|0;k[l>>2]=(k[l>>2]|0)+1;r=c;return 1}}else{l=Hc()|0;o=M;p=l}while(0);K2a(f);h=o;j=p;K2a(e);Sc(j|0);return 0}function dha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;Cga(f,b+24|0,324339);x=0;g=Fa(86,f|0,0,257946)|0;h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;K2a(f);Sc(j|0)};k[e>>2]=k[g>>2];k[e+4>>2]=k[g+4>>2];k[e+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;g=Ta(484,e|0,276785)|0;h=x;x=0;do if(!(h&1)){k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;xa(818,a|0,d|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;K2a(d);n=m;o=l;break}else{K2a(d);K2a(e);K2a(f);Pga(a,b);l=a+4|0;k[l>>2]=(k[l>>2]|0)+1;r=c;return 1}}else{l=Hc()|0;n=M;o=l}while(0);K2a(e);i=n;j=o;K2a(f);Sc(j|0);return 0}function eha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,294396,7);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function fha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,257968,13);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function gha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,257982,14);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function hha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,257997,5);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function iha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258003,20);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function jha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258024,11);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function kha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258036,14);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function lha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258051,12);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function mha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,294287,8);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function nha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,294275,5);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function oha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,294454,6);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function pha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,294484,5);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function qha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258064,28);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function rha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258093,19);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function sha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,293948,11);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);tha(a,b);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function tha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;g=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;h=k[a+36>>2]|0;j=k[a+4>>2]<<1;if(!(k[g>>2]|0)){D2a(f,j,32);g=i[f>>0]|0;a=(g&1)==0;x=0;l=Fa(92,h|0,(a?f+1|0:k[f+8>>2]|0)|0,(a?(g&255)>>>1:k[f+4>>2]|0)|0)|0;g=x;x=0;if(!(g&1)?(x=0,Fa(92,l|0,258113,17)|0,l=x,x=0,!(l&1)):0){K2a(f);r=c;return}l=Hc()|0;g=M;K2a(f);m=g;n=l;Sc(n|0)}D2a(d,j,32);j=i[d>>0]|0;l=(j&1)==0;x=0;g=Fa(92,h|0,(l?d+1|0:k[d+8>>2]|0)|0,(l?(j&255)>>>1:k[d+4>>2]|0)|0)|0;j=x;x=0;if(((!(j&1)?(x=0,j=Fa(92,g|0,257830,9)|0,g=x,x=0,!(g&1)):0)?(x=0,g=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,b=x,x=0,!(b&1)):0)?(b=k[g+4>>2]|0,x=0,fb(k[(k[b>>2]|0)+76>>2]|0,e|0,b|0,0),b=x,x=0,!(b&1)):0){b=i[e>>0]|0;g=(b&1)==0;x=0;l=Fa(92,j|0,(g?e+1|0:k[e+8>>2]|0)|0,(g?(b&255)>>>1:k[e+4>>2]|0)|0)|0;b=x;x=0;if(!(b&1)?(x=0,Fa(92,l|0,324246,1)|0,l=x,x=0,!(l&1)):0){K2a(e);K2a(d);r=c;return}c=Hc()|0;l=M;K2a(e);o=l;p=c}else{c=Hc()|0;o=M;p=c}K2a(d);m=o;n=p;Sc(n|0)}function uha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;q2a(f,258131,26);g=k[b+32>>2]|0;x=0;fb(140,d|0,329672,0);h=x;x=0;do if(!(h&1)){x=0;pa(57,(g|0)<141|0,d|0,303,293207,293255);i=x;x=0;if(i&1){i=Hc()|0;j=M;K2a(d);l=j;m=i;break}K2a(d);x=0;i=Ta(484,f|0,k[46308+(g<<2)>>2]|0)|0;j=x;x=0;if(!(j&1)){k[e>>2]=k[i>>2];k[e+4>>2]=k[i+4>>2];k[e+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;x=0;xa(818,a|0,e|0);i=x;x=0;if(!(i&1)){K2a(e);K2a(f);tha(a,b);Pga(a,b);i=a+4|0;k[i>>2]=(k[i>>2]|0)+1;r=c;return 1}i=Hc()|0;j=M;K2a(e);n=j;o=i;K2a(f);Sc(o|0)}else p=7}else p=7;while(0);if((p|0)==7){p=Hc()|0;l=M;m=p}n=l;o=m;K2a(f);Sc(o|0);return 0}function vha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258158,15);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);tha(a,b);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function wha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+64|0;d=c+48|0;e=c+36|0;f=c+24|0;g=c+12|0;h=c;q2a(h,258174,16);x=0;j=Ta(484,h|0,((i[b+36>>0]|0)!=0?258191:258198)|0)|0;l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;K2a(h);Sc(n|0)};k[g>>2]=k[j>>2];k[g+4>>2]=k[j+4>>2];k[g+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;j=Ta(484,g|0,301371)|0;l=x;x=0;if(l&1){l=Hc()|0;o=M;p=l}else{k[f>>2]=k[j>>2];k[f+4>>2]=k[j+4>>2];k[f+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;j=k[b+24>>2]|0;x=0;fb(140,d|0,329672,0);l=x;x=0;do if(!(l&1)){x=0;pa(57,(j|0)<141|0,d|0,303,293207,293255);q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(d);t=s;u=q;v=12;break}K2a(d);x=0;q=Ta(484,f|0,k[46308+(j<<2)>>2]|0)|0;s=x;x=0;if(!(s&1)){k[e>>2]=k[q>>2];k[e+4>>2]=k[q+4>>2];k[e+8>>2]=k[q+8>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;x=0;xa(818,a|0,e|0);q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(e);w=s;y=q;break}else{K2a(e);K2a(f);K2a(g);K2a(h);tha(a,b);Pga(a,b);q=a+4|0;k[q>>2]=(k[q>>2]|0)+1;r=c;return 1}}else v=11}else v=11;while(0);if((v|0)==11){c=Hc()|0;t=M;u=c;v=12}if((v|0)==12){w=t;y=u}K2a(f);o=w;p=y}K2a(g);m=o;n=p;K2a(h);Sc(n|0);return 0}function xha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;q2a(f,258206,31);g=k[b+32>>2]|0;x=0;fb(140,d|0,329672,0);h=x;x=0;do if(!(h&1)){x=0;pa(57,(g|0)<141|0,d|0,303,293207,293255);i=x;x=0;if(i&1){i=Hc()|0;j=M;K2a(d);l=j;m=i;break}K2a(d);x=0;i=Ta(484,f|0,k[46308+(g<<2)>>2]|0)|0;j=x;x=0;if(!(j&1)){k[e>>2]=k[i>>2];k[e+4>>2]=k[i+4>>2];k[e+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;x=0;xa(818,a|0,e|0);i=x;x=0;if(!(i&1)){K2a(e);K2a(f);tha(a,b);Pga(a,b);i=a+4|0;k[i>>2]=(k[i>>2]|0)+1;r=c;return 1}i=Hc()|0;j=M;K2a(e);n=j;o=i;K2a(f);Sc(o|0)}else p=7}else p=7;while(0);if((p|0)==7){p=Hc()|0;l=M;m=p}n=l;o=m;K2a(f);Sc(o|0);return 0}function yha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258238,12);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);tha(a,b);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function zha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258251,13);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);tha(a,b);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function Aha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=r;r=r+16|0;d=c;e=k[b+32>>2]|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;f=i[e>>0]|0;g=(f&1)==0?(f&255)>>>1:k[e+4>>2]|0;x=0;nb(83,d|0,258265,23,g+23|0);f=x;x=0;if(f&1){h=Hc()|0;j=M;K2a(d);Sc(h|0)}x=0;Fa(88,d|0,((i[e>>0]&1)==0?e+1|0:k[e+8>>2]|0)|0,g|0)|0;g=x;x=0;if(g&1){h=Hc()|0;j=M;K2a(d);Sc(h|0)}x=0;xa(818,a|0,d|0);h=x;x=0;if(h&1){h=Hc()|0;K2a(d);Sc(h|0)}else{K2a(d);tha(a,b);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function Bha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;q2a(d,258289,11);x=0;xa(818,a|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}else{K2a(d);tha(a,b);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}return 0}function Cha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c+12|0;e=c;q2a(e,258301,11);f=k[b+24>>2]|0;g=i[f>>0]|0;h=(g&1)==0;x=0;j=Fa(88,e|0,(h?f+1|0:k[f+8>>2]|0)|0,(h?(g&255)>>>1:k[f+4>>2]|0)|0)|0;f=x;x=0;if(f&1){f=Hc()|0;l=M;m=f;K2a(e);Sc(m|0)};k[d>>2]=k[j>>2];k[d+4>>2]=k[j+4>>2];k[d+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;xa(818,a|0,d|0);j=x;x=0;if(!(j&1)){K2a(d);K2a(e);tha(a,b);Pga(a,b);b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return 1}c=Hc()|0;b=M;K2a(d);l=b;m=c;K2a(e);Sc(m|0);return 0}function Dha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+48|0;d=c+24|0;e=c+12|0;f=c;g=c+36|0;q2a(e,258313,29);i[g>>0]=0;x=0;fb(284,f|0,b+24|0,g|0);g=x;x=0;if(g&1){g=Hc()|0;h=M;j=g;K2a(e);Sc(j|0)}g=i[f>>0]|0;l=(g&1)==0;x=0;m=Fa(88,e|0,(l?f+1|0:k[f+8>>2]|0)|0,(l?(g&255)>>>1:k[f+4>>2]|0)|0)|0;g=x;x=0;do if(!(g&1)){k[d>>2]=k[m>>2];k[d+4>>2]=k[m+4>>2];k[d+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;xa(818,a|0,d|0);l=x;x=0;if(l&1){l=Hc()|0;n=M;K2a(d);o=n;p=l;break}else{K2a(d);K2a(f);K2a(e);tha(a,b);Pga(a,b);l=a+4|0;k[l>>2]=(k[l>>2]|0)+1;r=c;return 1}}else{l=Hc()|0;o=M;p=l}while(0);K2a(f);h=o;j=p;K2a(e);Sc(j|0);return 0}function Eha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+64|0;d=c+48|0;e=c+36|0;f=c+24|0;g=c+12|0;h=c;j=k[b+24>>2]|0;q2a(d,329672,0);x=0;pa(57,(j|0)<141|0,d|0,303,293207,293255);l=x;x=0;if(l&1){l=Hc()|0;K2a(d);Sc(l|0)}K2a(d);d=k[46308+(j<<2)>>2]|0;q2a(h,258354,16);x=0;j=Ta(484,h|0,((d|0)!=0?d:258343)|0)|0;d=x;x=0;if(d&1){d=Hc()|0;m=M;n=d;K2a(h);Sc(n|0)};k[g>>2]=k[j>>2];k[g+4>>2]=k[j+4>>2];k[g+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;j=Ta(484,g|0,258371)|0;d=x;x=0;if(d&1){d=Hc()|0;o=M;p=d}else{k[f>>2]=k[j>>2];k[f+4>>2]=k[j+4>>2];k[f+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;j=k[b+28>>2]|0;d=i[j>>0]|0;l=(d&1)==0;x=0;q=Fa(88,f|0,(l?j+1|0:k[j+8>>2]|0)|0,(l?(d&255)>>>1:k[j+4>>2]|0)|0)|0;j=x;x=0;do if(!(j&1)){k[e>>2]=k[q>>2];k[e+4>>2]=k[q+4>>2];k[e+8>>2]=k[q+8>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;x=0;xa(818,a|0,e|0);d=x;x=0;if(d&1){d=Hc()|0;l=M;K2a(e);s=l;t=d;break}else{K2a(e);K2a(f);K2a(g);K2a(h);tha(a,b);Pga(a,b);d=a+4|0;k[d>>2]=(k[d>>2]|0)+1;r=c;return 1}}else{d=Hc()|0;s=M;t=d}while(0);K2a(f);o=s;p=t}K2a(g);m=o;n=p;K2a(h);Sc(n|0);return 0}function Fha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Gha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Hha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Iha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Jha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Kha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Lha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Mha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Nha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Oha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Pha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Qha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Rha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Sha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Tha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Uha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Vha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Wha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Xha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Yha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function Zha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function _ha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function $ha(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function aia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function bia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function cia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function dia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function eia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function fia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function gia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function hia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function iia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function jia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function kia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function lia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function mia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function nia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function oia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function pia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function qia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function ria(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function sia(a,b){a=a|0;b=b|0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+-1;return}function tia(){k[10176]=0;k[10177]=0;k[10178]=0;return}function uia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(72)|0;j=h+16|0;k[j>>2]=k[c>>2];l=h+24|0;m=c+8|0;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));i[h+64>>0]=i[c+48>>0]|0;k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=wia(a,e,f,j)|0;j=k[g>>2]|0;if(!j){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)o=h;else{k[a>>2]=e;o=k[g>>2]|0}ui(k[a+4>>2]|0,o);o=a+8|0;k[o>>2]=(k[o>>2]|0)+1;p=h;r=d;return p|0}else{if((j|0)==(h|0)){p=j;r=d;return p|0}OBa(h);p=j;r=d;return p|0}return 0}function via(a,b){a=a|0;b=b|0;if(!b)return;else{via(a,k[b>>2]|0);via(a,k[b+4>>2]|0);OBa(b);return}}function wia(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,g>>>0>=h>>>0):0){if(h>>>0>=g>>>0){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?g>>>0>=(k[o+16>>2]|0)>>>0:0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if(g>>>0>>0){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if(m>>>0>=g>>>0){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>>>0>=o>>>0){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if(o>>>0>>0){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if(d>>>0>=o>>>0){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function xia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0;d=r;r=r+7536|0;e=d+6960|0;f=d+6880|0;g=d+6800|0;h=d+6720|0;i=d+6640|0;j=d+6560|0;l=d+6480|0;m=d+7520|0;n=d+7508|0;o=d+6400|0;p=d+7496|0;q=d+6320|0;s=d+7484|0;t=d+6240|0;u=d+6160|0;v=d+7472|0;w=d+7460|0;y=d+6080|0;z=d+6e3|0;A=d+5920|0;B=d+5840|0;C=d+7448|0;D=d+5760|0;E=d+7436|0;F=d+7424|0;G=d+5680|0;H=d+5600|0;I=d+7412|0;J=d+5520|0;K=d+5440|0;L=d+5360|0;N=d+5280|0;O=d+5200|0;P=d+5120|0;Q=d+5040|0;R=d+4960|0;S=d+4880|0;T=d+4800|0;U=d+7400|0;V=d+7388|0;W=d+4720|0;X=d+4640|0;Y=d+4560|0;Z=d+4480|0;_=d+4400|0;$=d+4320|0;aa=d+4240|0;ba=d+4160|0;ca=d+4080|0;da=d+4e3|0;ea=d+3920|0;fa=d+3840|0;ga=d+3760|0;ha=d+3680|0;ia=d+3600|0;ja=d+3520|0;ka=d+3440|0;la=d+3360|0;ma=d+3280|0;na=d+3200|0;oa=d+3120|0;qa=d+3040|0;ra=d+2960|0;sa=d+2880|0;ta=d+2800|0;ua=d+2720|0;wa=d+2640|0;ya=d+2560|0;za=d+2480|0;Aa=d+2400|0;Ca=d+2320|0;Da=d+2240|0;Ea=d+2160|0;Ga=d+2080|0;Ha=d+2e3|0;Ia=d+1920|0;Ja=d+1840|0;Ka=d+1760|0;La=d+1680|0;Ma=d+1600|0;Na=d+1520|0;Oa=d+1440|0;Pa=d+1360|0;Qa=d+1280|0;Ra=d+1200|0;Sa=d+1120|0;Ua=d+1040|0;Va=d+960|0;Wa=d+880|0;Xa=d+800|0;Ya=d+7376|0;Za=d+7364|0;_a=d+7352|0;$a=d+7308|0;ab=d+7320|0;bb=d+600|0;cb=d+7296|0;db=d+7284|0;eb=d+7280|0;gb=d+720|0;ib=d+320|0;jb=d+640|0;kb=d+7268|0;lb=d+7264|0;mb=d+280|0;ob=d+240|0;pb=d+7260|0;qb=d+200|0;rb=d+160|0;sb=d+520|0;tb=d+440|0;ub=d+7248|0;vb=d+7236|0;wb=d+120|0;xb=d+7224|0;yb=d+7208|0;zb=d+7204|0;Ab=d+7192|0;Bb=d+7180|0;Cb=d+7168|0;Db=d+7156|0;Eb=d+80|0;Fb=d+7144|0;Gb=d+7128|0;Hb=d+40|0;Ib=d+7096|0;Jb=d+7068|0;Kb=d;Lb=d+360|0;Mb=d+7056|0;Nb=d+7040|0;Ob=(k[b+24>>2]|0)==0;q2a($a,329672,0);x=0;pa(57,Ob|0,$a|0,41,258380,258420);Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Pb=M;K2a($a);Qb=Ob;Rb=Pb;Sc(Qb|0)}K2a($a);n8(ab,256,0);$a=b+32|0;do if(!(k[$a>>2]|0)){Pb=b+36|0;Ob=k[Pb>>2]|0;x=0;fb(140,_a|0,329672,0);Sb=x;x=0;if(!(Sb&1)){x=0;pa(57,(Ob|0)!=0|0,_a|0,588,285183,276209);Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Sb=M;K2a(_a);Tb=Sb;Ub=Ob;Vb=30;break}else{K2a(_a);Wb=k[Pb>>2]|0;Vb=8;break}}else Vb=29}else{Wb=ab;Vb=8}while(0);a:do if((Vb|0)==8){_a=c+32|0;do if(!(k[_a>>2]|0)){Pb=c+36|0;Ob=k[Pb>>2]|0;x=0;fb(140,Za|0,329672,0);Sb=x;x=0;if(Sb&1){Vb=29;break a}x=0;pa(57,(Ob|0)!=0|0,Za|0,588,285183,276209);Ob=x;x=0;if(Ob&1){Ob=Hc()|0;Sb=M;K2a(Za);Tb=Sb;Ub=Ob;Vb=30;break a}else{K2a(Za);Xb=k[Pb>>2]|0;break}}else Xb=ab;while(0);Pb=c+24|0;Ob=k[Pb>>2]|0;Sb=(Ob|0)==0;Yb=(Ob|0)==1;do if(Sb){x=0;Ob=Ba(k[(k[Xb>>2]|0)+56>>2]|0,Xb|0)|0;Zb=x;x=0;if(Zb&1){Vb=29;break a}if(Ob){x=0;Ob=Ta(k[(k[Xb>>2]|0)+20>>2]|0,Xb|0,Wb|0)|0;Zb=x;x=0;if(Zb&1){Vb=29;break a}if(Ob){_b=0;$b=0;ac=1;break}}x=0;Ob=Ba(k[(k[Xb>>2]|0)+44>>2]|0,Xb|0)|0;Zb=x;x=0;if(Zb&1){Vb=29;break a}bc=Ob>>>0<17;Vb=21}else{bc=0;Vb=21}while(0);if((Vb|0)==21){x=0;Ob=Ba(k[(k[Wb>>2]|0)+44>>2]|0,Wb|0)|0;Zb=x;x=0;if(Zb&1){Vb=29;break}_b=bc;$b=Ob>>>0<17;ac=0}Ob=($b&1)+(_b&1)|0;x=0;Zb=Ba(k[(k[c>>2]|0)+60>>2]|0,c|0)|0;cc=x;x=0;if(!(cc&1)){cc=Zb;while(1){if(!cc){Vb=26;break}Zb=k[a>>2]|0;dc=cc;cc=cc+-1|0;x=0;fb(140,Ya|0,296239,35);ec=x;x=0;if(ec&1){Vb=28;break}x=0;pa(51,cc>>>0<16|0,Ya|0,217,295981,296275);ec=x;x=0;if(ec&1){Vb=33;break}K2a(Ya);x=0;Ta(594,Zb|0,dc+143&255|0)|0;dc=x;x=0;if(dc&1){Vb=28;break}}if((Vb|0)==26){if((k[Pb>>2]|0)==1){x=0;cc=Ba(k[(k[c>>2]|0)+36>>2]|0,c|0)|0;dc=x;x=0;if(dc&1){Vb=29;break}if(!cc)Vb=37}else Vb=37;if((Vb|0)==37?(x=0,fb(312,a|0,c|0,0),cc=x,x=0,cc&1):0){Vb=29;break}if((k[Pb>>2]|0)==2){x=0;cc=Ba(k[(k[c>>2]|0)+36>>2]|0,c|0)|0;dc=x;x=0;if(dc&1){Vb=29;break}if(cc){cc=k[a>>2]|0;k[Xa>>2]=1;k[Xa+8>>2]=144;k[Xa+40>>2]=1;dc=Xa+48|0;k[dc>>2]=-1;k[dc+4>>2]=-1;dc=Xa+56|0;Zb=Xa+60|0;ec=Xa+72|0;fc=cc+48|0;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[dc+16>>2]=0;x=0;Ta(539,fc|0,Xa|0)|0;dc=x;x=0;if(dc&1){dc=Hc()|0;cc=M;gc=k[ec>>2]|0;if(gc)j0a(gc);gc=k[Zb>>2]|0;if(!gc){Tb=cc;Ub=dc;Vb=30;break}j0a(gc);Tb=cc;Ub=dc;Vb=30;break}dc=k[ec>>2]|0;if(dc)j0a(dc);dc=k[Zb>>2]|0;if(dc)j0a(dc);k[bb>>2]=32;k[bb+32>>2]=1;k[Wa>>2]=2;hc=Wa+8|0;ic=bb;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));dc=Wa+48|0;k[dc>>2]=-1;k[dc+4>>2]=-1;dc=Wa+56|0;Zb=Wa+60|0;ec=Wa+72|0;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[dc+16>>2]=0;x=0;Ta(539,fc|0,Wa|0)|0;dc=x;x=0;if(dc&1){dc=Hc()|0;cc=M;gc=k[ec>>2]|0;if(gc)j0a(gc);gc=k[Zb>>2]|0;if(!gc){Tb=cc;Ub=dc;Vb=30;break}j0a(gc);Tb=cc;Ub=dc;Vb=30;break}dc=k[ec>>2]|0;if(dc)j0a(dc);dc=k[Zb>>2]|0;if(dc)j0a(dc);dc=k[a>>2]|0;k[Va>>2]=1;k[Va+8>>2]=1;k[Va+40>>2]=1;Zb=Va+48|0;k[Zb>>2]=-1;k[Zb+4>>2]=-1;Zb=Va+56|0;ec=Va+60|0;cc=Va+72|0;gc=dc+48|0;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,gc|0,Va|0)|0;Zb=x;x=0;if(Zb&1){Zb=Hc()|0;dc=M;kc=k[cc>>2]|0;if(kc)j0a(kc);kc=k[ec>>2]|0;if(!kc){Tb=dc;Ub=Zb;Vb=30;break}j0a(kc);Tb=dc;Ub=Zb;Vb=30;break}Zb=k[cc>>2]|0;if(Zb)j0a(Zb);Zb=k[ec>>2]|0;if(Zb)j0a(Zb);k[Ua>>2]=1;k[Ua+8>>2]=144;k[Ua+40>>2]=1;Zb=Ua+48|0;k[Zb>>2]=-1;k[Zb+4>>2]=-1;Zb=Ua+56|0;ec=Ua+60|0;cc=Ua+72|0;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,gc|0,Ua|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;Zb=M;dc=k[cc>>2]|0;if(dc)j0a(dc);dc=k[ec>>2]|0;if(!dc){Tb=Zb;Ub=gc;Vb=30;break}j0a(dc);Tb=Zb;Ub=gc;Vb=30;break}gc=k[cc>>2]|0;if(gc)j0a(gc);gc=k[ec>>2]|0;if(gc)j0a(gc)}}gc=k[a>>2]|0;k[Sa>>2]=1;k[Sa+8>>2]=130;k[Sa+40>>2]=1;ec=Sa+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=Sa+56|0;cc=Sa+60|0;Zb=Sa+72|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,gc+48|0,Sa|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;ec=M;dc=k[Zb>>2]|0;if(dc)j0a(dc);dc=k[cc>>2]|0;if(!dc){Tb=ec;Ub=gc;Vb=30;break}j0a(dc);Tb=ec;Ub=gc;Vb=30;break}gc=k[Zb>>2]|0;if(gc)j0a(gc);gc=k[cc>>2]|0;if(gc)j0a(gc);x=0;fb(312,a|0,b|0,0);gc=x;x=0;if(gc&1){Vb=29;break}x=0;gc=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;cc=x;x=0;if(cc&1){Vb=29;break}if(!((k[$a>>2]|0)!=0|gc^1)){gc=k[a>>2]|0;k[Ra>>2]=1;k[Ra+8>>2]=130;k[Ra+40>>2]=1;cc=Ra+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=Ra+56|0;Zb=Ra+60|0;ec=Ra+72|0;dc=gc+48|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,dc|0,Ra|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;gc=M;kc=k[ec>>2]|0;if(kc)j0a(kc);kc=k[Zb>>2]|0;if(!kc){Tb=gc;Ub=cc;Vb=30;break}j0a(kc);Tb=gc;Ub=cc;Vb=30;break}cc=k[ec>>2]|0;if(cc)j0a(cc);cc=k[Zb>>2]|0;if(cc)j0a(cc);k[Qa>>2]=1;k[Qa+8>>2]=130;k[Qa+40>>2]=1;cc=Qa+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=Qa+56|0;Zb=Qa+60|0;ec=Qa+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,dc|0,Qa|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;gc=M;kc=k[ec>>2]|0;if(kc)j0a(kc);kc=k[Zb>>2]|0;if(!kc){Tb=gc;Ub=cc;Vb=30;break}j0a(kc);Tb=gc;Ub=cc;Vb=30;break}cc=k[ec>>2]|0;if(cc)j0a(cc);cc=k[Zb>>2]|0;if(cc)j0a(cc);k[Pa>>2]=1;k[Pa+8>>2]=85;k[Pa+40>>2]=1;cc=Pa+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=Pa+56|0;Zb=Pa+60|0;ec=Pa+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,dc|0,Pa|0)|0;dc=x;x=0;if(dc&1){dc=Hc()|0;cc=M;gc=k[ec>>2]|0;if(gc)j0a(gc);gc=k[Zb>>2]|0;if(!gc){Tb=cc;Ub=dc;Vb=30;break}j0a(gc);Tb=cc;Ub=dc;Vb=30;break}dc=k[ec>>2]|0;if(dc)j0a(dc);dc=k[Zb>>2]|0;if(dc)j0a(dc)}x=0;dc=Ba(k[k[Xb>>2]>>2]|0,Xb|0)|0;Zb=x;x=0;if(Zb&1){Vb=29;break}b:do if((dc|0)==12){x=0;Zb=Ba(k[k[Wb>>2]>>2]|0,Wb|0)|0;ec=x;x=0;if(ec&1){Vb=29;break a}x=0;fb(140,cb|0,329672,0);ec=x;x=0;if(ec&1){Vb=29;break a}x=0;pa(57,(Zb|0)==12|0,cb|0,84,258380,258420);Zb=x;x=0;if(Zb&1){Zb=Hc()|0;ec=M;K2a(cb);lc=Zb;mc=ec;break a}K2a(cb);ec=k[Pb>>2]|0;x=0;fb(140,db|0,329672,0);Zb=x;x=0;if(Zb&1){Vb=29;break a}x=0;pa(57,(ec|0)==0|0,db|0,85,258380,258420);ec=x;x=0;if(ec&1){ec=Hc()|0;Zb=M;K2a(db);lc=ec;mc=Zb;break a}K2a(db);Zb=k[a>>2]|0;k[Oa>>2]=1;k[Oa+8>>2]=80;k[Oa+40>>2]=1;ec=Oa+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=Oa+56|0;cc=Oa+60|0;gc=Oa+72|0;kc=Zb+48|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,kc|0,Oa|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;Zb=M;nc=k[gc>>2]|0;if(nc)j0a(nc);nc=k[cc>>2]|0;if(!nc){Tb=Zb;Ub=ec;Vb=30;break a}j0a(nc);Tb=Zb;Ub=ec;Vb=30;break a}ec=k[gc>>2]|0;if(ec)j0a(ec);ec=k[cc>>2]|0;if(ec)j0a(ec);k[Na>>2]=1;k[Na+8>>2]=80;k[Na+40>>2]=1;ec=Na+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=Na+56|0;cc=Na+60|0;gc=Na+72|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,kc|0,Na|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;Zb=M;nc=k[gc>>2]|0;if(nc)j0a(nc);nc=k[cc>>2]|0;if(!nc){Tb=Zb;Ub=ec;Vb=30;break a}j0a(nc);Tb=Zb;Ub=ec;Vb=30;break a}ec=k[gc>>2]|0;if(ec)j0a(ec);ec=k[cc>>2]|0;if(ec)j0a(ec);k[Ma>>2]=1;k[Ma+8>>2]=80;k[Ma+40>>2]=1;ec=Ma+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=Ma+56|0;cc=Ma+60|0;gc=Ma+72|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,kc|0,Ma|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;Zb=M;nc=k[gc>>2]|0;if(nc)j0a(nc);nc=k[cc>>2]|0;if(!nc){Tb=Zb;Ub=ec;Vb=30;break a}j0a(nc);Tb=Zb;Ub=ec;Vb=30;break a}ec=k[gc>>2]|0;if(ec)j0a(ec);ec=k[cc>>2]|0;if(ec)j0a(ec);k[La>>2]=1;k[La+8>>2]=80;k[La+40>>2]=1;ec=La+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=La+56|0;cc=La+60|0;gc=La+72|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,kc|0,La|0)|0;kc=x;x=0;if(kc&1){kc=Hc()|0;ec=M;Zb=k[gc>>2]|0;if(Zb)j0a(Zb);Zb=k[cc>>2]|0;if(!Zb){Tb=ec;Ub=kc;Vb=30;break a}j0a(Zb);Tb=ec;Ub=kc;Vb=30;break a}kc=k[gc>>2]|0;if(kc)j0a(kc);kc=k[cc>>2]|0;if(kc)j0a(kc)}else{kc=k[a>>2]|0;k[Ka>>2]=1;k[Ka+8>>2]=144;k[Ka+40>>2]=1;cc=Ka+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=Ka+56|0;gc=Ka+60|0;ec=Ka+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,kc+48|0,Ka|0)|0;kc=x;x=0;if(kc&1){kc=Hc()|0;cc=M;Zb=k[ec>>2]|0;if(Zb)j0a(Zb);Zb=k[gc>>2]|0;if(!Zb){Tb=cc;Ub=kc;Vb=30;break a}j0a(Zb);Tb=cc;Ub=kc;Vb=30;break a}kc=k[ec>>2]|0;if(kc)j0a(kc);kc=k[gc>>2]|0;if(kc)j0a(kc);x=0;kc=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;gc=x;x=0;if(gc&1){Vb=29;break a}if(kc?(k[eb>>2]=k[a>>2],x=0,va(1505,eb|0),kc=x,x=0,kc&1):0){Vb=29;break a}kc=k[a>>2]|0;k[Ja>>2]=1;k[Ja+8>>2]=144;k[Ja+40>>2]=1;gc=Ja+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=Ja+56|0;ec=Ja+60|0;cc=Ja+72|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,kc+48|0,Ja|0)|0;kc=x;x=0;if(kc&1){kc=Hc()|0;gc=M;Zb=k[cc>>2]|0;if(Zb)j0a(Zb);Zb=k[ec>>2]|0;if(!Zb){Tb=gc;Ub=kc;Vb=30;break a}j0a(Zb);Tb=gc;Ub=kc;Vb=30;break a}kc=k[cc>>2]|0;if(kc)j0a(kc);kc=k[ec>>2]|0;if(kc)j0a(kc);x=0;fb(313,a|0,b|0,0);kc=x;x=0;if(kc&1){Vb=29;break a}kc=k[a>>2]|0;k[Ia>>2]=1;k[Ia+8>>2]=129;k[Ia+40>>2]=1;ec=Ia+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=Ia+56|0;cc=Ia+60|0;gc=Ia+72|0;Zb=kc+48|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,Zb|0,Ia|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;kc=M;nc=k[gc>>2]|0;if(nc)j0a(nc);nc=k[cc>>2]|0;if(!nc){Tb=kc;Ub=ec;Vb=30;break a}j0a(nc);Tb=kc;Ub=ec;Vb=30;break a}ec=k[gc>>2]|0;if(ec)j0a(ec);ec=k[cc>>2]|0;if(ec)j0a(ec);k[Ha>>2]=1;k[Ha+8>>2]=1;k[Ha+40>>2]=1;ec=Ha+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=Ha+56|0;cc=Ha+60|0;gc=Ha+72|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,Zb|0,Ha|0)|0;Zb=x;x=0;if(Zb&1){Zb=Hc()|0;ec=M;kc=k[gc>>2]|0;if(kc)j0a(kc);kc=k[cc>>2]|0;if(!kc){Tb=ec;Ub=Zb;Vb=30;break a}j0a(kc);Tb=ec;Ub=Zb;Vb=30;break a}Zb=k[gc>>2]|0;if(Zb)j0a(Zb);Zb=k[cc>>2]|0;if(Zb)j0a(Zb);Zb=k[a>>2]|0;k[Ga>>2]=1;k[Ga+8>>2]=146;k[Ga+40>>2]=1;cc=Ga+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=Ga+56|0;gc=Ga+60|0;ec=Ga+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,Zb+48|0,Ga|0)|0;Zb=x;x=0;if(Zb&1){Zb=Hc()|0;cc=M;kc=k[ec>>2]|0;if(kc)j0a(kc);kc=k[gc>>2]|0;if(!kc){Tb=cc;Ub=Zb;Vb=30;break a}j0a(kc);Tb=cc;Ub=Zb;Vb=30;break a}Zb=k[ec>>2]|0;if(Zb)j0a(Zb);Zb=k[gc>>2]|0;if(Zb)j0a(Zb);Zb=(k[a>>2]|0)+48|0;gc=k[Zb>>2]|0;k[Zb>>2]=gc+1;k[gb>>2]=8;k[gb+8>>2]=gc;k[gb+40>>2]=1;gc=gb+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=gb+56|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;c:do if(!(k[$a>>2]|0))Vb=457;else{gc=k[a>>2]|0;k[Ea>>2]=1;k[Ea+8>>2]=130;k[Ea+40>>2]=1;Zb=Ea+48|0;k[Zb>>2]=-1;k[Zb+4>>2]=-1;Zb=Ea+56|0;ec=Ea+60|0;cc=Ea+72|0;kc=gc+48|0;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,kc|0,Ea|0)|0;Zb=x;x=0;if(Zb&1){Zb=Hc()|0;gc=M;nc=k[cc>>2]|0;if(nc)j0a(nc);nc=k[ec>>2]|0;if(!nc){oc=gc;pc=Zb;Vb=283;break}j0a(nc);oc=gc;pc=Zb;Vb=283;break}Zb=k[cc>>2]|0;if(Zb)j0a(Zb);Zb=k[ec>>2]|0;if(Zb)j0a(Zb);k[ib>>2]=31;k[ib+32>>2]=1;k[Da>>2]=2;hc=Da+8|0;ic=ib;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));Zb=Da+48|0;k[Zb>>2]=-1;k[Zb+4>>2]=-1;Zb=Da+56|0;ec=Da+60|0;cc=Da+72|0;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,kc|0,Da|0)|0;Zb=x;x=0;if(Zb&1){Zb=Hc()|0;gc=M;nc=k[cc>>2]|0;if(nc)j0a(nc);nc=k[ec>>2]|0;if(!nc){oc=gc;pc=Zb;Vb=283;break}j0a(nc);oc=gc;pc=Zb;Vb=283;break}Zb=k[cc>>2]|0;if(Zb)j0a(Zb);Zb=k[ec>>2]|0;if(Zb)j0a(Zb);k[Ca>>2]=1;k[Ca+8>>2]=16;k[Ca+40>>2]=1;Zb=Ca+48|0;k[Zb>>2]=-1;k[Zb+4>>2]=-1;Zb=Ca+56|0;ec=Ca+60|0;cc=Ca+72|0;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,kc|0,Ca|0)|0;Zb=x;x=0;if(Zb&1){Zb=Hc()|0;gc=M;nc=k[cc>>2]|0;if(nc)j0a(nc);nc=k[ec>>2]|0;if(!nc){oc=gc;pc=Zb;Vb=283;break}j0a(nc);oc=gc;pc=Zb;Vb=283;break}Zb=k[cc>>2]|0;if(Zb)j0a(Zb);Zb=k[ec>>2]|0;if(Zb)j0a(Zb);x=0;xa(819,jb|0,k[a>>2]|0);Zb=x;x=0;if(Zb&1){Vb=282;break}Zb=k[_a>>2]|0;x=0;fb(140,kb|0,329672,0);ec=x;x=0;do if(ec&1)Vb=284;else{x=0;pa(57,(Zb|0)!=0|0,kb|0,114,258380,258420);cc=x;x=0;if(cc&1){cc=Hc()|0;gc=M;K2a(kb);qc=cc;rc=gc;break}K2a(kb);gc=k[a>>2]|0;if(!(k[Pb>>2]|0)){k[Aa>>2]=1;k[Aa+8>>2]=128;k[Aa+40>>2]=1;cc=Aa+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=Aa+56|0;nc=Aa+60|0;sc=Aa+72|0;tc=gc+48|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,tc|0,Aa|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;uc=M;vc=k[sc>>2]|0;if(vc)j0a(vc);vc=k[nc>>2]|0;if(!vc){wc=uc;xc=cc;Vb=285;break}j0a(vc);wc=uc;xc=cc;Vb=285;break}cc=k[sc>>2]|0;if(cc)j0a(cc);cc=k[nc>>2]|0;if(cc)j0a(cc);k[za>>2]=1;k[za+8>>2]=84;k[za+40>>2]=1;cc=za+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=za+56|0;nc=za+60|0;sc=za+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,tc|0,za|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;cc=M;uc=k[sc>>2]|0;if(uc)j0a(uc);uc=k[nc>>2]|0;if(!uc){wc=cc;xc=tc;Vb=285;break}j0a(uc);wc=cc;xc=tc;Vb=285;break}tc=k[sc>>2]|0;if(tc)j0a(tc);tc=k[nc>>2]|0;if(tc)j0a(tc);tc=k[a>>2]|0;k[ya>>2]=1;k[ya+8>>2]=133;k[ya+40>>2]=1;nc=ya+48|0;k[nc>>2]=-1;k[nc+4>>2]=-1;nc=ya+56|0;sc=ya+60|0;cc=ya+72|0;uc=tc+48|0;k[nc>>2]=0;k[nc+4>>2]=0;k[nc+8>>2]=0;k[nc+12>>2]=0;k[nc+16>>2]=0;x=0;Ta(539,uc|0,ya|0)|0;nc=x;x=0;if(nc&1){nc=Hc()|0;tc=M;vc=k[cc>>2]|0;if(vc)j0a(vc);vc=k[sc>>2]|0;if(!vc){wc=tc;xc=nc;Vb=285;break}j0a(vc);wc=tc;xc=nc;Vb=285;break}nc=k[cc>>2]|0;if(nc)j0a(nc);nc=k[sc>>2]|0;if(nc)j0a(nc);k[wa>>2]=1;k[wa+8>>2]=85;k[wa+40>>2]=1;nc=wa+48|0;k[nc>>2]=-1;k[nc+4>>2]=-1;nc=wa+56|0;sc=wa+60|0;cc=wa+72|0;k[nc>>2]=0;k[nc+4>>2]=0;k[nc+8>>2]=0;k[nc+12>>2]=0;k[nc+16>>2]=0;x=0;Ta(539,uc|0,wa|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;nc=M;tc=k[cc>>2]|0;if(tc)j0a(tc);tc=k[sc>>2]|0;if(!tc){wc=nc;xc=uc;Vb=285;break}j0a(tc);wc=nc;xc=uc;Vb=285;break}uc=k[cc>>2]|0;if(uc)j0a(uc);uc=k[sc>>2]|0;if(uc)j0a(uc)}else{k[ua>>2]=1;k[ua+8>>2]=128;k[ua+40>>2]=1;uc=ua+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=ua+56|0;sc=ua+60|0;cc=ua+72|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,gc+48|0,ua|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;uc=M;nc=k[cc>>2]|0;if(nc)j0a(nc);nc=k[sc>>2]|0;if(!nc){wc=uc;xc=gc;Vb=285;break}j0a(nc);wc=uc;xc=gc;Vb=285;break}gc=k[cc>>2]|0;if(gc)j0a(gc);gc=k[sc>>2]|0;if(gc)j0a(gc);k[lb>>2]=k[a>>2];x=0;pa(61,lb|0,Xb|0,Yb|0,1,0);gc=x;x=0;if(gc&1){Vb=284;break}gc=k[a>>2]|0;k[mb>>2]=255;k[mb+32>>2]=1;sc=gc+48|0;k[ta>>2]=2;hc=ta+8|0;ic=mb;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));gc=ta+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=ta+56|0;cc=ta+60|0;uc=ta+72|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,sc|0,ta|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;nc=M;tc=k[uc>>2]|0;if(tc)j0a(tc);tc=k[cc>>2]|0;if(!tc){wc=nc;xc=gc;Vb=285;break}j0a(tc);wc=nc;xc=gc;Vb=285;break}gc=k[uc>>2]|0;if(gc)j0a(gc);gc=k[cc>>2]|0;if(gc)j0a(gc);k[sa>>2]=1;k[sa+8>>2]=25;k[sa+40>>2]=1;gc=sa+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=sa+56|0;cc=sa+60|0;uc=sa+72|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,sc|0,sa|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;nc=M;tc=k[uc>>2]|0;if(tc)j0a(tc);tc=k[cc>>2]|0;if(!tc){wc=nc;xc=gc;Vb=285;break}j0a(tc);wc=nc;xc=gc;Vb=285;break}gc=k[uc>>2]|0;if(gc)j0a(gc);gc=k[cc>>2]|0;if(gc)j0a(gc);k[ra>>2]=1;k[ra+8>>2]=22;k[ra+40>>2]=1;gc=ra+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=ra+56|0;cc=ra+60|0;uc=ra+72|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,sc|0,ra|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;nc=M;tc=k[uc>>2]|0;if(tc)j0a(tc);tc=k[cc>>2]|0;if(!tc){wc=nc;xc=gc;Vb=285;break}j0a(tc);wc=nc;xc=gc;Vb=285;break}gc=k[uc>>2]|0;if(gc)j0a(gc);gc=k[cc>>2]|0;if(gc)j0a(gc);gc=k[a>>2]|0;k[qa>>2]=1;k[qa+8>>2]=131;k[qa+40>>2]=1;cc=qa+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=qa+56|0;uc=qa+60|0;nc=qa+72|0;tc=gc+48|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,tc|0,qa|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;gc=M;vc=k[nc>>2]|0;if(vc)j0a(vc);vc=k[uc>>2]|0;if(!vc){wc=gc;xc=cc;Vb=285;break}j0a(vc);wc=gc;xc=cc;Vb=285;break}cc=k[nc>>2]|0;if(cc)j0a(cc);cc=k[uc>>2]|0;if(cc)j0a(cc);k[oa>>2]=1;k[oa+8>>2]=128;k[oa+40>>2]=1;cc=oa+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=oa+56|0;uc=oa+60|0;nc=oa+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,tc|0,oa|0)|0;cc=x;x=0;if(cc&1){cc=Hc()|0;gc=M;vc=k[nc>>2]|0;if(vc)j0a(vc);vc=k[uc>>2]|0;if(!vc){wc=gc;xc=cc;Vb=285;break}j0a(vc);wc=gc;xc=cc;Vb=285;break}cc=k[nc>>2]|0;if(cc)j0a(cc);cc=k[uc>>2]|0;if(cc)j0a(cc);k[na>>2]=1;k[na+8>>2]=1;k[na+40>>2]=1;cc=na+48|0;k[cc>>2]=-1;k[cc+4>>2]=-1;cc=na+56|0;uc=na+60|0;nc=na+72|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[cc+16>>2]=0;x=0;Ta(539,tc|0,na|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;cc=M;gc=k[nc>>2]|0;if(gc)j0a(gc);gc=k[uc>>2]|0;if(!gc){wc=cc;xc=tc;Vb=285;break}j0a(gc);wc=cc;xc=tc;Vb=285;break}tc=k[nc>>2]|0;if(tc)j0a(tc);tc=k[uc>>2]|0;if(tc)j0a(tc);tc=k[a>>2]|0;k[ma>>2]=1;k[ma+8>>2]=23;k[ma+40>>2]=1;uc=ma+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=ma+56|0;nc=ma+60|0;cc=ma+72|0;gc=tc+48|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,gc|0,ma|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;vc=k[cc>>2]|0;if(vc)j0a(vc);vc=k[nc>>2]|0;if(!vc){wc=tc;xc=uc;Vb=285;break}j0a(vc);wc=tc;xc=uc;Vb=285;break}uc=k[cc>>2]|0;if(uc)j0a(uc);uc=k[nc>>2]|0;if(uc)j0a(uc);k[la>>2]=1;k[la+8>>2]=133;k[la+40>>2]=1;uc=la+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=la+56|0;nc=la+60|0;cc=la+72|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,gc|0,la|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;vc=k[cc>>2]|0;if(vc)j0a(vc);vc=k[nc>>2]|0;if(!vc){wc=tc;xc=uc;Vb=285;break}j0a(vc);wc=tc;xc=uc;Vb=285;break}uc=k[cc>>2]|0;if(uc)j0a(uc);uc=k[nc>>2]|0;if(uc)j0a(uc);k[ka>>2]=1;k[ka+8>>2]=85;k[ka+40>>2]=1;uc=ka+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=ka+56|0;nc=ka+60|0;cc=ka+72|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,gc|0,ka|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;uc=M;tc=k[cc>>2]|0;if(tc)j0a(tc);tc=k[nc>>2]|0;if(!tc){wc=uc;xc=gc;Vb=285;break}j0a(tc);wc=uc;xc=gc;Vb=285;break}gc=k[cc>>2]|0;if(gc)j0a(gc);gc=k[nc>>2]|0;if(gc)j0a(gc)}x=0;fb(314,ja|0,(k[a>>2]|0)+48|0,gb|0);gc=x;x=0;if(gc&1){Vb=284;break}gc=k[ja+72>>2]|0;if(gc)j0a(gc);gc=k[ja+60>>2]|0;if(gc)j0a(gc);x=0;Ta(539,(k[a>>2]|0)+48|0,jb|0)|0;gc=x;x=0;if(gc&1){Vb=284;break}gc=k[a>>2]|0;k[ia>>2]=1;k[ia+8>>2]=130;k[ia+40>>2]=1;nc=ia+48|0;k[nc>>2]=-1;k[nc+4>>2]=-1;nc=ia+56|0;cc=ia+60|0;uc=ia+72|0;tc=gc+48|0;k[nc>>2]=0;k[nc+4>>2]=0;k[nc+8>>2]=0;k[nc+12>>2]=0;k[nc+16>>2]=0;x=0;Ta(539,tc|0,ia|0)|0;nc=x;x=0;if(nc&1){nc=Hc()|0;gc=M;vc=k[uc>>2]|0;if(vc)j0a(vc);vc=k[cc>>2]|0;if(!vc){wc=gc;xc=nc;Vb=285;break}j0a(vc);wc=gc;xc=nc;Vb=285;break}nc=k[uc>>2]|0;if(nc)j0a(nc);nc=k[cc>>2]|0;if(nc)j0a(nc);k[ha>>2]=1;k[ha+8>>2]=128;k[ha+40>>2]=1;nc=ha+48|0;k[nc>>2]=-1;k[nc+4>>2]=-1;nc=ha+56|0;cc=ha+60|0;uc=ha+72|0;k[nc>>2]=0;k[nc+4>>2]=0;k[nc+8>>2]=0;k[nc+12>>2]=0;k[nc+16>>2]=0;x=0;Ta(539,tc|0,ha|0)|0;nc=x;x=0;if(nc&1){nc=Hc()|0;gc=M;vc=k[uc>>2]|0;if(vc)j0a(vc);vc=k[cc>>2]|0;if(!vc){wc=gc;xc=nc;Vb=285;break}j0a(vc);wc=gc;xc=nc;Vb=285;break}nc=k[uc>>2]|0;if(nc)j0a(nc);nc=k[cc>>2]|0;if(nc)j0a(nc);k[ga>>2]=1;k[ga+8>>2]=1;k[ga+40>>2]=1;nc=ga+48|0;k[nc>>2]=-1;k[nc+4>>2]=-1;nc=ga+56|0;cc=ga+60|0;uc=ga+72|0;k[nc>>2]=0;k[nc+4>>2]=0;k[nc+8>>2]=0;k[nc+12>>2]=0;k[nc+16>>2]=0;x=0;Ta(539,tc|0,ga|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;nc=M;gc=k[uc>>2]|0;if(gc)j0a(gc);gc=k[cc>>2]|0;if(!gc){wc=nc;xc=tc;Vb=285;break}j0a(gc);wc=nc;xc=tc;Vb=285;break}tc=k[uc>>2]|0;if(tc)j0a(tc);tc=k[cc>>2]|0;if(tc)j0a(tc);tc=k[a>>2]|0;k[ob>>2]=1;k[ob+32>>2]=1;cc=tc+48|0;k[fa>>2]=2;hc=fa+8|0;ic=ob;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));sc=fa+48|0;k[sc>>2]=-1;k[sc+4>>2]=-1;sc=fa+56|0;tc=fa+60|0;uc=fa+72|0;k[sc>>2]=0;k[sc+4>>2]=0;k[sc+8>>2]=0;k[sc+12>>2]=0;k[sc+16>>2]=0;x=0;Ta(539,cc|0,fa|0)|0;sc=x;x=0;if(sc&1){sc=Hc()|0;nc=M;gc=k[uc>>2]|0;if(gc)j0a(gc);gc=k[tc>>2]|0;if(!gc){wc=nc;xc=sc;Vb=285;break}j0a(gc);wc=nc;xc=sc;Vb=285;break}sc=k[uc>>2]|0;if(sc)j0a(sc);sc=k[tc>>2]|0;if(sc)j0a(sc);k[ea>>2]=1;k[ea+8>>2]=1;k[ea+40>>2]=1;sc=ea+48|0;k[sc>>2]=-1;k[sc+4>>2]=-1;sc=ea+56|0;tc=ea+60|0;uc=ea+72|0;k[sc>>2]=0;k[sc+4>>2]=0;k[sc+8>>2]=0;k[sc+12>>2]=0;k[sc+16>>2]=0;x=0;Ta(539,cc|0,ea|0)|0;sc=x;x=0;if(sc&1){sc=Hc()|0;nc=M;gc=k[uc>>2]|0;if(gc)j0a(gc);gc=k[tc>>2]|0;if(!gc){wc=nc;xc=sc;Vb=285;break}j0a(gc);wc=nc;xc=sc;Vb=285;break}sc=k[uc>>2]|0;if(sc)j0a(sc);sc=k[tc>>2]|0;if(sc)j0a(sc);sc=k[a>>2]|0;k[da>>2]=1;k[da+8>>2]=133;k[da+40>>2]=1;tc=da+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=da+56|0;uc=da+60|0;nc=da+72|0;gc=sc+48|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,gc|0,da|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;sc=M;vc=k[nc>>2]|0;if(vc)j0a(vc);vc=k[uc>>2]|0;if(!vc){wc=sc;xc=tc;Vb=285;break}j0a(vc);wc=sc;xc=tc;Vb=285;break}tc=k[nc>>2]|0;if(tc)j0a(tc);tc=k[uc>>2]|0;if(tc)j0a(tc);k[ca>>2]=1;k[ca+8>>2]=85;k[ca+40>>2]=1;tc=ca+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=ca+56|0;uc=ca+60|0;nc=ca+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,gc|0,ca|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;tc=M;sc=k[nc>>2]|0;if(sc)j0a(sc);sc=k[uc>>2]|0;if(!sc){wc=tc;xc=gc;Vb=285;break}j0a(sc);wc=tc;xc=gc;Vb=285;break}gc=k[nc>>2]|0;if(gc)j0a(gc);gc=k[uc>>2]|0;if(gc)j0a(gc);gc=k[jb+72>>2]|0;if(gc)j0a(gc);gc=k[jb+60>>2]|0;if(gc)j0a(gc);Vb=457;break c}while(0);if((Vb|0)==284){Zb=Hc()|0;wc=M;xc=Zb;Vb=285}if((Vb|0)==285){qc=xc;rc=wc}Zb=k[jb+72>>2]|0;if(Zb)j0a(Zb);Zb=k[jb+60>>2]|0;if(!Zb){yc=qc;zc=rc;break}j0a(Zb);yc=qc;zc=rc}while(0);d:do if((Vb|0)==457){Zb=k[a>>2]|0;k[ba>>2]=1;k[ba+8>>2]=130;k[ba+40>>2]=1;ec=ba+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=ba+56|0;kc=ba+60|0;gc=ba+72|0;uc=Zb+48|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,uc|0,ba|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;Zb=M;nc=k[gc>>2]|0;if(nc)j0a(nc);nc=k[kc>>2]|0;if(!nc){oc=Zb;pc=ec;Vb=283;break}j0a(nc);oc=Zb;pc=ec;Vb=283;break}ec=k[gc>>2]|0;if(ec)j0a(ec);ec=k[kc>>2]|0;if(ec)j0a(ec);k[aa>>2]=1;k[aa+8>>2]=21;k[aa+40>>2]=1;ec=aa+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=aa+56|0;kc=aa+60|0;gc=aa+72|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,uc|0,aa|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;ec=M;Zb=k[gc>>2]|0;if(Zb)j0a(Zb);Zb=k[kc>>2]|0;if(!Zb){oc=ec;pc=uc;Vb=283;break}j0a(Zb);oc=ec;pc=uc;Vb=283;break}uc=k[gc>>2]|0;if(uc)j0a(uc);uc=k[kc>>2]|0;if(uc)j0a(uc);x=0;fb(315,$|0,(k[a>>2]|0)+48|0,gb|0);uc=x;x=0;if(uc&1){Vb=282;break}uc=k[$+72>>2]|0;if(uc)j0a(uc);uc=k[$+60>>2]|0;if(uc)j0a(uc);do if(!(k[Pb>>2]|0)){x=0;uc=Ba(k[(k[c>>2]|0)+36>>2]|0,c|0)|0;kc=x;x=0;if(kc&1){Vb=282;break d}if(!uc)break;k[pb>>2]=k[a>>2];x=0;va(1505,pb|0);uc=x;x=0;if(uc&1){Vb=282;break d}}while(0);uc=k[a>>2]|0;k[_>>2]=1;k[_+8>>2]=145;k[_+40>>2]=1;kc=_+48|0;k[kc>>2]=-1;k[kc+4>>2]=-1;kc=_+56|0;gc=_+60|0;ec=_+72|0;k[kc>>2]=0;k[kc+4>>2]=0;k[kc+8>>2]=0;k[kc+12>>2]=0;k[kc+16>>2]=0;x=0;Ta(539,uc+48|0,_|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;kc=M;Zb=k[ec>>2]|0;if(Zb)j0a(Zb);Zb=k[gc>>2]|0;if(!Zb){oc=kc;pc=uc;Vb=283;break}j0a(Zb);oc=kc;pc=uc;Vb=283;break}uc=k[ec>>2]|0;if(uc)j0a(uc);uc=k[gc>>2]|0;if(uc)j0a(uc);x=0;fb(313,a|0,c|0,0);uc=x;x=0;if(uc&1){Vb=282;break}uc=k[a>>2]|0;k[Z>>2]=1;k[Z+8>>2]=130;k[Z+40>>2]=1;gc=Z+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=Z+56|0;ec=Z+60|0;kc=Z+72|0;Zb=uc+48|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,Zb|0,Z|0)|0;gc=x;x=0;if(gc&1){gc=Hc()|0;uc=M;nc=k[kc>>2]|0;if(nc)j0a(nc);nc=k[ec>>2]|0;if(!nc){oc=uc;pc=gc;Vb=283;break}j0a(nc);oc=uc;pc=gc;Vb=283;break}gc=k[kc>>2]|0;if(gc)j0a(gc);gc=k[ec>>2]|0;if(gc)j0a(gc);k[Y>>2]=1;k[Y+8>>2]=1;k[Y+40>>2]=1;gc=Y+48|0;k[gc>>2]=-1;k[gc+4>>2]=-1;gc=Y+56|0;ec=Y+60|0;kc=Y+72|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[gc+16>>2]=0;x=0;Ta(539,Zb|0,Y|0)|0;Zb=x;x=0;if(Zb&1){Zb=Hc()|0;gc=M;uc=k[kc>>2]|0;if(uc)j0a(uc);uc=k[ec>>2]|0;if(!uc){oc=gc;pc=Zb;Vb=283;break}j0a(uc);oc=gc;pc=Zb;Vb=283;break}Zb=k[kc>>2]|0;if(Zb)j0a(Zb);Zb=k[ec>>2]|0;if(Zb)j0a(Zb);if($b){Zb=k[a>>2]|0;k[qb>>2]=0;k[qb+32>>2]=1;ec=Zb+48|0;k[X>>2]=2;hc=X+8|0;ic=qb;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));Zb=X+48|0;k[Zb>>2]=-1;k[Zb+4>>2]=-1;Zb=X+56|0;kc=X+60|0;gc=X+72|0;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,ec|0,X|0)|0;Zb=x;x=0;if(Zb&1){Zb=Hc()|0;uc=M;nc=k[gc>>2]|0;if(nc)j0a(nc);nc=k[kc>>2]|0;if(!nc){oc=uc;pc=Zb;Vb=283;break}j0a(nc);oc=uc;pc=Zb;Vb=283;break}Zb=k[gc>>2]|0;if(Zb)j0a(Zb);Zb=k[kc>>2]|0;if(Zb)j0a(Zb)}if(_b){Zb=k[a>>2]|0;k[rb>>2]=0;k[rb+32>>2]=1;kc=Zb+48|0;k[W>>2]=2;hc=W+8|0;ic=rb;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));ec=W+48|0;k[ec>>2]=-1;k[ec+4>>2]=-1;ec=W+56|0;Zb=W+60|0;gc=W+72|0;k[ec>>2]=0;k[ec+4>>2]=0;k[ec+8>>2]=0;k[ec+12>>2]=0;k[ec+16>>2]=0;x=0;Ta(539,kc|0,W|0)|0;ec=x;x=0;if(ec&1){ec=Hc()|0;uc=M;nc=k[gc>>2]|0;if(nc)j0a(nc);nc=k[Zb>>2]|0;if(!nc){oc=uc;pc=ec;Vb=283;break}j0a(nc);oc=uc;pc=ec;Vb=283;break}ec=k[gc>>2]|0;if(ec)j0a(ec);ec=k[Zb>>2]|0;if(ec)j0a(ec)}ec=(k[a>>2]|0)+48|0;Zb=k[ec>>2]|0;k[ec>>2]=Zb+1;k[sb>>2]=8;k[sb+8>>2]=Zb;k[sb+40>>2]=1;Zb=sb+48|0;k[Zb>>2]=-1;k[Zb+4>>2]=-1;Zb=sb+56|0;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[Zb+16>>2]=0;x=0;Ta(539,(k[a>>2]|0)+48|0,sb|0)|0;Zb=x;x=0;do if(Zb&1)Vb=588;else{ec=k[a>>2]|0;x=0;fb(140,V|0,295946,34);gc=x;x=0;if(gc&1){Vb=588;break}x=0;pa(51,1,V|0,210,295981,296025);gc=x;x=0;if(gc&1){gc=Hc()|0;uc=M;K2a(V);Ac=uc;Bc=gc;Vb=589;break}K2a(V);gc=Ob+130&255;x=0;uc=Ta(594,ec|0,gc|0)|0;ec=x;x=0;if(ec&1){Vb=588;break}ec=Ob+2|0;x=0;fb(140,U|0,295946,34);nc=x;x=0;if(nc&1){Vb=588;break}x=0;pa(51,1,U|0,210,295981,296025);nc=x;x=0;if(nc&1){nc=Hc()|0;tc=M;K2a(U);Ac=tc;Bc=nc;Vb=589;break}K2a(U);nc=Ob+129&255;x=0;tc=Ta(594,uc|0,nc|0)|0;uc=x;x=0;if(uc&1){Vb=588;break}k[T>>2]=1;k[T+8>>2]=17;k[T+40>>2]=1;uc=T+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=T+56|0;sc=T+60|0;vc=T+72|0;Cc=tc+48|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,Cc|0,T|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;Dc=k[vc>>2]|0;if(Dc)j0a(Dc);Dc=k[sc>>2]|0;if(!Dc){Ac=tc;Bc=uc;Vb=589;break}j0a(Dc);Ac=tc;Bc=uc;Vb=589;break}uc=k[vc>>2]|0;if(uc)j0a(uc);uc=k[sc>>2]|0;if(uc)j0a(uc);k[S>>2]=1;k[S+8>>2]=21;k[S+40>>2]=1;uc=S+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=S+56|0;sc=S+60|0;vc=S+72|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,Cc|0,S|0)|0;Cc=x;x=0;if(Cc&1){Cc=Hc()|0;uc=M;tc=k[vc>>2]|0;if(tc)j0a(tc);tc=k[sc>>2]|0;if(!tc){Ac=uc;Bc=Cc;Vb=589;break}j0a(tc);Ac=uc;Bc=Cc;Vb=589;break}Cc=k[vc>>2]|0;if(Cc)j0a(Cc);Cc=k[sc>>2]|0;if(Cc)j0a(Cc);x=0;xa(819,tb|0,k[a>>2]|0);Cc=x;x=0;if(Cc&1){Vb=588;break}x=0;Cc=Ba(k[k[Xb>>2]>>2]|0,Xb|0)|0;sc=x;x=0;e:do if(sc&1)Vb=590;else{do if((Cc|0)==5){x=0;fb(140,ub|0,258545,35);vc=x;x=0;if(vc&1){Vb=590;break e}x=0;pa(57,(Ob|0)==0|0,ub|0,169,258380,258420);vc=x;x=0;if(vc&1){vc=Hc()|0;uc=M;K2a(ub);Ec=vc;Fc=uc;break e}K2a(ub);uc=iDa(Xb,168,6704,0)|0;if(!uc){x=0;hb(49);x=0;Vb=590;break e}vc=k[a>>2]|0;k[R>>2]=1;k[R+8>>2]=130;k[R+40>>2]=1;tc=R+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=R+56|0;Dc=R+60|0;Gc=R+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,vc+48|0,R|0)|0;vc=x;x=0;if(vc&1){vc=Hc()|0;tc=M;Ic=k[Gc>>2]|0;if(Ic)j0a(Ic);Ic=k[Dc>>2]|0;if(!Ic){Jc=tc;Kc=vc;Vb=591;break e}j0a(Ic);Jc=tc;Kc=vc;Vb=591;break e}vc=k[Gc>>2]|0;if(vc)j0a(vc);vc=k[Dc>>2]|0;if(vc)j0a(vc);if((k[uc+24>>2]|0)==2){vc=k[a>>2]|0;k[Q>>2]=1;k[Q+8>>2]=81;k[Q+40>>2]=1;Dc=Q+48|0;k[Dc>>2]=-1;k[Dc+4>>2]=-1;Dc=Q+56|0;Gc=Q+60|0;tc=Q+72|0;k[Dc>>2]=0;k[Dc+4>>2]=0;k[Dc+8>>2]=0;k[Dc+12>>2]=0;k[Dc+16>>2]=0;x=0;Ta(539,vc+48|0,Q|0)|0;vc=x;x=0;if(vc&1){vc=Hc()|0;Dc=M;Ic=k[tc>>2]|0;if(Ic)j0a(Ic);Ic=k[Gc>>2]|0;if(!Ic){Jc=Dc;Kc=vc;Vb=591;break e}j0a(Ic);Jc=Dc;Kc=vc;Vb=591;break e}vc=k[tc>>2]|0;if(vc)j0a(vc);vc=k[Gc>>2]|0;if(vc)j0a(vc)}vc=k[a>>2]|0;k[P>>2]=1;k[P+8>>2]=130;k[P+40>>2]=1;Gc=P+48|0;k[Gc>>2]=-1;k[Gc+4>>2]=-1;Gc=P+56|0;tc=P+60|0;Dc=P+72|0;k[Gc>>2]=0;k[Gc+4>>2]=0;k[Gc+8>>2]=0;k[Gc+12>>2]=0;k[Gc+16>>2]=0;x=0;Ta(539,vc+48|0,P|0)|0;vc=x;x=0;if(vc&1){vc=Hc()|0;Gc=M;Ic=k[Dc>>2]|0;if(Ic)j0a(Ic);Ic=k[tc>>2]|0;if(!Ic){Jc=Gc;Kc=vc;Vb=591;break e}j0a(Ic);Jc=Gc;Kc=vc;Vb=591;break e}vc=k[Dc>>2]|0;if(vc)j0a(vc);vc=k[tc>>2]|0;if(vc)j0a(vc);vc=iDa(Wb,168,6704,0)|0;if(!vc){x=0;hb(49);x=0;Vb=590;break e}x=0;fb(316,a|0,vc|0,uc|0);uc=x;x=0;if(uc&1){Vb=590;break e}uc=k[a>>2]|0;k[O>>2]=1;k[O+8>>2]=80;k[O+40>>2]=1;vc=O+48|0;k[vc>>2]=-1;k[vc+4>>2]=-1;vc=O+56|0;tc=O+60|0;Dc=O+72|0;k[vc>>2]=0;k[vc+4>>2]=0;k[vc+8>>2]=0;k[vc+12>>2]=0;k[vc+16>>2]=0;x=0;Ta(539,uc+48|0,O|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;vc=M;Gc=k[Dc>>2]|0;if(Gc)j0a(Gc);Gc=k[tc>>2]|0;if(!Gc){Jc=vc;Kc=uc;Vb=591;break e}j0a(Gc);Jc=vc;Kc=uc;Vb=591;break e}uc=k[Dc>>2]|0;if(uc)j0a(uc);uc=k[tc>>2]|0;if(uc)j0a(uc)}else{if(ac){x=0;fb(140,vb|0,258581,28);uc=x;x=0;if(uc&1){Vb=590;break e}x=0;pa(57,(Ob|0)==0|0,vb|0,180,258380,258420);uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;K2a(vb);Ec=uc;Fc=tc;break e}K2a(vb);tc=k[a>>2]|0;k[N>>2]=1;k[N+8>>2]=130;k[N+40>>2]=1;uc=N+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=N+56|0;Dc=N+60|0;vc=N+72|0;Gc=tc+48|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,Gc|0,N|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;Ic=k[vc>>2]|0;if(Ic)j0a(Ic);Ic=k[Dc>>2]|0;if(!Ic){Jc=tc;Kc=uc;Vb=591;break e}j0a(Ic);Jc=tc;Kc=uc;Vb=591;break e}uc=k[vc>>2]|0;if(uc)j0a(uc);uc=k[Dc>>2]|0;if(uc)j0a(uc);k[L>>2]=1;k[L+8>>2]=84;k[L+40>>2]=1;uc=L+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=L+56|0;Dc=L+60|0;vc=L+72|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,Gc|0,L|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;Ic=k[vc>>2]|0;if(Ic)j0a(Ic);Ic=k[Dc>>2]|0;if(!Ic){Jc=tc;Kc=uc;Vb=591;break e}j0a(Ic);Jc=tc;Kc=uc;Vb=591;break e}uc=k[vc>>2]|0;if(uc)j0a(uc);uc=k[Dc>>2]|0;if(uc)j0a(uc);k[K>>2]=1;k[K+8>>2]=130;k[K+40>>2]=1;uc=K+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=K+56|0;Dc=K+60|0;vc=K+72|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,Gc|0,K|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;Ic=k[vc>>2]|0;if(Ic)j0a(Ic);Ic=k[Dc>>2]|0;if(!Ic){Jc=tc;Kc=uc;Vb=591;break e}j0a(Ic);Jc=tc;Kc=uc;Vb=591;break e}uc=k[vc>>2]|0;if(uc)j0a(uc);uc=k[Dc>>2]|0;if(uc)j0a(uc);k[J>>2]=1;k[J+8>>2]=85;k[J+40>>2]=1;uc=J+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=J+56|0;Dc=J+60|0;vc=J+72|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,Gc|0,J|0)|0;Gc=x;x=0;if(Gc&1){Gc=Hc()|0;uc=M;tc=k[vc>>2]|0;if(tc)j0a(tc);tc=k[Dc>>2]|0;if(!tc){Jc=uc;Kc=Gc;Vb=591;break e}j0a(tc);Jc=uc;Kc=Gc;Vb=591;break e}Gc=k[vc>>2]|0;if(Gc)j0a(Gc);Gc=k[Dc>>2]|0;if(Gc)j0a(Gc);break}Gc=k[a>>2]|0;x=0;fb(140,I|0,295946,34);Dc=x;x=0;if(Dc&1){Vb=590;break e}x=0;pa(51,1,I|0,210,295981,296025);Dc=x;x=0;if(Dc&1){Dc=Hc()|0;vc=M;K2a(I);Jc=vc;Kc=Dc;Vb=591;break e}K2a(I);x=0;Ta(594,Gc|0,gc|0)|0;Gc=x;x=0;if(Gc&1){Vb=590;break e}f:do if(!(k[Pb>>2]|0)){Gc=k[a>>2]|0;if(_b){k[H>>2]=1;k[H+8>>2]=129;k[H+40>>2]=1;Dc=H+48|0;k[Dc>>2]=-1;k[Dc+4>>2]=-1;Dc=H+56|0;vc=H+60|0;uc=H+72|0;k[Dc>>2]=0;k[Dc+4>>2]=0;k[Dc+8>>2]=0;k[Dc+12>>2]=0;k[Dc+16>>2]=0;x=0;Ta(539,Gc+48|0,H|0)|0;Dc=x;x=0;if(Dc&1){Dc=Hc()|0;tc=M;Ic=k[uc>>2]|0;if(Ic)j0a(Ic);Ic=k[vc>>2]|0;if(!Ic){Jc=tc;Kc=Dc;Vb=591;break e}j0a(Ic);Jc=tc;Kc=Dc;Vb=591;break e}Dc=k[uc>>2]|0;if(Dc)j0a(Dc);Dc=k[vc>>2]|0;if(Dc)j0a(Dc)}else{k[wb>>2]=0;k[wb+32>>2]=1;Dc=Gc+48|0;k[G>>2]=2;hc=G+8|0;ic=wb;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));Gc=G+48|0;k[Gc>>2]=-1;k[Gc+4>>2]=-1;Gc=G+56|0;vc=G+60|0;uc=G+72|0;k[Gc>>2]=0;k[Gc+4>>2]=0;k[Gc+8>>2]=0;k[Gc+12>>2]=0;k[Gc+16>>2]=0;x=0;Ta(539,Dc|0,G|0)|0;Gc=x;x=0;if(Gc&1){Gc=Hc()|0;tc=M;Ic=k[uc>>2]|0;if(Ic)j0a(Ic);Ic=k[vc>>2]|0;if(!Ic){Jc=tc;Kc=Gc;Vb=591;break e}j0a(Ic);Jc=tc;Kc=Gc;Vb=591;break e}Gc=k[uc>>2]|0;if(Gc)j0a(Gc);Gc=k[vc>>2]|0;if(Gc)j0a(Gc)}x=0;fb(317,xb|0,k[a>>2]|0,Xb|0);Gc=x;x=0;if(Gc&1){Vb=590;break e}k[yb>>2]=-1;k[yb+4>>2]=-1;k[yb+8>>2]=0;Gc=yb+12|0;k[Gc>>2]=0;x=0;fb(122,xb|0,yb|0,1);vc=x;x=0;if(vc&1){vc=Hc()|0;uc=M;tc=k[Gc>>2]|0;if(!tc){Ec=vc;Fc=uc;break e}j0a(tc);Ec=vc;Fc=uc;break e}else{uc=k[Gc>>2]|0;if(!uc)break;j0a(uc);break}}else{x=0;uc=Ba(k[(k[Xb>>2]|0)+56>>2]|0,Xb|0)|0;Gc=x;x=0;if(Gc&1){Vb=590;break e}if(uc){k[zb>>2]=k[a>>2];x=0;pa(61,zb|0,Xb|0,Yb|0,1,0);uc=x;x=0;if(uc&1){Vb=590;break e}else break}x=0;fb(k[(k[c>>2]|0)+76>>2]|0,Cb|0,c|0,0);uc=x;x=0;if(uc&1){Vb=590;break e}x=0;uc=Fa(86,Cb|0,0,258610)|0;Gc=x;x=0;if(Gc&1){Gc=Hc()|0;Lc=Gc;Mc=M}else{k[Bb>>2]=k[uc>>2];k[Bb+4>>2]=k[uc+4>>2];k[Bb+8>>2]=k[uc+8>>2];k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;x=0;uc=Ta(484,Bb|0,258627)|0;Gc=x;x=0;do if(!(Gc&1)){k[Ab>>2]=k[uc>>2];k[Ab+4>>2]=k[uc+4>>2];k[Ab+8>>2]=k[uc+8>>2];k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;x=0;pa(57,0,Ab|0,203,258380,258420);vc=x;x=0;if(vc&1){vc=Hc()|0;tc=M;K2a(Ab);Nc=vc;Oc=tc;break}else{K2a(Ab);K2a(Bb);K2a(Cb);break f}}else{tc=Hc()|0;Nc=tc;Oc=M}while(0);K2a(Bb);Lc=Nc;Mc=Oc}K2a(Cb);Ec=Lc;Fc=Mc;break e}while(0);x=0;uc=Ba(k[(k[Xb>>2]|0)+60>>2]|0,Xb|0)|0;Gc=x;x=0;if(Gc&1){Vb=590;break e}x=0;fb(140,Db|0,270638,45);Gc=x;x=0;if(Gc&1){Vb=590;break e}x=0;pa(57,(uc+ec|0)>>>0<17|0,Db|0,208,258380,258420);uc=x;x=0;if(uc&1){uc=Hc()|0;Gc=M;K2a(Db);Ec=uc;Fc=Gc;break e}K2a(Db);Gc=k[a>>2]|0;x=0;uc=Ba(k[(k[Xb>>2]|0)+60>>2]|0,Xb|0)|0;Dc=x;x=0;if(Dc&1){Vb=590;break e}Dc=uc+ec|0;x=0;fb(140,F|0,295946,34);uc=x;x=0;if(uc&1){Vb=590;break e}x=0;pa(51,(Dc+-1|0)>>>0<16|0,F|0,210,295981,296025);uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;K2a(F);Jc=tc;Kc=uc;Vb=591;break e}K2a(F);x=0;Ta(594,Gc|0,Dc+127&255|0)|0;Dc=x;x=0;if(Dc&1){Vb=590;break e}Dc=k[a>>2]|0;do if($b){x=0;Gc=Ba(k[(k[Xb>>2]|0)+60>>2]|0,Xb|0)|0;uc=x;x=0;if(uc&1){Vb=590;break e}x=0;fb(140,E|0,295946,34);uc=x;x=0;if(uc&1){Vb=590;break e}x=0;pa(51,(Gc+Ob|0)>>>0<16|0,E|0,210,295981,296025);uc=x;x=0;if(!(uc&1)){K2a(E);x=0;Ta(594,Dc|0,(Ob|128)+Gc&255|0)|0;Gc=x;x=0;if(Gc&1){Vb=590;break e}else break}else{Gc=Hc()|0;uc=M;K2a(E);Jc=uc;Kc=Gc;Vb=591;break e}}else{k[Eb>>2]=0;k[Eb+32>>2]=1;Gc=Dc+48|0;k[D>>2]=2;hc=D+8|0;ic=Eb;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));uc=D+48|0;k[uc>>2]=-1;k[uc+4>>2]=-1;uc=D+56|0;tc=D+60|0;vc=D+72|0;k[uc>>2]=0;k[uc+4>>2]=0;k[uc+8>>2]=0;k[uc+12>>2]=0;k[uc+16>>2]=0;x=0;Ta(539,Gc|0,D|0)|0;uc=x;x=0;if(uc&1){uc=Hc()|0;Ic=M;Pc=k[vc>>2]|0;if(Pc)j0a(Pc);Pc=k[tc>>2]|0;if(!Pc){Jc=Ic;Kc=uc;Vb=591;break e}j0a(Pc);Jc=Ic;Kc=uc;Vb=591;break e}uc=k[vc>>2]|0;if(uc)j0a(uc);uc=k[tc>>2]|0;if(uc)j0a(uc)}while(0);x=0;fb(317,Fb|0,k[a>>2]|0,Wb|0);Dc=x;x=0;if(Dc&1){Vb=590;break e}k[Gb>>2]=-1;k[Gb+4>>2]=-1;k[Gb+8>>2]=0;Dc=Gb+12|0;k[Dc>>2]=0;x=0;nb(66,Fb|0,Xb|0,Gb|0,1);uc=x;x=0;if(uc&1){uc=Hc()|0;tc=M;vc=k[Dc>>2]|0;if(!vc){Ec=uc;Fc=tc;break e}j0a(vc);Ec=uc;Fc=tc;break e}else{tc=k[Dc>>2]|0;if(!tc)break;j0a(tc);break}}while(0);do if(_b){x=0;tc=Ba(k[(k[Xb>>2]|0)+44>>2]|0,Xb|0)|0;Dc=x;x=0;if(Dc&1){Vb=590;break e}x=0;nb(133,a|0,tc|0,1,($b?5:4)|0);tc=x;x=0;if(tc&1){Vb=590;break e}}else{tc=k[a>>2]|0;x=0;fb(140,C|0,296239,35);Dc=x;x=0;if(Dc&1){Vb=590;break e}x=0;pa(51,1,C|0,217,295981,296275);Dc=x;x=0;if(Dc&1){Dc=Hc()|0;uc=M;K2a(C);Jc=uc;Kc=Dc;Vb=591;break e}K2a(C);Dc=Ob+145&255;x=0;Ta(594,tc|0,Dc|0)|0;tc=x;x=0;if(tc&1){Vb=590;break e}do if(Sb){tc=k[a>>2]|0;x=0;xa(k[(k[Xb>>2]|0)+40>>2]|0,Hb|0,Xb|0);uc=x;x=0;if(uc&1){Vb=590;break e}uc=tc+48|0;k[B>>2]=2;hc=B+8|0;ic=Hb;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));Gc=B+48|0;k[Gc>>2]=-1;k[Gc+4>>2]=-1;Gc=B+56|0;tc=B+60|0;vc=B+72|0;k[Gc>>2]=0;k[Gc+4>>2]=0;k[Gc+8>>2]=0;k[Gc+12>>2]=0;k[Gc+16>>2]=0;x=0;Ta(539,uc|0,B|0)|0;Gc=x;x=0;if(Gc&1){Gc=Hc()|0;Ic=M;Pc=k[vc>>2]|0;if(Pc)j0a(Pc);Pc=k[tc>>2]|0;if(!Pc){Jc=Ic;Kc=Gc;Vb=591;break e}j0a(Pc);Jc=Ic;Kc=Gc;Vb=591;break e}Gc=k[vc>>2]|0;if(Gc)j0a(Gc);Gc=k[tc>>2]|0;if(Gc)j0a(Gc)}else{Gc=k[a>>2]|0;if((k[Pb>>2]|0)==2){x=0;tc=Ba(k[(k[Xb>>2]|0)+32>>2]|0,Xb|0)|0;vc=x;x=0;if(vc&1){Vb=590;break e}k[A>>2]=2;k[A+8>>2]=tc;tc=A+12|0;k[tc>>2]=k[Ib>>2];k[tc+4>>2]=k[Ib+4>>2];k[tc+8>>2]=k[Ib+8>>2];k[tc+12>>2]=k[Ib+12>>2];k[tc+16>>2]=k[Ib+16>>2];k[tc+20>>2]=k[Ib+20>>2];k[tc+24>>2]=k[Ib+24>>2];k[A+40>>2]=1;tc=A+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=A+56|0;vc=A+60|0;Ic=A+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,Gc+48|0,A|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;Pc=M;Qc=k[Ic>>2]|0;if(Qc)j0a(Qc);Qc=k[vc>>2]|0;if(!Qc){Jc=Pc;Kc=tc;Vb=591;break e}j0a(Qc);Jc=Pc;Kc=tc;Vb=591;break e}tc=k[Ic>>2]|0;if(tc)j0a(tc);tc=k[vc>>2]|0;if(tc)j0a(tc);break}else{x=0;tc=Ta(k[(k[Xb>>2]|0)+28>>2]|0,Xb|0,1)|0;vc=x;x=0;if(vc&1){Vb=590;break e}k[z>>2]=2;k[z+8>>2]=tc;tc=z+12|0;k[tc>>2]=k[Jb>>2];k[tc+4>>2]=k[Jb+4>>2];k[tc+8>>2]=k[Jb+8>>2];k[tc+12>>2]=k[Jb+12>>2];k[tc+16>>2]=k[Jb+16>>2];k[tc+20>>2]=k[Jb+20>>2];k[tc+24>>2]=k[Jb+24>>2];k[z+40>>2]=1;tc=z+48|0;k[tc>>2]=-1;k[tc+4>>2]=-1;tc=z+56|0;vc=z+60|0;Ic=z+72|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[tc+16>>2]=0;x=0;Ta(539,Gc+48|0,z|0)|0;Gc=x;x=0;if(Gc&1){Gc=Hc()|0;tc=M;Pc=k[Ic>>2]|0;if(Pc)j0a(Pc);Pc=k[vc>>2]|0;if(!Pc){Jc=tc;Kc=Gc;Vb=591;break e}j0a(Pc);Jc=tc;Kc=Gc;Vb=591;break e}Gc=k[Ic>>2]|0;if(Gc)j0a(Gc);Gc=k[vc>>2]|0;if(Gc)j0a(Gc);break}}while(0);Gc=k[a>>2]|0;k[y>>2]=1;k[y+8>>2]=1;k[y+40>>2]=1;vc=y+48|0;k[vc>>2]=-1;k[vc+4>>2]=-1;vc=y+56|0;Ic=y+60|0;tc=y+72|0;k[vc>>2]=0;k[vc+4>>2]=0;k[vc+8>>2]=0;k[vc+12>>2]=0;k[vc+16>>2]=0;x=0;Ta(539,Gc+48|0,y|0)|0;vc=x;x=0;if(vc&1){vc=Hc()|0;Pc=M;Qc=k[tc>>2]|0;if(Qc)j0a(Qc);Qc=k[Ic>>2]|0;if(!Qc){Jc=Pc;Kc=vc;Vb=591;break e}j0a(Qc);Jc=Pc;Kc=vc;Vb=591;break e}vc=k[tc>>2]|0;if(vc)j0a(vc);vc=k[Ic>>2]|0;if(vc)j0a(vc);x=0;fb(140,w|0,296239,35);vc=x;x=0;if(vc&1){Vb=590;break e}x=0;pa(51,1,w|0,217,295981,296275);vc=x;x=0;if(!(vc&1)){K2a(w);x=0;Ta(594,Gc|0,Dc|0)|0;Gc=x;x=0;if(Gc&1){Vb=590;break e}else break}else{Gc=Hc()|0;vc=M;K2a(w);Jc=vc;Kc=Gc;Vb=591;break e}}while(0);do if($b){x=0;Gc=Ba(k[(k[Wb>>2]|0)+44>>2]|0,Wb|0)|0;vc=x;x=0;if(vc&1){Vb=590;break e}x=0;nb(133,a|0,Gc|0,Ob|0,ec|0);Gc=x;x=0;if(Gc&1){Vb=590;break e}}else{Gc=k[a>>2]|0;x=0;fb(140,v|0,296239,35);vc=x;x=0;if(vc&1){Vb=590;break e}x=0;pa(51,1,v|0,217,295981,296275);vc=x;x=0;if(vc&1){vc=Hc()|0;Ic=M;K2a(v);Jc=Ic;Kc=vc;Vb=591;break e}K2a(v);vc=(Ob|144)&255;x=0;Ic=Ta(594,Gc|0,vc|0)|0;Gc=x;x=0;if(Gc&1){Vb=590;break e}x=0;xa(k[(k[Wb>>2]|0)+40>>2]|0,Kb|0,Wb|0);Gc=x;x=0;if(Gc&1){Vb=590;break e}Gc=Ic+48|0;k[u>>2]=2;hc=u+8|0;ic=Kb;jc=hc+40|0;do{k[hc>>2]=k[ic>>2];hc=hc+4|0;ic=ic+4|0}while((hc|0)<(jc|0));Dc=u+48|0;k[Dc>>2]=-1;k[Dc+4>>2]=-1;Dc=u+56|0;tc=u+60|0;Pc=u+72|0;k[Dc>>2]=0;k[Dc+4>>2]=0;k[Dc+8>>2]=0;k[Dc+12>>2]=0;k[Dc+16>>2]=0;x=0;Ta(539,Gc|0,u|0)|0;Dc=x;x=0;if(Dc&1){Dc=Hc()|0;Qc=M;Rc=k[Pc>>2]|0;if(Rc)j0a(Rc);Rc=k[tc>>2]|0;if(!Rc){Jc=Qc;Kc=Dc;Vb=591;break e}j0a(Rc);Jc=Qc;Kc=Dc;Vb=591;break e}Dc=k[Pc>>2]|0;if(Dc)j0a(Dc);Dc=k[tc>>2]|0;if(Dc)j0a(Dc);k[t>>2]=1;k[t+8>>2]=1;k[t+40>>2]=1;Dc=t+48|0;k[Dc>>2]=-1;k[Dc+4>>2]=-1;Dc=t+56|0;tc=t+60|0;Pc=t+72|0;k[Dc>>2]=0;k[Dc+4>>2]=0;k[Dc+8>>2]=0;k[Dc+12>>2]=0;k[Dc+16>>2]=0;x=0;Ta(539,Gc|0,t|0)|0;Dc=x;x=0;if(Dc&1){Dc=Hc()|0;Qc=M;Rc=k[Pc>>2]|0;if(Rc)j0a(Rc);Rc=k[tc>>2]|0;if(!Rc){Jc=Qc;Kc=Dc;Vb=591;break e}j0a(Rc);Jc=Qc;Kc=Dc;Vb=591;break e}Dc=k[Pc>>2]|0;if(Dc)j0a(Dc);Dc=k[tc>>2]|0;if(Dc)j0a(Dc);x=0;fb(140,s|0,296239,35);Dc=x;x=0;if(Dc&1){Vb=590;break e}x=0;pa(51,1,s|0,217,295981,296275);Dc=x;x=0;if(!(Dc&1)){K2a(s);x=0;Ta(594,Ic|0,vc|0)|0;Dc=x;x=0;if(Dc&1){Vb=590;break e}else break}else{Dc=Hc()|0;tc=M;K2a(s);Jc=tc;Kc=Dc;Vb=591;break e}}while(0);x=0;fb(314,q|0,(k[a>>2]|0)+48|0,sb|0);Dc=x;x=0;if(Dc&1){Vb=590;break}Dc=k[q+72>>2]|0;if(Dc)j0a(Dc);Dc=k[q+60>>2]|0;if(Dc)j0a(Dc);x=0;Ta(539,(k[a>>2]|0)+48|0,tb|0)|0;Dc=x;x=0;if(Dc&1){Vb=590;break}g:do if($b){Dc=k[a>>2]|0;x=0;fb(140,p|0,295946,34);tc=x;x=0;if(tc&1){Vb=590;break e}x=0;pa(51,(Ob+-1|0)>>>0<16|0,p|0,210,295981,296025);tc=x;x=0;if(tc&1){tc=Hc()|0;Pc=M;K2a(p);Jc=Pc;Kc=tc;Vb=591;break e}K2a(p);x=0;tc=Ta(594,Dc|0,Ob+127&255|0)|0;Dc=x;x=0;if(Dc&1){Vb=590;break e}k[o>>2]=1;k[o+8>>2]=21;k[o+40>>2]=1;Dc=o+48|0;k[Dc>>2]=-1;k[Dc+4>>2]=-1;Dc=o+56|0;Pc=o+60|0;Qc=o+72|0;k[Dc>>2]=0;k[Dc+4>>2]=0;k[Dc+8>>2]=0;k[Dc+12>>2]=0;k[Dc+16>>2]=0;x=0;Ta(539,tc+48|0,o|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;Dc=M;Rc=k[Qc>>2]|0;if(Rc)j0a(Rc);Rc=k[Pc>>2]|0;if(!Rc){Jc=Dc;Kc=tc;Vb=591;break e}j0a(Rc);Jc=Dc;Kc=tc;Vb=591;break e}tc=k[Qc>>2]|0;if(tc)j0a(tc);tc=k[Pc>>2]|0;if(tc)j0a(tc);x=0;xa(819,Lb|0,k[a>>2]|0);tc=x;x=0;if(tc&1){Vb=590;break e}tc=k[a>>2]|0;x=0;fb(140,n|0,295946,34);Pc=x;x=0;do if(Pc&1)Vb=872;else{x=0;pa(51,1,n|0,210,295981,296025);Qc=x;x=0;if(Qc&1){Qc=Hc()|0;Dc=M;K2a(n);Tc=Dc;Uc=Qc;Vb=873;break}K2a(n);x=0;Qc=Ta(594,tc|0,nc|0)|0;Dc=x;x=0;if(Dc&1){Vb=872;break}x=0;fb(140,m|0,295946,34);Dc=x;x=0;if(Dc&1){Vb=872;break}x=0;pa(51,1,m|0,210,295981,296025);Dc=x;x=0;if(Dc&1){Dc=Hc()|0;Rc=M;K2a(m);Tc=Rc;Uc=Dc;Vb=873;break}K2a(m);x=0;Ta(594,Qc|0,(Ob|128)&255|0)|0;Qc=x;x=0;if(Qc&1){Vb=872;break}x=0;fb(317,Mb|0,k[a>>2]|0,Wb|0);Qc=x;x=0;if(Qc&1){Vb=872;break}k[Nb>>2]=-1;k[Nb+4>>2]=-1;k[Nb+8>>2]=0;Qc=Nb+12|0;k[Qc>>2]=0;x=0;fb(123,Mb|0,Nb|0,1);Dc=x;x=0;if(Dc&1){Dc=Hc()|0;Rc=M;Vc=k[Qc>>2]|0;if(!Vc){Wc=Dc;Xc=Rc;break}j0a(Vc);Wc=Dc;Xc=Rc;break}Rc=k[Qc>>2]|0;if(Rc)j0a(Rc);x=0;Rc=Ba(k[(k[Wb>>2]|0)+44>>2]|0,Wb|0)|0;Qc=x;x=0;if(Qc&1){Vb=872;break}x=0;nb(133,a|0,Rc|0,Ob|0,ec|0);Rc=x;x=0;if(Rc&1){Vb=872;break}x=0;fb(314,l|0,(k[a>>2]|0)+48|0,tb|0);Rc=x;x=0;if(Rc&1){Vb=872;break}Rc=k[l+72>>2]|0;if(Rc)j0a(Rc);Rc=k[l+60>>2]|0;if(Rc)j0a(Rc);x=0;Ta(539,(k[a>>2]|0)+48|0,Lb|0)|0;Rc=x;x=0;if(Rc&1){Vb=872;break}Rc=k[a>>2]|0;k[j>>2]=1;k[j+8>>2]=80;k[j+40>>2]=1;Qc=j+48|0;k[Qc>>2]=-1;k[Qc+4>>2]=-1;Qc=j+56|0;Dc=j+60|0;Vc=j+72|0;k[Qc>>2]=0;k[Qc+4>>2]=0;k[Qc+8>>2]=0;k[Qc+12>>2]=0;k[Qc+16>>2]=0;x=0;Ta(539,Rc+48|0,j|0)|0;Rc=x;x=0;if(Rc&1){Rc=Hc()|0;Qc=M;Yc=k[Vc>>2]|0;if(Yc)j0a(Yc);Yc=k[Dc>>2]|0;if(!Yc){Tc=Qc;Uc=Rc;Vb=873;break}j0a(Yc);Tc=Qc;Uc=Rc;Vb=873;break}Rc=k[Vc>>2]|0;if(Rc)j0a(Rc);Rc=k[Dc>>2]|0;if(Rc)j0a(Rc);Rc=k[Lb+72>>2]|0;if(Rc)j0a(Rc);Rc=k[Lb+60>>2]|0;if(Rc)j0a(Rc);break g}while(0);if((Vb|0)==872){tc=Hc()|0;Tc=M;Uc=tc;Vb=873}if((Vb|0)==873){Wc=Uc;Xc=Tc}tc=k[Lb+72>>2]|0;if(tc)j0a(tc);tc=k[Lb+60>>2]|0;if(!tc){Ec=Wc;Fc=Xc;break e}j0a(tc);Ec=Wc;Fc=Xc;break e}while(0);if(_b){tc=k[a>>2]|0;k[i>>2]=1;k[i+8>>2]=80;k[i+40>>2]=1;Pc=i+48|0;k[Pc>>2]=-1;k[Pc+4>>2]=-1;Pc=i+56|0;vc=i+60|0;Ic=i+72|0;k[Pc>>2]=0;k[Pc+4>>2]=0;k[Pc+8>>2]=0;k[Pc+12>>2]=0;k[Pc+16>>2]=0;x=0;Ta(539,tc+48|0,i|0)|0;tc=x;x=0;if(tc&1){tc=Hc()|0;Pc=M;Gc=k[Ic>>2]|0;if(Gc)j0a(Gc);Gc=k[vc>>2]|0;if(!Gc){Jc=Pc;Kc=tc;Vb=591;break}j0a(Gc);Jc=Pc;Kc=tc;Vb=591;break}tc=k[Ic>>2]|0;if(tc)j0a(tc);tc=k[vc>>2]|0;if(tc)j0a(tc)}x=0;Ta(539,(k[a>>2]|0)+48|0,gb|0)|0;tc=x;x=0;if(tc&1){Vb=590;break}tc=k[a>>2]|0;k[h>>2]=1;k[h+8>>2]=80;k[h+40>>2]=1;vc=h+48|0;k[vc>>2]=-1;k[vc+4>>2]=-1;vc=h+56|0;Ic=h+60|0;Pc=h+72|0;Gc=tc+48|0;k[vc>>2]=0;k[vc+4>>2]=0;k[vc+8>>2]=0;k[vc+12>>2]=0;k[vc+16>>2]=0;x=0;Ta(539,Gc|0,h|0)|0;vc=x;x=0;if(vc&1){vc=Hc()|0;tc=M;Rc=k[Pc>>2]|0;if(Rc)j0a(Rc);Rc=k[Ic>>2]|0;if(!Rc){Jc=tc;Kc=vc;Vb=591;break}j0a(Rc);Jc=tc;Kc=vc;Vb=591;break}vc=k[Pc>>2]|0;if(vc)j0a(vc);vc=k[Ic>>2]|0;if(vc)j0a(vc);k[g>>2]=1;k[g+8>>2]=144;k[g+40>>2]=1;vc=g+48|0;k[vc>>2]=-1;k[vc+4>>2]=-1;vc=g+56|0;Ic=g+60|0;Pc=g+72|0;k[vc>>2]=0;k[vc+4>>2]=0;k[vc+8>>2]=0;k[vc+12>>2]=0;k[vc+16>>2]=0;x=0;Ta(539,Gc|0,g|0)|0;vc=x;x=0;if(vc&1){vc=Hc()|0;tc=M;Rc=k[Pc>>2]|0;if(Rc)j0a(Rc);Rc=k[Ic>>2]|0;if(!Rc){Jc=tc;Kc=vc;Vb=591;break}j0a(Rc);Jc=tc;Kc=vc;Vb=591;break}vc=k[Pc>>2]|0;if(vc)j0a(vc);vc=k[Ic>>2]|0;if(vc)j0a(vc);k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;vc=f+48|0;k[vc>>2]=-1;k[vc+4>>2]=-1;vc=f+56|0;Ic=f+60|0;Pc=f+72|0;k[vc>>2]=0;k[vc+4>>2]=0;k[vc+8>>2]=0;k[vc+12>>2]=0;k[vc+16>>2]=0;x=0;Ta(539,Gc|0,f|0)|0;Gc=x;x=0;if(Gc&1){Gc=Hc()|0;vc=M;tc=k[Pc>>2]|0;if(tc)j0a(tc);tc=k[Ic>>2]|0;if(!tc){Jc=vc;Kc=Gc;Vb=591;break}j0a(tc);Jc=vc;Kc=Gc;Vb=591;break}Gc=k[Pc>>2]|0;if(Gc)j0a(Gc);Gc=k[Ic>>2]|0;if(Gc)j0a(Gc);x=0;xa(820,a|0,Wb|0);Gc=x;x=0;if(Gc&1){Vb=590;break}Gc=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;Ic=e+48|0;k[Ic>>2]=-1;k[Ic+4>>2]=-1;Ic=e+56|0;Pc=e+60|0;vc=e+72|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[Ic+16>>2]=0;x=0;Ta(539,Gc+48|0,e|0)|0;Gc=x;x=0;if(Gc&1){Gc=Hc()|0;Ic=M;tc=k[vc>>2]|0;if(tc)j0a(tc);tc=k[Pc>>2]|0;if(!tc){Jc=Ic;Kc=Gc;Vb=591;break}j0a(tc);Jc=Ic;Kc=Gc;Vb=591;break}Gc=k[vc>>2]|0;if(Gc)j0a(Gc);Gc=k[Pc>>2]|0;if(Gc)j0a(Gc);Gc=k[tb+72>>2]|0;if(Gc)j0a(Gc);Gc=k[tb+60>>2]|0;if(Gc)j0a(Gc);Gc=k[sb+72>>2]|0;if(Gc)j0a(Gc);Gc=k[sb+60>>2]|0;if(Gc)j0a(Gc);Gc=k[gb+72>>2]|0;if(Gc)j0a(Gc);Gc=k[gb+60>>2]|0;if(Gc)j0a(Gc);break b}while(0);if((Vb|0)==590){ec=Hc()|0;Jc=M;Kc=ec;Vb=591}if((Vb|0)==591){Ec=Kc;Fc=Jc}ec=k[tb+72>>2]|0;if(ec)j0a(ec);ec=k[tb+60>>2]|0;if(!ec){Zc=Ec;_c=Fc;break}j0a(ec);Zc=Ec;_c=Fc}while(0);if((Vb|0)==588){Zb=Hc()|0;Ac=M;Bc=Zb;Vb=589}if((Vb|0)==589){Zc=Bc;_c=Ac}Zb=k[sb+72>>2]|0;if(Zb)j0a(Zb);Zb=k[sb+60>>2]|0;if(!Zb){yc=Zc;zc=_c;break}j0a(Zb);yc=Zc;zc=_c}while(0);if((Vb|0)==282){Zb=Hc()|0;oc=M;pc=Zb;Vb=283}if((Vb|0)==283){yc=pc;zc=oc}Zb=k[gb+72>>2]|0;if(Zb)j0a(Zb);Zb=k[gb+60>>2]|0;if(!Zb){lc=yc;mc=zc;break a}j0a(Zb);lc=yc;mc=zc;break a}while(0);k[ab>>2]=20456;xh(ab+12|0,k[ab+16>>2]|0);Ob=k[ab+8>>2]|0;if(!Ob){r=d;return}k0a(Ob);r=d;return}else if((Vb|0)==28){Ob=Hc()|0;Tb=M;Ub=Ob;Vb=30;break}else if((Vb|0)==33){Ob=Hc()|0;Pb=M;K2a(Ya);Tb=Pb;Ub=Ob;Vb=30;break}}else Vb=29}while(0);if((Vb|0)==29){Ya=Hc()|0;Tb=M;Ub=Ya;Vb=30}if((Vb|0)==30){lc=Ub;mc=Tb}k[ab>>2]=20456;xh(ab+12|0,k[ab+16>>2]|0);Tb=k[ab+8>>2]|0;if(!Tb){Qb=lc;Rb=mc;Sc(Qb|0)}k0a(Tb);Qb=lc;Rb=mc;Sc(Qb|0)}function yia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;d=r;r=r+240|0;e=d+160|0;f=d+120|0;g=d+80|0;h=d+40|0;i=d;j=Vf[k[(k[b>>2]|0)+36>>2]&1023](b)|0;l=k[a>>2]|0;if(!j){j=l+48|0;k[e>>2]=2;m=e+8|0;n=b+48|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));p=e+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=e+56|0;q=e+60|0;s=e+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,j|0,e|0)|0;j=x;x=0;if(j&1){j=Hc()|0;p=k[s>>2]|0;if(p)j0a(p);p=k[q>>2]|0;if(!p)Sc(j|0);j0a(p);Sc(j|0)}else{j=k[s>>2]|0;if(j)j0a(j);j=k[q>>2]|0;if(j)j0a(j);r=d;return}}q2a(e,295946,34);x=0;pa(51,c>>>0<16|0,e|0,210,295981,296025);j=x;x=0;if(j&1){j=Hc()|0;K2a(e);Sc(j|0)}K2a(e);Iia(l,c+128&255)|0;switch(k[b+24>>2]|0){case 0:{c=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=84;k[e+40>>2]=1;l=e+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=e+56|0;j=e+60|0;q=e+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,c+48|0,e|0)|0;c=x;x=0;if(c&1){c=Hc()|0;l=k[q>>2]|0;if(l)j0a(l);l=k[j>>2]|0;if(!l)Sc(c|0);j0a(l);Sc(c|0)}c=k[q>>2]|0;if(c)j0a(c);c=k[j>>2]|0;if(c)j0a(c);if(!(k[b+32>>2]|0)){r=d;return}b=k[a>>2]|0;k[f>>2]=1;k[f+32>>2]=1;c=b+48|0;k[e>>2]=2;m=e+8|0;n=f;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;b=e+60|0;j=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,c|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;q=k[j>>2]|0;if(q)j0a(q);q=k[b>>2]|0;if(!q)Sc(f|0);j0a(q);Sc(f|0)}f=k[j>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(f)j0a(f);k[e>>2]=1;k[e+8>>2]=129;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;b=e+60|0;j=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,c|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;q=k[j>>2]|0;if(q)j0a(q);q=k[b>>2]|0;if(!q)Sc(f|0);j0a(q);Sc(f|0)}f=k[j>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(f)j0a(f);k[g>>2]=1;k[g+32>>2]=1;k[e>>2]=2;m=e+8|0;n=g;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;f=e+60|0;b=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,c|0,e|0)|0;g=x;x=0;if(g&1){g=Hc()|0;j=k[b>>2]|0;if(j)j0a(j);j=k[f>>2]|0;if(!j)Sc(g|0);j0a(j);Sc(g|0)}g=k[b>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(g)j0a(g);k[e>>2]=1;k[e+8>>2]=22;k[e+40>>2]=1;g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;f=e+60|0;b=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,c|0,e|0)|0;c=x;x=0;if(c&1){c=Hc()|0;g=k[b>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(!g)Sc(c|0);j0a(g);Sc(c|0)}c=k[b>>2]|0;if(c)j0a(c);c=k[f>>2]|0;if(c)j0a(c);c=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=21;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;b=e+60|0;g=e+72|0;j=c+48|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,j|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;c=k[g>>2]|0;if(c)j0a(c);c=k[b>>2]|0;if(!c)Sc(f|0);j0a(c);Sc(f|0)}f=k[g>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(f)j0a(f);k[h>>2]=256;k[h+32>>2]=1;k[e>>2]=2;m=e+8|0;n=h;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));h=e+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=e+56|0;f=e+60|0;b=e+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,j|0,e|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=k[b>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(!g)Sc(h|0);j0a(g);Sc(h|0)}h=k[b>>2]|0;if(h)j0a(h);h=k[f>>2]|0;if(h)j0a(h);k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;h=e+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=e+56|0;f=e+60|0;b=e+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,j|0,e|0)|0;j=x;x=0;if(j&1){j=Hc()|0;h=k[b>>2]|0;if(h)j0a(h);h=k[f>>2]|0;if(!h)Sc(j|0);j0a(h);Sc(j|0)}j=k[b>>2]|0;if(j)j0a(j);j=k[f>>2]|0;if(j)j0a(j);j=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=3;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;b=e+60|0;h=e+72|0;g=j+48|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,g|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;j=k[h>>2]|0;if(j)j0a(j);j=k[b>>2]|0;if(!j)Sc(f|0);j0a(j);Sc(f|0)}f=k[h>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(f)j0a(f);k[e>>2]=1;k[e+8>>2]=22;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;b=e+60|0;h=e+72|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,g|0,e|0)|0;g=x;x=0;if(g&1){g=Hc()|0;f=k[h>>2]|0;if(f)j0a(f);f=k[b>>2]|0;if(!f)Sc(g|0);j0a(f);Sc(g|0)}g=k[h>>2]|0;if(g)j0a(g);g=k[b>>2]|0;if(g)j0a(g);g=k[a>>2]|0;k[i>>2]=2;k[i+32>>2]=1;b=g+48|0;k[e>>2]=2;m=e+8|0;n=i;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;m=e+60|0;o=e+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,b|0,e|0)|0;n=x;x=0;if(n&1){n=Hc()|0;i=k[o>>2]|0;if(i)j0a(i);i=k[m>>2]|0;if(!i)Sc(n|0);j0a(i);Sc(n|0)}n=k[o>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(n)j0a(n);k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;m=e+60|0;o=e+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,b|0,e|0)|0;n=x;x=0;if(n&1){n=Hc()|0;i=k[o>>2]|0;if(i)j0a(i);i=k[m>>2]|0;if(!i)Sc(n|0);j0a(i);Sc(n|0)}n=k[o>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(n)j0a(n);k[e>>2]=1;k[e+8>>2]=4;k[e+40>>2]=1;n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;m=e+60|0;o=e+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,b|0,e|0)|0;b=x;x=0;if(b&1){b=Hc()|0;n=k[o>>2]|0;if(n)j0a(n);n=k[m>>2]|0;if(!n)Sc(b|0);j0a(n);Sc(b|0)}else{b=k[o>>2]|0;if(b)j0a(b);b=k[m>>2]|0;if(b)j0a(b);r=d;return}break}case 2:{b=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=81;k[e+40>>2]=1;a=e+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=e+56|0;m=e+60|0;o=e+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,b+48|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;b=k[o>>2]|0;if(b)j0a(b);b=k[m>>2]|0;if(!b)Sc(e|0);j0a(b);Sc(e|0)}else{e=k[o>>2]|0;if(e)j0a(e);e=k[m>>2]|0;if(e)j0a(e);r=d;return}break}default:{r=d;return}}}function zia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;d=r;r=r+400|0;e=d+200|0;f=d+160|0;g=d+120|0;h=d+364|0;i=d+336|0;j=d+80|0;l=d+308|0;m=d+280|0;n=d+40|0;o=d;p=k[b+24>>2]|0;if(!p){q=b+36|0;s=(k[q>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,s|0,e|0,588,285183,276209);s=x;x=0;if(s&1){s=Hc()|0;K2a(e);Sc(s|0)}K2a(e);s=k[q>>2]|0;Tf[k[(k[s>>2]|0)+40>>2]&2047](f,s);if((k[f>>2]|k[f+32>>2])>>>0>=2){f=k[a>>2]|0;s=(k[q>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,s|0,e|0,588,285183,276209);s=x;x=0;if(s&1){s=Hc()|0;K2a(e);Sc(s|0)}K2a(e);s=k[q>>2]|0;Tf[k[(k[s>>2]|0)+40>>2]&2047](j,s);s=f+48|0;k[e>>2]=2;t=e+8|0;u=j;v=t+40|0;do{k[t>>2]=k[u>>2];t=t+4|0;u=u+4|0}while((t|0)<(v|0));j=e+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=e+56|0;f=e+60|0;w=e+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,s|0,e|0)|0;j=x;x=0;if(j&1){j=Hc()|0;y=k[w>>2]|0;if(y)j0a(y);y=k[f>>2]|0;if(!y)Sc(j|0);j0a(y);Sc(j|0)}j=k[w>>2]|0;if(j)j0a(j);j=k[f>>2]|0;if(j)j0a(j);k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;j=e+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=e+56|0;f=e+60|0;w=e+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;x=0;Ta(539,s|0,e|0)|0;s=x;x=0;if(s&1){s=Hc()|0;j=k[w>>2]|0;if(j)j0a(j);j=k[f>>2]|0;if(!j)Sc(s|0);j0a(j);Sc(s|0)}else{s=k[w>>2]|0;if(s)j0a(s);s=k[f>>2]|0;if(s)j0a(s);r=d;return}}s=(k[q>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,s|0,e|0,588,285183,276209);s=x;x=0;if(s&1){s=Hc()|0;K2a(e);Sc(s|0)}K2a(e);s=k[q>>2]|0;q=Vf[k[(k[s>>2]|0)+44>>2]&1023](s)|0;if(!q){s=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=80;k[e+40>>2]=1;f=e+48|0;k[f>>2]=-1;k[f+4>>2]=-1;f=e+56|0;w=e+60|0;j=e+72|0;y=s+48|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,y|0,e|0)|0;f=x;x=0;if(f&1){f=Hc()|0;s=k[j>>2]|0;if(s)j0a(s);s=k[w>>2]|0;if(!s)Sc(f|0);j0a(s);Sc(f|0)}f=k[j>>2]|0;if(f)j0a(f);f=k[w>>2]|0;if(f)j0a(f);k[g>>2]=1;k[g+32>>2]=1;k[e>>2]=2;t=e+8|0;u=g;v=t+40|0;do{k[t>>2]=k[u>>2];t=t+4|0;u=u+4|0}while((t|0)<(v|0));g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;f=e+60|0;w=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;x=0;Ta(539,y|0,e|0)|0;y=x;x=0;if(y&1){y=Hc()|0;g=k[w>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(!g)Sc(y|0);j0a(g);Sc(y|0)}else{y=k[w>>2]|0;if(y)j0a(y);y=k[f>>2]|0;if(y)j0a(y);r=d;return}}if(q>>>0>=17){r=d;return}y=32/(q>>>0)|0;q=(k[a>>2]|0)+48|0;k[e>>2]=2;k[e+8>>2]=y+-1;f=e+12|0;k[f>>2]=k[h>>2];k[f+4>>2]=k[h+4>>2];k[f+8>>2]=k[h+8>>2];k[f+12>>2]=k[h+12>>2];k[f+16>>2]=k[h+16>>2];k[f+20>>2]=k[h+20>>2];k[f+24>>2]=k[h+24>>2];k[e+40>>2]=1;h=e+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=e+56|0;f=e+60|0;w=e+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,q|0,e|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=k[w>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(!g)Sc(h|0);j0a(g);Sc(h|0)}h=k[w>>2]|0;if(h)j0a(h);h=k[f>>2]|0;if(h)j0a(h);k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;h=e+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=e+56|0;f=e+60|0;w=e+72|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;x=0;Ta(539,q|0,e|0)|0;h=x;x=0;if(h&1){h=Hc()|0;g=k[w>>2]|0;if(g)j0a(g);g=k[f>>2]|0;if(!g)Sc(h|0);j0a(g);Sc(h|0)}h=k[w>>2]|0;if(h)j0a(h);h=k[f>>2]|0;if(h)j0a(h);k[e>>2]=2;k[e+8>>2]=y;y=e+12|0;k[y>>2]=k[i>>2];k[y+4>>2]=k[i+4>>2];k[y+8>>2]=k[i+8>>2];k[y+12>>2]=k[i+12>>2];k[y+16>>2]=k[i+16>>2];k[y+20>>2]=k[i+20>>2];k[y+24>>2]=k[i+24>>2];k[e+40>>2]=1;i=e+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=e+56|0;y=e+60|0;h=e+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,q|0,e|0)|0;i=x;x=0;if(i&1){i=Hc()|0;f=k[h>>2]|0;if(f)j0a(f);f=k[y>>2]|0;if(!f)Sc(i|0);j0a(f);Sc(i|0)}i=k[h>>2]|0;if(i)j0a(i);i=k[y>>2]|0;if(i)j0a(i);k[e>>2]=1;k[e+8>>2]=144;k[e+40>>2]=1;i=e+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=e+56|0;y=e+60|0;h=e+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,q|0,e|0)|0;i=x;x=0;if(i&1){i=Hc()|0;f=k[h>>2]|0;if(f)j0a(f);f=k[y>>2]|0;if(!f)Sc(i|0);j0a(f);Sc(i|0)}i=k[h>>2]|0;if(i)j0a(i);i=k[y>>2]|0;if(i)j0a(i);k[e>>2]=1;k[e+8>>2]=4;k[e+40>>2]=1;i=e+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=e+56|0;y=e+60|0;h=e+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,q|0,e|0)|0;q=x;x=0;if(q&1){q=Hc()|0;i=k[h>>2]|0;if(i)j0a(i);i=k[y>>2]|0;if(!i)Sc(q|0);j0a(i);Sc(q|0)}else{q=k[h>>2]|0;if(q)j0a(q);q=k[y>>2]|0;if(q)j0a(q);r=d;return}}if(!(k[b+32>>2]|0)){q=k[a>>2]|0;y=b+36|0;b=(k[y>>2]|0)!=0;q2a(e,329672,0);x=0;pa(57,b|0,e|0,588,285183,276209);b=x;x=0;if(b&1){b=Hc()|0;K2a(e);Sc(b|0)}K2a(e);b=k[y>>2]|0;do if((p|0)==2){y=Vf[k[(k[b>>2]|0)+32>>2]&1023](b)|0;k[e>>2]=2;k[e+8>>2]=y;y=e+12|0;k[y>>2]=k[l>>2];k[y+4>>2]=k[l+4>>2];k[y+8>>2]=k[l+8>>2];k[y+12>>2]=k[l+12>>2];k[y+16>>2]=k[l+16>>2];k[y+20>>2]=k[l+20>>2];k[y+24>>2]=k[l+24>>2];k[e+40>>2]=1;y=e+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=e+56|0;h=e+60|0;i=e+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,q+48|0,e|0)|0;y=x;x=0;if(!(y&1)){y=k[i>>2]|0;if(y)j0a(y);y=k[h>>2]|0;if(y)j0a(y);break}y=Hc()|0;f=k[i>>2]|0;if(f)j0a(f);f=k[h>>2]|0;if(!f)Sc(y|0);j0a(f);Sc(y|0)}else{y=cg[k[(k[b>>2]|0)+28>>2]&1023](b,1)|0;k[e>>2]=2;k[e+8>>2]=y;y=e+12|0;k[y>>2]=k[m>>2];k[y+4>>2]=k[m+4>>2];k[y+8>>2]=k[m+8>>2];k[y+12>>2]=k[m+12>>2];k[y+16>>2]=k[m+16>>2];k[y+20>>2]=k[m+20>>2];k[y+24>>2]=k[m+24>>2];k[e+40>>2]=1;y=e+48|0;k[y>>2]=-1;k[y+4>>2]=-1;y=e+56|0;f=e+60|0;h=e+72|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;x=0;Ta(539,q+48|0,e|0)|0;y=x;x=0;if(!(y&1)){y=k[h>>2]|0;if(y)j0a(y);y=k[f>>2]|0;if(y)j0a(y);break}y=Hc()|0;i=k[h>>2]|0;if(i)j0a(i);i=k[f>>2]|0;if(!i)Sc(y|0);j0a(i);Sc(y|0)}while(0);q=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;m=e+48|0;k[m>>2]=-1;k[m+4>>2]=-1;m=e+56|0;b=e+60|0;l=e+72|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;x=0;Ta(539,q+48|0,e|0)|0;q=x;x=0;if(q&1){q=Hc()|0;m=k[l>>2]|0;if(m)j0a(m);m=k[b>>2]|0;if(!m)Sc(q|0);j0a(m);Sc(q|0)}else{q=k[l>>2]|0;if(q)j0a(q);q=k[b>>2]|0;if(q)j0a(q);r=d;return}}if(!c){r=d;return}c=k[a>>2]|0;k[n>>2]=31;k[n+32>>2]=1;a=c+48|0;k[e>>2]=2;t=e+8|0;u=n;v=t+40|0;do{k[t>>2]=k[u>>2];t=t+4|0;u=u+4|0}while((t|0)<(v|0));n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;c=e+60|0;q=e+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,a|0,e|0)|0;n=x;x=0;if(n&1){n=Hc()|0;b=k[q>>2]|0;if(b)j0a(b);b=k[c>>2]|0;if(!b)Sc(n|0);j0a(b);Sc(n|0)}n=k[q>>2]|0;if(n)j0a(n);n=k[c>>2]|0;if(n)j0a(n);k[e>>2]=1;k[e+8>>2]=1;k[e+40>>2]=1;n=e+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=e+56|0;c=e+60|0;q=e+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,a|0,e|0)|0;n=x;x=0;if(n&1){n=Hc()|0;b=k[q>>2]|0;if(b)j0a(b);b=k[c>>2]|0;if(!b)Sc(n|0);j0a(b);Sc(n|0)}n=k[q>>2]|0;if(n)j0a(n);n=k[c>>2]|0;if(n)j0a(n);k[o>>2]=32;k[o+32>>2]=1;k[e>>2]=2;t=e+8|0;u=o;v=t+40|0;do{k[t>>2]=k[u>>2];t=t+4|0;u=u+4|0}while((t|0)<(v|0));u=e+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=e+56|0;t=e+60|0;v=e+72|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,a|0,e|0)|0;u=x;x=0;if(u&1){u=Hc()|0;o=k[v>>2]|0;if(o)j0a(o);o=k[t>>2]|0;if(!o)Sc(u|0);j0a(o);Sc(u|0)}u=k[v>>2]|0;if(u)j0a(u);u=k[t>>2]|0;if(u)j0a(u);k[e>>2]=1;k[e+8>>2]=128;k[e+40>>2]=1;u=e+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=e+56|0;t=e+60|0;v=e+72|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,a|0,e|0)|0;u=x;x=0;if(u&1){u=Hc()|0;o=k[v>>2]|0;if(o)j0a(o);o=k[t>>2]|0;if(!o)Sc(u|0);j0a(o);Sc(u|0)}u=k[v>>2]|0;if(u)j0a(u);u=k[t>>2]|0;if(u)j0a(u);k[e>>2]=1;k[e+8>>2]=145;k[e+40>>2]=1;u=e+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=e+56|0;t=e+60|0;v=e+72|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,a|0,e|0)|0;u=x;x=0;if(u&1){u=Hc()|0;o=k[v>>2]|0;if(o)j0a(o);o=k[t>>2]|0;if(!o)Sc(u|0);j0a(o);Sc(u|0)}u=k[v>>2]|0;if(u)j0a(u);u=k[t>>2]|0;if(u)j0a(u);k[e>>2]=1;k[e+8>>2]=4;k[e+40>>2]=1;u=e+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=e+56|0;t=e+60|0;v=e+72|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,a|0,e|0)|0;u=x;x=0;if(u&1){u=Hc()|0;o=k[v>>2]|0;if(o)j0a(o);o=k[t>>2]|0;if(!o)Sc(u|0);j0a(o);Sc(u|0)}u=k[v>>2]|0;if(u)j0a(u);u=k[t>>2]|0;if(u)j0a(u);k[e>>2]=1;k[e+8>>2]=2;k[e+40>>2]=1;u=e+48|0;k[u>>2]=-1;k[u+4>>2]=-1;u=e+56|0;t=e+60|0;v=e+72|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;x=0;Ta(539,a|0,e|0)|0;e=x;x=0;if(e&1){e=Hc()|0;a=k[v>>2]|0;if(a)j0a(a);a=k[t>>2]|0;if(!a)Sc(e|0);j0a(a);Sc(e|0)}else{e=k[v>>2]|0;if(e)j0a(e);e=k[t>>2]|0;if(e)j0a(e);r=d;return}}function Aia(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+240|0;f=e+80|0;g=e+228|0;h=e+216|0;i=e+188|0;j=e+40|0;l=e+160|0;m=e;q2a(g,329672,0);x=0;pa(57,b>>>0<32|0,g|0,935,258380,258658);n=x;x=0;if(n&1){n=Hc()|0;o=M;K2a(g);p=o;q=n;Sc(q|0)}K2a(g);q2a(h,329672,0);x=0;pa(57,(b|0)!=0|0,h|0,936,258380,258658);g=x;x=0;if(g&1){g=Hc()|0;n=M;K2a(h);p=n;q=g;Sc(q|0)}K2a(h);h=c>>>0>1;do if(h){q=k[a>>2]|0;q2a(f,296239,35);x=0;pa(51,(c+-2|0)>>>0<16|0,f|0,217,295981,296275);g=x;x=0;if(g&1){g=Hc()|0;K2a(f);Sc(g|0)}else{K2a(f);Iia(q,c+142&255)|0;break}}while(0);q=(k[a>>2]|0)+48|0;k[f>>2]=2;k[f+8>>2]=b;g=f+12|0;k[g>>2]=k[i>>2];k[g+4>>2]=k[i+4>>2];k[g+8>>2]=k[i+8>>2];k[g+12>>2]=k[i+12>>2];k[g+16>>2]=k[i+16>>2];k[g+20>>2]=k[i+20>>2];k[g+24>>2]=k[i+24>>2];k[f+40>>2]=1;i=f+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=f+56|0;g=f+60|0;n=f+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,q|0,f|0)|0;i=x;x=0;if(i&1){i=Hc()|0;p=k[n>>2]|0;if(p)j0a(p);p=k[g>>2]|0;if(!p)Sc(i|0);j0a(p);Sc(i|0)}i=k[n>>2]|0;if(i)j0a(i);i=k[g>>2]|0;if(i)j0a(i);k[f>>2]=1;k[f+8>>2]=1;k[f+40>>2]=1;i=f+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=f+56|0;g=f+60|0;n=f+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,q|0,f|0)|0;q=x;x=0;if(q&1){q=Hc()|0;i=k[n>>2]|0;if(i)j0a(i);i=k[g>>2]|0;if(!i)Sc(q|0);j0a(i);Sc(q|0)}q=k[n>>2]|0;if(q)j0a(q);q=k[g>>2]|0;if(q)j0a(q);do if(h){q=k[a>>2]|0;q2a(f,296239,35);x=0;pa(51,(c+-2|0)>>>0<16|0,f|0,217,295981,296275);g=x;x=0;if(g&1){g=Hc()|0;K2a(f);Sc(g|0)}else{K2a(f);Iia(q,c+142&255)|0;break}}while(0);h=k[a>>2]|0;k[j>>2]=32;k[j+32>>2]=1;q=h+48|0;k[f>>2]=2;g=f+8|0;n=j;j=g+40|0;do{k[g>>2]=k[n>>2];g=g+4|0;n=n+4|0}while((g|0)<(j|0));i=f+48|0;k[i>>2]=-1;k[i+4>>2]=-1;i=f+56|0;p=f+60|0;o=f+72|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;x=0;Ta(539,q|0,f|0)|0;q=x;x=0;if(q&1){q=Hc()|0;i=k[o>>2]|0;if(i)j0a(i);i=k[p>>2]|0;if(!i)Sc(q|0);j0a(i);Sc(q|0)}q=k[o>>2]|0;if(q)j0a(q);q=k[p>>2]|0;if(q)j0a(q);q=c>>>0<16;q2a(f,295946,34);x=0;pa(51,q|0,f|0,210,295981,296025);p=x;x=0;if(p&1){p=Hc()|0;K2a(f);Sc(p|0)}K2a(f);p=c+128&255;o=(Iia(h,p)|0)+48|0;k[f>>2]=2;k[f+8>>2]=b+-1;b=f+12|0;k[b>>2]=k[l>>2];k[b+4>>2]=k[l+4>>2];k[b+8>>2]=k[l+8>>2];k[b+12>>2]=k[l+12>>2];k[b+16>>2]=k[l+16>>2];k[b+20>>2]=k[l+20>>2];k[b+24>>2]=k[l+24>>2];k[f+40>>2]=1;l=f+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=f+56|0;b=f+60|0;h=f+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,o|0,f|0)|0;l=x;x=0;if(l&1){l=Hc()|0;i=k[h>>2]|0;if(i)j0a(i);i=k[b>>2]|0;if(!i)Sc(l|0);j0a(i);Sc(l|0)}l=k[h>>2]|0;if(l)j0a(l);l=k[b>>2]|0;if(l)j0a(l);k[f>>2]=1;k[f+8>>2]=1;k[f+40>>2]=1;l=f+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=f+56|0;b=f+60|0;h=f+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,o|0,f|0)|0;l=x;x=0;if(l&1){l=Hc()|0;i=k[h>>2]|0;if(i)j0a(i);i=k[b>>2]|0;if(!i)Sc(l|0);j0a(i);Sc(l|0)}l=k[h>>2]|0;if(l)j0a(l);l=k[b>>2]|0;if(l)j0a(l);k[f>>2]=1;k[f+8>>2]=4;k[f+40>>2]=1;l=f+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=f+56|0;b=f+60|0;h=f+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;x=0;Ta(539,o|0,f|0)|0;o=x;x=0;if(o&1){o=Hc()|0;l=k[h>>2]|0;if(l)j0a(l);l=k[b>>2]|0;if(!l)Sc(o|0);j0a(l);Sc(o|0)}o=k[h>>2]|0;if(o)j0a(o);o=k[b>>2]|0;if(o)j0a(o);o=k[a>>2]|0;b=(d+-1|0)>>>0<16;q2a(f,296239,35);x=0;pa(51,b|0,f|0,217,295981,296275);h=x;x=0;if(h&1){h=Hc()|0;K2a(f);Sc(h|0)}K2a(f);h=d+143&255;l=Iia(o,h)|0;q2a(f,295946,34);x=0;pa(51,d>>>0<16|0,f|0,210,295981,296025);o=x;x=0;if(o&1){o=Hc()|0;K2a(f);Sc(o|0)}K2a(f);o=Iia(l,d+128&255)|0;k[f>>2]=1;k[f+8>>2]=1;k[f+40>>2]=1;d=f+48|0;k[d>>2]=-1;k[d+4>>2]=-1;d=f+56|0;l=f+60|0;i=f+72|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;x=0;Ta(539,o+48|0,f|0)|0;d=x;x=0;if(d&1){d=Hc()|0;s=k[i>>2]|0;if(s)j0a(s);s=k[l>>2]|0;if(!s)Sc(d|0);j0a(s);Sc(d|0)}d=k[i>>2]|0;if(d)j0a(d);d=k[l>>2]|0;if(d)j0a(d);q2a(f,296239,35);x=0;pa(51,b|0,f|0,217,295981,296275);b=x;x=0;if(b&1){b=Hc()|0;K2a(f);Sc(b|0)}K2a(f);Iia(o,h)|0;h=k[a>>2]|0;k[m>>2]=1;k[m+32>>2]=1;o=h+48|0;k[f>>2]=2;g=f+8|0;n=m;j=g+40|0;do{k[g>>2]=k[n>>2];g=g+4|0;n=n+4|0}while((g|0)<(j|0));n=f+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=f+56|0;g=f+60|0;j=f+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,o|0,f|0)|0;n=x;x=0;if(n&1){n=Hc()|0;m=k[j>>2]|0;if(m)j0a(m);m=k[g>>2]|0;if(!m)Sc(n|0);j0a(m);Sc(n|0)}n=k[j>>2]|0;if(n)j0a(n);n=k[g>>2]|0;if(n)j0a(n);k[f>>2]=1;k[f+8>>2]=3;k[f+40>>2]=1;n=f+48|0;k[n>>2]=-1;k[n+4>>2]=-1;n=f+56|0;g=f+60|0;j=f+72|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;x=0;Ta(539,o|0,f|0)|0;o=x;x=0;if(o&1){o=Hc()|0;n=k[j>>2]|0;if(n)j0a(n);n=k[g>>2]|0;if(!n)Sc(o|0);j0a(n);Sc(o|0)}o=k[j>>2]|0;if(o)j0a(o);o=k[g>>2]|0;if(o)j0a(o);o=k[a>>2]|0;if((c|0)==1){k[f>>2]=1;k[f+8>>2]=2;k[f+40>>2]=1;a=f+48|0;k[a>>2]=-1;k[a+4>>2]=-1;a=f+56|0;g=f+60|0;j=f+72|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;x=0;Ta(539,o+48|0,f|0)|0;a=x;x=0;if(a&1){a=Hc()|0;n=k[j>>2]|0;if(n)j0a(n);n=k[g>>2]|0;if(!n)Sc(a|0);j0a(n);Sc(a|0)}else{a=k[j>>2]|0;if(a)j0a(a);a=k[g>>2]|0;if(a)j0a(a);r=e;return}}q2a(f,295946,34);x=0;pa(51,q|0,f|0,210,295981,296025);q=x;x=0;if(q&1){q=Hc()|0;K2a(f);Sc(q|0)}K2a(f);q=Iia(o,p)|0;k[f>>2]=1;k[f+8>>2]=2;k[f+40>>2]=1;p=f+48|0;k[p>>2]=-1;k[p+4>>2]=-1;p=f+56|0;o=f+60|0;a=f+72|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;x=0;Ta(539,q+48|0,f|0)|0;p=x;x=0;if(p&1){p=Hc()|0;g=k[a>>2]|0;if(g)j0a(g);g=k[o>>2]|0;if(!g)Sc(p|0);j0a(g);Sc(p|0)}p=k[a>>2]|0;if(p)j0a(p);p=k[o>>2]|0;if(p)j0a(p);q2a(f,296239,35);x=0;pa(51,(c+-1|0)>>>0<16|0,f|0,217,295981,296275);p=x;x=0;if(p&1){p=Hc()|0;K2a(f);Sc(p|0)}K2a(f);p=Iia(q,c+143&255)|0;k[f>>2]=1;k[f+8>>2]=80;k[f+40>>2]=1;c=f+48|0;k[c>>2]=-1;k[c+4>>2]=-1;c=f+56|0;q=f+60|0;o=f+72|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;x=0;Ta(539,p+48|0,f|0)|0;f=x;x=0;if(f&1){f=Hc()|0;p=k[o>>2]|0;if(p)j0a(p);p=k[q>>2]|0;if(!p)Sc(f|0);j0a(p);Sc(f|0)}else{f=k[o>>2]|0;if(f)j0a(f);f=k[q>>2]|0;if(f)j0a(f);r=e;return}}function Bia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;c=r;r=r+1648|0;d=c+1520|0;e=c+1440|0;f=c+1360|0;g=c+1280|0;h=c+1200|0;i=c+1120|0;j=c+1040|0;l=c+960|0;m=c+880|0;n=c+800|0;o=c+720|0;p=c+640|0;q=c+560|0;s=c+480|0;t=c+400|0;u=c+320|0;v=c+240|0;w=c+120|0;y=c+40|0;z=c+200|0;A=c+1632|0;B=c+1616|0;C=c;D=c+1600|0;E=(k[a>>2]|0)+136|0;F=(k[E>>2]|0)>-1;q2a(d,329672,0);x=0;pa(57,F|0,d|0,57,268696,268754);F=x;x=0;if(F&1){F=Hc()|0;K2a(d);Sc(F|0)}K2a(d);F=k[E>>2]|0;if((Vf[k[k[b>>2]>>2]&1023](b)|0)==12){E=k[a>>2]|0;k[d>>2]=1;k[d+8>>2]=80;k[d+40>>2]=1;G=d+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=d+56|0;H=d+60|0;I=d+72|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;x=0;Ta(539,E+48|0,d|0)|0;E=x;x=0;if(E&1){E=Hc()|0;G=k[I>>2]|0;if(G)j0a(G);G=k[H>>2]|0;if(!G)Sc(E|0);j0a(G);Sc(E|0)}else{E=k[I>>2]|0;if(E)j0a(E);E=k[H>>2]|0;if(E)j0a(E);r=c;return}}Mia(v,k[a>>2]|0);E=k[a>>2]|0;k[u>>2]=1;k[u+8>>2]=145;k[u+40>>2]=1;H=u+48|0;k[H>>2]=-1;k[H+4>>2]=-1;H=u+56|0;I=u+60|0;G=u+72|0;J=E+48|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[H+16>>2]=0;x=0;Ta(539,J|0,u|0)|0;u=x;x=0;do if(u&1){H=Hc()|0;E=M;K=k[G>>2]|0;if(K)j0a(K);K=k[I>>2]|0;if(!K){L=E;N=H;O=171}else{j0a(K);L=E;N=H;O=171}}else{H=k[G>>2]|0;if(H)j0a(H);H=k[I>>2]|0;if(H)j0a(H);k[t>>2]=1;k[t+8>>2]=144;k[t+40>>2]=1;H=t+48|0;k[H>>2]=-1;k[H+4>>2]=-1;H=t+56|0;E=t+60|0;K=t+72|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[H+16>>2]=0;x=0;Ta(539,J|0,t|0)|0;H=x;x=0;if(H&1){H=Hc()|0;P=M;Q=k[K>>2]|0;if(Q)j0a(Q);Q=k[E>>2]|0;if(!Q){L=P;N=H;O=171;break}j0a(Q);L=P;N=H;O=171;break}H=k[K>>2]|0;if(H)j0a(H);H=k[E>>2]|0;if(H)j0a(H);x=0;xa(821,w|0,k[a>>2]|0);H=x;x=0;if(H&1){H=Hc()|0;L=M;N=H;O=171;break}x=0;Ta(539,(k[a>>2]|0)+48|0,w|0)|0;H=x;x=0;do if(H&1){E=Hc()|0;R=M;S=E;O=173}else{E=k[a>>2]|0;k[s>>2]=1;k[s+8>>2]=128;k[s+40>>2]=1;K=s+48|0;k[K>>2]=-1;k[K+4>>2]=-1;K=s+56|0;P=s+60|0;Q=s+72|0;T=E+48|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;x=0;Ta(539,T|0,s|0)|0;K=x;x=0;if(K&1){K=Hc()|0;E=M;U=k[Q>>2]|0;if(U)j0a(U);U=k[P>>2]|0;if(!U){R=E;S=K;O=173;break}j0a(U);R=E;S=K;O=173;break}K=k[Q>>2]|0;if(K)j0a(K);K=k[P>>2]|0;if(K)j0a(K);k[q>>2]=1;k[q+8>>2]=130;k[q+40>>2]=1;K=q+48|0;k[K>>2]=-1;k[K+4>>2]=-1;K=q+56|0;P=q+60|0;Q=q+72|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;x=0;Ta(539,T|0,q|0)|0;K=x;x=0;if(K&1){K=Hc()|0;E=M;U=k[Q>>2]|0;if(U)j0a(U);U=k[P>>2]|0;if(!U){R=E;S=K;O=173;break}j0a(U);R=E;S=K;O=173;break}K=k[Q>>2]|0;if(K)j0a(K);K=k[P>>2]|0;if(K)j0a(K);k[p>>2]=1;k[p+8>>2]=17;k[p+40>>2]=1;K=p+48|0;k[K>>2]=-1;k[K+4>>2]=-1;K=p+56|0;P=p+60|0;Q=p+72|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;x=0;Ta(539,T|0,p|0)|0;K=x;x=0;if(K&1){K=Hc()|0;E=M;U=k[Q>>2]|0;if(U)j0a(U);U=k[P>>2]|0;if(!U){R=E;S=K;O=173;break}j0a(U);R=E;S=K;O=173;break}K=k[Q>>2]|0;if(K)j0a(K);K=k[P>>2]|0;if(K)j0a(K);k[o>>2]=1;k[o+8>>2]=21;k[o+40>>2]=1;K=o+48|0;k[K>>2]=-1;k[K+4>>2]=-1;K=o+56|0;P=o+60|0;Q=o+72|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;x=0;Ta(539,T|0,o|0)|0;T=x;x=0;if(T&1){T=Hc()|0;K=M;E=k[Q>>2]|0;if(E)j0a(E);E=k[P>>2]|0;if(!E){R=K;S=T;O=173;break}j0a(E);R=K;S=T;O=173;break}T=k[Q>>2]|0;if(T)j0a(T);T=k[P>>2]|0;if(T)j0a(T);T=(k[a>>2]|0)+48|0;P=k[T>>2]|0;k[T>>2]=P+1;k[y>>2]=8;k[y+8>>2]=P;k[y+40>>2]=1;P=y+48|0;k[P>>2]=-1;k[P+4>>2]=-1;P=y+56|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[P+16>>2]=0;x=0;fb(315,n|0,(k[a>>2]|0)+48|0,y|0);P=x;x=0;do if(P&1)O=174;else{T=k[n+72>>2]|0;if(T)j0a(T);T=k[n+60>>2]|0;if(T)j0a(T);T=k[a>>2]|0;k[z>>2]=0;k[z+32>>2]=1;Q=T+48|0;k[m>>2]=2;T=m+8|0;K=z;E=T+40|0;do{k[T>>2]=k[K>>2];T=T+4|0;K=K+4|0}while((T|0)<(E|0));U=m+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=m+56|0;V=m+60|0;W=m+72|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,Q|0,m|0)|0;U=x;x=0;if(U&1){U=Hc()|0;X=M;Y=k[W>>2]|0;if(Y)j0a(Y);Y=k[V>>2]|0;if(!Y){Z=X;_=U;O=175;break}j0a(Y);Z=X;_=U;O=175;break}U=k[W>>2]|0;if(U)j0a(U);U=k[V>>2]|0;if(U)j0a(U);x=0;fb(317,A|0,k[a>>2]|0,b|0);U=x;x=0;if(U&1){O=174;break}k[B>>2]=-1;k[B+4>>2]=-1;k[B+8>>2]=0;U=B+12|0;k[U>>2]=0;x=0;fb(123,A|0,B|0,0);V=x;x=0;if(V&1){V=Hc()|0;W=M;X=k[U>>2]|0;if(!X){$=W;aa=V;break}j0a(X);$=W;aa=V;break}V=k[U>>2]|0;if(V)j0a(V);V=k[a>>2]|0;k[l>>2]=1;k[l+8>>2]=80;k[l+40>>2]=1;U=l+48|0;k[U>>2]=-1;k[U+4>>2]=-1;U=l+56|0;W=l+60|0;X=l+72|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[U+16>>2]=0;x=0;Ta(539,V+48|0,l|0)|0;V=x;x=0;if(V&1){V=Hc()|0;U=M;Y=k[X>>2]|0;if(Y)j0a(Y);Y=k[W>>2]|0;if(!Y){Z=U;_=V;O=175;break}j0a(Y);Z=U;_=V;O=175;break}V=k[X>>2]|0;if(V)j0a(V);V=k[W>>2]|0;if(V)j0a(V);V=k[a>>2]|0;x=0;xa(k[(k[b>>2]|0)+40>>2]|0,C|0,b|0);W=x;x=0;if(W&1){O=174;break}W=V+48|0;k[j>>2]=2;T=j+8|0;K=C;E=T+40|0;do{k[T>>2]=k[K>>2];T=T+4|0;K=K+4|0}while((T|0)<(E|0));K=j+48|0;k[K>>2]=-1;k[K+4>>2]=-1;K=j+56|0;T=j+60|0;E=j+72|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;x=0;Ta(539,W|0,j|0)|0;K=x;x=0;if(K&1){K=Hc()|0;Q=M;V=k[E>>2]|0;if(V)j0a(V);V=k[T>>2]|0;if(!V){Z=Q;_=K;O=175;break}j0a(V);Z=Q;_=K;O=175;break}K=k[E>>2]|0;if(K)j0a(K);K=k[T>>2]|0;if(K)j0a(K);k[i>>2]=1;k[i+8>>2]=1;k[i+40>>2]=1;K=i+48|0;k[K>>2]=-1;k[K+4>>2]=-1;K=i+56|0;T=i+60|0;E=i+72|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;x=0;Ta(539,W|0,i|0)|0;K=x;x=0;if(K&1){K=Hc()|0;Q=M;V=k[E>>2]|0;if(V)j0a(V);V=k[T>>2]|0;if(!V){Z=Q;_=K;O=175;break}j0a(V);Z=Q;_=K;O=175;break}K=k[E>>2]|0;if(K)j0a(K);K=k[T>>2]|0;if(K)j0a(K);x=0;fb(314,h|0,(k[a>>2]|0)+48|0,w|0);K=x;x=0;if(K&1){O=174;break}K=k[h+72>>2]|0;if(K)j0a(K);K=k[h+60>>2]|0;if(K)j0a(K);x=0;Ta(539,(k[a>>2]|0)+48|0,y|0)|0;K=x;x=0;if(K&1){O=174;break}K=k[a>>2]|0;k[g>>2]=1;k[g+8>>2]=80;k[g+40>>2]=1;T=g+48|0;k[T>>2]=-1;k[T+4>>2]=-1;T=g+56|0;E=g+60|0;Q=g+72|0;V=K+48|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[T+16>>2]=0;x=0;Ta(539,V|0,g|0)|0;T=x;x=0;if(T&1){T=Hc()|0;K=M;X=k[Q>>2]|0;if(X)j0a(X);X=k[E>>2]|0;if(!X){Z=K;_=T;O=175;break}j0a(X);Z=K;_=T;O=175;break}T=k[Q>>2]|0;if(T)j0a(T);T=k[E>>2]|0;if(T)j0a(T);k[f>>2]=1;k[f+8>>2]=144;k[f+40>>2]=1;T=f+48|0;k[T>>2]=-1;k[T+4>>2]=-1;T=f+56|0;E=f+60|0;Q=f+72|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[T+16>>2]=0;x=0;Ta(539,V|0,f|0)|0;V=x;x=0;if(V&1){V=Hc()|0;T=M;K=k[Q>>2]|0;if(K)j0a(K);K=k[E>>2]|0;if(!K){Z=T;_=V;O=175;break}j0a(K);Z=T;_=V;O=175;break}V=k[Q>>2]|0;if(V)j0a(V);V=k[E>>2]|0;if(V)j0a(V);V=k[a>>2]|0;k[e>>2]=1;k[e+8>>2]=86;k[e+40>>2]=1;E=e+48|0;k[E>>2]=-1;k[E+4>>2]=-1;E=e+56|0;Q=e+60|0;T=e+72|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[E+16>>2]=0;x=0;Ta(539,V+48|0,e|0)|0;V=x;x=0;if(V&1){V=Hc()|0;E=M;K=k[T>>2]|0;if(K)j0a(K);K=k[Q>>2]|0;if(!K){Z=E;_=V;O=175;break}j0a(K);Z=E;_=V;O=175;break}V=k[T>>2]|0;if(V)j0a(V);V=k[Q>>2]|0;if(V)j0a(V);x=0;Ta(539,(k[a>>2]|0)+48|0,v|0)|0;V=x;x=0;if(V&1){O=174;break}V=(k[a>>2]|0)+136|0;Q=k[V>>2]|0;x=0;fb(140,d|0,329672,0);T=x;x=0;if(T&1){O=174;break}x=0;pa(57,(Q|0)>-1|0,d|0,57,268696,268754);Q=x;x=0;if(Q&1){Q=Hc()|0;T=M;K2a(d);Z=T;_=Q;O=175;break}K2a(d);Q=k[V>>2]|0;x=0;fb(140,D|0,329672,0);V=x;x=0;if(V&1){O=174;break}x=0;pa(57,(Q|0)==(F+-1|0)|0,D|0,771,258380,258758);Q=x;x=0;if(Q&1){Q=Hc()|0;V=M;K2a(D);$=V;aa=Q;break}K2a(D);Q=k[y+72>>2]|0;if(Q)j0a(Q);Q=k[y+60>>2]|0;if(Q)j0a(Q);Q=k[w+72>>2]|0;if(Q)j0a(Q);Q=k[w+60>>2]|0;if(Q)j0a(Q);Q=k[v+72>>2]|0;if(Q)j0a(Q);Q=k[v+60>>2]|0;if(Q)j0a(Q);r=c;return}while(0);if((O|0)==174){P=Hc()|0;Z=M;_=P;O=175}if((O|0)==175){$=Z;aa=_}P=k[y+72>>2]|0;if(P)j0a(P);P=k[y+60>>2]|0;if(!P){ba=$;ca=aa;break}j0a(P);ba=$;ca=aa}while(0);if((O|0)==173){ba=R;ca=S}H=k[w+72>>2]|0;if(H)j0a(H);H=k[w+60>>2]|0;if(!H){da=ba;ea=ca}else{j0a(H);da=ba;ea=ca}}while(0);if((O|0)==171){da=L;ea=N}N=k[v+72>>2]|0;if(N)j0a(N);N=k[v+60>>2]|0;if(!N)Sc(ea|0);j0a(N);Sc(ea|0)} -function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+16|0;d=c+4|0;e=c;if(i[b>>0]|0){f=k[b+4>>2]|0;r=c;return f|0}k[d>>2]=0;g=d+4|0;k[g>>2]=0;k[d+8>>2]=0;h=k[b+88>>2]|0;j=k[b+92>>2]|0;a:do if((h|0)==(j|0))l=5;else{m=d+8|0;n=h;while(1){x=0;o=Ta(548,a|0,n|0)|0;p=x;x=0;if(p&1)break;k[e>>2]=o;p=k[g>>2]|0;if(p>>>0>=(k[m>>2]|0)>>>0){x=0;xa(701,d|0,e|0);q=x;x=0;if(q&1)break}else{k[p>>2]=o;k[g>>2]=p+4}n=n+104|0;if((n|0)==(j|0)){l=5;break a}}n=Hc()|0;s=n;t=M}while(0);do if((l|0)==5){x=0;j=Va(93,a|0,b+8|0,d|0,1,0)|0;e=x;x=0;if(e&1){e=Hc()|0;s=e;t=M;break}e=k[d>>2]|0;h=e;if(e){n=k[g>>2]|0;if((n|0)!=(e|0))k[g>>2]=n+(~((n+-4-h|0)>>>2)<<2);OBa(e)}f=j;r=c;return f|0}while(0);f=k[d>>2]|0;if(!f)Sc(s|0);d=k[g>>2]|0;if((d|0)!=(f|0))k[g>>2]=d+(~((d+-4-f|0)>>>2)<<2);OBa(f);Sc(s|0);return 0}function hF(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=b&255;k[a+40>>2]=1;xF(a+48|0,c);k[a+60>>2]=0;k[a+64>>2]=0;return}function iF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=k[a>>2]|0;if(!c){d=1;return d|0}if(!b){d=0;return d|0}if((c|0)!=(k[b>>2]|0)){d=0;return d|0}if(!(i[a+4>>0]|0)){d=1;return d|0}c=k[a+40>>2]|0;if((c|0)!=(k[b+40>>2]|0)){d=0;return d|0}e=a+8|0;a=e+(c<<2)|0;if((e|0)==(a|0)){d=1;return d|0}c=e;e=b+8|0;while(1){if((k[c>>2]|0)!=(k[e>>2]|0)){d=0;f=10;break}c=c+4|0;if((c|0)==(a|0)){d=1;f=10;break}else e=e+4|0}if((f|0)==10)return d|0;return 0}function jF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;k[a>>2]=k[b>>2];d=a+8|0;e=b+8|0;b=d+40|0;do{k[d>>2]=k[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(b|0));e=c;d=k[e+4>>2]|0;b=a+48|0;k[b>>2]=k[e>>2];k[b+4>>2]=d;k[a+56>>2]=k[c+8>>2];d=k[c+12>>2]|0;k[a+60>>2]=d;if(!d){f=a+64|0;k[f>>2]=0;g=a+68|0;k[g>>2]=0;h=a+72|0;k[h>>2]=0;return}h0a(d);f=a+64|0;k[f>>2]=0;g=a+68|0;k[g>>2]=0;h=a+72|0;k[h>>2]=0;return}function kF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+208|0;d=c+192|0;e=c+48|0;f=c+16|0;g=c;h=e+64|0;j=e+8|0;k[j>>2]=26684;l=e+12|0;k[e>>2]=26724;k[h>>2]=26744;k[e+4>>2]=0;x=0;xa(582,e+64|0,l|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;o=m;mab(h);Sc(o|0)}k[e+136>>2]=0;k[e+140>>2]=-1;k[e>>2]=26664;k[e+64>>2]=26704;k[j>>2]=26684;x=0;va(1449,l|0);j=x;x=0;do if(j&1){m=Hc()|0;p=M;q=m}else{k[l>>2]=20392;m=e+44|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+60>>2]=24;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,l|0,d|0);s=x;x=0;if(s&1){s=Hc()|0;t=M;K2a(d);K2a(m);obb(l);p=t;q=s;break}K2a(d);a:do switch(k[b>>2]|0){case 1:{x=0;xa(692,f|0,k[b+8>>2]&255|0);s=x;x=0;if(s&1)u=14;else{s=e+8|0;t=i[f>>0]|0;v=(t&1)==0;x=0;Fa(92,s|0,(v?f+1|0:k[f+8>>2]|0)|0,(v?(t&255)>>>1:k[f+4>>2]|0)|0)|0;t=x;x=0;if(!(t&1)){K2a(f);u=24;break a}t=Hc()|0;v=M;K2a(f);w=t;y=v;z=s;k[e>>2]=26664;k[h>>2]=26704;k[z>>2]=26684;k[l>>2]=20392;K2a(m);obb(l);mab(h);Sc(w|0)}break}case 2:{x=0;s=Fa(92,e+8|0,218215,5)|0;v=x;x=0;if(!(v&1)?(v=s+(k[(k[s>>2]|0)+-12>>2]|0)+4|0,k[v>>2]=k[v>>2]&-75|8,x=0,Ta(541,s|0,b+8|0)|0,s=x,x=0,!(s&1)):0)u=24;else u=14;break}case 0:{x=0;Fa(92,e+8|0,218221,3)|0;s=x;x=0;if(s&1)u=14;else u=24;break}default:{x=0;s=Fa(92,e+8|0,218225,2)|0;v=x;x=0;if(((!(v&1)?(v=s+(k[(k[s>>2]|0)+-12>>2]|0)+4|0,k[v>>2]=k[v>>2]&-75|2,x=0,v=Ta(477,s|0,k[b>>2]|0)|0,s=x,x=0,!(s&1)):0)?(x=0,s=Fa(92,v|0,218228,3)|0,v=x,x=0,!(v&1)):0)?(v=s+(k[(k[s>>2]|0)+-12>>2]|0)+4|0,k[v>>2]=k[v>>2]&-75|8,x=0,Ta(541,s|0,b+8|0)|0,s=x,x=0,!(s&1)):0)u=24;else u=14}}while(0);b:do if((u|0)==24){if((i[b+4>>0]|0)==0?(x=0,Fa(92,e+8|0,218232,2)|0,s=x,x=0,s&1):0){u=14;break}s=b+60|0;v=e+8|0;if(k[s>>2]|0){x=0;t=Fa(92,v|0,316822,1)|0;A=x;x=0;if(A&1){u=14;break}A=t+(k[(k[t>>2]|0)+-12>>2]|0)+4|0;k[A>>2]=k[A>>2]&-75|2;x=0;A=Ta(543,t|0,k[s>>2]|0)|0;s=x;x=0;if(s&1){u=14;break}x=0;Fa(92,A|0,316824,1)|0;A=x;x=0;if(A&1){u=14;break}}x=0;Fa(92,v|0,300108,1)|0;A=x;x=0;if(!(A&1)){A=k[b+48>>2]|0;s=k[b+52>>2]|0;c:do if((A|0)!=(s|0)){t=g+8|0;B=g+1|0;C=g+4|0;D=A;while(1){x=0;xa(714,g|0,D|0);E=x;x=0;if(E&1){u=13;break}E=i[g>>0]|0;F=(E&1)==0;x=0;G=Fa(92,v|0,(F?B:k[t>>2]|0)|0,(F?(E&255)>>>1:k[C>>2]|0)|0)|0;E=x;x=0;if(E&1)break;x=0;Fa(92,G|0,300110,2)|0;G=x;x=0;if(G&1)break;K2a(g);D=D+72|0;if((D|0)==(s|0))break c}if((u|0)==13){D=Hc()|0;H=v;I=D;J=M;break b}D=Hc()|0;C=M;K2a(g);w=D;y=C;z=v;k[e>>2]=26664;k[h>>2]=26704;k[z>>2]=26684;k[l>>2]=20392;K2a(m);obb(l);mab(h);Sc(w|0)}while(0);x=0;Fa(92,v|0,300015,1)|0;s=x;x=0;if(!(s&1)?(x=0,xa(584,a|0,l|0),s=x,x=0,!(s&1)):0){k[e>>2]=26664;k[h>>2]=26704;k[v>>2]=26684;k[l>>2]=20392;K2a(m);obb(l);mab(h);r=c;return}else u=14}else u=14}while(0);if((u|0)==14){s=Hc()|0;H=e+8|0;I=s;J=M}w=I;y=J;z=H;k[e>>2]=26664;k[h>>2]=26704;k[z>>2]=26684;k[l>>2]=20392;K2a(m);obb(l);mab(h);Sc(w|0)}while(0);n=p;o=q;mab(h);Sc(o|0)}function lF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;b=r;r=r+48|0;c=b+36|0;d=b+24|0;e=b+12|0;f=b;g=a+60|0;h=(k[g>>2]|0)!=0;q2a(d,329672,0);x=0;pa(49,h|0,d|0,476,217974,218235);h=x;x=0;if(h&1){h=Hc()|0;i=M;K2a(d);j=i;l=h;Sc(l|0)}K2a(d);d=a+64|0;a=(k[d>>2]|0)!=0;q2a(e,329672,0);x=0;pa(49,a|0,e|0,477,217974,218235);a=x;x=0;if(a&1){a=Hc()|0;h=M;K2a(e);j=h;l=a;Sc(l|0)}K2a(e);e=k[d>>2]|0;a=e+4|0;h=k[a>>2]|0;do if(h){i=k[g>>2]|0;m=h;while(1){n=k[m+16>>2]|0;if(i>>>0>>0){o=k[m>>2]|0;if(!o){p=m;q=m;s=7;break}else t=o}else{if(n>>>0>=i>>>0){u=m;s=13;break}n=m+4|0;o=k[n>>2]|0;if(!o){v=n;w=m;s=11;break}else t=o}m=t}if((s|0)==7){k[c>>2]=q;y=p;z=i;A=q;s=14;break}else if((s|0)==11){k[c>>2]=w;y=v;z=i;A=w;s=14;break}else if((s|0)==13){k[c>>2]=u;if(!u){y=c;z=i;A=u;s=14;break}else{B=u;break}}}else{k[c>>2]=a;y=a;z=k[g>>2]|0;A=a;s=14}while(0);if((s|0)==14){a=KBa(24)|0;k[a+16>>2]=z;k[a+20>>2]=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=A;k[y>>2]=a;A=k[k[e>>2]>>2]|0;if(!A)C=a;else{k[e>>2]=A;C=k[y>>2]|0}ui(k[e+4>>2]|0,C);C=e+8|0;k[C>>2]=(k[C>>2]|0)+1;B=a}a=(k[B+20>>2]|0)!=0;q2a(f,329672,0);x=0;pa(49,a|0,f|0,478,217974,218235);a=x;x=0;if(a&1){a=Hc()|0;B=M;K2a(f);j=B;l=a;Sc(l|0)}K2a(f);f=k[d>>2]|0;d=f+4|0;l=k[d>>2]|0;do if(l){a=k[g>>2]|0;B=l;while(1){j=k[B+16>>2]|0;if(a>>>0>>0){C=k[B>>2]|0;if(!C){D=B;E=B;s=22;break}else F=C}else{if(j>>>0>=a>>>0){G=B;s=28;break}j=B+4|0;C=k[j>>2]|0;if(!C){H=j;I=B;s=26;break}else F=C}B=F}if((s|0)==22){k[c>>2]=E;J=D;K=a;L=E;break}else if((s|0)==26){k[c>>2]=I;J=H;K=a;L=I;break}else if((s|0)==28){k[c>>2]=G;if(!G){J=c;K=a;L=G;break}else N=G;O=N+20|0;P=k[O>>2]|0;r=b;return P|0}}else{k[c>>2]=d;J=d;K=k[g>>2]|0;L=d}while(0);d=KBa(24)|0;k[d+16>>2]=K;k[d+20>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=L;k[J>>2]=d;L=k[k[f>>2]>>2]|0;if(!L)Q=d;else{k[f>>2]=L;Q=k[J>>2]|0}ui(k[f+4>>2]|0,Q);Q=f+8|0;k[Q>>2]=(k[Q>>2]|0)+1;N=d;O=N+20|0;P=k[O>>2]|0;r=b;return P|0}function mF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;d=r;r=r+208|0;e=d+197|0;f=d+196|0;g=d+144|0;h=d+104|0;j=d+184|0;l=d;i[a>>0]=0;m=a+4|0;k[m>>2]=-1;k[g>>2]=0;k[g+32>>2]=1;n=a+8|0;k[n>>2]=0;o=a+16|0;p=o;q=g;g=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(g|0));s=a+56|0;k[s>>2]=-1;k[s+4>>2]=-1;s=a+64|0;t=a+68|0;u=a+72|0;v=a+80|0;w=a+88|0;k[w>>2]=0;y=a+92|0;k[y>>2]=0;k[a+96>>2]=0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;if(!(k[b+60>>2]|0)){i[a>>0]=0;z=k[b>>2]|0;p=h;q=b+8|0;g=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(g|0));A=c;B=k[A>>2]|0;C=k[A+4>>2]|0;A=k[c+8>>2]|0;D=k[c+12>>2]|0;E=D;if(!D)F=0;else{h0a(D);F=k[t>>2]|0}k[n>>2]=z;p=o;q=h;g=p+36|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(g|0));k[a+56>>2]=B;k[a+60>>2]=C;k[s>>2]=A;k[t>>2]=E;if(F)j0a(F);k[u>>2]=0;k[a+76>>2]=0;u=k[v>>2]|0;k[v>>2]=0;if(!u)G=11;else{j0a(u);G=11}}else{i[a>>0]=1;x=0;u=Ba(590,b|0)|0;F=x;x=0;if(F&1)G=4;else{k[m>>2]=k[u>>2];G=11}}a:do if((G|0)==11){x=0;xa(712,j|0,b+48|0);u=x;x=0;if(u&1)G=4;else{u=k[j>>2]|0;m=j+4|0;F=k[m>>2]|0;do if((u|0)==(F|0))H=u;else{E=a+96|0;A=l+8|0;s=l+16|0;C=l+56|0;B=l+60|0;h=l+64|0;o=l+68|0;z=l+72|0;n=l+76|0;D=l+80|0;I=l+88|0;J=l+92|0;K=l+96|0;L=l+88|0;N=u;while(1){x=0;fb(213,l|0,N|0,c|0);O=x;x=0;if(O&1){G=39;break}O=k[y>>2]|0;if(O>>>0>=(k[E>>2]|0)>>>0){x=0;xa(715,w|0,l|0);P=x;x=0;if(P&1){G=40;break}P=k[L>>2]|0;if(P){wF(L,P);OBa(k[L>>2]|0)}}else{P=l;Q=k[P+4>>2]|0;R=O;k[R>>2]=k[P>>2];k[R+4>>2]=Q;k[O+8>>2]=k[A>>2];p=O+16|0;q=s;g=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(g|0));k[O+56>>2]=k[C>>2];k[O+60>>2]=k[B>>2];k[O+64>>2]=k[h>>2];k[O+68>>2]=k[o>>2];k[h>>2]=0;k[o>>2]=0;k[O+72>>2]=k[z>>2];k[O+76>>2]=k[n>>2];k[O+80>>2]=k[D>>2];k[n>>2]=0;k[D>>2]=0;Q=O+88|0;k[Q>>2]=0;R=O+92|0;k[R>>2]=0;k[O+96>>2]=0;k[Q>>2]=k[I>>2];k[R>>2]=k[J>>2];k[O+96>>2]=k[K>>2];k[K>>2]=0;k[J>>2]=0;k[I>>2]=0;k[y>>2]=(k[y>>2]|0)+104}R=k[D>>2]|0;if(R)j0a(R);R=k[o>>2]|0;if(R)j0a(R);N=N+72|0;if((N|0)==(F|0)){G=14;break}}if((G|0)==14){H=k[j>>2]|0;break}else if((G|0)==39){N=Hc()|0;S=N;T=M}else if((G|0)==40){N=Hc()|0;I=M;J=k[L>>2]|0;if(J){wF(L,J);OBa(k[L>>2]|0)}J=k[D>>2]|0;if(J)j0a(J);J=k[o>>2]|0;if(!J){S=N;T=I}else{j0a(J);S=N;T=I}}I=k[j>>2]|0;if(!I){U=S;V=T;break a}N=k[m>>2]|0;if((N|0)==(I|0))W=I;else{J=N;while(1){N=J+-72|0;k[m>>2]=N;K=J+-24|0;n=k[K>>2]|0;if(!n)X=N;else{N=J+-20|0;z=k[N>>2]|0;if((z|0)==(n|0))Y=n;else{h=J+-16|0;B=z;do{z=B+-72|0;k[N>>2]=z;i[e>>0]=i[f>>0]|0;uF(e,h,z);B=k[N>>2]|0}while((B|0)!=(n|0));Y=k[K>>2]|0}OBa(Y);X=k[m>>2]|0}if((X|0)==(I|0))break;else J=X}W=k[j>>2]|0}OBa(W);U=S;V=T;break a}while(0);if(!H){r=d;return}F=k[m>>2]|0;if((F|0)==(H|0))Z=H;else{u=F;while(1){F=u+-72|0;k[m>>2]=F;J=u+-24|0;I=k[J>>2]|0;if(!I)_=F;else{F=u+-20|0;o=k[F>>2]|0;if((o|0)==(I|0))$=I;else{D=u+-16|0;L=o;do{o=L+-72|0;k[F>>2]=o;i[e>>0]=i[f>>0]|0;uF(e,D,o);L=k[F>>2]|0}while((L|0)!=(I|0));$=k[J>>2]|0}OBa($);_=k[m>>2]|0}if((_|0)==(H|0))break;else u=_}Z=k[j>>2]|0}OBa(Z);r=d;return}}while(0);if((G|0)==4){G=Hc()|0;U=G;V=M}V=k[w>>2]|0;if(V){wF(w,V);OBa(k[w>>2]|0)}w=k[v>>2]|0;if(w)j0a(w);w=k[t>>2]|0;if(!w)Sc(U|0);j0a(w);Sc(U|0)}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+176|0;d=c+160|0;e=c+16|0;f=c;g=e+64|0;h=e+8|0;k[h>>2]=26684;j=e+12|0;k[e>>2]=26724;k[g>>2]=26744;k[e+4>>2]=0;x=0;xa(582,e+64|0,j|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;mab(g);Sc(n|0)}k[e+136>>2]=0;k[e+140>>2]=-1;k[e>>2]=26664;k[e+64>>2]=26704;k[h>>2]=26684;x=0;va(1449,j|0);h=x;x=0;do if(h&1){l=Hc()|0;o=M;p=l}else{k[j>>2]=20392;l=e+44|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+60>>2]=24;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,j|0,d|0);q=x;x=0;if(q&1){q=Hc()|0;s=M;K2a(d);K2a(l);obb(j);o=s;p=q;break}K2a(d);q=e+8|0;if(!(i[b>>0]|0)){x=0;Ta(551,q|0,b+8|0)|0;s=x;x=0;if(s&1)t=12;else t=15}else{x=0;Ta(543,q|0,k[b+4>>2]|0)|0;s=x;x=0;if(s&1)t=12;else t=15}a:do if((t|0)==15){x=0;Fa(92,q|0,300108,1)|0;s=x;x=0;if(!(s&1)){s=k[b+88>>2]|0;u=k[b+92>>2]|0;b:do if((s|0)!=(u|0)){v=f+8|0;w=f+1|0;y=f+4|0;z=s;while(1){x=0;xa(716,f|0,z|0);A=x;x=0;if(A&1){t=11;break}A=i[f>>0]|0;B=(A&1)==0;x=0;Fa(92,q|0,(B?w:k[v>>2]|0)|0,(B?(A&255)>>>1:k[y>>2]|0)|0)|0;A=x;x=0;if(A&1)break;K2a(f);z=z+104|0;if((z|0)==(u|0))break b}if((t|0)==11){z=Hc()|0;C=z;D=M;break a}z=Hc()|0;y=M;K2a(f);E=z;F=y;k[e>>2]=26664;k[g>>2]=26704;k[q>>2]=26684;k[j>>2]=20392;K2a(l);obb(j);mab(g);Sc(E|0)}while(0);x=0;Fa(92,q|0,300015,1)|0;u=x;x=0;if(!(u&1)?(x=0,xa(584,a|0,j|0),u=x,x=0,!(u&1)):0){k[e>>2]=26664;k[g>>2]=26704;k[q>>2]=26684;k[j>>2]=20392;K2a(l);obb(j);mab(g);r=c;return}else t=12}else t=12}while(0);if((t|0)==12){u=Hc()|0;C=u;D=M}E=C;F=D;k[e>>2]=26664;k[g>>2]=26704;k[q>>2]=26684;k[j>>2]=20392;K2a(l);obb(j);mab(g);Sc(E|0)}while(0);m=o;n=p;mab(g);Sc(n|0)}function oF(){k[7618]=0;k[7619]=0;k[7620]=0;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=b;e=c-d>>2;f=a+8|0;g=k[f>>2]|0;h=k[a>>2]|0;i=h;if(e>>>0<=g-h>>2>>>0){j=a+4|0;l=(k[j>>2]|0)-h>>2;m=e>>>0>l>>>0;n=b+(l<<2)|0;l=m?n:c;o=l;p=o-d|0;Eyb(h|0,b|0,p|0)|0;q=i+(p>>2<<2)|0;if(!m){m=k[j>>2]|0;if((m|0)==(q|0))return;k[j>>2]=m+(~((m+-4-q|0)>>>2)<<2);return}if((l|0)==(c|0))return;l=k[j>>2]|0;q=(c+-4-o|0)>>>2;o=n;n=l;while(1){k[n>>2]=k[o>>2];o=o+4|0;if((o|0)==(c|0))break;else n=n+4|0}k[j>>2]=l+(q+1<<2);return}q=h;if(!h)r=g;else{g=a+4|0;l=k[g>>2]|0;if((l|0)!=(i|0))k[g>>2]=l+(~((l+-4-h|0)>>>2)<<2);OBa(q);k[f>>2]=0;k[g>>2]=0;k[a>>2]=0;r=0}if(e>>>0>1073741823){HBa(a);s=k[a>>2]|0;t=k[f>>2]|0}else{s=0;t=r}r=t-s|0;if(r>>2>>>0<536870911){s=r>>1;r=s>>>0>>0?e:s;if(r>>>0>1073741823){HBa(a);u=r}else u=r}else u=1073741823;r=KBa(u<<2)|0;s=a+4|0;k[s>>2]=r;k[a>>2]=r;k[f>>2]=r+(u<<2);if((b|0)==(c|0))return;u=(c+-4-d|0)>>>2;d=b;b=r;while(1){k[b>>2]=k[d>>2];d=d+4|0;if((d|0)==(c|0))break;else b=b+4|0}k[s>>2]=r+(u+1<<2);return}function qF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/24|0)+1|0;if(e>>>0>178956970){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/24|0;if(g>>>0<89478485){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/24|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=178956970;n=((k[c>>2]|0)-f|0)/24|0;o=6}if((o|0)==6){i=m;j=KBa(m*24|0)|0;l=n}n=j+(l*24|0)|0;m=n;o=j+(i*24|0)|0;i=b;f=k[i+4>>2]|0;h=n;k[h>>2]=k[i>>2];k[h+4>>2]=f;x=0;xa(687,j+(l*24|0)+8|0,b+8|0);f=x;x=0;if(f&1){f=Hc()|0;if(!j)Sc(f|0);OBa(j);Sc(f|0)}k[j+(l*24|0)+20>>2]=k[b+20>>2];b=n+24|0;l=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(l|0)){p=m;q=l;r=l}else{f=j;j=n;n=m;while(1){m=f;f=f+-24|0;h=f;i=k[h+4>>2]|0;g=j+-24|0;k[g>>2]=k[h>>2];k[g+4>>2]=i;i=j+-16|0;g=m+-16|0;k[i>>2]=0;h=j+-12|0;k[h>>2]=0;k[j+-8>>2]=0;k[i>>2]=k[g>>2];i=m+-12|0;k[h>>2]=k[i>>2];h=m+-8|0;k[j+-8>>2]=k[h>>2];k[h>>2]=0;k[i>>2]=0;k[g>>2]=0;k[j+-4>>2]=k[m+-4>>2];j=n+-24|0;m=j;if((f|0)==(l|0)){s=m;break}else n=m}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{r=k[d+-16>>2]|0;b=r;if(r){c=d+-12|0;p=k[c>>2]|0;if((p|0)!=(r|0))k[c>>2]=p+(~((p+-4-b|0)>>>2)<<2);OBa(r)}d=d+-24|0}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function rF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;d=r;r=r+16|0;e=d;f=b+4|0;g=k[f>>2]|0;do if(g){h=g;while(1){j=h+16|0;if(TE(c,j)|0){l=k[h>>2]|0;if(!l){m=h;n=h;o=4;break}else p=l}else{if(!(TE(j,c)|0)){q=h;o=9;break}j=h+4|0;l=k[j>>2]|0;if(!l){s=j;t=h;o=8;break}else p=l}h=p}if((o|0)==4){k[e>>2]=n;u=m;v=n;break}else if((o|0)==8){k[e>>2]=t;u=s;v=t;break}else if((o|0)==9){k[e>>2]=q;u=e;v=q;break}}else{k[e>>2]=f;u=f;v=f}while(0);f=k[u>>2]|0;if(f){w=0;y=f;z=y;k[a>>2]=z;A=a+4|0;i[A>>0]=w;r=d;return}f=KBa(40)|0;e=c;q=k[e+4>>2]|0;o=f+16|0;k[o>>2]=k[e>>2];k[o+4>>2]=q;x=0;xa(687,f+24|0,c+8|0);q=x;x=0;if(q&1){q=Hc()|0;OBa(f);Sc(q|0)}k[f+36>>2]=k[c+20>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=v;k[u>>2]=f;v=k[k[b>>2]>>2]|0;if(!v)B=f;else{k[b>>2]=v;B=k[u>>2]|0}ui(k[b+4>>2]|0,B);B=b+8|0;k[B>>2]=(k[B>>2]|0)+1;w=1;y=f;z=y;k[a>>2]=z;A=a+4|0;i[A>>0]=w;r=d;return}function sF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function tF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d+1|0;f=d;if((b|0)==(c|0)){r=d;return}g=a+4|0;a=b;b=k[g>>2]|0;a:while(1){k[b>>2]=k[a>>2];i[b+4>>0]=i[a+4>>0]|0;h=b+8|0;j=a+8|0;l=h+40|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));xF(b+48|0,a+48|0);j=a+60|0;h=k[j+4>>2]|0;l=b+60|0;k[l>>2]=k[j>>2];k[l+4>>2]=h;h=b+72|0;l=a+88|0;j=k[l>>2]|0;do if(!j)k[b+88>>2]=0;else{if((j|0)==(a+72|0)){k[b+88>>2]=h;m=k[l>>2]|0;x=0;xa(k[(k[m>>2]|0)+12>>2]|0,m|0,h|0);m=x;x=0;if(m&1){n=b;break a}else break}x=0;m=Ba(k[(k[j>>2]|0)+8>>2]|0,j|0)|0;o=x;x=0;if(o&1){n=b;break a}k[b+88>>2]=m}while(0);b=(k[g>>2]|0)+96|0;k[g>>2]=b;a=a+96|0;if((a|0)==(c|0)){p=17;break}}if((p|0)==17){r=d;return}d=Hc()|0;p=n+48|0;c=k[p>>2]|0;if(!c)Sc(d|0);a=n+52|0;b=k[a>>2]|0;if((b|0)==(c|0))q=c;else{g=n+56|0;n=b;do{b=n+-72|0;k[a>>2]=b;i[e>>0]=i[f>>0]|0;uF(e,g,b);n=k[a>>2]|0}while((n|0)!=(c|0));q=k[p>>2]|0}OBa(q);Sc(d|0)}function uF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;a=b+1|0;d=b;e=c+48|0;f=k[e>>2]|0;if(!f){r=b;return}g=c+52|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=c+56|0;c=h;do{h=c+-72|0;k[g>>2]=h;i[a>>0]=i[d>>0]|0;uF(a,l,h);c=k[g>>2]|0}while((c|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function vF(a,b){a=a|0;b=b|0;if(!b)return;else{vF(a,k[b>>2]|0);vF(a,k[b+4>>2]|0);OBa(b);return}}function wF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+4|0;a=k[c>>2]|0;if((a|0)==(b|0))return;else d=a;do{k[c>>2]=d+-104;a=d+-16|0;e=k[a>>2]|0;if(e){wF(a,e);OBa(k[a>>2]|0)}a=k[d+-24>>2]|0;if(a)j0a(a);a=k[d+-36>>2]|0;if(a)j0a(a);d=k[c>>2]|0}while((d|0)!=(b|0));return}function xF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+16|0;d=c+1|0;e=c;k[a>>2]=0;f=a+4|0;k[f>>2]=0;k[a+8>>2]=0;g=b+4|0;h=k[g>>2]|0;j=k[b>>2]|0;l=h-j|0;m=(l|0)/72|0;if((h|0)==(j|0)){r=c;return}if(m>>>0>59652323?(x=0,va(1473,a|0),j=x,x=0,j&1):0)n=10;else n=4;do if((n|0)==4){x=0;j=Ba(563,l|0)|0;h=x;x=0;if(!(h&1)){k[f>>2]=j;k[a>>2]=j;k[a+8>>2]=j+(m*72|0);h=k[b>>2]|0;o=k[g>>2]|0;if((h|0)==(o|0)){r=c;return}p=h;h=j;while(1){k[h>>2]=k[p>>2];i[h+4>>0]=i[p+4>>0]|0;j=h+8|0;q=p+8|0;s=j+40|0;do{k[j>>2]=k[q>>2];j=j+4|0;q=q+4|0}while((j|0)<(s|0));x=0;xa(712,h+48|0,p+48|0);q=x;x=0;if(q&1){n=9;break}q=p+60|0;j=k[q+4>>2]|0;s=h+60|0;k[s>>2]=k[q>>2];k[s+4>>2]=j;h=(k[f>>2]|0)+72|0;k[f>>2]=h;p=p+72|0;if((p|0)==(o|0)){n=24;break}}if((n|0)==9){o=Hc()|0;t=o;u=M;break}else if((n|0)==24){r=c;return}}else n=10}while(0);if((n|0)==10){n=Hc()|0;t=n;u=M}u=k[a>>2]|0;if(!u)Sc(t|0);n=k[f>>2]|0;if((n|0)==(u|0))v=u;else{c=n;while(1){n=c+-72|0;k[f>>2]=n;g=c+-24|0;b=k[g>>2]|0;if(!b)w=n;else{n=c+-20|0;m=k[n>>2]|0;if((m|0)==(b|0))y=b;else{l=c+-16|0;o=m;do{m=o+-72|0;k[n>>2]=m;i[d>>0]=i[e>>0]|0;uF(d,l,m);o=k[n>>2]|0}while((o|0)!=(b|0));y=k[g>>2]|0}OBa(y);w=k[f>>2]|0}if((w|0)==(u|0))break;else c=w}v=k[a>>2]|0}OBa(v);Sc(t|0)}function yF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+16|0;e=d+1|0;f=d;if((b|0)==(c|0)){r=d;return}g=a+4|0;a=b;b=k[g>>2]|0;a:while(1){k[b>>2]=k[a>>2];i[b+4>>0]=i[a+4>>0]|0;h=b+8|0;j=a+8|0;l=h+40|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));xF(b+48|0,a+48|0);j=a+60|0;h=k[j+4>>2]|0;l=b+60|0;k[l>>2]=k[j>>2];k[l+4>>2]=h;h=b+72|0;l=a+88|0;j=k[l>>2]|0;do if(!j)k[b+88>>2]=0;else{if((j|0)==(a+72|0)){k[b+88>>2]=h;m=k[l>>2]|0;x=0;xa(k[(k[m>>2]|0)+12>>2]|0,m|0,h|0);m=x;x=0;if(m&1){n=b;break a}else break}x=0;m=Ba(k[(k[j>>2]|0)+8>>2]|0,j|0)|0;o=x;x=0;if(o&1){n=b;break a}k[b+88>>2]=m}while(0);b=(k[g>>2]|0)+96|0;k[g>>2]=b;a=a+96|0;if((a|0)==(c|0)){p=17;break}}if((p|0)==17){r=d;return}d=Hc()|0;p=n+48|0;c=k[p>>2]|0;if(!c)Sc(d|0);a=n+52|0;b=k[a>>2]|0;if((b|0)==(c|0))q=c;else{g=n+56|0;n=b;do{b=n+-72|0;k[a>>2]=b;i[e>>0]=i[f>>0]|0;uF(e,g,b);n=k[a>>2]|0}while((n|0)!=(c|0));q=k[p>>2]|0}OBa(q);Sc(d|0)}function zF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=k[a>>2]|0;if(!e){r=b;return}f=a+4|0;g=k[f>>2]|0;if((g|0)==(e|0))h=e;else{j=g;do{k[f>>2]=j+-96;g=k[j+-8>>2]|0;if((g|0)!=(j+-24|0)){if(g)Sf[k[(k[g>>2]|0)+20>>2]&2047](g)}else Sf[k[(k[g>>2]|0)+16>>2]&2047](g);g=j+-48|0;l=k[g>>2]|0;if(l){m=j+-44|0;n=k[m>>2]|0;if((n|0)==(l|0))o=l;else{p=j+-40|0;q=n;do{n=q+-72|0;k[m>>2]=n;i[c>>0]=i[d>>0]|0;uF(c,p,n);q=k[m>>2]|0}while((q|0)!=(l|0));o=k[g>>2]|0}OBa(o)}j=k[f>>2]|0}while((j|0)!=(e|0));h=k[a>>2]|0}OBa(h);k[a+8>>2]=0;k[f>>2]=0;k[a>>2]=0;r=b;return}function AF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+4|0;g=k[a>>2]|0;h=(((k[f>>2]|0)-g|0)/96|0)+1|0;if(h>>>0>44739242){HBa(a);j=k[a>>2]|0}else j=g;g=a+8|0;l=((k[g>>2]|0)-j|0)/96|0;if(l>>>0<22369621){m=l<<1;l=m>>>0>>0?h:m;m=((k[f>>2]|0)-j|0)/96|0;if(!l){n=0;o=0;p=m}else{q=l;s=m;t=6}}else{q=44739242;s=((k[f>>2]|0)-j|0)/96|0;t=6}if((t|0)==6){n=q;o=KBa(q*96|0)|0;p=s}s=o+(p*96|0)|0;q=s;j=o+(n*96|0)|0;k[s>>2]=k[b>>2];i[s+4>>0]=i[b+4>>0]|0;n=o+(p*96|0)+8|0;m=b+8|0;l=n+40|0;do{k[n>>2]=k[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(l|0));h=b+48|0;k[o+(p*96|0)+56>>2]=0;k[o+(p*96|0)+48>>2]=k[h>>2];u=b+52|0;k[o+(p*96|0)+52>>2]=k[u>>2];v=b+56|0;k[o+(p*96|0)+56>>2]=k[v>>2];k[v>>2]=0;k[u>>2]=0;k[h>>2]=0;h=b+60|0;u=k[h+4>>2]|0;v=o+(p*96|0)+60|0;k[v>>2]=k[h>>2];k[v+4>>2]=u;u=o+(p*96|0)+72|0;v=b+88|0;h=k[v>>2]|0;do if(h){if((h|0)!=(b+72|0)){k[o+(p*96|0)+88>>2]=h;k[v>>2]=0;break}k[o+(p*96|0)+88>>2]=u;x=0;xa(k[(k[h>>2]|0)+12>>2]|0,h|0,u|0);w=x;x=0;if(w&1){w=Hc(0)|0;Fg(w)}}else k[o+(p*96|0)+88>>2]=0;while(0);p=s+96|0;o=k[a>>2]|0;u=k[f>>2]|0;do if((u|0)!=(o|0)){h=u;v=q;b=s;a:while(1){w=b+-96|0;y=h;h=h+-96|0;k[w>>2]=k[h>>2];i[w+4>>0]=i[h+4>>0]|0;n=b+-88|0;m=y+-88|0;l=n+40|0;do{k[n>>2]=k[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(l|0));w=b+-48|0;z=y+-48|0;k[w>>2]=0;A=b+-44|0;k[A>>2]=0;k[b+-40>>2]=0;k[w>>2]=k[z>>2];w=y+-44|0;k[A>>2]=k[w>>2];A=y+-40|0;k[b+-40>>2]=k[A>>2];k[A>>2]=0;k[w>>2]=0;k[z>>2]=0;z=y+-36|0;w=k[z+4>>2]|0;A=b+-36|0;k[A>>2]=k[z>>2];k[A+4>>2]=w;w=b+-24|0;A=y+-8|0;z=k[A>>2]|0;do if(z)if((z|0)==(y+-24|0)){k[b+-8>>2]=w;B=k[A>>2]|0;x=0;xa(k[(k[B>>2]|0)+12>>2]|0,B|0,w|0);B=x;x=0;if(B&1){t=20;break a}else break}else{k[b+-8>>2]=z;k[A>>2]=0;break}else k[b+-8>>2]=0;while(0);b=v+-96|0;A=b;if((h|0)==(o|0)){C=A;t=22;break}else v=A}if((t|0)==20){v=Hc(0)|0;Fg(v)}else if((t|0)==22){D=C;E=k[a>>2]|0;F=k[f>>2]|0;break}}else{D=q;E=o;F=o}while(0);k[a>>2]=D;k[f>>2]=p;k[g>>2]=j;j=E;if((F|0)!=(j|0)){g=F;do{F=k[g+-8>>2]|0;if((F|0)!=(g+-24|0)){if(F)Sf[k[(k[F>>2]|0)+20>>2]&2047](F)}else Sf[k[(k[F>>2]|0)+16>>2]&2047](F);F=g+-48|0;p=k[F>>2]|0;if(p){f=g+-44|0;D=k[f>>2]|0;if((D|0)==(p|0))G=p;else{a=g+-40|0;o=D;do{D=o+-72|0;k[f>>2]=D;i[d>>0]=i[e>>0]|0;uF(d,a,D);o=k[f>>2]|0}while((o|0)!=(p|0));G=k[F>>2]|0}OBa(G)}g=g+-96|0}while((g|0)!=(j|0))}if(!E){r=c;return}OBa(E);r=c;return}function BF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+16|0;d=c+1|0;e=c;f=k[b>>2]|0;g=k[b+4>>2]|0;if((f|0)==(g|0)){r=c;return a|0}b=a+4|0;h=a+8|0;j=f;a:while(1){f=k[b>>2]|0;if((f|0)==(k[h>>2]|0))zG(a,j);else{k[f>>2]=k[j>>2];i[f+4>>0]=i[j+4>>0]|0;l=f+8|0;m=j+8|0;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));xF(f+48|0,j+48|0);m=j+60|0;l=k[m+4>>2]|0;n=f+60|0;k[n>>2]=k[m>>2];k[n+4>>2]=l;l=f+72|0;n=j+88|0;m=k[n>>2]|0;do if(!m)k[f+88>>2]=0;else{if((m|0)==(j+72|0)){k[f+88>>2]=l;o=k[n>>2]|0;x=0;xa(k[(k[o>>2]|0)+12>>2]|0,o|0,l|0);o=x;x=0;if(o&1){p=f;break a}else break}x=0;o=Ba(k[(k[m>>2]|0)+8>>2]|0,m|0)|0;q=x;x=0;if(q&1){p=f;break a}k[f+88>>2]=o}while(0);k[b>>2]=(k[b>>2]|0)+96}j=j+96|0;if((j|0)==(g|0)){s=3;break}}if((s|0)==3){r=c;return a|0}a=Hc()|0;c=p+48|0;s=k[c>>2]|0;if(!s)Sc(a|0);g=p+52|0;j=k[g>>2]|0;if((j|0)==(s|0))t=s;else{b=p+56|0;p=j;do{j=p+-72|0;k[g>>2]=j;i[d>>0]=i[e>>0]|0;uF(d,b,j);p=k[g>>2]|0}while((p|0)!=(s|0));t=k[c>>2]|0}OBa(t);Sc(a|0);return 0}function CF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=k[a>>2]|0;if(!e){r=b;return}f=a+4|0;g=k[f>>2]|0;if((g|0)==(e|0))h=e;else{j=g;do{k[f>>2]=j+-96;g=k[j+-8>>2]|0;if((g|0)!=(j+-24|0)){if(g)Sf[k[(k[g>>2]|0)+20>>2]&2047](g)}else Sf[k[(k[g>>2]|0)+16>>2]&2047](g);g=j+-48|0;l=k[g>>2]|0;if(l){m=j+-44|0;n=k[m>>2]|0;if((n|0)==(l|0))o=l;else{p=j+-40|0;q=n;do{n=q+-72|0;k[m>>2]=n;i[c>>0]=i[d>>0]|0;uF(c,p,n);q=k[m>>2]|0}while((q|0)!=(l|0));o=k[g>>2]|0}OBa(o)}j=k[f>>2]|0}while((j|0)!=(e|0));h=k[a>>2]|0}OBa(h);r=b;return}function DF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/104|0)+1|0;if(e>>>0>41297762){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/104|0;if(g>>>0<20648881){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/104|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=41297762;n=((k[c>>2]|0)-f|0)/104|0;o=6}if((o|0)==6){i=m;j=KBa(m*104|0)|0;l=n}n=j+(l*104|0)|0;m=n;o=j+(i*104|0)|0;i=b;f=k[i+4>>2]|0;h=n;k[h>>2]=k[i>>2];k[h+4>>2]=f;k[j+(l*104|0)+8>>2]=k[b+8>>2];f=j+(l*104|0)+16|0;h=b+16|0;i=f+40|0;do{k[f>>2]=k[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));k[j+(l*104|0)+56>>2]=k[b+56>>2];k[j+(l*104|0)+60>>2]=k[b+60>>2];g=b+64|0;k[j+(l*104|0)+64>>2]=k[g>>2];e=b+68|0;k[j+(l*104|0)+68>>2]=k[e>>2];k[g>>2]=0;k[e>>2]=0;k[j+(l*104|0)+72>>2]=k[b+72>>2];e=b+76|0;k[j+(l*104|0)+76>>2]=k[e>>2];g=b+80|0;k[j+(l*104|0)+80>>2]=k[g>>2];k[e>>2]=0;k[g>>2]=0;g=b+88|0;k[j+(l*104|0)+96>>2]=0;k[j+(l*104|0)+88>>2]=k[g>>2];e=b+92|0;k[j+(l*104|0)+92>>2]=k[e>>2];p=b+96|0;k[j+(l*104|0)+96>>2]=k[p>>2];k[p>>2]=0;k[e>>2]=0;k[g>>2]=0;g=n+104|0;e=k[a>>2]|0;p=k[c>>2]|0;if((p|0)==(e|0)){q=m;r=e;s=e}else{l=p;p=m;m=n;while(1){n=l;l=l+-104|0;j=l;b=k[j+4>>2]|0;t=m+-104|0;k[t>>2]=k[j>>2];k[t+4>>2]=b;k[m+-96>>2]=k[n+-96>>2];f=m+-88|0;h=n+-88|0;i=f+40|0;do{k[f>>2]=k[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));k[m+-48>>2]=k[n+-48>>2];k[m+-44>>2]=k[n+-44>>2];b=n+-40|0;k[m+-40>>2]=k[b>>2];t=n+-36|0;k[m+-36>>2]=k[t>>2];k[b>>2]=0;k[t>>2]=0;k[m+-32>>2]=k[n+-32>>2];t=n+-28|0;k[m+-28>>2]=k[t>>2];b=n+-24|0;k[m+-24>>2]=k[b>>2];k[t>>2]=0;k[b>>2]=0;b=m+-16|0;t=n+-16|0;k[b>>2]=0;j=m+-12|0;k[j>>2]=0;k[m+-8>>2]=0;k[b>>2]=k[t>>2];b=n+-12|0;k[j>>2]=k[b>>2];j=n+-8|0;k[m+-8>>2]=k[j>>2];k[j>>2]=0;k[b>>2]=0;k[t>>2]=0;m=p+-104|0;t=m;if((l|0)==(e|0)){u=t;break}else p=t}q=u;r=k[a>>2]|0;s=k[c>>2]|0}k[a>>2]=q;k[c>>2]=g;k[d>>2]=o;o=r;if((s|0)!=(o|0)){d=s;do{s=d+-16|0;g=k[s>>2]|0;if(g){wF(s,g);OBa(k[s>>2]|0)}s=k[d+-24>>2]|0;if(s)j0a(s);s=k[d+-36>>2]|0;d=d+-104|0;if(s)j0a(s)}while((d|0)!=(o|0))}if(!r)return;OBa(o);return}function EF(a){a=a|0;k[a>>2]=30312;NF(a+8|0);return}function FF(a){a=a|0;k[a>>2]=30312;NF(a+8|0);OBa(a);return}function GF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(224)|0;f=a+8|0;k[e>>2]=30312;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=e+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=e+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=e+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=e+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=e+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=b}else{g=e+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=e+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=b}}else{b=Hc()|0;s=M;t=b}b=k[j>>2]|0;if(b){a=e+60|0;u=k[a>>2]|0;if((u|0)==(b|0))v=b;else{p=e+64|0;f=u;do{u=f+-72|0;k[a>>2]=u;i[c>>0]=i[d>>0]|0;uF(c,p,u);f=k[a>>2]|0}while((f|0)!=(b|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;OBa(e);Sc(n|0);return 0}function HF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=30312;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=b+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=b+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=b+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=b+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=b+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=c}else{g=b+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=b+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=c}}else{c=Hc()|0;s=M;t=c}c=k[j>>2]|0;if(c){a=b+60|0;u=k[a>>2]|0;if((u|0)==(c|0))v=c;else{p=b+64|0;b=u;do{u=b+-72|0;k[a>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,p,u);b=k[a>>2]|0}while((b|0)!=(c|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;Sc(n|0)}function IF(a){a=a|0;NF(a+8|0);return}function JF(a){a=a|0;NF(a+8|0);OBa(a);return}function KF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0;c=r;r=r+432|0;d=c+368|0;e=c+328|0;f=c+420|0;g=c+184|0;h=c+408|0;j=c+40|0;l=c;m=b+8|0;k[j>>2]=k[m>>2];i[j+4>>0]=i[m+4>>0]|0;m=j+8|0;n=m;o=b+16|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));q=j+48|0;x=0;xa(712,q|0,b+56|0);s=x;x=0;if(!(s&1)){s=j+60|0;t=b+68|0;u=k[t+4>>2]|0;v=s;k[v>>2]=k[t>>2];k[v+4>>2]=u;u=j+72|0;v=b+80|0;k[u>>2]=k[v>>2];i[u+4>>0]=i[v+4>>0]|0;v=j+80|0;n=v;o=b+88|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));t=j+120|0;x=0;xa(712,t|0,b+128|0);w=x;x=0;if(!(w&1)){w=j+132|0;y=b+140|0;z=k[y+4>>2]|0;A=w;k[A>>2]=k[y>>2];k[A+4>>2]=z;k[h>>2]=0;z=h+4|0;k[z>>2]=0;k[h+8>>2]=0;x=0;A=Ba(563,144)|0;y=x;x=0;a:do if(y&1){B=Hc()|0;C=B;D=M;E=76}else{k[z>>2]=A;k[h>>2]=A;B=A+144|0;k[h+8>>2]=B;k[A>>2]=k[j>>2];i[A+4>>0]=i[j+4>>0]|0;n=A+8|0;o=m;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,A+48|0,q|0);F=x;x=0;do if(F&1){G=Hc()|0;H=A;I=G;J=M}else{G=s;K=k[G+4>>2]|0;L=A+60|0;k[L>>2]=k[G>>2];k[L+4>>2]=K;K=A+72|0;k[z>>2]=K;k[K>>2]=k[u>>2];i[K+4>>0]=i[u+4>>0]|0;n=A+80|0;o=v;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,A+120|0,t|0);L=x;x=0;if(L&1){L=Hc()|0;G=M;N=K;while(1){O=N+-72|0;k[z>>2]=O;P=N+-24|0;Q=k[P>>2]|0;if(!Q)R=O;else{S=N+-20|0;T=k[S>>2]|0;if((T|0)==(Q|0)){U=O;V=Q}else{O=N+-16|0;W=T;do{T=W+-72|0;k[S>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,O,T);W=k[S>>2]|0}while((W|0)!=(Q|0));U=k[z>>2]|0;V=k[P>>2]|0}OBa(V);R=U}if((R|0)==(A|0))break;else N=R}H=k[h>>2]|0;I=L;J=G;break}N=w;K=k[N+4>>2]|0;Q=A+132|0;k[Q>>2]=k[N>>2];k[Q+4>>2]=K;k[z>>2]=B;k[g>>2]=1;i[g+4>>0]=1;K=g+8|0;k[K>>2]=3;k[g+40>>2]=1;Q=g+48|0;x=0;xa(712,Q|0,h|0);N=x;x=0;if(!(N&1)){N=g+60|0;k[N>>2]=0;k[g+64>>2]=0;W=g+72|0;x=0;S=Ba(590,b+152|0)|0;O=x;x=0;if(!(O&1)){O=k[S+4>>2]|0;k[e>>2]=0;k[e+32>>2]=1;k[d>>2]=0;k[d+32>>2]=1;qC(e,d,O+8|0);n=l;o=e;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));k[W>>2]=2;i[g+76>>0]=1;G=g+80|0;n=G;o=l;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));L=g+120|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;k[f>>2]=0;O=f+4|0;k[O>>2]=0;k[f+8>>2]=0;x=0;S=Ba(563,144)|0;T=x;x=0;b:do if(T&1){X=Hc()|0;Y=X;Z=M;E=78}else{k[O>>2]=S;k[f>>2]=S;X=S+144|0;k[f+8>>2]=X;k[S>>2]=k[g>>2];i[S+4>>0]=i[g+4>>0]|0;n=S+8|0;o=K;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,S+48|0,Q|0);P=x;x=0;do if(P&1){_=Hc()|0;$=S;aa=_;ba=M}else{_=N;ca=k[_+4>>2]|0;da=S+60|0;k[da>>2]=k[_>>2];k[da+4>>2]=ca;ca=S+72|0;k[O>>2]=ca;k[ca>>2]=k[W>>2];i[ca+4>>0]=i[W+4>>0]|0;n=S+80|0;o=G;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,S+120|0,g+120|0);da=x;x=0;if(da&1){da=Hc()|0;_=M;ea=ca;while(1){fa=ea+-72|0;k[O>>2]=fa;ga=ea+-24|0;ha=k[ga>>2]|0;if(!ha)ia=fa;else{ja=ea+-20|0;ka=k[ja>>2]|0;if((ka|0)==(ha|0)){la=fa;ma=ha}else{fa=ea+-16|0;na=ka;do{ka=na+-72|0;k[ja>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,fa,ka);na=k[ja>>2]|0}while((na|0)!=(ha|0));la=k[O>>2]|0;ma=k[ga>>2]|0}OBa(ma);ia=la}if((ia|0)==(S|0))break;else ea=ia}$=k[f>>2]|0;aa=da;ba=_;break}ea=g+132|0;ca=k[ea+4>>2]|0;ha=S+132|0;k[ha>>2]=k[ea>>2];k[ha+4>>2]=ca;k[O>>2]=X;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=1;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);ca=x;x=0;if(ca&1){ca=Hc()|0;ha=M;ea=X;while(1){na=ea+-72|0;k[O>>2]=na;ja=ea+-24|0;fa=k[ja>>2]|0;if(!fa)oa=na;else{ka=ea+-20|0;pa=k[ka>>2]|0;if((pa|0)==(fa|0)){qa=na;ra=fa}else{na=ea+-16|0;sa=pa;do{pa=sa+-72|0;k[ka>>2]=pa;i[d>>0]=i[e>>0]|0;uF(d,na,pa);sa=k[ka>>2]|0}while((sa|0)!=(fa|0));qa=k[O>>2]|0;ra=k[ja>>2]|0}OBa(ra);oa=qa}if((oa|0)==(S|0))break;else ea=oa}OBa(k[f>>2]|0);ta=ha;ua=ca;break b}k[a+60>>2]=0;k[a+64>>2]=0;ea=X;while(1){_=ea+-72|0;k[O>>2]=_;da=ea+-24|0;fa=k[da>>2]|0;if(!fa)va=_;else{sa=ea+-20|0;ka=k[sa>>2]|0;if((ka|0)==(fa|0)){wa=_;ya=fa}else{_=ea+-16|0;na=ka;do{ka=na+-72|0;k[sa>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,_,ka);na=k[sa>>2]|0}while((na|0)!=(fa|0));wa=k[O>>2]|0;ya=k[da>>2]|0}OBa(ya);va=wa}if((va|0)==(S|0))break;else ea=va}OBa(k[f>>2]|0);ea=k[L>>2]|0;if(ea){ca=g+124|0;ha=k[ca>>2]|0;if((ha|0)==(ea|0))za=ea;else{fa=g+128|0;na=ha;do{ha=na+-72|0;k[ca>>2]=ha;i[d>>0]=i[e>>0]|0;uF(d,fa,ha);na=k[ca>>2]|0}while((na|0)!=(ea|0));za=k[L>>2]|0}OBa(za)}ea=g+48|0;na=k[ea>>2]|0;if(na){ca=g+52|0;fa=k[ca>>2]|0;if((fa|0)==(na|0))Aa=na;else{ha=g+56|0;sa=fa;do{fa=sa+-72|0;k[ca>>2]=fa;i[d>>0]=i[e>>0]|0;uF(d,ha,fa);sa=k[ca>>2]|0}while((sa|0)!=(na|0));Aa=k[ea>>2]|0}OBa(Aa)}na=k[h>>2]|0;if(na){sa=k[z>>2]|0;if((sa|0)==(na|0))Ca=na;else{ca=sa;while(1){sa=ca+-72|0;k[z>>2]=sa;ha=ca+-24|0;fa=k[ha>>2]|0;if(!fa)Da=sa;else{_=ca+-20|0;ja=k[_>>2]|0;if((ja|0)==(fa|0)){Ea=sa;Fa=fa}else{sa=ca+-16|0;ka=ja;do{ja=ka+-72|0;k[_>>2]=ja;i[d>>0]=i[e>>0]|0;uF(d,sa,ja);ka=k[_>>2]|0}while((ka|0)!=(fa|0));Ea=k[z>>2]|0;Fa=k[ha>>2]|0}OBa(Fa);Da=Ea}if((Da|0)==(na|0))break;else ca=Da}Ca=k[h>>2]|0}OBa(Ca)}ca=j+120|0;na=k[ca>>2]|0;if(na){ea=j+124|0;fa=k[ea>>2]|0;if((fa|0)==(na|0))Ga=na;else{ka=j+128|0;_=fa;do{fa=_+-72|0;k[ea>>2]=fa;i[d>>0]=i[e>>0]|0;uF(d,ka,fa);_=k[ea>>2]|0}while((_|0)!=(na|0));Ga=k[ca>>2]|0}OBa(Ga)}na=j+48|0;_=k[na>>2]|0;if(!_){r=c;return}ea=j+52|0;ka=k[ea>>2]|0;if((ka|0)==(_|0))Ha=_;else{fa=j+56|0;sa=ka;do{ka=sa+-72|0;k[ea>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,fa,ka);sa=k[ea>>2]|0}while((sa|0)!=(_|0));Ha=k[na>>2]|0}OBa(Ha);r=c;return}while(0);OBa($);Y=aa;Z=ba;E=78}while(0);if((E|0)==78){ta=Z;ua=Y}S=k[L>>2]|0;if(S){O=g+124|0;G=k[O>>2]|0;if((G|0)==(S|0))Ia=S;else{N=g+128|0;Q=G;do{G=Q+-72|0;k[O>>2]=G;i[d>>0]=i[e>>0]|0;uF(d,N,G);Q=k[O>>2]|0}while((Q|0)!=(S|0));Ia=k[L>>2]|0}OBa(Ia)}S=g+48|0;Q=k[S>>2]|0;if(!Q){Ja=0;Ka=W;La=ta;Ma=ua}else{O=g+52|0;N=k[O>>2]|0;if((N|0)==(Q|0))Na=Q;else{G=g+56|0;K=N;do{N=K+-72|0;k[O>>2]=N;i[d>>0]=i[e>>0]|0;uF(d,G,N);K=k[O>>2]|0}while((K|0)!=(Q|0));Na=k[S>>2]|0}OBa(Na);Ja=0;Ka=W;La=ta;Ma=ua}}else{Oa=W;E=77}}else{Oa=g;E=77}if((E|0)==77){Q=Hc()|0;Ja=1;Ka=Oa;La=M;Ma=Q}Q=k[h>>2]|0;if(!Q){Pa=Ja;Qa=Ka;Ra=La;Sa=Ma;break a}K=k[z>>2]|0;if((K|0)==(Q|0))Ta=Q;else{O=K;while(1){K=O+-72|0;k[z>>2]=K;G=O+-24|0;L=k[G>>2]|0;if(!L)Ua=K;else{N=O+-20|0;T=k[N>>2]|0;if((T|0)==(L|0)){Va=K;Wa=L}else{K=O+-16|0;X=T;do{T=X+-72|0;k[N>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,K,T);X=k[N>>2]|0}while((X|0)!=(L|0));Va=k[z>>2]|0;Wa=k[G>>2]|0}OBa(Wa);Ua=Va}if((Ua|0)==(Q|0))break;else O=Ua}Ta=k[h>>2]|0}OBa(Ta);Pa=Ja;Qa=Ka;Ra=La;Sa=Ma;break a}while(0);OBa(H);C=I;D=J;E=76}while(0);if((E|0)==76){Pa=1;Qa=g;Ra=D;Sa=C}C=j+120|0;D=k[C>>2]|0;if(D){J=j+124|0;I=k[J>>2]|0;if((I|0)==(D|0))Xa=D;else{H=j+128|0;Ma=I;do{I=Ma+-72|0;k[J>>2]=I;i[d>>0]=i[e>>0]|0;uF(d,H,I);Ma=k[J>>2]|0}while((Ma|0)!=(D|0));Xa=k[C>>2]|0}OBa(Xa)}Xa=j+48|0;C=k[Xa>>2]|0;if(!C){Ya=Pa;Za=Ra;_a=Qa;$a=Sa}else{D=j+52|0;Ma=k[D>>2]|0;if((Ma|0)==(C|0))ab=C;else{J=j+56|0;H=Ma;do{Ma=H+-72|0;k[D>>2]=Ma;i[d>>0]=i[e>>0]|0;uF(d,J,Ma);H=k[D>>2]|0}while((H|0)!=(C|0));ab=k[Xa>>2]|0}OBa(ab);Ya=Pa;Za=Ra;_a=Qa;$a=Sa}}else{bb=u;E=67}}else{bb=j;E=67}if((E|0)==67){E=Hc()|0;u=M;if((j|0)==(bb|0)){Ya=1;Za=u;_a=g;$a=E}else{Sa=bb;do{bb=Sa+-24|0;Qa=k[bb>>2]|0;if(Qa){Ra=Sa+-20|0;Pa=k[Ra>>2]|0;if((Pa|0)==(Qa|0))cb=Qa;else{ab=Sa+-16|0;Xa=Pa;do{Pa=Xa+-72|0;k[Ra>>2]=Pa;i[d>>0]=i[e>>0]|0;uF(d,ab,Pa);Xa=k[Ra>>2]|0}while((Xa|0)!=(Qa|0));cb=k[bb>>2]|0}OBa(cb)}Sa=Sa+-72|0}while((Sa|0)!=(j|0));Ya=1;Za=u;_a=g;$a=E}}if((g|0)==(_a|0)|Ya^1)Sc($a|0);Ya=_a;do{_a=Ya+-24|0;E=k[_a>>2]|0;if(E){u=Ya+-20|0;Za=k[u>>2]|0;if((Za|0)==(E|0))db=E;else{j=Ya+-16|0;Sa=Za;do{Za=Sa+-72|0;k[u>>2]=Za;i[d>>0]=i[e>>0]|0;uF(d,j,Za);Sa=k[u>>2]|0}while((Sa|0)!=(E|0));db=k[_a>>2]|0}OBa(db)}Ya=Ya+-72|0}while((Ya|0)!=(g|0));Sc($a|0)}function LF(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==218305?a+8|0:0)|0}function MF(a){a=a|0;return 2704}function NF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+192|0;f=k[e>>2]|0;if(f){g=a+196|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+200|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+120|0;e=k[j>>2]|0;if(e){f=a+124|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+128|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=a+48|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+52|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+56|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function OF(a){a=a|0;k[a>>2]=30268;XF(a+8|0);return}function PF(a){a=a|0;k[a>>2]=30268;XF(a+8|0);OBa(a);return}function QF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(224)|0;f=a+8|0;k[e>>2]=30268;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=e+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=e+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=e+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=e+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=e+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=b}else{g=e+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=e+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=b}}else{b=Hc()|0;s=M;t=b}b=k[j>>2]|0;if(b){a=e+60|0;u=k[a>>2]|0;if((u|0)==(b|0))v=b;else{p=e+64|0;f=u;do{u=f+-72|0;k[a>>2]=u;i[c>>0]=i[d>>0]|0;uF(c,p,u);f=k[a>>2]|0}while((f|0)!=(b|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;OBa(e);Sc(n|0);return 0}function RF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=30268;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=b+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=b+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=b+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=b+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=b+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=c}else{g=b+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=b+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=c}}else{c=Hc()|0;s=M;t=c}c=k[j>>2]|0;if(c){a=b+60|0;u=k[a>>2]|0;if((u|0)==(c|0))v=c;else{p=b+64|0;b=u;do{u=b+-72|0;k[a>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,p,u);b=k[a>>2]|0}while((b|0)!=(c|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;Sc(n|0)}function SF(a){a=a|0;XF(a+8|0);return}function TF(a){a=a|0;XF(a+8|0);OBa(a);return}function UF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0;c=r;r=r+432|0;d=c+368|0;e=c+328|0;f=c+420|0;g=c+184|0;h=c+408|0;j=c+40|0;l=c;m=b+8|0;k[j>>2]=k[m>>2];i[j+4>>0]=i[m+4>>0]|0;m=j+8|0;n=m;o=b+16|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));q=j+48|0;x=0;xa(712,q|0,b+56|0);s=x;x=0;if(!(s&1)){s=j+60|0;t=b+68|0;u=k[t+4>>2]|0;v=s;k[v>>2]=k[t>>2];k[v+4>>2]=u;u=j+72|0;v=b+80|0;k[u>>2]=k[v>>2];i[u+4>>0]=i[v+4>>0]|0;v=j+80|0;n=v;o=b+88|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));t=j+120|0;x=0;xa(712,t|0,b+128|0);w=x;x=0;if(!(w&1)){w=j+132|0;y=b+140|0;z=k[y+4>>2]|0;A=w;k[A>>2]=k[y>>2];k[A+4>>2]=z;k[h>>2]=0;z=h+4|0;k[z>>2]=0;k[h+8>>2]=0;x=0;A=Ba(563,144)|0;y=x;x=0;a:do if(y&1){B=Hc()|0;C=B;D=M;E=76}else{k[z>>2]=A;k[h>>2]=A;B=A+144|0;k[h+8>>2]=B;k[A>>2]=k[j>>2];i[A+4>>0]=i[j+4>>0]|0;n=A+8|0;o=m;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,A+48|0,q|0);F=x;x=0;do if(F&1){G=Hc()|0;H=A;I=G;J=M}else{G=s;K=k[G+4>>2]|0;L=A+60|0;k[L>>2]=k[G>>2];k[L+4>>2]=K;K=A+72|0;k[z>>2]=K;k[K>>2]=k[u>>2];i[K+4>>0]=i[u+4>>0]|0;n=A+80|0;o=v;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,A+120|0,t|0);L=x;x=0;if(L&1){L=Hc()|0;G=M;N=K;while(1){O=N+-72|0;k[z>>2]=O;P=N+-24|0;Q=k[P>>2]|0;if(!Q)R=O;else{S=N+-20|0;T=k[S>>2]|0;if((T|0)==(Q|0)){U=O;V=Q}else{O=N+-16|0;W=T;do{T=W+-72|0;k[S>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,O,T);W=k[S>>2]|0}while((W|0)!=(Q|0));U=k[z>>2]|0;V=k[P>>2]|0}OBa(V);R=U}if((R|0)==(A|0))break;else N=R}H=k[h>>2]|0;I=L;J=G;break}N=w;K=k[N+4>>2]|0;Q=A+132|0;k[Q>>2]=k[N>>2];k[Q+4>>2]=K;k[z>>2]=B;k[g>>2]=1;i[g+4>>0]=1;K=g+8|0;k[K>>2]=3;k[g+40>>2]=1;Q=g+48|0;x=0;xa(712,Q|0,h|0);N=x;x=0;if(!(N&1)){N=g+60|0;k[N>>2]=0;k[g+64>>2]=0;W=g+72|0;x=0;S=Ba(590,b+152|0)|0;O=x;x=0;if(!(O&1)){O=k[S+4>>2]|0;k[e>>2]=0;k[e+32>>2]=1;k[d>>2]=0;k[d+32>>2]=1;qC(e,d,O+8|0);n=l;o=e;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));k[W>>2]=2;i[g+76>>0]=1;G=g+80|0;n=G;o=l;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));L=g+120|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[L+16>>2]=0;k[f>>2]=0;O=f+4|0;k[O>>2]=0;k[f+8>>2]=0;x=0;S=Ba(563,144)|0;T=x;x=0;b:do if(T&1){X=Hc()|0;Y=X;Z=M;E=78}else{k[O>>2]=S;k[f>>2]=S;X=S+144|0;k[f+8>>2]=X;k[S>>2]=k[g>>2];i[S+4>>0]=i[g+4>>0]|0;n=S+8|0;o=K;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,S+48|0,Q|0);P=x;x=0;do if(P&1){_=Hc()|0;$=S;aa=_;ba=M}else{_=N;ca=k[_+4>>2]|0;da=S+60|0;k[da>>2]=k[_>>2];k[da+4>>2]=ca;ca=S+72|0;k[O>>2]=ca;k[ca>>2]=k[W>>2];i[ca+4>>0]=i[W+4>>0]|0;n=S+80|0;o=G;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,S+120|0,g+120|0);da=x;x=0;if(da&1){da=Hc()|0;_=M;ea=ca;while(1){fa=ea+-72|0;k[O>>2]=fa;ga=ea+-24|0;ha=k[ga>>2]|0;if(!ha)ia=fa;else{ja=ea+-20|0;ka=k[ja>>2]|0;if((ka|0)==(ha|0)){la=fa;ma=ha}else{fa=ea+-16|0;na=ka;do{ka=na+-72|0;k[ja>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,fa,ka);na=k[ja>>2]|0}while((na|0)!=(ha|0));la=k[O>>2]|0;ma=k[ga>>2]|0}OBa(ma);ia=la}if((ia|0)==(S|0))break;else ea=ia}$=k[f>>2]|0;aa=da;ba=_;break}ea=g+132|0;ca=k[ea+4>>2]|0;ha=S+132|0;k[ha>>2]=k[ea>>2];k[ha+4>>2]=ca;k[O>>2]=X;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=1;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);ca=x;x=0;if(ca&1){ca=Hc()|0;ha=M;ea=X;while(1){na=ea+-72|0;k[O>>2]=na;ja=ea+-24|0;fa=k[ja>>2]|0;if(!fa)oa=na;else{ka=ea+-20|0;pa=k[ka>>2]|0;if((pa|0)==(fa|0)){qa=na;ra=fa}else{na=ea+-16|0;sa=pa;do{pa=sa+-72|0;k[ka>>2]=pa;i[d>>0]=i[e>>0]|0;uF(d,na,pa);sa=k[ka>>2]|0}while((sa|0)!=(fa|0));qa=k[O>>2]|0;ra=k[ja>>2]|0}OBa(ra);oa=qa}if((oa|0)==(S|0))break;else ea=oa}OBa(k[f>>2]|0);ta=ha;ua=ca;break b}k[a+60>>2]=0;k[a+64>>2]=0;ea=X;while(1){_=ea+-72|0;k[O>>2]=_;da=ea+-24|0;fa=k[da>>2]|0;if(!fa)va=_;else{sa=ea+-20|0;ka=k[sa>>2]|0;if((ka|0)==(fa|0)){wa=_;ya=fa}else{_=ea+-16|0;na=ka;do{ka=na+-72|0;k[sa>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,_,ka);na=k[sa>>2]|0}while((na|0)!=(fa|0));wa=k[O>>2]|0;ya=k[da>>2]|0}OBa(ya);va=wa}if((va|0)==(S|0))break;else ea=va}OBa(k[f>>2]|0);ea=k[L>>2]|0;if(ea){ca=g+124|0;ha=k[ca>>2]|0;if((ha|0)==(ea|0))za=ea;else{fa=g+128|0;na=ha;do{ha=na+-72|0;k[ca>>2]=ha;i[d>>0]=i[e>>0]|0;uF(d,fa,ha);na=k[ca>>2]|0}while((na|0)!=(ea|0));za=k[L>>2]|0}OBa(za)}ea=g+48|0;na=k[ea>>2]|0;if(na){ca=g+52|0;fa=k[ca>>2]|0;if((fa|0)==(na|0))Aa=na;else{ha=g+56|0;sa=fa;do{fa=sa+-72|0;k[ca>>2]=fa;i[d>>0]=i[e>>0]|0;uF(d,ha,fa);sa=k[ca>>2]|0}while((sa|0)!=(na|0));Aa=k[ea>>2]|0}OBa(Aa)}na=k[h>>2]|0;if(na){sa=k[z>>2]|0;if((sa|0)==(na|0))Ca=na;else{ca=sa;while(1){sa=ca+-72|0;k[z>>2]=sa;ha=ca+-24|0;fa=k[ha>>2]|0;if(!fa)Da=sa;else{_=ca+-20|0;ja=k[_>>2]|0;if((ja|0)==(fa|0)){Ea=sa;Fa=fa}else{sa=ca+-16|0;ka=ja;do{ja=ka+-72|0;k[_>>2]=ja;i[d>>0]=i[e>>0]|0;uF(d,sa,ja);ka=k[_>>2]|0}while((ka|0)!=(fa|0));Ea=k[z>>2]|0;Fa=k[ha>>2]|0}OBa(Fa);Da=Ea}if((Da|0)==(na|0))break;else ca=Da}Ca=k[h>>2]|0}OBa(Ca)}ca=j+120|0;na=k[ca>>2]|0;if(na){ea=j+124|0;fa=k[ea>>2]|0;if((fa|0)==(na|0))Ga=na;else{ka=j+128|0;_=fa;do{fa=_+-72|0;k[ea>>2]=fa;i[d>>0]=i[e>>0]|0;uF(d,ka,fa);_=k[ea>>2]|0}while((_|0)!=(na|0));Ga=k[ca>>2]|0}OBa(Ga)}na=j+48|0;_=k[na>>2]|0;if(!_){r=c;return}ea=j+52|0;ka=k[ea>>2]|0;if((ka|0)==(_|0))Ha=_;else{fa=j+56|0;sa=ka;do{ka=sa+-72|0;k[ea>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,fa,ka);sa=k[ea>>2]|0}while((sa|0)!=(_|0));Ha=k[na>>2]|0}OBa(Ha);r=c;return}while(0);OBa($);Y=aa;Z=ba;E=78}while(0);if((E|0)==78){ta=Z;ua=Y}S=k[L>>2]|0;if(S){O=g+124|0;G=k[O>>2]|0;if((G|0)==(S|0))Ia=S;else{N=g+128|0;Q=G;do{G=Q+-72|0;k[O>>2]=G;i[d>>0]=i[e>>0]|0;uF(d,N,G);Q=k[O>>2]|0}while((Q|0)!=(S|0));Ia=k[L>>2]|0}OBa(Ia)}S=g+48|0;Q=k[S>>2]|0;if(!Q){Ja=0;Ka=W;La=ta;Ma=ua}else{O=g+52|0;N=k[O>>2]|0;if((N|0)==(Q|0))Na=Q;else{G=g+56|0;K=N;do{N=K+-72|0;k[O>>2]=N;i[d>>0]=i[e>>0]|0;uF(d,G,N);K=k[O>>2]|0}while((K|0)!=(Q|0));Na=k[S>>2]|0}OBa(Na);Ja=0;Ka=W;La=ta;Ma=ua}}else{Oa=W;E=77}}else{Oa=g;E=77}if((E|0)==77){Q=Hc()|0;Ja=1;Ka=Oa;La=M;Ma=Q}Q=k[h>>2]|0;if(!Q){Pa=Ja;Qa=Ka;Ra=La;Sa=Ma;break a}K=k[z>>2]|0;if((K|0)==(Q|0))Ta=Q;else{O=K;while(1){K=O+-72|0;k[z>>2]=K;G=O+-24|0;L=k[G>>2]|0;if(!L)Ua=K;else{N=O+-20|0;T=k[N>>2]|0;if((T|0)==(L|0)){Va=K;Wa=L}else{K=O+-16|0;X=T;do{T=X+-72|0;k[N>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,K,T);X=k[N>>2]|0}while((X|0)!=(L|0));Va=k[z>>2]|0;Wa=k[G>>2]|0}OBa(Wa);Ua=Va}if((Ua|0)==(Q|0))break;else O=Ua}Ta=k[h>>2]|0}OBa(Ta);Pa=Ja;Qa=Ka;Ra=La;Sa=Ma;break a}while(0);OBa(H);C=I;D=J;E=76}while(0);if((E|0)==76){Pa=1;Qa=g;Ra=D;Sa=C}C=j+120|0;D=k[C>>2]|0;if(D){J=j+124|0;I=k[J>>2]|0;if((I|0)==(D|0))Xa=D;else{H=j+128|0;Ma=I;do{I=Ma+-72|0;k[J>>2]=I;i[d>>0]=i[e>>0]|0;uF(d,H,I);Ma=k[J>>2]|0}while((Ma|0)!=(D|0));Xa=k[C>>2]|0}OBa(Xa)}Xa=j+48|0;C=k[Xa>>2]|0;if(!C){Ya=Pa;Za=Ra;_a=Qa;$a=Sa}else{D=j+52|0;Ma=k[D>>2]|0;if((Ma|0)==(C|0))ab=C;else{J=j+56|0;H=Ma;do{Ma=H+-72|0;k[D>>2]=Ma;i[d>>0]=i[e>>0]|0;uF(d,J,Ma);H=k[D>>2]|0}while((H|0)!=(C|0));ab=k[Xa>>2]|0}OBa(ab);Ya=Pa;Za=Ra;_a=Qa;$a=Sa}}else{bb=u;E=67}}else{bb=j;E=67}if((E|0)==67){E=Hc()|0;u=M;if((j|0)==(bb|0)){Ya=1;Za=u;_a=g;$a=E}else{Sa=bb;do{bb=Sa+-24|0;Qa=k[bb>>2]|0;if(Qa){Ra=Sa+-20|0;Pa=k[Ra>>2]|0;if((Pa|0)==(Qa|0))cb=Qa;else{ab=Sa+-16|0;Xa=Pa;do{Pa=Xa+-72|0;k[Ra>>2]=Pa;i[d>>0]=i[e>>0]|0;uF(d,ab,Pa);Xa=k[Ra>>2]|0}while((Xa|0)!=(Qa|0));cb=k[bb>>2]|0}OBa(cb)}Sa=Sa+-72|0}while((Sa|0)!=(j|0));Ya=1;Za=u;_a=g;$a=E}}if((g|0)==(_a|0)|Ya^1)Sc($a|0);Ya=_a;do{_a=Ya+-24|0;E=k[_a>>2]|0;if(E){u=Ya+-20|0;Za=k[u>>2]|0;if((Za|0)==(E|0))db=E;else{j=Ya+-16|0;Sa=Za;do{Za=Sa+-72|0;k[u>>2]=Za;i[d>>0]=i[e>>0]|0;uF(d,j,Za);Sa=k[u>>2]|0}while((Sa|0)!=(E|0));db=k[_a>>2]|0}OBa(db)}Ya=Ya+-72|0}while((Ya|0)!=(g|0));Sc($a|0)}function VF(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==218463?a+8|0:0)|0}function WF(a){a=a|0;return 2736}function XF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+192|0;f=k[e>>2]|0;if(f){g=a+196|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+200|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+120|0;e=k[j>>2]|0;if(e){f=a+124|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+128|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=a+48|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+52|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+56|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function YF(a){a=a|0;k[a>>2]=30224;fG(a+8|0);return}function ZF(a){a=a|0;k[a>>2]=30224;fG(a+8|0);OBa(a);return}function _F(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(224)|0;f=a+8|0;k[e>>2]=30224;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=e+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=e+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=e+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=e+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=e+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=b}else{g=e+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=e+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=b}}else{b=Hc()|0;s=M;t=b}b=k[j>>2]|0;if(b){a=e+60|0;u=k[a>>2]|0;if((u|0)==(b|0))v=b;else{p=e+64|0;f=u;do{u=f+-72|0;k[a>>2]=u;i[c>>0]=i[d>>0]|0;uF(c,p,u);f=k[a>>2]|0}while((f|0)!=(b|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;OBa(e);Sc(n|0);return 0}function $F(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=30224;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=b+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=b+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=b+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=b+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=b+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=c}else{g=b+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=b+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=c}}else{c=Hc()|0;s=M;t=c}c=k[j>>2]|0;if(c){a=b+60|0;u=k[a>>2]|0;if((u|0)==(c|0))v=c;else{p=b+64|0;b=u;do{u=b+-72|0;k[a>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,p,u);b=k[a>>2]|0}while((b|0)!=(c|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;Sc(n|0)}function aG(a){a=a|0;fG(a+8|0);return}function bG(a){a=a|0;fG(a+8|0);OBa(a);return}function cG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0;c=r;r=r+320|0;d=c+313|0;e=c+312|0;f=c+300|0;g=c+144|0;h=c+288|0;j=c;l=b+8|0;k[j>>2]=k[l>>2];i[j+4>>0]=i[l+4>>0]|0;l=j+8|0;m=l;n=b+16|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));p=j+48|0;x=0;xa(712,p|0,b+56|0);q=x;x=0;if(!(q&1)){q=j+60|0;s=b+68|0;t=k[s+4>>2]|0;u=q;k[u>>2]=k[s>>2];k[u+4>>2]=t;t=j+72|0;u=b+80|0;k[t>>2]=k[u>>2];i[t+4>>0]=i[u+4>>0]|0;u=j+80|0;m=u;n=b+88|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));s=j+120|0;x=0;xa(712,s|0,b+128|0);v=x;x=0;if(!(v&1)){v=j+132|0;w=b+140|0;y=k[w+4>>2]|0;z=v;k[z>>2]=k[w>>2];k[z+4>>2]=y;k[h>>2]=0;y=h+4|0;k[y>>2]=0;k[h+8>>2]=0;x=0;z=Ba(563,144)|0;w=x;x=0;a:do if(w&1){A=Hc()|0;B=A;C=M;D=76}else{k[y>>2]=z;k[h>>2]=z;A=z+144|0;k[h+8>>2]=A;k[z>>2]=k[j>>2];i[z+4>>0]=i[j+4>>0]|0;m=z+8|0;n=l;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,z+48|0,p|0);E=x;x=0;do if(E&1){F=Hc()|0;G=z;H=F;I=M}else{F=q;J=k[F+4>>2]|0;K=z+60|0;k[K>>2]=k[F>>2];k[K+4>>2]=J;J=z+72|0;k[y>>2]=J;k[J>>2]=k[t>>2];i[J+4>>0]=i[t+4>>0]|0;m=z+80|0;n=u;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,z+120|0,s|0);K=x;x=0;if(K&1){K=Hc()|0;F=M;L=J;while(1){N=L+-72|0;k[y>>2]=N;O=L+-24|0;P=k[O>>2]|0;if(!P)Q=N;else{R=L+-20|0;S=k[R>>2]|0;if((S|0)==(P|0)){T=N;U=P}else{N=L+-16|0;V=S;do{S=V+-72|0;k[R>>2]=S;i[d>>0]=i[e>>0]|0;uF(d,N,S);V=k[R>>2]|0}while((V|0)!=(P|0));T=k[y>>2]|0;U=k[O>>2]|0}OBa(U);Q=T}if((Q|0)==(z|0))break;else L=Q}G=k[h>>2]|0;H=K;I=F;break}L=v;J=k[L+4>>2]|0;P=z+132|0;k[P>>2]=k[L>>2];k[P+4>>2]=J;k[y>>2]=A;k[g>>2]=1;i[g+4>>0]=1;J=g+8|0;k[J>>2]=3;k[g+40>>2]=1;P=g+48|0;x=0;xa(712,P|0,h|0);L=x;x=0;if(!(L&1)){L=g+60|0;k[L>>2]=0;k[g+64>>2]=0;V=g+72|0;R=b+152|0;k[V>>2]=k[R>>2];i[V+4>>0]=i[R+4>>0]|0;R=g+80|0;m=R;n=b+160|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));F=g+120|0;x=0;xa(712,F|0,b+200|0);K=x;x=0;if(!(K&1)){K=g+132|0;N=b+212|0;S=k[N+4>>2]|0;W=K;k[W>>2]=k[N>>2];k[W+4>>2]=S;k[f>>2]=0;S=f+4|0;k[S>>2]=0;k[f+8>>2]=0;x=0;W=Ba(563,144)|0;N=x;x=0;b:do if(N&1){X=Hc()|0;Y=X;Z=M;D=78}else{k[S>>2]=W;k[f>>2]=W;X=W+144|0;k[f+8>>2]=X;k[W>>2]=k[g>>2];i[W+4>>0]=i[g+4>>0]|0;m=W+8|0;n=J;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,W+48|0,P|0);O=x;x=0;do if(O&1){_=Hc()|0;$=W;aa=_;ba=M}else{_=L;ca=k[_+4>>2]|0;da=W+60|0;k[da>>2]=k[_>>2];k[da+4>>2]=ca;ca=W+72|0;k[S>>2]=ca;k[ca>>2]=k[V>>2];i[ca+4>>0]=i[V+4>>0]|0;m=W+80|0;n=R;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,W+120|0,F|0);da=x;x=0;if(da&1){da=Hc()|0;_=M;ea=ca;while(1){fa=ea+-72|0;k[S>>2]=fa;ga=ea+-24|0;ha=k[ga>>2]|0;if(!ha)ia=fa;else{ja=ea+-20|0;ka=k[ja>>2]|0;if((ka|0)==(ha|0)){la=fa;ma=ha}else{fa=ea+-16|0;na=ka;do{ka=na+-72|0;k[ja>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,fa,ka);na=k[ja>>2]|0}while((na|0)!=(ha|0));la=k[S>>2]|0;ma=k[ga>>2]|0}OBa(ma);ia=la}if((ia|0)==(W|0))break;else ea=ia}$=k[f>>2]|0;aa=da;ba=_;break}ea=K;ca=k[ea+4>>2]|0;ha=W+132|0;k[ha>>2]=k[ea>>2];k[ha+4>>2]=ca;k[S>>2]=X;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=1;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);ca=x;x=0;if(ca&1){ca=Hc()|0;ha=M;ea=X;while(1){na=ea+-72|0;k[S>>2]=na;ja=ea+-24|0;fa=k[ja>>2]|0;if(!fa)oa=na;else{ka=ea+-20|0;pa=k[ka>>2]|0;if((pa|0)==(fa|0)){qa=na;ra=fa}else{na=ea+-16|0;sa=pa;do{pa=sa+-72|0;k[ka>>2]=pa;i[d>>0]=i[e>>0]|0;uF(d,na,pa);sa=k[ka>>2]|0}while((sa|0)!=(fa|0));qa=k[S>>2]|0;ra=k[ja>>2]|0}OBa(ra);oa=qa}if((oa|0)==(W|0))break;else ea=oa}OBa(k[f>>2]|0);ta=ha;ua=ca;break b}k[a+60>>2]=0;k[a+64>>2]=0;ea=X;while(1){_=ea+-72|0;k[S>>2]=_;da=ea+-24|0;fa=k[da>>2]|0;if(!fa)va=_;else{sa=ea+-20|0;ka=k[sa>>2]|0;if((ka|0)==(fa|0)){wa=_;ya=fa}else{_=ea+-16|0;na=ka;do{ka=na+-72|0;k[sa>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,_,ka);na=k[sa>>2]|0}while((na|0)!=(fa|0));wa=k[S>>2]|0;ya=k[da>>2]|0}OBa(ya);va=wa}if((va|0)==(W|0))break;else ea=va}OBa(k[f>>2]|0);ea=g+120|0;ca=k[ea>>2]|0;if(ca){ha=g+124|0;fa=k[ha>>2]|0;if((fa|0)==(ca|0))za=ca;else{na=g+128|0;sa=fa;do{fa=sa+-72|0;k[ha>>2]=fa;i[d>>0]=i[e>>0]|0;uF(d,na,fa);sa=k[ha>>2]|0}while((sa|0)!=(ca|0));za=k[ea>>2]|0}OBa(za)}ca=g+48|0;sa=k[ca>>2]|0;if(sa){ha=g+52|0;na=k[ha>>2]|0;if((na|0)==(sa|0))Aa=sa;else{fa=g+56|0;_=na;do{na=_+-72|0;k[ha>>2]=na;i[d>>0]=i[e>>0]|0;uF(d,fa,na);_=k[ha>>2]|0}while((_|0)!=(sa|0));Aa=k[ca>>2]|0}OBa(Aa)}sa=k[h>>2]|0;if(sa){_=k[y>>2]|0;if((_|0)==(sa|0))Ca=sa;else{ha=_;while(1){_=ha+-72|0;k[y>>2]=_;fa=ha+-24|0;ea=k[fa>>2]|0;if(!ea)Da=_;else{na=ha+-20|0;ja=k[na>>2]|0;if((ja|0)==(ea|0)){Ea=_;Fa=ea}else{_=ha+-16|0;ka=ja;do{ja=ka+-72|0;k[na>>2]=ja;i[d>>0]=i[e>>0]|0;uF(d,_,ja);ka=k[na>>2]|0}while((ka|0)!=(ea|0));Ea=k[y>>2]|0;Fa=k[fa>>2]|0}OBa(Fa);Da=Ea}if((Da|0)==(sa|0))break;else ha=Da}Ca=k[h>>2]|0}OBa(Ca)}ha=j+120|0;sa=k[ha>>2]|0;if(sa){ca=j+124|0;ea=k[ca>>2]|0;if((ea|0)==(sa|0))Ga=sa;else{ka=j+128|0;na=ea;do{ea=na+-72|0;k[ca>>2]=ea;i[d>>0]=i[e>>0]|0;uF(d,ka,ea);na=k[ca>>2]|0}while((na|0)!=(sa|0));Ga=k[ha>>2]|0}OBa(Ga)}sa=j+48|0;na=k[sa>>2]|0;if(!na){r=c;return}ca=j+52|0;ka=k[ca>>2]|0;if((ka|0)==(na|0))Ha=na;else{ea=j+56|0;_=ka;do{ka=_+-72|0;k[ca>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,ea,ka);_=k[ca>>2]|0}while((_|0)!=(na|0));Ha=k[sa>>2]|0}OBa(Ha);r=c;return}while(0);OBa($);Y=aa;Z=ba;D=78}while(0);if((D|0)==78){ta=Z;ua=Y}W=g+120|0;S=k[W>>2]|0;if(S){K=g+124|0;F=k[K>>2]|0;if((F|0)==(S|0))Ia=S;else{R=g+128|0;L=F;do{F=L+-72|0;k[K>>2]=F;i[d>>0]=i[e>>0]|0;uF(d,R,F);L=k[K>>2]|0}while((L|0)!=(S|0));Ia=k[W>>2]|0}OBa(Ia)}S=g+48|0;L=k[S>>2]|0;if(!L){Ja=0;Ka=V;La=ta;Ma=ua}else{K=g+52|0;R=k[K>>2]|0;if((R|0)==(L|0))Na=L;else{F=g+56|0;P=R;do{R=P+-72|0;k[K>>2]=R;i[d>>0]=i[e>>0]|0;uF(d,F,R);P=k[K>>2]|0}while((P|0)!=(L|0));Na=k[S>>2]|0}OBa(Na);Ja=0;Ka=V;La=ta;Ma=ua}}else{Oa=V;D=77}}else{Oa=g;D=77}if((D|0)==77){L=Hc()|0;Ja=1;Ka=Oa;La=M;Ma=L}L=k[h>>2]|0;if(!L){Pa=Ja;Qa=Ka;Ra=La;Sa=Ma;break a}P=k[y>>2]|0;if((P|0)==(L|0))Ta=L;else{K=P;while(1){P=K+-72|0;k[y>>2]=P;F=K+-24|0;W=k[F>>2]|0;if(!W)Ua=P;else{R=K+-20|0;J=k[R>>2]|0;if((J|0)==(W|0)){Va=P;Wa=W}else{P=K+-16|0;N=J;do{J=N+-72|0;k[R>>2]=J;i[d>>0]=i[e>>0]|0;uF(d,P,J);N=k[R>>2]|0}while((N|0)!=(W|0));Va=k[y>>2]|0;Wa=k[F>>2]|0}OBa(Wa);Ua=Va}if((Ua|0)==(L|0))break;else K=Ua}Ta=k[h>>2]|0}OBa(Ta);Pa=Ja;Qa=Ka;Ra=La;Sa=Ma;break a}while(0);OBa(G);B=H;C=I;D=76}while(0);if((D|0)==76){Pa=1;Qa=g;Ra=C;Sa=B}B=j+120|0;C=k[B>>2]|0;if(C){I=j+124|0;H=k[I>>2]|0;if((H|0)==(C|0))Xa=C;else{G=j+128|0;Ma=H;do{H=Ma+-72|0;k[I>>2]=H;i[d>>0]=i[e>>0]|0;uF(d,G,H);Ma=k[I>>2]|0}while((Ma|0)!=(C|0));Xa=k[B>>2]|0}OBa(Xa)}Xa=j+48|0;B=k[Xa>>2]|0;if(!B){Ya=Pa;Za=Ra;_a=Qa;$a=Sa}else{C=j+52|0;Ma=k[C>>2]|0;if((Ma|0)==(B|0))ab=B;else{I=j+56|0;G=Ma;do{Ma=G+-72|0;k[C>>2]=Ma;i[d>>0]=i[e>>0]|0;uF(d,I,Ma);G=k[C>>2]|0}while((G|0)!=(B|0));ab=k[Xa>>2]|0}OBa(ab);Ya=Pa;Za=Ra;_a=Qa;$a=Sa}}else{bb=t;D=67}}else{bb=j;D=67}if((D|0)==67){D=Hc()|0;t=M;if((j|0)==(bb|0)){Ya=1;Za=t;_a=g;$a=D}else{Sa=bb;do{bb=Sa+-24|0;Qa=k[bb>>2]|0;if(Qa){Ra=Sa+-20|0;Pa=k[Ra>>2]|0;if((Pa|0)==(Qa|0))cb=Qa;else{ab=Sa+-16|0;Xa=Pa;do{Pa=Xa+-72|0;k[Ra>>2]=Pa;i[d>>0]=i[e>>0]|0;uF(d,ab,Pa);Xa=k[Ra>>2]|0}while((Xa|0)!=(Qa|0));cb=k[bb>>2]|0}OBa(cb)}Sa=Sa+-72|0}while((Sa|0)!=(j|0));Ya=1;Za=t;_a=g;$a=D}}if((g|0)==(_a|0)|Ya^1)Sc($a|0);Ya=_a;do{_a=Ya+-24|0;D=k[_a>>2]|0;if(D){t=Ya+-20|0;Za=k[t>>2]|0;if((Za|0)==(D|0))db=D;else{j=Ya+-16|0;Sa=Za;do{Za=Sa+-72|0;k[t>>2]=Za;i[d>>0]=i[e>>0]|0;uF(d,j,Za);Sa=k[t>>2]|0}while((Sa|0)!=(D|0));db=k[_a>>2]|0}OBa(db)}Ya=Ya+-72|0}while((Ya|0)!=(g|0));Sc($a|0)}function dG(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==218570?a+8|0:0)|0}function eG(a){a=a|0;return 2760}function fG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+192|0;f=k[e>>2]|0;if(f){g=a+196|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+200|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+120|0;e=k[j>>2]|0;if(e){f=a+124|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+128|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=a+48|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+52|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+56|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function gG(a){a=a|0;k[a>>2]=30180;pG(a+8|0);return}function hG(a){a=a|0;k[a>>2]=30180;pG(a+8|0);OBa(a);return}function iG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(224)|0;f=a+8|0;k[e>>2]=30180;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=e+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=e+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=e+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=e+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=e+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=b}else{g=e+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=e+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=b}}else{b=Hc()|0;s=M;t=b}b=k[j>>2]|0;if(b){a=e+60|0;u=k[a>>2]|0;if((u|0)==(b|0))v=b;else{p=e+64|0;f=u;do{u=f+-72|0;k[a>>2]=u;i[c>>0]=i[d>>0]|0;uF(c,p,u);f=k[a>>2]|0}while((f|0)!=(b|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;OBa(e);Sc(n|0);return 0}function jG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=30180;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=b+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=b+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=b+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=b+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=b+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=c}else{g=b+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=b+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=c}}else{c=Hc()|0;s=M;t=c}c=k[j>>2]|0;if(c){a=b+60|0;u=k[a>>2]|0;if((u|0)==(c|0))v=c;else{p=b+64|0;b=u;do{u=b+-72|0;k[a>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,p,u);b=k[a>>2]|0}while((b|0)!=(c|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;Sc(n|0)}function kG(a){a=a|0;pG(a+8|0);return}function lG(a){a=a|0;pG(a+8|0);OBa(a);return}function mG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0;c=r;r=r+320|0;d=c+313|0;e=c+312|0;f=c+300|0;g=c+144|0;h=c+288|0;j=c;l=b+8|0;k[j>>2]=k[l>>2];i[j+4>>0]=i[l+4>>0]|0;l=j+8|0;m=l;n=b+16|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));p=j+48|0;x=0;xa(712,p|0,b+56|0);q=x;x=0;if(!(q&1)){q=j+60|0;s=b+68|0;t=k[s+4>>2]|0;u=q;k[u>>2]=k[s>>2];k[u+4>>2]=t;t=j+72|0;u=b+80|0;k[t>>2]=k[u>>2];i[t+4>>0]=i[u+4>>0]|0;u=j+80|0;m=u;n=b+88|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));s=j+120|0;x=0;xa(712,s|0,b+128|0);v=x;x=0;if(!(v&1)){v=j+132|0;w=b+140|0;y=k[w+4>>2]|0;z=v;k[z>>2]=k[w>>2];k[z+4>>2]=y;k[h>>2]=0;y=h+4|0;k[y>>2]=0;k[h+8>>2]=0;x=0;z=Ba(563,144)|0;w=x;x=0;a:do if(w&1){A=Hc()|0;B=A;C=M;D=76}else{k[y>>2]=z;k[h>>2]=z;A=z+144|0;k[h+8>>2]=A;k[z>>2]=k[j>>2];i[z+4>>0]=i[j+4>>0]|0;m=z+8|0;n=l;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,z+48|0,p|0);E=x;x=0;do if(E&1){F=Hc()|0;G=z;H=F;I=M}else{F=q;J=k[F+4>>2]|0;K=z+60|0;k[K>>2]=k[F>>2];k[K+4>>2]=J;J=z+72|0;k[y>>2]=J;k[J>>2]=k[t>>2];i[J+4>>0]=i[t+4>>0]|0;m=z+80|0;n=u;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,z+120|0,s|0);K=x;x=0;if(K&1){K=Hc()|0;F=M;L=J;while(1){N=L+-72|0;k[y>>2]=N;O=L+-24|0;P=k[O>>2]|0;if(!P)Q=N;else{R=L+-20|0;S=k[R>>2]|0;if((S|0)==(P|0)){T=N;U=P}else{N=L+-16|0;V=S;do{S=V+-72|0;k[R>>2]=S;i[d>>0]=i[e>>0]|0;uF(d,N,S);V=k[R>>2]|0}while((V|0)!=(P|0));T=k[y>>2]|0;U=k[O>>2]|0}OBa(U);Q=T}if((Q|0)==(z|0))break;else L=Q}G=k[h>>2]|0;H=K;I=F;break}L=v;J=k[L+4>>2]|0;P=z+132|0;k[P>>2]=k[L>>2];k[P+4>>2]=J;k[y>>2]=A;k[g>>2]=1;i[g+4>>0]=1;J=g+8|0;k[J>>2]=3;k[g+40>>2]=1;P=g+48|0;x=0;xa(712,P|0,h|0);L=x;x=0;if(!(L&1)){L=g+60|0;k[L>>2]=0;k[g+64>>2]=0;V=g+72|0;R=b+152|0;k[V>>2]=k[R>>2];i[V+4>>0]=i[R+4>>0]|0;R=g+80|0;m=R;n=b+160|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));F=g+120|0;x=0;xa(712,F|0,b+200|0);K=x;x=0;if(!(K&1)){K=g+132|0;N=b+212|0;S=k[N+4>>2]|0;W=K;k[W>>2]=k[N>>2];k[W+4>>2]=S;k[f>>2]=0;S=f+4|0;k[S>>2]=0;k[f+8>>2]=0;x=0;W=Ba(563,144)|0;N=x;x=0;b:do if(N&1){X=Hc()|0;Y=X;Z=M;D=78}else{k[S>>2]=W;k[f>>2]=W;X=W+144|0;k[f+8>>2]=X;k[W>>2]=k[g>>2];i[W+4>>0]=i[g+4>>0]|0;m=W+8|0;n=J;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,W+48|0,P|0);O=x;x=0;do if(O&1){_=Hc()|0;$=W;aa=_;ba=M}else{_=L;ca=k[_+4>>2]|0;da=W+60|0;k[da>>2]=k[_>>2];k[da+4>>2]=ca;ca=W+72|0;k[S>>2]=ca;k[ca>>2]=k[V>>2];i[ca+4>>0]=i[V+4>>0]|0;m=W+80|0;n=R;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,W+120|0,F|0);da=x;x=0;if(da&1){da=Hc()|0;_=M;ea=ca;while(1){fa=ea+-72|0;k[S>>2]=fa;ga=ea+-24|0;ha=k[ga>>2]|0;if(!ha)ia=fa;else{ja=ea+-20|0;ka=k[ja>>2]|0;if((ka|0)==(ha|0)){la=fa;ma=ha}else{fa=ea+-16|0;na=ka;do{ka=na+-72|0;k[ja>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,fa,ka);na=k[ja>>2]|0}while((na|0)!=(ha|0));la=k[S>>2]|0;ma=k[ga>>2]|0}OBa(ma);ia=la}if((ia|0)==(W|0))break;else ea=ia}$=k[f>>2]|0;aa=da;ba=_;break}ea=K;ca=k[ea+4>>2]|0;ha=W+132|0;k[ha>>2]=k[ea>>2];k[ha+4>>2]=ca;k[S>>2]=X;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=1;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);ca=x;x=0;if(ca&1){ca=Hc()|0;ha=M;ea=X;while(1){na=ea+-72|0;k[S>>2]=na;ja=ea+-24|0;fa=k[ja>>2]|0;if(!fa)oa=na;else{ka=ea+-20|0;pa=k[ka>>2]|0;if((pa|0)==(fa|0)){qa=na;ra=fa}else{na=ea+-16|0;sa=pa;do{pa=sa+-72|0;k[ka>>2]=pa;i[d>>0]=i[e>>0]|0;uF(d,na,pa);sa=k[ka>>2]|0}while((sa|0)!=(fa|0));qa=k[S>>2]|0;ra=k[ja>>2]|0}OBa(ra);oa=qa}if((oa|0)==(W|0))break;else ea=oa}OBa(k[f>>2]|0);ta=ha;ua=ca;break b}k[a+60>>2]=0;k[a+64>>2]=0;ea=X;while(1){_=ea+-72|0;k[S>>2]=_;da=ea+-24|0;fa=k[da>>2]|0;if(!fa)va=_;else{sa=ea+-20|0;ka=k[sa>>2]|0;if((ka|0)==(fa|0)){wa=_;ya=fa}else{_=ea+-16|0;na=ka;do{ka=na+-72|0;k[sa>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,_,ka);na=k[sa>>2]|0}while((na|0)!=(fa|0));wa=k[S>>2]|0;ya=k[da>>2]|0}OBa(ya);va=wa}if((va|0)==(W|0))break;else ea=va}OBa(k[f>>2]|0);ea=g+120|0;ca=k[ea>>2]|0;if(ca){ha=g+124|0;fa=k[ha>>2]|0;if((fa|0)==(ca|0))za=ca;else{na=g+128|0;sa=fa;do{fa=sa+-72|0;k[ha>>2]=fa;i[d>>0]=i[e>>0]|0;uF(d,na,fa);sa=k[ha>>2]|0}while((sa|0)!=(ca|0));za=k[ea>>2]|0}OBa(za)}ca=g+48|0;sa=k[ca>>2]|0;if(sa){ha=g+52|0;na=k[ha>>2]|0;if((na|0)==(sa|0))Aa=sa;else{fa=g+56|0;_=na;do{na=_+-72|0;k[ha>>2]=na;i[d>>0]=i[e>>0]|0;uF(d,fa,na);_=k[ha>>2]|0}while((_|0)!=(sa|0));Aa=k[ca>>2]|0}OBa(Aa)}sa=k[h>>2]|0;if(sa){_=k[y>>2]|0;if((_|0)==(sa|0))Ca=sa;else{ha=_;while(1){_=ha+-72|0;k[y>>2]=_;fa=ha+-24|0;ea=k[fa>>2]|0;if(!ea)Da=_;else{na=ha+-20|0;ja=k[na>>2]|0;if((ja|0)==(ea|0)){Ea=_;Fa=ea}else{_=ha+-16|0;ka=ja;do{ja=ka+-72|0;k[na>>2]=ja;i[d>>0]=i[e>>0]|0;uF(d,_,ja);ka=k[na>>2]|0}while((ka|0)!=(ea|0));Ea=k[y>>2]|0;Fa=k[fa>>2]|0}OBa(Fa);Da=Ea}if((Da|0)==(sa|0))break;else ha=Da}Ca=k[h>>2]|0}OBa(Ca)}ha=j+120|0;sa=k[ha>>2]|0;if(sa){ca=j+124|0;ea=k[ca>>2]|0;if((ea|0)==(sa|0))Ga=sa;else{ka=j+128|0;na=ea;do{ea=na+-72|0;k[ca>>2]=ea;i[d>>0]=i[e>>0]|0;uF(d,ka,ea);na=k[ca>>2]|0}while((na|0)!=(sa|0));Ga=k[ha>>2]|0}OBa(Ga)}sa=j+48|0;na=k[sa>>2]|0;if(!na){r=c;return}ca=j+52|0;ka=k[ca>>2]|0;if((ka|0)==(na|0))Ha=na;else{ea=j+56|0;_=ka;do{ka=_+-72|0;k[ca>>2]=ka;i[d>>0]=i[e>>0]|0;uF(d,ea,ka);_=k[ca>>2]|0}while((_|0)!=(na|0));Ha=k[sa>>2]|0}OBa(Ha);r=c;return}while(0);OBa($);Y=aa;Z=ba;D=78}while(0);if((D|0)==78){ta=Z;ua=Y}W=g+120|0;S=k[W>>2]|0;if(S){K=g+124|0;F=k[K>>2]|0;if((F|0)==(S|0))Ia=S;else{R=g+128|0;L=F;do{F=L+-72|0;k[K>>2]=F;i[d>>0]=i[e>>0]|0;uF(d,R,F);L=k[K>>2]|0}while((L|0)!=(S|0));Ia=k[W>>2]|0}OBa(Ia)}S=g+48|0;L=k[S>>2]|0;if(!L){Ja=0;Ka=V;La=ta;Ma=ua}else{K=g+52|0;R=k[K>>2]|0;if((R|0)==(L|0))Na=L;else{F=g+56|0;P=R;do{R=P+-72|0;k[K>>2]=R;i[d>>0]=i[e>>0]|0;uF(d,F,R);P=k[K>>2]|0}while((P|0)!=(L|0));Na=k[S>>2]|0}OBa(Na);Ja=0;Ka=V;La=ta;Ma=ua}}else{Oa=V;D=77}}else{Oa=g;D=77}if((D|0)==77){L=Hc()|0;Ja=1;Ka=Oa;La=M;Ma=L}L=k[h>>2]|0;if(!L){Pa=Ja;Qa=Ka;Ra=La;Sa=Ma;break a}P=k[y>>2]|0;if((P|0)==(L|0))Ta=L;else{K=P;while(1){P=K+-72|0;k[y>>2]=P;F=K+-24|0;W=k[F>>2]|0;if(!W)Ua=P;else{R=K+-20|0;J=k[R>>2]|0;if((J|0)==(W|0)){Va=P;Wa=W}else{P=K+-16|0;N=J;do{J=N+-72|0;k[R>>2]=J;i[d>>0]=i[e>>0]|0;uF(d,P,J);N=k[R>>2]|0}while((N|0)!=(W|0));Va=k[y>>2]|0;Wa=k[F>>2]|0}OBa(Wa);Ua=Va}if((Ua|0)==(L|0))break;else K=Ua}Ta=k[h>>2]|0}OBa(Ta);Pa=Ja;Qa=Ka;Ra=La;Sa=Ma;break a}while(0);OBa(G);B=H;C=I;D=76}while(0);if((D|0)==76){Pa=1;Qa=g;Ra=C;Sa=B}B=j+120|0;C=k[B>>2]|0;if(C){I=j+124|0;H=k[I>>2]|0;if((H|0)==(C|0))Xa=C;else{G=j+128|0;Ma=H;do{H=Ma+-72|0;k[I>>2]=H;i[d>>0]=i[e>>0]|0;uF(d,G,H);Ma=k[I>>2]|0}while((Ma|0)!=(C|0));Xa=k[B>>2]|0}OBa(Xa)}Xa=j+48|0;B=k[Xa>>2]|0;if(!B){Ya=Pa;Za=Ra;_a=Qa;$a=Sa}else{C=j+52|0;Ma=k[C>>2]|0;if((Ma|0)==(B|0))ab=B;else{I=j+56|0;G=Ma;do{Ma=G+-72|0;k[C>>2]=Ma;i[d>>0]=i[e>>0]|0;uF(d,I,Ma);G=k[C>>2]|0}while((G|0)!=(B|0));ab=k[Xa>>2]|0}OBa(ab);Ya=Pa;Za=Ra;_a=Qa;$a=Sa}}else{bb=t;D=67}}else{bb=j;D=67}if((D|0)==67){D=Hc()|0;t=M;if((j|0)==(bb|0)){Ya=1;Za=t;_a=g;$a=D}else{Sa=bb;do{bb=Sa+-24|0;Qa=k[bb>>2]|0;if(Qa){Ra=Sa+-20|0;Pa=k[Ra>>2]|0;if((Pa|0)==(Qa|0))cb=Qa;else{ab=Sa+-16|0;Xa=Pa;do{Pa=Xa+-72|0;k[Ra>>2]=Pa;i[d>>0]=i[e>>0]|0;uF(d,ab,Pa);Xa=k[Ra>>2]|0}while((Xa|0)!=(Qa|0));cb=k[bb>>2]|0}OBa(cb)}Sa=Sa+-72|0}while((Sa|0)!=(j|0));Ya=1;Za=t;_a=g;$a=D}}if((g|0)==(_a|0)|Ya^1)Sc($a|0);Ya=_a;do{_a=Ya+-24|0;D=k[_a>>2]|0;if(D){t=Ya+-20|0;Za=k[t>>2]|0;if((Za|0)==(D|0))db=D;else{j=Ya+-16|0;Sa=Za;do{Za=Sa+-72|0;k[t>>2]=Za;i[d>>0]=i[e>>0]|0;uF(d,j,Za);Sa=k[t>>2]|0}while((Sa|0)!=(D|0));db=k[_a>>2]|0}OBa(db)}Ya=Ya+-72|0}while((Ya|0)!=(g|0));Sc($a|0)}function nG(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==218677?a+8|0:0)|0}function oG(a){a=a|0;return 2784}function pG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+192|0;f=k[e>>2]|0;if(f){g=a+196|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+200|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+120|0;e=k[j>>2]|0;if(e){f=a+124|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+128|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=a+48|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+52|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+56|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function qG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=30136;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function rG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=30136;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function sG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=30136;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function tG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=30136;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function uG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function vG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function wG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;c=r;r=r+288|0;d=c+224|0;e=c+184|0;f=c+264|0;g=c+40|0;h=c;j=b+8|0;k[g>>2]=k[j>>2];i[g+4>>0]=i[j+4>>0]|0;j=g+8|0;l=j;m=b+16|0;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));o=g+48|0;x=0;xa(712,o|0,b+56|0);p=x;x=0;if(!(p&1)){p=g+60|0;q=b+68|0;s=k[q+4>>2]|0;t=p;k[t>>2]=k[q>>2];k[t+4>>2]=s;s=g+72|0;x=0;t=Ba(590,b+80|0)|0;b=x;x=0;if(b&1)u=s;else{b=k[t+4>>2]|0;k[e>>2]=0;k[e+32>>2]=1;k[d>>2]=0;k[d+32>>2]=1;qC(e,d,b+8|0);l=h;m=e;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));k[s>>2]=2;i[g+76>>0]=1;b=g+80|0;l=b;m=h;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));h=g+120|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;k[f>>2]=0;t=f+4|0;k[t>>2]=0;k[f+8>>2]=0;x=0;q=Ba(563,144)|0;v=x;x=0;a:do if(v&1){w=Hc()|0;y=w;z=M;A=42}else{k[t>>2]=q;k[f>>2]=q;w=q+144|0;k[f+8>>2]=w;k[q>>2]=k[g>>2];i[q+4>>0]=i[g+4>>0]|0;l=q+8|0;m=j;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));x=0;xa(712,q+48|0,o|0);B=x;x=0;do if(B&1){C=Hc()|0;D=q;E=C;F=M}else{C=p;G=k[C+4>>2]|0;H=q+60|0;k[H>>2]=k[C>>2];k[H+4>>2]=G;G=q+72|0;k[t>>2]=G;k[G>>2]=k[s>>2];i[G+4>>0]=i[s+4>>0]|0;l=q+80|0;m=b;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));x=0;xa(712,q+120|0,g+120|0);H=x;x=0;if(H&1){H=Hc()|0;C=M;I=G;while(1){J=I+-72|0;k[t>>2]=J;K=I+-24|0;L=k[K>>2]|0;if(!L)N=J;else{O=I+-20|0;P=k[O>>2]|0;if((P|0)==(L|0)){Q=J;R=L}else{J=I+-16|0;S=P;do{P=S+-72|0;k[O>>2]=P;i[d>>0]=i[e>>0]|0;uF(d,J,P);S=k[O>>2]|0}while((S|0)!=(L|0));Q=k[t>>2]|0;R=k[K>>2]|0}OBa(R);N=Q}if((N|0)==(q|0))break;else I=N}D=k[f>>2]|0;E=H;F=C;break}I=g+132|0;G=k[I+4>>2]|0;L=q+132|0;k[L>>2]=k[I>>2];k[L+4>>2]=G;k[t>>2]=w;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=1;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);G=x;x=0;if(G&1){G=Hc()|0;L=M;I=w;while(1){S=I+-72|0;k[t>>2]=S;O=I+-24|0;J=k[O>>2]|0;if(!J)T=S;else{P=I+-20|0;U=k[P>>2]|0;if((U|0)==(J|0)){V=S;W=J}else{S=I+-16|0;X=U;do{U=X+-72|0;k[P>>2]=U;i[d>>0]=i[e>>0]|0;uF(d,S,U);X=k[P>>2]|0}while((X|0)!=(J|0));V=k[t>>2]|0;W=k[O>>2]|0}OBa(W);T=V}if((T|0)==(q|0))break;else I=T}OBa(k[f>>2]|0);Y=L;Z=G;break a}k[a+60>>2]=0;k[a+64>>2]=0;I=w;while(1){C=I+-72|0;k[t>>2]=C;H=I+-24|0;J=k[H>>2]|0;if(!J)_=C;else{X=I+-20|0;P=k[X>>2]|0;if((P|0)==(J|0)){$=C;aa=J}else{C=I+-16|0;S=P;do{P=S+-72|0;k[X>>2]=P;i[d>>0]=i[e>>0]|0;uF(d,C,P);S=k[X>>2]|0}while((S|0)!=(J|0));$=k[t>>2]|0;aa=k[H>>2]|0}OBa(aa);_=$}if((_|0)==(q|0))break;else I=_}OBa(k[f>>2]|0);I=k[h>>2]|0;if(I){G=g+124|0;L=k[G>>2]|0;if((L|0)==(I|0))ba=I;else{J=g+128|0;S=L;do{L=S+-72|0;k[G>>2]=L;i[d>>0]=i[e>>0]|0;uF(d,J,L);S=k[G>>2]|0}while((S|0)!=(I|0));ba=k[h>>2]|0}OBa(ba)}I=g+48|0;S=k[I>>2]|0;if(!S){r=c;return}G=g+52|0;J=k[G>>2]|0;if((J|0)==(S|0))ca=S;else{L=g+56|0;X=J;do{J=X+-72|0;k[G>>2]=J;i[d>>0]=i[e>>0]|0;uF(d,L,J);X=k[G>>2]|0}while((X|0)!=(S|0));ca=k[I>>2]|0}OBa(ca);r=c;return}while(0);OBa(D);y=E;z=F;A=42}while(0);if((A|0)==42){Y=z;Z=y}y=k[h>>2]|0;if(y){z=g+124|0;A=k[z>>2]|0;if((A|0)==(y|0))da=y;else{F=g+128|0;E=A;do{A=E+-72|0;k[z>>2]=A;i[d>>0]=i[e>>0]|0;uF(d,F,A);E=k[z>>2]|0}while((E|0)!=(y|0));da=k[h>>2]|0}OBa(da)}da=g+48|0;h=k[da>>2]|0;if(!h){ea=Y;fa=Z;Sc(fa|0)}y=g+52|0;E=k[y>>2]|0;if((E|0)==(h|0))ga=h;else{z=g+56|0;F=E;do{E=F+-72|0;k[y>>2]=E;i[d>>0]=i[e>>0]|0;uF(d,z,E);F=k[y>>2]|0}while((F|0)!=(h|0));ga=k[da>>2]|0}OBa(ga);ea=Y;fa=Z;Sc(fa|0)}}else u=g;Z=Hc()|0;Y=M;if((g|0)==(u|0)){ea=Y;fa=Z;Sc(fa|0)}ga=u;do{u=ga+-24|0;da=k[u>>2]|0;if(da){h=ga+-20|0;F=k[h>>2]|0;if((F|0)==(da|0))ha=da;else{y=ga+-16|0;z=F;do{F=z+-72|0;k[h>>2]=F;i[d>>0]=i[e>>0]|0;uF(d,y,F);z=k[h>>2]|0}while((z|0)!=(da|0));ha=k[u>>2]|0}OBa(ha)}ga=ga+-72|0}while((ga|0)!=(g|0));ea=Y;fa=Z;Sc(fa|0)}function xG(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==218784?a+8|0:0)|0}function yG(a){a=a|0;return 2808}function zG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+4|0;g=k[a>>2]|0;h=(((k[f>>2]|0)-g|0)/96|0)+1|0;if(h>>>0>44739242){HBa(a);j=k[a>>2]|0}else j=g;g=a+8|0;l=((k[g>>2]|0)-j|0)/96|0;if(l>>>0<22369621){m=l<<1;l=m>>>0>>0?h:m;m=((k[f>>2]|0)-j|0)/96|0;if(!l){n=0;o=0;p=m}else{q=l;s=m;t=6}}else{q=44739242;s=((k[f>>2]|0)-j|0)/96|0;t=6}if((t|0)==6){n=q;o=KBa(q*96|0)|0;p=s}s=o+(p*96|0)|0;q=s;j=o+(n*96|0)|0;k[s>>2]=k[b>>2];i[s+4>>0]=i[b+4>>0]|0;n=o+(p*96|0)+8|0;m=b+8|0;l=n+40|0;do{k[n>>2]=k[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(l|0));x=0;xa(712,o+(p*96|0)+48|0,b+48|0);h=x;x=0;a:do if(h&1){u=Hc()|0;v=M;if(!o){w=v;y=u;Sc(y|0)}else{z=v;A=u}}else{u=b+60|0;v=k[u+4>>2]|0;B=o+(p*96|0)+60|0;k[B>>2]=k[u>>2];k[B+4>>2]=v;v=o+(p*96|0)+72|0;B=k[b+88>>2]|0;do if(!B)k[o+(p*96|0)+88>>2]=0;else{if((B|0)==(b+72|0)){k[o+(p*96|0)+88>>2]=v;x=0;xa(k[(k[B>>2]|0)+12>>2]|0,B|0,v|0);u=x;x=0;if(!(u&1))break}else{x=0;u=Ba(k[(k[B>>2]|0)+8>>2]|0,B|0)|0;C=x;x=0;if(!(C&1)){k[o+(p*96|0)+88>>2]=u;break}}u=Hc()|0;C=M;D=o+(p*96|0)+48|0;E=k[D>>2]|0;if(!E){z=C;A=u;break a}F=o+(p*96|0)+52|0;G=k[F>>2]|0;if((G|0)==(E|0))H=E;else{I=o+(p*96|0)+56|0;J=G;do{G=J+-72|0;k[F>>2]=G;i[d>>0]=i[e>>0]|0;uF(d,I,G);J=k[F>>2]|0}while((J|0)!=(E|0));H=k[D>>2]|0}OBa(H);z=C;A=u;break a}while(0);B=s+96|0;v=k[a>>2]|0;E=k[f>>2]|0;do if((E|0)!=(v|0)){J=E;F=q;I=s;b:while(1){G=I+-96|0;K=J;J=J+-96|0;k[G>>2]=k[J>>2];i[G+4>>0]=i[J+4>>0]|0;n=I+-88|0;m=K+-88|0;l=n+40|0;do{k[n>>2]=k[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(l|0));G=I+-48|0;L=K+-48|0;k[G>>2]=0;N=I+-44|0;k[N>>2]=0;k[I+-40>>2]=0;k[G>>2]=k[L>>2];G=K+-44|0;k[N>>2]=k[G>>2];N=K+-40|0;k[I+-40>>2]=k[N>>2];k[N>>2]=0;k[G>>2]=0;k[L>>2]=0;L=K+-36|0;G=k[L+4>>2]|0;N=I+-36|0;k[N>>2]=k[L>>2];k[N+4>>2]=G;G=I+-24|0;N=K+-8|0;L=k[N>>2]|0;do if(L)if((L|0)==(K+-24|0)){k[I+-8>>2]=G;O=k[N>>2]|0;x=0;xa(k[(k[O>>2]|0)+12>>2]|0,O|0,G|0);O=x;x=0;if(O&1){t=27;break b}else break}else{k[I+-8>>2]=L;k[N>>2]=0;break}else k[I+-8>>2]=0;while(0);I=F+-96|0;N=I;if((J|0)==(v|0)){P=N;t=29;break}else F=N}if((t|0)==27){F=Hc(0)|0;Fg(F)}else if((t|0)==29){Q=P;R=k[a>>2]|0;S=k[f>>2]|0;break}}else{Q=q;R=v;S=v}while(0);k[a>>2]=Q;k[f>>2]=B;k[g>>2]=j;v=R;if((S|0)!=(v|0)){E=S;do{F=k[E+-8>>2]|0;if((F|0)!=(E+-24|0)){if(F)Sf[k[(k[F>>2]|0)+20>>2]&2047](F)}else Sf[k[(k[F>>2]|0)+16>>2]&2047](F);F=E+-48|0;J=k[F>>2]|0;if(J){I=E+-44|0;u=k[I>>2]|0;if((u|0)==(J|0))T=J;else{C=E+-40|0;D=u;do{u=D+-72|0;k[I>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,C,u);D=k[I>>2]|0}while((D|0)!=(J|0));T=k[F>>2]|0}OBa(T)}E=E+-96|0}while((E|0)!=(v|0))}if(!R){r=c;return}OBa(R);r=c;return}while(0);OBa(o);w=z;y=A;Sc(y|0)}function AG(a){a=a|0;k[a>>2]=30092;JG(a+8|0);return}function BG(a){a=a|0;k[a>>2]=30092;JG(a+8|0);OBa(a);return}function CG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(232)|0;k[e>>2]=30092;i[e+8>>0]=i[a+8>>0]|0;f=e+16|0;g=a+16|0;k[f>>2]=k[g>>2];i[f+4>>0]=i[g+4>>0]|0;g=e+24|0;f=a+24|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));j=e+64|0;x=0;xa(712,j|0,a+64|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+76|0;o=k[l+4>>2]|0;p=e+76|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+88|0;p=a+88|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;g=e+96|0;f=a+96|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));p=e+136|0;x=0;xa(712,p|0,a+136|0);o=x;x=0;if(!(o&1)){o=a+148|0;l=k[o+4>>2]|0;q=e+148|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=e+160|0;q=a+160|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;g=e+168|0;f=a+168|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,e+208|0,a+208|0);f=x;x=0;if(!(f&1)){f=a+220|0;a=k[f+4>>2]|0;g=e+220|0;k[g>>2]=k[f>>2];k[g+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;g=k[p>>2]|0;if(!g){s=a;t=b}else{f=e+140|0;h=k[f>>2]|0;if((h|0)==(g|0))u=g;else{q=e+144|0;l=h;do{h=l+-72|0;k[f>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,q,h);l=k[f>>2]|0}while((l|0)!=(g|0));u=k[p>>2]|0}OBa(u);s=a;t=b}}else{b=Hc()|0;s=M;t=b}b=k[j>>2]|0;if(b){a=e+68|0;u=k[a>>2]|0;if((u|0)==(b|0))v=b;else{p=e+72|0;g=u;do{u=g+-72|0;k[a>>2]=u;i[c>>0]=i[d>>0]|0;uF(c,p,u);g=k[a>>2]|0}while((g|0)!=(b|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;OBa(e);Sc(n|0);return 0}function DG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c+1|0;e=c;k[b>>2]=30092;i[b+8>>0]=i[a+8>>0]|0;f=b+16|0;g=a+16|0;k[f>>2]=k[g>>2];i[f+4>>0]=i[g+4>>0]|0;g=b+24|0;f=a+24|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));j=b+64|0;x=0;xa(712,j|0,a+64|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+76|0;o=k[l+4>>2]|0;p=b+76|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+88|0;p=a+88|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;g=b+96|0;f=a+96|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));p=b+136|0;x=0;xa(712,p|0,a+136|0);o=x;x=0;if(!(o&1)){o=a+148|0;l=k[o+4>>2]|0;q=b+148|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=b+160|0;q=a+160|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;g=b+168|0;f=a+168|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,b+208|0,a+208|0);f=x;x=0;if(!(f&1)){f=a+220|0;a=k[f+4>>2]|0;g=b+220|0;k[g>>2]=k[f>>2];k[g+4>>2]=a;r=c;return}c=Hc()|0;a=M;g=k[p>>2]|0;if(!g){s=a;t=c}else{f=b+140|0;h=k[f>>2]|0;if((h|0)==(g|0))u=g;else{q=b+144|0;l=h;do{h=l+-72|0;k[f>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,q,h);l=k[f>>2]|0}while((l|0)!=(g|0));u=k[p>>2]|0}OBa(u);s=a;t=c}}else{c=Hc()|0;s=M;t=c}c=k[j>>2]|0;if(c){a=b+68|0;u=k[a>>2]|0;if((u|0)==(c|0))v=c;else{p=b+72|0;b=u;do{u=b+-72|0;k[a>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,p,u);b=k[a>>2]|0}while((b|0)!=(c|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;Sc(n|0)}function EG(a){a=a|0;JG(a+8|0);return}function FG(a){a=a|0;JG(a+8|0);OBa(a);return}function GG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0;c=r;r=r+320|0;d=c+313|0;e=c+312|0;f=c+300|0;g=c+144|0;h=c+288|0;j=c;l=i[b+8>>0]|0;m=b+16|0;k[j>>2]=k[m>>2];i[j+4>>0]=i[m+4>>0]|0;m=j+8|0;n=m;o=b+24|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));q=j+48|0;x=0;xa(712,q|0,b+64|0);s=x;x=0;if(!(s&1)){s=j+60|0;t=b+76|0;u=k[t+4>>2]|0;v=s;k[v>>2]=k[t>>2];k[v+4>>2]=u;u=j+72|0;v=b+88|0;k[u>>2]=k[v>>2];i[u+4>>0]=i[v+4>>0]|0;v=j+80|0;n=v;o=b+96|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));t=j+120|0;x=0;xa(712,t|0,b+136|0);w=x;x=0;if(!(w&1)){w=j+132|0;y=b+148|0;z=k[y+4>>2]|0;A=w;k[A>>2]=k[y>>2];k[A+4>>2]=z;k[h>>2]=0;z=h+4|0;k[z>>2]=0;k[h+8>>2]=0;x=0;A=Ba(563,144)|0;y=x;x=0;a:do if(y&1){B=Hc()|0;C=B;D=M;E=76}else{k[z>>2]=A;k[h>>2]=A;B=A+144|0;k[h+8>>2]=B;k[A>>2]=k[j>>2];i[A+4>>0]=i[j+4>>0]|0;n=A+8|0;o=m;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,A+48|0,q|0);F=x;x=0;do if(F&1){G=Hc()|0;H=A;I=G;J=M}else{G=s;K=k[G+4>>2]|0;L=A+60|0;k[L>>2]=k[G>>2];k[L+4>>2]=K;K=A+72|0;k[z>>2]=K;k[K>>2]=k[u>>2];i[K+4>>0]=i[u+4>>0]|0;n=A+80|0;o=v;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,A+120|0,t|0);L=x;x=0;if(L&1){L=Hc()|0;G=M;N=K;while(1){O=N+-72|0;k[z>>2]=O;P=N+-24|0;Q=k[P>>2]|0;if(!Q)R=O;else{S=N+-20|0;T=k[S>>2]|0;if((T|0)==(Q|0)){U=O;V=Q}else{O=N+-16|0;W=T;do{T=W+-72|0;k[S>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,O,T);W=k[S>>2]|0}while((W|0)!=(Q|0));U=k[z>>2]|0;V=k[P>>2]|0}OBa(V);R=U}if((R|0)==(A|0))break;else N=R}H=k[h>>2]|0;I=L;J=G;break}N=w;K=k[N+4>>2]|0;Q=A+132|0;k[Q>>2]=k[N>>2];k[Q+4>>2]=K;k[z>>2]=B;k[g>>2]=1;i[g+4>>0]=1;K=g+8|0;Q=l&255;k[K>>2]=Q;k[g+40>>2]=1;N=g+48|0;x=0;xa(712,N|0,h|0);W=x;x=0;if(!(W&1)){W=g+60|0;k[W>>2]=0;k[g+64>>2]=0;S=g+72|0;O=b+160|0;k[S>>2]=k[O>>2];i[S+4>>0]=i[O+4>>0]|0;O=g+80|0;n=O;o=b+168|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));G=g+120|0;x=0;xa(712,G|0,b+208|0);L=x;x=0;if(!(L&1)){L=g+132|0;T=b+220|0;X=k[T+4>>2]|0;Y=L;k[Y>>2]=k[T>>2];k[Y+4>>2]=X;k[f>>2]=0;X=f+4|0;k[X>>2]=0;k[f+8>>2]=0;x=0;Y=Ba(563,144)|0;T=x;x=0;b:do if(T&1){Z=Hc()|0;_=Z;$=M;E=78}else{k[X>>2]=Y;k[f>>2]=Y;Z=Y+144|0;k[f+8>>2]=Z;k[Y>>2]=k[g>>2];i[Y+4>>0]=i[g+4>>0]|0;n=Y+8|0;o=K;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,Y+48|0,N|0);P=x;x=0;do if(P&1){aa=Hc()|0;ba=Y;ca=aa;da=M}else{aa=W;ea=k[aa+4>>2]|0;fa=Y+60|0;k[fa>>2]=k[aa>>2];k[fa+4>>2]=ea;ea=Y+72|0;k[X>>2]=ea;k[ea>>2]=k[S>>2];i[ea+4>>0]=i[S+4>>0]|0;n=Y+80|0;o=O;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,Y+120|0,G|0);fa=x;x=0;if(fa&1){fa=Hc()|0;aa=M;ga=ea;while(1){ha=ga+-72|0;k[X>>2]=ha;ia=ga+-24|0;ja=k[ia>>2]|0;if(!ja)ka=ha;else{la=ga+-20|0;ma=k[la>>2]|0;if((ma|0)==(ja|0)){na=ha;oa=ja}else{ha=ga+-16|0;pa=ma;do{ma=pa+-72|0;k[la>>2]=ma;i[d>>0]=i[e>>0]|0;uF(d,ha,ma);pa=k[la>>2]|0}while((pa|0)!=(ja|0));na=k[X>>2]|0;oa=k[ia>>2]|0}OBa(oa);ka=na}if((ka|0)==(Y|0))break;else ga=ka}ba=k[f>>2]|0;ca=fa;da=aa;break}ga=L;ea=k[ga+4>>2]|0;ja=Y+132|0;k[ja>>2]=k[ga>>2];k[ja+4>>2]=ea;k[X>>2]=Z;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=Q;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);ea=x;x=0;if(ea&1){ea=Hc()|0;ja=M;ga=Z;while(1){pa=ga+-72|0;k[X>>2]=pa;la=ga+-24|0;ha=k[la>>2]|0;if(!ha)qa=pa;else{ma=ga+-20|0;ra=k[ma>>2]|0;if((ra|0)==(ha|0)){sa=pa;ta=ha}else{pa=ga+-16|0;ua=ra;do{ra=ua+-72|0;k[ma>>2]=ra;i[d>>0]=i[e>>0]|0;uF(d,pa,ra);ua=k[ma>>2]|0}while((ua|0)!=(ha|0));sa=k[X>>2]|0;ta=k[la>>2]|0}OBa(ta);qa=sa}if((qa|0)==(Y|0))break;else ga=qa}OBa(k[f>>2]|0);va=ja;wa=ea;break b}k[a+60>>2]=0;k[a+64>>2]=0;ga=Z;while(1){aa=ga+-72|0;k[X>>2]=aa;fa=ga+-24|0;ha=k[fa>>2]|0;if(!ha)ya=aa;else{ua=ga+-20|0;ma=k[ua>>2]|0;if((ma|0)==(ha|0)){za=aa;Aa=ha}else{aa=ga+-16|0;pa=ma;do{ma=pa+-72|0;k[ua>>2]=ma;i[d>>0]=i[e>>0]|0;uF(d,aa,ma);pa=k[ua>>2]|0}while((pa|0)!=(ha|0));za=k[X>>2]|0;Aa=k[fa>>2]|0}OBa(Aa);ya=za}if((ya|0)==(Y|0))break;else ga=ya}OBa(k[f>>2]|0);ga=g+120|0;ea=k[ga>>2]|0;if(ea){ja=g+124|0;ha=k[ja>>2]|0;if((ha|0)==(ea|0))Ca=ea;else{pa=g+128|0;ua=ha;do{ha=ua+-72|0;k[ja>>2]=ha;i[d>>0]=i[e>>0]|0;uF(d,pa,ha);ua=k[ja>>2]|0}while((ua|0)!=(ea|0));Ca=k[ga>>2]|0}OBa(Ca)}ea=g+48|0;ua=k[ea>>2]|0;if(ua){ja=g+52|0;pa=k[ja>>2]|0;if((pa|0)==(ua|0))Da=ua;else{ha=g+56|0;aa=pa;do{pa=aa+-72|0;k[ja>>2]=pa;i[d>>0]=i[e>>0]|0;uF(d,ha,pa);aa=k[ja>>2]|0}while((aa|0)!=(ua|0));Da=k[ea>>2]|0}OBa(Da)}ua=k[h>>2]|0;if(ua){aa=k[z>>2]|0;if((aa|0)==(ua|0))Ea=ua;else{ja=aa;while(1){aa=ja+-72|0;k[z>>2]=aa;ha=ja+-24|0;ga=k[ha>>2]|0;if(!ga)Fa=aa;else{pa=ja+-20|0;la=k[pa>>2]|0;if((la|0)==(ga|0)){Ga=aa;Ha=ga}else{aa=ja+-16|0;ma=la;do{la=ma+-72|0;k[pa>>2]=la;i[d>>0]=i[e>>0]|0;uF(d,aa,la);ma=k[pa>>2]|0}while((ma|0)!=(ga|0));Ga=k[z>>2]|0;Ha=k[ha>>2]|0}OBa(Ha);Fa=Ga}if((Fa|0)==(ua|0))break;else ja=Fa}Ea=k[h>>2]|0}OBa(Ea)}ja=j+120|0;ua=k[ja>>2]|0;if(ua){ea=j+124|0;ga=k[ea>>2]|0;if((ga|0)==(ua|0))Ia=ua;else{ma=j+128|0;pa=ga;do{ga=pa+-72|0;k[ea>>2]=ga;i[d>>0]=i[e>>0]|0;uF(d,ma,ga);pa=k[ea>>2]|0}while((pa|0)!=(ua|0));Ia=k[ja>>2]|0}OBa(Ia)}ua=j+48|0;pa=k[ua>>2]|0;if(!pa){r=c;return}ea=j+52|0;ma=k[ea>>2]|0;if((ma|0)==(pa|0))Ja=pa;else{ga=j+56|0;aa=ma;do{ma=aa+-72|0;k[ea>>2]=ma;i[d>>0]=i[e>>0]|0;uF(d,ga,ma);aa=k[ea>>2]|0}while((aa|0)!=(pa|0));Ja=k[ua>>2]|0}OBa(Ja);r=c;return}while(0);OBa(ba);_=ca;$=da;E=78}while(0);if((E|0)==78){va=$;wa=_}Y=g+120|0;X=k[Y>>2]|0;if(X){Q=g+124|0;L=k[Q>>2]|0;if((L|0)==(X|0))Ka=X;else{G=g+128|0;O=L;do{L=O+-72|0;k[Q>>2]=L;i[d>>0]=i[e>>0]|0;uF(d,G,L);O=k[Q>>2]|0}while((O|0)!=(X|0));Ka=k[Y>>2]|0}OBa(Ka)}X=g+48|0;O=k[X>>2]|0;if(!O){La=0;Ma=S;Na=va;Oa=wa}else{Q=g+52|0;G=k[Q>>2]|0;if((G|0)==(O|0))Pa=O;else{L=g+56|0;W=G;do{G=W+-72|0;k[Q>>2]=G;i[d>>0]=i[e>>0]|0;uF(d,L,G);W=k[Q>>2]|0}while((W|0)!=(O|0));Pa=k[X>>2]|0}OBa(Pa);La=0;Ma=S;Na=va;Oa=wa}}else{Qa=S;E=77}}else{Qa=g;E=77}if((E|0)==77){O=Hc()|0;La=1;Ma=Qa;Na=M;Oa=O}O=k[h>>2]|0;if(!O){Ra=La;Sa=Ma;Ta=Na;Ua=Oa;break a}W=k[z>>2]|0;if((W|0)==(O|0))Va=O;else{Q=W;while(1){W=Q+-72|0;k[z>>2]=W;L=Q+-24|0;Y=k[L>>2]|0;if(!Y)Wa=W;else{G=Q+-20|0;N=k[G>>2]|0;if((N|0)==(Y|0)){Xa=W;Ya=Y}else{W=Q+-16|0;K=N;do{N=K+-72|0;k[G>>2]=N;i[d>>0]=i[e>>0]|0;uF(d,W,N);K=k[G>>2]|0}while((K|0)!=(Y|0));Xa=k[z>>2]|0;Ya=k[L>>2]|0}OBa(Ya);Wa=Xa}if((Wa|0)==(O|0))break;else Q=Wa}Va=k[h>>2]|0}OBa(Va);Ra=La;Sa=Ma;Ta=Na;Ua=Oa;break a}while(0);OBa(H);C=I;D=J;E=76}while(0);if((E|0)==76){Ra=1;Sa=g;Ta=D;Ua=C}C=j+120|0;D=k[C>>2]|0;if(D){J=j+124|0;I=k[J>>2]|0;if((I|0)==(D|0))Za=D;else{H=j+128|0;Oa=I;do{I=Oa+-72|0;k[J>>2]=I;i[d>>0]=i[e>>0]|0;uF(d,H,I);Oa=k[J>>2]|0}while((Oa|0)!=(D|0));Za=k[C>>2]|0}OBa(Za)}Za=j+48|0;C=k[Za>>2]|0;if(!C){_a=Ra;$a=Ta;ab=Sa;bb=Ua}else{D=j+52|0;Oa=k[D>>2]|0;if((Oa|0)==(C|0))cb=C;else{J=j+56|0;H=Oa;do{Oa=H+-72|0;k[D>>2]=Oa;i[d>>0]=i[e>>0]|0;uF(d,J,Oa);H=k[D>>2]|0}while((H|0)!=(C|0));cb=k[Za>>2]|0}OBa(cb);_a=Ra;$a=Ta;ab=Sa;bb=Ua}}else{db=u;E=67}}else{db=j;E=67}if((E|0)==67){E=Hc()|0;u=M;if((j|0)==(db|0)){_a=1;$a=u;ab=g;bb=E}else{Ua=db;do{db=Ua+-24|0;Sa=k[db>>2]|0;if(Sa){Ta=Ua+-20|0;Ra=k[Ta>>2]|0;if((Ra|0)==(Sa|0))eb=Sa;else{cb=Ua+-16|0;Za=Ra;do{Ra=Za+-72|0;k[Ta>>2]=Ra;i[d>>0]=i[e>>0]|0;uF(d,cb,Ra);Za=k[Ta>>2]|0}while((Za|0)!=(Sa|0));eb=k[db>>2]|0}OBa(eb)}Ua=Ua+-72|0}while((Ua|0)!=(j|0));_a=1;$a=u;ab=g;bb=E}}if((g|0)==(ab|0)|_a^1)Sc(bb|0);_a=ab;do{ab=_a+-24|0;E=k[ab>>2]|0;if(E){u=_a+-20|0;$a=k[u>>2]|0;if(($a|0)==(E|0))fb=E;else{j=_a+-16|0;Ua=$a;do{$a=Ua+-72|0;k[u>>2]=$a;i[d>>0]=i[e>>0]|0;uF(d,j,$a);Ua=k[u>>2]|0}while((Ua|0)!=(E|0));fb=k[ab>>2]|0}OBa(fb)}_a=_a+-72|0}while((_a|0)!=(g|0));Sc(bb|0)}function HG(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==218891?a+8|0:0)|0}function IG(a){a=a|0;return 2832}function JG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+200|0;f=k[e>>2]|0;if(f){g=a+204|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+208|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+128|0;e=k[j>>2]|0;if(e){f=a+132|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+136|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=a+56|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+60|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+64|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function KG(a){a=a|0;k[a>>2]=30048;TG(a+8|0);return}function LG(a){a=a|0;k[a>>2]=30048;TG(a+8|0);OBa(a);return}function MG(a){a=a|0;var b=0;b=KBa(256)|0;k[b>>2]=30048;x=0;xa(717,b+8|0,a+8|0);a=x;x=0;if(a&1){a=Hc()|0;OBa(b);Sc(a|0)}else return b|0;return 0}function NG(a,b){a=a|0;b=b|0;k[b>>2]=30048;UG(b+8|0,a+8|0);return}function OG(a){a=a|0;TG(a+8|0);return}function PG(a){a=a|0;TG(a+8|0);OBa(a);return}function QG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;c=r;r=r+208|0;d=c+197|0;e=c+196|0;f=c+184|0;g=c+40|0;h=c;j=i[b+8>>0]|0;l=b+16|0;k[g>>2]=k[l>>2];i[g+4>>0]=i[l+4>>0]|0;l=g+8|0;m=l;n=b+24|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));p=g+48|0;x=0;xa(712,p|0,b+64|0);q=x;x=0;do if(!(q&1)){s=g+60|0;t=b+76|0;u=k[t+4>>2]|0;v=s;k[v>>2]=k[t>>2];k[v+4>>2]=u;u=g+72|0;x=0;v=Ba(590,b+112|0)|0;t=x;x=0;if(!(t&1)?(t=(k[v+4>>2]|0)+8|0,x=0,v=Ba(590,b+184|0)|0,w=x,x=0,!(w&1)):0){w=k[b+104>>2]|0;if(!w){y=Rd(4)|0;k[y>>2]=26200;x=0;fb(149,y|0,2216,320);x=0;z=u;break}x=0;nb(k[(k[w>>2]|0)+24>>2]|0,h|0,w|0,t|0,(k[v+4>>2]|0)+8|0);v=x;x=0;if(!(v&1)){k[u>>2]=2;i[g+76>>0]=1;v=g+80|0;m=v;n=h;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));t=g+120|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;k[f>>2]=0;w=f+4|0;k[w>>2]=0;k[f+8>>2]=0;x=0;y=Ba(563,144)|0;A=x;x=0;a:do if(A&1){B=Hc()|0;C=B;D=M;E=46}else{k[w>>2]=y;k[f>>2]=y;B=y+144|0;k[f+8>>2]=B;k[y>>2]=k[g>>2];i[y+4>>0]=i[g+4>>0]|0;m=y+8|0;n=l;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,y+48|0,p|0);F=x;x=0;do if(F&1){G=Hc()|0;H=y;I=G;J=M}else{G=s;K=k[G+4>>2]|0;L=y+60|0;k[L>>2]=k[G>>2];k[L+4>>2]=K;K=y+72|0;k[w>>2]=K;k[K>>2]=k[u>>2];i[K+4>>0]=i[u+4>>0]|0;m=y+80|0;n=v;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,y+120|0,g+120|0);L=x;x=0;if(L&1){L=Hc()|0;G=M;N=K;while(1){O=N+-72|0;k[w>>2]=O;P=N+-24|0;Q=k[P>>2]|0;if(!Q)R=O;else{S=N+-20|0;T=k[S>>2]|0;if((T|0)==(Q|0)){U=O;V=Q}else{O=N+-16|0;W=T;do{T=W+-72|0;k[S>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,O,T);W=k[S>>2]|0}while((W|0)!=(Q|0));U=k[w>>2]|0;V=k[P>>2]|0}OBa(V);R=U}if((R|0)==(y|0))break;else N=R}H=k[f>>2]|0;I=L;J=G;break}N=g+132|0;K=k[N+4>>2]|0;Q=y+132|0;k[Q>>2]=k[N>>2];k[Q+4>>2]=K;k[w>>2]=B;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=j&255;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);K=x;x=0;if(K&1){K=Hc()|0;Q=M;N=B;while(1){W=N+-72|0;k[w>>2]=W;S=N+-24|0;O=k[S>>2]|0;if(!O)X=W;else{T=N+-20|0;Y=k[T>>2]|0;if((Y|0)==(O|0)){Z=W;_=O}else{W=N+-16|0;$=Y;do{Y=$+-72|0;k[T>>2]=Y;i[d>>0]=i[e>>0]|0;uF(d,W,Y);$=k[T>>2]|0}while(($|0)!=(O|0));Z=k[w>>2]|0;_=k[S>>2]|0}OBa(_);X=Z}if((X|0)==(y|0))break;else N=X}OBa(k[f>>2]|0);aa=Q;ba=K;break a}k[a+60>>2]=0;k[a+64>>2]=0;N=B;while(1){G=N+-72|0;k[w>>2]=G;L=N+-24|0;O=k[L>>2]|0;if(!O)ca=G;else{$=N+-20|0;T=k[$>>2]|0;if((T|0)==(O|0)){da=G;ea=O}else{G=N+-16|0;W=T;do{T=W+-72|0;k[$>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,G,T);W=k[$>>2]|0}while((W|0)!=(O|0));da=k[w>>2]|0;ea=k[L>>2]|0}OBa(ea);ca=da}if((ca|0)==(y|0))break;else N=ca}OBa(k[f>>2]|0);N=k[t>>2]|0;if(N){K=g+124|0;Q=k[K>>2]|0;if((Q|0)==(N|0))fa=N;else{O=g+128|0;W=Q;do{Q=W+-72|0;k[K>>2]=Q;i[d>>0]=i[e>>0]|0;uF(d,O,Q);W=k[K>>2]|0}while((W|0)!=(N|0));fa=k[t>>2]|0}OBa(fa)}N=g+48|0;W=k[N>>2]|0;if(!W){r=c;return}K=g+52|0;O=k[K>>2]|0;if((O|0)==(W|0))ga=W;else{Q=g+56|0;$=O;do{O=$+-72|0;k[K>>2]=O;i[d>>0]=i[e>>0]|0;uF(d,Q,O);$=k[K>>2]|0}while(($|0)!=(W|0));ga=k[N>>2]|0}OBa(ga);r=c;return}while(0);OBa(H);C=I;D=J;E=46}while(0);if((E|0)==46){aa=D;ba=C}y=k[t>>2]|0;if(y){w=g+124|0;v=k[w>>2]|0;if((v|0)==(y|0))ha=y;else{s=g+128|0;A=v;do{v=A+-72|0;k[w>>2]=v;i[d>>0]=i[e>>0]|0;uF(d,s,v);A=k[w>>2]|0}while((A|0)!=(y|0));ha=k[t>>2]|0}OBa(ha)}y=g+48|0;A=k[y>>2]|0;if(!A){ia=aa;ja=ba;Sc(ja|0)}w=g+52|0;s=k[w>>2]|0;if((s|0)==(A|0))ka=A;else{v=g+56|0;B=s;do{s=B+-72|0;k[w>>2]=s;i[d>>0]=i[e>>0]|0;uF(d,v,s);B=k[w>>2]|0}while((B|0)!=(A|0));ka=k[y>>2]|0}OBa(ka);ia=aa;ja=ba;Sc(ja|0)}else z=u}else z=u}else z=g;while(0);ba=Hc()|0;aa=M;if((g|0)==(z|0)){ia=aa;ja=ba;Sc(ja|0)}ka=z;do{z=ka+-24|0;ha=k[z>>2]|0;if(ha){C=ka+-20|0;D=k[C>>2]|0;if((D|0)==(ha|0))la=ha;else{E=ka+-16|0;J=D;do{D=J+-72|0;k[C>>2]=D;i[d>>0]=i[e>>0]|0;uF(d,E,D);J=k[C>>2]|0}while((J|0)!=(ha|0));la=k[z>>2]|0}OBa(la)}ka=ka+-72|0}while((ka|0)!=(g|0));ia=aa;ja=ba;Sc(ja|0)}function RG(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==218998?a+8|0:0)|0}function SG(a){a=a|0;return 2856}function TG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+224|0;f=k[e>>2]|0;if(f){g=a+228|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+232|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+152|0;e=k[j>>2]|0;if(e){f=a+156|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+160|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=k[a+96>>2]|0;if((n|0)!=(a+80|0)){if(n)Sf[k[(k[n>>2]|0)+20>>2]&2047](n)}else Sf[k[(k[n>>2]|0)+16>>2]&2047](n);n=a+56|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+60|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+64|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function UG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+16|0;d=c+1|0;e=c;i[a>>0]=i[b>>0]|0;f=a+8|0;g=b+8|0;k[f>>2]=k[g>>2];i[f+4>>0]=i[g+4>>0]|0;g=a+16|0;f=b+16|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));xF(a+56|0,b+56|0);j=b+68|0;l=k[j+4>>2]|0;m=a+68|0;k[m>>2]=k[j>>2];k[m+4>>2]=l;l=a+80|0;m=b+96|0;j=k[m>>2]|0;do if(!j){k[a+96>>2]=0;n=7}else{if((j|0)==(b+80|0)){k[a+96>>2]=l;o=k[m>>2]|0;x=0;xa(k[(k[o>>2]|0)+12>>2]|0,o|0,l|0);o=x;x=0;if(!(o&1)){n=7;break}}else{x=0;o=Ba(k[(k[j>>2]|0)+8>>2]|0,j|0)|0;p=x;x=0;if(!(p&1)){k[a+96>>2]=o;n=7;break}}o=Hc()|0;q=M;s=o}while(0);do if((n|0)==7){j=a+104|0;m=b+104|0;k[j>>2]=k[m>>2];i[j+4>>0]=i[m+4>>0]|0;g=a+112|0;f=b+112|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,a+152|0,b+152|0);m=x;x=0;if(!(m&1)){m=b+164|0;j=k[m+4>>2]|0;o=a+164|0;k[o>>2]=k[m>>2];k[o+4>>2]=j;j=a+176|0;o=b+176|0;k[j>>2]=k[o>>2];i[j+4>>0]=i[o+4>>0]|0;g=a+184|0;f=b+184|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,a+224|0,b+224|0);o=x;x=0;if(!(o&1)){o=b+236|0;j=k[o+4>>2]|0;m=a+236|0;k[m>>2]=k[o>>2];k[m+4>>2]=j;r=c;return}j=Hc()|0;m=M;o=a+152|0;p=k[o>>2]|0;if(!p){t=m;u=j}else{v=a+156|0;w=k[v>>2]|0;if((w|0)==(p|0))y=p;else{z=a+160|0;A=w;do{w=A+-72|0;k[v>>2]=w;i[d>>0]=i[e>>0]|0;uF(d,z,w);A=k[v>>2]|0}while((A|0)!=(p|0));y=k[o>>2]|0}OBa(y);t=m;u=j}}else{p=Hc()|0;t=M;u=p}p=k[a+96>>2]|0;if((p|0)==(l|0)){Sf[k[(k[l>>2]|0)+16>>2]&2047](l);q=t;s=u;break}if(!p){q=t;s=u}else{Sf[k[(k[p>>2]|0)+20>>2]&2047](p);q=t;s=u}}while(0);u=a+56|0;t=k[u>>2]|0;if(!t)Sc(s|0);q=a+60|0;l=k[q>>2]|0;if((l|0)==(t|0))B=t;else{y=a+64|0;a=l;do{l=a+-72|0;k[q>>2]=l;i[d>>0]=i[e>>0]|0;uF(d,y,l);a=k[q>>2]|0}while((a|0)!=(t|0));B=k[u>>2]|0}OBa(B);Sc(s|0)}function VG(a){a=a|0;k[a>>2]=30004;cH(a+8|0);return}function WG(a){a=a|0;k[a>>2]=30004;cH(a+8|0);OBa(a);return}function XG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(232)|0;k[e>>2]=30004;i[e+8>>0]=i[a+8>>0]|0;f=e+16|0;g=a+16|0;k[f>>2]=k[g>>2];i[f+4>>0]=i[g+4>>0]|0;g=e+24|0;f=a+24|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));j=e+64|0;x=0;xa(712,j|0,a+64|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+76|0;o=k[l+4>>2]|0;p=e+76|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+88|0;p=a+88|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;g=e+96|0;f=a+96|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));p=e+136|0;x=0;xa(712,p|0,a+136|0);o=x;x=0;if(!(o&1)){o=a+148|0;l=k[o+4>>2]|0;q=e+148|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=e+160|0;q=a+160|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;g=e+168|0;f=a+168|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,e+208|0,a+208|0);f=x;x=0;if(!(f&1)){f=a+220|0;a=k[f+4>>2]|0;g=e+220|0;k[g>>2]=k[f>>2];k[g+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;g=k[p>>2]|0;if(!g){s=a;t=b}else{f=e+140|0;h=k[f>>2]|0;if((h|0)==(g|0))u=g;else{q=e+144|0;l=h;do{h=l+-72|0;k[f>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,q,h);l=k[f>>2]|0}while((l|0)!=(g|0));u=k[p>>2]|0}OBa(u);s=a;t=b}}else{b=Hc()|0;s=M;t=b}b=k[j>>2]|0;if(b){a=e+68|0;u=k[a>>2]|0;if((u|0)==(b|0))v=b;else{p=e+72|0;g=u;do{u=g+-72|0;k[a>>2]=u;i[c>>0]=i[d>>0]|0;uF(c,p,u);g=k[a>>2]|0}while((g|0)!=(b|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;OBa(e);Sc(n|0);return 0}function YG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c+1|0;e=c;k[b>>2]=30004;i[b+8>>0]=i[a+8>>0]|0;f=b+16|0;g=a+16|0;k[f>>2]=k[g>>2];i[f+4>>0]=i[g+4>>0]|0;g=b+24|0;f=a+24|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));j=b+64|0;x=0;xa(712,j|0,a+64|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+76|0;o=k[l+4>>2]|0;p=b+76|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+88|0;p=a+88|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;g=b+96|0;f=a+96|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));p=b+136|0;x=0;xa(712,p|0,a+136|0);o=x;x=0;if(!(o&1)){o=a+148|0;l=k[o+4>>2]|0;q=b+148|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=b+160|0;q=a+160|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;g=b+168|0;f=a+168|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,b+208|0,a+208|0);f=x;x=0;if(!(f&1)){f=a+220|0;a=k[f+4>>2]|0;g=b+220|0;k[g>>2]=k[f>>2];k[g+4>>2]=a;r=c;return}c=Hc()|0;a=M;g=k[p>>2]|0;if(!g){s=a;t=c}else{f=b+140|0;h=k[f>>2]|0;if((h|0)==(g|0))u=g;else{q=b+144|0;l=h;do{h=l+-72|0;k[f>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,q,h);l=k[f>>2]|0}while((l|0)!=(g|0));u=k[p>>2]|0}OBa(u);s=a;t=c}}else{c=Hc()|0;s=M;t=c}c=k[j>>2]|0;if(c){a=b+68|0;u=k[a>>2]|0;if((u|0)==(c|0))v=c;else{p=b+72|0;b=u;do{u=b+-72|0;k[a>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,p,u);b=k[a>>2]|0}while((b|0)!=(c|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;Sc(n|0)}function ZG(a){a=a|0;cH(a+8|0);return}function _G(a){a=a|0;cH(a+8|0);OBa(a);return}function $G(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0;c=r;r=r+320|0;d=c+313|0;e=c+312|0;f=c+300|0;g=c+144|0;h=c+288|0;j=c;l=i[b+8>>0]|0;m=b+16|0;k[j>>2]=k[m>>2];i[j+4>>0]=i[m+4>>0]|0;m=j+8|0;n=m;o=b+24|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));q=j+48|0;x=0;xa(712,q|0,b+64|0);s=x;x=0;if(!(s&1)){s=j+60|0;t=b+76|0;u=k[t+4>>2]|0;v=s;k[v>>2]=k[t>>2];k[v+4>>2]=u;u=j+72|0;v=b+88|0;k[u>>2]=k[v>>2];i[u+4>>0]=i[v+4>>0]|0;v=j+80|0;n=v;o=b+96|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));t=j+120|0;x=0;xa(712,t|0,b+136|0);w=x;x=0;if(!(w&1)){w=j+132|0;y=b+148|0;z=k[y+4>>2]|0;A=w;k[A>>2]=k[y>>2];k[A+4>>2]=z;k[h>>2]=0;z=h+4|0;k[z>>2]=0;k[h+8>>2]=0;x=0;A=Ba(563,144)|0;y=x;x=0;a:do if(y&1){B=Hc()|0;C=B;D=M;E=76}else{k[z>>2]=A;k[h>>2]=A;B=A+144|0;k[h+8>>2]=B;k[A>>2]=k[j>>2];i[A+4>>0]=i[j+4>>0]|0;n=A+8|0;o=m;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,A+48|0,q|0);F=x;x=0;do if(F&1){G=Hc()|0;H=A;I=G;J=M}else{G=s;K=k[G+4>>2]|0;L=A+60|0;k[L>>2]=k[G>>2];k[L+4>>2]=K;K=A+72|0;k[z>>2]=K;k[K>>2]=k[u>>2];i[K+4>>0]=i[u+4>>0]|0;n=A+80|0;o=v;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,A+120|0,t|0);L=x;x=0;if(L&1){L=Hc()|0;G=M;N=K;while(1){O=N+-72|0;k[z>>2]=O;P=N+-24|0;Q=k[P>>2]|0;if(!Q)R=O;else{S=N+-20|0;T=k[S>>2]|0;if((T|0)==(Q|0)){U=O;V=Q}else{O=N+-16|0;W=T;do{T=W+-72|0;k[S>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,O,T);W=k[S>>2]|0}while((W|0)!=(Q|0));U=k[z>>2]|0;V=k[P>>2]|0}OBa(V);R=U}if((R|0)==(A|0))break;else N=R}H=k[h>>2]|0;I=L;J=G;break}N=w;K=k[N+4>>2]|0;Q=A+132|0;k[Q>>2]=k[N>>2];k[Q+4>>2]=K;k[z>>2]=B;k[g>>2]=1;i[g+4>>0]=1;K=g+8|0;Q=l&255;k[K>>2]=Q;k[g+40>>2]=1;N=g+48|0;x=0;xa(712,N|0,h|0);W=x;x=0;if(!(W&1)){W=g+60|0;k[W>>2]=0;k[g+64>>2]=0;S=g+72|0;O=b+160|0;k[S>>2]=k[O>>2];i[S+4>>0]=i[O+4>>0]|0;O=g+80|0;n=O;o=b+168|0;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));G=g+120|0;x=0;xa(712,G|0,b+208|0);L=x;x=0;if(!(L&1)){L=g+132|0;T=b+220|0;X=k[T+4>>2]|0;Y=L;k[Y>>2]=k[T>>2];k[Y+4>>2]=X;k[f>>2]=0;X=f+4|0;k[X>>2]=0;k[f+8>>2]=0;x=0;Y=Ba(563,144)|0;T=x;x=0;b:do if(T&1){Z=Hc()|0;_=Z;$=M;E=78}else{k[X>>2]=Y;k[f>>2]=Y;Z=Y+144|0;k[f+8>>2]=Z;k[Y>>2]=k[g>>2];i[Y+4>>0]=i[g+4>>0]|0;n=Y+8|0;o=K;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,Y+48|0,N|0);P=x;x=0;do if(P&1){aa=Hc()|0;ba=Y;ca=aa;da=M}else{aa=W;ea=k[aa+4>>2]|0;fa=Y+60|0;k[fa>>2]=k[aa>>2];k[fa+4>>2]=ea;ea=Y+72|0;k[X>>2]=ea;k[ea>>2]=k[S>>2];i[ea+4>>0]=i[S+4>>0]|0;n=Y+80|0;o=O;p=n+40|0;do{k[n>>2]=k[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));x=0;xa(712,Y+120|0,G|0);fa=x;x=0;if(fa&1){fa=Hc()|0;aa=M;ga=ea;while(1){ha=ga+-72|0;k[X>>2]=ha;ia=ga+-24|0;ja=k[ia>>2]|0;if(!ja)ka=ha;else{la=ga+-20|0;ma=k[la>>2]|0;if((ma|0)==(ja|0)){na=ha;oa=ja}else{ha=ga+-16|0;pa=ma;do{ma=pa+-72|0;k[la>>2]=ma;i[d>>0]=i[e>>0]|0;uF(d,ha,ma);pa=k[la>>2]|0}while((pa|0)!=(ja|0));na=k[X>>2]|0;oa=k[ia>>2]|0}OBa(oa);ka=na}if((ka|0)==(Y|0))break;else ga=ka}ba=k[f>>2]|0;ca=fa;da=aa;break}ga=L;ea=k[ga+4>>2]|0;ja=Y+132|0;k[ja>>2]=k[ga>>2];k[ja+4>>2]=ea;k[X>>2]=Z;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=Q;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);ea=x;x=0;if(ea&1){ea=Hc()|0;ja=M;ga=Z;while(1){pa=ga+-72|0;k[X>>2]=pa;la=ga+-24|0;ha=k[la>>2]|0;if(!ha)qa=pa;else{ma=ga+-20|0;ra=k[ma>>2]|0;if((ra|0)==(ha|0)){sa=pa;ta=ha}else{pa=ga+-16|0;ua=ra;do{ra=ua+-72|0;k[ma>>2]=ra;i[d>>0]=i[e>>0]|0;uF(d,pa,ra);ua=k[ma>>2]|0}while((ua|0)!=(ha|0));sa=k[X>>2]|0;ta=k[la>>2]|0}OBa(ta);qa=sa}if((qa|0)==(Y|0))break;else ga=qa}OBa(k[f>>2]|0);va=ja;wa=ea;break b}k[a+60>>2]=0;k[a+64>>2]=0;ga=Z;while(1){aa=ga+-72|0;k[X>>2]=aa;fa=ga+-24|0;ha=k[fa>>2]|0;if(!ha)ya=aa;else{ua=ga+-20|0;ma=k[ua>>2]|0;if((ma|0)==(ha|0)){za=aa;Aa=ha}else{aa=ga+-16|0;pa=ma;do{ma=pa+-72|0;k[ua>>2]=ma;i[d>>0]=i[e>>0]|0;uF(d,aa,ma);pa=k[ua>>2]|0}while((pa|0)!=(ha|0));za=k[X>>2]|0;Aa=k[fa>>2]|0}OBa(Aa);ya=za}if((ya|0)==(Y|0))break;else ga=ya}OBa(k[f>>2]|0);ga=g+120|0;ea=k[ga>>2]|0;if(ea){ja=g+124|0;ha=k[ja>>2]|0;if((ha|0)==(ea|0))Ca=ea;else{pa=g+128|0;ua=ha;do{ha=ua+-72|0;k[ja>>2]=ha;i[d>>0]=i[e>>0]|0;uF(d,pa,ha);ua=k[ja>>2]|0}while((ua|0)!=(ea|0));Ca=k[ga>>2]|0}OBa(Ca)}ea=g+48|0;ua=k[ea>>2]|0;if(ua){ja=g+52|0;pa=k[ja>>2]|0;if((pa|0)==(ua|0))Da=ua;else{ha=g+56|0;aa=pa;do{pa=aa+-72|0;k[ja>>2]=pa;i[d>>0]=i[e>>0]|0;uF(d,ha,pa);aa=k[ja>>2]|0}while((aa|0)!=(ua|0));Da=k[ea>>2]|0}OBa(Da)}ua=k[h>>2]|0;if(ua){aa=k[z>>2]|0;if((aa|0)==(ua|0))Ea=ua;else{ja=aa;while(1){aa=ja+-72|0;k[z>>2]=aa;ha=ja+-24|0;ga=k[ha>>2]|0;if(!ga)Fa=aa;else{pa=ja+-20|0;la=k[pa>>2]|0;if((la|0)==(ga|0)){Ga=aa;Ha=ga}else{aa=ja+-16|0;ma=la;do{la=ma+-72|0;k[pa>>2]=la;i[d>>0]=i[e>>0]|0;uF(d,aa,la);ma=k[pa>>2]|0}while((ma|0)!=(ga|0));Ga=k[z>>2]|0;Ha=k[ha>>2]|0}OBa(Ha);Fa=Ga}if((Fa|0)==(ua|0))break;else ja=Fa}Ea=k[h>>2]|0}OBa(Ea)}ja=j+120|0;ua=k[ja>>2]|0;if(ua){ea=j+124|0;ga=k[ea>>2]|0;if((ga|0)==(ua|0))Ia=ua;else{ma=j+128|0;pa=ga;do{ga=pa+-72|0;k[ea>>2]=ga;i[d>>0]=i[e>>0]|0;uF(d,ma,ga);pa=k[ea>>2]|0}while((pa|0)!=(ua|0));Ia=k[ja>>2]|0}OBa(Ia)}ua=j+48|0;pa=k[ua>>2]|0;if(!pa){r=c;return}ea=j+52|0;ma=k[ea>>2]|0;if((ma|0)==(pa|0))Ja=pa;else{ga=j+56|0;aa=ma;do{ma=aa+-72|0;k[ea>>2]=ma;i[d>>0]=i[e>>0]|0;uF(d,ga,ma);aa=k[ea>>2]|0}while((aa|0)!=(pa|0));Ja=k[ua>>2]|0}OBa(Ja);r=c;return}while(0);OBa(ba);_=ca;$=da;E=78}while(0);if((E|0)==78){va=$;wa=_}Y=g+120|0;X=k[Y>>2]|0;if(X){Q=g+124|0;L=k[Q>>2]|0;if((L|0)==(X|0))Ka=X;else{G=g+128|0;O=L;do{L=O+-72|0;k[Q>>2]=L;i[d>>0]=i[e>>0]|0;uF(d,G,L);O=k[Q>>2]|0}while((O|0)!=(X|0));Ka=k[Y>>2]|0}OBa(Ka)}X=g+48|0;O=k[X>>2]|0;if(!O){La=0;Ma=S;Na=va;Oa=wa}else{Q=g+52|0;G=k[Q>>2]|0;if((G|0)==(O|0))Pa=O;else{L=g+56|0;W=G;do{G=W+-72|0;k[Q>>2]=G;i[d>>0]=i[e>>0]|0;uF(d,L,G);W=k[Q>>2]|0}while((W|0)!=(O|0));Pa=k[X>>2]|0}OBa(Pa);La=0;Ma=S;Na=va;Oa=wa}}else{Qa=S;E=77}}else{Qa=g;E=77}if((E|0)==77){O=Hc()|0;La=1;Ma=Qa;Na=M;Oa=O}O=k[h>>2]|0;if(!O){Ra=La;Sa=Ma;Ta=Na;Ua=Oa;break a}W=k[z>>2]|0;if((W|0)==(O|0))Va=O;else{Q=W;while(1){W=Q+-72|0;k[z>>2]=W;L=Q+-24|0;Y=k[L>>2]|0;if(!Y)Wa=W;else{G=Q+-20|0;N=k[G>>2]|0;if((N|0)==(Y|0)){Xa=W;Ya=Y}else{W=Q+-16|0;K=N;do{N=K+-72|0;k[G>>2]=N;i[d>>0]=i[e>>0]|0;uF(d,W,N);K=k[G>>2]|0}while((K|0)!=(Y|0));Xa=k[z>>2]|0;Ya=k[L>>2]|0}OBa(Ya);Wa=Xa}if((Wa|0)==(O|0))break;else Q=Wa}Va=k[h>>2]|0}OBa(Va);Ra=La;Sa=Ma;Ta=Na;Ua=Oa;break a}while(0);OBa(H);C=I;D=J;E=76}while(0);if((E|0)==76){Ra=1;Sa=g;Ta=D;Ua=C}C=j+120|0;D=k[C>>2]|0;if(D){J=j+124|0;I=k[J>>2]|0;if((I|0)==(D|0))Za=D;else{H=j+128|0;Oa=I;do{I=Oa+-72|0;k[J>>2]=I;i[d>>0]=i[e>>0]|0;uF(d,H,I);Oa=k[J>>2]|0}while((Oa|0)!=(D|0));Za=k[C>>2]|0}OBa(Za)}Za=j+48|0;C=k[Za>>2]|0;if(!C){_a=Ra;$a=Ta;ab=Sa;bb=Ua}else{D=j+52|0;Oa=k[D>>2]|0;if((Oa|0)==(C|0))cb=C;else{J=j+56|0;H=Oa;do{Oa=H+-72|0;k[D>>2]=Oa;i[d>>0]=i[e>>0]|0;uF(d,J,Oa);H=k[D>>2]|0}while((H|0)!=(C|0));cb=k[Za>>2]|0}OBa(cb);_a=Ra;$a=Ta;ab=Sa;bb=Ua}}else{db=u;E=67}}else{db=j;E=67}if((E|0)==67){E=Hc()|0;u=M;if((j|0)==(db|0)){_a=1;$a=u;ab=g;bb=E}else{Ua=db;do{db=Ua+-24|0;Sa=k[db>>2]|0;if(Sa){Ta=Ua+-20|0;Ra=k[Ta>>2]|0;if((Ra|0)==(Sa|0))eb=Sa;else{cb=Ua+-16|0;Za=Ra;do{Ra=Za+-72|0;k[Ta>>2]=Ra;i[d>>0]=i[e>>0]|0;uF(d,cb,Ra);Za=k[Ta>>2]|0}while((Za|0)!=(Sa|0));eb=k[db>>2]|0}OBa(eb)}Ua=Ua+-72|0}while((Ua|0)!=(j|0));_a=1;$a=u;ab=g;bb=E}}if((g|0)==(ab|0)|_a^1)Sc(bb|0);_a=ab;do{ab=_a+-24|0;E=k[ab>>2]|0;if(E){u=_a+-20|0;$a=k[u>>2]|0;if(($a|0)==(E|0))fb=E;else{j=_a+-16|0;Ua=$a;do{$a=Ua+-72|0;k[u>>2]=$a;i[d>>0]=i[e>>0]|0;uF(d,j,$a);Ua=k[u>>2]|0}while((Ua|0)!=(E|0));fb=k[ab>>2]|0}OBa(fb)}_a=_a+-72|0}while((_a|0)!=(g|0));Sc(bb|0)}function aH(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==219105?a+8|0:0)|0}function bH(a){a=a|0;return 2880}function cH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+200|0;f=k[e>>2]|0;if(f){g=a+204|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+208|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+128|0;e=k[j>>2]|0;if(e){f=a+132|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+136|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=a+56|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+60|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+64|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function dH(a){a=a|0;k[a>>2]=29960;mH(a+8|0);return}function eH(a){a=a|0;k[a>>2]=29960;mH(a+8|0);OBa(a);return}function fH(a){a=a|0;var b=0;b=KBa(256)|0;k[b>>2]=29960;x=0;xa(718,b+8|0,a+8|0);a=x;x=0;if(a&1){a=Hc()|0;OBa(b);Sc(a|0)}else return b|0;return 0}function gH(a,b){a=a|0;b=b|0;k[b>>2]=29960;nH(b+8|0,a+8|0);return}function hH(a){a=a|0;mH(a+8|0);return}function iH(a){a=a|0;mH(a+8|0);OBa(a);return}function jH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;c=r;r=r+208|0;d=c+197|0;e=c+196|0;f=c+184|0;g=c+40|0;h=c;j=i[b+8>>0]|0;l=b+16|0;k[g>>2]=k[l>>2];i[g+4>>0]=i[l+4>>0]|0;l=g+8|0;m=l;n=b+24|0;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));p=g+48|0;x=0;xa(712,p|0,b+64|0);q=x;x=0;do if(!(q&1)){s=g+60|0;t=b+76|0;u=k[t+4>>2]|0;v=s;k[v>>2]=k[t>>2];k[v+4>>2]=u;u=g+72|0;x=0;v=Ba(590,b+112|0)|0;t=x;x=0;if(!(t&1)?(t=(k[v+4>>2]|0)+8|0,x=0,v=Ba(590,b+184|0)|0,w=x,x=0,!(w&1)):0){w=k[b+104>>2]|0;if(!w){y=Rd(4)|0;k[y>>2]=26200;x=0;fb(149,y|0,2216,320);x=0;z=u;break}x=0;nb(k[(k[w>>2]|0)+24>>2]|0,h|0,w|0,t|0,(k[v+4>>2]|0)+8|0);v=x;x=0;if(!(v&1)){k[u>>2]=2;i[g+76>>0]=1;v=g+80|0;m=v;n=h;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));t=g+120|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;k[f>>2]=0;w=f+4|0;k[w>>2]=0;k[f+8>>2]=0;x=0;y=Ba(563,144)|0;A=x;x=0;a:do if(A&1){B=Hc()|0;C=B;D=M;E=46}else{k[w>>2]=y;k[f>>2]=y;B=y+144|0;k[f+8>>2]=B;k[y>>2]=k[g>>2];i[y+4>>0]=i[g+4>>0]|0;m=y+8|0;n=l;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,y+48|0,p|0);F=x;x=0;do if(F&1){G=Hc()|0;H=y;I=G;J=M}else{G=s;K=k[G+4>>2]|0;L=y+60|0;k[L>>2]=k[G>>2];k[L+4>>2]=K;K=y+72|0;k[w>>2]=K;k[K>>2]=k[u>>2];i[K+4>>0]=i[u+4>>0]|0;m=y+80|0;n=v;o=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));x=0;xa(712,y+120|0,g+120|0);L=x;x=0;if(L&1){L=Hc()|0;G=M;N=K;while(1){O=N+-72|0;k[w>>2]=O;P=N+-24|0;Q=k[P>>2]|0;if(!Q)R=O;else{S=N+-20|0;T=k[S>>2]|0;if((T|0)==(Q|0)){U=O;V=Q}else{O=N+-16|0;W=T;do{T=W+-72|0;k[S>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,O,T);W=k[S>>2]|0}while((W|0)!=(Q|0));U=k[w>>2]|0;V=k[P>>2]|0}OBa(V);R=U}if((R|0)==(y|0))break;else N=R}H=k[f>>2]|0;I=L;J=G;break}N=g+132|0;K=k[N+4>>2]|0;Q=y+132|0;k[Q>>2]=k[N>>2];k[Q+4>>2]=K;k[w>>2]=B;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=j&255;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);K=x;x=0;if(K&1){K=Hc()|0;Q=M;N=B;while(1){W=N+-72|0;k[w>>2]=W;S=N+-24|0;O=k[S>>2]|0;if(!O)X=W;else{T=N+-20|0;Y=k[T>>2]|0;if((Y|0)==(O|0)){Z=W;_=O}else{W=N+-16|0;$=Y;do{Y=$+-72|0;k[T>>2]=Y;i[d>>0]=i[e>>0]|0;uF(d,W,Y);$=k[T>>2]|0}while(($|0)!=(O|0));Z=k[w>>2]|0;_=k[S>>2]|0}OBa(_);X=Z}if((X|0)==(y|0))break;else N=X}OBa(k[f>>2]|0);aa=Q;ba=K;break a}k[a+60>>2]=0;k[a+64>>2]=0;N=B;while(1){G=N+-72|0;k[w>>2]=G;L=N+-24|0;O=k[L>>2]|0;if(!O)ca=G;else{$=N+-20|0;T=k[$>>2]|0;if((T|0)==(O|0)){da=G;ea=O}else{G=N+-16|0;W=T;do{T=W+-72|0;k[$>>2]=T;i[d>>0]=i[e>>0]|0;uF(d,G,T);W=k[$>>2]|0}while((W|0)!=(O|0));da=k[w>>2]|0;ea=k[L>>2]|0}OBa(ea);ca=da}if((ca|0)==(y|0))break;else N=ca}OBa(k[f>>2]|0);N=k[t>>2]|0;if(N){K=g+124|0;Q=k[K>>2]|0;if((Q|0)==(N|0))fa=N;else{O=g+128|0;W=Q;do{Q=W+-72|0;k[K>>2]=Q;i[d>>0]=i[e>>0]|0;uF(d,O,Q);W=k[K>>2]|0}while((W|0)!=(N|0));fa=k[t>>2]|0}OBa(fa)}N=g+48|0;W=k[N>>2]|0;if(!W){r=c;return}K=g+52|0;O=k[K>>2]|0;if((O|0)==(W|0))ga=W;else{Q=g+56|0;$=O;do{O=$+-72|0;k[K>>2]=O;i[d>>0]=i[e>>0]|0;uF(d,Q,O);$=k[K>>2]|0}while(($|0)!=(W|0));ga=k[N>>2]|0}OBa(ga);r=c;return}while(0);OBa(H);C=I;D=J;E=46}while(0);if((E|0)==46){aa=D;ba=C}y=k[t>>2]|0;if(y){w=g+124|0;v=k[w>>2]|0;if((v|0)==(y|0))ha=y;else{s=g+128|0;A=v;do{v=A+-72|0;k[w>>2]=v;i[d>>0]=i[e>>0]|0;uF(d,s,v);A=k[w>>2]|0}while((A|0)!=(y|0));ha=k[t>>2]|0}OBa(ha)}y=g+48|0;A=k[y>>2]|0;if(!A){ia=aa;ja=ba;Sc(ja|0)}w=g+52|0;s=k[w>>2]|0;if((s|0)==(A|0))ka=A;else{v=g+56|0;B=s;do{s=B+-72|0;k[w>>2]=s;i[d>>0]=i[e>>0]|0;uF(d,v,s);B=k[w>>2]|0}while((B|0)!=(A|0));ka=k[y>>2]|0}OBa(ka);ia=aa;ja=ba;Sc(ja|0)}else z=u}else z=u}else z=g;while(0);ba=Hc()|0;aa=M;if((g|0)==(z|0)){ia=aa;ja=ba;Sc(ja|0)}ka=z;do{z=ka+-24|0;ha=k[z>>2]|0;if(ha){C=ka+-20|0;D=k[C>>2]|0;if((D|0)==(ha|0))la=ha;else{E=ka+-16|0;J=D;do{D=J+-72|0;k[C>>2]=D;i[d>>0]=i[e>>0]|0;uF(d,E,D);J=k[C>>2]|0}while((J|0)!=(ha|0));la=k[z>>2]|0}OBa(la)}ka=ka+-72|0}while((ka|0)!=(g|0));ia=aa;ja=ba;Sc(ja|0)}function kH(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==219212?a+8|0:0)|0}function lH(a){a=a|0;return 2904}function mH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+224|0;f=k[e>>2]|0;if(f){g=a+228|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+232|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+152|0;e=k[j>>2]|0;if(e){f=a+156|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+160|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=k[a+96>>2]|0;if((n|0)!=(a+80|0)){if(n)Sf[k[(k[n>>2]|0)+20>>2]&2047](n)}else Sf[k[(k[n>>2]|0)+16>>2]&2047](n);n=a+56|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+60|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+64|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+16|0;d=c+1|0;e=c;i[a>>0]=i[b>>0]|0;f=a+8|0;g=b+8|0;k[f>>2]=k[g>>2];i[f+4>>0]=i[g+4>>0]|0;g=a+16|0;f=b+16|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));xF(a+56|0,b+56|0);j=b+68|0;l=k[j+4>>2]|0;m=a+68|0;k[m>>2]=k[j>>2];k[m+4>>2]=l;l=a+80|0;m=b+96|0;j=k[m>>2]|0;do if(!j){k[a+96>>2]=0;n=7}else{if((j|0)==(b+80|0)){k[a+96>>2]=l;o=k[m>>2]|0;x=0;xa(k[(k[o>>2]|0)+12>>2]|0,o|0,l|0);o=x;x=0;if(!(o&1)){n=7;break}}else{x=0;o=Ba(k[(k[j>>2]|0)+8>>2]|0,j|0)|0;p=x;x=0;if(!(p&1)){k[a+96>>2]=o;n=7;break}}o=Hc()|0;q=M;s=o}while(0);do if((n|0)==7){j=a+104|0;m=b+104|0;k[j>>2]=k[m>>2];i[j+4>>0]=i[m+4>>0]|0;g=a+112|0;f=b+112|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,a+152|0,b+152|0);m=x;x=0;if(!(m&1)){m=b+164|0;j=k[m+4>>2]|0;o=a+164|0;k[o>>2]=k[m>>2];k[o+4>>2]=j;j=a+176|0;o=b+176|0;k[j>>2]=k[o>>2];i[j+4>>0]=i[o+4>>0]|0;g=a+184|0;f=b+184|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,a+224|0,b+224|0);o=x;x=0;if(!(o&1)){o=b+236|0;j=k[o+4>>2]|0;m=a+236|0;k[m>>2]=k[o>>2];k[m+4>>2]=j;r=c;return}j=Hc()|0;m=M;o=a+152|0;p=k[o>>2]|0;if(!p){t=m;u=j}else{v=a+156|0;w=k[v>>2]|0;if((w|0)==(p|0))y=p;else{z=a+160|0;A=w;do{w=A+-72|0;k[v>>2]=w;i[d>>0]=i[e>>0]|0;uF(d,z,w);A=k[v>>2]|0}while((A|0)!=(p|0));y=k[o>>2]|0}OBa(y);t=m;u=j}}else{p=Hc()|0;t=M;u=p}p=k[a+96>>2]|0;if((p|0)==(l|0)){Sf[k[(k[l>>2]|0)+16>>2]&2047](l);q=t;s=u;break}if(!p){q=t;s=u}else{Sf[k[(k[p>>2]|0)+20>>2]&2047](p);q=t;s=u}}while(0);u=a+56|0;t=k[u>>2]|0;if(!t)Sc(s|0);q=a+60|0;l=k[q>>2]|0;if((l|0)==(t|0))B=t;else{y=a+64|0;a=l;do{l=a+-72|0;k[q>>2]=l;i[d>>0]=i[e>>0]|0;uF(d,y,l);a=k[q>>2]|0}while((a|0)!=(t|0));B=k[u>>2]|0}OBa(B);Sc(s|0)}function oH(a){a=a|0;return}function pH(a){a=a|0;OBa(a);return}function qH(a){a=a|0;a=KBa(8)|0;k[a>>2]=29916;return a|0}function rH(a,b){a=a|0;b=b|0;k[b>>2]=29916;return}function sH(a){a=a|0;return}function tH(a){a=a|0;OBa(a);return}function uH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;b=r;r=r+48|0;e=b;k[e>>2]=0;k[e+32>>2]=1;xH(e,c,d);d=a;a=e;e=d+40|0;do{k[d>>2]=k[a>>2];d=d+4|0;a=a+4|0}while((d|0)<(e|0));r=b;return}function vH(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==219319?a+4|0:0)|0}function wH(a){a=a|0;return 2928}function xH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;if((a|0)==(c|0)){d=a+32|0;e=k[d>>2]|0;f=k[b+32>>2]|0;g=e>>>0>>0;h=g?f:e;k[d>>2]=h>>>0>8?8:h;if(g){g=e<<2;Fyb(a+g|0,0,((e>>>0>f>>>0?e:f)<<2)-g|0)|0}if(f){g=0;do{e=a+(g<<2)|0;k[e>>2]=k[b+(g<<2)>>2]^k[e>>2];g=g+1|0}while((g|0)!=(f|0))}f=(k[d>>2]|0)+-1|0;if(!f)return;else i=f;while(1){if(k[a+(i<<2)>>2]|0){j=24;break}k[d>>2]=i;i=i+-1|0;if(!i){j=24;break}}if((j|0)==24)return}if((a|0)==(b|0)){i=a+32|0;d=k[i>>2]|0;f=k[c+32>>2]|0;g=d>>>0>>0;e=g?f:d;k[i>>2]=e>>>0>8?8:e;if(g){g=d<<2;Fyb(a+g|0,0,((d>>>0>f>>>0?d:f)<<2)-g|0)|0}if(f){g=0;do{d=a+(g<<2)|0;k[d>>2]=k[c+(g<<2)>>2]^k[d>>2];g=g+1|0}while((g|0)!=(f|0))}f=(k[i>>2]|0)+-1|0;if(!f)return;else l=f;while(1){if(k[a+(l<<2)>>2]|0){j=24;break}k[i>>2]=l;l=l+-1|0;if(!l){j=24;break}}if((j|0)==24)return}else{l=b+32|0;i=a+32|0;k[i>>2]=k[l>>2];Dyb(a|0,b|0,k[l>>2]<<2|0)|0;l=k[i>>2]|0;b=k[c+32>>2]|0;f=l>>>0>>0;g=f?b:l;k[i>>2]=g>>>0>8?8:g;if(f){f=l<<2;Fyb(a+f|0,0,((l>>>0>b>>>0?l:b)<<2)-f|0)|0}if(b){f=0;do{l=a+(f<<2)|0;k[l>>2]=k[c+(f<<2)>>2]^k[l>>2];f=f+1|0}while((f|0)!=(b|0))}b=(k[i>>2]|0)+-1|0;if(!b)return;else m=b;while(1){if(k[a+(m<<2)>>2]|0){j=24;break}k[i>>2]=m;m=m+-1|0;if(!m){j=24;break}}if((j|0)==24)return}}function yH(a){a=a|0;OBa(a);return}function zH(a){a=a|0;a=KBa(8)|0;k[a>>2]=29872;return a|0}function AH(a,b){a=a|0;b=b|0;k[b>>2]=29872;return}function BH(a){a=a|0;return}function CH(a){a=a|0;OBa(a);return}function DH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;b=r;r=r+48|0;e=b;k[e>>2]=0;k[e+32>>2]=1;YB(e,c,d);d=a;a=e;e=d+40|0;do{k[d>>2]=k[a>>2];d=d+4|0;a=a+4|0}while((d|0)<(e|0));r=b;return}function EH(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==220164?a+4|0:0)|0}function FH(a){a=a|0;return 2976}function GH(a){a=a|0;OBa(a);return}function HH(a){a=a|0;a=KBa(8)|0;k[a>>2]=29828;return a|0}function IH(a,b){a=a|0;b=b|0;k[b>>2]=29828;return}function JH(a){a=a|0;return}function KH(a){a=a|0;OBa(a);return}function LH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;b=r;r=r+48|0;e=b;k[e>>2]=0;k[e+32>>2]=1;KB(e,c,d);d=a;a=e;e=d+40|0;do{k[d>>2]=k[a>>2];d=d+4|0;a=a+4|0}while((d|0)<(e|0));r=b;return}function MH(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==220595?a+4|0:0)|0}function NH(a){a=a|0;return 3008}function OH(a){a=a|0;OBa(a);return}function PH(a){a=a|0;a=KBa(8)|0;k[a>>2]=29784;return a|0}function QH(a,b){a=a|0;b=b|0;k[b>>2]=29784;return}function RH(a){a=a|0;return}function SH(a){a=a|0;OBa(a);return}function TH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;b=r;r=r+48|0;e=b;k[e>>2]=0;k[e+32>>2]=1;sC(e,c,d);d=a;a=e;e=d+40|0;do{k[d>>2]=k[a>>2];d=d+4|0;a=a+4|0}while((d|0)<(e|0));r=b;return}function UH(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==221028?a+4|0:0)|0}function VH(a){a=a|0;return 3040}function WH(a){a=a|0;OBa(a);return}function XH(a){a=a|0;a=KBa(8)|0;k[a>>2]=29740;return a|0}function YH(a,b){a=a|0;b=b|0;k[b>>2]=29740;return}function ZH(a){a=a|0;return}function _H(a){a=a|0;OBa(a);return}function $H(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;b=r;r=r+48|0;e=b;k[e>>2]=0;k[e+32>>2]=1;uC(e,c,d);d=a;a=e;e=d+40|0;do{k[d>>2]=k[a>>2];d=d+4|0;a=a+4|0}while((d|0)<(e|0));r=b;return}function aI(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==221469?a+4|0:0)|0}function bI(a){a=a|0;return 3072}function cI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29696;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function dI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29696;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function eI(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=29696;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function fI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=29696;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function gI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function hI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function iI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;c=r;r=r+96|0;d=c+85|0;e=c+84|0;f=c+72|0;g=c;h=b+8|0;k[g>>2]=k[h>>2];i[g+4>>0]=i[h+4>>0]|0;h=g+8|0;j=h;l=b+16|0;m=j+40|0;do{k[j>>2]=k[l>>2];j=j+4|0;l=l+4|0}while((j|0)<(m|0));n=g+48|0;x=0;xa(712,n|0,b+56|0);o=x;x=0;if(o&1){o=Hc()|0;p=M;q=o;Sc(q|0)}o=g+60|0;s=b+68|0;b=k[s+4>>2]|0;t=o;k[t>>2]=k[s>>2];k[t+4>>2]=b;k[f>>2]=0;b=f+4|0;k[b>>2]=0;k[f+8>>2]=0;x=0;t=Ba(563,72)|0;s=x;x=0;do if(s&1){u=Hc()|0;v=u;w=M;y=22}else{k[b>>2]=t;k[f>>2]=t;u=t+72|0;k[f+8>>2]=u;k[t>>2]=k[g>>2];i[t+4>>0]=i[g+4>>0]|0;j=t+8|0;l=h;m=j+40|0;do{k[j>>2]=k[l>>2];j=j+4|0;l=l+4|0}while((j|0)<(m|0));x=0;xa(712,t+48|0,n|0);z=x;x=0;if(z&1){z=Hc()|0;A=M;OBa(t);v=z;w=A;y=22;break}A=o;z=k[A+4>>2]|0;B=t+60|0;k[B>>2]=k[A>>2];k[B+4>>2]=z;k[b>>2]=u;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=21;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);z=x;x=0;if(z&1){z=Hc()|0;B=M;A=u;while(1){C=A+-72|0;k[b>>2]=C;D=A+-24|0;E=k[D>>2]|0;if(!E)F=C;else{G=A+-20|0;H=k[G>>2]|0;if((H|0)==(E|0)){I=C;J=E}else{C=A+-16|0;K=H;do{H=K+-72|0;k[G>>2]=H;i[d>>0]=i[e>>0]|0;uF(d,C,H);K=k[G>>2]|0}while((K|0)!=(E|0));I=k[b>>2]|0;J=k[D>>2]|0}OBa(J);F=I}if((F|0)==(t|0))break;else A=F}OBa(k[f>>2]|0);L=B;N=z;break}k[a+60>>2]=0;k[a+64>>2]=0;A=u;while(1){E=A+-72|0;k[b>>2]=E;K=A+-24|0;G=k[K>>2]|0;if(!G)O=E;else{C=A+-20|0;H=k[C>>2]|0;if((H|0)==(G|0)){P=E;Q=G}else{E=A+-16|0;R=H;do{H=R+-72|0;k[C>>2]=H;i[d>>0]=i[e>>0]|0;uF(d,E,H);R=k[C>>2]|0}while((R|0)!=(G|0));P=k[b>>2]|0;Q=k[K>>2]|0}OBa(Q);O=P}if((O|0)==(t|0))break;else A=O}OBa(k[f>>2]|0);A=g+48|0;u=k[A>>2]|0;if(!u){r=c;return}z=g+52|0;B=k[z>>2]|0;if((B|0)==(u|0))S=u;else{G=g+56|0;R=B;do{B=R+-72|0;k[z>>2]=B;i[d>>0]=i[e>>0]|0;uF(d,G,B);R=k[z>>2]|0}while((R|0)!=(u|0));S=k[A>>2]|0}OBa(S);r=c;return}while(0);if((y|0)==22){L=w;N=v}v=g+48|0;w=k[v>>2]|0;if(!w){p=L;q=N;Sc(q|0)}y=g+52|0;c=k[y>>2]|0;if((c|0)==(w|0))T=w;else{S=g+56|0;g=c;do{c=g+-72|0;k[y>>2]=c;i[d>>0]=i[e>>0]|0;uF(d,S,c);g=k[y>>2]|0}while((g|0)!=(w|0));T=k[v>>2]|0}OBa(T);p=L;q=N;Sc(q|0)}function jI(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==221896?a+8|0:0)|0}function kI(a){a=a|0;return 3104}function lI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29652;e=a+136|0;f=k[e>>2]|0;if(f){g=a+140|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+144|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+64|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+68|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+72|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function mI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29652;e=a+136|0;f=k[e>>2]|0;if(f){g=a+140|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+144|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+64|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+68|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+72|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function nI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(160)|0;k[e>>2]=29652;i[e+8>>0]=i[a+8>>0]|0;f=e+16|0;g=a+16|0;k[f>>2]=k[g>>2];i[f+4>>0]=i[g+4>>0]|0;g=e+24|0;f=a+24|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));j=e+64|0;x=0;xa(712,j|0,a+64|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+76|0;o=k[l+4>>2]|0;p=e+76|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+88|0;p=a+88|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;g=e+96|0;f=a+96|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,e+136|0,a+136|0);f=x;x=0;if(!(f&1)){f=a+148|0;a=k[f+4>>2]|0;g=e+148|0;k[g>>2]=k[f>>2];k[g+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;g=k[j>>2]|0;if(!g){m=a;n=b;OBa(e);Sc(n|0)}f=e+68|0;h=k[f>>2]|0;if((h|0)==(g|0))q=g;else{p=e+72|0;o=h;do{h=o+-72|0;k[f>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[f>>2]|0}while((o|0)!=(g|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function oI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;k[b>>2]=29652;i[b+8>>0]=i[a+8>>0]|0;f=b+16|0;g=a+16|0;k[f>>2]=k[g>>2];i[f+4>>0]=i[g+4>>0]|0;g=b+24|0;f=a+24|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));j=b+64|0;x=0;xa(712,j|0,a+64|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+76|0;o=k[l+4>>2]|0;p=b+76|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+88|0;p=a+88|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;g=b+96|0;f=a+96|0;h=g+40|0;do{k[g>>2]=k[f>>2];g=g+4|0;f=f+4|0}while((g|0)<(h|0));x=0;xa(712,b+136|0,a+136|0);f=x;x=0;if(!(f&1)){f=a+148|0;a=k[f+4>>2]|0;g=b+148|0;k[g>>2]=k[f>>2];k[g+4>>2]=a;r=c;return}c=Hc()|0;a=M;g=k[j>>2]|0;if(!g){m=a;n=c;Sc(n|0)}f=b+68|0;h=k[f>>2]|0;if((h|0)==(g|0))q=g;else{p=b+72|0;b=h;do{h=b+-72|0;k[f>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[f>>2]|0}while((b|0)!=(g|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function pI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+136|0;f=k[e>>2]|0;if(f){g=a+140|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+144|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+64|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+68|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+72|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function qI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+136|0;f=k[e>>2]|0;if(f){g=a+140|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+144|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+64|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+68|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+72|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function rI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;c=r;r=r+160|0;d=c+157|0;e=c+156|0;f=c+144|0;g=c;h=i[b+8>>0]|0;j=b+16|0;k[g>>2]=k[j>>2];i[g+4>>0]=i[j+4>>0]|0;j=g+8|0;l=j;m=b+24|0;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));o=g+48|0;x=0;xa(712,o|0,b+64|0);p=x;x=0;if(!(p&1)){p=g+60|0;q=b+76|0;s=k[q+4>>2]|0;t=p;k[t>>2]=k[q>>2];k[t+4>>2]=s;s=g+72|0;t=b+88|0;k[s>>2]=k[t>>2];i[s+4>>0]=i[t+4>>0]|0;t=g+80|0;l=t;m=b+96|0;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));q=g+120|0;x=0;xa(712,q|0,b+136|0);u=x;x=0;if(u&1)v=s;else{u=g+132|0;w=b+148|0;b=k[w+4>>2]|0;y=u;k[y>>2]=k[w>>2];k[y+4>>2]=b;k[f>>2]=0;b=f+4|0;k[b>>2]=0;k[f+8>>2]=0;x=0;y=Ba(563,144)|0;w=x;x=0;a:do if(w&1){z=Hc()|0;A=z;B=M;C=42}else{k[b>>2]=y;k[f>>2]=y;z=y+144|0;k[f+8>>2]=z;k[y>>2]=k[g>>2];i[y+4>>0]=i[g+4>>0]|0;l=y+8|0;m=j;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));x=0;xa(712,y+48|0,o|0);D=x;x=0;do if(D&1){E=Hc()|0;F=y;G=E;H=M}else{E=p;I=k[E+4>>2]|0;J=y+60|0;k[J>>2]=k[E>>2];k[J+4>>2]=I;I=y+72|0;k[b>>2]=I;k[I>>2]=k[s>>2];i[I+4>>0]=i[s+4>>0]|0;l=y+80|0;m=t;n=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));x=0;xa(712,y+120|0,q|0);J=x;x=0;if(J&1){J=Hc()|0;E=M;K=I;while(1){L=K+-72|0;k[b>>2]=L;N=K+-24|0;O=k[N>>2]|0;if(!O)P=L;else{Q=K+-20|0;R=k[Q>>2]|0;if((R|0)==(O|0)){S=L;T=O}else{L=K+-16|0;U=R;do{R=U+-72|0;k[Q>>2]=R;i[d>>0]=i[e>>0]|0;uF(d,L,R);U=k[Q>>2]|0}while((U|0)!=(O|0));S=k[b>>2]|0;T=k[N>>2]|0}OBa(T);P=S}if((P|0)==(y|0))break;else K=P}F=k[f>>2]|0;G=J;H=E;break}K=u;I=k[K+4>>2]|0;O=y+132|0;k[O>>2]=k[K>>2];k[O+4>>2]=I;k[b>>2]=z;k[a>>2]=1;i[a+4>>0]=1;k[a+8>>2]=h&255;k[a+40>>2]=1;x=0;xa(712,a+48|0,f|0);I=x;x=0;if(I&1){I=Hc()|0;O=M;K=z;while(1){U=K+-72|0;k[b>>2]=U;Q=K+-24|0;L=k[Q>>2]|0;if(!L)V=U;else{R=K+-20|0;W=k[R>>2]|0;if((W|0)==(L|0)){X=U;Y=L}else{U=K+-16|0;Z=W;do{W=Z+-72|0;k[R>>2]=W;i[d>>0]=i[e>>0]|0;uF(d,U,W);Z=k[R>>2]|0}while((Z|0)!=(L|0));X=k[b>>2]|0;Y=k[Q>>2]|0}OBa(Y);V=X}if((V|0)==(y|0))break;else K=V}OBa(k[f>>2]|0);_=O;$=I;break a}k[a+60>>2]=0;k[a+64>>2]=0;K=z;while(1){E=K+-72|0;k[b>>2]=E;J=K+-24|0;L=k[J>>2]|0;if(!L)aa=E;else{Z=K+-20|0;R=k[Z>>2]|0;if((R|0)==(L|0)){ba=E;ca=L}else{E=K+-16|0;U=R;do{R=U+-72|0;k[Z>>2]=R;i[d>>0]=i[e>>0]|0;uF(d,E,R);U=k[Z>>2]|0}while((U|0)!=(L|0));ba=k[b>>2]|0;ca=k[J>>2]|0}OBa(ca);aa=ba}if((aa|0)==(y|0))break;else K=aa}OBa(k[f>>2]|0);K=g+120|0;I=k[K>>2]|0;if(I){O=g+124|0;L=k[O>>2]|0;if((L|0)==(I|0))da=I;else{U=g+128|0;Z=L;do{L=Z+-72|0;k[O>>2]=L;i[d>>0]=i[e>>0]|0;uF(d,U,L);Z=k[O>>2]|0}while((Z|0)!=(I|0));da=k[K>>2]|0}OBa(da)}I=g+48|0;Z=k[I>>2]|0;if(!Z){r=c;return}O=g+52|0;U=k[O>>2]|0;if((U|0)==(Z|0))ea=Z;else{L=g+56|0;E=U;do{U=E+-72|0;k[O>>2]=U;i[d>>0]=i[e>>0]|0;uF(d,L,U);E=k[O>>2]|0}while((E|0)!=(Z|0));ea=k[I>>2]|0}OBa(ea);r=c;return}while(0);OBa(F);A=G;B=H;C=42}while(0);if((C|0)==42){_=B;$=A}A=g+120|0;B=k[A>>2]|0;if(B){C=g+124|0;H=k[C>>2]|0;if((H|0)==(B|0))fa=B;else{G=g+128|0;F=H;do{H=F+-72|0;k[C>>2]=H;i[d>>0]=i[e>>0]|0;uF(d,G,H);F=k[C>>2]|0}while((F|0)!=(B|0));fa=k[A>>2]|0}OBa(fa)}fa=g+48|0;A=k[fa>>2]|0;if(!A){ga=_;ha=$;Sc(ha|0)}B=g+52|0;F=k[B>>2]|0;if((F|0)==(A|0))ia=A;else{C=g+56|0;G=F;do{F=G+-72|0;k[B>>2]=F;i[d>>0]=i[e>>0]|0;uF(d,C,F);G=k[B>>2]|0}while((G|0)!=(A|0));ia=k[fa>>2]|0}OBa(ia);ga=_;ha=$;Sc(ha|0)}}else v=g;$=Hc()|0;_=M;if((g|0)==(v|0)){ga=_;ha=$;Sc(ha|0)}ia=v;do{v=ia+-24|0;fa=k[v>>2]|0;if(fa){A=ia+-20|0;G=k[A>>2]|0;if((G|0)==(fa|0))ja=fa;else{B=ia+-16|0;C=G;do{G=C+-72|0;k[A>>2]=G;i[d>>0]=i[e>>0]|0;uF(d,B,G);C=k[A>>2]|0}while((C|0)!=(fa|0));ja=k[v>>2]|0}OBa(ja)}ia=ia+-72|0}while((ia|0)!=(g|0));ga=_;ha=$;Sc(ha|0)}function sI(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222003?a+8|0:0)|0}function tI(a){a=a|0;return 3128}function uI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29608;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function vI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29608;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function wI(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=29608;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function xI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=29608;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function yI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function zI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function AI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function BI(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222110?a+8|0:0)|0}function CI(a){a=a|0;return 3152}function DI(a){a=a|0;return}function EI(a){a=a|0;OBa(a);return}function FI(a){a=a|0;a=KBa(8)|0;k[a>>2]=29564;return a|0}function GI(a,b){a=a|0;b=b|0;k[b>>2]=29564;return}function HI(a){a=a|0;return}function II(a){a=a|0;OBa(a);return}function JI(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function KI(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222217?a+4|0:0)|0}function LI(a){a=a|0;return 3176}function MI(a){a=a|0;OBa(a);return}function NI(a){a=a|0;a=KBa(8)|0;k[a>>2]=29520;return a|0}function OI(a,b){a=a|0;b=b|0;k[b>>2]=29520;return}function PI(a){a=a|0;return}function QI(a){a=a|0;OBa(a);return}function RI(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function SI(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222324?a+4|0:0)|0}function TI(a){a=a|0;return 3200}function UI(a){a=a|0;OBa(a);return}function VI(a){a=a|0;a=KBa(8)|0;k[a>>2]=29476;return a|0}function WI(a,b){a=a|0;b=b|0;k[b>>2]=29476;return}function XI(a){a=a|0;return}function YI(a){a=a|0;OBa(a);return}function ZI(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function _I(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222431?a+4|0:0)|0}function $I(a){a=a|0;return 3224}function aJ(a){a=a|0;OBa(a);return}function bJ(a){a=a|0;a=KBa(8)|0;k[a>>2]=29432;return a|0}function cJ(a,b){a=a|0;b=b|0;k[b>>2]=29432;return}function dJ(a){a=a|0;return}function eJ(a){a=a|0;OBa(a);return}function fJ(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function gJ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222538?a+4|0:0)|0}function hJ(a){a=a|0;return 3248}function iJ(a){a=a|0;OBa(a);return}function jJ(a){a=a|0;a=KBa(8)|0;k[a>>2]=29388;return a|0}function kJ(a,b){a=a|0;b=b|0;k[b>>2]=29388;return}function lJ(a){a=a|0;return}function mJ(a){a=a|0;OBa(a);return}function nJ(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function oJ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222645?a+4|0:0)|0}function pJ(a){a=a|0;return 3272}function qJ(a){a=a|0;OBa(a);return}function rJ(a){a=a|0;a=KBa(8)|0;k[a>>2]=29344;return a|0}function sJ(a,b){a=a|0;b=b|0;k[b>>2]=29344;return}function tJ(a){a=a|0;return}function uJ(a){a=a|0;OBa(a);return}function vJ(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=1;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function wJ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222752?a+4|0:0)|0}function xJ(a){a=a|0;return 3296}function yJ(a){a=a|0;OBa(a);return}function zJ(a){a=a|0;a=KBa(8)|0;k[a>>2]=29300;return a|0}function AJ(a,b){a=a|0;b=b|0;k[b>>2]=29300;return}function BJ(a){a=a|0;return}function CJ(a){a=a|0;OBa(a);return}function DJ(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function EJ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222859?a+4|0:0)|0}function FJ(a){a=a|0;return 3320}function GJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29256;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function HJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29256;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function IJ(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=29256;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function JJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=29256;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function KJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function LJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function MJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function NJ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==222966?a+8|0:0)|0}function OJ(a){a=a|0;return 3344}function PJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29212;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function QJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=29212;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function RJ(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=29212;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function SJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=29212;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function TJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function UJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function VJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function WJ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223073?a+8|0:0)|0}function XJ(a){a=a|0;return 3368}function YJ(a){a=a|0;OBa(a);return}function ZJ(a){a=a|0;a=KBa(8)|0;k[a>>2]=29168;return a|0}function _J(a,b){a=a|0;b=b|0;k[b>>2]=29168;return}function $J(a){a=a|0;return}function aK(a){a=a|0;OBa(a);return}function bK(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+80|0;c=b+40|0;d=b;e=c+32|0;k[e>>2]=8;k[c>>2]=-1;f=1;do{k[c+(f<<2)>>2]=-1;f=f+1|0;g=k[e>>2]|0}while(f>>>0>>0);h=g;f=h+-1|0;a:do if(f){h=f;do{if(k[c+(h<<2)>>2]|0)break a;k[e>>2]=h;h=h+-1|0}while((h|0)!=0)}while(0);e=d;f=c;c=e+40|0;do{k[e>>2]=k[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(c|0));k[a>>2]=2;i[a+4>>0]=1;e=a+8|0;f=d;c=e+40|0;do{k[e>>2]=k[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(c|0));f=a+48|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;r=b;return}function cK(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223180?a+4|0:0)|0}function dK(a){a=a|0;return 3392}function eK(a){a=a|0;OBa(a);return}function fK(a){a=a|0;a=KBa(8)|0;k[a>>2]=29124;return a|0}function gK(a,b){a=a|0;b=b|0;k[b>>2]=29124;return}function hK(a){a=a|0;return}function iK(a){a=a|0;OBa(a);return}function jK(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function kK(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223287?a+4|0:0)|0}function lK(a){a=a|0;return 3416}function mK(a){a=a|0;OBa(a);return}function nK(a){a=a|0;a=KBa(8)|0;k[a>>2]=29080;return a|0}function oK(a,b){a=a|0;b=b|0;k[b>>2]=29080;return}function pK(a){a=a|0;return}function qK(a){a=a|0;OBa(a);return}function rK(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function sK(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223394?a+4|0:0)|0}function tK(a){a=a|0;return 3440}function uK(a){a=a|0;OBa(a);return}function vK(a){a=a|0;a=KBa(8)|0;k[a>>2]=29036;return a|0}function wK(a,b){a=a|0;b=b|0;k[b>>2]=29036;return}function xK(a){a=a|0;return}function yK(a){a=a|0;OBa(a);return}function zK(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function AK(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223501?a+4|0:0)|0}function BK(a){a=a|0;return 3464}function CK(a){a=a|0;OBa(a);return}function DK(a){a=a|0;a=KBa(8)|0;k[a>>2]=28992;return a|0}function EK(a,b){a=a|0;b=b|0;k[b>>2]=28992;return}function FK(a){a=a|0;return}function GK(a){a=a|0;OBa(a);return}function HK(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function IK(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223608?a+4|0:0)|0}function JK(a){a=a|0;return 3488}function KK(a){a=a|0;OBa(a);return}function LK(a){a=a|0;a=KBa(8)|0;k[a>>2]=28948;return a|0}function MK(a,b){a=a|0;b=b|0;k[b>>2]=28948;return}function NK(a){a=a|0;return}function OK(a){a=a|0;OBa(a);return}function PK(a,b){a=a|0;b=b|0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=0;k[a+40>>2]=1;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function QK(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223715?a+4|0:0)|0}function RK(a){a=a|0;return 3512}function SK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28904;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function TK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28904;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function UK(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=28904;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function VK(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=28904;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function WK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function XK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function YK(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function ZK(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223822?a+8|0:0)|0}function _K(a){a=a|0;return 3536}function $K(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28860;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function aL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28860;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function bL(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=28860;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function cL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=28860;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function dL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function eL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function fL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function gL(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==223929?a+8|0:0)|0}function hL(a){a=a|0;return 3560}function iL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28816;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function jL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28816;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function kL(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=28816;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function lL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=28816;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function mL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function nL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function oL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function pL(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==224036?a+8|0:0)|0}function qL(a){a=a|0;return 3584}function rL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28772;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function sL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28772;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function tL(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=28772;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function uL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=28772;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function vL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function wL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function xL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function yL(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==224143?a+8|0:0)|0}function zL(a){a=a|0;return 3608}function AL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28728;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function BL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28728;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function CL(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=28728;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function DL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=28728;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function EL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function FL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function GL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function HL(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==224250?a+8|0:0)|0}function IL(a){a=a|0;return 3632}function JL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28684;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function KL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28684;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function LL(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=28684;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function ML(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=28684;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function NL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function OL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function PL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function QL(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==224357?a+8|0:0)|0}function RL(a){a=a|0;return 3656}function SL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28640;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function TL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28640;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function UL(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=28640;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function VL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=28640;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function WL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function XL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function YL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b+8|0;k[a>>2]=k[c>>2];i[a+4>>0]=i[c+4>>0]|0;c=a+8|0;d=b+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(a+48|0,b+56|0);d=b+68|0;b=k[d+4>>2]|0;c=a+60|0;k[c>>2]=k[d>>2];k[c+4>>2]=b;return}function ZL(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==224464?a+8|0:0)|0}function _L(a){a=a|0;return 3680}function $L(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28596;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function aM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28596;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function bM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28596;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function cM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28596;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function dM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function eM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function fM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+272|0;d=c+200|0;e=c+160|0;f=c+80|0;g=c+40|0;h=c+240|0;j=c;l=c+120|0;m=b+8|0;n=(lF(m)|0)+4|0;o=k[n>>2]|0;if((k[o+40>>2]|0)>>>0>1?1:(k[o+8>>2]|0)>>>0>30){o=(lF(b+80|0)|0)+4|0;p=l;q=(k[o>>2]|0)+8|0;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));t=l;k[a>>2]=2;u=a+4|0;i[u>>0]=1;v=a+8|0;p=v;q=t;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));w=a+48|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;r=c;return}o=(lF(m)|0)+4|0;m=k[(k[o>>2]|0)+8>>2]|0;o=m<<3|7;k[d>>2]=1;n=d+4|0;k[n>>2]=k[h>>2];k[n+4>>2]=k[h+4>>2];k[n+8>>2]=k[h+8>>2];k[n+12>>2]=k[h+12>>2];k[n+16>>2]=k[h+16>>2];k[n+20>>2]=k[h+20>>2];k[n+24>>2]=k[h+24>>2];k[d+32>>2]=1;HB(d,o,0);p=g;q=d;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));k[e>>2]=0;k[e+32>>2]=1;k[d>>2]=1;JB(e,g,d);p=f;q=e;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));e=b+80|0;b=(lF(e)|0)+4|0;g=k[b>>2]|0;b=m>>>2&134217727;if(b>>>0<(k[g+40>>2]|0)>>>0)x=(k[g+8+(b<<2)>>2]&1<<(o&31)|0)!=0;else x=0;o=(lF(e)|0)+4|0;e=(k[o>>2]|0)+8|0;if(x){k[d>>2]=0;x=d+32|0;o=k[f+32>>2]|0;k[x>>2]=8;if(!o)y=8;else{b=0;do{k[d+(b<<2)>>2]=~k[f+(b<<2)>>2];b=b+1|0}while((b|0)!=(o|0));y=k[x>>2]|0}if(o>>>0>>0){b=o;do{k[d+(b<<2)>>2]=-1;b=b+1|0;o=k[x>>2]|0}while(b>>>0>>0);z=o}else z=y;y=z+-1|0;a:do if(y){z=y;do{if(k[d+(z<<2)>>2]|0)break a;k[x>>2]=z;z=z+-1|0}while((z|0)!=0)}while(0);p=j;q=d;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));k[d>>2]=0;k[d+32>>2]=1;YB(d,e,j);p=l;q=d;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));A=l}else{k[d>>2]=0;k[d+32>>2]=1;KB(d,e,f);p=l;q=d;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));A=l}t=A;k[a>>2]=2;u=a+4|0;i[u>>0]=1;v=a+8|0;p=v;q=t;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));w=a+48|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[w+16>>2]=0;r=c;return}function gM(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==224571?a+8|0:0)|0}function hM(a){a=a|0;return 3704}function iM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28552;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function jM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28552;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function kM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28552;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function lM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28552;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function mM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function nM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function oM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+40|0;e=c;f=(lF(b+8|0)|0)+4|0;g=k[f>>2]|0;f=(lF(b+80|0)|0)+4|0;b=k[f>>2]|0;k[d>>2]=0;k[d+32>>2]=1;sC(d,g+8|0,b+8|0);b=e;g=d;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));k[a>>2]=2;i[a+4>>0]=1;b=a+8|0;g=e;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));g=a+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;r=c;return}function pM(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==224678?a+8|0:0)|0}function qM(a){a=a|0;return 3728}function rM(a){a=a|0;k[a>>2]=28508;FM(a+8|0);return}function sM(a){a=a|0;k[a>>2]=28508;FM(a+8|0);OBa(a);return}function tM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(224)|0;f=a+8|0;k[e>>2]=28508;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=e+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=e+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=e+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=e+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=e+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=b}else{g=e+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=e+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=b}}else{b=Hc()|0;s=M;t=b}b=k[j>>2]|0;if(b){a=e+60|0;u=k[a>>2]|0;if((u|0)==(b|0))v=b;else{p=e+64|0;f=u;do{u=f+-72|0;k[a>>2]=u;i[c>>0]=i[d>>0]|0;uF(c,p,u);f=k[a>>2]|0}while((f|0)!=(b|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;OBa(e);Sc(n|0);return 0}function uM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28508;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=b+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=b+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=b+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=b+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=b+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=c}else{g=b+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=b+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=c}}else{c=Hc()|0;s=M;t=c}c=k[j>>2]|0;if(c){a=b+60|0;u=k[a>>2]|0;if((u|0)==(c|0))v=c;else{p=b+64|0;b=u;do{u=b+-72|0;k[a>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,p,u);b=k[a>>2]|0}while((b|0)!=(c|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;Sc(n|0)}function vM(a){a=a|0;FM(a+8|0);return}function wM(a){a=a|0;FM(a+8|0);OBa(a);return}function xM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;c=r;r=r+96|0;d=c+84|0;e=c+72|0;f=c+56|0;g=c+40|0;h=c;j=b+8|0;l=(lF(j)|0)+4|0;m=k[l>>2]|0;if((k[m+8>>2]|0)==0?(k[m+40>>2]|0)==1:0){k[h>>2]=0;k[h+32>>2]=1;k[a>>2]=2;n=a+4|0;i[n>>0]=1;o=a+8|0;p=o;q=h;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));t=a+48|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;r=c;return}m=(lF(b+80|0)|0)+4|0;l=k[m>>2]|0;k[f>>2]=0;m=f+8|0;k[m>>2]=1;u=f+12|0;i[u>>0]=0;v=f+13|0;i[v>>0]=1;w=l+40|0;y=k[w>>2]|0;z=y>>>0>134217728?134217728:y;if(z>>>0>2){A=z>>>0>8?z:8;B=KBa(A<<2)|0;k[B>>2]=0;i[v>>0]=0;k[m>>2]=z;k[f>>2]=A;k[f+4>>2]=B;C=k[w>>2]|0;D=B}else{k[m>>2]=z;C=y;D=f}Dyb(D|0,l+8|0,(z>>>0>>0?z:C)<<2|0)|0;i[u>>0]=0;if(!(i[v>>0]|0))E=k[f+4>>2]|0;else E=f;u=(k[m>>2]|0)+-1|0;a:do if(u){C=u;do{if(k[E+(C<<2)>>2]|0)break a;k[m>>2]=C;C=C+-1|0}while((C|0)!=0)}while(0);x=0;m=Ba(590,b+152|0)|0;b=x;x=0;b:do if(!(b&1)){E=k[m+4>>2]|0;u=E+8|0;k[g>>2]=0;C=g+8|0;k[C>>2]=1;z=g+12|0;i[z>>0]=0;l=g+13|0;i[l>>0]=1;D=E+40|0;E=k[D>>2]|0;y=E>>>0>134217728?134217728:E;do if(y>>>0>2){B=y>>>0>8?y:8;x=0;w=Ba(563,B<<2|0)|0;A=x;x=0;if(A&1){A=Hc()|0;F=M;G=A;H=29;break b}else{k[w>>2]=0;i[l>>0]=0;k[C>>2]=y;k[g>>2]=B;k[g+4>>2]=w;I=k[D>>2]|0;J=w;break}}else{k[C>>2]=y;I=E;J=g}while(0);Dyb(J|0,u|0,(y>>>0>>0?y:I)<<2|0)|0;i[z>>0]=0;if(!(i[l>>0]|0))K=k[g+4>>2]|0;else K=g;E=(k[C>>2]|0)+-1|0;c:do if(E){D=E;do{if(k[K+(D<<2)>>2]|0)break c;k[C>>2]=D;D=D+-1|0}while((D|0)!=0)}while(0);x=0;C=Ba(590,j|0)|0;E=x;x=0;if(!(E&1)?(E=(k[C+4>>2]|0)+8|0,k[e>>2]=f,k[e+4>>2]=g,k[e+8>>2]=E,k[h>>2]=0,k[h+32>>2]=1,x=0,fb(216,h|0,e|0,d|0),E=x,x=0,!(E&1)):0){if(!(i[l>>0]|0))OBa(k[g+4>>2]|0);if(i[v>>0]|0){k[a>>2]=2;n=a+4|0;i[n>>0]=1;o=a+8|0;p=o;q=h;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));t=a+48|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;r=c;return}OBa(k[f+4>>2]|0);k[a>>2]=2;n=a+4|0;i[n>>0]=1;o=a+8|0;p=o;q=h;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));t=a+48|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;r=c;return}E=Hc()|0;C=M;if(!(i[l>>0]|0)){OBa(k[g+4>>2]|0);L=C;N=E}else{L=C;N=E}}else{E=Hc()|0;F=M;G=E;H=29}while(0);if((H|0)==29){L=F;N=G}if(i[v>>0]|0)Sc(N|0);OBa(k[f+4>>2]|0);Sc(N|0)}function yM(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==224785?a+8|0:0)|0}function zM(a){a=a|0;return 3752}function AM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+16|0;e=c+20|0;f=c;k[f>>2]=0;k[f+8>>2]=1;i[f+12>>0]=0;g=f+13|0;i[g>>0]=1;x=0;fb(217,f|0,k[b>>2]|0,k[b+4>>2]|0);h=x;x=0;if(!(h&1)?(k[d>>2]=k[b+8>>2],x=0,fb(218,f|0,d|0,e|0),b=x,x=0,!(b&1)):0){NB(a,f,d,e);if(i[g>>0]|0){r=c;return}OBa(k[f+4>>2]|0);r=c;return}c=Hc()|0;if(i[g>>0]|0)Sc(c|0);OBa(k[f+4>>2]|0);Sc(c|0)}function BM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=r;r=r+32|0;e=d+16|0;f=d;g=k[b+8>>2]|0;h=k[c+8>>2]|0;j=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;l=(i[c+13>>0]|0)==0?k[c+4>>2]|0:c;if((g|0)==1){m=(i[c+12>>0]|0)!=0^(i[b+12>>0]|0)!=0;if((h|0)==1){n=Qyb(k[l>>2]|0,0,k[j>>2]|0,0)|0;o=M;p=a+13|0;q=(i[p>>0]|0)==0;s=a+4|0;t=k[s>>2]|0;u=q?t:a;k[u>>2]=n;k[u+4>>2]=o;u=(o|0)!=0?2:1;o=q?k[a>>2]|0:2;if(u>>>0>o>>>0){n=o<<2;o=n>>>0>>0?u:n;n=o>>>0>134217728?134217728:o;o=KBa(n<<2)|0;if(q){q=a+8|0;Dyb(o|0,t|0,k[q>>2]<<2|0)|0;OBa(t);v=q}else{q=a+8|0;Dyb(o|0,a|0,k[q>>2]<<2|0)|0;i[p>>0]=0;v=q}k[v>>2]=u;k[a>>2]=n;k[s>>2]=o}else k[a+8>>2]=u;u=a+12|0;i[u>>0]=0;w=u}else{k[e>>2]=k[j>>2];bC(a,c,e);w=a+12|0}i[w>>0]=m&1;if(!m){r=d;return}if((k[a+8>>2]|0)!=1){r=d;return}if(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0){r=d;return}i[w>>0]=0;r=d;return}if((h|0)==1){w=(i[c+12>>0]|0)!=0^(i[b+12>>0]|0)!=0;k[e>>2]=k[l>>2];bC(a,b,e);m=a+12|0;i[m>>0]=w&1;if((w?(k[a+8>>2]|0)==1:0)?(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0)==0:0)i[m>>0]=0;r=d;return}if((a|0)==(b|0)){k[e>>2]=0;m=e+8|0;k[m>>2]=0;w=e+13|0;i[w>>0]=1;u=g>>>0>134217728?134217728:g;if(u>>>0>2){o=u>>>0>8?u:8;s=KBa(o<<2)|0;i[w>>0]=0;k[m>>2]=u;k[e>>2]=o;k[e+4>>2]=s;y=s}else{k[m>>2]=u;y=e}Dyb(y|0,j|0,g<<2|0)|0;i[e+12>>0]=i[b+12>>0]|0;x=0;fb(217,b|0,e|0,c|0);y=x;x=0;if(y&1){y=Hc()|0;u=M;if(i[w>>0]|0){z=y;A=u;Sc(z|0)}OBa(k[e+4>>2]|0);z=y;A=u;Sc(z|0)}else{if(!(i[w>>0]|0))OBa(k[e+4>>2]|0);r=d;return}}if((a|0)==(c|0)){k[f>>2]=0;e=f+8|0;k[e>>2]=0;w=f+13|0;i[w>>0]=1;u=h>>>0>134217728?134217728:h;if(u>>>0>2){y=u>>>0>8?u:8;m=KBa(y<<2)|0;i[w>>0]=0;k[e>>2]=u;k[f>>2]=y;k[f+4>>2]=m;B=m}else{k[e>>2]=u;B=f}Dyb(B|0,l|0,h<<2|0)|0;i[f+12>>0]=i[c+12>>0]|0;x=0;fb(217,c|0,b|0,f|0);B=x;x=0;if(B&1){B=Hc()|0;u=M;if(i[w>>0]|0){z=B;A=u;Sc(z|0)}OBa(k[f+4>>2]|0);z=B;A=u;Sc(z|0)}else{if(!(i[w>>0]|0))OBa(k[f+4>>2]|0);r=d;return}}f=h+g|0;w=f>>>0>134217728?134217728:f;f=a+13|0;z=i[f>>0]|0;u=z<<24>>24==0;A=u?k[a>>2]|0:2;if(w>>>0>A>>>0){B=A<<2;A=B>>>0>>0?w:B;B=A>>>0>134217728?134217728:A;A=KBa(B<<2)|0;if(u){u=a+4|0;e=k[u>>2]|0;m=a+8|0;Dyb(A|0,e|0,k[m>>2]<<2|0)|0;OBa(e);C=m;D=u}else{u=a+8|0;Dyb(A|0,a|0,k[u>>2]<<2|0)|0;i[f>>0]=0;C=u;D=a+4|0}k[C>>2]=w;k[a>>2]=B;k[D>>2]=A;E=C;F=i[f>>0]|0}else{C=a+8|0;k[C>>2]=w;E=C;F=z}z=a+4|0;C=F<<24>>24==0?k[z>>2]|0:a;Fyb(C|0,0,w<<2|0)|0;do if(g){if(!h){Fyb(C|0,0,g<<2|0)|0;break}else G=0;do{w=j+(G<<2)|0;F=0;A=0;D=0;while(1){B=Qyb(k[l+(D<<2)>>2]|0,0,k[w>>2]|0,0)|0;u=Hyb(B|0,M|0,F|0,A|0)|0;B=C+(D+G<<2)|0;m=Hyb(u|0,M|0,k[B>>2]|0,0)|0;u=M;k[B>>2]=m;D=D+1|0;if((D|0)==(h|0)){H=u;break}else{F=u;A=0}}k[C+(G+h<<2)>>2]=H;G=G+1|0}while((G|0)!=(g|0))}while(0);g=(i[f>>0]|0)==0?k[z>>2]|0:a;z=k[E>>2]|0;f=z+-1|0;a:do if(!f)I=z;else{G=f;H=z;while(1){if(k[g+(G<<2)>>2]|0){I=H;break a}k[E>>2]=G;h=G+-1|0;if(!h){I=G;break}else{C=G;G=h;H=C}}}while(0);E=(i[b+12>>0]|0)!=0^(i[c+12>>0]|0)!=0;c=a+12|0;i[c>>0]=E&1;if(!(E&(I|0)==1)){r=d;return}if(k[g>>2]|0){r=d;return}i[c>>0]=0;r=d;return}function CM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c;e=k[b>>2]|0;k[d>>2]=0;b=d+8|0;k[b>>2]=0;f=d+13|0;i[f>>0]=1;g=a+8|0;h=k[g>>2]|0;j=h>>>0>134217728?134217728:h;if(j>>>0>2){l=j>>>0>8?j:8;m=KBa(l<<2)|0;i[f>>0]=0;k[b>>2]=j;k[d>>2]=l;k[d+4>>2]=m;n=m}else{k[b>>2]=j;n=d}j=a+13|0;b=a+4|0;Dyb(n|0,((i[j>>0]|0)==0?k[b>>2]|0:a)|0,h<<2|0)|0;h=a+12|0;n=i[h>>0]|0;i[d+12>>0]=n;x=0;nb(106,0,d|0,e|0,a|0);e=x;x=0;if(e&1){e=Hc()|0;if(i[f>>0]|0)Sc(e|0);OBa(k[d+4>>2]|0);Sc(e|0)}i[h>>0]=n;if(n<<24>>24!=0&(k[g>>2]|0)==1?(k[((i[j>>0]|0)==0?k[b>>2]|0:a)>>2]|0)==0:0)i[h>>0]=0;if(i[f>>0]|0){r=c;return}OBa(k[d+4>>2]|0);r=c;return}function DM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0;e=r;r=r+80|0;f=e+32|0;g=e+16|0;h=e;if((a|0)==(b|0)|(d|0)==(b|0)){k[f>>2]=0;l=f+8|0;k[l>>2]=0;m=f+13|0;i[m>>0]=1;n=k[b+8>>2]|0;o=n>>>0>134217728?134217728:n;if(o>>>0>2){p=o>>>0>8?o:8;q=KBa(p<<2)|0;i[m>>0]=0;k[l>>2]=o;k[f>>2]=p;k[f+4>>2]=q;s=q}else{k[l>>2]=o;s=f}Dyb(s|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,n<<2|0)|0;i[f+12>>0]=i[b+12>>0]|0;x=0;nb(106,a|0,f|0,c|0,d|0);n=x;x=0;if(n&1){n=Hc()|0;s=M;if(i[m>>0]|0){t=n;u=s;Sc(t|0)}OBa(k[f+4>>2]|0);t=n;u=s;Sc(t|0)}else{if(!(i[m>>0]|0))OBa(k[f+4>>2]|0);r=e;return}}if((c|0)==(a|0)|(c|0)==(d|0)){m=f;s=c;n=m+40|0;do{k[m>>2]=k[s>>2];m=m+4|0;s=s+4|0}while((m|0)<(n|0));DM(a,b,f,d);r=e;return}if((a|0)==(d|0)){k[g>>2]=0;f=g+8|0;k[f>>2]=1;s=g+12|0;i[s>>0]=0;m=g+13|0;i[m>>0]=1;x=0;nb(106,a|0,b|0,c|0,g|0);n=x;x=0;do if(!(n&1)){if((g|0)==(a|0))v=i[m>>0]|0;else{o=a+8|0;k[o>>2]=0;l=k[f>>2]|0;q=l>>>0>134217728?134217728:l;p=a+13|0;w=i[p>>0]|0;y=w<<24>>24==0;z=y?k[a>>2]|0:2;if(q>>>0>z>>>0){A=z<<2;z=A>>>0>>0?q:A;A=z>>>0>134217728?134217728:z;x=0;z=Ba(563,A<<2|0)|0;B=x;x=0;if(B&1)break;if(y){y=a+4|0;OBa(k[y>>2]|0);C=y;D=k[f>>2]|0}else{i[p>>0]=0;C=a+4|0;D=l}k[o>>2]=q;k[a>>2]=A;k[C>>2]=z;E=i[p>>0]|0;F=D}else{k[o>>2]=q;E=w;F=l}Dyb((E<<24>>24==0?k[a+4>>2]|0:a)|0,((i[m>>0]|0)==0?k[g+4>>2]|0:g)|0,F<<2|0)|0;l=j[s>>1]|0;i[a+12>>0]=l;v=(l&65535)>>>8&255}if(!(v<<24>>24))OBa(k[g+4>>2]|0);r=e;return}while(0);v=Hc()|0;s=M;if(i[m>>0]|0){t=v;u=s;Sc(t|0)}OBa(k[g+4>>2]|0);t=v;u=s;Sc(t|0)}s=c+32|0;v=k[s>>2]|0;g=v+-1|0;if(!g){EM(a,b,k[c>>2]|0,d);r=e;return}m=b+13|0;F=i[m>>0]|0;E=b+4|0;D=k[E>>2]|0;C=F<<24>>24==0?D:b;f=b+8|0;n=k[f>>2]|0;l=n+-1|0;w=(l|0)==0;if(w?(k[C>>2]|0)==0:0){q=d+8|0;k[q>>2]=0;o=k[f>>2]|0;p=o>>>0>134217728?134217728:o;o=d+13|0;z=i[o>>0]|0;A=z<<24>>24==0;y=A?k[d>>2]|0:2;if(p>>>0>y>>>0){B=y<<2;y=B>>>0

      >>0?p:B;B=y>>>0>134217728?134217728:y;y=KBa(B<<2)|0;if(A){A=d+4|0;OBa(k[A>>2]|0);G=A}else{i[o>>0]=0;G=d+4|0}k[q>>2]=p;k[d>>2]=B;k[G>>2]=y;H=i[o>>0]|0;I=i[m>>0]|0;J=k[E>>2]|0}else{k[q>>2]=p;H=z;I=F;J=D}Dyb((H<<24>>24==0?k[d+4>>2]|0:d)|0,(I<<24>>24==0?J:b)|0,k[f>>2]<<2|0)|0;i[d+12>>0]=i[b+12>>0]|0;if(!a){r=e;return}J=a+8|0;k[J>>2]=0;I=k[f>>2]|0;H=I>>>0>134217728?134217728:I;I=a+13|0;z=i[I>>0]|0;p=z<<24>>24==0;if(p)K=k[a>>2]|0;else K=2;if(H>>>0>K>>>0){q=K<<2;K=q>>>0>>0?H:q;q=K>>>0>134217728?134217728:K;K=KBa(q<<2)|0;if(p){p=a+4|0;OBa(k[p>>2]|0);L=p}else{i[I>>0]=0;L=a+4|0}k[J>>2]=H;k[a>>2]=q;k[L>>2]=K;N=i[I>>0]|0}else{k[J>>2]=H;N=z}if(!(N<<24>>24))O=k[a+4>>2]|0;else O=a;Dyb(O|0,((i[m>>0]|0)==0?k[E>>2]|0:b)|0,k[f>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0;r=e;return}O=d+8|0;k[O>>2]=0;N=k[f>>2]|0;z=N>>>0>134217728?134217728:N;N=d+13|0;H=i[N>>0]|0;J=H<<24>>24==0;I=J?k[d>>2]|0:2;if(z>>>0>I>>>0){K=I<<2;I=K>>>0>>0?z:K;K=I>>>0>134217728?134217728:I;I=KBa(K<<2)|0;if(J){J=d+4|0;OBa(k[J>>2]|0);P=J}else{i[N>>0]=0;P=d+4|0}k[O>>2]=z;k[d>>2]=K;k[P>>2]=I;Q=i[N>>0]|0;R=i[m>>0]|0;S=k[E>>2]|0}else{k[O>>2]=z;Q=H;R=F;S=D}Dyb((Q<<24>>24==0?k[d+4>>2]|0:d)|0,(R<<24>>24==0?S:b)|0,k[f>>2]<<2|0)|0;f=d+12|0;i[f>>0]=0;b=(a|0)!=0;if(b){S=a+13|0;R=i[S>>0]|0;do if(R<<24>>24==0?(k[a>>2]|0)==0:0){x=0;Q=Ba(563,4)|0;D=x;x=0;if(D&1){D=Hc(0)|0;Fg(D)}else{D=a+4|0;F=k[D>>2]|0;H=a+8|0;Dyb(Q|0,F|0,k[H>>2]<<2|0)|0;OBa(F);k[H>>2]=1;k[a>>2]=1;k[D>>2]=Q;T=i[S>>0]|0;break}}else U=64;while(0);if((U|0)==64){k[a+8>>2]=1;T=R}if(!(T<<24>>24))V=k[a+4>>2]|0;else V=a;k[V>>2]=0;i[a+12>>0]=0}a:do if(l>>>0<=g>>>0){if(l>>>0>>0){r=e;return}V=k[d+8>>2]|0;T=k[s>>2]|0;if((V|0)!=(T|0)){if(V>>>0>T>>>0)break;r=e;return}T=(i[d+13>>0]|0)==0?k[d+4>>2]|0:d;R=V;while(1){R=R+-1|0;if((R|0)<=-1)break a;V=k[T+(R<<2)>>2]|0;S=k[c+(R<<2)>>2]|0;if((V|0)!=(S|0)){W=V;X=S;break}}if(W>>>0<=X>>>0){r=e;return}}while(0);k[h>>2]=0;X=h+8|0;k[X>>2]=1;W=h+12|0;i[W>>0]=0;R=h+13|0;i[R>>0]=1;b:do if(w){if(b){T=((k[C>>2]|0)>>>0)/((k[c>>2]|0)>>>0)|0;S=a+13|0;V=i[S>>0]|0;do if(V<<24>>24==0?(k[a>>2]|0)==0:0){x=0;Q=Ba(563,4)|0;D=x;x=0;if(D&1){D=Hc(0)|0;Fg(D)}else{D=a+4|0;H=k[D>>2]|0;F=a+8|0;Dyb(Q|0,H|0,k[F>>2]<<2|0)|0;OBa(H);k[F>>2]=1;k[a>>2]=1;k[D>>2]=Q;Y=i[S>>0]|0;break}}else U=84;while(0);if((U|0)==84){k[a+8>>2]=1;Y=V}if(!(Y<<24>>24))Z=k[a+4>>2]|0;else Z=a;k[Z>>2]=T;i[a+12>>0]=0}S=((k[C>>2]|0)>>>0)%((k[c>>2]|0)>>>0)|0;Q=d+13|0;D=i[Q>>0]|0;do if(D<<24>>24==0&(k[d>>2]|0)==0){x=0;F=Ba(563,4)|0;H=x;x=0;if(H&1){H=Hc(0)|0;Fg(H)}else{H=d+4|0;z=k[H>>2]|0;O=d+8|0;Dyb(F|0,z|0,k[O>>2]<<2|0)|0;OBa(z);k[O>>2]=1;k[d>>2]=1;k[H>>2]=F;_=i[Q>>0]|0;$=F;break}}else{k[d+8>>2]=1;_=D;$=k[d+4>>2]|0}while(0);k[(_<<24>>24==0?$:d)>>2]=S;i[f>>0]=0}else{c:do if((l|0)!=1){if(b){D=n-g|0;Q=D>>>0>134217728?134217728:D;D=a+13|0;T=(i[D>>0]|0)==0;if(T)aa=k[a>>2]|0;else aa=2;if(Q>>>0>aa>>>0){V=aa<<2;F=V>>>0>>0?Q:V;V=F>>>0>134217728?134217728:F;x=0;F=Ba(563,V<<2|0)|0;H=x;x=0;if(H&1){U=92;break}if(T){T=a+4|0;H=k[T>>2]|0;O=a+8|0;Dyb(F|0,H|0,k[O>>2]<<2|0)|0;OBa(H);ba=T;ca=O}else{O=a+8|0;Dyb(F|0,a|0,k[O>>2]<<2|0)|0;i[D>>0]=0;ba=a+4|0;ca=O}k[ca>>2]=Q;k[a>>2]=V;k[ba>>2]=F}else k[a+8>>2]=Q;Q=d+13|0;F=d+4|0;V=(i[Q>>0]|0)==0?k[F>>2]|0:d;O=a+13|0;if(!(i[O>>0]|0))da=k[a+4>>2]|0;else da=a;if((n-g|0)>>>0>1){Fyb(da+4|0,0,n-v<<2|0)|0;ea=O;fa=Q;ga=F;ha=d;ia=V;ja=da}else{ea=O;fa=Q;ga=F;ha=d;ia=V;ja=da}}else{V=d+13|0;F=d+4|0;ea=a+13|0;fa=V;ga=F;ha=d;ia=(i[V>>0]|0)==0?k[F>>2]|0:d;ja=0}F=c+(g<<2)|0;V=h+4|0;Q=a+12|0;O=d+8|0;D=a+8|0;T=a+4|0;H=c+(v+-2<<2)|0;z=1-v|0;E=1;m=ia;N=0;I=l;d:while(1){P=k[m+(I<<2)>>2]|0;K=k[F>>2]|0;do if(!((I|0)!=0&P>>>0<=K>>>0))if(!I){ka=((k[m>>2]|0)>>>0)/(K>>>0)|0;la=0;break}else{J=Ryb(k[m+(I+-1<<2)>>2]|0,P|0,k[H>>2]|0,K|0)|0;ka=J;la=I;break}else{J=I+-1|0;L=Ryb(k[m+(J<<2)>>2]|0,P|0,K|0,0)|0;q=M;p=q>>>0>0|(q|0)==0&L>>>0>4294967295;ka=p?1:L;la=p?I:J}while(0);K=la-g|0;do if(b){P=ja+(K<<2)|0;J=k[P>>2]|0;if(N){if(J>>>0>ka>>>0){k[P>>2]=J-ka;break}p=K+1|0;L=p>>>0>134217728?134217728:p;p=i[R>>0]|0;q=p<<24>>24==0;if(q)ma=k[h>>2]|0;else ma=2;if(L>>>0>ma>>>0){o=ma<<2;y=o>>>0>>0?L:o;o=y>>>0>134217728?134217728:y;x=0;y=Ba(563,o<<2|0)|0;G=x;x=0;if(G&1){U=91;break d}if(q){q=k[V>>2]|0;Dyb(y|0,q|0,k[X>>2]<<2|0)|0;OBa(q);na=i[R>>0]|0}else{Dyb(y|0,h|0,k[X>>2]<<2|0)|0;i[R>>0]=0;na=0}k[X>>2]=L;k[h>>2]=o;k[V>>2]=y;oa=na}else{k[X>>2]=L;oa=p}p=oa<<24>>24==0;if(p)pa=k[V>>2]|0;else pa=h;k[pa+(K<<2)>>2]=ka;do if((la|0)!=(g|0)){if(!p){L=z+la|0;Fyb(h|0,0,(L>>>0>1?L:1)<<2|0)|0;break}L=k[V>>2]|0;y=0;do{k[L+(y<<2)>>2]=0;y=y+1|0}while(y>>>0>>0)}while(0);x=0;if((i[Q>>0]|0)!=0^(i[W>>0]|0)!=0){aC(a,a,h);p=x;x=0;if(p&1){U=91;break d}else break}else{$B(a,a,h);p=x;x=0;if(p&1){U=91;break d}else break}}else{if(ka>>>0<~J>>>0){k[P>>2]=J+ka;break}p=K+1|0;y=p>>>0>134217728?134217728:p;p=i[R>>0]|0;L=p<<24>>24==0;if(L)qa=k[h>>2]|0;else qa=2;if(y>>>0>qa>>>0){o=qa<<2;q=o>>>0>>0?y:o;o=q>>>0>134217728?134217728:q;x=0;q=Ba(563,o<<2|0)|0;G=x;x=0;if(G&1){U=91;break d}if(L){L=k[V>>2]|0;Dyb(q|0,L|0,k[X>>2]<<2|0)|0;OBa(L);ra=i[R>>0]|0}else{Dyb(q|0,h|0,k[X>>2]<<2|0)|0;i[R>>0]=0;ra=0}k[X>>2]=y;k[h>>2]=o;k[V>>2]=q;sa=ra}else{k[X>>2]=y;sa=p}p=sa<<24>>24==0;if(p)ta=k[V>>2]|0;else ta=h;k[ta+(K<<2)>>2]=ka;do if((la|0)!=(g|0)){if(!p){y=z+la|0;Fyb(h|0,0,(y>>>0>1?y:1)<<2|0)|0;break}y=k[V>>2]|0;q=0;do{k[y+(q<<2)>>2]=0;q=q+1|0}while(q>>>0>>0)}while(0);x=0;if((i[Q>>0]|0)!=0^(i[W>>0]|0)!=0){$B(a,a,h);p=x;x=0;if(p&1){U=91;break d}else break}else{aC(a,a,h);p=x;x=0;if(p&1){U=91;break d}else break}}}while(0);p=K+1+(k[s>>2]|0)|0;J=p>>>0>134217728?134217728:p;p=i[R>>0]|0;P=p<<24>>24==0;if(P)ua=k[h>>2]|0;else ua=2;if(J>>>0>ua>>>0){q=ua<<2;y=q>>>0>>0?J:q;q=y>>>0>134217728?134217728:y;x=0;y=Ba(563,q<<2|0)|0;o=x;x=0;if(o&1){U=91;break}if(P){P=k[V>>2]|0;Dyb(y|0,P|0,k[X>>2]<<2|0)|0;OBa(P);va=i[R>>0]|0}else{Dyb(y|0,h|0,k[X>>2]<<2|0)|0;i[R>>0]=0;va=0}k[X>>2]=J;k[h>>2]=q;k[V>>2]=y;wa=va}else{k[X>>2]=J;wa=p}if(!(wa<<24>>24))xa=k[V>>2]|0;else xa=h;if((la|0)!=(g|0)){p=z+la|0;Fyb(xa|0,0,(p>>>0>1?p:1)<<2|0)|0}do if(!(k[s>>2]|0))U=208;else{p=0;J=0;y=0;while(1){q=Qyb(k[c+(y<<2)>>2]|0,0,ka|0,0)|0;P=Hyb(q|0,M|0,p|0,J|0)|0;q=M;k[xa+(y+K<<2)>>2]=P;y=y+1|0;if(y>>>0>=(k[s>>2]|0)>>>0){ya=q;za=0;break}else{p=q;J=0}}if((ya|0)==0&(za|0)==0){U=208;break}J=k[X>>2]|0;k[xa+(J+-1<<2)>>2]=ya;Aa=J}while(0);do if((U|0)==208){U=0;K=k[X>>2]|0;J=K+-1|0;p=J>>>0>134217728?134217728:J;J=(i[R>>0]|0)==0;if(J)Ca=k[h>>2]|0;else Ca=2;if(p>>>0<=Ca>>>0){k[X>>2]=p;Aa=p;break}y=Ca<<2;q=y>>>0

      >>0?p:y;y=q>>>0>134217728?134217728:q;x=0;q=Ba(563,y<<2|0)|0;P=x;x=0;if(P&1){U=91;break d}if(J){J=k[V>>2]|0;Dyb(q|0,J|0,K<<2|0)|0;OBa(J)}else{Dyb(q|0,h|0,K<<2|0)|0;i[R>>0]=0}k[X>>2]=p;k[h>>2]=y;k[V>>2]=q;Aa=p}while(0);p=i[f>>0]|0;q=p<<24>>24!=0;y=j[W>>1]|0;K=y&255;J=q^K<<24>>24!=0;P=(y&65535)>>>8&255;do if(!J){y=k[O>>2]|0;e:do if((y|0)==(Aa|0)){o=(i[fa>>0]|0)==0?k[ga>>2]|0:ha;L=P<<24>>24==0?k[V>>2]|0:h;G=Aa;while(1){G=G+-1|0;if((G|0)<=-1){Da=0;break e}B=k[o+(G<<2)>>2]|0;A=k[L+(G<<2)>>2]|0;if((B|0)!=(A|0)){Ea=B;Fa=A;break}}Da=Ea>>>0>Fa>>>0?1:-1}else Da=y>>>0>Aa>>>0?1:-1;while(0);if(((q?0-Da|0:Da)|0)<=0){Ga=y;U=230;break}if(J){U=228;break}x=0;fb(220,d|0,d|0,h|0);G=x;x=0;if(G&1){U=91;break d}else{Ha=m;Ia=N}}else{if(!q){U=228;break}Ga=k[O>>2]|0;U=230}while(0);if((U|0)==228){U=0;x=0;fb(219,d|0,d|0,h|0);q=x;x=0;if(q&1){U=91;break}else{Ha=m;Ia=N}}else if((U|0)==230){U=0;q=d;G=k[q>>2]|0;L=k[q+4>>2]|0;q=h;o=k[q+4>>2]|0;A=d;k[A>>2]=k[q>>2];k[A+4>>2]=o;o=h;k[o>>2]=G;k[o+4>>2]=L;i[f>>0]=K;i[W>>0]=p;L=i[fa>>0]|0;i[fa>>0]=P;i[R>>0]=L;k[O>>2]=k[X>>2];k[X>>2]=Ga;x=0;if(J){aC(d,d,h);L=x;x=0;if(L&1){U=91;break}}else{$B(d,d,h);L=x;x=0;if(L&1){U=91;break}}Ha=(i[fa>>0]|0)==0?k[ga>>2]|0:ha;Ia=N^1}do if(b&E){L=k[D>>2]|0;o=L+-1|0;if(!(k[ja+(o<<2)>>2]|0)){Ja=o;Ka=L}else{La=0;break}while(1){L=Ka;Ka=Ja>>>0>134217728?134217728:Ja;o=(i[ea>>0]|0)==0;if(o)Ma=k[a>>2]|0;else Ma=2;if(Ka>>>0>Ma>>>0){G=Ma<<2;A=G>>>0>>0?Ka:G;G=A>>>0>134217728?134217728:A;x=0;A=Ba(563,G<<2|0)|0;q=x;x=0;if(q&1){U=90;break d}if(o){o=k[T>>2]|0;Dyb(A|0,o|0,L<<2|0)|0;OBa(o)}else{Dyb(A|0,a|0,L<<2|0)|0;i[ea>>0]=0}k[D>>2]=Ka;k[a>>2]=G;k[T>>2]=A}else k[D>>2]=Ka;Ja=Ka+-1|0;if(k[ja+(Ja<<2)>>2]|0){La=0;break}}}else La=E;while(0);J=k[O>>2]|0;P=I;I=J+-1|0;if(I>>>0>>0){Na=J;Oa=Ia;U=254;break}if(I>>>0>g>>>0){E=La;m=Ha;N=Ia;I=I;continue}P=k[s>>2]|0;if((J|0)!=(P|0))if(J>>>0>P>>>0){E=La;m=Ha;N=Ia;I=I;continue}else{Na=J;Oa=Ia;U=254;break}P=(i[fa>>0]|0)==0?k[ga>>2]|0:ha;p=J;while(1){p=p+-1|0;if((p|0)<=-1){E=La;m=Ha;N=Ia;I=I;continue d}K=k[P+(p<<2)>>2]|0;y=k[c+(p<<2)>>2]|0;if((K|0)!=(y|0)){Pa=K;Qa=y;break}}if(Pa>>>0<=Qa>>>0){Na=J;Oa=Ia;U=254;break}else{E=La;m=Ha;N=Ia}}if((U|0)==90){N=Hc()|0;Ra=N;Sa=M;break}else if((U|0)==91){N=Hc()|0;Ra=N;Sa=M;break}else if((U|0)==254){if(!Oa)break b;if((Na|0)==1?(k[((i[fa>>0]|0)==0?k[ga>>2]|0:ha)>>2]|0)==0:0)break b;do if(b){N=i[ea>>0]|0;if(!(i[Q>>0]|0)){m=N<<24>>24==0?k[T>>2]|0:a;E=k[m>>2]|0;if(!E){x=0;fb(222,a|0,a|0,30348);I=x;x=0;if(I&1){U=92;break c}else break}else{k[m>>2]=E+-1;break}}else{E=N<<24>>24==0?k[T>>2]|0:a;N=k[E>>2]|0;if((N|0)==-1){x=0;fb(221,a|0,a|0,30348);m=x;x=0;if(m&1){U=92;break c}else break}else{k[E>>2]=N+1;break}}}while(0);x=0;if(!(i[f>>0]|0)){TB(d,c,d);T=x;x=0;if(T&1){U=92;break}else break b}else{SB(d,c,d);T=x;x=0;if(T&1){U=92;break}else break b}}}else{T=k[C+4>>2]|0;Q=k[C>>2]|0;N=k[c+4>>2]|0;E=k[c>>2]|0;if(b){m=Ryb(Q|0,T|0,E|0,N|0)|0;I=M;O=a+13|0;D=(i[O>>0]|0)==0;if(D)Ta=k[a+4>>2]|0;else Ta=a;k[Ta>>2]=m;k[Ta+4>>2]=I;m=(I|0)!=0?2:1;if(D)Ua=k[a>>2]|0;else Ua=2;if(m>>>0>Ua>>>0){I=Ua<<2;V=I>>>0>>0?m:I;I=V>>>0>134217728?134217728:V;x=0;V=Ba(563,I<<2|0)|0;z=x;x=0;if(z&1){U=92;break}if(D){D=a+4|0;z=k[D>>2]|0;H=a+8|0;Dyb(V|0,z|0,k[H>>2]<<2|0)|0;OBa(z);Va=D;Wa=H}else{H=a+8|0;Dyb(V|0,a|0,k[H>>2]<<2|0)|0;i[O>>0]=0;Va=a+4|0;Wa=H}k[Wa>>2]=m;k[a>>2]=I;k[Va>>2]=V}else k[a+8>>2]=m;i[a+12>>0]=0}m=Syb(Q|0,T|0,E|0,N|0)|0;N=M;E=d+13|0;T=(i[E>>0]|0)==0;Q=d+4|0;V=k[Q>>2]|0;I=T?V:d;k[I>>2]=m;k[I+4>>2]=N;I=(N|0)!=0?2:1;N=T?k[d>>2]|0:2;if(I>>>0>N>>>0){m=N<<2;N=m>>>0>>0?I:m;m=N>>>0>134217728?134217728:N;x=0;N=Ba(563,m<<2|0)|0;H=x;x=0;if(H&1){U=92;break}if(T){T=d+8|0;Dyb(N|0,V|0,k[T>>2]<<2|0)|0;OBa(V);Xa=T}else{T=d+8|0;Dyb(N|0,d|0,k[T>>2]<<2|0)|0;i[E>>0]=0;Xa=T}k[Xa>>2]=I;k[d>>2]=m;k[Q>>2]=N}else k[d+8>>2]=I;i[f>>0]=0;break b}while(0);if((U|0)==92){S=Hc()|0;Ra=S;Sa=M}if(i[R>>0]|0){t=Ra;u=Sa;Sc(t|0)}OBa(k[h+4>>2]|0);t=Ra;u=Sa;Sc(t|0)}while(0);if(!(i[R>>0]|0))OBa(k[h+4>>2]|0);r=e;return}function EM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;e=r;r=r+48|0;f=e+16|0;g=e;h=e+32|0;if((a|0)==(b|0)|(d|0)==(b|0)){k[f>>2]=0;l=f+8|0;k[l>>2]=0;m=f+13|0;i[m>>0]=1;n=k[b+8>>2]|0;o=n>>>0>134217728?134217728:n;if(o>>>0>2){p=o>>>0>8?o:8;q=KBa(p<<2)|0;i[m>>0]=0;k[l>>2]=o;k[f>>2]=p;k[f+4>>2]=q;s=q}else{k[l>>2]=o;s=f}Dyb(s|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,n<<2|0)|0;i[f+12>>0]=i[b+12>>0]|0;x=0;nb(107,a|0,f|0,c|0,d|0);n=x;x=0;if(n&1){n=Hc()|0;s=M;if(i[m>>0]|0){t=n;u=s;Sc(t|0)}OBa(k[f+4>>2]|0);t=n;u=s;Sc(t|0)}else{if(!(i[m>>0]|0))OBa(k[f+4>>2]|0);r=e;return}}if((a|0)==(d|0)){k[g>>2]=0;f=g+8|0;k[f>>2]=1;m=g+12|0;i[m>>0]=0;s=g+13|0;i[s>>0]=1;x=0;nb(107,a|0,b|0,c|0,g|0);n=x;x=0;do if(!(n&1)){if((g|0)==(a|0))v=i[s>>0]|0;else{o=a+8|0;k[o>>2]=0;l=k[f>>2]|0;q=l>>>0>134217728?134217728:l;p=a+13|0;w=i[p>>0]|0;y=w<<24>>24==0;z=y?k[a>>2]|0:2;if(q>>>0>z>>>0){A=z<<2;z=A>>>0>>0?q:A;A=z>>>0>134217728?134217728:z;x=0;z=Ba(563,A<<2|0)|0;B=x;x=0;if(B&1)break;if(y){y=a+4|0;OBa(k[y>>2]|0);C=y;D=k[f>>2]|0}else{i[p>>0]=0;C=a+4|0;D=l}k[o>>2]=q;k[a>>2]=A;k[C>>2]=z;E=i[p>>0]|0;F=D}else{k[o>>2]=q;E=w;F=l}Dyb((E<<24>>24==0?k[a+4>>2]|0:a)|0,((i[s>>0]|0)==0?k[g+4>>2]|0:g)|0,F<<2|0)|0;l=j[m>>1]|0;i[a+12>>0]=l;v=(l&65535)>>>8&255}if(!(v<<24>>24))OBa(k[g+4>>2]|0);r=e;return}while(0);v=Hc()|0;m=M;if(i[s>>0]|0){t=v;u=m;Sc(t|0)}OBa(k[g+4>>2]|0);t=v;u=m;Sc(t|0)}if(!c){H0a(h,224804);k[h>>2]=47584;x=0;nb(99,h|0,224830,225374,325);x=0;m=Hc()|0;v=M;qCa(h);t=m;u=v;Sc(t|0)}t=b+8|0;v=k[t>>2]|0;u=v+-1|0;m=d+8|0;k[m>>2]=0;h=k[t>>2]|0;g=h>>>0>134217728?134217728:h;h=d+13|0;s=i[h>>0]|0;F=s<<24>>24==0;E=F?k[d>>2]|0:2;if(g>>>0>E>>>0){D=E<<2;E=D>>>0>>0?g:D;D=E>>>0>134217728?134217728:E;E=KBa(D<<2)|0;if(F){F=d+4|0;OBa(k[F>>2]|0);G=F}else{i[h>>0]=0;G=d+4|0}k[m>>2]=g;k[d>>2]=D;k[G>>2]=E;H=i[h>>0]|0}else{k[m>>2]=g;H=s}s=d+4|0;Dyb((H<<24>>24==0?k[s>>2]|0:d)|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,k[t>>2]<<2|0)|0;t=d+12|0;i[t>>0]=0;H=(i[h>>0]|0)==0?k[s>>2]|0:d;switch(v|0){case 1:{g=k[H>>2]|0;m=(a|0)==0;if(g>>>0>>0){if(m){r=e;return}E=a+13|0;G=i[E>>0]|0;do if(G<<24>>24==0?(k[a>>2]|0)==0:0){x=0;D=Ba(563,4)|0;F=x;x=0;if(F&1){F=Hc(0)|0;Fg(F)}else{F=a+4|0;C=k[F>>2]|0;f=a+8|0;Dyb(D|0,C|0,k[f>>2]<<2|0)|0;OBa(C);k[f>>2]=1;k[a>>2]=1;k[F>>2]=D;I=i[E>>0]|0;break}}else J=43;while(0);if((J|0)==43){k[a+8>>2]=1;I=G}if(!(I<<24>>24))K=k[a+4>>2]|0;else K=a;k[K>>2]=0;i[a+12>>0]=0;r=e;return}if(!m){m=(g>>>0)/(c>>>0)|0;g=a+13|0;K=i[g>>0]|0;do if(K<<24>>24==0?(k[a>>2]|0)==0:0){x=0;I=Ba(563,4)|0;G=x;x=0;if(G&1){G=Hc(0)|0;Fg(G)}else{G=a+4|0;E=k[G>>2]|0;D=a+8|0;Dyb(I|0,E|0,k[D>>2]<<2|0)|0;OBa(E);k[D>>2]=1;k[a>>2]=1;k[G>>2]=I;L=i[g>>0]|0;break}}else J=55;while(0);if((J|0)==55){k[a+8>>2]=1;L=K}K=L<<24>>24==0;if(K)N=k[a+4>>2]|0;else N=a;k[N>>2]=m;m=a+12|0;i[m>>0]=0;N=b+12|0;L=i[N>>0]|0;i[m>>0]=L;if(L<<24>>24){if(K)O=k[a+4>>2]|0;else O=a;if(!(k[O>>2]|0)){i[m>>0]=0;P=N}else P=N}else P=N}else P=b+12|0;k[H>>2]=((k[H>>2]|0)>>>0)%(c>>>0)|0;N=i[P>>0]|0;i[t>>0]=N;if(!(N<<24>>24)){r=e;return}if((k[d+8>>2]|0)!=1){r=e;return}if(k[((i[h>>0]|0)==0?k[s>>2]|0:d)>>2]|0){r=e;return}i[t>>0]=0;r=e;return}case 2:{N=k[H+(u<<2)>>2]|0;P=k[H>>2]|0;if(a){m=Ryb(P|0,N|0,c|0,0)|0;O=M;K=a+13|0;L=(i[K>>0]|0)==0;if(L)Q=k[a+4>>2]|0;else Q=a;k[Q>>2]=m;k[Q+4>>2]=O;Q=(O|0)!=0?2:1;if(L)R=k[a>>2]|0;else R=2;if(Q>>>0>R>>>0){O=R<<2;R=O>>>0>>0?Q:O;O=R>>>0>134217728?134217728:R;R=KBa(O<<2)|0;if(L){L=a+4|0;m=k[L>>2]|0;g=a+8|0;Dyb(R|0,m|0,k[g>>2]<<2|0)|0;OBa(m);S=L;T=g}else{g=a+8|0;Dyb(R|0,a|0,k[g>>2]<<2|0)|0;i[K>>0]=0;S=a+4|0;T=g}k[T>>2]=Q;k[a>>2]=O;k[S>>2]=R}else k[a+8>>2]=Q;Q=a+12|0;i[Q>>0]=0;R=i[b+12>>0]|0;i[Q>>0]=R;if(R<<24>>24!=0?(k[a+8>>2]|0)==1:0){if(!(i[K>>0]|0))U=k[a+4>>2]|0;else U=a;if(!(k[U>>2]|0))i[Q>>0]=0}}Q=Syb(P|0,N|0,c|0,0)|0;N=(i[h>>0]|0)==0;P=k[s>>2]|0;U=N?P:d;k[U>>2]=Q;k[U+4>>2]=0;if(N&(k[d>>2]|0)==0){U=KBa(4)|0;if(N){N=d+8|0;Dyb(U|0,P|0,k[N>>2]<<2|0)|0;OBa(P);V=N}else{N=d+8|0;Dyb(U|0,d|0,k[N>>2]<<2|0)|0;i[h>>0]=0;V=N}k[V>>2]=1;k[d>>2]=1;k[s>>2]=U}else k[d+8>>2]=1;i[t>>0]=0;U=i[b+12>>0]|0;i[t>>0]=U;if(!(U<<24>>24)){r=e;return}if((k[d+8>>2]|0)!=1){r=e;return}if(k[((i[h>>0]|0)==0?k[s>>2]|0:d)>>2]|0){r=e;return}i[t>>0]=0;r=e;return}default:{U=(a|0)!=0;if(U){V=v>>>0>134217728?134217728:v;v=a+13|0;N=i[v>>0]|0;P=N<<24>>24==0;if(P)W=k[a>>2]|0;else W=2;if(V>>>0>W>>>0){Q=W<<2;W=Q>>>0>>0?V:Q;Q=W>>>0>134217728?134217728:W;W=KBa(Q<<2)|0;if(P){P=a+4|0;K=k[P>>2]|0;R=a+8|0;Dyb(W|0,K|0,k[R>>2]<<2|0)|0;OBa(K);X=P;Y=R}else{R=a+8|0;Dyb(W|0,a|0,k[R>>2]<<2|0)|0;i[v>>0]=0;X=a+4|0;Y=R}k[Y>>2]=V;k[a>>2]=Q;k[X>>2]=W;Z=i[v>>0]|0}else{k[a+8>>2]=V;Z=N}if(!(Z<<24>>24))_=k[a+4>>2]|0;else _=a;if((k[a+8>>2]|0)>>>0>u>>>0){k[_+(u<<2)>>2]=0;$=_}else $=_}else $=0;_=d+8|0;Z=u;while(1){u=H+(Z<<2)|0;N=k[u>>2]|0;V=(Z|0)!=0;if(V&N>>>0>>0){v=Z+-1|0;W=H+(v<<2)|0;X=k[W>>2]|0;Q=Syb(X|0,N|0,c|0,0)|0;Y=k[_>>2]|0;R=Y+-1|0;P=R>>>0>134217728?134217728:R;R=(i[h>>0]|0)==0;K=k[d>>2]|0;S=R?K:2;if(P>>>0>S>>>0){O=S<<2;S=O>>>0

      >>0?P:O;O=S>>>0>134217728?134217728:S;S=KBa(O<<2)|0;if(R){R=k[s>>2]|0;Dyb(S|0,R|0,Y<<2|0)|0;OBa(R)}else{Dyb(S|0,d|0,Y<<2|0)|0;i[h>>0]=0}k[_>>2]=P;k[d>>2]=O;k[s>>2]=S;aa=O}else{k[_>>2]=P;aa=K}k[W>>2]=Q;if(U){Q=Ryb(X|0,N|0,c|0,0)|0;k[$+(v<<2)>>2]=Q}if(v){if(k[W>>2]|0){Z=v;continue}v=Z+-2|0;W=k[_>>2]|0;Q=W+-1|0;X=Q>>>0>134217728?134217728:Q;Q=(i[h>>0]|0)==0;K=Q?aa:2;if(X>>>0>K>>>0){P=K<<2;K=P>>>0>>0?X:P;P=K>>>0>134217728?134217728:K;K=KBa(P<<2)|0;if(Q){Q=k[s>>2]|0;Dyb(K|0,Q|0,W<<2|0)|0;OBa(Q)}else{Dyb(K|0,d|0,W<<2|0)|0;i[h>>0]=0}k[_>>2]=X;k[d>>2]=P;k[s>>2]=K}else k[_>>2]=X;if(U){k[$+(v<<2)>>2]=0;ba=v;J=144}else{ba=v;J=144}}}else{if(U){k[$+(Z<<2)>>2]=(N>>>0)/(c>>>0)|0;ca=k[u>>2]|0}else ca=N;N=(ca>>>0)%(c>>>0)|0;k[u>>2]=N;if(V&(N|0)==0){N=Z+-1|0;V=k[_>>2]|0;u=V+-1|0;v=u>>>0>134217728?134217728:u;u=(i[h>>0]|0)==0;X=u?k[d>>2]|0:2;if(v>>>0>X>>>0){K=X<<2;X=K>>>0>>0?v:K;K=X>>>0>134217728?134217728:X;X=KBa(K<<2)|0;if(u){u=k[s>>2]|0;Dyb(X|0,u|0,V<<2|0)|0;OBa(u)}else{Dyb(X|0,d|0,V<<2|0)|0;i[h>>0]=0}k[_>>2]=v;k[d>>2]=K;k[s>>2]=X}else k[_>>2]=v;if(U){k[$+(N<<2)>>2]=0;ba=N;J=144}else{ba=N;J=144}}else{ba=Z;J=144}}if((J|0)==144?(J=0,(ba|0)!=0):0){Z=ba;continue}if((k[H>>2]|0)>>>0>>0)break;else Z=0}if(U){U=(i[a+13>>0]|0)==0;if(U)da=k[a+4>>2]|0;else da=a;Z=a+8|0;c=k[Z>>2]|0;H=c+-1|0;a:do if(!H)ea=c;else{ba=H;J=c;while(1){if(k[da+(ba<<2)>>2]|0){ea=J;break a}k[Z>>2]=ba;$=ba+-1|0;if(!$){ea=ba;break}else{ca=ba;ba=$;J=ca}}}while(0);Z=i[b+12>>0]|0;da=a+12|0;i[da>>0]=Z;if(Z<<24>>24!=0&(ea|0)==1){if(U)fa=k[a+4>>2]|0;else fa=a;if(!(k[fa>>2]|0))i[da>>0]=0}}da=(i[h>>0]|0)==0?k[s>>2]|0:d;d=k[_>>2]|0;s=d+-1|0;b:do if(!s)ga=d;else{h=s;fa=d;while(1){if(k[da+(h<<2)>>2]|0){ga=fa;break b}k[_>>2]=h;a=h+-1|0;if(!a){ga=h;break}else{U=h;h=a;fa=U}}}while(0);_=i[b+12>>0]|0;i[t>>0]=_;if(!(_<<24>>24!=0&(ga|0)==1)){r=e;return}if(k[da>>2]|0){r=e;return}i[t>>0]=0;r=e;return}}}function FM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+192|0;f=k[e>>2]|0;if(f){g=a+196|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+200|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+120|0;e=k[j>>2]|0;if(e){f=a+124|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+128|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=a+48|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+52|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+56|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function GM(a){a=a|0;k[a>>2]=28464;QM(a+8|0);return}function HM(a){a=a|0;k[a>>2]=28464;QM(a+8|0);OBa(a);return}function IM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(224)|0;f=a+8|0;k[e>>2]=28464;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=e+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=e+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=e+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=e+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=e+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=b}else{g=e+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=e+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=b}}else{b=Hc()|0;s=M;t=b}b=k[j>>2]|0;if(b){a=e+60|0;u=k[a>>2]|0;if((u|0)==(b|0))v=b;else{p=e+64|0;f=u;do{u=f+-72|0;k[a>>2]=u;i[c>>0]=i[d>>0]|0;uF(c,p,u);f=k[a>>2]|0}while((f|0)!=(b|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;OBa(e);Sc(n|0);return 0}function JM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28464;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));p=b+128|0;x=0;xa(712,p|0,a+128|0);o=x;x=0;if(!(o&1)){o=a+140|0;l=k[o+4>>2]|0;q=b+140|0;k[q>>2]=k[o>>2];k[q+4>>2]=l;l=b+152|0;q=a+152|0;k[l>>2]=k[q>>2];i[l+4>>0]=i[q+4>>0]|0;f=b+160|0;g=a+160|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+200|0,a+200|0);g=x;x=0;if(!(g&1)){g=a+212|0;a=k[g+4>>2]|0;f=b+212|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[p>>2]|0;if(!f){s=a;t=c}else{g=b+132|0;h=k[g>>2]|0;if((h|0)==(f|0))u=f;else{q=b+136|0;l=h;do{h=l+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,q,h);l=k[g>>2]|0}while((l|0)!=(f|0));u=k[p>>2]|0}OBa(u);s=a;t=c}}else{c=Hc()|0;s=M;t=c}c=k[j>>2]|0;if(c){a=b+60|0;u=k[a>>2]|0;if((u|0)==(c|0))v=c;else{p=b+64|0;b=u;do{u=b+-72|0;k[a>>2]=u;i[d>>0]=i[e>>0]|0;uF(d,p,u);b=k[a>>2]|0}while((b|0)!=(c|0));v=k[j>>2]|0}OBa(v)}m=s;n=t;Sc(n|0)}function KM(a){a=a|0;QM(a+8|0);return}function LM(a){a=a|0;QM(a+8|0);OBa(a);return}function MM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;c=r;r=r+96|0;d=c+84|0;e=c+72|0;f=c+56|0;g=c+40|0;h=c;j=b+8|0;l=(lF(j)|0)+4|0;m=k[l>>2]|0;if((k[m+8>>2]|0)==0?(k[m+40>>2]|0)==1:0){k[h>>2]=0;k[h+32>>2]=1;k[a>>2]=2;n=a+4|0;i[n>>0]=1;o=a+8|0;p=o;q=h;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));t=a+48|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;r=c;return}m=(lF(b+80|0)|0)+4|0;l=k[m>>2]|0;k[f>>2]=0;m=f+8|0;k[m>>2]=1;u=f+12|0;i[u>>0]=0;v=f+13|0;i[v>>0]=1;w=l+40|0;y=k[w>>2]|0;z=y>>>0>134217728?134217728:y;if(z>>>0>2){A=z>>>0>8?z:8;B=KBa(A<<2)|0;k[B>>2]=0;i[v>>0]=0;k[m>>2]=z;k[f>>2]=A;k[f+4>>2]=B;C=k[w>>2]|0;D=B}else{k[m>>2]=z;C=y;D=f}Dyb(D|0,l+8|0,(z>>>0>>0?z:C)<<2|0)|0;i[u>>0]=0;if(!(i[v>>0]|0))E=k[f+4>>2]|0;else E=f;u=(k[m>>2]|0)+-1|0;a:do if(u){C=u;do{if(k[E+(C<<2)>>2]|0)break a;k[m>>2]=C;C=C+-1|0}while((C|0)!=0)}while(0);x=0;m=Ba(590,b+152|0)|0;b=x;x=0;b:do if(!(b&1)){E=k[m+4>>2]|0;u=E+8|0;k[g>>2]=0;C=g+8|0;k[C>>2]=1;z=g+12|0;i[z>>0]=0;l=g+13|0;i[l>>0]=1;D=E+40|0;E=k[D>>2]|0;y=E>>>0>134217728?134217728:E;do if(y>>>0>2){B=y>>>0>8?y:8;x=0;w=Ba(563,B<<2|0)|0;A=x;x=0;if(A&1){A=Hc()|0;F=M;G=A;H=29;break b}else{k[w>>2]=0;i[l>>0]=0;k[C>>2]=y;k[g>>2]=B;k[g+4>>2]=w;I=k[D>>2]|0;J=w;break}}else{k[C>>2]=y;I=E;J=g}while(0);Dyb(J|0,u|0,(y>>>0>>0?y:I)<<2|0)|0;i[z>>0]=0;if(!(i[l>>0]|0))K=k[g+4>>2]|0;else K=g;E=(k[C>>2]|0)+-1|0;c:do if(E){D=E;do{if(k[K+(D<<2)>>2]|0)break c;k[C>>2]=D;D=D+-1|0}while((D|0)!=0)}while(0);x=0;C=Ba(590,j|0)|0;E=x;x=0;if(!(E&1)?(E=(k[C+4>>2]|0)+8|0,k[e>>2]=f,k[e+4>>2]=g,k[e+8>>2]=E,k[h>>2]=0,k[h+32>>2]=1,x=0,fb(223,h|0,e|0,d|0),E=x,x=0,!(E&1)):0){if(!(i[l>>0]|0))OBa(k[g+4>>2]|0);if(i[v>>0]|0){k[a>>2]=2;n=a+4|0;i[n>>0]=1;o=a+8|0;p=o;q=h;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));t=a+48|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;r=c;return}OBa(k[f+4>>2]|0);k[a>>2]=2;n=a+4|0;i[n>>0]=1;o=a+8|0;p=o;q=h;s=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(s|0));t=a+48|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;r=c;return}E=Hc()|0;C=M;if(!(i[l>>0]|0)){OBa(k[g+4>>2]|0);L=C;N=E}else{L=C;N=E}}else{E=Hc()|0;F=M;G=E;H=29}while(0);if((H|0)==29){L=F;N=G}if(i[v>>0]|0)Sc(N|0);OBa(k[f+4>>2]|0);Sc(N|0)}function NM(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==225520?a+8|0:0)|0}function OM(a){a=a|0;return 3776}function PM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c+16|0;e=c+20|0;f=c;k[f>>2]=0;k[f+8>>2]=1;i[f+12>>0]=0;g=f+13|0;i[g>>0]=1;h=b+8|0;j=k[b>>2]|0;l=k[b+4>>2]|0;x=0;if((i[j+12>>0]|0)!=0^(i[l+12>>0]|0)!=0){$B(f,j,l);b=x;x=0;if(!(b&1))m=4}else{aC(f,j,l);l=x;x=0;if(!(l&1))m=4}if((m|0)==4?(k[d>>2]=k[h>>2],x=0,fb(218,f|0,d|0,e|0),h=x,x=0,!(h&1)):0){NB(a,f,d,e);if(i[g>>0]|0){r=c;return}OBa(k[f+4>>2]|0);r=c;return}c=Hc()|0;if(i[g>>0]|0)Sc(c|0);OBa(k[f+4>>2]|0);Sc(c|0)}function QM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+192|0;f=k[e>>2]|0;if(f){g=a+196|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+200|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+120|0;e=k[j>>2]|0;if(e){f=a+124|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+128|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n)}n=a+48|0;j=k[n>>2]|0;if(!j){r=b;return}e=a+52|0;l=k[e>>2]|0;if((l|0)==(j|0))o=j;else{f=a+56|0;a=l;do{l=a+-72|0;k[e>>2]=l;i[c>>0]=i[d>>0]|0;uF(c,f,l);a=k[e>>2]|0}while((a|0)!=(j|0));o=k[n>>2]|0}OBa(o);r=b;return}function RM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28420;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function SM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28420;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function TM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28420;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function UM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28420;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function VM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function WM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function XM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+192|0;d=c+120|0;e=c+80|0;f=c+40|0;g=c;h=c+160|0;j=b+8|0;l=(lF(j)|0)+4|0;m=k[l>>2]|0;if((k[m+40>>2]|0)>>>0>1?1:(k[m+8>>2]|0)>>>0>31){n=h;o=0;p=1;q=0;k[a>>2]=2;s=a+4|0;i[s>>0]=1;t=a+8|0;k[t>>2]=o;u=a+12|0;k[u>>2]=k[n>>2];k[u+4>>2]=k[n+4>>2];k[u+8>>2]=k[n+8>>2];k[u+12>>2]=k[n+12>>2];k[u+16>>2]=k[n+16>>2];k[u+20>>2]=k[n+20>>2];k[u+24>>2]=k[n+24>>2];v=a+40|0;k[v>>2]=p;w=a+44|0;k[w>>2]=q;x=a+48|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[x+16>>2]=0;r=c;return}m=(lF(b+80|0)|0)+4|0;b=(k[m>>2]|0)+8|0;m=(lF(j)|0)+4|0;j=k[m>>2]|0;k[e>>2]=0;k[e+32>>2]=1;k[d>>2]=31;k[d+32>>2]=1;qC(e,d,j+8|0);j=g;m=e;l=j+40|0;do{k[j>>2]=k[m>>2];j=j+4|0;m=m+4|0}while((j|0)<(l|0));k[d>>2]=0;y=d+32|0;z=k[g+32>>2]|0;A=z>>>0>8?8:z;k[y>>2]=A;z=d+(A<<2)|0;if((d|0)!=(z|0)){A=0;B=0;C=d;D=g;while(1){g=Kyb(k[D>>2]|0,0,3)|0;E=Hyb(g|0,M|0,A|0,B|0)|0;g=M;k[C>>2]=E;C=C+4|0;if((C|0)==(z|0)){F=g;G=0;break}else{A=g;B=0;D=D+4|0}}if(!((F|0)==0&(G|0)==0)?(G=k[y>>2]|0,D=G+1|0,B=D>>>0>8?8:D,k[y>>2]=B,B>>>0>G>>>0):0)k[d+(G<<2)>>2]=F}F=(k[y>>2]|0)+-1|0;a:do if(F){G=F;do{if(k[d+(G<<2)>>2]|0)break a;k[y>>2]=G;G=G+-1|0}while((G|0)!=0)}while(0);y=k[d>>2]|0;j=d;m=b;l=j+40|0;do{k[j>>2]=k[m>>2];j=j+4|0;m=m+4|0}while((j|0)<(l|0));do if(y){b=y>>>5;F=y&31;G=d+32|0;B=k[G>>2]|0;if(B>>>0<=b>>>0){k[G>>2]=1;k[d>>2]=0;break}D=B+-1|0;A=((((k[d+(D<<2)>>2]|0)>>>F|0)==0)<<31>>31)+(B-b)|0;if(!A){k[G>>2]=1;k[d>>2]=0;break}if(F){z=b+1|0;C=(k[d+(b<<2)>>2]|0)>>>F;k[d>>2]=C;if(z>>>0>>0){B=32-F|0;g=D-b|0;D=z;z=C;C=d;E=0;while(1){k[C>>2]=k[d+(D<<2)>>2]<>2]|0)>>>F;C=d+(E<<2)|0;k[C>>2]=z;if((E|0)==(g|0))break;else D=H+1|0}}}else{D=0;do{k[d+(D<<2)>>2]=k[d+(D+b<<2)>>2];D=D+1|0}while((D|0)!=(A|0))}k[G>>2]=A>>>0>8?8:A}while(0);j=f;m=d;l=j+40|0;do{k[j>>2]=k[m>>2];j=j+4|0;m=m+4|0}while((j|0)<(l|0));k[e>>2]=0;m=e+32|0;k[m>>2]=1;k[d>>2]=255;k[d+32>>2]=1;KB(e,f,d);d=k[e>>2]|0;f=e+4|0;k[h>>2]=k[f>>2];k[h+4>>2]=k[f+4>>2];k[h+8>>2]=k[f+8>>2];k[h+12>>2]=k[f+12>>2];k[h+16>>2]=k[f+16>>2];k[h+20>>2]=k[f+20>>2];k[h+24>>2]=k[f+24>>2];n=h;o=d;p=k[m>>2]|0;q=k[e+36>>2]|0;k[a>>2]=2;s=a+4|0;i[s>>0]=1;t=a+8|0;k[t>>2]=o;u=a+12|0;k[u>>2]=k[n>>2];k[u+4>>2]=k[n+4>>2];k[u+8>>2]=k[n+8>>2];k[u+12>>2]=k[n+12>>2];k[u+16>>2]=k[n+16>>2];k[u+20>>2]=k[n+20>>2];k[u+24>>2]=k[n+24>>2];v=a+40|0;k[v>>2]=p;w=a+44|0;k[w>>2]=q;x=a+48|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[x+16>>2]=0;r=c;return}function YM(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==225627?a+8|0:0)|0}function ZM(a){a=a|0;return 3800}function _M(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28376;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function $M(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28376;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function aN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28376;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function bN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28376;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function cN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function dN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function eN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+40|0;e=c;f=(lF(b+8|0)|0)+4|0;g=k[f>>2]|0;f=(lF(b+80|0)|0)+4|0;b=k[f>>2]|0;k[d>>2]=0;k[d+32>>2]=1;xH(d,g+8|0,b+8|0);b=e;g=d;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));k[a>>2]=2;i[a+4>>0]=1;b=a+8|0;g=e;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));g=a+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;r=c;return}function fN(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==225734?a+8|0:0)|0}function gN(a){a=a|0;return 3824}function hN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28332;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function iN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28332;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function jN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28332;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function kN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28332;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function lN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function mN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function nN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+40|0;e=c;f=(lF(b+8|0)|0)+4|0;g=k[f>>2]|0;f=(lF(b+80|0)|0)+4|0;b=k[f>>2]|0;k[d>>2]=0;k[d+32>>2]=1;YB(d,g+8|0,b+8|0);b=e;g=d;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));k[a>>2]=2;i[a+4>>0]=1;b=a+8|0;g=e;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));g=a+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;r=c;return}function oN(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==225841?a+8|0:0)|0}function pN(a){a=a|0;return 3848}function qN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28288;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function rN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28288;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function sN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28288;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function tN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28288;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function uN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function vN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function wN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+40|0;e=c;f=(lF(b+8|0)|0)+4|0;g=k[f>>2]|0;f=(lF(b+80|0)|0)+4|0;b=k[f>>2]|0;k[d>>2]=0;k[d+32>>2]=1;KB(d,g+8|0,b+8|0);b=e;g=d;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));k[a>>2]=2;i[a+4>>0]=1;b=a+8|0;g=e;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));g=a+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;r=c;return}function xN(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==225948?a+8|0:0)|0}function yN(a){a=a|0;return 3872}function zN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28244;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function AN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28244;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function BN(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=28244;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function CN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=28244;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function DN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function EN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function FN(a,b){a=a|0;b=b|0;var c=0;c=(lF(b+8|0)|0)+4|0;b=k[c>>2]|0;c=((k[b+8>>2]|0)==0?(k[b+40>>2]|0)==1:0)&1;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=c;k[a+40>>2]=1;c=a+48|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;return}function GN(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==226055?a+8|0:0)|0}function HN(a){a=a|0;return 3896}function IN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28200;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function JN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28200;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function KN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28200;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function LN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28200;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function MN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function NN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function ON(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c;e=(lF(b+8|0)|0)+4|0;f=k[e>>2]|0;e=(lF(b+80|0)|0)+4|0;b=k[e>>2]|0;e=b+8|0;g=k[f+40>>2]|0;a:do if((g|0)==(k[b+40>>2]|0)){h=f+8|0;j=h+(g<<2)|0;if((h|0)==(j|0))l=1;else{m=h;h=e;while(1){if((k[m>>2]|0)!=(k[h>>2]|0)){l=0;break a}m=m+4|0;if((m|0)==(j|0)){l=1;break}else h=h+4|0}}}else l=0;while(0);k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=l;l=a+12|0;k[l>>2]=k[d>>2];k[l+4>>2]=k[d+4>>2];k[l+8>>2]=k[d+8>>2];k[l+12>>2]=k[d+12>>2];k[l+16>>2]=k[d+16>>2];k[l+20>>2]=k[d+20>>2];k[l+24>>2]=k[d+24>>2];k[a+40>>2]=1;d=a+48|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;r=c;return}function PN(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==226162?a+8|0:0)|0}function QN(a){a=a|0;return 3920}function RN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28156;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function SN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28156;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function TN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28156;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function UN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28156;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function VN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function WN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function XN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+192|0;d=c+120|0;e=c+80|0;f=c+40|0;g=c;h=c+160|0;l=(lF(b+8|0)|0)+4|0;m=e;n=(k[l>>2]|0)+8|0;l=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(l|0));Ey(d,e);e=(lF(b+80|0)|0)+4|0;m=g;n=(k[e>>2]|0)+8|0;l=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(l|0));Ey(f,g);g=(i[d+34>>0]|0)!=0;if(g^(i[f+34>>0]|0)!=0)o=g?-1:1;else{n=j[d+32>>1]|0;m=j[f+32>>1]|0;a:do if(n<<16>>16==m<<16>>16){l=n&65535;while(1){if((l|0)<=0){p=0;break a}l=l+-1|0;e=k[d+(l<<2)>>2]|0;b=k[f+(l<<2)>>2]|0;if((e|0)!=(b|0)){q=e;s=b;break}}p=q>>>0>s>>>0?1:-1}else p=(n&65535)>(m&65535)?1:-1;while(0);o=g?0-p|0:p}k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=(o|0)>0&1;o=a+12|0;k[o>>2]=k[h>>2];k[o+4>>2]=k[h+4>>2];k[o+8>>2]=k[h+8>>2];k[o+12>>2]=k[h+12>>2];k[o+16>>2]=k[h+16>>2];k[o+20>>2]=k[h+20>>2];k[o+24>>2]=k[h+24>>2];k[a+40>>2]=1;h=a+48|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;r=c;return}function YN(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==226269?a+8|0:0)|0}function ZN(a){a=a|0;return 3944}function _N(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28112;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function $N(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28112;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function aO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28112;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function bO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28112;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function cO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function dO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function eO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+192|0;d=c+120|0;e=c+80|0;f=c+40|0;g=c;h=c+160|0;l=(lF(b+8|0)|0)+4|0;m=e;n=(k[l>>2]|0)+8|0;l=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(l|0));Ey(d,e);e=(lF(b+80|0)|0)+4|0;m=g;n=(k[e>>2]|0)+8|0;l=m+40|0;do{k[m>>2]=k[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(l|0));Ey(f,g);g=(i[d+34>>0]|0)!=0;if(g^(i[f+34>>0]|0)!=0)o=g?-1:1;else{n=j[d+32>>1]|0;m=j[f+32>>1]|0;a:do if(n<<16>>16==m<<16>>16){l=n&65535;while(1){if((l|0)<=0){p=0;break a}l=l+-1|0;e=k[d+(l<<2)>>2]|0;b=k[f+(l<<2)>>2]|0;if((e|0)!=(b|0)){q=e;s=b;break}}p=q>>>0>s>>>0?1:-1}else p=(n&65535)>(m&65535)?1:-1;while(0);o=g?0-p|0:p}k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=o>>>31;o=a+12|0;k[o>>2]=k[h>>2];k[o+4>>2]=k[h+4>>2];k[o+8>>2]=k[h+8>>2];k[o+12>>2]=k[h+12>>2];k[o+16>>2]=k[h+16>>2];k[o+20>>2]=k[h+20>>2];k[o+24>>2]=k[h+24>>2];k[a+40>>2]=1;h=a+48|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;r=c;return}function fO(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==226376?a+8|0:0)|0}function gO(a){a=a|0;return 3968}function hO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28068;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function iO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28068;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function jO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28068;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function kO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28068;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function lO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function mO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function nO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+32|0;d=c;e=(lF(b+8|0)|0)+4|0;f=k[e>>2]|0;e=(lF(b+80|0)|0)+4|0;b=k[e>>2]|0;e=k[f+40>>2]|0;g=k[b+40>>2]|0;a:do if((e|0)==(g|0)){h=b+8|0;j=f+8|0;l=e;while(1){l=l+-1|0;if((l|0)<=-1){m=0;break a}n=k[j+(l<<2)>>2]|0;o=k[h+(l<<2)>>2]|0;if((n|0)!=(o|0)){p=n;q=o;break}}m=p>>>0>q>>>0?1:-1}else m=e>>>0>g>>>0?1:-1;while(0);k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=(m|0)>0&1;m=a+12|0;k[m>>2]=k[d>>2];k[m+4>>2]=k[d+4>>2];k[m+8>>2]=k[d+8>>2];k[m+12>>2]=k[d+12>>2];k[m+16>>2]=k[d+16>>2];k[m+20>>2]=k[d+20>>2];k[m+24>>2]=k[d+24>>2];k[a+40>>2]=1;d=a+48|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;r=c;return}function oO(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==226483?a+8|0:0)|0}function pO(a){a=a|0;return 3992}function qO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28024;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function rO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=28024;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function sO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=28024;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function tO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=28024;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function uO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function vO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function wO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+32|0;d=c;e=(lF(b+8|0)|0)+4|0;f=k[e>>2]|0;e=(lF(b+80|0)|0)+4|0;b=k[e>>2]|0;e=k[f+40>>2]|0;g=k[b+40>>2]|0;a:do if((e|0)==(g|0)){h=b+8|0;j=f+8|0;l=e;while(1){l=l+-1|0;if((l|0)<=-1){m=7;break a}n=k[j+(l<<2)>>2]|0;o=k[h+(l<<2)>>2]|0;if((n|0)!=(o|0)){p=n;q=o;break}}if(p>>>0>q>>>0)m=7;else s=1}else if(e>>>0>g>>>0)m=7;else s=1;while(0);if((m|0)==7)s=0;k[a>>2]=2;i[a+4>>0]=1;k[a+8>>2]=s;s=a+12|0;k[s>>2]=k[d>>2];k[s+4>>2]=k[d+4>>2];k[s+8>>2]=k[d+8>>2];k[s+12>>2]=k[d+12>>2];k[s+16>>2]=k[d+16>>2];k[s+20>>2]=k[d+20>>2];k[s+24>>2]=k[d+24>>2];k[a+40>>2]=1;d=a+48|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;r=c;return}function xO(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==226590?a+8|0:0)|0}function yO(a){a=a|0;return 4016}function zO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27980;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function AO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27980;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function BO(a){a=a|0;var b=0,c=0,d=0,e=0;b=KBa(80)|0;c=a+8|0;k[b>>2]=27980;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));x=0;xa(712,b+56|0,a+56|0);d=x;x=0;if(d&1){d=Hc()|0;OBa(b);Sc(d|0)}else{d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return b|0}return 0}function CO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;k[b>>2]=27980;d=b+8|0;k[d>>2]=k[c>>2];i[d+4>>0]=i[c+4>>0]|0;c=b+16|0;d=a+16|0;e=c+40|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));xF(b+56|0,a+56|0);d=a+68|0;a=k[d+4>>2]|0;c=b+68|0;k[c>>2]=k[d>>2];k[c+4>>2]=a;return}function DO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;a=h;do{h=a+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);a=k[g>>2]|0}while((a|0)!=(f|0));j=k[e>>2]|0}OBa(j);r=b;return}function EO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+56|0;f=k[e>>2]|0;if(!f){OBa(a);r=b;return}g=a+60|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+64|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j);OBa(a);r=b;return}function FO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+80|0;d=c+40|0;e=c;f=(lF(b+8|0)|0)+4|0;b=k[f>>2]|0;k[d>>2]=0;f=d+32|0;g=k[b+40>>2]|0;k[f>>2]=8;if(!g)h=8;else{j=b+8|0;b=0;do{k[d+(b<<2)>>2]=~k[j+(b<<2)>>2];b=b+1|0}while((b|0)!=(g|0));h=k[f>>2]|0}if(g>>>0>>0){b=g;do{k[d+(b<<2)>>2]=-1;b=b+1|0;g=k[f>>2]|0}while(b>>>0>>0);l=g}else l=h;h=l+-1|0;a:do if(h){l=h;do{if(k[d+(l<<2)>>2]|0)break a;k[f>>2]=l;l=l+-1|0}while((l|0)!=0)}while(0);f=e;h=d;d=f+40|0;do{k[f>>2]=k[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(d|0));k[a>>2]=2;i[a+4>>0]=1;f=a+8|0;h=e;d=f+40|0;do{k[f>>2]=k[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(d|0));h=a+48|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;r=c;return}function GO(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==226695?a+8|0:0)|0}function HO(a){a=a|0;return 4040}function IO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27936;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function JO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27936;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function KO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=27936;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function LO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=27936;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function MO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function NO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function OO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0;c=r;r=r+128|0;d=c+112|0;e=c+92|0;f=c+72|0;g=c+56|0;h=c+40|0;j=c+88|0;l=c;m=(lF(b+8|0)|0)+4|0;n=k[m>>2]|0;k[f>>2]=0;m=f+8|0;k[m>>2]=1;o=f+12|0;i[o>>0]=0;p=f+13|0;i[p>>0]=1;q=n+40|0;s=k[q>>2]|0;t=s>>>0>134217728?134217728:s;if(t>>>0>2){u=t>>>0>8?t:8;v=KBa(u<<2)|0;k[v>>2]=0;i[p>>0]=0;k[m>>2]=t;k[f>>2]=u;k[f+4>>2]=v;w=k[q>>2]|0;y=v}else{k[m>>2]=t;w=s;y=f}Dyb(y|0,n+8|0,(t>>>0>>0?t:w)<<2|0)|0;i[o>>0]=0;if(!(i[p>>0]|0))z=k[f+4>>2]|0;else z=f;o=(k[m>>2]|0)+-1|0;a:do if(o){w=o;do{if(k[z+(w<<2)>>2]|0)break a;k[m>>2]=w;w=w+-1|0}while((w|0)!=0)}while(0);x=0;m=Ba(590,b+80|0)|0;b=x;x=0;b:do if(b&1){z=Hc()|0;A=M;B=z;C=28}else{z=k[m+4>>2]|0;o=z+8|0;k[g>>2]=0;w=g+8|0;k[w>>2]=1;t=g+12|0;i[t>>0]=0;n=g+13|0;i[n>>0]=1;y=z+40|0;z=k[y>>2]|0;s=z>>>0>134217728?134217728:z;do if(s>>>0>2){v=s>>>0>8?s:8;x=0;q=Ba(563,v<<2|0)|0;u=x;x=0;if(u&1){u=Hc()|0;A=M;B=u;C=28;break b}else{k[q>>2]=0;i[n>>0]=0;k[w>>2]=s;k[g>>2]=v;k[g+4>>2]=q;D=k[y>>2]|0;E=q;break}}else{k[w>>2]=s;D=z;E=g}while(0);Dyb(E|0,o|0,(s>>>0>>0?s:D)<<2|0)|0;i[t>>0]=0;if(!(i[n>>0]|0))F=k[g+4>>2]|0;else F=g;z=(k[w>>2]|0)+-1|0;c:do if(z){y=z;do{if(k[F+(y<<2)>>2]|0)break c;k[w>>2]=y;y=y+-1|0}while((y|0)!=0)}while(0);k[h>>2]=1;k[h+8>>2]=1;i[h+12>>0]=0;w=h+13|0;i[w>>0]=1;k[j>>2]=256;k[e>>2]=d;k[e+4>>2]=f;k[e+8>>2]=g;k[e+12>>2]=h;k[e+16>>2]=j;k[l>>2]=0;k[l+32>>2]=1;x=0;Ta(552,l|0,e|0)|0;z=x;x=0;if(z&1){z=Hc()|0;t=M;if(!(i[w>>0]|0))OBa(k[h+4>>2]|0);if(i[n>>0]|0){G=t;H=z;break}OBa(k[g+4>>2]|0);G=t;H=z;break}if(!(i[w>>0]|0))OBa(k[h+4>>2]|0);if(!(i[n>>0]|0))OBa(k[g+4>>2]|0);if(i[p>>0]|0){k[a>>2]=2;I=a+4|0;i[I>>0]=1;J=a+8|0;K=J;L=l;N=K+40|0;do{k[K>>2]=k[L>>2];K=K+4|0;L=L+4|0}while((K|0)<(N|0));O=a+48|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[O+16>>2]=0;r=c;return}OBa(k[f+4>>2]|0);k[a>>2]=2;I=a+4|0;i[I>>0]=1;J=a+8|0;K=J;L=l;N=K+40|0;do{k[K>>2]=k[L>>2];K=K+4|0;L=L+4|0}while((K|0)<(N|0));O=a+48|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[O+16>>2]=0;r=c;return}while(0);if((C|0)==28){G=A;H=B}if(i[p>>0]|0)Sc(H|0);OBa(k[f+4>>2]|0);Sc(H|0)}function PO(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==226800?a+8|0:0)|0}function QO(a){a=a|0;return 4064}function RO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+17|0;e=c+16|0;f=c;k[f>>2]=0;k[f+8>>2]=1;i[f+12>>0]=0;g=f+13|0;i[g>>0]=1;x=0;La(56,f|0,k[b>>2]|0,k[b+4>>2]|0,k[b+8>>2]|0,b+12|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[g>>0]|0)Sc(b|0);OBa(k[f+4>>2]|0);Sc(b|0)}else{NB(a,f,d,e);if(i[g>>0]|0){r=c;return a|0}OBa(k[f+4>>2]|0);r=c;return a|0}return 0}function SO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;f=r;r=r+32|0;b=f;k[b>>2]=0;k[b+8>>2]=1;i[b+12>>0]=0;g=b+13|0;i[g>>0]=1;x=0;fb(184,b|0,e|0,f+16|0);e=x;x=0;if(e&1){e=Hc()|0;if(i[g>>0]|0)Sc(e|0);OBa(k[b+4>>2]|0);Sc(e|0)}x=0;nb(108,a|0,c|0,d|0,b|0);d=x;x=0;if(d&1){d=Hc()|0;if(i[g>>0]|0)Sc(d|0);OBa(k[b+4>>2]|0);Sc(d|0)}else{if(i[g>>0]|0){r=f;return}OBa(k[b+4>>2]|0);r=f;return}}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0;e=r;r=r+80|0;f=e+64|0;g=e+48|0;h=e+32|0;l=e+16|0;m=e;n=k[c+8>>2]|0;if(!((n|0)==1?(k[((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)>>2]|0)==0:0))o=3;if((o|0)==3?(i[c+12>>0]|0)!=0:0){H0a(f,226818);x=0;nb(109,f|0,226853,227168,281);x=0;p=Hc()|0;qCa(f);Sc(p|0)}k[f>>2]=0;p=f+8|0;k[p>>2]=1;q=f+12|0;i[q>>0]=0;s=f+13|0;i[s>>0]=1;k[g>>2]=0;t=g+8|0;k[t>>2]=0;u=g+13|0;i[u>>0]=1;v=k[b+8>>2]|0;w=v>>>0>134217728?134217728:v;do if(w>>>0>2){y=w>>>0>8?w:8;x=0;z=Ba(563,y<<2|0)|0;A=x;x=0;if(A&1){A=Hc()|0;B=M;C=A;break}else{i[u>>0]=0;k[t>>2]=w;k[g>>2]=y;k[g+4>>2]=z;D=z;o=9;break}}else{k[t>>2]=w;D=g;o=9}while(0);if((o|0)==9){Dyb(D|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,v<<2|0)|0;v=g+12|0;i[v>>0]=i[b+12>>0]|0;k[h>>2]=0;b=h+8|0;k[b>>2]=0;D=h+13|0;i[D>>0]=1;w=n>>>0>134217728?134217728:n;do if(w>>>0>2){z=w>>>0>8?w:8;x=0;y=Ba(563,z<<2|0)|0;A=x;x=0;if(A&1){A=Hc()|0;E=M;F=A;break}else{i[D>>0]=0;k[b>>2]=w;k[h>>2]=z;k[h+4>>2]=y;G=y;o=13;break}}else{k[b>>2]=w;G=h;o=13}while(0);if((o|0)==13){Dyb(G|0,((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)|0,n<<2|0)|0;n=h+12|0;i[n>>0]=i[c+12>>0]|0;k[l>>2]=0;k[l+8>>2]=1;c=l+12|0;i[c>>0]=0;G=l+13|0;i[G>>0]=1;k[p>>2]=1;w=f+4|0;k[f>>2]=1;i[q>>0]=0;y=h+4|0;z=g+4|0;while(1){A=k[b>>2]|0;if((A|0)==1){H=j[n>>1]|0;I=(H&65535)>>>8&255;if((H&255)<<24>>24==0?(k[((i[D>>0]|0)==0?k[y>>2]|0:h)>>2]|0)!=0:0){J=I;o=18}else{K=I;o=35;break}}else{I=j[n>>1]|0;H=(I&65535)>>>8&255;if((I&255)<<24>>24){K=H;o=35;break}if(A){J=H;o=18}}if((o|0)==18?(o=0,(k[(J<<24>>24==0?k[y>>2]|0:h)>>2]&1|0)!=0):0){x=0;fb(217,l|0,f|0,g|0);H=x;x=0;if(H&1){o=26;break}H=i[c>>0]|0;x=0;nb(110,0,l|0,d|0,f|0);A=x;x=0;if(A&1){o=26;break}i[q>>0]=H;if(H<<24>>24!=0&(k[p>>2]|0)==1?(k[((i[s>>0]|0)==0?k[w>>2]|0:f)>>2]|0)==0:0)i[q>>0]=0}x=0;fb(217,l|0,g|0,g|0);H=x;x=0;if(H&1){o=26;break}H=i[c>>0]|0;x=0;nb(110,0,l|0,d|0,g|0);A=x;x=0;if(A&1){o=26;break}i[v>>0]=H;if(H<<24>>24!=0&(k[t>>2]|0)==1?(k[((i[u>>0]|0)==0?k[z>>2]|0:g)>>2]|0)==0:0)i[v>>0]=0;x=0;fb(224,h|0,1,0);H=x;x=0;if(H&1){o=26;break}}a:do if((o|0)==26){h=Hc()|0;L=h;N=M;o=28}else if((o|0)==35){k[m>>2]=0;h=m+8|0;k[h>>2]=0;v=m+13|0;i[v>>0]=1;t=k[p>>2]|0;c=t>>>0>134217728?134217728:t;do if(c>>>0>2){J=c>>>0>8?c:8;x=0;n=Ba(563,J<<2|0)|0;b=x;x=0;if(b&1){b=Hc()|0;L=b;N=M;o=28;break a}else{i[v>>0]=0;k[h>>2]=c;k[m>>2]=J;k[m+4>>2]=n;O=n;break}}else{k[h>>2]=c;O=m}while(0);Dyb(O|0,((i[s>>0]|0)==0?k[w>>2]|0:f)|0,t<<2|0)|0;c=i[q>>0]|0;i[m+12>>0]=c;x=0;nb(110,0,m|0,d|0,a|0);h=x;x=0;if(h&1){h=Hc()|0;n=M;if(i[v>>0]|0){P=n;Q=h;break}OBa(k[m+4>>2]|0);P=n;Q=h;break}h=a+12|0;i[h>>0]=c;if((c<<24>>24!=0?(k[a+8>>2]|0)==1:0)?(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0)==0:0)i[h>>0]=0;if(!(i[v>>0]|0))OBa(k[m+4>>2]|0);if(!(i[G>>0]|0))OBa(k[l+4>>2]|0);if(!(K<<24>>24))OBa(k[y>>2]|0);if(!(i[u>>0]|0))OBa(k[z>>2]|0);if(i[s>>0]|0){r=e;return}OBa(k[w>>2]|0);r=e;return}while(0);if((o|0)==28){P=N;Q=L}if(!(i[G>>0]|0))OBa(k[l+4>>2]|0);if(!(i[D>>0]|0)){OBa(k[y>>2]|0);E=P;F=Q}else{E=P;F=Q}}if(!(i[u>>0]|0)){OBa(k[g+4>>2]|0);B=E;C=F}else{B=E;C=F}}if(i[s>>0]|0)Sc(C|0);OBa(k[f+4>>2]|0);Sc(C|0)}function UO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+32|0;f=e;I0a(f,a);a=f+8|0;e=f+12|0;k[e>>2]=0;k[f>>2]=30360;k[a>>2]=30380;k[f+16>>2]=b;k[f+20>>2]=c;k[f+24>>2]=d;x=0;va(1494,f|0);x=0;d=Hc()|0;k[a>>2]=20796;a=k[e>>2]|0;if(!a){qCa(f);Sc(d|0)}x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c){qCa(f);Sc(d|0)}k[e>>2]=0;qCa(f);Sc(d|0)}function VO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0;e=r;r=r+64|0;f=e+48|0;g=e+32|0;h=e+16|0;l=e;if((a|0)==(b|0)|(d|0)==(b|0)){k[f>>2]=0;m=f+8|0;k[m>>2]=0;n=f+13|0;i[n>>0]=1;o=k[b+8>>2]|0;p=o>>>0>134217728?134217728:o;if(p>>>0>2){q=p>>>0>8?p:8;s=KBa(q<<2)|0;i[n>>0]=0;k[m>>2]=p;k[f>>2]=q;k[f+4>>2]=s;t=s}else{k[m>>2]=p;t=f}Dyb(t|0,((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)|0,o<<2|0)|0;i[f+12>>0]=i[b+12>>0]|0;x=0;nb(110,a|0,f|0,c|0,d|0);o=x;x=0;if(o&1){o=Hc()|0;t=M;if(i[n>>0]|0){u=o;v=t;Sc(u|0)}OBa(k[f+4>>2]|0);u=o;v=t;Sc(u|0)}else{if(!(i[n>>0]|0))OBa(k[f+4>>2]|0);r=e;return}}if((a|0)==(c|0)|(d|0)==(c|0)){k[g>>2]=0;f=g+8|0;k[f>>2]=0;n=g+13|0;i[n>>0]=1;t=k[c+8>>2]|0;o=t>>>0>134217728?134217728:t;if(o>>>0>2){p=o>>>0>8?o:8;m=KBa(p<<2)|0;i[n>>0]=0;k[f>>2]=o;k[g>>2]=p;k[g+4>>2]=m;w=m}else{k[f>>2]=o;w=g}Dyb(w|0,((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)|0,t<<2|0)|0;i[g+12>>0]=i[c+12>>0]|0;x=0;nb(110,a|0,b|0,g|0,d|0);t=x;x=0;if(t&1){t=Hc()|0;w=M;if(i[n>>0]|0){u=t;v=w;Sc(u|0)}OBa(k[g+4>>2]|0);u=t;v=w;Sc(u|0)}else{if(!(i[n>>0]|0))OBa(k[g+4>>2]|0);r=e;return}}if((a|0)==(d|0)){k[h>>2]=0;g=h+8|0;k[g>>2]=1;n=h+12|0;i[n>>0]=0;w=h+13|0;i[w>>0]=1;x=0;nb(110,a|0,b|0,c|0,h|0);t=x;x=0;do if(!(t&1)){if((h|0)==(a|0))y=i[w>>0]|0;else{o=a+8|0;k[o>>2]=0;f=k[g>>2]|0;m=f>>>0>134217728?134217728:f;p=a+13|0;s=i[p>>0]|0;q=s<<24>>24==0;z=q?k[a>>2]|0:2;if(m>>>0>z>>>0){A=z<<2;z=A>>>0>>0?m:A;A=z>>>0>134217728?134217728:z;x=0;z=Ba(563,A<<2|0)|0;B=x;x=0;if(B&1)break;if(q){q=a+4|0;OBa(k[q>>2]|0);C=q;D=k[g>>2]|0}else{i[p>>0]=0;C=a+4|0;D=f}k[o>>2]=m;k[a>>2]=A;k[C>>2]=z;E=D;F=i[p>>0]|0}else{k[o>>2]=m;E=f;F=s}Dyb((F<<24>>24==0?k[a+4>>2]|0:a)|0,((i[w>>0]|0)==0?k[h+4>>2]|0:h)|0,E<<2|0)|0;s=j[n>>1]|0;i[a+12>>0]=s;y=(s&65535)>>>8&255}if(!(y<<24>>24))OBa(k[h+4>>2]|0);r=e;return}while(0);y=Hc()|0;n=M;if(i[w>>0]|0){u=y;v=n;Sc(u|0)}OBa(k[h+4>>2]|0);u=y;v=n;Sc(u|0)}n=c+8|0;y=k[n>>2]|0;h=y+-1|0;if(!h){EM(a,b,k[((i[c+13>>0]|0)==0?k[c+4>>2]|0:c)>>2]|0,d);r=e;return}w=b+13|0;E=i[w>>0]|0;F=b+4|0;D=k[F>>2]|0;C=E<<24>>24==0?D:b;g=c+13|0;t=c+4|0;s=(i[g>>0]|0)==0?k[t>>2]|0:c;f=b+8|0;m=k[f>>2]|0;o=m+-1|0;p=(o|0)==0;if(p?(k[C>>2]|0)==0:0){z=d+8|0;k[z>>2]=0;A=k[f>>2]|0;q=A>>>0>134217728?134217728:A;A=d+13|0;B=i[A>>0]|0;G=B<<24>>24==0;H=G?k[d>>2]|0:2;if(q>>>0>H>>>0){I=H<<2;H=I>>>0>>0?q:I;I=H>>>0>134217728?134217728:H;H=KBa(I<<2)|0;if(G){G=d+4|0;OBa(k[G>>2]|0);J=G}else{i[A>>0]=0;J=d+4|0}k[z>>2]=q;k[d>>2]=I;k[J>>2]=H;K=i[A>>0]|0;L=i[w>>0]|0;N=k[F>>2]|0}else{k[z>>2]=q;K=B;L=E;N=D}Dyb((K<<24>>24==0?k[d+4>>2]|0:d)|0,(L<<24>>24==0?N:b)|0,k[f>>2]<<2|0)|0;i[d+12>>0]=i[b+12>>0]|0;if(!a){r=e;return}N=a+8|0;k[N>>2]=0;L=k[f>>2]|0;K=L>>>0>134217728?134217728:L;L=a+13|0;B=i[L>>0]|0;q=B<<24>>24==0;if(q)O=k[a>>2]|0;else O=2;if(K>>>0>O>>>0){z=O<<2;O=z>>>0>>0?K:z;z=O>>>0>134217728?134217728:O;O=KBa(z<<2)|0;if(q){q=a+4|0;OBa(k[q>>2]|0);P=q}else{i[L>>0]=0;P=a+4|0}k[N>>2]=K;k[a>>2]=z;k[P>>2]=O;Q=i[L>>0]|0}else{k[N>>2]=K;Q=B}if(!(Q<<24>>24))R=k[a+4>>2]|0;else R=a;Dyb(R|0,((i[w>>0]|0)==0?k[F>>2]|0:b)|0,k[f>>2]<<2|0)|0;i[a+12>>0]=i[b+12>>0]|0;r=e;return}R=d+8|0;k[R>>2]=0;Q=k[f>>2]|0;B=Q>>>0>134217728?134217728:Q;Q=d+13|0;K=i[Q>>0]|0;N=K<<24>>24==0;L=N?k[d>>2]|0:2;if(B>>>0>L>>>0){O=L<<2;L=O>>>0>>0?B:O;O=L>>>0>134217728?134217728:L;L=KBa(O<<2)|0;if(N){N=d+4|0;OBa(k[N>>2]|0);S=N}else{i[Q>>0]=0;S=d+4|0}k[R>>2]=B;k[d>>2]=O;k[S>>2]=L;T=i[Q>>0]|0;U=i[w>>0]|0;V=k[F>>2]|0}else{k[R>>2]=B;T=K;U=E;V=D}Dyb((T<<24>>24==0?k[d+4>>2]|0:d)|0,(U<<24>>24==0?V:b)|0,k[f>>2]<<2|0)|0;f=d+12|0;i[f>>0]=0;b=(a|0)!=0;if(b){V=a+13|0;U=i[V>>0]|0;do if(U<<24>>24==0?(k[a>>2]|0)==0:0){x=0;T=Ba(563,4)|0;D=x;x=0;if(D&1){D=Hc(0)|0;Fg(D)}else{D=a+4|0;E=k[D>>2]|0;K=a+8|0;Dyb(T|0,E|0,k[K>>2]<<2|0)|0;OBa(E);k[K>>2]=1;k[a>>2]=1;k[D>>2]=T;W=i[V>>0]|0;break}}else X=72;while(0);if((X|0)==72){k[a+8>>2]=1;W=U}if(!(W<<24>>24))Y=k[a+4>>2]|0;else Y=a;k[Y>>2]=0;i[a+12>>0]=0}a:do if(o>>>0<=h>>>0){if(o>>>0>>0){r=e;return}Y=k[d+8>>2]|0;W=k[n>>2]|0;if((Y|0)!=(W|0)){if(Y>>>0>W>>>0)break;r=e;return}W=(i[d+13>>0]|0)==0?k[d+4>>2]|0:d;U=(i[g>>0]|0)==0?k[t>>2]|0:c;V=Y;while(1){V=V+-1|0;if((V|0)<=-1)break a;Y=k[W+(V<<2)>>2]|0;T=k[U+(V<<2)>>2]|0;if((Y|0)!=(T|0)){Z=Y;_=T;break}}if(Z>>>0<=_>>>0){r=e;return}}while(0);k[l>>2]=0;_=l+8|0;k[_>>2]=1;Z=l+12|0;i[Z>>0]=0;V=l+13|0;i[V>>0]=1;b:do if(p){if(b){U=((k[C>>2]|0)>>>0)/((k[s>>2]|0)>>>0)|0;W=a+13|0;T=i[W>>0]|0;do if(T<<24>>24==0?(k[a>>2]|0)==0:0){x=0;Y=Ba(563,4)|0;D=x;x=0;if(D&1){D=Hc(0)|0;Fg(D)}else{D=a+4|0;K=k[D>>2]|0;E=a+8|0;Dyb(Y|0,K|0,k[E>>2]<<2|0)|0;OBa(K);k[E>>2]=1;k[a>>2]=1;k[D>>2]=Y;$=i[W>>0]|0;break}}else X=92;while(0);if((X|0)==92){k[a+8>>2]=1;$=T}if(!($<<24>>24))aa=k[a+4>>2]|0;else aa=a;k[aa>>2]=U;i[a+12>>0]=0}W=((k[C>>2]|0)>>>0)%((k[s>>2]|0)>>>0)|0;Y=d+13|0;D=i[Y>>0]|0;do if(D<<24>>24==0&(k[d>>2]|0)==0){x=0;E=Ba(563,4)|0;K=x;x=0;if(K&1){K=Hc(0)|0;Fg(K)}else{K=d+4|0;B=k[K>>2]|0;R=d+8|0;Dyb(E|0,B|0,k[R>>2]<<2|0)|0;OBa(B);k[R>>2]=1;k[d>>2]=1;k[K>>2]=E;ba=i[Y>>0]|0;ca=E;break}}else{k[d+8>>2]=1;ba=D;ca=k[d+4>>2]|0}while(0);k[(ba<<24>>24==0?ca:d)>>2]=W;i[f>>0]=0}else{c:do if((o|0)!=1){if(b){D=m-h|0;Y=D>>>0>134217728?134217728:D;D=a+13|0;U=(i[D>>0]|0)==0;if(U)da=k[a>>2]|0;else da=2;if(Y>>>0>da>>>0){T=da<<2;E=T>>>0>>0?Y:T;T=E>>>0>134217728?134217728:E;x=0;E=Ba(563,T<<2|0)|0;K=x;x=0;if(K&1){X=100;break}if(U){U=a+4|0;K=k[U>>2]|0;R=a+8|0;Dyb(E|0,K|0,k[R>>2]<<2|0)|0;OBa(K);ea=U;fa=R}else{R=a+8|0;Dyb(E|0,a|0,k[R>>2]<<2|0)|0;i[D>>0]=0;ea=a+4|0;fa=R}k[fa>>2]=Y;k[a>>2]=T;k[ea>>2]=E}else k[a+8>>2]=Y;Y=d+13|0;E=d+4|0;T=(i[Y>>0]|0)==0?k[E>>2]|0:d;R=a+13|0;if(!(i[R>>0]|0))ga=k[a+4>>2]|0;else ga=a;if((m-h|0)>>>0>1){Fyb(ga+4|0,0,m-y<<2|0)|0;ha=R;ia=Y;ja=E;ka=d;la=T;ma=ga}else{ha=R;ia=Y;ja=E;ka=d;la=T;ma=ga}}else{T=d+13|0;E=d+4|0;ha=a+13|0;ia=T;ja=E;ka=d;la=(i[T>>0]|0)==0?k[E>>2]|0:d;ma=0}E=s+(h<<2)|0;T=l+4|0;Y=a+12|0;R=d+8|0;D=a+8|0;U=a+4|0;K=s+(y+-2<<2)|0;B=1-y|0;F=1;w=la;Q=0;L=o;d:while(1){S=k[w+(L<<2)>>2]|0;O=k[E>>2]|0;do if(!((L|0)!=0&S>>>0<=O>>>0))if(!L){na=((k[w>>2]|0)>>>0)/(O>>>0)|0;oa=0;break}else{N=Ryb(k[w+(L+-1<<2)>>2]|0,S|0,k[K>>2]|0,O|0)|0;na=N;oa=L;break}else{N=L+-1|0;P=Ryb(k[w+(N<<2)>>2]|0,S|0,O|0,0)|0;z=M;q=z>>>0>0|(z|0)==0&P>>>0>4294967295;na=q?1:P;oa=q?L:N}while(0);O=oa-h|0;do if(b){S=ma+(O<<2)|0;N=k[S>>2]|0;if(Q){if(N>>>0>na>>>0){k[S>>2]=N-na;break}q=O+1|0;P=q>>>0>134217728?134217728:q;q=i[V>>0]|0;z=q<<24>>24==0;if(z)pa=k[l>>2]|0;else pa=2;if(P>>>0>pa>>>0){A=pa<<2;H=A>>>0

      >>0?P:A;A=H>>>0>134217728?134217728:H;x=0;H=Ba(563,A<<2|0)|0;J=x;x=0;if(J&1){X=99;break d}if(z){z=k[T>>2]|0;Dyb(H|0,z|0,k[_>>2]<<2|0)|0;OBa(z);qa=i[V>>0]|0}else{Dyb(H|0,l|0,k[_>>2]<<2|0)|0;i[V>>0]=0;qa=0}k[_>>2]=P;k[l>>2]=A;k[T>>2]=H;ra=qa}else{k[_>>2]=P;ra=q}q=ra<<24>>24==0;if(q)sa=k[T>>2]|0;else sa=l;k[sa+(O<<2)>>2]=na;do if((oa|0)!=(h|0)){if(!q){P=B+oa|0;Fyb(l|0,0,(P>>>0>1?P:1)<<2|0)|0;break}P=k[T>>2]|0;H=0;do{k[P+(H<<2)>>2]=0;H=H+1|0}while(H>>>0>>0)}while(0);x=0;if((i[Y>>0]|0)!=0^(i[Z>>0]|0)!=0){aC(a,a,l);q=x;x=0;if(q&1){X=99;break d}else break}else{$B(a,a,l);q=x;x=0;if(q&1){X=99;break d}else break}}else{if(na>>>0<~N>>>0){k[S>>2]=N+na;break}q=O+1|0;H=q>>>0>134217728?134217728:q;q=i[V>>0]|0;P=q<<24>>24==0;if(P)ta=k[l>>2]|0;else ta=2;if(H>>>0>ta>>>0){A=ta<<2;z=A>>>0>>0?H:A;A=z>>>0>134217728?134217728:z;x=0;z=Ba(563,A<<2|0)|0;J=x;x=0;if(J&1){X=99;break d}if(P){P=k[T>>2]|0;Dyb(z|0,P|0,k[_>>2]<<2|0)|0;OBa(P);ua=i[V>>0]|0}else{Dyb(z|0,l|0,k[_>>2]<<2|0)|0;i[V>>0]=0;ua=0}k[_>>2]=H;k[l>>2]=A;k[T>>2]=z;va=ua}else{k[_>>2]=H;va=q}q=va<<24>>24==0;if(q)wa=k[T>>2]|0;else wa=l;k[wa+(O<<2)>>2]=na;do if((oa|0)!=(h|0)){if(!q){H=B+oa|0;Fyb(l|0,0,(H>>>0>1?H:1)<<2|0)|0;break}H=k[T>>2]|0;z=0;do{k[H+(z<<2)>>2]=0;z=z+1|0}while(z>>>0>>0)}while(0);x=0;if((i[Y>>0]|0)!=0^(i[Z>>0]|0)!=0){$B(a,a,l);q=x;x=0;if(q&1){X=99;break d}else break}else{aC(a,a,l);q=x;x=0;if(q&1){X=99;break d}else break}}}while(0);q=O+1+(k[n>>2]|0)|0;N=q>>>0>134217728?134217728:q;q=i[V>>0]|0;S=q<<24>>24==0;if(S)xa=k[l>>2]|0;else xa=2;if(N>>>0>xa>>>0){z=xa<<2;H=z>>>0>>0?N:z;z=H>>>0>134217728?134217728:H;x=0;H=Ba(563,z<<2|0)|0;A=x;x=0;if(A&1){X=99;break}if(S){S=k[T>>2]|0;Dyb(H|0,S|0,k[_>>2]<<2|0)|0;OBa(S);ya=i[V>>0]|0}else{Dyb(H|0,l|0,k[_>>2]<<2|0)|0;i[V>>0]=0;ya=0}k[_>>2]=N;k[l>>2]=z;k[T>>2]=H;za=ya}else{k[_>>2]=N;za=q}if(!(za<<24>>24))Aa=k[T>>2]|0;else Aa=l;if((oa|0)!=(h|0)){q=B+oa|0;Fyb(Aa|0,0,(q>>>0>1?q:1)<<2|0)|0}q=k[n>>2]|0;do if(!q)X=216;else{N=0;H=0;z=0;while(1){S=Qyb(k[s+(z<<2)>>2]|0,0,na|0,0)|0;A=Hyb(S|0,M|0,N|0,H|0)|0;S=M;k[Aa+(z+O<<2)>>2]=A;z=z+1|0;if(z>>>0>=q>>>0){Ca=S;Da=0;break}else{N=S;H=0}}if((Ca|0)==0&(Da|0)==0){X=216;break}H=k[_>>2]|0;k[Aa+(H+-1<<2)>>2]=Ca;Ea=H}while(0);do if((X|0)==216){X=0;q=k[_>>2]|0;O=q+-1|0;H=O>>>0>134217728?134217728:O;O=(i[V>>0]|0)==0;if(O)Fa=k[l>>2]|0;else Fa=2;if(H>>>0<=Fa>>>0){k[_>>2]=H;Ea=H;break}N=Fa<<2;z=N>>>0>>0?H:N;N=z>>>0>134217728?134217728:z;x=0;z=Ba(563,N<<2|0)|0;S=x;x=0;if(S&1){X=99;break d}if(O){O=k[T>>2]|0;Dyb(z|0,O|0,q<<2|0)|0;OBa(O)}else{Dyb(z|0,l|0,q<<2|0)|0;i[V>>0]=0}k[_>>2]=H;k[l>>2]=N;k[T>>2]=z;Ea=H}while(0);H=i[f>>0]|0;z=H<<24>>24!=0;N=j[Z>>1]|0;q=N&255;O=z^q<<24>>24!=0;S=(N&65535)>>>8&255;do if(!O){N=k[R>>2]|0;e:do if((N|0)==(Ea|0)){A=(i[ia>>0]|0)==0?k[ja>>2]|0:ka;P=S<<24>>24==0?k[T>>2]|0:l;J=Ea;while(1){J=J+-1|0;if((J|0)<=-1){Ga=0;break e}I=k[A+(J<<2)>>2]|0;G=k[P+(J<<2)>>2]|0;if((I|0)!=(G|0)){Ha=I;Ia=G;break}}Ga=Ha>>>0>Ia>>>0?1:-1}else Ga=N>>>0>Ea>>>0?1:-1;while(0);if(((z?0-Ga|0:Ga)|0)<=0){Ja=N;X=238;break}if(O){X=236;break}x=0;fb(220,d|0,d|0,l|0);J=x;x=0;if(J&1){X=99;break d}else{Ka=w;La=Q}}else{if(!z){X=236;break}Ja=k[R>>2]|0;X=238}while(0);if((X|0)==236){X=0;x=0;fb(219,d|0,d|0,l|0);z=x;x=0;if(z&1){X=99;break}else{Ka=w;La=Q}}else if((X|0)==238){X=0;z=d;J=k[z>>2]|0;P=k[z+4>>2]|0;z=l;A=k[z+4>>2]|0;G=d;k[G>>2]=k[z>>2];k[G+4>>2]=A;A=l;k[A>>2]=J;k[A+4>>2]=P;i[f>>0]=q;i[Z>>0]=H;P=i[ia>>0]|0;i[ia>>0]=S;i[V>>0]=P;k[R>>2]=k[_>>2];k[_>>2]=Ja;x=0;if(O){aC(d,d,l);P=x;x=0;if(P&1){X=99;break}}else{$B(d,d,l);P=x;x=0;if(P&1){X=99;break}}Ka=(i[ia>>0]|0)==0?k[ja>>2]|0:ka;La=Q^1}do if(b&F){P=k[D>>2]|0;A=P+-1|0;if(!(k[ma+(A<<2)>>2]|0)){Ma=A;Na=P}else{Oa=0;break}while(1){P=Na;Na=Ma>>>0>134217728?134217728:Ma;A=(i[ha>>0]|0)==0;if(A)Pa=k[a>>2]|0;else Pa=2;if(Na>>>0>Pa>>>0){J=Pa<<2;G=J>>>0>>0?Na:J;J=G>>>0>134217728?134217728:G;x=0;G=Ba(563,J<<2|0)|0;z=x;x=0;if(z&1){X=98;break d}if(A){A=k[U>>2]|0;Dyb(G|0,A|0,P<<2|0)|0;OBa(A)}else{Dyb(G|0,a|0,P<<2|0)|0;i[ha>>0]=0}k[D>>2]=Na;k[a>>2]=J;k[U>>2]=G}else k[D>>2]=Na;Ma=Na+-1|0;if(k[ma+(Ma<<2)>>2]|0){Oa=0;break}}}else Oa=F;while(0);O=k[R>>2]|0;S=L;L=O+-1|0;if(L>>>0>>0){Qa=O;Ra=La;X=262;break}if(L>>>0>h>>>0){F=Oa;w=Ka;Q=La;L=L;continue}S=k[n>>2]|0;if((O|0)!=(S|0))if(O>>>0>S>>>0){F=Oa;w=Ka;Q=La;L=L;continue}else{Qa=O;Ra=La;X=262;break}S=(i[ia>>0]|0)==0?k[ja>>2]|0:ka;H=(i[g>>0]|0)==0?k[t>>2]|0:c;q=O;while(1){q=q+-1|0;if((q|0)<=-1){F=Oa;w=Ka;Q=La;L=L;continue d}N=k[S+(q<<2)>>2]|0;G=k[H+(q<<2)>>2]|0;if((N|0)!=(G|0)){Sa=N;Ta=G;break}}if(Sa>>>0<=Ta>>>0){Qa=O;Ra=La;X=262;break}else{F=Oa;w=Ka;Q=La}}if((X|0)==98){Q=Hc()|0;Ua=Q;Va=M;break}else if((X|0)==99){Q=Hc()|0;Ua=Q;Va=M;break}else if((X|0)==262){if(!Ra)break b;if((Qa|0)==1?(k[((i[ia>>0]|0)==0?k[ja>>2]|0:ka)>>2]|0)==0:0)break b;do if(b){Q=i[ha>>0]|0;if(!(i[Y>>0]|0)){w=Q<<24>>24==0?k[U>>2]|0:a;F=k[w>>2]|0;if(!F){x=0;fb(222,a|0,a|0,30348);L=x;x=0;if(L&1){X=100;break c}else break}else{k[w>>2]=F+-1;break}}else{F=Q<<24>>24==0?k[U>>2]|0:a;Q=k[F>>2]|0;if((Q|0)==-1){x=0;fb(221,a|0,a|0,30348);w=x;x=0;if(w&1){X=100;break c}else break}else{k[F>>2]=Q+1;break}}}while(0);U=c+12|0;Y=i[f>>0]|0;if(!(i[U>>0]|0)){x=0;if(!(Y<<24>>24)){$B(d,c,d);Q=x;x=0;if(Q&1){X=100;break}else break b}else{aC(d,c,d);Q=x;x=0;if(Q&1){X=100;break}else break b}}i[f>>0]=Y^1;do if(Y<<24>>24!=1&(k[R>>2]|0)==1){if(k[((i[ia>>0]|0)==0?k[ja>>2]|0:ka)>>2]|0){X=277;break}i[f>>0]=0;if(!(i[U>>0]|0))X=279;else X=278}else X=277;while(0);if((X|0)==277)if(Y<<24>>24!=1^(i[U>>0]|0)!=0)X=278;else X=279;if((X|0)==278){x=0;fb(219,d|0,d|0,c|0);R=x;x=0;if(R&1){X=100;break}else break b}else if((X|0)==279){x=0;fb(220,d|0,d|0,c|0);R=x;x=0;if(R&1){X=100;break}else break b}}}else{R=k[C+4>>2]|0;Q=k[C>>2]|0;F=k[s+4>>2]|0;w=k[s>>2]|0;if(b){L=Ryb(Q|0,R|0,w|0,F|0)|0;D=M;T=a+13|0;B=(i[T>>0]|0)==0;if(B)Wa=k[a+4>>2]|0;else Wa=a;k[Wa>>2]=L;k[Wa+4>>2]=D;L=(D|0)!=0?2:1;if(B)Xa=k[a>>2]|0;else Xa=2;if(L>>>0>Xa>>>0){D=Xa<<2;K=D>>>0>>0?L:D;D=K>>>0>134217728?134217728:K;x=0;K=Ba(563,D<<2|0)|0;E=x;x=0;if(E&1){X=100;break}if(B){B=a+4|0;E=k[B>>2]|0;q=a+8|0;Dyb(K|0,E|0,k[q>>2]<<2|0)|0;OBa(E);Ya=B;Za=q}else{q=a+8|0;Dyb(K|0,a|0,k[q>>2]<<2|0)|0;i[T>>0]=0;Ya=a+4|0;Za=q}k[Za>>2]=L;k[a>>2]=D;k[Ya>>2]=K}else k[a+8>>2]=L;i[a+12>>0]=0}L=Syb(Q|0,R|0,w|0,F|0)|0;F=M;w=d+13|0;R=(i[w>>0]|0)==0;Q=d+4|0;K=k[Q>>2]|0;D=R?K:d;k[D>>2]=L;k[D+4>>2]=F;D=(F|0)!=0?2:1;F=R?k[d>>2]|0:2;if(D>>>0>F>>>0){L=F<<2;F=L>>>0>>0?D:L;L=F>>>0>134217728?134217728:F;x=0;F=Ba(563,L<<2|0)|0;q=x;x=0;if(q&1){X=100;break}if(R){R=d+8|0;Dyb(F|0,K|0,k[R>>2]<<2|0)|0;OBa(K);_a=R}else{R=d+8|0;Dyb(F|0,d|0,k[R>>2]<<2|0)|0;i[w>>0]=0;_a=R}k[_a>>2]=D;k[d>>2]=L;k[Q>>2]=F}else k[d+8>>2]=D;i[f>>0]=0;break b}while(0);if((X|0)==100){W=Hc()|0;Ua=W;Va=M}if(i[V>>0]|0){u=Ua;v=Va;Sc(u|0)}OBa(k[l+4>>2]|0);u=Ua;v=Va;Sc(u|0)}while(0);if(!(i[V>>0]|0))OBa(k[l+4>>2]|0);r=e;return}function WO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if((b|0)==0&(c|0)==0)return;d=Iyb(b|0,c|0,5)|0;c=b&31;b=a+8|0;e=k[b>>2]|0;if(e>>>0<=d>>>0){f=a+13|0;g=i[f>>0]|0;do if(g<<24>>24==0&(k[a>>2]|0)==0){x=0;h=Ba(563,4)|0;j=x;x=0;if(j&1){j=Hc(0)|0;Fg(j)}else{j=a+4|0;l=k[j>>2]|0;Dyb(h|0,l|0,e<<2|0)|0;OBa(l);k[b>>2]=1;k[a>>2]=1;k[j>>2]=h;m=i[f>>0]|0;n=h;break}}else{k[b>>2]=1;m=g;n=k[a+4>>2]|0}while(0);k[(m<<24>>24==0?n:a)>>2]=0;i[a+12>>0]=0;return}n=a+13|0;m=i[n>>0]|0;g=m<<24>>24==0;f=a+4|0;h=k[f>>2]|0;j=g?h:a;l=((((k[j+(e+-1<<2)>>2]|0)>>>c|0)==0)<<31>>31)+(e-d)|0;if(!l){do if(g&(k[a>>2]|0)==0){x=0;o=Ba(563,4)|0;p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)}else{Dyb(o|0,h|0,e<<2|0)|0;OBa(h);k[b>>2]=1;k[a>>2]=1;k[f>>2]=o;q=i[n>>0]|0;r=o;break}}else{k[b>>2]=1;q=m;r=h}while(0);k[(q<<24>>24==0?r:a)>>2]=0;i[a+12>>0]=0;return}if(c){r=d+1|0;q=(k[j+(d<<2)>>2]|0)>>>c;k[j>>2]=q;if(r>>>0>>0){m=32-c|0;o=r;r=q;q=j;p=0;do{k[q>>2]=k[j+(o<<2)>>2]<>2]|0)>>>c;q=j+(p<<2)|0;k[q>>2]=r}while(o>>>0>>0)}}else{o=0;do{k[j+(o<<2)>>2]=k[j+(o+d<<2)>>2];o=o+1|0}while(o>>>0>>0)}o=l>>>0>134217728?134217728:l;l=g?k[a>>2]|0:2;if(o>>>0<=l>>>0){k[b>>2]=o;return}d=l<<2;l=d>>>0>>0?o:d;d=l>>>0>134217728?134217728:l;l=KBa(d<<2)|0;if(g){Dyb(l|0,h|0,e<<2|0)|0;OBa(h)}else{Dyb(l|0,a|0,e<<2|0)|0;i[n>>0]=0}k[b>>2]=o;k[a>>2]=d;k[f>>2]=l;return}function XO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+32|0;c=b;b=Rd(32)|0;I0a(c,a);d=c+8|0;k[d>>2]=20796;e=k[a+12>>2]|0;k[c+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(c);g=f;h=e}else{e=c+16|0;f=a+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[c>>2]=30360;k[d>>2]=30380;x=0;xa(719,b|0,c|0);f=x;x=0;if(f&1)i=1;else{x=0;fb(149,b|0,4072,614);x=0;i=0}f=Hc()|0;e=M;k[d>>2]=20796;d=c+12|0;a=k[d>>2]|0;if(a){x=0;j=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(j)k[d>>2]=0}qCa(c);if(i){g=e;h=f}else{l=e;m=f;Sc(m|0)}}Fc(b|0);l=g;m=h;Sc(m|0)}function YO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=a+28|0;k[c>>2]=21368;I0a(a,b);d=a+8|0;k[d>>2]=20796;e=k[b+12>>2]|0;k[a+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(a);g=f;h=e;Sc(h|0)}e=a+16|0;f=b+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[a>>2]=30400;f=a+8|0;k[f>>2]=30428;k[c>>2]=30456;x=0;xa(608,f|0,b+8|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;f=M;k[d>>2]=20796;d=a+12|0;c=k[d>>2]|0;if(c){x=0;e=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(e)k[d>>2]=0}qCa(a);g=f;h=b;Sc(h|0)}function ZO(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(!c){qCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(a);return}k[b>>2]=0;qCa(a);return}function _O(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}qCa(a);OBa(a);return}function $O(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(32)|0;x=0;i[c>>0]=i[b>>0]|0;fb(225,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-12>>2]|0)|0}return 0}function aP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Rd(32)|0;c=b+28|0;k[c>>2]=21368;I0a(b,a);d=b+8|0;k[d>>2]=20796;e=k[a+12>>2]|0;k[b+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;qCa(b);Fc(b|0);Sc(e|0)}e=b+16|0;f=a+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[b>>2]=30400;k[d>>2]=30428;k[c>>2]=30456;Gf(b|0,4072,614)}function bP(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function cP(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[a>>2]=0}qCa(b);OBa(b);return}function dP(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(32)|0;x=0;i[c>>0]=i[b>>0]|0;fb(225,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-12>>2]|0)|0}return 0}function eP(a){a=a|0;aP(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function fP(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function gP(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);OBa(b);return}k[a>>2]=0;qCa(b);OBa(b);return}function hP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=a+28|0;k[c>>2]=21368;I0a(a,b);d=a+8|0;k[d>>2]=20796;e=k[b+12>>2]|0;k[a+12>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;qCa(a);g=f;h=e;Sc(h|0)}e=a+16|0;f=b+16|0;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];k[e+8>>2]=k[f+8>>2];k[a>>2]=30400;f=a+8|0;k[f>>2]=30428;k[c>>2]=30456;x=0;xa(608,f|0,b+8|0);b=x;x=0;if(!(b&1))return;b=Hc()|0;f=M;k[d>>2]=20796;d=a+12|0;c=k[d>>2]|0;if(c){x=0;e=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(e)k[d>>2]=0}qCa(a);g=f;h=b;Sc(h|0)}function iP(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(!c){qCa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(a);return}k[b>>2]=0;qCa(a);return}function jP(a){a=a|0;var b=0,c=0,d=0;k[a+8>>2]=20796;b=a+12|0;c=k[b>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[b>>2]=0}qCa(a);OBa(a);return}function kP(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(!c){qCa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){qCa(b);return}k[a>>2]=0;qCa(b);return}function lP(a){a=a|0;var b=0,c=0,d=0;b=a+-8|0;k[b+8>>2]=20796;a=b+12|0;c=k[a>>2]|0;if(c){x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(d)k[a>>2]=0}qCa(b);OBa(b);return}function mP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27892;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function nP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27892;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function oP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=27892;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function pP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=27892;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function qP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function rP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function sP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+240|0;d=c+200|0;e=c+160|0;f=c+120|0;g=c+80|0;h=c+40|0;j=c;l=b+8|0;m=(lF(l)|0)+4|0;n=k[m>>2]|0;if((k[n+8>>2]|0)==0?(k[n+40>>2]|0)==1:0){k[j>>2]=0;k[j+32>>2]=1;k[a>>2]=2;o=a+4|0;i[o>>0]=1;p=a+8|0;q=p;s=j;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));u=a+48|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;r=c;return}else{n=(lF(b+80|0)|0)+4|0;q=f;s=(k[n>>2]|0)+8|0;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));Ey(e,f);f=(lF(l)|0)+4|0;q=h;s=(k[f>>2]|0)+8|0;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));Ey(g,h);vP(d,e,g);wP(j,d);k[a>>2]=2;o=a+4|0;i[o>>0]=1;p=a+8|0;q=p;s=j;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));u=a+48|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;r=c;return}}function tP(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==227470?a+8|0:0)|0}function uP(a){a=a|0;return 4152}function vP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+48|0;e=d+42|0;f=d+41|0;g=d+40|0;h=d+32|0;l=d+16|0;m=d;k[l>>2]=0;k[l+8>>2]=1;i[l+12>>0]=0;n=l+13|0;i[n>>0]=1;x=0;nb(111,l|0,b|0,e|0,f|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[n>>0]|0)Sc(b|0);OBa(k[l+4>>2]|0);Sc(b|0)}k[m>>2]=0;k[m+8>>2]=1;i[m+12>>0]=0;b=m+13|0;i[b>>0]=1;x=0;nb(111,m|0,c|0,f|0,g|0);g=x;x=0;do if(g&1){f=Hc()|0;c=M;if(!(i[b>>0]|0))OBa(k[m+4>>2]|0);o=c;p=f}else{k[h>>2]=l;k[h+4>>2]=m;k[a>>2]=0;j[a+32>>1]=1;i[a+34>>0]=0;x=0;fb(226,a|0,h|0,e|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(i[b>>0]|0){o=c;p=f;break}OBa(k[m+4>>2]|0);o=c;p=f;break}if(!(i[b>>0]|0))OBa(k[m+4>>2]|0);if(i[n>>0]|0){r=d;return}OBa(k[l+4>>2]|0);r=d;return}while(0);if(i[n>>0]|0)Sc(p|0);OBa(k[l+4>>2]|0);Sc(p|0)}function wP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+48|0;d=c+41|0;e=c+40|0;f=c+32|0;g=c;h=c+24|0;j=c+16|0;do if((i[4160]|0)==0?(Bb(4160)|0)!=0:0){k[g>>2]=1;k[g+8>>2]=1;i[g+12>>0]=0;l=g+13|0;i[l>>0]=1;k[h>>2]=256;k[f>>2]=g;k[f+4>>2]=h;k[1042]=0;k[1044]=1;i[4180]=0;i[4181]=1;x=0;fb(184,4168,f|0,d|0);m=x;x=0;if(!(m&1)){if(!(i[l>>0]|0))OBa(k[g+4>>2]|0);Kc(4160);break}m=Hc()|0;if(!(i[4181]|0))OBa(k[1043]|0);if(i[l>>0]|0){Cd(4160);Sc(m|0)}OBa(k[g+4>>2]|0);Cd(4160);Sc(m|0)}while(0);if(!(i[b+34>>0]|0)){k[a>>2]=0;k[a+32>>2]=1;xP(a,b,d,e);r=c;return}else{k[j>>2]=4168;k[j+4>>2]=b;k[a>>2]=0;k[a+32>>2]=1;yP(a,j,d);r=c;return}}function xP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=j[b+32>>1]|0;c=((d&65535)<8?d:8)&65535;e=a+32|0;k[e>>2]=c;Dyb(a|0,b|0,((d&65535)>8?c:d&65535)<<2|0)|0;d=k[e>>2]|0;a:do if(i[b+34>>0]|0){if((d|0)==1)if(!(k[a>>2]|0))return;else f=5;else if(d>>>0<8)f=5;if((f|0)==5){c=d<<2;Fyb(a+c|0,0,32-c|0)|0}k[e>>2]=8;c=k[a>>2]|0;g=~c;k[a>>2]=g;h=a+4|0;l=k[h>>2]|0;k[h>>2]=~l;h=a+8|0;m=k[h>>2]|0;k[h>>2]=~m;h=a+12|0;n=k[h>>2]|0;k[h>>2]=~n;h=a+16|0;o=k[h>>2]|0;k[h>>2]=~o;h=a+20|0;p=k[h>>2]|0;k[h>>2]=~p;h=a+24|0;q=k[h>>2]|0;k[h>>2]=~q;h=a+28|0;r=k[h>>2]|0;k[h>>2]=~r;if((r|0)==-1){k[e>>2]=7;if((q|0)==-1){k[e>>2]=6;if((p|0)==-1){k[e>>2]=5;if((o|0)==-1){k[e>>2]=4;if((n|0)==-1){k[e>>2]=3;if((m|0)==-1){m=(l|0)==-1;k[e>>2]=m?1:2;s=m?1:2}else s=3}else s=4}else s=5}else s=6}else s=7}else s=8;if(c){k[a>>2]=0-c;t=s;break}c=Hyb(g|0,0,1,0)|0;g=M;k[a>>2]=c;b:do if(!((g|0)==0&0==0)){c=g;m=0;l=0;while(1){l=l+1|0;n=k[e>>2]|0;if(l>>>0>=n>>>0){u=n;v=c;break}n=Hyb(k[a+(l<<2)>>2]|0,0,c|0,m|0)|0;c=M;k[a+(l<<2)>>2]=n;if((c|0)==0&0==0)break b;else m=0}m=u+1|0;c=m>>>0>8?8:m;k[e>>2]=c;if(c>>>0>u>>>0)k[a+(u<<2)>>2]=v}while(0);g=k[e>>2]|0;c=g+-1|0;if(!c)t=g;else{m=c;c=g;while(1){if(k[a+(m<<2)>>2]|0){t=c;break a}k[e>>2]=m;g=m+-1|0;if(!g){t=m;break}else{l=m;m=g;c=l}}}}else t=d;while(0);d=t+-1|0;if(!d)return;else w=d;while(1){if(k[a+(w<<2)>>2]|0){f=21;break}k[e>>2]=w;w=w+-1|0;if(!w){f=21;break}}if((f|0)==21)return}function yP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+32|0;d=c+17|0;e=c+16|0;f=c;k[f>>2]=0;k[f+8>>2]=1;i[f+12>>0]=0;g=f+13|0;i[g>>0]=1;h=k[b>>2]|0;j=k[b+4>>2]|0;x=0;if((i[h+12>>0]|0)!=0^(i[j+34>>0]|0)!=0){zP(f,h,j);b=x;x=0;if(b&1)l=4;else l=7}else{AP(f,h,j);j=x;x=0;if(j&1)l=4;else l=7}if((l|0)==4){j=Hc()|0;if(i[g>>0]|0)Sc(j|0);OBa(k[f+4>>2]|0);Sc(j|0)}else if((l|0)==7){NB(a,f,d,e);if(i[g>>0]|0){r=c;return}OBa(k[f+4>>2]|0);r=c;return}}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0;d=k[b+8>>2]|0;e=m[c+32>>1]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){f=k[((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)>>2]|0;j=k[c>>2]|0;l=j>>>0>f>>>0;n=(i[b+12>>0]|0)!=0^l;o=(l?j:f)-(l?f:j)|0;j=a+13|0;f=i[j>>0]|0;do if(f<<24>>24==0&(k[a>>2]|0)==0){x=0;l=Ba(563,4)|0;p=x;x=0;if(p&1){p=Hc(0)|0;Fg(p)}else{p=a+4|0;q=k[p>>2]|0;r=a+8|0;Dyb(l|0,q|0,k[r>>2]<<2|0)|0;OBa(q);k[r>>2]=1;k[a>>2]=1;k[p>>2]=l;s=i[j>>0]|0;t=l;break}}else{k[a+8>>2]=1;s=f;t=k[a+4>>2]|0}while(0);f=s<<24>>24==0;k[(f?t:a)>>2]=o;o=a+12|0;i[o>>0]=n&1;if(!n)return;if(k[(f?t:a)>>2]|0)return;i[o>>0]=0;return}a:do if((d|0)==(e|0)){o=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;t=d;while(1){t=t+-1|0;if((t|0)<=-1){u=0;break a}f=k[o+(t<<2)>>2]|0;n=k[c+(t<<2)>>2]|0;if((f|0)!=(n|0)){v=f;w=n;break}}u=v>>>0>w>>>0?1:-1}else u=d>>>0>e>>>0?1:-1;while(0);e=h>>>0>134217728?134217728:h;d=a+13|0;w=i[d>>0]|0;v=w<<24>>24==0;t=k[a>>2]|0;o=v?t:2;if(e>>>0>o>>>0){n=o<<2;o=n>>>0>>0?e:n;n=o>>>0>134217728?134217728:o;o=KBa(n<<2)|0;if(v){v=a+4|0;f=k[v>>2]|0;s=a+8|0;Dyb(o|0,f|0,k[s>>2]<<2|0)|0;OBa(f);y=v;z=s}else{s=a+8|0;Dyb(o|0,a|0,k[s>>2]<<2|0)|0;i[d>>0]=0;y=a+4|0;z=s}k[z>>2]=e;k[a>>2]=n;k[y>>2]=o;A=n;B=i[d>>0]|0}else{k[a+8>>2]=e;A=t;B=w}w=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;t=c;c=B<<24>>24==0;e=a+4|0;n=k[e>>2]|0;o=c?n:a;if((u|0)>=0)if(!u){do if(c&(A|0)==0){x=0;u=Ba(563,4)|0;y=x;x=0;if(y&1){y=Hc(0)|0;Fg(y)}else{y=a+8|0;Dyb(u|0,n|0,k[y>>2]<<2|0)|0;OBa(n);k[y>>2]=1;k[a>>2]=1;k[e>>2]=u;C=i[d>>0]|0;D=u;break}}else{k[a+8>>2]=1;C=B;D=n}while(0);k[(C<<24>>24==0?D:a)>>2]=0;i[a+12>>0]=0;return}else{E=w;F=t;G=0}else{E=t;F=w;G=1}if(g){w=E;t=F;F=0;D=0;C=0;while(1){A=Gyb(k[w+(C<<2)>>2]|0,0,k[t+(C<<2)>>2]|0,0)|0;c=Gyb(A|0,M|0,F|0,D|0)|0;k[o+(C<<2)>>2]=c;c=M&1;C=C+1|0;if(C>>>0>=g>>>0){H=c;I=0;break}else{F=c;D=0}}if(((H|0)!=0|(I|0)!=0)&h>>>0>g>>>0){D=E;F=H;H=I;I=g;while(1){C=Gyb(k[D+(I<<2)>>2]|0,0,F|0,H|0)|0;k[o+(I<<2)>>2]=C;F=M&1;C=I+1|0;if(!(((F|0)!=0|0!=0)&h>>>0>C>>>0)){J=C;break}else{H=0;I=C}}}else J=g}else J=0;if((h|0)!=(J|0)?(g=E,(g|0)!=(o|0)):0){Eyb(o+(J<<2)|0,g+(J<<2)|0,h-J<<2|0)|0;K=i[d>>0]|0;L=k[e>>2]|0}else{K=B;L=n}n=K<<24>>24==0?L:a;L=a+8|0;K=k[L>>2]|0;B=K+-1|0;b:do if(!B)N=K;else{e=B;d=K;while(1){if(k[n+(e<<2)>>2]|0){N=d;break b}k[L>>2]=e;J=e+-1|0;if(!J){N=e;break}else{h=e;e=J;d=h}}}while(0);L=i[b+12>>0]|0;b=a+12|0;i[b>>0]=L;a=(N|0)==1;if(L<<24>>24!=0&a?(k[n>>2]|0)==0:0){i[b>>0]=0;O=0}else O=L;if(!G)return;i[b>>0]=O^1;if(!(O<<24>>24!=1&a))return;if(k[n>>2]|0)return;i[b>>0]=0;return}function AP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;d=k[b+8>>2]|0;e=m[c+32>>1]|0;f=d>>>0>>0;g=f?d:e;h=f?e:d;if((h|0)==1){j=i[b+12>>0]|0;l=j<<24>>24==0;n=Hyb(k[c>>2]|0,0,k[((i[b+13>>0]|0)==0?k[b+4>>2]|0:b)>>2]|0,0)|0;o=M;p=a+13|0;q=(i[p>>0]|0)==0;r=a+4|0;s=k[r>>2]|0;t=q?s:a;k[t>>2]=n;k[t+4>>2]=o;t=(o|0)!=0?2:1;o=q?k[a>>2]|0:2;if(t>>>0>o>>>0){n=o<<2;o=n>>>0>>0?t:n;n=o>>>0>134217728?134217728:o;o=KBa(n<<2)|0;if(q){q=a+8|0;Dyb(o|0,s|0,k[q>>2]<<2|0)|0;OBa(s);u=q}else{q=a+8|0;Dyb(o|0,a|0,k[q>>2]<<2|0)|0;i[p>>0]=0;u=q}k[u>>2]=t;k[a>>2]=n;k[r>>2]=o}else k[a+8>>2]=t;t=a+12|0;i[t>>0]=j;if(l)return;if((k[a+8>>2]|0)!=1)return;if(k[((i[p>>0]|0)==0?k[r>>2]|0:a)>>2]|0)return;i[t>>0]=0;return}t=h>>>0>134217728?134217728:h;r=a+13|0;p=i[r>>0]|0;l=p<<24>>24==0;j=k[a>>2]|0;o=l?j:2;if(t>>>0>o>>>0){n=o<<2;o=n>>>0>>0?t:n;n=o>>>0>134217728?134217728:o;o=KBa(n<<2)|0;if(l){l=a+4|0;u=k[l>>2]|0;q=a+8|0;Dyb(o|0,u|0,k[q>>2]<<2|0)|0;OBa(u);v=l;w=q}else{q=a+8|0;Dyb(o|0,a|0,k[q>>2]<<2|0)|0;i[r>>0]=0;v=a+4|0;w=q}k[w>>2]=t;k[a>>2]=n;k[v>>2]=o;x=n;y=i[r>>0]|0}else{k[a+8>>2]=t;x=j;y=p}p=(i[b+13>>0]|0)==0?k[b+4>>2]|0:b;j=c;c=y<<24>>24==0;t=a+4|0;n=k[t>>2]|0;o=c?n:a;v=o+(g<<2)|0;w=f?j:p;if(!g){z=w;A=0;B=0;C=o}else{q=((-8-((e>>>0>d>>>0?d:e)<<2^-4)|0)>>>2)+1|0;e=w;w=f?p:j;j=0;p=0;f=o;while(1){d=e;l=w;u=k[l>>2]|0;s=Hyb(k[d>>2]|0,0,j|0,p|0)|0;D=Hyb(s|0,M|0,u|0,0)|0;u=M;k[f>>2]=D;f=f+4|0;D=d+4|0;if((f|0)==(v|0)){E=D;F=u;G=0;break}else{e=D;w=l+4|0;j=u;p=0}}z=E;A=F;B=G;C=o+(q<<2)|0}q=v+(h-g<<2)|0;g=(A|0)==0&(B|0)==0;do if((C|0)==(q|0))if(g){H=y;I=n}else{J=A;K=29}else{v=z;o=A;G=B;F=g;E=C;while(1){p=v;if(F){L=v;N=p;O=E;break}j=Hyb(k[p>>2]|0,0,o|0,G|0)|0;o=M;k[E>>2]=j;E=E+4|0;F=(o|0)==0&0==0;if((E|0)==(q|0)){K=27;break}else{v=p+4|0;G=0}}if((K|0)==27)if(F){H=y;I=n;break}else{J=o;K=29;break}if((N|0)==(O|0)){H=y;I=n}else{Eyb(O|0,L|0,N+(q-O>>2<<2)-L|0)|0;H=i[r>>0]|0;I=k[t>>2]|0}}while(0);if((K|0)==29){K=h+1|0;L=K>>>0>134217728?134217728:K;K=c?x:2;if(L>>>0>K>>>0){x=K<<2;K=x>>>0>>0?L:x;x=K>>>0>134217728?134217728:K;K=KBa(x<<2)|0;if(c){c=a+8|0;Dyb(K|0,n|0,k[c>>2]<<2|0)|0;OBa(n);P=c}else{c=a+8|0;Dyb(K|0,a|0,k[c>>2]<<2|0)|0;i[r>>0]=0;P=c}k[P>>2]=L;k[a>>2]=x;k[t>>2]=K;Q=i[r>>0]|0;R=K}else{k[a+8>>2]=L;Q=y;R=n}k[(Q<<24>>24==0?R:a)+(h<<2)>>2]=J;H=Q;I=R}R=H<<24>>24==0?I:a;I=a+8|0;H=k[I>>2]|0;Q=H+-1|0;a:do if(!Q)S=H;else{J=Q;h=H;while(1){if(k[R+(J<<2)>>2]|0){S=h;break a}k[I>>2]=J;n=J+-1|0;if(!n){S=J;break}else{y=J;J=n;h=y}}}while(0);I=i[b+12>>0]|0;b=a+12|0;i[b>>0]=I;if(!(I<<24>>24!=0&(S|0)==1))return;if(k[R>>2]|0)return;i[b>>0]=0;return}function BP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;d=b+32|0;c=m[d>>1]|0;e=a+13|0;f=i[e>>0]|0;g=f<<24>>24==0;if(g)h=k[a>>2]|0;else h=2;if(c>>>0>h>>>0){j=h<<2;h=j>>>0>>0?c:j;j=h>>>0>134217728?134217728:h;h=KBa(j<<2)|0;if(g){g=a+4|0;l=k[g>>2]|0;n=a+8|0;Dyb(h|0,l|0,k[n>>2]<<2|0)|0;OBa(l);o=g;p=n}else{n=a+8|0;Dyb(h|0,a|0,k[n>>2]<<2|0)|0;i[e>>0]=0;o=a+4|0;p=n}k[p>>2]=c;k[a>>2]=j;k[o>>2]=h;q=i[e>>0]|0}else{k[a+8>>2]=c;q=f}if(!(q<<24>>24))r=k[a+4>>2]|0;else r=a;q=m[d>>1]|0;d=a+8|0;f=k[d>>2]|0;Dyb(r|0,b|0,(f>>>0>>0?f:q)<<2|0)|0;q=i[b+34>>0]|0;b=a+12|0;i[b>>0]=q;if(q<<24>>24!=0?(k[d>>2]|0)==1:0){if(!(i[e>>0]|0))s=k[a+4>>2]|0;else s=a;if(!(k[s>>2]|0))i[b>>0]=0}if(!(i[e>>0]|0))t=k[a+4>>2]|0;else t=a;a=(k[d>>2]|0)+-1|0;if(!a)return;else u=a;while(1){if(k[t+(u<<2)>>2]|0){v=25;break}k[d>>2]=u;u=u+-1|0;if(!u){v=25;break}}if((v|0)==25)return}function CP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;h=k[b>>2]|0;l=i[h+12>>0]|0;x=0;nb(110,0,h|0,k[b+4>>2]|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[g>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}i[f>>0]=l;b=k[e>>2]|0;e=i[g>>0]|0;if(l<<24>>24!=0&(b|0)==1){g=k[d+4>>2]|0;if(!(k[(e<<24>>24==0?g:d)>>2]|0)){i[f>>0]=0;m=g;n=0;o=g}else{m=g;n=l;o=g}}else{g=k[d+4>>2]|0;m=g;n=l;o=g}g=b>>>0>8?8:b;l=a+32|0;j[l>>1]=g;f=e<<24>>24==0;e=g&65535;Dyb(a|0,(f?m:d)|0,(e>>>0>>0?e:b)<<2|0)|0;b=a+34|0;i[b>>0]=n;e=j[l>>1]|0;if(n<<24>>24!=0&e<<16>>16==1)if(!(k[a>>2]|0)){i[b>>0]=0;p=1}else p=1;else p=e;e=(p&65535)+-1|0;a:do if(!e)q=p;else{n=e;d=p;while(1){if(k[a+(n<<2)>>2]|0){q=d;break a}m=d+-1<<16>>16;j[l>>1]=m;n=(m&65535)+-1|0;if(!n){q=m;break}else d=m}}while(0);if(q<<16>>16==1?(k[a>>2]|0)==0:0)i[b>>0]=0;if(!f){r=c;return}OBa(o);r=c;return}function DP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27848;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function EP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27848;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function FP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=27848;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function GP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=27848;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function HP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function IP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function JP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+48|0;d=c;e=b+8|0;f=(lF(e)|0)+4|0;g=k[f>>2]|0;if((k[g+8>>2]|0)==0?(k[g+40>>2]|0)==1:0){k[d>>2]=0;k[d+32>>2]=1}else{g=(lF(b+80|0)|0)+4|0;b=(k[g>>2]|0)+8|0;g=(lF(e)|0)+4|0;MP(d,b,(k[g>>2]|0)+8|0)}k[a>>2]=2;i[a+4>>0]=1;g=a+8|0;b=d;d=g+40|0;do{k[g>>2]=k[b>>2];g=g+4|0;b=b+4|0}while((g|0)<(d|0));b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;r=c;return}function KP(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==227575?a+8|0:0)|0}function LP(a){a=a|0;return 4200}function MP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;d=r;r=r+48|0;e=d+40|0;f=d+32|0;g=d+16|0;h=d;k[g>>2]=0;j=g+8|0;k[j>>2]=1;l=g+12|0;i[l>>0]=0;m=g+13|0;i[m>>0]=1;n=k[b+32>>2]|0;o=n>>>0>134217728;p=o?134217728:n;if(p>>>0>2){q=p>>>0>8?p:8;s=KBa(q<<2)|0;k[s>>2]=k[g>>2];i[m>>0]=0;k[j>>2]=p;k[g>>2]=q;k[g+4>>2]=s;t=s}else{k[j>>2]=p;t=g}Dyb(t|0,b|0,(o?536870912:n<<2)|0)|0;i[l>>0]=0;if(!(i[m>>0]|0))u=k[g+4>>2]|0;else u=g;l=(k[j>>2]|0)+-1|0;a:do if(l){n=l;do{if(k[u+(n<<2)>>2]|0)break a;k[j>>2]=n;n=n+-1|0}while((n|0)!=0)}while(0);k[h>>2]=0;j=h+8|0;k[j>>2]=1;u=h+12|0;i[u>>0]=0;l=h+13|0;i[l>>0]=1;n=k[c+32>>2]|0;o=n>>>0>134217728;b=o?134217728:n;do if(b>>>0>2){t=b>>>0>8?b:8;x=0;p=Ba(563,t<<2|0)|0;s=x;x=0;if(s&1){s=Hc()|0;v=M;w=s;break}else{k[p>>2]=k[h>>2];i[l>>0]=0;k[j>>2]=b;k[h>>2]=t;k[h+4>>2]=p;y=p;z=13;break}}else{k[j>>2]=b;y=h;z=13}while(0);do if((z|0)==13){Dyb(y|0,c|0,(o?536870912:n<<2)|0)|0;i[u>>0]=0;if(!(i[l>>0]|0))A=k[h+4>>2]|0;else A=h;b=(k[j>>2]|0)+-1|0;b:do if(b){p=b;do{if(k[A+(p<<2)>>2]|0)break b;k[j>>2]=p;p=p+-1|0}while((p|0)!=0)}while(0);k[f>>2]=g;k[f+4>>2]=h;k[a>>2]=0;k[a+32>>2]=1;x=0;fb(227,a|0,f|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;p=M;if(i[l>>0]|0){v=p;w=b;break}OBa(k[h+4>>2]|0);v=p;w=b;break}if(!(i[l>>0]|0))OBa(k[h+4>>2]|0);if(i[m>>0]|0){r=d;return}OBa(k[g+4>>2]|0);r=d;return}while(0);if(i[m>>0]|0)Sc(w|0);OBa(k[g+4>>2]|0);Sc(w|0)}function NP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=r;r=r+32|0;d=c+17|0;e=c+16|0;f=c;k[f>>2]=0;g=f+8|0;k[g>>2]=1;h=f+12|0;i[h>>0]=0;j=f+13|0;i[j>>0]=1;l=k[b>>2]|0;m=i[l+12>>0]|0;x=0;nb(110,0,l|0,k[b+4>>2]|0,f|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[j>>0]|0)Sc(b|0);OBa(k[f+4>>2]|0);Sc(b|0)}i[h>>0]=m;if(m<<24>>24!=0&(k[g>>2]|0)==1?(k[((i[j>>0]|0)==0?k[f+4>>2]|0:f)>>2]|0)==0:0)i[h>>0]=0;NB(a,f,d,e);if(i[j>>0]|0){r=c;return}OBa(k[f+4>>2]|0);r=c;return}function OP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27804;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function PP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27804;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function QP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=27804;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function RP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=27804;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function SP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function TP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function UP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+240|0;d=c+200|0;e=c+160|0;f=c+120|0;g=c+80|0;h=c+40|0;j=c;l=b+8|0;m=(lF(l)|0)+4|0;n=k[m>>2]|0;if((k[n+8>>2]|0)==0?(k[n+40>>2]|0)==1:0){k[j>>2]=0;k[j+32>>2]=1;k[a>>2]=2;o=a+4|0;i[o>>0]=1;p=a+8|0;q=p;s=j;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));u=a+48|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;r=c;return}else{n=(lF(b+80|0)|0)+4|0;q=f;s=(k[n>>2]|0)+8|0;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));Ey(e,f);f=(lF(l)|0)+4|0;q=h;s=(k[f>>2]|0)+8|0;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));Ey(g,h);XP(d,e,g);wP(j,d);k[a>>2]=2;o=a+4|0;i[o>>0]=1;p=a+8|0;q=p;s=j;t=q+40|0;do{k[q>>2]=k[s>>2];q=q+4|0;s=s+4|0}while((q|0)<(t|0));u=a+48|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[u+16>>2]=0;r=c;return}}function VP(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==227680?a+8|0:0)|0}function WP(a){a=a|0;return 4224}function XP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+48|0;e=d+42|0;f=d+41|0;g=d+40|0;h=d+32|0;l=d+16|0;m=d;k[l>>2]=0;k[l+8>>2]=1;i[l+12>>0]=0;n=l+13|0;i[n>>0]=1;x=0;nb(111,l|0,b|0,e|0,f|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[n>>0]|0)Sc(b|0);OBa(k[l+4>>2]|0);Sc(b|0)}k[m>>2]=0;k[m+8>>2]=1;i[m+12>>0]=0;b=m+13|0;i[b>>0]=1;x=0;nb(111,m|0,c|0,f|0,g|0);g=x;x=0;do if(g&1){f=Hc()|0;c=M;if(!(i[b>>0]|0))OBa(k[m+4>>2]|0);o=c;p=f}else{k[h>>2]=l;k[h+4>>2]=m;k[a>>2]=0;j[a+32>>1]=1;i[a+34>>0]=0;x=0;fb(228,a|0,h|0,e|0);f=x;x=0;if(f&1){f=Hc()|0;c=M;if(i[b>>0]|0){o=c;p=f;break}OBa(k[m+4>>2]|0);o=c;p=f;break}if(!(i[b>>0]|0))OBa(k[m+4>>2]|0);if(i[n>>0]|0){r=d;return}OBa(k[l+4>>2]|0);r=d;return}while(0);if(i[n>>0]|0)Sc(p|0);OBa(k[l+4>>2]|0);Sc(p|0)}function YP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0;c=r;r=r+32|0;d=c;k[d>>2]=0;e=d+8|0;k[e>>2]=1;f=d+12|0;i[f>>0]=0;g=d+13|0;i[g>>0]=1;x=0;fb(229,d|0,b|0,c+16|0);b=x;x=0;if(b&1){b=Hc()|0;if(i[g>>0]|0)Sc(b|0);OBa(k[d+4>>2]|0);Sc(b|0)}b=k[e>>2]|0;e=b>>>0>8?8:b;h=a+32|0;j[h>>1]=e;l=k[d+4>>2]|0;m=e&65535;Dyb(a|0,((i[g>>0]|0)==0?l:d)|0,(m>>>0>>0?m:b)<<2|0)|0;b=j[f>>1]|0;f=b&255;m=a+34|0;i[m>>0]=f;d=j[h>>1]|0;if(f<<24>>24!=0&d<<16>>16==1)if(!(k[a>>2]|0)){i[m>>0]=0;n=1}else n=1;else n=d;d=(n&65535)+-1|0;a:do if(!d)o=n;else{f=d;g=n;while(1){if(k[a+(f<<2)>>2]|0){o=g;break a}e=g+-1<<16>>16;j[h>>1]=e;f=(e&65535)+-1|0;if(!f){o=e;break}else g=e}}while(0);if(o<<16>>16==1?(k[a>>2]|0)==0:0)i[m>>0]=0;if((b&65535)>=256){r=c;return}OBa(l);r=c;return}function ZP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=k[b>>2]|0;f=k[b+4>>2]|0;k[d>>2]=0;k[d+8>>2]=1;i[d+12>>0]=0;b=d+13|0;i[b>>0]=1;g=i[e+12>>0]|0;h=i[f+12>>0]|0;x=0;nb(110,a|0,e|0,f|0,d|0);f=x;x=0;if(f&1){f=Hc()|0;if(i[b>>0]|0)Sc(f|0);OBa(k[d+4>>2]|0);Sc(f|0)}f=g<<24>>24!=0^h<<24>>24!=0;h=a+12|0;i[h>>0]=f&1;if((f?(k[a+8>>2]|0)==1:0)?(k[((i[a+13>>0]|0)==0?k[a+4>>2]|0:a)>>2]|0)==0:0)i[h>>0]=0;if(i[b>>0]|0){r=c;return}OBa(k[d+4>>2]|0);r=c;return}function _P(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27760;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function $P(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27760;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function aQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=27760;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function bQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=27760;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function cQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function dQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function eQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+48|0;d=c;e=b+8|0;f=(lF(e)|0)+4|0;g=k[f>>2]|0;if((k[g+8>>2]|0)==0?(k[g+40>>2]|0)==1:0){k[d>>2]=0;k[d+32>>2]=1}else{g=(lF(b+80|0)|0)+4|0;b=(k[g>>2]|0)+8|0;g=(lF(e)|0)+4|0;hQ(d,b,(k[g>>2]|0)+8|0)}k[a>>2]=2;i[a+4>>0]=1;g=a+8|0;b=d;d=g+40|0;do{k[g>>2]=k[b>>2];g=g+4|0;b=b+4|0}while((g|0)<(d|0));b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;r=c;return}function fQ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==227785?a+8|0:0)|0}function gQ(a){a=a|0;return 4248}function hQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+64|0;e=d+57|0;f=d+56|0;g=d+32|0;h=d+48|0;j=d+16|0;l=d;k[j>>2]=0;m=j+8|0;k[m>>2]=1;n=j+12|0;i[n>>0]=0;o=j+13|0;i[o>>0]=1;p=k[b+32>>2]|0;q=p>>>0>134217728;s=q?134217728:p;if(s>>>0>2){t=s>>>0>8?s:8;u=KBa(t<<2)|0;k[u>>2]=k[j>>2];i[o>>0]=0;k[m>>2]=s;k[j>>2]=t;k[j+4>>2]=u;v=u}else{k[m>>2]=s;v=j}Dyb(v|0,b|0,(q?536870912:p<<2)|0)|0;i[n>>0]=0;if(!(i[o>>0]|0))w=k[j+4>>2]|0;else w=j;n=(k[m>>2]|0)+-1|0;a:do if(n){p=n;do{if(k[w+(p<<2)>>2]|0)break a;k[m>>2]=p;p=p+-1|0}while((p|0)!=0)}while(0);k[l>>2]=0;m=l+8|0;k[m>>2]=1;w=l+12|0;i[w>>0]=0;n=l+13|0;i[n>>0]=1;p=k[c+32>>2]|0;q=p>>>0>134217728;b=q?134217728:p;do if(b>>>0>2){v=b>>>0>8?b:8;x=0;s=Ba(563,v<<2|0)|0;u=x;x=0;if(u&1){u=Hc()|0;y=M;z=u;break}else{k[s>>2]=k[l>>2];i[n>>0]=0;k[m>>2]=b;k[l>>2]=v;k[l+4>>2]=s;A=s;B=13;break}}else{k[m>>2]=b;A=l;B=13}while(0);do if((B|0)==13){Dyb(A|0,c|0,(q?536870912:p<<2)|0)|0;i[w>>0]=0;if(!(i[n>>0]|0))C=k[l+4>>2]|0;else C=l;b=(k[m>>2]|0)+-1|0;b:do if(b){s=b;do{if(k[C+(s<<2)>>2]|0)break b;k[m>>2]=s;s=s+-1|0}while((s|0)!=0)}while(0);k[h>>2]=j;k[h+4>>2]=l;k[a>>2]=0;k[a+32>>2]=1;k[g>>2]=0;k[g+8>>2]=1;i[g+12>>0]=0;b=g+13|0;i[b>>0]=1;x=0;fb(229,g|0,h|0,e|0);s=x;x=0;if(s&1){s=Hc()|0;v=M;if(!(i[b>>0]|0))OBa(k[g+4>>2]|0);if(i[n>>0]|0){y=v;z=s;break}OBa(k[l+4>>2]|0);y=v;z=s;break}NB(a,g,e,f);if(!(i[b>>0]|0))OBa(k[g+4>>2]|0);if(!(i[n>>0]|0))OBa(k[l+4>>2]|0);if(i[o>>0]|0){r=d;return}OBa(k[j+4>>2]|0);r=d;return}while(0);if(i[o>>0]|0)Sc(z|0);OBa(k[j+4>>2]|0);Sc(z|0)}function iQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27716;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function jQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27716;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function kQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=27716;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function lQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=27716;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function mQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function nQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function oQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+40|0;e=c;f=(lF(b+8|0)|0)+4|0;g=k[f>>2]|0;f=(lF(b+80|0)|0)+4|0;b=k[f>>2]|0;k[d>>2]=0;k[d+32>>2]=1;qC(d,g+8|0,b+8|0);b=e;g=d;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));k[a>>2]=2;i[a+4>>0]=1;b=a+8|0;g=e;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));g=a+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;r=c;return}function pQ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==227890?a+8|0:0)|0}function qQ(a){a=a|0;return 4272}function rQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27672;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function sQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27672;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function tQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=27672;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function uQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=27672;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function vQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function wQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function xQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+40|0;e=c;f=(lF(b+8|0)|0)+4|0;g=k[f>>2]|0;f=(lF(b+80|0)|0)+4|0;b=k[f>>2]|0;k[d>>2]=0;k[d+32>>2]=1;sC(d,g+8|0,b+8|0);b=e;g=d;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));k[a>>2]=2;i[a+4>>0]=1;b=a+8|0;g=e;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));g=a+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;r=c;return}function yQ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==227995?a+8|0:0)|0}function zQ(a){a=a|0;return 4296}function AQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27628;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function BQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;k[a>>2]=27628;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function CQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;b=r;r=r+16|0;c=b+1|0;d=b;e=KBa(152)|0;f=a+8|0;k[e>>2]=27628;g=e+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=e+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=e+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;OBa(e);Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=e+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=e+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=e+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,e+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=e+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=b;return e|0}b=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=b;OBa(e);Sc(n|0)}g=e+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=e+64|0;o=h;do{h=o+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,p,h);o=k[g>>2]|0}while((o|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=b;OBa(e);Sc(n|0);return 0}function DQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+16|0;d=c+1|0;e=c;f=a+8|0;k[b>>2]=27628;g=b+8|0;k[g>>2]=k[f>>2];i[g+4>>0]=i[f+4>>0]|0;f=b+16|0;g=a+16|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));j=b+56|0;x=0;xa(712,j|0,a+56|0);l=x;x=0;if(l&1){l=Hc()|0;m=M;n=l;Sc(n|0)}l=a+68|0;o=k[l+4>>2]|0;p=b+68|0;k[p>>2]=k[l>>2];k[p+4>>2]=o;o=b+80|0;p=a+80|0;k[o>>2]=k[p>>2];i[o+4>>0]=i[p+4>>0]|0;f=b+88|0;g=a+88|0;h=f+40|0;do{k[f>>2]=k[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));x=0;xa(712,b+128|0,a+128|0);g=x;x=0;if(!(g&1)){g=a+140|0;a=k[g+4>>2]|0;f=b+140|0;k[f>>2]=k[g>>2];k[f+4>>2]=a;r=c;return}c=Hc()|0;a=M;f=k[j>>2]|0;if(!f){m=a;n=c;Sc(n|0)}g=b+60|0;h=k[g>>2]|0;if((h|0)==(f|0))q=f;else{p=b+64|0;b=h;do{h=b+-72|0;k[g>>2]=h;i[d>>0]=i[e>>0]|0;uF(d,p,h);b=k[g>>2]|0}while((b|0)!=(f|0));q=k[j>>2]|0}OBa(q);m=a;n=c;Sc(n|0)}function EQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;a=m;do{m=a+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);a=k[f>>2]|0}while((a|0)!=(e|0));n=k[j>>2]|0}OBa(n);r=b;return}function FQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;b=r;r=r+16|0;c=b+1|0;d=b;e=a+128|0;f=k[e>>2]|0;if(f){g=a+132|0;h=k[g>>2]|0;if((h|0)==(f|0))j=f;else{l=a+136|0;m=h;do{h=m+-72|0;k[g>>2]=h;i[c>>0]=i[d>>0]|0;uF(c,l,h);m=k[g>>2]|0}while((m|0)!=(f|0));j=k[e>>2]|0}OBa(j)}j=a+56|0;e=k[j>>2]|0;if(!e){OBa(a);r=b;return}f=a+60|0;m=k[f>>2]|0;if((m|0)==(e|0))n=e;else{g=a+64|0;l=m;do{m=l+-72|0;k[f>>2]=m;i[c>>0]=i[d>>0]|0;uF(c,g,m);l=k[f>>2]|0}while((l|0)!=(e|0));n=k[j>>2]|0}OBa(n);OBa(a);r=b;return}function GQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+40|0;e=c;f=(lF(b+8|0)|0)+4|0;g=k[f>>2]|0;f=(lF(b+80|0)|0)+4|0;b=k[f>>2]|0;k[d>>2]=0;k[d+32>>2]=1;uC(d,g+8|0,b+8|0);b=e;g=d;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));k[a>>2]=2;i[a+4>>0]=1;b=a+8|0;g=e;d=b+40|0;do{k[b>>2]=k[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(d|0));g=a+48|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;r=c;return}function HQ(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==228100?a+8|0:0)|0}function IQ(a){a=a|0;return 4320}function JQ(a){a=a|0;var b=0;k[a>>2]=27576;b=k[a+88>>2]|0;if(b)j0a(b);b=k[a+76>>2]|0;if(!b){c0a(a);return}j0a(b);c0a(a);return}function KQ(a){a=a|0;var b=0;k[a>>2]=27576;b=k[a+88>>2]|0;if(b)j0a(b);b=k[a+76>>2]|0;if(!b){c0a(a);OBa(a);return}j0a(b);c0a(a);OBa(a);return}function LQ(a){a=a|0;var b=0;b=k[a+88>>2]|0;if(b)j0a(b);b=k[a+76>>2]|0;if(!b)return;j0a(b);return}function MQ(a){a=a|0;OBa(a);return}function NQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+80|0;d=c+72|0;e=c+40|0;f=c;g=k[a>>2]|0;h=a+4|0;if(g>>>0>=(k[h>>2]|0)>>>0){r=c;return}a=f+32|0;j=b+16|0;b=e+12|0;m=g;while(1){g=i[m>>0]|0;n=k[7625]|0;a:do if(n){o=n;while(1){p=i[o+16>>0]|0;if((p&255)>(g&255))q=o;else{if((p&255)>=(g&255))break;q=o+4|0}o=k[q>>2]|0;if(!o){s=10;break a}}PQ(e,g);o=k[b>>2]|0;K2a(e);k[f>>2]=0;k[a>>2]=1;if(!o)t=m;else{p=m;u=0;do{HB(f,8,0);p=p+1|0;if(p>>>0<(k[h>>2]|0)>>>0)k[f>>2]=k[f>>2]|(l[p>>0]|0);u=u+1|0}while((u|0)!=(o|0));t=m+o|0}}else s=10;while(0);if((s|0)==10){s=0;k[f>>2]=0;k[a>>2]=1;t=m}i[d>>0]=g;n=k[j>>2]|0;if(!n){s=14;break}jg[k[(k[n>>2]|0)+24>>2]&511](n,d,f);m=t+1|0;if(m>>>0>=(k[h>>2]|0)>>>0){s=3;break}}if((s|0)==3){r=c;return}else if((s|0)==14){s=Rd(4)|0;k[s>>2]=26200;Gf(s|0,2216,320)}}function OQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=k[7625]|0;if(!b){c=0;return c|0}else d=b;while(1){b=i[d+16>>0]|0;if((b&255)>(a&255))e=d;else{if((b&255)>=(a&255)){c=1;f=7;break}e=d+4|0}d=k[e>>2]|0;if(!d){c=0;f=7;break}}if((f|0)==7)return c|0;return 0}function PQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+32|0;d=c+16|0;e=c+4|0;f=c;g=k[7625]|0;a:do if(g){h=g;while(1){j=i[h+16>>0]|0;if((j&255)>(b&255)){l=k[h>>2]|0;if(!l){m=8;break a}else n=l}else{if((j&255)>=(b&255)){o=h;break}j=k[h+4>>2]|0;if(!j){m=8;break a}else n=j}h=n}if(o){x=0;xa(604,a|0,o+20|0);h=x;x=0;if(h&1)m=13;else{h=a+12|0;j=o+32|0;k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];k[h+12>>2]=k[j+12>>2];k[h+16>>2]=k[j+16>>2];r=c;return}}else m=8}else m=8;while(0);do if((m|0)==8){o=Rd(8)|0;x=0;xa(671,o|0,296399);n=x;x=0;if(n&1){n=Hc(0)|0;Fc(o|0);p=n;break}else{k[o>>2]=47544;x=0;fb(149,o|0,9024,933);x=0;m=13;break}}while(0);if((m|0)==13){m=Hc(0)|0;p=m}me(p|0)|0;k[f>>2]=b&255;x=0;xa(720,e|0,f|0);f=x;x=0;if(f&1){f=Hc()|0;q=M;s=f}else{x=0;f=Fa(86,e|0,0,228281)|0;b=x;x=0;do if(b&1){p=Hc()|0;t=M;u=p}else{k[d>>2]=k[f>>2];k[d+4>>2]=k[f+4>>2];k[d+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;x=0;p=Ta(484,d|0,300168)|0;m=x;x=0;if(m&1){m=Hc()|0;o=M;K2a(d);t=o;u=m;break};k[a>>2]=k[p>>2];k[a+4>>2]=k[p+4>>2];k[a+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;p=a+12|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;i[p+12>>0]=0;k[a+28>>2]=8;K2a(d);K2a(e);ge();r=c;return}while(0);K2a(e);q=t;s=u}x=0;hb(45);u=x;x=0;if(u&1){u=Hc(0)|0;Fg(u)}else Sc(s|0)}function QQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+192|0;d=c+168|0;e=c+24|0;f=c;g=e+64|0;h=e+8|0;k[h>>2]=26684;i=e+12|0;k[e>>2]=26724;k[g>>2]=26744;k[e+4>>2]=0;x=0;xa(582,e+64|0,i|0);j=x;x=0;if(j&1){j=Hc()|0;l=M;m=j;mab(g);Sc(m|0)}k[e+136>>2]=0;k[e+140>>2]=-1;k[e>>2]=26664;k[e+64>>2]=26704;k[h>>2]=26684;x=0;va(1449,i|0);h=x;x=0;do if(h&1){j=Hc()|0;n=M;o=j}else{k[i>>2]=20392;j=e+44|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+60>>2]=24;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,i|0,d|0);p=x;x=0;if(p&1){p=Hc()|0;q=M;K2a(d);K2a(j);obb(i);n=q;o=p;break}K2a(d);p=f+16|0;k[p>>2]=f;k[f>>2]=30516;k[f+4>>2]=e;x=0;xa(721,b|0,f|0);q=x;x=0;do if(q&1){s=Hc()|0;t=M;u=k[p>>2]|0;if((u|0)==(f|0)){Sf[k[(k[u>>2]|0)+16>>2]&2047](u);v=t;w=s;break}if(!u){v=t;w=s}else{Sf[k[(k[u>>2]|0)+20>>2]&2047](u);v=t;w=s}}else{s=k[p>>2]|0;if((s|0)!=(f|0)){if(s)Sf[k[(k[s>>2]|0)+20>>2]&2047](s)}else Sf[k[(k[f>>2]|0)+16>>2]&2047](f);x=0;xa(584,a|0,i|0);s=x;x=0;if(s&1){s=Hc()|0;v=M;w=s;break}else{k[e>>2]=26664;k[g>>2]=26704;k[e+8>>2]=26684;k[i>>2]=20392;K2a(j);obb(i);mab(g);r=c;return}}while(0);k[e>>2]=26664;k[g>>2]=26704;k[e+8>>2]=26684;k[i>>2]=20392;K2a(j);obb(i);mab(g);Sc(w|0)}while(0);l=n;m=o;mab(g);Sc(m|0)}function RQ(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=r;r=r+2096|0;b=a+2084|0;c=a+2080|0;d=a;k[7638]=0;k[7639]=0;k[7640]=0;x=0;fb(140,d|0,228908,4);e=x;x=0;do if(!(e&1)){i[d+12>>0]=0;f=d+16|0;x=0;fb(140,f|0,228913,3);g=x;x=0;if(!(g&1)){i[d+28>>0]=1;g=d+32|0;x=0;fb(140,g|0,228917,3);h=x;x=0;if(!(h&1)){i[d+44>>0]=3;h=d+48|0;x=0;fb(140,h|0,228921,3);j=x;x=0;if(!(j&1)){i[d+60>>0]=2;j=d+64|0;x=0;fb(140,j|0,228925,3);l=x;x=0;if(!(l&1)){i[d+76>>0]=4;l=d+80|0;x=0;fb(140,l|0,228929,4);m=x;x=0;if(!(m&1)){i[d+92>>0]=5;m=d+96|0;x=0;fb(140,m|0,228934,3);n=x;x=0;if(!(n&1)){i[d+108>>0]=6;n=d+112|0;x=0;fb(140,n|0,228938,4);o=x;x=0;if(!(o&1)){i[d+124>>0]=7;o=d+128|0;x=0;fb(140,o|0,228943,3);p=x;x=0;if(!(p&1)){i[d+140>>0]=10;p=d+144|0;x=0;fb(140,p|0,228947,3);q=x;x=0;if(!(q&1)){i[d+156>>0]=25;q=d+160|0;x=0;fb(140,q|0,228951,2);s=x;x=0;if(!(s&1)){i[d+172>>0]=16;s=d+176|0;x=0;fb(140,s|0,228954,2);t=x;x=0;if(!(t&1)){i[d+188>>0]=17;t=d+192|0;x=0;fb(140,t|0,228957,3);u=x;x=0;if(!(u&1)){i[d+204>>0]=18;u=d+208|0;x=0;fb(140,u|0,228961,3);v=x;x=0;if(!(v&1)){i[d+220>>0]=19;v=d+224|0;x=0;fb(140,v|0,228965,2);w=x;x=0;if(!(w&1)){i[d+236>>0]=20;w=d+240|0;x=0;fb(140,w|0,228968,6);y=x;x=0;if(!(y&1)){i[d+252>>0]=21;y=d+256|0;x=0;fb(140,y|0,228975,3);z=x;x=0;if(!(z&1)){i[d+268>>0]=22;z=d+272|0;x=0;fb(140,z|0,228979,2);A=x;x=0;if(!(A&1)){i[d+284>>0]=23;A=d+288|0;x=0;fb(140,A|0,228982,3);B=x;x=0;if(B&1)C=A;else{i[d+300>>0]=24;A=d+304|0;x=0;fb(140,A|0,228986,4);B=x;x=0;if(B&1){C=A;break}i[d+316>>0]=26;A=d+320|0;x=0;fb(140,A|0,228991,6);B=x;x=0;if(B&1){C=A;break}i[d+332>>0]=8;A=d+336|0;x=0;fb(140,A|0,228998,6);B=x;x=0;if(B&1){C=A;break}i[d+348>>0]=9;A=d+352|0;x=0;fb(140,A|0,229005,10);B=x;x=0;if(B&1){C=A;break}i[d+364>>0]=11;A=d+368|0;x=0;fb(140,A|0,229016,4);B=x;x=0;if(B&1){C=A;break}i[d+380>>0]=32;A=d+384|0;x=0;fb(140,A|0,229021,7);B=x;x=0;if(B&1){C=A;break}i[d+396>>0]=48;A=d+400|0;x=0;fb(140,A|0,229029,7);B=x;x=0;if(B&1){C=A;break}i[d+412>>0]=49;A=d+416|0;x=0;fb(140,A|0,229037,6);B=x;x=0;if(B&1){C=A;break}i[d+428>>0]=50;A=d+432|0;x=0;fb(140,A|0,229044,6);B=x;x=0;if(B&1){C=A;break}i[d+444>>0]=51;A=d+448|0;x=0;fb(140,A|0,229051,9);B=x;x=0;if(B&1){C=A;break}i[d+460>>0]=52;A=d+464|0;x=0;fb(140,A|0,229061,12);B=x;x=0;if(B&1){C=A;break}i[d+476>>0]=53;A=d+480|0;x=0;fb(140,A|0,229074,12);B=x;x=0;if(B&1){C=A;break}i[d+492>>0]=54;A=d+496|0;x=0;fb(140,A|0,229087,12);B=x;x=0;if(B&1){C=A;break}i[d+508>>0]=55;A=d+512|0;x=0;fb(140,A|0,229100,8);B=x;x=0;if(B&1){C=A;break}i[d+524>>0]=56;A=d+528|0;x=0;fb(140,A|0,229109,8);B=x;x=0;if(B&1){C=A;break}i[d+540>>0]=57;A=d+544|0;x=0;fb(140,A|0,229118,8);B=x;x=0;if(B&1){C=A;break}i[d+556>>0]=58;A=d+560|0;x=0;fb(140,A|0,229127,11);B=x;x=0;if(B&1){C=A;break}i[d+572>>0]=59;A=d+576|0;x=0;fb(140,A|0,229139,11);B=x;x=0;if(B&1){C=A;break}i[d+588>>0]=60;A=d+592|0;x=0;fb(140,A|0,229151,9);B=x;x=0;if(B&1){C=A;break}i[d+604>>0]=64;A=d+608|0;x=0;fb(140,A|0,229161,8);B=x;x=0;if(B&1){C=A;break}i[d+620>>0]=65;A=d+624|0;x=0;fb(140,A|0,229170,9);B=x;x=0;if(B&1){C=A;break}i[d+636>>0]=66;A=d+640|0;x=0;fb(140,A|0,229180,6);B=x;x=0;if(B&1){C=A;break}i[d+652>>0]=67;A=d+656|0;x=0;fb(140,A|0,229187,10);B=x;x=0;if(B&1){C=A;break}i[d+668>>0]=68;A=d+672|0;x=0;fb(140,A|0,229198,8);B=x;x=0;if(B&1){C=A;break}i[d+684>>0]=69;A=d+688|0;x=0;fb(140,A|0,229207,3);B=x;x=0;if(B&1){C=A;break}i[d+700>>0]=80;A=d+704|0;x=0;fb(140,A|0,229211,5);B=x;x=0;if(B&1){C=A;break}i[d+716>>0]=81;A=d+720|0;x=0;fb(140,A|0,229217,6);B=x;x=0;if(B&1){C=A;break}i[d+732>>0]=82;A=d+736|0;x=0;fb(140,A|0,229224,7);B=x;x=0;if(B&1){C=A;break}i[d+748>>0]=83;A=d+752|0;x=0;fb(140,A|0,229232,5);B=x;x=0;if(B&1){C=A;break}i[d+764>>0]=84;A=d+768|0;x=0;fb(140,A|0,229238,6);B=x;x=0;if(B&1){C=A;break}i[d+780>>0]=85;A=d+784|0;x=0;fb(140,A|0,229245,4);B=x;x=0;if(B&1){C=A;break}i[d+796>>0]=86;A=d+800|0;x=0;fb(140,A|0,229250,5);B=x;x=0;if(B&1){C=A;break}i[d+812>>0]=87;A=d+816|0;x=0;fb(140,A|0,229256,2);B=x;x=0;if(B&1){C=A;break}i[d+828>>0]=88;A=d+832|0;x=0;fb(140,A|0,229259,5);B=x;x=0;if(B&1){C=A;break}i[d+844>>0]=89;A=d+848|0;x=0;fb(140,A|0,229265,3);B=x;x=0;if(B&1){C=A;break}i[d+860>>0]=90;A=d+864|0;x=0;fb(140,A|0,229269,8);B=x;x=0;if(B&1){C=A;break}i[d+876>>0]=91;A=d+880|0;x=0;fb(140,A|0,229278,5);B=x;x=0;if(B&1){C=A;break}i[d+892>>0]=96;A=d+896|0;x=0;fb(140,A|0,229284,5);B=x;x=0;if(B&1){C=A;break}i[d+908>>0]=97;A=d+912|0;x=0;fb(140,A|0,229290,5);B=x;x=0;if(B&1){C=A;break}i[d+924>>0]=98;A=d+928|0;x=0;fb(140,A|0,229296,5);B=x;x=0;if(B&1){C=A;break}i[d+940>>0]=99;A=d+944|0;x=0;fb(140,A|0,229302,5);B=x;x=0;if(B&1){C=A;break}i[d+956>>0]=100;A=d+960|0;x=0;fb(140,A|0,229308,5);B=x;x=0;if(B&1){C=A;break}i[d+972>>0]=101;A=d+976|0;x=0;fb(140,A|0,229314,5);B=x;x=0;if(B&1){C=A;break}i[d+988>>0]=102;A=d+992|0;x=0;fb(140,A|0,229320,5);B=x;x=0;if(B&1){C=A;break}i[d+1004>>0]=103;A=d+1008|0;x=0;fb(140,A|0,229326,5);B=x;x=0;if(B&1){C=A;break}i[d+1020>>0]=104;A=d+1024|0;x=0;fb(140,A|0,229332,6);B=x;x=0;if(B&1){C=A;break}i[d+1036>>0]=105;A=d+1040|0;x=0;fb(140,A|0,229339,6);B=x;x=0;if(B&1){C=A;break}i[d+1052>>0]=106;A=d+1056|0;x=0;fb(140,A|0,229346,6);B=x;x=0;if(B&1){C=A;break}i[d+1068>>0]=107;A=d+1072|0;x=0;fb(140,A|0,229353,6);B=x;x=0;if(B&1){C=A;break}i[d+1084>>0]=108;A=d+1088|0;x=0;fb(140,A|0,229360,6);B=x;x=0;if(B&1){C=A;break}i[d+1100>>0]=109;A=d+1104|0;x=0;fb(140,A|0,229367,6);B=x;x=0;if(B&1){C=A;break}i[d+1116>>0]=110;A=d+1120|0;x=0;fb(140,A|0,229374,6);B=x;x=0;if(B&1){C=A;break}i[d+1132>>0]=111;A=d+1136|0;x=0;fb(140,A|0,229381,6);B=x;x=0;if(B&1){C=A;break}i[d+1148>>0]=112;A=d+1152|0;x=0;fb(140,A|0,229388,6);B=x;x=0;if(B&1){C=A;break}i[d+1164>>0]=113;A=d+1168|0;x=0;fb(140,A|0,229395,6);B=x;x=0;if(B&1){C=A;break}i[d+1180>>0]=114;A=d+1184|0;x=0;fb(140,A|0,229402,6);B=x;x=0;if(B&1){C=A;break}i[d+1196>>0]=115;A=d+1200|0;x=0;fb(140,A|0,229409,6);B=x;x=0;if(B&1){C=A;break}i[d+1212>>0]=116;A=d+1216|0;x=0;fb(140,A|0,229416,6);B=x;x=0;if(B&1){C=A;break}i[d+1228>>0]=117;A=d+1232|0;x=0;fb(140,A|0,229423,6);B=x;x=0;if(B&1){C=A;break}i[d+1244>>0]=118;A=d+1248|0;x=0;fb(140,A|0,229430,6);B=x;x=0;if(B&1){C=A;break}i[d+1260>>0]=119;A=d+1264|0;x=0;fb(140,A|0,229437,6);B=x;x=0;if(B&1){C=A;break}i[d+1276>>0]=120;A=d+1280|0;x=0;fb(140,A|0,229444,6);B=x;x=0;if(B&1){C=A;break}i[d+1292>>0]=121;A=d+1296|0;x=0;fb(140,A|0,229451,6);B=x;x=0;if(B&1){C=A;break}i[d+1308>>0]=122;A=d+1312|0;x=0;fb(140,A|0,229458,6);B=x;x=0;if(B&1){C=A;break}i[d+1324>>0]=123;A=d+1328|0;x=0;fb(140,A|0,229465,6);B=x;x=0;if(B&1){C=A;break}i[d+1340>>0]=124;A=d+1344|0;x=0;fb(140,A|0,229472,6);B=x;x=0;if(B&1){C=A;break}i[d+1356>>0]=125;A=d+1360|0;x=0;fb(140,A|0,229479,6);B=x;x=0;if(B&1){C=A;break}i[d+1372>>0]=126;A=d+1376|0;x=0;fb(140,A|0,229486,6);B=x;x=0;if(B&1){C=A;break}i[d+1388>>0]=127;A=d+1392|0;x=0;fb(140,A|0,229493,4);B=x;x=0;if(B&1){C=A;break}i[d+1404>>0]=-128;A=d+1408|0;x=0;fb(140,A|0,229498,4);B=x;x=0;if(B&1){C=A;break}i[d+1420>>0]=-127;A=d+1424|0;x=0;fb(140,A|0,229503,4);B=x;x=0;if(B&1){C=A;break}i[d+1436>>0]=-126;A=d+1440|0;x=0;fb(140,A|0,229508,4);B=x;x=0;if(B&1){C=A;break}i[d+1452>>0]=-125;A=d+1456|0;x=0;fb(140,A|0,229513,4);B=x;x=0;if(B&1){C=A;break}i[d+1468>>0]=-124;A=d+1472|0;x=0;fb(140,A|0,229518,4);B=x;x=0;if(B&1){C=A;break}i[d+1484>>0]=-123;A=d+1488|0;x=0;fb(140,A|0,229523,4);B=x;x=0;if(B&1){C=A;break}i[d+1500>>0]=-122;A=d+1504|0;x=0;fb(140,A|0,229528,4);B=x;x=0;if(B&1){C=A;break}i[d+1516>>0]=-121;A=d+1520|0;x=0;fb(140,A|0,229533,4);B=x;x=0;if(B&1){C=A;break}i[d+1532>>0]=-120;A=d+1536|0;x=0;fb(140,A|0,229538,5);B=x;x=0;if(B&1){C=A;break}i[d+1548>>0]=-119;A=d+1552|0;x=0;fb(140,A|0,229544,5);B=x;x=0;if(B&1){C=A;break}i[d+1564>>0]=-118;A=d+1568|0;x=0;fb(140,A|0,229550,5);B=x;x=0;if(B&1){C=A;break}i[d+1580>>0]=-117;A=d+1584|0;x=0;fb(140,A|0,229556,5);B=x;x=0;if(B&1){C=A;break}i[d+1596>>0]=-116;A=d+1600|0;x=0;fb(140,A|0,229562,5);B=x;x=0;if(B&1){C=A;break}i[d+1612>>0]=-115;A=d+1616|0;x=0;fb(140,A|0,229568,5);B=x;x=0;if(B&1){C=A;break}i[d+1628>>0]=-114;A=d+1632|0;x=0;fb(140,A|0,229574,5);B=x;x=0;if(B&1){C=A;break}i[d+1644>>0]=-113;A=d+1648|0;x=0;fb(140,A|0,229580,5);B=x;x=0;if(B&1){C=A;break}i[d+1660>>0]=-112;A=d+1664|0;x=0;fb(140,A|0,229586,5);B=x;x=0;if(B&1){C=A;break}i[d+1676>>0]=-111;A=d+1680|0;x=0;fb(140,A|0,229592,5);B=x;x=0;if(B&1){C=A;break}i[d+1692>>0]=-110;A=d+1696|0;x=0;fb(140,A|0,229598,5);B=x;x=0;if(B&1){C=A;break}i[d+1708>>0]=-109;A=d+1712|0;x=0;fb(140,A|0,229604,5);B=x;x=0;if(B&1){C=A;break}i[d+1724>>0]=-108;A=d+1728|0;x=0;fb(140,A|0,229610,5);B=x;x=0;if(B&1){C=A;break}i[d+1740>>0]=-107;A=d+1744|0;x=0;fb(140,A|0,229616,5);B=x;x=0;if(B&1){C=A;break}i[d+1756>>0]=-106;A=d+1760|0;x=0;fb(140,A|0,229622,5);B=x;x=0;if(B&1){C=A;break}i[d+1772>>0]=-105;A=d+1776|0;x=0;fb(140,A|0,229628,5);B=x;x=0;if(B&1){C=A;break}i[d+1788>>0]=-104;A=d+1792|0;x=0;fb(140,A|0,229634,6);B=x;x=0;if(B&1){C=A;break}i[d+1804>>0]=-103;A=d+1808|0;x=0;fb(140,A|0,229641,6);B=x;x=0;if(B&1){C=A;break}i[d+1820>>0]=-102;A=d+1824|0;x=0;fb(140,A|0,229648,6);B=x;x=0;if(B&1){C=A;break}i[d+1836>>0]=-101;A=d+1840|0;x=0;fb(140,A|0,229655,6);B=x;x=0;if(B&1){C=A;break}i[d+1852>>0]=-100;A=d+1856|0;x=0;fb(140,A|0,229662,6);B=x;x=0;if(B&1){C=A;break}i[d+1868>>0]=-99;A=d+1872|0;x=0;fb(140,A|0,229669,6);B=x;x=0;if(B&1){C=A;break}i[d+1884>>0]=-98;A=d+1888|0;x=0;fb(140,A|0,229676,6);B=x;x=0;if(B&1){C=A;break}i[d+1900>>0]=-97;A=d+1904|0;x=0;fb(140,A|0,229683,4);B=x;x=0;if(B&1){C=A;break}i[d+1916>>0]=-96;A=d+1920|0;x=0;fb(140,A|0,229688,4);B=x;x=0;if(B&1){C=A;break}i[d+1932>>0]=-95;A=d+1936|0;x=0;fb(140,A|0,229693,4);B=x;x=0;if(B&1){C=A;break}i[d+1948>>0]=-94;A=d+1952|0;x=0;fb(140,A|0,229698,4);B=x;x=0;if(B&1){C=A;break}i[d+1964>>0]=-93;A=d+1968|0;x=0;fb(140,A|0,229703,4);B=x;x=0;if(B&1){C=A;break}i[d+1980>>0]=-92;A=d+1984|0;x=0;fb(140,A|0,229708,6);B=x;x=0;if(B&1){C=A;break}i[d+1996>>0]=-16;A=d+2e3|0;x=0;fb(140,A|0,229715,4);B=x;x=0;if(B&1){C=A;break}i[d+2012>>0]=-15;A=d+2016|0;x=0;fb(140,A|0,229720,8);B=x;x=0;if(B&1){C=A;break}i[d+2028>>0]=-14;A=d+2032|0;x=0;fb(140,A|0,229729,6);B=x;x=0;if(B&1){C=A;break}i[d+2044>>0]=-13;A=d+2048|0;x=0;fb(140,A|0,229736,12);B=x;x=0;if(B&1){C=A;break}i[d+2060>>0]=-12;A=d+2064|0;x=0;fb(140,A|0,229749,7);B=x;x=0;if(B&1){C=A;break}i[d+2076>>0]=-1;k[7622]=0;k[7623]=0;k[7621]=30488;A=d+2080|0;B=d;while(1){k[c>>2]=30488;x=0;k[b>>2]=k[c>>2];Fa(126,30484,b|0,B|0)|0;D=x;x=0;if(D&1)break;B=B+16|0;if((B|0)==(A|0)){E=A;F=134;break}}if((F|0)==134){while(1){F=0;E=E+-16|0;K2a(E);if((E|0)==(d|0))break;else F=134}cR();r=a;return}B=Hc()|0;D=M;bR(30484,k[7622]|0);G=A;do{G=G+-16|0;K2a(G)}while((G|0)!=(d|0));H=D;I=B;Sc(I|0)}}else C=z}else C=y}else C=w}else C=v}else C=u}else C=t}else C=s}else C=q}else C=p}else C=o}else C=n}else C=m}else C=l}else C=j}else C=h}else C=g}else C=f}else C=d;while(0);a=Hc()|0;F=M;if((d|0)==(C|0)){H=F;I=a;Sc(I|0)}else J=C;do{J=J+-16|0;K2a(J)}while((J|0)!=(d|0));H=F;I=a;Sc(I|0)}function SQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+160|0;d=c+136|0;e=c;f=e+56|0;g=e+4|0;k[e>>2]=20356;k[f>>2]=20376;x=0;xa(582,e+56|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;mab(f);Sc(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,g|0);h=x;x=0;do if(!(h&1)){k[g>>2]=20392;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,g|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);K2a(l);obb(g);o=n;p=m;break}K2a(d);x=0;Ta(543,e|0,k[b>>2]|0)|0;m=x;x=0;if(m&1){q=Hc()|0;s=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);Sc(q|0)}x=0;xa(584,a|0,g|0);m=x;x=0;if(m&1){q=Hc()|0;s=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);Sc(q|0)}else{k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);r=c;return}}else{l=Hc()|0;o=M;p=l}while(0);i=o;j=p;mab(f);Sc(j|0)}function TQ(a){a=a|0;return}function UQ(a){a=a|0;OBa(a);return}function VQ(a){a=a|0;var b=0;b=KBa(8)|0;k[b>>2]=30516;k[b+4>>2]=k[a+4>>2];return b|0}function WQ(a,b){a=a|0;b=b|0;k[b>>2]=30516;k[b+4>>2]=k[a+4>>2];return}function XQ(a){a=a|0;return}function YQ(a){a=a|0;OBa(a);return}function ZQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d;f=a+4|0;a=i[b>>0]|0;b=k[7625]|0;a:do if(b){g=b;while(1){h=i[g+16>>0]|0;if((h&255)>(a&255))j=g;else{if((h&255)>=(a&255))break;j=g+4|0}g=k[j>>2]|0;if(!g)break a}PQ(e,a);g=i[e>>0]|0;h=(g&1)==0;x=0;l=Fa(92,(k[f>>2]|0)+8|0,(h?e+1|0:k[e+8>>2]|0)|0,(h?(g&255)>>>1:k[e+4>>2]|0)|0)|0;g=x;x=0;do if(!(g&1)?(x=0,Fa(92,l|0,324196,1)|0,h=x,x=0,!(h&1)):0){if(k[e+12>>2]|0){x=0;h=Fa(92,(k[f>>2]|0)+8|0,257534,2)|0;m=x;x=0;if(m&1)break;m=h+(k[(k[h>>2]|0)+-12>>2]|0)+4|0;k[m>>2]=k[m>>2]&-75|8;x=0;m=Ta(541,h|0,c|0)|0;h=x;x=0;if(h&1)break;x=0;Fa(92,m|0,324196,1)|0;m=x;x=0;if(m&1)break}K2a(e);r=d;return}while(0);l=Hc()|0;K2a(e);Sc(l|0)}while(0);e=ei((k[f>>2]|0)+8|0,257534,2)|0;f=e+(k[(k[e>>2]|0)+-12>>2]|0)+4|0;k[f>>2]=k[f>>2]&-75|8;ei(efb(e,a&255)|0,324196,1)|0;r=d;return}function _Q(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==228304?a+4|0:0)|0}function $Q(a){a=a|0;return 4360}function aR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(32)|0;j=h+16|0;x=0;xa(604,j|0,c|0);l=x;x=0;if(l&1){l=Hc()|0;OBa(h);Sc(l|0)}i[h+28>>0]=i[c+12>>0]|0;k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=gR(a,e,f,j)|0;j=k[g>>2]|0;if(!j){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)m=h;else{k[a>>2]=e;m=k[g>>2]|0}ui(k[a+4>>2]|0,m);m=a+8|0;k[m>>2]=(k[m>>2]|0)+1;n=h;r=d;return n|0}else{if((j|0)==(h|0)){n=j;r=d;return n|0}K2a(h+16|0);OBa(h);n=j;r=d;return n|0}return 0}function bR(a,b){a=a|0;b=b|0;if(!b)return;else{bR(a,k[b>>2]|0);bR(a,k[b+4>>2]|0);K2a(b+16|0);OBa(b);return}}function cR(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,_j=0,$j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Hk=0,Ik=0,Jk=0,Kk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,_k=0,$k=0,al=0,bl=0,cl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,zl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Pl=0,Ql=0,Rl=0,Sl=0,Tl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,_l=0,$l=0,am=0,bm=0,cm=0,dm=0,em=0,fm=0,gm=0,hm=0,im=0,jm=0,km=0,lm=0,mm=0,nm=0,om=0,pm=0,qm=0,rm=0,sm=0,tm=0,um=0,vm=0,wm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Jm=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,_m=0,$m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,_n=0,$n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Vo=0,Wo=0,Xo=0,Yo=0,Zo=0,_o=0,$o=0,ap=0,bp=0,cp=0,dp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,lp=0,mp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,up=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Ep=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Lp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Vp=0,Wp=0,Xp=0,Yp=0,Zp=0,_p=0,$p=0,aq=0,bq=0,cq=0,dq=0,eq=0,fq=0,gq=0,hq=0,iq=0,jq=0,kq=0,lq=0,mq=0,nq=0,oq=0,pq=0,qq=0,rq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Aq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Hq=0,Iq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,_q=0,$q=0,ar=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,lr=0,mr=0,nr=0,or=0,pr=0,qr=0,rr=0,sr=0,tr=0,ur=0,vr=0,wr=0,xr=0,yr=0,zr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Fr=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Qr=0,Rr=0,Sr=0,Tr=0,Ur=0,Vr=0,Wr=0,Xr=0,Yr=0,Zr=0,_r=0,$r=0,as=0,bs=0,cs=0,ds=0,es=0,fs=0,gs=0,hs=0,is=0,js=0,ks=0,ls=0,ms=0,ns=0,os=0,ps=0,qs=0,rs=0,ss=0,ts=0,us=0,vs=0,ws=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Ds=0,Es=0,Fs=0,Gs=0,Hs=0,Is=0,Js=0,Ks=0,Ls=0,Ms=0,Ns=0,Os=0,Ps=0,Qs=0,Rs=0,Ss=0,Ts=0,Us=0,Vs=0,Ws=0,Xs=0,Ys=0,Zs=0,_s=0,$s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,ht=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Bt=0,Ct=0,Dt=0,Et=0,Ft=0,Gt=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Mt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,Yt=0,Zt=0,_t=0,$t=0,au=0,bu=0,cu=0,du=0,eu=0,fu=0,gu=0,hu=0,iu=0,ju=0,ku=0,lu=0,mu=0,nu=0,ou=0,pu=0,qu=0,ru=0,su=0,tu=0,uu=0,vu=0,wu=0,xu=0,yu=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Eu=0,Fu=0,Gu=0,Hu=0,Iu=0,Ju=0,Ku=0,Lu=0,Mu=0,Nu=0,Ou=0,Pu=0,Qu=0,Ru=0,Su=0,Tu=0,Uu=0;a=r;r=r+8848|0;b=a+8844|0;c=a+8840|0;d=a+4160|0;e=a+4128|0;f=a+4096|0;g=a+4064|0;h=a+4032|0;j=a+4e3|0;l=a+3968|0;m=a+3936|0;n=a+3904|0;o=a+3872|0;p=a+3840|0;q=a+3808|0;s=a+3776|0;t=a+3744|0;u=a+3712|0;v=a+3680|0;w=a+3648|0;y=a+3616|0;z=a+3584|0;A=a+3552|0;B=a+3520|0;C=a+3488|0;D=a+3456|0;E=a+3424|0;F=a+3392|0;G=a+3360|0;H=a+3328|0;I=a+3296|0;J=a+3264|0;K=a+3232|0;L=a+3200|0;N=a+3168|0;O=a+3136|0;P=a+3104|0;Q=a+3072|0;R=a+3040|0;S=a+3008|0;T=a+2976|0;U=a+2944|0;V=a+2912|0;W=a+2880|0;X=a+2848|0;Y=a+2816|0;Z=a+2784|0;_=a+2752|0;$=a+2720|0;aa=a+2688|0;ba=a+2656|0;ca=a+2624|0;da=a+2592|0;ea=a+2560|0;fa=a+2528|0;ga=a+2496|0;ha=a+2464|0;ia=a+2432|0;ja=a+2400|0;ka=a+2368|0;la=a+2336|0;ma=a+2304|0;na=a+2272|0;oa=a+2240|0;pa=a+2208|0;qa=a+2176|0;ra=a+2144|0;sa=a+2112|0;ta=a+2080|0;ua=a+2048|0;va=a+2016|0;wa=a+1984|0;ya=a+1952|0;za=a+1920|0;Aa=a+1888|0;Ba=a+1856|0;Ca=a+1824|0;Da=a+1792|0;Ea=a+1760|0;Ga=a+1728|0;Ha=a+1696|0;Ia=a+1664|0;Ja=a+1632|0;Ka=a+1600|0;La=a+1568|0;Ma=a+1536|0;Na=a+1504|0;Oa=a+1472|0;Pa=a+1440|0;Qa=a+1408|0;Ra=a+1376|0;Sa=a+1344|0;Ta=a+1312|0;Ua=a+1280|0;Va=a+1248|0;Wa=a+1216|0;Xa=a+1184|0;Ya=a+1152|0;Za=a+1120|0;_a=a+1088|0;$a=a+1056|0;ab=a+1024|0;bb=a+992|0;cb=a+960|0;db=a+928|0;eb=a+896|0;gb=a+864|0;hb=a+832|0;ib=a+800|0;jb=a+768|0;kb=a+736|0;lb=a+704|0;mb=a+672|0;nb=a+640|0;ob=a+608|0;pb=a+576|0;qb=a+544|0;rb=a+512|0;sb=a+480|0;tb=a+448|0;ub=a+416|0;vb=a+384|0;wb=a+352|0;xb=a+320|0;yb=a+288|0;zb=a+256|0;Ab=a+224|0;Bb=a+192|0;Cb=a+160|0;Db=a+128|0;Eb=a+96|0;Fb=a+64|0;Gb=a+32|0;Hb=a;x=0;fb(140,e|0,228908,4);Ib=x;x=0;if(Ib&1){Ib=Hc()|0;Jb=1;Kb=M;Lb=Ib;Mb=d}else{Ib=e+12|0;k[Ib>>2]=0;k[e+16>>2]=0;k[e+20>>2]=0;i[e+24>>0]=1;k[e+28>>2]=0;i[d>>0]=0;x=0;xa(604,d+4|0,e|0);Nb=x;x=0;if(!(Nb&1)){Nb=d+16|0;k[Nb>>2]=k[Ib>>2];k[Nb+4>>2]=k[Ib+4>>2];k[Nb+8>>2]=k[Ib+8>>2];k[Nb+12>>2]=k[Ib+12>>2];k[Nb+16>>2]=k[Ib+16>>2];Ib=d+36|0;x=0;fb(140,f|0,228913,3);Nb=x;x=0;if(Nb&1){Ob=Ib;Pb=267}else{Nb=f+12|0;k[Nb>>2]=0;k[f+16>>2]=2;k[f+20>>2]=1;i[f+24>>0]=0;k[f+28>>2]=2;i[Ib>>0]=1;x=0;xa(604,d+40|0,f|0);Qb=x;x=0;if(!(Qb&1)){Qb=d+52|0;k[Qb>>2]=k[Nb>>2];k[Qb+4>>2]=k[Nb+4>>2];k[Qb+8>>2]=k[Nb+8>>2];k[Qb+12>>2]=k[Nb+12>>2];k[Qb+16>>2]=k[Nb+16>>2];Nb=d+72|0;x=0;fb(140,g|0,228917,3);Qb=x;x=0;if(Qb&1){Rb=Nb;Pb=268}else{Qb=g+12|0;k[Qb>>2]=0;k[g+16>>2]=2;k[g+20>>2]=1;i[g+24>>0]=0;k[g+28>>2]=2;i[Nb>>0]=3;x=0;xa(604,d+76|0,g|0);Sb=x;x=0;if(!(Sb&1)){Sb=d+88|0;k[Sb>>2]=k[Qb>>2];k[Sb+4>>2]=k[Qb+4>>2];k[Sb+8>>2]=k[Qb+8>>2];k[Sb+12>>2]=k[Qb+12>>2];k[Sb+16>>2]=k[Qb+16>>2];Qb=d+108|0;x=0;fb(140,h|0,228921,3);Sb=x;x=0;if(Sb&1){Tb=Qb;Pb=269}else{Sb=h+12|0;k[Sb>>2]=0;k[h+16>>2]=2;k[h+20>>2]=1;i[h+24>>0]=0;k[h+28>>2]=3;i[Qb>>0]=2;x=0;xa(604,d+112|0,h|0);Ub=x;x=0;if(!(Ub&1)){Ub=d+124|0;k[Ub>>2]=k[Sb>>2];k[Ub+4>>2]=k[Sb+4>>2];k[Ub+8>>2]=k[Sb+8>>2];k[Ub+12>>2]=k[Sb+12>>2];k[Ub+16>>2]=k[Sb+16>>2];Sb=d+144|0;x=0;fb(140,j|0,228925,3);Ub=x;x=0;if(Ub&1){Vb=Sb;Pb=270}else{Ub=j+12|0;k[Ub>>2]=0;k[j+16>>2]=2;k[j+20>>2]=1;i[j+24>>0]=0;k[j+28>>2]=3;i[Sb>>0]=4;x=0;xa(604,d+148|0,j|0);Wb=x;x=0;if(!(Wb&1)){Wb=d+160|0;k[Wb>>2]=k[Ub>>2];k[Wb+4>>2]=k[Ub+4>>2];k[Wb+8>>2]=k[Ub+8>>2];k[Wb+12>>2]=k[Ub+12>>2];k[Wb+16>>2]=k[Ub+16>>2];Ub=d+180|0;x=0;fb(140,l|0,228929,4);Wb=x;x=0;if(Wb&1){Xb=Ub;Pb=271}else{Wb=l+12|0;k[Wb>>2]=0;k[l+16>>2]=2;k[l+20>>2]=1;i[l+24>>0]=0;k[l+28>>2]=3;i[Ub>>0]=5;x=0;xa(604,d+184|0,l|0);Yb=x;x=0;if(!(Yb&1)){Yb=d+196|0;k[Yb>>2]=k[Wb>>2];k[Yb+4>>2]=k[Wb+4>>2];k[Yb+8>>2]=k[Wb+8>>2];k[Yb+12>>2]=k[Wb+12>>2];k[Yb+16>>2]=k[Wb+16>>2];Wb=d+216|0;x=0;fb(140,m|0,228934,3);Yb=x;x=0;if(Yb&1){Zb=Wb;Pb=272}else{Yb=m+12|0;k[Yb>>2]=0;k[m+16>>2]=2;k[m+20>>2]=1;i[m+24>>0]=0;k[m+28>>2]=3;i[Wb>>0]=6;x=0;xa(604,d+220|0,m|0);_b=x;x=0;do if(_b&1){$b=Wb;Pb=273}else{ac=d+232|0;k[ac>>2]=k[Yb>>2];k[ac+4>>2]=k[Yb+4>>2];k[ac+8>>2]=k[Yb+8>>2];k[ac+12>>2]=k[Yb+12>>2];k[ac+16>>2]=k[Yb+16>>2];ac=d+252|0;x=0;fb(140,n|0,228938,4);bc=x;x=0;if(bc&1){$b=ac;Pb=273;break}bc=n+12|0;k[bc>>2]=0;k[n+16>>2]=2;k[n+20>>2]=1;i[n+24>>0]=0;k[n+28>>2]=3;i[ac>>0]=7;x=0;xa(604,d+256|0,n|0);cc=x;x=0;do if(cc&1){dc=ac;Pb=274}else{ec=d+268|0;k[ec>>2]=k[bc>>2];k[ec+4>>2]=k[bc+4>>2];k[ec+8>>2]=k[bc+8>>2];k[ec+12>>2]=k[bc+12>>2];k[ec+16>>2]=k[bc+16>>2];ec=d+288|0;x=0;fb(140,o|0,228943,3);fc=x;x=0;if(fc&1){dc=ec;Pb=274;break}fc=o+12|0;k[fc>>2]=0;k[o+16>>2]=2;k[o+20>>2]=1;i[o+24>>0]=0;k[o+28>>2]=7;i[ec>>0]=10;x=0;xa(604,d+292|0,o|0);gc=x;x=0;do if(gc&1){hc=ec;Pb=275}else{ic=d+304|0;k[ic>>2]=k[fc>>2];k[ic+4>>2]=k[fc+4>>2];k[ic+8>>2]=k[fc+8>>2];k[ic+12>>2]=k[fc+12>>2];k[ic+16>>2]=k[fc+16>>2];ic=d+324|0;x=0;fb(140,p|0,228947,3);jc=x;x=0;if(jc&1){hc=ic;Pb=275;break}jc=p+12|0;k[jc>>2]=0;k[p+16>>2]=1;k[p+20>>2]=1;i[p+24>>0]=0;k[p+28>>2]=2;i[ic>>0]=25;x=0;xa(604,d+328|0,p|0);kc=x;x=0;do if(kc&1){lc=ic;Pb=276}else{mc=d+340|0;k[mc>>2]=k[jc>>2];k[mc+4>>2]=k[jc+4>>2];k[mc+8>>2]=k[jc+8>>2];k[mc+12>>2]=k[jc+12>>2];k[mc+16>>2]=k[jc+16>>2];mc=d+360|0;x=0;fb(140,q|0,228951,2);nc=x;x=0;if(nc&1){lc=mc;Pb=276;break}nc=q+12|0;k[nc>>2]=0;k[q+16>>2]=2;k[q+20>>2]=1;i[q+24>>0]=0;k[q+28>>2]=2;i[mc>>0]=16;x=0;xa(604,d+364|0,q|0);oc=x;x=0;do if(oc&1){pc=mc;Pb=277}else{qc=d+376|0;k[qc>>2]=k[nc>>2];k[qc+4>>2]=k[nc+4>>2];k[qc+8>>2]=k[nc+8>>2];k[qc+12>>2]=k[nc+12>>2];k[qc+16>>2]=k[nc+16>>2];qc=d+396|0;x=0;fb(140,s|0,228954,2);rc=x;x=0;if(rc&1){pc=qc;Pb=277;break}rc=s+12|0;k[rc>>2]=0;k[s+16>>2]=2;k[s+20>>2]=1;i[s+24>>0]=0;k[s+28>>2]=2;i[qc>>0]=17;x=0;xa(604,d+400|0,s|0);sc=x;x=0;do if(sc&1){tc=qc;Pb=278}else{uc=d+412|0;k[uc>>2]=k[rc>>2];k[uc+4>>2]=k[rc+4>>2];k[uc+8>>2]=k[rc+8>>2];k[uc+12>>2]=k[rc+12>>2];k[uc+16>>2]=k[rc+16>>2];uc=d+432|0;x=0;fb(140,t|0,228957,3);vc=x;x=0;if(vc&1){tc=uc;Pb=278;break}vc=t+12|0;k[vc>>2]=0;k[t+16>>2]=2;k[t+20>>2]=1;i[t+24>>0]=0;k[t+28>>2]=2;i[uc>>0]=18;x=0;xa(604,d+436|0,t|0);wc=x;x=0;do if(wc&1){xc=uc;Pb=279}else{yc=d+448|0;k[yc>>2]=k[vc>>2];k[yc+4>>2]=k[vc+4>>2];k[yc+8>>2]=k[vc+8>>2];k[yc+12>>2]=k[vc+12>>2];k[yc+16>>2]=k[vc+16>>2];yc=d+468|0;x=0;fb(140,u|0,228961,3);zc=x;x=0;if(zc&1){xc=yc;Pb=279;break}zc=u+12|0;k[zc>>2]=0;k[u+16>>2]=2;k[u+20>>2]=1;i[u+24>>0]=0;k[u+28>>2]=2;i[yc>>0]=19;x=0;xa(604,d+472|0,u|0);Ac=x;x=0;do if(Ac&1){Bc=yc;Pb=280}else{Cc=d+484|0;k[Cc>>2]=k[zc>>2];k[Cc+4>>2]=k[zc+4>>2];k[Cc+8>>2]=k[zc+8>>2];k[Cc+12>>2]=k[zc+12>>2];k[Cc+16>>2]=k[zc+16>>2];Cc=d+504|0;x=0;fb(140,v|0,228965,2);Dc=x;x=0;if(Dc&1){Bc=Cc;Pb=280;break}Dc=v+12|0;k[Dc>>2]=0;k[v+16>>2]=2;k[v+20>>2]=1;i[v+24>>0]=0;k[v+28>>2]=2;i[Cc>>0]=20;x=0;xa(604,d+508|0,v|0);Ec=x;x=0;do if(Ec&1){Fc=Cc;Pb=281}else{Gc=d+520|0;k[Gc>>2]=k[Dc>>2];k[Gc+4>>2]=k[Dc+4>>2];k[Gc+8>>2]=k[Dc+8>>2];k[Gc+12>>2]=k[Dc+12>>2];k[Gc+16>>2]=k[Dc+16>>2];Gc=d+540|0;x=0;fb(140,w|0,228968,6);Ic=x;x=0;if(Ic&1){Fc=Gc;Pb=281;break}Ic=w+12|0;k[Ic>>2]=0;k[w+16>>2]=1;k[w+20>>2]=1;i[w+24>>0]=0;k[w+28>>2]=2;i[Gc>>0]=21;x=0;xa(604,d+544|0,w|0);Jc=x;x=0;do if(Jc&1){Kc=Gc;Pb=282}else{Lc=d+556|0;k[Lc>>2]=k[Ic>>2];k[Lc+4>>2]=k[Ic+4>>2];k[Lc+8>>2]=k[Ic+8>>2];k[Lc+12>>2]=k[Ic+12>>2];k[Lc+16>>2]=k[Ic+16>>2];Lc=d+576|0;x=0;fb(140,y|0,228975,3);Mc=x;x=0;if(Mc&1){Kc=Lc;Pb=282;break}Mc=y+12|0;k[Mc>>2]=0;k[y+16>>2]=2;k[y+20>>2]=1;i[y+24>>0]=0;k[y+28>>2]=2;i[Lc>>0]=22;x=0;xa(604,d+580|0,y|0);Nc=x;x=0;do if(Nc&1){Oc=Lc;Pb=283}else{Pc=d+592|0;k[Pc>>2]=k[Mc>>2];k[Pc+4>>2]=k[Mc+4>>2];k[Pc+8>>2]=k[Mc+8>>2];k[Pc+12>>2]=k[Mc+12>>2];k[Pc+16>>2]=k[Mc+16>>2];Pc=d+612|0;x=0;fb(140,z|0,228979,2);Qc=x;x=0;if(Qc&1){Oc=Pc;Pb=283;break}Qc=z+12|0;k[Qc>>2]=0;k[z+16>>2]=2;k[z+20>>2]=1;i[z+24>>0]=0;k[z+28>>2]=2;i[Pc>>0]=23;x=0;xa(604,d+616|0,z|0);Rc=x;x=0;do if(Rc&1){Tc=Pc;Pb=284}else{Uc=d+628|0;k[Uc>>2]=k[Qc>>2];k[Uc+4>>2]=k[Qc+4>>2];k[Uc+8>>2]=k[Qc+8>>2];k[Uc+12>>2]=k[Qc+12>>2];k[Uc+16>>2]=k[Qc+16>>2];Uc=d+648|0;x=0;fb(140,A|0,228982,3);Vc=x;x=0;if(Vc&1){Tc=Uc;Pb=284;break}Vc=A+12|0;k[Vc>>2]=0;k[A+16>>2]=2;k[A+20>>2]=1;i[A+24>>0]=0;k[A+28>>2]=2;i[Uc>>0]=24;x=0;xa(604,d+652|0,A|0);Wc=x;x=0;do if(Wc&1){Xc=Uc;Pb=285}else{Yc=d+664|0;k[Yc>>2]=k[Vc>>2];k[Yc+4>>2]=k[Vc+4>>2];k[Yc+8>>2]=k[Vc+8>>2];k[Yc+12>>2]=k[Vc+12>>2];k[Yc+16>>2]=k[Vc+16>>2];Yc=d+684|0;x=0;fb(140,B|0,228986,4);Zc=x;x=0;if(Zc&1){Xc=Yc;Pb=285;break}Zc=B+12|0;k[Zc>>2]=0;k[B+16>>2]=2;k[B+20>>2]=1;i[B+24>>0]=0;k[B+28>>2]=2;i[Yc>>0]=26;x=0;xa(604,d+688|0,B|0);_c=x;x=0;do if(_c&1){$c=Yc;Pb=286}else{ad=d+700|0;k[ad>>2]=k[Zc>>2];k[ad+4>>2]=k[Zc+4>>2];k[ad+8>>2]=k[Zc+8>>2];k[ad+12>>2]=k[Zc+12>>2];k[ad+16>>2]=k[Zc+16>>2];ad=d+720|0;x=0;fb(140,C|0,228991,6);bd=x;x=0;if(bd&1){$c=ad;Pb=286;break}bd=C+12|0;k[bd>>2]=0;k[C+16>>2]=3;k[C+20>>2]=1;i[C+24>>0]=0;k[C+28>>2]=4;i[ad>>0]=8;x=0;xa(604,d+724|0,C|0);cd=x;x=0;do if(cd&1){dd=ad;Pb=287}else{ed=d+736|0;k[ed>>2]=k[bd>>2];k[ed+4>>2]=k[bd+4>>2];k[ed+8>>2]=k[bd+8>>2];k[ed+12>>2]=k[bd+12>>2];k[ed+16>>2]=k[bd+16>>2];ed=d+756|0;x=0;fb(140,D|0,228998,6);fd=x;x=0;if(fd&1){dd=ed;Pb=287;break}fd=D+12|0;k[fd>>2]=0;k[D+16>>2]=3;k[D+20>>2]=1;i[D+24>>0]=0;k[D+28>>2]=4;i[ed>>0]=9;x=0;xa(604,d+760|0,D|0);gd=x;x=0;do if(gd&1){hd=ed;Pb=288}else{id=d+772|0;k[id>>2]=k[fd>>2];k[id+4>>2]=k[fd+4>>2];k[id+8>>2]=k[fd+8>>2];k[id+12>>2]=k[fd+12>>2];k[id+16>>2]=k[fd+16>>2];id=d+792|0;x=0;fb(140,E|0,229005,10);jd=x;x=0;if(jd&1){hd=id;Pb=288;break}jd=E+12|0;k[jd>>2]=0;k[E+16>>2]=2;k[E+20>>2]=1;i[E+24>>0]=0;k[E+28>>2]=3;i[id>>0]=11;x=0;xa(604,d+796|0,E|0);kd=x;x=0;do if(kd&1){ld=id;Pb=289}else{md=d+808|0;k[md>>2]=k[jd>>2];k[md+4>>2]=k[jd+4>>2];k[md+8>>2]=k[jd+8>>2];k[md+12>>2]=k[jd+12>>2];k[md+16>>2]=k[jd+16>>2];md=d+828|0;x=0;fb(140,F|0,229016,4);nd=x;x=0;if(nd&1){ld=md;Pb=289;break}nd=F+12|0;k[nd>>2]=0;k[F+16>>2]=2;k[F+20>>2]=1;i[F+24>>0]=0;k[F+28>>2]=7;i[md>>0]=32;x=0;xa(604,d+832|0,F|0);od=x;x=0;do if(od&1){pd=md;Pb=290}else{qd=d+844|0;k[qd>>2]=k[nd>>2];k[qd+4>>2]=k[nd+4>>2];k[qd+8>>2]=k[nd+8>>2];k[qd+12>>2]=k[nd+12>>2];k[qd+16>>2]=k[nd+16>>2];qd=d+864|0;x=0;fb(140,G|0,229021,7);rd=x;x=0;if(rd&1){pd=qd;Pb=290;break}rd=G+12|0;k[rd>>2]=0;k[G+16>>2]=0;k[G+20>>2]=1;i[G+24>>0]=0;k[G+28>>2]=1;i[qd>>0]=48;x=0;xa(604,d+868|0,G|0);sd=x;x=0;do if(sd&1){td=qd;Pb=291}else{ud=d+880|0;k[ud>>2]=k[rd>>2];k[ud+4>>2]=k[rd+4>>2];k[ud+8>>2]=k[rd+8>>2];k[ud+12>>2]=k[rd+12>>2];k[ud+16>>2]=k[rd+16>>2];ud=d+900|0;x=0;fb(140,H|0,229029,7);vd=x;x=0;if(vd&1){td=ud;Pb=291;break}vd=H+12|0;k[vd>>2]=0;k[H+16>>2]=1;k[H+20>>2]=1;i[H+24>>0]=0;k[H+28>>2]=6;i[ud>>0]=49;x=0;xa(604,d+904|0,H|0);wd=x;x=0;do if(wd&1){xd=ud;Pb=292}else{yd=d+916|0;k[yd>>2]=k[vd>>2];k[yd+4>>2]=k[vd+4>>2];k[yd+8>>2]=k[vd+8>>2];k[yd+12>>2]=k[vd+12>>2];k[yd+16>>2]=k[vd+16>>2];yd=d+936|0;x=0;fb(140,I|0,229037,6);zd=x;x=0;if(zd&1){xd=yd;Pb=292;break}zd=I+12|0;k[zd>>2]=0;k[I+16>>2]=0;k[I+20>>2]=1;i[I+24>>0]=0;k[I+28>>2]=1;i[yd>>0]=50;x=0;xa(604,d+940|0,I|0);Ad=x;x=0;do if(Ad&1){Bd=yd;Pb=293}else{Cd=d+952|0;k[Cd>>2]=k[zd>>2];k[Cd+4>>2]=k[zd+4>>2];k[Cd+8>>2]=k[zd+8>>2];k[Cd+12>>2]=k[zd+12>>2];k[Cd+16>>2]=k[zd+16>>2];Cd=d+972|0;x=0;fb(140,J|0,229044,6);Dd=x;x=0;if(Dd&1){Bd=Cd;Pb=293;break}Dd=J+12|0;k[Dd>>2]=0;k[J+16>>2]=0;k[J+20>>2]=1;i[J+24>>0]=0;k[J+28>>2]=1;i[Cd>>0]=51;x=0;xa(604,d+976|0,J|0);Ed=x;x=0;do if(Ed&1){Fd=Cd;Pb=294}else{Gd=d+988|0;k[Gd>>2]=k[Dd>>2];k[Gd+4>>2]=k[Dd+4>>2];k[Gd+8>>2]=k[Dd+8>>2];k[Gd+12>>2]=k[Dd+12>>2];k[Gd+16>>2]=k[Dd+16>>2];Gd=d+1008|0;x=0;fb(140,K|0,229051,9);Hd=x;x=0;if(Hd&1){Fd=Gd;Pb=294;break}Hd=K+12|0;k[Hd>>2]=0;k[K+16>>2]=0;k[K+20>>2]=1;i[K+24>>0]=0;k[K+28>>2]=1;i[Gd>>0]=52;x=0;xa(604,d+1012|0,K|0);Id=x;x=0;do if(Id&1){Jd=Gd;Pb=295}else{Kd=d+1024|0;k[Kd>>2]=k[Hd>>2];k[Kd+4>>2]=k[Hd+4>>2];k[Kd+8>>2]=k[Hd+8>>2];k[Kd+12>>2]=k[Hd+12>>2];k[Kd+16>>2]=k[Hd+16>>2];Kd=d+1044|0;x=0;fb(140,L|0,229061,12);Ld=x;x=0;if(Ld&1){Jd=Kd;Pb=295;break}Ld=L+12|0;k[Ld>>2]=0;k[L+16>>2]=1;k[L+20>>2]=1;i[L+24>>0]=0;k[L+28>>2]=2;i[Kd>>0]=53;x=0;xa(604,d+1048|0,L|0);Md=x;x=0;do if(Md&1){Nd=Kd;Pb=296}else{Od=d+1060|0;k[Od>>2]=k[Ld>>2];k[Od+4>>2]=k[Ld+4>>2];k[Od+8>>2]=k[Ld+8>>2];k[Od+12>>2]=k[Ld+12>>2];k[Od+16>>2]=k[Ld+16>>2];Od=d+1080|0;x=0;fb(140,N|0,229074,12);Pd=x;x=0;if(Pd&1){Nd=Od;Pb=296;break}Pd=N+12|0;k[Pd>>2]=0;k[N+16>>2]=0;k[N+20>>2]=1;i[N+24>>0]=0;k[N+28>>2]=1;i[Od>>0]=54;x=0;xa(604,d+1084|0,N|0);Qd=x;x=0;do if(Qd&1){Rd=Od;Pb=297}else{Sd=d+1096|0;k[Sd>>2]=k[Pd>>2];k[Sd+4>>2]=k[Pd+4>>2];k[Sd+8>>2]=k[Pd+8>>2];k[Sd+12>>2]=k[Pd+12>>2];k[Sd+16>>2]=k[Pd+16>>2];Sd=d+1116|0;x=0;fb(140,O|0,229087,12);Td=x;x=0;if(Td&1){Rd=Sd;Pb=297;break}Td=O+12|0;k[Td>>2]=0;k[O+16>>2]=3;k[O+20>>2]=0;i[O+24>>0]=1;k[O+28>>2]=2;i[Sd>>0]=55;x=0;xa(604,d+1120|0,O|0);Ud=x;x=0;do if(Ud&1){Vd=Sd;Pb=298}else{Wd=d+1132|0;k[Wd>>2]=k[Td>>2];k[Wd+4>>2]=k[Td+4>>2];k[Wd+8>>2]=k[Td+8>>2];k[Wd+12>>2]=k[Td+12>>2];k[Wd+16>>2]=k[Td+16>>2];Wd=d+1152|0;x=0;fb(140,P|0,229100,8);Xd=x;x=0;if(Xd&1){Vd=Wd;Pb=298;break}Xd=P+12|0;k[Xd>>2]=0;k[P+16>>2]=0;k[P+20>>2]=1;i[P+24>>0]=0;k[P+28>>2]=1;i[Wd>>0]=56;x=0;xa(604,d+1156|0,P|0);Yd=x;x=0;do if(Yd&1){Zd=Wd;Pb=299}else{_d=d+1168|0;k[_d>>2]=k[Xd>>2];k[_d+4>>2]=k[Xd+4>>2];k[_d+8>>2]=k[Xd+8>>2];k[_d+12>>2]=k[Xd+12>>2];k[_d+16>>2]=k[Xd+16>>2];_d=d+1188|0;x=0;fb(140,Q|0,229109,8);$d=x;x=0;if($d&1){Zd=_d;Pb=299;break}$d=Q+12|0;k[$d>>2]=0;k[Q+16>>2]=3;k[Q+20>>2]=0;i[Q+24>>0]=1;k[Q+28>>2]=2;i[_d>>0]=57;x=0;xa(604,d+1192|0,Q|0);ae=x;x=0;do if(ae&1){be=_d;Pb=300}else{ce=d+1204|0;k[ce>>2]=k[$d>>2];k[ce+4>>2]=k[$d+4>>2];k[ce+8>>2]=k[$d+8>>2];k[ce+12>>2]=k[$d+12>>2];k[ce+16>>2]=k[$d+16>>2];ce=d+1224|0;x=0;fb(140,R|0,229118,8);de=x;x=0;if(de&1){be=ce;Pb=300;break}de=R+12|0;k[de>>2]=0;k[R+16>>2]=0;k[R+20>>2]=1;i[R+24>>0]=0;k[R+28>>2]=1;i[ce>>0]=58;x=0;xa(604,d+1228|0,R|0);ee=x;x=0;do if(ee&1){fe=ce;Pb=301}else{ge=d+1240|0;k[ge>>2]=k[de>>2];k[ge+4>>2]=k[de+4>>2];k[ge+8>>2]=k[de+8>>2];k[ge+12>>2]=k[de+12>>2];k[ge+16>>2]=k[de+16>>2];ge=d+1260|0;x=0;fb(140,S|0,229127,11);he=x;x=0;if(he&1){fe=ge;Pb=301;break}he=S+12|0;k[he>>2]=0;k[S+16>>2]=1;k[S+20>>2]=1;i[S+24>>0]=0;k[S+28>>2]=6;i[ge>>0]=59;x=0;xa(604,d+1264|0,S|0);ie=x;x=0;do if(ie&1){je=ge;Pb=302}else{ke=d+1276|0;k[ke>>2]=k[he>>2];k[ke+4>>2]=k[he+4>>2];k[ke+8>>2]=k[he+8>>2];k[ke+12>>2]=k[he+12>>2];k[ke+16>>2]=k[he+16>>2];ke=d+1296|0;x=0;fb(140,T|0,229139,11);le=x;x=0;if(le&1){je=ke;Pb=302;break}le=T+12|0;k[le>>2]=0;k[T+16>>2]=4;k[T+20>>2]=0;i[T+24>>0]=1;k[T+28>>2]=6;i[ke>>0]=60;x=0;xa(604,d+1300|0,T|0);me=x;x=0;do if(me&1){ne=ke;Pb=303}else{oe=d+1312|0;k[oe>>2]=k[le>>2];k[oe+4>>2]=k[le+4>>2];k[oe+8>>2]=k[le+8>>2];k[oe+12>>2]=k[le+12>>2];k[oe+16>>2]=k[le+16>>2];oe=d+1332|0;x=0;fb(140,U|0,229151,9);pe=x;x=0;if(pe&1){ne=oe;Pb=303;break}pe=U+12|0;k[pe>>2]=0;k[U+16>>2]=1;k[U+20>>2]=1;i[U+24>>0]=0;k[U+28>>2]=6;i[oe>>0]=64;x=0;xa(604,d+1336|0,U|0);qe=x;x=0;do if(qe&1){re=oe;Pb=304}else{se=d+1348|0;k[se>>2]=k[pe>>2];k[se+4>>2]=k[pe+4>>2];k[se+8>>2]=k[pe+8>>2];k[se+12>>2]=k[pe+12>>2];k[se+16>>2]=k[pe+16>>2];se=d+1368|0;x=0;fb(140,V|0,229161,8);te=x;x=0;if(te&1){re=se;Pb=304;break}te=V+12|0;k[te>>2]=0;k[V+16>>2]=0;k[V+20>>2]=1;i[V+24>>0]=0;k[V+28>>2]=1;i[se>>0]=65;x=0;xa(604,d+1372|0,V|0);ue=x;x=0;do if(ue&1){ve=se;Pb=305}else{we=d+1384|0;k[we>>2]=k[te>>2];k[we+4>>2]=k[te+4>>2];k[we+8>>2]=k[te+8>>2];k[we+12>>2]=k[te+12>>2];k[we+16>>2]=k[te+16>>2];we=d+1404|0;x=0;fb(140,W|0,229170,9);xe=x;x=0;if(xe&1){ve=we;Pb=305;break}xe=W+12|0;k[xe>>2]=0;k[W+16>>2]=0;k[W+20>>2]=1;i[W+24>>0]=0;k[W+28>>2]=1;i[we>>0]=66;x=0;xa(604,d+1408|0,W|0);ye=x;x=0;do if(ye&1){ze=we;Pb=306}else{Ae=d+1420|0;k[Ae>>2]=k[xe>>2];k[Ae+4>>2]=k[xe+4>>2];k[Ae+8>>2]=k[xe+8>>2];k[Ae+12>>2]=k[xe+12>>2];k[Ae+16>>2]=k[xe+16>>2];Ae=d+1440|0;x=0;fb(140,X|0,229180,6);Be=x;x=0;if(Be&1){ze=Ae;Pb=306;break}Be=X+12|0;k[Be>>2]=0;k[X+16>>2]=0;k[X+20>>2]=1;i[X+24>>0]=0;k[X+28>>2]=1;i[Ae>>0]=67;x=0;xa(604,d+1444|0,X|0);Ce=x;x=0;do if(Ce&1){De=Ae;Pb=307}else{Ee=d+1456|0;k[Ee>>2]=k[Be>>2];k[Ee+4>>2]=k[Be+4>>2];k[Ee+8>>2]=k[Be+8>>2];k[Ee+12>>2]=k[Be+12>>2];k[Ee+16>>2]=k[Be+16>>2];Ee=d+1476|0;x=0;fb(140,Y|0,229187,10);Fe=x;x=0;if(Fe&1){De=Ee;Pb=307;break}Fe=Y+12|0;k[Fe>>2]=0;k[Y+16>>2]=0;k[Y+20>>2]=1;i[Y+24>>0]=0;k[Y+28>>2]=1;i[Ee>>0]=68;x=0;xa(604,d+1480|0,Y|0);Ge=x;x=0;do if(Ge&1){He=Ee;Pb=308}else{Ie=d+1492|0;k[Ie>>2]=k[Fe>>2];k[Ie+4>>2]=k[Fe+4>>2];k[Ie+8>>2]=k[Fe+8>>2];k[Ie+12>>2]=k[Fe+12>>2];k[Ie+16>>2]=k[Fe+16>>2];Ie=d+1512|0;x=0;fb(140,Z|0,229198,8);Je=x;x=0;if(Je&1){He=Ie;Pb=308;break}Je=Z+12|0;k[Je>>2]=0;k[Z+16>>2]=0;k[Z+20>>2]=1;i[Z+24>>0]=0;k[Z+28>>2]=1;i[Ie>>0]=69;x=0;xa(604,d+1516|0,Z|0);Ke=x;x=0;do if(Ke&1){Le=Ie;Pb=309}else{Me=d+1528|0;k[Me>>2]=k[Je>>2];k[Me+4>>2]=k[Je+4>>2];k[Me+8>>2]=k[Je+8>>2];k[Me+12>>2]=k[Je+12>>2];k[Me+16>>2]=k[Je+16>>2];Me=d+1548|0;x=0;fb(140,_|0,229207,3);Ne=x;x=0;if(Ne&1){Le=Me;Pb=309;break}Ne=_+12|0;k[Ne>>2]=0;k[_+16>>2]=1;k[_+20>>2]=0;i[_+24>>0]=0;k[_+28>>2]=1;i[Me>>0]=80;x=0;xa(604,d+1552|0,_|0);Oe=x;x=0;do if(Oe&1){Pe=Me;Pb=310}else{Qe=d+1564|0;k[Qe>>2]=k[Ne>>2];k[Qe+4>>2]=k[Ne+4>>2];k[Qe+8>>2]=k[Ne+8>>2];k[Qe+12>>2]=k[Ne+12>>2];k[Qe+16>>2]=k[Ne+16>>2];Qe=d+1584|0;x=0;fb(140,$|0,229211,5);Re=x;x=0;if(Re&1){Pe=Qe;Pb=310;break}Re=$+12|0;k[Re>>2]=0;k[$+16>>2]=1;k[$+20>>2]=1;i[$+24>>0]=0;k[$+28>>2]=2;i[Qe>>0]=81;x=0;xa(604,d+1588|0,$|0);Se=x;x=0;do if(Se&1){Te=Qe;Pb=311}else{Ue=d+1600|0;k[Ue>>2]=k[Re>>2];k[Ue+4>>2]=k[Re+4>>2];k[Ue+8>>2]=k[Re+8>>2];k[Ue+12>>2]=k[Re+12>>2];k[Ue+16>>2]=k[Re+16>>2];Ue=d+1620|0;x=0;fb(140,aa|0,229217,6);Ve=x;x=0;if(Ve&1){Te=Ue;Pb=311;break}Ve=aa+12|0;k[Ve>>2]=0;k[aa+16>>2]=2;k[aa+20>>2]=0;i[aa+24>>0]=1;k[aa+28>>2]=2;i[Ue>>0]=82;x=0;xa(604,d+1624|0,aa|0);We=x;x=0;do if(We&1){Xe=Ue;Pb=312}else{Ye=d+1636|0;k[Ye>>2]=k[Ve>>2];k[Ye+4>>2]=k[Ve+4>>2];k[Ye+8>>2]=k[Ve+8>>2];k[Ye+12>>2]=k[Ve+12>>2];k[Ye+16>>2]=k[Ve+16>>2];Ye=d+1656|0;x=0;fb(140,ba|0,229224,7);Ze=x;x=0;if(Ze&1){Xe=Ye;Pb=312;break}Ze=ba+12|0;k[Ze>>2]=0;k[ba+16>>2]=2;k[ba+20>>2]=0;i[ba+24>>0]=1;k[ba+28>>2]=2;i[Ye>>0]=83;x=0;xa(604,d+1660|0,ba|0);_e=x;x=0;do if(_e&1){$e=Ye;Pb=313}else{af=d+1672|0;k[af>>2]=k[Ze>>2];k[af+4>>2]=k[Ze+4>>2];k[af+8>>2]=k[Ze+8>>2];k[af+12>>2]=k[Ze+12>>2];k[af+16>>2]=k[Ze+16>>2];af=d+1692|0;x=0;fb(140,ca|0,229232,5);bf=x;x=0;if(bf&1){$e=af;Pb=313;break}bf=ca+12|0;k[bf>>2]=0;k[ca+16>>2]=1;k[ca+20>>2]=1;i[ca+24>>0]=0;k[ca+28>>2]=7;i[af>>0]=84;x=0;xa(604,d+1696|0,ca|0);cf=x;x=0;do if(cf&1){df=af;Pb=314}else{ef=d+1708|0;k[ef>>2]=k[bf>>2];k[ef+4>>2]=k[bf+4>>2];k[ef+8>>2]=k[bf+8>>2];k[ef+12>>2]=k[bf+12>>2];k[ef+16>>2]=k[bf+16>>2];ef=d+1728|0;x=0;fb(140,da|0,229238,6);ff=x;x=0;if(ff&1){df=ef;Pb=314;break}ff=da+12|0;k[ff>>2]=0;k[da+16>>2]=2;k[da+20>>2]=0;i[da+24>>0]=1;k[da+28>>2]=7;i[ef>>0]=85;x=0;xa(604,d+1732|0,da|0);gf=x;x=0;do if(gf&1){hf=ef;Pb=315}else{jf=d+1744|0;k[jf>>2]=k[ff>>2];k[jf+4>>2]=k[ff+4>>2];k[jf+8>>2]=k[ff+8>>2];k[jf+12>>2]=k[ff+12>>2];k[jf+16>>2]=k[ff+16>>2];jf=d+1764|0;x=0;fb(140,ea|0,229245,4);kf=x;x=0;if(kf&1){hf=jf;Pb=315;break}kf=ea+12|0;k[kf>>2]=0;k[ea+16>>2]=1;k[ea+20>>2]=0;i[ea+24>>0]=1;k[ea+28>>2]=4;i[jf>>0]=86;x=0;xa(604,d+1768|0,ea|0);lf=x;x=0;do if(lf&1){mf=jf;Pb=316}else{nf=d+1780|0;k[nf>>2]=k[kf>>2];k[nf+4>>2]=k[kf+4>>2];k[nf+8>>2]=k[kf+8>>2];k[nf+12>>2]=k[kf+12>>2];k[nf+16>>2]=k[kf+16>>2];nf=d+1800|0;x=0;fb(140,fa|0,229250,5);of=x;x=0;if(of&1){mf=nf;Pb=316;break}of=fa+12|0;k[of>>2]=0;k[fa+16>>2]=2;k[fa+20>>2]=0;i[fa+24>>0]=1;k[fa+28>>2]=5;i[nf>>0]=87;x=0;xa(604,d+1804|0,fa|0);pf=x;x=0;do if(pf&1){qf=nf;Pb=317}else{rf=d+1816|0;k[rf>>2]=k[of>>2];k[rf+4>>2]=k[of+4>>2];k[rf+8>>2]=k[of+8>>2];k[rf+12>>2]=k[of+12>>2];k[rf+16>>2]=k[of+16>>2];rf=d+1836|0;x=0;fb(140,ga|0,229256,2);sf=x;x=0;if(sf&1){qf=rf;Pb=317;break}sf=ga+12|0;k[sf>>2]=0;k[ga+16>>2]=0;k[ga+20>>2]=1;i[ga+24>>0]=0;k[ga+28>>2]=1;i[rf>>0]=88;x=0;xa(604,d+1840|0,ga|0);tf=x;x=0;do if(tf&1){uf=rf;Pb=318}else{vf=d+1852|0;k[vf>>2]=k[sf>>2];k[vf+4>>2]=k[sf+4>>2];k[vf+8>>2]=k[sf+8>>2];k[vf+12>>2]=k[sf+12>>2];k[vf+16>>2]=k[sf+16>>2];vf=d+1872|0;x=0;fb(140,ha|0,229259,5);wf=x;x=0;if(wf&1){uf=vf;Pb=318;break}wf=ha+12|0;k[wf>>2]=0;k[ha+16>>2]=0;k[ha+20>>2]=1;i[ha+24>>0]=0;k[ha+28>>2]=1;i[vf>>0]=89;x=0;xa(604,d+1876|0,ha|0);xf=x;x=0;do if(xf&1){yf=vf;Pb=319}else{zf=d+1888|0;k[zf>>2]=k[wf>>2];k[zf+4>>2]=k[wf+4>>2];k[zf+8>>2]=k[wf+8>>2];k[zf+12>>2]=k[wf+12>>2];k[zf+16>>2]=k[wf+16>>2];zf=d+1908|0;x=0;fb(140,ia|0,229265,3);Af=x;x=0;if(Af&1){yf=zf;Pb=319;break}Af=ia+12|0;k[Af>>2]=0;k[ia+16>>2]=0;k[ia+20>>2]=1;i[ia+24>>0]=0;k[ia+28>>2]=1;i[zf>>0]=90;x=0;xa(604,d+1912|0,ia|0);Bf=x;x=0;do if(Bf&1){Cf=zf;Pb=320}else{Df=d+1924|0;k[Df>>2]=k[Af>>2];k[Df+4>>2]=k[Af+4>>2];k[Df+8>>2]=k[Af+8>>2];k[Df+12>>2]=k[Af+12>>2];k[Df+16>>2]=k[Af+16>>2];Df=d+1944|0;x=0;fb(140,ja|0,229269,8);Ef=x;x=0;if(Ef&1){Cf=Df;Pb=320;break}Ef=ja+12|0;k[Ef>>2]=0;k[ja+16>>2]=0;k[ja+20>>2]=0;i[ja+24>>0]=1;k[ja+28>>2]=7;i[Df>>0]=91;x=0;xa(604,d+1948|0,ja|0);Ff=x;x=0;do if(Ff&1){Gf=Df;Pb=321}else{Hf=d+1960|0;k[Hf>>2]=k[Ef>>2];k[Hf+4>>2]=k[Ef+4>>2];k[Hf+8>>2]=k[Ef+8>>2];k[Hf+12>>2]=k[Ef+12>>2];k[Hf+16>>2]=k[Ef+16>>2];Hf=d+1980|0;x=0;fb(140,ka|0,229278,5);If=x;x=0;if(If&1){Gf=Hf;Pb=321;break}If=ka+12|0;k[If>>2]=1;k[ka+16>>2]=0;k[ka+20>>2]=1;i[ka+24>>0]=0;k[ka+28>>2]=2;i[Hf>>0]=96;x=0;xa(604,d+1984|0,ka|0);Jf=x;x=0;do if(Jf&1){Kf=Hf;Pb=322}else{Lf=d+1996|0;k[Lf>>2]=k[If>>2];k[Lf+4>>2]=k[If+4>>2];k[Lf+8>>2]=k[If+8>>2];k[Lf+12>>2]=k[If+12>>2];k[Lf+16>>2]=k[If+16>>2];Lf=d+2016|0;x=0;fb(140,la|0,229284,5);Mf=x;x=0;if(Mf&1){Kf=Lf;Pb=322;break}Mf=la+12|0;k[Mf>>2]=2;k[la+16>>2]=0;k[la+20>>2]=1;i[la+24>>0]=0;k[la+28>>2]=2;i[Lf>>0]=97;x=0;xa(604,d+2020|0,la|0);Nf=x;x=0;do if(Nf&1){Of=Lf;Pb=323}else{Pf=d+2032|0;k[Pf>>2]=k[Mf>>2];k[Pf+4>>2]=k[Mf+4>>2];k[Pf+8>>2]=k[Mf+8>>2];k[Pf+12>>2]=k[Mf+12>>2];k[Pf+16>>2]=k[Mf+16>>2];Pf=d+2052|0;x=0;fb(140,ma|0,229290,5);Qf=x;x=0;if(Qf&1){Of=Pf;Pb=323;break}Qf=ma+12|0;k[Qf>>2]=3;k[ma+16>>2]=0;k[ma+20>>2]=1;i[ma+24>>0]=0;k[ma+28>>2]=2;i[Pf>>0]=98;x=0;xa(604,d+2056|0,ma|0);Rf=x;x=0;do if(Rf&1){Sf=Pf;Pb=324}else{Tf=d+2068|0;k[Tf>>2]=k[Qf>>2];k[Tf+4>>2]=k[Qf+4>>2];k[Tf+8>>2]=k[Qf+8>>2];k[Tf+12>>2]=k[Qf+12>>2];k[Tf+16>>2]=k[Qf+16>>2];Tf=d+2088|0;x=0;fb(140,na|0,229296,5);Uf=x;x=0;if(Uf&1){Sf=Tf;Pb=324;break}Uf=na+12|0;k[Uf>>2]=4;k[na+16>>2]=0;k[na+20>>2]=1;i[na+24>>0]=0;k[na+28>>2]=2;i[Tf>>0]=99;x=0;xa(604,d+2092|0,na|0);Vf=x;x=0;do if(Vf&1){Wf=Tf;Pb=325}else{Xf=d+2104|0;k[Xf>>2]=k[Uf>>2];k[Xf+4>>2]=k[Uf+4>>2];k[Xf+8>>2]=k[Uf+8>>2];k[Xf+12>>2]=k[Uf+12>>2];k[Xf+16>>2]=k[Uf+16>>2];Xf=d+2124|0;x=0;fb(140,oa|0,229302,5);Yf=x;x=0;if(Yf&1){Wf=Xf;Pb=325;break}Yf=oa+12|0;k[Yf>>2]=5;k[oa+16>>2]=0;k[oa+20>>2]=1;i[oa+24>>0]=0;k[oa+28>>2]=2;i[Xf>>0]=100;x=0;xa(604,d+2128|0,oa|0);Zf=x;x=0;do if(Zf&1){_f=Xf;Pb=326}else{$f=d+2140|0;k[$f>>2]=k[Yf>>2];k[$f+4>>2]=k[Yf+4>>2];k[$f+8>>2]=k[Yf+8>>2];k[$f+12>>2]=k[Yf+12>>2];k[$f+16>>2]=k[Yf+16>>2];$f=d+2160|0;x=0;fb(140,pa|0,229308,5);ag=x;x=0;if(ag&1){_f=$f;Pb=326;break}ag=pa+12|0;k[ag>>2]=6;k[pa+16>>2]=0;k[pa+20>>2]=1;i[pa+24>>0]=0;k[pa+28>>2]=2;i[$f>>0]=101;x=0;xa(604,d+2164|0,pa|0);bg=x;x=0;do if(bg&1){cg=$f;Pb=327}else{dg=d+2176|0;k[dg>>2]=k[ag>>2];k[dg+4>>2]=k[ag+4>>2];k[dg+8>>2]=k[ag+8>>2];k[dg+12>>2]=k[ag+12>>2];k[dg+16>>2]=k[ag+16>>2];dg=d+2196|0;x=0;fb(140,qa|0,229314,5);eg=x;x=0;if(eg&1){cg=dg;Pb=327;break}eg=qa+12|0;k[eg>>2]=7;k[qa+16>>2]=0;k[qa+20>>2]=1;i[qa+24>>0]=0;k[qa+28>>2]=2;i[dg>>0]=102;x=0;xa(604,d+2200|0,qa|0);fg=x;x=0;do if(fg&1){gg=dg;Pb=328}else{hg=d+2212|0;k[hg>>2]=k[eg>>2];k[hg+4>>2]=k[eg+4>>2];k[hg+8>>2]=k[eg+8>>2];k[hg+12>>2]=k[eg+12>>2];k[hg+16>>2]=k[eg+16>>2];hg=d+2232|0;x=0;fb(140,ra|0,229320,5);ig=x;x=0;if(ig&1){gg=hg;Pb=328;break}ig=ra+12|0;k[ig>>2]=8;k[ra+16>>2]=0;k[ra+20>>2]=1;i[ra+24>>0]=0;k[ra+28>>2]=2;i[hg>>0]=103;x=0;xa(604,d+2236|0,ra|0);jg=x;x=0;do if(jg&1){kg=hg;Pb=329}else{lg=d+2248|0;k[lg>>2]=k[ig>>2];k[lg+4>>2]=k[ig+4>>2];k[lg+8>>2]=k[ig+8>>2];k[lg+12>>2]=k[ig+12>>2];k[lg+16>>2]=k[ig+16>>2];lg=d+2268|0;x=0;fb(140,sa|0,229326,5);mg=x;x=0;if(mg&1){kg=lg;Pb=329;break}mg=sa+12|0;k[mg>>2]=9;k[sa+16>>2]=0;k[sa+20>>2]=1;i[sa+24>>0]=0;k[sa+28>>2]=2;i[lg>>0]=104;x=0;xa(604,d+2272|0,sa|0);ng=x;x=0;do if(ng&1){og=lg;Pb=330}else{pg=d+2284|0;k[pg>>2]=k[mg>>2];k[pg+4>>2]=k[mg+4>>2];k[pg+8>>2]=k[mg+8>>2];k[pg+12>>2]=k[mg+12>>2];k[pg+16>>2]=k[mg+16>>2];pg=d+2304|0;x=0;fb(140,ta|0,229332,6);qg=x;x=0;if(qg&1){og=pg;Pb=330;break}qg=ta+12|0;k[qg>>2]=10;k[ta+16>>2]=0;k[ta+20>>2]=1;i[ta+24>>0]=0;k[ta+28>>2]=2;i[pg>>0]=105;x=0;xa(604,d+2308|0,ta|0);rg=x;x=0;do if(rg&1){sg=pg;Pb=331}else{tg=d+2320|0;k[tg>>2]=k[qg>>2];k[tg+4>>2]=k[qg+4>>2];k[tg+8>>2]=k[qg+8>>2];k[tg+12>>2]=k[qg+12>>2];k[tg+16>>2]=k[qg+16>>2];tg=d+2340|0;x=0;fb(140,ua|0,229339,6);ug=x;x=0;if(ug&1){sg=tg;Pb=331;break}ug=ua+12|0;k[ug>>2]=11;k[ua+16>>2]=0;k[ua+20>>2]=1;i[ua+24>>0]=0;k[ua+28>>2]=2;i[tg>>0]=106;x=0;xa(604,d+2344|0,ua|0);vg=x;x=0;do if(vg&1){wg=tg;Pb=332}else{xg=d+2356|0;k[xg>>2]=k[ug>>2];k[xg+4>>2]=k[ug+4>>2];k[xg+8>>2]=k[ug+8>>2];k[xg+12>>2]=k[ug+12>>2];k[xg+16>>2]=k[ug+16>>2];xg=d+2376|0;x=0;fb(140,va|0,229346,6);yg=x;x=0;if(yg&1){wg=xg;Pb=332;break}yg=va+12|0;k[yg>>2]=12;k[va+16>>2]=0;k[va+20>>2]=1;i[va+24>>0]=0;k[va+28>>2]=2;i[xg>>0]=107;x=0;xa(604,d+2380|0,va|0);zg=x;x=0;do if(zg&1){Ag=xg;Pb=333}else{Bg=d+2392|0;k[Bg>>2]=k[yg>>2];k[Bg+4>>2]=k[yg+4>>2];k[Bg+8>>2]=k[yg+8>>2];k[Bg+12>>2]=k[yg+12>>2];k[Bg+16>>2]=k[yg+16>>2];Bg=d+2412|0;x=0;fb(140,wa|0,229353,6);Cg=x;x=0;if(Cg&1){Ag=Bg;Pb=333;break}Cg=wa+12|0;k[Cg>>2]=13;k[wa+16>>2]=0;k[wa+20>>2]=1;i[wa+24>>0]=0;k[wa+28>>2]=2;i[Bg>>0]=108;x=0;xa(604,d+2416|0,wa|0);Dg=x;x=0;do if(Dg&1){Eg=Bg;Pb=334}else{Fg=d+2428|0;k[Fg>>2]=k[Cg>>2];k[Fg+4>>2]=k[Cg+4>>2];k[Fg+8>>2]=k[Cg+8>>2];k[Fg+12>>2]=k[Cg+12>>2];k[Fg+16>>2]=k[Cg+16>>2];Fg=d+2448|0;x=0;fb(140,ya|0,229360,6);Gg=x;x=0;if(Gg&1){Eg=Fg;Pb=334;break}Gg=ya+12|0;k[Gg>>2]=14;k[ya+16>>2]=0;k[ya+20>>2]=1;i[ya+24>>0]=0;k[ya+28>>2]=2;i[Fg>>0]=109;x=0;xa(604,d+2452|0,ya|0);Hg=x;x=0;do if(Hg&1){Ig=Fg;Pb=335}else{Jg=d+2464|0;k[Jg>>2]=k[Gg>>2];k[Jg+4>>2]=k[Gg+4>>2];k[Jg+8>>2]=k[Gg+8>>2];k[Jg+12>>2]=k[Gg+12>>2];k[Jg+16>>2]=k[Gg+16>>2];Jg=d+2484|0;x=0;fb(140,za|0,229367,6);Kg=x;x=0;if(Kg&1){Ig=Jg;Pb=335;break}Kg=za+12|0;k[Kg>>2]=15;k[za+16>>2]=0;k[za+20>>2]=1;i[za+24>>0]=0;k[za+28>>2]=2;i[Jg>>0]=110;x=0;xa(604,d+2488|0,za|0);Lg=x;x=0;do if(Lg&1){Mg=Jg;Pb=336}else{Ng=d+2500|0;k[Ng>>2]=k[Kg>>2];k[Ng+4>>2]=k[Kg+4>>2];k[Ng+8>>2]=k[Kg+8>>2];k[Ng+12>>2]=k[Kg+12>>2];k[Ng+16>>2]=k[Kg+16>>2];Ng=d+2520|0;x=0;fb(140,Aa|0,229374,6);Og=x;x=0;if(Og&1){Mg=Ng;Pb=336;break}Og=Aa+12|0;k[Og>>2]=16;k[Aa+16>>2]=0;k[Aa+20>>2]=1;i[Aa+24>>0]=0;k[Aa+28>>2]=2;i[Ng>>0]=111;x=0;xa(604,d+2524|0,Aa|0);Pg=x;x=0;do if(Pg&1){Qg=Ng;Pb=337}else{Rg=d+2536|0;k[Rg>>2]=k[Og>>2];k[Rg+4>>2]=k[Og+4>>2];k[Rg+8>>2]=k[Og+8>>2];k[Rg+12>>2]=k[Og+12>>2];k[Rg+16>>2]=k[Og+16>>2];Rg=d+2556|0;x=0;fb(140,Ba|0,229381,6);Sg=x;x=0;if(Sg&1){Qg=Rg;Pb=337;break}Sg=Ba+12|0;k[Sg>>2]=17;k[Ba+16>>2]=0;k[Ba+20>>2]=1;i[Ba+24>>0]=0;k[Ba+28>>2]=2;i[Rg>>0]=112;x=0;xa(604,d+2560|0,Ba|0);Tg=x;x=0;do if(Tg&1){Ug=Rg;Pb=338}else{Vg=d+2572|0;k[Vg>>2]=k[Sg>>2];k[Vg+4>>2]=k[Sg+4>>2];k[Vg+8>>2]=k[Sg+8>>2];k[Vg+12>>2]=k[Sg+12>>2];k[Vg+16>>2]=k[Sg+16>>2];Vg=d+2592|0;x=0;fb(140,Ca|0,229388,6);Wg=x;x=0;if(Wg&1){Ug=Vg;Pb=338;break}Wg=Ca+12|0;k[Wg>>2]=18;k[Ca+16>>2]=0;k[Ca+20>>2]=1;i[Ca+24>>0]=0;k[Ca+28>>2]=2;i[Vg>>0]=113;x=0;xa(604,d+2596|0,Ca|0);Xg=x;x=0;do if(Xg&1){Yg=Vg;Pb=339}else{Zg=d+2608|0;k[Zg>>2]=k[Wg>>2];k[Zg+4>>2]=k[Wg+4>>2];k[Zg+8>>2]=k[Wg+8>>2];k[Zg+12>>2]=k[Wg+12>>2];k[Zg+16>>2]=k[Wg+16>>2];Zg=d+2628|0;x=0;fb(140,Da|0,229395,6);_g=x;x=0;if(_g&1){Yg=Zg;Pb=339;break}_g=Da+12|0;k[_g>>2]=19;k[Da+16>>2]=0;k[Da+20>>2]=1;i[Da+24>>0]=0;k[Da+28>>2]=2;i[Zg>>0]=114;x=0;xa(604,d+2632|0,Da|0);$g=x;x=0;do if($g&1){ah=Zg;Pb=340}else{bh=d+2644|0;k[bh>>2]=k[_g>>2];k[bh+4>>2]=k[_g+4>>2];k[bh+8>>2]=k[_g+8>>2];k[bh+12>>2]=k[_g+12>>2];k[bh+16>>2]=k[_g+16>>2];bh=d+2664|0;x=0;fb(140,Ea|0,229402,6);ch=x;x=0;if(ch&1){ah=bh;Pb=340;break}ch=Ea+12|0;k[ch>>2]=20;k[Ea+16>>2]=0;k[Ea+20>>2]=1;i[Ea+24>>0]=0;k[Ea+28>>2]=2;i[bh>>0]=115;x=0;xa(604,d+2668|0,Ea|0);dh=x;x=0;do if(dh&1){eh=bh;Pb=341}else{fh=d+2680|0;k[fh>>2]=k[ch>>2];k[fh+4>>2]=k[ch+4>>2];k[fh+8>>2]=k[ch+8>>2];k[fh+12>>2]=k[ch+12>>2];k[fh+16>>2]=k[ch+16>>2];fh=d+2700|0;x=0;fb(140,Ga|0,229409,6);gh=x;x=0;if(gh&1){eh=fh;Pb=341;break}gh=Ga+12|0;k[gh>>2]=21;k[Ga+16>>2]=0;k[Ga+20>>2]=1;i[Ga+24>>0]=0;k[Ga+28>>2]=2;i[fh>>0]=116;x=0;xa(604,d+2704|0,Ga|0);hh=x;x=0;do if(hh&1){ih=fh;Pb=342}else{jh=d+2716|0;k[jh>>2]=k[gh>>2];k[jh+4>>2]=k[gh+4>>2];k[jh+8>>2]=k[gh+8>>2];k[jh+12>>2]=k[gh+12>>2];k[jh+16>>2]=k[gh+16>>2];jh=d+2736|0;x=0;fb(140,Ha|0,229416,6);kh=x;x=0;if(kh&1){ih=jh;Pb=342;break}kh=Ha+12|0;k[kh>>2]=22;k[Ha+16>>2]=0;k[Ha+20>>2]=1;i[Ha+24>>0]=0;k[Ha+28>>2]=2;i[jh>>0]=117;x=0;xa(604,d+2740|0,Ha|0);lh=x;x=0;do if(lh&1){mh=jh;Pb=343}else{nh=d+2752|0;k[nh>>2]=k[kh>>2];k[nh+4>>2]=k[kh+4>>2];k[nh+8>>2]=k[kh+8>>2];k[nh+12>>2]=k[kh+12>>2];k[nh+16>>2]=k[kh+16>>2];nh=d+2772|0;x=0;fb(140,Ia|0,229423,6);oh=x;x=0;if(oh&1){mh=nh;Pb=343;break}oh=Ia+12|0;k[oh>>2]=23;k[Ia+16>>2]=0;k[Ia+20>>2]=1;i[Ia+24>>0]=0;k[Ia+28>>2]=2;i[nh>>0]=118;x=0;xa(604,d+2776|0,Ia|0);ph=x;x=0;do if(ph&1){qh=nh;Pb=344}else{rh=d+2788|0;k[rh>>2]=k[oh>>2];k[rh+4>>2]=k[oh+4>>2];k[rh+8>>2]=k[oh+8>>2];k[rh+12>>2]=k[oh+12>>2];k[rh+16>>2]=k[oh+16>>2];rh=d+2808|0;x=0;fb(140,Ja|0,229430,6);sh=x;x=0;if(sh&1){qh=rh;Pb=344;break}sh=Ja+12|0;k[sh>>2]=24;k[Ja+16>>2]=0;k[Ja+20>>2]=1;i[Ja+24>>0]=0;k[Ja+28>>2]=2;i[rh>>0]=119;x=0;xa(604,d+2812|0,Ja|0);th=x;x=0;do if(th&1){uh=rh;Pb=345}else{vh=d+2824|0;k[vh>>2]=k[sh>>2];k[vh+4>>2]=k[sh+4>>2];k[vh+8>>2]=k[sh+8>>2];k[vh+12>>2]=k[sh+12>>2];k[vh+16>>2]=k[sh+16>>2];vh=d+2844|0;x=0;fb(140,Ka|0,229437,6);wh=x;x=0;if(wh&1){uh=vh;Pb=345;break}wh=Ka+12|0;k[wh>>2]=25;k[Ka+16>>2]=0;k[Ka+20>>2]=1;i[Ka+24>>0]=0;k[Ka+28>>2]=2;i[vh>>0]=120;x=0;xa(604,d+2848|0,Ka|0);xh=x;x=0;do if(xh&1){yh=vh;Pb=346}else{zh=d+2860|0;k[zh>>2]=k[wh>>2];k[zh+4>>2]=k[wh+4>>2];k[zh+8>>2]=k[wh+8>>2];k[zh+12>>2]=k[wh+12>>2];k[zh+16>>2]=k[wh+16>>2];zh=d+2880|0;x=0;fb(140,La|0,229444,6);Ah=x;x=0;if(Ah&1){yh=zh;Pb=346;break}Ah=La+12|0;k[Ah>>2]=26;k[La+16>>2]=0;k[La+20>>2]=1;i[La+24>>0]=0;k[La+28>>2]=2;i[zh>>0]=121;x=0;xa(604,d+2884|0,La|0);Bh=x;x=0;do if(Bh&1){Ch=zh;Pb=347}else{Dh=d+2896|0;k[Dh>>2]=k[Ah>>2];k[Dh+4>>2]=k[Ah+4>>2];k[Dh+8>>2]=k[Ah+8>>2];k[Dh+12>>2]=k[Ah+12>>2];k[Dh+16>>2]=k[Ah+16>>2];Dh=d+2916|0;x=0;fb(140,Ma|0,229451,6);Eh=x;x=0;if(Eh&1){Ch=Dh;Pb=347;break}Eh=Ma+12|0;k[Eh>>2]=27;k[Ma+16>>2]=0;k[Ma+20>>2]=1;i[Ma+24>>0]=0;k[Ma+28>>2]=2;i[Dh>>0]=122;x=0;xa(604,d+2920|0,Ma|0);Fh=x;x=0;do if(Fh&1){Gh=Dh;Pb=348}else{Hh=d+2932|0;k[Hh>>2]=k[Eh>>2];k[Hh+4>>2]=k[Eh+4>>2];k[Hh+8>>2]=k[Eh+8>>2];k[Hh+12>>2]=k[Eh+12>>2];k[Hh+16>>2]=k[Eh+16>>2];Hh=d+2952|0;x=0;fb(140,Na|0,229458,6);Ih=x;x=0;if(Ih&1){Gh=Hh;Pb=348;break}Ih=Na+12|0;k[Ih>>2]=28;k[Na+16>>2]=0;k[Na+20>>2]=1;i[Na+24>>0]=0;k[Na+28>>2]=2;i[Hh>>0]=123;x=0;xa(604,d+2956|0,Na|0);Jh=x;x=0;do if(Jh&1){Kh=Hh;Pb=349}else{Lh=d+2968|0;k[Lh>>2]=k[Ih>>2];k[Lh+4>>2]=k[Ih+4>>2];k[Lh+8>>2]=k[Ih+8>>2];k[Lh+12>>2]=k[Ih+12>>2];k[Lh+16>>2]=k[Ih+16>>2];Lh=d+2988|0;x=0;fb(140,Oa|0,229465,6);Mh=x;x=0;if(Mh&1){Kh=Lh;Pb=349;break}Mh=Oa+12|0;k[Mh>>2]=29;k[Oa+16>>2]=0;k[Oa+20>>2]=1;i[Oa+24>>0]=0;k[Oa+28>>2]=2;i[Lh>>0]=124;x=0;xa(604,d+2992|0,Oa|0);Nh=x;x=0;do if(Nh&1){Oh=Lh;Pb=350}else{Ph=d+3004|0;k[Ph>>2]=k[Mh>>2];k[Ph+4>>2]=k[Mh+4>>2];k[Ph+8>>2]=k[Mh+8>>2];k[Ph+12>>2]=k[Mh+12>>2];k[Ph+16>>2]=k[Mh+16>>2];Ph=d+3024|0;x=0;fb(140,Pa|0,229472,6);Qh=x;x=0;if(Qh&1){Oh=Ph;Pb=350;break}Qh=Pa+12|0;k[Qh>>2]=30;k[Pa+16>>2]=0;k[Pa+20>>2]=1;i[Pa+24>>0]=0;k[Pa+28>>2]=2;i[Ph>>0]=125;x=0;xa(604,d+3028|0,Pa|0);Rh=x;x=0;do if(Rh&1){Sh=Ph;Pb=351}else{Th=d+3040|0;k[Th>>2]=k[Qh>>2];k[Th+4>>2]=k[Qh+4>>2];k[Th+8>>2]=k[Qh+8>>2];k[Th+12>>2]=k[Qh+12>>2];k[Th+16>>2]=k[Qh+16>>2];Th=d+3060|0;x=0;fb(140,Qa|0,229479,6);Uh=x;x=0;if(Uh&1){Sh=Th;Pb=351;break}Uh=Qa+12|0;k[Uh>>2]=31;k[Qa+16>>2]=0;k[Qa+20>>2]=1;i[Qa+24>>0]=0;k[Qa+28>>2]=2;i[Th>>0]=126;x=0;xa(604,d+3064|0,Qa|0);Vh=x;x=0;do if(Vh&1){Wh=Th;Pb=352}else{Xh=d+3076|0;k[Xh>>2]=k[Uh>>2];k[Xh+4>>2]=k[Uh+4>>2];k[Xh+8>>2]=k[Uh+8>>2];k[Xh+12>>2]=k[Uh+12>>2];k[Xh+16>>2]=k[Uh+16>>2];Xh=d+3096|0;x=0;fb(140,Ra|0,229486,6);Yh=x;x=0;if(Yh&1){Wh=Xh;Pb=352;break}Yh=Ra+12|0;k[Yh>>2]=32;k[Ra+16>>2]=0;k[Ra+20>>2]=1;i[Ra+24>>0]=0;k[Ra+28>>2]=2;i[Xh>>0]=127;x=0;xa(604,d+3100|0,Ra|0);Zh=x;x=0;do if(Zh&1){_h=Xh;Pb=353}else{$h=d+3112|0;k[$h>>2]=k[Yh>>2];k[$h+4>>2]=k[Yh+4>>2];k[$h+8>>2]=k[Yh+8>>2];k[$h+12>>2]=k[Yh+12>>2];k[$h+16>>2]=k[Yh+16>>2];$h=d+3132|0;x=0;fb(140,Sa|0,229493,4);ai=x;x=0;if(ai&1){_h=$h;Pb=353;break}ai=Sa+12|0;k[ai>>2]=0;k[Sa+16>>2]=1;k[Sa+20>>2]=2;i[Sa+24>>0]=0;k[Sa+28>>2]=2;i[$h>>0]=-128;x=0;xa(604,d+3136|0,Sa|0);bi=x;x=0;do if(bi&1){ci=$h;Pb=354}else{di=d+3148|0;k[di>>2]=k[ai>>2];k[di+4>>2]=k[ai+4>>2];k[di+8>>2]=k[ai+8>>2];k[di+12>>2]=k[ai+12>>2];k[di+16>>2]=k[ai+16>>2];di=d+3168|0;x=0;fb(140,Ta|0,229498,4);ei=x;x=0;if(ei&1){ci=di;Pb=354;break}ei=Ta+12|0;k[ei>>2]=0;k[Ta+16>>2]=2;k[Ta+20>>2]=3;i[Ta+24>>0]=0;k[Ta+28>>2]=2;i[di>>0]=-127;x=0;xa(604,d+3172|0,Ta|0);fi=x;x=0;do if(fi&1){gi=di;Pb=355}else{hi=d+3184|0;k[hi>>2]=k[ei>>2];k[hi+4>>2]=k[ei+4>>2];k[hi+8>>2]=k[ei+8>>2];k[hi+12>>2]=k[ei+12>>2];k[hi+16>>2]=k[ei+16>>2];hi=d+3204|0;x=0;fb(140,Ua|0,229503,4);ii=x;x=0;if(ii&1){gi=hi;Pb=355;break}ii=Ua+12|0;k[ii>>2]=0;k[Ua+16>>2]=3;k[Ua+20>>2]=4;i[Ua+24>>0]=0;k[Ua+28>>2]=2;i[hi>>0]=-126;x=0;xa(604,d+3208|0,Ua|0);ji=x;x=0;do if(ji&1){ki=hi;Pb=356}else{li=d+3220|0;k[li>>2]=k[ii>>2];k[li+4>>2]=k[ii+4>>2];k[li+8>>2]=k[ii+8>>2];k[li+12>>2]=k[ii+12>>2];k[li+16>>2]=k[ii+16>>2];li=d+3240|0;x=0;fb(140,Va|0,229508,4);mi=x;x=0;if(mi&1){ki=li;Pb=356;break}mi=Va+12|0;k[mi>>2]=0;k[Va+16>>2]=4;k[Va+20>>2]=5;i[Va+24>>0]=0;k[Va+28>>2]=2;i[li>>0]=-125;x=0;xa(604,d+3244|0,Va|0);ni=x;x=0;do if(ni&1){oi=li;Pb=357}else{pi=d+3256|0;k[pi>>2]=k[mi>>2];k[pi+4>>2]=k[mi+4>>2];k[pi+8>>2]=k[mi+8>>2];k[pi+12>>2]=k[mi+12>>2];k[pi+16>>2]=k[mi+16>>2];pi=d+3276|0;x=0;fb(140,Wa|0,229513,4);qi=x;x=0;if(qi&1){oi=pi;Pb=357;break}qi=Wa+12|0;k[qi>>2]=0;k[Wa+16>>2]=5;k[Wa+20>>2]=6;i[Wa+24>>0]=0;k[Wa+28>>2]=2;i[pi>>0]=-124;x=0;xa(604,d+3280|0,Wa|0);ri=x;x=0;do if(ri&1){si=pi;Pb=358}else{ti=d+3292|0;k[ti>>2]=k[qi>>2];k[ti+4>>2]=k[qi+4>>2];k[ti+8>>2]=k[qi+8>>2];k[ti+12>>2]=k[qi+12>>2];k[ti+16>>2]=k[qi+16>>2];ti=d+3312|0;x=0;fb(140,Xa|0,229518,4);ui=x;x=0;if(ui&1){si=ti;Pb=358;break}ui=Xa+12|0;k[ui>>2]=0;k[Xa+16>>2]=6;k[Xa+20>>2]=7;i[Xa+24>>0]=0;k[Xa+28>>2]=2;i[ti>>0]=-123;x=0;xa(604,d+3316|0,Xa|0);vi=x;x=0;do if(vi&1){wi=ti;Pb=359}else{xi=d+3328|0;k[xi>>2]=k[ui>>2];k[xi+4>>2]=k[ui+4>>2];k[xi+8>>2]=k[ui+8>>2];k[xi+12>>2]=k[ui+12>>2];k[xi+16>>2]=k[ui+16>>2];xi=d+3348|0;x=0;fb(140,Ya|0,229523,4);yi=x;x=0;if(yi&1){wi=xi;Pb=359;break}yi=Ya+12|0;k[yi>>2]=0;k[Ya+16>>2]=7;k[Ya+20>>2]=8;i[Ya+24>>0]=0;k[Ya+28>>2]=2;i[xi>>0]=-122;x=0;xa(604,d+3352|0,Ya|0);zi=x;x=0;do if(zi&1){Ai=xi;Pb=360}else{Bi=d+3364|0;k[Bi>>2]=k[yi>>2];k[Bi+4>>2]=k[yi+4>>2];k[Bi+8>>2]=k[yi+8>>2];k[Bi+12>>2]=k[yi+12>>2];k[Bi+16>>2]=k[yi+16>>2];Bi=d+3384|0;x=0;fb(140,Za|0,229528,4);Ci=x;x=0;if(Ci&1){Ai=Bi;Pb=360;break}Ci=Za+12|0;k[Ci>>2]=0;k[Za+16>>2]=8;k[Za+20>>2]=9;i[Za+24>>0]=0;k[Za+28>>2]=2;i[Bi>>0]=-121;x=0;xa(604,d+3388|0,Za|0);Di=x;x=0;do if(Di&1){Ei=Bi;Pb=361}else{Fi=d+3400|0;k[Fi>>2]=k[Ci>>2];k[Fi+4>>2]=k[Ci+4>>2];k[Fi+8>>2]=k[Ci+8>>2];k[Fi+12>>2]=k[Ci+12>>2];k[Fi+16>>2]=k[Ci+16>>2];Fi=d+3420|0;x=0;fb(140,_a|0,229533,4);Gi=x;x=0;if(Gi&1){Ei=Fi;Pb=361;break}Gi=_a+12|0;k[Gi>>2]=0;k[_a+16>>2]=9;k[_a+20>>2]=10;i[_a+24>>0]=0;k[_a+28>>2]=2;i[Fi>>0]=-120;x=0;xa(604,d+3424|0,_a|0);Hi=x;x=0;do if(Hi&1){Ii=Fi;Pb=362}else{Ji=d+3436|0;k[Ji>>2]=k[Gi>>2];k[Ji+4>>2]=k[Gi+4>>2];k[Ji+8>>2]=k[Gi+8>>2];k[Ji+12>>2]=k[Gi+12>>2];k[Ji+16>>2]=k[Gi+16>>2];Ji=d+3456|0;x=0;fb(140,$a|0,229538,5);Ki=x;x=0;if(Ki&1){Ii=Ji;Pb=362;break}Ki=$a+12|0;k[Ki>>2]=0;k[$a+16>>2]=10;k[$a+20>>2]=11;i[$a+24>>0]=0;k[$a+28>>2]=2;i[Ji>>0]=-119;x=0;xa(604,d+3460|0,$a|0);Li=x;x=0;do if(Li&1){Mi=Ji;Pb=363}else{Ni=d+3472|0;k[Ni>>2]=k[Ki>>2];k[Ni+4>>2]=k[Ki+4>>2];k[Ni+8>>2]=k[Ki+8>>2];k[Ni+12>>2]=k[Ki+12>>2];k[Ni+16>>2]=k[Ki+16>>2];Ni=d+3492|0;x=0;fb(140,ab|0,229544,5);Oi=x;x=0;if(Oi&1){Mi=Ni;Pb=363;break}Oi=ab+12|0;k[Oi>>2]=0;k[ab+16>>2]=11;k[ab+20>>2]=12;i[ab+24>>0]=0;k[ab+28>>2]=2;i[Ni>>0]=-118;x=0;xa(604,d+3496|0,ab|0);Pi=x;x=0;do if(Pi&1){Qi=Ni;Pb=364}else{Ri=d+3508|0;k[Ri>>2]=k[Oi>>2];k[Ri+4>>2]=k[Oi+4>>2];k[Ri+8>>2]=k[Oi+8>>2];k[Ri+12>>2]=k[Oi+12>>2];k[Ri+16>>2]=k[Oi+16>>2];Ri=d+3528|0;x=0;fb(140,bb|0,229550,5);Si=x;x=0;if(Si&1){Qi=Ri;Pb=364;break}Si=bb+12|0;k[Si>>2]=0;k[bb+16>>2]=12;k[bb+20>>2]=13;i[bb+24>>0]=0;k[bb+28>>2]=2;i[Ri>>0]=-117;x=0;xa(604,d+3532|0,bb|0);Ti=x;x=0;do if(Ti&1){Ui=Ri;Pb=365}else{Vi=d+3544|0;k[Vi>>2]=k[Si>>2];k[Vi+4>>2]=k[Si+4>>2];k[Vi+8>>2]=k[Si+8>>2];k[Vi+12>>2]=k[Si+12>>2];k[Vi+16>>2]=k[Si+16>>2];Vi=d+3564|0;x=0;fb(140,cb|0,229556,5);Wi=x;x=0;if(Wi&1){Ui=Vi;Pb=365;break}Wi=cb+12|0;k[Wi>>2]=0;k[cb+16>>2]=13;k[cb+20>>2]=14;i[cb+24>>0]=0;k[cb+28>>2]=2;i[Vi>>0]=-116;x=0;xa(604,d+3568|0,cb|0);Xi=x;x=0;do if(Xi&1){Yi=Vi;Pb=366}else{Zi=d+3580|0;k[Zi>>2]=k[Wi>>2];k[Zi+4>>2]=k[Wi+4>>2];k[Zi+8>>2]=k[Wi+8>>2];k[Zi+12>>2]=k[Wi+12>>2];k[Zi+16>>2]=k[Wi+16>>2];Zi=d+3600|0;x=0;fb(140,db|0,229562,5);_i=x;x=0;if(_i&1){Yi=Zi;Pb=366;break}_i=db+12|0;k[_i>>2]=0;k[db+16>>2]=14;k[db+20>>2]=15;i[db+24>>0]=0;k[db+28>>2]=2;i[Zi>>0]=-115;x=0;xa(604,d+3604|0,db|0);$i=x;x=0;do if($i&1){aj=Zi;Pb=367}else{bj=d+3616|0;k[bj>>2]=k[_i>>2];k[bj+4>>2]=k[_i+4>>2];k[bj+8>>2]=k[_i+8>>2];k[bj+12>>2]=k[_i+12>>2];k[bj+16>>2]=k[_i+16>>2];bj=d+3636|0;x=0;fb(140,eb|0,229568,5);cj=x;x=0;if(cj&1){aj=bj;Pb=367;break}cj=eb+12|0;k[cj>>2]=0;k[eb+16>>2]=15;k[eb+20>>2]=16;i[eb+24>>0]=0;k[eb+28>>2]=2;i[bj>>0]=-114;x=0;xa(604,d+3640|0,eb|0);dj=x;x=0;do if(dj&1){ej=bj;Pb=368}else{fj=d+3652|0;k[fj>>2]=k[cj>>2];k[fj+4>>2]=k[cj+4>>2];k[fj+8>>2]=k[cj+8>>2];k[fj+12>>2]=k[cj+12>>2];k[fj+16>>2]=k[cj+16>>2];fj=d+3672|0;x=0;fb(140,gb|0,229574,5);gj=x;x=0;if(gj&1){ej=fj;Pb=368;break}gj=gb+12|0;k[gj>>2]=0;k[gb+16>>2]=16;k[gb+20>>2]=17;i[gb+24>>0]=0;k[gb+28>>2]=2;i[fj>>0]=-113;x=0;xa(604,d+3676|0,gb|0);hj=x;x=0;do if(hj&1){ij=fj;Pb=369}else{jj=d+3688|0;k[jj>>2]=k[gj>>2];k[jj+4>>2]=k[gj+4>>2];k[jj+8>>2]=k[gj+8>>2];k[jj+12>>2]=k[gj+12>>2];k[jj+16>>2]=k[gj+16>>2];jj=d+3708|0;x=0;fb(140,hb|0,229580,5);kj=x;x=0;if(kj&1){ij=jj;Pb=369;break}kj=hb+12|0;k[kj>>2]=0;k[hb+16>>2]=2;k[hb+20>>2]=2;i[hb+24>>0]=0;k[hb+28>>2]=2;i[jj>>0]=-112;x=0;xa(604,d+3712|0,hb|0);lj=x;x=0;do if(lj&1){mj=jj;Pb=370}else{nj=d+3724|0;k[nj>>2]=k[kj>>2];k[nj+4>>2]=k[kj+4>>2];k[nj+8>>2]=k[kj+8>>2];k[nj+12>>2]=k[kj+12>>2];k[nj+16>>2]=k[kj+16>>2];nj=d+3744|0;x=0;fb(140,ib|0,229586,5);oj=x;x=0;if(oj&1){mj=nj;Pb=370;break}oj=ib+12|0;k[oj>>2]=0;k[ib+16>>2]=3;k[ib+20>>2]=3;i[ib+24>>0]=0;k[ib+28>>2]=2;i[nj>>0]=-111;x=0;xa(604,d+3748|0,ib|0);pj=x;x=0;do if(pj&1){qj=nj;Pb=371}else{rj=d+3760|0;k[rj>>2]=k[oj>>2];k[rj+4>>2]=k[oj+4>>2];k[rj+8>>2]=k[oj+8>>2];k[rj+12>>2]=k[oj+12>>2];k[rj+16>>2]=k[oj+16>>2];rj=d+3780|0;x=0;fb(140,jb|0,229592,5);sj=x;x=0;if(sj&1){qj=rj;Pb=371;break}sj=jb+12|0;k[sj>>2]=0;k[jb+16>>2]=4;k[jb+20>>2]=4;i[jb+24>>0]=0;k[jb+28>>2]=2;i[rj>>0]=-110;x=0;xa(604,d+3784|0,jb|0);tj=x;x=0;do if(tj&1){uj=rj;Pb=372}else{vj=d+3796|0;k[vj>>2]=k[sj>>2];k[vj+4>>2]=k[sj+4>>2];k[vj+8>>2]=k[sj+8>>2];k[vj+12>>2]=k[sj+12>>2];k[vj+16>>2]=k[sj+16>>2];vj=d+3816|0;x=0;fb(140,kb|0,229598,5);wj=x;x=0;if(wj&1){uj=vj;Pb=372;break}wj=kb+12|0;k[wj>>2]=0;k[kb+16>>2]=5;k[kb+20>>2]=5;i[kb+24>>0]=0;k[kb+28>>2]=2;i[vj>>0]=-109;x=0;xa(604,d+3820|0,kb|0);xj=x;x=0;do if(xj&1){yj=vj;Pb=373}else{zj=d+3832|0;k[zj>>2]=k[wj>>2];k[zj+4>>2]=k[wj+4>>2];k[zj+8>>2]=k[wj+8>>2];k[zj+12>>2]=k[wj+12>>2];k[zj+16>>2]=k[wj+16>>2];zj=d+3852|0;x=0;fb(140,lb|0,229604,5);Aj=x;x=0;if(Aj&1){yj=zj;Pb=373;break}Aj=lb+12|0;k[Aj>>2]=0;k[lb+16>>2]=6;k[lb+20>>2]=6;i[lb+24>>0]=0;k[lb+28>>2]=2;i[zj>>0]=-108;x=0;xa(604,d+3856|0,lb|0);Bj=x;x=0;do if(Bj&1){Cj=zj;Pb=374}else{Dj=d+3868|0;k[Dj>>2]=k[Aj>>2];k[Dj+4>>2]=k[Aj+4>>2];k[Dj+8>>2]=k[Aj+8>>2];k[Dj+12>>2]=k[Aj+12>>2];k[Dj+16>>2]=k[Aj+16>>2];Dj=d+3888|0;x=0;fb(140,mb|0,229610,5);Ej=x;x=0;if(Ej&1){Cj=Dj;Pb=374;break}Ej=mb+12|0;k[Ej>>2]=0;k[mb+16>>2]=7;k[mb+20>>2]=7;i[mb+24>>0]=0;k[mb+28>>2]=2;i[Dj>>0]=-107;x=0;xa(604,d+3892|0,mb|0);Fj=x;x=0;do if(Fj&1){Gj=Dj;Pb=375}else{Hj=d+3904|0;k[Hj>>2]=k[Ej>>2];k[Hj+4>>2]=k[Ej+4>>2];k[Hj+8>>2]=k[Ej+8>>2];k[Hj+12>>2]=k[Ej+12>>2];k[Hj+16>>2]=k[Ej+16>>2];Hj=d+3924|0;x=0;fb(140,nb|0,229616,5);Ij=x;x=0;if(Ij&1){Gj=Hj;Pb=375;break}Ij=nb+12|0;k[Ij>>2]=0;k[nb+16>>2]=8;k[nb+20>>2]=8;i[nb+24>>0]=0;k[nb+28>>2]=2;i[Hj>>0]=-106;x=0;xa(604,d+3928|0,nb|0);Jj=x;x=0;do if(Jj&1){Kj=Hj;Pb=376}else{Lj=d+3940|0;k[Lj>>2]=k[Ij>>2];k[Lj+4>>2]=k[Ij+4>>2];k[Lj+8>>2]=k[Ij+8>>2];k[Lj+12>>2]=k[Ij+12>>2];k[Lj+16>>2]=k[Ij+16>>2];Lj=d+3960|0;x=0;fb(140,ob|0,229622,5);Mj=x;x=0;if(Mj&1){Kj=Lj;Pb=376;break}Mj=ob+12|0;k[Mj>>2]=0;k[ob+16>>2]=9;k[ob+20>>2]=9;i[ob+24>>0]=0;k[ob+28>>2]=2;i[Lj>>0]=-105;x=0;xa(604,d+3964|0,ob|0);Nj=x;x=0;do if(Nj&1){Oj=Lj;Pb=377}else{Pj=d+3976|0;k[Pj>>2]=k[Mj>>2];k[Pj+4>>2]=k[Mj+4>>2];k[Pj+8>>2]=k[Mj+8>>2];k[Pj+12>>2]=k[Mj+12>>2];k[Pj+16>>2]=k[Mj+16>>2];Pj=d+3996|0;x=0;fb(140,pb|0,229628,5);Qj=x;x=0;if(Qj&1){Oj=Pj;Pb=377;break}Qj=pb+12|0;k[Qj>>2]=0;k[pb+16>>2]=10;k[pb+20>>2]=10;i[pb+24>>0]=0;k[pb+28>>2]=2;i[Pj>>0]=-104;x=0;xa(604,d+4e3|0,pb|0);Rj=x;x=0;do if(Rj&1){Sj=Pj;Pb=378}else{Tj=d+4012|0;k[Tj>>2]=k[Qj>>2];k[Tj+4>>2]=k[Qj+4>>2];k[Tj+8>>2]=k[Qj+8>>2];k[Tj+12>>2]=k[Qj+12>>2];k[Tj+16>>2]=k[Qj+16>>2];Tj=d+4032|0;x=0;fb(140,qb|0,229634,6);Uj=x;x=0;if(Uj&1){Sj=Tj;Pb=378;break}Uj=qb+12|0;k[Uj>>2]=0;k[qb+16>>2]=11;k[qb+20>>2]=11;i[qb+24>>0]=0;k[qb+28>>2]=2;i[Tj>>0]=-103;x=0;xa(604,d+4036|0,qb|0);Vj=x;x=0;do if(Vj&1){Wj=Tj;Pb=379}else{Xj=d+4048|0;k[Xj>>2]=k[Uj>>2];k[Xj+4>>2]=k[Uj+4>>2];k[Xj+8>>2]=k[Uj+8>>2];k[Xj+12>>2]=k[Uj+12>>2];k[Xj+16>>2]=k[Uj+16>>2];Xj=d+4068|0;x=0;fb(140,rb|0,229641,6);Yj=x;x=0;if(Yj&1){Wj=Xj;Pb=379;break}Yj=rb+12|0;k[Yj>>2]=0;k[rb+16>>2]=12;k[rb+20>>2]=12;i[rb+24>>0]=0;k[rb+28>>2]=2;i[Xj>>0]=-102;x=0;xa(604,d+4072|0,rb|0);Zj=x;x=0;do if(Zj&1){_j=Xj;Pb=380}else{$j=d+4084|0;k[$j>>2]=k[Yj>>2];k[$j+4>>2]=k[Yj+4>>2];k[$j+8>>2]=k[Yj+8>>2];k[$j+12>>2]=k[Yj+12>>2];k[$j+16>>2]=k[Yj+16>>2];$j=d+4104|0;x=0;fb(140,sb|0,229648,6);ak=x;x=0;if(ak&1){_j=$j;Pb=380;break}ak=sb+12|0;k[ak>>2]=0;k[sb+16>>2]=13;k[sb+20>>2]=13;i[sb+24>>0]=0;k[sb+28>>2]=2;i[$j>>0]=-101;x=0;xa(604,d+4108|0,sb|0);bk=x;x=0;do if(bk&1){ck=$j;Pb=381}else{dk=d+4120|0;k[dk>>2]=k[ak>>2];k[dk+4>>2]=k[ak+4>>2];k[dk+8>>2]=k[ak+8>>2];k[dk+12>>2]=k[ak+12>>2];k[dk+16>>2]=k[ak+16>>2];dk=d+4140|0;x=0;fb(140,tb|0,229655,6);ek=x;x=0;if(ek&1){ck=dk;Pb=381;break}ek=tb+12|0;k[ek>>2]=0;k[tb+16>>2]=14;k[tb+20>>2]=14;i[tb+24>>0]=0;k[tb+28>>2]=2;i[dk>>0]=-100;x=0;xa(604,d+4144|0,tb|0);fk=x;x=0;do if(fk&1){gk=dk;Pb=382}else{hk=d+4156|0;k[hk>>2]=k[ek>>2];k[hk+4>>2]=k[ek+4>>2];k[hk+8>>2]=k[ek+8>>2];k[hk+12>>2]=k[ek+12>>2];k[hk+16>>2]=k[ek+16>>2];hk=d+4176|0;x=0;fb(140,ub|0,229662,6);ik=x;x=0;if(ik&1){gk=hk;Pb=382;break}ik=ub+12|0;k[ik>>2]=0;k[ub+16>>2]=15;k[ub+20>>2]=15;i[ub+24>>0]=0;k[ub+28>>2]=2;i[hk>>0]=-99;x=0;xa(604,d+4180|0,ub|0);jk=x;x=0;do if(jk&1){kk=hk;Pb=383}else{lk=d+4192|0;k[lk>>2]=k[ik>>2];k[lk+4>>2]=k[ik+4>>2];k[lk+8>>2]=k[ik+8>>2];k[lk+12>>2]=k[ik+12>>2];k[lk+16>>2]=k[ik+16>>2];lk=d+4212|0;x=0;fb(140,vb|0,229669,6);mk=x;x=0;if(mk&1){kk=lk;Pb=383;break}mk=vb+12|0;k[mk>>2]=0;k[vb+16>>2]=16;k[vb+20>>2]=16;i[vb+24>>0]=0;k[vb+28>>2]=2;i[lk>>0]=-98;x=0;xa(604,d+4216|0,vb|0);nk=x;x=0;do if(nk&1){ok=lk;Pb=384}else{pk=d+4228|0;k[pk>>2]=k[mk>>2];k[pk+4>>2]=k[mk+4>>2];k[pk+8>>2]=k[mk+8>>2];k[pk+12>>2]=k[mk+12>>2];k[pk+16>>2]=k[mk+16>>2];pk=d+4248|0;x=0;fb(140,wb|0,229676,6);qk=x;x=0;if(qk&1){ok=pk;Pb=384;break}qk=wb+12|0;k[qk>>2]=0;k[wb+16>>2]=17;k[wb+20>>2]=17;i[wb+24>>0]=0;k[wb+28>>2]=2;i[pk>>0]=-97;x=0;xa(604,d+4252|0,wb|0);rk=x;x=0;do if(rk&1){sk=pk;Pb=385}else{tk=d+4264|0;k[tk>>2]=k[qk>>2];k[tk+4>>2]=k[qk+4>>2];k[tk+8>>2]=k[qk+8>>2];k[tk+12>>2]=k[qk+12>>2];k[tk+16>>2]=k[qk+16>>2];tk=d+4284|0;x=0;fb(140,xb|0,229683,4);uk=x;x=0;if(uk&1){sk=tk;Pb=385;break}uk=xb+12|0;k[uk>>2]=0;k[xb+16>>2]=2;k[xb+20>>2]=0;i[xb+24>>0]=1;k[xb+28>>2]=7;i[tk>>0]=-96;x=0;xa(604,d+4288|0,xb|0);vk=x;x=0;do if(vk&1){wk=tk;Pb=386}else{xk=d+4300|0;k[xk>>2]=k[uk>>2];k[xk+4>>2]=k[uk+4>>2];k[xk+8>>2]=k[uk+8>>2];k[xk+12>>2]=k[uk+12>>2];k[xk+16>>2]=k[uk+16>>2];xk=d+4320|0;x=0;fb(140,yb|0,229688,4);yk=x;x=0;if(yk&1){wk=xk;Pb=386;break}yk=yb+12|0;k[yk>>2]=0;k[yb+16>>2]=3;k[yb+20>>2]=0;i[yb+24>>0]=1;k[yb+28>>2]=7;i[xk>>0]=-95;x=0;xa(604,d+4324|0,yb|0);zk=x;x=0;do if(zk&1){Ak=xk;Pb=387}else{Bk=d+4336|0;k[Bk>>2]=k[yk>>2];k[Bk+4>>2]=k[yk+4>>2];k[Bk+8>>2]=k[yk+8>>2];k[Bk+12>>2]=k[yk+12>>2];k[Bk+16>>2]=k[yk+16>>2];Bk=d+4356|0;x=0;fb(140,zb|0,229693,4);Ck=x;x=0;if(Ck&1){Ak=Bk;Pb=387;break}Ck=zb+12|0;k[Ck>>2]=0;k[zb+16>>2]=4;k[zb+20>>2]=0;i[zb+24>>0]=1;k[zb+28>>2]=7;i[Bk>>0]=-94;x=0;xa(604,d+4360|0,zb|0);Dk=x;x=0;do if(Dk&1){Ek=Bk;Pb=388}else{Fk=d+4372|0;k[Fk>>2]=k[Ck>>2];k[Fk+4>>2]=k[Ck+4>>2];k[Fk+8>>2]=k[Ck+8>>2];k[Fk+12>>2]=k[Ck+12>>2];k[Fk+16>>2]=k[Ck+16>>2];Fk=d+4392|0;x=0;fb(140,Ab|0,229698,4);Gk=x;x=0;if(Gk&1){Ek=Fk;Pb=388;break}Gk=Ab+12|0;k[Gk>>2]=0;k[Ab+16>>2]=5;k[Ab+20>>2]=0;i[Ab+24>>0]=1;k[Ab+28>>2]=7;i[Fk>>0]=-93;x=0;xa(604,d+4396|0,Ab|0);Hk=x;x=0;do if(Hk&1){Ik=Fk;Pb=389}else{Jk=d+4408|0;k[Jk>>2]=k[Gk>>2];k[Jk+4>>2]=k[Gk+4>>2];k[Jk+8>>2]=k[Gk+8>>2];k[Jk+12>>2]=k[Gk+12>>2];k[Jk+16>>2]=k[Gk+16>>2];Jk=d+4428|0;x=0;fb(140,Bb|0,229703,4);Kk=x;x=0;if(Kk&1){Ik=Jk;Pb=389;break}Kk=Bb+12|0;k[Kk>>2]=0;k[Bb+16>>2]=6;k[Bb+20>>2]=0;i[Bb+24>>0]=1;k[Bb+28>>2]=7;i[Jk>>0]=-92;x=0;xa(604,d+4432|0,Bb|0);Lk=x;x=0;do if(Lk&1){Mk=Jk;Pb=390}else{Nk=d+4444|0;k[Nk>>2]=k[Kk>>2];k[Nk+4>>2]=k[Kk+4>>2];k[Nk+8>>2]=k[Kk+8>>2];k[Nk+12>>2]=k[Kk+12>>2];k[Nk+16>>2]=k[Kk+16>>2];Nk=d+4464|0;x=0;fb(140,Cb|0,229708,6);Ok=x;x=0;if(Ok&1){Mk=Nk;Pb=390;break}Ok=Cb+12|0;k[Ok>>2]=0;k[Cb+16>>2]=3;k[Cb+20>>2]=1;i[Cb+24>>0]=1;k[Cb+28>>2]=7;i[Nk>>0]=-16;x=0;xa(604,d+4468|0,Cb|0);Pk=x;x=0;do if(Pk&1){Qk=Nk;Pb=391}else{Rk=d+4480|0;k[Rk>>2]=k[Ok>>2];k[Rk+4>>2]=k[Ok+4>>2];k[Rk+8>>2]=k[Ok+8>>2];k[Rk+12>>2]=k[Ok+12>>2];k[Rk+16>>2]=k[Ok+16>>2];Rk=d+4500|0;x=0;fb(140,Db|0,229715,4);Sk=x;x=0;if(Sk&1){Qk=Rk;Pb=391;break}Sk=Db+12|0;k[Sk>>2]=0;k[Db+16>>2]=7;k[Db+20>>2]=1;i[Db+24>>0]=1;k[Db+28>>2]=7;i[Rk>>0]=-15;x=0;xa(604,d+4504|0,Db|0);Tk=x;x=0;do if(Tk&1){Uk=Rk;Pb=392}else{Vk=d+4516|0;k[Vk>>2]=k[Sk>>2];k[Vk+4>>2]=k[Sk+4>>2];k[Vk+8>>2]=k[Sk+8>>2];k[Vk+12>>2]=k[Sk+12>>2];k[Vk+16>>2]=k[Sk+16>>2];Vk=d+4536|0;x=0;fb(140,Eb|0,229720,8);Wk=x;x=0;if(Wk&1){Uk=Vk;Pb=392;break}Wk=Eb+12|0;k[Wk>>2]=0;k[Eb+16>>2]=7;k[Eb+20>>2]=1;i[Eb+24>>0]=1;k[Eb+28>>2]=7;i[Vk>>0]=-14;x=0;xa(604,d+4540|0,Eb|0);Xk=x;x=0;do if(Xk&1){Yk=Vk;Pb=393}else{Zk=d+4552|0;k[Zk>>2]=k[Wk>>2];k[Zk+4>>2]=k[Wk+4>>2];k[Zk+8>>2]=k[Wk+8>>2];k[Zk+12>>2]=k[Wk+12>>2];k[Zk+16>>2]=k[Wk+16>>2];Zk=d+4572|0;x=0;fb(140,Fb|0,229729,6);_k=x;x=0;if(_k&1){Yk=Zk;Pb=393;break}_k=Fb+12|0;k[_k>>2]=0;k[Fb+16>>2]=2;k[Fb+20>>2]=0;i[Fb+24>>0]=1;k[Fb+28>>2]=0;i[Zk>>0]=-13;x=0;xa(604,d+4576|0,Fb|0);$k=x;x=0;do if($k&1){al=Zk;Pb=394}else{bl=d+4588|0;k[bl>>2]=k[_k>>2];k[bl+4>>2]=k[_k+4>>2];k[bl+8>>2]=k[_k+8>>2];k[bl+12>>2]=k[_k+12>>2];k[bl+16>>2]=k[_k+16>>2];bl=d+4608|0;x=0;fb(140,Gb|0,229736,12);cl=x;x=0;if(cl&1){al=bl;Pb=394;break}cl=Gb+12|0;k[cl>>2]=0;k[Gb+16>>2]=6;k[Gb+20>>2]=1;i[Gb+24>>0]=1;k[Gb+28>>2]=7;i[bl>>0]=-12;x=0;xa(604,d+4612|0,Gb|0);dl=x;x=0;do if(dl&1){el=bl;Pb=395}else{fl=d+4624|0;k[fl>>2]=k[cl>>2];k[fl+4>>2]=k[cl+4>>2];k[fl+8>>2]=k[cl+8>>2];k[fl+12>>2]=k[cl+12>>2];k[fl+16>>2]=k[cl+16>>2];fl=d+4644|0;x=0;fb(140,Hb|0,229749,7);gl=x;x=0;if(gl&1){el=fl;Pb=395;break}gl=Hb+12|0;k[gl>>2]=0;k[Hb+16>>2]=1;k[Hb+20>>2]=0;i[Hb+24>>0]=1;k[Hb+28>>2]=0;i[fl>>0]=-1;x=0;xa(604,d+4648|0,Hb|0);hl=x;x=0;if(!(hl&1)){hl=d+4660|0;k[hl>>2]=k[gl>>2];k[hl+4>>2]=k[gl+4>>2];k[hl+8>>2]=k[gl+8>>2];k[hl+12>>2]=k[gl+12>>2];k[hl+16>>2]=k[gl+16>>2];k[7625]=0;k[7626]=0;k[7624]=30500;gl=d+4680|0;hl=d;while(1){k[c>>2]=30500;x=0;k[b>>2]=k[c>>2];Fa(127,30496,b|0,hl|0)|0;il=x;x=0;if(il&1){Pb=397;break}hl=hl+36|0;if((hl|0)==(gl|0)){jl=gl;Pb=264;break}}if((Pb|0)==264){while(1){Pb=0;K2a(jl+-32|0);jl=jl+-36|0;if((jl|0)==(d|0))break;else Pb=264}K2a(Hb);K2a(Gb);K2a(Fb);K2a(Eb);K2a(Db);K2a(Cb);K2a(Bb);K2a(Ab);K2a(zb);K2a(yb);K2a(xb);K2a(wb);K2a(vb);K2a(ub);K2a(tb);K2a(sb);K2a(rb);K2a(qb);K2a(pb);K2a(ob);K2a(nb);K2a(mb);K2a(lb);K2a(kb);K2a(jb);K2a(ib);K2a(hb);K2a(gb);K2a(eb);K2a(db);K2a(cb);K2a(bb);K2a(ab);K2a($a);K2a(_a);K2a(Za);K2a(Ya);K2a(Xa);K2a(Wa);K2a(Va);K2a(Ua);K2a(Ta);K2a(Sa);K2a(Ra);K2a(Qa);K2a(Pa);K2a(Oa);K2a(Na);K2a(Ma);K2a(La);K2a(Ka);K2a(Ja);K2a(Ia);K2a(Ha);K2a(Ga);K2a(Ea);K2a(Da);K2a(Ca);K2a(Ba);K2a(Aa);K2a(za);K2a(ya);K2a(wa);K2a(va);K2a(ua);K2a(ta);K2a(sa);K2a(ra);K2a(qa);K2a(pa);K2a(oa);K2a(na);K2a(ma);K2a(la);K2a(ka);K2a(ja);K2a(ia);K2a(ha);K2a(ga);K2a(fa);K2a(ea);K2a(da);K2a(ca);K2a(ba);K2a(aa);K2a($);K2a(_);K2a(Z);K2a(Y);K2a(X);K2a(W);K2a(V);K2a(U);K2a(T);K2a(S);K2a(R);K2a(Q);K2a(P);K2a(O);K2a(N);K2a(L);K2a(K);K2a(J);K2a(I);K2a(H);K2a(G);K2a(F);K2a(E);K2a(D);K2a(C);K2a(B);K2a(A);K2a(z);K2a(y);K2a(w);K2a(v);K2a(u);K2a(t);K2a(s);K2a(q);K2a(p);K2a(o);K2a(n);K2a(m);K2a(l);K2a(j);K2a(h);K2a(g);K2a(f);K2a(e);r=a;return}else if((Pb|0)==397){hl=Hc()|0;il=M;eR(30496,k[7625]|0);kl=gl;do{K2a(kl+-32|0);kl=kl+-36|0}while((kl|0)!=(d|0));ll=0;ml=hl;nl=il}}else{il=Hc()|0;ll=1;ml=il;nl=M}K2a(Hb);ol=ll;pl=ml;ql=fl;rl=nl}while(0);if((Pb|0)==395){cl=Hc()|0;ol=1;pl=cl;ql=el;rl=M}K2a(Gb);sl=ql;tl=ol;ul=pl;vl=rl}while(0);if((Pb|0)==394){_k=Hc()|0;sl=al;tl=1;ul=_k;vl=M}K2a(Fb);wl=sl;xl=tl;yl=ul;zl=vl}while(0);if((Pb|0)==393){Wk=Hc()|0;wl=Yk;xl=1;yl=Wk;zl=M}K2a(Eb);Al=wl;Bl=xl;Cl=yl;Dl=zl}while(0);if((Pb|0)==392){Sk=Hc()|0;Al=Uk;Bl=1;Cl=Sk;Dl=M}K2a(Db);El=Al;Fl=Bl;Gl=Cl;Hl=Dl}while(0);if((Pb|0)==391){Ok=Hc()|0;El=Qk;Fl=1;Gl=Ok;Hl=M}K2a(Cb);Il=El;Jl=Fl;Kl=Gl;Ll=Hl}while(0);if((Pb|0)==390){Kk=Hc()|0;Il=Mk;Jl=1;Kl=Kk;Ll=M}K2a(Bb);Ml=Il;Nl=Jl;Ol=Kl;Pl=Ll}while(0);if((Pb|0)==389){Gk=Hc()|0;Ml=Ik;Nl=1;Ol=Gk;Pl=M}K2a(Ab);Ql=Ml;Rl=Nl;Sl=Ol;Tl=Pl}while(0);if((Pb|0)==388){Ck=Hc()|0;Ql=Ek;Rl=1;Sl=Ck;Tl=M}K2a(zb);Ul=Ql;Vl=Rl;Wl=Sl;Xl=Tl}while(0);if((Pb|0)==387){yk=Hc()|0;Ul=Ak;Vl=1;Wl=yk;Xl=M}K2a(yb);Yl=Vl;Zl=Wl;_l=Xl;$l=Ul}while(0);if((Pb|0)==386){uk=Hc()|0;Yl=1;Zl=uk;_l=M;$l=wk}K2a(xb);am=Yl;bm=Zl;cm=_l;dm=$l}while(0);if((Pb|0)==385){qk=Hc()|0;am=1;bm=qk;cm=M;dm=sk}K2a(wb);em=am;fm=bm;gm=cm;hm=dm}while(0);if((Pb|0)==384){mk=Hc()|0;em=1;fm=mk;gm=M;hm=ok}K2a(vb);im=em;jm=fm;km=gm;lm=hm}while(0);if((Pb|0)==383){ik=Hc()|0;im=1;jm=ik;km=M;lm=kk}K2a(ub);mm=im;nm=jm;om=lm;pm=km}while(0);if((Pb|0)==382){ek=Hc()|0;mm=1;nm=ek;om=gk;pm=M}K2a(tb);qm=om;rm=mm;sm=nm;tm=pm}while(0);if((Pb|0)==381){ak=Hc()|0;qm=ck;rm=1;sm=ak;tm=M}K2a(sb);um=qm;vm=rm;wm=sm;xm=tm}while(0);if((Pb|0)==380){Yj=Hc()|0;um=_j;vm=1;wm=Yj;xm=M}K2a(rb);ym=um;zm=vm;Am=wm;Bm=xm}while(0);if((Pb|0)==379){Uj=Hc()|0;ym=Wj;zm=1;Am=Uj;Bm=M}K2a(qb);Cm=ym;Dm=zm;Em=Am;Fm=Bm}while(0);if((Pb|0)==378){Qj=Hc()|0;Cm=Sj;Dm=1;Em=Qj;Fm=M}K2a(pb);Gm=Cm;Hm=Dm;Im=Em;Jm=Fm}while(0);if((Pb|0)==377){Mj=Hc()|0;Gm=Oj;Hm=1;Im=Mj;Jm=M}K2a(ob);Km=Gm;Lm=Hm;Mm=Im;Nm=Jm}while(0);if((Pb|0)==376){Ij=Hc()|0;Km=Kj;Lm=1;Mm=Ij;Nm=M}K2a(nb);Om=Km;Pm=Lm;Qm=Mm;Rm=Nm}while(0);if((Pb|0)==375){Ej=Hc()|0;Om=Gj;Pm=1;Qm=Ej;Rm=M}K2a(mb);Sm=Om;Tm=Pm;Um=Qm;Vm=Rm}while(0);if((Pb|0)==374){Aj=Hc()|0;Sm=Cj;Tm=1;Um=Aj;Vm=M}K2a(lb);Wm=Sm;Xm=Tm;Ym=Um;Zm=Vm}while(0);if((Pb|0)==373){wj=Hc()|0;Wm=yj;Xm=1;Ym=wj;Zm=M}K2a(kb);_m=Wm;$m=Xm;an=Ym;bn=Zm}while(0);if((Pb|0)==372){sj=Hc()|0;_m=uj;$m=1;an=sj;bn=M}K2a(jb);cn=_m;dn=$m;en=an;fn=bn}while(0);if((Pb|0)==371){oj=Hc()|0;cn=qj;dn=1;en=oj;fn=M}K2a(ib);gn=cn;hn=dn;jn=en;kn=fn}while(0);if((Pb|0)==370){kj=Hc()|0;gn=mj;hn=1;jn=kj;kn=M}K2a(hb);ln=gn;mn=hn;nn=jn;on=kn}while(0);if((Pb|0)==369){gj=Hc()|0;ln=ij;mn=1;nn=gj;on=M}K2a(gb);pn=ln;qn=mn;rn=nn;sn=on}while(0);if((Pb|0)==368){cj=Hc()|0;pn=ej;qn=1;rn=cj;sn=M}K2a(eb);tn=pn;un=qn;vn=rn;wn=sn}while(0);if((Pb|0)==367){_i=Hc()|0;tn=aj;un=1;vn=_i;wn=M}K2a(db);xn=tn;yn=un;zn=vn;An=wn}while(0);if((Pb|0)==366){Wi=Hc()|0;xn=Yi;yn=1;zn=Wi;An=M}K2a(cb);Bn=xn;Cn=yn;Dn=zn;En=An}while(0);if((Pb|0)==365){Si=Hc()|0;Bn=Ui;Cn=1;Dn=Si;En=M}K2a(bb);Fn=Bn;Gn=Cn;Hn=Dn;In=En}while(0);if((Pb|0)==364){Oi=Hc()|0;Fn=Qi;Gn=1;Hn=Oi;In=M}K2a(ab);Jn=Fn;Kn=Gn;Ln=Hn;Mn=In}while(0);if((Pb|0)==363){Ki=Hc()|0;Jn=Mi;Kn=1;Ln=Ki;Mn=M}K2a($a);Nn=Jn;On=Kn;Pn=Ln;Qn=Mn}while(0);if((Pb|0)==362){Gi=Hc()|0;Nn=Ii;On=1;Pn=Gi;Qn=M}K2a(_a);Rn=Nn;Sn=On;Tn=Pn;Un=Qn}while(0);if((Pb|0)==361){Ci=Hc()|0;Rn=Ei;Sn=1;Tn=Ci;Un=M}K2a(Za);Vn=Rn;Wn=Sn;Xn=Tn;Yn=Un}while(0);if((Pb|0)==360){yi=Hc()|0;Vn=Ai;Wn=1;Xn=yi;Yn=M}K2a(Ya);Zn=Vn;_n=Wn;$n=Xn;ao=Yn}while(0);if((Pb|0)==359){ui=Hc()|0;Zn=wi;_n=1;$n=ui;ao=M}K2a(Xa);bo=Zn;co=_n;eo=$n;fo=ao}while(0);if((Pb|0)==358){qi=Hc()|0;bo=si;co=1;eo=qi;fo=M}K2a(Wa);go=bo;ho=co;io=eo;jo=fo}while(0);if((Pb|0)==357){mi=Hc()|0;go=oi;ho=1;io=mi;jo=M}K2a(Va);ko=go;lo=ho;mo=io;no=jo}while(0);if((Pb|0)==356){ii=Hc()|0;ko=ki;lo=1;mo=ii;no=M}K2a(Ua);oo=ko;po=lo;qo=mo;ro=no}while(0);if((Pb|0)==355){ei=Hc()|0;oo=gi;po=1;qo=ei;ro=M}K2a(Ta);so=oo;to=po;uo=qo;vo=ro}while(0);if((Pb|0)==354){ai=Hc()|0;so=ci;to=1;uo=ai;vo=M}K2a(Sa);wo=so;xo=to;yo=uo;zo=vo}while(0);if((Pb|0)==353){Yh=Hc()|0;wo=_h;xo=1;yo=Yh;zo=M}K2a(Ra);Ao=wo;Bo=xo;Co=yo;Do=zo}while(0);if((Pb|0)==352){Uh=Hc()|0;Ao=Wh;Bo=1;Co=Uh;Do=M}K2a(Qa);Eo=Ao;Fo=Bo;Go=Co;Ho=Do}while(0);if((Pb|0)==351){Qh=Hc()|0;Eo=Sh;Fo=1;Go=Qh;Ho=M}K2a(Pa);Io=Eo;Jo=Fo;Ko=Go;Lo=Ho}while(0);if((Pb|0)==350){Mh=Hc()|0;Io=Oh;Jo=1;Ko=Mh;Lo=M}K2a(Oa);Mo=Io;No=Jo;Oo=Ko;Po=Lo}while(0);if((Pb|0)==349){Ih=Hc()|0;Mo=Kh;No=1;Oo=Ih;Po=M}K2a(Na);Qo=Mo;Ro=No;So=Oo;To=Po}while(0);if((Pb|0)==348){Eh=Hc()|0;Qo=Gh;Ro=1;So=Eh;To=M}K2a(Ma);Uo=Qo;Vo=Ro;Wo=So;Xo=To}while(0);if((Pb|0)==347){Ah=Hc()|0;Uo=Ch;Vo=1;Wo=Ah;Xo=M}K2a(La);Yo=Uo;Zo=Vo;_o=Wo;$o=Xo}while(0);if((Pb|0)==346){wh=Hc()|0;Yo=yh;Zo=1;_o=wh;$o=M}K2a(Ka);ap=Yo;bp=Zo;cp=_o;dp=$o}while(0);if((Pb|0)==345){sh=Hc()|0;ap=uh;bp=1;cp=sh;dp=M}K2a(Ja);ep=ap;fp=bp;gp=cp;hp=dp}while(0);if((Pb|0)==344){oh=Hc()|0;ep=qh;fp=1;gp=oh;hp=M}K2a(Ia);ip=ep;jp=fp;kp=gp;lp=hp}while(0);if((Pb|0)==343){kh=Hc()|0;ip=mh;jp=1;kp=kh;lp=M}K2a(Ha);mp=ip;np=jp;op=kp;pp=lp}while(0);if((Pb|0)==342){gh=Hc()|0;mp=ih;np=1;op=gh;pp=M}K2a(Ga);qp=mp;rp=np;sp=op;tp=pp}while(0);if((Pb|0)==341){ch=Hc()|0;qp=eh;rp=1;sp=ch;tp=M}K2a(Ea);up=qp;vp=rp;wp=sp;xp=tp}while(0);if((Pb|0)==340){_g=Hc()|0;up=ah;vp=1;wp=_g;xp=M}K2a(Da);yp=up;zp=vp;Ap=wp;Bp=xp}while(0);if((Pb|0)==339){Wg=Hc()|0;yp=Yg;zp=1;Ap=Wg;Bp=M}K2a(Ca);Cp=yp;Dp=zp;Ep=Ap;Fp=Bp}while(0);if((Pb|0)==338){Sg=Hc()|0;Cp=Ug;Dp=1;Ep=Sg;Fp=M}K2a(Ba);Gp=Cp;Hp=Dp;Ip=Ep;Jp=Fp}while(0);if((Pb|0)==337){Og=Hc()|0;Gp=Qg;Hp=1;Ip=Og;Jp=M}K2a(Aa);Kp=Gp;Lp=Hp;Mp=Ip;Np=Jp}while(0);if((Pb|0)==336){Kg=Hc()|0;Kp=Mg;Lp=1;Mp=Kg;Np=M}K2a(za);Op=Kp;Pp=Lp;Qp=Mp;Rp=Np}while(0);if((Pb|0)==335){Gg=Hc()|0;Op=Ig;Pp=1;Qp=Gg;Rp=M}K2a(ya);Sp=Op;Tp=Pp;Up=Qp;Vp=Rp}while(0);if((Pb|0)==334){Cg=Hc()|0;Sp=Eg;Tp=1;Up=Cg;Vp=M}K2a(wa);Wp=Sp;Xp=Tp;Yp=Up;Zp=Vp}while(0);if((Pb|0)==333){yg=Hc()|0;Wp=Ag;Xp=1;Yp=yg;Zp=M}K2a(va);_p=Wp;$p=Xp;aq=Yp;bq=Zp}while(0);if((Pb|0)==332){ug=Hc()|0;_p=wg;$p=1;aq=ug;bq=M}K2a(ua);cq=_p;dq=$p;eq=aq;fq=bq}while(0);if((Pb|0)==331){qg=Hc()|0;cq=sg;dq=1;eq=qg;fq=M}K2a(ta);gq=cq;hq=dq;iq=eq;jq=fq}while(0);if((Pb|0)==330){mg=Hc()|0;gq=og;hq=1;iq=mg;jq=M}K2a(sa);kq=gq;lq=hq;mq=iq;nq=jq}while(0);if((Pb|0)==329){ig=Hc()|0;kq=kg;lq=1;mq=ig;nq=M}K2a(ra);oq=kq;pq=lq;qq=mq;rq=nq}while(0);if((Pb|0)==328){eg=Hc()|0;oq=gg;pq=1;qq=eg;rq=M}K2a(qa);sq=oq;tq=pq;uq=qq;vq=rq}while(0);if((Pb|0)==327){ag=Hc()|0;sq=cg;tq=1;uq=ag;vq=M}K2a(pa);wq=sq;xq=tq;yq=vq;zq=uq}while(0);if((Pb|0)==326){Yf=Hc()|0;wq=_f;xq=1;yq=M;zq=Yf}K2a(oa);Aq=wq;Bq=xq;Cq=yq;Dq=zq}while(0);if((Pb|0)==325){Uf=Hc()|0;Aq=Wf;Bq=1;Cq=M;Dq=Uf}K2a(na);Eq=Aq;Fq=Bq;Gq=Cq;Hq=Dq}while(0);if((Pb|0)==324){Qf=Hc()|0;Eq=Sf;Fq=1;Gq=M;Hq=Qf}K2a(ma);Iq=Eq;Jq=Fq;Kq=Gq;Lq=Hq}while(0);if((Pb|0)==323){Mf=Hc()|0;Iq=Of;Jq=1;Kq=M;Lq=Mf}K2a(la);Mq=Iq;Nq=Jq;Oq=Kq;Pq=Lq}while(0);if((Pb|0)==322){If=Hc()|0;Mq=Kf;Nq=1;Oq=M;Pq=If}K2a(ka);Qq=Mq;Rq=Nq;Sq=Oq;Tq=Pq}while(0);if((Pb|0)==321){Ef=Hc()|0;Qq=Gf;Rq=1;Sq=M;Tq=Ef}K2a(ja);Uq=Qq;Vq=Rq;Wq=Sq;Xq=Tq}while(0);if((Pb|0)==320){Af=Hc()|0;Uq=Cf;Vq=1;Wq=M;Xq=Af}K2a(ia);Yq=Uq;Zq=Vq;_q=Wq;$q=Xq}while(0);if((Pb|0)==319){wf=Hc()|0;Yq=yf;Zq=1;_q=M;$q=wf}K2a(ha);ar=Yq;br=Zq;cr=_q;dr=$q}while(0);if((Pb|0)==318){sf=Hc()|0;ar=uf;br=1;cr=M;dr=sf}K2a(ga);er=ar;fr=br;gr=cr;hr=dr}while(0);if((Pb|0)==317){of=Hc()|0;er=qf;fr=1;gr=M;hr=of}K2a(fa);ir=er;jr=fr;kr=gr;lr=hr}while(0);if((Pb|0)==316){kf=Hc()|0;ir=mf;jr=1;kr=M;lr=kf}K2a(ea);mr=ir;nr=jr;or=kr;pr=lr}while(0);if((Pb|0)==315){ff=Hc()|0;mr=hf;nr=1;or=M;pr=ff}K2a(da);qr=mr;rr=nr;sr=or;tr=pr}while(0);if((Pb|0)==314){bf=Hc()|0;qr=df;rr=1;sr=M;tr=bf}K2a(ca);ur=qr;vr=rr;wr=sr;xr=tr}while(0);if((Pb|0)==313){Ze=Hc()|0;ur=$e;vr=1;wr=M;xr=Ze}K2a(ba);yr=ur;zr=vr;Ar=wr;Br=xr}while(0);if((Pb|0)==312){Ve=Hc()|0;yr=Xe;zr=1;Ar=M;Br=Ve}K2a(aa);Cr=yr;Dr=zr;Er=Ar;Fr=Br}while(0);if((Pb|0)==311){Re=Hc()|0;Cr=Te;Dr=1;Er=M;Fr=Re}K2a($);Gr=Cr;Hr=Dr;Ir=Er;Jr=Fr}while(0);if((Pb|0)==310){Ne=Hc()|0;Gr=Pe;Hr=1;Ir=M;Jr=Ne}K2a(_);Kr=Gr;Lr=Hr;Mr=Ir;Nr=Jr}while(0);if((Pb|0)==309){Je=Hc()|0;Kr=Le;Lr=1;Mr=M;Nr=Je}K2a(Z);Or=Kr;Pr=Lr;Qr=Mr;Rr=Nr}while(0);if((Pb|0)==308){Fe=Hc()|0;Or=He;Pr=1;Qr=M;Rr=Fe}K2a(Y);Sr=Or;Tr=Pr;Ur=Qr;Vr=Rr}while(0);if((Pb|0)==307){Be=Hc()|0;Sr=De;Tr=1;Ur=M;Vr=Be}K2a(X);Wr=Sr;Xr=Tr;Yr=Ur;Zr=Vr}while(0);if((Pb|0)==306){xe=Hc()|0;Wr=ze;Xr=1;Yr=M;Zr=xe}K2a(W);_r=Wr;$r=Xr;as=Yr;bs=Zr}while(0);if((Pb|0)==305){te=Hc()|0;_r=ve;$r=1;as=M;bs=te}K2a(V);cs=_r;ds=$r;es=as;fs=bs}while(0);if((Pb|0)==304){pe=Hc()|0;cs=re;ds=1;es=M;fs=pe}K2a(U);gs=cs;hs=ds;is=es;js=fs}while(0);if((Pb|0)==303){le=Hc()|0;gs=ne;hs=1;is=M;js=le}K2a(T);ks=gs;ls=hs;ms=is;ns=js}while(0);if((Pb|0)==302){he=Hc()|0;ks=je;ls=1;ms=M;ns=he}K2a(S);os=ks;ps=ls;qs=ms;rs=ns}while(0);if((Pb|0)==301){de=Hc()|0;os=fe;ps=1;qs=M;rs=de}K2a(R);ss=os;ts=ps;us=qs;vs=rs}while(0);if((Pb|0)==300){$d=Hc()|0;ss=be;ts=1;us=M;vs=$d}K2a(Q);ws=ss;xs=ts;ys=us;zs=vs}while(0);if((Pb|0)==299){Xd=Hc()|0;ws=Zd;xs=1;ys=M;zs=Xd}K2a(P);As=ws;Bs=xs;Cs=ys;Ds=zs}while(0);if((Pb|0)==298){Td=Hc()|0;As=Vd;Bs=1;Cs=M;Ds=Td}K2a(O);Es=As;Fs=Bs;Gs=Cs;Hs=Ds}while(0);if((Pb|0)==297){Pd=Hc()|0;Es=Rd;Fs=1;Gs=M;Hs=Pd}K2a(N);Is=Fs;Js=Gs;Ks=Hs;Ls=Es}while(0);if((Pb|0)==296){Ld=Hc()|0;Is=1;Js=M;Ks=Ld;Ls=Nd}K2a(L);Ms=Is;Ns=Js;Os=Ks;Ps=Ls}while(0);if((Pb|0)==295){Hd=Hc()|0;Ms=1;Ns=M;Os=Hd;Ps=Jd}K2a(K);Qs=Ms;Rs=Ns;Ss=Os;Ts=Ps}while(0);if((Pb|0)==294){Dd=Hc()|0;Qs=1;Rs=M;Ss=Dd;Ts=Fd}K2a(J);Us=Qs;Vs=Rs;Ws=Ss;Xs=Ts}while(0);if((Pb|0)==293){zd=Hc()|0;Us=1;Vs=M;Ws=zd;Xs=Bd}K2a(I);Ys=Us;Zs=Vs;_s=Ws;$s=Xs}while(0);if((Pb|0)==292){vd=Hc()|0;Ys=1;Zs=M;_s=vd;$s=xd}K2a(H);at=Ys;bt=Zs;ct=_s;dt=$s}while(0);if((Pb|0)==291){rd=Hc()|0;at=1;bt=M;ct=rd;dt=td}K2a(G);et=at;ft=bt;gt=ct;ht=dt}while(0);if((Pb|0)==290){nd=Hc()|0;et=1;ft=M;gt=nd;ht=pd}K2a(F);it=et;jt=ft;kt=gt;lt=ht}while(0);if((Pb|0)==289){jd=Hc()|0;it=1;jt=M;kt=jd;lt=ld}K2a(E);mt=it;nt=jt;ot=kt;pt=lt}while(0);if((Pb|0)==288){fd=Hc()|0;mt=1;nt=M;ot=fd;pt=hd}K2a(D);qt=mt;rt=nt;st=ot;tt=pt}while(0);if((Pb|0)==287){bd=Hc()|0;qt=1;rt=M;st=bd;tt=dd}K2a(C);ut=qt;vt=rt;wt=st;xt=tt}while(0);if((Pb|0)==286){Zc=Hc()|0;ut=1;vt=M;wt=Zc;xt=$c}K2a(B);yt=ut;zt=vt;At=wt;Bt=xt}while(0);if((Pb|0)==285){Vc=Hc()|0;yt=1;zt=M;At=Vc;Bt=Xc}K2a(A);Ct=yt;Dt=zt;Et=At;Ft=Bt}while(0);if((Pb|0)==284){Qc=Hc()|0;Ct=1;Dt=M;Et=Qc;Ft=Tc}K2a(z);Gt=Ct;Ht=Dt;It=Et;Jt=Ft}while(0);if((Pb|0)==283){Mc=Hc()|0;Gt=1;Ht=M;It=Mc;Jt=Oc}K2a(y);Kt=Gt;Lt=Ht;Mt=It;Nt=Jt}while(0);if((Pb|0)==282){Ic=Hc()|0;Kt=1;Lt=M;Mt=Ic;Nt=Kc}K2a(w);Ot=Kt;Pt=Lt;Qt=Mt;Rt=Nt}while(0);if((Pb|0)==281){Dc=Hc()|0;Ot=1;Pt=M;Qt=Dc;Rt=Fc}K2a(v);St=Ot;Tt=Pt;Ut=Qt;Vt=Rt}while(0);if((Pb|0)==280){zc=Hc()|0;St=1;Tt=M;Ut=zc;Vt=Bc}K2a(u);Wt=St;Xt=Tt;Yt=Ut;Zt=Vt}while(0);if((Pb|0)==279){vc=Hc()|0;Wt=1;Xt=M;Yt=vc;Zt=xc}K2a(t);_t=Wt;$t=Xt;au=Yt;bu=Zt}while(0);if((Pb|0)==278){rc=Hc()|0;_t=1;$t=M;au=rc;bu=tc}K2a(s);cu=_t;du=$t;eu=au;fu=bu}while(0);if((Pb|0)==277){nc=Hc()|0;cu=1;du=M;eu=nc;fu=pc}K2a(q);gu=cu;hu=du;iu=eu;ju=fu}while(0);if((Pb|0)==276){jc=Hc()|0;gu=1;hu=M;iu=jc;ju=lc}K2a(p);ku=gu;lu=hu;mu=iu;nu=ju}while(0);if((Pb|0)==275){fc=Hc()|0;ku=1;lu=M;mu=fc;nu=hc}K2a(o);ou=ku;pu=lu;qu=mu;ru=nu}while(0);if((Pb|0)==274){bc=Hc()|0;ou=1;pu=M;qu=bc;ru=dc}K2a(n);su=ou;tu=pu;uu=qu;vu=ru}while(0);if((Pb|0)==273){ru=Hc()|0;su=1;tu=M;uu=ru;vu=$b}K2a(m);wu=su;xu=tu;yu=uu;zu=vu}}else{Zb=Ub;Pb=272}if((Pb|0)==272){Ub=Hc()|0;wu=1;xu=M;yu=Ub;zu=Zb}K2a(l);Au=wu;Bu=xu;Cu=yu;Du=zu}}else{Xb=Sb;Pb=271}if((Pb|0)==271){Sb=Hc()|0;Au=1;Bu=M;Cu=Sb;Du=Xb}K2a(j);Eu=Au;Fu=Bu;Gu=Cu;Hu=Du}}else{Vb=Qb;Pb=270}if((Pb|0)==270){Qb=Hc()|0;Eu=1;Fu=M;Gu=Qb;Hu=Vb}K2a(h);Iu=Eu;Ju=Fu;Ku=Gu;Lu=Hu}}else{Tb=Nb;Pb=269}if((Pb|0)==269){Nb=Hc()|0;Iu=1;Ju=M;Ku=Nb;Lu=Tb}K2a(g);Mu=Iu;Nu=Ju;Ou=Ku;Pu=Lu}}else{Rb=Ib;Pb=268}if((Pb|0)==268){Ib=Hc()|0;Mu=1;Nu=M;Ou=Ib;Pu=Rb}K2a(f);Qu=Mu;Ru=Nu;Su=Ou;Tu=Pu}}else{Ob=d;Pb=267}if((Pb|0)==267){Pb=Hc()|0;Qu=1;Ru=M;Su=Pb;Tu=Ob}K2a(e);Jb=Qu;Kb=Ru;Lb=Su;Mb=Tu}if((d|0)==(Mb|0)|Jb^1)Sc(Lb|0);else Uu=Mb;do{K2a(Uu+-32|0);Uu=Uu+-36|0}while((Uu|0)!=(d|0));Sc(Lb|0)}function dR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(52)|0;j=h+16|0;i[j>>0]=i[c>>0]|0;x=0;xa(604,h+20|0,c+4|0);l=x;x=0;if(l&1){l=Hc()|0;OBa(h);Sc(l|0)}l=h+32|0;m=c+16|0;k[l>>2]=k[m>>2];k[l+4>>2]=k[m+4>>2];k[l+8>>2]=k[m+8>>2];k[l+12>>2]=k[m+12>>2];k[l+16>>2]=k[m+16>>2];k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=fR(a,e,f,j)|0;j=k[g>>2]|0;if(!j){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)n=h;else{k[a>>2]=e;n=k[g>>2]|0}ui(k[a+4>>2]|0,n);n=a+8|0;k[n>>2]=(k[n>>2]|0)+1;o=h;r=d;return o|0}else{if((j|0)==(h|0)){o=j;r=d;return o|0}K2a(h+20|0);OBa(h);o=j;r=d;return o|0}return 0}function eR(a,b){a=a|0;b=b|0;if(!b)return;else{eR(a,k[b>>2]|0);eR(a,k[b+4>>2]|0);K2a(b+20|0);OBa(b);return}}function fR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=i[d>>0]|0,h=i[f+16>>0]|0,(g&255)>=(h&255)):0){if((h&255)>=(g&255)){k[c>>2]=b;j=c;return j|0}h=f+4|0;m=k[h>>2]|0;n=(m|0)==0;if(n){o=f;while(1){p=k[o+8>>2]|0;if((k[p>>2]|0)==(o|0)){q=p;break}else o=p}}else{o=m;while(1){m=k[o>>2]|0;if(!m){q=o;break}else o=m}}if((q|0)!=(e|0)?(g&255)>=(l[q+16>>0]|0):0){o=k[e>>2]|0;if(!o){k[c>>2]=e;j=e;return j|0}else r=o;while(1){o=i[r+16>>0]|0;if((g&255)<(o&255)){m=k[r>>2]|0;if(!m){s=r;t=r;u=33;break}else v=m}else{if((o&255)>=(g&255)){w=r;u=38;break}o=r+4|0;m=k[o>>2]|0;if(!m){x=o;y=r;u=37;break}else v=m}r=v}if((u|0)==33){k[c>>2]=t;j=s;return j|0}else if((u|0)==37){k[c>>2]=y;j=x;return j|0}else if((u|0)==38){k[c>>2]=w;j=c;return j|0}}if(n){k[c>>2]=f;j=h;return j|0}else{k[c>>2]=q;j=q;return j|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){q=f;while(1){h=k[q+8>>2]|0;if((k[h>>2]|0)==(q|0))q=h;else{z=h;break}}}else{q=a;while(1){a=k[q+4>>2]|0;if(!a){z=q;break}else q=a}}q=i[d>>0]|0;if((l[z+16>>0]|0)>=(q&255)){d=k[e>>2]|0;if(!d){k[c>>2]=e;j=e;return j|0}else A=d;while(1){d=i[A+16>>0]|0;if((q&255)<(d&255)){e=k[A>>2]|0;if(!e){B=A;C=A;u=14;break}else D=e}else{if((d&255)>=(q&255)){E=A;u=19;break}d=A+4|0;e=k[d>>2]|0;if(!e){F=d;G=A;u=18;break}else D=e}A=D}if((u|0)==14){k[c>>2]=C;j=B;return j|0}else if((u|0)==18){k[c>>2]=G;j=F;return j|0}else if((u|0)==19){k[c>>2]=E;j=c;return j|0}}else H=z}else H=b;if(!(k[f>>2]|0)){k[c>>2]=f;j=f;return j|0}else{f=H;k[c>>2]=f;j=f+4|0;return j|0}return 0}function gR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=f+16|0,h=i[d>>0]|0,j=(h&1)==0,l=j?(h&255)>>>1:k[d+4>>2]|0,h=i[g>>0]|0,m=(h&1)==0,n=m?(h&255)>>>1:k[f+20>>2]|0,h=j?d+1|0:k[d+8>>2]|0,j=m?g+1|0:k[f+24>>2]|0,g=n>>>0>>0,m=ZLa(h,j,g?n:l)|0,o=l>>>0>>0,(((m|0)==0?(o?-2147483648:0):m)|0)>=0):0){m=ZLa(j,h,o?l:n)|0;if((((m|0)==0?(g?-2147483648:0):m)|0)>=0){k[c>>2]=b;p=c;return p|0}m=f+4|0;g=k[m>>2]|0;n=(g|0)==0;if(n){o=f;while(1){j=k[o+8>>2]|0;if((k[j>>2]|0)==(o|0)){q=j;break}else o=j}}else{o=g;while(1){g=k[o>>2]|0;if(!g){q=o;break}else o=g}}if((q|0)!=(e|0)?(e=q+16|0,o=i[e>>0]|0,g=(o&1)==0,j=g?(o&255)>>>1:k[q+20>>2]|0,o=ZLa(h,g?e+1|0:k[q+24>>2]|0,j>>>0>>0?j:l)|0,(((o|0)==0?(l>>>0>>0?-2147483648:0):o)|0)>=0):0){p=hR(a,c,d)|0;return p|0}if(n){k[c>>2]=f;p=m;return p|0}else{k[c>>2]=q;p=q;return p|0}}if((f|0)!=(k[a>>2]|0)){q=k[f>>2]|0;if(!q){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0))m=n;else{r=n;break}}}else{m=q;while(1){q=k[m+4>>2]|0;if(!q){r=m;break}else m=q}}m=r+16|0;q=i[m>>0]|0;n=(q&1)==0;o=n?(q&255)>>>1:k[r+20>>2]|0;q=i[d>>0]|0;j=(q&1)==0;l=j?(q&255)>>>1:k[d+4>>2]|0;q=ZLa(n?m+1|0:k[r+24>>2]|0,j?d+1|0:k[d+8>>2]|0,l>>>0>>0?l:o)|0;if((((q|0)==0?(o>>>0>>0?-2147483648:0):q)|0)<0)s=r;else{p=hR(a,c,d)|0;return p|0}}else s=b;if(!(k[f>>2]|0)){k[c>>2]=f;p=f;return p|0}else{f=s;k[c>>2]=f;p=f+4|0;return p|0}return 0}function hR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function iR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=a+12|0;k[a+16>>2]=0;k[a+20>>2]=0;e=a+16|0;k[d>>2]=e;f=a+24|0;k[f>>2]=b;if((k[b+4>>2]|0)==(k[b>>2]|0))return;else{g=b;h=0}while(1){b=k[g>>2]|0;if((k[b+(h*80|0)>>2]|0)==8){x=0;i=Ta(553,d|0,b+(h*80|0)+8|0)|0;b=x;x=0;if(b&1)break;k[i>>2]=h;j=k[f>>2]|0}else j=g;h=h+1|0;if(h>>>0>=(((k[j+4>>2]|0)-(k[j>>2]|0)|0)/80|0)>>>0){l=2;break}else g=j}if((l|0)==2)return;l=Hc()|0;nR(d,k[e>>2]|0);e=k[a>>2]|0;if(!e)Sc(l|0);d=k[c>>2]|0;if((d|0)==(e|0))m=e;else{j=d;do{d=j+-4|0;k[c>>2]=d;g=k[d>>2]|0;k[d>>2]=0;if(g){xy(g+104|0,k[g+108>>2]|0);d=k[g+8>>2]|0;if(d)j0a(d);OBa(g)}j=k[c>>2]|0}while((j|0)!=(e|0));m=k[a>>2]|0}OBa(m);Sc(l|0)}function jR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;e=r;r=r+64|0;f=e+48|0;g=e;h=KBa(120)|0;j=h+4|0;l=h+8|0;m=h+48|0;n=h;o=n+120|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));k[m>>2]=1;k[h+56>>2]=0;k[h+88>>2]=1;i[h+96>>0]=0;m=h+108|0;k[m>>2]=0;k[h+112>>2]=0;k[h+104>>2]=m;m=h;k[f>>2]=m;k[h>>2]=c;c=k[d>>2]|0;x=0;d=Ba(563,108)|0;n=x;x=0;a:do if(n&1)p=26;else{k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=30572;o=d+12|0;x=0;xa(668,o|0,c|0);q=x;x=0;if(q&1){q=Hc()|0;s=M;c0a(d);OBa(d);t=h;u=s;v=q;break}k[j>>2]=o;o=k[l>>2]|0;k[l>>2]=d;if(o)j0a(o);o=b+4|0;q=k[o>>2]|0;if(q>>>0<(k[b+8>>2]|0)>>>0){k[f>>2]=0;k[q>>2]=m;s=q+4|0;k[o>>2]=s;w=s}else{x=0;xa(722,b|0,f|0);s=x;x=0;if(s&1){p=26;break}w=k[o>>2]|0}k[a>>2]=0;s=a+32|0;k[s>>2]=1;q=a+40|0;i[q>>0]=0;b:do if((k[b>>2]|0)!=(w|0)){y=g+40|0;z=g+32|0;A=0;while(1){if(A<<24>>24)break b;x=0;xa(723,g|0,b|0);B=x;x=0;if(B&1)break;B=i[q>>0]|0;C=i[y>>0]|0;if((B&255)>=(C&255))if((C&255)<(B&255))D=a;else{B=k[s>>2]|0;C=k[z>>2]|0;c:do if((B|0)==(C|0)){E=B;while(1){E=E+-1|0;if((E|0)<=-1){F=0;break c}G=k[a+(E<<2)>>2]|0;H=k[g+(E<<2)>>2]|0;if((G|0)!=(H|0)){I=G;J=H;break}}F=I>>>0>J>>>0?1:-1}else F=B>>>0>C>>>0?1:-1;while(0);K=(F|0)<0?g:a;p=22}else{K=g;p=22}if((p|0)==22){p=0;if((K|0)==(a|0))D=K;else{C=K+32|0;k[s>>2]=k[C>>2];Dyb(a|0,K|0,k[C>>2]<<2|0)|0;D=K}}A=i[D+40>>0]|0;i[q>>0]=A;if((k[b>>2]|0)==(k[o>>2]|0))break b}A=Hc()|0;L=A;N=M;p=27;break a}while(0);o=k[f>>2]|0;k[f>>2]=0;if(!o){r=e;return}xy(o+104|0,k[o+108>>2]|0);q=k[o+8>>2]|0;if(q)j0a(q);OBa(o);r=e;return}while(0);if((p|0)==26){e=Hc()|0;L=e;N=M;p=27}if((p|0)==27){t=k[f>>2]|0;u=N;v=L}k[f>>2]=0;if(!t)Sc(v|0);xy(t+104|0,k[t+108>>2]|0);f=k[t+8>>2]|0;if(f)j0a(f);OBa(t);Sc(v|0)}function kR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0;c=r;r=r+512|0;d=c+500|0;e=c+496|0;f=c+492|0;g=c+476|0;h=c+480|0;j=c+336|0;l=c+288|0;m=c+464|0;n=c+208|0;o=c+128|0;p=c+448|0;q=c+432|0;s=c+48|0;t=c+416|0;u=c+400|0;v=c+384|0;w=c;y=c+460|0;z=b+4|0;A=(k[b>>2]|0)!=(k[z>>2]|0);q2a(h,329672,0);x=0;pa(49,A|0,h|0,56,229757,229789);A=x;x=0;if(A&1){A=Hc()|0;B=M;K2a(h);C=A;D=B;Sc(C|0)}K2a(h);h=(k[z>>2]|0)+-4|0;B=k[h>>2]|0;k[h>>2]=0;h=k[z>>2]|0;A=h+-4|0;E=h;do{h=E+-4|0;k[z>>2]=h;F=k[h>>2]|0;k[h>>2]=0;if(F){xy(F+104|0,k[F+108>>2]|0);h=k[F+8>>2]|0;if(h)j0a(h);OBa(F)}E=k[z>>2]|0}while((E|0)!=(A|0));A=B;E=k[A+4>>2]|0;F=A+8|0;h=k[F>>2]|0;G=(h|0)==0;if(G){k[j>>2]=E;H=j+4|0;k[H>>2]=0;I=H;J=j}else{h0a(h);k[j>>2]=E;H=j+4|0;k[H>>2]=h;h0a(h);I=H;J=j}J=j+8|0;H=J;K=A+16|0;L=H+40|0;do{k[H>>2]=k[K>>2];H=H+4|0;K=K+4|0}while((H|0)<(L|0));N=E;E=k[N+56>>2]|0;H=l;K=A+56|0;L=H+40|0;do{k[H>>2]=k[K>>2];H=H+4|0;K=K+4|0}while((H|0)<(L|0));O=l+40|0;P=i[A+96>>0]|0;i[O>>0]=P;Q=k[A>>2]|0;R=b+24|0;S=k[R>>2]|0;T=S+4|0;U=k[S>>2]|0;do if(Q>>>0<(((k[T>>2]|0)-U|0)/80|0)>>>0){if((Q|0)!=0?(k[U+(Q*80|0)>>2]|0)!=8:0){V=14;break}k[m+4>>2]=0;W=m+8|0;k[W>>2]=0;X=m+4|0;k[m>>2]=X;a:do if(P<<24>>24==0?Q>>>0<(((k[T>>2]|0)-(k[S>>2]|0)|0)/80|0)>>>0:0){Y=A+104|0;Z=A+108|0;_=Z;$=A+108|0;aa=A+112|0;ba=b+12|0;ca=b+16|0;da=b+8|0;ea=j+40|0;fa=l+32|0;ga=n+8|0;ha=n+40|0;ia=n+48|0;ja=n+56|0;ka=o+8|0;la=o+40|0;ma=o+48|0;na=o+56|0;oa=q+4|0;qa=q+8|0;ra=q+12|0;sa=p+4|0;ta=p+8|0;ua=s+8|0;wa=s+40|0;ya=s+48|0;za=s+56|0;Aa=t+4|0;Ca=t+8|0;Da=t+12|0;Ea=v+4|0;Ga=v+8|0;Ha=v+12|0;Ia=u+4|0;Ja=u+8|0;Ka=0;La=Q;b:while(1){DA(m,Ka);k[W>>2]=0;k[m>>2]=X;k[X>>2]=0;Ma=k[R>>2]|0;Na=k[Ma>>2]|0;if((((k[Ma+4>>2]|0)-Na|0)/80|0)>>>0>La>>>0)Oa=Na;else{x=0;va(1484,Ma|0);Na=x;x=0;if(Na&1){V=39;break}Oa=k[Ma>>2]|0}Ma=Oa+(La*80|0)|0;c:do if((k[Ma>>2]|0)!=8){k[n>>2]=1;k[ga>>2]=91;k[ha>>2]=1;Na=ia;k[Na>>2]=-1;k[Na+4>>2]=-1;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[ja+16>>2]=0;if(((k[Ma>>2]|0)==1?(k[Oa+(La*80|0)+40>>2]|0)==1:0)?(Na=Oa+(La*80|0)+8|0,(k[Na>>2]|0)==91):0){Pa=Na;Qa=ga;do{Qa=Qa+4|0;if((Pa|0)==(Na|0)){V=30;break c}Pa=Pa+4|0}while((k[Pa>>2]|0)==(k[Qa>>2]|0))}k[o>>2]=1;k[ka>>2]=86;k[la>>2]=1;Qa=ma;k[Qa>>2]=-1;k[Qa+4>>2]=-1;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[na+16>>2]=0;d:do if(((k[Ma>>2]|0)==1?(k[Oa+(La*80|0)+40>>2]|0)==1:0)?(Qa=Oa+(La*80|0)+8|0,(k[Qa>>2]|0)==86):0){Pa=Qa;Na=ka;while(1){Na=Na+4|0;if((Pa|0)==(Qa|0))break;Pa=Pa+4|0;if((k[Pa>>2]|0)!=(k[Na>>2]|0))break d}k[q>>2]=-1;k[oa>>2]=-1;k[qa>>2]=0;k[ra>>2]=0;x=0;Na=Fa(118,N|0,0,q|0)|0;Pa=x;x=0;if(Pa&1){V=71;break b}x=0;fb(230,p|0,N|0,Na|0);Na=x;x=0;if(Na&1){V=71;break b}DA(m,k[X>>2]|0);k[m>>2]=k[p>>2];Na=k[sa>>2]|0;k[X>>2]=Na;Pa=k[ta>>2]|0;k[W>>2]=Pa;if(!Pa){k[m>>2]=X;Ra=Na}else{k[Na+8>>2]=X;k[p>>2]=sa;k[sa>>2]=0;k[ta>>2]=0;Ra=0}DA(p,Ra);Na=k[ra>>2]|0;if(Na)j0a(Na);if(!(k[W>>2]|0)){V=70;break b}else{Sa=1;break c}}while(0);k[s>>2]=1;k[ua>>2]=87;k[wa>>2]=1;Na=ya;k[Na>>2]=-1;k[Na+4>>2]=-1;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[za+16>>2]=0;e:do if(((k[Ma>>2]|0)==1?(k[Oa+(La*80|0)+40>>2]|0)==1:0)?(Na=Oa+(La*80|0)+8|0,(k[Na>>2]|0)==87):0){Pa=Na;Qa=ua;while(1){Qa=Qa+4|0;if((Pa|0)==(Na|0))break;Pa=Pa+4|0;if((k[Pa>>2]|0)!=(k[Qa>>2]|0))break e}k[t>>2]=-1;k[Aa>>2]=-1;k[Ca>>2]=0;k[Da>>2]=0;x=0;Qa=Fa(118,N|0,-1,t|0)|0;Pa=x;x=0;if(Pa&1){V=93;break b}Pa=k[Da>>2]|0;if(Pa)j0a(Pa);x=0;Pa=Ta(549,E|0,Qa|0)|0;Na=x;x=0;if(Na&1){V=39;break b}if(!Pa){x=0;Pa=Ta(536,E|0,Qa|0)|0;Na=x;x=0;if(Na&1){V=39;break b}if(!Pa)V=85}else V=85;if((V|0)==85){V=0;k[v>>2]=-1;k[Ea>>2]=-1;k[Ga>>2]=0;k[Ha>>2]=0;x=0;Pa=Fa(118,N|0,0,v|0)|0;Na=x;x=0;if(Na&1){V=95;break b}x=0;fb(230,u|0,N|0,Pa|0);Pa=x;x=0;if(Pa&1){V=95;break b}DA(m,k[X>>2]|0);k[m>>2]=k[u>>2];Pa=k[Ia>>2]|0;k[X>>2]=Pa;Na=k[Ja>>2]|0;k[W>>2]=Na;if(!Na){k[m>>2]=X;Ua=Pa}else{k[Pa+8>>2]=X;k[u>>2]=Ia;k[Ia>>2]=0;k[Ja>>2]=0;Ua=0}DA(u,Ua);Pa=k[Ha>>2]|0;if(Pa)j0a(Pa);if(!(k[W>>2]|0)){V=98;break b}}x=0;Pa=Ta(549,E|0,Qa|0)|0;Qa=x;x=0;if(Qa&1){V=39;break b}else{Sa=Pa;break c}}while(0);x=0;Pa=Ba(591,Ma|0)|0;Qa=x;x=0;if(Qa&1){V=39;break b}else Sa=Pa}else V=30;while(0);if((V|0)==30){V=0;Pa=k[Z>>2]|0;Qa=(Pa|0)==0;do if(!Qa){Na=Pa;do{Va=k[Na+16>>2]|0;if(La>>>0>>0)Wa=Na;else{if(Va>>>0>=La>>>0){V=37;break b}Wa=Na+4|0}Na=k[Wa>>2]|0}while((Na|0)!=0);if(!Qa){Na=Pa;while(1){Va=k[Na+16>>2]|0;if(La>>>0>>0){Xa=k[Na>>2]|0;if(!Xa){Ya=Na;Za=Na;V=44;break}else _a=Xa}else{if(Va>>>0>=La>>>0){$a=Na;V=49;break}Va=Na+4|0;Xa=k[Va>>2]|0;if(!Xa){ab=Va;bb=Na;V=48;break}else _a=Xa}Na=_a}if((V|0)==44){V=0;k[d>>2]=Za;cb=Ya;db=Za;break}else if((V|0)==48){V=0;k[d>>2]=bb;cb=ab;db=bb;break}else if((V|0)==49){V=0;k[d>>2]=$a;cb=d;db=$a;break}}else V=50}else V=50;while(0);if((V|0)==50){V=0;k[d>>2]=Z;cb=Z;db=_}if(!(k[cb>>2]|0)){x=0;Pa=Ba(563,20)|0;Qa=x;x=0;if(Qa&1){V=39;break}k[Pa+16>>2]=La;k[Pa>>2]=0;k[Pa+4>>2]=0;k[Pa+8>>2]=db;k[cb>>2]=Pa;Qa=k[k[Y>>2]>>2]|0;if(!Qa)eb=Pa;else{k[Y>>2]=Qa;eb=k[cb>>2]|0}ui(k[$>>2]|0,eb);k[aa>>2]=(k[aa>>2]|0)+1}Sa=0}x=0;fb(231,w|0,j|0,Ma|0);Qa=x;x=0;if(Qa&1){V=39;break}x=0;Ta(535,l|0,w|0)|0;Qa=x;x=0;if(Qa&1){V=39;break}Qa=k[m>>2]|0;if((Qa|0)!=(X|0)){Pa=Qa;while(1){Qa=Pa+16|0;x=0;Na=Ba(563,120)|0;Xa=x;x=0;if(Xa&1){V=38;break b}Xa=Na+48|0;H=Na;L=H+120|0;do{k[H>>2]=0;H=H+4|0}while((H|0)<(L|0));k[Xa>>2]=1;k[Na+56>>2]=0;k[Na+88>>2]=1;i[Na+96>>0]=0;Va=Na+108|0;k[Va>>2]=0;k[Na+112>>2]=0;k[Na+104>>2]=Va;k[y>>2]=Na;Va=k[R>>2]|0;k[Na>>2]=((k[Va+4>>2]|0)-(k[Va>>2]|0)|0)/80|0;Va=k[ca>>2]|0;f:do if(Va){gb=k[Pa+48>>2]|0;hb=Va;g:while(1){ib=k[hb+48>>2]|0;do if((gb|0)==(ib|0)){jb=hb+16|0;kb=gb;while(1){kb=kb+-1|0;if((kb|0)<=-1){lb=gb;break}mb=k[Qa+(kb<<2)>>2]|0;nb=k[jb+(kb<<2)>>2]|0;if((mb|0)!=(nb|0)){ob=mb;pb=nb;V=111;break}}if((V|0)==111){V=0;if(ob>>>0>pb>>>0)lb=gb;else{V=112;break}}while(1){lb=lb+-1|0;if((lb|0)<=-1)break g;kb=k[jb+(lb<<2)>>2]|0;nb=k[Qa+(lb<<2)>>2]|0;if((kb|0)!=(nb|0)){qb=kb;rb=nb;break}}if(qb>>>0>rb>>>0)break g;else V=117}else{if(gb>>>0<=ib>>>0){V=112;break}if(ib>>>0>gb>>>0)break g;else V=117}while(0);if((V|0)==112){V=0;sb=hb}else if((V|0)==117){V=0;sb=hb+4|0}hb=k[sb>>2]|0;if(!hb)break f}x=0;hb=Ta(554,ba|0,Qa|0)|0;gb=x;x=0;if(gb&1){V=121;break b}k[Na>>2]=k[hb>>2]}while(0);Qa=k[fa>>2]|0;k[Na+88>>2]=Qa;Dyb(Na+56|0,l|0,Qa<<2|0)|0;Qa=k[y>>2]|0;i[Na+96>>0]=i[O>>0]|0;Va=Qa+16|0;if((Va|0)==(J|0))tb=Qa;else{k[Qa+48>>2]=k[ea>>2];Dyb(Va|0,J|0,k[ea>>2]<<2|0)|0;tb=k[y>>2]|0}x=0;Va=Ba(563,108)|0;Qa=x;x=0;if(Qa&1){V=121;break b}k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va>>2]=30572;Qa=Va+12|0;x=0;xa(668,Qa|0,N|0);Xa=x;x=0;if(Xa&1){ub=tb;vb=Va;V=130;break b}k[tb+4>>2]=Qa;Qa=tb+8|0;Xa=k[Qa>>2]|0;k[Qa>>2]=Va;if(Xa)j0a(Xa);Xa=k[y>>2]|0;Va=Xa;if((Xa|0)!=(A|0)?(k[f>>2]=k[Y>>2],k[g>>2]=Z,x=0,k[e>>2]=k[f>>2],k[d>>2]=k[g>>2],fb(232,Xa+104|0,e|0,d|0),Xa=x,x=0,Xa&1):0){V=121;break b}Xa=k[z>>2]|0;do if(Xa>>>0<(k[da>>2]|0)>>>0){k[Xa>>2]=Va;k[z>>2]=Xa+4;k[y>>2]=0}else{x=0;xa(722,b|0,y|0);Qa=x;x=0;if(Qa&1){V=121;break b}Qa=k[y>>2]|0;k[y>>2]=0;if(!Qa)break;xy(Qa+104|0,k[Qa+108>>2]|0);hb=k[Qa+8>>2]|0;if(hb)j0a(hb);OBa(Qa)}while(0);Xa=k[Pa+4>>2]|0;if(!Xa){Va=Pa;while(1){Na=k[Va+8>>2]|0;if((k[Na>>2]|0)==(Va|0)){wb=Na;break}else Va=Na}}else{Va=Xa;while(1){Na=k[Va>>2]|0;if(!Na){wb=Va;break}else Va=Na}}if((wb|0)==(X|0))break;else Pa=wb}}Pa=La+1|0;if(Sa){V=148;break}Ma=k[R>>2]|0;Va=i[O>>0]|0;if(!(Va<<24>>24==0?Pa>>>0<(((k[Ma+4>>2]|0)-(k[Ma>>2]|0)|0)/80|0)>>>0:0)){xb=Va;V=149;break a}Ka=k[X>>2]|0;La=Pa}switch(V|0){case 37:{k[a>>2]=0;k[a+32>>2]=1;i[a+40>>0]=1;yb=X;zb=m;break a;break}case 38:{Ab=Hc()|0;Bb=M;V=40;break}case 39:{Ab=Hc()|0;Bb=M;V=40;break}case 70:{k[a>>2]=0;k[a+32>>2]=1;i[a+40>>0]=1;yb=X;zb=m;break a;break}case 71:{La=Hc()|0;Ka=M;da=k[ra>>2]|0;if(!da){Cb=La;Db=Ka}else{j0a(da);Cb=La;Db=Ka}break}case 93:{Ka=Hc()|0;La=M;da=k[Da>>2]|0;if(!da){Cb=Ka;Db=La}else{j0a(da);Cb=Ka;Db=La}break}case 95:{La=Hc()|0;Ka=M;da=k[Ha>>2]|0;if(!da){Cb=La;Db=Ka}else{j0a(da);Cb=La;Db=Ka}break}case 98:{k[a>>2]=0;k[a+32>>2]=1;i[a+40>>0]=1;yb=X;zb=m;break a;break}case 121:{Ka=Hc()|0;Eb=k[y>>2]|0;Fb=M;Gb=Ka;V=122;break}case 130:{Ka=Hc()|0;La=M;c0a(vb);OBa(vb);Eb=ub;Fb=La;Gb=Ka;V=122;break}case 148:{xb=i[O>>0]|0;V=149;break a;break}}if((V|0)==40){Cb=Ab;Db=Bb}else if((V|0)==122){k[y>>2]=0;if(!Eb){Cb=Gb;Db=Fb}else{xy(Eb+104|0,k[Eb+108>>2]|0);Ka=k[Eb+8>>2]|0;if(Ka)j0a(Ka);OBa(Eb);Cb=Gb;Db=Fb}}DA(m,k[X>>2]|0);Ka=k[I>>2]|0;if(Ka)j0a(Ka);if(!G)j0a(h);if(!B){C=Cb;D=Db;Sc(C|0)}xy(A+104|0,k[Z>>2]|0);Ka=k[F>>2]|0;if(Ka)j0a(Ka);OBa(B);C=Cb;D=Db;Sc(C|0)}else{xb=P;V=149}while(0);if((V|0)==149){H=a;K=l;L=H+40|0;do{k[H>>2]=k[K>>2];H=H+4|0;K=K+4|0}while((H|0)<(L|0));i[a+40>>0]=xb;yb=X;zb=m}DA(zb,k[yb>>2]|0)}else V=14;while(0);if((V|0)==14){H=a;K=l;L=H+40|0;do{k[H>>2]=k[K>>2];H=H+4|0;K=K+4|0}while((H|0)<(L|0));i[a+40>>0]=P}P=k[I>>2]|0;if(P)j0a(P);if(!G)j0a(h);if(!B){r=c;return}xy(A+104|0,k[A+108>>2]|0);A=k[F>>2]|0;if(A)j0a(A);OBa(B);r=c;return}function lR(){k[7648]=0;k[7649]=0;k[7650]=0;return}function mR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=k[b+32>>2]|0;h=f;a:while(1){i=k[h+48>>2]|0;do if((g|0)==(i|0)){j=h+16|0;l=g;while(1){l=l+-1|0;if((l|0)<=-1){m=g;break}n=k[b+(l<<2)>>2]|0;o=k[j+(l<<2)>>2]|0;if((n|0)!=(o|0)){p=n;q=o;s=8;break}}if((s|0)==8){s=0;if(p>>>0>q>>>0)m=g;else{s=9;break}}while(1){m=m+-1|0;if((m|0)<=-1){t=h;s=18;break a}l=k[j+(m<<2)>>2]|0;o=k[b+(m<<2)>>2]|0;if((l|0)!=(o|0)){u=l;v=o;break}}if(u>>>0>v>>>0){t=h;s=18;break a}else s=15}else if(g>>>0>i>>>0)if(i>>>0>g>>>0){t=h;s=18;break a}else s=15;else s=9;while(0);if((s|0)==9){s=0;i=k[h>>2]|0;if(!i){w=h;x=h;s=10;break}else y=i}else if((s|0)==15){s=0;i=h+4|0;j=k[i>>2]|0;if(!j){z=i;A=h;s=17;break}else y=j}h=y}if((s|0)==10){k[d>>2]=x;B=w;C=x;break}else if((s|0)==17){k[d>>2]=A;B=z;C=A;break}else if((s|0)==18){k[d>>2]=t;D=d;E=t;F=t;s=20;break}}else{k[d>>2]=e;D=e;E=f;F=e;s=20}while(0);if((s|0)==20)if(!E){B=D;C=F}else{G=E;H=G+56|0;r=c;return H|0}E=KBa(64)|0;F=E+16|0;D=b;b=F+40|0;do{k[F>>2]=k[D>>2];F=F+4|0;D=D+4|0}while((F|0)<(b|0));k[E+56>>2]=0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=C;k[B>>2]=E;C=k[k[a>>2]>>2]|0;if(!C)I=E;else{k[a>>2]=C;I=k[B>>2]|0}ui(k[a+4>>2]|0,I);I=a+8|0;k[I>>2]=(k[I>>2]|0)+1;G=E;H=G+56|0;r=c;return H|0}function nR(a,b){a=a|0;b=b|0;if(!b)return;else{nR(a,k[b>>2]|0);nR(a,k[b+4>>2]|0);OBa(b);return}}function oR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=(k[c>>2]|0)-f>>2;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=1073741823;n=(k[c>>2]|0)-f>>2;o=6}if((o|0)==6){i=m;j=KBa(m<<2)|0;l=n}n=j+(l<<2)|0;l=n;m=j+(i<<2)|0;i=k[b>>2]|0;k[b>>2]=0;k[n>>2]=i;i=n+4|0;b=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(b|0)){p=l;q=b;r=b}else{o=j;j=n;n=l;while(1){o=o+-4|0;l=k[o>>2]|0;k[o>>2]=0;k[j+-4>>2]=l;j=n+-4|0;l=j;if((o|0)==(b|0)){s=l;break}else n=l}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=i;k[d>>2]=m;m=q;if((r|0)!=(m|0)){d=r;do{d=d+-4|0;r=k[d>>2]|0;k[d>>2]=0;if(r){xy(r+104|0,k[r+108>>2]|0);i=k[r+8>>2]|0;if(i)j0a(i);OBa(r)}}while((d|0)!=(m|0))}if(!q)return;OBa(q);return}function pR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;c=k[a+4>>2]|0;a:do if(c){a=k[b+32>>2]|0;d=c;b:while(1){e=k[d+48>>2]|0;do if((a|0)==(e|0)){f=d+16|0;g=a;while(1){g=g+-1|0;if((g|0)<=-1){h=a;break}i=k[b+(g<<2)>>2]|0;j=k[f+(g<<2)>>2]|0;if((i|0)!=(j|0)){l=i;m=j;n=8;break}}if((n|0)==8){n=0;if(l>>>0>m>>>0)h=a;else{n=9;break}}while(1){h=h+-1|0;if((h|0)<=-1){o=d;break b}g=k[f+(h<<2)>>2]|0;j=k[b+(h<<2)>>2]|0;if((g|0)!=(j|0)){p=g;q=j;break}}if(p>>>0>q>>>0){r=d;n=20;break b}else n=14}else if(a>>>0>e>>>0)if(e>>>0>a>>>0){o=d;break b}else n=14;else n=9;while(0);if((n|0)==9){n=0;e=k[d>>2]|0;if(!e)break a;else s=e}else if((n|0)==14){n=0;e=k[d+4>>2]|0;if(!e)break a;else s=e}d=s}if((n|0)==20){t=r+56|0;return t|0}if(o){r=o;t=r+56|0;return t|0}}while(0);t=Rd(8)|0;x=0;xa(671,t|0,296399);r=x;x=0;if(r&1){r=Hc()|0;Fc(t|0);Sc(r|0)}else{k[t>>2]=47544;Gf(t|0,9024,933)}return 0}function qR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;d=a+8|0;a:do if((k[d>>2]|0)!=0?(e=k[a>>2]|0,f=a+4|0,k[a>>2]=f,k[(k[f>>2]|0)+8>>2]=0,k[f>>2]=0,k[d>>2]=0,g=k[e+4>>2]|0,h=(g|0)==0?e:g,(h|0)!=0):0){g=a+4|0;e=k[b>>2]|0;i=e;j=e;e=h;while(1){if((i|0)==(k[c>>2]|0)){l=e;break}h=k[i+16>>2]|0;k[e+16>>2]=h;m=e+8|0;n=k[m>>2]|0;do if(n){o=k[n>>2]|0;if((o|0)==(e|0)){k[n>>2]=0;p=k[n+4>>2]|0;if(!p){q=n;break}else r=p;while(1){p=k[r>>2]|0;if(p){r=p;continue}p=k[r+4>>2]|0;if(!p){s=r;break}else r=p}q=s;break}else{k[n+4>>2]=0;if(!o){q=n;break}else t=o;while(1){p=k[t>>2]|0;if(p){t=p;continue}p=k[t+4>>2]|0;if(!p){u=t;break}else t=p}q=u;break}}else q=0;while(0);n=k[f>>2]|0;do if(n){o=n;while(1){if(h>>>0<(k[o+16>>2]|0)>>>0){p=k[o>>2]|0;if(!p){v=o;w=o;x=19;break}else y=p}else{p=o+4|0;z=k[p>>2]|0;if(!z){A=p;B=o;x=22;break}else y=z}o=y}if((x|0)==19){x=0;C=v;D=w;break}else if((x|0)==22){x=0;C=A;D=B;break}}else{C=f;D=f}while(0);k[e>>2]=0;k[e+4>>2]=0;k[m>>2]=D;k[C>>2]=e;h=k[k[a>>2]>>2]|0;if(!h)E=e;else{k[a>>2]=h;E=k[C>>2]|0}ui(k[g>>2]|0,E);k[d>>2]=(k[d>>2]|0)+1;h=k[j+4>>2]|0;if(!h){n=j;while(1){o=k[n+8>>2]|0;if((k[o>>2]|0)==(n|0)){F=o;break}else n=o}}else{n=h;while(1){m=k[n>>2]|0;if(!m){F=n;break}else n=m}}k[b>>2]=F;if(!q)break a;else{i=F;j=F;e=q}}e=k[l+8>>2]|0;if(!e)G=l;else{j=e;while(1){e=k[j+8>>2]|0;if(!e){H=j;break}else j=e}G=H}xy(a,G)}while(0);G=k[b>>2]|0;H=k[c>>2]|0;if((G|0)==(H|0))return;c=a+4|0;l=a+4|0;q=G;F=G;while(1){G=k[c>>2]|0;E=k[F+16>>2]|0;do if(G){C=G;while(1){if(E>>>0<(k[C+16>>2]|0)>>>0){D=k[C>>2]|0;if(!D){I=C;J=C;x=37;break}else K=D}else{D=C+4|0;B=k[D>>2]|0;if(!B){L=D;M=C;x=40;break}else K=B}C=K}if((x|0)==37){x=0;N=I;O=J;break}else if((x|0)==40){x=0;N=L;O=M;break}}else{N=c;O=c}while(0);G=KBa(20)|0;k[G+16>>2]=E;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=O;k[N>>2]=G;C=k[k[a>>2]>>2]|0;if(!C)P=G;else{k[a>>2]=C;P=k[N>>2]|0}ui(k[l>>2]|0,P);k[d>>2]=(k[d>>2]|0)+1;C=k[q+4>>2]|0;if(!C){G=q;while(1){B=k[G+8>>2]|0;if((k[B>>2]|0)==(G|0)){Q=B;break}else G=B}}else{G=C;while(1){E=k[G>>2]|0;if(!E){Q=G;break}else G=E}}k[b>>2]=Q;if((Q|0)==(H|0))break;else{q=Q;F=Q}}return}function rR(a){a=a|0;k[a>>2]=30572;py(a+12|0);c0a(a);return}function sR(a){a=a|0;k[a>>2]=30572;py(a+12|0);c0a(a);OBa(a);return}function tR(a){a=a|0;py(a+12|0);return}function uR(a){a=a|0;OBa(a);return}function vR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+16|0;d=c;e=ei(b,229930,13)|0;f=zab(e+(k[(k[e>>2]|0)+-12>>2]|0)|0)|0;k[d>>2]=f;x=0;f=Ta(495,d|0,74148)|0;g=x;x=0;if(g&1){h=Hc()|0;i=M;$pb(d);Sc(h|0)}x=0;g=Ta(k[(k[f>>2]|0)+28>>2]|0,f|0,10)|0;f=x;x=0;if(f&1){h=Hc()|0;i=M;$pb(d);Sc(h|0)}$pb(d);pfb(e,g)|0;cdb(e)|0;e=ei(b,229944,14)|0;g=e+(k[(k[e>>2]|0)+-12>>2]|0)+4|0;k[g>>2]=k[g>>2]&-75|2;g=efb(e,k[a>>2]|0)|0;e=zab(g+(k[(k[g>>2]|0)+-12>>2]|0)|0)|0;k[d>>2]=e;x=0;e=Ta(495,d|0,74148)|0;h=x;x=0;if(h&1){j=Hc()|0;l=M;$pb(d);Sc(j|0)}x=0;h=Ta(k[(k[e>>2]|0)+28>>2]|0,e|0,10)|0;e=x;x=0;if(e&1){j=Hc()|0;l=M;$pb(d);Sc(j|0)}$pb(d);pfb(g,h)|0;cdb(g)|0;g=ei(b,229959,21)|0;h=zab(g+(k[(k[g>>2]|0)+-12>>2]|0)|0)|0;k[d>>2]=h;x=0;h=Ta(495,d|0,74148)|0;j=x;x=0;if(j&1){m=Hc()|0;n=M;$pb(d);Sc(m|0)}x=0;j=Ta(k[(k[h>>2]|0)+28>>2]|0,h|0,10)|0;h=x;x=0;if(h&1){m=Hc()|0;n=M;$pb(d);Sc(m|0)}$pb(d);pfb(g,j)|0;cdb(g)|0;g=a+56|0;j=k[g>>2]|0;if((k[j+4>>2]|0)!=(k[j>>2]|0)){j=0;do{MR(a,b,j);j=j+1|0;m=k[g>>2]|0}while(j>>>0<(((k[m+4>>2]|0)-(k[m>>2]|0)|0)/24|0)>>>0)}j=ei(b,229981,7)|0;g=zab(j+(k[(k[j>>2]|0)+-12>>2]|0)|0)|0;k[d>>2]=g;x=0;g=Ta(495,d|0,74148)|0;m=x;x=0;if(m&1){o=Hc()|0;p=M;$pb(d);Sc(o|0)}x=0;m=Ta(k[(k[g>>2]|0)+28>>2]|0,g|0,10)|0;g=x;x=0;if(g&1){o=Hc()|0;p=M;$pb(d);Sc(o|0)}$pb(d);pfb(j,m)|0;cdb(j)|0;j=k[a+4>>2]|0;m=a+8|0;if((j|0)!=(m|0)){o=j;while(1){j=ei(b,229999,2)|0;p=j+(k[(k[j>>2]|0)+-12>>2]|0)+4|0;k[p>>2]=k[p>>2]&-75|2;ei(efb(j,k[o+16>>2]|0)|0,325552,2)|0;MR(a,b,k[o+20>>2]|0);j=k[o+4>>2]|0;if(!j){p=o;while(1){g=k[p+8>>2]|0;if((k[g>>2]|0)==(p|0)){q=g;break}else p=g}}else{p=j;while(1){g=k[p>>2]|0;if(!g){q=p;break}else p=g}}if((q|0)==(m|0))break;else o=q}}q=ei(b,229989,9)|0;o=zab(q+(k[(k[q>>2]|0)+-12>>2]|0)|0)|0;k[d>>2]=o;x=0;o=Ta(495,d|0,74148)|0;m=x;x=0;if(m&1){s=Hc()|0;t=M;$pb(d);Sc(s|0)}x=0;m=Ta(k[(k[o>>2]|0)+28>>2]|0,o|0,10)|0;o=x;x=0;if(o&1){s=Hc()|0;t=M;$pb(d);Sc(s|0)}$pb(d);pfb(q,m)|0;cdb(q)|0;q=k[a+20>>2]|0;m=a+24|0;if((q|0)!=(m|0)){s=q;while(1){ei(b,229999,2)|0;MR(a,b,k[s+16>>2]|0);ei(b,325552,2)|0;MR(a,b,k[s+20>>2]|0);q=k[s+4>>2]|0;if(!q){t=s;while(1){o=k[t+8>>2]|0;if((k[o>>2]|0)==(t|0)){u=o;break}else t=o}}else{t=q;while(1){o=k[t>>2]|0;if(!o){u=t;break}else t=o}}if((u|0)==(m|0))break;else s=u}}u=ei(b,230002,8)|0;s=zab(u+(k[(k[u>>2]|0)+-12>>2]|0)|0)|0;k[d>>2]=s;x=0;s=Ta(495,d|0,74148)|0;m=x;x=0;if(m&1){v=Hc()|0;w=M;$pb(d);Sc(v|0)}x=0;m=Ta(k[(k[s>>2]|0)+28>>2]|0,s|0,10)|0;s=x;x=0;if(s&1){v=Hc()|0;w=M;$pb(d);Sc(v|0)}$pb(d);pfb(u,m)|0;cdb(u)|0;u=k[a+32>>2]|0;m=a+36|0;if((u|0)==(m|0)){r=c;return b|0}d=u;while(1){ei(b,229999,2)|0;MR(a,b,k[d+16>>2]|0);ei(b,325552,2)|0;MR(a,b,k[d+20>>2]|0);u=k[d+4>>2]|0;if(!u){v=d;while(1){w=k[v+8>>2]|0;if((k[w>>2]|0)==(v|0)){y=w;break}else v=w}}else{v=u;while(1){w=k[v>>2]|0;if(!w){y=v;break}else v=w}}if((y|0)==(m|0))break;else d=y}r=c;return b|0}function wR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0;e=r;r=r+288|0;f=e+80|0;g=e+272|0;h=e+268|0;i=e+264|0;j=e+260|0;l=e+256|0;m=e+240|0;n=e+244|0;o=e;p=e+180|0;q=e+168|0;s=e+208|0;t=e+192|0;u=e+152|0;v=e+136|0;w=e+120|0;k[a>>2]=0;k[a+8>>2]=-1;switch(k[c>>2]|0){case 1:{y=c+8|0;z=k[y>>2]|0;A=z&255;PQ(s,A);x=0;B=Ba(592,c|0)|0;C=x;x=0;a:do if(!(C&1)){b:do if(!B){x=0;D=Ba(593,c|0)|0;E=x;x=0;if(E&1){F=77;break a}if(D){D=k[b>>2]|0;x=0;nb(112,b|0,D|0,143-(z&255)+D|0,c+48|0);D=x;x=0;if(D&1){F=77;break a}else break}if(A<<24>>24!=80){D=s+16|0;E=k[D>>2]|0;k[t>>2]=0;G=t+4|0;k[G>>2]=0;k[t+8>>2]=0;c:do if(!E){H=0;F=98}else{if(!(E>>>0>1073741823?(x=0,va(1473,t|0),I=x,x=0,I&1):0))F=86;if((F|0)==86?(I=E<<2,x=0,J=Ba(563,I|0)|0,K=x,x=0,!(K&1)):0){k[t>>2]=J;K=J+(E<<2)|0;k[t+8>>2]=K;Fyb(J|0,0,I|0)|0;k[G>>2]=K;if((k[D>>2]|0)<=0){H=J;F=98;break}J=c+48|0;K=0;while(1){x=0;I=Fa(114,b|0,(k[b>>2]|0)-K|0,J|0)|0;L=x;x=0;if(L&1)break;L=k[t>>2]|0;k[L+(K<<2)>>2]=I;K=K+1|0;if((K|0)>=(k[D>>2]|0)){H=L;F=98;break c}}K=Hc()|0;N=K;O=M;F=97;break}K=Hc()|0;J=M;L=k[t>>2]|0;if(!L){P=J;Q=K;F=78;break a}I=k[G>>2]|0;if((I|0)!=(L|0))k[G>>2]=I+(~((I+-4-L|0)>>>2)<<2);OBa(L);P=J;Q=K;F=78;break a}while(0);d:do if((F|0)==98){D=k[y>>2]&255;e:do switch(D<<24>>24){case 85:{x=0;pa(54,u|0,b|0,k[H>>2]|0,k[H+4>>2]|0,c+48|0);E=x;x=0;if(E&1)F=96;else{k[a>>2]=k[u>>2];k[a+4>>2]=k[u+4>>2];k[a+8>>2]=k[u+8>>2];k[a+12>>2]=k[u+12>>2]}break}case 84:{E=k[b>>2]|0;x=0;K=Ba(594,c|0)|0;J=x;x=0;if(!(J&1)?(x=0,J=Fa(128,b|0,k[k[t>>2]>>2]|0,c+48|0)|0,L=x,x=0,!(L&1)):0){L=K+E|0;E=b+4|0;K=b+8|0;I=k[K>>2]|0;do if(I){R=I;while(1){S=k[R+16>>2]|0;if((S|0)>(L|0)){T=k[R>>2]|0;if(!T){U=R;V=R;F=106;break}else W=T}else{if((S|0)>=(L|0)){X=R;F=112;break}S=R+4|0;T=k[S>>2]|0;if(!T){Y=S;Z=R;F=110;break}else W=T}R=W}if((F|0)==106){k[g>>2]=V;_=U;$=V;F=113;break}else if((F|0)==110){k[g>>2]=Z;_=Y;$=Z;F=113;break}else if((F|0)==112){k[g>>2]=X;if(!X){_=g;$=X;F=113;break}else{aa=X;break}}}else{k[g>>2]=K;_=K;$=K;F=113}while(0);if((F|0)==113){x=0;K=Ba(563,24)|0;I=x;x=0;if(I&1){F=96;break e}k[K+16>>2]=L;k[K+20>>2]=0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=$;k[_>>2]=K;I=k[k[E>>2]>>2]|0;if(!I)ba=K;else{k[E>>2]=I;ba=k[_>>2]|0}ui(k[b+8>>2]|0,ba);I=b+12|0;k[I>>2]=(k[I>>2]|0)+1;aa=K}k[aa+20>>2]=J}else F=96;break}case 82:{x=0;pa(55,v|0,b|0,k[H>>2]|0,k[H+4>>2]|0,c+48|0);K=x;x=0;if(K&1)F=96;else{k[a>>2]=k[v>>2];k[a+4>>2]=k[v+4>>2];k[a+8>>2]=k[v+8>>2];k[a+12>>2]=k[v+12>>2]}break}case 81:{K=k[b>>2]|0;x=0;I=Ba(594,c|0)|0;R=x;x=0;if(!(R&1)?(x=0,R=Fa(129,b|0,k[k[t>>2]>>2]|0,c+48|0)|0,T=x,x=0,!(T&1)):0){T=I+K|0;K=b+4|0;I=b+8|0;S=k[I>>2]|0;do if(S){ca=S;while(1){da=k[ca+16>>2]|0;if((da|0)>(T|0)){ea=k[ca>>2]|0;if(!ea){fa=ca;ga=ca;F=125;break}else ha=ea}else{if((da|0)>=(T|0)){ia=ca;F=131;break}da=ca+4|0;ea=k[da>>2]|0;if(!ea){ja=da;ka=ca;F=129;break}else ha=ea}ca=ha}if((F|0)==125){k[f>>2]=ga;la=fa;ma=ga;F=132;break}else if((F|0)==129){k[f>>2]=ka;la=ja;ma=ka;F=132;break}else if((F|0)==131){k[f>>2]=ia;if(!ia){la=f;ma=ia;F=132;break}else{na=ia;break}}}else{k[f>>2]=I;la=I;ma=I;F=132}while(0);if((F|0)==132){x=0;I=Ba(563,24)|0;S=x;x=0;if(S&1){F=96;break e}k[I+16>>2]=T;k[I+20>>2]=0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=ma;k[la>>2]=I;S=k[k[K>>2]>>2]|0;if(!S)oa=I;else{k[K>>2]=S;oa=k[la>>2]|0}ui(k[b+8>>2]|0,oa);S=b+12|0;k[S>>2]=(k[S>>2]|0)+1;na=I}k[na+20>>2]=R}else F=96;break}case 32:{I=k[b>>2]|0;x=0;S=Ba(594,c|0)|0;J=x;x=0;if(!(J&1)){J=S+I|0;I=k[G>>2]|0;S=k[t>>2]|0;if((I|0)==(S|0)){x=0;va(1484,t|0);E=x;x=0;if(E&1){F=96;break e}E=k[t>>2]|0;qa=E;ra=E;sa=k[G>>2]|0}else{qa=S;ra=S;sa=I}I=k[qa>>2]|0;if(sa-ra>>2>>>0>1)ta=ra;else{x=0;va(1484,t|0);S=x;x=0;if(S&1){F=96;break e}ta=k[t>>2]|0}x=0;S=db(69,b|0,I|0,k[ta+4>>2]|0,c+48|0)|0;I=x;x=0;if(!(I&1)){I=b+4|0;E=b+8|0;L=k[E>>2]|0;do if(L){ca=L;while(1){ea=k[ca+16>>2]|0;if((ea|0)>(J|0)){da=k[ca>>2]|0;if(!da){ua=ca;wa=ca;F=150;break}else xa=da}else{if((ea|0)>=(J|0)){ya=ca;F=156;break}ea=ca+4|0;da=k[ea>>2]|0;if(!da){za=ea;Aa=ca;F=154;break}else xa=da}ca=xa}if((F|0)==150){k[h>>2]=wa;Ca=ua;Da=wa;F=157;break}else if((F|0)==154){k[h>>2]=Aa;Ca=za;Da=Aa;F=157;break}else if((F|0)==156){k[h>>2]=ya;if(!ya){Ca=h;Da=ya;F=157;break}else{Ea=ya;break}}}else{k[h>>2]=E;Ca=E;Da=E;F=157}while(0);if((F|0)==157){x=0;E=Ba(563,24)|0;L=x;x=0;if(L&1){F=96;break e}k[E+16>>2]=J;k[E+20>>2]=0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=Da;k[Ca>>2]=E;L=k[k[I>>2]>>2]|0;if(!L)Ga=E;else{k[I>>2]=L;Ga=k[Ca>>2]|0}ui(k[b+8>>2]|0,Ga);L=b+12|0;k[L>>2]=(k[L>>2]|0)+1;Ea=E}k[Ea+20>>2]=S}else F=96}else F=96;break}default:{x=0;E=Ba(595,D|0)|0;L=x;x=0;if(!(L&1)?(x=0,L=Ba(596,k[y>>2]&255|0)|0,R=x,x=0,!(R&1)):0){if(E){R=b+32|0;K=b+36|0;Ay(R,k[K>>2]|0);k[b+40>>2]=0;k[R>>2]=K;k[K>>2]=0}if(!L){if(E)F=169}else{E=b+20|0;L=b+24|0;Ay(E,k[L>>2]|0);k[b+28>>2]=0;k[E>>2]=L;k[L>>2]=0;F=169}if((F|0)==169){L=b+16|0;k[L>>2]=(k[L>>2]|0)+2}L=s+20|0;E=k[L>>2]|0;x=0;fb(140,w|0,329672,0);K=x;x=0;if(!(K&1)){x=0;pa(53,(E|0)<2|0,w|0,156,230011,230041);E=x;x=0;if(E&1){E=Hc()|0;K=M;K2a(w);Ha=E;Ia=K;break d}K2a(w);if((k[L>>2]|0)==1){L=k[b>>2]|0;x=0;K=Ba(594,c|0)|0;E=x;x=0;if(!(E&1)?(x=0,E=Va(93,k[b+56>>2]|0,c|0,t|0,d|0,0)|0,R=x,x=0,!(R&1)):0){R=K+L|0;L=b+4|0;K=b+8|0;T=k[K>>2]|0;do if(T){ca=T;while(1){da=k[ca+16>>2]|0;if((da|0)>(R|0)){ea=k[ca>>2]|0;if(!ea){Ja=ca;Ka=ca;F=178;break}else La=ea}else{if((da|0)>=(R|0)){Ma=ca;F=184;break}da=ca+4|0;ea=k[da>>2]|0;if(!ea){Na=da;Oa=ca;F=182;break}else La=ea}ca=La}if((F|0)==178){k[m>>2]=Ka;Pa=Ja;Qa=Ka;F=185;break}else if((F|0)==182){k[m>>2]=Oa;Pa=Na;Qa=Oa;F=185;break}else if((F|0)==184){k[m>>2]=Ma;if(!Ma){Pa=m;Qa=Ma;F=185;break}else{Ra=Ma;break}}}else{k[m>>2]=K;Pa=K;Qa=K;F=185}while(0);if((F|0)==185){x=0;K=Ba(563,24)|0;T=x;x=0;if(T&1){F=96;break e}k[K+16>>2]=R;k[K+20>>2]=0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=Qa;k[Pa>>2]=K;T=k[k[L>>2]>>2]|0;if(!T)Sa=K;else{k[L>>2]=T;Sa=k[Pa>>2]|0}ui(k[b+8>>2]|0,Sa);T=b+12|0;k[T>>2]=(k[T>>2]|0)+1;Ra=K}k[Ra+20>>2]=E}else F=96}}else F=96}else F=96}}while(0);if((F|0)==96){D=Hc()|0;N=D;O=M;F=97;break}D=k[t>>2]|0;K=D;if(D){T=k[G>>2]|0;if((T|0)!=(D|0))k[G>>2]=T+(~((T+-4-K|0)>>>2)<<2);OBa(D)}break b}while(0);if((F|0)==97){Ha=N;Ia=O}D=k[t>>2]|0;if(!D){Ta=Ha;Ua=Ia;break a}K=k[G>>2]|0;if((K|0)!=(D|0))k[G>>2]=K+(~((K+-4-D|0)>>>2)<<2);OBa(D);Ta=Ha;Ua=Ia;break a}}else{D=k[b>>2]|0;x=0;K=Fa(114,b|0,128-(z&255)+D|0,c+48|0)|0;T=x;x=0;if(T&1){F=77;break a}T=D+1|0;D=b+4|0;S=b+8|0;I=k[S>>2]|0;do if(I){J=I;while(1){ca=k[J+16>>2]|0;if((ca|0)>(T|0)){ea=k[J>>2]|0;if(!ea){Wa=J;Xa=J;F=65;break}else Ya=ea}else{if((ca|0)>=(T|0)){Za=J;F=71;break}ca=J+4|0;ea=k[ca>>2]|0;if(!ea){_a=ca;$a=J;F=69;break}else Ya=ea}J=Ya}if((F|0)==65){k[i>>2]=Xa;ab=Wa;bb=Xa;F=72;break}else if((F|0)==69){k[i>>2]=$a;ab=_a;bb=$a;F=72;break}else if((F|0)==71){k[i>>2]=Za;if(!Za){ab=i;bb=Za;F=72;break}else{cb=Za;break}}}else{k[i>>2]=S;ab=S;bb=S;F=72}while(0);if((F|0)==72){x=0;S=Ba(563,24)|0;I=x;x=0;if(I&1){F=77;break a}k[S+16>>2]=T;k[S+20>>2]=0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=bb;k[ab>>2]=S;I=k[k[D>>2]>>2]|0;if(!I)eb=S;else{k[D>>2]=I;eb=k[ab>>2]|0}ui(k[b+8>>2]|0,eb);I=b+12|0;k[I>>2]=(k[I>>2]|0)+1;cb=S}k[cb+20>>2]=K}while(0);S=b+4|0;I=k[b>>2]|0;x=0;G=Ba(594,c|0)|0;J=x;x=0;if(!(J&1)){J=G+I|0;I=b+8|0;G=k[I>>2]|0;if(G){ea=I;ca=G;f:while(1){G=ca;while(1){if((J|0)<(k[G+16>>2]|0)){gb=G;break}G=k[G+4>>2]|0;if(!G){hb=ea;break f}}ca=k[gb>>2]|0;if(!ca){hb=gb;break}else ea=gb}if((hb|0)!=(I|0)){ea=b+12|0;ca=b+8|0;J=hb;while(1){G=k[J+4>>2]|0;if(!G){K=J;while(1){D=k[K+8>>2]|0;if((k[D>>2]|0)==(K|0)){ib=D;break}else K=D}}else{K=G;while(1){D=k[K>>2]|0;if(!D){ib=K;break}else K=D}}if((k[S>>2]|0)==(J|0))k[S>>2]=ib;k[ea>>2]=(k[ea>>2]|0)+-1;hk(k[ca>>2]|0,J);OBa(J);if((ib|0)==(I|0))break;else J=ib}}}x=0;J=Ba(594,c|0)|0;I=x;x=0;if(!(I&1)){k[b>>2]=(k[b>>2]|0)+J;K2a(s);r=e;return}else F=77}else F=77}else F=77;while(0);if((F|0)==77){ib=Hc()|0;P=M;Q=ib;F=78}if((F|0)==78){Ta=Q;Ua=P}K2a(s);jb=Ta;kb=Ua;Sc(jb|0);break}case 8:{r=e;return}default:{Ua=(XC(c)|0)==1;q2a(n,329672,0);x=0;pa(53,Ua|0,n|0,94,230011,230041);Ua=x;x=0;if(Ua&1){Ua=Hc()|0;Ta=M;K2a(n);jb=Ua;kb=Ta;Sc(jb|0)}K2a(n);n=k[c+68>>2]|0;Ta=(k[b>>2]|0)+1|0;k[b>>2]=Ta;Ua=k[b+56>>2]|0;if(!n){k[q>>2]=0;s=q+4|0;k[s>>2]=0;k[q+8>>2]=0;x=0;P=Va(93,Ua|0,c|0,q|0,d|0,0)|0;d=x;x=0;do if(!(d&1)){c=b+4|0;Q=b+8|0;ib=k[Q>>2]|0;do if(ib){hb=ib;while(1){gb=k[hb+16>>2]|0;if((gb|0)>(Ta|0)){cb=k[hb>>2]|0;if(!cb){lb=hb;mb=hb;F=40;break}else ob=cb}else{if((gb|0)>=(Ta|0)){pb=hb;F=46;break}gb=hb+4|0;cb=k[gb>>2]|0;if(!cb){qb=gb;rb=hb;F=44;break}else ob=cb}hb=ob}if((F|0)==40){k[j>>2]=mb;sb=lb;tb=mb;F=47;break}else if((F|0)==44){k[j>>2]=rb;sb=qb;tb=rb;F=47;break}else if((F|0)==46){k[j>>2]=pb;if(!pb){sb=j;tb=pb;F=47;break}else{ub=pb;break}}}else{k[j>>2]=Q;sb=Q;tb=Q;F=47}while(0);if((F|0)==47){x=0;Q=Ba(563,24)|0;ib=x;x=0;if(ib&1)break;k[Q+16>>2]=Ta;k[Q+20>>2]=0;k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=tb;k[sb>>2]=Q;ib=k[k[c>>2]>>2]|0;if(!ib)vb=Q;else{k[c>>2]=ib;vb=k[sb>>2]|0}ui(k[b+8>>2]|0,vb);ib=b+12|0;k[ib>>2]=(k[ib>>2]|0)+1;ub=Q}k[ub+20>>2]=P;Q=k[q>>2]|0;if(!Q){r=e;return}ib=k[s>>2]|0;if((ib|0)!=(Q|0))k[s>>2]=ib+(~((ib+-4-Q|0)>>>2)<<2);OBa(Q);r=e;return}while(0);P=Hc()|0;ub=M;vb=k[q>>2]|0;if(!vb){jb=P;kb=ub;Sc(jb|0)}q=k[s>>2]|0;if((q|0)!=(vb|0))k[s>>2]=q+(~((q+-4-vb|0)>>>2)<<2);OBa(vb);jb=P;kb=ub;Sc(jb|0)}Eyb(f|0,n|0,40)|0;k[o>>2]=2;n=o+8|0;ub=f;f=n+40|0;do{k[n>>2]=k[ub>>2];n=n+4|0;ub=ub+4|0}while((n|0)<(f|0));ub=o+48|0;k[ub>>2]=-1;k[ub+4>>2]=-1;ub=o+56|0;n=o+60|0;f=o+72|0;k[ub>>2]=0;k[ub+4>>2]=0;k[ub+8>>2]=0;k[ub+12>>2]=0;k[ub+16>>2]=0;k[p>>2]=0;ub=p+4|0;k[ub>>2]=0;k[p+8>>2]=0;x=0;P=Va(93,Ua|0,o|0,p|0,1,0)|0;o=x;x=0;do if(!(o&1)){Ua=b+4|0;vb=b+8|0;q=k[vb>>2]|0;do if(q){s=q;while(1){sb=k[s+16>>2]|0;if((sb|0)>(Ta|0)){tb=k[s>>2]|0;if(!tb){wb=s;xb=s;F=8;break}else yb=tb}else{if((sb|0)>=(Ta|0)){zb=s;F=14;break}sb=s+4|0;tb=k[sb>>2]|0;if(!tb){Ab=sb;Bb=s;F=12;break}else yb=tb}s=yb}if((F|0)==8){k[l>>2]=xb;Cb=wb;Db=xb;F=15;break}else if((F|0)==12){k[l>>2]=Bb;Cb=Ab;Db=Bb;F=15;break}else if((F|0)==14){k[l>>2]=zb;if(!zb){Cb=l;Db=zb;F=15;break}else{Eb=zb;break}}}else{k[l>>2]=vb;Cb=vb;Db=vb;F=15}while(0);if((F|0)==15){x=0;vb=Ba(563,24)|0;q=x;x=0;if(q&1)break;k[vb+16>>2]=Ta;k[vb+20>>2]=0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=Db;k[Cb>>2]=vb;q=k[k[Ua>>2]>>2]|0;if(!q)Fb=vb;else{k[Ua>>2]=q;Fb=k[Cb>>2]|0}ui(k[b+8>>2]|0,Fb);q=b+12|0;k[q>>2]=(k[q>>2]|0)+1;Eb=vb}k[Eb+20>>2]=P;vb=k[p>>2]|0;q=vb;if(vb){c=k[ub>>2]|0;if((c|0)!=(vb|0))k[ub>>2]=c+(~((c+-4-q|0)>>>2)<<2);OBa(vb)}vb=k[f>>2]|0;if(vb)j0a(vb);vb=k[n>>2]|0;if(!vb){r=e;return}j0a(vb);r=e;return}while(0);e=Hc()|0;P=M;Eb=k[p>>2]|0;p=Eb;if(Eb){b=k[ub>>2]|0;if((b|0)!=(Eb|0))k[ub>>2]=b+(~((b+-4-p|0)>>>2)<<2);OBa(Eb)}Eb=k[f>>2]|0;if(Eb)j0a(Eb);Eb=k[n>>2]|0;if(!Eb){jb=e;kb=P;Sc(jb|0)}j0a(Eb);jb=e;kb=P;Sc(jb|0)}}}function xR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=r;r=r+16|0;e=d;f=a+4|0;g=a+8|0;h=k[g>>2]|0;do if(h){i=h;while(1){j=k[i+16>>2]|0;if((j|0)>(b|0)){l=k[i>>2]|0;if(!l){m=i;n=i;o=4;break}else p=l}else{if((j|0)>=(b|0)){q=i;o=10;break}j=i+4|0;l=k[j>>2]|0;if(!l){s=j;t=i;o=8;break}else p=l}i=p}if((o|0)==4){k[e>>2]=n;u=m;v=n;break}else if((o|0)==8){k[e>>2]=t;u=s;v=t;break}else if((o|0)==10){k[e>>2]=q;if(!q){u=e;v=q;break}else w=q;x=w+20|0;k[x>>2]=c;r=d;return}}else{k[e>>2]=g;u=g;v=g}while(0);g=KBa(24)|0;k[g+16>>2]=b;k[g+20>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=v;k[u>>2]=g;v=k[k[f>>2]>>2]|0;if(!v)y=g;else{k[f>>2]=v;y=k[u>>2]|0}ui(k[a+8>>2]|0,y);y=a+12|0;k[y>>2]=(k[y>>2]|0)+1;w=g;x=w+20|0;k[x>>2]=c;r=d;return}function yR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=r;r=r+144|0;e=d+132|0;f=d+40|0;g=d;h=d+120|0;i=a+4|0;j=a+8|0;l=k[j>>2]|0;a:do if(l){m=l;while(1){n=k[m+16>>2]|0;if((n|0)>(b|0))o=m;else{if((n|0)>=(b|0)){p=l;break}o=m+4|0}m=k[o>>2]|0;if(!m)break a}while(1){m=k[p+16>>2]|0;if((m|0)>(b|0)){n=k[p>>2]|0;if(!n)break;else q=n}else{if((m|0)>=(b|0)){s=p;t=12;break}m=k[p+4>>2]|0;if(!m)break;else q=m}p=q}if((t|0)==12?(s|0)!=0:0){u=k[s+20>>2]|0;r=d;return u|0}m=Rd(8)|0;x=0;xa(671,m|0,296399);n=x;x=0;if(n&1){n=Hc()|0;Fc(m|0);Sc(n|0)}else{k[m>>2]=47544;Gf(m|0,9024,933)}}while(0);s=k[a+56>>2]|0;q=(b|0)<0;k[g>>2]=q?0-b|0:b;k[g+32>>2]=1;if(q)NC(g);k[f>>2]=0;q=f+8|0;p=g;g=q+40|0;do{k[q>>2]=k[p>>2];q=q+4|0;p=p+4|0}while((q|0)<(g|0));p=c;q=k[p+4>>2]|0;g=f+48|0;k[g>>2]=k[p>>2];k[g+4>>2]=q;k[f+56>>2]=k[c+8>>2];q=f+60|0;g=k[c+12>>2]|0;k[q>>2]=g;if(g)h0a(g);k[f+64>>2]=0;k[f+68>>2]=0;g=f+72|0;k[g>>2]=0;k[h>>2]=0;c=h+4|0;k[c>>2]=0;k[h+8>>2]=0;x=0;p=Va(93,s|0,f|0,h|0,1,0)|0;f=x;x=0;do if(!(f&1)){s=k[j>>2]|0;do if(s){o=s;while(1){l=k[o+16>>2]|0;if((l|0)>(b|0)){m=k[o>>2]|0;if(!m){v=o;w=o;t=25;break}else y=m}else{if((l|0)>=(b|0)){z=o;t=31;break}l=o+4|0;m=k[l>>2]|0;if(!m){A=l;B=o;t=29;break}else y=m}o=y}if((t|0)==25){k[e>>2]=w;C=v;D=w;t=32;break}else if((t|0)==29){k[e>>2]=B;C=A;D=B;t=32;break}else if((t|0)==31){k[e>>2]=z;if(!z){C=e;D=z;t=32;break}else{E=z;break}}}else{k[e>>2]=j;C=j;D=j;t=32}while(0);if((t|0)==32){x=0;s=Ba(563,24)|0;o=x;x=0;if(o&1)break;k[s+16>>2]=b;k[s+20>>2]=0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=D;k[C>>2]=s;o=k[k[i>>2]>>2]|0;if(!o)F=s;else{k[i>>2]=o;F=k[C>>2]|0}ui(k[a+8>>2]|0,F);o=a+12|0;k[o>>2]=(k[o>>2]|0)+1;E=s}k[E+20>>2]=p;s=k[h>>2]|0;o=s;if(s){m=k[c>>2]|0;if((m|0)!=(s|0))k[c>>2]=m+(~((m+-4-o|0)>>>2)<<2);OBa(s)}s=k[g>>2]|0;if(s)j0a(s);s=k[q>>2]|0;if(!s){u=p;r=d;return u|0}j0a(s);u=p;r=d;return u|0}while(0);u=Hc()|0;d=k[h>>2]|0;h=d;if(d){p=k[c>>2]|0;if((p|0)!=(d|0))k[c>>2]=p+(~((p+-4-h|0)>>>2)<<2);OBa(d)}d=k[g>>2]|0;if(d)j0a(d);d=k[q>>2]|0;if(!d)Sc(u|0);j0a(d);Sc(u|0);return 0}function zR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;e=r;r=r+16|0;f=e+12|0;g=e;q2a(g,230137,28);x=0;pa(49,(b|0)!=(c|0)|0,g|0,273,230011,230166);h=x;x=0;if(h&1){h=Hc()|0;K2a(g);Sc(h|0)}K2a(g);yR(a,b,d)|0;yR(a,c,d)|0;d=a+4|0;g=a+8|0;h=k[g>>2]|0;do if(h){i=h;while(1){j=k[i+16>>2]|0;if((j|0)>(b|0)){l=k[i>>2]|0;if(!l){m=i;n=i;o=5;break}else p=l}else{if((j|0)>=(b|0)){q=i;o=11;break}j=i+4|0;l=k[j>>2]|0;if(!l){s=j;t=i;o=9;break}else p=l}i=p}if((o|0)==5){k[f>>2]=n;u=m;v=n;o=12;break}else if((o|0)==9){k[f>>2]=t;u=s;v=t;o=12;break}else if((o|0)==11){k[f>>2]=q;if(!q){u=f;v=q;o=12;break}else{w=h;y=q;break}}}else{k[f>>2]=g;u=g;v=g;o=12}while(0);if((o|0)==12){q=KBa(24)|0;k[q+16>>2]=b;k[q+20>>2]=0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=v;k[u>>2]=q;v=k[k[d>>2]>>2]|0;if(!v)z=q;else{k[d>>2]=v;z=k[u>>2]|0}ui(k[a+8>>2]|0,z);z=a+12|0;k[z>>2]=(k[z>>2]|0)+1;w=k[g>>2]|0;y=q}q=y+20|0;do if(w){y=w;while(1){z=k[y+16>>2]|0;if((z|0)>(c|0)){u=k[y>>2]|0;if(!u){A=y;B=y;o=18;break}else C=u}else{if((z|0)>=(c|0)){D=y;o=24;break}z=y+4|0;u=k[z>>2]|0;if(!u){E=z;F=y;o=22;break}else C=u}y=C}if((o|0)==18){k[f>>2]=B;G=A;H=B;break}else if((o|0)==22){k[f>>2]=F;G=E;H=F;break}else if((o|0)==24){k[f>>2]=D;if(!D){G=f;H=D;break}else I=D;J=I+20|0;K=k[q>>2]|0;L=k[J>>2]|0;k[q>>2]=L;k[J>>2]=K;r=e;return}}else{k[f>>2]=g;G=g;H=g}while(0);g=KBa(24)|0;k[g+16>>2]=c;k[g+20>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=H;k[G>>2]=g;H=k[k[d>>2]>>2]|0;if(!H)M=g;else{k[d>>2]=H;M=k[G>>2]|0}ui(k[a+8>>2]|0,M);M=a+12|0;k[M>>2]=(k[M>>2]|0)+1;I=g;J=I+20|0;K=k[q>>2]|0;L=k[J>>2]|0;k[q>>2]=L;k[J>>2]=K;r=e;return}function AR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;f=r;r=r+112|0;g=f+104|0;h=f+80|0;i=f;j=f+92|0;l=b+20|0;m=b+24|0;n=k[m>>2]|0;a:do if(n){o=n;while(1){p=k[o+16>>2]|0;if(p>>>0>c>>>0)q=o;else{if(p>>>0>=c>>>0)break;q=o+4|0}o=k[q>>2]|0;if(!o)break a}o=n;while(1){p=k[o+16>>2]|0;if(p>>>0>c>>>0){s=k[o>>2]|0;if(!s){t=o;u=o;v=10;break}else w=s}else{if(p>>>0>=c>>>0){y=o;v=15;break}p=o+4|0;s=k[p>>2]|0;if(!s){z=p;A=o;v=14;break}else w=s}o=w}if((v|0)==10){k[g>>2]=u;B=t;C=u;v=16}else if((v|0)==14){k[g>>2]=A;B=z;C=A;v=16}else if((v|0)==15){k[g>>2]=y;if(!y){B=g;C=y;v=16}else D=y}if((v|0)==16){o=KBa(24)|0;k[o+16>>2]=c;k[o+20>>2]=0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=C;k[B>>2]=o;s=k[k[l>>2]>>2]|0;if(!s)E=o;else{k[l>>2]=s;E=k[B>>2]|0}ui(k[b+24>>2]|0,E);s=b+28|0;k[s>>2]=(k[s>>2]|0)+1;D=o}if((k[D+20>>2]|0)==(d|0)){k[a>>2]=0;k[a+8>>2]=-1;r=f;return}}while(0);D=b+16|0;k[D>>2]=(k[D>>2]|0)+1;E=h+4|0;k[E>>2]=0;B=h+8|0;k[B>>2]=0;C=h+4|0;k[h>>2]=C;y=k[l>>2]|0;b:do if((y|0)==(m|0))F=h;else{A=b+56|0;z=C;u=y;c:while(1){t=u+16|0;x=0;w=Fa(115,k[A>>2]|0,k[t>>2]|0,c|0)|0;n=x;x=0;if(n&1)break;if(!(!w?(k[u+20>>2]|0)!=(d|0):0))v=33;do if((v|0)==33){v=0;x=0;w=Ba(563,24)|0;n=x;x=0;if(n&1)break c;n=t;q=k[n>>2]|0;o=k[n+4>>2]|0;n=w+16|0;k[n>>2]=q;k[n+4>>2]=o;o=k[C>>2]|0;do if(o){n=o;while(1){s=k[n+16>>2]|0;if(q>>>0>>0){p=k[n>>2]|0;if(!p){G=n;H=n;v=37;break}else I=p}else{if(s>>>0>=q>>>0){J=n;v=42;break}s=n+4|0;p=k[s>>2]|0;if(!p){K=s;L=n;v=41;break}else I=p}n=I}if((v|0)==37){v=0;k[g>>2]=H;N=G;O=H;break}else if((v|0)==41){v=0;k[g>>2]=L;N=K;O=L;break}else if((v|0)==42){v=0;k[g>>2]=J;N=g;O=J;break}}else{k[g>>2]=C;N=C;O=z}while(0);if(k[N>>2]|0){OBa(w);break}k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=O;k[N>>2]=w;q=k[k[h>>2]>>2]|0;if(!q)P=w;else{k[h>>2]=q;P=k[N>>2]|0}ui(k[E>>2]|0,P);k[B>>2]=(k[B>>2]|0)+1}while(0);t=k[u+4>>2]|0;if(!t){q=u;while(1){o=k[q+8>>2]|0;if((k[o>>2]|0)==(q|0)){Q=o;break}else q=o}}else{q=t;while(1){o=k[q>>2]|0;if(!o){Q=q;break}else q=o}}if((Q|0)==(m|0)){F=h;break b}else u=Q}u=Hc()|0;R=u;S=M;T=k[C>>2]|0;Ay(h,T);Sc(R|0)}while(0);Ay(l,k[m>>2]|0);k[l>>2]=k[F>>2];F=k[C>>2]|0;k[m>>2]=F;Q=b+28|0;P=k[B>>2]|0;k[Q>>2]=P;if(!P)k[l>>2]=m;else{k[F+8>>2]=m;k[h>>2]=C;k[C>>2]=0;k[B>>2]=0}k[i>>2]=1;k[i+8>>2]=85;k[i+40>>2]=1;B=e;F=k[B+4>>2]|0;P=i+48|0;k[P>>2]=k[B>>2];k[P+4>>2]=F;k[i+56>>2]=k[e+8>>2];F=i+60|0;P=k[e+12>>2]|0;k[F>>2]=P;if(P)h0a(P);k[i+64>>2]=0;k[i+68>>2]=0;P=i+72|0;k[P>>2]=0;e=k[b+56>>2]|0;k[j>>2]=0;B=j+4|0;k[B>>2]=0;k[j+8>>2]=0;x=0;E=Ba(563,8)|0;N=x;x=0;do if(N&1){O=Hc()|0;U=M;V=O;v=81}else{k[j>>2]=E;O=E+8|0;k[j+8>>2]=O;k[E>>2]=c;k[E+4>>2]=d;k[B>>2]=O;x=0;O=Va(93,e|0,i|0,j|0,1,k[D>>2]|0)|0;J=x;x=0;if(J&1){J=Hc()|0;L=M;K=k[j>>2]|0;if(!K){W=J;X=L;break}H=k[B>>2]|0;if((H|0)!=(K|0))k[B>>2]=H+(~((H+-4-K|0)>>>2)<<2);OBa(K);W=J;X=L;break}L=k[j>>2]|0;J=L;if(L){K=k[B>>2]|0;if((K|0)!=(L|0))k[B>>2]=K+(~((K+-4-J|0)>>>2)<<2);OBa(L)}L=k[D>>2]|0;J=k[m>>2]|0;do if(J){K=J;while(1){H=k[K+16>>2]|0;if(H>>>0>c>>>0){G=k[K>>2]|0;if(!G){Y=K;Z=K;v=64;break}else _=G}else{if(H>>>0>=c>>>0){$=K;v=70;break}H=K+4|0;G=k[H>>2]|0;if(!G){aa=H;ba=K;v=68;break}else _=G}K=_}if((v|0)==64){k[g>>2]=Z;ca=Y;da=Z;v=71;break}else if((v|0)==68){k[g>>2]=ba;ca=aa;da=ba;v=71;break}else if((v|0)==70){k[g>>2]=$;if(!$){ca=g;da=$;v=71;break}else{ea=$;break}}}else{k[g>>2]=m;ca=m;da=m;v=71}while(0);if((v|0)==71){x=0;J=Ba(563,24)|0;K=x;x=0;if(K&1){K=Hc()|0;U=M;V=K;v=81;break}k[J+16>>2]=c;k[J+20>>2]=0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=da;k[ca>>2]=J;K=k[k[l>>2]>>2]|0;if(!K)fa=J;else{k[l>>2]=K;fa=k[ca>>2]|0}ui(k[b+24>>2]|0,fa);k[Q>>2]=(k[Q>>2]|0)+1;ea=J}k[ea+20>>2]=d;k[D>>2]=(k[D>>2]|0)+1;k[a>>2]=2;k[a+4>>2]=c;k[a+8>>2]=L;k[a+12>>2]=O;J=k[P>>2]|0;if(J)j0a(J);J=k[F>>2]|0;if(J)j0a(J);Ay(h,k[C>>2]|0);r=f;return}while(0);if((v|0)==81){W=V;X=U}U=k[P>>2]|0;if(U)j0a(U);U=k[F>>2]|0;if(!U){R=W;S=X;T=k[C>>2]|0;Ay(h,T);Sc(R|0)}j0a(U);R=W;S=X;T=k[C>>2]|0;Ay(h,T);Sc(R|0)}function BR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+96|0;e=d+92|0;f=d;g=d+80|0;h=a+20|0;i=a+24|0;j=k[i>>2]|0;a:do if(j){l=j;while(1){m=k[l+16>>2]|0;if(m>>>0>b>>>0)n=l;else{if(m>>>0>=b>>>0){o=j;break}n=l+4|0}l=k[n>>2]|0;if(!l)break a}while(1){l=k[o+16>>2]|0;if(l>>>0>b>>>0){m=k[o>>2]|0;if(!m)break;else p=m}else{if(l>>>0>=b>>>0){q=o;s=12;break}l=k[o+4>>2]|0;if(!l)break;else p=l}o=p}if((s|0)==12?(q|0)!=0:0){t=k[q+20>>2]|0;r=d;return t|0}l=Rd(8)|0;x=0;xa(671,l|0,296399);m=x;x=0;if(m&1){m=Hc()|0;Fc(l|0);Sc(m|0)}else{k[l>>2]=47544;Gf(l|0,9024,933)}}while(0);k[f>>2]=1;k[f+8>>2]=84;k[f+40>>2]=1;q=c;p=k[q+4>>2]|0;o=f+48|0;k[o>>2]=k[q>>2];k[o+4>>2]=p;k[f+56>>2]=k[c+8>>2];p=f+60|0;o=k[c+12>>2]|0;k[p>>2]=o;if(o)h0a(o);k[f+64>>2]=0;k[f+68>>2]=0;o=f+72|0;k[o>>2]=0;c=k[a+56>>2]|0;k[g>>2]=0;q=g+4|0;k[q>>2]=0;k[g+8>>2]=0;x=0;n=Ba(563,4)|0;j=x;x=0;if(!(j&1)){k[g>>2]=n;j=n+4|0;k[g+8>>2]=j;k[n>>2]=b;k[q>>2]=j;x=0;j=Va(93,c|0,f|0,g|0,1,k[a+16>>2]|0)|0;f=x;x=0;do if(!(f&1)){c=k[i>>2]|0;do if(c){n=c;while(1){l=k[n+16>>2]|0;if(l>>>0>b>>>0){m=k[n>>2]|0;if(!m){u=n;v=n;s=24;break}else w=m}else{if(l>>>0>=b>>>0){y=n;s=30;break}l=n+4|0;m=k[l>>2]|0;if(!m){z=l;A=n;s=28;break}else w=m}n=w}if((s|0)==24){k[e>>2]=v;B=u;C=v;s=31;break}else if((s|0)==28){k[e>>2]=A;B=z;C=A;s=31;break}else if((s|0)==30){k[e>>2]=y;if(!y){B=e;C=y;s=31;break}else{D=y;break}}}else{k[e>>2]=i;B=i;C=i;s=31}while(0);if((s|0)==31){x=0;c=Ba(563,24)|0;n=x;x=0;if(n&1)break;k[c+16>>2]=b;k[c+20>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=C;k[B>>2]=c;n=k[k[h>>2]>>2]|0;if(!n)E=c;else{k[h>>2]=n;E=k[B>>2]|0}ui(k[a+24>>2]|0,E);n=a+28|0;k[n>>2]=(k[n>>2]|0)+1;D=c}k[D+20>>2]=j;c=k[g>>2]|0;n=c;if(c){m=k[q>>2]|0;if((m|0)!=(c|0))k[q>>2]=m+(~((m+-4-n|0)>>>2)<<2);OBa(c)}c=k[o>>2]|0;if(c)j0a(c);c=k[p>>2]|0;if(c)j0a(c);t=j;r=d;return t|0}while(0);t=Hc()|0;d=M;j=k[g>>2]|0;g=j;if(!j){F=d;G=t}else{D=k[q>>2]|0;if((D|0)!=(j|0))k[q>>2]=D+(~((D+-4-g|0)>>>2)<<2);OBa(j);F=d;G=t}}else{t=Hc()|0;F=M;G=t}t=k[o>>2]|0;if(t)j0a(t);t=k[p>>2]|0;if(!t)Sc(G|0);j0a(t);Sc(G|0);return 0}function CR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;f=r;r=r+112|0;g=f+104|0;h=f+80|0;i=f;j=f+92|0;l=b+32|0;m=b+36|0;n=k[m>>2]|0;a:do if(n){o=n;while(1){p=k[o+16>>2]|0;if(p>>>0>c>>>0)q=o;else{if(p>>>0>=c>>>0)break;q=o+4|0}o=k[q>>2]|0;if(!o)break a}o=n;while(1){p=k[o+16>>2]|0;if(p>>>0>c>>>0){s=k[o>>2]|0;if(!s){t=o;u=o;v=10;break}else w=s}else{if(p>>>0>=c>>>0){y=o;v=15;break}p=o+4|0;s=k[p>>2]|0;if(!s){z=p;A=o;v=14;break}else w=s}o=w}if((v|0)==10){k[g>>2]=u;B=t;C=u;v=16}else if((v|0)==14){k[g>>2]=A;B=z;C=A;v=16}else if((v|0)==15){k[g>>2]=y;if(!y){B=g;C=y;v=16}else D=y}if((v|0)==16){o=KBa(24)|0;k[o+16>>2]=c;k[o+20>>2]=0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=C;k[B>>2]=o;s=k[k[l>>2]>>2]|0;if(!s)E=o;else{k[l>>2]=s;E=k[B>>2]|0}ui(k[b+36>>2]|0,E);s=b+40|0;k[s>>2]=(k[s>>2]|0)+1;D=o}if((k[D+20>>2]|0)==(d|0)){k[a>>2]=0;k[a+8>>2]=-1;r=f;return}}while(0);D=b+16|0;k[D>>2]=(k[D>>2]|0)+1;E=h+4|0;k[E>>2]=0;B=h+8|0;k[B>>2]=0;C=h+4|0;k[h>>2]=C;y=k[l>>2]|0;b:do if((y|0)==(m|0))F=h;else{A=b+56|0;z=C;u=y;c:while(1){t=u+16|0;x=0;w=Fa(116,k[A>>2]|0,k[t>>2]|0,c|0)|0;n=x;x=0;if(n&1)break;do if(w){x=0;n=Ba(563,24)|0;q=x;x=0;if(q&1)break c;q=t;o=k[q>>2]|0;s=k[q+4>>2]|0;q=n+16|0;k[q>>2]=o;k[q+4>>2]=s;s=k[C>>2]|0;do if(s){q=s;while(1){p=k[q+16>>2]|0;if(o>>>0

      >>0){G=k[q>>2]|0;if(!G){H=q;I=q;v=36;break}else J=G}else{if(p>>>0>=o>>>0){K=q;v=41;break}p=q+4|0;G=k[p>>2]|0;if(!G){L=p;N=q;v=40;break}else J=G}q=J}if((v|0)==36){v=0;k[g>>2]=I;O=H;P=I;break}else if((v|0)==40){v=0;k[g>>2]=N;O=L;P=N;break}else if((v|0)==41){v=0;k[g>>2]=K;O=g;P=K;break}}else{k[g>>2]=C;O=C;P=z}while(0);if(k[O>>2]|0){OBa(n);break}k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=P;k[O>>2]=n;o=k[k[h>>2]>>2]|0;if(!o)Q=n;else{k[h>>2]=o;Q=k[O>>2]|0}ui(k[E>>2]|0,Q);k[B>>2]=(k[B>>2]|0)+1}while(0);t=k[u+4>>2]|0;if(!t){w=u;while(1){o=k[w+8>>2]|0;if((k[o>>2]|0)==(w|0)){R=o;break}else w=o}}else{w=t;while(1){o=k[w>>2]|0;if(!o){R=w;break}else w=o}}if((R|0)==(m|0)){F=h;break b}else u=R}u=Hc()|0;S=u;T=M;U=k[C>>2]|0;Ay(h,U);Sc(S|0)}while(0);Ay(l,k[m>>2]|0);k[l>>2]=k[F>>2];F=k[C>>2]|0;k[m>>2]=F;R=b+40|0;Q=k[B>>2]|0;k[R>>2]=Q;if(!Q)k[l>>2]=m;else{k[F+8>>2]=m;k[h>>2]=C;k[C>>2]=0;k[B>>2]=0}k[i>>2]=1;k[i+8>>2]=82;k[i+40>>2]=1;B=e;F=k[B+4>>2]|0;Q=i+48|0;k[Q>>2]=k[B>>2];k[Q+4>>2]=F;k[i+56>>2]=k[e+8>>2];F=i+60|0;Q=k[e+12>>2]|0;k[F>>2]=Q;if(Q)h0a(Q);k[i+64>>2]=0;k[i+68>>2]=0;Q=i+72|0;k[Q>>2]=0;e=k[b+56>>2]|0;k[j>>2]=0;B=j+4|0;k[B>>2]=0;k[j+8>>2]=0;x=0;E=Ba(563,8)|0;O=x;x=0;do if(O&1){P=Hc()|0;V=M;W=P;v=80}else{k[j>>2]=E;P=E+8|0;k[j+8>>2]=P;k[E>>2]=c;k[E+4>>2]=d;k[B>>2]=P;x=0;P=Va(93,e|0,i|0,j|0,1,k[D>>2]|0)|0;K=x;x=0;if(K&1){K=Hc()|0;N=M;L=k[j>>2]|0;if(!L){X=K;Y=N;break}I=k[B>>2]|0;if((I|0)!=(L|0))k[B>>2]=I+(~((I+-4-L|0)>>>2)<<2);OBa(L);X=K;Y=N;break}N=k[j>>2]|0;K=N;if(N){L=k[B>>2]|0;if((L|0)!=(N|0))k[B>>2]=L+(~((L+-4-K|0)>>>2)<<2);OBa(N)}N=k[D>>2]|0;K=k[m>>2]|0;do if(K){L=K;while(1){I=k[L+16>>2]|0;if(I>>>0>c>>>0){H=k[L>>2]|0;if(!H){Z=L;_=L;v=63;break}else $=H}else{if(I>>>0>=c>>>0){aa=L;v=69;break}I=L+4|0;H=k[I>>2]|0;if(!H){ba=I;ca=L;v=67;break}else $=H}L=$}if((v|0)==63){k[g>>2]=_;da=Z;ea=_;v=70;break}else if((v|0)==67){k[g>>2]=ca;da=ba;ea=ca;v=70;break}else if((v|0)==69){k[g>>2]=aa;if(!aa){da=g;ea=aa;v=70;break}else{fa=aa;break}}}else{k[g>>2]=m;da=m;ea=m;v=70}while(0);if((v|0)==70){x=0;K=Ba(563,24)|0;L=x;x=0;if(L&1){L=Hc()|0;V=M;W=L;v=80;break}k[K+16>>2]=c;k[K+20>>2]=0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=ea;k[da>>2]=K;L=k[k[l>>2]>>2]|0;if(!L)ga=K;else{k[l>>2]=L;ga=k[da>>2]|0}ui(k[b+36>>2]|0,ga);k[R>>2]=(k[R>>2]|0)+1;fa=K}k[fa+20>>2]=d;k[D>>2]=(k[D>>2]|0)+1;k[a>>2]=1;k[a+4>>2]=c;k[a+8>>2]=N;k[a+12>>2]=P;K=k[Q>>2]|0;if(K)j0a(K);K=k[F>>2]|0;if(K)j0a(K);Ay(h,k[C>>2]|0);r=f;return}while(0);if((v|0)==80){X=W;Y=V}V=k[Q>>2]|0;if(V)j0a(V);V=k[F>>2]|0;if(!V){S=X;T=Y;U=k[C>>2]|0;Ay(h,U);Sc(S|0)}j0a(V);S=X;T=Y;U=k[C>>2]|0;Ay(h,U);Sc(S|0)}function DR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+96|0;e=d+92|0;f=d;g=d+80|0;h=a+32|0;i=a+36|0;j=k[i>>2]|0;a:do if(j){l=j;while(1){m=k[l+16>>2]|0;if(m>>>0>b>>>0)n=l;else{if(m>>>0>=b>>>0){o=j;break}n=l+4|0}l=k[n>>2]|0;if(!l)break a}while(1){l=k[o+16>>2]|0;if(l>>>0>b>>>0){m=k[o>>2]|0;if(!m)break;else p=m}else{if(l>>>0>=b>>>0){q=o;s=12;break}l=k[o+4>>2]|0;if(!l)break;else p=l}o=p}if((s|0)==12?(q|0)!=0:0){t=k[q+20>>2]|0;r=d;return t|0}l=Rd(8)|0;x=0;xa(671,l|0,296399);m=x;x=0;if(m&1){m=Hc()|0;Fc(l|0);Sc(m|0)}else{k[l>>2]=47544;Gf(l|0,9024,933)}}while(0);k[f>>2]=1;k[f+8>>2]=81;k[f+40>>2]=1;q=c;p=k[q+4>>2]|0;o=f+48|0;k[o>>2]=k[q>>2];k[o+4>>2]=p;k[f+56>>2]=k[c+8>>2];p=f+60|0;o=k[c+12>>2]|0;k[p>>2]=o;if(o)h0a(o);k[f+64>>2]=0;k[f+68>>2]=0;o=f+72|0;k[o>>2]=0;c=k[a+56>>2]|0;k[g>>2]=0;q=g+4|0;k[q>>2]=0;k[g+8>>2]=0;x=0;n=Ba(563,4)|0;j=x;x=0;if(!(j&1)){k[g>>2]=n;j=n+4|0;k[g+8>>2]=j;k[n>>2]=b;k[q>>2]=j;x=0;j=Va(93,c|0,f|0,g|0,1,k[a+16>>2]|0)|0;f=x;x=0;do if(!(f&1)){c=k[i>>2]|0;do if(c){n=c;while(1){l=k[n+16>>2]|0;if(l>>>0>b>>>0){m=k[n>>2]|0;if(!m){u=n;v=n;s=24;break}else w=m}else{if(l>>>0>=b>>>0){y=n;s=30;break}l=n+4|0;m=k[l>>2]|0;if(!m){z=l;A=n;s=28;break}else w=m}n=w}if((s|0)==24){k[e>>2]=v;B=u;C=v;s=31;break}else if((s|0)==28){k[e>>2]=A;B=z;C=A;s=31;break}else if((s|0)==30){k[e>>2]=y;if(!y){B=e;C=y;s=31;break}else{D=y;break}}}else{k[e>>2]=i;B=i;C=i;s=31}while(0);if((s|0)==31){x=0;c=Ba(563,24)|0;n=x;x=0;if(n&1)break;k[c+16>>2]=b;k[c+20>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=C;k[B>>2]=c;n=k[k[h>>2]>>2]|0;if(!n)E=c;else{k[h>>2]=n;E=k[B>>2]|0}ui(k[a+36>>2]|0,E);n=a+40|0;k[n>>2]=(k[n>>2]|0)+1;D=c}k[D+20>>2]=j;c=k[g>>2]|0;n=c;if(c){m=k[q>>2]|0;if((m|0)!=(c|0))k[q>>2]=m+(~((m+-4-n|0)>>>2)<<2);OBa(c)}c=k[o>>2]|0;if(c)j0a(c);c=k[p>>2]|0;if(c)j0a(c);t=j;r=d;return t|0}while(0);t=Hc()|0;d=M;j=k[g>>2]|0;g=j;if(!j){F=d;G=t}else{D=k[q>>2]|0;if((D|0)!=(j|0))k[q>>2]=D+(~((D+-4-g|0)>>>2)<<2);OBa(j);F=d;G=t}}else{t=Hc()|0;F=M;G=t}t=k[o>>2]|0;if(t)j0a(t);t=k[p>>2]|0;if(!t)Sc(G|0);j0a(t);Sc(G|0);return 0}function ER(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0;e=r;r=r+720|0;f=e+480|0;g=e+440|0;h=e+400|0;j=e+636|0;l=e+200|0;m=e+120|0;n=e+664|0;o=e+596|0;p=e+320|0;q=e+624|0;s=e+240|0;t=e+612|0;u=e+608|0;v=e+572|0;w=e+584|0;y=e+80|0;z=e;A=e+544|0;B=e+680|0;C=e+532|0;D=e+520|0;k[m>>2]=1;k[m+8>>2]=32;k[m+40>>2]=1;E=d;F=k[E+4>>2]|0;G=m+48|0;k[G>>2]=k[E>>2];k[G+4>>2]=F;F=d+8|0;k[m+56>>2]=k[F>>2];G=m+60|0;E=d+12|0;H=k[E>>2]|0;k[G>>2]=H;if(H)h0a(H);k[m+64>>2]=0;k[m+68>>2]=0;H=m+72|0;k[H>>2]=0;I=a+56|0;x=0;J=Ta(524,k[I>>2]|0,c|0)|0;K=x;x=0;a:do if(K&1){L=Hc()|0;N=M;O=L;P=14}else{b:do if((J|0)!=0?(L=J+32|0,Q=k[L>>2]|0,!(Q>>>0>1|(k[J>>2]|0)>>>0>128)):0){k[o>>2]=0;R=o+4|0;k[R>>2]=0;k[o+8>>2]=0;k[f>>2]=0;S=f+32|0;k[S>>2]=1;T=p+8|0;U=p+40|0;V=p+48|0;W=p+56|0;X=p+60|0;Y=p+64|0;Z=p+68|0;_=p+72|0;$=f+4|0;aa=f+36|0;ba=s+8|0;ca=s+12|0;da=s+40|0;ea=s+44|0;fa=s+48|0;ga=s+56|0;ha=s+60|0;ia=s+72|0;ja=t+4|0;ka=t+8|0;la=q+4|0;ma=q+8|0;na=q+8|0;oa=o+8|0;pa=1;qa=Q;c:while(1){if((pa|0)==(qa|0)){Q=qa;while(1){Q=Q+-1|0;if((Q|0)<=-1){P=25;break c}ra=k[f+(Q<<2)>>2]|0;sa=k[J+(Q<<2)>>2]|0;if((ra|0)!=(sa|0)){ta=ra;ua=sa;break}}if(ta>>>0>ua>>>0){P=25;break}}else if(pa>>>0>qa>>>0){P=25;break}Q=k[I>>2]|0;k[p>>2]=1;k[T>>2]=1;k[U>>2]=1;sa=d;ra=k[sa+4>>2]|0;va=V;k[va>>2]=k[sa>>2];k[va+4>>2]=ra;k[W>>2]=k[F>>2];ra=k[E>>2]|0;k[X>>2]=ra;if(!ra)wa=Q;else{h0a(ra);wa=k[I>>2]|0}k[Y>>2]=0;k[Z>>2]=0;k[_>>2]=0;ra=k[f>>2]|0;va=k[aa>>2]|0;k[s>>2]=2;k[ba>>2]=ra;k[ca>>2]=k[$>>2];k[ca+4>>2]=k[$+4>>2];k[ca+8>>2]=k[$+8>>2];k[ca+12>>2]=k[$+12>>2];k[ca+16>>2]=k[$+16>>2];k[ca+20>>2]=k[$+20>>2];k[ca+24>>2]=k[$+24>>2];k[da>>2]=pa;k[ea>>2]=va;va=fa;k[va>>2]=-1;k[va+4>>2]=-1;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[ga+16>>2]=0;k[t>>2]=0;k[ja>>2]=0;k[ka>>2]=0;x=0;va=Va(93,wa|0,s|0,t|0,1,0)|0;ra=x;x=0;if(ra&1){P=86;break}k[q>>2]=0;k[la>>2]=0;k[ma>>2]=0;x=0;ra=Ba(563,8)|0;sa=x;x=0;if(sa&1){P=55;break}k[q>>2]=ra;sa=ra+8|0;k[na>>2]=sa;k[ra>>2]=b;k[ra+4>>2]=va;k[la>>2]=sa;x=0;sa=Va(93,Q|0,p|0,q|0,1,0)|0;Q=x;x=0;if(Q&1){P=88;break}Q=k[q>>2]|0;va=Q;if(Q){ra=k[la>>2]|0;if((ra|0)!=(Q|0))k[la>>2]=ra+(~((ra+-4-va|0)>>>2)<<2);OBa(Q)}Q=k[t>>2]|0;va=Q;if(Q){ra=k[ja>>2]|0;if((ra|0)!=(Q|0))k[ja>>2]=ra+(~((ra+-4-va|0)>>>2)<<2);OBa(Q)}Q=k[ia>>2]|0;if(Q)j0a(Q);Q=k[ha>>2]|0;if(Q)j0a(Q);Q=k[_>>2]|0;if(Q)j0a(Q);Q=k[X>>2]|0;if(Q)j0a(Q);x=0;Q=Fa(129,a|0,sa|0,d|0)|0;sa=x;x=0;if(sa&1){P=47;break}k[u>>2]=Q;sa=k[R>>2]|0;if(sa>>>0>=(k[oa>>2]|0)>>>0){x=0;xa(701,o|0,u|0);va=x;x=0;if(va&1){P=47;break}}else{k[sa>>2]=Q;k[R>>2]=sa+4}d:do if(!pa){ya=pa;za=32;P=80}else{sa=32;Q=0;va=0;while(1){ra=f+(va<<2)|0;Aa=Hyb(k[ra>>2]|0,0,sa|0,Q|0)|0;Ca=M;k[ra>>2]=Aa;if((Ca|0)==0&0==0)break d;va=va+1|0;Aa=k[S>>2]|0;if(va>>>0>=Aa>>>0){Da=Aa;Ea=Ca;break}else{sa=Ca;Q=0}}ya=Da;za=Ea;P=80}while(0);do if((P|0)==80){P=0;Q=ya+1|0;sa=Q>>>0>8?8:Q;k[S>>2]=sa;if(sa>>>0<=ya>>>0)break;k[f+(ya<<2)>>2]=za}while(0);sa=k[S>>2]|0;Q=sa+-1|0;e:do if(!Q)Ga=sa;else{va=Q;Ca=sa;while(1){if(k[f+(va<<2)>>2]|0){Ga=Ca;break e}k[S>>2]=va;Aa=va+-1|0;if(!Aa){Ga=va;break}else{ra=va;va=Aa;Ca=ra}}}while(0);pa=Ga;qa=k[L>>2]|0}f:do if((P|0)==25){L=a+44|0;qa=k[a+48>>2]|0;g:do if(qa){pa=k[R>>2]|0;S=k[o>>2]|0;oa=(S|0)==(pa|0);h:do if(oa){na=qa;while(1){ma=k[na+16>>2]|0;ka=k[na+20>>2]|0;if((ma|0)==(ka|0))break h;else{Ha=pa;Ia=ma}while(1){if((Ha|0)==(pa|0))break;ma=k[Ha>>2]|0;ga=k[Ia>>2]|0;if(ma>>>0>>0)break;if(ga>>>0>>0)break h;Ia=Ia+4|0;if((Ia|0)==(ka|0))break h;else Ha=Ha+4|0}na=k[na>>2]|0;if(!na){Ja=pa;P=130;break g}}}else{na=qa;while(1){ka=k[na+16>>2]|0;ma=k[na+20>>2]|0;i:do if((ka|0)==(ma|0)){Ka=ka;La=S;P=40}else{ga=S;fa=ka;while(1){if((ga|0)==(pa|0))break;ea=k[ga>>2]|0;da=k[fa>>2]|0;if(ea>>>0>>0)break;if(da>>>0>>0){Ka=ka;La=S;P=40;break i}fa=fa+4|0;if((fa|0)==(ma|0)){Ka=ka;La=S;P=40;break i}else ga=ga+4|0}Ma=na}while(0);if((P|0)==40){while(1){P=0;if((Ka|0)==(ma|0))break;ka=k[Ka>>2]|0;ga=k[La>>2]|0;if(ka>>>0>>0)break;if(ga>>>0>>0)break h;La=La+4|0;if((La|0)==(pa|0))break h;else{Ka=Ka+4|0;P=40}}Ma=na+4|0}na=k[Ma>>2]|0;if(!na){Ja=S;P=130;break g}}}while(0);j:do if(oa){na=k[qa+16>>2]|0;ma=k[qa+20>>2]|0;if((na|0)==(ma|0)){Na=qa;P=125}else{ka=ma;ma=na;na=qa;while(1){ga=pa;fa=ma;while(1){if((ga|0)==(pa|0))break;ea=k[ga>>2]|0;da=k[fa>>2]|0;if(ea>>>0>>0)break;if(da>>>0>>0){Na=na;P=125;break j}fa=fa+4|0;if((fa|0)==(ka|0)){Na=na;P=125;break j}else ga=ga+4|0}ga=k[na>>2]|0;if(!ga)break j;ma=k[ga+16>>2]|0;ka=k[ga+20>>2]|0;if((ma|0)==(ka|0)){Na=ga;P=125;break}else na=ga}}}else{na=qa;while(1){ka=k[na+16>>2]|0;ma=k[na+20>>2]|0;k:do if((ka|0)!=(ma|0)){ga=S;fa=ka;while(1){if((ga|0)==(pa|0))break;ea=k[ga>>2]|0;da=k[fa>>2]|0;if(ea>>>0>>0)break;if(da>>>0>>0){Oa=ka;Pa=S;P=119;break k}fa=fa+4|0;if((fa|0)==(ma|0)){Oa=ka;Pa=S;P=119;break k}else ga=ga+4|0}ga=k[na>>2]|0;if(!ga)break j;else Qa=ga}else{Oa=ka;Pa=S;P=119}while(0);if((P|0)==119){while(1){P=0;if((Oa|0)==(ma|0))break;ka=k[Oa>>2]|0;ga=k[Pa>>2]|0;if(ka>>>0>>0)break;if(ga>>>0>>0){Na=na;P=125;break j}Pa=Pa+4|0;if((Pa|0)==(pa|0)){Na=na;P=125;break j}else{Oa=Oa+4|0;P=119}}ma=k[na+4>>2]|0;if(!ma)break j;else Qa=ma}na=Qa}}while(0);if((P|0)==125?(Na|0)!=0:0){Ra=k[Na+28>>2]|0;Sa=S;break}pa=Rd(8)|0;x=0;xa(671,pa|0,296399);oa=x;x=0;if(oa&1){oa=Hc()|0;na=M;Fc(pa|0);Ua=na;Wa=oa;P=49;break f}else{k[pa>>2]=47544;x=0;fb(149,pa|0,9024,933);x=0;P=48;break}}else{Ja=k[o>>2]|0;P=130}while(0);if((P|0)==130){qa=k[R>>2]|0;do if((Ja|0)!=(qa|0)){pa=Ja;while(1){x=0;oa=Ta(524,k[I>>2]|0,k[pa>>2]|0)|0;na=x;x=0;if(na&1){P=46;break}pa=pa+4|0;if(!oa){P=193;break}if((pa|0)==(qa|0)){P=134;break}}if((P|0)==46){pa=Hc()|0;Ua=M;Wa=pa;P=49;break f}else if((P|0)==134){Xa=k[o>>2]|0;Ya=k[R>>2]|0;P=135;break}else if((P|0)==193){pa=k[I>>2]|0;k[D>>2]=0;S=D+4|0;k[S>>2]=0;k[D+8>>2]=0;x=0;oa=Ba(563,8)|0;na=x;x=0;if(na&1){na=Hc()|0;Ua=M;Wa=na;P=49;break f}k[D>>2]=oa;na=oa+8|0;k[D+8>>2]=na;k[oa>>2]=b;k[oa+4>>2]=c;k[S>>2]=na;x=0;na=Va(93,pa|0,m|0,D|0,1,k[a+16>>2]|0)|0;pa=x;x=0;if(pa&1){pa=Hc()|0;oa=M;ma=k[D>>2]|0;if(!ma){Za=pa;_a=oa;break f}ka=k[S>>2]|0;if((ka|0)!=(ma|0))k[S>>2]=ka+(~((ka+-4-ma|0)>>>2)<<2);OBa(ma);Za=pa;_a=oa;break f}else{oa=k[D>>2]|0;if(!oa){$a=na;break}pa=k[S>>2]|0;if((pa|0)!=(oa|0))k[S>>2]=pa+(~((pa+-4-oa|0)>>>2)<<2);OBa(oa);$a=na;break}}}else{Xa=Ja;Ya=Ja;P=135}while(0);l:do if((P|0)==135){k[v>>2]=0;qa=v+4|0;k[qa>>2]=0;k[v+8>>2]=0;do if((Xa|0)!=(Ya|0)){na=w+4|0;oa=w+8|0;pa=w+8|0;S=g+32|0;ma=f+32|0;ka=l+32|0;ga=Xa;while(1){x=0;fa=Ta(524,k[I>>2]|0,k[ga>>2]|0)|0;ea=x;x=0;if(ea&1){P=151;break}ab=y;bb=fa;cb=ab+40|0;do{k[ab>>2]=k[bb>>2];ab=ab+4|0;bb=bb+4|0}while((ab|0)<(cb|0));k[w>>2]=0;k[na>>2]=0;k[oa>>2]=0;x=0;fa=Ba(563,32)|0;ea=x;x=0;if(ea&1){P=151;break}k[w>>2]=fa;ea=fa+32|0;k[pa>>2]=ea;ab=fa;cb=ab+32|0;do{i[ab>>0]=0;ab=ab+1|0}while((ab|0)<(cb|0));k[na>>2]=ea;ab=l;bb=y;cb=ab+40|0;do{k[ab>>2]=k[bb>>2];ab=ab+4|0;bb=bb+4|0}while((ab|0)<(cb|0));ea=32;do{k[g>>2]=255;k[S>>2]=1;k[f>>2]=0;k[ma>>2]=1;KB(f,l,g);ea=ea+-1|0;i[fa+ea>>0]=k[f>>2];da=k[ka>>2]|0;do if(!da){k[ka>>2]=1;k[l>>2]=0}else{$=da+-1|0;ca=(((k[l+($<<2)>>2]|0)>>>0<256)<<31>>31)+da|0;if(!ca){k[ka>>2]=1;k[l>>2]=0;break}ba=(k[l>>2]|0)>>>8;k[l>>2]=ba;if(da>>>0>1){aa=1;Z=ba;ba=l;Y=0;while(1){k[ba>>2]=k[l+(aa<<2)>>2]<<24|Z;W=Y+1|0;ba=l+(W<<2)|0;Z=(k[ba>>2]|0)>>>8;k[ba>>2]=Z;if((W|0)==($|0))break;else{aa=Y+2|0;Y=W}}}k[ka>>2]=ca>>>0>8?8:ca}while(0)}while((ea|0)!=0);x=0;Ta(545,v|0,w|0)|0;ea=x;x=0;if(ea&1){db=fa;P=154;break}k[na>>2]=fa;OBa(fa);ga=ga+4|0;if((ga|0)==(Ya|0)){P=155;break}}if((P|0)==151){ga=Hc()|0;eb=ga;gb=M;P=153;break}else if((P|0)==154){ga=Hc()|0;ka=M;k[na>>2]=db;OBa(db);hb=ga;ib=ka;break}else if((P|0)==155){jb=v;kb=qa;lb=k[v>>2]|0;mb=k[qa>>2]|0;P=156;break}}else{jb=v;kb=qa;lb=0;mb=0;P=156}while(0);do if((P|0)==156){ka=k[J>>2]|0;ga=mb-lb|0;ma=lb;S=mb;if(ka>>>0>ga>>>0){x=0;xa(700,v|0,ka-ga|0);pa=x;x=0;if(!(pa&1)){nb=k[jb>>2]|0;ob=k[kb>>2]|0;P=162}}else if(ka>>>0>>0?(ga=ma+ka|0,(S|0)!=(ga|0)):0){k[qa>>2]=ga;nb=lb;ob=ga;P=162}else{nb=lb;ob=mb;P=162}if((P|0)==162){ga=k[I>>2]|0;S=ob-nb|0;ab=B;cb=ab+32|0;do{i[ab>>0]=0;ab=ab+1|0}while((ab|0)<(cb|0));na=h;k[na>>2]=nb;k[na+4>>2]=S;k[j>>2]=B;k[j+4>>2]=32;x=0;k[g>>2]=k[h>>2];k[g+4>>2]=k[h+4>>2];k[f>>2]=k[j>>2];k[f+4>>2]=k[j+4>>2];Ta(532,g|0,f|0)|0;na=x;x=0;if(!(na&1)){na=B+32|0;ka=g+32|0;ma=f+32|0;pa=f+4|0;oa=f+32|0;ea=g+4|0;da=0;Y=1;aa=B;while(1){$=i[aa>>0]|0;k[f>>2]=da;k[pa>>2]=k[A>>2];k[pa+4>>2]=k[A+4>>2];k[pa+8>>2]=k[A+8>>2];k[pa+12>>2]=k[A+12>>2];k[pa+16>>2]=k[A+16>>2];k[pa+20>>2]=k[A+20>>2];k[pa+24>>2]=k[A+24>>2];k[oa>>2]=Y;HB(f,8,0);ab=h;bb=f;cb=ab+40|0;do{k[ab>>2]=k[bb>>2];ab=ab+4|0;bb=bb+4|0}while((ab|0)<(cb|0));k[g>>2]=0;k[ka>>2]=1;k[f>>2]=$&255;k[ma>>2]=1;YB(g,h,f);fa=k[g>>2]|0;k[j>>2]=k[ea>>2];k[j+4>>2]=k[ea+4>>2];k[j+8>>2]=k[ea+8>>2];k[j+12>>2]=k[ea+12>>2];k[j+16>>2]=k[ea+16>>2];k[j+20>>2]=k[ea+20>>2];k[j+24>>2]=k[ea+24>>2];Z=k[ka>>2]|0;k[A>>2]=k[j>>2];k[A+4>>2]=k[j+4>>2];k[A+8>>2]=k[j+8>>2];k[A+12>>2]=k[j+12>>2];k[A+16>>2]=k[j+16>>2];k[A+20>>2]=k[j+20>>2];k[A+24>>2]=k[j+24>>2];aa=aa+1|0;if((aa|0)==(na|0)){pb=fa;qb=Z;break}else{da=fa;Y=Z}}k[j>>2]=k[A>>2];k[j+4>>2]=k[A+4>>2];k[j+8>>2]=k[A+8>>2];k[j+12>>2]=k[A+12>>2];k[j+16>>2]=k[A+16>>2];k[j+20>>2]=k[A+20>>2];k[j+24>>2]=k[A+24>>2];k[z>>2]=2;k[z+8>>2]=pb;Y=z+12|0;k[Y>>2]=k[A>>2];k[Y+4>>2]=k[A+4>>2];k[Y+8>>2]=k[A+8>>2];k[Y+12>>2]=k[A+12>>2];k[Y+16>>2]=k[A+16>>2];k[Y+20>>2]=k[A+20>>2];k[Y+24>>2]=k[A+24>>2];k[z+40>>2]=qb;Y=d;da=k[Y+4>>2]|0;na=z+48|0;k[na>>2]=k[Y>>2];k[na+4>>2]=da;k[z+56>>2]=k[F>>2];da=z+60|0;na=k[E>>2]|0;k[da>>2]=na;if(na)h0a(na);k[z+64>>2]=0;k[z+68>>2]=0;na=z+72|0;k[na>>2]=0;k[C>>2]=0;Y=C+4|0;k[Y>>2]=0;k[C+8>>2]=0;x=0;aa=Va(93,ga|0,z|0,C|0,1,0)|0;ka=x;x=0;if(ka&1){ka=Hc()|0;ea=M;ma=k[C>>2]|0;oa=ma;if(ma){pa=k[Y>>2]|0;if((pa|0)!=(ma|0))k[Y>>2]=pa+(~((pa+-4-oa|0)>>>2)<<2);OBa(ma)}ma=k[na>>2]|0;if(ma)j0a(ma);ma=k[da>>2]|0;if(!ma){hb=ka;ib=ea;break}j0a(ma);hb=ka;ib=ea;break}ea=k[C>>2]|0;ka=ea;if(ea){ma=k[Y>>2]|0;if((ma|0)!=(ea|0))k[Y>>2]=ma+(~((ma+-4-ka|0)>>>2)<<2);OBa(ea)}ea=k[na>>2]|0;if(ea)j0a(ea);ea=k[da>>2]|0;if(ea)j0a(ea);ea=k[v>>2]|0;if(ea){if((k[qa>>2]|0)!=(ea|0))k[qa>>2]=ea;OBa(ea)}$a=aa;break l}}aa=Hc()|0;eb=aa;gb=M;P=153}while(0);if((P|0)==153){hb=eb;ib=gb}aa=k[v>>2]|0;if(!aa){Za=hb;_a=ib;break f}if((k[qa>>2]|0)!=(aa|0))k[qa>>2]=aa;OBa(aa);Za=hb;_a=ib;break f}while(0);x=0;aa=Ta(555,L|0,o|0)|0;ea=x;x=0;if(ea&1)P=48;else{k[aa>>2]=$a;Ra=$a;Sa=k[o>>2]|0}}if((P|0)==48){aa=Hc()|0;Ua=M;Wa=aa;P=49;break}aa=Sa;if(Sa){ea=k[R>>2]|0;if((ea|0)!=(Sa|0))k[R>>2]=ea+(~((ea+-4-aa|0)>>>2)<<2);OBa(Sa)}rb=Ra;break b}else if((P|0)==47){aa=Hc()|0;Ua=M;Wa=aa;P=49}else if((P|0)==55){aa=Hc()|0;sb=M;tb=aa;P=87}else if((P|0)==86){aa=Hc()|0;sb=M;tb=aa;P=87}else if((P|0)==88){aa=Hc()|0;ea=M;da=k[q>>2]|0;na=da;if(!da){ub=aa;vb=ea;P=92}else{ka=k[la>>2]|0;if((ka|0)!=(da|0))k[la>>2]=ka+(~((ka+-4-na|0)>>>2)<<2);OBa(da);ub=aa;vb=ea;P=92}}while(0);if((P|0)==49){Za=Wa;_a=Ua}else if((P|0)==87){ub=tb;vb=sb;P=92}if((P|0)==92){la=k[t>>2]|0;ea=la;if(la){aa=k[ja>>2]|0;if((aa|0)!=(la|0))k[ja>>2]=aa+(~((aa+-4-ea|0)>>>2)<<2);OBa(la)}la=k[ia>>2]|0;if(la)j0a(la);la=k[ha>>2]|0;if(la)j0a(la);la=k[_>>2]|0;if(la)j0a(la);la=k[X>>2]|0;if(!la){Za=ub;_a=vb}else{j0a(la);Za=ub;_a=vb}}la=k[o>>2]|0;if(!la){wb=Za;xb=_a;break a}ea=k[R>>2]|0;if((ea|0)!=(la|0))k[R>>2]=ea+(~((ea+-4-la|0)>>>2)<<2);OBa(la);wb=Za;xb=_a;break a}else P=6;while(0);do if((P|0)==6){la=k[I>>2]|0;k[n>>2]=0;ea=n+4|0;k[ea>>2]=0;k[n+8>>2]=0;x=0;aa=Ba(563,8)|0;da=x;x=0;if(da&1){da=Hc()|0;N=M;O=da;P=14;break a}k[n>>2]=aa;da=aa+8|0;k[n+8>>2]=da;k[aa>>2]=b;k[aa+4>>2]=c;k[ea>>2]=da;x=0;da=Va(93,la|0,m|0,n|0,1,k[a+16>>2]|0)|0;la=x;x=0;if(la&1){la=Hc()|0;aa=M;na=k[n>>2]|0;if(!na){wb=la;xb=aa;break a}ka=k[ea>>2]|0;if((ka|0)!=(na|0))k[ea>>2]=ka+(~((ka+-4-na|0)>>>2)<<2);OBa(na);wb=la;xb=aa;break a}else{aa=k[n>>2]|0;if(!aa){rb=da;break}la=k[ea>>2]|0;if((la|0)!=(aa|0))k[ea>>2]=la+(~((la+-4-aa|0)>>>2)<<2);OBa(aa);rb=da;break}}while(0);da=k[H>>2]|0;if(da)j0a(da);da=k[G>>2]|0;if(!da){r=e;return rb|0}j0a(da);r=e;return rb|0}while(0);if((P|0)==14){wb=O;xb=N}N=k[H>>2]|0;if(N)j0a(N);N=k[G>>2]|0;if(!N)Sc(wb|0);j0a(N);Sc(wb|0);return 0}function FR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0;d=r;r=r+80|0;e=d+64|0;f=d+60|0;g=d+56|0;h=d+52|0;i=d+48|0;j=d+24|0;l=d+12|0;m=d+36|0;n=d;o=k[a>>2]|0;p=k[b>>2]|0;q=o-p|0;s=a+4|0;t=k[s>>2]|0;u=a+8|0;v=t;do if((v|0)==(u|0)){w=o;y=p}else{z=b+8|0;A=a+12|0;B=a+8|0;C=j+8|0;D=l+4|0;E=j+4|0;F=l+8|0;G=m+4|0;H=m+8|0;I=m+4|0;J=I;K=E;L=j+4|0;N=v;O=t;a:while(1){P=(k[N+16>>2]|0)-q|0;Q=k[z>>2]|0;b:do if(!Q)R=67;else{S=Q;while(1){T=k[S+16>>2]|0;if((P|0)<(T|0))U=S;else{if((T|0)>=(P|0)){V=Q;break}U=S+4|0}S=k[U>>2]|0;if(!S){R=67;break b}}while(1){S=k[V+16>>2]|0;if((P|0)<(S|0)){T=k[V>>2]|0;if(!T){R=17;break a}else W=T}else{if((S|0)>=(P|0)){X=V;break}S=k[V+4>>2]|0;if(!S){R=17;break a}else W=S}V=W}if(!X){R=17;break a}S=k[X+20>>2]|0;T=N+20|0;Y=k[T>>2]|0;if((Y|0)==(S|0)){Z=O;_=k[Z+4>>2]|0;if(!_){$=Z;while(1){Z=k[$+8>>2]|0;if((k[Z>>2]|0)==($|0)){aa=Z;break b}else $=Z}}else{$=_;while(1){Z=k[$>>2]|0;if(!Z){aa=$;break b}else $=Z}}}GR(j,a,Y);x=0;fb(230,l|0,a|0,S|0);$=x;x=0;if($&1){R=53;break a}if(!((k[C>>2]|0)==0|(k[F>>2]|0)==0)){$=k[l>>2]|0;if(($|0)!=(D|0)){_=$;Z=$;while(1){$=_+16|0;k[i>>2]=K;k[e>>2]=k[i>>2];ba=XA(j,e,h,$)|0;if(!(k[ba>>2]|0)){x=0;ca=Ba(563,56)|0;da=x;x=0;if(da&1){R=54;break a}ea=ca+16|0;fa=$;ga=ea+40|0;do{k[ea>>2]=k[fa>>2];ea=ea+4|0;fa=fa+4|0}while((ea|0)<(ga|0));$=k[h>>2]|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=$;k[ba>>2]=ca;$=k[k[j>>2]>>2]|0;if(!$)ha=ca;else{k[j>>2]=$;ha=k[ba>>2]|0}ui(k[L>>2]|0,ha);k[C>>2]=(k[C>>2]|0)+1}$=k[Z+4>>2]|0;if(!$){da=Z;while(1){ia=k[da+8>>2]|0;if((k[ia>>2]|0)==(da|0)){ja=ia;break}else da=ia}}else{da=$;while(1){ba=k[da>>2]|0;if(!ba){ja=da;break}else da=ba}}if((ja|0)==(D|0))break;else{_=ja;Z=ja}}}k[G>>2]=0;k[H>>2]=0;k[m>>2]=I;Z=k[j>>2]|0;if((Z|0)!=(E|0)){_=Z;S=Z;while(1){Z=_+16|0;k[g>>2]=J;k[e>>2]=k[g>>2];Y=XA(m,e,f,Z)|0;if(!(k[Y>>2]|0)){x=0;da=Ba(563,56)|0;$=x;x=0;if($&1){R=48;break a}ea=da+16|0;fa=Z;ga=ea+40|0;do{k[ea>>2]=k[fa>>2];ea=ea+4|0;fa=fa+4|0}while((ea|0)<(ga|0));Z=k[f>>2]|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=Z;k[Y>>2]=da;Z=k[k[m>>2]>>2]|0;if(!Z)ka=da;else{k[m>>2]=Z;ka=k[Y>>2]|0}ui(k[G>>2]|0,ka);k[H>>2]=(k[H>>2]|0)+1}Z=k[S+4>>2]|0;if(!Z){$=S;while(1){ba=k[$+8>>2]|0;if((k[ba>>2]|0)==($|0)){la=ba;break}else $=ba}}else{$=Z;while(1){Y=k[$>>2]|0;if(!Y){la=$;break}else $=Y}}if((la|0)==(E|0))break;else{_=la;S=la}}}x=0;S=Ta(556,a|0,m|0)|0;_=x;x=0;if(_&1){R=56;break a}k[T>>2]=S;DA(m,k[I>>2]|0);S=O;_=k[S+4>>2]|0;if(!_){$=S;while(1){S=k[$+8>>2]|0;if((k[S>>2]|0)==($|0)){ma=S;break}else $=S}}else{$=_;while(1){T=k[$>>2]|0;if(!T){ma=$;break}else $=T}}}else{$=k[N+4>>2]|0;if(!$){_=O;while(1){T=k[_+8>>2]|0;if((k[T>>2]|0)==(_|0)){na=T;break}else _=T}}else{_=$;while(1){T=k[_>>2]|0;if(!T){na=_;break}else _=T}}if((k[s>>2]|0)==(N|0))k[s>>2]=na;k[A>>2]=(k[A>>2]|0)+-1;hk(k[B>>2]|0,O);OBa(O);ma=na}DA(l,k[D>>2]|0);DA(j,k[E>>2]|0);aa=ma}while(0);if((R|0)==67){R=0;P=k[N+4>>2]|0;if(!P){Q=O;while(1){_=k[Q+8>>2]|0;if((k[_>>2]|0)==(Q|0)){oa=_;break}else Q=_}}else{Q=P;while(1){_=k[Q>>2]|0;if(!_){oa=Q;break}else Q=_}}if((k[s>>2]|0)==(N|0))k[s>>2]=oa;k[A>>2]=(k[A>>2]|0)+-1;hk(k[B>>2]|0,O);OBa(O);aa=oa}if((aa|0)==(u|0)){R=3;break}else{N=aa;O=aa}}if((R|0)==3){w=k[a>>2]|0;y=k[b>>2]|0;break}else if((R|0)==17){O=Rd(8)|0;x=0;xa(671,O|0,296399);N=x;x=0;if(N&1){N=Hc()|0;Fc(O|0);Sc(N|0)}else{k[O>>2]=47544;Gf(O|0,9024,933)}}else if((R|0)==48){O=Hc()|0;N=M;DA(m,k[I>>2]|0);pa=N;qa=O;R=55}else if((R|0)==53){O=Hc()|0;ra=O;sa=M}else if((R|0)==54){O=Hc()|0;pa=M;qa=O;R=55}else if((R|0)==56){O=Hc()|0;N=M;DA(m,k[I>>2]|0);ta=O;ua=N;R=65}if((R|0)==55){ta=qa;ua=pa;R=65}if((R|0)==65){DA(l,k[D>>2]|0);ra=ta;sa=ua}DA(j,k[E>>2]|0);va=ra;wa=sa;Sc(va|0)}while(0);if((w|0)>(y|0)){y=n+4|0;k[y>>2]=0;w=n+8|0;k[w>>2]=0;sa=n+4|0;k[n>>2]=sa;ra=k[s>>2]|0;c:do if((ra|0)==(u|0))ya=n;else{j=sa;ua=ra;ta=0;while(1){l=k[ua+20>>2]|0;pa=(k[ua+16>>2]|0)-q|0;do if(ta){qa=ta;while(1){m=k[qa+16>>2]|0;if((pa|0)<(m|0)){aa=k[qa>>2]|0;if(!aa){za=qa;Aa=qa;R=86;break}else Ca=aa}else{if((m|0)>=(pa|0)){Da=qa;R=92;break}m=qa+4|0;aa=k[m>>2]|0;if(!aa){Ea=m;Fa=qa;R=90;break}else Ca=aa}qa=Ca}if((R|0)==86){R=0;k[e>>2]=Aa;Ga=za;Ha=Aa;R=93;break}else if((R|0)==90){R=0;k[e>>2]=Fa;Ga=Ea;Ha=Fa;R=93;break}else if((R|0)==92){R=0;k[e>>2]=Da;if(!Da){Ga=e;Ha=Da;R=93;break}else{Ia=Da;break}}}else{k[e>>2]=sa;Ga=sa;Ha=j;R=93}while(0);if((R|0)==93){R=0;x=0;qa=Ba(563,24)|0;aa=x;x=0;if(aa&1){Ja=ta;break}k[qa+16>>2]=pa;k[qa+20>>2]=0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=Ha;k[Ga>>2]=qa;aa=k[k[n>>2]>>2]|0;if(!aa)Ka=qa;else{k[n>>2]=aa;Ka=k[Ga>>2]|0}ui(k[y>>2]|0,Ka);k[w>>2]=(k[w>>2]|0)+1;Ia=qa}k[Ia+20>>2]=l;qa=k[ua+4>>2]|0;if(!qa){aa=ua;while(1){m=k[aa+8>>2]|0;if((k[m>>2]|0)==(aa|0)){La=m;break}else aa=m}}else{aa=qa;while(1){l=k[aa>>2]|0;if(!l){La=aa;break}else aa=l}}if((La|0)==(u|0)){ya=n;break c}ua=La;ta=k[sa>>2]|0}ta=Hc()|0;ua=M;ny(n,Ja);va=ta;wa=ua;Sc(va|0)}while(0);ny(s,k[u>>2]|0);k[s>>2]=k[ya>>2];ya=k[sa>>2]|0;k[u>>2]=ya;va=k[w>>2]|0;k[a+12>>2]=va;if(!va){k[s>>2]=u;Ma=ya}else{k[ya+8>>2]=u;k[n>>2]=sa;k[sa>>2]=0;k[w>>2]=0;Ma=0}k[a>>2]=k[b>>2];ny(n,Ma)}PR(a+20|0,b+20|0);PR(a+32|0,b+32|0);if(!c){r=d;return}c=a+16|0;a=k[c>>2]|0;Ma=k[b+16>>2]|0;k[c>>2]=a>>>0>>0?Ma:a;r=d;return}function GR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+96|0;e=d+80|0;f=d+72|0;g=d+64|0;h=d+68|0;i=d;j=d+24|0;k[h>>2]=c;l=b+88|0;if(!(QR(l,h)|0)){h=k[b+56>>2]|0;b=k[h>>2]|0;if((((k[h+4>>2]|0)-b|0)/24|0)>>>0>c>>>0)m=b;else{Kpb(h);m=k[h>>2]|0}h=m+(c*24|0)|0;b=k[h+4>>2]|0;n=i;k[n>>2]=k[h>>2];k[n+4>>2]=b;By(i+8|0,m+(c*24|0)+8|0);k[i+20>>2]=k[m+(c*24|0)+20>>2];m=k[i+4>>2]|0;if((m|0)!=0?(k[m>>2]|0)==4:0){o=j;p=m+8|0;q=o+40|0;do{k[o>>2]=k[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));m=a+4|0;k[m>>2]=0;b=a+8|0;k[b>>2]=0;n=a+4|0;k[a>>2]=n;k[g>>2]=n;k[e>>2]=k[g>>2];h=XA(a,e,f,j)|0;do if(!(k[h>>2]|0)){x=0;s=Ba(563,56)|0;t=x;x=0;if(!(t&1)){o=s+16|0;p=j;q=o+40|0;do{k[o>>2]=k[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));t=k[f>>2]|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=t;k[h>>2]=s;t=k[k[a>>2]>>2]|0;if(!t)u=s;else{k[a>>2]=t;u=k[h>>2]|0}ui(k[m>>2]|0,u);k[b>>2]=(k[b>>2]|0)+1;break}t=Hc()|0;DA(a,k[n>>2]|0);v=k[i+8>>2]|0;if(!v)Sc(t|0);w=i+12|0;y=k[w>>2]|0;if((y|0)!=(v|0))k[w>>2]=y+(~((y+-4-v|0)>>>2)<<2);OBa(v);Sc(t|0)}while(0)}else{k[a+4>>2]=0;k[a+8>>2]=0;k[a>>2]=a+4}n=k[i+8>>2]|0;b=n;if(n){u=i+12|0;i=k[u>>2]|0;if((i|0)!=(n|0))k[u>>2]=i+(~((i+-4-b|0)>>>2)<<2);OBa(n)}r=d;return}n=k[(k[l>>2]|0)+-8+4>>2]|0;l=k[n+16>>2]&-2;b=l+-16|0;if((l|0)==0|(b|0)==0){D0a(e,230250);k[e>>2]=47544;x=0;va(1495,e|0);z=x;x=0;A=Hc()|0;B=M;nCa(e);Sc(A|0)}l=b;b=n;a:while(1){i=l;while(1){if((k[i>>2]|0)>>>0>=c>>>0){C=i;break}u=k[i+24>>2]|0;i=(u|0)==0?0:u+-16|0;if(!i){D=b;break a}}i=k[C+20>>2]|0;l=(i|0)==0?0:i+-16|0;if(!l){D=C;break}else b=C}if((D|0)==(n|0)){D0a(e,230250);k[e>>2]=47544;x=0;va(1495,e|0);z=x;x=0;A=Hc()|0;B=M;nCa(e);Sc(A|0)}C=(k[D>>2]|0)>>>0>c>>>0?n:D;if((C|0)==(n|0)){D0a(e,230250);k[e>>2]=47544;x=0;va(1495,e|0);z=x;x=0;A=Hc()|0;B=M;nCa(e);Sc(A|0)}A=a+4|0;k[A>>2]=0;B=a+8|0;k[B>>2]=0;z=a+4|0;k[a>>2]=z;n=k[C+4>>2]|0;D=C+8|0;if((n|0)==(D|0)){r=d;return}C=z;c=n;b=n;while(1){n=c+16|0;k[g>>2]=C;k[e>>2]=k[g>>2];l=XA(a,e,f,n)|0;if(!(k[l>>2]|0)){x=0;i=Ba(563,56)|0;s=x;x=0;if(s&1){E=22;break}o=i+16|0;p=n;q=o+40|0;do{k[o>>2]=k[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));n=k[f>>2]|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=n;k[l>>2]=i;n=k[k[a>>2]>>2]|0;if(!n)F=i;else{k[a>>2]=n;F=k[l>>2]|0}ui(k[A>>2]|0,F);k[B>>2]=(k[B>>2]|0)+1}n=k[b+4>>2]|0;if(!n){s=b;while(1){u=k[s+8>>2]|0;if((k[u>>2]|0)==(s|0)){G=u;break}else s=u}}else{s=n;while(1){l=k[s>>2]|0;if(!l){G=s;break}else s=l}}if((G|0)==(D|0)){E=45;break}else{c=G;b=G}}if((E|0)==22){G=Hc()|0;DA(a,k[z>>2]|0);Sc(G|0)}else if((E|0)==45){r=d;return}}function HR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+64|0;d=c+60|0;e=c+56|0;f=c+32|0;g=c+40|0;h=c+16|0;j=c;l=a+92|0;if(SR(l,b)|0){m=TR(l,b)|0;n=k[m>>2]|0;r=c;return n|0}m=k[a+56>>2]|0;k[g>>2]=-1;k[g+4>>2]=-1;k[g+8>>2]=0;a=g+12|0;k[a>>2]=0;x=0;o=Ta(557,m|0,g|0)|0;g=x;x=0;if(g&1){g=Hc()|0;m=M;p=k[a>>2]|0;if(!p){q=m;s=g;Sc(s|0)}j0a(p);q=m;s=g;Sc(s|0)}g=k[a>>2]|0;if(g)j0a(g);g=j+4|0;k[g>>2]=0;a=j+8|0;k[a>>2]=0;m=j+4|0;k[j>>2]=m;p=k[b>>2]|0;t=b+4|0;a:do if((p|0)!=(t|0)){b=m;u=p;v=p;while(1){w=u+16|0;k[f>>2]=b;k[d>>2]=k[f>>2];y=XA(j,d,e,w)|0;if(!(k[y>>2]|0)){x=0;z=Ba(563,56)|0;A=x;x=0;if(A&1)break;A=z+16|0;B=w;w=A+40|0;do{k[A>>2]=k[B>>2];A=A+4|0;B=B+4|0}while((A|0)<(w|0));B=k[e>>2]|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=B;k[y>>2]=z;B=k[k[j>>2]>>2]|0;if(!B)C=z;else{k[j>>2]=B;C=k[y>>2]|0}ui(k[g>>2]|0,C);k[a>>2]=(k[a>>2]|0)+1}B=k[v+4>>2]|0;if(!B){A=v;while(1){w=k[A+8>>2]|0;if((k[w>>2]|0)==(A|0)){D=w;break}else A=w}}else{A=B;while(1){y=k[A>>2]|0;if(!y){D=A;break}else A=y}}if((D|0)==(t|0))break a;else{u=D;v=D}}v=Hc()|0;DA(j,k[m>>2]|0);Sc(v|0)}while(0);k[j+12>>2]=o;x=0;fb(233,h|0,j|0,o|0);D=x;x=0;do if(D&1){t=Hc()|0;E=M;F=t}else{t=(k[l>>2]|0)+-8|0;k[e>>2]=0;x=0;i[d>>0]=i[f>>0]|0;a=db(70,t+8|0,h|0,e|0,d|0)|0;C=x;x=0;if(C&1){C=Hc()|0;g=M;DA(h+4|0,k[h+8>>2]|0);E=g;F=C;break}if((a|0)==(k[e>>2]|0)){a=t+12|0;k[a>>2]=(k[a>>2]|0)+1}DA(h+4|0,k[h+8>>2]|0);DA(j,k[m>>2]|0);n=o;r=c;return n|0}while(0);DA(j,k[m>>2]|0);q=E;s=F;Sc(s|0);return 0}function IR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if((k[a+28>>2]|0)!=(k[b+28>>2]|0)){c=0;return c|0}d=k[a+20>>2]|0;e=a+24|0;f=k[b+20>>2]|0;a:do if((d|0)!=(e|0)){g=d;h=f;i=d;j=f;while(1){if((k[g+16>>2]|0)!=(k[h+16>>2]|0)){c=0;l=41;break}if((k[g+20>>2]|0)!=(k[h+20>>2]|0)){c=0;l=41;break}m=k[i+4>>2]|0;if(!m){n=i;while(1){o=k[n+8>>2]|0;if((k[o>>2]|0)==(n|0)){p=o;break}else n=o}}else{n=m;while(1){o=k[n>>2]|0;if(!o){p=n;break}else n=o}}n=k[j+4>>2]|0;if(!n){m=j;while(1){o=k[m+8>>2]|0;if((k[o>>2]|0)==(m|0)){q=o;break}else m=o}}else{m=n;while(1){o=k[m>>2]|0;if(!o){q=m;break}else m=o}}if((p|0)==(e|0))break a;else{g=p;h=q;i=p;j=q}}if((l|0)==41)return c|0}while(0);if((k[a+40>>2]|0)!=(k[b+40>>2]|0)){c=0;return c|0}q=k[a+32>>2]|0;p=a+36|0;e=k[b+32>>2]|0;b:do if((q|0)!=(p|0)){f=q;d=e;j=q;i=e;while(1){if((k[f+16>>2]|0)!=(k[d+16>>2]|0)){c=0;l=41;break}if((k[f+20>>2]|0)!=(k[d+20>>2]|0)){c=0;l=41;break}h=k[j+4>>2]|0;if(!h){g=j;while(1){m=k[g+8>>2]|0;if((k[m>>2]|0)==(g|0)){r=m;break}else g=m}}else{g=h;while(1){m=k[g>>2]|0;if(!m){r=g;break}else g=m}}g=k[i+4>>2]|0;if(!g){h=i;while(1){m=k[h+8>>2]|0;if((k[m>>2]|0)==(h|0)){s=m;break}else h=m}}else{h=g;while(1){m=k[h>>2]|0;if(!m){s=h;break}else h=m}}if((r|0)==(p|0))break b;else{f=r;d=s;j=r;i=s}}if((l|0)==41)return c|0}while(0);s=k[a+4>>2]|0;r=k[b+4>>2]|0;p=a+8|0;c:do if((s|0)!=(p|0)){e=b+8|0;q=(k[b>>2]|0)-(k[a>>2]|0)|0;i=s;j=r;while(1){if((j|0)==(e|0)){t=i;u=e;break c}if((q+(k[i+16>>2]|0)|0)!=(k[j+16>>2]|0)){c=0;l=41;break}if((k[i+20>>2]|0)!=(k[j+20>>2]|0)){c=0;l=41;break}d=k[i+4>>2]|0;if(!d){f=i;while(1){h=k[f+8>>2]|0;if((k[h>>2]|0)==(f|0)){v=h;break}else f=h}}else{f=d;while(1){h=k[f>>2]|0;if(!h){v=f;break}else f=h}}f=k[j+4>>2]|0;if(!f){d=j;while(1){h=k[d+8>>2]|0;if((k[h>>2]|0)==(d|0)){w=h;break}else d=h}}else{d=f;while(1){h=k[d>>2]|0;if(!h){w=d;break}else d=h}}if((v|0)==(p|0)){t=v;u=w;break c}else{i=v;j=w}}if((l|0)==41)return c|0}else{t=s;u=r}while(0);if((t|0)!=(p|0)){c=0;return c|0}c=(u|0)==(b+8|0);return c|0}function JR(a,b,c){a=a|0;b=b|0;c=c|0;return yR(a,(k[a>>2]|0)+b|0,c)|0}function KR(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=a+4|0;c=k[b>>2]|0;d=a+8|0;e=c;if((e|0)==(d|0))return;f=a+88|0;g=a+12|0;h=a+8|0;a=c;c=e;while(1){if(!(QR(f,c+20|0)|0)){e=a;i=k[e+4>>2]|0;if(!i){j=e;while(1){e=k[j+8>>2]|0;if((k[e>>2]|0)==(j|0)){l=e;break}else j=e}}else{j=i;while(1){e=k[j>>2]|0;if(!e){l=j;break}else j=e}}}else{j=k[c+4>>2]|0;if(!j){i=a;while(1){e=k[i+8>>2]|0;if((k[e>>2]|0)==(i|0)){m=e;break}else i=e}}else{i=j;while(1){e=k[i>>2]|0;if(!e){m=i;break}else i=e}}if((k[b>>2]|0)==(c|0))k[b>>2]=m;k[g>>2]=(k[g>>2]|0)+-1;hk(k[h>>2]|0,a);OBa(a);l=m}if((l|0)==(d|0))break;else{a=l;c=l}}return}function LR(){k[7651]=0;k[7652]=0;k[7653]=0;return}function MR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+16|0;e=d;f=k[a+56>>2]|0;a=k[f>>2]|0;if((((k[f+4>>2]|0)-a|0)/24|0)>>>0>c>>>0)g=a;else{Kpb(f);g=k[f>>2]|0}f=ei(b,229999,2)|0;a=f+(k[(k[f>>2]|0)+-12>>2]|0)+4|0;k[a>>2]=k[a>>2]&-75|2;ei(ffb(f,c)|0,325552,2)|0;f=g+(c*24|0)+4|0;a=k[f>>2]|0;do if(a)if(!(k[a>>2]|0)){h=ei(b,230280,9)|0;efb(h,k[(k[f>>2]|0)+8>>2]|0)|0;break}else{ZC(b,a)|0;break}else ei(b,230271,8)|0;while(0);a=g+(c*24|0)+20|0;if(k[a>>2]|0){f=ei(b,230290,1)|0;h=f+(k[(k[f>>2]|0)+-12>>2]|0)+4|0;k[h>>2]=k[h>>2]&-75|2;ffb(f,k[a>>2]|0)|0}ei(b,300108,1)|0;a=k[g+(c*24|0)+8>>2]|0;f=k[g+(c*24|0)+12>>2]|0;if((a|0)!=(f|0)){c=a;do{a=k[c>>2]|0;g=b+(k[(k[b>>2]|0)+-12>>2]|0)+4|0;k[g>>2]=k[g>>2]&-75|2;ei(ffb(b,a)|0,301287,1)|0;c=c+4|0}while((c|0)!=(f|0))}f=ei(b,300015,1)|0;b=zab(f+(k[(k[f>>2]|0)+-12>>2]|0)|0)|0;k[e>>2]=b;x=0;b=Ta(495,e|0,74148)|0;c=x;x=0;if(c&1){i=Hc()|0;j=M;$pb(e);Sc(i|0)}x=0;c=Ta(k[(k[b>>2]|0)+28>>2]|0,b|0,10)|0;b=x;x=0;if(b&1){i=Hc()|0;j=M;$pb(e);Sc(i|0)}else{$pb(e);pfb(f,c)|0;cdb(f)|0;r=d;return}}function NR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=r;r=r+80|0;g=f+56|0;h=f+16|0;i=f;if(a){r=f;return}f=h;a=f+36|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(a|0));f=h+20|0;a=h+24|0;k[a>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;j=h+4|0;l=j+-4|0;m=j+16|0;n=h+8|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);k[h+4>>2]=26536;k[h>>2]=26500;k[f>>2]=26560;k[i>>2]=21048;g=i+4|0;x=0;xa(604,g|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;o=M;p=b}else{x=0;b=Ta(558,h|0,i|0)|0;h=x;x=0;if(!(h&1)){k[b+(k[(k[b>>2]|0)+-28>>2]|0)+8>>2]=e;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+12>>2]=d;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+16>>2]=c;x=0;va(1491,b|0);x=0}b=Hc()|0;c=M;k[i>>2]=21048;K2a(g);o=c;p=b}k[j>>2]=26592;k[l>>2]=26620;k[m>>2]=26644;K2a(n);k[f>>2]=20796;f=k[a>>2]|0;if(!f)Sc(p|0);x=0;n=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!n)Sc(p|0);k[a>>2]=0;Sc(p|0)}function OR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;a:do if(f){g=k[b+4>>2]|0;h=k[b>>2]|0;b:do if((h|0)==(g|0)){i=k[f+16>>2]|0;j=k[f+20>>2]|0;if((i|0)==(j|0)){l=f;m=25}else{n=j;j=i;i=f;while(1){o=g;p=j;while(1){if((o|0)==(g|0))break;q=k[o>>2]|0;s=k[p>>2]|0;if(q>>>0>>0)break;if(s>>>0>>0){l=i;m=25;break b}p=p+4|0;if((p|0)==(n|0)){l=i;m=25;break b}else o=o+4|0}o=k[i>>2]|0;if(!o){t=i;u=i;m=17;break b}j=k[o+16>>2]|0;n=k[o+20>>2]|0;if((j|0)==(n|0)){l=o;m=25;break}else i=o}}}else{i=f;while(1){n=k[i+16>>2]|0;j=k[i+20>>2]|0;c:do if((n|0)!=(j|0)){o=h;p=n;while(1){if((o|0)==(g|0))break;q=k[o>>2]|0;s=k[p>>2]|0;if(q>>>0>>0)break;if(s>>>0>>0){v=n;w=h;m=18;break c}p=p+4|0;if((p|0)==(j|0)){v=n;w=h;m=18;break c}else o=o+4|0}o=k[i>>2]|0;if(!o){t=i;u=i;m=17;break b}else y=o}else{v=n;w=h;m=18}while(0);if((m|0)==18){while(1){m=0;if((v|0)==(j|0))break;n=k[v>>2]|0;o=k[w>>2]|0;if(n>>>0>>0)break;if(o>>>0>>0){l=i;m=25;break b}w=w+4|0;if((w|0)==(g|0)){l=i;m=25;break b}else{v=v+4|0;m=18}}j=i+4|0;n=k[j>>2]|0;if(!n){z=j;A=i;break}else y=n}i=y}k[d>>2]=A;B=z;C=A;break a}while(0);if((m|0)==17){k[d>>2]=u;B=t;C=u;break}else if((m|0)==25){k[d>>2]=l;D=d;E=l;F=l;m=27;break}}else{k[d>>2]=e;D=e;E=f;F=e;m=27}while(0);if((m|0)==27)if(!E){B=D;C=F}else{G=E;H=G+28|0;r=c;return H|0}E=KBa(32)|0;x=0;xa(687,E+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(E);Sc(b|0)}k[E+28>>2]=0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=C;k[B>>2]=E;C=k[k[a>>2]>>2]|0;if(!C)I=E;else{k[a>>2]=C;I=k[B>>2]|0}ui(k[a+4>>2]|0,I);I=a+8|0;k[I>>2]=(k[I>>2]|0)+1;G=E;H=G+28|0;r=c;return H|0}function PR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=k[a>>2]|0;d=a+4|0;e=c;if((e|0)==(d|0))return;f=b+4|0;b=a+8|0;g=a+4|0;h=c;c=e;a:while(1){e=k[f>>2]|0;b:do if(e){i=k[c+16>>2]|0;j=e;while(1){l=k[j+16>>2]|0;if(i>>>0>>0)m=j;else{if(l>>>0>=i>>>0){n=e;break}m=j+4|0}j=k[m>>2]|0;if(!j){o=24;break b}}while(1){j=k[n+16>>2]|0;if(i>>>0>>0){l=k[n>>2]|0;if(!l)break a;else p=l}else{if(j>>>0>=i>>>0){q=n;break}j=k[n+4>>2]|0;if(!j)break a;else p=j}n=p}if(!q)break a;if((k[q+20>>2]|0)==(k[c+20>>2]|0)){i=h;j=k[i+4>>2]|0;if(!j){l=i;while(1){i=k[l+8>>2]|0;if((k[i>>2]|0)==(l|0)){r=i;break}else l=i}}else{l=j;while(1){i=k[l>>2]|0;if(!i){r=l;break}else l=i}}}else o=24}else o=24;while(0);if((o|0)==24){o=0;e=k[c+4>>2]|0;if(!e){l=h;while(1){j=k[l+8>>2]|0;if((k[j>>2]|0)==(l|0)){s=j;break}else l=j}}else{l=e;while(1){j=k[l>>2]|0;if(!j){s=l;break}else l=j}}if((k[a>>2]|0)==(c|0))k[a>>2]=s;k[b>>2]=(k[b>>2]|0)+-1;hk(k[g>>2]|0,h);OBa(h);r=s}if((r|0)==(d|0)){o=3;break}else{h=r;c=r}}if((o|0)==3)return;o=Rd(8)|0;x=0;xa(671,o|0,296399);r=x;x=0;if(r&1){r=Hc()|0;Fc(o|0);Sc(r|0)}else{k[o>>2]=47544;Gf(o|0,9024,933)}}function QR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=k[b>>2]|0;b=k[(k[a>>2]|0)+-8+4>>2]|0;a=k[b+16>>2]&-2;d=a+-16|0;e=b;a:do if((a|0)==0|(d|0)==0){f=e;g=e}else{b=d;h=e;while(1){i=b;while(1){j=k[i>>2]|0;if(j>>>0>=c>>>0){l=i;m=j;break}j=k[i+24>>2]|0;i=(j|0)==0?0:j+-16|0;if(!i){f=h;g=h;break a}}if(c>>>0>=m>>>0){n=l;o=h;break}i=l;j=k[l+20>>2]|0;b=(j|0)==0?0:j+-16|0;if(!b){f=i;g=i;break a}else h=i}h=k[n+20>>2]|0;b=h+-16|0;b:do if((h|0)==0|(b|0)==0)p=n;else{i=b;j=n;while(1){q=i;while(1){if((k[q>>2]|0)>>>0>=c>>>0){r=q;break}s=k[q+24>>2]|0;q=(s|0)==0?0:s+-16|0;if(!q){p=j;break b}}q=k[r+20>>2]|0;i=(q|0)==0?0:q+-16|0;if(!i){p=r;break}else j=r}}while(0);b=p;h=k[n+24>>2]|0;j=h+-16|0;i=o;c:do if((h|0)==0|(j|0)==0)t=i;else{q=j;s=i;while(1){u=q;while(1){if(c>>>0<(k[u>>2]|0)>>>0){v=u;break}w=k[u+24>>2]|0;u=(w|0)==0?0:w+-16|0;if(!u){t=s;break c}}u=k[v+20>>2]|0;q=(u|0)==0?0:u+-16|0;if(!q){t=v;break}else s=v}}while(0);f=b;g=t}while(0);t=f;f=g;if((t|0)==(f|0)){x=0;return x|0}else{y=t;z=0}while(1){t=z+1|0;g=y+16|0;v=y+24|0;if(!(k[v>>2]|0)){c=g;o=k[g>>2]&-2;if((g|0)==(k[o+8>>2]|0)){g=o;while(1){n=k[g>>2]&-2;if((g|0)==(k[n+8>>2]|0))g=n;else{A=g;B=n;break}}C=B;D=k[A+8>>2]|0;E=A}else{C=o;D=0;E=c}F=(D|0)==(C|0)?E:C}else{g=v;do{b=k[g>>2]|0;g=b+4|0}while((k[g>>2]|0)!=0);F=b}y=(F|0)==0?0:F+-16|0;if((y|0)==(f|0)){x=t;break}else z=t}return x|0}function RR(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+32|0;c=b;b=Rd(32)|0;E0a(c,a);a=c+8|0;d=c+12|0;k[d>>2]=0;k[c+16>>2]=0;k[c+20>>2]=0;k[c+24>>2]=-1;k[c>>2]=25428;k[a>>2]=25448;x=0;xa(681,b|0,c|0);e=x;x=0;if(e&1)f=1;else{x=0;fb(149,b|0,2064,292);x=0;f=0}e=Hc()|0;k[a>>2]=20796;a=k[d>>2]|0;if(a){x=0;g=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(g)k[d>>2]=0}nCa(c);if(!f)Sc(e|0);Fc(b|0);Sc(e|0)}function SR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+32|0;d=c+16|0;e=c;f=k[a>>2]|0;ZR(e,a,b);b=k[f+-8+4>>2]|0;a=k[b+28>>2]&-2;$R(d,(a|0)==0?0:a+-28|0,b,f+2|0,e,f+3|0);f=k[d>>2]|0;b=k[d+4>>2]|0;if((f|0)==(b|0)){g=0;h=e+4|0;i=k[h>>2]|0;DA(e,i);r=c;return g|0}else{j=f;l=0}while(1){f=l+1|0;d=j+28|0;a=j+36|0;if(!(k[a>>2]|0)){m=d;n=k[d>>2]&-2;if((d|0)==(k[n+8>>2]|0)){d=n;while(1){o=k[d>>2]&-2;if((d|0)==(k[o+8>>2]|0))d=o;else{p=d;q=o;break}}s=q;t=k[p+8>>2]|0;u=p}else{s=n;t=0;u=m}v=(t|0)==(s|0)?u:s}else{d=a;do{o=k[d>>2]|0;d=o+4|0}while((k[d>>2]|0)!=0);v=o}j=(v|0)==0?0:v+-28|0;if((j|0)==(b|0)){g=f;break}else l=f}h=e+4|0;i=k[h>>2]|0;DA(e,i);r=c;return g|0}function TR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+8|0;e=c;f=k[a>>2]|0;ZR(d,a,b);b=k[f+-8+4>>2]|0;g=k[b+28>>2]&-2;h=_R((g|0)==0?0:g+-28|0,b,f+2|0,d,f+3|0)|0;DA(d,k[d+4>>2]|0);if((h|0)==(k[(k[a>>2]|0)+-8+4>>2]|0)){D0a(e,230250);k[e>>2]=47544;x=0;va(1495,e|0);x=0;a=Hc()|0;nCa(e);Sc(a|0)}else{r=c;return h|0}return 0}function UR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;k[a>>2]=c;c=a+4|0;h=a+8|0;k[h>>2]=0;i=a+12|0;k[i>>2]=0;j=a+8|0;k[c>>2]=j;a=k[b>>2]|0;l=b+4|0;if((a|0)==(l|0)){r=d;return}b=j;m=a;n=a;while(1){a=m+16|0;k[g>>2]=b;k[e>>2]=k[g>>2];o=XA(c,e,f,a)|0;if(!(k[o>>2]|0)){x=0;p=Ba(563,56)|0;q=x;x=0;if(q&1){s=12;break}q=p+16|0;t=a;a=q+40|0;do{k[q>>2]=k[t>>2];q=q+4|0;t=t+4|0}while((q|0)<(a|0));t=k[f>>2]|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=t;k[o>>2]=p;t=k[k[c>>2]>>2]|0;if(!t)u=p;else{k[c>>2]=t;u=k[o>>2]|0}ui(k[h>>2]|0,u);k[i>>2]=(k[i>>2]|0)+1}t=k[n+4>>2]|0;if(!t){q=n;while(1){a=k[q+8>>2]|0;if((k[a>>2]|0)==(q|0)){v=a;break}else q=a}}else{q=t;while(1){o=k[q>>2]|0;if(!o){v=q;break}else q=o}}if((v|0)==(l|0)){s=13;break}else{m=v;n=v}}if((s|0)==12){v=Hc()|0;DA(c,k[j>>2]|0);Sc(v|0)}else if((s|0)==13){r=d;return}}function VR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+32|0;e=d+12|0;f=d+8|0;g=d;k[g>>2]=0;i[e>>0]=i[d+17>>0]|0;if(!(WR(a,b+4|0,g,e)|0)){h=k[g+4>>2]|0;j=(h|0)==0?0:h+-28|0;r=d;return j|0};i[e>>0]=i[d+16>>0]|0;h=XR(a,b,c,e)|0;if((h|0)!=(k[c>>2]|0)){j=h;r=d;return j|0}c=h+28|0;b=k[g+4>>2]|0;l=k[a+-8+4>>2]|0;a=l+28|0;do if(!(k[g>>2]|0)){k[b+4>>2]=c;if((b|0)==(a|0)){k[b>>2]=k[b>>2]&1|c;k[b+8>>2]=c;break}m=l+32|0;if((k[m>>2]|0)==(b|0))k[m>>2]=c}else{k[b+8>>2]=c;m=l+36|0;if((k[m>>2]|0)==(b|0))k[m>>2]=c}while(0);k[c>>2]=k[c>>2]&1|b;k[h+32>>2]=0;k[h+36>>2]=0;k[f>>2]=a;k[e>>2]=k[f>>2];YR(c,e);j=h;r=d;return j|0}function WR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;d=k[a+-8+4>>2]|0;a=k[d+28>>2]&-2;e=a+-28|0;if(!((a|0)==0|(e|0)==0)){a=k[b>>2]|0;f=b+4|0;g=e;while(1){e=k[g+4>>2]|0;h=g+8|0;a:do if((e|0)==(h|0))i=24;else{j=a;l=e;m=a;n=e;b:while(1){if((j|0)==(f|0))break;o=k[j+48>>2]|0;p=k[l+48>>2]|0;c:do if((o|0)==(p|0)){q=l+16|0;r=j+16|0;s=o;while(1){s=s+-1|0;if((s|0)<=-1){t=o;break}u=k[r+(s<<2)>>2]|0;v=k[q+(s<<2)>>2]|0;if((u|0)!=(v|0)){w=u;x=v;i=11;break}}if((i|0)==11){i=0;if(w>>>0>x>>>0)t=o;else break b}while(1){t=t+-1|0;if((t|0)<=-1)break c;s=k[q+(t<<2)>>2]|0;v=k[r+(t<<2)>>2]|0;if((s|0)!=(v|0)){y=s;z=v;break}}if(y>>>0<=z>>>0){i=24;break a}}else{if(o>>>0<=p>>>0)break b;if(p>>>0<=o>>>0){i=24;break a}}while(0);o=k[m+4>>2]|0;if(!o){p=m;while(1){r=k[p+8>>2]|0;if((k[r>>2]|0)==(p|0)){A=r;break}else p=r}}else{p=o;while(1){r=k[p>>2]|0;if(!r){A=p;break}else p=r}}p=k[n+4>>2]|0;if(!p){o=n;while(1){r=k[o+8>>2]|0;if((k[r>>2]|0)==(o|0)){B=r;break}else o=r}}else{o=p;while(1){r=k[o>>2]|0;if(!r){B=o;break}else o=r}}if((B|0)==(h|0)){i=24;break a}else{j=A;l=B;m=A;n=B}}C=1;D=g+32|0}while(0);if((i|0)==24){i=0;C=0;D=g+36|0}h=k[D>>2]|0;e=(h|0)==0?0:h+-28|0;if(!e)break;else g=e}if(C){E=g;i=27}else{F=1;G=g;H=g}}else{E=d;i=27}if((i|0)==27){g=k[d+32>>2]|0;if((E|0)==(((g|0)==0?0:g+-28|0)|0)){k[c>>2]=0;k[c+4>>2]=E+28;I=1;return I|0}g=E+28|0;d=k[g>>2]|0;if((d&1|0)==0?(k[(d&-2)>>2]&-2|0)==(g|0):0)J=k[E+36>>2]|0;else i=32;do if((i|0)==32){C=k[E+32>>2]|0;if(!C){D=d&-2;B=D;if((g|0)==(k[B+4>>2]|0))K=B;else{J=D;break}do{D=k[K>>2]&-2;B=K;K=D}while((B|0)==(k[K+4>>2]|0));J=D}else{D=C;while(1){B=k[D+8>>2]|0;if(!B){L=D;break}else D=B}J=L;break}}while(0);F=0;G=E;H=(J|0)==0?0:J+-28|0}J=k[H+4>>2]|0;E=H+8|0;L=k[b>>2]|0;K=b+4|0;d:do if((L|0)!=(K|0)){b=J;g=L;d=J;D=L;e:while(1){if((b|0)==(E|0))break;C=k[b+48>>2]|0;B=k[g+48>>2]|0;f:do if((C|0)==(B|0)){A=g+16|0;z=b+16|0;y=C;while(1){y=y+-1|0;if((y|0)<=-1){M=C;break}t=k[z+(y<<2)>>2]|0;x=k[A+(y<<2)>>2]|0;if((t|0)!=(x|0)){N=t;O=x;i=46;break}}if((i|0)==46){i=0;if(N>>>0>O>>>0)M=C;else break e}while(1){M=M+-1|0;if((M|0)<=-1)break f;y=k[A+(M<<2)>>2]|0;x=k[z+(M<<2)>>2]|0;if((y|0)!=(x|0)){P=y;Q=x;break}}if(P>>>0<=Q>>>0)break d}else{if(C>>>0<=B>>>0)break e;if(B>>>0<=C>>>0)break d}while(0);C=k[d+4>>2]|0;if(!C){B=d;while(1){z=k[B+8>>2]|0;if((k[z>>2]|0)==(B|0)){R=z;break}else B=z}}else{B=C;while(1){z=k[B>>2]|0;if(!z){R=B;break}else B=z}}B=k[D+4>>2]|0;if(!B){C=D;while(1){z=k[C+8>>2]|0;if((k[z>>2]|0)==(C|0)){S=z;break}else C=z}}else{C=B;while(1){z=k[C>>2]|0;if(!z){S=C;break}else C=z}}if((S|0)==(K|0))break d;else{b=R;g=S;d=R;D=S}}k[c>>2]=F;k[c+4>>2]=G+28;I=1;return I|0}while(0);k[c+4>>2]=H+28;I=0;return I|0}function XR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+16|0;e=d+4|0;f=d;g=k[b>>2]|0;h=a+-8+4|0;a=k[h>>2]|0;i=k[a+16>>2]&-2;j=i+-16|0;if(!((i|0)==0|(j|0)==0)){i=j;while(1){l=k[i>>2]|0;m=l>>>0>g>>>0;j=k[(m?i+20|0:i+24|0)>>2]|0;n=(j|0)==0?0:j+-16|0;if(!n)break;else i=n}if(m){o=i;p=5}else{q=l;s=1;t=i;u=i;p=15}}else{o=a;p=5}if((p|0)==5){i=k[a+20>>2]|0;a=o+16|0;if((o|0)==(((i|0)==0?0:i+-16|0)|0)){v=0;w=a;y=o}else{i=k[a>>2]|0;if((i&1|0)==0?(k[(i&-2)>>2]&-2|0)==(a|0):0)z=k[o+24>>2]|0;else p=9;do if((p|0)==9){l=k[o+20>>2]|0;if(!l){m=i&-2;n=m;if((a|0)==(k[n+4>>2]|0))A=n;else{z=m;break}do{m=k[A>>2]&-2;n=A;A=m}while((n|0)==(k[A+4>>2]|0));z=m}else{m=l;while(1){n=k[m+8>>2]|0;if(!n){B=m;break}else m=n}z=B;break}}while(0);B=(z|0)==0?0:z+-16|0;q=k[B>>2]|0;s=0;t=o;u=B;p=15}}do if((p|0)==15){if(q>>>0>>0){v=s;w=t+16|0;y=t;break}C=u;r=d;return C|0}while(0);u=KBa(40)|0;k[c>>2]=u;x=0;fb(190,u|0,g|0,b+4|0);b=x;x=0;if(b&1){b=Hc(0)|0;me(b|0)|0;OBa(k[c>>2]|0);x=0;hb(46);x=0;b=Hc()|0;x=0;hb(45);g=x;x=0;if(g&1){g=Hc(0)|0;Fg(g)}else Sc(b|0)}b=k[c>>2]|0;c=b+16|0;g=k[h>>2]|0;h=g+16|0;do if(!v){k[y+20>>2]=c;if((w|0)==(h|0)){k[w>>2]=k[w>>2]&1|c;k[y+24>>2]=c;break}u=g+20|0;if((k[u>>2]|0)==(w|0))k[u>>2]=c}else{k[y+24>>2]=c;u=g+24|0;if((k[u>>2]|0)==(w|0))k[u>>2]=c}while(0);k[c>>2]=k[c>>2]&1|w;k[b+20>>2]=0;k[b+24>>2]=0;k[f>>2]=h;k[e>>2]=k[f>>2];YR(c,e);C=b;r=d;return C|0}function YR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;c=k[a>>2]&-2;k[a>>2]=c;d=k[b>>2]|0;e=k[d>>2]|0;if((e&-2|0)==(a|0)){f=e;g=f&-2;h=g;i=k[h>>2]|0;j=i|1;k[h>>2]=j;return}l=c;m=k[l>>2]|0;if(!(m&1)){n=m;o=l;p=l;q=c;r=c;s=d;t=a}else{f=e;g=f&-2;h=g;i=k[h>>2]|0;j=i|1;k[h>>2]=j;return}while(1){e=n&-2;a=k[e+4>>2]|0;do if((o|0)==(a|0)){d=k[e+8>>2]|0;if((d|0)!=0?(k[d>>2]&1|0)==0:0){k[p>>2]=n|1;k[d>>2]=k[d>>2]|1;d=k[(k[t>>2]&-2)>>2]&-2;k[d>>2]=k[d>>2]&-2;u=k[(k[t>>2]&-2)>>2]&-2;break}d=o+8|0;if((t|0)==(k[d>>2]|0)){c=t+4|0;k[d>>2]=k[c>>2];d=k[c>>2]|0;if(!d){v=n;w=q}else{k[d>>2]=k[d>>2]&1|r;v=k[p>>2]|0;w=k[t>>2]|0}k[t>>2]=w&1|v&-2;d=k[s>>2]|0;do if((d&-2|0)!=(o|0)){l=k[p>>2]|0;m=l&-2;x=m+4|0;if((k[x>>2]|0)==(o|0)){k[x>>2]=t;y=l;break}else{k[m+8>>2]=t;y=l;break}}else{k[s>>2]=d&1|t;y=k[p>>2]|0}while(0);k[c>>2]=o;d=y&1|t;k[p>>2]=d;z=o;A=k[b>>2]|0;B=d}else{z=t;A=s;B=q}d=B&-2;k[d>>2]=k[d>>2]|1;d=k[(k[z>>2]&-2)>>2]&-2;k[d>>2]=k[d>>2]&-2;d=k[(k[z>>2]&-2)>>2]&-2;l=d;m=l+4|0;x=k[m>>2]|0;C=x+8|0;k[m>>2]=k[C>>2];m=k[C>>2]|0;if(m)k[m>>2]=k[m>>2]&1|d;k[x>>2]=k[x>>2]&1|k[l>>2]&-2;d=k[A>>2]|0;do if((d&-2|0)!=(l|0)){m=k[l>>2]|0;D=m&-2;E=D+8|0;if((k[E>>2]|0)==(l|0)){k[E>>2]=x;F=m;break}else{k[D+4>>2]=x;F=m;break}}else{k[A>>2]=d&1|x;F=k[l>>2]|0}while(0);k[C>>2]=l;k[l>>2]=F&1|x;u=z}else{if((a|0)!=0?(k[a>>2]&1|0)==0:0){k[p>>2]=n|1;k[a>>2]=k[a>>2]|1;d=k[(k[t>>2]&-2)>>2]&-2;k[d>>2]=k[d>>2]&-2;u=k[(k[t>>2]&-2)>>2]&-2;break}d=o+4|0;if((t|0)==(k[d>>2]|0)){c=t+8|0;k[d>>2]=k[c>>2];d=k[c>>2]|0;if(!d){G=n;H=q}else{k[d>>2]=k[d>>2]&1|r;G=k[p>>2]|0;H=k[t>>2]|0}k[t>>2]=H&1|G&-2;d=k[s>>2]|0;do if((d&-2|0)!=(o|0)){m=k[p>>2]|0;D=m&-2;E=D+8|0;if((k[E>>2]|0)==(o|0)){k[E>>2]=t;I=m;break}else{k[D+4>>2]=t;I=m;break}}else{k[s>>2]=d&1|t;I=k[p>>2]|0}while(0);k[c>>2]=o;d=I&1|t;k[p>>2]=d;J=o;K=d;L=k[b>>2]|0}else{J=t;K=q;L=s}d=K&-2;k[d>>2]=k[d>>2]|1;d=k[(k[J>>2]&-2)>>2]&-2;k[d>>2]=k[d>>2]&-2;d=k[(k[J>>2]&-2)>>2]&-2;x=d;l=x+8|0;C=k[l>>2]|0;m=C+4|0;k[l>>2]=k[m>>2];l=k[m>>2]|0;if(l)k[l>>2]=k[l>>2]&1|d;k[C>>2]=k[C>>2]&1|k[x>>2]&-2;d=k[L>>2]|0;do if((d&-2|0)!=(x|0)){l=k[x>>2]|0;D=l&-2;E=D+4|0;if((k[E>>2]|0)==(x|0)){k[E>>2]=C;M=l;break}else{k[D+8>>2]=C;M=l;break}}else{k[L>>2]=d&1|C;M=k[x>>2]|0}while(0);k[m>>2]=x;k[x>>2]=M&1|C;u=J}while(0);a=k[b>>2]|0;e=k[a>>2]|0;if((u|0)==(e&-2|0)){f=e;N=46;break}d=k[u>>2]|0;c=d&-2;l=c;D=k[l>>2]|0;if(!(D&1)){n=D;o=l;p=l;q=d;r=c;s=a;t=u}else{f=e;N=46;break}}if((N|0)==46){g=f&-2;h=g;i=k[h>>2]|0;j=i|1;k[h>>2]=j;return}}function ZR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+16|0;d=b+8|0;e=b+4|0;f=b;g=a+4|0;k[g>>2]=0;h=a+8|0;k[h>>2]=0;i=a+4|0;k[a>>2]=i;j=k[c>>2]|0;l=c+4|0;if((j|0)==(l|0)){r=b;return}c=i;m=j;n=j;while(1){j=n+16|0;k[f>>2]=c;k[d>>2]=k[f>>2];o=XA(a,d,e,j)|0;if(!(k[o>>2]|0)){x=0;p=Ba(563,56)|0;q=x;x=0;if(q&1){s=12;break}q=p+16|0;t=j;j=q+40|0;do{k[q>>2]=k[t>>2];q=q+4|0;t=t+4|0}while((q|0)<(j|0));t=k[e>>2]|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=t;k[o>>2]=p;t=k[k[a>>2]>>2]|0;if(!t)u=p;else{k[a>>2]=t;u=k[o>>2]|0}ui(k[g>>2]|0,u);k[h>>2]=(k[h>>2]|0)+1}t=k[m+4>>2]|0;if(!t){q=m;while(1){j=k[q+8>>2]|0;if((k[j>>2]|0)==(q|0)){v=j;break}else q=j}}else{q=t;while(1){o=k[q>>2]|0;if(!o){v=q;break}else q=o}}if((v|0)==(l|0)){s=13;break}else{m=v;n=v}}if((s|0)==12){v=Hc()|0;DA(a,k[i>>2]|0);Sc(v|0)}else if((s|0)==13){r=b;return}}function _R(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;if(!a){f=b;return f|0}e=k[d>>2]|0;c=d+4|0;g=(e|0)==(c|0);h=a;a=b;a:while(1){b:do if(g)i=h;else{j=h;while(1){l=k[j+4>>2]|0;m=j+8|0;n=e;o=l;p=e;q=l;c:while(1){if((q|0)==(m|0))break;l=k[q+48>>2]|0;r=k[n+48>>2]|0;d:do if((l|0)==(r|0)){s=n+16|0;t=q+16|0;u=l;while(1){u=u+-1|0;if((u|0)<=-1){v=l;break}w=k[t+(u<<2)>>2]|0;x=k[s+(u<<2)>>2]|0;if((w|0)!=(x|0)){y=w;z=x;A=11;break}}if((A|0)==11){A=0;if(y>>>0>z>>>0)v=l;else break c}while(1){v=v+-1|0;if((v|0)<=-1)break d;u=k[s+(v<<2)>>2]|0;x=k[t+(v<<2)>>2]|0;if((u|0)!=(x|0)){B=u;C=x;break}}if(B>>>0<=C>>>0){i=j;break b}}else{if(l>>>0<=r>>>0)break c;if(r>>>0<=l>>>0){i=j;break b}}while(0);l=k[o+4>>2]|0;if(!l){r=o;while(1){t=k[r+8>>2]|0;if((k[t>>2]|0)==(r|0)){D=t;break}else r=t}}else{r=l;while(1){t=k[r>>2]|0;if(!t){D=r;break}else r=t}}r=k[p+4>>2]|0;if(!r){l=p;while(1){t=k[l+8>>2]|0;if((k[t>>2]|0)==(l|0)){E=t;break}else l=t}}else{l=r;while(1){t=k[l>>2]|0;if(!t){E=l;break}else l=t}}if((E|0)==(c|0)){i=j;break b}else{n=E;o=D;p=E;q=D}}q=k[j+36>>2]|0;j=(q|0)==0?0:q+-28|0;if(!j){F=a;break a}}}while(0);j=k[i+32>>2]|0;h=(j|0)==0?0:j+-28|0;if(!h){F=i;break}else a=i}if((F|0)==(b|0)){f=b;return f|0}i=k[d>>2]|0;a=d+4|0;d=k[F+4>>2]|0;h=F+8|0;if((d|0)==(h|0)){f=F;return f|0}D=d;E=i;c=d;d=i;e:while(1){if((E|0)==(a|0)){f=b;A=46;break}i=k[E+48>>2]|0;C=k[c+48>>2]|0;f:do if((i|0)==(C|0)){B=c+16|0;v=E+16|0;z=i;while(1){z=z+-1|0;if((z|0)<=-1){G=i;break}y=k[v+(z<<2)>>2]|0;e=k[B+(z<<2)>>2]|0;if((y|0)!=(e|0)){H=y;I=e;A=34;break}}if((A|0)==34){A=0;if(H>>>0>I>>>0)G=i;else{f=b;A=46;break e}}while(1){G=G+-1|0;if((G|0)<=-1)break f;z=k[B+(G<<2)>>2]|0;e=k[v+(G<<2)>>2]|0;if((z|0)!=(e|0)){J=z;K=e;break}}if(J>>>0<=K>>>0){f=F;A=46;break e}}else{if(i>>>0<=C>>>0){f=b;A=46;break e}if(C>>>0<=i>>>0){f=F;A=46;break e}}while(0);i=k[d+4>>2]|0;if(!i){C=d;while(1){v=k[C+8>>2]|0;if((k[v>>2]|0)==(C|0)){L=v;break}else C=v}}else{C=i;while(1){v=k[C>>2]|0;if(!v){L=C;break}else C=v}}C=k[D+4>>2]|0;if(!C){i=D;while(1){v=k[i+8>>2]|0;if((k[v>>2]|0)==(i|0)){M=v;break}else i=v}}else{i=C;while(1){v=k[i>>2]|0;if(!v){M=i;break}else i=v}}if((M|0)==(h|0)){f=F;A=46;break}else{D=M;E=L;c=M;d=L}}if((A|0)==46)return f|0;return 0}function $R(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;g=c;a:do if(!b)h=g;else{c=k[e>>2]|0;i=e+4|0;j=(c|0)==(i|0);l=b;m=g;b:while(1){c:do if(j){n=l+8|0;o=l;p=n;q=l+4|0;r=n}else{n=l;while(1){s=n+4|0;t=k[s>>2]|0;u=n+8|0;v=c;w=t;x=c;y=t;d:while(1){if((y|0)==(u|0))break;t=k[y+48>>2]|0;z=k[v+48>>2]|0;e:do if((t|0)==(z|0)){A=v+16|0;B=y+16|0;C=t;while(1){C=C+-1|0;if((C|0)<=-1){D=t;break}E=k[B+(C<<2)>>2]|0;F=k[A+(C<<2)>>2]|0;if((E|0)!=(F|0)){G=E;H=F;I=11;break}}if((I|0)==11){I=0;if(G>>>0>H>>>0)D=t;else break d}while(1){D=D+-1|0;if((D|0)<=-1)break e;C=k[A+(D<<2)>>2]|0;F=k[B+(D<<2)>>2]|0;if((C|0)!=(F|0)){J=C;K=F;break}}if(J>>>0<=K>>>0){o=n;p=u;q=s;r=u;break c}}else{if(t>>>0<=z>>>0)break d;if(z>>>0<=t>>>0){o=n;p=u;q=s;r=u;break c}}while(0);t=k[w+4>>2]|0;if(!t){z=w;while(1){B=k[z+8>>2]|0;if((k[B>>2]|0)==(z|0)){L=B;break}else z=B}}else{z=t;while(1){B=k[z>>2]|0;if(!B){L=z;break}else z=B}}z=k[x+4>>2]|0;if(!z){t=x;while(1){B=k[t+8>>2]|0;if((k[B>>2]|0)==(t|0)){M=B;break}else t=B}}else{t=z;while(1){B=k[t>>2]|0;if(!B){M=t;break}else t=B}}if((M|0)==(i|0)){o=n;p=u;q=s;r=u;break c}else{v=M;w=L;x=M;y=L}}y=k[n+36>>2]|0;n=(y|0)==0?0:y+-28|0;if(!n){h=m;break a}}}while(0);n=k[q>>2]|0;if((n|0)==(r|0)){N=o;O=m;break}y=n;x=c;w=n;n=c;f:while(1){if((x|0)==(i|0))break;v=k[x+48>>2]|0;u=k[w+48>>2]|0;g:do if((v|0)==(u|0)){s=w+16|0;t=x+16|0;z=v;while(1){z=z+-1|0;if((z|0)<=-1){P=v;break}B=k[t+(z<<2)>>2]|0;A=k[s+(z<<2)>>2]|0;if((B|0)!=(A|0)){Q=B;R=A;I=33;break}}if((I|0)==33){I=0;if(Q>>>0>R>>>0)P=v;else break f}while(1){P=P+-1|0;if((P|0)<=-1)break g;z=k[s+(P<<2)>>2]|0;A=k[t+(P<<2)>>2]|0;if((z|0)!=(A|0)){S=z;T=A;break}}if(S>>>0<=T>>>0){N=o;O=m;break b}}else{if(v>>>0<=u>>>0)break f;if(u>>>0<=v>>>0){N=o;O=m;break b}}while(0);v=k[n+4>>2]|0;if(!v){u=n;while(1){t=k[u+8>>2]|0;if((k[t>>2]|0)==(u|0)){U=t;break}else u=t}}else{u=v;while(1){t=k[u>>2]|0;if(!t){U=u;break}else u=t}}u=k[y+4>>2]|0;if(!u){v=y;while(1){t=k[v+8>>2]|0;if((k[t>>2]|0)==(v|0)){V=t;break}else v=t}}else{v=u;while(1){t=k[v>>2]|0;if(!t){V=v;break}else v=t}}if((V|0)==(p|0)){N=o;O=m;break b}else{y=V;x=U;w=V;n=U}}n=o;w=k[o+32>>2]|0;l=(w|0)==0?0:w+-28|0;if(!l){h=n;break a}else m=n}m=k[N+32>>2]|0;l=aS((m|0)==0?0:m+-28|0,N,d,e,f)|0;m=k[N+36>>2]|0;i=bS((m|0)==0?0:m+-28|0,O,d,e,f)|0;k[a>>2]=l;k[a+4>>2]=i;return}while(0);k[a>>2]=h;k[a+4>>2]=h;return}function aS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!a){f=b;return f|0}e=k[d>>2]|0;c=d+4|0;d=(e|0)==(c|0);g=a;a=b;a:while(1){b:do if(d)h=g;else{b=g;while(1){i=k[b+4>>2]|0;j=b+8|0;l=e;m=i;n=e;o=i;c:while(1){if((o|0)==(j|0))break;i=k[o+48>>2]|0;p=k[l+48>>2]|0;d:do if((i|0)==(p|0)){q=l+16|0;r=o+16|0;s=i;while(1){s=s+-1|0;if((s|0)<=-1){t=i;break}u=k[r+(s<<2)>>2]|0;v=k[q+(s<<2)>>2]|0;if((u|0)!=(v|0)){w=u;x=v;y=11;break}}if((y|0)==11){y=0;if(w>>>0>x>>>0)t=i;else break c}while(1){t=t+-1|0;if((t|0)<=-1)break d;s=k[q+(t<<2)>>2]|0;v=k[r+(t<<2)>>2]|0;if((s|0)!=(v|0)){z=s;A=v;break}}if(z>>>0<=A>>>0){h=b;break b}}else{if(i>>>0<=p>>>0)break c;if(p>>>0<=i>>>0){h=b;break b}}while(0);i=k[m+4>>2]|0;if(!i){p=m;while(1){r=k[p+8>>2]|0;if((k[r>>2]|0)==(p|0)){B=r;break}else p=r}}else{p=i;while(1){r=k[p>>2]|0;if(!r){B=p;break}else p=r}}p=k[n+4>>2]|0;if(!p){i=n;while(1){r=k[i+8>>2]|0;if((k[r>>2]|0)==(i|0)){C=r;break}else i=r}}else{i=p;while(1){r=k[i>>2]|0;if(!r){C=i;break}else i=r}}if((C|0)==(c|0)){h=b;break b}else{l=C;m=B;n=C;o=B}}o=k[b+36>>2]|0;b=(o|0)==0?0:o+-28|0;if(!b){f=a;y=25;break a}}}while(0);b=k[h+32>>2]|0;g=(b|0)==0?0:b+-28|0;if(!g){f=h;y=25;break}else a=h}if((y|0)==25)return f|0;return 0}function bS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!a){f=b;return f|0}e=k[d>>2]|0;c=d+4|0;d=a;a=b;a:while(1){b=d;b:while(1){g=k[b+4>>2]|0;h=b+8|0;c:do if((g|0)!=(h|0)){i=g;j=e;l=g;m=e;while(1){if((m|0)==(c|0)){n=b;break b}o=k[m+48>>2]|0;p=k[i+48>>2]|0;d:do if((o|0)==(p|0)){q=i+16|0;r=m+16|0;s=o;while(1){s=s+-1|0;if((s|0)<=-1){t=o;break}u=k[r+(s<<2)>>2]|0;v=k[q+(s<<2)>>2]|0;if((u|0)!=(v|0)){w=u;x=v;y=12;break}}if((y|0)==12){y=0;if(w>>>0>x>>>0)t=o;else{n=b;break b}}while(1){t=t+-1|0;if((t|0)<=-1)break d;s=k[q+(t<<2)>>2]|0;v=k[r+(t<<2)>>2]|0;if((s|0)!=(v|0)){z=s;A=v;break}}if(z>>>0<=A>>>0)break c}else{if(o>>>0<=p>>>0){n=b;break b}if(p>>>0<=o>>>0)break c}while(0);o=k[j+4>>2]|0;if(!o){p=j;while(1){r=k[p+8>>2]|0;if((k[r>>2]|0)==(p|0)){B=r;break}else p=r}}else{p=o;while(1){r=k[p>>2]|0;if(!r){B=p;break}else p=r}}p=k[l+4>>2]|0;if(!p){o=l;while(1){r=k[o+8>>2]|0;if((k[r>>2]|0)==(o|0)){C=r;break}else o=r}}else{o=p;while(1){r=k[o>>2]|0;if(!r){C=o;break}else o=r}}if((C|0)==(h|0))break;else{i=C;j=B;l=C;m=B}}}while(0);h=k[b+36>>2]|0;b=(h|0)==0?0:h+-28|0;if(!b){f=a;y=26;break a}}b=k[n+32>>2]|0;d=(b|0)==0?0:b+-28|0;if(!d){f=n;y=26;break}else a=n}if((y|0)==26)return f|0;return 0}function cS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function dS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=k[b>>2]|0;k[a>>2]=e;a=e>>>0<4294967294?(k[b+32>>2]|0)>>>0<2:0;q2a(d,230292,21);x=0;pa(49,a|0,d|0,40,230314,230350);a=x;x=0;if(a&1){a=Hc()|0;K2a(d);Sc(a|0)}else{K2a(d);r=c;return}}function eS(a,b){a=a|0;b=b|0;var c=0;c=k[b+4>>2]|0;if((k[c>>2]|0)==(k[c+4>>2]|0)){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}else{fS(b);gS(b);hS(b);iS(b);jS(b);kS(b);lS(a,b);return}}function fS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b;k[a>>2]=0;d=k[a+4>>2]|0;e=k[d>>2]|0;f=k[d+4>>2]|0;if((e|0)==(f|0)){r=b;return}d=e;a:while(1){switch(k[d>>2]|0){case 4:case 8:{e=d+8|0;g=(k[e>>2]|0)>>>0<4294967294?(k[d+40>>2]|0)>>>0<2:0;q2a(c,230292,21);x=0;pa(49,g|0,c|0,40,230314,230350);g=x;x=0;if(g&1){h=6;break a}K2a(c);g=k[e>>2]|0;e=k[a>>2]|0;k[a>>2]=g>>>0>>0?e:g;break}default:{}}d=d+80|0;if((d|0)==(f|0)){h=3;break}}if((h|0)==3){r=b;return}else if((h|0)==6){h=Hc()|0;K2a(c);Sc(h|0)}}function gS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0;b=r;r=r+176|0;c=b+164|0;d=b+160|0;e=b+80|0;f=b;g=a+12|0;h=a+16|0;HD(g,k[h>>2]|0);i=a+20|0;k[i>>2]=0;j=h;l=KBa(68)|0;k[l+16>>2]=-2;m=l+20|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;k[l+40>>2]=-1;k[l+44>>2]=-1;k[l+48>>2]=3;n=l+52|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=j;k[h>>2]=l;k[g>>2]=l;n=a+16|0;ui(l,l);k[i>>2]=(k[i>>2]|0)+1;k[m>>2]=0;m=a+4|0;l=k[m>>2]|0;o=k[l+4>>2]|0;p=k[l>>2]|0;do if((o|0)!=(p|0)){l=e+8|0;q=e+40|0;s=e+48|0;t=e+56|0;u=f+8|0;v=f+40|0;w=f+48|0;y=f+56|0;z=p;A=-2;B=0;a:while(1){C=z;D=C+(B*80|0)|0;E=k[D>>2]|0;F=(A|0)!=-1;do if((E|0)!=8)if(F){G=E;H=A}else I=24;else{if(F){J=k[h>>2]|0;do if(J){K=J;while(1){L=k[K+16>>2]|0;if(A>>>0>>0){M=k[K>>2]|0;if(!M){N=K;O=K;I=9;break}else P=M}else{if(L>>>0>=A>>>0){Q=K;I=15;break}L=K+4|0;M=k[L>>2]|0;if(!M){R=L;S=K;I=13;break}else P=M}K=P}if((I|0)==9){I=0;k[c>>2]=O;T=N;U=O;I=16;break}else if((I|0)==13){I=0;k[c>>2]=S;T=R;U=S;I=16;break}else if((I|0)==15){I=0;k[c>>2]=Q;if(!Q){T=c;U=Q;I=16;break}else{V=Q;break}}}else{k[c>>2]=h;T=h;U=j;I=16}while(0);if((I|0)==16){I=0;J=KBa(68)|0;k[J+16>>2]=A;K=J+20|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[K+16>>2]=0;k[J+40>>2]=-1;k[J+44>>2]=-1;k[J+48>>2]=3;K=J+52|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=U;k[T>>2]=J;K=k[k[g>>2]>>2]|0;if(!K)W=J;else{k[g>>2]=K;W=k[T>>2]|0}ui(k[n>>2]|0,W);k[i>>2]=(k[i>>2]|0)+1;V=J}k[V+24>>2]=B;if((k[D>>2]|0)!=8){I=24;break}}J=k[C+(B*80|0)+8>>2]|0;K=J>>>0<4294967294?(k[C+(B*80|0)+40>>2]|0)>>>0<2:0;q2a(c,230292,21);x=0;pa(49,K|0,c|0,40,230314,230350);K=x;x=0;if(K&1){I=22;break a}K2a(c);X=J;I=27}while(0);if((I|0)==24){I=0;F=(k[a>>2]|0)+1|0;k[a>>2]=F;q2a(c,230391,17);x=0;pa(49,F>>>0<4294967294|0,c|0,371,230314,230409);E=x;x=0;if(E&1){I=25;break}K2a(c);X=F;I=27}if((I|0)==27){I=0;F=k[h>>2]|0;do if(F){E=F;while(1){J=k[E+16>>2]|0;if(X>>>0>>0){K=k[E>>2]|0;if(!K){Y=E;Z=E;I=30;break}else _=K}else{if(J>>>0>=X>>>0){$=E;I=36;break}J=E+4|0;K=k[J>>2]|0;if(!K){aa=J;ba=E;I=34;break}else _=K}E=_}if((I|0)==30){I=0;k[c>>2]=Z;ca=Y;da=Z;I=37;break}else if((I|0)==34){I=0;k[c>>2]=ba;ca=aa;da=ba;I=37;break}else if((I|0)==36){I=0;k[c>>2]=$;if(!$){ca=c;da=$;I=37;break}else{ea=$;break}}}else{k[c>>2]=h;ca=h;da=j;I=37}while(0);if((I|0)==37){I=0;F=KBa(68)|0;k[F+16>>2]=X;E=F+20|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[E+16>>2]=0;k[F+40>>2]=-1;k[F+44>>2]=-1;k[F+48>>2]=3;E=F+52|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=da;k[ca>>2]=F;E=k[k[g>>2]>>2]|0;if(!E)fa=F;else{k[g>>2]=E;fa=k[ca>>2]|0}ui(k[n>>2]|0,fa);k[i>>2]=(k[i>>2]|0)+1;ea=F}k[ea+20>>2]=B;G=k[D>>2]|0;H=X}do if((G|0)==4){F=k[h>>2]|0;do if(F){E=F;while(1){K=k[E+16>>2]|0;if(H>>>0>>0){J=k[E>>2]|0;if(!J){ga=E;ha=E;I=45;break}else ia=J}else{if(K>>>0>=H>>>0){ja=E;I=51;break}K=E+4|0;J=k[K>>2]|0;if(!J){ka=K;la=E;I=49;break}else ia=J}E=ia}if((I|0)==45){I=0;k[c>>2]=ha;ma=ga;na=ha;I=52;break}else if((I|0)==49){I=0;k[c>>2]=la;ma=ka;na=la;I=52;break}else if((I|0)==51){I=0;k[c>>2]=ja;if(!ja){ma=c;na=ja;I=52;break}else{oa=ja;break}}}else{k[c>>2]=h;ma=h;na=j;I=52}while(0);if((I|0)==52){I=0;F=KBa(68)|0;k[F+16>>2]=H;E=F+20|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[E+16>>2]=0;k[F+40>>2]=-1;k[F+44>>2]=-1;k[F+48>>2]=3;E=F+52|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=na;k[ma>>2]=F;E=k[k[g>>2]>>2]|0;if(!E)qa=F;else{k[g>>2]=E;qa=k[ma>>2]|0}ui(k[n>>2]|0,qa);k[i>>2]=(k[i>>2]|0)+1;oa=F}F=k[C+(B*80|0)+8>>2]|0;k[d>>2]=F;E=F>>>0<4294967294?(k[C+(B*80|0)+40>>2]|0)>>>0<2:0;q2a(c,230292,21);x=0;pa(49,E|0,c|0,40,230314,230350);E=x;x=0;if(E&1){I=56;break a}K2a(c);E=oa+32|0;J=k[E>>2]|0;if(J>>>0<(k[oa+36>>2]|0)>>>0){k[J>>2]=F;k[E>>2]=J+4;break}else{oS(oa+28|0,d);break}}while(0);J=B;B=B+1|0;b:do if(gB(D)|0){E=k[h>>2]|0;do if(E){F=E;while(1){K=k[F+16>>2]|0;if(H>>>0>>0){M=k[F>>2]|0;if(!M){ra=F;sa=F;I=64;break}else ta=M}else{if(K>>>0>=H>>>0){ua=F;I=70;break}K=F+4|0;M=k[K>>2]|0;if(!M){va=K;wa=F;I=68;break}else ta=M}F=ta}if((I|0)==64){I=0;k[c>>2]=sa;xa=ra;ya=sa;I=71;break}else if((I|0)==68){I=0;k[c>>2]=wa;xa=va;ya=wa;I=71;break}else if((I|0)==70){I=0;k[c>>2]=ua;if(!ua){xa=c;ya=ua;I=71;break}else{za=ua;break}}}else{k[c>>2]=h;xa=h;ya=j;I=71}while(0);if((I|0)==71){I=0;E=KBa(68)|0;k[E+16>>2]=H;F=E+20|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;k[E+40>>2]=-1;k[E+44>>2]=-1;k[E+48>>2]=3;F=E+52|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=ya;k[xa>>2]=E;F=k[k[g>>2]>>2]|0;if(!F)Aa=E;else{k[g>>2]=F;Aa=k[xa>>2]|0}ui(k[n>>2]|0,Aa);k[i>>2]=(k[i>>2]|0)+1;za=E}k[za+24>>2]=B;k[e>>2]=1;k[l>>2]=86;k[q>>2]=1;E=s;k[E>>2]=-1;k[E+4>>2]=-1;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[t+16>>2]=0;c:do if(((k[D>>2]|0)==1?(k[C+(J*80|0)+40>>2]|0)==1:0)?(E=C+(J*80|0)+8|0,(k[E>>2]|0)==86):0){F=E;M=l;while(1){M=M+4|0;if((F|0)==(E|0))break;F=F+4|0;if((k[F>>2]|0)!=(k[M>>2]|0))break c}M=k[h>>2]|0;do if(M){F=M;while(1){E=k[F+16>>2]|0;if(H>>>0>>0){K=k[F>>2]|0;if(!K){Ba=F;Ca=F;I=82;break}else Da=K}else{if(E>>>0>=H>>>0){Ea=F;I=88;break}E=F+4|0;K=k[E>>2]|0;if(!K){Fa=E;Ga=F;I=86;break}else Da=K}F=Da}if((I|0)==82){I=0;k[c>>2]=Ca;Ha=Ba;Ia=Ca;I=89;break}else if((I|0)==86){I=0;k[c>>2]=Ga;Ha=Fa;Ia=Ga;I=89;break}else if((I|0)==88){I=0;k[c>>2]=Ea;if(!Ea){Ha=c;Ia=Ea;I=89;break}else{Ja=Ea;break}}}else{k[c>>2]=h;Ha=h;Ia=j;I=89}while(0);if((I|0)==89){I=0;M=KBa(68)|0;k[M+16>>2]=H;F=M+20|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;k[M+40>>2]=-1;k[M+44>>2]=-1;k[M+48>>2]=3;F=M+52|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=Ia;k[Ha>>2]=M;F=k[k[g>>2]>>2]|0;if(!F)Ka=M;else{k[g>>2]=F;Ka=k[Ha>>2]|0}ui(k[n>>2]|0,Ka);k[i>>2]=(k[i>>2]|0)+1;Ja=M}k[Ja+48>>2]=0;La=-1;break b}while(0);k[f>>2]=1;k[u>>2]=87;k[v>>2]=1;M=w;k[M>>2]=-1;k[M+4>>2]=-1;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;d:do if(((k[D>>2]|0)==1?(k[C+(J*80|0)+40>>2]|0)==1:0)?(M=C+(J*80|0)+8|0,(k[M>>2]|0)==87):0){F=M;K=u;while(1){K=K+4|0;if((F|0)==(M|0)){Ma=1;break d}F=F+4|0;if((k[F>>2]|0)!=(k[K>>2]|0)){Ma=0;break}}}else Ma=0;while(0);K=k[h>>2]|0;do if(K){F=K;while(1){M=k[F+16>>2]|0;if(H>>>0>>0){E=k[F>>2]|0;if(!E){Na=F;Oa=F;I=101;break}else Pa=E}else{if(M>>>0>=H>>>0){Qa=F;I=107;break}M=F+4|0;E=k[M>>2]|0;if(!E){Ra=M;Sa=F;I=105;break}else Pa=E}F=Pa}if((I|0)==101){I=0;k[c>>2]=Oa;Ta=Na;Ua=Oa;I=108;break}else if((I|0)==105){I=0;k[c>>2]=Sa;Ta=Ra;Ua=Sa;I=108;break}else if((I|0)==107){I=0;k[c>>2]=Qa;if(!Qa){Ta=c;Ua=Qa;I=108;break}else{Va=Qa;break}}}else{k[c>>2]=h;Ta=h;Ua=j;I=108}while(0);if((I|0)==108){I=0;K=KBa(68)|0;k[K+16>>2]=H;F=K+20|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[F+16>>2]=0;k[K+40>>2]=-1;k[K+44>>2]=-1;k[K+48>>2]=3;F=K+52|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=Ua;k[Ta>>2]=K;F=k[k[g>>2]>>2]|0;if(!F)Wa=K;else{k[g>>2]=F;Wa=k[Ta>>2]|0}ui(k[n>>2]|0,Wa);k[i>>2]=(k[i>>2]|0)+1;Va=K}K=Va+48|0;if(Ma){k[K>>2]=1;La=-1;break}else{k[K>>2]=2;La=-1;break}}else La=H;while(0);J=k[m>>2]|0;z=k[J>>2]|0;C=((k[J+4>>2]|0)-z|0)/80|0;if(B>>>0>=C>>>0){Xa=La;Ya=C;I=3;break}else A=La}if((I|0)==3){if((Xa|0)!=-1){Za=Xa;_a=Ya;break}r=b;return}else if((I|0)==22){A=Hc()|0;K2a(c);Sc(A|0)}else if((I|0)==25){A=Hc()|0;K2a(c);Sc(A|0)}else if((I|0)==56){A=Hc()|0;K2a(c);Sc(A|0)}}else{Za=-2;_a=(o-p|0)/80|0}while(0);p=k[h>>2]|0;do if(p){o=p;while(1){Ya=k[o+16>>2]|0;if(Za>>>0>>0){Xa=k[o>>2]|0;if(!Xa){$a=o;ab=o;I=118;break}else bb=Xa}else{if(Ya>>>0>=Za>>>0){cb=o;I=124;break}Ya=o+4|0;Xa=k[Ya>>2]|0;if(!Xa){db=Ya;eb=o;I=122;break}else bb=Xa}o=bb}if((I|0)==118){k[c>>2]=ab;fb=$a;gb=ab;I=125;break}else if((I|0)==122){k[c>>2]=eb;fb=db;gb=eb;I=125;break}else if((I|0)==124){k[c>>2]=cb;if(!cb){fb=c;gb=cb;I=125;break}else{hb=p;ib=cb;break}}}else{k[c>>2]=h;fb=h;gb=j;I=125}while(0);if((I|0)==125){cb=KBa(68)|0;k[cb+16>>2]=Za;p=cb+20|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[p+16>>2]=0;k[cb+40>>2]=-1;k[cb+44>>2]=-1;k[cb+48>>2]=3;p=cb+52|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=gb;k[fb>>2]=cb;gb=k[k[g>>2]>>2]|0;if(!gb)jb=cb;else{k[g>>2]=gb;jb=k[fb>>2]|0}ui(k[n>>2]|0,jb);k[i>>2]=(k[i>>2]|0)+1;hb=k[h>>2]|0;ib=cb}k[ib+24>>2]=_a;do if(hb){_a=hb;while(1){ib=k[_a+16>>2]|0;if(Za>>>0>>0){cb=k[_a>>2]|0;if(!cb){kb=_a;lb=_a;I=131;break}else mb=cb}else{if(ib>>>0>=Za>>>0){nb=_a;I=137;break}ib=_a+4|0;cb=k[ib>>2]|0;if(!cb){ob=ib;pb=_a;I=135;break}else mb=cb}_a=mb}if((I|0)==131){k[c>>2]=lb;qb=kb;rb=lb;I=138;break}else if((I|0)==135){k[c>>2]=pb;qb=ob;rb=pb;I=138;break}else if((I|0)==137){k[c>>2]=nb;if(!nb){qb=c;rb=nb;I=138;break}else{sb=nb;break}}}else{k[c>>2]=h;qb=h;rb=j;I=138}while(0);if((I|0)==138){nb=KBa(68)|0;k[nb+16>>2]=Za;pb=nb+20|0;k[pb>>2]=0;k[pb+4>>2]=0;k[pb+8>>2]=0;k[pb+12>>2]=0;k[pb+16>>2]=0;k[nb+40>>2]=-1;k[nb+44>>2]=-1;k[nb+48>>2]=3;pb=nb+52|0;k[pb>>2]=0;k[pb+4>>2]=0;k[pb+8>>2]=0;k[pb+12>>2]=0;k[nb>>2]=0;k[nb+4>>2]=0;k[nb+8>>2]=rb;k[qb>>2]=nb;rb=k[k[g>>2]>>2]|0;if(!rb)tb=nb;else{k[g>>2]=rb;tb=k[qb>>2]|0}ui(k[n>>2]|0,tb);k[i>>2]=(k[i>>2]|0)+1;sb=nb}if((k[sb+48>>2]|0)!=3){r=b;return}sb=k[h>>2]|0;do if(sb){nb=sb;while(1){tb=k[nb+16>>2]|0;if(Za>>>0>>0){qb=k[nb>>2]|0;if(!qb){ub=nb;vb=nb;I=145;break}else wb=qb}else{if(tb>>>0>=Za>>>0){xb=nb;I=151;break}tb=nb+4|0;qb=k[tb>>2]|0;if(!qb){yb=tb;zb=nb;I=149;break}else wb=qb}nb=wb}if((I|0)==145){k[c>>2]=vb;Ab=ub;Bb=vb;I=152;break}else if((I|0)==149){k[c>>2]=zb;Ab=yb;Bb=zb;I=152;break}else if((I|0)==151){k[c>>2]=xb;if(!xb){Ab=c;Bb=xb;I=152;break}else{Cb=xb;break}}}else{k[c>>2]=h;Ab=h;Bb=j;I=152}while(0);if((I|0)==152){I=KBa(68)|0;k[I+16>>2]=Za;Za=I+20|0;k[Za>>2]=0;k[Za+4>>2]=0;k[Za+8>>2]=0;k[Za+12>>2]=0;k[Za+16>>2]=0;k[I+40>>2]=-1;k[I+44>>2]=-1;k[I+48>>2]=3;Za=I+52|0;k[Za>>2]=0;k[Za+4>>2]=0;k[Za+8>>2]=0;k[Za+12>>2]=0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=Bb;k[Ab>>2]=I;Bb=k[k[g>>2]>>2]|0;if(!Bb)Db=I;else{k[g>>2]=Bb;Db=k[Ab>>2]|0}ui(k[n>>2]|0,Db);k[i>>2]=(k[i>>2]|0)+1;Cb=I}k[Cb+48>>2]=2;r=b;return}function hS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;b=r;r=r+32|0;c=b+24|0;d=b+12|0;e=b;f=d+4|0;k[f>>2]=0;g=d+8|0;k[g>>2]=0;h=d+4|0;k[d>>2]=h;i=a+12|0;j=k[i>>2]|0;l=a+16|0;do if((j|0)!=(l|0)){a=h;m=j;while(1){n=m+20|0;o=k[n>>2]|0;if((o|0)!=(k[m+24>>2]|0)){p=k[h>>2]|0;do if(p){q=p;while(1){s=k[q+16>>2]|0;if(o>>>0>>0){t=k[q>>2]|0;if(!t){u=q;v=q;w=14;break}else y=t}else{if(s>>>0>=o>>>0){z=q;w=20;break}s=q+4|0;t=k[s>>2]|0;if(!t){A=s;B=q;w=18;break}else y=t}q=y}if((w|0)==14){w=0;k[c>>2]=v;C=u;D=v;w=21;break}else if((w|0)==18){w=0;k[c>>2]=B;C=A;D=B;w=21;break}else if((w|0)==20){w=0;k[c>>2]=z;if(!z){C=c;D=z;w=21;break}else{E=z;break}}}else{k[c>>2]=h;C=h;D=a;w=21}while(0);if((w|0)==21){w=0;x=0;o=Ba(563,24)|0;p=x;x=0;if(p&1){w=7;break}k[o+16>>2]=k[n>>2];k[o+20>>2]=-1;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=D;k[C>>2]=o;p=k[k[d>>2]>>2]|0;if(!p)F=o;else{k[d>>2]=p;F=k[C>>2]|0}ui(k[f>>2]|0,F);k[g>>2]=(k[g>>2]|0)+1;E=o}k[E+20>>2]=k[m+16>>2]}o=k[m+4>>2]|0;if(!o){p=m;while(1){q=k[p+8>>2]|0;if((k[q>>2]|0)==(p|0)){G=q;break}else p=q}}else{p=o;while(1){n=k[p>>2]|0;if(!n){G=p;break}else p=n}}if((G|0)==(l|0)){w=3;break}else m=G}if((w|0)==3){H=k[i>>2]|0;w=4;break}else if((w|0)==7){m=Hc()|0;I=m;J=M;w=8;break}}else{H=j;w=4}while(0);do if((w|0)==4){if((H|0)==(l|0)){K=k[h>>2]|0;pS(d,K);r=b;return}j=H;a:while(1){switch(k[j+48>>2]|0){case 3:case 1:{i=j+24|0;G=k[h>>2]|0;b:do if(!G)L=0;else{E=k[i>>2]|0;g=G;while(1){F=k[g+16>>2]|0;if(E>>>0>>0)N=g;else{if(F>>>0>=E>>>0){L=1;break b}N=g+4|0}g=k[N>>2]|0;if(!g){L=0;break}}}while(0);x=0;fb(140,e|0,230471,26);G=x;x=0;if(G&1){w=6;break a}x=0;pa(49,(L|0)!=0|0,e|0,129,230314,230498);G=x;x=0;if(G&1){w=54;break a}K2a(e);G=k[h>>2]|0;if(!G){w=50;break a}g=k[i>>2]|0;E=G;while(1){G=k[E+16>>2]|0;if(g>>>0>>0){F=k[E>>2]|0;if(!F){w=50;break a}else O=F}else{if(G>>>0>=g>>>0){P=E;break}G=k[E+4>>2]|0;if(!G){w=50;break a}else O=G}E=O}if(!P){w=50;break a}k[j+40>>2]=k[P+20>>2];break}default:{}}E=k[j+4>>2]|0;if(!E){g=j;while(1){i=k[g+8>>2]|0;if((k[i>>2]|0)==(g|0)){Q=i;break}else g=i}}else{g=E;while(1){i=k[g>>2]|0;if(!i){Q=g;break}else g=i}}if((Q|0)==(l|0)){w=31;break}else j=Q}if((w|0)==6){j=Hc()|0;I=j;J=M;w=8;break}else if((w|0)==31){K=k[h>>2]|0;pS(d,K);r=b;return}else if((w|0)==50){j=Rd(8)|0;x=0;xa(671,j|0,296399);g=x;x=0;if(g&1){g=Hc()|0;E=M;Fc(j|0);R=h;S=E;T=g;break}else{k[j>>2]=47544;x=0;fb(149,j|0,9024,933);x=0;j=Hc()|0;I=j;J=M;w=8;break}}else if((w|0)==54){j=Hc()|0;g=M;K2a(e);U=j;V=g;W=h;X=k[W>>2]|0;pS(d,X);Sc(U|0)}}while(0);if((w|0)==8){R=h;S=J;T=I}U=T;V=S;W=R;X=k[W>>2]|0;pS(d,X);Sc(U|0)}function iS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;b=r;r=r+48|0;c=b+44|0;d=b+40|0;e=b+36|0;f=b+28|0;g=b+16|0;h=b+4|0;i=b+32|0;j=b;k[g>>2]=0;l=g+4|0;k[l>>2]=0;k[g+8>>2]=0;m=KBa(4)|0;k[g>>2]=m;n=m+4|0;o=g+8|0;k[o>>2]=n;k[m>>2]=-2;k[l>>2]=n;k[i>>2]=-2;n=h+4|0;k[n>>2]=0;m=h+8|0;k[m>>2]=0;p=h+4|0;k[h>>2]=p;q=p;k[f>>2]=q;k[c>>2]=k[f>>2];f=qS(h,c,e,i)|0;do if(!(k[f>>2]|0)){x=0;i=Ba(563,20)|0;s=x;x=0;if(s&1){s=Hc()|0;t=M;rS(h,k[p>>2]|0);u=s;v=t;break}k[i+16>>2]=-2;t=k[e>>2]|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=t;k[f>>2]=i;t=k[k[h>>2]>>2]|0;if(!t)w=i;else{k[h>>2]=t;w=k[f>>2]|0}ui(k[n>>2]|0,w);k[m>>2]=(k[m>>2]|0)+1;y=6}else y=6;while(0);a:do if((y|0)==6){w=k[l>>2]|0;f=a+12|0;e=a+16|0;b:do if((k[g>>2]|0)==(w|0))z=p;else{t=w;c:while(1){i=k[e>>2]|0;if(!i){y=17;break}s=k[t+-4>>2]|0;A=i;while(1){i=k[A+16>>2]|0;if(s>>>0>>0){B=k[A>>2]|0;if(!B){y=17;break c}else C=B}else{if(i>>>0>=s>>>0){D=A;break}i=k[A+4>>2]|0;if(!i){y=17;break c}else C=i}A=C}if(!D){y=17;break}k[l>>2]=t+-4;A=k[D+28>>2]|0;s=k[D+32>>2]|0;if((A|0)!=(s|0)){i=A;do{A=k[i>>2]|0;k[j>>2]=A;B=k[p>>2]|0;E=(B|0)==0;d:do if(E)y=31;else{F=B;while(1){G=k[F+16>>2]|0;if(A>>>0>>0)H=F;else{if(G>>>0>=A>>>0)break d;H=F+4|0}F=k[H>>2]|0;if(!F){y=31;break}}}while(0);e:do if((y|0)==31?(y=0,F=k[e>>2]|0,(F|0)!=0):0){G=F;while(1){F=k[G+16>>2]|0;if(A>>>0>>0)I=G;else{if(F>>>0>=A>>>0)break;I=G+4|0}G=k[I>>2]|0;if(!G)break e}do if(!E){G=B;while(1){F=k[G+16>>2]|0;if(A>>>0>>0){J=k[G>>2]|0;if(!J){K=G;L=G;y=40;break}else N=J}else{if(F>>>0>=A>>>0){O=G;y=45;break}F=G+4|0;J=k[F>>2]|0;if(!J){P=F;Q=G;y=44;break}else N=J}G=N}if((y|0)==40){y=0;k[d>>2]=L;R=K;S=L;break}else if((y|0)==44){y=0;k[d>>2]=Q;R=P;S=Q;break}else if((y|0)==45){y=0;k[d>>2]=O;R=d;S=O;break}}else{k[d>>2]=p;R=p;S=q}while(0);if(!(k[R>>2]|0)){x=0;G=Ba(563,20)|0;J=x;x=0;if(J&1){y=22;break c}k[G+16>>2]=A;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=S;k[R>>2]=G;J=k[k[h>>2]>>2]|0;if(!J)T=G;else{k[h>>2]=J;T=k[R>>2]|0}ui(k[n>>2]|0,T);k[m>>2]=(k[m>>2]|0)+1}J=k[l>>2]|0;if((J|0)==(k[o>>2]|0)){x=0;xa(724,g|0,j|0);G=x;x=0;if(G&1){y=22;break c}else break}else{k[J>>2]=A;k[l>>2]=J+4;break}}while(0);i=i+4|0}while((i|0)!=(s|0))}s=D+40|0;i=k[s>>2]|0;f:do if((i|0)!=-1){A=k[p>>2]|0;B=(A|0)==0;do if(!B){E=A;do{J=k[E+16>>2]|0;if(i>>>0>>0)U=E;else{if(J>>>0>=i>>>0)break f;U=E+4|0}E=k[U>>2]|0}while((E|0)!=0);if(!B){E=A;while(1){J=k[E+16>>2]|0;if(i>>>0>>0){G=k[E>>2]|0;if(!G){V=E;W=E;y=67;break}else X=G}else{if(J>>>0>=i>>>0){Y=E;y=72;break}J=E+4|0;G=k[J>>2]|0;if(!G){Z=J;_=E;y=71;break}else X=G}E=X}if((y|0)==67){y=0;k[c>>2]=W;$=V;aa=W;break}else if((y|0)==71){y=0;k[c>>2]=_;$=Z;aa=_;break}else if((y|0)==72){y=0;k[c>>2]=Y;$=c;aa=Y;break}}else y=73}else y=73;while(0);if((y|0)==73){y=0;k[c>>2]=p;$=p;aa=q}if(!(k[$>>2]|0)){x=0;A=Ba(563,20)|0;B=x;x=0;if(B&1){y=23;break c}k[A+16>>2]=k[s>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=aa;k[$>>2]=A;B=k[k[h>>2]>>2]|0;if(!B)ba=A;else{k[h>>2]=B;ba=k[$>>2]|0}ui(k[n>>2]|0,ba);k[m>>2]=(k[m>>2]|0)+1}B=k[l>>2]|0;if((B|0)==(k[o>>2]|0)){x=0;xa(724,g|0,s|0);A=x;x=0;if(A&1){y=23;break c}else break}else{k[B>>2]=k[s>>2];k[l>>2]=B+4;break}}while(0);t=k[l>>2]|0;if((k[g>>2]|0)==(t|0)){z=p;break b}}do if((y|0)==17){t=Rd(8)|0;x=0;xa(671,t|0,296399);s=x;x=0;if(s&1){s=Hc()|0;i=M;Fc(t|0);ca=i;da=s;break}else{k[t>>2]=47544;x=0;fb(149,t|0,9024,933);x=0;t=Hc()|0;ca=M;da=t;break}}else if((y|0)==22){t=Hc()|0;ca=M;da=t}else if((y|0)==23){t=Hc()|0;ca=M;da=t}while(0);rS(h,k[p>>2]|0);u=da;v=ca;break a}while(0);w=k[f>>2]|0;t=k[z>>2]|0;if((w|0)==(e|0))ea=t;else{s=t;t=w;while(1){g:do if(!s)y=101;else{w=k[t+16>>2]|0;i=s;while(1){B=k[i+16>>2]|0;if(w>>>0>>0)fa=i;else{if(B>>>0>=w>>>0)break;fa=i+4|0}i=k[fa>>2]|0;if(!i){y=101;break g}}i=k[t+4>>2]|0;if(i){w=i;while(1){i=k[w>>2]|0;if(!i){ga=w;ha=s;break g}else w=i}}w=t;while(1){i=k[w+8>>2]|0;if((k[i>>2]|0)==(w|0)){ga=i;ha=s;break}else w=i}}while(0);if((y|0)==101){y=0;w=k[t+4>>2]|0;if(!w){i=t;while(1){B=k[i+8>>2]|0;if((k[B>>2]|0)==(i|0)){ia=B;break}else i=B}}else{i=w;while(1){B=k[i>>2]|0;if(!B){ia=i;break}else i=B}}k[d>>2]=t;k[c>>2]=k[d>>2];tS(f,c)|0;ga=ia;ha=k[z>>2]|0}if((ga|0)==(e|0)){ea=ha;break}else{s=ha;t=ga}}}rS(h,ea);t=k[g>>2]|0;if(!t){r=b;return}s=k[l>>2]|0;if((s|0)!=(t|0))k[l>>2]=s+(~((s+-4-t|0)>>>2)<<2);OBa(t);r=b;return}while(0);b=k[g>>2]|0;if(!b)Sc(u|0);g=k[l>>2]|0;if((g|0)!=(b|0))k[l>>2]=g+(~((g+-4-b|0)>>>2)<<2);OBa(b);Sc(u|0)}function jS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;b=r;r=r+48|0;c=b+24|0;d=b+12|0;e=b;f=a+12|0;g=k[f>>2]|0;h=a+16|0;do if((g|0)!=(h|0)){i=g;a:while(1){switch(k[i+48>>2]|0){case 3:case 1:{j=i+40|0;l=k[h>>2]|0;if(!l){m=15;break a}n=k[j>>2]|0;o=l;while(1){l=k[o+16>>2]|0;if(n>>>0>>0){p=k[o>>2]|0;if(!p){m=15;break a}else q=p}else{if(l>>>0>=n>>>0){s=o;break}l=k[o+4>>2]|0;if(!l){m=15;break a}else q=l}o=q}if(!s){m=15;break a}o=(k[s+44>>2]|0)==-1;q2a(d,230550,34);x=0;pa(49,o|0,d|0,178,230314,230585);o=x;x=0;if(o&1){m=20;break a}K2a(d);o=(uS(f,j)|0)+24|0;k[o>>2]=k[i+16>>2];break}default:{}}o=k[i+4>>2]|0;if(!o){n=i;while(1){l=k[n+8>>2]|0;if((k[l>>2]|0)==(n|0)){t=l;break}else n=l}}else{n=o;while(1){j=k[n>>2]|0;if(!j){t=n;break}else n=j}}if((t|0)==(h|0)){m=3;break}else i=t}if((m|0)==3){u=k[f>>2]|0;break}else if((m|0)==15){i=Rd(8)|0;x=0;xa(671,i|0,296399);n=x;x=0;if(n&1){n=Hc()|0;Fc(i|0);Sc(n|0)}else{k[i>>2]=47544;Gf(i|0,9024,933)}}else if((m|0)==20){i=Hc()|0;n=M;K2a(d);v=i;w=n;Sc(v|0)}}else u=g;while(0);if((u|0)==(h|0)){r=b;return}g=a+4|0;d=a+16|0;t=a+20|0;a=u;b:while(1){u=k[a+16>>2]|0;s=a+48|0;c:do if((k[s>>2]|0)==0?(q=a+24|0,n=k[q>>2]|0,(n-(k[a+20>>2]|0)|0)>>>0>=2):0){i=k[g>>2]|0;o=n+-2|0;n=k[i>>2]|0;if((((k[i+4>>2]|0)-n|0)/80|0)>>>0>o>>>0)y=n;else{Kpb(i);y=k[i>>2]|0}if((k[y+(o*80|0)>>2]|0)==4){i=k[y+(o*80|0)+8>>2]|0;n=i>>>0<4294967294?(k[y+(o*80|0)+40>>2]|0)>>>0<2:0;q2a(c,230292,21);x=0;pa(49,n|0,c|0,40,230314,230350);n=x;x=0;if(n&1){m=34;break b}K2a(c);n=k[h>>2]|0;o=(n|0)==0;d:do if(!o){j=n;while(1){l=k[j+16>>2]|0;if(i>>>0>>0)z=j;else{if(l>>>0>=i>>>0){A=n;break}z=j+4|0}j=k[z>>2]|0;if(!j)break d}while(1){j=k[A+16>>2]|0;if(i>>>0>>0){l=k[A>>2]|0;if(!l){m=47;break b}else B=l}else{if(j>>>0>=i>>>0){C=A;break}j=k[A+4>>2]|0;if(!j){m=47;break b}else B=j}A=B}if(!C){m=47;break b}if((k[C+44>>2]|0)!=-1)break c}while(0);if((i|0)==-1)if(o)break;else D=n;else{if(o)break;else{E=i;F=0}e:while(1){j=n;while(1){l=k[j+16>>2]|0;if(E>>>0>>0)G=j;else{if(l>>>0>=E>>>0)break;G=j+4|0}j=k[G>>2]|0;if(!j){H=F;break e}}if(F)break c;j=(E|0)==(u|0);l=n;while(1){p=k[l+16>>2]|0;if(E>>>0

      >>0){I=k[l>>2]|0;if(!I){m=68;break b}else J=I}else{if(p>>>0>=E>>>0){K=l;break}p=k[l+4>>2]|0;if(!p){m=68;break b}else J=p}l=J}if(!K){m=68;break b}E=k[K+40>>2]|0;if((E|0)==-1){H=j;break}else F=j}if(H|o)break;else D=n}while(1){l=k[D+16>>2]|0;if(i>>>0>>0)L=D;else{if(l>>>0>=i>>>0)break;L=D+4|0}D=k[L>>2]|0;if(!D)break c}o=n;while(1){l=k[o+16>>2]|0;if(i>>>0>>0){p=k[o>>2]|0;if(!p){N=o;O=o;m=81;break}else P=p}else{if(l>>>0>=i>>>0){Q=o;m=86;break}l=o+4|0;p=k[l>>2]|0;if(!p){R=l;S=o;m=85;break}else P=p}o=P}if((m|0)==81){m=0;k[c>>2]=O;T=N;U=O;m=87}else if((m|0)==85){m=0;k[c>>2]=S;T=R;U=S;m=87}else if((m|0)==86){m=0;k[c>>2]=Q;if(!Q){T=c;U=Q;m=87}else V=Q}if((m|0)==87){m=0;o=KBa(68)|0;k[o+16>>2]=i;n=o+20|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;k[o+40>>2]=-1;k[o+44>>2]=-1;k[o+48>>2]=3;n=o+52|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=U;k[T>>2]=o;n=k[k[f>>2]>>2]|0;if(!n)W=o;else{k[f>>2]=n;W=k[T>>2]|0}ui(k[d>>2]|0,W);k[t>>2]=(k[t>>2]|0)+1;V=o}k[V+44>>2]=u;k[a+40>>2]=i;k[q>>2]=(k[q>>2]|0)+-2;o=a+32|0;n=k[o>>2]|0;if((k[a+28>>2]|0)==(n|0))X=0;else X=(k[n+-4>>2]|0)==(i|0);q2a(e,230633,42);x=0;pa(49,X|0,e|0,211,230314,230585);n=x;x=0;if(n&1){m=99;break b}K2a(e);k[o>>2]=(k[o>>2]|0)+-4;k[s>>2]=3}}while(0);s=k[a+4>>2]|0;if(!s){u=a;while(1){o=k[u+8>>2]|0;if((k[o>>2]|0)==(u|0)){Y=o;break}else u=o}}else{u=s;while(1){o=k[u>>2]|0;if(!o){Y=u;break}else u=o}}if((Y|0)==(h|0)){m=26;break}else a=Y}if((m|0)==26){r=b;return}else if((m|0)==34){b=Hc()|0;K2a(c);Sc(b|0)}else if((m|0)==47){b=Rd(8)|0;x=0;xa(671,b|0,296399);c=x;x=0;if(c&1){c=Hc()|0;Fc(b|0);Sc(c|0)}else{k[b>>2]=47544;Gf(b|0,9024,933)}}else if((m|0)==68){b=Rd(8)|0;x=0;xa(671,b|0,296399);c=x;x=0;if(c&1){c=Hc()|0;Fc(b|0);Sc(c|0)}else{k[b>>2]=47544;Gf(b|0,9024,933)}}else if((m|0)==99){m=Hc()|0;b=M;K2a(e);v=m;w=b;Sc(v|0)}}function kS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Gc=0,Ic=0;b=r;r=r+256|0;c=b+236|0;d=b+232|0;e=b+200|0;f=b+192|0;g=b+176|0;h=b+208|0;j=b+160|0;l=b+136|0;m=b+164|0;n=b+104|0;o=b+120|0;p=b+88|0;q=b+56|0;s=b+72|0;t=b+16|0;u=b+40|0;v=b;vS(f);k[h>>2]=-2;w=h+4|0;y=k[f>>2]|0;x=0;z=Ba(563,108)|0;A=x;x=0;a:do if(A&1){B=Hc()|0;C=M;D=B;E=48}else{k[z+4>>2]=0;k[z+8>>2]=0;k[z>>2]=30572;B=z+12|0;x=0;xa(668,B|0,y|0);F=x;x=0;if(F&1){F=Hc()|0;G=M;c0a(z);OBa(z);C=G;D=F;E=48;break}k[w>>2]=B;k[h+8>>2]=z;k[h+16>>2]=0;k[h+20>>2]=0;k[h+12>>2]=h+16;k[g>>2]=0;F=g+4|0;k[F>>2]=0;k[g+8>>2]=0;x=0;G=Ba(563,24)|0;H=x;x=0;b:do if(H&1){I=Hc()|0;J=M;K=I}else{k[F>>2]=G;k[g>>2]=G;I=g+8|0;k[I>>2]=G+24;k[G>>2]=k[h>>2];k[G+4>>2]=B;L=G+8|0;k[L>>2]=z;h0a(z);N=k[h+12>>2]|0;O=G+12|0;P=G+16|0;k[P>>2]=0;Q=G+20|0;k[Q>>2]=0;R=G+16|0;k[O>>2]=R;S=h+16|0;c:do if((N|0)!=(S|0)){T=R;U=N;V=N;while(1){W=U+16|0;k[e>>2]=T;k[c>>2]=k[e>>2];X=qS(O,c,d,W)|0;if(!(k[X>>2]|0)){x=0;Y=Ba(563,20)|0;Z=x;x=0;if(Z&1)break;k[Y+16>>2]=k[W>>2];W=k[d>>2]|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=W;k[X>>2]=Y;W=k[k[O>>2]>>2]|0;if(!W)_=Y;else{k[O>>2]=W;_=k[X>>2]|0}ui(k[P>>2]|0,_);k[Q>>2]=(k[Q>>2]|0)+1}X=k[V+4>>2]|0;if(!X){W=V;while(1){Y=k[W+8>>2]|0;if((k[Y>>2]|0)==(W|0)){$=Y;break}else W=Y}}else{W=X;while(1){Y=k[W>>2]|0;if(!Y){$=W;break}else W=Y}}if(($|0)==(S|0))break c;else{U=$;V=$}}V=Hc()|0;U=M;rS(O,k[R>>2]|0);T=k[L>>2]|0;if(!T){J=U;K=V;break b}j0a(T);J=U;K=V;break b}while(0);k[F>>2]=(k[F>>2]|0)+24;rS(h+12|0,k[h+16>>2]|0);L=k[h+8>>2]|0;if(L)j0a(L);k[j>>2]=g;L=k[g>>2]|0;R=k[F>>2]|0;d:do if((L|0)==(R|0)){aa=a+16|0;ba=L}else{O=l+4|0;S=l+8|0;Q=l+12|0;P=l+16|0;N=l+20|0;V=l+16|0;U=a+16|0;T=l+12|0;W=q+4|0;X=q+8|0;Y=q+12|0;Z=a+4|0;ca=p+8|0;da=a+12|0;ea=t+4|0;fa=t+8|0;ga=t+12|0;ha=t+16|0;ia=t+20|0;ja=t+16|0;ka=t+16|0;la=t+12|0;ma=p+4|0;na=a+8|0;oa=0;qa=R;e:while(1){k[l>>2]=k[qa+-24>>2];ra=qa+-20|0;k[O>>2]=k[ra>>2];sa=qa+-16|0;k[S>>2]=k[sa>>2];k[ra>>2]=0;k[sa>>2]=0;sa=qa+-12|0;k[Q>>2]=k[sa>>2];ra=k[qa+-8>>2]|0;k[P>>2]=ra;ta=qa+-4|0;ua=k[ta>>2]|0;k[N>>2]=ua;if(!ua){k[Q>>2]=V;wa=qa}else{k[ra+8>>2]=V;ra=qa+-8|0;k[sa>>2]=ra;k[ra>>2]=0;k[ta>>2]=0;wa=k[F>>2]|0}ta=wa+-24|0;ra=wa;do{k[F>>2]=ra+-24;rS(ra+-12|0,k[ra+-8>>2]|0);sa=k[ra+-16>>2]|0;if(sa)j0a(sa);ra=k[F>>2]|0}while((ra|0)!=(ta|0));ta=k[l>>2]|0;x=0;fb(140,m|0,329672,0);ra=x;x=0;if(ra&1){E=52;break}x=0;pa(49,(ta|0)!=-1|0,m|0,246,230314,230676);ta=x;x=0;if(ta&1){E=54;break}K2a(m);ta=k[U>>2]|0;f:do if(ta){ra=k[l>>2]|0;sa=ta;while(1){ua=k[sa+16>>2]|0;if(ra>>>0>>0)ya=sa;else{if(ua>>>0>=ra>>>0){za=ta;break}ya=sa+4|0}sa=k[ya>>2]|0;if(!sa){Aa=oa;break f}}while(1){sa=k[za+16>>2]|0;if(ra>>>0>>0){ua=k[za>>2]|0;if(!ua){E=61;break e}else Ca=ua}else{if(sa>>>0>=ra>>>0){Da=za;break}sa=k[za+4>>2]|0;if(!sa){E=61;break e}else Ca=sa}za=Ca}if(!Da){E=61;break e}ra=k[O>>2]|0;sa=k[S>>2]|0;ua=(sa|0)==0;if(!ua)h0a(sa);Ea=Da+52|0;Ga=k[Ea>>2]|0;if(Ga){Ha=ra;if(!(i[na>>0]|0)){Ia=Ha+20|0;Ja=Ha+24|0;Ay(Ia,k[Ja>>2]|0);k[Ha+28>>2]=0;k[Ia>>2]=Ja;k[Ja>>2]=0;Ja=Ha+32|0;Ia=Ha+36|0;Ay(Ja,k[Ia>>2]|0);k[Ha+40>>2]=0;k[Ja>>2]=Ia;k[Ia>>2]=0;Ia=Ha+4|0;Ja=Ha+8|0;ny(Ia,k[Ja>>2]|0);k[Ha+12>>2]=0;k[Ia>>2]=Ja;k[Ja>>2]=0;k[Ha>>2]=0;Ka=k[Ea>>2]|0}else Ka=Ga;Ga=k[V>>2]|0;g:do if(!Ga)La=1;else{Ja=k[l>>2]|0;Ia=Ga;while(1){Ma=k[Ia+16>>2]|0;if(Ja>>>0>>0)Na=Ia;else{if(Ma>>>0>=Ja>>>0){La=0;break g}Na=Ia+4|0}Ia=k[Na>>2]|0;if(!Ia){La=1;break}}}while(0);x=0;fb(234,Ha|0,Ka|0,La|0);Ga=x;x=0;if(Ga&1){Oa=sa;Pa=ua;E=71;break e}x=0;Ga=Ta(559,Ha|0,k[Ea>>2]|0)|0;Ia=x;x=0;if(Ia&1){Oa=sa;Pa=ua;E=71;break e}if(Ga)Qa=oa;else{Ra=Ha;E=83}}else{Ra=ra;E=83}h:do if((E|0)==83){E=0;x=0;Ga=Ba(563,108)|0;Ia=x;x=0;if(Ia&1){Oa=sa;Pa=ua;E=71;break e}k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga>>2]=30572;Ia=Ga+12|0;x=0;xa(668,Ia|0,Ra|0);Ja=x;x=0;if(Ja&1){Sa=sa;Ua=ua;Va=Ga;E=85;break e}k[Ea>>2]=Ia;Ia=Da+56|0;Ja=k[Ia>>2]|0;k[Ia>>2]=Ga;if(Ja)j0a(Ja);Ja=Da+20|0;Ga=k[Ja>>2]|0;Ia=Da+24|0;i:do if(Ga>>>0<(k[Ia>>2]|0)>>>0){Ma=Ga;while(1){Wa=k[Z>>2]|0;Xa=k[Wa>>2]|0;if((((k[Wa+4>>2]|0)-Xa|0)/80|0)>>>0>Ma>>>0)Ya=Xa;else{x=0;va(1484,Wa|0);Xa=x;x=0;if(Xa&1){Za=sa;_a=ua;E=70;break e}Ya=k[Wa>>2]|0}x=0;Wa=Ba(591,Ya+(Ma*80|0)|0)|0;Xa=x;x=0;if(Xa&1){Za=sa;_a=ua;E=70;break e}if(Wa){$a=Ma;break i}Wa=k[Z>>2]|0;Xa=Ma+1|0;ab=k[Wa>>2]|0;if((((k[Wa+4>>2]|0)-ab|0)/80|0)>>>0>Ma>>>0)bb=ab;else{x=0;va(1484,Wa|0);ab=x;x=0;if(ab&1){Za=sa;_a=ua;E=70;break e}bb=k[Wa>>2]|0}x=0;nb(93,n|0,Ra|0,bb+(Ma*80|0)|0,0);Wa=x;x=0;if(Wa&1){Za=sa;_a=ua;E=70;break e}if(Xa>>>0<(k[Ia>>2]|0)>>>0)Ma=Xa;else{$a=Xa;break}}}else $a=Ga;while(0);Ga=Da+48|0;Ma=k[Ja>>2]|0;do if((k[Ga>>2]|0)>>>0<2){if(Ma>>>0>$a>>>0)cb=0;else cb=($a|0)==((k[Ia>>2]|0)+-1|0);x=0;fb(140,o|0,329672,0);Xa=x;x=0;if(Xa&1){Oa=sa;Pa=ua;E=71;break e}x=0;pa(49,cb|0,o|0,274,230314,230676);Xa=x;x=0;if(Xa&1){db=sa;eb=ua;E=118;break e}K2a(o);Xa=k[Ra>>2]|0;k[q>>2]=-1;k[W>>2]=-1;k[X>>2]=0;k[Y>>2]=0;x=0;Wa=Fa(114,Ra|0,Xa|0,q|0)|0;Xa=x;x=0;if(Xa&1){gb=sa;hb=ua;E=119;break e}x=0;fb(230,p|0,Ra|0,Wa|0);Wa=x;x=0;if(Wa&1){gb=sa;hb=ua;E=119;break e}Wa=k[Y>>2]|0;if(Wa)j0a(Wa);Wa=k[Z>>2]|0;Xa=$a+1|0;ab=k[Wa>>2]|0;if((((k[Wa+4>>2]|0)-ab|0)/80|0)>>>0>$a>>>0)ib=ab;else{x=0;va(1484,Wa|0);ab=x;x=0;if(ab&1){jb=sa;kb=ua;E=123;break e}ib=k[Wa>>2]|0}x=0;nb(93,s|0,Ra|0,ib+($a*80|0)|0,0);Wa=x;x=0;if(Wa&1){jb=sa;kb=ua;E=123;break e}do if(!(k[ca>>2]|0)){if(oa){lb=1;break}Wa=k[da>>2]|0;if((Wa|0)==(U|0)){lb=1;break}else mb=Wa;while(1){Wa=k[mb+20>>2]|0;do if(Wa>>>0<(k[mb+24>>2]|0)>>>0){if((k[(k[k[Z>>2]>>2]|0)+(Wa*80|0)>>2]|0)!=8)break;k[t>>2]=k[mb+16>>2];ab=k[f>>2]|0;x=0;ob=Ba(563,108)|0;pb=x;x=0;if(pb&1){qb=sa;rb=ua;E=121;break e}k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob>>2]=30572;pb=ob+12|0;x=0;xa(668,pb|0,ab|0);ab=x;x=0;if(ab&1){sb=ob;tb=sa;ub=ua;E=129;break e}k[ea>>2]=pb;k[fa>>2]=ob;k[ha>>2]=0;k[ia>>2]=0;k[ga>>2]=ja;ob=k[F>>2]|0;pb=k[I>>2]|0;do if(ob>>>0>>0){k[ob>>2]=k[t>>2];k[ob+4>>2]=k[ea>>2];k[ob+8>>2]=k[fa>>2];k[ea>>2]=0;k[fa>>2]=0;ab=ob+12|0;k[ab>>2]=k[ga>>2];vb=k[ka>>2]|0;k[ob+16>>2]=vb;wb=k[ia>>2]|0;k[ob+20>>2]=wb;xb=ob+16|0;if(!wb)k[ab>>2]=xb;else{k[vb+8>>2]=xb;k[ga>>2]=ja;k[ja>>2]=0;k[ia>>2]=0}k[F>>2]=(k[F>>2]|0)+24}else{xb=pb;vb=k[g>>2]|0;ab=((ob-vb|0)/24|0)+1|0;if(ab>>>0>178956970){x=0;va(1473,g|0);wb=x;x=0;if(wb&1){yb=sa;zb=ua;E=161;break e}Ab=k[g>>2]|0;Bb=k[I>>2]|0}else{Ab=vb;Bb=xb}xb=(Bb-Ab|0)/24|0;if(xb>>>0<89478485){vb=xb<<1;xb=vb>>>0>>0?ab:vb;vb=k[F>>2]|0;ab=(vb-Ab|0)/24|0;wb=vb;if(!xb){Cb=0;Db=wb;Eb=0;Fb=ab}else{Gb=xb;Hb=wb;Ib=ab;E=141}}else{ab=k[F>>2]|0;Gb=178956970;Hb=ab;Ib=(ab-Ab|0)/24|0;E=141}if((E|0)==141){E=0;x=0;ab=Ba(563,Gb*24|0)|0;wb=x;x=0;if(wb&1){yb=sa;zb=ua;E=161;break e}Cb=Gb;Db=Hb;Eb=ab;Fb=Ib}ab=Eb+(Fb*24|0)|0;wb=ab;xb=Eb+(Cb*24|0)|0;k[ab>>2]=k[t>>2];k[Eb+(Fb*24|0)+4>>2]=k[ea>>2];k[Eb+(Fb*24|0)+8>>2]=k[fa>>2];k[ea>>2]=0;k[fa>>2]=0;vb=Eb+(Fb*24|0)+12|0;k[vb>>2]=k[ga>>2];Jb=k[ka>>2]|0;k[Eb+(Fb*24|0)+16>>2]=Jb;Kb=k[ia>>2]|0;k[Eb+(Fb*24|0)+20>>2]=Kb;Lb=Eb+(Fb*24|0)+16|0;if(!Kb)k[vb>>2]=Lb;else{k[Jb+8>>2]=Lb;k[ga>>2]=ja;k[ja>>2]=0;k[ia>>2]=0}Lb=Ab;Jb=ab+24|0;if((Db|0)==(Lb|0)){Mb=wb;Nb=Db}else{vb=Db;Kb=ab;ab=wb;while(1){wb=vb;vb=vb+-24|0;k[Kb+-24>>2]=k[vb>>2];Ob=wb+-20|0;k[Kb+-20>>2]=k[Ob>>2];Pb=wb+-16|0;k[Kb+-16>>2]=k[Pb>>2];k[Ob>>2]=0;k[Pb>>2]=0;Pb=Kb+-12|0;Ob=wb+-12|0;k[Pb>>2]=k[Ob>>2];Qb=k[wb+-8>>2]|0;k[Kb+-8>>2]=Qb;Rb=wb+-4|0;Sb=k[Rb>>2]|0;k[Kb+-4>>2]=Sb;Tb=Kb+-8|0;if(!Sb)k[Pb>>2]=Tb;else{k[Qb+8>>2]=Tb;Tb=wb+-8|0;k[Ob>>2]=Tb;k[Tb>>2]=0;k[Rb>>2]=0}Kb=ab+-24|0;Rb=Kb;if((vb|0)==(Lb|0)){Ub=Rb;break}else ab=Rb}Mb=Ub;Nb=k[g>>2]|0}k[g>>2]=Mb;ab=k[F>>2]|0;k[F>>2]=Jb;k[I>>2]=xb;Lb=Nb;if((ab|0)!=(Lb|0)){vb=ab;do{rS(vb+-12|0,k[vb+-8>>2]|0);ab=k[vb+-16>>2]|0;vb=vb+-24|0;if(ab)j0a(ab)}while((vb|0)!=(Lb|0))}if(!Nb)break;OBa(Nb)}while(0);rS(la,k[ja>>2]|0);ob=k[fa>>2]|0;if(!ob)break;j0a(ob)}while(0);Wa=k[mb+4>>2]|0;if(!Wa){ob=mb;while(1){pb=k[ob+8>>2]|0;if((k[pb>>2]|0)==(ob|0)){Vb=pb;break}else ob=pb}}else{ob=Wa;while(1){pb=k[ob>>2]|0;if(!pb){Vb=ob;break}else ob=pb}}if((Vb|0)==(U|0)){lb=1;break}else mb=Vb}}else{ob=k[p>>2]|0;if((ob|0)==(ma|0)){lb=oa;break}else Wb=ob;while(1){ob=k[Wb+16>>2]|0;Wa=k[Wb+48>>2]|0;x=0;fb(140,c|0,230292,21);pb=x;x=0;if(pb&1){Xb=sa;Yb=ua;E=122;break e}x=0;pa(49,ob>>>0<4294967294&Wa>>>0<2|0,c|0,40,230314,230350);Wa=x;x=0;if(Wa&1){Zb=sa;_b=ua;E=171;break e}K2a(c);x=0;nb(113,j|0,l|0,ob|0,Ra|0);ob=x;x=0;if(ob&1){Xb=sa;Yb=ua;E=122;break e}ob=k[Wb+4>>2]|0;if(!ob){Wa=Wb;while(1){pb=k[Wa+8>>2]|0;if((k[pb>>2]|0)==(Wa|0)){$b=pb;break}else Wa=pb}}else{Wa=ob;while(1){pb=k[Wa>>2]|0;if(!pb){$b=Wa;break}else Wa=pb}}if(($b|0)==(ma|0)){lb=oa;break}else Wb=$b}}while(0);DA(p,k[ma>>2]|0);ac=Xa;bc=lb}else{if(!(Ma>>>0<=$a>>>0?$a>>>0<(k[Ia>>2]|0)>>>0:0)){ac=$a;bc=oa;break}Wa=k[Z>>2]|0;ob=$a+1|0;pb=k[Wa>>2]|0;if((((k[Wa+4>>2]|0)-pb|0)/80|0)>>>0>$a>>>0)cc=pb;else{x=0;va(1484,Wa|0);pb=x;x=0;if(pb&1){Oa=sa;Pa=ua;E=71;break e}cc=k[Wa>>2]|0}x=0;nb(93,u|0,Ra|0,cc+($a*80|0)|0,0);Wa=x;x=0;if(Wa&1){Oa=sa;Pa=ua;E=71;break e}ac=ob;bc=oa}while(0);Ma=k[Ia>>2]|0;ob=k[Ja>>2]|0;x=0;fb(140,v|0,329672,0);Wa=x;x=0;if(Wa&1){Oa=sa;Pa=ua;E=71;break e}x=0;pa(49,(ac|0)==(Ma|0)|Ma>>>0<=ob>>>0|0,v|0,300,230314,230676);ob=x;x=0;if(ob&1){dc=sa;ec=ua;E=195;break e}K2a(v);if(!ua)h0a(sa);k[Da+60>>2]=ra;ob=Da+64|0;Ma=k[ob>>2]|0;k[ob>>2]=sa;if(Ma)j0a(Ma);switch(k[Ga>>2]|0){case 1:case 3:break;default:{Qa=bc;break h}}x=0;nb(113,j|0,l|0,k[Da+40>>2]|0,Ra|0);Ma=x;x=0;if(Ma&1){Oa=sa;Pa=ua;E=71;break e}else Qa=bc}while(0);if(ua)Aa=Qa;else{j0a(sa);Aa=Qa}}else Aa=oa;while(0);rS(T,k[V>>2]|0);ta=k[S>>2]|0;if(ta)j0a(ta);ta=k[g>>2]|0;qa=k[F>>2]|0;if((ta|0)==(qa|0)){aa=U;ba=ta;break d}else oa=Aa}switch(E|0){case 52:{oa=Hc()|0;fc=M;gc=oa;E=53;break}case 54:{oa=Hc()|0;U=M;K2a(m);hc=oa;ic=U;break}case 61:{U=Rd(8)|0;x=0;xa(671,U|0,296399);oa=x;x=0;if(oa&1){oa=Hc()|0;qa=M;Fc(U|0);fc=qa;gc=oa;E=53;break}else{k[U>>2]=47544;x=0;fb(149,U|0,9024,933);x=0;U=Hc()|0;fc=M;gc=U;E=53;break}break}case 70:{U=Hc()|0;jc=_a;kc=Za;lc=M;mc=U;E=72;break}case 71:{U=Hc()|0;jc=Pa;kc=Oa;lc=M;mc=U;E=72;break}case 85:{U=Hc()|0;oa=M;c0a(Va);OBa(Va);jc=Ua;kc=Sa;lc=oa;mc=U;E=72;break}case 118:{U=Hc()|0;oa=M;K2a(o);nc=U;oc=oa;pc=db;qc=eb;E=201;break}case 119:{oa=Hc()|0;U=M;qa=k[Y>>2]|0;if(!qa){nc=oa;oc=U;pc=gb;qc=hb;E=201}else{j0a(qa);nc=oa;oc=U;pc=gb;qc=hb;E=201}break}case 121:{U=Hc()|0;rc=rb;sc=qb;tc=M;uc=U;E=124;break}case 122:{U=Hc()|0;rc=Yb;sc=Xb;tc=M;uc=U;E=124;break}case 123:{U=Hc()|0;rc=kb;sc=jb;tc=M;uc=U;E=124;break}case 129:{U=Hc()|0;oa=M;c0a(sb);OBa(sb);rc=ub;sc=tb;tc=oa;uc=U;E=124;break}case 161:{U=Hc()|0;oa=M;rS(la,k[ja>>2]|0);qa=k[fa>>2]|0;if(!qa){vc=U;wc=oa;xc=zb;yc=yb;E=179}else{j0a(qa);vc=U;wc=oa;xc=zb;yc=yb;E=179}break}case 171:{oa=Hc()|0;U=M;K2a(c);rc=_b;sc=Zb;tc=U;uc=oa;E=124;break}case 195:{oa=Hc()|0;U=M;K2a(v);nc=oa;oc=U;pc=dc;qc=ec;E=201;break}}if((E|0)==53){hc=gc;ic=fc}else if((E|0)==72){nc=mc;oc=lc;pc=kc;qc=jc;E=201}else if((E|0)==124){vc=uc;wc=tc;xc=rc;yc=sc;E=179}if((E|0)==179){DA(p,k[ma>>2]|0);nc=vc;oc=wc;pc=yc;qc=xc;E=201}if((E|0)==201)if(qc){hc=nc;ic=oc}else{j0a(pc);hc=nc;ic=oc}rS(T,k[V>>2]|0);U=k[S>>2]|0;if(U)j0a(U);U=k[g>>2]|0;if(!U){zc=hc;Ac=ic;break a}oa=k[F>>2]|0;if((oa|0)==(U|0))Bc=U;else{qa=oa;do{k[F>>2]=qa+-24;rS(qa+-12|0,k[qa+-8>>2]|0);oa=k[qa+-16>>2]|0;if(oa)j0a(oa);qa=k[F>>2]|0}while((qa|0)!=(U|0));Bc=k[g>>2]|0}OBa(Bc);zc=hc;Ac=ic;break a}while(0);I=a+12|0;R=k[I>>2]|0;L=R;if((L|0)==(aa|0))Cc=ba;else{U=L;L=R;while(1){if(!(k[U+52>>2]|0)){k[d>>2]=L;k[c>>2]=k[d>>2];Dc=tS(I,c)|0}else{R=k[U+4>>2]|0;if(!R){qa=L;while(1){S=k[qa+8>>2]|0;if((k[S>>2]|0)==(qa|0)){Ec=S;break}else qa=S}}else{qa=R;while(1){S=k[qa>>2]|0;if(!S){Ec=qa;break}else qa=S}}Dc=Ec}U=Dc;if((U|0)==(aa|0))break;else L=Dc}Cc=k[g>>2]|0}if(Cc){L=k[F>>2]|0;if((L|0)==(Cc|0))Gc=Cc;else{U=L;do{k[F>>2]=U+-24;rS(U+-12|0,k[U+-8>>2]|0);L=k[U+-16>>2]|0;if(L)j0a(L);U=k[F>>2]|0}while((U|0)!=(Cc|0));Gc=k[g>>2]|0}OBa(Gc)}U=k[f+4>>2]|0;if(!U){r=b;return}j0a(U);r=b;return}while(0);G=k[g>>2]|0;if(G){B=k[F>>2]|0;if((B|0)==(G|0))Ic=G;else{H=B;do{k[F>>2]=H+-24;rS(H+-12|0,k[H+-8>>2]|0);B=k[H+-16>>2]|0;if(B)j0a(B);H=k[F>>2]|0}while((H|0)!=(G|0));Ic=k[g>>2]|0}OBa(Ic)}rS(h+12|0,k[h+16>>2]|0);G=k[h+8>>2]|0;if(G)j0a(G);zc=K;Ac=J}while(0);if((E|0)==48){zc=D;Ac=C}C=k[f+4>>2]|0;if(!C)Sc(zc|0);j0a(C);Sc(zc|0)}function lS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0;c=r;r=r+112|0;d=c+100|0;e=c+96|0;f=c+92|0;g=c+88|0;h=c+76|0;i=c+64|0;j=c+12|0;l=c;m=h+4|0;k[m>>2]=0;n=h+8|0;k[n>>2]=0;o=h+4|0;k[h>>2]=o;p=b+12|0;q=k[p>>2]|0;s=b+16|0;do if((q|0)==(s|0))t=q;else{u=o;v=q;a:while(1){w=k[v+28>>2]|0;y=k[v+32>>2]|0;if((w|0)!=(y|0)){z=w;do{w=k[z>>2]|0;A=k[s>>2]|0;b:do if(A){B=A;while(1){C=k[B+16>>2]|0;if(w>>>0>>0)D=B;else{if(C>>>0>=w>>>0)break;D=B+4|0}B=k[D>>2]|0;if(!B)break b}B=k[o>>2]|0;do if(B){C=B;while(1){E=k[C+16>>2]|0;if(w>>>0>>0){F=k[C>>2]|0;if(!F){G=C;H=C;I=23;break}else J=F}else{if(E>>>0>=w>>>0){K=C;I=29;break}E=C+4|0;F=k[E>>2]|0;if(!F){L=E;N=C;I=27;break}else J=F}C=J}if((I|0)==23){I=0;k[e>>2]=H;O=G;P=H;I=30;break}else if((I|0)==27){I=0;k[e>>2]=N;O=L;P=N;I=30;break}else if((I|0)==29){I=0;k[e>>2]=K;if(!K){O=e;P=K;I=30;break}else{Q=K;break}}}else{k[e>>2]=o;O=o;P=u;I=30}while(0);if((I|0)==30){I=0;x=0;C=Ba(563,24)|0;F=x;x=0;if(F&1){R=B;break a}k[C+16>>2]=w;k[C+20>>2]=0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=P;k[O>>2]=C;F=k[k[h>>2]>>2]|0;if(!F)S=C;else{k[h>>2]=F;S=k[O>>2]|0}ui(k[m>>2]|0,S);k[n>>2]=(k[n>>2]|0)+1;Q=C}C=Q+20|0;k[C>>2]=(k[C>>2]|0)+1}while(0);z=z+4|0}while((z|0)!=(y|0))}y=k[v+4>>2]|0;if(!y){z=v;while(1){w=k[z+8>>2]|0;if((k[w>>2]|0)==(z|0)){T=w;break}else z=w}}else{z=y;while(1){w=k[z>>2]|0;if(!w){T=z;break}else z=w}}if((T|0)==(s|0)){I=3;break}else v=T}if((I|0)==3){t=k[p>>2]|0;break}v=Hc()|0;U=v;V=M;W=R;yS(h,W);Sc(U|0)}while(0);R=i+4|0;k[R>>2]=0;p=i+8|0;k[p>>2]=0;T=i+4|0;k[i>>2]=T;c:do if((t|0)!=(s|0)){Q=j+4|0;S=j+12|0;O=j+24|0;P=j+36|0;e=j+40|0;K=j+44|0;N=j+48|0;L=T;H=j+12|0;G=j+16|0;J=t;while(1){k[j>>2]=k[J+16>>2];D=J+20|0;q=k[D+4>>2]|0;v=Q;k[v>>2]=k[D>>2];k[v+4>>2]=q;x=0;xa(725,S|0,J+28|0);q=x;x=0;if(q&1){I=36;break}q=J+40|0;k[O>>2]=k[q>>2];k[O+4>>2]=k[q+4>>2];k[O+8>>2]=k[q+8>>2];k[P>>2]=k[J+52>>2];q=k[J+56>>2]|0;k[e>>2]=q;if(q)h0a(q);k[K>>2]=k[J+60>>2];q=k[J+64>>2]|0;k[N>>2]=q;if(q)h0a(q);q=k[T>>2]|0;do if(q){v=k[j>>2]|0;D=q;while(1){u=k[D+16>>2]|0;if(v>>>0>>0){z=k[D>>2]|0;if(!z){X=D;Y=D;I=46;break}else Z=z}else{if(u>>>0>=v>>>0){_=D;I=51;break}u=D+4|0;z=k[u>>2]|0;if(!z){$=u;aa=D;I=50;break}else Z=z}D=Z}if((I|0)==46){I=0;k[d>>2]=Y;ba=X;ca=Y;break}else if((I|0)==50){I=0;k[d>>2]=aa;ba=$;ca=aa;break}else if((I|0)==51){I=0;k[d>>2]=_;ba=d;ca=_;break}}else{k[d>>2]=T;ba=T;ca=L}while(0);if(!(k[ba>>2]|0)){x=0;q=Ba(563,20)|0;D=x;x=0;if(D&1)break;k[q+16>>2]=k[j>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=ca;k[ba>>2]=q;D=k[k[i>>2]>>2]|0;if(!D)da=q;else{k[i>>2]=D;da=k[ba>>2]|0}ui(k[R>>2]|0,da);k[p>>2]=(k[p>>2]|0)+1}D=k[N>>2]|0;if(D)j0a(D);D=k[e>>2]|0;if(D)j0a(D);D=k[H>>2]|0;q=D;if(D){v=k[G>>2]|0;if((v|0)!=(D|0))k[G>>2]=v+(~((v+-4-q|0)>>>2)<<2);OBa(D)}D=k[J+4>>2]|0;if(!D){q=J;while(1){v=k[q+8>>2]|0;if((k[v>>2]|0)==(q|0)){ea=v;break}else q=v}}else{q=D;while(1){v=k[q>>2]|0;if(!v){ea=q;break}else q=v}}if((ea|0)==(s|0)){fa=T;ga=i;I=79;break c}else J=ea}if((I|0)==36){J=Hc()|0;ha=J;ia=M;ja=T;break}J=Hc()|0;L=M;K=k[N>>2]|0;if(K)j0a(K);K=k[e>>2]|0;if(K)j0a(K);K=k[H>>2]|0;P=K;if(!K){ha=J;ia=L;ja=T}else{O=k[G>>2]|0;if((O|0)!=(K|0))k[G>>2]=O+(~((O+-4-P|0)>>>2)<<2);OBa(K);ha=J;ia=L;ja=T}}else{fa=T;ga=i;I=79}while(0);if((I|0)==79){ea=l+4|0;k[ea>>2]=0;da=l+8|0;k[da>>2]=0;R=l+4|0;k[l>>2]=R;k[a>>2]=0;ba=a+4|0;k[ba>>2]=0;k[a+8>>2]=0;ca=R;j=o;d=b+4|0;b=a+8|0;_=k[s>>2]|0;aa=-2;$=_;Y=_;d:while(1){_=(aa|0)==-2;if(!$){I=92;break}else ka=aa;while(1){X=$;while(1){Z=k[X+16>>2]|0;if(ka>>>0>>0){t=k[X>>2]|0;if(!t){I=92;break d}else la=t}else{if(Z>>>0>=ka>>>0){ma=X;break}Z=k[X+4>>2]|0;if(!Z){I=92;break d}else la=Z}X=la}if(!ma){I=92;break d}if((k[ma+44>>2]|0)==-1){na=ka;break}else oa=$;while(1){X=k[oa+16>>2]|0;if(ka>>>0>>0){Z=k[oa>>2]|0;if(!Z){I=103;break d}else pa=Z}else{if(X>>>0>=ka>>>0){qa=oa;break}X=k[oa+4>>2]|0;if(!X){I=103;break d}else pa=X}oa=pa}if(!qa){I=103;break d}ka=k[qa+44>>2]|0}if((na|0)==-1){ra=Y;sa=$}else{G=Y;H=na;e=_;while(1){if(!G){I=114;break d}else ta=G;while(1){N=k[ta+16>>2]|0;if(H>>>0>>0){X=k[ta>>2]|0;if(!X){I=114;break d}else ua=X}else{if(N>>>0>=H>>>0){wa=ta;break}N=k[ta+4>>2]|0;if(!N){I=114;break d}else ua=N}ta=ua}if(!wa){I=114;break d}N=wa+20|0;X=k[fa>>2]|0;if(X){Z=T;t=X;e:while(1){L=t;while(1){if((k[L+16>>2]|0)>>>0>=H>>>0){ya=L;break}L=k[L+4>>2]|0;if(!L){za=Z;break e}}t=k[ya>>2]|0;if(!t){za=ya;break}else Z=ya}if((za|0)!=(T|0)?H>>>0>=(k[za+16>>2]|0)>>>0:0){Z=k[za+4>>2]|0;if(!Z){t=za;while(1){L=k[t+8>>2]|0;if((k[L>>2]|0)==(t|0)){Aa=L;break}else t=L}}else{t=Z;while(1){L=k[t>>2]|0;if(!L){Aa=t;break}else t=L}}if((k[i>>2]|0)==(za|0))k[ga>>2]=Aa;k[p>>2]=(k[p>>2]|0)+-1;hk(X,za);OBa(za)}}t=k[R>>2]|0;do if(t){Z=t;while(1){L=k[Z+16>>2]|0;if(H>>>0>>0){J=k[Z>>2]|0;if(!J){Ca=Z;Da=Z;I=134;break}else Ea=J}else{if(L>>>0>=H>>>0){Fa=Z;I=139;break}L=Z+4|0;J=k[L>>2]|0;if(!J){Ga=L;Ha=Z;I=138;break}else Ea=J}Z=Ea}if((I|0)==134){I=0;k[f>>2]=Da;Ia=Ca;Ja=Da;break}else if((I|0)==138){I=0;k[f>>2]=Ha;Ia=Ga;Ja=Ha;break}else if((I|0)==139){I=0;k[f>>2]=Fa;Ia=f;Ja=Fa;break}}else{k[f>>2]=R;Ia=R;Ja=ca}while(0);if(!(k[Ia>>2]|0)){x=0;t=Ba(563,20)|0;X=x;x=0;if(X&1){I=81;break d}k[t+16>>2]=H;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=Ja;k[Ia>>2]=t;X=k[k[l>>2]>>2]|0;if(!X)Ka=t;else{k[l>>2]=X;Ka=k[Ia>>2]|0}ui(k[ea>>2]|0,Ka);k[da>>2]=(k[da>>2]|0)+1}X=k[N>>2]|0;t=wa+24|0;if((X|0)==(k[t>>2]|0))La=e;else{do if(e){Z=k[o>>2]|0;do if(Z){J=Z;while(1){L=k[J+16>>2]|0;if(H>>>0>>0){K=k[J>>2]|0;if(!K){Ma=J;Na=J;I=151;break}else Oa=K}else{if(L>>>0>=H>>>0){Pa=J;I=157;break}L=J+4|0;K=k[L>>2]|0;if(!K){Qa=L;Ra=J;I=155;break}else Oa=K}J=Oa}if((I|0)==151){I=0;k[g>>2]=Na;Sa=Ma;Ta=Na;I=158;break}else if((I|0)==155){I=0;k[g>>2]=Ra;Sa=Qa;Ta=Ra;I=158;break}else if((I|0)==157){I=0;k[g>>2]=Pa;if(!Pa){Sa=g;Ta=Pa;I=158;break}else{Ua=Pa;break}}}else{k[g>>2]=o;Sa=o;Ta=j;I=158}while(0);if((I|0)==158){I=0;x=0;Z=Ba(563,24)|0;J=x;x=0;if(J&1){I=81;break d}k[Z+16>>2]=H;k[Z+20>>2]=0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=Ta;k[Sa>>2]=Z;J=k[k[h>>2]>>2]|0;if(!J)Va=Z;else{k[h>>2]=J;Va=k[Sa>>2]|0}ui(k[m>>2]|0,Va);k[n>>2]=(k[n>>2]|0)+1;Ua=Z}if(k[Ua+20>>2]|0){Wa=k[N>>2]|0;break}Z=k[N>>2]|0;if((k[(k[k[d>>2]>>2]|0)+(Z*80|0)>>2]|0)==8){J=Z+1|0;k[N>>2]=J;Wa=J}else Wa=Z}else Wa=X;while(0);if(Wa>>>0<(k[t>>2]|0)>>>0){X=k[ba>>2]|0;if((X|0)==(k[b>>2]|0)){x=0;xa(726,a|0,N|0);Z=x;x=0;if(Z&1){I=81;break d}Xa=k[ba>>2]|0}else{Z=N;J=k[Z+4>>2]|0;B=X;k[B>>2]=k[Z>>2];k[B+4>>2]=J;x=0;xa(725,X+8|0,wa+28|0);J=x;x=0;if(J&1){I=81;break d}J=X+20|0;B=wa+40|0;k[J>>2]=k[B>>2];k[J+4>>2]=k[B+4>>2];k[J+8>>2]=k[B+8>>2];k[X+32>>2]=k[wa+52>>2];B=k[wa+56>>2]|0;k[X+36>>2]=B;if(B)h0a(B);k[X+40>>2]=k[wa+60>>2];B=k[wa+64>>2]|0;k[X+44>>2]=B;if(B)h0a(B);B=(k[ba>>2]|0)+48|0;k[ba>>2]=B;Xa=B}x=0;va(1496,k[Xa+-16>>2]|0);B=x;x=0;if(B&1){I=81;break d}x=0;va(1496,k[(k[ba>>2]|0)+-8>>2]|0);B=x;x=0;if(B&1){I=81;break d}}La=(k[wa+48>>2]|0)==3}B=k[s>>2]|0;if(!B){I=186;break d}else Ya=B;while(1){X=k[Ya+16>>2]|0;if(H>>>0>>0){J=k[Ya>>2]|0;if(!J){I=186;break d}else Za=J}else{if(X>>>0>=H>>>0){_a=Ya;break}X=k[Ya+4>>2]|0;if(!X){I=186;break d}else Za=X}Ya=Za}if(!_a){I=186;break d}H=k[_a+40>>2]|0;if((H|0)==-1){ra=B;sa=B;break}else{G=B;e=La}}}if(!(k[p>>2]|0)){I=80;break}aa=k[(k[i>>2]|0)+16>>2]|0;if((aa|0)==-1){I=80;break}else{$=sa;Y=ra}}do if((I|0)==80){rS(l,k[R>>2]|0);rS(i,k[fa>>2]|0);yS(h,k[o>>2]|0);r=c;return}else if((I|0)==81){ra=Hc()|0;$a=M;ab=ra}else if((I|0)==92){ra=Rd(8)|0;x=0;xa(671,ra|0,296399);Y=x;x=0;if(Y&1){Y=Hc()|0;sa=M;Fc(ra|0);$a=sa;ab=Y;break}else{k[ra>>2]=47544;x=0;fb(149,ra|0,9024,933);x=0;I=82;break}}else if((I|0)==103){ra=Rd(8)|0;x=0;xa(671,ra|0,296399);Y=x;x=0;if(Y&1){Y=Hc()|0;sa=M;Fc(ra|0);$a=sa;ab=Y;break}else{k[ra>>2]=47544;x=0;fb(149,ra|0,9024,933);x=0;I=82;break}}else if((I|0)==114){ra=Rd(8)|0;x=0;xa(671,ra|0,296399);Y=x;x=0;if(Y&1){Y=Hc()|0;sa=M;Fc(ra|0);$a=sa;ab=Y;break}else{k[ra>>2]=47544;x=0;fb(149,ra|0,9024,933);x=0;I=82;break}}else if((I|0)==186){ra=Rd(8)|0;x=0;xa(671,ra|0,296399);Y=x;x=0;if(Y&1){Y=Hc()|0;sa=M;Fc(ra|0);$a=sa;ab=Y;break}else{k[ra>>2]=47544;x=0;fb(149,ra|0,9024,933);x=0;I=82;break}}while(0);if((I|0)==82){I=Hc()|0;$a=M;ab=I}zS(a);rS(l,k[R>>2]|0);ha=ab;ia=$a;ja=fa}rS(i,k[ja>>2]|0);U=ha;V=ia;W=k[o>>2]|0;yS(h,W);Sc(U|0)}function mS(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;d=(k[a>>2]|0)+1|0;k[a>>2]=d;q2a(c,230391,17);x=0;pa(49,d>>>0<4294967294|0,c|0,371,230314,230409);a=x;x=0;if(a&1){a=Hc()|0;K2a(c);Sc(a|0)}else{K2a(c);r=b;return d|0}return 0}function nS(){k[7661]=0;k[7662]=0;k[7663]=0;return}function oS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function pS(a,b){a=a|0;b=b|0;if(!b)return;else{pS(a,k[b>>2]|0);pS(a,k[b+4>>2]|0);OBa(b);return}}function qS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,g>>>0>=h>>>0):0){if(h>>>0>=g>>>0){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?g>>>0>=(k[o+16>>2]|0)>>>0:0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if(g>>>0>>0){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if(m>>>0>=g>>>0){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>>>0>=o>>>0){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if(o>>>0>>0){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if(d>>>0>=o>>>0){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function rS(a,b){a=a|0;b=b|0;if(!b)return;else{rS(a,k[b>>2]|0);rS(a,k[b+4>>2]|0);OBa(b);return}}function sS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function tS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=k[b>>2]|0;b=k[c+4>>2]|0;if(!b){d=c;while(1){e=k[d+8>>2]|0;if((k[e>>2]|0)==(d|0)){f=e;break}else d=e}}else{d=b;while(1){b=k[d>>2]|0;if(!b){f=d;break}else d=b}}if((k[a>>2]|0)==(c|0))k[a>>2]=f;d=a+8|0;k[d>>2]=(k[d>>2]|0)+-1;hk(k[a+4>>2]|0,c);a=k[c+64>>2]|0;if(a)j0a(a);a=k[c+56>>2]|0;if(a)j0a(a);a=k[c+28>>2]|0;if(!a){OBa(c);return f|0}d=c+32|0;b=k[d>>2]|0;if((b|0)!=(a|0))k[d>>2]=b+(~((b+-4-a|0)>>>2)<<2);OBa(a);OBa(c);return f|0}function uS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=k[b>>2]|0;h=f;while(1){i=k[h+16>>2]|0;if(g>>>0>>0){j=k[h>>2]|0;if(!j){l=h;m=h;n=5;break}else o=j}else{if(i>>>0>=g>>>0){p=h;n=10;break}i=h+4|0;j=k[i>>2]|0;if(!j){q=i;s=h;n=9;break}else o=j}h=o}if((n|0)==5){k[d>>2]=m;t=l;u=m;break}else if((n|0)==9){k[d>>2]=s;t=q;u=s;break}else if((n|0)==10){k[d>>2]=p;v=d;w=p;x=p;n=12;break}}else{k[d>>2]=e;v=e;w=f;x=e;n=12}while(0);if((n|0)==12)if(!w){t=v;u=x}else{y=w;z=y+20|0;r=c;return z|0}w=KBa(68)|0;k[w+16>>2]=k[b>>2];b=w+20|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[w+40>>2]=-1;k[w+44>>2]=-1;k[w+48>>2]=3;b=w+52|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=u;k[t>>2]=w;u=k[k[a>>2]>>2]|0;if(!u)A=w;else{k[a>>2]=u;A=k[t>>2]|0}ui(k[a+4>>2]|0,A);A=a+8|0;k[A>>2]=(k[A>>2]|0)+1;y=w;z=y+20|0;r=c;return z|0}function vS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=r;r=r+16|0;c=b;d=KBa(108)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=30572;x=0;e=Ba(563,48)|0;f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f;c0a(d);OBa(d);Sc(h|0)}f=d+12|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=30624;i=e+12|0;k[i>>2]=0;k[e+16>>2]=0;k[e+20>>2]=0;j=e+28|0;k[j>>2]=0;k[e+32>>2]=0;k[e+24>>2]=j;k[e+36>>2]=0;k[e+40>>2]=0;k[e+44>>2]=0;k[c>>2]=i;k[c+4>>2]=e;x=0;xa(727,f|0,c|0);c=x;x=0;if(!(c&1)){j0a(e);k[a>>2]=f;k[a+4>>2]=d;r=b;return}b=Hc()|0;a=M;j0a(e);g=a;h=b;c0a(d);OBa(d);Sc(h|0)}function wS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;e=r;r=r+48|0;f=e+36|0;g=e+32|0;h=e+28|0;i=e+24|0;j=e;k[j+4>>2]=0;l=j+8|0;k[l>>2]=0;m=j+12|0;n=j+16|0;k[n>>2]=0;o=j+20|0;k[o>>2]=0;p=j+16|0;k[m>>2]=p;k[j>>2]=c;x=0;c=Ba(563,108)|0;q=x;x=0;do if(q&1)s=57;else{k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=30572;t=c+12|0;x=0;xa(668,t|0,d|0);u=x;x=0;if(u&1){u=Hc()|0;v=M;c0a(c);OBa(c);w=v;y=u;break}u=j+4|0;k[u>>2]=t;t=k[l>>2]|0;k[l>>2]=c;if(t)j0a(t);if((j|0)!=(b|0)?(k[h>>2]=k[b+12>>2],k[i>>2]=b+16,x=0,k[g>>2]=k[h>>2],k[f>>2]=k[i>>2],fb(235,m|0,g|0,f|0),t=x,x=0,t&1):0){s=57;break}t=k[p>>2]|0;do if(t){v=k[b>>2]|0;z=t;while(1){A=k[z+16>>2]|0;if(v>>>0>>0){B=k[z>>2]|0;if(!B){C=z;D=z;s=12;break}else E=B}else{if(A>>>0>=v>>>0){F=z;s=17;break}A=z+4|0;B=k[A>>2]|0;if(!B){G=A;H=z;s=16;break}else E=B}z=E}if((s|0)==12){k[f>>2]=D;I=C;J=D;break}else if((s|0)==16){k[f>>2]=H;I=G;J=H;break}else if((s|0)==17){k[f>>2]=F;I=f;J=F;break}}else{k[f>>2]=p;I=p;J=p}while(0);if(!(k[I>>2]|0)){x=0;t=Ba(563,20)|0;z=x;x=0;if(z&1){s=57;break}k[t+16>>2]=k[b>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=J;k[I>>2]=t;z=k[k[m>>2]>>2]|0;if(!z)K=t;else{k[m>>2]=z;K=k[I>>2]|0}ui(k[n>>2]|0,K);k[o>>2]=(k[o>>2]|0)+1}z=k[a>>2]|0;t=z+4|0;v=k[t>>2]|0;B=z+8|0;A=k[B>>2]|0;L=A;if(v>>>0>=A>>>0){A=k[z>>2]|0;N=((v-A|0)/24|0)+1|0;if(N>>>0>178956970){x=0;va(1473,z|0);O=x;x=0;if(O&1){s=57;break}P=k[z>>2]|0;Q=B;R=k[B>>2]|0}else{P=A;Q=B;R=L}L=P;B=(R-P|0)/24|0;if(B>>>0<89478485){A=B<<1;B=A>>>0>>0?N:A;A=k[t>>2]|0;N=(A-P|0)/24|0;O=A;if(!B){S=0;T=0;U=N;V=O}else{W=B;X=O;Y=N;s=36}}else{N=k[t>>2]|0;W=178956970;X=N;Y=(N-P|0)/24|0;s=36}if((s|0)==36){x=0;N=Ba(563,W*24|0)|0;O=x;x=0;if(O&1){s=57;break}S=W;T=N;U=Y;V=X}N=T+(U*24|0)|0;O=N;B=T+(S*24|0)|0;k[N>>2]=k[j>>2];k[T+(U*24|0)+4>>2]=k[u>>2];k[T+(U*24|0)+8>>2]=k[l>>2];k[u>>2]=0;k[l>>2]=0;A=T+(U*24|0)+12|0;k[A>>2]=k[m>>2];Z=k[j+16>>2]|0;k[T+(U*24|0)+16>>2]=Z;_=k[o>>2]|0;k[T+(U*24|0)+20>>2]=_;$=T+(U*24|0)+16|0;if(!_){k[A>>2]=$;aa=V;ba=L}else{k[Z+8>>2]=$;k[m>>2]=p;k[p>>2]=0;k[o>>2]=0;aa=k[t>>2]|0;ba=k[z>>2]|0}$=N+24|0;if((aa|0)==(ba|0)){ca=O;da=aa}else{Z=aa;L=N;N=O;while(1){O=Z;Z=Z+-24|0;k[L+-24>>2]=k[Z>>2];A=O+-20|0;k[L+-20>>2]=k[A>>2];_=O+-16|0;k[L+-16>>2]=k[_>>2];k[A>>2]=0;k[_>>2]=0;_=L+-12|0;A=O+-12|0;k[_>>2]=k[A>>2];ea=k[O+-8>>2]|0;k[L+-8>>2]=ea;fa=O+-4|0;ga=k[fa>>2]|0;k[L+-4>>2]=ga;ha=L+-8|0;if(!ga)k[_>>2]=ha;else{k[ea+8>>2]=ha;ha=O+-8|0;k[A>>2]=ha;k[ha>>2]=0;k[fa>>2]=0}L=N+-24|0;fa=L;if((Z|0)==(ba|0)){ia=fa;break}else N=fa}ca=ia;da=k[z>>2]|0}k[z>>2]=ca;N=k[t>>2]|0;k[t>>2]=$;k[Q>>2]=B;Z=da;if((N|0)!=(Z|0)){L=N;do{rS(L+-12|0,k[L+-8>>2]|0);N=k[L+-16>>2]|0;L=L+-24|0;if(N)j0a(N)}while((L|0)!=(Z|0))}if(da)OBa(da)}else{k[v>>2]=k[j>>2];k[v+4>>2]=k[u>>2];k[v+8>>2]=k[l>>2];k[u>>2]=0;k[l>>2]=0;Z=v+12|0;k[Z>>2]=k[m>>2];L=k[j+16>>2]|0;k[v+16>>2]=L;B=k[o>>2]|0;k[v+20>>2]=B;$=v+16|0;if(!B)k[Z>>2]=$;else{k[L+8>>2]=$;k[m>>2]=p;k[p>>2]=0;k[o>>2]=0}k[t>>2]=(k[t>>2]|0)+24}rS(j+12|0,k[p>>2]|0);$=k[l>>2]|0;if(!$){r=e;return}j0a($);r=e;return}while(0);if((s|0)==57){s=Hc()|0;w=M;y=s}rS(j+12|0,k[p>>2]|0);p=k[l>>2]|0;if(!p)Sc(y|0);j0a(p);Sc(y|0)}function xS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>2;if(!f)return;if(!(f>>>0>1073741823?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<2);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=(b+-4-f|0)>>>2;e=f;f=h;while(1){k[f>>2]=k[e>>2];e=e+4|0;if((e|0)==(b|0))break;else f=f+4|0}k[c>>2]=h+(d+1<<2);return}d=Hc()|0;h=k[a>>2]|0;if(!h)Sc(d|0);a=k[c>>2]|0;if((a|0)!=(h|0))k[c>>2]=a+(~((a+-4-h|0)>>>2)<<2);OBa(h);Sc(d|0)}function yS(a,b){a=a|0;b=b|0;if(!b)return;else{yS(a,k[b>>2]|0);yS(a,k[b+4>>2]|0);OBa(b);return}}function zS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=k[a>>2]|0;if(!b)return;c=a+4|0;d=k[c>>2]|0;if((d|0)==(b|0))e=b;else{f=d;do{k[c>>2]=f+-48;d=k[f+-4>>2]|0;if(d)j0a(d);d=k[f+-12>>2]|0;if(d)j0a(d);d=k[f+-40>>2]|0;g=d;if(d){h=f+-36|0;i=k[h>>2]|0;if((i|0)!=(d|0))k[h>>2]=i+(~((i+-4-g|0)>>>2)<<2);OBa(d)}f=k[c>>2]|0}while((f|0)!=(b|0));e=k[a>>2]|0}OBa(e);return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/48|0)+1|0;if(e>>>0>89478485){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/48|0;if(g>>>0<44739242){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/48|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=89478485;n=((k[c>>2]|0)-f|0)/48|0;o=6}if((o|0)==6){i=m;j=KBa(m*48|0)|0;l=n}n=j+(l*48|0)|0;m=n;o=j+(i*48|0)|0;i=b;f=k[i+4>>2]|0;h=n;k[h>>2]=k[i>>2];k[h+4>>2]=f;x=0;xa(725,j+(l*48|0)+8|0,b+8|0);f=x;x=0;if(f&1){f=Hc()|0;if(!j)Sc(f|0);OBa(j);Sc(f|0)}f=j+(l*48|0)+20|0;h=b+20|0;k[f>>2]=k[h>>2];k[f+4>>2]=k[h+4>>2];k[f+8>>2]=k[h+8>>2];k[j+(l*48|0)+32>>2]=k[b+32>>2];h=k[b+36>>2]|0;k[j+(l*48|0)+36>>2]=h;if(h)h0a(h);k[j+(l*48|0)+40>>2]=k[b+40>>2];h=k[b+44>>2]|0;k[j+(l*48|0)+44>>2]=h;if(h)h0a(h);h=n+48|0;l=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(l|0)){p=m;q=l;r=l}else{b=j;j=m;m=n;while(1){n=b;b=b+-48|0;f=b;i=k[f+4>>2]|0;g=m+-48|0;k[g>>2]=k[f>>2];k[g+4>>2]=i;i=m+-40|0;g=n+-40|0;k[i>>2]=0;f=m+-36|0;k[f>>2]=0;k[m+-32>>2]=0;k[i>>2]=k[g>>2];i=n+-36|0;k[f>>2]=k[i>>2];f=n+-32|0;k[m+-32>>2]=k[f>>2];k[f>>2]=0;k[i>>2]=0;k[g>>2]=0;g=m+-28|0;i=n+-28|0;k[g>>2]=k[i>>2];k[g+4>>2]=k[i+4>>2];k[g+8>>2]=k[i+8>>2];i=n+-16|0;k[m+-16>>2]=k[i>>2];g=n+-12|0;k[m+-12>>2]=k[g>>2];k[i>>2]=0;k[g>>2]=0;g=n+-8|0;k[m+-8>>2]=k[g>>2];i=n+-4|0;k[m+-4>>2]=k[i>>2];k[g>>2]=0;k[i>>2]=0;m=j+-48|0;i=m;if((b|0)==(l|0)){s=i;break}else j=i}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=h;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{r=k[d+-4>>2]|0;if(r)j0a(r);r=k[d+-12>>2]|0;if(r)j0a(r);r=k[d+-40>>2]|0;h=r;if(r){c=d+-36|0;p=k[c>>2]|0;if((p|0)!=(r|0))k[c>>2]=p+(~((p+-4-h|0)>>>2)<<2);OBa(r)}d=d+-48|0}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function BS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;d=a+8|0;a:do if((k[d>>2]|0)!=0?(e=k[a>>2]|0,f=a+4|0,k[a>>2]=f,k[(k[f>>2]|0)+8>>2]=0,k[f>>2]=0,k[d>>2]=0,g=k[e+4>>2]|0,h=(g|0)==0?e:g,(h|0)!=0):0){g=a+4|0;e=k[b>>2]|0;i=e;j=e;e=h;while(1){if((i|0)==(k[c>>2]|0)){l=e;break}h=k[i+16>>2]|0;k[e+16>>2]=h;m=e+8|0;n=k[m>>2]|0;do if(n){o=k[n>>2]|0;if((o|0)==(e|0)){k[n>>2]=0;p=k[n+4>>2]|0;if(!p){q=n;break}else r=p;while(1){p=k[r>>2]|0;if(p){r=p;continue}p=k[r+4>>2]|0;if(!p){s=r;break}else r=p}q=s;break}else{k[n+4>>2]=0;if(!o){q=n;break}else t=o;while(1){p=k[t>>2]|0;if(p){t=p;continue}p=k[t+4>>2]|0;if(!p){u=t;break}else t=p}q=u;break}}else q=0;while(0);n=k[f>>2]|0;do if(n){o=n;while(1){if(h>>>0<(k[o+16>>2]|0)>>>0){p=k[o>>2]|0;if(!p){v=o;w=o;x=19;break}else y=p}else{p=o+4|0;z=k[p>>2]|0;if(!z){A=p;B=o;x=22;break}else y=z}o=y}if((x|0)==19){x=0;C=v;D=w;break}else if((x|0)==22){x=0;C=A;D=B;break}}else{C=f;D=f}while(0);k[e>>2]=0;k[e+4>>2]=0;k[m>>2]=D;k[C>>2]=e;h=k[k[a>>2]>>2]|0;if(!h)E=e;else{k[a>>2]=h;E=k[C>>2]|0}ui(k[g>>2]|0,E);k[d>>2]=(k[d>>2]|0)+1;h=k[j+4>>2]|0;if(!h){n=j;while(1){o=k[n+8>>2]|0;if((k[o>>2]|0)==(n|0)){F=o;break}else n=o}}else{n=h;while(1){m=k[n>>2]|0;if(!m){F=n;break}else n=m}}k[b>>2]=F;if(!q)break a;else{i=F;j=F;e=q}}e=k[l+8>>2]|0;if(!e)G=l;else{j=e;while(1){e=k[j+8>>2]|0;if(!e){H=j;break}else j=e}G=H}rS(a,G)}while(0);G=k[b>>2]|0;H=k[c>>2]|0;if((G|0)==(H|0))return;c=a+4|0;l=a+4|0;q=G;F=G;while(1){G=k[c>>2]|0;E=k[F+16>>2]|0;do if(G){C=G;while(1){if(E>>>0<(k[C+16>>2]|0)>>>0){D=k[C>>2]|0;if(!D){I=C;J=C;x=37;break}else K=D}else{D=C+4|0;B=k[D>>2]|0;if(!B){L=D;M=C;x=40;break}else K=B}C=K}if((x|0)==37){x=0;N=I;O=J;break}else if((x|0)==40){x=0;N=L;O=M;break}}else{N=c;O=c}while(0);G=KBa(20)|0;k[G+16>>2]=E;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=O;k[N>>2]=G;C=k[k[a>>2]>>2]|0;if(!C)P=G;else{k[a>>2]=C;P=k[N>>2]|0}ui(k[l>>2]|0,P);k[d>>2]=(k[d>>2]|0)+1;C=k[q+4>>2]|0;if(!C){G=q;while(1){B=k[G+8>>2]|0;if((k[B>>2]|0)==(G|0)){Q=B;break}else G=B}}else{G=C;while(1){E=k[G>>2]|0;if(!E){Q=G;break}else G=E}}k[b>>2]=Q;if((Q|0)==(H|0))break;else{q=Q;F=Q}}return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;k[a>>2]=0;c=a+4|0;k[a+8>>2]=0;k[a+12>>2]=0;d=a+8|0;k[c>>2]=d;k[a+16>>2]=1;e=a+20|0;k[a+24>>2]=0;k[a+28>>2]=0;f=a+24|0;k[e>>2]=f;g=a+32|0;k[a+36>>2]=0;k[a+40>>2]=0;h=a+36|0;k[g>>2]=h;i=a+44|0;k[a+48>>2]=0;k[a+52>>2]=0;j=a+48|0;k[i>>2]=j;k[a+56>>2]=k[b>>2];l=a+60|0;m=k[b+4>>2]|0;k[l>>2]=m;if(m)h0a(m);m=a+72|0;b=m+8|0;k[a+68>>2]=b;x=0;n=Ba(563,40)|0;o=x;x=0;if(!(o&1)){k[m+4>>2]=n;m=n+16|0;k[m>>2]=0;k[n+20>>2]=m;k[n+24>>2]=m;m=n+28|0;k[m>>2]=0;k[n+32>>2]=m;k[n+36>>2]=m;k[a+84>>2]=0;k[a+88>>2]=b;k[a+92>>2]=b;return}b=Hc()|0;a=k[l>>2]|0;if(a)j0a(a);CA(i,k[j>>2]|0);Ay(g,k[h>>2]|0);Ay(e,k[f>>2]|0);ny(c,k[d>>2]|0);Sc(b|0)}function DS(a){a=a|0;k[a>>2]=30624;HS(a+12|0);c0a(a);return}function ES(a){a=a|0;k[a>>2]=30624;HS(a+12|0);c0a(a);OBa(a);return}function FS(a){a=a|0;HS(a+12|0);return}function GS(a){a=a|0;OBa(a);return}function HS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=a+24|0;c=k[b>>2]|0;if(c){d=a+28|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f)}IS(a+12|0,k[a+16>>2]|0);f=k[a>>2]|0;if(!f)return;b=a+4|0;i=k[b>>2]|0;if((i|0)==(f|0))j=f;else{g=i;while(1){i=g+-24|0;k[b>>2]=i;c=k[g+-16>>2]|0;d=c;if(!c)l=i;else{i=g+-12|0;h=k[i>>2]|0;if((h|0)!=(c|0))k[i>>2]=h+(~((h+-4-d|0)>>>2)<<2);OBa(c);l=k[b>>2]|0}if((l|0)==(f|0))break;else g=l}j=k[a>>2]|0}OBa(j);return}function IS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!b)return;IS(a,k[b>>2]|0);IS(a,k[b+4>>2]|0);a=k[b+24>>2]|0;c=a;if(a){d=b+28|0;e=k[d>>2]|0;if((e|0)!=(a|0))k[d>>2]=e+(~((e+-4-c|0)>>>2)<<2);OBa(a)}OBa(b);return}function JS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0;b=r;r=r+400|0;c=b+384|0;d=b+372|0;e=b+360|0;f=b+264|0;g=b+200|0;h=b+80|0;i=b;j=b+240|0;l=b+160|0;m=b+348|0;n=b+344|0;k[g>>2]=4;k[g+32>>2]=1;NC(g);k[f>>2]=4;o=f+8|0;p=o;q=g;g=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(g|0));s=f+48|0;k[s>>2]=-1;k[s+4>>2]=-1;s=f+56|0;t=f+60|0;u=f+72|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;s=k[a>>2]|0;v=k[s>>2]|0;w=k[s+4>>2]|0;x=0;fb(140,e|0,329672,0);s=x;x=0;a:do if(s&1){y=Hc()|0;z=M;A=y;B=26}else{x=0;pa(56,1,e|0,70,230808,267525);y=x;x=0;if(y&1){y=Hc()|0;C=M;K2a(e);z=C;A=y;B=26;break}K2a(e);k[h>>2]=8;y=h+8|0;p=y;q=o;g=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(g|0));C=h+48|0;k[C>>2]=-1;k[C+4>>2]=-1;C=h+56|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[C+16>>2]=0;if((v|0)!=(w|0)){C=k[h+40>>2]|0;D=v;E=0;while(1){b:do if((k[D>>2]|0)==8?(k[D+40>>2]|0)==(C|0):0){F=D+8|0;G=F+(C<<2)|0;if((F|0)==(G|0))H=1;else{I=F;F=y;while(1){if((k[I>>2]|0)!=(k[F>>2]|0)){H=0;break b}I=I+4|0;if((I|0)==(G|0)){H=1;break}else F=F+4|0}}}else H=0;while(0);F=H+E|0;D=D+80|0;if((D|0)==(w|0)){J=F;break}else E=F}if(J)K=0;else B=13}else B=13;c:do if((B|0)==13){E=k[a>>2]|0;D=k[E>>2]|0;y=k[E+4>>2]|0;E=k[f>>2]|0;x=0;fb(140,d|0,329672,0);C=x;x=0;do if(C&1){F=Hc()|0;L=M;N=F}else{x=0;pa(56,(E|0)==4|(E|0)==8|0,d|0,71,230808,296141);F=x;x=0;if(F&1){F=Hc()|0;G=M;K2a(d);L=G;N=F;break}K2a(d);k[i>>2]=4;F=i+8|0;p=F;q=o;g=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(g|0));G=i+48|0;k[G>>2]=-1;k[G+4>>2]=-1;G=i+56|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[G+16>>2]=0;if((D|0)!=(y|0)){G=k[i+40>>2]|0;I=D;O=0;while(1){d:do if((k[I>>2]|0)==4?(k[I+40>>2]|0)==(G|0):0){P=I+8|0;Q=P+(G<<2)|0;if((P|0)==(Q|0))R=1;else{S=P;P=F;while(1){if((k[S>>2]|0)!=(k[P>>2]|0)){R=0;break d}S=S+4|0;if((S|0)==(Q|0)){R=1;break}else P=P+4|0}}}else R=0;while(0);P=R+O|0;I=I+80|0;if((I|0)==(y|0)){T=P;break}else O=P}if(T){K=0;break c}}O=j+16|0;k[O>>2]=j;k[j>>2]=30664;k[j+4>>2]=f;k[j+8>>2]=a;I=m+4|0;F=m+8|0;G=m+4|0;P=l+4|0;Q=l+16|0;S=l+32|0;U=l+4|0;V=l+8|0;W=0;e:while(1){x=0;xa(728,l|0,j|0);X=x;x=0;if(X&1){B=33;break}k[I>>2]=0;k[F>>2]=0;k[m>>2]=G;k[n>>2]=0;X=k[a>>2]|0;Y=k[X+4>>2]|0;Z=k[X>>2]|0;if((Y|0)==(Z|0)){_=Y;$=X}else{X=Z;Z=0;while(1){do if((k[X+(Z*80|0)>>2]|0)==8){x=0;Y=Ta(560,l|0,n|0)|0;aa=x;x=0;if(aa&1){B=36;break e}if((Y|0)==(P|0)){x=0;aa=Fa(130,l|0,c|0,n|0)|0;ba=x;x=0;if(ba&1){B=36;break e}if(!(k[aa>>2]|0)){x=0;ba=Ba(563,20)|0;ca=x;x=0;if(ca&1){B=36;break e}k[ba+16>>2]=Z;ca=k[c>>2]|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=ca;k[aa>>2]=ba;ca=k[k[l>>2]>>2]|0;if(!ca)da=ba;else{k[l>>2]=ca;da=k[aa>>2]|0}ui(k[U>>2]|0,da);k[V>>2]=(k[V>>2]|0)+1}break}aa=k[a>>2]|0;ca=k[aa>>2]|0;if((((k[aa+4>>2]|0)-ca|0)/80|0)>>>0>Z>>>0)ea=ca;else{x=0;va(1484,aa|0);ca=x;x=0;if(ca&1){B=36;break e}ea=k[aa>>2]|0}x=0;aa=Ta(561,m|0,ea+(Z*80|0)+8|0)|0;ca=x;x=0;if(ca&1){B=36;break e}ca=k[a>>2]|0;ba=k[Y+16>>2]|0;Y=k[ca>>2]|0;if((((k[ca+4>>2]|0)-Y|0)/80|0)>>>0>ba>>>0)fa=Y;else{x=0;va(1484,ca|0);Y=x;x=0;if(Y&1){B=36;break e}fa=k[ca>>2]|0}ca=fa+(ba*80|0)+8|0;if((aa|0)==(ca|0))break;Y=fa+(ba*80|0)+40|0;k[aa+32>>2]=k[Y>>2];Dyb(aa|0,ca|0,k[Y>>2]<<2|0)|0}while(0);Z=Z+1|0;k[n>>2]=Z;Y=k[a>>2]|0;ca=k[Y+4>>2]|0;X=k[Y>>2]|0;if(Z>>>0>=((ca-X|0)/80|0)>>>0){_=ca;$=Y;break}}}X=_;Z=k[$>>2]|0;if((Z|0)==(X|0))ga=0;else{Y=Z;Z=0;while(1){f:do if((k[Y>>2]|0)==4?(ca=Y+8|0,aa=k[G>>2]|0,(aa|0)!=0):0){ba=Y+40|0;ha=k[ba>>2]|0;ia=aa;g:while(1){aa=k[ia+48>>2]|0;do if((ha|0)==(aa|0)){ja=ia+16|0;ka=ha;while(1){ka=ka+-1|0;if((ka|0)<=-1){la=ha;break}ma=k[ca+(ka<<2)>>2]|0;na=k[ja+(ka<<2)>>2]|0;if((ma|0)!=(na|0)){oa=ma;qa=na;B=75;break}}if((B|0)==75){B=0;if(oa>>>0>qa>>>0)la=ha;else{B=76;break}}while(1){la=la+-1|0;if((la|0)<=-1)break g;ka=k[ja+(la<<2)>>2]|0;na=k[ca+(la<<2)>>2]|0;if((ka|0)!=(na|0)){ra=ka;sa=na;break}}if(ra>>>0>sa>>>0)break g;else B=81}else{if(ha>>>0<=aa>>>0){B=76;break}if(aa>>>0>ha>>>0)break g;else B=81}while(0);if((B|0)==76){B=0;ta=ia}else if((B|0)==81){B=0;ta=ia+4|0}ia=k[ta>>2]|0;if(!ia){ua=Z;break f}}x=0;ia=Ta(562,m|0,ca|0)|0;ha=x;x=0;if(ha&1){B=35;break e}if((ca|0)==(ia|0))ua=1;else{ha=ia+32|0;k[ba>>2]=k[ha>>2];Dyb(ca|0,ia|0,k[ha>>2]<<2|0)|0;ua=1}}else ua=Z;while(0);Y=Y+80|0;if((Y|0)==(X|0)){ga=ua;break}else Z=ua}}PS(m,k[G>>2]|0);QS(l,k[P>>2]|0);Z=k[S>>2]|0;if((Z|0)!=(Q|0)){if(Z)Sf[k[(k[Z>>2]|0)+20>>2]&2047](Z)}else Sf[k[(k[Q>>2]|0)+16>>2]&2047](Q);if(!ga){wa=W;B=88;break}W=W+1|0}if((B|0)==33){W=Hc()|0;ya=W;za=M}else if((B|0)==35){W=Hc()|0;Aa=W;Ca=M;B=37}else if((B|0)==36){W=Hc()|0;Aa=W;Ca=M;B=37}else if((B|0)==88){W=(wa|0)!=0;V=k[O>>2]|0;if((V|0)!=(j|0)){if(V)Sf[k[(k[V>>2]|0)+20>>2]&2047](V)}else Sf[k[(k[j>>2]|0)+16>>2]&2047](j);K=W;break c}do if((B|0)==37){PS(m,k[G>>2]|0);QS(l,k[P>>2]|0);W=k[S>>2]|0;if((W|0)==(Q|0)){Sf[k[(k[Q>>2]|0)+16>>2]&2047](Q);ya=Aa;za=Ca;break}if(!W){ya=Aa;za=Ca}else{Sf[k[(k[W>>2]|0)+20>>2]&2047](W);ya=Aa;za=Ca}}while(0);Q=k[O>>2]|0;if((Q|0)==(j|0)){Sf[k[(k[Q>>2]|0)+16>>2]&2047](Q);Da=ya;Ea=za;break a}if(!Q){Da=ya;Ea=za;break a}Sf[k[(k[Q>>2]|0)+20>>2]&2047](Q);Da=ya;Ea=za;break a}while(0);Da=N;Ea=L;break a}while(0);y=k[u>>2]|0;if(y)j0a(y);y=k[t>>2]|0;if(!y){r=b;return K|0}j0a(y);r=b;return K|0}while(0);if((B|0)==26){Da=A;Ea=z}z=k[u>>2]|0;if(z)j0a(z);z=k[t>>2]|0;if(!z)Sc(Da|0);j0a(z);Sc(Da|0);return 0}function KS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=r;r=r+80|0;c=b;d=a+4|0;e=k[a>>2]|0;if((e|0)==(k[d>>2]|0)){r=b;return a|0}f=gB(e)|0;e=k[a>>2]|0;a:do if(f){k[c>>2]=1;g=c+8|0;k[g>>2]=87;k[c+40>>2]=1;h=c+48|0;k[h>>2]=-1;k[h+4>>2]=-1;h=c+56|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;if(((k[e>>2]|0)==1?(k[e+40>>2]|0)==1:0)?(h=e+8|0,(k[h>>2]|0)==87):0){i=h;j=g;do{j=j+4|0;if((i|0)==(h|0))break a;i=i+4|0}while((k[i>>2]|0)==(k[j>>2]|0))}k[a>>2]=k[d>>2];r=b;return a|0}while(0);c=k[d>>2]|0;d=e;while(1){e=d+80|0;if((e|0)==(c|0)){l=c;break}if((k[e>>2]|0)==8)d=e;else{l=e;break}}k[a>>2]=l;r=b;return a|0}function LS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=k[a+8>>2]|0;a:do if((((b|0)!=0?(c=k[a+12>>2]|0,(c|0)!=0):0)?(d=k[a>>2]|0,(k[d>>2]|0)==(k[b>>2]|0)):0)?(e=b+8|0,f=k[d+40>>2]|0,(f|0)==(k[b+40>>2]|0)):0){g=d+8|0;d=g+(f<<2)|0;if((g|0)==(d|0)){h=c;return h|0}f=g;g=e;while(1){if((k[f>>2]|0)!=(k[g>>2]|0))break a;f=f+4|0;if((f|0)==(d|0)){h=c;break}else g=g+4|0}return h|0}while(0);h=k[a>>2]|0;return h|0}function MS(){k[7715]=0;k[7716]=0;k[7717]=0;return}function NS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;f=r;r=r+64|0;g=f+28|0;h=f+16|0;i=f;if(a){r=f;return}f=g+16|0;a=g+20|0;k[a>>2]=0;k[g+24>>2]=0;k[g+28>>2]=0;k[g+32>>2]=-1;k[g>>2]=20828;k[f>>2]=20852;j=g+4|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[i>>2]=21048;l=i+4|0;x=0;xa(604,l|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;m=M;n=b}else{x=0;b=Ta(563,g|0,i|0)|0;o=x;x=0;if(!(o&1)){k[b+(k[(k[b>>2]|0)+-24>>2]|0)+8>>2]=e;k[b+(k[(k[b>>2]|0)+-24>>2]|0)+12>>2]=d;k[b+(k[(k[b>>2]|0)+-24>>2]|0)+16>>2]=c;x=0;va(1497,b|0);x=0}b=Hc()|0;c=M;k[i>>2]=21048;K2a(l);m=c;n=b}k[g>>2]=20828;k[g+16>>2]=20852;K2a(j);k[f>>2]=20796;f=k[a>>2]|0;if(!f){K2a(h);Sc(n|0)}x=0;j=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!j){K2a(h);Sc(n|0)}k[a>>2]=0;K2a(h);Sc(n|0)}function OS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;c=r;r=r+48|0;d=c+24|0;e=c;k[a+4>>2]=0;f=a+8|0;g=k[b+16>>2]|0;a:do if(g){if((g|0)==(b|0)){h=e+16|0;k[h>>2]=e;Tf[k[(k[g>>2]|0)+12>>2]&2047](g,e);i=h;j=k[h>>2]|0}else{h=Vf[k[(k[g>>2]|0)+8>>2]&1023](g)|0;l=e+16|0;k[l>>2]=h;i=l;j=h}if(j){do if((j|0)==(e|0)){h=d+16|0;k[h>>2]=d;x=0;xa(k[(k[e>>2]|0)+12>>2]|0,e|0,d|0);l=x;x=0;if(!(l&1)){l=k[h>>2]|0;k[f>>2]=0;if(!l){m=i;n=d;o=13;break a}else{p=d;q=h;s=l;break}}else{l=Hc(0)|0;Fg(l)}}else{l=d+16|0;k[l>>2]=j;k[i>>2]=0;k[f>>2]=0;p=d;q=l;s=j}while(0);l=a+16|0;if((s|0)!=(p|0)){k[a+32>>2]=s;k[q>>2]=0;t=e;u=i;v=d;break}k[a+32>>2]=l;x=0;xa(k[(k[d>>2]|0)+12>>2]|0,p|0,l|0);l=x;x=0;if(l&1){l=Hc(0)|0;Fg(l)}l=k[q>>2]|0;if((l|0)==(p|0)){Sf[k[(k[d>>2]|0)+16>>2]&2047](p);t=e;u=i;v=d;break}if(!l){t=e;u=i;v=d}else{Sf[k[(k[l>>2]|0)+20>>2]&2047](l);t=e;u=i;v=d}}else{w=i;y=d;o=7}}else{l=e+16|0;k[l>>2]=0;w=l;y=d;o=7}while(0);if((o|0)==7){k[d+16>>2]=0;k[f>>2]=0;m=w;n=y;o=13}if((o|0)==13){k[a+32>>2]=0;t=e;u=m;v=n}n=k[u>>2]|0;if((n|0)==(t|0)){Sf[k[(k[t>>2]|0)+16>>2]&2047](t);z=a+4|0;k[a>>2]=z;r=c;return}if(!n){z=a+4|0;k[a>>2]=z;r=c;return}Sf[k[(k[n>>2]|0)+20>>2]&2047](n);z=a+4|0;k[a>>2]=z;r=c;return}function PS(a,b){a=a|0;b=b|0;if(!b)return;else{PS(a,k[b>>2]|0);PS(a,k[b+4>>2]|0);OBa(b);return}}function QS(a,b){a=a|0;b=b|0;if(!b)return;else{QS(a,k[b>>2]|0);QS(a,k[b+4>>2]|0);OBa(b);return}}function RS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+16|0;d=c+4|0;e=c;f=a+4|0;g=k[f>>2]|0;if(g){h=a+32|0;a=f;i=g;a:while(1){g=i;while(1){j=k[b>>2]|0;k[d>>2]=k[g+16>>2];k[e>>2]=j;j=k[h>>2]|0;if(!j){l=5;break a}if(!(Xf[k[(k[j>>2]|0)+24>>2]&255](j,d,e)|0)){m=g;break}g=k[g+4>>2]|0;if(!g){n=a;break a}}i=k[m>>2]|0;if(!i){n=m;break}else a=m}if((l|0)==5){l=Rd(4)|0;k[l>>2]=26200;Gf(l|0,2216,320)}if((n|0)!=(f|0)){l=k[n+16>>2]|0;k[d>>2]=k[b>>2];k[e>>2]=l;l=k[h>>2]|0;if(!l){h=Rd(4)|0;k[h>>2]=26200;Gf(h|0,2216,320)}if(!(Xf[k[(k[l>>2]|0)+24>>2]&255](l,d,e)|0)){o=n;r=c;return o|0}}}o=f;r=c;return o|0}function SS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+16|0;e=d+4|0;f=d;g=a+4|0;h=k[g>>2]|0;if(!h){k[b>>2]=g;i=g;r=d;return i|0}g=h+16|0;j=k[g>>2]|0;k[e>>2]=k[c>>2];k[f>>2]=j;j=a+32|0;a=k[j>>2]|0;if(!a){l=Rd(4)|0;k[l>>2]=26200;Gf(l|0,2216,320)}m=a;a=g;g=h;while(1){if(Xf[k[(k[m>>2]|0)+24>>2]&255](m,e,f)|0){h=k[g>>2]|0;if(!h){n=g;o=g;p=7;break}else q=h}else{h=k[c>>2]|0;k[e>>2]=k[a>>2];k[f>>2]=h;h=k[j>>2]|0;if(!h){p=9;break}if(!(Xf[k[(k[h>>2]|0)+24>>2]&255](h,e,f)|0)){s=g;p=14;break}h=g+4|0;t=k[h>>2]|0;if(!t){u=h;v=g;p=13;break}else q=t}a=q+16|0;t=k[a>>2]|0;k[e>>2]=k[c>>2];k[f>>2]=t;m=k[j>>2]|0;if(!m){p=4;break}else g=q}if((p|0)==4){l=Rd(4)|0;k[l>>2]=26200;Gf(l|0,2216,320)}else if((p|0)==7){k[b>>2]=o;i=n;r=d;return i|0}else if((p|0)==9){n=Rd(4)|0;k[n>>2]=26200;Gf(n|0,2216,320)}else if((p|0)==13){k[b>>2]=v;i=u;r=d;return i|0}else if((p|0)==14){k[b>>2]=s;i=b;r=d;return i|0}return 0}function TS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+16|0;d=c;e=a+4|0;f=k[e>>2]|0;do if(f){g=k[b+32>>2]|0;h=f;a:while(1){i=k[h+48>>2]|0;do if((g|0)==(i|0)){j=h+16|0;l=g;while(1){l=l+-1|0;if((l|0)<=-1){m=g;break}n=k[b+(l<<2)>>2]|0;o=k[j+(l<<2)>>2]|0;if((n|0)!=(o|0)){p=n;q=o;s=8;break}}if((s|0)==8){s=0;if(p>>>0>q>>>0)m=g;else{s=9;break}}while(1){m=m+-1|0;if((m|0)<=-1){t=h;s=18;break a}l=k[j+(m<<2)>>2]|0;o=k[b+(m<<2)>>2]|0;if((l|0)!=(o|0)){u=l;v=o;break}}if(u>>>0>v>>>0){t=h;s=18;break a}else s=15}else if(g>>>0>i>>>0)if(i>>>0>g>>>0){t=h;s=18;break a}else s=15;else s=9;while(0);if((s|0)==9){s=0;i=k[h>>2]|0;if(!i){w=h;x=h;s=10;break}else y=i}else if((s|0)==15){s=0;i=h+4|0;j=k[i>>2]|0;if(!j){z=i;A=h;s=17;break}else y=j}h=y}if((s|0)==10){k[d>>2]=x;B=w;C=x;break}else if((s|0)==17){k[d>>2]=A;B=z;C=A;break}else if((s|0)==18){k[d>>2]=t;D=d;E=t;F=t;s=20;break}}else{k[d>>2]=e;D=e;E=f;F=e;s=20}while(0);if((s|0)==20)if(!E){B=D;C=F}else{G=E;H=G+56|0;r=c;return H|0}E=KBa(96)|0;F=E+16|0;D=b;b=F+40|0;do{k[F>>2]=k[D>>2];F=F+4|0;D=D+4|0}while((F|0)<(b|0));k[E+56>>2]=0;k[E+88>>2]=1;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=C;k[B>>2]=E;C=k[k[a>>2]>>2]|0;if(!C)I=E;else{k[a>>2]=C;I=k[B>>2]|0}ui(k[a+4>>2]|0,I);I=a+8|0;k[I>>2]=(k[I>>2]|0)+1;G=E;H=G+56|0;r=c;return H|0}function US(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;c=k[a+4>>2]|0;a:do if(c){a=k[b+32>>2]|0;d=c;b:while(1){e=k[d+48>>2]|0;do if((a|0)==(e|0)){f=d+16|0;g=a;while(1){g=g+-1|0;if((g|0)<=-1){h=a;break}i=k[b+(g<<2)>>2]|0;j=k[f+(g<<2)>>2]|0;if((i|0)!=(j|0)){l=i;m=j;n=8;break}}if((n|0)==8){n=0;if(l>>>0>m>>>0)h=a;else{n=9;break}}while(1){h=h+-1|0;if((h|0)<=-1){o=d;break b}g=k[f+(h<<2)>>2]|0;j=k[b+(h<<2)>>2]|0;if((g|0)!=(j|0)){p=g;q=j;break}}if(p>>>0>q>>>0){r=d;n=20;break b}else n=14}else if(a>>>0>e>>>0)if(e>>>0>a>>>0){o=d;break b}else n=14;else n=9;while(0);if((n|0)==9){n=0;e=k[d>>2]|0;if(!e)break a;else s=e}else if((n|0)==14){n=0;e=k[d+4>>2]|0;if(!e)break a;else s=e}d=s}if((n|0)==20){t=r+56|0;return t|0}if(o){r=o;t=r+56|0;return t|0}}while(0);t=Rd(8)|0;x=0;xa(671,t|0,296399);r=x;x=0;if(r&1){r=Hc()|0;Fc(t|0);Sc(r|0)}else{k[t>>2]=47544;Gf(t|0,9024,933)}return 0}function VS(a){a=a|0;return}function WS(a){a=a|0;OBa(a);return}function XS(a){a=a|0;var b=0,c=0,d=0;b=KBa(12)|0;k[b>>2]=30664;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function YS(a,b){a=a|0;b=b|0;var c=0,d=0;k[b>>2]=30664;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return}function ZS(a){a=a|0;return}function _S(a){a=a|0;OBa(a);return}function $S(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=r;r=r+512|0;e=d+392|0;f=d+312|0;g=d+488|0;h=d+472|0;i=d+304|0;j=d+288|0;l=d+272|0;m=d+256|0;n=d+240|0;o=d+160|0;p=d+80|0;q=d+40|0;s=d;t=k[b>>2]|0;b=k[c>>2]|0;if((t|0)==(b|0)){u=0;r=d;return u|0}c=k[a+8>>2]|0;v=a+4|0;a=k[v>>2]|0;k[o>>2]=k[a>>2];w=o+8|0;y=w;z=a+8|0;A=y+40|0;do{k[y>>2]=k[z>>2];y=y+4|0;z=z+4|0}while((y|0)<(A|0));B=a+48|0;C=k[B+4>>2]|0;D=o+48|0;k[D>>2]=k[B>>2];k[D+4>>2]=C;C=o+56|0;k[C>>2]=k[a+56>>2];D=o+60|0;B=k[a+60>>2]|0;k[D>>2]=B;if(B)h0a(B);B=o+64|0;k[B>>2]=k[a+64>>2];E=o+68|0;k[E>>2]=k[a+68>>2];F=o+72|0;G=k[a+72>>2]|0;k[F>>2]=G;if(G)h0a(G);G=k[v>>2]|0;k[p>>2]=k[G>>2];a=p+8|0;y=a;z=G+8|0;A=y+40|0;do{k[y>>2]=k[z>>2];y=y+4|0;z=z+4|0}while((y|0)<(A|0));H=G+48|0;I=k[H+4>>2]|0;J=p+48|0;k[J>>2]=k[H>>2];k[J+4>>2]=I;I=p+56|0;k[I>>2]=k[G+56>>2];J=p+60|0;H=k[G+60>>2]|0;k[J>>2]=H;if(H)h0a(H);H=p+64|0;k[H>>2]=k[G+64>>2];K=p+68|0;k[K>>2]=k[G+68>>2];L=p+72|0;M=k[G+72>>2]|0;k[L>>2]=M;if(M)h0a(M);M=k[c>>2]|0;G=k[M>>2]|0;if((((k[M+4>>2]|0)-G|0)/80|0)>>>0>t>>>0?(M=G,(k[M+(t*80|0)>>2]|0)==8):0){x=0;fb(140,h|0,329672,0);G=x;x=0;if(!(G&1)){K2a(h);y=q;z=M+(t*80|0)+8|0;A=y+40|0;do{k[y>>2]=k[z>>2];y=y+4|0;z=z+4|0}while((y|0)<(A|0));k[o>>2]=4;y=w;z=q;A=y+36|0;do{k[y>>2]=k[z>>2];y=y+4|0;z=z+4|0}while((y|0)<(A|0));k[o+48>>2]=-1;k[o+52>>2]=-1;k[C>>2]=0;C=k[D>>2]|0;k[D>>2]=0;if(C)j0a(C);k[B>>2]=0;k[E>>2]=0;E=k[F>>2]|0;k[F>>2]=0;if(!E)N=26;else{j0a(E);N=26}}}else N=26;do if((N|0)==26){E=k[c>>2]|0;B=k[E>>2]|0;if((((k[E+4>>2]|0)-B|0)/80|0)>>>0>b>>>0?(E=B,(k[E+(b*80|0)>>2]|0)==8):0){x=0;fb(140,g|0,329672,0);B=x;x=0;if(B&1)break;K2a(g);y=s;z=E+(b*80|0)+8|0;A=y+40|0;do{k[y>>2]=k[z>>2];y=y+4|0;z=z+4|0}while((y|0)<(A|0));k[p>>2]=4;y=a;z=s;A=y+36|0;do{k[y>>2]=k[z>>2];y=y+4|0;z=z+4|0}while((y|0)<(A|0));k[p+48>>2]=-1;k[p+52>>2]=-1;k[I>>2]=0;E=k[J>>2]|0;k[J>>2]=0;if(E)j0a(E);k[H>>2]=0;k[K>>2]=0;E=k[L>>2]|0;k[L>>2]=0;if(E)j0a(E)}E=k[c>>2]|0;B=k[E>>2]|0;C=B+(t*80|0)|0;q=C;M=k[E+4>>2]|0;E=k[v>>2]|0;G=B+(b*80|0)|0;O=G;P=M;if((C|0)!=(P|0)){a:do if(((E|0)!=0?(k[C>>2]|0)==(k[o>>2]|0):0)?(Q=k[B+(t*80|0)+40>>2]|0,(Q|0)==(k[o+40>>2]|0)):0){R=B+(t*80|0)+8|0;S=R+(Q<<2)|0;if((R|0)==(S|0))T=E;else{Q=R;R=w;while(1){if((k[Q>>2]|0)!=(k[R>>2]|0)){T=C;break a}Q=Q+4|0;if((Q|0)==(S|0)){T=E;break}else R=R+4|0}}}else T=C;while(0);if((k[T>>2]|0)==8){x=0;R=Ba(591,C|0)|0;S=x;x=0;if(S&1)break;b:do if(R){k[e>>2]=1;S=e+8|0;k[S>>2]=87;k[e+40>>2]=1;Q=e+48|0;k[Q>>2]=-1;k[Q+4>>2]=-1;Q=e+56|0;k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=0;k[Q+12>>2]=0;k[Q+16>>2]=0;if(((k[C>>2]|0)==1?(k[B+(t*80|0)+40>>2]|0)==1:0)?(Q=B+(t*80|0)+8|0,(k[Q>>2]|0)==87):0){U=Q;V=S;while(1){V=V+4|0;if((U|0)==(Q|0)){W=C;N=49;break b}U=U+4|0;if((k[U>>2]|0)!=(k[V>>2]|0)){X=M;break}}}else X=M}else{W=C;N=49}while(0);if((N|0)==49){while(1){N=0;C=W+80|0;if((C|0)==(P|0)){Y=P;break}if((k[C>>2]|0)==8){W=C;N=49}else{Y=C;break}}X=Y}Z=X}else Z=q}else Z=q;if((G|0)!=(P|0)){c:do if(((E|0)!=0?(k[G>>2]|0)==(k[p>>2]|0):0)?(C=k[B+(b*80|0)+40>>2]|0,(C|0)==(k[p+40>>2]|0)):0){R=B+(b*80|0)+8|0;V=R+(C<<2)|0;if((R|0)==(V|0))_=E;else{C=R;R=a;while(1){if((k[C>>2]|0)!=(k[R>>2]|0)){_=G;break c}C=C+4|0;if((C|0)==(V|0)){_=E;break}else R=R+4|0}}}else _=G;while(0);if((k[_>>2]|0)==8){x=0;q=Ba(591,G|0)|0;R=x;x=0;if(R&1)break;d:do if(q){k[f>>2]=1;R=f+8|0;k[R>>2]=87;k[f+40>>2]=1;V=f+48|0;k[V>>2]=-1;k[V+4>>2]=-1;V=f+56|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[V+16>>2]=0;if(((k[G>>2]|0)==1?(k[B+(b*80|0)+40>>2]|0)==1:0)?(V=B+(b*80|0)+8|0,(k[V>>2]|0)==87):0){C=V;U=R;while(1){U=U+4|0;if((C|0)==(V|0)){$=G;N=69;break d}C=C+4|0;if((k[C>>2]|0)!=(k[U>>2]|0)){aa=M;break}}}else aa=M}else{$=G;N=69}while(0);if((N|0)==69){while(1){N=0;G=$+80|0;if((G|0)==(P|0)){ba=P;break}if((k[G>>2]|0)==8){$=G;N=69}else{ba=G;break}}aa=ba}ca=aa}else ca=O}else ca=O;k[j>>2]=M;k[j+4>>2]=M;k[j+8>>2]=0;k[j+12>>2]=0;k[l>>2]=ca;k[l+4>>2]=M;k[l+8>>2]=p;k[l+12>>2]=E;k[m>>2]=M;k[m+4>>2]=M;k[m+8>>2]=0;k[m+12>>2]=0;k[n>>2]=Z;k[n+4>>2]=M;k[n+8>>2]=o;k[n+12>>2]=E;x=0;k[h>>2]=k[n>>2];k[h+4>>2]=k[n+4>>2];k[h+8>>2]=k[n+8>>2];k[h+12>>2]=k[n+12>>2];k[g>>2]=k[m>>2];k[g+4>>2]=k[m+4>>2];k[g+8>>2]=k[m+8>>2];k[g+12>>2]=k[m+12>>2];k[f>>2]=k[l>>2];k[f+4>>2]=k[l+4>>2];k[f+8>>2]=k[l+8>>2];k[f+12>>2]=k[l+12>>2];k[e>>2]=k[j>>2];k[e+4>>2]=k[j+4>>2];k[e+8>>2]=k[j+8>>2];k[e+12>>2]=k[j+12>>2];P=Va(94,h|0,g|0,f|0,e|0,i|0)|0;G=x;x=0;if(!(G&1)){G=k[L>>2]|0;if(G)j0a(G);G=k[J>>2]|0;if(G)j0a(G);G=k[F>>2]|0;if(G)j0a(G);G=k[D>>2]|0;if(G)j0a(G);u=P;r=d;return u|0}}while(0);u=Hc()|0;d=k[L>>2]|0;if(d)j0a(d);d=k[J>>2]|0;if(d)j0a(d);d=k[F>>2]|0;if(d)j0a(d);d=k[D>>2]|0;if(!d)Sc(u|0);j0a(d);Sc(u|0);return 0}function aT(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==230851?a+4|0:0)|0}function bT(a){a=a|0;return 4424}function cT(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+80|0;f=e;g=k[c>>2]|0;h=k[d>>2]|0;if((g|0)==(h|0)){i=0;r=e;return i|0}d=k[b>>2]|0;b=k[a+8>>2]|0;j=(b|0)==0;l=k[c+8>>2]|0;m=(l|0)==0;n=f+8|0;o=f+40|0;p=f+48|0;q=f+56|0;s=f+8|0;t=f+40|0;u=f+48|0;v=f+56|0;w=k[a+12>>2]|0;x=(w|0)==0;y=b+8|0;z=b+40|0;A=k[c+12>>2]|0;B=(A|0)==0;C=l+8|0;D=l+40|0;E=k[a>>2]|0;F=k[a+4>>2]|0;G=F;H=k[c+4>>2]|0;I=H;J=j|x;K=m|B;L=m|B;B=j|x;x=E;j=E;E=g;a:while(1){if((j|0)==(d|0)){i=1;M=67;break}b:do if((!J?(k[j>>2]|0)==(k[b>>2]|0):0)?(g=k[j+40>>2]|0,(g|0)==(k[z>>2]|0)):0){m=j+8|0;N=m+(g<<2)|0;if((m|0)==(N|0))O=w;else{g=m;m=y;while(1){if((k[g>>2]|0)!=(k[m>>2]|0)){O=j;break b}g=g+4|0;if((g|0)==(N|0)){O=w;break}else m=m+4|0}}}else O=j;while(0);c:do if((!K?(k[E>>2]|0)==(k[l>>2]|0):0)?(m=k[E+40>>2]|0,(m|0)==(k[D>>2]|0)):0){N=E+8|0;g=N+(m<<2)|0;if((N|0)==(g|0))P=A;else{m=N;N=C;while(1){if((k[m>>2]|0)!=(k[N>>2]|0)){P=E;break c}m=m+4|0;if((m|0)==(g|0)){P=A;break}else N=N+4|0}}}else P=E;while(0);N=O+8|0;g=P+8|0;m=k[O>>2]|0;Q=k[P>>2]|0;if((m|0)<(Q|0)){i=1;M=67;break}d:do if((Q|0)>=(m|0)){R=k[O+40>>2]|0;S=k[P+40>>2]|0;if((R|0)!=(S|0))if(R>>>0>S>>>0)break;else{i=1;M=67;break a}S=R;while(1){S=S+-1|0;if((S|0)<=-1)break d;R=k[N+(S<<2)>>2]|0;T=k[g+(S<<2)>>2]|0;if((R|0)!=(T|0)){U=R;V=T;break}}if(U>>>0<=V>>>0){i=1;M=67;break a}}while(0);e:do if((!L?(k[E>>2]|0)==(k[l>>2]|0):0)?(g=k[E+40>>2]|0,(g|0)==(k[D>>2]|0)):0){N=E+8|0;m=N+(g<<2)|0;if((N|0)==(m|0))W=A;else{g=N;N=C;while(1){if((k[g>>2]|0)!=(k[N>>2]|0)){W=E;break e}g=g+4|0;if((g|0)==(m|0)){W=A;break}else N=N+4|0}}}else W=E;while(0);f:do if((!B?(k[j>>2]|0)==(k[b>>2]|0):0)?(N=k[j+40>>2]|0,(N|0)==(k[z>>2]|0)):0){m=j+8|0;g=m+(N<<2)|0;if((m|0)==(g|0))X=w;else{N=m;m=y;while(1){if((k[N>>2]|0)!=(k[m>>2]|0)){X=j;break f}N=N+4|0;if((N|0)==(g|0)){X=w;break}else m=m+4|0}}}else X=j;while(0);m=W+8|0;g=X+8|0;N=k[W>>2]|0;Q=k[X>>2]|0;if((N|0)<(Q|0)){i=0;M=67;break}g:do if((Q|0)>=(N|0)){S=k[W+40>>2]|0;T=k[X+40>>2]|0;if((S|0)!=(T|0))if(S>>>0>T>>>0)break;else{i=0;M=67;break a}T=S;while(1){T=T+-1|0;if((T|0)<=-1)break g;S=k[m+(T<<2)>>2]|0;R=k[g+(T<<2)>>2]|0;if((S|0)!=(R|0)){Y=S;Z=R;break}}if(Y>>>0<=Z>>>0){i=0;M=67;break a}}while(0);h:do if((j|0)==(F|0)){_=x;$=j}else{i:do if(gB(j)|0){k[f>>2]=1;k[s>>2]=87;k[t>>2]=1;g=u;k[g>>2]=-1;k[g+4>>2]=-1;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[v+16>>2]=0;if(((k[x>>2]|0)==1?(k[x+40>>2]|0)==1:0)?(g=x+8|0,(k[g>>2]|0)==87):0){m=g;N=s;do{N=N+4|0;if((m|0)==(g|0)){aa=x;break i}m=m+4|0}while((k[m>>2]|0)==(k[N>>2]|0))}k[a>>2]=G;_=F;$=F;break h}else aa=x;while(0);while(1){N=aa+80|0;if((N|0)==(F|0)){ba=F;break}if((k[N>>2]|0)==8)aa=N;else{ba=N;break}}k[a>>2]=ba;_=ba;$=ba}while(0);j:do if((E|0)==(H|0))ca=E;else{k:do if(gB(E)|0){k[f>>2]=1;k[n>>2]=87;k[o>>2]=1;N=p;k[N>>2]=-1;k[N+4>>2]=-1;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;if(((k[E>>2]|0)==1?(k[E+40>>2]|0)==1:0)?(N=E+8|0,(k[N>>2]|0)==87):0){m=N;g=n;do{g=g+4|0;if((m|0)==(N|0)){da=E;break k}m=m+4|0}while((k[m>>2]|0)==(k[g>>2]|0))}k[c>>2]=I;ca=H;break j}else da=E;while(0);while(1){g=da+80|0;if((g|0)==(H|0)){ea=H;break}if((k[g>>2]|0)==8)da=g;else{ea=g;break}}k[c>>2]=ea;ca=ea}while(0);if((ca|0)==(h|0)){i=0;M=67;break}else{x=_;j=$;E=ca}}if((M|0)==67){r=e;return i|0}return 0}function dT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-24>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function eT(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+48|0;c=b;b=Rd(40)|0;k[c>>2]=47404;d=a+(k[(k[a>>2]|0)+-24>>2]|0)|0;e=c+16|0;k[e>>2]=20796;f=k[d+4>>2]|0;k[c+20>>2]=f;if((f|0)!=0?(x=0,va(k[(k[f>>2]|0)+12>>2]|0,f|0),f=x,x=0,f&1):0){f=Hc()|0;g=M;h=f;i=12}else i=3;do if((i|0)==3){f=c+24|0;j=d+8|0;k[f>>2]=k[j>>2];k[f+4>>2]=k[j+4>>2];k[f+8>>2]=k[j+8>>2];k[c>>2]=20828;k[e>>2]=20852;j=c+4|0;x=0;xa(604,j|0,a+4|0);f=x;x=0;if(f&1){f=Hc()|0;l=M;k[e>>2]=20796;m=c+20|0;n=k[m>>2]|0;if(!n){g=l;h=f;i=12;break}x=0;o=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(!o){g=l;h=f;i=12;break}k[m>>2]=0;g=l;h=f;i=12;break}x=0;xa(729,b|0,c|0);f=x;x=0;if(f&1)p=1;else{x=0;fb(149,b|0,4440,638);x=0;p=0}f=Hc()|0;l=M;k[c>>2]=20828;k[c+16>>2]=20852;K2a(j);k[e>>2]=20796;j=c+20|0;m=k[j>>2]|0;if(m){x=0;o=Ba(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;m=x;x=0;if(m&1){m=Hc(0)|0;Fg(m)}if(o)k[j>>2]=0}if(p){q=l;s=f}else{t=l;u=f;Sc(u|0)}}while(0);if((i|0)==12){q=g;s=h}Fc(b|0);t=q;u=s;Sc(u|0)}function fT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=a+16|0;d=a+20|0;k[d>>2]=0;k[a+24>>2]=0;k[a+28>>2]=0;k[a+32>>2]=-1;e=a+36|0;k[e>>2]=21368;k[a>>2]=30724;k[c>>2]=30748;f=a+4|0;x=0;xa(604,f|0,b+4|0);g=x;x=0;do if(!(g&1)){k[a>>2]=30784;k[a+16>>2]=30816;k[e>>2]=30844;x=0;xa(608,c|0,b+(k[(k[b>>2]|0)+-24>>2]|0)|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;k[a>>2]=30724;k[c>>2]=30748;K2a(f);j=i;l=h;break}else return}else{h=Hc()|0;j=M;l=h}while(0);k[c>>2]=20796;c=k[d>>2]|0;if(!c)Sc(l|0);x=0;j=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!j)Sc(l|0);k[d>>2]=0;Sc(l|0)}function gT(a){a=a|0;var b=0,c=0;k[a>>2]=30724;k[a+16>>2]=30748;K2a(a+4|0);k[a+16>>2]=20796;b=a+20|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function hT(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=30724;k[a+16>>2]=30748;K2a(a+4|0);k[a+16>>2]=20796;b=a+20|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function iT(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(40)|0;x=0;i[c>>0]=i[b>>0]|0;fb(236,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-28>>2]|0)|0}return 0}function jT(a){a=a|0;var b=0;b=Rd(40)|0;x=0;xa(730,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,4440,638)}function kT(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=30724;a=b+16|0;k[a>>2]=30748;K2a(b+4|0);k[a>>2]=20796;a=b+20|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function lT(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=30724;a=b+16|0;k[a>>2]=30748;K2a(b+4|0);k[a>>2]=20796;a=b+20|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function mT(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(40)|0;x=0;i[c>>0]=i[b>>0]|0;fb(236,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-28>>2]|0)|0}return 0}function nT(a){a=a|0;jT(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function oT(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b>>2]=30724;a=b+16|0;k[a>>2]=30748;K2a(b+4|0);k[a>>2]=20796;a=b+20|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function pT(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;k[b>>2]=30724;a=b+16|0;k[a>>2]=30748;K2a(b+4|0);k[a>>2]=20796;a=b+20|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function qT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=a+16|0;d=a+20|0;k[d>>2]=0;k[a+24>>2]=0;k[a+28>>2]=0;k[a+32>>2]=-1;e=a+36|0;k[e>>2]=21368;k[a>>2]=30724;k[c>>2]=30748;f=a+4|0;x=0;xa(604,f|0,b+4|0);g=x;x=0;do if(!(g&1)){k[a>>2]=30784;k[a+16>>2]=30816;k[e>>2]=30844;x=0;xa(608,c|0,b+(k[(k[b>>2]|0)+-24>>2]|0)|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;k[a>>2]=30724;k[c>>2]=30748;K2a(f);j=i;l=h;break}else return}else{h=Hc()|0;j=M;l=h}while(0);k[c>>2]=20796;c=k[d>>2]|0;if(!c)Sc(l|0);x=0;j=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!j)Sc(l|0);k[d>>2]=0;Sc(l|0)}function rT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-24>>2]|0)|0;d=a+16|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+20>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+24|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+36|0;k[h>>2]=21368;k[a>>2]=30724;k[a+16>>2]=30748;x=0;xa(604,a+4|0,b+4|0);b=x;x=0;if(!(b&1)){k[a>>2]=30784;k[d>>2]=30816;k[h>>2]=30844;return}h=Hc()|0;b=M;k[d>>2]=20796;d=a+20|0;a=k[d>>2]|0;if(!a){f=b;g=h;Sc(g|0)}x=0;e=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!e){f=b;g=h;Sc(g|0)}k[d>>2]=0;f=b;g=h;Sc(g|0)}function sT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;x=0;Ta(k[(k[a>>2]|0)+12>>2]|0,a|0,b|0)|0;b=x;x=0;do if(b&1){c=Hc(4496)|0;d=M;if((d|0)!=(hf(4496)|0)){e=c;f=d;Sc(e|0)}me(c|0)|0;c=a+8|0;d=k[c>>2]|0;if((k[d>>2]|0)!=(k[d+4>>2]|0)){ge();g=c;break}x=0;hb(46);x=0;c=Hc()|0;d=M;x=0;hb(45);h=x;x=0;if(h&1){h=Hc(0)|0;Fg(h)}else{e=c;f=d;Sc(e|0)}}else g=a+8|0;while(0);a=k[g>>2]|0;g=k[a>>2]|0;e=k[a+4>>2]|0;if((g|0)==(e|0)){i=1;return i|0}else j=g;while(1){g=k[j>>2]|0;a=k[j+4>>2]|0;if(!a){if((k[g+4>>2]|0)!=6){i=0;l=12;break}}else{h0a(a);f=(k[g+4>>2]|0)==6;j0a(a);if(!f){i=0;l=12;break}}j=j+8|0;if((j|0)==(e|0)){i=1;l=12;break}}if((l|0)==12)return i|0;return 0}function tT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;a=r;r=r+16|0;c=a;d=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;e=(k[d>>2]|0)!=0;q2a(c,231125,31);x=0;pa(57,e|0,c|0,53,231157,231199);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}else{K2a(c);c=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;r=a;return c|0}return 0}function uT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;a=r;r=r+16|0;c=a;d=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;e=(k[d>>2]|0)!=0;q2a(c,231125,31);x=0;pa(57,e|0,c|0,59,231157,231292);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}else{K2a(c);c=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;r=a;return c|0}return 0}function vT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0;c=r;r=r+208|0;d=c+200|0;e=c+176|0;f=c+164|0;g=c+152|0;h=c+140|0;j=c+128|0;l=c+112|0;m=c+96|0;n=c+88|0;o=c+72|0;p=c+60|0;q=c+48|0;s=c+36|0;t=c+188|0;u=c+24|0;v=c+12|0;w=c;k[a+4>>2]=b;y=b+60|0;kU(e,y);z=k[e>>2]|0;A=e+4|0;B=k[A>>2]|0;do if((z|0)==(B|0))C=z;else{D=z;while(1){E=k[D>>2]|0;x=0;xa(k[(k[E>>2]|0)+12>>2]|0,E|0,a|0);E=x;x=0;if(E&1)break;D=D+4|0;if((D|0)==(B|0)){F=4;break}}if((F|0)==4){C=k[e>>2]|0;break}D=Hc()|0;E=M;G=k[e>>2]|0;if(!G){H=D;I=E;Sc(H|0)}J=k[A>>2]|0;if((J|0)!=(G|0))k[A>>2]=J+(~((J+-4-G|0)>>>2)<<2);OBa(G);H=D;I=E;Sc(H|0)}while(0);e=C;if(C){B=k[A>>2]|0;if((B|0)!=(C|0))k[A>>2]=B+(~((B+-4-e|0)>>>2)<<2);OBa(C)}C=k[b+48>>2]|0;e=k[b+52>>2]|0;if((C|0)!=(e|0)){B=C;do{C=k[B>>2]|0;Tf[k[(k[C>>2]|0)+12>>2]&2047](C,a);B=B+8|0}while((B|0)!=(e|0))}wT(a,b);xT(a,b);yT(a,b);zT(a,b);e=o4(b)|0;do if(e){B=k[e+60>>2]|0;do if((k[B+24>>2]|0)!=(k[B+28>>2]|0)){q2a(f,231394,46);x=0;fb(237,a|0,B+8|0,f|0);C=x;x=0;if(!(C&1)){K2a(f);break}C=Hc()|0;A=M;K2a(f);H=C;I=A;Sc(H|0)}while(0);do if(i[e+78>>0]|0){q2a(g,231441,42);x=0;fb(237,a|0,e+8|0,g|0);B=x;x=0;if(!(B&1)){K2a(g);break}B=Hc()|0;A=M;K2a(g);H=B;I=A;Sc(H|0)}while(0);A=e+32|0;B=k[A>>2]|0;if(!B)K=Vf[k[(k[e>>2]|0)+36>>2]&1023](e)|0;else K=B;if((K|0)!=3){B=k[A>>2]|0;if(!B)L=Vf[k[(k[e>>2]|0)+36>>2]&1023](e)|0;else L=B;if((L|0)!=2){q2a(h,231484,39);x=0;fb(237,a|0,e+8|0,h|0);B=x;x=0;if(!(B&1)){K2a(h);break}B=Hc()|0;A=M;K2a(h);H=B;I=A;Sc(H|0)}}}while(0);Zg(j,y);h=k[j>>2]|0;e=j+4|0;L=k[e>>2]|0;a:do if((h|0)==(L|0))N=h;else{K=b+72|0;g=l+4|0;f=a+8|0;A=n+4|0;B=h;C=0;b:while(1){z=k[B>>2]|0;E=k[z+24>>2]|0;D=i[E>>0]|0;if(!(D&1))O=(D&255)>>>1;else O=k[E+4>>2]|0;do if(!O){if(C){x=0;E=Ba(563,68)|0;D=x;x=0;if(D&1){F=60;break b}k[E+4>>2]=0;k[E+8>>2]=0;k[E>>2]=31248;D=E+12|0;x=0;xa(731,D|0,0);G=x;x=0;if(G&1){P=E;F=50;break b}G=D;x=0;fb(140,m|0,231524,38);J=x;x=0;if(J&1){Q=E;F=62;break b}k[l>>2]=21048;x=0;xa(604,g|0,m|0);J=x;x=0;if(J&1){R=E;F=63;break b}x=0;Ta(564,D|0,l|0)|0;D=x;x=0;if(D&1){S=E;F=64;break b}k[l>>2]=21048;K2a(g);K2a(m);D=k[f>>2]|0;k[n>>2]=G;k[A>>2]=E;h0a(E);J=D+4|0;T=k[J>>2]|0;do if(T>>>0<(k[D+8>>2]|0)>>>0){k[T>>2]=G;k[T+4>>2]=E;k[n>>2]=0;k[A>>2]=0;k[J>>2]=T+8}else{x=0;xa(732,D|0,n|0);U=x;x=0;if(U&1){V=E;F=66;break b}U=k[A>>2]|0;if(!U)break;j0a(U)}while(0);j0a(E);W=C;break}if(i[K>>0]|0){x=0;fb(140,o|0,231563,41);D=x;x=0;if(D&1){F=60;break b}x=0;fb(237,a|0,z+8|0,o|0);D=x;x=0;if(D&1){F=73;break b}K2a(o)}if(i[z+78>>0]|0){x=0;fb(140,p|0,231605,46);D=x;x=0;if(D&1){F=60;break b}x=0;fb(237,a|0,z+8|0,p|0);D=x;x=0;if(D&1){F=78;break b}K2a(p)}D=k[z+52>>2]|0;if((k[D+24>>2]|0)!=(k[D+28>>2]|0)){x=0;fb(140,q|0,231652,41);T=x;x=0;if(T&1){F=60;break b}x=0;fb(237,a|0,D+8|0,q|0);D=x;x=0;if(D&1){F=83;break b}K2a(q)}D=k[z+60>>2]|0;if((k[D+24>>2]|0)==(k[D+28>>2]|0))W=z;else{x=0;fb(140,s|0,231694,39);T=x;x=0;if(T&1){F=60;break b}x=0;fb(237,a|0,D+8|0,s|0);D=x;x=0;if(D&1){F=88;break b}K2a(s);W=z}}else W=C;while(0);if(!(i[z+76>>0]|0)){x=0;D=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;T=x;x=0;if(T&1){F=60;break}i[D+32>>0]=0}B=B+4|0;if((B|0)==(L|0)){F=35;break}else C=W}switch(F|0){case 35:{N=k[j>>2]|0;break a;break}case 50:{C=Hc()|0;B=M;c0a(P);OBa(P);X=B;Y=C;F=61;break}case 60:{C=Hc()|0;X=M;Y=C;F=61;break}case 62:{Z=Hc()|0;_=M;$=Q;F=68;break}case 63:{aa=Hc()|0;ba=M;ca=R;F=65;break}case 64:{C=Hc()|0;B=M;k[l>>2]=21048;K2a(g);aa=C;ba=B;ca=S;F=65;break}case 66:{B=Hc()|0;C=M;K=k[A>>2]|0;if(!K){Z=B;_=C;$=V;F=68}else{j0a(K);Z=B;_=C;$=V;F=68}break}case 73:{C=Hc()|0;B=M;K2a(o);da=C;ea=B;break}case 78:{B=Hc()|0;C=M;K2a(p);da=B;ea=C;break}case 83:{C=Hc()|0;B=M;K2a(q);da=C;ea=B;break}case 88:{B=Hc()|0;C=M;K2a(s);da=B;ea=C;break}}if((F|0)==61){da=Y;ea=X}else if((F|0)==65){K2a(m);Z=aa;_=ba;$=ca;F=68}if((F|0)==68){j0a($);da=Z;ea=_}C=k[j>>2]|0;if(!C){H=da;I=ea;Sc(H|0)}B=k[e>>2]|0;if((B|0)!=(C|0))k[e>>2]=B+(~((B+-4-C|0)>>>2)<<2);OBa(C);H=da;I=ea;Sc(H|0)}while(0);ea=N;if(N){da=k[e>>2]|0;if((da|0)!=(N|0))k[e>>2]=da+(~((da+-4-ea|0)>>>2)<<2);OBa(N)}N=k[y>>2]|0;y=k[b+64>>2]|0;if((N|0)!=(y|0)){ea=N;do{N=k[ea>>2]|0;Tf[k[(k[N>>2]|0)+12>>2]&2047](N,a);ea=ea+8|0}while((ea|0)!=(y|0))}BT(a,b);k[t+4>>2]=0;k[t+8>>2]=0;y=t+4|0;k[t>>2]=y;x=0;ea=Ba(597,b|0)|0;N=x;x=0;c:do if(!(N&1)){da=k[ea>>2]|0;e=k[ea+4>>2]|0;d:do if((da|0)!=(e|0)){j=b+8|0;_=w+8|0;Z=w+1|0;$=w+4|0;ca=da;e:while(1){ba=k[y>>2]|0;f:do if(ba){aa=i[ca>>0]|0;m=i[ca+1>>0]|0;X=i[ca+2>>0]|0;Y=i[ca+3>>0]|0;s=ba;g:while(1){q=i[s+13>>0]|0;p=(aa&255)<(q&255);do if(!p)if((aa&255)<=(q&255)){o=i[s+14>>0]|0;if((m&255)>=(o&255))if((m&255)>(o&255))F=114;else{o=i[s+15>>0]|0;if((X&255)<(o&255)){fa=1;ga=1;F=112;break}if((X&255)>(o&255)){F=114;break}o=i[s+16>>0]|0;fa=Y<<24>>24!=o<<24>>24;ga=(Y&255)<(o&255);F=112}else{fa=1;ga=1;F=112}}else F=114;else{fa=1;ga=1;F=112}while(0);if((F|0)==112){F=0;if(ga&fa)ha=s;else F=114}if((F|0)==114){F=0;do if((q&255)<(aa&255)){ia=1;ja=1}else{if(p)break g;o=i[s+14>>0]|0;if((o&255)<(m&255)){ia=1;ja=1;break}if((o&255)>(m&255))break g;o=i[s+15>>0]|0;if((o&255)<(X&255)){ia=1;ja=1;break}if((o&255)>(X&255))break g;o=i[s+16>>0]|0;ia=o<<24>>24!=Y<<24>>24;ja=(o&255)<(Y&255)}while(0);if(!(ja&ia))break;ha=s+4|0}s=k[ha>>2]|0;if(!s)break f}x=0;fb(140,v|0,231734,38);s=x;x=0;if(s&1){F=100;break e}x=0;xa(586,w|0,k[ca+4>>2]|0);s=x;x=0;if(s&1){F=129;break e}s=i[w>>0]|0;Y=(s&1)==0;x=0;X=Fa(88,v|0,(Y?Z:k[_>>2]|0)|0,(Y?(s&255)>>>1:k[$>>2]|0)|0)|0;s=x;x=0;if(s&1){F=130;break e};k[u>>2]=k[X>>2];k[u+4>>2]=k[X+4>>2];k[u+8>>2]=k[X+8>>2];k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;x=0;fb(237,a|0,j|0,u|0);X=x;x=0;if(X&1){F=131;break e}K2a(u);K2a(w);K2a(v)}while(0);x=0;fb(238,d|0,t|0,ca|0);ba=x;x=0;if(ba&1){F=100;break}ca=ca+12|0;if((ca|0)==(e|0))break d}if((F|0)==100){ca=Hc()|0;ka=ca;la=M;F=102;break c}else if((F|0)==129){ca=Hc()|0;ma=ca;na=M}else if((F|0)==130){ca=Hc()|0;oa=ca;pa=M;F=132}else if((F|0)==131){ca=Hc()|0;j=M;K2a(u);oa=ca;pa=j;F=132}if((F|0)==132){K2a(w);ma=oa;na=pa}K2a(v);qa=ma;ra=na;sa=y;ta=t;break c}while(0);if(!(i[b+72>>0]|0)){ua=k[y>>2]|0;oU(t,ua);r=c;return 0}x=0;xa(733,a|0,b|0);e=x;x=0;if(!(e&1)){ua=k[y>>2]|0;oU(t,ua);r=c;return 0}else F=101}else F=101;while(0);if((F|0)==101){c=Hc()|0;ka=c;la=M;F=102}if((F|0)==102){qa=ka;ra=la;sa=y;ta=t}oU(ta,k[sa>>2]|0);H=qa;I=ra;Sc(H|0);return 0}function wT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0;c=r;r=r+544|0;d=c+532|0;e=c+516|0;f=c+528|0;g=c+504|0;h=c+472|0;i=c+496|0;j=c+416|0;l=c+392|0;m=c+376|0;n=c+360|0;o=c+344|0;p=c+336|0;q=c+248|0;s=c+160|0;t=c+488|0;u=c+104|0;v=c+80|0;w=c+64|0;y=c+48|0;z=c+32|0;A=c+20|0;B=c+8|0;C=c;k[d+4>>2]=0;k[d+8>>2]=0;D=d+4|0;k[d>>2]=D;x=0;xa(590,e|0,b+60|0);E=x;x=0;a:do if(!(E&1)){F=k[e>>2]|0;G=e+4|0;H=k[G>>2]|0;do if((F|0)==(H|0))I=F;else{J=F;while(1){K=k[J>>2]|0;k[f>>2]=K;L=K;x=0;N=Ta(565,d|0,k[K+24>>2]|0)|0;K=x;x=0;if(K&1)break;K=N+4|0;O=k[K>>2]|0;if((O|0)==(k[N+8>>2]|0)){x=0;xa(606,N|0,f|0);N=x;x=0;if(N&1)break}else{k[O>>2]=L;k[K>>2]=(k[K>>2]|0)+4}J=J+4|0;if((J|0)==(H|0)){P=4;break}}if((P|0)==4){I=k[e>>2]|0;break}J=Hc()|0;K=M;L=k[e>>2]|0;if(!L){Q=J;R=K;S=k[D>>2]|0;vU(d,S);Sc(Q|0)}O=k[G>>2]|0;if((O|0)!=(L|0))k[G>>2]=O+(~((O+-4-L|0)>>>2)<<2);OBa(L);Q=J;R=K;S=k[D>>2]|0;vU(d,S);Sc(Q|0)}while(0);H=I;if(I){F=k[G>>2]|0;if((F|0)!=(I|0))k[G>>2]=F+(~((F+-4-H|0)>>>2)<<2);OBa(I)}H=b+24|0;x=0;F=Ta(565,d|0,k[H>>2]|0)|0;K=x;x=0;if(!(K&1)){b:do if((k[F+4>>2]|0)-(k[F>>2]|0)>>2>>>0>1){k[g>>2]=0;K=g+4|0;k[K>>2]=0;k[g+8>>2]=0;x=0;J=Ta(565,d|0,k[H>>2]|0)|0;L=x;x=0;do if(!(L&1)){O=k[J>>2]|0;while(1){x=0;N=Ta(565,d|0,k[H>>2]|0)|0;T=x;x=0;if(T&1){P=30;break}T=O+4|0;if((T|0)==(k[N+4>>2]|0)){P=34;break}x=0;fb(140,h|0,231773,28);N=x;x=0;if(N&1){P=30;break}x=0;Fa(131,g|0,h|0,(k[T>>2]|0)+8|0)|0;N=x;x=0;if(N&1){P=33;break}K2a(h);O=T}if((P|0)==30){O=Hc()|0;U=O;V=M;P=32;break}else if((P|0)==33){O=Hc()|0;T=M;K2a(h);W=O;X=T;break}else if((P|0)==34){x=0;xa(731,j|0,0);T=x;x=0;if(T&1){P=31;break}x=0;xa(734,i|0,j|0);T=x;x=0;if(T&1){T=Hc()|0;O=M;N=j+20|0;k[N>>2]=31332;k[j>>2]=31296;k[j+36>>2]=31356;K2a(j+8|0);k[N>>2]=31388;k[N+-20>>2]=31416;k[N+16>>2]=31440;K2a(j+24|0);k[j+36>>2]=20796;N=j+40|0;Y=k[N>>2]|0;if(Y){x=0;Z=Ba(k[(k[Y>>2]|0)+16>>2]|0,Y|0)|0;Y=x;x=0;if(Y&1){Y=Hc(0)|0;Fg(Y)}if(Z)k[N>>2]=0}W=T;X=O;break}O=j+20|0;k[O>>2]=31332;k[j>>2]=31296;k[j+36>>2]=31356;K2a(j+8|0);k[O>>2]=31388;k[O+-20>>2]=31416;k[O+16>>2]=31440;K2a(j+24|0);k[j+36>>2]=20796;O=j+40|0;T=k[O>>2]|0;if(T){x=0;N=Ba(k[(k[T>>2]|0)+16>>2]|0,T|0)|0;T=x;x=0;if(T&1){T=Hc(0)|0;Fg(T)}if(N)k[O>>2]=0}O=k[i>>2]|0;N=O;x=0;T=Ta(565,d|0,k[H>>2]|0)|0;Z=x;x=0;c:do if(!(Z&1)){Y=k[k[T>>2]>>2]|0;k[l>>2]=31456;_=Y+8|0;$=k[_+4>>2]|0;aa=l+4|0;k[aa>>2]=k[_>>2];k[aa+4>>2]=$;k[l+12>>2]=k[Y+16>>2];$=k[Y+20>>2]|0;k[l+16>>2]=$;Y=($|0)==0;if(!Y)h0a($);x=0;aa=Ta(566,O|0,l|0)|0;_=x;x=0;if(!(_&1)?(x=0,fb(140,n|0,231802,34),_=x,x=0,!(_&1)):0){k[m>>2]=21048;_=m+4|0;x=0;xa(604,_|0,n|0);ba=x;x=0;if(ba&1){ba=Hc()|0;ca=ba;da=M}else{x=0;ba=Ta(564,aa|0,m|0)|0;aa=x;x=0;do if(aa&1)P=85;else{k[o>>2]=31476;x=0;xa(735,o+4|0,g|0);ea=x;x=0;if(ea&1){P=85;break}x=0;Ta(567,ba|0,o|0)|0;ea=x;x=0;if(ea&1){ea=Hc()|0;fa=M;k[o>>2]=31476;ga=o+4|0;ha=k[ga>>2]|0;if(!ha){ia=ea;ja=fa;break}ka=o+8|0;la=k[ka>>2]|0;if((la|0)==(ha|0))ma=ha;else{na=la;do{la=na+-28|0;k[ka>>2]=la;oa=k[na+-4>>2]|0;if(oa)j0a(oa);K2a(la);na=k[ka>>2]|0}while((na|0)!=(ha|0));ma=k[ga>>2]|0}OBa(ma);ia=ea;ja=fa;break}k[o>>2]=31476;ha=o+4|0;na=k[ha>>2]|0;if(na){ka=o+8|0;la=k[ka>>2]|0;if((la|0)==(na|0))pa=na;else{oa=la;do{la=oa+-28|0;k[ka>>2]=la;qa=k[oa+-4>>2]|0;if(qa)j0a(qa);K2a(la);oa=k[ka>>2]|0}while((oa|0)!=(na|0));pa=k[ha>>2]|0}OBa(pa)}k[m>>2]=21048;K2a(_);K2a(n);k[l>>2]=31456;if(!Y)j0a($);na=k[a+8>>2]|0;k[p>>2]=N;oa=p+4|0;ka=k[i+4>>2]|0;k[oa>>2]=ka;fa=(ka|0)==0;if(!fa)h0a(ka);ea=na+4|0;ga=k[ea>>2]|0;do if(ga>>>0>=(k[na+8>>2]|0)>>>0){x=0;xa(732,na|0,p|0);la=x;x=0;if(la&1){la=Hc()|0;qa=M;ra=k[oa>>2]|0;if(!ra){sa=la;ta=qa;break c}j0a(ra);sa=la;ta=qa;break c}else{qa=k[oa>>2]|0;if(!qa)break;j0a(qa);break}}else{k[ga>>2]=N;k[ga+4>>2]=ka;k[p>>2]=0;k[oa>>2]=0;k[ea>>2]=ga+8}while(0);if(!fa)j0a(ka);ga=k[g>>2]|0;if(ga){ea=k[K>>2]|0;if((ea|0)==(ga|0))ua=ga;else{oa=ea;do{ea=oa+-28|0;k[K>>2]=ea;na=k[oa+-4>>2]|0;if(na)j0a(na);K2a(ea);oa=k[K>>2]|0}while((oa|0)!=(ga|0));ua=k[g>>2]|0}OBa(ua)}break b}while(0);if((P|0)==85){ba=Hc()|0;ia=ba;ja=M}k[m>>2]=21048;K2a(_);ca=ia;da=ja}K2a(n);va=ca;wa=da}else{ba=Hc()|0;va=ba;wa=M}k[l>>2]=31456;if(Y){sa=va;ta=wa}else{j0a($);sa=va;ta=wa}}else{ba=Hc()|0;sa=ba;ta=M}while(0);N=k[i+4>>2]|0;if(!N){W=sa;X=ta;break}j0a(N);W=sa;X=ta;break}}else P=31;while(0);if((P|0)==31){J=Hc()|0;U=J;V=M;P=32}if((P|0)==32){W=U;X=V}J=k[g>>2]|0;if(!J){Q=W;R=X;S=k[D>>2]|0;vU(d,S);Sc(Q|0)}L=k[K>>2]|0;if((L|0)==(J|0))ya=J;else{N=L;do{L=N+-28|0;k[K>>2]=L;O=k[N+-4>>2]|0;if(O)j0a(O);K2a(L);N=k[K>>2]|0}while((N|0)!=(J|0));ya=k[g>>2]|0}OBa(ya);Q=W;R=X;S=k[D>>2]|0;vU(d,S);Sc(Q|0)}while(0);H=k[d>>2]|0;if((H|0)==(D|0)){za=k[D>>2]|0;vU(d,za);r=c;return}F=u+20|0;G=u+36|0;J=u+8|0;N=F+-20|0;K=F+16|0;L=u+24|0;O=u+36|0;T=u+40|0;Z=v+4|0;ba=v+12|0;aa=v+16|0;ga=w+4|0;oa=A+4|0;ka=z+4|0;fa=z+4|0;ea=a+8|0;na=C+4|0;ha=t+4|0;qa=z+8|0;la=H;d:while(1){H=la+28|0;ra=la+32|0;Aa=k[ra>>2]|0;Ca=k[H>>2]|0;if((Aa|0)!=(Ca|0)){Da=Ca;Ca=Aa;Aa=0;while(1){Ea=Aa;Aa=Aa+1|0;if(Aa>>>0>2>>>0){Ga=Da;Ha=Aa;while(1){x=0;fb(143,q|0,k[Ga+(Ea<<2)>>2]|0,1);Ia=x;x=0;if(Ia&1){P=10;break d}x=0;fb(143,s|0,k[(k[H>>2]|0)+(Ha<<2)>>2]|0,1);Ia=x;x=0;if(Ia&1){P=167;break d}x=0;Ia=Ta(568,q|0,s|0)|0;Ja=x;x=0;if(Ja&1){P=168;break d}Dg(s);Dg(q);if(Ia){x=0;xa(731,u|0,0);Ia=x;x=0;if(Ia&1){P=10;break d}x=0;xa(734,t|0,u|0);Ia=x;x=0;if(Ia&1){P=170;break d}k[F>>2]=31332;k[u>>2]=31296;k[G>>2]=31356;K2a(J);k[F>>2]=31388;k[N>>2]=31416;k[K>>2]=31440;K2a(L);k[O>>2]=20796;Ia=k[T>>2]|0;do if(Ia){x=0;Ja=Ba(k[(k[Ia>>2]|0)+16>>2]|0,Ia|0)|0;Ka=x;x=0;if(Ka&1){P=130;break d}if(!Ja)break;k[T>>2]=0}while(0);Ia=k[t>>2]|0;$=k[(k[H>>2]|0)+(Ha<<2)>>2]|0;k[v>>2]=31456;Y=$+8|0;_=k[Y+4>>2]|0;Ja=Z;k[Ja>>2]=k[Y>>2];k[Ja+4>>2]=_;k[ba>>2]=k[$+16>>2];_=k[$+20>>2]|0;k[aa>>2]=_;$=(_|0)==0;Ja=Ia;if(!$)h0a(_);x=0;Y=Ta(566,Ia|0,v|0)|0;Ia=x;x=0;if(Ia&1){La=_;Ma=$;P=176;break d}x=0;fb(140,y|0,231837,52);Ia=x;x=0;if(Ia&1){La=_;Ma=$;P=176;break d}k[w>>2]=21048;x=0;xa(604,ga|0,y|0);Ia=x;x=0;if(Ia&1){Na=_;Oa=$;P=177;break d}x=0;Ia=Ta(564,Y|0,w|0)|0;Y=x;x=0;if(Y&1){Pa=_;Qa=$;P=178;break d};k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;x=0;fb(140,B|0,231890,26);Y=x;x=0;if(Y&1){Ra=_;Sa=$;P=179;break d}x=0;Y=Fa(131,A|0,B|0,(k[(k[H>>2]|0)+(Ea<<2)>>2]|0)+8|0)|0;Ka=x;x=0;if(Ka&1){Ua=_;Va=$;P=180;break d}k[z>>2]=31476;x=0;xa(735,ka|0,Y|0);Y=x;x=0;if(Y&1){Ua=_;Va=$;P=180;break d}x=0;Ta(567,Ia|0,z|0)|0;Ia=x;x=0;if(Ia&1){Wa=_;Xa=$;P=181;break d}k[z>>2]=31476;Ia=k[fa>>2]|0;if(Ia){Y=k[qa>>2]|0;if((Y|0)==(Ia|0))Ya=Ia;else{Ka=Y;do{Y=Ka+-28|0;k[qa>>2]=Y;Za=k[Ka+-4>>2]|0;if(Za)j0a(Za);K2a(Y);Ka=k[qa>>2]|0}while((Ka|0)!=(Ia|0));Ya=k[fa>>2]|0}OBa(Ya)}K2a(B);Ia=k[A>>2]|0;if(Ia){Ka=k[oa>>2]|0;if((Ka|0)==(Ia|0))_a=Ia;else{Y=Ka;do{Ka=Y+-28|0;k[oa>>2]=Ka;Za=k[Y+-4>>2]|0;if(Za)j0a(Za);K2a(Ka);Y=k[oa>>2]|0}while((Y|0)!=(Ia|0));_a=k[A>>2]|0}OBa(_a)}k[w>>2]=21048;K2a(ga);K2a(y);k[v>>2]=31456;if(!$)j0a(_);Ia=k[ea>>2]|0;k[C>>2]=Ja;Y=k[ha>>2]|0;k[na>>2]=Y;Ka=(Y|0)==0;if(!Ka)h0a(Y);Za=Ia+4|0;$a=k[Za>>2]|0;do if($a>>>0<(k[Ia+8>>2]|0)>>>0){k[$a>>2]=Ja;k[$a+4>>2]=Y;k[C>>2]=0;k[na>>2]=0;k[Za>>2]=$a+8}else{x=0;xa(732,Ia|0,C|0);ab=x;x=0;if(ab&1){P=200;break d}ab=k[na>>2]|0;if(!ab)break;j0a(ab)}while(0);if(!Ka)j0a(Y)}Ha=Ha+1|0;Ia=k[ra>>2]|0;$a=k[H>>2]|0;if(Ha>>>0>=Ia-$a>>2>>>0){bb=$a;cb=Ia;break}else Ga=$a}}else{bb=Da;cb=Ca}if(Aa>>>0>=cb-bb>>2>>>0)break;else{Da=bb;Ca=cb}}}Ca=k[la+4>>2]|0;if(!Ca){Da=la;while(1){Aa=k[Da+8>>2]|0;if((k[Aa>>2]|0)==(Da|0)){db=Aa;break}else Da=Aa}}else{Da=Ca;while(1){Aa=k[Da>>2]|0;if(!Aa){db=Da;break}else Da=Aa}}if((db|0)==(D|0)){P=110;break}else la=db}switch(P|0){case 10:{eb=Hc()|0;gb=M;break a;break}case 110:{za=k[D>>2]|0;vU(d,za);r=c;return}case 130:{Fg(Hc(0)|0);break}case 167:{hb=Hc()|0;ib=M;P=169;break}case 168:{la=Hc()|0;ea=M;Dg(s);hb=la;ib=ea;P=169;break}case 170:{ea=Hc()|0;la=M;k[F>>2]=31332;k[u>>2]=31296;k[G>>2]=31356;K2a(J);k[F>>2]=31388;k[N>>2]=31416;k[K>>2]=31440;K2a(L);k[O>>2]=20796;ka=k[T>>2]|0;if(ka){x=0;aa=Ba(k[(k[ka>>2]|0)+16>>2]|0,ka|0)|0;ka=x;x=0;if(ka&1){ka=Hc(0)|0;Fg(ka)}if(aa)k[T>>2]=0}Q=ea;R=la;S=k[D>>2]|0;vU(d,S);Sc(Q|0);break}case 176:{jb=Hc()|0;kb=M;lb=La;mb=Ma;P=198;break}case 177:{nb=Hc()|0;ob=M;pb=Oa;qb=Na;P=197;break}case 178:{rb=Hc()|0;sb=M;tb=Qa;ub=Pa;P=196;break}case 179:{vb=Hc()|0;wb=M;xb=Sa;yb=Ra;P=189;break}case 180:{zb=Hc()|0;Ab=M;Bb=Va;Cb=Ua;P=188;break}case 181:{la=Hc()|0;ea=M;k[z>>2]=31476;aa=k[fa>>2]|0;if(!aa){zb=la;Ab=ea;Bb=Xa;Cb=Wa;P=188}else{ka=k[qa>>2]|0;if((ka|0)==(aa|0))Db=aa;else{ba=ka;do{ka=ba+-28|0;k[qa>>2]=ka;Z=k[ba+-4>>2]|0;if(Z)j0a(Z);K2a(ka);ba=k[qa>>2]|0}while((ba|0)!=(aa|0));Db=k[fa>>2]|0}OBa(Db);zb=la;Ab=ea;Bb=Xa;Cb=Wa;P=188}break}case 200:{aa=Hc()|0;ba=M;qa=k[na>>2]|0;if(!qa){Eb=aa;Fb=ba}else{j0a(qa);Eb=aa;Fb=ba}break}}if((P|0)==169){Dg(q);Q=hb;R=ib;S=k[D>>2]|0;vU(d,S);Sc(Q|0)}else if((P|0)==188){K2a(B);vb=zb;wb=Ab;xb=Bb;yb=Cb;P=189}if((P|0)==189){ba=k[A>>2]|0;if(!ba){rb=vb;sb=wb;tb=xb;ub=yb;P=196}else{aa=k[oa>>2]|0;if((aa|0)==(ba|0))Gb=ba;else{qa=aa;do{aa=qa+-28|0;k[oa>>2]=aa;T=k[qa+-4>>2]|0;if(T)j0a(T);K2a(aa);qa=k[oa>>2]|0}while((qa|0)!=(ba|0));Gb=k[A>>2]|0}OBa(Gb);rb=vb;sb=wb;tb=xb;ub=yb;P=196}}if((P|0)==196){k[w>>2]=21048;K2a(ga);nb=rb;ob=sb;pb=tb;qb=ub;P=197}if((P|0)==197){K2a(y);jb=nb;kb=ob;lb=qb;mb=pb;P=198}if((P|0)==198){k[v>>2]=31456;if(mb){Eb=jb;Fb=kb}else{j0a(lb);Eb=jb;Fb=kb}}ba=k[ha>>2]|0;if(!ba){Q=Eb;R=Fb;S=k[D>>2]|0;vU(d,S);Sc(Q|0)}j0a(ba);Q=Eb;R=Fb;S=k[D>>2]|0;vU(d,S);Sc(Q|0)}else P=11}else P=11;while(0);if((P|0)==11){P=Hc()|0;eb=P;gb=M}Q=eb;R=gb;S=k[D>>2]|0;vU(d,S);Sc(Q|0)}function xT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0;c=r;r=r+352|0;d=c+340|0;e=c+328|0;f=c+312|0;g=c+324|0;h=c+120|0;j=c+224|0;l=c+136|0;m=c+108|0;n=c+96|0;o=c+60|0;p=c+24|0;q=c+12|0;s=c;k[d+4>>2]=0;k[d+8>>2]=0;t=d+4|0;k[d>>2]=t;k[e+4>>2]=0;k[e+8>>2]=0;u=e+4|0;k[e>>2]=u;x=0;v=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;a:do if(b&1){w=Hc()|0;y=u;z=w;A=M}else{w=k[v+36>>2]|0;B=k[v+40>>2]|0;if((w|0)==(B|0)){C=u;D=k[C>>2]|0;wU(e,D);E=k[t>>2]|0;vU(d,E);r=c;return}F=f+4|0;G=n+4|0;H=p+24|0;I=p+12|0;J=p+16|0;K=p+8|0;L=o+24|0;N=o+12|0;O=o+16|0;P=o+8|0;Q=o+28|0;R=p+28|0;S=w;b:while(1){w=(k[S>>2]|0)+60|0;x=0;xa(590,f|0,w|0);T=x;x=0;if(T&1){U=6;break}T=k[f>>2]|0;V=k[F>>2]|0;if((T|0)==(V|0))W=T;else{X=T;do{T=k[X>>2]|0;k[g>>2]=T;Y=T;if(!(i[T+77>>0]|0)){Z=k[T+24>>2]|0;_=k[u>>2]|0;c:do if(_){$=i[Z>>0]|0;aa=($&1)==0;ba=aa?($&255)>>>1:k[Z+4>>2]|0;$=aa?Z+1|0:k[Z+8>>2]|0;aa=_;while(1){ca=aa+16|0;da=i[ca>>0]|0;ea=(da&1)==0;fa=ea?(da&255)>>>1:k[aa+20>>2]|0;da=ea?ca+1|0:k[aa+24>>2]|0;ca=fa>>>0>>0;ea=ZLa($,da,ca?fa:ba)|0;ga=ba>>>0>>0;if((((ea|0)==0?(ga?-2147483648:0):ea)|0)<0)ha=aa;else{ea=ZLa(da,$,ga?ba:fa)|0;if((((ea|0)==0?(ca?-2147483648:0):ea)|0)>=0)break;ha=aa+4|0}aa=k[ha>>2]|0;if(!aa)break c}x=0;aa=Ta(569,e|0,Z|0)|0;ba=x;x=0;if(ba&1){U=18;break b}ba=k[aa>>2]|0;x=0;fb(140,h|0,231917,38);aa=x;x=0;if(aa&1){U=18;break b}x=0;fb(237,a|0,ba+8|0,h|0);ba=x;x=0;if(ba&1){U=30;break b}K2a(h)}while(0);x=0;fb(143,j|0,T|0,1);_=x;x=0;if(_&1){U=18;break b}x=0;_=Ta(565,d|0,Z|0)|0;ba=x;x=0;if(ba&1){U=37;break b}ba=k[_>>2]|0;aa=k[_+4>>2]|0;if((ba|0)!=(aa|0)){_=T+32|0;$=T+78|0;ea=T+79|0;ca=ba;do{ba=k[ca>>2]|0;x=0;fb(143,l|0,ba|0,1);fa=x;x=0;if(fa&1){U=36;break b}x=0;fa=Ta(568,l|0,j|0)|0;ga=x;x=0;if(ga&1){U=42;break b}if(fa){fa=k[ba+32>>2]|0;if(!fa){x=0;ga=Ba(k[(k[ba>>2]|0)+36>>2]|0,ba|0)|0;da=x;x=0;if(da&1){U=42;break b}else ia=ga}else ia=fa;fa=k[_>>2]|0;if(!fa){x=0;ga=Ba(k[(k[T>>2]|0)+36>>2]|0,T|0)|0;da=x;x=0;if(da&1){U=42;break b}else ja=ga}else ja=fa;do if((ia|0)==(ja|0)){if((i[ba+78>>0]|0)!=0^(i[$>>0]|0)!=0){U=52;break}if((i[ba+79>>0]|0)!=0^(i[ea>>0]|0)!=0){U=52;break}x=0;fa=Ta(k[(k[l>>2]|0)+24>>2]|0,l|0,j|0)|0;ga=x;x=0;if(ga&1){U=42;break b}if(fa)U=52}else U=52;while(0);if((U|0)==52){U=0;x=0;fb(140,m|0,231956,45);fa=x;x=0;if(fa&1){U=42;break b}x=0;fb(237,a|0,ba+8|0,m|0);fa=x;x=0;if(fa&1){U=55;break b}K2a(m)}Dg(l)}else Dg(l);ca=ca+4|0}while((ca|0)!=(aa|0))}x=0;aa=Ta(565,d|0,Z|0)|0;ca=x;x=0;if(ca&1){U=37;break b}ca=aa+4|0;ea=k[ca>>2]|0;if((ea|0)==(k[aa+8>>2]|0)){x=0;xa(606,aa|0,g|0);aa=x;x=0;if(aa&1){U=37;break b}}else{k[ea>>2]=Y;k[ca>>2]=(k[ca>>2]|0)+4}Dg(j)}X=X+4|0}while((X|0)!=(V|0));W=k[f>>2]|0}V=W;if(W){X=k[F>>2]|0;if((X|0)!=(W|0))k[F>>2]=X+(~((X+-4-V|0)>>>2)<<2);OBa(W)}x=0;xa(736,n|0,w|0);V=x;x=0;if(V&1){U=6;break}V=k[n>>2]|0;X=k[G>>2]|0;if((V|0)==(X|0))ka=V;else{ca=V;do{V=k[ca>>2]|0;ea=k[V+24>>2]|0;x=0;aa=Ta(569,e|0,ea|0)|0;$=x;x=0;if($&1){U=80;break b}$=k[aa>>2]|0;do if(!$)k[aa>>2]=V;else{x=0;xa(737,o|0,$|0);T=x;x=0;if(T&1){U=80;break b}T=k[(k[o>>2]|0)+24>>2]|0;x=0;xa(737,p|0,V|0);_=x;x=0;if(_&1){U=106;break b}x=0;_=Ta(T|0,o|0,p|0)|0;T=x;x=0;if(T&1){U=107;break b}k[p>>2]=37700;T=k[H>>2]|0;if(T){fa=k[R>>2]|0;if((fa|0)==(T|0))la=T;else{ga=fa;while(1){fa=ga+-8|0;k[R>>2]=fa;da=k[ga+-4>>2]|0;if(!da)ma=fa;else{j0a(da);ma=k[R>>2]|0}if((ma|0)==(T|0))break;else ga=ma}la=k[H>>2]|0}OBa(la)}k[p>>2]=20456;xh(I,k[J>>2]|0);ga=k[K>>2]|0;if(ga)k0a(ga);k[o>>2]=37700;ga=k[L>>2]|0;if(ga){T=k[Q>>2]|0;if((T|0)==(ga|0))na=ga;else{ba=T;while(1){T=ba+-8|0;k[Q>>2]=T;da=k[ba+-4>>2]|0;if(!da)oa=T;else{j0a(da);oa=k[Q>>2]|0}if((oa|0)==(ga|0))break;else ba=oa}na=k[L>>2]|0}OBa(na)}k[o>>2]=20456;xh(N,k[O>>2]|0);ba=k[P>>2]|0;if(ba)k0a(ba);if(!_)break;ba=k[aa>>2]|0;x=0;fb(140,q|0,232002,36);ga=x;x=0;if(ga&1){U=80;break b}x=0;fb(237,a|0,ba+8|0,q|0);ba=x;x=0;if(ba&1){U=125;break b}K2a(q)}while(0);x=0;V=Ta(565,d|0,ea|0)|0;$=x;x=0;if($&1){U=80;break b}if((k[V>>2]|0)!=(k[V+4>>2]|0)){V=k[aa>>2]|0;x=0;fb(140,s|0,232039,38);$=x;x=0;if($&1){U=80;break b}x=0;fb(237,a|0,V+8|0,s|0);V=x;x=0;if(V&1){U=131;break b}K2a(s)}ca=ca+4|0}while((ca|0)!=(X|0));ka=k[n>>2]|0}X=ka;if(ka){ca=k[G>>2]|0;if((ca|0)!=(ka|0))k[G>>2]=ca+(~((ca+-4-X|0)>>>2)<<2);OBa(ka)}S=S+4|0;if((S|0)==(B|0)){C=u;U=5;break}}switch(U|0){case 5:{D=k[C>>2]|0;wU(e,D);E=k[t>>2]|0;vU(d,E);r=c;return}case 6:{y=u;z=Hc()|0;A=M;break a;break}case 18:{pa=Hc()|0;qa=M;break}case 30:{B=Hc()|0;S=M;K2a(h);pa=B;qa=S;break}case 36:{ra=Hc()|0;sa=M;U=38;break}case 37:{ra=Hc()|0;sa=M;U=38;break}case 42:{ta=Hc()|0;ua=M;U=59;break}case 55:{S=Hc()|0;B=M;K2a(m);ta=S;ua=B;U=59;break}case 80:{va=Hc()|0;wa=M;U=133;break}case 106:{ya=Hc()|0;za=M;U=116;break}case 107:{B=Hc()|0;S=M;k[p>>2]=37700;X=k[H>>2]|0;if(X){ca=k[R>>2]|0;if((ca|0)==(X|0))Aa=X;else{w=ca;while(1){ca=w+-8|0;k[R>>2]=ca;V=k[w+-4>>2]|0;if(!V)Ca=ca;else{j0a(V);Ca=k[R>>2]|0}if((Ca|0)==(X|0))break;else w=Ca}Aa=k[H>>2]|0}OBa(Aa)}k[p>>2]=20456;xh(I,k[J>>2]|0);w=k[K>>2]|0;if(!w){ya=B;za=S;U=116}else{k0a(w);ya=B;za=S;U=116}break}case 125:{w=Hc()|0;X=M;K2a(q);va=w;wa=X;U=133;break}case 131:{X=Hc()|0;w=M;K2a(s);va=X;wa=w;U=133;break}}if((U|0)==38){Da=ra;Ea=sa;U=65}else if((U|0)==59){Dg(l);Da=ta;Ea=ua;U=65}else if((U|0)==116){k[o>>2]=37700;w=k[L>>2]|0;if(w){X=k[Q>>2]|0;if((X|0)==(w|0))Fa=w;else{R=X;while(1){X=R+-8|0;k[Q>>2]=X;V=k[R+-4>>2]|0;if(!V)Ga=X;else{j0a(V);Ga=k[Q>>2]|0}if((Ga|0)==(w|0))break;else R=Ga}Fa=k[L>>2]|0}OBa(Fa)}k[o>>2]=20456;xh(N,k[O>>2]|0);R=k[P>>2]|0;if(!R){va=ya;wa=za;U=133}else{k0a(R);va=ya;wa=za;U=133}}if((U|0)==65){Dg(j);pa=Da;qa=Ea}else if((U|0)==133){R=k[n>>2]|0;if(!R){Ha=va;Ia=wa;Ja=u;Ka=k[Ja>>2]|0;wU(e,Ka);La=k[t>>2]|0;vU(d,La);Sc(Ha|0)}w=k[G>>2]|0;if((w|0)!=(R|0))k[G>>2]=w+(~((w+-4-R|0)>>>2)<<2);OBa(R);Ha=va;Ia=wa;Ja=u;Ka=k[Ja>>2]|0;wU(e,Ka);La=k[t>>2]|0;vU(d,La);Sc(Ha|0)}R=k[f>>2]|0;if(!R){Ha=pa;Ia=qa;Ja=u;Ka=k[Ja>>2]|0;wU(e,Ka);La=k[t>>2]|0;vU(d,La);Sc(Ha|0)}w=k[F>>2]|0;if((w|0)!=(R|0))k[F>>2]=w+(~((w+-4-R|0)>>>2)<<2);OBa(R);Ha=pa;Ia=qa;Ja=u;Ka=k[Ja>>2]|0;wU(e,Ka);La=k[t>>2]|0;vU(d,La);Sc(Ha|0)}while(0);Ha=z;Ia=A;Ja=y;Ka=k[Ja>>2]|0;wU(e,Ka);La=k[t>>2]|0;vU(d,La);Sc(Ha|0)}function yT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;c=r;r=r+48|0;d=c+36|0;e=c+24|0;f=c+12|0;g=c;k[d+4>>2]=0;k[d+8>>2]=0;h=d+4|0;k[d>>2]=h;x=0;j=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;l=x;x=0;a:do if(!(l&1)){m=k[j+40>>2]|0;n=k[j+36>>2]|0;b:do if((m|0)!=(n|0)){o=e+4|0;p=f+4|0;q=f+8|0;s=m;c:while(1){s=s+-4|0;x=0;xa(590,e|0,(k[s>>2]|0)+60|0);t=x;x=0;if(t&1){u=6;break}t=k[e>>2]|0;v=k[o>>2]|0;if((t|0)==(v|0))w=t;else{y=t;do{t=k[y>>2]|0;if(!(i[t+77>>0]|0)){x=0;z=Ta(570,d|0,k[t+24>>2]|0)|0;A=x;x=0;if(A&1){u=18;break c}x=0;A=Ba(563,100)|0;B=x;x=0;if(B&1){u=18;break c}k[A+4>>2]=0;k[A+8>>2]=0;k[A>>2]=31496;B=A+12|0;x=0;fb(143,B|0,t|0,1);C=x;x=0;if(C&1){D=A;u=25;break c}C=B;E=A;i0a(A);k[A+16>>2]=C;F=A+20|0;G=k[F>>2]|0;k[F>>2]=E;if(G)k0a(G);G=k[z>>2]|0;F=z+4|0;H=k[F>>2]|0;do if((G|0)!=(H|0)){I=G;while(1){x=0;J=Ta(568,B|0,k[I>>2]|0)|0;K=x;x=0;if(K&1){L=A;u=36;break c}if(J){N=I;break}I=I+12|0;if((I|0)==(H|0)){N=H;break}}if((N|0)!=(k[F>>2]|0)){I=N+8|0;J=(i[t+76>>0]|0)!=0;if(!(i[I>>0]|0)){if(!J)break;i[I>>0]=1;break}if(!J){x=0;fb(140,g|0,232078,55);J=x;x=0;if(J&1){O=A;u=37;break c}x=0;fb(237,a|0,t+8|0,g|0);J=x;x=0;if(J&1){P=A;u=46;break c}K2a(g)}}else u=31}else u=31;while(0);do if((u|0)==31){u=0;H=i[t+76>>0]|0;k[f>>2]=C;k[p>>2]=A;h0a(A);i[q>>0]=H;B=k[F>>2]|0;if(B>>>0<(k[z+8>>2]|0)>>>0){k[B>>2]=C;k[B+4>>2]=E;k[f>>2]=0;k[p>>2]=0;i[B+8>>0]=H;k[F>>2]=B+12;break}x=0;xa(738,z|0,f|0);B=x;x=0;if(B&1){Q=A;u=39;break c}B=k[p>>2]|0;if(B)j0a(B)}while(0);j0a(A)}y=y+4|0}while((y|0)!=(v|0));w=k[e>>2]|0}v=w;if(w){y=k[o>>2]|0;if((y|0)!=(w|0))k[o>>2]=y+(~((y+-4-v|0)>>>2)<<2);OBa(w)}if((s|0)==(n|0))break b}if((u|0)==6){s=Hc()|0;R=s;S=M;break a}else if((u|0)==18){s=Hc()|0;T=M;U=s;u=19}else if((u|0)==25){s=Hc()|0;q=M;c0a(D);OBa(D);T=q;U=s;u=19}else if((u|0)==36){s=Hc()|0;V=L;W=s;X=M;u=38}else if((u|0)==37){s=Hc()|0;V=O;W=s;X=M;u=38}else if((u|0)==39){s=Hc()|0;q=M;v=k[p>>2]|0;if(!v){Y=s;Z=q;_=Q;u=51}else{j0a(v);Y=s;Z=q;_=Q;u=51}}else if((u|0)==46){q=Hc()|0;s=M;K2a(g);Y=q;Z=s;_=P;u=51}if((u|0)==19){$=U;aa=T}else if((u|0)==38){Y=W;Z=X;_=V;u=51}if((u|0)==51){j0a(_);$=Y;aa=Z}s=k[e>>2]|0;if(!s){ba=$;ca=aa;da=k[h>>2]|0;BU(d,da);Sc(ba|0)}q=k[o>>2]|0;if((q|0)!=(s|0))k[o>>2]=q+(~((q+-4-s|0)>>>2)<<2);OBa(s);ba=$;ca=aa;da=k[h>>2]|0;BU(d,da);Sc(ba|0)}while(0);n=k[d>>2]|0;if((n|0)==(h|0)){ea=k[h>>2]|0;BU(d,ea);r=c;return}m=n;d:while(1){n=k[m+28>>2]|0;s=k[m+32>>2]|0;if((n|0)!=(s|0)){q=n;do{if(!(i[q+8>>0]|0))break d;q=q+12|0}while((q|0)!=(s|0))}s=k[m+4>>2]|0;if(!s){q=m;while(1){o=k[q+8>>2]|0;if((k[o>>2]|0)==(q|0)){fa=o;break}else q=o}}else{q=s;while(1){o=k[q>>2]|0;if(!o){fa=q;break}else q=o}}if((fa|0)==(h|0)){u=66;break}else m=fa}if((u|0)==66){ea=k[h>>2]|0;BU(d,ea);r=c;return}x=0;m=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;q=x;x=0;if(!(q&1)){i[m+32>>0]=0;ea=k[h>>2]|0;BU(d,ea);r=c;return}else u=7}else u=7;while(0);if((u|0)==7){u=Hc()|0;R=u;S=M}ba=R;ca=S;da=k[h>>2]|0;BU(d,da);Sc(ba|0)}function zT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;a=r;r=r+64|0;c=a+40|0;d=a+36|0;e=a+24|0;f=a+12|0;g=a;h=f+4|0;k[h>>2]=0;j=f+8|0;k[j>>2]=0;l=f+4|0;k[f>>2]=l;x=0;m=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;n=x;x=0;a:do if(!(n&1)){o=m+36|0;p=k[o>>2]|0;q=m+40|0;s=k[q>>2]|0;b:do if((p|0)!=(s|0)){t=l;u=p;do{v=k[u>>2]|0;w=v;x=0;y=Ba(598,v|0)|0;z=x;x=0;if(z&1){A=9;break}if(!((v|0)==(b|0)|(y|0)==0)?(z=k[y+52>>2]|0,(k[z+24>>2]|0)!=(k[z+28>>2]|0)):0){z=k[l>>2]|0;do if(z){y=z;while(1){B=k[y+16>>2]|0;if(v>>>0>>0){C=k[y>>2]|0;if(!C){D=y;E=y;A=18;break}else F=C}else{if(B>>>0>=v>>>0){G=y;A=23;break}B=y+4|0;C=k[B>>2]|0;if(!C){H=B;I=y;A=22;break}else F=C}y=F}if((A|0)==18){A=0;k[d>>2]=E;J=D;K=E;break}else if((A|0)==22){A=0;k[d>>2]=I;J=H;K=I;break}else if((A|0)==23){A=0;k[d>>2]=G;J=d;K=G;break}}else{k[d>>2]=l;J=l;K=t}while(0);if(!(k[J>>2]|0)){x=0;v=Ba(563,20)|0;z=x;x=0;if(z&1){A=9;break}k[v+16>>2]=w;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=K;k[J>>2]=v;z=k[k[f>>2]>>2]|0;if(!z)L=v;else{k[f>>2]=z;L=k[J>>2]|0}ui(k[h>>2]|0,L);k[j>>2]=(k[j>>2]|0)+1}}u=u+4|0}while((u|0)!=(s|0));if((A|0)==9){u=Hc()|0;N=M;O=u;break a}u=k[o>>2]|0;t=k[q>>2]|0;if((u|0)!=(t|0)){z=u;c:while(1){u=k[z>>2]|0;x=0;v=Ba(598,u|0)|0;y=x;x=0;if(y&1){A=8;break}if((v|0)!=0?(y=k[v+80>>2]|0,C=k[v+84>>2]|0,(y|0)!=(C|0)):0){v=y;do{y=k[(k[v>>2]|0)+24>>2]|0;x=0;B=Ba(k[(k[y>>2]|0)+16>>2]|0,y|0)|0;P=x;x=0;if(P&1){A=7;break c}P=k[B+24>>2]|0;x=0;fb(140,c|0,232134,23);B=x;x=0;if(B&1){A=7;break c}x=0;pa(57,(P|0)!=0|0,c|0,1545,231157,232158);P=x;x=0;if(P&1){A=40;break c}K2a(c);x=0;P=Ba(k[(k[y>>2]|0)+16>>2]|0,y|0)|0;y=x;x=0;if(y&1){A=7;break c}y=iDa(k[P+24>>2]|0,4520,5312,0)|0;if((y|0)!=0?(P=k[l>>2]|0,(P|0)!=0):0){B=l;Q=P;d:while(1){R=Q;while(1){if((k[R+16>>2]|0)>>>0>=y>>>0){S=R;break}R=k[R+4>>2]|0;if(!R){T=B;break d}}Q=k[S>>2]|0;if(!Q){T=S;break}else B=S}if((T|0)!=(l|0)?y>>>0>=(k[T+16>>2]|0)>>>0:0){B=k[T+4>>2]|0;if(!B){Q=T;while(1){R=k[Q+8>>2]|0;if((k[R>>2]|0)==(Q|0)){U=R;break}else Q=R}}else{Q=B;while(1){y=k[Q>>2]|0;if(!y){U=Q;break}else Q=y}}if((k[f>>2]|0)==(T|0))k[f>>2]=U;k[j>>2]=(k[j>>2]|0)+-1;hk(P,T);OBa(T)}}v=v+8|0}while((v|0)!=(C|0))}C=k[u+48>>2]|0;v=k[u+52>>2]|0;if((C|0)!=(v|0)){w=C;do{C=k[(k[w>>2]|0)+24>>2]|0;x=0;Q=Ba(k[(k[C>>2]|0)+16>>2]|0,C|0)|0;B=x;x=0;if(B&1){A=6;break c}B=k[Q+12>>2]|0;x=0;fb(140,e|0,232134,23);Q=x;x=0;if(Q&1){A=6;break c}x=0;pa(57,(B|0)!=0|0,e|0,1551,231157,232273);B=x;x=0;if(B&1){A=63;break c}K2a(e);x=0;B=Ba(k[(k[C>>2]|0)+16>>2]|0,C|0)|0;C=x;x=0;if(C&1){A=6;break c}C=iDa(k[B+12>>2]|0,4520,5312,0)|0;x=0;fb(140,g|0,329672,0);B=x;x=0;if(B&1){A=6;break c}x=0;pa(57,(C|0)!=0|0,g|0,247,231157,232397);B=x;x=0;if(B&1){A=81;break c}K2a(g);B=k[w>>2]|0;do if((k[B+32>>2]|0)!=(k[B+36>>2]|0)?(Q=k[l>>2]|0,(Q|0)!=0):0){y=l;R=Q;e:while(1){V=R;while(1){if((k[V+16>>2]|0)>>>0>=C>>>0){W=V;break}V=k[V+4>>2]|0;if(!V){X=y;break e}}R=k[W>>2]|0;if(!R){X=W;break}else y=W}if((X|0)==(l|0))break;if(C>>>0<(k[X+16>>2]|0)>>>0)break;y=k[X+4>>2]|0;if(!y){R=X;while(1){V=k[R+8>>2]|0;if((k[V>>2]|0)==(R|0)){Y=V;break}else R=V}}else{R=y;while(1){V=k[R>>2]|0;if(!V){Y=R;break}else R=V}}if((k[f>>2]|0)==(X|0))k[f>>2]=Y;k[j>>2]=(k[j>>2]|0)+-1;hk(Q,X);OBa(X)}while(0);w=w+8|0}while((w|0)!=(v|0))}z=z+4|0;if((z|0)==(t|0))break b}if((A|0)==6){t=Hc()|0;N=M;O=t;break a}else if((A|0)==7){t=Hc()|0;N=M;O=t;break a}else if((A|0)==8){t=Hc()|0;N=M;O=t;break a}else if((A|0)==40){t=Hc()|0;z=M;K2a(c);N=z;O=t;break a}else if((A|0)==63){t=Hc()|0;z=M;K2a(e);N=z;O=t;break a}else if((A|0)==81){t=Hc()|0;z=M;K2a(g);Z=t;_=z;$=l;aa=k[$>>2]|0;CU(f,aa);Sc(Z|0)}}}while(0);if(!(k[j>>2]|0)){ba=k[l>>2]|0;CU(f,ba);r=a;return}x=0;q=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;o=x;x=0;if(!(o&1)){i[q+32>>0]=0;ba=k[l>>2]|0;CU(f,ba);r=a;return}else A=10}else A=10;while(0);if((A|0)==10){A=Hc()|0;N=M;O=A}Z=O;_=N;$=l;aa=k[$>>2]|0;CU(f,aa);Sc(Z|0)}function AT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+48|0;e=d+24|0;f=d+8|0;g=d;h=KBa(68)|0;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=31248;i=h+12|0;x=0;xa(731,i|0,3);j=x;x=0;if(j&1){j=Hc()|0;c0a(h);OBa(h);Sc(j|0)}j=i;k[e>>2]=31456;l=b;m=k[l+4>>2]|0;n=e+4|0;k[n>>2]=k[l>>2];k[n+4>>2]=m;k[e+12>>2]=k[b+8>>2];m=k[b+12>>2]|0;k[e+16>>2]=m;b=(m|0)==0;if(!b)h0a(m);x=0;n=Ta(566,i|0,e|0)|0;i=x;x=0;do if(!(i&1)?(k[f>>2]=21048,l=f+4|0,x=0,xa(604,l|0,c|0),o=x,x=0,!(o&1)):0){x=0;Ta(564,n|0,f|0)|0;o=x;x=0;if(o&1){o=Hc()|0;p=M;k[f>>2]=21048;K2a(l);q=p;s=o;break}k[f>>2]=21048;K2a(l);k[e>>2]=31456;if(!b)j0a(m);l=k[a+8>>2]|0;k[g>>2]=j;o=g+4|0;k[o>>2]=h;h0a(h);p=l+4|0;t=k[p>>2]|0;if(t>>>0<(k[l+8>>2]|0)>>>0){k[t>>2]=j;k[t+4>>2]=h;k[g>>2]=0;k[o>>2]=0;k[p>>2]=t+8;j0a(h);r=d;return}x=0;xa(732,l|0,g|0);l=x;x=0;if(l&1){l=Hc()|0;t=M;p=k[o>>2]|0;if(!p){u=t;v=l;j0a(h);Sc(v|0)}j0a(p);u=t;v=l;j0a(h);Sc(v|0)}else{l=k[o>>2]|0;if(!l){j0a(h);r=d;return}j0a(l);j0a(h);r=d;return}}else w=16;while(0);if((w|0)==16){w=Hc()|0;q=M;s=w}k[e>>2]=31456;if(b){u=q;v=s;j0a(h);Sc(v|0)}j0a(m);u=q;v=s;j0a(h);Sc(v|0)}function BT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0;c=r;r=r+128|0;d=c+124|0;e=c+120|0;f=c+108|0;g=c+96|0;h=c+88|0;i=c+72|0;j=c+60|0;l=c+48|0;m=c+40|0;n=c+24|0;o=c+12|0;p=c;q=f+4|0;k[q>>2]=0;s=f+8|0;k[s>>2]=0;t=f+4|0;k[f>>2]=t;x=0;u=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;a:do if(!(b&1)){v=k[u+36>>2]|0;w=k[u+40>>2]|0;b:do if((v|0)!=(w|0)){y=g+4|0;z=l+4|0;A=m+4|0;B=o+4|0;C=o+8|0;D=h+4|0;E=j+4|0;F=j+8|0;G=v;c:while(1){H=(k[G>>2]|0)+60|0;x=0;xa(590,g|0,H|0);I=x;x=0;if(I&1){J=7;break}I=k[g>>2]|0;K=k[y>>2]|0;if((I|0)==(K|0))L=I;else{N=I;do{I=k[N>>2]|0;O=I;x=0;P=Ba(k[(k[I>>2]|0)+28>>2]|0,I|0)|0;Q=x;x=0;if(Q&1){J=41;break c}if(P){x=0;P=Ba(563,100)|0;Q=x;x=0;if(Q&1){J=41;break c}k[P+4>>2]=0;k[P+8>>2]=0;k[P>>2]=31496;Q=P+12|0;x=0;fb(143,Q|0,I|0,1);I=x;x=0;if(I&1){R=P;J=24;break c}I=Q;S=P;i0a(P);k[P+16>>2]=I;T=P+20|0;U=k[T>>2]|0;k[T>>2]=S;if(U)k0a(U);x=0;xa(740,h|0,Q|0);U=x;x=0;if(U&1){V=P;J=43;break c}U=(k[h>>2]|0)==0;T=k[D>>2]|0;if(T)j0a(T);if(!U){x=0;xa(586,i|0,Q|0);Q=x;x=0;if(Q&1){V=P;J=43;break c}Q=EU(f,e,i)|0;U=k[Q>>2]|0;if(!U){x=0;T=Ba(563,40)|0;W=x;x=0;if(W&1){X=P;J=44;break c}W=T+16|0;k[W>>2]=k[i>>2];k[W+4>>2]=k[i+4>>2];k[W+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[T+28>>2]=0;k[T+32>>2]=0;k[T+36>>2]=0;W=k[e>>2]|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=W;k[Q>>2]=T;W=k[k[f>>2]>>2]|0;if(!W)Y=T;else{k[f>>2]=W;Y=k[Q>>2]|0}ui(k[q>>2]|0,Y);k[s>>2]=(k[s>>2]|0)+1;Z=T}else Z=U;h0a(P);k[j>>2]=O;k[E>>2]=I;k[F>>2]=S;U=Z+32|0;T=k[U>>2]|0;do if(T>>>0<(k[Z+36>>2]|0)>>>0){k[T>>2]=O;k[T+4>>2]=I;k[T+8>>2]=S;k[E>>2]=0;k[F>>2]=0;k[U>>2]=T+12}else{x=0;xa(741,Z+28|0,j|0);Q=x;x=0;if(Q&1){_=P;J=45;break c}Q=k[F>>2]|0;if(!Q)break;j0a(Q)}while(0);K2a(i)}j0a(P)}N=N+4|0}while((N|0)!=(K|0));L=k[g>>2]|0}K=L;if(L){N=k[y>>2]|0;if((N|0)!=(L|0))k[y>>2]=N+(~((N+-4-K|0)>>>2)<<2);OBa(L)}x=0;xa(739,l|0,H|0);K=x;x=0;if(K&1){J=7;break}K=k[l>>2]|0;N=k[z>>2]|0;if((K|0)==(N|0))$=K;else{T=K;do{K=k[T>>2]|0;U=K;x=0;S=Ba(k[(k[K>>2]|0)+28>>2]|0,K|0)|0;I=x;x=0;if(I&1){J=85;break c}if(S){x=0;S=Ba(563,100)|0;I=x;x=0;if(I&1){J=85;break c}k[S+4>>2]=0;k[S+8>>2]=0;k[S>>2]=31496;I=S+12|0;x=0;xa(742,I|0,K|0);K=x;x=0;if(K&1){aa=S;J=68;break c}K=I;O=S;i0a(S);k[S+16>>2]=K;Q=S+20|0;W=k[Q>>2]|0;k[Q>>2]=O;if(W)k0a(W);x=0;xa(740,m|0,I|0);W=x;x=0;if(W&1){ba=S;J=87;break c}W=(k[m>>2]|0)==0;Q=k[A>>2]|0;if(Q)j0a(Q);if(!W){x=0;xa(586,n|0,I|0);I=x;x=0;if(I&1){ba=S;J=87;break c}I=EU(f,d,n)|0;W=k[I>>2]|0;if(!W){x=0;Q=Ba(563,40)|0;ca=x;x=0;if(ca&1){da=S;J=88;break c}ca=Q+16|0;k[ca>>2]=k[n>>2];k[ca+4>>2]=k[n+4>>2];k[ca+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[Q+28>>2]=0;k[Q+32>>2]=0;k[Q+36>>2]=0;ca=k[d>>2]|0;k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=ca;k[I>>2]=Q;ca=k[k[f>>2]>>2]|0;if(!ca)ea=Q;else{k[f>>2]=ca;ea=k[I>>2]|0}ui(k[q>>2]|0,ea);k[s>>2]=(k[s>>2]|0)+1;fa=Q}else fa=W;h0a(S);k[o>>2]=U;k[B>>2]=K;k[C>>2]=O;W=fa+32|0;Q=k[W>>2]|0;do if(Q>>>0<(k[fa+36>>2]|0)>>>0){k[Q>>2]=U;k[Q+4>>2]=K;k[Q+8>>2]=O;k[B>>2]=0;k[C>>2]=0;k[W>>2]=Q+12}else{x=0;xa(741,fa+28|0,o|0);I=x;x=0;if(I&1){ga=S;J=89;break c}I=k[C>>2]|0;if(!I)break;j0a(I)}while(0);K2a(n)}j0a(S)}T=T+4|0}while((T|0)!=(N|0));$=k[l>>2]|0}N=$;if($){T=k[z>>2]|0;if((T|0)!=($|0))k[z>>2]=T+(~((T+-4-N|0)>>>2)<<2);OBa($)}G=G+4|0;if((G|0)==(w|0))break b}switch(J|0){case 7:{ha=Hc()|0;ia=M;break a;break}case 24:{G=Hc()|0;B=M;c0a(R);OBa(R);ja=B;ka=G;J=42;break}case 41:{G=Hc()|0;ja=M;ka=G;J=42;break}case 43:{la=Hc()|0;ma=M;na=V;J=49;break}case 44:{oa=Hc()|0;pa=M;qa=X;J=47;break}case 45:{G=Hc()|0;B=M;A=k[F>>2]|0;if(!A){oa=G;pa=B;qa=_;J=47}else{j0a(A);oa=G;pa=B;qa=_;J=47}break}case 68:{B=Hc()|0;G=M;c0a(aa);OBa(aa);ra=G;sa=B;J=86;break}case 85:{B=Hc()|0;ra=M;sa=B;J=86;break}case 87:{ta=Hc()|0;ua=M;va=ba;J=93;break}case 88:{wa=Hc()|0;ya=M;za=da;J=91;break}case 89:{B=Hc()|0;G=M;A=k[C>>2]|0;if(!A){wa=B;ya=G;za=ga;J=91}else{j0a(A);wa=B;ya=G;za=ga;J=91}break}}if((J|0)==42){Aa=ka;Ca=ja;J=51}else if((J|0)==47){K2a(i);la=oa;ma=pa;na=qa;J=49}else if((J|0)==86){Da=sa;Ea=ra;J=95}else if((J|0)==91){K2a(n);ta=wa;ua=ya;va=za;J=93}if((J|0)==49){j0a(na);Aa=la;Ca=ma;J=51}else if((J|0)==93){j0a(va);Da=ta;Ea=ua;J=95}if((J|0)==51){G=k[g>>2]|0;if(!G){Fa=Aa;Ga=Ca;Ha=k[t>>2]|0;GU(f,Ha);Sc(Fa|0)}B=k[y>>2]|0;if((B|0)!=(G|0))k[y>>2]=B+(~((B+-4-G|0)>>>2)<<2);OBa(G);Fa=Aa;Ga=Ca;Ha=k[t>>2]|0;GU(f,Ha);Sc(Fa|0)}else if((J|0)==95){G=k[l>>2]|0;if(!G){Fa=Da;Ga=Ea;Ha=k[t>>2]|0;GU(f,Ha);Sc(Fa|0)}B=k[z>>2]|0;if((B|0)!=(G|0))k[z>>2]=B+(~((B+-4-G|0)>>>2)<<2);OBa(G);Fa=Da;Ga=Ea;Ha=k[t>>2]|0;GU(f,Ha);Sc(Fa|0)}}while(0);w=k[f>>2]|0;if((w|0)==(t|0)){Ia=k[t>>2]|0;GU(f,Ia);r=c;return}v=w;d:while(1){w=v+28|0;G=v+32|0;B=k[G>>2]|0;A=k[w>>2]|0;if((B|0)!=(A|0)){E=A;A=B;B=0;while(1){D=B;B=B+1|0;if(B>>>0<((A-E|0)/12|0)>>>0){N=E;T=B;while(1){H=N;x=0;Q=Ta(568,k[H+(D*12|0)+4>>2]|0,k[H+(T*12|0)+4>>2]|0)|0;H=x;x=0;if(H&1){J=6;break d}if(!Q){Q=k[(k[w>>2]|0)+(T*12|0)>>2]|0;x=0;fb(140,p|0,232507,74);H=x;x=0;if(H&1){J=6;break d}x=0;fb(237,a|0,Q+8|0,p|0);Q=x;x=0;if(Q&1){J=114;break d}K2a(p)}T=T+1|0;Q=k[G>>2]|0;H=k[w>>2]|0;if(T>>>0>=((Q-H|0)/12|0)>>>0){Ja=H;Ka=Q;break}else N=H}}else{Ja=E;Ka=A}if(B>>>0>=((Ka-Ja|0)/12|0)>>>0)break;else{E=Ja;A=Ka}}}A=k[v+4>>2]|0;if(!A){E=v;while(1){B=k[E+8>>2]|0;if((k[B>>2]|0)==(E|0)){La=B;break}else E=B}}else{E=A;while(1){B=k[E>>2]|0;if(!B){La=E;break}else E=B}}if((La|0)==(t|0)){J=101;break}else v=La}if((J|0)==6){v=Hc()|0;ha=v;ia=M;break}else if((J|0)==101){Ia=k[t>>2]|0;GU(f,Ia);r=c;return}else if((J|0)==114){v=Hc()|0;E=M;K2a(p);Fa=v;Ga=E;Ha=k[t>>2]|0;GU(f,Ha);Sc(Fa|0)}}else{E=Hc()|0;ha=E;ia=M}while(0);Fa=ha;Ga=ia;Ha=k[t>>2]|0;GU(f,Ha);Sc(Fa|0)}function CT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+48|0;d=c+36|0;e=c+24|0;f=c+12|0;g=c;h=(i[b+72>>0]|0)!=0;q2a(d,329672,0);x=0;pa(57,h|0,d|0,342,231157,232582);h=x;x=0;if(h&1){h=Hc()|0;j=M;K2a(d);l=h;m=j;Sc(l|0)}K2a(d);do if((k[b+48>>2]|0)!=(k[b+52>>2]|0)){q2a(e,232683,34);x=0;fb(237,a|0,b+8|0,e|0);d=x;x=0;if(!(d&1)){K2a(e);break}d=Hc()|0;j=M;K2a(e);l=d;m=j;Sc(l|0)}while(0);DU(f,b+60|0);b=k[f>>2]|0;e=f+4|0;j=k[e>>2]|0;do if((b|0)==(j|0))n=b;else{d=b;while(1){h=k[d>>2]|0;if(!(i[h+58>>0]|0)){x=0;fb(140,g|0,232718,48);o=x;x=0;if(o&1){p=18;break}x=0;fb(237,a|0,h+8|0,g|0);h=x;x=0;if(h&1){p=19;break}K2a(g)}d=d+4|0;if((d|0)==(j|0)){p=8;break}}if((p|0)==8){n=k[f>>2]|0;break}else if((p|0)==18){d=Hc()|0;q=d;s=M}else if((p|0)==19){d=Hc()|0;h=M;K2a(g);q=d;s=h}h=k[f>>2]|0;if(!h){l=q;m=s;Sc(l|0)}d=k[e>>2]|0;if((d|0)!=(h|0))k[e>>2]=d+(~((d+-4-h|0)>>>2)<<2);OBa(h);l=q;m=s;Sc(l|0)}while(0);if(!n){r=c;return}l=k[e>>2]|0;if((l|0)!=(n|0))k[e>>2]=l+(~((l+-4-n|0)>>>2)<<2);OBa(n);r=c;return}function DT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;a=r;r=r+16|0;c=a;d=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+24|0;e=(k[d>>2]|0)!=0;q2a(c,232134,23);x=0;pa(57,e|0,c|0,1545,231157,232158);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}else{K2a(c);c=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+24|0;r=a;return k[c>>2]|0}return 0}function ET(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;a=r;r=r+16|0;c=a;d=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+12|0;e=(k[d>>2]|0)!=0;q2a(c,232134,23);x=0;pa(57,e|0,c|0,1551,231157,232273);e=x;x=0;if(e&1){e=Hc()|0;K2a(c);Sc(e|0)}else{K2a(c);c=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+12|0;r=a;return k[c>>2]|0}return 0}function FT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;c=r;r=r+256|0;d=c+240|0;e=c+228|0;f=c+216|0;g=c+192|0;h=c+204|0;j=c+152|0;l=c+140|0;m=c+128|0;n=c+116|0;o=c+104|0;p=c+92|0;q=c+88|0;s=c+76|0;t=c+72|0;u=c+60|0;v=c+48|0;w=c+36|0;y=c+24|0;z=c+12|0;A=c;B=k[b+24>>2]|0;C=(Vf[k[(k[B>>2]|0)+16>>2]&1023](B)|0)+12|0;D=(k[C>>2]|0)!=0;q2a(d,232134,23);x=0;pa(57,D|0,d|0,1551,231157,232273);D=x;x=0;if(D&1){D=Hc()|0;K2a(d);Sc(D|0)}K2a(d);D=(Vf[k[(k[B>>2]|0)+16>>2]&1023](B)|0)+12|0;B=iDa(k[D>>2]|0,4520,5312,0)|0;q2a(f,232767,28);x=0;pa(57,(B|0)!=0|0,f|0,354,231157,232796);D=x;x=0;if(D&1){D=Hc()|0;C=M;K2a(f);E=D;F=C;Sc(E|0)}K2a(f);do if(i[B+72>>0]|0){q2a(g,232891,35);x=0;fb(237,a|0,b+8|0,g|0);f=x;x=0;if(!(f&1)){K2a(g);break}f=Hc()|0;C=M;K2a(g);E=f;F=C;Sc(E|0)}while(0);g=b+32|0;k[j+4>>2]=0;C=j+8|0;k[C>>2]=0;k[j+16>>2]=0;k[j+20>>2]=0;f=j+16|0;k[j+12>>2]=f;k[j>>2]=38268;k[j+24>>2]=B;i[j+28>>0]=0;k[j+32>>2]=0;B=j+36|0;k[B>>2]=0;x=0;D=Ba(599,j|0)|0;G=x;x=0;if(!(G&1)?(x=0,xa(591,h|0,k[D>>2]|0),D=x,x=0,!(D&1)):0){k[j>>2]=38268;D=k[B>>2]|0;if(D)j0a(D);k[j>>2]=20456;xh(j+12|0,k[f>>2]|0);D=k[C>>2]|0;if(D)k0a(D);D=k[g>>2]|0;G=b+36|0;H=k[G>>2]|0;a:do if((D|0)!=(H|0)?(I=h+4|0,J=H-D>>3,((k[I>>2]|0)-(k[h>>2]|0)>>3|0)!=(J|0)):0){K=b+8|0;k[q>>2]=J;x=0;xa(720,p|0,q|0);J=x;x=0;if(J&1){J=Hc()|0;L=M;N=J;O=33;break}x=0;J=Fa(86,p|0,0,232927)|0;P=x;x=0;if(P&1){P=Hc()|0;Q=P;R=M}else{k[o>>2]=k[J>>2];k[o+4>>2]=k[J+4>>2];k[o+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;x=0;J=Ta(484,o|0,232971)|0;P=x;x=0;if(P&1){P=Hc()|0;S=P;T=M}else{k[n>>2]=k[J>>2];k[n+4>>2]=k[J+4>>2];k[n+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[t>>2]=(k[I>>2]|0)-(k[h>>2]|0)>>3;x=0;xa(720,s|0,t|0);I=x;x=0;if(I&1){I=Hc()|0;U=I;V=M}else{I=i[s>>0]|0;J=(I&1)==0;x=0;P=Fa(88,n|0,(J?s+1|0:k[s+8>>2]|0)|0,(J?(I&255)>>>1:k[s+4>>2]|0)|0)|0;I=x;x=0;if(I&1){I=Hc()|0;W=I;X=M}else{k[m>>2]=k[P>>2];k[m+4>>2]=k[P+4>>2];k[m+8>>2]=k[P+8>>2];k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;x=0;P=Ta(484,m|0,324339)|0;I=x;x=0;do if(!(I&1)){k[l>>2]=k[P>>2];k[l+4>>2]=k[P+4>>2];k[l+8>>2]=k[P+8>>2];k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;x=0;fb(237,a|0,K|0,l|0);J=x;x=0;if(J&1){J=Hc()|0;Y=M;K2a(l);Z=J;_=Y;break}else{K2a(l);K2a(m);K2a(s);K2a(n);K2a(o);K2a(p);O=77;break a}}else{Y=Hc()|0;Z=Y;_=M}while(0);K2a(m);W=Z;X=_}K2a(s);U=W;V=X}K2a(n);S=U;T=V}K2a(o);Q=S;R=T}K2a(p);$=Q;aa=R}else O=16;while(0);b:do if((O|0)==16)if((H|0)==(D|0))O=77;else{R=A+8|0;Q=A+1|0;p=A+4|0;T=D;S=0;while(1){o=k[T+(S<<3)>>2]|0;x=0;V=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;U=x;x=0;if(U&1){O=31;break}U=k[V+4>>2]|0;x=0;fb(140,e|0,231125,31);V=x;x=0;if(V&1){O=31;break}x=0;pa(57,(U|0)!=0|0,e|0,53,231157,231199);U=x;x=0;if(U&1){O=49;break}K2a(e);x=0;U=Ba(k[(k[o>>2]|0)+16>>2]|0,o|0)|0;o=x;x=0;if(o&1){O=31;break}o=k[U+4>>2]|0;x=0;U=Ta(k[(k[o>>2]|0)+4>>2]|0,o|0,k[(k[h>>2]|0)+(S<<3)>>2]|0)|0;o=x;x=0;if(o&1){O=31;break}if(!U){U=k[(k[g>>2]|0)+(S<<3)>>2]|0;x=0;o=Ba(k[(k[U>>2]|0)+16>>2]|0,U|0)|0;V=x;x=0;if(V&1){O=31;break}V=k[o+4>>2]|0;x=0;fb(140,d|0,231125,31);o=x;x=0;if(o&1){O=31;break}x=0;pa(57,(V|0)!=0|0,d|0,53,231157,231199);V=x;x=0;if(V&1){O=56;break}K2a(d);x=0;V=Ba(k[(k[U>>2]|0)+16>>2]|0,U|0)|0;o=x;x=0;if(o&1){O=31;break}o=k[V+4>>2]|0;x=0;fb(k[(k[o>>2]|0)+76>>2]|0,z|0,o|0,0);o=x;x=0;if(o&1){O=31;break}x=0;o=Fa(86,z|0,0,233002)|0;V=x;x=0;if(V&1){O=65;break};k[y>>2]=k[o>>2];k[y+4>>2]=k[o+4>>2];k[y+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;x=0;o=Ta(484,y|0,266430)|0;V=x;x=0;if(V&1){O=66;break};k[w>>2]=k[o>>2];k[w+4>>2]=k[o+4>>2];k[w+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;o=k[(k[h>>2]|0)+(S<<3)>>2]|0;x=0;fb(k[(k[o>>2]|0)+76>>2]|0,A|0,o|0,0);o=x;x=0;if(o&1){O=67;break}o=i[A>>0]|0;V=(o&1)==0;x=0;n=Fa(88,w|0,(V?Q:k[R>>2]|0)|0,(V?(o&255)>>>1:k[p>>2]|0)|0)|0;o=x;x=0;if(o&1){O=68;break};k[v>>2]=k[n>>2];k[v+4>>2]=k[n+4>>2];k[v+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;n=Ta(484,v|0,266320)|0;o=x;x=0;if(o&1){O=69;break};k[u>>2]=k[n>>2];k[u+4>>2]=k[n+4>>2];k[u+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;fb(237,a|0,U+8|0,u|0);U=x;x=0;if(U&1){O=70;break}K2a(u);K2a(v);K2a(A);K2a(w);K2a(y);K2a(z)}S=S+1|0;T=k[g>>2]|0;if(S>>>0>=(k[G>>2]|0)-T>>3>>>0){O=77;break b}}if((O|0)==31){T=Hc()|0;L=M;N=T;O=33;break}else if((O|0)==49){T=Hc()|0;S=M;K2a(e);L=S;N=T;O=33;break}else if((O|0)==56){T=Hc()|0;S=M;K2a(d);L=S;N=T;O=33;break}else if((O|0)==65){T=Hc()|0;ba=T;ca=M}else if((O|0)==66){T=Hc()|0;da=T;ea=M;O=74}else if((O|0)==67){T=Hc()|0;fa=T;ga=M;O=73}else if((O|0)==68){T=Hc()|0;ha=T;ia=M;O=72}else if((O|0)==69){T=Hc()|0;ja=T;ka=M;O=71}else if((O|0)==70){T=Hc()|0;S=M;K2a(u);ja=T;ka=S;O=71}if((O|0)==71){K2a(v);ha=ja;ia=ka;O=72}if((O|0)==72){K2a(A);fa=ha;ga=ia;O=73}if((O|0)==73){K2a(w);da=fa;ea=ga;O=74}if((O|0)==74){K2a(y);ba=da;ca=ea}K2a(z);$=ba;aa=ca}while(0);if((O|0)==33){$=N;aa=L}else if((O|0)==77){O=k[h>>2]|0;if(!O){r=c;return}L=h+4|0;N=k[L>>2]|0;if((N|0)==(O|0))la=O;else{ca=N;while(1){N=ca+-8|0;k[L>>2]=N;ba=k[ca+-4>>2]|0;if(!ba)ma=N;else{j0a(ba);ma=k[L>>2]|0}if((ma|0)==(O|0))break;else ca=ma}la=k[h>>2]|0}OBa(la);r=c;return}c=k[h>>2]|0;if(!c){E=$;F=aa;Sc(E|0)}la=h+4|0;ma=k[la>>2]|0;if((ma|0)==(c|0))na=c;else{ca=ma;while(1){ma=ca+-8|0;k[la>>2]=ma;O=k[ca+-4>>2]|0;if(!O)oa=ma;else{j0a(O);oa=k[la>>2]|0}if((oa|0)==(c|0))break;else ca=oa}na=k[h>>2]|0}OBa(na);E=$;F=aa;Sc(E|0)}aa=Hc()|0;$=M;k[j>>2]=38268;na=k[B>>2]|0;if(na)j0a(na);k[j>>2]=20456;xh(j+12|0,k[f>>2]|0);f=k[C>>2]|0;if(!f){E=aa;F=$;Sc(E|0)}k0a(f);E=aa;F=$;Sc(E|0)}function GT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=b+24|0;b=k[e>>2]|0;f=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+12|0;b=k[f>>2]|0;if(((b|0)!=0?(f=iDa(b,4520,5312,0)|0,(f|0)!=0):0)?(i[f+72>>0]|0)!=0:0){r=c;return}f=(k[e>>2]|0)+8|0;q2a(d,233083,22);x=0;fb(237,a|0,f|0,d|0);f=x;x=0;if(f&1){f=Hc()|0;K2a(d);Sc(f|0)}K2a(d);r=c;return}function HT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+48|0;d=c;e=c+36|0;f=c+24|0;g=b+40|0;h=k[g>>2]|0;i=b+44|0;j=k[i>>2]|0;a:do if((h|0)!=(j|0)){l=h;while(1){m=k[l>>2]|0;n=(Vf[k[(k[m>>2]|0)+16>>2]&1023](m)|0)+4|0;o=(k[n>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,o|0,d|0,59,231157,231292);o=x;x=0;if(o&1){p=5;break}K2a(d);o=(Vf[k[(k[m>>2]|0)+16>>2]&1023](m)|0)+4|0;m=k[o>>2]|0;if(!(Vf[k[(k[m>>2]|0)+48>>2]&1023](m)|0)){m=(k[l>>2]|0)+8|0;q2a(e,233106,30);x=0;fb(237,a|0,m|0,e|0);m=x;x=0;if(m&1)break;K2a(e)}l=l+8|0;if((l|0)==(j|0))break a}if((p|0)==5){l=Hc()|0;K2a(d);Sc(l|0)}l=Hc()|0;m=M;K2a(e);q=m;s=l;Sc(s|0)}while(0);e=d+16|0;k[e>>2]=d;k[d>>2]=31524;p=d+4|0;k[p>>2]=a;k[d+8>>2]=d;k[f+4>>2]=0;k[f+8>>2]=0;j=f+4|0;k[f>>2]=j;x=0;fb(239,p|0,b|0,f|0);b=x;x=0;b:do if(b&1){p=Hc()|0;h=M;IU(f,k[j>>2]|0);t=h;u=p}else{IU(f,k[j>>2]|0);p=k[g>>2]|0;h=k[i>>2]|0;c:do if((p|0)!=(h|0)){l=p;while(1){m=k[l>>2]|0;x=0;xa(k[(k[m>>2]|0)+12>>2]|0,m|0,a|0);m=x;x=0;if(m&1)break;l=l+8|0;if((l|0)==(h|0))break c}l=Hc()|0;t=M;u=l;break b}while(0);h=k[e>>2]|0;if((h|0)==(d|0)){Sf[k[(k[d>>2]|0)+16>>2]&2047](d);r=c;return 0}if(!h){r=c;return 0}Sf[k[(k[h>>2]|0)+20>>2]&2047](h);r=c;return 0}while(0);c=k[e>>2]|0;if((c|0)==(d|0)){Sf[k[(k[d>>2]|0)+16>>2]&2047](d);q=t;s=u;Sc(s|0)}if(!c){q=t;s=u;Sc(s|0)}Sf[k[(k[c>>2]|0)+20>>2]&2047](c);q=t;s=u;Sc(s|0);return 0}function IT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+128|0;d=c+104|0;e=c+92|0;f=c+80|0;g=c+68|0;h=c+56|0;j=c+44|0;l=c+32|0;m=c+24|0;n=c+12|0;o=c;p=b+36|0;q=iDa(k[p>>2]|0,5224,5312,0)|0;if(!q)BBa();s=(i[q+72>>0]|0)!=0;do if(i[b+79>>0]|0){do if(s){q2a(f,233137,36);x=0;fb(237,a|0,b+8|0,f|0);q=x;x=0;if(!(q&1)){K2a(f);break}q=Hc()|0;t=M;K2a(f);u=q;v=t;Sc(u|0)}while(0);do if(!(i[b+77>>0]|0)){t=k[b+24>>2]|0;q=i[t>>0]|0;if(!(q&1))w=(q&255)>>>1;else w=k[t+4>>2]|0;if((w|0)!=0?!(Vf[k[(k[b>>2]|0)+28>>2]&1023](b)|0):0){q2a(g,233174,37);x=0;fb(237,a|0,b+8|0,g|0);t=x;x=0;if(!(t&1)){K2a(g);break}t=Hc()|0;q=M;K2a(g);u=t;v=q;Sc(u|0)}}while(0);if(i[b+78>>0]|0){q2a(h,233212,58);x=0;fb(237,a|0,b+8|0,h|0);q=x;x=0;if(!(q&1)){K2a(h);break}q=Hc()|0;t=M;K2a(h);u=q;v=t;Sc(u|0)}}while(0);JU(j,(k[b+52>>2]|0)+24|0,(k[b+60>>2]|0)+24|0);h=k[j>>2]|0;g=j+4|0;w=k[g>>2]|0;do if((h|0)==(w|0))y=h;else{f=b+32|0;t=m+4|0;q=h;a:while(1){z=k[q>>2]|0;x=0;A=Ba(k[(k[z>>2]|0)+16>>2]|0,z|0)|0;B=x;x=0;if(B&1){C=43;break}B=k[A+4>>2]|0;x=0;fb(140,d|0,231125,31);A=x;x=0;if(A&1){C=43;break}x=0;pa(57,(B|0)!=0|0,d|0,59,231157,231292);B=x;x=0;if(B&1){C=37;break}K2a(d);x=0;B=Ba(k[(k[z>>2]|0)+16>>2]|0,z|0)|0;z=x;x=0;if(z&1){C=43;break}z=k[B+4>>2]|0;x=0;B=Ba(k[(k[z>>2]|0)+52>>2]|0,z|0)|0;z=x;x=0;if(z&1){C=43;break}if(!B){B=k[q>>2]|0;x=0;fb(140,l|0,233271,41);z=x;x=0;if(z&1){C=43;break}x=0;fb(237,a|0,B+8|0,l|0);B=x;x=0;if(B&1){C=45;break}K2a(l)}B=k[f>>2]|0;if(!B){x=0;z=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;A=x;x=0;if(A&1){C=43;break}else D=z}else D=B;do if((D|0)>2){B=k[q>>2]|0;x=0;z=Ba(k[(k[B>>2]|0)+16>>2]|0,B|0)|0;A=x;x=0;if(A&1){C=43;break a}A=k[z+4>>2]|0;x=0;fb(140,e|0,231125,31);z=x;x=0;if(z&1){C=43;break a}x=0;pa(57,(A|0)!=0|0,e|0,59,231157,231292);A=x;x=0;if(A&1){C=53;break a}K2a(e);x=0;A=Ba(k[(k[B>>2]|0)+16>>2]|0,B|0)|0;B=x;x=0;if(B&1){C=43;break a}B=k[A+4>>2]|0;x=0;fb(k[(k[B>>2]|0)+96>>2]|0,m|0,B|0,s|0);B=x;x=0;if(B&1){C=43;break a}B=(k[m>>2]|0)==0;A=k[t>>2]|0;if(!A){if(!B)break}else{j0a(A);if(!B)break}B=k[q>>2]|0;x=0;fb(140,n|0,233313,62);A=x;x=0;if(A&1){C=43;break a}x=0;fb(240,a|0,B+8|0,n|0);B=x;x=0;if(B&1){C=61;break a}K2a(n)}while(0);q=q+8|0;if((q|0)==(w|0)){C=23;break}}if((C|0)==23){y=k[j>>2]|0;break}else if((C|0)==37){q=Hc()|0;t=M;K2a(d);E=t;F=q;C=44}else if((C|0)==43){q=Hc()|0;E=M;F=q;C=44}else if((C|0)==45){q=Hc()|0;t=M;K2a(l);G=q;H=t}else if((C|0)==53){t=Hc()|0;q=M;K2a(e);E=q;F=t;C=44}else if((C|0)==61){t=Hc()|0;q=M;K2a(n);G=t;H=q}if((C|0)==44){G=F;H=E}q=k[j>>2]|0;if(!q){u=G;v=H;Sc(u|0)}t=k[g>>2]|0;if((t|0)==(q|0))I=q;else{f=t;while(1){t=f+-8|0;k[g>>2]=t;B=k[f+-4>>2]|0;if(!B)J=t;else{j0a(B);J=k[g>>2]|0}if((J|0)==(q|0))break;else f=J}I=k[j>>2]|0}OBa(I);u=G;v=H;Sc(u|0)}while(0);if(y){H=k[g>>2]|0;if((H|0)==(y|0))K=y;else{G=H;while(1){H=G+-8|0;k[g>>2]=H;I=k[G+-4>>2]|0;if(!I)L=H;else{j0a(I);L=k[g>>2]|0}if((L|0)==(y|0))break;else G=L}K=k[j>>2]|0}OBa(K)}K=k[b+80>>2]|0;j=k[b+84>>2]|0;b:do if((K|0)!=(j|0)){L=b+77|0;G=o+4|0;y=o+8|0;g=K;while(1){I=k[g>>2]|0;if(!(i[L>>0]|0)){k[o>>2]=0;k[G>>2]=0;k[y>>2]=0}else{H=iDa(k[p>>2]|0,5224,5312,0)|0;if(!H){C=73;break}KU(o,(Vf[k[(k[H>>2]|0)+16>>2]&1023](H)|0)+36|0)}x=0;fb(241,a|0,I|0,o|0);I=x;x=0;if(I&1)break;I=k[o>>2]|0;H=I;if(I){J=k[G>>2]|0;if((J|0)!=(I|0))k[G>>2]=J+(~((J+-4-H|0)>>>2)<<2);OBa(I)}g=g+8|0;if((g|0)==(j|0))break b}if((C|0)==73)BBa();g=Hc()|0;y=M;L=k[o>>2]|0;if(!L){u=g;v=y;Sc(u|0)}I=k[G>>2]|0;if((I|0)!=(L|0))k[G>>2]=I+(~((I+-4-L|0)>>>2)<<2);OBa(L);u=g;v=y;Sc(u|0)}while(0);if(!(i[b+76>>0]|0)){r=c;return 0}u=k[b+92>>2]|0;Tf[k[(k[u>>2]|0)+12>>2]&2047](u,a);r=c;return 0}function JT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+64|0;e=d+40|0;f=d;AT(a,b,c);c=f;b=c+36|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));c=f+20|0;b=f+24|0;k[b>>2]=0;k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=-1;a=f+4|0;d=f+8|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;K2a(e);k[f+4>>2]=31624;k[f>>2]=31588;k[c>>2]=31648;x=0;nb(114,f|0,233376,231157,1618);x=0;f=Hc()|0;k[a>>2]=31680;k[a+-4>>2]=31708;k[a+16>>2]=31732;K2a(d);k[c>>2]=20796;c=k[b>>2]|0;if(!c)Sc(f|0);x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d)Sc(f|0);k[b>>2]=0;Sc(f|0)}function KT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;d=r;r=r+224|0;e=d+212|0;f=d+200|0;g=d+188|0;h=d+176|0;j=d+152|0;l=d+164|0;m=d+140|0;n=d+128|0;o=d+116|0;p=d+104|0;q=d+92|0;s=d+88|0;t=d+76|0;u=d+72|0;v=d+60|0;w=d+48|0;y=d+36|0;z=d+24|0;A=d+12|0;B=d;C=b+32|0;D=k[C>>2]|0;E=b+36|0;F=k[E>>2]|0;if((D|0)!=(F|0)){G=D;do{D=k[G>>2]|0;Tf[k[(k[D>>2]|0)+12>>2]&2047](D,a);G=G+8|0}while((G|0)!=(F|0))}F=b+24|0;G=k[F>>2]|0;Tf[k[(k[G>>2]|0)+12>>2]&2047](G,a);G=k[F>>2]|0;F=(Vf[k[(k[G>>2]|0)+16>>2]&1023](G)|0)+24|0;D=(k[F>>2]|0)!=0;q2a(e,232134,23);x=0;pa(57,D|0,e|0,1545,231157,232158);D=x;x=0;if(D&1){D=Hc()|0;K2a(e);Sc(D|0)}K2a(e);D=(Vf[k[(k[G>>2]|0)+16>>2]&1023](G)|0)+24|0;G=k[D>>2]|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;D=iDa(G,4520,5480,0)|0;a:do if(!D){F=k[c>>2]|0;H=k[c+4>>2]|0;b:do if((F|0)!=(H|0)){I=F;while(1){J=k[I>>2]|0;I=I+4|0;if((G|0)==(J|0)){K=J;break}if((I|0)==(H|0))break b}x=0;I=Ba(598,K|0)|0;J=x;x=0;if(J&1){L=8;break a}if(!I){N=j;L=20;break a}N=(k[I+52>>2]|0)+24|0;L=20;break a}while(0);x=0;fb(140,l|0,233469,58);H=x;x=0;if(!(H&1)){x=0;fb(237,a|0,b+8|0,l|0);H=x;x=0;if(H&1){H=Hc()|0;F=M;K2a(l);O=H;P=F;Sc(O|0)}else{K2a(l);r=d;return}}else L=8}else{N=(k[D+52>>2]|0)+24|0;L=20}while(0);c:do if((L|0)==20){D=N+4|0;l=k[E>>2]|0;j=k[C>>2]|0;K=l-j>>3;if(((k[D>>2]|0)-(k[N>>2]|0)>>3|0)!=(K|0)){G=b+8|0;k[s>>2]=K;x=0;xa(720,q|0,s|0);K=x;x=0;if(K&1){L=8;break}x=0;K=Fa(86,q|0,0,233528)|0;c=x;x=0;if(c&1){c=Hc()|0;Q=c;R=M}else{k[p>>2]=k[K>>2];k[p+4>>2]=k[K+4>>2];k[p+8>>2]=k[K+8>>2];k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;x=0;K=Ta(484,p|0,232971)|0;c=x;x=0;if(c&1){c=Hc()|0;S=c;T=M}else{k[o>>2]=k[K>>2];k[o+4>>2]=k[K+4>>2];k[o+8>>2]=k[K+8>>2];k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[u>>2]=(k[D>>2]|0)-(k[N>>2]|0)>>3;x=0;xa(720,t|0,u|0);D=x;x=0;if(D&1){D=Hc()|0;U=D;V=M}else{D=i[t>>0]|0;K=(D&1)==0;x=0;c=Fa(88,o|0,(K?t+1|0:k[t+8>>2]|0)|0,(K?(D&255)>>>1:k[t+4>>2]|0)|0)|0;D=x;x=0;if(D&1){D=Hc()|0;W=D;X=M}else{k[n>>2]=k[c>>2];k[n+4>>2]=k[c+4>>2];k[n+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;c=Ta(484,n|0,324339)|0;D=x;x=0;do if(D&1){K=Hc()|0;Y=K;Z=M}else{k[m>>2]=k[c>>2];k[m+4>>2]=k[c+4>>2];k[m+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;x=0;fb(237,a|0,G|0,m|0);K=x;x=0;if(K&1){K=Hc()|0;F=M;K2a(m);Y=K;Z=F;break}K2a(m);K2a(n);K2a(t);K2a(o);K2a(p);K2a(q);r=d;return}while(0);K2a(n);W=Y;X=Z}K2a(t);U=W;V=X}K2a(o);S=U;T=V}K2a(p);Q=S;R=T}K2a(q);O=Q;P=R;Sc(O|0)}if((l|0)==(j|0)){r=d;return}G=B+8|0;c=B+1|0;D=B+4|0;F=j;K=0;while(1){H=k[F+(K<<3)>>2]|0;x=0;I=Ba(k[(k[H>>2]|0)+16>>2]|0,H|0)|0;J=x;x=0;if(J&1){L=7;break}J=k[I+4>>2]|0;x=0;fb(140,f|0,231125,31);I=x;x=0;if(I&1){L=7;break}x=0;pa(57,(J|0)!=0|0,f|0,53,231157,231199);J=x;x=0;if(J&1){L=46;break}K2a(f);x=0;J=Ba(k[(k[H>>2]|0)+16>>2]|0,H|0)|0;H=x;x=0;if(H&1){L=7;break}H=k[J+4>>2]|0;J=k[(k[H>>2]|0)+4>>2]|0;I=k[(k[N>>2]|0)+(K<<3)>>2]|0;x=0;_=Ba(k[(k[I>>2]|0)+16>>2]|0,I|0)|0;$=x;x=0;if($&1){L=7;break}$=k[_+4>>2]|0;x=0;fb(140,e|0,231125,31);_=x;x=0;if(_&1){L=7;break}x=0;pa(57,($|0)!=0|0,e|0,59,231157,231292);$=x;x=0;if($&1){L=51;break}K2a(e);x=0;$=Ba(k[(k[I>>2]|0)+16>>2]|0,I|0)|0;I=x;x=0;if(I&1){L=7;break}x=0;I=Ta(J|0,H|0,k[$+4>>2]|0)|0;$=x;x=0;if($&1){L=7;break}if(!I){I=k[(k[C>>2]|0)+(K<<3)>>2]|0;x=0;$=Ba(k[(k[I>>2]|0)+16>>2]|0,I|0)|0;H=x;x=0;if(H&1){L=7;break}H=k[$+4>>2]|0;x=0;fb(140,g|0,231125,31);$=x;x=0;if($&1){L=7;break}x=0;pa(57,(H|0)!=0|0,g|0,53,231157,231199);H=x;x=0;if(H&1){L=58;break}K2a(g);x=0;H=Ba(k[(k[I>>2]|0)+16>>2]|0,I|0)|0;$=x;x=0;if($&1){L=7;break}$=k[H+4>>2]|0;x=0;fb(k[(k[$>>2]|0)+76>>2]|0,A|0,$|0,0);$=x;x=0;if($&1){L=7;break}x=0;$=Fa(86,A|0,0,233575)|0;H=x;x=0;if(H&1){L=72;break};k[z>>2]=k[$>>2];k[z+4>>2]=k[$+4>>2];k[z+8>>2]=k[$+8>>2];k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;x=0;$=Ta(484,z|0,266430)|0;H=x;x=0;if(H&1){L=73;break};k[y>>2]=k[$>>2];k[y+4>>2]=k[$+4>>2];k[y+8>>2]=k[$+8>>2];k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;$=k[(k[N>>2]|0)+(K<<3)>>2]|0;x=0;H=Ba(k[(k[$>>2]|0)+16>>2]|0,$|0)|0;J=x;x=0;if(J&1){L=74;break}J=k[H+4>>2]|0;x=0;fb(140,h|0,231125,31);H=x;x=0;if(H&1){L=74;break}x=0;pa(57,(J|0)!=0|0,h|0,59,231157,231292);J=x;x=0;if(J&1){L=66;break}K2a(h);x=0;J=Ba(k[(k[$>>2]|0)+16>>2]|0,$|0)|0;$=x;x=0;if($&1){L=74;break}$=k[J+4>>2]|0;x=0;fb(k[(k[$>>2]|0)+76>>2]|0,B|0,$|0,0);$=x;x=0;if($&1){L=74;break}$=i[B>>0]|0;J=($&1)==0;x=0;H=Fa(88,y|0,(J?c:k[G>>2]|0)|0,(J?($&255)>>>1:k[D>>2]|0)|0)|0;$=x;x=0;if($&1){L=76;break};k[w>>2]=k[H>>2];k[w+4>>2]=k[H+4>>2];k[w+8>>2]=k[H+8>>2];k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;x=0;H=Ta(484,w|0,266320)|0;$=x;x=0;if($&1){L=77;break};k[v>>2]=k[H>>2];k[v+4>>2]=k[H+4>>2];k[v+8>>2]=k[H+8>>2];k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;x=0;fb(237,a|0,I+8|0,v|0);I=x;x=0;if(I&1){L=78;break}K2a(v);K2a(w);K2a(B);K2a(y);K2a(z);K2a(A)}K=K+1|0;F=k[C>>2]|0;if(K>>>0>=(k[E>>2]|0)-F>>3>>>0){L=85;break}}switch(L|0){case 7:{F=Hc()|0;aa=M;ba=F;break c;break}case 46:{F=Hc()|0;K=M;K2a(f);aa=K;ba=F;break c;break}case 51:{F=Hc()|0;K=M;K2a(e);aa=K;ba=F;break c;break}case 58:{F=Hc()|0;K=M;K2a(g);aa=K;ba=F;break c;break}case 66:{F=Hc()|0;K=M;K2a(h);ca=K;da=F;L=75;break}case 72:{ea=Hc()|0;fa=M;break}case 73:{ga=Hc()|0;ha=M;L=82;break}case 74:{F=Hc()|0;ca=M;da=F;L=75;break}case 76:{ia=Hc()|0;ja=M;L=80;break}case 77:{ka=Hc()|0;la=M;L=79;break}case 78:{F=Hc()|0;K=M;K2a(v);ka=F;la=K;L=79;break}case 85:{r=d;return}}if((L|0)==75){ma=da;na=ca;L=81}else if((L|0)==79){K2a(w);ia=ka;ja=la;L=80}if((L|0)==80){K2a(B);ma=ia;na=ja;L=81}if((L|0)==81){K2a(y);ga=ma;ha=na;L=82}if((L|0)==82){K2a(z);ea=ga;fa=ha}K2a(A);O=ea;P=fa;Sc(O|0)}while(0);if((L|0)==8){L=Hc()|0;aa=M;ba=L}O=ba;P=aa;Sc(O|0)}function LT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+208|0;d=c+184|0;e=c+172|0;f=c+160|0;g=c+148|0;h=c+136|0;j=c+124|0;l=c+112|0;m=c+104|0;n=c+16|0;o=c;p=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;q=k[p+4>>2]|0;s=k[p+8>>2]|0;p=(s|0)==0;if(!p)h0a(s);x=0;fb(140,d|0,233659,30);t=x;x=0;a:do if(t&1)u=8;else{x=0;pa(57,(q|0)!=0|0,d|0,466,231157,233690);v=x;x=0;if(v&1){v=Hc()|0;w=M;K2a(d);y=v;z=w;break}K2a(d);do if(i[b+58>>0]|0){w=k[b+36>>2]|0;if(!((w|0)!=0?(iDa(w,5224,5312,0)|0)!=0:0))u=11;do if((u|0)==11){x=0;fb(140,e|0,233781,36);w=x;x=0;if(w&1){u=8;break a}x=0;fb(237,a|0,b+8|0,e|0);w=x;x=0;if(w&1){w=Hc()|0;v=M;K2a(e);y=w;z=v;break a}else{K2a(e);break}}while(0);v=b+48|0;do if(!(k[v>>2]|0)){x=0;fb(140,f|0,233818,34);w=x;x=0;if(w&1){u=8;break a}x=0;fb(237,a|0,b+8|0,f|0);w=x;x=0;if(w&1){w=Hc()|0;A=M;K2a(f);y=w;z=A;break a}else{K2a(f);break}}while(0);x=0;A=Ba(k[(k[q>>2]|0)+56>>2]|0,q|0)|0;w=x;x=0;if(w&1){u=8;break a}if(!A){A=iDa(q,168,6704,0)|0;if((A|0)!=0?(k[A+32>>2]|0)!=0:0){B=v;break}x=0;fb(140,g|0,233853,85);A=x;x=0;if(A&1){u=8;break a}x=0;fb(237,a|0,b+8|0,g|0);A=x;x=0;if(A&1){A=Hc()|0;w=M;K2a(g);y=A;z=w;break a}else{K2a(g);B=v;break}}else B=v}else B=b+48|0;while(0);w=k[B>>2]|0;if((w|0)!=0?(x=0,fb(242,a|0,w|0,q|0),w=x,x=0,w&1):0){u=8;break}b:do if(!(i[b+56>>0]|0)){x=0;w=Ta(k[(k[q>>2]|0)+68>>2]|0,q|0,2)|0;A=x;x=0;if(A&1){u=8;break a}if(!w){x=0;w=Ta(k[(k[q>>2]|0)+68>>2]|0,q|0,1)|0;A=x;x=0;if(A&1){u=8;break a}if(!w)break}x=0;w=Ba(k[(k[q>>2]|0)+52>>2]|0,q|0)|0;A=x;x=0;if(A&1){u=8;break a}if(!w){w=b+8|0;x=0;fb(k[(k[q>>2]|0)+76>>2]|0,l|0,q|0,0);A=x;x=0;if(A&1){u=8;break a}x=0;A=Fa(86,l|0,0,277523)|0;C=x;x=0;if(C&1){C=Hc()|0;D=C;E=M}else{k[j>>2]=k[A>>2];k[j+4>>2]=k[A+4>>2];k[j+8>>2]=k[A+8>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;x=0;A=Ta(484,j|0,233939)|0;C=x;x=0;do if(!(C&1)){k[h>>2]=k[A>>2];k[h+4>>2]=k[A+4>>2];k[h+8>>2]=k[A+8>>2];k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;x=0;fb(237,a|0,w|0,h|0);F=x;x=0;if(F&1){F=Hc()|0;G=M;K2a(h);H=F;I=G;break}else{K2a(h);K2a(j);K2a(l);break b}}else{G=Hc()|0;H=G;I=M}while(0);K2a(j);D=H;E=I}K2a(l);y=D;z=E;break a}}else{w=k[b+32>>2]|0;if(!w){x=0;A=Ba(k[(k[b>>2]|0)+36>>2]|0,b|0)|0;C=x;x=0;if(C&1){u=8;break a}else J=A}else J=w;if((J|0)>2){x=0;xa(742,n|0,b|0);w=x;x=0;if(w&1){u=8;break a}x=0;xa(740,m|0,n|0);w=x;x=0;if(w&1){w=Hc()|0;A=M;Dg(n);y=w;z=A;break a}A=(k[m>>2]|0)==0;w=k[m+4>>2]|0;if(w)j0a(w);Dg(n);if(A){x=0;fb(140,o|0,233966,56);A=x;x=0;if(A&1){u=8;break a}x=0;fb(237,a|0,b+8|0,o|0);A=x;x=0;if(A&1){A=Hc()|0;w=M;K2a(o);y=A;z=w;break a}else{K2a(o);break}}}}while(0);if(p){r=c;return 0}j0a(s);r=c;return 0}while(0);if((u|0)==8){u=Hc()|0;y=u;z=M}if(p)Sc(y|0);j0a(s);Sc(y|0);return 0}function MT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0;d=r;r=r+240|0;e=d+228|0;f=d+216|0;g=d;h=d+208|0;j=d+192|0;l=d+180|0;m=d+168|0;n=d+156|0;o=d+144|0;p=d+132|0;q=d+120|0;s=d+108|0;t=d+96|0;u=d+88|0;v=d+76|0;w=d+64|0;y=d+52|0;z=d+40|0;A=d+28|0;B=d+16|0;Tf[k[(k[b>>2]|0)+12>>2]&2047](b,a);C=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;D=(k[C>>2]|0)!=0;q2a(e,231125,31);x=0;pa(57,D|0,e|0,53,231157,231199);D=x;x=0;if(D&1){D=Hc()|0;K2a(e);Sc(D|0)}K2a(e);D=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;C=k[D>>2]|0;if(cg[k[(k[C>>2]|0)+4>>2]&1023](C,c)|0){r=d;return}C=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;D=(k[C>>2]|0)!=0;q2a(e,231125,31);x=0;pa(57,D|0,e|0,53,231157,231199);D=x;x=0;if(D&1){D=Hc()|0;K2a(e);Sc(D|0)}K2a(e);D=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;C=k[D>>2]|0;a:do if((Vf[k[k[C>>2]>>2]&1023](C)|0)==1){D=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;E=(k[D>>2]|0)!=0;q2a(e,231125,31);x=0;pa(57,E|0,e|0,53,231157,231199);E=x;x=0;if(E&1){E=Hc()|0;K2a(e);Sc(E|0)}K2a(e);E=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;D=k[E+4>>2]|0;if((D|0)!=0?(F=iDa(D,168,6624,0)|0,(F|0)!=0):0){D=k[E+8>>2]|0;if(!D){G=0;H=F}else{h0a(D);G=D;H=F}}else{G=0;H=0}F=H+40|0;k[g>>2]=0;D=g+8|0;k[D>>2]=0;E=g+13|0;i[E>>0]=1;I=k[H+48>>2]|0;J=I>>>0>134217728?134217728:I;if(J>>>0>2){K=J>>>0>8?J:8;x=0;L=Ba(563,K<<2|0)|0;N=x;x=0;if(N&1)O=53;else{i[E>>0]=0;k[D>>2]=J;k[g>>2]=K;k[g+4>>2]=L;P=L;O=17}}else{k[D>>2]=J;P=g;O=17}do if((O|0)==17){Dyb(P|0,((i[H+53>>0]|0)==0?k[F+4>>2]|0:F)|0,I<<2|0)|0;J=i[H+52>>0]|0;i[g+12>>0]=J;L=i[E>>0]|0;if(J<<24>>24==0&(k[D>>2]|0)==1)Q=(k[(L<<24>>24==0?k[g+4>>2]|0:g)>>2]|0)!=1;else Q=1;if(!(L<<24>>24))OBa(k[g+4>>2]|0);if(Q){x=0;L=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;J=x;x=0;if(J&1){O=53;break}J=k[L+4>>2]|0;x=0;fb(140,f|0,231125,31);L=x;x=0;if(L&1){O=53;break}x=0;pa(57,(J|0)!=0|0,f|0,53,231157,231199);J=x;x=0;if(J&1){J=Hc()|0;L=M;K2a(f);R=L;S=J;break}K2a(f);x=0;J=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;L=x;x=0;if(L&1){O=53;break}L=k[J+4>>2]|0;x=0;xa(k[(k[L>>2]|0)+64>>2]|0,h|0,L|0);L=x;x=0;if(L&1){O=53;break}L=(k[h>>2]|0)!=0;J=k[h+4>>2]|0;if(!J)T=L;else{j0a(J);T=L}}else T=0;if(!G){U=T;break a}j0a(G);U=T;break a}while(0);if((O|0)==53){D=Hc()|0;R=M;S=D}if(!G){V=R;W=S;Sc(W|0)}j0a(G);V=R;W=S;Sc(W|0)}else U=0;while(0);S=b+8|0;R=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;G=(k[R>>2]|0)!=0;q2a(e,231125,31);x=0;pa(57,G|0,e|0,53,231157,231199);G=x;x=0;if(G&1){G=Hc()|0;K2a(e);Sc(G|0)}K2a(e);G=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;R=k[G>>2]|0;G=k[(k[R>>2]|0)+76>>2]|0;if(!U){jg[G&511](A,R,0);x=0;U=Fa(86,A|0,0,277523)|0;T=x;x=0;if(T&1){T=Hc()|0;X=M;Y=T}else{k[z>>2]=k[U>>2];k[z+4>>2]=k[U+4>>2];k[z+8>>2]=k[U+8>>2];k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;x=0;U=Ta(484,z|0,234023)|0;T=x;x=0;if(T&1){T=Hc()|0;Z=M;_=T}else{k[y>>2]=k[U>>2];k[y+4>>2]=k[U+4>>2];k[y+8>>2]=k[U+8>>2];k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;x=0;fb(k[(k[c>>2]|0)+76>>2]|0,B|0,c|0,0);U=x;x=0;if(U&1){U=Hc()|0;$=M;aa=U}else{U=i[B>>0]|0;T=(U&1)==0;x=0;h=Fa(88,y|0,(T?B+1|0:k[B+8>>2]|0)|0,(T?(U&255)>>>1:k[B+4>>2]|0)|0)|0;U=x;x=0;if(U&1){U=Hc()|0;ba=M;ca=U}else{k[w>>2]=k[h>>2];k[w+4>>2]=k[h+4>>2];k[w+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;h=Ta(484,w|0,324339)|0;U=x;x=0;do if(U&1){T=Hc()|0;da=M;ea=T}else{k[v>>2]=k[h>>2];k[v+4>>2]=k[h+4>>2];k[v+8>>2]=k[h+8>>2];k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;x=0;fb(237,a|0,S|0,v|0);T=x;x=0;if(T&1){T=Hc()|0;f=M;K2a(v);da=f;ea=T;break}K2a(v);K2a(w);K2a(B);K2a(y);K2a(z);K2a(A);r=d;return}while(0);K2a(w);ba=da;ca=ea}K2a(B);$=ba;aa=ca}K2a(y);Z=$;_=aa}K2a(z);X=Z;Y=_}K2a(A);V=X;W=Y;Sc(W|0)}jg[G&511](q,R,0);x=0;R=Fa(86,q|0,0,277523)|0;G=x;x=0;if(G&1){G=Hc()|0;fa=M;ga=G}else{k[p>>2]=k[R>>2];k[p+4>>2]=k[R+4>>2];k[p+8>>2]=k[R+8>>2];k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;x=0;R=Ta(484,p|0,234023)|0;G=x;x=0;if(G&1){G=Hc()|0;ha=M;ia=G}else{k[o>>2]=k[R>>2];k[o+4>>2]=k[R+4>>2];k[o+8>>2]=k[R+8>>2];k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;x=0;fb(k[(k[c>>2]|0)+76>>2]|0,s|0,c|0,0);c=x;x=0;if(c&1){c=Hc()|0;ja=M;ka=c}else{c=i[s>>0]|0;R=(c&1)==0;x=0;G=Fa(88,o|0,(R?s+1|0:k[s+8>>2]|0)|0,(R?(c&255)>>>1:k[s+4>>2]|0)|0)|0;c=x;x=0;if(c&1){c=Hc()|0;la=M;ma=c}else{k[n>>2]=k[G>>2];k[n+4>>2]=k[G+4>>2];k[n+8>>2]=k[G+8>>2];k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;x=0;G=Ta(484,n|0,234072)|0;c=x;x=0;if(c&1){c=Hc()|0;na=M;oa=c}else{k[m>>2]=k[G>>2];k[m+4>>2]=k[G+4>>2];k[m+8>>2]=k[G+8>>2];k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;x=0;G=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;c=x;x=0;do if(!(c&1)?(R=k[G+4>>2]|0,x=0,fb(140,e|0,231125,31),Y=x,x=0,!(Y&1)):0){x=0;pa(57,(R|0)!=0|0,e|0,53,231157,231199);R=x;x=0;if(R&1){R=Hc()|0;Y=M;K2a(e);qa=Y;ra=R;O=62;break}K2a(e);x=0;R=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Y=x;x=0;if(Y&1){O=61;break}Y=k[R+4>>2]|0;x=0;xa(k[(k[Y>>2]|0)+64>>2]|0,u|0,Y|0);Y=x;x=0;if(Y&1){O=61;break}Y=k[u>>2]|0;x=0;fb(k[(k[Y>>2]|0)+76>>2]|0,t|0,Y|0,0);Y=x;x=0;if(Y&1){Y=Hc()|0;sa=M;ta=Y}else{Y=i[t>>0]|0;R=(Y&1)==0;x=0;X=Fa(88,m|0,(R?t+1|0:k[t+8>>2]|0)|0,(R?(Y&255)>>>1:k[t+4>>2]|0)|0)|0;Y=x;x=0;if(Y&1){Y=Hc()|0;ua=M;va=Y}else{k[l>>2]=k[X>>2];k[l+4>>2]=k[X+4>>2];k[l+8>>2]=k[X+8>>2];k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;x=0;X=Ta(484,l|0,234098)|0;Y=x;x=0;do if(Y&1){R=Hc()|0;wa=M;ya=R}else{k[j>>2]=k[X>>2];k[j+4>>2]=k[X+4>>2];k[j+8>>2]=k[X+8>>2];k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;x=0;fb(237,a|0,S|0,j|0);R=x;x=0;if(R&1){R=Hc()|0;A=M;K2a(j);wa=A;ya=R;break}K2a(j);K2a(l);K2a(t);R=k[u+4>>2]|0;if(R)j0a(R);K2a(m);K2a(n);K2a(s);K2a(o);K2a(p);K2a(q);r=d;return}while(0);K2a(l);ua=wa;va=ya}K2a(t);sa=ua;ta=va}X=k[u+4>>2]|0;if(!X){za=sa;Aa=ta;break}j0a(X);za=sa;Aa=ta}else O=61;while(0);if((O|0)==61){ta=Hc()|0;qa=M;ra=ta;O=62}if((O|0)==62){za=qa;Aa=ra}K2a(m);na=za;oa=Aa}K2a(n);la=na;ma=oa}K2a(s);ja=la;ka=ma}K2a(o);ha=ja;ia=ka}K2a(p);fa=ha;ga=ia}K2a(q);V=fa;W=ga;Sc(W|0)}function NT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+80|0;d=c+60|0;e=c+48|0;f=c+36|0;g=c+24|0;h=c+16|0;j=c;m=k[b+52>>2]|0;n=k[m+24>>2]|0;o=k[m+28>>2]|0;if((n|0)==(o|0)){r=c;return 0}m=b+76|0;p=b+8|0;b=h+4|0;q=n;n=0;while(1){n=(l[(k[q>>2]|0)+57>>0]|0)+n|0;s=(i[m>>0]|0)!=0;if(!(s&n>>>0>4)){if(n>>>0>3&(s^1)){q2a(f,234181,40);x=0;fb(237,a|0,p|0,f|0);s=x;x=0;if(s&1){t=11;break}K2a(f)}}else{q2a(e,234130,50);x=0;fb(237,a|0,p|0,e|0);s=x;x=0;if(s&1){t=7;break}K2a(e)}s=k[q>>2]|0;u=(Vf[k[(k[s>>2]|0)+16>>2]&1023](s)|0)+4|0;v=(k[u>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,v|0,d|0,59,231157,231292);v=x;x=0;if(v&1){t=13;break}K2a(d);v=(Vf[k[(k[s>>2]|0)+16>>2]&1023](s)|0)+4|0;s=k[v>>2]|0;if(!(Vf[k[(k[s>>2]|0)+52>>2]&1023](s)|0)){s=(k[q>>2]|0)+8|0;q2a(g,233271,41);x=0;fb(237,a|0,s|0,g|0);s=x;x=0;if(s&1){t=17;break}K2a(g)}s=k[q>>2]|0;v=(Vf[k[(k[s>>2]|0)+16>>2]&1023](s)|0)+4|0;u=(k[v>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,u|0,d|0,59,231157,231292);u=x;x=0;if(u&1){t=19;break}K2a(d);u=(Vf[k[(k[s>>2]|0)+16>>2]&1023](s)|0)+4|0;s=k[u>>2]|0;jg[k[(k[s>>2]|0)+96>>2]&511](h,s,0);s=(k[h>>2]|0)==0;u=k[b>>2]|0;if(u)j0a(u);if(s){s=(k[q>>2]|0)+8|0;q2a(j,234222,53);x=0;fb(237,a|0,s|0,j|0);s=x;x=0;if(s&1){t=25;break}K2a(j)}q=q+8|0;if((q|0)==(o|0)){t=3;break}}if((t|0)==3){r=c;return 0}else if((t|0)==7){c=Hc()|0;o=M;K2a(e);w=o;y=c;Sc(y|0)}else if((t|0)==11){c=Hc()|0;o=M;K2a(f);w=o;y=c;Sc(y|0)}else if((t|0)==13){c=Hc()|0;K2a(d);Sc(c|0)}else if((t|0)==17){c=Hc()|0;o=M;K2a(g);w=o;y=c;Sc(y|0)}else if((t|0)==19){c=Hc()|0;K2a(d);Sc(c|0)}else if((t|0)==25){t=Hc()|0;c=M;K2a(j);w=c;y=t;Sc(y|0)}return 0}function OT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+24|0;e=c;f=k[a+8>>2]|0;k[d>>2]=k[b+32>>2];k[d+4>>2]=f;f=e+16|0;k[f>>2]=e;k[e>>2]=31748;k[e+4>>2]=b;k[e+8>>2]=a;x=0;Ta(571,d|0,e|0)|0;d=x;x=0;if(d&1){d=Hc()|0;a=k[f>>2]|0;if((a|0)==(e|0)){Sf[k[(k[a>>2]|0)+16>>2]&2047](a);Sc(d|0)}if(!a)Sc(d|0);Sf[k[(k[a>>2]|0)+20>>2]&2047](a);Sc(d|0)}else{d=k[f>>2]|0;if((d|0)==(e|0)){Sf[k[(k[e>>2]|0)+16>>2]&2047](e);r=c;return 0}if(!d){r=c;return 0}Sf[k[(k[d>>2]|0)+20>>2]&2047](d);r=c;return 0}return 0}function PT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c;e=k[b+32>>2]|0;k[d+4>>2]=0;f=d+8|0;k[f>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;g=d+16|0;k[d+12>>2]=g;k[d>>2]=37924;x=0;fb(242,a|0,e|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;k[d>>2]=20456;xh(d+12|0,k[g>>2]|0);h=k[f>>2]|0;if(!h)Sc(e|0);k0a(h);Sc(e|0)}k[d>>2]=20456;xh(d+12|0,k[g>>2]|0);g=k[f>>2]|0;if(g)k0a(g);g=k[b+40>>2]|0;Tf[k[(k[g>>2]|0)+12>>2]&2047](g,a);g=k[b+48>>2]|0;if(!g){r=c;return 0}Tf[k[(k[g>>2]|0)+12>>2]&2047](g,a);r=c;return 0}function QT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c;e=k[b+32>>2]|0;k[d+4>>2]=0;f=d+8|0;k[f>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;g=d+16|0;k[d+12>>2]=g;k[d>>2]=37924;x=0;fb(242,a|0,e|0,d|0);e=x;x=0;if(e&1){e=Hc()|0;k[d>>2]=20456;xh(d+12|0,k[g>>2]|0);h=k[f>>2]|0;if(!h)Sc(e|0);k0a(h);Sc(e|0)}else{k[d>>2]=20456;xh(d+12|0,k[g>>2]|0);g=k[f>>2]|0;if(!g){i=b+40|0;j=k[i>>2]|0;l=k[j>>2]|0;m=l+12|0;n=k[m>>2]|0;Tf[n&2047](j,a);r=c;return 0}k0a(g);i=b+40|0;j=k[i>>2]|0;l=k[j>>2]|0;m=l+12|0;n=k[m>>2]|0;Tf[n&2047](j,a);r=c;return 0}return 0}function RT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+32|0;d=c;e=k[b+32>>2]|0;if(e)Tf[k[(k[e>>2]|0)+12>>2]&2047](e,a);e=k[b+40>>2]|0;do if(e){k[d+4>>2]=0;f=d+8|0;k[f>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;g=d+16|0;k[d+12>>2]=g;k[d>>2]=37924;x=0;fb(242,a|0,e|0,d|0);h=x;x=0;if(!(h&1)){k[d>>2]=20456;xh(d+12|0,k[g>>2]|0);h=k[f>>2]|0;if(!h)break;k0a(h);break}h=Hc()|0;k[d>>2]=20456;xh(d+12|0,k[g>>2]|0);g=k[f>>2]|0;if(!g)Sc(h|0);k0a(g);Sc(h|0)}while(0);d=k[b+48>>2]|0;if(!d){i=a;j=b+56|0;l=k[j>>2]|0;m=k[l>>2]|0;n=m+12|0;o=k[n>>2]|0;Tf[o&2047](l,i);r=c;return 0}else{Tf[k[(k[d>>2]|0)+12>>2]&2047](d,a);i=a;j=b+56|0;l=k[j>>2]|0;m=k[l>>2]|0;n=m+12|0;o=k[n>>2]|0;Tf[o&2047](l,i);r=c;return 0}return 0}function ST(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0;c=r;r=r+336|0;d=c+324|0;e=c+312|0;f=c+300|0;g=c+288|0;h=c+276|0;j=c+264|0;l=c+240|0;m=c+252|0;n=c+228|0;o=c+192|0;p=c+180|0;q=c+168|0;s=c+156|0;t=c+144|0;u=c+132|0;v=c+120|0;w=c+84|0;y=c+72|0;z=c+60|0;A=c+48|0;B=c+36|0;C=c+24|0;D=c+12|0;E=c;F=b+32|0;if(!(k[F>>2]|0)){r=c;return}G=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+20|0;H=k[G>>2]|0;if(!H){q2a(l,234276,29);x=0;fb(237,a|0,b+8|0,l|0);G=x;x=0;if(G&1){G=Hc()|0;I=M;K2a(l);J=G;K=I;Sc(J|0)}else{K2a(l);r=c;return}}k[m>>2]=0;l=m+4|0;k[l>>2]=0;k[m+8>>2]=0;I=H+24|0;G=k[I>>2]|0;L=H+28|0;H=k[L>>2]|0;a:do if((G|0)!=(H|0)){N=m+8|0;O=G;while(1){P=k[O>>2]|0;x=0;Q=Ba(k[(k[P>>2]|0)+16>>2]|0,P|0)|0;R=x;x=0;if(R&1){S=13;break}R=k[Q+4>>2]|0;x=0;fb(140,h|0,231125,31);Q=x;x=0;if(Q&1){S=13;break}x=0;pa(57,(R|0)!=0|0,h|0,59,231157,231292);R=x;x=0;if(R&1){S=20;break}K2a(h);x=0;R=Ba(k[(k[P>>2]|0)+16>>2]|0,P|0)|0;P=x;x=0;if(P&1){S=13;break}P=R+4|0;Q=k[l>>2]|0;if((Q|0)==(k[N>>2]|0)){x=0;xa(743,m|0,P|0);T=x;x=0;if(T&1){S=13;break}}else{k[Q>>2]=k[P>>2];P=k[R+8>>2]|0;k[Q+4>>2]=P;if(!P)U=Q;else{h0a(P);U=k[l>>2]|0}k[l>>2]=U+8}O=O+8|0;if((O|0)==(H|0)){S=8;break a}}if((S|0)==13){O=Hc()|0;V=M;W=O;S=15;break}else if((S|0)==20){O=Hc()|0;N=M;K2a(h);V=N;W=O;S=15;break}}else S=8;while(0);b:do if((S|0)==8){h=k[F>>2]|0;x=0;H=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;U=x;x=0;c:do if(!(U&1)?(G=k[H+4>>2]|0,x=0,fb(140,j|0,231125,31),O=x,x=0,!(O&1)):0){x=0;pa(57,(G|0)!=0|0,j|0,53,231157,231199);G=x;x=0;if(G&1){G=Hc()|0;O=M;K2a(j);V=O;W=G;S=15;break b}K2a(j);x=0;G=Ba(k[(k[h>>2]|0)+16>>2]|0,h|0)|0;O=x;x=0;if(!(O&1)){O=k[G+4>>2]|0;d:do if((O|0)!=0?(G=iDa(O,168,6752,0)|0,(G|0)!=0):0){if(((k[G+28>>2]|0)-(k[G+24>>2]|0)|0)!=((k[L>>2]|0)-(k[I>>2]|0)|0)){x=0;fb(140,n|0,234306,78);N=x;x=0;if(N&1)break c;x=0;fb(237,a|0,b+8|0,n|0);N=x;x=0;if(N&1){N=Hc()|0;P=M;K2a(n);X=N;Y=P;break b}else{K2a(n);break}}P=k[(k[G>>2]|0)+4>>2]|0;k[o+4>>2]=0;N=o+8|0;k[N>>2]=0;k[o+16>>2]=0;k[o+20>>2]=0;Q=o+16|0;k[o+12>>2]=Q;k[o>>2]=38608;x=0;xa(744,o+24|0,m|0);R=x;x=0;if(R&1){R=Hc()|0;T=M;k[o>>2]=20456;xh(o+12|0,k[Q>>2]|0);Z=k[N>>2]|0;if(!Z){V=T;W=R;S=15;break b}k0a(Z);V=T;W=R;S=15;break b}x=0;R=Ta(P|0,G|0,o|0)|0;G=x;x=0;if(G&1){G=Hc()|0;P=M;k[o>>2]=38608;T=o+24|0;Z=k[T>>2]|0;if(Z){_=o+28|0;$=k[_>>2]|0;if(($|0)==(Z|0))aa=Z;else{ba=$;while(1){$=ba+-8|0;k[_>>2]=$;ca=k[ba+-4>>2]|0;if(!ca)da=$;else{j0a(ca);da=k[_>>2]|0}if((da|0)==(Z|0))break;else ba=da}aa=k[T>>2]|0}OBa(aa)}k[o>>2]=20456;xh(o+12|0,k[Q>>2]|0);ba=k[N>>2]|0;if(!ba){X=G;Y=P;break b}k0a(ba);X=G;Y=P;break b}k[o>>2]=38608;ba=o+24|0;Z=k[ba>>2]|0;if(Z){_=o+28|0;ca=k[_>>2]|0;if((ca|0)==(Z|0))ea=Z;else{$=ca;while(1){ca=$+-8|0;k[_>>2]=ca;fa=k[$+-4>>2]|0;if(!fa)ga=ca;else{j0a(fa);ga=k[_>>2]|0}if((ga|0)==(Z|0))break;else $=ga}ea=k[ba>>2]|0}OBa(ea)}k[o>>2]=20456;xh(o+12|0,k[Q>>2]|0);$=k[N>>2]|0;if($)k0a($);if(!R){$=k[F>>2]|0;Z=$+8|0;x=0;_=Ba(k[(k[$>>2]|0)+16>>2]|0,$|0)|0;P=x;x=0;if(P&1)break c;P=k[_+4>>2]|0;x=0;fb(140,g|0,231125,31);_=x;x=0;if(_&1)break c;x=0;pa(57,(P|0)!=0|0,g|0,53,231157,231199);P=x;x=0;if(P&1){P=Hc()|0;_=M;K2a(g);V=_;W=P;S=15;break b}K2a(g);x=0;P=Ba(k[(k[$>>2]|0)+16>>2]|0,$|0)|0;$=x;x=0;if($&1)break c;$=k[P+4>>2]|0;x=0;fb(k[(k[$>>2]|0)+76>>2]|0,u|0,$|0,0);$=x;x=0;if($&1)break c;x=0;$=Fa(86,u|0,0,234385)|0;P=x;x=0;if(P&1){P=Hc()|0;ha=P;ia=M}else{k[t>>2]=k[$>>2];k[t+4>>2]=k[$+4>>2];k[t+8>>2]=k[$+8>>2];k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;x=0;$=Ta(484,t|0,234023)|0;P=x;x=0;if(P&1){P=Hc()|0;ja=P;ka=M}else{k[s>>2]=k[$>>2];k[s+4>>2]=k[$+4>>2];k[s+8>>2]=k[$+8>>2];k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[w+4>>2]=0;$=w+8|0;k[$>>2]=0;k[w+16>>2]=0;k[w+20>>2]=0;P=w+16|0;k[w+12>>2]=P;k[w>>2]=38608;x=0;xa(744,w+24|0,m|0);_=x;x=0;do if(_&1){G=Hc()|0;T=M;k[w>>2]=20456;xh(w+12|0,k[P>>2]|0);fa=k[$>>2]|0;if(fa)k0a(fa);la=G;ma=T}else{x=0;fb(k[(k[w>>2]|0)+76>>2]|0,v|0,w|0,0);T=x;x=0;if(T&1){T=Hc()|0;na=T;oa=M}else{T=i[v>>0]|0;G=(T&1)==0;x=0;fa=Fa(88,s|0,(G?v+1|0:k[v+8>>2]|0)|0,(G?(T&255)>>>1:k[v+4>>2]|0)|0)|0;T=x;x=0;if(T&1){T=Hc()|0;qa=T;ra=M}else{k[q>>2]=k[fa>>2];k[q+4>>2]=k[fa+4>>2];k[q+8>>2]=k[fa+8>>2];k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;x=0;fa=Ta(484,q|0,324339)|0;T=x;x=0;do if(T&1){G=Hc()|0;sa=G;ta=M}else{k[p>>2]=k[fa>>2];k[p+4>>2]=k[fa+4>>2];k[p+8>>2]=k[fa+8>>2];k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;x=0;fb(237,a|0,Z|0,p|0);G=x;x=0;if(G&1){G=Hc()|0;ca=M;K2a(p);sa=G;ta=ca;break}K2a(p);K2a(q);K2a(v);k[w>>2]=38608;ca=w+24|0;G=k[ca>>2]|0;if(G){ua=w+28|0;va=k[ua>>2]|0;if((va|0)==(G|0))wa=G;else{ya=va;while(1){va=ya+-8|0;k[ua>>2]=va;za=k[ya+-4>>2]|0;if(!za)Aa=va;else{j0a(za);Aa=k[ua>>2]|0}if((Aa|0)==(G|0))break;else ya=Aa}wa=k[ca>>2]|0}OBa(wa)}k[w>>2]=20456;xh(w+12|0,k[P>>2]|0);ya=k[$>>2]|0;if(ya)k0a(ya);K2a(s);K2a(t);K2a(u);break d}while(0);K2a(q);qa=sa;ra=ta}K2a(v);na=qa;oa=ra}k[w>>2]=38608;fa=w+24|0;T=k[fa>>2]|0;if(T){ya=w+28|0;G=k[ya>>2]|0;if((G|0)==(T|0))Ca=T;else{ua=G;while(1){G=ua+-8|0;k[ya>>2]=G;za=k[ua+-4>>2]|0;if(!za)Da=G;else{j0a(za);Da=k[ya>>2]|0}if((Da|0)==(T|0))break;else ua=Da}Ca=k[fa>>2]|0}OBa(Ca)}k[w>>2]=20456;xh(w+12|0,k[P>>2]|0);ua=k[$>>2]|0;if(!ua){la=na;ma=oa;break}k0a(ua);la=na;ma=oa}while(0);K2a(s);ja=la;ka=ma}K2a(t);ha=ja;ia=ka}K2a(u);X=ha;Y=ia;break b}}else S=103;while(0);e:do if((S|0)==103){O=k[I>>2]|0;if(((k[L>>2]|0)-O|0)!=8){x=0;fb(140,y|0,234306,78);$=x;x=0;if($&1)break c;x=0;fb(237,a|0,b+8|0,y|0);$=x;x=0;if($&1){$=Hc()|0;P=M;K2a(y);X=$;Y=P;break b}else{K2a(y);break}}P=k[O>>2]|0;x=0;O=Ba(k[(k[P>>2]|0)+16>>2]|0,P|0)|0;$=x;x=0;if($&1)break c;$=k[O+4>>2]|0;x=0;fb(140,f|0,231125,31);O=x;x=0;if(O&1)break c;x=0;pa(57,($|0)!=0|0,f|0,59,231157,231292);$=x;x=0;if($&1){$=Hc()|0;O=M;K2a(f);V=O;W=$;S=15;break b}K2a(f);x=0;$=Ba(k[(k[P>>2]|0)+16>>2]|0,P|0)|0;P=x;x=0;if(P&1)break c;P=k[F>>2]|0;x=0;O=Ba(k[(k[P>>2]|0)+16>>2]|0,P|0)|0;Z=x;x=0;if(Z&1)break c;Z=k[O+4>>2]|0;x=0;fb(140,e|0,231125,31);O=x;x=0;if(O&1)break c;x=0;pa(57,(Z|0)!=0|0,e|0,53,231157,231199);Z=x;x=0;if(Z&1){Z=Hc()|0;O=M;K2a(e);V=O;W=Z;S=15;break b}K2a(e);x=0;Z=Ba(k[(k[P>>2]|0)+16>>2]|0,P|0)|0;P=x;x=0;if(P&1)break c;P=k[Z+4>>2]|0;Z=$+4|0;x=0;$=Ta(k[(k[P>>2]|0)+4>>2]|0,P|0,k[Z>>2]|0)|0;P=x;x=0;if(P&1)break c;if($)break;$=k[F>>2]|0;P=$+8|0;x=0;O=Ba(k[(k[$>>2]|0)+16>>2]|0,$|0)|0;_=x;x=0;if(_&1)break c;_=k[O+4>>2]|0;x=0;fb(140,d|0,231125,31);O=x;x=0;if(O&1)break c;x=0;pa(57,(_|0)!=0|0,d|0,53,231157,231199);_=x;x=0;if(_&1){_=Hc()|0;O=M;K2a(d);V=O;W=_;S=15;break b}K2a(d);x=0;_=Ba(k[(k[$>>2]|0)+16>>2]|0,$|0)|0;$=x;x=0;if($&1)break c;$=k[_+4>>2]|0;x=0;fb(k[(k[$>>2]|0)+76>>2]|0,D|0,$|0,0);$=x;x=0;if($&1)break c;x=0;$=Fa(86,D|0,0,234385)|0;_=x;x=0;if(_&1){_=Hc()|0;Ea=_;Ga=M}else{k[C>>2]=k[$>>2];k[C+4>>2]=k[$+4>>2];k[C+8>>2]=k[$+8>>2];k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;x=0;$=Ta(484,C|0,234407)|0;_=x;x=0;if(_&1){_=Hc()|0;Ha=_;Ia=M}else{k[B>>2]=k[$>>2];k[B+4>>2]=k[$+4>>2];k[B+8>>2]=k[$+8>>2];k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;$=k[Z>>2]|0;x=0;fb(k[(k[$>>2]|0)+76>>2]|0,E|0,$|0,0);$=x;x=0;if($&1){$=Hc()|0;Ja=$;Ka=M}else{$=i[E>>0]|0;Z=($&1)==0;x=0;_=Fa(88,B|0,(Z?E+1|0:k[E+8>>2]|0)|0,(Z?($&255)>>>1:k[E+4>>2]|0)|0)|0;$=x;x=0;if($&1){$=Hc()|0;La=$;Ma=M}else{k[A>>2]=k[_>>2];k[A+4>>2]=k[_+4>>2];k[A+8>>2]=k[_+8>>2];k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;x=0;_=Ta(484,A|0,324339)|0;$=x;x=0;do if(!($&1)){k[z>>2]=k[_>>2];k[z+4>>2]=k[_+4>>2];k[z+8>>2]=k[_+8>>2];k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;x=0;fb(237,a|0,P|0,z|0);Z=x;x=0;if(Z&1){Z=Hc()|0;O=M;K2a(z);Na=Z;Oa=O;break}else{K2a(z);K2a(A);K2a(E);K2a(B);K2a(C);K2a(D);break e}}else{O=Hc()|0;Na=O;Oa=M}while(0);K2a(A);La=Na;Ma=Oa}K2a(E);Ja=La;Ka=Ma}K2a(B);Ha=Ja;Ia=Ka}K2a(C);Ea=Ha;Ga=Ia}K2a(D);X=Ea;Y=Ga;break b}while(0);P=k[m>>2]|0;if(P){_=k[l>>2]|0;if((_|0)==(P|0))Pa=P;else{$=_;while(1){_=$+-8|0;k[l>>2]=_;O=k[$+-4>>2]|0;if(!O)Qa=_;else{j0a(O);Qa=k[l>>2]|0}if((Qa|0)==(P|0))break;else $=Qa}Pa=k[m>>2]|0}OBa(Pa)}r=c;return}}while(0);h=Hc()|0;V=M;W=h;S=15}while(0);if((S|0)==15){X=W;Y=V}V=k[m>>2]|0;if(!V){J=X;K=Y;Sc(J|0)}W=k[l>>2]|0;if((W|0)==(V|0))Ra=V;else{S=W;while(1){W=S+-8|0;k[l>>2]=W;c=k[S+-4>>2]|0;if(!c)Sa=W;else{j0a(c);Sa=k[l>>2]|0}if((Sa|0)==(V|0))break;else S=Sa}Ra=k[m>>2]|0}OBa(Ra);J=X;K=Y;Sc(J|0)}function TT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0;c=r;r=r+656|0;d=c;e=c+640|0;f=c+628|0;g=c+616|0;h=c+592|0;j=c+568|0;l=c+552|0;m=c+540|0;n=c+528|0;o=c+520|0;p=c+604|0;q=c+512|0;s=c+500|0;t=c+488|0;u=c+476|0;v=c+472|0;w=c+460|0;y=c+588|0;z=c+448|0;A=c+436|0;B=c+424|0;C=c+412|0;D=c+400|0;E=c+396|0;F=c+384|0;G=c+372|0;H=c+360|0;I=c+348|0;J=c+336|0;K=c+324|0;L=c+320|0;N=c+308|0;O=c+296|0;P=c+284|0;Q=c+272|0;R=c+264|0;S=c+252|0;T=c+240|0;U=c+228|0;V=c+216|0;W=c+208|0;X=c+192|0;Y=c+180|0;Z=c+168|0;_=c+156|0;$=c+144|0;aa=c+132|0;ba=c+120|0;ca=c+108|0;da=c+96|0;ea=c+88|0;fa=c+76|0;ga=c+64|0;ha=c+52|0;ia=c+40|0;ja=c+28|0;ka=c+16|0;la=b+44|0;ma=k[la>>2]|0;if(!ma){na=b+32|0;oa=k[na>>2]|0;if(((k[b+36>>2]|0)-oa|0)==8?(qa=k[oa>>2]|0,(qa|0)!=0):0)ra=qa;else sa=4;do if((sa|0)==4){q2a(g,234488,40);x=0;fb(240,a|0,b+8|0,g|0);qa=x;x=0;if(!(qa&1)){K2a(g);ra=k[k[na>>2]>>2]|0;break}qa=Hc()|0;oa=M;K2a(g);ta=qa;ua=oa;Sc(ta|0)}while(0);g=(Vf[k[(k[ra>>2]|0)+16>>2]&1023](ra)|0)+4|0;do if(!(k[g>>2]|0)){q2a(h,234488,40);x=0;fb(240,a|0,b+8|0,h|0);na=x;x=0;if(!(na&1)){K2a(h);break}na=Hc()|0;oa=M;K2a(h);ta=na;ua=oa;Sc(ta|0)}while(0);h=(Vf[k[(k[ra>>2]|0)+16>>2]&1023](ra)|0)+4|0;g=(k[h>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,g|0,d|0,59,231157,231292);g=x;x=0;if(g&1){g=Hc()|0;K2a(d);Sc(g|0)}K2a(d);g=(Vf[k[(k[ra>>2]|0)+16>>2]&1023](ra)|0)+4|0;h=k[g>>2]|0;a:do if(((h|0)!=0?(g=iDa(h,168,6688,0)|0,(g|0)!=0):0)?cg[k[(k[g>>2]|0)+68>>2]&1023](g,0)|0:0){g=KBa(68)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=31248;oa=g+12|0;x=0;xa(731,oa|0,6);na=x;x=0;if(na&1){na=Hc()|0;c0a(g);OBa(g);Sc(na|0)}na=oa;k[j>>2]=31456;qa=ra+8|0;va=k[qa+4>>2]|0;wa=j+4|0;k[wa>>2]=k[qa>>2];k[wa+4>>2]=va;k[j+12>>2]=k[ra+16>>2];va=k[ra+20>>2]|0;k[j+16>>2]=va;wa=(va|0)==0;if(!wa)h0a(va);x=0;qa=Ta(566,oa|0,j|0)|0;oa=x;x=0;b:do if(oa&1){ya=Hc()|0;za=M;Aa=ya;sa=36}else{ya=k[ra+24>>2]|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;Ca=i[ya>>0]|0;Da=(Ca&1)==0?(Ca&255)>>>1:k[ya+4>>2]|0;x=0;nb(83,n|0,234529,59,Da+59|0);Ca=x;x=0;if(!(Ca&1)?(x=0,Fa(88,n|0,((i[ya>>0]&1)==0?ya+1|0:k[ya+8>>2]|0)|0,Da|0)|0,Da=x,x=0,!(Da&1)):0){x=0;Da=Ta(484,n|0,234589)|0;ya=x;x=0;if(ya&1){ya=Hc()|0;Ea=ya;Ga=M}else{k[m>>2]=k[Da>>2];k[m+4>>2]=k[Da+4>>2];k[m+8>>2]=k[Da+8>>2];k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;k[l>>2]=21048;Da=l+4|0;x=0;xa(604,Da|0,m|0);ya=x;x=0;do if(ya&1){Ca=Hc()|0;Ha=Ca;Ia=M}else{x=0;Ta(564,qa|0,l|0)|0;Ca=x;x=0;if(Ca&1){Ca=Hc()|0;Ja=M;k[l>>2]=21048;K2a(Da);Ha=Ca;Ia=Ja;break}k[l>>2]=21048;K2a(Da);K2a(m);K2a(n);k[j>>2]=31456;if(!wa)j0a(va);Ja=k[a+8>>2]|0;k[o>>2]=na;Ca=o+4|0;k[Ca>>2]=g;h0a(g);Ka=Ja+4|0;La=k[Ka>>2]|0;do if(La>>>0>=(k[Ja+8>>2]|0)>>>0){x=0;xa(732,Ja|0,o|0);Ma=x;x=0;if(Ma&1){Ma=Hc()|0;Na=M;Oa=k[Ca>>2]|0;if(!Oa){Pa=Ma;Qa=Na;break b}j0a(Oa);Pa=Ma;Qa=Na;break b}else{Na=k[Ca>>2]|0;if(!Na)break;j0a(Na);break}}else{k[La>>2]=na;k[La+4>>2]=g;k[o>>2]=0;k[Ca>>2]=0;k[Ka>>2]=La+8}while(0);j0a(g);break a}while(0);K2a(m);Ea=Ha;Ga=Ia}K2a(n);Ra=Ea;Sa=Ga;sa=42;break}Da=Hc()|0;ya=M;K2a(n);za=ya;Aa=Da;sa=36}while(0);if((sa|0)==36){Ra=Aa;Sa=za;sa=42}if((sa|0)==42){k[j>>2]=31456;if(wa){Pa=Ra;Qa=Sa}else{j0a(va);Pa=Ra;Qa=Sa}}j0a(g);ta=Pa;ua=Qa;Sc(ta|0)}while(0);Tf[k[(k[ra>>2]|0)+12>>2]&2047](ra,a);r=c;return 0}Tf[k[(k[ma>>2]|0)+12>>2]&2047](ma,a);k[p>>2]=0;ma=p+4|0;k[ma>>2]=0;k[p+8>>2]=0;ra=k[la>>2]|0;x=0;Qa=Ba(k[(k[ra>>2]|0)+16>>2]|0,ra|0)|0;Pa=x;x=0;c:do if(!(Pa&1)?(Sa=k[Qa+4>>2]|0,x=0,fb(140,f|0,231125,31),Ra=x,x=0,!(Ra&1)):0){x=0;pa(57,(Sa|0)!=0|0,f|0,53,231157,231199);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;Ra=M;K2a(f);Ua=Ra;Va=Sa;sa=56;break}K2a(f);x=0;Sa=Ba(k[(k[ra>>2]|0)+16>>2]|0,ra|0)|0;Ra=x;x=0;if(!(Ra&1)){Ra=k[Sa+4>>2]|0;if((Ra|0)!=0?(Sa=iDa(Ra,168,6752,0)|0,(Sa|0)!=0):0){Ra=Sa+24|0;if((p|0)!=(Ra|0)?(x=0,fb(243,p|0,k[Ra>>2]|0,k[Sa+28>>2]|0),Sa=x,x=0,Sa&1):0){sa=55;break}}else sa=60;d:do if((sa|0)==60){Sa=k[la>>2]|0;x=0;Ra=Ba(k[(k[Sa>>2]|0)+16>>2]|0,Sa|0)|0;j=x;x=0;do if(!(j&1)?(za=k[Ra+4>>2]|0,x=0,fb(140,e|0,231125,31),Aa=x,x=0,!(Aa&1)):0){x=0;pa(57,(za|0)!=0|0,e|0,53,231157,231199);za=x;x=0;if(za&1){za=Hc()|0;Aa=M;K2a(e);Wa=Aa;Xa=za;break}K2a(e);x=0;za=Ba(k[(k[Sa>>2]|0)+16>>2]|0,Sa|0)|0;Aa=x;x=0;if(!(Aa&1)){Aa=k[za+4>>2]|0;n=k[za+8>>2]|0;za=(n|0)==0;if(!za)h0a(n);x=0;Ga=Ba(563,8)|0;Ea=x;x=0;if(Ea&1){Ea=Hc()|0;Ia=M;if(!za)j0a(n);Ya=Ea;Za=Ia;break c}k[Ga>>2]=Aa;k[Ga+4>>2]=n;Aa=Ga;Ia=Ga+8|0;if(!za)h0a(n);Ea=k[p>>2]|0;Ha=Ga+8|0;if(!Ea)_a=p+8|0;else{Ga=k[ma>>2]|0;if((Ga|0)==(Ea|0))$a=Ea;else{m=Ga;while(1){Ga=m+-8|0;k[ma>>2]=Ga;o=k[m+-4>>2]|0;if(!o)ab=Ga;else{j0a(o);ab=k[ma>>2]|0}if((ab|0)==(Ea|0))break;else m=ab}$a=k[p>>2]|0}OBa($a);m=p+8|0;k[m>>2]=0;k[ma>>2]=0;k[p>>2]=0;_a=m}k[p>>2]=Aa;k[ma>>2]=Ha;k[_a>>2]=Ia;if(za)break d;j0a(n);break d}else sa=80}else sa=80;while(0);if((sa|0)==80){Sa=Hc()|0;Wa=M;Xa=Sa}Ya=Xa;Za=Wa;break c}while(0);x=0;g=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;va=x;x=0;if(!(va&1)){va=g+20|0;wa=(k[ma>>2]|0)-(k[p>>2]|0)>>3;k[q>>2]=0;Sa=g+24|0;g=k[Sa>>2]|0;Ra=k[va>>2]|0;j=g-Ra>>2;m=Ra;Ra=g;if(wa>>>0>j>>>0){x=0;fb(244,va|0,wa-j|0,q|0);g=x;x=0;if(g&1){sa=55;break}}else if(wa>>>0>>0?(j=m+(wa<<2)|0,(Ra|0)!=(j|0)):0)k[Sa>>2]=Ra+(~((Ra+-4-j|0)>>>2)<<2);j=b+32|0;Ra=k[j>>2]|0;wa=b+36|0;m=k[wa>>2]|0;e:do if((Ra|0)==(m|0)){g=k[p>>2]|0;Ea=k[ma>>2]|0;if((g|0)!=(Ea|0)){o=b+8|0;k[v>>2]=Ea-g>>3;x=0;xa(720,u|0,v|0);g=x;x=0;if(g&1){sa=55;break c}x=0;g=Fa(86,u|0,0,234592)|0;Ea=x;x=0;if(Ea&1){Ea=Hc()|0;bb=Ea;cb=M}else{k[t>>2]=k[g>>2];k[t+4>>2]=k[g+4>>2];k[t+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;g=Ta(484,t|0,234614)|0;Ea=x;x=0;do if(!(Ea&1)){k[s>>2]=k[g>>2];k[s+4>>2]=k[g+4>>2];k[s+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;fb(240,a|0,o|0,s|0);Ga=x;x=0;if(Ga&1){Ga=Hc()|0;l=M;K2a(s);db=Ga;eb=l;break}else{K2a(s);K2a(t);K2a(u);break e}}else{l=Hc()|0;db=l;eb=M}while(0);K2a(t);bb=db;cb=eb}K2a(u);Ya=bb;Za=cb;break c}}else if((((k[ma>>2]|0)-(k[p>>2]|0)|0)!=(m-Ra|0)?(k[Ra>>2]|0)==0:0)?(k[m+-8>>2]|0)==0:0){x=0;fb(140,w|0,234660,117);o=x;x=0;if(o&1){sa=55;break c}x=0;fb(240,a|0,b+8|0,w|0);o=x;x=0;if(o&1){o=Hc()|0;g=M;K2a(w);Ya=o;Za=g;break c}else{K2a(w);break}}while(0);m=k[wa>>2]|0;Ra=k[j>>2]|0;g=m-Ra>>3;k[y>>2]=g;o=Ra;Ea=m;do if((o|0)==(Ea|0))gb=g;else{if((k[Ea+-8>>2]|0)!=0?(k[o>>2]|0)!=0:0){gb=g;break}l=g+-1|0;k[y>>2]=l;gb=l}while(0);g=k[ma>>2]|0;l=k[p>>2]|0;Ga=g-l>>3;f:do if(Ga>>>0>>0){h=b+8|0;k[E>>2]=Ga;x=0;xa(720,D|0,E|0);na=x;x=0;if(na&1){sa=55;break c}x=0;na=Fa(86,D|0,0,234778)|0;qa=x;x=0;if(qa&1){qa=Hc()|0;ib=qa;jb=M}else{k[C>>2]=k[na>>2];k[C+4>>2]=k[na+4>>2];k[C+8>>2]=k[na+8>>2];k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;x=0;na=Ta(484,C|0,234802)|0;qa=x;x=0;if(qa&1){qa=Hc()|0;kb=qa;lb=M}else{k[B>>2]=k[na>>2];k[B+4>>2]=k[na+4>>2];k[B+8>>2]=k[na+8>>2];k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;x=0;xa(720,F|0,y|0);na=x;x=0;if(na&1){na=Hc()|0;mb=na;ob=M}else{na=i[F>>0]|0;qa=(na&1)==0;x=0;oa=Fa(88,B|0,(qa?F+1|0:k[F+8>>2]|0)|0,(qa?(na&255)>>>1:k[F+4>>2]|0)|0)|0;na=x;x=0;if(na&1){na=Hc()|0;pb=na;qb=M}else{k[A>>2]=k[oa>>2];k[A+4>>2]=k[oa+4>>2];k[A+8>>2]=k[oa+8>>2];k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;x=0;oa=Ta(484,A|0,234839)|0;na=x;x=0;do if(!(na&1)){k[z>>2]=k[oa>>2];k[z+4>>2]=k[oa+4>>2];k[z+8>>2]=k[oa+8>>2];k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;x=0;fb(240,a|0,h|0,z|0);qa=x;x=0;if(qa&1){qa=Hc()|0;Da=M;K2a(z);rb=qa;sb=Da;break}else{K2a(z);K2a(A);K2a(F);K2a(B);K2a(C);K2a(D);Da=k[wa>>2]|0;qa=k[j>>2]|0;tb=k[p>>2]|0;ub=k[ma>>2]|0;vb=qa;wb=Da;xb=qa;yb=Da;break f}}else{Da=Hc()|0;rb=Da;sb=M}while(0);K2a(A);pb=rb;qb=sb}K2a(F);mb=pb;ob=qb}K2a(B);kb=mb;lb=ob}K2a(C);ib=kb;jb=lb}K2a(D);Ya=ib;Za=jb;break c}else{tb=l;ub=g;vb=Ra;wb=m;xb=o;yb=Ea}while(0);Ea=ub-tb>>3;g:do if((Ea>>>0>wb-vb>>3>>>0?(k[xb>>2]|0)!=0:0)?(k[yb+-8>>2]|0)!=0:0){o=b+8|0;k[L>>2]=Ea;x=0;xa(720,K|0,L|0);m=x;x=0;if(m&1){sa=55;break c}x=0;m=Fa(86,K|0,0,234592)|0;Ra=x;x=0;if(Ra&1){Ra=Hc()|0;zb=Ra;Ab=M}else{k[J>>2]=k[m>>2];k[J+4>>2]=k[m+4>>2];k[J+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;m=Ta(484,J|0,234842)|0;Ra=x;x=0;if(Ra&1){Ra=Hc()|0;Bb=Ra;Cb=M}else{k[I>>2]=k[m>>2];k[I+4>>2]=k[m+4>>2];k[I+8>>2]=k[m+8>>2];k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;x=0;xa(720,N|0,y|0);m=x;x=0;if(m&1){m=Hc()|0;Db=m;Eb=M}else{m=i[N>>0]|0;Ra=(m&1)==0;x=0;g=Fa(88,I|0,(Ra?N+1|0:k[N+8>>2]|0)|0,(Ra?(m&255)>>>1:k[N+4>>2]|0)|0)|0;m=x;x=0;if(m&1){m=Hc()|0;Fb=m;Gb=M}else{k[H>>2]=k[g>>2];k[H+4>>2]=k[g+4>>2];k[H+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;g=Ta(484,H|0,234879)|0;m=x;x=0;do if(!(m&1)){k[G>>2]=k[g>>2];k[G+4>>2]=k[g+4>>2];k[G+8>>2]=k[g+8>>2];k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;x=0;fb(240,a|0,o|0,G|0);Ra=x;x=0;if(Ra&1){Ra=Hc()|0;l=M;K2a(G);Hb=Ra;Ib=l;break}else{K2a(G);K2a(H);K2a(N);K2a(I);K2a(J);K2a(K);l=k[j>>2]|0;Ra=k[wa>>2]|0;Jb=l;Kb=Ra;Lb=l;Mb=Ra;break g}}else{Ra=Hc()|0;Hb=Ra;Ib=M}while(0);K2a(H);Fb=Hb;Gb=Ib}K2a(N);Db=Fb;Eb=Gb}K2a(I);Bb=Db;Cb=Eb}K2a(J);zb=Bb;Ab=Cb}K2a(K);Ya=zb;Za=Ab;break c}else{Jb=xb;Kb=yb;Lb=vb;Mb=wb}while(0);if((Jb|0)!=(Kb|0))if(!(k[Kb+-8>>2]|0))Nb=1;else Nb=(k[Jb>>2]|0)!=0;else Nb=0;Ea=Mb-Lb>>3;o=k[p>>2]|0;g=(k[ma>>2]|0)-o>>3;if((g>>>0>>0?g:Ea)|0)if(Nb){g=Jb;m=0;do{k[(k[va>>2]|0)+(m<<2)>>2]=k[g+(m<<3)>>2];g=k[j>>2]|0;Ra=k[p>>2]|0;m=m+1|0;l=(k[wa>>2]|0)-g>>3;Ga=(k[ma>>2]|0)-Ra>>3}while(m>>>0<(Ga>>>0>>0?Ga:l)>>>0);Ob=Ra}else{m=Ea;g=Jb;Ra=0;l=0;while(1){Ga=Ra+-1|0;h=k[va>>2]|0;k[h+(Ga+((k[Sa>>2]|0)-h>>2)<<2)>>2]=k[g+(Ga+m<<3)>>2];g=k[j>>2]|0;Ga=k[p>>2]|0;h=l+1|0;m=(k[wa>>2]|0)-g>>3;oa=(k[ma>>2]|0)-Ga>>3;if(h>>>0>=(oa>>>0>>0?oa:m)>>>0){Ob=Ga;break}else{Ra=~l;l=h}}}else Ob=o;l=k[va>>2]|0;h:do if((k[Sa>>2]|0)==(l|0))Pb=Ob;else{Ra=R+4|0;m=d+8|0;g=d+13|0;wa=d+4|0;j=d+12|0;Ea=W+4|0;h=b+8|0;Ga=ca+8|0;oa=ca+1|0;na=ca+4|0;Da=da+8|0;qa=da+1|0;ya=da+4|0;La=ea+4|0;Ka=ka+8|0;Ca=ka+1|0;Ja=ka+4|0;Na=l;Ma=0;i:while(1){Oa=k[Na+(Ma<<2)>>2]|0;j:do if(Oa){Qb=k[Oa+48>>2]|0;x=0;fb(140,O|0,234889,34);Rb=x;x=0;if(Rb&1){sa=54;break i}x=0;pa(57,(Qb|0)==0|0,O|0,793,231157,234924);Qb=x;x=0;if(Qb&1){sa=198;break i}K2a(O);Qb=(k[p>>2]|0)+(Ma<<3)|0;Rb=k[Qb>>2]|0;x=0;fb(140,P|0,329672,0);Sb=x;x=0;if(Sb&1){sa=54;break i}x=0;pa(57,(Rb|0)!=0|0,P|0,795,231157,234924);Rb=x;x=0;if(Rb&1){sa=199;break i}K2a(P);x=0;Rb=Ba(k[(k[Oa>>2]|0)+16>>2]|0,Oa|0)|0;Sb=x;x=0;if(Sb&1){sa=54;break i}if(!(k[Rb+4>>2]|0)){Rb=k[Oa+40>>2]|0;x=0;fb(140,Q|0,329672,0);Sb=x;x=0;if(Sb&1){sa=54;break i}x=0;pa(57,(Rb|0)==0|0,Q|0,799,231157,234924);Rb=x;x=0;if(Rb&1){sa=200;break i}K2a(Q);x=0;Rb=Ba(k[(k[Oa>>2]|0)+16>>2]|0,Oa|0)|0;Sb=x;x=0;if(Sb&1){sa=54;break i}Sb=k[Qb>>2]|0;x=0;xa(k[(k[Sb>>2]|0)+64>>2]|0,R|0,Sb|0);Sb=x;x=0;if(Sb&1){sa=54;break i}Sb=k[R>>2]|0;Tb=k[Ra>>2]|0;k[R>>2]=0;k[Ra>>2]=0;k[Rb+4>>2]=Sb;Sb=Rb+8|0;Rb=k[Sb>>2]|0;k[Sb>>2]=Tb;if(Rb)j0a(Rb);Rb=k[Ra>>2]|0;if(Rb)j0a(Rb);x=0;Rb=Ba(k[(k[Oa>>2]|0)+16>>2]|0,Oa|0)|0;Tb=x;x=0;if(Tb&1){sa=54;break i}do if(!(k[Rb+4>>2]|0)){Tb=k[Qb>>2]|0;x=0;Sb=Ba(k[k[Tb>>2]>>2]|0,Tb|0)|0;Tb=x;x=0;if(Tb&1){sa=54;break i}if((Sb|0)!=1){x=0;fb(140,V|0,329672,0);Sb=x;x=0;if(Sb&1){sa=54;break i}x=0;pa(57,0,V|0,811,231157,234924);Sb=x;x=0;if(Sb&1){sa=209;break i}K2a(V);break}Sb=(k[la>>2]|0)+8|0;Tb=k[Qb>>2]|0;x=0;fb(k[(k[Tb>>2]|0)+76>>2]|0,U|0,Tb|0,0);Tb=x;x=0;if(Tb&1){sa=54;break i}x=0;Tb=Fa(86,U|0,0,235024)|0;Ub=x;x=0;if(Ub&1){sa=201;break i};k[T>>2]=k[Tb>>2];k[T+4>>2]=k[Tb+4>>2];k[T+8>>2]=k[Tb+8>>2];k[Tb>>2]=0;k[Tb+4>>2]=0;k[Tb+8>>2]=0;x=0;Tb=Ta(484,T|0,235042)|0;Ub=x;x=0;if(Ub&1){sa=202;break i};k[S>>2]=k[Tb>>2];k[S+4>>2]=k[Tb+4>>2];k[S+8>>2]=k[Tb+8>>2];k[Tb>>2]=0;k[Tb+4>>2]=0;k[Tb+8>>2]=0;x=0;fb(240,a|0,Sb|0,S|0);Sb=x;x=0;if(Sb&1){sa=203;break i}K2a(S);K2a(T);K2a(U)}while(0);x=0;xa(k[(k[Oa>>2]|0)+12>>2]|0,Oa|0,a|0);Rb=x;x=0;if(Rb&1){sa=54;break i}else break}x=0;xa(k[(k[Oa>>2]|0)+12>>2]|0,Oa|0,a|0);Rb=x;x=0;if(Rb&1){sa=54;break i}Rb=k[Qb>>2]|0;Sb=k[(k[Rb>>2]|0)+4>>2]|0;x=0;Tb=Ba(k[(k[Oa>>2]|0)+16>>2]|0,Oa|0)|0;Ub=x;x=0;if(Ub&1){sa=54;break i}x=0;Ub=Ta(Sb|0,Rb|0,k[Tb+4>>2]|0)|0;Tb=x;x=0;if(Tb&1){sa=54;break i}if(Ub)break;Ub=k[Qb>>2]|0;x=0;Tb=Ba(k[k[Ub>>2]>>2]|0,Ub|0)|0;Ub=x;x=0;if(Ub&1){sa=54;break i}do if((Tb|0)==1){Ub=iDa(k[Qb>>2]|0,168,6624,0)|0;if(!Ub){sa=218;break i}Rb=Ub+40|0;k[d>>2]=0;k[m>>2]=0;i[g>>0]=1;Sb=k[Ub+48>>2]|0;Vb=Sb>>>0>134217728?134217728:Sb;if(Vb>>>0>2){Wb=Vb>>>0>8?Vb:8;x=0;Xb=Ba(563,Wb<<2|0)|0;Yb=x;x=0;if(Yb&1){sa=54;break i}i[g>>0]=0;k[m>>2]=Vb;k[d>>2]=Wb;k[wa>>2]=Xb;Zb=Xb}else{k[m>>2]=Vb;Zb=d}Dyb(Zb|0,((i[Ub+53>>0]|0)==0?k[Ub+44>>2]|0:Rb)|0,Sb<<2|0)|0;Sb=i[Ub+52>>0]|0;i[j>>0]=Sb;Ub=i[g>>0]|0;if(Sb<<24>>24==0&(k[m>>2]|0)==1)_b=(k[(Ub<<24>>24==0?k[wa>>2]|0:d)>>2]|0)!=1;else _b=1;if(!(Ub<<24>>24))OBa(k[wa>>2]|0);if(!_b){sa=229;break}Ub=k[Qb>>2]|0;x=0;xa(k[(k[Ub>>2]|0)+64>>2]|0,W|0,Ub|0);Ub=x;x=0;if(Ub&1){sa=54;break i}Ub=(k[W>>2]|0)!=0;Sb=k[Ea>>2]|0;if(!Sb){Rb=k[Qb>>2]|0;if(Ub)$b=Rb;else{ac=Rb;break}}else{j0a(Sb);Sb=k[Qb>>2]|0;if(Ub)$b=Sb;else{ac=Sb;break}}x=0;fb(k[(k[$b>>2]|0)+76>>2]|0,ba|0,$b|0,0);Sb=x;x=0;if(Sb&1){sa=54;break i}x=0;Sb=Fa(86,ba|0,0,277523)|0;Ub=x;x=0;if(Ub&1){sa=248;break i};k[aa>>2]=k[Sb>>2];k[aa+4>>2]=k[Sb+4>>2];k[aa+8>>2]=k[Sb+8>>2];k[Sb>>2]=0;k[Sb+4>>2]=0;k[Sb+8>>2]=0;x=0;Sb=Ta(484,aa|0,234023)|0;Ub=x;x=0;if(Ub&1){sa=249;break i};k[$>>2]=k[Sb>>2];k[$+4>>2]=k[Sb+4>>2];k[$+8>>2]=k[Sb+8>>2];k[Sb>>2]=0;k[Sb+4>>2]=0;k[Sb+8>>2]=0;x=0;Sb=Ba(k[(k[Oa>>2]|0)+16>>2]|0,Oa|0)|0;Ub=x;x=0;if(Ub&1){sa=250;break i}Ub=k[Sb+4>>2]|0;x=0;fb(k[(k[Ub>>2]|0)+76>>2]|0,ca|0,Ub|0,0);Ub=x;x=0;if(Ub&1){sa=250;break i}Ub=i[ca>>0]|0;Sb=(Ub&1)==0;x=0;Rb=Fa(88,$|0,(Sb?oa:k[Ga>>2]|0)|0,(Sb?(Ub&255)>>>1:k[na>>2]|0)|0)|0;Ub=x;x=0;if(Ub&1){sa=251;break i};k[_>>2]=k[Rb>>2];k[_+4>>2]=k[Rb+4>>2];k[_+8>>2]=k[Rb+8>>2];k[Rb>>2]=0;k[Rb+4>>2]=0;k[Rb+8>>2]=0;x=0;Rb=Ta(484,_|0,234072)|0;Ub=x;x=0;if(Ub&1){sa=252;break i};k[Z>>2]=k[Rb>>2];k[Z+4>>2]=k[Rb+4>>2];k[Z+8>>2]=k[Rb+8>>2];k[Rb>>2]=0;k[Rb+4>>2]=0;k[Rb+8>>2]=0;Rb=k[Qb>>2]|0;x=0;xa(k[(k[Rb>>2]|0)+64>>2]|0,ea|0,Rb|0);Rb=x;x=0;if(Rb&1){sa=253;break i}Rb=k[ea>>2]|0;x=0;fb(k[(k[Rb>>2]|0)+76>>2]|0,da|0,Rb|0,0);Rb=x;x=0;if(Rb&1){sa=254;break i}Rb=i[da>>0]|0;Ub=(Rb&1)==0;x=0;Sb=Fa(88,Z|0,(Ub?qa:k[Da>>2]|0)|0,(Ub?(Rb&255)>>>1:k[ya>>2]|0)|0)|0;Rb=x;x=0;if(Rb&1){sa=255;break i};k[Y>>2]=k[Sb>>2];k[Y+4>>2]=k[Sb+4>>2];k[Y+8>>2]=k[Sb+8>>2];k[Sb>>2]=0;k[Sb+4>>2]=0;k[Sb+8>>2]=0;x=0;Sb=Ta(484,Y|0,234098)|0;Rb=x;x=0;if(Rb&1){sa=256;break i};k[X>>2]=k[Sb>>2];k[X+4>>2]=k[Sb+4>>2];k[X+8>>2]=k[Sb+8>>2];k[Sb>>2]=0;k[Sb+4>>2]=0;k[Sb+8>>2]=0;x=0;fb(237,a|0,h|0,X|0);Sb=x;x=0;if(Sb&1){sa=257;break i}K2a(X);K2a(Y);K2a(da);Sb=k[La>>2]|0;if(Sb)j0a(Sb);K2a(Z);K2a(_);K2a(ca);K2a($);K2a(aa);K2a(ba);break j}else sa=229;while(0);if((sa|0)==229){sa=0;ac=k[Qb>>2]|0}x=0;fb(k[(k[ac>>2]|0)+76>>2]|0,ja|0,ac|0,0);Tb=x;x=0;if(Tb&1){sa=54;break i}x=0;Tb=Fa(86,ja|0,0,277523)|0;Sb=x;x=0;if(Sb&1){sa=277;break i};k[ia>>2]=k[Tb>>2];k[ia+4>>2]=k[Tb+4>>2];k[ia+8>>2]=k[Tb+8>>2];k[Tb>>2]=0;k[Tb+4>>2]=0;k[Tb+8>>2]=0;x=0;Tb=Ta(484,ia|0,234023)|0;Sb=x;x=0;if(Sb&1){sa=278;break i};k[ha>>2]=k[Tb>>2];k[ha+4>>2]=k[Tb+4>>2];k[ha+8>>2]=k[Tb+8>>2];k[Tb>>2]=0;k[Tb+4>>2]=0;k[Tb+8>>2]=0;x=0;Tb=Ba(k[(k[Oa>>2]|0)+16>>2]|0,Oa|0)|0;Sb=x;x=0;if(Sb&1){sa=279;break i}Sb=k[Tb+4>>2]|0;x=0;fb(k[(k[Sb>>2]|0)+76>>2]|0,ka|0,Sb|0,0);Sb=x;x=0;if(Sb&1){sa=279;break i}Sb=i[ka>>0]|0;Tb=(Sb&1)==0;x=0;Rb=Fa(88,ha|0,(Tb?Ca:k[Ka>>2]|0)|0,(Tb?(Sb&255)>>>1:k[Ja>>2]|0)|0)|0;Sb=x;x=0;if(Sb&1){sa=280;break i};k[ga>>2]=k[Rb>>2];k[ga+4>>2]=k[Rb+4>>2];k[ga+8>>2]=k[Rb+8>>2];k[Rb>>2]=0;k[Rb+4>>2]=0;k[Rb+8>>2]=0;x=0;Rb=Ta(484,ga|0,324339)|0;Sb=x;x=0;if(Sb&1){sa=281;break i};k[fa>>2]=k[Rb>>2];k[fa+4>>2]=k[Rb+4>>2];k[fa+8>>2]=k[Rb+8>>2];k[Rb>>2]=0;k[Rb+4>>2]=0;k[Rb+8>>2]=0;x=0;fb(237,a|0,h|0,fa|0);Rb=x;x=0;if(Rb&1){sa=282;break i}K2a(fa);K2a(ga);K2a(ka);K2a(ha);K2a(ia);K2a(ja)}while(0);Ma=Ma+1|0;Na=k[va>>2]|0;if(Ma>>>0>=(k[Sa>>2]|0)-Na>>2>>>0){sa=165;break}}switch(sa|0){case 54:{Na=Hc()|0;Ua=M;Va=Na;sa=56;break c;break}case 165:{Pb=k[p>>2]|0;break h;break}case 198:{Na=Hc()|0;Ma=M;K2a(O);Ya=Na;Za=Ma;break c;break}case 199:{Ma=Hc()|0;Na=M;K2a(P);Ya=Ma;Za=Na;break c;break}case 200:{Na=Hc()|0;Ma=M;K2a(Q);Ya=Na;Za=Ma;break c;break}case 201:{bc=Hc()|0;cc=M;sa=205;break}case 202:{dc=Hc()|0;ec=M;sa=204;break}case 203:{Ma=Hc()|0;Na=M;K2a(S);dc=Ma;ec=Na;sa=204;break}case 209:{Na=Hc()|0;Ma=M;K2a(V);Ya=Na;Za=Ma;break c;break}case 218:{x=0;hb(49);x=0;sa=55;break c;break}case 248:{fc=Hc()|0;gc=M;break}case 249:{hc=Hc()|0;ic=M;sa=266;break}case 250:{jc=Hc()|0;kc=M;sa=265;break}case 251:{lc=Hc()|0;mc=M;sa=264;break}case 252:{nc=Hc()|0;oc=M;sa=263;break}case 253:{pc=Hc()|0;qc=M;sa=262;break}case 254:{rc=Hc()|0;sc=M;sa=260;break}case 255:{tc=Hc()|0;uc=M;sa=259;break}case 256:{vc=Hc()|0;wc=M;sa=258;break}case 257:{Ma=Hc()|0;Na=M;K2a(X);vc=Ma;wc=Na;sa=258;break}case 277:{xc=Hc()|0;yc=M;sa=287;break}case 278:{zc=Hc()|0;Ac=M;sa=286;break}case 279:{Bc=Hc()|0;Cc=M;sa=285;break}case 280:{Dc=Hc()|0;Ec=M;sa=284;break}case 281:{Fc=Hc()|0;Gc=M;sa=283;break}case 282:{Na=Hc()|0;Ma=M;K2a(fa);Fc=Na;Gc=Ma;sa=283;break}}if((sa|0)==204){K2a(T);bc=dc;cc=ec;sa=205}else if((sa|0)==258){K2a(Y);tc=vc;uc=wc;sa=259}else if((sa|0)==283){K2a(ga);Dc=Fc;Ec=Gc;sa=284}if((sa|0)==205){K2a(U);Ya=bc;Za=cc;break c}else if((sa|0)==259){K2a(da);rc=tc;sc=uc;sa=260}else if((sa|0)==284){K2a(ka);Bc=Dc;Cc=Ec;sa=285}if((sa|0)==260){Ma=k[La>>2]|0;if(!Ma){pc=rc;qc=sc;sa=262}else{j0a(Ma);pc=rc;qc=sc;sa=262}}else if((sa|0)==285){K2a(ha);zc=Bc;Ac=Cc;sa=286}if((sa|0)==262){K2a(Z);nc=pc;oc=qc;sa=263}else if((sa|0)==286){K2a(ia);xc=zc;yc=Ac;sa=287}if((sa|0)==263){K2a(_);lc=nc;mc=oc;sa=264}else if((sa|0)==287){K2a(ja);Ya=xc;Za=yc;break c}if((sa|0)==264){K2a(ca);jc=lc;kc=mc;sa=265}if((sa|0)==265){K2a($);hc=jc;ic=kc;sa=266}if((sa|0)==266){K2a(aa);fc=hc;gc=ic}K2a(ba);Ya=fc;Za=gc;break c}while(0);if(Pb){Sa=k[ma>>2]|0;if((Sa|0)==(Pb|0))Ic=Pb;else{va=Sa;while(1){Sa=va+-8|0;k[ma>>2]=Sa;l=k[va+-4>>2]|0;if(!l)Jc=Sa;else{j0a(l);Jc=k[ma>>2]|0}if((Jc|0)==(Pb|0))break;else va=Jc}Ic=k[p>>2]|0}OBa(Ic)}r=c;return 0}else sa=55}else sa=55}else sa=55;while(0);if((sa|0)==55){c=Hc()|0;Ua=M;Va=c;sa=56}if((sa|0)==56){Ya=Va;Za=Ua}Ua=k[p>>2]|0;if(!Ua){ta=Ya;ua=Za;Sc(ta|0)}Va=k[ma>>2]|0;if((Va|0)==(Ua|0))Kc=Ua;else{sa=Va;while(1){Va=sa+-8|0;k[ma>>2]=Va;c=k[sa+-4>>2]|0;if(!c)Lc=Va;else{j0a(c);Lc=k[ma>>2]|0}if((Lc|0)==(Ua|0))break;else sa=Lc}Kc=k[p>>2]|0}OBa(Kc);ta=Ya;ua=Za;Sc(ta|0);return 0}function UT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+48|0;d=c+32|0;e=c+24|0;f=c+12|0;g=c;h=b+32|0;i=k[h>>2]|0;j=(Vf[k[(k[i>>2]|0)+16>>2]&1023](i)|0)+4|0;l=(k[j>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,l|0,d|0,53,231157,231199);l=x;x=0;if(l&1){l=Hc()|0;K2a(d);Sc(l|0)}K2a(d);l=(Vf[k[(k[i>>2]|0)+16>>2]&1023](i)|0)+4|0;i=k[l>>2]|0;do if((Vf[k[k[i>>2]>>2]&1023](i)|0)==1){l=k[h>>2]|0;j=(Vf[k[(k[l>>2]|0)+16>>2]&1023](l)|0)+4|0;m=(k[j>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,m|0,d|0,53,231157,231199);m=x;x=0;if(m&1){m=Hc()|0;K2a(d);Sc(m|0)}K2a(d);m=(Vf[k[(k[l>>2]|0)+16>>2]&1023](l)|0)+4|0;l=iDa(k[m>>2]|0,168,6624,0)|0;if(!l)BBa();Tf[k[(k[l>>2]|0)+64>>2]&2047](e,l);l=(k[e>>2]|0)==0;m=k[e+4>>2]|0;if(m)j0a(m);if(l){l=(k[h>>2]|0)+8|0;q2a(f,235090,24);x=0;fb(237,a|0,l|0,f|0);l=x;x=0;if(!(l&1)){K2a(f);break}l=Hc()|0;m=M;K2a(f);n=l;o=m;Sc(n|0)}}while(0);f=iDa(k[h>>2]|0,5864,5960,0)|0;if(!f){r=c;return}h=k[f+24>>2]|0;f=(Vf[k[(k[h>>2]|0)+16>>2]&1023](h)|0)+4|0;e=(k[f>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,e|0,d|0,53,231157,231199);e=x;x=0;if(e&1){e=Hc()|0;K2a(d);Sc(e|0)}K2a(d);d=(Vf[k[(k[h>>2]|0)+16>>2]&1023](h)|0)+4|0;h=k[d>>2]|0;if(!h){r=c;return}d=iDa(h,168,6768,0)|0;if(!d){r=c;return}switch(k[d+72>>2]|0){case 4:case 5:case 6:case 8:break;default:{r=c;return}}q2a(g,235115,41);x=0;fb(245,a|0,b+8|0,g|0);b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(g);n=b;o=a;Sc(n|0)}else{K2a(g);r=c;return}}function VT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;d=r;r=r+48|0;e=d+24|0;f=d+8|0;g=d;h=KBa(68)|0;k[h+4>>2]=0;k[h+8>>2]=0;k[h>>2]=31248;i=h+12|0;x=0;xa(731,i|0,6);j=x;x=0;if(j&1){j=Hc()|0;c0a(h);OBa(h);Sc(j|0)}j=i;k[e>>2]=31456;l=b;m=k[l+4>>2]|0;n=e+4|0;k[n>>2]=k[l>>2];k[n+4>>2]=m;k[e+12>>2]=k[b+8>>2];m=k[b+12>>2]|0;k[e+16>>2]=m;b=(m|0)==0;if(!b)h0a(m);x=0;n=Ta(566,i|0,e|0)|0;i=x;x=0;do if(!(i&1)?(k[f>>2]=21048,l=f+4|0,x=0,xa(604,l|0,c|0),o=x,x=0,!(o&1)):0){x=0;Ta(564,n|0,f|0)|0;o=x;x=0;if(o&1){o=Hc()|0;p=M;k[f>>2]=21048;K2a(l);q=p;s=o;break}k[f>>2]=21048;K2a(l);k[e>>2]=31456;if(!b)j0a(m);l=k[a+8>>2]|0;k[g>>2]=j;o=g+4|0;k[o>>2]=h;h0a(h);p=l+4|0;t=k[p>>2]|0;if(t>>>0<(k[l+8>>2]|0)>>>0){k[t>>2]=j;k[t+4>>2]=h;k[g>>2]=0;k[o>>2]=0;k[p>>2]=t+8;j0a(h);r=d;return}x=0;xa(732,l|0,g|0);l=x;x=0;if(l&1){l=Hc()|0;t=M;p=k[o>>2]|0;if(!p){u=t;v=l;j0a(h);Sc(v|0)}j0a(p);u=t;v=l;j0a(h);Sc(v|0)}else{l=k[o>>2]|0;if(!l){j0a(h);r=d;return}j0a(l);j0a(h);r=d;return}}else w=16;while(0);if((w|0)==16){w=Hc()|0;q=M;s=w}k[e>>2]=31456;if(b){u=q;v=s;j0a(h);Sc(v|0)}j0a(m);u=q;v=s;j0a(h);Sc(v|0)}function WT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;c=r;r=r+160|0;d=c+136|0;e=c+112|0;f=c+104|0;g=c+96|0;h=c+88|0;j=c+72|0;l=c+60|0;m=c+48|0;n=c+36|0;o=c+24|0;p=c+12|0;q=c;s=k[b+24>>2]|0;k[e+4>>2]=0;t=e+8|0;k[t>>2]=0;k[e+16>>2]=0;k[e+20>>2]=0;u=e+16|0;k[e+12>>2]=u;k[e>>2]=37924;x=0;fb(242,a|0,s|0,e|0);s=x;x=0;if(s&1){s=Hc()|0;v=M;k[e>>2]=20456;xh(e+12|0,k[u>>2]|0);w=k[t>>2]|0;if(!w){y=v;z=s;Sc(z|0)}k0a(w);y=v;z=s;Sc(z|0)}k[e>>2]=20456;xh(e+12|0,k[u>>2]|0);u=k[t>>2]|0;if(u)k0a(u);u=b+32|0;t=k[u>>2]|0;Tf[k[(k[t>>2]|0)+12>>2]&2047](t,a);t=b+40|0;e=k[t>>2]|0;Tf[k[(k[e>>2]|0)+12>>2]&2047](e,a);e=k[u>>2]|0;u=(Vf[k[(k[e>>2]|0)+16>>2]&1023](e)|0)+4|0;s=(k[u>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,s|0,d|0,53,231157,231199);s=x;x=0;if(s&1){s=Hc()|0;K2a(d);Sc(s|0)}K2a(d);s=(Vf[k[(k[e>>2]|0)+16>>2]&1023](e)|0)+4|0;e=k[s>>2]|0;Tf[k[(k[e>>2]|0)+64>>2]&2047](f,e);e=k[t>>2]|0;x=0;t=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;s=x;x=0;do if(!(s&1)?(u=k[t+4>>2]|0,x=0,fb(140,d|0,231125,31),v=x,x=0,!(v&1)):0){x=0;pa(57,(u|0)!=0|0,d|0,53,231157,231199);u=x;x=0;if(u&1){u=Hc()|0;v=M;K2a(d);A=v;B=u;C=28;break}K2a(d);x=0;u=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;v=x;x=0;if(!(v&1)?(v=k[u+4>>2]|0,x=0,xa(k[(k[v>>2]|0)+64>>2]|0,g|0,v|0),v=x,x=0,!(v&1)):0){x=0;fb(148,h|0,f|0,g|0);v=x;x=0;if(!(v&1)){a:do if(!(k[h>>2]|0)){v=b+8|0;u=k[f>>2]|0;x=0;fb(k[(k[u>>2]|0)+76>>2]|0,o|0,u|0,0);u=x;x=0;if(u&1)C=30;else{x=0;u=Fa(86,o|0,0,235157)|0;w=x;x=0;if(w&1){w=Hc()|0;D=M;E=w}else{k[n>>2]=k[u>>2];k[n+4>>2]=k[u+4>>2];k[n+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;x=0;u=Ta(484,n|0,235181)|0;w=x;x=0;if(w&1){w=Hc()|0;F=M;G=w}else{k[m>>2]=k[u>>2];k[m+4>>2]=k[u+4>>2];k[m+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;u=k[g>>2]|0;x=0;fb(k[(k[u>>2]|0)+76>>2]|0,p|0,u|0,0);u=x;x=0;if(u&1){u=Hc()|0;H=M;I=u}else{u=i[p>>0]|0;w=(u&1)==0;x=0;J=Fa(88,m|0,(w?p+1|0:k[p+8>>2]|0)|0,(w?(u&255)>>>1:k[p+4>>2]|0)|0)|0;u=x;x=0;if(u&1){u=Hc()|0;K=M;L=u}else{k[l>>2]=k[J>>2];k[l+4>>2]=k[J+4>>2];k[l+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;x=0;J=Ta(484,l|0,324339)|0;u=x;x=0;do if(u&1){w=Hc()|0;N=M;O=w}else{k[j>>2]=k[J>>2];k[j+4>>2]=k[J+4>>2];k[j+8>>2]=k[J+8>>2];k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;x=0;fb(237,a|0,v|0,j|0);w=x;x=0;if(w&1){w=Hc()|0;P=M;K2a(j);N=P;O=w;break}K2a(j);K2a(l);K2a(p);K2a(m);K2a(n);K2a(o);w=k[f>>2]|0;P=k[f+4>>2]|0;if(P)h0a(P);k[h>>2]=w;w=h+4|0;Q=k[w>>2]|0;k[w>>2]=P;if(!Q){C=42;break a}j0a(Q);C=42;break a}while(0);K2a(l);K=N;L=O}K2a(p);H=K;I=L}K2a(m);F=H;G=I}K2a(n);D=F;E=G}K2a(o);R=D;S=E}}else C=42;while(0);b:do if((C|0)==42){x=0;v=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;J=x;x=0;if(!(J&1)){J=k[h>>2]|0;u=h+4|0;Q=k[u>>2]|0;if(Q)h0a(Q);k[v+4>>2]=J;J=v+8|0;v=k[J>>2]|0;k[J>>2]=Q;if(v)j0a(v);x=0;v=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Q=x;x=0;if(!(Q&1)){do if(i[v+13>>0]|0){x=0;fb(140,q|0,235221,58);Q=x;x=0;if(Q&1){C=30;break b}x=0;fb(237,a|0,b+8|0,q|0);Q=x;x=0;if(Q&1){Q=Hc()|0;J=M;K2a(q);R=J;S=Q;break b}else{K2a(q);break}}while(0);v=k[u>>2]|0;if(v)j0a(v);v=k[g+4>>2]|0;if(v)j0a(v);v=k[f+4>>2]|0;if(!v){r=c;return 0}j0a(v);r=c;return 0}else C=30}else C=30}while(0);if((C|0)==30){v=Hc()|0;R=M;S=v}v=k[h+4>>2]|0;if(!v){T=R;U=S}else{j0a(v);T=R;U=S}}else{v=Hc()|0;T=M;U=v}v=k[g+4>>2]|0;if(!v){V=T;W=U}else{j0a(v);V=T;W=U}}else C=27}else C=27;while(0);if((C|0)==27){U=Hc()|0;A=M;B=U;C=28}if((C|0)==28){V=A;W=B}B=k[f+4>>2]|0;if(!B){y=V;z=W;Sc(z|0)}j0a(B);y=V;z=W;Sc(z|0);return 0}function XT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;c=r;r=r+176|0;d=c+164|0;e=c+152|0;f=c+140|0;g=c+128|0;h=c+120|0;j=c+104|0;l=c+96|0;m=c+84|0;n=c+72|0;o=c+60|0;p=c+48|0;q=c+36|0;s=c+24|0;t=c+12|0;u=c;v=b+24|0;w=k[v>>2]|0;y=(Vf[k[(k[w>>2]|0)+16>>2]&1023](w)|0)+13|0;i[y>>0]=1;Tf[k[(k[w>>2]|0)+12>>2]&2047](w,a);y=(Vf[k[(k[w>>2]|0)+16>>2]&1023](w)|0)+12|0;do if(!(i[y>>0]|0)){q2a(d,235280,31);x=0;fb(237,a|0,w+8|0,d|0);z=x;x=0;if(z&1){z=Hc()|0;K2a(d);Sc(z|0)}else{K2a(d);break}}while(0);w=k[v>>2]|0;v=(Vf[k[(k[w>>2]|0)+16>>2]&1023](w)|0)+4|0;y=(k[v>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,y|0,d|0,53,231157,231199);y=x;x=0;if(y&1){y=Hc()|0;K2a(d);Sc(y|0)}K2a(d);y=Vf[k[(k[w>>2]|0)+16>>2]&1023](w)|0;w=k[y+4>>2]|0;v=k[y+8>>2]|0;y=(v|0)==0;if(!y)h0a(v);x=0;z=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;A=x;x=0;a:do if(A&1)B=15;else{if(!y)h0a(v);k[z+4>>2]=w;C=z+8|0;D=k[C>>2]|0;k[C>>2]=v;if(D)j0a(D);D=w;if((w|0)!=0?(C=iDa(w,168,6752,0)|0,(C|0)!=0):0){x=0;E=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;F=x;x=0;if(F&1){B=15;break}x=0;va(1498,h|0);F=x;x=0;if(F&1){B=15;break}F=k[h>>2]|0;G=h+4|0;H=k[G>>2]|0;k[h>>2]=0;k[G>>2]=0;k[E+4>>2]=F;F=E+8|0;E=k[F>>2]|0;k[F>>2]=H;if(E)j0a(E);x=0;fb(242,a|0,k[b+36>>2]|0,C|0);C=x;x=0;if(C&1){B=15;break}}else B=23;do if((B|0)==23){x=0;C=Ba(k[k[w>>2]>>2]|0,D|0)|0;E=x;x=0;if(E&1){B=15;break a}if((C|0)==12){x=0;fb(140,j|0,235312,31);C=x;x=0;if(C&1){B=15;break a}x=0;fb(237,a|0,b+8|0,j|0);C=x;x=0;if(!(C&1)){K2a(j);C=k[b+36>>2]|0;x=0;xa(k[(k[C>>2]|0)+12>>2]|0,C|0,a|0);C=x;x=0;if(C&1){B=15;break a}else break}else{C=Hc()|0;E=M;K2a(j);I=C;J=E;break a}}E=b+32|0;C=b+36|0;H=k[C>>2]|0;if((k[E>>2]|0)==12){x=0;fb(242,a|0,H|0,D|0);F=x;x=0;if(F&1){B=15;break a}else break}x=0;xa(k[(k[H>>2]|0)+12>>2]|0,H|0,a|0);H=x;x=0;if(H&1){B=15;break a}H=k[(k[w>>2]|0)+16>>2]|0;F=k[E>>2]|0;x=0;fb(140,g|0,329672,0);G=x;x=0;if(G&1){B=15;break a}x=0;pa(57,(F|0)!=12&(F+-12|0)>>>0<12|0,g|0,282,293207,270531);G=x;x=0;if(G&1){G=Hc()|0;K=M;K2a(g);L=K;N=G;B=16;break a}K2a(g);G=k[C>>2]|0;x=0;K=Ba(k[(k[G>>2]|0)+16>>2]|0,G|0)|0;O=x;x=0;if(O&1){B=15;break a}O=k[K+4>>2]|0;x=0;fb(140,f|0,231125,31);K=x;x=0;if(K&1){B=15;break a}x=0;pa(57,(O|0)!=0|0,f|0,53,231157,231199);O=x;x=0;if(O&1){O=Hc()|0;K=M;K2a(f);L=K;N=O;B=16;break a}K2a(f);x=0;O=Ba(k[(k[G>>2]|0)+16>>2]|0,G|0)|0;G=x;x=0;if(G&1){B=15;break a}x=0;nb(H|0,l|0,D|0,F+14|0,O+4|0);O=x;x=0;if(O&1){B=15;break a}O=k[l>>2]|0;do if(O){x=0;F=Ta(k[(k[O>>2]|0)+24>>2]|0,O|0,D|0)|0;H=x;x=0;if(H&1){B=62;break}if(!F)B=80;else B=44}else B=44;while(0);b:do if((B|0)==44){O=b+8|0;F=k[E>>2]|0;x=0;fb(140,e|0,329672,0);H=x;x=0;if(H&1){B=62;break}x=0;pa(57,(F|0)<141|0,e|0,303,293207,293255);H=x;x=0;if(H&1){H=Hc()|0;G=M;K2a(e);P=G;Q=H;B=63;break}K2a(e);H=k[46308+(F<<2)>>2]|0;F=RLa(H)|0;x=0;fb(140,s|0,H|0,F|0);F=x;x=0;if(F&1){B=62;break}x=0;F=Fa(86,s|0,0,235344)|0;H=x;x=0;if(H&1){H=Hc()|0;R=H;S=M}else{k[q>>2]=k[F>>2];k[q+4>>2]=k[F+4>>2];k[q+8>>2]=k[F+8>>2];k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;x=0;F=Ta(484,q|0,235354)|0;H=x;x=0;if(H&1){H=Hc()|0;T=H;U=M}else{k[p>>2]=k[F>>2];k[p+4>>2]=k[F+4>>2];k[p+8>>2]=k[F+8>>2];k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;x=0;fb(k[(k[w>>2]|0)+76>>2]|0,t|0,D|0,0);F=x;x=0;if(F&1){F=Hc()|0;V=F;W=M}else{F=i[t>>0]|0;H=(F&1)==0;x=0;G=Fa(88,p|0,(H?t+1|0:k[t+8>>2]|0)|0,(H?(F&255)>>>1:k[t+4>>2]|0)|0)|0;F=x;x=0;if(F&1){F=Hc()|0;X=F;Y=M}else{k[o>>2]=k[G>>2];k[o+4>>2]=k[G+4>>2];k[o+8>>2]=k[G+8>>2];k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;x=0;G=Ta(484,o|0,235382)|0;F=x;x=0;if(F&1){F=Hc()|0;Z=F;_=M}else{k[n>>2]=k[G>>2];k[n+4>>2]=k[G+4>>2];k[n+8>>2]=k[G+8>>2];k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;G=k[C>>2]|0;x=0;F=Ba(k[(k[G>>2]|0)+16>>2]|0,G|0)|0;H=x;x=0;do if(H&1)B=69;else{K=k[F+4>>2]|0;x=0;fb(140,d|0,231125,31);$=x;x=0;if($&1){B=69;break}x=0;pa(57,(K|0)!=0|0,d|0,53,231157,231199);K=x;x=0;if(K&1){K=Hc()|0;$=M;K2a(d);aa=$;ba=K;B=70;break}K2a(d);x=0;K=Ba(k[(k[G>>2]|0)+16>>2]|0,G|0)|0;$=x;x=0;if($&1){B=69;break}$=k[K+4>>2]|0;x=0;fb(k[(k[$>>2]|0)+76>>2]|0,u|0,$|0,0);$=x;x=0;if($&1){B=69;break}$=i[u>>0]|0;K=($&1)==0;x=0;ca=Fa(88,n|0,(K?u+1|0:k[u+8>>2]|0)|0,(K?($&255)>>>1:k[u+4>>2]|0)|0)|0;$=x;x=0;do if(!($&1)){k[m>>2]=k[ca>>2];k[m+4>>2]=k[ca+4>>2];k[m+8>>2]=k[ca+8>>2];k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;x=0;fb(237,a|0,O|0,m|0);K=x;x=0;if(K&1){K=Hc()|0;da=M;K2a(m);ea=K;fa=da;break}else{K2a(m);K2a(u);K2a(n);K2a(o);K2a(t);K2a(p);K2a(q);K2a(s);B=80;break b}}else{da=Hc()|0;ea=da;fa=M}while(0);K2a(u);ga=ea;ha=fa}while(0);if((B|0)==69){O=Hc()|0;aa=M;ba=O;B=70}if((B|0)==70){ga=ba;ha=aa}K2a(n);Z=ga;_=ha}K2a(o);X=Z;Y=_}K2a(t);V=X;W=Y}K2a(p);T=V;U=W}K2a(q);R=T;S=U}K2a(s);ia=R;ja=S}while(0);if((B|0)==62){C=Hc()|0;P=M;Q=C;B=63}else if((B|0)==80){C=k[l+4>>2]|0;if(C)j0a(C);break}if((B|0)==63){ia=Q;ja=P}C=k[l+4>>2]|0;if(!C){I=ia;J=ja;break a}j0a(C);I=ia;J=ja;break a}while(0);if(y){r=c;return 0}j0a(v);r=c;return 0}while(0);if((B|0)==15){c=Hc()|0;L=M;N=c;B=16}if((B|0)==16){I=N;J=L}if(y)Sc(I|0);j0a(v);Sc(I|0);return 0}function YT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+13|0;i[e>>0]=1;Tf[k[(k[b>>2]|0)+12>>2]&2047](b,a);e=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+12|0;if(i[e>>0]|0){r=c;return}q2a(d,235280,31);x=0;fb(237,a|0,b+8|0,d|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(d);Sc(b|0)}K2a(d);r=c;return}function ZT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0;c=r;r=r+208|0;d=c+196|0;e=c+184|0;f=c+172|0;g=c+160|0;h=c+148|0;j=c+136|0;l=c+112|0;m=c+104|0;n=c+96|0;o=c+128|0;p=c+84|0;q=c+72|0;s=c+64|0;t=c+56|0;u=c+48|0;v=c+40|0;w=c+24|0;y=c+16|0;z=c+12|0;A=c+8|0;B=c;C=b+24|0;k[j>>2]=0;D=j+4|0;k[D>>2]=0;k[j+8>>2]=0;x=0;E=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;F=x;x=0;a:do if(F&1)G=8;else{b:do if(!(i[E+13>>0]|0)){k[o>>2]=0;H=o+4|0;k[H>>2]=0;I=b+28|0;J=k[C>>2]|0;K=(k[I>>2]|0)-J>>3;L=J;c:do if(K){J=b+8|0;N=v+4|0;O=j+8|0;P=b+36|0;Q=s+4|0;R=t+4|0;S=u+4|0;T=L;U=K;V=0;d:while(1){if((k[T+(V<<3)>>2]|0)==0?!((V|0)==1&(U|0)==2):0){x=0;fb(140,p|0,235436,32);W=x;x=0;if(W&1){G=68;break}x=0;fb(240,a|0,J|0,p|0);W=x;x=0;if(W&1){G=71;break}K2a(p)}else G=72;do if((G|0)==72){G=0;W=k[T+(V<<3)>>2]|0;if(!W){k[v>>2]=0;k[N>>2]=0;X=k[D>>2]|0;if(X>>>0<(k[O>>2]|0)>>>0){k[X>>2]=0;k[X+4>>2]=0;k[v>>2]=0;k[N>>2]=0;k[D>>2]=X+8;break}x=0;xa(745,j|0,v|0);X=x;x=0;if(X&1){G=110;break d}X=k[N>>2]|0;if(!X)break;j0a(X);break}x=0;xa(k[(k[W>>2]|0)+12>>2]|0,W|0,a|0);W=x;x=0;if(W&1){G=68;break d}W=k[(k[C>>2]|0)+(V<<3)>>2]|0;x=0;X=Ba(k[(k[W>>2]|0)+16>>2]|0,W|0)|0;Y=x;x=0;if(Y&1){G=68;break d}Y=k[X+4>>2]|0;x=0;fb(140,e|0,231125,31);X=x;x=0;if(X&1){G=68;break d}x=0;pa(57,(Y|0)!=0|0,e|0,53,231157,231199);Y=x;x=0;if(Y&1){G=78;break d}K2a(e);x=0;Y=Ba(k[(k[W>>2]|0)+16>>2]|0,W|0)|0;W=x;x=0;if(W&1){G=68;break d}W=Y+4|0;X=k[D>>2]|0;if((X|0)==(k[O>>2]|0)){x=0;xa(743,j|0,W|0);Z=x;x=0;if(Z&1){G=68;break d}}else{k[X>>2]=k[W>>2];W=k[Y+8>>2]|0;k[X+4>>2]=W;if(!W)_=X;else{h0a(W);_=k[D>>2]|0}k[D>>2]=_+8}if(!(i[P>>0]|0))$=0;else{W=k[(k[j>>2]|0)+(V<<3)>>2]|0;x=0;fb(140,q|0,235469,41);X=x;x=0;if(X&1){G=68;break d}x=0;pa(57,(W|0)!=0|0,q|0,987,231157,235511);W=x;x=0;if(W&1){G=88;break d}K2a(q);$=i[P>>0]|0}W=$<<24>>24!=0;if(!V){if(!W)break;X=k[k[j>>2]>>2]|0;x=0;xa(k[(k[X>>2]|0)+64>>2]|0,s|0,X|0);X=x;x=0;if(X&1){G=68;break d}X=k[s>>2]|0;Y=k[Q>>2]|0;k[s>>2]=0;k[Q>>2]=0;k[o>>2]=X;X=k[H>>2]|0;k[H>>2]=Y;if(!X)break;j0a(X);X=k[Q>>2]|0;if(!X)break;j0a(X);break}if(W&(k[o>>2]|0)!=0){W=k[(k[j>>2]|0)+(V<<3)>>2]|0;x=0;xa(k[(k[W>>2]|0)+64>>2]|0,u|0,W|0);W=x;x=0;if(W&1){G=68;break d}x=0;fb(148,t|0,o|0,u|0);W=x;x=0;if(W&1){G=103;break d}W=k[t>>2]|0;X=k[R>>2]|0;k[t>>2]=0;k[R>>2]=0;k[o>>2]=W;W=k[H>>2]|0;k[H>>2]=X;do if(W){j0a(W);X=k[R>>2]|0;if(!X)break;j0a(X)}while(0);W=k[S>>2]|0;if(!W)break;j0a(W)}}while(0);V=V+1|0;W=k[C>>2]|0;X=(k[I>>2]|0)-W>>3;Y=W;if(V>>>0>=X>>>0){aa=X;ba=P;ca=Y;G=62;break c}else{T=Y;U=X}}if((G|0)==68){U=Hc()|0;da=M;ea=U;G=70;break}else if((G|0)==71){U=Hc()|0;T=M;K2a(p);fa=U;ga=T;break}else if((G|0)==78){T=Hc()|0;U=M;K2a(e);da=U;ea=T;G=70;break}else if((G|0)==88){T=Hc()|0;U=M;K2a(q);fa=T;ga=U;break}else if((G|0)==103){U=Hc()|0;T=M;P=k[S>>2]|0;if(!P){fa=U;ga=T;break}j0a(P);fa=U;ga=T;break}else if((G|0)==110){T=Hc()|0;U=M;P=k[N>>2]|0;if(!P){fa=T;ga=U;break}j0a(P);fa=T;ga=U;break}}else{aa=0;ba=b+36|0;ca=L;G=62}while(0);e:do if((G|0)==62){f:do if(!(i[ba>>0]|0)){switch(aa|0){case 1:{x=0;L=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;I=x;x=0;if(I&1){G=69;break f}I=k[k[C>>2]>>2]|0;x=0;K=Ba(k[(k[I>>2]|0)+16>>2]|0,I|0)|0;U=x;x=0;if(U&1){G=69;break f}U=k[K+4>>2]|0;x=0;fb(140,d|0,231125,31);K=x;x=0;if(K&1){G=69;break f}x=0;pa(57,(U|0)!=0|0,d|0,53,231157,231199);U=x;x=0;if(U&1){U=Hc()|0;K=M;K2a(d);da=K;ea=U;G=70;break e}K2a(d);x=0;U=Ba(k[(k[I>>2]|0)+16>>2]|0,I|0)|0;I=x;x=0;if(I&1){G=69;break f}I=k[U+4>>2]|0;K=k[U+8>>2]|0;if(K)h0a(K);k[L+4>>2]=I;I=L+8|0;L=k[I>>2]|0;k[I>>2]=K;if(!L)break f;j0a(L);break f;break}case 2:{if(!(k[ca+8>>2]|0)){L=k[D>>2]|0;K=L+-8|0;I=L;while(1){L=I+-8|0;k[D>>2]=L;U=k[I+-4>>2]|0;if(!U)ha=L;else{j0a(U);ha=k[D>>2]|0}if((ha|0)==(K|0))break;else I=ha}}break}default:{}}x=0;I=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;K=x;x=0;if(!(K&1)?(x=0,xa(746,B|0,j|0),K=x,x=0,!(K&1)):0){K=k[B>>2]|0;U=B+4|0;L=k[U>>2]|0;k[B>>2]=0;k[U>>2]=0;k[I+4>>2]=K;K=I+8|0;I=k[K>>2]|0;k[K>>2]=L;if(I)j0a(I)}else G=69}else{do if(!(k[o>>2]|0)){x=0;fb(140,w|0,235598,48);I=x;x=0;if(I&1){G=69;break f}x=0;fb(240,a|0,b+8|0,w|0);I=x;x=0;if(I&1){I=Hc()|0;L=M;K2a(w);fa=I;ga=L;break e}else{K2a(w);break}}while(0);x=0;L=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;I=x;x=0;if(!(I&1)?(k[z>>2]=2,k[A>>2]=(k[D>>2]|0)-(k[j>>2]|0)>>3,x=0,nb(115,y|0,z|0,o|0,A|0),I=x,x=0,!(I&1)):0){I=k[y>>2]|0;K=y+4|0;U=k[K>>2]|0;k[y>>2]=0;k[K>>2]=0;k[L+4>>2]=I;I=L+8|0;L=k[I>>2]|0;k[I>>2]=U;if(L)j0a(L)}else G=69}while(0);if((G|0)==69){N=Hc()|0;da=M;ea=N;G=70;break}N=k[H>>2]|0;if(N)j0a(N);break b}while(0);if((G|0)==70){fa=ea;ga=da}N=k[H>>2]|0;if(!N){ia=fa;ja=ga;break a}j0a(N);ia=fa;ja=ga;break a}else{do if(i[b+36>>0]|0){x=0;fb(140,l|0,235388,47);N=x;x=0;if(N&1){G=8;break a}x=0;fb(240,a|0,b+8|0,l|0);N=x;x=0;if(N&1){N=Hc()|0;S=M;K2a(l);ia=N;ja=S;break a}else{K2a(l);break}}while(0);H=k[C>>2]|0;S=b+28|0;N=k[S>>2]|0;do if((H|0)!=(N|0)){L=m+4|0;U=j+8|0;I=H;g:while(1){K=k[I>>2]|0;do if(!K){k[m>>2]=0;k[L>>2]=0;T=k[D>>2]|0;if(T>>>0<(k[U>>2]|0)>>>0){k[T>>2]=0;k[T+4>>2]=0;k[m>>2]=0;k[L>>2]=0;k[D>>2]=T+8;break}x=0;xa(745,j|0,m|0);T=x;x=0;if(T&1){G=40;break g}T=k[L>>2]|0;if(T)j0a(T)}else{x=0;T=Ba(k[(k[K>>2]|0)+16>>2]|0,K|0)|0;P=x;x=0;if(P&1){G=7;break g}i[T+13>>0]=1;x=0;xa(k[(k[K>>2]|0)+12>>2]|0,K|0,a|0);T=x;x=0;if(T&1){G=7;break g}x=0;T=Ba(k[(k[K>>2]|0)+16>>2]|0,K|0)|0;P=x;x=0;if(P&1){G=7;break g}if(!(i[T+12>>0]|0)){x=0;fb(140,h|0,235280,31);T=x;x=0;if(T&1){G=7;break g}x=0;fb(237,a|0,K+8|0,h|0);T=x;x=0;if(T&1){G=24;break g}K2a(h)}T=k[I>>2]|0;x=0;P=Ba(k[(k[T>>2]|0)+16>>2]|0,T|0)|0;V=x;x=0;if(V&1){G=7;break g}V=k[P+4>>2]|0;x=0;fb(140,g|0,231125,31);P=x;x=0;if(P&1){G=7;break g}x=0;pa(57,(V|0)!=0|0,g|0,53,231157,231199);V=x;x=0;if(V&1){G=29;break g}K2a(g);x=0;V=Ba(k[(k[T>>2]|0)+16>>2]|0,T|0)|0;T=x;x=0;if(T&1){G=7;break g}T=V+4|0;P=k[D>>2]|0;if((P|0)==(k[U>>2]|0)){x=0;xa(743,j|0,T|0);R=x;x=0;if(R&1){G=7;break g}else break}k[P>>2]=k[T>>2];T=k[V+8>>2]|0;k[P+4>>2]=T;if(!T)ka=P;else{h0a(T);ka=k[D>>2]|0}k[D>>2]=ka+8}while(0);I=I+8|0;if((I|0)==(N|0)){G=14;break}}if((G|0)==7){I=Hc()|0;la=M;ma=I;G=9;break a}else if((G|0)==14){na=k[C>>2]|0;oa=k[S>>2]|0;break}else if((G|0)==24){I=Hc()|0;U=M;K2a(h);la=U;ma=I;G=9;break a}else if((G|0)==29){I=Hc()|0;U=M;K2a(g);la=U;ma=I;G=9;break a}else if((G|0)==40){I=Hc()|0;U=M;K=k[L>>2]|0;if(!K){ia=I;ja=U;break a}j0a(K);ia=I;ja=U;break a}}else{na=H;oa=N}while(0);x=0;N=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;H=x;x=0;S=H&1;if((oa-na|0)==8){if(S){G=8;break a}H=k[k[C>>2]>>2]|0;x=0;U=Ba(k[(k[H>>2]|0)+16>>2]|0,H|0)|0;I=x;x=0;if(I&1){G=8;break a}I=k[U+4>>2]|0;x=0;fb(140,f|0,231125,31);U=x;x=0;if(U&1){G=8;break a}x=0;pa(57,(I|0)!=0|0,f|0,53,231157,231199);I=x;x=0;if(I&1){I=Hc()|0;U=M;K2a(f);la=U;ma=I;G=9;break a}K2a(f);x=0;I=Ba(k[(k[H>>2]|0)+16>>2]|0,H|0)|0;H=x;x=0;if(H&1){G=8;break a}H=k[I+4>>2]|0;U=k[I+8>>2]|0;if(U)h0a(U);k[N+4>>2]=H;H=N+8|0;I=k[H>>2]|0;k[H>>2]=U;if(I)j0a(I)}else{if(S){G=8;break a}x=0;xa(746,n|0,j|0);S=x;x=0;if(S&1){G=8;break a}S=k[n>>2]|0;I=n+4|0;U=k[I>>2]|0;k[n>>2]=0;k[I>>2]=0;k[N+4>>2]=S;S=N+8|0;N=k[S>>2]|0;k[S>>2]=U;if(N)j0a(N)}x=0;N=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;U=x;x=0;if(U&1){G=8;break a}i[N+12>>0]=1}while(0);N=k[j>>2]|0;if(!N){r=c;return 0}U=k[D>>2]|0;if((U|0)==(N|0))qa=N;else{S=U;while(1){U=S+-8|0;k[D>>2]=U;I=k[S+-4>>2]|0;if(!I)ra=U;else{j0a(I);ra=k[D>>2]|0}if((ra|0)==(N|0))break;else S=ra}qa=k[j>>2]|0}OBa(qa);r=c;return 0}while(0);if((G|0)==8){c=Hc()|0;la=M;ma=c;G=9}if((G|0)==9){ia=ma;ja=la}la=k[j>>2]|0;if(!la)Sc(ia|0);ja=k[D>>2]|0;if((ja|0)==(la|0))sa=la;else{ma=ja;while(1){ja=ma+-8|0;k[D>>2]=ja;G=k[ma+-4>>2]|0;if(!G)ta=ja;else{j0a(G);ta=k[D>>2]|0}if((ta|0)==(la|0))break;else ma=ta}sa=k[j>>2]|0}OBa(sa);Sc(ia|0);return 0}function _T(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+80|0;d=c+68|0;e=c+24|0;f=c+56|0;g=c+44|0;h=c+32|0;j=c+12|0;l=c;m=k[b+24>>2]|0;n=b+28|0;o=k[n>>2]|0;if((m+-47|0)>>>0<3){p=(Vf[k[(k[o>>2]|0)+16>>2]&1023](o)|0)+13|0;i[p>>0]=1;Tf[k[(k[o>>2]|0)+12>>2]&2047](o,a);p=(Vf[k[(k[o>>2]|0)+16>>2]&1023](o)|0)+12|0;do if(!(i[p>>0]|0)){q2a(d,235280,31);x=0;fb(237,a|0,o+8|0,d|0);q=x;x=0;if(q&1){q=Hc()|0;K2a(d);Sc(q|0)}else{K2a(d);break}}while(0)}else Tf[k[(k[o>>2]|0)+12>>2]&2047](o,a);o=k[n>>2]|0;p=(Vf[k[(k[o>>2]|0)+16>>2]&1023](o)|0)+4|0;q=(k[p>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,q|0,d|0,53,231157,231199);q=x;x=0;if(q&1){q=Hc()|0;K2a(d);Sc(q|0)}K2a(d);q=Vf[k[(k[o>>2]|0)+16>>2]&1023](o)|0;o=q+4|0;p=k[n>>2]|0;n=(Vf[k[(k[p>>2]|0)+16>>2]&1023](p)|0)+4|0;s=(k[n>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,s|0,d|0,53,231157,231199);s=x;x=0;if(s&1){s=Hc()|0;K2a(d);Sc(s|0)}K2a(d);s=(Vf[k[(k[p>>2]|0)+16>>2]&1023](p)|0)+4|0;p=k[s>>2]|0;jg[k[(k[p>>2]|0)+12>>2]&511](e,p,m);a:do if(!(k[e>>2]|0)){p=b+8|0;x=0;fb(140,d|0,329672,0);s=x;x=0;if(!(s&1)){x=0;pa(57,(m|0)<141|0,d|0,303,293207,293255);s=x;x=0;if(s&1){s=Hc()|0;n=M;K2a(d);t=n;u=s;v=27;break}K2a(d);s=k[46308+(m<<2)>>2]|0;n=RLa(s)|0;x=0;fb(140,j|0,s|0,n|0);n=x;x=0;if(!(n&1)){x=0;n=Fa(86,j|0,0,235647)|0;s=x;x=0;if(s&1){s=Hc()|0;w=M;y=s}else{k[h>>2]=k[n>>2];k[h+4>>2]=k[n+4>>2];k[h+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;x=0;n=Ta(484,h|0,235663)|0;s=x;x=0;if(s&1){s=Hc()|0;z=M;A=s}else{k[g>>2]=k[n>>2];k[g+4>>2]=k[n+4>>2];k[g+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;n=k[o>>2]|0;x=0;fb(k[(k[n>>2]|0)+76>>2]|0,l|0,n|0,0);n=x;x=0;if(n&1){n=Hc()|0;B=M;C=n}else{n=i[l>>0]|0;s=(n&1)==0;x=0;D=Fa(88,g|0,(s?l+1|0:k[l+8>>2]|0)|0,(s?(n&255)>>>1:k[l+4>>2]|0)|0)|0;n=x;x=0;do if(n&1){s=Hc()|0;E=M;F=s}else{k[f>>2]=k[D>>2];k[f+4>>2]=k[D+4>>2];k[f+8>>2]=k[D+8>>2];k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;x=0;fb(237,a|0,p|0,f|0);s=x;x=0;if(s&1){s=Hc()|0;G=M;K2a(f);E=G;F=s;break}K2a(f);K2a(l);K2a(g);K2a(h);K2a(j);s=k[o>>2]|0;G=k[q+8>>2]|0;if(G)h0a(G);k[e>>2]=s;s=e+4|0;H=k[s>>2]|0;k[s>>2]=G;if(!H){v=37;break a}j0a(H);v=37;break a}while(0);K2a(l);B=E;C=F}K2a(g);z=B;A=C}K2a(h);w=z;y=A}K2a(j);I=w;J=y}else v=26}else v=26}else v=37;while(0);if((v|0)==37){x=0;y=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1)v=26;else{b=k[e>>2]|0;w=e+4|0;j=k[w>>2]|0;if(j)h0a(j);k[y+4>>2]=b;b=y+8|0;y=k[b>>2]|0;k[b>>2]=j;if(y)j0a(y);y=k[w>>2]|0;if(!y){r=c;return 0}j0a(y);r=c;return 0}}if((v|0)==26){c=Hc()|0;t=M;u=c;v=27}if((v|0)==27){I=t;J=u}u=k[e+4>>2]|0;if(!u)Sc(J|0);j0a(u);Sc(J|0);return 0}function $T(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;c=r;r=r+128|0;d=c+104|0;e=c+72|0;f=c+92|0;g=c+80|0;h=c+60|0;j=c+48|0;l=c+36|0;m=c+24|0;n=c+12|0;o=c;p=k[b+24>>2]|0;q=(Vf[k[(k[p>>2]|0)+16>>2]&1023](p)|0)+4|0;s=(k[q>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,s|0,d|0,53,231157,231199);s=x;x=0;if(s&1){s=Hc()|0;K2a(d);Sc(s|0)}K2a(d);s=Vf[k[(k[p>>2]|0)+16>>2]&1023](p)|0;p=s+4|0;q=k[b+36>>2]|0;t=(Vf[k[(k[q>>2]|0)+16>>2]&1023](q)|0)+4|0;u=(k[t>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,u|0,d|0,53,231157,231199);u=x;x=0;if(u&1){u=Hc()|0;K2a(d);Sc(u|0)}K2a(d);u=(Vf[k[(k[q>>2]|0)+16>>2]&1023](q)|0)+4|0;q=k[p>>2]|0;t=b+32|0;ng[k[(k[q>>2]|0)+16>>2]&255](e,q,k[t>>2]|0,u);a:do if(!(k[e>>2]|0)){q=b+8|0;v=k[t>>2]|0;x=0;fb(140,d|0,329672,0);w=x;x=0;if(!(w&1)){x=0;pa(57,(v|0)<141|0,d|0,303,293207,293255);w=x;x=0;if(w&1){w=Hc()|0;y=M;K2a(d);z=y;A=w;B=23;break}K2a(d);w=k[46308+(v<<2)>>2]|0;v=RLa(w)|0;x=0;fb(140,m|0,w|0,v|0);v=x;x=0;if(!(v&1)){x=0;v=Fa(86,m|0,0,235344)|0;w=x;x=0;if(w&1){w=Hc()|0;C=M;D=w}else{k[l>>2]=k[v>>2];k[l+4>>2]=k[v+4>>2];k[l+8>>2]=k[v+8>>2];k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;x=0;v=Ta(484,l|0,235354)|0;w=x;x=0;if(w&1){w=Hc()|0;E=M;F=w}else{k[j>>2]=k[v>>2];k[j+4>>2]=k[v+4>>2];k[j+8>>2]=k[v+8>>2];k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;v=k[p>>2]|0;x=0;fb(k[(k[v>>2]|0)+76>>2]|0,n|0,v|0,0);v=x;x=0;if(v&1){v=Hc()|0;G=M;H=v}else{v=i[n>>0]|0;w=(v&1)==0;x=0;y=Fa(88,j|0,(w?n+1|0:k[n+8>>2]|0)|0,(w?(v&255)>>>1:k[n+4>>2]|0)|0)|0;v=x;x=0;if(v&1){v=Hc()|0;I=M;J=v}else{k[h>>2]=k[y>>2];k[h+4>>2]=k[y+4>>2];k[h+8>>2]=k[y+8>>2];k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;x=0;y=Ta(484,h|0,235382)|0;v=x;x=0;if(v&1){v=Hc()|0;K=M;L=v}else{k[g>>2]=k[y>>2];k[g+4>>2]=k[y+4>>2];k[g+8>>2]=k[y+8>>2];k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;y=k[u>>2]|0;x=0;fb(k[(k[y>>2]|0)+76>>2]|0,o|0,y|0,0);y=x;x=0;if(y&1){y=Hc()|0;N=M;O=y}else{y=i[o>>0]|0;v=(y&1)==0;x=0;w=Fa(88,g|0,(v?o+1|0:k[o+8>>2]|0)|0,(v?(y&255)>>>1:k[o+4>>2]|0)|0)|0;y=x;x=0;do if(y&1){v=Hc()|0;P=M;Q=v}else{k[f>>2]=k[w>>2];k[f+4>>2]=k[w+4>>2];k[f+8>>2]=k[w+8>>2];k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;x=0;fb(237,a|0,q|0,f|0);v=x;x=0;if(v&1){v=Hc()|0;R=M;K2a(f);P=R;Q=v;break}K2a(f);K2a(o);K2a(g);K2a(h);K2a(n);K2a(j);K2a(l);K2a(m);v=k[p>>2]|0;R=k[s+8>>2]|0;if(R)h0a(R);k[e>>2]=v;v=e+4|0;S=k[v>>2]|0;k[v>>2]=R;if(!S){B=39;break a}j0a(S);B=39;break a}while(0);K2a(o);N=P;O=Q}K2a(g);K=N;L=O}K2a(h);I=K;J=L}K2a(n);G=I;H=J}K2a(j);E=G;F=H}K2a(l);C=E;D=F}K2a(m);T=C;U=D}else B=22}else B=22}else B=39;while(0);do if((B|0)==39){x=0;D=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;C=x;x=0;if(!(C&1)){C=k[e>>2]|0;m=e+4|0;F=k[m>>2]|0;if(F)h0a(F);k[D+24>>2]=C;C=D+28|0;D=k[C>>2]|0;k[C>>2]=F;if(D)j0a(D);x=0;D=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;F=x;x=0;if(!(F&1)){F=D+4|0;if(((k[t>>2]|0)+-39|0)>>>0<6){x=0;C=Ba(563,36)|0;E=x;x=0;if(E&1){B=22;break}k[C+4>>2]=0;k[C+8>>2]=0;k[C>>2]=31792;E=C+16|0;k[E>>2]=0;l=C+20|0;k[l>>2]=0;H=C+12|0;G=C+28|0;k[G>>2]=0;k[C+32>>2]=0;k[C+24>>2]=G;k[H>>2]=37924;G=H;H=C;i0a(C);k[E>>2]=G;E=k[l>>2]|0;k[l>>2]=H;if(E)k0a(E);k[F>>2]=G;G=D+8|0;E=k[G>>2]|0;k[G>>2]=H;if(E)j0a(E)}else{E=k[e>>2]|0;H=k[m>>2]|0;if(H)h0a(H);k[F>>2]=E;E=D+8|0;D=k[E>>2]|0;k[E>>2]=H;if(D)j0a(D)}D=k[m>>2]|0;if(!D){r=c;return}j0a(D);r=c;return}else B=22}else B=22}while(0);if((B|0)==22){c=Hc()|0;z=M;A=c;B=23}if((B|0)==23){T=z;U=A}A=k[e+4>>2]|0;if(!A)Sc(U|0);j0a(A);Sc(U|0)}function aU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0;c=r;r=r+576|0;d=c+556|0;e=c+544|0;f=c+532|0;g=c+520|0;h=c+508|0;j=c+496|0;l=c+484|0;m=c+472|0;n=c+428|0;o=c+408|0;p=c+460|0;q=c+448|0;s=c+440|0;t=c+416|0;u=c+396|0;v=c+376|0;w=c+348|0;y=c+336|0;z=c+328|0;A=c+320|0;B=c+384|0;C=c+360|0;D=c+308|0;E=c+296|0;F=c+284|0;G=c+272|0;H=c+268|0;I=c+256|0;J=c+252|0;K=c+240|0;L=c+232|0;N=c+216|0;O=c+204|0;P=c+192|0;Q=c+180|0;R=c+168|0;S=c+156|0;T=c+144|0;U=c+132|0;V=c+120|0;W=c+108|0;X=c+96|0;Y=c+84|0;Z=c+72|0;_=c+60|0;$=c+48|0;aa=c+36|0;ba=c+24|0;ca=c+12|0;da=c;ea=b+44|0;fa=b+48|0;ga=(k[ea>>2]|0)==(k[fa>>2]|0);k[f>>2]=k[b+32>>2];k[g>>2]=k[b+36>>2];k[e>>2]=k[f>>2];k[d>>2]=k[g>>2];UU(n,e,d);if(ga){x=0;ha=Ba(563,24)|0;ia=x;x=0;if(ia&1){ja=0;ka=5}else{k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha>>2]=31820;ia=ha+12|0;k[ia>>2]=0;k[ha+16>>2]=0;k[ha+20>>2]=0;la=ha;ma=ia;ka=7}}else{la=0;ma=0;ka=7}a:do if((ka|0)==7){ia=k[n>>2]|0;ha=n+4|0;na=k[ha>>2]|0;b:do if((ia|0)!=(na|0)){oa=ma;qa=oa+4|0;ra=oa+8|0;if(ga)sa=ia;else{ta=ia;while(1){ua=k[ta>>2]|0;x=0;xa(k[(k[ua>>2]|0)+12>>2]|0,ua|0,a|0);ua=x;x=0;if(ua&1)break;ta=ta+8|0;if((ta|0)==(na|0))break b}ta=Hc()|0;wa=la;ya=M;za=ta;ka=6;break a}while(1){ta=k[sa>>2]|0;x=0;xa(k[(k[ta>>2]|0)+12>>2]|0,ta|0,a|0);ta=x;x=0;if(ta&1){ka=20;break}ta=k[sa>>2]|0;x=0;ua=Ba(k[(k[ta>>2]|0)+16>>2]|0,ta|0)|0;Aa=x;x=0;if(Aa&1){ka=20;break}Aa=k[ua+4>>2]|0;x=0;fb(140,m|0,231125,31);ua=x;x=0;if(ua&1){ka=20;break}x=0;pa(57,(Aa|0)!=0|0,m|0,53,231157,231199);Aa=x;x=0;if(Aa&1){ka=23;break}K2a(m);x=0;Aa=Ba(k[(k[ta>>2]|0)+16>>2]|0,ta|0)|0;ta=x;x=0;if(ta&1){ka=20;break}ta=Aa+4|0;ua=k[qa>>2]|0;if((ua|0)==(k[ra>>2]|0)){x=0;xa(743,oa|0,ta|0);Ca=x;x=0;if(Ca&1){ka=20;break}}else{k[ua>>2]=k[ta>>2];ta=k[Aa+8>>2]|0;k[ua+4>>2]=ta;if(!ta)Da=ua;else{h0a(ta);Da=k[qa>>2]|0}k[qa>>2]=Da+8}sa=sa+8|0;if((sa|0)==(na|0))break b}if((ka|0)==20){qa=Hc()|0;wa=la;ya=M;za=qa;ka=6;break a}else if((ka|0)==23){qa=Hc()|0;oa=M;K2a(m);wa=la;ya=oa;za=qa;ka=6;break a}}while(0);na=b+24|0;if(ga){ia=k[na>>2]|0;x=0;qa=Ba(k[(k[ia>>2]|0)+16>>2]|0,ia|0)|0;ia=x;x=0;if(ia&1){ja=la;ka=5;break}k[qa+16>>2]=ma;ia=qa+20|0;qa=k[ia>>2]|0;k[ia>>2]=la;if(!qa)Ea=0;else{j0a(qa);Ea=0}}else Ea=la;qa=k[na>>2]|0;x=0;xa(k[(k[qa>>2]|0)+12>>2]|0,qa|0,a|0);qa=x;x=0;if((!(qa&1)?(qa=k[na>>2]|0,x=0,na=Ba(k[(k[qa>>2]|0)+16>>2]|0,qa|0)|0,ia=x,x=0,!(ia&1)):0)?(ia=k[na+4>>2]|0,x=0,fb(140,l|0,231125,31),na=x,x=0,!(na&1)):0){x=0;pa(57,(ia|0)!=0|0,l|0,53,231157,231199);ia=x;x=0;if(ia&1){ia=Hc()|0;na=M;K2a(l);wa=Ea;ya=na;za=ia;ka=6;break}K2a(l);x=0;ia=Ba(k[(k[qa>>2]|0)+16>>2]|0,qa|0)|0;qa=x;x=0;if(!(qa&1)){qa=k[ia+4>>2]|0;na=k[ia+8>>2]|0;ia=(na|0)==0;if(!ia)h0a(na);oa=(qa|0)==0;if(!oa?(ra=iDa(qa,168,6800,0)|0,(ra|0)!=0):0){ta=k[ra+24>>2]|0;x=0;ra=Ba(k[k[ta>>2]>>2]|0,ta|0)|0;ta=x;x=0;if(((!(ta&1)?(x=0,ta=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,ua=x,x=0,!(ua&1)):0)?(i[ta+25>>0]=(ra|0)==8&1,x=0,ra=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,ta=x,x=0,!(ta&1)):0)?(ta=i[ra+25>>0]|0,x=0,ra=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,ua=x,x=0,!(ua&1)):0){i[ra+24>>0]=ta^1;Ga=b;ka=47}else ka=43}else{x=0;ta=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;ra=x;x=0;if(!(ra&1)?(i[ta+24>>0]=0,x=0,ta=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,ra=x,x=0,!(ra&1)):0){i[ta+25>>0]=0;Ga=b;ka=47}else ka=43}c:do if((ka|0)==47){x=0;ta=Ba(k[(k[Ga>>2]|0)+16>>2]|0,b|0)|0;ra=x;x=0;if(ra&1)ka=43;else{d:do if(!(i[ta+24>>0]|0)){k[u+4>>2]=0;ra=u+8|0;k[ra>>2]=0;ua=u+4|0;k[u>>2]=ua;x=0;Aa=Ba(k[(k[Ga>>2]|0)+16>>2]|0,b|0)|0;Ca=x;x=0;e:do if(Ca&1){Ha=0;ka=104}else{do if(!(i[Aa+25>>0]|0))if(oa){Ia=0;ka=110}else{Ja=iDa(qa,168,6768,0)|0;if(!Ja){Ia=0;ka=110;break}Ka=Ja;Ja=na;if(ia){La=Ja;Ma=Ka;ka=109;break}h0a(na);La=Ja;Ma=Ka;ka=109}else{Ka=iDa(qa,168,6800,0)|0;if(!Ka){x=0;hb(49);x=0;Ha=0;ka=104;break e}Ja=iDa(k[Ka+24>>2]|0,168,6720,0)|0;x=0;if(!Ja){BBa();x=0;Ha=0;ka=104;break e}M9(v,Ja);Ka=x;x=0;if(Ka&1){Ha=0;ka=104;break e}Ka=k[v>>2]|0;Na=v+4|0;Oa=k[Na>>2]|0;k[v>>2]=0;k[Na>>2]=0;x=0;xa(747,w|0,Ja|0);Ja=x;x=0;if(Ja&1){Ha=Oa;ka=104;break e}Ws(u,k[ua>>2]|0);k[u>>2]=k[w>>2];Ja=w+4|0;Na=k[Ja>>2]|0;k[ua>>2]=Na;Pa=w+8|0;Qa=k[Pa>>2]|0;k[ra>>2]=Qa;if(!Qa){k[u>>2]=ua;Ra=Na}else{k[Na+8>>2]=ua;k[w>>2]=Ja;k[Ja>>2]=0;k[Pa>>2]=0;Ra=0}Ws(w,Ra);La=Oa;Ma=Ka;ka=109}while(0);do if((ka|0)==109){Ka=Ma;if(!Ma){Ia=La;ka=110}else{Oa=Ka+36|0;Pa=((k[Ka+40>>2]|0)-(k[Oa>>2]|0)|0)==8;x=0;Ja=Ba(k[(k[Ga>>2]|0)+16>>2]|0,b|0)|0;Na=x;x=0;Qa=Na&1;do if(Pa){if(Qa){Ha=La;ka=104;break e}Na=k[Oa>>2]|0;Sa=k[Na>>2]|0;Ua=k[Na+4>>2]|0;if(Ua)h0a(Ua);k[Ja+4>>2]=Sa;Sa=Ja+8|0;Na=k[Sa>>2]|0;k[Sa>>2]=Ua;if(!Na)break;j0a(Na)}else{if(Qa){Ha=La;ka=104;break e}x=0;xa(748,A|0,Oa|0);Na=x;x=0;if(Na&1){Ha=La;ka=104;break e}Na=k[A>>2]|0;Ua=A+4|0;Sa=k[Ua>>2]|0;k[A>>2]=0;k[Ua>>2]=0;k[Ja+4>>2]=Na;Na=Ja+8|0;Ua=k[Na>>2]|0;k[Na>>2]=Sa;if(!Ua)break;j0a(Ua)}while(0);x=0;xa(591,B|0,Ka|0);Ja=x;x=0;if(Ja&1){Ha=La;ka=104;break e}Ja=Ka+76|0;f:do if(!(i[Ja>>0]|0)){Oa=B+4|0;Qa=(k[ha>>2]|0)-(k[n>>2]|0)|0;if(((k[Oa>>2]|0)-(k[B>>2]|0)|0)==(Qa|0)){ka=168;break}k[H>>2]=Qa>>3;x=0;xa(720,G|0,H|0);Qa=x;x=0;if(Qa&1){ka=142;break}x=0;Qa=Fa(86,G|0,0,235856)|0;Pa=x;x=0;if(Pa&1){Pa=Hc()|0;Va=Pa;Wa=M}else{k[F>>2]=k[Qa>>2];k[F+4>>2]=k[Qa+4>>2];k[F+8>>2]=k[Qa+8>>2];k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;x=0;Qa=Ta(484,F|0,232971)|0;Pa=x;x=0;if(Pa&1){Pa=Hc()|0;Xa=Pa;Ya=M}else{k[E>>2]=k[Qa>>2];k[E+4>>2]=k[Qa+4>>2];k[E+8>>2]=k[Qa+8>>2];k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[J>>2]=(k[Oa>>2]|0)-(k[B>>2]|0)>>3;x=0;xa(720,I|0,J|0);Oa=x;x=0;if(Oa&1){Oa=Hc()|0;Za=Oa;_a=M}else{Oa=i[I>>0]|0;Qa=(Oa&1)==0;x=0;Pa=Fa(88,E|0,(Qa?I+1|0:k[I+8>>2]|0)|0,(Qa?(Oa&255)>>>1:k[I+4>>2]|0)|0)|0;Oa=x;x=0;do if(Oa&1){Qa=Hc()|0;$a=M;ab=Qa}else{k[D>>2]=k[Pa>>2];k[D+4>>2]=k[Pa+4>>2];k[D+8>>2]=k[Pa+8>>2];k[Pa>>2]=0;k[Pa+4>>2]=0;k[Pa+8>>2]=0;x=0;Qa=Ta(484,D|0,324339)|0;Ua=x;x=0;if(Ua&1){Ua=Hc()|0;Sa=M;K2a(D);$a=Sa;ab=Ua;break};k[C>>2]=k[Qa>>2];k[C+4>>2]=k[Qa+4>>2];k[C+8>>2]=k[Qa+8>>2];k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;K2a(D);K2a(I);K2a(E);K2a(F);K2a(G);x=0;Qa=Ba(k[(k[Ga>>2]|0)+16>>2]|0,b|0)|0;Ua=x;x=0;g:do if(Ua&1)ka=153;else{h:do if(!((i[Qa+25>>0]|0)==0|(k[ra>>2]|0)==0)){x=0;Ta(484,C|0,235897)|0;Sa=x;x=0;if(Sa&1){ka=153;break g}Sa=k[u>>2]|0;if((Sa|0)==(ua|0))break;Na=K+8|0;bb=K+1|0;cb=K+4|0;db=Sa;while(1){Sa=db+16|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;eb=i[Sa>>0]|0;gb=(eb&1)==0?(eb&255)>>>1:k[db+20>>2]|0;x=0;nb(83,K|0,324196,1,gb+1|0);eb=x;x=0;if(eb&1){ka=157;break}x=0;Fa(88,K|0,((i[Sa>>0]&1)==0?Sa+1|0:k[db+24>>2]|0)|0,gb|0)|0;gb=x;x=0;if(gb&1){ka=157;break}gb=i[K>>0]|0;Sa=(gb&1)==0;x=0;Fa(88,C|0,(Sa?bb:k[Na>>2]|0)|0,(Sa?(gb&255)>>>1:k[cb>>2]|0)|0)|0;gb=x;x=0;if(gb&1){ka=164;break}K2a(K);gb=k[db+4>>2]|0;if(!gb){Sa=db;while(1){eb=k[Sa+8>>2]|0;if((k[eb>>2]|0)==(Sa|0)){ib=eb;break}else Sa=eb}}else{Sa=gb;while(1){eb=k[Sa>>2]|0;if(!eb){ib=Sa;break}else Sa=eb}}if((ib|0)==(ua|0))break h;else db=ib}if((ka|0)==157){db=Hc()|0;cb=M;K2a(K);jb=cb;kb=db;ka=154;break g}else if((ka|0)==164){db=Hc()|0;cb=M;K2a(K);lb=db;mb=cb;break g}}while(0);x=0;fb(237,a|0,b+8|0,C|0);cb=x;x=0;if(cb&1){ka=153;break}K2a(C);ka=320;break f}while(0);if((ka|0)==153){Qa=Hc()|0;jb=M;kb=Qa;ka=154}if((ka|0)==154){lb=kb;mb=jb}K2a(C);ob=lb;pb=mb;break f}while(0);K2a(I);Za=ab;_a=$a}K2a(E);Xa=Za;Ya=_a}K2a(F);Va=Xa;Wa=Ya}K2a(G);ob=Va;pb=Wa}else ka=168;while(0);i:do if((ka|0)==168){if(ga){Pa=k[n>>2]|0;if((k[ha>>2]|0)==(Pa|0)){ka=320;break}Oa=T+8|0;Qa=T+1|0;Ua=T+4|0;cb=L+4|0;db=Pa;Pa=0;j:while(1){Na=k[db+(Pa<<3)>>2]|0;x=0;bb=Ba(k[(k[Na>>2]|0)+16>>2]|0,Na|0)|0;Sa=x;x=0;if(Sa&1){ka=141;break}Sa=k[bb+4>>2]|0;x=0;fb(140,g|0,231125,31);bb=x;x=0;if(bb&1){ka=141;break}x=0;pa(57,(Sa|0)!=0|0,g|0,53,231157,231199);Sa=x;x=0;if(Sa&1){ka=175;break}K2a(g);x=0;Sa=Ba(k[(k[Na>>2]|0)+16>>2]|0,Na|0)|0;Na=x;x=0;if(Na&1){ka=141;break}do if(!(i[Ja>>0]|0)){Na=k[(k[n>>2]|0)+(Pa<<3)>>2]|0;x=0;bb=Ba(k[(k[Na>>2]|0)+16>>2]|0,Na|0)|0;gb=x;x=0;if(gb&1){ka=141;break j}gb=k[bb+4>>2]|0;x=0;fb(140,e|0,231125,31);bb=x;x=0;if(bb&1){ka=141;break j}x=0;pa(57,(gb|0)!=0|0,e|0,53,231157,231199);gb=x;x=0;if(gb&1){ka=191;break j}K2a(e);x=0;gb=Ba(k[(k[Na>>2]|0)+16>>2]|0,Na|0)|0;Na=x;x=0;if(Na&1){ka=141;break j}Na=k[gb+4>>2]|0;x=0;gb=Ta(k[(k[Na>>2]|0)+4>>2]|0,Na|0,k[(k[B>>2]|0)+(Pa<<3)>>2]|0)|0;Na=x;x=0;if(Na&1){ka=141;break j}if(gb)break;gb=k[(k[n>>2]|0)+(Pa<<3)>>2]|0;x=0;Na=Ba(k[(k[gb>>2]|0)+16>>2]|0,gb|0)|0;bb=x;x=0;if(bb&1){ka=141;break j}bb=k[Na+4>>2]|0;x=0;fb(140,d|0,231125,31);Na=x;x=0;if(Na&1){ka=141;break j}x=0;pa(57,(bb|0)!=0|0,d|0,53,231157,231199);bb=x;x=0;if(bb&1){ka=198;break j}K2a(d);x=0;bb=Ba(k[(k[gb>>2]|0)+16>>2]|0,gb|0)|0;Na=x;x=0;if(Na&1){ka=141;break j}Na=k[bb+4>>2]|0;x=0;fb(k[(k[Na>>2]|0)+76>>2]|0,S|0,Na|0,0);Na=x;x=0;if(Na&1){ka=141;break j}x=0;Na=Fa(86,S|0,0,235998)|0;bb=x;x=0;if(bb&1){ka=207;break j};k[R>>2]=k[Na>>2];k[R+4>>2]=k[Na+4>>2];k[R+8>>2]=k[Na+8>>2];k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;x=0;Na=Ta(484,R|0,266430)|0;bb=x;x=0;if(bb&1){ka=208;break j};k[Q>>2]=k[Na>>2];k[Q+4>>2]=k[Na+4>>2];k[Q+8>>2]=k[Na+8>>2];k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;Na=k[(k[B>>2]|0)+(Pa<<3)>>2]|0;x=0;fb(k[(k[Na>>2]|0)+76>>2]|0,T|0,Na|0,0);Na=x;x=0;if(Na&1){ka=209;break j}Na=i[T>>0]|0;bb=(Na&1)==0;x=0;eb=Fa(88,Q|0,(bb?Qa:k[Oa>>2]|0)|0,(bb?(Na&255)>>>1:k[Ua>>2]|0)|0)|0;Na=x;x=0;if(Na&1){ka=210;break j};k[P>>2]=k[eb>>2];k[P+4>>2]=k[eb+4>>2];k[P+8>>2]=k[eb+8>>2];k[eb>>2]=0;k[eb+4>>2]=0;k[eb+8>>2]=0;x=0;eb=Ta(484,P|0,266320)|0;Na=x;x=0;if(Na&1){ka=211;break j};k[O>>2]=k[eb>>2];k[O+4>>2]=k[eb+4>>2];k[O+8>>2]=k[eb+8>>2];k[eb>>2]=0;k[eb+4>>2]=0;k[eb+8>>2]=0;x=0;fb(237,a|0,gb+8|0,O|0);gb=x;x=0;if(gb&1){ka=212;break j}K2a(O);K2a(P);K2a(T);K2a(Q);K2a(R);K2a(S)}else{gb=k[Sa+4>>2]|0;if(!gb)break;eb=iDa(gb,168,6624,0)|0;if(!eb)break;x=0;xa(k[(k[eb>>2]|0)+64>>2]|0,L|0,eb|0);eb=x;x=0;if(eb&1){ka=141;break j}eb=(k[L>>2]|0)==0;gb=k[cb>>2]|0;if(gb)j0a(gb);if(!eb)break;eb=k[(k[n>>2]|0)+(Pa<<3)>>2]|0;x=0;fb(140,N|0,235941,56);gb=x;x=0;if(gb&1){ka=141;break j}x=0;fb(237,a|0,eb+8|0,N|0);eb=x;x=0;if(eb&1){ka=186;break j}K2a(N)}while(0);Pa=Pa+1|0;db=k[n>>2]|0;if(Pa>>>0>=(k[ha>>2]|0)-db>>3>>>0){ka=320;break i}}switch(ka|0){case 141:{db=Hc()|0;qb=M;rb=db;ka=143;break i;break}case 175:{db=Hc()|0;Pa=M;K2a(g);qb=Pa;rb=db;ka=143;break i;break}case 186:{db=Hc()|0;Pa=M;K2a(N);ob=db;pb=Pa;break i;break}case 191:{Pa=Hc()|0;db=M;K2a(e);qb=db;rb=Pa;ka=143;break i;break}case 198:{Pa=Hc()|0;db=M;K2a(d);qb=db;rb=Pa;ka=143;break i;break}case 207:{sb=Hc()|0;tb=M;break}case 208:{ub=Hc()|0;vb=M;ka=216;break}case 209:{wb=Hc()|0;xb=M;ka=215;break}case 210:{yb=Hc()|0;zb=M;ka=214;break}case 211:{Ab=Hc()|0;Bb=M;ka=213;break}case 212:{Pa=Hc()|0;db=M;K2a(O);Ab=Pa;Bb=db;ka=213;break}}if((ka|0)==213){K2a(P);yb=Ab;zb=Bb;ka=214}if((ka|0)==214){K2a(T);wb=yb;xb=zb;ka=215}if((ka|0)==215){K2a(Q);ub=wb;vb=xb;ka=216}if((ka|0)==216){K2a(R);sb=ub;tb=vb}K2a(S);ob=sb;pb=tb;break}x=0;xa(749,U|0,Ka|0);db=x;x=0;if(db&1){ka=142;break}k:do if(!(i[Ja>>0]|0)){db=U+4|0;Pa=((k[db>>2]|0)-(k[U>>2]|0)|0)/12|0;cb=k[fa>>2]|0;Ua=k[ea>>2]|0;Oa=cb-Ua>>3;Qa=Ua;if(Pa>>>0>Oa>>>0){x=0;fb(140,W|0,236154,32);Sa=x;x=0;if(Sa&1){ka=226;break}x=0;fb(237,a|0,b+8|0,W|0);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;eb=M;K2a(W);Cb=Sa;Db=eb;break}else{K2a(W);ka=310;break}}if(Pa>>>0>>0){x=0;fb(140,X|0,236187,19);Oa=x;x=0;if(Oa&1){ka=226;break}x=0;fb(237,a|0,b+8|0,X|0);Oa=x;x=0;if(Oa&1){Oa=Hc()|0;Pa=M;K2a(X);Cb=Oa;Db=Pa;break}else{K2a(X);ka=310;break}}if((cb|0)==(Ua|0)){ka=310;break}else{Eb=Qa;Fb=Qa;Gb=Ua;Hb=cb;Ib=0;Jb=0}l:while(1){cb=Jb;Jb=Jb+1|0;if(Jb>>>0>3>>>0){Ua=Eb;Qa=Gb;Pa=Hb;Oa=Fb;eb=Ib;Sa=Jb;while(1){gb=k[Oa+(cb<<3)>>2]|0;Na=k[Oa+(Sa<<3)>>2]|0;bb=i[gb>>0]|0;Kb=(bb&1)==0;Lb=(bb&255)>>>1;bb=Kb?Lb:k[gb+4>>2]|0;Mb=i[Na>>0]|0;Nb=(Mb&1)==0;m:do if((bb|0)==((Nb?(Mb&255)>>>1:k[Na+4>>2]|0)|0)){Ob=Nb?Na+1|0:k[Na+8>>2]|0;do if(!Kb){if(ZLa(k[gb+8>>2]|0,Ob,bb)|0){Pb=Ua;Qb=Qa;Rb=Pa;Sb=eb;break m}}else{if(!bb)break;Tb=Lb;Ub=gb+1|0;Vb=Ob;while(1){if((i[Ub>>0]|0)!=(i[Vb>>0]|0)){Pb=Ua;Qb=Qa;Rb=Pa;Sb=eb;break m}Tb=Tb+-1|0;if(!Tb)break;else{Ub=Ub+1|0;Vb=Vb+1|0}}}while(0);Ob=k[(k[n>>2]|0)+(cb<<3)>>2]|0;x=0;fb(140,Y|0,236207,25);Vb=x;x=0;if(Vb&1){ka=225;break l}x=0;fb(237,a|0,Ob+8|0,Y|0);Ob=x;x=0;if(Ob&1){ka=254;break l}K2a(Y);Ob=k[ea>>2]|0;Pb=Ob;Qb=Ob;Rb=k[fa>>2]|0;Sb=1}else{Pb=Ua;Qb=Qa;Rb=Pa;Sb=eb}while(0);Sa=Sa+1|0;if(Sa>>>0>=Rb-Qb>>3>>>0){Wb=Pb;Xb=Qb;Yb=Rb;Zb=Sb;break}else{Ua=Pb;Qa=Qb;Pa=Rb;Oa=Qb;eb=Sb}}}else{Wb=Eb;Xb=Gb;Yb=Hb;Zb=Ib}if(Jb>>>0>=Yb-Xb>>3>>>0){_b=Wb;$b=Xb;ac=Yb;bc=Zb;ka=241;break}else{Eb=Wb;Fb=Xb;Gb=Xb;Hb=Yb;Ib=Zb}}if((ka|0)==225){eb=Hc()|0;cc=M;dc=eb;ka=227;break}else if((ka|0)==241){if(bc|(ac|0)==($b|0)){ka=310;break}eb=ca+8|0;Oa=ca+1|0;Pa=ca+4|0;Qa=b+8|0;Ua=_b;Sa=0;n:while(1){cb=k[db>>2]|0;gb=k[U>>2]|0;Lb=gb;o:do if((cb|0)==(gb|0))ka=305;else{bb=k[Ua+(Sa<<3)>>2]|0;Kb=i[bb>>0]|0;Na=(Kb&1)==0;Nb=Na?(Kb&255)>>>1:k[bb+4>>2]|0;Kb=bb+8|0;Mb=bb+1|0;bb=(cb-gb|0)/12|0;Ob=(Nb|0)==0;p:do if(Na){Vb=0;while(1){Ub=Lb+(Vb*12|0)|0;Tb=i[Ub>>0]|0;ec=(Tb&1)==0;fc=(Tb&255)>>>1;q:do if(((ec?fc:k[Lb+(Vb*12|0)+4>>2]|0)|0)==(Nb|0)){if(!ec)if(!(ZLa(k[Lb+(Vb*12|0)+8>>2]|0,Mb,Nb)|0)){gc=Vb;break p}else break;if(Ob){gc=Vb;break p}Tb=fc;hc=Ub+1|0;ic=Mb;while(1){if((i[hc>>0]|0)!=(i[ic>>0]|0))break q;Tb=Tb+-1|0;if(!Tb){gc=Vb;break p}else{hc=hc+1|0;ic=ic+1|0}}}while(0);Vb=Vb+1|0;if(Vb>>>0>=bb>>>0){ka=305;break o}}}else{Vb=0;while(1){Ub=Lb+(Vb*12|0)|0;fc=i[Ub>>0]|0;ec=(fc&1)==0;ic=(fc&255)>>>1;r:do if(((ec?ic:k[Lb+(Vb*12|0)+4>>2]|0)|0)==(Nb|0)){fc=k[Kb>>2]|0;if(!ec)if(!(ZLa(k[Lb+(Vb*12|0)+8>>2]|0,fc,Nb)|0)){gc=Vb;break p}else break;if(Ob){gc=Vb;break p}hc=ic;Tb=Ub+1|0;jc=fc;while(1){if((i[Tb>>0]|0)!=(i[jc>>0]|0))break r;hc=hc+-1|0;if(!hc){gc=Vb;break p}else{Tb=Tb+1|0;jc=jc+1|0}}}while(0);Vb=Vb+1|0;if(Vb>>>0>=bb>>>0){ka=305;break o}}}while(0);bb=k[(k[n>>2]|0)+(Sa<<3)>>2]|0;x=0;Ob=Ba(k[(k[bb>>2]|0)+16>>2]|0,bb|0)|0;Nb=x;x=0;if(Nb&1){ka=224;break n}Nb=k[Ob+4>>2]|0;x=0;fb(140,f|0,231125,31);Ob=x;x=0;if(Ob&1){ka=224;break n}x=0;pa(57,(Nb|0)!=0|0,f|0,53,231157,231199);Nb=x;x=0;if(Nb&1){ka=277;break n}K2a(f);x=0;Nb=Ba(k[(k[bb>>2]|0)+16>>2]|0,bb|0)|0;bb=x;x=0;if(bb&1){ka=224;break n}bb=k[Nb+4>>2]|0;x=0;Nb=Ta(k[(k[bb>>2]|0)+4>>2]|0,bb|0,k[(k[B>>2]|0)+(gc<<3)>>2]|0)|0;bb=x;x=0;if(bb&1){ka=224;break n}if(Nb)break;Nb=k[(k[n>>2]|0)+(Sa<<3)>>2]|0;x=0;bb=Ba(k[(k[Nb>>2]|0)+16>>2]|0,Nb|0)|0;Ob=x;x=0;if(Ob&1){ka=224;break n}Ob=k[bb+4>>2]|0;x=0;fb(140,h|0,231125,31);bb=x;x=0;if(bb&1){ka=224;break n}x=0;pa(57,(Ob|0)!=0|0,h|0,53,231157,231199);Ob=x;x=0;if(Ob&1){ka=284;break n}K2a(h);x=0;Ob=Ba(k[(k[Nb>>2]|0)+16>>2]|0,Nb|0)|0;bb=x;x=0;if(bb&1){ka=224;break n}bb=k[Ob+4>>2]|0;x=0;fb(k[(k[bb>>2]|0)+76>>2]|0,ba|0,bb|0,0);bb=x;x=0;if(bb&1){ka=224;break n}x=0;bb=Fa(86,ba|0,0,235998)|0;Ob=x;x=0;if(Ob&1){ka=293;break n};k[aa>>2]=k[bb>>2];k[aa+4>>2]=k[bb+4>>2];k[aa+8>>2]=k[bb+8>>2];k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;x=0;bb=Ta(484,aa|0,266430)|0;Ob=x;x=0;if(Ob&1){ka=294;break n};k[$>>2]=k[bb>>2];k[$+4>>2]=k[bb+4>>2];k[$+8>>2]=k[bb+8>>2];k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;bb=k[(k[B>>2]|0)+(Sa<<3)>>2]|0;x=0;fb(k[(k[bb>>2]|0)+76>>2]|0,ca|0,bb|0,0);bb=x;x=0;if(bb&1){ka=295;break n}bb=i[ca>>0]|0;Ob=(bb&1)==0;x=0;Kb=Fa(88,$|0,(Ob?Oa:k[eb>>2]|0)|0,(Ob?(bb&255)>>>1:k[Pa>>2]|0)|0)|0;bb=x;x=0;if(bb&1){ka=296;break n};k[_>>2]=k[Kb>>2];k[_+4>>2]=k[Kb+4>>2];k[_+8>>2]=k[Kb+8>>2];k[Kb>>2]=0;k[Kb+4>>2]=0;k[Kb+8>>2]=0;x=0;Kb=Ta(484,_|0,266320)|0;bb=x;x=0;if(bb&1){ka=297;break n};k[Z>>2]=k[Kb>>2];k[Z+4>>2]=k[Kb+4>>2];k[Z+8>>2]=k[Kb+8>>2];k[Kb>>2]=0;k[Kb+4>>2]=0;k[Kb+8>>2]=0;x=0;fb(237,a|0,Nb+8|0,Z|0);Nb=x;x=0;if(Nb&1){ka=298;break n}K2a(Z);K2a(_);K2a(ca);K2a($);K2a(aa);K2a(ba)}while(0);if((ka|0)==305){ka=0;x=0;fb(140,da|0,236233,51);Lb=x;x=0;if(Lb&1){ka=224;break}x=0;fb(237,a|0,Qa|0,da|0);Lb=x;x=0;if(Lb&1){ka=308;break}K2a(da)}Sa=Sa+1|0;Ua=k[ea>>2]|0;if(Sa>>>0>=(k[fa>>2]|0)-Ua>>3>>>0){ka=310;break k}}switch(ka|0){case 224:{Ua=Hc()|0;cc=M;dc=Ua;ka=227;break k;break}case 277:{Ua=Hc()|0;Sa=M;K2a(f);cc=Sa;dc=Ua;ka=227;break k;break}case 284:{Ua=Hc()|0;Sa=M;K2a(h);cc=Sa;dc=Ua;ka=227;break k;break}case 293:{kc=Hc()|0;lc=M;break}case 294:{mc=Hc()|0;nc=M;ka=302;break}case 295:{oc=Hc()|0;pc=M;ka=301;break}case 296:{Ua=Hc()|0;qc=M;rc=Ua;ka=300;break}case 297:{sc=Hc()|0;tc=M;ka=299;break}case 298:{Ua=Hc()|0;Sa=M;K2a(Z);sc=Ua;tc=Sa;ka=299;break}case 308:{Sa=Hc()|0;Ua=M;K2a(da);Cb=Sa;Db=Ua;break k;break}}if((ka|0)==299){K2a(_);qc=tc;rc=sc;ka=300}if((ka|0)==300){K2a(ca);oc=rc;pc=qc;ka=301}if((ka|0)==301){K2a($);mc=oc;nc=pc;ka=302}if((ka|0)==302){K2a(aa);kc=mc;lc=nc}K2a(ba);Cb=kc;Db=lc;break}else if((ka|0)==254){Ua=Hc()|0;Sa=M;K2a(Y);Cb=Ua;Db=Sa;break}}else{x=0;fb(140,V|0,236076,77);Sa=x;x=0;if(Sa&1){ka=226;break}x=0;fb(237,a|0,b+8|0,V|0);Sa=x;x=0;if(Sa&1){Sa=Hc()|0;Ua=M;K2a(V);Cb=Sa;Db=Ua;break}else{K2a(V);ka=310;break}}while(0);if((ka|0)==226){Ua=Hc()|0;cc=M;dc=Ua;ka=227}else if((ka|0)==310){Ua=k[U>>2]|0;if(!Ua){ka=320;break}Sa=U+4|0;Qa=k[Sa>>2]|0;if((Qa|0)==(Ua|0))uc=Ua;else{Pa=Qa;do{Qa=Pa+-12|0;k[Sa>>2]=Qa;K2a(Qa);Pa=k[Sa>>2]|0}while((Pa|0)!=(Ua|0));uc=k[U>>2]|0}OBa(uc);ka=320;break}if((ka|0)==227){Cb=dc;Db=cc}Ua=k[U>>2]|0;if(!Ua){ob=Cb;pb=Db;break}Pa=U+4|0;Sa=k[Pa>>2]|0;if((Sa|0)==(Ua|0))vc=Ua;else{Qa=Sa;do{Sa=Qa+-12|0;k[Pa>>2]=Sa;K2a(Sa);Qa=k[Pa>>2]|0}while((Qa|0)!=(Ua|0));vc=k[U>>2]|0}OBa(vc);ob=Cb;pb=Db}while(0);if((ka|0)==142){Ja=Hc()|0;qb=M;rb=Ja;ka=143}else if((ka|0)==320){Ja=k[B>>2]|0;if(Ja){Ka=B+4|0;Ua=k[Ka>>2]|0;if((Ua|0)==(Ja|0))wc=Ja;else{Qa=Ua;while(1){Ua=Qa+-8|0;k[Ka>>2]=Ua;Pa=k[Qa+-4>>2]|0;if(!Pa)xc=Ua;else{j0a(Pa);xc=k[Ka>>2]|0}if((xc|0)==(Ja|0))break;else Qa=xc}wc=k[B>>2]|0}OBa(wc)}yc=La;break}if((ka|0)==143){ob=rb;pb=qb}Qa=k[B>>2]|0;if(!Qa){zc=ob;Ac=pb;Bc=La;break e}Ja=B+4|0;Ka=k[Ja>>2]|0;if((Ka|0)==(Qa|0))Cc=Qa;else{Pa=Ka;while(1){Ka=Pa+-8|0;k[Ja>>2]=Ka;Ua=k[Pa+-4>>2]|0;if(!Ua)Dc=Ka;else{j0a(Ua);Dc=k[Ja>>2]|0}if((Dc|0)==(Qa|0))break;else Pa=Dc}Cc=k[B>>2]|0}OBa(Cc);zc=ob;Ac=pb;Bc=La;break e}}while(0);do if((ka|0)==110){x=0;fb(140,y|0,235835,20);Pa=x;x=0;if(Pa&1){Ha=Ia;ka=104;break e}x=0;fb(237,a|0,b+8|0,y|0);Pa=x;x=0;if(Pa&1){Pa=Hc()|0;Qa=M;K2a(y);zc=Pa;Ac=Qa;Bc=Ia;break e}K2a(y);x=0;Qa=Ba(k[(k[Ga>>2]|0)+16>>2]|0,b|0)|0;Pa=x;x=0;if(Pa&1){Ha=Ia;ka=104;break e}x=0;va(1498,z|0);Pa=x;x=0;if(Pa&1){Ha=Ia;ka=104;break e}Pa=k[z>>2]|0;Ja=z+4|0;Ua=k[Ja>>2]|0;k[z>>2]=0;k[Ja>>2]=0;k[Qa+4>>2]=Pa;Pa=Qa+8|0;Qa=k[Pa>>2]|0;k[Pa>>2]=Ua;if(!Qa){yc=Ia;break}j0a(Qa);yc=Ia}while(0);Ws(u,k[ua>>2]|0);if(!yc)break d;j0a(yc);break d}while(0);if((ka|0)==104){ra=Hc()|0;zc=ra;Ac=M;Bc=Ha}Ws(u,k[ua>>2]|0);if(!Bc){Ec=zc;Fc=Ac;break c}j0a(Bc);Ec=zc;Fc=Ac;break c}else{ra=iDa(qa,168,6800,0)|0;if(!ra){x=0;hb(49);x=0;ka=43;break c}k[o>>2]=k[ra+24>>2];Aa=o+4|0;Ca=k[ra+28>>2]|0;k[Aa>>2]=Ca;if(Ca)h0a(Ca);Ca=k[n>>2]|0;ra=Ca;s:do if(((k[ha>>2]|0)-Ca|0)==8){if(!ga){x=0;fb(140,q|0,235751,45);Qa=x;x=0;if(Qa&1){ka=57;break}x=0;fb(237,a|0,b+8|0,q|0);Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Ua=M;K2a(q);Gc=Qa;Ic=Ua;break}else{K2a(q);ka=82;break}}Ua=k[ra>>2]|0;x=0;Qa=Ba(k[(k[Ua>>2]|0)+16>>2]|0,Ua|0)|0;Pa=x;x=0;if(Pa&1){ka=57;break}Pa=k[Qa+4>>2]|0;x=0;fb(140,j|0,231125,31);Qa=x;x=0;if(Qa&1){ka=57;break}x=0;pa(57,(Pa|0)!=0|0,j|0,53,231157,231199);Pa=x;x=0;if(Pa&1){Pa=Hc()|0;Qa=M;K2a(j);Jc=Qa;Kc=Pa;ka=58;break}K2a(j);x=0;Pa=Ba(k[(k[Ua>>2]|0)+16>>2]|0,Ua|0)|0;Ua=x;x=0;if(Ua&1){ka=57;break}Ua=Pa+4|0;Pa=k[Ua>>2]|0;do if(Pa){Qa=iDa(Pa,168,6688,0)|0;if(!Qa)break;x=0;fb(246,s|0,k[Qa+24>>2]|0,o|0);Qa=x;x=0;if(Qa&1){ka=57;break s}Qa=k[s>>2]|0;Ja=s+4|0;Ka=k[Ja>>2]|0;k[s>>2]=0;k[Ja>>2]=0;k[o>>2]=Qa;Qa=k[Aa>>2]|0;k[Aa>>2]=Ka;if(!Qa)break;j0a(Qa);Qa=k[Ja>>2]|0;if(!Qa)break;j0a(Qa)}while(0);Pa=k[Ua>>2]|0;x=0;Qa=Ta(k[(k[Pa>>2]|0)+8>>2]|0,Pa|0,k[o>>2]|0)|0;Pa=x;x=0;if(Pa&1){ka=57;break}if(Qa){ka=82;break}x=0;fb(140,t|0,235797,37);Qa=x;x=0;if(Qa&1){ka=57;break}x=0;fb(237,a|0,b+8|0,t|0);Qa=x;x=0;if(Qa&1){Qa=Hc()|0;Pa=M;K2a(t);Gc=Qa;Ic=Pa;break}else{K2a(t);ka=82;break}}else{x=0;fb(140,p|0,235691,59);Pa=x;x=0;if(!(Pa&1)){x=0;fb(237,a|0,b+8|0,p|0);Pa=x;x=0;if(Pa&1){Pa=Hc()|0;Qa=M;K2a(p);Gc=Pa;Ic=Qa;break}else{K2a(p);ka=82;break}}else ka=57}while(0);if((ka|0)==82){x=0;ra=Ba(k[(k[Ga>>2]|0)+16>>2]|0,b|0)|0;Ca=x;x=0;if(Ca&1)ka=57;else{Ca=k[o>>2]|0;ua=k[Aa>>2]|0;if(ua)h0a(ua);k[ra+4>>2]=Ca;Ca=ra+8|0;ra=k[Ca>>2]|0;k[Ca>>2]=ua;if(ra)j0a(ra);ra=k[Aa>>2]|0;if(ra)j0a(ra);break}}if((ka|0)==57){ra=Hc()|0;Jc=M;Kc=ra;ka=58}if((ka|0)==58){Gc=Kc;Ic=Jc}ra=k[Aa>>2]|0;if(!ra){Ec=Gc;Fc=Ic;break c}j0a(ra);Ec=Gc;Fc=Ic;break c}while(0);if(!ia)j0a(na);if(Ea)j0a(Ea);ta=k[n>>2]|0;if(!ta){r=c;return 0}ra=k[ha>>2]|0;if((ra|0)==(ta|0))Lc=ta;else{ua=ra;while(1){ra=ua+-8|0;k[ha>>2]=ra;Ca=k[ua+-4>>2]|0;if(!Ca)Mc=ra;else{j0a(Ca);Mc=k[ha>>2]|0}if((Mc|0)==(ta|0))break;else ua=Mc}Lc=k[n>>2]|0}OBa(Lc);r=c;return 0}}while(0);if((ka|0)==43){ha=Hc()|0;Ec=ha;Fc=M}if(ia){Nc=Ec;Oc=Fc;Pc=Ea}else{j0a(na);Nc=Ec;Oc=Fc;Pc=Ea}}else{ja=Ea;ka=5}}else{ja=Ea;ka=5}}while(0);if((ka|0)==5){Ea=Hc()|0;wa=ja;ya=M;za=Ea;ka=6}if((ka|0)==6){Nc=za;Oc=ya;Pc=wa}if(Pc)j0a(Pc);Pc=k[n>>2]|0;if(!Pc)Sc(Nc|0);wa=n+4|0;ya=k[wa>>2]|0;if((ya|0)==(Pc|0))Qc=Pc;else{Oc=ya;while(1){ya=Oc+-8|0;k[wa>>2]=ya;za=k[Oc+-4>>2]|0;if(!za)Rc=ya;else{j0a(za);Rc=k[wa>>2]|0}if((Rc|0)==(Pc|0))break;else Oc=Rc}Qc=k[n>>2]|0}OBa(Qc);Sc(Nc|0);return 0}function bU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0;c=r;r=r+224|0;d=c+220|0;e=c+208|0;f=c+200|0;g=c+184|0;h=c+172|0;j=c+160|0;l=c+148|0;m=c+136|0;n=c+124|0;o=c+112|0;p=c+104|0;q=c+92|0;s=c+80|0;t=c+72|0;u=c+64|0;v=c+52|0;w=c+40|0;y=c+28|0;z=c+16|0;A=c+12|0;B=c;C=b+24|0;D=k[C>>2]|0;E=Vf[k[(k[D>>2]|0)+16>>2]&1023](D)|0;D=k[E+4>>2]|0;k[f>>2]=D;F=f+4|0;G=k[E+8>>2]|0;k[F>>2]=G;if(G)h0a(G);x=0;fb(140,g|0,236285,23);G=x;x=0;a:do if(G&1)H=6;else{x=0;pa(57,(D|0)!=0|0,g|0,1254,231157,236309);E=x;x=0;if(E&1){E=Hc()|0;I=M;K2a(g);J=E;K=I;break}K2a(g);I=iDa(k[C>>2]|0,5560,5592,0)|0;b:do if(!I){E=k[f>>2]|0;x=0;L=Ba(k[k[E>>2]>>2]|0,E|0)|0;E=x;x=0;if(E&1){H=6;break a}if((L|0)!=5){x=0;fb(140,B|0,236735,32);L=x;x=0;if(L&1){H=6;break a}x=0;fb(240,a|0,b+8|0,B|0);L=x;x=0;if(L&1){L=Hc()|0;E=M;K2a(B);J=L;K=E;break a}else{K2a(B);break}}E=k[f>>2]|0;x=0;L=Ba(k[(k[E>>2]|0)+52>>2]|0,E|0)|0;E=x;x=0;if(E&1){H=6;break a}do if(!L){E=k[C>>2]|0;x=0;fb(140,q|0,236621,33);N=x;x=0;if(N&1){H=6;break a}x=0;fb(240,a|0,E+8|0,q|0);E=x;x=0;if(E&1){E=Hc()|0;N=M;K2a(q);J=E;K=N;break a}else{K2a(q);break}}while(0);L=k[f>>2]|0;x=0;N=Ba(k[(k[L>>2]|0)+36>>2]|0,L|0)|0;L=x;x=0;if(L&1){H=6;break a}do if(!N){L=k[C>>2]|0;x=0;fb(140,s|0,236655,79);E=x;x=0;if(E&1){H=6;break a}x=0;fb(237,a|0,L+8|0,s|0);L=x;x=0;if(L&1){L=Hc()|0;E=M;K2a(s);J=L;K=E;break a}else{K2a(s);break}}while(0);x=0;fb(246,t|0,2,f|0);N=x;x=0;if(N&1){H=6;break a}N=k[t>>2]|0;E=t+4|0;L=k[E>>2]|0;k[t>>2]=0;k[E>>2]=0;k[f>>2]=N;N=k[F>>2]|0;k[F>>2]=L;if((N|0)!=0?(j0a(N),N=k[E>>2]|0,(N|0)!=0):0)j0a(N);x=0;N=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;E=x;x=0;if(E&1){H=6;break a}E=N+4|0;x=0;L=Ba(563,44)|0;O=x;x=0;do if(O&1){P=Hc()|0;Q=M;R=P}else{k[L+4>>2]=0;k[L+8>>2]=0;k[L>>2]=31848;P=L+12|0;x=0;fb(247,P|0,256,0);S=x;x=0;if(S&1){S=Hc()|0;T=M;c0a(L);OBa(L);Q=T;R=S;break}S=P;i0a(L);k[L+16>>2]=S;P=L+20|0;T=k[P>>2]|0;k[P>>2]=L;if(T)k0a(T);k[v>>2]=0;T=v+4|0;k[T>>2]=0;k[v+8>>2]=0;x=0;P=Ba(563,8)|0;U=x;x=0;if(U&1){U=Hc()|0;V=U;W=M}else{k[v>>2]=P;k[v+8>>2]=P+8;k[P>>2]=S;k[P+4>>2]=L;h0a(L);k[T>>2]=P+8;S=k[f>>2]|0;U=k[F>>2]|0;X=(U|0)==0;if(!X)h0a(U);k[w>>2]=0;Y=w+4|0;k[Y>>2]=0;k[w+8>>2]=0;x=0;Z=Ba(563,8)|0;_=x;x=0;do if(_&1){$=Hc()|0;aa=$;ba=M}else{k[Y>>2]=Z;k[w>>2]=Z;k[w+8>>2]=Z+8;k[Z>>2]=S;k[Z+4>>2]=U;if(!X)h0a(U);k[Y>>2]=Z+8;k[y>>2]=0;$=y+4|0;k[$>>2]=0;k[y+8>>2]=0;k[z>>2]=0;ca=z+4|0;k[ca>>2]=0;k[z+8>>2]=0;k[A>>2]=27;x=0;La(57,u|0,v|0,w|0,y|0,z|0,A|0);da=x;x=0;if(da&1){da=Hc()|0;ea=M;fa=k[z>>2]|0;if(fa){ga=k[ca>>2]|0;if((ga|0)!=(fa|0)){ha=ga;do{ha=ha+-12|0;K2a(ha)}while((ha|0)!=(fa|0));k[ca>>2]=fa}OBa(fa)}ha=k[y>>2]|0;if(ha){ga=k[$>>2]|0;if((ga|0)!=(ha|0)){ia=ga;do{ia=ia+-12|0;K2a(ia)}while((ia|0)!=(ha|0));k[$>>2]=ha}OBa(ha)}ia=k[Z+4>>2]|0;if(ia)j0a(ia);k[Y>>2]=Z;OBa(Z);aa=da;ba=ea;break}ia=k[u>>2]|0;fa=u+4|0;ga=k[fa>>2]|0;k[u>>2]=0;k[fa>>2]=0;k[E>>2]=ia;ia=N+8|0;fa=k[ia>>2]|0;k[ia>>2]=ga;if(fa)j0a(fa);fa=k[z>>2]|0;if(fa){ga=k[ca>>2]|0;if((ga|0)!=(fa|0)){ia=ga;do{ia=ia+-12|0;K2a(ia)}while((ia|0)!=(fa|0));k[ca>>2]=fa}OBa(fa)}ia=k[y>>2]|0;if(ia){ea=k[$>>2]|0;if((ea|0)!=(ia|0)){da=ea;do{da=da+-12|0;K2a(da)}while((da|0)!=(ia|0));k[$>>2]=ia}OBa(ia)}da=k[Z+4>>2]|0;if(da)j0a(da);k[Y>>2]=Z;OBa(Z);if(!X)j0a(U);da=k[P+4>>2]|0;if(da)j0a(da);k[T>>2]=P;OBa(P);j0a(L);break b}while(0);if(!X)j0a(U);Z=k[P+4>>2]|0;if(Z)j0a(Z);k[T>>2]=P;OBa(P);V=aa;W=ba}j0a(L);J=V;K=W;break a}while(0);J=R;K=Q;break a}else{x=0;L=Ba(k[(k[I>>2]|0)+16>>2]|0,I|0)|0;N=x;x=0;if(N&1){H=6;break a}N=k[L+12>>2]|0;x=0;fb(140,e|0,232134,23);L=x;x=0;if(L&1){H=6;break a}x=0;pa(57,(N|0)!=0|0,e|0,1551,231157,232273);N=x;x=0;if(N&1){N=Hc()|0;L=M;K2a(e);ja=L;ka=N;H=7;break a}K2a(e);x=0;N=Ba(k[(k[I>>2]|0)+16>>2]|0,I|0)|0;L=x;x=0;if(L&1){H=6;break a}L=iDa(k[N+12>>2]|0,4520,5312,0)|0;N=L;do if(!L){x=0;fb(140,h|0,236397,29);E=x;x=0;if(E&1){H=6;break a}x=0;fb(240,a|0,b+8|0,h|0);E=x;x=0;if(E&1){E=Hc()|0;O=M;K2a(h);J=E;K=O;break a}else{K2a(h);break}}while(0);x=0;O=Ba(k[(k[L>>2]|0)+16>>2]|0,L|0)|0;E=x;x=0;if(E&1){H=6;break a}do if(!(i[O+32>>0]|0)){x=0;fb(140,j|0,236427,53);E=x;x=0;if(E&1){H=6;break a}x=0;fb(237,a|0,b+8|0,j|0);E=x;x=0;if(E&1){E=Hc()|0;Z=M;K2a(j);J=E;K=Z;break a}else{K2a(j);break}}while(0);O=a+4|0;Z=k[O>>2]|0;x=0;fb(140,l|0,329672,0);E=x;x=0;if(E&1){H=6;break a}x=0;pa(57,(Z|0)!=0|0,l|0,1265,231157,236309);Z=x;x=0;if(Z&1){Z=Hc()|0;E=M;K2a(l);J=Z;K=E;break a}K2a(l);E=k[O>>2]|0;x=0;Z=Ba(k[(k[E>>2]|0)+16>>2]|0,E|0)|0;E=x;x=0;if(E&1){H=6;break a}E=Z+48|0;Y=Z+52|0;S=k[Y>>2]|0;do if(S){_=S;while(1){da=k[_+16>>2]|0;if(L>>>0>>0){fa=k[_>>2]|0;if(!fa){la=_;ma=_;H=31;break}else na=fa}else{if(da>>>0>=L>>>0){oa=_;H=36;break}da=_+4|0;fa=k[da>>2]|0;if(!fa){qa=da;ra=_;H=35;break}else na=fa}_=na}if((H|0)==31){k[d>>2]=ma;sa=la;ta=ma;break}else if((H|0)==35){k[d>>2]=ra;sa=qa;ta=ra;break}else if((H|0)==36){k[d>>2]=oa;sa=d;ta=oa;break}}else{k[d>>2]=Y;sa=Y;ta=Y}while(0);if(!(k[sa>>2]|0)){x=0;Y=Ba(563,20)|0;S=x;x=0;if(S&1){H=6;break a}k[Y+16>>2]=N;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=ta;k[sa>>2]=Y;S=k[k[E>>2]>>2]|0;if(!S)ua=Y;else{k[E>>2]=S;ua=k[sa>>2]|0}ui(k[Z+52>>2]|0,ua);S=Z+56|0;k[S>>2]=(k[S>>2]|0)+1}x=0;S=Ba(k[(k[L>>2]|0)+16>>2]|0,L|0)|0;Y=x;x=0;if(Y&1){H=6;break a}Y=k[S+36>>2]|0;_=k[S+40>>2]|0;x=0;fb(140,m|0,236481,44);S=x;x=0;if(S&1){H=6;break a}x=0;pa(57,(Y|0)!=(_|0)|0,m|0,1270,231157,236309);_=x;x=0;if(_&1){_=Hc()|0;Y=M;K2a(m);J=_;K=Y;break a}K2a(m);Y=k[O>>2]|0;k[n+4>>2]=0;k[n+8>>2]=0;_=n+4|0;k[n>>2]=_;x=0;S=Fa(132,a|0,Y|0,n|0)|0;Y=x;x=0;if(Y&1){Y=Hc()|0;P=M;CU(n,k[_>>2]|0);J=Y;K=P;break a}CU(n,k[_>>2]|0);do if(S){x=0;fb(140,o|0,236526,94);_=x;x=0;if(_&1){H=6;break a}x=0;fb(237,a|0,b+8|0,o|0);_=x;x=0;if(_&1){_=Hc()|0;P=M;K2a(o);J=_;K=P;break a}else{K2a(o);break}}while(0);x=0;S=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;O=x;x=0;if(O&1){H=6;break a}x=0;xa(750,p|0,L|0);O=x;x=0;if(O&1){H=6;break a}O=k[p>>2]|0;Z=p+4|0;E=k[Z>>2]|0;k[p>>2]=0;k[Z>>2]=0;k[S+4>>2]=O;O=S+8|0;S=k[O>>2]|0;k[O>>2]=E;if(S)j0a(S);S=k[Z>>2]|0;if(!S)break;j0a(S)}while(0);I=k[F>>2]|0;if(!I){r=c;return}j0a(I);r=c;return}while(0);if((H|0)==6){c=Hc()|0;ja=M;ka=c;H=7}if((H|0)==7){J=ka;K=ja}ja=k[F>>2]|0;if(!ja)Sc(J|0);j0a(ja);Sc(J|0)}function cU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0;d=r;r=r+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d;i=c+4|0;j=k[i>>2]|0;a:do if(j){l=j;while(1){m=k[l+16>>2]|0;if(m>>>0>b>>>0)n=l;else{if(m>>>0>=b>>>0){o=1;break}n=l+4|0}l=k[n>>2]|0;if(!l)break a}r=d;return o|0}while(0);n=h+4|0;k[n>>2]=0;j=h+8|0;k[j>>2]=0;l=h+4|0;k[h>>2]=l;m=k[c>>2]|0;b:do if((m|0)!=(i|0)){c=l;p=m;q=m;while(1){s=p+16|0;k[g>>2]=c;k[e>>2]=k[g>>2];t=XU(h,e,f,s)|0;if(!(k[t>>2]|0)){x=0;u=Ba(563,20)|0;v=x;x=0;if(v&1)break;k[u+16>>2]=k[s>>2];s=k[f>>2]|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=s;k[t>>2]=u;s=k[k[h>>2]>>2]|0;if(!s)w=u;else{k[h>>2]=s;w=k[t>>2]|0}ui(k[n>>2]|0,w);k[j>>2]=(k[j>>2]|0)+1}t=k[q+4>>2]|0;if(!t){s=q;while(1){u=k[s+8>>2]|0;if((k[u>>2]|0)==(s|0)){y=u;break}else s=u}}else{s=t;while(1){u=k[s>>2]|0;if(!u){y=s;break}else s=u}}if((y|0)==(i|0))break b;else{p=y;q=y}}q=Hc()|0;CU(h,k[l>>2]|0);Sc(q|0)}while(0);x=0;y=Ba(563,20)|0;i=x;x=0;if(!(i&1)){k[y+16>>2]=b;i=k[l>>2]|0;do if(i){w=i;while(1){f=k[w+16>>2]|0;if(f>>>0>b>>>0){g=k[w>>2]|0;if(!g){z=w;A=w;B=23;break}else C=g}else{if(f>>>0>=b>>>0){D=w;B=28;break}f=w+4|0;g=k[f>>2]|0;if(!g){E=f;F=w;B=27;break}else C=g}w=C}if((B|0)==23){k[e>>2]=A;G=z;H=A;break}else if((B|0)==27){k[e>>2]=F;G=E;H=F;break}else if((B|0)==28){k[e>>2]=D;G=e;H=D;break}}else{k[e>>2]=l;G=l;H=l}while(0);if(!(k[G>>2]|0)){k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=H;k[G>>2]=y;H=k[k[h>>2]>>2]|0;if(!H)I=y;else{k[h>>2]=H;I=k[G>>2]|0}ui(k[n>>2]|0,I);k[j>>2]=(k[j>>2]|0)+1}else OBa(y);x=0;y=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(!(b&1)){b=k[y+48>>2]|0;j=y+52|0;c:do if((b|0)==(j|0))J=0;else{y=b;while(1){x=0;I=Fa(132,a|0,k[y+16>>2]|0,h|0)|0;n=x;x=0;if(n&1)break;if(I){J=1;break c}I=k[y+4>>2]|0;if(!I){n=y;while(1){G=k[n+8>>2]|0;if((k[G>>2]|0)==(n|0)){K=G;break}else n=G}}else{n=I;while(1){G=k[n>>2]|0;if(!G){K=n;break}else n=G}}if((K|0)==(j|0)){J=0;break c}else y=K}y=Hc()|0;L=l;N=y;O=M;P=k[L>>2]|0;CU(h,P);Sc(N|0)}while(0);CU(h,k[l>>2]|0);o=J;r=d;return o|0}}o=Hc()|0;L=l;N=o;O=M;P=k[L>>2]|0;CU(h,P);Sc(N|0);return 0}function dU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,ib=0,jb=0,kb=0,lb=0,mb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0;c=r;r=r+352|0;d=c+328|0;e=c+320|0;f=c+296|0;g=c+304|0;h=c+280|0;j=c+268|0;l=c+256|0;m=c+244|0;n=c+232|0;o=c+220|0;p=c+208|0;q=c+196|0;s=c+184|0;t=c+172|0;u=c+160|0;v=c+148|0;w=c+136|0;y=c+124|0;z=c+112|0;A=c+104|0;B=c+92|0;C=c+80|0;D=c+68|0;E=c+56|0;F=c+44|0;G=c+32|0;H=c+20|0;I=c+8|0;J=c;K=b+24|0;L=k[K>>2]|0;Tf[k[(k[L>>2]|0)+12>>2]&2047](L,a);L=k[K>>2]|0;K=(Vf[k[(k[L>>2]|0)+16>>2]&1023](L)|0)+4|0;N=(k[K>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,N|0,d|0,53,231157,231199);N=x;x=0;if(N&1){N=Hc()|0;K2a(d);Sc(N|0)}K2a(d);N=Vf[k[(k[L>>2]|0)+16>>2]&1023](L)|0;k[e>>2]=k[N+4>>2];L=e+4|0;K=k[N+8>>2]|0;k[L>>2]=K;if(K)h0a(K);K=k[b+32>>2]|0;x=0;N=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;O=x;x=0;if((!(O&1)?(O=a+4|0,x=0,P=Ta(572,k[e>>2]|0,k[O>>2]|0)|0,Q=x,x=0,!(Q&1)):0)?(x=0,fb(248,d|0,P|0,K|0),P=x,x=0,!(P&1)):0){P=d+4|0;Q=k[P>>2]|0;R=k[d>>2]|0;S=Q;do if((((Q-R|0)/24|0)>>>0>1?(T=N+16|0,(k[T>>2]|0)!=0):0)?(U=R,(U|0)!=(S|0)):0){V=R;W=U;a:while(1){U=W+12|0;X=k[U>>2]|0;x=0;Y=Ba(k[k[X>>2]>>2]|0,X|0)|0;X=x;x=0;if(X&1){Z=32;break}do if((Y|0)==9){X=iDa(k[U>>2]|0,168,6768,0)|0;if(!X){Z=15;break a}x=0;_=Fa(133,X|0,k[T>>2]|0,e|0)|0;X=x;x=0;if(X&1){Z=32;break a}if(!_){_=k[d>>2]|0;X=_+(((V-_|0)/24|0)*24|0)|0;_=X+24|0;$=k[P>>2]|0;if((_|0)!=($|0)){aa=_;ba=X;while(1){if(!(i[ba>>0]&1)){i[ba+1>>0]=0;i[ba>>0]=0}else{i[k[ba+8>>2]>>0]=0;k[ba+4>>2]=0}x=0;xa(603,ba|0,0);ca=x;x=0;if(ca&1){Z=23;break a};k[ba>>2]=k[aa>>2];k[ba+4>>2]=k[aa+4>>2];k[ba+8>>2]=k[aa+8>>2];k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;ca=ba+36|0;da=k[ca>>2]|0;ea=ba+40|0;fa=k[ea>>2]|0;k[ca>>2]=0;k[ea>>2]=0;k[ba+12>>2]=da;da=ba+16|0;ea=k[da>>2]|0;k[da>>2]=fa;if(ea)j0a(ea);k[ba+20>>2]=k[ba+44>>2];aa=aa+24|0;ea=ba+24|0;if((aa|0)==($|0)){ga=ea;break}else ba=ea}ba=k[P>>2]|0;if((ba|0)==(ga|0)){ha=X;ia=ba;ja=ga;break}else{ka=ga;la=ba}}else{ka=X;la=_}ba=la;while(1){$=ba+-24|0;k[P>>2]=$;aa=k[ba+-8>>2]|0;if(aa)j0a(aa);K2a($);$=k[P>>2]|0;if(($|0)==(ka|0)){ha=X;ia=$;ja=ka;break}else ba=$}}else Z=35}else Z=35;while(0);if((Z|0)==35){Z=0;U=k[P>>2]|0;ha=W+24|0;ia=U;ja=U}if((ha|0)==(ja|0)){ma=ia;Z=37;break}else{V=ha;W=ha}}if((Z|0)==15){x=0;hb(49);x=0;Z=33;break}else if((Z|0)==23){W=Hc(0)|0;Fg(W)}else if((Z|0)==32){W=Hc()|0;na=M;oa=W;Z=34;break}else if((Z|0)==37){qa=ma;ra=k[d>>2]|0;Z=38;break}}else{qa=Q;ra=R;Z=38}while(0);b:do if((Z|0)==38){c:do if((qa|0)!=(ra|0)){if(((qa-ra|0)/24|0)>>>0>1){R=b+8|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;Q=i[K>>0]|0;ma=(Q&1)==0?(Q&255)>>>1:k[K+4>>2]|0;x=0;nb(83,y|0,236768,8,ma+8|0);Q=x;x=0;if(!(Q&1)?(x=0,Fa(88,y|0,((i[K>>0]&1)==0?K+1|0:k[K+8>>2]|0)|0,ma|0)|0,ma=x,x=0,!(ma&1)):0){x=0;ma=Ta(484,y|0,236926)|0;Q=x;x=0;if(Q&1){Q=Hc()|0;sa=Q;ta=M}else{k[w>>2]=k[ma>>2];k[w+4>>2]=k[ma+4>>2];k[w+8>>2]=k[ma+8>>2];k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;ma=k[e>>2]|0;x=0;fb(k[(k[ma>>2]|0)+76>>2]|0,z|0,ma|0,0);ma=x;x=0;if(ma&1){ma=Hc()|0;ua=ma;va=M}else{ma=i[z>>0]|0;Q=(ma&1)==0;x=0;ha=Fa(88,w|0,(Q?z+1|0:k[z+8>>2]|0)|0,(Q?(ma&255)>>>1:k[z+4>>2]|0)|0)|0;ma=x;x=0;if(ma&1){ma=Hc()|0;wa=ma;ya=M}else{k[v>>2]=k[ha>>2];k[v+4>>2]=k[ha+4>>2];k[v+8>>2]=k[ha+8>>2];k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;ha=(b5a(K,272351)|0)==0;x=0;ma=Ta(484,v|0,(ha?236884:329672)|0)|0;ha=x;x=0;do if(!(ha&1)){k[u>>2]=k[ma>>2];k[u+4>>2]=k[ma+4>>2];k[u+8>>2]=k[ma+8>>2];k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;x=0;fb(240,a|0,R|0,u|0);Q=x;x=0;if(Q&1){Q=Hc()|0;ia=M;K2a(u);za=Q;Aa=ia;break}else{K2a(u);K2a(v);K2a(z);K2a(w);K2a(y);break c}}else{ia=Hc()|0;za=ia;Aa=M}while(0);K2a(v);wa=za;ya=Aa}K2a(z);ua=wa;va=ya}K2a(w);sa=ua;ta=va}K2a(y);Ca=sa;Da=ta;break b}R=Hc()|0;ma=M;K2a(y);na=ma;oa=R;Z=34;break b}}else{x=0;fb(246,f|0,0,e|0);R=x;x=0;if(R&1){Z=33;break b}x=0;R=Ta(572,k[f>>2]|0,k[O>>2]|0)|0;ma=x;x=0;d:do if(!(ma&1)?(x=0,fb(248,g|0,R|0,K|0),ha=x,x=0,!(ha&1)):0){ha=k[g>>2]|0;ia=g+4|0;Q=k[ia>>2]|0;ja=(ha|0)==(Q|0);if(ha){if(ja)Ea=ha;else{ka=Q;do{Q=ka+-24|0;k[ia>>2]=Q;la=k[ka+-8>>2]|0;if(la)j0a(la);K2a(Q);ka=k[ia>>2]|0}while((ka|0)!=(ha|0));Ea=k[g>>2]|0}OBa(Ea)}ha=b+8|0;e:do if(ja){Ga=K;Ha=K+4|0}else{k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;ka=i[K>>0]|0;ia=K+4|0;Q=(ka&1)==0?(ka&255)>>>1:k[ia>>2]|0;x=0;nb(83,m|0,236768,8,Q+8|0);ka=x;x=0;if(!(ka&1)?(x=0,Fa(88,m|0,((i[K>>0]&1)==0?K+1|0:k[K+8>>2]|0)|0,Q|0)|0,Q=x,x=0,!(Q&1)):0){x=0;Q=Ta(484,m|0,236777)|0;ka=x;x=0;if(ka&1){ka=Hc()|0;Ia=ka;Ja=M}else{k[l>>2]=k[Q>>2];k[l+4>>2]=k[Q+4>>2];k[l+8>>2]=k[Q+8>>2];k[Q>>2]=0;k[Q+4>>2]=0;k[Q+8>>2]=0;Q=k[e>>2]|0;x=0;fb(k[(k[Q>>2]|0)+76>>2]|0,n|0,Q|0,0);Q=x;x=0;if(Q&1){Q=Hc()|0;Ka=Q;La=M}else{Q=i[n>>0]|0;ka=(Q&1)==0;x=0;la=Fa(88,l|0,(ka?n+1|0:k[n+8>>2]|0)|0,(ka?(Q&255)>>>1:k[n+4>>2]|0)|0)|0;Q=x;x=0;if(Q&1){Q=Hc()|0;Ma=Q;Na=M}else{k[j>>2]=k[la>>2];k[j+4>>2]=k[la+4>>2];k[j+8>>2]=k[la+8>>2];k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;x=0;la=Ta(484,j|0,236800)|0;Q=x;x=0;do if(!(Q&1)){k[h>>2]=k[la>>2];k[h+4>>2]=k[la+4>>2];k[h+8>>2]=k[la+8>>2];k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;x=0;fb(240,a|0,ha|0,h|0);ka=x;x=0;if(ka&1){ka=Hc()|0;ga=M;K2a(h);Oa=ka;Pa=ga;break}else{K2a(h);K2a(j);K2a(n);K2a(l);K2a(m);Ga=K;Ha=ia;break e}}else{ga=Hc()|0;Oa=ga;Pa=M}while(0);K2a(j);Ma=Oa;Na=Pa}K2a(n);Ka=Ma;La=Na}K2a(l);Ia=Ka;Ja=La}K2a(m);Qa=Ia;Ra=Ja;break d}ia=Hc()|0;la=M;K2a(m);Sa=la;Ua=ia;Z=61;break d}while(0);k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;ja=i[Ga>>0]|0;ia=(ja&1)==0?(ja&255)>>>1:k[Ha>>2]|0;x=0;nb(83,s|0,236768,8,ia+8|0);ja=x;x=0;if(!(ja&1)?(x=0,Fa(88,s|0,((i[Ga>>0]&1)==0?K+1|0:k[K+8>>2]|0)|0,ia|0)|0,ia=x,x=0,!(ia&1)):0){x=0;ia=Ta(484,s|0,236821)|0;ja=x;x=0;if(ja&1){ja=Hc()|0;Va=ja;Wa=M}else{k[q>>2]=k[ia>>2];k[q+4>>2]=k[ia+4>>2];k[q+8>>2]=k[ia+8>>2];k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;ia=k[e>>2]|0;x=0;fb(k[(k[ia>>2]|0)+76>>2]|0,t|0,ia|0,0);ia=x;x=0;if(ia&1){ia=Hc()|0;Xa=ia;Ya=M}else{ia=i[t>>0]|0;ja=(ia&1)==0;x=0;la=Fa(88,q|0,(ja?t+1|0:k[t+8>>2]|0)|0,(ja?(ia&255)>>>1:k[t+4>>2]|0)|0)|0;ia=x;x=0;if(ia&1){ia=Hc()|0;Za=ia;_a=M}else{k[p>>2]=k[la>>2];k[p+4>>2]=k[la+4>>2];k[p+8>>2]=k[la+8>>2];k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;la=(b5a(K,272351)|0)==0;x=0;ia=Ta(484,p|0,(la?236884:329672)|0)|0;la=x;x=0;do if(la&1){ja=Hc()|0;$a=ja;ab=M}else{k[o>>2]=k[ia>>2];k[o+4>>2]=k[ia+4>>2];k[o+8>>2]=k[ia+8>>2];k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;x=0;fb(240,a|0,ha|0,o|0);ja=x;x=0;if(ja&1){ja=Hc()|0;Q=M;K2a(o);$a=ja;ab=Q;break}K2a(o);K2a(p);K2a(t);K2a(q);K2a(s);Q=k[f+4>>2]|0;if(Q)j0a(Q);break c}while(0);K2a(p);Za=$a;_a=ab}K2a(t);Xa=Za;Ya=_a}K2a(q);Va=Xa;Wa=Ya}K2a(s);Qa=Va;Ra=Wa;break}ha=Hc()|0;ia=M;K2a(s);Sa=ia;Ua=ha;Z=61}else Z=60;while(0);if((Z|0)==60){R=Hc()|0;Sa=M;Ua=R;Z=61}if((Z|0)==61){Qa=Ua;Ra=Sa}R=k[f+4>>2]|0;if(!R){Ca=Qa;Da=Ra;break b}j0a(R);Ca=Qa;Da=Ra;break b}while(0);x=0;R=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;ma=x;x=0;if(!(ma&1)){ma=k[d>>2]|0;k[R+24>>2]=k[ma+20>>2];ha=R+4|0;ia=k[ma+12>>2]|0;la=k[ma+16>>2]|0;if(la)h0a(la);k[ha>>2]=ia;ma=R+8|0;Q=k[ma>>2]|0;k[ma>>2]=la;if(!Q)bb=ia;else{j0a(Q);bb=k[ha>>2]|0}f:do if(((bb|0)!=0?(ha=iDa(bb,168,6768,0)|0,(ha|0)!=0):0)?(i[ha+79>>0]|0)!=0:0){Q=k[e>>2]|0;ia=k[(k[Q>>2]|0)+4>>2]|0;x=0;xa(751,A|0,ha|0);la=x;x=0;if(la&1){Z=33;break b}x=0;la=Ta(ia|0,Q|0,k[A>>2]|0)|0;Q=x;x=0;if(Q&1){Q=Hc()|0;ia=M;ma=k[A+4>>2]|0;if(!ma){Ca=Q;Da=ia;break b}j0a(ma);Ca=Q;Da=ia;break b}ia=k[A+4>>2]|0;if(!ia){if(la)break}else{j0a(ia);if(la)break}la=b+8|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;ia=i[K>>0]|0;Q=(ia&1)==0?(ia&255)>>>1:k[K+4>>2]|0;x=0;nb(83,G|0,236975,10,Q+10|0);ia=x;x=0;do if(!(ia&1)){x=0;Fa(88,G|0,((i[K>>0]&1)==0?K+1|0:k[K+8>>2]|0)|0,Q|0)|0;ma=x;x=0;if(ma&1)break;x=0;ma=Ta(484,G|0,236986)|0;ja=x;x=0;if(ja&1){ja=Hc()|0;cb=ja;db=M}else{k[F>>2]=k[ma>>2];k[F+4>>2]=k[ma+4>>2];k[F+8>>2]=k[ma+8>>2];k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;ma=k[e>>2]|0;x=0;fb(k[(k[ma>>2]|0)+76>>2]|0,H|0,ma|0,0);ma=x;x=0;if(ma&1){ma=Hc()|0;eb=ma;gb=M}else{ma=i[H>>0]|0;ja=(ma&1)==0;x=0;ga=Fa(88,F|0,(ja?H+1|0:k[H+8>>2]|0)|0,(ja?(ma&255)>>>1:k[H+4>>2]|0)|0)|0;ma=x;x=0;if(ma&1){ma=Hc()|0;ib=ma;jb=M}else{k[E>>2]=k[ga>>2];k[E+4>>2]=k[ga+4>>2];k[E+8>>2]=k[ga+8>>2];k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;x=0;ga=Ta(484,E|0,237027)|0;ma=x;x=0;if(ma&1){ma=Hc()|0;kb=ma;lb=M}else{k[D>>2]=k[ga>>2];k[D+4>>2]=k[ga+4>>2];k[D+8>>2]=k[ga+8>>2];k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;x=0;xa(751,J|0,ha|0);ga=x;x=0;do if(ga&1){ma=Hc()|0;mb=ma;ob=M}else{ma=k[J>>2]|0;x=0;fb(k[(k[ma>>2]|0)+76>>2]|0,I|0,ma|0,0);ma=x;x=0;if(ma&1){ma=Hc()|0;pb=ma;qb=M}else{ma=i[I>>0]|0;ja=(ma&1)==0;x=0;ka=Fa(88,D|0,(ja?I+1|0:k[I+8>>2]|0)|0,(ja?(ma&255)>>>1:k[I+4>>2]|0)|0)|0;ma=x;x=0;if(ma&1){ma=Hc()|0;rb=ma;sb=M}else{k[C>>2]=k[ka>>2];k[C+4>>2]=k[ka+4>>2];k[C+8>>2]=k[ka+8>>2];k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;x=0;ka=Ta(484,C|0,300015)|0;ma=x;x=0;do if(ma&1){ja=Hc()|0;tb=ja;ub=M}else{k[B>>2]=k[ka>>2];k[B+4>>2]=k[ka+4>>2];k[B+8>>2]=k[ka+8>>2];k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;x=0;fb(237,a|0,la|0,B|0);ja=x;x=0;if(ja&1){ja=Hc()|0;S=M;K2a(B);tb=ja;ub=S;break}K2a(B);K2a(C);K2a(I);S=k[J+4>>2]|0;if(S)j0a(S);K2a(D);K2a(E);K2a(H);K2a(F);K2a(G);break f}while(0);K2a(C);rb=tb;sb=ub}K2a(I);pb=rb;qb=sb}ka=k[J+4>>2]|0;if(!ka){mb=pb;ob=qb;break}j0a(ka);mb=pb;ob=qb}while(0);K2a(D);kb=mb;lb=ob}K2a(E);ib=kb;jb=lb}K2a(H);eb=ib;gb=jb}K2a(F);cb=eb;db=gb}K2a(G);Ca=cb;Da=db;break b}while(0);la=Hc()|0;ha=M;K2a(G);na=ha;oa=la;Z=34;break b}while(0);la=k[e>>2]|0;x=0;ha=Ba(k[k[la>>2]>>2]|0,la|0)|0;la=x;x=0;if(!(la&1)){do if((ha|0)==8)i[R+12>>0]=1;else{la=k[e>>2]|0;x=0;Q=Ba(k[k[la>>2]>>2]|0,la|0)|0;la=x;x=0;if(la&1){Z=33;break b}la=k[e>>2]|0;if((Q|0)!=5){x=0;Q=Ba(k[k[la>>2]>>2]|0,la|0)|0;ia=x;x=0;if(ia&1){Z=33;break b}if((Q|0)!=6)break;i[R+12>>0]=0;break}Q=iDa(la,168,6704,0)|0;if(!Q){x=0;hb(49);x=0;Z=33;break b}do if(!(b5a(K,278976)|0)){if(k[Q+24>>2]|0){vb=0;break}x=0;la=Ba(k[(k[Q>>2]|0)+36>>2]|0,Q|0)|0;ia=x;x=0;if(ia&1){Z=33;break b}else vb=la}else vb=0;while(0);i[R+12>>0]=vb&1}while(0);R=k[d>>2]|0;if(R){ha=k[P>>2]|0;if((ha|0)==(R|0))wb=R;else{Q=ha;do{ha=Q+-24|0;k[P>>2]=ha;la=k[Q+-8>>2]|0;if(la)j0a(la);K2a(ha);Q=k[P>>2]|0}while((Q|0)!=(R|0));wb=k[d>>2]|0}OBa(wb)}R=k[L>>2]|0;if(!R){r=c;return 0}j0a(R);r=c;return 0}else Z=33}else Z=33}while(0);if((Z|0)==33){c=Hc()|0;na=M;oa=c;Z=34}if((Z|0)==34){Ca=oa;Da=na}na=k[d>>2]|0;if(!na){xb=Ca;yb=Da}else{oa=k[P>>2]|0;if((oa|0)==(na|0))zb=na;else{Z=oa;do{oa=Z+-24|0;k[P>>2]=oa;c=k[Z+-8>>2]|0;if(c)j0a(c);K2a(oa);Z=k[P>>2]|0}while((Z|0)!=(na|0));zb=k[d>>2]|0}OBa(zb);xb=Ca;yb=Da}}else{Da=Hc()|0;xb=Da;yb=M}yb=k[L>>2]|0;if(!yb)Sc(xb|0);j0a(yb);Sc(xb|0);return 0}function eU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;c=r;r=r+464|0;d=c+136|0;e=c+448|0;f=c+436|0;g=c+120|0;h=c+412|0;j=c+424|0;l=c+400|0;m=c+368|0;n=c+80|0;o=c+356|0;p=c+344|0;q=c+336|0;s=c+328|0;t=c+296|0;u=c+288|0;v=c+280|0;w=c+40|0;y=c+268|0;z=c+256|0;A=c+224|0;B=c;C=c+212|0;D=c+200|0;E=c+188|0;F=c+176|0;G=b+24|0;H=k[G>>2]|0;Tf[k[(k[H>>2]|0)+12>>2]&2047](H,a);H=k[G>>2]|0;I=(Vf[k[(k[H>>2]|0)+16>>2]&1023](H)|0)+4|0;J=(k[I>>2]|0)!=0;q2a(d,231125,31);x=0;pa(57,J|0,d|0,53,231157,231199);J=x;x=0;if(J&1){J=Hc()|0;K2a(d);Sc(J|0)}K2a(d);J=Vf[k[(k[H>>2]|0)+16>>2]&1023](H)|0;H=k[J+4>>2]|0;I=k[J+8>>2]|0;J=(I|0)==0;if(!J)h0a(I);K=k[b+32>>2]|0;x=0;L=Ba(k[k[H>>2]>>2]|0,H|0)|0;N=x;x=0;a:do if(!(N&1)){b:do switch(L|0){case 5:{O=iDa(H,168,6704,0)|0;if(!O){x=0;hb(49);x=0;P=165;break a}c:do if(!K){x=0;fb(140,j|0,237039,35);Q=x;x=0;if(Q&1){P=165;break a}x=0;fb(237,a|0,b+8|0,j|0);Q=x;x=0;if(Q&1){Q=Hc()|0;R=M;K2a(j);S=R;T=Q;break a}else{K2a(j);break}}else{x=0;if((k[O+32>>2]|0)==2){q2a(l,237075,40);Q=x;x=0;if(Q&1){P=165;break a}x=0;fb(237,a|0,b+8|0,l|0);Q=x;x=0;if(!(Q&1)){K2a(l);x=0;xa(k[(k[K>>2]|0)+12>>2]|0,K|0,a|0);Q=x;x=0;if(Q&1){P=165;break a}else break}else{Q=Hc()|0;R=M;K2a(l);S=R;T=Q;break a}}n8(m,256,0);Q=x;x=0;if(Q&1){P=165;break a}x=0;fb(242,a|0,K|0,m|0);Q=x;x=0;if(Q&1){Q=Hc()|0;R=M;k[m>>2]=20456;xh(m+12|0,k[m+16>>2]|0);U=k[m+8>>2]|0;if(!U){S=R;T=Q;break a}k0a(U);S=R;T=Q;break a}k[m>>2]=20456;xh(m+12|0,k[m+16>>2]|0);Q=k[m+8>>2]|0;if(Q)k0a(Q);x=0;Q=Ba(k[(k[K>>2]|0)+16>>2]|0,K|0)|0;R=x;x=0;if(R&1){P=165;break a}R=k[Q+4>>2]|0;x=0;fb(140,h|0,231125,31);Q=x;x=0;if(Q&1){P=165;break a}x=0;pa(57,(R|0)!=0|0,h|0,53,231157,231199);R=x;x=0;if(R&1){R=Hc()|0;Q=M;K2a(h);V=Q;W=R;P=164;break b}K2a(h);x=0;R=Ba(k[(k[K>>2]|0)+16>>2]|0,K|0)|0;Q=x;x=0;if(Q&1){P=165;break a}Q=k[R+4>>2]|0;if((Q|0)!=0?(R=iDa(Q,168,6624,0)|0,(R|0)!=0):0){Q=R+40|0;k[g>>2]=0;U=g+8|0;k[U>>2]=0;X=g+13|0;i[X>>0]=1;Y=k[R+48>>2]|0;Z=Y>>>0>134217728?134217728:Y;if(Z>>>0>2){_=Z>>>0>8?Z:8;x=0;$=Ba(563,_<<2|0)|0;aa=x;x=0;if(aa&1){P=165;break a}i[X>>0]=0;k[U>>2]=Z;k[g>>2]=_;k[g+4>>2]=$;ba=$}else{k[U>>2]=Z;ba=g}Dyb(ba|0,((i[R+53>>0]|0)==0?k[R+44>>2]|0:Q)|0,Y<<2|0)|0;Y=i[R+52>>0]|0;i[g+12>>0]=Y;Q=i[X>>0]|0;if(Y<<24>>24==0&(k[U>>2]|0)==1)ca=(k[(Q<<24>>24==0?k[g+4>>2]|0:g)>>2]|0)!=1;else ca=1;if(!(Q<<24>>24))OBa(k[g+4>>2]|0);if(ca)break;x=0;Q=Ba(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;U=x;x=0;if(U&1){P=165;break a}if(Q)break;Q=O+48|0;x=0;fb(k[(k[R>>2]|0)+84>>2]|0,n|0,R|0,0);R=x;x=0;if(R&1){P=165;break a}R=k[O+80>>2]|0;U=k[n+32>>2]|0;d:do if((R|0)==(U|0)){Y=R;while(1){Y=Y+-1|0;if((Y|0)<=-1)break d;X=k[Q+(Y<<2)>>2]|0;Z=k[n+(Y<<2)>>2]|0;if((X|0)!=(Z|0)){da=X;ea=Z;break}}if(da>>>0>ea>>>0)break c}else if(R>>>0>U>>>0)break c;while(0);x=0;fb(140,o|0,237116,27);U=x;x=0;if(U&1){P=165;break a}x=0;fb(237,a|0,b+8|0,o|0);U=x;x=0;if(U&1){U=Hc()|0;R=M;K2a(o);S=R;T=U;break a}else{K2a(o);break}}}while(0);U=O+36|0;R=k[U>>2]|0;x=0;fb(140,f|0,329672,0);Q=x;x=0;if(Q&1){P=165;break a}x=0;pa(57,(R|0)!=0|0,f|0,588,285183,276209);R=x;x=0;if(R&1){R=Hc()|0;Q=M;K2a(f);V=Q;W=R;P=164;break b}K2a(f);R=k[U>>2]|0;U=k[O+40>>2]|0;if(U)h0a(U);fa=R;ga=U;ha=(k[O+24>>2]|0)!=1&1;break}case 12:{U=iDa(H,168,6784,0)|0;if(!U){x=0;hb(49);x=0;P=165;break a}do if(!K){x=0;fb(140,p|0,237039,35);R=x;x=0;if(R&1){P=165;break a}x=0;fb(237,a|0,b+8|0,p|0);R=x;x=0;if(R&1){R=Hc()|0;Q=M;K2a(p);S=Q;T=R;break a}else{K2a(p);break}}else{x=0;fb(242,a|0,K|0,k[U+24>>2]|0);R=x;x=0;if(R&1){P=165;break a}}while(0);O=k[U+32>>2]|0;R=k[U+36>>2]|0;Q=R;if(!R){fa=O;ga=Q;ha=1}else{h0a(R);fa=O;ga=Q;ha=1}break}case 13:{Q=iDa(H,168,6800,0)|0;if(!Q){x=0;hb(49);x=0;P=165;break a}if(!K){k[s>>2]=2;x=0;fb(249,q|0,s|0,Q+24|0);O=x;x=0;if(O&1){P=165;break a}x=0;O=Ba(563,44)|0;R=x;x=0;if(R&1){R=Hc()|0;Y=M;Z=k[q+4>>2]|0;if(!Z){S=Y;T=R;break a}j0a(Z);S=Y;T=R;break a}k[O+4>>2]=0;k[O+8>>2]=0;k[O>>2]=31876;R=k[q>>2]|0;Y=q+4|0;Z=k[Y>>2]|0;k[q>>2]=0;k[Y>>2]=0;Y=O+16|0;k[Y>>2]=0;X=O+20|0;k[X>>2]=0;$=O+12|0;_=O+28|0;k[_>>2]=0;k[O+32>>2]=0;k[O+24>>2]=_;k[$>>2]=38832;k[O+36>>2]=R;k[O+40>>2]=Z;if(Z){h0a(Z);j0a(Z)}Z=$;$=O;i0a(O);k[Y>>2]=Z;Y=k[X>>2]|0;k[X>>2]=$;if(!Y){fa=Z;ga=$;ha=0;break b}k0a(Y);fa=Z;ga=$;ha=0;break b}x=0;fb(247,t|0,256,0);$=x;x=0;if($&1){P=165;break a}x=0;fb(242,a|0,K|0,t|0);$=x;x=0;if($&1){$=Hc()|0;Z=M;k[t>>2]=20456;xh(t+12|0,k[t+16>>2]|0);Y=k[t+8>>2]|0;if(!Y){S=Z;T=$;break a}k0a(Y);S=Z;T=$;break a}k[t>>2]=20456;xh(t+12|0,k[t+16>>2]|0);$=k[t+8>>2]|0;if($)k0a($);x=0;$=Ba(k[(k[K>>2]|0)+16>>2]|0,K|0)|0;Z=x;x=0;if(Z&1){P=165;break a}Z=k[$+4>>2]|0;x=0;fb(140,e|0,231125,31);$=x;x=0;if($&1){P=165;break a}x=0;pa(57,(Z|0)!=0|0,e|0,53,231157,231199);Z=x;x=0;if(Z&1){Z=Hc()|0;$=M;K2a(e);V=$;W=Z;P=164;break b}K2a(e);x=0;Z=Ba(k[(k[K>>2]|0)+16>>2]|0,K|0)|0;$=x;x=0;if($&1){P=165;break a}$=k[Z+4>>2]|0;if(($|0)!=0?(Z=iDa($,168,6624,0)|0,(Z|0)!=0):0){k[v>>2]=2;x=0;fb(k[(k[Z>>2]|0)+84>>2]|0,w|0,Z|0,0);Z=x;x=0;if(Z&1){P=165;break a}x=0;nb(116,u|0,v|0,Q+24|0,w|0);Q=x;x=0;if(Q&1){P=165;break a}x=0;Q=Ba(563,44)|0;Z=x;x=0;if(Z&1){Z=Hc()|0;$=M;Y=k[u+4>>2]|0;if(!Y){S=$;T=Z;break a}j0a(Y);S=$;T=Z;break a}k[Q+4>>2]=0;k[Q+8>>2]=0;k[Q>>2]=31876;Z=k[u>>2]|0;$=u+4|0;Y=k[$>>2]|0;k[u>>2]=0;k[$>>2]=0;$=Q+16|0;k[$>>2]=0;X=Q+20|0;k[X>>2]=0;O=Q+12|0;R=Q+28|0;k[R>>2]=0;k[Q+32>>2]=0;k[Q+24>>2]=R;k[O>>2]=38832;k[Q+36>>2]=Z;k[Q+40>>2]=Y;if(Y){h0a(Y);j0a(Y)}Y=O;O=Q;i0a(Q);k[$>>2]=Y;$=k[X>>2]|0;k[X>>2]=O;if(!$){fa=Y;ga=O;ha=0;break b}k0a($);fa=Y;ga=O;ha=0;break b}x=0;fb(140,y|0,237144,26);O=x;x=0;if(O&1){P=165;break a}x=0;fb(240,a|0,K+8|0,y|0);O=x;x=0;if(O&1){O=Hc()|0;Y=M;K2a(y);S=Y;T=O;break a}else{K2a(y);fa=0;ga=0;ha=0;break b}break}case 6:{O=iDa(H,168,6656,0)|0;if(!O){x=0;hb(49);x=0;P=165;break a}x=0;e:do if(!K){q2a(z,237039,35);Y=x;x=0;if(Y&1){P=165;break a}x=0;fb(237,a|0,b+8|0,z|0);Y=x;x=0;if(Y&1){Y=Hc()|0;$=M;K2a(z);S=$;T=Y;break a}else{K2a(z);break}}else{n8(A,256,0);Y=x;x=0;if(Y&1){P=165;break a}x=0;fb(242,a|0,K|0,A|0);Y=x;x=0;if(Y&1){Y=Hc()|0;$=M;k[A>>2]=20456;xh(A+12|0,k[A+16>>2]|0);X=k[A+8>>2]|0;if(!X){S=$;T=Y;break a}k0a(X);S=$;T=Y;break a}k[A>>2]=20456;xh(A+12|0,k[A+16>>2]|0);Y=k[A+8>>2]|0;if(Y)k0a(Y);x=0;Y=Ba(k[(k[K>>2]|0)+16>>2]|0,K|0)|0;$=x;x=0;if($&1){P=165;break a}$=k[Y+4>>2]|0;x=0;fb(140,d|0,231125,31);Y=x;x=0;if(Y&1){P=165;break a}x=0;pa(57,($|0)!=0|0,d|0,53,231157,231199);$=x;x=0;if($&1){$=Hc()|0;Y=M;K2a(d);V=Y;W=$;P=164;break b}K2a(d);x=0;$=Ba(k[(k[K>>2]|0)+16>>2]|0,K|0)|0;Y=x;x=0;if(Y&1){P=165;break a}Y=k[$+4>>2]|0;if((Y|0)!=0?($=iDa(Y,168,6624,0)|0,($|0)!=0):0){Y=k[O+24>>2]|0;x=0;fb(k[(k[$>>2]|0)+84>>2]|0,B|0,$|0,0);$=x;x=0;if($&1){P=165;break a}do if((Y|0)<0){k[d+32>>2]=8;k[d+4>>2]=-1;$=d+8|0;k[$>>2]=-1;k[$+4>>2]=-1;k[$+8>>2]=-1;k[$+12>>2]=-1;k[$+16>>2]=-1;k[$+20>>2]=-1;k[d>>2]=Y;$=k[B+32>>2]|0;f:do if(($|0)==8){X=8;while(1){if((X|0)<=0){P=135;break f}X=X+-1|0;Q=k[B+(X<<2)>>2]|0;Z=k[d+(X<<2)>>2]|0;if((Q|0)!=(Z|0)){ia=Q;ja=Z;break}}if(ia>>>0>ja>>>0)P=135;else P=136}else if($>>>0>8)P=135;else P=136;while(0);if((P|0)==135)break;else if((P|0)==136)break e}else if((k[B+32>>2]|0)>>>0<2?(k[B>>2]|0)>>>0>>0:0)break e;while(0);x=0;fb(140,C|0,237116,27);Y=x;x=0;if(Y&1){P=165;break a}x=0;fb(237,a|0,b+8|0,C|0);Y=x;x=0;if(Y&1){Y=Hc()|0;$=M;K2a(C);S=$;T=Y;break a}else{K2a(C);break}}}while(0);x=0;O=Ba(563,40)|0;U=x;x=0;if(U&1){P=165;break a}k[O+4>>2]=0;k[O+8>>2]=0;k[O>>2]=31904;U=O+12|0;x=0;xa(752,U|0,1);Y=x;x=0;if(Y&1){Y=Hc()|0;$=M;c0a(O);OBa(O);V=$;W=Y;P=164;break b}Y=U;U=O;i0a(O);k[O+16>>2]=Y;$=O+20|0;O=k[$>>2]|0;k[$>>2]=U;if(!O){fa=Y;ga=U;ha=0}else{k0a(O);fa=Y;ga=U;ha=0}break}default:{U=(k[G>>2]|0)+8|0;x=0;fb(k[(k[H>>2]|0)+76>>2]|0,F|0,H|0,0);Y=x;x=0;if(Y&1){P=165;break a}x=0;Y=Fa(86,F|0,0,237171)|0;O=x;x=0;if(O&1){O=Hc()|0;ka=O;la=M}else{k[E>>2]=k[Y>>2];k[E+4>>2]=k[Y+4>>2];k[E+8>>2]=k[Y+8>>2];k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;x=0;Y=Ta(484,E|0,300015)|0;O=x;x=0;do if(!(O&1)){k[D>>2]=k[Y>>2];k[D+4>>2]=k[Y+4>>2];k[D+8>>2]=k[Y+8>>2];k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;x=0;fb(240,a|0,U|0,D|0);$=x;x=0;if($&1){$=Hc()|0;X=M;K2a(D);ma=$;na=X;break}else{K2a(D);K2a(E);K2a(F);fa=0;ga=0;ha=0;break b}}else{X=Hc()|0;ma=X;na=M}while(0);K2a(E);ka=ma;la=na}K2a(F);S=la;T=ka;break a}}while(0);if((P|0)==164){S=V;T=W;break}x=0;U=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Y=x;x=0;if(Y&1){Y=Hc()|0;O=M;if(!ga){S=O;T=Y;break}j0a(ga);S=O;T=Y;break}k[U+4>>2]=fa;Y=U+8|0;U=k[Y>>2]|0;k[Y>>2]=ga;if(U)j0a(U);x=0;U=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;Y=x;x=0;if(!(Y&1)){i[U+12>>0]=ha;if(J){r=c;return 0}j0a(I);r=c;return 0}else P=165}else P=165;while(0);if((P|0)==165){P=Hc()|0;S=M;T=P}if(J)Sc(T|0);j0a(I);Sc(T|0);return 0}function fU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0;c=r;r=r+144|0;d=c+112|0;e=c+96|0;f=c+124|0;g=c+108|0;h=c+88|0;j=c+72|0;l=c+64|0;m=c+48|0;n=c+36|0;o=c+24|0;p=c+16|0;q=c;s=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;t=s+24|0;do if(!(k[t>>2]|0)){u=s+16|0;do if(!(k[u>>2]|0)){q2a(d,237230,36);x=0;fb(240,a|0,b+8|0,d|0);v=x;x=0;if(!(v&1)){K2a(d);break}v=Hc()|0;w=M;K2a(d);y=v;z=w;Sc(y|0)}while(0);w=s+28|0;v=k[w>>2]|0;A=s+32|0;B=k[A>>2]|0;if((v|0)==(B|0)){q2a(e,237267,44);x=0;fb(240,a|0,b+8|0,e|0);C=x;x=0;if(!(C&1)){K2a(e);break}C=Hc()|0;D=M;K2a(e);y=C;z=D;Sc(y|0)}if((B-v|0)==4){k[t>>2]=k[v>>2];break}k[f>>2]=0;v=f+4|0;k[v>>2]=0;k[f+8>>2]=0;B=k[w>>2]|0;w=k[A>>2]|0;do if((B|0)!=(w|0)){A=h+4|0;D=l+4|0;C=f+8|0;E=B;a:while(1){F=k[E>>2]|0;k[g>>2]=F;x=0;xa(k[(k[F>>2]|0)+32>>2]|0,h|0,F|0);G=x;x=0;if(G&1){H=19;break}G=k[h>>2]|0;x=0;fb(140,j|0,237312,27);I=x;x=0;if(I&1){H=22;break}x=0;pa(57,(G|0)!=0|0,j|0,1491,231157,237340);G=x;x=0;if(G&1){H=23;break}K2a(j);G=k[h>>2]|0;do if((G|0)!=0?(I=iDa(G,168,6768,0)|0,(I|0)!=0):0){J=k[u>>2]|0;k[l>>2]=0;k[D>>2]=0;x=0;K=Fa(133,I|0,J|0,l|0)|0;J=x;x=0;if(J&1){H=32;break a}J=k[D>>2]|0;if(!J){if(!K)break}else{j0a(J);if(!K)break}K=k[v>>2]|0;if((K|0)==(k[C>>2]|0)){x=0;xa(753,f|0,g|0);J=x;x=0;if(J&1){H=22;break a}else break}else{k[K>>2]=F;k[v>>2]=(k[v>>2]|0)+4;break}}while(0);F=k[A>>2]|0;if(F)j0a(F);E=E+4|0;if((E|0)==(w|0)){H=14;break}}if((H|0)==14){E=k[f>>2]|0;C=k[v>>2]|0;if((E|0)==(C|0)){H=39;break}if((C-E|0)==4){k[t>>2]=k[E>>2];H=49;break}x=0;fb(140,n|0,237485,60);E=x;x=0;if(E&1){H=20;break}x=0;fb(240,a|0,b+8|0,n|0);E=x;x=0;if(E&1){E=Hc()|0;C=M;K2a(n);L=E;N=C;break}else{K2a(n);H=49;break}}else if((H|0)==19){C=Hc()|0;O=C;P=M;H=21;break}else if((H|0)==22){C=Hc()|0;Q=C;R=M}else if((H|0)==23){C=Hc()|0;E=M;K2a(j);Q=C;R=E}else if((H|0)==32){E=Hc()|0;C=M;F=k[D>>2]|0;if(!F){Q=E;R=C}else{j0a(F);Q=E;R=C}}C=k[A>>2]|0;if(!C){L=Q;N=R}else{j0a(C);L=Q;N=R}}else H=39;while(0);do if((H|0)==39){x=0;fb(140,m|0,237422,62);w=x;x=0;if(!(w&1)){x=0;fb(240,a|0,b+8|0,m|0);w=x;x=0;if(w&1){w=Hc()|0;u=M;K2a(m);L=w;N=u;break}else{K2a(m);H=49;break}}else H=20}while(0);if((H|0)==20){u=Hc()|0;O=u;P=M;H=21}else if((H|0)==49){u=k[f>>2]|0;w=u;if(u){B=k[v>>2]|0;if((B|0)!=(u|0))k[v>>2]=B+(~((B+-4-w|0)>>>2)<<2);OBa(u)}break}if((H|0)==21){L=O;N=P}u=k[f>>2]|0;if(!u){y=L;z=N;Sc(y|0)}w=k[v>>2]|0;if((w|0)!=(u|0))k[v>>2]=w+(~((w+-4-u|0)>>>2)<<2);OBa(u);y=L;z=N;Sc(y|0)}while(0);N=(k[t>>2]|0)!=0;q2a(o,237546,57);x=0;pa(57,N|0,o|0,1507,231157,237340);N=x;x=0;if(N&1){N=Hc()|0;L=M;K2a(o);y=N;z=L;Sc(y|0)}K2a(o);o=k[t>>2]|0;L=(Vf[k[(k[o>>2]|0)+24>>2]&1023](o)|0)&1;i[s+12>>0]=L;L=s+4|0;o=k[t>>2]|0;Tf[k[(k[o>>2]|0)+32>>2]&2047](p,o);o=k[p>>2]|0;t=p+4|0;N=k[t>>2]|0;k[p>>2]=0;k[t>>2]=0;k[L>>2]=o;o=s+8|0;s=k[o>>2]|0;k[o>>2]=N;if(s)j0a(s);s=k[t>>2]|0;if(s)j0a(s);if(k[L>>2]|0){r=c;return 0}q2a(q,237604,55);x=0;fb(240,a|0,b+8|0,q|0);b=x;x=0;if(b&1){b=Hc()|0;a=M;K2a(q);y=b;z=a;Sc(y|0)}else{K2a(q);r=c;return 0}return 0}function gU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;a=r;r=r+16|0;c=a;d=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;e8(c,b+24|0);x=0;b=Ba(563,44)|0;e=x;x=0;if(e&1){e=Hc()|0;f=k[c+4>>2]|0;if(!f)Sc(e|0);j0a(f);Sc(e|0)}k[b+4>>2]=0;k[b+8>>2]=0;k[b>>2]=31876;e=b+16|0;k[e>>2]=0;f=b+20|0;k[f>>2]=0;g=b+12|0;h=b+28|0;k[h>>2]=0;k[b+32>>2]=0;k[b+24>>2]=h;k[g>>2]=38832;k[b+36>>2]=k[c>>2];h=c+4|0;c=k[h>>2]|0;k[b+40>>2]=c;if(c)h0a(c);c=g;g=b;i0a(b);k[e>>2]=c;e=k[f>>2]|0;k[f>>2]=g;if(e)k0a(e);k[d+4>>2]=c;c=d+8|0;d=k[c>>2]|0;k[c>>2]=g;if(d)j0a(d);d=k[h>>2]|0;if(!d){r=a;return}j0a(d);r=a;return}function hU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+32|0;d=c+16|0;e=c;f=Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0;g8(d,b);g=k[d>>2]|0;h=d+4|0;i=k[h>>2]|0;k[d>>2]=0;k[h>>2]=0;k[f+4>>2]=g;g=f+8|0;f=k[g>>2]|0;k[g>>2]=i;if(f)j0a(f);f=k[h>>2]|0;if(f)j0a(f);f=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0;if(k[f>>2]|0){r=c;return}q2a(e,246507,22);x=0;fb(240,a|0,b+8|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;K2a(e);Sc(b|0)}K2a(e);r=c;return}function iU(){k[8068]=0;k[8069]=0;k[8070]=0;return}function jU(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=r;r=r+80|0;g=f+56|0;h=f+16|0;i=f;if(a){r=f;return}f=h;a=f+36|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(a|0));f=h+20|0;a=h+24|0;k[a>>2]=0;k[h+28>>2]=0;k[h+32>>2]=0;k[h+36>>2]=-1;j=h+4|0;l=j+-4|0;m=j+16|0;n=h+8|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;K2a(g);k[h+4>>2]=20924;k[h>>2]=20888;k[f>>2]=20948;k[i>>2]=21048;g=i+4|0;x=0;xa(604,g|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;o=M;p=b}else{x=0;b=Ta(494,h|0,i|0)|0;h=x;x=0;if(!(h&1)){k[b+(k[(k[b>>2]|0)+-28>>2]|0)+8>>2]=e;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+12>>2]=d;k[b+(k[(k[b>>2]|0)+-28>>2]|0)+16>>2]=c;x=0;va(1451,b|0);x=0}b=Hc()|0;c=M;k[i>>2]=21048;K2a(g);o=c;p=b}k[j>>2]=20980;k[l>>2]=21008;k[m>>2]=21032;K2a(n);k[f>>2]=20796;f=k[a>>2]|0;if(!f)Sc(p|0);x=0;n=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!n)Sc(p|0);k[a>>2]=0;Sc(p|0)}function kU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=k[b>>2]|0;g=k[b+4>>2]|0;if((f|0)==(g|0)){r=c;return}b=a+8|0;h=f;a:while(1){f=k[h>>2]|0;do if(f){i=iDa(f,5224,5376,0)|0;k[d>>2]=i;j=i;if(i){i=k[e>>2]|0;if((i|0)==(k[b>>2]|0)){x=0;xa(754,a|0,d|0);l=x;x=0;if(l&1)break a;else break}else{k[i>>2]=j;k[e>>2]=(k[e>>2]|0)+4;break}}}else k[d>>2]=0;while(0);h=h+8|0;if((h|0)==(g|0)){m=3;break}}if((m|0)==3){r=c;return}c=Hc()|0;m=k[a>>2]|0;if(!m)Sc(c|0);a=k[e>>2]|0;if((a|0)!=(m|0))k[e>>2]=a+(~((a+-4-m|0)>>>2)<<2);OBa(m);Sc(c|0)}function lU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function mU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function nU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+16|0;e=d;f=b+4|0;g=k[f>>2]|0;do if(g){h=i[c>>0]|0;j=i[c+1>>0]|0;m=i[c+2>>0]|0;n=i[c+3>>0]|0;o=g;while(1){p=i[o+13>>0]|0;q=(h&255)<(p&255);if(!q)if((h&255)<=(p&255)){s=i[o+14>>0]|0;if((j&255)>=(s&255))if((j&255)<=(s&255)){s=i[o+15>>0]|0;if((m&255)>=(s&255))if((m&255)>(s&255))t=13;else{s=i[o+16>>0]|0;u=n<<24>>24!=s<<24>>24;v=(n&255)<(s&255);t=10}else{u=1;v=1;t=10}}else t=13;else{u=1;v=1;t=10}}else t=13;else{u=1;v=1;t=10}if((t|0)==10){t=0;if(v&u){s=k[o>>2]|0;if(!s){w=o;x=o;t=12;break}else y=s}else t=13}if((t|0)==13){t=0;if((p&255)>=(h&255)){if(q){z=o;t=24;break}q=i[o+14>>0]|0;if((q&255)>=(j&255)){if((q&255)>(j&255)){z=o;t=24;break}q=i[o+15>>0]|0;if((q&255)>=(m&255)){if((q&255)>(m&255)){z=o;t=24;break}q=i[o+16>>0]|0;A=q<<24>>24!=n<<24>>24;B=(q&255)<(n&255)}else{A=1;B=1}}else{A=1;B=1}}else{A=1;B=1}if(!(B&A)){z=o;t=24;break}q=o+4|0;p=k[q>>2]|0;if(!p){C=q;D=o;t=23;break}else y=p}o=y}if((t|0)==12){k[e>>2]=x;E=w;F=x;break}else if((t|0)==23){k[e>>2]=D;E=C;F=D;break}else if((t|0)==24){k[e>>2]=z;E=e;F=z;break}}else{k[e>>2]=f;E=f;F=f}while(0);f=k[E>>2]|0;if(f){G=0;H=f;I=H;k[a>>2]=I;J=a+4|0;i[J>>0]=G;r=d;return}f=KBa(20)|0;e=f+13|0;z=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[e>>0]=z;i[e+1>>0]=z>>8;i[e+2>>0]=z>>16;i[e+3>>0]=z>>24;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=F;k[E>>2]=f;F=k[k[b>>2]>>2]|0;if(!F)K=f;else{k[b>>2]=F;K=k[E>>2]|0}ui(k[b+4>>2]|0,K);K=b+8|0;k[K>>2]=(k[K>>2]|0)+1;G=1;H=f;I=H;k[a>>2]=I;J=a+4|0;i[J>>0]=G;r=d;return}function oU(a,b){a=a|0;b=b|0;if(!b)return;else{oU(a,k[b>>2]|0);oU(a,k[b+4>>2]|0);OBa(b);return}}function pU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=hY(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(40)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function qU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+32|0;e=d;n2a(e,b);b=c;f=k[b+4>>2]|0;g=e+12|0;k[g>>2]=k[b>>2];k[g+4>>2]=f;f=e+20|0;k[f>>2]=k[c+8>>2];g=e+24|0;b=k[c+12>>2]|0;k[g>>2]=b;if(b)h0a(b);b=a+4|0;c=k[b>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[c>>2]=k[e>>2];k[c+4>>2]=k[e+4>>2];k[c+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[c+12>>2]=k[e+12>>2];k[c+16>>2]=k[e+16>>2];k[c+20>>2]=k[f>>2];k[c+24>>2]=k[g>>2];k[f>>2]=0;k[g>>2]=0;k[b>>2]=(k[b>>2]|0)+28;K2a(e);r=d;return a|0}x=0;xa(755,a|0,e|0);b=x;x=0;if(b&1){b=Hc()|0;f=k[g>>2]|0;if(!f){K2a(e);Sc(b|0)}j0a(f);K2a(e);Sc(b|0)}else{b=k[g>>2]|0;if(!b){K2a(e);r=d;return a|0}j0a(b);K2a(e);r=d;return a|0}return 0}function rU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=KBa(68)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=31248;d=c+12|0;k[d>>2]=47404;e=k[b>>2]|0;f=b+(k[e+-28>>2]|0)|0;g=c+48|0;k[g>>2]=20796;h=k[f+4>>2]|0;k[c+52>>2]=h;do if(h){x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);i=x;x=0;if(i&1){i=Hc()|0;c0a(c);OBa(c);Sc(i|0)}else{j=k[b>>2]|0;break}}else j=e;while(0);e=c+56|0;h=f+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=c+36|0;e=b+(k[j+-20>>2]|0)+4|0;k[h>>2]=k[e>>2];k[h+4>>2]=k[e+4>>2];k[h+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[c+32>>2]=31332;k[d>>2]=31296;k[g>>2]=31356;k[c+16>>2]=k[b+4>>2];g=c+20|0;e=b+8|0;k[g>>2]=k[e>>2];k[g+4>>2]=k[e+4>>2];k[g+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[a>>2]=d;k[a+4>>2]=c;return}function sU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(20)|0;k[g>>2]=31456;h=b+4|0;i=k[h+4>>2]|0;j=g+4|0;k[j>>2]=k[h>>2];k[j+4>>2]=i;k[g+12>>2]=k[b+12>>2];i=k[b+16>>2]|0;k[g+16>>2]=i;if(i)h0a(i);k[d>>2]=g;i=d+4|0;k[i>>2]=0;x=0;fb(250,d|0,g|0,i|0);g=x;x=0;if(g&1){g=Hc()|0;b=k[i>>2]|0;if(!b)Sc(g|0);i=b+4|0;j=k[i>>2]|0;k[i>>2]=j+-1;if((j|0)!=1)Sc(g|0);x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);j=x;x=0;if(j&1){l=Hc(0)|0;m=M;Fg(l)}j=b+8|0;i=k[j>>2]|0;k[j>>2]=i+-1;if((i|0)!=1)Sc(g|0);x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){l=Hc(0)|0;m=M;Fg(l)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;l=k[g>>2]|0;do if(!l){x=0;m=Ba(563,32)|0;b=x;x=0;if(b&1){b=Hc()|0;n=M;o=b;p=d+4|0;break}else{k[m>>2]=21100;b=m+8|0;k[b>>2]=0;k[m+12>>2]=0;k[m+4>>2]=b;b=m+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[g>>2]=m;k[m+28>>2]=1;q=m;s=15;break}}else{q=l;s=15}while(0);do if((s|0)==15){l=k[(k[q>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;m=d+4|0;b=k[m>>2]|0;k[g>>2]=b;if(b){i=b+4|0;k[i>>2]=(k[i>>2]|0)+1}k[f>>2]=4800;x=0;fb(l|0,q|0,e|0,f|0);l=x;x=0;if(l&1){l=Hc()|0;i=M;b=k[g>>2]|0;if(!b){n=i;o=l;p=m;break}j=b+4|0;h=k[j>>2]|0;k[j>>2]=h+-1;if((h|0)!=1){n=i;o=l;p=m;break}x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);h=x;x=0;if(h&1){t=Hc(0)|0;u=M;Fg(t)}h=b+8|0;j=k[h>>2]|0;k[h>>2]=j+-1;if((j|0)!=1){n=i;o=l;p=m;break}x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(!(b&1)){n=i;o=l;p=m;break}t=Hc(0)|0;u=M;Fg(t)}l=k[g>>2]|0;if((l|0)!=0?(g=l+4|0,i=k[g>>2]|0,k[g>>2]=i+-1,(i|0)==1):0){x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);i=x;x=0;if(i&1){v=Hc(0)|0;w=M;Fg(v)}i=l+8|0;g=k[i>>2]|0;k[i>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[l>>2]|0)+12>>2]|0,l|0),l=x,x=0,l&1):0){v=Hc(0)|0;w=M;Fg(v)}}l=k[m>>2]|0;if(!l){r=c;return a|0}m=l+4|0;g=k[m>>2]|0;k[m>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[l>>2]|0)+8>>2]|0,l|0);g=x;x=0;if(g&1){y=Hc(0)|0;z=M;Fg(y)}g=l+8|0;m=k[g>>2]|0;k[g>>2]=m+-1;if((m|0)!=1){r=c;return a|0}x=0;va(k[(k[l>>2]|0)+12>>2]|0,l|0);l=x;x=0;if(l&1){y=Hc(0)|0;z=M;Fg(y)}else{r=c;return a|0}}while(0);a=k[p>>2]|0;if(!a)Sc(o|0);p=a+4|0;c=k[p>>2]|0;k[p>>2]=c+-1;if((c|0)!=1)Sc(o|0);x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){A=Hc(0)|0;B=M;Fg(A)}c=a+8|0;p=k[c>>2]|0;k[c>>2]=p+-1;if((p|0)!=1)Sc(o|0);x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){A=Hc(0)|0;B=M;Fg(A)}else Sc(o|0);return 0}function tU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=k[d>>2]|0;f=k[b>>2]|0;g=e-f|0;h=(g|0)/28|0;if((e|0)==(f|0))return;if(h>>>0>153391689?(x=0,va(1473,a|0),f=x,x=0,f&1):0)i=12;else i=4;do if((i|0)==4){x=0;f=Ba(563,g|0)|0;e=x;x=0;if(!(e&1)){k[c>>2]=f;k[a>>2]=f;k[a+8>>2]=f+(h*28|0);e=k[b>>2]|0;j=k[d>>2]|0;if((e|0)==(j|0))return;l=e;e=f;while(1){x=0;xa(604,e|0,l|0);f=x;x=0;if(f&1){i=11;break}f=l+12|0;m=k[f+4>>2]|0;n=e+12|0;k[n>>2]=k[f>>2];k[n+4>>2]=m;k[e+20>>2]=k[l+20>>2];m=k[l+24>>2]|0;k[e+24>>2]=m;if(m)h0a(m);e=(k[c>>2]|0)+28|0;k[c>>2]=e;l=l+28|0;if((l|0)==(j|0)){i=21;break}}if((i|0)==11){j=Hc()|0;o=j;p=M;break}else if((i|0)==21)return}else i=12}while(0);if((i|0)==12){i=Hc()|0;o=i;p=M}p=k[a>>2]|0;if(!p)Sc(o|0);i=k[c>>2]|0;if((i|0)==(p|0))q=p;else{d=i;do{i=d+-28|0;k[c>>2]=i;b=k[d+-4>>2]|0;if(b)j0a(b);K2a(i);d=k[c>>2]|0}while((d|0)!=(p|0));q=k[a>>2]|0}OBa(q);Sc(o|0)}function uU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=31476;x=0;xa(735,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(251,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=4768;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function vU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!b)return;vU(a,k[b>>2]|0);vU(a,k[b+4>>2]|0);a=k[b+28>>2]|0;c=a;if(a){d=b+32|0;e=k[d>>2]|0;if((e|0)!=(a|0))k[d>>2]=e+(~((e+-4-c|0)>>>2)<<2);OBa(a)}K2a(b+16|0);OBa(b);return}function wU(a,b){a=a|0;b=b|0;if(!b)return;else{wU(a,k[b>>2]|0);wU(a,k[b+4>>2]|0);K2a(b+16|0);OBa(b);return}}function xU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=k[b>>2]|0;g=k[b+4>>2]|0;if((f|0)==(g|0)){r=c;return}b=a+8|0;h=f;a:while(1){f=k[h>>2]|0;do if(f){i=iDa(f,5224,5480,0)|0;k[d>>2]=i;j=i;if(i){i=k[e>>2]|0;if((i|0)==(k[b>>2]|0)){x=0;xa(756,a|0,d|0);l=x;x=0;if(l&1)break a;else break}else{k[i>>2]=j;k[e>>2]=(k[e>>2]|0)+4;break}}}else k[d>>2]=0;while(0);h=h+8|0;if((h|0)==(g|0)){m=3;break}}if((m|0)==3){r=c;return}c=Hc()|0;m=k[a>>2]|0;if(!m)Sc(c|0);a=k[e>>2]|0;if((a|0)!=(m|0))k[e>>2]=a+(~((a+-4-m|0)>>>2)<<2);OBa(m);Sc(c|0)}function yU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=GX(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(32)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}k[f+28>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function zU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c;e=FX(a,d,b)|0;f=k[e>>2]|0;if(f){g=f;h=g+28|0;r=c;return h|0}f=KBa(40)|0;x=0;xa(604,f+16|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;OBa(f);Sc(b|0)}k[f+28>>2]=0;k[f+32>>2]=0;k[f+36>>2]=0;b=k[d>>2]|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=b;k[e>>2]=f;b=k[k[a>>2]>>2]|0;if(!b)i=f;else{k[a>>2]=b;i=k[e>>2]|0}ui(k[a+4>>2]|0,i);i=a+8|0;k[i>>2]=(k[i>>2]|0)+1;g=f;h=g+28|0;r=c;return h|0}function AU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/12|0)+1|0;if(e>>>0>357913941){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=((k[g>>2]|0)-f|0)/12|0;if(h>>>0<178956970){j=h<<1;h=j>>>0>>0?e:j;j=k[c>>2]|0;e=(j-f|0)/12|0;l=j;if(!h){m=0;n=0;o=e;p=l}else{q=h;r=l;s=e;t=6}}else{e=k[c>>2]|0;q=357913941;r=e;s=(e-f|0)/12|0;t=6}if((t|0)==6){m=q;n=KBa(q*12|0)|0;o=s;p=r}r=n+(o*12|0)|0;s=r;q=n+(m*12|0)|0;k[r>>2]=k[b>>2];m=b+4|0;k[n+(o*12|0)+4>>2]=k[m>>2];k[b>>2]=0;k[m>>2]=0;i[n+(o*12|0)+8>>0]=i[b+8>>0]|0;b=r+12|0;if((p|0)==(d|0)){u=s;v=f}else{f=p;p=r;r=s;while(1){s=f;f=f+-12|0;k[p+-12>>2]=k[f>>2];o=s+-8|0;k[p+-8>>2]=k[o>>2];k[f>>2]=0;k[o>>2]=0;i[p+-4>>0]=i[s+-4>>0]|0;p=r+-12|0;s=p;if((f|0)==(d|0)){w=s;break}else r=s}u=w;v=k[a>>2]|0}k[a>>2]=u;u=k[c>>2]|0;k[c>>2]=b;k[g>>2]=q;q=v;if((u|0)!=(q|0)){g=u;do{u=k[g+-8>>2]|0;g=g+-12|0;if(u)j0a(u)}while((g|0)!=(q|0))}if(!v)return;OBa(v);return}function BU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;BU(a,k[b>>2]|0);BU(a,k[b+4>>2]|0);a=b+28|0;c=k[a>>2]|0;if(c){d=b+32|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-12|0;k[d>>2]=e;h=k[g+-8>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[a>>2]|0}OBa(f)}K2a(b+16|0);OBa(b);return}function CU(a,b){a=a|0;b=b|0;if(!b)return;else{CU(a,k[b>>2]|0);CU(a,k[b+4>>2]|0);OBa(b);return}}function DU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[a>>2]=0;e=a+4|0;k[e>>2]=0;k[a+8>>2]=0;f=k[b>>2]|0;g=k[b+4>>2]|0;if((f|0)==(g|0)){r=c;return}b=a+8|0;h=f;a:while(1){f=k[h>>2]|0;do if(f){i=iDa(f,5224,5464,0)|0;k[d>>2]=i;j=i;if(i){i=k[e>>2]|0;if((i|0)==(k[b>>2]|0)){x=0;xa(757,a|0,d|0);l=x;x=0;if(l&1)break a;else break}else{k[i>>2]=j;k[e>>2]=(k[e>>2]|0)+4;break}}}else k[d>>2]=0;while(0);h=h+8|0;if((h|0)==(g|0)){m=3;break}}if((m|0)==3){r=c;return}c=Hc()|0;m=k[a>>2]|0;if(!m)Sc(c|0);a=k[e>>2]|0;if((a|0)!=(m|0))k[e>>2]=a+(~((a+-4-m|0)>>>2)<<2);OBa(m);Sc(c|0)}function EU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function FU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/12|0)+1|0;if(e>>>0>357913941){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=((k[g>>2]|0)-f|0)/12|0;if(h>>>0<178956970){i=h<<1;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=(i-f|0)/12|0;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=357913941;q=e;r=(e-f|0)/12|0;s=6}if((s|0)==6){l=p;m=KBa(p*12|0)|0;n=r;o=q}q=m+(n*12|0)|0;r=q;p=m+(l*12|0)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n*12|0)+4>>2]=k[l>>2];s=b+8|0;k[m+(n*12|0)+8>>2]=k[s>>2];k[l>>2]=0;k[s>>2]=0;s=q+12|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-12|0;k[o+-12>>2]=k[f>>2];l=r+-8|0;k[o+-8>>2]=k[l>>2];n=r+-4|0;k[o+-4>>2]=k[n>>2];k[l>>2]=0;k[n>>2]=0;o=q+-12|0;n=o;if((f|0)==(d|0)){v=n;break}else q=n}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=s;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-12|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function GU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;GU(a,k[b>>2]|0);GU(a,k[b+4>>2]|0);a=b+28|0;c=k[a>>2]|0;if(c){d=b+32|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-12|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[a>>2]|0}OBa(f)}K2a(b+16|0);OBa(b);return}function HU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0;d=r;r=r+48|0;e=d+32|0;f=d+28|0;g=d+12|0;h=d+16|0;i=d;j=b;l=k[a>>2]|0;m=c+4|0;n=k[m>>2]|0;a:do if(n){o=n;while(1){p=k[o+16>>2]|0;if(p>>>0>b>>>0)q=o;else{if(p>>>0>=b>>>0)break;q=o+4|0}o=k[q>>2]|0;if(!o)break a}q2a(h,239004,28);x=0;fb(240,l|0,b+8|0,h|0);o=x;x=0;if(!(o&1)){K2a(h);break}o=Hc()|0;p=M;K2a(h);s=o;t=p;Sc(s|0)}while(0);h=i+4|0;k[h>>2]=0;l=i+8|0;k[l>>2]=0;q=i+4|0;k[i>>2]=q;n=k[c>>2]|0;do if((n|0)!=(m|0)){c=q;p=n;o=n;while(1){u=p+16|0;k[g>>2]=c;k[e>>2]=k[g>>2];v=qX(i,e,f,u)|0;if(!(k[v>>2]|0)){x=0;w=Ba(563,20)|0;y=x;x=0;if(y&1){z=22;break}k[w+16>>2]=k[u>>2];u=k[f>>2]|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=u;k[v>>2]=w;u=k[k[i>>2]>>2]|0;if(!u)A=w;else{k[i>>2]=u;A=k[v>>2]|0}ui(k[h>>2]|0,A);k[l>>2]=(k[l>>2]|0)+1}v=k[o+4>>2]|0;if(!v){u=o;while(1){w=k[u+8>>2]|0;if((k[w>>2]|0)==(u|0)){B=w;break}else u=w}}else{u=v;while(1){w=k[u>>2]|0;if(!w){B=u;break}else u=w}}if((B|0)==(m|0))break;else{p=B;o=B}}if((z|0)==22){o=Hc()|0;IU(i,k[q>>2]|0);Sc(o|0)}o=k[q>>2]|0;if(o){p=o;while(1){o=k[p+16>>2]|0;if(o>>>0>b>>>0){c=k[p>>2]|0;if(!c){C=p;D=p;z=26;break}else E=c}else{if(o>>>0>=b>>>0){F=p;z=31;break}o=p+4|0;c=k[o>>2]|0;if(!c){G=o;H=p;z=30;break}else E=c}p=E}if((z|0)==26){k[f>>2]=D;I=C;J=q;K=f;L=D;break}else if((z|0)==30){k[f>>2]=H;I=G;J=q;K=f;L=H;break}else if((z|0)==31){k[f>>2]=F;I=f;J=q;K=f;L=F;break}}else{N=q;O=f;z=32}}else{N=q;O=f;z=32}while(0);if((z|0)==32){k[f>>2]=q;I=q;J=N;K=O;L=q}if(!(k[I>>2]|0)){x=0;q=Ba(563,20)|0;O=x;x=0;if(O&1)z=42;else{k[q+16>>2]=j;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=L;k[I>>2]=q;L=k[k[i>>2]>>2]|0;if(!L)P=q;else{k[i>>2]=L;P=k[I>>2]|0}ui(k[h>>2]|0,P);k[l>>2]=(k[l>>2]|0)+1;z=38}}else z=38;do if((z|0)==38){l=k[b+40>>2]|0;P=k[b+44>>2]|0;if((l|0)==(P|0)){Q=k[J>>2]|0;IU(i,Q);r=d;return}h=a+4|0;I=l;while(1){l=k[I>>2]|0;x=0;L=Ba(k[(k[l>>2]|0)+16>>2]|0,l|0)|0;q=x;x=0;if(q&1){z=41;break}q=k[L+4>>2]|0;x=0;fb(140,e|0,231125,31);L=x;x=0;if(L&1){z=41;break}x=0;pa(57,(q|0)!=0|0,e|0,59,231157,231292);q=x;x=0;if(q&1){z=48;break}K2a(e);x=0;q=Ba(k[(k[l>>2]|0)+16>>2]|0,l|0)|0;l=x;x=0;if(l&1){z=41;break}l=k[q+4>>2]|0;x=0;q=Ba(k[k[l>>2]>>2]|0,l|0)|0;l=x;x=0;if(l&1){z=41;break}if((q|0)==8){q=iDa(k[(k[I>>2]|0)+40>>2]|0,5560,5592,0)|0;if(!q){z=52;break}l=k[h>>2]|0;x=0;L=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){z=41;break}q=iDa(k[L+12>>2]|0,4520,5376,0)|0;if(!q){z=55;break}k[g>>2]=q;q=k[l+16>>2]|0;if(!q){z=57;break}x=0;fb(k[(k[q>>2]|0)+24>>2]|0,q|0,g|0,i|0);q=x;x=0;if(q&1){z=41;break}}I=I+8|0;if((I|0)==(P|0)){z=40;break}}if((z|0)==40){Q=k[J>>2]|0;IU(i,Q);r=d;return}else if((z|0)==41){P=Hc()|0;R=M;S=P;break}else if((z|0)==48){P=Hc()|0;I=M;K2a(e);R=I;S=P;break}else if((z|0)==52){x=0;hb(49);x=0;z=42;break}else if((z|0)==55){x=0;hb(49);x=0;z=42;break}else if((z|0)==57){P=Rd(4)|0;k[P>>2]=26200;x=0;fb(149,P|0,2216,320);x=0;z=42;break}}while(0);if((z|0)==42){z=Hc()|0;R=M;S=z}IU(i,k[J>>2]|0);s=S;t=R;Sc(s|0)}function IU(a,b){a=a|0;b=b|0;if(!b)return;else{IU(a,k[b>>2]|0);IU(a,k[b+4>>2]|0);OBa(b);return}}function JU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;d=r;r=r+16|0;e=d;oX(e,b);b=k[c>>2]|0;f=k[c+4>>2]|0;a:do if((b|0)==(f|0))g=9;else{c=e+4|0;h=e+8|0;i=b;while(1){j=k[c>>2]|0;if((j|0)==(k[h>>2]|0)){x=0;xa(758,e|0,i|0);l=x;x=0;if(l&1)break}else{k[j>>2]=k[i>>2];l=k[i+4>>2]|0;k[j+4>>2]=l;if(!l)m=j;else{h0a(l);m=k[c>>2]|0}k[c>>2]=m+8}i=i+8|0;if((i|0)==(f|0)){g=9;break a}}i=Hc()|0;n=i;o=M}while(0);do if((g|0)==9){x=0;xa(759,a|0,e|0);f=x;x=0;if(f&1){f=Hc()|0;n=f;o=M;break}f=k[e>>2]|0;if(!f){r=d;return}m=e+4|0;b=k[m>>2]|0;if((b|0)==(f|0))p=f;else{i=b;while(1){b=i+-8|0;k[m>>2]=b;c=k[i+-4>>2]|0;if(!c)q=b;else{j0a(c);q=k[m>>2]|0}if((q|0)==(f|0))break;else i=q}p=k[e>>2]|0}OBa(p);r=d;return}while(0);d=k[e>>2]|0;if(!d)Sc(n|0);p=e+4|0;q=k[p>>2]|0;if((q|0)==(d|0))s=d;else{o=q;while(1){q=o+-8|0;k[p>>2]=q;a=k[o+-4>>2]|0;if(!a)t=q;else{j0a(a);t=k[p>>2]|0}if((t|0)==(d|0))break;else o=t}s=k[e>>2]|0}OBa(s);Sc(n|0)}function KU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>2;if(!f)return;if(!(f>>>0>1073741823?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<2);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];f=(k[c>>2]|0)+4|0;k[c>>2]=f;d=d+4|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);a=k[c>>2]|0;if((a|0)!=(d|0))k[c>>2]=a+(~((a+-4-d|0)>>>2)<<2);OBa(d);Sc(b|0)}function LU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+48|0;f=e;k[f>>2]=47404;e=k[a>>2]|0;g=a+(k[e+-28>>2]|0)|0;h=f+20|0;k[h>>2]=20796;i=k[g+4>>2]|0;k[f+24>>2]=i;do if(!i)j=e;else{x=0;va(k[(k[i>>2]|0)+12>>2]|0,i|0);l=x;x=0;if(!(l&1)){j=k[a>>2]|0;break}l=Hc()|0;m=M;n=l;Sc(n|0)}while(0);i=f+28|0;e=g+8|0;k[i>>2]=k[e>>2];k[i+4>>2]=k[e+4>>2];k[i+8>>2]=k[e+8>>2];e=f+4|0;g=a+(k[j+-20>>2]|0)|0;k[e>>2]=31680;j=e+-4|0;k[j>>2]=31708;a=e+16|0;k[a>>2]=31732;l=f+8|0;x=0;xa(604,l|0,g+4|0);g=x;x=0;if(g&1){g=Hc()|0;o=M;k[h>>2]=20796;p=f+24|0;q=k[p>>2]|0;if(!q){m=o;n=g;Sc(n|0)}x=0;s=Ba(k[(k[q>>2]|0)+16>>2]|0,q|0)|0;q=x;x=0;if(q&1){q=Hc(0)|0;Fg(q)}if(!s){m=o;n=g;Sc(n|0)}k[p>>2]=0;m=o;n=g;Sc(n|0)}else{k[f+4>>2]=31624;k[f>>2]=31588;k[h>>2]=31648;k[i>>2]=b;k[f+32>>2]=c;k[f+36>>2]=d;x=0;va(1499,f|0);x=0;d=Hc()|0;k[e>>2]=31680;k[j>>2]=31708;k[a>>2]=31732;K2a(l);k[h>>2]=20796;h=f+24|0;f=k[h>>2]|0;if(!f)Sc(d|0);x=0;l=Ba(k[(k[f>>2]|0)+16>>2]|0,f|0)|0;f=x;x=0;if(f&1){f=Hc(0)|0;Fg(f)}if(!l)Sc(d|0);k[h>>2]=0;Sc(d|0)}}function MU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=k[b+4>>2]|0;k[m+(n<<3)+4>>2]=l;if(!l){t=o;u=d}else{h0a(l);t=k[c>>2]|0;u=k[a>>2]|0}l=q+8|0;if((t|0)==(u|0)){v=r;w=t;x=t}else{d=t;t=q;q=r;while(1){r=d;d=d+-8|0;k[t+-8>>2]=k[d>>2];o=r+-4|0;k[t+-4>>2]=k[o>>2];k[d>>2]=0;k[o>>2]=0;t=q+-8|0;o=t;if((d|0)==(u|0)){y=o;break}else q=o}v=y;w=k[a>>2]|0;x=k[c>>2]|0}k[a>>2]=v;k[c>>2]=l;k[g>>2]=p;p=w;if((x|0)!=(p|0)){g=x;do{x=k[g+-4>>2]|0;g=g+-8|0;if(x)j0a(x)}while((g|0)!=(p|0))}if(!w)return;OBa(w);return}function NU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function OU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;d=b;e=c-d>>3;f=a+8|0;g=k[f>>2]|0;h=k[a>>2]|0;i=h;if(e>>>0>g-h>>3>>>0){if(!h)j=g;else{g=a+4|0;l=k[g>>2]|0;if((l|0)==(i|0))m=h;else{n=l;while(1){l=n+-8|0;k[g>>2]=l;o=k[n+-4>>2]|0;if(!o)p=l;else{j0a(o);p=k[g>>2]|0}if((p|0)==(i|0))break;else n=p}m=k[a>>2]|0}OBa(m);k[f>>2]=0;k[g>>2]=0;k[a>>2]=0;j=0}if(e>>>0>536870911){HBa(a);q=k[a>>2]|0;r=k[f>>2]|0}else{q=0;r=j}j=r-q|0;if(j>>3>>>0<268435455){q=j>>2;j=q>>>0>>0?e:q;if(j>>>0>536870911){HBa(a);s=j}else s=j}else s=536870911;j=KBa(s<<3)|0;q=a+4|0;k[q>>2]=j;k[a>>2]=j;k[f>>2]=j+(s<<3);if((b|0)==(c|0))return;s=b;f=j;do{k[f>>2]=k[s>>2];j=k[s+4>>2]|0;k[f+4>>2]=j;if(!j)t=f;else{h0a(j);t=k[q>>2]|0}f=t+8|0;k[q>>2]=f;s=s+8|0}while((s|0)!=(c|0));return}s=a+4|0;a=(k[s>>2]|0)-h>>3;h=e>>>0>a>>>0;e=b+(a<<3)|0;a=h?e:c;if((a|0)==(b|0))u=i;else{f=a+-8-d|0;d=b;b=i;while(1){q=k[d>>2]|0;t=k[d+4>>2]|0;if(t)h0a(t);k[b>>2]=q;q=b+4|0;j=k[q>>2]|0;k[q>>2]=t;if(j)j0a(j);d=d+8|0;if((d|0)==(a|0))break;else b=b+8|0}u=i+((f>>>3)+1<<3)|0}if(!h){h=k[s>>2]|0;if((h|0)==(u|0))return;else v=h;while(1){h=v+-8|0;k[s>>2]=h;f=k[v+-4>>2]|0;if(!f)w=h;else{j0a(f);w=k[s>>2]|0}if((w|0)==(u|0))break;else v=w}return}if((a|0)==(c|0))return;a=e;e=k[s>>2]|0;do{k[e>>2]=k[a>>2];w=k[a+4>>2]|0;k[e+4>>2]=w;if(!w)x=e;else{h0a(w);x=k[s>>2]|0}e=x+8|0;k[s>>2]=e;a=a+8|0}while((a|0)!=(c|0));return}function PU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+8|0;e=k[d>>2]|0;f=a+4|0;g=k[f>>2]|0;if(e-g>>2>>>0>=b>>>0){h=b;i=g;do{k[i>>2]=k[c>>2];i=(k[f>>2]|0)+4|0;k[f>>2]=i;h=h+-1|0}while((h|0)!=0);return}h=k[a>>2]|0;i=(g-h>>2)+b|0;if(i>>>0>1073741823){HBa(a);j=k[a>>2]|0;l=k[d>>2]|0}else{j=h;l=e}e=l-j|0;if(e>>2>>>0<536870911){l=e>>1;e=l>>>0>>0?i:l;l=(k[f>>2]|0)-j>>2;if(!e){m=0;n=0;o=l}else{p=e;q=l;r=9}}else{p=1073741823;q=(k[f>>2]|0)-j>>2;r=9}if((r|0)==9){m=p;n=KBa(p<<2)|0;o=q}q=n+(o<<2)|0;o=n+(m<<2)|0;m=b;b=q;n=q;while(1){k[b>>2]=k[c>>2];b=n+4|0;p=b;m=m+-1|0;if(!m){s=p;break}else n=p}n=k[a>>2]|0;m=(k[f>>2]|0)-n|0;b=q+(0-(m>>2)<<2)|0;Dyb(b|0,n|0,m|0)|0;k[a>>2]=b;k[f>>2]=s;k[d>>2]=o;if(!n)return;OBa(n);return}function QU(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=r;r=r+16|0;c=b;d=KBa(48)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=31960;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;e=d+16|0;k[e>>2]=0;f=d+20|0;k[f>>2]=0;g=d+12|0;h=d+24|0;i=d+28|0;k[i>>2]=0;k[d+32>>2]=0;k[h>>2]=i;k[g>>2]=38608;x=0;xa(744,d+36|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;k[g>>2]=20456;xh(h,k[i>>2]|0);i=k[f>>2]|0;if(!i){c0a(d);OBa(d);Sc(c|0)}k0a(i);c0a(d);OBa(d);Sc(c|0)}else{k[a>>2]=g;k[a+4>>2]=d;i0a(d);k[e>>2]=g;g=k[f>>2]|0;k[f>>2]=d;if(!g){r=b;return}k0a(g);r=b;return}}function RU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=b+4|0;k[m+(n<<3)+4>>2]=k[l>>2];k[b>>2]=0;k[l>>2]=0;l=q+8|0;if((o|0)==(d|0)){t=r;u=f}else{f=o;o=q;q=r;while(1){r=f;f=f+-8|0;k[o+-8>>2]=k[f>>2];b=r+-4|0;k[o+-4>>2]=k[b>>2];k[f>>2]=0;k[b>>2]=0;o=q+-8|0;b=o;if((f|0)==(d|0)){v=b;break}else q=b}t=v;u=k[a>>2]|0}k[a>>2]=t;t=k[c>>2]|0;k[c>>2]=l;k[g>>2]=p;p=u;if((t|0)!=(p|0)){g=t;do{t=k[g+-4>>2]|0;g=g+-8|0;if(t)j0a(t)}while((g|0)!=(p|0))}if(!u)return;OBa(u);return}function SU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=KBa(48)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=31960;d=c+16|0;k[d>>2]=0;e=c+20|0;k[e>>2]=0;f=c+12|0;g=c+24|0;h=c+28|0;k[h>>2]=0;k[c+32>>2]=0;k[g>>2]=h;k[f>>2]=38608;x=0;xa(744,c+36|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;k[f>>2]=20456;xh(g,k[h>>2]|0);h=k[e>>2]|0;if(!h){c0a(c);OBa(c);Sc(b|0)}k0a(h);c0a(c);OBa(c);Sc(b|0)}else{k[a>>2]=f;k[a+4>>2]=c;i0a(c);k[d>>2]=f;f=k[e>>2]|0;k[e>>2]=c;if(!f)return;k0a(f);return}}function TU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;e=r;r=r+32|0;f=e;g=KBa(104)|0;k[g+4>>2]=0;k[g+8>>2]=0;k[g>>2]=31932;h=g+16|0;j=k[b>>2]|0;b=k[d>>2]|0;d=g+20|0;k[d>>2]=0;l=g+24|0;k[l>>2]=0;m=g+28|0;n=g+32|0;k[n>>2]=0;k[g+36>>2]=0;k[m>>2]=n;k[g+40>>2]=j;i[g+44>>0]=1;k[h>>2]=38152;k[g+48>>2]=0;x=0;fb(252,g+52|0,h|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;k[h>>2]=20456;xh(m,k[n>>2]|0);n=k[l>>2]|0;if(!n){c0a(g);OBa(g);Sc(c|0)}k0a(n);c0a(g);OBa(g);Sc(c|0)}else{i[g+60>>0]=0;k[g+64>>2]=b;b=g+68|0;k[b>>2]=k[f>>2];k[b+4>>2]=k[f+4>>2];k[b+8>>2]=k[f+8>>2];k[b+12>>2]=k[f+12>>2];k[b+16>>2]=k[f+16>>2];k[b+20>>2]=k[f+20>>2];k[b+24>>2]=k[f+24>>2];k[g+96>>2]=1;k[a>>2]=h;k[a+4>>2]=g;i0a(g);k[d>>2]=h;h=k[l>>2]|0;k[l>>2]=g;if(!h){r=e;return}k0a(h);r=e;return}}function UU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;d=a+4|0;k[d>>2]=0;k[a+8>>2]=0;e=k[b>>2]|0;b=k[c>>2]|0;c=b-e|0;f=c>>3;g=e;e=b;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),b=x,x=0,b&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,c|0)|0,c=x,x=0,!(c&1)):0){k[d>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);if((g|0)==(e|0))return;f=g;g=h;do{k[g>>2]=k[f>>2];h=k[f+4>>2]|0;k[g+4>>2]=h;if(!h)i=g;else{h0a(h);i=k[d>>2]|0}g=i+8|0;k[d>>2]=g;f=f+8|0}while((f|0)!=(e|0));return}e=Hc()|0;f=k[a>>2]|0;if(!f)Sc(e|0);g=k[d>>2]|0;if((g|0)==(f|0))j=f;else{i=g;while(1){g=i+-8|0;k[d>>2]=g;h=k[i+-4>>2]|0;if(!h)l=g;else{j0a(h);l=k[d>>2]|0}if((l|0)==(f|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(e|0)}function VU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=KBa(48)|0;k[c+4>>2]=0;k[c+8>>2]=0;k[c>>2]=31960;d=c+16|0;k[d>>2]=0;e=c+20|0;k[e>>2]=0;f=c+12|0;g=c+24|0;h=c+28|0;k[h>>2]=0;k[c+32>>2]=0;k[g>>2]=h;k[f>>2]=38608;x=0;xa(744,c+36|0,b|0);b=x;x=0;if(b&1){b=Hc()|0;k[f>>2]=20456;xh(g,k[h>>2]|0);h=k[e>>2]|0;if(!h){c0a(c);OBa(c);Sc(b|0)}k0a(h);c0a(c);OBa(c);Sc(b|0)}else{k[a>>2]=f;k[a+4>>2]=c;i0a(c);k[d>>2]=f;f=k[e>>2]|0;k[e>>2]=c;if(!f)return;k0a(f);return}}function WU(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;g=r;r=r+32|0;h=g+12|0;i=g;j=KBa(100)|0;k[j+4>>2]=0;k[j+8>>2]=0;k[j>>2]=31496;l=j+12|0;m=h+4|0;n=k[d>>2]|0;k[h>>2]=n;o=d+4|0;p=k[o>>2]|0;k[m>>2]=p;q=d+8|0;k[h+8>>2]=k[q>>2];k[q>>2]=0;k[o>>2]=0;k[d>>2]=0;d=i+4|0;o=k[e>>2]|0;k[i>>2]=o;q=e+4|0;s=k[q>>2]|0;k[d>>2]=s;t=e+8|0;k[i+8>>2]=k[t>>2];k[t>>2]=0;k[q>>2]=0;k[e>>2]=0;e=o;q=s;s=o;t=n;u=p;p=n;x=0;Na(42,l|0,b|0,c|0,h|0,i|0,k[f>>2]|0,0,0,0,0,0,0,0);f=x;x=0;if(f&1){f=Hc()|0;if(o){if((q|0)!=(e|0)){i=q;do{i=i+-12|0;K2a(i)}while((i|0)!=(e|0));k[d>>2]=e}OBa(s)}if(!n){c0a(j);OBa(j);Sc(f|0)}if((u|0)!=(t|0)){i=u;do{i=i+-12|0;K2a(i)}while((i|0)!=(t|0));k[m>>2]=t}OBa(p);c0a(j);OBa(j);Sc(f|0)}if(o){if((q|0)!=(e|0)){o=q;do{o=o+-12|0;K2a(o)}while((o|0)!=(e|0));k[d>>2]=e}OBa(s)}if(n){if((u|0)!=(t|0)){n=u;do{n=n+-12|0;K2a(n)}while((n|0)!=(t|0));k[m>>2]=t}OBa(p)}k[a>>2]=l;k[a+4>>2]=j;i0a(j);k[j+16>>2]=l;l=j+20|0;a=k[l>>2]|0;k[l>>2]=j;if(!a){r=g;return}k0a(a);r=g;return}function XU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,g>>>0>=h>>>0):0){if(h>>>0>=g>>>0){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?g>>>0>=(k[o+16>>2]|0)>>>0:0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if(g>>>0>>0){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if(m>>>0>=g>>>0){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>>>0>=o>>>0){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if(o>>>0>>0){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if(d>>>0>=o>>>0){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function YU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;k[a>>2]=0;d=a+4|0;k[d>>2]=0;k[a+8>>2]=0;e=k[b>>2]|0;f=k[b+4>>2]|0;if((e|0)==(f|0))return;b=c+4|0;g=c+8|0;h=c+1|0;j=a+8|0;l=e;a:while(1){e=i[l>>0]|0;m=(e&1)==0;n=(e&255)>>>1;e=m?n:k[l+4>>2]|0;o=i[c>>0]|0;p=(o&1)==0;b:do if((e|0)==((p?(o&255)>>>1:k[b>>2]|0)|0)){q=p?h:k[g>>2]|0;if(m){if(e){r=n;s=l+1|0;t=q;while(1){if((i[s>>0]|0)!=(i[t>>0]|0))break b;r=r+-1|0;if(!r)break;else{s=s+1|0;t=t+1|0}}}}else if(ZLa(k[l+8>>2]|0,q,e)|0)break;t=k[d>>2]|0;if((t|0)==(k[j>>2]|0)){x=0;xa(760,a|0,l|0);s=x;x=0;if(s&1)break a;else break}x=0;xa(604,t|0,l|0);s=x;x=0;if(s&1)break a;k[t+12>>2]=k[l+12>>2];s=k[l+16>>2]|0;k[t+16>>2]=s;if(s)h0a(s);k[t+20>>2]=k[l+20>>2];k[d>>2]=(k[d>>2]|0)+24}while(0);l=l+24|0;if((l|0)==(f|0)){u=3;break}}if((u|0)==3)return;u=Hc()|0;f=k[a>>2]|0;if(!f)Sc(u|0);l=k[d>>2]|0;if((l|0)==(f|0))v=f;else{j=l;do{l=j+-24|0;k[d>>2]=l;g=k[j+-8>>2]|0;if(g)j0a(g);K2a(l);j=k[d>>2]|0}while((j|0)!=(f|0));v=k[a>>2]|0}OBa(v);Sc(u|0)}function ZU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=KBa(104)|0;k[d+4>>2]=0;k[d+8>>2]=0;k[d>>2]=31932;e=d+16|0;f=k[b>>2]|0;b=d+20|0;k[b>>2]=0;g=d+24|0;k[g>>2]=0;h=d+28|0;j=d+32|0;k[j>>2]=0;k[d+36>>2]=0;k[h>>2]=j;k[d+40>>2]=f;i[d+44>>0]=1;k[e>>2]=38152;k[d+48>>2]=0;x=0;fb(252,d+52|0,e|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;k[e>>2]=20456;xh(h,k[j>>2]|0);j=k[g>>2]|0;if(!j){c0a(d);OBa(d);Sc(c|0)}k0a(j);c0a(d);OBa(d);Sc(c|0)}else{i[d+60>>0]=1;k[d+64>>2]=0;k[d+96>>2]=1;k[a>>2]=e;k[a+4>>2]=d;i0a(d);k[b>>2]=e;e=k[g>>2]|0;k[g>>2]=d;if(!e)return;k0a(e);return}}function _U(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0;e=KBa(104)|0;k[e+4>>2]=0;k[e+8>>2]=0;k[e>>2]=31932;f=e+16|0;g=k[b>>2]|0;b=e+20|0;k[b>>2]=0;h=e+24|0;k[h>>2]=0;j=e+28|0;l=e+32|0;k[l>>2]=0;k[e+36>>2]=0;k[j>>2]=l;k[e+40>>2]=g;i[e+44>>0]=1;k[f>>2]=38152;k[e+48>>2]=0;x=0;fb(252,e+52|0,f|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;k[f>>2]=20456;xh(j,k[l>>2]|0);l=k[h>>2]|0;if(!l){c0a(e);OBa(e);Sc(c|0)}k0a(l);c0a(e);OBa(e);Sc(c|0)}else{i[e+60>>0]=0;c=e+64|0;l=d;d=c+40|0;do{k[c>>2]=k[l>>2];c=c+4|0;l=l+4|0}while((c|0)<(d|0));k[a>>2]=f;k[a+4>>2]=e;i0a(e);k[b>>2]=f;f=k[h>>2]|0;k[h>>2]=e;if(!f)return;k0a(f);return}}function $U(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function aV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function bV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function cV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function dV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function eV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function fV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function gV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function hV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function iV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function jV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function kV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function lV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function mV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function nV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function oV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function pV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function qV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function rV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function sV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function tV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function uV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function vV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function wV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function xV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function yV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function zV(a,b){a=a|0;b=b|0;return cg[k[(k[a>>2]|0)+352>>2]&1023](a,b)|0}function AV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function BV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function CV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function DV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function EV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function FV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function GV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function HV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function IV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function JV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function KV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function LV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function MV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function NV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function OV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function PV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function QV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function RV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function SV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function TV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function UV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function VV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function WV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function XV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function YV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function ZV(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function _V(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function $V(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function aW(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function bW(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function cW(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function dW(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function eW(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function fW(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function gW(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function hW(a,b){a=a|0;b=b|0;Tf[k[(k[a>>2]|0)+356>>2]&2047](a,b);return}function iW(a,b){a=a|0;b=b|0;return 1}function jW(a,b){a=a|0;b=b|0;return}function kW(a){a=a|0;var b=0;k[a>>2]=31904;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function lW(a){a=a|0;var b=0;k[a>>2]=31904;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function mW(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function nW(a){a=a|0;OBa(a);return}function oW(a){a=a|0;var b=0,c=0;k[a>>2]=31932;b=a+16|0;k[b>>2]=38152;c=k[a+56>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+28|0,k[a+32>>2]|0);b=k[a+24>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function pW(a){a=a|0;var b=0,c=0;k[a>>2]=31932;b=a+16|0;k[b>>2]=38152;c=k[a+56>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+28|0,k[a+32>>2]|0);b=k[a+24>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function qW(a){a=a|0;var b=0,c=0;b=a+16|0;k[b>>2]=38152;c=k[a+56>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+28|0,k[a+32>>2]|0);b=k[a+24>>2]|0;if(!b)return;k0a(b);return}function rW(a){a=a|0;OBa(a);return}function sW(a){a=a|0;var b=0,c=0;k[a>>2]=31876;b=a+12|0;k[b>>2]=38832;c=k[a+40>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function tW(a){a=a|0;var b=0,c=0;k[a>>2]=31876;b=a+12|0;k[b>>2]=38832;c=k[a+40>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function uW(a){a=a|0;var b=0,c=0;b=a+12|0;k[b>>2]=38832;c=k[a+40>>2]|0;if(c)j0a(c);k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function vW(a){a=a|0;OBa(a);return}function wW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/24|0)+1|0;if(e>>>0>178956970){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/24|0;if(g>>>0<89478485){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/24|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=178956970;n=((k[c>>2]|0)-f|0)/24|0;o=6}if((o|0)==6){i=m;j=KBa(m*24|0)|0;l=n}n=j+(l*24|0)|0;m=n;o=j+(i*24|0)|0;x=0;xa(604,n|0,b|0);i=x;x=0;if(i&1){i=Hc()|0;if(!j)Sc(i|0);OBa(j);Sc(i|0)}k[j+(l*24|0)+12>>2]=k[b+12>>2];i=k[b+16>>2]|0;k[j+(l*24|0)+16>>2]=i;if(i)h0a(i);k[j+(l*24|0)+20>>2]=k[b+20>>2];b=n+24|0;l=k[a>>2]|0;j=k[c>>2]|0;if((j|0)==(l|0)){p=m;q=l;r=l}else{i=j;j=n;n=m;while(1){m=j+-24|0;f=i;i=i+-24|0;k[m>>2]=k[i>>2];k[m+4>>2]=k[i+4>>2];k[m+8>>2]=k[i+8>>2];k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;m=f+-12|0;k[j+-12>>2]=k[m>>2];h=f+-8|0;k[j+-8>>2]=k[h>>2];k[m>>2]=0;k[h>>2]=0;k[j+-4>>2]=k[f+-4>>2];j=n+-24|0;f=j;if((i|0)==(l|0)){s=f;break}else n=f}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=b;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{r=k[d+-8>>2]|0;d=d+-24|0;if(r)j0a(r);K2a(d)}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function xW(a,b,c,d,e,f,g,h,j,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;k[a+4>>2]=0;p=a+8|0;k[p>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;q=a+16|0;k[a+12>>2]=q;k[a>>2]=37588;r=a+24|0;x=0;xa(744,r|0,b|0);b=x;x=0;if(!(b&1)){b=a+36|0;x=0;xa(744,b|0,c|0);c=x;x=0;if(!(c&1)){c=a+48|0;x=0;xa(761,c|0,d|0);d=x;x=0;if(!(d&1)){x=0;xa(761,a+60|0,e|0);e=x;x=0;if(!(e&1)){k[a+72>>2]=f;i[a+76>>0]=g&1;i[a+77>>0]=m&1;i[a+78>>0]=n&1;i[a+79>>0]=o&1;i[a+80>>0]=j&1;i[a+81>>0]=l&1;k[a+84>>2]=h;return}h=Hc()|0;l=M;j=k[c>>2]|0;if(!j){s=l;t=h}else{o=a+52|0;n=k[o>>2]|0;if((n|0)==(j|0))u=j;else{m=n;do{n=m+-12|0;k[o>>2]=n;K2a(n);m=k[o>>2]|0}while((m|0)!=(j|0));u=k[c>>2]|0}OBa(u);s=l;t=h}}else{h=Hc()|0;s=M;t=h}h=k[b>>2]|0;if(!h){v=s;w=t}else{l=a+40|0;u=k[l>>2]|0;if((u|0)==(h|0))y=h;else{c=u;while(1){u=c+-8|0;k[l>>2]=u;j=k[c+-4>>2]|0;if(!j)z=u;else{j0a(j);z=k[l>>2]|0}if((z|0)==(h|0))break;else c=z}y=k[b>>2]|0}OBa(y);v=s;w=t}}else{t=Hc()|0;v=M;w=t}t=k[r>>2]|0;if(!t){A=v;B=w}else{s=a+28|0;y=k[s>>2]|0;if((y|0)==(t|0))C=t;else{b=y;while(1){y=b+-8|0;k[s>>2]=y;z=k[b+-4>>2]|0;if(!z)D=y;else{j0a(z);D=k[s>>2]|0}if((D|0)==(t|0))break;else b=D}C=k[r>>2]|0}OBa(C);A=v;B=w}}else{w=Hc()|0;A=M;B=w}k[a>>2]=20456;xh(a+12|0,k[q>>2]|0);q=k[p>>2]|0;if(!q)Sc(B|0);k0a(q);Sc(B|0)}function yW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=k[d>>2]|0;f=k[b>>2]|0;g=e-f|0;h=(g|0)/12|0;if((e|0)==(f|0))return;if(h>>>0>357913941?(x=0,va(1473,a|0),f=x,x=0,f&1):0)i=10;else i=4;do if((i|0)==4){x=0;f=Ba(563,g|0)|0;e=x;x=0;if(!(e&1)){k[c>>2]=f;k[a>>2]=f;k[a+8>>2]=f+(h*12|0);e=k[b>>2]|0;j=k[d>>2]|0;if((e|0)==(j|0))return;l=e;e=f;while(1){x=0;xa(604,e|0,l|0);f=x;x=0;if(f&1){i=9;break}e=(k[c>>2]|0)+12|0;k[c>>2]=e;l=l+12|0;if((l|0)==(j|0)){i=17;break}}if((i|0)==9){j=Hc()|0;m=j;n=M;break}else if((i|0)==17)return}else i=10}while(0);if((i|0)==10){i=Hc()|0;m=i;n=M}n=k[a>>2]|0;if(!n)Sc(m|0);i=k[c>>2]|0;if((i|0)==(n|0))o=n;else{d=i;do{i=d+-12|0;k[c>>2]=i;K2a(i);d=k[c>>2]|0}while((d|0)!=(n|0));o=k[a>>2]|0}OBa(o);Sc(m|0)}function zW(a){a=a|0;var b=0;k[a>>2]=31848;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function AW(a){a=a|0;var b=0;k[a>>2]=31848;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function BW(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function CW(a){a=a|0;OBa(a);return}function DW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=31960;b=a+12|0;k[b>>2]=38608;c=a+36|0;d=k[c>>2]|0;if(d){e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function EW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=31960;b=a+12|0;k[b>>2]=38608;c=a+36|0;d=k[c>>2]|0;if(d){e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function FW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=a+12|0;k[b>>2]=38608;c=a+36|0;d=k[c>>2]|0;if(d){e=a+40|0;f=k[e>>2]|0;if((f|0)==(d|0))g=d;else{h=f;while(1){f=h+-8|0;k[e>>2]=f;i=k[h+-4>>2]|0;if(!i)j=f;else{j0a(i);j=k[e>>2]|0}if((j|0)==(d|0))break;else h=j}g=k[c>>2]|0}OBa(g)}k[b>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function GW(a){a=a|0;OBa(a);return}function HW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=31820;b=a+12|0;c=k[b>>2]|0;if(!c){c0a(a);return}d=a+16|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f);c0a(a);return}function IW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=31820;b=a+12|0;c=k[b>>2]|0;if(!c){c0a(a);OBa(a);return}d=a+16|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;while(1){e=g+-8|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(!h)i=e;else{j0a(h);i=k[d>>2]|0}if((i|0)==(c|0))break;else g=i}f=k[b>>2]|0}OBa(f);c0a(a);OBa(a);return}function JW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=a+12|0;c=k[b>>2]|0;if(!c)return;d=a+16|0;a=k[d>>2]|0;if((a|0)==(c|0))e=c;else{f=a;while(1){a=f+-8|0;k[d>>2]=a;g=k[f+-4>>2]|0;if(!g)h=a;else{j0a(g);h=k[d>>2]|0}if((h|0)==(c|0))break;else f=h}e=k[b>>2]|0}OBa(e);return}function KW(a){a=a|0;OBa(a);return}function LW(a){a=a|0;var b=0;k[a>>2]=31792;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);return}k0a(b);c0a(a);return}function MW(a){a=a|0;var b=0;k[a>>2]=31792;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b){c0a(a);OBa(a);return}k0a(b);c0a(a);OBa(a);return}function NW(a){a=a|0;var b=0;k[a+12>>2]=20456;xh(a+24|0,k[a+28>>2]|0);b=k[a+20>>2]|0;if(!b)return;k0a(b);return}function OW(a){a=a|0;OBa(a);return}function PW(a){a=a|0;return}function QW(a){a=a|0;OBa(a);return}function RW(a){a=a|0;var b=0,c=0,d=0;b=KBa(12)|0;k[b>>2]=31748;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function SW(a,b){a=a|0;b=b|0;var c=0,d=0;k[b>>2]=31748;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return}function TW(a){a=a|0;return}function UW(a){a=a|0;OBa(a);return}function VW(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=r;r=r+288|0;f=e+272|0;g=e+264|0;h=e+248|0;j=e+232|0;l=e+216|0;m=e+208|0;n=e+200|0;o=e+80|0;p=e+168|0;q=e+160|0;s=e;t=k[d>>2]|0;d=k[a+8>>2]|0;u=a+4|0;a=k[u>>2]|0;v=(Vf[k[(k[a>>2]|0)+16>>2]&1023](a)|0)+24|0;a=k[v>>2]|0;if(a){w=v;y=a;a:while(1){a=y;while(1){if((k[a+16>>2]|0)>>>0>=b>>>0){z=a;break}a=k[a+4>>2]|0;if(!a){A=w;break a}}y=k[z>>2]|0;if(!y){A=z;break}else w=z}if((A|0)!=(v|0)?(k[A+16>>2]|0)>>>0<=b>>>0:0)B=A;else C=8}else C=8;if((C|0)==8)B=v;v=k[u>>2]|0;if((B|0)==((Vf[k[(k[v>>2]|0)+16>>2]&1023](v)|0)+24|0)){D=0;r=e;return D|0}v=k[B+20>>2]|0;q2a(f,329672,0);x=0;pa(57,(v|0)!=0|0,f|0,588,231157,238340);B=x;x=0;if(B&1){B=Hc()|0;u=M;K2a(f);E=B;F=u;Sc(E|0)}K2a(f);if((t|0)!=1){if(!v){D=0;r=e;return D|0}t=iDa(v,4520,5464,0)|0;if(!t){D=0;r=e;return D|0}f=k[t+36>>2]|0;if(!f){D=0;r=e;return D|0}if(!(iDa(f,5224,5424,0)|0)){D=0;r=e;return D|0}f=q+4|0;t=s+8|0;u=s+40|0;B=s+48|0;A=s+56|0;b=s+60|0;z=s+72|0;w=0;while(1){Tf[k[(k[v>>2]|0)+32>>2]&2047](q,v);y=k[q>>2]|0;x=0;a=Ba(k[(k[y>>2]|0)+60>>2]|0,y|0)|0;y=x;x=0;if(y&1){C=66;break}y=k[f>>2]|0;if(y)j0a(y);if(w>>>0>=a>>>0){D=1;C=79;break}k[s>>2]=1;k[t>>2]=80;k[u>>2]=1;a=B;k[a>>2]=-1;k[a+4>>2]=-1;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[A+16>>2]=0;x=0;Ta(539,c|0,s|0)|0;a=x;x=0;if(a&1){C=74;break}a=k[z>>2]|0;if(a)j0a(a);a=k[b>>2]|0;if(a)j0a(a);w=w+1|0}if((C|0)==66){w=Hc()|0;s=M;A=k[f>>2]|0;if(!A){E=w;F=s;Sc(E|0)}j0a(A);E=w;F=s;Sc(E|0)}else if((C|0)==74){s=Hc()|0;w=M;A=k[z>>2]|0;if(A)j0a(A);A=k[b>>2]|0;if(!A){E=s;F=w;Sc(E|0)}j0a(A);E=s;F=w;Sc(E|0)}else if((C|0)==79){r=e;return D|0}}Tf[k[(k[v>>2]|0)+32>>2]&2047](g,v);w=k[g>>2]|0;x=0;fb(140,h|0,263518,52);s=x;x=0;do if(s&1){A=Hc()|0;G=M;H=A}else{x=0;pa(57,(w|0)!=0|0,h|0,591,231157,238340);A=x;x=0;if(A&1){A=Hc()|0;b=M;K2a(h);G=b;H=A;break}K2a(h);A=k[g+4>>2]|0;if(A)j0a(A);do if(!(iDa(v,4520,5424,0)|0)){A=iDa(v,4520,5464,0)|0;if(!A){b=iDa(v,4520,5312,0)|0;if(!b){D=1;r=e;return D|0}if(!(i[b+72>>0]|0))D=0;else{I=1;break}r=e;return D|0}do if(i[A+58>>0]|0){k[j>>2]=-1;k[j+4>>2]=-1;k[j+8>>2]=0;k[j+12>>2]=0;x=0;fb(140,l|0,238546,59);b=x;x=0;if(b&1){b=Hc()|0;E=b;F=M;Sc(E|0)}x=0;fb(240,d|0,j|0,l|0);b=x;x=0;if(!(b&1)){K2a(l);break}b=Hc()|0;z=M;K2a(l);E=b;F=z;Sc(E|0)}while(0);z=k[A+36>>2]|0;if(z){b=(iDa(z,5224,5424,0)|0)==0;z=k[(k[A>>2]|0)+32>>2]|0;if(!b){Tf[z&2047](m,A);b=k[m>>2]|0;x=0;f=Ba(k[(k[b>>2]|0)+60>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc()|0;B=M;u=k[m+4>>2]|0;if(!u){E=b;F=B;Sc(E|0)}j0a(u);E=b;F=B;Sc(E|0)}else{B=k[m+4>>2]|0;if(B)j0a(B);if(!f)D=1;else{I=f;break}r=e;return D|0}}else J=z}else J=k[(k[A>>2]|0)+32>>2]|0;Tf[J&2047](n,A);z=k[n>>2]|0;x=0;f=Ba(k[(k[z>>2]|0)+56>>2]|0,z|0)|0;z=x;x=0;if(!(z&1)){z=k[n+4>>2]|0;if(z)j0a(z);I=f?1:2;break}f=Hc()|0;z=M;B=k[n+4>>2]|0;if(!B){E=f;F=z;Sc(E|0)}j0a(B);E=f;F=z;Sc(E|0)}else I=1;while(0);z=o+48|0;f=o+56|0;B=o+60|0;b=o+72|0;u=o+8|0;t=o+12|0;q=o+40|0;a=0;while(1){k[o>>2]=2;k[u>>2]=0;k[t>>2]=k[p>>2];k[t+4>>2]=k[p+4>>2];k[t+8>>2]=k[p+8>>2];k[t+12>>2]=k[p+12>>2];k[t+16>>2]=k[p+16>>2];k[t+20>>2]=k[p+20>>2];k[t+24>>2]=k[p+24>>2];k[q>>2]=1;y=z;k[y>>2]=-1;k[y+4>>2]=-1;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;x=0;Ta(539,c|0,o|0)|0;y=x;x=0;if(y&1)break;y=k[b>>2]|0;if(y)j0a(y);y=k[B>>2]|0;if(y)j0a(y);a=a+1|0;if(a>>>0>=I>>>0){D=1;C=79;break}}if((C|0)==79){r=e;return D|0}a=Hc()|0;f=M;z=k[b>>2]|0;if(z)j0a(z);z=k[B>>2]|0;if(!z){E=a;F=f;Sc(E|0)}j0a(z);E=a;F=f;Sc(E|0)}while(0);D=k[g+4>>2]|0;if(!D){E=H;F=G;Sc(E|0)}j0a(D);E=H;F=G;Sc(E|0);return 0}function WW(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==238276?a+4|0:0)|0}function XW(a){a=a|0;return 4672}function YW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=31680;h=g+-4|0;k[h>>2]=31708;n=g+16|0;k[n>>2]=31732;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=31624;k[c>>2]=31588;k[f>>2]=31648;x=0;xa(762,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,4688,702);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=31680;k[h>>2]=31708;k[n>>2]=31732;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function ZW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=32004;h=g+-4|0;k[h>>2]=32032;i=g+16|0;k[i>>2]=32056;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=32140;k[a>>2]=32096;k[a+20>>2]=32164;k[a+40>>2]=32192;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=32004;k[h>>2]=32032;k[i>>2]=32056;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function _W(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=32004;k[b+-4>>2]=32032;k[b+16>>2]=32056;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function $W(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=32004;k[b+-4>>2]=32032;k[b+16>>2]=32056;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function aX(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(253,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function bX(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(763,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,4688,702)}function cX(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=32004;k[a+-4>>2]=32032;k[a+16>>2]=32056;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function dX(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=32004;k[a+-4>>2]=32032;k[a+16>>2]=32056;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function eX(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(253,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function fX(a){a=a|0;bX(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function gX(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=32004;k[a+-4>>2]=32032;k[a+16>>2]=32056;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function hX(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=32004;k[a+-4>>2]=32032;k[a+16>>2]=32056;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function iX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=32004;h=g+-4|0;k[h>>2]=32032;i=g+16|0;k[i>>2]=32056;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=32140;k[a>>2]=32096;k[a+20>>2]=32164;k[a+40>>2]=32192;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=32004;k[h>>2]=32032;k[i>>2]=32056;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function jX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=32004;k[h+-4>>2]=32032;k[h+16>>2]=32056;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=32140;k[a>>2]=32096;k[d>>2]=32164;k[a+40>>2]=32192;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function kX(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=31680;k[b+-4>>2]=31708;k[b+16>>2]=31732;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function lX(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=31680;k[b+-4>>2]=31708;k[b+16>>2]=31732;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function mX(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=31680;k[a+-4>>2]=31708;k[a+16>>2]=31732;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function nX(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=31680;k[a+-4>>2]=31708;k[a+16>>2]=31732;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function oX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=(k[d>>2]|0)-(k[b>>2]|0)|0;f=e>>3;if(!f)return;if(!(f>>>0>536870911?(x=0,va(1473,a|0),g=x,x=0,g&1):0))h=4;if((h|0)==4?(x=0,h=Ba(563,e|0)|0,e=x,x=0,!(e&1)):0){k[c>>2]=h;k[a>>2]=h;k[a+8>>2]=h+(f<<3);f=k[b>>2]|0;b=k[d>>2]|0;if((f|0)==(b|0))return;d=f;f=h;do{k[f>>2]=k[d>>2];h=k[d+4>>2]|0;k[f+4>>2]=h;if(!h)i=f;else{h0a(h);i=k[c>>2]|0}f=i+8|0;k[c>>2]=f;d=d+8|0}while((d|0)!=(b|0));return}b=Hc()|0;d=k[a>>2]|0;if(!d)Sc(b|0);f=k[c>>2]|0;if((f|0)==(d|0))j=d;else{i=f;while(1){f=i+-8|0;k[c>>2]=f;h=k[i+-4>>2]|0;if(!h)l=f;else{j0a(h);l=k[c>>2]|0}if((l|0)==(d|0))break;else i=l}j=k[a>>2]|0}OBa(j);Sc(b|0)}function pX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>3)+1|0;if(e>>>0>536870911){HBa(a);f=k[a>>2]|0}else f=d;d=f;g=a+8|0;h=(k[g>>2]|0)-f|0;if(h>>3>>>0<268435455){i=h>>2;h=i>>>0>>0?e:i;i=k[c>>2]|0;e=i-f>>3;j=i;if(!h){l=0;m=0;n=e;o=j}else{p=h;q=j;r=e;s=6}}else{e=k[c>>2]|0;p=536870911;q=e;r=e-f>>3;s=6}if((s|0)==6){l=p;m=KBa(p<<3)|0;n=r;o=q}q=m+(n<<3)|0;r=q;p=m+(l<<3)|0;k[q>>2]=k[b>>2];l=k[b+4>>2]|0;k[m+(n<<3)+4>>2]=l;if(!l){t=o;u=d}else{h0a(l);t=k[c>>2]|0;u=k[a>>2]|0}l=q+8|0;if((t|0)==(u|0)){v=r;w=t;x=t}else{d=t;t=q;q=r;while(1){r=d;d=d+-8|0;k[t+-8>>2]=k[d>>2];o=r+-4|0;k[t+-4>>2]=k[o>>2];k[d>>2]=0;k[o>>2]=0;t=q+-8|0;o=t;if((d|0)==(u|0)){y=o;break}else q=o}v=y;w=k[a>>2]|0;x=k[c>>2]|0}k[a>>2]=v;k[c>>2]=l;k[g>>2]=p;p=w;if((x|0)!=(p|0)){g=x;do{x=k[g+-4>>2]|0;g=g+-8|0;if(x)j0a(x)}while((g|0)!=(p|0))}if(!w)return;OBa(w);return}function qX(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,g>>>0>=h>>>0):0){if(h>>>0>=g>>>0){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?g>>>0>=(k[o+16>>2]|0)>>>0:0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if(g>>>0>>0){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if(m>>>0>=g>>>0){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>>>0>=o>>>0){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if(o>>>0>>0){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if(d>>>0>=o>>>0){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function rX(a){a=a|0;return}function sX(a){a=a|0;OBa(a);return}function tX(a){a=a|0;var b=0,c=0,d=0;b=KBa(12)|0;k[b>>2]=31524;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function uX(a,b){a=a|0;b=b|0;var c=0,d=0;k[b>>2]=31524;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return}function vX(a){a=a|0;return}function wX(a){a=a|0;OBa(a);return}function xX(a,b,c){a=a|0;b=b|0;c=c|0;HU(a+4|0,k[b>>2]|0,c);return}function yX(a,b){a=a|0;b=b|0;return ((k[b+4>>2]|0)==239033?a+4|0:0)|0}function zX(a){a=a|0;return 4736}function AX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function BX(a){a=a|0;k[a>>2]=31496;Dg(a+12|0);c0a(a);return}function CX(a){a=a|0;k[a>>2]=31496;Dg(a+12|0);c0a(a);OBa(a);return}function DX(a){a=a|0;Dg(a+12|0);return}function EX(a){a=a|0;OBa(a);return}function FX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function GX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function HX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function IX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;x=0;a=Ba(563,16)|0;d=x;x=0;if(d&1){d=Hc(0)|0;me(d|0)|0;if(b)Sf[k[(k[b>>2]|0)+8>>2]&2047](b);x=0;hb(46);x=0;d=Hc()|0;x=0;hb(45);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}k[a+4>>2]=1;k[a+8>>2]=1;k[a>>2]=32216;k[a+12>>2]=b;b=k[c>>2]|0;k[c>>2]=a;if(!b)return;a=b+4|0;c=k[a>>2]|0;k[a>>2]=c+-1;if((c|0)!=1)return;x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);c=x;x=0;if(c&1){f=Hc(0)|0;g=M;Fg(f)}c=b+8|0;a=k[c>>2]|0;k[c>>2]=a+-1;if((a|0)!=1)return;x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){f=Hc(0)|0;g=M;Fg(f)}else return}function JX(a){a=a|0;OBa(a);return}function KX(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Sf[k[(k[b>>2]|0)+8>>2]&2047](b);return}function LX(a,b){a=a|0;b=b|0;return 0}function MX(a){a=a|0;return 0}function NX(a,b){a=a|0;b=b|0;QX(a,b);return}function OX(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;k[a>>2]=31476;b=a+4|0;c=k[b>>2]|0;if(!c)return;d=a+8|0;a=k[d>>2]|0;if((a|0)==(c|0))e=c;else{f=a;do{a=f+-28|0;k[d>>2]=a;g=k[f+-4>>2]|0;if(g)j0a(g);K2a(a);f=k[d>>2]|0}while((f|0)!=(c|0));e=k[b>>2]|0}OBa(e);return}function PX(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=31476;b=a+4|0;c=k[b>>2]|0;if(!c){OBa(a);return}d=a+8|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-28|0;k[d>>2]=e;h=k[g+-4>>2]|0;if(h)j0a(h);K2a(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f);OBa(a);return}function QX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+80|0;d=c+64|0;e=c+60|0;f=c+48|0;g=c+36|0;h=c+24|0;j=c+12|0;l=c;q2a(j,239711,45);k[e>>2]=(i[j>>0]&1)==0?j+1|0:k[j+8>>2]|0;x=0;k[d>>2]=k[e>>2];Fa(91,j|0,d|0,91)|0;d=x;x=0;if(d&1){d=Hc()|0;m=M;n=d;K2a(j);Sc(n|0)};k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;d=Ta(484,h|0,279643)|0;e=x;x=0;if(e&1){e=Hc()|0;o=M;p=e}else{k[g>>2]=k[d>>2];k[g+4>>2]=k[d+4>>2];k[g+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(764,l|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;q=M;s=b}else{b=i[l>>0]|0;d=(b&1)==0;x=0;e=Fa(88,g|0,(d?l+1|0:k[l+8>>2]|0)|0,(d?(b&255)>>>1:k[l+4>>2]|0)|0)|0;b=x;x=0;do if(!(b&1)){k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(605,f|0,10);d=x;x=0;if(d&1){d=Hc()|0;t=M;K2a(f);u=t;v=d;break}else{k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);K2a(l);K2a(g);K2a(h);K2a(j);r=c;return}}else{d=Hc()|0;u=M;v=d}while(0);K2a(l);q=u;s=v}K2a(g);o=q;p=s}K2a(h);m=o;n=p;K2a(j);Sc(n|0)}function RX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+12|0;e=c;SX(e,b,16);x=0;b=Fa(86,e|0,0,239757)|0;f=x;x=0;if(f&1){f=Hc()|0;g=M;h=f;K2a(e);Sc(h|0)};k[d>>2]=k[b>>2];k[d+4>>2]=k[b+4>>2];k[d+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;x=0;b=Ta(484,d|0,239760)|0;f=x;x=0;if(!(f&1)){k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;K2a(d);K2a(e);r=c;return}c=Hc()|0;b=M;K2a(d);g=b;h=c;K2a(e);Sc(h|0)}function SX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=r;r=r+176|0;e=d+152|0;f=d+16|0;g=d;h=f+56|0;j=f+4|0;k[f>>2]=20356;k[h>>2]=20376;x=0;xa(582,f+56|0,j|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;o=m;mab(h);Sc(o|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=20300;k[f+56>>2]=20320;x=0;va(1449,j|0);m=x;x=0;do if(m&1){p=Hc()|0;q=M;s=p}else{k[j>>2]=20392;p=f+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(583,j|0,e|0);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(e);K2a(p);obb(j);q=u;s=t;break}K2a(e);x=0;t=Fa(92,f|0,239763,6)|0;u=x;x=0;do if(!(u&1)?(x=0,fb(140,g|0,239770,40),v=x,x=0,!(v&1)):0){v=i[g>>0]|0;w=(v&1)==0;x=0;y=Fa(92,t|0,(w?g+1|0:k[g+8>>2]|0)|0,(w?(v&255)>>>1:k[g+4>>2]|0)|0)|0;v=x;x=0;if(((!(v&1)?(x=0,v=Fa(92,y|0,239811,8)|0,y=x,x=0,!(y&1)):0)?(x=0,y=Ta(543,v|0,12)|0,v=x,x=0,!(v&1)):0)?(x=0,Fa(92,y|0,239820,8)|0,y=x,x=0,!(y&1)):0){K2a(g);k[f+(k[(k[f>>2]|0)+-12>>2]|0)+76>>2]=48;k[f+(k[(k[f>>2]|0)+-12>>2]|0)+12>>2]=2;k[f+(k[(k[f>>2]|0)+-12>>2]|0)+12>>2]=2;y=f+(k[(k[f>>2]|0)+-12>>2]|0)+4|0;k[y>>2]=k[y>>2]&-75|8;x=0;Ta(543,f|0,l[b>>0]|0|0)|0;y=x;x=0;if(y&1){z=20;break}y=b+(c>>>0<12?c:12)|0;v=b;while(1){v=v+1|0;x=0;if((v|0)==(y|0))break;w=ei(f,324196,1)|0;A=x;x=0;if(A&1){z=19;break}k[w+(k[(k[w>>2]|0)+-12>>2]|0)+12>>2]=2;A=w+(k[(k[w>>2]|0)+-12>>2]|0)+4|0;k[A>>2]=k[A>>2]&-75|8;x=0;Ta(543,w|0,l[v>>0]|0|0)|0;w=x;x=0;if(w&1){z=19;break}}if((z|0)==19){v=Hc()|0;B=v;C=M;break}Fi(a,j);v=x;x=0;if(v&1){z=20;break}k[f>>2]=20300;k[h>>2]=20320;k[j>>2]=20392;K2a(p);obb(j);mab(h);r=d;return}v=Hc()|0;y=M;K2a(g);D=v;E=y;k[f>>2]=20300;k[h>>2]=20320;k[j>>2]=20392;K2a(p);obb(j);mab(h);Sc(D|0)}else z=20;while(0);if((z|0)==20){t=Hc()|0;B=t;C=M}D=B;E=C;k[f>>2]=20300;k[h>>2]=20320;k[j>>2]=20392;K2a(p);obb(j);mab(h);Sc(D|0)}while(0);n=q;o=s;mab(h);Sc(o|0)}function TX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;x=0;a=Ba(563,16)|0;d=x;x=0;if(d&1){d=Hc(0)|0;me(d|0)|0;if(b)Sf[k[(k[b>>2]|0)+8>>2]&2047](b);x=0;hb(46);x=0;d=Hc()|0;x=0;hb(45);e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}else Sc(d|0)}k[a+4>>2]=1;k[a+8>>2]=1;k[a>>2]=32248;k[a+12>>2]=b;b=k[c>>2]|0;k[c>>2]=a;if(!b)return;a=b+4|0;c=k[a>>2]|0;k[a>>2]=c+-1;if((c|0)!=1)return;x=0;va(k[(k[b>>2]|0)+8>>2]|0,b|0);c=x;x=0;if(c&1){f=Hc(0)|0;g=M;Fg(f)}c=b+8|0;a=k[c>>2]|0;k[c>>2]=a+-1;if((a|0)!=1)return;x=0;va(k[(k[b>>2]|0)+12>>2]|0,b|0);b=x;x=0;if(b&1){f=Hc(0)|0;g=M;Fg(f)}else return}function UX(a){a=a|0;OBa(a);return}function VX(a){a=a|0;var b=0;b=k[a+12>>2]|0;if(!b)return;Sf[k[(k[b>>2]|0)+8>>2]&2047](b);return}function WX(a,b){a=a|0;b=b|0;return 0}function XX(a){a=a|0;return 0}function YX(a,b){a=a|0;b=b|0;$X(a,b);return}function ZX(a){a=a|0;var b=0;k[a>>2]=31456;b=k[a+16>>2]|0;if(!b)return;j0a(b);return}function _X(a){a=a|0;var b=0;k[a>>2]=31456;b=k[a+16>>2]|0;if(!b){OBa(a);return}j0a(b);OBa(a);return}function $X(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+80|0;d=c+64|0;e=c+60|0;f=c+48|0;g=c+36|0;h=c+24|0;j=c+12|0;l=c;q2a(j,240019,36);k[e>>2]=(i[j>>0]&1)==0?j+1|0:k[j+8>>2]|0;x=0;k[d>>2]=k[e>>2];Fa(91,j|0,d|0,91)|0;d=x;x=0;if(d&1){d=Hc()|0;m=M;n=d;K2a(j);Sc(n|0)};k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;x=0;d=Ta(484,h|0,279643)|0;e=x;x=0;if(e&1){e=Hc()|0;o=M;p=e}else{k[g>>2]=k[d>>2];k[g+4>>2]=k[d+4>>2];k[g+8>>2]=k[d+8>>2];k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(765,l|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;q=M;s=b}else{b=i[l>>0]|0;d=(b&1)==0;x=0;e=Fa(88,g|0,(d?l+1|0:k[l+8>>2]|0)|0,(d?(b&255)>>>1:k[l+4>>2]|0)|0)|0;b=x;x=0;do if(!(b&1)){k[f>>2]=k[e>>2];k[f+4>>2]=k[e+4>>2];k[f+8>>2]=k[e+8>>2];k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(605,f|0,10);d=x;x=0;if(d&1){d=Hc()|0;t=M;K2a(f);u=t;v=d;break}else{k[a>>2]=k[f>>2];k[a+4>>2]=k[f+4>>2];k[a+8>>2]=k[f+8>>2];k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;K2a(f);K2a(l);K2a(g);K2a(h);K2a(j);r=c;return}}else{d=Hc()|0;u=M;v=d}while(0);K2a(l);q=u;s=v}K2a(g);o=q;p=s}K2a(h);m=o;n=p;K2a(j);Sc(n|0)}function aY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+160|0;d=c+136|0;e=c;f=e+56|0;g=e+4|0;k[e>>2]=20356;k[f>>2]=20376;x=0;xa(582,e+56|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;mab(f);Sc(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=20300;k[e+56>>2]=20320;x=0;va(1449,g|0);h=x;x=0;do if(!(h&1)){k[g>>2]=20392;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;x=0;xa(583,g|0,d|0);m=x;x=0;if(m&1){m=Hc()|0;n=M;K2a(d);K2a(l);obb(g);o=n;p=m;break}K2a(d);x=0;Ta(573,e|0,b|0)|0;m=x;x=0;if(m&1){q=Hc()|0;s=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);Sc(q|0)}x=0;xa(584,a|0,g|0);m=x;x=0;if(m&1){q=Hc()|0;s=M;k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);Sc(q|0)}else{k[e>>2]=20300;k[f>>2]=20320;k[g>>2]=20392;K2a(l);obb(g);mab(f);r=c;return}}else{l=Hc()|0;o=M;p=l}while(0);i=o;j=p;mab(f);Sc(j|0)}function bY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=b+4|0;if((k[b>>2]&k[c>>2]|0)==-1){d=ei(a,240056,21)|0;return d|0}else{e=k[b+8>>2]|0;f=i[e>>0]|0;g=(f&1)==0;h=ei(ei(a,g?e+1|0:k[e+8>>2]|0,g?(f&255)>>>1:k[e+4>>2]|0)|0,316822,1)|0;e=ei(efb(h,k[b>>2]|0)|0,301287,1)|0;d=ei(efb(e,k[c>>2]|0)|0,300015,1)|0;return d|0}return 0}function cY(a){a=a|0;var b=0,c=0;b=a+20|0;k[b>>2]=31332;k[a>>2]=31296;k[a+36>>2]=31356;K2a(a+8|0);k[b>>2]=31388;k[b+-20>>2]=31416;k[b+16>>2]=31440;K2a(a+24|0);k[a+36>>2]=20796;b=a+40|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function dY(a){a=a|0;var b=0,c=0,d=0;b=a+20|0;k[b>>2]=31332;k[a>>2]=31296;k[a+36>>2]=31356;K2a(a+8|0);k[b>>2]=31388;k[b+-20>>2]=31416;k[b+16>>2]=31440;K2a(a+24|0);k[a+36>>2]=20796;b=a+40|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function eY(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+20|0;k[a>>2]=31332;k[b>>2]=31296;c=b+36|0;k[c>>2]=31356;K2a(b+8|0);k[a>>2]=31388;k[a+-20>>2]=31416;k[a+16>>2]=31440;K2a(b+24|0);k[c>>2]=20796;c=b+40|0;b=k[c>>2]|0;if(!b)return;x=0;a=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!a)return;k[c>>2]=0;return}function fY(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+20|0;k[a>>2]=31332;k[b>>2]=31296;c=b+36|0;k[c>>2]=31356;K2a(b+8|0);k[a>>2]=31388;k[a+-20>>2]=31416;k[a+16>>2]=31440;K2a(b+24|0);k[c>>2]=20796;c=b+40|0;a=k[c>>2]|0;if(!a){OBa(b);return}x=0;d=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!d){OBa(b);return}k[c>>2]=0;OBa(b);return}function gY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=a+4|0;d=k[a>>2]|0;e=(((k[c>>2]|0)-d|0)/28|0)+1|0;if(e>>>0>153391689){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=((k[d>>2]|0)-f|0)/28|0;if(g>>>0<76695844){h=g<<1;g=h>>>0>>0?e:h;h=((k[c>>2]|0)-f|0)/28|0;if(!g){i=0;j=0;l=h}else{m=g;n=h;o=6}}else{m=153391689;n=((k[c>>2]|0)-f|0)/28|0;o=6}if((o|0)==6){i=m;j=KBa(m*28|0)|0;l=n}n=j+(l*28|0)|0;m=n;o=j+(i*28|0)|0;k[n>>2]=k[b>>2];k[n+4>>2]=k[b+4>>2];k[n+8>>2]=k[b+8>>2];k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[j+(l*28|0)+12>>2]=k[b+12>>2];k[j+(l*28|0)+16>>2]=k[b+16>>2];i=b+20|0;k[j+(l*28|0)+20>>2]=k[i>>2];f=b+24|0;k[j+(l*28|0)+24>>2]=k[f>>2];k[i>>2]=0;k[f>>2]=0;f=n+28|0;i=k[a>>2]|0;l=k[c>>2]|0;if((l|0)==(i|0)){p=m;q=i;r=i}else{j=l;l=n;n=m;while(1){m=l+-28|0;b=j;j=j+-28|0;k[m>>2]=k[j>>2];k[m+4>>2]=k[j+4>>2];k[m+8>>2]=k[j+8>>2];k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[l+-16>>2]=k[b+-16>>2];k[l+-12>>2]=k[b+-12>>2];m=b+-8|0;k[l+-8>>2]=k[m>>2];h=b+-4|0;k[l+-4>>2]=k[h>>2];k[m>>2]=0;k[h>>2]=0;l=n+-28|0;h=l;if((j|0)==(i|0)){s=h;break}else n=h}p=s;q=k[a>>2]|0;r=k[c>>2]|0}k[a>>2]=p;k[c>>2]=f;k[d>>2]=o;o=q;if((r|0)!=(o|0)){d=r;do{r=k[d+-4>>2]|0;d=d+-28|0;if(r)j0a(r);K2a(d)}while((d|0)!=(o|0))}if(!q)return;OBa(q);return}function hY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+4|0;a=k[d>>2]|0;if(!a){k[b>>2]=d;e=d;return e|0}d=i[c>>0]|0;f=(d&1)==0;g=f?(d&255)>>>1:k[c+4>>2]|0;d=f?c+1|0:k[c+8>>2]|0;c=a;while(1){a=c+16|0;f=i[a>>0]|0;h=(f&1)==0;j=h?(f&255)>>>1:k[c+20>>2]|0;f=h?a+1|0:k[c+24>>2]|0;a=j>>>0>>0;h=ZLa(d,f,a?j:g)|0;l=g>>>0>>0;if((((h|0)==0?(l?-2147483648:0):h)|0)<0){h=k[c>>2]|0;if(!h){m=c;n=c;o=5;break}else p=h}else{h=ZLa(f,d,l?g:j)|0;if((((h|0)==0?(a?-2147483648:0):h)|0)>=0){q=c;o=10;break}h=c+4|0;a=k[h>>2]|0;if(!a){r=h;s=c;o=9;break}else p=a}c=p}if((o|0)==5){k[b>>2]=n;e=m;return e|0}else if((o|0)==9){k[b>>2]=s;e=r;return e|0}else if((o|0)==10){k[b>>2]=q;e=b;return e|0}return 0}function iY(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=31248;b=a+32|0;k[b>>2]=31332;k[a+12>>2]=31296;k[a+48>>2]=31356;K2a(a+20|0);k[b>>2]=31388;k[b+-20>>2]=31416;k[b+16>>2]=31440;K2a(a+36|0);k[a+48>>2]=20796;b=a+52|0;c=k[b>>2]|0;if(!c){c0a(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){c0a(a);return}k[b>>2]=0;c0a(a);return}function jY(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=31248;b=a+32|0;k[b>>2]=31332;k[a+12>>2]=31296;k[a+48>>2]=31356;K2a(a+20|0);k[b>>2]=31388;k[b+-20>>2]=31416;k[b+16>>2]=31440;K2a(a+36|0);k[a+48>>2]=20796;b=a+52|0;c=k[b>>2]|0;if(!c){c0a(a);OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){c0a(a);OBa(a);return}k[b>>2]=0;c0a(a);OBa(a);return}function kY(a){a=a|0;var b=0;b=a+12|0;Sf[k[k[b>>2]>>2]&2047](b);return}function lY(a){a=a|0;OBa(a);return}function mY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){HBa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=KBa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;Dyb(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;OBa(f);return}function nY(a,b){a=a|0;b=b|0;var c=0;c=a+4|0;i[c>>0]=0;Tf[k[(k[b>>2]|0)+12>>2]&2047](b,a);return (i[c>>0]|0)==0|0}function oY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+80|0;d=c+76|0;e=c;f=c+16|0;g=c+4|0;do if((i[4872]|0)==0?(Bb(4872)|0)!=0:0){x=0;fb(140,f|0,285310,6);h=x;x=0;if(!(h&1)){h=f+12|0;x=0;fb(140,h|0,285317,5);j=x;x=0;if(!(j&1)){j=f+24|0;x=0;fb(140,j|0,285323,3);l=x;x=0;if(!(l&1)){l=f+36|0;x=0;fb(140,l|0,286446,6);m=x;x=0;if(!(m&1)){m=f+48|0;x=0;fb(140,m|0,277102,4);n=x;x=0;if(n&1){o=m;p=12}else{k[8164]=0;k[8165]=0;k[8163]=32656;k[e>>2]=32656;x=0;k[d>>2]=k[e>>2];Fa(134,32652,d|0,f|0)|0;m=x;x=0;if((((!(m&1)?(k[e>>2]=32656,x=0,k[d>>2]=k[e>>2],Fa(134,32652,d|0,f+12|0)|0,m=x,x=0,!(m&1)):0)?(k[e>>2]=32656,x=0,k[d>>2]=k[e>>2],Fa(134,32652,d|0,f+24|0)|0,m=x,x=0,!(m&1)):0)?(k[e>>2]=32656,x=0,k[d>>2]=k[e>>2],Fa(134,32652,d|0,f+36|0)|0,m=x,x=0,!(m&1)):0)?(k[e>>2]=32656,x=0,k[d>>2]=k[e>>2],Fa(134,32652,d|0,f+48|0)|0,m=x,x=0,!(m&1)):0){K2a(f+48|0);K2a(f+36|0);K2a(f+24|0);K2a(f+12|0);K2a(f);Kc(4872);break}m=Hc()|0;n=M;Ws(32652,k[8164]|0);K2a(f+48|0);K2a(f+36|0);K2a(f+24|0);K2a(f+12|0);K2a(f);q=n;s=m}}else{o=l;p=12}}else{o=j;p=12}}else{o=h;p=12}}else{o=f;p=12}if((p|0)==12){h=Hc()|0;j=M;if((f|0)==(o|0)){q=j;s=h}else{l=o;do{l=l+-12|0;K2a(l)}while((l|0)!=(f|0));q=j;s=h}}Cd(4872);t=q;u=s;Sc(u|0)}while(0);s=(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+16|0;q2a(g,240214,9);x=0;pa(58,a|0,b+40|0,s|0,32652,g|0);s=x;x=0;if(!(s&1)){K2a(g);r=c;return 1}c=Hc()|0;s=M;K2a(g);t=s;u=c;Sc(u|0);return 0}function pY(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;f=r;r=r+96|0;g=f+84|0;h=f+80|0;j=f+76|0;l=f+72|0;m=f+48|0;n=f+36|0;o=f+24|0;p=f+12|0;q=f;k[m+4>>2]=0;k[m+8>>2]=0;s=m+4|0;k[m>>2]=s;k[m+12>>2]=0;k[m+16>>2]=0;i[m+20>>0]=0;t=k[b>>2]|0;a:do if(t){b=i[t>>0]|0;if(!(b&1))u=(b&255)>>>1;else u=k[t+4>>2]|0;if(u){x=0;b=Fa(135,m|0,t|0,k[a+8>>2]|0)|0;v=x;x=0;do if(!(v&1)){if(!b)i[a+4>>0]=1;w=c+4|0;if((w|0)!=(m|0)?(k[j>>2]=k[m>>2],k[l>>2]=s,x=0,k[h>>2]=k[j>>2],k[g>>2]=k[l>>2],fb(254,w|0,h|0,g|0),w=x,x=0,w&1):0)break;y=14;break a}while(0);b=Hc()|0;z=M;A=b}else y=14}else y=14;while(0);do if((y|0)==14){g=k[c+4>>2]|0;h=c+8|0;if((g|0)==(h|0)){B=k[s>>2]|0;zY(m,B);r=f;return}l=d+4|0;j=e+8|0;t=e+1|0;u=e+4|0;b=g;while(1){g=b+16|0;v=k[l>>2]|0;w=i[g>>0]|0;b:do if(!v){C=k[b+20>>2]|0;y=25}else{D=(w&1)==0;E=k[b+20>>2]|0;F=D?(w&255)>>>1:E;G=D?g+1|0:k[b+24>>2]|0;D=v;while(1){H=D+16|0;I=i[H>>0]|0;J=(I&1)==0;K=J?(I&255)>>>1:k[D+20>>2]|0;I=J?H+1|0:k[D+24>>2]|0;H=K>>>0>>0;J=ZLa(G,I,H?K:F)|0;L=F>>>0>>0;if((((J|0)==0?(L?-2147483648:0):J)|0)<0)N=D;else{J=ZLa(I,G,L?F:K)|0;if((((J|0)==0?(H?-2147483648:0):J)|0)>=0)break b;N=D+4|0}D=k[N>>2]|0;if(!D){C=E;y=25;break}}}while(0);if((y|0)==25){y=0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;v=(w&1)==0?(w&255)>>>1:C;x=0;nb(83,q|0,240224,9,v+9|0);E=x;x=0;if(E&1){y=27;break}x=0;Fa(88,q|0,((i[g>>0]&1)==0?g+1|0:k[b+24>>2]|0)|0,v|0)|0;v=x;x=0;if(v&1){y=27;break}x=0;v=Ta(484,q|0,240234)|0;E=x;x=0;if(E&1){y=33;break};k[p>>2]=k[v>>2];k[p+4>>2]=k[v+4>>2];k[p+8>>2]=k[v+8>>2];k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;v=i[e>>0]|0;E=(v&1)==0;x=0;D=Fa(88,p|0,(E?t:k[j>>2]|0)|0,(E?(v&255)>>>1:k[u>>2]|0)|0)|0;v=x;x=0;if(v&1){y=34;break};k[o>>2]=k[D>>2];k[o+4>>2]=k[D+4>>2];k[o+8>>2]=k[D+8>>2];k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;x=0;D=Ta(484,o|0,324339)|0;v=x;x=0;if(v&1){y=35;break};k[n>>2]=k[D>>2];k[n+4>>2]=k[D+4>>2];k[n+8>>2]=k[D+8>>2];k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;x=0;xa(766,a|0,n|0);D=x;x=0;if(D&1){y=36;break}K2a(n);K2a(o);K2a(p);K2a(q)}D=k[b+4>>2]|0;if(!D){v=b;while(1){E=k[v+8>>2]|0;if((k[E>>2]|0)==(v|0)){O=E;break}else v=E}}else{v=D;while(1){g=k[v>>2]|0;if(!g){O=v;break}else v=g}}if((O|0)==(h|0)){y=16;break}else b=O}if((y|0)==16){B=k[s>>2]|0;zY(m,B);r=f;return}else if((y|0)==27){b=Hc()|0;h=M;K2a(q);z=h;A=b;break}else if((y|0)==33){b=Hc()|0;P=b;Q=M}else if((y|0)==34){b=Hc()|0;R=b;S=M;y=38}else if((y|0)==35){b=Hc()|0;T=b;U=M;y=37}else if((y|0)==36){b=Hc()|0;h=M;K2a(n);T=b;U=h;y=37}if((y|0)==37){K2a(o);R=T;S=U;y=38}if((y|0)==38){K2a(p);P=R;Q=S}K2a(q);V=P;W=Q;X=k[s>>2]|0;zY(m,X);Sc(V|0)}while(0);V=A;W=z;X=k[s>>2]|0;zY(m,X);Sc(V|0)}function qY(a,b){a=a|0;b=b|0;rY(a,b,b+68|0,(Vf[k[(k[b>>2]|0)+16>>2]&1023](b)|0)+4|0);return 1} -function fF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Hj=0,Ij=0,Jj=0,Kj=0,Lj=0,Mj=0,Nj=0,Oj=0,Pj=0,Qj=0,Rj=0,Sj=0,Tj=0,Uj=0,Vj=0,Wj=0,Xj=0,Yj=0,Zj=0,_j=0,$j=0,ak=0,bk=0,ck=0,dk=0,ek=0,fk=0,gk=0,hk=0,ik=0,jk=0,kk=0,lk=0,mk=0,nk=0,ok=0,pk=0,qk=0,rk=0,sk=0,tk=0,uk=0,vk=0,wk=0,xk=0,yk=0,zk=0,Ak=0,Bk=0,Ck=0,Dk=0,Ek=0,Fk=0,Gk=0,Hk=0,Ik=0,Jk=0,Kk=0,Lk=0,Mk=0,Nk=0,Ok=0,Pk=0,Qk=0,Rk=0,Sk=0,Tk=0,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,_k=0,$k=0,al=0,bl=0,cl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0,nl=0,ol=0,pl=0,ql=0,rl=0,sl=0,tl=0,ul=0,vl=0,wl=0,xl=0,yl=0,zl=0,Al=0,Bl=0,Cl=0,Dl=0,El=0,Fl=0,Gl=0,Hl=0,Il=0,Jl=0,Kl=0,Ll=0,Ml=0,Nl=0,Ol=0,Pl=0,Ql=0,Rl=0,Sl=0,Tl=0,Ul=0,Vl=0,Wl=0,Xl=0,Yl=0,Zl=0,_l=0,$l=0,am=0,bm=0,cm=0,dm=0,em=0,fm=0,gm=0,hm=0,im=0,jm=0,km=0,lm=0,mm=0,nm=0,om=0,pm=0,qm=0,rm=0,sm=0,tm=0,um=0,vm=0,wm=0,xm=0,ym=0,zm=0,Am=0,Bm=0,Cm=0,Dm=0,Em=0,Fm=0,Gm=0,Hm=0,Im=0,Jm=0,Km=0,Lm=0,Mm=0,Nm=0,Om=0,Pm=0,Qm=0,Rm=0,Sm=0,Tm=0,Um=0,Vm=0,Wm=0,Xm=0,Ym=0,Zm=0,_m=0,$m=0,an=0,bn=0,cn=0,dn=0,en=0,fn=0,gn=0,hn=0,jn=0,kn=0,ln=0,mn=0,nn=0,on=0,pn=0,qn=0,rn=0,sn=0,tn=0,un=0,vn=0,wn=0,xn=0,yn=0,zn=0,An=0,Bn=0,Cn=0,Dn=0,En=0,Fn=0,Gn=0,Hn=0,In=0,Jn=0,Kn=0,Ln=0,Mn=0,Nn=0,On=0,Pn=0,Qn=0,Rn=0,Sn=0,Tn=0,Un=0,Vn=0,Wn=0,Xn=0,Yn=0,Zn=0,_n=0,$n=0,ao=0,bo=0,co=0,eo=0,fo=0,go=0,ho=0,io=0,jo=0,ko=0,lo=0,mo=0,no=0,oo=0,po=0,qo=0,ro=0,so=0,to=0,uo=0,vo=0,wo=0,xo=0,yo=0,zo=0,Ao=0,Bo=0,Co=0,Do=0,Eo=0,Fo=0,Go=0,Ho=0,Io=0,Jo=0,Ko=0,Lo=0,Mo=0,No=0,Oo=0,Po=0,Qo=0,Ro=0,So=0,To=0,Uo=0,Vo=0,Wo=0,Xo=0,Yo=0,Zo=0,_o=0,$o=0,ap=0,bp=0,cp=0,dp=0,ep=0,fp=0,gp=0,hp=0,ip=0,jp=0,kp=0,lp=0,mp=0,np=0,op=0,pp=0,qp=0,rp=0,sp=0,tp=0,up=0,vp=0,wp=0,xp=0,yp=0,zp=0,Ap=0,Bp=0,Cp=0,Dp=0,Ep=0,Fp=0,Gp=0,Hp=0,Ip=0,Jp=0,Kp=0,Lp=0,Mp=0,Np=0,Op=0,Pp=0,Qp=0,Rp=0,Sp=0,Tp=0,Up=0,Vp=0,Wp=0,Xp=0,Yp=0,Zp=0,_p=0,$p=0,aq=0,bq=0,cq=0,dq=0,eq=0,fq=0,gq=0,hq=0,iq=0,jq=0,kq=0,lq=0,mq=0,nq=0,oq=0,pq=0,qq=0,rq=0,sq=0,tq=0,uq=0,vq=0,wq=0,xq=0,yq=0,zq=0,Aq=0,Bq=0,Cq=0,Dq=0,Eq=0,Fq=0,Gq=0,Hq=0,Iq=0,Jq=0,Kq=0,Lq=0,Mq=0,Nq=0,Oq=0,Pq=0,Qq=0,Rq=0,Sq=0,Tq=0,Uq=0,Vq=0,Wq=0,Xq=0,Yq=0,Zq=0,_q=0,$q=0,ar=0,br=0,cr=0,dr=0,er=0,fr=0,gr=0,hr=0,ir=0,jr=0,kr=0,lr=0,mr=0,nr=0,or=0,pr=0,qr=0,rr=0,sr=0,tr=0,ur=0,vr=0,wr=0,xr=0,yr=0,zr=0,Ar=0,Br=0,Cr=0,Dr=0,Er=0,Fr=0,Gr=0,Hr=0,Ir=0,Jr=0,Kr=0,Lr=0,Mr=0,Nr=0,Or=0,Pr=0,Qr=0,Rr=0,Sr=0,Tr=0,Ur=0,Vr=0,Wr=0,Xr=0,Yr=0,Zr=0,_r=0,$r=0,as=0,bs=0,cs=0,ds=0,es=0,fs=0,gs=0,hs=0,is=0,js=0,ks=0,ls=0,ms=0,ns=0,os=0,ps=0,qs=0,rs=0,ss=0,ts=0,us=0,vs=0,ws=0,xs=0,ys=0,zs=0,As=0,Bs=0,Cs=0,Ds=0,Es=0,Fs=0,Gs=0,Hs=0,Is=0,Js=0,Ks=0,Ls=0,Ms=0,Ns=0,Os=0,Ps=0,Qs=0,Rs=0,Ss=0,Ts=0,Us=0,Vs=0,Ws=0,Xs=0,Ys=0,Zs=0,_s=0,$s=0,at=0,bt=0,ct=0,dt=0,et=0,ft=0,gt=0,ht=0,it=0,jt=0,kt=0,lt=0,mt=0,nt=0,ot=0,pt=0,qt=0,rt=0,st=0,tt=0,ut=0,vt=0,wt=0,xt=0,yt=0,zt=0,At=0,Bt=0,Ct=0,Dt=0,Et=0,Ft=0,Gt=0,Ht=0,It=0,Jt=0,Kt=0,Lt=0,Mt=0,Nt=0,Ot=0,Pt=0,Qt=0,Rt=0,St=0,Tt=0,Ut=0,Vt=0,Wt=0,Xt=0,Yt=0,Zt=0,_t=0,$t=0,au=0,bu=0,cu=0,du=0,eu=0,fu=0,gu=0,hu=0,iu=0,ju=0,ku=0,lu=0,mu=0,nu=0,ou=0,pu=0,qu=0,ru=0,su=0,tu=0,uu=0,vu=0,wu=0,xu=0,yu=0,zu=0,Au=0,Bu=0,Cu=0,Du=0,Eu=0,Fu=0,Gu=0,Hu=0,Iu=0,Ju=0,Ku=0,Lu=0,Mu=0,Nu=0,Ou=0,Pu=0,Qu=0,Ru=0,Su=0,Tu=0,Uu=0,Vu=0,Wu=0,Xu=0,Yu=0,Zu=0,_u=0,$u=0,av=0,bv=0,cv=0,dv=0,ev=0,fv=0,gv=0,hv=0,iv=0,jv=0,kv=0,lv=0,mv=0,nv=0,ov=0,pv=0,qv=0,rv=0,sv=0,tv=0,uv=0,vv=0,wv=0,xv=0,yv=0,zv=0,Av=0,Bv=0,Cv=0,Dv=0,Ev=0,Fv=0,Gv=0,Hv=0,Iv=0,Jv=0,Kv=0,Lv=0,Mv=0,Nv=0,Ov=0,Pv=0,Qv=0,Rv=0,Sv=0,Tv=0,Uv=0,Vv=0,Wv=0,Xv=0,Yv=0,Zv=0,_v=0,$v=0,aw=0,bw=0,cw=0,dw=0,ew=0,fw=0,gw=0,hw=0,iw=0,jw=0,kw=0,lw=0,mw=0,nw=0,ow=0,pw=0,qw=0,rw=0,sw=0,tw=0,uw=0,vw=0,ww=0,xw=0,yw=0,zw=0,Aw=0,Bw=0,Cw=0,Dw=0,Ew=0,Fw=0,Gw=0,Hw=0,Iw=0,Jw=0,Kw=0,Lw=0,Mw=0,Nw=0,Ow=0,Pw=0,Qw=0,Rw=0,Sw=0,Tw=0,Uw=0,Vw=0,Ww=0,Xw=0,Yw=0,Zw=0,_w=0,$w=0,ax=0,bx=0,cx=0,dx=0,ex=0,fx=0,gx=0,hx=0,ix=0,jx=0,kx=0,lx=0,mx=0,nx=0,ox=0,px=0,qx=0,rx=0,sx=0,tx=0,ux=0,vx=0,wx=0,xx=0,yx=0,zx=0,Ax=0,Bx=0,Cx=0,Dx=0,Ex=0,Fx=0,Gx=0,Hx=0,Ix=0,Jx=0,Kx=0,Lx=0,Mx=0,Nx=0,Ox=0,Px=0,Qx=0,Rx=0,Sx=0,Tx=0,Ux=0,Vx=0,Wx=0,Xx=0,Yx=0,Zx=0,_x=0,$x=0,ay=0,by=0,cy=0,dy=0,ey=0,fy=0,gy=0,hy=0,iy=0,jy=0,ky=0,ly=0,my=0,ny=0,oy=0,py=0,qy=0,ry=0,sy=0,ty=0,uy=0,vy=0,wy=0,xy=0,yy=0,zy=0,Ay=0,By=0,Cy=0,Dy=0,Ey=0,Fy=0,Gy=0,Hy=0,Iy=0,Jy=0,Ky=0,Ly=0,My=0,Ny=0,Oy=0,Py=0,Qy=0,Ry=0,Sy=0,Ty=0,Uy=0,Vy=0,Wy=0,Xy=0,Yy=0,Zy=0,_y=0,$y=0,az=0,bz=0,cz=0,dz=0,ez=0,fz=0,gz=0,hz=0,iz=0,jz=0,kz=0,lz=0,mz=0,nz=0,oz=0,pz=0,qz=0,rz=0,sz=0,tz=0,uz=0,vz=0,wz=0,xz=0,yz=0,zz=0,Az=0,Bz=0,Cz=0,Dz=0,Ez=0,Fz=0,Gz=0,Hz=0,Iz=0,Jz=0,Kz=0,Lz=0,Mz=0,Nz=0,Oz=0,Pz=0,Qz=0,Rz=0,Sz=0,Tz=0,Uz=0,Vz=0,Wz=0,Xz=0,Yz=0,Zz=0,_z=0,$z=0,aA=0,bA=0,cA=0,dA=0,eA=0,fA=0,gA=0,hA=0,iA=0,jA=0,kA=0,lA=0,mA=0,nA=0,oA=0,pA=0,qA=0,rA=0,sA=0,tA=0,uA=0,vA=0,wA=0,xA=0,yA=0,zA=0,AA=0,BA=0,CA=0,DA=0,EA=0,FA=0,GA=0,HA=0,IA=0,JA=0,KA=0,LA=0,MA=0,NA=0,OA=0,PA=0,QA=0,RA=0,SA=0,TA=0,UA=0,VA=0,WA=0,XA=0,YA=0,ZA=0,_A=0,$A=0,aB=0,bB=0,cB=0,dB=0,eB=0,fB=0,gB=0,hB=0,iB=0,jB=0,kB=0,lB=0,mB=0,nB=0,oB=0,pB=0,qB=0,rB=0,sB=0,tB=0,uB=0,vB=0,wB=0,xB=0,yB=0,zB=0,AB=0,BB=0,CB=0,DB=0,EB=0,FB=0,GB=0,HB=0,IB=0,JB=0,KB=0,LB=0,MB=0,NB=0,OB=0,PB=0,QB=0,RB=0,SB=0,TB=0,UB=0,VB=0,WB=0,XB=0,YB=0,ZB=0,_B=0,$B=0,aC=0,bC=0,cC=0,dC=0,eC=0,fC=0,gC=0,hC=0,iC=0,jC=0,kC=0,lC=0,mC=0,nC=0,oC=0,pC=0,qC=0,rC=0,sC=0,tC=0,uC=0,vC=0,wC=0,xC=0,yC=0,zC=0,AC=0,BC=0,CC=0,DC=0,EC=0,FC=0,GC=0,HC=0,IC=0,JC=0,KC=0,LC=0,MC=0,NC=0,OC=0,PC=0,QC=0,RC=0,SC=0,TC=0,UC=0,VC=0,WC=0,XC=0,YC=0,ZC=0,_C=0,$C=0,aD=0,bD=0,cD=0,dD=0,eD=0,fD=0,gD=0,hD=0,iD=0,jD=0,kD=0,lD=0,mD=0,nD=0,oD=0,pD=0,qD=0,rD=0,sD=0,tD=0,uD=0,vD=0,wD=0,xD=0,yD=0,zD=0,AD=0,BD=0,CD=0,DD=0,ED=0,FD=0,GD=0,HD=0,ID=0,JD=0,KD=0,LD=0,MD=0,ND=0,OD=0,PD=0,QD=0,RD=0,SD=0,TD=0,UD=0,VD=0,WD=0,XD=0,YD=0,ZD=0,_D=0,$D=0,aE=0,bE=0,cE=0,dE=0,eE=0,fE=0,gE=0,hE=0,iE=0,jE=0,kE=0,lE=0,mE=0,nE=0,oE=0,pE=0,qE=0,rE=0,sE=0,tE=0,uE=0,vE=0,wE=0,xE=0,yE=0,zE=0,AE=0,BE=0,CE=0,DE=0,EE=0,FE=0,GE=0,HE=0,IE=0,JE=0,KE=0,LE=0,ME=0,NE=0,OE=0,PE=0,QE=0,RE=0,SE=0,TE=0,UE=0,VE=0,WE=0,XE=0,YE=0,ZE=0,_E=0,$E=0,aF=0,bF=0,cF=0,dF=0,eF=0,fF=0,gF=0,hF=0,iF=0,jF=0,kF=0,lF=0,mF=0,nF=0,oF=0,pF=0,qF=0,rF=0,sF=0,tF=0,wF=0,xF=0,yF=0,AF=0,BF=0,DF=0,EF=0,FF=0,GF=0,HF=0,IF=0,JF=0,KF=0,LF=0,MF=0,NF=0,OF=0,PF=0,QF=0,RF=0,SF=0,TF=0,UF=0,VF=0,WF=0,XF=0,YF=0,ZF=0,_F=0,$F=0,aG=0,bG=0,cG=0,dG=0,eG=0,fG=0,gG=0,hG=0,iG=0,jG=0,kG=0,lG=0,mG=0,nG=0,oG=0,pG=0,qG=0,rG=0,sG=0,tG=0,uG=0,vG=0,wG=0,xG=0,yG=0,zG=0,AG=0,BG=0,CG=0,DG=0,EG=0,FG=0,GG=0,HG=0,IG=0,JG=0,KG=0,LG=0,MG=0,NG=0,OG=0,PG=0,QG=0,RG=0,SG=0,TG=0,UG=0,VG=0,WG=0,XG=0,YG=0,ZG=0,_G=0,$G=0,aH=0,bH=0,cH=0,dH=0,eH=0,fH=0,gH=0,hH=0,iH=0,jH=0,kH=0,lH=0,mH=0,nH=0,oH=0,pH=0,qH=0,rH=0,sH=0,tH=0,uH=0,vH=0,wH=0,xH=0,yH=0,zH=0,AH=0,BH=0,CH=0,DH=0,EH=0,FH=0,GH=0,HH=0,IH=0,JH=0,KH=0,LH=0,MH=0,NH=0,OH=0,PH=0,QH=0,RH=0,SH=0,TH=0,UH=0,VH=0,WH=0,XH=0,YH=0,ZH=0,_H=0,$H=0,aI=0,bI=0,cI=0,dI=0,eI=0,fI=0,gI=0,hI=0,iI=0,jI=0,kI=0,lI=0,mI=0,nI=0,oI=0,pI=0,qI=0,rI=0,sI=0,tI=0,uI=0,vI=0,wI=0,xI=0,yI=0,zI=0,AI=0,BI=0,CI=0,DI=0,EI=0,FI=0,GI=0,HI=0,II=0,JI=0,KI=0,LI=0,MI=0,NI=0,OI=0,PI=0,QI=0,RI=0,SI=0,TI=0,UI=0,VI=0,WI=0,XI=0,YI=0,ZI=0,_I=0,$I=0,aJ=0,bJ=0,cJ=0,dJ=0,eJ=0,fJ=0,gJ=0,hJ=0,iJ=0,jJ=0,kJ=0,lJ=0,mJ=0,nJ=0,oJ=0,pJ=0,qJ=0,rJ=0,sJ=0,tJ=0,uJ=0,vJ=0,wJ=0,xJ=0,yJ=0,zJ=0,AJ=0,BJ=0,CJ=0,DJ=0,EJ=0,FJ=0,GJ=0,HJ=0,IJ=0,JJ=0,KJ=0,LJ=0,MJ=0,NJ=0,OJ=0,PJ=0,QJ=0,RJ=0,SJ=0,TJ=0,UJ=0,VJ=0,WJ=0,XJ=0,YJ=0,ZJ=0,_J=0,$J=0,aK=0,bK=0,cK=0,dK=0,eK=0,fK=0,gK=0,hK=0,iK=0,jK=0,kK=0,lK=0,mK=0,nK=0,oK=0,pK=0,qK=0,rK=0,sK=0,tK=0,uK=0,vK=0,wK=0,xK=0,yK=0,zK=0,AK=0,BK=0,CK=0,DK=0,EK=0,FK=0,GK=0,HK=0,IK=0,JK=0,KK=0,LK=0,MK=0,NK=0,OK=0,PK=0,QK=0,RK=0,SK=0,TK=0,UK=0,VK=0,WK=0,XK=0,YK=0,ZK=0,_K=0,$K=0,aL=0,bL=0,cL=0,dL=0,eL=0,fL=0,gL=0,hL=0,iL=0,jL=0,kL=0,lL=0,mL=0,nL=0,oL=0,pL=0,qL=0,rL=0,sL=0,tL=0,uL=0,vL=0,wL=0,xL=0,yL=0,zL=0,AL=0,BL=0,CL=0,DL=0,EL=0,FL=0,GL=0,HL=0,IL=0,JL=0,KL=0,LL=0,ML=0,NL=0,OL=0,PL=0,QL=0,RL=0,SL=0,TL=0,UL=0,VL=0,WL=0,XL=0,YL=0,ZL=0,_L=0,$L=0,aM=0,bM=0,cM=0,dM=0,eM=0,fM=0,gM=0,hM=0,iM=0,jM=0,kM=0,lM=0,mM=0,nM=0,oM=0,pM=0,qM=0,rM=0,sM=0,tM=0,uM=0,vM=0,wM=0,xM=0,yM=0,zM=0,AM=0,BM=0,CM=0,DM=0,EM=0,FM=0,GM=0,HM=0,IM=0,JM=0,KM=0,LM=0,MM=0,NM=0,OM=0,PM=0,QM=0,RM=0,SM=0,TM=0,UM=0,VM=0,WM=0,XM=0,YM=0,ZM=0,_M=0,$M=0,aN=0,bN=0,cN=0,dN=0,eN=0,fN=0,gN=0,hN=0,iN=0,jN=0,kN=0,lN=0,mN=0,nN=0,oN=0,pN=0,qN=0,rN=0,sN=0,tN=0,uN=0,vN=0,wN=0,xN=0,yN=0,zN=0,AN=0,BN=0,CN=0,DN=0,EN=0,FN=0,GN=0,HN=0,IN=0,JN=0,KN=0,LN=0,MN=0,NN=0,ON=0,PN=0,QN=0,RN=0,SN=0,TN=0,UN=0,VN=0,WN=0,XN=0,YN=0,ZN=0,_N=0,$N=0,aO=0,bO=0,cO=0,dO=0,eO=0,fO=0,gO=0,hO=0,iO=0,jO=0,kO=0,lO=0,mO=0,nO=0,oO=0,pO=0,qO=0,rO=0,sO=0,tO=0,uO=0,vO=0,wO=0,xO=0,yO=0,zO=0,AO=0,BO=0,CO=0,DO=0,EO=0,FO=0,GO=0,HO=0,IO=0,JO=0,KO=0,LO=0,MO=0,NO=0,OO=0,PO=0,QO=0,RO=0,SO=0,TO=0,UO=0,VO=0,WO=0,XO=0,YO=0,ZO=0,_O=0,$O=0,aP=0,bP=0,cP=0,dP=0,eP=0,fP=0,gP=0,hP=0,iP=0,jP=0,kP=0,lP=0,mP=0,nP=0,oP=0,pP=0,qP=0,rP=0,sP=0,tP=0,uP=0,vP=0,wP=0,xP=0,yP=0,zP=0,AP=0,BP=0,CP=0,DP=0,EP=0,FP=0,GP=0,HP=0,IP=0,JP=0,KP=0,LP=0,MP=0,NP=0,OP=0,PP=0,QP=0,RP=0,SP=0,TP=0,UP=0,VP=0,WP=0,XP=0,YP=0,ZP=0,_P=0,$P=0,aQ=0,bQ=0,cQ=0,dQ=0,eQ=0,fQ=0,gQ=0,hQ=0,iQ=0,jQ=0,kQ=0,lQ=0,mQ=0,nQ=0,oQ=0,pQ=0,qQ=0,rQ=0,sQ=0,tQ=0,uQ=0,vQ=0,wQ=0,xQ=0,yQ=0,zQ=0,AQ=0,BQ=0,CQ=0,DQ=0,EQ=0,FQ=0,GQ=0,HQ=0,IQ=0,JQ=0,KQ=0,LQ=0,MQ=0,NQ=0,OQ=0,PQ=0,QQ=0,RQ=0,SQ=0,TQ=0,UQ=0,VQ=0,WQ=0,XQ=0,YQ=0,ZQ=0,_Q=0,$Q=0,aR=0,bR=0,cR=0,dR=0,eR=0,fR=0,gR=0,hR=0,iR=0,jR=0,kR=0,lR=0,mR=0,nR=0,oR=0,pR=0,qR=0,rR=0,sR=0,tR=0,uR=0,vR=0,wR=0,xR=0,yR=0,zR=0,AR=0,BR=0,CR=0,DR=0,ER=0,FR=0,GR=0,HR=0,IR=0,JR=0,KR=0,LR=0,MR=0,NR=0,OR=0,PR=0,QR=0,RR=0,SR=0,TR=0,UR=0,VR=0,WR=0,XR=0,YR=0,ZR=0,_R=0,$R=0,aS=0,bS=0,cS=0,dS=0,eS=0,fS=0,gS=0,hS=0,iS=0,jS=0,kS=0,lS=0,mS=0,nS=0,oS=0,pS=0,qS=0,rS=0,sS=0,tS=0,uS=0,vS=0,wS=0,xS=0,yS=0,zS=0,AS=0,BS=0,CS=0,DS=0,ES=0,FS=0,GS=0,HS=0,IS=0,JS=0,KS=0,LS=0,MS=0,NS=0,OS=0,PS=0,QS=0,RS=0,SS=0,TS=0,US=0,VS=0,WS=0,XS=0,YS=0,ZS=0,_S=0,$S=0,aT=0,bT=0,cT=0,dT=0,eT=0,fT=0,gT=0,hT=0,iT=0,jT=0,kT=0,lT=0,mT=0,nT=0,oT=0,pT=0,qT=0,rT=0,sT=0,tT=0,uT=0,vT=0,wT=0,xT=0,yT=0,zT=0,AT=0,BT=0,CT=0,DT=0,ET=0,FT=0,GT=0,HT=0,IT=0,JT=0,KT=0,LT=0,MT=0,NT=0,OT=0,PT=0,QT=0,RT=0,ST=0,TT=0,UT=0,VT=0,WT=0,XT=0,YT=0,ZT=0,_T=0,$T=0,aU=0,bU=0,cU=0,dU=0,eU=0,fU=0,gU=0,hU=0,iU=0,jU=0,kU=0,lU=0,mU=0,nU=0,oU=0,pU=0,qU=0,rU=0,sU=0,tU=0,uU=0,vU=0,wU=0,xU=0,yU=0,zU=0,AU=0,BU=0,CU=0,DU=0,EU=0,FU=0,GU=0,HU=0,IU=0,JU=0,KU=0,LU=0,MU=0,NU=0,OU=0,PU=0,QU=0,RU=0,SU=0,TU=0,UU=0,VU=0,WU=0,XU=0,YU=0,ZU=0,_U=0,$U=0,aV=0,bV=0,cV=0,dV=0,eV=0,fV=0,gV=0,hV=0,iV=0,jV=0,kV=0,lV=0,mV=0,nV=0,oV=0,pV=0,qV=0,rV=0,sV=0,tV=0,uV=0,vV=0,wV=0,xV=0,yV=0,zV=0,AV=0,BV=0,CV=0,DV=0,EV=0,FV=0,GV=0,HV=0,IV=0,JV=0,KV=0,LV=0,MV=0,NV=0,OV=0,PV=0,QV=0,RV=0,SV=0,TV=0,UV=0,VV=0,WV=0,XV=0,YV=0,ZV=0,_V=0,$V=0,aW=0,bW=0,cW=0,dW=0,eW=0,fW=0,gW=0,hW=0,iW=0,jW=0,kW=0,lW=0,mW=0,nW=0,oW=0,pW=0,qW=0,rW=0,sW=0,tW=0,uW=0,vW=0,wW=0,xW=0,yW=0,zW=0,AW=0,BW=0,CW=0,DW=0,EW=0,FW=0,GW=0,HW=0,IW=0,JW=0,KW=0,LW=0,MW=0,NW=0,OW=0,PW=0,QW=0,RW=0,SW=0,TW=0,UW=0,VW=0,WW=0,XW=0,YW=0,ZW=0,_W=0,$W=0,aX=0,bX=0,cX=0,dX=0,eX=0,fX=0,gX=0,hX=0,iX=0,jX=0,kX=0,lX=0,mX=0,nX=0,oX=0,pX=0,qX=0,rX=0,sX=0,tX=0,uX=0,vX=0,wX=0,xX=0,yX=0,zX=0,AX=0,BX=0,CX=0,DX=0,EX=0,FX=0,GX=0,HX=0,IX=0,JX=0,KX=0,LX=0,MX=0,NX=0,OX=0,PX=0,QX=0,RX=0,SX=0,TX=0,UX=0,VX=0,WX=0,XX=0,YX=0,ZX=0,_X=0,$X=0,aY=0,bY=0,cY=0,dY=0,eY=0,fY=0,gY=0,hY=0,iY=0,jY=0,kY=0,lY=0,mY=0,nY=0,oY=0,pY=0,qY=0,rY=0,sY=0,tY=0,uY=0,vY=0,wY=0,xY=0,yY=0,zY=0,AY=0,BY=0,CY=0,DY=0,EY=0,FY=0,GY=0,HY=0,IY=0,JY=0,KY=0,LY=0,MY=0,NY=0,OY=0,PY=0,QY=0,RY=0,SY=0,TY=0,UY=0,VY=0,WY=0,XY=0,YY=0,ZY=0,_Y=0,$Y=0,aZ=0,bZ=0,cZ=0,dZ=0,eZ=0,fZ=0,gZ=0,hZ=0,iZ=0,jZ=0,kZ=0,lZ=0,mZ=0,nZ=0,oZ=0,pZ=0,qZ=0,rZ=0,sZ=0,tZ=0,uZ=0,vZ=0,wZ=0,xZ=0,yZ=0,zZ=0,AZ=0,BZ=0,CZ=0,DZ=0,EZ=0,FZ=0,GZ=0,HZ=0,IZ=0,JZ=0,KZ=0,LZ=0,MZ=0,NZ=0,OZ=0,PZ=0,QZ=0,RZ=0,SZ=0,TZ=0,UZ=0,VZ=0,WZ=0,XZ=0,YZ=0,ZZ=0,_Z=0,$Z=0,a_=0,b_=0,c_=0,d_=0,e_=0,f_=0,g_=0,h_=0,i_=0,j_=0,k_=0,l_=0,m_=0,n_=0,o_=0,p_=0,q_=0,r_=0,s_=0,t_=0,u_=0,v_=0,w_=0,x_=0,y_=0,z_=0,A_=0,B_=0,C_=0,D_=0,E_=0,F_=0,G_=0,H_=0,I_=0,J_=0,K_=0,L_=0,M_=0,N_=0,O_=0,P_=0,Q_=0,R_=0,S_=0,T_=0,U_=0,V_=0,W_=0,X_=0,Y_=0,Z_=0,__=0,$_=0,a$=0,b$=0,c$=0,d$=0,e$=0,f$=0,g$=0,h$=0,i$=0,j$=0,k$=0,l$=0,m$=0,n$=0,o$=0,p$=0,q$=0,r$=0,s$=0,t$=0,u$=0,v$=0,w$=0,x$=0,y$=0,z$=0,A$=0,B$=0,C$=0,D$=0,E$=0,F$=0,G$=0,H$=0,I$=0,J$=0,K$=0,L$=0,M$=0,N$=0,O$=0,P$=0,Q$=0,R$=0,S$=0,T$=0,U$=0,V$=0,W$=0,X$=0,Y$=0,Z$=0,_$=0,$$=0,a0=0,b0=0,c0=0,d0=0,e0=0,f0=0,g0=0,h0=0,i0=0,j0=0,k0=0,l0=0,m0=0,n0=0,o0=0,p0=0,q0=0,r0=0,s0=0,t0=0,u0=0,v0=0,w0=0,x0=0,y0=0,z0=0,A0=0,B0=0,C0=0,D0=0,E0=0,F0=0,G0=0,H0=0,I0=0,J0=0,K0=0,L0=0,M0=0,N0=0,O0=0,P0=0,Q0=0,R0=0,S0=0,T0=0,U0=0,V0=0,W0=0,X0=0,Y0=0,Z0=0,_0=0,$0=0,a1=0,b1=0,c1=0,d1=0,e1=0,f1=0,g1=0,h1=0,j1=0,k1=0,l1=0,m1=0,n1=0,o1=0,p1=0,q1=0,r1=0,s1=0,t1=0,u1=0,v1=0,w1=0,x1=0,y1=0,z1=0,A1=0,B1=0,C1=0,D1=0,E1=0,F1=0,G1=0,H1=0,I1=0,J1=0,K1=0,L1=0,M1=0,N1=0,O1=0,P1=0,Q1=0,R1=0,S1=0,T1=0,U1=0,V1=0,W1=0,X1=0,Y1=0,Z1=0,_1=0,$1=0,a2=0,b2=0,c2=0,d2=0,e2=0,f2=0,g2=0,h2=0,j2=0,k2=0,l2=0,m2=0,n2=0,o2=0,p2=0,q2=0,r2=0,s2=0,t2=0,u2=0,v2=0,w2=0,x2=0,y2=0,z2=0,A2=0,B2=0,C2=0,D2=0,E2=0,F2=0,G2=0,H2=0,I2=0,J2=0,K2=0,L2=0,M2=0,N2=0,O2=0,P2=0,Q2=0,R2=0,S2=0,T2=0,U2=0,V2=0,W2=0,X2=0,Y2=0,Z2=0,_2=0,$2=0,a3=0,b3=0,c3=0,d3=0,e3=0,f3=0,g3=0,h3=0,j3=0,k3=0,l3=0,m3=0,n3=0,o3=0,p3=0,q3=0,r3=0,s3=0,t3=0,u3=0,v3=0,w3=0,x3=0,y3=0,z3=0,A3=0,B3=0,C3=0,D3=0,E3=0,F3=0,G3=0,H3=0,I3=0,J3=0,K3=0,L3=0,M3=0,N3=0,O3=0,P3=0,Q3=0,R3=0,S3=0,T3=0,U3=0,V3=0,W3=0,X3=0,Y3=0,Z3=0,_3=0,$3=0,a4=0,b4=0,c4=0,d4=0,e4=0,f4=0,g4=0,h4=0,j4=0,k4=0,l4=0,m4=0,n4=0,o4=0,p4=0,q4=0,r4=0,s4=0,t4=0,u4=0,v4=0,w4=0,x4=0,y4=0,z4=0,A4=0,B4=0,C4=0,D4=0,E4=0,F4=0,G4=0,H4=0,I4=0,J4=0,K4=0,L4=0,M4=0,N4=0,O4=0,P4=0,Q4=0,R4=0,S4=0,T4=0,U4=0,V4=0,W4=0,X4=0,Y4=0,Z4=0,_4=0,$4=0,a5=0,b5=0,c5=0,d5=0,e5=0,f5=0,g5=0,h5=0,j5=0,k5=0,l5=0,m5=0,n5=0,o5=0,p5=0,q5=0,r5=0,s5=0,t5=0,u5=0,v5=0,w5=0,x5=0,y5=0,z5=0,A5=0,B5=0,C5=0,D5=0,E5=0,F5=0,G5=0,H5=0,I5=0,J5=0,K5=0,L5=0,M5=0,N5=0,O5=0,P5=0,Q5=0,R5=0,S5=0,T5=0,U5=0,V5=0,W5=0,X5=0,Y5=0,Z5=0,_5=0,$5=0,a6=0,b6=0,c6=0,d6=0,e6=0,f6=0,g6=0,h6=0,j6=0,k6=0,l6=0,m6=0,n6=0,o6=0,p6=0,q6=0,r6=0,s6=0,t6=0,u6=0,v6=0,w6=0,x6=0,y6=0,z6=0,A6=0,B6=0,C6=0,D6=0,E6=0,F6=0,G6=0,H6=0,I6=0,J6=0,K6=0,L6=0,M6=0,N6=0,O6=0,P6=0,Q6=0,R6=0,S6=0,T6=0,U6=0,V6=0,W6=0,X6=0,Y6=0,Z6=0,_6=0,$6=0,a7=0,b7=0,c7=0,d7=0,e7=0,f7=0,g7=0,h7=0,j7=0,k7=0,l7=0,m7=0,n7=0,o7=0,p7=0,q7=0,r7=0,s7=0,t7=0,u7=0,v7=0,w7=0,x7=0,y7=0,z7=0,A7=0,B7=0,C7=0,D7=0,E7=0,F7=0,G7=0,H7=0,I7=0,J7=0,K7=0,L7=0,M7=0,N7=0,O7=0,P7=0,Q7=0,R7=0,S7=0,T7=0,U7=0,V7=0,W7=0,X7=0,Y7=0,Z7=0,_7=0,$7=0,a8=0,b8=0,c8=0,d8=0,e8=0,f8=0,g8=0,h8=0,j8=0,k8=0,l8=0,m8=0,n8=0,o8=0,p8=0,q8=0,r8=0,s8=0,t8=0,u8=0,v8=0,w8=0,x8=0,y8=0,z8=0,A8=0,B8=0,C8=0,D8=0,E8=0,F8=0,G8=0,H8=0,I8=0,J8=0,K8=0,L8=0,M8=0,N8=0,O8=0,P8=0,Q8=0,R8=0,S8=0,T8=0,U8=0,V8=0,W8=0,X8=0,Y8=0,Z8=0,_8=0,$8=0,a9=0,b9=0,c9=0,d9=0,e9=0,f9=0,g9=0,h9=0,j9=0,k9=0,l9=0,m9=0,n9=0,o9=0,p9=0,q9=0,r9=0,s9=0,t9=0,u9=0,v9=0,w9=0,x9=0,y9=0,z9=0,A9=0,B9=0,C9=0,D9=0,E9=0,F9=0,G9=0,H9=0,I9=0,J9=0,K9=0,L9=0,M9=0,N9=0,O9=0,P9=0,Q9=0,R9=0,S9=0,T9=0,U9=0,V9=0,W9=0,X9=0,Y9=0,Z9=0,_9=0,$9=0,aaa=0,baa=0,caa=0,daa=0,eaa=0,faa=0,gaa=0,haa=0,iaa=0,jaa=0,kaa=0,laa=0,maa=0,naa=0,oaa=0,paa=0,qaa=0,raa=0,saa=0,taa=0,uaa=0,vaa=0,waa=0,xaa=0,yaa=0,zaa=0,Aaa=0,Baa=0,Caa=0,Daa=0,Eaa=0,Faa=0,Gaa=0,Haa=0,Iaa=0,Jaa=0,Kaa=0,Laa=0,Maa=0,Naa=0,Oaa=0,Paa=0,Qaa=0,Raa=0,Saa=0,Taa=0,Uaa=0,Vaa=0,Waa=0,Xaa=0,Yaa=0,Zaa=0,_aa=0,$aa=0,aba=0,bba=0,cba=0,dba=0,eba=0,fba=0,gba=0,hba=0,iba=0,jba=0,kba=0,lba=0,mba=0,nba=0,oba=0,pba=0,qba=0,rba=0,sba=0,tba=0,uba=0,vba=0,wba=0,xba=0,yba=0,zba=0,Aba=0,Bba=0,Cba=0,Dba=0,Eba=0,Fba=0,Gba=0,Hba=0,Iba=0,Jba=0,Kba=0,Lba=0,Mba=0,Nba=0,Oba=0,Pba=0,Qba=0,Rba=0,Sba=0,Tba=0,Uba=0,Vba=0,Wba=0,Xba=0,Yba=0,Zba=0,_ba=0,$ba=0,aca=0,bca=0,cca=0,dca=0,eca=0,fca=0,gca=0,hca=0,ica=0,jca=0,kca=0,lca=0,mca=0,nca=0,oca=0,pca=0,qca=0,rca=0,sca=0,tca=0,uca=0,vca=0,wca=0,xca=0,yca=0,zca=0,Aca=0,Bca=0,Cca=0,Dca=0,Eca=0,Fca=0,Gca=0,Hca=0,Ica=0,Jca=0,Kca=0,Lca=0,Mca=0,Nca=0,Oca=0,Pca=0,Qca=0,Rca=0,Sca=0,Tca=0,Uca=0,Vca=0,Wca=0,Xca=0,Yca=0,Zca=0,_ca=0,$ca=0,ada=0,bda=0,cda=0,dda=0,eda=0,fda=0,gda=0,hda=0,ida=0,jda=0,kda=0,lda=0,mda=0,nda=0,oda=0,pda=0,qda=0,rda=0,sda=0,tda=0,uda=0,vda=0,wda=0,xda=0,yda=0,zda=0,Ada=0,Bda=0,Cda=0,Dda=0,Eda=0,Fda=0,Gda=0,Hda=0,Ida=0,Jda=0,Kda=0,Lda=0,Mda=0,Nda=0,Oda=0,Pda=0,Qda=0,Rda=0,Sda=0,Tda=0,Uda=0,Vda=0,Wda=0,Xda=0,Yda=0,Zda=0,_da=0,$da=0,aea=0,bea=0,cea=0,dea=0,eea=0,fea=0,gea=0,hea=0,iea=0,jea=0,kea=0,lea=0,mea=0,nea=0,oea=0,pea=0,qea=0,rea=0,sea=0,tea=0,uea=0,vea=0,wea=0,xea=0,yea=0,zea=0,Aea=0,Bea=0,Cea=0,Dea=0,Eea=0,Fea=0,Gea=0,Hea=0,Iea=0,Jea=0,Kea=0,Lea=0,Mea=0,Nea=0,Oea=0,Pea=0,Qea=0,Rea=0,Sea=0,Tea=0,Uea=0,Vea=0,Wea=0,Xea=0,Yea=0,Zea=0,_ea=0,$ea=0,afa=0,bfa=0,cfa=0,dfa=0,efa=0,ffa=0,gfa=0,hfa=0,ifa=0,jfa=0,kfa=0,lfa=0,mfa=0,nfa=0,ofa=0,pfa=0,qfa=0,rfa=0,sfa=0,tfa=0,ufa=0,vfa=0,wfa=0,xfa=0,yfa=0,zfa=0,Afa=0,Bfa=0,Cfa=0,Dfa=0,Efa=0,Ffa=0,Gfa=0,Hfa=0,Ifa=0,Jfa=0,Kfa=0,Lfa=0,Mfa=0,Nfa=0,Ofa=0,Pfa=0,Qfa=0,Rfa=0,Sfa=0,Tfa=0,Ufa=0,Vfa=0,Wfa=0,Xfa=0,Yfa=0,Zfa=0,_fa=0,$fa=0,aga=0,bga=0,cga=0,dga=0,ega=0,fga=0,gga=0,hga=0,iga=0,jga=0,kga=0,lga=0,mga=0,nga=0,oga=0,pga=0,qga=0,rga=0,sga=0,tga=0,uga=0,vga=0,wga=0,xga=0,yga=0,zga=0,Aga=0,Bga=0,Cga=0,Dga=0,Ega=0,Fga=0,Gga=0,Hga=0,Iga=0,Jga=0,Kga=0,Lga=0,Mga=0,Nga=0,Oga=0,Pga=0,Qga=0,Rga=0,Sga=0,Tga=0,Uga=0,Vga=0,Wga=0,Xga=0,Yga=0,Zga=0,_ga=0,$ga=0,aha=0,bha=0,cha=0,dha=0,eha=0,fha=0,gha=0,hha=0,iha=0,jha=0,kha=0,lha=0,mha=0,nha=0,oha=0,pha=0,qha=0,rha=0,sha=0,tha=0,uha=0,vha=0,wha=0,xha=0,yha=0,zha=0,Aha=0,Bha=0,Cha=0,Dha=0,Eha=0,Fha=0,Gha=0,Hha=0,Iha=0,Jha=0,Kha=0,Lha=0,Mha=0,Nha=0,Oha=0,Pha=0,Qha=0,Rha=0,Sha=0,Tha=0,Uha=0,Vha=0,Wha=0,Xha=0,Yha=0,Zha=0,_ha=0,$ha=0,aia=0,bia=0,cia=0,dia=0,eia=0,fia=0,gia=0,hia=0,iia=0,jia=0,kia=0,lia=0,mia=0,nia=0,oia=0,pia=0,qia=0,ria=0,sia=0,tia=0,uia=0,via=0,wia=0,xia=0,yia=0,zia=0,Aia=0,Bia=0,Cia=0,Dia=0,Eia=0,Fia=0,Gia=0,Hia=0,Iia=0,Jia=0,Kia=0,Lia=0,Mia=0,Nia=0,Oia=0,Pia=0,Qia=0,Ria=0,Sia=0,Tia=0,Uia=0,Via=0,Wia=0,Xia=0,Yia=0,Zia=0,_ia=0,$ia=0,aja=0,bja=0,cja=0,dja=0,eja=0,fja=0,gja=0,hja=0,ija=0,jja=0,kja=0,lja=0,mja=0,nja=0,oja=0,pja=0,qja=0,rja=0,sja=0,tja=0,uja=0,vja=0,wja=0,xja=0,yja=0,zja=0,Aja=0,Bja=0,Cja=0,Dja=0,Eja=0,Fja=0,Gja=0,Hja=0,Ija=0,Jja=0,Kja=0,Lja=0,Mja=0,Nja=0,Oja=0,Pja=0,Qja=0,Rja=0,Sja=0,Tja=0,Uja=0,Vja=0,Wja=0,Xja=0,Yja=0,Zja=0,_ja=0,$ja=0,aka=0,bka=0,cka=0,dka=0,eka=0,fka=0,gka=0,hka=0,ika=0,jka=0,kka=0,lka=0,mka=0,nka=0,oka=0,pka=0,qka=0,rka=0,ska=0,tka=0,uka=0,vka=0,wka=0,xka=0,yka=0,zka=0,Aka=0,Bka=0,Cka=0,Dka=0,Eka=0,Fka=0,Gka=0,Hka=0,Ika=0,Jka=0,Kka=0,Lka=0,Mka=0,Nka=0,Oka=0,Pka=0,Qka=0,Rka=0,Ska=0,Tka=0,Uka=0,Vka=0,Wka=0,Xka=0,Yka=0,Zka=0,_ka=0,$ka=0,ala=0,bla=0,cla=0,dla=0,ela=0,fla=0,gla=0,hla=0,ila=0,jla=0,kla=0,lla=0,mla=0,nla=0,ola=0,pla=0,qla=0,rla=0,sla=0,tla=0,ula=0,vla=0,wla=0,xla=0,yla=0,zla=0,Ala=0,Bla=0,Cla=0,Dla=0,Ela=0,Fla=0,Gla=0,Hla=0,Ila=0,Jla=0,Kla=0,Lla=0,Mla=0,Nla=0,Ola=0,Pla=0,Qla=0,Rla=0,Sla=0,Tla=0,Ula=0,Vla=0,Wla=0,Xla=0,Yla=0,Zla=0,_la=0,$la=0,ama=0,bma=0,cma=0,dma=0,ema=0,fma=0,gma=0,hma=0,ima=0,jma=0,kma=0,lma=0,mma=0,nma=0,oma=0,pma=0,qma=0,rma=0,sma=0,tma=0,uma=0,vma=0,wma=0,xma=0,yma=0,zma=0,Ama=0,Bma=0,Cma=0,Dma=0,Ema=0,Fma=0,Gma=0,Hma=0,Ima=0,Jma=0,Kma=0,Lma=0,Mma=0,Nma=0,Oma=0,Pma=0,Qma=0,Rma=0,Sma=0,Tma=0,Uma=0,Vma=0,Wma=0,Xma=0,Yma=0,Zma=0,_ma=0,$ma=0,ana=0,bna=0,cna=0,dna=0,ena=0,fna=0,gna=0,hna=0,ina=0,jna=0,kna=0,lna=0,mna=0,nna=0,ona=0,pna=0,qna=0,rna=0,sna=0,tna=0,una=0,vna=0,wna=0,xna=0,yna=0,zna=0,Ana=0,Bna=0,Cna=0,Dna=0,Ena=0,Fna=0,Gna=0,Hna=0,Ina=0,Jna=0,Kna=0,Lna=0,Mna=0,Nna=0,Ona=0,Pna=0,Qna=0,Rna=0,Sna=0,Tna=0,Una=0,Vna=0,Wna=0,Xna=0,Yna=0,Zna=0,_na=0,$na=0,aoa=0,boa=0,coa=0,doa=0,eoa=0,foa=0,goa=0,hoa=0,ioa=0,joa=0,koa=0,loa=0,moa=0,noa=0,ooa=0,poa=0,qoa=0,roa=0,soa=0,toa=0,uoa=0,voa=0,woa=0,xoa=0,yoa=0,zoa=0,Aoa=0,Boa=0,Coa=0,Doa=0,Eoa=0,Foa=0,Goa=0,Hoa=0,Ioa=0,Joa=0,Koa=0,Loa=0,Moa=0,Noa=0,Ooa=0,Poa=0,Qoa=0,Roa=0,Soa=0,Toa=0,Uoa=0,Voa=0,Woa=0,Xoa=0,Yoa=0,Zoa=0,_oa=0,$oa=0,apa=0,bpa=0,cpa=0,dpa=0,epa=0,fpa=0,gpa=0,hpa=0,ipa=0,jpa=0,kpa=0,lpa=0,mpa=0,npa=0,opa=0,ppa=0,qpa=0,rpa=0,spa=0,tpa=0,upa=0,vpa=0,wpa=0,xpa=0,ypa=0,zpa=0,Apa=0,Bpa=0,Cpa=0,Dpa=0,Epa=0,Fpa=0,Gpa=0,Hpa=0,Ipa=0,Jpa=0,Kpa=0,Lpa=0,Mpa=0,Npa=0,Opa=0,Ppa=0,Qpa=0,Rpa=0,Spa=0,Tpa=0,Upa=0,Vpa=0,Wpa=0,Xpa=0,Ypa=0,Zpa=0,_pa=0,$pa=0,aqa=0,bqa=0,cqa=0,dqa=0,eqa=0,fqa=0,gqa=0,hqa=0,iqa=0,jqa=0,kqa=0,lqa=0,mqa=0,nqa=0,oqa=0,pqa=0,qqa=0,rqa=0,sqa=0,tqa=0,uqa=0,vqa=0,wqa=0,xqa=0,yqa=0,zqa=0,Aqa=0,Bqa=0,Cqa=0,Dqa=0,Eqa=0,Fqa=0,Gqa=0,Hqa=0,Iqa=0,Jqa=0,Kqa=0,Lqa=0,Mqa=0,Nqa=0,Oqa=0,Pqa=0,Qqa=0,Rqa=0,Sqa=0,Tqa=0,Uqa=0,Vqa=0,Wqa=0,Xqa=0,Yqa=0,Zqa=0,_qa=0,$qa=0,ara=0,bra=0,cra=0,dra=0,era=0,fra=0,gra=0,hra=0,ira=0,jra=0,kra=0,lra=0,mra=0,nra=0,ora=0,pra=0,qra=0,rra=0,sra=0,tra=0,ura=0,vra=0,wra=0,xra=0,yra=0,zra=0,Ara=0,Bra=0,Cra=0,Dra=0,Era=0,Fra=0,Gra=0,Hra=0,Ira=0,Jra=0,Kra=0,Lra=0,Mra=0,Nra=0,Ora=0,Pra=0,Qra=0,Rra=0,Sra=0,Tra=0,Ura=0,Vra=0,Wra=0,Xra=0,Yra=0,Zra=0,_ra=0,$ra=0,asa=0,bsa=0,csa=0,dsa=0,esa=0,fsa=0,gsa=0,hsa=0,isa=0,jsa=0,ksa=0,lsa=0,msa=0,nsa=0,osa=0,psa=0,qsa=0,rsa=0,ssa=0,tsa=0,usa=0,vsa=0,wsa=0,xsa=0,ysa=0,zsa=0,Asa=0,Bsa=0,Csa=0,Dsa=0,Esa=0,Fsa=0,Gsa=0,Hsa=0,Isa=0,Jsa=0,Ksa=0,Lsa=0,Msa=0,Nsa=0,Osa=0,Psa=0,Qsa=0,Rsa=0,Ssa=0,Tsa=0,Usa=0,Vsa=0,Wsa=0,Xsa=0,Ysa=0,Zsa=0,_sa=0,$sa=0,ata=0,bta=0,cta=0,dta=0,eta=0,fta=0,gta=0,hta=0,ita=0,jta=0,kta=0,lta=0,mta=0,nta=0,ota=0,pta=0,qta=0,rta=0,sta=0,tta=0,uta=0,vta=0,wta=0,xta=0,yta=0,zta=0,Ata=0,Bta=0,Cta=0,Dta=0,Eta=0,Fta=0,Gta=0,Hta=0,Ita=0,Jta=0,Kta=0,Lta=0,Mta=0,Nta=0,Ota=0,Pta=0,Qta=0,Rta=0,Sta=0,Tta=0,Uta=0,Vta=0,Wta=0,Xta=0,Yta=0,Zta=0,_ta=0,$ta=0,aua=0,bua=0,cua=0,dua=0,eua=0,fua=0,gua=0,hua=0,iua=0,jua=0,kua=0,lua=0,mua=0,nua=0,oua=0,pua=0,qua=0,rua=0,sua=0,tua=0,uua=0,vua=0,wua=0,xua=0,yua=0,zua=0,Aua=0,Bua=0,Cua=0,Dua=0,Eua=0,Fua=0,Gua=0,Hua=0,Iua=0,Jua=0,Kua=0,Lua=0,Mua=0,Nua=0,Oua=0,Pua=0,Qua=0,Rua=0,Sua=0,Tua=0,Uua=0,Vua=0,Wua=0,Xua=0,Yua=0,Zua=0,_ua=0,$ua=0,ava=0,bva=0,cva=0,dva=0,eva=0,fva=0,gva=0,hva=0,iva=0,jva=0,kva=0,lva=0,mva=0,nva=0,ova=0,pva=0,qva=0,rva=0,sva=0,tva=0,uva=0,vva=0,wva=0,xva=0,yva=0,zva=0,Ava=0,Bva=0,Cva=0,Dva=0,Eva=0,Fva=0,Gva=0,Hva=0,Iva=0,Jva=0,Kva=0,Lva=0,Mva=0,Nva=0,Ova=0,Pva=0,Qva=0,Rva=0,Sva=0,Tva=0,Uva=0,Vva=0,Wva=0,Xva=0,Yva=0,Zva=0,_va=0,$va=0,awa=0,bwa=0,cwa=0,dwa=0,ewa=0,fwa=0,gwa=0,hwa=0,iwa=0,jwa=0,kwa=0,lwa=0,mwa=0,nwa=0,owa=0,pwa=0,qwa=0,rwa=0,swa=0,twa=0,uwa=0,vwa=0,wwa=0,xwa=0,ywa=0,zwa=0,Awa=0,Bwa=0,Cwa=0,Dwa=0,Ewa=0,Fwa=0,Gwa=0,Hwa=0,Iwa=0,Jwa=0,Kwa=0,Lwa=0,Mwa=0,Nwa=0,Owa=0,Pwa=0,Qwa=0,Rwa=0,Swa=0,Twa=0,Uwa=0,Vwa=0,Wwa=0,Xwa=0,Ywa=0,Zwa=0,_wa=0,$wa=0,axa=0,bxa=0,cxa=0,dxa=0,exa=0,fxa=0,gxa=0,hxa=0,ixa=0,jxa=0,kxa=0,lxa=0,mxa=0,nxa=0,oxa=0,pxa=0,qxa=0,rxa=0,sxa=0,txa=0,uxa=0,vxa=0,wxa=0,xxa=0,yxa=0,zxa=0,Axa=0,Bxa=0,Cxa=0,Dxa=0,Exa=0,Fxa=0,Gxa=0,Hxa=0,Ixa=0,Jxa=0,Kxa=0,Lxa=0,Mxa=0,Nxa=0,Oxa=0,Pxa=0,Qxa=0,Rxa=0,Sxa=0,Txa=0,Uxa=0,Vxa=0,Wxa=0,Xxa=0,Yxa=0,Zxa=0,_xa=0,$xa=0,aya=0,bya=0,cya=0,dya=0,eya=0,fya=0,gya=0,hya=0,iya=0,jya=0,kya=0,lya=0,mya=0,nya=0,oya=0,pya=0,qya=0,rya=0,sya=0,tya=0,uya=0,vya=0,wya=0,xya=0,yya=0,zya=0,Aya=0,Bya=0,Cya=0,Dya=0,Eya=0,Fya=0,Gya=0,Hya=0,Iya=0,Jya=0,Kya=0,Lya=0,Mya=0,Nya=0,Oya=0,Pya=0,Qya=0,Rya=0,Sya=0,Tya=0,Uya=0,Vya=0,Wya=0,Xya=0,Yya=0,Zya=0,_ya=0,$ya=0,aza=0,bza=0,cza=0,dza=0,eza=0,fza=0,gza=0,hza=0,iza=0,jza=0,kza=0,lza=0,mza=0,nza=0,oza=0,pza=0,qza=0,rza=0,sza=0,tza=0,uza=0,vza=0,wza=0,xza=0,yza=0,zza=0,Aza=0,Bza=0,Cza=0,Dza=0,Eza=0,Fza=0,Gza=0,Hza=0,Iza=0,Jza=0,Kza=0,Lza=0,Mza=0,Nza=0,Oza=0,Pza=0,Qza=0,Rza=0,Sza=0,Tza=0,Uza=0,Vza=0,Wza=0,Xza=0,Yza=0,Zza=0,_za=0,$za=0,aAa=0,bAa=0,cAa=0,dAa=0,eAa=0,fAa=0,gAa=0,hAa=0,iAa=0;b=r;r=r+28448|0;c=b+27496|0;d=b+28436|0;e=b+384|0;f=b+312|0;g=b+240|0;h=b+168|0;j=b+96|0;l=b+24|0;m=b+28424|0;n=b+23080|0;o=b+23008|0;p=b+28412|0;q=b+22864|0;s=b+22840|0;t=b+22696|0;u=b+22624|0;v=b+28400|0;w=b+22480|0;y=b+22456|0;z=b+22312|0;A=b+22240|0;B=b+28388|0;C=b+22096|0;D=b+22072|0;E=b+21928|0;F=b+21856|0;G=b+28376|0;H=b+21712|0;I=b+21688|0;J=b+21544|0;K=b+21472|0;L=b+28364|0;N=b+21328|0;O=b+21304|0;P=b+21160|0;Q=b+21088|0;R=b+28352|0;S=b+20944|0;T=b+20920|0;U=b+20776|0;V=b+20704|0;W=b+28340|0;X=b+20560|0;Y=b+20536|0;Z=b+20392|0;_=b+20320|0;$=b+28328|0;aa=b+20176|0;ba=b+20152|0;ca=b+20008|0;da=b+19936|0;ea=b+28316|0;fa=b+19864|0;ga=b+19840|0;ha=b+19768|0;ia=b+19696|0;ja=b+28304|0;ka=b+19552|0;la=b+19528|0;ma=b+19384|0;na=b+19312|0;oa=b+28292|0;pa=b+19168|0;qa=b+19144|0;ra=b+19e3|0;sa=b+18928|0;ta=b+28280|0;ua=b+18784|0;va=b+18760|0;wa=b+18616|0;ya=b+18544|0;za=b+28268|0;Aa=b+18400|0;Ca=b+18376|0;Da=b+18232|0;Ea=b+18160|0;Fa=b+28256|0;Ga=b+18016|0;Ha=b+17992|0;Ia=b+17848|0;Ja=b+17776|0;Ka=b+28244|0;La=b+17704|0;Ma=b+17680|0;Na=b+17608|0;Oa=b+17536|0;Pa=b+28232|0;Qa=b+17392|0;Ra=b+17368|0;Sa=b+17224|0;Ua=b+17152|0;Va=b+28220|0;Wa=b+17008|0;Xa=b+16984|0;Ya=b+16840|0;Za=b+16768|0;_a=b+28208|0;$a=b+16624|0;ab=b+16600|0;bb=b+16456|0;cb=b+16384|0;db=b+28196|0;eb=b+16240|0;gb=b+16216|0;hb=b+16072|0;ib=b+16e3|0;jb=b+28184|0;kb=b+15784|0;lb=b+15760|0;mb=b+15544|0;nb=b+15472|0;ob=b+28172|0;pb=b+15256|0;qb=b+15232|0;rb=b+15016|0;sb=b+14944|0;tb=b+28160|0;ub=b+14728|0;vb=b+14704|0;wb=b+14560|0;xb=b+14488|0;yb=b+28148|0;zb=b+14344|0;Ab=b+14320|0;Bb=b+14176|0;Cb=b+14104|0;Db=b+28136|0;Eb=b+13960|0;Fb=b+13936|0;Gb=b+13864|0;Hb=b+13792|0;Ib=b+28124|0;Jb=b+13648|0;Kb=b+13624|0;Lb=b+13552|0;Mb=b+13480|0;Nb=b+28112|0;Ob=b+13336|0;Pb=b+13312|0;Qb=b+13240|0;Rb=b+13168|0;Sb=b+28100|0;Tb=b+13024|0;Ub=b+13e3|0;Vb=b+12928|0;Wb=b+12856|0;Xb=b+28088|0;Yb=b+12712|0;Zb=b+12688|0;_b=b+12616|0;$b=b+12544|0;ac=b+28076|0;bc=b+12400|0;cc=b+12376|0;dc=b+12304|0;ec=b+12232|0;fc=b+28064|0;gc=b+12088|0;hc=b+12048|0;ic=b+12024|0;jc=b+11952|0;kc=b+11880|0;lc=b+28052|0;mc=b+11736|0;nc=b+11712|0;oc=b+11640|0;pc=b+28040|0;qc=b+11496|0;rc=b+11472|0;sc=b+11400|0;tc=b+28028|0;uc=b+11256|0;vc=b+11232|0;wc=b+11160|0;xc=b+28016|0;yc=b+11016|0;zc=b+10992|0;Ac=b+10920|0;Bc=b+28004|0;Cc=b+10776|0;Dc=b+10752|0;Ec=b+10680|0;Fc=b+27992|0;Gc=b+10536|0;Ic=b+10496|0;Jc=b+10472|0;Kc=b+10400|0;Lc=b+27980|0;Mc=b+10256|0;Nc=b+10232|0;Oc=b+10160|0;Pc=b+10088|0;Qc=b+27968|0;Rc=b+9944|0;Tc=b+9920|0;Uc=b+9848|0;Vc=b+9776|0;Wc=b+27956|0;Xc=b+9632|0;Yc=b+9608|0;Zc=b+9536|0;_c=b+27944|0;$c=b+9392|0;ad=b+9368|0;bd=b+9296|0;cd=b+27932|0;dd=b+9152|0;ed=b+9128|0;fd=b+9056|0;gd=b+27920|0;hd=b+8912|0;id=b+8888|0;jd=b+8816|0;kd=b+27908|0;ld=b+8672|0;md=b+8648|0;nd=b+8576|0;od=b+27896|0;pd=b+8432|0;qd=b+8408|0;rd=b+8336|0;sd=b+27884|0;td=b+8192|0;ud=b+8168|0;vd=b+8096|0;wd=b+27872|0;xd=b+8024|0;yd=b+27860|0;zd=b+7952|0;Ad=b+7928|0;Bd=b+7856|0;Cd=b+27848|0;Dd=b+7760|0;Ed=b+7688|0;Fd=b+27836|0;Gd=b+7616|0;Hd=b+27824|0;Id=b+7544|0;Jd=b+27812|0;Kd=b+7400|0;Ld=b+7376|0;Md=b+7224|0;Nd=b+7128|0;Od=b+7056|0;Pd=b+27800|0;Qd=b+6984|0;Rd=b+27788|0;Sd=b+6912|0;Td=b+27776|0;Ud=b+6840|0;Vd=b+6816|0;Wd=b+6744|0;Xd=b+27764|0;Yd=b+6584|0;Zd=b;_d=b+27752|0;$d=b+6200|0;ae=b+6128|0;be=b+27740|0;ce=b+5984|0;de=b+27728|0;ee=b+5840|0;fe=b+5816|0;ge=b+5568|0;he=b+5496|0;ie=b+27716|0;je=b+5352|0;ke=b+27704|0;le=b+5208|0;me=b+5184|0;ne=b+4960|0;oe=b+4888|0;pe=b+27692|0;qe=b+4744|0;re=b+27680|0;se=b+4600|0;te=b+4576|0;ue=b+4328|0;ve=b+4256|0;we=b+27668|0;xe=b+4112|0;ye=b+27656|0;ze=b+3968|0;Ae=b+3944|0;Be=b+3720|0;Ce=b+27644|0;De=b+3240|0;Ee=b+3168|0;Fe=b+27632|0;Ge=b+3024|0;He=b+3e3|0;Ie=b+2856|0;Je=b+2784|0;Ke=b+27620|0;Le=b+2640|0;Me=b+27608|0;Ne=b+2496|0;Oe=b+2472|0;Pe=b+2256|0;Qe=b+2184|0;Re=b+27596|0;Se=b+2040|0;Te=b+27584|0;Ue=b+1896|0;Ve=b+1872|0;We=b+1656|0;Xe=b+1584|0;Ye=b+27572|0;Ze=b+1440|0;_e=b+27560|0;$e=b+1296|0;af=b+1272|0;bf=b+1056|0;cf=b+984|0;df=b+27548|0;ef=b+840|0;ff=b+27536|0;gf=b+696|0;hf=b+672|0;jf=b+456|0;k[a+4>>2]=0;k[a+8>>2]=0;kf=a+4|0;k[a>>2]=kf;lf=a+12|0;k[lf>>2]=0;mf=a+16|0;k[mf>>2]=0;k[a+20>>2]=0;k[e>>2]=2;i[e+4>>0]=0;nf=e+8|0;k[nf>>2]=0;k[e+40>>2]=1;of=e+48|0;k[of>>2]=0;k[of+4>>2]=0;k[of+8>>2]=0;k[of+12>>2]=0;k[f>>2]=2;i[f+4>>0]=0;pf=f+8|0;k[pf>>2]=0;k[f+40>>2]=1;qf=f+48|0;k[qf>>2]=0;k[qf+4>>2]=0;k[qf+8>>2]=0;k[qf+12>>2]=0;k[g>>2]=2;i[g+4>>0]=0;rf=g+8|0;k[rf>>2]=0;k[g+40>>2]=1;sf=g+48|0;k[sf>>2]=0;k[sf+4>>2]=0;k[sf+8>>2]=0;k[sf+12>>2]=0;k[h>>2]=0;i[h+4>>0]=0;tf=h+8|0;k[tf>>2]=0;k[h+40>>2]=1;uf=h+48|0;k[uf>>2]=0;k[uf+4>>2]=0;k[uf+8>>2]=0;k[uf+12>>2]=0;k[j>>2]=0;i[j+4>>0]=0;vf=j+8|0;k[vf>>2]=0;k[j+40>>2]=1;wf=j+48|0;k[wf>>2]=0;k[wf+4>>2]=0;k[wf+8>>2]=0;k[wf+12>>2]=0;k[l>>2]=0;i[l+4>>0]=0;k[l+8>>2]=0;k[l+40>>2]=1;xf=l+48|0;k[xf>>2]=0;k[xf+4>>2]=0;k[xf+8>>2]=0;k[xf+12>>2]=0;yf=e+60|0;k[yf>>2]=1;k[e+64>>2]=a;zf=f+60|0;k[zf>>2]=2;k[f+64>>2]=a;Af=g+60|0;k[Af>>2]=3;k[g+64>>2]=a;Bf=h+60|0;k[Bf>>2]=4;k[h+64>>2]=a;Cf=j+60|0;k[Cf>>2]=5;k[j+64>>2]=a;k[l+60>>2]=6;k[l+64>>2]=a;k[q>>2]=k[e>>2];i[q+4>>0]=i[e+4>>0]|0;Df=q+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Gf=e+48|0;x=0;xa(712,q+48|0,Gf|0);Hf=x;x=0;a:do if(!(Hf&1)){If=yf;Jf=k[If+4>>2]|0;Kf=q+60|0;k[Kf>>2]=k[If>>2];k[Kf+4>>2]=Jf;Jf=q+72|0;k[Jf>>2]=k[f>>2];i[Jf+4>>0]=i[f+4>>0]|0;Df=q+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Kf=f+48|0;x=0;xa(712,q+120|0,Kf|0);If=x;x=0;if(!(If&1)){If=zf;Lf=k[If+4>>2]|0;Mf=q+132|0;k[Mf>>2]=k[If>>2];k[Mf+4>>2]=Lf;k[p>>2]=0;Lf=p+4|0;k[Lf>>2]=0;k[p+8>>2]=0;x=0;Mf=Ba(563,144)|0;If=x;x=0;do if(!(If&1)){k[Lf>>2]=Mf;k[p>>2]=Mf;k[p+8>>2]=Mf+144;k[Mf>>2]=k[q>>2];i[Mf+4>>0]=i[q+4>>0]|0;Df=Mf+8|0;Ef=q+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Mf+48|0,q+48|0);Nf=x;x=0;if(!(Nf&1)){Nf=q+60|0;Of=k[Nf+4>>2]|0;Pf=Mf+60|0;k[Pf>>2]=k[Nf>>2];k[Pf+4>>2]=Of;Of=Mf+72|0;k[Lf>>2]=Of;Pf=q+72|0;k[Of>>2]=k[Pf>>2];i[Of+4>>0]=i[Pf+4>>0]|0;Df=Mf+80|0;Ef=q+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Mf+120|0,q+120|0);Pf=x;x=0;if(!(Pf&1)){Pf=q+132|0;Of=k[Pf+4>>2]|0;Nf=Mf+132|0;k[Nf>>2]=k[Pf>>2];k[Nf+4>>2]=Of;k[Lf>>2]=(k[Lf>>2]|0)+72;k[o>>2]=1;i[o+4>>0]=1;Of=o+8|0;k[Of>>2]=1;k[o+40>>2]=1;Nf=o+48|0;x=0;xa(712,Nf|0,p|0);Pf=x;x=0;if(!(Pf&1)){Pf=o+60|0;k[Pf>>2]=0;k[o+64>>2]=0;k[t>>2]=k[e>>2];i[t+4>>0]=i[e+4>>0]|0;Qf=t+8|0;Df=Qf;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Rf=t+48|0;x=0;xa(712,Rf|0,Gf|0);Tf=x;x=0;do if(!(Tf&1)){Uf=t+60|0;Vf=yf;Wf=k[Vf+4>>2]|0;Xf=Uf;k[Xf>>2]=k[Vf>>2];k[Xf+4>>2]=Wf;Wf=t+72|0;k[Wf>>2]=k[f>>2];i[Wf+4>>0]=i[f+4>>0]|0;Xf=t+80|0;Df=Xf;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Vf=t+120|0;x=0;xa(712,Vf|0,Kf|0);Yf=x;x=0;if(Yf&1){Yf=Hc()|0;Zf=M;_f=t+48|0;$f=k[_f>>2]|0;if(!$f){ag=n;bg=1;cg=Yf;dg=Zf;break}eg=t+52|0;fg=k[eg>>2]|0;if((fg|0)==($f|0))gg=$f;else{hg=t+56|0;ig=fg;do{fg=ig+-72|0;k[eg>>2]=fg;i[c>>0]=i[d>>0]|0;uF(c,hg,fg);ig=k[eg>>2]|0}while((ig|0)!=($f|0));gg=k[_f>>2]|0}OBa(gg);ag=n;bg=1;cg=Yf;dg=Zf;break}$f=zf;ig=k[$f>>2]|0;eg=k[$f+4>>2]|0;$f=t+132|0;k[$f>>2]=ig;k[$f+4>>2]=eg;$f=s+16|0;k[$f>>2]=0;x=0;hg=Ba(563,152)|0;fg=x;x=0;do if(!(fg&1)){k[hg>>2]=27628;jg=hg+8|0;k[jg>>2]=k[t>>2];i[jg+4>>0]=i[t+4>>0]|0;Df=hg+16|0;Ef=Qf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[hg+56>>2]=k[Rf>>2];jg=t+52|0;k[hg+60>>2]=k[jg>>2];kg=t+56|0;k[hg+64>>2]=k[kg>>2];k[kg>>2]=0;k[jg>>2]=0;k[Rf>>2]=0;kg=Uf;lg=k[kg+4>>2]|0;mg=hg+68|0;k[mg>>2]=k[kg>>2];k[mg+4>>2]=lg;lg=hg+80|0;k[lg>>2]=k[Wf>>2];i[lg+4>>0]=i[Wf+4>>0]|0;Df=hg+88|0;Ef=Xf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[hg+128>>2]=k[Vf>>2];lg=t+124|0;k[hg+132>>2]=k[lg>>2];mg=t+128|0;k[hg+136>>2]=k[mg>>2];k[mg>>2]=0;k[lg>>2]=0;k[Vf>>2]=0;mg=hg+140|0;k[mg>>2]=ig;k[mg+4>>2]=eg;k[$f>>2]=hg;k[n>>2]=k[o>>2];i[n+4>>0]=i[o+4>>0]|0;Df=n+8|0;Ef=Of;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+48|0,Nf|0);mg=x;x=0;b:do if(!(mg&1)){kg=Pf;ng=k[kg+4>>2]|0;og=n+60|0;k[og>>2]=k[kg>>2];k[og+4>>2]=ng;ng=n+72|0;og=k[$f>>2]|0;c:do if(!og)k[n+88>>2]=0;else{do if((og|0)==(s|0)){k[n+88>>2]=ng;x=0;xa(k[(k[og>>2]|0)+12>>2]|0,og|0,ng|0);kg=x;x=0;if(!(kg&1))break c}else{x=0;kg=Ba(k[(k[og>>2]|0)+8>>2]|0,og|0)|0;pg=x;x=0;if(pg&1)break;k[n+88>>2]=kg;break c}while(0);kg=Hc()|0;pg=M;qg=n+48|0;rg=k[qg>>2]|0;if(!rg){sg=pg;tg=kg;ug=3185;break b}vg=n+52|0;wg=k[vg>>2]|0;if((wg|0)==(rg|0))xg=rg;else{yg=n+56|0;zg=wg;do{wg=zg+-72|0;k[vg>>2]=wg;i[c>>0]=i[d>>0]|0;uF(c,yg,wg);zg=k[vg>>2]|0}while((zg|0)!=(rg|0));xg=k[qg>>2]|0}OBa(xg);sg=pg;tg=kg;ug=3185;break b}while(0);og=n+96|0;k[w>>2]=k[e>>2];i[w+4>>0]=i[e+4>>0]|0;Df=w+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,w+48|0,Gf|0);ng=x;x=0;do if(ng&1)Ag=w;else{rg=yf;zg=k[rg+4>>2]|0;vg=w+60|0;k[vg>>2]=k[rg>>2];k[vg+4>>2]=zg;zg=w+72|0;k[zg>>2]=k[f>>2];i[zg+4>>0]=i[f+4>>0]|0;Df=w+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,w+120|0,Kf|0);kg=x;x=0;if(kg&1){Ag=zg;break}kg=zf;pg=k[kg+4>>2]|0;qg=w+132|0;k[qg>>2]=k[kg>>2];k[qg+4>>2]=pg;k[v>>2]=0;pg=v+4|0;k[pg>>2]=0;k[v+8>>2]=0;x=0;qg=Ba(563,144)|0;kg=x;x=0;d:do if(kg&1){vg=Hc()|0;Bg=vg;Cg=M;ug=3195}else{k[pg>>2]=qg;k[v>>2]=qg;k[v+8>>2]=qg+144;k[qg>>2]=k[w>>2];i[qg+4>>0]=i[w+4>>0]|0;Df=qg+8|0;Ef=w+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,qg+48|0,w+48|0);vg=x;x=0;do if(!(vg&1)){rg=w+60|0;yg=k[rg+4>>2]|0;wg=qg+60|0;k[wg>>2]=k[rg>>2];k[wg+4>>2]=yg;yg=qg+72|0;k[pg>>2]=yg;wg=w+72|0;k[yg>>2]=k[wg>>2];i[yg+4>>0]=i[wg+4>>0]|0;Df=qg+80|0;Ef=w+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,qg+120|0,w+120|0);wg=x;x=0;if(wg&1)break;wg=w+132|0;yg=k[wg+4>>2]|0;rg=qg+132|0;k[rg>>2]=k[wg>>2];k[rg+4>>2]=yg;k[pg>>2]=(k[pg>>2]|0)+72;k[u>>2]=1;i[u+4>>0]=1;yg=u+8|0;k[yg>>2]=2;k[u+40>>2]=1;rg=u+48|0;x=0;xa(712,rg|0,v|0);wg=x;x=0;do if(wg&1){Dg=Hc()|0;Eg=og;Gg=1;Hg=Dg;Ig=M}else{Dg=u+60|0;k[Dg>>2]=0;k[u+64>>2]=0;k[z>>2]=k[e>>2];i[z+4>>0]=i[e+4>>0]|0;Jg=z+8|0;Df=Jg;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Kg=z+48|0;x=0;xa(712,Kg|0,Gf|0);Lg=x;x=0;do if(Lg&1){Mg=Hc()|0;Ng=og;Og=1;Pg=Mg;Qg=M}else{Mg=z+60|0;Rg=yf;Sg=k[Rg+4>>2]|0;Tg=Mg;k[Tg>>2]=k[Rg>>2];k[Tg+4>>2]=Sg;Sg=z+72|0;k[Sg>>2]=k[f>>2];i[Sg+4>>0]=i[f+4>>0]|0;Tg=z+80|0;Df=Tg;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Rg=z+120|0;x=0;xa(712,Rg|0,Kf|0);Ug=x;x=0;if(Ug&1){Ug=Hc()|0;Vg=M;Wg=z+48|0;Xg=k[Wg>>2]|0;if(!Xg){Ng=og;Og=1;Pg=Ug;Qg=Vg;break}Yg=z+52|0;Zg=k[Yg>>2]|0;if((Zg|0)==(Xg|0))_g=Xg;else{$g=z+56|0;ah=Zg;do{Zg=ah+-72|0;k[Yg>>2]=Zg;i[c>>0]=i[d>>0]|0;uF(c,$g,Zg);ah=k[Yg>>2]|0}while((ah|0)!=(Xg|0));_g=k[Wg>>2]|0}OBa(_g);Ng=og;Og=1;Pg=Ug;Qg=Vg;break}Xg=zf;ah=k[Xg>>2]|0;Yg=k[Xg+4>>2]|0;Xg=z+132|0;k[Xg>>2]=ah;k[Xg+4>>2]=Yg;Xg=y+16|0;k[Xg>>2]=0;x=0;$g=Ba(563,152)|0;Zg=x;x=0;do if(Zg&1){bh=Hc()|0;ch=og;dh=1;eh=bh;fh=M}else{k[$g>>2]=27672;bh=$g+8|0;k[bh>>2]=k[z>>2];i[bh+4>>0]=i[z+4>>0]|0;Df=$g+16|0;Ef=Jg;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[$g+56>>2]=k[Kg>>2];bh=z+52|0;k[$g+60>>2]=k[bh>>2];gh=z+56|0;k[$g+64>>2]=k[gh>>2];k[gh>>2]=0;k[bh>>2]=0;k[Kg>>2]=0;gh=Mg;hh=k[gh+4>>2]|0;ih=$g+68|0;k[ih>>2]=k[gh>>2];k[ih+4>>2]=hh;hh=$g+80|0;k[hh>>2]=k[Sg>>2];i[hh+4>>0]=i[Sg+4>>0]|0;Df=$g+88|0;Ef=Tg;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[$g+128>>2]=k[Rg>>2];hh=z+124|0;k[$g+132>>2]=k[hh>>2];ih=z+128|0;k[$g+136>>2]=k[ih>>2];k[ih>>2]=0;k[hh>>2]=0;k[Rg>>2]=0;ih=$g+140|0;k[ih>>2]=ah;k[ih+4>>2]=Yg;k[Xg>>2]=$g;k[og>>2]=k[u>>2];i[og+4>>0]=i[u+4>>0]|0;Df=n+104|0;Ef=yg;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+144|0,rg|0);ih=x;x=0;e:do if(ih&1){gh=Hc()|0;jh=M;kh=gh;ug=3206}else{gh=Dg;lh=k[gh+4>>2]|0;mh=n+156|0;k[mh>>2]=k[gh>>2];k[mh+4>>2]=lh;lh=n+168|0;mh=k[Xg>>2]|0;f:do if(!mh)k[n+184>>2]=0;else{do if((mh|0)==(y|0)){k[n+184>>2]=lh;x=0;xa(k[(k[mh>>2]|0)+12>>2]|0,mh|0,lh|0);gh=x;x=0;if(!(gh&1))break f}else{x=0;gh=Ba(k[(k[mh>>2]|0)+8>>2]|0,mh|0)|0;nh=x;x=0;if(nh&1)break;k[n+184>>2]=gh;break f}while(0);gh=Hc()|0;nh=M;oh=n+144|0;ph=k[oh>>2]|0;if(!ph){jh=nh;kh=gh;ug=3206;break e}qh=n+148|0;rh=k[qh>>2]|0;if((rh|0)==(ph|0))sh=ph;else{th=n+152|0;uh=rh;do{rh=uh+-72|0;k[qh>>2]=rh;i[c>>0]=i[d>>0]|0;uF(c,th,rh);uh=k[qh>>2]|0}while((uh|0)!=(ph|0));sh=k[oh>>2]|0}OBa(sh);jh=nh;kh=gh;ug=3206;break e}while(0);mh=n+192|0;k[C>>2]=k[e>>2];i[C+4>>0]=i[e+4>>0]|0;Df=C+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,C+48|0,Gf|0);lh=x;x=0;do if(lh&1)vh=C;else{ph=yf;uh=k[ph+4>>2]|0;qh=C+60|0;k[qh>>2]=k[ph>>2];k[qh+4>>2]=uh;uh=C+72|0;k[uh>>2]=k[f>>2];i[uh+4>>0]=i[f+4>>0]|0;Df=C+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,C+120|0,Kf|0);gh=x;x=0;if(gh&1){vh=uh;break}gh=zf;nh=k[gh+4>>2]|0;oh=C+132|0;k[oh>>2]=k[gh>>2];k[oh+4>>2]=nh;k[B>>2]=0;nh=B+4|0;k[nh>>2]=0;k[B+8>>2]=0;x=0;oh=Ba(563,144)|0;gh=x;x=0;g:do if(gh&1){qh=Hc()|0;wh=qh;xh=M;ug=3216}else{k[nh>>2]=oh;k[B>>2]=oh;k[B+8>>2]=oh+144;k[oh>>2]=k[C>>2];i[oh+4>>0]=i[C+4>>0]|0;Df=oh+8|0;Ef=C+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,oh+48|0,C+48|0);qh=x;x=0;do if(!(qh&1)){ph=C+60|0;th=k[ph+4>>2]|0;rh=oh+60|0;k[rh>>2]=k[ph>>2];k[rh+4>>2]=th;th=oh+72|0;k[nh>>2]=th;rh=C+72|0;k[th>>2]=k[rh>>2];i[th+4>>0]=i[rh+4>>0]|0;Df=oh+80|0;Ef=C+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,oh+120|0,C+120|0);rh=x;x=0;if(rh&1)break;rh=C+132|0;th=k[rh+4>>2]|0;ph=oh+132|0;k[ph>>2]=k[rh>>2];k[ph+4>>2]=th;k[nh>>2]=(k[nh>>2]|0)+72;k[A>>2]=1;i[A+4>>0]=1;th=A+8|0;k[th>>2]=3;k[A+40>>2]=1;ph=A+48|0;x=0;xa(712,ph|0,B|0);rh=x;x=0;do if(rh&1){yh=Hc()|0;zh=mh;Ah=1;Bh=yh;Ch=M}else{yh=A+60|0;k[yh>>2]=0;k[A+64>>2]=0;k[E>>2]=k[e>>2];i[E+4>>0]=i[e+4>>0]|0;Dh=E+8|0;Df=Dh;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Eh=E+48|0;x=0;xa(712,Eh|0,Gf|0);Fh=x;x=0;do if(Fh&1){Gh=Hc()|0;Hh=mh;Ih=1;Jh=Gh;Kh=M}else{Gh=E+60|0;Lh=yf;Mh=k[Lh+4>>2]|0;Nh=Gh;k[Nh>>2]=k[Lh>>2];k[Nh+4>>2]=Mh;Mh=E+72|0;k[Mh>>2]=k[f>>2];i[Mh+4>>0]=i[f+4>>0]|0;Nh=E+80|0;Df=Nh;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Lh=E+120|0;x=0;xa(712,Lh|0,Kf|0);Oh=x;x=0;if(Oh&1){Oh=Hc()|0;Ph=M;Qh=E+48|0;Rh=k[Qh>>2]|0;if(!Rh){Hh=mh;Ih=1;Jh=Oh;Kh=Ph;break}Sh=E+52|0;Th=k[Sh>>2]|0;if((Th|0)==(Rh|0))Uh=Rh;else{Vh=E+56|0;Wh=Th;do{Th=Wh+-72|0;k[Sh>>2]=Th;i[c>>0]=i[d>>0]|0;uF(c,Vh,Th);Wh=k[Sh>>2]|0}while((Wh|0)!=(Rh|0));Uh=k[Qh>>2]|0}OBa(Uh);Hh=mh;Ih=1;Jh=Oh;Kh=Ph;break}Rh=zf;Wh=k[Rh>>2]|0;Sh=k[Rh+4>>2]|0;Rh=E+132|0;k[Rh>>2]=Wh;k[Rh+4>>2]=Sh;Rh=D+16|0;k[Rh>>2]=0;x=0;Vh=Ba(563,152)|0;Th=x;x=0;do if(Th&1){Xh=Hc()|0;Yh=mh;Zh=1;_h=Xh;$h=M}else{k[Vh>>2]=27716;Xh=Vh+8|0;k[Xh>>2]=k[E>>2];i[Xh+4>>0]=i[E+4>>0]|0;Df=Vh+16|0;Ef=Dh;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Vh+56>>2]=k[Eh>>2];Xh=E+52|0;k[Vh+60>>2]=k[Xh>>2];ai=E+56|0;k[Vh+64>>2]=k[ai>>2];k[ai>>2]=0;k[Xh>>2]=0;k[Eh>>2]=0;ai=Gh;bi=k[ai+4>>2]|0;ci=Vh+68|0;k[ci>>2]=k[ai>>2];k[ci+4>>2]=bi;bi=Vh+80|0;k[bi>>2]=k[Mh>>2];i[bi+4>>0]=i[Mh+4>>0]|0;Df=Vh+88|0;Ef=Nh;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Vh+128>>2]=k[Lh>>2];bi=E+124|0;k[Vh+132>>2]=k[bi>>2];ci=E+128|0;k[Vh+136>>2]=k[ci>>2];k[ci>>2]=0;k[bi>>2]=0;k[Lh>>2]=0;ci=Vh+140|0;k[ci>>2]=Wh;k[ci+4>>2]=Sh;k[Rh>>2]=Vh;k[mh>>2]=k[A>>2];i[mh+4>>0]=i[A+4>>0]|0;Df=n+200|0;Ef=th;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+240|0,ph|0);ci=x;x=0;h:do if(ci&1){ai=Hc()|0;di=M;ei=ai;ug=3227}else{ai=yh;fi=k[ai+4>>2]|0;gi=n+252|0;k[gi>>2]=k[ai>>2];k[gi+4>>2]=fi;fi=n+264|0;gi=k[Rh>>2]|0;i:do if(!gi)k[n+280>>2]=0;else{do if((gi|0)==(D|0)){k[n+280>>2]=fi;x=0;xa(k[(k[gi>>2]|0)+12>>2]|0,gi|0,fi|0);ai=x;x=0;if(!(ai&1))break i}else{x=0;ai=Ba(k[(k[gi>>2]|0)+8>>2]|0,gi|0)|0;hi=x;x=0;if(hi&1)break;k[n+280>>2]=ai;break i}while(0);ai=Hc()|0;hi=M;ii=n+240|0;ji=k[ii>>2]|0;if(!ji){di=hi;ei=ai;ug=3227;break h}ki=n+244|0;li=k[ki>>2]|0;if((li|0)==(ji|0))mi=ji;else{ni=n+248|0;oi=li;do{li=oi+-72|0;k[ki>>2]=li;i[c>>0]=i[d>>0]|0;uF(c,ni,li);oi=k[ki>>2]|0}while((oi|0)!=(ji|0));mi=k[ii>>2]|0}OBa(mi);di=hi;ei=ai;ug=3227;break h}while(0);gi=n+288|0;k[H>>2]=k[e>>2];i[H+4>>0]=i[e+4>>0]|0;Df=H+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,H+48|0,Gf|0);fi=x;x=0;do if(fi&1)pi=H;else{ji=yf;oi=k[ji+4>>2]|0;ki=H+60|0;k[ki>>2]=k[ji>>2];k[ki+4>>2]=oi;oi=H+72|0;k[oi>>2]=k[f>>2];i[oi+4>>0]=i[f+4>>0]|0;Df=H+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,H+120|0,Kf|0);ai=x;x=0;if(ai&1){pi=oi;break}ai=zf;hi=k[ai+4>>2]|0;ii=H+132|0;k[ii>>2]=k[ai>>2];k[ii+4>>2]=hi;k[G>>2]=0;hi=G+4|0;k[hi>>2]=0;k[G+8>>2]=0;x=0;ii=Ba(563,144)|0;ai=x;x=0;j:do if(ai&1){ki=Hc()|0;qi=ki;ri=M;ug=3237}else{k[hi>>2]=ii;k[G>>2]=ii;k[G+8>>2]=ii+144;k[ii>>2]=k[H>>2];i[ii+4>>0]=i[H+4>>0]|0;Df=ii+8|0;Ef=H+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ii+48|0,H+48|0);ki=x;x=0;do if(!(ki&1)){ji=H+60|0;ni=k[ji+4>>2]|0;li=ii+60|0;k[li>>2]=k[ji>>2];k[li+4>>2]=ni;ni=ii+72|0;k[hi>>2]=ni;li=H+72|0;k[ni>>2]=k[li>>2];i[ni+4>>0]=i[li+4>>0]|0;Df=ii+80|0;Ef=H+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ii+120|0,H+120|0);li=x;x=0;if(li&1)break;li=H+132|0;ni=k[li+4>>2]|0;ji=ii+132|0;k[ji>>2]=k[li>>2];k[ji+4>>2]=ni;k[hi>>2]=(k[hi>>2]|0)+72;k[F>>2]=1;i[F+4>>0]=1;ni=F+8|0;k[ni>>2]=4;k[F+40>>2]=1;ji=F+48|0;x=0;xa(712,ji|0,G|0);li=x;x=0;do if(li&1){si=Hc()|0;ti=gi;ui=1;vi=si;wi=M}else{si=F+60|0;k[si>>2]=0;k[F+64>>2]=0;k[J>>2]=k[f>>2];i[J+4>>0]=i[f+4>>0]|0;xi=J+8|0;Df=xi;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));yi=J+48|0;x=0;xa(712,yi|0,Kf|0);zi=x;x=0;do if(zi&1){Ai=Hc()|0;Bi=gi;Ci=1;Di=Ai;Ei=M}else{Ai=J+60|0;Fi=zf;Gi=k[Fi+4>>2]|0;Hi=Ai;k[Hi>>2]=k[Fi>>2];k[Hi+4>>2]=Gi;Gi=J+72|0;k[Gi>>2]=k[e>>2];i[Gi+4>>0]=i[e+4>>0]|0;Hi=J+80|0;Df=Hi;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Fi=J+120|0;x=0;xa(712,Fi|0,Gf|0);Ii=x;x=0;if(Ii&1){Ii=Hc()|0;Ji=M;Ki=J+48|0;Li=k[Ki>>2]|0;if(!Li){Bi=gi;Ci=1;Di=Ii;Ei=Ji;break}Mi=J+52|0;Ni=k[Mi>>2]|0;if((Ni|0)==(Li|0))Oi=Li;else{Pi=J+56|0;Qi=Ni;do{Ni=Qi+-72|0;k[Mi>>2]=Ni;i[c>>0]=i[d>>0]|0;uF(c,Pi,Ni);Qi=k[Mi>>2]|0}while((Qi|0)!=(Li|0));Oi=k[Ki>>2]|0}OBa(Oi);Bi=gi;Ci=1;Di=Ii;Ei=Ji;break}Li=yf;Qi=k[Li>>2]|0;Mi=k[Li+4>>2]|0;Li=J+132|0;k[Li>>2]=Qi;k[Li+4>>2]=Mi;Li=I+16|0;k[Li>>2]=0;x=0;Pi=Ba(563,152)|0;Ni=x;x=0;do if(Ni&1){Ri=Hc()|0;Si=gi;Ti=1;Ui=Ri;Vi=M}else{k[Pi>>2]=27760;Ri=Pi+8|0;k[Ri>>2]=k[J>>2];i[Ri+4>>0]=i[J+4>>0]|0;Df=Pi+16|0;Ef=xi;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Pi+56>>2]=k[yi>>2];Ri=J+52|0;k[Pi+60>>2]=k[Ri>>2];Wi=J+56|0;k[Pi+64>>2]=k[Wi>>2];k[Wi>>2]=0;k[Ri>>2]=0;k[yi>>2]=0;Wi=Ai;Xi=k[Wi+4>>2]|0;Yi=Pi+68|0;k[Yi>>2]=k[Wi>>2];k[Yi+4>>2]=Xi;Xi=Pi+80|0;k[Xi>>2]=k[Gi>>2];i[Xi+4>>0]=i[Gi+4>>0]|0;Df=Pi+88|0;Ef=Hi;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Pi+128>>2]=k[Fi>>2];Xi=J+124|0;k[Pi+132>>2]=k[Xi>>2];Yi=J+128|0;k[Pi+136>>2]=k[Yi>>2];k[Yi>>2]=0;k[Xi>>2]=0;k[Fi>>2]=0;Yi=Pi+140|0;k[Yi>>2]=Qi;k[Yi+4>>2]=Mi;k[Li>>2]=Pi;k[gi>>2]=k[F>>2];i[gi+4>>0]=i[F+4>>0]|0;Df=n+296|0;Ef=ni;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+336|0,ji|0);Yi=x;x=0;k:do if(Yi&1){Wi=Hc()|0;Zi=M;_i=Wi;ug=3248}else{Wi=si;$i=k[Wi+4>>2]|0;aj=n+348|0;k[aj>>2]=k[Wi>>2];k[aj+4>>2]=$i;$i=n+360|0;aj=k[Li>>2]|0;l:do if(!aj)k[n+376>>2]=0;else{do if((aj|0)==(I|0)){k[n+376>>2]=$i;x=0;xa(k[(k[aj>>2]|0)+12>>2]|0,aj|0,$i|0);Wi=x;x=0;if(!(Wi&1))break l}else{x=0;Wi=Ba(k[(k[aj>>2]|0)+8>>2]|0,aj|0)|0;bj=x;x=0;if(bj&1)break;k[n+376>>2]=Wi;break l}while(0);Wi=Hc()|0;bj=M;cj=n+336|0;dj=k[cj>>2]|0;if(!dj){Zi=bj;_i=Wi;ug=3248;break k}ej=n+340|0;fj=k[ej>>2]|0;if((fj|0)==(dj|0))gj=dj;else{hj=n+344|0;ij=fj;do{fj=ij+-72|0;k[ej>>2]=fj;i[c>>0]=i[d>>0]|0;uF(c,hj,fj);ij=k[ej>>2]|0}while((ij|0)!=(dj|0));gj=k[cj>>2]|0}OBa(gj);Zi=bj;_i=Wi;ug=3248;break k}while(0);aj=n+384|0;k[N>>2]=k[e>>2];i[N+4>>0]=i[e+4>>0]|0;Df=N+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,N+48|0,Gf|0);$i=x;x=0;do if($i&1)jj=N;else{dj=yf;ij=k[dj+4>>2]|0;ej=N+60|0;k[ej>>2]=k[dj>>2];k[ej+4>>2]=ij;ij=N+72|0;k[ij>>2]=k[f>>2];i[ij+4>>0]=i[f+4>>0]|0;Df=N+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,N+120|0,Kf|0);Wi=x;x=0;if(Wi&1){jj=ij;break}Wi=zf;bj=k[Wi+4>>2]|0;cj=N+132|0;k[cj>>2]=k[Wi>>2];k[cj+4>>2]=bj;k[L>>2]=0;bj=L+4|0;k[bj>>2]=0;k[L+8>>2]=0;x=0;cj=Ba(563,144)|0;Wi=x;x=0;m:do if(Wi&1){ej=Hc()|0;kj=ej;lj=M;ug=3258}else{k[bj>>2]=cj;k[L>>2]=cj;k[L+8>>2]=cj+144;k[cj>>2]=k[N>>2];i[cj+4>>0]=i[N+4>>0]|0;Df=cj+8|0;Ef=N+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,cj+48|0,N+48|0);ej=x;x=0;do if(!(ej&1)){dj=N+60|0;hj=k[dj+4>>2]|0;fj=cj+60|0;k[fj>>2]=k[dj>>2];k[fj+4>>2]=hj;hj=cj+72|0;k[bj>>2]=hj;fj=N+72|0;k[hj>>2]=k[fj>>2];i[hj+4>>0]=i[fj+4>>0]|0;Df=cj+80|0;Ef=N+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,cj+120|0,N+120|0);fj=x;x=0;if(fj&1)break;fj=N+132|0;hj=k[fj+4>>2]|0;dj=cj+132|0;k[dj>>2]=k[fj>>2];k[dj+4>>2]=hj;k[bj>>2]=(k[bj>>2]|0)+72;k[K>>2]=1;i[K+4>>0]=1;hj=K+8|0;k[hj>>2]=5;k[K+40>>2]=1;dj=K+48|0;x=0;xa(712,dj|0,L|0);fj=x;x=0;do if(fj&1){mj=Hc()|0;nj=aj;oj=1;pj=mj;qj=M}else{mj=K+60|0;k[mj>>2]=0;k[K+64>>2]=0;k[P>>2]=k[f>>2];i[P+4>>0]=i[f+4>>0]|0;rj=P+8|0;Df=rj;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));sj=P+48|0;x=0;xa(712,sj|0,Kf|0);tj=x;x=0;do if(tj&1){uj=Hc()|0;vj=aj;wj=1;xj=uj;yj=M}else{uj=P+60|0;zj=zf;Aj=k[zj+4>>2]|0;Bj=uj;k[Bj>>2]=k[zj>>2];k[Bj+4>>2]=Aj;Aj=P+72|0;k[Aj>>2]=k[e>>2];i[Aj+4>>0]=i[e+4>>0]|0;Bj=P+80|0;Df=Bj;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));zj=P+120|0;x=0;xa(712,zj|0,Gf|0);Cj=x;x=0;if(Cj&1){Cj=Hc()|0;Dj=M;Ej=P+48|0;Fj=k[Ej>>2]|0;if(!Fj){vj=aj;wj=1;xj=Cj;yj=Dj;break}Gj=P+52|0;Hj=k[Gj>>2]|0;if((Hj|0)==(Fj|0))Ij=Fj;else{Jj=P+56|0;Kj=Hj;do{Hj=Kj+-72|0;k[Gj>>2]=Hj;i[c>>0]=i[d>>0]|0;uF(c,Jj,Hj);Kj=k[Gj>>2]|0}while((Kj|0)!=(Fj|0));Ij=k[Ej>>2]|0}OBa(Ij);vj=aj;wj=1;xj=Cj;yj=Dj;break}Fj=yf;Kj=k[Fj>>2]|0;Gj=k[Fj+4>>2]|0;Fj=P+132|0;k[Fj>>2]=Kj;k[Fj+4>>2]=Gj;Fj=O+16|0;k[Fj>>2]=0;x=0;Jj=Ba(563,152)|0;Hj=x;x=0;do if(Hj&1){Lj=Hc()|0;Mj=aj;Nj=1;Oj=Lj;Pj=M}else{k[Jj>>2]=27804;Lj=Jj+8|0;k[Lj>>2]=k[P>>2];i[Lj+4>>0]=i[P+4>>0]|0;Df=Jj+16|0;Ef=rj;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Jj+56>>2]=k[sj>>2];Lj=P+52|0;k[Jj+60>>2]=k[Lj>>2];Qj=P+56|0;k[Jj+64>>2]=k[Qj>>2];k[Qj>>2]=0;k[Lj>>2]=0;k[sj>>2]=0;Qj=uj;Rj=k[Qj+4>>2]|0;Sj=Jj+68|0;k[Sj>>2]=k[Qj>>2];k[Sj+4>>2]=Rj;Rj=Jj+80|0;k[Rj>>2]=k[Aj>>2];i[Rj+4>>0]=i[Aj+4>>0]|0;Df=Jj+88|0;Ef=Bj;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Jj+128>>2]=k[zj>>2];Rj=P+124|0;k[Jj+132>>2]=k[Rj>>2];Sj=P+128|0;k[Jj+136>>2]=k[Sj>>2];k[Sj>>2]=0;k[Rj>>2]=0;k[zj>>2]=0;Sj=Jj+140|0;k[Sj>>2]=Kj;k[Sj+4>>2]=Gj;k[Fj>>2]=Jj;k[aj>>2]=k[K>>2];i[aj+4>>0]=i[K+4>>0]|0;Df=n+392|0;Ef=hj;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+432|0,dj|0);Sj=x;x=0;n:do if(Sj&1){Qj=Hc()|0;Tj=M;Uj=Qj;ug=3269}else{Qj=mj;Vj=k[Qj+4>>2]|0;Wj=n+444|0;k[Wj>>2]=k[Qj>>2];k[Wj+4>>2]=Vj;Vj=n+456|0;Wj=k[Fj>>2]|0;o:do if(!Wj)k[n+472>>2]=0;else{do if((Wj|0)==(O|0)){k[n+472>>2]=Vj;x=0;xa(k[(k[Wj>>2]|0)+12>>2]|0,Wj|0,Vj|0);Qj=x;x=0;if(!(Qj&1))break o}else{x=0;Qj=Ba(k[(k[Wj>>2]|0)+8>>2]|0,Wj|0)|0;Xj=x;x=0;if(Xj&1)break;k[n+472>>2]=Qj;break o}while(0);Qj=Hc()|0;Xj=M;Yj=n+432|0;Zj=k[Yj>>2]|0;if(!Zj){Tj=Xj;Uj=Qj;ug=3269;break n}_j=n+436|0;$j=k[_j>>2]|0;if(($j|0)==(Zj|0))ak=Zj;else{bk=n+440|0;ck=$j;do{$j=ck+-72|0;k[_j>>2]=$j;i[c>>0]=i[d>>0]|0;uF(c,bk,$j);ck=k[_j>>2]|0}while((ck|0)!=(Zj|0));ak=k[Yj>>2]|0}OBa(ak);Tj=Xj;Uj=Qj;ug=3269;break n}while(0);Wj=n+480|0;k[S>>2]=k[e>>2];i[S+4>>0]=i[e+4>>0]|0;Df=S+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,S+48|0,Gf|0);Vj=x;x=0;do if(Vj&1)dk=S;else{Zj=yf;ck=k[Zj+4>>2]|0;_j=S+60|0;k[_j>>2]=k[Zj>>2];k[_j+4>>2]=ck;ck=S+72|0;k[ck>>2]=k[f>>2];i[ck+4>>0]=i[f+4>>0]|0;Df=S+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,S+120|0,Kf|0);Qj=x;x=0;if(Qj&1){dk=ck;break}Qj=zf;Xj=k[Qj+4>>2]|0;Yj=S+132|0;k[Yj>>2]=k[Qj>>2];k[Yj+4>>2]=Xj;k[R>>2]=0;Xj=R+4|0;k[Xj>>2]=0;k[R+8>>2]=0;x=0;Yj=Ba(563,144)|0;Qj=x;x=0;p:do if(Qj&1){_j=Hc()|0;ek=_j;fk=M;ug=3279}else{k[Xj>>2]=Yj;k[R>>2]=Yj;k[R+8>>2]=Yj+144;k[Yj>>2]=k[S>>2];i[Yj+4>>0]=i[S+4>>0]|0;Df=Yj+8|0;Ef=S+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Yj+48|0,S+48|0);_j=x;x=0;do if(!(_j&1)){Zj=S+60|0;bk=k[Zj+4>>2]|0;$j=Yj+60|0;k[$j>>2]=k[Zj>>2];k[$j+4>>2]=bk;bk=Yj+72|0;k[Xj>>2]=bk;$j=S+72|0;k[bk>>2]=k[$j>>2];i[bk+4>>0]=i[$j+4>>0]|0;Df=Yj+80|0;Ef=S+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Yj+120|0,S+120|0);$j=x;x=0;if($j&1)break;$j=S+132|0;bk=k[$j+4>>2]|0;Zj=Yj+132|0;k[Zj>>2]=k[$j>>2];k[Zj+4>>2]=bk;k[Xj>>2]=(k[Xj>>2]|0)+72;k[Q>>2]=1;i[Q+4>>0]=1;bk=Q+8|0;k[bk>>2]=6;k[Q+40>>2]=1;Zj=Q+48|0;x=0;xa(712,Zj|0,R|0);$j=x;x=0;do if($j&1){gk=Hc()|0;hk=Wj;ik=1;jk=gk;kk=M}else{gk=Q+60|0;k[gk>>2]=0;k[Q+64>>2]=0;k[U>>2]=k[f>>2];i[U+4>>0]=i[f+4>>0]|0;lk=U+8|0;Df=lk;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));mk=U+48|0;x=0;xa(712,mk|0,Kf|0);nk=x;x=0;do if(nk&1){ok=Hc()|0;pk=Wj;qk=1;rk=ok;sk=M}else{ok=U+60|0;tk=zf;uk=k[tk+4>>2]|0;vk=ok;k[vk>>2]=k[tk>>2];k[vk+4>>2]=uk;uk=U+72|0;k[uk>>2]=k[e>>2];i[uk+4>>0]=i[e+4>>0]|0;vk=U+80|0;Df=vk;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));tk=U+120|0;x=0;xa(712,tk|0,Gf|0);wk=x;x=0;if(wk&1){wk=Hc()|0;xk=M;yk=U+48|0;zk=k[yk>>2]|0;if(!zk){pk=Wj;qk=1;rk=wk;sk=xk;break}Ak=U+52|0;Bk=k[Ak>>2]|0;if((Bk|0)==(zk|0))Ck=zk;else{Dk=U+56|0;Ek=Bk;do{Bk=Ek+-72|0;k[Ak>>2]=Bk;i[c>>0]=i[d>>0]|0;uF(c,Dk,Bk);Ek=k[Ak>>2]|0}while((Ek|0)!=(zk|0));Ck=k[yk>>2]|0}OBa(Ck);pk=Wj;qk=1;rk=wk;sk=xk;break}zk=yf;Ek=k[zk>>2]|0;Ak=k[zk+4>>2]|0;zk=U+132|0;k[zk>>2]=Ek;k[zk+4>>2]=Ak;zk=T+16|0;k[zk>>2]=0;x=0;Dk=Ba(563,152)|0;Bk=x;x=0;do if(Bk&1){Fk=Hc()|0;Gk=Wj;Hk=1;Ik=Fk;Jk=M}else{k[Dk>>2]=27848;Fk=Dk+8|0;k[Fk>>2]=k[U>>2];i[Fk+4>>0]=i[U+4>>0]|0;Df=Dk+16|0;Ef=lk;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Dk+56>>2]=k[mk>>2];Fk=U+52|0;k[Dk+60>>2]=k[Fk>>2];Kk=U+56|0;k[Dk+64>>2]=k[Kk>>2];k[Kk>>2]=0;k[Fk>>2]=0;k[mk>>2]=0;Kk=ok;Lk=k[Kk+4>>2]|0;Mk=Dk+68|0;k[Mk>>2]=k[Kk>>2];k[Mk+4>>2]=Lk;Lk=Dk+80|0;k[Lk>>2]=k[uk>>2];i[Lk+4>>0]=i[uk+4>>0]|0;Df=Dk+88|0;Ef=vk;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Dk+128>>2]=k[tk>>2];Lk=U+124|0;k[Dk+132>>2]=k[Lk>>2];Mk=U+128|0;k[Dk+136>>2]=k[Mk>>2];k[Mk>>2]=0;k[Lk>>2]=0;k[tk>>2]=0;Mk=Dk+140|0;k[Mk>>2]=Ek;k[Mk+4>>2]=Ak;k[zk>>2]=Dk;k[Wj>>2]=k[Q>>2];i[Wj+4>>0]=i[Q+4>>0]|0;Df=n+488|0;Ef=bk;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+528|0,Zj|0);Mk=x;x=0;q:do if(Mk&1){Kk=Hc()|0;Nk=M;Ok=Kk;ug=3290}else{Kk=gk;Pk=k[Kk+4>>2]|0;Qk=n+540|0;k[Qk>>2]=k[Kk>>2];k[Qk+4>>2]=Pk;Pk=n+552|0;Qk=k[zk>>2]|0;r:do if(!Qk)k[n+568>>2]=0;else{do if((Qk|0)==(T|0)){k[n+568>>2]=Pk;x=0;xa(k[(k[Qk>>2]|0)+12>>2]|0,Qk|0,Pk|0);Kk=x;x=0;if(!(Kk&1))break r}else{x=0;Kk=Ba(k[(k[Qk>>2]|0)+8>>2]|0,Qk|0)|0;Rk=x;x=0;if(Rk&1)break;k[n+568>>2]=Kk;break r}while(0);Kk=Hc()|0;Rk=M;Sk=n+528|0;Tk=k[Sk>>2]|0;if(!Tk){Nk=Rk;Ok=Kk;ug=3290;break q}Uk=n+532|0;Vk=k[Uk>>2]|0;if((Vk|0)==(Tk|0))Wk=Tk;else{Xk=n+536|0;Yk=Vk;do{Vk=Yk+-72|0;k[Uk>>2]=Vk;i[c>>0]=i[d>>0]|0;uF(c,Xk,Vk);Yk=k[Uk>>2]|0}while((Yk|0)!=(Tk|0));Wk=k[Sk>>2]|0}OBa(Wk);Nk=Rk;Ok=Kk;ug=3290;break q}while(0);Qk=n+576|0;k[X>>2]=k[e>>2];i[X+4>>0]=i[e+4>>0]|0;Df=X+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,X+48|0,Gf|0);Pk=x;x=0;do if(Pk&1)Zk=X;else{Tk=yf;Yk=k[Tk+4>>2]|0;Uk=X+60|0;k[Uk>>2]=k[Tk>>2];k[Uk+4>>2]=Yk;Yk=X+72|0;k[Yk>>2]=k[f>>2];i[Yk+4>>0]=i[f+4>>0]|0;Df=X+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,X+120|0,Kf|0);Kk=x;x=0;if(Kk&1){Zk=Yk;break}Kk=zf;Rk=k[Kk+4>>2]|0;Sk=X+132|0;k[Sk>>2]=k[Kk>>2];k[Sk+4>>2]=Rk;k[W>>2]=0;Rk=W+4|0;k[Rk>>2]=0;k[W+8>>2]=0;x=0;Sk=Ba(563,144)|0;Kk=x;x=0;s:do if(Kk&1){Uk=Hc()|0;_k=Uk;$k=M;ug=3300}else{k[Rk>>2]=Sk;k[W>>2]=Sk;k[W+8>>2]=Sk+144;k[Sk>>2]=k[X>>2];i[Sk+4>>0]=i[X+4>>0]|0;Df=Sk+8|0;Ef=X+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Sk+48|0,X+48|0);Uk=x;x=0;do if(!(Uk&1)){Tk=X+60|0;Xk=k[Tk+4>>2]|0;Vk=Sk+60|0;k[Vk>>2]=k[Tk>>2];k[Vk+4>>2]=Xk;Xk=Sk+72|0;k[Rk>>2]=Xk;Vk=X+72|0;k[Xk>>2]=k[Vk>>2];i[Xk+4>>0]=i[Vk+4>>0]|0;Df=Sk+80|0;Ef=X+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Sk+120|0,X+120|0);Vk=x;x=0;if(Vk&1)break;Vk=X+132|0;Xk=k[Vk+4>>2]|0;Tk=Sk+132|0;k[Tk>>2]=k[Vk>>2];k[Tk+4>>2]=Xk;k[Rk>>2]=(k[Rk>>2]|0)+72;k[V>>2]=1;i[V+4>>0]=1;Xk=V+8|0;k[Xk>>2]=7;k[V+40>>2]=1;Tk=V+48|0;x=0;xa(712,Tk|0,W|0);Vk=x;x=0;do if(Vk&1){al=Hc()|0;bl=Qk;cl=1;dl=al;el=M}else{al=V+60|0;k[al>>2]=0;k[V+64>>2]=0;k[Z>>2]=k[f>>2];i[Z+4>>0]=i[f+4>>0]|0;fl=Z+8|0;Df=fl;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));gl=Z+48|0;x=0;xa(712,gl|0,Kf|0);hl=x;x=0;do if(hl&1){il=Hc()|0;jl=Qk;kl=1;ll=il;ml=M}else{il=Z+60|0;nl=zf;ol=k[nl+4>>2]|0;pl=il;k[pl>>2]=k[nl>>2];k[pl+4>>2]=ol;ol=Z+72|0;k[ol>>2]=k[e>>2];i[ol+4>>0]=i[e+4>>0]|0;pl=Z+80|0;Df=pl;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));nl=Z+120|0;x=0;xa(712,nl|0,Gf|0);ql=x;x=0;if(ql&1){ql=Hc()|0;rl=M;sl=Z+48|0;tl=k[sl>>2]|0;if(!tl){jl=Qk;kl=1;ll=ql;ml=rl;break}ul=Z+52|0;vl=k[ul>>2]|0;if((vl|0)==(tl|0))wl=tl;else{xl=Z+56|0;yl=vl;do{vl=yl+-72|0;k[ul>>2]=vl;i[c>>0]=i[d>>0]|0;uF(c,xl,vl);yl=k[ul>>2]|0}while((yl|0)!=(tl|0));wl=k[sl>>2]|0}OBa(wl);jl=Qk;kl=1;ll=ql;ml=rl;break}tl=yf;yl=k[tl>>2]|0;ul=k[tl+4>>2]|0;tl=Z+132|0;k[tl>>2]=yl;k[tl+4>>2]=ul;tl=Y+16|0;k[tl>>2]=0;x=0;xl=Ba(563,152)|0;vl=x;x=0;do if(vl&1){zl=Hc()|0;Al=Qk;Bl=1;Cl=zl;Dl=M}else{k[xl>>2]=27892;zl=xl+8|0;k[zl>>2]=k[Z>>2];i[zl+4>>0]=i[Z+4>>0]|0;Df=xl+16|0;Ef=fl;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[xl+56>>2]=k[gl>>2];zl=Z+52|0;k[xl+60>>2]=k[zl>>2];El=Z+56|0;k[xl+64>>2]=k[El>>2];k[El>>2]=0;k[zl>>2]=0;k[gl>>2]=0;El=il;Fl=k[El+4>>2]|0;Gl=xl+68|0;k[Gl>>2]=k[El>>2];k[Gl+4>>2]=Fl;Fl=xl+80|0;k[Fl>>2]=k[ol>>2];i[Fl+4>>0]=i[ol+4>>0]|0;Df=xl+88|0;Ef=pl;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[xl+128>>2]=k[nl>>2];Fl=Z+124|0;k[xl+132>>2]=k[Fl>>2];Gl=Z+128|0;k[xl+136>>2]=k[Gl>>2];k[Gl>>2]=0;k[Fl>>2]=0;k[nl>>2]=0;Gl=xl+140|0;k[Gl>>2]=yl;k[Gl+4>>2]=ul;k[tl>>2]=xl;k[Qk>>2]=k[V>>2];i[Qk+4>>0]=i[V+4>>0]|0;Df=n+584|0;Ef=Xk;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+624|0,Tk|0);Gl=x;x=0;t:do if(Gl&1){El=Hc()|0;Hl=M;Il=El;ug=3311}else{El=al;Jl=k[El+4>>2]|0;Kl=n+636|0;k[Kl>>2]=k[El>>2];k[Kl+4>>2]=Jl;Jl=n+648|0;Kl=k[tl>>2]|0;u:do if(!Kl)k[n+664>>2]=0;else{do if((Kl|0)==(Y|0)){k[n+664>>2]=Jl;x=0;xa(k[(k[Kl>>2]|0)+12>>2]|0,Kl|0,Jl|0);El=x;x=0;if(!(El&1))break u}else{x=0;El=Ba(k[(k[Kl>>2]|0)+8>>2]|0,Kl|0)|0;Ll=x;x=0;if(Ll&1)break;k[n+664>>2]=El;break u}while(0);El=Hc()|0;Ll=M;Ml=n+624|0;Nl=k[Ml>>2]|0;if(!Nl){Hl=Ll;Il=El;ug=3311;break t}Ol=n+628|0;Pl=k[Ol>>2]|0;if((Pl|0)==(Nl|0))Ql=Nl;else{Rl=n+632|0;Sl=Pl;do{Pl=Sl+-72|0;k[Ol>>2]=Pl;i[c>>0]=i[d>>0]|0;uF(c,Rl,Pl);Sl=k[Ol>>2]|0}while((Sl|0)!=(Nl|0));Ql=k[Ml>>2]|0}OBa(Ql);Hl=Ll;Il=El;ug=3311;break t}while(0);Kl=n+672|0;k[aa>>2]=k[e>>2];i[aa+4>>0]=i[e+4>>0]|0;Df=aa+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,aa+48|0,Gf|0);Jl=x;x=0;do if(Jl&1)Tl=aa;else{Nl=yf;Sl=k[Nl+4>>2]|0;Ol=aa+60|0;k[Ol>>2]=k[Nl>>2];k[Ol+4>>2]=Sl;Sl=aa+72|0;k[Sl>>2]=k[f>>2];i[Sl+4>>0]=i[f+4>>0]|0;Df=aa+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,aa+120|0,Kf|0);El=x;x=0;if(El&1){Tl=Sl;break}El=zf;Ll=k[El+4>>2]|0;Ml=aa+132|0;k[Ml>>2]=k[El>>2];k[Ml+4>>2]=Ll;k[$>>2]=0;Ll=$+4|0;k[Ll>>2]=0;k[$+8>>2]=0;x=0;Ml=Ba(563,144)|0;El=x;x=0;v:do if(El&1){Ol=Hc()|0;Ul=Ol;Vl=M;ug=3321}else{k[Ll>>2]=Ml;k[$>>2]=Ml;k[$+8>>2]=Ml+144;k[Ml>>2]=k[aa>>2];i[Ml+4>>0]=i[aa+4>>0]|0;Df=Ml+8|0;Ef=aa+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ml+48|0,aa+48|0);Ol=x;x=0;do if(!(Ol&1)){Nl=aa+60|0;Rl=k[Nl+4>>2]|0;Pl=Ml+60|0;k[Pl>>2]=k[Nl>>2];k[Pl+4>>2]=Rl;Rl=Ml+72|0;k[Ll>>2]=Rl;Pl=aa+72|0;k[Rl>>2]=k[Pl>>2];i[Rl+4>>0]=i[Pl+4>>0]|0;Df=Ml+80|0;Ef=aa+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ml+120|0,aa+120|0);Pl=x;x=0;if(Pl&1)break;Pl=aa+132|0;Rl=k[Pl+4>>2]|0;Nl=Ml+132|0;k[Nl>>2]=k[Pl>>2];k[Nl+4>>2]=Rl;k[Ll>>2]=(k[Ll>>2]|0)+72;k[_>>2]=1;i[_+4>>0]=1;Rl=_+8|0;k[Rl>>2]=10;k[_+40>>2]=1;Nl=_+48|0;x=0;xa(712,Nl|0,$|0);Pl=x;x=0;do if(Pl&1){Wl=Hc()|0;Xl=Kl;Yl=1;Zl=Wl;_l=M}else{Wl=_+60|0;k[Wl>>2]=0;k[_+64>>2]=0;k[ca>>2]=k[e>>2];i[ca+4>>0]=i[e+4>>0]|0;$l=ca+8|0;Df=$l;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));am=ca+48|0;x=0;xa(712,am|0,Gf|0);bm=x;x=0;do if(bm&1){cm=Hc()|0;dm=Kl;em=1;fm=cm;gm=M}else{cm=ca+60|0;hm=yf;im=k[hm+4>>2]|0;jm=cm;k[jm>>2]=k[hm>>2];k[jm+4>>2]=im;im=ca+72|0;k[im>>2]=k[f>>2];i[im+4>>0]=i[f+4>>0]|0;jm=ca+80|0;Df=jm;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));hm=ca+120|0;x=0;xa(712,hm|0,Kf|0);km=x;x=0;if(km&1){km=Hc()|0;lm=M;mm=ca+48|0;nm=k[mm>>2]|0;if(!nm){dm=Kl;em=1;fm=km;gm=lm;break}om=ca+52|0;pm=k[om>>2]|0;if((pm|0)==(nm|0))qm=nm;else{rm=ca+56|0;sm=pm;do{pm=sm+-72|0;k[om>>2]=pm;i[c>>0]=i[d>>0]|0;uF(c,rm,pm);sm=k[om>>2]|0}while((sm|0)!=(nm|0));qm=k[mm>>2]|0}OBa(qm);dm=Kl;em=1;fm=km;gm=lm;break}nm=zf;sm=k[nm>>2]|0;om=k[nm+4>>2]|0;nm=ca+132|0;k[nm>>2]=sm;k[nm+4>>2]=om;nm=ba+16|0;k[nm>>2]=0;x=0;rm=Ba(563,152)|0;pm=x;x=0;do if(pm&1){tm=Hc()|0;um=Kl;vm=1;wm=tm;xm=M}else{k[rm>>2]=27936;tm=rm+8|0;k[tm>>2]=k[ca>>2];i[tm+4>>0]=i[ca+4>>0]|0;Df=rm+16|0;Ef=$l;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[rm+56>>2]=k[am>>2];tm=ca+52|0;k[rm+60>>2]=k[tm>>2];ym=ca+56|0;k[rm+64>>2]=k[ym>>2];k[ym>>2]=0;k[tm>>2]=0;k[am>>2]=0;ym=cm;zm=k[ym+4>>2]|0;Am=rm+68|0;k[Am>>2]=k[ym>>2];k[Am+4>>2]=zm;zm=rm+80|0;k[zm>>2]=k[im>>2];i[zm+4>>0]=i[im+4>>0]|0;Df=rm+88|0;Ef=jm;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[rm+128>>2]=k[hm>>2];zm=ca+124|0;k[rm+132>>2]=k[zm>>2];Am=ca+128|0;k[rm+136>>2]=k[Am>>2];k[Am>>2]=0;k[zm>>2]=0;k[hm>>2]=0;Am=rm+140|0;k[Am>>2]=sm;k[Am+4>>2]=om;k[nm>>2]=rm;k[Kl>>2]=k[_>>2];i[Kl+4>>0]=i[_+4>>0]|0;Df=n+680|0;Ef=Rl;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+720|0,Nl|0);Am=x;x=0;w:do if(Am&1){ym=Hc()|0;Bm=M;Cm=ym;ug=3332}else{ym=Wl;Dm=k[ym+4>>2]|0;Em=n+732|0;k[Em>>2]=k[ym>>2];k[Em+4>>2]=Dm;Dm=n+744|0;Em=k[nm>>2]|0;x:do if(!Em)k[n+760>>2]=0;else{do if((Em|0)==(ba|0)){k[n+760>>2]=Dm;x=0;xa(k[(k[Em>>2]|0)+12>>2]|0,Em|0,Dm|0);ym=x;x=0;if(!(ym&1))break x}else{x=0;ym=Ba(k[(k[Em>>2]|0)+8>>2]|0,Em|0)|0;Fm=x;x=0;if(Fm&1)break;k[n+760>>2]=ym;break x}while(0);ym=Hc()|0;Fm=M;Gm=n+720|0;Hm=k[Gm>>2]|0;if(!Hm){Bm=Fm;Cm=ym;ug=3332;break w}Im=n+724|0;Jm=k[Im>>2]|0;if((Jm|0)==(Hm|0))Km=Hm;else{Lm=n+728|0;Mm=Jm;do{Jm=Mm+-72|0;k[Im>>2]=Jm;i[c>>0]=i[d>>0]|0;uF(c,Lm,Jm);Mm=k[Im>>2]|0}while((Mm|0)!=(Hm|0));Km=k[Gm>>2]|0}OBa(Km);Bm=Fm;Cm=ym;ug=3332;break w}while(0);Em=n+768|0;k[fa>>2]=k[e>>2];i[fa+4>>0]=i[e+4>>0]|0;Df=fa+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,fa+48|0,Gf|0);Dm=x;x=0;if(Dm&1){Dm=Hc()|0;Nm=Em;Om=1;Pm=Dm;Qm=M;break}Dm=yf;Hm=k[Dm+4>>2]|0;Mm=fa+60|0;k[Mm>>2]=k[Dm>>2];k[Mm+4>>2]=Hm;k[ea>>2]=0;Hm=ea+4|0;k[Hm>>2]=0;k[ea+8>>2]=0;x=0;Mm=Ba(563,72)|0;Dm=x;x=0;do if(Dm&1){Im=Hc()|0;Rm=Im;Sm=M;ug=3334}else{k[Hm>>2]=Mm;k[ea>>2]=Mm;k[ea+8>>2]=Mm+72;k[Mm>>2]=k[fa>>2];i[Mm+4>>0]=i[fa+4>>0]|0;Df=Mm+8|0;Ef=fa+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Mm+48|0,fa+48|0);ym=x;x=0;if(ym&1){ym=Hc()|0;Fm=M;OBa(Mm);Rm=ym;Sm=Fm;ug=3334;break}Fm=fa+60|0;ym=k[Fm+4>>2]|0;Gm=Mm+60|0;k[Gm>>2]=k[Fm>>2];k[Gm+4>>2]=ym;k[Hm>>2]=Mm+72;k[da>>2]=1;i[da+4>>0]=1;ym=da+8|0;k[ym>>2]=25;k[da+40>>2]=1;Gm=da+48|0;x=0;xa(712,Gm|0,ea|0);Fm=x;x=0;do if(Fm&1){Im=Hc()|0;Tm=Em;Um=1;Vm=Im;Wm=M}else{Im=da+60|0;k[Im>>2]=0;k[da+64>>2]=0;k[ha>>2]=k[e>>2];i[ha+4>>0]=i[e+4>>0]|0;Lm=ha+8|0;Df=Lm;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Jm=ha+48|0;x=0;xa(712,Jm|0,Gf|0);Xm=x;x=0;do if(Xm&1){Ym=Hc()|0;Zm=Em;_m=1;$m=Ym;an=M}else{Ym=yf;bn=k[Ym>>2]|0;cn=k[Ym+4>>2]|0;Ym=ha+60|0;k[Ym>>2]=bn;k[Ym+4>>2]=cn;Ym=ga+16|0;k[Ym>>2]=0;x=0;dn=Ba(563,80)|0;en=x;x=0;do if(en&1){fn=Hc()|0;gn=Em;hn=1;jn=fn;kn=M}else{k[dn>>2]=27980;fn=dn+8|0;k[fn>>2]=k[ha>>2];i[fn+4>>0]=i[ha+4>>0]|0;Df=dn+16|0;Ef=Lm;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[dn+56>>2]=k[Jm>>2];fn=ha+52|0;k[dn+60>>2]=k[fn>>2];ln=ha+56|0;k[dn+64>>2]=k[ln>>2];k[ln>>2]=0;k[fn>>2]=0;k[Jm>>2]=0;ln=dn+68|0;k[ln>>2]=bn;k[ln+4>>2]=cn;k[Ym>>2]=dn;k[Em>>2]=k[da>>2];i[Em+4>>0]=i[da+4>>0]|0;Df=n+776|0;Ef=ym;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+816|0,Gm|0);ln=x;x=0;y:do if(ln&1){mn=Hc()|0;nn=M;on=mn;ug=3339}else{mn=Im;pn=k[mn+4>>2]|0;qn=n+828|0;k[qn>>2]=k[mn>>2];k[qn+4>>2]=pn;pn=n+840|0;qn=k[Ym>>2]|0;z:do if(!qn)k[n+856>>2]=0;else{do if((qn|0)==(ga|0)){k[n+856>>2]=pn;x=0;xa(k[(k[qn>>2]|0)+12>>2]|0,qn|0,pn|0);mn=x;x=0;if(!(mn&1))break z}else{x=0;mn=Ba(k[(k[qn>>2]|0)+8>>2]|0,qn|0)|0;rn=x;x=0;if(rn&1)break;k[n+856>>2]=mn;break z}while(0);mn=Hc()|0;rn=M;sn=n+816|0;tn=k[sn>>2]|0;if(!tn){nn=rn;on=mn;ug=3339;break y}un=n+820|0;vn=k[un>>2]|0;if((vn|0)==(tn|0))wn=tn;else{xn=n+824|0;yn=vn;do{vn=yn+-72|0;k[un>>2]=vn;i[c>>0]=i[d>>0]|0;uF(c,xn,vn);yn=k[un>>2]|0}while((yn|0)!=(tn|0));wn=k[sn>>2]|0}OBa(wn);nn=rn;on=mn;ug=3339;break y}while(0);qn=n+864|0;k[ka>>2]=k[e>>2];i[ka+4>>0]=i[e+4>>0]|0;Df=ka+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ka+48|0,Gf|0);pn=x;x=0;do if(pn&1)zn=ka;else{tn=yf;yn=k[tn+4>>2]|0;un=ka+60|0;k[un>>2]=k[tn>>2];k[un+4>>2]=yn;yn=ka+72|0;k[yn>>2]=k[f>>2];i[yn+4>>0]=i[f+4>>0]|0;Df=ka+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ka+120|0,Kf|0);mn=x;x=0;if(mn&1){zn=yn;break}mn=zf;rn=k[mn+4>>2]|0;sn=ka+132|0;k[sn>>2]=k[mn>>2];k[sn+4>>2]=rn;k[ja>>2]=0;rn=ja+4|0;k[rn>>2]=0;k[ja+8>>2]=0;x=0;sn=Ba(563,144)|0;mn=x;x=0;A:do if(mn&1){un=Hc()|0;An=un;Bn=M;ug=3349}else{k[rn>>2]=sn;k[ja>>2]=sn;k[ja+8>>2]=sn+144;k[sn>>2]=k[ka>>2];i[sn+4>>0]=i[ka+4>>0]|0;Df=sn+8|0;Ef=ka+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,sn+48|0,ka+48|0);un=x;x=0;do if(!(un&1)){tn=ka+60|0;xn=k[tn+4>>2]|0;vn=sn+60|0;k[vn>>2]=k[tn>>2];k[vn+4>>2]=xn;xn=sn+72|0;k[rn>>2]=xn;vn=ka+72|0;k[xn>>2]=k[vn>>2];i[xn+4>>0]=i[vn+4>>0]|0;Df=sn+80|0;Ef=ka+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,sn+120|0,ka+120|0);vn=x;x=0;if(vn&1)break;vn=ka+132|0;xn=k[vn+4>>2]|0;tn=sn+132|0;k[tn>>2]=k[vn>>2];k[tn+4>>2]=xn;k[rn>>2]=(k[rn>>2]|0)+72;k[ia>>2]=1;i[ia+4>>0]=1;xn=ia+8|0;k[xn>>2]=16;k[ia+40>>2]=1;tn=ia+48|0;x=0;xa(712,tn|0,ja|0);vn=x;x=0;do if(vn&1){Cn=Hc()|0;Dn=qn;En=1;Fn=Cn;Gn=M}else{Cn=ia+60|0;k[Cn>>2]=0;k[ia+64>>2]=0;k[ma>>2]=k[e>>2];i[ma+4>>0]=i[e+4>>0]|0;Hn=ma+8|0;Df=Hn;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));In=ma+48|0;x=0;xa(712,In|0,Gf|0);Jn=x;x=0;do if(Jn&1){Kn=Hc()|0;Ln=qn;Mn=1;Nn=Kn;On=M}else{Kn=ma+60|0;Pn=yf;Qn=k[Pn+4>>2]|0;Rn=Kn;k[Rn>>2]=k[Pn>>2];k[Rn+4>>2]=Qn;Qn=ma+72|0;k[Qn>>2]=k[f>>2];i[Qn+4>>0]=i[f+4>>0]|0;Rn=ma+80|0;Df=Rn;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Pn=ma+120|0;x=0;xa(712,Pn|0,Kf|0);Sn=x;x=0;if(Sn&1){Sn=Hc()|0;Tn=M;Un=ma+48|0;Vn=k[Un>>2]|0;if(!Vn){Ln=qn;Mn=1;Nn=Sn;On=Tn;break}Wn=ma+52|0;Xn=k[Wn>>2]|0;if((Xn|0)==(Vn|0))Yn=Vn;else{Zn=ma+56|0;_n=Xn;do{Xn=_n+-72|0;k[Wn>>2]=Xn;i[c>>0]=i[d>>0]|0;uF(c,Zn,Xn);_n=k[Wn>>2]|0}while((_n|0)!=(Vn|0));Yn=k[Un>>2]|0}OBa(Yn);Ln=qn;Mn=1;Nn=Sn;On=Tn;break}Vn=zf;_n=k[Vn>>2]|0;Wn=k[Vn+4>>2]|0;Vn=ma+132|0;k[Vn>>2]=_n;k[Vn+4>>2]=Wn;Vn=la+16|0;k[Vn>>2]=0;x=0;Zn=Ba(563,152)|0;Xn=x;x=0;do if(Xn&1){$n=Hc()|0;ao=qn;bo=1;co=$n;eo=M}else{k[Zn>>2]=28024;$n=Zn+8|0;k[$n>>2]=k[ma>>2];i[$n+4>>0]=i[ma+4>>0]|0;Df=Zn+16|0;Ef=Hn;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Zn+56>>2]=k[In>>2];$n=ma+52|0;k[Zn+60>>2]=k[$n>>2];fo=ma+56|0;k[Zn+64>>2]=k[fo>>2];k[fo>>2]=0;k[$n>>2]=0;k[In>>2]=0;fo=Kn;go=k[fo+4>>2]|0;ho=Zn+68|0;k[ho>>2]=k[fo>>2];k[ho+4>>2]=go;go=Zn+80|0;k[go>>2]=k[Qn>>2];i[go+4>>0]=i[Qn+4>>0]|0;Df=Zn+88|0;Ef=Rn;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Zn+128>>2]=k[Pn>>2];go=ma+124|0;k[Zn+132>>2]=k[go>>2];ho=ma+128|0;k[Zn+136>>2]=k[ho>>2];k[ho>>2]=0;k[go>>2]=0;k[Pn>>2]=0;ho=Zn+140|0;k[ho>>2]=_n;k[ho+4>>2]=Wn;k[Vn>>2]=Zn;k[qn>>2]=k[ia>>2];i[qn+4>>0]=i[ia+4>>0]|0;Df=n+872|0;Ef=xn;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+912|0,tn|0);ho=x;x=0;B:do if(ho&1){fo=Hc()|0;io=M;jo=fo;ug=3360}else{fo=Cn;ko=k[fo+4>>2]|0;lo=n+924|0;k[lo>>2]=k[fo>>2];k[lo+4>>2]=ko;ko=n+936|0;lo=k[Vn>>2]|0;C:do if(!lo)k[n+952>>2]=0;else{do if((lo|0)==(la|0)){k[n+952>>2]=ko;x=0;xa(k[(k[lo>>2]|0)+12>>2]|0,lo|0,ko|0);fo=x;x=0;if(!(fo&1))break C}else{x=0;fo=Ba(k[(k[lo>>2]|0)+8>>2]|0,lo|0)|0;mo=x;x=0;if(mo&1)break;k[n+952>>2]=fo;break C}while(0);fo=Hc()|0;mo=M;no=n+912|0;oo=k[no>>2]|0;if(!oo){io=mo;jo=fo;ug=3360;break B}po=n+916|0;qo=k[po>>2]|0;if((qo|0)==(oo|0))ro=oo;else{so=n+920|0;to=qo;do{qo=to+-72|0;k[po>>2]=qo;i[c>>0]=i[d>>0]|0;uF(c,so,qo);to=k[po>>2]|0}while((to|0)!=(oo|0));ro=k[no>>2]|0}OBa(ro);io=mo;jo=fo;ug=3360;break B}while(0);lo=n+960|0;k[pa>>2]=k[e>>2];i[pa+4>>0]=i[e+4>>0]|0;Df=pa+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pa+48|0,Gf|0);ko=x;x=0;do if(ko&1)uo=pa;else{oo=yf;to=k[oo+4>>2]|0;po=pa+60|0;k[po>>2]=k[oo>>2];k[po+4>>2]=to;to=pa+72|0;k[to>>2]=k[f>>2];i[to+4>>0]=i[f+4>>0]|0;Df=pa+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pa+120|0,Kf|0);fo=x;x=0;if(fo&1){uo=to;break}fo=zf;mo=k[fo+4>>2]|0;no=pa+132|0;k[no>>2]=k[fo>>2];k[no+4>>2]=mo;k[oa>>2]=0;mo=oa+4|0;k[mo>>2]=0;k[oa+8>>2]=0;x=0;no=Ba(563,144)|0;fo=x;x=0;D:do if(fo&1){po=Hc()|0;vo=po;wo=M;ug=3370}else{k[mo>>2]=no;k[oa>>2]=no;k[oa+8>>2]=no+144;k[no>>2]=k[pa>>2];i[no+4>>0]=i[pa+4>>0]|0;Df=no+8|0;Ef=pa+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,no+48|0,pa+48|0);po=x;x=0;do if(!(po&1)){oo=pa+60|0;so=k[oo+4>>2]|0;qo=no+60|0;k[qo>>2]=k[oo>>2];k[qo+4>>2]=so;so=no+72|0;k[mo>>2]=so;qo=pa+72|0;k[so>>2]=k[qo>>2];i[so+4>>0]=i[qo+4>>0]|0;Df=no+80|0;Ef=pa+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,no+120|0,pa+120|0);qo=x;x=0;if(qo&1)break;qo=pa+132|0;so=k[qo+4>>2]|0;oo=no+132|0;k[oo>>2]=k[qo>>2];k[oo+4>>2]=so;k[mo>>2]=(k[mo>>2]|0)+72;k[na>>2]=1;i[na+4>>0]=1;so=na+8|0;k[so>>2]=17;k[na+40>>2]=1;oo=na+48|0;x=0;xa(712,oo|0,oa|0);qo=x;x=0;do if(qo&1){xo=Hc()|0;yo=lo;zo=1;Ao=xo;Bo=M}else{xo=na+60|0;k[xo>>2]=0;k[na+64>>2]=0;k[ra>>2]=k[e>>2];i[ra+4>>0]=i[e+4>>0]|0;Co=ra+8|0;Df=Co;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Do=ra+48|0;x=0;xa(712,Do|0,Gf|0);Eo=x;x=0;do if(Eo&1){Fo=Hc()|0;Go=lo;Ho=1;Io=Fo;Jo=M}else{Fo=ra+60|0;Ko=yf;Lo=k[Ko+4>>2]|0;Mo=Fo;k[Mo>>2]=k[Ko>>2];k[Mo+4>>2]=Lo;Lo=ra+72|0;k[Lo>>2]=k[f>>2];i[Lo+4>>0]=i[f+4>>0]|0;Mo=ra+80|0;Df=Mo;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Ko=ra+120|0;x=0;xa(712,Ko|0,Kf|0);No=x;x=0;if(No&1){No=Hc()|0;Oo=M;Po=ra+48|0;Qo=k[Po>>2]|0;if(!Qo){Go=lo;Ho=1;Io=No;Jo=Oo;break}Ro=ra+52|0;So=k[Ro>>2]|0;if((So|0)==(Qo|0))To=Qo;else{Uo=ra+56|0;Vo=So;do{So=Vo+-72|0;k[Ro>>2]=So;i[c>>0]=i[d>>0]|0;uF(c,Uo,So);Vo=k[Ro>>2]|0}while((Vo|0)!=(Qo|0));To=k[Po>>2]|0}OBa(To);Go=lo;Ho=1;Io=No;Jo=Oo;break}Qo=zf;Vo=k[Qo>>2]|0;Ro=k[Qo+4>>2]|0;Qo=ra+132|0;k[Qo>>2]=Vo;k[Qo+4>>2]=Ro;Qo=qa+16|0;k[Qo>>2]=0;x=0;Uo=Ba(563,152)|0;So=x;x=0;do if(So&1){Wo=Hc()|0;Xo=lo;Yo=1;Zo=Wo;_o=M}else{k[Uo>>2]=28068;Wo=Uo+8|0;k[Wo>>2]=k[ra>>2];i[Wo+4>>0]=i[ra+4>>0]|0;Df=Uo+16|0;Ef=Co;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Uo+56>>2]=k[Do>>2];Wo=ra+52|0;k[Uo+60>>2]=k[Wo>>2];$o=ra+56|0;k[Uo+64>>2]=k[$o>>2];k[$o>>2]=0;k[Wo>>2]=0;k[Do>>2]=0;$o=Fo;ap=k[$o+4>>2]|0;bp=Uo+68|0;k[bp>>2]=k[$o>>2];k[bp+4>>2]=ap;ap=Uo+80|0;k[ap>>2]=k[Lo>>2];i[ap+4>>0]=i[Lo+4>>0]|0;Df=Uo+88|0;Ef=Mo;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Uo+128>>2]=k[Ko>>2];ap=ra+124|0;k[Uo+132>>2]=k[ap>>2];bp=ra+128|0;k[Uo+136>>2]=k[bp>>2];k[bp>>2]=0;k[ap>>2]=0;k[Ko>>2]=0;bp=Uo+140|0;k[bp>>2]=Vo;k[bp+4>>2]=Ro;k[Qo>>2]=Uo;k[lo>>2]=k[na>>2];i[lo+4>>0]=i[na+4>>0]|0;Df=n+968|0;Ef=so;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1008|0,oo|0);bp=x;x=0;E:do if(bp&1){$o=Hc()|0;cp=M;dp=$o;ug=3381}else{$o=xo;ep=k[$o+4>>2]|0;fp=n+1020|0;k[fp>>2]=k[$o>>2];k[fp+4>>2]=ep;ep=n+1032|0;fp=k[Qo>>2]|0;F:do if(!fp)k[n+1048>>2]=0;else{do if((fp|0)==(qa|0)){k[n+1048>>2]=ep;x=0;xa(k[(k[fp>>2]|0)+12>>2]|0,fp|0,ep|0);$o=x;x=0;if(!($o&1))break F}else{x=0;$o=Ba(k[(k[fp>>2]|0)+8>>2]|0,fp|0)|0;gp=x;x=0;if(gp&1)break;k[n+1048>>2]=$o;break F}while(0);$o=Hc()|0;gp=M;hp=n+1008|0;ip=k[hp>>2]|0;if(!ip){cp=gp;dp=$o;ug=3381;break E}jp=n+1012|0;kp=k[jp>>2]|0;if((kp|0)==(ip|0))lp=ip;else{mp=n+1016|0;np=kp;do{kp=np+-72|0;k[jp>>2]=kp;i[c>>0]=i[d>>0]|0;uF(c,mp,kp);np=k[jp>>2]|0}while((np|0)!=(ip|0));lp=k[hp>>2]|0}OBa(lp);cp=gp;dp=$o;ug=3381;break E}while(0);fp=n+1056|0;k[ua>>2]=k[e>>2];i[ua+4>>0]=i[e+4>>0]|0;Df=ua+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ua+48|0,Gf|0);ep=x;x=0;do if(ep&1)op=ua;else{ip=yf;np=k[ip+4>>2]|0;jp=ua+60|0;k[jp>>2]=k[ip>>2];k[jp+4>>2]=np;np=ua+72|0;k[np>>2]=k[f>>2];i[np+4>>0]=i[f+4>>0]|0;Df=ua+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ua+120|0,Kf|0);$o=x;x=0;if($o&1){op=np;break}$o=zf;gp=k[$o+4>>2]|0;hp=ua+132|0;k[hp>>2]=k[$o>>2];k[hp+4>>2]=gp;k[ta>>2]=0;gp=ta+4|0;k[gp>>2]=0;k[ta+8>>2]=0;x=0;hp=Ba(563,144)|0;$o=x;x=0;G:do if($o&1){jp=Hc()|0;pp=jp;qp=M;ug=3391}else{k[gp>>2]=hp;k[ta>>2]=hp;k[ta+8>>2]=hp+144;k[hp>>2]=k[ua>>2];i[hp+4>>0]=i[ua+4>>0]|0;Df=hp+8|0;Ef=ua+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hp+48|0,ua+48|0);jp=x;x=0;do if(!(jp&1)){ip=ua+60|0;mp=k[ip+4>>2]|0;kp=hp+60|0;k[kp>>2]=k[ip>>2];k[kp+4>>2]=mp;mp=hp+72|0;k[gp>>2]=mp;kp=ua+72|0;k[mp>>2]=k[kp>>2];i[mp+4>>0]=i[kp+4>>0]|0;Df=hp+80|0;Ef=ua+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hp+120|0,ua+120|0);kp=x;x=0;if(kp&1)break;kp=ua+132|0;mp=k[kp+4>>2]|0;ip=hp+132|0;k[ip>>2]=k[kp>>2];k[ip+4>>2]=mp;k[gp>>2]=(k[gp>>2]|0)+72;k[sa>>2]=1;i[sa+4>>0]=1;mp=sa+8|0;k[mp>>2]=18;k[sa+40>>2]=1;ip=sa+48|0;x=0;xa(712,ip|0,ta|0);kp=x;x=0;do if(kp&1){rp=Hc()|0;sp=fp;tp=1;up=rp;vp=M}else{rp=sa+60|0;k[rp>>2]=0;k[sa+64>>2]=0;k[wa>>2]=k[e>>2];i[wa+4>>0]=i[e+4>>0]|0;wp=wa+8|0;Df=wp;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));xp=wa+48|0;x=0;xa(712,xp|0,Gf|0);yp=x;x=0;do if(yp&1){zp=Hc()|0;Ap=fp;Bp=1;Cp=zp;Dp=M}else{zp=wa+60|0;Ep=yf;Fp=k[Ep+4>>2]|0;Gp=zp;k[Gp>>2]=k[Ep>>2];k[Gp+4>>2]=Fp;Fp=wa+72|0;k[Fp>>2]=k[f>>2];i[Fp+4>>0]=i[f+4>>0]|0;Gp=wa+80|0;Df=Gp;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Ep=wa+120|0;x=0;xa(712,Ep|0,Kf|0);Hp=x;x=0;if(Hp&1){Hp=Hc()|0;Ip=M;Jp=wa+48|0;Kp=k[Jp>>2]|0;if(!Kp){Ap=fp;Bp=1;Cp=Hp;Dp=Ip;break}Lp=wa+52|0;Mp=k[Lp>>2]|0;if((Mp|0)==(Kp|0))Np=Kp;else{Op=wa+56|0;Pp=Mp;do{Mp=Pp+-72|0;k[Lp>>2]=Mp;i[c>>0]=i[d>>0]|0;uF(c,Op,Mp);Pp=k[Lp>>2]|0}while((Pp|0)!=(Kp|0));Np=k[Jp>>2]|0}OBa(Np);Ap=fp;Bp=1;Cp=Hp;Dp=Ip;break}Kp=zf;Pp=k[Kp>>2]|0;Lp=k[Kp+4>>2]|0;Kp=wa+132|0;k[Kp>>2]=Pp;k[Kp+4>>2]=Lp;Kp=va+16|0;k[Kp>>2]=0;x=0;Op=Ba(563,152)|0;Mp=x;x=0;do if(Mp&1){Qp=Hc()|0;Rp=fp;Sp=1;Tp=Qp;Up=M}else{k[Op>>2]=28112;Qp=Op+8|0;k[Qp>>2]=k[wa>>2];i[Qp+4>>0]=i[wa+4>>0]|0;Df=Op+16|0;Ef=wp;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Op+56>>2]=k[xp>>2];Qp=wa+52|0;k[Op+60>>2]=k[Qp>>2];Vp=wa+56|0;k[Op+64>>2]=k[Vp>>2];k[Vp>>2]=0;k[Qp>>2]=0;k[xp>>2]=0;Vp=zp;Wp=k[Vp+4>>2]|0;Xp=Op+68|0;k[Xp>>2]=k[Vp>>2];k[Xp+4>>2]=Wp;Wp=Op+80|0;k[Wp>>2]=k[Fp>>2];i[Wp+4>>0]=i[Fp+4>>0]|0;Df=Op+88|0;Ef=Gp;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Op+128>>2]=k[Ep>>2];Wp=wa+124|0;k[Op+132>>2]=k[Wp>>2];Xp=wa+128|0;k[Op+136>>2]=k[Xp>>2];k[Xp>>2]=0;k[Wp>>2]=0;k[Ep>>2]=0;Xp=Op+140|0;k[Xp>>2]=Pp;k[Xp+4>>2]=Lp;k[Kp>>2]=Op;k[fp>>2]=k[sa>>2];i[fp+4>>0]=i[sa+4>>0]|0;Df=n+1064|0;Ef=mp;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1104|0,ip|0);Xp=x;x=0;H:do if(Xp&1){Vp=Hc()|0;Yp=M;Zp=Vp;ug=3402}else{Vp=rp;_p=k[Vp+4>>2]|0;$p=n+1116|0;k[$p>>2]=k[Vp>>2];k[$p+4>>2]=_p;_p=n+1128|0;$p=k[Kp>>2]|0;I:do if(!$p)k[n+1144>>2]=0;else{do if(($p|0)==(va|0)){k[n+1144>>2]=_p;x=0;xa(k[(k[$p>>2]|0)+12>>2]|0,$p|0,_p|0);Vp=x;x=0;if(!(Vp&1))break I}else{x=0;Vp=Ba(k[(k[$p>>2]|0)+8>>2]|0,$p|0)|0;aq=x;x=0;if(aq&1)break;k[n+1144>>2]=Vp;break I}while(0);Vp=Hc()|0;aq=M;bq=n+1104|0;cq=k[bq>>2]|0;if(!cq){Yp=aq;Zp=Vp;ug=3402;break H}dq=n+1108|0;eq=k[dq>>2]|0;if((eq|0)==(cq|0))fq=cq;else{gq=n+1112|0;hq=eq;do{eq=hq+-72|0;k[dq>>2]=eq;i[c>>0]=i[d>>0]|0;uF(c,gq,eq);hq=k[dq>>2]|0}while((hq|0)!=(cq|0));fq=k[bq>>2]|0}OBa(fq);Yp=aq;Zp=Vp;ug=3402;break H}while(0);$p=n+1152|0;k[Aa>>2]=k[e>>2];i[Aa+4>>0]=i[e+4>>0]|0;Df=Aa+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Aa+48|0,Gf|0);_p=x;x=0;do if(_p&1)iq=Aa;else{cq=yf;hq=k[cq+4>>2]|0;dq=Aa+60|0;k[dq>>2]=k[cq>>2];k[dq+4>>2]=hq;hq=Aa+72|0;k[hq>>2]=k[f>>2];i[hq+4>>0]=i[f+4>>0]|0;Df=Aa+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Aa+120|0,Kf|0);Vp=x;x=0;if(Vp&1){iq=hq;break}Vp=zf;aq=k[Vp+4>>2]|0;bq=Aa+132|0;k[bq>>2]=k[Vp>>2];k[bq+4>>2]=aq;k[za>>2]=0;aq=za+4|0;k[aq>>2]=0;k[za+8>>2]=0;x=0;bq=Ba(563,144)|0;Vp=x;x=0;J:do if(Vp&1){dq=Hc()|0;jq=dq;kq=M;ug=3412}else{k[aq>>2]=bq;k[za>>2]=bq;k[za+8>>2]=bq+144;k[bq>>2]=k[Aa>>2];i[bq+4>>0]=i[Aa+4>>0]|0;Df=bq+8|0;Ef=Aa+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,bq+48|0,Aa+48|0);dq=x;x=0;do if(!(dq&1)){cq=Aa+60|0;gq=k[cq+4>>2]|0;eq=bq+60|0;k[eq>>2]=k[cq>>2];k[eq+4>>2]=gq;gq=bq+72|0;k[aq>>2]=gq;eq=Aa+72|0;k[gq>>2]=k[eq>>2];i[gq+4>>0]=i[eq+4>>0]|0;Df=bq+80|0;Ef=Aa+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,bq+120|0,Aa+120|0);eq=x;x=0;if(eq&1)break;eq=Aa+132|0;gq=k[eq+4>>2]|0;cq=bq+132|0;k[cq>>2]=k[eq>>2];k[cq+4>>2]=gq;k[aq>>2]=(k[aq>>2]|0)+72;k[ya>>2]=1;i[ya+4>>0]=1;gq=ya+8|0;k[gq>>2]=19;k[ya+40>>2]=1;cq=ya+48|0;x=0;xa(712,cq|0,za|0);eq=x;x=0;do if(eq&1){lq=Hc()|0;mq=$p;nq=1;oq=lq;pq=M}else{lq=ya+60|0;k[lq>>2]=0;k[ya+64>>2]=0;k[Da>>2]=k[e>>2];i[Da+4>>0]=i[e+4>>0]|0;qq=Da+8|0;Df=qq;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));rq=Da+48|0;x=0;xa(712,rq|0,Gf|0);sq=x;x=0;do if(sq&1){tq=Hc()|0;uq=$p;vq=1;wq=tq;xq=M}else{tq=Da+60|0;yq=yf;zq=k[yq+4>>2]|0;Aq=tq;k[Aq>>2]=k[yq>>2];k[Aq+4>>2]=zq;zq=Da+72|0;k[zq>>2]=k[f>>2];i[zq+4>>0]=i[f+4>>0]|0;Aq=Da+80|0;Df=Aq;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));yq=Da+120|0;x=0;xa(712,yq|0,Kf|0);Bq=x;x=0;if(Bq&1){Bq=Hc()|0;Cq=M;Dq=Da+48|0;Eq=k[Dq>>2]|0;if(!Eq){uq=$p;vq=1;wq=Bq;xq=Cq;break}Fq=Da+52|0;Gq=k[Fq>>2]|0;if((Gq|0)==(Eq|0))Hq=Eq;else{Iq=Da+56|0;Jq=Gq;do{Gq=Jq+-72|0;k[Fq>>2]=Gq;i[c>>0]=i[d>>0]|0;uF(c,Iq,Gq);Jq=k[Fq>>2]|0}while((Jq|0)!=(Eq|0));Hq=k[Dq>>2]|0}OBa(Hq);uq=$p;vq=1;wq=Bq;xq=Cq;break}Eq=zf;Jq=k[Eq>>2]|0;Fq=k[Eq+4>>2]|0;Eq=Da+132|0;k[Eq>>2]=Jq;k[Eq+4>>2]=Fq;Eq=Ca+16|0;k[Eq>>2]=0;x=0;Iq=Ba(563,152)|0;Gq=x;x=0;do if(Gq&1){Kq=Hc()|0;Lq=$p;Mq=1;Nq=Kq;Oq=M}else{k[Iq>>2]=28156;Kq=Iq+8|0;k[Kq>>2]=k[Da>>2];i[Kq+4>>0]=i[Da+4>>0]|0;Df=Iq+16|0;Ef=qq;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Iq+56>>2]=k[rq>>2];Kq=Da+52|0;k[Iq+60>>2]=k[Kq>>2];Pq=Da+56|0;k[Iq+64>>2]=k[Pq>>2];k[Pq>>2]=0;k[Kq>>2]=0;k[rq>>2]=0;Pq=tq;Qq=k[Pq+4>>2]|0;Rq=Iq+68|0;k[Rq>>2]=k[Pq>>2];k[Rq+4>>2]=Qq;Qq=Iq+80|0;k[Qq>>2]=k[zq>>2];i[Qq+4>>0]=i[zq+4>>0]|0;Df=Iq+88|0;Ef=Aq;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Iq+128>>2]=k[yq>>2];Qq=Da+124|0;k[Iq+132>>2]=k[Qq>>2];Rq=Da+128|0;k[Iq+136>>2]=k[Rq>>2];k[Rq>>2]=0;k[Qq>>2]=0;k[yq>>2]=0;Rq=Iq+140|0;k[Rq>>2]=Jq;k[Rq+4>>2]=Fq;k[Eq>>2]=Iq;k[$p>>2]=k[ya>>2];i[$p+4>>0]=i[ya+4>>0]|0;Df=n+1160|0;Ef=gq;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1200|0,cq|0);Rq=x;x=0;K:do if(Rq&1){Pq=Hc()|0;Sq=M;Tq=Pq;ug=3423}else{Pq=lq;Uq=k[Pq+4>>2]|0;Vq=n+1212|0;k[Vq>>2]=k[Pq>>2];k[Vq+4>>2]=Uq;Uq=n+1224|0;Vq=k[Eq>>2]|0;L:do if(!Vq)k[n+1240>>2]=0;else{do if((Vq|0)==(Ca|0)){k[n+1240>>2]=Uq;x=0;xa(k[(k[Vq>>2]|0)+12>>2]|0,Vq|0,Uq|0);Pq=x;x=0;if(!(Pq&1))break L}else{x=0;Pq=Ba(k[(k[Vq>>2]|0)+8>>2]|0,Vq|0)|0;Wq=x;x=0;if(Wq&1)break;k[n+1240>>2]=Pq;break L}while(0);Pq=Hc()|0;Wq=M;Xq=n+1200|0;Yq=k[Xq>>2]|0;if(!Yq){Sq=Wq;Tq=Pq;ug=3423;break K}Zq=n+1204|0;_q=k[Zq>>2]|0;if((_q|0)==(Yq|0))$q=Yq;else{ar=n+1208|0;br=_q;do{_q=br+-72|0;k[Zq>>2]=_q;i[c>>0]=i[d>>0]|0;uF(c,ar,_q);br=k[Zq>>2]|0}while((br|0)!=(Yq|0));$q=k[Xq>>2]|0}OBa($q);Sq=Wq;Tq=Pq;ug=3423;break K}while(0);Vq=n+1248|0;k[Ga>>2]=k[e>>2];i[Ga+4>>0]=i[e+4>>0]|0;Df=Ga+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ga+48|0,Gf|0);Uq=x;x=0;do if(Uq&1)cr=Ga;else{Yq=yf;br=k[Yq+4>>2]|0;Zq=Ga+60|0;k[Zq>>2]=k[Yq>>2];k[Zq+4>>2]=br;br=Ga+72|0;k[br>>2]=k[f>>2];i[br+4>>0]=i[f+4>>0]|0;Df=Ga+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ga+120|0,Kf|0);Pq=x;x=0;if(Pq&1){cr=br;break}Pq=zf;Wq=k[Pq+4>>2]|0;Xq=Ga+132|0;k[Xq>>2]=k[Pq>>2];k[Xq+4>>2]=Wq;k[Fa>>2]=0;Wq=Fa+4|0;k[Wq>>2]=0;k[Fa+8>>2]=0;x=0;Xq=Ba(563,144)|0;Pq=x;x=0;M:do if(Pq&1){Zq=Hc()|0;dr=Zq;er=M;ug=3433}else{k[Wq>>2]=Xq;k[Fa>>2]=Xq;k[Fa+8>>2]=Xq+144;k[Xq>>2]=k[Ga>>2];i[Xq+4>>0]=i[Ga+4>>0]|0;Df=Xq+8|0;Ef=Ga+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Xq+48|0,Ga+48|0);Zq=x;x=0;do if(!(Zq&1)){Yq=Ga+60|0;ar=k[Yq+4>>2]|0;_q=Xq+60|0;k[_q>>2]=k[Yq>>2];k[_q+4>>2]=ar;ar=Xq+72|0;k[Wq>>2]=ar;_q=Ga+72|0;k[ar>>2]=k[_q>>2];i[ar+4>>0]=i[_q+4>>0]|0;Df=Xq+80|0;Ef=Ga+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Xq+120|0,Ga+120|0);_q=x;x=0;if(_q&1)break;_q=Ga+132|0;ar=k[_q+4>>2]|0;Yq=Xq+132|0;k[Yq>>2]=k[_q>>2];k[Yq+4>>2]=ar;k[Wq>>2]=(k[Wq>>2]|0)+72;k[Ea>>2]=1;i[Ea+4>>0]=1;ar=Ea+8|0;k[ar>>2]=20;k[Ea+40>>2]=1;Yq=Ea+48|0;x=0;xa(712,Yq|0,Fa|0);_q=x;x=0;do if(_q&1){fr=Hc()|0;gr=Vq;hr=1;ir=fr;jr=M}else{fr=Ea+60|0;k[fr>>2]=0;k[Ea+64>>2]=0;k[Ia>>2]=k[e>>2];i[Ia+4>>0]=i[e+4>>0]|0;kr=Ia+8|0;Df=kr;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));lr=Ia+48|0;x=0;xa(712,lr|0,Gf|0);mr=x;x=0;do if(mr&1){nr=Hc()|0;or=Vq;pr=1;qr=nr;rr=M}else{nr=Ia+60|0;sr=yf;tr=k[sr+4>>2]|0;ur=nr;k[ur>>2]=k[sr>>2];k[ur+4>>2]=tr;tr=Ia+72|0;k[tr>>2]=k[f>>2];i[tr+4>>0]=i[f+4>>0]|0;ur=Ia+80|0;Df=ur;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));sr=Ia+120|0;x=0;xa(712,sr|0,Kf|0);vr=x;x=0;if(vr&1){vr=Hc()|0;wr=M;xr=Ia+48|0;yr=k[xr>>2]|0;if(!yr){or=Vq;pr=1;qr=vr;rr=wr;break}zr=Ia+52|0;Ar=k[zr>>2]|0;if((Ar|0)==(yr|0))Br=yr;else{Cr=Ia+56|0;Dr=Ar;do{Ar=Dr+-72|0;k[zr>>2]=Ar;i[c>>0]=i[d>>0]|0;uF(c,Cr,Ar);Dr=k[zr>>2]|0}while((Dr|0)!=(yr|0));Br=k[xr>>2]|0}OBa(Br);or=Vq;pr=1;qr=vr;rr=wr;break}yr=zf;Dr=k[yr>>2]|0;zr=k[yr+4>>2]|0;yr=Ia+132|0;k[yr>>2]=Dr;k[yr+4>>2]=zr;yr=Ha+16|0;k[yr>>2]=0;x=0;Cr=Ba(563,152)|0;Ar=x;x=0;do if(Ar&1){Er=Hc()|0;Fr=Vq;Gr=1;Hr=Er;Ir=M}else{k[Cr>>2]=28200;Er=Cr+8|0;k[Er>>2]=k[Ia>>2];i[Er+4>>0]=i[Ia+4>>0]|0;Df=Cr+16|0;Ef=kr;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Cr+56>>2]=k[lr>>2];Er=Ia+52|0;k[Cr+60>>2]=k[Er>>2];Jr=Ia+56|0;k[Cr+64>>2]=k[Jr>>2];k[Jr>>2]=0;k[Er>>2]=0;k[lr>>2]=0;Jr=nr;Kr=k[Jr+4>>2]|0;Lr=Cr+68|0;k[Lr>>2]=k[Jr>>2];k[Lr+4>>2]=Kr;Kr=Cr+80|0;k[Kr>>2]=k[tr>>2];i[Kr+4>>0]=i[tr+4>>0]|0;Df=Cr+88|0;Ef=ur;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Cr+128>>2]=k[sr>>2];Kr=Ia+124|0;k[Cr+132>>2]=k[Kr>>2];Lr=Ia+128|0;k[Cr+136>>2]=k[Lr>>2];k[Lr>>2]=0;k[Kr>>2]=0;k[sr>>2]=0;Lr=Cr+140|0;k[Lr>>2]=Dr;k[Lr+4>>2]=zr;k[yr>>2]=Cr;k[Vq>>2]=k[Ea>>2];i[Vq+4>>0]=i[Ea+4>>0]|0;Df=n+1256|0;Ef=ar;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1296|0,Yq|0);Lr=x;x=0;N:do if(Lr&1){Jr=Hc()|0;Mr=M;Nr=Jr;ug=3444}else{Jr=fr;Or=k[Jr+4>>2]|0;Pr=n+1308|0;k[Pr>>2]=k[Jr>>2];k[Pr+4>>2]=Or;Or=n+1320|0;Pr=k[yr>>2]|0;O:do if(!Pr)k[n+1336>>2]=0;else{do if((Pr|0)==(Ha|0)){k[n+1336>>2]=Or;x=0;xa(k[(k[Pr>>2]|0)+12>>2]|0,Pr|0,Or|0);Jr=x;x=0;if(!(Jr&1))break O}else{x=0;Jr=Ba(k[(k[Pr>>2]|0)+8>>2]|0,Pr|0)|0;Qr=x;x=0;if(Qr&1)break;k[n+1336>>2]=Jr;break O}while(0);Jr=Hc()|0;Qr=M;Rr=n+1296|0;Sr=k[Rr>>2]|0;if(!Sr){Mr=Qr;Nr=Jr;ug=3444;break N}Tr=n+1300|0;Ur=k[Tr>>2]|0;if((Ur|0)==(Sr|0))Vr=Sr;else{Wr=n+1304|0;Xr=Ur;do{Ur=Xr+-72|0;k[Tr>>2]=Ur;i[c>>0]=i[d>>0]|0;uF(c,Wr,Ur);Xr=k[Tr>>2]|0}while((Xr|0)!=(Sr|0));Vr=k[Rr>>2]|0}OBa(Vr);Mr=Qr;Nr=Jr;ug=3444;break N}while(0);Pr=n+1344|0;k[La>>2]=k[e>>2];i[La+4>>0]=i[e+4>>0]|0;Df=La+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,La+48|0,Gf|0);Or=x;x=0;if(Or&1){Or=Hc()|0;Yr=Pr;Zr=1;_r=Or;$r=M;break}Or=yf;Sr=k[Or+4>>2]|0;Xr=La+60|0;k[Xr>>2]=k[Or>>2];k[Xr+4>>2]=Sr;k[Ka>>2]=0;Sr=Ka+4|0;k[Sr>>2]=0;k[Ka+8>>2]=0;x=0;Xr=Ba(563,72)|0;Or=x;x=0;do if(Or&1){Tr=Hc()|0;as=Tr;bs=M;ug=3446}else{k[Sr>>2]=Xr;k[Ka>>2]=Xr;k[Ka+8>>2]=Xr+72;k[Xr>>2]=k[La>>2];i[Xr+4>>0]=i[La+4>>0]|0;Df=Xr+8|0;Ef=La+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Xr+48|0,La+48|0);Jr=x;x=0;if(Jr&1){Jr=Hc()|0;Qr=M;OBa(Xr);as=Jr;bs=Qr;ug=3446;break}Qr=La+60|0;Jr=k[Qr+4>>2]|0;Rr=Xr+60|0;k[Rr>>2]=k[Qr>>2];k[Rr+4>>2]=Jr;k[Sr>>2]=Xr+72;k[Ja>>2]=1;i[Ja+4>>0]=1;Jr=Ja+8|0;k[Jr>>2]=21;k[Ja+40>>2]=1;Rr=Ja+48|0;x=0;xa(712,Rr|0,Ka|0);Qr=x;x=0;do if(Qr&1){Tr=Hc()|0;cs=Pr;ds=1;es=Tr;fs=M}else{Tr=Ja+60|0;k[Tr>>2]=0;k[Ja+64>>2]=0;k[Na>>2]=k[e>>2];i[Na+4>>0]=i[e+4>>0]|0;Wr=Na+8|0;Df=Wr;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Ur=Na+48|0;x=0;xa(712,Ur|0,Gf|0);gs=x;x=0;do if(gs&1){hs=Hc()|0;is=Pr;js=1;ks=hs;ls=M}else{hs=yf;ms=k[hs>>2]|0;ns=k[hs+4>>2]|0;hs=Na+60|0;k[hs>>2]=ms;k[hs+4>>2]=ns;hs=Ma+16|0;k[hs>>2]=0;x=0;os=Ba(563,80)|0;ps=x;x=0;do if(ps&1){qs=Hc()|0;rs=Pr;ss=1;ts=qs;us=M}else{k[os>>2]=28244;qs=os+8|0;k[qs>>2]=k[Na>>2];i[qs+4>>0]=i[Na+4>>0]|0;Df=os+16|0;Ef=Wr;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[os+56>>2]=k[Ur>>2];qs=Na+52|0;k[os+60>>2]=k[qs>>2];vs=Na+56|0;k[os+64>>2]=k[vs>>2];k[vs>>2]=0;k[qs>>2]=0;k[Ur>>2]=0;vs=os+68|0;k[vs>>2]=ms;k[vs+4>>2]=ns;k[hs>>2]=os;k[Pr>>2]=k[Ja>>2];i[Pr+4>>0]=i[Ja+4>>0]|0;Df=n+1352|0;Ef=Jr;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1392|0,Rr|0);vs=x;x=0;P:do if(vs&1){ws=Hc()|0;xs=M;ys=ws;ug=3451}else{ws=Tr;zs=k[ws+4>>2]|0;As=n+1404|0;k[As>>2]=k[ws>>2];k[As+4>>2]=zs;zs=n+1416|0;As=k[hs>>2]|0;Q:do if(!As)k[n+1432>>2]=0;else{do if((As|0)==(Ma|0)){k[n+1432>>2]=zs;x=0;xa(k[(k[As>>2]|0)+12>>2]|0,As|0,zs|0);ws=x;x=0;if(!(ws&1))break Q}else{x=0;ws=Ba(k[(k[As>>2]|0)+8>>2]|0,As|0)|0;Bs=x;x=0;if(Bs&1)break;k[n+1432>>2]=ws;break Q}while(0);ws=Hc()|0;Bs=M;Cs=n+1392|0;Ds=k[Cs>>2]|0;if(!Ds){xs=Bs;ys=ws;ug=3451;break P}Es=n+1396|0;Fs=k[Es>>2]|0;if((Fs|0)==(Ds|0))Gs=Ds;else{Hs=n+1400|0;Is=Fs;do{Fs=Is+-72|0;k[Es>>2]=Fs;i[c>>0]=i[d>>0]|0;uF(c,Hs,Fs);Is=k[Es>>2]|0}while((Is|0)!=(Ds|0));Gs=k[Cs>>2]|0}OBa(Gs);xs=Bs;ys=ws;ug=3451;break P}while(0);As=n+1440|0;k[Qa>>2]=k[e>>2];i[Qa+4>>0]=i[e+4>>0]|0;Df=Qa+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Qa+48|0,Gf|0);zs=x;x=0;do if(zs&1)Js=Qa;else{Ds=yf;Is=k[Ds+4>>2]|0;Es=Qa+60|0;k[Es>>2]=k[Ds>>2];k[Es+4>>2]=Is;Is=Qa+72|0;k[Is>>2]=k[f>>2];i[Is+4>>0]=i[f+4>>0]|0;Df=Qa+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Qa+120|0,Kf|0);ws=x;x=0;if(ws&1){Js=Is;break}ws=zf;Bs=k[ws+4>>2]|0;Cs=Qa+132|0;k[Cs>>2]=k[ws>>2];k[Cs+4>>2]=Bs;k[Pa>>2]=0;Bs=Pa+4|0;k[Bs>>2]=0;k[Pa+8>>2]=0;x=0;Cs=Ba(563,144)|0;ws=x;x=0;R:do if(ws&1){Es=Hc()|0;Ks=Es;Ls=M;ug=3461}else{k[Bs>>2]=Cs;k[Pa>>2]=Cs;k[Pa+8>>2]=Cs+144;k[Cs>>2]=k[Qa>>2];i[Cs+4>>0]=i[Qa+4>>0]|0;Df=Cs+8|0;Ef=Qa+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Cs+48|0,Qa+48|0);Es=x;x=0;do if(!(Es&1)){Ds=Qa+60|0;Hs=k[Ds+4>>2]|0;Fs=Cs+60|0;k[Fs>>2]=k[Ds>>2];k[Fs+4>>2]=Hs;Hs=Cs+72|0;k[Bs>>2]=Hs;Fs=Qa+72|0;k[Hs>>2]=k[Fs>>2];i[Hs+4>>0]=i[Fs+4>>0]|0;Df=Cs+80|0;Ef=Qa+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Cs+120|0,Qa+120|0);Fs=x;x=0;if(Fs&1)break;Fs=Qa+132|0;Hs=k[Fs+4>>2]|0;Ds=Cs+132|0;k[Ds>>2]=k[Fs>>2];k[Ds+4>>2]=Hs;k[Bs>>2]=(k[Bs>>2]|0)+72;k[Oa>>2]=1;i[Oa+4>>0]=1;Hs=Oa+8|0;k[Hs>>2]=22;k[Oa+40>>2]=1;Ds=Oa+48|0;x=0;xa(712,Ds|0,Pa|0);Fs=x;x=0;do if(Fs&1){Ms=Hc()|0;Ns=As;Os=1;Ps=Ms;Qs=M}else{Ms=Oa+60|0;k[Ms>>2]=0;k[Oa+64>>2]=0;k[Sa>>2]=k[e>>2];i[Sa+4>>0]=i[e+4>>0]|0;Rs=Sa+8|0;Df=Rs;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Ss=Sa+48|0;x=0;xa(712,Ss|0,Gf|0);Ts=x;x=0;do if(Ts&1){Us=Hc()|0;Vs=As;Ws=1;Xs=Us;Ys=M}else{Us=Sa+60|0;Zs=yf;_s=k[Zs+4>>2]|0;$s=Us;k[$s>>2]=k[Zs>>2];k[$s+4>>2]=_s;_s=Sa+72|0;k[_s>>2]=k[f>>2];i[_s+4>>0]=i[f+4>>0]|0;$s=Sa+80|0;Df=$s;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Zs=Sa+120|0;x=0;xa(712,Zs|0,Kf|0);at=x;x=0;if(at&1){at=Hc()|0;bt=M;ct=Sa+48|0;dt=k[ct>>2]|0;if(!dt){Vs=As;Ws=1;Xs=at;Ys=bt;break}et=Sa+52|0;ft=k[et>>2]|0;if((ft|0)==(dt|0))gt=dt;else{ht=Sa+56|0;it=ft;do{ft=it+-72|0;k[et>>2]=ft;i[c>>0]=i[d>>0]|0;uF(c,ht,ft);it=k[et>>2]|0}while((it|0)!=(dt|0));gt=k[ct>>2]|0}OBa(gt);Vs=As;Ws=1;Xs=at;Ys=bt;break}dt=zf;it=k[dt>>2]|0;et=k[dt+4>>2]|0;dt=Sa+132|0;k[dt>>2]=it;k[dt+4>>2]=et;dt=Ra+16|0;k[dt>>2]=0;x=0;ht=Ba(563,152)|0;ft=x;x=0;do if(ft&1){jt=Hc()|0;kt=As;lt=1;mt=jt;nt=M}else{k[ht>>2]=28288;jt=ht+8|0;k[jt>>2]=k[Sa>>2];i[jt+4>>0]=i[Sa+4>>0]|0;Df=ht+16|0;Ef=Rs;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[ht+56>>2]=k[Ss>>2];jt=Sa+52|0;k[ht+60>>2]=k[jt>>2];ot=Sa+56|0;k[ht+64>>2]=k[ot>>2];k[ot>>2]=0;k[jt>>2]=0;k[Ss>>2]=0;ot=Us;pt=k[ot+4>>2]|0;qt=ht+68|0;k[qt>>2]=k[ot>>2];k[qt+4>>2]=pt;pt=ht+80|0;k[pt>>2]=k[_s>>2];i[pt+4>>0]=i[_s+4>>0]|0;Df=ht+88|0;Ef=$s;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[ht+128>>2]=k[Zs>>2];pt=Sa+124|0;k[ht+132>>2]=k[pt>>2];qt=Sa+128|0;k[ht+136>>2]=k[qt>>2];k[qt>>2]=0;k[pt>>2]=0;k[Zs>>2]=0;qt=ht+140|0;k[qt>>2]=it;k[qt+4>>2]=et;k[dt>>2]=ht;k[As>>2]=k[Oa>>2];i[As+4>>0]=i[Oa+4>>0]|0;Df=n+1448|0;Ef=Hs;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1488|0,Ds|0);qt=x;x=0;S:do if(qt&1){ot=Hc()|0;rt=M;st=ot;ug=3472}else{ot=Ms;tt=k[ot+4>>2]|0;ut=n+1500|0;k[ut>>2]=k[ot>>2];k[ut+4>>2]=tt;tt=n+1512|0;ut=k[dt>>2]|0;T:do if(!ut)k[n+1528>>2]=0;else{do if((ut|0)==(Ra|0)){k[n+1528>>2]=tt;x=0;xa(k[(k[ut>>2]|0)+12>>2]|0,ut|0,tt|0);ot=x;x=0;if(!(ot&1))break T}else{x=0;ot=Ba(k[(k[ut>>2]|0)+8>>2]|0,ut|0)|0;vt=x;x=0;if(vt&1)break;k[n+1528>>2]=ot;break T}while(0);ot=Hc()|0;vt=M;wt=n+1488|0;xt=k[wt>>2]|0;if(!xt){rt=vt;st=ot;ug=3472;break S}yt=n+1492|0;zt=k[yt>>2]|0;if((zt|0)==(xt|0))At=xt;else{Bt=n+1496|0;Ct=zt;do{zt=Ct+-72|0;k[yt>>2]=zt;i[c>>0]=i[d>>0]|0;uF(c,Bt,zt);Ct=k[yt>>2]|0}while((Ct|0)!=(xt|0));At=k[wt>>2]|0}OBa(At);rt=vt;st=ot;ug=3472;break S}while(0);ut=n+1536|0;k[Wa>>2]=k[e>>2];i[Wa+4>>0]=i[e+4>>0]|0;Df=Wa+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Wa+48|0,Gf|0);tt=x;x=0;do if(tt&1)Dt=Wa;else{xt=yf;Ct=k[xt+4>>2]|0;yt=Wa+60|0;k[yt>>2]=k[xt>>2];k[yt+4>>2]=Ct;Ct=Wa+72|0;k[Ct>>2]=k[f>>2];i[Ct+4>>0]=i[f+4>>0]|0;Df=Wa+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Wa+120|0,Kf|0);ot=x;x=0;if(ot&1){Dt=Ct;break}ot=zf;vt=k[ot+4>>2]|0;wt=Wa+132|0;k[wt>>2]=k[ot>>2];k[wt+4>>2]=vt;k[Va>>2]=0;vt=Va+4|0;k[vt>>2]=0;k[Va+8>>2]=0;x=0;wt=Ba(563,144)|0;ot=x;x=0;U:do if(ot&1){yt=Hc()|0;Et=yt;Ft=M;ug=3482}else{k[vt>>2]=wt;k[Va>>2]=wt;k[Va+8>>2]=wt+144;k[wt>>2]=k[Wa>>2];i[wt+4>>0]=i[Wa+4>>0]|0;Df=wt+8|0;Ef=Wa+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,wt+48|0,Wa+48|0);yt=x;x=0;do if(!(yt&1)){xt=Wa+60|0;Bt=k[xt+4>>2]|0;zt=wt+60|0;k[zt>>2]=k[xt>>2];k[zt+4>>2]=Bt;Bt=wt+72|0;k[vt>>2]=Bt;zt=Wa+72|0;k[Bt>>2]=k[zt>>2];i[Bt+4>>0]=i[zt+4>>0]|0;Df=wt+80|0;Ef=Wa+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,wt+120|0,Wa+120|0);zt=x;x=0;if(zt&1)break;zt=Wa+132|0;Bt=k[zt+4>>2]|0;xt=wt+132|0;k[xt>>2]=k[zt>>2];k[xt+4>>2]=Bt;k[vt>>2]=(k[vt>>2]|0)+72;k[Ua>>2]=1;i[Ua+4>>0]=1;Bt=Ua+8|0;k[Bt>>2]=23;k[Ua+40>>2]=1;xt=Ua+48|0;x=0;xa(712,xt|0,Va|0);zt=x;x=0;do if(zt&1){Gt=Hc()|0;Ht=ut;It=1;Jt=Gt;Kt=M}else{Gt=Ua+60|0;k[Gt>>2]=0;k[Ua+64>>2]=0;k[Ya>>2]=k[e>>2];i[Ya+4>>0]=i[e+4>>0]|0;Lt=Ya+8|0;Df=Lt;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Mt=Ya+48|0;x=0;xa(712,Mt|0,Gf|0);Nt=x;x=0;do if(Nt&1){Ot=Hc()|0;Pt=ut;Qt=1;Rt=Ot;St=M}else{Ot=Ya+60|0;Tt=yf;Ut=k[Tt+4>>2]|0;Vt=Ot;k[Vt>>2]=k[Tt>>2];k[Vt+4>>2]=Ut;Ut=Ya+72|0;k[Ut>>2]=k[f>>2];i[Ut+4>>0]=i[f+4>>0]|0;Vt=Ya+80|0;Df=Vt;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Tt=Ya+120|0;x=0;xa(712,Tt|0,Kf|0);Wt=x;x=0;if(Wt&1){Wt=Hc()|0;Xt=M;Yt=Ya+48|0;Zt=k[Yt>>2]|0;if(!Zt){Pt=ut;Qt=1;Rt=Wt;St=Xt;break}_t=Ya+52|0;$t=k[_t>>2]|0;if(($t|0)==(Zt|0))au=Zt;else{bu=Ya+56|0;cu=$t;do{$t=cu+-72|0;k[_t>>2]=$t;i[c>>0]=i[d>>0]|0;uF(c,bu,$t);cu=k[_t>>2]|0}while((cu|0)!=(Zt|0));au=k[Yt>>2]|0}OBa(au);Pt=ut;Qt=1;Rt=Wt;St=Xt;break}Zt=zf;cu=k[Zt>>2]|0;_t=k[Zt+4>>2]|0;Zt=Ya+132|0;k[Zt>>2]=cu;k[Zt+4>>2]=_t;Zt=Xa+16|0;k[Zt>>2]=0;x=0;bu=Ba(563,152)|0;$t=x;x=0;do if($t&1){du=Hc()|0;eu=ut;fu=1;gu=du;hu=M}else{k[bu>>2]=28332;du=bu+8|0;k[du>>2]=k[Ya>>2];i[du+4>>0]=i[Ya+4>>0]|0;Df=bu+16|0;Ef=Lt;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[bu+56>>2]=k[Mt>>2];du=Ya+52|0;k[bu+60>>2]=k[du>>2];iu=Ya+56|0;k[bu+64>>2]=k[iu>>2];k[iu>>2]=0;k[du>>2]=0;k[Mt>>2]=0;iu=Ot;ju=k[iu+4>>2]|0;ku=bu+68|0;k[ku>>2]=k[iu>>2];k[ku+4>>2]=ju;ju=bu+80|0;k[ju>>2]=k[Ut>>2];i[ju+4>>0]=i[Ut+4>>0]|0;Df=bu+88|0;Ef=Vt;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[bu+128>>2]=k[Tt>>2];ju=Ya+124|0;k[bu+132>>2]=k[ju>>2];ku=Ya+128|0;k[bu+136>>2]=k[ku>>2];k[ku>>2]=0;k[ju>>2]=0;k[Tt>>2]=0;ku=bu+140|0;k[ku>>2]=cu;k[ku+4>>2]=_t;k[Zt>>2]=bu;k[ut>>2]=k[Ua>>2];i[ut+4>>0]=i[Ua+4>>0]|0;Df=n+1544|0;Ef=Bt;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1584|0,xt|0);ku=x;x=0;V:do if(ku&1){iu=Hc()|0;lu=M;mu=iu;ug=3493}else{iu=Gt;nu=k[iu+4>>2]|0;ou=n+1596|0;k[ou>>2]=k[iu>>2];k[ou+4>>2]=nu;nu=n+1608|0;ou=k[Zt>>2]|0;W:do if(!ou)k[n+1624>>2]=0;else{do if((ou|0)==(Xa|0)){k[n+1624>>2]=nu;x=0;xa(k[(k[ou>>2]|0)+12>>2]|0,ou|0,nu|0);iu=x;x=0;if(!(iu&1))break W}else{x=0;iu=Ba(k[(k[ou>>2]|0)+8>>2]|0,ou|0)|0;pu=x;x=0;if(pu&1)break;k[n+1624>>2]=iu;break W}while(0);iu=Hc()|0;pu=M;qu=n+1584|0;ru=k[qu>>2]|0;if(!ru){lu=pu;mu=iu;ug=3493;break V}su=n+1588|0;tu=k[su>>2]|0;if((tu|0)==(ru|0))uu=ru;else{vu=n+1592|0;wu=tu;do{tu=wu+-72|0;k[su>>2]=tu;i[c>>0]=i[d>>0]|0;uF(c,vu,tu);wu=k[su>>2]|0}while((wu|0)!=(ru|0));uu=k[qu>>2]|0}OBa(uu);lu=pu;mu=iu;ug=3493;break V}while(0);ou=n+1632|0;k[$a>>2]=k[e>>2];i[$a+4>>0]=i[e+4>>0]|0;Df=$a+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$a+48|0,Gf|0);nu=x;x=0;do if(nu&1)xu=$a;else{ru=yf;wu=k[ru+4>>2]|0;su=$a+60|0;k[su>>2]=k[ru>>2];k[su+4>>2]=wu;wu=$a+72|0;k[wu>>2]=k[f>>2];i[wu+4>>0]=i[f+4>>0]|0;Df=$a+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$a+120|0,Kf|0);iu=x;x=0;if(iu&1){xu=wu;break}iu=zf;pu=k[iu+4>>2]|0;qu=$a+132|0;k[qu>>2]=k[iu>>2];k[qu+4>>2]=pu;k[_a>>2]=0;pu=_a+4|0;k[pu>>2]=0;k[_a+8>>2]=0;x=0;qu=Ba(563,144)|0;iu=x;x=0;X:do if(iu&1){su=Hc()|0;yu=su;zu=M;ug=3503}else{k[pu>>2]=qu;k[_a>>2]=qu;k[_a+8>>2]=qu+144;k[qu>>2]=k[$a>>2];i[qu+4>>0]=i[$a+4>>0]|0;Df=qu+8|0;Ef=$a+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,qu+48|0,$a+48|0);su=x;x=0;do if(!(su&1)){ru=$a+60|0;vu=k[ru+4>>2]|0;tu=qu+60|0;k[tu>>2]=k[ru>>2];k[tu+4>>2]=vu;vu=qu+72|0;k[pu>>2]=vu;tu=$a+72|0;k[vu>>2]=k[tu>>2];i[vu+4>>0]=i[tu+4>>0]|0;Df=qu+80|0;Ef=$a+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,qu+120|0,$a+120|0);tu=x;x=0;if(tu&1)break;tu=$a+132|0;vu=k[tu+4>>2]|0;ru=qu+132|0;k[ru>>2]=k[tu>>2];k[ru+4>>2]=vu;k[pu>>2]=(k[pu>>2]|0)+72;k[Za>>2]=1;i[Za+4>>0]=1;vu=Za+8|0;k[vu>>2]=24;k[Za+40>>2]=1;ru=Za+48|0;x=0;xa(712,ru|0,_a|0);tu=x;x=0;do if(tu&1){Au=Hc()|0;Bu=ou;Cu=1;Du=Au;Eu=M}else{Au=Za+60|0;k[Au>>2]=0;k[Za+64>>2]=0;k[bb>>2]=k[e>>2];i[bb+4>>0]=i[e+4>>0]|0;Fu=bb+8|0;Df=Fu;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Gu=bb+48|0;x=0;xa(712,Gu|0,Gf|0);Hu=x;x=0;do if(Hu&1){Iu=Hc()|0;Ju=ou;Ku=1;Lu=Iu;Mu=M}else{Iu=bb+60|0;Nu=yf;Ou=k[Nu+4>>2]|0;Pu=Iu;k[Pu>>2]=k[Nu>>2];k[Pu+4>>2]=Ou;Ou=bb+72|0;k[Ou>>2]=k[f>>2];i[Ou+4>>0]=i[f+4>>0]|0;Pu=bb+80|0;Df=Pu;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Nu=bb+120|0;x=0;xa(712,Nu|0,Kf|0);Qu=x;x=0;if(Qu&1){Qu=Hc()|0;Ru=M;Su=bb+48|0;Tu=k[Su>>2]|0;if(!Tu){Ju=ou;Ku=1;Lu=Qu;Mu=Ru;break}Uu=bb+52|0;Vu=k[Uu>>2]|0;if((Vu|0)==(Tu|0))Wu=Tu;else{Xu=bb+56|0;Yu=Vu;do{Vu=Yu+-72|0;k[Uu>>2]=Vu;i[c>>0]=i[d>>0]|0;uF(c,Xu,Vu);Yu=k[Uu>>2]|0}while((Yu|0)!=(Tu|0));Wu=k[Su>>2]|0}OBa(Wu);Ju=ou;Ku=1;Lu=Qu;Mu=Ru;break}Tu=zf;Yu=k[Tu>>2]|0;Uu=k[Tu+4>>2]|0;Tu=bb+132|0;k[Tu>>2]=Yu;k[Tu+4>>2]=Uu;Tu=ab+16|0;k[Tu>>2]=0;x=0;Xu=Ba(563,152)|0;Vu=x;x=0;do if(Vu&1){Zu=Hc()|0;_u=ou;$u=1;av=Zu;bv=M}else{k[Xu>>2]=28376;Zu=Xu+8|0;k[Zu>>2]=k[bb>>2];i[Zu+4>>0]=i[bb+4>>0]|0;Df=Xu+16|0;Ef=Fu;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Xu+56>>2]=k[Gu>>2];Zu=bb+52|0;k[Xu+60>>2]=k[Zu>>2];cv=bb+56|0;k[Xu+64>>2]=k[cv>>2];k[cv>>2]=0;k[Zu>>2]=0;k[Gu>>2]=0;cv=Iu;dv=k[cv+4>>2]|0;ev=Xu+68|0;k[ev>>2]=k[cv>>2];k[ev+4>>2]=dv;dv=Xu+80|0;k[dv>>2]=k[Ou>>2];i[dv+4>>0]=i[Ou+4>>0]|0;Df=Xu+88|0;Ef=Pu;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Xu+128>>2]=k[Nu>>2];dv=bb+124|0;k[Xu+132>>2]=k[dv>>2];ev=bb+128|0;k[Xu+136>>2]=k[ev>>2];k[ev>>2]=0;k[dv>>2]=0;k[Nu>>2]=0;ev=Xu+140|0;k[ev>>2]=Yu;k[ev+4>>2]=Uu;k[Tu>>2]=Xu;k[ou>>2]=k[Za>>2];i[ou+4>>0]=i[Za+4>>0]|0;Df=n+1640|0;Ef=vu;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1680|0,ru|0);ev=x;x=0;Y:do if(ev&1){cv=Hc()|0;fv=M;gv=cv;ug=3514}else{cv=Au;hv=k[cv+4>>2]|0;iv=n+1692|0;k[iv>>2]=k[cv>>2];k[iv+4>>2]=hv;hv=n+1704|0;iv=k[Tu>>2]|0;Z:do if(!iv)k[n+1720>>2]=0;else{do if((iv|0)==(ab|0)){k[n+1720>>2]=hv;x=0;xa(k[(k[iv>>2]|0)+12>>2]|0,iv|0,hv|0);cv=x;x=0;if(!(cv&1))break Z}else{x=0;cv=Ba(k[(k[iv>>2]|0)+8>>2]|0,iv|0)|0;jv=x;x=0;if(jv&1)break;k[n+1720>>2]=cv;break Z}while(0);cv=Hc()|0;jv=M;kv=n+1680|0;lv=k[kv>>2]|0;if(!lv){fv=jv;gv=cv;ug=3514;break Y}mv=n+1684|0;nv=k[mv>>2]|0;if((nv|0)==(lv|0))ov=lv;else{pv=n+1688|0;qv=nv;do{nv=qv+-72|0;k[mv>>2]=nv;i[c>>0]=i[d>>0]|0;uF(c,pv,nv);qv=k[mv>>2]|0}while((qv|0)!=(lv|0));ov=k[kv>>2]|0}OBa(ov);fv=jv;gv=cv;ug=3514;break Y}while(0);iv=n+1728|0;k[eb>>2]=k[e>>2];i[eb+4>>0]=i[e+4>>0]|0;Df=eb+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,eb+48|0,Gf|0);hv=x;x=0;do if(hv&1)rv=eb;else{lv=yf;qv=k[lv+4>>2]|0;mv=eb+60|0;k[mv>>2]=k[lv>>2];k[mv+4>>2]=qv;qv=eb+72|0;k[qv>>2]=k[f>>2];i[qv+4>>0]=i[f+4>>0]|0;Df=eb+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,eb+120|0,Kf|0);cv=x;x=0;if(cv&1){rv=qv;break}cv=zf;jv=k[cv+4>>2]|0;kv=eb+132|0;k[kv>>2]=k[cv>>2];k[kv+4>>2]=jv;k[db>>2]=0;jv=db+4|0;k[jv>>2]=0;k[db+8>>2]=0;x=0;kv=Ba(563,144)|0;cv=x;x=0;_:do if(cv&1){mv=Hc()|0;sv=mv;tv=M;ug=3524}else{k[jv>>2]=kv;k[db>>2]=kv;k[db+8>>2]=kv+144;k[kv>>2]=k[eb>>2];i[kv+4>>0]=i[eb+4>>0]|0;Df=kv+8|0;Ef=eb+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,kv+48|0,eb+48|0);mv=x;x=0;do if(!(mv&1)){lv=eb+60|0;pv=k[lv+4>>2]|0;nv=kv+60|0;k[nv>>2]=k[lv>>2];k[nv+4>>2]=pv;pv=kv+72|0;k[jv>>2]=pv;nv=eb+72|0;k[pv>>2]=k[nv>>2];i[pv+4>>0]=i[nv+4>>0]|0;Df=kv+80|0;Ef=eb+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,kv+120|0,eb+120|0);nv=x;x=0;if(nv&1)break;nv=eb+132|0;pv=k[nv+4>>2]|0;lv=kv+132|0;k[lv>>2]=k[nv>>2];k[lv+4>>2]=pv;k[jv>>2]=(k[jv>>2]|0)+72;k[cb>>2]=1;i[cb+4>>0]=1;pv=cb+8|0;k[pv>>2]=26;k[cb+40>>2]=1;lv=cb+48|0;x=0;xa(712,lv|0,db|0);nv=x;x=0;do if(nv&1){uv=Hc()|0;vv=iv;wv=1;xv=uv;yv=M}else{uv=cb+60|0;k[uv>>2]=0;k[cb+64>>2]=0;k[hb>>2]=k[e>>2];i[hb+4>>0]=i[e+4>>0]|0;zv=hb+8|0;Df=zv;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Av=hb+48|0;x=0;xa(712,Av|0,Gf|0);Bv=x;x=0;do if(Bv&1){Cv=Hc()|0;Dv=iv;Ev=1;Fv=Cv;Gv=M}else{Cv=hb+60|0;Hv=yf;Iv=k[Hv+4>>2]|0;Jv=Cv;k[Jv>>2]=k[Hv>>2];k[Jv+4>>2]=Iv;Iv=hb+72|0;k[Iv>>2]=k[f>>2];i[Iv+4>>0]=i[f+4>>0]|0;Jv=hb+80|0;Df=Jv;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Hv=hb+120|0;x=0;xa(712,Hv|0,Kf|0);Kv=x;x=0;if(Kv&1){Kv=Hc()|0;Lv=M;Mv=hb+48|0;Nv=k[Mv>>2]|0;if(!Nv){Dv=iv;Ev=1;Fv=Kv;Gv=Lv;break}Ov=hb+52|0;Pv=k[Ov>>2]|0;if((Pv|0)==(Nv|0))Qv=Nv;else{Rv=hb+56|0;Sv=Pv;do{Pv=Sv+-72|0;k[Ov>>2]=Pv;i[c>>0]=i[d>>0]|0;uF(c,Rv,Pv);Sv=k[Ov>>2]|0}while((Sv|0)!=(Nv|0));Qv=k[Mv>>2]|0}OBa(Qv);Dv=iv;Ev=1;Fv=Kv;Gv=Lv;break}Nv=zf;Sv=k[Nv>>2]|0;Ov=k[Nv+4>>2]|0;Nv=hb+132|0;k[Nv>>2]=Sv;k[Nv+4>>2]=Ov;Nv=gb+16|0;k[Nv>>2]=0;x=0;Rv=Ba(563,152)|0;Pv=x;x=0;do if(Pv&1){Tv=Hc()|0;Uv=iv;Vv=1;Wv=Tv;Xv=M}else{k[Rv>>2]=28420;Tv=Rv+8|0;k[Tv>>2]=k[hb>>2];i[Tv+4>>0]=i[hb+4>>0]|0;Df=Rv+16|0;Ef=zv;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Rv+56>>2]=k[Av>>2];Tv=hb+52|0;k[Rv+60>>2]=k[Tv>>2];Yv=hb+56|0;k[Rv+64>>2]=k[Yv>>2];k[Yv>>2]=0;k[Tv>>2]=0;k[Av>>2]=0;Yv=Cv;Zv=k[Yv+4>>2]|0;_v=Rv+68|0;k[_v>>2]=k[Yv>>2];k[_v+4>>2]=Zv;Zv=Rv+80|0;k[Zv>>2]=k[Iv>>2];i[Zv+4>>0]=i[Iv+4>>0]|0;Df=Rv+88|0;Ef=Jv;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Rv+128>>2]=k[Hv>>2];Zv=hb+124|0;k[Rv+132>>2]=k[Zv>>2];_v=hb+128|0;k[Rv+136>>2]=k[_v>>2];k[_v>>2]=0;k[Zv>>2]=0;k[Hv>>2]=0;_v=Rv+140|0;k[_v>>2]=Sv;k[_v+4>>2]=Ov;k[Nv>>2]=Rv;k[iv>>2]=k[cb>>2];i[iv+4>>0]=i[cb+4>>0]|0;Df=n+1736|0;Ef=pv;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1776|0,lv|0);_v=x;x=0;$:do if(_v&1){Yv=Hc()|0;$v=M;aw=Yv;ug=3535}else{Yv=uv;bw=k[Yv+4>>2]|0;cw=n+1788|0;k[cw>>2]=k[Yv>>2];k[cw+4>>2]=bw;bw=n+1800|0;cw=k[Nv>>2]|0;aa:do if(!cw)k[n+1816>>2]=0;else{do if((cw|0)==(gb|0)){k[n+1816>>2]=bw;x=0;xa(k[(k[cw>>2]|0)+12>>2]|0,cw|0,bw|0);Yv=x;x=0;if(!(Yv&1))break aa}else{x=0;Yv=Ba(k[(k[cw>>2]|0)+8>>2]|0,cw|0)|0;dw=x;x=0;if(dw&1)break;k[n+1816>>2]=Yv;break aa}while(0);Yv=Hc()|0;dw=M;ew=n+1776|0;fw=k[ew>>2]|0;if(!fw){$v=dw;aw=Yv;ug=3535;break $}gw=n+1780|0;hw=k[gw>>2]|0;if((hw|0)==(fw|0))iw=fw;else{jw=n+1784|0;kw=hw;do{hw=kw+-72|0;k[gw>>2]=hw;i[c>>0]=i[d>>0]|0;uF(c,jw,hw);kw=k[gw>>2]|0}while((kw|0)!=(fw|0));iw=k[ew>>2]|0}OBa(iw);$v=dw;aw=Yv;ug=3535;break $}while(0);cw=n+1824|0;k[kb>>2]=k[e>>2];i[kb+4>>0]=i[e+4>>0]|0;Df=kb+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,kb+48|0,Gf|0);bw=x;x=0;do if(bw&1)lw=kb;else{fw=yf;kw=k[fw+4>>2]|0;gw=kb+60|0;k[gw>>2]=k[fw>>2];k[gw+4>>2]=kw;kw=kb+72|0;k[kw>>2]=k[f>>2];i[kw+4>>0]=i[f+4>>0]|0;Df=kb+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,kb+120|0,Kf|0);Yv=x;x=0;if(Yv&1){lw=kw;break}Yv=zf;dw=k[Yv+4>>2]|0;ew=kb+132|0;k[ew>>2]=k[Yv>>2];k[ew+4>>2]=dw;dw=kb+144|0;k[dw>>2]=k[g>>2];i[dw+4>>0]=i[g+4>>0]|0;Df=kb+152|0;Ef=rf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));kw=g+48|0;x=0;xa(712,kb+192|0,kw|0);ew=x;x=0;if(ew&1){lw=dw;break}ew=Af;Yv=k[ew+4>>2]|0;gw=kb+204|0;k[gw>>2]=k[ew>>2];k[gw+4>>2]=Yv;k[jb>>2]=0;Yv=jb+4|0;k[Yv>>2]=0;k[jb+8>>2]=0;x=0;gw=Ba(563,216)|0;ew=x;x=0;ba:do if(ew&1){fw=Hc()|0;mw=fw;nw=M;ug=3545}else{k[Yv>>2]=gw;k[jb>>2]=gw;k[jb+8>>2]=gw+216;k[gw>>2]=k[kb>>2];i[gw+4>>0]=i[kb+4>>0]|0;Df=gw+8|0;Ef=kb+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,gw+48|0,kb+48|0);fw=x;x=0;do if(!(fw&1)){jw=kb+60|0;hw=k[jw+4>>2]|0;ow=gw+60|0;k[ow>>2]=k[jw>>2];k[ow+4>>2]=hw;hw=gw+72|0;k[Yv>>2]=hw;ow=kb+72|0;k[hw>>2]=k[ow>>2];i[hw+4>>0]=i[ow+4>>0]|0;Df=gw+80|0;Ef=kb+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,gw+120|0,kb+120|0);ow=x;x=0;if(ow&1)break;ow=kb+132|0;hw=k[ow+4>>2]|0;jw=gw+132|0;k[jw>>2]=k[ow>>2];k[jw+4>>2]=hw;hw=k[Yv>>2]|0;jw=hw+72|0;k[Yv>>2]=jw;ow=kb+144|0;k[jw>>2]=k[ow>>2];i[jw+4>>0]=i[ow+4>>0]|0;Df=hw+80|0;Ef=kb+152|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hw+120|0,kb+192|0);ow=x;x=0;if(ow&1)break;ow=kb+204|0;jw=k[ow+4>>2]|0;pw=hw+132|0;k[pw>>2]=k[ow>>2];k[pw+4>>2]=jw;k[Yv>>2]=hw+144;k[ib>>2]=1;i[ib+4>>0]=1;jw=ib+8|0;k[jw>>2]=8;k[ib+40>>2]=1;pw=ib+48|0;x=0;xa(712,pw|0,jb|0);ow=x;x=0;do if(ow&1){qw=Hc()|0;rw=cw;sw=1;tw=qw;uw=M}else{qw=ib+60|0;k[qw>>2]=0;k[ib+64>>2]=0;k[mb>>2]=k[g>>2];i[mb+4>>0]=i[g+4>>0]|0;vw=mb+8|0;Df=vw;Ef=rf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));ww=mb+48|0;x=0;xa(712,ww|0,kw|0);xw=x;x=0;ca:do if(xw&1){yw=Hc()|0;zw=cw;Aw=1;Bw=yw;Cw=M}else{yw=mb+60|0;Dw=Af;Ew=k[Dw>>2]|0;Fw=k[Dw+4>>2]|0;Dw=yw;k[Dw>>2]=Ew;k[Dw+4>>2]=Fw;Dw=mb+72|0;k[Dw>>2]=k[e>>2];i[Dw+4>>0]=i[e+4>>0]|0;Gw=mb+80|0;Df=Gw;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Hw=mb+120|0;x=0;xa(712,Hw|0,Gf|0);Iw=x;x=0;do if(Iw&1){Jw=Hc()|0;Kw=Jw;Lw=M}else{Jw=mb+132|0;Mw=yf;Nw=k[Mw+4>>2]|0;Ow=Jw;k[Ow>>2]=k[Mw>>2];k[Ow+4>>2]=Nw;Nw=mb+144|0;k[Nw>>2]=k[f>>2];i[Nw+4>>0]=i[f+4>>0]|0;Ow=mb+152|0;Df=Ow;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Mw=mb+192|0;x=0;xa(712,Mw|0,Kf|0);Pw=x;x=0;if(Pw&1){Pw=Hc()|0;Qw=M;Rw=mb+120|0;Sw=k[Rw>>2]|0;if(!Sw){Kw=Pw;Lw=Qw;break}Tw=mb+124|0;Uw=k[Tw>>2]|0;if((Uw|0)==(Sw|0))Vw=Sw;else{Ww=mb+128|0;Xw=Uw;do{Uw=Xw+-72|0;k[Tw>>2]=Uw;i[c>>0]=i[d>>0]|0;uF(c,Ww,Uw);Xw=k[Tw>>2]|0}while((Xw|0)!=(Sw|0));Vw=k[Rw>>2]|0}OBa(Vw);Kw=Pw;Lw=Qw;break}Sw=zf;Xw=k[Sw>>2]|0;Tw=k[Sw+4>>2]|0;Sw=mb+204|0;k[Sw>>2]=Xw;k[Sw+4>>2]=Tw;Sw=lb+16|0;k[Sw>>2]=0;x=0;Ww=Ba(563,224)|0;Uw=x;x=0;do if(Uw&1){Yw=Hc()|0;Zw=cw;_w=1;$w=Yw;ax=M}else{k[Ww>>2]=28464;Yw=Ww+8|0;k[Yw>>2]=k[mb>>2];i[Yw+4>>0]=i[mb+4>>0]|0;Df=Ww+16|0;Ef=vw;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Ww+56>>2]=k[ww>>2];Yw=mb+52|0;k[Ww+60>>2]=k[Yw>>2];bx=mb+56|0;k[Ww+64>>2]=k[bx>>2];k[bx>>2]=0;k[Yw>>2]=0;k[ww>>2]=0;bx=yw;cx=k[bx+4>>2]|0;dx=Ww+68|0;k[dx>>2]=k[bx>>2];k[dx+4>>2]=cx;cx=Ww+80|0;k[cx>>2]=k[Dw>>2];i[cx+4>>0]=i[Dw+4>>0]|0;Df=Ww+88|0;Ef=Gw;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Ww+128>>2]=k[Hw>>2];cx=mb+124|0;k[Ww+132>>2]=k[cx>>2];dx=mb+128|0;k[Ww+136>>2]=k[dx>>2];k[dx>>2]=0;k[cx>>2]=0;k[Hw>>2]=0;dx=Jw;bx=k[dx+4>>2]|0;ex=Ww+140|0;k[ex>>2]=k[dx>>2];k[ex+4>>2]=bx;bx=Ww+152|0;k[bx>>2]=k[Nw>>2];i[bx+4>>0]=i[Nw+4>>0]|0;Df=Ww+160|0;Ef=Ow;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Ww+200>>2]=k[Mw>>2];bx=mb+196|0;k[Ww+204>>2]=k[bx>>2];ex=mb+200|0;k[Ww+208>>2]=k[ex>>2];k[ex>>2]=0;k[bx>>2]=0;k[Mw>>2]=0;ex=Ww+212|0;k[ex>>2]=Xw;k[ex+4>>2]=Tw;k[Sw>>2]=Ww;k[cw>>2]=k[ib>>2];i[cw+4>>0]=i[ib+4>>0]|0;Df=n+1832|0;Ef=jw;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1872|0,pw|0);ex=x;x=0;da:do if(ex&1){dx=Hc()|0;fx=M;gx=dx;ug=3563}else{dx=qw;hx=k[dx+4>>2]|0;ix=n+1884|0;k[ix>>2]=k[dx>>2];k[ix+4>>2]=hx;hx=n+1896|0;ix=k[Sw>>2]|0;ea:do if(!ix)k[n+1912>>2]=0;else{do if((ix|0)==(lb|0)){k[n+1912>>2]=hx;x=0;xa(k[(k[ix>>2]|0)+12>>2]|0,ix|0,hx|0);dx=x;x=0;if(!(dx&1))break ea}else{x=0;dx=Ba(k[(k[ix>>2]|0)+8>>2]|0,ix|0)|0;jx=x;x=0;if(jx&1)break;k[n+1912>>2]=dx;break ea}while(0);dx=Hc()|0;jx=M;kx=n+1872|0;lx=k[kx>>2]|0;if(!lx){fx=jx;gx=dx;ug=3563;break da}mx=n+1876|0;nx=k[mx>>2]|0;if((nx|0)==(lx|0))ox=lx;else{px=n+1880|0;qx=nx;do{nx=qx+-72|0;k[mx>>2]=nx;i[c>>0]=i[d>>0]|0;uF(c,px,nx);qx=k[mx>>2]|0}while((qx|0)!=(lx|0));ox=k[kx>>2]|0}OBa(ox);fx=jx;gx=dx;ug=3563;break da}while(0);ix=n+1920|0;k[pb>>2]=k[e>>2];i[pb+4>>0]=i[e+4>>0]|0;Df=pb+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pb+48|0,Gf|0);hx=x;x=0;do if(hx&1)rx=pb;else{lx=yf;qx=k[lx+4>>2]|0;mx=pb+60|0;k[mx>>2]=k[lx>>2];k[mx+4>>2]=qx;qx=pb+72|0;k[qx>>2]=k[f>>2];i[qx+4>>0]=i[f+4>>0]|0;Df=pb+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pb+120|0,Kf|0);dx=x;x=0;if(dx&1){rx=qx;break}dx=zf;jx=k[dx+4>>2]|0;kx=pb+132|0;k[kx>>2]=k[dx>>2];k[kx+4>>2]=jx;jx=pb+144|0;k[jx>>2]=k[g>>2];i[jx+4>>0]=i[g+4>>0]|0;Df=pb+152|0;Ef=rf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pb+192|0,kw|0);qx=x;x=0;if(qx&1){rx=jx;break}qx=pb+204|0;k[qx>>2]=Ew;k[qx+4>>2]=Fw;k[ob>>2]=0;qx=ob+4|0;k[qx>>2]=0;k[ob+8>>2]=0;x=0;kx=Ba(563,216)|0;dx=x;x=0;fa:do if(dx&1){mx=Hc()|0;sx=mx;tx=M;ug=3573}else{k[qx>>2]=kx;k[ob>>2]=kx;k[ob+8>>2]=kx+216;k[kx>>2]=k[pb>>2];i[kx+4>>0]=i[pb+4>>0]|0;Df=kx+8|0;Ef=pb+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,kx+48|0,pb+48|0);mx=x;x=0;do if(!(mx&1)){lx=pb+60|0;px=k[lx+4>>2]|0;nx=kx+60|0;k[nx>>2]=k[lx>>2];k[nx+4>>2]=px;px=kx+72|0;k[qx>>2]=px;nx=pb+72|0;k[px>>2]=k[nx>>2];i[px+4>>0]=i[nx+4>>0]|0;Df=kx+80|0;Ef=pb+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,kx+120|0,pb+120|0);nx=x;x=0;if(nx&1)break;nx=pb+132|0;px=k[nx+4>>2]|0;lx=kx+132|0;k[lx>>2]=k[nx>>2];k[lx+4>>2]=px;px=k[qx>>2]|0;lx=px+72|0;k[qx>>2]=lx;nx=pb+144|0;k[lx>>2]=k[nx>>2];i[lx+4>>0]=i[nx+4>>0]|0;Df=px+80|0;Ef=pb+152|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,px+120|0,pb+192|0);nx=x;x=0;if(nx&1)break;nx=pb+204|0;lx=k[nx+4>>2]|0;ux=px+132|0;k[ux>>2]=k[nx>>2];k[ux+4>>2]=lx;k[qx>>2]=px+144;k[nb>>2]=1;i[nb+4>>0]=1;lx=nb+8|0;k[lx>>2]=9;k[nb+40>>2]=1;ux=nb+48|0;x=0;xa(712,ux|0,ob|0);nx=x;x=0;do if(nx&1){vx=Hc()|0;wx=ix;xx=1;yx=vx;zx=M}else{vx=nb+60|0;k[vx>>2]=0;k[nb+64>>2]=0;k[rb>>2]=k[g>>2];i[rb+4>>0]=i[g+4>>0]|0;Ax=rb+8|0;Df=Ax;Ef=rf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Bx=rb+48|0;x=0;xa(712,Bx|0,kw|0);Cx=x;x=0;ga:do if(Cx&1){Dx=Hc()|0;Ex=ix;Fx=1;Gx=Dx;Hx=M}else{Dx=rb+60|0;Ix=Af;Jx=k[Ix>>2]|0;Kx=k[Ix+4>>2]|0;Ix=Dx;k[Ix>>2]=Jx;k[Ix+4>>2]=Kx;Ix=rb+72|0;k[Ix>>2]=k[e>>2];i[Ix+4>>0]=i[e+4>>0]|0;Lx=rb+80|0;Df=Lx;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Mx=rb+120|0;x=0;xa(712,Mx|0,Gf|0);Nx=x;x=0;do if(Nx&1){Ox=Hc()|0;Px=Ox;Qx=M}else{Ox=rb+132|0;Rx=yf;Sx=k[Rx+4>>2]|0;Tx=Ox;k[Tx>>2]=k[Rx>>2];k[Tx+4>>2]=Sx;Sx=rb+144|0;k[Sx>>2]=k[f>>2];i[Sx+4>>0]=i[f+4>>0]|0;Tx=rb+152|0;Df=Tx;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Rx=rb+192|0;x=0;xa(712,Rx|0,Kf|0);Ux=x;x=0;if(Ux&1){Ux=Hc()|0;Vx=M;Wx=rb+120|0;Xx=k[Wx>>2]|0;if(!Xx){Px=Ux;Qx=Vx;break}Yx=rb+124|0;Zx=k[Yx>>2]|0;if((Zx|0)==(Xx|0))_x=Xx;else{$x=rb+128|0;ay=Zx;do{Zx=ay+-72|0;k[Yx>>2]=Zx;i[c>>0]=i[d>>0]|0;uF(c,$x,Zx);ay=k[Yx>>2]|0}while((ay|0)!=(Xx|0));_x=k[Wx>>2]|0}OBa(_x);Px=Ux;Qx=Vx;break}Xx=zf;ay=k[Xx>>2]|0;Yx=k[Xx+4>>2]|0;Xx=rb+204|0;k[Xx>>2]=ay;k[Xx+4>>2]=Yx;Xx=qb+16|0;k[Xx>>2]=0;x=0;$x=Ba(563,224)|0;Zx=x;x=0;do if(Zx&1){by=Hc()|0;cy=ix;dy=1;ey=by;fy=M}else{k[$x>>2]=28508;by=$x+8|0;k[by>>2]=k[rb>>2];i[by+4>>0]=i[rb+4>>0]|0;Df=$x+16|0;Ef=Ax;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[$x+56>>2]=k[Bx>>2];by=rb+52|0;k[$x+60>>2]=k[by>>2];gy=rb+56|0;k[$x+64>>2]=k[gy>>2];k[gy>>2]=0;k[by>>2]=0;k[Bx>>2]=0;gy=Dx;hy=k[gy+4>>2]|0;iy=$x+68|0;k[iy>>2]=k[gy>>2];k[iy+4>>2]=hy;hy=$x+80|0;k[hy>>2]=k[Ix>>2];i[hy+4>>0]=i[Ix+4>>0]|0;Df=$x+88|0;Ef=Lx;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[$x+128>>2]=k[Mx>>2];hy=rb+124|0;k[$x+132>>2]=k[hy>>2];iy=rb+128|0;k[$x+136>>2]=k[iy>>2];k[iy>>2]=0;k[hy>>2]=0;k[Mx>>2]=0;iy=Ox;gy=k[iy+4>>2]|0;jy=$x+140|0;k[jy>>2]=k[iy>>2];k[jy+4>>2]=gy;gy=$x+152|0;k[gy>>2]=k[Sx>>2];i[gy+4>>0]=i[Sx+4>>0]|0;Df=$x+160|0;Ef=Tx;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[$x+200>>2]=k[Rx>>2];gy=rb+196|0;k[$x+204>>2]=k[gy>>2];jy=rb+200|0;k[$x+208>>2]=k[jy>>2];k[jy>>2]=0;k[gy>>2]=0;k[Rx>>2]=0;jy=$x+212|0;k[jy>>2]=ay;k[jy+4>>2]=Yx;k[Xx>>2]=$x;k[ix>>2]=k[nb>>2];i[ix+4>>0]=i[nb+4>>0]|0;Df=n+1928|0;Ef=lx;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+1968|0,ux|0);jy=x;x=0;ha:do if(jy&1){iy=Hc()|0;ky=M;ly=iy;ug=3591}else{iy=vx;my=k[iy+4>>2]|0;ny=n+1980|0;k[ny>>2]=k[iy>>2];k[ny+4>>2]=my;my=n+1992|0;ny=k[Xx>>2]|0;ia:do if(!ny)k[n+2008>>2]=0;else{do if((ny|0)==(qb|0)){k[n+2008>>2]=my;x=0;xa(k[(k[ny>>2]|0)+12>>2]|0,ny|0,my|0);iy=x;x=0;if(!(iy&1))break ia}else{x=0;iy=Ba(k[(k[ny>>2]|0)+8>>2]|0,ny|0)|0;oy=x;x=0;if(oy&1)break;k[n+2008>>2]=iy;break ia}while(0);iy=Hc()|0;oy=M;py=n+1968|0;qy=k[py>>2]|0;if(!qy){ky=oy;ly=iy;ug=3591;break ha}ry=n+1972|0;sy=k[ry>>2]|0;if((sy|0)==(qy|0))ty=qy;else{uy=n+1976|0;vy=sy;do{sy=vy+-72|0;k[ry>>2]=sy;i[c>>0]=i[d>>0]|0;uF(c,uy,sy);vy=k[ry>>2]|0}while((vy|0)!=(qy|0));ty=k[py>>2]|0}OBa(ty);ky=oy;ly=iy;ug=3591;break ha}while(0);ny=n+2016|0;k[ub>>2]=k[e>>2];i[ub+4>>0]=i[e+4>>0]|0;Df=ub+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ub+48|0,Gf|0);my=x;x=0;do if(my&1)wy=ub;else{qy=yf;vy=k[qy+4>>2]|0;ry=ub+60|0;k[ry>>2]=k[qy>>2];k[ry+4>>2]=vy;vy=ub+72|0;k[vy>>2]=k[f>>2];i[vy+4>>0]=i[f+4>>0]|0;Df=ub+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ub+120|0,Kf|0);iy=x;x=0;if(iy&1){wy=vy;break}iy=zf;oy=k[iy+4>>2]|0;py=ub+132|0;k[py>>2]=k[iy>>2];k[py+4>>2]=oy;oy=ub+144|0;k[oy>>2]=k[g>>2];i[oy+4>>0]=i[g+4>>0]|0;Df=ub+152|0;Ef=rf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ub+192|0,kw|0);vy=x;x=0;if(vy&1){wy=oy;break}vy=ub+204|0;k[vy>>2]=Jx;k[vy+4>>2]=Kx;k[tb>>2]=0;vy=tb+4|0;k[vy>>2]=0;k[tb+8>>2]=0;x=0;py=Ba(563,216)|0;iy=x;x=0;ja:do if(iy&1){ry=Hc()|0;xy=ry;yy=M;ug=3601}else{k[vy>>2]=py;k[tb>>2]=py;k[tb+8>>2]=py+216;k[py>>2]=k[ub>>2];i[py+4>>0]=i[ub+4>>0]|0;Df=py+8|0;Ef=ub+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,py+48|0,ub+48|0);ry=x;x=0;do if(!(ry&1)){qy=ub+60|0;uy=k[qy+4>>2]|0;sy=py+60|0;k[sy>>2]=k[qy>>2];k[sy+4>>2]=uy;uy=py+72|0;k[vy>>2]=uy;sy=ub+72|0;k[uy>>2]=k[sy>>2];i[uy+4>>0]=i[sy+4>>0]|0;Df=py+80|0;Ef=ub+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,py+120|0,ub+120|0);sy=x;x=0;if(sy&1)break;sy=ub+132|0;uy=k[sy+4>>2]|0;qy=py+132|0;k[qy>>2]=k[sy>>2];k[qy+4>>2]=uy;uy=k[vy>>2]|0;qy=uy+72|0;k[vy>>2]=qy;sy=ub+144|0;k[qy>>2]=k[sy>>2];i[qy+4>>0]=i[sy+4>>0]|0;Df=uy+80|0;Ef=ub+152|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,uy+120|0,ub+192|0);sy=x;x=0;if(sy&1)break;sy=ub+204|0;qy=k[sy+4>>2]|0;zy=uy+132|0;k[zy>>2]=k[sy>>2];k[zy+4>>2]=qy;k[vy>>2]=uy+144;k[sb>>2]=1;i[sb+4>>0]=1;qy=sb+8|0;k[qy>>2]=9;k[sb+40>>2]=1;zy=sb+48|0;x=0;xa(712,zy|0,tb|0);sy=x;x=0;do if(sy&1){Ay=Hc()|0;By=ny;Cy=1;Dy=Ay;Ey=M}else{Ay=sb+60|0;k[Ay>>2]=0;k[sb+64>>2]=0;k[wb>>2]=k[e>>2];i[wb+4>>0]=i[e+4>>0]|0;Fy=wb+8|0;Df=Fy;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Gy=wb+48|0;x=0;xa(712,Gy|0,Gf|0);Hy=x;x=0;do if(Hy&1){Iy=Hc()|0;Jy=ny;Ky=1;Ly=Iy;My=M}else{Iy=wb+60|0;Ny=yf;Oy=k[Ny+4>>2]|0;Py=Iy;k[Py>>2]=k[Ny>>2];k[Py+4>>2]=Oy;Oy=wb+72|0;k[Oy>>2]=k[f>>2];i[Oy+4>>0]=i[f+4>>0]|0;Py=wb+80|0;Df=Py;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Ny=wb+120|0;x=0;xa(712,Ny|0,Kf|0);Qy=x;x=0;if(Qy&1){Qy=Hc()|0;Ry=M;Sy=wb+48|0;Ty=k[Sy>>2]|0;if(!Ty){Jy=ny;Ky=1;Ly=Qy;My=Ry;break}Uy=wb+52|0;Vy=k[Uy>>2]|0;if((Vy|0)==(Ty|0))Wy=Ty;else{Xy=wb+56|0;Yy=Vy;do{Vy=Yy+-72|0;k[Uy>>2]=Vy;i[c>>0]=i[d>>0]|0;uF(c,Xy,Vy);Yy=k[Uy>>2]|0}while((Yy|0)!=(Ty|0));Wy=k[Sy>>2]|0}OBa(Wy);Jy=ny;Ky=1;Ly=Qy;My=Ry;break}Ty=zf;Yy=k[Ty>>2]|0;Uy=k[Ty+4>>2]|0;Ty=wb+132|0;k[Ty>>2]=Yy;k[Ty+4>>2]=Uy;Ty=vb+16|0;k[Ty>>2]=0;x=0;Xy=Ba(563,152)|0;Vy=x;x=0;do if(Vy&1){Zy=Hc()|0;_y=ny;$y=1;az=Zy;bz=M}else{k[Xy>>2]=28552;Zy=Xy+8|0;k[Zy>>2]=k[wb>>2];i[Zy+4>>0]=i[wb+4>>0]|0;Df=Xy+16|0;Ef=Fy;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Xy+56>>2]=k[Gy>>2];Zy=wb+52|0;k[Xy+60>>2]=k[Zy>>2];cz=wb+56|0;k[Xy+64>>2]=k[cz>>2];k[cz>>2]=0;k[Zy>>2]=0;k[Gy>>2]=0;cz=Iy;dz=k[cz+4>>2]|0;ez=Xy+68|0;k[ez>>2]=k[cz>>2];k[ez+4>>2]=dz;dz=Xy+80|0;k[dz>>2]=k[Oy>>2];i[dz+4>>0]=i[Oy+4>>0]|0;Df=Xy+88|0;Ef=Py;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Xy+128>>2]=k[Ny>>2];dz=wb+124|0;k[Xy+132>>2]=k[dz>>2];ez=wb+128|0;k[Xy+136>>2]=k[ez>>2];k[ez>>2]=0;k[dz>>2]=0;k[Ny>>2]=0;ez=Xy+140|0;k[ez>>2]=Yy;k[ez+4>>2]=Uy;k[Ty>>2]=Xy;k[ny>>2]=k[sb>>2];i[ny+4>>0]=i[sb+4>>0]|0;Df=n+2024|0;Ef=qy;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2064|0,zy|0);ez=x;x=0;ka:do if(ez&1){cz=Hc()|0;fz=M;gz=cz;ug=3612}else{cz=Ay;hz=k[cz+4>>2]|0;iz=n+2076|0;k[iz>>2]=k[cz>>2];k[iz+4>>2]=hz;hz=n+2088|0;iz=k[Ty>>2]|0;la:do if(!iz)k[n+2104>>2]=0;else{do if((iz|0)==(vb|0)){k[n+2104>>2]=hz;x=0;xa(k[(k[iz>>2]|0)+12>>2]|0,iz|0,hz|0);cz=x;x=0;if(!(cz&1))break la}else{x=0;cz=Ba(k[(k[iz>>2]|0)+8>>2]|0,iz|0)|0;jz=x;x=0;if(jz&1)break;k[n+2104>>2]=cz;break la}while(0);cz=Hc()|0;jz=M;kz=n+2064|0;lz=k[kz>>2]|0;if(!lz){fz=jz;gz=cz;ug=3612;break ka}mz=n+2068|0;nz=k[mz>>2]|0;if((nz|0)==(lz|0))oz=lz;else{pz=n+2072|0;qz=nz;do{nz=qz+-72|0;k[mz>>2]=nz;i[c>>0]=i[d>>0]|0;uF(c,pz,nz);qz=k[mz>>2]|0}while((qz|0)!=(lz|0));oz=k[kz>>2]|0}OBa(oz);fz=jz;gz=cz;ug=3612;break ka}while(0);iz=n+2112|0;k[zb>>2]=k[e>>2];i[zb+4>>0]=i[e+4>>0]|0;Df=zb+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,zb+48|0,Gf|0);hz=x;x=0;do if(hz&1)rz=zb;else{lz=yf;qz=k[lz+4>>2]|0;mz=zb+60|0;k[mz>>2]=k[lz>>2];k[mz+4>>2]=qz;qz=zb+72|0;k[qz>>2]=k[f>>2];i[qz+4>>0]=i[f+4>>0]|0;Df=zb+80|0;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,zb+120|0,Kf|0);cz=x;x=0;if(cz&1){rz=qz;break}cz=zf;jz=k[cz+4>>2]|0;kz=zb+132|0;k[kz>>2]=k[cz>>2];k[kz+4>>2]=jz;k[yb>>2]=0;jz=yb+4|0;k[jz>>2]=0;k[yb+8>>2]=0;x=0;kz=Ba(563,144)|0;cz=x;x=0;ma:do if(cz&1){mz=Hc()|0;sz=mz;tz=M;ug=3622}else{k[jz>>2]=kz;k[yb>>2]=kz;k[yb+8>>2]=kz+144;k[kz>>2]=k[zb>>2];i[kz+4>>0]=i[zb+4>>0]|0;Df=kz+8|0;Ef=zb+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,kz+48|0,zb+48|0);mz=x;x=0;do if(!(mz&1)){lz=zb+60|0;pz=k[lz+4>>2]|0;nz=kz+60|0;k[nz>>2]=k[lz>>2];k[nz+4>>2]=pz;pz=kz+72|0;k[jz>>2]=pz;nz=zb+72|0;k[pz>>2]=k[nz>>2];i[pz+4>>0]=i[nz+4>>0]|0;Df=kz+80|0;Ef=zb+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,kz+120|0,zb+120|0);nz=x;x=0;if(nz&1)break;nz=zb+132|0;pz=k[nz+4>>2]|0;lz=kz+132|0;k[lz>>2]=k[nz>>2];k[lz+4>>2]=pz;k[jz>>2]=(k[jz>>2]|0)+72;k[xb>>2]=1;i[xb+4>>0]=1;pz=xb+8|0;k[pz>>2]=11;k[xb+40>>2]=1;lz=xb+48|0;x=0;xa(712,lz|0,yb|0);nz=x;x=0;do if(nz&1){uz=Hc()|0;vz=iz;wz=1;xz=uz;yz=M}else{uz=xb+60|0;k[uz>>2]=0;k[xb+64>>2]=0;k[Bb>>2]=k[e>>2];i[Bb+4>>0]=i[e+4>>0]|0;zz=Bb+8|0;Df=zz;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Az=Bb+48|0;x=0;xa(712,Az|0,Gf|0);Bz=x;x=0;do if(Bz&1){Cz=Hc()|0;Dz=1;Ez=Cz;Fz=M;Gz=iz}else{Cz=Bb+60|0;Hz=yf;Iz=k[Hz+4>>2]|0;Jz=Cz;k[Jz>>2]=k[Hz>>2];k[Jz+4>>2]=Iz;Iz=Bb+72|0;k[Iz>>2]=k[f>>2];i[Iz+4>>0]=i[f+4>>0]|0;Jz=Bb+80|0;Df=Jz;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Hz=Bb+120|0;x=0;xa(712,Hz|0,Kf|0);Kz=x;x=0;if(Kz&1){Kz=Hc()|0;Lz=M;Mz=Bb+48|0;Nz=k[Mz>>2]|0;if(!Nz){Dz=1;Ez=Kz;Fz=Lz;Gz=iz;break}Oz=Bb+52|0;Pz=k[Oz>>2]|0;if((Pz|0)==(Nz|0))Qz=Nz;else{Rz=Bb+56|0;Sz=Pz;do{Pz=Sz+-72|0;k[Oz>>2]=Pz;i[c>>0]=i[d>>0]|0;uF(c,Rz,Pz);Sz=k[Oz>>2]|0}while((Sz|0)!=(Nz|0));Qz=k[Mz>>2]|0}OBa(Qz);Dz=1;Ez=Kz;Fz=Lz;Gz=iz;break}Nz=zf;Sz=k[Nz>>2]|0;Oz=k[Nz+4>>2]|0;Nz=Bb+132|0;k[Nz>>2]=Sz;k[Nz+4>>2]=Oz;Nz=Ab+16|0;k[Nz>>2]=0;x=0;Rz=Ba(563,152)|0;Pz=x;x=0;do if(Pz&1){Tz=Hc()|0;Uz=1;Vz=Tz;Wz=M;Xz=iz}else{k[Rz>>2]=28596;Tz=Rz+8|0;k[Tz>>2]=k[Bb>>2];i[Tz+4>>0]=i[Bb+4>>0]|0;Df=Rz+16|0;Ef=zz;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Rz+56>>2]=k[Az>>2];Tz=Bb+52|0;k[Rz+60>>2]=k[Tz>>2];Yz=Bb+56|0;k[Rz+64>>2]=k[Yz>>2];k[Yz>>2]=0;k[Tz>>2]=0;k[Az>>2]=0;Yz=Cz;Zz=k[Yz+4>>2]|0;_z=Rz+68|0;k[_z>>2]=k[Yz>>2];k[_z+4>>2]=Zz;Zz=Rz+80|0;k[Zz>>2]=k[Iz>>2];i[Zz+4>>0]=i[Iz+4>>0]|0;Df=Rz+88|0;Ef=Jz;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Rz+128>>2]=k[Hz>>2];Zz=Bb+124|0;k[Rz+132>>2]=k[Zz>>2];_z=Bb+128|0;k[Rz+136>>2]=k[_z>>2];k[_z>>2]=0;k[Zz>>2]=0;k[Hz>>2]=0;_z=Rz+140|0;k[_z>>2]=Sz;k[_z+4>>2]=Oz;k[Nz>>2]=Rz;k[iz>>2]=k[xb>>2];i[iz+4>>0]=i[xb+4>>0]|0;Df=n+2120|0;Ef=pz;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2160|0,lz|0);_z=x;x=0;na:do if(_z&1){Yz=Hc()|0;$z=M;aA=Yz;ug=3633}else{Yz=uz;bA=k[Yz+4>>2]|0;cA=n+2172|0;k[cA>>2]=k[Yz>>2];k[cA+4>>2]=bA;bA=n+2184|0;cA=k[Nz>>2]|0;oa:do if(!cA)k[n+2200>>2]=0;else{do if((cA|0)==(Ab|0)){k[n+2200>>2]=bA;x=0;xa(k[(k[cA>>2]|0)+12>>2]|0,cA|0,bA|0);Yz=x;x=0;if(!(Yz&1))break oa}else{x=0;Yz=Ba(k[(k[cA>>2]|0)+8>>2]|0,cA|0)|0;dA=x;x=0;if(dA&1)break;k[n+2200>>2]=Yz;break oa}while(0);Yz=Hc()|0;dA=M;eA=n+2160|0;fA=k[eA>>2]|0;if(!fA){$z=dA;aA=Yz;ug=3633;break na}gA=n+2164|0;hA=k[gA>>2]|0;if((hA|0)==(fA|0))iA=fA;else{jA=n+2168|0;kA=hA;do{hA=kA+-72|0;k[gA>>2]=hA;i[c>>0]=i[d>>0]|0;uF(c,jA,hA);kA=k[gA>>2]|0}while((kA|0)!=(fA|0));iA=k[eA>>2]|0}OBa(iA);$z=dA;aA=Yz;ug=3633;break na}while(0);cA=n+2208|0;k[Eb>>2]=k[h>>2];i[Eb+4>>0]=i[h+4>>0]|0;Df=Eb+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));bA=h+48|0;x=0;xa(712,Eb+48|0,bA|0);fA=x;x=0;if(fA&1){fA=Hc()|0;lA=1;mA=fA;nA=M;oA=cA;break}fA=Bf;kA=k[fA+4>>2]|0;gA=Eb+60|0;k[gA>>2]=k[fA>>2];k[gA+4>>2]=kA;k[Eb+72>>2]=2;i[Eb+76>>0]=1;k[Eb+80>>2]=0;k[Eb+112>>2]=1;kA=Eb+120|0;k[kA>>2]=0;k[kA+4>>2]=0;k[kA+8>>2]=0;k[kA+12>>2]=0;k[kA+16>>2]=0;k[Db>>2]=0;kA=Db+4|0;k[kA>>2]=0;k[Db+8>>2]=0;x=0;gA=Ba(563,144)|0;fA=x;x=0;pa:do if(fA&1){jA=Hc()|0;pA=jA;qA=M;ug=3635}else{k[kA>>2]=gA;k[Db>>2]=gA;k[Db+8>>2]=gA+144;k[gA>>2]=k[Eb>>2];i[gA+4>>0]=i[Eb+4>>0]|0;Df=gA+8|0;Ef=Eb+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,gA+48|0,Eb+48|0);Yz=x;x=0;do if(!(Yz&1)){dA=Eb+60|0;eA=k[dA+4>>2]|0;jA=gA+60|0;k[jA>>2]=k[dA>>2];k[jA+4>>2]=eA;eA=gA+72|0;k[kA>>2]=eA;jA=Eb+72|0;k[eA>>2]=k[jA>>2];i[eA+4>>0]=i[jA+4>>0]|0;Df=gA+80|0;Ef=Eb+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,gA+120|0,Eb+120|0);jA=x;x=0;if(jA&1)break;jA=Eb+132|0;eA=k[jA+4>>2]|0;dA=gA+132|0;k[dA>>2]=k[jA>>2];k[dA+4>>2]=eA;k[kA>>2]=(k[kA>>2]|0)+72;k[Cb>>2]=1;i[Cb+4>>0]=1;eA=Cb+8|0;k[eA>>2]=1;k[Cb+40>>2]=1;dA=Cb+48|0;x=0;xa(712,dA|0,Db|0);jA=x;x=0;do if(jA&1){hA=Hc()|0;rA=1;sA=hA;tA=M;uA=cA}else{hA=Cb+60|0;k[hA>>2]=0;k[Cb+64>>2]=0;k[Gb>>2]=k[h>>2];i[Gb+4>>0]=i[h+4>>0]|0;vA=Gb+8|0;Df=vA;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));wA=Gb+48|0;x=0;xa(712,wA|0,bA|0);xA=x;x=0;do if(xA&1){yA=Hc()|0;zA=1;AA=yA;BA=M;CA=cA}else{yA=Bf;DA=k[yA>>2]|0;EA=k[yA+4>>2]|0;yA=Gb+60|0;k[yA>>2]=DA;k[yA+4>>2]=EA;yA=Fb+16|0;k[yA>>2]=0;x=0;FA=Ba(563,80)|0;GA=x;x=0;do if(GA&1){HA=Hc()|0;IA=1;JA=HA;KA=M;LA=cA}else{k[FA>>2]=28640;HA=FA+8|0;k[HA>>2]=k[Gb>>2];i[HA+4>>0]=i[Gb+4>>0]|0;Df=FA+16|0;Ef=vA;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[FA+56>>2]=k[wA>>2];HA=Gb+52|0;k[FA+60>>2]=k[HA>>2];MA=Gb+56|0;k[FA+64>>2]=k[MA>>2];k[MA>>2]=0;k[HA>>2]=0;k[wA>>2]=0;MA=FA+68|0;k[MA>>2]=DA;k[MA+4>>2]=EA;k[yA>>2]=FA;k[cA>>2]=k[Cb>>2];i[cA+4>>0]=i[Cb+4>>0]|0;Df=n+2216|0;Ef=eA;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2256|0,dA|0);MA=x;x=0;qa:do if(MA&1){NA=Hc()|0;OA=M;PA=NA;ug=3640}else{NA=hA;QA=k[NA+4>>2]|0;RA=n+2268|0;k[RA>>2]=k[NA>>2];k[RA+4>>2]=QA;QA=n+2280|0;RA=k[yA>>2]|0;ra:do if(!RA)k[n+2296>>2]=0;else{do if((RA|0)==(Fb|0)){k[n+2296>>2]=QA;x=0;xa(k[(k[RA>>2]|0)+12>>2]|0,RA|0,QA|0);NA=x;x=0;if(!(NA&1))break ra}else{x=0;NA=Ba(k[(k[RA>>2]|0)+8>>2]|0,RA|0)|0;SA=x;x=0;if(SA&1)break;k[n+2296>>2]=NA;break ra}while(0);NA=Hc()|0;SA=M;TA=n+2256|0;UA=k[TA>>2]|0;if(!UA){OA=SA;PA=NA;ug=3640;break qa}VA=n+2260|0;WA=k[VA>>2]|0;if((WA|0)==(UA|0))XA=UA;else{YA=n+2264|0;ZA=WA;do{WA=ZA+-72|0;k[VA>>2]=WA;i[c>>0]=i[d>>0]|0;uF(c,YA,WA);ZA=k[VA>>2]|0}while((ZA|0)!=(UA|0));XA=k[TA>>2]|0}OBa(XA);OA=SA;PA=NA;ug=3640;break qa}while(0);RA=n+2304|0;k[Jb>>2]=k[h>>2];i[Jb+4>>0]=i[h+4>>0]|0;Df=Jb+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Jb+48|0,bA|0);QA=x;x=0;if(QA&1){QA=Hc()|0;_A=1;$A=QA;aB=M;bB=RA;break}QA=Bf;UA=k[QA+4>>2]|0;ZA=Jb+60|0;k[ZA>>2]=k[QA>>2];k[ZA+4>>2]=UA;k[Jb+72>>2]=2;i[Jb+76>>0]=1;k[Jb+80>>2]=1;k[Jb+112>>2]=1;UA=Jb+120|0;k[UA>>2]=0;k[UA+4>>2]=0;k[UA+8>>2]=0;k[UA+12>>2]=0;k[UA+16>>2]=0;k[Ib>>2]=0;UA=Ib+4|0;k[UA>>2]=0;k[Ib+8>>2]=0;x=0;ZA=Ba(563,144)|0;QA=x;x=0;sa:do if(QA&1){VA=Hc()|0;cB=VA;dB=M;ug=3642}else{k[UA>>2]=ZA;k[Ib>>2]=ZA;k[Ib+8>>2]=ZA+144;k[ZA>>2]=k[Jb>>2];i[ZA+4>>0]=i[Jb+4>>0]|0;Df=ZA+8|0;Ef=Jb+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ZA+48|0,Jb+48|0);NA=x;x=0;do if(!(NA&1)){SA=Jb+60|0;TA=k[SA+4>>2]|0;VA=ZA+60|0;k[VA>>2]=k[SA>>2];k[VA+4>>2]=TA;TA=ZA+72|0;k[UA>>2]=TA;VA=Jb+72|0;k[TA>>2]=k[VA>>2];i[TA+4>>0]=i[VA+4>>0]|0;Df=ZA+80|0;Ef=Jb+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ZA+120|0,Jb+120|0);VA=x;x=0;if(VA&1)break;VA=Jb+132|0;TA=k[VA+4>>2]|0;SA=ZA+132|0;k[SA>>2]=k[VA>>2];k[SA+4>>2]=TA;k[UA>>2]=(k[UA>>2]|0)+72;k[Hb>>2]=1;i[Hb+4>>0]=1;TA=Hb+8|0;k[TA>>2]=2;k[Hb+40>>2]=1;SA=Hb+48|0;x=0;xa(712,SA|0,Ib|0);VA=x;x=0;do if(VA&1){YA=Hc()|0;eB=YA;fB=M;gB=RA;hB=1}else{YA=Hb+60|0;k[YA>>2]=0;k[Hb+64>>2]=0;k[Lb>>2]=k[h>>2];i[Lb+4>>0]=i[h+4>>0]|0;WA=Lb+8|0;Df=WA;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));iB=Lb+48|0;x=0;xa(712,iB|0,bA|0);jB=x;x=0;do if(jB&1){kB=Hc()|0;lB=RA;mB=1;nB=kB;oB=M}else{kB=Bf;pB=k[kB>>2]|0;qB=k[kB+4>>2]|0;kB=Lb+60|0;k[kB>>2]=pB;k[kB+4>>2]=qB;kB=Kb+16|0;k[kB>>2]=0;x=0;rB=Ba(563,80)|0;sB=x;x=0;do if(sB&1){tB=Hc()|0;uB=RA;vB=1;wB=tB;xB=M}else{k[rB>>2]=28684;tB=rB+8|0;k[tB>>2]=k[Lb>>2];i[tB+4>>0]=i[Lb+4>>0]|0;Df=rB+16|0;Ef=WA;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[rB+56>>2]=k[iB>>2];tB=Lb+52|0;k[rB+60>>2]=k[tB>>2];yB=Lb+56|0;k[rB+64>>2]=k[yB>>2];k[yB>>2]=0;k[tB>>2]=0;k[iB>>2]=0;yB=rB+68|0;k[yB>>2]=pB;k[yB+4>>2]=qB;k[kB>>2]=rB;k[RA>>2]=k[Hb>>2];i[RA+4>>0]=i[Hb+4>>0]|0;Df=n+2312|0;Ef=TA;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2352|0,SA|0);yB=x;x=0;ta:do if(yB&1){zB=Hc()|0;AB=M;BB=zB;ug=3647}else{zB=YA;CB=k[zB+4>>2]|0;DB=n+2364|0;k[DB>>2]=k[zB>>2];k[DB+4>>2]=CB;CB=n+2376|0;DB=k[kB>>2]|0;ua:do if(!DB)k[n+2392>>2]=0;else{do if((DB|0)==(Kb|0)){k[n+2392>>2]=CB;x=0;xa(k[(k[DB>>2]|0)+12>>2]|0,DB|0,CB|0);zB=x;x=0;if(!(zB&1))break ua}else{x=0;zB=Ba(k[(k[DB>>2]|0)+8>>2]|0,DB|0)|0;EB=x;x=0;if(EB&1)break;k[n+2392>>2]=zB;break ua}while(0);zB=Hc()|0;EB=M;FB=n+2352|0;GB=k[FB>>2]|0;if(!GB){AB=EB;BB=zB;ug=3647;break ta}HB=n+2356|0;IB=k[HB>>2]|0;if((IB|0)==(GB|0))JB=GB;else{KB=n+2360|0;LB=IB;do{IB=LB+-72|0;k[HB>>2]=IB;i[c>>0]=i[d>>0]|0;uF(c,KB,IB);LB=k[HB>>2]|0}while((LB|0)!=(GB|0));JB=k[FB>>2]|0}OBa(JB);AB=EB;BB=zB;ug=3647;break ta}while(0);DB=n+2400|0;k[Ob>>2]=k[h>>2];i[Ob+4>>0]=i[h+4>>0]|0;Df=Ob+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ob+48|0,bA|0);CB=x;x=0;if(CB&1){CB=Hc()|0;MB=DB;NB=1;OB=CB;PB=M;break}CB=Bf;GB=k[CB+4>>2]|0;LB=Ob+60|0;k[LB>>2]=k[CB>>2];k[LB+4>>2]=GB;k[Ob+72>>2]=2;i[Ob+76>>0]=1;k[Ob+80>>2]=1;k[Ob+112>>2]=1;GB=Ob+120|0;k[GB>>2]=0;k[GB+4>>2]=0;k[GB+8>>2]=0;k[GB+12>>2]=0;k[GB+16>>2]=0;k[Nb>>2]=0;GB=Nb+4|0;k[GB>>2]=0;k[Nb+8>>2]=0;x=0;LB=Ba(563,144)|0;CB=x;x=0;va:do if(CB&1){HB=Hc()|0;QB=HB;RB=M;ug=3649}else{k[GB>>2]=LB;k[Nb>>2]=LB;k[Nb+8>>2]=LB+144;k[LB>>2]=k[Ob>>2];i[LB+4>>0]=i[Ob+4>>0]|0;Df=LB+8|0;Ef=Ob+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,LB+48|0,Ob+48|0);zB=x;x=0;do if(!(zB&1)){EB=Ob+60|0;FB=k[EB+4>>2]|0;HB=LB+60|0;k[HB>>2]=k[EB>>2];k[HB+4>>2]=FB;FB=LB+72|0;k[GB>>2]=FB;HB=Ob+72|0;k[FB>>2]=k[HB>>2];i[FB+4>>0]=i[HB+4>>0]|0;Df=LB+80|0;Ef=Ob+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,LB+120|0,Ob+120|0);HB=x;x=0;if(HB&1)break;HB=Ob+132|0;FB=k[HB+4>>2]|0;EB=LB+132|0;k[EB>>2]=k[HB>>2];k[EB+4>>2]=FB;k[GB>>2]=(k[GB>>2]|0)+72;k[Mb>>2]=1;i[Mb+4>>0]=1;FB=Mb+8|0;k[FB>>2]=4;k[Mb+40>>2]=1;EB=Mb+48|0;x=0;xa(712,EB|0,Nb|0);HB=x;x=0;do if(HB&1){KB=Hc()|0;SB=DB;TB=1;UB=KB;VB=M}else{KB=Mb+60|0;k[KB>>2]=0;k[Mb+64>>2]=0;k[Qb>>2]=k[h>>2];i[Qb+4>>0]=i[h+4>>0]|0;IB=Qb+8|0;Df=IB;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));WB=Qb+48|0;x=0;xa(712,WB|0,bA|0);XB=x;x=0;do if(XB&1){YB=Hc()|0;ZB=DB;_B=1;$B=YB;aC=M}else{YB=Bf;bC=k[YB>>2]|0;cC=k[YB+4>>2]|0;YB=Qb+60|0;k[YB>>2]=bC;k[YB+4>>2]=cC;YB=Pb+16|0;k[YB>>2]=0;x=0;dC=Ba(563,80)|0;eC=x;x=0;do if(eC&1){fC=Hc()|0;gC=DB;hC=1;iC=fC;jC=M}else{k[dC>>2]=28728;fC=dC+8|0;k[fC>>2]=k[Qb>>2];i[fC+4>>0]=i[Qb+4>>0]|0;Df=dC+16|0;Ef=IB;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[dC+56>>2]=k[WB>>2];fC=Qb+52|0;k[dC+60>>2]=k[fC>>2];kC=Qb+56|0;k[dC+64>>2]=k[kC>>2];k[kC>>2]=0;k[fC>>2]=0;k[WB>>2]=0;kC=dC+68|0;k[kC>>2]=bC;k[kC+4>>2]=cC;k[YB>>2]=dC;k[DB>>2]=k[Mb>>2];i[DB+4>>0]=i[Mb+4>>0]|0;Df=n+2408|0;Ef=FB;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2448|0,EB|0);kC=x;x=0;wa:do if(kC&1){lC=Hc()|0;mC=M;nC=lC;ug=3654}else{lC=KB;oC=k[lC+4>>2]|0;pC=n+2460|0;k[pC>>2]=k[lC>>2];k[pC+4>>2]=oC;oC=n+2472|0;pC=k[YB>>2]|0;xa:do if(!pC)k[n+2488>>2]=0;else{do if((pC|0)==(Pb|0)){k[n+2488>>2]=oC;x=0;xa(k[(k[pC>>2]|0)+12>>2]|0,pC|0,oC|0);lC=x;x=0;if(!(lC&1))break xa}else{x=0;lC=Ba(k[(k[pC>>2]|0)+8>>2]|0,pC|0)|0;qC=x;x=0;if(qC&1)break;k[n+2488>>2]=lC;break xa}while(0);lC=Hc()|0;qC=M;rC=n+2448|0;sC=k[rC>>2]|0;if(!sC){mC=qC;nC=lC;ug=3654;break wa}tC=n+2452|0;uC=k[tC>>2]|0;if((uC|0)==(sC|0))vC=sC;else{wC=n+2456|0;xC=uC;do{uC=xC+-72|0;k[tC>>2]=uC;i[c>>0]=i[d>>0]|0;uF(c,wC,uC);xC=k[tC>>2]|0}while((xC|0)!=(sC|0));vC=k[rC>>2]|0}OBa(vC);mC=qC;nC=lC;ug=3654;break wa}while(0);pC=n+2496|0;k[Tb>>2]=k[h>>2];i[Tb+4>>0]=i[h+4>>0]|0;Df=Tb+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Tb+48|0,bA|0);oC=x;x=0;if(oC&1){oC=Hc()|0;yC=pC;zC=1;AC=oC;BC=M;break}oC=Bf;sC=k[oC+4>>2]|0;xC=Tb+60|0;k[xC>>2]=k[oC>>2];k[xC+4>>2]=sC;k[Tb+72>>2]=2;i[Tb+76>>0]=1;k[Tb+80>>2]=1;k[Tb+112>>2]=1;sC=Tb+120|0;k[sC>>2]=0;k[sC+4>>2]=0;k[sC+8>>2]=0;k[sC+12>>2]=0;k[sC+16>>2]=0;k[Sb>>2]=0;sC=Sb+4|0;k[sC>>2]=0;k[Sb+8>>2]=0;x=0;xC=Ba(563,144)|0;oC=x;x=0;ya:do if(oC&1){tC=Hc()|0;CC=tC;DC=M;ug=3656}else{k[sC>>2]=xC;k[Sb>>2]=xC;k[Sb+8>>2]=xC+144;k[xC>>2]=k[Tb>>2];i[xC+4>>0]=i[Tb+4>>0]|0;Df=xC+8|0;Ef=Tb+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,xC+48|0,Tb+48|0);lC=x;x=0;do if(!(lC&1)){qC=Tb+60|0;rC=k[qC+4>>2]|0;tC=xC+60|0;k[tC>>2]=k[qC>>2];k[tC+4>>2]=rC;rC=xC+72|0;k[sC>>2]=rC;tC=Tb+72|0;k[rC>>2]=k[tC>>2];i[rC+4>>0]=i[tC+4>>0]|0;Df=xC+80|0;Ef=Tb+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,xC+120|0,Tb+120|0);tC=x;x=0;if(tC&1)break;tC=Tb+132|0;rC=k[tC+4>>2]|0;qC=xC+132|0;k[qC>>2]=k[tC>>2];k[qC+4>>2]=rC;k[sC>>2]=(k[sC>>2]|0)+72;k[Rb>>2]=1;i[Rb+4>>0]=1;rC=Rb+8|0;k[rC>>2]=5;k[Rb+40>>2]=1;qC=Rb+48|0;x=0;xa(712,qC|0,Sb|0);tC=x;x=0;do if(tC&1){wC=Hc()|0;EC=pC;FC=1;GC=wC;HC=M}else{wC=Rb+60|0;k[wC>>2]=0;k[Rb+64>>2]=0;k[Vb>>2]=k[h>>2];i[Vb+4>>0]=i[h+4>>0]|0;uC=Vb+8|0;Df=uC;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));IC=Vb+48|0;x=0;xa(712,IC|0,bA|0);JC=x;x=0;do if(JC&1){KC=Hc()|0;LC=pC;MC=1;NC=KC;OC=M}else{KC=Bf;PC=k[KC>>2]|0;QC=k[KC+4>>2]|0;KC=Vb+60|0;k[KC>>2]=PC;k[KC+4>>2]=QC;KC=Ub+16|0;k[KC>>2]=0;x=0;RC=Ba(563,80)|0;SC=x;x=0;do if(SC&1){TC=Hc()|0;UC=pC;VC=1;WC=TC;XC=M}else{k[RC>>2]=28772;TC=RC+8|0;k[TC>>2]=k[Vb>>2];i[TC+4>>0]=i[Vb+4>>0]|0;Df=RC+16|0;Ef=uC;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[RC+56>>2]=k[IC>>2];TC=Vb+52|0;k[RC+60>>2]=k[TC>>2];YC=Vb+56|0;k[RC+64>>2]=k[YC>>2];k[YC>>2]=0;k[TC>>2]=0;k[IC>>2]=0;YC=RC+68|0;k[YC>>2]=PC;k[YC+4>>2]=QC;k[KC>>2]=RC;k[pC>>2]=k[Rb>>2];i[pC+4>>0]=i[Rb+4>>0]|0;Df=n+2504|0;Ef=rC;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2544|0,qC|0);YC=x;x=0;za:do if(YC&1){ZC=Hc()|0;_C=M;$C=ZC;ug=3661}else{ZC=wC;aD=k[ZC+4>>2]|0;bD=n+2556|0;k[bD>>2]=k[ZC>>2];k[bD+4>>2]=aD;aD=n+2568|0;bD=k[KC>>2]|0;Aa:do if(!bD)k[n+2584>>2]=0;else{do if((bD|0)==(Ub|0)){k[n+2584>>2]=aD;x=0;xa(k[(k[bD>>2]|0)+12>>2]|0,bD|0,aD|0);ZC=x;x=0;if(!(ZC&1))break Aa}else{x=0;ZC=Ba(k[(k[bD>>2]|0)+8>>2]|0,bD|0)|0;cD=x;x=0;if(cD&1)break;k[n+2584>>2]=ZC;break Aa}while(0);ZC=Hc()|0;cD=M;dD=n+2544|0;eD=k[dD>>2]|0;if(!eD){_C=cD;$C=ZC;ug=3661;break za}fD=n+2548|0;gD=k[fD>>2]|0;if((gD|0)==(eD|0))hD=eD;else{iD=n+2552|0;jD=gD;do{gD=jD+-72|0;k[fD>>2]=gD;i[c>>0]=i[d>>0]|0;uF(c,iD,gD);jD=k[fD>>2]|0}while((jD|0)!=(eD|0));hD=k[dD>>2]|0}OBa(hD);_C=cD;$C=ZC;ug=3661;break za}while(0);bD=n+2592|0;k[Yb>>2]=k[h>>2];i[Yb+4>>0]=i[h+4>>0]|0;Df=Yb+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Yb+48|0,bA|0);aD=x;x=0;if(aD&1){aD=Hc()|0;kD=bD;lD=1;mD=aD;nD=M;break}aD=Bf;eD=k[aD+4>>2]|0;jD=Yb+60|0;k[jD>>2]=k[aD>>2];k[jD+4>>2]=eD;k[Yb+72>>2]=2;i[Yb+76>>0]=1;k[Yb+80>>2]=0;k[Yb+112>>2]=1;eD=Yb+120|0;k[eD>>2]=0;k[eD+4>>2]=0;k[eD+8>>2]=0;k[eD+12>>2]=0;k[eD+16>>2]=0;k[Xb>>2]=0;eD=Xb+4|0;k[eD>>2]=0;k[Xb+8>>2]=0;x=0;jD=Ba(563,144)|0;aD=x;x=0;Ba:do if(aD&1){fD=Hc()|0;oD=fD;pD=M;ug=3663}else{k[eD>>2]=jD;k[Xb>>2]=jD;k[Xb+8>>2]=jD+144;k[jD>>2]=k[Yb>>2];i[jD+4>>0]=i[Yb+4>>0]|0;Df=jD+8|0;Ef=Yb+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,jD+48|0,Yb+48|0);ZC=x;x=0;do if(!(ZC&1)){cD=Yb+60|0;dD=k[cD+4>>2]|0;fD=jD+60|0;k[fD>>2]=k[cD>>2];k[fD+4>>2]=dD;dD=jD+72|0;k[eD>>2]=dD;fD=Yb+72|0;k[dD>>2]=k[fD>>2];i[dD+4>>0]=i[fD+4>>0]|0;Df=jD+80|0;Ef=Yb+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,jD+120|0,Yb+120|0);fD=x;x=0;if(fD&1)break;fD=Yb+132|0;dD=k[fD+4>>2]|0;cD=jD+132|0;k[cD>>2]=k[fD>>2];k[cD+4>>2]=dD;k[eD>>2]=(k[eD>>2]|0)+72;k[Wb>>2]=1;i[Wb+4>>0]=1;dD=Wb+8|0;k[dD>>2]=23;k[Wb+40>>2]=1;cD=Wb+48|0;x=0;xa(712,cD|0,Xb|0);fD=x;x=0;do if(fD&1){iD=Hc()|0;qD=bD;rD=1;sD=iD;tD=M}else{iD=Wb+60|0;k[iD>>2]=0;k[Wb+64>>2]=0;k[_b>>2]=k[h>>2];i[_b+4>>0]=i[h+4>>0]|0;gD=_b+8|0;Df=gD;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));uD=_b+48|0;x=0;xa(712,uD|0,bA|0);vD=x;x=0;do if(vD&1){wD=Hc()|0;xD=bD;yD=1;zD=wD;AD=M}else{wD=Bf;BD=k[wD>>2]|0;CD=k[wD+4>>2]|0;wD=_b+60|0;k[wD>>2]=BD;k[wD+4>>2]=CD;wD=Zb+16|0;k[wD>>2]=0;x=0;DD=Ba(563,80)|0;ED=x;x=0;do if(ED&1){FD=Hc()|0;GD=bD;HD=1;ID=FD;JD=M}else{k[DD>>2]=28816;FD=DD+8|0;k[FD>>2]=k[_b>>2];i[FD+4>>0]=i[_b+4>>0]|0;Df=DD+16|0;Ef=gD;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[DD+56>>2]=k[uD>>2];FD=_b+52|0;k[DD+60>>2]=k[FD>>2];KD=_b+56|0;k[DD+64>>2]=k[KD>>2];k[KD>>2]=0;k[FD>>2]=0;k[uD>>2]=0;KD=DD+68|0;k[KD>>2]=BD;k[KD+4>>2]=CD;k[wD>>2]=DD;k[bD>>2]=k[Wb>>2];i[bD+4>>0]=i[Wb+4>>0]|0;Df=n+2600|0;Ef=dD;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2640|0,cD|0);KD=x;x=0;Ca:do if(KD&1){LD=Hc()|0;MD=M;ND=LD;ug=3668}else{LD=iD;OD=k[LD+4>>2]|0;PD=n+2652|0;k[PD>>2]=k[LD>>2];k[PD+4>>2]=OD;OD=n+2664|0;PD=k[wD>>2]|0;Da:do if(!PD)k[n+2680>>2]=0;else{do if((PD|0)==(Zb|0)){k[n+2680>>2]=OD;x=0;xa(k[(k[PD>>2]|0)+12>>2]|0,PD|0,OD|0);LD=x;x=0;if(!(LD&1))break Da}else{x=0;LD=Ba(k[(k[PD>>2]|0)+8>>2]|0,PD|0)|0;QD=x;x=0;if(QD&1)break;k[n+2680>>2]=LD;break Da}while(0);LD=Hc()|0;QD=M;RD=n+2640|0;SD=k[RD>>2]|0;if(!SD){MD=QD;ND=LD;ug=3668;break Ca}TD=n+2644|0;UD=k[TD>>2]|0;if((UD|0)==(SD|0))VD=SD;else{WD=n+2648|0;XD=UD;do{UD=XD+-72|0;k[TD>>2]=UD;i[c>>0]=i[d>>0]|0;uF(c,WD,UD);XD=k[TD>>2]|0}while((XD|0)!=(SD|0));VD=k[RD>>2]|0}OBa(VD);MD=QD;ND=LD;ug=3668;break Ca}while(0);PD=n+2688|0;k[bc>>2]=k[h>>2];i[bc+4>>0]=i[h+4>>0]|0;Df=bc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,bc+48|0,bA|0);OD=x;x=0;if(OD&1){OD=Hc()|0;YD=PD;ZD=1;_D=OD;$D=M;break}OD=Bf;SD=k[OD+4>>2]|0;XD=bc+60|0;k[XD>>2]=k[OD>>2];k[XD+4>>2]=SD;k[bc+72>>2]=2;i[bc+76>>0]=1;k[bc+80>>2]=0;k[bc+112>>2]=1;SD=bc+120|0;k[SD>>2]=0;k[SD+4>>2]=0;k[SD+8>>2]=0;k[SD+12>>2]=0;k[SD+16>>2]=0;k[ac>>2]=0;SD=ac+4|0;k[SD>>2]=0;k[ac+8>>2]=0;x=0;XD=Ba(563,144)|0;OD=x;x=0;Ea:do if(OD&1){TD=Hc()|0;aE=TD;bE=M;ug=3670}else{k[SD>>2]=XD;k[ac>>2]=XD;k[ac+8>>2]=XD+144;k[XD>>2]=k[bc>>2];i[XD+4>>0]=i[bc+4>>0]|0;Df=XD+8|0;Ef=bc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,XD+48|0,bc+48|0);LD=x;x=0;do if(!(LD&1)){QD=bc+60|0;RD=k[QD+4>>2]|0;TD=XD+60|0;k[TD>>2]=k[QD>>2];k[TD+4>>2]=RD;RD=XD+72|0;k[SD>>2]=RD;TD=bc+72|0;k[RD>>2]=k[TD>>2];i[RD+4>>0]=i[TD+4>>0]|0;Df=XD+80|0;Ef=bc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,XD+120|0,bc+120|0);TD=x;x=0;if(TD&1)break;TD=bc+132|0;RD=k[TD+4>>2]|0;QD=XD+132|0;k[QD>>2]=k[TD>>2];k[QD+4>>2]=RD;k[SD>>2]=(k[SD>>2]|0)+72;k[$b>>2]=1;i[$b+4>>0]=1;RD=$b+8|0;k[RD>>2]=24;k[$b+40>>2]=1;QD=$b+48|0;x=0;xa(712,QD|0,ac|0);TD=x;x=0;do if(TD&1){WD=Hc()|0;cE=PD;dE=1;eE=WD;fE=M}else{WD=$b+60|0;k[WD>>2]=0;k[$b+64>>2]=0;k[dc>>2]=k[h>>2];i[dc+4>>0]=i[h+4>>0]|0;UD=dc+8|0;Df=UD;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));gE=dc+48|0;x=0;xa(712,gE|0,bA|0);hE=x;x=0;do if(hE&1){iE=Hc()|0;jE=PD;kE=1;lE=iE;mE=M}else{iE=Bf;nE=k[iE>>2]|0;oE=k[iE+4>>2]|0;iE=dc+60|0;k[iE>>2]=nE;k[iE+4>>2]=oE;iE=cc+16|0;k[iE>>2]=0;x=0;pE=Ba(563,80)|0;qE=x;x=0;do if(qE&1){rE=Hc()|0;sE=PD;tE=1;uE=rE;vE=M}else{k[pE>>2]=28860;rE=pE+8|0;k[rE>>2]=k[dc>>2];i[rE+4>>0]=i[dc+4>>0]|0;Df=pE+16|0;Ef=UD;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[pE+56>>2]=k[gE>>2];rE=dc+52|0;k[pE+60>>2]=k[rE>>2];wE=dc+56|0;k[pE+64>>2]=k[wE>>2];k[wE>>2]=0;k[rE>>2]=0;k[gE>>2]=0;wE=pE+68|0;k[wE>>2]=nE;k[wE+4>>2]=oE;k[iE>>2]=pE;k[PD>>2]=k[$b>>2];i[PD+4>>0]=i[$b+4>>0]|0;Df=n+2696|0;Ef=RD;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2736|0,QD|0);wE=x;x=0;Fa:do if(wE&1){xE=Hc()|0;yE=M;zE=xE;ug=3675}else{xE=WD;AE=k[xE+4>>2]|0;BE=n+2748|0;k[BE>>2]=k[xE>>2];k[BE+4>>2]=AE;AE=n+2760|0;BE=k[iE>>2]|0;Ga:do if(!BE)k[n+2776>>2]=0;else{do if((BE|0)==(cc|0)){k[n+2776>>2]=AE;x=0;xa(k[(k[BE>>2]|0)+12>>2]|0,BE|0,AE|0);xE=x;x=0;if(!(xE&1))break Ga}else{x=0;xE=Ba(k[(k[BE>>2]|0)+8>>2]|0,BE|0)|0;CE=x;x=0;if(CE&1)break;k[n+2776>>2]=xE;break Ga}while(0);xE=Hc()|0;CE=M;DE=n+2736|0;EE=k[DE>>2]|0;if(!EE){yE=CE;zE=xE;ug=3675;break Fa}FE=n+2740|0;GE=k[FE>>2]|0;if((GE|0)==(EE|0))HE=EE;else{IE=n+2744|0;JE=GE;do{GE=JE+-72|0;k[FE>>2]=GE;i[c>>0]=i[d>>0]|0;uF(c,IE,GE);JE=k[FE>>2]|0}while((JE|0)!=(EE|0));HE=k[DE>>2]|0}OBa(HE);yE=CE;zE=xE;ug=3675;break Fa}while(0);BE=n+2784|0;k[gc>>2]=k[h>>2];i[gc+4>>0]=i[h+4>>0]|0;Df=gc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,gc+48|0,bA|0);AE=x;x=0;if(AE&1){AE=Hc()|0;KE=BE;LE=1;ME=AE;NE=M;break}AE=Bf;EE=k[AE+4>>2]|0;JE=gc+60|0;k[JE>>2]=k[AE>>2];k[JE+4>>2]=EE;EE=c+32|0;k[EE>>2]=8;k[c>>2]=-1;JE=1;do{k[c+(JE<<2)>>2]=-1;JE=JE+1|0;AE=k[EE>>2]|0}while(JE>>>0>>0);OE=AE;JE=OE+-1|0;Ha:do if(JE){AE=JE;do{if(k[c+(AE<<2)>>2]|0)break Ha;k[EE>>2]=AE;AE=AE+-1|0}while((AE|0)!=0)}while(0);Df=hc;Ef=c;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[gc+72>>2]=2;i[gc+76>>0]=1;Df=gc+80|0;Ef=hc;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));EE=gc+120|0;k[EE>>2]=0;k[EE+4>>2]=0;k[EE+8>>2]=0;k[EE+12>>2]=0;k[EE+16>>2]=0;k[fc>>2]=0;EE=fc+4|0;k[EE>>2]=0;k[fc+8>>2]=0;x=0;JE=Ba(563,144)|0;AE=x;x=0;Ia:do if(AE&1){xE=Hc()|0;PE=xE;QE=M;ug=3677}else{k[EE>>2]=JE;k[fc>>2]=JE;k[fc+8>>2]=JE+144;k[JE>>2]=k[gc>>2];i[JE+4>>0]=i[gc+4>>0]|0;Df=JE+8|0;Ef=gc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,JE+48|0,gc+48|0);xE=x;x=0;do if(!(xE&1)){CE=gc+60|0;DE=k[CE+4>>2]|0;FE=JE+60|0;k[FE>>2]=k[CE>>2];k[FE+4>>2]=DE;DE=JE+72|0;k[EE>>2]=DE;FE=gc+72|0;k[DE>>2]=k[FE>>2];i[DE+4>>0]=i[FE+4>>0]|0;Df=JE+80|0;Ef=gc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,JE+120|0,gc+120|0);FE=x;x=0;if(FE&1)break;FE=gc+132|0;DE=k[FE+4>>2]|0;CE=JE+132|0;k[CE>>2]=k[FE>>2];k[CE+4>>2]=DE;k[EE>>2]=(k[EE>>2]|0)+72;k[ec>>2]=1;i[ec+4>>0]=1;DE=ec+8|0;k[DE>>2]=22;k[ec+40>>2]=1;CE=ec+48|0;x=0;xa(712,CE|0,fc|0);FE=x;x=0;do if(FE&1){IE=Hc()|0;RE=BE;SE=1;TE=IE;UE=M}else{IE=ec+60|0;k[IE>>2]=0;k[ec+64>>2]=0;k[jc>>2]=k[h>>2];i[jc+4>>0]=i[h+4>>0]|0;GE=jc+8|0;Df=GE;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));VE=jc+48|0;x=0;xa(712,VE|0,bA|0);WE=x;x=0;do if(WE&1){XE=Hc()|0;YE=BE;ZE=1;_E=XE;$E=M}else{XE=Bf;aF=k[XE>>2]|0;bF=k[XE+4>>2]|0;XE=jc+60|0;k[XE>>2]=aF;k[XE+4>>2]=bF;XE=ic+16|0;k[XE>>2]=0;x=0;cF=Ba(563,80)|0;dF=x;x=0;do if(dF&1){eF=Hc()|0;fF=BE;gF=1;hF=eF;iF=M}else{k[cF>>2]=28904;eF=cF+8|0;k[eF>>2]=k[jc>>2];i[eF+4>>0]=i[jc+4>>0]|0;Df=cF+16|0;Ef=GE;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[cF+56>>2]=k[VE>>2];eF=jc+52|0;k[cF+60>>2]=k[eF>>2];jF=jc+56|0;k[cF+64>>2]=k[jF>>2];k[jF>>2]=0;k[eF>>2]=0;k[VE>>2]=0;jF=cF+68|0;k[jF>>2]=aF;k[jF+4>>2]=bF;k[XE>>2]=cF;k[BE>>2]=k[ec>>2];i[BE+4>>0]=i[ec+4>>0]|0;Df=n+2792|0;Ef=DE;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2832|0,CE|0);jF=x;x=0;Ja:do if(jF&1){kF=Hc()|0;lF=M;mF=kF;ug=3682}else{kF=IE;nF=k[kF+4>>2]|0;oF=n+2844|0;k[oF>>2]=k[kF>>2];k[oF+4>>2]=nF;nF=n+2856|0;oF=k[XE>>2]|0;Ka:do if(!oF)k[n+2872>>2]=0;else{do if((oF|0)==(ic|0)){k[n+2872>>2]=nF;x=0;xa(k[(k[oF>>2]|0)+12>>2]|0,oF|0,nF|0);kF=x;x=0;if(!(kF&1))break Ka}else{x=0;kF=Ba(k[(k[oF>>2]|0)+8>>2]|0,oF|0)|0;pF=x;x=0;if(pF&1)break;k[n+2872>>2]=kF;break Ka}while(0);kF=Hc()|0;pF=M;qF=n+2832|0;rF=k[qF>>2]|0;if(!rF){lF=pF;mF=kF;ug=3682;break Ja}sF=n+2836|0;tF=k[sF>>2]|0;if((tF|0)==(rF|0))wF=rF;else{xF=n+2840|0;yF=tF;do{tF=yF+-72|0;k[sF>>2]=tF;i[c>>0]=i[d>>0]|0;uF(c,xF,tF);yF=k[sF>>2]|0}while((yF|0)!=(rF|0));wF=k[qF>>2]|0}OBa(wF);lF=pF;mF=kF;ug=3682;break Ja}while(0);oF=n+2880|0;k[mc>>2]=k[h>>2];i[mc+4>>0]=i[h+4>>0]|0;Df=mc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,mc+48|0,bA|0);nF=x;x=0;if(nF&1){nF=Hc()|0;AF=oF;BF=1;DF=nF;EF=M;break}nF=Bf;rF=k[nF+4>>2]|0;yF=mc+60|0;k[yF>>2]=k[nF>>2];k[yF+4>>2]=rF;k[mc+72>>2]=2;i[mc+76>>0]=1;k[mc+80>>2]=0;k[mc+112>>2]=1;rF=mc+120|0;k[rF>>2]=0;k[rF+4>>2]=0;k[rF+8>>2]=0;k[rF+12>>2]=0;k[rF+16>>2]=0;k[lc>>2]=0;rF=lc+4|0;k[rF>>2]=0;k[lc+8>>2]=0;x=0;yF=Ba(563,144)|0;nF=x;x=0;La:do if(nF&1){sF=Hc()|0;FF=sF;GF=M;ug=3684}else{k[rF>>2]=yF;k[lc>>2]=yF;k[lc+8>>2]=yF+144;k[yF>>2]=k[mc>>2];i[yF+4>>0]=i[mc+4>>0]|0;Df=yF+8|0;Ef=mc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,yF+48|0,mc+48|0);kF=x;x=0;do if(!(kF&1)){pF=mc+60|0;qF=k[pF+4>>2]|0;sF=yF+60|0;k[sF>>2]=k[pF>>2];k[sF+4>>2]=qF;qF=yF+72|0;k[rF>>2]=qF;sF=mc+72|0;k[qF>>2]=k[sF>>2];i[qF+4>>0]=i[sF+4>>0]|0;Df=yF+80|0;Ef=mc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,yF+120|0,mc+120|0);sF=x;x=0;if(sF&1)break;sF=mc+132|0;qF=k[sF+4>>2]|0;pF=yF+132|0;k[pF>>2]=k[sF>>2];k[pF+4>>2]=qF;k[rF>>2]=(k[rF>>2]|0)+72;k[kc>>2]=1;i[kc+4>>0]=1;qF=kc+8|0;k[qF>>2]=2;k[kc+40>>2]=1;pF=kc+48|0;x=0;xa(712,pF|0,lc|0);sF=x;x=0;do if(sF&1){xF=Hc()|0;HF=oF;IF=1;JF=xF;KF=M}else{xF=kc+60|0;k[xF>>2]=0;k[kc+64>>2]=0;tF=nc+16|0;k[tF>>2]=nc;k[nc>>2]=28948;k[oF>>2]=k[kc>>2];i[oF+4>>0]=i[kc+4>>0]|0;Df=n+2888|0;Ef=qF;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+2928|0,pF|0);LF=x;x=0;Ma:do if(LF&1){MF=Hc()|0;NF=M;OF=MF;ug=3687}else{MF=xF;PF=k[MF+4>>2]|0;QF=n+2940|0;k[QF>>2]=k[MF>>2];k[QF+4>>2]=PF;PF=n+2952|0;QF=k[tF>>2]|0;Na:do if(!QF)k[n+2968>>2]=0;else{do if((QF|0)==(nc|0)){k[n+2968>>2]=PF;x=0;xa(k[(k[QF>>2]|0)+12>>2]|0,QF|0,PF|0);MF=x;x=0;if(!(MF&1))break Na}else{x=0;MF=Ba(k[(k[QF>>2]|0)+8>>2]|0,QF|0)|0;RF=x;x=0;if(RF&1)break;k[n+2968>>2]=MF;break Na}while(0);MF=Hc()|0;RF=M;SF=n+2928|0;TF=k[SF>>2]|0;if(!TF){NF=RF;OF=MF;ug=3687;break Ma}UF=n+2932|0;VF=k[UF>>2]|0;if((VF|0)==(TF|0))WF=TF;else{XF=n+2936|0;YF=VF;do{VF=YF+-72|0;k[UF>>2]=VF;i[c>>0]=i[d>>0]|0;uF(c,XF,VF);YF=k[UF>>2]|0}while((YF|0)!=(TF|0));WF=k[SF>>2]|0}OBa(WF);NF=RF;OF=MF;ug=3687;break Ma}while(0);QF=n+2976|0;k[qc>>2]=k[h>>2];i[qc+4>>0]=i[h+4>>0]|0;Df=qc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,qc+48|0,bA|0);PF=x;x=0;if(PF&1){PF=Hc()|0;ZF=QF;_F=1;$F=PF;aG=M;break}PF=Bf;TF=k[PF+4>>2]|0;YF=qc+60|0;k[YF>>2]=k[PF>>2];k[YF+4>>2]=TF;k[qc+72>>2]=2;i[qc+76>>0]=1;k[qc+80>>2]=0;k[qc+112>>2]=1;TF=qc+120|0;k[TF>>2]=0;k[TF+4>>2]=0;k[TF+8>>2]=0;k[TF+12>>2]=0;k[TF+16>>2]=0;k[pc>>2]=0;TF=pc+4|0;k[TF>>2]=0;k[pc+8>>2]=0;x=0;YF=Ba(563,144)|0;PF=x;x=0;Oa:do if(PF&1){UF=Hc()|0;bG=UF;cG=M;ug=3689}else{k[TF>>2]=YF;k[pc>>2]=YF;k[pc+8>>2]=YF+144;k[YF>>2]=k[qc>>2];i[YF+4>>0]=i[qc+4>>0]|0;Df=YF+8|0;Ef=qc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,YF+48|0,qc+48|0);MF=x;x=0;do if(!(MF&1)){RF=qc+60|0;SF=k[RF+4>>2]|0;UF=YF+60|0;k[UF>>2]=k[RF>>2];k[UF+4>>2]=SF;SF=YF+72|0;k[TF>>2]=SF;UF=qc+72|0;k[SF>>2]=k[UF>>2];i[SF+4>>0]=i[UF+4>>0]|0;Df=YF+80|0;Ef=qc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,YF+120|0,qc+120|0);UF=x;x=0;if(UF&1)break;UF=qc+132|0;SF=k[UF+4>>2]|0;RF=YF+132|0;k[RF>>2]=k[UF>>2];k[RF+4>>2]=SF;k[TF>>2]=(k[TF>>2]|0)+72;k[oc>>2]=1;i[oc+4>>0]=1;SF=oc+8|0;k[SF>>2]=4;k[oc+40>>2]=1;RF=oc+48|0;x=0;xa(712,RF|0,pc|0);UF=x;x=0;do if(UF&1){XF=Hc()|0;dG=QF;eG=1;fG=XF;gG=M}else{XF=oc+60|0;k[XF>>2]=0;k[oc+64>>2]=0;VF=rc+16|0;k[VF>>2]=rc;k[rc>>2]=28992;k[QF>>2]=k[oc>>2];i[QF+4>>0]=i[oc+4>>0]|0;Df=n+2984|0;Ef=SF;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3024|0,RF|0);hG=x;x=0;Pa:do if(hG&1){iG=Hc()|0;jG=M;kG=iG;ug=3692}else{iG=XF;lG=k[iG+4>>2]|0;mG=n+3036|0;k[mG>>2]=k[iG>>2];k[mG+4>>2]=lG;lG=n+3048|0;mG=k[VF>>2]|0;Qa:do if(!mG)k[n+3064>>2]=0;else{do if((mG|0)==(rc|0)){k[n+3064>>2]=lG;x=0;xa(k[(k[mG>>2]|0)+12>>2]|0,mG|0,lG|0);iG=x;x=0;if(!(iG&1))break Qa}else{x=0;iG=Ba(k[(k[mG>>2]|0)+8>>2]|0,mG|0)|0;nG=x;x=0;if(nG&1)break;k[n+3064>>2]=iG;break Qa}while(0);iG=Hc()|0;nG=M;oG=n+3024|0;pG=k[oG>>2]|0;if(!pG){jG=nG;kG=iG;ug=3692;break Pa}qG=n+3028|0;rG=k[qG>>2]|0;if((rG|0)==(pG|0))sG=pG;else{tG=n+3032|0;uG=rG;do{rG=uG+-72|0;k[qG>>2]=rG;i[c>>0]=i[d>>0]|0;uF(c,tG,rG);uG=k[qG>>2]|0}while((uG|0)!=(pG|0));sG=k[oG>>2]|0}OBa(sG);jG=nG;kG=iG;ug=3692;break Pa}while(0);mG=n+3072|0;k[uc>>2]=k[h>>2];i[uc+4>>0]=i[h+4>>0]|0;Df=uc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,uc+48|0,bA|0);lG=x;x=0;if(lG&1){lG=Hc()|0;vG=mG;wG=1;xG=lG;yG=M;break}lG=Bf;pG=k[lG+4>>2]|0;uG=uc+60|0;k[uG>>2]=k[lG>>2];k[uG+4>>2]=pG;k[uc+72>>2]=2;i[uc+76>>0]=1;k[uc+80>>2]=0;k[uc+112>>2]=1;pG=uc+120|0;k[pG>>2]=0;k[pG+4>>2]=0;k[pG+8>>2]=0;k[pG+12>>2]=0;k[pG+16>>2]=0;k[tc>>2]=0;pG=tc+4|0;k[pG>>2]=0;k[tc+8>>2]=0;x=0;uG=Ba(563,144)|0;lG=x;x=0;Ra:do if(lG&1){qG=Hc()|0;zG=qG;AG=M;ug=3694}else{k[pG>>2]=uG;k[tc>>2]=uG;k[tc+8>>2]=uG+144;k[uG>>2]=k[uc>>2];i[uG+4>>0]=i[uc+4>>0]|0;Df=uG+8|0;Ef=uc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,uG+48|0,uc+48|0);iG=x;x=0;do if(!(iG&1)){nG=uc+60|0;oG=k[nG+4>>2]|0;qG=uG+60|0;k[qG>>2]=k[nG>>2];k[qG+4>>2]=oG;oG=uG+72|0;k[pG>>2]=oG;qG=uc+72|0;k[oG>>2]=k[qG>>2];i[oG+4>>0]=i[qG+4>>0]|0;Df=uG+80|0;Ef=uc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,uG+120|0,uc+120|0);qG=x;x=0;if(qG&1)break;qG=uc+132|0;oG=k[qG+4>>2]|0;nG=uG+132|0;k[nG>>2]=k[qG>>2];k[nG+4>>2]=oG;k[pG>>2]=(k[pG>>2]|0)+72;k[sc>>2]=1;i[sc+4>>0]=1;oG=sc+8|0;k[oG>>2]=6;k[sc+40>>2]=1;nG=sc+48|0;x=0;xa(712,nG|0,tc|0);qG=x;x=0;do if(qG&1){tG=Hc()|0;BG=mG;CG=1;DG=tG;EG=M}else{tG=sc+60|0;k[tG>>2]=0;k[sc+64>>2]=0;rG=vc+16|0;k[rG>>2]=vc;k[vc>>2]=29036;k[mG>>2]=k[sc>>2];i[mG+4>>0]=i[sc+4>>0]|0;Df=n+3080|0;Ef=oG;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3120|0,nG|0);FG=x;x=0;Sa:do if(FG&1){GG=Hc()|0;HG=M;IG=GG;ug=3697}else{GG=tG;JG=k[GG+4>>2]|0;KG=n+3132|0;k[KG>>2]=k[GG>>2];k[KG+4>>2]=JG;JG=n+3144|0;KG=k[rG>>2]|0;Ta:do if(!KG)k[n+3160>>2]=0;else{do if((KG|0)==(vc|0)){k[n+3160>>2]=JG;x=0;xa(k[(k[KG>>2]|0)+12>>2]|0,KG|0,JG|0);GG=x;x=0;if(!(GG&1))break Ta}else{x=0;GG=Ba(k[(k[KG>>2]|0)+8>>2]|0,KG|0)|0;LG=x;x=0;if(LG&1)break;k[n+3160>>2]=GG;break Ta}while(0);GG=Hc()|0;LG=M;MG=n+3120|0;NG=k[MG>>2]|0;if(!NG){HG=LG;IG=GG;ug=3697;break Sa}OG=n+3124|0;PG=k[OG>>2]|0;if((PG|0)==(NG|0))QG=NG;else{RG=n+3128|0;SG=PG;do{PG=SG+-72|0;k[OG>>2]=PG;i[c>>0]=i[d>>0]|0;uF(c,RG,PG);SG=k[OG>>2]|0}while((SG|0)!=(NG|0));QG=k[MG>>2]|0}OBa(QG);HG=LG;IG=GG;ug=3697;break Sa}while(0);KG=n+3168|0;k[yc>>2]=2;i[yc+4>>0]=1;k[yc+8>>2]=0;k[yc+40>>2]=1;JG=yc+48|0;k[JG>>2]=0;k[JG+4>>2]=0;k[JG+8>>2]=0;k[JG+12>>2]=0;k[JG+16>>2]=0;JG=yc+72|0;k[JG>>2]=k[h>>2];i[JG+4>>0]=i[h+4>>0]|0;Df=yc+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,yc+120|0,bA|0);JG=x;x=0;if(JG&1){JG=Hc()|0;NG=M;SG=yc+48|0;OG=k[SG>>2]|0;if(OG){RG=yc+52|0;PG=k[RG>>2]|0;if((PG|0)==(OG|0))TG=OG;else{UG=yc+56|0;VG=PG;do{PG=VG+-72|0;k[RG>>2]=PG;i[c>>0]=i[d>>0]|0;uF(c,UG,PG);VG=k[RG>>2]|0}while((VG|0)!=(OG|0));TG=k[SG>>2]|0}OBa(TG)}WG=KG;XG=1;YG=JG;ZG=NG;break}OG=Bf;VG=k[OG+4>>2]|0;RG=yc+132|0;k[RG>>2]=k[OG>>2];k[RG+4>>2]=VG;k[xc>>2]=0;VG=xc+4|0;k[VG>>2]=0;k[xc+8>>2]=0;x=0;RG=Ba(563,144)|0;OG=x;x=0;Ua:do if(OG&1){UG=Hc()|0;_G=UG;$G=M;ug=3705}else{k[VG>>2]=RG;k[xc>>2]=RG;k[xc+8>>2]=RG+144;k[RG>>2]=k[yc>>2];i[RG+4>>0]=i[yc+4>>0]|0;Df=RG+8|0;Ef=yc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,RG+48|0,yc+48|0);GG=x;x=0;do if(!(GG&1)){LG=yc+60|0;MG=k[LG+4>>2]|0;UG=RG+60|0;k[UG>>2]=k[LG>>2];k[UG+4>>2]=MG;MG=RG+72|0;k[VG>>2]=MG;UG=yc+72|0;k[MG>>2]=k[UG>>2];i[MG+4>>0]=i[UG+4>>0]|0;Df=RG+80|0;Ef=yc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,RG+120|0,yc+120|0);UG=x;x=0;if(UG&1)break;UG=yc+132|0;MG=k[UG+4>>2]|0;LG=RG+132|0;k[LG>>2]=k[UG>>2];k[LG+4>>2]=MG;k[VG>>2]=(k[VG>>2]|0)+72;k[wc>>2]=1;i[wc+4>>0]=1;MG=wc+8|0;k[MG>>2]=6;k[wc+40>>2]=1;LG=wc+48|0;x=0;xa(712,LG|0,xc|0);UG=x;x=0;do if(UG&1){PG=Hc()|0;aH=KG;bH=1;cH=PG;dH=M}else{PG=wc+60|0;k[PG>>2]=0;k[wc+64>>2]=0;eH=zc+16|0;k[eH>>2]=zc;k[zc>>2]=29080;k[KG>>2]=k[wc>>2];i[KG+4>>0]=i[wc+4>>0]|0;Df=n+3176|0;Ef=MG;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3216|0,LG|0);fH=x;x=0;Va:do if(fH&1){gH=Hc()|0;hH=M;iH=gH;ug=3708}else{gH=PG;jH=k[gH+4>>2]|0;kH=n+3228|0;k[kH>>2]=k[gH>>2];k[kH+4>>2]=jH;jH=n+3240|0;kH=k[eH>>2]|0;Wa:do if(!kH)k[n+3256>>2]=0;else{do if((kH|0)==(zc|0)){k[n+3256>>2]=jH;x=0;xa(k[(k[kH>>2]|0)+12>>2]|0,kH|0,jH|0);gH=x;x=0;if(!(gH&1))break Wa}else{x=0;gH=Ba(k[(k[kH>>2]|0)+8>>2]|0,kH|0)|0;lH=x;x=0;if(lH&1)break;k[n+3256>>2]=gH;break Wa}while(0);gH=Hc()|0;lH=M;mH=n+3216|0;nH=k[mH>>2]|0;if(!nH){hH=lH;iH=gH;ug=3708;break Va}oH=n+3220|0;pH=k[oH>>2]|0;if((pH|0)==(nH|0))qH=nH;else{rH=n+3224|0;sH=pH;do{pH=sH+-72|0;k[oH>>2]=pH;i[c>>0]=i[d>>0]|0;uF(c,rH,pH);sH=k[oH>>2]|0}while((sH|0)!=(nH|0));qH=k[mH>>2]|0}OBa(qH);hH=lH;iH=gH;ug=3708;break Va}while(0);kH=n+3264|0;k[Cc>>2]=k[h>>2];i[Cc+4>>0]=i[h+4>>0]|0;Df=Cc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Cc+48|0,bA|0);jH=x;x=0;if(jH&1){jH=Hc()|0;tH=kH;uH=1;vH=jH;wH=M;break}jH=Bf;nH=k[jH+4>>2]|0;sH=Cc+60|0;k[sH>>2]=k[jH>>2];k[sH+4>>2]=nH;k[Cc+72>>2]=2;i[Cc+76>>0]=1;k[Cc+80>>2]=0;k[Cc+112>>2]=1;nH=Cc+120|0;k[nH>>2]=0;k[nH+4>>2]=0;k[nH+8>>2]=0;k[nH+12>>2]=0;k[nH+16>>2]=0;k[Bc>>2]=0;nH=Bc+4|0;k[nH>>2]=0;k[Bc+8>>2]=0;x=0;sH=Ba(563,144)|0;jH=x;x=0;Xa:do if(jH&1){oH=Hc()|0;xH=oH;yH=M;ug=3710}else{k[nH>>2]=sH;k[Bc>>2]=sH;k[Bc+8>>2]=sH+144;k[sH>>2]=k[Cc>>2];i[sH+4>>0]=i[Cc+4>>0]|0;Df=sH+8|0;Ef=Cc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,sH+48|0,Cc+48|0);gH=x;x=0;do if(!(gH&1)){lH=Cc+60|0;mH=k[lH+4>>2]|0;oH=sH+60|0;k[oH>>2]=k[lH>>2];k[oH+4>>2]=mH;mH=sH+72|0;k[nH>>2]=mH;oH=Cc+72|0;k[mH>>2]=k[oH>>2];i[mH+4>>0]=i[oH+4>>0]|0;Df=sH+80|0;Ef=Cc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,sH+120|0,Cc+120|0);oH=x;x=0;if(oH&1)break;oH=Cc+132|0;mH=k[oH+4>>2]|0;lH=sH+132|0;k[lH>>2]=k[oH>>2];k[lH+4>>2]=mH;k[nH>>2]=(k[nH>>2]|0)+72;k[Ac>>2]=1;i[Ac+4>>0]=1;mH=Ac+8|0;k[mH>>2]=22;k[Ac+40>>2]=1;lH=Ac+48|0;x=0;xa(712,lH|0,Bc|0);oH=x;x=0;do if(oH&1){rH=Hc()|0;zH=kH;AH=1;BH=rH;CH=M}else{rH=Ac+60|0;k[rH>>2]=0;k[Ac+64>>2]=0;pH=Dc+16|0;k[pH>>2]=Dc;k[Dc>>2]=29124;k[kH>>2]=k[Ac>>2];i[kH+4>>0]=i[Ac+4>>0]|0;Df=n+3272|0;Ef=mH;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3312|0,lH|0);DH=x;x=0;Ya:do if(DH&1){EH=Hc()|0;FH=M;GH=EH;ug=3713}else{EH=rH;HH=k[EH+4>>2]|0;IH=n+3324|0;k[IH>>2]=k[EH>>2];k[IH+4>>2]=HH;HH=n+3336|0;IH=k[pH>>2]|0;Za:do if(!IH)k[n+3352>>2]=0;else{do if((IH|0)==(Dc|0)){k[n+3352>>2]=HH;x=0;xa(k[(k[IH>>2]|0)+12>>2]|0,IH|0,HH|0);EH=x;x=0;if(!(EH&1))break Za}else{x=0;EH=Ba(k[(k[IH>>2]|0)+8>>2]|0,IH|0)|0;JH=x;x=0;if(JH&1)break;k[n+3352>>2]=EH;break Za}while(0);EH=Hc()|0;JH=M;KH=n+3312|0;LH=k[KH>>2]|0;if(!LH){FH=JH;GH=EH;ug=3713;break Ya}MH=n+3316|0;NH=k[MH>>2]|0;if((NH|0)==(LH|0))OH=LH;else{PH=n+3320|0;QH=NH;do{NH=QH+-72|0;k[MH>>2]=NH;i[c>>0]=i[d>>0]|0;uF(c,PH,NH);QH=k[MH>>2]|0}while((QH|0)!=(LH|0));OH=k[KH>>2]|0}OBa(OH);FH=JH;GH=EH;ug=3713;break Ya}while(0);IH=n+3360|0;k[Gc>>2]=k[h>>2];i[Gc+4>>0]=i[h+4>>0]|0;Df=Gc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Gc+48|0,bA|0);HH=x;x=0;if(HH&1){HH=Hc()|0;RH=IH;SH=1;TH=HH;UH=M;break}HH=Bf;LH=k[HH+4>>2]|0;QH=Gc+60|0;k[QH>>2]=k[HH>>2];k[QH+4>>2]=LH;LH=c+32|0;k[LH>>2]=8;k[c>>2]=-1;QH=1;do{k[c+(QH<<2)>>2]=-1;QH=QH+1|0;HH=k[LH>>2]|0}while(QH>>>0>>0);VH=HH;QH=VH+-1|0;_a:do if(QH){HH=QH;do{if(k[c+(HH<<2)>>2]|0)break _a;k[LH>>2]=HH;HH=HH+-1|0}while((HH|0)!=0)}while(0);Df=Ic;Ef=c;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Gc+72>>2]=2;i[Gc+76>>0]=1;Df=Gc+80|0;Ef=Ic;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));LH=Gc+120|0;k[LH>>2]=0;k[LH+4>>2]=0;k[LH+8>>2]=0;k[LH+12>>2]=0;k[LH+16>>2]=0;k[Fc>>2]=0;LH=Fc+4|0;k[LH>>2]=0;k[Fc+8>>2]=0;x=0;QH=Ba(563,144)|0;HH=x;x=0;$a:do if(HH&1){EH=Hc()|0;WH=EH;XH=M;ug=3715}else{k[LH>>2]=QH;k[Fc>>2]=QH;k[Fc+8>>2]=QH+144;k[QH>>2]=k[Gc>>2];i[QH+4>>0]=i[Gc+4>>0]|0;Df=QH+8|0;Ef=Gc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,QH+48|0,Gc+48|0);EH=x;x=0;do if(!(EH&1)){JH=Gc+60|0;KH=k[JH+4>>2]|0;MH=QH+60|0;k[MH>>2]=k[JH>>2];k[MH+4>>2]=KH;KH=QH+72|0;k[LH>>2]=KH;MH=Gc+72|0;k[KH>>2]=k[MH>>2];i[KH+4>>0]=i[MH+4>>0]|0;Df=QH+80|0;Ef=Gc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,QH+120|0,Gc+120|0);MH=x;x=0;if(MH&1)break;MH=Gc+132|0;KH=k[MH+4>>2]|0;JH=QH+132|0;k[JH>>2]=k[MH>>2];k[JH+4>>2]=KH;k[LH>>2]=(k[LH>>2]|0)+72;k[Ec>>2]=1;i[Ec+4>>0]=1;KH=Ec+8|0;k[KH>>2]=23;k[Ec+40>>2]=1;JH=Ec+48|0;x=0;xa(712,JH|0,Fc|0);MH=x;x=0;do if(MH&1){PH=Hc()|0;YH=IH;ZH=1;_H=PH;$H=M}else{PH=Ec+60|0;k[PH>>2]=0;k[Ec+64>>2]=0;NH=Jc+16|0;k[NH>>2]=Jc;k[Jc>>2]=29168;k[IH>>2]=k[Ec>>2];i[IH+4>>0]=i[Ec+4>>0]|0;Df=n+3368|0;Ef=KH;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3408|0,JH|0);aI=x;x=0;ab:do if(aI&1){bI=Hc()|0;cI=M;dI=bI;ug=3718}else{bI=PH;eI=k[bI+4>>2]|0;fI=n+3420|0;k[fI>>2]=k[bI>>2];k[fI+4>>2]=eI;eI=n+3432|0;fI=k[NH>>2]|0;bb:do if(!fI)k[n+3448>>2]=0;else{do if((fI|0)==(Jc|0)){k[n+3448>>2]=eI;x=0;xa(k[(k[fI>>2]|0)+12>>2]|0,fI|0,eI|0);bI=x;x=0;if(!(bI&1))break bb}else{x=0;bI=Ba(k[(k[fI>>2]|0)+8>>2]|0,fI|0)|0;gI=x;x=0;if(gI&1)break;k[n+3448>>2]=bI;break bb}while(0);bI=Hc()|0;gI=M;hI=n+3408|0;iI=k[hI>>2]|0;if(!iI){cI=gI;dI=bI;ug=3718;break ab}jI=n+3412|0;kI=k[jI>>2]|0;if((kI|0)==(iI|0))lI=iI;else{mI=n+3416|0;nI=kI;do{kI=nI+-72|0;k[jI>>2]=kI;i[c>>0]=i[d>>0]|0;uF(c,mI,kI);nI=k[jI>>2]|0}while((nI|0)!=(iI|0));lI=k[hI>>2]|0}OBa(lI);cI=gI;dI=bI;ug=3718;break ab}while(0);fI=n+3456|0;k[Mc>>2]=k[h>>2];i[Mc+4>>0]=i[h+4>>0]|0;Df=Mc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Mc+48|0,bA|0);eI=x;x=0;do if(eI&1)oI=Mc;else{iI=Bf;nI=k[iI+4>>2]|0;jI=Mc+60|0;k[jI>>2]=k[iI>>2];k[jI+4>>2]=nI;nI=Mc+72|0;k[nI>>2]=k[h>>2];i[nI+4>>0]=i[h+4>>0]|0;Df=Mc+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Mc+120|0,bA|0);bI=x;x=0;if(bI&1){oI=nI;break}bI=Bf;gI=k[bI+4>>2]|0;hI=Mc+132|0;k[hI>>2]=k[bI>>2];k[hI+4>>2]=gI;k[Lc>>2]=0;gI=Lc+4|0;k[gI>>2]=0;k[Lc+8>>2]=0;x=0;hI=Ba(563,144)|0;bI=x;x=0;cb:do if(bI&1){jI=Hc()|0;pI=jI;qI=M;ug=3728}else{k[gI>>2]=hI;k[Lc>>2]=hI;k[Lc+8>>2]=hI+144;k[hI>>2]=k[Mc>>2];i[hI+4>>0]=i[Mc+4>>0]|0;Df=hI+8|0;Ef=Mc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hI+48|0,Mc+48|0);jI=x;x=0;do if(!(jI&1)){iI=Mc+60|0;mI=k[iI+4>>2]|0;kI=hI+60|0;k[kI>>2]=k[iI>>2];k[kI+4>>2]=mI;mI=hI+72|0;k[gI>>2]=mI;kI=Mc+72|0;k[mI>>2]=k[kI>>2];i[mI+4>>0]=i[kI+4>>0]|0;Df=hI+80|0;Ef=Mc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hI+120|0,Mc+120|0);kI=x;x=0;if(kI&1)break;kI=Mc+132|0;mI=k[kI+4>>2]|0;iI=hI+132|0;k[iI>>2]=k[kI>>2];k[iI+4>>2]=mI;k[gI>>2]=(k[gI>>2]|0)+72;k[Kc>>2]=1;i[Kc+4>>0]=1;mI=Kc+8|0;k[mI>>2]=22;k[Kc+40>>2]=1;iI=Kc+48|0;x=0;xa(712,iI|0,Lc|0);kI=x;x=0;do if(kI&1){rI=Hc()|0;sI=fI;tI=1;uI=rI;vI=M}else{rI=Kc+60|0;k[rI>>2]=0;k[Kc+64>>2]=0;k[Oc>>2]=k[h>>2];i[Oc+4>>0]=i[h+4>>0]|0;wI=Oc+8|0;Df=wI;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));xI=Oc+48|0;x=0;xa(712,xI|0,bA|0);yI=x;x=0;do if(yI&1){zI=Hc()|0;AI=fI;BI=1;CI=zI;DI=M}else{zI=Bf;EI=k[zI>>2]|0;FI=k[zI+4>>2]|0;zI=Oc+60|0;k[zI>>2]=EI;k[zI+4>>2]=FI;zI=Nc+16|0;k[zI>>2]=0;x=0;GI=Ba(563,80)|0;HI=x;x=0;do if(HI&1){II=Hc()|0;JI=fI;KI=1;LI=II;MI=M}else{k[GI>>2]=29212;II=GI+8|0;k[II>>2]=k[Oc>>2];i[II+4>>0]=i[Oc+4>>0]|0;Df=GI+16|0;Ef=wI;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[GI+56>>2]=k[xI>>2];II=Oc+52|0;k[GI+60>>2]=k[II>>2];NI=Oc+56|0;k[GI+64>>2]=k[NI>>2];k[NI>>2]=0;k[II>>2]=0;k[xI>>2]=0;NI=GI+68|0;k[NI>>2]=EI;k[NI+4>>2]=FI;k[zI>>2]=GI;k[fI>>2]=k[Kc>>2];i[fI+4>>0]=i[Kc+4>>0]|0;Df=n+3464|0;Ef=mI;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3504|0,iI|0);NI=x;x=0;db:do if(NI&1){OI=Hc()|0;PI=M;QI=OI;ug=3733}else{OI=rI;RI=k[OI+4>>2]|0;SI=n+3516|0;k[SI>>2]=k[OI>>2];k[SI+4>>2]=RI;RI=n+3528|0;SI=k[zI>>2]|0;eb:do if(!SI)k[n+3544>>2]=0;else{do if((SI|0)==(Nc|0)){k[n+3544>>2]=RI;x=0;xa(k[(k[SI>>2]|0)+12>>2]|0,SI|0,RI|0);OI=x;x=0;if(!(OI&1))break eb}else{x=0;OI=Ba(k[(k[SI>>2]|0)+8>>2]|0,SI|0)|0;TI=x;x=0;if(TI&1)break;k[n+3544>>2]=OI;break eb}while(0);OI=Hc()|0;TI=M;UI=n+3504|0;VI=k[UI>>2]|0;if(!VI){PI=TI;QI=OI;ug=3733;break db}WI=n+3508|0;XI=k[WI>>2]|0;if((XI|0)==(VI|0))YI=VI;else{ZI=n+3512|0;_I=XI;do{XI=_I+-72|0;k[WI>>2]=XI;i[c>>0]=i[d>>0]|0;uF(c,ZI,XI);_I=k[WI>>2]|0}while((_I|0)!=(VI|0));YI=k[UI>>2]|0}OBa(YI);PI=TI;QI=OI;ug=3733;break db}while(0);SI=n+3552|0;k[Rc>>2]=k[h>>2];i[Rc+4>>0]=i[h+4>>0]|0;Df=Rc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Rc+48|0,bA|0);RI=x;x=0;do if(RI&1)$I=Rc;else{VI=Bf;_I=k[VI+4>>2]|0;WI=Rc+60|0;k[WI>>2]=k[VI>>2];k[WI+4>>2]=_I;_I=Rc+72|0;k[_I>>2]=k[h>>2];i[_I+4>>0]=i[h+4>>0]|0;Df=Rc+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Rc+120|0,bA|0);OI=x;x=0;if(OI&1){$I=_I;break}OI=Bf;TI=k[OI+4>>2]|0;UI=Rc+132|0;k[UI>>2]=k[OI>>2];k[UI+4>>2]=TI;k[Qc>>2]=0;TI=Qc+4|0;k[TI>>2]=0;k[Qc+8>>2]=0;x=0;UI=Ba(563,144)|0;OI=x;x=0;fb:do if(OI&1){WI=Hc()|0;aJ=WI;bJ=M;ug=3743}else{k[TI>>2]=UI;k[Qc>>2]=UI;k[Qc+8>>2]=UI+144;k[UI>>2]=k[Rc>>2];i[UI+4>>0]=i[Rc+4>>0]|0;Df=UI+8|0;Ef=Rc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,UI+48|0,Rc+48|0);WI=x;x=0;do if(!(WI&1)){VI=Rc+60|0;ZI=k[VI+4>>2]|0;XI=UI+60|0;k[XI>>2]=k[VI>>2];k[XI+4>>2]=ZI;ZI=UI+72|0;k[TI>>2]=ZI;XI=Rc+72|0;k[ZI>>2]=k[XI>>2];i[ZI+4>>0]=i[XI+4>>0]|0;Df=UI+80|0;Ef=Rc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,UI+120|0,Rc+120|0);XI=x;x=0;if(XI&1)break;XI=Rc+132|0;ZI=k[XI+4>>2]|0;VI=UI+132|0;k[VI>>2]=k[XI>>2];k[VI+4>>2]=ZI;k[TI>>2]=(k[TI>>2]|0)+72;k[Pc>>2]=1;i[Pc+4>>0]=1;ZI=Pc+8|0;k[ZI>>2]=23;k[Pc+40>>2]=1;VI=Pc+48|0;x=0;xa(712,VI|0,Qc|0);XI=x;x=0;do if(XI&1){cJ=Hc()|0;dJ=SI;eJ=1;fJ=cJ;gJ=M}else{cJ=Pc+60|0;k[cJ>>2]=0;k[Pc+64>>2]=0;k[Uc>>2]=k[h>>2];i[Uc+4>>0]=i[h+4>>0]|0;hJ=Uc+8|0;Df=hJ;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));iJ=Uc+48|0;x=0;xa(712,iJ|0,bA|0);jJ=x;x=0;do if(jJ&1){kJ=Hc()|0;lJ=SI;mJ=1;nJ=kJ;oJ=M}else{kJ=Bf;pJ=k[kJ>>2]|0;qJ=k[kJ+4>>2]|0;kJ=Uc+60|0;k[kJ>>2]=pJ;k[kJ+4>>2]=qJ;kJ=Tc+16|0;k[kJ>>2]=0;x=0;rJ=Ba(563,80)|0;sJ=x;x=0;do if(sJ&1){tJ=Hc()|0;uJ=SI;vJ=1;wJ=tJ;xJ=M}else{k[rJ>>2]=29256;tJ=rJ+8|0;k[tJ>>2]=k[Uc>>2];i[tJ+4>>0]=i[Uc+4>>0]|0;Df=rJ+16|0;Ef=hJ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[rJ+56>>2]=k[iJ>>2];tJ=Uc+52|0;k[rJ+60>>2]=k[tJ>>2];yJ=Uc+56|0;k[rJ+64>>2]=k[yJ>>2];k[yJ>>2]=0;k[tJ>>2]=0;k[iJ>>2]=0;yJ=rJ+68|0;k[yJ>>2]=pJ;k[yJ+4>>2]=qJ;k[kJ>>2]=rJ;k[SI>>2]=k[Pc>>2];i[SI+4>>0]=i[Pc+4>>0]|0;Df=n+3560|0;Ef=ZI;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3600|0,VI|0);yJ=x;x=0;gb:do if(yJ&1){zJ=Hc()|0;AJ=M;BJ=zJ;ug=3748}else{zJ=cJ;CJ=k[zJ+4>>2]|0;DJ=n+3612|0;k[DJ>>2]=k[zJ>>2];k[DJ+4>>2]=CJ;CJ=n+3624|0;DJ=k[kJ>>2]|0;hb:do if(!DJ)k[n+3640>>2]=0;else{do if((DJ|0)==(Tc|0)){k[n+3640>>2]=CJ;x=0;xa(k[(k[DJ>>2]|0)+12>>2]|0,DJ|0,CJ|0);zJ=x;x=0;if(!(zJ&1))break hb}else{x=0;zJ=Ba(k[(k[DJ>>2]|0)+8>>2]|0,DJ|0)|0;EJ=x;x=0;if(EJ&1)break;k[n+3640>>2]=zJ;break hb}while(0);zJ=Hc()|0;EJ=M;FJ=n+3600|0;GJ=k[FJ>>2]|0;if(!GJ){AJ=EJ;BJ=zJ;ug=3748;break gb}HJ=n+3604|0;IJ=k[HJ>>2]|0;if((IJ|0)==(GJ|0))JJ=GJ;else{KJ=n+3608|0;LJ=IJ;do{IJ=LJ+-72|0;k[HJ>>2]=IJ;i[c>>0]=i[d>>0]|0;uF(c,KJ,IJ);LJ=k[HJ>>2]|0}while((LJ|0)!=(GJ|0));JJ=k[FJ>>2]|0}OBa(JJ);AJ=EJ;BJ=zJ;ug=3748;break gb}while(0);DJ=n+3648|0;k[Xc>>2]=k[h>>2];i[Xc+4>>0]=i[h+4>>0]|0;Df=Xc+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Xc+48|0,bA|0);CJ=x;x=0;do if(CJ&1)MJ=Xc;else{GJ=Bf;LJ=k[GJ+4>>2]|0;HJ=Xc+60|0;k[HJ>>2]=k[GJ>>2];k[HJ+4>>2]=LJ;LJ=Xc+72|0;k[LJ>>2]=k[h>>2];i[LJ+4>>0]=i[h+4>>0]|0;Df=Xc+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Xc+120|0,bA|0);zJ=x;x=0;if(zJ&1){MJ=LJ;break}zJ=Bf;EJ=k[zJ+4>>2]|0;FJ=Xc+132|0;k[FJ>>2]=k[zJ>>2];k[FJ+4>>2]=EJ;k[Wc>>2]=0;EJ=Wc+4|0;k[EJ>>2]=0;k[Wc+8>>2]=0;x=0;FJ=Ba(563,144)|0;zJ=x;x=0;ib:do if(zJ&1){HJ=Hc()|0;NJ=HJ;OJ=M;ug=3758}else{k[EJ>>2]=FJ;k[Wc>>2]=FJ;k[Wc+8>>2]=FJ+144;k[FJ>>2]=k[Xc>>2];i[FJ+4>>0]=i[Xc+4>>0]|0;Df=FJ+8|0;Ef=Xc+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,FJ+48|0,Xc+48|0);HJ=x;x=0;do if(!(HJ&1)){GJ=Xc+60|0;KJ=k[GJ+4>>2]|0;IJ=FJ+60|0;k[IJ>>2]=k[GJ>>2];k[IJ+4>>2]=KJ;KJ=FJ+72|0;k[EJ>>2]=KJ;IJ=Xc+72|0;k[KJ>>2]=k[IJ>>2];i[KJ+4>>0]=i[IJ+4>>0]|0;Df=FJ+80|0;Ef=Xc+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,FJ+120|0,Xc+120|0);IJ=x;x=0;if(IJ&1)break;IJ=Xc+132|0;KJ=k[IJ+4>>2]|0;GJ=FJ+132|0;k[GJ>>2]=k[IJ>>2];k[GJ+4>>2]=KJ;k[EJ>>2]=(k[EJ>>2]|0)+72;k[Vc>>2]=1;i[Vc+4>>0]=1;KJ=Vc+8|0;k[KJ>>2]=3;k[Vc+40>>2]=1;GJ=Vc+48|0;x=0;xa(712,GJ|0,Wc|0);IJ=x;x=0;do if(IJ&1){PJ=Hc()|0;QJ=DJ;RJ=1;SJ=PJ;TJ=M}else{PJ=Vc+60|0;k[PJ>>2]=0;k[Vc+64>>2]=0;UJ=Yc+16|0;k[UJ>>2]=Yc;k[Yc>>2]=29300;k[DJ>>2]=k[Vc>>2];i[DJ+4>>0]=i[Vc+4>>0]|0;Df=n+3656|0;Ef=KJ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3696|0,GJ|0);VJ=x;x=0;jb:do if(VJ&1){WJ=Hc()|0;XJ=M;YJ=WJ;ug=3761}else{WJ=PJ;ZJ=k[WJ+4>>2]|0;_J=n+3708|0;k[_J>>2]=k[WJ>>2];k[_J+4>>2]=ZJ;ZJ=n+3720|0;_J=k[UJ>>2]|0;kb:do if(!_J)k[n+3736>>2]=0;else{do if((_J|0)==(Yc|0)){k[n+3736>>2]=ZJ;x=0;xa(k[(k[_J>>2]|0)+12>>2]|0,_J|0,ZJ|0);WJ=x;x=0;if(!(WJ&1))break kb}else{x=0;WJ=Ba(k[(k[_J>>2]|0)+8>>2]|0,_J|0)|0;$J=x;x=0;if($J&1)break;k[n+3736>>2]=WJ;break kb}while(0);WJ=Hc()|0;$J=M;aK=n+3696|0;bK=k[aK>>2]|0;if(!bK){XJ=$J;YJ=WJ;ug=3761;break jb}cK=n+3700|0;dK=k[cK>>2]|0;if((dK|0)==(bK|0))eK=bK;else{fK=n+3704|0;gK=dK;do{dK=gK+-72|0;k[cK>>2]=dK;i[c>>0]=i[d>>0]|0;uF(c,fK,dK);gK=k[cK>>2]|0}while((gK|0)!=(bK|0));eK=k[aK>>2]|0}OBa(eK);XJ=$J;YJ=WJ;ug=3761;break jb}while(0);_J=n+3744|0;k[$c>>2]=k[h>>2];i[$c+4>>0]=i[h+4>>0]|0;Df=$c+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$c+48|0,bA|0);ZJ=x;x=0;do if(ZJ&1)hK=$c;else{bK=Bf;gK=k[bK+4>>2]|0;cK=$c+60|0;k[cK>>2]=k[bK>>2];k[cK+4>>2]=gK;gK=$c+72|0;k[gK>>2]=k[h>>2];i[gK+4>>0]=i[h+4>>0]|0;Df=$c+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$c+120|0,bA|0);WJ=x;x=0;if(WJ&1){hK=gK;break}WJ=Bf;$J=k[WJ+4>>2]|0;aK=$c+132|0;k[aK>>2]=k[WJ>>2];k[aK+4>>2]=$J;k[_c>>2]=0;$J=_c+4|0;k[$J>>2]=0;k[_c+8>>2]=0;x=0;aK=Ba(563,144)|0;WJ=x;x=0;lb:do if(WJ&1){cK=Hc()|0;iK=cK;jK=M;ug=3771}else{k[$J>>2]=aK;k[_c>>2]=aK;k[_c+8>>2]=aK+144;k[aK>>2]=k[$c>>2];i[aK+4>>0]=i[$c+4>>0]|0;Df=aK+8|0;Ef=$c+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,aK+48|0,$c+48|0);cK=x;x=0;do if(!(cK&1)){bK=$c+60|0;fK=k[bK+4>>2]|0;dK=aK+60|0;k[dK>>2]=k[bK>>2];k[dK+4>>2]=fK;fK=aK+72|0;k[$J>>2]=fK;dK=$c+72|0;k[fK>>2]=k[dK>>2];i[fK+4>>0]=i[dK+4>>0]|0;Df=aK+80|0;Ef=$c+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,aK+120|0,$c+120|0);dK=x;x=0;if(dK&1)break;dK=$c+132|0;fK=k[dK+4>>2]|0;bK=aK+132|0;k[bK>>2]=k[dK>>2];k[bK+4>>2]=fK;k[$J>>2]=(k[$J>>2]|0)+72;k[Zc>>2]=1;i[Zc+4>>0]=1;fK=Zc+8|0;k[fK>>2]=20;k[Zc+40>>2]=1;bK=Zc+48|0;x=0;xa(712,bK|0,_c|0);dK=x;x=0;do if(dK&1){kK=Hc()|0;lK=_J;mK=1;nK=kK;oK=M}else{kK=Zc+60|0;k[kK>>2]=0;k[Zc+64>>2]=0;pK=ad+16|0;k[pK>>2]=ad;k[ad>>2]=29344;k[_J>>2]=k[Zc>>2];i[_J+4>>0]=i[Zc+4>>0]|0;Df=n+3752|0;Ef=fK;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3792|0,bK|0);qK=x;x=0;mb:do if(qK&1){rK=Hc()|0;sK=M;tK=rK;ug=3774}else{rK=kK;uK=k[rK+4>>2]|0;vK=n+3804|0;k[vK>>2]=k[rK>>2];k[vK+4>>2]=uK;uK=n+3816|0;vK=k[pK>>2]|0;nb:do if(!vK)k[n+3832>>2]=0;else{do if((vK|0)==(ad|0)){k[n+3832>>2]=uK;x=0;xa(k[(k[vK>>2]|0)+12>>2]|0,vK|0,uK|0);rK=x;x=0;if(!(rK&1))break nb}else{x=0;rK=Ba(k[(k[vK>>2]|0)+8>>2]|0,vK|0)|0;wK=x;x=0;if(wK&1)break;k[n+3832>>2]=rK;break nb}while(0);rK=Hc()|0;wK=M;xK=n+3792|0;yK=k[xK>>2]|0;if(!yK){sK=wK;tK=rK;ug=3774;break mb}zK=n+3796|0;AK=k[zK>>2]|0;if((AK|0)==(yK|0))BK=yK;else{CK=n+3800|0;DK=AK;do{AK=DK+-72|0;k[zK>>2]=AK;i[c>>0]=i[d>>0]|0;uF(c,CK,AK);DK=k[zK>>2]|0}while((DK|0)!=(yK|0));BK=k[xK>>2]|0}OBa(BK);sK=wK;tK=rK;ug=3774;break mb}while(0);vK=n+3840|0;k[dd>>2]=k[h>>2];i[dd+4>>0]=i[h+4>>0]|0;Df=dd+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,dd+48|0,bA|0);uK=x;x=0;do if(uK&1)EK=dd;else{yK=Bf;DK=k[yK+4>>2]|0;zK=dd+60|0;k[zK>>2]=k[yK>>2];k[zK+4>>2]=DK;DK=dd+72|0;k[DK>>2]=k[h>>2];i[DK+4>>0]=i[h+4>>0]|0;Df=dd+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,dd+120|0,bA|0);rK=x;x=0;if(rK&1){EK=DK;break}rK=Bf;wK=k[rK+4>>2]|0;xK=dd+132|0;k[xK>>2]=k[rK>>2];k[xK+4>>2]=wK;k[cd>>2]=0;wK=cd+4|0;k[wK>>2]=0;k[cd+8>>2]=0;x=0;xK=Ba(563,144)|0;rK=x;x=0;ob:do if(rK&1){zK=Hc()|0;FK=zK;GK=M;ug=3784}else{k[wK>>2]=xK;k[cd>>2]=xK;k[cd+8>>2]=xK+144;k[xK>>2]=k[dd>>2];i[xK+4>>0]=i[dd+4>>0]|0;Df=xK+8|0;Ef=dd+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,xK+48|0,dd+48|0);zK=x;x=0;do if(!(zK&1)){yK=dd+60|0;CK=k[yK+4>>2]|0;AK=xK+60|0;k[AK>>2]=k[yK>>2];k[AK+4>>2]=CK;CK=xK+72|0;k[wK>>2]=CK;AK=dd+72|0;k[CK>>2]=k[AK>>2];i[CK+4>>0]=i[AK+4>>0]|0;Df=xK+80|0;Ef=dd+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,xK+120|0,dd+120|0);AK=x;x=0;if(AK&1)break;AK=dd+132|0;CK=k[AK+4>>2]|0;yK=xK+132|0;k[yK>>2]=k[AK>>2];k[yK+4>>2]=CK;k[wK>>2]=(k[wK>>2]|0)+72;k[bd>>2]=1;i[bd+4>>0]=1;CK=bd+8|0;k[CK>>2]=16;k[bd+40>>2]=1;yK=bd+48|0;x=0;xa(712,yK|0,cd|0);AK=x;x=0;do if(AK&1){HK=Hc()|0;IK=vK;JK=1;KK=HK;LK=M}else{HK=bd+60|0;k[HK>>2]=0;k[bd+64>>2]=0;MK=ed+16|0;k[MK>>2]=ed;k[ed>>2]=29388;k[vK>>2]=k[bd>>2];i[vK+4>>0]=i[bd+4>>0]|0;Df=n+3848|0;Ef=CK;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3888|0,yK|0);NK=x;x=0;pb:do if(NK&1){OK=Hc()|0;PK=M;QK=OK;ug=3787}else{OK=HK;RK=k[OK+4>>2]|0;SK=n+3900|0;k[SK>>2]=k[OK>>2];k[SK+4>>2]=RK;RK=n+3912|0;SK=k[MK>>2]|0;qb:do if(!SK)k[n+3928>>2]=0;else{do if((SK|0)==(ed|0)){k[n+3928>>2]=RK;x=0;xa(k[(k[SK>>2]|0)+12>>2]|0,SK|0,RK|0);OK=x;x=0;if(!(OK&1))break qb}else{x=0;OK=Ba(k[(k[SK>>2]|0)+8>>2]|0,SK|0)|0;TK=x;x=0;if(TK&1)break;k[n+3928>>2]=OK;break qb}while(0);OK=Hc()|0;TK=M;UK=n+3888|0;VK=k[UK>>2]|0;if(!VK){PK=TK;QK=OK;ug=3787;break pb}WK=n+3892|0;XK=k[WK>>2]|0;if((XK|0)==(VK|0))YK=VK;else{ZK=n+3896|0;_K=XK;do{XK=_K+-72|0;k[WK>>2]=XK;i[c>>0]=i[d>>0]|0;uF(c,ZK,XK);_K=k[WK>>2]|0}while((_K|0)!=(VK|0));YK=k[UK>>2]|0}OBa(YK);PK=TK;QK=OK;ug=3787;break pb}while(0);SK=n+3936|0;k[hd>>2]=k[h>>2];i[hd+4>>0]=i[h+4>>0]|0;Df=hd+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hd+48|0,bA|0);RK=x;x=0;do if(RK&1)$K=hd;else{VK=Bf;_K=k[VK+4>>2]|0;WK=hd+60|0;k[WK>>2]=k[VK>>2];k[WK+4>>2]=_K;_K=hd+72|0;k[_K>>2]=k[h>>2];i[_K+4>>0]=i[h+4>>0]|0;Df=hd+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hd+120|0,bA|0);OK=x;x=0;if(OK&1){$K=_K;break}OK=Bf;TK=k[OK+4>>2]|0;UK=hd+132|0;k[UK>>2]=k[OK>>2];k[UK+4>>2]=TK;k[gd>>2]=0;TK=gd+4|0;k[TK>>2]=0;k[gd+8>>2]=0;x=0;UK=Ba(563,144)|0;OK=x;x=0;rb:do if(OK&1){WK=Hc()|0;aL=WK;bL=M;ug=3797}else{k[TK>>2]=UK;k[gd>>2]=UK;k[gd+8>>2]=UK+144;k[UK>>2]=k[hd>>2];i[UK+4>>0]=i[hd+4>>0]|0;Df=UK+8|0;Ef=hd+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,UK+48|0,hd+48|0);WK=x;x=0;do if(!(WK&1)){VK=hd+60|0;ZK=k[VK+4>>2]|0;XK=UK+60|0;k[XK>>2]=k[VK>>2];k[XK+4>>2]=ZK;ZK=UK+72|0;k[TK>>2]=ZK;XK=hd+72|0;k[ZK>>2]=k[XK>>2];i[ZK+4>>0]=i[XK+4>>0]|0;Df=UK+80|0;Ef=hd+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,UK+120|0,hd+120|0);XK=x;x=0;if(XK&1)break;XK=hd+132|0;ZK=k[XK+4>>2]|0;VK=UK+132|0;k[VK>>2]=k[XK>>2];k[VK+4>>2]=ZK;k[TK>>2]=(k[TK>>2]|0)+72;k[fd>>2]=1;i[fd+4>>0]=1;ZK=fd+8|0;k[ZK>>2]=18;k[fd+40>>2]=1;VK=fd+48|0;x=0;xa(712,VK|0,gd|0);XK=x;x=0;do if(XK&1){cL=Hc()|0;dL=SK;eL=1;fL=cL;gL=M}else{cL=fd+60|0;k[cL>>2]=0;k[fd+64>>2]=0;hL=id+16|0;k[hL>>2]=id;k[id>>2]=29432;k[SK>>2]=k[fd>>2];i[SK+4>>0]=i[fd+4>>0]|0;Df=n+3944|0;Ef=ZK;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+3984|0,VK|0);iL=x;x=0;sb:do if(iL&1){jL=Hc()|0;kL=M;lL=jL;ug=3800}else{jL=cL;mL=k[jL+4>>2]|0;nL=n+3996|0;k[nL>>2]=k[jL>>2];k[nL+4>>2]=mL;mL=n+4008|0;nL=k[hL>>2]|0;tb:do if(!nL)k[n+4024>>2]=0;else{do if((nL|0)==(id|0)){k[n+4024>>2]=mL;x=0;xa(k[(k[nL>>2]|0)+12>>2]|0,nL|0,mL|0);jL=x;x=0;if(!(jL&1))break tb}else{x=0;jL=Ba(k[(k[nL>>2]|0)+8>>2]|0,nL|0)|0;oL=x;x=0;if(oL&1)break;k[n+4024>>2]=jL;break tb}while(0);jL=Hc()|0;oL=M;pL=n+3984|0;qL=k[pL>>2]|0;if(!qL){kL=oL;lL=jL;ug=3800;break sb}rL=n+3988|0;sL=k[rL>>2]|0;if((sL|0)==(qL|0))tL=qL;else{uL=n+3992|0;vL=sL;do{sL=vL+-72|0;k[rL>>2]=sL;i[c>>0]=i[d>>0]|0;uF(c,uL,sL);vL=k[rL>>2]|0}while((vL|0)!=(qL|0));tL=k[pL>>2]|0}OBa(tL);kL=oL;lL=jL;ug=3800;break sb}while(0);nL=n+4032|0;k[ld>>2]=k[h>>2];i[ld+4>>0]=i[h+4>>0]|0;Df=ld+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ld+48|0,bA|0);mL=x;x=0;do if(mL&1)wL=ld;else{qL=Bf;vL=k[qL+4>>2]|0;rL=ld+60|0;k[rL>>2]=k[qL>>2];k[rL+4>>2]=vL;vL=ld+72|0;k[vL>>2]=k[h>>2];i[vL+4>>0]=i[h+4>>0]|0;Df=ld+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ld+120|0,bA|0);jL=x;x=0;if(jL&1){wL=vL;break}jL=Bf;oL=k[jL+4>>2]|0;pL=ld+132|0;k[pL>>2]=k[jL>>2];k[pL+4>>2]=oL;k[kd>>2]=0;oL=kd+4|0;k[oL>>2]=0;k[kd+8>>2]=0;x=0;pL=Ba(563,144)|0;jL=x;x=0;ub:do if(jL&1){rL=Hc()|0;xL=rL;yL=M;ug=3810}else{k[oL>>2]=pL;k[kd>>2]=pL;k[kd+8>>2]=pL+144;k[pL>>2]=k[ld>>2];i[pL+4>>0]=i[ld+4>>0]|0;Df=pL+8|0;Ef=ld+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pL+48|0,ld+48|0);rL=x;x=0;do if(!(rL&1)){qL=ld+60|0;uL=k[qL+4>>2]|0;sL=pL+60|0;k[sL>>2]=k[qL>>2];k[sL+4>>2]=uL;uL=pL+72|0;k[oL>>2]=uL;sL=ld+72|0;k[uL>>2]=k[sL>>2];i[uL+4>>0]=i[sL+4>>0]|0;Df=pL+80|0;Ef=ld+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pL+120|0,ld+120|0);sL=x;x=0;if(sL&1)break;sL=ld+132|0;uL=k[sL+4>>2]|0;qL=pL+132|0;k[qL>>2]=k[sL>>2];k[qL+4>>2]=uL;k[oL>>2]=(k[oL>>2]|0)+72;k[jd>>2]=1;i[jd+4>>0]=1;uL=jd+8|0;k[uL>>2]=17;k[jd+40>>2]=1;qL=jd+48|0;x=0;xa(712,qL|0,kd|0);sL=x;x=0;do if(sL&1){zL=Hc()|0;AL=nL;BL=1;CL=zL;DL=M}else{zL=jd+60|0;k[zL>>2]=0;k[jd+64>>2]=0;EL=md+16|0;k[EL>>2]=md;k[md>>2]=29476;k[nL>>2]=k[jd>>2];i[nL+4>>0]=i[jd+4>>0]|0;Df=n+4040|0;Ef=uL;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+4080|0,qL|0);FL=x;x=0;vb:do if(FL&1){GL=Hc()|0;HL=M;IL=GL;ug=3813}else{GL=zL;JL=k[GL+4>>2]|0;KL=n+4092|0;k[KL>>2]=k[GL>>2];k[KL+4>>2]=JL;JL=n+4104|0;KL=k[EL>>2]|0;wb:do if(!KL)k[n+4120>>2]=0;else{do if((KL|0)==(md|0)){k[n+4120>>2]=JL;x=0;xa(k[(k[KL>>2]|0)+12>>2]|0,KL|0,JL|0);GL=x;x=0;if(!(GL&1))break wb}else{x=0;GL=Ba(k[(k[KL>>2]|0)+8>>2]|0,KL|0)|0;LL=x;x=0;if(LL&1)break;k[n+4120>>2]=GL;break wb}while(0);GL=Hc()|0;LL=M;ML=n+4080|0;NL=k[ML>>2]|0;if(!NL){HL=LL;IL=GL;ug=3813;break vb}OL=n+4084|0;PL=k[OL>>2]|0;if((PL|0)==(NL|0))QL=NL;else{RL=n+4088|0;SL=PL;do{PL=SL+-72|0;k[OL>>2]=PL;i[c>>0]=i[d>>0]|0;uF(c,RL,PL);SL=k[OL>>2]|0}while((SL|0)!=(NL|0));QL=k[ML>>2]|0}OBa(QL);HL=LL;IL=GL;ug=3813;break vb}while(0);KL=n+4128|0;k[pd>>2]=k[h>>2];i[pd+4>>0]=i[h+4>>0]|0;Df=pd+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pd+48|0,bA|0);JL=x;x=0;do if(JL&1)TL=pd;else{NL=Bf;SL=k[NL+4>>2]|0;OL=pd+60|0;k[OL>>2]=k[NL>>2];k[OL+4>>2]=SL;SL=pd+72|0;k[SL>>2]=k[h>>2];i[SL+4>>0]=i[h+4>>0]|0;Df=pd+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pd+120|0,bA|0);GL=x;x=0;if(GL&1){TL=SL;break}GL=Bf;LL=k[GL+4>>2]|0;ML=pd+132|0;k[ML>>2]=k[GL>>2];k[ML+4>>2]=LL;k[od>>2]=0;LL=od+4|0;k[LL>>2]=0;k[od+8>>2]=0;x=0;ML=Ba(563,144)|0;GL=x;x=0;xb:do if(GL&1){OL=Hc()|0;UL=OL;VL=M;ug=3823}else{k[LL>>2]=ML;k[od>>2]=ML;k[od+8>>2]=ML+144;k[ML>>2]=k[pd>>2];i[ML+4>>0]=i[pd+4>>0]|0;Df=ML+8|0;Ef=pd+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ML+48|0,pd+48|0);OL=x;x=0;do if(!(OL&1)){NL=pd+60|0;RL=k[NL+4>>2]|0;PL=ML+60|0;k[PL>>2]=k[NL>>2];k[PL+4>>2]=RL;RL=ML+72|0;k[LL>>2]=RL;PL=pd+72|0;k[RL>>2]=k[PL>>2];i[RL+4>>0]=i[PL+4>>0]|0;Df=ML+80|0;Ef=pd+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ML+120|0,pd+120|0);PL=x;x=0;if(PL&1)break;PL=pd+132|0;RL=k[PL+4>>2]|0;NL=ML+132|0;k[NL>>2]=k[PL>>2];k[NL+4>>2]=RL;k[LL>>2]=(k[LL>>2]|0)+72;k[nd>>2]=1;i[nd+4>>0]=1;RL=nd+8|0;k[RL>>2]=19;k[nd+40>>2]=1;NL=nd+48|0;x=0;xa(712,NL|0,od|0);PL=x;x=0;do if(PL&1){WL=Hc()|0;XL=1;YL=WL;ZL=M;_L=KL}else{WL=nd+60|0;k[WL>>2]=0;k[nd+64>>2]=0;$L=qd+16|0;k[$L>>2]=qd;k[qd>>2]=29520;k[KL>>2]=k[nd>>2];i[KL+4>>0]=i[nd+4>>0]|0;Df=n+4136|0;Ef=RL;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+4176|0,NL|0);aM=x;x=0;yb:do if(aM&1){bM=Hc()|0;cM=M;dM=bM;ug=3826}else{bM=WL;eM=k[bM+4>>2]|0;fM=n+4188|0;k[fM>>2]=k[bM>>2];k[fM+4>>2]=eM;eM=n+4200|0;fM=k[$L>>2]|0;zb:do if(!fM)k[n+4216>>2]=0;else{do if((fM|0)==(qd|0)){k[n+4216>>2]=eM;x=0;xa(k[(k[fM>>2]|0)+12>>2]|0,fM|0,eM|0);bM=x;x=0;if(!(bM&1))break zb}else{x=0;bM=Ba(k[(k[fM>>2]|0)+8>>2]|0,fM|0)|0;gM=x;x=0;if(gM&1)break;k[n+4216>>2]=bM;break zb}while(0);bM=Hc()|0;gM=M;hM=n+4176|0;iM=k[hM>>2]|0;if(!iM){cM=gM;dM=bM;ug=3826;break yb}jM=n+4180|0;kM=k[jM>>2]|0;if((kM|0)==(iM|0))lM=iM;else{mM=n+4184|0;nM=kM;do{kM=nM+-72|0;k[jM>>2]=kM;i[c>>0]=i[d>>0]|0;uF(c,mM,kM);nM=k[jM>>2]|0}while((nM|0)!=(iM|0));lM=k[hM>>2]|0}OBa(lM);cM=gM;dM=bM;ug=3826;break yb}while(0);fM=n+4224|0;k[td>>2]=k[h>>2];i[td+4>>0]=i[h+4>>0]|0;Df=td+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,td+48|0,bA|0);eM=x;x=0;do if(eM&1)oM=td;else{iM=Bf;nM=k[iM+4>>2]|0;jM=td+60|0;k[jM>>2]=k[iM>>2];k[jM+4>>2]=nM;nM=td+72|0;k[nM>>2]=k[h>>2];i[nM+4>>0]=i[h+4>>0]|0;Df=td+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,td+120|0,bA|0);bM=x;x=0;if(bM&1){oM=nM;break}bM=Bf;gM=k[bM+4>>2]|0;hM=td+132|0;k[hM>>2]=k[bM>>2];k[hM+4>>2]=gM;k[sd>>2]=0;gM=sd+4|0;k[gM>>2]=0;k[sd+8>>2]=0;x=0;hM=Ba(563,144)|0;bM=x;x=0;Ab:do if(bM&1){jM=Hc()|0;pM=jM;qM=M;ug=3836}else{k[gM>>2]=hM;k[sd>>2]=hM;k[sd+8>>2]=hM+144;k[hM>>2]=k[td>>2];i[hM+4>>0]=i[td+4>>0]|0;Df=hM+8|0;Ef=td+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hM+48|0,td+48|0);jM=x;x=0;do if(!(jM&1)){iM=td+60|0;mM=k[iM+4>>2]|0;kM=hM+60|0;k[kM>>2]=k[iM>>2];k[kM+4>>2]=mM;mM=hM+72|0;k[gM>>2]=mM;kM=td+72|0;k[mM>>2]=k[kM>>2];i[mM+4>>0]=i[kM+4>>0]|0;Df=hM+80|0;Ef=td+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hM+120|0,td+120|0);kM=x;x=0;if(kM&1)break;kM=td+132|0;mM=k[kM+4>>2]|0;iM=hM+132|0;k[iM>>2]=k[kM>>2];k[iM+4>>2]=mM;k[gM>>2]=(k[gM>>2]|0)+72;k[rd>>2]=1;i[rd+4>>0]=1;mM=rd+8|0;k[mM>>2]=6;k[rd+40>>2]=1;iM=rd+48|0;x=0;xa(712,iM|0,sd|0);kM=x;x=0;do if(kM&1){rM=Hc()|0;sM=1;tM=rM;uM=M;vM=fM}else{rM=rd+60|0;k[rM>>2]=0;k[rd+64>>2]=0;wM=ud+16|0;k[wM>>2]=ud;k[ud>>2]=29564;k[fM>>2]=k[rd>>2];i[fM+4>>0]=i[rd+4>>0]|0;Df=n+4232|0;Ef=mM;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+4272|0,iM|0);xM=x;x=0;Bb:do if(xM&1){yM=Hc()|0;zM=M;AM=yM;ug=3839}else{yM=rM;BM=k[yM+4>>2]|0;CM=n+4284|0;k[CM>>2]=k[yM>>2];k[CM+4>>2]=BM;BM=n+4296|0;CM=k[wM>>2]|0;Cb:do if(!CM)k[n+4312>>2]=0;else{do if((CM|0)==(ud|0)){k[n+4312>>2]=BM;x=0;xa(k[(k[CM>>2]|0)+12>>2]|0,CM|0,BM|0);yM=x;x=0;if(!(yM&1))break Cb}else{x=0;yM=Ba(k[(k[CM>>2]|0)+8>>2]|0,CM|0)|0;DM=x;x=0;if(DM&1)break;k[n+4312>>2]=yM;break Cb}while(0);yM=Hc()|0;DM=M;EM=n+4272|0;FM=k[EM>>2]|0;if(!FM){zM=DM;AM=yM;ug=3839;break Bb}GM=n+4276|0;HM=k[GM>>2]|0;if((HM|0)==(FM|0))IM=FM;else{JM=n+4280|0;KM=HM;do{HM=KM+-72|0;k[GM>>2]=HM;i[c>>0]=i[d>>0]|0;uF(c,JM,HM);KM=k[GM>>2]|0}while((KM|0)!=(FM|0));IM=k[EM>>2]|0}OBa(IM);zM=DM;AM=yM;ug=3839;break Bb}while(0);CM=n+4320|0;k[zd>>2]=k[h>>2];i[zd+4>>0]=i[h+4>>0]|0;Df=zd+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,zd+48|0,bA|0);BM=x;x=0;if(BM&1){BM=Hc()|0;LM=CM;MM=BM;NM=M;OM=1;break}BM=Bf;FM=k[BM+4>>2]|0;KM=zd+60|0;k[KM>>2]=k[BM>>2];k[KM+4>>2]=FM;k[yd>>2]=0;FM=yd+4|0;k[FM>>2]=0;k[yd+8>>2]=0;x=0;KM=Ba(563,72)|0;BM=x;x=0;do if(BM&1){GM=Hc()|0;PM=GM;QM=M;ug=3841}else{k[FM>>2]=KM;k[yd>>2]=KM;k[yd+8>>2]=KM+72;k[KM>>2]=k[zd>>2];i[KM+4>>0]=i[zd+4>>0]|0;Df=KM+8|0;Ef=zd+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,KM+48|0,zd+48|0);yM=x;x=0;if(yM&1){yM=Hc()|0;DM=M;OBa(KM);PM=yM;QM=DM;ug=3841;break}DM=zd+60|0;yM=k[DM+4>>2]|0;EM=KM+60|0;k[EM>>2]=k[DM>>2];k[EM+4>>2]=yM;k[FM>>2]=KM+72;k[xd>>2]=1;i[xd+4>>0]=1;k[xd+8>>2]=25;k[xd+40>>2]=1;x=0;xa(712,xd+48|0,yd|0);yM=x;x=0;if(!(yM&1)){k[xd+60>>2]=0;k[xd+64>>2]=0;k[wd>>2]=0;yM=wd+4|0;k[yM>>2]=0;k[wd+8>>2]=0;x=0;EM=Ba(563,72)|0;DM=x;x=0;do if(DM&1){GM=Hc()|0;RM=GM;SM=M;ug=3843}else{k[yM>>2]=EM;k[wd>>2]=EM;k[wd+8>>2]=EM+72;k[EM>>2]=k[xd>>2];i[EM+4>>0]=i[xd+4>>0]|0;Df=EM+8|0;Ef=xd+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,EM+48|0,xd+48|0);GM=x;x=0;if(GM&1){GM=Hc()|0;JM=M;OBa(EM);RM=GM;SM=JM;ug=3843;break}JM=xd+60|0;GM=k[JM+4>>2]|0;HM=EM+60|0;k[HM>>2]=k[JM>>2];k[HM+4>>2]=GM;k[yM>>2]=EM+72;k[vd>>2]=1;i[vd+4>>0]=1;GM=vd+8|0;k[GM>>2]=25;k[vd+40>>2]=1;HM=vd+48|0;x=0;xa(712,HM|0,wd|0);JM=x;x=0;do if(JM&1){TM=Hc()|0;UM=1;VM=TM;WM=M}else{TM=vd+60|0;k[TM>>2]=0;k[vd+64>>2]=0;k[Bd>>2]=k[h>>2];i[Bd+4>>0]=i[h+4>>0]|0;XM=Bd+8|0;Df=XM;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));YM=Bd+48|0;x=0;xa(712,YM|0,bA|0);ZM=x;x=0;do if(ZM&1){_M=Hc()|0;$M=1;aN=_M;bN=M}else{_M=Bf;cN=k[_M>>2]|0;dN=k[_M+4>>2]|0;_M=Bd+60|0;k[_M>>2]=cN;k[_M+4>>2]=dN;_M=Ad+16|0;k[_M>>2]=0;x=0;eN=Ba(563,80)|0;fN=x;x=0;do if(fN&1){gN=Hc()|0;hN=1;iN=gN;jN=M}else{k[eN>>2]=29608;gN=eN+8|0;k[gN>>2]=k[Bd>>2];i[gN+4>>0]=i[Bd+4>>0]|0;Df=eN+16|0;Ef=XM;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[eN+56>>2]=k[YM>>2];gN=Bd+52|0;k[eN+60>>2]=k[gN>>2];kN=Bd+56|0;k[eN+64>>2]=k[kN>>2];k[kN>>2]=0;k[gN>>2]=0;k[YM>>2]=0;kN=eN+68|0;k[kN>>2]=cN;k[kN+4>>2]=dN;k[_M>>2]=eN;k[CM>>2]=k[vd>>2];i[CM+4>>0]=i[vd+4>>0]|0;Df=n+4328|0;Ef=GM;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,n+4368|0,HM|0);kN=x;x=0;Db:do if(kN&1){lN=Hc()|0;mN=M;nN=lN;ug=3848}else{lN=TM;oN=k[lN+4>>2]|0;pN=n+4380|0;k[pN>>2]=k[lN>>2];k[pN+4>>2]=oN;oN=n+4392|0;pN=k[_M>>2]|0;Eb:do if(!pN)k[n+4408>>2]=0;else{do if((pN|0)==(Ad|0)){k[n+4408>>2]=oN;x=0;xa(k[(k[pN>>2]|0)+12>>2]|0,pN|0,oN|0);lN=x;x=0;if(!(lN&1))break Eb}else{x=0;lN=Ba(k[(k[pN>>2]|0)+8>>2]|0,pN|0)|0;qN=x;x=0;if(qN&1)break;k[n+4408>>2]=lN;break Eb}while(0);lN=Hc()|0;qN=M;rN=n+4368|0;sN=k[rN>>2]|0;if(!sN){mN=qN;nN=lN;ug=3848;break Db}tN=n+4372|0;uN=k[tN>>2]|0;if((uN|0)==(sN|0))vN=sN;else{wN=n+4376|0;xN=uN;do{uN=xN+-72|0;k[tN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,wN,uN);xN=k[tN>>2]|0}while((xN|0)!=(sN|0));vN=k[rN>>2]|0}OBa(vN);mN=qN;nN=lN;ug=3848;break Db}while(0);k[m>>2]=0;pN=m+4|0;k[pN>>2]=0;k[m+8>>2]=0;x=0;oN=Ba(563,4416)|0;sN=x;x=0;do if(!(sN&1)){k[pN>>2]=oN;k[m>>2]=oN;xN=m+8|0;k[xN>>2]=oN+4416;tN=n+4416|0;x=0;fb(215,m|0,n|0,tN|0);wN=x;x=0;if(wN&1)break;zF(lf);k[lf>>2]=k[m>>2];k[mf>>2]=k[pN>>2];wN=a+20|0;k[wN>>2]=k[xN>>2];k[xN>>2]=0;k[pN>>2]=0;k[m>>2]=0;xN=tN;do{tN=k[xN+-8>>2]|0;do if((tN|0)==(xN+-24|0))Sf[k[(k[tN>>2]|0)+16>>2]&2047](tN);else{if(!tN)break;Sf[k[(k[tN>>2]|0)+20>>2]&2047](tN)}while(0);tN=xN+-48|0;uN=k[tN>>2]|0;if(uN){yN=xN+-44|0;zN=k[yN>>2]|0;if((zN|0)==(uN|0))AN=uN;else{BN=xN+-40|0;CN=zN;do{zN=CN+-72|0;k[yN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,BN,zN);CN=k[yN>>2]|0}while((CN|0)!=(uN|0));AN=k[tN>>2]|0}OBa(AN)}xN=xN+-96|0}while((xN|0)!=(n|0));xN=k[_M>>2]|0;do if((xN|0)==(Ad|0))Sf[k[(k[Ad>>2]|0)+16>>2]&2047](Ad);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=Bd+48|0;lN=k[xN>>2]|0;if(lN){qN=k[gN>>2]|0;if((qN|0)==(lN|0))DN=lN;else{rN=Bd+56|0;uN=qN;do{qN=uN+-72|0;k[gN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,rN,qN);uN=k[gN>>2]|0}while((uN|0)!=(lN|0));DN=k[xN>>2]|0}OBa(DN)}lN=vd+48|0;uN=k[lN>>2]|0;if(uN){rN=vd+52|0;qN=k[rN>>2]|0;if((qN|0)==(uN|0))EN=uN;else{CN=vd+56|0;yN=qN;do{qN=yN+-72|0;k[rN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,CN,qN);yN=k[rN>>2]|0}while((yN|0)!=(uN|0));EN=k[lN>>2]|0}OBa(EN)}uN=k[wd>>2]|0;if(uN){yN=k[yM>>2]|0;if((yN|0)==(uN|0))FN=uN;else{rN=yN;while(1){yN=rN+-72|0;k[yM>>2]=yN;CN=rN+-24|0;xN=k[CN>>2]|0;if(!xN)GN=yN;else{qN=rN+-20|0;BN=k[qN>>2]|0;if((BN|0)==(xN|0)){HN=yN;IN=xN}else{yN=rN+-16|0;zN=BN;do{BN=zN+-72|0;k[qN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,yN,BN);zN=k[qN>>2]|0}while((zN|0)!=(xN|0));HN=k[yM>>2]|0;IN=k[CN>>2]|0}OBa(IN);GN=HN}if((GN|0)==(uN|0))break;else rN=GN}FN=k[wd>>2]|0}OBa(FN)}rN=xd+48|0;uN=k[rN>>2]|0;if(uN){lN=xd+52|0;xN=k[lN>>2]|0;if((xN|0)==(uN|0))JN=uN;else{zN=xd+56|0;qN=xN;do{xN=qN+-72|0;k[lN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,zN,xN);qN=k[lN>>2]|0}while((qN|0)!=(uN|0));JN=k[rN>>2]|0}OBa(JN)}uN=k[yd>>2]|0;if(uN){qN=k[FM>>2]|0;if((qN|0)==(uN|0))KN=uN;else{lN=qN;while(1){qN=lN+-72|0;k[FM>>2]=qN;zN=lN+-24|0;xN=k[zN>>2]|0;if(!xN)LN=qN;else{yN=lN+-20|0;tN=k[yN>>2]|0;if((tN|0)==(xN|0)){MN=qN;NN=xN}else{qN=lN+-16|0;BN=tN;do{tN=BN+-72|0;k[yN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,qN,tN);BN=k[yN>>2]|0}while((BN|0)!=(xN|0));MN=k[FM>>2]|0;NN=k[zN>>2]|0}OBa(NN);LN=MN}if((LN|0)==(uN|0))break;else lN=LN}KN=k[yd>>2]|0}OBa(KN)}lN=zd+48|0;uN=k[lN>>2]|0;if(uN){rN=zd+52|0;xN=k[rN>>2]|0;if((xN|0)==(uN|0))ON=uN;else{BN=zd+56|0;yN=xN;do{xN=yN+-72|0;k[rN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,BN,xN);yN=k[rN>>2]|0}while((yN|0)!=(uN|0));ON=k[lN>>2]|0}OBa(ON)}uN=k[wM>>2]|0;do if((uN|0)==(ud|0))Sf[k[(k[ud>>2]|0)+16>>2]&2047](ud);else{if(!uN)break;Sf[k[(k[uN>>2]|0)+20>>2]&2047](uN)}while(0);uN=rd+48|0;lN=k[uN>>2]|0;if(lN){yN=rd+52|0;rN=k[yN>>2]|0;if((rN|0)==(lN|0))PN=lN;else{BN=rd+56|0;xN=rN;do{rN=xN+-72|0;k[yN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,BN,rN);xN=k[yN>>2]|0}while((xN|0)!=(lN|0));PN=k[uN>>2]|0}OBa(PN)}lN=k[sd>>2]|0;if(lN){xN=k[gM>>2]|0;if((xN|0)==(lN|0))QN=lN;else{yN=xN;while(1){xN=yN+-72|0;k[gM>>2]=xN;BN=yN+-24|0;rN=k[BN>>2]|0;if(!rN)RN=xN;else{qN=yN+-20|0;CN=k[qN>>2]|0;if((CN|0)==(rN|0)){SN=xN;TN=rN}else{xN=yN+-16|0;tN=CN;do{CN=tN+-72|0;k[qN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,xN,CN);tN=k[qN>>2]|0}while((tN|0)!=(rN|0));SN=k[gM>>2]|0;TN=k[BN>>2]|0}OBa(TN);RN=SN}if((RN|0)==(lN|0))break;else yN=RN}QN=k[sd>>2]|0}OBa(QN)}yN=td+120|0;lN=k[yN>>2]|0;if(lN){uN=td+124|0;rN=k[uN>>2]|0;if((rN|0)==(lN|0))UN=lN;else{tN=td+128|0;qN=rN;do{rN=qN+-72|0;k[uN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,tN,rN);qN=k[uN>>2]|0}while((qN|0)!=(lN|0));UN=k[yN>>2]|0}OBa(UN)}lN=td+48|0;qN=k[lN>>2]|0;if(qN){uN=td+52|0;tN=k[uN>>2]|0;if((tN|0)==(qN|0))VN=qN;else{rN=td+56|0;xN=tN;do{tN=xN+-72|0;k[uN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,rN,tN);xN=k[uN>>2]|0}while((xN|0)!=(qN|0));VN=k[lN>>2]|0}OBa(VN)}qN=k[$L>>2]|0;do if((qN|0)==(qd|0))Sf[k[(k[qd>>2]|0)+16>>2]&2047](qd);else{if(!qN)break;Sf[k[(k[qN>>2]|0)+20>>2]&2047](qN)}while(0);qN=nd+48|0;lN=k[qN>>2]|0;if(lN){xN=nd+52|0;uN=k[xN>>2]|0;if((uN|0)==(lN|0))WN=lN;else{rN=nd+56|0;yN=uN;do{uN=yN+-72|0;k[xN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,rN,uN);yN=k[xN>>2]|0}while((yN|0)!=(lN|0));WN=k[qN>>2]|0}OBa(WN)}lN=k[od>>2]|0;if(lN){yN=k[LL>>2]|0;if((yN|0)==(lN|0))XN=lN;else{xN=yN;while(1){yN=xN+-72|0;k[LL>>2]=yN;rN=xN+-24|0;uN=k[rN>>2]|0;if(!uN)YN=yN;else{tN=xN+-20|0;zN=k[tN>>2]|0;if((zN|0)==(uN|0)){ZN=yN;_N=uN}else{yN=xN+-16|0;CN=zN;do{zN=CN+-72|0;k[tN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,yN,zN);CN=k[tN>>2]|0}while((CN|0)!=(uN|0));ZN=k[LL>>2]|0;_N=k[rN>>2]|0}OBa(_N);YN=ZN}if((YN|0)==(lN|0))break;else xN=YN}XN=k[od>>2]|0}OBa(XN)}xN=pd+120|0;lN=k[xN>>2]|0;if(lN){qN=pd+124|0;uN=k[qN>>2]|0;if((uN|0)==(lN|0))$N=lN;else{CN=pd+128|0;tN=uN;do{uN=tN+-72|0;k[qN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,CN,uN);tN=k[qN>>2]|0}while((tN|0)!=(lN|0));$N=k[xN>>2]|0}OBa($N)}lN=pd+48|0;tN=k[lN>>2]|0;if(tN){qN=pd+52|0;CN=k[qN>>2]|0;if((CN|0)==(tN|0))aO=tN;else{uN=pd+56|0;yN=CN;do{CN=yN+-72|0;k[qN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,uN,CN);yN=k[qN>>2]|0}while((yN|0)!=(tN|0));aO=k[lN>>2]|0}OBa(aO)}tN=k[EL>>2]|0;do if((tN|0)==(md|0))Sf[k[(k[md>>2]|0)+16>>2]&2047](md);else{if(!tN)break;Sf[k[(k[tN>>2]|0)+20>>2]&2047](tN)}while(0);tN=jd+48|0;lN=k[tN>>2]|0;if(lN){yN=jd+52|0;qN=k[yN>>2]|0;if((qN|0)==(lN|0))bO=lN;else{uN=jd+56|0;xN=qN;do{qN=xN+-72|0;k[yN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,uN,qN);xN=k[yN>>2]|0}while((xN|0)!=(lN|0));bO=k[tN>>2]|0}OBa(bO)}lN=k[kd>>2]|0;if(lN){xN=k[oL>>2]|0;if((xN|0)==(lN|0))cO=lN;else{yN=xN;while(1){xN=yN+-72|0;k[oL>>2]=xN;uN=yN+-24|0;qN=k[uN>>2]|0;if(!qN)dO=xN;else{CN=yN+-20|0;BN=k[CN>>2]|0;if((BN|0)==(qN|0)){eO=xN;fO=qN}else{xN=yN+-16|0;zN=BN;do{BN=zN+-72|0;k[CN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,xN,BN);zN=k[CN>>2]|0}while((zN|0)!=(qN|0));eO=k[oL>>2]|0;fO=k[uN>>2]|0}OBa(fO);dO=eO}if((dO|0)==(lN|0))break;else yN=dO}cO=k[kd>>2]|0}OBa(cO)}yN=ld+120|0;lN=k[yN>>2]|0;if(lN){tN=ld+124|0;qN=k[tN>>2]|0;if((qN|0)==(lN|0))gO=lN;else{zN=ld+128|0;CN=qN;do{qN=CN+-72|0;k[tN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,zN,qN);CN=k[tN>>2]|0}while((CN|0)!=(lN|0));gO=k[yN>>2]|0}OBa(gO)}lN=ld+48|0;CN=k[lN>>2]|0;if(CN){tN=ld+52|0;zN=k[tN>>2]|0;if((zN|0)==(CN|0))hO=CN;else{qN=ld+56|0;xN=zN;do{zN=xN+-72|0;k[tN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,qN,zN);xN=k[tN>>2]|0}while((xN|0)!=(CN|0));hO=k[lN>>2]|0}OBa(hO)}CN=k[hL>>2]|0;do if((CN|0)==(id|0))Sf[k[(k[id>>2]|0)+16>>2]&2047](id);else{if(!CN)break;Sf[k[(k[CN>>2]|0)+20>>2]&2047](CN)}while(0);CN=fd+48|0;lN=k[CN>>2]|0;if(lN){xN=fd+52|0;tN=k[xN>>2]|0;if((tN|0)==(lN|0))iO=lN;else{qN=fd+56|0;yN=tN;do{tN=yN+-72|0;k[xN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,qN,tN);yN=k[xN>>2]|0}while((yN|0)!=(lN|0));iO=k[CN>>2]|0}OBa(iO)}lN=k[gd>>2]|0;if(lN){yN=k[TK>>2]|0;if((yN|0)==(lN|0))jO=lN;else{xN=yN;while(1){yN=xN+-72|0;k[TK>>2]=yN;qN=xN+-24|0;tN=k[qN>>2]|0;if(!tN)kO=yN;else{zN=xN+-20|0;rN=k[zN>>2]|0;if((rN|0)==(tN|0)){lO=yN;mO=tN}else{yN=xN+-16|0;BN=rN;do{rN=BN+-72|0;k[zN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,yN,rN);BN=k[zN>>2]|0}while((BN|0)!=(tN|0));lO=k[TK>>2]|0;mO=k[qN>>2]|0}OBa(mO);kO=lO}if((kO|0)==(lN|0))break;else xN=kO}jO=k[gd>>2]|0}OBa(jO)}xN=hd+120|0;lN=k[xN>>2]|0;if(lN){CN=hd+124|0;tN=k[CN>>2]|0;if((tN|0)==(lN|0))nO=lN;else{BN=hd+128|0;zN=tN;do{tN=zN+-72|0;k[CN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,BN,tN);zN=k[CN>>2]|0}while((zN|0)!=(lN|0));nO=k[xN>>2]|0}OBa(nO)}lN=hd+48|0;zN=k[lN>>2]|0;if(zN){CN=hd+52|0;BN=k[CN>>2]|0;if((BN|0)==(zN|0))oO=zN;else{tN=hd+56|0;yN=BN;do{BN=yN+-72|0;k[CN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,tN,BN);yN=k[CN>>2]|0}while((yN|0)!=(zN|0));oO=k[lN>>2]|0}OBa(oO)}zN=k[MK>>2]|0;do if((zN|0)==(ed|0))Sf[k[(k[ed>>2]|0)+16>>2]&2047](ed);else{if(!zN)break;Sf[k[(k[zN>>2]|0)+20>>2]&2047](zN)}while(0);zN=bd+48|0;lN=k[zN>>2]|0;if(lN){yN=bd+52|0;CN=k[yN>>2]|0;if((CN|0)==(lN|0))pO=lN;else{tN=bd+56|0;xN=CN;do{CN=xN+-72|0;k[yN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,tN,CN);xN=k[yN>>2]|0}while((xN|0)!=(lN|0));pO=k[zN>>2]|0}OBa(pO)}lN=k[cd>>2]|0;if(lN){xN=k[wK>>2]|0;if((xN|0)==(lN|0))qO=lN;else{yN=xN;while(1){xN=yN+-72|0;k[wK>>2]=xN;tN=yN+-24|0;CN=k[tN>>2]|0;if(!CN)rO=xN;else{BN=yN+-20|0;uN=k[BN>>2]|0;if((uN|0)==(CN|0)){sO=xN;tO=CN}else{xN=yN+-16|0;rN=uN;do{uN=rN+-72|0;k[BN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,xN,uN);rN=k[BN>>2]|0}while((rN|0)!=(CN|0));sO=k[wK>>2]|0;tO=k[tN>>2]|0}OBa(tO);rO=sO}if((rO|0)==(lN|0))break;else yN=rO}qO=k[cd>>2]|0}OBa(qO)}yN=dd+120|0;lN=k[yN>>2]|0;if(lN){zN=dd+124|0;CN=k[zN>>2]|0;if((CN|0)==(lN|0))uO=lN;else{rN=dd+128|0;BN=CN;do{CN=BN+-72|0;k[zN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,rN,CN);BN=k[zN>>2]|0}while((BN|0)!=(lN|0));uO=k[yN>>2]|0}OBa(uO)}lN=dd+48|0;BN=k[lN>>2]|0;if(BN){zN=dd+52|0;rN=k[zN>>2]|0;if((rN|0)==(BN|0))vO=BN;else{CN=dd+56|0;xN=rN;do{rN=xN+-72|0;k[zN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,CN,rN);xN=k[zN>>2]|0}while((xN|0)!=(BN|0));vO=k[lN>>2]|0}OBa(vO)}BN=k[pK>>2]|0;do if((BN|0)==(ad|0))Sf[k[(k[ad>>2]|0)+16>>2]&2047](ad);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=Zc+48|0;lN=k[BN>>2]|0;if(lN){xN=Zc+52|0;zN=k[xN>>2]|0;if((zN|0)==(lN|0))wO=lN;else{CN=Zc+56|0;yN=zN;do{zN=yN+-72|0;k[xN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,CN,zN);yN=k[xN>>2]|0}while((yN|0)!=(lN|0));wO=k[BN>>2]|0}OBa(wO)}lN=k[_c>>2]|0;if(lN){yN=k[$J>>2]|0;if((yN|0)==(lN|0))xO=lN;else{xN=yN;while(1){yN=xN+-72|0;k[$J>>2]=yN;CN=xN+-24|0;zN=k[CN>>2]|0;if(!zN)yO=yN;else{rN=xN+-20|0;qN=k[rN>>2]|0;if((qN|0)==(zN|0)){zO=yN;AO=zN}else{yN=xN+-16|0;uN=qN;do{qN=uN+-72|0;k[rN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,yN,qN);uN=k[rN>>2]|0}while((uN|0)!=(zN|0));zO=k[$J>>2]|0;AO=k[CN>>2]|0}OBa(AO);yO=zO}if((yO|0)==(lN|0))break;else xN=yO}xO=k[_c>>2]|0}OBa(xO)}xN=$c+120|0;lN=k[xN>>2]|0;if(lN){BN=$c+124|0;zN=k[BN>>2]|0;if((zN|0)==(lN|0))BO=lN;else{uN=$c+128|0;rN=zN;do{zN=rN+-72|0;k[BN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,uN,zN);rN=k[BN>>2]|0}while((rN|0)!=(lN|0));BO=k[xN>>2]|0}OBa(BO)}lN=$c+48|0;rN=k[lN>>2]|0;if(rN){BN=$c+52|0;uN=k[BN>>2]|0;if((uN|0)==(rN|0))CO=rN;else{zN=$c+56|0;yN=uN;do{uN=yN+-72|0;k[BN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,zN,uN);yN=k[BN>>2]|0}while((yN|0)!=(rN|0));CO=k[lN>>2]|0}OBa(CO)}rN=k[UJ>>2]|0;do if((rN|0)==(Yc|0))Sf[k[(k[Yc>>2]|0)+16>>2]&2047](Yc);else{if(!rN)break;Sf[k[(k[rN>>2]|0)+20>>2]&2047](rN)}while(0);rN=Vc+48|0;lN=k[rN>>2]|0;if(lN){yN=Vc+52|0;BN=k[yN>>2]|0;if((BN|0)==(lN|0))DO=lN;else{zN=Vc+56|0;xN=BN;do{BN=xN+-72|0;k[yN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,zN,BN);xN=k[yN>>2]|0}while((xN|0)!=(lN|0));DO=k[rN>>2]|0}OBa(DO)}lN=k[Wc>>2]|0;if(lN){xN=k[EJ>>2]|0;if((xN|0)==(lN|0))EO=lN;else{yN=xN;while(1){xN=yN+-72|0;k[EJ>>2]=xN;zN=yN+-24|0;BN=k[zN>>2]|0;if(!BN)FO=xN;else{uN=yN+-20|0;tN=k[uN>>2]|0;if((tN|0)==(BN|0)){GO=xN;HO=BN}else{xN=yN+-16|0;qN=tN;do{tN=qN+-72|0;k[uN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,xN,tN);qN=k[uN>>2]|0}while((qN|0)!=(BN|0));GO=k[EJ>>2]|0;HO=k[zN>>2]|0}OBa(HO);FO=GO}if((FO|0)==(lN|0))break;else yN=FO}EO=k[Wc>>2]|0}OBa(EO)}yN=Xc+120|0;lN=k[yN>>2]|0;if(lN){rN=Xc+124|0;BN=k[rN>>2]|0;if((BN|0)==(lN|0))IO=lN;else{qN=Xc+128|0;uN=BN;do{BN=uN+-72|0;k[rN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,qN,BN);uN=k[rN>>2]|0}while((uN|0)!=(lN|0));IO=k[yN>>2]|0}OBa(IO)}lN=Xc+48|0;uN=k[lN>>2]|0;if(uN){rN=Xc+52|0;qN=k[rN>>2]|0;if((qN|0)==(uN|0))JO=uN;else{BN=Xc+56|0;xN=qN;do{qN=xN+-72|0;k[rN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,BN,qN);xN=k[rN>>2]|0}while((xN|0)!=(uN|0));JO=k[lN>>2]|0}OBa(JO)}uN=k[kJ>>2]|0;do if((uN|0)==(Tc|0))Sf[k[(k[Tc>>2]|0)+16>>2]&2047](Tc);else{if(!uN)break;Sf[k[(k[uN>>2]|0)+20>>2]&2047](uN)}while(0);uN=Uc+48|0;lN=k[uN>>2]|0;if(lN){xN=k[tJ>>2]|0;if((xN|0)==(lN|0))KO=lN;else{rN=Uc+56|0;BN=xN;do{xN=BN+-72|0;k[tJ>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,rN,xN);BN=k[tJ>>2]|0}while((BN|0)!=(lN|0));KO=k[uN>>2]|0}OBa(KO)}lN=Pc+48|0;BN=k[lN>>2]|0;if(BN){rN=Pc+52|0;xN=k[rN>>2]|0;if((xN|0)==(BN|0))LO=BN;else{yN=Pc+56|0;qN=xN;do{xN=qN+-72|0;k[rN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,yN,xN);qN=k[rN>>2]|0}while((qN|0)!=(BN|0));LO=k[lN>>2]|0}OBa(LO)}BN=k[Qc>>2]|0;if(BN){qN=k[TI>>2]|0;if((qN|0)==(BN|0))MO=BN;else{rN=qN;while(1){qN=rN+-72|0;k[TI>>2]=qN;yN=rN+-24|0;uN=k[yN>>2]|0;if(!uN)NO=qN;else{xN=rN+-20|0;CN=k[xN>>2]|0;if((CN|0)==(uN|0)){OO=qN;PO=uN}else{qN=rN+-16|0;tN=CN;do{CN=tN+-72|0;k[xN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,qN,CN);tN=k[xN>>2]|0}while((tN|0)!=(uN|0));OO=k[TI>>2]|0;PO=k[yN>>2]|0}OBa(PO);NO=OO}if((NO|0)==(BN|0))break;else rN=NO}MO=k[Qc>>2]|0}OBa(MO)}rN=Rc+120|0;BN=k[rN>>2]|0;if(BN){lN=Rc+124|0;uN=k[lN>>2]|0;if((uN|0)==(BN|0))QO=BN;else{tN=Rc+128|0;xN=uN;do{uN=xN+-72|0;k[lN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,tN,uN);xN=k[lN>>2]|0}while((xN|0)!=(BN|0));QO=k[rN>>2]|0}OBa(QO)}BN=Rc+48|0;xN=k[BN>>2]|0;if(xN){lN=Rc+52|0;tN=k[lN>>2]|0;if((tN|0)==(xN|0))RO=xN;else{uN=Rc+56|0;qN=tN;do{tN=qN+-72|0;k[lN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,uN,tN);qN=k[lN>>2]|0}while((qN|0)!=(xN|0));RO=k[BN>>2]|0}OBa(RO)}xN=k[zI>>2]|0;do if((xN|0)==(Nc|0))Sf[k[(k[Nc>>2]|0)+16>>2]&2047](Nc);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=Oc+48|0;BN=k[xN>>2]|0;if(BN){qN=k[II>>2]|0;if((qN|0)==(BN|0))SO=BN;else{lN=Oc+56|0;uN=qN;do{qN=uN+-72|0;k[II>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,lN,qN);uN=k[II>>2]|0}while((uN|0)!=(BN|0));SO=k[xN>>2]|0}OBa(SO)}BN=Kc+48|0;uN=k[BN>>2]|0;if(uN){lN=Kc+52|0;qN=k[lN>>2]|0;if((qN|0)==(uN|0))TO=uN;else{rN=Kc+56|0;tN=qN;do{qN=tN+-72|0;k[lN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,rN,qN);tN=k[lN>>2]|0}while((tN|0)!=(uN|0));TO=k[BN>>2]|0}OBa(TO)}uN=k[Lc>>2]|0;if(uN){tN=k[gI>>2]|0;if((tN|0)==(uN|0))UO=uN;else{lN=tN;while(1){tN=lN+-72|0;k[gI>>2]=tN;rN=lN+-24|0;xN=k[rN>>2]|0;if(!xN)VO=tN;else{qN=lN+-20|0;zN=k[qN>>2]|0;if((zN|0)==(xN|0)){WO=tN;XO=xN}else{tN=lN+-16|0;CN=zN;do{zN=CN+-72|0;k[qN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,tN,zN);CN=k[qN>>2]|0}while((CN|0)!=(xN|0));WO=k[gI>>2]|0;XO=k[rN>>2]|0}OBa(XO);VO=WO}if((VO|0)==(uN|0))break;else lN=VO}UO=k[Lc>>2]|0}OBa(UO)}lN=Mc+120|0;uN=k[lN>>2]|0;if(uN){BN=Mc+124|0;xN=k[BN>>2]|0;if((xN|0)==(uN|0))YO=uN;else{CN=Mc+128|0;qN=xN;do{xN=qN+-72|0;k[BN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,CN,xN);qN=k[BN>>2]|0}while((qN|0)!=(uN|0));YO=k[lN>>2]|0}OBa(YO)}uN=Mc+48|0;qN=k[uN>>2]|0;if(qN){BN=Mc+52|0;CN=k[BN>>2]|0;if((CN|0)==(qN|0))ZO=qN;else{xN=Mc+56|0;tN=CN;do{CN=tN+-72|0;k[BN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,xN,CN);tN=k[BN>>2]|0}while((tN|0)!=(qN|0));ZO=k[uN>>2]|0}OBa(ZO)}qN=k[NH>>2]|0;do if((qN|0)==(Jc|0))Sf[k[(k[Jc>>2]|0)+16>>2]&2047](Jc);else{if(!qN)break;Sf[k[(k[qN>>2]|0)+20>>2]&2047](qN)}while(0);qN=Ec+48|0;uN=k[qN>>2]|0;if(uN){tN=Ec+52|0;BN=k[tN>>2]|0;if((BN|0)==(uN|0))_O=uN;else{xN=Ec+56|0;lN=BN;do{BN=lN+-72|0;k[tN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,xN,BN);lN=k[tN>>2]|0}while((lN|0)!=(uN|0));_O=k[qN>>2]|0}OBa(_O)}uN=k[Fc>>2]|0;if(uN){lN=k[LH>>2]|0;if((lN|0)==(uN|0))$O=uN;else{tN=lN;while(1){lN=tN+-72|0;k[LH>>2]=lN;xN=tN+-24|0;BN=k[xN>>2]|0;if(!BN)aP=lN;else{CN=tN+-20|0;yN=k[CN>>2]|0;if((yN|0)==(BN|0)){bP=lN;cP=BN}else{lN=tN+-16|0;zN=yN;do{yN=zN+-72|0;k[CN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,lN,yN);zN=k[CN>>2]|0}while((zN|0)!=(BN|0));bP=k[LH>>2]|0;cP=k[xN>>2]|0}OBa(cP);aP=bP}if((aP|0)==(uN|0))break;else tN=aP}$O=k[Fc>>2]|0}OBa($O)}tN=Gc+120|0;uN=k[tN>>2]|0;if(uN){qN=Gc+124|0;BN=k[qN>>2]|0;if((BN|0)==(uN|0))dP=uN;else{zN=Gc+128|0;CN=BN;do{BN=CN+-72|0;k[qN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,zN,BN);CN=k[qN>>2]|0}while((CN|0)!=(uN|0));dP=k[tN>>2]|0}OBa(dP)}uN=Gc+48|0;CN=k[uN>>2]|0;if(CN){qN=Gc+52|0;zN=k[qN>>2]|0;if((zN|0)==(CN|0))eP=CN;else{BN=Gc+56|0;lN=zN;do{zN=lN+-72|0;k[qN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,BN,zN);lN=k[qN>>2]|0}while((lN|0)!=(CN|0));eP=k[uN>>2]|0}OBa(eP)}CN=k[pH>>2]|0;do if((CN|0)==(Dc|0))Sf[k[(k[Dc>>2]|0)+16>>2]&2047](Dc);else{if(!CN)break;Sf[k[(k[CN>>2]|0)+20>>2]&2047](CN)}while(0);CN=Ac+48|0;uN=k[CN>>2]|0;if(uN){lN=Ac+52|0;qN=k[lN>>2]|0;if((qN|0)==(uN|0))fP=uN;else{BN=Ac+56|0;tN=qN;do{qN=tN+-72|0;k[lN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,BN,qN);tN=k[lN>>2]|0}while((tN|0)!=(uN|0));fP=k[CN>>2]|0}OBa(fP)}uN=k[Bc>>2]|0;if(uN){tN=k[nH>>2]|0;if((tN|0)==(uN|0))gP=uN;else{lN=tN;while(1){tN=lN+-72|0;k[nH>>2]=tN;BN=lN+-24|0;qN=k[BN>>2]|0;if(!qN)hP=tN;else{zN=lN+-20|0;rN=k[zN>>2]|0;if((rN|0)==(qN|0)){iP=tN;jP=qN}else{tN=lN+-16|0;yN=rN;do{rN=yN+-72|0;k[zN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,tN,rN);yN=k[zN>>2]|0}while((yN|0)!=(qN|0));iP=k[nH>>2]|0;jP=k[BN>>2]|0}OBa(jP);hP=iP}if((hP|0)==(uN|0))break;else lN=hP}gP=k[Bc>>2]|0}OBa(gP)}lN=Cc+120|0;uN=k[lN>>2]|0;if(uN){CN=Cc+124|0;qN=k[CN>>2]|0;if((qN|0)==(uN|0))kP=uN;else{yN=Cc+128|0;zN=qN;do{qN=zN+-72|0;k[CN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,yN,qN);zN=k[CN>>2]|0}while((zN|0)!=(uN|0));kP=k[lN>>2]|0}OBa(kP)}uN=Cc+48|0;zN=k[uN>>2]|0;if(zN){CN=Cc+52|0;yN=k[CN>>2]|0;if((yN|0)==(zN|0))lP=zN;else{qN=Cc+56|0;tN=yN;do{yN=tN+-72|0;k[CN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,qN,yN);tN=k[CN>>2]|0}while((tN|0)!=(zN|0));lP=k[uN>>2]|0}OBa(lP)}zN=k[eH>>2]|0;do if((zN|0)==(zc|0))Sf[k[(k[zc>>2]|0)+16>>2]&2047](zc);else{if(!zN)break;Sf[k[(k[zN>>2]|0)+20>>2]&2047](zN)}while(0);zN=wc+48|0;uN=k[zN>>2]|0;if(uN){tN=wc+52|0;CN=k[tN>>2]|0;if((CN|0)==(uN|0))mP=uN;else{qN=wc+56|0;lN=CN;do{CN=lN+-72|0;k[tN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,qN,CN);lN=k[tN>>2]|0}while((lN|0)!=(uN|0));mP=k[zN>>2]|0}OBa(mP)}uN=k[xc>>2]|0;if(uN){lN=k[VG>>2]|0;if((lN|0)==(uN|0))nP=uN;else{tN=lN;while(1){lN=tN+-72|0;k[VG>>2]=lN;qN=tN+-24|0;CN=k[qN>>2]|0;if(!CN)oP=lN;else{yN=tN+-20|0;xN=k[yN>>2]|0;if((xN|0)==(CN|0)){pP=lN;qP=CN}else{lN=tN+-16|0;rN=xN;do{xN=rN+-72|0;k[yN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,lN,xN);rN=k[yN>>2]|0}while((rN|0)!=(CN|0));pP=k[VG>>2]|0;qP=k[qN>>2]|0}OBa(qP);oP=pP}if((oP|0)==(uN|0))break;else tN=oP}nP=k[xc>>2]|0}OBa(nP)}tN=yc+120|0;uN=k[tN>>2]|0;if(uN){zN=yc+124|0;CN=k[zN>>2]|0;if((CN|0)==(uN|0))rP=uN;else{rN=yc+128|0;yN=CN;do{CN=yN+-72|0;k[zN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,rN,CN);yN=k[zN>>2]|0}while((yN|0)!=(uN|0));rP=k[tN>>2]|0}OBa(rP)}uN=yc+48|0;yN=k[uN>>2]|0;if(yN){zN=yc+52|0;rN=k[zN>>2]|0;if((rN|0)==(yN|0))sP=yN;else{CN=yc+56|0;lN=rN;do{rN=lN+-72|0;k[zN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,CN,rN);lN=k[zN>>2]|0}while((lN|0)!=(yN|0));sP=k[uN>>2]|0}OBa(sP)}yN=k[rG>>2]|0;do if((yN|0)==(vc|0))Sf[k[(k[vc>>2]|0)+16>>2]&2047](vc);else{if(!yN)break;Sf[k[(k[yN>>2]|0)+20>>2]&2047](yN)}while(0);yN=sc+48|0;uN=k[yN>>2]|0;if(uN){lN=sc+52|0;zN=k[lN>>2]|0;if((zN|0)==(uN|0))tP=uN;else{CN=sc+56|0;tN=zN;do{zN=tN+-72|0;k[lN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,CN,zN);tN=k[lN>>2]|0}while((tN|0)!=(uN|0));tP=k[yN>>2]|0}OBa(tP)}uN=k[tc>>2]|0;if(uN){tN=k[pG>>2]|0;if((tN|0)==(uN|0))uP=uN;else{lN=tN;while(1){tN=lN+-72|0;k[pG>>2]=tN;CN=lN+-24|0;zN=k[CN>>2]|0;if(!zN)vP=tN;else{rN=lN+-20|0;BN=k[rN>>2]|0;if((BN|0)==(zN|0)){wP=tN;xP=zN}else{tN=lN+-16|0;xN=BN;do{BN=xN+-72|0;k[rN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,tN,BN);xN=k[rN>>2]|0}while((xN|0)!=(zN|0));wP=k[pG>>2]|0;xP=k[CN>>2]|0}OBa(xP);vP=wP}if((vP|0)==(uN|0))break;else lN=vP}uP=k[tc>>2]|0}OBa(uP)}lN=uc+120|0;uN=k[lN>>2]|0;if(uN){yN=uc+124|0;zN=k[yN>>2]|0;if((zN|0)==(uN|0))yP=uN;else{xN=uc+128|0;rN=zN;do{zN=rN+-72|0;k[yN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,xN,zN);rN=k[yN>>2]|0}while((rN|0)!=(uN|0));yP=k[lN>>2]|0}OBa(yP)}uN=uc+48|0;rN=k[uN>>2]|0;if(rN){yN=uc+52|0;xN=k[yN>>2]|0;if((xN|0)==(rN|0))zP=rN;else{zN=uc+56|0;tN=xN;do{xN=tN+-72|0;k[yN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,zN,xN);tN=k[yN>>2]|0}while((tN|0)!=(rN|0));zP=k[uN>>2]|0}OBa(zP)}rN=k[VF>>2]|0;do if((rN|0)==(rc|0))Sf[k[(k[rc>>2]|0)+16>>2]&2047](rc);else{if(!rN)break;Sf[k[(k[rN>>2]|0)+20>>2]&2047](rN)}while(0);rN=oc+48|0;uN=k[rN>>2]|0;if(uN){tN=oc+52|0;yN=k[tN>>2]|0;if((yN|0)==(uN|0))AP=uN;else{zN=oc+56|0;lN=yN;do{yN=lN+-72|0;k[tN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,zN,yN);lN=k[tN>>2]|0}while((lN|0)!=(uN|0));AP=k[rN>>2]|0}OBa(AP)}uN=k[pc>>2]|0;if(uN){lN=k[TF>>2]|0;if((lN|0)==(uN|0))BP=uN;else{tN=lN;while(1){lN=tN+-72|0;k[TF>>2]=lN;zN=tN+-24|0;yN=k[zN>>2]|0;if(!yN)CP=lN;else{xN=tN+-20|0;qN=k[xN>>2]|0;if((qN|0)==(yN|0)){DP=lN;EP=yN}else{lN=tN+-16|0;BN=qN;do{qN=BN+-72|0;k[xN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,lN,qN);BN=k[xN>>2]|0}while((BN|0)!=(yN|0));DP=k[TF>>2]|0;EP=k[zN>>2]|0}OBa(EP);CP=DP}if((CP|0)==(uN|0))break;else tN=CP}BP=k[pc>>2]|0}OBa(BP)}tN=qc+120|0;uN=k[tN>>2]|0;if(uN){rN=qc+124|0;yN=k[rN>>2]|0;if((yN|0)==(uN|0))FP=uN;else{BN=qc+128|0;xN=yN;do{yN=xN+-72|0;k[rN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,BN,yN);xN=k[rN>>2]|0}while((xN|0)!=(uN|0));FP=k[tN>>2]|0}OBa(FP)}uN=qc+48|0;xN=k[uN>>2]|0;if(xN){rN=qc+52|0;BN=k[rN>>2]|0;if((BN|0)==(xN|0))GP=xN;else{yN=qc+56|0;lN=BN;do{BN=lN+-72|0;k[rN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,yN,BN);lN=k[rN>>2]|0}while((lN|0)!=(xN|0));GP=k[uN>>2]|0}OBa(GP)}xN=k[tF>>2]|0;do if((xN|0)==(nc|0))Sf[k[(k[nc>>2]|0)+16>>2]&2047](nc);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=kc+48|0;uN=k[xN>>2]|0;if(uN){lN=kc+52|0;rN=k[lN>>2]|0;if((rN|0)==(uN|0))HP=uN;else{yN=kc+56|0;tN=rN;do{rN=tN+-72|0;k[lN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,yN,rN);tN=k[lN>>2]|0}while((tN|0)!=(uN|0));HP=k[xN>>2]|0}OBa(HP)}uN=k[lc>>2]|0;if(uN){tN=k[rF>>2]|0;if((tN|0)==(uN|0))IP=uN;else{lN=tN;while(1){tN=lN+-72|0;k[rF>>2]=tN;yN=lN+-24|0;rN=k[yN>>2]|0;if(!rN)JP=tN;else{BN=lN+-20|0;CN=k[BN>>2]|0;if((CN|0)==(rN|0)){KP=tN;LP=rN}else{tN=lN+-16|0;qN=CN;do{CN=qN+-72|0;k[BN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,tN,CN);qN=k[BN>>2]|0}while((qN|0)!=(rN|0));KP=k[rF>>2]|0;LP=k[yN>>2]|0}OBa(LP);JP=KP}if((JP|0)==(uN|0))break;else lN=JP}IP=k[lc>>2]|0}OBa(IP)}lN=mc+120|0;uN=k[lN>>2]|0;if(uN){xN=mc+124|0;rN=k[xN>>2]|0;if((rN|0)==(uN|0))MP=uN;else{qN=mc+128|0;BN=rN;do{rN=BN+-72|0;k[xN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,qN,rN);BN=k[xN>>2]|0}while((BN|0)!=(uN|0));MP=k[lN>>2]|0}OBa(MP)}uN=mc+48|0;BN=k[uN>>2]|0;if(BN){xN=mc+52|0;qN=k[xN>>2]|0;if((qN|0)==(BN|0))NP=BN;else{rN=mc+56|0;tN=qN;do{qN=tN+-72|0;k[xN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,rN,qN);tN=k[xN>>2]|0}while((tN|0)!=(BN|0));NP=k[uN>>2]|0}OBa(NP)}BN=k[XE>>2]|0;do if((BN|0)==(ic|0))Sf[k[(k[ic>>2]|0)+16>>2]&2047](ic);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=jc+48|0;uN=k[BN>>2]|0;if(uN){tN=k[eF>>2]|0;if((tN|0)==(uN|0))OP=uN;else{xN=jc+56|0;rN=tN;do{tN=rN+-72|0;k[eF>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,xN,tN);rN=k[eF>>2]|0}while((rN|0)!=(uN|0));OP=k[BN>>2]|0}OBa(OP)}uN=ec+48|0;rN=k[uN>>2]|0;if(rN){xN=ec+52|0;tN=k[xN>>2]|0;if((tN|0)==(rN|0))PP=rN;else{lN=ec+56|0;qN=tN;do{tN=qN+-72|0;k[xN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,lN,tN);qN=k[xN>>2]|0}while((qN|0)!=(rN|0));PP=k[uN>>2]|0}OBa(PP)}rN=k[fc>>2]|0;if(rN){qN=k[EE>>2]|0;if((qN|0)==(rN|0))QP=rN;else{xN=qN;while(1){qN=xN+-72|0;k[EE>>2]=qN;lN=xN+-24|0;BN=k[lN>>2]|0;if(!BN)RP=qN;else{tN=xN+-20|0;zN=k[tN>>2]|0;if((zN|0)==(BN|0)){SP=qN;TP=BN}else{qN=xN+-16|0;CN=zN;do{zN=CN+-72|0;k[tN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,qN,zN);CN=k[tN>>2]|0}while((CN|0)!=(BN|0));SP=k[EE>>2]|0;TP=k[lN>>2]|0}OBa(TP);RP=SP}if((RP|0)==(rN|0))break;else xN=RP}QP=k[fc>>2]|0}OBa(QP)}xN=gc+120|0;rN=k[xN>>2]|0;if(rN){uN=gc+124|0;BN=k[uN>>2]|0;if((BN|0)==(rN|0))UP=rN;else{CN=gc+128|0;tN=BN;do{BN=tN+-72|0;k[uN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,CN,BN);tN=k[uN>>2]|0}while((tN|0)!=(rN|0));UP=k[xN>>2]|0}OBa(UP)}rN=gc+48|0;tN=k[rN>>2]|0;if(tN){uN=gc+52|0;CN=k[uN>>2]|0;if((CN|0)==(tN|0))VP=tN;else{BN=gc+56|0;qN=CN;do{CN=qN+-72|0;k[uN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,BN,CN);qN=k[uN>>2]|0}while((qN|0)!=(tN|0));VP=k[rN>>2]|0}OBa(VP)}tN=k[iE>>2]|0;do if((tN|0)==(cc|0))Sf[k[(k[cc>>2]|0)+16>>2]&2047](cc);else{if(!tN)break;Sf[k[(k[tN>>2]|0)+20>>2]&2047](tN)}while(0);tN=dc+48|0;rN=k[tN>>2]|0;if(rN){qN=k[rE>>2]|0;if((qN|0)==(rN|0))WP=rN;else{uN=dc+56|0;BN=qN;do{qN=BN+-72|0;k[rE>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,uN,qN);BN=k[rE>>2]|0}while((BN|0)!=(rN|0));WP=k[tN>>2]|0}OBa(WP)}rN=$b+48|0;BN=k[rN>>2]|0;if(BN){uN=$b+52|0;qN=k[uN>>2]|0;if((qN|0)==(BN|0))XP=BN;else{xN=$b+56|0;CN=qN;do{qN=CN+-72|0;k[uN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,xN,qN);CN=k[uN>>2]|0}while((CN|0)!=(BN|0));XP=k[rN>>2]|0}OBa(XP)}BN=k[ac>>2]|0;if(BN){CN=k[SD>>2]|0;if((CN|0)==(BN|0))YP=BN;else{uN=CN;while(1){CN=uN+-72|0;k[SD>>2]=CN;xN=uN+-24|0;tN=k[xN>>2]|0;if(!tN)ZP=CN;else{qN=uN+-20|0;yN=k[qN>>2]|0;if((yN|0)==(tN|0)){_P=CN;$P=tN}else{CN=uN+-16|0;zN=yN;do{yN=zN+-72|0;k[qN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,CN,yN);zN=k[qN>>2]|0}while((zN|0)!=(tN|0));_P=k[SD>>2]|0;$P=k[xN>>2]|0}OBa($P);ZP=_P}if((ZP|0)==(BN|0))break;else uN=ZP}YP=k[ac>>2]|0}OBa(YP)}uN=bc+120|0;BN=k[uN>>2]|0;if(BN){rN=bc+124|0;tN=k[rN>>2]|0;if((tN|0)==(BN|0))aQ=BN;else{zN=bc+128|0;qN=tN;do{tN=qN+-72|0;k[rN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,zN,tN);qN=k[rN>>2]|0}while((qN|0)!=(BN|0));aQ=k[uN>>2]|0}OBa(aQ)}BN=bc+48|0;qN=k[BN>>2]|0;if(qN){rN=bc+52|0;zN=k[rN>>2]|0;if((zN|0)==(qN|0))bQ=qN;else{tN=bc+56|0;CN=zN;do{zN=CN+-72|0;k[rN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,tN,zN);CN=k[rN>>2]|0}while((CN|0)!=(qN|0));bQ=k[BN>>2]|0}OBa(bQ)}qN=k[wD>>2]|0;do if((qN|0)==(Zb|0))Sf[k[(k[Zb>>2]|0)+16>>2]&2047](Zb);else{if(!qN)break;Sf[k[(k[qN>>2]|0)+20>>2]&2047](qN)}while(0);qN=_b+48|0;BN=k[qN>>2]|0;if(BN){CN=k[FD>>2]|0;if((CN|0)==(BN|0))cQ=BN;else{rN=_b+56|0;tN=CN;do{CN=tN+-72|0;k[FD>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,rN,CN);tN=k[FD>>2]|0}while((tN|0)!=(BN|0));cQ=k[qN>>2]|0}OBa(cQ)}BN=Wb+48|0;tN=k[BN>>2]|0;if(tN){rN=Wb+52|0;CN=k[rN>>2]|0;if((CN|0)==(tN|0))dQ=tN;else{uN=Wb+56|0;zN=CN;do{CN=zN+-72|0;k[rN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,uN,CN);zN=k[rN>>2]|0}while((zN|0)!=(tN|0));dQ=k[BN>>2]|0}OBa(dQ)}tN=k[Xb>>2]|0;if(tN){zN=k[eD>>2]|0;if((zN|0)==(tN|0))eQ=tN;else{rN=zN;while(1){zN=rN+-72|0;k[eD>>2]=zN;uN=rN+-24|0;qN=k[uN>>2]|0;if(!qN)fQ=zN;else{CN=rN+-20|0;lN=k[CN>>2]|0;if((lN|0)==(qN|0)){gQ=zN;hQ=qN}else{zN=rN+-16|0;yN=lN;do{lN=yN+-72|0;k[CN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,zN,lN);yN=k[CN>>2]|0}while((yN|0)!=(qN|0));gQ=k[eD>>2]|0;hQ=k[uN>>2]|0}OBa(hQ);fQ=gQ}if((fQ|0)==(tN|0))break;else rN=fQ}eQ=k[Xb>>2]|0}OBa(eQ)}rN=Yb+120|0;tN=k[rN>>2]|0;if(tN){BN=Yb+124|0;qN=k[BN>>2]|0;if((qN|0)==(tN|0))iQ=tN;else{yN=Yb+128|0;CN=qN;do{qN=CN+-72|0;k[BN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,yN,qN);CN=k[BN>>2]|0}while((CN|0)!=(tN|0));iQ=k[rN>>2]|0}OBa(iQ)}tN=Yb+48|0;CN=k[tN>>2]|0;if(CN){BN=Yb+52|0;yN=k[BN>>2]|0;if((yN|0)==(CN|0))jQ=CN;else{qN=Yb+56|0;zN=yN;do{yN=zN+-72|0;k[BN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,qN,yN);zN=k[BN>>2]|0}while((zN|0)!=(CN|0));jQ=k[tN>>2]|0}OBa(jQ)}CN=k[KC>>2]|0;do if((CN|0)==(Ub|0))Sf[k[(k[Ub>>2]|0)+16>>2]&2047](Ub);else{if(!CN)break;Sf[k[(k[CN>>2]|0)+20>>2]&2047](CN)}while(0);CN=Vb+48|0;tN=k[CN>>2]|0;if(tN){zN=k[TC>>2]|0;if((zN|0)==(tN|0))kQ=tN;else{BN=Vb+56|0;qN=zN;do{zN=qN+-72|0;k[TC>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,BN,zN);qN=k[TC>>2]|0}while((qN|0)!=(tN|0));kQ=k[CN>>2]|0}OBa(kQ)}tN=Rb+48|0;qN=k[tN>>2]|0;if(qN){BN=Rb+52|0;zN=k[BN>>2]|0;if((zN|0)==(qN|0))lQ=qN;else{rN=Rb+56|0;yN=zN;do{zN=yN+-72|0;k[BN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,rN,zN);yN=k[BN>>2]|0}while((yN|0)!=(qN|0));lQ=k[tN>>2]|0}OBa(lQ)}qN=k[Sb>>2]|0;if(qN){yN=k[sC>>2]|0;if((yN|0)==(qN|0))mQ=qN;else{BN=yN;while(1){yN=BN+-72|0;k[sC>>2]=yN;rN=BN+-24|0;CN=k[rN>>2]|0;if(!CN)nQ=yN;else{zN=BN+-20|0;xN=k[zN>>2]|0;if((xN|0)==(CN|0)){oQ=yN;pQ=CN}else{yN=BN+-16|0;lN=xN;do{xN=lN+-72|0;k[zN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,yN,xN);lN=k[zN>>2]|0}while((lN|0)!=(CN|0));oQ=k[sC>>2]|0;pQ=k[rN>>2]|0}OBa(pQ);nQ=oQ}if((nQ|0)==(qN|0))break;else BN=nQ}mQ=k[Sb>>2]|0}OBa(mQ)}BN=Tb+120|0;qN=k[BN>>2]|0;if(qN){tN=Tb+124|0;CN=k[tN>>2]|0;if((CN|0)==(qN|0))qQ=qN;else{lN=Tb+128|0;zN=CN;do{CN=zN+-72|0;k[tN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,lN,CN);zN=k[tN>>2]|0}while((zN|0)!=(qN|0));qQ=k[BN>>2]|0}OBa(qQ)}qN=Tb+48|0;zN=k[qN>>2]|0;if(zN){tN=Tb+52|0;lN=k[tN>>2]|0;if((lN|0)==(zN|0))rQ=zN;else{CN=Tb+56|0;yN=lN;do{lN=yN+-72|0;k[tN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,CN,lN);yN=k[tN>>2]|0}while((yN|0)!=(zN|0));rQ=k[qN>>2]|0}OBa(rQ)}zN=k[YB>>2]|0;do if((zN|0)==(Pb|0))Sf[k[(k[Pb>>2]|0)+16>>2]&2047](Pb);else{if(!zN)break;Sf[k[(k[zN>>2]|0)+20>>2]&2047](zN)}while(0);zN=Qb+48|0;qN=k[zN>>2]|0;if(qN){yN=k[fC>>2]|0;if((yN|0)==(qN|0))sQ=qN;else{tN=Qb+56|0;CN=yN;do{yN=CN+-72|0;k[fC>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,tN,yN);CN=k[fC>>2]|0}while((CN|0)!=(qN|0));sQ=k[zN>>2]|0}OBa(sQ)}qN=Mb+48|0;CN=k[qN>>2]|0;if(CN){tN=Mb+52|0;yN=k[tN>>2]|0;if((yN|0)==(CN|0))tQ=CN;else{BN=Mb+56|0;lN=yN;do{yN=lN+-72|0;k[tN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,BN,yN);lN=k[tN>>2]|0}while((lN|0)!=(CN|0));tQ=k[qN>>2]|0}OBa(tQ)}CN=k[Nb>>2]|0;if(CN){lN=k[GB>>2]|0;if((lN|0)==(CN|0))uQ=CN;else{tN=lN;while(1){lN=tN+-72|0;k[GB>>2]=lN;BN=tN+-24|0;zN=k[BN>>2]|0;if(!zN)vQ=lN;else{yN=tN+-20|0;uN=k[yN>>2]|0;if((uN|0)==(zN|0)){wQ=lN;xQ=zN}else{lN=tN+-16|0;xN=uN;do{uN=xN+-72|0;k[yN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,lN,uN);xN=k[yN>>2]|0}while((xN|0)!=(zN|0));wQ=k[GB>>2]|0;xQ=k[BN>>2]|0}OBa(xQ);vQ=wQ}if((vQ|0)==(CN|0))break;else tN=vQ}uQ=k[Nb>>2]|0}OBa(uQ)}tN=Ob+120|0;CN=k[tN>>2]|0;if(CN){qN=Ob+124|0;zN=k[qN>>2]|0;if((zN|0)==(CN|0))yQ=CN;else{xN=Ob+128|0;yN=zN;do{zN=yN+-72|0;k[qN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,xN,zN);yN=k[qN>>2]|0}while((yN|0)!=(CN|0));yQ=k[tN>>2]|0}OBa(yQ)}CN=Ob+48|0;yN=k[CN>>2]|0;if(yN){qN=Ob+52|0;xN=k[qN>>2]|0;if((xN|0)==(yN|0))zQ=yN;else{zN=Ob+56|0;lN=xN;do{xN=lN+-72|0;k[qN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,zN,xN);lN=k[qN>>2]|0}while((lN|0)!=(yN|0));zQ=k[CN>>2]|0}OBa(zQ)}yN=k[kB>>2]|0;do if((yN|0)==(Kb|0))Sf[k[(k[Kb>>2]|0)+16>>2]&2047](Kb);else{if(!yN)break;Sf[k[(k[yN>>2]|0)+20>>2]&2047](yN)}while(0);yN=Lb+48|0;CN=k[yN>>2]|0;if(CN){lN=k[tB>>2]|0;if((lN|0)==(CN|0))AQ=CN;else{qN=Lb+56|0;zN=lN;do{lN=zN+-72|0;k[tB>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,qN,lN);zN=k[tB>>2]|0}while((zN|0)!=(CN|0));AQ=k[yN>>2]|0}OBa(AQ)}CN=Hb+48|0;zN=k[CN>>2]|0;if(zN){qN=Hb+52|0;lN=k[qN>>2]|0;if((lN|0)==(zN|0))BQ=zN;else{tN=Hb+56|0;xN=lN;do{lN=xN+-72|0;k[qN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,tN,lN);xN=k[qN>>2]|0}while((xN|0)!=(zN|0));BQ=k[CN>>2]|0}OBa(BQ)}zN=k[Ib>>2]|0;if(zN){xN=k[UA>>2]|0;if((xN|0)==(zN|0))CQ=zN;else{qN=xN;while(1){xN=qN+-72|0;k[UA>>2]=xN;tN=qN+-24|0;yN=k[tN>>2]|0;if(!yN)DQ=xN;else{lN=qN+-20|0;rN=k[lN>>2]|0;if((rN|0)==(yN|0)){EQ=xN;FQ=yN}else{xN=qN+-16|0;uN=rN;do{rN=uN+-72|0;k[lN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,xN,rN);uN=k[lN>>2]|0}while((uN|0)!=(yN|0));EQ=k[UA>>2]|0;FQ=k[tN>>2]|0}OBa(FQ);DQ=EQ}if((DQ|0)==(zN|0))break;else qN=DQ}CQ=k[Ib>>2]|0}OBa(CQ)}qN=Jb+120|0;zN=k[qN>>2]|0;if(zN){CN=Jb+124|0;yN=k[CN>>2]|0;if((yN|0)==(zN|0))GQ=zN;else{uN=Jb+128|0;lN=yN;do{yN=lN+-72|0;k[CN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,uN,yN);lN=k[CN>>2]|0}while((lN|0)!=(zN|0));GQ=k[qN>>2]|0}OBa(GQ)}zN=Jb+48|0;lN=k[zN>>2]|0;if(lN){CN=Jb+52|0;uN=k[CN>>2]|0;if((uN|0)==(lN|0))HQ=lN;else{yN=Jb+56|0;xN=uN;do{uN=xN+-72|0;k[CN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,yN,uN);xN=k[CN>>2]|0}while((xN|0)!=(lN|0));HQ=k[zN>>2]|0}OBa(HQ)}lN=k[yA>>2]|0;do if((lN|0)==(Fb|0))Sf[k[(k[Fb>>2]|0)+16>>2]&2047](Fb);else{if(!lN)break;Sf[k[(k[lN>>2]|0)+20>>2]&2047](lN)}while(0);lN=Gb+48|0;zN=k[lN>>2]|0;if(zN){xN=k[HA>>2]|0;if((xN|0)==(zN|0))IQ=zN;else{CN=Gb+56|0;yN=xN;do{xN=yN+-72|0;k[HA>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,CN,xN);yN=k[HA>>2]|0}while((yN|0)!=(zN|0));IQ=k[lN>>2]|0}OBa(IQ)}zN=Cb+48|0;yN=k[zN>>2]|0;if(yN){CN=Cb+52|0;xN=k[CN>>2]|0;if((xN|0)==(yN|0))JQ=yN;else{qN=Cb+56|0;uN=xN;do{xN=uN+-72|0;k[CN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,qN,xN);uN=k[CN>>2]|0}while((uN|0)!=(yN|0));JQ=k[zN>>2]|0}OBa(JQ)}yN=k[Db>>2]|0;if(yN){uN=k[kA>>2]|0;if((uN|0)==(yN|0))KQ=yN;else{CN=uN;while(1){uN=CN+-72|0;k[kA>>2]=uN;qN=CN+-24|0;lN=k[qN>>2]|0;if(!lN)LQ=uN;else{xN=CN+-20|0;BN=k[xN>>2]|0;if((BN|0)==(lN|0)){MQ=uN;NQ=lN}else{uN=CN+-16|0;rN=BN;do{BN=rN+-72|0;k[xN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,uN,BN);rN=k[xN>>2]|0}while((rN|0)!=(lN|0));MQ=k[kA>>2]|0;NQ=k[qN>>2]|0}OBa(NQ);LQ=MQ}if((LQ|0)==(yN|0))break;else CN=LQ}KQ=k[Db>>2]|0}OBa(KQ)}CN=Eb+120|0;yN=k[CN>>2]|0;if(yN){zN=Eb+124|0;lN=k[zN>>2]|0;if((lN|0)==(yN|0))OQ=yN;else{rN=Eb+128|0;xN=lN;do{lN=xN+-72|0;k[zN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,rN,lN);xN=k[zN>>2]|0}while((xN|0)!=(yN|0));OQ=k[CN>>2]|0}OBa(OQ)}yN=Eb+48|0;xN=k[yN>>2]|0;if(xN){zN=Eb+52|0;rN=k[zN>>2]|0;if((rN|0)==(xN|0))PQ=xN;else{lN=Eb+56|0;uN=rN;do{rN=uN+-72|0;k[zN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,lN,rN);uN=k[zN>>2]|0}while((uN|0)!=(xN|0));PQ=k[yN>>2]|0}OBa(PQ)}xN=k[Nz>>2]|0;do if((xN|0)==(Ab|0))Sf[k[(k[Ab>>2]|0)+16>>2]&2047](Ab);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=Bb+120|0;yN=k[xN>>2]|0;if(yN){uN=k[Zz>>2]|0;if((uN|0)==(yN|0))QQ=yN;else{zN=Bb+128|0;lN=uN;do{uN=lN+-72|0;k[Zz>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,zN,uN);lN=k[Zz>>2]|0}while((lN|0)!=(yN|0));QQ=k[xN>>2]|0}OBa(QQ)}yN=Bb+48|0;lN=k[yN>>2]|0;if(lN){zN=k[Tz>>2]|0;if((zN|0)==(lN|0))RQ=lN;else{uN=Bb+56|0;CN=zN;do{zN=CN+-72|0;k[Tz>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,uN,zN);CN=k[Tz>>2]|0}while((CN|0)!=(lN|0));RQ=k[yN>>2]|0}OBa(RQ)}lN=xb+48|0;CN=k[lN>>2]|0;if(CN){uN=xb+52|0;xN=k[uN>>2]|0;if((xN|0)==(CN|0))SQ=CN;else{zN=xb+56|0;rN=xN;do{xN=rN+-72|0;k[uN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,zN,xN);rN=k[uN>>2]|0}while((rN|0)!=(CN|0));SQ=k[lN>>2]|0}OBa(SQ)}CN=k[yb>>2]|0;if(CN){rN=k[jz>>2]|0;if((rN|0)==(CN|0))TQ=CN;else{uN=rN;while(1){rN=uN+-72|0;k[jz>>2]=rN;zN=uN+-24|0;yN=k[zN>>2]|0;if(!yN)UQ=rN;else{xN=uN+-20|0;tN=k[xN>>2]|0;if((tN|0)==(yN|0)){VQ=rN;WQ=yN}else{rN=uN+-16|0;BN=tN;do{tN=BN+-72|0;k[xN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,rN,tN);BN=k[xN>>2]|0}while((BN|0)!=(yN|0));VQ=k[jz>>2]|0;WQ=k[zN>>2]|0}OBa(WQ);UQ=VQ}if((UQ|0)==(CN|0))break;else uN=UQ}TQ=k[yb>>2]|0}OBa(TQ)}uN=zb+120|0;CN=k[uN>>2]|0;if(CN){lN=zb+124|0;yN=k[lN>>2]|0;if((yN|0)==(CN|0))XQ=CN;else{BN=zb+128|0;xN=yN;do{yN=xN+-72|0;k[lN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,BN,yN);xN=k[lN>>2]|0}while((xN|0)!=(CN|0));XQ=k[uN>>2]|0}OBa(XQ)}CN=zb+48|0;xN=k[CN>>2]|0;if(xN){lN=zb+52|0;BN=k[lN>>2]|0;if((BN|0)==(xN|0))YQ=xN;else{yN=zb+56|0;rN=BN;do{BN=rN+-72|0;k[lN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,yN,BN);rN=k[lN>>2]|0}while((rN|0)!=(xN|0));YQ=k[CN>>2]|0}OBa(YQ)}xN=k[Ty>>2]|0;do if((xN|0)==(vb|0))Sf[k[(k[vb>>2]|0)+16>>2]&2047](vb);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=wb+120|0;CN=k[xN>>2]|0;if(CN){rN=k[dz>>2]|0;if((rN|0)==(CN|0))ZQ=CN;else{lN=wb+128|0;yN=rN;do{rN=yN+-72|0;k[dz>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,lN,rN);yN=k[dz>>2]|0}while((yN|0)!=(CN|0));ZQ=k[xN>>2]|0}OBa(ZQ)}CN=wb+48|0;yN=k[CN>>2]|0;if(yN){lN=k[Zy>>2]|0;if((lN|0)==(yN|0))_Q=yN;else{rN=wb+56|0;uN=lN;do{lN=uN+-72|0;k[Zy>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,rN,lN);uN=k[Zy>>2]|0}while((uN|0)!=(yN|0));_Q=k[CN>>2]|0}OBa(_Q)}yN=sb+48|0;uN=k[yN>>2]|0;if(uN){rN=sb+52|0;xN=k[rN>>2]|0;if((xN|0)==(uN|0))$Q=uN;else{lN=sb+56|0;BN=xN;do{xN=BN+-72|0;k[rN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,lN,xN);BN=k[rN>>2]|0}while((BN|0)!=(uN|0));$Q=k[yN>>2]|0}OBa($Q)}uN=k[tb>>2]|0;if(uN){BN=k[vy>>2]|0;if((BN|0)==(uN|0))aR=uN;else{rN=BN;while(1){BN=rN+-72|0;k[vy>>2]=BN;lN=rN+-24|0;CN=k[lN>>2]|0;if(!CN)bR=BN;else{xN=rN+-20|0;qN=k[xN>>2]|0;if((qN|0)==(CN|0)){cR=BN;dR=CN}else{BN=rN+-16|0;tN=qN;do{qN=tN+-72|0;k[xN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,BN,qN);tN=k[xN>>2]|0}while((tN|0)!=(CN|0));cR=k[vy>>2]|0;dR=k[lN>>2]|0}OBa(dR);bR=cR}if((bR|0)==(uN|0))break;else rN=bR}aR=k[tb>>2]|0}OBa(aR)}rN=ub+192|0;uN=k[rN>>2]|0;if(uN){yN=ub+196|0;CN=k[yN>>2]|0;if((CN|0)==(uN|0))eR=uN;else{tN=ub+200|0;xN=CN;do{CN=xN+-72|0;k[yN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,tN,CN);xN=k[yN>>2]|0}while((xN|0)!=(uN|0));eR=k[rN>>2]|0}OBa(eR)}uN=ub+120|0;xN=k[uN>>2]|0;if(xN){yN=ub+124|0;tN=k[yN>>2]|0;if((tN|0)==(xN|0))fR=xN;else{CN=ub+128|0;BN=tN;do{tN=BN+-72|0;k[yN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,CN,tN);BN=k[yN>>2]|0}while((BN|0)!=(xN|0));fR=k[uN>>2]|0}OBa(fR)}xN=ub+48|0;BN=k[xN>>2]|0;if(BN){yN=ub+52|0;CN=k[yN>>2]|0;if((CN|0)==(BN|0))gR=BN;else{rN=ub+56|0;tN=CN;do{CN=tN+-72|0;k[yN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,rN,CN);tN=k[yN>>2]|0}while((tN|0)!=(BN|0));gR=k[xN>>2]|0}OBa(gR)}BN=k[Xx>>2]|0;do if((BN|0)==(qb|0))Sf[k[(k[qb>>2]|0)+16>>2]&2047](qb);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=rb+192|0;xN=k[BN>>2]|0;if(xN){tN=k[gy>>2]|0;if((tN|0)==(xN|0))hR=xN;else{yN=rb+200|0;rN=tN;do{tN=rN+-72|0;k[gy>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,yN,tN);rN=k[gy>>2]|0}while((rN|0)!=(xN|0));hR=k[BN>>2]|0}OBa(hR)}xN=rb+120|0;rN=k[xN>>2]|0;if(rN){yN=k[hy>>2]|0;if((yN|0)==(rN|0))iR=rN;else{tN=rb+128|0;uN=yN;do{yN=uN+-72|0;k[hy>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,tN,yN);uN=k[hy>>2]|0}while((uN|0)!=(rN|0));iR=k[xN>>2]|0}OBa(iR)}rN=rb+48|0;uN=k[rN>>2]|0;if(uN){tN=k[by>>2]|0;if((tN|0)==(uN|0))jR=uN;else{BN=rb+56|0;yN=tN;do{tN=yN+-72|0;k[by>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,BN,tN);yN=k[by>>2]|0}while((yN|0)!=(uN|0));jR=k[rN>>2]|0}OBa(jR)}uN=nb+48|0;yN=k[uN>>2]|0;if(yN){BN=nb+52|0;xN=k[BN>>2]|0;if((xN|0)==(yN|0))kR=yN;else{tN=nb+56|0;CN=xN;do{xN=CN+-72|0;k[BN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,tN,xN);CN=k[BN>>2]|0}while((CN|0)!=(yN|0));kR=k[uN>>2]|0}OBa(kR)}yN=k[ob>>2]|0;if(yN){CN=k[qx>>2]|0;if((CN|0)==(yN|0))lR=yN;else{BN=CN;while(1){CN=BN+-72|0;k[qx>>2]=CN;tN=BN+-24|0;rN=k[tN>>2]|0;if(!rN)mR=CN;else{xN=BN+-20|0;zN=k[xN>>2]|0;if((zN|0)==(rN|0)){nR=CN;oR=rN}else{CN=BN+-16|0;qN=zN;do{zN=qN+-72|0;k[xN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,CN,zN);qN=k[xN>>2]|0}while((qN|0)!=(rN|0));nR=k[qx>>2]|0;oR=k[tN>>2]|0}OBa(oR);mR=nR}if((mR|0)==(yN|0))break;else BN=mR}lR=k[ob>>2]|0}OBa(lR)}BN=pb+192|0;yN=k[BN>>2]|0;if(yN){uN=pb+196|0;rN=k[uN>>2]|0;if((rN|0)==(yN|0))pR=yN;else{qN=pb+200|0;xN=rN;do{rN=xN+-72|0;k[uN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,qN,rN);xN=k[uN>>2]|0}while((xN|0)!=(yN|0));pR=k[BN>>2]|0}OBa(pR)}yN=pb+120|0;xN=k[yN>>2]|0;if(xN){uN=pb+124|0;qN=k[uN>>2]|0;if((qN|0)==(xN|0))qR=xN;else{rN=pb+128|0;CN=qN;do{qN=CN+-72|0;k[uN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,rN,qN);CN=k[uN>>2]|0}while((CN|0)!=(xN|0));qR=k[yN>>2]|0}OBa(qR)}xN=pb+48|0;CN=k[xN>>2]|0;if(CN){uN=pb+52|0;rN=k[uN>>2]|0;if((rN|0)==(CN|0))rR=CN;else{BN=pb+56|0;qN=rN;do{rN=qN+-72|0;k[uN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,BN,rN);qN=k[uN>>2]|0}while((qN|0)!=(CN|0));rR=k[xN>>2]|0}OBa(rR)}CN=k[Sw>>2]|0;do if((CN|0)==(lb|0))Sf[k[(k[lb>>2]|0)+16>>2]&2047](lb);else{if(!CN)break;Sf[k[(k[CN>>2]|0)+20>>2]&2047](CN)}while(0);CN=mb+192|0;xN=k[CN>>2]|0;if(xN){qN=k[bx>>2]|0;if((qN|0)==(xN|0))sR=xN;else{uN=mb+200|0;BN=qN;do{qN=BN+-72|0;k[bx>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,uN,qN);BN=k[bx>>2]|0}while((BN|0)!=(xN|0));sR=k[CN>>2]|0}OBa(sR)}xN=mb+120|0;BN=k[xN>>2]|0;if(BN){uN=k[cx>>2]|0;if((uN|0)==(BN|0))tR=BN;else{qN=mb+128|0;yN=uN;do{uN=yN+-72|0;k[cx>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,qN,uN);yN=k[cx>>2]|0}while((yN|0)!=(BN|0));tR=k[xN>>2]|0}OBa(tR)}BN=mb+48|0;yN=k[BN>>2]|0;if(yN){qN=k[Yw>>2]|0;if((qN|0)==(yN|0))uR=yN;else{CN=mb+56|0;uN=qN;do{qN=uN+-72|0;k[Yw>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,CN,qN);uN=k[Yw>>2]|0}while((uN|0)!=(yN|0));uR=k[BN>>2]|0}OBa(uR)}yN=ib+48|0;uN=k[yN>>2]|0;if(uN){CN=ib+52|0;xN=k[CN>>2]|0;if((xN|0)==(uN|0))vR=uN;else{qN=ib+56|0;rN=xN;do{xN=rN+-72|0;k[CN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,qN,xN);rN=k[CN>>2]|0}while((rN|0)!=(uN|0));vR=k[yN>>2]|0}OBa(vR)}uN=k[jb>>2]|0;if(uN){rN=k[Yv>>2]|0;if((rN|0)==(uN|0))wR=uN;else{CN=rN;while(1){rN=CN+-72|0;k[Yv>>2]=rN;qN=CN+-24|0;BN=k[qN>>2]|0;if(!BN)xR=rN;else{xN=CN+-20|0;lN=k[xN>>2]|0;if((lN|0)==(BN|0)){yR=rN;zR=BN}else{rN=CN+-16|0;zN=lN;do{lN=zN+-72|0;k[xN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,rN,lN);zN=k[xN>>2]|0}while((zN|0)!=(BN|0));yR=k[Yv>>2]|0;zR=k[qN>>2]|0}OBa(zR);xR=yR}if((xR|0)==(uN|0))break;else CN=xR}wR=k[jb>>2]|0}OBa(wR)}CN=kb+192|0;uN=k[CN>>2]|0;if(uN){yN=kb+196|0;BN=k[yN>>2]|0;if((BN|0)==(uN|0))AR=uN;else{zN=kb+200|0;xN=BN;do{BN=xN+-72|0;k[yN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,zN,BN);xN=k[yN>>2]|0}while((xN|0)!=(uN|0));AR=k[CN>>2]|0}OBa(AR)}uN=kb+120|0;xN=k[uN>>2]|0;if(xN){yN=kb+124|0;zN=k[yN>>2]|0;if((zN|0)==(xN|0))BR=xN;else{BN=kb+128|0;rN=zN;do{zN=rN+-72|0;k[yN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,BN,zN);rN=k[yN>>2]|0}while((rN|0)!=(xN|0));BR=k[uN>>2]|0}OBa(BR)}xN=kb+48|0;rN=k[xN>>2]|0;if(rN){yN=kb+52|0;BN=k[yN>>2]|0;if((BN|0)==(rN|0))CR=rN;else{CN=kb+56|0;zN=BN;do{BN=zN+-72|0;k[yN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,CN,BN);zN=k[yN>>2]|0}while((zN|0)!=(rN|0));CR=k[xN>>2]|0}OBa(CR)}rN=k[Nv>>2]|0;do if((rN|0)==(gb|0))Sf[k[(k[gb>>2]|0)+16>>2]&2047](gb);else{if(!rN)break;Sf[k[(k[rN>>2]|0)+20>>2]&2047](rN)}while(0);rN=hb+120|0;xN=k[rN>>2]|0;if(xN){zN=k[Zv>>2]|0;if((zN|0)==(xN|0))DR=xN;else{yN=hb+128|0;CN=zN;do{zN=CN+-72|0;k[Zv>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,yN,zN);CN=k[Zv>>2]|0}while((CN|0)!=(xN|0));DR=k[rN>>2]|0}OBa(DR)}xN=hb+48|0;CN=k[xN>>2]|0;if(CN){yN=k[Tv>>2]|0;if((yN|0)==(CN|0))ER=CN;else{zN=hb+56|0;uN=yN;do{yN=uN+-72|0;k[Tv>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,zN,yN);uN=k[Tv>>2]|0}while((uN|0)!=(CN|0));ER=k[xN>>2]|0}OBa(ER)}CN=cb+48|0;uN=k[CN>>2]|0;if(uN){zN=cb+52|0;rN=k[zN>>2]|0;if((rN|0)==(uN|0))FR=uN;else{yN=cb+56|0;BN=rN;do{rN=BN+-72|0;k[zN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,yN,rN);BN=k[zN>>2]|0}while((BN|0)!=(uN|0));FR=k[CN>>2]|0}OBa(FR)}uN=k[db>>2]|0;if(uN){BN=k[jv>>2]|0;if((BN|0)==(uN|0))GR=uN;else{zN=BN;while(1){BN=zN+-72|0;k[jv>>2]=BN;yN=zN+-24|0;xN=k[yN>>2]|0;if(!xN)HR=BN;else{rN=zN+-20|0;tN=k[rN>>2]|0;if((tN|0)==(xN|0)){IR=BN;JR=xN}else{BN=zN+-16|0;lN=tN;do{tN=lN+-72|0;k[rN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,BN,tN);lN=k[rN>>2]|0}while((lN|0)!=(xN|0));IR=k[jv>>2]|0;JR=k[yN>>2]|0}OBa(JR);HR=IR}if((HR|0)==(uN|0))break;else zN=HR}GR=k[db>>2]|0}OBa(GR)}zN=eb+120|0;uN=k[zN>>2]|0;if(uN){CN=eb+124|0;xN=k[CN>>2]|0;if((xN|0)==(uN|0))KR=uN;else{lN=eb+128|0;rN=xN;do{xN=rN+-72|0;k[CN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,lN,xN);rN=k[CN>>2]|0}while((rN|0)!=(uN|0));KR=k[zN>>2]|0}OBa(KR)}uN=eb+48|0;rN=k[uN>>2]|0;if(rN){CN=eb+52|0;lN=k[CN>>2]|0;if((lN|0)==(rN|0))LR=rN;else{xN=eb+56|0;BN=lN;do{lN=BN+-72|0;k[CN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,xN,lN);BN=k[CN>>2]|0}while((BN|0)!=(rN|0));LR=k[uN>>2]|0}OBa(LR)}rN=k[Tu>>2]|0;do if((rN|0)==(ab|0))Sf[k[(k[ab>>2]|0)+16>>2]&2047](ab);else{if(!rN)break;Sf[k[(k[rN>>2]|0)+20>>2]&2047](rN)}while(0);rN=bb+120|0;uN=k[rN>>2]|0;if(uN){BN=k[dv>>2]|0;if((BN|0)==(uN|0))MR=uN;else{CN=bb+128|0;xN=BN;do{BN=xN+-72|0;k[dv>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,CN,BN);xN=k[dv>>2]|0}while((xN|0)!=(uN|0));MR=k[rN>>2]|0}OBa(MR)}uN=bb+48|0;xN=k[uN>>2]|0;if(xN){CN=k[Zu>>2]|0;if((CN|0)==(xN|0))NR=xN;else{BN=bb+56|0;zN=CN;do{CN=zN+-72|0;k[Zu>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,BN,CN);zN=k[Zu>>2]|0}while((zN|0)!=(xN|0));NR=k[uN>>2]|0}OBa(NR)}xN=Za+48|0;zN=k[xN>>2]|0;if(zN){BN=Za+52|0;rN=k[BN>>2]|0;if((rN|0)==(zN|0))OR=zN;else{CN=Za+56|0;lN=rN;do{rN=lN+-72|0;k[BN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,CN,rN);lN=k[BN>>2]|0}while((lN|0)!=(zN|0));OR=k[xN>>2]|0}OBa(OR)}zN=k[_a>>2]|0;if(zN){lN=k[pu>>2]|0;if((lN|0)==(zN|0))PR=zN;else{BN=lN;while(1){lN=BN+-72|0;k[pu>>2]=lN;CN=BN+-24|0;uN=k[CN>>2]|0;if(!uN)QR=lN;else{rN=BN+-20|0;qN=k[rN>>2]|0;if((qN|0)==(uN|0)){RR=lN;SR=uN}else{lN=BN+-16|0;tN=qN;do{qN=tN+-72|0;k[rN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,lN,qN);tN=k[rN>>2]|0}while((tN|0)!=(uN|0));RR=k[pu>>2]|0;SR=k[CN>>2]|0}OBa(SR);QR=RR}if((QR|0)==(zN|0))break;else BN=QR}PR=k[_a>>2]|0}OBa(PR)}BN=$a+120|0;zN=k[BN>>2]|0;if(zN){xN=$a+124|0;uN=k[xN>>2]|0;if((uN|0)==(zN|0))TR=zN;else{tN=$a+128|0;rN=uN;do{uN=rN+-72|0;k[xN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,tN,uN);rN=k[xN>>2]|0}while((rN|0)!=(zN|0));TR=k[BN>>2]|0}OBa(TR)}zN=$a+48|0;rN=k[zN>>2]|0;if(rN){xN=$a+52|0;tN=k[xN>>2]|0;if((tN|0)==(rN|0))UR=rN;else{uN=$a+56|0;lN=tN;do{tN=lN+-72|0;k[xN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,uN,tN);lN=k[xN>>2]|0}while((lN|0)!=(rN|0));UR=k[zN>>2]|0}OBa(UR)}rN=k[Zt>>2]|0;do if((rN|0)==(Xa|0))Sf[k[(k[Xa>>2]|0)+16>>2]&2047](Xa);else{if(!rN)break;Sf[k[(k[rN>>2]|0)+20>>2]&2047](rN)}while(0);rN=Ya+120|0;zN=k[rN>>2]|0;if(zN){lN=k[ju>>2]|0;if((lN|0)==(zN|0))VR=zN;else{xN=Ya+128|0;uN=lN;do{lN=uN+-72|0;k[ju>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,xN,lN);uN=k[ju>>2]|0}while((uN|0)!=(zN|0));VR=k[rN>>2]|0}OBa(VR)}zN=Ya+48|0;uN=k[zN>>2]|0;if(uN){xN=k[du>>2]|0;if((xN|0)==(uN|0))WR=uN;else{lN=Ya+56|0;BN=xN;do{xN=BN+-72|0;k[du>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,lN,xN);BN=k[du>>2]|0}while((BN|0)!=(uN|0));WR=k[zN>>2]|0}OBa(WR)}uN=Ua+48|0;BN=k[uN>>2]|0;if(BN){lN=Ua+52|0;rN=k[lN>>2]|0;if((rN|0)==(BN|0))XR=BN;else{xN=Ua+56|0;tN=rN;do{rN=tN+-72|0;k[lN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,xN,rN);tN=k[lN>>2]|0}while((tN|0)!=(BN|0));XR=k[uN>>2]|0}OBa(XR)}BN=k[Va>>2]|0;if(BN){tN=k[vt>>2]|0;if((tN|0)==(BN|0))YR=BN;else{lN=tN;while(1){tN=lN+-72|0;k[vt>>2]=tN;xN=lN+-24|0;zN=k[xN>>2]|0;if(!zN)ZR=tN;else{rN=lN+-20|0;yN=k[rN>>2]|0;if((yN|0)==(zN|0)){_R=tN;$R=zN}else{tN=lN+-16|0;qN=yN;do{yN=qN+-72|0;k[rN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,tN,yN);qN=k[rN>>2]|0}while((qN|0)!=(zN|0));_R=k[vt>>2]|0;$R=k[xN>>2]|0}OBa($R);ZR=_R}if((ZR|0)==(BN|0))break;else lN=ZR}YR=k[Va>>2]|0}OBa(YR)}lN=Wa+120|0;BN=k[lN>>2]|0;if(BN){uN=Wa+124|0;zN=k[uN>>2]|0;if((zN|0)==(BN|0))aS=BN;else{qN=Wa+128|0;rN=zN;do{zN=rN+-72|0;k[uN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,qN,zN);rN=k[uN>>2]|0}while((rN|0)!=(BN|0));aS=k[lN>>2]|0}OBa(aS)}BN=Wa+48|0;rN=k[BN>>2]|0;if(rN){uN=Wa+52|0;qN=k[uN>>2]|0;if((qN|0)==(rN|0))bS=rN;else{zN=Wa+56|0;tN=qN;do{qN=tN+-72|0;k[uN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,zN,qN);tN=k[uN>>2]|0}while((tN|0)!=(rN|0));bS=k[BN>>2]|0}OBa(bS)}rN=k[dt>>2]|0;do if((rN|0)==(Ra|0))Sf[k[(k[Ra>>2]|0)+16>>2]&2047](Ra);else{if(!rN)break;Sf[k[(k[rN>>2]|0)+20>>2]&2047](rN)}while(0);rN=Sa+120|0;BN=k[rN>>2]|0;if(BN){tN=k[pt>>2]|0;if((tN|0)==(BN|0))cS=BN;else{uN=Sa+128|0;zN=tN;do{tN=zN+-72|0;k[pt>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,uN,tN);zN=k[pt>>2]|0}while((zN|0)!=(BN|0));cS=k[rN>>2]|0}OBa(cS)}BN=Sa+48|0;zN=k[BN>>2]|0;if(zN){uN=k[jt>>2]|0;if((uN|0)==(zN|0))dS=zN;else{tN=Sa+56|0;lN=uN;do{uN=lN+-72|0;k[jt>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,tN,uN);lN=k[jt>>2]|0}while((lN|0)!=(zN|0));dS=k[BN>>2]|0}OBa(dS)}zN=Oa+48|0;lN=k[zN>>2]|0;if(lN){tN=Oa+52|0;rN=k[tN>>2]|0;if((rN|0)==(lN|0))eS=lN;else{uN=Oa+56|0;qN=rN;do{rN=qN+-72|0;k[tN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,uN,rN);qN=k[tN>>2]|0}while((qN|0)!=(lN|0));eS=k[zN>>2]|0}OBa(eS)}lN=k[Pa>>2]|0;if(lN){qN=k[Bs>>2]|0;if((qN|0)==(lN|0))fS=lN;else{tN=qN;while(1){qN=tN+-72|0;k[Bs>>2]=qN;uN=tN+-24|0;BN=k[uN>>2]|0;if(!BN)gS=qN;else{rN=tN+-20|0;CN=k[rN>>2]|0;if((CN|0)==(BN|0)){hS=qN;iS=BN}else{qN=tN+-16|0;yN=CN;do{CN=yN+-72|0;k[rN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,qN,CN);yN=k[rN>>2]|0}while((yN|0)!=(BN|0));hS=k[Bs>>2]|0;iS=k[uN>>2]|0}OBa(iS);gS=hS}if((gS|0)==(lN|0))break;else tN=gS}fS=k[Pa>>2]|0}OBa(fS)}tN=Qa+120|0;lN=k[tN>>2]|0;if(lN){zN=Qa+124|0;BN=k[zN>>2]|0;if((BN|0)==(lN|0))jS=lN;else{yN=Qa+128|0;rN=BN;do{BN=rN+-72|0;k[zN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,yN,BN);rN=k[zN>>2]|0}while((rN|0)!=(lN|0));jS=k[tN>>2]|0}OBa(jS)}lN=Qa+48|0;rN=k[lN>>2]|0;if(rN){zN=Qa+52|0;yN=k[zN>>2]|0;if((yN|0)==(rN|0))kS=rN;else{BN=Qa+56|0;qN=yN;do{yN=qN+-72|0;k[zN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,BN,yN);qN=k[zN>>2]|0}while((qN|0)!=(rN|0));kS=k[lN>>2]|0}OBa(kS)}rN=k[hs>>2]|0;do if((rN|0)==(Ma|0))Sf[k[(k[Ma>>2]|0)+16>>2]&2047](Ma);else{if(!rN)break;Sf[k[(k[rN>>2]|0)+20>>2]&2047](rN)}while(0);rN=Na+48|0;lN=k[rN>>2]|0;if(lN){qN=k[qs>>2]|0;if((qN|0)==(lN|0))lS=lN;else{zN=Na+56|0;BN=qN;do{qN=BN+-72|0;k[qs>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,zN,qN);BN=k[qs>>2]|0}while((BN|0)!=(lN|0));lS=k[rN>>2]|0}OBa(lS)}lN=Ja+48|0;BN=k[lN>>2]|0;if(BN){zN=Ja+52|0;qN=k[zN>>2]|0;if((qN|0)==(BN|0))mS=BN;else{tN=Ja+56|0;yN=qN;do{qN=yN+-72|0;k[zN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,tN,qN);yN=k[zN>>2]|0}while((yN|0)!=(BN|0));mS=k[lN>>2]|0}OBa(mS)}BN=k[Ka>>2]|0;if(BN){yN=k[Sr>>2]|0;if((yN|0)==(BN|0))nS=BN;else{zN=yN;while(1){yN=zN+-72|0;k[Sr>>2]=yN;tN=zN+-24|0;rN=k[tN>>2]|0;if(!rN)oS=yN;else{qN=zN+-20|0;xN=k[qN>>2]|0;if((xN|0)==(rN|0)){pS=yN;qS=rN}else{yN=zN+-16|0;CN=xN;do{xN=CN+-72|0;k[qN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,yN,xN);CN=k[qN>>2]|0}while((CN|0)!=(rN|0));pS=k[Sr>>2]|0;qS=k[tN>>2]|0}OBa(qS);oS=pS}if((oS|0)==(BN|0))break;else zN=oS}nS=k[Ka>>2]|0}OBa(nS)}zN=La+48|0;BN=k[zN>>2]|0;if(BN){lN=La+52|0;rN=k[lN>>2]|0;if((rN|0)==(BN|0))rS=BN;else{CN=La+56|0;qN=rN;do{rN=qN+-72|0;k[lN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,CN,rN);qN=k[lN>>2]|0}while((qN|0)!=(BN|0));rS=k[zN>>2]|0}OBa(rS)}BN=k[yr>>2]|0;do if((BN|0)==(Ha|0))Sf[k[(k[Ha>>2]|0)+16>>2]&2047](Ha);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=Ia+120|0;zN=k[BN>>2]|0;if(zN){qN=k[Kr>>2]|0;if((qN|0)==(zN|0))sS=zN;else{lN=Ia+128|0;CN=qN;do{qN=CN+-72|0;k[Kr>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,lN,qN);CN=k[Kr>>2]|0}while((CN|0)!=(zN|0));sS=k[BN>>2]|0}OBa(sS)}zN=Ia+48|0;CN=k[zN>>2]|0;if(CN){lN=k[Er>>2]|0;if((lN|0)==(CN|0))tS=CN;else{qN=Ia+56|0;rN=lN;do{lN=rN+-72|0;k[Er>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,qN,lN);rN=k[Er>>2]|0}while((rN|0)!=(CN|0));tS=k[zN>>2]|0}OBa(tS)}CN=Ea+48|0;rN=k[CN>>2]|0;if(rN){qN=Ea+52|0;BN=k[qN>>2]|0;if((BN|0)==(rN|0))uS=rN;else{lN=Ea+56|0;yN=BN;do{BN=yN+-72|0;k[qN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,lN,BN);yN=k[qN>>2]|0}while((yN|0)!=(rN|0));uS=k[CN>>2]|0}OBa(uS)}rN=k[Fa>>2]|0;if(rN){yN=k[Wq>>2]|0;if((yN|0)==(rN|0))vS=rN;else{qN=yN;while(1){yN=qN+-72|0;k[Wq>>2]=yN;lN=qN+-24|0;zN=k[lN>>2]|0;if(!zN)wS=yN;else{BN=qN+-20|0;uN=k[BN>>2]|0;if((uN|0)==(zN|0)){xS=yN;yS=zN}else{yN=qN+-16|0;xN=uN;do{uN=xN+-72|0;k[BN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,yN,uN);xN=k[BN>>2]|0}while((xN|0)!=(zN|0));xS=k[Wq>>2]|0;yS=k[lN>>2]|0}OBa(yS);wS=xS}if((wS|0)==(rN|0))break;else qN=wS}vS=k[Fa>>2]|0}OBa(vS)}qN=Ga+120|0;rN=k[qN>>2]|0;if(rN){CN=Ga+124|0;zN=k[CN>>2]|0;if((zN|0)==(rN|0))zS=rN;else{xN=Ga+128|0;BN=zN;do{zN=BN+-72|0;k[CN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,xN,zN);BN=k[CN>>2]|0}while((BN|0)!=(rN|0));zS=k[qN>>2]|0}OBa(zS)}rN=Ga+48|0;BN=k[rN>>2]|0;if(BN){CN=Ga+52|0;xN=k[CN>>2]|0;if((xN|0)==(BN|0))AS=BN;else{zN=Ga+56|0;yN=xN;do{xN=yN+-72|0;k[CN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,zN,xN);yN=k[CN>>2]|0}while((yN|0)!=(BN|0));AS=k[rN>>2]|0}OBa(AS)}BN=k[Eq>>2]|0;do if((BN|0)==(Ca|0))Sf[k[(k[Ca>>2]|0)+16>>2]&2047](Ca);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=Da+120|0;rN=k[BN>>2]|0;if(rN){yN=k[Qq>>2]|0;if((yN|0)==(rN|0))BS=rN;else{CN=Da+128|0;zN=yN;do{yN=zN+-72|0;k[Qq>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,CN,yN);zN=k[Qq>>2]|0}while((zN|0)!=(rN|0));BS=k[BN>>2]|0}OBa(BS)}rN=Da+48|0;zN=k[rN>>2]|0;if(zN){CN=k[Kq>>2]|0;if((CN|0)==(zN|0))CS=zN;else{yN=Da+56|0;qN=CN;do{CN=qN+-72|0;k[Kq>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,yN,CN);qN=k[Kq>>2]|0}while((qN|0)!=(zN|0));CS=k[rN>>2]|0}OBa(CS)}zN=ya+48|0;qN=k[zN>>2]|0;if(qN){yN=ya+52|0;BN=k[yN>>2]|0;if((BN|0)==(qN|0))DS=qN;else{CN=ya+56|0;xN=BN;do{BN=xN+-72|0;k[yN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,CN,BN);xN=k[yN>>2]|0}while((xN|0)!=(qN|0));DS=k[zN>>2]|0}OBa(DS)}qN=k[za>>2]|0;if(qN){xN=k[aq>>2]|0;if((xN|0)==(qN|0))ES=qN;else{yN=xN;while(1){xN=yN+-72|0;k[aq>>2]=xN;CN=yN+-24|0;rN=k[CN>>2]|0;if(!rN)FS=xN;else{BN=yN+-20|0;tN=k[BN>>2]|0;if((tN|0)==(rN|0)){GS=xN;HS=rN}else{xN=yN+-16|0;uN=tN;do{tN=uN+-72|0;k[BN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,xN,tN);uN=k[BN>>2]|0}while((uN|0)!=(rN|0));GS=k[aq>>2]|0;HS=k[CN>>2]|0}OBa(HS);FS=GS}if((FS|0)==(qN|0))break;else yN=FS}ES=k[za>>2]|0}OBa(ES)}yN=Aa+120|0;qN=k[yN>>2]|0;if(qN){zN=Aa+124|0;rN=k[zN>>2]|0;if((rN|0)==(qN|0))IS=qN;else{uN=Aa+128|0;BN=rN;do{rN=BN+-72|0;k[zN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,uN,rN);BN=k[zN>>2]|0}while((BN|0)!=(qN|0));IS=k[yN>>2]|0}OBa(IS)}qN=Aa+48|0;BN=k[qN>>2]|0;if(BN){zN=Aa+52|0;uN=k[zN>>2]|0;if((uN|0)==(BN|0))JS=BN;else{rN=Aa+56|0;xN=uN;do{uN=xN+-72|0;k[zN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,rN,uN);xN=k[zN>>2]|0}while((xN|0)!=(BN|0));JS=k[qN>>2]|0}OBa(JS)}BN=k[Kp>>2]|0;do if((BN|0)==(va|0))Sf[k[(k[va>>2]|0)+16>>2]&2047](va);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=wa+120|0;qN=k[BN>>2]|0;if(qN){xN=k[Wp>>2]|0;if((xN|0)==(qN|0))KS=qN;else{zN=wa+128|0;rN=xN;do{xN=rN+-72|0;k[Wp>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,zN,xN);rN=k[Wp>>2]|0}while((rN|0)!=(qN|0));KS=k[BN>>2]|0}OBa(KS)}qN=wa+48|0;rN=k[qN>>2]|0;if(rN){zN=k[Qp>>2]|0;if((zN|0)==(rN|0))LS=rN;else{xN=wa+56|0;yN=zN;do{zN=yN+-72|0;k[Qp>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,xN,zN);yN=k[Qp>>2]|0}while((yN|0)!=(rN|0));LS=k[qN>>2]|0}OBa(LS)}rN=sa+48|0;yN=k[rN>>2]|0;if(yN){xN=sa+52|0;BN=k[xN>>2]|0;if((BN|0)==(yN|0))MS=yN;else{zN=sa+56|0;uN=BN;do{BN=uN+-72|0;k[xN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,zN,BN);uN=k[xN>>2]|0}while((uN|0)!=(yN|0));MS=k[rN>>2]|0}OBa(MS)}yN=k[ta>>2]|0;if(yN){uN=k[gp>>2]|0;if((uN|0)==(yN|0))NS=yN;else{xN=uN;while(1){uN=xN+-72|0;k[gp>>2]=uN;zN=xN+-24|0;qN=k[zN>>2]|0;if(!qN)OS=uN;else{BN=xN+-20|0;lN=k[BN>>2]|0;if((lN|0)==(qN|0)){PS=uN;QS=qN}else{uN=xN+-16|0;tN=lN;do{lN=tN+-72|0;k[BN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,uN,lN);tN=k[BN>>2]|0}while((tN|0)!=(qN|0));PS=k[gp>>2]|0;QS=k[zN>>2]|0}OBa(QS);OS=PS}if((OS|0)==(yN|0))break;else xN=OS}NS=k[ta>>2]|0}OBa(NS)}xN=ua+120|0;yN=k[xN>>2]|0;if(yN){rN=ua+124|0;qN=k[rN>>2]|0;if((qN|0)==(yN|0))RS=yN;else{tN=ua+128|0;BN=qN;do{qN=BN+-72|0;k[rN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,tN,qN);BN=k[rN>>2]|0}while((BN|0)!=(yN|0));RS=k[xN>>2]|0}OBa(RS)}yN=ua+48|0;BN=k[yN>>2]|0;if(BN){rN=ua+52|0;tN=k[rN>>2]|0;if((tN|0)==(BN|0))SS=BN;else{qN=ua+56|0;uN=tN;do{tN=uN+-72|0;k[rN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,qN,tN);uN=k[rN>>2]|0}while((uN|0)!=(BN|0));SS=k[yN>>2]|0}OBa(SS)}BN=k[Qo>>2]|0;do if((BN|0)==(qa|0))Sf[k[(k[qa>>2]|0)+16>>2]&2047](qa);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=ra+120|0;yN=k[BN>>2]|0;if(yN){uN=k[ap>>2]|0;if((uN|0)==(yN|0))TS=yN;else{rN=ra+128|0;qN=uN;do{uN=qN+-72|0;k[ap>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,rN,uN);qN=k[ap>>2]|0}while((qN|0)!=(yN|0));TS=k[BN>>2]|0}OBa(TS)}yN=ra+48|0;qN=k[yN>>2]|0;if(qN){rN=k[Wo>>2]|0;if((rN|0)==(qN|0))US=qN;else{uN=ra+56|0;xN=rN;do{rN=xN+-72|0;k[Wo>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,uN,rN);xN=k[Wo>>2]|0}while((xN|0)!=(qN|0));US=k[yN>>2]|0}OBa(US)}qN=na+48|0;xN=k[qN>>2]|0;if(xN){uN=na+52|0;BN=k[uN>>2]|0;if((BN|0)==(xN|0))VS=xN;else{rN=na+56|0;tN=BN;do{BN=tN+-72|0;k[uN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,rN,BN);tN=k[uN>>2]|0}while((tN|0)!=(xN|0));VS=k[qN>>2]|0}OBa(VS)}xN=k[oa>>2]|0;if(xN){tN=k[mo>>2]|0;if((tN|0)==(xN|0))WS=xN;else{uN=tN;while(1){tN=uN+-72|0;k[mo>>2]=tN;rN=uN+-24|0;yN=k[rN>>2]|0;if(!yN)XS=tN;else{BN=uN+-20|0;CN=k[BN>>2]|0;if((CN|0)==(yN|0)){YS=tN;ZS=yN}else{tN=uN+-16|0;lN=CN;do{CN=lN+-72|0;k[BN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,tN,CN);lN=k[BN>>2]|0}while((lN|0)!=(yN|0));YS=k[mo>>2]|0;ZS=k[rN>>2]|0}OBa(ZS);XS=YS}if((XS|0)==(xN|0))break;else uN=XS}WS=k[oa>>2]|0}OBa(WS)}uN=pa+120|0;xN=k[uN>>2]|0;if(xN){qN=pa+124|0;yN=k[qN>>2]|0;if((yN|0)==(xN|0))_S=xN;else{lN=pa+128|0;BN=yN;do{yN=BN+-72|0;k[qN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,lN,yN);BN=k[qN>>2]|0}while((BN|0)!=(xN|0));_S=k[uN>>2]|0}OBa(_S)}xN=pa+48|0;BN=k[xN>>2]|0;if(BN){qN=pa+52|0;lN=k[qN>>2]|0;if((lN|0)==(BN|0))$S=BN;else{yN=pa+56|0;tN=lN;do{lN=tN+-72|0;k[qN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,yN,lN);tN=k[qN>>2]|0}while((tN|0)!=(BN|0));$S=k[xN>>2]|0}OBa($S)}BN=k[Vn>>2]|0;do if((BN|0)==(la|0))Sf[k[(k[la>>2]|0)+16>>2]&2047](la);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=ma+120|0;xN=k[BN>>2]|0;if(xN){tN=k[go>>2]|0;if((tN|0)==(xN|0))aT=xN;else{qN=ma+128|0;yN=tN;do{tN=yN+-72|0;k[go>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,qN,tN);yN=k[go>>2]|0}while((yN|0)!=(xN|0));aT=k[BN>>2]|0}OBa(aT)}xN=ma+48|0;yN=k[xN>>2]|0;if(yN){qN=k[$n>>2]|0;if((qN|0)==(yN|0))bT=yN;else{tN=ma+56|0;uN=qN;do{qN=uN+-72|0;k[$n>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,tN,qN);uN=k[$n>>2]|0}while((uN|0)!=(yN|0));bT=k[xN>>2]|0}OBa(bT)}yN=ia+48|0;uN=k[yN>>2]|0;if(uN){tN=ia+52|0;BN=k[tN>>2]|0;if((BN|0)==(uN|0))cT=uN;else{qN=ia+56|0;lN=BN;do{BN=lN+-72|0;k[tN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,qN,BN);lN=k[tN>>2]|0}while((lN|0)!=(uN|0));cT=k[yN>>2]|0}OBa(cT)}uN=k[ja>>2]|0;if(uN){lN=k[rn>>2]|0;if((lN|0)==(uN|0))dT=uN;else{tN=lN;while(1){lN=tN+-72|0;k[rn>>2]=lN;qN=tN+-24|0;xN=k[qN>>2]|0;if(!xN)eT=lN;else{BN=tN+-20|0;zN=k[BN>>2]|0;if((zN|0)==(xN|0)){fT=lN;gT=xN}else{lN=tN+-16|0;CN=zN;do{zN=CN+-72|0;k[BN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,lN,zN);CN=k[BN>>2]|0}while((CN|0)!=(xN|0));fT=k[rn>>2]|0;gT=k[qN>>2]|0}OBa(gT);eT=fT}if((eT|0)==(uN|0))break;else tN=eT}dT=k[ja>>2]|0}OBa(dT)}tN=ka+120|0;uN=k[tN>>2]|0;if(uN){yN=ka+124|0;xN=k[yN>>2]|0;if((xN|0)==(uN|0))hT=uN;else{CN=ka+128|0;BN=xN;do{xN=BN+-72|0;k[yN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,CN,xN);BN=k[yN>>2]|0}while((BN|0)!=(uN|0));hT=k[tN>>2]|0}OBa(hT)}uN=ka+48|0;BN=k[uN>>2]|0;if(BN){yN=ka+52|0;CN=k[yN>>2]|0;if((CN|0)==(BN|0))iT=BN;else{xN=ka+56|0;lN=CN;do{CN=lN+-72|0;k[yN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,xN,CN);lN=k[yN>>2]|0}while((lN|0)!=(BN|0));iT=k[uN>>2]|0}OBa(iT)}BN=k[Ym>>2]|0;do if((BN|0)==(ga|0))Sf[k[(k[ga>>2]|0)+16>>2]&2047](ga);else{if(!BN)break;Sf[k[(k[BN>>2]|0)+20>>2]&2047](BN)}while(0);BN=ha+48|0;uN=k[BN>>2]|0;if(uN){lN=k[fn>>2]|0;if((lN|0)==(uN|0))jT=uN;else{yN=ha+56|0;xN=lN;do{lN=xN+-72|0;k[fn>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,yN,lN);xN=k[fn>>2]|0}while((xN|0)!=(uN|0));jT=k[BN>>2]|0}OBa(jT)}uN=da+48|0;xN=k[uN>>2]|0;if(xN){yN=da+52|0;lN=k[yN>>2]|0;if((lN|0)==(xN|0))kT=xN;else{tN=da+56|0;CN=lN;do{lN=CN+-72|0;k[yN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,tN,lN);CN=k[yN>>2]|0}while((CN|0)!=(xN|0));kT=k[uN>>2]|0}OBa(kT)}xN=k[ea>>2]|0;if(xN){CN=k[Hm>>2]|0;if((CN|0)==(xN|0))lT=xN;else{yN=CN;while(1){CN=yN+-72|0;k[Hm>>2]=CN;tN=yN+-24|0;BN=k[tN>>2]|0;if(!BN)mT=CN;else{lN=yN+-20|0;rN=k[lN>>2]|0;if((rN|0)==(BN|0)){nT=CN;oT=BN}else{CN=yN+-16|0;zN=rN;do{rN=zN+-72|0;k[lN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,CN,rN);zN=k[lN>>2]|0}while((zN|0)!=(BN|0));nT=k[Hm>>2]|0;oT=k[tN>>2]|0}OBa(oT);mT=nT}if((mT|0)==(xN|0))break;else yN=mT}lT=k[ea>>2]|0}OBa(lT)}yN=fa+48|0;xN=k[yN>>2]|0;if(xN){uN=fa+52|0;BN=k[uN>>2]|0;if((BN|0)==(xN|0))pT=xN;else{zN=fa+56|0;lN=BN;do{BN=lN+-72|0;k[uN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,zN,BN);lN=k[uN>>2]|0}while((lN|0)!=(xN|0));pT=k[yN>>2]|0}OBa(pT)}xN=k[nm>>2]|0;do if((xN|0)==(ba|0))Sf[k[(k[ba>>2]|0)+16>>2]&2047](ba);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=ca+120|0;yN=k[xN>>2]|0;if(yN){lN=k[zm>>2]|0;if((lN|0)==(yN|0))qT=yN;else{uN=ca+128|0;zN=lN;do{lN=zN+-72|0;k[zm>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,uN,lN);zN=k[zm>>2]|0}while((zN|0)!=(yN|0));qT=k[xN>>2]|0}OBa(qT)}yN=ca+48|0;zN=k[yN>>2]|0;if(zN){uN=k[tm>>2]|0;if((uN|0)==(zN|0))rT=zN;else{lN=ca+56|0;BN=uN;do{uN=BN+-72|0;k[tm>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,lN,uN);BN=k[tm>>2]|0}while((BN|0)!=(zN|0));rT=k[yN>>2]|0}OBa(rT)}zN=_+48|0;BN=k[zN>>2]|0;if(BN){lN=_+52|0;xN=k[lN>>2]|0;if((xN|0)==(BN|0))sT=BN;else{uN=_+56|0;CN=xN;do{xN=CN+-72|0;k[lN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,uN,xN);CN=k[lN>>2]|0}while((CN|0)!=(BN|0));sT=k[zN>>2]|0}OBa(sT)}BN=k[$>>2]|0;if(BN){CN=k[Ll>>2]|0;if((CN|0)==(BN|0))tT=BN;else{lN=CN;while(1){CN=lN+-72|0;k[Ll>>2]=CN;uN=lN+-24|0;yN=k[uN>>2]|0;if(!yN)uT=CN;else{xN=lN+-20|0;qN=k[xN>>2]|0;if((qN|0)==(yN|0)){vT=CN;wT=yN}else{CN=lN+-16|0;rN=qN;do{qN=rN+-72|0;k[xN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,CN,qN);rN=k[xN>>2]|0}while((rN|0)!=(yN|0));vT=k[Ll>>2]|0;wT=k[uN>>2]|0}OBa(wT);uT=vT}if((uT|0)==(BN|0))break;else lN=uT}tT=k[$>>2]|0}OBa(tT)}lN=aa+120|0;BN=k[lN>>2]|0;if(BN){zN=aa+124|0;yN=k[zN>>2]|0;if((yN|0)==(BN|0))xT=BN;else{rN=aa+128|0;xN=yN;do{yN=xN+-72|0;k[zN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,rN,yN);xN=k[zN>>2]|0}while((xN|0)!=(BN|0));xT=k[lN>>2]|0}OBa(xT)}BN=aa+48|0;xN=k[BN>>2]|0;if(xN){zN=aa+52|0;rN=k[zN>>2]|0;if((rN|0)==(xN|0))yT=xN;else{yN=aa+56|0;CN=rN;do{rN=CN+-72|0;k[zN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,yN,rN);CN=k[zN>>2]|0}while((CN|0)!=(xN|0));yT=k[BN>>2]|0}OBa(yT)}xN=k[tl>>2]|0;do if((xN|0)==(Y|0))Sf[k[(k[Y>>2]|0)+16>>2]&2047](Y);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=Z+120|0;BN=k[xN>>2]|0;if(BN){CN=k[Fl>>2]|0;if((CN|0)==(BN|0))zT=BN;else{zN=Z+128|0;yN=CN;do{CN=yN+-72|0;k[Fl>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,zN,CN);yN=k[Fl>>2]|0}while((yN|0)!=(BN|0));zT=k[xN>>2]|0}OBa(zT)}BN=Z+48|0;yN=k[BN>>2]|0;if(yN){zN=k[zl>>2]|0;if((zN|0)==(yN|0))AT=yN;else{CN=Z+56|0;lN=zN;do{zN=lN+-72|0;k[zl>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,CN,zN);lN=k[zl>>2]|0}while((lN|0)!=(yN|0));AT=k[BN>>2]|0}OBa(AT)}yN=V+48|0;lN=k[yN>>2]|0;if(lN){CN=V+52|0;xN=k[CN>>2]|0;if((xN|0)==(lN|0))BT=lN;else{zN=V+56|0;rN=xN;do{xN=rN+-72|0;k[CN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,zN,xN);rN=k[CN>>2]|0}while((rN|0)!=(lN|0));BT=k[yN>>2]|0}OBa(BT)}lN=k[W>>2]|0;if(lN){rN=k[Rk>>2]|0;if((rN|0)==(lN|0))CT=lN;else{CN=rN;while(1){rN=CN+-72|0;k[Rk>>2]=rN;zN=CN+-24|0;BN=k[zN>>2]|0;if(!BN)DT=rN;else{xN=CN+-20|0;tN=k[xN>>2]|0;if((tN|0)==(BN|0)){ET=rN;FT=BN}else{rN=CN+-16|0;qN=tN;do{tN=qN+-72|0;k[xN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,rN,tN);qN=k[xN>>2]|0}while((qN|0)!=(BN|0));ET=k[Rk>>2]|0;FT=k[zN>>2]|0}OBa(FT);DT=ET}if((DT|0)==(lN|0))break;else CN=DT}CT=k[W>>2]|0}OBa(CT)}CN=X+120|0;lN=k[CN>>2]|0;if(lN){yN=X+124|0;BN=k[yN>>2]|0;if((BN|0)==(lN|0))GT=lN;else{qN=X+128|0;xN=BN;do{BN=xN+-72|0;k[yN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,qN,BN);xN=k[yN>>2]|0}while((xN|0)!=(lN|0));GT=k[CN>>2]|0}OBa(GT)}lN=X+48|0;xN=k[lN>>2]|0;if(xN){yN=X+52|0;qN=k[yN>>2]|0;if((qN|0)==(xN|0))HT=xN;else{BN=X+56|0;rN=qN;do{qN=rN+-72|0;k[yN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,BN,qN);rN=k[yN>>2]|0}while((rN|0)!=(xN|0));HT=k[lN>>2]|0}OBa(HT)}xN=k[zk>>2]|0;do if((xN|0)==(T|0))Sf[k[(k[T>>2]|0)+16>>2]&2047](T);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=U+120|0;lN=k[xN>>2]|0;if(lN){rN=k[Lk>>2]|0;if((rN|0)==(lN|0))IT=lN;else{yN=U+128|0;BN=rN;do{rN=BN+-72|0;k[Lk>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,yN,rN);BN=k[Lk>>2]|0}while((BN|0)!=(lN|0));IT=k[xN>>2]|0}OBa(IT)}lN=U+48|0;BN=k[lN>>2]|0;if(BN){yN=k[Fk>>2]|0;if((yN|0)==(BN|0))JT=BN;else{rN=U+56|0;CN=yN;do{yN=CN+-72|0;k[Fk>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,rN,yN);CN=k[Fk>>2]|0}while((CN|0)!=(BN|0));JT=k[lN>>2]|0}OBa(JT)}BN=Q+48|0;CN=k[BN>>2]|0;if(CN){rN=Q+52|0;xN=k[rN>>2]|0;if((xN|0)==(CN|0))KT=CN;else{yN=Q+56|0;qN=xN;do{xN=qN+-72|0;k[rN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,yN,xN);qN=k[rN>>2]|0}while((qN|0)!=(CN|0));KT=k[BN>>2]|0}OBa(KT)}CN=k[R>>2]|0;if(CN){qN=k[Xj>>2]|0;if((qN|0)==(CN|0))LT=CN;else{rN=qN;while(1){qN=rN+-72|0;k[Xj>>2]=qN;yN=rN+-24|0;lN=k[yN>>2]|0;if(!lN)MT=qN;else{xN=rN+-20|0;uN=k[xN>>2]|0;if((uN|0)==(lN|0)){NT=qN;OT=lN}else{qN=rN+-16|0;tN=uN;do{uN=tN+-72|0;k[xN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,qN,uN);tN=k[xN>>2]|0}while((tN|0)!=(lN|0));NT=k[Xj>>2]|0;OT=k[yN>>2]|0}OBa(OT);MT=NT}if((MT|0)==(CN|0))break;else rN=MT}LT=k[R>>2]|0}OBa(LT)}rN=S+120|0;CN=k[rN>>2]|0;if(CN){BN=S+124|0;lN=k[BN>>2]|0;if((lN|0)==(CN|0))PT=CN;else{tN=S+128|0;xN=lN;do{lN=xN+-72|0;k[BN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,tN,lN);xN=k[BN>>2]|0}while((xN|0)!=(CN|0));PT=k[rN>>2]|0}OBa(PT)}CN=S+48|0;xN=k[CN>>2]|0;if(xN){BN=S+52|0;tN=k[BN>>2]|0;if((tN|0)==(xN|0))QT=xN;else{lN=S+56|0;qN=tN;do{tN=qN+-72|0;k[BN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,lN,tN);qN=k[BN>>2]|0}while((qN|0)!=(xN|0));QT=k[CN>>2]|0}OBa(QT)}xN=k[Fj>>2]|0;do if((xN|0)==(O|0))Sf[k[(k[O>>2]|0)+16>>2]&2047](O);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=P+120|0;CN=k[xN>>2]|0;if(CN){qN=k[Rj>>2]|0;if((qN|0)==(CN|0))RT=CN;else{BN=P+128|0;lN=qN;do{qN=lN+-72|0;k[Rj>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,BN,qN);lN=k[Rj>>2]|0}while((lN|0)!=(CN|0));RT=k[xN>>2]|0}OBa(RT)}CN=P+48|0;lN=k[CN>>2]|0;if(lN){BN=k[Lj>>2]|0;if((BN|0)==(lN|0))ST=lN;else{qN=P+56|0;rN=BN;do{BN=rN+-72|0;k[Lj>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,qN,BN);rN=k[Lj>>2]|0}while((rN|0)!=(lN|0));ST=k[CN>>2]|0}OBa(ST)}lN=K+48|0;rN=k[lN>>2]|0;if(rN){qN=K+52|0;xN=k[qN>>2]|0;if((xN|0)==(rN|0))TT=rN;else{BN=K+56|0;tN=xN;do{xN=tN+-72|0;k[qN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,BN,xN);tN=k[qN>>2]|0}while((tN|0)!=(rN|0));TT=k[lN>>2]|0}OBa(TT)}rN=k[L>>2]|0;if(rN){tN=k[bj>>2]|0;if((tN|0)==(rN|0))UT=rN;else{qN=tN;while(1){tN=qN+-72|0;k[bj>>2]=tN;BN=qN+-24|0;CN=k[BN>>2]|0;if(!CN)VT=tN;else{xN=qN+-20|0;zN=k[xN>>2]|0;if((zN|0)==(CN|0)){WT=tN;XT=CN}else{tN=qN+-16|0;uN=zN;do{zN=uN+-72|0;k[xN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,tN,zN);uN=k[xN>>2]|0}while((uN|0)!=(CN|0));WT=k[bj>>2]|0;XT=k[BN>>2]|0}OBa(XT);VT=WT}if((VT|0)==(rN|0))break;else qN=VT}UT=k[L>>2]|0}OBa(UT)}qN=N+120|0;rN=k[qN>>2]|0;if(rN){lN=N+124|0;CN=k[lN>>2]|0;if((CN|0)==(rN|0))YT=rN;else{uN=N+128|0;xN=CN;do{CN=xN+-72|0;k[lN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,uN,CN);xN=k[lN>>2]|0}while((xN|0)!=(rN|0));YT=k[qN>>2]|0}OBa(YT)}rN=N+48|0;xN=k[rN>>2]|0;if(xN){lN=N+52|0;uN=k[lN>>2]|0;if((uN|0)==(xN|0))ZT=xN;else{CN=N+56|0;tN=uN;do{uN=tN+-72|0;k[lN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,CN,uN);tN=k[lN>>2]|0}while((tN|0)!=(xN|0));ZT=k[rN>>2]|0}OBa(ZT)}xN=k[Li>>2]|0;do if((xN|0)==(I|0))Sf[k[(k[I>>2]|0)+16>>2]&2047](I);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=J+120|0;rN=k[xN>>2]|0;if(rN){tN=k[Xi>>2]|0;if((tN|0)==(rN|0))_T=rN;else{lN=J+128|0;CN=tN;do{tN=CN+-72|0;k[Xi>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,lN,tN);CN=k[Xi>>2]|0}while((CN|0)!=(rN|0));_T=k[xN>>2]|0}OBa(_T)}rN=J+48|0;CN=k[rN>>2]|0;if(CN){lN=k[Ri>>2]|0;if((lN|0)==(CN|0))$T=CN;else{tN=J+56|0;qN=lN;do{lN=qN+-72|0;k[Ri>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,tN,lN);qN=k[Ri>>2]|0}while((qN|0)!=(CN|0));$T=k[rN>>2]|0}OBa($T)}CN=F+48|0;qN=k[CN>>2]|0;if(qN){tN=F+52|0;xN=k[tN>>2]|0;if((xN|0)==(qN|0))aU=qN;else{lN=F+56|0;uN=xN;do{xN=uN+-72|0;k[tN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,lN,xN);uN=k[tN>>2]|0}while((uN|0)!=(qN|0));aU=k[CN>>2]|0}OBa(aU)}qN=k[G>>2]|0;if(qN){uN=k[hi>>2]|0;if((uN|0)==(qN|0))bU=qN;else{tN=uN;while(1){uN=tN+-72|0;k[hi>>2]=uN;lN=tN+-24|0;rN=k[lN>>2]|0;if(!rN)cU=uN;else{xN=tN+-20|0;yN=k[xN>>2]|0;if((yN|0)==(rN|0)){dU=uN;eU=rN}else{uN=tN+-16|0;zN=yN;do{yN=zN+-72|0;k[xN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,uN,yN);zN=k[xN>>2]|0}while((zN|0)!=(rN|0));dU=k[hi>>2]|0;eU=k[lN>>2]|0}OBa(eU);cU=dU}if((cU|0)==(qN|0))break;else tN=cU}bU=k[G>>2]|0}OBa(bU)}tN=H+120|0;qN=k[tN>>2]|0;if(qN){CN=H+124|0;rN=k[CN>>2]|0;if((rN|0)==(qN|0))fU=qN;else{zN=H+128|0;xN=rN;do{rN=xN+-72|0;k[CN>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,zN,rN);xN=k[CN>>2]|0}while((xN|0)!=(qN|0));fU=k[tN>>2]|0}OBa(fU)}qN=H+48|0;xN=k[qN>>2]|0;if(xN){CN=H+52|0;zN=k[CN>>2]|0;if((zN|0)==(xN|0))gU=xN;else{rN=H+56|0;uN=zN;do{zN=uN+-72|0;k[CN>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,rN,zN);uN=k[CN>>2]|0}while((uN|0)!=(xN|0));gU=k[qN>>2]|0}OBa(gU)}xN=k[Rh>>2]|0;do if((xN|0)==(D|0))Sf[k[(k[D>>2]|0)+16>>2]&2047](D);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=E+120|0;qN=k[xN>>2]|0;if(qN){uN=k[bi>>2]|0;if((uN|0)==(qN|0))hU=qN;else{CN=E+128|0;rN=uN;do{uN=rN+-72|0;k[bi>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,CN,uN);rN=k[bi>>2]|0}while((rN|0)!=(qN|0));hU=k[xN>>2]|0}OBa(hU)}qN=E+48|0;rN=k[qN>>2]|0;if(rN){CN=k[Xh>>2]|0;if((CN|0)==(rN|0))iU=rN;else{uN=E+56|0;tN=CN;do{CN=tN+-72|0;k[Xh>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,uN,CN);tN=k[Xh>>2]|0}while((tN|0)!=(rN|0));iU=k[qN>>2]|0}OBa(iU)}rN=A+48|0;tN=k[rN>>2]|0;if(tN){uN=A+52|0;xN=k[uN>>2]|0;if((xN|0)==(tN|0))jU=tN;else{CN=A+56|0;zN=xN;do{xN=zN+-72|0;k[uN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,CN,xN);zN=k[uN>>2]|0}while((zN|0)!=(tN|0));jU=k[rN>>2]|0}OBa(jU)}tN=k[B>>2]|0;if(tN){zN=k[nh>>2]|0;if((zN|0)==(tN|0))kU=tN;else{uN=zN;while(1){zN=uN+-72|0;k[nh>>2]=zN;CN=uN+-24|0;qN=k[CN>>2]|0;if(!qN)lU=zN;else{xN=uN+-20|0;BN=k[xN>>2]|0;if((BN|0)==(qN|0)){mU=zN;nU=qN}else{zN=uN+-16|0;yN=BN;do{BN=yN+-72|0;k[xN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,zN,BN);yN=k[xN>>2]|0}while((yN|0)!=(qN|0));mU=k[nh>>2]|0;nU=k[CN>>2]|0}OBa(nU);lU=mU}if((lU|0)==(tN|0))break;else uN=lU}kU=k[B>>2]|0}OBa(kU)}uN=C+120|0;tN=k[uN>>2]|0;if(tN){rN=C+124|0;qN=k[rN>>2]|0;if((qN|0)==(tN|0))oU=tN;else{yN=C+128|0;xN=qN;do{qN=xN+-72|0;k[rN>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,yN,qN);xN=k[rN>>2]|0}while((xN|0)!=(tN|0));oU=k[uN>>2]|0}OBa(oU)}tN=C+48|0;xN=k[tN>>2]|0;if(xN){rN=C+52|0;yN=k[rN>>2]|0;if((yN|0)==(xN|0))pU=xN;else{qN=C+56|0;zN=yN;do{yN=zN+-72|0;k[rN>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,qN,yN);zN=k[rN>>2]|0}while((zN|0)!=(xN|0));pU=k[tN>>2]|0}OBa(pU)}xN=k[Xg>>2]|0;do if((xN|0)==(y|0))Sf[k[(k[y>>2]|0)+16>>2]&2047](y);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=z+120|0;tN=k[xN>>2]|0;if(tN){zN=k[hh>>2]|0;if((zN|0)==(tN|0))qU=tN;else{rN=z+128|0;qN=zN;do{zN=qN+-72|0;k[hh>>2]=zN;i[c>>0]=i[d>>0]|0;uF(c,rN,zN);qN=k[hh>>2]|0}while((qN|0)!=(tN|0));qU=k[xN>>2]|0}OBa(qU)}tN=z+48|0;qN=k[tN>>2]|0;if(qN){rN=k[bh>>2]|0;if((rN|0)==(qN|0))rU=qN;else{zN=z+56|0;uN=rN;do{rN=uN+-72|0;k[bh>>2]=rN;i[c>>0]=i[d>>0]|0;uF(c,zN,rN);uN=k[bh>>2]|0}while((uN|0)!=(qN|0));rU=k[tN>>2]|0}OBa(rU)}qN=u+48|0;uN=k[qN>>2]|0;if(uN){zN=u+52|0;xN=k[zN>>2]|0;if((xN|0)==(uN|0))sU=uN;else{rN=u+56|0;yN=xN;do{xN=yN+-72|0;k[zN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,rN,xN);yN=k[zN>>2]|0}while((yN|0)!=(uN|0));sU=k[qN>>2]|0}OBa(sU)}uN=k[v>>2]|0;if(uN){yN=k[pg>>2]|0;if((yN|0)==(uN|0))tU=uN;else{zN=yN;while(1){yN=zN+-72|0;k[pg>>2]=yN;rN=zN+-24|0;tN=k[rN>>2]|0;if(!tN)uU=yN;else{xN=zN+-20|0;lN=k[xN>>2]|0;if((lN|0)==(tN|0)){vU=yN;wU=tN}else{yN=zN+-16|0;BN=lN;do{lN=BN+-72|0;k[xN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,yN,lN);BN=k[xN>>2]|0}while((BN|0)!=(tN|0));vU=k[pg>>2]|0;wU=k[rN>>2]|0}OBa(wU);uU=vU}if((uU|0)==(uN|0))break;else zN=uU}tU=k[v>>2]|0}OBa(tU)}zN=w+120|0;uN=k[zN>>2]|0;if(uN){qN=w+124|0;tN=k[qN>>2]|0;if((tN|0)==(uN|0))xU=uN;else{BN=w+128|0;xN=tN;do{tN=xN+-72|0;k[qN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,BN,tN);xN=k[qN>>2]|0}while((xN|0)!=(uN|0));xU=k[zN>>2]|0}OBa(xU)}uN=w+48|0;xN=k[uN>>2]|0;if(xN){qN=w+52|0;BN=k[qN>>2]|0;if((BN|0)==(xN|0))yU=xN;else{tN=w+56|0;yN=BN;do{BN=yN+-72|0;k[qN>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,tN,BN);yN=k[qN>>2]|0}while((yN|0)!=(xN|0));yU=k[uN>>2]|0}OBa(yU)}xN=k[$f>>2]|0;do if((xN|0)==(s|0))Sf[k[(k[s>>2]|0)+16>>2]&2047](s);else{if(!xN)break;Sf[k[(k[xN>>2]|0)+20>>2]&2047](xN)}while(0);xN=t+120|0;uN=k[xN>>2]|0;if(uN){yN=k[lg>>2]|0;if((yN|0)==(uN|0))zU=uN;else{qN=t+128|0;tN=yN;do{yN=tN+-72|0;k[lg>>2]=yN;i[c>>0]=i[d>>0]|0;uF(c,qN,yN);tN=k[lg>>2]|0}while((tN|0)!=(uN|0));zU=k[xN>>2]|0}OBa(zU)}uN=t+48|0;tN=k[uN>>2]|0;if(tN){qN=k[jg>>2]|0;if((qN|0)==(tN|0))AU=tN;else{yN=t+56|0;zN=qN;do{qN=zN+-72|0;k[jg>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,yN,qN);zN=k[jg>>2]|0}while((zN|0)!=(tN|0));AU=k[uN>>2]|0}OBa(AU)}tN=o+48|0;zN=k[tN>>2]|0;if(zN){yN=o+52|0;xN=k[yN>>2]|0;if((xN|0)==(zN|0))BU=zN;else{qN=o+56|0;BN=xN;do{xN=BN+-72|0;k[yN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,qN,xN);BN=k[yN>>2]|0}while((BN|0)!=(zN|0));BU=k[tN>>2]|0}OBa(BU)}zN=k[p>>2]|0;if(zN){BN=k[Lf>>2]|0;if((BN|0)==(zN|0))CU=zN;else{yN=BN;while(1){BN=yN+-72|0;k[Lf>>2]=BN;qN=yN+-24|0;uN=k[qN>>2]|0;if(!uN)DU=BN;else{xN=yN+-20|0;CN=k[xN>>2]|0;if((CN|0)==(uN|0)){EU=BN;FU=uN}else{BN=yN+-16|0;lN=CN;do{CN=lN+-72|0;k[xN>>2]=CN;i[c>>0]=i[d>>0]|0;uF(c,BN,CN);lN=k[xN>>2]|0}while((lN|0)!=(uN|0));EU=k[Lf>>2]|0;FU=k[qN>>2]|0}OBa(FU);DU=EU}if((DU|0)==(zN|0))break;else yN=DU}CU=k[p>>2]|0}OBa(CU)}yN=q+120|0;zN=k[yN>>2]|0;if(zN){tN=q+124|0;uN=k[tN>>2]|0;if((uN|0)==(zN|0))GU=zN;else{lN=q+128|0;xN=uN;do{uN=xN+-72|0;k[tN>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,lN,uN);xN=k[tN>>2]|0}while((xN|0)!=(zN|0));GU=k[yN>>2]|0}OBa(GU)}zN=q+48|0;xN=k[zN>>2]|0;if(xN){tN=q+52|0;lN=k[tN>>2]|0;if((lN|0)==(xN|0))HU=xN;else{uN=q+56|0;BN=lN;do{lN=BN+-72|0;k[tN>>2]=lN;i[c>>0]=i[d>>0]|0;uF(c,uN,lN);BN=k[tN>>2]|0}while((BN|0)!=(xN|0));HU=k[zN>>2]|0}OBa(HU)}k[Cd>>2]=0;xN=Cd+4|0;k[xN>>2]=0;k[Cd+8>>2]=0;x=0;BN=Ba(563,5)|0;tN=x;x=0;if(tN&1){tN=Hc()|0;IU=tN;JU=M;break a}k[Cd>>2]=BN;tN=BN+5|0;k[Cd+8>>2]=tN;i[BN>>0]=20;i[BN+1>>0]=16;i[BN+2>>0]=18;i[BN+3>>0]=17;i[BN+4>>0]=19;k[xN>>2]=tN;uN=Kd+8|0;yN=Kd+48|0;lN=Kd+60|0;rN=Kd+72|0;CN=Kd+80|0;KU=Kd+120|0;LU=j+48|0;MU=Kd+132|0;NU=Jd+4|0;OU=Jd+8|0;PU=Jd+8|0;QU=Id+4|0;RU=Id+8|0;SU=Id+40|0;TU=Id+48|0;UU=Id+60|0;VU=Id+64|0;WU=Hd+4|0;XU=Hd+8|0;YU=Hd+8|0;ZU=Gd+4|0;_U=Gd+8|0;$U=Gd+40|0;aV=Gd+48|0;bV=Gd+60|0;cV=Gd+64|0;dV=Fd+4|0;eV=Fd+8|0;fV=Fd+8|0;gV=Ed+4|0;hV=Ed+8|0;iV=Ed+40|0;jV=Ed+48|0;kV=Ed+60|0;lV=Ed+64|0;mV=Md+8|0;nV=Md+16|0;oV=Md+56|0;pV=Md+68|0;qV=Md+80|0;rV=Md+88|0;sV=Md+128|0;tV=Md+140|0;uV=Ld+16|0;vV=Md+60|0;wV=Md+64|0;xV=Md+132|0;yV=Md+136|0;zV=Dd+8|0;AV=Dd+48|0;BV=Dd+60|0;CV=Dd+72|0;DV=Dd+88|0;EV=Dd+52|0;FV=Dd+56|0;GV=Dd+48|0;HV=Md+128|0;IV=Md+56|0;JV=Ed+48|0;KV=Ed+52|0;LV=Ed+56|0;MV=Md+64|0;NV=Md+136|0;OV=Dd+56|0;PV=Kd+8|0;QV=Kd+48|0;RV=Kd+60|0;SV=Kd+72|0;TV=Kd+80|0;UV=Kd+120|0;VV=Kd+132|0;WV=Id+8|0;XV=Id+48|0;YV=Id+60|0;ZV=Gd+8|0;_V=Gd+48|0;$V=Gd+60|0;aW=Gd+48|0;bW=Id+48|0;cW=Kd+120|0;dW=Kd+48|0;eW=Kd+52|0;fW=Kd+56|0;gW=Kd+124|0;hW=Kd+128|0;iW=Id+52|0;jW=Id+56|0;kW=Gd+52|0;lW=Gd+56|0;mW=BN;Fb:while(1){BN=i[mW>>0]|0;k[Kd>>2]=k[h>>2];i[Kd+4>>0]=i[h+4>>0]|0;Df=uN;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,yN|0,bA|0);qN=x;x=0;if(qN&1){nW=Kd;ug=5689;break}qN=Bf;oW=k[qN+4>>2]|0;pW=lN;k[pW>>2]=k[qN>>2];k[pW+4>>2]=oW;k[rN>>2]=k[j>>2];i[rN+4>>0]=i[j+4>>0]|0;Df=CN;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,KU|0,LU|0);oW=x;x=0;if(oW&1){nW=rN;ug=5689;break}oW=Cf;pW=k[oW+4>>2]|0;qN=MU;k[qN>>2]=k[oW>>2];k[qN+4>>2]=pW;k[Jd>>2]=0;k[NU>>2]=0;k[OU>>2]=0;x=0;pW=Ba(563,144)|0;qN=x;x=0;if(qN&1){ug=5564;break}k[NU>>2]=pW;k[Jd>>2]=pW;k[PU>>2]=pW+144;k[pW>>2]=k[Kd>>2];i[pW+4>>0]=i[Kd+4>>0]|0;Df=pW+8|0;Ef=PV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pW+48|0,QV|0);qN=x;x=0;if(qN&1){ug=5565;break}qN=RV;oW=k[qN+4>>2]|0;qW=pW+60|0;k[qW>>2]=k[qN>>2];k[qW+4>>2]=oW;oW=pW+72|0;k[NU>>2]=oW;k[oW>>2]=k[SV>>2];i[oW+4>>0]=i[SV+4>>0]|0;Df=pW+80|0;Ef=TV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pW+120|0,UV|0);oW=x;x=0;if(oW&1){ug=5565;break}oW=VV;qW=k[oW+4>>2]|0;qN=pW+132|0;k[qN>>2]=k[oW>>2];k[qN+4>>2]=qW;k[NU>>2]=(k[NU>>2]|0)+72;k[Id>>2]=1;i[QU>>0]=1;k[RU>>2]=BN&255;k[SU>>2]=1;x=0;xa(712,TU|0,Jd|0);qW=x;x=0;if(qW&1){ug=5699;break}k[UU>>2]=0;k[VU>>2]=0;k[Hd>>2]=0;k[WU>>2]=0;k[XU>>2]=0;x=0;qW=Ba(563,72)|0;qN=x;x=0;if(qN&1){ug=5580;break}k[WU>>2]=qW;k[Hd>>2]=qW;k[YU>>2]=qW+72;k[qW>>2]=k[Id>>2];i[qW+4>>0]=i[Id+4>>0]|0;Df=qW+8|0;Ef=WV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,qW+48|0,XV|0);BN=x;x=0;if(BN&1){rW=qW;ug=5581;break}BN=YV;pW=k[BN+4>>2]|0;qN=qW+60|0;k[qN>>2]=k[BN>>2];k[qN+4>>2]=pW;k[WU>>2]=qW+72;k[Gd>>2]=1;i[ZU>>0]=1;k[_U>>2]=21;k[$U>>2]=1;x=0;xa(712,aV|0,Hd|0);pW=x;x=0;if(pW&1){sW=qW;ug=5701;break}k[bV>>2]=0;k[cV>>2]=0;k[Fd>>2]=0;k[dV>>2]=0;k[eV>>2]=0;x=0;pW=Ba(563,72)|0;qN=x;x=0;if(qN&1){ug=5585;break}k[dV>>2]=pW;k[Fd>>2]=pW;k[fV>>2]=pW+72;k[pW>>2]=k[Gd>>2];i[pW+4>>0]=i[Gd+4>>0]|0;Df=pW+8|0;Ef=ZV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,pW+48|0,_V|0);qW=x;x=0;if(qW&1){tW=pW;ug=5586;break}qW=$V;qN=k[qW+4>>2]|0;BN=pW+60|0;k[BN>>2]=k[qW>>2];k[BN+4>>2]=qN;k[dV>>2]=pW+72;k[Ed>>2]=1;i[gV>>0]=1;k[hV>>2]=21;k[iV>>2]=1;x=0;xa(712,jV|0,Fd|0);qN=x;x=0;if(qN&1){ug=5703;break}k[kV>>2]=0;k[lV>>2]=0;i[Md>>0]=i[mW>>0]|0;k[mV>>2]=k[h>>2];i[mV+4>>0]=i[h+4>>0]|0;Df=nV;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,oV|0,bA|0);pW=x;x=0;if(pW&1){ug=5704;break}pW=Bf;qN=k[pW+4>>2]|0;BN=pV;k[BN>>2]=k[pW>>2];k[BN+4>>2]=qN;k[qV>>2]=k[j>>2];i[qV+4>>0]=i[j+4>>0]|0;Df=rV;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,sV|0,LU|0);qN=x;x=0;if(qN&1){ug=5705;break}qN=Cf;BN=k[qN>>2]|0;pW=k[qN+4>>2]|0;qN=tV;k[qN>>2]=BN;k[qN+4>>2]=pW;k[uV>>2]=0;x=0;qN=Ba(563,160)|0;qW=x;x=0;if(qW&1){ug=5711;break}k[qN>>2]=29652;i[qN+8>>0]=i[Md>>0]|0;qW=qN+16|0;k[qW>>2]=k[mV>>2];i[qW+4>>0]=i[mV+4>>0]|0;Df=qN+24|0;Ef=nV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[qN+64>>2]=k[oV>>2];k[qN+68>>2]=k[vV>>2];k[qN+72>>2]=k[wV>>2];k[wV>>2]=0;k[vV>>2]=0;k[oV>>2]=0;qW=pV;oW=k[qW+4>>2]|0;uW=qN+76|0;k[uW>>2]=k[qW>>2];k[uW+4>>2]=oW;oW=qN+88|0;k[oW>>2]=k[qV>>2];i[oW+4>>0]=i[qV+4>>0]|0;Df=qN+96|0;Ef=rV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[qN+136>>2]=k[sV>>2];k[qN+140>>2]=k[xV>>2];k[qN+144>>2]=k[yV>>2];k[yV>>2]=0;k[xV>>2]=0;k[sV>>2]=0;oW=qN+148|0;k[oW>>2]=BN;k[oW+4>>2]=pW;k[uV>>2]=qN;k[Dd>>2]=k[Ed>>2];i[Dd+4>>0]=i[Ed+4>>0]|0;Df=zV;Ef=hV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,AV|0,jV|0);qN=x;x=0;if(qN&1){ug=5712;break}qN=kV;pW=k[qN+4>>2]|0;BN=BV;k[BN>>2]=k[qN>>2];k[BN+4>>2]=pW;pW=k[uV>>2]|0;do if(!pW)k[DV>>2]=0;else{if((pW|0)==(Ld|0)){k[DV>>2]=CV;x=0;xa(k[(k[Ld>>2]|0)+12>>2]|0,Ld|0,CV|0);BN=x;x=0;if(BN&1){ug=5597;break Fb}else break}x=0;BN=Ba(k[(k[pW>>2]|0)+8>>2]|0,pW|0)|0;qN=x;x=0;if(qN&1){ug=5597;break Fb}k[DV>>2]=BN}while(0);pW=k[mf>>2]|0;if(pW>>>0>=(k[wN>>2]|0)>>>0){x=0;xa(713,lf|0,Dd|0);BN=x;x=0;if(BN&1){ug=5714;break}}else{k[pW>>2]=k[Dd>>2];i[pW+4>>0]=i[Dd+4>>0]|0;Df=pW+8|0;Ef=zV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));BN=pW+48|0;k[BN>>2]=0;qN=pW+52|0;k[qN>>2]=0;k[pW+56>>2]=0;k[BN>>2]=k[AV>>2];k[qN>>2]=k[EV>>2];k[pW+56>>2]=k[FV>>2];k[FV>>2]=0;k[EV>>2]=0;k[AV>>2]=0;qN=BV;BN=k[qN+4>>2]|0;oW=pW+60|0;k[oW>>2]=k[qN>>2];k[oW+4>>2]=BN;BN=pW+72|0;oW=k[DV>>2]|0;do if(oW)if((oW|0)==(CV|0)){k[pW+88>>2]=BN;qN=k[DV>>2]|0;x=0;xa(k[(k[qN>>2]|0)+12>>2]|0,qN|0,BN|0);qN=x;x=0;if(qN&1){ug=5609;break Fb}else break}else{k[pW+88>>2]=oW;k[DV>>2]=0;break}else k[pW+88>>2]=0;while(0);k[mf>>2]=(k[mf>>2]|0)+96}pW=k[DV>>2]|0;do if((pW|0)==(CV|0))Sf[k[(k[CV>>2]|0)+16>>2]&2047](CV);else{if(!pW)break;Sf[k[(k[pW>>2]|0)+20>>2]&2047](pW)}while(0);pW=k[GV>>2]|0;if(pW){oW=k[EV>>2]|0;if((oW|0)==(pW|0))vW=pW;else{BN=oW;do{oW=BN+-72|0;k[EV>>2]=oW;i[c>>0]=i[d>>0]|0;uF(c,OV,oW);BN=k[EV>>2]|0}while((BN|0)!=(pW|0));vW=k[GV>>2]|0}OBa(vW)}pW=k[uV>>2]|0;do if((pW|0)==(Ld|0))Sf[k[(k[Ld>>2]|0)+16>>2]&2047](Ld);else{if(!pW)break;Sf[k[(k[pW>>2]|0)+20>>2]&2047](pW)}while(0);pW=k[HV>>2]|0;if(pW){BN=k[xV>>2]|0;if((BN|0)==(pW|0))wW=pW;else{oW=BN;do{BN=oW+-72|0;k[xV>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,NV,BN);oW=k[xV>>2]|0}while((oW|0)!=(pW|0));wW=k[HV>>2]|0}OBa(wW)}pW=k[IV>>2]|0;if(pW){oW=k[vV>>2]|0;if((oW|0)==(pW|0))xW=pW;else{BN=oW;do{oW=BN+-72|0;k[vV>>2]=oW;i[c>>0]=i[d>>0]|0;uF(c,MV,oW);BN=k[vV>>2]|0}while((BN|0)!=(pW|0));xW=k[IV>>2]|0}OBa(xW)}pW=k[JV>>2]|0;if(pW){BN=k[KV>>2]|0;if((BN|0)==(pW|0))yW=pW;else{oW=BN;do{BN=oW+-72|0;k[KV>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,LV,BN);oW=k[KV>>2]|0}while((oW|0)!=(pW|0));yW=k[JV>>2]|0}OBa(yW)}pW=k[Fd>>2]|0;if(pW){oW=k[dV>>2]|0;if((oW|0)==(pW|0))zW=pW;else{BN=oW;while(1){oW=BN+-72|0;k[dV>>2]=oW;qN=BN+-24|0;uW=k[qN>>2]|0;if(!uW)AW=oW;else{qW=BN+-20|0;BW=k[qW>>2]|0;if((BW|0)==(uW|0)){CW=oW;DW=uW}else{oW=BN+-16|0;EW=BW;do{BW=EW+-72|0;k[qW>>2]=BW;i[c>>0]=i[d>>0]|0;uF(c,oW,BW);EW=k[qW>>2]|0}while((EW|0)!=(uW|0));CW=k[dV>>2]|0;DW=k[qN>>2]|0}OBa(DW);AW=CW}if((AW|0)==(pW|0))break;else BN=AW}zW=k[Fd>>2]|0}OBa(zW)}BN=k[aW>>2]|0;if(BN){pW=k[kW>>2]|0;if((pW|0)==(BN|0))FW=BN;else{uW=pW;do{pW=uW+-72|0;k[kW>>2]=pW;i[c>>0]=i[d>>0]|0;uF(c,lW,pW);uW=k[kW>>2]|0}while((uW|0)!=(BN|0));FW=k[aW>>2]|0}OBa(FW)}BN=k[Hd>>2]|0;if(BN){uW=k[WU>>2]|0;if((uW|0)==(BN|0))GW=BN;else{pW=uW;while(1){uW=pW+-72|0;k[WU>>2]=uW;EW=pW+-24|0;qW=k[EW>>2]|0;if(!qW)HW=uW;else{oW=pW+-20|0;BW=k[oW>>2]|0;if((BW|0)==(qW|0)){IW=uW;JW=qW}else{uW=pW+-16|0;KW=BW;do{BW=KW+-72|0;k[oW>>2]=BW;i[c>>0]=i[d>>0]|0;uF(c,uW,BW);KW=k[oW>>2]|0}while((KW|0)!=(qW|0));IW=k[WU>>2]|0;JW=k[EW>>2]|0}OBa(JW);HW=IW}if((HW|0)==(BN|0))break;else pW=HW}GW=k[Hd>>2]|0}OBa(GW)}pW=k[bW>>2]|0;if(pW){BN=k[iW>>2]|0;if((BN|0)==(pW|0))LW=pW;else{qW=BN;do{BN=qW+-72|0;k[iW>>2]=BN;i[c>>0]=i[d>>0]|0;uF(c,jW,BN);qW=k[iW>>2]|0}while((qW|0)!=(pW|0));LW=k[bW>>2]|0}OBa(LW)}pW=k[Jd>>2]|0;if(pW){qW=k[NU>>2]|0;if((qW|0)==(pW|0))MW=pW;else{BN=qW;while(1){qW=BN+-72|0;k[NU>>2]=qW;KW=BN+-24|0;oW=k[KW>>2]|0;if(!oW)NW=qW;else{uW=BN+-20|0;qN=k[uW>>2]|0;if((qN|0)==(oW|0)){OW=qW;PW=oW}else{qW=BN+-16|0;BW=qN;do{qN=BW+-72|0;k[uW>>2]=qN;i[c>>0]=i[d>>0]|0;uF(c,qW,qN);BW=k[uW>>2]|0}while((BW|0)!=(oW|0));OW=k[NU>>2]|0;PW=k[KW>>2]|0}OBa(PW);NW=OW}if((NW|0)==(pW|0))break;else BN=NW}MW=k[Jd>>2]|0}OBa(MW)}BN=k[cW>>2]|0;if(BN){pW=k[gW>>2]|0;if((pW|0)==(BN|0))QW=BN;else{oW=pW;do{pW=oW+-72|0;k[gW>>2]=pW;i[c>>0]=i[d>>0]|0;uF(c,hW,pW);oW=k[gW>>2]|0}while((oW|0)!=(BN|0));QW=k[cW>>2]|0}OBa(QW)}BN=k[dW>>2]|0;if(BN){oW=k[eW>>2]|0;if((oW|0)==(BN|0))RW=BN;else{pW=oW;do{oW=pW+-72|0;k[eW>>2]=oW;i[c>>0]=i[d>>0]|0;uF(c,fW,oW);pW=k[eW>>2]|0}while((pW|0)!=(BN|0));RW=k[dW>>2]|0}OBa(RW)}mW=mW+1|0;if((mW|0)==(tN|0)){ug=3159;break}}switch(ug|0){case 3159:{tN=k[Cd>>2]|0;if(tN){if((k[xN>>2]|0)!=(tN|0))k[xN>>2]=tN;OBa(tN)};k[Ud>>2]=k[h>>2];i[Ud+4>>0]=i[h+4>>0]|0;Df=Ud+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ud+48|0,bA|0);tN=x;x=0;if(tN&1){tN=Hc()|0;IU=tN;JU=M;break a}tN=Bf;mW=k[tN+4>>2]|0;dW=Ud+60|0;k[dW>>2]=k[tN>>2];k[dW+4>>2]=mW;k[Td>>2]=0;mW=Td+4|0;k[mW>>2]=0;k[Td+8>>2]=0;x=0;dW=Ba(563,72)|0;tN=x;x=0;do if(tN&1){eW=Hc()|0;SW=eW;TW=M;ug=5955}else{k[mW>>2]=dW;k[Td>>2]=dW;k[Td+8>>2]=dW+72;k[dW>>2]=k[Ud>>2];i[dW+4>>0]=i[Ud+4>>0]|0;Df=dW+8|0;Ef=Ud+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,dW+48|0,Ud+48|0);eW=x;x=0;if(eW&1){eW=Hc()|0;fW=M;OBa(dW);SW=eW;TW=fW;ug=5955;break}fW=Ud+60|0;eW=k[fW+4>>2]|0;cW=dW+60|0;k[cW>>2]=k[fW>>2];k[cW+4>>2]=eW;k[mW>>2]=dW+72;k[Sd>>2]=1;i[Sd+4>>0]=1;k[Sd+8>>2]=21;k[Sd+40>>2]=1;x=0;xa(712,Sd+48|0,Td|0);eW=x;x=0;if(!(eW&1)){k[Sd+60>>2]=0;k[Sd+64>>2]=0;k[Rd>>2]=0;eW=Rd+4|0;k[eW>>2]=0;k[Rd+8>>2]=0;x=0;cW=Ba(563,72)|0;fW=x;x=0;do if(fW&1){gW=Hc()|0;UW=gW;VW=M;ug=5957}else{k[eW>>2]=cW;k[Rd>>2]=cW;k[Rd+8>>2]=cW+72;k[cW>>2]=k[Sd>>2];i[cW+4>>0]=i[Sd+4>>0]|0;Df=cW+8|0;Ef=Sd+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,cW+48|0,Sd+48|0);KW=x;x=0;if(KW&1){KW=Hc()|0;gW=M;OBa(cW);UW=KW;VW=gW;ug=5957;break}gW=Sd+60|0;KW=k[gW+4>>2]|0;hW=cW+60|0;k[hW>>2]=k[gW>>2];k[hW+4>>2]=KW;k[eW>>2]=cW+72;k[Qd>>2]=1;i[Qd+4>>0]=1;k[Qd+8>>2]=21;k[Qd+40>>2]=1;x=0;xa(712,Qd+48|0,Rd|0);KW=x;x=0;if(!(KW&1)){k[Qd+60>>2]=0;k[Qd+64>>2]=0;k[Pd>>2]=0;KW=Pd+4|0;k[KW>>2]=0;k[Pd+8>>2]=0;x=0;hW=Ba(563,72)|0;gW=x;x=0;do if(gW&1){bW=Hc()|0;WW=bW;XW=M;ug=5959}else{k[KW>>2]=hW;k[Pd>>2]=hW;k[Pd+8>>2]=hW+72;k[hW>>2]=k[Qd>>2];i[hW+4>>0]=i[Qd+4>>0]|0;Df=hW+8|0;Ef=Qd+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,hW+48|0,Qd+48|0);bW=x;x=0;if(bW&1){bW=Hc()|0;iW=M;OBa(hW);WW=bW;XW=iW;ug=5959;break}iW=Qd+60|0;bW=k[iW+4>>2]|0;jW=hW+60|0;k[jW>>2]=k[iW>>2];k[jW+4>>2]=bW;k[KW>>2]=hW+72;k[Od>>2]=1;i[Od+4>>0]=1;bW=Od+8|0;k[bW>>2]=21;k[Od+40>>2]=1;jW=Od+48|0;x=0;xa(712,jW|0,Pd|0);iW=x;x=0;do if(iW&1){aW=Hc()|0;YW=aW;ZW=M}else{aW=Od+60|0;k[aW>>2]=0;k[Od+64>>2]=0;k[Wd>>2]=k[h>>2];i[Wd+4>>0]=i[h+4>>0]|0;kW=Wd+8|0;Df=kW;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));lW=Wd+48|0;x=0;xa(712,lW|0,bA|0);BV=x;x=0;do if(BV&1){AV=Hc()|0;_W=AV;$W=M}else{AV=Bf;FV=k[AV>>2]|0;zV=k[AV+4>>2]|0;AV=Wd+60|0;k[AV>>2]=FV;k[AV+4>>2]=zV;AV=Vd+16|0;k[AV>>2]=0;x=0;kV=Ba(563,80)|0;jV=x;x=0;do if(jV&1){hV=Hc()|0;aX=hV;bX=M}else{k[kV>>2]=29696;hV=kV+8|0;k[hV>>2]=k[Wd>>2];i[hV+4>>0]=i[Wd+4>>0]|0;Df=kV+16|0;Ef=kW;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[kV+56>>2]=k[lW>>2];hV=Wd+52|0;k[kV+60>>2]=k[hV>>2];sV=Wd+56|0;k[kV+64>>2]=k[sV>>2];k[sV>>2]=0;k[hV>>2]=0;k[lW>>2]=0;sV=kV+68|0;k[sV>>2]=FV;k[sV+4>>2]=zV;k[AV>>2]=kV;k[Nd>>2]=k[Od>>2];i[Nd+4>>0]=i[Od+4>>0]|0;sV=Nd+8|0;Df=sV;Ef=bW;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));yV=Nd+48|0;x=0;xa(712,yV|0,jW|0);rV=x;x=0;Gb:do if(rV&1){qV=Hc()|0;cX=M;dX=qV;ug=5964}else{qV=Nd+60|0;pV=aW;oV=k[pV+4>>2]|0;wV=qV;k[wV>>2]=k[pV>>2];k[wV+4>>2]=oV;oV=Nd+72|0;wV=k[AV>>2]|0;Hb:do if(!wV)k[Nd+88>>2]=0;else{do if((wV|0)==(Vd|0)){k[Nd+88>>2]=oV;x=0;xa(k[(k[wV>>2]|0)+12>>2]|0,wV|0,oV|0);pV=x;x=0;if(!(pV&1))break Hb}else{x=0;pV=Ba(k[(k[wV>>2]|0)+8>>2]|0,wV|0)|0;nV=x;x=0;if(nV&1)break;k[Nd+88>>2]=pV;break Hb}while(0);pV=Hc()|0;nV=M;mV=Nd+48|0;tV=k[mV>>2]|0;if(!tV){cX=nV;dX=pV;ug=5964;break Gb}LU=Nd+52|0;lV=k[LU>>2]|0;if((lV|0)==(tV|0))eX=tV;else{iV=Nd+56|0;gV=lV;do{lV=gV+-72|0;k[LU>>2]=lV;i[c>>0]=i[d>>0]|0;uF(c,iV,lV);gV=k[LU>>2]|0}while((gV|0)!=(tV|0));eX=k[mV>>2]|0}OBa(eX);cX=nV;dX=pV;ug=5964;break Gb}while(0);wV=k[mf>>2]|0;do if(wV>>>0<(k[wN>>2]|0)>>>0){k[wV>>2]=k[Nd>>2];i[wV+4>>0]=i[Nd+4>>0]|0;Df=wV+8|0;Ef=sV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));pV=wV+48|0;k[pV>>2]=0;nV=wV+52|0;k[nV>>2]=0;k[wV+56>>2]=0;k[pV>>2]=k[yV>>2];pV=Nd+52|0;k[nV>>2]=k[pV>>2];nV=Nd+56|0;k[wV+56>>2]=k[nV>>2];k[nV>>2]=0;k[pV>>2]=0;k[yV>>2]=0;pV=qV;nV=k[pV+4>>2]|0;mV=wV+60|0;k[mV>>2]=k[pV>>2];k[mV+4>>2]=nV;nV=wV+72|0;mV=Nd+88|0;pV=k[mV>>2]|0;do if(!pV)k[wV+88>>2]=0;else{if((pV|0)!=(oV|0)){k[wV+88>>2]=pV;k[mV>>2]=0;break}k[wV+88>>2]=nV;tV=k[mV>>2]|0;x=0;xa(k[(k[tV>>2]|0)+12>>2]|0,tV|0,nV|0);tV=x;x=0;if(!(tV&1))break;tV=Hc(0)|0;Fg(tV)}while(0);k[mf>>2]=(k[mf>>2]|0)+96;fX=mV}else{x=0;xa(713,lf|0,Nd|0);nV=x;x=0;if(!(nV&1)){fX=Nd+88|0;break}nV=Hc()|0;pV=M;tV=k[Nd+88>>2]|0;do if((tV|0)==(oV|0))Sf[k[(k[oV>>2]|0)+16>>2]&2047](oV);else{if(!tV)break;Sf[k[(k[tV>>2]|0)+20>>2]&2047](tV)}while(0);tV=Nd+48|0;mV=k[tV>>2]|0;if(!mV){gX=nV;hX=pV;break Gb}gV=Nd+52|0;LU=k[gV>>2]|0;if((LU|0)==(mV|0))iX=mV;else{iV=Nd+56|0;lV=LU;do{LU=lV+-72|0;k[gV>>2]=LU;i[c>>0]=i[d>>0]|0;uF(c,iV,LU);lV=k[gV>>2]|0}while((lV|0)!=(mV|0));iX=k[tV>>2]|0}OBa(iX);gX=nV;hX=pV;break Gb}while(0);wV=k[fX>>2]|0;do if((wV|0)==(oV|0))Sf[k[(k[oV>>2]|0)+16>>2]&2047](oV);else{if(!wV)break;Sf[k[(k[wV>>2]|0)+20>>2]&2047](wV)}while(0);wV=Nd+48|0;oV=k[wV>>2]|0;if(oV){qV=Nd+52|0;mV=k[qV>>2]|0;if((mV|0)==(oV|0))jX=oV;else{lV=Nd+56|0;gV=mV;do{mV=gV+-72|0;k[qV>>2]=mV;i[c>>0]=i[d>>0]|0;uF(c,lV,mV);gV=k[qV>>2]|0}while((gV|0)!=(oV|0));jX=k[wV>>2]|0}OBa(jX)}oV=k[AV>>2]|0;do if((oV|0)==(Vd|0))Sf[k[(k[Vd>>2]|0)+16>>2]&2047](Vd);else{if(!oV)break;Sf[k[(k[oV>>2]|0)+20>>2]&2047](oV)}while(0);oV=Wd+48|0;wV=k[oV>>2]|0;if(wV){gV=k[hV>>2]|0;if((gV|0)==(wV|0))kX=wV;else{qV=Wd+56|0;lV=gV;do{gV=lV+-72|0;k[hV>>2]=gV;i[c>>0]=i[d>>0]|0;uF(c,qV,gV);lV=k[hV>>2]|0}while((lV|0)!=(wV|0));kX=k[oV>>2]|0}OBa(kX)}wV=Od+48|0;lV=k[wV>>2]|0;if(lV){qV=Od+52|0;gV=k[qV>>2]|0;if((gV|0)==(lV|0))lX=lV;else{mV=Od+56|0;iV=gV;do{gV=iV+-72|0;k[qV>>2]=gV;i[c>>0]=i[d>>0]|0;uF(c,mV,gV);iV=k[qV>>2]|0}while((iV|0)!=(lV|0));lX=k[wV>>2]|0}OBa(lX)}lV=k[Pd>>2]|0;if(lV){iV=k[KW>>2]|0;if((iV|0)==(lV|0))mX=lV;else{qV=iV;while(1){iV=qV+-72|0;k[KW>>2]=iV;mV=qV+-24|0;oV=k[mV>>2]|0;if(!oV)nX=iV;else{gV=qV+-20|0;LU=k[gV>>2]|0;if((LU|0)==(oV|0)){oX=iV;pX=oV}else{iV=qV+-16|0;$V=LU;do{LU=$V+-72|0;k[gV>>2]=LU;i[c>>0]=i[d>>0]|0;uF(c,iV,LU);$V=k[gV>>2]|0}while(($V|0)!=(oV|0));oX=k[KW>>2]|0;pX=k[mV>>2]|0}OBa(pX);nX=oX}if((nX|0)==(lV|0))break;else qV=nX}mX=k[Pd>>2]|0}OBa(mX)}qV=Qd+48|0;lV=k[qV>>2]|0;if(lV){wV=Qd+52|0;oV=k[wV>>2]|0;if((oV|0)==(lV|0))qX=lV;else{$V=Qd+56|0;gV=oV;do{oV=gV+-72|0;k[wV>>2]=oV;i[c>>0]=i[d>>0]|0;uF(c,$V,oV);gV=k[wV>>2]|0}while((gV|0)!=(lV|0));qX=k[qV>>2]|0}OBa(qX)}lV=k[Rd>>2]|0;if(lV){gV=k[eW>>2]|0;if((gV|0)==(lV|0))rX=lV;else{wV=gV;while(1){gV=wV+-72|0;k[eW>>2]=gV;$V=wV+-24|0;oV=k[$V>>2]|0;if(!oV)sX=gV;else{iV=wV+-20|0;pV=k[iV>>2]|0;if((pV|0)==(oV|0)){tX=gV;uX=oV}else{gV=wV+-16|0;nV=pV;do{pV=nV+-72|0;k[iV>>2]=pV;i[c>>0]=i[d>>0]|0;uF(c,gV,pV);nV=k[iV>>2]|0}while((nV|0)!=(oV|0));tX=k[eW>>2]|0;uX=k[$V>>2]|0}OBa(uX);sX=tX}if((sX|0)==(lV|0))break;else wV=sX}rX=k[Rd>>2]|0}OBa(rX)}wV=Sd+48|0;lV=k[wV>>2]|0;if(lV){qV=Sd+52|0;oV=k[qV>>2]|0;if((oV|0)==(lV|0))vX=lV;else{nV=Sd+56|0;iV=oV;do{oV=iV+-72|0;k[qV>>2]=oV;i[c>>0]=i[d>>0]|0;uF(c,nV,oV);iV=k[qV>>2]|0}while((iV|0)!=(lV|0));vX=k[wV>>2]|0}OBa(vX)}lV=k[Td>>2]|0;if(lV){iV=k[mW>>2]|0;if((iV|0)==(lV|0))wX=lV;else{qV=iV;while(1){iV=qV+-72|0;k[mW>>2]=iV;nV=qV+-24|0;oV=k[nV>>2]|0;if(!oV)xX=iV;else{gV=qV+-20|0;mV=k[gV>>2]|0;if((mV|0)==(oV|0)){yX=iV;zX=oV}else{iV=qV+-16|0;pV=mV;do{mV=pV+-72|0;k[gV>>2]=mV;i[c>>0]=i[d>>0]|0;uF(c,iV,mV);pV=k[gV>>2]|0}while((pV|0)!=(oV|0));yX=k[mW>>2]|0;zX=k[nV>>2]|0}OBa(zX);xX=yX}if((xX|0)==(lV|0))break;else qV=xX}wX=k[Td>>2]|0}OBa(wX)}qV=Ud+48|0;lV=k[qV>>2]|0;if(lV){wV=Ud+52|0;oV=k[wV>>2]|0;if((oV|0)==(lV|0))AX=lV;else{pV=Ud+56|0;gV=oV;do{oV=gV+-72|0;k[wV>>2]=oV;i[c>>0]=i[d>>0]|0;uF(c,pV,oV);gV=k[wV>>2]|0}while((gV|0)!=(lV|0));AX=k[qV>>2]|0}OBa(AX)}i[Yd>>0]=1;lV=Yd+8|0;k[Yd+24>>2]=lV;k[lV>>2]=29740;i[Yd+32>>0]=2;gV=Yd+40|0;k[Yd+56>>2]=gV;k[gV>>2]=29784;i[Yd+64>>0]=22;gV=Yd+72|0;k[Yd+88>>2]=gV;k[gV>>2]=29828;i[Yd+96>>0]=23;gV=Yd+104|0;k[Yd+120>>2]=gV;k[gV>>2]=29872;i[Yd+128>>0]=24;gV=Yd+136|0;k[Yd+152>>2]=gV;k[gV>>2]=29916;k[Xd>>2]=0;gV=Xd+4|0;k[gV>>2]=0;k[Xd+8>>2]=0;x=0;wV=Ba(563,160)|0;pV=x;x=0;if(pV&1){pV=Hc()|0;BX=pV;CX=M}else{k[gV>>2]=wV;k[Xd>>2]=wV;k[Xd+8>>2]=wV+160;i[wV>>0]=1;pV=wV+8|0;k[wV+24>>2]=pV;x=0;xa(k[(k[lV>>2]|0)+12>>2]|0,lV|0,pV|0);pV=x;x=0;if(pV&1){pV=Hc()|0;DX=pV;EX=M}else{pV=wV+32|0;k[gV>>2]=pV;i[pV>>0]=i[Yd+32>>0]|0;lV=wV+40|0;oV=Yd+56|0;iV=k[oV>>2]|0;do if(!iV){k[wV+56>>2]=0;ug=8536}else{if((iV|0)==(Yd+40|0)){k[wV+56>>2]=lV;$V=k[oV>>2]|0;x=0;xa(k[(k[$V>>2]|0)+12>>2]|0,$V|0,lV|0);$V=x;x=0;if($V&1){FX=pV;break}else{ug=8536;break}}x=0;$V=Ba(k[(k[iV>>2]|0)+8>>2]|0,iV|0)|0;mV=x;x=0;if(mV&1){FX=pV;break}k[wV+56>>2]=$V;ug=8536}while(0);Ib:do if((ug|0)==8536){pV=wV+64|0;k[gV>>2]=pV;i[pV>>0]=i[Yd+64>>0]|0;iV=wV+72|0;lV=Yd+88|0;oV=k[lV>>2]|0;do if(!oV)k[wV+88>>2]=0;else{if((oV|0)==(Yd+72|0)){k[wV+88>>2]=iV;qV=k[lV>>2]|0;x=0;xa(k[(k[qV>>2]|0)+12>>2]|0,qV|0,iV|0);qV=x;x=0;if(qV&1){FX=pV;break Ib}else break}x=0;qV=Ba(k[(k[oV>>2]|0)+8>>2]|0,oV|0)|0;$V=x;x=0;if($V&1){FX=pV;break Ib}k[wV+88>>2]=qV}while(0);pV=wV+96|0;k[gV>>2]=pV;i[pV>>0]=i[Yd+96>>0]|0;oV=wV+104|0;iV=Yd+120|0;lV=k[iV>>2]|0;do if(!lV)k[wV+120>>2]=0;else{if((lV|0)==(Yd+104|0)){k[wV+120>>2]=oV;nV=k[iV>>2]|0;x=0;xa(k[(k[nV>>2]|0)+12>>2]|0,nV|0,oV|0);nV=x;x=0;if(nV&1){FX=pV;break Ib}else break}x=0;nV=Ba(k[(k[lV>>2]|0)+8>>2]|0,lV|0)|0;qV=x;x=0;if(qV&1){FX=pV;break Ib}k[wV+120>>2]=nV}while(0);pV=wV+128|0;k[gV>>2]=pV;i[pV>>0]=i[Yd+128>>0]|0;lV=wV+136|0;oV=Yd+152|0;iV=k[oV>>2]|0;do if(!iV)k[wV+152>>2]=0;else{if((iV|0)==(Yd+136|0)){k[wV+152>>2]=lV;nV=k[oV>>2]|0;x=0;xa(k[(k[nV>>2]|0)+12>>2]|0,nV|0,lV|0);nV=x;x=0;if(nV&1){FX=pV;break Ib}else break}x=0;nV=Ba(k[(k[iV>>2]|0)+8>>2]|0,iV|0)|0;qV=x;x=0;if(qV&1){FX=pV;break Ib}k[wV+152>>2]=nV}while(0);pV=wV+160|0;k[gV>>2]=pV;iV=Yd+136|0;lV=k[Yd+152>>2]|0;do if((lV|0)==(iV|0))Sf[k[(k[iV>>2]|0)+16>>2]&2047](iV);else{if(!lV)break;Sf[k[(k[lV>>2]|0)+20>>2]&2047](lV)}while(0);lV=Yd+104|0;iV=k[Yd+120>>2]|0;do if((iV|0)==(lV|0))Sf[k[(k[lV>>2]|0)+16>>2]&2047](lV);else{if(!iV)break;Sf[k[(k[iV>>2]|0)+20>>2]&2047](iV)}while(0);iV=Yd+72|0;lV=k[Yd+88>>2]|0;do if((lV|0)==(iV|0))Sf[k[(k[iV>>2]|0)+16>>2]&2047](iV);else{if(!lV)break;Sf[k[(k[lV>>2]|0)+20>>2]&2047](lV)}while(0);lV=Yd+40|0;iV=k[Yd+56>>2]|0;do if((iV|0)==(lV|0))Sf[k[(k[lV>>2]|0)+16>>2]&2047](lV);else{if(!iV)break;Sf[k[(k[iV>>2]|0)+20>>2]&2047](iV)}while(0);iV=Yd+8|0;lV=k[Yd+24>>2]|0;do if((lV|0)==(iV|0))Sf[k[(k[iV>>2]|0)+16>>2]&2047](iV);else{if(!lV)break;Sf[k[(k[lV>>2]|0)+20>>2]&2047](lV)}while(0);lV=Zd+16|0;iV=ee+8|0;oV=ee+48|0;nV=ee+60|0;qV=ee+72|0;$V=ee+80|0;mV=ee+120|0;tV=ee+132|0;LU=de+4|0;_V=de+8|0;ZV=de+8|0;fV=ce+4|0;eV=ce+8|0;cV=ce+40|0;bV=ce+48|0;aV=ce+60|0;$U=ce+64|0;_U=ce+72|0;ZU=ce+80|0;YV=ce+120|0;XV=ce+132|0;WV=be+4|0;YU=be+8|0;XU=be+8|0;VU=ae+4|0;UU=ae+8|0;TU=ae+40|0;SU=ae+48|0;RU=ae+60|0;QU=ae+64|0;VV=ge+8|0;UV=ge+16|0;TV=ge+56|0;SV=ge+68|0;RV=ge+80|0;QV=ge+96|0;PV=ge+104|0;PU=ge+112|0;OU=ge+152|0;MU=ge+164|0;rN=ge+176|0;KU=ge+184|0;CN=ge+224|0;lN=ge+236|0;yN=fe+16|0;uN=ge+60|0;zN=ge+64|0;BN=ge+156|0;pW=ge+160|0;oW=ge+228|0;BW=ge+232|0;uW=$d+8|0;qW=$d+48|0;EW=$d+60|0;qN=$d+72|0;GX=$d+88|0;HX=$d+96|0;IX=le+8|0;JX=le+48|0;KX=le+60|0;LX=le+72|0;MX=le+80|0;NX=le+120|0;OX=le+132|0;PX=ke+4|0;QX=ke+8|0;RX=ke+8|0;SX=je+4|0;TX=je+8|0;UX=je+40|0;VX=je+48|0;WX=je+60|0;XX=je+64|0;YX=je+72|0;ZX=je+80|0;_X=je+120|0;$X=j+48|0;aY=je+132|0;bY=ie+4|0;cY=ie+8|0;dY=ie+8|0;eY=he+4|0;fY=he+8|0;gY=he+40|0;hY=he+48|0;iY=he+60|0;jY=he+64|0;kY=ne+8|0;lY=ne+16|0;mY=ne+56|0;nY=ne+68|0;oY=ne+80|0;pY=ne+88|0;qY=ne+128|0;rY=ne+140|0;sY=ne+152|0;tY=ne+160|0;uY=ne+200|0;vY=ne+212|0;wY=me+16|0;xY=ne+60|0;yY=ne+64|0;zY=ne+132|0;AY=ne+136|0;BY=ne+204|0;CY=ne+208|0;DY=$d+104|0;EY=$d+144|0;FY=$d+156|0;GY=$d+168|0;HY=$d+184|0;IY=$d+192|0;JY=se+8|0;KY=se+48|0;LY=se+60|0;MY=se+72|0;NY=se+80|0;OY=se+120|0;PY=se+132|0;QY=re+4|0;RY=re+8|0;SY=re+8|0;TY=qe+4|0;UY=qe+8|0;VY=qe+40|0;WY=qe+48|0;XY=qe+60|0;YY=qe+64|0;ZY=qe+72|0;_Y=qe+80|0;$Y=qe+120|0;aZ=qe+132|0;bZ=pe+4|0;cZ=pe+8|0;dZ=pe+8|0;eZ=oe+4|0;fZ=oe+8|0;gZ=oe+40|0;hZ=oe+48|0;iZ=oe+60|0;jZ=oe+64|0;kZ=ue+8|0;lZ=ue+16|0;mZ=ue+56|0;nZ=ue+68|0;oZ=ue+80|0;pZ=ue+96|0;qZ=ue+104|0;rZ=ue+112|0;sZ=ue+152|0;tZ=ue+164|0;uZ=ue+176|0;vZ=ue+184|0;wZ=ue+224|0;xZ=ue+236|0;yZ=te+16|0;zZ=ue+60|0;AZ=ue+64|0;BZ=ue+156|0;CZ=ue+160|0;DZ=ue+228|0;EZ=ue+232|0;FZ=$d+200|0;GZ=$d+240|0;HZ=$d+252|0;IZ=$d+264|0;JZ=$d+280|0;KZ=$d+288|0;LZ=ze+8|0;MZ=ze+48|0;NZ=ze+60|0;OZ=ze+72|0;PZ=ze+80|0;QZ=ze+120|0;RZ=ze+132|0;SZ=ye+4|0;TZ=ye+8|0;UZ=ye+8|0;VZ=xe+4|0;WZ=xe+8|0;XZ=xe+40|0;YZ=xe+48|0;ZZ=xe+60|0;_Z=xe+64|0;$Z=xe+72|0;a_=xe+80|0;b_=xe+120|0;c_=xe+132|0;d_=we+4|0;e_=we+8|0;f_=we+8|0;g_=ve+4|0;h_=ve+8|0;i_=ve+40|0;j_=ve+48|0;k_=ve+60|0;l_=ve+64|0;m_=Be+8|0;n_=Be+16|0;o_=Be+56|0;p_=Be+68|0;q_=Be+80|0;r_=Be+88|0;s_=Be+128|0;t_=Be+140|0;u_=Be+152|0;v_=Be+160|0;w_=Be+200|0;x_=Be+212|0;y_=Ae+16|0;z_=Be+60|0;A_=Be+64|0;B_=Be+132|0;C_=Be+136|0;D_=Be+204|0;E_=Be+208|0;F_=$d+296|0;G_=$d+336|0;H_=$d+348|0;I_=$d+360|0;J_=$d+376|0;K_=_d+4|0;L_=_d+8|0;M_=_d+8|0;N_=$d+384|0;O_=Be+200|0;P_=Be+128|0;Q_=Be+56|0;R_=ve+48|0;S_=ue+224|0;T_=ue+152|0;U_=ue+56|0;V_=oe+48|0;W_=ne+200|0;X_=ne+128|0;Y_=ne+56|0;Z_=he+48|0;__=ge+224|0;$_=ge+152|0;a$=ge+56|0;b$=ae+48|0;c$=ae+52|0;d$=ae+56|0;e$=ge+64|0;f$=ge+160|0;g$=ge+232|0;h$=he+52|0;i$=he+56|0;j$=ne+64|0;k$=ne+136|0;l$=ne+208|0;m$=oe+52|0;n$=oe+56|0;o$=ue+64|0;p$=ue+160|0;q$=ue+232|0;r$=ve+52|0;s$=ve+56|0;t$=Be+64|0;u$=Be+136|0;v$=Be+208|0;w$=ee+8|0;x$=ee+48|0;y$=ee+60|0;z$=ee+72|0;A$=ee+80|0;B$=ee+120|0;C$=ee+132|0;D$=ce+8|0;E$=ce+48|0;F$=ce+60|0;G$=ce+72|0;H$=ce+80|0;I$=ce+120|0;J$=ce+132|0;K$=le+8|0;L$=le+48|0;M$=le+60|0;N$=le+72|0;O$=le+80|0;P$=le+120|0;Q$=le+132|0;R$=je+8|0;S$=je+48|0;T$=je+60|0;U$=je+72|0;V$=je+80|0;W$=je+120|0;X$=je+132|0;Y$=se+8|0;Z$=se+48|0;_$=se+60|0;$$=se+72|0;a0=se+80|0;b0=se+120|0;c0=se+132|0;d0=qe+8|0;e0=qe+48|0;f0=qe+60|0;g0=qe+72|0;h0=qe+80|0;i0=qe+120|0;j0=qe+132|0;k0=ze+8|0;l0=ze+48|0;m0=ze+60|0;n0=ze+72|0;o0=ze+80|0;p0=ze+120|0;q0=ze+132|0;r0=xe+8|0;s0=xe+48|0;t0=xe+60|0;u0=xe+72|0;v0=xe+80|0;w0=xe+120|0;x0=xe+132|0;y0=$d+360|0;z0=$d+376|0;A0=$d+336|0;B0=$d+264|0;C0=$d+280|0;D0=$d+240|0;E0=$d+168|0;F0=$d+184|0;G0=$d+144|0;H0=$d+72|0;I0=$d+88|0;J0=$d+48|0;K0=xe+120|0;L0=xe+48|0;M0=ze+120|0;N0=ze+48|0;O0=qe+120|0;P0=qe+48|0;Q0=se+120|0;R0=se+48|0;S0=je+120|0;T0=je+48|0;U0=le+120|0;V0=le+48|0;W0=ce+120|0;X0=ce+48|0;Y0=ee+120|0;Z0=ee+48|0;_0=ee+52|0;$0=ee+56|0;a1=ee+124|0;b1=ee+128|0;c1=ce+52|0;d1=ce+56|0;e1=ce+124|0;f1=ce+128|0;g1=le+52|0;h1=le+56|0;j1=le+124|0;k1=le+128|0;l1=je+52|0;m1=je+56|0;n1=je+124|0;o1=je+128|0;p1=se+52|0;q1=se+56|0;r1=se+124|0;s1=se+128|0;t1=qe+52|0;u1=qe+56|0;v1=qe+124|0;w1=qe+128|0;x1=ze+52|0;y1=ze+56|0;z1=ze+124|0;A1=ze+128|0;B1=xe+52|0;C1=xe+56|0;D1=xe+124|0;E1=xe+128|0;F1=$d+52|0;G1=$d+56|0;H1=$d+148|0;I1=$d+152|0;J1=$d+244|0;K1=$d+248|0;L1=$d+340|0;M1=$d+344|0;N1=wV;Jb:while(1){O1=i[N1>>0]|0;P1=N1+24|0;Q1=k[P1>>2]|0;do if(!Q1)k[lV>>2]=0;else{if((Q1|0)==(N1+8|0)){k[lV>>2]=Zd;R1=k[P1>>2]|0;x=0;xa(k[(k[R1>>2]|0)+12>>2]|0,R1|0,Zd|0);R1=x;x=0;if(R1&1){ug=6570;break Jb}else break}x=0;R1=Ba(k[(k[Q1>>2]|0)+8>>2]|0,Q1|0)|0;S1=x;x=0;if(S1&1){ug=6570;break Jb}k[lV>>2]=R1}while(0);k[ee>>2]=k[h>>2];i[ee+4>>0]=i[h+4>>0]|0;Df=iV;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,oV|0,bA|0);Q1=x;x=0;if(Q1&1){T1=ee;ug=6571;break}Q1=Bf;P1=k[Q1+4>>2]|0;R1=nV;k[R1>>2]=k[Q1>>2];k[R1+4>>2]=P1;k[qV>>2]=k[e>>2];i[qV+4>>0]=i[e+4>>0]|0;Df=$V;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,mV|0,Gf|0);P1=x;x=0;if(P1&1){T1=qV;ug=6571;break}P1=yf;R1=k[P1+4>>2]|0;Q1=tV;k[Q1>>2]=k[P1>>2];k[Q1+4>>2]=R1;k[de>>2]=0;k[LU>>2]=0;k[_V>>2]=0;x=0;R1=Ba(563,144)|0;Q1=x;x=0;if(Q1&1){ug=6061;break}k[LU>>2]=R1;k[de>>2]=R1;k[ZV>>2]=R1+144;k[R1>>2]=k[ee>>2];i[R1+4>>0]=i[ee+4>>0]|0;Df=R1+8|0;Ef=w$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,R1+48|0,x$|0);Q1=x;x=0;if(Q1&1){ug=6062;break}Q1=y$;P1=k[Q1+4>>2]|0;S1=R1+60|0;k[S1>>2]=k[Q1>>2];k[S1+4>>2]=P1;P1=R1+72|0;k[LU>>2]=P1;k[P1>>2]=k[z$>>2];i[P1+4>>0]=i[z$+4>>0]|0;Df=R1+80|0;Ef=A$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,R1+120|0,B$|0);P1=x;x=0;if(P1&1){ug=6062;break}P1=C$;S1=k[P1+4>>2]|0;Q1=R1+132|0;k[Q1>>2]=k[P1>>2];k[Q1+4>>2]=S1;k[LU>>2]=(k[LU>>2]|0)+72;k[ce>>2]=1;i[fV>>0]=1;S1=O1&255;k[eV>>2]=S1;k[cV>>2]=1;x=0;xa(712,bV|0,de|0);Q1=x;x=0;if(Q1&1){U1=ce;ug=6581;break}k[aV>>2]=0;k[$U>>2]=0;k[_U>>2]=k[f>>2];i[_U+4>>0]=i[f+4>>0]|0;Df=ZU;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,YV|0,Kf|0);R1=x;x=0;if(R1&1){U1=_U;ug=6581;break}R1=zf;Q1=k[R1+4>>2]|0;P1=XV;k[P1>>2]=k[R1>>2];k[P1+4>>2]=Q1;k[be>>2]=0;k[WV>>2]=0;k[YU>>2]=0;x=0;Q1=Ba(563,144)|0;P1=x;x=0;if(P1&1){ug=6078;break}k[WV>>2]=Q1;k[be>>2]=Q1;k[XU>>2]=Q1+144;k[Q1>>2]=k[ce>>2];i[Q1+4>>0]=i[ce+4>>0]|0;Df=Q1+8|0;Ef=D$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Q1+48|0,E$|0);P1=x;x=0;if(P1&1){ug=6079;break}P1=F$;R1=k[P1+4>>2]|0;V1=Q1+60|0;k[V1>>2]=k[P1>>2];k[V1+4>>2]=R1;R1=Q1+72|0;k[WV>>2]=R1;k[R1>>2]=k[G$>>2];i[R1+4>>0]=i[G$+4>>0]|0;Df=Q1+80|0;Ef=H$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Q1+120|0,I$|0);R1=x;x=0;if(R1&1){ug=6079;break}R1=J$;V1=k[R1+4>>2]|0;P1=Q1+132|0;k[P1>>2]=k[R1>>2];k[P1+4>>2]=V1;k[WV>>2]=(k[WV>>2]|0)+72;k[ae>>2]=1;i[VU>>0]=1;k[UU>>2]=S1;k[TU>>2]=1;x=0;xa(712,SU|0,be|0);V1=x;x=0;if(V1&1){ug=6583;break}k[RU>>2]=0;k[QU>>2]=0;i[ge>>0]=O1;k[VV>>2]=k[h>>2];i[VV+4>>0]=i[h+4>>0]|0;Df=UV;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,TV|0,bA|0);Q1=x;x=0;if(Q1&1){ug=6584;break}Q1=Bf;V1=k[Q1+4>>2]|0;P1=SV;k[P1>>2]=k[Q1>>2];k[P1+4>>2]=V1;V1=k[lV>>2]|0;do if(!V1)k[QV>>2]=0;else{if((V1|0)==(Zd|0)){k[QV>>2]=RV;x=0;xa(k[(k[Zd>>2]|0)+12>>2]|0,Zd|0,RV|0);P1=x;x=0;if(P1&1){ug=6585;break Jb}else break}x=0;P1=Ba(k[(k[V1>>2]|0)+8>>2]|0,V1|0)|0;Q1=x;x=0;if(Q1&1){ug=6585;break Jb}k[QV>>2]=P1}while(0);k[PV>>2]=k[e>>2];i[PV+4>>0]=i[e+4>>0]|0;Df=PU;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,OU|0,Gf|0);V1=x;x=0;if(V1&1){ug=6586;break}V1=yf;P1=k[V1+4>>2]|0;Q1=MU;k[Q1>>2]=k[V1>>2];k[Q1+4>>2]=P1;k[rN>>2]=k[f>>2];i[rN+4>>0]=i[f+4>>0]|0;Df=KU;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,CN|0,Kf|0);P1=x;x=0;if(P1&1){ug=6587;break}P1=zf;Q1=k[P1>>2]|0;V1=k[P1+4>>2]|0;P1=lN;k[P1>>2]=Q1;k[P1+4>>2]=V1;k[yN>>2]=0;x=0;P1=Ba(563,256)|0;R1=x;x=0;if(R1&1){ug=6603;break}k[P1>>2]=29960;i[P1+8>>0]=i[ge>>0]|0;R1=P1+16|0;k[R1>>2]=k[VV>>2];i[R1+4>>0]=i[VV+4>>0]|0;Df=P1+24|0;Ef=UV;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[P1+64>>2]=k[TV>>2];k[P1+68>>2]=k[uN>>2];k[P1+72>>2]=k[zN>>2];k[zN>>2]=0;k[uN>>2]=0;k[TV>>2]=0;R1=SV;W1=k[R1+4>>2]|0;X1=P1+76|0;k[X1>>2]=k[R1>>2];k[X1+4>>2]=W1;W1=P1+88|0;X1=k[QV>>2]|0;do if(!X1){k[P1+104>>2]=0;Y1=Q1;Z1=V1}else{if((X1|0)!=(RV|0)){k[P1+104>>2]=X1;k[QV>>2]=0;Y1=Q1;Z1=V1;break}k[P1+104>>2]=W1;x=0;xa(k[(k[RV>>2]|0)+12>>2]|0,RV|0,W1|0);R1=x;x=0;if(R1&1){ug=6107;break Jb}R1=lN;Y1=k[R1>>2]|0;Z1=k[R1+4>>2]|0}while(0);W1=P1+112|0;k[W1>>2]=k[PV>>2];i[W1+4>>0]=i[PV+4>>0]|0;Df=P1+120|0;Ef=PU;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[P1+160>>2]=k[OU>>2];k[P1+164>>2]=k[BN>>2];k[P1+168>>2]=k[pW>>2];k[pW>>2]=0;k[BN>>2]=0;k[OU>>2]=0;W1=MU;V1=k[W1+4>>2]|0;Q1=P1+172|0;k[Q1>>2]=k[W1>>2];k[Q1+4>>2]=V1;V1=P1+184|0;k[V1>>2]=k[rN>>2];i[V1+4>>0]=i[rN+4>>0]|0;Df=P1+192|0;Ef=KU;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[P1+232>>2]=k[CN>>2];k[P1+236>>2]=k[oW>>2];k[P1+240>>2]=k[BW>>2];k[BW>>2]=0;k[oW>>2]=0;k[CN>>2]=0;V1=P1+244|0;k[V1>>2]=Y1;k[V1+4>>2]=Z1;k[yN>>2]=P1;k[$d>>2]=k[ae>>2];i[$d+4>>0]=i[ae+4>>0]|0;Df=uW;Ef=UU;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,qW|0,SU|0);P1=x;x=0;if(P1&1){ug=6604;break}P1=RU;V1=k[P1+4>>2]|0;Q1=EW;k[Q1>>2]=k[P1>>2];k[Q1+4>>2]=V1;V1=k[yN>>2]|0;do if(!V1)k[GX>>2]=0;else{if((V1|0)==(fe|0)){k[GX>>2]=qN;x=0;xa(k[(k[fe>>2]|0)+12>>2]|0,fe|0,qN|0);Q1=x;x=0;if(Q1&1){ug=6115;break Jb}else break}x=0;Q1=Ba(k[(k[V1>>2]|0)+8>>2]|0,V1|0)|0;P1=x;x=0;if(P1&1){ug=6115;break Jb}k[GX>>2]=Q1}while(0);k[le>>2]=k[h>>2];i[le+4>>0]=i[h+4>>0]|0;Df=IX;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,JX|0,bA|0);V1=x;x=0;if(V1&1){_1=le;ug=6606;break}V1=Bf;Q1=k[V1+4>>2]|0;P1=KX;k[P1>>2]=k[V1>>2];k[P1+4>>2]=Q1;k[LX>>2]=k[e>>2];i[LX+4>>0]=i[e+4>>0]|0;Df=MX;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,NX|0,Gf|0);Q1=x;x=0;if(Q1&1){_1=LX;ug=6606;break}Q1=yf;P1=k[Q1+4>>2]|0;V1=OX;k[V1>>2]=k[Q1>>2];k[V1+4>>2]=P1;k[ke>>2]=0;k[PX>>2]=0;k[QX>>2]=0;x=0;P1=Ba(563,144)|0;V1=x;x=0;if(V1&1){ug=6126;break}k[PX>>2]=P1;k[ke>>2]=P1;k[RX>>2]=P1+144;k[P1>>2]=k[le>>2];i[P1+4>>0]=i[le+4>>0]|0;Df=P1+8|0;Ef=K$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,P1+48|0,L$|0);V1=x;x=0;if(V1&1){ug=6127;break}V1=M$;Q1=k[V1+4>>2]|0;W1=P1+60|0;k[W1>>2]=k[V1>>2];k[W1+4>>2]=Q1;Q1=P1+72|0;k[PX>>2]=Q1;k[Q1>>2]=k[N$>>2];i[Q1+4>>0]=i[N$+4>>0]|0;Df=P1+80|0;Ef=O$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,P1+120|0,P$|0);Q1=x;x=0;if(Q1&1){ug=6127;break}Q1=Q$;W1=k[Q1+4>>2]|0;V1=P1+132|0;k[V1>>2]=k[Q1>>2];k[V1+4>>2]=W1;k[PX>>2]=(k[PX>>2]|0)+72;k[je>>2]=1;i[SX>>0]=1;k[TX>>2]=S1;k[UX>>2]=1;x=0;xa(712,VX|0,ke|0);W1=x;x=0;if(W1&1){$1=je;ug=6616;break}k[WX>>2]=0;k[XX>>2]=0;k[YX>>2]=k[j>>2];i[YX+4>>0]=i[j+4>>0]|0;Df=ZX;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,_X|0,$X|0);P1=x;x=0;if(P1&1){$1=YX;ug=6616;break}P1=Cf;W1=k[P1+4>>2]|0;V1=aY;k[V1>>2]=k[P1>>2];k[V1+4>>2]=W1;k[ie>>2]=0;k[bY>>2]=0;k[cY>>2]=0;x=0;W1=Ba(563,144)|0;V1=x;x=0;if(V1&1){ug=6143;break}k[bY>>2]=W1;k[ie>>2]=W1;k[dY>>2]=W1+144;k[W1>>2]=k[je>>2];i[W1+4>>0]=i[je+4>>0]|0;Df=W1+8|0;Ef=R$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,W1+48|0,S$|0);V1=x;x=0;if(V1&1){ug=6144;break}V1=T$;P1=k[V1+4>>2]|0;Q1=W1+60|0;k[Q1>>2]=k[V1>>2];k[Q1+4>>2]=P1;P1=W1+72|0;k[bY>>2]=P1;k[P1>>2]=k[U$>>2];i[P1+4>>0]=i[U$+4>>0]|0;Df=W1+80|0;Ef=V$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,W1+120|0,W$|0);P1=x;x=0;if(P1&1){ug=6144;break}P1=X$;Q1=k[P1+4>>2]|0;V1=W1+132|0;k[V1>>2]=k[P1>>2];k[V1+4>>2]=Q1;k[bY>>2]=(k[bY>>2]|0)+72;k[he>>2]=1;i[eY>>0]=1;k[fY>>2]=S1;k[gY>>2]=1;x=0;xa(712,hY|0,ie|0);Q1=x;x=0;if(Q1&1){ug=6618;break}k[iY>>2]=0;k[jY>>2]=0;i[ne>>0]=O1;k[kY>>2]=k[h>>2];i[kY+4>>0]=i[h+4>>0]|0;Df=lY;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,mY|0,bA|0);W1=x;x=0;if(W1&1){ug=6619;break}W1=Bf;Q1=k[W1+4>>2]|0;V1=nY;k[V1>>2]=k[W1>>2];k[V1+4>>2]=Q1;k[oY>>2]=k[j>>2];i[oY+4>>0]=i[j+4>>0]|0;Df=pY;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,qY|0,$X|0);Q1=x;x=0;if(Q1&1){ug=6620;break}Q1=Cf;V1=k[Q1+4>>2]|0;W1=rY;k[W1>>2]=k[Q1>>2];k[W1+4>>2]=V1;k[sY>>2]=k[e>>2];i[sY+4>>0]=i[e+4>>0]|0;Df=tY;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,uY|0,Gf|0);V1=x;x=0;if(V1&1){ug=6621;break}V1=yf;W1=k[V1>>2]|0;Q1=k[V1+4>>2]|0;V1=vY;k[V1>>2]=W1;k[V1+4>>2]=Q1;k[wY>>2]=0;x=0;V1=Ba(563,232)|0;P1=x;x=0;if(P1&1){ug=6633;break}k[V1>>2]=30004;i[V1+8>>0]=i[ne>>0]|0;P1=V1+16|0;k[P1>>2]=k[kY>>2];i[P1+4>>0]=i[kY+4>>0]|0;Df=V1+24|0;Ef=lY;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[V1+64>>2]=k[mY>>2];k[V1+68>>2]=k[xY>>2];k[V1+72>>2]=k[yY>>2];k[yY>>2]=0;k[xY>>2]=0;k[mY>>2]=0;P1=nY;X1=k[P1+4>>2]|0;R1=V1+76|0;k[R1>>2]=k[P1>>2];k[R1+4>>2]=X1;X1=V1+88|0;k[X1>>2]=k[oY>>2];i[X1+4>>0]=i[oY+4>>0]|0;Df=V1+96|0;Ef=pY;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[V1+136>>2]=k[qY>>2];k[V1+140>>2]=k[zY>>2];k[V1+144>>2]=k[AY>>2];k[AY>>2]=0;k[zY>>2]=0;k[qY>>2]=0;X1=rY;R1=k[X1+4>>2]|0;P1=V1+148|0;k[P1>>2]=k[X1>>2];k[P1+4>>2]=R1;R1=V1+160|0;k[R1>>2]=k[sY>>2];i[R1+4>>0]=i[sY+4>>0]|0;Df=V1+168|0;Ef=tY;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[V1+208>>2]=k[uY>>2];k[V1+212>>2]=k[BY>>2];k[V1+216>>2]=k[CY>>2];k[CY>>2]=0;k[BY>>2]=0;k[uY>>2]=0;R1=V1+220|0;k[R1>>2]=W1;k[R1+4>>2]=Q1;k[wY>>2]=V1;k[HX>>2]=k[he>>2];i[HX+4>>0]=i[he+4>>0]|0;Df=DY;Ef=fY;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,EY|0,hY|0);V1=x;x=0;if(V1&1){ug=6634;break}V1=iY;Q1=k[V1+4>>2]|0;W1=FY;k[W1>>2]=k[V1>>2];k[W1+4>>2]=Q1;Q1=k[wY>>2]|0;do if(!Q1)k[HY>>2]=0;else{if((Q1|0)==(me|0)){k[HY>>2]=GY;x=0;xa(k[(k[me>>2]|0)+12>>2]|0,me|0,GY|0);W1=x;x=0;if(W1&1){ug=6167;break Jb}else break}x=0;W1=Ba(k[(k[Q1>>2]|0)+8>>2]|0,Q1|0)|0;V1=x;x=0;if(V1&1){ug=6167;break Jb}k[HY>>2]=W1}while(0);k[se>>2]=k[e>>2];i[se+4>>0]=i[e+4>>0]|0;Df=JY;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,KY|0,Gf|0);Q1=x;x=0;if(Q1&1){a2=se;ug=6636;break}Q1=yf;W1=k[Q1+4>>2]|0;V1=LY;k[V1>>2]=k[Q1>>2];k[V1+4>>2]=W1;k[MY>>2]=k[h>>2];i[MY+4>>0]=i[h+4>>0]|0;Df=NY;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,OY|0,bA|0);W1=x;x=0;if(W1&1){a2=MY;ug=6636;break}W1=Bf;V1=k[W1+4>>2]|0;Q1=PY;k[Q1>>2]=k[W1>>2];k[Q1+4>>2]=V1;k[re>>2]=0;k[QY>>2]=0;k[RY>>2]=0;x=0;V1=Ba(563,144)|0;Q1=x;x=0;if(Q1&1){ug=6178;break}k[QY>>2]=V1;k[re>>2]=V1;k[SY>>2]=V1+144;k[V1>>2]=k[se>>2];i[V1+4>>0]=i[se+4>>0]|0;Df=V1+8|0;Ef=Y$;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,V1+48|0,Z$|0);Q1=x;x=0;if(Q1&1){ug=6179;break}Q1=_$;W1=k[Q1+4>>2]|0;R1=V1+60|0;k[R1>>2]=k[Q1>>2];k[R1+4>>2]=W1;W1=V1+72|0;k[QY>>2]=W1;k[W1>>2]=k[$$>>2];i[W1+4>>0]=i[$$+4>>0]|0;Df=V1+80|0;Ef=a0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,V1+120|0,b0|0);W1=x;x=0;if(W1&1){ug=6179;break}W1=c0;R1=k[W1+4>>2]|0;Q1=V1+132|0;k[Q1>>2]=k[W1>>2];k[Q1+4>>2]=R1;k[QY>>2]=(k[QY>>2]|0)+72;k[qe>>2]=1;i[TY>>0]=1;k[UY>>2]=S1;k[VY>>2]=1;x=0;xa(712,WY|0,re|0);R1=x;x=0;if(R1&1){b2=qe;ug=6646;break}k[XY>>2]=0;k[YY>>2]=0;k[ZY>>2]=k[f>>2];i[ZY+4>>0]=i[f+4>>0]|0;Df=_Y;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$Y|0,Kf|0);V1=x;x=0;if(V1&1){b2=ZY;ug=6646;break}V1=zf;R1=k[V1+4>>2]|0;Q1=aZ;k[Q1>>2]=k[V1>>2];k[Q1+4>>2]=R1;k[pe>>2]=0;k[bZ>>2]=0;k[cZ>>2]=0;x=0;R1=Ba(563,144)|0;Q1=x;x=0;if(Q1&1){ug=6195;break}k[bZ>>2]=R1;k[pe>>2]=R1;k[dZ>>2]=R1+144;k[R1>>2]=k[qe>>2];i[R1+4>>0]=i[qe+4>>0]|0;Df=R1+8|0;Ef=d0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,R1+48|0,e0|0);Q1=x;x=0;if(Q1&1){ug=6196;break}Q1=f0;V1=k[Q1+4>>2]|0;W1=R1+60|0;k[W1>>2]=k[Q1>>2];k[W1+4>>2]=V1;V1=R1+72|0;k[bZ>>2]=V1;k[V1>>2]=k[g0>>2];i[V1+4>>0]=i[g0+4>>0]|0;Df=R1+80|0;Ef=h0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,R1+120|0,i0|0);V1=x;x=0;if(V1&1){ug=6196;break}V1=j0;W1=k[V1+4>>2]|0;Q1=R1+132|0;k[Q1>>2]=k[V1>>2];k[Q1+4>>2]=W1;k[bZ>>2]=(k[bZ>>2]|0)+72;k[oe>>2]=1;i[eZ>>0]=1;k[fZ>>2]=S1;k[gZ>>2]=1;x=0;xa(712,hZ|0,pe|0);W1=x;x=0;if(W1&1){ug=6648;break}k[iZ>>2]=0;k[jZ>>2]=0;i[ue>>0]=O1;k[kZ>>2]=k[h>>2];i[kZ+4>>0]=i[h+4>>0]|0;Df=lZ;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,mZ|0,bA|0);R1=x;x=0;if(R1&1){ug=6649;break}R1=Bf;W1=k[R1+4>>2]|0;Q1=nZ;k[Q1>>2]=k[R1>>2];k[Q1+4>>2]=W1;W1=k[lV>>2]|0;do if(!W1)k[pZ>>2]=0;else{if((W1|0)==(Zd|0)){k[pZ>>2]=oZ;x=0;xa(k[(k[Zd>>2]|0)+12>>2]|0,Zd|0,oZ|0);Q1=x;x=0;if(Q1&1){ug=6650;break Jb}else break}x=0;Q1=Ba(k[(k[W1>>2]|0)+8>>2]|0,W1|0)|0;R1=x;x=0;if(R1&1){ug=6650;break Jb}k[pZ>>2]=Q1}while(0);k[qZ>>2]=k[e>>2];i[qZ+4>>0]=i[e+4>>0]|0;Df=rZ;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,sZ|0,Gf|0);W1=x;x=0;if(W1&1){ug=6651;break}W1=yf;Q1=k[W1+4>>2]|0;R1=tZ;k[R1>>2]=k[W1>>2];k[R1+4>>2]=Q1;k[uZ>>2]=k[f>>2];i[uZ+4>>0]=i[f+4>>0]|0;Df=vZ;Ef=pf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,wZ|0,Kf|0);Q1=x;x=0;if(Q1&1){ug=6652;break}Q1=zf;R1=k[Q1>>2]|0;W1=k[Q1+4>>2]|0;Q1=xZ;k[Q1>>2]=R1;k[Q1+4>>2]=W1;k[yZ>>2]=0;x=0;Q1=Ba(563,256)|0;V1=x;x=0;if(V1&1){ug=6668;break}k[Q1>>2]=30048;i[Q1+8>>0]=i[ue>>0]|0;V1=Q1+16|0;k[V1>>2]=k[kZ>>2];i[V1+4>>0]=i[kZ+4>>0]|0;Df=Q1+24|0;Ef=lZ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Q1+64>>2]=k[mZ>>2];k[Q1+68>>2]=k[zZ>>2];k[Q1+72>>2]=k[AZ>>2];k[AZ>>2]=0;k[zZ>>2]=0;k[mZ>>2]=0;V1=nZ;P1=k[V1+4>>2]|0;X1=Q1+76|0;k[X1>>2]=k[V1>>2];k[X1+4>>2]=P1;P1=Q1+88|0;X1=k[pZ>>2]|0;do if(!X1){k[Q1+104>>2]=0;c2=R1;d2=W1}else{if((X1|0)!=(oZ|0)){k[Q1+104>>2]=X1;k[pZ>>2]=0;c2=R1;d2=W1;break}k[Q1+104>>2]=P1;x=0;xa(k[(k[oZ>>2]|0)+12>>2]|0,oZ|0,P1|0);V1=x;x=0;if(V1&1){ug=6224;break Jb}V1=xZ;c2=k[V1>>2]|0;d2=k[V1+4>>2]|0}while(0);P1=Q1+112|0;k[P1>>2]=k[qZ>>2];i[P1+4>>0]=i[qZ+4>>0]|0;Df=Q1+120|0;Ef=rZ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Q1+160>>2]=k[sZ>>2];k[Q1+164>>2]=k[BZ>>2];k[Q1+168>>2]=k[CZ>>2];k[CZ>>2]=0;k[BZ>>2]=0;k[sZ>>2]=0;P1=tZ;W1=k[P1+4>>2]|0;R1=Q1+172|0;k[R1>>2]=k[P1>>2];k[R1+4>>2]=W1;W1=Q1+184|0;k[W1>>2]=k[uZ>>2];i[W1+4>>0]=i[uZ+4>>0]|0;Df=Q1+192|0;Ef=vZ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[Q1+232>>2]=k[wZ>>2];k[Q1+236>>2]=k[DZ>>2];k[Q1+240>>2]=k[EZ>>2];k[EZ>>2]=0;k[DZ>>2]=0;k[wZ>>2]=0;W1=Q1+244|0;k[W1>>2]=c2;k[W1+4>>2]=d2;k[yZ>>2]=Q1;k[IY>>2]=k[oe>>2];i[IY+4>>0]=i[oe+4>>0]|0;Df=FZ;Ef=fZ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,GZ|0,hZ|0);Q1=x;x=0;if(Q1&1){ug=6669;break}Q1=iZ;W1=k[Q1+4>>2]|0;R1=HZ;k[R1>>2]=k[Q1>>2];k[R1+4>>2]=W1;W1=k[yZ>>2]|0;do if(!W1)k[JZ>>2]=0;else{if((W1|0)==(te|0)){k[JZ>>2]=IZ;x=0;xa(k[(k[te>>2]|0)+12>>2]|0,te|0,IZ|0);R1=x;x=0;if(R1&1){ug=6232;break Jb}else break}x=0;R1=Ba(k[(k[W1>>2]|0)+8>>2]|0,W1|0)|0;Q1=x;x=0;if(Q1&1){ug=6232;break Jb}k[JZ>>2]=R1}while(0);k[ze>>2]=k[e>>2];i[ze+4>>0]=i[e+4>>0]|0;Df=LZ;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,MZ|0,Gf|0);W1=x;x=0;if(W1&1){e2=ze;ug=6671;break}W1=yf;R1=k[W1+4>>2]|0;Q1=NZ;k[Q1>>2]=k[W1>>2];k[Q1+4>>2]=R1;k[OZ>>2]=k[h>>2];i[OZ+4>>0]=i[h+4>>0]|0;Df=PZ;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,QZ|0,bA|0);R1=x;x=0;if(R1&1){e2=OZ;ug=6671;break}R1=Bf;Q1=k[R1+4>>2]|0;W1=RZ;k[W1>>2]=k[R1>>2];k[W1+4>>2]=Q1;k[ye>>2]=0;k[SZ>>2]=0;k[TZ>>2]=0;x=0;Q1=Ba(563,144)|0;W1=x;x=0;if(W1&1){ug=6243;break}k[SZ>>2]=Q1;k[ye>>2]=Q1;k[UZ>>2]=Q1+144;k[Q1>>2]=k[ze>>2];i[Q1+4>>0]=i[ze+4>>0]|0;Df=Q1+8|0;Ef=k0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Q1+48|0,l0|0);W1=x;x=0;if(W1&1){ug=6244;break}W1=m0;R1=k[W1+4>>2]|0;P1=Q1+60|0;k[P1>>2]=k[W1>>2];k[P1+4>>2]=R1;R1=Q1+72|0;k[SZ>>2]=R1;k[R1>>2]=k[n0>>2];i[R1+4>>0]=i[n0+4>>0]|0;Df=Q1+80|0;Ef=o0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Q1+120|0,p0|0);R1=x;x=0;if(R1&1){ug=6244;break}R1=q0;P1=k[R1+4>>2]|0;W1=Q1+132|0;k[W1>>2]=k[R1>>2];k[W1+4>>2]=P1;k[SZ>>2]=(k[SZ>>2]|0)+72;k[xe>>2]=1;i[VZ>>0]=1;k[WZ>>2]=S1;k[XZ>>2]=1;x=0;xa(712,YZ|0,ye|0);P1=x;x=0;if(P1&1){f2=xe;ug=6681;break}k[ZZ>>2]=0;k[_Z>>2]=0;k[$Z>>2]=k[j>>2];i[$Z+4>>0]=i[j+4>>0]|0;Df=a_;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,b_|0,$X|0);Q1=x;x=0;if(Q1&1){f2=$Z;ug=6681;break}Q1=Cf;P1=k[Q1+4>>2]|0;W1=c_;k[W1>>2]=k[Q1>>2];k[W1+4>>2]=P1;k[we>>2]=0;k[d_>>2]=0;k[e_>>2]=0;x=0;P1=Ba(563,144)|0;W1=x;x=0;if(W1&1){ug=6260;break}k[d_>>2]=P1;k[we>>2]=P1;k[f_>>2]=P1+144;k[P1>>2]=k[xe>>2];i[P1+4>>0]=i[xe+4>>0]|0;Df=P1+8|0;Ef=r0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,P1+48|0,s0|0);W1=x;x=0;if(W1&1){ug=6261;break}W1=t0;Q1=k[W1+4>>2]|0;R1=P1+60|0;k[R1>>2]=k[W1>>2];k[R1+4>>2]=Q1;Q1=P1+72|0;k[d_>>2]=Q1;k[Q1>>2]=k[u0>>2];i[Q1+4>>0]=i[u0+4>>0]|0;Df=P1+80|0;Ef=v0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,P1+120|0,w0|0);Q1=x;x=0;if(Q1&1){ug=6261;break}Q1=x0;R1=k[Q1+4>>2]|0;W1=P1+132|0;k[W1>>2]=k[Q1>>2];k[W1+4>>2]=R1;k[d_>>2]=(k[d_>>2]|0)+72;k[ve>>2]=1;i[g_>>0]=1;k[h_>>2]=S1;k[i_>>2]=1;x=0;xa(712,j_|0,we|0);R1=x;x=0;if(R1&1){ug=6683;break}k[k_>>2]=0;k[l_>>2]=0;i[Be>>0]=O1;k[m_>>2]=k[h>>2];i[m_+4>>0]=i[h+4>>0]|0;Df=n_;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,o_|0,bA|0);O1=x;x=0;if(O1&1){ug=6684;break}O1=Bf;S1=k[O1+4>>2]|0;P1=p_;k[P1>>2]=k[O1>>2];k[P1+4>>2]=S1;k[q_>>2]=k[j>>2];i[q_+4>>0]=i[j+4>>0]|0;Df=r_;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,s_|0,$X|0);S1=x;x=0;if(S1&1){ug=6685;break}S1=Cf;P1=k[S1+4>>2]|0;O1=t_;k[O1>>2]=k[S1>>2];k[O1+4>>2]=P1;k[u_>>2]=k[e>>2];i[u_+4>>0]=i[e+4>>0]|0;Df=v_;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,w_|0,Gf|0);P1=x;x=0;if(P1&1){ug=6686;break}P1=yf;O1=k[P1>>2]|0;S1=k[P1+4>>2]|0;P1=x_;k[P1>>2]=O1;k[P1+4>>2]=S1;k[y_>>2]=0;x=0;P1=Ba(563,232)|0;R1=x;x=0;if(R1&1){ug=6698;break}k[P1>>2]=30092;i[P1+8>>0]=i[Be>>0]|0;R1=P1+16|0;k[R1>>2]=k[m_>>2];i[R1+4>>0]=i[m_+4>>0]|0;Df=P1+24|0;Ef=n_;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[P1+64>>2]=k[o_>>2];k[P1+68>>2]=k[z_>>2];k[P1+72>>2]=k[A_>>2];k[A_>>2]=0;k[z_>>2]=0;k[o_>>2]=0;R1=p_;W1=k[R1+4>>2]|0;Q1=P1+76|0;k[Q1>>2]=k[R1>>2];k[Q1+4>>2]=W1;W1=P1+88|0;k[W1>>2]=k[q_>>2];i[W1+4>>0]=i[q_+4>>0]|0;Df=P1+96|0;Ef=r_;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[P1+136>>2]=k[s_>>2];k[P1+140>>2]=k[B_>>2];k[P1+144>>2]=k[C_>>2];k[C_>>2]=0;k[B_>>2]=0;k[s_>>2]=0;W1=t_;Q1=k[W1+4>>2]|0;R1=P1+148|0;k[R1>>2]=k[W1>>2];k[R1+4>>2]=Q1;Q1=P1+160|0;k[Q1>>2]=k[u_>>2];i[Q1+4>>0]=i[u_+4>>0]|0;Df=P1+168|0;Ef=v_;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[P1+208>>2]=k[w_>>2];k[P1+212>>2]=k[D_>>2];k[P1+216>>2]=k[E_>>2];k[E_>>2]=0;k[D_>>2]=0;k[w_>>2]=0;Q1=P1+220|0;k[Q1>>2]=O1;k[Q1+4>>2]=S1;k[y_>>2]=P1;k[KZ>>2]=k[ve>>2];i[KZ+4>>0]=i[ve+4>>0]|0;Df=F_;Ef=h_;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,G_|0,j_|0);P1=x;x=0;if(P1&1){ug=6699;break}P1=k_;S1=k[P1+4>>2]|0;O1=H_;k[O1>>2]=k[P1>>2];k[O1+4>>2]=S1;S1=k[y_>>2]|0;do if(!S1)k[J_>>2]=0;else{if((S1|0)==(Ae|0)){k[J_>>2]=I_;x=0;xa(k[(k[Ae>>2]|0)+12>>2]|0,Ae|0,I_|0);O1=x;x=0;if(O1&1){ug=6284;break Jb}else break}x=0;O1=Ba(k[(k[S1>>2]|0)+8>>2]|0,S1|0)|0;P1=x;x=0;if(P1&1){ug=6284;break Jb}k[J_>>2]=O1}while(0);k[_d>>2]=0;k[K_>>2]=0;k[L_>>2]=0;x=0;S1=Ba(563,384)|0;O1=x;x=0;if(O1&1){ug=6292;break}k[K_>>2]=S1;k[_d>>2]=S1;k[M_>>2]=S1+384;x=0;fb(215,_d|0,$d|0,N_|0);S1=x;x=0;if(S1&1){ug=6292;break}x=0;Ta(550,lf|0,_d|0)|0;S1=x;x=0;if(S1&1){ug=6702;break}S1=k[_d>>2]|0;if(S1){O1=k[K_>>2]|0;if((O1|0)==(S1|0))g2=S1;else{P1=O1;while(1){O1=P1+-96|0;k[K_>>2]=O1;Q1=k[P1+-8>>2]|0;do if((Q1|0)==(P1+-24|0))Sf[k[(k[Q1>>2]|0)+16>>2]&2047](Q1);else{if(!Q1)break;Sf[k[(k[Q1>>2]|0)+20>>2]&2047](Q1)}while(0);Q1=P1+-48|0;R1=k[Q1>>2]|0;if(!R1)h2=O1;else{W1=P1+-44|0;X1=k[W1>>2]|0;if((X1|0)==(R1|0)){j2=O1;k2=R1}else{V1=P1+-40|0;l2=X1;do{X1=l2+-72|0;k[W1>>2]=X1;i[c>>0]=i[d>>0]|0;uF(c,V1,X1);l2=k[W1>>2]|0}while((l2|0)!=(R1|0));j2=k[K_>>2]|0;k2=k[Q1>>2]|0}OBa(k2);h2=j2}if((h2|0)==(S1|0))break;else P1=h2}g2=k[_d>>2]|0}OBa(g2)}P1=k[z0>>2]|0;do if((P1|0)==(y0|0))Sf[k[(k[y0>>2]|0)+16>>2]&2047](y0);else{if(!P1)break;Sf[k[(k[P1>>2]|0)+20>>2]&2047](P1)}while(0);P1=k[A0>>2]|0;if(P1){S1=k[L1>>2]|0;if((S1|0)==(P1|0))m2=P1;else{R1=S1;do{S1=R1+-72|0;k[L1>>2]=S1;i[c>>0]=i[d>>0]|0;uF(c,M1,S1);R1=k[L1>>2]|0}while((R1|0)!=(P1|0));m2=k[A0>>2]|0}OBa(m2)}P1=k[C0>>2]|0;do if((P1|0)==(B0|0))Sf[k[(k[B0>>2]|0)+16>>2]&2047](B0);else{if(!P1)break;Sf[k[(k[P1>>2]|0)+20>>2]&2047](P1)}while(0);P1=k[D0>>2]|0;if(P1){R1=k[J1>>2]|0;if((R1|0)==(P1|0))n2=P1;else{S1=R1;do{R1=S1+-72|0;k[J1>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,K1,R1);S1=k[J1>>2]|0}while((S1|0)!=(P1|0));n2=k[D0>>2]|0}OBa(n2)}P1=k[F0>>2]|0;do if((P1|0)==(E0|0))Sf[k[(k[E0>>2]|0)+16>>2]&2047](E0);else{if(!P1)break;Sf[k[(k[P1>>2]|0)+20>>2]&2047](P1)}while(0);P1=k[G0>>2]|0;if(P1){S1=k[H1>>2]|0;if((S1|0)==(P1|0))o2=P1;else{R1=S1;do{S1=R1+-72|0;k[H1>>2]=S1;i[c>>0]=i[d>>0]|0;uF(c,I1,S1);R1=k[H1>>2]|0}while((R1|0)!=(P1|0));o2=k[G0>>2]|0}OBa(o2)}P1=k[I0>>2]|0;do if((P1|0)==(H0|0))Sf[k[(k[H0>>2]|0)+16>>2]&2047](H0);else{if(!P1)break;Sf[k[(k[P1>>2]|0)+20>>2]&2047](P1)}while(0);P1=k[J0>>2]|0;if(P1){R1=k[F1>>2]|0;if((R1|0)==(P1|0))p2=P1;else{S1=R1;do{R1=S1+-72|0;k[F1>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,G1,R1);S1=k[F1>>2]|0}while((S1|0)!=(P1|0));p2=k[J0>>2]|0}OBa(p2)}P1=k[y_>>2]|0;do if((P1|0)==(Ae|0))Sf[k[(k[Ae>>2]|0)+16>>2]&2047](Ae);else{if(!P1)break;Sf[k[(k[P1>>2]|0)+20>>2]&2047](P1)}while(0);P1=k[O_>>2]|0;if(P1){S1=k[D_>>2]|0;if((S1|0)==(P1|0))q2=P1;else{R1=S1;do{S1=R1+-72|0;k[D_>>2]=S1;i[c>>0]=i[d>>0]|0;uF(c,v$,S1);R1=k[D_>>2]|0}while((R1|0)!=(P1|0));q2=k[O_>>2]|0}OBa(q2)}P1=k[P_>>2]|0;if(P1){R1=k[B_>>2]|0;if((R1|0)==(P1|0))r2=P1;else{S1=R1;do{R1=S1+-72|0;k[B_>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,u$,R1);S1=k[B_>>2]|0}while((S1|0)!=(P1|0));r2=k[P_>>2]|0}OBa(r2)}P1=k[Q_>>2]|0;if(P1){S1=k[z_>>2]|0;if((S1|0)==(P1|0))s2=P1;else{R1=S1;do{S1=R1+-72|0;k[z_>>2]=S1;i[c>>0]=i[d>>0]|0;uF(c,t$,S1);R1=k[z_>>2]|0}while((R1|0)!=(P1|0));s2=k[Q_>>2]|0}OBa(s2)}P1=k[R_>>2]|0;if(P1){R1=k[r$>>2]|0;if((R1|0)==(P1|0))t2=P1;else{S1=R1;do{R1=S1+-72|0;k[r$>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,s$,R1);S1=k[r$>>2]|0}while((S1|0)!=(P1|0));t2=k[R_>>2]|0}OBa(t2)}P1=k[we>>2]|0;if(P1){S1=k[d_>>2]|0;if((S1|0)==(P1|0))u2=P1;else{R1=S1;while(1){S1=R1+-72|0;k[d_>>2]=S1;l2=R1+-24|0;W1=k[l2>>2]|0;if(!W1)v2=S1;else{V1=R1+-20|0;O1=k[V1>>2]|0;if((O1|0)==(W1|0)){w2=S1;x2=W1}else{S1=R1+-16|0;X1=O1;do{O1=X1+-72|0;k[V1>>2]=O1;i[c>>0]=i[d>>0]|0;uF(c,S1,O1);X1=k[V1>>2]|0}while((X1|0)!=(W1|0));w2=k[d_>>2]|0;x2=k[l2>>2]|0}OBa(x2);v2=w2}if((v2|0)==(P1|0))break;else R1=v2}u2=k[we>>2]|0}OBa(u2)}R1=k[K0>>2]|0;if(R1){P1=k[D1>>2]|0;if((P1|0)==(R1|0))y2=R1;else{W1=P1;do{P1=W1+-72|0;k[D1>>2]=P1;i[c>>0]=i[d>>0]|0;uF(c,E1,P1);W1=k[D1>>2]|0}while((W1|0)!=(R1|0));y2=k[K0>>2]|0}OBa(y2)}R1=k[L0>>2]|0;if(R1){W1=k[B1>>2]|0;if((W1|0)==(R1|0))z2=R1;else{P1=W1;do{W1=P1+-72|0;k[B1>>2]=W1;i[c>>0]=i[d>>0]|0;uF(c,C1,W1);P1=k[B1>>2]|0}while((P1|0)!=(R1|0));z2=k[L0>>2]|0}OBa(z2)}R1=k[ye>>2]|0;if(R1){P1=k[SZ>>2]|0;if((P1|0)==(R1|0))A2=R1;else{W1=P1;while(1){P1=W1+-72|0;k[SZ>>2]=P1;X1=W1+-24|0;V1=k[X1>>2]|0;if(!V1)B2=P1;else{S1=W1+-20|0;Q1=k[S1>>2]|0;if((Q1|0)==(V1|0)){C2=P1;D2=V1}else{P1=W1+-16|0;O1=Q1;do{Q1=O1+-72|0;k[S1>>2]=Q1;i[c>>0]=i[d>>0]|0;uF(c,P1,Q1);O1=k[S1>>2]|0}while((O1|0)!=(V1|0));C2=k[SZ>>2]|0;D2=k[X1>>2]|0}OBa(D2);B2=C2}if((B2|0)==(R1|0))break;else W1=B2}A2=k[ye>>2]|0}OBa(A2)}W1=k[M0>>2]|0;if(W1){R1=k[z1>>2]|0;if((R1|0)==(W1|0))E2=W1;else{V1=R1;do{R1=V1+-72|0;k[z1>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,A1,R1);V1=k[z1>>2]|0}while((V1|0)!=(W1|0));E2=k[M0>>2]|0}OBa(E2)}W1=k[N0>>2]|0;if(W1){V1=k[x1>>2]|0;if((V1|0)==(W1|0))F2=W1;else{R1=V1;do{V1=R1+-72|0;k[x1>>2]=V1;i[c>>0]=i[d>>0]|0;uF(c,y1,V1);R1=k[x1>>2]|0}while((R1|0)!=(W1|0));F2=k[N0>>2]|0}OBa(F2)}W1=k[yZ>>2]|0;do if((W1|0)==(te|0))Sf[k[(k[te>>2]|0)+16>>2]&2047](te);else{if(!W1)break;Sf[k[(k[W1>>2]|0)+20>>2]&2047](W1)}while(0);W1=k[S_>>2]|0;if(W1){R1=k[DZ>>2]|0;if((R1|0)==(W1|0))G2=W1;else{V1=R1;do{R1=V1+-72|0;k[DZ>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,q$,R1);V1=k[DZ>>2]|0}while((V1|0)!=(W1|0));G2=k[S_>>2]|0}OBa(G2)}W1=k[T_>>2]|0;if(W1){V1=k[BZ>>2]|0;if((V1|0)==(W1|0))H2=W1;else{R1=V1;do{V1=R1+-72|0;k[BZ>>2]=V1;i[c>>0]=i[d>>0]|0;uF(c,p$,V1);R1=k[BZ>>2]|0}while((R1|0)!=(W1|0));H2=k[T_>>2]|0}OBa(H2)}W1=k[pZ>>2]|0;do if((W1|0)==(oZ|0))Sf[k[(k[oZ>>2]|0)+16>>2]&2047](oZ);else{if(!W1)break;Sf[k[(k[W1>>2]|0)+20>>2]&2047](W1)}while(0);W1=k[U_>>2]|0;if(W1){R1=k[zZ>>2]|0;if((R1|0)==(W1|0))I2=W1;else{V1=R1;do{R1=V1+-72|0;k[zZ>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,o$,R1);V1=k[zZ>>2]|0}while((V1|0)!=(W1|0));I2=k[U_>>2]|0}OBa(I2)}W1=k[V_>>2]|0;if(W1){V1=k[m$>>2]|0;if((V1|0)==(W1|0))J2=W1;else{R1=V1;do{V1=R1+-72|0;k[m$>>2]=V1;i[c>>0]=i[d>>0]|0;uF(c,n$,V1);R1=k[m$>>2]|0}while((R1|0)!=(W1|0));J2=k[V_>>2]|0}OBa(J2)}W1=k[pe>>2]|0;if(W1){R1=k[bZ>>2]|0;if((R1|0)==(W1|0))K2=W1;else{V1=R1;while(1){R1=V1+-72|0;k[bZ>>2]=R1;O1=V1+-24|0;S1=k[O1>>2]|0;if(!S1)L2=R1;else{P1=V1+-20|0;l2=k[P1>>2]|0;if((l2|0)==(S1|0)){M2=R1;N2=S1}else{R1=V1+-16|0;Q1=l2;do{l2=Q1+-72|0;k[P1>>2]=l2;i[c>>0]=i[d>>0]|0;uF(c,R1,l2);Q1=k[P1>>2]|0}while((Q1|0)!=(S1|0));M2=k[bZ>>2]|0;N2=k[O1>>2]|0}OBa(N2);L2=M2}if((L2|0)==(W1|0))break;else V1=L2}K2=k[pe>>2]|0}OBa(K2)}V1=k[O0>>2]|0;if(V1){W1=k[v1>>2]|0;if((W1|0)==(V1|0))O2=V1;else{S1=W1;do{W1=S1+-72|0;k[v1>>2]=W1;i[c>>0]=i[d>>0]|0;uF(c,w1,W1);S1=k[v1>>2]|0}while((S1|0)!=(V1|0));O2=k[O0>>2]|0}OBa(O2)}V1=k[P0>>2]|0;if(V1){S1=k[t1>>2]|0;if((S1|0)==(V1|0))P2=V1;else{W1=S1;do{S1=W1+-72|0;k[t1>>2]=S1;i[c>>0]=i[d>>0]|0;uF(c,u1,S1);W1=k[t1>>2]|0}while((W1|0)!=(V1|0));P2=k[P0>>2]|0}OBa(P2)}V1=k[re>>2]|0;if(V1){W1=k[QY>>2]|0;if((W1|0)==(V1|0))Q2=V1;else{S1=W1;while(1){W1=S1+-72|0;k[QY>>2]=W1;Q1=S1+-24|0;P1=k[Q1>>2]|0;if(!P1)R2=W1;else{R1=S1+-20|0;X1=k[R1>>2]|0;if((X1|0)==(P1|0)){S2=W1;T2=P1}else{W1=S1+-16|0;l2=X1;do{X1=l2+-72|0;k[R1>>2]=X1;i[c>>0]=i[d>>0]|0;uF(c,W1,X1);l2=k[R1>>2]|0}while((l2|0)!=(P1|0));S2=k[QY>>2]|0;T2=k[Q1>>2]|0}OBa(T2);R2=S2}if((R2|0)==(V1|0))break;else S1=R2}Q2=k[re>>2]|0}OBa(Q2)}S1=k[Q0>>2]|0;if(S1){V1=k[r1>>2]|0;if((V1|0)==(S1|0))U2=S1;else{P1=V1;do{V1=P1+-72|0;k[r1>>2]=V1;i[c>>0]=i[d>>0]|0;uF(c,s1,V1);P1=k[r1>>2]|0}while((P1|0)!=(S1|0));U2=k[Q0>>2]|0}OBa(U2)}S1=k[R0>>2]|0;if(S1){P1=k[p1>>2]|0;if((P1|0)==(S1|0))V2=S1;else{V1=P1;do{P1=V1+-72|0;k[p1>>2]=P1;i[c>>0]=i[d>>0]|0;uF(c,q1,P1);V1=k[p1>>2]|0}while((V1|0)!=(S1|0));V2=k[R0>>2]|0}OBa(V2)}S1=k[wY>>2]|0;do if((S1|0)==(me|0))Sf[k[(k[me>>2]|0)+16>>2]&2047](me);else{if(!S1)break;Sf[k[(k[S1>>2]|0)+20>>2]&2047](S1)}while(0);S1=k[W_>>2]|0;if(S1){V1=k[BY>>2]|0;if((V1|0)==(S1|0))W2=S1;else{P1=V1;do{V1=P1+-72|0;k[BY>>2]=V1;i[c>>0]=i[d>>0]|0;uF(c,l$,V1);P1=k[BY>>2]|0}while((P1|0)!=(S1|0));W2=k[W_>>2]|0}OBa(W2)}S1=k[X_>>2]|0;if(S1){P1=k[zY>>2]|0;if((P1|0)==(S1|0))X2=S1;else{V1=P1;do{P1=V1+-72|0;k[zY>>2]=P1;i[c>>0]=i[d>>0]|0;uF(c,k$,P1);V1=k[zY>>2]|0}while((V1|0)!=(S1|0));X2=k[X_>>2]|0}OBa(X2)}S1=k[Y_>>2]|0;if(S1){V1=k[xY>>2]|0;if((V1|0)==(S1|0))Y2=S1;else{P1=V1;do{V1=P1+-72|0;k[xY>>2]=V1;i[c>>0]=i[d>>0]|0;uF(c,j$,V1);P1=k[xY>>2]|0}while((P1|0)!=(S1|0));Y2=k[Y_>>2]|0}OBa(Y2)}S1=k[Z_>>2]|0;if(S1){P1=k[h$>>2]|0;if((P1|0)==(S1|0))Z2=S1;else{V1=P1;do{P1=V1+-72|0;k[h$>>2]=P1;i[c>>0]=i[d>>0]|0;uF(c,i$,P1);V1=k[h$>>2]|0}while((V1|0)!=(S1|0));Z2=k[Z_>>2]|0}OBa(Z2)}S1=k[ie>>2]|0;if(S1){V1=k[bY>>2]|0;if((V1|0)==(S1|0))_2=S1;else{P1=V1;while(1){V1=P1+-72|0;k[bY>>2]=V1;l2=P1+-24|0;R1=k[l2>>2]|0;if(!R1)$2=V1;else{W1=P1+-20|0;O1=k[W1>>2]|0;if((O1|0)==(R1|0)){a3=V1;b3=R1}else{V1=P1+-16|0;X1=O1;do{O1=X1+-72|0;k[W1>>2]=O1;i[c>>0]=i[d>>0]|0;uF(c,V1,O1);X1=k[W1>>2]|0}while((X1|0)!=(R1|0));a3=k[bY>>2]|0;b3=k[l2>>2]|0}OBa(b3);$2=a3}if(($2|0)==(S1|0))break;else P1=$2}_2=k[ie>>2]|0}OBa(_2)}P1=k[S0>>2]|0;if(P1){S1=k[n1>>2]|0;if((S1|0)==(P1|0))c3=P1;else{R1=S1;do{S1=R1+-72|0;k[n1>>2]=S1;i[c>>0]=i[d>>0]|0;uF(c,o1,S1);R1=k[n1>>2]|0}while((R1|0)!=(P1|0));c3=k[S0>>2]|0}OBa(c3)}P1=k[T0>>2]|0;if(P1){R1=k[l1>>2]|0;if((R1|0)==(P1|0))d3=P1;else{S1=R1;do{R1=S1+-72|0;k[l1>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,m1,R1);S1=k[l1>>2]|0}while((S1|0)!=(P1|0));d3=k[T0>>2]|0}OBa(d3)}P1=k[ke>>2]|0;if(P1){S1=k[PX>>2]|0;if((S1|0)==(P1|0))e3=P1;else{R1=S1;while(1){S1=R1+-72|0;k[PX>>2]=S1;X1=R1+-24|0;W1=k[X1>>2]|0;if(!W1)f3=S1;else{V1=R1+-20|0;Q1=k[V1>>2]|0;if((Q1|0)==(W1|0)){g3=S1;h3=W1}else{S1=R1+-16|0;O1=Q1;do{Q1=O1+-72|0;k[V1>>2]=Q1;i[c>>0]=i[d>>0]|0;uF(c,S1,Q1);O1=k[V1>>2]|0}while((O1|0)!=(W1|0));g3=k[PX>>2]|0;h3=k[X1>>2]|0}OBa(h3);f3=g3}if((f3|0)==(P1|0))break;else R1=f3}e3=k[ke>>2]|0}OBa(e3)}R1=k[U0>>2]|0;if(R1){P1=k[j1>>2]|0;if((P1|0)==(R1|0))j3=R1;else{W1=P1;do{P1=W1+-72|0;k[j1>>2]=P1;i[c>>0]=i[d>>0]|0;uF(c,k1,P1);W1=k[j1>>2]|0}while((W1|0)!=(R1|0));j3=k[U0>>2]|0}OBa(j3)}R1=k[V0>>2]|0;if(R1){W1=k[g1>>2]|0;if((W1|0)==(R1|0))k3=R1;else{P1=W1;do{W1=P1+-72|0;k[g1>>2]=W1;i[c>>0]=i[d>>0]|0;uF(c,h1,W1);P1=k[g1>>2]|0}while((P1|0)!=(R1|0));k3=k[V0>>2]|0}OBa(k3)}R1=k[yN>>2]|0;do if((R1|0)==(fe|0))Sf[k[(k[fe>>2]|0)+16>>2]&2047](fe);else{if(!R1)break;Sf[k[(k[R1>>2]|0)+20>>2]&2047](R1)}while(0);R1=k[__>>2]|0;if(R1){P1=k[oW>>2]|0;if((P1|0)==(R1|0))l3=R1;else{W1=P1;do{P1=W1+-72|0;k[oW>>2]=P1;i[c>>0]=i[d>>0]|0;uF(c,g$,P1);W1=k[oW>>2]|0}while((W1|0)!=(R1|0));l3=k[__>>2]|0}OBa(l3)}R1=k[$_>>2]|0;if(R1){W1=k[BN>>2]|0;if((W1|0)==(R1|0))m3=R1;else{P1=W1;do{W1=P1+-72|0;k[BN>>2]=W1;i[c>>0]=i[d>>0]|0;uF(c,f$,W1);P1=k[BN>>2]|0}while((P1|0)!=(R1|0));m3=k[$_>>2]|0}OBa(m3)}R1=k[QV>>2]|0;do if((R1|0)==(RV|0))Sf[k[(k[RV>>2]|0)+16>>2]&2047](RV);else{if(!R1)break;Sf[k[(k[R1>>2]|0)+20>>2]&2047](R1)}while(0);R1=k[a$>>2]|0;if(R1){P1=k[uN>>2]|0;if((P1|0)==(R1|0))n3=R1;else{W1=P1;do{P1=W1+-72|0;k[uN>>2]=P1;i[c>>0]=i[d>>0]|0;uF(c,e$,P1);W1=k[uN>>2]|0}while((W1|0)!=(R1|0));n3=k[a$>>2]|0}OBa(n3)}R1=k[b$>>2]|0;if(R1){W1=k[c$>>2]|0;if((W1|0)==(R1|0))o3=R1;else{P1=W1;do{W1=P1+-72|0;k[c$>>2]=W1;i[c>>0]=i[d>>0]|0;uF(c,d$,W1);P1=k[c$>>2]|0}while((P1|0)!=(R1|0));o3=k[b$>>2]|0}OBa(o3)}R1=k[be>>2]|0;if(R1){P1=k[WV>>2]|0;if((P1|0)==(R1|0))p3=R1;else{W1=P1;while(1){P1=W1+-72|0;k[WV>>2]=P1;O1=W1+-24|0;V1=k[O1>>2]|0;if(!V1)q3=P1;else{S1=W1+-20|0;l2=k[S1>>2]|0;if((l2|0)==(V1|0)){r3=P1;s3=V1}else{P1=W1+-16|0;Q1=l2;do{l2=Q1+-72|0;k[S1>>2]=l2;i[c>>0]=i[d>>0]|0;uF(c,P1,l2);Q1=k[S1>>2]|0}while((Q1|0)!=(V1|0));r3=k[WV>>2]|0;s3=k[O1>>2]|0}OBa(s3);q3=r3}if((q3|0)==(R1|0))break;else W1=q3}p3=k[be>>2]|0}OBa(p3)}W1=k[W0>>2]|0;if(W1){R1=k[e1>>2]|0;if((R1|0)==(W1|0))t3=W1;else{V1=R1;do{R1=V1+-72|0;k[e1>>2]=R1;i[c>>0]=i[d>>0]|0;uF(c,f1,R1);V1=k[e1>>2]|0}while((V1|0)!=(W1|0));t3=k[W0>>2]|0}OBa(t3)}W1=k[X0>>2]|0;if(W1){V1=k[c1>>2]|0;if((V1|0)==(W1|0))u3=W1;else{R1=V1;do{V1=R1+-72|0;k[c1>>2]=V1;i[c>>0]=i[d>>0]|0;uF(c,d1,V1);R1=k[c1>>2]|0}while((R1|0)!=(W1|0));u3=k[X0>>2]|0}OBa(u3)}W1=k[de>>2]|0;if(W1){R1=k[LU>>2]|0;if((R1|0)==(W1|0))v3=W1;else{V1=R1;while(1){R1=V1+-72|0;k[LU>>2]=R1;Q1=V1+-24|0;S1=k[Q1>>2]|0;if(!S1)w3=R1;else{P1=V1+-20|0;X1=k[P1>>2]|0;if((X1|0)==(S1|0)){x3=R1;y3=S1}else{R1=V1+-16|0;l2=X1;do{X1=l2+-72|0;k[P1>>2]=X1;i[c>>0]=i[d>>0]|0;uF(c,R1,X1);l2=k[P1>>2]|0}while((l2|0)!=(S1|0));x3=k[LU>>2]|0;y3=k[Q1>>2]|0}OBa(y3);w3=x3}if((w3|0)==(W1|0))break;else V1=w3}v3=k[de>>2]|0}OBa(v3)}V1=k[Y0>>2]|0;if(V1){W1=k[a1>>2]|0;if((W1|0)==(V1|0))z3=V1;else{S1=W1;do{W1=S1+-72|0;k[a1>>2]=W1;i[c>>0]=i[d>>0]|0;uF(c,b1,W1);S1=k[a1>>2]|0}while((S1|0)!=(V1|0));z3=k[Y0>>2]|0}OBa(z3)}V1=k[Z0>>2]|0;if(V1){S1=k[_0>>2]|0;if((S1|0)==(V1|0))A3=V1;else{W1=S1;do{S1=W1+-72|0;k[_0>>2]=S1;i[c>>0]=i[d>>0]|0;uF(c,$0,S1);W1=k[_0>>2]|0}while((W1|0)!=(V1|0));A3=k[Z0>>2]|0}OBa(A3)}V1=k[lV>>2]|0;do if((V1|0)==(Zd|0))Sf[k[(k[Zd>>2]|0)+16>>2]&2047](Zd);else{if(!V1)break;Sf[k[(k[V1>>2]|0)+20>>2]&2047](V1)}while(0);N1=N1+32|0;if((N1|0)==(pV|0)){ug=5943;break}}switch(ug|0){case 5943:{pV=k[Xd>>2]|0;N1=pV;if(pV){Z0=k[gV>>2]|0;if((Z0|0)!=(pV|0)){_0=~((Z0+-32-N1|0)>>>5);N1=Z0;do{$0=k[N1+-8>>2]|0;do if(($0|0)==(N1+-24|0))Sf[k[(k[$0>>2]|0)+16>>2]&2047]($0);else{if(!$0)break;Sf[k[(k[$0>>2]|0)+20>>2]&2047]($0)}while(0);N1=N1+-32|0}while((N1|0)!=(pV|0));k[gV>>2]=Z0+(_0<<5)}OBa(pV)};k[Ge>>2]=k[h>>2];i[Ge+4>>0]=i[h+4>>0]|0;Df=Ge+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ge+48|0,bA|0);pV=x;x=0;do if(pV&1){B3=Ge;ug=7685}else{_0=Bf;Z0=k[_0+4>>2]|0;N1=Ge+60|0;k[N1>>2]=k[_0>>2];k[N1+4>>2]=Z0;Z0=Ge+72|0;k[Z0>>2]=k[e>>2];i[Z0+4>>0]=i[e+4>>0]|0;Df=Ge+80|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ge+120|0,Gf|0);N1=x;x=0;if(N1&1){B3=Z0;ug=7685;break}N1=yf;_0=k[N1+4>>2]|0;$0=Ge+132|0;k[$0>>2]=k[N1>>2];k[$0+4>>2]=_0;k[Fe>>2]=0;_0=Fe+4|0;k[_0>>2]=0;k[Fe+8>>2]=0;x=0;$0=Ba(563,144)|0;N1=x;x=0;Kb:do if(N1&1){Y0=Hc()|0;C3=Y0;D3=M;ug=7694}else{k[_0>>2]=$0;k[Fe>>2]=$0;k[Fe+8>>2]=$0+144;k[$0>>2]=k[Ge>>2];i[$0+4>>0]=i[Ge+4>>0]|0;Df=$0+8|0;Ef=Ge+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$0+48|0,Ge+48|0);Q1=x;x=0;do if(!(Q1&1)){Y0=Ge+60|0;a1=k[Y0+4>>2]|0;b1=$0+60|0;k[b1>>2]=k[Y0>>2];k[b1+4>>2]=a1;a1=$0+72|0;k[_0>>2]=a1;b1=Ge+72|0;k[a1>>2]=k[b1>>2];i[a1+4>>0]=i[b1+4>>0]|0;Df=$0+80|0;Ef=Ge+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$0+120|0,Ge+120|0);b1=x;x=0;if(b1&1)break;b1=Ge+132|0;a1=k[b1+4>>2]|0;Y0=$0+132|0;k[Y0>>2]=k[b1>>2];k[Y0+4>>2]=a1;k[_0>>2]=(k[_0>>2]|0)+72;k[Ee>>2]=1;i[Ee+4>>0]=1;a1=Ee+8|0;k[a1>>2]=3;k[Ee+40>>2]=1;Y0=Ee+48|0;x=0;xa(712,Y0|0,Fe|0);b1=x;x=0;do if(b1&1){X0=Hc()|0;E3=De;F3=X0;G3=M;H3=1}else{X0=Ee+60|0;k[X0>>2]=0;k[Ee+64>>2]=0;k[Ie>>2]=k[h>>2];i[Ie+4>>0]=i[h+4>>0]|0;c1=Ie+8|0;Df=c1;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));d1=Ie+48|0;x=0;xa(712,d1|0,bA|0);W0=x;x=0;do if(W0&1){e1=Hc()|0;I3=De;J3=e1;K3=M;L3=1}else{e1=Ie+60|0;f1=Bf;V0=k[f1+4>>2]|0;g1=e1;k[g1>>2]=k[f1>>2];k[g1+4>>2]=V0;V0=Ie+72|0;k[V0>>2]=k[e>>2];i[V0+4>>0]=i[e+4>>0]|0;g1=Ie+80|0;Df=g1;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));f1=Ie+120|0;x=0;xa(712,f1|0,Gf|0);h1=x;x=0;if(h1&1){h1=Hc()|0;U0=M;j1=Ie+48|0;k1=k[j1>>2]|0;if(!k1){I3=De;J3=h1;K3=U0;L3=1;break}T0=Ie+52|0;l1=k[T0>>2]|0;if((l1|0)==(k1|0))M3=k1;else{m1=Ie+56|0;S0=l1;do{l1=S0+-72|0;k[T0>>2]=l1;i[c>>0]=i[d>>0]|0;uF(c,m1,l1);S0=k[T0>>2]|0}while((S0|0)!=(k1|0));M3=k[j1>>2]|0}OBa(M3);I3=De;J3=h1;K3=U0;L3=1;break}k1=yf;S0=k[k1>>2]|0;T0=k[k1+4>>2]|0;k1=Ie+132|0;k[k1>>2]=S0;k[k1+4>>2]=T0;k1=He+16|0;k[k1>>2]=0;x=0;m1=Ba(563,152)|0;l1=x;x=0;do if(l1&1){n1=Hc()|0;N3=De;O3=n1;P3=M;Q3=1}else{k[m1>>2]=30136;n1=m1+8|0;k[n1>>2]=k[Ie>>2];i[n1+4>>0]=i[Ie+4>>0]|0;Df=m1+16|0;Ef=c1;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[m1+56>>2]=k[d1>>2];n1=Ie+52|0;k[m1+60>>2]=k[n1>>2];o1=Ie+56|0;k[m1+64>>2]=k[o1>>2];k[o1>>2]=0;k[n1>>2]=0;k[d1>>2]=0;o1=e1;R0=k[o1+4>>2]|0;p1=m1+68|0;k[p1>>2]=k[o1>>2];k[p1+4>>2]=R0;R0=m1+80|0;k[R0>>2]=k[V0>>2];i[R0+4>>0]=i[V0+4>>0]|0;Df=m1+88|0;Ef=g1;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[m1+128>>2]=k[f1>>2];R0=Ie+124|0;k[m1+132>>2]=k[R0>>2];p1=Ie+128|0;k[m1+136>>2]=k[p1>>2];k[p1>>2]=0;k[R0>>2]=0;k[f1>>2]=0;p1=m1+140|0;k[p1>>2]=S0;k[p1+4>>2]=T0;k[k1>>2]=m1;k[De>>2]=k[Ee>>2];i[De+4>>0]=i[Ee+4>>0]|0;Df=De+8|0;Ef=a1;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,De+48|0,Y0|0);p1=x;x=0;Lb:do if(p1&1){o1=Hc()|0;R3=M;S3=o1;ug=7705}else{o1=X0;q1=k[o1+4>>2]|0;Q0=De+60|0;k[Q0>>2]=k[o1>>2];k[Q0+4>>2]=q1;q1=De+72|0;Q0=k[k1>>2]|0;Mb:do if(!Q0)k[De+88>>2]=0;else{do if((Q0|0)==(He|0)){k[De+88>>2]=q1;x=0;xa(k[(k[Q0>>2]|0)+12>>2]|0,Q0|0,q1|0);o1=x;x=0;if(!(o1&1))break Mb}else{x=0;o1=Ba(k[(k[Q0>>2]|0)+8>>2]|0,Q0|0)|0;r1=x;x=0;if(r1&1)break;k[De+88>>2]=o1;break Mb}while(0);o1=Hc()|0;r1=M;s1=De+48|0;P0=k[s1>>2]|0;if(!P0){R3=r1;S3=o1;ug=7705;break Lb}t1=De+52|0;u1=k[t1>>2]|0;if((u1|0)==(P0|0))T3=P0;else{O0=De+56|0;v1=u1;do{u1=v1+-72|0;k[t1>>2]=u1;i[c>>0]=i[d>>0]|0;uF(c,O0,u1);v1=k[t1>>2]|0}while((v1|0)!=(P0|0));T3=k[s1>>2]|0}OBa(T3);R3=r1;S3=o1;ug=7705;break Lb}while(0);Q0=De+96|0;k[Ne>>2]=k[h>>2];i[Ne+4>>0]=i[h+4>>0]|0;Df=Ne+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ne+48|0,bA|0);q1=x;x=0;do if(q1&1){U3=Ne;ug=7706}else{P0=Bf;v1=k[P0+4>>2]|0;t1=Ne+60|0;k[t1>>2]=k[P0>>2];k[t1+4>>2]=v1;v1=Ne+72|0;k[v1>>2]=k[e>>2];i[v1+4>>0]=i[e+4>>0]|0;Df=Ne+80|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ne+120|0,Gf|0);o1=x;x=0;if(o1&1){U3=v1;ug=7706;break}o1=yf;r1=k[o1+4>>2]|0;s1=Ne+132|0;k[s1>>2]=k[o1>>2];k[s1+4>>2]=r1;k[Me>>2]=0;r1=Me+4|0;k[r1>>2]=0;k[Me+8>>2]=0;x=0;s1=Ba(563,144)|0;o1=x;x=0;Nb:do if(o1&1){t1=Hc()|0;V3=t1;W3=M;ug=7715}else{k[r1>>2]=s1;k[Me>>2]=s1;k[Me+8>>2]=s1+144;k[s1>>2]=k[Ne>>2];i[s1+4>>0]=i[Ne+4>>0]|0;Df=s1+8|0;Ef=Ne+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,s1+48|0,Ne+48|0);t1=x;x=0;do if(!(t1&1)){P0=Ne+60|0;O0=k[P0+4>>2]|0;u1=s1+60|0;k[u1>>2]=k[P0>>2];k[u1+4>>2]=O0;O0=s1+72|0;k[r1>>2]=O0;u1=Ne+72|0;k[O0>>2]=k[u1>>2];i[O0+4>>0]=i[u1+4>>0]|0;Df=s1+80|0;Ef=Ne+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,s1+120|0,Ne+120|0);u1=x;x=0;if(u1&1)break;u1=Ne+132|0;O0=k[u1+4>>2]|0;P0=s1+132|0;k[P0>>2]=k[u1>>2];k[P0+4>>2]=O0;k[r1>>2]=(k[r1>>2]|0)+72;k[Le>>2]=1;i[Le+4>>0]=1;k[Le+8>>2]=1;k[Le+40>>2]=1;x=0;xa(712,Le+48|0,Me|0);O0=x;x=0;do if(O0&1){X3=Le;ug=7716}else{k[Le+60>>2]=0;k[Le+64>>2]=0;P0=Le+72|0;k[P0>>2]=k[j>>2];i[P0+4>>0]=i[j+4>>0]|0;Df=Le+80|0;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));u1=j+48|0;x=0;xa(712,Le+120|0,u1|0);w1=x;x=0;if(w1&1){X3=P0;ug=7716;break}w1=Cf;N0=k[w1+4>>2]|0;x1=Le+132|0;k[x1>>2]=k[w1>>2];k[x1+4>>2]=N0;k[Ke>>2]=0;N0=Ke+4|0;k[N0>>2]=0;k[Ke+8>>2]=0;x=0;x1=Ba(563,144)|0;w1=x;x=0;Ob:do if(w1&1){y1=Hc()|0;Y3=y1;Z3=M;ug=7717}else{k[N0>>2]=x1;k[Ke>>2]=x1;k[Ke+8>>2]=x1+144;k[x1>>2]=k[Le>>2];i[x1+4>>0]=i[Le+4>>0]|0;Df=x1+8|0;Ef=Le+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,x1+48|0,Le+48|0);y1=x;x=0;do if(!(y1&1)){M0=Le+60|0;z1=k[M0+4>>2]|0;A1=x1+60|0;k[A1>>2]=k[M0>>2];k[A1+4>>2]=z1;z1=x1+72|0;k[N0>>2]=z1;A1=Le+72|0;k[z1>>2]=k[A1>>2];i[z1+4>>0]=i[A1+4>>0]|0;Df=x1+80|0;Ef=Le+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,x1+120|0,Le+120|0);A1=x;x=0;if(A1&1)break;A1=Le+132|0;z1=k[A1+4>>2]|0;M0=x1+132|0;k[M0>>2]=k[A1>>2];k[M0+4>>2]=z1;k[N0>>2]=(k[N0>>2]|0)+72;k[Je>>2]=1;i[Je+4>>0]=1;z1=Je+8|0;k[z1>>2]=3;k[Je+40>>2]=1;M0=Je+48|0;x=0;xa(712,M0|0,Ke|0);A1=x;x=0;do if(A1&1){L0=Hc()|0;_3=Q0;$3=1;a4=L0;b4=M}else{L0=Je+60|0;k[L0>>2]=0;k[Je+64>>2]=0;k[Pe>>2]=k[h>>2];i[Pe+4>>0]=i[h+4>>0]|0;B1=Pe+8|0;Df=B1;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));C1=Pe+48|0;x=0;xa(712,C1|0,bA|0);K0=x;x=0;Pb:do if(K0&1){D1=Hc()|0;c4=Q0;d4=1;e4=D1;f4=M}else{D1=Pe+60|0;E1=Bf;J0=k[E1+4>>2]|0;F1=D1;k[F1>>2]=k[E1>>2];k[F1+4>>2]=J0;J0=Pe+72|0;k[J0>>2]=k[j>>2];i[J0+4>>0]=i[j+4>>0]|0;F1=Pe+80|0;Df=F1;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));E1=Pe+120|0;x=0;xa(712,E1|0,u1|0);G1=x;x=0;do if(G1&1){H0=Hc()|0;g4=H0;h4=M}else{H0=Pe+132|0;I0=Cf;G0=k[I0+4>>2]|0;H1=H0;k[H1>>2]=k[I0>>2];k[H1+4>>2]=G0;G0=Pe+144|0;k[G0>>2]=k[e>>2];i[G0+4>>0]=i[e+4>>0]|0;H1=Pe+152|0;Df=H1;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));I0=Pe+192|0;x=0;xa(712,I0|0,Gf|0);I1=x;x=0;if(I1&1){I1=Hc()|0;E0=M;F0=Pe+120|0;D0=k[F0>>2]|0;if(!D0){g4=I1;h4=E0;break}J1=Pe+124|0;K1=k[J1>>2]|0;if((K1|0)==(D0|0))j4=D0;else{B0=Pe+128|0;C0=K1;do{K1=C0+-72|0;k[J1>>2]=K1;i[c>>0]=i[d>>0]|0;uF(c,B0,K1);C0=k[J1>>2]|0}while((C0|0)!=(D0|0));j4=k[F0>>2]|0}OBa(j4);g4=I1;h4=E0;break}D0=yf;C0=k[D0>>2]|0;J1=k[D0+4>>2]|0;D0=Pe+204|0;k[D0>>2]=C0;k[D0+4>>2]=J1;D0=Oe+16|0;k[D0>>2]=0;x=0;B0=Ba(563,224)|0;K1=x;x=0;do if(K1&1){A0=Hc()|0;k4=Q0;l4=1;m4=A0;n4=M}else{k[B0>>2]=30180;A0=B0+8|0;k[A0>>2]=k[Pe>>2];i[A0+4>>0]=i[Pe+4>>0]|0;Df=B0+16|0;Ef=B1;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[B0+56>>2]=k[C1>>2];A0=Pe+52|0;k[B0+60>>2]=k[A0>>2];L1=Pe+56|0;k[B0+64>>2]=k[L1>>2];k[L1>>2]=0;k[A0>>2]=0;k[C1>>2]=0;L1=D1;M1=k[L1+4>>2]|0;y0=B0+68|0;k[y0>>2]=k[L1>>2];k[y0+4>>2]=M1;M1=B0+80|0;k[M1>>2]=k[J0>>2];i[M1+4>>0]=i[J0+4>>0]|0;Df=B0+88|0;Ef=F1;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[B0+128>>2]=k[E1>>2];M1=Pe+124|0;k[B0+132>>2]=k[M1>>2];y0=Pe+128|0;k[B0+136>>2]=k[y0>>2];k[y0>>2]=0;k[M1>>2]=0;k[E1>>2]=0;y0=H0;L1=k[y0+4>>2]|0;z0=B0+140|0;k[z0>>2]=k[y0>>2];k[z0+4>>2]=L1;L1=B0+152|0;k[L1>>2]=k[G0>>2];i[L1+4>>0]=i[G0+4>>0]|0;Df=B0+160|0;Ef=H1;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[B0+200>>2]=k[I0>>2];L1=Pe+196|0;k[B0+204>>2]=k[L1>>2];z0=Pe+200|0;k[B0+208>>2]=k[z0>>2];k[z0>>2]=0;k[L1>>2]=0;k[I0>>2]=0;z0=B0+212|0;k[z0>>2]=C0;k[z0+4>>2]=J1;k[D0>>2]=B0;k[Q0>>2]=k[Je>>2];i[Q0+4>>0]=i[Je+4>>0]|0;Df=De+104|0;Ef=z1;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,De+144|0,M0|0);z0=x;x=0;Qb:do if(z0&1){y0=Hc()|0;o4=M;p4=y0;ug=7735}else{y0=L0;N_=k[y0+4>>2]|0;M_=De+156|0;k[M_>>2]=k[y0>>2];k[M_+4>>2]=N_;N_=De+168|0;M_=k[D0>>2]|0;Rb:do if(!M_)k[De+184>>2]=0;else{do if((M_|0)==(Oe|0)){k[De+184>>2]=N_;x=0;xa(k[(k[M_>>2]|0)+12>>2]|0,M_|0,N_|0);y0=x;x=0;if(!(y0&1))break Rb}else{x=0;y0=Ba(k[(k[M_>>2]|0)+8>>2]|0,M_|0)|0;L_=x;x=0;if(L_&1)break;k[De+184>>2]=y0;break Rb}while(0);y0=Hc()|0;L_=M;J_=De+144|0;I_=k[J_>>2]|0;if(!I_){o4=L_;p4=y0;ug=7735;break Qb}H_=De+148|0;k_=k[H_>>2]|0;if((k_|0)==(I_|0))q4=I_;else{j_=De+152|0;G_=k_;do{k_=G_+-72|0;k[H_>>2]=k_;i[c>>0]=i[d>>0]|0;uF(c,j_,k_);G_=k[H_>>2]|0}while((G_|0)!=(I_|0));q4=k[J_>>2]|0}OBa(q4);o4=L_;p4=y0;ug=7735;break Qb}while(0);M_=De+192|0;k[Ue>>2]=k[e>>2];i[Ue+4>>0]=i[e+4>>0]|0;Df=Ue+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ue+48|0,Gf|0);N_=x;x=0;do if(N_&1){r4=Ue;ug=7736}else{I_=yf;G_=k[I_+4>>2]|0;H_=Ue+60|0;k[H_>>2]=k[I_>>2];k[H_+4>>2]=G_;G_=Ue+72|0;k[G_>>2]=k[h>>2];i[G_+4>>0]=i[h+4>>0]|0;Df=Ue+80|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ue+120|0,bA|0);y0=x;x=0;if(y0&1){r4=G_;ug=7736;break}y0=Bf;L_=k[y0+4>>2]|0;J_=Ue+132|0;k[J_>>2]=k[y0>>2];k[J_+4>>2]=L_;k[Te>>2]=0;L_=Te+4|0;k[L_>>2]=0;k[Te+8>>2]=0;x=0;J_=Ba(563,144)|0;y0=x;x=0;Sb:do if(y0&1){H_=Hc()|0;s4=H_;t4=M;ug=7745}else{k[L_>>2]=J_;k[Te>>2]=J_;k[Te+8>>2]=J_+144;k[J_>>2]=k[Ue>>2];i[J_+4>>0]=i[Ue+4>>0]|0;Df=J_+8|0;Ef=Ue+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,J_+48|0,Ue+48|0);H_=x;x=0;do if(!(H_&1)){I_=Ue+60|0;j_=k[I_+4>>2]|0;k_=J_+60|0;k[k_>>2]=k[I_>>2];k[k_+4>>2]=j_;j_=J_+72|0;k[L_>>2]=j_;k_=Ue+72|0;k[j_>>2]=k[k_>>2];i[j_+4>>0]=i[k_+4>>0]|0;Df=J_+80|0;Ef=Ue+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,J_+120|0,Ue+120|0);k_=x;x=0;if(k_&1)break;k_=Ue+132|0;j_=k[k_+4>>2]|0;I_=J_+132|0;k[I_>>2]=k[k_>>2];k[I_+4>>2]=j_;k[L_>>2]=(k[L_>>2]|0)+72;k[Se>>2]=1;i[Se+4>>0]=1;k[Se+8>>2]=1;k[Se+40>>2]=1;x=0;xa(712,Se+48|0,Te|0);j_=x;x=0;do if(j_&1){u4=Se;ug=7746}else{k[Se+60>>2]=0;k[Se+64>>2]=0;I_=Se+72|0;k[I_>>2]=k[j>>2];i[I_+4>>0]=i[j+4>>0]|0;Df=Se+80|0;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Se+120|0,u1|0);k_=x;x=0;if(k_&1){u4=I_;ug=7746;break}k_=Cf;h_=k[k_+4>>2]|0;F_=Se+132|0;k[F_>>2]=k[k_>>2];k[F_+4>>2]=h_;k[Re>>2]=0;h_=Re+4|0;k[h_>>2]=0;k[Re+8>>2]=0;x=0;F_=Ba(563,144)|0;k_=x;x=0;Tb:do if(k_&1){w_=Hc()|0;v4=w_;w4=M;ug=7747}else{k[h_>>2]=F_;k[Re>>2]=F_;k[Re+8>>2]=F_+144;k[F_>>2]=k[Se>>2];i[F_+4>>0]=i[Se+4>>0]|0;Df=F_+8|0;Ef=Se+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,F_+48|0,Se+48|0);w_=x;x=0;do if(!(w_&1)){E_=Se+60|0;v_=k[E_+4>>2]|0;u_=F_+60|0;k[u_>>2]=k[E_>>2];k[u_+4>>2]=v_;v_=F_+72|0;k[h_>>2]=v_;u_=Se+72|0;k[v_>>2]=k[u_>>2];i[v_+4>>0]=i[u_+4>>0]|0;Df=F_+80|0;Ef=Se+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,F_+120|0,Se+120|0);u_=x;x=0;if(u_&1)break;u_=Se+132|0;v_=k[u_+4>>2]|0;E_=F_+132|0;k[E_>>2]=k[u_>>2];k[E_+4>>2]=v_;k[h_>>2]=(k[h_>>2]|0)+72;k[Qe>>2]=1;i[Qe+4>>0]=1;v_=Qe+8|0;k[v_>>2]=3;k[Qe+40>>2]=1;E_=Qe+48|0;x=0;xa(712,E_|0,Re|0);u_=x;x=0;do if(u_&1){t_=Hc()|0;x4=M_;y4=1;z4=t_;A4=M}else{t_=Qe+60|0;k[t_>>2]=0;k[Qe+64>>2]=0;k[We>>2]=k[h>>2];i[We+4>>0]=i[h+4>>0]|0;s_=We+8|0;Df=s_;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));C_=We+48|0;x=0;xa(712,C_|0,bA|0);r_=x;x=0;Ub:do if(r_&1){q_=Hc()|0;B4=M_;C4=1;D4=q_;E4=M}else{q_=We+60|0;p_=Bf;o_=k[p_+4>>2]|0;A_=q_;k[A_>>2]=k[p_>>2];k[A_+4>>2]=o_;o_=We+72|0;k[o_>>2]=k[j>>2];i[o_+4>>0]=i[j+4>>0]|0;A_=We+80|0;Df=A_;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));p_=We+120|0;x=0;xa(712,p_|0,u1|0);n_=x;x=0;do if(n_&1){m_=Hc()|0;F4=m_;G4=M}else{m_=We+132|0;x_=Cf;$X=k[x_>>2]|0;l_=k[x_+4>>2]|0;x_=m_;k[x_>>2]=$X;k[x_+4>>2]=l_;x_=We+144|0;k[x_>>2]=k[e>>2];i[x_+4>>0]=i[e+4>>0]|0;i_=We+152|0;Df=i_;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));g_=We+192|0;x=0;xa(712,g_|0,Gf|0);x0=x;x=0;if(x0&1){x0=Hc()|0;w0=M;v0=We+120|0;u0=k[v0>>2]|0;if(!u0){F4=x0;G4=w0;break}t0=We+124|0;s0=k[t0>>2]|0;if((s0|0)==(u0|0))H4=u0;else{r0=We+128|0;f_=s0;do{s0=f_+-72|0;k[t0>>2]=s0;i[c>>0]=i[d>>0]|0;uF(c,r0,s0);f_=k[t0>>2]|0}while((f_|0)!=(u0|0));H4=k[v0>>2]|0}OBa(H4);F4=x0;G4=w0;break}u0=yf;f_=k[u0>>2]|0;t0=k[u0+4>>2]|0;u0=We+204|0;k[u0>>2]=f_;k[u0+4>>2]=t0;u0=Ve+16|0;k[u0>>2]=0;x=0;r0=Ba(563,224)|0;s0=x;x=0;do if(s0&1){e_=Hc()|0;I4=1;J4=e_;K4=M;L4=M_}else{k[r0>>2]=30224;e_=r0+8|0;k[e_>>2]=k[We>>2];i[e_+4>>0]=i[We+4>>0]|0;Df=r0+16|0;Ef=s_;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[r0+56>>2]=k[C_>>2];e_=We+52|0;k[r0+60>>2]=k[e_>>2];c_=We+56|0;k[r0+64>>2]=k[c_>>2];k[c_>>2]=0;k[e_>>2]=0;k[C_>>2]=0;c_=q_;b_=k[c_+4>>2]|0;a_=r0+68|0;k[a_>>2]=k[c_>>2];k[a_+4>>2]=b_;b_=r0+80|0;k[b_>>2]=k[o_>>2];i[b_+4>>0]=i[o_+4>>0]|0;Df=r0+88|0;Ef=A_;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[r0+128>>2]=k[p_>>2];b_=We+124|0;k[r0+132>>2]=k[b_>>2];a_=We+128|0;k[r0+136>>2]=k[a_>>2];k[a_>>2]=0;k[b_>>2]=0;k[p_>>2]=0;a_=m_;c_=k[a_+4>>2]|0;_Z=r0+140|0;k[_Z>>2]=k[a_>>2];k[_Z+4>>2]=c_;c_=r0+152|0;k[c_>>2]=k[x_>>2];i[c_+4>>0]=i[x_+4>>0]|0;Df=r0+160|0;Ef=i_;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[r0+200>>2]=k[g_>>2];c_=We+196|0;k[r0+204>>2]=k[c_>>2];_Z=We+200|0;k[r0+208>>2]=k[_Z>>2];k[_Z>>2]=0;k[c_>>2]=0;k[g_>>2]=0;_Z=r0+212|0;k[_Z>>2]=f_;k[_Z+4>>2]=t0;k[u0>>2]=r0;k[M_>>2]=k[Qe>>2];i[M_+4>>0]=i[Qe+4>>0]|0;Df=De+200|0;Ef=v_;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,De+240|0,E_|0);_Z=x;x=0;Vb:do if(_Z&1){a_=Hc()|0;M4=M;N4=a_;ug=7765}else{a_=t_;ZZ=k[a_+4>>2]|0;YZ=De+252|0;k[YZ>>2]=k[a_>>2];k[YZ+4>>2]=ZZ;ZZ=De+264|0;YZ=k[u0>>2]|0;Wb:do if(!YZ)k[De+280>>2]=0;else{do if((YZ|0)==(Ve|0)){k[De+280>>2]=ZZ;x=0;xa(k[(k[YZ>>2]|0)+12>>2]|0,YZ|0,ZZ|0);a_=x;x=0;if(!(a_&1))break Wb}else{x=0;a_=Ba(k[(k[YZ>>2]|0)+8>>2]|0,YZ|0)|0;XZ=x;x=0;if(XZ&1)break;k[De+280>>2]=a_;break Wb}while(0);a_=Hc()|0;XZ=M;WZ=De+240|0;VZ=k[WZ>>2]|0;if(!VZ){M4=XZ;N4=a_;ug=7765;break Vb}q0=De+244|0;p0=k[q0>>2]|0;if((p0|0)==(VZ|0))O4=VZ;else{o0=De+248|0;n0=p0;do{p0=n0+-72|0;k[q0>>2]=p0;i[c>>0]=i[d>>0]|0;uF(c,o0,p0);n0=k[q0>>2]|0}while((n0|0)!=(VZ|0));O4=k[WZ>>2]|0}OBa(O4);M4=XZ;N4=a_;ug=7765;break Vb}while(0);YZ=De+288|0;k[Ze>>2]=k[h>>2];i[Ze+4>>0]=i[h+4>>0]|0;Df=Ze+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,Ze+48|0,bA|0);ZZ=x;x=0;Xb:do if(ZZ&1){VZ=Hc()|0;P4=Ze;Q4=1;R4=1;S4=VZ;T4=M;U4=YZ}else{VZ=Bf;n0=k[VZ+4>>2]|0;q0=Ze+60|0;k[q0>>2]=k[VZ>>2];k[q0+4>>2]=n0;n0=Ze+72|0;k[$e>>2]=k[j>>2];i[$e+4>>0]=i[j+4>>0]|0;Df=$e+8|0;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$e+48|0,u1|0);a_=x;x=0;do if(a_&1)V4=$e;else{XZ=$e+60|0;k[XZ>>2]=$X;k[XZ+4>>2]=l_;XZ=$e+72|0;k[XZ>>2]=k[e>>2];i[XZ+4>>0]=i[e+4>>0]|0;Df=$e+80|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,$e+120|0,Gf|0);WZ=x;x=0;if(WZ&1){V4=XZ;break}WZ=yf;q0=k[WZ+4>>2]|0;VZ=$e+132|0;k[VZ>>2]=k[WZ>>2];k[VZ+4>>2]=q0;k[_e>>2]=0;q0=_e+4|0;k[q0>>2]=0;k[_e+8>>2]=0;x=0;VZ=Ba(563,144)|0;WZ=x;x=0;Yb:do if(WZ&1){o0=Hc()|0;W4=o0;X4=M;ug=7776}else{k[q0>>2]=VZ;k[_e>>2]=VZ;k[_e+8>>2]=VZ+144;k[VZ>>2]=k[$e>>2];i[VZ+4>>0]=i[$e+4>>0]|0;Df=VZ+8|0;Ef=$e+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,VZ+48|0,$e+48|0);o0=x;x=0;do if(!(o0&1)){p0=$e+60|0;m0=k[p0+4>>2]|0;l0=VZ+60|0;k[l0>>2]=k[p0>>2];k[l0+4>>2]=m0;m0=VZ+72|0;k[q0>>2]=m0;l0=$e+72|0;k[m0>>2]=k[l0>>2];i[m0+4>>0]=i[l0+4>>0]|0;Df=VZ+80|0;Ef=$e+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,VZ+120|0,$e+120|0);l0=x;x=0;if(l0&1)break;l0=$e+132|0;m0=k[l0+4>>2]|0;p0=VZ+132|0;k[p0>>2]=k[l0>>2];k[p0+4>>2]=m0;k[q0>>2]=(k[q0>>2]|0)+72;k[n0>>2]=1;i[Ze+76>>0]=1;k[Ze+80>>2]=1;k[Ze+112>>2]=1;x=0;xa(712,Ze+120|0,_e|0);m0=x;x=0;do if(m0&1){p0=Hc()|0;Y4=1;Z4=1;_4=p0;$4=M;a5=YZ}else{k[Ze+132>>2]=0;k[Ze+136>>2]=0;k[Ye>>2]=0;p0=Ye+4|0;k[p0>>2]=0;k[Ye+8>>2]=0;x=0;l0=Ba(563,144)|0;k0=x;x=0;Zb:do if(k0&1){UZ=Hc()|0;b5=UZ;c5=M;ug=7778}else{k[p0>>2]=l0;k[Ye>>2]=l0;k[Ye+8>>2]=l0+144;k[l0>>2]=k[Ze>>2];i[l0+4>>0]=i[Ze+4>>0]|0;Df=l0+8|0;Ef=Ze+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,l0+48|0,Ze+48|0);UZ=x;x=0;do if(!(UZ&1)){TZ=Ze+60|0;RZ=k[TZ+4>>2]|0;OZ=l0+60|0;k[OZ>>2]=k[TZ>>2];k[OZ+4>>2]=RZ;RZ=l0+72|0;k[p0>>2]=RZ;OZ=Ze+72|0;k[RZ>>2]=k[OZ>>2];i[RZ+4>>0]=i[OZ+4>>0]|0;Df=l0+80|0;Ef=Ze+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,l0+120|0,Ze+120|0);OZ=x;x=0;if(OZ&1)break;OZ=Ze+132|0;RZ=k[OZ+4>>2]|0;TZ=l0+132|0;k[TZ>>2]=k[OZ>>2];k[TZ+4>>2]=RZ;k[p0>>2]=(k[p0>>2]|0)+72;k[Xe>>2]=1;i[Xe+4>>0]=1;RZ=Xe+8|0;k[RZ>>2]=3;k[Xe+40>>2]=1;TZ=Xe+48|0;x=0;xa(712,TZ|0,Ye|0);OZ=x;x=0;do if(OZ&1){QZ=Hc()|0;d5=1;e5=QZ;f5=M;g5=YZ}else{QZ=Xe+60|0;k[QZ>>2]=0;k[Xe+64>>2]=0;k[bf>>2]=k[h>>2];i[bf+4>>0]=i[h+4>>0]|0;PZ=bf+8|0;Df=PZ;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));NZ=bf+48|0;x=0;xa(712,NZ|0,bA|0);MZ=x;x=0;_b:do if(MZ&1){LZ=Hc()|0;h5=1;j5=YZ;k5=LZ;l5=M}else{LZ=bf+60|0;JZ=Bf;IZ=k[JZ+4>>2]|0;HZ=LZ;k[HZ>>2]=k[JZ>>2];k[HZ+4>>2]=IZ;IZ=bf+72|0;k[IZ>>2]=k[j>>2];i[IZ+4>>0]=i[j+4>>0]|0;HZ=bf+80|0;Df=HZ;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));JZ=bf+120|0;x=0;xa(712,JZ|0,u1|0);iZ=x;x=0;do if(iZ&1){hZ=Hc()|0;m5=hZ;n5=M}else{hZ=bf+132|0;GZ=Cf;fZ=k[GZ>>2]|0;FZ=k[GZ+4>>2]|0;GZ=hZ;k[GZ>>2]=fZ;k[GZ+4>>2]=FZ;GZ=bf+144|0;k[GZ>>2]=k[e>>2];i[GZ+4>>0]=i[e+4>>0]|0;wZ=bf+152|0;Df=wZ;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));EZ=bf+192|0;x=0;xa(712,EZ|0,Gf|0);vZ=x;x=0;if(vZ&1){vZ=Hc()|0;uZ=M;tZ=bf+120|0;sZ=k[tZ>>2]|0;if(!sZ){m5=vZ;n5=uZ;break}CZ=bf+124|0;rZ=k[CZ>>2]|0;if((rZ|0)==(sZ|0))o5=sZ;else{qZ=bf+128|0;xZ=rZ;do{rZ=xZ+-72|0;k[CZ>>2]=rZ;i[c>>0]=i[d>>0]|0;uF(c,qZ,rZ);xZ=k[CZ>>2]|0}while((xZ|0)!=(sZ|0));o5=k[tZ>>2]|0}OBa(o5);m5=vZ;n5=uZ;break}sZ=yf;xZ=k[sZ>>2]|0;CZ=k[sZ+4>>2]|0;sZ=bf+204|0;k[sZ>>2]=xZ;k[sZ+4>>2]=CZ;sZ=af+16|0;k[sZ>>2]=0;x=0;qZ=Ba(563,224)|0;rZ=x;x=0;do if(rZ&1){nZ=Hc()|0;p5=YZ;q5=nZ;r5=M;s5=1}else{k[qZ>>2]=30268;nZ=qZ+8|0;k[nZ>>2]=k[bf>>2];i[nZ+4>>0]=i[bf+4>>0]|0;Df=qZ+16|0;Ef=PZ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[qZ+56>>2]=k[NZ>>2];nZ=bf+52|0;k[qZ+60>>2]=k[nZ>>2];mZ=bf+56|0;k[qZ+64>>2]=k[mZ>>2];k[mZ>>2]=0;k[nZ>>2]=0;k[NZ>>2]=0;mZ=LZ;AZ=k[mZ+4>>2]|0;lZ=qZ+68|0;k[lZ>>2]=k[mZ>>2];k[lZ+4>>2]=AZ;AZ=qZ+80|0;k[AZ>>2]=k[IZ>>2];i[AZ+4>>0]=i[IZ+4>>0]|0;Df=qZ+88|0;Ef=HZ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[qZ+128>>2]=k[JZ>>2];AZ=bf+124|0;k[qZ+132>>2]=k[AZ>>2];lZ=bf+128|0;k[qZ+136>>2]=k[lZ>>2];k[lZ>>2]=0;k[AZ>>2]=0;k[JZ>>2]=0;lZ=hZ;mZ=k[lZ+4>>2]|0;kZ=qZ+140|0;k[kZ>>2]=k[lZ>>2];k[kZ+4>>2]=mZ;mZ=qZ+152|0;k[mZ>>2]=k[GZ>>2];i[mZ+4>>0]=i[GZ+4>>0]|0;Df=qZ+160|0;Ef=wZ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[qZ+200>>2]=k[EZ>>2];mZ=bf+196|0;k[qZ+204>>2]=k[mZ>>2];kZ=bf+200|0;k[qZ+208>>2]=k[kZ>>2];k[kZ>>2]=0;k[mZ>>2]=0;k[EZ>>2]=0;kZ=qZ+212|0;k[kZ>>2]=xZ;k[kZ+4>>2]=CZ;k[sZ>>2]=qZ;k[YZ>>2]=k[Xe>>2];i[YZ+4>>0]=i[Xe+4>>0]|0;Df=De+296|0;Ef=RZ;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,De+336|0,TZ|0);kZ=x;x=0;$b:do if(kZ&1){lZ=Hc()|0;t5=M;u5=lZ;ug=7796}else{lZ=QZ;jZ=k[lZ+4>>2]|0;gZ=De+348|0;k[gZ>>2]=k[lZ>>2];k[gZ+4>>2]=jZ;jZ=De+360|0;gZ=k[sZ>>2]|0;ac:do if(!gZ)k[De+376>>2]=0;else{do if((gZ|0)==(af|0)){k[De+376>>2]=jZ;x=0;xa(k[(k[gZ>>2]|0)+12>>2]|0,gZ|0,jZ|0);lZ=x;x=0;if(!(lZ&1))break ac}else{x=0;lZ=Ba(k[(k[gZ>>2]|0)+8>>2]|0,gZ|0)|0;eZ=x;x=0;if(eZ&1)break;k[De+376>>2]=lZ;break ac}while(0);lZ=Hc()|0;eZ=M;j0=De+336|0;i0=k[j0>>2]|0;if(!i0){t5=eZ;u5=lZ;ug=7796;break $b}h0=De+340|0;g0=k[h0>>2]|0;if((g0|0)==(i0|0))v5=i0;else{f0=De+344|0;e0=g0;do{g0=e0+-72|0;k[h0>>2]=g0;i[c>>0]=i[d>>0]|0;uF(c,f0,g0);e0=k[h0>>2]|0}while((e0|0)!=(i0|0));v5=k[j0>>2]|0}OBa(v5);t5=eZ;u5=lZ;ug=7796;break $b}while(0);gZ=De+384|0;k[ef>>2]=k[h>>2];i[ef+4>>0]=i[h+4>>0]|0;Df=ef+8|0;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,ef+48|0,bA|0);jZ=x;x=0;bc:do if(jZ&1){i0=Hc()|0;w5=ef;x5=1;y5=i0;z5=M;A5=1}else{i0=Bf;e0=k[i0+4>>2]|0;h0=ef+60|0;k[h0>>2]=k[i0>>2];k[h0+4>>2]=e0;e0=ef+72|0;k[gf>>2]=k[e>>2];i[gf+4>>0]=i[e+4>>0]|0;Df=gf+8|0;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,gf+48|0,Gf|0);lZ=x;x=0;do if(lZ&1)B5=gf;else{eZ=yf;j0=k[eZ+4>>2]|0;h0=gf+60|0;k[h0>>2]=k[eZ>>2];k[h0+4>>2]=j0;j0=gf+72|0;k[j0>>2]=k[j>>2];i[j0+4>>0]=i[j+4>>0]|0;Df=gf+80|0;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,gf+120|0,u1|0);h0=x;x=0;if(h0&1){B5=j0;break}h0=gf+132|0;k[h0>>2]=fZ;k[h0+4>>2]=FZ;k[ff>>2]=0;h0=ff+4|0;k[h0>>2]=0;k[ff+8>>2]=0;x=0;eZ=Ba(563,144)|0;i0=x;x=0;cc:do if(i0&1){f0=Hc()|0;C5=f0;D5=M;ug=7807}else{k[h0>>2]=eZ;k[ff>>2]=eZ;k[ff+8>>2]=eZ+144;k[eZ>>2]=k[gf>>2];i[eZ+4>>0]=i[gf+4>>0]|0;Df=eZ+8|0;Ef=gf+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,eZ+48|0,gf+48|0);f0=x;x=0;do if(!(f0&1)){g0=gf+60|0;d0=k[g0+4>>2]|0;dZ=eZ+60|0;k[dZ>>2]=k[g0>>2];k[dZ+4>>2]=d0;d0=eZ+72|0;k[h0>>2]=d0;dZ=gf+72|0;k[d0>>2]=k[dZ>>2];i[d0+4>>0]=i[dZ+4>>0]|0;Df=eZ+80|0;Ef=gf+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,eZ+120|0,gf+120|0);dZ=x;x=0;if(dZ&1)break;dZ=gf+132|0;d0=k[dZ+4>>2]|0;g0=eZ+132|0;k[g0>>2]=k[dZ>>2];k[g0+4>>2]=d0;k[h0>>2]=(k[h0>>2]|0)+72;k[e0>>2]=1;i[ef+76>>0]=1;k[ef+80>>2]=1;k[ef+112>>2]=1;x=0;xa(712,ef+120|0,ff|0);d0=x;x=0;do if(d0&1){g0=Hc()|0;E5=1;F5=g0;G5=M;H5=1}else{k[ef+132>>2]=0;k[ef+136>>2]=0;k[df>>2]=0;g0=df+4|0;k[g0>>2]=0;k[df+8>>2]=0;x=0;dZ=Ba(563,144)|0;cZ=x;x=0;dc:do if(cZ&1){aZ=Hc()|0;I5=aZ;J5=M;ug=7809}else{k[g0>>2]=dZ;k[df>>2]=dZ;k[df+8>>2]=dZ+144;k[dZ>>2]=k[ef>>2];i[dZ+4>>0]=i[ef+4>>0]|0;Df=dZ+8|0;Ef=ef+8|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,dZ+48|0,ef+48|0);aZ=x;x=0;do if(!(aZ&1)){$Y=ef+60|0;_Y=k[$Y+4>>2]|0;YY=dZ+60|0;k[YY>>2]=k[$Y>>2];k[YY+4>>2]=_Y;_Y=dZ+72|0;k[g0>>2]=_Y;YY=ef+72|0;k[_Y>>2]=k[YY>>2];i[_Y+4>>0]=i[YY+4>>0]|0;Df=dZ+80|0;Ef=ef+80|0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,dZ+120|0,ef+120|0);YY=x;x=0;if(YY&1)break;YY=ef+132|0;_Y=k[YY+4>>2]|0;$Y=dZ+132|0;k[$Y>>2]=k[YY>>2];k[$Y+4>>2]=_Y;k[g0>>2]=(k[g0>>2]|0)+72;k[cf>>2]=1;i[cf+4>>0]=1;_Y=cf+8|0;k[_Y>>2]=3;k[cf+40>>2]=1;$Y=cf+48|0;x=0;xa(712,$Y|0,df|0);YY=x;x=0;do if(YY&1){XY=Hc()|0;K5=XY;L5=M;M5=1}else{XY=cf+60|0;k[XY>>2]=0;k[cf+64>>2]=0;k[jf>>2]=k[h>>2];i[jf+4>>0]=i[h+4>>0]|0;WY=jf+8|0;Df=WY;Ef=tf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));VY=jf+48|0;x=0;xa(712,VY|0,bA|0);UY=x;x=0;ec:do if(UY&1){TY=Hc()|0;N5=1;O5=TY;P5=M}else{TY=jf+60|0;c0=Bf;b0=k[c0+4>>2]|0;a0=TY;k[a0>>2]=k[c0>>2];k[a0+4>>2]=b0;b0=jf+72|0;k[b0>>2]=k[j>>2];i[b0+4>>0]=i[j+4>>0]|0;a0=jf+80|0;Df=a0;Ef=vf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));c0=jf+120|0;x=0;xa(712,c0|0,u1|0);$$=x;x=0;do if($$&1){_$=Hc()|0;Q5=_$;R5=M}else{_$=jf+132|0;Z$=Cf;Y$=k[Z$+4>>2]|0;SY=_$;k[SY>>2]=k[Z$>>2];k[SY+4>>2]=Y$;Y$=jf+144|0;k[Y$>>2]=k[e>>2];i[Y$+4>>0]=i[e+4>>0]|0;SY=jf+152|0;Df=SY;Ef=nf;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));Z$=jf+192|0;x=0;xa(712,Z$|0,Gf|0);RY=x;x=0;if(RY&1){RY=Hc()|0;PY=M;MY=jf+120|0;OY=k[MY>>2]|0;if(!OY){Q5=RY;R5=PY;break}NY=jf+124|0;LY=k[NY>>2]|0;if((LY|0)==(OY|0))S5=OY;else{KY=jf+128|0;JY=LY;do{LY=JY+-72|0;k[NY>>2]=LY;i[c>>0]=i[d>>0]|0;uF(c,KY,LY);JY=k[NY>>2]|0}while((JY|0)!=(OY|0));S5=k[MY>>2]|0}OBa(S5);Q5=RY;R5=PY;break}OY=yf;JY=k[OY>>2]|0;NY=k[OY+4>>2]|0;OY=jf+204|0;k[OY>>2]=JY;k[OY+4>>2]=NY;OY=hf+16|0;k[OY>>2]=0;x=0;KY=Ba(563,224)|0;LY=x;x=0;do if(LY&1){HY=Hc()|0;T5=1;U5=HY;V5=M}else{k[KY>>2]=30312;HY=KY+8|0;k[HY>>2]=k[jf>>2];i[HY+4>>0]=i[jf+4>>0]|0;Df=KY+16|0;Ef=WY;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[KY+56>>2]=k[VY>>2];HY=jf+52|0;k[KY+60>>2]=k[HY>>2];GY=jf+56|0;k[KY+64>>2]=k[GY>>2];k[GY>>2]=0;k[HY>>2]=0;k[VY>>2]=0;GY=TY;FY=k[GY+4>>2]|0;iY=KY+68|0;k[iY>>2]=k[GY>>2];k[iY+4>>2]=FY;FY=KY+80|0;k[FY>>2]=k[b0>>2];i[FY+4>>0]=i[b0+4>>0]|0;Df=KY+88|0;Ef=a0;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[KY+128>>2]=k[c0>>2];FY=jf+124|0;k[KY+132>>2]=k[FY>>2];iY=jf+128|0;k[KY+136>>2]=k[iY>>2];k[iY>>2]=0;k[FY>>2]=0;k[c0>>2]=0;iY=_$;GY=k[iY+4>>2]|0;hY=KY+140|0;k[hY>>2]=k[iY>>2];k[hY+4>>2]=GY;GY=KY+152|0;k[GY>>2]=k[Y$>>2];i[GY+4>>0]=i[Y$+4>>0]|0;Df=KY+160|0;Ef=SY;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));k[KY+200>>2]=k[Z$>>2];GY=jf+196|0;k[KY+204>>2]=k[GY>>2];hY=jf+200|0;k[KY+208>>2]=k[hY>>2];k[hY>>2]=0;k[GY>>2]=0;k[Z$>>2]=0;hY=KY+212|0;k[hY>>2]=JY;k[hY+4>>2]=NY;k[OY>>2]=KY;k[gZ>>2]=k[cf>>2];i[gZ+4>>0]=i[cf+4>>0]|0;Df=De+392|0;Ef=_Y;Ff=Df+40|0;do{k[Df>>2]=k[Ef>>2];Df=Df+4|0;Ef=Ef+4|0}while((Df|0)<(Ff|0));x=0;xa(712,De+432|0,$Y|0);hY=x;x=0;fc:do if(hY&1){iY=Hc()|0;W5=M;X5=iY;ug=7827}else{iY=XY;EY=k[iY+4>>2]|0;fY=De+444|0;k[fY>>2]=k[iY>>2];k[fY+4>>2]=EY;EY=De+456|0;fY=k[OY>>2]|0;gc:do if(!fY)k[De+472>>2]=0;else{do if((fY|0)==(hf|0)){k[De+472>>2]=EY;x=0;xa(k[(k[fY>>2]|0)+12>>2]|0,fY|0,EY|0);iY=x;x=0;if(!(iY&1))break gc}else{x=0;iY=Ba(k[(k[fY>>2]|0)+8>>2]|0,fY|0)|0;DY=x;x=0;if(DY&1)break;k[De+472>>2]=iY;break gc}while(0);iY=Hc()|0;DY=M;uY=De+432|0;CY=k[uY>>2]|0;if(!CY){W5=DY;X5=iY;ug=7827;break fc}tY=De+436|0;sY=k[tY>>2]|0;if((sY|0)==(CY|0))Y5=CY;else{rY=De+440|0;qY=sY;do{sY=qY+-72|0;k[tY>>2]=sY;i[c>>0]=i[d>>0]|0;uF(c,rY,sY);qY=k[tY>>2]|0}while((qY|0)!=(CY|0));Y5=k[uY>>2]|0}OBa(Y5);W5=DY;X5=iY;ug=7827;break fc}while(0);k[Ce>>2]=0;fY=Ce+4|0;k[fY>>2]=0;k[Ce+8>>2]=0;x=0;EY=Ba(563,480)|0;CY=x;x=0;do if(CY&1)ug=7307;else{k[fY>>2]=EY;k[Ce>>2]=EY;k[Ce+8>>2]=EY+480;qY=De+480|0;x=0;fb(215,Ce|0,De|0,qY|0);tY=x;x=0;if(tY&1){ug=7307;break}x=0;Ta(550,lf|0,Ce|0)|0;tY=x;x=0;if(tY&1){tY=Hc()|0;rY=M;sY=k[Ce>>2]|0;if(!sY){Z5=tY;_5=rY;$5=qY;break}AY=k[fY>>2]|0;if((AY|0)==(sY|0))a6=sY;else{pY=AY;while(1){AY=pY+-96|0;k[fY>>2]=AY;oY=k[pY+-8>>2]|0;do if((oY|0)==(pY+-24|0))Sf[k[(k[oY>>2]|0)+16>>2]&2047](oY);else{if(!oY)break;Sf[k[(k[oY>>2]|0)+20>>2]&2047](oY)}while(0);oY=pY+-48|0;nY=k[oY>>2]|0;if(!nY)b6=AY;else{mY=pY+-44|0;yY=k[mY>>2]|0;if((yY|0)==(nY|0)){c6=AY;d6=nY}else{lY=pY+-40|0;kY=yY;do{yY=kY+-72|0;k[mY>>2]=yY;i[c>>0]=i[d>>0]|0;uF(c,lY,yY);kY=k[mY>>2]|0}while((kY|0)!=(nY|0));c6=k[fY>>2]|0;d6=k[oY>>2]|0}OBa(d6);b6=c6}if((b6|0)==(sY|0))break;else pY=b6}a6=k[Ce>>2]|0}OBa(a6);Z5=tY;_5=rY;$5=qY;break}pY=k[Ce>>2]|0;if(pY){sY=k[fY>>2]|0;if((sY|0)==(pY|0))e6=pY;else{iY=sY;while(1){sY=iY+-96|0;k[fY>>2]=sY;DY=k[iY+-8>>2]|0;do if((DY|0)==(iY+-24|0))Sf[k[(k[DY>>2]|0)+16>>2]&2047](DY);else{if(!DY)break;Sf[k[(k[DY>>2]|0)+20>>2]&2047](DY)}while(0);DY=iY+-48|0;oY=k[DY>>2]|0;if(!oY)f6=sY;else{uY=iY+-44|0;nY=k[uY>>2]|0;if((nY|0)==(oY|0)){g6=sY;h6=oY}else{kY=iY+-40|0;mY=nY;do{nY=mY+-72|0;k[uY>>2]=nY;i[c>>0]=i[d>>0]|0;uF(c,kY,nY);mY=k[uY>>2]|0}while((mY|0)!=(oY|0));g6=k[fY>>2]|0;h6=k[DY>>2]|0}OBa(h6);f6=g6}if((f6|0)==(pY|0))break;else iY=f6}e6=k[Ce>>2]|0}OBa(e6)}iY=qY;do{pY=k[iY+-8>>2]|0;do if((pY|0)==(iY+-24|0))Sf[k[(k[pY>>2]|0)+16>>2]&2047](pY);else{if(!pY)break;Sf[k[(k[pY>>2]|0)+20>>2]&2047](pY)}while(0);pY=iY+-48|0;DY=k[pY>>2]|0;if(DY){rY=iY+-44|0;tY=k[rY>>2]|0;if((tY|0)==(DY|0))j6=DY;else{oY=iY+-40|0;mY=tY;do{tY=mY+-72|0;k[rY>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,oY,tY);mY=k[rY>>2]|0}while((mY|0)!=(DY|0));j6=k[pY>>2]|0}OBa(j6)}iY=iY+-96|0}while((iY|0)!=(De|0));iY=k[OY>>2]|0;do if((iY|0)==(hf|0))Sf[k[(k[hf>>2]|0)+16>>2]&2047](hf);else{if(!iY)break;Sf[k[(k[iY>>2]|0)+20>>2]&2047](iY)}while(0);iY=jf+192|0;qY=k[iY>>2]|0;if(qY){DY=k[GY>>2]|0;if((DY|0)==(qY|0))k6=qY;else{mY=jf+200|0;rY=DY;do{DY=rY+-72|0;k[GY>>2]=DY;i[c>>0]=i[d>>0]|0;uF(c,mY,DY);rY=k[GY>>2]|0}while((rY|0)!=(qY|0));k6=k[iY>>2]|0}OBa(k6)}qY=jf+120|0;rY=k[qY>>2]|0;if(rY){mY=k[FY>>2]|0;if((mY|0)==(rY|0))l6=rY;else{DY=jf+128|0;oY=mY;do{mY=oY+-72|0;k[FY>>2]=mY;i[c>>0]=i[d>>0]|0;uF(c,DY,mY);oY=k[FY>>2]|0}while((oY|0)!=(rY|0));l6=k[qY>>2]|0}OBa(l6)}rY=jf+48|0;oY=k[rY>>2]|0;if(oY){DY=k[HY>>2]|0;if((DY|0)==(oY|0))m6=oY;else{iY=jf+56|0;mY=DY;do{DY=mY+-72|0;k[HY>>2]=DY;i[c>>0]=i[d>>0]|0;uF(c,iY,DY);mY=k[HY>>2]|0}while((mY|0)!=(oY|0));m6=k[rY>>2]|0}OBa(m6)}oY=cf+48|0;mY=k[oY>>2]|0;if(mY){iY=cf+52|0;qY=k[iY>>2]|0;if((qY|0)==(mY|0))n6=mY;else{DY=cf+56|0;tY=qY;do{qY=tY+-72|0;k[iY>>2]=qY;i[c>>0]=i[d>>0]|0;uF(c,DY,qY);tY=k[iY>>2]|0}while((tY|0)!=(mY|0));n6=k[oY>>2]|0}OBa(n6)}mY=k[df>>2]|0;if(mY){tY=k[g0>>2]|0;if((tY|0)==(mY|0))o6=mY;else{iY=tY;while(1){tY=iY+-72|0;k[g0>>2]=tY;DY=iY+-24|0;rY=k[DY>>2]|0;if(!rY)p6=tY;else{qY=iY+-20|0;uY=k[qY>>2]|0;if((uY|0)==(rY|0)){q6=tY;r6=rY}else{tY=iY+-16|0;kY=uY;do{uY=kY+-72|0;k[qY>>2]=uY;i[c>>0]=i[d>>0]|0;uF(c,tY,uY);kY=k[qY>>2]|0}while((kY|0)!=(rY|0));q6=k[g0>>2]|0;r6=k[DY>>2]|0}OBa(r6);p6=q6}if((p6|0)==(mY|0))break;else iY=p6}o6=k[df>>2]|0}OBa(o6)}iY=ef+120|0;mY=k[iY>>2]|0;if(mY){oY=ef+124|0;rY=k[oY>>2]|0;if((rY|0)==(mY|0))s6=mY;else{kY=ef+128|0;qY=rY;do{rY=qY+-72|0;k[oY>>2]=rY;i[c>>0]=i[d>>0]|0;uF(c,kY,rY);qY=k[oY>>2]|0}while((qY|0)!=(mY|0));s6=k[iY>>2]|0}OBa(s6)}mY=ef+48|0;qY=k[mY>>2]|0;if(qY){oY=ef+52|0;kY=k[oY>>2]|0;if((kY|0)==(qY|0))t6=qY;else{rY=ef+56|0;tY=kY;do{kY=tY+-72|0;k[oY>>2]=kY;i[c>>0]=i[d>>0]|0;uF(c,rY,kY);tY=k[oY>>2]|0}while((tY|0)!=(qY|0));t6=k[mY>>2]|0}OBa(t6)}qY=k[ff>>2]|0;if(qY){tY=k[h0>>2]|0;if((tY|0)==(qY|0))u6=qY;else{oY=tY;while(1){tY=oY+-72|0;k[h0>>2]=tY;rY=oY+-24|0;iY=k[rY>>2]|0;if(!iY)v6=tY;else{kY=oY+-20|0;pY=k[kY>>2]|0;if((pY|0)==(iY|0)){w6=tY;x6=iY}else{tY=oY+-16|0;uY=pY;do{pY=uY+-72|0;k[kY>>2]=pY;i[c>>0]=i[d>>0]|0;uF(c,tY,pY);uY=k[kY>>2]|0}while((uY|0)!=(iY|0));w6=k[h0>>2]|0;x6=k[rY>>2]|0}OBa(x6);v6=w6}if((v6|0)==(qY|0))break;else oY=v6}u6=k[ff>>2]|0}OBa(u6)}oY=gf+120|0;qY=k[oY>>2]|0;if(qY){mY=gf+124|0;iY=k[mY>>2]|0;if((iY|0)==(qY|0))y6=qY;else{uY=gf+128|0;kY=iY;do{iY=kY+-72|0;k[mY>>2]=iY;i[c>>0]=i[d>>0]|0;uF(c,uY,iY);kY=k[mY>>2]|0}while((kY|0)!=(qY|0));y6=k[oY>>2]|0}OBa(y6)}qY=gf+48|0;kY=k[qY>>2]|0;if(kY){mY=gf+52|0;uY=k[mY>>2]|0;if((uY|0)==(kY|0))z6=kY;else{iY=gf+56|0;tY=uY;do{uY=tY+-72|0;k[mY>>2]=uY;i[c>>0]=i[d>>0]|0;uF(c,iY,uY);tY=k[mY>>2]|0}while((tY|0)!=(kY|0));z6=k[qY>>2]|0}OBa(z6)}kY=k[sZ>>2]|0;do if((kY|0)==(af|0))Sf[k[(k[af>>2]|0)+16>>2]&2047](af);else{if(!kY)break;Sf[k[(k[kY>>2]|0)+20>>2]&2047](kY)}while(0);kY=bf+192|0;qY=k[kY>>2]|0;if(qY){tY=k[mZ>>2]|0;if((tY|0)==(qY|0))A6=qY;else{mY=bf+200|0;iY=tY;do{tY=iY+-72|0;k[mZ>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,mY,tY);iY=k[mZ>>2]|0}while((iY|0)!=(qY|0));A6=k[kY>>2]|0}OBa(A6)}qY=bf+120|0;iY=k[qY>>2]|0;if(iY){mY=k[AZ>>2]|0;if((mY|0)==(iY|0))B6=iY;else{tY=bf+128|0;oY=mY;do{mY=oY+-72|0;k[AZ>>2]=mY;i[c>>0]=i[d>>0]|0;uF(c,tY,mY);oY=k[AZ>>2]|0}while((oY|0)!=(iY|0));B6=k[qY>>2]|0}OBa(B6)}iY=bf+48|0;oY=k[iY>>2]|0;if(oY){tY=k[nZ>>2]|0;if((tY|0)==(oY|0))C6=oY;else{kY=bf+56|0;mY=tY;do{tY=mY+-72|0;k[nZ>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,kY,tY);mY=k[nZ>>2]|0}while((mY|0)!=(oY|0));C6=k[iY>>2]|0}OBa(C6)}oY=Xe+48|0;mY=k[oY>>2]|0;if(mY){kY=Xe+52|0;qY=k[kY>>2]|0;if((qY|0)==(mY|0))D6=mY;else{tY=Xe+56|0;uY=qY;do{qY=uY+-72|0;k[kY>>2]=qY;i[c>>0]=i[d>>0]|0;uF(c,tY,qY);uY=k[kY>>2]|0}while((uY|0)!=(mY|0));D6=k[oY>>2]|0}OBa(D6)}mY=k[Ye>>2]|0;if(mY){uY=k[p0>>2]|0;if((uY|0)==(mY|0))E6=mY;else{kY=uY;while(1){uY=kY+-72|0;k[p0>>2]=uY;tY=kY+-24|0;iY=k[tY>>2]|0;if(!iY)F6=uY;else{qY=kY+-20|0;DY=k[qY>>2]|0;if((DY|0)==(iY|0)){G6=uY;H6=iY}else{uY=kY+-16|0;pY=DY;do{DY=pY+-72|0;k[qY>>2]=DY;i[c>>0]=i[d>>0]|0;uF(c,uY,DY);pY=k[qY>>2]|0}while((pY|0)!=(iY|0));G6=k[p0>>2]|0;H6=k[tY>>2]|0}OBa(H6);F6=G6}if((F6|0)==(mY|0))break;else kY=F6}E6=k[Ye>>2]|0}OBa(E6)}kY=Ze+120|0;mY=k[kY>>2]|0;if(mY){oY=Ze+124|0;iY=k[oY>>2]|0;if((iY|0)==(mY|0))I6=mY;else{pY=Ze+128|0;qY=iY;do{iY=qY+-72|0;k[oY>>2]=iY;i[c>>0]=i[d>>0]|0;uF(c,pY,iY);qY=k[oY>>2]|0}while((qY|0)!=(mY|0));I6=k[kY>>2]|0}OBa(I6)}mY=Ze+48|0;qY=k[mY>>2]|0;if(qY){oY=Ze+52|0;pY=k[oY>>2]|0;if((pY|0)==(qY|0))J6=qY;else{iY=Ze+56|0;uY=pY;do{pY=uY+-72|0;k[oY>>2]=pY;i[c>>0]=i[d>>0]|0;uF(c,iY,pY);uY=k[oY>>2]|0}while((uY|0)!=(qY|0));J6=k[mY>>2]|0}OBa(J6)}qY=k[_e>>2]|0;if(qY){uY=k[q0>>2]|0;if((uY|0)==(qY|0))K6=qY;else{oY=uY;while(1){uY=oY+-72|0;k[q0>>2]=uY;iY=oY+-24|0;kY=k[iY>>2]|0;if(!kY)L6=uY;else{pY=oY+-20|0;rY=k[pY>>2]|0;if((rY|0)==(kY|0)){M6=uY;N6=kY}else{uY=oY+-16|0;DY=rY;do{rY=DY+-72|0;k[pY>>2]=rY;i[c>>0]=i[d>>0]|0;uF(c,uY,rY);DY=k[pY>>2]|0}while((DY|0)!=(kY|0));M6=k[q0>>2]|0;N6=k[iY>>2]|0}OBa(N6);L6=M6}if((L6|0)==(qY|0))break;else oY=L6}K6=k[_e>>2]|0}OBa(K6)}oY=$e+120|0;qY=k[oY>>2]|0;if(qY){mY=$e+124|0;kY=k[mY>>2]|0;if((kY|0)==(qY|0))O6=qY;else{DY=$e+128|0;pY=kY;do{kY=pY+-72|0;k[mY>>2]=kY;i[c>>0]=i[d>>0]|0;uF(c,DY,kY);pY=k[mY>>2]|0}while((pY|0)!=(qY|0));O6=k[oY>>2]|0}OBa(O6)}qY=$e+48|0;pY=k[qY>>2]|0;if(pY){mY=$e+52|0;DY=k[mY>>2]|0;if((DY|0)==(pY|0))P6=pY;else{kY=$e+56|0;uY=DY;do{DY=uY+-72|0;k[mY>>2]=DY;i[c>>0]=i[d>>0]|0;uF(c,kY,DY);uY=k[mY>>2]|0}while((uY|0)!=(pY|0));P6=k[qY>>2]|0}OBa(P6)}pY=k[u0>>2]|0;do if((pY|0)==(Ve|0))Sf[k[(k[Ve>>2]|0)+16>>2]&2047](Ve);else{if(!pY)break;Sf[k[(k[pY>>2]|0)+20>>2]&2047](pY)}while(0);pY=We+192|0;qY=k[pY>>2]|0;if(qY){uY=k[c_>>2]|0;if((uY|0)==(qY|0))Q6=qY;else{mY=We+200|0;kY=uY;do{uY=kY+-72|0;k[c_>>2]=uY;i[c>>0]=i[d>>0]|0;uF(c,mY,uY);kY=k[c_>>2]|0}while((kY|0)!=(qY|0));Q6=k[pY>>2]|0}OBa(Q6)}qY=We+120|0;kY=k[qY>>2]|0;if(kY){mY=k[b_>>2]|0;if((mY|0)==(kY|0))R6=kY;else{uY=We+128|0;oY=mY;do{mY=oY+-72|0;k[b_>>2]=mY;i[c>>0]=i[d>>0]|0;uF(c,uY,mY);oY=k[b_>>2]|0}while((oY|0)!=(kY|0));R6=k[qY>>2]|0}OBa(R6)}kY=We+48|0;oY=k[kY>>2]|0;if(oY){uY=k[e_>>2]|0;if((uY|0)==(oY|0))S6=oY;else{pY=We+56|0;mY=uY;do{uY=mY+-72|0;k[e_>>2]=uY;i[c>>0]=i[d>>0]|0;uF(c,pY,uY);mY=k[e_>>2]|0}while((mY|0)!=(oY|0));S6=k[kY>>2]|0}OBa(S6)}oY=Qe+48|0;mY=k[oY>>2]|0;if(mY){pY=Qe+52|0;qY=k[pY>>2]|0;if((qY|0)==(mY|0))T6=mY;else{uY=Qe+56|0;DY=qY;do{qY=DY+-72|0;k[pY>>2]=qY;i[c>>0]=i[d>>0]|0;uF(c,uY,qY);DY=k[pY>>2]|0}while((DY|0)!=(mY|0));T6=k[oY>>2]|0}OBa(T6)}mY=k[Re>>2]|0;if(mY){DY=k[h_>>2]|0;if((DY|0)==(mY|0))U6=mY;else{pY=DY;while(1){DY=pY+-72|0;k[h_>>2]=DY;uY=pY+-24|0;kY=k[uY>>2]|0;if(!kY)V6=DY;else{qY=pY+-20|0;tY=k[qY>>2]|0;if((tY|0)==(kY|0)){W6=DY;X6=kY}else{DY=pY+-16|0;rY=tY;do{tY=rY+-72|0;k[qY>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,DY,tY);rY=k[qY>>2]|0}while((rY|0)!=(kY|0));W6=k[h_>>2]|0;X6=k[uY>>2]|0}OBa(X6);V6=W6}if((V6|0)==(mY|0))break;else pY=V6}U6=k[Re>>2]|0}OBa(U6)}pY=Se+120|0;mY=k[pY>>2]|0;if(mY){oY=Se+124|0;kY=k[oY>>2]|0;if((kY|0)==(mY|0))Y6=mY;else{rY=Se+128|0;qY=kY;do{kY=qY+-72|0;k[oY>>2]=kY;i[c>>0]=i[d>>0]|0;uF(c,rY,kY);qY=k[oY>>2]|0}while((qY|0)!=(mY|0));Y6=k[pY>>2]|0}OBa(Y6)}mY=Se+48|0;qY=k[mY>>2]|0;if(qY){oY=Se+52|0;rY=k[oY>>2]|0;if((rY|0)==(qY|0))Z6=qY;else{kY=Se+56|0;DY=rY;do{rY=DY+-72|0;k[oY>>2]=rY;i[c>>0]=i[d>>0]|0;uF(c,kY,rY);DY=k[oY>>2]|0}while((DY|0)!=(qY|0));Z6=k[mY>>2]|0}OBa(Z6)}qY=k[Te>>2]|0;if(qY){DY=k[L_>>2]|0;if((DY|0)==(qY|0))_6=qY;else{oY=DY;while(1){DY=oY+-72|0;k[L_>>2]=DY;kY=oY+-24|0;pY=k[kY>>2]|0;if(!pY)$6=DY;else{rY=oY+-20|0;iY=k[rY>>2]|0;if((iY|0)==(pY|0)){a7=DY;b7=pY}else{DY=oY+-16|0;tY=iY;do{iY=tY+-72|0;k[rY>>2]=iY;i[c>>0]=i[d>>0]|0;uF(c,DY,iY);tY=k[rY>>2]|0}while((tY|0)!=(pY|0));a7=k[L_>>2]|0;b7=k[kY>>2]|0}OBa(b7);$6=a7}if(($6|0)==(qY|0))break;else oY=$6}_6=k[Te>>2]|0}OBa(_6)}oY=Ue+120|0;qY=k[oY>>2]|0;if(qY){mY=Ue+124|0;pY=k[mY>>2]|0;if((pY|0)==(qY|0))c7=qY;else{tY=Ue+128|0;rY=pY;do{pY=rY+-72|0;k[mY>>2]=pY;i[c>>0]=i[d>>0]|0;uF(c,tY,pY);rY=k[mY>>2]|0}while((rY|0)!=(qY|0));c7=k[oY>>2]|0}OBa(c7)}qY=Ue+48|0;rY=k[qY>>2]|0;if(rY){mY=Ue+52|0;tY=k[mY>>2]|0;if((tY|0)==(rY|0))d7=rY;else{pY=Ue+56|0;DY=tY;do{tY=DY+-72|0;k[mY>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,pY,tY);DY=k[mY>>2]|0}while((DY|0)!=(rY|0));d7=k[qY>>2]|0}OBa(d7)}rY=k[D0>>2]|0;do if((rY|0)==(Oe|0))Sf[k[(k[Oe>>2]|0)+16>>2]&2047](Oe);else{if(!rY)break;Sf[k[(k[rY>>2]|0)+20>>2]&2047](rY)}while(0);rY=Pe+192|0;qY=k[rY>>2]|0;if(qY){DY=k[L1>>2]|0;if((DY|0)==(qY|0))e7=qY;else{mY=Pe+200|0;pY=DY;do{DY=pY+-72|0;k[L1>>2]=DY;i[c>>0]=i[d>>0]|0;uF(c,mY,DY);pY=k[L1>>2]|0}while((pY|0)!=(qY|0));e7=k[rY>>2]|0}OBa(e7)}qY=Pe+120|0;pY=k[qY>>2]|0;if(pY){mY=k[M1>>2]|0;if((mY|0)==(pY|0))f7=pY;else{DY=Pe+128|0;oY=mY;do{mY=oY+-72|0;k[M1>>2]=mY;i[c>>0]=i[d>>0]|0;uF(c,DY,mY);oY=k[M1>>2]|0}while((oY|0)!=(pY|0));f7=k[qY>>2]|0}OBa(f7)}pY=Pe+48|0;oY=k[pY>>2]|0;if(oY){DY=k[A0>>2]|0;if((DY|0)==(oY|0))g7=oY;else{rY=Pe+56|0;mY=DY;do{DY=mY+-72|0;k[A0>>2]=DY;i[c>>0]=i[d>>0]|0;uF(c,rY,DY);mY=k[A0>>2]|0}while((mY|0)!=(oY|0));g7=k[pY>>2]|0}OBa(g7)}oY=Je+48|0;mY=k[oY>>2]|0;if(mY){rY=Je+52|0;qY=k[rY>>2]|0;if((qY|0)==(mY|0))h7=mY;else{DY=Je+56|0;tY=qY;do{qY=tY+-72|0;k[rY>>2]=qY;i[c>>0]=i[d>>0]|0;uF(c,DY,qY);tY=k[rY>>2]|0}while((tY|0)!=(mY|0));h7=k[oY>>2]|0}OBa(h7)}mY=k[Ke>>2]|0;if(mY){tY=k[N0>>2]|0;if((tY|0)==(mY|0))j7=mY;else{rY=tY;while(1){tY=rY+-72|0;k[N0>>2]=tY;DY=rY+-24|0;pY=k[DY>>2]|0;if(!pY)k7=tY;else{qY=rY+-20|0;uY=k[qY>>2]|0;if((uY|0)==(pY|0)){l7=tY;m7=pY}else{tY=rY+-16|0;iY=uY;do{uY=iY+-72|0;k[qY>>2]=uY;i[c>>0]=i[d>>0]|0;uF(c,tY,uY);iY=k[qY>>2]|0}while((iY|0)!=(pY|0));l7=k[N0>>2]|0;m7=k[DY>>2]|0}OBa(m7);k7=l7}if((k7|0)==(mY|0))break;else rY=k7}j7=k[Ke>>2]|0}OBa(j7)}rY=Le+120|0;mY=k[rY>>2]|0;if(mY){oY=Le+124|0;pY=k[oY>>2]|0;if((pY|0)==(mY|0))n7=mY;else{iY=Le+128|0;qY=pY;do{pY=qY+-72|0;k[oY>>2]=pY;i[c>>0]=i[d>>0]|0;uF(c,iY,pY);qY=k[oY>>2]|0}while((qY|0)!=(mY|0));n7=k[rY>>2]|0}OBa(n7)}mY=Le+48|0;qY=k[mY>>2]|0;if(qY){oY=Le+52|0;iY=k[oY>>2]|0;if((iY|0)==(qY|0))o7=qY;else{pY=Le+56|0;tY=iY;do{iY=tY+-72|0;k[oY>>2]=iY;i[c>>0]=i[d>>0]|0;uF(c,pY,iY);tY=k[oY>>2]|0}while((tY|0)!=(qY|0));o7=k[mY>>2]|0}OBa(o7)}qY=k[Me>>2]|0;if(qY){tY=k[r1>>2]|0;if((tY|0)==(qY|0))p7=qY;else{oY=tY;while(1){tY=oY+-72|0;k[r1>>2]=tY;pY=oY+-24|0;rY=k[pY>>2]|0;if(!rY)q7=tY;else{iY=oY+-20|0;kY=k[iY>>2]|0;if((kY|0)==(rY|0)){r7=tY;s7=rY}else{tY=oY+-16|0;uY=kY;do{kY=uY+-72|0;k[iY>>2]=kY;i[c>>0]=i[d>>0]|0;uF(c,tY,kY);uY=k[iY>>2]|0}while((uY|0)!=(rY|0));r7=k[r1>>2]|0;s7=k[pY>>2]|0}OBa(s7);q7=r7}if((q7|0)==(qY|0))break;else oY=q7}p7=k[Me>>2]|0}OBa(p7)}oY=Ne+120|0;qY=k[oY>>2]|0;if(qY){mY=Ne+124|0;rY=k[mY>>2]|0;if((rY|0)==(qY|0))t7=qY;else{uY=Ne+128|0;iY=rY;do{rY=iY+-72|0;k[mY>>2]=rY;i[c>>0]=i[d>>0]|0;uF(c,uY,rY);iY=k[mY>>2]|0}while((iY|0)!=(qY|0));t7=k[oY>>2]|0}OBa(t7)}qY=Ne+48|0;iY=k[qY>>2]|0;if(iY){mY=Ne+52|0;uY=k[mY>>2]|0;if((uY|0)==(iY|0))u7=iY;else{rY=Ne+56|0;tY=uY;do{uY=tY+-72|0;k[mY>>2]=uY;i[c>>0]=i[d>>0]|0;uF(c,rY,uY);tY=k[mY>>2]|0}while((tY|0)!=(iY|0));u7=k[qY>>2]|0}OBa(u7)}iY=k[k1>>2]|0;do if((iY|0)==(He|0))Sf[k[(k[He>>2]|0)+16>>2]&2047](He);else{if(!iY)break;Sf[k[(k[iY>>2]|0)+20>>2]&2047](iY)}while(0);iY=Ie+120|0;qY=k[iY>>2]|0;if(qY){tY=k[R0>>2]|0;if((tY|0)==(qY|0))v7=qY;else{mY=Ie+128|0;rY=tY;do{tY=rY+-72|0;k[R0>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,mY,tY);rY=k[R0>>2]|0}while((rY|0)!=(qY|0));v7=k[iY>>2]|0}OBa(v7)}qY=Ie+48|0;rY=k[qY>>2]|0;if(rY){mY=k[n1>>2]|0;if((mY|0)==(rY|0))w7=rY;else{tY=Ie+56|0;oY=mY;do{mY=oY+-72|0;k[n1>>2]=mY;i[c>>0]=i[d>>0]|0;uF(c,tY,mY);oY=k[n1>>2]|0}while((oY|0)!=(rY|0));w7=k[qY>>2]|0}OBa(w7)}rY=Ee+48|0;oY=k[rY>>2]|0;if(oY){tY=Ee+52|0;iY=k[tY>>2]|0;if((iY|0)==(oY|0))x7=oY;else{mY=Ee+56|0;uY=iY;do{iY=uY+-72|0;k[tY>>2]=iY;i[c>>0]=i[d>>0]|0;uF(c,mY,iY);uY=k[tY>>2]|0}while((uY|0)!=(oY|0));x7=k[rY>>2]|0}OBa(x7)}oY=k[Fe>>2]|0;if(oY){uY=k[_0>>2]|0;if((uY|0)==(oY|0))y7=oY;else{tY=uY;while(1){uY=tY+-72|0;k[_0>>2]=uY;mY=tY+-24|0;qY=k[mY>>2]|0;if(!qY)z7=uY;else{iY=tY+-20|0;DY=k[iY>>2]|0;if((DY|0)==(qY|0)){A7=uY;B7=qY}else{uY=tY+-16|0;kY=DY;do{DY=kY+-72|0;k[iY>>2]=DY;i[c>>0]=i[d>>0]|0;uF(c,uY,DY);kY=k[iY>>2]|0}while((kY|0)!=(qY|0));A7=k[_0>>2]|0;B7=k[mY>>2]|0}OBa(B7);z7=A7}if((z7|0)==(oY|0))break;else tY=z7}y7=k[Fe>>2]|0}OBa(y7)}tY=Ge+120|0;oY=k[tY>>2]|0;if(oY){rY=Ge+124|0;qY=k[rY>>2]|0;if((qY|0)==(oY|0))C7=oY;else{kY=Ge+128|0;iY=qY;do{qY=iY+-72|0;k[rY>>2]=qY;i[c>>0]=i[d>>0]|0;uF(c,kY,qY);iY=k[rY>>2]|0}while((iY|0)!=(oY|0));C7=k[tY>>2]|0}OBa(C7)}oY=Ge+48|0;iY=k[oY>>2]|0;if(iY){rY=Ge+52|0;kY=k[rY>>2]|0;if((kY|0)==(iY|0))D7=iY;else{qY=Ge+56|0;uY=kY;do{kY=uY+-72|0;k[rY>>2]=kY;i[c>>0]=i[d>>0]|0;uF(c,qY,kY);uY=k[rY>>2]|0}while((uY|0)!=(iY|0));D7=k[oY>>2]|0}OBa(D7)}iY=k[xf>>2]|0;if(iY){uY=l+52|0;rY=k[uY>>2]|0;if((rY|0)==(iY|0))E7=iY;else{qY=l+56|0;tY=rY;do{rY=tY+-72|0;k[uY>>2]=rY;i[c>>0]=i[d>>0]|0;uF(c,qY,rY);tY=k[uY>>2]|0}while((tY|0)!=(iY|0));E7=k[xf>>2]|0}OBa(E7)}iY=k[wf>>2]|0;if(iY){tY=j+52|0;uY=k[tY>>2]|0;if((uY|0)==(iY|0))F7=iY;else{qY=j+56|0;oY=uY;do{uY=oY+-72|0;k[tY>>2]=uY;i[c>>0]=i[d>>0]|0;uF(c,qY,uY);oY=k[tY>>2]|0}while((oY|0)!=(iY|0));F7=k[wf>>2]|0}OBa(F7)}iY=k[uf>>2]|0;if(iY){oY=h+52|0;tY=k[oY>>2]|0;if((tY|0)==(iY|0))G7=iY;else{qY=h+56|0;uY=tY;do{tY=uY+-72|0;k[oY>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,qY,tY);uY=k[oY>>2]|0}while((uY|0)!=(iY|0));G7=k[uf>>2]|0}OBa(G7)}iY=k[sf>>2]|0;if(iY){uY=g+52|0;oY=k[uY>>2]|0;if((oY|0)==(iY|0))H7=iY;else{qY=g+56|0;tY=oY;do{oY=tY+-72|0;k[uY>>2]=oY;i[c>>0]=i[d>>0]|0;uF(c,qY,oY);tY=k[uY>>2]|0}while((tY|0)!=(iY|0));H7=k[sf>>2]|0}OBa(H7)}iY=k[qf>>2]|0;if(iY){tY=f+52|0;uY=k[tY>>2]|0;if((uY|0)==(iY|0))I7=iY;else{qY=f+56|0;oY=uY;do{uY=oY+-72|0;k[tY>>2]=uY;i[c>>0]=i[d>>0]|0;uF(c,qY,uY);oY=k[tY>>2]|0}while((oY|0)!=(iY|0));I7=k[qf>>2]|0}OBa(I7)}iY=k[of>>2]|0;if(!iY){r=b;return}oY=e+52|0;tY=k[oY>>2]|0;if((tY|0)==(iY|0))J7=iY;else{qY=e+56|0;uY=tY;do{tY=uY+-72|0;k[oY>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,qY,tY);uY=k[oY>>2]|0}while((uY|0)!=(iY|0));J7=k[of>>2]|0}OBa(J7);r=b;return}while(0);if((ug|0)==7307){EY=Hc()|0;CY=M;iY=k[Ce>>2]|0;if(iY){uY=k[fY>>2]|0;if((uY|0)==(iY|0))K7=iY;else{oY=uY;while(1){uY=oY+-96|0;k[fY>>2]=uY;qY=k[oY+-8>>2]|0;do if((qY|0)==(oY+-24|0))Sf[k[(k[qY>>2]|0)+16>>2]&2047](qY);else{if(!qY)break;Sf[k[(k[qY>>2]|0)+20>>2]&2047](qY)}while(0);qY=oY+-48|0;tY=k[qY>>2]|0;if(!tY)L7=uY;else{rY=oY+-44|0;kY=k[rY>>2]|0;if((kY|0)==(tY|0)){M7=uY;N7=tY}else{pY=oY+-40|0;DY=kY;do{kY=DY+-72|0;k[rY>>2]=kY;i[c>>0]=i[d>>0]|0;uF(c,pY,kY);DY=k[rY>>2]|0}while((DY|0)!=(tY|0));M7=k[fY>>2]|0;N7=k[qY>>2]|0}OBa(N7);L7=M7}if((L7|0)==(iY|0))break;else oY=L7}K7=k[Ce>>2]|0}OBa(K7)}Z5=EY;_5=CY;$5=De+480|0}oY=$5;do{iY=k[oY+-8>>2]|0;do if((iY|0)==(oY+-24|0))Sf[k[(k[iY>>2]|0)+16>>2]&2047](iY);else{if(!iY)break;Sf[k[(k[iY>>2]|0)+20>>2]&2047](iY)}while(0);iY=oY+-48|0;qY=k[iY>>2]|0;if(qY){fY=oY+-44|0;tY=k[fY>>2]|0;if((tY|0)==(qY|0))O7=qY;else{DY=oY+-40|0;rY=tY;do{tY=rY+-72|0;k[fY>>2]=tY;i[c>>0]=i[d>>0]|0;uF(c,DY,tY);rY=k[fY>>2]|0}while((rY|0)!=(qY|0));O7=k[iY>>2]|0}OBa(O7)}oY=oY+-96|0}while((oY|0)!=(De|0));P7=0;Q7=Z5;R7=_5}while(0);if((ug|0)==7827){P7=1;Q7=X5;R7=W5}HY=k[OY>>2]|0;if((HY|0)==(hf|0)){Sf[k[(k[hf>>2]|0)+16>>2]&2047](hf);T5=P7;U5=Q7;V5=R7;break}if(!HY){T5=P7;U5=Q7;V5=R7;break}Sf[k[(k[HY>>2]|0)+20>>2]&2047](HY);T5=P7;U5=Q7;V5=R7}while(0);OY=jf+192|0;KY=k[OY>>2]|0;if(KY){NY=jf+196|0;JY=k[NY>>2]|0;if((JY|0)==(KY|0))S7=KY;else{Z$=jf+200|0;SY=JY;do{JY=SY+-72|0;k[NY>>2]=JY;i[c>>0]=i[d>>0]|0;uF(c,Z$,JY);SY=k[NY>>2]|0}while((SY|0)!=(KY|0));S7=k[OY>>2]|0}OBa(S7)}KY=jf+120|0;SY=k[KY>>2]|0;if(SY){NY=jf+124|0;Z$=k[NY>>2]|0;if((Z$|0)==(SY|0))T7=SY;else{JY=jf+128|0;Y$=Z$;do{Z$=Y$+-72|0;k[NY>>2]=Z$;i[c>>0]=i[d>>0]|0;uF(c,JY,Z$);Y$=k[NY>>2]|0}while((Y$|0)!=(SY|0));T7=k[KY>>2]|0}OBa(T7)}SY=jf+48|0;Y$=k[SY>>2]|0;if(!Y$){N5=T5;O5=U5;P5=V5;break ec}NY=jf+52|0;JY=k[NY>>2]|0;if((JY|0)==(Y$|0))U7=Y$;else{OY=jf+56|0;Z$=JY;do{JY=Z$+-72|0;k[NY>>2]=JY;i[c>>0]=i[d>>0]|0;uF(c,OY,JY);Z$=k[NY>>2]|0}while((Z$|0)!=(Y$|0));U7=k[SY>>2]|0}OBa(U7);N5=T5;O5=U5;P5=V5;break ec}while(0);c0=jf+48|0;a0=k[c0>>2]|0;if(!a0){N5=1;O5=Q5;P5=R5;break}b0=jf+52|0;TY=k[b0>>2]|0;if((TY|0)==(a0|0))V7=a0;else{$$=jf+56|0;Y$=TY;do{TY=Y$+-72|0;k[b0>>2]=TY;i[c>>0]=i[d>>0]|0;uF(c,$$,TY);Y$=k[b0>>2]|0}while((Y$|0)!=(a0|0));V7=k[c0>>2]|0}OBa(V7);N5=1;O5=Q5;P5=R5}while(0);XY=cf+48|0;VY=k[XY>>2]|0;if(!VY){K5=O5;L5=P5;M5=N5;break}WY=cf+52|0;UY=k[WY>>2]|0;if((UY|0)==(VY|0))W7=VY;else{a0=cf+56|0;Y$=UY;do{UY=Y$+-72|0;k[WY>>2]=UY;i[c>>0]=i[d>>0]|0;uF(c,a0,UY);Y$=k[WY>>2]|0}while((Y$|0)!=(VY|0));W7=k[XY>>2]|0}OBa(W7);K5=O5;L5=P5;M5=N5}while(0);$Y=k[df>>2]|0;if(!$Y){X7=K5;Y7=L5;Z7=M5;break dc}_Y=k[g0>>2]|0;if((_Y|0)==($Y|0))_7=$Y;else{YY=_Y;while(1){_Y=YY+-72|0;k[g0>>2]=_Y;VY=YY+-24|0;Y$=k[VY>>2]|0;if(!Y$)$7=_Y;else{WY=YY+-20|0;a0=k[WY>>2]|0;if((a0|0)==(Y$|0)){a8=_Y;b8=Y$}else{_Y=YY+-16|0;UY=a0;do{a0=UY+-72|0;k[WY>>2]=a0;i[c>>0]=i[d>>0]|0;uF(c,_Y,a0);UY=k[WY>>2]|0}while((UY|0)!=(Y$|0));a8=k[g0>>2]|0;b8=k[VY>>2]|0}OBa(b8);$7=a8}if(($7|0)==($Y|0))break;else YY=$7}_7=k[df>>2]|0}OBa(_7);X7=K5;Y7=L5;Z7=M5;break dc}while(0);aZ=Hc()|0;YY=M;$Y=k[df>>2]|0;if(!$Y){I5=aZ;J5=YY;ug=7809;break}Y$=k[g0>>2]|0;if((Y$|0)==($Y|0))c8=$Y;else{UY=Y$;while(1){Y$=UY+-72|0;k[g0>>2]=Y$;WY=UY+-24|0;_Y=k[WY>>2]|0;if(!_Y)d8=Y$;else{XY=UY+-20|0;a0=k[XY>>2]|0;if((a0|0)==(_Y|0)){e8=Y$;f8=_Y}else{Y$=UY+-16|0;b0=a0;do{a0=b0+-72|0;k[XY>>2]=a0;i[c>>0]=i[d>>0]|0;uF(c,Y$,a0);b0=k[XY>>2]|0}while((b0|0)!=(_Y|0));e8=k[g0>>2]|0;f8=k[WY>>2]|0}OBa(f8);d8=e8}if((d8|0)==($Y|0))break;else UY=d8}c8=k[df>>2]|0}OBa(c8);I5=aZ;J5=YY;ug=7809}while(0);if((ug|0)==7809){X7=I5;Y7=J5;Z7=1}g0=ef+120|0;dZ=k[g0>>2]|0;if(dZ){cZ=ef+124|0;UY=k[cZ>>2]|0;if((UY|0)==(dZ|0))g8=dZ;else{$Y=ef+128|0;_Y=UY;do{UY=_Y+-72|0;k[cZ>>2]=UY;i[c>>0]=i[d>>0]|0;uF(c,$Y,UY);_Y=k[cZ>>2]|0}while((_Y|0)!=(dZ|0));g8=k[g0>>2]|0}OBa(g8)}dZ=ef+48|0;_Y=k[dZ>>2]|0;if(!_Y){E5=0;F5=X7;G5=Y7;H5=Z7;break}cZ=ef+52|0;$Y=k[cZ>>2]|0;if(($Y|0)==(_Y|0))h8=_Y;else{UY=ef+56|0;b0=$Y;do{$Y=b0+-72|0;k[cZ>>2]=$Y;i[c>>0]=i[d>>0]|0;uF(c,UY,$Y);b0=k[cZ>>2]|0}while((b0|0)!=(_Y|0));h8=k[dZ>>2]|0}OBa(h8);E5=0;F5=X7;G5=Y7;H5=Z7}while(0);d0=k[ff>>2]|0;if(!d0){j8=E5;k8=F5;l8=G5;m8=H5;break cc}_Y=k[h0>>2]|0;if((_Y|0)==(d0|0))n8=d0;else{b0=_Y;while(1){_Y=b0+-72|0;k[h0>>2]=_Y;cZ=b0+-24|0;UY=k[cZ>>2]|0;if(!UY)o8=_Y;else{g0=b0+-20|0;$Y=k[g0>>2]|0;if(($Y|0)==(UY|0)){p8=_Y;q8=UY}else{_Y=b0+-16|0;XY=$Y;do{$Y=XY+-72|0;k[g0>>2]=$Y;i[c>>0]=i[d>>0]|0;uF(c,_Y,$Y);XY=k[g0>>2]|0}while((XY|0)!=(UY|0));p8=k[h0>>2]|0;q8=k[cZ>>2]|0}OBa(q8);o8=p8}if((o8|0)==(d0|0))break;else b0=o8}n8=k[ff>>2]|0}OBa(n8);j8=E5;k8=F5;l8=G5;m8=H5;break cc}while(0);f0=Hc()|0;b0=M;d0=k[ff>>2]|0;if(!d0){C5=f0;D5=b0;ug=7807;break}UY=k[h0>>2]|0;if((UY|0)==(d0|0))r8=d0;else{XY=UY;while(1){UY=XY+-72|0;k[h0>>2]=UY;g0=XY+-24|0;_Y=k[g0>>2]|0;if(!_Y)s8=UY;else{dZ=XY+-20|0;$Y=k[dZ>>2]|0;if(($Y|0)==(_Y|0)){t8=UY;u8=_Y}else{UY=XY+-16|0;Y$=$Y;do{$Y=Y$+-72|0;k[dZ>>2]=$Y;i[c>>0]=i[d>>0]|0;uF(c,UY,$Y);Y$=k[dZ>>2]|0}while((Y$|0)!=(_Y|0));t8=k[h0>>2]|0;u8=k[g0>>2]|0}OBa(u8);s8=t8}if((s8|0)==(d0|0))break;else XY=s8}r8=k[ff>>2]|0}OBa(r8);C5=f0;D5=b0;ug=7807}while(0);if((ug|0)==7807){j8=1;k8=C5;l8=D5;m8=1}h0=gf+120|0;eZ=k[h0>>2]|0;if(eZ){i0=gf+124|0;j0=k[i0>>2]|0;if((j0|0)==(eZ|0))v8=eZ;else{XY=gf+128|0;d0=j0;do{j0=d0+-72|0;k[i0>>2]=j0;i[c>>0]=i[d>>0]|0;uF(c,XY,j0);d0=k[i0>>2]|0}while((d0|0)!=(eZ|0));v8=k[h0>>2]|0}OBa(v8)}eZ=gf+48|0;d0=k[eZ>>2]|0;if(!d0){w5=e0;x5=j8;y5=k8;z5=l8;A5=m8;break bc}i0=gf+52|0;XY=k[i0>>2]|0;if((XY|0)==(d0|0))w8=d0;else{j0=gf+56|0;_Y=XY;do{XY=_Y+-72|0;k[i0>>2]=XY;i[c>>0]=i[d>>0]|0;uF(c,j0,XY);_Y=k[i0>>2]|0}while((_Y|0)!=(d0|0));w8=k[eZ>>2]|0}OBa(w8);w5=e0;x5=j8;y5=k8;z5=l8;A5=m8;break bc}while(0);lZ=Hc()|0;d0=M;if((gf|0)==(B5|0)){w5=e0;x5=1;y5=lZ;z5=d0;A5=1;break}_Y=B5;do{i0=_Y+-24|0;j0=k[i0>>2]|0;if(j0){h0=_Y+-20|0;XY=k[h0>>2]|0;if((XY|0)==(j0|0))x8=j0;else{Y$=_Y+-16|0;dZ=XY;do{XY=dZ+-72|0;k[h0>>2]=XY;i[c>>0]=i[d>>0]|0;uF(c,Y$,XY);dZ=k[h0>>2]|0}while((dZ|0)!=(j0|0));x8=k[i0>>2]|0}OBa(x8)}_Y=_Y+-72|0}while((_Y|0)!=(gf|0));w5=e0;x5=1;y5=lZ;z5=d0;A5=1}while(0);if((ef|0)==(w5|0)|x5^1){y8=gZ;z8=y5;A8=z5;B8=A5;break}jZ=w5;do{d0=jZ+-24|0;lZ=k[d0>>2]|0;if(lZ){e0=jZ+-20|0;_Y=k[e0>>2]|0;if((_Y|0)==(lZ|0))C8=lZ;else{j0=jZ+-16|0;dZ=_Y;do{_Y=dZ+-72|0;k[e0>>2]=_Y;i[c>>0]=i[d>>0]|0;uF(c,j0,_Y);dZ=k[e0>>2]|0}while((dZ|0)!=(lZ|0));C8=k[d0>>2]|0}OBa(C8)}jZ=jZ+-72|0}while((jZ|0)!=(ef|0));y8=gZ;z8=y5;A8=z5;B8=A5}while(0);if((ug|0)==7796){y8=YZ;z8=u5;A8=t5;B8=1}nZ=k[sZ>>2]|0;if((nZ|0)==(af|0)){Sf[k[(k[af>>2]|0)+16>>2]&2047](af);p5=y8;q5=z8;r5=A8;s5=B8;break}if(!nZ){p5=y8;q5=z8;r5=A8;s5=B8;break}Sf[k[(k[nZ>>2]|0)+20>>2]&2047](nZ);p5=y8;q5=z8;r5=A8;s5=B8}while(0);sZ=bf+192|0;FZ=k[sZ>>2]|0;if(FZ){fZ=bf+196|0;qZ=k[fZ>>2]|0;if((qZ|0)==(FZ|0))D8=FZ;else{CZ=bf+200|0;xZ=qZ;do{qZ=xZ+-72|0;k[fZ>>2]=qZ;i[c>>0]=i[d>>0]|0;uF(c,CZ,qZ);xZ=k[fZ>>2]|0}while((xZ|0)!=(FZ|0));D8=k[sZ>>2]|0}OBa(D8)}FZ=bf+120|0;xZ=k[FZ>>2]|0;if(xZ){fZ=bf+124|0;CZ=k[fZ>>2]|0;if((CZ|0)==(xZ|0))E8=xZ;else{qZ=bf+128|0;EZ=CZ;do{CZ=EZ+-72|0;k[fZ>>2]=CZ;i[c>>0]=i[d>>0]|0;uF(c,qZ,CZ);EZ=k[fZ>>2]|0}while((EZ|0)!=(xZ|0));E8=k[FZ>>2]|0}OBa(E8)}xZ=bf+48|0;EZ=k[xZ>>2]|0;if(!EZ){h5=s5;j5=p5;k5=q5;l5=r5;break _b}fZ=bf+52|0;qZ=k[fZ>>2]|0;if((qZ|0)==(EZ|0))F8=EZ;else{sZ=bf+56|0;CZ=qZ;do{qZ=CZ+-72|0;k[fZ>>2]=qZ;i[c>>0]=i[d>>0]|0;uF(c,sZ,qZ);CZ=k[fZ>>2]|0}while((CZ|0)!=(EZ|0));F8=k[xZ>>2]|0}OBa(F8);h5=s5;j5=p5;k5=q5;l5=r5;break _b}while(0);JZ=bf+48|0;HZ=k[JZ>>2]|0;if(!HZ){h5=1;j5=YZ;k5=m5;l5=n5;break}IZ=bf+52|0;LZ=k[IZ>>2]|0;if((LZ|0)==(HZ|0))G8=HZ;else{iZ=bf+56|0;EZ=LZ;do{LZ=EZ+-72|0;k[IZ>>2]=LZ;i[c>>0]=i[d>>0]|0;uF(c,iZ,LZ);EZ=k[IZ>>2]|0}while((EZ|0)!=(HZ|0));G8=k[JZ>>2]|0}OBa(G8);h5=1;j5=YZ;k5=m5;l5=n5}while(0);QZ=Xe+48|0;NZ=k[QZ>>2]|0;if(!NZ){d5=h5;e5=k5;f5=l5;g5=j5;break}PZ=Xe+52|0;MZ=k[PZ>>2]|0;if((MZ|0)==(NZ|0))H8=NZ;else{HZ=Xe+56|0;EZ=MZ;do{MZ=EZ+-72|0;k[PZ>>2]=MZ;i[c>>0]=i[d>>0]|0;uF(c,HZ,MZ);EZ=k[PZ>>2]|0}while((EZ|0)!=(NZ|0));H8=k[QZ>>2]|0}OBa(H8);d5=h5;e5=k5;f5=l5;g5=j5}while(0);TZ=k[Ye>>2]|0;if(!TZ){I8=d5;J8=e5;K8=f5;L8=g5;break Zb}RZ=k[p0>>2]|0;if((RZ|0)==(TZ|0))M8=TZ;else{OZ=RZ;while(1){RZ=OZ+-72|0;k[p0>>2]=RZ;NZ=OZ+-24|0;EZ=k[NZ>>2]|0;if(!EZ)N8=RZ;else{PZ=OZ+-20|0;HZ=k[PZ>>2]|0;if((HZ|0)==(EZ|0)){O8=RZ;P8=EZ}else{RZ=OZ+-16|0;MZ=HZ;do{HZ=MZ+-72|0;k[PZ>>2]=HZ;i[c>>0]=i[d>>0]|0;uF(c,RZ,HZ);MZ=k[PZ>>2]|0}while((MZ|0)!=(EZ|0));O8=k[p0>>2]|0;P8=k[NZ>>2]|0}OBa(P8);N8=O8}if((N8|0)==(TZ|0))break;else OZ=N8}M8=k[Ye>>2]|0}OBa(M8);I8=d5;J8=e5;K8=f5;L8=g5;break Zb}while(0);UZ=Hc()|0;OZ=M;TZ=k[Ye>>2]|0;if(!TZ){b5=UZ;c5=OZ;ug=7778;break}EZ=k[p0>>2]|0;if((EZ|0)==(TZ|0))Q8=TZ;else{MZ=EZ;while(1){EZ=MZ+-72|0;k[p0>>2]=EZ;PZ=MZ+-24|0;RZ=k[PZ>>2]|0;if(!RZ)R8=EZ;else{QZ=MZ+-20|0;HZ=k[QZ>>2]|0;if((HZ|0)==(RZ|0)){S8=EZ;T8=RZ}else{EZ=MZ+-16|0;IZ=HZ;do{HZ=IZ+-72|0;k[QZ>>2]=HZ;i[c>>0]=i[d>>0]|0;uF(c,EZ,HZ);IZ=k[QZ>>2]|0}while((IZ|0)!=(RZ|0));S8=k[p0>>2]|0;T8=k[PZ>>2]|0}OBa(T8);R8=S8}if((R8|0)==(TZ|0))break;else MZ=R8}Q8=k[Ye>>2]|0}OBa(Q8);b5=UZ;c5=OZ;ug=7778}while(0);if((ug|0)==7778){I8=1;J8=b5;K8=c5;L8=YZ}p0=Ze+120|0;l0=k[p0>>2]|0;if(l0){k0=Ze+124|0;MZ=k[k0>>2]|0;if((MZ|0)==(l0|0))U8=l0;else{TZ=Ze+128|0;RZ=MZ;do{MZ=RZ+-72|0;k[k0>>2]=MZ;i[c>>0]=i[d>>0]|0;uF(c,TZ,MZ);RZ=k[k0>>2]|0}while((RZ|0)!=(l0|0));U8=k[p0>>2]|0}OBa(U8)}l0=Ze+48|0;RZ=k[l0>>2]|0;if(!RZ){Y4=0;Z4=I8;_4=J8;$4=K8;a5=L8;break}k0=Ze+52|0;TZ=k[k0>>2]|0;if((TZ|0)==(RZ|0))V8=RZ;else{MZ=Ze+56|0;IZ=TZ;do{TZ=IZ+-72|0;k[k0>>2]=TZ;i[c>>0]=i[d>>0]|0;uF(c,MZ,TZ);IZ=k[k0>>2]|0}while((IZ|0)!=(RZ|0));V8=k[l0>>2]|0}OBa(V8);Y4=0;Z4=I8;_4=J8;$4=K8;a5=L8}while(0);m0=k[_e>>2]|0;if(!m0){W8=Y4;X8=Z4;Y8=_4;Z8=$4;_8=a5;break Yb}RZ=k[q0>>2]|0;if((RZ|0)==(m0|0))$8=m0;else{IZ=RZ;while(1){RZ=IZ+-72|0;k[q0>>2]=RZ;k0=IZ+-24|0;MZ=k[k0>>2]|0;if(!MZ)a9=RZ;else{p0=IZ+-20|0;TZ=k[p0>>2]|0;if((TZ|0)==(MZ|0)){b9=RZ;c9=MZ}else{RZ=IZ+-16|0;QZ=TZ;do{TZ=QZ+-72|0;k[p0>>2]=TZ;i[c>>0]=i[d>>0]|0;uF(c,RZ,TZ);QZ=k[p0>>2]|0}while((QZ|0)!=(MZ|0));b9=k[q0>>2]|0;c9=k[k0>>2]|0}OBa(c9);a9=b9}if((a9|0)==(m0|0))break;else IZ=a9}$8=k[_e>>2]|0}OBa($8);W8=Y4;X8=Z4;Y8=_4;Z8=$4;_8=a5;break Yb}while(0);o0=Hc()|0;IZ=M;m0=k[_e>>2]|0;if(!m0){W4=o0;X4=IZ;ug=7776;break}MZ=k[q0>>2]|0;if((MZ|0)==(m0|0))d9=m0;else{QZ=MZ;while(1){MZ=QZ+-72|0;k[q0>>2]=MZ;p0=QZ+-24|0;RZ=k[p0>>2]|0;if(!RZ)e9=MZ;else{l0=QZ+-20|0;TZ=k[l0>>2]|0;if((TZ|0)==(RZ|0)){f9=MZ;g9=RZ}else{MZ=QZ+-16|0;EZ=TZ;do{TZ=EZ+-72|0;k[l0>>2]=TZ;i[c>>0]=i[d>>0]|0;uF(c,MZ,TZ);EZ=k[l0>>2]|0}while((EZ|0)!=(RZ|0));f9=k[q0>>2]|0;g9=k[p0>>2]|0}OBa(g9);e9=f9}if((e9|0)==(m0|0))break;else QZ=e9}d9=k[_e>>2]|0}OBa(d9);W4=o0;X4=IZ;ug=7776}while(0);if((ug|0)==7776){W8=1;X8=1;Y8=W4;Z8=X4;_8=YZ}q0=$e+120|0;VZ=k[q0>>2]|0;if(VZ){WZ=$e+124|0;XZ=k[WZ>>2]|0;if((XZ|0)==(VZ|0))h9=VZ;else{QZ=$e+128|0;m0=XZ;do{XZ=m0+-72|0;k[WZ>>2]=XZ;i[c>>0]=i[d>>0]|0;uF(c,QZ,XZ);m0=k[WZ>>2]|0}while((m0|0)!=(VZ|0));h9=k[q0>>2]|0}OBa(h9)}VZ=$e+48|0;m0=k[VZ>>2]|0;if(!m0){P4=n0;Q4=X8;R4=W8;S4=Y8;T4=Z8;U4=_8;break Xb}WZ=$e+52|0;QZ=k[WZ>>2]|0;if((QZ|0)==(m0|0))j9=m0;else{XZ=$e+56|0;RZ=QZ;do{QZ=RZ+-72|0;k[WZ>>2]=QZ;i[c>>0]=i[d>>0]|0;uF(c,XZ,QZ);RZ=k[WZ>>2]|0}while((RZ|0)!=(m0|0));j9=k[VZ>>2]|0}OBa(j9);P4=n0;Q4=X8;R4=W8;S4=Y8;T4=Z8;U4=_8;break Xb}while(0);a_=Hc()|0;m0=M;if(($e|0)==(V4|0)){P4=n0;Q4=1;R4=1;S4=a_;T4=m0;U4=YZ;break}RZ=V4;do{WZ=RZ+-24|0;XZ=k[WZ>>2]|0;if(XZ){q0=RZ+-20|0;QZ=k[q0>>2]|0;if((QZ|0)==(XZ|0))k9=XZ;else{EZ=RZ+-16|0;l0=QZ;do{QZ=l0+-72|0;k[q0>>2]=QZ;i[c>>0]=i[d>>0]|0;uF(c,EZ,QZ);l0=k[q0>>2]|0}while((l0|0)!=(XZ|0));k9=k[WZ>>2]|0}OBa(k9)}RZ=RZ+-72|0}while((RZ|0)!=($e|0));P4=n0;Q4=1;R4=1;S4=a_;T4=m0;U4=YZ}while(0);if((Ze|0)==(P4|0)|R4^1){l9=Q4;m9=S4;n9=T4;o9=U4;break}YZ=P4;do{ZZ=YZ+-24|0;m0=k[ZZ>>2]|0;if(m0){a_=YZ+-20|0;n0=k[a_>>2]|0;if((n0|0)==(m0|0))p9=m0;else{RZ=YZ+-16|0;XZ=n0;do{n0=XZ+-72|0;k[a_>>2]=n0;i[c>>0]=i[d>>0]|0;uF(c,RZ,n0);XZ=k[a_>>2]|0}while((XZ|0)!=(m0|0));p9=k[ZZ>>2]|0}OBa(p9)}YZ=YZ+-72|0}while((YZ|0)!=(Ze|0));l9=Q4;m9=S4;n9=T4;o9=U4}while(0);if((ug|0)==7765){l9=1;m9=N4;n9=M4;o9=M_}e_=k[u0>>2]|0;if((e_|0)==(Ve|0)){Sf[k[(k[Ve>>2]|0)+16>>2]&2047](Ve);I4=l9;J4=m9;K4=n9;L4=o9;break}if(!e_){I4=l9;J4=m9;K4=n9;L4=o9;break}Sf[k[(k[e_>>2]|0)+20>>2]&2047](e_);I4=l9;J4=m9;K4=n9;L4=o9}while(0);u0=We+192|0;l_=k[u0>>2]|0;if(l_){$X=We+196|0;r0=k[$X>>2]|0;if((r0|0)==(l_|0))q9=l_;else{t0=We+200|0;f_=r0;do{r0=f_+-72|0;k[$X>>2]=r0;i[c>>0]=i[d>>0]|0;uF(c,t0,r0);f_=k[$X>>2]|0}while((f_|0)!=(l_|0));q9=k[u0>>2]|0}OBa(q9)}l_=We+120|0;f_=k[l_>>2]|0;if(f_){$X=We+124|0;t0=k[$X>>2]|0;if((t0|0)==(f_|0))r9=f_;else{r0=We+128|0;g_=t0;do{t0=g_+-72|0;k[$X>>2]=t0;i[c>>0]=i[d>>0]|0;uF(c,r0,t0);g_=k[$X>>2]|0}while((g_|0)!=(f_|0));r9=k[l_>>2]|0}OBa(r9)}f_=We+48|0;g_=k[f_>>2]|0;if(!g_){B4=L4;C4=I4;D4=J4;E4=K4;break Ub}$X=We+52|0;r0=k[$X>>2]|0;if((r0|0)==(g_|0))s9=g_;else{u0=We+56|0;t0=r0;do{r0=t0+-72|0;k[$X>>2]=r0;i[c>>0]=i[d>>0]|0;uF(c,u0,r0);t0=k[$X>>2]|0}while((t0|0)!=(g_|0));s9=k[f_>>2]|0}OBa(s9);B4=L4;C4=I4;D4=J4;E4=K4;break Ub}while(0);p_=We+48|0;A_=k[p_>>2]|0;if(!A_){B4=M_;C4=1;D4=F4;E4=G4;break}o_=We+52|0;q_=k[o_>>2]|0;if((q_|0)==(A_|0))t9=A_;else{n_=We+56|0;g_=q_;do{q_=g_+-72|0;k[o_>>2]=q_;i[c>>0]=i[d>>0]|0;uF(c,n_,q_);g_=k[o_>>2]|0}while((g_|0)!=(A_|0));t9=k[p_>>2]|0}OBa(t9);B4=M_;C4=1;D4=F4;E4=G4}while(0);t_=Qe+48|0;C_=k[t_>>2]|0;if(!C_){x4=B4;y4=C4;z4=D4;A4=E4;break}s_=Qe+52|0;r_=k[s_>>2]|0;if((r_|0)==(C_|0))u9=C_;else{A_=Qe+56|0;g_=r_;do{r_=g_+-72|0;k[s_>>2]=r_;i[c>>0]=i[d>>0]|0;uF(c,A_,r_);g_=k[s_>>2]|0}while((g_|0)!=(C_|0));u9=k[t_>>2]|0}OBa(u9);x4=B4;y4=C4;z4=D4;A4=E4}while(0);E_=k[Re>>2]|0;if(!E_){v9=x4;w9=y4;x9=z4;y9=A4;break Tb}v_=k[h_>>2]|0;if((v_|0)==(E_|0))z9=E_;else{u_=v_;while(1){v_=u_+-72|0;k[h_>>2]=v_;C_=u_+-24|0;g_=k[C_>>2]|0;if(!g_)A9=v_;else{s_=u_+-20|0;A_=k[s_>>2]|0;if((A_|0)==(g_|0)){B9=v_;C9=g_}else{v_=u_+-16|0;r_=A_;do{A_=r_+-72|0;k[s_>>2]=A_;i[c>>0]=i[d>>0]|0;uF(c,v_,A_);r_=k[s_>>2]|0}while((r_|0)!=(g_|0));B9=k[h_>>2]|0;C9=k[C_>>2]|0}OBa(C9);A9=B9}if((A9|0)==(E_|0))break;else u_=A9}z9=k[Re>>2]|0}OBa(z9);v9=x4;w9=y4;x9=z4;y9=A4;break Tb}while(0);w_=Hc()|0;u_=M;E_=k[Re>>2]|0;if(!E_){v4=w_;w4=u_;ug=7747;break}g_=k[h_>>2]|0;if((g_|0)==(E_|0))D9=E_;else{r_=g_;while(1){g_=r_+-72|0;k[h_>>2]=g_;s_=r_+-24|0;v_=k[s_>>2]|0;if(!v_)E9=g_;else{t_=r_+-20|0;A_=k[t_>>2]|0;if((A_|0)==(v_|0)){F9=g_;G9=v_}else{g_=r_+-16|0;o_=A_;do{A_=o_+-72|0;k[t_>>2]=A_;i[c>>0]=i[d>>0]|0;uF(c,g_,A_);o_=k[t_>>2]|0}while((o_|0)!=(v_|0));F9=k[h_>>2]|0;G9=k[s_>>2]|0}OBa(G9);E9=F9}if((E9|0)==(E_|0))break;else r_=E9}D9=k[Re>>2]|0}OBa(D9);v4=w_;w4=u_;ug=7747}while(0);if((ug|0)==7747){v9=M_;w9=1;x9=v4;y9=w4}h_=Se+120|0;F_=k[h_>>2]|0;if(F_){k_=Se+124|0;r_=k[k_>>2]|0;if((r_|0)==(F_|0))H9=F_;else{E_=Se+128|0;v_=r_;do{r_=v_+-72|0;k[k_>>2]=r_;i[c>>0]=i[d>>0]|0;uF(c,E_,r_);v_=k[k_>>2]|0}while((v_|0)!=(F_|0));H9=k[h_>>2]|0}OBa(H9)}F_=Se+48|0;v_=k[F_>>2]|0;if(!v_){I9=0;J9=I_;K9=v9;L9=w9;M9=x9;N9=y9;break}k_=Se+52|0;E_=k[k_>>2]|0;if((E_|0)==(v_|0))O9=v_;else{r_=Se+56|0;o_=E_;do{E_=o_+-72|0;k[k_>>2]=E_;i[c>>0]=i[d>>0]|0;uF(c,r_,E_);o_=k[k_>>2]|0}while((o_|0)!=(v_|0));O9=k[F_>>2]|0}OBa(O9);I9=0;J9=I_;K9=v9;L9=w9;M9=x9;N9=y9}while(0);if((ug|0)==7746){j_=Hc()|0;I9=1;J9=u4;K9=M_;L9=1;M9=j_;N9=M}j_=k[Te>>2]|0;if(!j_){P9=I9;Q9=K9;R9=L9;S9=J9;T9=M9;U9=N9;break Sb}v_=k[L_>>2]|0;if((v_|0)==(j_|0))V9=j_;else{o_=v_;while(1){v_=o_+-72|0;k[L_>>2]=v_;k_=o_+-24|0;r_=k[k_>>2]|0;if(!r_)W9=v_;else{h_=o_+-20|0;E_=k[h_>>2]|0;if((E_|0)==(r_|0)){X9=v_;Y9=r_}else{v_=o_+-16|0;t_=E_;do{E_=t_+-72|0;k[h_>>2]=E_;i[c>>0]=i[d>>0]|0;uF(c,v_,E_);t_=k[h_>>2]|0}while((t_|0)!=(r_|0));X9=k[L_>>2]|0;Y9=k[k_>>2]|0}OBa(Y9);W9=X9}if((W9|0)==(j_|0))break;else o_=W9}V9=k[Te>>2]|0}OBa(V9);P9=I9;Q9=K9;R9=L9;S9=J9;T9=M9;U9=N9;break Sb}while(0);H_=Hc()|0;o_=M;j_=k[Te>>2]|0;if(!j_){s4=H_;t4=o_;ug=7745;break}r_=k[L_>>2]|0;if((r_|0)==(j_|0))Z9=j_;else{t_=r_;while(1){r_=t_+-72|0;k[L_>>2]=r_;h_=t_+-24|0;v_=k[h_>>2]|0;if(!v_)_9=r_;else{I_=t_+-20|0;F_=k[I_>>2]|0;if((F_|0)==(v_|0)){$9=r_;aaa=v_}else{r_=t_+-16|0;E_=F_;do{F_=E_+-72|0;k[I_>>2]=F_;i[c>>0]=i[d>>0]|0;uF(c,r_,F_);E_=k[I_>>2]|0}while((E_|0)!=(v_|0));$9=k[L_>>2]|0;aaa=k[h_>>2]|0}OBa(aaa);_9=$9}if((_9|0)==(j_|0))break;else t_=_9}Z9=k[Te>>2]|0}OBa(Z9);s4=H_;t4=o_;ug=7745}while(0);if((ug|0)==7745){P9=1;Q9=M_;R9=1;S9=Se;T9=s4;U9=t4}L_=Ue+120|0;J_=k[L_>>2]|0;if(J_){y0=Ue+124|0;G_=k[y0>>2]|0;if((G_|0)==(J_|0))baa=J_;else{t_=Ue+128|0;j_=G_;do{G_=j_+-72|0;k[y0>>2]=G_;i[c>>0]=i[d>>0]|0;uF(c,t_,G_);j_=k[y0>>2]|0}while((j_|0)!=(J_|0));baa=k[L_>>2]|0}OBa(baa)}J_=Ue+48|0;j_=k[J_>>2]|0;if(!j_){caa=Q9;daa=P9;eaa=R9;faa=T9;gaa=U9;haa=S9;break}y0=Ue+52|0;t_=k[y0>>2]|0;if((t_|0)==(j_|0))iaa=j_;else{G_=Ue+56|0;v_=t_;do{t_=v_+-72|0;k[y0>>2]=t_;i[c>>0]=i[d>>0]|0;uF(c,G_,t_);v_=k[y0>>2]|0}while((v_|0)!=(j_|0));iaa=k[J_>>2]|0}OBa(iaa);caa=Q9;daa=P9;eaa=R9;faa=T9;gaa=U9;haa=S9}while(0);do if((ug|0)==7736){N_=Hc()|0;j_=M;if((Ue|0)==(r4|0)){caa=M_;daa=1;eaa=1;faa=N_;gaa=j_;haa=Se;break}v_=r4;do{y0=v_+-24|0;G_=k[y0>>2]|0;if(G_){L_=v_+-20|0;t_=k[L_>>2]|0;if((t_|0)==(G_|0))jaa=G_;else{E_=v_+-16|0;I_=t_;do{t_=I_+-72|0;k[L_>>2]=t_;i[c>>0]=i[d>>0]|0;uF(c,E_,t_);I_=k[L_>>2]|0}while((I_|0)!=(G_|0));jaa=k[y0>>2]|0}OBa(jaa)}v_=v_+-72|0}while((v_|0)!=(Ue|0));caa=M_;daa=1;eaa=1;faa=N_;gaa=j_;haa=Se}while(0);if((Se|0)==(haa|0)|daa^1){kaa=caa;laa=eaa;maa=faa;naa=gaa;break}M_=haa;do{j_=M_+-24|0;N_=k[j_>>2]|0;if(N_){v_=M_+-20|0;J_=k[v_>>2]|0;if((J_|0)==(N_|0))oaa=N_;else{G_=M_+-16|0;I_=J_;do{J_=I_+-72|0;k[v_>>2]=J_;i[c>>0]=i[d>>0]|0;uF(c,G_,J_);I_=k[v_>>2]|0}while((I_|0)!=(N_|0));oaa=k[j_>>2]|0}OBa(oaa)}M_=M_+-72|0}while((M_|0)!=(Se|0));kaa=caa;laa=eaa;maa=faa;naa=gaa}while(0);if((ug|0)==7735){kaa=Q0;laa=1;maa=p4;naa=o4}A0=k[D0>>2]|0;if((A0|0)==(Oe|0)){Sf[k[(k[Oe>>2]|0)+16>>2]&2047](Oe);k4=kaa;l4=laa;m4=maa;n4=naa;break}if(!A0){k4=kaa;l4=laa;m4=maa;n4=naa;break}Sf[k[(k[A0>>2]|0)+20>>2]&2047](A0);k4=kaa;l4=laa;m4=maa;n4=naa}while(0);D0=Pe+192|0;B0=k[D0>>2]|0;if(B0){J1=Pe+196|0;C0=k[J1>>2]|0;if((C0|0)==(B0|0))paa=B0;else{I0=Pe+200|0;H1=C0;do{C0=H1+-72|0;k[J1>>2]=C0;i[c>>0]=i[d>>0]|0;uF(c,I0,C0);H1=k[J1>>2]|0}while((H1|0)!=(B0|0));paa=k[D0>>2]|0}OBa(paa)}B0=Pe+120|0;H1=k[B0>>2]|0;if(H1){J1=Pe+124|0;I0=k[J1>>2]|0;if((I0|0)==(H1|0))qaa=H1;else{C0=Pe+128|0;G0=I0;do{I0=G0+-72|0;k[J1>>2]=I0;i[c>>0]=i[d>>0]|0;uF(c,C0,I0);G0=k[J1>>2]|0}while((G0|0)!=(H1|0));qaa=k[B0>>2]|0}OBa(qaa)}H1=Pe+48|0;G0=k[H1>>2]|0;if(!G0){c4=k4;d4=l4;e4=m4;f4=n4;break Pb}J1=Pe+52|0;C0=k[J1>>2]|0;if((C0|0)==(G0|0))raa=G0;else{D0=Pe+56|0;I0=C0;do{C0=I0+-72|0;k[J1>>2]=C0;i[c>>0]=i[d>>0]|0;uF(c,D0,C0);I0=k[J1>>2]|0}while((I0|0)!=(G0|0));raa=k[H1>>2]|0}OBa(raa);c4=k4;d4=l4;e4=m4;f4=n4;break Pb}while(0);E1=Pe+48|0;F1=k[E1>>2]|0;if(!F1){c4=Q0;d4=1;e4=g4;f4=h4;break}J0=Pe+52|0;D1=k[J0>>2]|0;if((D1|0)==(F1|0))saa=F1;else{G1=Pe+56|0;G0=D1;do{D1=G0+-72|0;k[J0>>2]=D1;i[c>>0]=i[d>>0]|0;uF(c,G1,D1);G0=k[J0>>2]|0}while((G0|0)!=(F1|0));saa=k[E1>>2]|0}OBa(saa);c4=Q0;d4=1;e4=g4;f4=h4}while(0);L0=Je+48|0;C1=k[L0>>2]|0;if(!C1){_3=c4;$3=d4;a4=e4;b4=f4;break}B1=Je+52|0;K0=k[B1>>2]|0;if((K0|0)==(C1|0))taa=C1;else{F1=Je+56|0;G0=K0;do{K0=G0+-72|0;k[B1>>2]=K0;i[c>>0]=i[d>>0]|0;uF(c,F1,K0);G0=k[B1>>2]|0}while((G0|0)!=(C1|0));taa=k[L0>>2]|0}OBa(taa);_3=c4;$3=d4;a4=e4;b4=f4}while(0);M0=k[Ke>>2]|0;if(!M0){uaa=_3;vaa=$3;waa=a4;xaa=b4;break Ob}z1=k[N0>>2]|0;if((z1|0)==(M0|0))yaa=M0;else{A1=z1;while(1){z1=A1+-72|0;k[N0>>2]=z1;C1=A1+-24|0;G0=k[C1>>2]|0;if(!G0)zaa=z1;else{B1=A1+-20|0;F1=k[B1>>2]|0;if((F1|0)==(G0|0)){Aaa=z1;Baa=G0}else{z1=A1+-16|0;K0=F1;do{F1=K0+-72|0;k[B1>>2]=F1;i[c>>0]=i[d>>0]|0;uF(c,z1,F1);K0=k[B1>>2]|0}while((K0|0)!=(G0|0));Aaa=k[N0>>2]|0;Baa=k[C1>>2]|0}OBa(Baa);zaa=Aaa}if((zaa|0)==(M0|0))break;else A1=zaa}yaa=k[Ke>>2]|0}OBa(yaa);uaa=_3;vaa=$3;waa=a4;xaa=b4;break Ob}while(0);y1=Hc()|0;A1=M;M0=k[Ke>>2]|0;if(!M0){Y3=y1;Z3=A1;ug=7717;break}G0=k[N0>>2]|0;if((G0|0)==(M0|0))Caa=M0;else{K0=G0;while(1){G0=K0+-72|0;k[N0>>2]=G0;B1=K0+-24|0;z1=k[B1>>2]|0;if(!z1)Daa=G0;else{L0=K0+-20|0;F1=k[L0>>2]|0;if((F1|0)==(z1|0)){Eaa=G0;Faa=z1}else{G0=K0+-16|0;J0=F1;do{F1=J0+-72|0;k[L0>>2]=F1;i[c>>0]=i[d>>0]|0;uF(c,G0,F1);J0=k[L0>>2]|0}while((J0|0)!=(z1|0));Eaa=k[N0>>2]|0;Faa=k[B1>>2]|0}OBa(Faa);Daa=Eaa}if((Daa|0)==(M0|0))break;else K0=Daa}Caa=k[Ke>>2]|0}OBa(Caa);Y3=y1;Z3=A1;ug=7717}while(0);if((ug|0)==7717){uaa=Q0;vaa=1;waa=Y3;xaa=Z3}N0=Le+120|0;u1=k[N0>>2]|0;if(u1){x1=Le+124|0;w1=k[x1>>2]|0;if((w1|0)==(u1|0))Gaa=u1;else{K0=Le+128|0;M0=w1;do{w1=M0+-72|0;k[x1>>2]=w1;i[c>>0]=i[d>>0]|0;uF(c,K0,w1);M0=k[x1>>2]|0}while((M0|0)!=(u1|0));Gaa=k[N0>>2]|0}OBa(Gaa)}u1=Le+48|0;M0=k[u1>>2]|0;if(!M0){Haa=0;Iaa=P0;Jaa=uaa;Kaa=vaa;Laa=waa;Maa=xaa;break}x1=Le+52|0;K0=k[x1>>2]|0;if((K0|0)==(M0|0))Naa=M0;else{w1=Le+56|0;z1=K0;do{K0=z1+-72|0;k[x1>>2]=K0;i[c>>0]=i[d>>0]|0;uF(c,w1,K0);z1=k[x1>>2]|0}while((z1|0)!=(M0|0));Naa=k[u1>>2]|0}OBa(Naa);Haa=0;Iaa=P0;Jaa=uaa;Kaa=vaa;Laa=waa;Maa=xaa}while(0);if((ug|0)==7716){O0=Hc()|0;Haa=1;Iaa=X3;Jaa=Q0;Kaa=1;Laa=O0;Maa=M}O0=k[Me>>2]|0;if(!O0){Oaa=Haa;Paa=Jaa;Qaa=Iaa;Raa=Kaa;Saa=Laa;Taa=Maa;break Nb}M0=k[r1>>2]|0;if((M0|0)==(O0|0))Uaa=O0;else{z1=M0;while(1){M0=z1+-72|0;k[r1>>2]=M0;x1=z1+-24|0;w1=k[x1>>2]|0;if(!w1)Vaa=M0;else{N0=z1+-20|0;K0=k[N0>>2]|0;if((K0|0)==(w1|0)){Waa=M0;Xaa=w1}else{M0=z1+-16|0;J0=K0;do{K0=J0+-72|0;k[N0>>2]=K0;i[c>>0]=i[d>>0]|0;uF(c,M0,K0);J0=k[N0>>2]|0}while((J0|0)!=(w1|0));Waa=k[r1>>2]|0;Xaa=k[x1>>2]|0}OBa(Xaa);Vaa=Waa}if((Vaa|0)==(O0|0))break;else z1=Vaa}Uaa=k[Me>>2]|0}OBa(Uaa);Oaa=Haa;Paa=Jaa;Qaa=Iaa;Raa=Kaa;Saa=Laa;Taa=Maa;break Nb}while(0);t1=Hc()|0;z1=M;O0=k[Me>>2]|0;if(!O0){V3=t1;W3=z1;ug=7715;break}w1=k[r1>>2]|0;if((w1|0)==(O0|0))Yaa=O0;else{J0=w1;while(1){w1=J0+-72|0;k[r1>>2]=w1;N0=J0+-24|0;M0=k[N0>>2]|0;if(!M0)Zaa=w1;else{P0=J0+-20|0;u1=k[P0>>2]|0;if((u1|0)==(M0|0)){_aa=w1;$aa=M0}else{w1=J0+-16|0;K0=u1;do{u1=K0+-72|0;k[P0>>2]=u1;i[c>>0]=i[d>>0]|0;uF(c,w1,u1);K0=k[P0>>2]|0}while((K0|0)!=(M0|0));_aa=k[r1>>2]|0;$aa=k[N0>>2]|0}OBa($aa);Zaa=_aa}if((Zaa|0)==(O0|0))break;else J0=Zaa}Yaa=k[Me>>2]|0}OBa(Yaa);V3=t1;W3=z1;ug=7715}while(0);if((ug|0)==7715){Oaa=1;Paa=Q0;Qaa=Le;Raa=1;Saa=V3;Taa=W3}r1=Ne+120|0;s1=k[r1>>2]|0;if(s1){o1=Ne+124|0;v1=k[o1>>2]|0;if((v1|0)==(s1|0))aba=s1;else{J0=Ne+128|0;O0=v1;do{v1=O0+-72|0;k[o1>>2]=v1;i[c>>0]=i[d>>0]|0;uF(c,J0,v1);O0=k[o1>>2]|0}while((O0|0)!=(s1|0));aba=k[r1>>2]|0}OBa(aba)}s1=Ne+48|0;O0=k[s1>>2]|0;if(!O0){bba=Oaa;cba=Paa;dba=Raa;eba=Saa;fba=Taa;gba=Qaa;break}o1=Ne+52|0;J0=k[o1>>2]|0;if((J0|0)==(O0|0))hba=O0;else{v1=Ne+56|0;M0=J0;do{J0=M0+-72|0;k[o1>>2]=J0;i[c>>0]=i[d>>0]|0;uF(c,v1,J0);M0=k[o1>>2]|0}while((M0|0)!=(O0|0));hba=k[s1>>2]|0}OBa(hba);bba=Oaa;cba=Paa;dba=Raa;eba=Saa;fba=Taa;gba=Qaa}while(0);do if((ug|0)==7706){q1=Hc()|0;O0=M;if((Ne|0)==(U3|0)){bba=1;cba=Q0;dba=1;eba=q1;fba=O0;gba=Le;break}M0=U3;do{o1=M0+-24|0;v1=k[o1>>2]|0;if(v1){r1=M0+-20|0;J0=k[r1>>2]|0;if((J0|0)==(v1|0))iba=v1;else{K0=M0+-16|0;P0=J0;do{J0=P0+-72|0;k[r1>>2]=J0;i[c>>0]=i[d>>0]|0;uF(c,K0,J0);P0=k[r1>>2]|0}while((P0|0)!=(v1|0));iba=k[o1>>2]|0}OBa(iba)}M0=M0+-72|0}while((M0|0)!=(Ne|0));bba=1;cba=Q0;dba=1;eba=q1;fba=O0;gba=Le}while(0);if((Le|0)==(gba|0)|bba^1){jba=cba;kba=dba;lba=eba;mba=fba;break}Q0=gba;do{O0=Q0+-24|0;q1=k[O0>>2]|0;if(q1){M0=Q0+-20|0;s1=k[M0>>2]|0;if((s1|0)==(q1|0))nba=q1;else{v1=Q0+-16|0;P0=s1;do{s1=P0+-72|0;k[M0>>2]=s1;i[c>>0]=i[d>>0]|0;uF(c,v1,s1);P0=k[M0>>2]|0}while((P0|0)!=(q1|0));nba=k[O0>>2]|0}OBa(nba)}Q0=Q0+-72|0}while((Q0|0)!=(Le|0));jba=cba;kba=dba;lba=eba;mba=fba}while(0);if((ug|0)==7705){jba=De;kba=1;lba=S3;mba=R3}n1=k[k1>>2]|0;if((n1|0)==(He|0)){Sf[k[(k[He>>2]|0)+16>>2]&2047](He);N3=jba;O3=lba;P3=mba;Q3=kba;break}if(!n1){N3=jba;O3=lba;P3=mba;Q3=kba;break}Sf[k[(k[n1>>2]|0)+20>>2]&2047](n1);N3=jba;O3=lba;P3=mba;Q3=kba}while(0);k1=Ie+120|0;m1=k[k1>>2]|0;if(m1){T0=Ie+124|0;S0=k[T0>>2]|0;if((S0|0)==(m1|0))oba=m1;else{f1=Ie+128|0;g1=S0;do{S0=g1+-72|0;k[T0>>2]=S0;i[c>>0]=i[d>>0]|0;uF(c,f1,S0);g1=k[T0>>2]|0}while((g1|0)!=(m1|0));oba=k[k1>>2]|0}OBa(oba)}m1=Ie+48|0;g1=k[m1>>2]|0;if(!g1){I3=N3;J3=O3;K3=P3;L3=Q3;break}T0=Ie+52|0;f1=k[T0>>2]|0;if((f1|0)==(g1|0))pba=g1;else{S0=Ie+56|0;V0=f1;do{f1=V0+-72|0;k[T0>>2]=f1;i[c>>0]=i[d>>0]|0;uF(c,S0,f1);V0=k[T0>>2]|0}while((V0|0)!=(g1|0));pba=k[m1>>2]|0}OBa(pba);I3=N3;J3=O3;K3=P3;L3=Q3}while(0);X0=Ee+48|0;d1=k[X0>>2]|0;if(!d1){E3=I3;F3=J3;G3=K3;H3=L3;break}c1=Ee+52|0;W0=k[c1>>2]|0;if((W0|0)==(d1|0))qba=d1;else{g1=Ee+56|0;V0=W0;do{W0=V0+-72|0;k[c1>>2]=W0;i[c>>0]=i[d>>0]|0;uF(c,g1,W0);V0=k[c1>>2]|0}while((V0|0)!=(d1|0));qba=k[X0>>2]|0}OBa(qba);E3=I3;F3=J3;G3=K3;H3=L3}while(0);Y0=k[Fe>>2]|0;if(!Y0){rba=E3;sba=F3;tba=G3;uba=H3;break Kb}a1=k[_0>>2]|0;if((a1|0)==(Y0|0))vba=Y0;else{b1=a1;while(1){a1=b1+-72|0;k[_0>>2]=a1;d1=b1+-24|0;V0=k[d1>>2]|0;if(!V0)wba=a1;else{c1=b1+-20|0;g1=k[c1>>2]|0;if((g1|0)==(V0|0)){xba=a1;yba=V0}else{a1=b1+-16|0;W0=g1;do{g1=W0+-72|0;k[c1>>2]=g1;i[c>>0]=i[d>>0]|0;uF(c,a1,g1);W0=k[c1>>2]|0}while((W0|0)!=(V0|0));xba=k[_0>>2]|0;yba=k[d1>>2]|0}OBa(yba);wba=xba}if((wba|0)==(Y0|0))break;else b1=wba}vba=k[Fe>>2]|0}OBa(vba);rba=E3;sba=F3;tba=G3;uba=H3;break Kb}while(0);Q1=Hc()|0;b1=M;Y0=k[Fe>>2]|0;if(!Y0){C3=Q1;D3=b1;ug=7694;break}V0=k[_0>>2]|0;if((V0|0)==(Y0|0))zba=Y0;else{W0=V0;while(1){V0=W0+-72|0;k[_0>>2]=V0;c1=W0+-24|0;a1=k[c1>>2]|0;if(!a1)Aba=V0;else{X0=W0+-20|0;g1=k[X0>>2]|0;if((g1|0)==(a1|0)){Bba=V0;Cba=a1}else{V0=W0+-16|0;T0=g1;do{g1=T0+-72|0;k[X0>>2]=g1;i[c>>0]=i[d>>0]|0;uF(c,V0,g1);T0=k[X0>>2]|0}while((T0|0)!=(a1|0));Bba=k[_0>>2]|0;Cba=k[c1>>2]|0}OBa(Cba);Aba=Bba}if((Aba|0)==(Y0|0))break;else W0=Aba}zba=k[Fe>>2]|0}OBa(zba);C3=Q1;D3=b1;ug=7694}while(0);if((ug|0)==7694){rba=De;sba=C3;tba=D3;uba=1}_0=Ge+120|0;$0=k[_0>>2]|0;if($0){N1=Ge+124|0;Z0=k[N1>>2]|0;if((Z0|0)==($0|0))Dba=$0;else{W0=Ge+128|0;Y0=Z0;do{Z0=Y0+-72|0;k[N1>>2]=Z0;i[c>>0]=i[d>>0]|0;uF(c,W0,Z0);Y0=k[N1>>2]|0}while((Y0|0)!=($0|0));Dba=k[_0>>2]|0}OBa(Dba)}$0=Ge+48|0;Y0=k[$0>>2]|0;if(!Y0){Eba=rba;Fba=sba;Gba=tba;Hba=uba;break}N1=Ge+52|0;W0=k[N1>>2]|0;if((W0|0)==(Y0|0))Iba=Y0;else{Z0=Ge+56|0;a1=W0;do{W0=a1+-72|0;k[N1>>2]=W0;i[c>>0]=i[d>>0]|0;uF(c,Z0,W0);a1=k[N1>>2]|0}while((a1|0)!=(Y0|0));Iba=k[$0>>2]|0}OBa(Iba);Eba=rba;Fba=sba;Gba=tba;Hba=uba}while(0);do if((ug|0)==7685){pV=Hc()|0;Y0=M;if((Ge|0)==(B3|0)){Eba=De;Fba=pV;Gba=Y0;Hba=1;break}a1=B3;do{N1=a1+-24|0;Z0=k[N1>>2]|0;if(Z0){_0=a1+-20|0;W0=k[_0>>2]|0;if((W0|0)==(Z0|0))Jba=Z0;else{T0=a1+-16|0;X0=W0;do{W0=X0+-72|0;k[_0>>2]=W0;i[c>>0]=i[d>>0]|0;uF(c,T0,W0);X0=k[_0>>2]|0}while((X0|0)!=(Z0|0));Jba=k[N1>>2]|0}OBa(Jba)}a1=a1+-72|0}while((a1|0)!=(Ge|0));Eba=De;Fba=pV;Gba=Y0;Hba=1}while(0);if((De|0)==(Eba|0)|Hba^1){IU=Fba;JU=Gba;break a}Y0=Eba;while(1){pV=k[Y0+-8>>2]|0;do if((pV|0)==(Y0+-24|0))Sf[k[(k[pV>>2]|0)+16>>2]&2047](pV);else{if(!pV)break;Sf[k[(k[pV>>2]|0)+20>>2]&2047](pV)}while(0);pV=Y0+-48|0;a1=k[pV>>2]|0;if(a1){$0=Y0+-44|0;Z0=k[$0>>2]|0;if((Z0|0)==(a1|0))Kba=a1;else{X0=Y0+-40|0;_0=Z0;do{Z0=_0+-72|0;k[$0>>2]=Z0;i[c>>0]=i[d>>0]|0;uF(c,X0,Z0);_0=k[$0>>2]|0}while((_0|0)!=(a1|0));Kba=k[pV>>2]|0}OBa(Kba)}Y0=Y0+-96|0;if((Y0|0)==(De|0)){IU=Fba;JU=Gba;break a}}break}case 6061:{Y0=Hc()|0;Lba=Y0;Mba=M;ug=6580;break}case 6062:{Y0=Hc()|0;a1=M;_0=k[de>>2]|0;if(!_0){Lba=Y0;Mba=a1;ug=6580;break}$0=k[LU>>2]|0;if(($0|0)==(_0|0))Nba=_0;else{X0=$0;while(1){$0=X0+-72|0;k[LU>>2]=$0;Z0=X0+-24|0;T0=k[Z0>>2]|0;if(!T0)Oba=$0;else{b1=X0+-20|0;Q1=k[b1>>2]|0;if((Q1|0)==(T0|0)){Pba=$0;Qba=T0}else{$0=X0+-16|0;W0=Q1;do{Q1=W0+-72|0;k[b1>>2]=Q1;i[c>>0]=i[d>>0]|0;uF(c,$0,Q1);W0=k[b1>>2]|0}while((W0|0)!=(T0|0));Pba=k[LU>>2]|0;Qba=k[Z0>>2]|0}OBa(Qba);Oba=Pba}if((Oba|0)==(_0|0))break;else X0=Oba}Nba=k[de>>2]|0}OBa(Nba);Lba=Y0;Mba=a1;ug=6580;break}case 6078:{X0=Hc()|0;Rba=X0;Sba=M;ug=6582;break}case 6079:{X0=Hc()|0;_0=M;T0=k[be>>2]|0;if(!T0){Rba=X0;Sba=_0;ug=6582;break}W0=k[WV>>2]|0;if((W0|0)==(T0|0))Tba=T0;else{b1=W0;while(1){W0=b1+-72|0;k[WV>>2]=W0;$0=b1+-24|0;pV=k[$0>>2]|0;if(!pV)Uba=W0;else{Q1=b1+-20|0;V0=k[Q1>>2]|0;if((V0|0)==(pV|0)){Vba=W0;Wba=pV}else{W0=b1+-16|0;g1=V0;do{V0=g1+-72|0;k[Q1>>2]=V0;i[c>>0]=i[d>>0]|0;uF(c,W0,V0);g1=k[Q1>>2]|0}while((g1|0)!=(pV|0));Vba=k[WV>>2]|0;Wba=k[$0>>2]|0}OBa(Wba);Uba=Vba}if((Uba|0)==(T0|0))break;else b1=Uba}Tba=k[be>>2]|0}OBa(Tba);Rba=X0;Sba=_0;ug=6582;break}case 6107:{b1=Hc(0)|0;Fg(b1);break}case 6115:{b1=Hc()|0;T0=M;a1=$d+48|0;Y0=k[a1>>2]|0;if(!Y0){Xba=T0;Yba=b1;ug=6605;break}pV=$d+52|0;g1=k[pV>>2]|0;if((g1|0)==(Y0|0))Zba=Y0;else{Q1=$d+56|0;W0=g1;do{g1=W0+-72|0;k[pV>>2]=g1;i[c>>0]=i[d>>0]|0;uF(c,Q1,g1);W0=k[pV>>2]|0}while((W0|0)!=(Y0|0));Zba=k[a1>>2]|0}OBa(Zba);Xba=T0;Yba=b1;ug=6605;break}case 6126:{Y0=Hc()|0;_ba=Y0;$ba=M;ug=6615;break}case 6127:{Y0=Hc()|0;W0=M;pV=k[ke>>2]|0;if(!pV){_ba=Y0;$ba=W0;ug=6615;break}Q1=k[PX>>2]|0;if((Q1|0)==(pV|0))aca=pV;else{_0=Q1;while(1){Q1=_0+-72|0;k[PX>>2]=Q1;X0=_0+-24|0;g1=k[X0>>2]|0;if(!g1)bca=Q1;else{Z0=_0+-20|0;V0=k[Z0>>2]|0;if((V0|0)==(g1|0)){cca=Q1;dca=g1}else{Q1=_0+-16|0;S0=V0;do{V0=S0+-72|0;k[Z0>>2]=V0;i[c>>0]=i[d>>0]|0;uF(c,Q1,V0);S0=k[Z0>>2]|0}while((S0|0)!=(g1|0));cca=k[PX>>2]|0;dca=k[X0>>2]|0}OBa(dca);bca=cca}if((bca|0)==(pV|0))break;else _0=bca}aca=k[ke>>2]|0}OBa(aca);_ba=Y0;$ba=W0;ug=6615;break}case 6143:{_0=Hc()|0;eca=_0;fca=M;ug=6617;break}case 6144:{_0=Hc()|0;pV=M;b1=k[ie>>2]|0;if(!b1){eca=_0;fca=pV;ug=6617;break}T0=k[bY>>2]|0;if((T0|0)==(b1|0))gca=b1;else{a1=T0;while(1){T0=a1+-72|0;k[bY>>2]=T0;g1=a1+-24|0;S0=k[g1>>2]|0;if(!S0)hca=T0;else{Z0=a1+-20|0;Q1=k[Z0>>2]|0;if((Q1|0)==(S0|0)){ica=T0;jca=S0}else{T0=a1+-16|0;$0=Q1;do{Q1=$0+-72|0;k[Z0>>2]=Q1;i[c>>0]=i[d>>0]|0;uF(c,T0,Q1);$0=k[Z0>>2]|0}while(($0|0)!=(S0|0));ica=k[bY>>2]|0;jca=k[g1>>2]|0}OBa(jca);hca=ica}if((hca|0)==(b1|0))break;else a1=hca}gca=k[ie>>2]|0}OBa(gca);eca=_0;fca=pV;ug=6617;break}case 6167:{a1=Hc()|0;b1=M;W0=$d+144|0;Y0=k[W0>>2]|0;if(!Y0){kca=b1;lca=a1;ug=6635;break}S0=$d+148|0;$0=k[S0>>2]|0;if(($0|0)==(Y0|0))mca=Y0;else{Z0=$d+152|0;T0=$0;do{$0=T0+-72|0;k[S0>>2]=$0;i[c>>0]=i[d>>0]|0;uF(c,Z0,$0);T0=k[S0>>2]|0}while((T0|0)!=(Y0|0));mca=k[W0>>2]|0}OBa(mca);kca=b1;lca=a1;ug=6635;break}case 6178:{Y0=Hc()|0;nca=Y0;oca=M;ug=6645;break}case 6179:{Y0=Hc()|0;T0=M;S0=k[re>>2]|0;if(!S0){nca=Y0;oca=T0;ug=6645;break}Z0=k[QY>>2]|0;if((Z0|0)==(S0|0))pca=S0;else{pV=Z0;while(1){Z0=pV+-72|0;k[QY>>2]=Z0;_0=pV+-24|0;$0=k[_0>>2]|0;if(!$0)qca=Z0;else{X0=pV+-20|0;Q1=k[X0>>2]|0;if((Q1|0)==($0|0)){rca=Z0;sca=$0}else{Z0=pV+-16|0;V0=Q1;do{Q1=V0+-72|0;k[X0>>2]=Q1;i[c>>0]=i[d>>0]|0;uF(c,Z0,Q1);V0=k[X0>>2]|0}while((V0|0)!=($0|0));rca=k[QY>>2]|0;sca=k[_0>>2]|0}OBa(sca);qca=rca}if((qca|0)==(S0|0))break;else pV=qca}pca=k[re>>2]|0}OBa(pca);nca=Y0;oca=T0;ug=6645;break}case 6195:{pV=Hc()|0;tca=pV;uca=M;ug=6647;break}case 6196:{pV=Hc()|0;S0=M;a1=k[pe>>2]|0;if(!a1){tca=pV;uca=S0;ug=6647;break}b1=k[bZ>>2]|0;if((b1|0)==(a1|0))vca=a1;else{W0=b1;while(1){b1=W0+-72|0;k[bZ>>2]=b1;$0=W0+-24|0;V0=k[$0>>2]|0;if(!V0)wca=b1;else{X0=W0+-20|0;Z0=k[X0>>2]|0;if((Z0|0)==(V0|0)){xca=b1;yca=V0}else{b1=W0+-16|0;g1=Z0;do{Z0=g1+-72|0;k[X0>>2]=Z0;i[c>>0]=i[d>>0]|0;uF(c,b1,Z0);g1=k[X0>>2]|0}while((g1|0)!=(V0|0));xca=k[bZ>>2]|0;yca=k[$0>>2]|0}OBa(yca);wca=xca}if((wca|0)==(a1|0))break;else W0=wca}vca=k[pe>>2]|0}OBa(vca);tca=pV;uca=S0;ug=6647;break}case 6224:{W0=Hc(0)|0;Fg(W0);break}case 6232:{W0=Hc()|0;a1=M;T0=$d+240|0;Y0=k[T0>>2]|0;if(!Y0){zca=a1;Aca=W0;ug=6670;break}V0=$d+244|0;g1=k[V0>>2]|0;if((g1|0)==(Y0|0))Bca=Y0;else{X0=$d+248|0;b1=g1;do{g1=b1+-72|0;k[V0>>2]=g1;i[c>>0]=i[d>>0]|0;uF(c,X0,g1);b1=k[V0>>2]|0}while((b1|0)!=(Y0|0));Bca=k[T0>>2]|0}OBa(Bca);zca=a1;Aca=W0;ug=6670;break}case 6243:{Y0=Hc()|0;Cca=Y0;Dca=M;ug=6680;break}case 6244:{Y0=Hc()|0;b1=M;V0=k[ye>>2]|0;if(!V0){Cca=Y0;Dca=b1;ug=6680;break}X0=k[SZ>>2]|0;if((X0|0)==(V0|0))Eca=V0;else{S0=X0;while(1){X0=S0+-72|0;k[SZ>>2]=X0;pV=S0+-24|0;g1=k[pV>>2]|0;if(!g1)Fca=X0;else{_0=S0+-20|0;Z0=k[_0>>2]|0;if((Z0|0)==(g1|0)){Gca=X0;Hca=g1}else{X0=S0+-16|0;Q1=Z0;do{Z0=Q1+-72|0;k[_0>>2]=Z0;i[c>>0]=i[d>>0]|0;uF(c,X0,Z0);Q1=k[_0>>2]|0}while((Q1|0)!=(g1|0));Gca=k[SZ>>2]|0;Hca=k[pV>>2]|0}OBa(Hca);Fca=Gca}if((Fca|0)==(V0|0))break;else S0=Fca}Eca=k[ye>>2]|0}OBa(Eca);Cca=Y0;Dca=b1;ug=6680;break}case 6260:{S0=Hc()|0;Ica=S0;Jca=M;ug=6682;break}case 6261:{S0=Hc()|0;V0=M;W0=k[we>>2]|0;if(!W0){Ica=S0;Jca=V0;ug=6682;break}a1=k[d_>>2]|0;if((a1|0)==(W0|0))Kca=W0;else{T0=a1;while(1){a1=T0+-72|0;k[d_>>2]=a1;g1=T0+-24|0;Q1=k[g1>>2]|0;if(!Q1)Lca=a1;else{_0=T0+-20|0;X0=k[_0>>2]|0;if((X0|0)==(Q1|0)){Mca=a1;Nca=Q1}else{a1=T0+-16|0;$0=X0;do{X0=$0+-72|0;k[_0>>2]=X0;i[c>>0]=i[d>>0]|0;uF(c,a1,X0);$0=k[_0>>2]|0}while(($0|0)!=(Q1|0));Mca=k[d_>>2]|0;Nca=k[g1>>2]|0}OBa(Nca);Lca=Mca}if((Lca|0)==(W0|0))break;else T0=Lca}Kca=k[we>>2]|0}OBa(Kca);Ica=S0;Jca=V0;ug=6682;break}case 6284:{T0=Hc()|0;W0=M;b1=$d+336|0;Y0=k[b1>>2]|0;if(!Y0){Oca=W0;Pca=T0;ug=6700;break}Q1=$d+340|0;$0=k[Q1>>2]|0;if(($0|0)==(Y0|0))Qca=Y0;else{_0=$d+344|0;a1=$0;do{$0=a1+-72|0;k[Q1>>2]=$0;i[c>>0]=i[d>>0]|0;uF(c,_0,$0);a1=k[Q1>>2]|0}while((a1|0)!=(Y0|0));Qca=k[b1>>2]|0}OBa(Qca);Oca=W0;Pca=T0;ug=6700;break}case 6292:{Y0=Hc()|0;a1=M;Q1=k[_d>>2]|0;if(Q1){_0=k[K_>>2]|0;if((_0|0)==(Q1|0))Rca=Q1;else{V0=_0;while(1){_0=V0+-96|0;k[K_>>2]=_0;S0=k[V0+-8>>2]|0;do if((S0|0)==(V0+-24|0))Sf[k[(k[S0>>2]|0)+16>>2]&2047](S0);else{if(!S0)break;Sf[k[(k[S0>>2]|0)+20>>2]&2047](S0)}while(0);S0=V0+-48|0;g1=k[S0>>2]|0;if(!g1)Sca=_0;else{$0=V0+-44|0;pV=k[$0>>2]|0;if((pV|0)==(g1|0)){Tca=_0;Uca=g1}else{X0=V0+-40|0;Z0=pV;do{pV=Z0+-72|0;k[$0>>2]=pV;i[c>>0]=i[d>>0]|0;uF(c,X0,pV);Z0=k[$0>>2]|0}while((Z0|0)!=(g1|0));Tca=k[K_>>2]|0;Uca=k[S0>>2]|0}OBa(Uca);Sca=Tca}if((Sca|0)==(Q1|0))break;else V0=Sca}Rca=k[_d>>2]|0}OBa(Rca)}Vca=Y0;Wca=a1;ug=6718;break}case 6570:{V0=Hc()|0;Xca=V0;Yca=M;break}case 6571:{V0=Hc()|0;Q1=M;if((ee|0)==(T1|0)){Zca=1;_ca=$d;$ca=V0;ada=Q1;bda=ce;cda=1;ug=7028;break}T0=T1;do{W0=T0+-24|0;b1=k[W0>>2]|0;if(b1){g1=T0+-20|0;Z0=k[g1>>2]|0;if((Z0|0)==(b1|0))dda=b1;else{$0=T0+-16|0;X0=Z0;do{Z0=X0+-72|0;k[g1>>2]=Z0;i[c>>0]=i[d>>0]|0;uF(c,$0,Z0);X0=k[g1>>2]|0}while((X0|0)!=(b1|0));dda=k[W0>>2]|0}OBa(dda)}T0=T0+-72|0}while((T0|0)!=(ee|0));Zca=1;_ca=$d;$ca=V0;ada=Q1;bda=ce;cda=1;ug=7028;break}case 6581:{Q1=Hc()|0;eda=1;fda=U1;gda=$d;hda=Q1;ida=M;jda=1;ug=7009;break}case 6583:{Q1=Hc()|0;kda=$d;lda=Q1;mda=M;nda=1;ug=6990;break}case 6584:{Q1=Hc()|0;oda=$d;pda=1;qda=Q1;rda=M;ug=6984;break}case 6585:{Q1=Hc()|0;sda=Q1;tda=M;ug=6597;break}case 6586:{Q1=Hc()|0;uda=Q1;vda=M;ug=6593;break}case 6587:{Q1=Hc()|0;V0=M;T0=k[$_>>2]|0;if(!T0){uda=Q1;vda=V0;ug=6593;break}a1=k[BN>>2]|0;if((a1|0)==(T0|0))wda=T0;else{Y0=a1;do{a1=Y0+-72|0;k[BN>>2]=a1;i[c>>0]=i[d>>0]|0;uF(c,f$,a1);Y0=k[BN>>2]|0}while((Y0|0)!=(T0|0));wda=k[$_>>2]|0}OBa(wda);uda=Q1;vda=V0;ug=6593;break}case 6603:{T0=Hc()|0;xda=$d;yda=1;zda=T0;Ada=M;ug=6962;break}case 6604:{T0=Hc()|0;Xba=M;Yba=T0;ug=6605;break}case 6606:{T0=Hc()|0;Y0=M;if((le|0)==(_1|0)){Bda=HX;Cda=1;Dda=1;Eda=T0;Fda=Y0;Gda=je;ug=6949;break}a1=_1;do{b1=a1+-24|0;X0=k[b1>>2]|0;if(X0){g1=a1+-20|0;$0=k[g1>>2]|0;if(($0|0)==(X0|0))Hda=X0;else{S0=a1+-16|0;Z0=$0;do{$0=Z0+-72|0;k[g1>>2]=$0;i[c>>0]=i[d>>0]|0;uF(c,S0,$0);Z0=k[g1>>2]|0}while((Z0|0)!=(X0|0));Hda=k[b1>>2]|0}OBa(Hda)}a1=a1+-72|0}while((a1|0)!=(le|0));Bda=HX;Cda=1;Dda=1;Eda=T0;Fda=Y0;Gda=je;ug=6949;break}case 6616:{Y0=Hc()|0;Ida=1;Jda=$1;Kda=HX;Lda=1;Mda=Y0;Nda=M;ug=6930;break}case 6618:{Y0=Hc()|0;Oda=HX;Pda=1;Qda=Y0;Rda=M;ug=6911;break}case 6619:{Y0=Hc()|0;Sda=HX;Tda=1;Uda=Y0;Vda=M;ug=6905;break}case 6620:{Y0=Hc()|0;Wda=Y0;Xda=M;ug=6627;break}case 6621:{Y0=Hc()|0;T0=M;a1=k[X_>>2]|0;if(!a1){Wda=Y0;Xda=T0;ug=6627;break}V0=k[zY>>2]|0;if((V0|0)==(a1|0))Yda=a1;else{Q1=V0;do{V0=Q1+-72|0;k[zY>>2]=V0;i[c>>0]=i[d>>0]|0;uF(c,k$,V0);Q1=k[zY>>2]|0}while((Q1|0)!=(a1|0));Yda=k[X_>>2]|0}OBa(Yda);Wda=Y0;Xda=T0;ug=6627;break}case 6633:{a1=Hc()|0;Zda=1;_da=a1;$da=M;aea=HX;ug=6887;break}case 6634:{a1=Hc()|0;kca=M;lca=a1;ug=6635;break}case 6636:{a1=Hc()|0;Q1=M;if((se|0)==(a2|0)){bea=1;cea=1;dea=a1;eea=Q1;fea=qe;gea=IY;ug=6874;break}V0=a2;do{X0=V0+-24|0;Z0=k[X0>>2]|0;if(Z0){g1=V0+-20|0;S0=k[g1>>2]|0;if((S0|0)==(Z0|0))hea=Z0;else{W0=V0+-16|0;$0=S0;do{S0=$0+-72|0;k[g1>>2]=S0;i[c>>0]=i[d>>0]|0;uF(c,W0,S0);$0=k[g1>>2]|0}while(($0|0)!=(Z0|0));hea=k[X0>>2]|0}OBa(hea)}V0=V0+-72|0}while((V0|0)!=(se|0));bea=1;cea=1;dea=a1;eea=Q1;fea=qe;gea=IY;ug=6874;break}case 6646:{Q1=Hc()|0;iea=1;jea=b2;kea=1;lea=Q1;mea=M;nea=IY;ug=6855;break}case 6648:{Q1=Hc()|0;oea=1;pea=Q1;qea=M;rea=IY;ug=6836;break}case 6649:{Q1=Hc()|0;sea=1;tea=IY;uea=Q1;vea=M;ug=6830;break}case 6650:{Q1=Hc()|0;wea=Q1;xea=M;ug=6662;break}case 6651:{Q1=Hc()|0;yea=Q1;zea=M;ug=6658;break}case 6652:{Q1=Hc()|0;a1=M;V0=k[T_>>2]|0;if(!V0){yea=Q1;zea=a1;ug=6658;break}T0=k[BZ>>2]|0;if((T0|0)==(V0|0))Aea=V0;else{Y0=T0;do{T0=Y0+-72|0;k[BZ>>2]=T0;i[c>>0]=i[d>>0]|0;uF(c,p$,T0);Y0=k[BZ>>2]|0}while((Y0|0)!=(V0|0));Aea=k[T_>>2]|0}OBa(Aea);yea=Q1;zea=a1;ug=6658;break}case 6668:{V0=Hc()|0;Bea=IY;Cea=V0;Dea=M;Eea=1;ug=6808;break}case 6669:{V0=Hc()|0;zca=M;Aca=V0;ug=6670;break}case 6671:{V0=Hc()|0;Y0=M;if((ze|0)==(e2|0)){Fea=1;Gea=V0;Hea=Y0;Iea=xe;Jea=1;ug=6795;break}T0=e2;do{Z0=T0+-24|0;$0=k[Z0>>2]|0;if($0){g1=T0+-20|0;W0=k[g1>>2]|0;if((W0|0)==($0|0))Kea=$0;else{b1=T0+-16|0;S0=W0;do{W0=S0+-72|0;k[g1>>2]=W0;i[c>>0]=i[d>>0]|0;uF(c,b1,W0);S0=k[g1>>2]|0}while((S0|0)!=($0|0));Kea=k[Z0>>2]|0}OBa(Kea)}T0=T0+-72|0}while((T0|0)!=(ze|0));Fea=1;Gea=V0;Hea=Y0;Iea=xe;Jea=1;ug=6795;break}case 6681:{Y0=Hc()|0;Lea=1;Mea=f2;Nea=Y0;Oea=M;Pea=1;ug=6776;break}case 6683:{Y0=Hc()|0;Qea=Y0;Rea=M;Sea=1;ug=6757;break}case 6684:{Y0=Hc()|0;Tea=Y0;Uea=M;Vea=1;ug=6751;break}case 6685:{Y0=Hc()|0;Wea=Y0;Xea=M;ug=6692;break}case 6686:{Y0=Hc()|0;V0=M;T0=k[P_>>2]|0;if(!T0){Wea=Y0;Xea=V0;ug=6692;break}a1=k[B_>>2]|0;if((a1|0)==(T0|0))Yea=T0;else{Q1=a1;do{a1=Q1+-72|0;k[B_>>2]=a1;i[c>>0]=i[d>>0]|0;uF(c,u$,a1);Q1=k[B_>>2]|0}while((Q1|0)!=(T0|0));Yea=k[P_>>2]|0}OBa(Yea);Wea=Y0;Xea=V0;ug=6692;break}case 6698:{T0=Hc()|0;Zea=1;_ea=T0;$ea=M;ug=6733;break}case 6699:{T0=Hc()|0;Oca=M;Pca=T0;ug=6700;break}case 6702:{T0=Hc()|0;Q1=M;a1=k[_d>>2]|0;if(!a1){Vca=T0;Wca=Q1;ug=6718;break}$0=k[K_>>2]|0;if(($0|0)==(a1|0))afa=a1;else{S0=$0;while(1){$0=S0+-96|0;k[K_>>2]=$0;g1=k[S0+-8>>2]|0;do if((g1|0)==(S0+-24|0))Sf[k[(k[g1>>2]|0)+16>>2]&2047](g1);else{if(!g1)break;Sf[k[(k[g1>>2]|0)+20>>2]&2047](g1)}while(0);g1=S0+-48|0;Z0=k[g1>>2]|0;if(!Z0)bfa=$0;else{b1=S0+-44|0;X0=k[b1>>2]|0;if((X0|0)==(Z0|0)){cfa=$0;dfa=Z0}else{W0=S0+-40|0;_0=X0;do{X0=_0+-72|0;k[b1>>2]=X0;i[c>>0]=i[d>>0]|0;uF(c,W0,X0);_0=k[b1>>2]|0}while((_0|0)!=(Z0|0));cfa=k[K_>>2]|0;dfa=k[g1>>2]|0}OBa(dfa);bfa=cfa}if((bfa|0)==(a1|0))break;else S0=bfa}afa=k[_d>>2]|0}OBa(afa);Vca=T0;Wca=Q1;ug=6718;break}}switch(ug|0){case 6580:{efa=1;ffa=ce;gfa=$d;hfa=Lba;ifa=Mba;jfa=1;ug=7021;break}case 6582:{kfa=$d;lfa=Rba;mfa=Sba;nfa=1;ug=7002;break}case 6593:{S0=k[QV>>2]|0;if((S0|0)==(RV|0)){Sf[k[(k[RV>>2]|0)+16>>2]&2047](RV);sda=uda;tda=vda;ug=6597;break}if(!S0){sda=uda;tda=vda;ug=6597;break}Sf[k[(k[S0>>2]|0)+20>>2]&2047](S0);sda=uda;tda=vda;ug=6597;break}case 6605:{ofa=$d;pfa=1;qfa=Yba;rfa=Xba;ug=6958;break}case 6615:{sfa=1;tfa=HX;ufa=je;vfa=1;wfa=_ba;xfa=$ba;ug=6942;break}case 6617:{yfa=HX;zfa=1;Afa=eca;Bfa=fca;ug=6923;break}case 6627:{S0=k[Y_>>2]|0;if(!S0){Sda=HX;Tda=1;Uda=Wda;Vda=Xda;ug=6905;break}a1=k[xY>>2]|0;if((a1|0)==(S0|0))Cfa=S0;else{K_=a1;do{a1=K_+-72|0;k[xY>>2]=a1;i[c>>0]=i[d>>0]|0;uF(c,j$,a1);K_=k[xY>>2]|0}while((K_|0)!=(S0|0));Cfa=k[Y_>>2]|0}OBa(Cfa);Sda=HX;Tda=1;Uda=Wda;Vda=Xda;ug=6905;break}case 6635:{Dfa=1;Efa=lca;Ffa=kca;Gfa=HX;ug=6883;break}case 6645:{Hfa=1;Ifa=1;Jfa=qe;Kfa=nca;Lfa=oca;Mfa=IY;ug=6867;break}case 6647:{Nfa=1;Ofa=tca;Pfa=uca;Qfa=IY;ug=6848;break}case 6658:{S0=k[pZ>>2]|0;if((S0|0)==(oZ|0)){Sf[k[(k[oZ>>2]|0)+16>>2]&2047](oZ);wea=yea;xea=zea;ug=6662;break}if(!S0){wea=yea;xea=zea;ug=6662;break}Sf[k[(k[S0>>2]|0)+20>>2]&2047](S0);wea=yea;xea=zea;ug=6662;break}case 6670:{Rfa=IY;Sfa=Aca;Tfa=zca;Ufa=1;ug=6804;break}case 6680:{Vfa=1;Wfa=xe;Xfa=Cca;Yfa=Dca;Zfa=1;ug=6788;break}case 6682:{_fa=Ica;$fa=Jca;aga=1;ug=6769;break}case 6692:{S0=k[Q_>>2]|0;if(!S0){Tea=Wea;Uea=Xea;Vea=1;ug=6751;break}K_=k[z_>>2]|0;if((K_|0)==(S0|0))bga=S0;else{Q1=K_;do{K_=Q1+-72|0;k[z_>>2]=K_;i[c>>0]=i[d>>0]|0;uF(c,t$,K_);Q1=k[z_>>2]|0}while((Q1|0)!=(S0|0));bga=k[Q_>>2]|0}OBa(bga);Tea=Wea;Uea=Xea;Vea=1;ug=6751;break}case 6700:{cga=1;dga=Pca;ega=Oca;ug=6729;break}case 6718:{S0=k[$d+376>>2]|0;do if((S0|0)==($d+360|0))Sf[k[(k[S0>>2]|0)+16>>2]&2047](S0);else{if(!S0)break;Sf[k[(k[S0>>2]|0)+20>>2]&2047](S0)}while(0);S0=$d+336|0;Q1=k[S0>>2]|0;if(Q1){HX=$d+340|0;K_=k[HX>>2]|0;if((K_|0)==(Q1|0))fga=Q1;else{T0=$d+344|0;a1=K_;do{K_=a1+-72|0;k[HX>>2]=K_;i[c>>0]=i[d>>0]|0;uF(c,T0,K_);a1=k[HX>>2]|0}while((a1|0)!=(Q1|0));fga=k[S0>>2]|0}OBa(fga)}Q1=k[$d+280>>2]|0;do if((Q1|0)==($d+264|0))Sf[k[(k[Q1>>2]|0)+16>>2]&2047](Q1);else{if(!Q1)break;Sf[k[(k[Q1>>2]|0)+20>>2]&2047](Q1)}while(0);Q1=$d+240|0;S0=k[Q1>>2]|0;if(S0){a1=$d+244|0;HX=k[a1>>2]|0;if((HX|0)==(S0|0))gga=S0;else{T0=$d+248|0;K_=HX;do{HX=K_+-72|0;k[a1>>2]=HX;i[c>>0]=i[d>>0]|0;uF(c,T0,HX);K_=k[a1>>2]|0}while((K_|0)!=(S0|0));gga=k[Q1>>2]|0}OBa(gga)}S0=k[$d+184>>2]|0;do if((S0|0)==($d+168|0))Sf[k[(k[S0>>2]|0)+16>>2]&2047](S0);else{if(!S0)break;Sf[k[(k[S0>>2]|0)+20>>2]&2047](S0)}while(0);S0=$d+144|0;Q1=k[S0>>2]|0;if(Q1){K_=$d+148|0;a1=k[K_>>2]|0;if((a1|0)==(Q1|0))hga=Q1;else{T0=$d+152|0;HX=a1;do{a1=HX+-72|0;k[K_>>2]=a1;i[c>>0]=i[d>>0]|0;uF(c,T0,a1);HX=k[K_>>2]|0}while((HX|0)!=(Q1|0));hga=k[S0>>2]|0}OBa(hga)}Q1=k[$d+88>>2]|0;do if((Q1|0)==($d+72|0))Sf[k[(k[Q1>>2]|0)+16>>2]&2047](Q1);else{if(!Q1)break;Sf[k[(k[Q1>>2]|0)+20>>2]&2047](Q1)}while(0);Q1=$d+48|0;S0=k[Q1>>2]|0;if(!S0){cga=0;dga=Vca;ega=Wca;ug=6729;break}HX=$d+52|0;K_=k[HX>>2]|0;if((K_|0)==(S0|0))iga=S0;else{T0=$d+56|0;a1=K_;do{K_=a1+-72|0;k[HX>>2]=K_;i[c>>0]=i[d>>0]|0;uF(c,T0,K_);a1=k[HX>>2]|0}while((a1|0)!=(S0|0));iga=k[Q1>>2]|0}OBa(iga);cga=0;dga=Vca;ega=Wca;ug=6729;break}}do if((ug|0)==6597){S0=k[a$>>2]|0;if(!S0){oda=$d;pda=1;qda=sda;rda=tda;ug=6984;break}a1=k[uN>>2]|0;if((a1|0)==(S0|0))jga=S0;else{HX=a1;do{a1=HX+-72|0;k[uN>>2]=a1;i[c>>0]=i[d>>0]|0;uF(c,e$,a1);HX=k[uN>>2]|0}while((HX|0)!=(S0|0));jga=k[a$>>2]|0}OBa(jga);oda=$d;pda=1;qda=sda;rda=tda;ug=6984}else if((ug|0)==6662){S0=k[U_>>2]|0;if(!S0){sea=1;tea=IY;uea=wea;vea=xea;ug=6830;break}HX=k[zZ>>2]|0;if((HX|0)==(S0|0))kga=S0;else{g1=HX;do{HX=g1+-72|0;k[zZ>>2]=HX;i[c>>0]=i[d>>0]|0;uF(c,o$,HX);g1=k[zZ>>2]|0}while((g1|0)!=(S0|0));kga=k[U_>>2]|0}OBa(kga);sea=1;tea=IY;uea=wea;vea=xea;ug=6830}else if((ug|0)==6729){S0=k[y_>>2]|0;if((S0|0)==(Ae|0)){Sf[k[(k[Ae>>2]|0)+16>>2]&2047](Ae);Zea=cga;_ea=dga;$ea=ega;ug=6733;break}if(!S0){Zea=cga;_ea=dga;$ea=ega;ug=6733;break}Sf[k[(k[S0>>2]|0)+20>>2]&2047](S0);Zea=cga;_ea=dga;$ea=ega;ug=6733}while(0);do if((ug|0)==6733){y_=k[O_>>2]|0;if(y_){IY=k[D_>>2]|0;if((IY|0)==(y_|0))lga=y_;else{Q1=IY;do{IY=Q1+-72|0;k[D_>>2]=IY;i[c>>0]=i[d>>0]|0;uF(c,v$,IY);Q1=k[D_>>2]|0}while((Q1|0)!=(y_|0));lga=k[O_>>2]|0}OBa(lga)}y_=k[P_>>2]|0;if(y_){Q1=k[B_>>2]|0;if((Q1|0)==(y_|0))mga=y_;else{IY=Q1;do{Q1=IY+-72|0;k[B_>>2]=Q1;i[c>>0]=i[d>>0]|0;uF(c,u$,Q1);IY=k[B_>>2]|0}while((IY|0)!=(y_|0));mga=k[P_>>2]|0}OBa(mga)}y_=k[Q_>>2]|0;if(!y_){Tea=_ea;Uea=$ea;Vea=Zea;ug=6751;break}IY=k[z_>>2]|0;if((IY|0)==(y_|0))nga=y_;else{Q1=IY;do{IY=Q1+-72|0;k[z_>>2]=IY;i[c>>0]=i[d>>0]|0;uF(c,t$,IY);Q1=k[z_>>2]|0}while((Q1|0)!=(y_|0));nga=k[Q_>>2]|0}OBa(nga);Tea=_ea;Uea=$ea;Vea=Zea;ug=6751}while(0);do if((ug|0)==6751){Q_=k[R_>>2]|0;if(!Q_){Qea=Tea;Rea=Uea;Sea=Vea;ug=6757;break}z_=k[r$>>2]|0;if((z_|0)==(Q_|0))oga=Q_;else{t$=z_;do{z_=t$+-72|0;k[r$>>2]=z_;i[c>>0]=i[d>>0]|0;uF(c,s$,z_);t$=k[r$>>2]|0}while((t$|0)!=(Q_|0));oga=k[R_>>2]|0}OBa(oga);Qea=Tea;Rea=Uea;Sea=Vea;ug=6757}while(0);do if((ug|0)==6757){R_=k[we>>2]|0;if(!R_){_fa=Qea;$fa=Rea;aga=Sea;ug=6769;break}r$=k[d_>>2]|0;if((r$|0)==(R_|0))pga=R_;else{s$=r$;while(1){r$=s$+-72|0;k[d_>>2]=r$;Q_=s$+-24|0;t$=k[Q_>>2]|0;if(!t$)qga=r$;else{z_=s$+-20|0;P_=k[z_>>2]|0;if((P_|0)==(t$|0)){rga=r$;sga=t$}else{r$=s$+-16|0;B_=P_;do{P_=B_+-72|0;k[z_>>2]=P_;i[c>>0]=i[d>>0]|0;uF(c,r$,P_);B_=k[z_>>2]|0}while((B_|0)!=(t$|0));rga=k[d_>>2]|0;sga=k[Q_>>2]|0}OBa(sga);qga=rga}if((qga|0)==(R_|0))break;else s$=qga}pga=k[we>>2]|0}OBa(pga);_fa=Qea;$fa=Rea;aga=Sea;ug=6769}while(0);do if((ug|0)==6769){d_=xe+120|0;s$=k[d_>>2]|0;if(s$){R_=xe+124|0;t$=k[R_>>2]|0;if((t$|0)==(s$|0))tga=s$;else{B_=xe+128|0;z_=t$;do{t$=z_+-72|0;k[R_>>2]=t$;i[c>>0]=i[d>>0]|0;uF(c,B_,t$);z_=k[R_>>2]|0}while((z_|0)!=(s$|0));tga=k[d_>>2]|0}OBa(tga)}s$=xe+48|0;z_=k[s$>>2]|0;if(!z_){Lea=0;Mea=$Z;Nea=_fa;Oea=$fa;Pea=aga;ug=6776;break}R_=xe+52|0;B_=k[R_>>2]|0;if((B_|0)==(z_|0))uga=z_;else{t$=xe+56|0;r$=B_;do{B_=r$+-72|0;k[R_>>2]=B_;i[c>>0]=i[d>>0]|0;uF(c,t$,B_);r$=k[R_>>2]|0}while((r$|0)!=(z_|0));uga=k[s$>>2]|0}OBa(uga);Lea=0;Mea=$Z;Nea=_fa;Oea=$fa;Pea=aga;ug=6776}while(0);do if((ug|0)==6776){$Z=k[ye>>2]|0;if(!$Z){Vfa=Lea;Wfa=Mea;Xfa=Nea;Yfa=Oea;Zfa=Pea;ug=6788;break}z_=k[SZ>>2]|0;if((z_|0)==($Z|0))vga=$Z;else{r$=z_;while(1){z_=r$+-72|0;k[SZ>>2]=z_;R_=r$+-24|0;t$=k[R_>>2]|0;if(!t$)wga=z_;else{d_=r$+-20|0;B_=k[d_>>2]|0;if((B_|0)==(t$|0)){xga=z_;yga=t$}else{z_=r$+-16|0;N1=B_;do{B_=N1+-72|0;k[d_>>2]=B_;i[c>>0]=i[d>>0]|0;uF(c,z_,B_);N1=k[d_>>2]|0}while((N1|0)!=(t$|0));xga=k[SZ>>2]|0;yga=k[R_>>2]|0}OBa(yga);wga=xga}if((wga|0)==($Z|0))break;else r$=wga}vga=k[ye>>2]|0}OBa(vga);Vfa=Lea;Wfa=Mea;Xfa=Nea;Yfa=Oea;Zfa=Pea;ug=6788}while(0);do if((ug|0)==6788){SZ=ze+120|0;r$=k[SZ>>2]|0;if(r$){$Z=ze+124|0;s$=k[$Z>>2]|0;if((s$|0)==(r$|0))zga=r$;else{t$=ze+128|0;N1=s$;do{s$=N1+-72|0;k[$Z>>2]=s$;i[c>>0]=i[d>>0]|0;uF(c,t$,s$);N1=k[$Z>>2]|0}while((N1|0)!=(r$|0));zga=k[SZ>>2]|0}OBa(zga)}r$=ze+48|0;N1=k[r$>>2]|0;if(!N1){Fea=Vfa;Gea=Xfa;Hea=Yfa;Iea=Wfa;Jea=Zfa;ug=6795;break}$Z=ze+52|0;t$=k[$Z>>2]|0;if((t$|0)==(N1|0))Aga=N1;else{s$=ze+56|0;d_=t$;do{t$=d_+-72|0;k[$Z>>2]=t$;i[c>>0]=i[d>>0]|0;uF(c,s$,t$);d_=k[$Z>>2]|0}while((d_|0)!=(N1|0));Aga=k[r$>>2]|0}OBa(Aga);Fea=Vfa;Gea=Xfa;Hea=Yfa;Iea=Wfa;Jea=Zfa;ug=6795}while(0);do if((ug|0)==6795){if((xe|0)==(Iea|0)|Fea^1){Rfa=KZ;Sfa=Gea;Tfa=Hea;Ufa=Jea;ug=6804;break}N1=Iea;do{d_=N1+-24|0;$Z=k[d_>>2]|0;if($Z){s$=N1+-20|0;SZ=k[s$>>2]|0;if((SZ|0)==($Z|0))Bga=$Z;else{t$=N1+-16|0;z_=SZ;do{SZ=z_+-72|0;k[s$>>2]=SZ;i[c>>0]=i[d>>0]|0;uF(c,t$,SZ);z_=k[s$>>2]|0}while((z_|0)!=($Z|0));Bga=k[d_>>2]|0}OBa(Bga)}N1=N1+-72|0}while((N1|0)!=(xe|0));Rfa=KZ;Sfa=Gea;Tfa=Hea;Ufa=Jea;ug=6804}while(0);do if((ug|0)==6804){KZ=k[yZ>>2]|0;if((KZ|0)==(te|0)){Sf[k[(k[te>>2]|0)+16>>2]&2047](te);Bea=Rfa;Cea=Sfa;Dea=Tfa;Eea=Ufa;ug=6808;break}if(!KZ){Bea=Rfa;Cea=Sfa;Dea=Tfa;Eea=Ufa;ug=6808;break}Sf[k[(k[KZ>>2]|0)+20>>2]&2047](KZ);Bea=Rfa;Cea=Sfa;Dea=Tfa;Eea=Ufa;ug=6808}while(0);do if((ug|0)==6808){yZ=k[S_>>2]|0;if(yZ){KZ=k[DZ>>2]|0;if((KZ|0)==(yZ|0))Cga=yZ;else{N1=KZ;do{KZ=N1+-72|0;k[DZ>>2]=KZ;i[c>>0]=i[d>>0]|0;uF(c,q$,KZ);N1=k[DZ>>2]|0}while((N1|0)!=(yZ|0));Cga=k[S_>>2]|0}OBa(Cga)}yZ=k[T_>>2]|0;if(yZ){N1=k[BZ>>2]|0;if((N1|0)==(yZ|0))Dga=yZ;else{KZ=N1;do{N1=KZ+-72|0;k[BZ>>2]=N1;i[c>>0]=i[d>>0]|0;uF(c,p$,N1);KZ=k[BZ>>2]|0}while((KZ|0)!=(yZ|0));Dga=k[T_>>2]|0}OBa(Dga)}yZ=k[pZ>>2]|0;do if((yZ|0)==(oZ|0))Sf[k[(k[oZ>>2]|0)+16>>2]&2047](oZ);else{if(!yZ)break;Sf[k[(k[yZ>>2]|0)+20>>2]&2047](yZ)}while(0);yZ=k[U_>>2]|0;if(!yZ){sea=Eea;tea=Bea;uea=Cea;vea=Dea;ug=6830;break}KZ=k[zZ>>2]|0;if((KZ|0)==(yZ|0))Ega=yZ;else{N1=KZ;do{KZ=N1+-72|0;k[zZ>>2]=KZ;i[c>>0]=i[d>>0]|0;uF(c,o$,KZ);N1=k[zZ>>2]|0}while((N1|0)!=(yZ|0));Ega=k[U_>>2]|0}OBa(Ega);sea=Eea;tea=Bea;uea=Cea;vea=Dea;ug=6830}while(0);do if((ug|0)==6830){U_=k[V_>>2]|0;if(!U_){oea=sea;pea=uea;qea=vea;rea=tea;ug=6836;break}zZ=k[m$>>2]|0;if((zZ|0)==(U_|0))Fga=U_;else{o$=zZ;do{zZ=o$+-72|0;k[m$>>2]=zZ;i[c>>0]=i[d>>0]|0;uF(c,n$,zZ);o$=k[m$>>2]|0}while((o$|0)!=(U_|0));Fga=k[V_>>2]|0}OBa(Fga);oea=sea;pea=uea;qea=vea;rea=tea;ug=6836}while(0);do if((ug|0)==6836){V_=k[pe>>2]|0;if(!V_){Nfa=oea;Ofa=pea;Pfa=qea;Qfa=rea;ug=6848;break}m$=k[bZ>>2]|0;if((m$|0)==(V_|0))Gga=V_;else{n$=m$;while(1){m$=n$+-72|0;k[bZ>>2]=m$;U_=n$+-24|0;o$=k[U_>>2]|0;if(!o$)Hga=m$;else{zZ=n$+-20|0;oZ=k[zZ>>2]|0;if((oZ|0)==(o$|0)){Iga=m$;Jga=o$}else{m$=n$+-16|0;pZ=oZ;do{oZ=pZ+-72|0;k[zZ>>2]=oZ;i[c>>0]=i[d>>0]|0;uF(c,m$,oZ);pZ=k[zZ>>2]|0}while((pZ|0)!=(o$|0));Iga=k[bZ>>2]|0;Jga=k[U_>>2]|0}OBa(Jga);Hga=Iga}if((Hga|0)==(V_|0))break;else n$=Hga}Gga=k[pe>>2]|0}OBa(Gga);Nfa=oea;Ofa=pea;Pfa=qea;Qfa=rea;ug=6848}while(0);do if((ug|0)==6848){bZ=qe+120|0;n$=k[bZ>>2]|0;if(n$){V_=qe+124|0;o$=k[V_>>2]|0;if((o$|0)==(n$|0))Kga=n$;else{pZ=qe+128|0;zZ=o$;do{o$=zZ+-72|0;k[V_>>2]=o$;i[c>>0]=i[d>>0]|0;uF(c,pZ,o$);zZ=k[V_>>2]|0}while((zZ|0)!=(n$|0));Kga=k[bZ>>2]|0}OBa(Kga)}n$=qe+48|0;zZ=k[n$>>2]|0;if(!zZ){iea=0;jea=ZY;kea=Nfa;lea=Ofa;mea=Pfa;nea=Qfa;ug=6855;break}V_=qe+52|0;pZ=k[V_>>2]|0;if((pZ|0)==(zZ|0))Lga=zZ;else{o$=qe+56|0;m$=pZ;do{pZ=m$+-72|0;k[V_>>2]=pZ;i[c>>0]=i[d>>0]|0;uF(c,o$,pZ);m$=k[V_>>2]|0}while((m$|0)!=(zZ|0));Lga=k[n$>>2]|0}OBa(Lga);iea=0;jea=ZY;kea=Nfa;lea=Ofa;mea=Pfa;nea=Qfa;ug=6855}while(0);do if((ug|0)==6855){ZY=k[re>>2]|0;if(!ZY){Hfa=iea;Ifa=kea;Jfa=jea;Kfa=lea;Lfa=mea;Mfa=nea;ug=6867;break}zZ=k[QY>>2]|0;if((zZ|0)==(ZY|0))Mga=ZY;else{m$=zZ;while(1){zZ=m$+-72|0;k[QY>>2]=zZ;V_=m$+-24|0;o$=k[V_>>2]|0;if(!o$)Nga=zZ;else{bZ=m$+-20|0;pZ=k[bZ>>2]|0;if((pZ|0)==(o$|0)){Oga=zZ;Pga=o$}else{zZ=m$+-16|0;d_=pZ;do{pZ=d_+-72|0;k[bZ>>2]=pZ;i[c>>0]=i[d>>0]|0;uF(c,zZ,pZ);d_=k[bZ>>2]|0}while((d_|0)!=(o$|0));Oga=k[QY>>2]|0;Pga=k[V_>>2]|0}OBa(Pga);Nga=Oga}if((Nga|0)==(ZY|0))break;else m$=Nga}Mga=k[re>>2]|0}OBa(Mga);Hfa=iea;Ifa=kea;Jfa=jea;Kfa=lea;Lfa=mea;Mfa=nea;ug=6867}while(0);do if((ug|0)==6867){QY=se+120|0;m$=k[QY>>2]|0;if(m$){ZY=se+124|0;n$=k[ZY>>2]|0;if((n$|0)==(m$|0))Qga=m$;else{o$=se+128|0;d_=n$;do{n$=d_+-72|0;k[ZY>>2]=n$;i[c>>0]=i[d>>0]|0;uF(c,o$,n$);d_=k[ZY>>2]|0}while((d_|0)!=(m$|0));Qga=k[QY>>2]|0}OBa(Qga)}m$=se+48|0;d_=k[m$>>2]|0;if(!d_){bea=Ifa;cea=Hfa;dea=Kfa;eea=Lfa;fea=Jfa;gea=Mfa;ug=6874;break}ZY=se+52|0;o$=k[ZY>>2]|0;if((o$|0)==(d_|0))Rga=d_;else{n$=se+56|0;bZ=o$;do{o$=bZ+-72|0;k[ZY>>2]=o$;i[c>>0]=i[d>>0]|0;uF(c,n$,o$);bZ=k[ZY>>2]|0}while((bZ|0)!=(d_|0));Rga=k[m$>>2]|0}OBa(Rga);bea=Ifa;cea=Hfa;dea=Kfa;eea=Lfa;fea=Jfa;gea=Mfa;ug=6874}while(0);do if((ug|0)==6874){if((qe|0)==(fea|0)|cea^1){Dfa=bea;Efa=dea;Ffa=eea;Gfa=gea;ug=6883;break}d_=fea;do{bZ=d_+-24|0;ZY=k[bZ>>2]|0;if(ZY){n$=d_+-20|0;QY=k[n$>>2]|0;if((QY|0)==(ZY|0))Sga=ZY;else{o$=d_+-16|0;zZ=QY;do{QY=zZ+-72|0;k[n$>>2]=QY;i[c>>0]=i[d>>0]|0;uF(c,o$,QY);zZ=k[n$>>2]|0}while((zZ|0)!=(ZY|0));Sga=k[bZ>>2]|0}OBa(Sga)}d_=d_+-72|0}while((d_|0)!=(qe|0));Dfa=bea;Efa=dea;Ffa=eea;Gfa=gea;ug=6883}while(0);do if((ug|0)==6883){d_=k[wY>>2]|0;if((d_|0)==(me|0)){Sf[k[(k[me>>2]|0)+16>>2]&2047](me);Zda=Dfa;_da=Efa;$da=Ffa;aea=Gfa;ug=6887;break}if(!d_){Zda=Dfa;_da=Efa;$da=Ffa;aea=Gfa;ug=6887;break}Sf[k[(k[d_>>2]|0)+20>>2]&2047](d_);Zda=Dfa;_da=Efa;$da=Ffa;aea=Gfa;ug=6887}while(0);do if((ug|0)==6887){wY=k[W_>>2]|0;if(wY){d_=k[BY>>2]|0;if((d_|0)==(wY|0))Tga=wY;else{m$=d_;do{d_=m$+-72|0;k[BY>>2]=d_;i[c>>0]=i[d>>0]|0;uF(c,l$,d_);m$=k[BY>>2]|0}while((m$|0)!=(wY|0));Tga=k[W_>>2]|0}OBa(Tga)}wY=k[X_>>2]|0;if(wY){m$=k[zY>>2]|0;if((m$|0)==(wY|0))Uga=wY;else{d_=m$;do{m$=d_+-72|0;k[zY>>2]=m$;i[c>>0]=i[d>>0]|0;uF(c,k$,m$);d_=k[zY>>2]|0}while((d_|0)!=(wY|0));Uga=k[X_>>2]|0}OBa(Uga)}wY=k[Y_>>2]|0;if(!wY){Sda=aea;Tda=Zda;Uda=_da;Vda=$da;ug=6905;break}d_=k[xY>>2]|0;if((d_|0)==(wY|0))Vga=wY;else{m$=d_;do{d_=m$+-72|0;k[xY>>2]=d_;i[c>>0]=i[d>>0]|0;uF(c,j$,d_);m$=k[xY>>2]|0}while((m$|0)!=(wY|0));Vga=k[Y_>>2]|0}OBa(Vga);Sda=aea;Tda=Zda;Uda=_da;Vda=$da;ug=6905}while(0);do if((ug|0)==6905){Y_=k[Z_>>2]|0;if(!Y_){Oda=Sda;Pda=Tda;Qda=Uda;Rda=Vda;ug=6911;break}xY=k[h$>>2]|0;if((xY|0)==(Y_|0))Wga=Y_;else{j$=xY;do{xY=j$+-72|0;k[h$>>2]=xY;i[c>>0]=i[d>>0]|0;uF(c,i$,xY);j$=k[h$>>2]|0}while((j$|0)!=(Y_|0));Wga=k[Z_>>2]|0}OBa(Wga);Oda=Sda;Pda=Tda;Qda=Uda;Rda=Vda;ug=6911}while(0);do if((ug|0)==6911){Z_=k[ie>>2]|0;if(!Z_){yfa=Oda;zfa=Pda;Afa=Qda;Bfa=Rda;ug=6923;break}h$=k[bY>>2]|0;if((h$|0)==(Z_|0))Xga=Z_;else{i$=h$;while(1){h$=i$+-72|0;k[bY>>2]=h$;Y_=i$+-24|0;j$=k[Y_>>2]|0;if(!j$)Yga=h$;else{xY=i$+-20|0;X_=k[xY>>2]|0;if((X_|0)==(j$|0)){Zga=h$;_ga=j$}else{h$=i$+-16|0;zY=X_;do{X_=zY+-72|0;k[xY>>2]=X_;i[c>>0]=i[d>>0]|0;uF(c,h$,X_);zY=k[xY>>2]|0}while((zY|0)!=(j$|0));Zga=k[bY>>2]|0;_ga=k[Y_>>2]|0}OBa(_ga);Yga=Zga}if((Yga|0)==(Z_|0))break;else i$=Yga}Xga=k[ie>>2]|0}OBa(Xga);yfa=Oda;zfa=Pda;Afa=Qda;Bfa=Rda;ug=6923}while(0);do if((ug|0)==6923){bY=je+120|0;i$=k[bY>>2]|0;if(i$){Z_=je+124|0;j$=k[Z_>>2]|0;if((j$|0)==(i$|0))$ga=i$;else{zY=je+128|0;xY=j$;do{j$=xY+-72|0;k[Z_>>2]=j$;i[c>>0]=i[d>>0]|0;uF(c,zY,j$);xY=k[Z_>>2]|0}while((xY|0)!=(i$|0));$ga=k[bY>>2]|0}OBa($ga)}i$=je+48|0;xY=k[i$>>2]|0;if(!xY){Ida=0;Jda=YX;Kda=yfa;Lda=zfa;Mda=Afa;Nda=Bfa;ug=6930;break}Z_=je+52|0;zY=k[Z_>>2]|0;if((zY|0)==(xY|0))aha=xY;else{j$=je+56|0;h$=zY;do{zY=h$+-72|0;k[Z_>>2]=zY;i[c>>0]=i[d>>0]|0;uF(c,j$,zY);h$=k[Z_>>2]|0}while((h$|0)!=(xY|0));aha=k[i$>>2]|0}OBa(aha);Ida=0;Jda=YX;Kda=yfa;Lda=zfa;Mda=Afa;Nda=Bfa;ug=6930}while(0);do if((ug|0)==6930){YX=k[ke>>2]|0;if(!YX){sfa=Ida;tfa=Kda;ufa=Jda;vfa=Lda;wfa=Mda;xfa=Nda;ug=6942;break}xY=k[PX>>2]|0;if((xY|0)==(YX|0))bha=YX;else{h$=xY;while(1){xY=h$+-72|0;k[PX>>2]=xY;Z_=h$+-24|0;j$=k[Z_>>2]|0;if(!j$)cha=xY;else{bY=h$+-20|0;zY=k[bY>>2]|0;if((zY|0)==(j$|0)){dha=xY;eha=j$}else{xY=h$+-16|0;bZ=zY;do{zY=bZ+-72|0;k[bY>>2]=zY;i[c>>0]=i[d>>0]|0;uF(c,xY,zY);bZ=k[bY>>2]|0}while((bZ|0)!=(j$|0));dha=k[PX>>2]|0;eha=k[Z_>>2]|0}OBa(eha);cha=dha}if((cha|0)==(YX|0))break;else h$=cha}bha=k[ke>>2]|0}OBa(bha);sfa=Ida;tfa=Kda;ufa=Jda;vfa=Lda;wfa=Mda;xfa=Nda;ug=6942}while(0);do if((ug|0)==6942){PX=le+120|0;h$=k[PX>>2]|0;if(h$){YX=le+124|0;i$=k[YX>>2]|0;if((i$|0)==(h$|0))fha=h$;else{j$=le+128|0;bZ=i$;do{i$=bZ+-72|0;k[YX>>2]=i$;i[c>>0]=i[d>>0]|0;uF(c,j$,i$);bZ=k[YX>>2]|0}while((bZ|0)!=(h$|0));fha=k[PX>>2]|0}OBa(fha)}h$=le+48|0;bZ=k[h$>>2]|0;if(!bZ){Bda=tfa;Cda=sfa;Dda=vfa;Eda=wfa;Fda=xfa;Gda=ufa;ug=6949;break}YX=le+52|0;j$=k[YX>>2]|0;if((j$|0)==(bZ|0))gha=bZ;else{i$=le+56|0;bY=j$;do{j$=bY+-72|0;k[YX>>2]=j$;i[c>>0]=i[d>>0]|0;uF(c,i$,j$);bY=k[YX>>2]|0}while((bY|0)!=(bZ|0));gha=k[h$>>2]|0}OBa(gha);Bda=tfa;Cda=sfa;Dda=vfa;Eda=wfa;Fda=xfa;Gda=ufa;ug=6949}while(0);do if((ug|0)==6949){if((je|0)==(Gda|0)|Cda^1){ofa=Bda;pfa=Dda;qfa=Eda;rfa=Fda;ug=6958;break}bZ=Gda;do{bY=bZ+-24|0;YX=k[bY>>2]|0;if(YX){i$=bZ+-20|0;PX=k[i$>>2]|0;if((PX|0)==(YX|0))hha=YX;else{j$=bZ+-16|0;xY=PX;do{PX=xY+-72|0;k[i$>>2]=PX;i[c>>0]=i[d>>0]|0;uF(c,j$,PX);xY=k[i$>>2]|0}while((xY|0)!=(YX|0));hha=k[bY>>2]|0}OBa(hha)}bZ=bZ+-72|0}while((bZ|0)!=(je|0));ofa=Bda;pfa=Dda;qfa=Eda;rfa=Fda;ug=6958}while(0);do if((ug|0)==6958){bZ=k[yN>>2]|0;if((bZ|0)==(fe|0)){Sf[k[(k[fe>>2]|0)+16>>2]&2047](fe);xda=ofa;yda=pfa;zda=qfa;Ada=rfa;ug=6962;break}if(!bZ){xda=ofa;yda=pfa;zda=qfa;Ada=rfa;ug=6962;break}Sf[k[(k[bZ>>2]|0)+20>>2]&2047](bZ);xda=ofa;yda=pfa;zda=qfa;Ada=rfa;ug=6962}while(0);do if((ug|0)==6962){yN=k[__>>2]|0;if(yN){bZ=k[oW>>2]|0;if((bZ|0)==(yN|0))iha=yN;else{h$=bZ;do{bZ=h$+-72|0;k[oW>>2]=bZ;i[c>>0]=i[d>>0]|0;uF(c,g$,bZ);h$=k[oW>>2]|0}while((h$|0)!=(yN|0));iha=k[__>>2]|0}OBa(iha)}yN=k[$_>>2]|0;if(yN){h$=k[BN>>2]|0;if((h$|0)==(yN|0))jha=yN;else{bZ=h$;do{h$=bZ+-72|0;k[BN>>2]=h$;i[c>>0]=i[d>>0]|0;uF(c,f$,h$);bZ=k[BN>>2]|0}while((bZ|0)!=(yN|0));jha=k[$_>>2]|0}OBa(jha)}yN=k[QV>>2]|0;do if((yN|0)==(RV|0))Sf[k[(k[RV>>2]|0)+16>>2]&2047](RV);else{if(!yN)break;Sf[k[(k[yN>>2]|0)+20>>2]&2047](yN)}while(0);yN=k[a$>>2]|0;if(!yN){oda=xda;pda=yda;qda=zda;rda=Ada;ug=6984;break}bZ=k[uN>>2]|0;if((bZ|0)==(yN|0))kha=yN;else{h$=bZ;do{bZ=h$+-72|0;k[uN>>2]=bZ;i[c>>0]=i[d>>0]|0;uF(c,e$,bZ);h$=k[uN>>2]|0}while((h$|0)!=(yN|0));kha=k[a$>>2]|0}OBa(kha);oda=xda;pda=yda;qda=zda;rda=Ada;ug=6984}while(0);do if((ug|0)==6984){a$=k[b$>>2]|0;if(!a$){kda=oda;lda=qda;mda=rda;nda=pda;ug=6990;break}uN=k[c$>>2]|0;if((uN|0)==(a$|0))lha=a$;else{e$=uN;do{uN=e$+-72|0;k[c$>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,d$,uN);e$=k[c$>>2]|0}while((e$|0)!=(a$|0));lha=k[b$>>2]|0}OBa(lha);kda=oda;lda=qda;mda=rda;nda=pda;ug=6990}while(0);do if((ug|0)==6990){b$=k[be>>2]|0;if(!b$){kfa=kda;lfa=lda;mfa=mda;nfa=nda;ug=7002;break}c$=k[WV>>2]|0;if((c$|0)==(b$|0))mha=b$;else{d$=c$;while(1){c$=d$+-72|0;k[WV>>2]=c$;a$=d$+-24|0;e$=k[a$>>2]|0;if(!e$)nha=c$;else{uN=d$+-20|0;RV=k[uN>>2]|0;if((RV|0)==(e$|0)){oha=c$;pha=e$}else{c$=d$+-16|0;QV=RV;do{RV=QV+-72|0;k[uN>>2]=RV;i[c>>0]=i[d>>0]|0;uF(c,c$,RV);QV=k[uN>>2]|0}while((QV|0)!=(e$|0));oha=k[WV>>2]|0;pha=k[a$>>2]|0}OBa(pha);nha=oha}if((nha|0)==(b$|0))break;else d$=nha}mha=k[be>>2]|0}OBa(mha);kfa=kda;lfa=lda;mfa=mda;nfa=nda;ug=7002}while(0);do if((ug|0)==7002){WV=ce+120|0;d$=k[WV>>2]|0;if(d$){b$=ce+124|0;e$=k[b$>>2]|0;if((e$|0)==(d$|0))qha=d$;else{QV=ce+128|0;uN=e$;do{e$=uN+-72|0;k[b$>>2]=e$;i[c>>0]=i[d>>0]|0;uF(c,QV,e$);uN=k[b$>>2]|0}while((uN|0)!=(d$|0));qha=k[WV>>2]|0}OBa(qha)}d$=ce+48|0;uN=k[d$>>2]|0;if(!uN){eda=0;fda=_U;gda=kfa;hda=lfa;ida=mfa;jda=nfa;ug=7009;break}b$=ce+52|0;QV=k[b$>>2]|0;if((QV|0)==(uN|0))rha=uN;else{e$=ce+56|0;c$=QV;do{QV=c$+-72|0;k[b$>>2]=QV;i[c>>0]=i[d>>0]|0;uF(c,e$,QV);c$=k[b$>>2]|0}while((c$|0)!=(uN|0));rha=k[d$>>2]|0}OBa(rha);eda=0;fda=_U;gda=kfa;hda=lfa;ida=mfa;jda=nfa;ug=7009}while(0);do if((ug|0)==7009){_U=k[de>>2]|0;if(!_U){efa=eda;ffa=fda;gfa=gda;hfa=hda;ifa=ida;jfa=jda;ug=7021;break}uN=k[LU>>2]|0;if((uN|0)==(_U|0))sha=_U;else{c$=uN;while(1){uN=c$+-72|0;k[LU>>2]=uN;b$=c$+-24|0;e$=k[b$>>2]|0;if(!e$)tha=uN;else{WV=c$+-20|0;QV=k[WV>>2]|0;if((QV|0)==(e$|0)){uha=uN;vha=e$}else{uN=c$+-16|0;bY=QV;do{QV=bY+-72|0;k[WV>>2]=QV;i[c>>0]=i[d>>0]|0;uF(c,uN,QV);bY=k[WV>>2]|0}while((bY|0)!=(e$|0));uha=k[LU>>2]|0;vha=k[b$>>2]|0}OBa(vha);tha=uha}if((tha|0)==(_U|0))break;else c$=tha}sha=k[de>>2]|0}OBa(sha);efa=eda;ffa=fda;gfa=gda;hfa=hda;ifa=ida;jfa=jda;ug=7021}while(0);do if((ug|0)==7021){LU=ee+120|0;c$=k[LU>>2]|0;if(c$){_U=ee+124|0;d$=k[_U>>2]|0;if((d$|0)==(c$|0))wha=c$;else{e$=ee+128|0;bY=d$;do{d$=bY+-72|0;k[_U>>2]=d$;i[c>>0]=i[d>>0]|0;uF(c,e$,d$);bY=k[_U>>2]|0}while((bY|0)!=(c$|0));wha=k[LU>>2]|0}OBa(wha)}c$=ee+48|0;bY=k[c$>>2]|0;if(!bY){Zca=efa;_ca=gfa;$ca=hfa;ada=ifa;bda=ffa;cda=jfa;ug=7028;break}_U=ee+52|0;e$=k[_U>>2]|0;if((e$|0)==(bY|0))xha=bY;else{d$=ee+56|0;WV=e$;do{e$=WV+-72|0;k[_U>>2]=e$;i[c>>0]=i[d>>0]|0;uF(c,d$,e$);WV=k[_U>>2]|0}while((WV|0)!=(bY|0));xha=k[c$>>2]|0}OBa(xha);Zca=efa;_ca=gfa;$ca=hfa;ada=ifa;bda=ffa;cda=jfa;ug=7028}while(0);do if((ug|0)==7028){if(!((ce|0)==(bda|0)|Zca^1)){bY=bda;do{WV=bY+-24|0;_U=k[WV>>2]|0;if(_U){d$=bY+-20|0;LU=k[d$>>2]|0;if((LU|0)==(_U|0))yha=_U;else{e$=bY+-16|0;uN=LU;do{LU=uN+-72|0;k[d$>>2]=LU;i[c>>0]=i[d>>0]|0;uF(c,e$,LU);uN=k[d$>>2]|0}while((uN|0)!=(_U|0));yha=k[WV>>2]|0}OBa(yha)}bY=bY+-72|0}while((bY|0)!=(ce|0))}if(!(($d|0)==(_ca|0)|cda^1)){bY=_ca;do{c$=k[bY+-8>>2]|0;do if((c$|0)==(bY+-24|0))Sf[k[(k[c$>>2]|0)+16>>2]&2047](c$);else{if(!c$)break;Sf[k[(k[c$>>2]|0)+20>>2]&2047](c$)}while(0);c$=bY+-48|0;WV=k[c$>>2]|0;if(WV){_U=bY+-44|0;uN=k[_U>>2]|0;if((uN|0)==(WV|0))zha=WV;else{d$=bY+-40|0;e$=uN;do{uN=e$+-72|0;k[_U>>2]=uN;i[c>>0]=i[d>>0]|0;uF(c,d$,uN);e$=k[_U>>2]|0}while((e$|0)!=(WV|0));zha=k[c$>>2]|0}OBa(zha)}bY=bY+-96|0}while((bY|0)!=($d|0))}bY=k[lV>>2]|0;if((bY|0)==(Zd|0)){Sf[k[(k[Zd>>2]|0)+16>>2]&2047](Zd);Xca=$ca;Yca=ada;break}if(!bY){Xca=$ca;Yca=ada;break}Sf[k[(k[bY>>2]|0)+20>>2]&2047](bY);Xca=$ca;Yca=ada}while(0);lV=k[Xd>>2]|0;if(!lV){IU=Xca;JU=Yca;break a}bY=k[gV>>2]|0;if((bY|0)!=(lV|0)){WV=~((bY+-32-lV|0)>>>5);e$=bY;do{_U=k[e$+-8>>2]|0;do if((_U|0)==(e$+-24|0))Sf[k[(k[_U>>2]|0)+16>>2]&2047](_U);else{if(!_U)break;Sf[k[(k[_U>>2]|0)+20>>2]&2047](_U)}while(0);e$=e$+-32|0}while((e$|0)!=(lV|0));k[gV>>2]=bY+(WV<<5)}OBa(lV);IU=Xca;JU=Yca;break a}while(0);e$=Hc()|0;_U=M;d$=~((FX+-32-wV|0)>>>5);uN=FX;do{b$=k[uN+-8>>2]|0;do if((b$|0)==(uN+-24|0))Sf[k[(k[b$>>2]|0)+16>>2]&2047](b$);else{if(!b$)break;Sf[k[(k[b$>>2]|0)+20>>2]&2047](b$)}while(0);uN=uN+-32|0}while((uN|0)!=(wV|0));k[gV>>2]=FX+(d$<<5);DX=e$;EX=_U}OBa(wV);BX=DX;CX=EX}uN=k[Yd+152>>2]|0;do if((uN|0)==(Yd+136|0))Sf[k[(k[uN>>2]|0)+16>>2]&2047](uN);else{if(!uN)break;Sf[k[(k[uN>>2]|0)+20>>2]&2047](uN)}while(0);uN=k[Yd+120>>2]|0;do if((uN|0)==(Yd+104|0))Sf[k[(k[uN>>2]|0)+16>>2]&2047](uN);else{if(!uN)break;Sf[k[(k[uN>>2]|0)+20>>2]&2047](uN)}while(0);uN=k[Yd+88>>2]|0;do if((uN|0)==(Yd+72|0))Sf[k[(k[uN>>2]|0)+16>>2]&2047](uN);else{if(!uN)break;Sf[k[(k[uN>>2]|0)+20>>2]&2047](uN)}while(0);uN=k[Yd+56>>2]|0;do if((uN|0)==(Yd+40|0))Sf[k[(k[uN>>2]|0)+16>>2]&2047](uN);else{if(!uN)break;Sf[k[(k[uN>>2]|0)+20>>2]&2047](uN)}while(0);uN=k[Yd+24>>2]|0;do if((uN|0)==(Yd+8|0))Sf[k[(k[uN>>2]|0)+16>>2]&2047](uN);else{if(!uN)break;Sf[k[(k[uN>>2]|0)+20>>2]&2047](uN)}while(0);IU=BX;JU=CX;break a}while(0);if((ug|0)==5964){gX=dX;hX=cX}hV=k[AV>>2]|0;if((hV|0)==(Vd|0)){Sf[k[(k[Vd>>2]|0)+16>>2]&2047](Vd);aX=gX;bX=hX;break}if(!hV){aX=gX;bX=hX;break}Sf[k[(k[hV>>2]|0)+20>>2]&2047](hV);aX=gX;bX=hX}while(0);AV=Wd+48|0;kV=k[AV>>2]|0;if(!kV){_W=aX;$W=bX;break}zV=Wd+52|0;FV=k[zV>>2]|0;if((FV|0)==(kV|0))Aha=kV;else{jV=Wd+56|0;hV=FV;do{FV=hV+-72|0;k[zV>>2]=FV;i[c>>0]=i[d>>0]|0;uF(c,jV,FV);hV=k[zV>>2]|0}while((hV|0)!=(kV|0));Aha=k[AV>>2]|0}OBa(Aha);_W=aX;$W=bX}while(0);aW=Od+48|0;lW=k[aW>>2]|0;if(!lW){YW=_W;ZW=$W;break}kW=Od+52|0;BV=k[kW>>2]|0;if((BV|0)==(lW|0))Bha=lW;else{kV=Od+56|0;hV=BV;do{BV=hV+-72|0;k[kW>>2]=BV;i[c>>0]=i[d>>0]|0;uF(c,kV,BV);hV=k[kW>>2]|0}while((hV|0)!=(lW|0));Bha=k[aW>>2]|0}OBa(Bha);YW=_W;ZW=$W}while(0);jW=k[Pd>>2]|0;if(!jW){Cha=YW;Dha=ZW;break}bW=k[KW>>2]|0;if((bW|0)==(jW|0))Eha=jW;else{iW=bW;while(1){bW=iW+-72|0;k[KW>>2]=bW;lW=iW+-24|0;hV=k[lW>>2]|0;if(!hV)Fha=bW;else{kW=iW+-20|0;kV=k[kW>>2]|0;if((kV|0)==(hV|0)){Gha=bW;Hha=hV}else{bW=iW+-16|0;BV=kV;do{kV=BV+-72|0;k[kW>>2]=kV;i[c>>0]=i[d>>0]|0;uF(c,bW,kV);BV=k[kW>>2]|0}while((BV|0)!=(hV|0));Gha=k[KW>>2]|0;Hha=k[lW>>2]|0}OBa(Hha);Fha=Gha}if((Fha|0)==(jW|0))break;else iW=Fha}Eha=k[Pd>>2]|0}OBa(Eha);Cha=YW;Dha=ZW}while(0);if((ug|0)==5959){Cha=WW;Dha=XW}KW=Qd+48|0;hW=k[KW>>2]|0;if(hW){gW=Qd+52|0;iW=k[gW>>2]|0;if((iW|0)==(hW|0))Iha=hW;else{jW=Qd+56|0;hV=iW;do{iW=hV+-72|0;k[gW>>2]=iW;i[c>>0]=i[d>>0]|0;uF(c,jW,iW);hV=k[gW>>2]|0}while((hV|0)!=(hW|0));Iha=k[KW>>2]|0}OBa(Iha)}hW=k[Rd>>2]|0;if(!hW){Jha=Cha;Kha=Dha;break}else{Lha=Cha;Mha=Dha;Nha=hW}}else{hW=Hc()|0;Lha=hW;Mha=M;Nha=cW}hW=k[eW>>2]|0;if((hW|0)==(Nha|0))Oha=Nha;else{hV=hW;while(1){hW=hV+-72|0;k[eW>>2]=hW;gW=hV+-24|0;jW=k[gW>>2]|0;if(!jW)Pha=hW;else{iW=hV+-20|0;BV=k[iW>>2]|0;if((BV|0)==(jW|0)){Qha=hW;Rha=jW}else{hW=hV+-16|0;kW=BV;do{BV=kW+-72|0;k[iW>>2]=BV;i[c>>0]=i[d>>0]|0;uF(c,hW,BV);kW=k[iW>>2]|0}while((kW|0)!=(jW|0));Qha=k[eW>>2]|0;Rha=k[gW>>2]|0}OBa(Rha);Pha=Qha}if((Pha|0)==(Nha|0))break;else hV=Pha}Oha=k[Rd>>2]|0}OBa(Oha);Jha=Lha;Kha=Mha}while(0);if((ug|0)==5957){Jha=UW;Kha=VW}eW=Sd+48|0;cW=k[eW>>2]|0;if(cW){fW=Sd+52|0;hV=k[fW>>2]|0;if((hV|0)==(cW|0))Sha=cW;else{KW=Sd+56|0;jW=hV;do{hV=jW+-72|0;k[fW>>2]=hV;i[c>>0]=i[d>>0]|0;uF(c,KW,hV);jW=k[fW>>2]|0}while((jW|0)!=(cW|0));Sha=k[eW>>2]|0}OBa(Sha)}cW=k[Td>>2]|0;if(!cW){Tha=Jha;Uha=Kha;break}else{Vha=Jha;Wha=Kha;Xha=cW}}else{cW=Hc()|0;Vha=cW;Wha=M;Xha=dW}cW=k[mW>>2]|0;if((cW|0)==(Xha|0))Yha=Xha;else{jW=cW;while(1){cW=jW+-72|0;k[mW>>2]=cW;fW=jW+-24|0;KW=k[fW>>2]|0;if(!KW)Zha=cW;else{hV=jW+-20|0;kW=k[hV>>2]|0;if((kW|0)==(KW|0)){_ha=cW;$ha=KW}else{cW=jW+-16|0;iW=kW;do{kW=iW+-72|0;k[hV>>2]=kW;i[c>>0]=i[d>>0]|0;uF(c,cW,kW);iW=k[hV>>2]|0}while((iW|0)!=(KW|0));_ha=k[mW>>2]|0;$ha=k[fW>>2]|0}OBa($ha);Zha=_ha}if((Zha|0)==(Xha|0))break;else jW=Zha}Yha=k[Td>>2]|0}OBa(Yha);Tha=Vha;Uha=Wha}while(0);if((ug|0)==5955){Tha=SW;Uha=TW}mW=Ud+48|0;dW=k[mW>>2]|0;if(!dW){IU=Tha;JU=Uha;break a}wN=Ud+52|0;tN=k[wN>>2]|0;if((tN|0)==(dW|0))aia=dW;else{jW=Ud+56|0;eW=tN;do{tN=eW+-72|0;k[wN>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,jW,tN);eW=k[wN>>2]|0}while((eW|0)!=(dW|0));aia=k[mW>>2]|0}OBa(aia);IU=Tha;JU=Uha;break a;break}case 5564:{dW=Hc()|0;bia=dW;cia=M;ug=5698;break}case 5565:{dW=Hc()|0;eW=M;wN=k[Jd>>2]|0;if(!wN){bia=dW;cia=eW;ug=5698;break}jW=k[NU>>2]|0;if((jW|0)==(wN|0))dia=wN;else{tN=jW;while(1){jW=tN+-72|0;k[NU>>2]=jW;KW=tN+-24|0;iW=k[KW>>2]|0;if(!iW)eia=jW;else{hV=tN+-20|0;cW=k[hV>>2]|0;if((cW|0)==(iW|0)){fia=jW;gia=iW}else{jW=tN+-16|0;kW=cW;do{cW=kW+-72|0;k[hV>>2]=cW;i[c>>0]=i[d>>0]|0;uF(c,jW,cW);kW=k[hV>>2]|0}while((kW|0)!=(iW|0));fia=k[NU>>2]|0;gia=k[KW>>2]|0}OBa(gia);eia=fia}if((eia|0)==(wN|0))break;else tN=eia}dia=k[Jd>>2]|0}OBa(dia);bia=dW;cia=eW;ug=5698;break}case 5580:{tN=Hc()|0;hia=tN;iia=M;ug=5700;break}case 5581:{tN=Hc()|0;wN=M;OBa(rW);hia=tN;iia=wN;ug=5700;break}case 5585:{wN=Hc()|0;jia=wN;kia=M;ug=5702;break}case 5586:{wN=Hc()|0;tN=M;OBa(tW);jia=wN;kia=tN;ug=5702;break}case 5597:{tN=Hc()|0;wN=M;mW=k[GV>>2]|0;if(!mW){lia=wN;mia=tN;ug=5713;break}iW=k[EV>>2]|0;if((iW|0)==(mW|0))nia=mW;else{kW=iW;do{iW=kW+-72|0;k[EV>>2]=iW;i[c>>0]=i[d>>0]|0;uF(c,OV,iW);kW=k[EV>>2]|0}while((kW|0)!=(mW|0));nia=k[GV>>2]|0}OBa(nia);lia=wN;mia=tN;ug=5713;break}case 5609:{mW=Hc(0)|0;Fg(mW);break}case 5689:{mW=Hc()|0;kW=M;if((Kd|0)==(nW|0)){oia=mW;pia=kW;break}eW=nW;do{dW=eW+-24|0;iW=k[dW>>2]|0;if(iW){hV=eW+-20|0;jW=k[hV>>2]|0;if((jW|0)==(iW|0))qia=iW;else{cW=eW+-16|0;hW=jW;do{jW=hW+-72|0;k[hV>>2]=jW;i[c>>0]=i[d>>0]|0;uF(c,cW,jW);hW=k[hV>>2]|0}while((hW|0)!=(iW|0));qia=k[dW>>2]|0}OBa(qia)}eW=eW+-72|0}while((eW|0)!=(Kd|0));oia=mW;pia=kW;break}case 5699:{kW=Hc()|0;ria=kW;sia=M;ug=5782;break}case 5701:{kW=Hc()|0;tia=kW;uia=M;via=sW;ug=5765;break}case 5703:{kW=Hc()|0;wia=kW;xia=M;ug=5746;break}case 5704:{kW=Hc()|0;yia=kW;zia=M;ug=5740;break}case 5705:{kW=Hc()|0;mW=M;eW=k[IV>>2]|0;if(!eW){yia=kW;zia=mW;ug=5740;break}tN=k[vV>>2]|0;if((tN|0)==(eW|0))Aia=eW;else{wN=tN;do{tN=wN+-72|0;k[vV>>2]=tN;i[c>>0]=i[d>>0]|0;uF(c,MV,tN);wN=k[vV>>2]|0}while((wN|0)!=(eW|0));Aia=k[IV>>2]|0}OBa(Aia);yia=kW;zia=mW;ug=5740;break}case 5711:{eW=Hc()|0;Bia=eW;Cia=M;ug=5728;break}case 5712:{eW=Hc()|0;lia=M;mia=eW;ug=5713;break}case 5714:{eW=Hc()|0;wN=M;tN=k[DV>>2]|0;do if((tN|0)==(CV|0))Sf[k[(k[CV>>2]|0)+16>>2]&2047](CV);else{if(!tN)break;Sf[k[(k[tN>>2]|0)+20>>2]&2047](tN)}while(0);tN=k[GV>>2]|0;if(!tN){Dia=eW;Eia=wN;ug=5724;break}CV=k[EV>>2]|0;if((CV|0)==(tN|0))Fia=tN;else{DV=CV;do{CV=DV+-72|0;k[EV>>2]=CV;i[c>>0]=i[d>>0]|0;uF(c,OV,CV);DV=k[EV>>2]|0}while((DV|0)!=(tN|0));Fia=k[GV>>2]|0}OBa(Fia);Dia=eW;Eia=wN;ug=5724;break}}if((ug|0)==5698){Gia=bia;Hia=cia;ug=5794}else if((ug|0)==5700){Iia=hia;Jia=iia;ug=5776}else if((ug|0)==5702){Kia=jia;Lia=kia;ug=5758}else if((ug|0)==5713){Dia=mia;Eia=lia;ug=5724}do if((ug|0)==5724){tN=k[uV>>2]|0;if((tN|0)==(Ld|0)){Sf[k[(k[Ld>>2]|0)+16>>2]&2047](Ld);Bia=Dia;Cia=Eia;ug=5728;break}if(!tN){Bia=Dia;Cia=Eia;ug=5728;break}Sf[k[(k[tN>>2]|0)+20>>2]&2047](tN);Bia=Dia;Cia=Eia;ug=5728}while(0);do if((ug|0)==5728){uV=k[HV>>2]|0;if(uV){wN=k[xV>>2]|0;if((wN|0)==(uV|0))Mia=uV;else{eW=wN;do{wN=eW+-72|0;k[xV>>2]=wN;i[c>>0]=i[d>>0]|0;uF(c,NV,wN);eW=k[xV>>2]|0}while((eW|0)!=(uV|0));Mia=k[HV>>2]|0}OBa(Mia)}uV=k[IV>>2]|0;if(!uV){yia=Bia;zia=Cia;ug=5740;break}eW=k[vV>>2]|0;if((eW|0)==(uV|0))Nia=uV;else{dW=eW;do{eW=dW+-72|0;k[vV>>2]=eW;i[c>>0]=i[d>>0]|0;uF(c,MV,eW);dW=k[vV>>2]|0}while((dW|0)!=(uV|0));Nia=k[IV>>2]|0}OBa(Nia);yia=Bia;zia=Cia;ug=5740}while(0);do if((ug|0)==5740){IV=k[JV>>2]|0;if(!IV){wia=yia;xia=zia;ug=5746;break}vV=k[KV>>2]|0;if((vV|0)==(IV|0))Oia=IV;else{MV=vV;do{vV=MV+-72|0;k[KV>>2]=vV;i[c>>0]=i[d>>0]|0;uF(c,LV,vV);MV=k[KV>>2]|0}while((MV|0)!=(IV|0));Oia=k[JV>>2]|0}OBa(Oia);wia=yia;xia=zia;ug=5746}while(0);do if((ug|0)==5746){JV=k[Fd>>2]|0;if(!JV){Kia=wia;Lia=xia;ug=5758;break}KV=k[dV>>2]|0;if((KV|0)==(JV|0))Pia=JV;else{LV=KV;while(1){KV=LV+-72|0;k[dV>>2]=KV;IV=LV+-24|0;MV=k[IV>>2]|0;if(!MV)Qia=KV;else{vV=LV+-20|0;HV=k[vV>>2]|0;if((HV|0)==(MV|0)){Ria=KV;Sia=MV}else{KV=LV+-16|0;xV=HV;do{HV=xV+-72|0;k[vV>>2]=HV;i[c>>0]=i[d>>0]|0;uF(c,KV,HV);xV=k[vV>>2]|0}while((xV|0)!=(MV|0));Ria=k[dV>>2]|0;Sia=k[IV>>2]|0}OBa(Sia);Qia=Ria}if((Qia|0)==(JV|0))break;else LV=Qia}Pia=k[Fd>>2]|0}OBa(Pia);Kia=wia;Lia=xia;ug=5758}while(0);if((ug|0)==5758){dV=Gd+48|0;LV=k[dV>>2]|0;if(LV){JV=Gd+52|0;MV=k[JV>>2]|0;if((MV|0)==(LV|0))Tia=LV;else{xV=Gd+56|0;vV=MV;do{MV=vV+-72|0;k[JV>>2]=MV;i[c>>0]=i[d>>0]|0;uF(c,xV,MV);vV=k[JV>>2]|0}while((vV|0)!=(LV|0));Tia=k[dV>>2]|0}OBa(Tia)}LV=k[Hd>>2]|0;if(!LV){Iia=Kia;Jia=Lia;ug=5776}else{tia=Kia;uia=Lia;via=LV;ug=5765}}if((ug|0)==5765){LV=k[WU>>2]|0;if((LV|0)==(via|0))Uia=via;else{vV=LV;while(1){LV=vV+-72|0;k[WU>>2]=LV;JV=vV+-24|0;xV=k[JV>>2]|0;if(!xV)Via=LV;else{MV=vV+-20|0;KV=k[MV>>2]|0;if((KV|0)==(xV|0)){Wia=LV;Xia=xV}else{LV=vV+-16|0;fW=KV;do{KV=fW+-72|0;k[MV>>2]=KV;i[c>>0]=i[d>>0]|0;uF(c,LV,KV);fW=k[MV>>2]|0}while((fW|0)!=(xV|0));Wia=k[WU>>2]|0;Xia=k[JV>>2]|0}OBa(Xia);Via=Wia}if((Via|0)==(via|0))break;else vV=Via}Uia=k[Hd>>2]|0}OBa(Uia);Iia=tia;Jia=uia;ug=5776}do if((ug|0)==5776){vV=Id+48|0;WU=k[vV>>2]|0;if(!WU){ria=Iia;sia=Jia;ug=5782;break}dV=Id+52|0;xV=k[dV>>2]|0;if((xV|0)==(WU|0))Yia=WU;else{fW=Id+56|0;MV=xV;do{xV=MV+-72|0;k[dV>>2]=xV;i[c>>0]=i[d>>0]|0;uF(c,fW,xV);MV=k[dV>>2]|0}while((MV|0)!=(WU|0));Yia=k[vV>>2]|0}OBa(Yia);ria=Iia;sia=Jia;ug=5782}while(0);do if((ug|0)==5782){WU=k[Jd>>2]|0;if(!WU){Gia=ria;Hia=sia;ug=5794;break}MV=k[NU>>2]|0;if((MV|0)==(WU|0))Zia=WU;else{dV=MV;while(1){MV=dV+-72|0;k[NU>>2]=MV;fW=dV+-24|0;JV=k[fW>>2]|0;if(!JV)_ia=MV;else{xV=dV+-20|0;LV=k[xV>>2]|0;if((LV|0)==(JV|0)){$ia=MV;aja=JV}else{MV=dV+-16|0;KV=LV;do{LV=KV+-72|0;k[xV>>2]=LV;i[c>>0]=i[d>>0]|0;uF(c,MV,LV);KV=k[xV>>2]|0}while((KV|0)!=(JV|0));$ia=k[NU>>2]|0;aja=k[fW>>2]|0}OBa(aja);_ia=$ia}if((_ia|0)==(WU|0))break;else dV=_ia}Zia=k[Jd>>2]|0}OBa(Zia);Gia=ria;Hia=sia;ug=5794}while(0);do if((ug|0)==5794){NU=Kd+120|0;dV=k[NU>>2]|0;if(dV){WU=Kd+124|0;vV=k[WU>>2]|0;if((vV|0)==(dV|0))bja=dV;else{JV=Kd+128|0;KV=vV;do{vV=KV+-72|0;k[WU>>2]=vV;i[c>>0]=i[d>>0]|0;uF(c,JV,vV);KV=k[WU>>2]|0}while((KV|0)!=(dV|0));bja=k[NU>>2]|0}OBa(bja)}dV=Kd+48|0;KV=k[dV>>2]|0;if(!KV){oia=Gia;pia=Hia;break}WU=Kd+52|0;JV=k[WU>>2]|0;if((JV|0)==(KV|0))cja=KV;else{vV=Kd+56|0;xV=JV;do{JV=xV+-72|0;k[WU>>2]=JV;i[c>>0]=i[d>>0]|0;uF(c,vV,JV);xV=k[WU>>2]|0}while((xV|0)!=(KV|0));cja=k[dV>>2]|0}OBa(cja);oia=Gia;pia=Hia}while(0);KV=k[Cd>>2]|0;if(!KV){IU=oia;JU=pia;break a}if((k[xN>>2]|0)!=(KV|0))k[xN>>2]=KV;OBa(KV);IU=oia;JU=pia;break a}while(0);oN=Hc()|0;sN=M;KV=k[m>>2]|0;if(KV){xV=k[pN>>2]|0;if((xV|0)==(KV|0))dja=KV;else{WU=xV;while(1){xV=WU+-96|0;k[pN>>2]=xV;vV=k[WU+-8>>2]|0;do if((vV|0)==(WU+-24|0))Sf[k[(k[vV>>2]|0)+16>>2]&2047](vV);else{if(!vV)break;Sf[k[(k[vV>>2]|0)+20>>2]&2047](vV)}while(0);vV=WU+-48|0;xN=k[vV>>2]|0;if(!xN)eja=xV;else{NU=WU+-44|0;JV=k[NU>>2]|0;if((JV|0)==(xN|0)){fja=xV;gja=xN}else{MV=WU+-40|0;IV=JV;do{JV=IV+-72|0;k[NU>>2]=JV;i[c>>0]=i[d>>0]|0;uF(c,MV,JV);IV=k[NU>>2]|0}while((IV|0)!=(xN|0));fja=k[pN>>2]|0;gja=k[vV>>2]|0}OBa(gja);eja=fja}if((eja|0)==(KV|0))break;else WU=eja}dja=k[m>>2]|0}OBa(dja)}WU=n+4416|0;do{KV=k[WU+-8>>2]|0;do if((KV|0)==(WU+-24|0))Sf[k[(k[KV>>2]|0)+16>>2]&2047](KV);else{if(!KV)break;Sf[k[(k[KV>>2]|0)+20>>2]&2047](KV)}while(0);KV=WU+-48|0;vV=k[KV>>2]|0;if(vV){pN=WU+-44|0;xN=k[pN>>2]|0;if((xN|0)==(vV|0))hja=vV;else{IV=WU+-40|0;NU=xN;do{xN=NU+-72|0;k[pN>>2]=xN;i[c>>0]=i[d>>0]|0;uF(c,IV,xN);NU=k[pN>>2]|0}while((NU|0)!=(vV|0));hja=k[KV>>2]|0}OBa(hja)}WU=WU+-96|0}while((WU|0)!=(n|0));ija=0;jja=oN;kja=sN}while(0);if((ug|0)==3848){ija=1;jja=nN;kja=mN}gN=k[_M>>2]|0;if((gN|0)==(Ad|0)){Sf[k[(k[Ad>>2]|0)+16>>2]&2047](Ad);hN=ija;iN=jja;jN=kja;break}if(!gN){hN=ija;iN=jja;jN=kja;break}Sf[k[(k[gN>>2]|0)+20>>2]&2047](gN);hN=ija;iN=jja;jN=kja}while(0);_M=Bd+48|0;eN=k[_M>>2]|0;if(!eN){$M=hN;aN=iN;bN=jN;break}dN=Bd+52|0;cN=k[dN>>2]|0;if((cN|0)==(eN|0))lja=eN;else{fN=Bd+56|0;gN=cN;do{cN=gN+-72|0;k[dN>>2]=cN;i[c>>0]=i[d>>0]|0;uF(c,fN,cN);gN=k[dN>>2]|0}while((gN|0)!=(eN|0));lja=k[_M>>2]|0}OBa(lja);$M=hN;aN=iN;bN=jN}while(0);TM=vd+48|0;YM=k[TM>>2]|0;if(!YM){UM=$M;VM=aN;WM=bN;break}XM=vd+52|0;ZM=k[XM>>2]|0;if((ZM|0)==(YM|0))mja=YM;else{eN=vd+56|0;gN=ZM;do{ZM=gN+-72|0;k[XM>>2]=ZM;i[c>>0]=i[d>>0]|0;uF(c,eN,ZM);gN=k[XM>>2]|0}while((gN|0)!=(YM|0));mja=k[TM>>2]|0}OBa(mja);UM=$M;VM=aN;WM=bN}while(0);HM=k[wd>>2]|0;if(!HM){nja=UM;oja=VM;pja=WM;break}GM=k[yM>>2]|0;if((GM|0)==(HM|0))qja=HM;else{JM=GM;while(1){GM=JM+-72|0;k[yM>>2]=GM;YM=JM+-24|0;gN=k[YM>>2]|0;if(!gN)rja=GM;else{XM=JM+-20|0;eN=k[XM>>2]|0;if((eN|0)==(gN|0)){sja=GM;tja=gN}else{GM=JM+-16|0;ZM=eN;do{eN=ZM+-72|0;k[XM>>2]=eN;i[c>>0]=i[d>>0]|0;uF(c,GM,eN);ZM=k[XM>>2]|0}while((ZM|0)!=(gN|0));sja=k[yM>>2]|0;tja=k[YM>>2]|0}OBa(tja);rja=sja}if((rja|0)==(HM|0))break;else JM=rja}qja=k[wd>>2]|0}OBa(qja);nja=UM;oja=VM;pja=WM}while(0);if((ug|0)==3843){nja=1;oja=RM;pja=SM}yM=xd+48|0;EM=k[yM>>2]|0;if(EM){DM=xd+52|0;JM=k[DM>>2]|0;if((JM|0)==(EM|0))uja=EM;else{HM=xd+56|0;gN=JM;do{JM=gN+-72|0;k[DM>>2]=JM;i[c>>0]=i[d>>0]|0;uF(c,HM,JM);gN=k[DM>>2]|0}while((gN|0)!=(EM|0));uja=k[yM>>2]|0}OBa(uja)}EM=k[yd>>2]|0;if(!EM){vja=nja;wja=oja;xja=pja;break}else{yja=nja;zja=oja;Aja=pja;Bja=EM}}else{EM=Hc()|0;yja=1;zja=EM;Aja=M;Bja=KM}EM=k[FM>>2]|0;if((EM|0)==(Bja|0))Cja=Bja;else{gN=EM;while(1){EM=gN+-72|0;k[FM>>2]=EM;DM=gN+-24|0;HM=k[DM>>2]|0;if(!HM)Dja=EM;else{JM=gN+-20|0;ZM=k[JM>>2]|0;if((ZM|0)==(HM|0)){Eja=EM;Fja=HM}else{EM=gN+-16|0;XM=ZM;do{ZM=XM+-72|0;k[JM>>2]=ZM;i[c>>0]=i[d>>0]|0;uF(c,EM,ZM);XM=k[JM>>2]|0}while((XM|0)!=(HM|0));Eja=k[FM>>2]|0;Fja=k[DM>>2]|0}OBa(Fja);Dja=Eja}if((Dja|0)==(Bja|0))break;else gN=Dja}Cja=k[yd>>2]|0}OBa(Cja);vja=yja;wja=zja;xja=Aja}while(0);if((ug|0)==3841){vja=1;wja=PM;xja=QM}FM=zd+48|0;KM=k[FM>>2]|0;if(!KM){LM=CM;MM=wja;NM=xja;OM=vja;break}BM=zd+52|0;gN=k[BM>>2]|0;if((gN|0)==(KM|0))Gja=KM;else{yM=zd+56|0;HM=gN;do{gN=HM+-72|0;k[BM>>2]=gN;i[c>>0]=i[d>>0]|0;uF(c,yM,gN);HM=k[BM>>2]|0}while((HM|0)!=(KM|0));Gja=k[FM>>2]|0}OBa(Gja);LM=CM;MM=wja;NM=xja;OM=vja}while(0);if((ug|0)==3839){LM=fM;MM=AM;NM=zM;OM=1}rM=k[wM>>2]|0;do if((rM|0)==(ud|0))Sf[k[(k[ud>>2]|0)+16>>2]&2047](ud);else{if(!rM)break;Sf[k[(k[rM>>2]|0)+20>>2]&2047](rM)}while(0);rM=rd+48|0;wM=k[rM>>2]|0;if(!wM){sM=OM;tM=MM;uM=NM;vM=LM;break}xM=rd+52|0;KM=k[xM>>2]|0;if((KM|0)==(wM|0))Hja=wM;else{HM=rd+56|0;BM=KM;do{KM=BM+-72|0;k[xM>>2]=KM;i[c>>0]=i[d>>0]|0;uF(c,HM,KM);BM=k[xM>>2]|0}while((BM|0)!=(wM|0));Hja=k[rM>>2]|0}OBa(Hja);sM=OM;tM=MM;uM=NM;vM=LM}while(0);iM=k[sd>>2]|0;if(!iM){Ija=sM;Jja=tM;Kja=uM;Lja=vM;break Ab}mM=k[gM>>2]|0;if((mM|0)==(iM|0))Mja=iM;else{kM=mM;while(1){mM=kM+-72|0;k[gM>>2]=mM;wM=kM+-24|0;BM=k[wM>>2]|0;if(!BM)Nja=mM;else{xM=kM+-20|0;HM=k[xM>>2]|0;if((HM|0)==(BM|0)){Oja=mM;Pja=BM}else{mM=kM+-16|0;KM=HM;do{HM=KM+-72|0;k[xM>>2]=HM;i[c>>0]=i[d>>0]|0;uF(c,mM,HM);KM=k[xM>>2]|0}while((KM|0)!=(BM|0));Oja=k[gM>>2]|0;Pja=k[wM>>2]|0}OBa(Pja);Nja=Oja}if((Nja|0)==(iM|0))break;else kM=Nja}Mja=k[sd>>2]|0}OBa(Mja);Ija=sM;Jja=tM;Kja=uM;Lja=vM;break Ab}while(0);jM=Hc()|0;kM=M;iM=k[sd>>2]|0;if(!iM){pM=jM;qM=kM;ug=3836;break}BM=k[gM>>2]|0;if((BM|0)==(iM|0))Qja=iM;else{KM=BM;while(1){BM=KM+-72|0;k[gM>>2]=BM;xM=KM+-24|0;mM=k[xM>>2]|0;if(!mM)Rja=BM;else{rM=KM+-20|0;HM=k[rM>>2]|0;if((HM|0)==(mM|0)){Sja=BM;Tja=mM}else{BM=KM+-16|0;yM=HM;do{HM=yM+-72|0;k[rM>>2]=HM;i[c>>0]=i[d>>0]|0;uF(c,BM,HM);yM=k[rM>>2]|0}while((yM|0)!=(mM|0));Sja=k[gM>>2]|0;Tja=k[xM>>2]|0}OBa(Tja);Rja=Sja}if((Rja|0)==(iM|0))break;else KM=Rja}Qja=k[sd>>2]|0}OBa(Qja);pM=jM;qM=kM;ug=3836}while(0);if((ug|0)==3836){Ija=1;Jja=pM;Kja=qM;Lja=fM}gM=td+120|0;hM=k[gM>>2]|0;if(hM){bM=td+124|0;nM=k[bM>>2]|0;if((nM|0)==(hM|0))Uja=hM;else{KM=td+128|0;iM=nM;do{nM=iM+-72|0;k[bM>>2]=nM;i[c>>0]=i[d>>0]|0;uF(c,KM,nM);iM=k[bM>>2]|0}while((iM|0)!=(hM|0));Uja=k[gM>>2]|0}OBa(Uja)}hM=td+48|0;iM=k[hM>>2]|0;if(!iM){Vja=Ija;Wja=Jja;Xja=Kja;Yja=Lja;break yb}bM=td+52|0;KM=k[bM>>2]|0;if((KM|0)==(iM|0))Zja=iM;else{nM=td+56|0;mM=KM;do{KM=mM+-72|0;k[bM>>2]=KM;i[c>>0]=i[d>>0]|0;uF(c,nM,KM);mM=k[bM>>2]|0}while((mM|0)!=(iM|0));Zja=k[hM>>2]|0}OBa(Zja);Vja=Ija;Wja=Jja;Xja=Kja;Yja=Lja;break yb}while(0);eM=Hc()|0;iM=M;if((td|0)==(oM|0)){Vja=1;Wja=eM;Xja=iM;Yja=fM;break}mM=oM;do{bM=mM+-24|0;nM=k[bM>>2]|0;if(nM){gM=mM+-20|0;KM=k[gM>>2]|0;if((KM|0)==(nM|0))_ja=nM;else{yM=mM+-16|0;rM=KM;do{KM=rM+-72|0;k[gM>>2]=KM;i[c>>0]=i[d>>0]|0;uF(c,yM,KM);rM=k[gM>>2]|0}while((rM|0)!=(nM|0));_ja=k[bM>>2]|0}OBa(_ja)}mM=mM+-72|0}while((mM|0)!=(td|0));Vja=1;Wja=eM;Xja=iM;Yja=fM}while(0);if((ug|0)==3826){Vja=1;Wja=dM;Xja=cM;Yja=KL}WL=k[$L>>2]|0;do if((WL|0)==(qd|0))Sf[k[(k[qd>>2]|0)+16>>2]&2047](qd);else{if(!WL)break;Sf[k[(k[WL>>2]|0)+20>>2]&2047](WL)}while(0);WL=nd+48|0;$L=k[WL>>2]|0;if(!$L){XL=Vja;YL=Wja;ZL=Xja;_L=Yja;break}aM=nd+52|0;fM=k[aM>>2]|0;if((fM|0)==($L|0))$ja=$L;else{iM=nd+56|0;eM=fM;do{fM=eM+-72|0;k[aM>>2]=fM;i[c>>0]=i[d>>0]|0;uF(c,iM,fM);eM=k[aM>>2]|0}while((eM|0)!=($L|0));$ja=k[WL>>2]|0}OBa($ja);XL=Vja;YL=Wja;ZL=Xja;_L=Yja}while(0);NL=k[od>>2]|0;if(!NL){aka=XL;bka=YL;cka=ZL;dka=_L;break xb}RL=k[LL>>2]|0;if((RL|0)==(NL|0))eka=NL;else{PL=RL;while(1){RL=PL+-72|0;k[LL>>2]=RL;$L=PL+-24|0;eM=k[$L>>2]|0;if(!eM)fka=RL;else{aM=PL+-20|0;iM=k[aM>>2]|0;if((iM|0)==(eM|0)){gka=RL;hka=eM}else{RL=PL+-16|0;fM=iM;do{iM=fM+-72|0;k[aM>>2]=iM;i[c>>0]=i[d>>0]|0;uF(c,RL,iM);fM=k[aM>>2]|0}while((fM|0)!=(eM|0));gka=k[LL>>2]|0;hka=k[$L>>2]|0}OBa(hka);fka=gka}if((fka|0)==(NL|0))break;else PL=fka}eka=k[od>>2]|0}OBa(eka);aka=XL;bka=YL;cka=ZL;dka=_L;break xb}while(0);OL=Hc()|0;PL=M;NL=k[od>>2]|0;if(!NL){UL=OL;VL=PL;ug=3823;break}eM=k[LL>>2]|0;if((eM|0)==(NL|0))ika=NL;else{fM=eM;while(1){eM=fM+-72|0;k[LL>>2]=eM;aM=fM+-24|0;RL=k[aM>>2]|0;if(!RL)jka=eM;else{WL=fM+-20|0;iM=k[WL>>2]|0;if((iM|0)==(RL|0)){kka=eM;lka=RL}else{eM=fM+-16|0;mM=iM;do{iM=mM+-72|0;k[WL>>2]=iM;i[c>>0]=i[d>>0]|0;uF(c,eM,iM);mM=k[WL>>2]|0}while((mM|0)!=(RL|0));kka=k[LL>>2]|0;lka=k[aM>>2]|0}OBa(lka);jka=kka}if((jka|0)==(NL|0))break;else fM=jka}ika=k[od>>2]|0}OBa(ika);UL=OL;VL=PL;ug=3823}while(0);if((ug|0)==3823){aka=1;bka=UL;cka=VL;dka=KL}LL=pd+120|0;ML=k[LL>>2]|0;if(ML){GL=pd+124|0;SL=k[GL>>2]|0;if((SL|0)==(ML|0))mka=ML;else{fM=pd+128|0;NL=SL;do{SL=NL+-72|0;k[GL>>2]=SL;i[c>>0]=i[d>>0]|0;uF(c,fM,SL);NL=k[GL>>2]|0}while((NL|0)!=(ML|0));mka=k[LL>>2]|0}OBa(mka)}ML=pd+48|0;NL=k[ML>>2]|0;if(!NL){nka=aka;oka=bka;pka=cka;qka=dka;break vb}GL=pd+52|0;fM=k[GL>>2]|0;if((fM|0)==(NL|0))rka=NL;else{SL=pd+56|0;RL=fM;do{fM=RL+-72|0;k[GL>>2]=fM;i[c>>0]=i[d>>0]|0;uF(c,SL,fM);RL=k[GL>>2]|0}while((RL|0)!=(NL|0));rka=k[ML>>2]|0}OBa(rka);nka=aka;oka=bka;pka=cka;qka=dka;break vb}while(0);JL=Hc()|0;NL=M;if((pd|0)==(TL|0)){nka=1;oka=JL;pka=NL;qka=KL;break}RL=TL;do{GL=RL+-24|0;SL=k[GL>>2]|0;if(SL){LL=RL+-20|0;fM=k[LL>>2]|0;if((fM|0)==(SL|0))ska=SL;else{mM=RL+-16|0;WL=fM;do{fM=WL+-72|0;k[LL>>2]=fM;i[c>>0]=i[d>>0]|0;uF(c,mM,fM);WL=k[LL>>2]|0}while((WL|0)!=(SL|0));ska=k[GL>>2]|0}OBa(ska)}RL=RL+-72|0}while((RL|0)!=(pd|0));nka=1;oka=JL;pka=NL;qka=KL}while(0);if((ug|0)==3813){nka=1;oka=IL;pka=HL;qka=nL}zL=k[EL>>2]|0;do if((zL|0)==(md|0))Sf[k[(k[md>>2]|0)+16>>2]&2047](md);else{if(!zL)break;Sf[k[(k[zL>>2]|0)+20>>2]&2047](zL)}while(0);zL=jd+48|0;EL=k[zL>>2]|0;if(!EL){AL=qka;BL=nka;CL=oka;DL=pka;break}FL=jd+52|0;KL=k[FL>>2]|0;if((KL|0)==(EL|0))tka=EL;else{NL=jd+56|0;JL=KL;do{KL=JL+-72|0;k[FL>>2]=KL;i[c>>0]=i[d>>0]|0;uF(c,NL,KL);JL=k[FL>>2]|0}while((JL|0)!=(EL|0));tka=k[zL>>2]|0}OBa(tka);AL=qka;BL=nka;CL=oka;DL=pka}while(0);qL=k[kd>>2]|0;if(!qL){uka=AL;vka=BL;wka=CL;xka=DL;break ub}uL=k[oL>>2]|0;if((uL|0)==(qL|0))yka=qL;else{sL=uL;while(1){uL=sL+-72|0;k[oL>>2]=uL;EL=sL+-24|0;JL=k[EL>>2]|0;if(!JL)zka=uL;else{FL=sL+-20|0;NL=k[FL>>2]|0;if((NL|0)==(JL|0)){Aka=uL;Bka=JL}else{uL=sL+-16|0;KL=NL;do{NL=KL+-72|0;k[FL>>2]=NL;i[c>>0]=i[d>>0]|0;uF(c,uL,NL);KL=k[FL>>2]|0}while((KL|0)!=(JL|0));Aka=k[oL>>2]|0;Bka=k[EL>>2]|0}OBa(Bka);zka=Aka}if((zka|0)==(qL|0))break;else sL=zka}yka=k[kd>>2]|0}OBa(yka);uka=AL;vka=BL;wka=CL;xka=DL;break ub}while(0);rL=Hc()|0;sL=M;qL=k[kd>>2]|0;if(!qL){xL=rL;yL=sL;ug=3810;break}JL=k[oL>>2]|0;if((JL|0)==(qL|0))Cka=qL;else{KL=JL;while(1){JL=KL+-72|0;k[oL>>2]=JL;FL=KL+-24|0;uL=k[FL>>2]|0;if(!uL)Dka=JL;else{zL=KL+-20|0;NL=k[zL>>2]|0;if((NL|0)==(uL|0)){Eka=JL;Fka=uL}else{JL=KL+-16|0;RL=NL;do{NL=RL+-72|0;k[zL>>2]=NL;i[c>>0]=i[d>>0]|0;uF(c,JL,NL);RL=k[zL>>2]|0}while((RL|0)!=(uL|0));Eka=k[oL>>2]|0;Fka=k[FL>>2]|0}OBa(Fka);Dka=Eka}if((Dka|0)==(qL|0))break;else KL=Dka}Cka=k[kd>>2]|0}OBa(Cka);xL=rL;yL=sL;ug=3810}while(0);if((ug|0)==3810){uka=nL;vka=1;wka=xL;xka=yL}oL=ld+120|0;pL=k[oL>>2]|0;if(pL){jL=ld+124|0;vL=k[jL>>2]|0;if((vL|0)==(pL|0))Gka=pL;else{KL=ld+128|0;qL=vL;do{vL=qL+-72|0;k[jL>>2]=vL;i[c>>0]=i[d>>0]|0;uF(c,KL,vL);qL=k[jL>>2]|0}while((qL|0)!=(pL|0));Gka=k[oL>>2]|0}OBa(Gka)}pL=ld+48|0;qL=k[pL>>2]|0;if(!qL){Hka=uka;Ika=vka;Jka=wka;Kka=xka;break sb}jL=ld+52|0;KL=k[jL>>2]|0;if((KL|0)==(qL|0))Lka=qL;else{vL=ld+56|0;uL=KL;do{KL=uL+-72|0;k[jL>>2]=KL;i[c>>0]=i[d>>0]|0;uF(c,vL,KL);uL=k[jL>>2]|0}while((uL|0)!=(qL|0));Lka=k[pL>>2]|0}OBa(Lka);Hka=uka;Ika=vka;Jka=wka;Kka=xka;break sb}while(0);mL=Hc()|0;qL=M;if((ld|0)==(wL|0)){Hka=nL;Ika=1;Jka=mL;Kka=qL;break}uL=wL;do{jL=uL+-24|0;vL=k[jL>>2]|0;if(vL){oL=uL+-20|0;KL=k[oL>>2]|0;if((KL|0)==(vL|0))Mka=vL;else{RL=uL+-16|0;zL=KL;do{KL=zL+-72|0;k[oL>>2]=KL;i[c>>0]=i[d>>0]|0;uF(c,RL,KL);zL=k[oL>>2]|0}while((zL|0)!=(vL|0));Mka=k[jL>>2]|0}OBa(Mka)}uL=uL+-72|0}while((uL|0)!=(ld|0));Hka=nL;Ika=1;Jka=mL;Kka=qL}while(0);if((ug|0)==3800){Hka=SK;Ika=1;Jka=lL;Kka=kL}cL=k[hL>>2]|0;do if((cL|0)==(id|0))Sf[k[(k[id>>2]|0)+16>>2]&2047](id);else{if(!cL)break;Sf[k[(k[cL>>2]|0)+20>>2]&2047](cL)}while(0);cL=fd+48|0;hL=k[cL>>2]|0;if(!hL){dL=Hka;eL=Ika;fL=Jka;gL=Kka;break}iL=fd+52|0;qL=k[iL>>2]|0;if((qL|0)==(hL|0))Nka=hL;else{mL=fd+56|0;nL=qL;do{qL=nL+-72|0;k[iL>>2]=qL;i[c>>0]=i[d>>0]|0;uF(c,mL,qL);nL=k[iL>>2]|0}while((nL|0)!=(hL|0));Nka=k[cL>>2]|0}OBa(Nka);dL=Hka;eL=Ika;fL=Jka;gL=Kka}while(0);VK=k[gd>>2]|0;if(!VK){Oka=dL;Pka=eL;Qka=fL;Rka=gL;break rb}ZK=k[TK>>2]|0;if((ZK|0)==(VK|0))Ska=VK;else{XK=ZK;while(1){ZK=XK+-72|0;k[TK>>2]=ZK;hL=XK+-24|0;nL=k[hL>>2]|0;if(!nL)Tka=ZK;else{iL=XK+-20|0;mL=k[iL>>2]|0;if((mL|0)==(nL|0)){Uka=ZK;Vka=nL}else{ZK=XK+-16|0;qL=mL;do{mL=qL+-72|0;k[iL>>2]=mL;i[c>>0]=i[d>>0]|0;uF(c,ZK,mL);qL=k[iL>>2]|0}while((qL|0)!=(nL|0));Uka=k[TK>>2]|0;Vka=k[hL>>2]|0}OBa(Vka);Tka=Uka}if((Tka|0)==(VK|0))break;else XK=Tka}Ska=k[gd>>2]|0}OBa(Ska);Oka=dL;Pka=eL;Qka=fL;Rka=gL;break rb}while(0);WK=Hc()|0;XK=M;VK=k[gd>>2]|0;if(!VK){aL=WK;bL=XK;ug=3797;break}nL=k[TK>>2]|0;if((nL|0)==(VK|0))Wka=VK;else{qL=nL;while(1){nL=qL+-72|0;k[TK>>2]=nL;iL=qL+-24|0;ZK=k[iL>>2]|0;if(!ZK)Xka=nL;else{cL=qL+-20|0;mL=k[cL>>2]|0;if((mL|0)==(ZK|0)){Yka=nL;Zka=ZK}else{nL=qL+-16|0;uL=mL;do{mL=uL+-72|0;k[cL>>2]=mL;i[c>>0]=i[d>>0]|0;uF(c,nL,mL);uL=k[cL>>2]|0}while((uL|0)!=(ZK|0));Yka=k[TK>>2]|0;Zka=k[iL>>2]|0}OBa(Zka);Xka=Yka}if((Xka|0)==(VK|0))break;else qL=Xka}Wka=k[gd>>2]|0}OBa(Wka);aL=WK;bL=XK;ug=3797}while(0);if((ug|0)==3797){Oka=SK;Pka=1;Qka=aL;Rka=bL}TK=hd+120|0;UK=k[TK>>2]|0;if(UK){OK=hd+124|0;_K=k[OK>>2]|0;if((_K|0)==(UK|0))_ka=UK;else{qL=hd+128|0;VK=_K;do{_K=VK+-72|0;k[OK>>2]=_K;i[c>>0]=i[d>>0]|0;uF(c,qL,_K);VK=k[OK>>2]|0}while((VK|0)!=(UK|0));_ka=k[TK>>2]|0}OBa(_ka)}UK=hd+48|0;VK=k[UK>>2]|0;if(!VK){$ka=Oka;ala=Pka;bla=Qka;cla=Rka;break pb}OK=hd+52|0;qL=k[OK>>2]|0;if((qL|0)==(VK|0))dla=VK;else{_K=hd+56|0;ZK=qL;do{qL=ZK+-72|0;k[OK>>2]=qL;i[c>>0]=i[d>>0]|0;uF(c,_K,qL);ZK=k[OK>>2]|0}while((ZK|0)!=(VK|0));dla=k[UK>>2]|0}OBa(dla);$ka=Oka;ala=Pka;bla=Qka;cla=Rka;break pb}while(0);RK=Hc()|0;VK=M;if((hd|0)==($K|0)){$ka=SK;ala=1;bla=RK;cla=VK;break}ZK=$K;do{OK=ZK+-24|0;_K=k[OK>>2]|0;if(_K){TK=ZK+-20|0;qL=k[TK>>2]|0;if((qL|0)==(_K|0))ela=_K;else{uL=ZK+-16|0;cL=qL;do{qL=cL+-72|0;k[TK>>2]=qL;i[c>>0]=i[d>>0]|0;uF(c,uL,qL);cL=k[TK>>2]|0}while((cL|0)!=(_K|0));ela=k[OK>>2]|0}OBa(ela)}ZK=ZK+-72|0}while((ZK|0)!=(hd|0));$ka=SK;ala=1;bla=RK;cla=VK}while(0);if((ug|0)==3787){$ka=vK;ala=1;bla=QK;cla=PK}HK=k[MK>>2]|0;do if((HK|0)==(ed|0))Sf[k[(k[ed>>2]|0)+16>>2]&2047](ed);else{if(!HK)break;Sf[k[(k[HK>>2]|0)+20>>2]&2047](HK)}while(0);HK=bd+48|0;MK=k[HK>>2]|0;if(!MK){IK=$ka;JK=ala;KK=bla;LK=cla;break}NK=bd+52|0;VK=k[NK>>2]|0;if((VK|0)==(MK|0))fla=MK;else{RK=bd+56|0;SK=VK;do{VK=SK+-72|0;k[NK>>2]=VK;i[c>>0]=i[d>>0]|0;uF(c,RK,VK);SK=k[NK>>2]|0}while((SK|0)!=(MK|0));fla=k[HK>>2]|0}OBa(fla);IK=$ka;JK=ala;KK=bla;LK=cla}while(0);yK=k[cd>>2]|0;if(!yK){gla=IK;hla=JK;ila=KK;jla=LK;break ob}CK=k[wK>>2]|0;if((CK|0)==(yK|0))kla=yK;else{AK=CK;while(1){CK=AK+-72|0;k[wK>>2]=CK;MK=AK+-24|0;SK=k[MK>>2]|0;if(!SK)lla=CK;else{NK=AK+-20|0;RK=k[NK>>2]|0;if((RK|0)==(SK|0)){mla=CK;nla=SK}else{CK=AK+-16|0;VK=RK;do{RK=VK+-72|0;k[NK>>2]=RK;i[c>>0]=i[d>>0]|0;uF(c,CK,RK);VK=k[NK>>2]|0}while((VK|0)!=(SK|0));mla=k[wK>>2]|0;nla=k[MK>>2]|0}OBa(nla);lla=mla}if((lla|0)==(yK|0))break;else AK=lla}kla=k[cd>>2]|0}OBa(kla);gla=IK;hla=JK;ila=KK;jla=LK;break ob}while(0);zK=Hc()|0;AK=M;yK=k[cd>>2]|0;if(!yK){FK=zK;GK=AK;ug=3784;break}SK=k[wK>>2]|0;if((SK|0)==(yK|0))ola=yK;else{VK=SK;while(1){SK=VK+-72|0;k[wK>>2]=SK;NK=VK+-24|0;CK=k[NK>>2]|0;if(!CK)pla=SK;else{HK=VK+-20|0;RK=k[HK>>2]|0;if((RK|0)==(CK|0)){qla=SK;rla=CK}else{SK=VK+-16|0;ZK=RK;do{RK=ZK+-72|0;k[HK>>2]=RK;i[c>>0]=i[d>>0]|0;uF(c,SK,RK);ZK=k[HK>>2]|0}while((ZK|0)!=(CK|0));qla=k[wK>>2]|0;rla=k[NK>>2]|0}OBa(rla);pla=qla}if((pla|0)==(yK|0))break;else VK=pla}ola=k[cd>>2]|0}OBa(ola);FK=zK;GK=AK;ug=3784}while(0);if((ug|0)==3784){gla=vK;hla=1;ila=FK;jla=GK}wK=dd+120|0;xK=k[wK>>2]|0;if(xK){rK=dd+124|0;DK=k[rK>>2]|0;if((DK|0)==(xK|0))sla=xK;else{VK=dd+128|0;yK=DK;do{DK=yK+-72|0;k[rK>>2]=DK;i[c>>0]=i[d>>0]|0;uF(c,VK,DK);yK=k[rK>>2]|0}while((yK|0)!=(xK|0));sla=k[wK>>2]|0}OBa(sla)}xK=dd+48|0;yK=k[xK>>2]|0;if(!yK){tla=gla;ula=hla;vla=ila;wla=jla;break mb}rK=dd+52|0;VK=k[rK>>2]|0;if((VK|0)==(yK|0))xla=yK;else{DK=dd+56|0;CK=VK;do{VK=CK+-72|0;k[rK>>2]=VK;i[c>>0]=i[d>>0]|0;uF(c,DK,VK);CK=k[rK>>2]|0}while((CK|0)!=(yK|0));xla=k[xK>>2]|0}OBa(xla);tla=gla;ula=hla;vla=ila;wla=jla;break mb}while(0);uK=Hc()|0;yK=M;if((dd|0)==(EK|0)){tla=vK;ula=1;vla=uK;wla=yK;break}CK=EK;do{rK=CK+-24|0;DK=k[rK>>2]|0;if(DK){wK=CK+-20|0;VK=k[wK>>2]|0;if((VK|0)==(DK|0))yla=DK;else{ZK=CK+-16|0;HK=VK;do{VK=HK+-72|0;k[wK>>2]=VK;i[c>>0]=i[d>>0]|0;uF(c,ZK,VK);HK=k[wK>>2]|0}while((HK|0)!=(DK|0));yla=k[rK>>2]|0}OBa(yla)}CK=CK+-72|0}while((CK|0)!=(dd|0));tla=vK;ula=1;vla=uK;wla=yK}while(0);if((ug|0)==3774){tla=_J;ula=1;vla=tK;wla=sK}kK=k[pK>>2]|0;do if((kK|0)==(ad|0))Sf[k[(k[ad>>2]|0)+16>>2]&2047](ad);else{if(!kK)break;Sf[k[(k[kK>>2]|0)+20>>2]&2047](kK)}while(0);kK=Zc+48|0;pK=k[kK>>2]|0;if(!pK){lK=tla;mK=ula;nK=vla;oK=wla;break}qK=Zc+52|0;yK=k[qK>>2]|0;if((yK|0)==(pK|0))zla=pK;else{uK=Zc+56|0;vK=yK;do{yK=vK+-72|0;k[qK>>2]=yK;i[c>>0]=i[d>>0]|0;uF(c,uK,yK);vK=k[qK>>2]|0}while((vK|0)!=(pK|0));zla=k[kK>>2]|0}OBa(zla);lK=tla;mK=ula;nK=vla;oK=wla}while(0);bK=k[_c>>2]|0;if(!bK){Ala=lK;Bla=mK;Cla=nK;Dla=oK;break lb}fK=k[$J>>2]|0;if((fK|0)==(bK|0))Ela=bK;else{dK=fK;while(1){fK=dK+-72|0;k[$J>>2]=fK;pK=dK+-24|0;vK=k[pK>>2]|0;if(!vK)Fla=fK;else{qK=dK+-20|0;uK=k[qK>>2]|0;if((uK|0)==(vK|0)){Gla=fK;Hla=vK}else{fK=dK+-16|0;yK=uK;do{uK=yK+-72|0;k[qK>>2]=uK;i[c>>0]=i[d>>0]|0;uF(c,fK,uK);yK=k[qK>>2]|0}while((yK|0)!=(vK|0));Gla=k[$J>>2]|0;Hla=k[pK>>2]|0}OBa(Hla);Fla=Gla}if((Fla|0)==(bK|0))break;else dK=Fla}Ela=k[_c>>2]|0}OBa(Ela);Ala=lK;Bla=mK;Cla=nK;Dla=oK;break lb}while(0);cK=Hc()|0;dK=M;bK=k[_c>>2]|0;if(!bK){iK=cK;jK=dK;ug=3771;break}vK=k[$J>>2]|0;if((vK|0)==(bK|0))Ila=bK;else{yK=vK;while(1){vK=yK+-72|0;k[$J>>2]=vK;qK=yK+-24|0;fK=k[qK>>2]|0;if(!fK)Jla=vK;else{kK=yK+-20|0;uK=k[kK>>2]|0;if((uK|0)==(fK|0)){Kla=vK;Lla=fK}else{vK=yK+-16|0;CK=uK;do{uK=CK+-72|0;k[kK>>2]=uK;i[c>>0]=i[d>>0]|0;uF(c,vK,uK);CK=k[kK>>2]|0}while((CK|0)!=(fK|0));Kla=k[$J>>2]|0;Lla=k[qK>>2]|0}OBa(Lla);Jla=Kla}if((Jla|0)==(bK|0))break;else yK=Jla}Ila=k[_c>>2]|0}OBa(Ila);iK=cK;jK=dK;ug=3771}while(0);if((ug|0)==3771){Ala=_J;Bla=1;Cla=iK;Dla=jK}$J=$c+120|0;aK=k[$J>>2]|0;if(aK){WJ=$c+124|0;gK=k[WJ>>2]|0;if((gK|0)==(aK|0))Mla=aK;else{yK=$c+128|0;bK=gK;do{gK=bK+-72|0;k[WJ>>2]=gK;i[c>>0]=i[d>>0]|0;uF(c,yK,gK);bK=k[WJ>>2]|0}while((bK|0)!=(aK|0));Mla=k[$J>>2]|0}OBa(Mla)}aK=$c+48|0;bK=k[aK>>2]|0;if(!bK){Nla=Ala;Ola=Bla;Pla=Cla;Qla=Dla;break jb}WJ=$c+52|0;yK=k[WJ>>2]|0;if((yK|0)==(bK|0))Rla=bK;else{gK=$c+56|0;fK=yK;do{yK=fK+-72|0;k[WJ>>2]=yK;i[c>>0]=i[d>>0]|0;uF(c,gK,yK);fK=k[WJ>>2]|0}while((fK|0)!=(bK|0));Rla=k[aK>>2]|0}OBa(Rla);Nla=Ala;Ola=Bla;Pla=Cla;Qla=Dla;break jb}while(0);ZJ=Hc()|0;bK=M;if(($c|0)==(hK|0)){Nla=_J;Ola=1;Pla=ZJ;Qla=bK;break}fK=hK;do{WJ=fK+-24|0;gK=k[WJ>>2]|0;if(gK){$J=fK+-20|0;yK=k[$J>>2]|0;if((yK|0)==(gK|0))Sla=gK;else{CK=fK+-16|0;kK=yK;do{yK=kK+-72|0;k[$J>>2]=yK;i[c>>0]=i[d>>0]|0;uF(c,CK,yK);kK=k[$J>>2]|0}while((kK|0)!=(gK|0));Sla=k[WJ>>2]|0}OBa(Sla)}fK=fK+-72|0}while((fK|0)!=($c|0));Nla=_J;Ola=1;Pla=ZJ;Qla=bK}while(0);if((ug|0)==3761){Nla=DJ;Ola=1;Pla=YJ;Qla=XJ}PJ=k[UJ>>2]|0;do if((PJ|0)==(Yc|0))Sf[k[(k[Yc>>2]|0)+16>>2]&2047](Yc);else{if(!PJ)break;Sf[k[(k[PJ>>2]|0)+20>>2]&2047](PJ)}while(0);PJ=Vc+48|0;UJ=k[PJ>>2]|0;if(!UJ){QJ=Nla;RJ=Ola;SJ=Pla;TJ=Qla;break}VJ=Vc+52|0;bK=k[VJ>>2]|0;if((bK|0)==(UJ|0))Tla=UJ;else{ZJ=Vc+56|0;_J=bK;do{bK=_J+-72|0;k[VJ>>2]=bK;i[c>>0]=i[d>>0]|0;uF(c,ZJ,bK);_J=k[VJ>>2]|0}while((_J|0)!=(UJ|0));Tla=k[PJ>>2]|0}OBa(Tla);QJ=Nla;RJ=Ola;SJ=Pla;TJ=Qla}while(0);GJ=k[Wc>>2]|0;if(!GJ){Ula=QJ;Vla=RJ;Wla=SJ;Xla=TJ;break ib}KJ=k[EJ>>2]|0;if((KJ|0)==(GJ|0))Yla=GJ;else{IJ=KJ;while(1){KJ=IJ+-72|0;k[EJ>>2]=KJ;UJ=IJ+-24|0;_J=k[UJ>>2]|0;if(!_J)Zla=KJ;else{VJ=IJ+-20|0;ZJ=k[VJ>>2]|0;if((ZJ|0)==(_J|0)){_la=KJ;$la=_J}else{KJ=IJ+-16|0;bK=ZJ;do{ZJ=bK+-72|0;k[VJ>>2]=ZJ;i[c>>0]=i[d>>0]|0;uF(c,KJ,ZJ);bK=k[VJ>>2]|0}while((bK|0)!=(_J|0));_la=k[EJ>>2]|0;$la=k[UJ>>2]|0}OBa($la);Zla=_la}if((Zla|0)==(GJ|0))break;else IJ=Zla}Yla=k[Wc>>2]|0}OBa(Yla);Ula=QJ;Vla=RJ;Wla=SJ;Xla=TJ;break ib}while(0);HJ=Hc()|0;IJ=M;GJ=k[Wc>>2]|0;if(!GJ){NJ=HJ;OJ=IJ;ug=3758;break}_J=k[EJ>>2]|0;if((_J|0)==(GJ|0))ama=GJ;else{bK=_J;while(1){_J=bK+-72|0;k[EJ>>2]=_J;VJ=bK+-24|0;KJ=k[VJ>>2]|0;if(!KJ)bma=_J;else{PJ=bK+-20|0;ZJ=k[PJ>>2]|0;if((ZJ|0)==(KJ|0)){cma=_J;dma=KJ}else{_J=bK+-16|0;fK=ZJ;do{ZJ=fK+-72|0;k[PJ>>2]=ZJ;i[c>>0]=i[d>>0]|0;uF(c,_J,ZJ);fK=k[PJ>>2]|0}while((fK|0)!=(KJ|0));cma=k[EJ>>2]|0;dma=k[VJ>>2]|0}OBa(dma);bma=cma}if((bma|0)==(GJ|0))break;else bK=bma}ama=k[Wc>>2]|0}OBa(ama);NJ=HJ;OJ=IJ;ug=3758}while(0);if((ug|0)==3758){Ula=DJ;Vla=1;Wla=NJ;Xla=OJ}EJ=Xc+120|0;FJ=k[EJ>>2]|0;if(FJ){zJ=Xc+124|0;LJ=k[zJ>>2]|0;if((LJ|0)==(FJ|0))ema=FJ;else{bK=Xc+128|0;GJ=LJ;do{LJ=GJ+-72|0;k[zJ>>2]=LJ;i[c>>0]=i[d>>0]|0;uF(c,bK,LJ);GJ=k[zJ>>2]|0}while((GJ|0)!=(FJ|0));ema=k[EJ>>2]|0}OBa(ema)}FJ=Xc+48|0;GJ=k[FJ>>2]|0;if(!GJ){fma=Ula;gma=Vla;hma=Wla;ima=Xla;break gb}zJ=Xc+52|0;bK=k[zJ>>2]|0;if((bK|0)==(GJ|0))jma=GJ;else{LJ=Xc+56|0;KJ=bK;do{bK=KJ+-72|0;k[zJ>>2]=bK;i[c>>0]=i[d>>0]|0;uF(c,LJ,bK);KJ=k[zJ>>2]|0}while((KJ|0)!=(GJ|0));jma=k[FJ>>2]|0}OBa(jma);fma=Ula;gma=Vla;hma=Wla;ima=Xla;break gb}while(0);CJ=Hc()|0;GJ=M;if((Xc|0)==(MJ|0)){fma=DJ;gma=1;hma=CJ;ima=GJ;break}KJ=MJ;do{zJ=KJ+-24|0;LJ=k[zJ>>2]|0;if(LJ){EJ=KJ+-20|0;bK=k[EJ>>2]|0;if((bK|0)==(LJ|0))kma=LJ;else{fK=KJ+-16|0;PJ=bK;do{bK=PJ+-72|0;k[EJ>>2]=bK;i[c>>0]=i[d>>0]|0;uF(c,fK,bK);PJ=k[EJ>>2]|0}while((PJ|0)!=(LJ|0));kma=k[zJ>>2]|0}OBa(kma)}KJ=KJ+-72|0}while((KJ|0)!=(Xc|0));fma=DJ;gma=1;hma=CJ;ima=GJ}while(0);if((ug|0)==3748){fma=SI;gma=1;hma=BJ;ima=AJ}tJ=k[kJ>>2]|0;if((tJ|0)==(Tc|0)){Sf[k[(k[Tc>>2]|0)+16>>2]&2047](Tc);uJ=fma;vJ=gma;wJ=hma;xJ=ima;break}if(!tJ){uJ=fma;vJ=gma;wJ=hma;xJ=ima;break}Sf[k[(k[tJ>>2]|0)+20>>2]&2047](tJ);uJ=fma;vJ=gma;wJ=hma;xJ=ima}while(0);kJ=Uc+48|0;rJ=k[kJ>>2]|0;if(!rJ){lJ=uJ;mJ=vJ;nJ=wJ;oJ=xJ;break}qJ=Uc+52|0;pJ=k[qJ>>2]|0;if((pJ|0)==(rJ|0))lma=rJ;else{sJ=Uc+56|0;tJ=pJ;do{pJ=tJ+-72|0;k[qJ>>2]=pJ;i[c>>0]=i[d>>0]|0;uF(c,sJ,pJ);tJ=k[qJ>>2]|0}while((tJ|0)!=(rJ|0));lma=k[kJ>>2]|0}OBa(lma);lJ=uJ;mJ=vJ;nJ=wJ;oJ=xJ}while(0);cJ=Pc+48|0;iJ=k[cJ>>2]|0;if(!iJ){dJ=lJ;eJ=mJ;fJ=nJ;gJ=oJ;break}hJ=Pc+52|0;jJ=k[hJ>>2]|0;if((jJ|0)==(iJ|0))mma=iJ;else{rJ=Pc+56|0;tJ=jJ;do{jJ=tJ+-72|0;k[hJ>>2]=jJ;i[c>>0]=i[d>>0]|0;uF(c,rJ,jJ);tJ=k[hJ>>2]|0}while((tJ|0)!=(iJ|0));mma=k[cJ>>2]|0}OBa(mma);dJ=lJ;eJ=mJ;fJ=nJ;gJ=oJ}while(0);VI=k[Qc>>2]|0;if(!VI){nma=dJ;oma=eJ;pma=fJ;qma=gJ;break fb}ZI=k[TI>>2]|0;if((ZI|0)==(VI|0))rma=VI;else{XI=ZI;while(1){ZI=XI+-72|0;k[TI>>2]=ZI;iJ=XI+-24|0;tJ=k[iJ>>2]|0;if(!tJ)sma=ZI;else{hJ=XI+-20|0;rJ=k[hJ>>2]|0;if((rJ|0)==(tJ|0)){tma=ZI;uma=tJ}else{ZI=XI+-16|0;jJ=rJ;do{rJ=jJ+-72|0;k[hJ>>2]=rJ;i[c>>0]=i[d>>0]|0;uF(c,ZI,rJ);jJ=k[hJ>>2]|0}while((jJ|0)!=(tJ|0));tma=k[TI>>2]|0;uma=k[iJ>>2]|0}OBa(uma);sma=tma}if((sma|0)==(VI|0))break;else XI=sma}rma=k[Qc>>2]|0}OBa(rma);nma=dJ;oma=eJ;pma=fJ;qma=gJ;break fb}while(0);WI=Hc()|0;XI=M;VI=k[Qc>>2]|0;if(!VI){aJ=WI;bJ=XI;ug=3743;break}tJ=k[TI>>2]|0;if((tJ|0)==(VI|0))vma=VI;else{jJ=tJ;while(1){tJ=jJ+-72|0;k[TI>>2]=tJ;hJ=jJ+-24|0;ZI=k[hJ>>2]|0;if(!ZI)wma=tJ;else{cJ=jJ+-20|0;rJ=k[cJ>>2]|0;if((rJ|0)==(ZI|0)){xma=tJ;yma=ZI}else{tJ=jJ+-16|0;qJ=rJ;do{rJ=qJ+-72|0;k[cJ>>2]=rJ;i[c>>0]=i[d>>0]|0;uF(c,tJ,rJ);qJ=k[cJ>>2]|0}while((qJ|0)!=(ZI|0));xma=k[TI>>2]|0;yma=k[hJ>>2]|0}OBa(yma);wma=xma}if((wma|0)==(VI|0))break;else jJ=wma}vma=k[Qc>>2]|0}OBa(vma);aJ=WI;bJ=XI;ug=3743}while(0);if((ug|0)==3743){nma=SI;oma=1;pma=aJ;qma=bJ}TI=Rc+120|0;UI=k[TI>>2]|0;if(UI){OI=Rc+124|0;_I=k[OI>>2]|0;if((_I|0)==(UI|0))zma=UI;else{jJ=Rc+128|0;VI=_I;do{_I=VI+-72|0;k[OI>>2]=_I;i[c>>0]=i[d>>0]|0;uF(c,jJ,_I);VI=k[OI>>2]|0}while((VI|0)!=(UI|0));zma=k[TI>>2]|0}OBa(zma)}UI=Rc+48|0;VI=k[UI>>2]|0;if(!VI){Ama=nma;Bma=oma;Cma=pma;Dma=qma;break db}OI=Rc+52|0;jJ=k[OI>>2]|0;if((jJ|0)==(VI|0))Ema=VI;else{_I=Rc+56|0;ZI=jJ;do{jJ=ZI+-72|0;k[OI>>2]=jJ;i[c>>0]=i[d>>0]|0;uF(c,_I,jJ);ZI=k[OI>>2]|0}while((ZI|0)!=(VI|0));Ema=k[UI>>2]|0}OBa(Ema);Ama=nma;Bma=oma;Cma=pma;Dma=qma;break db}while(0);RI=Hc()|0;VI=M;if((Rc|0)==($I|0)){Ama=SI;Bma=1;Cma=RI;Dma=VI;break}ZI=$I;do{OI=ZI+-24|0;_I=k[OI>>2]|0;if(_I){TI=ZI+-20|0;jJ=k[TI>>2]|0;if((jJ|0)==(_I|0))Fma=_I;else{qJ=ZI+-16|0;cJ=jJ;do{jJ=cJ+-72|0;k[TI>>2]=jJ;i[c>>0]=i[d>>0]|0;uF(c,qJ,jJ);cJ=k[TI>>2]|0}while((cJ|0)!=(_I|0));Fma=k[OI>>2]|0}OBa(Fma)}ZI=ZI+-72|0}while((ZI|0)!=(Rc|0));Ama=SI;Bma=1;Cma=RI;Dma=VI}while(0);if((ug|0)==3733){Ama=fI;Bma=1;Cma=QI;Dma=PI}II=k[zI>>2]|0;if((II|0)==(Nc|0)){Sf[k[(k[Nc>>2]|0)+16>>2]&2047](Nc);JI=Ama;KI=Bma;LI=Cma;MI=Dma;break}if(!II){JI=Ama;KI=Bma;LI=Cma;MI=Dma;break}Sf[k[(k[II>>2]|0)+20>>2]&2047](II);JI=Ama;KI=Bma;LI=Cma;MI=Dma}while(0);zI=Oc+48|0;GI=k[zI>>2]|0;if(!GI){AI=JI;BI=KI;CI=LI;DI=MI;break}FI=Oc+52|0;EI=k[FI>>2]|0;if((EI|0)==(GI|0))Gma=GI;else{HI=Oc+56|0;II=EI;do{EI=II+-72|0;k[FI>>2]=EI;i[c>>0]=i[d>>0]|0;uF(c,HI,EI);II=k[FI>>2]|0}while((II|0)!=(GI|0));Gma=k[zI>>2]|0}OBa(Gma);AI=JI;BI=KI;CI=LI;DI=MI}while(0);rI=Kc+48|0;xI=k[rI>>2]|0;if(!xI){sI=AI;tI=BI;uI=CI;vI=DI;break}wI=Kc+52|0;yI=k[wI>>2]|0;if((yI|0)==(xI|0))Hma=xI;else{GI=Kc+56|0;II=yI;do{yI=II+-72|0;k[wI>>2]=yI;i[c>>0]=i[d>>0]|0;uF(c,GI,yI);II=k[wI>>2]|0}while((II|0)!=(xI|0));Hma=k[rI>>2]|0}OBa(Hma);sI=AI;tI=BI;uI=CI;vI=DI}while(0);iI=k[Lc>>2]|0;if(!iI){Ima=sI;Jma=tI;Kma=uI;Lma=vI;break cb}mI=k[gI>>2]|0;if((mI|0)==(iI|0))Mma=iI;else{kI=mI;while(1){mI=kI+-72|0;k[gI>>2]=mI;xI=kI+-24|0;II=k[xI>>2]|0;if(!II)Nma=mI;else{wI=kI+-20|0;GI=k[wI>>2]|0;if((GI|0)==(II|0)){Oma=mI;Pma=II}else{mI=kI+-16|0;yI=GI;do{GI=yI+-72|0;k[wI>>2]=GI;i[c>>0]=i[d>>0]|0;uF(c,mI,GI);yI=k[wI>>2]|0}while((yI|0)!=(II|0));Oma=k[gI>>2]|0;Pma=k[xI>>2]|0}OBa(Pma);Nma=Oma}if((Nma|0)==(iI|0))break;else kI=Nma}Mma=k[Lc>>2]|0}OBa(Mma);Ima=sI;Jma=tI;Kma=uI;Lma=vI;break cb}while(0);jI=Hc()|0;kI=M;iI=k[Lc>>2]|0;if(!iI){pI=jI;qI=kI;ug=3728;break}II=k[gI>>2]|0;if((II|0)==(iI|0))Qma=iI;else{yI=II;while(1){II=yI+-72|0;k[gI>>2]=II;wI=yI+-24|0;mI=k[wI>>2]|0;if(!mI)Rma=II;else{rI=yI+-20|0;GI=k[rI>>2]|0;if((GI|0)==(mI|0)){Sma=II;Tma=mI}else{II=yI+-16|0;FI=GI;do{GI=FI+-72|0;k[rI>>2]=GI;i[c>>0]=i[d>>0]|0;uF(c,II,GI);FI=k[rI>>2]|0}while((FI|0)!=(mI|0));Sma=k[gI>>2]|0;Tma=k[wI>>2]|0}OBa(Tma);Rma=Sma}if((Rma|0)==(iI|0))break;else yI=Rma}Qma=k[Lc>>2]|0}OBa(Qma);pI=jI;qI=kI;ug=3728}while(0);if((ug|0)==3728){Ima=fI;Jma=1;Kma=pI;Lma=qI}gI=Mc+120|0;hI=k[gI>>2]|0;if(hI){bI=Mc+124|0;nI=k[bI>>2]|0;if((nI|0)==(hI|0))Uma=hI;else{yI=Mc+128|0;iI=nI;do{nI=iI+-72|0;k[bI>>2]=nI;i[c>>0]=i[d>>0]|0;uF(c,yI,nI);iI=k[bI>>2]|0}while((iI|0)!=(hI|0));Uma=k[gI>>2]|0}OBa(Uma)}hI=Mc+48|0;iI=k[hI>>2]|0;if(!iI){Vma=Ima;Wma=Jma;Xma=Kma;Yma=Lma;break ab}bI=Mc+52|0;yI=k[bI>>2]|0;if((yI|0)==(iI|0))Zma=iI;else{nI=Mc+56|0;mI=yI;do{yI=mI+-72|0;k[bI>>2]=yI;i[c>>0]=i[d>>0]|0;uF(c,nI,yI);mI=k[bI>>2]|0}while((mI|0)!=(iI|0));Zma=k[hI>>2]|0}OBa(Zma);Vma=Ima;Wma=Jma;Xma=Kma;Yma=Lma;break ab}while(0);eI=Hc()|0;iI=M;if((Mc|0)==(oI|0)){Vma=fI;Wma=1;Xma=eI;Yma=iI;break}mI=oI;do{bI=mI+-24|0;nI=k[bI>>2]|0;if(nI){gI=mI+-20|0;yI=k[gI>>2]|0;if((yI|0)==(nI|0))_ma=nI;else{FI=mI+-16|0;rI=yI;do{yI=rI+-72|0;k[gI>>2]=yI;i[c>>0]=i[d>>0]|0;uF(c,FI,yI);rI=k[gI>>2]|0}while((rI|0)!=(nI|0));_ma=k[bI>>2]|0}OBa(_ma)}mI=mI+-72|0}while((mI|0)!=(Mc|0));Vma=fI;Wma=1;Xma=eI;Yma=iI}while(0);if((ug|0)==3718){Vma=IH;Wma=1;Xma=dI;Yma=cI}PH=k[NH>>2]|0;do if((PH|0)==(Jc|0))Sf[k[(k[Jc>>2]|0)+16>>2]&2047](Jc);else{if(!PH)break;Sf[k[(k[PH>>2]|0)+20>>2]&2047](PH)}while(0);PH=Ec+48|0;NH=k[PH>>2]|0;if(!NH){YH=Vma;ZH=Wma;_H=Xma;$H=Yma;break}aI=Ec+52|0;iI=k[aI>>2]|0;if((iI|0)==(NH|0))$ma=NH;else{eI=Ec+56|0;fI=iI;do{iI=fI+-72|0;k[aI>>2]=iI;i[c>>0]=i[d>>0]|0;uF(c,eI,iI);fI=k[aI>>2]|0}while((fI|0)!=(NH|0));$ma=k[PH>>2]|0}OBa($ma);YH=Vma;ZH=Wma;_H=Xma;$H=Yma}while(0);JH=k[Fc>>2]|0;if(!JH){ana=YH;bna=ZH;cna=_H;dna=$H;break $a}KH=k[LH>>2]|0;if((KH|0)==(JH|0))ena=JH;else{MH=KH;while(1){KH=MH+-72|0;k[LH>>2]=KH;NH=MH+-24|0;fI=k[NH>>2]|0;if(!fI)fna=KH;else{aI=MH+-20|0;eI=k[aI>>2]|0;if((eI|0)==(fI|0)){gna=KH;hna=fI}else{KH=MH+-16|0;iI=eI;do{eI=iI+-72|0;k[aI>>2]=eI;i[c>>0]=i[d>>0]|0;uF(c,KH,eI);iI=k[aI>>2]|0}while((iI|0)!=(fI|0));gna=k[LH>>2]|0;hna=k[NH>>2]|0}OBa(hna);fna=gna}if((fna|0)==(JH|0))break;else MH=fna}ena=k[Fc>>2]|0}OBa(ena);ana=YH;bna=ZH;cna=_H;dna=$H;break $a}while(0);EH=Hc()|0;MH=M;JH=k[Fc>>2]|0;if(!JH){WH=EH;XH=MH;ug=3715;break}fI=k[LH>>2]|0;if((fI|0)==(JH|0))ina=JH;else{iI=fI;while(1){fI=iI+-72|0;k[LH>>2]=fI;aI=iI+-24|0;KH=k[aI>>2]|0;if(!KH)jna=fI;else{PH=iI+-20|0;eI=k[PH>>2]|0;if((eI|0)==(KH|0)){kna=fI;lna=KH}else{fI=iI+-16|0;mI=eI;do{eI=mI+-72|0;k[PH>>2]=eI;i[c>>0]=i[d>>0]|0;uF(c,fI,eI);mI=k[PH>>2]|0}while((mI|0)!=(KH|0));kna=k[LH>>2]|0;lna=k[aI>>2]|0}OBa(lna);jna=kna}if((jna|0)==(JH|0))break;else iI=jna}ina=k[Fc>>2]|0}OBa(ina);WH=EH;XH=MH;ug=3715}while(0);if((ug|0)==3715){ana=IH;bna=1;cna=WH;dna=XH}LH=Gc+120|0;QH=k[LH>>2]|0;if(QH){HH=Gc+124|0;iI=k[HH>>2]|0;if((iI|0)==(QH|0))mna=QH;else{JH=Gc+128|0;KH=iI;do{iI=KH+-72|0;k[HH>>2]=iI;i[c>>0]=i[d>>0]|0;uF(c,JH,iI);KH=k[HH>>2]|0}while((KH|0)!=(QH|0));mna=k[LH>>2]|0}OBa(mna)}QH=Gc+48|0;KH=k[QH>>2]|0;if(!KH){RH=ana;SH=bna;TH=cna;UH=dna;break}HH=Gc+52|0;JH=k[HH>>2]|0;if((JH|0)==(KH|0))nna=KH;else{IH=Gc+56|0;iI=JH;do{JH=iI+-72|0;k[HH>>2]=JH;i[c>>0]=i[d>>0]|0;uF(c,IH,JH);iI=k[HH>>2]|0}while((iI|0)!=(KH|0));nna=k[QH>>2]|0}OBa(nna);RH=ana;SH=bna;TH=cna;UH=dna}while(0);if((ug|0)==3713){RH=kH;SH=1;TH=GH;UH=FH}rH=k[pH>>2]|0;do if((rH|0)==(Dc|0))Sf[k[(k[Dc>>2]|0)+16>>2]&2047](Dc);else{if(!rH)break;Sf[k[(k[rH>>2]|0)+20>>2]&2047](rH)}while(0);rH=Ac+48|0;pH=k[rH>>2]|0;if(!pH){zH=RH;AH=SH;BH=TH;CH=UH;break}DH=Ac+52|0;KH=k[DH>>2]|0;if((KH|0)==(pH|0))ona=pH;else{iI=Ac+56|0;HH=KH;do{KH=HH+-72|0;k[DH>>2]=KH;i[c>>0]=i[d>>0]|0;uF(c,iI,KH);HH=k[DH>>2]|0}while((HH|0)!=(pH|0));ona=k[rH>>2]|0}OBa(ona);zH=RH;AH=SH;BH=TH;CH=UH}while(0);lH=k[Bc>>2]|0;if(!lH){pna=zH;qna=AH;rna=BH;sna=CH;break Xa}mH=k[nH>>2]|0;if((mH|0)==(lH|0))tna=lH;else{oH=mH;while(1){mH=oH+-72|0;k[nH>>2]=mH;pH=oH+-24|0;HH=k[pH>>2]|0;if(!HH)una=mH;else{DH=oH+-20|0;iI=k[DH>>2]|0;if((iI|0)==(HH|0)){vna=mH;wna=HH}else{mH=oH+-16|0;KH=iI;do{iI=KH+-72|0;k[DH>>2]=iI;i[c>>0]=i[d>>0]|0;uF(c,mH,iI);KH=k[DH>>2]|0}while((KH|0)!=(HH|0));vna=k[nH>>2]|0;wna=k[pH>>2]|0}OBa(wna);una=vna}if((una|0)==(lH|0))break;else oH=una}tna=k[Bc>>2]|0}OBa(tna);pna=zH;qna=AH;rna=BH;sna=CH;break Xa}while(0);gH=Hc()|0;oH=M;lH=k[Bc>>2]|0;if(!lH){xH=gH;yH=oH;ug=3710;break}HH=k[nH>>2]|0;if((HH|0)==(lH|0))xna=lH;else{KH=HH;while(1){HH=KH+-72|0;k[nH>>2]=HH;DH=KH+-24|0;mH=k[DH>>2]|0;if(!mH)yna=HH;else{rH=KH+-20|0;iI=k[rH>>2]|0;if((iI|0)==(mH|0)){zna=HH;Ana=mH}else{HH=KH+-16|0;IH=iI;do{iI=IH+-72|0;k[rH>>2]=iI;i[c>>0]=i[d>>0]|0;uF(c,HH,iI);IH=k[rH>>2]|0}while((IH|0)!=(mH|0));zna=k[nH>>2]|0;Ana=k[DH>>2]|0}OBa(Ana);yna=zna}if((yna|0)==(lH|0))break;else KH=yna}xna=k[Bc>>2]|0}OBa(xna);xH=gH;yH=oH;ug=3710}while(0);if((ug|0)==3710){pna=kH;qna=1;rna=xH;sna=yH}nH=Cc+120|0;sH=k[nH>>2]|0;if(sH){jH=Cc+124|0;KH=k[jH>>2]|0;if((KH|0)==(sH|0))Bna=sH;else{lH=Cc+128|0;mH=KH;do{KH=mH+-72|0;k[jH>>2]=KH;i[c>>0]=i[d>>0]|0;uF(c,lH,KH);mH=k[jH>>2]|0}while((mH|0)!=(sH|0));Bna=k[nH>>2]|0}OBa(Bna)}sH=Cc+48|0;mH=k[sH>>2]|0;if(!mH){tH=pna;uH=qna;vH=rna;wH=sna;break}jH=Cc+52|0;lH=k[jH>>2]|0;if((lH|0)==(mH|0))Cna=mH;else{kH=Cc+56|0;KH=lH;do{lH=KH+-72|0;k[jH>>2]=lH;i[c>>0]=i[d>>0]|0;uF(c,kH,lH);KH=k[jH>>2]|0}while((KH|0)!=(mH|0));Cna=k[sH>>2]|0}OBa(Cna);tH=pna;uH=qna;vH=rna;wH=sna}while(0);if((ug|0)==3708){tH=KG;uH=1;vH=iH;wH=hH}PG=k[eH>>2]|0;do if((PG|0)==(zc|0))Sf[k[(k[zc>>2]|0)+16>>2]&2047](zc);else{if(!PG)break;Sf[k[(k[PG>>2]|0)+20>>2]&2047](PG)}while(0);PG=wc+48|0;eH=k[PG>>2]|0;if(!eH){aH=tH;bH=uH;cH=vH;dH=wH;break}fH=wc+52|0;mH=k[fH>>2]|0;if((mH|0)==(eH|0))Dna=eH;else{KH=wc+56|0;jH=mH;do{mH=jH+-72|0;k[fH>>2]=mH;i[c>>0]=i[d>>0]|0;uF(c,KH,mH);jH=k[fH>>2]|0}while((jH|0)!=(eH|0));Dna=k[PG>>2]|0}OBa(Dna);aH=tH;bH=uH;cH=vH;dH=wH}while(0);LG=k[xc>>2]|0;if(!LG){Ena=aH;Fna=bH;Gna=cH;Hna=dH;break Ua}MG=k[VG>>2]|0;if((MG|0)==(LG|0))Ina=LG;else{UG=MG;while(1){MG=UG+-72|0;k[VG>>2]=MG;eH=UG+-24|0;jH=k[eH>>2]|0;if(!jH)Jna=MG;else{fH=UG+-20|0;KH=k[fH>>2]|0;if((KH|0)==(jH|0)){Kna=MG;Lna=jH}else{MG=UG+-16|0;mH=KH;do{KH=mH+-72|0;k[fH>>2]=KH;i[c>>0]=i[d>>0]|0;uF(c,MG,KH);mH=k[fH>>2]|0}while((mH|0)!=(jH|0));Kna=k[VG>>2]|0;Lna=k[eH>>2]|0}OBa(Lna);Jna=Kna}if((Jna|0)==(LG|0))break;else UG=Jna}Ina=k[xc>>2]|0}OBa(Ina);Ena=aH;Fna=bH;Gna=cH;Hna=dH;break Ua}while(0);GG=Hc()|0;UG=M;LG=k[xc>>2]|0;if(!LG){_G=GG;$G=UG;ug=3705;break}jH=k[VG>>2]|0;if((jH|0)==(LG|0))Mna=LG;else{mH=jH;while(1){jH=mH+-72|0;k[VG>>2]=jH;fH=mH+-24|0;MG=k[fH>>2]|0;if(!MG)Nna=jH;else{PG=mH+-20|0;KH=k[PG>>2]|0;if((KH|0)==(MG|0)){Ona=jH;Pna=MG}else{jH=mH+-16|0;kH=KH;do{KH=kH+-72|0;k[PG>>2]=KH;i[c>>0]=i[d>>0]|0;uF(c,jH,KH);kH=k[PG>>2]|0}while((kH|0)!=(MG|0));Ona=k[VG>>2]|0;Pna=k[fH>>2]|0}OBa(Pna);Nna=Ona}if((Nna|0)==(LG|0))break;else mH=Nna}Mna=k[xc>>2]|0}OBa(Mna);_G=GG;$G=UG;ug=3705}while(0);if((ug|0)==3705){Ena=KG;Fna=1;Gna=_G;Hna=$G}VG=yc+120|0;RG=k[VG>>2]|0;if(RG){OG=yc+124|0;NG=k[OG>>2]|0;if((NG|0)==(RG|0))Qna=RG;else{JG=yc+128|0;SG=NG;do{NG=SG+-72|0;k[OG>>2]=NG;i[c>>0]=i[d>>0]|0;uF(c,JG,NG);SG=k[OG>>2]|0}while((SG|0)!=(RG|0));Qna=k[VG>>2]|0}OBa(Qna)}RG=yc+48|0;SG=k[RG>>2]|0;if(!SG){WG=Ena;XG=Fna;YG=Gna;ZG=Hna;break}OG=yc+52|0;JG=k[OG>>2]|0;if((JG|0)==(SG|0))Rna=SG;else{KG=yc+56|0;NG=JG;do{JG=NG+-72|0;k[OG>>2]=JG;i[c>>0]=i[d>>0]|0;uF(c,KG,JG);NG=k[OG>>2]|0}while((NG|0)!=(SG|0));Rna=k[RG>>2]|0}OBa(Rna);WG=Ena;XG=Fna;YG=Gna;ZG=Hna}while(0);if((ug|0)==3697){WG=mG;XG=1;YG=IG;ZG=HG}tG=k[rG>>2]|0;do if((tG|0)==(vc|0))Sf[k[(k[vc>>2]|0)+16>>2]&2047](vc);else{if(!tG)break;Sf[k[(k[tG>>2]|0)+20>>2]&2047](tG)}while(0);tG=sc+48|0;rG=k[tG>>2]|0;if(!rG){BG=WG;CG=XG;DG=YG;EG=ZG;break}FG=sc+52|0;SG=k[FG>>2]|0;if((SG|0)==(rG|0))Sna=rG;else{NG=sc+56|0;OG=SG;do{SG=OG+-72|0;k[FG>>2]=SG;i[c>>0]=i[d>>0]|0;uF(c,NG,SG);OG=k[FG>>2]|0}while((OG|0)!=(rG|0));Sna=k[tG>>2]|0}OBa(Sna);BG=WG;CG=XG;DG=YG;EG=ZG}while(0);nG=k[tc>>2]|0;if(!nG){Tna=BG;Una=CG;Vna=DG;Wna=EG;break Ra}oG=k[pG>>2]|0;if((oG|0)==(nG|0))Xna=nG;else{qG=oG;while(1){oG=qG+-72|0;k[pG>>2]=oG;rG=qG+-24|0;OG=k[rG>>2]|0;if(!OG)Yna=oG;else{FG=qG+-20|0;NG=k[FG>>2]|0;if((NG|0)==(OG|0)){Zna=oG;_na=OG}else{oG=qG+-16|0;SG=NG;do{NG=SG+-72|0;k[FG>>2]=NG;i[c>>0]=i[d>>0]|0;uF(c,oG,NG);SG=k[FG>>2]|0}while((SG|0)!=(OG|0));Zna=k[pG>>2]|0;_na=k[rG>>2]|0}OBa(_na);Yna=Zna}if((Yna|0)==(nG|0))break;else qG=Yna}Xna=k[tc>>2]|0}OBa(Xna);Tna=BG;Una=CG;Vna=DG;Wna=EG;break Ra}while(0);iG=Hc()|0;qG=M;nG=k[tc>>2]|0;if(!nG){zG=iG;AG=qG;ug=3694;break}OG=k[pG>>2]|0;if((OG|0)==(nG|0))$na=nG;else{SG=OG;while(1){OG=SG+-72|0;k[pG>>2]=OG;FG=SG+-24|0;oG=k[FG>>2]|0;if(!oG)aoa=OG;else{tG=SG+-20|0;NG=k[tG>>2]|0;if((NG|0)==(oG|0)){boa=OG;coa=oG}else{OG=SG+-16|0;KG=NG;do{NG=KG+-72|0;k[tG>>2]=NG;i[c>>0]=i[d>>0]|0;uF(c,OG,NG);KG=k[tG>>2]|0}while((KG|0)!=(oG|0));boa=k[pG>>2]|0;coa=k[FG>>2]|0}OBa(coa);aoa=boa}if((aoa|0)==(nG|0))break;else SG=aoa}$na=k[tc>>2]|0}OBa($na);zG=iG;AG=qG;ug=3694}while(0);if((ug|0)==3694){Tna=mG;Una=1;Vna=zG;Wna=AG}pG=uc+120|0;uG=k[pG>>2]|0;if(uG){lG=uc+124|0;SG=k[lG>>2]|0;if((SG|0)==(uG|0))doa=uG;else{nG=uc+128|0;oG=SG;do{SG=oG+-72|0;k[lG>>2]=SG;i[c>>0]=i[d>>0]|0;uF(c,nG,SG);oG=k[lG>>2]|0}while((oG|0)!=(uG|0));doa=k[pG>>2]|0}OBa(doa)}uG=uc+48|0;oG=k[uG>>2]|0;if(!oG){vG=Tna;wG=Una;xG=Vna;yG=Wna;break}lG=uc+52|0;nG=k[lG>>2]|0;if((nG|0)==(oG|0))eoa=oG;else{mG=uc+56|0;SG=nG;do{nG=SG+-72|0;k[lG>>2]=nG;i[c>>0]=i[d>>0]|0;uF(c,mG,nG);SG=k[lG>>2]|0}while((SG|0)!=(oG|0));eoa=k[uG>>2]|0}OBa(eoa);vG=Tna;wG=Una;xG=Vna;yG=Wna}while(0);if((ug|0)==3692){vG=QF;wG=1;xG=kG;yG=jG}XF=k[VF>>2]|0;do if((XF|0)==(rc|0))Sf[k[(k[rc>>2]|0)+16>>2]&2047](rc);else{if(!XF)break;Sf[k[(k[XF>>2]|0)+20>>2]&2047](XF)}while(0);XF=oc+48|0;VF=k[XF>>2]|0;if(!VF){dG=vG;eG=wG;fG=xG;gG=yG;break}hG=oc+52|0;oG=k[hG>>2]|0;if((oG|0)==(VF|0))foa=VF;else{SG=oc+56|0;lG=oG;do{oG=lG+-72|0;k[hG>>2]=oG;i[c>>0]=i[d>>0]|0;uF(c,SG,oG);lG=k[hG>>2]|0}while((lG|0)!=(VF|0));foa=k[XF>>2]|0}OBa(foa);dG=vG;eG=wG;fG=xG;gG=yG}while(0);RF=k[pc>>2]|0;if(!RF){goa=dG;hoa=eG;ioa=fG;joa=gG;break Oa}SF=k[TF>>2]|0;if((SF|0)==(RF|0))koa=RF;else{UF=SF;while(1){SF=UF+-72|0;k[TF>>2]=SF;VF=UF+-24|0;lG=k[VF>>2]|0;if(!lG)loa=SF;else{hG=UF+-20|0;SG=k[hG>>2]|0;if((SG|0)==(lG|0)){moa=SF;noa=lG}else{SF=UF+-16|0;oG=SG;do{SG=oG+-72|0;k[hG>>2]=SG;i[c>>0]=i[d>>0]|0;uF(c,SF,SG);oG=k[hG>>2]|0}while((oG|0)!=(lG|0));moa=k[TF>>2]|0;noa=k[VF>>2]|0}OBa(noa);loa=moa}if((loa|0)==(RF|0))break;else UF=loa}koa=k[pc>>2]|0}OBa(koa);goa=dG;hoa=eG;ioa=fG;joa=gG;break Oa}while(0);MF=Hc()|0;UF=M;RF=k[pc>>2]|0;if(!RF){bG=MF;cG=UF;ug=3689;break}lG=k[TF>>2]|0;if((lG|0)==(RF|0))ooa=RF;else{oG=lG;while(1){lG=oG+-72|0;k[TF>>2]=lG;hG=oG+-24|0;SF=k[hG>>2]|0;if(!SF)poa=lG;else{XF=oG+-20|0;SG=k[XF>>2]|0;if((SG|0)==(SF|0)){qoa=lG;roa=SF}else{lG=oG+-16|0;mG=SG;do{SG=mG+-72|0;k[XF>>2]=SG;i[c>>0]=i[d>>0]|0;uF(c,lG,SG);mG=k[XF>>2]|0}while((mG|0)!=(SF|0));qoa=k[TF>>2]|0;roa=k[hG>>2]|0}OBa(roa);poa=qoa}if((poa|0)==(RF|0))break;else oG=poa}ooa=k[pc>>2]|0}OBa(ooa);bG=MF;cG=UF;ug=3689}while(0);if((ug|0)==3689){goa=QF;hoa=1;ioa=bG;joa=cG}TF=qc+120|0;YF=k[TF>>2]|0;if(YF){PF=qc+124|0;oG=k[PF>>2]|0;if((oG|0)==(YF|0))soa=YF;else{RF=qc+128|0;SF=oG;do{oG=SF+-72|0;k[PF>>2]=oG;i[c>>0]=i[d>>0]|0;uF(c,RF,oG);SF=k[PF>>2]|0}while((SF|0)!=(YF|0));soa=k[TF>>2]|0}OBa(soa)}YF=qc+48|0;SF=k[YF>>2]|0;if(!SF){ZF=goa;_F=hoa;$F=ioa;aG=joa;break}PF=qc+52|0;RF=k[PF>>2]|0;if((RF|0)==(SF|0))toa=SF;else{QF=qc+56|0;oG=RF;do{RF=oG+-72|0;k[PF>>2]=RF;i[c>>0]=i[d>>0]|0;uF(c,QF,RF);oG=k[PF>>2]|0}while((oG|0)!=(SF|0));toa=k[YF>>2]|0}OBa(toa);ZF=goa;_F=hoa;$F=ioa;aG=joa}while(0);if((ug|0)==3687){ZF=oF;_F=1;$F=OF;aG=NF}xF=k[tF>>2]|0;do if((xF|0)==(nc|0))Sf[k[(k[nc>>2]|0)+16>>2]&2047](nc);else{if(!xF)break;Sf[k[(k[xF>>2]|0)+20>>2]&2047](xF)}while(0);xF=kc+48|0;tF=k[xF>>2]|0;if(!tF){HF=ZF;IF=_F;JF=$F;KF=aG;break}LF=kc+52|0;SF=k[LF>>2]|0;if((SF|0)==(tF|0))uoa=tF;else{oG=kc+56|0;PF=SF;do{SF=PF+-72|0;k[LF>>2]=SF;i[c>>0]=i[d>>0]|0;uF(c,oG,SF);PF=k[LF>>2]|0}while((PF|0)!=(tF|0));uoa=k[xF>>2]|0}OBa(uoa);HF=ZF;IF=_F;JF=$F;KF=aG}while(0);pF=k[lc>>2]|0;if(!pF){voa=HF;woa=IF;xoa=JF;yoa=KF;break La}qF=k[rF>>2]|0;if((qF|0)==(pF|0))zoa=pF;else{sF=qF;while(1){qF=sF+-72|0;k[rF>>2]=qF;tF=sF+-24|0;PF=k[tF>>2]|0;if(!PF)Aoa=qF;else{LF=sF+-20|0;oG=k[LF>>2]|0;if((oG|0)==(PF|0)){Boa=qF;Coa=PF}else{qF=sF+-16|0;SF=oG;do{oG=SF+-72|0;k[LF>>2]=oG;i[c>>0]=i[d>>0]|0;uF(c,qF,oG);SF=k[LF>>2]|0}while((SF|0)!=(PF|0));Boa=k[rF>>2]|0;Coa=k[tF>>2]|0}OBa(Coa);Aoa=Boa}if((Aoa|0)==(pF|0))break;else sF=Aoa}zoa=k[lc>>2]|0}OBa(zoa);voa=HF;woa=IF;xoa=JF;yoa=KF;break La}while(0);kF=Hc()|0;sF=M;pF=k[lc>>2]|0;if(!pF){FF=kF;GF=sF;ug=3684;break}PF=k[rF>>2]|0;if((PF|0)==(pF|0))Doa=pF;else{SF=PF;while(1){PF=SF+-72|0;k[rF>>2]=PF;LF=SF+-24|0;qF=k[LF>>2]|0;if(!qF)Eoa=PF;else{xF=SF+-20|0;oG=k[xF>>2]|0;if((oG|0)==(qF|0)){Foa=PF;Goa=qF}else{PF=SF+-16|0;QF=oG;do{oG=QF+-72|0;k[xF>>2]=oG;i[c>>0]=i[d>>0]|0;uF(c,PF,oG);QF=k[xF>>2]|0}while((QF|0)!=(qF|0));Foa=k[rF>>2]|0;Goa=k[LF>>2]|0}OBa(Goa);Eoa=Foa}if((Eoa|0)==(pF|0))break;else SF=Eoa}Doa=k[lc>>2]|0}OBa(Doa);FF=kF;GF=sF;ug=3684}while(0);if((ug|0)==3684){voa=oF;woa=1;xoa=FF;yoa=GF}rF=mc+120|0;yF=k[rF>>2]|0;if(yF){nF=mc+124|0;SF=k[nF>>2]|0;if((SF|0)==(yF|0))Hoa=yF;else{pF=mc+128|0;qF=SF;do{SF=qF+-72|0;k[nF>>2]=SF;i[c>>0]=i[d>>0]|0;uF(c,pF,SF);qF=k[nF>>2]|0}while((qF|0)!=(yF|0));Hoa=k[rF>>2]|0}OBa(Hoa)}yF=mc+48|0;qF=k[yF>>2]|0;if(!qF){AF=voa;BF=woa;DF=xoa;EF=yoa;break}nF=mc+52|0;pF=k[nF>>2]|0;if((pF|0)==(qF|0))Ioa=qF;else{oF=mc+56|0;SF=pF;do{pF=SF+-72|0;k[nF>>2]=pF;i[c>>0]=i[d>>0]|0;uF(c,oF,pF);SF=k[nF>>2]|0}while((SF|0)!=(qF|0));Ioa=k[yF>>2]|0}OBa(Ioa);AF=voa;BF=woa;DF=xoa;EF=yoa}while(0);if((ug|0)==3682){AF=BE;BF=1;DF=mF;EF=lF}eF=k[XE>>2]|0;if((eF|0)==(ic|0)){Sf[k[(k[ic>>2]|0)+16>>2]&2047](ic);fF=AF;gF=BF;hF=DF;iF=EF;break}if(!eF){fF=AF;gF=BF;hF=DF;iF=EF;break}Sf[k[(k[eF>>2]|0)+20>>2]&2047](eF);fF=AF;gF=BF;hF=DF;iF=EF}while(0);XE=jc+48|0;cF=k[XE>>2]|0;if(!cF){YE=fF;ZE=gF;_E=hF;$E=iF;break}bF=jc+52|0;aF=k[bF>>2]|0;if((aF|0)==(cF|0))Joa=cF;else{dF=jc+56|0;eF=aF;do{aF=eF+-72|0;k[bF>>2]=aF;i[c>>0]=i[d>>0]|0;uF(c,dF,aF);eF=k[bF>>2]|0}while((eF|0)!=(cF|0));Joa=k[XE>>2]|0}OBa(Joa);YE=fF;ZE=gF;_E=hF;$E=iF}while(0);IE=ec+48|0;VE=k[IE>>2]|0;if(!VE){RE=YE;SE=ZE;TE=_E;UE=$E;break}GE=ec+52|0;WE=k[GE>>2]|0;if((WE|0)==(VE|0))Koa=VE;else{cF=ec+56|0;eF=WE;do{WE=eF+-72|0;k[GE>>2]=WE;i[c>>0]=i[d>>0]|0;uF(c,cF,WE);eF=k[GE>>2]|0}while((eF|0)!=(VE|0));Koa=k[IE>>2]|0}OBa(Koa);RE=YE;SE=ZE;TE=_E;UE=$E}while(0);CE=k[fc>>2]|0;if(!CE){Loa=RE;Moa=SE;Noa=TE;Ooa=UE;break Ia}DE=k[EE>>2]|0;if((DE|0)==(CE|0))Poa=CE;else{FE=DE;while(1){DE=FE+-72|0;k[EE>>2]=DE;VE=FE+-24|0;eF=k[VE>>2]|0;if(!eF)Qoa=DE;else{GE=FE+-20|0;cF=k[GE>>2]|0;if((cF|0)==(eF|0)){Roa=DE;Soa=eF}else{DE=FE+-16|0;WE=cF;do{cF=WE+-72|0;k[GE>>2]=cF;i[c>>0]=i[d>>0]|0;uF(c,DE,cF);WE=k[GE>>2]|0}while((WE|0)!=(eF|0));Roa=k[EE>>2]|0;Soa=k[VE>>2]|0}OBa(Soa);Qoa=Roa}if((Qoa|0)==(CE|0))break;else FE=Qoa}Poa=k[fc>>2]|0}OBa(Poa);Loa=RE;Moa=SE;Noa=TE;Ooa=UE;break Ia}while(0);xE=Hc()|0;FE=M;CE=k[fc>>2]|0;if(!CE){PE=xE;QE=FE;ug=3677;break}eF=k[EE>>2]|0;if((eF|0)==(CE|0))Toa=CE;else{WE=eF;while(1){eF=WE+-72|0;k[EE>>2]=eF;GE=WE+-24|0;DE=k[GE>>2]|0;if(!DE)Uoa=eF;else{IE=WE+-20|0;cF=k[IE>>2]|0;if((cF|0)==(DE|0)){Voa=eF;Woa=DE}else{eF=WE+-16|0;bF=cF;do{cF=bF+-72|0;k[IE>>2]=cF;i[c>>0]=i[d>>0]|0;uF(c,eF,cF);bF=k[IE>>2]|0}while((bF|0)!=(DE|0));Voa=k[EE>>2]|0;Woa=k[GE>>2]|0}OBa(Woa);Uoa=Voa}if((Uoa|0)==(CE|0))break;else WE=Uoa}Toa=k[fc>>2]|0}OBa(Toa);PE=xE;QE=FE;ug=3677}while(0);if((ug|0)==3677){Loa=BE;Moa=1;Noa=PE;Ooa=QE}EE=gc+120|0;JE=k[EE>>2]|0;if(JE){AE=gc+124|0;WE=k[AE>>2]|0;if((WE|0)==(JE|0))Xoa=JE;else{CE=gc+128|0;DE=WE;do{WE=DE+-72|0;k[AE>>2]=WE;i[c>>0]=i[d>>0]|0;uF(c,CE,WE);DE=k[AE>>2]|0}while((DE|0)!=(JE|0));Xoa=k[EE>>2]|0}OBa(Xoa)}JE=gc+48|0;DE=k[JE>>2]|0;if(!DE){KE=Loa;LE=Moa;ME=Noa;NE=Ooa;break}AE=gc+52|0;CE=k[AE>>2]|0;if((CE|0)==(DE|0))Yoa=DE;else{BE=gc+56|0;WE=CE;do{CE=WE+-72|0;k[AE>>2]=CE;i[c>>0]=i[d>>0]|0;uF(c,BE,CE);WE=k[AE>>2]|0}while((WE|0)!=(DE|0));Yoa=k[JE>>2]|0}OBa(Yoa);KE=Loa;LE=Moa;ME=Noa;NE=Ooa}while(0);if((ug|0)==3675){KE=PD;LE=1;ME=zE;NE=yE}rE=k[iE>>2]|0;if((rE|0)==(cc|0)){Sf[k[(k[cc>>2]|0)+16>>2]&2047](cc);sE=KE;tE=LE;uE=ME;vE=NE;break}if(!rE){sE=KE;tE=LE;uE=ME;vE=NE;break}Sf[k[(k[rE>>2]|0)+20>>2]&2047](rE);sE=KE;tE=LE;uE=ME;vE=NE}while(0);iE=dc+48|0;pE=k[iE>>2]|0;if(!pE){jE=sE;kE=tE;lE=uE;mE=vE;break}oE=dc+52|0;nE=k[oE>>2]|0;if((nE|0)==(pE|0))Zoa=pE;else{qE=dc+56|0;rE=nE;do{nE=rE+-72|0;k[oE>>2]=nE;i[c>>0]=i[d>>0]|0;uF(c,qE,nE);rE=k[oE>>2]|0}while((rE|0)!=(pE|0));Zoa=k[iE>>2]|0}OBa(Zoa);jE=sE;kE=tE;lE=uE;mE=vE}while(0);WD=$b+48|0;gE=k[WD>>2]|0;if(!gE){cE=jE;dE=kE;eE=lE;fE=mE;break}UD=$b+52|0;hE=k[UD>>2]|0;if((hE|0)==(gE|0))_oa=gE;else{pE=$b+56|0;rE=hE;do{hE=rE+-72|0;k[UD>>2]=hE;i[c>>0]=i[d>>0]|0;uF(c,pE,hE);rE=k[UD>>2]|0}while((rE|0)!=(gE|0));_oa=k[WD>>2]|0}OBa(_oa);cE=jE;dE=kE;eE=lE;fE=mE}while(0);QD=k[ac>>2]|0;if(!QD){$oa=cE;apa=dE;bpa=eE;cpa=fE;break Ea}RD=k[SD>>2]|0;if((RD|0)==(QD|0))dpa=QD;else{TD=RD;while(1){RD=TD+-72|0;k[SD>>2]=RD;gE=TD+-24|0;rE=k[gE>>2]|0;if(!rE)epa=RD;else{UD=TD+-20|0;pE=k[UD>>2]|0;if((pE|0)==(rE|0)){fpa=RD;gpa=rE}else{RD=TD+-16|0;hE=pE;do{pE=hE+-72|0;k[UD>>2]=pE;i[c>>0]=i[d>>0]|0;uF(c,RD,pE);hE=k[UD>>2]|0}while((hE|0)!=(rE|0));fpa=k[SD>>2]|0;gpa=k[gE>>2]|0}OBa(gpa);epa=fpa}if((epa|0)==(QD|0))break;else TD=epa}dpa=k[ac>>2]|0}OBa(dpa);$oa=cE;apa=dE;bpa=eE;cpa=fE;break Ea}while(0);LD=Hc()|0;TD=M;QD=k[ac>>2]|0;if(!QD){aE=LD;bE=TD;ug=3670;break}rE=k[SD>>2]|0;if((rE|0)==(QD|0))hpa=QD;else{hE=rE;while(1){rE=hE+-72|0;k[SD>>2]=rE;UD=hE+-24|0;RD=k[UD>>2]|0;if(!RD)ipa=rE;else{WD=hE+-20|0;pE=k[WD>>2]|0;if((pE|0)==(RD|0)){jpa=rE;kpa=RD}else{rE=hE+-16|0;oE=pE;do{pE=oE+-72|0;k[WD>>2]=pE;i[c>>0]=i[d>>0]|0;uF(c,rE,pE);oE=k[WD>>2]|0}while((oE|0)!=(RD|0));jpa=k[SD>>2]|0;kpa=k[UD>>2]|0}OBa(kpa);ipa=jpa}if((ipa|0)==(QD|0))break;else hE=ipa}hpa=k[ac>>2]|0}OBa(hpa);aE=LD;bE=TD;ug=3670}while(0);if((ug|0)==3670){$oa=PD;apa=1;bpa=aE;cpa=bE}SD=bc+120|0;XD=k[SD>>2]|0;if(XD){OD=bc+124|0;hE=k[OD>>2]|0;if((hE|0)==(XD|0))lpa=XD;else{QD=bc+128|0;RD=hE;do{hE=RD+-72|0;k[OD>>2]=hE;i[c>>0]=i[d>>0]|0;uF(c,QD,hE);RD=k[OD>>2]|0}while((RD|0)!=(XD|0));lpa=k[SD>>2]|0}OBa(lpa)}XD=bc+48|0;RD=k[XD>>2]|0;if(!RD){YD=$oa;ZD=apa;_D=bpa;$D=cpa;break}OD=bc+52|0;QD=k[OD>>2]|0;if((QD|0)==(RD|0))mpa=RD;else{PD=bc+56|0;hE=QD;do{QD=hE+-72|0;k[OD>>2]=QD;i[c>>0]=i[d>>0]|0;uF(c,PD,QD);hE=k[OD>>2]|0}while((hE|0)!=(RD|0));mpa=k[XD>>2]|0}OBa(mpa);YD=$oa;ZD=apa;_D=bpa;$D=cpa}while(0);if((ug|0)==3668){YD=bD;ZD=1;_D=ND;$D=MD}FD=k[wD>>2]|0;if((FD|0)==(Zb|0)){Sf[k[(k[Zb>>2]|0)+16>>2]&2047](Zb);GD=YD;HD=ZD;ID=_D;JD=$D;break}if(!FD){GD=YD;HD=ZD;ID=_D;JD=$D;break}Sf[k[(k[FD>>2]|0)+20>>2]&2047](FD);GD=YD;HD=ZD;ID=_D;JD=$D}while(0);wD=_b+48|0;DD=k[wD>>2]|0;if(!DD){xD=GD;yD=HD;zD=ID;AD=JD;break}CD=_b+52|0;BD=k[CD>>2]|0;if((BD|0)==(DD|0))npa=DD;else{ED=_b+56|0;FD=BD;do{BD=FD+-72|0;k[CD>>2]=BD;i[c>>0]=i[d>>0]|0;uF(c,ED,BD);FD=k[CD>>2]|0}while((FD|0)!=(DD|0));npa=k[wD>>2]|0}OBa(npa);xD=GD;yD=HD;zD=ID;AD=JD}while(0);iD=Wb+48|0;uD=k[iD>>2]|0;if(!uD){qD=xD;rD=yD;sD=zD;tD=AD;break}gD=Wb+52|0;vD=k[gD>>2]|0;if((vD|0)==(uD|0))opa=uD;else{DD=Wb+56|0;FD=vD;do{vD=FD+-72|0;k[gD>>2]=vD;i[c>>0]=i[d>>0]|0;uF(c,DD,vD);FD=k[gD>>2]|0}while((FD|0)!=(uD|0));opa=k[iD>>2]|0}OBa(opa);qD=xD;rD=yD;sD=zD;tD=AD}while(0);cD=k[Xb>>2]|0;if(!cD){ppa=qD;qpa=rD;rpa=sD;spa=tD;break Ba}dD=k[eD>>2]|0;if((dD|0)==(cD|0))tpa=cD;else{fD=dD;while(1){dD=fD+-72|0;k[eD>>2]=dD;uD=fD+-24|0;FD=k[uD>>2]|0;if(!FD)upa=dD;else{gD=fD+-20|0;DD=k[gD>>2]|0;if((DD|0)==(FD|0)){vpa=dD;wpa=FD}else{dD=fD+-16|0;vD=DD;do{DD=vD+-72|0;k[gD>>2]=DD;i[c>>0]=i[d>>0]|0;uF(c,dD,DD);vD=k[gD>>2]|0}while((vD|0)!=(FD|0));vpa=k[eD>>2]|0;wpa=k[uD>>2]|0}OBa(wpa);upa=vpa}if((upa|0)==(cD|0))break;else fD=upa}tpa=k[Xb>>2]|0}OBa(tpa);ppa=qD;qpa=rD;rpa=sD;spa=tD;break Ba}while(0);ZC=Hc()|0;fD=M;cD=k[Xb>>2]|0;if(!cD){oD=ZC;pD=fD;ug=3663;break}FD=k[eD>>2]|0;if((FD|0)==(cD|0))xpa=cD;else{vD=FD;while(1){FD=vD+-72|0;k[eD>>2]=FD;gD=vD+-24|0;dD=k[gD>>2]|0;if(!dD)ypa=FD;else{iD=vD+-20|0;DD=k[iD>>2]|0;if((DD|0)==(dD|0)){zpa=FD;Apa=dD}else{FD=vD+-16|0;CD=DD;do{DD=CD+-72|0;k[iD>>2]=DD;i[c>>0]=i[d>>0]|0;uF(c,FD,DD);CD=k[iD>>2]|0}while((CD|0)!=(dD|0));zpa=k[eD>>2]|0;Apa=k[gD>>2]|0}OBa(Apa);ypa=zpa}if((ypa|0)==(cD|0))break;else vD=ypa}xpa=k[Xb>>2]|0}OBa(xpa);oD=ZC;pD=fD;ug=3663}while(0);if((ug|0)==3663){ppa=bD;qpa=1;rpa=oD;spa=pD}eD=Yb+120|0;jD=k[eD>>2]|0;if(jD){aD=Yb+124|0;vD=k[aD>>2]|0;if((vD|0)==(jD|0))Bpa=jD;else{cD=Yb+128|0;dD=vD;do{vD=dD+-72|0;k[aD>>2]=vD;i[c>>0]=i[d>>0]|0;uF(c,cD,vD);dD=k[aD>>2]|0}while((dD|0)!=(jD|0));Bpa=k[eD>>2]|0}OBa(Bpa)}jD=Yb+48|0;dD=k[jD>>2]|0;if(!dD){kD=ppa;lD=qpa;mD=rpa;nD=spa;break}aD=Yb+52|0;cD=k[aD>>2]|0;if((cD|0)==(dD|0))Cpa=dD;else{bD=Yb+56|0;vD=cD;do{cD=vD+-72|0;k[aD>>2]=cD;i[c>>0]=i[d>>0]|0;uF(c,bD,cD);vD=k[aD>>2]|0}while((vD|0)!=(dD|0));Cpa=k[jD>>2]|0}OBa(Cpa);kD=ppa;lD=qpa;mD=rpa;nD=spa}while(0);if((ug|0)==3661){kD=pC;lD=1;mD=$C;nD=_C}TC=k[KC>>2]|0;if((TC|0)==(Ub|0)){Sf[k[(k[Ub>>2]|0)+16>>2]&2047](Ub);UC=kD;VC=lD;WC=mD;XC=nD;break}if(!TC){UC=kD;VC=lD;WC=mD;XC=nD;break}Sf[k[(k[TC>>2]|0)+20>>2]&2047](TC);UC=kD;VC=lD;WC=mD;XC=nD}while(0);KC=Vb+48|0;RC=k[KC>>2]|0;if(!RC){LC=UC;MC=VC;NC=WC;OC=XC;break}QC=Vb+52|0;PC=k[QC>>2]|0;if((PC|0)==(RC|0))Dpa=RC;else{SC=Vb+56|0;TC=PC;do{PC=TC+-72|0;k[QC>>2]=PC;i[c>>0]=i[d>>0]|0;uF(c,SC,PC);TC=k[QC>>2]|0}while((TC|0)!=(RC|0));Dpa=k[KC>>2]|0}OBa(Dpa);LC=UC;MC=VC;NC=WC;OC=XC}while(0);wC=Rb+48|0;IC=k[wC>>2]|0;if(!IC){EC=LC;FC=MC;GC=NC;HC=OC;break}uC=Rb+52|0;JC=k[uC>>2]|0;if((JC|0)==(IC|0))Epa=IC;else{RC=Rb+56|0;TC=JC;do{JC=TC+-72|0;k[uC>>2]=JC;i[c>>0]=i[d>>0]|0;uF(c,RC,JC);TC=k[uC>>2]|0}while((TC|0)!=(IC|0));Epa=k[wC>>2]|0}OBa(Epa);EC=LC;FC=MC;GC=NC;HC=OC}while(0);qC=k[Sb>>2]|0;if(!qC){Fpa=EC;Gpa=FC;Hpa=GC;Ipa=HC;break ya}rC=k[sC>>2]|0;if((rC|0)==(qC|0))Jpa=qC;else{tC=rC;while(1){rC=tC+-72|0;k[sC>>2]=rC;IC=tC+-24|0;TC=k[IC>>2]|0;if(!TC)Kpa=rC;else{uC=tC+-20|0;RC=k[uC>>2]|0;if((RC|0)==(TC|0)){Lpa=rC;Mpa=TC}else{rC=tC+-16|0;JC=RC;do{RC=JC+-72|0;k[uC>>2]=RC;i[c>>0]=i[d>>0]|0;uF(c,rC,RC);JC=k[uC>>2]|0}while((JC|0)!=(TC|0));Lpa=k[sC>>2]|0;Mpa=k[IC>>2]|0}OBa(Mpa);Kpa=Lpa}if((Kpa|0)==(qC|0))break;else tC=Kpa}Jpa=k[Sb>>2]|0}OBa(Jpa);Fpa=EC;Gpa=FC;Hpa=GC;Ipa=HC;break ya}while(0);lC=Hc()|0;tC=M;qC=k[Sb>>2]|0;if(!qC){CC=lC;DC=tC;ug=3656;break}TC=k[sC>>2]|0;if((TC|0)==(qC|0))Npa=qC;else{JC=TC;while(1){TC=JC+-72|0;k[sC>>2]=TC;uC=JC+-24|0;rC=k[uC>>2]|0;if(!rC)Opa=TC;else{wC=JC+-20|0;RC=k[wC>>2]|0;if((RC|0)==(rC|0)){Ppa=TC;Qpa=rC}else{TC=JC+-16|0;QC=RC;do{RC=QC+-72|0;k[wC>>2]=RC;i[c>>0]=i[d>>0]|0;uF(c,TC,RC);QC=k[wC>>2]|0}while((QC|0)!=(rC|0));Ppa=k[sC>>2]|0;Qpa=k[uC>>2]|0}OBa(Qpa);Opa=Ppa}if((Opa|0)==(qC|0))break;else JC=Opa}Npa=k[Sb>>2]|0}OBa(Npa);CC=lC;DC=tC;ug=3656}while(0);if((ug|0)==3656){Fpa=pC;Gpa=1;Hpa=CC;Ipa=DC}sC=Tb+120|0;xC=k[sC>>2]|0;if(xC){oC=Tb+124|0;JC=k[oC>>2]|0;if((JC|0)==(xC|0))Rpa=xC;else{qC=Tb+128|0;rC=JC;do{JC=rC+-72|0;k[oC>>2]=JC;i[c>>0]=i[d>>0]|0;uF(c,qC,JC);rC=k[oC>>2]|0}while((rC|0)!=(xC|0));Rpa=k[sC>>2]|0}OBa(Rpa)}xC=Tb+48|0;rC=k[xC>>2]|0;if(!rC){yC=Fpa;zC=Gpa;AC=Hpa;BC=Ipa;break}oC=Tb+52|0;qC=k[oC>>2]|0;if((qC|0)==(rC|0))Spa=rC;else{pC=Tb+56|0;JC=qC;do{qC=JC+-72|0;k[oC>>2]=qC;i[c>>0]=i[d>>0]|0;uF(c,pC,qC);JC=k[oC>>2]|0}while((JC|0)!=(rC|0));Spa=k[xC>>2]|0}OBa(Spa);yC=Fpa;zC=Gpa;AC=Hpa;BC=Ipa}while(0);if((ug|0)==3654){yC=DB;zC=1;AC=nC;BC=mC}fC=k[YB>>2]|0;if((fC|0)==(Pb|0)){Sf[k[(k[Pb>>2]|0)+16>>2]&2047](Pb);gC=yC;hC=zC;iC=AC;jC=BC;break}if(!fC){gC=yC;hC=zC;iC=AC;jC=BC;break}Sf[k[(k[fC>>2]|0)+20>>2]&2047](fC);gC=yC;hC=zC;iC=AC;jC=BC}while(0);YB=Qb+48|0;dC=k[YB>>2]|0;if(!dC){ZB=gC;_B=hC;$B=iC;aC=jC;break}cC=Qb+52|0;bC=k[cC>>2]|0;if((bC|0)==(dC|0))Tpa=dC;else{eC=Qb+56|0;fC=bC;do{bC=fC+-72|0;k[cC>>2]=bC;i[c>>0]=i[d>>0]|0;uF(c,eC,bC);fC=k[cC>>2]|0}while((fC|0)!=(dC|0));Tpa=k[YB>>2]|0}OBa(Tpa);ZB=gC;_B=hC;$B=iC;aC=jC}while(0);KB=Mb+48|0;WB=k[KB>>2]|0;if(!WB){SB=ZB;TB=_B;UB=$B;VB=aC;break}IB=Mb+52|0;XB=k[IB>>2]|0;if((XB|0)==(WB|0))Upa=WB;else{dC=Mb+56|0;fC=XB;do{XB=fC+-72|0;k[IB>>2]=XB;i[c>>0]=i[d>>0]|0;uF(c,dC,XB);fC=k[IB>>2]|0}while((fC|0)!=(WB|0));Upa=k[KB>>2]|0}OBa(Upa);SB=ZB;TB=_B;UB=$B;VB=aC}while(0);EB=k[Nb>>2]|0;if(!EB){Vpa=SB;Wpa=TB;Xpa=UB;Ypa=VB;break va}FB=k[GB>>2]|0;if((FB|0)==(EB|0))Zpa=EB;else{HB=FB;while(1){FB=HB+-72|0;k[GB>>2]=FB;WB=HB+-24|0;fC=k[WB>>2]|0;if(!fC)_pa=FB;else{IB=HB+-20|0;dC=k[IB>>2]|0;if((dC|0)==(fC|0)){$pa=FB;aqa=fC}else{FB=HB+-16|0;XB=dC;do{dC=XB+-72|0;k[IB>>2]=dC;i[c>>0]=i[d>>0]|0;uF(c,FB,dC);XB=k[IB>>2]|0}while((XB|0)!=(fC|0));$pa=k[GB>>2]|0;aqa=k[WB>>2]|0}OBa(aqa);_pa=$pa}if((_pa|0)==(EB|0))break;else HB=_pa}Zpa=k[Nb>>2]|0}OBa(Zpa);Vpa=SB;Wpa=TB;Xpa=UB;Ypa=VB;break va}while(0);zB=Hc()|0;HB=M;EB=k[Nb>>2]|0;if(!EB){QB=zB;RB=HB;ug=3649;break}fC=k[GB>>2]|0;if((fC|0)==(EB|0))bqa=EB;else{XB=fC;while(1){fC=XB+-72|0;k[GB>>2]=fC;IB=XB+-24|0;FB=k[IB>>2]|0;if(!FB)cqa=fC;else{KB=XB+-20|0;dC=k[KB>>2]|0;if((dC|0)==(FB|0)){dqa=fC;eqa=FB}else{fC=XB+-16|0;cC=dC;do{dC=cC+-72|0;k[KB>>2]=dC;i[c>>0]=i[d>>0]|0;uF(c,fC,dC);cC=k[KB>>2]|0}while((cC|0)!=(FB|0));dqa=k[GB>>2]|0;eqa=k[IB>>2]|0}OBa(eqa);cqa=dqa}if((cqa|0)==(EB|0))break;else XB=cqa}bqa=k[Nb>>2]|0}OBa(bqa);QB=zB;RB=HB;ug=3649}while(0);if((ug|0)==3649){Vpa=DB;Wpa=1;Xpa=QB;Ypa=RB}GB=Ob+120|0;LB=k[GB>>2]|0;if(LB){CB=Ob+124|0;XB=k[CB>>2]|0;if((XB|0)==(LB|0))fqa=LB;else{EB=Ob+128|0;FB=XB;do{XB=FB+-72|0;k[CB>>2]=XB;i[c>>0]=i[d>>0]|0;uF(c,EB,XB);FB=k[CB>>2]|0}while((FB|0)!=(LB|0));fqa=k[GB>>2]|0}OBa(fqa)}LB=Ob+48|0;FB=k[LB>>2]|0;if(!FB){MB=Vpa;NB=Wpa;OB=Xpa;PB=Ypa;break}CB=Ob+52|0;EB=k[CB>>2]|0;if((EB|0)==(FB|0))gqa=FB;else{DB=Ob+56|0;XB=EB;do{EB=XB+-72|0;k[CB>>2]=EB;i[c>>0]=i[d>>0]|0;uF(c,DB,EB);XB=k[CB>>2]|0}while((XB|0)!=(FB|0));gqa=k[LB>>2]|0}OBa(gqa);MB=Vpa;NB=Wpa;OB=Xpa;PB=Ypa}while(0);if((ug|0)==3647){MB=RA;NB=1;OB=BB;PB=AB}tB=k[kB>>2]|0;if((tB|0)==(Kb|0)){Sf[k[(k[Kb>>2]|0)+16>>2]&2047](Kb);uB=MB;vB=NB;wB=OB;xB=PB;break}if(!tB){uB=MB;vB=NB;wB=OB;xB=PB;break}Sf[k[(k[tB>>2]|0)+20>>2]&2047](tB);uB=MB;vB=NB;wB=OB;xB=PB}while(0);kB=Lb+48|0;rB=k[kB>>2]|0;if(!rB){lB=uB;mB=vB;nB=wB;oB=xB;break}qB=Lb+52|0;pB=k[qB>>2]|0;if((pB|0)==(rB|0))hqa=rB;else{sB=Lb+56|0;tB=pB;do{pB=tB+-72|0;k[qB>>2]=pB;i[c>>0]=i[d>>0]|0;uF(c,sB,pB);tB=k[qB>>2]|0}while((tB|0)!=(rB|0));hqa=k[kB>>2]|0}OBa(hqa);lB=uB;mB=vB;nB=wB;oB=xB}while(0);YA=Hb+48|0;iB=k[YA>>2]|0;if(!iB){eB=nB;fB=oB;gB=lB;hB=mB;break}WA=Hb+52|0;jB=k[WA>>2]|0;if((jB|0)==(iB|0))iqa=iB;else{rB=Hb+56|0;tB=jB;do{jB=tB+-72|0;k[WA>>2]=jB;i[c>>0]=i[d>>0]|0;uF(c,rB,jB);tB=k[WA>>2]|0}while((tB|0)!=(iB|0));iqa=k[YA>>2]|0}OBa(iqa);eB=nB;fB=oB;gB=lB;hB=mB}while(0);SA=k[Ib>>2]|0;if(!SA){jqa=eB;kqa=fB;lqa=gB;mqa=hB;break sa}TA=k[UA>>2]|0;if((TA|0)==(SA|0))nqa=SA;else{VA=TA;while(1){TA=VA+-72|0;k[UA>>2]=TA;iB=VA+-24|0;tB=k[iB>>2]|0;if(!tB)oqa=TA;else{WA=VA+-20|0;rB=k[WA>>2]|0;if((rB|0)==(tB|0)){pqa=TA;qqa=tB}else{TA=VA+-16|0;jB=rB;do{rB=jB+-72|0;k[WA>>2]=rB;i[c>>0]=i[d>>0]|0;uF(c,TA,rB);jB=k[WA>>2]|0}while((jB|0)!=(tB|0));pqa=k[UA>>2]|0;qqa=k[iB>>2]|0}OBa(qqa);oqa=pqa}if((oqa|0)==(SA|0))break;else VA=oqa}nqa=k[Ib>>2]|0}OBa(nqa);jqa=eB;kqa=fB;lqa=gB;mqa=hB;break sa}while(0);NA=Hc()|0;VA=M;SA=k[Ib>>2]|0;if(!SA){cB=NA;dB=VA;ug=3642;break}tB=k[UA>>2]|0;if((tB|0)==(SA|0))rqa=SA;else{jB=tB;while(1){tB=jB+-72|0;k[UA>>2]=tB;WA=jB+-24|0;TA=k[WA>>2]|0;if(!TA)sqa=tB;else{YA=jB+-20|0;rB=k[YA>>2]|0;if((rB|0)==(TA|0)){tqa=tB;uqa=TA}else{tB=jB+-16|0;qB=rB;do{rB=qB+-72|0;k[YA>>2]=rB;i[c>>0]=i[d>>0]|0;uF(c,tB,rB);qB=k[YA>>2]|0}while((qB|0)!=(TA|0));tqa=k[UA>>2]|0;uqa=k[WA>>2]|0}OBa(uqa);sqa=tqa}if((sqa|0)==(SA|0))break;else jB=sqa}rqa=k[Ib>>2]|0}OBa(rqa);cB=NA;dB=VA;ug=3642}while(0);if((ug|0)==3642){jqa=cB;kqa=dB;lqa=RA;mqa=1}UA=Jb+120|0;ZA=k[UA>>2]|0;if(ZA){QA=Jb+124|0;jB=k[QA>>2]|0;if((jB|0)==(ZA|0))vqa=ZA;else{SA=Jb+128|0;TA=jB;do{jB=TA+-72|0;k[QA>>2]=jB;i[c>>0]=i[d>>0]|0;uF(c,SA,jB);TA=k[QA>>2]|0}while((TA|0)!=(ZA|0));vqa=k[UA>>2]|0}OBa(vqa)}ZA=Jb+48|0;TA=k[ZA>>2]|0;if(!TA){_A=mqa;$A=jqa;aB=kqa;bB=lqa;break}QA=Jb+52|0;SA=k[QA>>2]|0;if((SA|0)==(TA|0))wqa=TA;else{RA=Jb+56|0;jB=SA;do{SA=jB+-72|0;k[QA>>2]=SA;i[c>>0]=i[d>>0]|0;uF(c,RA,SA);jB=k[QA>>2]|0}while((jB|0)!=(TA|0));wqa=k[ZA>>2]|0}OBa(wqa);_A=mqa;$A=jqa;aB=kqa;bB=lqa}while(0);if((ug|0)==3640){_A=1;$A=PA;aB=OA;bB=cA}HA=k[yA>>2]|0;if((HA|0)==(Fb|0)){Sf[k[(k[Fb>>2]|0)+16>>2]&2047](Fb);IA=_A;JA=$A;KA=aB;LA=bB;break}if(!HA){IA=_A;JA=$A;KA=aB;LA=bB;break}Sf[k[(k[HA>>2]|0)+20>>2]&2047](HA);IA=_A;JA=$A;KA=aB;LA=bB}while(0);yA=Gb+48|0;FA=k[yA>>2]|0;if(!FA){zA=IA;AA=JA;BA=KA;CA=LA;break}EA=Gb+52|0;DA=k[EA>>2]|0;if((DA|0)==(FA|0))xqa=FA;else{GA=Gb+56|0;HA=DA;do{DA=HA+-72|0;k[EA>>2]=DA;i[c>>0]=i[d>>0]|0;uF(c,GA,DA);HA=k[EA>>2]|0}while((HA|0)!=(FA|0));xqa=k[yA>>2]|0}OBa(xqa);zA=IA;AA=JA;BA=KA;CA=LA}while(0);hA=Cb+48|0;wA=k[hA>>2]|0;if(!wA){rA=zA;sA=AA;tA=BA;uA=CA;break}vA=Cb+52|0;xA=k[vA>>2]|0;if((xA|0)==(wA|0))yqa=wA;else{FA=Cb+56|0;HA=xA;do{xA=HA+-72|0;k[vA>>2]=xA;i[c>>0]=i[d>>0]|0;uF(c,FA,xA);HA=k[vA>>2]|0}while((HA|0)!=(wA|0));yqa=k[hA>>2]|0}OBa(yqa);rA=zA;sA=AA;tA=BA;uA=CA}while(0);dA=k[Db>>2]|0;if(!dA){zqa=rA;Aqa=sA;Bqa=tA;Cqa=uA;break pa}eA=k[kA>>2]|0;if((eA|0)==(dA|0))Dqa=dA;else{jA=eA;while(1){eA=jA+-72|0;k[kA>>2]=eA;wA=jA+-24|0;HA=k[wA>>2]|0;if(!HA)Eqa=eA;else{vA=jA+-20|0;FA=k[vA>>2]|0;if((FA|0)==(HA|0)){Fqa=eA;Gqa=HA}else{eA=jA+-16|0;xA=FA;do{FA=xA+-72|0;k[vA>>2]=FA;i[c>>0]=i[d>>0]|0;uF(c,eA,FA);xA=k[vA>>2]|0}while((xA|0)!=(HA|0));Fqa=k[kA>>2]|0;Gqa=k[wA>>2]|0}OBa(Gqa);Eqa=Fqa}if((Eqa|0)==(dA|0))break;else jA=Eqa}Dqa=k[Db>>2]|0}OBa(Dqa);zqa=rA;Aqa=sA;Bqa=tA;Cqa=uA;break pa}while(0);Yz=Hc()|0;jA=M;dA=k[Db>>2]|0;if(!dA){pA=Yz;qA=jA;ug=3635;break}HA=k[kA>>2]|0;if((HA|0)==(dA|0))Hqa=dA;else{xA=HA;while(1){HA=xA+-72|0;k[kA>>2]=HA;vA=xA+-24|0;eA=k[vA>>2]|0;if(!eA)Iqa=HA;else{hA=xA+-20|0;FA=k[hA>>2]|0;if((FA|0)==(eA|0)){Jqa=HA;Kqa=eA}else{HA=xA+-16|0;EA=FA;do{FA=EA+-72|0;k[hA>>2]=FA;i[c>>0]=i[d>>0]|0;uF(c,HA,FA);EA=k[hA>>2]|0}while((EA|0)!=(eA|0));Jqa=k[kA>>2]|0;Kqa=k[vA>>2]|0}OBa(Kqa);Iqa=Jqa}if((Iqa|0)==(dA|0))break;else xA=Iqa}Hqa=k[Db>>2]|0}OBa(Hqa);pA=Yz;qA=jA;ug=3635}while(0);if((ug|0)==3635){zqa=1;Aqa=pA;Bqa=qA;Cqa=cA}kA=Eb+120|0;bA=k[kA>>2]|0;if(bA){gA=Eb+124|0;fA=k[gA>>2]|0;if((fA|0)==(bA|0))Lqa=bA;else{xA=Eb+128|0;dA=fA;do{fA=dA+-72|0;k[gA>>2]=fA;i[c>>0]=i[d>>0]|0;uF(c,xA,fA);dA=k[gA>>2]|0}while((dA|0)!=(bA|0));Lqa=k[kA>>2]|0}OBa(Lqa)}bA=Eb+48|0;dA=k[bA>>2]|0;if(!dA){lA=zqa;mA=Aqa;nA=Bqa;oA=Cqa;break}gA=Eb+52|0;xA=k[gA>>2]|0;if((xA|0)==(dA|0))Mqa=dA;else{cA=Eb+56|0;fA=xA;do{xA=fA+-72|0;k[gA>>2]=xA;i[c>>0]=i[d>>0]|0;uF(c,cA,xA);fA=k[gA>>2]|0}while((fA|0)!=(dA|0));Mqa=k[bA>>2]|0}OBa(Mqa);lA=zqa;mA=Aqa;nA=Bqa;oA=Cqa}while(0);if((ug|0)==3633){lA=1;mA=aA;nA=$z;oA=iz}Tz=k[Nz>>2]|0;if((Tz|0)==(Ab|0)){Sf[k[(k[Ab>>2]|0)+16>>2]&2047](Ab);Uz=lA;Vz=mA;Wz=nA;Xz=oA;break}if(!Tz){Uz=lA;Vz=mA;Wz=nA;Xz=oA;break}Sf[k[(k[Tz>>2]|0)+20>>2]&2047](Tz);Uz=lA;Vz=mA;Wz=nA;Xz=oA}while(0);Nz=Bb+120|0;Rz=k[Nz>>2]|0;if(Rz){Oz=Bb+124|0;Sz=k[Oz>>2]|0;if((Sz|0)==(Rz|0))Nqa=Rz;else{Hz=Bb+128|0;Jz=Sz;do{Sz=Jz+-72|0;k[Oz>>2]=Sz;i[c>>0]=i[d>>0]|0;uF(c,Hz,Sz);Jz=k[Oz>>2]|0}while((Jz|0)!=(Rz|0));Nqa=k[Nz>>2]|0}OBa(Nqa)}Rz=Bb+48|0;Jz=k[Rz>>2]|0;if(!Jz){Dz=Uz;Ez=Vz;Fz=Wz;Gz=Xz;break}Oz=Bb+52|0;Hz=k[Oz>>2]|0;if((Hz|0)==(Jz|0))Oqa=Jz;else{Sz=Bb+56|0;Iz=Hz;do{Hz=Iz+-72|0;k[Oz>>2]=Hz;i[c>>0]=i[d>>0]|0;uF(c,Sz,Hz);Iz=k[Oz>>2]|0}while((Iz|0)!=(Jz|0));Oqa=k[Rz>>2]|0}OBa(Oqa);Dz=Uz;Ez=Vz;Fz=Wz;Gz=Xz}while(0);uz=xb+48|0;Az=k[uz>>2]|0;if(!Az){vz=Gz;wz=Dz;xz=Ez;yz=Fz;break}zz=xb+52|0;Bz=k[zz>>2]|0;if((Bz|0)==(Az|0))Pqa=Az;else{Jz=xb+56|0;Iz=Bz;do{Bz=Iz+-72|0;k[zz>>2]=Bz;i[c>>0]=i[d>>0]|0;uF(c,Jz,Bz);Iz=k[zz>>2]|0}while((Iz|0)!=(Az|0));Pqa=k[uz>>2]|0}OBa(Pqa);vz=Gz;wz=Dz;xz=Ez;yz=Fz}while(0);lz=k[yb>>2]|0;if(!lz){Qqa=vz;Rqa=wz;Sqa=xz;Tqa=yz;break ma}pz=k[jz>>2]|0;if((pz|0)==(lz|0))Uqa=lz;else{nz=pz;while(1){pz=nz+-72|0;k[jz>>2]=pz;Az=nz+-24|0;Iz=k[Az>>2]|0;if(!Iz)Vqa=pz;else{zz=nz+-20|0;Jz=k[zz>>2]|0;if((Jz|0)==(Iz|0)){Wqa=pz;Xqa=Iz}else{pz=nz+-16|0;Bz=Jz;do{Jz=Bz+-72|0;k[zz>>2]=Jz;i[c>>0]=i[d>>0]|0;uF(c,pz,Jz);Bz=k[zz>>2]|0}while((Bz|0)!=(Iz|0));Wqa=k[jz>>2]|0;Xqa=k[Az>>2]|0}OBa(Xqa);Vqa=Wqa}if((Vqa|0)==(lz|0))break;else nz=Vqa}Uqa=k[yb>>2]|0}OBa(Uqa);Qqa=vz;Rqa=wz;Sqa=xz;Tqa=yz;break ma}while(0);mz=Hc()|0;nz=M;lz=k[yb>>2]|0;if(!lz){sz=mz;tz=nz;ug=3622;break}Iz=k[jz>>2]|0;if((Iz|0)==(lz|0))Yqa=lz;else{Bz=Iz;while(1){Iz=Bz+-72|0;k[jz>>2]=Iz;zz=Bz+-24|0;pz=k[zz>>2]|0;if(!pz)Zqa=Iz;else{uz=Bz+-20|0;Jz=k[uz>>2]|0;if((Jz|0)==(pz|0)){_qa=Iz;$qa=pz}else{Iz=Bz+-16|0;Oz=Jz;do{Jz=Oz+-72|0;k[uz>>2]=Jz;i[c>>0]=i[d>>0]|0;uF(c,Iz,Jz);Oz=k[uz>>2]|0}while((Oz|0)!=(pz|0));_qa=k[jz>>2]|0;$qa=k[zz>>2]|0}OBa($qa);Zqa=_qa}if((Zqa|0)==(lz|0))break;else Bz=Zqa}Yqa=k[yb>>2]|0}OBa(Yqa);sz=mz;tz=nz;ug=3622}while(0);if((ug|0)==3622){Qqa=iz;Rqa=1;Sqa=sz;Tqa=tz}jz=zb+120|0;kz=k[jz>>2]|0;if(kz){cz=zb+124|0;qz=k[cz>>2]|0;if((qz|0)==(kz|0))ara=kz;else{Bz=zb+128|0;lz=qz;do{qz=lz+-72|0;k[cz>>2]=qz;i[c>>0]=i[d>>0]|0;uF(c,Bz,qz);lz=k[cz>>2]|0}while((lz|0)!=(kz|0));ara=k[jz>>2]|0}OBa(ara)}kz=zb+48|0;lz=k[kz>>2]|0;if(!lz){bra=Qqa;cra=Rqa;dra=Sqa;era=Tqa;break ka}cz=zb+52|0;Bz=k[cz>>2]|0;if((Bz|0)==(lz|0))fra=lz;else{qz=zb+56|0;pz=Bz;do{Bz=pz+-72|0;k[cz>>2]=Bz;i[c>>0]=i[d>>0]|0;uF(c,qz,Bz);pz=k[cz>>2]|0}while((pz|0)!=(lz|0));fra=k[kz>>2]|0}OBa(fra);bra=Qqa;cra=Rqa;dra=Sqa;era=Tqa;break ka}while(0);hz=Hc()|0;lz=M;if((zb|0)==(rz|0)){bra=iz;cra=1;dra=hz;era=lz;break}pz=rz;do{cz=pz+-24|0;qz=k[cz>>2]|0;if(qz){jz=pz+-20|0;Bz=k[jz>>2]|0;if((Bz|0)==(qz|0))gra=qz;else{Oz=pz+-16|0;uz=Bz;do{Bz=uz+-72|0;k[jz>>2]=Bz;i[c>>0]=i[d>>0]|0;uF(c,Oz,Bz);uz=k[jz>>2]|0}while((uz|0)!=(qz|0));gra=k[cz>>2]|0}OBa(gra)}pz=pz+-72|0}while((pz|0)!=(zb|0));bra=iz;cra=1;dra=hz;era=lz}while(0);if((ug|0)==3612){bra=ny;cra=1;dra=gz;era=fz}Zy=k[Ty>>2]|0;if((Zy|0)==(vb|0)){Sf[k[(k[vb>>2]|0)+16>>2]&2047](vb);_y=bra;$y=cra;az=dra;bz=era;break}if(!Zy){_y=bra;$y=cra;az=dra;bz=era;break}Sf[k[(k[Zy>>2]|0)+20>>2]&2047](Zy);_y=bra;$y=cra;az=dra;bz=era}while(0);Ty=wb+120|0;Xy=k[Ty>>2]|0;if(Xy){Uy=wb+124|0;Yy=k[Uy>>2]|0;if((Yy|0)==(Xy|0))hra=Xy;else{Ny=wb+128|0;Py=Yy;do{Yy=Py+-72|0;k[Uy>>2]=Yy;i[c>>0]=i[d>>0]|0;uF(c,Ny,Yy);Py=k[Uy>>2]|0}while((Py|0)!=(Xy|0));hra=k[Ty>>2]|0}OBa(hra)}Xy=wb+48|0;Py=k[Xy>>2]|0;if(!Py){Jy=_y;Ky=$y;Ly=az;My=bz;break}Uy=wb+52|0;Ny=k[Uy>>2]|0;if((Ny|0)==(Py|0))ira=Py;else{Yy=wb+56|0;Oy=Ny;do{Ny=Oy+-72|0;k[Uy>>2]=Ny;i[c>>0]=i[d>>0]|0;uF(c,Yy,Ny);Oy=k[Uy>>2]|0}while((Oy|0)!=(Py|0));ira=k[Xy>>2]|0}OBa(ira);Jy=_y;Ky=$y;Ly=az;My=bz}while(0);Ay=sb+48|0;Gy=k[Ay>>2]|0;if(!Gy){By=Jy;Cy=Ky;Dy=Ly;Ey=My;break}Fy=sb+52|0;Hy=k[Fy>>2]|0;if((Hy|0)==(Gy|0))jra=Gy;else{Py=sb+56|0;Oy=Hy;do{Hy=Oy+-72|0;k[Fy>>2]=Hy;i[c>>0]=i[d>>0]|0;uF(c,Py,Hy);Oy=k[Fy>>2]|0}while((Oy|0)!=(Gy|0));jra=k[Ay>>2]|0}OBa(jra);By=Jy;Cy=Ky;Dy=Ly;Ey=My}while(0);zy=k[tb>>2]|0;if(!zy){kra=By;lra=Cy;mra=Dy;nra=Ey;break ja}qy=k[vy>>2]|0;if((qy|0)==(zy|0))ora=zy;else{sy=qy;while(1){qy=sy+-72|0;k[vy>>2]=qy;uy=sy+-24|0;Gy=k[uy>>2]|0;if(!Gy)pra=qy;else{Oy=sy+-20|0;Fy=k[Oy>>2]|0;if((Fy|0)==(Gy|0)){qra=qy;rra=Gy}else{qy=sy+-16|0;Py=Fy;do{Fy=Py+-72|0;k[Oy>>2]=Fy;i[c>>0]=i[d>>0]|0;uF(c,qy,Fy);Py=k[Oy>>2]|0}while((Py|0)!=(Gy|0));qra=k[vy>>2]|0;rra=k[uy>>2]|0}OBa(rra);pra=qra}if((pra|0)==(zy|0))break;else sy=pra}ora=k[tb>>2]|0}OBa(ora);kra=By;lra=Cy;mra=Dy;nra=Ey;break ja}while(0);ry=Hc()|0;sy=M;zy=k[tb>>2]|0;if(!zy){xy=ry;yy=sy;ug=3601;break}Gy=k[vy>>2]|0;if((Gy|0)==(zy|0))sra=zy;else{Py=Gy;while(1){Gy=Py+-72|0;k[vy>>2]=Gy;Oy=Py+-24|0;qy=k[Oy>>2]|0;if(!qy)tra=Gy;else{Ay=Py+-20|0;Fy=k[Ay>>2]|0;if((Fy|0)==(qy|0)){ura=Gy;vra=qy}else{Gy=Py+-16|0;Hy=Fy;do{Fy=Hy+-72|0;k[Ay>>2]=Fy;i[c>>0]=i[d>>0]|0;uF(c,Gy,Fy);Hy=k[Ay>>2]|0}while((Hy|0)!=(qy|0));ura=k[vy>>2]|0;vra=k[Oy>>2]|0}OBa(vra);tra=ura}if((tra|0)==(zy|0))break;else Py=tra}sra=k[tb>>2]|0}OBa(sra);xy=ry;yy=sy;ug=3601}while(0);if((ug|0)==3601){kra=ny;lra=1;mra=xy;nra=yy}vy=ub+192|0;py=k[vy>>2]|0;if(py){iy=ub+196|0;oy=k[iy>>2]|0;if((oy|0)==(py|0))wra=py;else{Py=ub+200|0;zy=oy;do{oy=zy+-72|0;k[iy>>2]=oy;i[c>>0]=i[d>>0]|0;uF(c,Py,oy);zy=k[iy>>2]|0}while((zy|0)!=(py|0));wra=k[vy>>2]|0}OBa(wra)}py=ub+120|0;zy=k[py>>2]|0;if(zy){iy=ub+124|0;Py=k[iy>>2]|0;if((Py|0)==(zy|0))xra=zy;else{oy=ub+128|0;qy=Py;do{Py=qy+-72|0;k[iy>>2]=Py;i[c>>0]=i[d>>0]|0;uF(c,oy,Py);qy=k[iy>>2]|0}while((qy|0)!=(zy|0));xra=k[py>>2]|0}OBa(xra)}zy=ub+48|0;qy=k[zy>>2]|0;if(!qy){yra=kra;zra=lra;Ara=mra;Bra=nra;break ha}iy=ub+52|0;oy=k[iy>>2]|0;if((oy|0)==(qy|0))Cra=qy;else{vy=ub+56|0;Py=oy;do{oy=Py+-72|0;k[iy>>2]=oy;i[c>>0]=i[d>>0]|0;uF(c,vy,oy);Py=k[iy>>2]|0}while((Py|0)!=(qy|0));Cra=k[zy>>2]|0}OBa(Cra);yra=kra;zra=lra;Ara=mra;Bra=nra;break ha}while(0);my=Hc()|0;qy=M;if((ub|0)==(wy|0)){yra=ny;zra=1;Ara=my;Bra=qy;break}Py=wy;do{iy=Py+-24|0;vy=k[iy>>2]|0;if(vy){py=Py+-20|0;oy=k[py>>2]|0;if((oy|0)==(vy|0))Dra=vy;else{Hy=Py+-16|0;Ay=oy;do{oy=Ay+-72|0;k[py>>2]=oy;i[c>>0]=i[d>>0]|0;uF(c,Hy,oy);Ay=k[py>>2]|0}while((Ay|0)!=(vy|0));Dra=k[iy>>2]|0}OBa(Dra)}Py=Py+-72|0}while((Py|0)!=(ub|0));yra=ny;zra=1;Ara=my;Bra=qy}while(0);if((ug|0)==3591){yra=ix;zra=1;Ara=ly;Bra=ky}by=k[Xx>>2]|0;if((by|0)==(qb|0)){Sf[k[(k[qb>>2]|0)+16>>2]&2047](qb);cy=yra;dy=zra;ey=Ara;fy=Bra;break}if(!by){cy=yra;dy=zra;ey=Ara;fy=Bra;break}Sf[k[(k[by>>2]|0)+20>>2]&2047](by);cy=yra;dy=zra;ey=Ara;fy=Bra}while(0);Xx=rb+192|0;$x=k[Xx>>2]|0;if($x){Yx=rb+196|0;ay=k[Yx>>2]|0;if((ay|0)==($x|0))Era=$x;else{Rx=rb+200|0;Tx=ay;do{ay=Tx+-72|0;k[Yx>>2]=ay;i[c>>0]=i[d>>0]|0;uF(c,Rx,ay);Tx=k[Yx>>2]|0}while((Tx|0)!=($x|0));Era=k[Xx>>2]|0}OBa(Era)}$x=rb+120|0;Tx=k[$x>>2]|0;if(Tx){Yx=rb+124|0;Rx=k[Yx>>2]|0;if((Rx|0)==(Tx|0))Fra=Tx;else{ay=rb+128|0;Sx=Rx;do{Rx=Sx+-72|0;k[Yx>>2]=Rx;i[c>>0]=i[d>>0]|0;uF(c,ay,Rx);Sx=k[Yx>>2]|0}while((Sx|0)!=(Tx|0));Fra=k[$x>>2]|0}OBa(Fra)}Tx=rb+48|0;Sx=k[Tx>>2]|0;if(!Sx){Ex=cy;Fx=dy;Gx=ey;Hx=fy;break ga}Yx=rb+52|0;ay=k[Yx>>2]|0;if((ay|0)==(Sx|0))Gra=Sx;else{Xx=rb+56|0;Rx=ay;do{ay=Rx+-72|0;k[Yx>>2]=ay;i[c>>0]=i[d>>0]|0;uF(c,Xx,ay);Rx=k[Yx>>2]|0}while((Rx|0)!=(Sx|0));Gra=k[Tx>>2]|0}OBa(Gra);Ex=cy;Fx=dy;Gx=ey;Hx=fy;break ga}while(0);Kx=rb+48|0;Jx=k[Kx>>2]|0;if(!Jx){Ex=ix;Fx=1;Gx=Px;Hx=Qx;break}Mx=rb+52|0;Lx=k[Mx>>2]|0;if((Lx|0)==(Jx|0))Hra=Jx;else{Ix=rb+56|0;Dx=Lx;do{Lx=Dx+-72|0;k[Mx>>2]=Lx;i[c>>0]=i[d>>0]|0;uF(c,Ix,Lx);Dx=k[Mx>>2]|0}while((Dx|0)!=(Jx|0));Hra=k[Kx>>2]|0}OBa(Hra);Ex=ix;Fx=1;Gx=Px;Hx=Qx}while(0);vx=nb+48|0;Bx=k[vx>>2]|0;if(!Bx){wx=Ex;xx=Fx;yx=Gx;zx=Hx;break}Ax=nb+52|0;Cx=k[Ax>>2]|0;if((Cx|0)==(Bx|0))Ira=Bx;else{Jx=nb+56|0;Dx=Cx;do{Cx=Dx+-72|0;k[Ax>>2]=Cx;i[c>>0]=i[d>>0]|0;uF(c,Jx,Cx);Dx=k[Ax>>2]|0}while((Dx|0)!=(Bx|0));Ira=k[vx>>2]|0}OBa(Ira);wx=Ex;xx=Fx;yx=Gx;zx=Hx}while(0);ux=k[ob>>2]|0;if(!ux){Jra=wx;Kra=xx;Lra=yx;Mra=zx;break fa}lx=k[qx>>2]|0;if((lx|0)==(ux|0))Nra=ux;else{nx=lx;while(1){lx=nx+-72|0;k[qx>>2]=lx;px=nx+-24|0;Bx=k[px>>2]|0;if(!Bx)Ora=lx;else{Dx=nx+-20|0;Ax=k[Dx>>2]|0;if((Ax|0)==(Bx|0)){Pra=lx;Qra=Bx}else{lx=nx+-16|0;Jx=Ax;do{Ax=Jx+-72|0;k[Dx>>2]=Ax;i[c>>0]=i[d>>0]|0;uF(c,lx,Ax);Jx=k[Dx>>2]|0}while((Jx|0)!=(Bx|0));Pra=k[qx>>2]|0;Qra=k[px>>2]|0}OBa(Qra);Ora=Pra}if((Ora|0)==(ux|0))break;else nx=Ora}Nra=k[ob>>2]|0}OBa(Nra);Jra=wx;Kra=xx;Lra=yx;Mra=zx;break fa}while(0);mx=Hc()|0;nx=M;ux=k[ob>>2]|0;if(!ux){sx=mx;tx=nx;ug=3573;break}Bx=k[qx>>2]|0;if((Bx|0)==(ux|0))Rra=ux;else{Jx=Bx;while(1){Bx=Jx+-72|0;k[qx>>2]=Bx;Dx=Jx+-24|0;lx=k[Dx>>2]|0;if(!lx)Sra=Bx;else{vx=Jx+-20|0;Ax=k[vx>>2]|0;if((Ax|0)==(lx|0)){Tra=Bx;Ura=lx}else{Bx=Jx+-16|0;Cx=Ax;do{Ax=Cx+-72|0;k[vx>>2]=Ax;i[c>>0]=i[d>>0]|0;uF(c,Bx,Ax);Cx=k[vx>>2]|0}while((Cx|0)!=(lx|0));Tra=k[qx>>2]|0;Ura=k[Dx>>2]|0}OBa(Ura);Sra=Tra}if((Sra|0)==(ux|0))break;else Jx=Sra}Rra=k[ob>>2]|0}OBa(Rra);sx=mx;tx=nx;ug=3573}while(0);if((ug|0)==3573){Jra=ix;Kra=1;Lra=sx;Mra=tx}qx=pb+192|0;kx=k[qx>>2]|0;if(kx){dx=pb+196|0;jx=k[dx>>2]|0;if((jx|0)==(kx|0))Vra=kx;else{Jx=pb+200|0;ux=jx;do{jx=ux+-72|0;k[dx>>2]=jx;i[c>>0]=i[d>>0]|0;uF(c,Jx,jx);ux=k[dx>>2]|0}while((ux|0)!=(kx|0));Vra=k[qx>>2]|0}OBa(Vra)}kx=pb+120|0;ux=k[kx>>2]|0;if(ux){dx=pb+124|0;Jx=k[dx>>2]|0;if((Jx|0)==(ux|0))Wra=ux;else{jx=pb+128|0;lx=Jx;do{Jx=lx+-72|0;k[dx>>2]=Jx;i[c>>0]=i[d>>0]|0;uF(c,jx,Jx);lx=k[dx>>2]|0}while((lx|0)!=(ux|0));Wra=k[kx>>2]|0}OBa(Wra)}ux=pb+48|0;lx=k[ux>>2]|0;if(!lx){Xra=Jra;Yra=Kra;Zra=Lra;_ra=Mra;break da}dx=pb+52|0;jx=k[dx>>2]|0;if((jx|0)==(lx|0))$ra=lx;else{qx=pb+56|0;Jx=jx;do{jx=Jx+-72|0;k[dx>>2]=jx;i[c>>0]=i[d>>0]|0;uF(c,qx,jx);Jx=k[dx>>2]|0}while((Jx|0)!=(lx|0));$ra=k[ux>>2]|0}OBa($ra);Xra=Jra;Yra=Kra;Zra=Lra;_ra=Mra;break da}while(0);hx=Hc()|0;lx=M;if((pb|0)==(rx|0)){Xra=ix;Yra=1;Zra=hx;_ra=lx;break}Jx=rx;do{dx=Jx+-24|0;qx=k[dx>>2]|0;if(qx){kx=Jx+-20|0;jx=k[kx>>2]|0;if((jx|0)==(qx|0))asa=qx;else{Cx=Jx+-16|0;vx=jx;do{jx=vx+-72|0;k[kx>>2]=jx;i[c>>0]=i[d>>0]|0;uF(c,Cx,jx);vx=k[kx>>2]|0}while((vx|0)!=(qx|0));asa=k[dx>>2]|0}OBa(asa)}Jx=Jx+-72|0}while((Jx|0)!=(pb|0));Xra=ix;Yra=1;Zra=hx;_ra=lx}while(0);if((ug|0)==3563){Xra=cw;Yra=1;Zra=gx;_ra=fx}Yw=k[Sw>>2]|0;if((Yw|0)==(lb|0)){Sf[k[(k[lb>>2]|0)+16>>2]&2047](lb);Zw=Xra;_w=Yra;$w=Zra;ax=_ra;break}if(!Yw){Zw=Xra;_w=Yra;$w=Zra;ax=_ra;break}Sf[k[(k[Yw>>2]|0)+20>>2]&2047](Yw);Zw=Xra;_w=Yra;$w=Zra;ax=_ra}while(0);Sw=mb+192|0;Ww=k[Sw>>2]|0;if(Ww){Tw=mb+196|0;Xw=k[Tw>>2]|0;if((Xw|0)==(Ww|0))bsa=Ww;else{Mw=mb+200|0;Ow=Xw;do{Xw=Ow+-72|0;k[Tw>>2]=Xw;i[c>>0]=i[d>>0]|0;uF(c,Mw,Xw);Ow=k[Tw>>2]|0}while((Ow|0)!=(Ww|0));bsa=k[Sw>>2]|0}OBa(bsa)}Ww=mb+120|0;Ow=k[Ww>>2]|0;if(Ow){Tw=mb+124|0;Mw=k[Tw>>2]|0;if((Mw|0)==(Ow|0))csa=Ow;else{Xw=mb+128|0;Nw=Mw;do{Mw=Nw+-72|0;k[Tw>>2]=Mw;i[c>>0]=i[d>>0]|0;uF(c,Xw,Mw);Nw=k[Tw>>2]|0}while((Nw|0)!=(Ow|0));csa=k[Ww>>2]|0}OBa(csa)}Ow=mb+48|0;Nw=k[Ow>>2]|0;if(!Nw){zw=Zw;Aw=_w;Bw=$w;Cw=ax;break ca}Tw=mb+52|0;Xw=k[Tw>>2]|0;if((Xw|0)==(Nw|0))dsa=Nw;else{Sw=mb+56|0;Mw=Xw;do{Xw=Mw+-72|0;k[Tw>>2]=Xw;i[c>>0]=i[d>>0]|0;uF(c,Sw,Xw);Mw=k[Tw>>2]|0}while((Mw|0)!=(Nw|0));dsa=k[Ow>>2]|0}OBa(dsa);zw=Zw;Aw=_w;Bw=$w;Cw=ax;break ca}while(0);Fw=mb+48|0;Ew=k[Fw>>2]|0;if(!Ew){zw=cw;Aw=1;Bw=Kw;Cw=Lw;break}Hw=mb+52|0;Gw=k[Hw>>2]|0;if((Gw|0)==(Ew|0))esa=Ew;else{Dw=mb+56|0;yw=Gw;do{Gw=yw+-72|0;k[Hw>>2]=Gw;i[c>>0]=i[d>>0]|0;uF(c,Dw,Gw);yw=k[Hw>>2]|0}while((yw|0)!=(Ew|0));esa=k[Fw>>2]|0}OBa(esa);zw=cw;Aw=1;Bw=Kw;Cw=Lw}while(0);qw=ib+48|0;ww=k[qw>>2]|0;if(!ww){rw=zw;sw=Aw;tw=Bw;uw=Cw;break}vw=ib+52|0;xw=k[vw>>2]|0;if((xw|0)==(ww|0))fsa=ww;else{Ew=ib+56|0;yw=xw;do{xw=yw+-72|0;k[vw>>2]=xw;i[c>>0]=i[d>>0]|0;uF(c,Ew,xw);yw=k[vw>>2]|0}while((yw|0)!=(ww|0));fsa=k[qw>>2]|0}OBa(fsa);rw=zw;sw=Aw;tw=Bw;uw=Cw}while(0);pw=k[jb>>2]|0;if(!pw){gsa=rw;hsa=sw;isa=tw;jsa=uw;break ba}jw=k[Yv>>2]|0;if((jw|0)==(pw|0))ksa=pw;else{ow=jw;while(1){jw=ow+-72|0;k[Yv>>2]=jw;hw=ow+-24|0;ww=k[hw>>2]|0;if(!ww)lsa=jw;else{yw=ow+-20|0;vw=k[yw>>2]|0;if((vw|0)==(ww|0)){msa=jw;nsa=ww}else{jw=ow+-16|0;Ew=vw;do{vw=Ew+-72|0;k[yw>>2]=vw;i[c>>0]=i[d>>0]|0;uF(c,jw,vw);Ew=k[yw>>2]|0}while((Ew|0)!=(ww|0));msa=k[Yv>>2]|0;nsa=k[hw>>2]|0}OBa(nsa);lsa=msa}if((lsa|0)==(pw|0))break;else ow=lsa}ksa=k[jb>>2]|0}OBa(ksa);gsa=rw;hsa=sw;isa=tw;jsa=uw;break ba}while(0);fw=Hc()|0;ow=M;pw=k[jb>>2]|0;if(!pw){mw=fw;nw=ow;ug=3545;break}ww=k[Yv>>2]|0;if((ww|0)==(pw|0))osa=pw;else{Ew=ww;while(1){ww=Ew+-72|0;k[Yv>>2]=ww;yw=Ew+-24|0;jw=k[yw>>2]|0;if(!jw)psa=ww;else{qw=Ew+-20|0;vw=k[qw>>2]|0;if((vw|0)==(jw|0)){qsa=ww;rsa=jw}else{ww=Ew+-16|0;xw=vw;do{vw=xw+-72|0;k[qw>>2]=vw;i[c>>0]=i[d>>0]|0;uF(c,ww,vw);xw=k[qw>>2]|0}while((xw|0)!=(jw|0));qsa=k[Yv>>2]|0;rsa=k[yw>>2]|0}OBa(rsa);psa=qsa}if((psa|0)==(pw|0))break;else Ew=psa}osa=k[jb>>2]|0}OBa(osa);mw=fw;nw=ow;ug=3545}while(0);if((ug|0)==3545){gsa=cw;hsa=1;isa=mw;jsa=nw}Yv=kb+192|0;kw=k[Yv>>2]|0;if(kw){gw=kb+196|0;ew=k[gw>>2]|0;if((ew|0)==(kw|0))ssa=kw;else{dw=kb+200|0;Ew=ew;do{ew=Ew+-72|0;k[gw>>2]=ew;i[c>>0]=i[d>>0]|0;uF(c,dw,ew);Ew=k[gw>>2]|0}while((Ew|0)!=(kw|0));ssa=k[Yv>>2]|0}OBa(ssa)}kw=kb+120|0;Ew=k[kw>>2]|0;if(Ew){gw=kb+124|0;dw=k[gw>>2]|0;if((dw|0)==(Ew|0))tsa=Ew;else{ew=kb+128|0;pw=dw;do{dw=pw+-72|0;k[gw>>2]=dw;i[c>>0]=i[d>>0]|0;uF(c,ew,dw);pw=k[gw>>2]|0}while((pw|0)!=(Ew|0));tsa=k[kw>>2]|0}OBa(tsa)}Ew=kb+48|0;pw=k[Ew>>2]|0;if(!pw){usa=gsa;vsa=hsa;wsa=isa;xsa=jsa;break $}gw=kb+52|0;ew=k[gw>>2]|0;if((ew|0)==(pw|0))ysa=pw;else{Yv=kb+56|0;dw=ew;do{ew=dw+-72|0;k[gw>>2]=ew;i[c>>0]=i[d>>0]|0;uF(c,Yv,ew);dw=k[gw>>2]|0}while((dw|0)!=(pw|0));ysa=k[Ew>>2]|0}OBa(ysa);usa=gsa;vsa=hsa;wsa=isa;xsa=jsa;break $}while(0);bw=Hc()|0;pw=M;if((kb|0)==(lw|0)){usa=cw;vsa=1;wsa=bw;xsa=pw;break}dw=lw;do{gw=dw+-24|0;Yv=k[gw>>2]|0;if(Yv){kw=dw+-20|0;ew=k[kw>>2]|0;if((ew|0)==(Yv|0))zsa=Yv;else{jw=dw+-16|0;xw=ew;do{ew=xw+-72|0;k[kw>>2]=ew;i[c>>0]=i[d>>0]|0;uF(c,jw,ew);xw=k[kw>>2]|0}while((xw|0)!=(Yv|0));zsa=k[gw>>2]|0}OBa(zsa)}dw=dw+-72|0}while((dw|0)!=(kb|0));usa=cw;vsa=1;wsa=bw;xsa=pw}while(0);if((ug|0)==3535){usa=iv;vsa=1;wsa=aw;xsa=$v}Tv=k[Nv>>2]|0;if((Tv|0)==(gb|0)){Sf[k[(k[gb>>2]|0)+16>>2]&2047](gb);Uv=usa;Vv=vsa;Wv=wsa;Xv=xsa;break}if(!Tv){Uv=usa;Vv=vsa;Wv=wsa;Xv=xsa;break}Sf[k[(k[Tv>>2]|0)+20>>2]&2047](Tv);Uv=usa;Vv=vsa;Wv=wsa;Xv=xsa}while(0);Nv=hb+120|0;Rv=k[Nv>>2]|0;if(Rv){Ov=hb+124|0;Sv=k[Ov>>2]|0;if((Sv|0)==(Rv|0))Asa=Rv;else{Hv=hb+128|0;Jv=Sv;do{Sv=Jv+-72|0;k[Ov>>2]=Sv;i[c>>0]=i[d>>0]|0;uF(c,Hv,Sv);Jv=k[Ov>>2]|0}while((Jv|0)!=(Rv|0));Asa=k[Nv>>2]|0}OBa(Asa)}Rv=hb+48|0;Jv=k[Rv>>2]|0;if(!Jv){Dv=Uv;Ev=Vv;Fv=Wv;Gv=Xv;break}Ov=hb+52|0;Hv=k[Ov>>2]|0;if((Hv|0)==(Jv|0))Bsa=Jv;else{Sv=hb+56|0;Iv=Hv;do{Hv=Iv+-72|0;k[Ov>>2]=Hv;i[c>>0]=i[d>>0]|0;uF(c,Sv,Hv);Iv=k[Ov>>2]|0}while((Iv|0)!=(Jv|0));Bsa=k[Rv>>2]|0}OBa(Bsa);Dv=Uv;Ev=Vv;Fv=Wv;Gv=Xv}while(0);uv=cb+48|0;Av=k[uv>>2]|0;if(!Av){vv=Dv;wv=Ev;xv=Fv;yv=Gv;break}zv=cb+52|0;Bv=k[zv>>2]|0;if((Bv|0)==(Av|0))Csa=Av;else{Jv=cb+56|0;Iv=Bv;do{Bv=Iv+-72|0;k[zv>>2]=Bv;i[c>>0]=i[d>>0]|0;uF(c,Jv,Bv);Iv=k[zv>>2]|0}while((Iv|0)!=(Av|0));Csa=k[uv>>2]|0}OBa(Csa);vv=Dv;wv=Ev;xv=Fv;yv=Gv}while(0);lv=k[db>>2]|0;if(!lv){Dsa=vv;Esa=wv;Fsa=xv;Gsa=yv;break _}pv=k[jv>>2]|0;if((pv|0)==(lv|0))Hsa=lv;else{nv=pv;while(1){pv=nv+-72|0;k[jv>>2]=pv;Av=nv+-24|0;Iv=k[Av>>2]|0;if(!Iv)Isa=pv;else{zv=nv+-20|0;Jv=k[zv>>2]|0;if((Jv|0)==(Iv|0)){Jsa=pv;Ksa=Iv}else{pv=nv+-16|0;Bv=Jv;do{Jv=Bv+-72|0;k[zv>>2]=Jv;i[c>>0]=i[d>>0]|0;uF(c,pv,Jv);Bv=k[zv>>2]|0}while((Bv|0)!=(Iv|0));Jsa=k[jv>>2]|0;Ksa=k[Av>>2]|0}OBa(Ksa);Isa=Jsa}if((Isa|0)==(lv|0))break;else nv=Isa}Hsa=k[db>>2]|0}OBa(Hsa);Dsa=vv;Esa=wv;Fsa=xv;Gsa=yv;break _}while(0);mv=Hc()|0;nv=M;lv=k[db>>2]|0;if(!lv){sv=mv;tv=nv;ug=3524;break}Iv=k[jv>>2]|0;if((Iv|0)==(lv|0))Lsa=lv;else{Bv=Iv;while(1){Iv=Bv+-72|0;k[jv>>2]=Iv;zv=Bv+-24|0;pv=k[zv>>2]|0;if(!pv)Msa=Iv;else{uv=Bv+-20|0;Jv=k[uv>>2]|0;if((Jv|0)==(pv|0)){Nsa=Iv;Osa=pv}else{Iv=Bv+-16|0;Ov=Jv;do{Jv=Ov+-72|0;k[uv>>2]=Jv;i[c>>0]=i[d>>0]|0;uF(c,Iv,Jv);Ov=k[uv>>2]|0}while((Ov|0)!=(pv|0));Nsa=k[jv>>2]|0;Osa=k[zv>>2]|0}OBa(Osa);Msa=Nsa}if((Msa|0)==(lv|0))break;else Bv=Msa}Lsa=k[db>>2]|0}OBa(Lsa);sv=mv;tv=nv;ug=3524}while(0);if((ug|0)==3524){Dsa=iv;Esa=1;Fsa=sv;Gsa=tv}jv=eb+120|0;kv=k[jv>>2]|0;if(kv){cv=eb+124|0;qv=k[cv>>2]|0;if((qv|0)==(kv|0))Psa=kv;else{Bv=eb+128|0;lv=qv;do{qv=lv+-72|0;k[cv>>2]=qv;i[c>>0]=i[d>>0]|0;uF(c,Bv,qv);lv=k[cv>>2]|0}while((lv|0)!=(kv|0));Psa=k[jv>>2]|0}OBa(Psa)}kv=eb+48|0;lv=k[kv>>2]|0;if(!lv){Qsa=Dsa;Rsa=Esa;Ssa=Fsa;Tsa=Gsa;break Y}cv=eb+52|0;Bv=k[cv>>2]|0;if((Bv|0)==(lv|0))Usa=lv;else{qv=eb+56|0;pv=Bv;do{Bv=pv+-72|0;k[cv>>2]=Bv;i[c>>0]=i[d>>0]|0;uF(c,qv,Bv);pv=k[cv>>2]|0}while((pv|0)!=(lv|0));Usa=k[kv>>2]|0}OBa(Usa);Qsa=Dsa;Rsa=Esa;Ssa=Fsa;Tsa=Gsa;break Y}while(0);hv=Hc()|0;lv=M;if((eb|0)==(rv|0)){Qsa=iv;Rsa=1;Ssa=hv;Tsa=lv;break}pv=rv;do{cv=pv+-24|0;qv=k[cv>>2]|0;if(qv){jv=pv+-20|0;Bv=k[jv>>2]|0;if((Bv|0)==(qv|0))Vsa=qv;else{Ov=pv+-16|0;uv=Bv;do{Bv=uv+-72|0;k[jv>>2]=Bv;i[c>>0]=i[d>>0]|0;uF(c,Ov,Bv);uv=k[jv>>2]|0}while((uv|0)!=(qv|0));Vsa=k[cv>>2]|0}OBa(Vsa)}pv=pv+-72|0}while((pv|0)!=(eb|0));Qsa=iv;Rsa=1;Ssa=hv;Tsa=lv}while(0);if((ug|0)==3514){Qsa=ou;Rsa=1;Ssa=gv;Tsa=fv}Zu=k[Tu>>2]|0;if((Zu|0)==(ab|0)){Sf[k[(k[ab>>2]|0)+16>>2]&2047](ab);_u=Qsa;$u=Rsa;av=Ssa;bv=Tsa;break}if(!Zu){_u=Qsa;$u=Rsa;av=Ssa;bv=Tsa;break}Sf[k[(k[Zu>>2]|0)+20>>2]&2047](Zu);_u=Qsa;$u=Rsa;av=Ssa;bv=Tsa}while(0);Tu=bb+120|0;Xu=k[Tu>>2]|0;if(Xu){Uu=bb+124|0;Yu=k[Uu>>2]|0;if((Yu|0)==(Xu|0))Wsa=Xu;else{Nu=bb+128|0;Pu=Yu;do{Yu=Pu+-72|0;k[Uu>>2]=Yu;i[c>>0]=i[d>>0]|0;uF(c,Nu,Yu);Pu=k[Uu>>2]|0}while((Pu|0)!=(Xu|0));Wsa=k[Tu>>2]|0}OBa(Wsa)}Xu=bb+48|0;Pu=k[Xu>>2]|0;if(!Pu){Ju=_u;Ku=$u;Lu=av;Mu=bv;break}Uu=bb+52|0;Nu=k[Uu>>2]|0;if((Nu|0)==(Pu|0))Xsa=Pu;else{Yu=bb+56|0;Ou=Nu;do{Nu=Ou+-72|0;k[Uu>>2]=Nu;i[c>>0]=i[d>>0]|0;uF(c,Yu,Nu);Ou=k[Uu>>2]|0}while((Ou|0)!=(Pu|0));Xsa=k[Xu>>2]|0}OBa(Xsa);Ju=_u;Ku=$u;Lu=av;Mu=bv}while(0);Au=Za+48|0;Gu=k[Au>>2]|0;if(!Gu){Bu=Ju;Cu=Ku;Du=Lu;Eu=Mu;break}Fu=Za+52|0;Hu=k[Fu>>2]|0;if((Hu|0)==(Gu|0))Ysa=Gu;else{Pu=Za+56|0;Ou=Hu;do{Hu=Ou+-72|0;k[Fu>>2]=Hu;i[c>>0]=i[d>>0]|0;uF(c,Pu,Hu);Ou=k[Fu>>2]|0}while((Ou|0)!=(Gu|0));Ysa=k[Au>>2]|0}OBa(Ysa);Bu=Ju;Cu=Ku;Du=Lu;Eu=Mu}while(0);ru=k[_a>>2]|0;if(!ru){Zsa=Bu;_sa=Cu;$sa=Du;ata=Eu;break X}vu=k[pu>>2]|0;if((vu|0)==(ru|0))bta=ru;else{tu=vu;while(1){vu=tu+-72|0;k[pu>>2]=vu;Gu=tu+-24|0;Ou=k[Gu>>2]|0;if(!Ou)cta=vu;else{Fu=tu+-20|0;Pu=k[Fu>>2]|0;if((Pu|0)==(Ou|0)){dta=vu;eta=Ou}else{vu=tu+-16|0;Hu=Pu;do{Pu=Hu+-72|0;k[Fu>>2]=Pu;i[c>>0]=i[d>>0]|0;uF(c,vu,Pu);Hu=k[Fu>>2]|0}while((Hu|0)!=(Ou|0));dta=k[pu>>2]|0;eta=k[Gu>>2]|0}OBa(eta);cta=dta}if((cta|0)==(ru|0))break;else tu=cta}bta=k[_a>>2]|0}OBa(bta);Zsa=Bu;_sa=Cu;$sa=Du;ata=Eu;break X}while(0);su=Hc()|0;tu=M;ru=k[_a>>2]|0;if(!ru){yu=su;zu=tu;ug=3503;break}Ou=k[pu>>2]|0;if((Ou|0)==(ru|0))fta=ru;else{Hu=Ou;while(1){Ou=Hu+-72|0;k[pu>>2]=Ou;Fu=Hu+-24|0;vu=k[Fu>>2]|0;if(!vu)gta=Ou;else{Au=Hu+-20|0;Pu=k[Au>>2]|0;if((Pu|0)==(vu|0)){hta=Ou;ita=vu}else{Ou=Hu+-16|0;Uu=Pu;do{Pu=Uu+-72|0;k[Au>>2]=Pu;i[c>>0]=i[d>>0]|0;uF(c,Ou,Pu);Uu=k[Au>>2]|0}while((Uu|0)!=(vu|0));hta=k[pu>>2]|0;ita=k[Fu>>2]|0}OBa(ita);gta=hta}if((gta|0)==(ru|0))break;else Hu=gta}fta=k[_a>>2]|0}OBa(fta);yu=su;zu=tu;ug=3503}while(0);if((ug|0)==3503){Zsa=ou;_sa=1;$sa=yu;ata=zu}pu=$a+120|0;qu=k[pu>>2]|0;if(qu){iu=$a+124|0;wu=k[iu>>2]|0;if((wu|0)==(qu|0))jta=qu;else{Hu=$a+128|0;ru=wu;do{wu=ru+-72|0;k[iu>>2]=wu;i[c>>0]=i[d>>0]|0;uF(c,Hu,wu);ru=k[iu>>2]|0}while((ru|0)!=(qu|0));jta=k[pu>>2]|0}OBa(jta)}qu=$a+48|0;ru=k[qu>>2]|0;if(!ru){kta=Zsa;lta=_sa;mta=$sa;nta=ata;break V}iu=$a+52|0;Hu=k[iu>>2]|0;if((Hu|0)==(ru|0))ota=ru;else{wu=$a+56|0;vu=Hu;do{Hu=vu+-72|0;k[iu>>2]=Hu;i[c>>0]=i[d>>0]|0;uF(c,wu,Hu);vu=k[iu>>2]|0}while((vu|0)!=(ru|0));ota=k[qu>>2]|0}OBa(ota);kta=Zsa;lta=_sa;mta=$sa;nta=ata;break V}while(0);nu=Hc()|0;ru=M;if(($a|0)==(xu|0)){kta=ou;lta=1;mta=nu;nta=ru;break}vu=xu;do{iu=vu+-24|0;wu=k[iu>>2]|0;if(wu){pu=vu+-20|0;Hu=k[pu>>2]|0;if((Hu|0)==(wu|0))pta=wu;else{Uu=vu+-16|0;Au=Hu;do{Hu=Au+-72|0;k[pu>>2]=Hu;i[c>>0]=i[d>>0]|0;uF(c,Uu,Hu);Au=k[pu>>2]|0}while((Au|0)!=(wu|0));pta=k[iu>>2]|0}OBa(pta)}vu=vu+-72|0}while((vu|0)!=($a|0));kta=ou;lta=1;mta=nu;nta=ru}while(0);if((ug|0)==3493){kta=ut;lta=1;mta=mu;nta=lu}du=k[Zt>>2]|0;if((du|0)==(Xa|0)){Sf[k[(k[Xa>>2]|0)+16>>2]&2047](Xa);eu=kta;fu=lta;gu=mta;hu=nta;break}if(!du){eu=kta;fu=lta;gu=mta;hu=nta;break}Sf[k[(k[du>>2]|0)+20>>2]&2047](du);eu=kta;fu=lta;gu=mta;hu=nta}while(0);Zt=Ya+120|0;bu=k[Zt>>2]|0;if(bu){_t=Ya+124|0;cu=k[_t>>2]|0;if((cu|0)==(bu|0))qta=bu;else{Tt=Ya+128|0;Vt=cu;do{cu=Vt+-72|0;k[_t>>2]=cu;i[c>>0]=i[d>>0]|0;uF(c,Tt,cu);Vt=k[_t>>2]|0}while((Vt|0)!=(bu|0));qta=k[Zt>>2]|0}OBa(qta)}bu=Ya+48|0;Vt=k[bu>>2]|0;if(!Vt){Pt=eu;Qt=fu;Rt=gu;St=hu;break}_t=Ya+52|0;Tt=k[_t>>2]|0;if((Tt|0)==(Vt|0))rta=Vt;else{cu=Ya+56|0;Ut=Tt;do{Tt=Ut+-72|0;k[_t>>2]=Tt;i[c>>0]=i[d>>0]|0;uF(c,cu,Tt);Ut=k[_t>>2]|0}while((Ut|0)!=(Vt|0));rta=k[bu>>2]|0}OBa(rta);Pt=eu;Qt=fu;Rt=gu;St=hu}while(0);Gt=Ua+48|0;Mt=k[Gt>>2]|0;if(!Mt){Ht=Pt;It=Qt;Jt=Rt;Kt=St;break}Lt=Ua+52|0;Nt=k[Lt>>2]|0;if((Nt|0)==(Mt|0))sta=Mt;else{Vt=Ua+56|0;Ut=Nt;do{Nt=Ut+-72|0;k[Lt>>2]=Nt;i[c>>0]=i[d>>0]|0;uF(c,Vt,Nt);Ut=k[Lt>>2]|0}while((Ut|0)!=(Mt|0));sta=k[Gt>>2]|0}OBa(sta);Ht=Pt;It=Qt;Jt=Rt;Kt=St}while(0);xt=k[Va>>2]|0;if(!xt){tta=Ht;uta=It;vta=Jt;wta=Kt;break U}Bt=k[vt>>2]|0;if((Bt|0)==(xt|0))xta=xt;else{zt=Bt;while(1){Bt=zt+-72|0;k[vt>>2]=Bt;Mt=zt+-24|0;Ut=k[Mt>>2]|0;if(!Ut)yta=Bt;else{Lt=zt+-20|0;Vt=k[Lt>>2]|0;if((Vt|0)==(Ut|0)){zta=Bt;Ata=Ut}else{Bt=zt+-16|0;Nt=Vt;do{Vt=Nt+-72|0;k[Lt>>2]=Vt;i[c>>0]=i[d>>0]|0;uF(c,Bt,Vt);Nt=k[Lt>>2]|0}while((Nt|0)!=(Ut|0));zta=k[vt>>2]|0;Ata=k[Mt>>2]|0}OBa(Ata);yta=zta}if((yta|0)==(xt|0))break;else zt=yta}xta=k[Va>>2]|0}OBa(xta);tta=Ht;uta=It;vta=Jt;wta=Kt;break U}while(0);yt=Hc()|0;zt=M;xt=k[Va>>2]|0;if(!xt){Et=yt;Ft=zt;ug=3482;break}Ut=k[vt>>2]|0;if((Ut|0)==(xt|0))Bta=xt;else{Nt=Ut;while(1){Ut=Nt+-72|0;k[vt>>2]=Ut;Lt=Nt+-24|0;Bt=k[Lt>>2]|0;if(!Bt)Cta=Ut;else{Gt=Nt+-20|0;Vt=k[Gt>>2]|0;if((Vt|0)==(Bt|0)){Dta=Ut;Eta=Bt}else{Ut=Nt+-16|0;_t=Vt;do{Vt=_t+-72|0;k[Gt>>2]=Vt;i[c>>0]=i[d>>0]|0;uF(c,Ut,Vt);_t=k[Gt>>2]|0}while((_t|0)!=(Bt|0));Dta=k[vt>>2]|0;Eta=k[Lt>>2]|0}OBa(Eta);Cta=Dta}if((Cta|0)==(xt|0))break;else Nt=Cta}Bta=k[Va>>2]|0}OBa(Bta);Et=yt;Ft=zt;ug=3482}while(0);if((ug|0)==3482){tta=ut;uta=1;vta=Et;wta=Ft}vt=Wa+120|0;wt=k[vt>>2]|0;if(wt){ot=Wa+124|0;Ct=k[ot>>2]|0;if((Ct|0)==(wt|0))Fta=wt;else{Nt=Wa+128|0;xt=Ct;do{Ct=xt+-72|0;k[ot>>2]=Ct;i[c>>0]=i[d>>0]|0;uF(c,Nt,Ct);xt=k[ot>>2]|0}while((xt|0)!=(wt|0));Fta=k[vt>>2]|0}OBa(Fta)}wt=Wa+48|0;xt=k[wt>>2]|0;if(!xt){Gta=tta;Hta=uta;Ita=vta;Jta=wta;break S}ot=Wa+52|0;Nt=k[ot>>2]|0;if((Nt|0)==(xt|0))Kta=xt;else{Ct=Wa+56|0;Bt=Nt;do{Nt=Bt+-72|0;k[ot>>2]=Nt;i[c>>0]=i[d>>0]|0;uF(c,Ct,Nt);Bt=k[ot>>2]|0}while((Bt|0)!=(xt|0));Kta=k[wt>>2]|0}OBa(Kta);Gta=tta;Hta=uta;Ita=vta;Jta=wta;break S}while(0);tt=Hc()|0;xt=M;if((Wa|0)==(Dt|0)){Gta=ut;Hta=1;Ita=tt;Jta=xt;break}Bt=Dt;do{ot=Bt+-24|0;Ct=k[ot>>2]|0;if(Ct){vt=Bt+-20|0;Nt=k[vt>>2]|0;if((Nt|0)==(Ct|0))Lta=Ct;else{_t=Bt+-16|0;Gt=Nt;do{Nt=Gt+-72|0;k[vt>>2]=Nt;i[c>>0]=i[d>>0]|0;uF(c,_t,Nt);Gt=k[vt>>2]|0}while((Gt|0)!=(Ct|0));Lta=k[ot>>2]|0}OBa(Lta)}Bt=Bt+-72|0}while((Bt|0)!=(Wa|0));Gta=ut;Hta=1;Ita=tt;Jta=xt}while(0);if((ug|0)==3472){Gta=As;Hta=1;Ita=st;Jta=rt}jt=k[dt>>2]|0;if((jt|0)==(Ra|0)){Sf[k[(k[Ra>>2]|0)+16>>2]&2047](Ra);kt=Gta;lt=Hta;mt=Ita;nt=Jta;break}if(!jt){kt=Gta;lt=Hta;mt=Ita;nt=Jta;break}Sf[k[(k[jt>>2]|0)+20>>2]&2047](jt);kt=Gta;lt=Hta;mt=Ita;nt=Jta}while(0);dt=Sa+120|0;ht=k[dt>>2]|0;if(ht){et=Sa+124|0;it=k[et>>2]|0;if((it|0)==(ht|0))Mta=ht;else{Zs=Sa+128|0;$s=it;do{it=$s+-72|0;k[et>>2]=it;i[c>>0]=i[d>>0]|0;uF(c,Zs,it);$s=k[et>>2]|0}while(($s|0)!=(ht|0));Mta=k[dt>>2]|0}OBa(Mta)}ht=Sa+48|0;$s=k[ht>>2]|0;if(!$s){Vs=kt;Ws=lt;Xs=mt;Ys=nt;break}et=Sa+52|0;Zs=k[et>>2]|0;if((Zs|0)==($s|0))Nta=$s;else{it=Sa+56|0;_s=Zs;do{Zs=_s+-72|0;k[et>>2]=Zs;i[c>>0]=i[d>>0]|0;uF(c,it,Zs);_s=k[et>>2]|0}while((_s|0)!=($s|0));Nta=k[ht>>2]|0}OBa(Nta);Vs=kt;Ws=lt;Xs=mt;Ys=nt}while(0);Ms=Oa+48|0;Ss=k[Ms>>2]|0;if(!Ss){Ns=Vs;Os=Ws;Ps=Xs;Qs=Ys;break}Rs=Oa+52|0;Ts=k[Rs>>2]|0;if((Ts|0)==(Ss|0))Ota=Ss;else{$s=Oa+56|0;_s=Ts;do{Ts=_s+-72|0;k[Rs>>2]=Ts;i[c>>0]=i[d>>0]|0;uF(c,$s,Ts);_s=k[Rs>>2]|0}while((_s|0)!=(Ss|0));Ota=k[Ms>>2]|0}OBa(Ota);Ns=Vs;Os=Ws;Ps=Xs;Qs=Ys}while(0);Ds=k[Pa>>2]|0;if(!Ds){Pta=Ns;Qta=Os;Rta=Ps;Sta=Qs;break R}Hs=k[Bs>>2]|0;if((Hs|0)==(Ds|0))Tta=Ds;else{Fs=Hs;while(1){Hs=Fs+-72|0;k[Bs>>2]=Hs;Ss=Fs+-24|0;_s=k[Ss>>2]|0;if(!_s)Uta=Hs;else{Rs=Fs+-20|0;$s=k[Rs>>2]|0;if(($s|0)==(_s|0)){Vta=Hs;Wta=_s}else{Hs=Fs+-16|0;Ts=$s;do{$s=Ts+-72|0;k[Rs>>2]=$s;i[c>>0]=i[d>>0]|0;uF(c,Hs,$s);Ts=k[Rs>>2]|0}while((Ts|0)!=(_s|0));Vta=k[Bs>>2]|0;Wta=k[Ss>>2]|0}OBa(Wta);Uta=Vta}if((Uta|0)==(Ds|0))break;else Fs=Uta}Tta=k[Pa>>2]|0}OBa(Tta);Pta=Ns;Qta=Os;Rta=Ps;Sta=Qs;break R}while(0);Es=Hc()|0;Fs=M;Ds=k[Pa>>2]|0;if(!Ds){Ks=Es;Ls=Fs;ug=3461;break}_s=k[Bs>>2]|0;if((_s|0)==(Ds|0))Xta=Ds;else{Ts=_s;while(1){_s=Ts+-72|0;k[Bs>>2]=_s;Rs=Ts+-24|0;Hs=k[Rs>>2]|0;if(!Hs)Yta=_s;else{Ms=Ts+-20|0;$s=k[Ms>>2]|0;if(($s|0)==(Hs|0)){Zta=_s;_ta=Hs}else{_s=Ts+-16|0;et=$s;do{$s=et+-72|0;k[Ms>>2]=$s;i[c>>0]=i[d>>0]|0;uF(c,_s,$s);et=k[Ms>>2]|0}while((et|0)!=(Hs|0));Zta=k[Bs>>2]|0;_ta=k[Rs>>2]|0}OBa(_ta);Yta=Zta}if((Yta|0)==(Ds|0))break;else Ts=Yta}Xta=k[Pa>>2]|0}OBa(Xta);Ks=Es;Ls=Fs;ug=3461}while(0);if((ug|0)==3461){Pta=As;Qta=1;Rta=Ks;Sta=Ls}Bs=Qa+120|0;Cs=k[Bs>>2]|0;if(Cs){ws=Qa+124|0;Is=k[ws>>2]|0;if((Is|0)==(Cs|0))$ta=Cs;else{Ts=Qa+128|0;Ds=Is;do{Is=Ds+-72|0;k[ws>>2]=Is;i[c>>0]=i[d>>0]|0;uF(c,Ts,Is);Ds=k[ws>>2]|0}while((Ds|0)!=(Cs|0));$ta=k[Bs>>2]|0}OBa($ta)}Cs=Qa+48|0;Ds=k[Cs>>2]|0;if(!Ds){aua=Pta;bua=Qta;cua=Rta;dua=Sta;break P}ws=Qa+52|0;Ts=k[ws>>2]|0;if((Ts|0)==(Ds|0))eua=Ds;else{Is=Qa+56|0;Hs=Ts;do{Ts=Hs+-72|0;k[ws>>2]=Ts;i[c>>0]=i[d>>0]|0;uF(c,Is,Ts);Hs=k[ws>>2]|0}while((Hs|0)!=(Ds|0));eua=k[Cs>>2]|0}OBa(eua);aua=Pta;bua=Qta;cua=Rta;dua=Sta;break P}while(0);zs=Hc()|0;Ds=M;if((Qa|0)==(Js|0)){aua=As;bua=1;cua=zs;dua=Ds;break}Hs=Js;do{ws=Hs+-24|0;Is=k[ws>>2]|0;if(Is){Bs=Hs+-20|0;Ts=k[Bs>>2]|0;if((Ts|0)==(Is|0))fua=Is;else{et=Hs+-16|0;Ms=Ts;do{Ts=Ms+-72|0;k[Bs>>2]=Ts;i[c>>0]=i[d>>0]|0;uF(c,et,Ts);Ms=k[Bs>>2]|0}while((Ms|0)!=(Is|0));fua=k[ws>>2]|0}OBa(fua)}Hs=Hs+-72|0}while((Hs|0)!=(Qa|0));aua=As;bua=1;cua=zs;dua=Ds}while(0);if((ug|0)==3451){aua=Pr;bua=1;cua=ys;dua=xs}qs=k[hs>>2]|0;if((qs|0)==(Ma|0)){Sf[k[(k[Ma>>2]|0)+16>>2]&2047](Ma);rs=aua;ss=bua;ts=cua;us=dua;break}if(!qs){rs=aua;ss=bua;ts=cua;us=dua;break}Sf[k[(k[qs>>2]|0)+20>>2]&2047](qs);rs=aua;ss=bua;ts=cua;us=dua}while(0);hs=Na+48|0;os=k[hs>>2]|0;if(!os){is=rs;js=ss;ks=ts;ls=us;break}ns=Na+52|0;ms=k[ns>>2]|0;if((ms|0)==(os|0))gua=os;else{ps=Na+56|0;qs=ms;do{ms=qs+-72|0;k[ns>>2]=ms;i[c>>0]=i[d>>0]|0;uF(c,ps,ms);qs=k[ns>>2]|0}while((qs|0)!=(os|0));gua=k[hs>>2]|0}OBa(gua);is=rs;js=ss;ks=ts;ls=us}while(0);Tr=Ja+48|0;Ur=k[Tr>>2]|0;if(!Ur){cs=is;ds=js;es=ks;fs=ls;break}Wr=Ja+52|0;gs=k[Wr>>2]|0;if((gs|0)==(Ur|0))hua=Ur;else{os=Ja+56|0;qs=gs;do{gs=qs+-72|0;k[Wr>>2]=gs;i[c>>0]=i[d>>0]|0;uF(c,os,gs);qs=k[Wr>>2]|0}while((qs|0)!=(Ur|0));hua=k[Tr>>2]|0}OBa(hua);cs=is;ds=js;es=ks;fs=ls}while(0);Rr=k[Ka>>2]|0;if(!Rr){iua=cs;jua=ds;kua=es;lua=fs;break}Jr=k[Sr>>2]|0;if((Jr|0)==(Rr|0))mua=Rr;else{Qr=Jr;while(1){Jr=Qr+-72|0;k[Sr>>2]=Jr;Ur=Qr+-24|0;qs=k[Ur>>2]|0;if(!qs)nua=Jr;else{Wr=Qr+-20|0;os=k[Wr>>2]|0;if((os|0)==(qs|0)){oua=Jr;pua=qs}else{Jr=Qr+-16|0;gs=os;do{os=gs+-72|0;k[Wr>>2]=os;i[c>>0]=i[d>>0]|0;uF(c,Jr,os);gs=k[Wr>>2]|0}while((gs|0)!=(qs|0));oua=k[Sr>>2]|0;pua=k[Ur>>2]|0}OBa(pua);nua=oua}if((nua|0)==(Rr|0))break;else Qr=nua}mua=k[Ka>>2]|0}OBa(mua);iua=cs;jua=ds;kua=es;lua=fs}while(0);if((ug|0)==3446){iua=Pr;jua=1;kua=as;lua=bs}Sr=La+48|0;Xr=k[Sr>>2]|0;if(!Xr){Yr=iua;Zr=jua;_r=kua;$r=lua;break}Or=La+52|0;Qr=k[Or>>2]|0;if((Qr|0)==(Xr|0))qua=Xr;else{Rr=La+56|0;qs=Qr;do{Qr=qs+-72|0;k[Or>>2]=Qr;i[c>>0]=i[d>>0]|0;uF(c,Rr,Qr);qs=k[Or>>2]|0}while((qs|0)!=(Xr|0));qua=k[Sr>>2]|0}OBa(qua);Yr=iua;Zr=jua;_r=kua;$r=lua}while(0);if((ug|0)==3444){Yr=Vq;Zr=1;_r=Nr;$r=Mr}Er=k[yr>>2]|0;if((Er|0)==(Ha|0)){Sf[k[(k[Ha>>2]|0)+16>>2]&2047](Ha);Fr=Yr;Gr=Zr;Hr=_r;Ir=$r;break}if(!Er){Fr=Yr;Gr=Zr;Hr=_r;Ir=$r;break}Sf[k[(k[Er>>2]|0)+20>>2]&2047](Er);Fr=Yr;Gr=Zr;Hr=_r;Ir=$r}while(0);yr=Ia+120|0;Cr=k[yr>>2]|0;if(Cr){zr=Ia+124|0;Dr=k[zr>>2]|0;if((Dr|0)==(Cr|0))rua=Cr;else{sr=Ia+128|0;ur=Dr;do{Dr=ur+-72|0;k[zr>>2]=Dr;i[c>>0]=i[d>>0]|0;uF(c,sr,Dr);ur=k[zr>>2]|0}while((ur|0)!=(Cr|0));rua=k[yr>>2]|0}OBa(rua)}Cr=Ia+48|0;ur=k[Cr>>2]|0;if(!ur){or=Fr;pr=Gr;qr=Hr;rr=Ir;break}zr=Ia+52|0;sr=k[zr>>2]|0;if((sr|0)==(ur|0))sua=ur;else{Dr=Ia+56|0;tr=sr;do{sr=tr+-72|0;k[zr>>2]=sr;i[c>>0]=i[d>>0]|0;uF(c,Dr,sr);tr=k[zr>>2]|0}while((tr|0)!=(ur|0));sua=k[Cr>>2]|0}OBa(sua);or=Fr;pr=Gr;qr=Hr;rr=Ir}while(0);fr=Ea+48|0;lr=k[fr>>2]|0;if(!lr){gr=or;hr=pr;ir=qr;jr=rr;break}kr=Ea+52|0;mr=k[kr>>2]|0;if((mr|0)==(lr|0))tua=lr;else{ur=Ea+56|0;tr=mr;do{mr=tr+-72|0;k[kr>>2]=mr;i[c>>0]=i[d>>0]|0;uF(c,ur,mr);tr=k[kr>>2]|0}while((tr|0)!=(lr|0));tua=k[fr>>2]|0}OBa(tua);gr=or;hr=pr;ir=qr;jr=rr}while(0);Yq=k[Fa>>2]|0;if(!Yq){uua=gr;vua=hr;wua=ir;xua=jr;break M}ar=k[Wq>>2]|0;if((ar|0)==(Yq|0))yua=Yq;else{_q=ar;while(1){ar=_q+-72|0;k[Wq>>2]=ar;lr=_q+-24|0;tr=k[lr>>2]|0;if(!tr)zua=ar;else{kr=_q+-20|0;ur=k[kr>>2]|0;if((ur|0)==(tr|0)){Aua=ar;Bua=tr}else{ar=_q+-16|0;mr=ur;do{ur=mr+-72|0;k[kr>>2]=ur;i[c>>0]=i[d>>0]|0;uF(c,ar,ur);mr=k[kr>>2]|0}while((mr|0)!=(tr|0));Aua=k[Wq>>2]|0;Bua=k[lr>>2]|0}OBa(Bua);zua=Aua}if((zua|0)==(Yq|0))break;else _q=zua}yua=k[Fa>>2]|0}OBa(yua);uua=gr;vua=hr;wua=ir;xua=jr;break M}while(0);Zq=Hc()|0;_q=M;Yq=k[Fa>>2]|0;if(!Yq){dr=Zq;er=_q;ug=3433;break}tr=k[Wq>>2]|0;if((tr|0)==(Yq|0))Cua=Yq;else{mr=tr;while(1){tr=mr+-72|0;k[Wq>>2]=tr;kr=mr+-24|0;ar=k[kr>>2]|0;if(!ar)Dua=tr;else{fr=mr+-20|0;ur=k[fr>>2]|0;if((ur|0)==(ar|0)){Eua=tr;Fua=ar}else{tr=mr+-16|0;zr=ur;do{ur=zr+-72|0;k[fr>>2]=ur;i[c>>0]=i[d>>0]|0;uF(c,tr,ur);zr=k[fr>>2]|0}while((zr|0)!=(ar|0));Eua=k[Wq>>2]|0;Fua=k[kr>>2]|0}OBa(Fua);Dua=Eua}if((Dua|0)==(Yq|0))break;else mr=Dua}Cua=k[Fa>>2]|0}OBa(Cua);dr=Zq;er=_q;ug=3433}while(0);if((ug|0)==3433){uua=Vq;vua=1;wua=dr;xua=er}Wq=Ga+120|0;Xq=k[Wq>>2]|0;if(Xq){Pq=Ga+124|0;br=k[Pq>>2]|0;if((br|0)==(Xq|0))Gua=Xq;else{mr=Ga+128|0;Yq=br;do{br=Yq+-72|0;k[Pq>>2]=br;i[c>>0]=i[d>>0]|0;uF(c,mr,br);Yq=k[Pq>>2]|0}while((Yq|0)!=(Xq|0));Gua=k[Wq>>2]|0}OBa(Gua)}Xq=Ga+48|0;Yq=k[Xq>>2]|0;if(!Yq){Hua=uua;Iua=vua;Jua=wua;Kua=xua;break K}Pq=Ga+52|0;mr=k[Pq>>2]|0;if((mr|0)==(Yq|0))Lua=Yq;else{br=Ga+56|0;ar=mr;do{mr=ar+-72|0;k[Pq>>2]=mr;i[c>>0]=i[d>>0]|0;uF(c,br,mr);ar=k[Pq>>2]|0}while((ar|0)!=(Yq|0));Lua=k[Xq>>2]|0}OBa(Lua);Hua=uua;Iua=vua;Jua=wua;Kua=xua;break K}while(0);Uq=Hc()|0;Yq=M;if((Ga|0)==(cr|0)){Hua=Vq;Iua=1;Jua=Uq;Kua=Yq;break}ar=cr;do{Pq=ar+-24|0;br=k[Pq>>2]|0;if(br){Wq=ar+-20|0;mr=k[Wq>>2]|0;if((mr|0)==(br|0))Mua=br;else{zr=ar+-16|0;fr=mr;do{mr=fr+-72|0;k[Wq>>2]=mr;i[c>>0]=i[d>>0]|0;uF(c,zr,mr);fr=k[Wq>>2]|0}while((fr|0)!=(br|0));Mua=k[Pq>>2]|0}OBa(Mua)}ar=ar+-72|0}while((ar|0)!=(Ga|0));Hua=Vq;Iua=1;Jua=Uq;Kua=Yq}while(0);if((ug|0)==3423){Hua=$p;Iua=1;Jua=Tq;Kua=Sq}Kq=k[Eq>>2]|0;if((Kq|0)==(Ca|0)){Sf[k[(k[Ca>>2]|0)+16>>2]&2047](Ca);Lq=Hua;Mq=Iua;Nq=Jua;Oq=Kua;break}if(!Kq){Lq=Hua;Mq=Iua;Nq=Jua;Oq=Kua;break}Sf[k[(k[Kq>>2]|0)+20>>2]&2047](Kq);Lq=Hua;Mq=Iua;Nq=Jua;Oq=Kua}while(0);Eq=Da+120|0;Iq=k[Eq>>2]|0;if(Iq){Fq=Da+124|0;Jq=k[Fq>>2]|0;if((Jq|0)==(Iq|0))Nua=Iq;else{yq=Da+128|0;Aq=Jq;do{Jq=Aq+-72|0;k[Fq>>2]=Jq;i[c>>0]=i[d>>0]|0;uF(c,yq,Jq);Aq=k[Fq>>2]|0}while((Aq|0)!=(Iq|0));Nua=k[Eq>>2]|0}OBa(Nua)}Iq=Da+48|0;Aq=k[Iq>>2]|0;if(!Aq){uq=Lq;vq=Mq;wq=Nq;xq=Oq;break}Fq=Da+52|0;yq=k[Fq>>2]|0;if((yq|0)==(Aq|0))Oua=Aq;else{Jq=Da+56|0;zq=yq;do{yq=zq+-72|0;k[Fq>>2]=yq;i[c>>0]=i[d>>0]|0;uF(c,Jq,yq);zq=k[Fq>>2]|0}while((zq|0)!=(Aq|0));Oua=k[Iq>>2]|0}OBa(Oua);uq=Lq;vq=Mq;wq=Nq;xq=Oq}while(0);lq=ya+48|0;rq=k[lq>>2]|0;if(!rq){mq=uq;nq=vq;oq=wq;pq=xq;break}qq=ya+52|0;sq=k[qq>>2]|0;if((sq|0)==(rq|0))Pua=rq;else{Aq=ya+56|0;zq=sq;do{sq=zq+-72|0;k[qq>>2]=sq;i[c>>0]=i[d>>0]|0;uF(c,Aq,sq);zq=k[qq>>2]|0}while((zq|0)!=(rq|0));Pua=k[lq>>2]|0}OBa(Pua);mq=uq;nq=vq;oq=wq;pq=xq}while(0);cq=k[za>>2]|0;if(!cq){Qua=mq;Rua=nq;Sua=oq;Tua=pq;break J}gq=k[aq>>2]|0;if((gq|0)==(cq|0))Uua=cq;else{eq=gq;while(1){gq=eq+-72|0;k[aq>>2]=gq;rq=eq+-24|0;zq=k[rq>>2]|0;if(!zq)Vua=gq;else{qq=eq+-20|0;Aq=k[qq>>2]|0;if((Aq|0)==(zq|0)){Wua=gq;Xua=zq}else{gq=eq+-16|0;sq=Aq;do{Aq=sq+-72|0;k[qq>>2]=Aq;i[c>>0]=i[d>>0]|0;uF(c,gq,Aq);sq=k[qq>>2]|0}while((sq|0)!=(zq|0));Wua=k[aq>>2]|0;Xua=k[rq>>2]|0}OBa(Xua);Vua=Wua}if((Vua|0)==(cq|0))break;else eq=Vua}Uua=k[za>>2]|0}OBa(Uua);Qua=mq;Rua=nq;Sua=oq;Tua=pq;break J}while(0);dq=Hc()|0;eq=M;cq=k[za>>2]|0;if(!cq){jq=dq;kq=eq;ug=3412;break}zq=k[aq>>2]|0;if((zq|0)==(cq|0))Yua=cq;else{sq=zq;while(1){zq=sq+-72|0;k[aq>>2]=zq;qq=sq+-24|0;gq=k[qq>>2]|0;if(!gq)Zua=zq;else{lq=sq+-20|0;Aq=k[lq>>2]|0;if((Aq|0)==(gq|0)){_ua=zq;$ua=gq}else{zq=sq+-16|0;Fq=Aq;do{Aq=Fq+-72|0;k[lq>>2]=Aq;i[c>>0]=i[d>>0]|0;uF(c,zq,Aq);Fq=k[lq>>2]|0}while((Fq|0)!=(gq|0));_ua=k[aq>>2]|0;$ua=k[qq>>2]|0}OBa($ua);Zua=_ua}if((Zua|0)==(cq|0))break;else sq=Zua}Yua=k[za>>2]|0}OBa(Yua);jq=dq;kq=eq;ug=3412}while(0);if((ug|0)==3412){Qua=$p;Rua=1;Sua=jq;Tua=kq}aq=Aa+120|0;bq=k[aq>>2]|0;if(bq){Vp=Aa+124|0;hq=k[Vp>>2]|0;if((hq|0)==(bq|0))ava=bq;else{sq=Aa+128|0;cq=hq;do{hq=cq+-72|0;k[Vp>>2]=hq;i[c>>0]=i[d>>0]|0;uF(c,sq,hq);cq=k[Vp>>2]|0}while((cq|0)!=(bq|0));ava=k[aq>>2]|0}OBa(ava)}bq=Aa+48|0;cq=k[bq>>2]|0;if(!cq){bva=Qua;cva=Rua;dva=Sua;eva=Tua;break H}Vp=Aa+52|0;sq=k[Vp>>2]|0;if((sq|0)==(cq|0))fva=cq;else{hq=Aa+56|0;gq=sq;do{sq=gq+-72|0;k[Vp>>2]=sq;i[c>>0]=i[d>>0]|0;uF(c,hq,sq);gq=k[Vp>>2]|0}while((gq|0)!=(cq|0));fva=k[bq>>2]|0}OBa(fva);bva=Qua;cva=Rua;dva=Sua;eva=Tua;break H}while(0);_p=Hc()|0;cq=M;if((Aa|0)==(iq|0)){bva=$p;cva=1;dva=_p;eva=cq;break}gq=iq;do{Vp=gq+-24|0;hq=k[Vp>>2]|0;if(hq){aq=gq+-20|0;sq=k[aq>>2]|0;if((sq|0)==(hq|0))gva=hq;else{Fq=gq+-16|0;lq=sq;do{sq=lq+-72|0;k[aq>>2]=sq;i[c>>0]=i[d>>0]|0;uF(c,Fq,sq);lq=k[aq>>2]|0}while((lq|0)!=(hq|0));gva=k[Vp>>2]|0}OBa(gva)}gq=gq+-72|0}while((gq|0)!=(Aa|0));bva=$p;cva=1;dva=_p;eva=cq}while(0);if((ug|0)==3402){bva=fp;cva=1;dva=Zp;eva=Yp}Qp=k[Kp>>2]|0;if((Qp|0)==(va|0)){Sf[k[(k[va>>2]|0)+16>>2]&2047](va);Rp=bva;Sp=cva;Tp=dva;Up=eva;break}if(!Qp){Rp=bva;Sp=cva;Tp=dva;Up=eva;break}Sf[k[(k[Qp>>2]|0)+20>>2]&2047](Qp);Rp=bva;Sp=cva;Tp=dva;Up=eva}while(0);Kp=wa+120|0;Op=k[Kp>>2]|0;if(Op){Lp=wa+124|0;Pp=k[Lp>>2]|0;if((Pp|0)==(Op|0))hva=Op;else{Ep=wa+128|0;Gp=Pp;do{Pp=Gp+-72|0;k[Lp>>2]=Pp;i[c>>0]=i[d>>0]|0;uF(c,Ep,Pp);Gp=k[Lp>>2]|0}while((Gp|0)!=(Op|0));hva=k[Kp>>2]|0}OBa(hva)}Op=wa+48|0;Gp=k[Op>>2]|0;if(!Gp){Ap=Rp;Bp=Sp;Cp=Tp;Dp=Up;break}Lp=wa+52|0;Ep=k[Lp>>2]|0;if((Ep|0)==(Gp|0))iva=Gp;else{Pp=wa+56|0;Fp=Ep;do{Ep=Fp+-72|0;k[Lp>>2]=Ep;i[c>>0]=i[d>>0]|0;uF(c,Pp,Ep);Fp=k[Lp>>2]|0}while((Fp|0)!=(Gp|0));iva=k[Op>>2]|0}OBa(iva);Ap=Rp;Bp=Sp;Cp=Tp;Dp=Up}while(0);rp=sa+48|0;xp=k[rp>>2]|0;if(!xp){sp=Ap;tp=Bp;up=Cp;vp=Dp;break}wp=sa+52|0;yp=k[wp>>2]|0;if((yp|0)==(xp|0))jva=xp;else{Gp=sa+56|0;Fp=yp;do{yp=Fp+-72|0;k[wp>>2]=yp;i[c>>0]=i[d>>0]|0;uF(c,Gp,yp);Fp=k[wp>>2]|0}while((Fp|0)!=(xp|0));jva=k[rp>>2]|0}OBa(jva);sp=Ap;tp=Bp;up=Cp;vp=Dp}while(0);ip=k[ta>>2]|0;if(!ip){kva=sp;lva=tp;mva=up;nva=vp;break G}mp=k[gp>>2]|0;if((mp|0)==(ip|0))ova=ip;else{kp=mp;while(1){mp=kp+-72|0;k[gp>>2]=mp;xp=kp+-24|0;Fp=k[xp>>2]|0;if(!Fp)pva=mp;else{wp=kp+-20|0;Gp=k[wp>>2]|0;if((Gp|0)==(Fp|0)){qva=mp;rva=Fp}else{mp=kp+-16|0;yp=Gp;do{Gp=yp+-72|0;k[wp>>2]=Gp;i[c>>0]=i[d>>0]|0;uF(c,mp,Gp);yp=k[wp>>2]|0}while((yp|0)!=(Fp|0));qva=k[gp>>2]|0;rva=k[xp>>2]|0}OBa(rva);pva=qva}if((pva|0)==(ip|0))break;else kp=pva}ova=k[ta>>2]|0}OBa(ova);kva=sp;lva=tp;mva=up;nva=vp;break G}while(0);jp=Hc()|0;kp=M;ip=k[ta>>2]|0;if(!ip){pp=jp;qp=kp;ug=3391;break}Fp=k[gp>>2]|0;if((Fp|0)==(ip|0))sva=ip;else{yp=Fp;while(1){Fp=yp+-72|0;k[gp>>2]=Fp;wp=yp+-24|0;mp=k[wp>>2]|0;if(!mp)tva=Fp;else{rp=yp+-20|0;Gp=k[rp>>2]|0;if((Gp|0)==(mp|0)){uva=Fp;vva=mp}else{Fp=yp+-16|0;Lp=Gp;do{Gp=Lp+-72|0;k[rp>>2]=Gp;i[c>>0]=i[d>>0]|0;uF(c,Fp,Gp);Lp=k[rp>>2]|0}while((Lp|0)!=(mp|0));uva=k[gp>>2]|0;vva=k[wp>>2]|0}OBa(vva);tva=uva}if((tva|0)==(ip|0))break;else yp=tva}sva=k[ta>>2]|0}OBa(sva);pp=jp;qp=kp;ug=3391}while(0);if((ug|0)==3391){kva=fp;lva=1;mva=pp;nva=qp}gp=ua+120|0;hp=k[gp>>2]|0;if(hp){$o=ua+124|0;np=k[$o>>2]|0;if((np|0)==(hp|0))wva=hp;else{yp=ua+128|0;ip=np;do{np=ip+-72|0;k[$o>>2]=np;i[c>>0]=i[d>>0]|0;uF(c,yp,np);ip=k[$o>>2]|0}while((ip|0)!=(hp|0));wva=k[gp>>2]|0}OBa(wva)}hp=ua+48|0;ip=k[hp>>2]|0;if(!ip){xva=kva;yva=lva;zva=mva;Ava=nva;break E}$o=ua+52|0;yp=k[$o>>2]|0;if((yp|0)==(ip|0))Bva=ip;else{np=ua+56|0;mp=yp;do{yp=mp+-72|0;k[$o>>2]=yp;i[c>>0]=i[d>>0]|0;uF(c,np,yp);mp=k[$o>>2]|0}while((mp|0)!=(ip|0));Bva=k[hp>>2]|0}OBa(Bva);xva=kva;yva=lva;zva=mva;Ava=nva;break E}while(0);ep=Hc()|0;ip=M;if((ua|0)==(op|0)){xva=fp;yva=1;zva=ep;Ava=ip;break}mp=op;do{$o=mp+-24|0;np=k[$o>>2]|0;if(np){gp=mp+-20|0;yp=k[gp>>2]|0;if((yp|0)==(np|0))Cva=np;else{Lp=mp+-16|0;rp=yp;do{yp=rp+-72|0;k[gp>>2]=yp;i[c>>0]=i[d>>0]|0;uF(c,Lp,yp);rp=k[gp>>2]|0}while((rp|0)!=(np|0));Cva=k[$o>>2]|0}OBa(Cva)}mp=mp+-72|0}while((mp|0)!=(ua|0));xva=fp;yva=1;zva=ep;Ava=ip}while(0);if((ug|0)==3381){xva=lo;yva=1;zva=dp;Ava=cp}Wo=k[Qo>>2]|0;if((Wo|0)==(qa|0)){Sf[k[(k[qa>>2]|0)+16>>2]&2047](qa);Xo=xva;Yo=yva;Zo=zva;_o=Ava;break}if(!Wo){Xo=xva;Yo=yva;Zo=zva;_o=Ava;break}Sf[k[(k[Wo>>2]|0)+20>>2]&2047](Wo);Xo=xva;Yo=yva;Zo=zva;_o=Ava}while(0);Qo=ra+120|0;Uo=k[Qo>>2]|0;if(Uo){Ro=ra+124|0;Vo=k[Ro>>2]|0;if((Vo|0)==(Uo|0))Dva=Uo;else{Ko=ra+128|0;Mo=Vo;do{Vo=Mo+-72|0;k[Ro>>2]=Vo;i[c>>0]=i[d>>0]|0;uF(c,Ko,Vo);Mo=k[Ro>>2]|0}while((Mo|0)!=(Uo|0));Dva=k[Qo>>2]|0}OBa(Dva)}Uo=ra+48|0;Mo=k[Uo>>2]|0;if(!Mo){Go=Xo;Ho=Yo;Io=Zo;Jo=_o;break}Ro=ra+52|0;Ko=k[Ro>>2]|0;if((Ko|0)==(Mo|0))Eva=Mo;else{Vo=ra+56|0;Lo=Ko;do{Ko=Lo+-72|0;k[Ro>>2]=Ko;i[c>>0]=i[d>>0]|0;uF(c,Vo,Ko);Lo=k[Ro>>2]|0}while((Lo|0)!=(Mo|0));Eva=k[Uo>>2]|0}OBa(Eva);Go=Xo;Ho=Yo;Io=Zo;Jo=_o}while(0);xo=na+48|0;Do=k[xo>>2]|0;if(!Do){yo=Go;zo=Ho;Ao=Io;Bo=Jo;break}Co=na+52|0;Eo=k[Co>>2]|0;if((Eo|0)==(Do|0))Fva=Do;else{Mo=na+56|0;Lo=Eo;do{Eo=Lo+-72|0;k[Co>>2]=Eo;i[c>>0]=i[d>>0]|0;uF(c,Mo,Eo);Lo=k[Co>>2]|0}while((Lo|0)!=(Do|0));Fva=k[xo>>2]|0}OBa(Fva);yo=Go;zo=Ho;Ao=Io;Bo=Jo}while(0);oo=k[oa>>2]|0;if(!oo){Gva=yo;Hva=zo;Iva=Ao;Jva=Bo;break D}so=k[mo>>2]|0;if((so|0)==(oo|0))Kva=oo;else{qo=so;while(1){so=qo+-72|0;k[mo>>2]=so;Do=qo+-24|0;Lo=k[Do>>2]|0;if(!Lo)Lva=so;else{Co=qo+-20|0;Mo=k[Co>>2]|0;if((Mo|0)==(Lo|0)){Mva=so;Nva=Lo}else{so=qo+-16|0;Eo=Mo;do{Mo=Eo+-72|0;k[Co>>2]=Mo;i[c>>0]=i[d>>0]|0;uF(c,so,Mo);Eo=k[Co>>2]|0}while((Eo|0)!=(Lo|0));Mva=k[mo>>2]|0;Nva=k[Do>>2]|0}OBa(Nva);Lva=Mva}if((Lva|0)==(oo|0))break;else qo=Lva}Kva=k[oa>>2]|0}OBa(Kva);Gva=yo;Hva=zo;Iva=Ao;Jva=Bo;break D}while(0);po=Hc()|0;qo=M;oo=k[oa>>2]|0;if(!oo){vo=po;wo=qo;ug=3370;break}Lo=k[mo>>2]|0;if((Lo|0)==(oo|0))Ova=oo;else{Eo=Lo;while(1){Lo=Eo+-72|0;k[mo>>2]=Lo;Co=Eo+-24|0;so=k[Co>>2]|0;if(!so)Pva=Lo;else{xo=Eo+-20|0;Mo=k[xo>>2]|0;if((Mo|0)==(so|0)){Qva=Lo;Rva=so}else{Lo=Eo+-16|0;Ro=Mo;do{Mo=Ro+-72|0;k[xo>>2]=Mo;i[c>>0]=i[d>>0]|0;uF(c,Lo,Mo);Ro=k[xo>>2]|0}while((Ro|0)!=(so|0));Qva=k[mo>>2]|0;Rva=k[Co>>2]|0}OBa(Rva);Pva=Qva}if((Pva|0)==(oo|0))break;else Eo=Pva}Ova=k[oa>>2]|0}OBa(Ova);vo=po;wo=qo;ug=3370}while(0);if((ug|0)==3370){Gva=lo;Hva=1;Iva=vo;Jva=wo}mo=pa+120|0;no=k[mo>>2]|0;if(no){fo=pa+124|0;to=k[fo>>2]|0;if((to|0)==(no|0))Sva=no;else{Eo=pa+128|0;oo=to;do{to=oo+-72|0;k[fo>>2]=to;i[c>>0]=i[d>>0]|0;uF(c,Eo,to);oo=k[fo>>2]|0}while((oo|0)!=(no|0));Sva=k[mo>>2]|0}OBa(Sva)}no=pa+48|0;oo=k[no>>2]|0;if(!oo){Tva=Gva;Uva=Hva;Vva=Iva;Wva=Jva;break B}fo=pa+52|0;Eo=k[fo>>2]|0;if((Eo|0)==(oo|0))Xva=oo;else{to=pa+56|0;so=Eo;do{Eo=so+-72|0;k[fo>>2]=Eo;i[c>>0]=i[d>>0]|0;uF(c,to,Eo);so=k[fo>>2]|0}while((so|0)!=(oo|0));Xva=k[no>>2]|0}OBa(Xva);Tva=Gva;Uva=Hva;Vva=Iva;Wva=Jva;break B}while(0);ko=Hc()|0;oo=M;if((pa|0)==(uo|0)){Tva=lo;Uva=1;Vva=ko;Wva=oo;break}so=uo;do{fo=so+-24|0;to=k[fo>>2]|0;if(to){mo=so+-20|0;Eo=k[mo>>2]|0;if((Eo|0)==(to|0))Yva=to;else{Ro=so+-16|0;xo=Eo;do{Eo=xo+-72|0;k[mo>>2]=Eo;i[c>>0]=i[d>>0]|0;uF(c,Ro,Eo);xo=k[mo>>2]|0}while((xo|0)!=(to|0));Yva=k[fo>>2]|0}OBa(Yva)}so=so+-72|0}while((so|0)!=(pa|0));Tva=lo;Uva=1;Vva=ko;Wva=oo}while(0);if((ug|0)==3360){Tva=qn;Uva=1;Vva=jo;Wva=io}$n=k[Vn>>2]|0;if(($n|0)==(la|0)){Sf[k[(k[la>>2]|0)+16>>2]&2047](la);ao=Tva;bo=Uva;co=Vva;eo=Wva;break}if(!$n){ao=Tva;bo=Uva;co=Vva;eo=Wva;break}Sf[k[(k[$n>>2]|0)+20>>2]&2047]($n);ao=Tva;bo=Uva;co=Vva;eo=Wva}while(0);Vn=ma+120|0;Zn=k[Vn>>2]|0;if(Zn){Wn=ma+124|0;_n=k[Wn>>2]|0;if((_n|0)==(Zn|0))Zva=Zn;else{Pn=ma+128|0;Rn=_n;do{_n=Rn+-72|0;k[Wn>>2]=_n;i[c>>0]=i[d>>0]|0;uF(c,Pn,_n);Rn=k[Wn>>2]|0}while((Rn|0)!=(Zn|0));Zva=k[Vn>>2]|0}OBa(Zva)}Zn=ma+48|0;Rn=k[Zn>>2]|0;if(!Rn){Ln=ao;Mn=bo;Nn=co;On=eo;break}Wn=ma+52|0;Pn=k[Wn>>2]|0;if((Pn|0)==(Rn|0))_va=Rn;else{_n=ma+56|0;Qn=Pn;do{Pn=Qn+-72|0;k[Wn>>2]=Pn;i[c>>0]=i[d>>0]|0;uF(c,_n,Pn);Qn=k[Wn>>2]|0}while((Qn|0)!=(Rn|0));_va=k[Zn>>2]|0}OBa(_va);Ln=ao;Mn=bo;Nn=co;On=eo}while(0);Cn=ia+48|0;In=k[Cn>>2]|0;if(!In){Dn=Ln;En=Mn;Fn=Nn;Gn=On;break}Hn=ia+52|0;Jn=k[Hn>>2]|0;if((Jn|0)==(In|0))$va=In;else{Rn=ia+56|0;Qn=Jn;do{Jn=Qn+-72|0;k[Hn>>2]=Jn;i[c>>0]=i[d>>0]|0;uF(c,Rn,Jn);Qn=k[Hn>>2]|0}while((Qn|0)!=(In|0));$va=k[Cn>>2]|0}OBa($va);Dn=Ln;En=Mn;Fn=Nn;Gn=On}while(0);tn=k[ja>>2]|0;if(!tn){awa=Dn;bwa=En;cwa=Fn;dwa=Gn;break A}xn=k[rn>>2]|0;if((xn|0)==(tn|0))ewa=tn;else{vn=xn;while(1){xn=vn+-72|0;k[rn>>2]=xn;In=vn+-24|0;Qn=k[In>>2]|0;if(!Qn)fwa=xn;else{Hn=vn+-20|0;Rn=k[Hn>>2]|0;if((Rn|0)==(Qn|0)){gwa=xn;hwa=Qn}else{xn=vn+-16|0;Jn=Rn;do{Rn=Jn+-72|0;k[Hn>>2]=Rn;i[c>>0]=i[d>>0]|0;uF(c,xn,Rn);Jn=k[Hn>>2]|0}while((Jn|0)!=(Qn|0));gwa=k[rn>>2]|0;hwa=k[In>>2]|0}OBa(hwa);fwa=gwa}if((fwa|0)==(tn|0))break;else vn=fwa}ewa=k[ja>>2]|0}OBa(ewa);awa=Dn;bwa=En;cwa=Fn;dwa=Gn;break A}while(0);un=Hc()|0;vn=M;tn=k[ja>>2]|0;if(!tn){An=un;Bn=vn;ug=3349;break}Qn=k[rn>>2]|0;if((Qn|0)==(tn|0))iwa=tn;else{Jn=Qn;while(1){Qn=Jn+-72|0;k[rn>>2]=Qn;Hn=Jn+-24|0;xn=k[Hn>>2]|0;if(!xn)jwa=Qn;else{Cn=Jn+-20|0;Rn=k[Cn>>2]|0;if((Rn|0)==(xn|0)){kwa=Qn;lwa=xn}else{Qn=Jn+-16|0;Wn=Rn;do{Rn=Wn+-72|0;k[Cn>>2]=Rn;i[c>>0]=i[d>>0]|0;uF(c,Qn,Rn);Wn=k[Cn>>2]|0}while((Wn|0)!=(xn|0));kwa=k[rn>>2]|0;lwa=k[Hn>>2]|0}OBa(lwa);jwa=kwa}if((jwa|0)==(tn|0))break;else Jn=jwa}iwa=k[ja>>2]|0}OBa(iwa);An=un;Bn=vn;ug=3349}while(0);if((ug|0)==3349){awa=qn;bwa=1;cwa=An;dwa=Bn}rn=ka+120|0;sn=k[rn>>2]|0;if(sn){mn=ka+124|0;yn=k[mn>>2]|0;if((yn|0)==(sn|0))mwa=sn;else{Jn=ka+128|0;tn=yn;do{yn=tn+-72|0;k[mn>>2]=yn;i[c>>0]=i[d>>0]|0;uF(c,Jn,yn);tn=k[mn>>2]|0}while((tn|0)!=(sn|0));mwa=k[rn>>2]|0}OBa(mwa)}sn=ka+48|0;tn=k[sn>>2]|0;if(!tn){nwa=awa;owa=bwa;pwa=cwa;qwa=dwa;break y}mn=ka+52|0;Jn=k[mn>>2]|0;if((Jn|0)==(tn|0))rwa=tn;else{yn=ka+56|0;xn=Jn;do{Jn=xn+-72|0;k[mn>>2]=Jn;i[c>>0]=i[d>>0]|0;uF(c,yn,Jn);xn=k[mn>>2]|0}while((xn|0)!=(tn|0));rwa=k[sn>>2]|0}OBa(rwa);nwa=awa;owa=bwa;pwa=cwa;qwa=dwa;break y}while(0);pn=Hc()|0;tn=M;if((ka|0)==(zn|0)){nwa=qn;owa=1;pwa=pn;qwa=tn;break}xn=zn;do{mn=xn+-24|0;yn=k[mn>>2]|0;if(yn){rn=xn+-20|0;Jn=k[rn>>2]|0;if((Jn|0)==(yn|0))swa=yn;else{Wn=xn+-16|0;Cn=Jn;do{Jn=Cn+-72|0;k[rn>>2]=Jn;i[c>>0]=i[d>>0]|0;uF(c,Wn,Jn);Cn=k[rn>>2]|0}while((Cn|0)!=(yn|0));swa=k[mn>>2]|0}OBa(swa)}xn=xn+-72|0}while((xn|0)!=(ka|0));nwa=qn;owa=1;pwa=pn;qwa=tn}while(0);if((ug|0)==3339){nwa=Em;owa=1;pwa=on;qwa=nn}fn=k[Ym>>2]|0;if((fn|0)==(ga|0)){Sf[k[(k[ga>>2]|0)+16>>2]&2047](ga);gn=nwa;hn=owa;jn=pwa;kn=qwa;break}if(!fn){gn=nwa;hn=owa;jn=pwa;kn=qwa;break}Sf[k[(k[fn>>2]|0)+20>>2]&2047](fn);gn=nwa;hn=owa;jn=pwa;kn=qwa}while(0);Ym=ha+48|0;dn=k[Ym>>2]|0;if(!dn){Zm=gn;_m=hn;$m=jn;an=kn;break}cn=ha+52|0;bn=k[cn>>2]|0;if((bn|0)==(dn|0))twa=dn;else{en=ha+56|0;fn=bn;do{bn=fn+-72|0;k[cn>>2]=bn;i[c>>0]=i[d>>0]|0;uF(c,en,bn);fn=k[cn>>2]|0}while((fn|0)!=(dn|0));twa=k[Ym>>2]|0}OBa(twa);Zm=gn;_m=hn;$m=jn;an=kn}while(0);Im=da+48|0;Jm=k[Im>>2]|0;if(!Jm){Tm=Zm;Um=_m;Vm=$m;Wm=an;break}Lm=da+52|0;Xm=k[Lm>>2]|0;if((Xm|0)==(Jm|0))uwa=Jm;else{dn=da+56|0;fn=Xm;do{Xm=fn+-72|0;k[Lm>>2]=Xm;i[c>>0]=i[d>>0]|0;uF(c,dn,Xm);fn=k[Lm>>2]|0}while((fn|0)!=(Jm|0));uwa=k[Im>>2]|0}OBa(uwa);Tm=Zm;Um=_m;Vm=$m;Wm=an}while(0);Gm=k[ea>>2]|0;if(!Gm){vwa=Tm;wwa=Um;xwa=Vm;ywa=Wm;break}ym=k[Hm>>2]|0;if((ym|0)==(Gm|0))zwa=Gm;else{Fm=ym;while(1){ym=Fm+-72|0;k[Hm>>2]=ym;Jm=Fm+-24|0;fn=k[Jm>>2]|0;if(!fn)Awa=ym;else{Lm=Fm+-20|0;dn=k[Lm>>2]|0;if((dn|0)==(fn|0)){Bwa=ym;Cwa=fn}else{ym=Fm+-16|0;Xm=dn;do{dn=Xm+-72|0;k[Lm>>2]=dn;i[c>>0]=i[d>>0]|0;uF(c,ym,dn);Xm=k[Lm>>2]|0}while((Xm|0)!=(fn|0));Bwa=k[Hm>>2]|0;Cwa=k[Jm>>2]|0}OBa(Cwa);Awa=Bwa}if((Awa|0)==(Gm|0))break;else Fm=Awa}zwa=k[ea>>2]|0}OBa(zwa);vwa=Tm;wwa=Um;xwa=Vm;ywa=Wm}while(0);if((ug|0)==3334){vwa=Em;wwa=1;xwa=Rm;ywa=Sm}Hm=fa+48|0;Mm=k[Hm>>2]|0;if(!Mm){Nm=vwa;Om=wwa;Pm=xwa;Qm=ywa;break}Dm=fa+52|0;Fm=k[Dm>>2]|0;if((Fm|0)==(Mm|0))Dwa=Mm;else{Gm=fa+56|0;fn=Fm;do{Fm=fn+-72|0;k[Dm>>2]=Fm;i[c>>0]=i[d>>0]|0;uF(c,Gm,Fm);fn=k[Dm>>2]|0}while((fn|0)!=(Mm|0));Dwa=k[Hm>>2]|0}OBa(Dwa);Nm=vwa;Om=wwa;Pm=xwa;Qm=ywa}while(0);if((ug|0)==3332){Nm=Kl;Om=1;Pm=Cm;Qm=Bm}tm=k[nm>>2]|0;if((tm|0)==(ba|0)){Sf[k[(k[ba>>2]|0)+16>>2]&2047](ba);um=Nm;vm=Om;wm=Pm;xm=Qm;break}if(!tm){um=Nm;vm=Om;wm=Pm;xm=Qm;break}Sf[k[(k[tm>>2]|0)+20>>2]&2047](tm);um=Nm;vm=Om;wm=Pm;xm=Qm}while(0);nm=ca+120|0;rm=k[nm>>2]|0;if(rm){om=ca+124|0;sm=k[om>>2]|0;if((sm|0)==(rm|0))Ewa=rm;else{hm=ca+128|0;jm=sm;do{sm=jm+-72|0;k[om>>2]=sm;i[c>>0]=i[d>>0]|0;uF(c,hm,sm);jm=k[om>>2]|0}while((jm|0)!=(rm|0));Ewa=k[nm>>2]|0}OBa(Ewa)}rm=ca+48|0;jm=k[rm>>2]|0;if(!jm){dm=um;em=vm;fm=wm;gm=xm;break}om=ca+52|0;hm=k[om>>2]|0;if((hm|0)==(jm|0))Fwa=jm;else{sm=ca+56|0;im=hm;do{hm=im+-72|0;k[om>>2]=hm;i[c>>0]=i[d>>0]|0;uF(c,sm,hm);im=k[om>>2]|0}while((im|0)!=(jm|0));Fwa=k[rm>>2]|0}OBa(Fwa);dm=um;em=vm;fm=wm;gm=xm}while(0);Wl=_+48|0;am=k[Wl>>2]|0;if(!am){Xl=dm;Yl=em;Zl=fm;_l=gm;break}$l=_+52|0;bm=k[$l>>2]|0;if((bm|0)==(am|0))Gwa=am;else{jm=_+56|0;im=bm;do{bm=im+-72|0;k[$l>>2]=bm;i[c>>0]=i[d>>0]|0;uF(c,jm,bm);im=k[$l>>2]|0}while((im|0)!=(am|0));Gwa=k[Wl>>2]|0}OBa(Gwa);Xl=dm;Yl=em;Zl=fm;_l=gm}while(0);Nl=k[$>>2]|0;if(!Nl){Hwa=Xl;Iwa=Yl;Jwa=Zl;Kwa=_l;break v}Rl=k[Ll>>2]|0;if((Rl|0)==(Nl|0))Lwa=Nl;else{Pl=Rl;while(1){Rl=Pl+-72|0;k[Ll>>2]=Rl;am=Pl+-24|0;im=k[am>>2]|0;if(!im)Mwa=Rl;else{$l=Pl+-20|0;jm=k[$l>>2]|0;if((jm|0)==(im|0)){Nwa=Rl;Owa=im}else{Rl=Pl+-16|0;bm=jm;do{jm=bm+-72|0;k[$l>>2]=jm;i[c>>0]=i[d>>0]|0;uF(c,Rl,jm);bm=k[$l>>2]|0}while((bm|0)!=(im|0));Nwa=k[Ll>>2]|0;Owa=k[am>>2]|0}OBa(Owa);Mwa=Nwa}if((Mwa|0)==(Nl|0))break;else Pl=Mwa}Lwa=k[$>>2]|0}OBa(Lwa);Hwa=Xl;Iwa=Yl;Jwa=Zl;Kwa=_l;break v}while(0);Ol=Hc()|0;Pl=M;Nl=k[$>>2]|0;if(!Nl){Ul=Ol;Vl=Pl;ug=3321;break}im=k[Ll>>2]|0;if((im|0)==(Nl|0))Pwa=Nl;else{bm=im;while(1){im=bm+-72|0;k[Ll>>2]=im;$l=bm+-24|0;Rl=k[$l>>2]|0;if(!Rl)Qwa=im;else{Wl=bm+-20|0;jm=k[Wl>>2]|0;if((jm|0)==(Rl|0)){Rwa=im;Swa=Rl}else{im=bm+-16|0;om=jm;do{jm=om+-72|0;k[Wl>>2]=jm;i[c>>0]=i[d>>0]|0;uF(c,im,jm);om=k[Wl>>2]|0}while((om|0)!=(Rl|0));Rwa=k[Ll>>2]|0;Swa=k[$l>>2]|0}OBa(Swa);Qwa=Rwa}if((Qwa|0)==(Nl|0))break;else bm=Qwa}Pwa=k[$>>2]|0}OBa(Pwa);Ul=Ol;Vl=Pl;ug=3321}while(0);if((ug|0)==3321){Hwa=Kl;Iwa=1;Jwa=Ul;Kwa=Vl}Ll=aa+120|0;Ml=k[Ll>>2]|0;if(Ml){El=aa+124|0;Sl=k[El>>2]|0;if((Sl|0)==(Ml|0))Twa=Ml;else{bm=aa+128|0;Nl=Sl;do{Sl=Nl+-72|0;k[El>>2]=Sl;i[c>>0]=i[d>>0]|0;uF(c,bm,Sl);Nl=k[El>>2]|0}while((Nl|0)!=(Ml|0));Twa=k[Ll>>2]|0}OBa(Twa)}Ml=aa+48|0;Nl=k[Ml>>2]|0;if(!Nl){Uwa=Hwa;Vwa=Iwa;Wwa=Jwa;Xwa=Kwa;break t}El=aa+52|0;bm=k[El>>2]|0;if((bm|0)==(Nl|0))Ywa=Nl;else{Sl=aa+56|0;Rl=bm;do{bm=Rl+-72|0;k[El>>2]=bm;i[c>>0]=i[d>>0]|0;uF(c,Sl,bm);Rl=k[El>>2]|0}while((Rl|0)!=(Nl|0));Ywa=k[Ml>>2]|0}OBa(Ywa);Uwa=Hwa;Vwa=Iwa;Wwa=Jwa;Xwa=Kwa;break t}while(0);Jl=Hc()|0;Nl=M;if((aa|0)==(Tl|0)){Uwa=Kl;Vwa=1;Wwa=Jl;Xwa=Nl;break}Rl=Tl;do{El=Rl+-24|0;Sl=k[El>>2]|0;if(Sl){Ll=Rl+-20|0;bm=k[Ll>>2]|0;if((bm|0)==(Sl|0))Zwa=Sl;else{om=Rl+-16|0;Wl=bm;do{bm=Wl+-72|0;k[Ll>>2]=bm;i[c>>0]=i[d>>0]|0;uF(c,om,bm);Wl=k[Ll>>2]|0}while((Wl|0)!=(Sl|0));Zwa=k[El>>2]|0}OBa(Zwa)}Rl=Rl+-72|0}while((Rl|0)!=(aa|0));Uwa=Kl;Vwa=1;Wwa=Jl;Xwa=Nl}while(0);if((ug|0)==3311){Uwa=Qk;Vwa=1;Wwa=Il;Xwa=Hl}zl=k[tl>>2]|0;if((zl|0)==(Y|0)){Sf[k[(k[Y>>2]|0)+16>>2]&2047](Y);Al=Uwa;Bl=Vwa;Cl=Wwa;Dl=Xwa;break}if(!zl){Al=Uwa;Bl=Vwa;Cl=Wwa;Dl=Xwa;break}Sf[k[(k[zl>>2]|0)+20>>2]&2047](zl);Al=Uwa;Bl=Vwa;Cl=Wwa;Dl=Xwa}while(0);tl=Z+120|0;xl=k[tl>>2]|0;if(xl){ul=Z+124|0;yl=k[ul>>2]|0;if((yl|0)==(xl|0))_wa=xl;else{nl=Z+128|0;pl=yl;do{yl=pl+-72|0;k[ul>>2]=yl;i[c>>0]=i[d>>0]|0;uF(c,nl,yl);pl=k[ul>>2]|0}while((pl|0)!=(xl|0));_wa=k[tl>>2]|0}OBa(_wa)}xl=Z+48|0;pl=k[xl>>2]|0;if(!pl){jl=Al;kl=Bl;ll=Cl;ml=Dl;break}ul=Z+52|0;nl=k[ul>>2]|0;if((nl|0)==(pl|0))$wa=pl;else{yl=Z+56|0;ol=nl;do{nl=ol+-72|0;k[ul>>2]=nl;i[c>>0]=i[d>>0]|0;uF(c,yl,nl);ol=k[ul>>2]|0}while((ol|0)!=(pl|0));$wa=k[xl>>2]|0}OBa($wa);jl=Al;kl=Bl;ll=Cl;ml=Dl}while(0);al=V+48|0;gl=k[al>>2]|0;if(!gl){bl=jl;cl=kl;dl=ll;el=ml;break}fl=V+52|0;hl=k[fl>>2]|0;if((hl|0)==(gl|0))axa=gl;else{pl=V+56|0;ol=hl;do{hl=ol+-72|0;k[fl>>2]=hl;i[c>>0]=i[d>>0]|0;uF(c,pl,hl);ol=k[fl>>2]|0}while((ol|0)!=(gl|0));axa=k[al>>2]|0}OBa(axa);bl=jl;cl=kl;dl=ll;el=ml}while(0);Tk=k[W>>2]|0;if(!Tk){bxa=bl;cxa=cl;dxa=dl;exa=el;break s}Xk=k[Rk>>2]|0;if((Xk|0)==(Tk|0))fxa=Tk;else{Vk=Xk;while(1){Xk=Vk+-72|0;k[Rk>>2]=Xk;gl=Vk+-24|0;ol=k[gl>>2]|0;if(!ol)gxa=Xk;else{fl=Vk+-20|0;pl=k[fl>>2]|0;if((pl|0)==(ol|0)){hxa=Xk;ixa=ol}else{Xk=Vk+-16|0;hl=pl;do{pl=hl+-72|0;k[fl>>2]=pl;i[c>>0]=i[d>>0]|0;uF(c,Xk,pl);hl=k[fl>>2]|0}while((hl|0)!=(ol|0));hxa=k[Rk>>2]|0;ixa=k[gl>>2]|0}OBa(ixa);gxa=hxa}if((gxa|0)==(Tk|0))break;else Vk=gxa}fxa=k[W>>2]|0}OBa(fxa);bxa=bl;cxa=cl;dxa=dl;exa=el;break s}while(0);Uk=Hc()|0;Vk=M;Tk=k[W>>2]|0;if(!Tk){_k=Uk;$k=Vk;ug=3300;break}ol=k[Rk>>2]|0;if((ol|0)==(Tk|0))jxa=Tk;else{hl=ol;while(1){ol=hl+-72|0;k[Rk>>2]=ol;fl=hl+-24|0;Xk=k[fl>>2]|0;if(!Xk)kxa=ol;else{al=hl+-20|0;pl=k[al>>2]|0;if((pl|0)==(Xk|0)){lxa=ol;mxa=Xk}else{ol=hl+-16|0;ul=pl;do{pl=ul+-72|0;k[al>>2]=pl;i[c>>0]=i[d>>0]|0;uF(c,ol,pl);ul=k[al>>2]|0}while((ul|0)!=(Xk|0));lxa=k[Rk>>2]|0;mxa=k[fl>>2]|0}OBa(mxa);kxa=lxa}if((kxa|0)==(Tk|0))break;else hl=kxa}jxa=k[W>>2]|0}OBa(jxa);_k=Uk;$k=Vk;ug=3300}while(0);if((ug|0)==3300){bxa=Qk;cxa=1;dxa=_k;exa=$k}Rk=X+120|0;Sk=k[Rk>>2]|0;if(Sk){Kk=X+124|0;Yk=k[Kk>>2]|0;if((Yk|0)==(Sk|0))nxa=Sk;else{hl=X+128|0;Tk=Yk;do{Yk=Tk+-72|0;k[Kk>>2]=Yk;i[c>>0]=i[d>>0]|0;uF(c,hl,Yk);Tk=k[Kk>>2]|0}while((Tk|0)!=(Sk|0));nxa=k[Rk>>2]|0}OBa(nxa)}Sk=X+48|0;Tk=k[Sk>>2]|0;if(!Tk){oxa=bxa;pxa=cxa;qxa=dxa;rxa=exa;break q}Kk=X+52|0;hl=k[Kk>>2]|0;if((hl|0)==(Tk|0))sxa=Tk;else{Yk=X+56|0;Xk=hl;do{hl=Xk+-72|0;k[Kk>>2]=hl;i[c>>0]=i[d>>0]|0;uF(c,Yk,hl);Xk=k[Kk>>2]|0}while((Xk|0)!=(Tk|0));sxa=k[Sk>>2]|0}OBa(sxa);oxa=bxa;pxa=cxa;qxa=dxa;rxa=exa;break q}while(0);Pk=Hc()|0;Tk=M;if((X|0)==(Zk|0)){oxa=Qk;pxa=1;qxa=Pk;rxa=Tk;break}Xk=Zk;do{Kk=Xk+-24|0;Yk=k[Kk>>2]|0;if(Yk){Rk=Xk+-20|0;hl=k[Rk>>2]|0;if((hl|0)==(Yk|0))txa=Yk;else{ul=Xk+-16|0;al=hl;do{hl=al+-72|0;k[Rk>>2]=hl;i[c>>0]=i[d>>0]|0;uF(c,ul,hl);al=k[Rk>>2]|0}while((al|0)!=(Yk|0));txa=k[Kk>>2]|0}OBa(txa)}Xk=Xk+-72|0}while((Xk|0)!=(X|0));oxa=Qk;pxa=1;qxa=Pk;rxa=Tk}while(0);if((ug|0)==3290){oxa=Wj;pxa=1;qxa=Ok;rxa=Nk}Fk=k[zk>>2]|0;if((Fk|0)==(T|0)){Sf[k[(k[T>>2]|0)+16>>2]&2047](T);Gk=oxa;Hk=pxa;Ik=qxa;Jk=rxa;break}if(!Fk){Gk=oxa;Hk=pxa;Ik=qxa;Jk=rxa;break}Sf[k[(k[Fk>>2]|0)+20>>2]&2047](Fk);Gk=oxa;Hk=pxa;Ik=qxa;Jk=rxa}while(0);zk=U+120|0;Dk=k[zk>>2]|0;if(Dk){Ak=U+124|0;Ek=k[Ak>>2]|0;if((Ek|0)==(Dk|0))uxa=Dk;else{tk=U+128|0;vk=Ek;do{Ek=vk+-72|0;k[Ak>>2]=Ek;i[c>>0]=i[d>>0]|0;uF(c,tk,Ek);vk=k[Ak>>2]|0}while((vk|0)!=(Dk|0));uxa=k[zk>>2]|0}OBa(uxa)}Dk=U+48|0;vk=k[Dk>>2]|0;if(!vk){pk=Gk;qk=Hk;rk=Ik;sk=Jk;break}Ak=U+52|0;tk=k[Ak>>2]|0;if((tk|0)==(vk|0))vxa=vk;else{Ek=U+56|0;uk=tk;do{tk=uk+-72|0;k[Ak>>2]=tk;i[c>>0]=i[d>>0]|0;uF(c,Ek,tk);uk=k[Ak>>2]|0}while((uk|0)!=(vk|0));vxa=k[Dk>>2]|0}OBa(vxa);pk=Gk;qk=Hk;rk=Ik;sk=Jk}while(0);gk=Q+48|0;mk=k[gk>>2]|0;if(!mk){hk=pk;ik=qk;jk=rk;kk=sk;break}lk=Q+52|0;nk=k[lk>>2]|0;if((nk|0)==(mk|0))wxa=mk;else{vk=Q+56|0;uk=nk;do{nk=uk+-72|0;k[lk>>2]=nk;i[c>>0]=i[d>>0]|0;uF(c,vk,nk);uk=k[lk>>2]|0}while((uk|0)!=(mk|0));wxa=k[gk>>2]|0}OBa(wxa);hk=pk;ik=qk;jk=rk;kk=sk}while(0);Zj=k[R>>2]|0;if(!Zj){xxa=hk;yxa=ik;zxa=jk;Axa=kk;break p}bk=k[Xj>>2]|0;if((bk|0)==(Zj|0))Bxa=Zj;else{$j=bk;while(1){bk=$j+-72|0;k[Xj>>2]=bk;mk=$j+-24|0;uk=k[mk>>2]|0;if(!uk)Cxa=bk;else{lk=$j+-20|0;vk=k[lk>>2]|0;if((vk|0)==(uk|0)){Dxa=bk;Exa=uk}else{bk=$j+-16|0;nk=vk;do{vk=nk+-72|0;k[lk>>2]=vk;i[c>>0]=i[d>>0]|0;uF(c,bk,vk);nk=k[lk>>2]|0}while((nk|0)!=(uk|0));Dxa=k[Xj>>2]|0;Exa=k[mk>>2]|0}OBa(Exa);Cxa=Dxa}if((Cxa|0)==(Zj|0))break;else $j=Cxa}Bxa=k[R>>2]|0}OBa(Bxa);xxa=hk;yxa=ik;zxa=jk;Axa=kk;break p}while(0);_j=Hc()|0;$j=M;Zj=k[R>>2]|0;if(!Zj){ek=_j;fk=$j;ug=3279;break}uk=k[Xj>>2]|0;if((uk|0)==(Zj|0))Fxa=Zj;else{nk=uk;while(1){uk=nk+-72|0;k[Xj>>2]=uk;lk=nk+-24|0;bk=k[lk>>2]|0;if(!bk)Gxa=uk;else{gk=nk+-20|0;vk=k[gk>>2]|0;if((vk|0)==(bk|0)){Hxa=uk;Ixa=bk}else{uk=nk+-16|0;Ak=vk;do{vk=Ak+-72|0;k[gk>>2]=vk;i[c>>0]=i[d>>0]|0;uF(c,uk,vk);Ak=k[gk>>2]|0}while((Ak|0)!=(bk|0));Hxa=k[Xj>>2]|0;Ixa=k[lk>>2]|0}OBa(Ixa);Gxa=Hxa}if((Gxa|0)==(Zj|0))break;else nk=Gxa}Fxa=k[R>>2]|0}OBa(Fxa);ek=_j;fk=$j;ug=3279}while(0);if((ug|0)==3279){xxa=Wj;yxa=1;zxa=ek;Axa=fk}Xj=S+120|0;Yj=k[Xj>>2]|0;if(Yj){Qj=S+124|0;ck=k[Qj>>2]|0;if((ck|0)==(Yj|0))Jxa=Yj;else{nk=S+128|0;Zj=ck;do{ck=Zj+-72|0;k[Qj>>2]=ck;i[c>>0]=i[d>>0]|0;uF(c,nk,ck);Zj=k[Qj>>2]|0}while((Zj|0)!=(Yj|0));Jxa=k[Xj>>2]|0}OBa(Jxa)}Yj=S+48|0;Zj=k[Yj>>2]|0;if(!Zj){Kxa=xxa;Lxa=yxa;Mxa=zxa;Nxa=Axa;break n}Qj=S+52|0;nk=k[Qj>>2]|0;if((nk|0)==(Zj|0))Oxa=Zj;else{ck=S+56|0;bk=nk;do{nk=bk+-72|0;k[Qj>>2]=nk;i[c>>0]=i[d>>0]|0;uF(c,ck,nk);bk=k[Qj>>2]|0}while((bk|0)!=(Zj|0));Oxa=k[Yj>>2]|0}OBa(Oxa);Kxa=xxa;Lxa=yxa;Mxa=zxa;Nxa=Axa;break n}while(0);Vj=Hc()|0;Zj=M;if((S|0)==(dk|0)){Kxa=Wj;Lxa=1;Mxa=Vj;Nxa=Zj;break}bk=dk;do{Qj=bk+-24|0;ck=k[Qj>>2]|0;if(ck){Xj=bk+-20|0;nk=k[Xj>>2]|0;if((nk|0)==(ck|0))Pxa=ck;else{Ak=bk+-16|0;gk=nk;do{nk=gk+-72|0;k[Xj>>2]=nk;i[c>>0]=i[d>>0]|0;uF(c,Ak,nk);gk=k[Xj>>2]|0}while((gk|0)!=(ck|0));Pxa=k[Qj>>2]|0}OBa(Pxa)}bk=bk+-72|0}while((bk|0)!=(S|0));Kxa=Wj;Lxa=1;Mxa=Vj;Nxa=Zj}while(0);if((ug|0)==3269){Kxa=aj;Lxa=1;Mxa=Uj;Nxa=Tj}Lj=k[Fj>>2]|0;if((Lj|0)==(O|0)){Sf[k[(k[O>>2]|0)+16>>2]&2047](O);Mj=Kxa;Nj=Lxa;Oj=Mxa;Pj=Nxa;break}if(!Lj){Mj=Kxa;Nj=Lxa;Oj=Mxa;Pj=Nxa;break}Sf[k[(k[Lj>>2]|0)+20>>2]&2047](Lj);Mj=Kxa;Nj=Lxa;Oj=Mxa;Pj=Nxa}while(0);Fj=P+120|0;Jj=k[Fj>>2]|0;if(Jj){Gj=P+124|0;Kj=k[Gj>>2]|0;if((Kj|0)==(Jj|0))Qxa=Jj;else{zj=P+128|0;Bj=Kj;do{Kj=Bj+-72|0;k[Gj>>2]=Kj;i[c>>0]=i[d>>0]|0;uF(c,zj,Kj);Bj=k[Gj>>2]|0}while((Bj|0)!=(Jj|0));Qxa=k[Fj>>2]|0}OBa(Qxa)}Jj=P+48|0;Bj=k[Jj>>2]|0;if(!Bj){vj=Mj;wj=Nj;xj=Oj;yj=Pj;break}Gj=P+52|0;zj=k[Gj>>2]|0;if((zj|0)==(Bj|0))Rxa=Bj;else{Kj=P+56|0;Aj=zj;do{zj=Aj+-72|0;k[Gj>>2]=zj;i[c>>0]=i[d>>0]|0;uF(c,Kj,zj);Aj=k[Gj>>2]|0}while((Aj|0)!=(Bj|0));Rxa=k[Jj>>2]|0}OBa(Rxa);vj=Mj;wj=Nj;xj=Oj;yj=Pj}while(0);mj=K+48|0;sj=k[mj>>2]|0;if(!sj){nj=vj;oj=wj;pj=xj;qj=yj;break}rj=K+52|0;tj=k[rj>>2]|0;if((tj|0)==(sj|0))Sxa=sj;else{Bj=K+56|0;Aj=tj;do{tj=Aj+-72|0;k[rj>>2]=tj;i[c>>0]=i[d>>0]|0;uF(c,Bj,tj);Aj=k[rj>>2]|0}while((Aj|0)!=(sj|0));Sxa=k[mj>>2]|0}OBa(Sxa);nj=vj;oj=wj;pj=xj;qj=yj}while(0);dj=k[L>>2]|0;if(!dj){Txa=nj;Uxa=oj;Vxa=pj;Wxa=qj;break m}hj=k[bj>>2]|0;if((hj|0)==(dj|0))Xxa=dj;else{fj=hj;while(1){hj=fj+-72|0;k[bj>>2]=hj;sj=fj+-24|0;Aj=k[sj>>2]|0;if(!Aj)Yxa=hj;else{rj=fj+-20|0;Bj=k[rj>>2]|0;if((Bj|0)==(Aj|0)){Zxa=hj;_xa=Aj}else{hj=fj+-16|0;tj=Bj;do{Bj=tj+-72|0;k[rj>>2]=Bj;i[c>>0]=i[d>>0]|0;uF(c,hj,Bj);tj=k[rj>>2]|0}while((tj|0)!=(Aj|0));Zxa=k[bj>>2]|0;_xa=k[sj>>2]|0}OBa(_xa);Yxa=Zxa}if((Yxa|0)==(dj|0))break;else fj=Yxa}Xxa=k[L>>2]|0}OBa(Xxa);Txa=nj;Uxa=oj;Vxa=pj;Wxa=qj;break m}while(0);ej=Hc()|0;fj=M;dj=k[L>>2]|0;if(!dj){kj=ej;lj=fj;ug=3258;break}Aj=k[bj>>2]|0;if((Aj|0)==(dj|0))$xa=dj;else{tj=Aj;while(1){Aj=tj+-72|0;k[bj>>2]=Aj;rj=tj+-24|0;hj=k[rj>>2]|0;if(!hj)aya=Aj;else{mj=tj+-20|0;Bj=k[mj>>2]|0;if((Bj|0)==(hj|0)){bya=Aj;cya=hj}else{Aj=tj+-16|0;Gj=Bj;do{Bj=Gj+-72|0;k[mj>>2]=Bj;i[c>>0]=i[d>>0]|0;uF(c,Aj,Bj);Gj=k[mj>>2]|0}while((Gj|0)!=(hj|0));bya=k[bj>>2]|0;cya=k[rj>>2]|0}OBa(cya);aya=bya}if((aya|0)==(dj|0))break;else tj=aya}$xa=k[L>>2]|0}OBa($xa);kj=ej;lj=fj;ug=3258}while(0);if((ug|0)==3258){Txa=aj;Uxa=1;Vxa=kj;Wxa=lj}bj=N+120|0;cj=k[bj>>2]|0;if(cj){Wi=N+124|0;ij=k[Wi>>2]|0;if((ij|0)==(cj|0))dya=cj;else{tj=N+128|0;dj=ij;do{ij=dj+-72|0;k[Wi>>2]=ij;i[c>>0]=i[d>>0]|0;uF(c,tj,ij);dj=k[Wi>>2]|0}while((dj|0)!=(cj|0));dya=k[bj>>2]|0}OBa(dya)}cj=N+48|0;dj=k[cj>>2]|0;if(!dj){eya=Txa;fya=Uxa;gya=Vxa;hya=Wxa;break k}Wi=N+52|0;tj=k[Wi>>2]|0;if((tj|0)==(dj|0))iya=dj;else{ij=N+56|0;hj=tj;do{tj=hj+-72|0;k[Wi>>2]=tj;i[c>>0]=i[d>>0]|0;uF(c,ij,tj);hj=k[Wi>>2]|0}while((hj|0)!=(dj|0));iya=k[cj>>2]|0}OBa(iya);eya=Txa;fya=Uxa;gya=Vxa;hya=Wxa;break k}while(0);$i=Hc()|0;dj=M;if((N|0)==(jj|0)){eya=aj;fya=1;gya=$i;hya=dj;break}hj=jj;do{Wi=hj+-24|0;ij=k[Wi>>2]|0;if(ij){bj=hj+-20|0;tj=k[bj>>2]|0;if((tj|0)==(ij|0))jya=ij;else{Gj=hj+-16|0;mj=tj;do{tj=mj+-72|0;k[bj>>2]=tj;i[c>>0]=i[d>>0]|0;uF(c,Gj,tj);mj=k[bj>>2]|0}while((mj|0)!=(ij|0));jya=k[Wi>>2]|0}OBa(jya)}hj=hj+-72|0}while((hj|0)!=(N|0));eya=aj;fya=1;gya=$i;hya=dj}while(0);if((ug|0)==3248){eya=gi;fya=1;gya=_i;hya=Zi}Ri=k[Li>>2]|0;if((Ri|0)==(I|0)){Sf[k[(k[I>>2]|0)+16>>2]&2047](I);Si=eya;Ti=fya;Ui=gya;Vi=hya;break}if(!Ri){Si=eya;Ti=fya;Ui=gya;Vi=hya;break}Sf[k[(k[Ri>>2]|0)+20>>2]&2047](Ri);Si=eya;Ti=fya;Ui=gya;Vi=hya}while(0);Li=J+120|0;Pi=k[Li>>2]|0;if(Pi){Mi=J+124|0;Qi=k[Mi>>2]|0;if((Qi|0)==(Pi|0))kya=Pi;else{Fi=J+128|0;Hi=Qi;do{Qi=Hi+-72|0;k[Mi>>2]=Qi;i[c>>0]=i[d>>0]|0;uF(c,Fi,Qi);Hi=k[Mi>>2]|0}while((Hi|0)!=(Pi|0));kya=k[Li>>2]|0}OBa(kya)}Pi=J+48|0;Hi=k[Pi>>2]|0;if(!Hi){Bi=Si;Ci=Ti;Di=Ui;Ei=Vi;break}Mi=J+52|0;Fi=k[Mi>>2]|0;if((Fi|0)==(Hi|0))lya=Hi;else{Qi=J+56|0;Gi=Fi;do{Fi=Gi+-72|0;k[Mi>>2]=Fi;i[c>>0]=i[d>>0]|0;uF(c,Qi,Fi);Gi=k[Mi>>2]|0}while((Gi|0)!=(Hi|0));lya=k[Pi>>2]|0}OBa(lya);Bi=Si;Ci=Ti;Di=Ui;Ei=Vi}while(0);si=F+48|0;yi=k[si>>2]|0;if(!yi){ti=Bi;ui=Ci;vi=Di;wi=Ei;break}xi=F+52|0;zi=k[xi>>2]|0;if((zi|0)==(yi|0))mya=yi;else{Hi=F+56|0;Gi=zi;do{zi=Gi+-72|0;k[xi>>2]=zi;i[c>>0]=i[d>>0]|0;uF(c,Hi,zi);Gi=k[xi>>2]|0}while((Gi|0)!=(yi|0));mya=k[si>>2]|0}OBa(mya);ti=Bi;ui=Ci;vi=Di;wi=Ei}while(0);ji=k[G>>2]|0;if(!ji){nya=ti;oya=ui;pya=vi;qya=wi;break j}ni=k[hi>>2]|0;if((ni|0)==(ji|0))rya=ji;else{li=ni;while(1){ni=li+-72|0;k[hi>>2]=ni;yi=li+-24|0;Gi=k[yi>>2]|0;if(!Gi)sya=ni;else{xi=li+-20|0;Hi=k[xi>>2]|0;if((Hi|0)==(Gi|0)){tya=ni;uya=Gi}else{ni=li+-16|0;zi=Hi;do{Hi=zi+-72|0;k[xi>>2]=Hi;i[c>>0]=i[d>>0]|0;uF(c,ni,Hi);zi=k[xi>>2]|0}while((zi|0)!=(Gi|0));tya=k[hi>>2]|0;uya=k[yi>>2]|0}OBa(uya);sya=tya}if((sya|0)==(ji|0))break;else li=sya}rya=k[G>>2]|0}OBa(rya);nya=ti;oya=ui;pya=vi;qya=wi;break j}while(0);ki=Hc()|0;li=M;ji=k[G>>2]|0;if(!ji){qi=ki;ri=li;ug=3237;break}Gi=k[hi>>2]|0;if((Gi|0)==(ji|0))vya=ji;else{zi=Gi;while(1){Gi=zi+-72|0;k[hi>>2]=Gi;xi=zi+-24|0;ni=k[xi>>2]|0;if(!ni)wya=Gi;else{si=zi+-20|0;Hi=k[si>>2]|0;if((Hi|0)==(ni|0)){xya=Gi;yya=ni}else{Gi=zi+-16|0;Mi=Hi;do{Hi=Mi+-72|0;k[si>>2]=Hi;i[c>>0]=i[d>>0]|0;uF(c,Gi,Hi);Mi=k[si>>2]|0}while((Mi|0)!=(ni|0));xya=k[hi>>2]|0;yya=k[xi>>2]|0}OBa(yya);wya=xya}if((wya|0)==(ji|0))break;else zi=wya}vya=k[G>>2]|0}OBa(vya);qi=ki;ri=li;ug=3237}while(0);if((ug|0)==3237){nya=gi;oya=1;pya=qi;qya=ri}hi=H+120|0;ii=k[hi>>2]|0;if(ii){ai=H+124|0;oi=k[ai>>2]|0;if((oi|0)==(ii|0))zya=ii;else{zi=H+128|0;ji=oi;do{oi=ji+-72|0;k[ai>>2]=oi;i[c>>0]=i[d>>0]|0;uF(c,zi,oi);ji=k[ai>>2]|0}while((ji|0)!=(ii|0));zya=k[hi>>2]|0}OBa(zya)}ii=H+48|0;ji=k[ii>>2]|0;if(!ji){Aya=nya;Bya=oya;Cya=pya;Dya=qya;break h}ai=H+52|0;zi=k[ai>>2]|0;if((zi|0)==(ji|0))Eya=ji;else{oi=H+56|0;ni=zi;do{zi=ni+-72|0;k[ai>>2]=zi;i[c>>0]=i[d>>0]|0;uF(c,oi,zi);ni=k[ai>>2]|0}while((ni|0)!=(ji|0));Eya=k[ii>>2]|0}OBa(Eya);Aya=nya;Bya=oya;Cya=pya;Dya=qya;break h}while(0);fi=Hc()|0;ji=M;if((H|0)==(pi|0)){Aya=gi;Bya=1;Cya=fi;Dya=ji;break}ni=pi;do{ai=ni+-24|0;oi=k[ai>>2]|0;if(oi){hi=ni+-20|0;zi=k[hi>>2]|0;if((zi|0)==(oi|0))Fya=oi;else{Mi=ni+-16|0;si=zi;do{zi=si+-72|0;k[hi>>2]=zi;i[c>>0]=i[d>>0]|0;uF(c,Mi,zi);si=k[hi>>2]|0}while((si|0)!=(oi|0));Fya=k[ai>>2]|0}OBa(Fya)}ni=ni+-72|0}while((ni|0)!=(H|0));Aya=gi;Bya=1;Cya=fi;Dya=ji}while(0);if((ug|0)==3227){Aya=mh;Bya=1;Cya=ei;Dya=di}Xh=k[Rh>>2]|0;if((Xh|0)==(D|0)){Sf[k[(k[D>>2]|0)+16>>2]&2047](D);Yh=Aya;Zh=Bya;_h=Cya;$h=Dya;break}if(!Xh){Yh=Aya;Zh=Bya;_h=Cya;$h=Dya;break}Sf[k[(k[Xh>>2]|0)+20>>2]&2047](Xh);Yh=Aya;Zh=Bya;_h=Cya;$h=Dya}while(0);Rh=E+120|0;Vh=k[Rh>>2]|0;if(Vh){Sh=E+124|0;Wh=k[Sh>>2]|0;if((Wh|0)==(Vh|0))Gya=Vh;else{Lh=E+128|0;Nh=Wh;do{Wh=Nh+-72|0;k[Sh>>2]=Wh;i[c>>0]=i[d>>0]|0;uF(c,Lh,Wh);Nh=k[Sh>>2]|0}while((Nh|0)!=(Vh|0));Gya=k[Rh>>2]|0}OBa(Gya)}Vh=E+48|0;Nh=k[Vh>>2]|0;if(!Nh){Hh=Yh;Ih=Zh;Jh=_h;Kh=$h;break}Sh=E+52|0;Lh=k[Sh>>2]|0;if((Lh|0)==(Nh|0))Hya=Nh;else{Wh=E+56|0;Mh=Lh;do{Lh=Mh+-72|0;k[Sh>>2]=Lh;i[c>>0]=i[d>>0]|0;uF(c,Wh,Lh);Mh=k[Sh>>2]|0}while((Mh|0)!=(Nh|0));Hya=k[Vh>>2]|0}OBa(Hya);Hh=Yh;Ih=Zh;Jh=_h;Kh=$h}while(0);yh=A+48|0;Eh=k[yh>>2]|0;if(!Eh){zh=Hh;Ah=Ih;Bh=Jh;Ch=Kh;break}Dh=A+52|0;Fh=k[Dh>>2]|0;if((Fh|0)==(Eh|0))Iya=Eh;else{Nh=A+56|0;Mh=Fh;do{Fh=Mh+-72|0;k[Dh>>2]=Fh;i[c>>0]=i[d>>0]|0;uF(c,Nh,Fh);Mh=k[Dh>>2]|0}while((Mh|0)!=(Eh|0));Iya=k[yh>>2]|0}OBa(Iya);zh=Hh;Ah=Ih;Bh=Jh;Ch=Kh}while(0);ph=k[B>>2]|0;if(!ph){Jya=zh;Kya=Ah;Lya=Bh;Mya=Ch;break g}th=k[nh>>2]|0;if((th|0)==(ph|0))Nya=ph;else{rh=th;while(1){th=rh+-72|0;k[nh>>2]=th;Eh=rh+-24|0;Mh=k[Eh>>2]|0;if(!Mh)Oya=th;else{Dh=rh+-20|0;Nh=k[Dh>>2]|0;if((Nh|0)==(Mh|0)){Pya=th;Qya=Mh}else{th=rh+-16|0;Fh=Nh;do{Nh=Fh+-72|0;k[Dh>>2]=Nh;i[c>>0]=i[d>>0]|0;uF(c,th,Nh);Fh=k[Dh>>2]|0}while((Fh|0)!=(Mh|0));Pya=k[nh>>2]|0;Qya=k[Eh>>2]|0}OBa(Qya);Oya=Pya}if((Oya|0)==(ph|0))break;else rh=Oya}Nya=k[B>>2]|0}OBa(Nya);Jya=zh;Kya=Ah;Lya=Bh;Mya=Ch;break g}while(0);qh=Hc()|0;rh=M;ph=k[B>>2]|0;if(!ph){wh=qh;xh=rh;ug=3216;break}Mh=k[nh>>2]|0;if((Mh|0)==(ph|0))Rya=ph;else{Fh=Mh;while(1){Mh=Fh+-72|0;k[nh>>2]=Mh;Dh=Fh+-24|0;th=k[Dh>>2]|0;if(!th)Sya=Mh;else{yh=Fh+-20|0;Nh=k[yh>>2]|0;if((Nh|0)==(th|0)){Tya=Mh;Uya=th}else{Mh=Fh+-16|0;Sh=Nh;do{Nh=Sh+-72|0;k[yh>>2]=Nh;i[c>>0]=i[d>>0]|0;uF(c,Mh,Nh);Sh=k[yh>>2]|0}while((Sh|0)!=(th|0));Tya=k[nh>>2]|0;Uya=k[Dh>>2]|0}OBa(Uya);Sya=Tya}if((Sya|0)==(ph|0))break;else Fh=Sya}Rya=k[B>>2]|0}OBa(Rya);wh=qh;xh=rh;ug=3216}while(0);if((ug|0)==3216){Jya=mh;Kya=1;Lya=wh;Mya=xh}nh=C+120|0;oh=k[nh>>2]|0;if(oh){gh=C+124|0;uh=k[gh>>2]|0;if((uh|0)==(oh|0))Vya=oh;else{Fh=C+128|0;ph=uh;do{uh=ph+-72|0;k[gh>>2]=uh;i[c>>0]=i[d>>0]|0;uF(c,Fh,uh);ph=k[gh>>2]|0}while((ph|0)!=(oh|0));Vya=k[nh>>2]|0}OBa(Vya)}oh=C+48|0;ph=k[oh>>2]|0;if(!ph){Wya=Jya;Xya=Kya;Yya=Lya;Zya=Mya;break e}gh=C+52|0;Fh=k[gh>>2]|0;if((Fh|0)==(ph|0))_ya=ph;else{uh=C+56|0;th=Fh;do{Fh=th+-72|0;k[gh>>2]=Fh;i[c>>0]=i[d>>0]|0;uF(c,uh,Fh);th=k[gh>>2]|0}while((th|0)!=(ph|0));_ya=k[oh>>2]|0}OBa(_ya);Wya=Jya;Xya=Kya;Yya=Lya;Zya=Mya;break e}while(0);lh=Hc()|0;ph=M;if((C|0)==(vh|0)){Wya=mh;Xya=1;Yya=lh;Zya=ph;break}th=vh;do{gh=th+-24|0;uh=k[gh>>2]|0;if(uh){nh=th+-20|0;Fh=k[nh>>2]|0;if((Fh|0)==(uh|0))$ya=uh;else{Sh=th+-16|0;yh=Fh;do{Fh=yh+-72|0;k[nh>>2]=Fh;i[c>>0]=i[d>>0]|0;uF(c,Sh,Fh);yh=k[nh>>2]|0}while((yh|0)!=(uh|0));$ya=k[gh>>2]|0}OBa($ya)}th=th+-72|0}while((th|0)!=(C|0));Wya=mh;Xya=1;Yya=lh;Zya=ph}while(0);if((ug|0)==3206){Wya=og;Xya=1;Yya=kh;Zya=jh}bh=k[Xg>>2]|0;if((bh|0)==(y|0)){Sf[k[(k[y>>2]|0)+16>>2]&2047](y);ch=Wya;dh=Xya;eh=Yya;fh=Zya;break}if(!bh){ch=Wya;dh=Xya;eh=Yya;fh=Zya;break}Sf[k[(k[bh>>2]|0)+20>>2]&2047](bh);ch=Wya;dh=Xya;eh=Yya;fh=Zya}while(0);Xg=z+120|0;$g=k[Xg>>2]|0;if($g){Yg=z+124|0;ah=k[Yg>>2]|0;if((ah|0)==($g|0))aza=$g;else{Rg=z+128|0;Tg=ah;do{ah=Tg+-72|0;k[Yg>>2]=ah;i[c>>0]=i[d>>0]|0;uF(c,Rg,ah);Tg=k[Yg>>2]|0}while((Tg|0)!=($g|0));aza=k[Xg>>2]|0}OBa(aza)}$g=z+48|0;Tg=k[$g>>2]|0;if(!Tg){Ng=ch;Og=dh;Pg=eh;Qg=fh;break}Yg=z+52|0;Rg=k[Yg>>2]|0;if((Rg|0)==(Tg|0))bza=Tg;else{ah=z+56|0;Sg=Rg;do{Rg=Sg+-72|0;k[Yg>>2]=Rg;i[c>>0]=i[d>>0]|0;uF(c,ah,Rg);Sg=k[Yg>>2]|0}while((Sg|0)!=(Tg|0));bza=k[$g>>2]|0}OBa(bza);Ng=ch;Og=dh;Pg=eh;Qg=fh}while(0);Dg=u+48|0;Kg=k[Dg>>2]|0;if(!Kg){Eg=Ng;Gg=Og;Hg=Pg;Ig=Qg;break}Jg=u+52|0;Lg=k[Jg>>2]|0;if((Lg|0)==(Kg|0))cza=Kg;else{Tg=u+56|0;Sg=Lg;do{Lg=Sg+-72|0;k[Jg>>2]=Lg;i[c>>0]=i[d>>0]|0;uF(c,Tg,Lg);Sg=k[Jg>>2]|0}while((Sg|0)!=(Kg|0));cza=k[Dg>>2]|0}OBa(cza);Eg=Ng;Gg=Og;Hg=Pg;Ig=Qg}while(0);rg=k[v>>2]|0;if(!rg){dza=Eg;eza=Gg;fza=Hg;gza=Ig;break d}yg=k[pg>>2]|0;if((yg|0)==(rg|0))hza=rg;else{wg=yg;while(1){yg=wg+-72|0;k[pg>>2]=yg;Kg=wg+-24|0;Sg=k[Kg>>2]|0;if(!Sg)iza=yg;else{Jg=wg+-20|0;Tg=k[Jg>>2]|0;if((Tg|0)==(Sg|0)){jza=yg;kza=Sg}else{yg=wg+-16|0;Lg=Tg;do{Tg=Lg+-72|0;k[Jg>>2]=Tg;i[c>>0]=i[d>>0]|0;uF(c,yg,Tg);Lg=k[Jg>>2]|0}while((Lg|0)!=(Sg|0));jza=k[pg>>2]|0;kza=k[Kg>>2]|0}OBa(kza);iza=jza}if((iza|0)==(rg|0))break;else wg=iza}hza=k[v>>2]|0}OBa(hza);dza=Eg;eza=Gg;fza=Hg;gza=Ig;break d}while(0);vg=Hc()|0;wg=M;rg=k[v>>2]|0;if(!rg){Bg=vg;Cg=wg;ug=3195;break}Sg=k[pg>>2]|0;if((Sg|0)==(rg|0))lza=rg;else{Lg=Sg;while(1){Sg=Lg+-72|0;k[pg>>2]=Sg;Jg=Lg+-24|0;yg=k[Jg>>2]|0;if(!yg)mza=Sg;else{Dg=Lg+-20|0;Tg=k[Dg>>2]|0;if((Tg|0)==(yg|0)){nza=Sg;oza=yg}else{Sg=Lg+-16|0;Yg=Tg;do{Tg=Yg+-72|0;k[Dg>>2]=Tg;i[c>>0]=i[d>>0]|0;uF(c,Sg,Tg);Yg=k[Dg>>2]|0}while((Yg|0)!=(yg|0));nza=k[pg>>2]|0;oza=k[Jg>>2]|0}OBa(oza);mza=nza}if((mza|0)==(rg|0))break;else Lg=mza}lza=k[v>>2]|0}OBa(lza);Bg=vg;Cg=wg;ug=3195}while(0);if((ug|0)==3195){dza=og;eza=1;fza=Bg;gza=Cg}pg=w+120|0;qg=k[pg>>2]|0;if(qg){kg=w+124|0;zg=k[kg>>2]|0;if((zg|0)==(qg|0))pza=qg;else{Lg=w+128|0;rg=zg;do{zg=rg+-72|0;k[kg>>2]=zg;i[c>>0]=i[d>>0]|0;uF(c,Lg,zg);rg=k[kg>>2]|0}while((rg|0)!=(qg|0));pza=k[pg>>2]|0}OBa(pza)}qg=w+48|0;rg=k[qg>>2]|0;if(!rg){qza=dza;rza=eza;sza=fza;tza=gza;break b}kg=w+52|0;Lg=k[kg>>2]|0;if((Lg|0)==(rg|0))uza=rg;else{zg=w+56|0;yg=Lg;do{Lg=yg+-72|0;k[kg>>2]=Lg;i[c>>0]=i[d>>0]|0;uF(c,zg,Lg);yg=k[kg>>2]|0}while((yg|0)!=(rg|0));uza=k[qg>>2]|0}OBa(uza);qza=dza;rza=eza;sza=fza;tza=gza;break b}while(0);ng=Hc()|0;rg=M;if((w|0)==(Ag|0)){qza=og;rza=1;sza=ng;tza=rg}else{yg=Ag;do{kg=yg+-24|0;zg=k[kg>>2]|0;if(zg){pg=yg+-20|0;Lg=k[pg>>2]|0;if((Lg|0)==(zg|0))vza=zg;else{Yg=yg+-16|0;Dg=Lg;do{Lg=Dg+-72|0;k[pg>>2]=Lg;i[c>>0]=i[d>>0]|0;uF(c,Yg,Lg);Dg=k[pg>>2]|0}while((Dg|0)!=(zg|0));vza=k[kg>>2]|0}OBa(vza)}yg=yg+-72|0}while((yg|0)!=(w|0));qza=og;rza=1;sza=ng;tza=rg}}else{rg=Hc()|0;sg=M;tg=rg;ug=3185}while(0);if((ug|0)==3185){qza=n;rza=1;sza=tg;tza=sg}jg=k[$f>>2]|0;if((jg|0)==(s|0)){Sf[k[(k[s>>2]|0)+16>>2]&2047](s);wza=qza;xza=rza;yza=sza;zza=tza;break}if(!jg){wza=qza;xza=rza;yza=sza;zza=tza}else{Sf[k[(k[jg>>2]|0)+20>>2]&2047](jg);wza=qza;xza=rza;yza=sza;zza=tza}}else{jg=Hc()|0;wza=n;xza=1;yza=jg;zza=M}while(0);$f=t+120|0;hg=k[$f>>2]|0;if(hg){eg=t+124|0;ig=k[eg>>2]|0;if((ig|0)==(hg|0))Aza=hg;else{Vf=t+128|0;Xf=ig;do{ig=Xf+-72|0;k[eg>>2]=ig;i[c>>0]=i[d>>0]|0;uF(c,Vf,ig);Xf=k[eg>>2]|0}while((Xf|0)!=(hg|0));Aza=k[$f>>2]|0}OBa(Aza)}hg=t+48|0;Xf=k[hg>>2]|0;if(!Xf){ag=wza;bg=xza;cg=yza;dg=zza}else{eg=t+52|0;Vf=k[eg>>2]|0;if((Vf|0)==(Xf|0))Bza=Xf;else{ig=t+56|0;Wf=Vf;do{Vf=Wf+-72|0;k[eg>>2]=Vf;i[c>>0]=i[d>>0]|0;uF(c,ig,Vf);Wf=k[eg>>2]|0}while((Wf|0)!=(Xf|0));Bza=k[hg>>2]|0}OBa(Bza);ag=wza;bg=xza;cg=yza;dg=zza}}else{Xf=Hc()|0;ag=n;bg=1;cg=Xf;dg=M}while(0);Pf=o+48|0;Nf=k[Pf>>2]|0;if(!Nf){Cza=ag;Dza=bg;Eza=cg;Fza=dg}else{Of=o+52|0;Rf=k[Of>>2]|0;if((Rf|0)==(Nf|0))Gza=Nf;else{Qf=o+56|0;Tf=Rf;do{Rf=Tf+-72|0;k[Of>>2]=Rf;i[c>>0]=i[d>>0]|0;uF(c,Qf,Rf);Tf=k[Of>>2]|0}while((Tf|0)!=(Nf|0));Gza=k[Pf>>2]|0}OBa(Gza);Cza=ag;Dza=bg;Eza=cg;Fza=dg}}else{Nf=Hc()|0;Cza=n;Dza=1;Eza=Nf;Fza=M}Nf=k[p>>2]|0;if(!Nf){Hza=Cza;Iza=Dza;Jza=Eza;Kza=Fza;break}Tf=k[Lf>>2]|0;if((Tf|0)==(Nf|0))Lza=Nf;else{Of=Tf;while(1){Tf=Of+-72|0;k[Lf>>2]=Tf;Qf=Of+-24|0;Rf=k[Qf>>2]|0;if(!Rf)Mza=Tf;else{Xf=Of+-20|0;Wf=k[Xf>>2]|0;if((Wf|0)==(Rf|0)){Nza=Tf;Oza=Rf}else{Tf=Of+-16|0;eg=Wf;do{Wf=eg+-72|0;k[Xf>>2]=Wf;i[c>>0]=i[d>>0]|0;uF(c,Tf,Wf);eg=k[Xf>>2]|0}while((eg|0)!=(Rf|0));Nza=k[Lf>>2]|0;Oza=k[Qf>>2]|0}OBa(Oza);Mza=Nza}if((Mza|0)==(Nf|0))break;else Of=Mza}Lza=k[p>>2]|0}OBa(Lza);Hza=Cza;Iza=Dza;Jza=Eza;Kza=Fza;break}}Of=Hc()|0;Nf=M;Pf=k[p>>2]|0;if(!Pf){Pza=Of;Qza=Nf;ug=3174}else{Rf=k[Lf>>2]|0;if((Rf|0)==(Pf|0))Rza=Pf;else{eg=Rf;while(1){Rf=eg+-72|0;k[Lf>>2]=Rf;Xf=eg+-24|0;Tf=k[Xf>>2]|0;if(!Tf)Sza=Rf;else{hg=eg+-20|0;Wf=k[hg>>2]|0;if((Wf|0)==(Tf|0)){Tza=Rf;Uza=Tf}else{Rf=eg+-16|0;ig=Wf;do{Wf=ig+-72|0;k[hg>>2]=Wf;i[c>>0]=i[d>>0]|0;uF(c,Rf,Wf);ig=k[hg>>2]|0}while((ig|0)!=(Tf|0));Tza=k[Lf>>2]|0;Uza=k[Xf>>2]|0}OBa(Uza);Sza=Tza}if((Sza|0)==(Pf|0))break;else eg=Sza}Rza=k[p>>2]|0}OBa(Rza);Pza=Of;Qza=Nf;ug=3174}}else{eg=Hc()|0;Pza=eg;Qza=M;ug=3174}while(0);if((ug|0)==3174){Hza=n;Iza=1;Jza=Pza;Kza=Qza}Lf=q+120|0;Kf=k[Lf>>2]|0;if(Kf){Mf=q+124|0;If=k[Mf>>2]|0;if((If|0)==(Kf|0))Vza=Kf;else{eg=q+128|0;Pf=If;do{If=Pf+-72|0;k[Mf>>2]=If;i[c>>0]=i[d>>0]|0;uF(c,eg,If);Pf=k[Mf>>2]|0}while((Pf|0)!=(Kf|0));Vza=k[Lf>>2]|0}OBa(Vza)}Kf=q+48|0;Pf=k[Kf>>2]|0;if(!Pf){Wza=Hza;Xza=Iza;Yza=Jza;Zza=Kza;ug=5546}else{Mf=q+52|0;eg=k[Mf>>2]|0;if((eg|0)==(Pf|0))_za=Pf;else{If=q+56|0;Tf=eg;do{eg=Tf+-72|0;k[Mf>>2]=eg;i[c>>0]=i[d>>0]|0;uF(c,If,eg);Tf=k[Mf>>2]|0}while((Tf|0)!=(Pf|0));_za=k[Kf>>2]|0}OBa(_za);Wza=Hza;Xza=Iza;Yza=Jza;Zza=Kza;ug=5546}}else{$za=Jf;ug=3165}}else{$za=q;ug=3165}while(0);if((ug|0)==3165){Kza=Hc()|0;Jza=M;if((q|0)==($za|0)){Wza=n;Xza=1;Yza=Kza;Zza=Jza;ug=5546}else{Iza=$za;do{$za=Iza+-24|0;Hza=k[$za>>2]|0;if(Hza){_za=Iza+-20|0;Vza=k[_za>>2]|0;if((Vza|0)==(Hza|0))aAa=Hza;else{Qza=Iza+-16|0;Pza=Vza;do{Vza=Pza+-72|0;k[_za>>2]=Vza;i[c>>0]=i[d>>0]|0;uF(c,Qza,Vza);Pza=k[_za>>2]|0}while((Pza|0)!=(Hza|0));aAa=k[$za>>2]|0}OBa(aAa)}Iza=Iza+-72|0}while((Iza|0)!=(q|0));Wza=n;Xza=1;Yza=Kza;Zza=Jza;ug=5546}}if((ug|0)==5546)if((n|0)==(Wza|0)|Xza^1){IU=Yza;JU=Zza}else{Xza=Wza;do{Wza=k[Xza+-8>>2]|0;if((Wza|0)!=(Xza+-24|0)){if(Wza)Sf[k[(k[Wza>>2]|0)+20>>2]&2047](Wza)}else Sf[k[(k[Wza>>2]|0)+16>>2]&2047](Wza);Wza=Xza+-48|0;ug=k[Wza>>2]|0;if(ug){Jza=Xza+-44|0;Kza=k[Jza>>2]|0;if((Kza|0)==(ug|0))bAa=ug;else{q=Xza+-40|0;Iza=Kza;do{Kza=Iza+-72|0;k[Jza>>2]=Kza;i[c>>0]=i[d>>0]|0;uF(c,q,Kza);Iza=k[Jza>>2]|0}while((Iza|0)!=(ug|0));bAa=k[Wza>>2]|0}OBa(bAa)}Xza=Xza+-96|0}while((Xza|0)!=(n|0));IU=Yza;JU=Zza}Zza=k[xf>>2]|0;if(Zza){JU=l+52|0;Yza=k[JU>>2]|0;if((Yza|0)==(Zza|0))cAa=Zza;else{n=l+56|0;l=Yza;do{Yza=l+-72|0;k[JU>>2]=Yza;i[c>>0]=i[d>>0]|0;uF(c,n,Yza);l=k[JU>>2]|0}while((l|0)!=(Zza|0));cAa=k[xf>>2]|0}OBa(cAa)}cAa=k[wf>>2]|0;if(cAa){xf=j+52|0;Zza=k[xf>>2]|0;if((Zza|0)==(cAa|0))dAa=cAa;else{l=j+56|0;j=Zza;do{Zza=j+-72|0;k[xf>>2]=Zza;i[c>>0]=i[d>>0]|0;uF(c,l,Zza);j=k[xf>>2]|0}while((j|0)!=(cAa|0));dAa=k[wf>>2]|0}OBa(dAa)}dAa=k[uf>>2]|0;if(dAa){wf=h+52|0;cAa=k[wf>>2]|0;if((cAa|0)==(dAa|0))eAa=dAa;else{j=h+56|0;h=cAa;do{cAa=h+-72|0;k[wf>>2]=cAa;i[c>>0]=i[d>>0]|0;uF(c,j,cAa);h=k[wf>>2]|0}while((h|0)!=(dAa|0));eAa=k[uf>>2]|0}OBa(eAa)}eAa=k[sf>>2]|0;if(eAa){uf=g+52|0;dAa=k[uf>>2]|0;if((dAa|0)==(eAa|0))fAa=eAa;else{h=g+56|0;g=dAa;do{dAa=g+-72|0;k[uf>>2]=dAa;i[c>>0]=i[d>>0]|0;uF(c,h,dAa);g=k[uf>>2]|0}while((g|0)!=(eAa|0));fAa=k[sf>>2]|0}OBa(fAa)}fAa=k[qf>>2]|0;if(fAa){sf=f+52|0;eAa=k[sf>>2]|0;if((eAa|0)==(fAa|0))gAa=fAa;else{g=f+56|0;f=eAa;do{eAa=f+-72|0;k[sf>>2]=eAa;i[c>>0]=i[d>>0]|0;uF(c,g,eAa);f=k[sf>>2]|0}while((f|0)!=(fAa|0));gAa=k[qf>>2]|0}OBa(gAa)}gAa=k[of>>2]|0;if(!gAa){CF(lf);hAa=k[kf>>2]|0;vF(a,hAa);Sc(IU|0)}qf=e+52|0;fAa=k[qf>>2]|0;if((fAa|0)==(gAa|0))iAa=gAa;else{f=e+56|0;e=fAa;do{fAa=e+-72|0;k[qf>>2]=fAa;i[c>>0]=i[d>>0]|0;uF(c,f,fAa);e=k[qf>>2]|0}while((e|0)!=(gAa|0));iAa=k[of>>2]|0}OBa(iAa);CF(lf);hAa=k[kf>>2]|0;vF(a,hAa);Sc(IU|0)} -function LD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=b+4|0;b=k[d>>2]|0;a:do if(!b)e=d;else{f=d;g=b;b:while(1){h=g;c:while(1){j=0;while(1){l=i[c+j>>0]|0;m=i[h+16+j>>0]|0;if((l&255)<(m&255)){n=h;break c}j=j+1|0;if(!(j>>>0<32&(l&255)<=(m&255))){o=0;break}}while(1){j=i[h+16+o>>0]|0;m=i[c+o>>0]|0;if((j&255)<(m&255))break;o=o+1|0;if(!(o>>>0<32&(j&255)<=(m&255))){p=f;q=h;break b}}h=k[h+4>>2]|0;if(!h){e=f;break a}}g=k[n>>2]|0;if(!g){e=n;break a}else f=n}f=k[q>>2]|0;d:do if(!f)r=q;else{g=q;h=f;while(1){m=h;e:while(1){j=0;while(1){l=i[m+16+j>>0]|0;s=i[c+j>>0]|0;if((l&255)<(s&255))break;j=j+1|0;if(!(j>>>0<32&(l&255)<=(s&255))){t=m;break e}}m=k[m+4>>2]|0;if(!m){r=g;break d}}h=k[t>>2]|0;if(!h){r=t;break}else g=t}}while(0);f=r;g=k[q+4>>2]|0;f:do if(!g)u=p;else{h=p;m=g;while(1){j=m;g:while(1){s=0;do{l=i[c+s>>0]|0;v=i[j+16+s>>0]|0;if((l&255)<(v&255)){w=j;break g}s=s+1|0}while(s>>>0<32&(l&255)<=(v&255));j=k[j+4>>2]|0;if(!j){u=h;break f}}m=k[w>>2]|0;if(!m){u=w;break}else h=w}}while(0);k[a>>2]=f;k[a+4>>2]=u;return}while(0);u=e;k[a>>2]=u;k[a+4>>2]=u;return}function MD(a,b){a=a|0;b=b|0;if(!b)return;else{MD(a,k[b>>2]|0);MD(a,k[b+4>>2]|0);OBa(b);return}}function ND(a){a=a|0;c0a(a);OBa(a);return}function OD(a){a=a|0;return}function PD(a){a=a|0;OBa(a);return}function QD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=KBa(16)|0;k[g>>2]=21048;x=0;xa(604,g+4|0,b+4|0);b=x;x=0;if(b&1){b=Hc()|0;h=M;OBa(g);i=h;j=b;Sc(j|0)}k[d>>2]=g;b=d+4|0;k[b>>2]=0;x=0;fb(151,d|0,g|0,b|0);g=x;x=0;if(g&1){g=Hc()|0;h=k[b>>2]|0;if(!h)Sc(g|0);b=h+4|0;l=k[b>>2]|0;k[b>>2]=l+-1;if((l|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);l=x;x=0;if(l&1){m=Hc(0)|0;n=M;Fg(m)}l=h+8|0;b=k[l>>2]|0;k[l>>2]=b+-1;if((b|0)!=1)Sc(g|0);x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(h&1){m=Hc(0)|0;n=M;Fg(m)}else Sc(g|0)}g=a+(k[(k[a>>2]|0)+-28>>2]|0)+4|0;m=k[g>>2]|0;do if(!m){x=0;n=Ba(563,32)|0;h=x;x=0;if(h&1){h=Hc()|0;o=M;p=h;q=d+4|0;break}else{k[n>>2]=21100;h=n+8|0;k[h>>2]=0;k[n+12>>2]=0;k[n+4>>2]=h;h=n+16|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[g>>2]=n;k[n+28>>2]=1;s=n;t=15;break}}else{s=m;t=15}while(0);do if((t|0)==15){m=k[(k[s>>2]|0)+8>>2]|0;k[e>>2]=k[d>>2];g=e+4|0;n=d+4|0;h=k[n>>2]|0;k[g>>2]=h;if(h){b=h+4|0;k[b>>2]=(k[b>>2]|0)+1}k[f>>2]=248;x=0;fb(m|0,s|0,e|0,f|0);m=x;x=0;if(m&1){m=Hc()|0;b=M;h=k[g>>2]|0;if(!h){o=b;p=m;q=n;break}l=h+4|0;u=k[l>>2]|0;k[l>>2]=u+-1;if((u|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+8>>2]|0,h|0);u=x;x=0;if(u&1){v=Hc(0)|0;w=M;Fg(v)}u=h+8|0;l=k[u>>2]|0;k[u>>2]=l+-1;if((l|0)!=1){o=b;p=m;q=n;break}x=0;va(k[(k[h>>2]|0)+12>>2]|0,h|0);h=x;x=0;if(!(h&1)){o=b;p=m;q=n;break}v=Hc(0)|0;w=M;Fg(v)}m=k[g>>2]|0;if((m|0)!=0?(g=m+4|0,b=k[g>>2]|0,k[g>>2]=b+-1,(b|0)==1):0){x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);b=x;x=0;if(b&1){y=Hc(0)|0;z=M;Fg(y)}b=m+8|0;g=k[b>>2]|0;k[b>>2]=g+-1;if((g|0)==1?(x=0,va(k[(k[m>>2]|0)+12>>2]|0,m|0),m=x,x=0,m&1):0){y=Hc(0)|0;z=M;Fg(y)}}m=k[n>>2]|0;if(!m){r=c;return a|0}n=m+4|0;g=k[n>>2]|0;k[n>>2]=g+-1;if((g|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+8>>2]|0,m|0);g=x;x=0;if(g&1){A=Hc(0)|0;B=M;Fg(A)}g=m+8|0;n=k[g>>2]|0;k[g>>2]=n+-1;if((n|0)!=1){r=c;return a|0}x=0;va(k[(k[m>>2]|0)+12>>2]|0,m|0);m=x;x=0;if(m&1){A=Hc(0)|0;B=M;Fg(A)}else{r=c;return a|0}}while(0);a=k[q>>2]|0;if(!a){i=o;j=p;Sc(j|0)}q=a+4|0;c=k[q>>2]|0;k[q>>2]=c+-1;if((c|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+8>>2]|0,a|0);c=x;x=0;if(c&1){C=Hc(0)|0;D=M;Fg(C)}c=a+8|0;q=k[c>>2]|0;k[c>>2]=q+-1;if((q|0)!=1){i=o;j=p;Sc(j|0)}x=0;va(k[(k[a>>2]|0)+12>>2]|0,a|0);a=x;x=0;if(a&1){C=Hc(0)|0;D=M;Fg(C)}else{i=o;j=p;Sc(j|0)}return 0}function RD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=26940;h=g+-4|0;k[h>>2]=26968;n=g+16|0;k[n>>2]=26992;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=26884;k[c>>2]=26848;k[f>>2]=26908;x=0;xa(706,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,2576,352);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=26940;k[h>>2]=26968;k[n>>2]=26992;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=27024;h=g+-4|0;k[h>>2]=27052;i=g+16|0;k[i>>2]=27076;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=27160;k[a>>2]=27116;k[a+20>>2]=27184;k[a+40>>2]=27212;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=27024;k[h>>2]=27052;k[i>>2]=27076;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function TD(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=27024;k[b+-4>>2]=27052;k[b+16>>2]=27076;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function UD(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=27024;k[b+-4>>2]=27052;k[b+16>>2]=27076;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function VD(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(207,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function WD(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(707,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,2576,352)}function XD(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=27024;k[a+-4>>2]=27052;k[a+16>>2]=27076;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function YD(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=27024;k[a+-4>>2]=27052;k[a+16>>2]=27076;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function ZD(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(207,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function _D(a){a=a|0;WD(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function $D(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=27024;k[a+-4>>2]=27052;k[a+16>>2]=27076;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function aE(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=27024;k[a+-4>>2]=27052;k[a+16>>2]=27076;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function bE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=27024;h=g+-4|0;k[h>>2]=27052;i=g+16|0;k[i>>2]=27076;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=27160;k[a>>2]=27116;k[a+20>>2]=27184;k[a+40>>2]=27212;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=27024;k[h>>2]=27052;k[i>>2]=27076;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=27024;k[h+-4>>2]=27052;k[h+16>>2]=27076;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=27160;k[a>>2]=27116;k[d>>2]=27184;k[a+40>>2]=27212;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function dE(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=26940;k[b+-4>>2]=26968;k[b+16>>2]=26992;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function eE(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=26940;k[b+-4>>2]=26968;k[b+16>>2]=26992;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function fE(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=26940;k[a+-4>>2]=26968;k[a+16>>2]=26992;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function gE(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=26940;k[a+-4>>2]=26968;k[a+16>>2]=26992;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function hE(a){a=a|0;var b=0,c=0;k[a>>2]=26664;b=a+64|0;k[b>>2]=26704;k[a+8>>2]=26684;c=a+12|0;k[c>>2]=20392;K2a(a+44|0);obb(c);mab(b);return}function iE(a){a=a|0;var b=0,c=0;k[a>>2]=26664;b=a+64|0;k[b>>2]=26704;k[a+8>>2]=26684;c=a+12|0;k[c>>2]=20392;K2a(a+44|0);obb(c);mab(b);OBa(a);return}function jE(a){a=a|0;var b=0,c=0;b=a+-8|0;k[b>>2]=26664;a=b+64|0;k[a>>2]=26704;k[b+8>>2]=26684;c=b+12|0;k[c>>2]=20392;K2a(b+44|0);obb(c);mab(a);return}function kE(a){a=a|0;var b=0,c=0;b=a+-8|0;k[b>>2]=26664;a=b+64|0;k[a>>2]=26704;k[b+8>>2]=26684;c=b+12|0;k[c>>2]=20392;K2a(b+44|0);obb(c);mab(a);OBa(b);return}function lE(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=26664;a=b+64|0;k[a>>2]=26704;k[b+8>>2]=26684;c=b+12|0;k[c>>2]=20392;K2a(b+44|0);obb(c);mab(a);return}function mE(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=26664;a=b+64|0;k[a>>2]=26704;k[b+8>>2]=26684;c=b+12|0;k[c>>2]=20392;K2a(b+44|0);obb(c);mab(a);OBa(b);return}function nE(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;b=r;r=r+48|0;c=b;b=Rd(44)|0;k[c>>2]=47404;d=k[a>>2]|0;e=a+(k[d+-28>>2]|0)|0;f=c+20|0;k[f>>2]=20796;g=k[e+4>>2]|0;k[c+24>>2]=g;do if(g){x=0;va(k[(k[g>>2]|0)+12>>2]|0,g|0);h=x;x=0;if(h&1){h=Hc()|0;i=M;j=h;l=13;break}else{m=k[a>>2]|0;l=4;break}}else{m=d;l=4}while(0);do if((l|0)==4){d=c+28|0;g=e+8|0;k[d>>2]=k[g>>2];k[d+4>>2]=k[g+4>>2];k[d+8>>2]=k[g+8>>2];g=c+4|0;d=a+(k[m+-20>>2]|0)|0;k[g>>2]=26592;h=g+-4|0;k[h>>2]=26620;n=g+16|0;k[n>>2]=26644;o=c+8|0;x=0;xa(604,o|0,d+4|0);d=x;x=0;if(d&1){d=Hc()|0;p=M;k[f>>2]=20796;q=c+24|0;s=k[q>>2]|0;if(!s){i=p;j=d;l=13;break}x=0;t=Ba(k[(k[s>>2]|0)+16>>2]|0,s|0)|0;s=x;x=0;if(s&1){s=Hc(0)|0;Fg(s)}if(!t){i=p;j=d;l=13;break}k[q>>2]=0;i=p;j=d;l=13;break}k[c+4>>2]=26536;k[c>>2]=26500;k[f>>2]=26560;x=0;xa(708,b|0,c|0);d=x;x=0;if(d&1)u=1;else{x=0;fb(149,b|0,2624,366);x=0;u=0}d=Hc()|0;p=M;k[g>>2]=26592;k[h>>2]=26620;k[n>>2]=26644;K2a(o);k[f>>2]=20796;o=c+24|0;n=k[o>>2]|0;if(n){x=0;h=Ba(k[(k[n>>2]|0)+16>>2]|0,n|0)|0;n=x;x=0;if(n&1){n=Hc(0)|0;Fg(n)}if(h)k[o>>2]=0}if(u){v=p;w=d}else{y=p;z=d;Sc(z|0)}}while(0);if((l|0)==13){v=i;w=j}Fc(b|0);y=v;z=w;Sc(z|0)}function oE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=27352;h=g+-4|0;k[h>>2]=27380;i=g+16|0;k[i>>2]=27404;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=27488;k[a>>2]=27444;k[a+20>>2]=27512;k[a+40>>2]=27540;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=27352;k[h>>2]=27380;k[i>>2]=27404;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function pE(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=27352;k[b+-4>>2]=27380;k[b+16>>2]=27404;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function qE(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=27352;k[b+-4>>2]=27380;k[b+16>>2]=27404;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function rE(a){a=a|0;return 217959}function sE(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(208,d|0,a|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(d);Sc(c|0)}else{r=b;return d+(k[(k[d>>2]|0)+-32>>2]|0)|0}return 0}function tE(a){a=a|0;var b=0;b=Rd(44)|0;x=0;xa(709,b|0,a|0);a=x;x=0;if(a&1){a=Hc()|0;Fc(b|0);Sc(a|0)}else Gf(b|0,2624,366)}function uE(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=27352;k[a+-4>>2]=27380;k[a+16>>2]=27404;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function vE(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=27352;k[a+-4>>2]=27380;k[a+16>>2]=27404;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function wE(a){a=a|0;return 217959}function xE(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+1|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=KBa(44)|0;x=0;i[c>>0]=i[b>>0]|0;fb(208,a|0,d|0,c|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(a);Sc(c|0)}else{r=b;return a+(k[(k[a>>2]|0)+-32>>2]|0)|0}return 0}function yE(a){a=a|0;tE(a+(k[(k[a>>2]|0)+-16>>2]|0)|0)}function zE(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=27352;k[a+-4>>2]=27380;k[a+16>>2]=27404;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function AE(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-20>>2]|0)|0;a=b+4|0;k[a>>2]=27352;k[a+-4>>2]=27380;k[a+16>>2]=27404;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c;e=a+20|0;f=a+24|0;k[f>>2]=0;k[a+28>>2]=0;k[a+32>>2]=0;k[a+36>>2]=-1;g=a+4|0;k[g>>2]=27352;h=g+-4|0;k[h>>2]=27380;i=g+16|0;k[i>>2]=27404;j=a+8|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;K2a(d);k[a+4>>2]=27488;k[a>>2]=27444;k[a+20>>2]=27512;k[a+40>>2]=27540;x=0;xa(608,e|0,b+(k[(k[b>>2]|0)+-28>>2]|0)|0);b=x;x=0;if(!(b&1)){r=c;return}c=Hc()|0;k[g>>2]=27352;k[h>>2]=27380;k[i>>2]=27404;K2a(j);k[e>>2]=20796;e=k[f>>2]|0;if(!e)Sc(c|0);x=0;j=Ba(k[(k[e>>2]|0)+16>>2]|0,e|0)|0;e=x;x=0;if(e&1){e=Hc(0)|0;Fg(e)}if(!j)Sc(c|0);k[f>>2]=0;Sc(c|0)}function CE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;k[a>>2]=47404;c=b+(k[(k[b>>2]|0)+-28>>2]|0)|0;d=a+20|0;k[d>>2]=20796;e=k[c+4>>2]|0;k[a+24>>2]=e;if((e|0)!=0?(x=0,va(k[(k[e>>2]|0)+12>>2]|0,e|0),e=x,x=0,e&1):0){e=Hc()|0;f=M;g=e;Sc(g|0)}e=a+28|0;h=c+8|0;k[e>>2]=k[h>>2];k[e+4>>2]=k[h+4>>2];k[e+8>>2]=k[h+8>>2];h=a+4|0;e=b+(k[(k[b>>2]|0)+-20>>2]|0)|0;k[h>>2]=27352;k[h+-4>>2]=27380;k[h+16>>2]=27404;x=0;xa(604,a+8|0,e+4|0);e=x;x=0;if(!(e&1)){k[a+4>>2]=27488;k[a>>2]=27444;k[d>>2]=27512;k[a+40>>2]=27540;return}e=Hc()|0;h=M;k[d>>2]=20796;d=a+24|0;a=k[d>>2]|0;if(!a){f=h;g=e;Sc(g|0)}x=0;b=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!b){f=h;g=e;Sc(g|0)}k[d>>2]=0;f=h;g=e;Sc(g|0)}function DE(a){a=a|0;var b=0,c=0;b=a+4|0;k[b>>2]=26592;k[b+-4>>2]=26620;k[b+16>>2]=26644;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;a=k[b>>2]|0;if(!a)return;x=0;c=Ba(k[(k[a>>2]|0)+16>>2]|0,a|0)|0;a=x;x=0;if(a&1){a=Hc(0)|0;Fg(a)}if(!c)return;k[b>>2]=0;return}function EE(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;k[b>>2]=26592;k[b+-4>>2]=26620;k[b+16>>2]=26644;K2a(a+8|0);k[a+20>>2]=20796;b=a+24|0;c=k[b>>2]|0;if(!c){OBa(a);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(a);return}k[b>>2]=0;OBa(a);return}function FE(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=26592;k[a+-4>>2]=26620;k[a+16>>2]=26644;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;b=k[a>>2]|0;if(!b)return;x=0;c=Ba(k[(k[b>>2]|0)+16>>2]|0,b|0)|0;b=x;x=0;if(b&1){b=Hc(0)|0;Fg(b)}if(!c)return;k[a>>2]=0;return}function GE(a){a=a|0;var b=0,c=0,d=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;a=b+4|0;k[a>>2]=26592;k[a+-4>>2]=26620;k[a+16>>2]=26644;K2a(b+8|0);k[b+20>>2]=20796;a=b+24|0;c=k[a>>2]|0;if(!c){OBa(b);return}x=0;d=Ba(k[(k[c>>2]|0)+16>>2]|0,c|0)|0;c=x;x=0;if(c&1){c=Hc(0)|0;Fg(c)}if(!d){OBa(b);return}k[a>>2]=0;OBa(b);return}function HE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;k[a>>2]=k[b>>2];c=a+4|0;d=b+4|0;k[c>>2]=0;e=a+8|0;k[e>>2]=0;k[a+12>>2]=0;k[c>>2]=k[d>>2];c=b+8|0;k[e>>2]=k[c>>2];e=b+12|0;k[a+12>>2]=k[e>>2];k[e>>2]=0;k[c>>2]=0;k[d>>2]=0;d=a+16|0;c=b+16|0;k[d>>2]=k[c>>2];e=k[b+20>>2]|0;k[a+20>>2]=e;f=b+24|0;g=k[f>>2]|0;k[a+24>>2]=g;h=a+20|0;if(!g)k[d>>2]=h;else{k[e+8>>2]=h;h=b+20|0;k[c>>2]=h;k[h>>2]=0;k[f>>2]=0}f=a+28|0;h=b+28|0;k[f>>2]=0;c=a+32|0;k[c>>2]=0;k[a+36>>2]=0;k[f>>2]=k[h>>2];f=b+32|0;k[c>>2]=k[f>>2];c=b+36|0;k[a+36>>2]=k[c>>2];k[c>>2]=0;k[f>>2]=0;k[h>>2]=0;h=a+40|0;f=b+40|0;k[h>>2]=k[f>>2];c=k[b+44>>2]|0;k[a+44>>2]=c;e=b+48|0;d=k[e>>2]|0;k[a+48>>2]=d;g=a+44|0;if(!d)k[h>>2]=g;else{k[c+8>>2]=g;g=b+44|0;k[f>>2]=g;k[g>>2]=0;k[e>>2]=0}e=a+52|0;g=b+52|0;k[e>>2]=k[g>>2];f=k[b+56>>2]|0;k[a+56>>2]=f;c=b+60|0;h=k[c>>2]|0;k[a+60>>2]=h;d=a+56|0;if(!h)k[e>>2]=d;else{k[f+8>>2]=d;d=b+56|0;k[g>>2]=d;k[d>>2]=0;k[c>>2]=0}c=a+64|0;d=b+64|0;k[c>>2]=0;g=a+68|0;k[g>>2]=0;k[a+72>>2]=0;k[c>>2]=k[d>>2];c=b+68|0;k[g>>2]=k[c>>2];g=b+72|0;k[a+72>>2]=k[g>>2];k[g>>2]=0;k[c>>2]=0;k[d>>2]=0;d=a+76|0;c=b+76|0;k[d>>2]=k[c>>2];g=k[b+80>>2]|0;k[a+80>>2]=g;f=b+84|0;e=k[f>>2]|0;k[a+84>>2]=e;h=a+80|0;if(!e){k[d>>2]=h;i=a+88|0;j=b+88|0;k[i>>2]=k[j>>2];k[i+4>>2]=k[j+4>>2];k[i+8>>2]=k[j+8>>2];l=a+100|0;m=b+100|0;n=k[m>>2]|0;k[l>>2]=n;o=a+104|0;p=b+104|0;q=k[p>>2]|0;k[o>>2]=q;r=a+108|0;s=b+108|0;t=k[s>>2]|0;k[r>>2]=t;u=a+112|0;v=b+112|0;w=k[v>>2]|0;k[u>>2]=w;k[s>>2]=0;k[v>>2]=0;return}else{k[g+8>>2]=h;h=b+80|0;k[c>>2]=h;k[h>>2]=0;k[f>>2]=0;i=a+88|0;j=b+88|0;k[i>>2]=k[j>>2];k[i+4>>2]=k[j+4>>2];k[i+8>>2]=k[j+8>>2];l=a+100|0;m=b+100|0;n=k[m>>2]|0;k[l>>2]=n;o=a+104|0;p=b+104|0;q=k[p>>2]|0;k[o>>2]=q;r=a+108|0;s=b+108|0;t=k[s>>2]|0;k[r>>2]=t;u=a+112|0;v=b+112|0;w=k[v>>2]|0;k[u>>2]=w;k[s>>2]=0;k[v>>2]=0;return}}function IE(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=k[a+112>>2]|0;if(b)j0a(b);Ci(a+76|0,k[a+80>>2]|0);b=k[a+64>>2]|0;if(b){c=a+68|0;if((k[c>>2]|0)!=(b|0))k[c>>2]=b;OBa(b)}JE(a+52|0,k[a+56>>2]|0);JE(a+40|0,k[a+44>>2]|0);b=a+28|0;c=k[b>>2]|0;if(c){d=a+32|0;e=k[d>>2]|0;if((e|0)==(c|0))f=c;else{g=e;do{e=g+-116|0;k[d>>2]=e;IE(e);g=k[d>>2]|0}while((g|0)!=(c|0));f=k[b>>2]|0}OBa(f)}KE(a+16|0,k[a+20>>2]|0);f=a+4|0;b=k[f>>2]|0;if(!b)return;c=a+8|0;a=k[c>>2]|0;if((a|0)==(b|0))h=b;else{g=a;do{k[c>>2]=g+-80;a=k[g+-8>>2]|0;if(a)j0a(a);a=k[g+-20>>2]|0;if(a)j0a(a);g=k[c>>2]|0}while((g|0)!=(b|0));h=k[f>>2]|0}OBa(h);return}function JE(a,b){a=a|0;b=b|0;if(!b)return;else{JE(a,k[b>>2]|0);JE(a,k[b+4>>2]|0);K2a(b+48|0);OBa(b);return}}function KE(a,b){a=a|0;b=b|0;var c=0;if(!b)return;KE(a,k[b>>2]|0);KE(a,k[b+4>>2]|0);a=k[b+48>>2]|0;if(a){c=b+52|0;if((k[c>>2]|0)!=(a|0))k[c>>2]=a;OBa(a)}OBa(b);return}function LE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=r;r=r+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d;vD(h,a,c);c=k[h>>2]|0;k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=SE(a,e,f,c+16|0)|0;e=k[g>>2]|0;if(e){k[h>>2]=0;if((e|0)==(c|0))j=e;else{if(!c){l=e;r=d;return l|0}if((i[h+8>>0]|0)!=0?(b=k[c+48>>2]|0,(b|0)!=0):0){m=c+52|0;if((k[m>>2]|0)!=(b|0))k[m>>2]=b;OBa(b)}OBa(c);l=e;r=d;return l|0}}else{e=k[f>>2]|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=e;k[g>>2]=c;e=k[k[a>>2]>>2]|0;if(!e)n=c;else{k[a>>2]=e;n=k[g>>2]|0}ui(k[a+4>>2]|0,n);n=a+8|0;k[n>>2]=(k[n>>2]|0)+1;k[h>>2]=0;j=c}k[h>>2]=0;l=j;r=d;return l|0}function ME(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;k[a>>2]=0;c=a+4|0;k[c>>2]=0;k[a+8>>2]=0;d=b+4|0;e=k[d>>2]|0;f=k[b>>2]|0;g=e-f|0;h=(g|0)/116|0;if((e|0)==(f|0))return;if(h>>>0>37025580?(x=0,va(1473,a|0),f=x,x=0,f&1):0)i=10;else i=4;do if((i|0)==4){x=0;f=Ba(563,g|0)|0;e=x;x=0;if(!(e&1)){k[c>>2]=f;k[a>>2]=f;k[a+8>>2]=f+(h*116|0);e=k[b>>2]|0;j=k[d>>2]|0;if((e|0)==(j|0))return;l=e;e=f;while(1){x=0;xa(705,e|0,l|0);f=x;x=0;if(f&1){i=9;break}e=(k[c>>2]|0)+116|0;k[c>>2]=e;l=l+116|0;if((l|0)==(j|0)){i=17;break}}if((i|0)==9){j=Hc()|0;m=j;n=M;break}else if((i|0)==17)return}else i=10}while(0);if((i|0)==10){i=Hc()|0;m=i;n=M}n=k[a>>2]|0;if(!n)Sc(m|0);i=k[c>>2]|0;if((i|0)==(n|0))o=n;else{d=i;do{i=d+-116|0;k[c>>2]=i;IE(i);d=k[c>>2]|0}while((d|0)!=(n|0));o=k[a>>2]|0}OBa(o);Sc(m|0)}function NE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(60)|0;j=h+16|0;l=j;m=c;n=l+32|0;do{i[l>>0]=i[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));x=0;xa(604,h+48|0,c+32|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(h);Sc(c|0)}k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=RE(a,e,f,j)|0;j=k[g>>2]|0;if(!j){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)o=h;else{k[a>>2]=e;o=k[g>>2]|0}ui(k[a+4>>2]|0,o);o=a+8|0;k[o>>2]=(k[o>>2]|0)+1;p=h;r=d;return p|0}else{if((j|0)==(h|0)){p=j;r=d;return p|0}K2a(h+48|0);OBa(h);p=j;r=d;return p|0}return 0}function OE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;c=r;r=r+16|0;d=c+4|0;e=c;k[a>>2]=0;f=a+4|0;k[f>>2]=0;k[a+8>>2]=0;g=b+4|0;h=k[g>>2]|0;j=k[b>>2]|0;l=h-j|0;a:do if((h|0)!=(j|0)){if(!((l|0)<0?(x=0,va(1473,a|0),m=x,x=0,m&1):0))n=4;if((n|0)==4?(x=0,m=Ba(563,l|0)|0,o=x,x=0,!(o&1)):0){k[f>>2]=m;k[a>>2]=m;k[a+8>>2]=m+l;o=k[b>>2]|0;p=k[g>>2]|0;if((o|0)==(p|0))break;else{q=o;s=m}while(1){i[s>>0]=i[q>>0]|0;s=(k[f>>2]|0)+1|0;k[f>>2]=s;q=q+1|0;if((q|0)==(p|0))break a}}p=Hc()|0;m=k[a>>2]|0;if(!m)Sc(p|0);if((k[f>>2]|0)!=(m|0))k[f>>2]=m;OBa(m);Sc(p|0)}while(0);q=a+12|0;k[a+16>>2]=0;k[a+20>>2]=0;s=a+16|0;k[q>>2]=s;g=k[b+12>>2]|0;l=b+16|0;if((g|0)==(l|0)){r=c;return}b=s;j=g;h=g;while(1){k[e>>2]=b;x=0;k[d>>2]=k[e>>2];Fa(123,q|0,d|0,j+16|0)|0;g=x;x=0;if(g&1)break;g=k[h+4>>2]|0;if(!g){p=h;while(1){m=k[p+8>>2]|0;if((k[m>>2]|0)==(p|0)){t=m;break}else p=m}}else{p=g;while(1){m=k[p>>2]|0;if(!m){t=p;break}else p=m}}if((t|0)==(l|0)){n=19;break}else{j=t;h=t}}if((n|0)==19){r=c;return}c=Hc()|0;Ci(q,k[s>>2]|0);s=k[a>>2]|0;if(!s)Sc(c|0);if((k[f>>2]|0)!=(s|0))k[f>>2]=s;OBa(s);Sc(c|0)}function PE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;h=KBa(32)|0;i=h+16|0;k[i>>2]=k[c>>2];x=0;xa(604,h+20|0,c+4|0);c=x;x=0;if(c&1){c=Hc()|0;OBa(h);Sc(c|0)}k[g>>2]=k[b>>2];k[e>>2]=k[g>>2];g=QE(a,e,f,i)|0;i=k[g>>2]|0;if(!i){e=k[f>>2]|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=e;k[g>>2]=h;e=k[k[a>>2]>>2]|0;if(!e)j=h;else{k[a>>2]=e;j=k[g>>2]|0}ui(k[a+4>>2]|0,j);j=a+8|0;k[j>>2]=(k[j>>2]|0)+1;l=h;r=d;return l|0}else{if((i|0)==(h|0)){l=i;r=d;return l|0}K2a(h+20|0);OBa(h);l=i;r=d;return l|0}return 0}function QE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=a+4|0;f=k[b>>2]|0;b=f;if((f|0)!=(e|0)?(g=k[d>>2]|0,h=k[f+16>>2]|0,g>>>0>=h>>>0):0){if(h>>>0>=g>>>0){k[c>>2]=b;i=c;return i|0}h=f+4|0;j=k[h>>2]|0;l=(j|0)==0;if(l){m=f;while(1){n=k[m+8>>2]|0;if((k[n>>2]|0)==(m|0)){o=n;break}else m=n}}else{m=j;while(1){j=k[m>>2]|0;if(!j){o=m;break}else m=j}}if((o|0)!=(e|0)?g>>>0>=(k[o+16>>2]|0)>>>0:0){m=k[e>>2]|0;if(!m){k[c>>2]=e;i=e;return i|0}else p=m;while(1){m=k[p+16>>2]|0;if(g>>>0>>0){j=k[p>>2]|0;if(!j){q=p;r=p;s=33;break}else t=j}else{if(m>>>0>=g>>>0){u=p;s=38;break}m=p+4|0;j=k[m>>2]|0;if(!j){v=m;w=p;s=37;break}else t=j}p=t}if((s|0)==33){k[c>>2]=r;i=q;return i|0}else if((s|0)==37){k[c>>2]=w;i=v;return i|0}else if((s|0)==38){k[c>>2]=u;i=c;return i|0}}if(l){k[c>>2]=f;i=h;return i|0}else{k[c>>2]=o;i=o;return i|0}}if((f|0)!=(k[a>>2]|0)){a=k[f>>2]|0;if(!a){o=f;while(1){h=k[o+8>>2]|0;if((k[h>>2]|0)==(o|0))o=h;else{x=h;break}}}else{o=a;while(1){a=k[o+4>>2]|0;if(!a){x=o;break}else o=a}}o=k[d>>2]|0;if((k[x+16>>2]|0)>>>0>=o>>>0){d=k[e>>2]|0;if(!d){k[c>>2]=e;i=e;return i|0}else y=d;while(1){d=k[y+16>>2]|0;if(o>>>0>>0){e=k[y>>2]|0;if(!e){z=y;A=y;s=14;break}else B=e}else{if(d>>>0>=o>>>0){C=y;s=19;break}d=y+4|0;e=k[d>>2]|0;if(!e){D=d;E=y;s=18;break}else B=e}y=B}if((s|0)==14){k[c>>2]=A;i=z;return i|0}else if((s|0)==18){k[c>>2]=E;i=D;return i|0}else if((s|0)==19){k[c>>2]=C;i=c;return i|0}}else F=x}else F=b;if(!(k[f>>2]|0)){k[c>>2]=f;i=f;return i|0}else{f=F;k[c>>2]=f;i=f+4|0;return i|0}return 0}function RE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=a+4|0;f=k[b>>2]|0;b=f;a:do if((f|0)!=(e|0)){g=0;while(1){h=i[d+g>>0]|0;j=i[f+16+g>>0]|0;if((h&255)<(j&255))break a;g=g+1|0;if(!(g>>>0<32&(h&255)<=(j&255))){l=0;break}}while(1){g=i[f+16+l>>0]|0;j=i[d+l>>0]|0;if((g&255)<(j&255))break;l=l+1|0;if(!(l>>>0<32&(g&255)<=(j&255))){m=52;break}}if((m|0)==52){k[c>>2]=b;n=c;return n|0}j=f+4|0;g=k[j>>2]|0;h=(g|0)==0;if(h){o=f;while(1){p=k[o+8>>2]|0;if((k[p>>2]|0)==(o|0)){q=p;break}else o=p}}else{o=g;while(1){p=k[o>>2]|0;if(!p){q=o;break}else o=p}}b:do if((q|0)!=(e|0)){o=q+16|0;g=0;do{p=i[d+g>>0]|0;r=i[o+g>>0]|0;if((p&255)<(r&255))break b;g=g+1|0}while(g>>>0<32&(p&255)<=(r&255));g=k[e>>2]|0;if(!g){k[c>>2]=e;n=e;return n|0}else s=g;c:while(1){g=0;while(1){o=i[d+g>>0]|0;r=i[s+16+g>>0]|0;if((o&255)<(r&255)){m=43;break}g=g+1|0;if(!(g>>>0<32&(o&255)<=(r&255))){t=0;m=45;break}}if((m|0)==43){m=0;g=k[s>>2]|0;if(!g){u=s;v=s;m=44;break}else w=g}else if((m|0)==45){while(1){m=0;g=i[s+16+t>>0]|0;r=i[d+t>>0]|0;if((g&255)<(r&255))break;t=t+1|0;if(!(t>>>0<32&(g&255)<=(r&255))){x=s;m=50;break c}else m=45}r=s+4|0;g=k[r>>2]|0;if(!g){y=r;z=s;m=49;break}else w=g}s=w}if((m|0)==44){k[c>>2]=v;n=u;return n|0}else if((m|0)==49){k[c>>2]=z;n=y;return n|0}else if((m|0)==50){k[c>>2]=x;n=c;return n|0}}while(0);if(h){k[c>>2]=f;n=j;return n|0}else{k[c>>2]=q;n=q;return n|0}}while(0);d:do if((f|0)!=(k[a>>2]|0)){q=k[f>>2]|0;if(!q){x=f;while(1){y=k[x+8>>2]|0;if((k[y>>2]|0)==(x|0))x=y;else{A=y;break}}}else{x=q;while(1){j=k[x+4>>2]|0;if(!j){A=x;break}else x=j}}x=A;q=A+16|0;j=0;do{h=i[q+j>>0]|0;y=i[d+j>>0]|0;if((h&255)<(y&255)){B=x;break d}j=j+1|0}while(j>>>0<32&(h&255)<=(y&255));j=k[e>>2]|0;if(!j){k[c>>2]=e;n=e;return n|0}else C=j;e:while(1){j=0;while(1){x=i[d+j>>0]|0;q=i[C+16+j>>0]|0;if((x&255)<(q&255)){m=18;break}j=j+1|0;if(!(j>>>0<32&(x&255)<=(q&255))){D=0;m=20;break}}if((m|0)==18){m=0;j=k[C>>2]|0;if(!j){E=C;F=C;m=19;break}else G=j}else if((m|0)==20){while(1){m=0;j=i[C+16+D>>0]|0;q=i[d+D>>0]|0;if((j&255)<(q&255))break;D=D+1|0;if(!(D>>>0<32&(j&255)<=(q&255))){H=C;m=25;break e}else m=20}q=C+4|0;j=k[q>>2]|0;if(!j){I=q;J=C;m=24;break}else G=j}C=G}if((m|0)==19){k[c>>2]=F;n=E;return n|0}else if((m|0)==24){k[c>>2]=J;n=I;return n|0}else if((m|0)==25){k[c>>2]=H;n=c;return n|0}}else B=b;while(0);if(!(k[f>>2]|0)){k[c>>2]=f;n=f;return n|0}else{f=B;k[c>>2]=f;n=f+4|0;return n|0}return 0}function SE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=a+4|0;f=k[b>>2]|0;b=f;a:do if((f|0)!=(e|0)){g=0;while(1){h=i[d+g>>0]|0;j=i[f+16+g>>0]|0;if((h&255)<(j&255))break a;g=g+1|0;if(!(g>>>0<32&(h&255)<=(j&255))){l=0;break}}while(1){g=i[f+16+l>>0]|0;j=i[d+l>>0]|0;if((g&255)<(j&255))break;l=l+1|0;if(!(l>>>0<32&(g&255)<=(j&255))){m=52;break}}if((m|0)==52){k[c>>2]=b;n=c;return n|0}j=f+4|0;g=k[j>>2]|0;h=(g|0)==0;if(h){o=f;while(1){p=k[o+8>>2]|0;if((k[p>>2]|0)==(o|0)){q=p;break}else o=p}}else{o=g;while(1){p=k[o>>2]|0;if(!p){q=o;break}else o=p}}b:do if((q|0)!=(e|0)){o=q+16|0;g=0;do{p=i[d+g>>0]|0;r=i[o+g>>0]|0;if((p&255)<(r&255))break b;g=g+1|0}while(g>>>0<32&(p&255)<=(r&255));g=k[e>>2]|0;if(!g){k[c>>2]=e;n=e;return n|0}else s=g;c:while(1){g=0;while(1){o=i[d+g>>0]|0;r=i[s+16+g>>0]|0;if((o&255)<(r&255)){m=43;break}g=g+1|0;if(!(g>>>0<32&(o&255)<=(r&255))){t=0;m=45;break}}if((m|0)==43){m=0;g=k[s>>2]|0;if(!g){u=s;v=s;m=44;break}else w=g}else if((m|0)==45){while(1){m=0;g=i[s+16+t>>0]|0;r=i[d+t>>0]|0;if((g&255)<(r&255))break;t=t+1|0;if(!(t>>>0<32&(g&255)<=(r&255))){x=s;m=50;break c}else m=45}r=s+4|0;g=k[r>>2]|0;if(!g){y=r;z=s;m=49;break}else w=g}s=w}if((m|0)==44){k[c>>2]=v;n=u;return n|0}else if((m|0)==49){k[c>>2]=z;n=y;return n|0}else if((m|0)==50){k[c>>2]=x;n=c;return n|0}}while(0);if(h){k[c>>2]=f;n=j;return n|0}else{k[c>>2]=q;n=q;return n|0}}while(0);d:do if((f|0)!=(k[a>>2]|0)){q=k[f>>2]|0;if(!q){x=f;while(1){y=k[x+8>>2]|0;if((k[y>>2]|0)==(x|0))x=y;else{A=y;break}}}else{x=q;while(1){j=k[x+4>>2]|0;if(!j){A=x;break}else x=j}}x=A;q=A+16|0;j=0;do{h=i[q+j>>0]|0;y=i[d+j>>0]|0;if((h&255)<(y&255)){B=x;break d}j=j+1|0}while(j>>>0<32&(h&255)<=(y&255));j=k[e>>2]|0;if(!j){k[c>>2]=e;n=e;return n|0}else C=j;e:while(1){j=0;while(1){x=i[d+j>>0]|0;q=i[C+16+j>>0]|0;if((x&255)<(q&255)){m=18;break}j=j+1|0;if(!(j>>>0<32&(x&255)<=(q&255))){D=0;m=20;break}}if((m|0)==18){m=0;j=k[C>>2]|0;if(!j){E=C;F=C;m=19;break}else G=j}else if((m|0)==20){while(1){m=0;j=i[C+16+D>>0]|0;q=i[d+D>>0]|0;if((j&255)<(q&255))break;D=D+1|0;if(!(D>>>0<32&(j&255)<=(q&255))){H=C;m=25;break e}else m=20}q=C+4|0;j=k[q>>2]|0;if(!j){I=q;J=C;m=24;break}else G=j}C=G}if((m|0)==19){k[c>>2]=F;n=E;return n|0}else if((m|0)==24){k[c>>2]=J;n=I;return n|0}else if((m|0)==25){k[c>>2]=H;n=c;return n|0}}else B=b;while(0);if(!(k[f>>2]|0)){k[c>>2]=f;n=f;return n|0}else{f=B;k[c>>2]=f;n=f+4|0;return n|0}return 0}function TE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+16|0;d=c;e=a+4|0;f=b+4|0;g=(k[e>>2]|0)!=0&(k[f>>2]|0)!=0;q2a(d,329672,0);x=0;pa(49,g|0,d|0,40,217974,218011);g=x;x=0;if(g&1){g=Hc()|0;K2a(d);Sc(g|0)}K2a(d);d=k[e>>2]|0;e=k[d>>2]|0;g=k[f>>2]|0;f=k[g>>2]|0;h=d+8|0;i=a+8|0;j=a+20|0;l=g+8|0;m=b+8|0;n=b+20|0;if((e|0)<(f|0)){o=1;r=c;return o|0}if((f|0)<(e|0)){o=0;r=c;return o|0}e=k[d+40>>2]|0;d=k[g+40>>2]|0;g=(e|0)==(d|0);a:do if(g){f=e;while(1){f=f+-1|0;if((f|0)<=-1){p=e;break}q=k[h+(f<<2)>>2]|0;s=k[l+(f<<2)>>2]|0;if((q|0)!=(s|0)){t=q;u=s;v=9;break}}if((v|0)==9)if(t>>>0>u>>>0)p=e;else{o=1;r=c;return o|0}while(1){p=p+-1|0;if((p|0)<=-1){v=14;break a}f=k[l+(p<<2)>>2]|0;s=k[h+(p<<2)>>2]|0;if((f|0)!=(s|0)){w=f;y=s;break}}if(w>>>0>y>>>0)v=14;else v=20}else if(e>>>0>d>>>0)if(d>>>0>e>>>0){v=14;break}else{v=21;break}else{o=1;r=c;return o|0}while(0);b:do if((v|0)==14){y=k[a+12>>2]|0;w=k[m>>2]|0;p=k[b+12>>2]|0;if((w|0)!=(p|0)){u=k[i>>2]|0;t=w;while(1){if((u|0)==(y|0)){o=1;v=37;break}w=k[u>>2]|0;s=k[t>>2]|0;if(w>>>0>>0){o=1;v=37;break}if(s>>>0>>0){v=20;break b}t=t+4|0;if((t|0)==(p|0)){v=20;break b}else u=u+4|0}if((v|0)==37){r=c;return o|0}}else v=20}while(0);c:do if((v|0)==20)if(g){u=e;while(1){u=u+-1|0;if((u|0)<=-1){z=e;break}p=k[l+(u<<2)>>2]|0;t=k[h+(u<<2)>>2]|0;if((p|0)!=(t|0)){A=p;B=t;v=25;break}}if((v|0)==25)if(A>>>0>B>>>0)z=e;else{o=0;r=c;return o|0}while(1){z=z+-1|0;if((z|0)<=-1){v=30;break c}u=k[h+(z<<2)>>2]|0;t=k[l+(z<<2)>>2]|0;if((u|0)!=(t|0)){C=u;D=t;break}}if(C>>>0>D>>>0)v=30}else v=21;while(0);do if((v|0)==21)if(d>>>0>e>>>0)if(e>>>0>d>>>0){v=30;break}else break;else{o=0;r=c;return o|0}while(0);d:do if((v|0)==30?(d=k[b+12>>2]|0,e=k[i>>2]|0,D=k[a+12>>2]|0,(e|0)!=(D|0)):0){C=k[m>>2]|0;z=e;while(1){if((C|0)==(d|0)){o=0;v=37;break}e=k[C>>2]|0;l=k[z>>2]|0;if(e>>>0>>0){o=0;v=37;break}if(l>>>0>>0)break d;z=z+4|0;if((z|0)==(D|0))break d;else C=C+4|0}if((v|0)==37){r=c;return o|0}}while(0);o=(k[j>>2]|0)>>>0<(k[n>>2]|0)>>>0;r=c;return o|0}function UE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0;f=r;r=r+48|0;g=f+24|0;h=f+32|0;i=f;j=i+4|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[i>>2]=-1;k[j>>2]=b;l=i+8|0;if((l|0)!=(c|0)?(x=0,fb(209,l|0,k[c>>2]|0,k[c+4>>2]|0),c=x,x=0,c&1):0)m=8;else m=3;a:do if((m|0)==3){c=i+20|0;k[c>>2]=e;x=0;n=Ba(588,b|0)|0;o=x;x=0;if(!(o&1)){if(n?(x=0,fb(210,k[l>>2]|0,k[i+12>>2]|0,g|0),n=x,x=0,n&1):0){m=8;break}x=0;n=Ba(589,b|0)|0;o=x;x=0;if(!(o&1)){if(n?(n=a+16|0,o=k[n>>2]|0,(o|0)!=0):0){p=n;q=o;b:while(1){o=q;while(1){x=0;s=Ta(547,o+16|0,i|0)|0;t=x;x=0;if(t&1){m=7;break b}if(!s){u=o;break}o=k[o+4>>2]|0;if(!o){v=p;break b}}q=k[u>>2]|0;if(!q){v=u;break}else p=u}if((m|0)==7){p=Hc()|0;w=p;y=M;break}if((v|0)!=(n|0)){x=0;p=Ta(547,i|0,v+16|0)|0;q=x;x=0;if(q&1){m=8;break}if(!p)z=k[v+16>>2]|0;else m=26}else m=26}else m=26;if((m|0)==26){if(d){x=0;p=Ta(520,a|0,b|0)|0;q=x;x=0;if(q&1){m=8;break}k[j>>2]=p}x=0;p=Fa(124,a|0,i|0,0)|0;q=x;x=0;if(q&1){m=8;break}q=a+4|0;o=k[q>>2]|0;s=(o-(k[a>>2]|0)|0)/24|0;t=o;do if(p>>>0>>0)k[i>>2]=p;else{k[i>>2]=s;if((t|0)==(k[a+8>>2]|0)){x=0;xa(710,a|0,i|0);A=x;x=0;if(A&1){m=8;break a}else break}A=i;B=k[A+4>>2]|0;C=o;k[C>>2]=k[A>>2];k[C+4>>2]=B;x=0;xa(687,t+8|0,l|0);B=x;x=0;if(B&1){m=8;break a}k[t+20>>2]=k[c>>2];k[q>>2]=(k[q>>2]|0)+24}while(0);x=0;fb(211,h|0,a+12|0,i|0);q=x;x=0;if(q&1){m=8;break}z=k[i>>2]|0}q=k[i+8>>2]|0;if(!q){r=f;return z|0}c=i+12|0;t=k[c>>2]|0;if((t|0)!=(q|0))k[c>>2]=t+(~((t+-4-q|0)>>>2)<<2);OBa(q);r=f;return z|0}else m=8}else m=8}while(0);if((m|0)==8){m=Hc()|0;w=m;y=M}y=k[i+8>>2]|0;if(!y)Sc(w|0);m=i+12|0;i=k[m>>2]|0;if((i|0)!=(y|0))k[m>>2]=i+(~((i+-4-y|0)>>>2)<<2);OBa(y);Sc(w|0);return 0}function VE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c;e=a+24|0;f=KBa(96)|0;k[f+4>>2]=0;k[f+8>>2]=0;k[f>>2]=27576;g=f+16|0;k[g>>2]=k[b>>2];h=f+24|0;i=b+8|0;j=h+40|0;do{k[h>>2]=k[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));i=b+48|0;h=k[i+4>>2]|0;j=f+64|0;k[j>>2]=k[i>>2];k[j+4>>2]=h;k[f+72>>2]=k[b+56>>2];h=k[b+60>>2]|0;k[f+76>>2]=h;if(h)h0a(h);k[f+80>>2]=k[b+64>>2];k[f+84>>2]=k[b+68>>2];h=k[b+72>>2]|0;k[f+88>>2]=h;if(h)h0a(h);h=d+4|0;k[d>>2]=g;k[h>>2]=f;b=a+28|0;j=k[b>>2]|0;if(j>>>0<(k[a+32>>2]|0)>>>0){k[j>>2]=g;k[j+4>>2]=f;k[d>>2]=0;k[h>>2]=0;k[b>>2]=j+8;l=k[b>>2]|0;m=l+-8|0;n=k[m>>2]|0;r=c;return n|0}x=0;xa(711,e|0,d|0);d=x;x=0;if(d&1){d=Hc()|0;e=k[h>>2]|0;if(!e)Sc(d|0);j0a(e);Sc(d|0)}else{d=k[h>>2]|0;if(!d){l=k[b>>2]|0;m=l+-8|0;n=k[m>>2]|0;r=c;return n|0}j0a(d);l=k[b>>2]|0;m=l+-8|0;n=k[m>>2]|0;r=c;return n|0}return 0}function WE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=r;r=r+224|0;e=d+176|0;f=d+212|0;g=d+200|0;h=d+72|0;j=d;do if((i[2680]|0)==0?(Bb(2680)|0)!=0:0){x=0;va(1493,27596);l=x;x=0;if(!(l&1)){Kc(2680);break}l=Hc()|0;m=M;Cd(2680);n=l;o=m;Sc(n|0)}while(0);m=b+4|0;l=k[m>>2]|0;if(!l){p=-1;r=d;return p|0}if((k[l>>2]|0)!=1){p=-1;r=d;return p|0}if(!(hB(l)|0)){p=-1;r=d;return p|0}k[g>>2]=0;l=g+4|0;k[l>>2]=0;k[g+8>>2]=0;q=k[6903]|0;s=k[6902]|0;t=q-s|0;u=(t|0)/96|0;a:do if((q|0)==(s|0)){v=2;w=0;y=68}else{if(!(u>>>0>44739242?(x=0,va(1473,g|0),z=x,x=0,z&1):0))y=12;if(((y|0)==12?(x=0,z=Ba(563,t|0)|0,A=x,x=0,!(A&1)):0)?(k[l>>2]=z,k[g>>2]=z,k[g+8>>2]=z+(u*96|0),x=0,fb(212,g|0,k[6902]|0,k[6903]|0),z=x,x=0,!(z&1)):0){z=k[g>>2]|0;A=k[l>>2]|0;if((z|0)==(A|0)){B=2;C=0;D=z;break}else E=z;while(1){vF(27596,k[6900]|0);k[6901]=0;k[6899]=27600;k[6900]=0;x=0;z=Fa(125,E|0,b|0,a|0)|0;F=x;x=0;if(F&1){y=51;break}if(z){G=E;y=34;break}E=E+96|0;if((E|0)==(A|0)){v=2;w=0;y=68;break a}}do if((y|0)==34){A=k[G+88>>2]|0;if(A){x=0;xa(k[(k[A>>2]|0)+24>>2]|0,j|0,A|0);A=x;x=0;if(!(A&1)){x=0;fb(213,h|0,j|0,(k[m>>2]|0)+48|0);A=x;x=0;do if(A&1){z=Hc()|0;H=z;I=M}else{x=0;z=Ta(548,a|0,h|0)|0;F=x;x=0;if(F&1){F=Hc()|0;J=M;K=h+88|0;L=k[K>>2]|0;if(L){wF(K,L);OBa(k[K>>2]|0)}K=k[h+80>>2]|0;if(K)j0a(K);K=k[h+68>>2]|0;if(!K){H=F;I=J;break}j0a(K);H=F;I=J;break}J=h+88|0;F=k[J>>2]|0;if(F){wF(J,F);OBa(k[J>>2]|0)}J=k[h+80>>2]|0;if(J)j0a(J);J=k[h+68>>2]|0;if(J)j0a(J);J=j+48|0;F=k[J>>2]|0;if(!F){v=1;w=z;y=68;break a}K=j+52|0;L=k[K>>2]|0;if((L|0)==(F|0))N=F;else{O=j+56|0;P=L;do{L=P+-72|0;k[K>>2]=L;i[e>>0]=i[f>>0]|0;uF(e,O,L);P=k[K>>2]|0}while((P|0)!=(F|0));N=k[J>>2]|0}OBa(N);v=1;w=z;y=68;break a}while(0);A=j+48|0;F=k[A>>2]|0;if(!F){Q=H;R=I;break}P=j+52|0;K=k[P>>2]|0;if((K|0)==(F|0))S=F;else{O=j+56|0;L=K;do{K=L+-72|0;k[P>>2]=K;i[e>>0]=i[f>>0]|0;uF(e,O,K);L=k[P>>2]|0}while((L|0)!=(F|0));S=k[A>>2]|0}OBa(S);Q=H;R=I;break}}else{F=Rd(4)|0;k[F>>2]=26200;x=0;fb(149,F|0,2216,320);x=0}F=Hc()|0;T=F;U=M;y=53}else if((y|0)==51){F=Hc()|0;T=F;U=M;y=53}while(0);if((y|0)==53){Q=T;R=U}F=k[g>>2]|0;if(!F){n=Q;o=R;Sc(n|0)}L=k[l>>2]|0;if((L|0)==(F|0))V=F;else{P=L;do{k[l>>2]=P+-96;L=k[P+-8>>2]|0;if((L|0)!=(P+-24|0)){if(L)Sf[k[(k[L>>2]|0)+20>>2]&2047](L)}else Sf[k[(k[L>>2]|0)+16>>2]&2047](L);L=P+-48|0;O=k[L>>2]|0;if(O){K=P+-44|0;W=k[K>>2]|0;if((W|0)==(O|0))X=O;else{Y=P+-40|0;Z=W;do{W=Z+-72|0;k[K>>2]=W;i[e>>0]=i[f>>0]|0;uF(e,Y,W);Z=k[K>>2]|0}while((Z|0)!=(O|0));X=k[L>>2]|0}OBa(X)}P=k[l>>2]|0}while((P|0)!=(F|0));V=k[g>>2]|0}OBa(V);n=Q;o=R;Sc(n|0)}F=Hc()|0;P=k[g>>2]|0;if(!P)Sc(F|0);O=k[l>>2]|0;if((O|0)==(P|0))_=P;else{Z=O;do{k[l>>2]=Z+-96;O=k[Z+-8>>2]|0;if((O|0)!=(Z+-24|0)){if(O)Sf[k[(k[O>>2]|0)+20>>2]&2047](O)}else Sf[k[(k[O>>2]|0)+16>>2]&2047](O);O=Z+-48|0;K=k[O>>2]|0;if(K){Y=Z+-44|0;A=k[Y>>2]|0;if((A|0)==(K|0))$=K;else{W=Z+-40|0;aa=A;do{A=aa+-72|0;k[Y>>2]=A;i[e>>0]=i[f>>0]|0;uF(e,W,A);aa=k[Y>>2]|0}while((aa|0)!=(K|0));$=k[O>>2]|0}OBa($)}Z=k[l>>2]|0}while((Z|0)!=(P|0));_=k[g>>2]|0}OBa(_);Sc(F|0)}while(0);if((y|0)==68){B=v;C=w;D=k[g>>2]|0}if(D){w=k[l>>2]|0;if((w|0)==(D|0))ba=D;else{v=w;do{k[l>>2]=v+-96;w=k[v+-8>>2]|0;if((w|0)!=(v+-24|0)){if(w)Sf[k[(k[w>>2]|0)+20>>2]&2047](w)}else Sf[k[(k[w>>2]|0)+16>>2]&2047](w);w=v+-48|0;y=k[w>>2]|0;if(y){_=v+-44|0;$=k[_>>2]|0;if(($|0)==(y|0))ca=y;else{R=v+-40|0;Q=$;do{$=Q+-72|0;k[_>>2]=$;i[e>>0]=i[f>>0]|0;uF(e,R,$);Q=k[_>>2]|0}while((Q|0)!=(y|0));ca=k[w>>2]|0}OBa(ca)}v=k[l>>2]|0}while((v|0)!=(D|0));ba=k[g>>2]|0}OBa(ba)}ba=(B|0)!=2;if(ba|c){p=ba?C:-1;r=d;return p|0}C=b+8|0;if(((k[b+12>>2]|0)-(k[C>>2]|0)|0)!=8){p=-1;r=d;return p|0}if(!(eB(k[m>>2]|0)|0)){p=-1;r=d;return p|0}m=b;ba=k[m+4>>2]|0;c=e;k[c>>2]=k[m>>2];k[c+4>>2]=ba;ba=e+8|0;By(ba,C);k[e+20>>2]=k[b+20>>2];b=k[ba>>2]|0;ba=b+4|0;C=k[b>>2]|0;k[b>>2]=k[ba>>2];k[ba>>2]=C;x=0;C=Fa(124,a|0,e|0,1)|0;a=x;x=0;if(a&1){a=Hc()|0;ba=M;b=k[e+8>>2]|0;if(!b){n=a;o=ba;Sc(n|0)}c=e+12|0;m=k[c>>2]|0;if((m|0)!=(b|0))k[c>>2]=m+(~((m+-4-b|0)>>>2)<<2);OBa(b);n=a;o=ba;Sc(n|0)}else{n=k[e+8>>2]|0;ba=n;if(n){o=e+12|0;e=k[o>>2]|0;if((e|0)!=(n|0))k[o>>2]=e+(~((e+-4-ba|0)>>>2)<<2);OBa(n)}p=C;r=d;return p|0}return 0}function XE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;f=r;r=r+48|0;g=f;h=f+32|0;i=f+8|0;j=i+4|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[i>>2]=b;k[j>>2]=c;b=i+8|0;if(!((b|0)!=(d|0)?(x=0,fb(209,b|0,k[d>>2]|0,k[d+4>>2]|0),d=x,x=0,d&1):0))l=3;do if((l|0)==3?(x=0,d=Ba(588,c|0)|0,m=x,x=0,!(m&1)):0){if(d?(x=0,fb(210,k[b>>2]|0,k[i+12>>2]|0,g|0),d=x,x=0,d&1):0)break;if(e){x=0;d=Ta(520,a|0,c|0)|0;m=x;x=0;if(m&1)break;k[j>>2]=d}x=0;fb(211,h|0,a+12|0,i|0);d=x;x=0;if(!(d&1)){d=k[i+8>>2]|0;if(!d){r=f;return}m=i+12|0;n=k[m>>2]|0;if((n|0)!=(d|0))k[m>>2]=n+(~((n+-4-d|0)>>>2)<<2);OBa(d);r=f;return}}while(0);f=Hc()|0;a=k[i+8>>2]|0;if(!a)Sc(f|0);h=i+12|0;i=k[h>>2]|0;if((i|0)!=(a|0))k[h>>2]=i+(~((i+-4-a|0)>>>2)<<2);OBa(a);Sc(f|0)}function YE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0;c=r;r=r+272|0;d=c+224|0;e=c+80|0;f=c+144|0;g=c+104|0;h=c+40|0;i=c;j=e+4|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;l=a+4|0;m=k[l>>2]|0;n=k[a>>2]|0;o=(m-n|0)/24|0;k[e>>2]=o;k[i>>2]=1;k[i+32>>2]=1;p=d;q=i;i=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(i|0));HB(d,255,0);p=h;q=d;i=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(i|0));k[d>>2]=0;s=d+32|0;t=k[h+32>>2]|0;u=t>>>0>8?8:t;k[s>>2]=u;a:do if((m|0)!=(n|0))if(!u){v=1;w=u;y=o;z=0}else{t=o;A=0;B=0;while(1){C=Hyb(k[h+(B<<2)>>2]|0,0,t|0,A|0)|0;D=M;k[d+(B<<2)>>2]=C;C=B+1|0;E=k[s>>2]|0;if((D|0)==0&0==0){v=0;w=E;y=0;z=C;break a}if(C>>>0>>0){t=D;A=0;B=C}else{F=C;G=E;H=D;break}}v=1;w=G;y=H;z=F}else{v=0;w=u;y=0;z=0}while(0);if(z>>>0>>0){u=z;do{k[d+(u<<2)>>2]=k[h+(u<<2)>>2];u=u+1|0;z=k[s>>2]|0}while(u>>>0>>0);I=z}else I=w;if(v){v=I+1|0;w=v>>>0>8?8:v;k[s>>2]=w;if(w>>>0>I>>>0){k[d+(I<<2)>>2]=y;J=k[s>>2]|0}else J=w}else J=I;I=J+-1|0;b:do if(I){J=I;do{if(k[d+(J<<2)>>2]|0)break b;k[s>>2]=J;J=J+-1|0}while((J|0)!=0)}while(0);p=g;q=d;i=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(i|0));k[f>>2]=0;p=f+8|0;q=g;i=p+40|0;do{k[p>>2]=k[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(i|0));q=b;p=k[q+4>>2]|0;i=f+48|0;k[i>>2]=k[q>>2];k[i+4>>2]=p;k[f+56>>2]=k[b+8>>2];p=k[b+12>>2]|0;k[f+60>>2]=p;b=(p|0)==0;if(!b)h0a(p);k[f+64>>2]=0;k[f+68>>2]=0;k[f+72>>2]=0;x=0;i=Ta(520,a|0,f|0)|0;f=x;x=0;if(f&1){f=Hc()|0;q=M;if(b){K=f;L=q;Sc(K|0)}j0a(p);K=f;L=q;Sc(K|0)}k[j>>2]=i;if(!b)j0a(p);p=k[l>>2]|0;if((p|0)==(k[a+8>>2]|0)){x=0;xa(710,a|0,e|0);b=x;x=0;if(!(b&1))N=24}else{b=e;i=k[b+4>>2]|0;j=p;k[j>>2]=k[b>>2];k[j+4>>2]=i;x=0;xa(687,p+8|0,e+8|0);i=x;x=0;if(!(i&1)){k[p+20>>2]=k[e+20>>2];k[l>>2]=(k[l>>2]|0)+24;N=24}}if((N|0)==24?(x=0,fb(211,d|0,a+12|0,e|0),a=x,x=0,!(a&1)):0){a=k[e>>2]|0;d=k[e+8>>2]|0;if(!d){r=c;return a|0}N=e+12|0;l=k[N>>2]|0;if((l|0)!=(d|0))k[N>>2]=l+(~((l+-4-d|0)>>>2)<<2);OBa(d);r=c;return a|0}a=Hc()|0;c=M;d=k[e+8>>2]|0;if(!d){K=a;L=c;Sc(K|0)}l=e+12|0;e=k[l>>2]|0;if((e|0)!=(d|0))k[l>>2]=e+(~((e+-4-d|0)>>>2)<<2);OBa(d);K=a;L=c;Sc(K|0);return 0}function ZE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=r;r=r+96|0;e=d;f=d+80|0;k[e>>2]=1;k[e+8>>2]=3;k[e+40>>2]=1;g=e+48|0;k[g>>2]=-1;k[g+4>>2]=-1;g=e+56|0;h=e+60|0;i=e+72|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;k[f>>2]=0;g=f+4|0;k[g>>2]=0;k[f+8>>2]=0;x=0;j=Ba(563,8)|0;l=x;x=0;if(!(l&1)){k[f>>2]=j;l=j+8|0;k[f+8>>2]=l;k[j>>2]=b;k[j+4>>2]=c;k[g>>2]=l;x=0;l=Va(93,a|0,e|0,f|0,1,0)|0;e=x;x=0;if(!(e&1)?(x=0,e=Ta(549,a|0,l|0)|0,l=x,x=0,!(l&1)):0){l=k[f>>2]|0;a=l;if(l){c=k[g>>2]|0;if((c|0)!=(l|0))k[g>>2]=c+(~((c+-4-a|0)>>>2)<<2);OBa(l)}l=k[i>>2]|0;if(l)j0a(l);l=k[h>>2]|0;if(!l){r=d;return e|0}j0a(l);r=d;return e|0}e=Hc()|0;d=M;l=k[f>>2]|0;f=l;if(!l){m=d;n=e}else{a=k[g>>2]|0;if((a|0)!=(l|0))k[g>>2]=a+(~((a+-4-f|0)>>>2)<<2);OBa(l);m=d;n=e}}else{e=Hc()|0;m=M;n=e}e=k[i>>2]|0;if(e)j0a(e);e=k[h>>2]|0;if(!e)Sc(n|0);j0a(e);Sc(n|0);return 0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;c=r;r=r+208|0;d=c+205|0;e=c+204|0;f=c+120|0;g=c+80|0;h=c;j=c+192|0;k[g>>2]=0;k[g+32>>2]=1;k[f>>2]=2;i[f+4>>0]=1;l=f+8|0;m=g;g=l+40|0;do{k[l>>2]=k[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(g|0));m=f+48|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;k[h>>2]=1;k[h+8>>2]=21;k[h+40>>2]=1;l=h+48|0;k[l>>2]=-1;k[l+4>>2]=-1;l=h+56|0;g=h+60|0;n=h+72|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;k[j>>2]=0;l=j+4|0;k[l>>2]=0;k[j+8>>2]=0;x=0;o=Ba(563,4)|0;p=x;x=0;if(!(p&1)){k[j>>2]=o;p=o+4|0;k[j+8>>2]=p;k[o>>2]=b;k[l>>2]=p;x=0;p=Va(93,a|0,h|0,j|0,1,0)|0;h=x;x=0;do if(!(h&1)){b=k[a>>2]|0;if((((k[a+4>>2]|0)-b|0)/24|0)>>>0>p>>>0)q=b;else{x=0;va(1484,a|0);b=x;x=0;if(b&1)break;q=k[a>>2]|0}x=0;b=Fa(125,f|0,q+(p*24|0)|0,a|0)|0;o=x;x=0;if(!(o&1)){o=k[j>>2]|0;s=o;if(o){t=k[l>>2]|0;if((t|0)!=(o|0))k[l>>2]=t+(~((t+-4-s|0)>>>2)<<2);OBa(o)}o=k[n>>2]|0;if(o)j0a(o);o=k[g>>2]|0;if(o)j0a(o);o=k[m>>2]|0;if(!o){r=c;return b|0}s=f+52|0;t=k[s>>2]|0;if((t|0)==(o|0))u=o;else{v=f+56|0;w=t;do{t=w+-72|0;k[s>>2]=t;i[d>>0]=i[e>>0]|0;uF(d,v,t);w=k[s>>2]|0}while((w|0)!=(o|0));u=k[m>>2]|0}OBa(u);r=c;return b|0}}while(0);c=Hc()|0;u=M;a=k[j>>2]|0;j=a;if(!a){y=u;z=c}else{p=k[l>>2]|0;if((p|0)!=(a|0))k[l>>2]=p+(~((p+-4-j|0)>>>2)<<2);OBa(a);y=u;z=c}}else{c=Hc()|0;y=M;z=c}c=k[n>>2]|0;if(c)j0a(c);c=k[g>>2]|0;if(c)j0a(c);c=k[m>>2]|0;if(!c)Sc(z|0);g=f+52|0;n=k[g>>2]|0;if((n|0)==(c|0))A=c;else{y=f+56|0;f=n;do{n=f+-72|0;k[g>>2]=n;i[d>>0]=i[e>>0]|0;uF(d,y,n);f=k[g>>2]|0}while((f|0)!=(c|0));A=k[m>>2]|0}OBa(A);Sc(z|0);return 0}function $E(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;d=r;r=r+224|0;e=d+160|0;f=d+80|0;g=d+200|0;h=d+40|0;i=d;k[f>>2]=1;k[f+8>>2]=3;k[f+40>>2]=1;j=f+48|0;k[j>>2]=-1;k[j+4>>2]=-1;j=f+56|0;l=f+60|0;m=f+72|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[g>>2]=0;j=g+4|0;k[j>>2]=0;k[g+8>>2]=0;x=0;n=Ba(563,8)|0;o=x;x=0;if(!(o&1)){k[g>>2]=n;o=n+8|0;k[g+8>>2]=o;k[n>>2]=b;k[n+4>>2]=c;k[j>>2]=o;x=0;o=Va(93,a|0,f|0,g|0,1,0)|0;f=x;x=0;if(!(f&1)?(x=0,f=Ta(524,a|0,o|0)|0,o=x,x=0,!(o&1)):0){o=k[g>>2]|0;a=o;if(o){c=k[j>>2]|0;if((c|0)!=(o|0))k[j>>2]=c+(~((c+-4-a|0)>>>2)<<2);OBa(o)}o=k[m>>2]|0;if(o)j0a(o);o=k[l>>2]|0;if(o)j0a(o);if(!f){p=0;r=d;return p|0}k[e>>2]=0;o=e+32|0;k[o>>2]=1;a=(e|0)!=(f|0);c=f+32|0;if(a){n=k[c>>2]|0;k[o>>2]=n>>>0>8?8:n;q=o}else q=c;c=31;o=0;n=0;while(1){if(n>>>0>=(k[q>>2]|0)>>>0){s=c;t=n;u=18;break}b=Hyb(k[f+(n<<2)>>2]|0,0,c|0,o|0)|0;c=M;k[e+(n<<2)>>2]=b;b=n+1|0;if((c|0)==0&0==0){v=0;w=0;y=b;break}else{o=0;n=b}}if((u|0)==18){v=1;w=s;y=t}if(a?y>>>0<(k[q>>2]|0)>>>0:0){a=y;do{k[e+(a<<2)>>2]=k[f+(a<<2)>>2];a=a+1|0}while(a>>>0<(k[q>>2]|0)>>>0)}if(v?(v=k[q>>2]|0,a=v+1|0,f=a>>>0>8?8:a,k[q>>2]=f,f>>>0>v>>>0):0)k[e+(v<<2)>>2]=w;w=(k[q>>2]|0)+-1|0;a:do if(w){v=w;do{if(k[e+(v<<2)>>2]|0)break a;k[q>>2]=v;v=v+-1|0}while((v|0)!=0)}while(0);q=h;w=e;e=q+40|0;do{k[q>>2]=k[w>>2];q=q+4|0;w=w+4|0}while((q|0)<(e|0));k[i>>2]=62;k[i+32>>2]=1;w=k[h+32>>2]|0;b:do if((w|0)==1){q=1;while(1){q=q+-1|0;if((q|0)<=-1){z=0;break b}e=k[h+(q<<2)>>2]|0;v=k[i+(q<<2)>>2]|0;if((e|0)!=(v|0)){A=e;B=v;break}}z=A>>>0>B>>>0?1:-1}else z=w>>>0>1?1:-1;while(0);p=(z|0)>0;r=d;return p|0}p=Hc()|0;d=M;z=k[g>>2]|0;g=z;if(!z){C=d;D=p}else{w=k[j>>2]|0;if((w|0)!=(z|0))k[j>>2]=w+(~((w+-4-g|0)>>>2)<<2);OBa(z);C=d;D=p}}else{p=Hc()|0;C=M;D=p}p=k[m>>2]|0;if(p)j0a(p);p=k[l>>2]|0;if(!p)Sc(D|0);j0a(p);Sc(D|0);return 0}function aF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0;c=r;r=r+96|0;d=c+85|0;e=c+84|0;f=c+72|0;g=c;k[f+4>>2]=0;k[f+8>>2]=0;h=f+4|0;k[f>>2]=h;k[g>>2]=2;i[g+4>>0]=0;k[g+8>>2]=0;k[g+40>>2]=1;j=g+48|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[g+60>>2]=1;k[g+64>>2]=f;l=k[a>>2]|0;if((((k[a+4>>2]|0)-l|0)/24|0)>>>0<=b>>>0){x=0;va(1484,a|0);m=x;x=0;if(!(m&1)){n=k[a>>2]|0;o=5}}else{n=l;o=5}do if((o|0)==5?(x=0,l=Fa(125,g|0,n+(b*24|0)|0,a|0)|0,m=x,x=0,!(m&1)):0){if(l){x=0;l=Ba(590,g|0)|0;m=x;x=0;if(m&1)break;p=(k[l+4>>2]|0)+8|0}else p=0;l=k[j>>2]|0;if(!l){q=k[h>>2]|0;vF(f,q);r=c;return p|0}m=g+52|0;s=k[m>>2]|0;if((s|0)==(l|0))t=l;else{u=g+56|0;v=s;do{s=v+-72|0;k[m>>2]=s;i[d>>0]=i[e>>0]|0;uF(d,u,s);v=k[m>>2]|0}while((v|0)!=(l|0));t=k[j>>2]|0}OBa(t);q=k[h>>2]|0;vF(f,q);r=c;return p|0}while(0);p=Hc()|0;c=k[j>>2]|0;if(!c){w=k[h>>2]|0;vF(f,w);Sc(p|0)}q=g+52|0;t=k[q>>2]|0;if((t|0)==(c|0))y=c;else{a=g+56|0;g=t;do{t=g+-72|0;k[q>>2]=t;i[d>>0]=i[e>>0]|0;uF(d,a,t);g=k[q>>2]|0}while((g|0)!=(c|0));y=k[j>>2]|0}OBa(y);w=k[h>>2]|0;vF(f,w);Sc(p|0);return 0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+128|0;d=c+113|0;e=c+112|0;f=c+40|0;g=c;k[g>>2]=0;k[g+32>>2]=1;k[f>>2]=2;i[f+4>>0]=1;h=f+8|0;j=g;g=h+40|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(g|0));j=f+48|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;h=k[a>>2]|0;if((((k[a+4>>2]|0)-h|0)/24|0)>>>0<=b>>>0){x=0;va(1484,a|0);g=x;x=0;if(!(g&1)){l=k[a>>2]|0;m=5}}else{l=h;m=5}if((m|0)==5?(x=0,m=Fa(125,f|0,l+(b*24|0)|0,a|0)|0,a=x,x=0,!(a&1)):0){a=k[j>>2]|0;if(!a){r=c;return m|0}b=f+52|0;l=k[b>>2]|0;if((l|0)==(a|0))n=a;else{h=f+56|0;g=l;do{l=g+-72|0;k[b>>2]=l;i[d>>0]=i[e>>0]|0;uF(d,h,l);g=k[b>>2]|0}while((g|0)!=(a|0));n=k[j>>2]|0}OBa(n);r=c;return m|0}m=Hc()|0;c=k[j>>2]|0;if(!c)Sc(m|0);n=f+52|0;a=k[n>>2]|0;if((a|0)==(c|0))o=c;else{g=f+56|0;f=a;do{a=f+-72|0;k[n>>2]=a;i[d>>0]=i[e>>0]|0;uF(d,g,a);f=k[n>>2]|0}while((f|0)!=(c|0));o=k[j>>2]|0}OBa(o);Sc(m|0);return 0}function cF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;d=r;r=r+16|0;e=d+12|0;f=d;g=k[b+4>>2]|0;h=k[a>>2]|0;a:do if(h){if(!g){j=0;r=d;return j|0}if((h|0)!=(k[g>>2]|0)){j=0;r=d;return j|0}if(i[a+4>>0]|0){l=k[a+40>>2]|0;if((l|0)!=(k[g+40>>2]|0)){j=0;r=d;return j|0}m=a+8|0;n=m+(l<<2)|0;if((m|0)!=(n|0)){l=m;m=g+8|0;while(1){if((k[l>>2]|0)!=(k[m>>2]|0)){j=0;break}l=l+4|0;if((l|0)==(n|0))break a;else m=m+4|0}r=d;return j|0}}}while(0);g=k[a+60>>2]|0;do if(g){h=k[a+64>>2]|0;m=h+4|0;n=k[m>>2]|0;l=(n|0)==0;do if(!l){o=n;while(1){p=k[o+16>>2]|0;if(g>>>0

      >>0)q=o;else{if(p>>>0>=g>>>0){s=0;break}q=o+4|0}o=k[q>>2]|0;if(!o){s=1;break}}if(!l){o=n;while(1){p=k[o+16>>2]|0;if(g>>>0

      >>0){t=k[o>>2]|0;if(!t){u=o;v=o;w=21;break}else y=t}else{if(p>>>0>=g>>>0){z=o;w=27;break}p=o+4|0;t=k[p>>2]|0;if(!t){A=p;B=o;w=25;break}else y=t}o=y}if((w|0)==21){k[e>>2]=v;C=s;D=u;E=e;F=v;w=28;break}else if((w|0)==25){k[e>>2]=B;C=s;D=A;E=e;F=B;w=28;break}else if((w|0)==27){k[e>>2]=z;if(!z){C=s;D=e;E=e;F=z;w=28;break}o=z+20|0;if(s){G=o;w=32;break}else{H=o;break}}}else{I=s;J=e;w=26}}else{I=1;J=e;w=26}while(0);if((w|0)==26){k[e>>2]=m;C=I;D=m;E=J;F=m;w=28}if((w|0)==28){n=KBa(24)|0;k[n+16>>2]=g;k[n+20>>2]=0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=F;k[D>>2]=n;l=k[k[h>>2]>>2]|0;if(!l)K=n;else{k[h>>2]=l;K=k[D>>2]|0}ui(k[h+4>>2]|0,K);l=h+8|0;k[l>>2]=(k[l>>2]|0)+1;l=n+20|0;if(C){G=l;w=32}else H=l}if((w|0)==32){k[G>>2]=b;break}if((k[k[H>>2]>>2]|0)!=(k[b>>2]|0)){j=0;r=d;return j|0}}while(0);H=a+48|0;G=a+52|0;a=k[G>>2]|0;C=k[H>>2]|0;if((a|0)==(C|0))L=1;else L=((k[b+12>>2]|0)-(k[b+8>>2]|0)>>2|0)==((a-C|0)/72|0|0);q2a(f,329672,0);x=0;pa(49,L|0,f|0,420,217974,218112);L=x;x=0;if(L&1){L=Hc()|0;K2a(f);Sc(L|0)}K2a(f);f=k[H>>2]|0;if((k[G>>2]|0)==(f|0)){j=1;r=d;return j|0}L=b+8|0;b=c+4|0;C=f;f=0;while(1){a=k[(k[L>>2]|0)+(f<<2)>>2]|0;K=k[c>>2]|0;if((((k[b>>2]|0)-K|0)/24|0)>>>0>a>>>0)M=K;else{Kpb(c);M=k[c>>2]|0}if(!(cF(C+(f*72|0)|0,M+(a*24|0)|0,c)|0)){j=0;w=45;break}f=f+1|0;C=k[H>>2]|0;if(f>>>0>=(((k[G>>2]|0)-C|0)/72|0)>>>0){j=1;w=45;break}}if((w|0)==45){r=d;return j|0}return 0}function dF(a,b,c){a=a|0;b=b|0;c=c|0;k[a+60>>2]=b;k[a+64>>2]=c;return}function eF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+176|0;e=d+160|0;f=d+16|0;g=d;h=k[b>>2]|0;if((((k[b+4>>2]|0)-h|0)/24|0)>>>0>c>>>0)j=h;else{Kpb(b);j=k[b>>2]|0}h=f+64|0;l=f+8|0;k[l>>2]=26684;m=f+12|0;k[f>>2]=26724;k[h>>2]=26744;k[f+4>>2]=0;x=0;xa(582,f+64|0,m|0);n=x;x=0;if(n&1){n=Hc()|0;o=M;p=n;mab(h);Sc(p|0)}k[f+136>>2]=0;k[f+140>>2]=-1;k[f>>2]=26664;k[f+64>>2]=26704;k[l>>2]=26684;x=0;va(1449,m|0);l=x;x=0;do if(l&1){n=Hc()|0;q=M;s=n}else{k[m>>2]=20392;n=f+44|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+60>>2]=24;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;x=0;xa(583,m|0,e|0);t=x;x=0;if(t&1){t=Hc()|0;u=M;K2a(e);K2a(n);obb(m);q=u;s=t;break}K2a(e);t=f+8|0;u=t+(k[(k[t>>2]|0)+-12>>2]|0)+4|0;k[u>>2]=k[u>>2]&-75|2;x=0;u=Ta(543,t|0,k[j+(c*24|0)>>2]|0)|0;v=x;x=0;a:do if(!(v&1)?(x=0,Fa(92,u|0,294915,1)|0,w=x,x=0,!(w&1)):0){w=k[j+(c*24|0)+4>>2]|0;x=0;if(!w){ei(t,218207,7)|0;y=x;x=0;if(y&1){z=21;break}}else{y=ZC(t,w)|0;w=x;x=0;if(w&1){z=21;break}x=0;Fa(92,y|0,300108,1)|0;y=x;x=0;if(y&1){z=21;break}y=k[j+(c*24|0)+8>>2]|0;w=k[j+(c*24|0)+12>>2]|0;b:do if((y|0)!=(w|0)){A=g+8|0;B=g+1|0;C=g+4|0;D=y;while(1){x=0;fb(214,g|0,b|0,k[D>>2]|0);E=x;x=0;if(E&1){z=20;break}E=i[g>>0]|0;F=(E&1)==0;x=0;G=Fa(92,t|0,(F?B:k[A>>2]|0)|0,(F?(E&255)>>>1:k[C>>2]|0)|0)|0;E=x;x=0;if(E&1)break;x=0;Fa(92,G|0,301287,1)|0;G=x;x=0;if(G&1)break;K2a(g);D=D+4|0;if((D|0)==(w|0))break b}if((z|0)==20){D=Hc()|0;H=D;I=M;break a}D=Hc()|0;C=M;K2a(g);J=D;K=C;k[f>>2]=26664;k[h>>2]=26704;k[t>>2]=26684;k[m>>2]=20392;K2a(n);obb(m);mab(h);Sc(J|0)}while(0);x=0;Fa(92,t|0,300015,1)|0;w=x;x=0;if(w&1){z=21;break}}x=0;xa(584,a|0,m|0);w=x;x=0;if(!(w&1)){k[f>>2]=26664;k[h>>2]=26704;k[t>>2]=26684;k[m>>2]=20392;K2a(n);obb(m);mab(h);r=d;return}else z=21}else z=21;while(0);if((z|0)==21){u=Hc()|0;H=u;I=M}J=H;K=I;k[f>>2]=26664;k[h>>2]=26704;k[t>>2]=26684;k[m>>2]=20392;K2a(n);obb(m);mab(h);Sc(J|0)}while(0);o=q;p=s;mab(h);Sc(p|0)} - -// EMSCRIPTEN_END_FUNCS -var Of=[OJb,OJb,Vyb,OJb,Wyb,OJb,Xyb,OJb,Yyb,OJb,Zyb,OJb,_yb,OJb,$yb,OJb,azb,OJb,bzb,OJb,czb,OJb,dzb,OJb,ezb,OJb,fzb,OJb,gzb,OJb,hzb,OJb,izb,OJb,jzb,OJb,kzb,OJb,lzb,OJb,mzb,OJb,clb,nlb,job,nob,wob,yob,Fub,Qub,cxb,exb,OJb,OJb,OJb,OJb,OJb,OJb,OJb,OJb,OJb,OJb,OJb,OJb];var Pf=[PJb,PJb,ozb,PJb,pzb,PJb,qzb,PJb,rzb,PJb,szb,PJb,tzb,PJb,uzb,PJb,vzb,PJb,wzb,PJb,xzb,PJb,yzb,PJb,zzb,PJb,Azb,PJb,Bzb,PJb,Czb,PJb,Dzb,PJb,Ezb,PJb,Fzb,PJb,Gzb,PJb,Hzb,PJb,pDa,oDa,lDa,Zi,Qn,Rn,F2a,ty,Hy,Iy,ID,NR,AR,CR,NS,jU,pY,M$,Lea,kla,npa,XE,Yta,tua,uua,Bua,Iua,Mua,Nua,Qua,Sua,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb,PJb];var Qf=[QJb,QJb,Jzb,QJb,Kzb,QJb,Lzb,QJb,Mzb,QJb,Nzb,QJb,Ozb,QJb,Pzb,QJb,Qzb,QJb,Rzb,QJb,Szb,QJb,Tzb,QJb,Uzb,QJb,Vzb,QJb,Wzb,QJb,Xzb,QJb,Yzb,QJb,Zzb,QJb,_zb,QJb,$zb,QJb,aAb,QJb,ou,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb,QJb];var Rf=[RJb,RJb,cAb,RJb,dAb,RJb,eAb,RJb,fAb,RJb,gAb,RJb,hAb,RJb,iAb,RJb,jAb,RJb,kAb,RJb,lAb,RJb,mAb,RJb,nAb,RJb,oAb,RJb,pAb,RJb,qAb,RJb,rAb,RJb,sAb,RJb,tAb,RJb,uAb,RJb,vAb,RJb,Gob,Qob,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb,RJb];var Sf=[SJb,SJb,xAb,SJb,yAb,SJb,zAb,SJb,AAb,SJb,BAb,SJb,CAb,SJb,DAb,SJb,EAb,SJb,FAb,SJb,GAb,SJb,HAb,SJb,IAb,SJb,JAb,SJb,KAb,SJb,LAb,SJb,MAb,SJb,NAb,SJb,OAb,SJb,PAb,SJb,QAb,SJb,yg,Pg,Og,Qg,Peb,Reb,Qeb,Seb,Rg,Sg,Eh,Qh,Sh,Th,Uh,Wh,Xh,Yh,Mh,Nh,Oh,Ph,Ch,Hh,Kh,Lh,Bh,bi,mi,hi,ii,ji,qi,Pi,Hi,Ki,Li,Qi,Ri,Ui,Vi,dj,ej,bl,cl,dl,lk,Fk,mk,Bk,Ck,Dk,Ek,zk,Ak,pk,qk,sk,tk,uk,wk,xk,yk,Wk,Sk,Tk,Uk,Vk,Ik,Jk,Lk,Mk,Nk,Pk,Qk,Rk,Zk,_k,xl,tl,ul,vl,wl,jl,kl,ml,nl,ol,ql,rl,sl,Pl,Ql,Rl,Sl,El,Fl,Hl,Il,Jl,Ll,Ml,Nl,Al,Bl,im,jm,km,lm,Zl,_l,am,bm,cm,em,fm,gm,Vl,Wl,tm,um,Sm,Tm,Um,Vm,Im,Jm,Lm,Mm,Nm,Pm,Qm,Rm,Xm,Zn,_n,On,ho,co,eo,Eub,bp,oqb,np,jp,Yp,Zp,_p,$p,Up,Vp,Ap,Bp,Ep,Fp,Gp,Jp,Kp,Lp,Pp,Qp,Lq,Mq,Nq,Oq,yq,zq,Aq,Bq,kq,lq,oq,pq,qq,tq,uq,vq,fq,Dq,Vcb,Xcb,Wcb,Ycb,Pq,Qq,Rq,Sq,Ds,Es,ft,gt,ht,it,_s,$s,Xt,St,Aw,zw,Sx,Tx,Ux,Vx,Wx,Xx,qx,Dx,Ix,Jx,Iw,Jw,Ex,Fx,FA,GA,JA,KA,LA,xA,yA,zA,AA,aA,bA,cA,dA,_y,$y,az,bz,My,Ny,Qy,Ry,Sy,Vy,Wy,Xy,fz,gz,iz,jz,kz,mz,nz,oz,Kz,Lz,Mz,Nz,zz,Az,Cz,Dz,Ez,Gz,Hz,Iz,Qz,Rz,Tz,Uz,Vz,Xz,Yz,Zz,tA,uA,vA,wA,hA,iA,kA,lA,mA,oA,pA,qA,iCa,EA,JC,KC,LC,MC,yC,zC,BC,CC,DC,FC,GC,HC,DE,EE,FE,GE,hE,iE,jE,kE,lE,mE,c0a,ND,OD,PD,dE,eE,fE,gE,TD,UD,WD,XD,YD,_D,$D,aE,jgb,mgb,kgb,ngb,lgb,ogb,pE,qE,tE,uE,vE,yE,zE,AE,JQ,KQ,LQ,MQ,AQ,BQ,EQ,FQ,rQ,sQ,vQ,wQ,iQ,jQ,mQ,nQ,_P,$P,cQ,dQ,OP,PP,SP,TP,DP,EP,HP,IP,mP,nP,qP,rP,IO,JO,MO,NO,zO,AO,DO,EO,qO,rO,uO,vO,hO,iO,lO,mO,_N,$N,cO,dO,RN,SN,VN,WN,IN,JN,MN,NN,zN,AN,DN,EN,qN,rN,uN,vN,hN,iN,lN,mN,_M,$M,cN,dN,RM,SM,VM,WM,GM,HM,KM,LM,rM,sM,vM,wM,iM,jM,mM,nM,$L,aM,dM,eM,SL,TL,WL,XL,JL,KL,NL,OL,AL,BL,EL,FL,rL,sL,vL,wL,iL,jL,mL,nL,$K,aL,dL,eL,SK,TK,WK,XK,DI,KK,NK,OK,CK,FK,GK,uK,xK,yK,mK,pK,qK,eK,hK,iK,YJ,$J,aK,PJ,QJ,TJ,UJ,GJ,HJ,KJ,LJ,yJ,BJ,CJ,qJ,tJ,uJ,iJ,lJ,mJ,aJ,dJ,eJ,UI,XI,YI,MI,PI,QI,EI,HI,II,uI,vI,yI,zI,lI,mI,pI,qI,cI,dI,gI,hI,oH,WH,ZH,_H,OH,RH,SH,GH,JH,KH,yH,BH,CH,pH,sH,tH,dH,eH,hH,iH,VG,WG,ZG,_G,KG,LG,OG,PG,AG,BG,EG,FG,qG,rG,uG,vG,gG,hG,kG,lG,YF,ZF,aG,bG,OF,PF,SF,TF,EF,FF,IF,JF,iP,jP,kP,lP,ZO,_O,aP,bP,cP,eP,fP,gP,TQ,UQ,XQ,YQ,rR,sR,tR,uR,DS,ES,FS,GS,VS,WS,ZS,_S,gT,hT,jT,kT,lT,nT,oT,pT,iY,jY,kY,lY,cY,dY,eY,fY,ZX,_X,OX,PX,BX,CX,DX,EX,rX,sX,vX,wX,kX,lX,mX,nX,PW,QW,TW,UW,LW,MW,NW,OW,HW,IW,JW,KW,zW,AW,BW,CW,sW,tW,uW,vW,kW,lW,mW,nW,oW,pW,qW,rW,DW,EW,FW,GW,_W,$W,bX,cX,dX,fX,gX,hX,JX,KX,UX,VX,OZ,PZ,QZ,RZ,KZ,LZ,MZ,NZ,GZ,HZ,IZ,JZ,CZ,DZ,EZ,FZ,uZ,xZ,yZ,D_,E_,F_,G_,z_,A_,B_,C_,v_,w_,x_,y_,t_,u_,k_,l_,V_,__,$_,a$,C1,D1,F1,X1,Y1,_1,$1,a2,c2,d2,e2,$4,g4,i5,j5,k5,l5,m5,n5,o5,p5,q5,r5,s5,t5,u5,v5,w5,x5,y5,z5,A5,B5,C5,F5,G5,J5,K5,L5,M5,N5,O5,P5,Q5,R5,S5,T5,U5,V5,W5,X5,Y5,Z5,_5,$5,a6,b6,c6,d6,e6,f6,g6,h6,i6,j6,k6,l6,m6,n6,o6,p6,q6,r6,s6,t6,u6,v6,w6,x6,y6,z6,A6,B6,C6,D6,E6,F6,G6,H6,I6,J6,K6,L6,M6,N6,O6,Y7,Z7,W7,X7,U7,V7,Q7,R7,S7,T7,M7,N7,O7,P7,r7,L7,J7,K7,F7,G7,H7,I7,B7,C7,D7,E7,x7,y7,z7,A7,t7,u7,v7,w7,s7,p7,q7,d7,m7,n7,o7,h7,i7,j7,k7,e7,f7,g7,Z6,_6,$6,a7,T6,Y6,X6,V6,W6,U6,R6,S6,P6,Q6,b7,c7,Hea,Iea,Jea,Kea,rea,sea,tea,uea,Mda,Nda,Oda,Pda,Bda,Cda,Eda,Fda,Gda,Ida,Jda,Kda,nCa,Wda,zea,Aea,Bea,Cea,Dea,Eea,Fea,Gea,Pja,Qja,Rja,Sja,Dja,Eja,Gja,Hja,Ija,Kja,Lja,Mja,Kka,Nka,Oka,Xka,_ka,$ka,ala,Gma,Jma,Kma,Zoa,_oa,$oa,apa,Woa,Xoa,Eoa,Foa,Hoa,Ioa,Joa,Loa,Moa,Noa,Roa,Soa,zqa,Aqa,Bqa,Cqa,tqa,uqa,vqa,wqa,jqa,kqa,nqa,oqa,eqa,fqa,gqa,hqa,$qa,Xra,_ra,$ra,Sqa,Ora,Rra,Sra,Ara,Bra,Era,Fra,qra,tra,ura,ira,lra,mra,ara,dra,era,Tqa,Wqa,Xqa,Tsa,Usa,Vsa,Wsa,kya,lya,mya,nya,gya,hya,iya,jya,bya,cya,dya,eya,Qxa,Rxa,Sxa,Txa,yxa,Bxa,Cxa,Dxa,uxa,vxa,wxa,xxa,Pwa,Qwa,Rwa,Swa,Lwa,Mwa,Nwa,Owa,fwa,gwa,hwa,iwa,Zva,_va,$va,awa,Rva,Sva,Tva,Uva,Fva,Gva,Hva,Iva,tva,uva,vva,wva,pva,qva,rva,sva,dva,eva,fva,gva,Wua,Xua,Yua,Zua,_ua,$ua,ava,bva,hva,iva,jva,kva,lva,mva,nva,ova,xva,yva,zva,Ava,Bva,Cva,Dva,Eva,Jva,Kva,Lva,Mva,Nva,Ova,Pva,Qva,Vva,Wva,Xva,Yva,bwa,cwa,dwa,ewa,jwa,kwa,lwa,mwa,nwa,owa,pwa,qwa,rwa,swa,twa,uwa,vwa,wwa,xwa,ywa,zwa,Awa,Bwa,Cwa,Dwa,Ewa,Fwa,Gwa,Hwa,Iwa,Jwa,Kwa,Twa,Uwa,Vwa,Wwa,Ywa,Zwa,_wa,$wa,axa,bxa,cxa,dxa,exa,fxa,gxa,hxa,ixa,jxa,kxa,lxa,mxa,nxa,oxa,pxa,qxa,rxa,sxa,txa,Hxa,Ixa,Jxa,Kxa,Lxa,Mxa,Nxa,Oxa,Uxa,Vxa,Wxa,Xxa,Yxa,Zxa,_xa,$xa,oya,pya,qya,rya,DCa,eza,aza,bza,cza,dza,Qya,Rya,Uya,Vya,Wya,Yya,Zya,_ya,pza,qza,rza,sza,_za,bAa,cAa,tBa,_Aa,$Aa,bBa,pBa,qBa,rBa,sBa,dBa,eBa,hBa,iBa,jBa,lBa,mBa,nBa,TBa,UBa,XBa,_Ba,jCa,lCa,oCa,qCa,rCa,tCa,uCa,vCa,wCa,xCa,yCa,zCa,ECa,HCa,ICa,ACa,BCa,KCa,LCa,MCa,NCa,OCa,PCa,QCa,RCa,SCa,TCa,UCa,VCa,WCa,XCa,V_a,W_a,t$a,u$a,X_a,e$a,j1a,v$a,ccb,F$a,L$a,obb,Q$a,W$a,d0a,g0a,$$a,a0a,N0a,g1a,h1a,k1a,l1a,m1a,q1a,r1a,V9a,W9a,mab,nab,Yab,Zab,pbb,dcb,Tdb,Vdb,Udb,Wdb,zfb,Bfb,Afb,Cfb,ygb,zgb,lab,Egb,Ggb,Lgb,Ngb,Vgb,Wgb,khb,lhb,Lhb,Mhb,mib,nib,Kib,Lib,djb,ejb,Kjb,Ljb,kkb,lkb,Gkb,Hkb,$kb,blb,llb,mlb,tlb,ulb,xlb,ylb,Jlb,Klb,cmb,dmb,xmb,ymb,Smb,Tmb,enb,fnb,snb,tnb,Gnb,Hnb,Unb,Vnb,hob,iob,uob,vob,Eob,Fob,Oob,Pob,Yob,Zob,fpb,gpb,mpb,npb,qpb,rpb,upb,vpb,zpb,Apb,Dpb,Epb,Hpb,Ipb,Tpb,Upb,sqb,tqb,yqb,zqb,Tqb,Uqb,Cub,drb,Dub,krb,Grb,Mtb,Ntb,Otb,Ptb,bub,fub,Mgb,nqb,Cqb,xrb,Orb,Wrb,Gtb,Htb,Itb,Jtb,gxb,hxb,ixb,jxb,kxb,lxb,mxb,nxb,oxb,pxb,qxb,rxb,Bxb,Cxb,Nxb,Oxb,ayb,byb,myb,oyb,nyb,pyb,ryb,tyb,syb,uyb,wyb,zyb,xyb,Ayb,yyb,Byb,Ebb,Kw,Dh,jdb,Tj,Uj,Xj,om,Yj,ak,Gk,K2a,fl,gl,gj,jk,kk,hl,Gm,Fo,Go,$pb,GBa,O5a,HBa,yp,eq,iq,Ot,Os,Ms,Ts,Cs,Wt,Hx,Kpb,dz,fA,Oz,Ky,xz,wC,nE,RD,fF,XO,RR,KR,eT,QU,YW,N_,V1,wba,gea,zda,Ela,Bja,Wja,fla,Gka,ela,kka,Jka,Uka,yma,Dma,gla,hla,Lna,Coa,vsa,ipa,SZ,Qw,Oya,yAa,IDa,KWa,UWa,qXa,EXa,PXa,TXa,r$a,Y9a,b$a,T1a,g9a,h9a,w9a,a$a,H9a,idb,uLa,mob,kob,pqb,Pwb,yYa,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb,SJb];var Tf=[TJb,TJb,SAb,TJb,TAb,TJb,UAb,TJb,VAb,TJb,WAb,TJb,XAb,TJb,YAb,TJb,ZAb,TJb,_Ab,TJb,$Ab,TJb,aBb,TJb,bBb,TJb,cBb,TJb,dBb,TJb,eBb,TJb,fBb,TJb,gBb,TJb,hBb,TJb,iBb,TJb,jBb,TJb,Sbb,ih,oh,th,uh,ai,Ji,Ti,Tp,Eq,IA,nB,mB,cC,DQ,GQ,uQ,xQ,lQ,oQ,bQ,eQ,RP,UP,GP,JP,pP,sP,LO,OO,CO,FO,tO,wO,kO,nO,bO,eO,UN,XN,LN,ON,CN,FN,tN,wN,kN,nN,bN,eN,UM,XM,JM,MM,uM,xM,lM,oM,cM,fM,VL,YL,ML,PL,DL,GL,uL,xL,lL,oL,cL,fL,VK,YK,MK,PK,EK,HK,wK,zK,oK,rK,gK,jK,_J,bK,SJ,VJ,JJ,MJ,AJ,DJ,sJ,vJ,kJ,nJ,cJ,fJ,WI,ZI,OI,RI,GI,JI,xI,AI,oI,rI,fI,iI,YH,QH,IH,AH,rH,gH,jH,YG,$G,NG,QG,DG,GG,tG,wG,jG,mG,$F,cG,RF,UF,HF,KF,WQ,YS,AV,BV,CV,DV,FT,GT,EV,FV,GV,HV,IV,JV,KV,LV,MV,NV,OV,PV,QV,RV,SV,TV,UV,VV,WV,XV,YV,ZV,ST,_V,$V,UT,aW,bW,cW,dW,$T,eW,bU,fW,gW,hW,gU,hU,jW,YX,NX,uX,SW,RY,SY,TY,UY,VY,WY,XY,YY,kZ,eZ,gZ,hZ,wZ,m_,n_,r_,J0,K0,L0,w$,M0,N0,z$,B$,O0,P0,E$,Q0,G$,R0,K$,S0,T0,U0,V0,W0,X0,Y0,Z0,_0,$0,a1,b1,c1,d1,e1,H$,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1,r1,t1,Q1,R1,S1,k2,n2,p2,r2,z2,A2,B2,C2,D2,E2,l4,F2,G2,w4,H2,I2,N2,O2,P2,Q2,z4,J2,K2,C4,L2,M2,B4,R2,S2,T2,U2,E4,V2,W2,Q4,X2,Y2,H4,Z2,_2,$2,a3,J4,b3,c3,d3,e3,f3,g3,h3,i3,j3,k3,l3,m3,n3,o3,p3,q3,r3,s3,t3,u3,v3,w3,x3,y3,z3,A3,B3,C3,D3,E3,H3,I3,F3,G3,J3,K3,L3,M3,N3,O3,P3,Q3,R3,S3,T3,U3,V3,W3,X3,Y3,Z3,_3,$3,a4,b4,c4,d4,e4,Sba,Yba,Q8,ica,kaa,Faa,L8,Aca,Eca,k9,p9,q9,Oca,G9,Sca,Xca,_9,aaa,dda,Baa,qea,Jfa,Kfa,Lfa,Mfa,Nfa,Ofa,Pfa,Qfa,Rfa,Sfa,Tfa,Ufa,Vfa,Wfa,Xfa,Yfa,Zfa,_fa,$fa,aga,cga,dga,ega,fga,gga,hga,bga,iga,jga,kga,lga,mga,nga,oga,pga,qga,rga,sga,tga,uga,vga,wga,xga,yga,Fha,Gha,Hha,Iha,Jha,Kha,Lha,Mha,Nha,Oha,Pha,Qha,Rha,Sha,Tha,Uha,Vha,Wha,Yha,Zha,_ha,$ha,aia,bia,Xha,cia,dia,eia,fia,gia,hia,iia,jia,kia,lia,mia,nia,oia,pia,qia,ria,sia,Mka,Zka,Ima,jna,lna,Qna,Tna,zoa,Voa,mqa,pqa,Zra,Qra,Mra,Dra,Gra,zra,sra,kra,cra,Vqa,Axa,aAa,G$a,K$a,R$a,V$a,Gcb,Nlb,Olb,Plb,Qlb,Slb,Tlb,gmb,hmb,imb,jmb,lmb,mmb,Bmb,Cmb,Dmb,Emb,Gmb,Hmb,Wmb,Xmb,Ymb,Zmb,$mb,anb,inb,jnb,knb,lnb,nnb,onb,wnb,xnb,ynb,znb,Bnb,Cnb,Knb,Lnb,Mnb,Nnb,Pnb,Qnb,Ynb,Znb,_nb,$nb,bob,cob,apb,jpb,Utb,Wtb,Ytb,Vtb,Xtb,Ztb,Eab,Ei,Fi,m4,saa,ru,iu,uu,Zg,gaa,bpa,pu,lpa,QC,QQ,zg,Cpa,Dpa,Nr,Hv,Ku,u3a,n2a,L3a,_g,Fh,Gh,_h,di,Xeb,cab,Vj,$j,ek,H0a,ok,Hk,il,zl,Ul,Em,G0a,Hm,wo,xo,yo,vo,oo,po,Ln,zo,bo,Yn,Ao,bqb,zp,Np,Xp,Ndb,jq,xq,zu,Rv,Sv,Ps,Rs,Us,Vs,rw,sw,uw,bu,Pw,Rx,Xw,Sw,Hw,Tw,Uw,dx,fx,gx,yx,sx,ux,vx,ky,my,qy,D0a,uy,by,Ey,iy,PA,Ly,Zy,ez,qz,yz,Pz,$z,gA,sA,QA,By,pB,EB,OB,xC,PQ,YC,ku,oD,nC,DD,eS,Yx,JD,KD,OC,ME,OE,xD,SD,cE,oE,CE,qF,sF,xF,AF,kF,DF,nF,UG,nH,YO,SQ,NQ,oR,kR,sS,xS,AS,CS,OS,fT,rT,esa,mU,CT,rU,tU,xU,Eaa,AU,DU,maa,FU,daa,MU,NU,RU,SU,P9,VU,faa,A9,iaa,S8,$U,mY,gY,HX,AX,pX,oX,wW,yW,ZW,jX,RX,aY,vY,g_,oaa,f4,Q_,X_,Y_,Z_,H_,g$,h$,V$,o$,W$,Z$,w1,B1,W1,g2,x2,L_,d5,e5,f5,g5,h5,kU,eaa,_7,Saa,_aa,$aa,bba,cba,eba,iba,pba,D8,wP,f9,Fba,Mba,Eya,e8,Nba,J8a,vea,uda,Ada,I8a,vu,tu,Oga,Jia,Bia,Nia,ula,Oia,Cja,Oja,Vja,Mia,B9,Sma,Rma,ama,Uma,Vma,wla,dka,Hka,Ika,ema,Cka,Ala,Dla,E8,yla,Bla,Cla,Ama,rD,mla,qna,ana,M9,sna,F9,Gia,dja,vla,Ska,taa,zna,Dna,poa,Pna,Sna,voa,Doa,Poa,Qpa,UZ,T$,TZ,msa,t4,lsa,u4,Hna,Gqa,iR,Ysa,bta,fta,Tta,gta,wya,vya,Aya,Vta,zya,yya,ita,Xta,jta,Zta,lta,mta,ota,pta,qta,rta,sta,vta,bua,dua,yta,fua,wta,lua,Cta,pua,Bta,Eua,Fua,Qta,Rta,Uua,fya,aya,Vua,Pxa,Gxa,Xwa,cva,Pya,zza,Nza,kAa,lAa,tAa,pAa,AAa,cBa,ABa,fEa,DEa,WDa,i1a,C0a,U_a,v9a,c$a,__a,$_a,K0a,y1a,B1a,y6a,tab,Hfb,hkb,dvb,Aub,jkb,evb,Dkb,fvb,Bub,Fkb,gvb,flb,hlb,cnb,qnb,Enb,r5a,Snb,P6a,ovb,pvb,qvb,rvb,svb,tvb,Frb,uvb,vvb,wvb,xvb,yvb,zvb,Avb,Bvb,Cvb,Dvb,Evb,Fvb,Gvb,Hvb,Ivb,Jvb,Kvb,Lvb,Mvb,Nvb,Ovb,Pvb,Qvb,Tvb,Uvb,Vvb,Wvb,Xvb,Yvb,Zvb,_vb,$vb,awb,bwb,cwb,dwb,ewb,fwb,gwb,hwb,iwb,jwb,kwb,lwb,mwb,nwb,owb,pwb,qwb,rwb,swb,twb,uwb,vwb,wwb,xwb,ywb,zwb,Awb,Bwb,Cwb,Dwb,Ewb,Fwb,Gwb,Hwb,Iwb,Jwb,Kwb,Lwb,Mwb,Nwb,$tb,dub,yxb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb,TJb];var Uf=[UJb,UJb,lBb,UJb,mBb,UJb,nBb,UJb,oBb,UJb,pBb,UJb,qBb,UJb,rBb,UJb,sBb,UJb,tBb,UJb,uBb,UJb,vBb,UJb,wBb,UJb,xBb,UJb,yBb,UJb,zBb,UJb,ABb,UJb,BBb,UJb,CBb,UJb,DBb,UJb,EBb,UJb,mhb,nhb,ohb,phb,qhb,rhb,shb,thb,uhb,vhb,whb,Nhb,Ohb,Phb,Qhb,Rhb,Shb,Thb,Uhb,Vhb,Whb,Xhb,tib,vib,Pib,Rib,gjb,hjb,ijb,kjb,mjb,Njb,Ojb,Pjb,Rjb,Tjb,Job,Tob,fi,avb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb,UJb];var Vf=[VJb,VJb,GBb,VJb,HBb,VJb,IBb,VJb,JBb,VJb,KBb,VJb,LBb,VJb,MBb,VJb,NBb,VJb,OBb,VJb,PBb,VJb,QBb,VJb,RBb,VJb,SBb,VJb,TBb,VJb,UBb,VJb,VBb,VJb,WBb,VJb,XBb,VJb,YBb,VJb,ZBb,VJb,Wbb,Xbb,Vg,_bb,gh,hh,jh,kh,lh,mh,nh,Ih,Rh,Jh,Vh,li,ri,si,Ii,Oi,Si,Yi,nk,rk,vk,Kk,Ok,al,ll,pl,mCa,Gl,Kl,Dl,VBa,$l,dm,Yl,pm,Km,Om,Ym,ao,io,go,dp,ep,fp,op,kp,Cp,Hp,Dp,Ip,Sp,mq,rq,nq,sq,Cq,Iq,Fs,Tt,Kx,HA,NA,Oy,Ty,Py,Uy,hz,lz,pCa,Bz,Fz,Sz,Wz,jA,nA,kCa,sCa,AC,EC,rE,wE,VD,ZD,sE,xE,CQ,IQ,tQ,zQ,kQ,qQ,aQ,gQ,QP,WP,FP,LP,oP,uP,KO,QO,BO,HO,sO,yO,jO,pO,aO,gO,TN,ZN,KN,QN,BN,HN,sN,yN,jN,pN,aN,gN,TM,ZM,IM,OM,tM,zM,kM,qM,bM,hM,UL,_L,LL,RL,CL,IL,tL,zL,kL,qL,bL,hL,UK,_K,LK,RK,DK,JK,vK,BK,nK,tK,fK,lK,ZJ,dK,RJ,XJ,IJ,OJ,zJ,FJ,rJ,xJ,jJ,pJ,bJ,hJ,VI,$I,NI,TI,FI,LI,wI,CI,nI,tI,eI,kI,XH,bI,PH,VH,HH,NH,zH,FH,qH,wH,fH,lH,XG,bH,MG,SG,CG,IG,sG,yG,iG,oG,_F,eG,QF,WF,GF,MF,$O,dP,VQ,$Q,XS,bT,iT,mT,tX,zX,RW,XW,aX,eX,MX,XX,vZ,BZ,h4,o_,p_,q_,s_,Z1,b2,j4,k4,x4,A4,D4,G4,D5,E5,R4,M4,H5,I5,I4,K4,y4,L4,S4,T4,U4,V4,W4,Y4,Z4,X4,_4,Oba,Qba,Rba,Uba,Wba,Xba,_ba,aca,bca,cca,dca,fca,gca,kca,lca,mca,laa,nca,pca,qca,rca,sca,tca,uca,vca,xca,yca,Dca,Gca,Hca,Ica,l9,Jca,Lca,Mca,Nca,Qca,Rca,Tca,S9,Vca,Wca,Zca,$ca,ada,$9,bda,cda,fda,hda,ida,Caa,kda,mda,nda,oda,pda,rda,sda,tda,hea,lea,mea,nea,oea,Dda,Hda,wja,xja,yja,zja,Aja,mja,Fja,Jja,Lka,Rka,Yka,cla,Hma,Nma,Goa,Koa,Uoa,lqa,rqa,Yra,csa,Pra,Vra,Cra,Ira,rra,xra,jra,pra,bra,hra,Uqa,_qa,zxa,Fxa,Sya,Tya,Xya,$za,fAa,fBa,gBa,kBa,YBa,$Ba,FCa,JCa,HQa,R_a,H$a,Lcb,Ncb,Ocb,Kcb,M$a,N$a,S$a,Zbb,X$a,Y$a,b0a,S0a,V0a,tgb,fjb,hub,jub,lub,rub,tub,nub,pub,Mjb,iub,kub,mub,sub,uub,oub,qub,mkb,okb,qkb,skb,ukb,wkb,ykb,Akb,pkb,rkb,tkb,vkb,xkb,zkb,Bkb,Ikb,Kkb,Mkb,Okb,Qkb,Skb,Ukb,Wkb,Lkb,Nkb,Pkb,Rkb,Tkb,Vkb,Xkb,Llb,Mlb,Rlb,emb,fmb,kmb,zmb,Amb,Fmb,Umb,Vmb,_mb,gnb,hnb,mnb,unb,vnb,Anb,Inb,Jnb,Onb,Wnb,Xnb,aob,Brb,Crb,Erb,Krb,Lrb,Nrb,Srb,Trb,Vrb,_rb,$rb,bsb,Qtb,Stb,Rtb,Ttb,fsb,gsb,isb,msb,nsb,psb,tsb,usb,wsb,Asb,Bsb,Dsb,Hsb,Isb,Ksb,Osb,Psb,Rsb,Vsb,Wsb,Ysb,atb,btb,dtb,htb,itb,ktb,otb,ptb,rtb,Ctb,Dtb,Ftb,vtb,wtb,ytb,iyb,p4,_u,Qea,cv,KBa,zab,WJb,XJb,YJb,ZJb,_Jb,_j,$Jb,$Ta,ro,MBa,aKb,USa,wSa,Iu,kr,Tv,Vr,Xu,Nu,gy,gC,cdb,tD,eB,hB,lF,gB,dB,cB,XC,iB,jB,n4,o4,z9,N4,O4,P4,R_,v1,QIa,v4,rla,raa,VZ,WZ,jpa,$u,q4,tsa,Nsa,tya,sya,uya,ysa,xya,Fya,hza,BIa,iMa,tXa,AXa,DXa,QXa,bKb,cKb,aeb,Q1a,dKb,$La,ZKa,AVa,CVa,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb,VJb];var Wf=[eKb,eKb,$Bb,eKb,aCb,eKb,bCb,eKb,cCb,eKb,dCb,eKb,eCb,eKb,fCb,eKb,gCb,eKb,hCb,eKb,iCb,eKb,jCb,eKb,kCb,eKb,lCb,eKb,mCb,eKb,nCb,eKb,oCb,eKb,pCb,eKb,qCb,eKb,rCb,eKb,sCb,eKb,lob,xob,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb,eKb];var Xf=[fKb,fKb,uCb,fKb,vCb,fKb,wCb,fKb,xCb,fKb,yCb,fKb,zCb,fKb,ACb,fKb,BCb,fKb,CCb,fKb,DCb,fKb,ECb,fKb,FCb,fKb,GCb,fKb,HCb,fKb,ICb,fKb,JCb,fKb,KCb,fKb,LCb,fKb,MCb,fKb,NCb,fKb,Tbb,Ybb,acb,wm,xm,Fq,rx,$S,YCa,ZCa,_Ca,$Ca,aDa,gDa,hDa,lYa,BRa,mQa,SQa,CRa,P0a,Q0a,Hcb,Mcb,I$a,Qcb,T$a,Qgb,Zgb,_ob,hpb,Wqb,Yqb,$qb,frb,hrb,lrb,qrb,srb,vrb,Dqb,Kqb,Nqb,Qqb,d4a,Kpa,O3a,mpa,_i,f4a,ei,bk,gKb,WPa,Pn,IUa,hUa,QSa,Wn,i4a,qfb,Idb,XRa,Ns,Cr,Er,Gr,ms,os,qs,lw,pw,yR,ZE,$E,_A,JR,_3a,GD,LE,NE,PE,WE,cF,aR,dR,BR,DR,SS,qU,cU,qaa,xY,Xsa,G1,Vaa,Bga,uia,Yja,nla,Zja,vna,d$,Jya,EDa,PDa,RDa,ODa,nEa,jEa,dEa,IEa,pXa,rXa,sXa,xXa,yXa,zXa,BXa,CXa,FXa,GXa,IXa,vYa,uYa,ZMa,KMa,bOa,aOa,$Na,BKa,ivb,mvb,Po,yLa,yKa,wVa,tVa,xVa,ARa,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb,fKb];var Yf=[hKb,hKb,PCb,hKb,QCb,hKb,RCb,hKb,SCb,hKb,TCb,hKb,UCb,hKb,VCb,hKb,WCb,hKb,XCb,hKb,YCb,hKb,ZCb,hKb,_Cb,hKb,$Cb,hKb,aDb,hKb,bDb,hKb,cDb,hKb,dDb,hKb,eDb,hKb,fDb,hKb,gDb,hKb,Iob,Sob,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb,hKb];var Zf=[iKb,iKb,iDb,iKb,jDb,iKb,kDb,iKb,lDb,iKb,mDb,iKb,nDb,iKb,oDb,iKb,pDb,iKb,qDb,iKb,rDb,iKb,sDb,iKb,tDb,iKb,uDb,iKb,vDb,iKb,wDb,iKb,xDb,iKb,yDb,iKb,zDb,iKb,ADb,iKb,BDb,iKb,ox,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb,iKb];var _f=[jKb,jKb,DDb,jKb,EDb,jKb,FDb,jKb,GDb,jKb,HDb,jKb,IDb,jKb,JDb,jKb,KDb,jKb,LDb,jKb,MDb,jKb,NDb,jKb,ODb,jKb,PDb,jKb,QDb,jKb,RDb,jKb,SDb,jKb,TDb,jKb,UDb,jKb,VDb,jKb,WDb,jKb,Tg,Gq,sDa,rDa,qDa,Icb,Ubb,$ob,ipb,jyb,Bpa,No,Oo,_x,SO,WU,Gba,qla,jD,iua,Hua,hvb,jvb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb,jKb];var $f=[kKb,kKb,YDb,kKb,ZDb,kKb,_Db,kKb,$Db,kKb,aEb,kKb,bEb,kKb,cEb,kKb,dEb,kKb,eEb,kKb,fEb,kKb,gEb,kKb,hEb,kKb,iEb,kKb,jEb,kKb,kEb,kKb,lEb,kKb,mEb,kKb,nEb,kKb,oEb,kKb,pEb,kKb,xW,dba,Kba,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb,kKb];var ag=[lKb,lKb,rEb,lKb,sEb,lKb,tEb,lKb,uEb,lKb,vEb,lKb,wEb,lKb,xEb,lKb,yEb,lKb,zEb,lKb,AEb,lKb,BEb,lKb,CEb,lKb,DEb,lKb,EEb,lKb,FEb,lKb,GEb,lKb,HEb,lKb,IEb,lKb,JEb,lKb,KEb,lKb,S3a,nD,a_,_ta,Cua,sib,yib,Oib,Tib,lKb,lKb,lKb,lKb,lKb,lKb,lKb,lKb,lKb,lKb,lKb,lKb,lKb];var bg=[mKb,mKb,MEb,mKb,NEb,mKb,OEb,mKb,PEb,mKb,QEb,mKb,REb,mKb,SEb,mKb,TEb,mKb,UEb,mKb,VEb,mKb,WEb,mKb,XEb,mKb,YEb,mKb,ZEb,mKb,_Eb,mKb,$Eb,mKb,aFb,mKb,bFb,mKb,cFb,mKb,dFb,mKb,Eba,Jba,hua,oob,zob,Hob,Rob,mKb,mKb,mKb,mKb,mKb,mKb,mKb,mKb,mKb,mKb,mKb,mKb,mKb,mKb,mKb];var cg=[nKb,nKb,fFb,nKb,gFb,nKb,hFb,nKb,iFb,nKb,jFb,nKb,kFb,nKb,lFb,nKb,mFb,nKb,nFb,nKb,oFb,nKb,pFb,nKb,qFb,nKb,rFb,nKb,sFb,nKb,tFb,nKb,uFb,nKb,vFb,nKb,wFb,nKb,xFb,nKb,yFb,nKb,Wg,Xg,$g,ah,dh,eh,fh,ph,ki,ni,Ni,Wi,Xi,$k,Cl,Xl,$n,fo,Rp,Jq,Kq,MA,m0a,HQ,yQ,pQ,fQ,VP,KP,tP,PO,GO,xO,oO,fO,YN,PN,GN,xN,oN,fN,YM,NM,yM,pM,gM,ZL,QL,HL,yL,pL,gL,ZK,QK,IK,AK,sK,kK,cK,WJ,NJ,EJ,wJ,oJ,gJ,_I,SI,KI,BI,sI,jI,aI,UH,MH,EH,vH,kH,aH,RG,HG,xG,nG,dG,VF,LF,_Q,aT,aV,bV,cV,vT,dV,HT,eV,fV,gV,hV,IT,LT,iV,jV,NT,kV,lV,mV,nV,oV,pV,qV,PT,QT,RT,rV,OT,sV,tV,uV,TT,vV,WT,XT,ZT,_T,wV,aU,xV,dU,eU,fU,yV,zV,iW,yX,WW,LX,WX,oY,CY,qY,DY,sY,tY,EY,FY,GY,HY,IY,JY,KY,LY,MY,NY,OY,PY,QY,uY,qZ,rZ,sZ,dZ,tZ,iZ,jZ,bZ,AZ,a0,b0,s$,u$,c0,d0,y$,A$,C$,e0,D$,I$,F$,f0,J$,g0,h0,i0,j0,k0,l0,m0,n0,o0,p0,q0,r0,s0,t0,u0,v0,w0,x0,y0,z0,A0,B0,C0,D0,E0,F0,G0,H0,I0,s1,E1,j2,l2,m2,u2,o2,q2,s2,t2,o8,p8,r8,Pba,w8,x8,z8,Vba,N8,O8,T8,U8,Y8,eca,haa,Gaa,C8,F8,I8,wca,Fca,g9,h9,i9,j9,a9,b9,u9,Kca,C9,D9,E9,V9,R9,Uca,X9,Y9,xaa,Aaa,Iaa,Laa,iea,jea,kea,Rea,Sea,Tea,Uea,Vea,Xea,Wea,Yea,Zea,_ea,$ea,afa,cfa,dfa,ffa,efa,gfa,hfa,ifa,jfa,lfa,mfa,nfa,ofa,pfa,qfa,kfa,rfa,sfa,tfa,ufa,vfa,wfa,xfa,zfa,Afa,Bfa,Cfa,Dfa,Efa,Ffa,Gfa,Hfa,Ifa,Jga,Nga,Qga,Rga,Sga,Tga,Uga,Vga,Wga,Xga,Yga,_ga,$ga,aha,bha,cha,dha,eha,fha,hha,iha,jha,kha,lha,mha,gha,nha,oha,pha,qha,rha,sha,uha,vha,wha,xha,yha,zha,Aha,Bha,Cha,Dha,Eha,ika,hka,vka,mka,nka,oka,pka,lka,qka,rka,ska,tka,uka,Qka,bla,Mma,Wma,Xma,Zma,_ma,$ma,cna,ena,fna,hna,yoa,Ona,Rna,Una,Vna,Xna,Yna,Zna,_na,$na,aoa,boa,coa,doa,eoa,foa,goa,hoa,joa,Aoa,Toa,qqa,asa,bsa,Ura,Lra,Hra,yra,vra,wra,ora,fra,gra,Zqa,Exa,eAa,aBa,Pcb,J$a,O$a,Rcb,$bb,U$a,Z$a,bcb,Vqb,Xqb,Zqb,erb,grb,prb,rrb,trb,Iqb,Lqb,Oqb,hyb,gyb,sv,yu,efb,rpa,tpa,ypa,hv,rv,Jpa,J3a,uv,Epa,xpa,upa,wpa,qpa,Ipa,Ig,M2a,$h,lqb,S2a,oKb,pKb,qKb,rKb,jo,mo,jn,kn,ZTa,wp,gq,jqb,sr,udb,bs,Gv,qv,ofb,kw,nw,qw,gv,pv,VE,dy,wy,Cy,aF,eA,cz,Jy,xB,WC,LB,MB,_q,QB,mC,eC,bF,dD,mqb,gD,pfb,aD,CD,ffb,Ox,SC,QD,TE,gF,_E,BF,ZC,RO,mR,pR,OR,HR,YE,cS,IR,RS,TS,US,dT,lU,pU,sU,uU,y9,yU,zU,tza,j8,bY,I_,aZ,K_,Paa,c8,Xaa,Yaa,Zaa,fba,gba,hba,lba,tba,uba,vba,yba,$7,Zda,Sda,Tq,Iia,rja,sja,N9,vja,Aka,Eka,oma,wma,Gla,fma,tma,W9,qoa,Rpa,Tpa,h2,nY,c$,i$,f$,Upa,sT,Ypa,Ena,bqa,spa,Lqa,zsa,dta,Hya,gza,Wza,Oza,vAa,DAa,QDa,$Ra,_Wa,bXa,rYa,x1a,Aab,$Ka,EKa,W5a,T2a,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb,nKb];var dg=[sKb,sKb,AFb,sKb,BFb,sKb,CFb,sKb,DFb,sKb,EFb,sKb,FFb,sKb,GFb,sKb,HFb,sKb,IFb,sKb,JFb,sKb,KFb,sKb,LFb,sKb,MFb,sKb,NFb,sKb,OFb,sKb,PFb,sKb,QFb,sKb,RFb,sKb,SFb,sKb,TFb,sKb,cp,Mrb,$o,at,Ogb,Xgb,oib,pib,uib,Aib,Mib,Nib,Qib,Vib,Arb,Drb,Jrb,Rrb,Urb,Zrb,asb,uqb,Aqb,arb,wrb,Rqb,esb,hsb,lsb,osb,ssb,vsb,zsb,Csb,Gsb,Jsb,Nsb,Qsb,Usb,Xsb,$sb,ctb,gtb,jtb,ntb,qtb,Btb,Etb,utb,xtb,ir,UE,cT,H1,ila,$4a,d8a,EVa,HVa,dxb,fxb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb,sKb];var eg=[tKb,tKb,VFb,tKb,WFb,tKb,XFb,tKb,YFb,tKb,ZFb,tKb,_Fb,tKb,$Fb,tKb,aGb,tKb,bGb,tKb,cGb,tKb,dGb,tKb,eGb,tKb,fGb,tKb,gGb,tKb,hGb,tKb,iGb,tKb,jGb,tKb,kGb,tKb,lGb,tKb,mGb,tKb,Fxb,Exb,Dxb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb,tKb];var fg=[uKb,uKb,oGb,uKb,pGb,uKb,qGb,uKb,rGb,uKb,sGb,uKb,tGb,uKb,uGb,uKb,vGb,uKb,wGb,uKb,xGb,uKb,yGb,uKb,zGb,uKb,AGb,uKb,BGb,uKb,CGb,uKb,DGb,uKb,EGb,uKb,FGb,uKb,GGb,uKb,HGb,uKb,xOa,yOa,zOa,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb,uKb];var gg=[vKb,vKb,JGb,vKb,KGb,vKb,LGb,vKb,MGb,vKb,NGb,vKb,OGb,vKb,PGb,vKb,QGb,vKb,RGb,vKb,SGb,vKb,TGb,vKb,UGb,vKb,VGb,vKb,WGb,vKb,XGb,vKb,YGb,vKb,ZGb,vKb,_Gb,vKb,$Gb,vKb,aHb,vKb,hp,gp,Bo,Do,Wm,Ho,Npb,JBa,o9a,yhb,lLa,Wpb,Xpb,Ypb,OIa,aJa,uIa,vKb,vKb,vKb,vKb,vKb];var hg=[wKb,wKb,cHb,wKb,dHb,wKb,eHb,wKb,fHb,wKb,gHb,wKb,hHb,wKb,iHb,wKb,jHb,wKb,kHb,wKb,lHb,wKb,mHb,wKb,nHb,wKb,oHb,wKb,pHb,wKb,qHb,wKb,rHb,wKb,sHb,wKb,tHb,wKb,uHb,wKb,vHb,wKb,Lba,cua,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb,wKb];var ig=[xKb,xKb,xHb,xKb,yHb,xKb,zHb,xKb,AHb,xKb,BHb,xKb,CHb,xKb,DHb,xKb,EHb,xKb,FHb,xKb,GHb,xKb,HHb,xKb,IHb,xKb,JHb,xKb,KHb,xKb,LHb,xKb,MHb,xKb,NHb,xKb,OHb,xKb,PHb,xKb,QHb,xKb,VW,zZ,Pka,Lma,dAa,_qb,mrb,nrb,orb,urb,Fqb,Gqb,Hqb,Pqb,epa,hr,Tn,no,Pdb,mr,Xr,Js,ow,yv,xw,e4a,mD,ER,VR,b4a,Ega,Fga,Xja,sD,kza,Zsa,cEa,PEa,QEa,KEa,e9a,f9a,PQa,Pub,$ub,GVa,BLa,rLa,OKa,uVa,Lxb,Kxb,Jxb,Ixb,Hxb,Gxb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb,xKb];var jg=[yKb,yKb,SHb,yKb,THb,yKb,UHb,yKb,VHb,yKb,WHb,yKb,XHb,yKb,YHb,yKb,ZHb,yKb,_Hb,yKb,$Hb,yKb,aIb,yKb,bIb,yKb,cIb,yKb,dIb,yKb,eIb,yKb,fIb,yKb,gIb,yKb,hIb,yKb,iIb,yKb,jIb,yKb,bh,qh,rh,sh,vh,wh,oi,pi,Mi,fk,el,qm,vm,Zm,pp,lp,mp,Ow,Rw,oB,PB,dC,ZQ,xX,q8,s8,Tba,u8,y8,A8,Zba,P8,V8,hca,jca,X8,jaa,naa,Haa,G8,J8,K8,_8,zca,Z8,Bca,d9,m9,n9,r9,o9,c9,v9,w9,Pca,x9,H9,L9,J9,I9,Q9,T9,U9,Yca,baa,Z9,yaa,zaa,eda,jda,Daa,Kaa,Jaa,Naa,Maa,pea,Tia,Via,Xia,Zia,aja,cja,eja,gja,ija,kja,nja,pja,Tra,nra,Yqa,O0a,S_a,R0a,T0a,X0a,W0a,ugb,q2a,Iqa,nu,caa,Cg,Nea,Jg,q3a,i8,zKb,Zh,gi,wi,ck,Lj,Xk,ik,Ol,hm,Fm,_m,bn,cn,hn,Sn,Cn,Kn,Ko,Op,Mp,Xo,bq,zn,wn,wq,Ov,Xs,bdb,dw,Qx,D2a,ay,cy,fy,rz,Yy,pz,Jz,_z,rA,TA,tB,zB,vB,sB,AB,qB,DB,FB,IB,uB,bC,_B,tz,iC,IC,UC,bE,BE,pF,iZa,rF,tF,mF,eF,yF,AM,BM,CM,aC,$B,CB,BB,PM,WO,hP,CP,NP,YP,ZP,GR,fC,qR,UR,FR,BS,qT,AT,nU,HU,JT,KT,MT,OU,PU,VT,l8,n8,YU,ZU,TX,IX,e9,iX,yY,AY,cZ,fZ,pZ,YZ,ZZ,_Z,$Z,b_,c_,d_,e_,f_,h_,i_,j_,S$,e$,i4,X$,Y$,n$,N$,y1,f2,i2,w2,c5,Raa,Qaa,Uaa,k8,jba,kba,oba,qba,rba,sba,zba,Aba,Bba,Cba,Iba,Qda,Xda,wea,fea,wz,dea,Yda,Rda,Lda,Uda,Tda,Mea,Cga,qp,yia,zia,Kia,Lia,xia,$ia,Dia,Cia,ola,uja,O9,Nja,Uja,zka,gka,xka,fka,cma,Dka,Fka,eka,zla,lla,dma,JU,vza,sla,Tja,Cma,_ia,vma,Yma,lja,UU,rna,dna,wna,xna,yna,ina,kma,kna,hja,Sia,Fna,Ina,Jna,Qoa,Ooa,Spa,eta,b$,Hla,Ila,vpa,ksa,usa,Mqa,hsa,gsa,uaa,qsa,vaa,sp,hta,Uta,kta,$ta,xta,zta,Ata,kua,mua,oua,rua,Dta,Eta,Fta,wua,xua,zua,Gta,Aua,Hta,jAa,Ota,Pta,Oua,$ya,uza,nza,yza,hAa,rAa,uAa,oAa,zAa,BAa,CAa,oBa,$Da,gEa,kEa,qEa,xEa,$0a,b1a,u6a,J9a,xgb,$db,B0a,kvb,lvb,nvb,Svb,rqb,xqb,crb,jrb,xpb,aub,eub,Spb,Mpb,_8a,b9a,H5a,u5a,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb,yKb];var kg=[AKb,AKb,lIb,AKb,mIb,AKb,nIb,AKb,oIb,AKb,pIb,AKb,qIb,AKb,rIb,AKb,sIb,AKb,tIb,AKb,uIb,AKb,vIb,AKb,wIb,AKb,xIb,AKb,yIb,AKb,zIb,AKb,AIb,AKb,BIb,AKb,CIb,AKb,DIb,AKb,EIb,AKb,BKb,xDa,wDa,CKb,DKb,CBa,Bj,BBa,Iya,GDa,aRa,UXa,EKb,vDa,AKb,AKb,AKb,AKb,AKb,AKb,AKb,AKb];var lg=[FKb,FKb,GIb,FKb,HIb,FKb,IIb,FKb,JIb,FKb,KIb,FKb,LIb,FKb,MIb,FKb,NIb,FKb,OIb,FKb,PIb,FKb,QIb,FKb,RIb,FKb,SIb,FKb,TIb,FKb,UIb,FKb,VIb,FKb,WIb,FKb,XIb,FKb,YIb,FKb,ZIb,FKb,Zo,Yo,ojb,Vjb,yrb,zrb,Hrb,Irb,Prb,Qrb,Xrb,Yrb,csb,dsb,jsb,ksb,qsb,rsb,xsb,ysb,Esb,Fsb,Lsb,Msb,Ssb,Tsb,Zsb,_sb,etb,ftb,ltb,mtb,ztb,Atb,stb,ttb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb,FKb];var mg=[GKb,GKb,$Ib,GKb,aJb,GKb,bJb,GKb,cJb,GKb,dJb,GKb,eJb,GKb,fJb,GKb,gJb,GKb,hJb,GKb,iJb,GKb,jJb,GKb,kJb,GKb,lJb,GKb,mJb,GKb,nJb,GKb,oJb,GKb,pJb,GKb,qJb,GKb,rJb,GKb,sJb,GKb,wib,zib,Sib,Uib,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb,GKb];var ng=[HKb,HKb,uJb,HKb,vJb,HKb,wJb,HKb,xJb,HKb,yJb,HKb,zJb,HKb,AJb,HKb,BJb,HKb,CJb,HKb,DJb,HKb,EJb,HKb,FJb,HKb,GJb,HKb,HJb,HKb,IJb,HKb,JJb,HKb,KJb,HKb,LJb,HKb,MJb,HKb,NJb,HKb,Ug,ch,Hq,$H,TH,LH,DH,uH,t8,B8,$ba,W8,oca,H8,$8,Cca,t9,K9,_ca,gda,lda,qda,Uia,Yia,bja,fja,jja,oja,cDa,dDa,fDa,Jcb,Vbb,Pgb,Ygb,vqb,Bqb,kyb,isa,Ag,Jqa,f5a,xg,Eg,Hg,Ah,Nn,Lo,Mo,xp,hq,wR,sy,Dy,vz,RB,jC,vC,$C,rC,AD,cD,VC,pD,DM,EM,TO,UO,VO,BP,zR,wS,LU,TU,_U,m$,oZ,r$,I1,$$,U1,v8,Waa,m8,mba,nba,xba,Dba,Cya,yda,Dga,Aia,Wia,tja,$la,tla,hma,Fma,mma,Ana,roa,hpa,Mpa,Npa,jR,Wta,nta,aua,uta,eua,gua,jua,nua,qua,sua,vua,yua,Ita,Dua,Kta,Lta,Mta,Gua,Jua,Kua,Lua,Nta,Pua,Rua,Tua,xza,Pza,Mza,BDa,rEa,IKb,Ppb,Qpb,Rpb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb,HKb];return{___cxa_can_catch:tDa,_free:yYa,_memset:Fyb,___cxa_is_pointer_type:uDa,_i64Add:Hyb,_memmove:Eyb,_compileJSON:Lg,_version:Kg,_compileJSONCallback:Ng,_malloc:xYa,_memcpy:Dyb,_llvm_bswap_i32:Jyb,_compileJSONMulti:Mg,_bitshift64Lshr:Iyb,_i64Subtract:Gyb,___errno_location:HSa,_bitshift64Shl:Kyb,__GLOBAL__I_000101:z$a,__GLOBAL__sub_I_ASTUtils_cpp:Kga,__GLOBAL__sub_I_ExpressionCompiler_cpp:pna,__GLOBAL__sub_I_CompilerContext_cpp:Bma,__GLOBAL__sub_I_Compiler_cpp:Kla,__GLOBAL__sub_I_CompilerUtils_cpp:Fla,__GLOBAL__sub_I_ContractCompiler_cpp:wka,__GLOBAL__sub_I_LValue_cpp:qja,__GLOBAL__sub_I_ArrayUtils_cpp:Hia,__GLOBAL__sub_I_ASTPrinter_cpp:tia,__GLOBAL__sub_I_CompilerStack_cpp:Ppa,__GLOBAL__sub_I_ASTJsonConverter_cpp:zga,__GLOBAL__sub_I_Types_cpp:Oaa,__GLOBAL__sub_I_AST_cpp:a5,__GLOBAL__sub_I_SyntaxChecker_cpp:v2,__GLOBAL__sub_I_ConstantEvaluator_cpp:T1,__GLOBAL__sub_I_DeclarationContainer_cpp:J1,__GLOBAL__sub_I_Why3Translator_cpp:ooa,__GLOBAL__sub_I_NameAndTypeResolver_cpp:P$,__GLOBAL__sub_I_GasEstimator_cpp:Kqa,__GLOBAL__sub_I_Exceptions_cpp:fsa,__GLOBAL__sub_I_SourceReferenceFormatter_cpp:jsa,__GLOBAL__sub_I_InterfaceHandler_cpp:psa,__GLOBAL__sub_I_Version_cpp:ssa,__GLOBAL__sub_I_Scanner_cpp:Ssa,__GLOBAL__sub_I_DocStringParser_cpp:cta,__GLOBAL__sub_I_Parser_cpp:Sta,__GLOBAL__sub_I_ParserBase_cpp:Bya,__GLOBAL__sub_I_Token_cpp:Gya,__GLOBAL__sub_I_AsmStack_cpp:lza,__GLOBAL__sub_I_AsmCodeGen_cpp:wza,__GLOBAL__sub_I_AsmParser_cpp:qAa,__GLOBAL__sub_I_iostream_cpp:A$a,___cxx_global_var_init_13_446:kC,___cxx_global_var_init_12:Qj,___cxx_global_var_init_13:Rj,__GLOBAL__sub_I_thread_cpp:Sj,__GLOBAL__sub_I_future_cpp:sm,__GLOBAL__sub_I_random_device_cpp:Dm,__GLOBAL__sub_I_operations_cpp:Mn,__GLOBAL__sub_I_portability_cpp:Wo,__GLOBAL__sub_I_error_code_cpp:ip,__GLOBAL__sub_I_CommonData_cpp:tp,__GLOBAL__sub_I_CommonIO_cpp:cq,__GLOBAL__sub_I_SHA3_cpp:$q,__GLOBAL__sub_I_json_value_cpp:jw,__GLOBAL__sub_I_CommonSubexpressionEliminator_cpp:jy,__GLOBAL__sub_I_SemanticInformation_cpp:kB,__GLOBAL__sub_I_ConstantOptimiser_cpp:wB,__GLOBAL__sub_I_jsonCompiler_cpp:cj,__GLOBAL__sub_I_GasMeter_cpp:lC,__GLOBAL__sub_I_LinkerObject_cpp:RC,__GLOBAL__sub_I_AssemblyItem_cpp:_C,__GLOBAL__sub_I_Assembly_cpp:uD,__GLOBAL__sub_I_ExpressionClasses_cpp:oF,__GLOBAL__sub_I_Instruction_cpp:RQ,__GLOBAL__sub_I_PathGasMeter_cpp:lR,__GLOBAL__sub_I_KnownState_cpp:LR,__GLOBAL__sub_I_ControlFlowGraph_cpp:nS,__GLOBAL__sub_I_BlockDeduplicator_cpp:MS,__GLOBAL__sub_I_TypeChecker_cpp:iU,__GLOBAL__sub_I_DocStringAnalyser_cpp:wY,__GLOBAL__sub_I_ReferencesResolver_cpp:nZ,__GLOBAL__sub_I_GlobalContext_cpp:XZ,__GLOBAL__sub_I_SemVerHandler_cpp:U_,runPostSets:Cyb,_emscripten_replace_memory:Nf,stackAlloc:og,stackSave:pg,stackRestore:qg,establishStackSpace:rg,setThrew:sg,setTempRet0:vg,getTempRet0:wg,dynCall_iiiiiiii:Uyb,dynCall_viiiii:nzb,dynCall_vid:Izb,dynCall_iiiiiid:bAb,dynCall_vi:wAb,dynCall_vii:RAb,dynCall_iiiiiii:kBb,dynCall_ii:FBb,dynCall_iiiiiiiiiiii:_Bb,dynCall_iiii:tCb,dynCall_viiiiiiiiiiiiiii:OCb,dynCall_viiiiiiii:hDb,dynCall_viiiiii:CDb,dynCall_viiiiiiiiiiiii:XDb,dynCall_viiiiiii:qEb,dynCall_viiiiiiiiii:LEb,dynCall_iii:eFb,dynCall_iiiiii:zFb,dynCall_diii:UFb,dynCall_dii:nGb,dynCall_i:IGb,dynCall_viiiiiiiiiiii:bHb,dynCall_iiiii:wHb,dynCall_viii:RHb,dynCall_v:kIb,dynCall_iiiiiiiii:FIb,dynCall_iiiiid:_Ib,dynCall_viiii:tJb}}) - - -// EMSCRIPTEN_END_ASM -(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_ASTPrinter_cpp=Module["__GLOBAL__sub_I_ASTPrinter_cpp"]=asm["__GLOBAL__sub_I_ASTPrinter_cpp"];var __GLOBAL__sub_I_ControlFlowGraph_cpp=Module["__GLOBAL__sub_I_ControlFlowGraph_cpp"]=asm["__GLOBAL__sub_I_ControlFlowGraph_cpp"];var __GLOBAL__sub_I_error_code_cpp=Module["__GLOBAL__sub_I_error_code_cpp"]=asm["__GLOBAL__sub_I_error_code_cpp"];var __GLOBAL__sub_I_DocStringParser_cpp=Module["__GLOBAL__sub_I_DocStringParser_cpp"]=asm["__GLOBAL__sub_I_DocStringParser_cpp"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var __GLOBAL__sub_I_future_cpp=Module["__GLOBAL__sub_I_future_cpp"]=asm["__GLOBAL__sub_I_future_cpp"];var __GLOBAL__sub_I_ParserBase_cpp=Module["__GLOBAL__sub_I_ParserBase_cpp"]=asm["__GLOBAL__sub_I_ParserBase_cpp"];var __GLOBAL__sub_I_ASTJsonConverter_cpp=Module["__GLOBAL__sub_I_ASTJsonConverter_cpp"]=asm["__GLOBAL__sub_I_ASTJsonConverter_cpp"];var _compileJSONCallback=Module["_compileJSONCallback"]=asm["_compileJSONCallback"];var __GLOBAL__sub_I_Exceptions_cpp=Module["__GLOBAL__sub_I_Exceptions_cpp"]=asm["__GLOBAL__sub_I_Exceptions_cpp"];var __GLOBAL__sub_I_ConstantOptimiser_cpp=Module["__GLOBAL__sub_I_ConstantOptimiser_cpp"]=asm["__GLOBAL__sub_I_ConstantOptimiser_cpp"];var __GLOBAL__sub_I_GasMeter_cpp=Module["__GLOBAL__sub_I_GasMeter_cpp"]=asm["__GLOBAL__sub_I_GasMeter_cpp"];var __GLOBAL__sub_I_CompilerStack_cpp=Module["__GLOBAL__sub_I_CompilerStack_cpp"]=asm["__GLOBAL__sub_I_CompilerStack_cpp"];var __GLOBAL__sub_I_AsmCodeGen_cpp=Module["__GLOBAL__sub_I_AsmCodeGen_cpp"]=asm["__GLOBAL__sub_I_AsmCodeGen_cpp"];var _compileJSONMulti=Module["_compileJSONMulti"]=asm["_compileJSONMulti"];var __GLOBAL__sub_I_DeclarationContainer_cpp=Module["__GLOBAL__sub_I_DeclarationContainer_cpp"]=asm["__GLOBAL__sub_I_DeclarationContainer_cpp"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var __GLOBAL__sub_I_CompilerUtils_cpp=Module["__GLOBAL__sub_I_CompilerUtils_cpp"]=asm["__GLOBAL__sub_I_CompilerUtils_cpp"];var __GLOBAL__sub_I_CommonSubexpressionEliminator_cpp=Module["__GLOBAL__sub_I_CommonSubexpressionEliminator_cpp"]=asm["__GLOBAL__sub_I_CommonSubexpressionEliminator_cpp"];var __GLOBAL__sub_I_SemanticInformation_cpp=Module["__GLOBAL__sub_I_SemanticInformation_cpp"]=asm["__GLOBAL__sub_I_SemanticInformation_cpp"];var __GLOBAL__sub_I_AsmStack_cpp=Module["__GLOBAL__sub_I_AsmStack_cpp"]=asm["__GLOBAL__sub_I_AsmStack_cpp"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var __GLOBAL__sub_I_CompilerContext_cpp=Module["__GLOBAL__sub_I_CompilerContext_cpp"]=asm["__GLOBAL__sub_I_CompilerContext_cpp"];var __GLOBAL__sub_I_PathGasMeter_cpp=Module["__GLOBAL__sub_I_PathGasMeter_cpp"]=asm["__GLOBAL__sub_I_PathGasMeter_cpp"];var __GLOBAL__sub_I_Why3Translator_cpp=Module["__GLOBAL__sub_I_Why3Translator_cpp"]=asm["__GLOBAL__sub_I_Why3Translator_cpp"];var __GLOBAL__sub_I_portability_cpp=Module["__GLOBAL__sub_I_portability_cpp"]=asm["__GLOBAL__sub_I_portability_cpp"];var __GLOBAL__sub_I_GasEstimator_cpp=Module["__GLOBAL__sub_I_GasEstimator_cpp"]=asm["__GLOBAL__sub_I_GasEstimator_cpp"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var __GLOBAL__sub_I_ExpressionCompiler_cpp=Module["__GLOBAL__sub_I_ExpressionCompiler_cpp"]=asm["__GLOBAL__sub_I_ExpressionCompiler_cpp"];var __GLOBAL__sub_I_TypeChecker_cpp=Module["__GLOBAL__sub_I_TypeChecker_cpp"]=asm["__GLOBAL__sub_I_TypeChecker_cpp"];var _memset=Module["_memset"]=asm["_memset"];var __GLOBAL__sub_I_Assembly_cpp=Module["__GLOBAL__sub_I_Assembly_cpp"]=asm["__GLOBAL__sub_I_Assembly_cpp"];var __GLOBAL__sub_I_CommonData_cpp=Module["__GLOBAL__sub_I_CommonData_cpp"]=asm["__GLOBAL__sub_I_CommonData_cpp"];var __GLOBAL__sub_I_GlobalContext_cpp=Module["__GLOBAL__sub_I_GlobalContext_cpp"]=asm["__GLOBAL__sub_I_GlobalContext_cpp"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var __GLOBAL__sub_I_Token_cpp=Module["__GLOBAL__sub_I_Token_cpp"]=asm["__GLOBAL__sub_I_Token_cpp"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var __GLOBAL__sub_I_CommonIO_cpp=Module["__GLOBAL__sub_I_CommonIO_cpp"]=asm["__GLOBAL__sub_I_CommonIO_cpp"];var __GLOBAL__sub_I_ReferencesResolver_cpp=Module["__GLOBAL__sub_I_ReferencesResolver_cpp"]=asm["__GLOBAL__sub_I_ReferencesResolver_cpp"];var __GLOBAL__sub_I_SyntaxChecker_cpp=Module["__GLOBAL__sub_I_SyntaxChecker_cpp"]=asm["__GLOBAL__sub_I_SyntaxChecker_cpp"];var __GLOBAL__sub_I_NameAndTypeResolver_cpp=Module["__GLOBAL__sub_I_NameAndTypeResolver_cpp"]=asm["__GLOBAL__sub_I_NameAndTypeResolver_cpp"];var __GLOBAL__sub_I_ContractCompiler_cpp=Module["__GLOBAL__sub_I_ContractCompiler_cpp"]=asm["__GLOBAL__sub_I_ContractCompiler_cpp"];var __GLOBAL__sub_I_ASTUtils_cpp=Module["__GLOBAL__sub_I_ASTUtils_cpp"]=asm["__GLOBAL__sub_I_ASTUtils_cpp"];var ___cxx_global_var_init_13=Module["___cxx_global_var_init_13"]=asm["___cxx_global_var_init_13"];var __GLOBAL__sub_I_Parser_cpp=Module["__GLOBAL__sub_I_Parser_cpp"]=asm["__GLOBAL__sub_I_Parser_cpp"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var __GLOBAL__sub_I_AST_cpp=Module["__GLOBAL__sub_I_AST_cpp"]=asm["__GLOBAL__sub_I_AST_cpp"];var __GLOBAL__sub_I_operations_cpp=Module["__GLOBAL__sub_I_operations_cpp"]=asm["__GLOBAL__sub_I_operations_cpp"];var __GLOBAL__sub_I_DocStringAnalyser_cpp=Module["__GLOBAL__sub_I_DocStringAnalyser_cpp"]=asm["__GLOBAL__sub_I_DocStringAnalyser_cpp"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var __GLOBAL__sub_I_InterfaceHandler_cpp=Module["__GLOBAL__sub_I_InterfaceHandler_cpp"]=asm["__GLOBAL__sub_I_InterfaceHandler_cpp"];var __GLOBAL__sub_I_LinkerObject_cpp=Module["__GLOBAL__sub_I_LinkerObject_cpp"]=asm["__GLOBAL__sub_I_LinkerObject_cpp"];var __GLOBAL__sub_I_Scanner_cpp=Module["__GLOBAL__sub_I_Scanner_cpp"]=asm["__GLOBAL__sub_I_Scanner_cpp"];var _compileJSON=Module["_compileJSON"]=asm["_compileJSON"];var __GLOBAL__I_000101=Module["__GLOBAL__I_000101"]=asm["__GLOBAL__I_000101"];var __GLOBAL__sub_I_Types_cpp=Module["__GLOBAL__sub_I_Types_cpp"]=asm["__GLOBAL__sub_I_Types_cpp"];var __GLOBAL__sub_I_thread_cpp=Module["__GLOBAL__sub_I_thread_cpp"]=asm["__GLOBAL__sub_I_thread_cpp"];var __GLOBAL__sub_I_AsmParser_cpp=Module["__GLOBAL__sub_I_AsmParser_cpp"]=asm["__GLOBAL__sub_I_AsmParser_cpp"];var __GLOBAL__sub_I_AssemblyItem_cpp=Module["__GLOBAL__sub_I_AssemblyItem_cpp"]=asm["__GLOBAL__sub_I_AssemblyItem_cpp"];var __GLOBAL__sub_I_iostream_cpp=Module["__GLOBAL__sub_I_iostream_cpp"]=asm["__GLOBAL__sub_I_iostream_cpp"];var __GLOBAL__sub_I_ConstantEvaluator_cpp=Module["__GLOBAL__sub_I_ConstantEvaluator_cpp"]=asm["__GLOBAL__sub_I_ConstantEvaluator_cpp"];var __GLOBAL__sub_I_ExpressionClasses_cpp=Module["__GLOBAL__sub_I_ExpressionClasses_cpp"]=asm["__GLOBAL__sub_I_ExpressionClasses_cpp"];var __GLOBAL__sub_I_LValue_cpp=Module["__GLOBAL__sub_I_LValue_cpp"]=asm["__GLOBAL__sub_I_LValue_cpp"];var ___cxx_global_var_init_13_446=Module["___cxx_global_var_init_13_446"]=asm["___cxx_global_var_init_13_446"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var __GLOBAL__sub_I_jsonCompiler_cpp=Module["__GLOBAL__sub_I_jsonCompiler_cpp"]=asm["__GLOBAL__sub_I_jsonCompiler_cpp"];var __GLOBAL__sub_I_KnownState_cpp=Module["__GLOBAL__sub_I_KnownState_cpp"]=asm["__GLOBAL__sub_I_KnownState_cpp"];var __GLOBAL__sub_I_BlockDeduplicator_cpp=Module["__GLOBAL__sub_I_BlockDeduplicator_cpp"]=asm["__GLOBAL__sub_I_BlockDeduplicator_cpp"];var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var __GLOBAL__sub_I_SemVerHandler_cpp=Module["__GLOBAL__sub_I_SemVerHandler_cpp"]=asm["__GLOBAL__sub_I_SemVerHandler_cpp"];var _memmove=Module["_memmove"]=asm["_memmove"];var __GLOBAL__sub_I_SHA3_cpp=Module["__GLOBAL__sub_I_SHA3_cpp"]=asm["__GLOBAL__sub_I_SHA3_cpp"];var __GLOBAL__sub_I_json_value_cpp=Module["__GLOBAL__sub_I_json_value_cpp"]=asm["__GLOBAL__sub_I_json_value_cpp"];var _version=Module["_version"]=asm["_version"];var __GLOBAL__sub_I_random_device_cpp=Module["__GLOBAL__sub_I_random_device_cpp"]=asm["__GLOBAL__sub_I_random_device_cpp"];var _malloc=Module["_malloc"]=asm["_malloc"];var __GLOBAL__sub_I_Compiler_cpp=Module["__GLOBAL__sub_I_Compiler_cpp"]=asm["__GLOBAL__sub_I_Compiler_cpp"];var ___cxx_global_var_init_12=Module["___cxx_global_var_init_12"]=asm["___cxx_global_var_init_12"];var __GLOBAL__sub_I_SourceReferenceFormatter_cpp=Module["__GLOBAL__sub_I_SourceReferenceFormatter_cpp"]=asm["__GLOBAL__sub_I_SourceReferenceFormatter_cpp"];var __GLOBAL__sub_I_Version_cpp=Module["__GLOBAL__sub_I_Version_cpp"]=asm["__GLOBAL__sub_I_Version_cpp"];var __GLOBAL__sub_I_Instruction_cpp=Module["__GLOBAL__sub_I_Instruction_cpp"]=asm["__GLOBAL__sub_I_Instruction_cpp"];var __GLOBAL__sub_I_ArrayUtils_cpp=Module["__GLOBAL__sub_I_ArrayUtils_cpp"]=asm["__GLOBAL__sub_I_ArrayUtils_cpp"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_iiiiiid=Module["dynCall_iiiiiid"]=asm["dynCall_iiiiiid"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iiiiiiiiiiii=Module["dynCall_iiiiiiiiiiii"]=asm["dynCall_iiiiiiiiiiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_viiiiiiiiiiiiiii=Module["dynCall_viiiiiiiiiiiiiii"]=asm["dynCall_viiiiiiiiiiiiiii"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiiiiiiiii=Module["dynCall_viiiiiiiiiiiii"]=asm["dynCall_viiiiiiiiiiiii"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_viiiiiiiiiiii=Module["dynCall_viiiiiiiiiiii"]=asm["dynCall_viiiiiiiiiiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_iiiiid=Module["dynCall_iiiiid"]=asm["dynCall_iiiiid"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["stdout"]["once"]("drain",(function(){process["exit"](status)}));console.log(" ");setTimeout((function(){process["exit"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run() - - - - diff --git a/node_modules/solc/wrapper.js b/node_modules/solc/wrapper.js deleted file mode 100644 index 4a3c4ad..0000000 --- a/node_modules/solc/wrapper.js +++ /dev/null @@ -1,114 +0,0 @@ -var requireFromString = require('require-from-string'); -var https = require('https'); -var MemoryStream = require('memorystream'); - -function setupMethods (soljson) { - var compileJSON = soljson.cwrap('compileJSON', 'string', ['string', 'number']); - var compileJSONMulti = null; - if ('_compileJSONMulti' in soljson) { - compileJSONMulti = soljson.cwrap('compileJSONMulti', 'string', ['string', 'number']); - } - var compileJSONCallback = null; - if ('_compileJSONCallback' in soljson) { - var copyString = function (str, ptr) { - var buffer = soljson._malloc(str.length + 1); - soljson.writeStringToMemory(str, buffer); - soljson.setValue(ptr, buffer, '*'); - }; - var wrapCallback = function (callback) { - return function (path, contents, error) { - var result = callback(soljson.Pointer_stringify(path)); - if (typeof result.contents === 'string') { - copyString(result.contents, contents); - } - if (typeof result.error === 'string') { - copyString(result.error, error); - } - }; - }; - var compileInternal = soljson.cwrap('compileJSONCallback', 'string', ['string', 'number', 'number']); - compileJSONCallback = function (input, optimize, readCallback) { - var cb = soljson.Runtime.addFunction(wrapCallback(readCallback)); - var output; - try { - output = compileInternal(input, optimize, cb); - } catch (e) { - soljson.Runtime.removeFunction(cb); - throw e; - } - soljson.Runtime.removeFunction(cb); - return output; - }; - } - - var compile = function (input, optimise, readCallback) { - var result = ''; - if (readCallback !== undefined && compileJSONCallback !== null) { - result = compileJSONCallback(JSON.stringify(input), optimise, readCallback); - } else if (typeof input !== 'string' && compileJSONMulti !== null) { - result = compileJSONMulti(JSON.stringify(input), optimise); - } else { - result = compileJSON(input, optimise); - } - return JSON.parse(result); - }; - - var linkBytecode = function (bytecode, libraries) { - for (var libraryName in libraries) { - // truncate to 37 characters - var internalName = libraryName.slice(0, 36); - // prefix and suffix with __ - var libLabel = '__' + internalName + Array(37 - internalName.length).join('_') + '__'; - - var hexAddress = libraries[libraryName]; - if (hexAddress.slice(0, 2) !== '0x' || hexAddress.length > 42) { - throw new Error('Invalid address specified for ' + libraryName); - } - // remove 0x prefix - hexAddress = hexAddress.slice(2); - hexAddress = Array(40 - hexAddress.length + 1).join('0') + hexAddress; - - while (bytecode.indexOf(libLabel) >= 0) { - bytecode = bytecode.replace(libLabel, hexAddress); - } - } - - return bytecode; - }; - - var version = soljson.cwrap('version', 'string', []); - - return { - version: version, - compile: compile, - linkBytecode: linkBytecode, - supportsMulti: compileJSONMulti !== null, - supportsImportCallback: compileJSONCallback !== null, - // Use the given version if available. - useVersion: function (versionString) { - return setupMethods(require('./bin/soljson-' + versionString + '.js')); - }, - // Loads the compiler of the given version from the github repository - // instead of from the local filesystem. - loadRemoteVersion: function (versionString, cb) { - var mem = new MemoryStream(null, {readable: false}); - var url = 'https://ethereum.github.io/solc-bin/bin/soljson-' + versionString + '.js'; - https.get(url, function (response) { - if (response.statusCode !== 200) { - cb('Error retrieving binary: ' + response.statusMessage); - } else { - response.pipe(mem); - response.on('end', function () { - cb(null, setupMethods(requireFromString(mem.toString()))); - }); - } - }).on('error', function (error) { - cb(error); - }); - }, - // Use this if you want to add wrapper functions around the pure module. - setupMethods: setupMethods - }; -} - -module.exports = setupMethods; diff --git a/node_modules/spdx-correct/LICENSE b/node_modules/spdx-correct/LICENSE deleted file mode 100644 index 4b54239..0000000 --- a/node_modules/spdx-correct/LICENSE +++ /dev/null @@ -1,57 +0,0 @@ -SPDX:Apache-2.0 - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - -(b) You must cause any modified files to carry prominent notices stating that You changed the files; and - -(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. diff --git a/node_modules/spdx-correct/README.md b/node_modules/spdx-correct/README.md deleted file mode 100644 index 4289e5c..0000000 --- a/node_modules/spdx-correct/README.md +++ /dev/null @@ -1,10 +0,0 @@ -```javascript -var correct = require('spdx-correct'); -var assert = require('assert'); - -assert.equal(correct('mit'), 'MIT') - -assert.equal(correct('Apache 2'), 'Apache-2.0') - -assert(correct('No idea what license') === null) -``` diff --git a/node_modules/spdx-correct/index.js b/node_modules/spdx-correct/index.js deleted file mode 100644 index 75b7a21..0000000 --- a/node_modules/spdx-correct/index.js +++ /dev/null @@ -1,237 +0,0 @@ -var licenseIDs = require('spdx-license-ids'); - -function valid(string) { - return licenseIDs.indexOf(string) > -1; -} - -// Common transpositions of license identifier acronyms -var transpositions = [ - ['APGL', 'AGPL'], - ['Gpl', 'GPL'], - ['GLP', 'GPL'], - ['APL', 'Apache'], - ['ISD', 'ISC'], - ['GLP', 'GPL'], - ['IST', 'ISC'], - ['Claude', 'Clause'], - [' or later', '+'], - [' International', ''], - ['GNU', 'GPL'], - ['GUN', 'GPL'], - ['+', ''], - ['GNU GPL', 'GPL'], - ['GNU/GPL', 'GPL'], - ['GNU GLP', 'GPL'], - ['GNU General Public License', 'GPL'], - ['Gnu public license', 'GPL'], - ['GNU Public License', 'GPL'], - ['GNU GENERAL PUBLIC LICENSE', 'GPL'], - ['MTI', 'MIT'], - ['Mozilla Public License', 'MPL'], - ['WTH', 'WTF'], - ['-License', ''] -]; - -var TRANSPOSED = 0; -var CORRECT = 1; - -// Simple corrections to nearly valid identifiers. -var transforms = [ - // e.g. 'mit' - function(argument) { - return argument.toUpperCase(); - }, - // e.g. 'MIT ' - function(argument) { - return argument.trim(); - }, - // e.g. 'M.I.T.' - function(argument) { - return argument.replace(/\./g, ''); - }, - // e.g. 'Apache- 2.0' - function(argument) { - return argument.replace(/\s+/g, ''); - }, - // e.g. 'CC BY 4.0'' - function(argument) { - return argument.replace(/\s+/g, '-'); - }, - // e.g. 'LGPLv2.1' - function(argument) { - return argument.replace('v', '-'); - }, - // e.g. 'Apache 2.0' - function(argument) { - return argument.replace(/,?\s*(\d)/, '-$1'); - }, - // e.g. 'GPL 2' - function(argument) { - return argument.replace(/,?\s*(\d)/, '-$1.0'); - }, - // e.g. 'Apache Version 2.0' - function(argument) { - return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, '-$2'); - }, - // e.g. 'Apache Version 2' - function(argument) { - return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, '-$2.0'); - }, - // e.g. 'ZLIB' - function(argument) { - return argument[0].toUpperCase() + argument.slice(1); - }, - // e.g. 'MPL/2.0' - function(argument) { - return argument.replace('/', '-'); - }, - // e.g. 'Apache 2' - function(argument) { - return argument - .replace(/\s*V\s*(\d)/, '-$1') - .replace(/(\d)$/, '$1.0'); - }, - // e.g. 'GPL-2.0-' - function(argument) { - return argument.slice(0, argument.length - 1); - }, - // e.g. 'GPL2' - function(argument) { - return argument.replace(/(\d)$/, '-$1.0'); - }, - // e.g. 'BSD 3' - function(argument) { - return argument.replace(/(-| )?(\d)$/, '-$2-Clause'); - }, - // e.g. 'BSD clause 3' - function(argument) { - return argument.replace(/(-| )clause(-| )(\d)/, '-$3-Clause'); - }, - // e.g. 'BY-NC-4.0' - function(argument) { - return 'CC-' + argument; - }, - // e.g. 'BY-NC' - function(argument) { - return 'CC-' + argument + '-4.0'; - }, - // e.g. 'Attribution-NonCommercial' - function(argument) { - return argument - .replace('Attribution', 'BY') - .replace('NonCommercial', 'NC') - .replace('NoDerivatives', 'ND') - .replace(/ (\d)/, '-$1') - .replace(/ ?International/, ''); - }, - // e.g. 'Attribution-NonCommercial' - function(argument) { - return 'CC-' + - argument - .replace('Attribution', 'BY') - .replace('NonCommercial', 'NC') - .replace('NoDerivatives', 'ND') - .replace(/ (\d)/, '-$1') - .replace(/ ?International/, '') + - '-4.0'; - } -]; - -// If all else fails, guess that strings containing certain substrings -// meant to identify certain licenses. -var lastResorts = [ - ['UNLI', 'Unlicense'], - ['WTF', 'WTFPL'], - ['2 CLAUSE', 'BSD-2-Clause'], - ['2-CLAUSE', 'BSD-2-Clause'], - ['3 CLAUSE', 'BSD-3-Clause'], - ['3-CLAUSE', 'BSD-3-Clause'], - ['AFFERO', 'AGPL-3.0'], - ['AGPL', 'AGPL-3.0'], - ['APACHE', 'Apache-2.0'], - ['ARTISTIC', 'Artistic-2.0'], - ['Affero', 'AGPL-3.0'], - ['BEER', 'Beerware'], - ['BOOST', 'BSL-1.0'], - ['BSD', 'BSD-2-Clause'], - ['ECLIPSE', 'EPL-1.0'], - ['FUCK', 'WTFPL'], - ['GNU', 'GPL-3.0'], - ['LGPL', 'LGPL-3.0'], - ['GPL', 'GPL-3.0'], - ['MIT', 'MIT'], - ['MPL', 'MPL-2.0'], - ['X11', 'X11'], - ['ZLIB', 'Zlib'] -]; - -var SUBSTRING = 0; -var IDENTIFIER = 1; - -var validTransformation = function(identifier) { - for (var i = 0; i < transforms.length; i++) { - var transformed = transforms[i](identifier); - if (transformed !== identifier && valid(transformed)) { - return transformed; - } - } - return null; -}; - -var validLastResort = function(identifier) { - var upperCased = identifier.toUpperCase(); - for (var i = 0; i < lastResorts.length; i++) { - var lastResort = lastResorts[i]; - if (upperCased.indexOf(lastResort[SUBSTRING]) > -1) { - return lastResort[IDENTIFIER]; - } - } - return null; -}; - -var anyCorrection = function(identifier, check) { - for (var i = 0; i < transpositions.length; i++) { - var transposition = transpositions[i]; - var transposed = transposition[TRANSPOSED]; - if (identifier.indexOf(transposed) > -1) { - var corrected = identifier.replace( - transposed, - transposition[CORRECT] - ); - var checked = check(corrected); - if (checked !== null) { - return checked; - } - } - } - return null; -}; - -module.exports = function(identifier) { - identifier = identifier.replace(/\+$/, ''); - if (valid(identifier)) { - return identifier; - } - var transformed = validTransformation(identifier); - if (transformed !== null) { - return transformed; - } - transformed = anyCorrection(identifier, function(argument) { - if (valid(argument)) { - return argument; - } - return validTransformation(argument); - }); - if (transformed !== null) { - return transformed; - } - transformed = validLastResort(identifier); - if (transformed !== null) { - return transformed; - } - transformed = anyCorrection(identifier, validLastResort); - if (transformed !== null) { - return transformed; - } - return null; -}; diff --git a/node_modules/spdx-correct/package.json b/node_modules/spdx-correct/package.json deleted file mode 100644 index c7cd5d7..0000000 --- a/node_modules/spdx-correct/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "spdx-correct@~1.0.0", - "/Users/jbaylina/git/MVP/node_modules/validate-npm-package-license" - ] - ], - "_from": "spdx-correct@>=1.0.0 <1.1.0", - "_id": "spdx-correct@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/spdx-correct", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "kyle@kemitchell.com", - "name": "kemitchell" - }, - "_npmVersion": "3.3.6", - "_phantomChildren": {}, - "_requested": { - "name": "spdx-correct", - "raw": "spdx-correct@~1.0.0", - "rawSpec": "~1.0.0", - "scope": null, - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/validate-npm-package-license" - ], - "_resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "_shasum": "4b3073d933ff51f3912f03ac5519498a4150db40", - "_shrinkwrap": null, - "_spec": "spdx-correct@~1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/validate-npm-package-license", - "author": { - "email": "kyle@kemitchell.com", - "name": "Kyle E. Mitchell", - "url": "https://kemitchell.com" - }, - "bugs": { - "url": "https://github.com/kemitchell/spdx-correct.js/issues" - }, - "dependencies": { - "spdx-license-ids": "^1.0.2" - }, - "description": "correct invalid SPDX identifiers", - "devDependencies": { - "defence-cli": "^1.0.1", - "replace-require-self": "^1.0.0", - "spdx-expression-parse": "^1.0.0", - "tape": "~4.0.0" - }, - "directories": {}, - "dist": { - "shasum": "4b3073d933ff51f3912f03ac5519498a4150db40", - "tarball": "http://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz" - }, - "gitHead": "8430a3ad521e1455208db33faafcb79c7b074236", - "homepage": "https://github.com/kemitchell/spdx-correct.js#readme", - "keywords": [ - "SPDX", - "law", - "legal", - "license", - "metadata" - ], - "license": "Apache-2.0", - "maintainers": [ - { - "email": "kyle@kemitchell.com", - "name": "kemitchell" - }, - { - "email": "ogd@aoaioxxysz.net", - "name": "othiym23" - } - ], - "name": "spdx-correct", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/kemitchell/spdx-correct.js.git" - }, - "scripts": { - "test": "defence README.md | replace-require-self | node && tape *.test.js" - }, - "version": "1.0.2" -} diff --git a/node_modules/spdx-expression-parse/AUTHORS b/node_modules/spdx-expression-parse/AUTHORS deleted file mode 100644 index 155f0f6..0000000 --- a/node_modules/spdx-expression-parse/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -C. Scott Ananian (http://cscott.net) -Kyle E. Mitchell (https://kemitchell.com) -Shinnosuke Watanabe diff --git a/node_modules/spdx-expression-parse/LICENSE b/node_modules/spdx-expression-parse/LICENSE deleted file mode 100644 index 831618e..0000000 --- a/node_modules/spdx-expression-parse/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License - -Copyright (c) 2015 Kyle E. Mitchell & other authors listed in AUTHORS - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/spdx-expression-parse/README.md b/node_modules/spdx-expression-parse/README.md deleted file mode 100644 index 9928cdc..0000000 --- a/node_modules/spdx-expression-parse/README.md +++ /dev/null @@ -1,83 +0,0 @@ -This package parses SPDX license expression strings describing license terms, like [package.json license strings](https://docs.npmjs.com/files/package.json#license), into consistently structured ECMAScript objects. The npm command-line interface depends on this package, as do many automatic license-audit tools. - -In a nutshell: - -```javascript -var parse = require('spdx-expression-parse') -var assert = require('assert') - -assert.deepEqual( - // Licensed under the terms of the Two-Clause BSD License. - parse('BSD-2-Clause'), - {license: 'BSD-2-Clause'} -) - -assert.throws(function () { - // An invalid SPDX license expression. - // Should be `Apache-2.0`. - parse('Apache 2') -}) - -assert.deepEqual( - // Dual licensed under LGPL 2.1 or a combination of the Three-Clause - // BSD License and the MIT License. - parse('(LGPL-2.1 OR BSD-3-Clause AND MIT)'), - { - left: {license: 'LGPL-2.1'}, - conjunction: 'or', - right: { - left: {license: 'BSD-3-Clause'}, - conjunction: 'and', - right: {license: 'MIT'} - } - } -) -``` - -The syntax comes from the [Software Package Data eXchange (SPDX)](https://spdx.org/), a standard from the [Linux Foundation](https://www.linuxfoundation.org) for shareable data about software package license terms. SPDX aims to make sharing and auditing license data easy, especially for users of open-source software. - -The bulk of the SPDX standard describes syntax and semantics of XML metadata files. This package implements two lightweight, plain-text components of that larger standard: - -1. The [license list](https://spdx.org/licenses), a mapping from specific string identifiers, like `Apache-2.0`, to standard form license texts and bolt-on license exceptions. The [spdx-license-ids](https://www.npmjs.com/package/spdx-exceptions) and [spdx-exceptions](https://www.npmjs.com/package/spdx-license-ids) packages implement the license list. They are development dependencies of this package. - - Any license identifier from the license list is a valid license expression: - - ```javascript - require('spdx-license-ids').forEach(function (id) { - assert.deepEqual(parse(id), {license: id}) - }) - ``` - - So is any license identifier `WITH` a standardized license exception: - - ```javascript - require('spdx-license-ids').forEach(function (id) { - require('spdx-exceptions').forEach(function (e) { - assert.deepEqual( - parse(id + ' WITH ' + e), - {license: id, exception: e} - ) - }) - }) - ``` - -2. The license expression language, for describing simple and complex license terms, like `MIT` for MIT-licensed and `(GPL-2.0 OR Apache-2.0)` for dual-licensing under GPL 2.0 and Apache 2.0. This package implements the license expression language. - - ```javascript - assert.deepEqual( - // Licensed under a combination of the MIT License and a combination - // of LGPL 2.1 (or a later version) and the Three-Clause BSD License. - parse('(MIT AND (LGPL-2.1+ AND BSD-3-Clause))'), - { - left: {license: 'MIT'}, - conjunction: 'and', - right: { - left: {license: 'LGPL-2.1', plus: true}, - conjunction: 'and', - right: {license: 'BSD-3-Clause'} - } - } - ) - ``` - -The Linux Foundation and its contributors license the SPDX standard under the terms of [the Creative Commons Attribution License 3.0 Unported (SPDX: "CC-BY-3.0")](http://spdx.org/licenses/CC-BY-3.0). "SPDX" is a United States federally registered trademark of the Linux Foundation. The authors of this package license their work under the terms of the MIT License. diff --git a/node_modules/spdx-expression-parse/index.js b/node_modules/spdx-expression-parse/index.js deleted file mode 100644 index 56a9b50..0000000 --- a/node_modules/spdx-expression-parse/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var parser = require('./parser').parser - -module.exports = function (argument) { - return parser.parse(argument) -} diff --git a/node_modules/spdx-expression-parse/package.json b/node_modules/spdx-expression-parse/package.json deleted file mode 100644 index 00768bf..0000000 --- a/node_modules/spdx-expression-parse/package.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "_args": [ - [ - "spdx-expression-parse@~1.0.0", - "/Users/jbaylina/git/MVP/node_modules/validate-npm-package-license" - ] - ], - "_from": "spdx-expression-parse@>=1.0.0 <1.1.0", - "_id": "spdx-expression-parse@1.0.4", - "_inCache": true, - "_installable": true, - "_location": "/spdx-expression-parse", - "_nodeVersion": "4.6.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/spdx-expression-parse-1.0.4.tgz_1475698361593_0.7478717286139727" - }, - "_npmUser": { - "email": "kyle@kemitchell.com", - "name": "kemitchell" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "spdx-expression-parse", - "raw": "spdx-expression-parse@~1.0.0", - "rawSpec": "~1.0.0", - "scope": null, - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/validate-npm-package-license" - ], - "_resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "_shasum": "9bdf2f20e1f40ed447fbe273266191fced51626c", - "_shrinkwrap": null, - "_spec": "spdx-expression-parse@~1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/validate-npm-package-license", - "author": { - "email": "kyle@kemitchell.com", - "name": "Kyle E. Mitchell", - "url": "http://kemitchell.com" - }, - "bugs": { - "url": "https://github.com/kemitchell/spdx-expression-parse.js/issues" - }, - "contributors": [ - { - "email": "cscott@cscott.net", - "name": "C. Scott Ananian", - "url": "http://cscott.net" - }, - { - "email": "kyle@kemitchell.com", - "name": "Kyle E. Mitchell", - "url": "https://kemitchell.com" - }, - { - "email": "snnskwtnb@gmail.com", - "name": "Shinnosuke Watanabe" - } - ], - "dependencies": {}, - "description": "parse SPDX license expressions", - "devDependencies": { - "defence-cli": "^1.0.1", - "jison": "^0.4.15", - "replace-require-self": "^1.0.0", - "spdx-exceptions": "^1.0.4", - "spdx-license-ids": "^1.0.0", - "standard": "^8.0.0" - }, - "directories": {}, - "dist": { - "shasum": "9bdf2f20e1f40ed447fbe273266191fced51626c", - "tarball": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz" - }, - "files": [ - "AUTHORS", - "index.js", - "parser.js" - ], - "gitHead": "326b222ed9e89e9ef472656e9970649b9ee4e8f3", - "homepage": "https://github.com/kemitchell/spdx-expression-parse.js#readme", - "keywords": [ - "SPDX", - "law", - "legal", - "license", - "metadata", - "package", - "package.json", - "standards" - ], - "license": "(MIT AND CC-BY-3.0)", - "maintainers": [ - { - "email": "kyle@kemitchell.com", - "name": "kemitchell" - } - ], - "name": "spdx-expression-parse", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/kemitchell/spdx-expression-parse.js.git" - }, - "scripts": { - "lint": "standard", - "prepublish": "node generate-parser.js > parser.js", - "pretest": "npm run prepublish", - "test": "defence -i javascript README.md | replace-require-self | node" - }, - "version": "1.0.4" -} diff --git a/node_modules/spdx-expression-parse/parser.js b/node_modules/spdx-expression-parse/parser.js deleted file mode 100644 index a5e2edb..0000000 --- a/node_modules/spdx-expression-parse/parser.js +++ /dev/null @@ -1,1357 +0,0 @@ -/* parser generated by jison 0.4.17 */ -/* - Returns a Parser object of the following structure: - - Parser: { - yy: {} - } - - Parser.prototype: { - yy: {}, - trace: function(), - symbols_: {associative list: name ==> number}, - terminals_: {associative list: number ==> name}, - productions_: [...], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), - table: [...], - defaultActions: {...}, - parseError: function(str, hash), - parse: function(input), - - lexer: { - EOF: 1, - parseError: function(str, hash), - setInput: function(input), - input: function(), - unput: function(str), - more: function(), - less: function(n), - pastInput: function(), - upcomingInput: function(), - showPosition: function(), - test_match: function(regex_match_array, rule_index), - next: function(), - lex: function(), - begin: function(condition), - popState: function(), - _currentRules: function(), - topState: function(), - pushState: function(condition), - - options: { - ranges: boolean (optional: true ==> token location info will include a .range[] member) - flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) - backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) - }, - - performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), - rules: [...], - conditions: {associative list: name ==> set}, - } - } - - - token location info (@$, _$, etc.): { - first_line: n, - last_line: n, - first_column: n, - last_column: n, - range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) - } - - - the parseError function receives a 'hash' object with these members for lexer and parser errors: { - text: (matched text) - token: (the produced terminal token, if any) - line: (yylineno) - } - while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { - loc: (yylloc) - expected: (string describing the set of expected tokens) - recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) - } -*/ -var spdxparse = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,5],$V1=[1,6],$V2=[1,7],$V3=[1,4],$V4=[1,9],$V5=[1,10],$V6=[5,14,15,17],$V7=[5,12,14,15,17]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"start":3,"expression":4,"EOS":5,"simpleExpression":6,"LICENSE":7,"PLUS":8,"LICENSEREF":9,"DOCUMENTREF":10,"COLON":11,"WITH":12,"EXCEPTION":13,"AND":14,"OR":15,"OPEN":16,"CLOSE":17,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOS",7:"LICENSE",8:"PLUS",9:"LICENSEREF",10:"DOCUMENTREF",11:"COLON",12:"WITH",13:"EXCEPTION",14:"AND",15:"OR",16:"OPEN",17:"CLOSE"}, -productions_: [0,[3,2],[6,1],[6,2],[6,1],[6,3],[4,1],[4,3],[4,3],[4,3],[4,3]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { -/* this == yyval */ - -var $0 = $$.length - 1; -switch (yystate) { -case 1: -return this.$ = $$[$0-1] -break; -case 2: case 4: case 5: -this.$ = {license: yytext} -break; -case 3: -this.$ = {license: $$[$0-1], plus: true} -break; -case 6: -this.$ = $$[$0] -break; -case 7: -this.$ = {exception: $$[$0]} -this.$.license = $$[$0-2].license -if ($$[$0-2].hasOwnProperty('plus')) { - this.$.plus = $$[$0-2].plus -} -break; -case 8: -this.$ = {conjunction: 'and', left: $$[$0-2], right: $$[$0]} -break; -case 9: -this.$ = {conjunction: 'or', left: $$[$0-2], right: $$[$0]} -break; -case 10: -this.$ = $$[$0-1] -break; -} -}, -table: [{3:1,4:2,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{1:[3]},{5:[1,8],14:$V4,15:$V5},o($V6,[2,6],{12:[1,11]}),{4:12,6:3,7:$V0,9:$V1,10:$V2,16:$V3},o($V7,[2,2],{8:[1,13]}),o($V7,[2,4]),{11:[1,14]},{1:[2,1]},{4:15,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{4:16,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{13:[1,17]},{14:$V4,15:$V5,17:[1,18]},o($V7,[2,3]),{9:[1,19]},o($V6,[2,8]),o([5,15,17],[2,9],{14:$V4}),o($V6,[2,7]),o($V6,[2,10]),o($V7,[2,5])], -defaultActions: {8:[2,1]}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: - var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; - } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; - } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; -/* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ - -EOF:1, - -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - -// resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, - -// consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - - this._input = this._input.slice(1); - return ch; - }, - -// unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - -// When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, - -// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, - -// retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, - -// displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, - -// displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, - -// displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - -// test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; - - if (this.options.backtrack_lexer) { - // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, - -// return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - -// return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - -// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, - -// pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - -// produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - -// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - -// alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, - -// return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:return 5 -break; -case 1:/* skip whitespace */ -break; -case 2:return 8 -break; -case 3:return 16 -break; -case 4:return 17 -break; -case 5:return 11 -break; -case 6:return 10 -break; -case 7:return 9 -break; -case 8:return 14 -break; -case 9:return 15 -break; -case 10:return 12 -break; -case 11:return 7 -break; -case 12:return 7 -break; -case 13:return 7 -break; -case 14:return 7 -break; -case 15:return 7 -break; -case 16:return 7 -break; -case 17:return 7 -break; -case 18:return 7 -break; -case 19:return 7 -break; -case 20:return 7 -break; -case 21:return 7 -break; -case 22:return 7 -break; -case 23:return 7 -break; -case 24:return 13 -break; -case 25:return 13 -break; -case 26:return 13 -break; -case 27:return 13 -break; -case 28:return 13 -break; -case 29:return 13 -break; -case 30:return 13 -break; -case 31:return 13 -break; -case 32:return 7 -break; -case 33:return 13 -break; -case 34:return 7 -break; -case 35:return 13 -break; -case 36:return 7 -break; -case 37:return 13 -break; -case 38:return 13 -break; -case 39:return 7 -break; -case 40:return 13 -break; -case 41:return 13 -break; -case 42:return 13 -break; -case 43:return 13 -break; -case 44:return 13 -break; -case 45:return 7 -break; -case 46:return 13 -break; -case 47:return 7 -break; -case 48:return 7 -break; -case 49:return 7 -break; -case 50:return 7 -break; -case 51:return 7 -break; -case 52:return 7 -break; -case 53:return 7 -break; -case 54:return 7 -break; -case 55:return 7 -break; -case 56:return 7 -break; -case 57:return 7 -break; -case 58:return 7 -break; -case 59:return 7 -break; -case 60:return 7 -break; -case 61:return 7 -break; -case 62:return 7 -break; -case 63:return 13 -break; -case 64:return 7 -break; -case 65:return 7 -break; -case 66:return 13 -break; -case 67:return 7 -break; -case 68:return 7 -break; -case 69:return 7 -break; -case 70:return 7 -break; -case 71:return 7 -break; -case 72:return 7 -break; -case 73:return 13 -break; -case 74:return 7 -break; -case 75:return 13 -break; -case 76:return 7 -break; -case 77:return 7 -break; -case 78:return 7 -break; -case 79:return 7 -break; -case 80:return 7 -break; -case 81:return 7 -break; -case 82:return 7 -break; -case 83:return 7 -break; -case 84:return 7 -break; -case 85:return 7 -break; -case 86:return 7 -break; -case 87:return 7 -break; -case 88:return 7 -break; -case 89:return 7 -break; -case 90:return 7 -break; -case 91:return 7 -break; -case 92:return 7 -break; -case 93:return 7 -break; -case 94:return 7 -break; -case 95:return 7 -break; -case 96:return 7 -break; -case 97:return 7 -break; -case 98:return 7 -break; -case 99:return 7 -break; -case 100:return 7 -break; -case 101:return 7 -break; -case 102:return 7 -break; -case 103:return 7 -break; -case 104:return 7 -break; -case 105:return 7 -break; -case 106:return 7 -break; -case 107:return 7 -break; -case 108:return 7 -break; -case 109:return 7 -break; -case 110:return 7 -break; -case 111:return 7 -break; -case 112:return 7 -break; -case 113:return 7 -break; -case 114:return 7 -break; -case 115:return 7 -break; -case 116:return 7 -break; -case 117:return 7 -break; -case 118:return 7 -break; -case 119:return 7 -break; -case 120:return 7 -break; -case 121:return 7 -break; -case 122:return 7 -break; -case 123:return 7 -break; -case 124:return 7 -break; -case 125:return 7 -break; -case 126:return 7 -break; -case 127:return 7 -break; -case 128:return 7 -break; -case 129:return 7 -break; -case 130:return 7 -break; -case 131:return 7 -break; -case 132:return 7 -break; -case 133:return 7 -break; -case 134:return 7 -break; -case 135:return 7 -break; -case 136:return 7 -break; -case 137:return 7 -break; -case 138:return 7 -break; -case 139:return 7 -break; -case 140:return 7 -break; -case 141:return 7 -break; -case 142:return 7 -break; -case 143:return 7 -break; -case 144:return 7 -break; -case 145:return 7 -break; -case 146:return 7 -break; -case 147:return 7 -break; -case 148:return 7 -break; -case 149:return 7 -break; -case 150:return 7 -break; -case 151:return 7 -break; -case 152:return 7 -break; -case 153:return 7 -break; -case 154:return 7 -break; -case 155:return 7 -break; -case 156:return 7 -break; -case 157:return 7 -break; -case 158:return 7 -break; -case 159:return 7 -break; -case 160:return 7 -break; -case 161:return 7 -break; -case 162:return 7 -break; -case 163:return 7 -break; -case 164:return 7 -break; -case 165:return 7 -break; -case 166:return 7 -break; -case 167:return 7 -break; -case 168:return 7 -break; -case 169:return 7 -break; -case 170:return 7 -break; -case 171:return 7 -break; -case 172:return 7 -break; -case 173:return 7 -break; -case 174:return 7 -break; -case 175:return 7 -break; -case 176:return 7 -break; -case 177:return 7 -break; -case 178:return 7 -break; -case 179:return 7 -break; -case 180:return 7 -break; -case 181:return 7 -break; -case 182:return 7 -break; -case 183:return 7 -break; -case 184:return 7 -break; -case 185:return 7 -break; -case 186:return 7 -break; -case 187:return 7 -break; -case 188:return 7 -break; -case 189:return 7 -break; -case 190:return 7 -break; -case 191:return 7 -break; -case 192:return 7 -break; -case 193:return 7 -break; -case 194:return 7 -break; -case 195:return 7 -break; -case 196:return 7 -break; -case 197:return 7 -break; -case 198:return 7 -break; -case 199:return 7 -break; -case 200:return 7 -break; -case 201:return 7 -break; -case 202:return 7 -break; -case 203:return 7 -break; -case 204:return 7 -break; -case 205:return 7 -break; -case 206:return 7 -break; -case 207:return 7 -break; -case 208:return 7 -break; -case 209:return 7 -break; -case 210:return 7 -break; -case 211:return 7 -break; -case 212:return 7 -break; -case 213:return 7 -break; -case 214:return 7 -break; -case 215:return 7 -break; -case 216:return 7 -break; -case 217:return 7 -break; -case 218:return 7 -break; -case 219:return 7 -break; -case 220:return 7 -break; -case 221:return 7 -break; -case 222:return 7 -break; -case 223:return 7 -break; -case 224:return 7 -break; -case 225:return 7 -break; -case 226:return 7 -break; -case 227:return 7 -break; -case 228:return 7 -break; -case 229:return 7 -break; -case 230:return 7 -break; -case 231:return 7 -break; -case 232:return 7 -break; -case 233:return 7 -break; -case 234:return 7 -break; -case 235:return 7 -break; -case 236:return 7 -break; -case 237:return 7 -break; -case 238:return 7 -break; -case 239:return 7 -break; -case 240:return 7 -break; -case 241:return 7 -break; -case 242:return 7 -break; -case 243:return 7 -break; -case 244:return 7 -break; -case 245:return 7 -break; -case 246:return 7 -break; -case 247:return 7 -break; -case 248:return 7 -break; -case 249:return 7 -break; -case 250:return 7 -break; -case 251:return 7 -break; -case 252:return 7 -break; -case 253:return 7 -break; -case 254:return 7 -break; -case 255:return 7 -break; -case 256:return 7 -break; -case 257:return 7 -break; -case 258:return 7 -break; -case 259:return 7 -break; -case 260:return 7 -break; -case 261:return 7 -break; -case 262:return 7 -break; -case 263:return 7 -break; -case 264:return 7 -break; -case 265:return 7 -break; -case 266:return 7 -break; -case 267:return 7 -break; -case 268:return 7 -break; -case 269:return 7 -break; -case 270:return 7 -break; -case 271:return 7 -break; -case 272:return 7 -break; -case 273:return 7 -break; -case 274:return 7 -break; -case 275:return 7 -break; -case 276:return 7 -break; -case 277:return 7 -break; -case 278:return 7 -break; -case 279:return 7 -break; -case 280:return 7 -break; -case 281:return 7 -break; -case 282:return 7 -break; -case 283:return 7 -break; -case 284:return 7 -break; -case 285:return 7 -break; -case 286:return 7 -break; -case 287:return 7 -break; -case 288:return 7 -break; -case 289:return 7 -break; -case 290:return 7 -break; -case 291:return 7 -break; -case 292:return 7 -break; -case 293:return 7 -break; -case 294:return 7 -break; -case 295:return 7 -break; -case 296:return 7 -break; -case 297:return 7 -break; -case 298:return 7 -break; -case 299:return 7 -break; -case 300:return 7 -break; -case 301:return 7 -break; -case 302:return 7 -break; -case 303:return 7 -break; -case 304:return 7 -break; -case 305:return 7 -break; -case 306:return 7 -break; -case 307:return 7 -break; -case 308:return 7 -break; -case 309:return 7 -break; -case 310:return 7 -break; -case 311:return 7 -break; -case 312:return 7 -break; -case 313:return 7 -break; -case 314:return 7 -break; -case 315:return 7 -break; -case 316:return 7 -break; -case 317:return 7 -break; -case 318:return 7 -break; -case 319:return 7 -break; -case 320:return 7 -break; -case 321:return 7 -break; -case 322:return 7 -break; -case 323:return 7 -break; -case 324:return 7 -break; -case 325:return 7 -break; -case 326:return 7 -break; -case 327:return 7 -break; -case 328:return 7 -break; -case 329:return 7 -break; -case 330:return 7 -break; -case 331:return 7 -break; -case 332:return 7 -break; -case 333:return 7 -break; -case 334:return 7 -break; -case 335:return 7 -break; -case 336:return 7 -break; -case 337:return 7 -break; -case 338:return 7 -break; -case 339:return 7 -break; -case 340:return 7 -break; -case 341:return 7 -break; -case 342:return 7 -break; -case 343:return 7 -break; -case 344:return 7 -break; -case 345:return 7 -break; -case 346:return 7 -break; -case 347:return 7 -break; -case 348:return 7 -break; -case 349:return 7 -break; -case 350:return 7 -break; -case 351:return 7 -break; -case 352:return 7 -break; -case 353:return 7 -break; -case 354:return 7 -break; -case 355:return 7 -break; -case 356:return 7 -break; -case 357:return 7 -break; -case 358:return 7 -break; -case 359:return 7 -break; -case 360:return 7 -break; -case 361:return 7 -break; -case 362:return 7 -break; -case 363:return 7 -break; -case 364:return 7 -break; -} -}, -rules: [/^(?:$)/,/^(?:\s+)/,/^(?:\+)/,/^(?:\()/,/^(?:\))/,/^(?::)/,/^(?:DocumentRef-([0-9A-Za-z-+.]+))/,/^(?:LicenseRef-([0-9A-Za-z-+.]+))/,/^(?:AND)/,/^(?:OR)/,/^(?:WITH)/,/^(?:BSD-3-Clause-No-Nuclear-License-2014)/,/^(?:BSD-3-Clause-No-Nuclear-Warranty)/,/^(?:GPL-2\.0-with-classpath-exception)/,/^(?:GPL-3\.0-with-autoconf-exception)/,/^(?:GPL-2\.0-with-autoconf-exception)/,/^(?:BSD-3-Clause-No-Nuclear-License)/,/^(?:MPL-2\.0-no-copyleft-exception)/,/^(?:GPL-2\.0-with-bison-exception)/,/^(?:GPL-2\.0-with-font-exception)/,/^(?:GPL-2\.0-with-GCC-exception)/,/^(?:CNRI-Python-GPL-Compatible)/,/^(?:GPL-3\.0-with-GCC-exception)/,/^(?:BSD-3-Clause-Attribution)/,/^(?:Classpath-exception-2\.0)/,/^(?:WxWindows-exception-3\.1)/,/^(?:freertos-exception-2\.0)/,/^(?:Autoconf-exception-3\.0)/,/^(?:i2p-gpl-java-exception)/,/^(?:gnu-javamail-exception)/,/^(?:Nokia-Qt-exception-1\.1)/,/^(?:Autoconf-exception-2\.0)/,/^(?:BSD-2-Clause-FreeBSD)/,/^(?:u-boot-exception-2\.0)/,/^(?:zlib-acknowledgement)/,/^(?:Bison-exception-2\.2)/,/^(?:BSD-2-Clause-NetBSD)/,/^(?:CLISP-exception-2\.0)/,/^(?:eCos-exception-2\.0)/,/^(?:BSD-3-Clause-Clear)/,/^(?:Font-exception-2\.0)/,/^(?:FLTK-exception-2\.0)/,/^(?:GCC-exception-2\.0)/,/^(?:Qwt-exception-1\.0)/,/^(?:Libtool-exception)/,/^(?:BSD-3-Clause-LBNL)/,/^(?:GCC-exception-3\.1)/,/^(?:Artistic-1\.0-Perl)/,/^(?:Artistic-1\.0-cl8)/,/^(?:CC-BY-NC-SA-2\.5)/,/^(?:MIT-advertising)/,/^(?:BSD-Source-Code)/,/^(?:CC-BY-NC-SA-4\.0)/,/^(?:LiLiQ-Rplus-1\.1)/,/^(?:CC-BY-NC-SA-3\.0)/,/^(?:BSD-4-Clause-UC)/,/^(?:CC-BY-NC-SA-2\.0)/,/^(?:CC-BY-NC-SA-1\.0)/,/^(?:CC-BY-NC-ND-4\.0)/,/^(?:CC-BY-NC-ND-3\.0)/,/^(?:CC-BY-NC-ND-2\.5)/,/^(?:CC-BY-NC-ND-2\.0)/,/^(?:CC-BY-NC-ND-1\.0)/,/^(?:LZMA-exception)/,/^(?:BitTorrent-1\.1)/,/^(?:CrystalStacker)/,/^(?:FLTK-exception)/,/^(?:SugarCRM-1\.1\.3)/,/^(?:BSD-Protection)/,/^(?:BitTorrent-1\.0)/,/^(?:HaskellReport)/,/^(?:Interbase-1\.0)/,/^(?:StandardML-NJ)/,/^(?:mif-exception)/,/^(?:Frameworx-1\.0)/,/^(?:389-exception)/,/^(?:CC-BY-NC-2\.0)/,/^(?:CC-BY-NC-2\.5)/,/^(?:CC-BY-NC-3\.0)/,/^(?:CC-BY-NC-4\.0)/,/^(?:W3C-19980720)/,/^(?:CC-BY-SA-1\.0)/,/^(?:CC-BY-SA-2\.0)/,/^(?:CC-BY-SA-2\.5)/,/^(?:CC-BY-ND-2\.0)/,/^(?:CC-BY-SA-4\.0)/,/^(?:CC-BY-SA-3\.0)/,/^(?:Artistic-1\.0)/,/^(?:Artistic-2\.0)/,/^(?:CC-BY-ND-2\.5)/,/^(?:CC-BY-ND-3\.0)/,/^(?:CC-BY-ND-4\.0)/,/^(?:CC-BY-ND-1\.0)/,/^(?:BSD-4-Clause)/,/^(?:BSD-3-Clause)/,/^(?:BSD-2-Clause)/,/^(?:CC-BY-NC-1\.0)/,/^(?:bzip2-1\.0\.6)/,/^(?:Unicode-TOU)/,/^(?:CNRI-Jython)/,/^(?:ImageMagick)/,/^(?:Adobe-Glyph)/,/^(?:CUA-OPL-1\.0)/,/^(?:OLDAP-2\.2\.2)/,/^(?:LiLiQ-R-1\.1)/,/^(?:bzip2-1\.0\.5)/,/^(?:LiLiQ-P-1\.1)/,/^(?:OLDAP-2\.0\.1)/,/^(?:OLDAP-2\.2\.1)/,/^(?:CNRI-Python)/,/^(?:XFree86-1\.1)/,/^(?:OSET-PL-2\.1)/,/^(?:Apache-2\.0)/,/^(?:Watcom-1\.0)/,/^(?:PostgreSQL)/,/^(?:Python-2\.0)/,/^(?:RHeCos-1\.1)/,/^(?:EUDatagrid)/,/^(?:Spencer-99)/,/^(?:Intel-ACPI)/,/^(?:CECILL-1\.0)/,/^(?:CECILL-1\.1)/,/^(?:JasPer-2\.0)/,/^(?:CECILL-2\.0)/,/^(?:CECILL-2\.1)/,/^(?:gSOAP-1\.3b)/,/^(?:Spencer-94)/,/^(?:Apache-1\.1)/,/^(?:Spencer-86)/,/^(?:Apache-1\.0)/,/^(?:ClArtistic)/,/^(?:TORQUE-1\.1)/,/^(?:CATOSL-1\.1)/,/^(?:Adobe-2006)/,/^(?:Zimbra-1\.4)/,/^(?:Zimbra-1\.3)/,/^(?:Condor-1\.1)/,/^(?:CC-BY-3\.0)/,/^(?:CC-BY-2\.5)/,/^(?:OLDAP-2\.4)/,/^(?:SGI-B-1\.1)/,/^(?:SISSL-1\.2)/,/^(?:SGI-B-1\.0)/,/^(?:OLDAP-2\.3)/,/^(?:CC-BY-4\.0)/,/^(?:Crossword)/,/^(?:SimPL-2\.0)/,/^(?:OLDAP-2\.2)/,/^(?:OLDAP-2\.1)/,/^(?:ErlPL-1\.1)/,/^(?:LPPL-1\.3a)/,/^(?:LPPL-1\.3c)/,/^(?:OLDAP-2\.0)/,/^(?:Leptonica)/,/^(?:CPOL-1\.02)/,/^(?:OLDAP-1\.4)/,/^(?:OLDAP-1\.3)/,/^(?:CC-BY-2\.0)/,/^(?:Unlicense)/,/^(?:OLDAP-2\.8)/,/^(?:OLDAP-1\.2)/,/^(?:MakeIndex)/,/^(?:OLDAP-2\.7)/,/^(?:OLDAP-1\.1)/,/^(?:Sleepycat)/,/^(?:D-FSL-1\.0)/,/^(?:CC-BY-1\.0)/,/^(?:OLDAP-2\.6)/,/^(?:WXwindows)/,/^(?:NPOSL-3\.0)/,/^(?:FreeImage)/,/^(?:SGI-B-2\.0)/,/^(?:OLDAP-2\.5)/,/^(?:Beerware)/,/^(?:Newsletr)/,/^(?:NBPL-1\.0)/,/^(?:NASA-1\.3)/,/^(?:NLOD-1\.0)/,/^(?:AGPL-1\.0)/,/^(?:OCLC-2\.0)/,/^(?:ODbL-1\.0)/,/^(?:PDDL-1\.0)/,/^(?:Motosoto)/,/^(?:Afmparse)/,/^(?:ANTLR-PD)/,/^(?:LPL-1\.02)/,/^(?:Abstyles)/,/^(?:eCos-2\.0)/,/^(?:APSL-1\.0)/,/^(?:LPPL-1\.2)/,/^(?:LPPL-1\.1)/,/^(?:LPPL-1\.0)/,/^(?:APSL-1\.1)/,/^(?:APSL-2\.0)/,/^(?:Info-ZIP)/,/^(?:Zend-2\.0)/,/^(?:IBM-pibs)/,/^(?:LGPL-2\.0)/,/^(?:LGPL-3\.0)/,/^(?:LGPL-2\.1)/,/^(?:GFDL-1\.3)/,/^(?:PHP-3\.01)/,/^(?:GFDL-1\.2)/,/^(?:GFDL-1\.1)/,/^(?:AGPL-3\.0)/,/^(?:Giftware)/,/^(?:EUPL-1\.1)/,/^(?:RPSL-1\.0)/,/^(?:EUPL-1\.0)/,/^(?:MIT-enna)/,/^(?:CECILL-B)/,/^(?:diffmark)/,/^(?:CECILL-C)/,/^(?:CDDL-1\.0)/,/^(?:Sendmail)/,/^(?:CDDL-1\.1)/,/^(?:CPAL-1\.0)/,/^(?:APSL-1\.2)/,/^(?:NPL-1\.1)/,/^(?:AFL-1\.2)/,/^(?:Caldera)/,/^(?:AFL-2\.0)/,/^(?:FSFULLR)/,/^(?:AFL-2\.1)/,/^(?:VSL-1\.0)/,/^(?:VOSTROM)/,/^(?:UPL-1\.0)/,/^(?:Dotseqn)/,/^(?:CPL-1\.0)/,/^(?:dvipdfm)/,/^(?:EPL-1\.0)/,/^(?:OCCT-PL)/,/^(?:ECL-1\.0)/,/^(?:Latex2e)/,/^(?:ECL-2\.0)/,/^(?:GPL-1\.0)/,/^(?:GPL-2\.0)/,/^(?:GPL-3\.0)/,/^(?:AFL-3\.0)/,/^(?:LAL-1\.2)/,/^(?:LAL-1\.3)/,/^(?:EFL-1\.0)/,/^(?:EFL-2\.0)/,/^(?:gnuplot)/,/^(?:Aladdin)/,/^(?:LPL-1\.0)/,/^(?:libtiff)/,/^(?:Entessa)/,/^(?:AMDPLPA)/,/^(?:IPL-1\.0)/,/^(?:OPL-1\.0)/,/^(?:OSL-1\.0)/,/^(?:OSL-1\.1)/,/^(?:OSL-2\.0)/,/^(?:OSL-2\.1)/,/^(?:OSL-3\.0)/,/^(?:OpenSSL)/,/^(?:ZPL-2\.1)/,/^(?:PHP-3\.0)/,/^(?:ZPL-2\.0)/,/^(?:ZPL-1\.1)/,/^(?:CC0-1\.0)/,/^(?:SPL-1\.0)/,/^(?:psutils)/,/^(?:MPL-1\.0)/,/^(?:QPL-1\.0)/,/^(?:MPL-1\.1)/,/^(?:MPL-2\.0)/,/^(?:APL-1\.0)/,/^(?:RPL-1\.1)/,/^(?:RPL-1\.5)/,/^(?:MIT-CMU)/,/^(?:Multics)/,/^(?:Eurosym)/,/^(?:BSL-1\.0)/,/^(?:MIT-feh)/,/^(?:Saxpath)/,/^(?:Borceux)/,/^(?:OFL-1\.1)/,/^(?:OFL-1\.0)/,/^(?:AFL-1\.1)/,/^(?:YPL-1\.1)/,/^(?:YPL-1\.0)/,/^(?:NPL-1\.0)/,/^(?:iMatix)/,/^(?:mpich2)/,/^(?:APAFML)/,/^(?:Bahyph)/,/^(?:RSA-MD)/,/^(?:psfrag)/,/^(?:Plexus)/,/^(?:eGenix)/,/^(?:Glulxe)/,/^(?:SAX-PD)/,/^(?:Imlib2)/,/^(?:Wsuipa)/,/^(?:LGPLLR)/,/^(?:Libpng)/,/^(?:xinetd)/,/^(?:MITNFA)/,/^(?:NetCDF)/,/^(?:Naumen)/,/^(?:SMPPL)/,/^(?:Nunit)/,/^(?:FSFUL)/,/^(?:GL2PS)/,/^(?:SMLNJ)/,/^(?:Rdisc)/,/^(?:Noweb)/,/^(?:Nokia)/,/^(?:SISSL)/,/^(?:Qhull)/,/^(?:Intel)/,/^(?:Glide)/,/^(?:Xerox)/,/^(?:AMPAS)/,/^(?:WTFPL)/,/^(?:MS-PL)/,/^(?:XSkat)/,/^(?:MS-RL)/,/^(?:MirOS)/,/^(?:RSCPL)/,/^(?:TMate)/,/^(?:OGTSL)/,/^(?:FSFAP)/,/^(?:NCSA)/,/^(?:Zlib)/,/^(?:SCEA)/,/^(?:SNIA)/,/^(?:NGPL)/,/^(?:NOSL)/,/^(?:ADSL)/,/^(?:MTLL)/,/^(?:NLPL)/,/^(?:Ruby)/,/^(?:JSON)/,/^(?:Barr)/,/^(?:0BSD)/,/^(?:Xnet)/,/^(?:Cube)/,/^(?:curl)/,/^(?:DSDP)/,/^(?:Fair)/,/^(?:HPND)/,/^(?:TOSL)/,/^(?:IJG)/,/^(?:SWL)/,/^(?:Vim)/,/^(?:FTL)/,/^(?:ICU)/,/^(?:OML)/,/^(?:NRL)/,/^(?:DOC)/,/^(?:TCL)/,/^(?:W3C)/,/^(?:NTP)/,/^(?:IPA)/,/^(?:ISC)/,/^(?:X11)/,/^(?:AAL)/,/^(?:AML)/,/^(?:xpp)/,/^(?:Zed)/,/^(?:MIT)/,/^(?:Mup)/], -conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof require !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = spdxparse; -exports.Parser = spdxparse.Parser; -exports.parse = function () { return spdxparse.parse.apply(spdxparse, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && require.main === module) { - exports.main(process.argv.slice(1)); -} -} diff --git a/node_modules/spdx-license-ids/LICENSE b/node_modules/spdx-license-ids/LICENSE deleted file mode 100644 index 68a49da..0000000 --- a/node_modules/spdx-license-ids/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to diff --git a/node_modules/spdx-license-ids/README.md b/node_modules/spdx-license-ids/README.md deleted file mode 100755 index 9252353..0000000 --- a/node_modules/spdx-license-ids/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# spdx-license-ids - -A list of [SPDX license](https://spdx.org/licenses/) identifiers - -[**Download JSON**](https://raw.githubusercontent.com/shinnn/spdx-license-ids/master/spdx-license-ids.json) - -## Use as a JavaScript Library - -[![NPM version](https://img.shields.io/npm/v/spdx-license-ids.svg)](https://www.npmjs.org/package/spdx-license-ids) -[![Bower version](https://img.shields.io/bower/v/spdx-license-ids.svg)](https://github.com/shinnn/spdx-license-ids/releases) -[![Build Status](https://travis-ci.org/shinnn/spdx-license-ids.svg?branch=master)](https://travis-ci.org/shinnn/spdx-license-ids) -[![Coverage Status](https://img.shields.io/coveralls/shinnn/spdx-license-ids.svg)](https://coveralls.io/r/shinnn/spdx-license-ids) -[![devDependency Status](https://david-dm.org/shinnn/spdx-license-ids/dev-status.svg)](https://david-dm.org/shinnn/spdx-license-ids#info=devDependencies) - -### Installation - -#### Package managers - -##### [npm](https://www.npmjs.com/) - -```sh -npm install spdx-license-ids -``` - -##### [bower](http://bower.io/) - -```sh -bower install spdx-license-ids -``` - -##### [Duo](http://duojs.org/) - -```javascript -const spdxLicenseIds = require('shinnn/spdx-license-ids'); -``` - -#### Standalone - -[Download the script file directly.](https://raw.githubusercontent.com/shinnn/spdx-license-ids/master/spdx-license-ids-browser.js) - -### API - -#### spdxLicenseIds - -Type: `Array` of `String` - -It returns an array of SPDX license identifiers. - -```javascript -const spdxLicenseIds = require('spdx-license-ids'); //=> ['Glide', 'Abstyles', 'AFL-1.1', ... ] -``` - -## License - -[The Unlicense](./LICENSE). diff --git a/node_modules/spdx-license-ids/package.json b/node_modules/spdx-license-ids/package.json deleted file mode 100644 index 91be7aa..0000000 --- a/node_modules/spdx-license-ids/package.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "_args": [ - [ - "spdx-license-ids@^1.0.2", - "/Users/jbaylina/git/MVP/node_modules/spdx-correct" - ] - ], - "_from": "spdx-license-ids@>=1.0.2 <2.0.0", - "_id": "spdx-license-ids@1.2.2", - "_inCache": true, - "_installable": true, - "_location": "/spdx-license-ids", - "_nodeVersion": "6.3.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/spdx-license-ids-1.2.2.tgz_1469529975605_0.35518706892617047" - }, - "_npmUser": { - "email": "snnskwtnb@gmail.com", - "name": "shinnn" - }, - "_npmVersion": "3.10.5", - "_phantomChildren": {}, - "_requested": { - "name": "spdx-license-ids", - "raw": "spdx-license-ids@^1.0.2", - "rawSpec": "^1.0.2", - "scope": null, - "spec": ">=1.0.2 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/spdx-correct" - ], - "_resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "_shasum": "c9df7a3424594ade6bd11900d596696dc06bac57", - "_shrinkwrap": null, - "_spec": "spdx-license-ids@^1.0.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/spdx-correct", - "author": { - "name": "Shinnosuke Watanabe", - "url": "https://github.com/shinnn" - }, - "bugs": { - "url": "https://github.com/shinnn/spdx-license-ids/issues" - }, - "dependencies": {}, - "description": "A list of SPDX license identifiers", - "devDependencies": { - "@shinnn/eslint-config-node": "^3.0.0", - "chalk": "^1.1.3", - "eslint": "^3.1.1", - "get-spdx-license-ids": "^1.0.0", - "istanbul": "^0.4.4", - "loud-rejection": "^1.6.0", - "rimraf-promise": "^2.0.0", - "stringify-object": "^2.4.0", - "tap-spec": "^4.1.1", - "tape": "^4.6.0", - "write-file-atomically": "1.0.0" - }, - "directories": {}, - "dist": { - "shasum": "c9df7a3424594ade6bd11900d596696dc06bac57", - "tarball": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz" - }, - "files": [ - "spdx-license-ids.json" - ], - "gitHead": "70e2541bf04b4fbef4c5df52c581a1861fd355b2", - "homepage": "https://github.com/shinnn/spdx-license-ids#readme", - "keywords": [ - "spdx", - "license", - "licenses", - "id", - "identifier", - "identifiers", - "json", - "array", - "oss", - "browser", - "client-side" - ], - "license": "Unlicense", - "main": "spdx-license-ids.json", - "maintainers": [ - { - "email": "snnskwtnb@gmail.com", - "name": "shinnn" - } - ], - "name": "spdx-license-ids", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/shinnn/spdx-license-ids.git" - }, - "scripts": { - "build": "node --strong_mode build.js", - "coverage": "node --strong_mode node_modules/.bin/istanbul cover test.js", - "lint": "eslint --config @shinnn/node --env browser --ignore-path .gitignore .", - "pretest": "${npm_package_scripts_build} && ${npm_package_scripts_lint}", - "test": "node --strong_mode test.js | tap-spec" - }, - "version": "1.2.2" -} diff --git a/node_modules/spdx-license-ids/spdx-license-ids.json b/node_modules/spdx-license-ids/spdx-license-ids.json deleted file mode 100644 index 1c60d6e..0000000 --- a/node_modules/spdx-license-ids/spdx-license-ids.json +++ /dev/null @@ -1,334 +0,0 @@ -[ - "Glide", - "Abstyles", - "AFL-1.1", - "AFL-1.2", - "AFL-2.0", - "AFL-2.1", - "AFL-3.0", - "AMPAS", - "APL-1.0", - "Adobe-Glyph", - "APAFML", - "Adobe-2006", - "AGPL-1.0", - "Afmparse", - "Aladdin", - "ADSL", - "AMDPLPA", - "ANTLR-PD", - "Apache-1.0", - "Apache-1.1", - "Apache-2.0", - "AML", - "APSL-1.0", - "APSL-1.1", - "APSL-1.2", - "APSL-2.0", - "Artistic-1.0", - "Artistic-1.0-Perl", - "Artistic-1.0-cl8", - "Artistic-2.0", - "AAL", - "Bahyph", - "Barr", - "Beerware", - "BitTorrent-1.0", - "BitTorrent-1.1", - "BSL-1.0", - "Borceux", - "BSD-2-Clause", - "BSD-2-Clause-FreeBSD", - "BSD-2-Clause-NetBSD", - "BSD-3-Clause", - "BSD-3-Clause-Clear", - "BSD-4-Clause", - "BSD-Protection", - "BSD-Source-Code", - "BSD-3-Clause-Attribution", - "0BSD", - "BSD-4-Clause-UC", - "bzip2-1.0.5", - "bzip2-1.0.6", - "Caldera", - "CECILL-1.0", - "CECILL-1.1", - "CECILL-2.0", - "CECILL-2.1", - "CECILL-B", - "CECILL-C", - "ClArtistic", - "MIT-CMU", - "CNRI-Jython", - "CNRI-Python", - "CNRI-Python-GPL-Compatible", - "CPOL-1.02", - "CDDL-1.0", - "CDDL-1.1", - "CPAL-1.0", - "CPL-1.0", - "CATOSL-1.1", - "Condor-1.1", - "CC-BY-1.0", - "CC-BY-2.0", - "CC-BY-2.5", - "CC-BY-3.0", - "CC-BY-4.0", - "CC-BY-ND-1.0", - "CC-BY-ND-2.0", - "CC-BY-ND-2.5", - "CC-BY-ND-3.0", - "CC-BY-ND-4.0", - "CC-BY-NC-1.0", - "CC-BY-NC-2.0", - "CC-BY-NC-2.5", - "CC-BY-NC-3.0", - "CC-BY-NC-4.0", - "CC-BY-NC-ND-1.0", - "CC-BY-NC-ND-2.0", - "CC-BY-NC-ND-2.5", - "CC-BY-NC-ND-3.0", - "CC-BY-NC-ND-4.0", - "CC-BY-NC-SA-1.0", - "CC-BY-NC-SA-2.0", - "CC-BY-NC-SA-2.5", - "CC-BY-NC-SA-3.0", - "CC-BY-NC-SA-4.0", - "CC-BY-SA-1.0", - "CC-BY-SA-2.0", - "CC-BY-SA-2.5", - "CC-BY-SA-3.0", - "CC-BY-SA-4.0", - "CC0-1.0", - "Crossword", - "CrystalStacker", - "CUA-OPL-1.0", - "Cube", - "curl", - "D-FSL-1.0", - "diffmark", - "WTFPL", - "DOC", - "Dotseqn", - "DSDP", - "dvipdfm", - "EPL-1.0", - "ECL-1.0", - "ECL-2.0", - "eGenix", - "EFL-1.0", - "EFL-2.0", - "MIT-advertising", - "MIT-enna", - "Entessa", - "ErlPL-1.1", - "EUDatagrid", - "EUPL-1.0", - "EUPL-1.1", - "Eurosym", - "Fair", - "MIT-feh", - "Frameworx-1.0", - "FreeImage", - "FTL", - "FSFAP", - "FSFUL", - "FSFULLR", - "Giftware", - "GL2PS", - "Glulxe", - "AGPL-3.0", - "GFDL-1.1", - "GFDL-1.2", - "GFDL-1.3", - "GPL-1.0", - "GPL-2.0", - "GPL-3.0", - "LGPL-2.1", - "LGPL-3.0", - "LGPL-2.0", - "gnuplot", - "gSOAP-1.3b", - "HaskellReport", - "HPND", - "IBM-pibs", - "IPL-1.0", - "ICU", - "ImageMagick", - "iMatix", - "Imlib2", - "IJG", - "Info-ZIP", - "Intel-ACPI", - "Intel", - "Interbase-1.0", - "IPA", - "ISC", - "JasPer-2.0", - "JSON", - "LPPL-1.0", - "LPPL-1.1", - "LPPL-1.2", - "LPPL-1.3a", - "LPPL-1.3c", - "Latex2e", - "BSD-3-Clause-LBNL", - "Leptonica", - "LGPLLR", - "Libpng", - "libtiff", - "LAL-1.2", - "LAL-1.3", - "LiLiQ-P-1.1", - "LiLiQ-Rplus-1.1", - "LiLiQ-R-1.1", - "LPL-1.02", - "LPL-1.0", - "MakeIndex", - "MTLL", - "MS-PL", - "MS-RL", - "MirOS", - "MITNFA", - "MIT", - "Motosoto", - "MPL-1.0", - "MPL-1.1", - "MPL-2.0", - "MPL-2.0-no-copyleft-exception", - "mpich2", - "Multics", - "Mup", - "NASA-1.3", - "Naumen", - "NBPL-1.0", - "NetCDF", - "NGPL", - "NOSL", - "NPL-1.0", - "NPL-1.1", - "Newsletr", - "NLPL", - "Nokia", - "NPOSL-3.0", - "NLOD-1.0", - "Noweb", - "NRL", - "NTP", - "Nunit", - "OCLC-2.0", - "ODbL-1.0", - "PDDL-1.0", - "OCCT-PL", - "OGTSL", - "OLDAP-2.2.2", - "OLDAP-1.1", - "OLDAP-1.2", - "OLDAP-1.3", - "OLDAP-1.4", - "OLDAP-2.0", - "OLDAP-2.0.1", - "OLDAP-2.1", - "OLDAP-2.2", - "OLDAP-2.2.1", - "OLDAP-2.3", - "OLDAP-2.4", - "OLDAP-2.5", - "OLDAP-2.6", - "OLDAP-2.7", - "OLDAP-2.8", - "OML", - "OPL-1.0", - "OSL-1.0", - "OSL-1.1", - "OSL-2.0", - "OSL-2.1", - "OSL-3.0", - "OpenSSL", - "OSET-PL-2.1", - "PHP-3.0", - "PHP-3.01", - "Plexus", - "PostgreSQL", - "psfrag", - "psutils", - "Python-2.0", - "QPL-1.0", - "Qhull", - "Rdisc", - "RPSL-1.0", - "RPL-1.1", - "RPL-1.5", - "RHeCos-1.1", - "RSCPL", - "RSA-MD", - "Ruby", - "SAX-PD", - "Saxpath", - "SCEA", - "SWL", - "SMPPL", - "Sendmail", - "SGI-B-1.0", - "SGI-B-1.1", - "SGI-B-2.0", - "OFL-1.0", - "OFL-1.1", - "SimPL-2.0", - "Sleepycat", - "SNIA", - "Spencer-86", - "Spencer-94", - "Spencer-99", - "SMLNJ", - "SugarCRM-1.1.3", - "SISSL", - "SISSL-1.2", - "SPL-1.0", - "Watcom-1.0", - "TCL", - "Unlicense", - "TMate", - "TORQUE-1.1", - "TOSL", - "Unicode-TOU", - "UPL-1.0", - "NCSA", - "Vim", - "VOSTROM", - "VSL-1.0", - "W3C-19980720", - "W3C", - "Wsuipa", - "Xnet", - "X11", - "Xerox", - "XFree86-1.1", - "xinetd", - "xpp", - "XSkat", - "YPL-1.0", - "YPL-1.1", - "Zed", - "Zend-2.0", - "Zimbra-1.3", - "Zimbra-1.4", - "Zlib", - "zlib-acknowledgement", - "ZPL-1.1", - "ZPL-2.0", - "ZPL-2.1", - "BSD-3-Clause-No-Nuclear-License", - "BSD-3-Clause-No-Nuclear-Warranty", - "BSD-3-Clause-No-Nuclear-License-2014", - "eCos-2.0", - "GPL-2.0-with-autoconf-exception", - "GPL-2.0-with-bison-exception", - "GPL-2.0-with-classpath-exception", - "GPL-2.0-with-font-exception", - "GPL-2.0-with-GCC-exception", - "GPL-3.0-with-autoconf-exception", - "GPL-3.0-with-GCC-exception", - "StandardML-NJ", - "WXwindows" -] diff --git a/node_modules/sshpk/.npmignore b/node_modules/sshpk/.npmignore deleted file mode 100644 index 8000b59..0000000 --- a/node_modules/sshpk/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -.gitmodules -deps -docs -Makefile -node_modules -test -tools -coverage -man/src diff --git a/node_modules/sshpk/.travis.yml b/node_modules/sshpk/.travis.yml deleted file mode 100644 index c3394c2..0000000 --- a/node_modules/sshpk/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: node_js -node_js: - - "5.10" - - "4.4" - - "4.1" - - "0.12" - - "0.10" -before_install: - - "make check" -after_success: - - '[ "${TRAVIS_NODE_VERSION}" = "4.4" ] && make codecovio' diff --git a/node_modules/sshpk/LICENSE b/node_modules/sshpk/LICENSE deleted file mode 100644 index f6d947d..0000000 --- a/node_modules/sshpk/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/node_modules/sshpk/README.md b/node_modules/sshpk/README.md deleted file mode 100644 index 00a4055..0000000 --- a/node_modules/sshpk/README.md +++ /dev/null @@ -1,666 +0,0 @@ -sshpk -========= - -Parse, convert, fingerprint and use SSH keys (both public and private) in pure -node -- no `ssh-keygen` or other external dependencies. - -Supports RSA, DSA, ECDSA (nistp-\*) and ED25519 key types, in PEM (PKCS#1, -PKCS#8) and OpenSSH formats. - -This library has been extracted from -[`node-http-signature`](https://github.com/joyent/node-http-signature) -(work by [Mark Cavage](https://github.com/mcavage) and -[Dave Eddy](https://github.com/bahamas10)) and -[`node-ssh-fingerprint`](https://github.com/bahamas10/node-ssh-fingerprint) -(work by Dave Eddy), with additions (including ECDSA support) by -[Alex Wilson](https://github.com/arekinath). - -Install -------- - -``` -npm install sshpk -``` - -Examples --------- - -```js -var sshpk = require('sshpk'); - -var fs = require('fs'); - -/* Read in an OpenSSH-format public key */ -var keyPub = fs.readFileSync('id_rsa.pub'); -var key = sshpk.parseKey(keyPub, 'ssh'); - -/* Get metadata about the key */ -console.log('type => %s', key.type); -console.log('size => %d bits', key.size); -console.log('comment => %s', key.comment); - -/* Compute key fingerprints, in new OpenSSH (>6.7) format, and old MD5 */ -console.log('fingerprint => %s', key.fingerprint().toString()); -console.log('old-style fingerprint => %s', key.fingerprint('md5').toString()); -``` - -Example output: - -``` -type => rsa -size => 2048 bits -comment => foo@foo.com -fingerprint => SHA256:PYC9kPVC6J873CSIbfp0LwYeczP/W4ffObNCuDJ1u5w -old-style fingerprint => a0:c8:ad:6c:32:9a:32:fa:59:cc:a9:8c:0a:0d:6e:bd -``` - -More examples: converting between formats: - -```js -/* Read in a PEM public key */ -var keyPem = fs.readFileSync('id_rsa.pem'); -var key = sshpk.parseKey(keyPem, 'pem'); - -/* Convert to PEM PKCS#8 public key format */ -var pemBuf = key.toBuffer('pkcs8'); - -/* Convert to SSH public key format (and return as a string) */ -var sshKey = key.toString('ssh'); -``` - -Signing and verifying: - -```js -/* Read in an OpenSSH/PEM *private* key */ -var keyPriv = fs.readFileSync('id_ecdsa'); -var key = sshpk.parsePrivateKey(keyPriv, 'pem'); - -var data = 'some data'; - -/* Sign some data with the key */ -var s = key.createSign('sha1'); -s.update(data); -var signature = s.sign(); - -/* Now load the public key (could also use just key.toPublic()) */ -var keyPub = fs.readFileSync('id_ecdsa.pub'); -key = sshpk.parseKey(keyPub, 'ssh'); - -/* Make a crypto.Verifier with this key */ -var v = key.createVerify('sha1'); -v.update(data); -var valid = v.verify(signature); -/* => true! */ -``` - -Matching fingerprints with keys: - -```js -var fp = sshpk.parseFingerprint('SHA256:PYC9kPVC6J873CSIbfp0LwYeczP/W4ffObNCuDJ1u5w'); - -var keys = [sshpk.parseKey(...), sshpk.parseKey(...), ...]; - -keys.forEach(function (key) { - if (fp.matches(key)) - console.log('found it!'); -}); -``` - -Usage ------ - -## Public keys - -### `parseKey(data[, format = 'auto'[, options]])` - -Parses a key from a given data format and returns a new `Key` object. - -Parameters - -- `data` -- Either a Buffer or String, containing the key -- `format` -- String name of format to use, valid options are: - - `auto`: choose automatically from all below - - `pem`: supports both PKCS#1 and PKCS#8 - - `ssh`: standard OpenSSH format, - - `pkcs1`, `pkcs8`: variants of `pem` - - `rfc4253`: raw OpenSSH wire format - - `openssh`: new post-OpenSSH 6.5 internal format, produced by - `ssh-keygen -o` -- `options` -- Optional Object, extra options, with keys: - - `filename` -- Optional String, name for the key being parsed - (eg. the filename that was opened). Used to generate - Error messages - - `passphrase` -- Optional String, encryption passphrase used to decrypt an - encrypted PEM file - -### `Key.isKey(obj)` - -Returns `true` if the given object is a valid `Key` object created by a version -of `sshpk` compatible with this one. - -Parameters - -- `obj` -- Object to identify - -### `Key#type` - -String, the type of key. Valid options are `rsa`, `dsa`, `ecdsa`. - -### `Key#size` - -Integer, "size" of the key in bits. For RSA/DSA this is the size of the modulus; -for ECDSA this is the bit size of the curve in use. - -### `Key#comment` - -Optional string, a key comment used by some formats (eg the `ssh` format). - -### `Key#curve` - -Only present if `this.type === 'ecdsa'`, string containing the name of the -named curve used with this key. Possible values include `nistp256`, `nistp384` -and `nistp521`. - -### `Key#toBuffer([format = 'ssh'])` - -Convert the key into a given data format and return the serialized key as -a Buffer. - -Parameters - -- `format` -- String name of format to use, for valid options see `parseKey()` - -### `Key#toString([format = 'ssh])` - -Same as `this.toBuffer(format).toString()`. - -### `Key#fingerprint([algorithm = 'sha256'])` - -Creates a new `Fingerprint` object representing this Key's fingerprint. - -Parameters - -- `algorithm` -- String name of hash algorithm to use, valid options are `md5`, - `sha1`, `sha256`, `sha384`, `sha512` - -### `Key#createVerify([hashAlgorithm])` - -Creates a `crypto.Verifier` specialized to use this Key (and the correct public -key algorithm to match it). The returned Verifier has the same API as a regular -one, except that the `verify()` function takes only the target signature as an -argument. - -Parameters - -- `hashAlgorithm` -- optional String name of hash algorithm to use, any - supported by OpenSSL are valid, usually including - `sha1`, `sha256`. - -`v.verify(signature[, format])` Parameters - -- `signature` -- either a Signature object, or a Buffer or String -- `format` -- optional String, name of format to interpret given String with. - Not valid if `signature` is a Signature or Buffer. - -### `Key#createDiffieHellman()` -### `Key#createDH()` - -Creates a Diffie-Hellman key exchange object initialized with this key and all -necessary parameters. This has the same API as a `crypto.DiffieHellman` -instance, except that functions take `Key` and `PrivateKey` objects as -arguments, and return them where indicated for. - -This is only valid for keys belonging to a cryptosystem that supports DHE -or a close analogue (i.e. `dsa`, `ecdsa` and `curve25519` keys). An attempt -to call this function on other keys will yield an `Error`. - -## Private keys - -### `parsePrivateKey(data[, format = 'auto'[, options]])` - -Parses a private key from a given data format and returns a new -`PrivateKey` object. - -Parameters - -- `data` -- Either a Buffer or String, containing the key -- `format` -- String name of format to use, valid options are: - - `auto`: choose automatically from all below - - `pem`: supports both PKCS#1 and PKCS#8 - - `ssh`, `openssh`: new post-OpenSSH 6.5 internal format, produced by - `ssh-keygen -o` - - `pkcs1`, `pkcs8`: variants of `pem` - - `rfc4253`: raw OpenSSH wire format -- `options` -- Optional Object, extra options, with keys: - - `filename` -- Optional String, name for the key being parsed - (eg. the filename that was opened). Used to generate - Error messages - - `passphrase` -- Optional String, encryption passphrase used to decrypt an - encrypted PEM file - -### `PrivateKey.isPrivateKey(obj)` - -Returns `true` if the given object is a valid `PrivateKey` object created by a -version of `sshpk` compatible with this one. - -Parameters - -- `obj` -- Object to identify - -### `PrivateKey#type` - -String, the type of key. Valid options are `rsa`, `dsa`, `ecdsa`. - -### `PrivateKey#size` - -Integer, "size" of the key in bits. For RSA/DSA this is the size of the modulus; -for ECDSA this is the bit size of the curve in use. - -### `PrivateKey#curve` - -Only present if `this.type === 'ecdsa'`, string containing the name of the -named curve used with this key. Possible values include `nistp256`, `nistp384` -and `nistp521`. - -### `PrivateKey#toBuffer([format = 'pkcs1'])` - -Convert the key into a given data format and return the serialized key as -a Buffer. - -Parameters - -- `format` -- String name of format to use, valid options are listed under - `parsePrivateKey`. Note that ED25519 keys default to `openssh` - format instead (as they have no `pkcs1` representation). - -### `PrivateKey#toString([format = 'pkcs1'])` - -Same as `this.toBuffer(format).toString()`. - -### `PrivateKey#toPublic()` - -Extract just the public part of this private key, and return it as a `Key` -object. - -### `PrivateKey#fingerprint([algorithm = 'sha256'])` - -Same as `this.toPublic().fingerprint()`. - -### `PrivateKey#createVerify([hashAlgorithm])` - -Same as `this.toPublic().createVerify()`. - -### `PrivateKey#createSign([hashAlgorithm])` - -Creates a `crypto.Sign` specialized to use this PrivateKey (and the correct -key algorithm to match it). The returned Signer has the same API as a regular -one, except that the `sign()` function takes no arguments, and returns a -`Signature` object. - -Parameters - -- `hashAlgorithm` -- optional String name of hash algorithm to use, any - supported by OpenSSL are valid, usually including - `sha1`, `sha256`. - -`v.sign()` Parameters - -- none - -### `PrivateKey#derive(newType)` - -Derives a related key of type `newType` from this key. Currently this is -only supported to change between `ed25519` and `curve25519` keys which are -stored with the same private key (but usually distinct public keys in order -to avoid degenerate keys that lead to a weak Diffie-Hellman exchange). - -Parameters - -- `newType` -- String, type of key to derive, either `ed25519` or `curve25519` - -## Fingerprints - -### `parseFingerprint(fingerprint[, algorithms])` - -Pre-parses a fingerprint, creating a `Fingerprint` object that can be used to -quickly locate a key by using the `Fingerprint#matches` function. - -Parameters - -- `fingerprint` -- String, the fingerprint value, in any supported format -- `algorithms` -- Optional list of strings, names of hash algorithms to limit - support to. If `fingerprint` uses a hash algorithm not on - this list, throws `InvalidAlgorithmError`. - -### `Fingerprint.isFingerprint(obj)` - -Returns `true` if the given object is a valid `Fingerprint` object created by a -version of `sshpk` compatible with this one. - -Parameters - -- `obj` -- Object to identify - -### `Fingerprint#toString([format])` - -Returns a fingerprint as a string, in the given format. - -Parameters - -- `format` -- Optional String, format to use, valid options are `hex` and - `base64`. If this `Fingerprint` uses the `md5` algorithm, the - default format is `hex`. Otherwise, the default is `base64`. - -### `Fingerprint#matches(key)` - -Verifies whether or not this `Fingerprint` matches a given `Key`. This function -uses double-hashing to avoid leaking timing information. Returns a boolean. - -Parameters - -- `key` -- a `Key` object, the key to match this fingerprint against - -## Signatures - -### `parseSignature(signature, algorithm, format)` - -Parses a signature in a given format, creating a `Signature` object. Useful -for converting between the SSH and ASN.1 (PKCS/OpenSSL) signature formats, and -also returned as output from `PrivateKey#createSign().sign()`. - -A Signature object can also be passed to a verifier produced by -`Key#createVerify()` and it will automatically be converted internally into the -correct format for verification. - -Parameters - -- `signature` -- a Buffer (binary) or String (base64), data of the actual - signature in the given format -- `algorithm` -- a String, name of the algorithm to be used, possible values - are `rsa`, `dsa`, `ecdsa` -- `format` -- a String, either `asn1` or `ssh` - -### `Signature.isSignature(obj)` - -Returns `true` if the given object is a valid `Signature` object created by a -version of `sshpk` compatible with this one. - -Parameters - -- `obj` -- Object to identify - -### `Signature#toBuffer([format = 'asn1'])` - -Converts a Signature to the given format and returns it as a Buffer. - -Parameters - -- `format` -- a String, either `asn1` or `ssh` - -### `Signature#toString([format = 'asn1'])` - -Same as `this.toBuffer(format).toString('base64')`. - -## Certificates - -`sshpk` includes basic support for parsing certificates in X.509 (PEM) format -and the OpenSSH certificate format. This feature is intended to be used mainly -to access basic metadata about certificates, extract public keys from them, and -also to generate simple self-signed certificates from an existing key. - -Notably, there is no implementation of CA chain-of-trust verification, and no -support for key usage restrictions (or other kinds of restrictions). Please do -the security world a favour, and DO NOT use this code for certificate -verification in the traditional X.509 CA chain style. - -### `parseCertificate(data, format)` - -Parameters - - - `data` -- a Buffer or String - - `format` -- a String, format to use, one of `'openssh'`, `'pem'` (X.509 in a - PEM wrapper), or `'x509'` (raw DER encoded) - -### `createSelfSignedCertificate(subject, privateKey[, options])` - -Parameters - - - `subject` -- an Identity, the subject of the certificate - - `privateKey` -- a PrivateKey, the key of the subject: will be used both to be - placed in the certificate and also to sign it (since this is - a self-signed certificate) - - `options` -- optional Object, with keys: - - `lifetime` -- optional Number, lifetime of the certificate from now in - seconds - - `validFrom`, `validUntil` -- optional Dates, beginning and end of - certificate validity period. If given - `lifetime` will be ignored - - `serial` -- optional Buffer, the serial number of the certificate - -### `createCertificate(subject, key, issuer, issuerKey[, options])` - -Parameters - - - `subject` -- an Identity, the subject of the certificate - - `key` -- a Key, the public key of the subject - - `issuer` -- an Identity, the issuer of the certificate who will sign it - - `issuerKey` -- a PrivateKey, the issuer's private key for signing - - `options` -- optional Object, with keys: - - `lifetime` -- optional Number, lifetime of the certificate from now in - seconds - - `validFrom`, `validUntil` -- optional Dates, beginning and end of - certificate validity period. If given - `lifetime` will be ignored - - `serial` -- optional Buffer, the serial number of the certificate - -### `Certificate#subjects` - -Array of `Identity` instances describing the subject of this certificate. - -### `Certificate#issuer` - -The `Identity` of the Certificate's issuer (signer). - -### `Certificate#subjectKey` - -The public key of the subject of the certificate, as a `Key` instance. - -### `Certificate#issuerKey` - -The public key of the signing issuer of this certificate, as a `Key` instance. -May be `undefined` if the issuer's key is unknown (e.g. on an X509 certificate). - -### `Certificate#serial` - -The serial number of the certificate. As this is normally a 64-bit or wider -integer, it is returned as a Buffer. - -### `Certificate#isExpired([when])` - -Tests whether the Certificate is currently expired (i.e. the `validFrom` and -`validUntil` dates specify a range of time that does not include the current -time). - -Parameters - - - `when` -- optional Date, if specified, tests whether the Certificate was or - will be expired at the specified time instead of now - -Returns a Boolean. - -### `Certificate#isSignedByKey(key)` - -Tests whether the Certificate was validly signed by the given (public) Key. - -Parameters - - - `key` -- a Key instance - -Returns a Boolean. - -### `Certificate#isSignedBy(certificate)` - -Tests whether this Certificate was validly signed by the subject of the given -certificate. Also tests that the issuer Identity of this Certificate and the -subject Identity of the other Certificate are equivalent. - -Parameters - - - `certificate` -- another Certificate instance - -Returns a Boolean. - -### `Certificate#fingerprint([hashAlgo])` - -Returns the X509-style fingerprint of the entire certificate (as a Fingerprint -instance). This matches what a web-browser or similar would display as the -certificate fingerprint and should not be confused with the fingerprint of the -subject's public key. - -Parameters - - - `hashAlgo` -- an optional String, any hash function name - -### `Certificate#toBuffer([format])` - -Serializes the Certificate to a Buffer and returns it. - -Parameters - - - `format` -- an optional String, output format, one of `'openssh'`, `'pem'` or - `'x509'`. Defaults to `'x509'`. - -Returns a Buffer. - -### `Certificate#toString([format])` - - - `format` -- an optional String, output format, one of `'openssh'`, `'pem'` or - `'x509'`. Defaults to `'pem'`. - -Returns a String. - -## Certificate identities - -### `identityForHost(hostname)` - -Constructs a host-type Identity for a given hostname. - -Parameters - - - `hostname` -- the fully qualified DNS name of the host - -Returns an Identity instance. - -### `identityForUser(uid)` - -Constructs a user-type Identity for a given UID. - -Parameters - - - `uid` -- a String, user identifier (login name) - -Returns an Identity instance. - -### `identityForEmail(email)` - -Constructs an email-type Identity for a given email address. - -Parameters - - - `email` -- a String, email address - -Returns an Identity instance. - -### `identityFromDN(dn)` - -Parses an LDAP-style DN string (e.g. `'CN=foo, C=US'`) and turns it into an -Identity instance. - -Parameters - - - `dn` -- a String - -Returns an Identity instance. - -### `Identity#toString()` - -Returns the identity as an LDAP-style DN string. -e.g. `'CN=foo, O=bar corp, C=us'` - -### `Identity#type` - -The type of identity. One of `'host'`, `'user'`, `'email'` or `'unknown'` - -### `Identity#hostname` -### `Identity#uid` -### `Identity#email` - -Set when `type` is `'host'`, `'user'`, or `'email'`, respectively. Strings. - -### `Identity#cn` - -The value of the first `CN=` in the DN, if any. - -Errors ------- - -### `InvalidAlgorithmError` - -The specified algorithm is not valid, either because it is not supported, or -because it was not included on a list of allowed algorithms. - -Thrown by `Fingerprint.parse`, `Key#fingerprint`. - -Properties - -- `algorithm` -- the algorithm that could not be validated - -### `FingerprintFormatError` - -The fingerprint string given could not be parsed as a supported fingerprint -format, or the specified fingerprint format is invalid. - -Thrown by `Fingerprint.parse`, `Fingerprint#toString`. - -Properties - -- `fingerprint` -- if caused by a fingerprint, the string value given -- `format` -- if caused by an invalid format specification, the string value given - -### `KeyParseError` - -The key data given could not be parsed as a valid key. - -Properties - -- `keyName` -- `filename` that was given to `parseKey` -- `format` -- the `format` that was trying to parse the key (see `parseKey`) -- `innerErr` -- the inner Error thrown by the format parser - -### `KeyEncryptedError` - -The key is encrypted with a symmetric key (ie, it is password protected). The -parsing operation would succeed if it was given the `passphrase` option. - -Properties - -- `keyName` -- `filename` that was given to `parseKey` -- `format` -- the `format` that was trying to parse the key (currently can only - be `"pem"`) - -### `CertificateParseError` - -The certificate data given could not be parsed as a valid certificate. - -Properties - -- `certName` -- `filename` that was given to `parseCertificate` -- `format` -- the `format` that was trying to parse the key - (see `parseCertificate`) -- `innerErr` -- the inner Error thrown by the format parser - -Friends of sshpk ----------------- - - * [`sshpk-agent`](https://github.com/arekinath/node-sshpk-agent) is a library - for speaking the `ssh-agent` protocol from node.js, which uses `sshpk` diff --git a/node_modules/sshpk/bin/sshpk-conv b/node_modules/sshpk/bin/sshpk-conv deleted file mode 100755 index 444045a..0000000 --- a/node_modules/sshpk/bin/sshpk-conv +++ /dev/null @@ -1,201 +0,0 @@ -#!/usr/bin/env node -// -*- mode: js -*- -// vim: set filetype=javascript : -// Copyright 2015 Joyent, Inc. All rights reserved. - -var dashdash = require('dashdash'); -var sshpk = require('../lib/index'); -var fs = require('fs'); -var path = require('path'); -var tty = require('tty'); -var readline = require('readline'); -var getPassword = require('getpass').getPass; - -var options = [ - { - names: ['outformat', 't'], - type: 'string', - help: 'Output format' - }, - { - names: ['informat', 'T'], - type: 'string', - help: 'Input format' - }, - { - names: ['file', 'f'], - type: 'string', - help: 'Input file name (default stdin)' - }, - { - names: ['out', 'o'], - type: 'string', - help: 'Output file name (default stdout)' - }, - { - names: ['private', 'p'], - type: 'bool', - help: 'Produce a private key as output' - }, - { - names: ['derive', 'd'], - type: 'string', - help: 'Output a new key derived from this one, with given algo' - }, - { - names: ['identify', 'i'], - type: 'bool', - help: 'Print key metadata instead of converting' - }, - { - names: ['comment', 'c'], - type: 'string', - help: 'Set key comment, if output format supports' - }, - { - names: ['help', 'h'], - type: 'bool', - help: 'Shows this help text' - } -]; - -if (require.main === module) { - var parser = dashdash.createParser({ - options: options - }); - - try { - var opts = parser.parse(process.argv); - } catch (e) { - console.error('sshpk-conv: error: %s', e.message); - process.exit(1); - } - - if (opts.help || opts._args.length > 1) { - var help = parser.help({}).trimRight(); - console.error('sshpk-conv: converts between SSH key formats\n'); - console.error(help); - console.error('\navailable formats:'); - console.error(' - pem, pkcs1 eg id_rsa'); - console.error(' - ssh eg id_rsa.pub'); - console.error(' - pkcs8 format you want for openssl'); - console.error(' - openssh like output of ssh-keygen -o'); - console.error(' - rfc4253 raw OpenSSH wire format'); - process.exit(1); - } - - /* - * Key derivation can only be done on private keys, so use of the -d - * option necessarily implies -p. - */ - if (opts.derive) - opts.private = true; - - var inFile = process.stdin; - var inFileName = 'stdin'; - - var inFilePath; - if (opts.file) { - inFilePath = opts.file; - } else if (opts._args.length === 1) { - inFilePath = opts._args[0]; - } - - if (inFilePath) - inFileName = path.basename(inFilePath); - - try { - if (inFilePath) { - fs.accessSync(inFilePath, fs.R_OK); - inFile = fs.createReadStream(inFilePath); - } - } catch (e) { - console.error('sshpk-conv: error opening input file' + - ': ' + e.name + ': ' + e.message); - process.exit(1); - } - - var outFile = process.stdout; - - try { - if (opts.out && !opts.identify) { - fs.accessSync(path.dirname(opts.out), fs.W_OK); - outFile = fs.createWriteStream(opts.out); - } - } catch (e) { - console.error('sshpk-conv: error opening output file' + - ': ' + e.name + ': ' + e.message); - process.exit(1); - } - - var bufs = []; - inFile.on('readable', function () { - var data; - while ((data = inFile.read())) - bufs.push(data); - }); - var parseOpts = {}; - parseOpts.filename = inFileName; - inFile.on('end', function processKey() { - var buf = Buffer.concat(bufs); - var fmt = 'auto'; - if (opts.informat) - fmt = opts.informat; - var f = sshpk.parseKey; - if (opts.private) - f = sshpk.parsePrivateKey; - try { - var key = f(buf, fmt, parseOpts); - } catch (e) { - if (e.name === 'KeyEncryptedError') { - getPassword(function (err, pw) { - if (err) { - console.log('sshpk-conv: ' + - err.name + ': ' + - err.message); - process.exit(1); - } - parseOpts.passphrase = pw; - processKey(); - }); - return; - } - console.error('sshpk-conv: ' + - e.name + ': ' + e.message); - process.exit(1); - } - - if (opts.derive) - key = key.derive(opts.derive); - - if (opts.comment) - key.comment = opts.comment; - - if (!opts.identify) { - fmt = undefined; - if (opts.outformat) - fmt = opts.outformat; - outFile.write(key.toBuffer(fmt)); - if (fmt === 'ssh' || - (!opts.private && fmt === undefined)) - outFile.write('\n'); - outFile.once('drain', function () { - process.exit(0); - }); - } else { - var kind = 'public'; - if (sshpk.PrivateKey.isPrivateKey(key)) - kind = 'private'; - console.log('%s: a %d bit %s %s key', inFileName, - key.size, key.type.toUpperCase(), kind); - if (key.type === 'ecdsa') - console.log('ECDSA curve: %s', key.curve); - if (key.comment) - console.log('Comment: %s', key.comment); - console.log('Fingerprint:'); - console.log(' ' + key.fingerprint().toString()); - console.log(' ' + key.fingerprint('md5').toString()); - process.exit(0); - } - }); -} diff --git a/node_modules/sshpk/bin/sshpk-sign b/node_modules/sshpk/bin/sshpk-sign deleted file mode 100755 index 673fc98..0000000 --- a/node_modules/sshpk/bin/sshpk-sign +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/env node -// -*- mode: js -*- -// vim: set filetype=javascript : -// Copyright 2015 Joyent, Inc. All rights reserved. - -var dashdash = require('dashdash'); -var sshpk = require('../lib/index'); -var fs = require('fs'); -var path = require('path'); -var getPassword = require('getpass').getPass; - -var options = [ - { - names: ['hash', 'H'], - type: 'string', - help: 'Hash algorithm (sha1, sha256, sha384, sha512)' - }, - { - names: ['verbose', 'v'], - type: 'bool', - help: 'Display verbose info about key and hash used' - }, - { - names: ['identity', 'i'], - type: 'string', - help: 'Path to key to use' - }, - { - names: ['file', 'f'], - type: 'string', - help: 'Input filename' - }, - { - names: ['out', 'o'], - type: 'string', - help: 'Output filename' - }, - { - names: ['format', 't'], - type: 'string', - help: 'Signature format (asn1, ssh, raw)' - }, - { - names: ['binary', 'b'], - type: 'bool', - help: 'Output raw binary instead of base64' - }, - { - names: ['help', 'h'], - type: 'bool', - help: 'Shows this help text' - } -]; - -var parseOpts = {}; - -if (require.main === module) { - var parser = dashdash.createParser({ - options: options - }); - - try { - var opts = parser.parse(process.argv); - } catch (e) { - console.error('sshpk-sign: error: %s', e.message); - process.exit(1); - } - - if (opts.help || opts._args.length > 1) { - var help = parser.help({}).trimRight(); - console.error('sshpk-sign: sign data using an SSH key\n'); - console.error(help); - process.exit(1); - } - - if (!opts.identity) { - var help = parser.help({}).trimRight(); - console.error('sshpk-sign: the -i or --identity option ' + - 'is required\n'); - console.error(help); - process.exit(1); - } - - var keyData = fs.readFileSync(opts.identity); - parseOpts.filename = opts.identity; - - run(); -} - -function run() { - var key; - try { - key = sshpk.parsePrivateKey(keyData, 'auto', parseOpts); - } catch (e) { - if (e.name === 'KeyEncryptedError') { - getPassword(function (err, pw) { - parseOpts.passphrase = pw; - run(); - }); - return; - } - console.error('sshpk-sign: error loading private key "' + - opts.identity + '": ' + e.name + ': ' + e.message); - process.exit(1); - } - - var hash = opts.hash || key.defaultHashAlgorithm(); - - var signer; - try { - signer = key.createSign(hash); - } catch (e) { - console.error('sshpk-sign: error creating signer: ' + - e.name + ': ' + e.message); - process.exit(1); - } - - if (opts.verbose) { - console.error('sshpk-sign: using %s-%s with a %d bit key', - key.type, hash, key.size); - } - - var inFile = process.stdin; - var inFileName = 'stdin'; - - var inFilePath; - if (opts.file) { - inFilePath = opts.file; - } else if (opts._args.length === 1) { - inFilePath = opts._args[0]; - } - - if (inFilePath) - inFileName = path.basename(inFilePath); - - try { - if (inFilePath) { - fs.accessSync(inFilePath, fs.R_OK); - inFile = fs.createReadStream(inFilePath); - } - } catch (e) { - console.error('sshpk-sign: error opening input file' + - ': ' + e.name + ': ' + e.message); - process.exit(1); - } - - var outFile = process.stdout; - - try { - if (opts.out && !opts.identify) { - fs.accessSync(path.dirname(opts.out), fs.W_OK); - outFile = fs.createWriteStream(opts.out); - } - } catch (e) { - console.error('sshpk-sign: error opening output file' + - ': ' + e.name + ': ' + e.message); - process.exit(1); - } - - inFile.pipe(signer); - inFile.on('end', function () { - var sig; - try { - sig = signer.sign(); - } catch (e) { - console.error('sshpk-sign: error signing data: ' + - e.name + ': ' + e.message); - process.exit(1); - } - - var fmt = opts.format || 'asn1'; - var output; - try { - output = sig.toBuffer(fmt); - if (!opts.binary) - output = output.toString('base64'); - } catch (e) { - console.error('sshpk-sign: error converting signature' + - ' to ' + fmt + ' format: ' + e.name + ': ' + - e.message); - process.exit(1); - } - - outFile.write(output); - if (!opts.binary) - outFile.write('\n'); - outFile.once('drain', function () { - process.exit(0); - }); - }); -} diff --git a/node_modules/sshpk/bin/sshpk-verify b/node_modules/sshpk/bin/sshpk-verify deleted file mode 100755 index a1669f4..0000000 --- a/node_modules/sshpk/bin/sshpk-verify +++ /dev/null @@ -1,166 +0,0 @@ -#!/usr/bin/env node -// -*- mode: js -*- -// vim: set filetype=javascript : -// Copyright 2015 Joyent, Inc. All rights reserved. - -var dashdash = require('dashdash'); -var sshpk = require('../lib/index'); -var fs = require('fs'); -var path = require('path'); - -var options = [ - { - names: ['hash', 'H'], - type: 'string', - help: 'Hash algorithm (sha1, sha256, sha384, sha512)' - }, - { - names: ['verbose', 'v'], - type: 'bool', - help: 'Display verbose info about key and hash used' - }, - { - names: ['identity', 'i'], - type: 'string', - help: 'Path to (public) key to use' - }, - { - names: ['file', 'f'], - type: 'string', - help: 'Input filename' - }, - { - names: ['format', 't'], - type: 'string', - help: 'Signature format (asn1, ssh, raw)' - }, - { - names: ['signature', 's'], - type: 'string', - help: 'base64-encoded signature data' - }, - { - names: ['help', 'h'], - type: 'bool', - help: 'Shows this help text' - } -]; - -if (require.main === module) { - var parser = dashdash.createParser({ - options: options - }); - - try { - var opts = parser.parse(process.argv); - } catch (e) { - console.error('sshpk-verify: error: %s', e.message); - process.exit(3); - } - - if (opts.help || opts._args.length > 1) { - var help = parser.help({}).trimRight(); - console.error('sshpk-verify: sign data using an SSH key\n'); - console.error(help); - process.exit(3); - } - - if (!opts.identity) { - var help = parser.help({}).trimRight(); - console.error('sshpk-verify: the -i or --identity option ' + - 'is required\n'); - console.error(help); - process.exit(3); - } - - if (!opts.signature) { - var help = parser.help({}).trimRight(); - console.error('sshpk-verify: the -s or --signature option ' + - 'is required\n'); - console.error(help); - process.exit(3); - } - - var keyData = fs.readFileSync(opts.identity); - - var key; - try { - key = sshpk.parseKey(keyData); - } catch (e) { - console.error('sshpk-verify: error loading key "' + - opts.identity + '": ' + e.name + ': ' + e.message); - process.exit(2); - } - - var fmt = opts.format || 'asn1'; - var sigData = new Buffer(opts.signature, 'base64'); - - var sig; - try { - sig = sshpk.parseSignature(sigData, key.type, fmt); - } catch (e) { - console.error('sshpk-verify: error parsing signature: ' + - e.name + ': ' + e.message); - process.exit(2); - } - - var hash = opts.hash || key.defaultHashAlgorithm(); - - var verifier; - try { - verifier = key.createVerify(hash); - } catch (e) { - console.error('sshpk-verify: error creating verifier: ' + - e.name + ': ' + e.message); - process.exit(2); - } - - if (opts.verbose) { - console.error('sshpk-verify: using %s-%s with a %d bit key', - key.type, hash, key.size); - } - - var inFile = process.stdin; - var inFileName = 'stdin'; - - var inFilePath; - if (opts.file) { - inFilePath = opts.file; - } else if (opts._args.length === 1) { - inFilePath = opts._args[0]; - } - - if (inFilePath) - inFileName = path.basename(inFilePath); - - try { - if (inFilePath) { - fs.accessSync(inFilePath, fs.R_OK); - inFile = fs.createReadStream(inFilePath); - } - } catch (e) { - console.error('sshpk-verify: error opening input file' + - ': ' + e.name + ': ' + e.message); - process.exit(2); - } - - inFile.pipe(verifier); - inFile.on('end', function () { - var ret; - try { - ret = verifier.verify(sig); - } catch (e) { - console.error('sshpk-verify: error verifying data: ' + - e.name + ': ' + e.message); - process.exit(1); - } - - if (ret) { - console.error('OK'); - process.exit(0); - } - - console.error('NOT OK'); - process.exit(1); - }); -} diff --git a/node_modules/sshpk/lib/algs.js b/node_modules/sshpk/lib/algs.js deleted file mode 100644 index f30af56..0000000 --- a/node_modules/sshpk/lib/algs.js +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -var algInfo = { - 'dsa': { - parts: ['p', 'q', 'g', 'y'], - sizePart: 'p' - }, - 'rsa': { - parts: ['e', 'n'], - sizePart: 'n' - }, - 'ecdsa': { - parts: ['curve', 'Q'], - sizePart: 'Q' - }, - 'ed25519': { - parts: ['R'], - normalize: false, - sizePart: 'R' - } -}; -algInfo['curve25519'] = algInfo['ed25519']; - -var algPrivInfo = { - 'dsa': { - parts: ['p', 'q', 'g', 'y', 'x'] - }, - 'rsa': { - parts: ['n', 'e', 'd', 'iqmp', 'p', 'q'] - }, - 'ecdsa': { - parts: ['curve', 'Q', 'd'] - }, - 'ed25519': { - parts: ['R', 'r'], - normalize: false - } -}; -algPrivInfo['curve25519'] = algPrivInfo['ed25519']; - -var hashAlgs = { - 'md5': true, - 'sha1': true, - 'sha256': true, - 'sha384': true, - 'sha512': true -}; - -/* - * Taken from - * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf - */ -var curves = { - 'nistp256': { - size: 256, - pkcs8oid: '1.2.840.10045.3.1.7', - p: new Buffer(('00' + - 'ffffffff 00000001 00000000 00000000' + - '00000000 ffffffff ffffffff ffffffff'). - replace(/ /g, ''), 'hex'), - a: new Buffer(('00' + - 'FFFFFFFF 00000001 00000000 00000000' + - '00000000 FFFFFFFF FFFFFFFF FFFFFFFC'). - replace(/ /g, ''), 'hex'), - b: new Buffer(( - '5ac635d8 aa3a93e7 b3ebbd55 769886bc' + - '651d06b0 cc53b0f6 3bce3c3e 27d2604b'). - replace(/ /g, ''), 'hex'), - s: new Buffer(('00' + - 'c49d3608 86e70493 6a6678e1 139d26b7' + - '819f7e90'). - replace(/ /g, ''), 'hex'), - n: new Buffer(('00' + - 'ffffffff 00000000 ffffffff ffffffff' + - 'bce6faad a7179e84 f3b9cac2 fc632551'). - replace(/ /g, ''), 'hex'), - G: new Buffer(('04' + - '6b17d1f2 e12c4247 f8bce6e5 63a440f2' + - '77037d81 2deb33a0 f4a13945 d898c296' + - '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16' + - '2bce3357 6b315ece cbb64068 37bf51f5'). - replace(/ /g, ''), 'hex') - }, - 'nistp384': { - size: 384, - pkcs8oid: '1.3.132.0.34', - p: new Buffer(('00' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff fffffffe' + - 'ffffffff 00000000 00000000 ffffffff'). - replace(/ /g, ''), 'hex'), - a: new Buffer(('00' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE' + - 'FFFFFFFF 00000000 00000000 FFFFFFFC'). - replace(/ /g, ''), 'hex'), - b: new Buffer(( - 'b3312fa7 e23ee7e4 988e056b e3f82d19' + - '181d9c6e fe814112 0314088f 5013875a' + - 'c656398d 8a2ed19d 2a85c8ed d3ec2aef'). - replace(/ /g, ''), 'hex'), - s: new Buffer(('00' + - 'a335926a a319a27a 1d00896a 6773a482' + - '7acdac73'). - replace(/ /g, ''), 'hex'), - n: new Buffer(('00' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff c7634d81 f4372ddf' + - '581a0db2 48b0a77a ecec196a ccc52973'). - replace(/ /g, ''), 'hex'), - G: new Buffer(('04' + - 'aa87ca22 be8b0537 8eb1c71e f320ad74' + - '6e1d3b62 8ba79b98 59f741e0 82542a38' + - '5502f25d bf55296c 3a545e38 72760ab7' + - '3617de4a 96262c6f 5d9e98bf 9292dc29' + - 'f8f41dbd 289a147c e9da3113 b5f0b8c0' + - '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'). - replace(/ /g, ''), 'hex') - }, - 'nistp521': { - size: 521, - pkcs8oid: '1.3.132.0.35', - p: new Buffer(( - '01ffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffff').replace(/ /g, ''), 'hex'), - a: new Buffer(('01FF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC'). - replace(/ /g, ''), 'hex'), - b: new Buffer(('51' + - '953eb961 8e1c9a1f 929a21a0 b68540ee' + - 'a2da725b 99b315f3 b8b48991 8ef109e1' + - '56193951 ec7e937b 1652c0bd 3bb1bf07' + - '3573df88 3d2c34f1 ef451fd4 6b503f00'). - replace(/ /g, ''), 'hex'), - s: new Buffer(('00' + - 'd09e8800 291cb853 96cc6717 393284aa' + - 'a0da64ba').replace(/ /g, ''), 'hex'), - n: new Buffer(('01ff' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff fffffffa' + - '51868783 bf2f966b 7fcc0148 f709a5d0' + - '3bb5c9b8 899c47ae bb6fb71e 91386409'). - replace(/ /g, ''), 'hex'), - G: new Buffer(('04' + - '00c6 858e06b7 0404e9cd 9e3ecb66 2395b442' + - '9c648139 053fb521 f828af60 6b4d3dba' + - 'a14b5e77 efe75928 fe1dc127 a2ffa8de' + - '3348b3c1 856a429b f97e7e31 c2e5bd66' + - '0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9' + - '98f54449 579b4468 17afbd17 273e662c' + - '97ee7299 5ef42640 c550b901 3fad0761' + - '353c7086 a272c240 88be9476 9fd16650'). - replace(/ /g, ''), 'hex') - } -}; - -module.exports = { - info: algInfo, - privInfo: algPrivInfo, - hashAlgs: hashAlgs, - curves: curves -}; diff --git a/node_modules/sshpk/lib/certificate.js b/node_modules/sshpk/lib/certificate.js deleted file mode 100644 index 4fbe6ab..0000000 --- a/node_modules/sshpk/lib/certificate.js +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2016 Joyent, Inc. - -module.exports = Certificate; - -var assert = require('assert-plus'); -var algs = require('./algs'); -var crypto = require('crypto'); -var Fingerprint = require('./fingerprint'); -var Signature = require('./signature'); -var errs = require('./errors'); -var util = require('util'); -var utils = require('./utils'); -var Key = require('./key'); -var PrivateKey = require('./private-key'); -var Identity = require('./identity'); - -var formats = {}; -formats['openssh'] = require('./formats/openssh-cert'); -formats['x509'] = require('./formats/x509'); -formats['pem'] = require('./formats/x509-pem'); - -var CertificateParseError = errs.CertificateParseError; -var InvalidAlgorithmError = errs.InvalidAlgorithmError; - -function Certificate(opts) { - assert.object(opts, 'options'); - assert.arrayOfObject(opts.subjects, 'options.subjects'); - utils.assertCompatible(opts.subjects[0], Identity, [1, 0], - 'options.subjects'); - utils.assertCompatible(opts.subjectKey, Key, [1, 0], - 'options.subjectKey'); - utils.assertCompatible(opts.issuer, Identity, [1, 0], 'options.issuer'); - if (opts.issuerKey !== undefined) { - utils.assertCompatible(opts.issuerKey, Key, [1, 0], - 'options.issuerKey'); - } - assert.object(opts.signatures, 'options.signatures'); - assert.buffer(opts.serial, 'options.serial'); - assert.date(opts.validFrom, 'options.validFrom'); - assert.date(opts.validUntil, 'optons.validUntil'); - - this._hashCache = {}; - - this.subjects = opts.subjects; - this.issuer = opts.issuer; - this.subjectKey = opts.subjectKey; - this.issuerKey = opts.issuerKey; - this.signatures = opts.signatures; - this.serial = opts.serial; - this.validFrom = opts.validFrom; - this.validUntil = opts.validUntil; -} - -Certificate.formats = formats; - -Certificate.prototype.toBuffer = function (format, options) { - if (format === undefined) - format = 'x509'; - assert.string(format, 'format'); - assert.object(formats[format], 'formats[format]'); - assert.optionalObject(options, 'options'); - - return (formats[format].write(this, options)); -}; - -Certificate.prototype.toString = function (format, options) { - if (format === undefined) - format = 'pem'; - return (this.toBuffer(format, options).toString()); -}; - -Certificate.prototype.fingerprint = function (algo) { - if (algo === undefined) - algo = 'sha256'; - assert.string(algo, 'algorithm'); - var opts = { - type: 'certificate', - hash: this.hash(algo), - algorithm: algo - }; - return (new Fingerprint(opts)); -}; - -Certificate.prototype.hash = function (algo) { - assert.string(algo, 'algorithm'); - algo = algo.toLowerCase(); - if (algs.hashAlgs[algo] === undefined) - throw (new InvalidAlgorithmError(algo)); - - if (this._hashCache[algo]) - return (this._hashCache[algo]); - - var hash = crypto.createHash(algo). - update(this.toBuffer('x509')).digest(); - this._hashCache[algo] = hash; - return (hash); -}; - -Certificate.prototype.isExpired = function (when) { - if (when === undefined) - when = new Date(); - return (!((when.getTime() >= this.validFrom.getTime()) && - (when.getTime() < this.validUntil.getTime()))); -}; - -Certificate.prototype.isSignedBy = function (issuerCert) { - utils.assertCompatible(issuerCert, Certificate, [1, 0], 'issuer'); - - if (!this.issuer.equals(issuerCert.subjects[0])) - return (false); - - return (this.isSignedByKey(issuerCert.subjectKey)); -}; - -Certificate.prototype.isSignedByKey = function (issuerKey) { - utils.assertCompatible(issuerKey, Key, [1, 2], 'issuerKey'); - - if (this.issuerKey !== undefined) { - return (this.issuerKey. - fingerprint('sha512').matches(issuerKey)); - } - - var fmt = Object.keys(this.signatures)[0]; - var valid = formats[fmt].verify(this, issuerKey); - if (valid) - this.issuerKey = issuerKey; - return (valid); -}; - -Certificate.prototype.signWith = function (key) { - utils.assertCompatible(key, PrivateKey, [1, 2], 'key'); - var fmts = Object.keys(formats); - var didOne = false; - for (var i = 0; i < fmts.length; ++i) { - if (fmts[i] !== 'pem') { - var ret = formats[fmts[i]].sign(this, key); - if (ret === true) - didOne = true; - } - } - if (!didOne) { - throw (new Error('Failed to sign the certificate for any ' + - 'available certificate formats')); - } -}; - -Certificate.createSelfSigned = function (subjectOrSubjects, key, options) { - var subjects; - if (Array.isArray(subjectOrSubjects)) - subjects = subjectOrSubjects; - else - subjects = [subjectOrSubjects]; - - assert.arrayOfObject(subjects); - subjects.forEach(function (subject) { - utils.assertCompatible(subject, Identity, [1, 0], 'subject'); - }); - - utils.assertCompatible(key, PrivateKey, [1, 2], 'private key'); - - assert.optionalObject(options, 'options'); - if (options === undefined) - options = {}; - assert.optionalObject(options.validFrom, 'options.validFrom'); - assert.optionalObject(options.validUntil, 'options.validUntil'); - var validFrom = options.validFrom; - var validUntil = options.validUntil; - if (validFrom === undefined) - validFrom = new Date(); - if (validUntil === undefined) { - assert.optionalNumber(options.lifetime, 'options.lifetime'); - var lifetime = options.lifetime; - if (lifetime === undefined) - lifetime = 10*365*24*3600; - validUntil = new Date(); - validUntil.setTime(validUntil.getTime() + lifetime*1000); - } - assert.optionalBuffer(options.serial, 'options.serial'); - var serial = options.serial; - if (serial === undefined) - serial = new Buffer('0000000000000001', 'hex'); - - var cert = new Certificate({ - subjects: subjects, - issuer: subjects[0], - subjectKey: key.toPublic(), - issuerKey: key.toPublic(), - signatures: {}, - serial: serial, - validFrom: validFrom, - validUntil: validUntil - }); - cert.signWith(key); - - return (cert); -}; - -Certificate.create = - function (subjectOrSubjects, key, issuer, issuerKey, options) { - var subjects; - if (Array.isArray(subjectOrSubjects)) - subjects = subjectOrSubjects; - else - subjects = [subjectOrSubjects]; - - assert.arrayOfObject(subjects); - subjects.forEach(function (subject) { - utils.assertCompatible(subject, Identity, [1, 0], 'subject'); - }); - - utils.assertCompatible(key, Key, [1, 0], 'key'); - if (PrivateKey.isPrivateKey(key)) - key = key.toPublic(); - utils.assertCompatible(issuer, Identity, [1, 0], 'issuer'); - utils.assertCompatible(issuerKey, PrivateKey, [1, 2], 'issuer key'); - - assert.optionalObject(options, 'options'); - if (options === undefined) - options = {}; - assert.optionalObject(options.validFrom, 'options.validFrom'); - assert.optionalObject(options.validUntil, 'options.validUntil'); - var validFrom = options.validFrom; - var validUntil = options.validUntil; - if (validFrom === undefined) - validFrom = new Date(); - if (validUntil === undefined) { - assert.optionalNumber(options.lifetime, 'options.lifetime'); - var lifetime = options.lifetime; - if (lifetime === undefined) - lifetime = 10*365*24*3600; - validUntil = new Date(); - validUntil.setTime(validUntil.getTime() + lifetime*1000); - } - assert.optionalBuffer(options.serial, 'options.serial'); - var serial = options.serial; - if (serial === undefined) - serial = new Buffer('0000000000000001', 'hex'); - - var cert = new Certificate({ - subjects: subjects, - issuer: issuer, - subjectKey: key, - issuerKey: issuerKey.toPublic(), - signatures: {}, - serial: serial, - validFrom: validFrom, - validUntil: validUntil - }); - cert.signWith(issuerKey); - - return (cert); -}; - -Certificate.parse = function (data, format, options) { - if (typeof (data) !== 'string') - assert.buffer(data, 'data'); - if (format === undefined) - format = 'auto'; - assert.string(format, 'format'); - if (typeof (options) === 'string') - options = { filename: options }; - assert.optionalObject(options, 'options'); - if (options === undefined) - options = {}; - assert.optionalString(options.filename, 'options.filename'); - if (options.filename === undefined) - options.filename = '(unnamed)'; - - assert.object(formats[format], 'formats[format]'); - - try { - var k = formats[format].read(data, options); - return (k); - } catch (e) { - throw (new CertificateParseError(options.filename, format, e)); - } -}; - -Certificate.isCertificate = function (obj, ver) { - return (utils.isCompatible(obj, Certificate, ver)); -}; - -/* - * API versions for Certificate: - * [1,0] -- initial ver - */ -Certificate.prototype._sshpkApiVersion = [1, 0]; - -Certificate._oldVersionDetect = function (obj) { - return ([1, 0]); -}; diff --git a/node_modules/sshpk/lib/dhe.js b/node_modules/sshpk/lib/dhe.js deleted file mode 100644 index 8f9548c..0000000 --- a/node_modules/sshpk/lib/dhe.js +++ /dev/null @@ -1,311 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = DiffieHellman; - -var assert = require('assert-plus'); -var crypto = require('crypto'); -var algs = require('./algs'); -var utils = require('./utils'); -var ed; - -var Key = require('./key'); -var PrivateKey = require('./private-key'); - -var CRYPTO_HAVE_ECDH = (crypto.createECDH !== undefined); - -var ecdh, ec, jsbn; - -function DiffieHellman(key) { - utils.assertCompatible(key, Key, [1, 4], 'key'); - this._isPriv = PrivateKey.isPrivateKey(key, [1, 3]); - this._algo = key.type; - this._curve = key.curve; - this._key = key; - if (key.type === 'dsa') { - if (!CRYPTO_HAVE_ECDH) { - throw (new Error('Due to bugs in the node 0.10 ' + - 'crypto API, node 0.12.x or later is required ' + - 'to use DH')); - } - this._dh = crypto.createDiffieHellman( - key.part.p.data, undefined, - key.part.g.data, undefined); - this._p = key.part.p; - this._g = key.part.g; - if (this._isPriv) - this._dh.setPrivateKey(key.part.x.data); - this._dh.setPublicKey(key.part.y.data); - - } else if (key.type === 'ecdsa') { - if (!CRYPTO_HAVE_ECDH) { - if (ecdh === undefined) - ecdh = require('ecc-jsbn'); - if (ec === undefined) - ec = require('ecc-jsbn/lib/ec'); - if (jsbn === undefined) - jsbn = require('jsbn').BigInteger; - - this._ecParams = new X9ECParameters(this._curve); - - if (this._isPriv) { - this._priv = new ECPrivate( - this._ecParams, key.part.d.data); - } - return; - } - - var curve = { - 'nistp256': 'prime256v1', - 'nistp384': 'secp384r1', - 'nistp521': 'secp521r1' - }[key.curve]; - this._dh = crypto.createECDH(curve); - if (typeof (this._dh) !== 'object' || - typeof (this._dh.setPrivateKey) !== 'function') { - CRYPTO_HAVE_ECDH = false; - DiffieHellman.call(this, key); - return; - } - if (this._isPriv) - this._dh.setPrivateKey(key.part.d.data); - this._dh.setPublicKey(key.part.Q.data); - - } else if (key.type === 'curve25519') { - if (ed === undefined) - ed = require('jodid25519'); - - if (this._isPriv) { - this._priv = key.part.r.data; - if (this._priv[0] === 0x00) - this._priv = this._priv.slice(1); - this._priv = this._priv.slice(0, 32); - } - - } else { - throw (new Error('DH not supported for ' + key.type + ' keys')); - } -} - -DiffieHellman.prototype.getPublicKey = function () { - if (this._isPriv) - return (this._key.toPublic()); - return (this._key); -}; - -DiffieHellman.prototype.getPrivateKey = function () { - if (this._isPriv) - return (this._key); - else - return (undefined); -}; -DiffieHellman.prototype.getKey = DiffieHellman.prototype.getPrivateKey; - -DiffieHellman.prototype._keyCheck = function (pk, isPub) { - assert.object(pk, 'key'); - if (!isPub) - utils.assertCompatible(pk, PrivateKey, [1, 3], 'key'); - utils.assertCompatible(pk, Key, [1, 4], 'key'); - - if (pk.type !== this._algo) { - throw (new Error('A ' + pk.type + ' key cannot be used in ' + - this._algo + ' Diffie-Hellman')); - } - - if (pk.curve !== this._curve) { - throw (new Error('A key from the ' + pk.curve + ' curve ' + - 'cannot be used with a ' + this._curve + - ' Diffie-Hellman')); - } - - if (pk.type === 'dsa') { - assert.deepEqual(pk.part.p, this._p, - 'DSA key prime does not match'); - assert.deepEqual(pk.part.g, this._g, - 'DSA key generator does not match'); - } -}; - -DiffieHellman.prototype.setKey = function (pk) { - this._keyCheck(pk); - - if (pk.type === 'dsa') { - this._dh.setPrivateKey(pk.part.x.data); - this._dh.setPublicKey(pk.part.y.data); - - } else if (pk.type === 'ecdsa') { - if (CRYPTO_HAVE_ECDH) { - this._dh.setPrivateKey(pk.part.d.data); - this._dh.setPublicKey(pk.part.Q.data); - } else { - this._priv = new ECPrivate( - this._ecParams, pk.part.d.data); - } - - } else if (pk.type === 'curve25519') { - this._priv = pk.part.r.data; - if (this._priv[0] === 0x00) - this._priv = this._priv.slice(1); - this._priv = this._priv.slice(0, 32); - } - this._key = pk; - this._isPriv = true; -}; -DiffieHellman.prototype.setPrivateKey = DiffieHellman.prototype.setKey; - -DiffieHellman.prototype.computeSecret = function (otherpk) { - this._keyCheck(otherpk, true); - if (!this._isPriv) - throw (new Error('DH exchange has not been initialized with ' + - 'a private key yet')); - - var pub; - if (this._algo === 'dsa') { - return (this._dh.computeSecret( - otherpk.part.y.data)); - - } else if (this._algo === 'ecdsa') { - if (CRYPTO_HAVE_ECDH) { - return (this._dh.computeSecret( - otherpk.part.Q.data)); - } else { - pub = new ECPublic( - this._ecParams, otherpk.part.Q.data); - return (this._priv.deriveSharedSecret(pub)); - } - - } else if (this._algo === 'curve25519') { - pub = otherpk.part.R.data; - if (pub[0] === 0x00) - pub = pub.slice(1); - - var secret = ed.dh.computeKey( - this._priv.toString('binary'), - pub.toString('binary')); - - return (new Buffer(secret, 'binary')); - } - - throw (new Error('Invalid algorithm: ' + this._algo)); -}; - -DiffieHellman.prototype.generateKey = function () { - var parts = []; - var priv, pub; - if (this._algo === 'dsa') { - this._dh.generateKeys(); - - parts.push({name: 'p', data: this._p.data}); - parts.push({name: 'q', data: this._key.part.q.data}); - parts.push({name: 'g', data: this._g.data}); - parts.push({name: 'y', data: this._dh.getPublicKey()}); - parts.push({name: 'x', data: this._dh.getPrivateKey()}); - this._key = new PrivateKey({ - type: 'dsa', - parts: parts - }); - this._isPriv = true; - return (this._key); - - } else if (this._algo === 'ecdsa') { - if (CRYPTO_HAVE_ECDH) { - this._dh.generateKeys(); - - parts.push({name: 'curve', - data: new Buffer(this._curve)}); - parts.push({name: 'Q', data: this._dh.getPublicKey()}); - parts.push({name: 'd', data: this._dh.getPrivateKey()}); - this._key = new PrivateKey({ - type: 'ecdsa', - curve: this._curve, - parts: parts - }); - this._isPriv = true; - return (this._key); - - } else { - var n = this._ecParams.getN(); - var r = new jsbn(crypto.randomBytes(n.bitLength())); - var n1 = n.subtract(jsbn.ONE); - priv = r.mod(n1).add(jsbn.ONE); - pub = this._ecParams.getG().multiply(priv); - - priv = new Buffer(priv.toByteArray()); - pub = new Buffer(this._ecParams.getCurve(). - encodePointHex(pub), 'hex'); - - this._priv = new ECPrivate(this._ecParams, priv); - - parts.push({name: 'curve', - data: new Buffer(this._curve)}); - parts.push({name: 'Q', data: pub}); - parts.push({name: 'd', data: priv}); - - this._key = new PrivateKey({ - type: 'ecdsa', - curve: this._curve, - parts: parts - }); - this._isPriv = true; - return (this._key); - } - - } else if (this._algo === 'curve25519') { - priv = ed.dh.generateKey(); - pub = ed.dh.publicKey(priv); - this._priv = priv = new Buffer(priv, 'binary'); - pub = new Buffer(pub, 'binary'); - - parts.push({name: 'R', data: pub}); - parts.push({name: 'r', data: Buffer.concat([priv, pub])}); - this._key = new PrivateKey({ - type: 'curve25519', - parts: parts - }); - this._isPriv = true; - return (this._key); - } - - throw (new Error('Invalid algorithm: ' + this._algo)); -}; -DiffieHellman.prototype.generateKeys = DiffieHellman.prototype.generateKey; - -/* These are helpers for using ecc-jsbn (for node 0.10 compatibility). */ - -function X9ECParameters(name) { - var params = algs.curves[name]; - assert.object(params); - - var p = new jsbn(params.p); - var a = new jsbn(params.a); - var b = new jsbn(params.b); - var n = new jsbn(params.n); - var h = jsbn.ONE; - var curve = new ec.ECCurveFp(p, a, b); - var G = curve.decodePointHex(params.G.toString('hex')); - - this.curve = curve; - this.g = G; - this.n = n; - this.h = h; -} -X9ECParameters.prototype.getCurve = function () { return (this.curve); }; -X9ECParameters.prototype.getG = function () { return (this.g); }; -X9ECParameters.prototype.getN = function () { return (this.n); }; -X9ECParameters.prototype.getH = function () { return (this.h); }; - -function ECPublic(params, buffer) { - this._params = params; - if (buffer[0] === 0x00) - buffer = buffer.slice(1); - this._pub = params.getCurve().decodePointHex(buffer.toString('hex')); -} - -function ECPrivate(params, buffer) { - this._params = params; - this._priv = new jsbn(utils.mpNormalize(buffer)); -} -ECPrivate.prototype.deriveSharedSecret = function (pubKey) { - assert.ok(pubKey instanceof ECPublic); - var S = pubKey._pub.multiply(this._priv); - return (new Buffer(S.getX().toBigInteger().toByteArray())); -}; diff --git a/node_modules/sshpk/lib/ed-compat.js b/node_modules/sshpk/lib/ed-compat.js deleted file mode 100644 index 5365fb1..0000000 --- a/node_modules/sshpk/lib/ed-compat.js +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - Verifier: Verifier, - Signer: Signer -}; - -var nacl; -var stream = require('stream'); -var util = require('util'); -var assert = require('assert-plus'); -var Signature = require('./signature'); - -function Verifier(key, hashAlgo) { - if (nacl === undefined) - nacl = require('tweetnacl'); - - if (hashAlgo.toLowerCase() !== 'sha512') - throw (new Error('ED25519 only supports the use of ' + - 'SHA-512 hashes')); - - this.key = key; - this.chunks = []; - - stream.Writable.call(this, {}); -} -util.inherits(Verifier, stream.Writable); - -Verifier.prototype._write = function (chunk, enc, cb) { - this.chunks.push(chunk); - cb(); -}; - -Verifier.prototype.update = function (chunk) { - if (typeof (chunk) === 'string') - chunk = new Buffer(chunk, 'binary'); - this.chunks.push(chunk); -}; - -Verifier.prototype.verify = function (signature, fmt) { - var sig; - if (Signature.isSignature(signature, [2, 0])) { - if (signature.type !== 'ed25519') - return (false); - sig = signature.toBuffer('raw'); - - } else if (typeof (signature) === 'string') { - sig = new Buffer(signature, 'base64'); - - } else if (Signature.isSignature(signature, [1, 0])) { - throw (new Error('signature was created by too old ' + - 'a version of sshpk and cannot be verified')); - } - - assert.buffer(sig); - return (nacl.sign.detached.verify( - new Uint8Array(Buffer.concat(this.chunks)), - new Uint8Array(sig), - new Uint8Array(this.key.part.R.data))); -}; - -function Signer(key, hashAlgo) { - if (nacl === undefined) - nacl = require('tweetnacl'); - - if (hashAlgo.toLowerCase() !== 'sha512') - throw (new Error('ED25519 only supports the use of ' + - 'SHA-512 hashes')); - - this.key = key; - this.chunks = []; - - stream.Writable.call(this, {}); -} -util.inherits(Signer, stream.Writable); - -Signer.prototype._write = function (chunk, enc, cb) { - this.chunks.push(chunk); - cb(); -}; - -Signer.prototype.update = function (chunk) { - if (typeof (chunk) === 'string') - chunk = new Buffer(chunk, 'binary'); - this.chunks.push(chunk); -}; - -Signer.prototype.sign = function () { - var sig = nacl.sign.detached( - new Uint8Array(Buffer.concat(this.chunks)), - new Uint8Array(this.key.part.r.data)); - var sigBuf = new Buffer(sig); - var sigObj = Signature.parse(sigBuf, 'ed25519', 'raw'); - sigObj.hashAlgorithm = 'sha512'; - return (sigObj); -}; diff --git a/node_modules/sshpk/lib/errors.js b/node_modules/sshpk/lib/errors.js deleted file mode 100644 index 1cc09ec..0000000 --- a/node_modules/sshpk/lib/errors.js +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -var assert = require('assert-plus'); -var util = require('util'); - -function FingerprintFormatError(fp, format) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, FingerprintFormatError); - this.name = 'FingerprintFormatError'; - this.fingerprint = fp; - this.format = format; - this.message = 'Fingerprint format is not supported, or is invalid: '; - if (fp !== undefined) - this.message += ' fingerprint = ' + fp; - if (format !== undefined) - this.message += ' format = ' + format; -} -util.inherits(FingerprintFormatError, Error); - -function InvalidAlgorithmError(alg) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, InvalidAlgorithmError); - this.name = 'InvalidAlgorithmError'; - this.algorithm = alg; - this.message = 'Algorithm "' + alg + '" is not supported'; -} -util.inherits(InvalidAlgorithmError, Error); - -function KeyParseError(name, format, innerErr) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, KeyParseError); - this.name = 'KeyParseError'; - this.format = format; - this.keyName = name; - this.innerErr = innerErr; - this.message = 'Failed to parse ' + name + ' as a valid ' + format + - ' format key: ' + innerErr.message; -} -util.inherits(KeyParseError, Error); - -function SignatureParseError(type, format, innerErr) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, SignatureParseError); - this.name = 'SignatureParseError'; - this.type = type; - this.format = format; - this.innerErr = innerErr; - this.message = 'Failed to parse the given data as a ' + type + - ' signature in ' + format + ' format: ' + innerErr.message; -} -util.inherits(SignatureParseError, Error); - -function CertificateParseError(name, format, innerErr) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, CertificateParseError); - this.name = 'CertificateParseError'; - this.format = format; - this.certName = name; - this.innerErr = innerErr; - this.message = 'Failed to parse ' + name + ' as a valid ' + format + - ' format certificate: ' + innerErr.message; -} -util.inherits(CertificateParseError, Error); - -function KeyEncryptedError(name, format) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, KeyEncryptedError); - this.name = 'KeyEncryptedError'; - this.format = format; - this.keyName = name; - this.message = 'The ' + format + ' format key ' + name + ' is ' + - 'encrypted (password-protected), and no passphrase was ' + - 'provided in `options`'; -} -util.inherits(KeyEncryptedError, Error); - -module.exports = { - FingerprintFormatError: FingerprintFormatError, - InvalidAlgorithmError: InvalidAlgorithmError, - KeyParseError: KeyParseError, - SignatureParseError: SignatureParseError, - KeyEncryptedError: KeyEncryptedError, - CertificateParseError: CertificateParseError -}; diff --git a/node_modules/sshpk/lib/fingerprint.js b/node_modules/sshpk/lib/fingerprint.js deleted file mode 100644 index 7ed7e51..0000000 --- a/node_modules/sshpk/lib/fingerprint.js +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = Fingerprint; - -var assert = require('assert-plus'); -var algs = require('./algs'); -var crypto = require('crypto'); -var errs = require('./errors'); -var Key = require('./key'); -var Certificate = require('./certificate'); -var utils = require('./utils'); - -var FingerprintFormatError = errs.FingerprintFormatError; -var InvalidAlgorithmError = errs.InvalidAlgorithmError; - -function Fingerprint(opts) { - assert.object(opts, 'options'); - assert.string(opts.type, 'options.type'); - assert.buffer(opts.hash, 'options.hash'); - assert.string(opts.algorithm, 'options.algorithm'); - - this.algorithm = opts.algorithm.toLowerCase(); - if (algs.hashAlgs[this.algorithm] !== true) - throw (new InvalidAlgorithmError(this.algorithm)); - - this.hash = opts.hash; - this.type = opts.type; -} - -Fingerprint.prototype.toString = function (format) { - if (format === undefined) { - if (this.algorithm === 'md5') - format = 'hex'; - else - format = 'base64'; - } - assert.string(format); - - switch (format) { - case 'hex': - return (addColons(this.hash.toString('hex'))); - case 'base64': - return (sshBase64Format(this.algorithm, - this.hash.toString('base64'))); - default: - throw (new FingerprintFormatError(undefined, format)); - } -}; - -Fingerprint.prototype.matches = function (other) { - assert.object(other, 'key or certificate'); - if (this.type === 'key') { - utils.assertCompatible(other, Key, [1, 0], 'key'); - } else { - utils.assertCompatible(other, Certificate, [1, 0], - 'certificate'); - } - - var theirHash = other.hash(this.algorithm); - var theirHash2 = crypto.createHash(this.algorithm). - update(theirHash).digest('base64'); - - if (this.hash2 === undefined) - this.hash2 = crypto.createHash(this.algorithm). - update(this.hash).digest('base64'); - - return (this.hash2 === theirHash2); -}; - -Fingerprint.parse = function (fp, options) { - assert.string(fp, 'fingerprint'); - - var alg, hash, enAlgs; - if (Array.isArray(options)) { - enAlgs = options; - options = {}; - } - assert.optionalObject(options, 'options'); - if (options === undefined) - options = {}; - if (options.enAlgs !== undefined) - enAlgs = options.enAlgs; - assert.optionalArrayOfString(enAlgs, 'algorithms'); - - var parts = fp.split(':'); - if (parts.length == 2) { - alg = parts[0].toLowerCase(); - /*JSSTYLED*/ - var base64RE = /^[A-Za-z0-9+\/=]+$/; - if (!base64RE.test(parts[1])) - throw (new FingerprintFormatError(fp)); - try { - hash = new Buffer(parts[1], 'base64'); - } catch (e) { - throw (new FingerprintFormatError(fp)); - } - } else if (parts.length > 2) { - alg = 'md5'; - if (parts[0].toLowerCase() === 'md5') - parts = parts.slice(1); - parts = parts.join(''); - /*JSSTYLED*/ - var md5RE = /^[a-fA-F0-9]+$/; - if (!md5RE.test(parts)) - throw (new FingerprintFormatError(fp)); - try { - hash = new Buffer(parts, 'hex'); - } catch (e) { - throw (new FingerprintFormatError(fp)); - } - } - - if (alg === undefined) - throw (new FingerprintFormatError(fp)); - - if (algs.hashAlgs[alg] === undefined) - throw (new InvalidAlgorithmError(alg)); - - if (enAlgs !== undefined) { - enAlgs = enAlgs.map(function (a) { return a.toLowerCase(); }); - if (enAlgs.indexOf(alg) === -1) - throw (new InvalidAlgorithmError(alg)); - } - - return (new Fingerprint({ - algorithm: alg, - hash: hash, - type: options.type || 'key' - })); -}; - -function addColons(s) { - /*JSSTYLED*/ - return (s.replace(/(.{2})(?=.)/g, '$1:')); -} - -function base64Strip(s) { - /*JSSTYLED*/ - return (s.replace(/=*$/, '')); -} - -function sshBase64Format(alg, h) { - return (alg.toUpperCase() + ':' + base64Strip(h)); -} - -Fingerprint.isFingerprint = function (obj, ver) { - return (utils.isCompatible(obj, Fingerprint, ver)); -}; - -/* - * API versions for Fingerprint: - * [1,0] -- initial ver - * [1,1] -- first tagged ver - */ -Fingerprint.prototype._sshpkApiVersion = [1, 1]; - -Fingerprint._oldVersionDetect = function (obj) { - assert.func(obj.toString); - assert.func(obj.matches); - return ([1, 0]); -}; diff --git a/node_modules/sshpk/lib/formats/auto.js b/node_modules/sshpk/lib/formats/auto.js deleted file mode 100644 index 973c032..0000000 --- a/node_modules/sshpk/lib/formats/auto.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - read: read, - write: write -}; - -var assert = require('assert-plus'); -var utils = require('../utils'); -var Key = require('../key'); -var PrivateKey = require('../private-key'); - -var pem = require('./pem'); -var ssh = require('./ssh'); -var rfc4253 = require('./rfc4253'); - -function read(buf, options) { - if (typeof (buf) === 'string') { - if (buf.trim().match(/^[-]+[ ]*BEGIN/)) - return (pem.read(buf, options)); - if (buf.match(/^\s*ssh-[a-z]/)) - return (ssh.read(buf, options)); - if (buf.match(/^\s*ecdsa-/)) - return (ssh.read(buf, options)); - buf = new Buffer(buf, 'binary'); - } else { - assert.buffer(buf); - if (findPEMHeader(buf)) - return (pem.read(buf, options)); - if (findSSHHeader(buf)) - return (ssh.read(buf, options)); - } - if (buf.readUInt32BE(0) < buf.length) - return (rfc4253.read(buf, options)); - throw (new Error('Failed to auto-detect format of key')); -} - -function findSSHHeader(buf) { - var offset = 0; - while (offset < buf.length && - (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9)) - ++offset; - if (offset + 4 <= buf.length && - buf.slice(offset, offset + 4).toString('ascii') === 'ssh-') - return (true); - if (offset + 6 <= buf.length && - buf.slice(offset, offset + 6).toString('ascii') === 'ecdsa-') - return (true); - return (false); -} - -function findPEMHeader(buf) { - var offset = 0; - while (offset < buf.length && - (buf[offset] === 32 || buf[offset] === 10)) - ++offset; - if (buf[offset] !== 45) - return (false); - while (offset < buf.length && - (buf[offset] === 45)) - ++offset; - while (offset < buf.length && - (buf[offset] === 32)) - ++offset; - if (offset + 5 > buf.length || - buf.slice(offset, offset + 5).toString('ascii') !== 'BEGIN') - return (false); - return (true); -} - -function write(key, options) { - throw (new Error('"auto" format cannot be used for writing')); -} diff --git a/node_modules/sshpk/lib/formats/openssh-cert.js b/node_modules/sshpk/lib/formats/openssh-cert.js deleted file mode 100644 index 8ce7350..0000000 --- a/node_modules/sshpk/lib/formats/openssh-cert.js +++ /dev/null @@ -1,289 +0,0 @@ -// Copyright 2016 Joyent, Inc. - -module.exports = { - read: read, - verify: verify, - sign: sign, - write: write, - - /* Internal private API */ - fromBuffer: fromBuffer, - toBuffer: toBuffer -}; - -var assert = require('assert-plus'); -var SSHBuffer = require('../ssh-buffer'); -var crypto = require('crypto'); -var algs = require('../algs'); -var Key = require('../key'); -var PrivateKey = require('../private-key'); -var Identity = require('../identity'); -var rfc4253 = require('./rfc4253'); -var Signature = require('../signature'); -var utils = require('../utils'); -var Certificate = require('../certificate'); - -function verify(cert, key) { - /* - * We always give an issuerKey, so if our verify() is being called then - * there was no signature. Return false. - */ - return (false); -} - -var TYPES = { - 'user': 1, - 'host': 2 -}; -Object.keys(TYPES).forEach(function (k) { TYPES[TYPES[k]] = k; }); - -var ECDSA_ALGO = /^ecdsa-sha2-([^@-]+)-cert-v01@openssh.com$/; - -function read(buf, options) { - if (Buffer.isBuffer(buf)) - buf = buf.toString('ascii'); - var parts = buf.trim().split(/[ \t\n]+/g); - if (parts.length < 2 || parts.length > 3) - throw (new Error('Not a valid SSH certificate line')); - - var algo = parts[0]; - var data = parts[1]; - - data = new Buffer(data, 'base64'); - return (fromBuffer(data, algo)); -} - -function fromBuffer(data, algo, partial) { - var sshbuf = new SSHBuffer({ buffer: data }); - var innerAlgo = sshbuf.readString(); - if (algo !== undefined && innerAlgo !== algo) - throw (new Error('SSH certificate algorithm mismatch')); - if (algo === undefined) - algo = innerAlgo; - - var cert = {}; - cert.signatures = {}; - cert.signatures.openssh = {}; - - cert.signatures.openssh.nonce = sshbuf.readBuffer(); - - var key = {}; - var parts = (key.parts = []); - key.type = getAlg(algo); - - var partCount = algs.info[key.type].parts.length; - while (parts.length < partCount) - parts.push(sshbuf.readPart()); - assert.ok(parts.length >= 1, 'key must have at least one part'); - - var algInfo = algs.info[key.type]; - if (key.type === 'ecdsa') { - var res = ECDSA_ALGO.exec(algo); - assert.ok(res !== null); - assert.strictEqual(res[1], parts[0].data.toString()); - } - - for (var i = 0; i < algInfo.parts.length; ++i) { - parts[i].name = algInfo.parts[i]; - if (parts[i].name !== 'curve' && - algInfo.normalize !== false) { - var p = parts[i]; - p.data = utils.mpNormalize(p.data); - } - } - - cert.subjectKey = new Key(key); - - cert.serial = sshbuf.readInt64(); - - var type = TYPES[sshbuf.readInt()]; - assert.string(type, 'valid cert type'); - - cert.signatures.openssh.keyId = sshbuf.readString(); - - var principals = []; - var pbuf = sshbuf.readBuffer(); - var psshbuf = new SSHBuffer({ buffer: pbuf }); - while (!psshbuf.atEnd()) - principals.push(psshbuf.readString()); - if (principals.length === 0) - principals = ['*']; - - cert.subjects = principals.map(function (pr) { - if (type === 'user') - return (Identity.forUser(pr)); - else if (type === 'host') - return (Identity.forHost(pr)); - throw (new Error('Unknown identity type ' + type)); - }); - - cert.validFrom = int64ToDate(sshbuf.readInt64()); - cert.validUntil = int64ToDate(sshbuf.readInt64()); - - cert.signatures.openssh.critical = sshbuf.readBuffer(); - cert.signatures.openssh.exts = sshbuf.readBuffer(); - - /* reserved */ - sshbuf.readBuffer(); - - var signingKeyBuf = sshbuf.readBuffer(); - cert.issuerKey = rfc4253.read(signingKeyBuf); - - /* - * OpenSSH certs don't give the identity of the issuer, just their - * public key. So, we use an Identity that matches anything. The - * isSignedBy() function will later tell you if the key matches. - */ - cert.issuer = Identity.forHost('**'); - - var sigBuf = sshbuf.readBuffer(); - cert.signatures.openssh.signature = - Signature.parse(sigBuf, cert.issuerKey.type, 'ssh'); - - if (partial !== undefined) { - partial.remainder = sshbuf.remainder(); - partial.consumed = sshbuf._offset; - } - - return (new Certificate(cert)); -} - -function int64ToDate(buf) { - var i = buf.readUInt32BE(0) * 4294967296; - i += buf.readUInt32BE(4); - var d = new Date(); - d.setTime(i * 1000); - d.sourceInt64 = buf; - return (d); -} - -function dateToInt64(date) { - if (date.sourceInt64 !== undefined) - return (date.sourceInt64); - var i = Math.round(date.getTime() / 1000); - var upper = Math.floor(i / 4294967296); - var lower = Math.floor(i % 4294967296); - var buf = new Buffer(8); - buf.writeUInt32BE(upper, 0); - buf.writeUInt32BE(lower, 4); - return (buf); -} - -function sign(cert, key) { - if (cert.signatures.openssh === undefined) - cert.signatures.openssh = {}; - try { - var blob = toBuffer(cert, true); - } catch (e) { - delete (cert.signatures.openssh); - return (false); - } - var sig = cert.signatures.openssh; - var hashAlgo = undefined; - if (key.type === 'rsa' || key.type === 'dsa') - hashAlgo = 'sha1'; - var signer = key.createSign(hashAlgo); - signer.write(blob); - sig.signature = signer.sign(); - return (true); -} - -function write(cert, options) { - if (options === undefined) - options = {}; - - var blob = toBuffer(cert); - var out = getCertType(cert.subjectKey) + ' ' + blob.toString('base64'); - if (options.comment) - out = out + ' ' + options.comment; - return (out); -} - - -function toBuffer(cert, noSig) { - assert.object(cert.signatures.openssh, 'signature for openssh format'); - var sig = cert.signatures.openssh; - - if (sig.nonce === undefined) - sig.nonce = crypto.randomBytes(16); - var buf = new SSHBuffer({}); - buf.writeString(getCertType(cert.subjectKey)); - buf.writeBuffer(sig.nonce); - - var key = cert.subjectKey; - var algInfo = algs.info[key.type]; - algInfo.parts.forEach(function (part) { - buf.writePart(key.part[part]); - }); - - buf.writeInt64(cert.serial); - - var type = cert.subjects[0].type; - assert.notStrictEqual(type, 'unknown'); - cert.subjects.forEach(function (id) { - assert.strictEqual(id.type, type); - }); - type = TYPES[type]; - buf.writeInt(type); - - if (sig.keyId === undefined) { - sig.keyId = cert.subjects[0].type + '_' + - (cert.subjects[0].uid || cert.subjects[0].hostname); - } - buf.writeString(sig.keyId); - - var sub = new SSHBuffer({}); - cert.subjects.forEach(function (id) { - if (type === TYPES.host) - sub.writeString(id.hostname); - else if (type === TYPES.user) - sub.writeString(id.uid); - }); - buf.writeBuffer(sub.toBuffer()); - - buf.writeInt64(dateToInt64(cert.validFrom)); - buf.writeInt64(dateToInt64(cert.validUntil)); - - if (sig.critical === undefined) - sig.critical = new Buffer(0); - buf.writeBuffer(sig.critical); - - if (sig.exts === undefined) - sig.exts = new Buffer(0); - buf.writeBuffer(sig.exts); - - /* reserved */ - buf.writeBuffer(new Buffer(0)); - - sub = rfc4253.write(cert.issuerKey); - buf.writeBuffer(sub); - - if (!noSig) - buf.writeBuffer(sig.signature.toBuffer('ssh')); - - return (buf.toBuffer()); -} - -function getAlg(certType) { - if (certType === 'ssh-rsa-cert-v01@openssh.com') - return ('rsa'); - if (certType === 'ssh-dss-cert-v01@openssh.com') - return ('dsa'); - if (certType.match(ECDSA_ALGO)) - return ('ecdsa'); - if (certType === 'ssh-ed25519-cert-v01@openssh.com') - return ('ed25519'); - throw (new Error('Unsupported cert type ' + certType)); -} - -function getCertType(key) { - if (key.type === 'rsa') - return ('ssh-rsa-cert-v01@openssh.com'); - if (key.type === 'dsa') - return ('ssh-dss-cert-v01@openssh.com'); - if (key.type === 'ecdsa') - return ('ecdsa-sha2-' + key.curve + '-cert-v01@openssh.com'); - if (key.type === 'ed25519') - return ('ssh-ed25519-cert-v01@openssh.com'); - throw (new Error('Unsupported key type ' + key.type)); -} diff --git a/node_modules/sshpk/lib/formats/pem.js b/node_modules/sshpk/lib/formats/pem.js deleted file mode 100644 index c254e4e..0000000 --- a/node_modules/sshpk/lib/formats/pem.js +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - read: read, - write: write -}; - -var assert = require('assert-plus'); -var asn1 = require('asn1'); -var crypto = require('crypto'); -var algs = require('../algs'); -var utils = require('../utils'); -var Key = require('../key'); -var PrivateKey = require('../private-key'); - -var pkcs1 = require('./pkcs1'); -var pkcs8 = require('./pkcs8'); -var sshpriv = require('./ssh-private'); -var rfc4253 = require('./rfc4253'); - -var errors = require('../errors'); - -/* - * For reading we support both PKCS#1 and PKCS#8. If we find a private key, - * we just take the public component of it and use that. - */ -function read(buf, options, forceType) { - var input = buf; - if (typeof (buf) !== 'string') { - assert.buffer(buf, 'buf'); - buf = buf.toString('ascii'); - } - - var lines = buf.trim().split('\n'); - - var m = lines[0].match(/*JSSTYLED*/ - /[-]+[ ]*BEGIN ([A-Z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/); - assert.ok(m, 'invalid PEM header'); - - var m2 = lines[lines.length - 1].match(/*JSSTYLED*/ - /[-]+[ ]*END ([A-Z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/); - assert.ok(m2, 'invalid PEM footer'); - - /* Begin and end banners must match key type */ - assert.equal(m[2], m2[2]); - var type = m[2].toLowerCase(); - - var alg; - if (m[1]) { - /* They also must match algorithms, if given */ - assert.equal(m[1], m2[1], 'PEM header and footer mismatch'); - alg = m[1].trim(); - } - - var headers = {}; - while (true) { - lines = lines.slice(1); - m = lines[0].match(/*JSSTYLED*/ - /^([A-Za-z0-9-]+): (.+)$/); - if (!m) - break; - headers[m[1].toLowerCase()] = m[2]; - } - - var cipher, key, iv; - if (headers['proc-type']) { - var parts = headers['proc-type'].split(','); - if (parts[0] === '4' && parts[1] === 'ENCRYPTED') { - if (typeof (options.passphrase) === 'string') { - options.passphrase = new Buffer( - options.passphrase, 'utf-8'); - } - if (!Buffer.isBuffer(options.passphrase)) { - throw (new errors.KeyEncryptedError( - options.filename, 'PEM')); - } else { - parts = headers['dek-info'].split(','); - assert.ok(parts.length === 2); - cipher = parts[0].toLowerCase(); - iv = new Buffer(parts[1], 'hex'); - key = utils.opensslKeyDeriv(cipher, iv, - options.passphrase, 1).key; - } - } - } - - /* Chop off the first and last lines */ - lines = lines.slice(0, -1).join(''); - buf = new Buffer(lines, 'base64'); - - if (cipher && key && iv) { - var cipherStream = crypto.createDecipheriv(cipher, key, iv); - var chunk, chunks = []; - cipherStream.once('error', function (e) { - if (e.toString().indexOf('bad decrypt') !== -1) { - throw (new Error('Incorrect passphrase ' + - 'supplied, could not decrypt key')); - } - throw (e); - }); - cipherStream.write(buf); - cipherStream.end(); - while ((chunk = cipherStream.read()) !== null) - chunks.push(chunk); - buf = Buffer.concat(chunks); - } - - /* The new OpenSSH internal format abuses PEM headers */ - if (alg && alg.toLowerCase() === 'openssh') - return (sshpriv.readSSHPrivate(type, buf, options)); - if (alg && alg.toLowerCase() === 'ssh2') - return (rfc4253.readType(type, buf, options)); - - var der = new asn1.BerReader(buf); - der.originalInput = input; - - /* - * All of the PEM file types start with a sequence tag, so chop it - * off here - */ - der.readSequence(); - - /* PKCS#1 type keys name an algorithm in the banner explicitly */ - if (alg) { - if (forceType) - assert.strictEqual(forceType, 'pkcs1'); - return (pkcs1.readPkcs1(alg, type, der)); - } else { - if (forceType) - assert.strictEqual(forceType, 'pkcs8'); - return (pkcs8.readPkcs8(alg, type, der)); - } -} - -function write(key, options, type) { - assert.object(key); - - var alg = {'ecdsa': 'EC', 'rsa': 'RSA', 'dsa': 'DSA'}[key.type]; - var header; - - var der = new asn1.BerWriter(); - - if (PrivateKey.isPrivateKey(key)) { - if (type && type === 'pkcs8') { - header = 'PRIVATE KEY'; - pkcs8.writePkcs8(der, key); - } else { - if (type) - assert.strictEqual(type, 'pkcs1'); - header = alg + ' PRIVATE KEY'; - pkcs1.writePkcs1(der, key); - } - - } else if (Key.isKey(key)) { - if (type && type === 'pkcs1') { - header = alg + ' PUBLIC KEY'; - pkcs1.writePkcs1(der, key); - } else { - if (type) - assert.strictEqual(type, 'pkcs8'); - header = 'PUBLIC KEY'; - pkcs8.writePkcs8(der, key); - } - - } else { - throw (new Error('key is not a Key or PrivateKey')); - } - - var tmp = der.buffer.toString('base64'); - var len = tmp.length + (tmp.length / 64) + - 18 + 16 + header.length*2 + 10; - var buf = new Buffer(len); - var o = 0; - o += buf.write('-----BEGIN ' + header + '-----\n', o); - for (var i = 0; i < tmp.length; ) { - var limit = i + 64; - if (limit > tmp.length) - limit = tmp.length; - o += buf.write(tmp.slice(i, limit), o); - buf[o++] = 10; - i = limit; - } - o += buf.write('-----END ' + header + '-----\n', o); - - return (buf.slice(0, o)); -} diff --git a/node_modules/sshpk/lib/formats/pkcs1.js b/node_modules/sshpk/lib/formats/pkcs1.js deleted file mode 100644 index a5676af..0000000 --- a/node_modules/sshpk/lib/formats/pkcs1.js +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - read: read, - readPkcs1: readPkcs1, - write: write, - writePkcs1: writePkcs1 -}; - -var assert = require('assert-plus'); -var asn1 = require('asn1'); -var algs = require('../algs'); -var utils = require('../utils'); - -var Key = require('../key'); -var PrivateKey = require('../private-key'); -var pem = require('./pem'); - -var pkcs8 = require('./pkcs8'); -var readECDSACurve = pkcs8.readECDSACurve; - -function read(buf, options) { - return (pem.read(buf, options, 'pkcs1')); -} - -function write(key, options) { - return (pem.write(key, options, 'pkcs1')); -} - -/* Helper to read in a single mpint */ -function readMPInt(der, nm) { - assert.strictEqual(der.peek(), asn1.Ber.Integer, - nm + ' is not an Integer'); - return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); -} - -function readPkcs1(alg, type, der) { - switch (alg) { - case 'RSA': - if (type === 'public') - return (readPkcs1RSAPublic(der)); - else if (type === 'private') - return (readPkcs1RSAPrivate(der)); - throw (new Error('Unknown key type: ' + type)); - case 'DSA': - if (type === 'public') - return (readPkcs1DSAPublic(der)); - else if (type === 'private') - return (readPkcs1DSAPrivate(der)); - throw (new Error('Unknown key type: ' + type)); - case 'EC': - case 'ECDSA': - if (type === 'private') - return (readPkcs1ECDSAPrivate(der)); - else if (type === 'public') - return (readPkcs1ECDSAPublic(der)); - throw (new Error('Unknown key type: ' + type)); - default: - throw (new Error('Unknown key algo: ' + alg)); - } -} - -function readPkcs1RSAPublic(der) { - // modulus and exponent - var n = readMPInt(der, 'modulus'); - var e = readMPInt(der, 'exponent'); - - // now, make the key - var key = { - type: 'rsa', - parts: [ - { name: 'e', data: e }, - { name: 'n', data: n } - ] - }; - - return (new Key(key)); -} - -function readPkcs1RSAPrivate(der) { - var version = readMPInt(der, 'version'); - assert.strictEqual(version[0], 0); - - // modulus then public exponent - var n = readMPInt(der, 'modulus'); - var e = readMPInt(der, 'public exponent'); - var d = readMPInt(der, 'private exponent'); - var p = readMPInt(der, 'prime1'); - var q = readMPInt(der, 'prime2'); - var dmodp = readMPInt(der, 'exponent1'); - var dmodq = readMPInt(der, 'exponent2'); - var iqmp = readMPInt(der, 'iqmp'); - - // now, make the key - var key = { - type: 'rsa', - parts: [ - { name: 'n', data: n }, - { name: 'e', data: e }, - { name: 'd', data: d }, - { name: 'iqmp', data: iqmp }, - { name: 'p', data: p }, - { name: 'q', data: q }, - { name: 'dmodp', data: dmodp }, - { name: 'dmodq', data: dmodq } - ] - }; - - return (new PrivateKey(key)); -} - -function readPkcs1DSAPrivate(der) { - var version = readMPInt(der, 'version'); - assert.strictEqual(version.readUInt8(0), 0); - - var p = readMPInt(der, 'p'); - var q = readMPInt(der, 'q'); - var g = readMPInt(der, 'g'); - var y = readMPInt(der, 'y'); - var x = readMPInt(der, 'x'); - - // now, make the key - var key = { - type: 'dsa', - parts: [ - { name: 'p', data: p }, - { name: 'q', data: q }, - { name: 'g', data: g }, - { name: 'y', data: y }, - { name: 'x', data: x } - ] - }; - - return (new PrivateKey(key)); -} - -function readPkcs1DSAPublic(der) { - var y = readMPInt(der, 'y'); - var p = readMPInt(der, 'p'); - var q = readMPInt(der, 'q'); - var g = readMPInt(der, 'g'); - - var key = { - type: 'dsa', - parts: [ - { name: 'y', data: y }, - { name: 'p', data: p }, - { name: 'q', data: q }, - { name: 'g', data: g } - ] - }; - - return (new Key(key)); -} - -function readPkcs1ECDSAPublic(der) { - der.readSequence(); - - var oid = der.readOID(); - assert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey'); - - var curveOid = der.readOID(); - - var curve; - var curves = Object.keys(algs.curves); - for (var j = 0; j < curves.length; ++j) { - var c = curves[j]; - var cd = algs.curves[c]; - if (cd.pkcs8oid === curveOid) { - curve = c; - break; - } - } - assert.string(curve, 'a known ECDSA named curve'); - - var Q = der.readString(asn1.Ber.BitString, true); - Q = utils.ecNormalize(Q); - - var key = { - type: 'ecdsa', - parts: [ - { name: 'curve', data: new Buffer(curve) }, - { name: 'Q', data: Q } - ] - }; - - return (new Key(key)); -} - -function readPkcs1ECDSAPrivate(der) { - var version = readMPInt(der, 'version'); - assert.strictEqual(version.readUInt8(0), 1); - - // private key - var d = der.readString(asn1.Ber.OctetString, true); - - der.readSequence(0xa0); - var curve = readECDSACurve(der); - assert.string(curve, 'a known elliptic curve'); - - der.readSequence(0xa1); - var Q = der.readString(asn1.Ber.BitString, true); - Q = utils.ecNormalize(Q); - - var key = { - type: 'ecdsa', - parts: [ - { name: 'curve', data: new Buffer(curve) }, - { name: 'Q', data: Q }, - { name: 'd', data: d } - ] - }; - - return (new PrivateKey(key)); -} - -function writePkcs1(der, key) { - der.startSequence(); - - switch (key.type) { - case 'rsa': - if (PrivateKey.isPrivateKey(key)) - writePkcs1RSAPrivate(der, key); - else - writePkcs1RSAPublic(der, key); - break; - case 'dsa': - if (PrivateKey.isPrivateKey(key)) - writePkcs1DSAPrivate(der, key); - else - writePkcs1DSAPublic(der, key); - break; - case 'ecdsa': - if (PrivateKey.isPrivateKey(key)) - writePkcs1ECDSAPrivate(der, key); - else - writePkcs1ECDSAPublic(der, key); - break; - default: - throw (new Error('Unknown key algo: ' + key.type)); - } - - der.endSequence(); -} - -function writePkcs1RSAPublic(der, key) { - der.writeBuffer(key.part.n.data, asn1.Ber.Integer); - der.writeBuffer(key.part.e.data, asn1.Ber.Integer); -} - -function writePkcs1RSAPrivate(der, key) { - var ver = new Buffer(1); - ver[0] = 0; - der.writeBuffer(ver, asn1.Ber.Integer); - - der.writeBuffer(key.part.n.data, asn1.Ber.Integer); - der.writeBuffer(key.part.e.data, asn1.Ber.Integer); - der.writeBuffer(key.part.d.data, asn1.Ber.Integer); - der.writeBuffer(key.part.p.data, asn1.Ber.Integer); - der.writeBuffer(key.part.q.data, asn1.Ber.Integer); - if (!key.part.dmodp || !key.part.dmodq) - utils.addRSAMissing(key); - der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer); - der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer); - der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer); -} - -function writePkcs1DSAPrivate(der, key) { - var ver = new Buffer(1); - ver[0] = 0; - der.writeBuffer(ver, asn1.Ber.Integer); - - der.writeBuffer(key.part.p.data, asn1.Ber.Integer); - der.writeBuffer(key.part.q.data, asn1.Ber.Integer); - der.writeBuffer(key.part.g.data, asn1.Ber.Integer); - der.writeBuffer(key.part.y.data, asn1.Ber.Integer); - der.writeBuffer(key.part.x.data, asn1.Ber.Integer); -} - -function writePkcs1DSAPublic(der, key) { - der.writeBuffer(key.part.y.data, asn1.Ber.Integer); - der.writeBuffer(key.part.p.data, asn1.Ber.Integer); - der.writeBuffer(key.part.q.data, asn1.Ber.Integer); - der.writeBuffer(key.part.g.data, asn1.Ber.Integer); -} - -function writePkcs1ECDSAPublic(der, key) { - der.startSequence(); - - der.writeOID('1.2.840.10045.2.1'); /* ecPublicKey */ - var curve = key.part.curve.data.toString(); - var curveOid = algs.curves[curve].pkcs8oid; - assert.string(curveOid, 'a known ECDSA named curve'); - der.writeOID(curveOid); - - der.endSequence(); - - var Q = utils.ecNormalize(key.part.Q.data, true); - der.writeBuffer(Q, asn1.Ber.BitString); -} - -function writePkcs1ECDSAPrivate(der, key) { - var ver = new Buffer(1); - ver[0] = 1; - der.writeBuffer(ver, asn1.Ber.Integer); - - der.writeBuffer(key.part.d.data, asn1.Ber.OctetString); - - der.startSequence(0xa0); - var curve = key.part.curve.data.toString(); - var curveOid = algs.curves[curve].pkcs8oid; - assert.string(curveOid, 'a known ECDSA named curve'); - der.writeOID(curveOid); - der.endSequence(); - - der.startSequence(0xa1); - var Q = utils.ecNormalize(key.part.Q.data, true); - der.writeBuffer(Q, asn1.Ber.BitString); - der.endSequence(); -} diff --git a/node_modules/sshpk/lib/formats/pkcs8.js b/node_modules/sshpk/lib/formats/pkcs8.js deleted file mode 100644 index 4ccbefc..0000000 --- a/node_modules/sshpk/lib/formats/pkcs8.js +++ /dev/null @@ -1,505 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - read: read, - readPkcs8: readPkcs8, - write: write, - writePkcs8: writePkcs8, - - readECDSACurve: readECDSACurve, - writeECDSACurve: writeECDSACurve -}; - -var assert = require('assert-plus'); -var asn1 = require('asn1'); -var algs = require('../algs'); -var utils = require('../utils'); -var Key = require('../key'); -var PrivateKey = require('../private-key'); -var pem = require('./pem'); - -function read(buf, options) { - return (pem.read(buf, options, 'pkcs8')); -} - -function write(key, options) { - return (pem.write(key, options, 'pkcs8')); -} - -/* Helper to read in a single mpint */ -function readMPInt(der, nm) { - assert.strictEqual(der.peek(), asn1.Ber.Integer, - nm + ' is not an Integer'); - return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); -} - -function readPkcs8(alg, type, der) { - /* Private keys in pkcs#8 format have a weird extra int */ - if (der.peek() === asn1.Ber.Integer) { - assert.strictEqual(type, 'private', - 'unexpected Integer at start of public key'); - der.readString(asn1.Ber.Integer, true); - } - - der.readSequence(); - var next = der.offset + der.length; - - var oid = der.readOID(); - switch (oid) { - case '1.2.840.113549.1.1.1': - der._offset = next; - if (type === 'public') - return (readPkcs8RSAPublic(der)); - else - return (readPkcs8RSAPrivate(der)); - case '1.2.840.10040.4.1': - if (type === 'public') - return (readPkcs8DSAPublic(der)); - else - return (readPkcs8DSAPrivate(der)); - case '1.2.840.10045.2.1': - if (type === 'public') - return (readPkcs8ECDSAPublic(der)); - else - return (readPkcs8ECDSAPrivate(der)); - default: - throw (new Error('Unknown key type OID ' + oid)); - } -} - -function readPkcs8RSAPublic(der) { - // bit string sequence - der.readSequence(asn1.Ber.BitString); - der.readByte(); - der.readSequence(); - - // modulus - var n = readMPInt(der, 'modulus'); - var e = readMPInt(der, 'exponent'); - - // now, make the key - var key = { - type: 'rsa', - source: der.originalInput, - parts: [ - { name: 'e', data: e }, - { name: 'n', data: n } - ] - }; - - return (new Key(key)); -} - -function readPkcs8RSAPrivate(der) { - der.readSequence(asn1.Ber.OctetString); - der.readSequence(); - - var ver = readMPInt(der, 'version'); - assert.equal(ver[0], 0x0, 'unknown RSA private key version'); - - // modulus then public exponent - var n = readMPInt(der, 'modulus'); - var e = readMPInt(der, 'public exponent'); - var d = readMPInt(der, 'private exponent'); - var p = readMPInt(der, 'prime1'); - var q = readMPInt(der, 'prime2'); - var dmodp = readMPInt(der, 'exponent1'); - var dmodq = readMPInt(der, 'exponent2'); - var iqmp = readMPInt(der, 'iqmp'); - - // now, make the key - var key = { - type: 'rsa', - parts: [ - { name: 'n', data: n }, - { name: 'e', data: e }, - { name: 'd', data: d }, - { name: 'iqmp', data: iqmp }, - { name: 'p', data: p }, - { name: 'q', data: q }, - { name: 'dmodp', data: dmodp }, - { name: 'dmodq', data: dmodq } - ] - }; - - return (new PrivateKey(key)); -} - -function readPkcs8DSAPublic(der) { - der.readSequence(); - - var p = readMPInt(der, 'p'); - var q = readMPInt(der, 'q'); - var g = readMPInt(der, 'g'); - - // bit string sequence - der.readSequence(asn1.Ber.BitString); - der.readByte(); - - var y = readMPInt(der, 'y'); - - // now, make the key - var key = { - type: 'dsa', - parts: [ - { name: 'p', data: p }, - { name: 'q', data: q }, - { name: 'g', data: g }, - { name: 'y', data: y } - ] - }; - - return (new Key(key)); -} - -function readPkcs8DSAPrivate(der) { - der.readSequence(); - - var p = readMPInt(der, 'p'); - var q = readMPInt(der, 'q'); - var g = readMPInt(der, 'g'); - - der.readSequence(asn1.Ber.OctetString); - var x = readMPInt(der, 'x'); - - /* The pkcs#8 format does not include the public key */ - var y = utils.calculateDSAPublic(g, p, x); - - var key = { - type: 'dsa', - parts: [ - { name: 'p', data: p }, - { name: 'q', data: q }, - { name: 'g', data: g }, - { name: 'y', data: y }, - { name: 'x', data: x } - ] - }; - - return (new PrivateKey(key)); -} - -function readECDSACurve(der) { - var curveName, curveNames; - var j, c, cd; - - if (der.peek() === asn1.Ber.OID) { - var oid = der.readOID(); - - curveNames = Object.keys(algs.curves); - for (j = 0; j < curveNames.length; ++j) { - c = curveNames[j]; - cd = algs.curves[c]; - if (cd.pkcs8oid === oid) { - curveName = c; - break; - } - } - - } else { - // ECParameters sequence - der.readSequence(); - var version = der.readString(asn1.Ber.Integer, true); - assert.strictEqual(version[0], 1, 'ECDSA key not version 1'); - - var curve = {}; - - // FieldID sequence - der.readSequence(); - var fieldTypeOid = der.readOID(); - assert.strictEqual(fieldTypeOid, '1.2.840.10045.1.1', - 'ECDSA key is not from a prime-field'); - var p = curve.p = utils.mpNormalize( - der.readString(asn1.Ber.Integer, true)); - /* - * p always starts with a 1 bit, so count the zeros to get its - * real size. - */ - curve.size = p.length * 8 - utils.countZeros(p); - - // Curve sequence - der.readSequence(); - curve.a = utils.mpNormalize( - der.readString(asn1.Ber.OctetString, true)); - curve.b = utils.mpNormalize( - der.readString(asn1.Ber.OctetString, true)); - if (der.peek() === asn1.Ber.BitString) - curve.s = der.readString(asn1.Ber.BitString, true); - - // Combined Gx and Gy - curve.G = der.readString(asn1.Ber.OctetString, true); - assert.strictEqual(curve.G[0], 0x4, - 'uncompressed G is required'); - - curve.n = utils.mpNormalize( - der.readString(asn1.Ber.Integer, true)); - curve.h = utils.mpNormalize( - der.readString(asn1.Ber.Integer, true)); - assert.strictEqual(curve.h[0], 0x1, 'a cofactor=1 curve is ' + - 'required'); - - curveNames = Object.keys(algs.curves); - var ks = Object.keys(curve); - for (j = 0; j < curveNames.length; ++j) { - c = curveNames[j]; - cd = algs.curves[c]; - var equal = true; - for (var i = 0; i < ks.length; ++i) { - var k = ks[i]; - if (cd[k] === undefined) - continue; - if (typeof (cd[k]) === 'object' && - cd[k].equals !== undefined) { - if (!cd[k].equals(curve[k])) { - equal = false; - break; - } - } else if (Buffer.isBuffer(cd[k])) { - if (cd[k].toString('binary') - !== curve[k].toString('binary')) { - equal = false; - break; - } - } else { - if (cd[k] !== curve[k]) { - equal = false; - break; - } - } - } - if (equal) { - curveName = c; - break; - } - } - } - return (curveName); -} - -function readPkcs8ECDSAPrivate(der) { - var curveName = readECDSACurve(der); - assert.string(curveName, 'a known elliptic curve'); - - der.readSequence(asn1.Ber.OctetString); - der.readSequence(); - - var version = readMPInt(der, 'version'); - assert.equal(version[0], 1, 'unknown version of ECDSA key'); - - var d = der.readString(asn1.Ber.OctetString, true); - der.readSequence(0xa1); - - var Q = der.readString(asn1.Ber.BitString, true); - Q = utils.ecNormalize(Q); - - var key = { - type: 'ecdsa', - parts: [ - { name: 'curve', data: new Buffer(curveName) }, - { name: 'Q', data: Q }, - { name: 'd', data: d } - ] - }; - - return (new PrivateKey(key)); -} - -function readPkcs8ECDSAPublic(der) { - var curveName = readECDSACurve(der); - assert.string(curveName, 'a known elliptic curve'); - - var Q = der.readString(asn1.Ber.BitString, true); - Q = utils.ecNormalize(Q); - - var key = { - type: 'ecdsa', - parts: [ - { name: 'curve', data: new Buffer(curveName) }, - { name: 'Q', data: Q } - ] - }; - - return (new Key(key)); -} - -function writePkcs8(der, key) { - der.startSequence(); - - if (PrivateKey.isPrivateKey(key)) { - var sillyInt = new Buffer(1); - sillyInt[0] = 0x0; - der.writeBuffer(sillyInt, asn1.Ber.Integer); - } - - der.startSequence(); - switch (key.type) { - case 'rsa': - der.writeOID('1.2.840.113549.1.1.1'); - if (PrivateKey.isPrivateKey(key)) - writePkcs8RSAPrivate(key, der); - else - writePkcs8RSAPublic(key, der); - break; - case 'dsa': - der.writeOID('1.2.840.10040.4.1'); - if (PrivateKey.isPrivateKey(key)) - writePkcs8DSAPrivate(key, der); - else - writePkcs8DSAPublic(key, der); - break; - case 'ecdsa': - der.writeOID('1.2.840.10045.2.1'); - if (PrivateKey.isPrivateKey(key)) - writePkcs8ECDSAPrivate(key, der); - else - writePkcs8ECDSAPublic(key, der); - break; - default: - throw (new Error('Unsupported key type: ' + key.type)); - } - - der.endSequence(); -} - -function writePkcs8RSAPrivate(key, der) { - der.writeNull(); - der.endSequence(); - - der.startSequence(asn1.Ber.OctetString); - der.startSequence(); - - var version = new Buffer(1); - version[0] = 0; - der.writeBuffer(version, asn1.Ber.Integer); - - der.writeBuffer(key.part.n.data, asn1.Ber.Integer); - der.writeBuffer(key.part.e.data, asn1.Ber.Integer); - der.writeBuffer(key.part.d.data, asn1.Ber.Integer); - der.writeBuffer(key.part.p.data, asn1.Ber.Integer); - der.writeBuffer(key.part.q.data, asn1.Ber.Integer); - if (!key.part.dmodp || !key.part.dmodq) - utils.addRSAMissing(key); - der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer); - der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer); - der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer); - - der.endSequence(); - der.endSequence(); -} - -function writePkcs8RSAPublic(key, der) { - der.writeNull(); - der.endSequence(); - - der.startSequence(asn1.Ber.BitString); - der.writeByte(0x00); - - der.startSequence(); - der.writeBuffer(key.part.n.data, asn1.Ber.Integer); - der.writeBuffer(key.part.e.data, asn1.Ber.Integer); - der.endSequence(); - - der.endSequence(); -} - -function writePkcs8DSAPrivate(key, der) { - der.startSequence(); - der.writeBuffer(key.part.p.data, asn1.Ber.Integer); - der.writeBuffer(key.part.q.data, asn1.Ber.Integer); - der.writeBuffer(key.part.g.data, asn1.Ber.Integer); - der.endSequence(); - - der.endSequence(); - - der.startSequence(asn1.Ber.OctetString); - der.writeBuffer(key.part.x.data, asn1.Ber.Integer); - der.endSequence(); -} - -function writePkcs8DSAPublic(key, der) { - der.startSequence(); - der.writeBuffer(key.part.p.data, asn1.Ber.Integer); - der.writeBuffer(key.part.q.data, asn1.Ber.Integer); - der.writeBuffer(key.part.g.data, asn1.Ber.Integer); - der.endSequence(); - der.endSequence(); - - der.startSequence(asn1.Ber.BitString); - der.writeByte(0x00); - der.writeBuffer(key.part.y.data, asn1.Ber.Integer); - der.endSequence(); -} - -function writeECDSACurve(key, der) { - var curve = algs.curves[key.curve]; - if (curve.pkcs8oid) { - /* This one has a name in pkcs#8, so just write the oid */ - der.writeOID(curve.pkcs8oid); - - } else { - // ECParameters sequence - der.startSequence(); - - var version = new Buffer(1); - version.writeUInt8(1, 0); - der.writeBuffer(version, asn1.Ber.Integer); - - // FieldID sequence - der.startSequence(); - der.writeOID('1.2.840.10045.1.1'); // prime-field - der.writeBuffer(curve.p, asn1.Ber.Integer); - der.endSequence(); - - // Curve sequence - der.startSequence(); - var a = curve.p; - if (a[0] === 0x0) - a = a.slice(1); - der.writeBuffer(a, asn1.Ber.OctetString); - der.writeBuffer(curve.b, asn1.Ber.OctetString); - der.writeBuffer(curve.s, asn1.Ber.BitString); - der.endSequence(); - - der.writeBuffer(curve.G, asn1.Ber.OctetString); - der.writeBuffer(curve.n, asn1.Ber.Integer); - var h = curve.h; - if (!h) { - h = new Buffer(1); - h[0] = 1; - } - der.writeBuffer(h, asn1.Ber.Integer); - - // ECParameters - der.endSequence(); - } -} - -function writePkcs8ECDSAPublic(key, der) { - writeECDSACurve(key, der); - der.endSequence(); - - var Q = utils.ecNormalize(key.part.Q.data, true); - der.writeBuffer(Q, asn1.Ber.BitString); -} - -function writePkcs8ECDSAPrivate(key, der) { - writeECDSACurve(key, der); - der.endSequence(); - - der.startSequence(asn1.Ber.OctetString); - der.startSequence(); - - var version = new Buffer(1); - version[0] = 1; - der.writeBuffer(version, asn1.Ber.Integer); - - der.writeBuffer(key.part.d.data, asn1.Ber.OctetString); - - der.startSequence(0xa1); - var Q = utils.ecNormalize(key.part.Q.data, true); - der.writeBuffer(Q, asn1.Ber.BitString); - der.endSequence(); - - der.endSequence(); - der.endSequence(); -} diff --git a/node_modules/sshpk/lib/formats/rfc4253.js b/node_modules/sshpk/lib/formats/rfc4253.js deleted file mode 100644 index 9d436dd..0000000 --- a/node_modules/sshpk/lib/formats/rfc4253.js +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - read: read.bind(undefined, false, undefined), - readType: read.bind(undefined, false), - write: write, - /* semi-private api, used by sshpk-agent */ - readPartial: read.bind(undefined, true), - - /* shared with ssh format */ - readInternal: read, - keyTypeToAlg: keyTypeToAlg, - algToKeyType: algToKeyType -}; - -var assert = require('assert-plus'); -var algs = require('../algs'); -var utils = require('../utils'); -var Key = require('../key'); -var PrivateKey = require('../private-key'); -var SSHBuffer = require('../ssh-buffer'); - -function algToKeyType(alg) { - assert.string(alg); - if (alg === 'ssh-dss') - return ('dsa'); - else if (alg === 'ssh-rsa') - return ('rsa'); - else if (alg === 'ssh-ed25519') - return ('ed25519'); - else if (alg === 'ssh-curve25519') - return ('curve25519'); - else if (alg.match(/^ecdsa-sha2-/)) - return ('ecdsa'); - else - throw (new Error('Unknown algorithm ' + alg)); -} - -function keyTypeToAlg(key) { - assert.object(key); - if (key.type === 'dsa') - return ('ssh-dss'); - else if (key.type === 'rsa') - return ('ssh-rsa'); - else if (key.type === 'ed25519') - return ('ssh-ed25519'); - else if (key.type === 'curve25519') - return ('ssh-curve25519'); - else if (key.type === 'ecdsa') - return ('ecdsa-sha2-' + key.part.curve.data.toString()); - else - throw (new Error('Unknown key type ' + key.type)); -} - -function read(partial, type, buf, options) { - if (typeof (buf) === 'string') - buf = new Buffer(buf); - assert.buffer(buf, 'buf'); - - var key = {}; - - var parts = key.parts = []; - var sshbuf = new SSHBuffer({buffer: buf}); - - var alg = sshbuf.readString(); - assert.ok(!sshbuf.atEnd(), 'key must have at least one part'); - - key.type = algToKeyType(alg); - - var partCount = algs.info[key.type].parts.length; - if (type && type === 'private') - partCount = algs.privInfo[key.type].parts.length; - - while (!sshbuf.atEnd() && parts.length < partCount) - parts.push(sshbuf.readPart()); - while (!partial && !sshbuf.atEnd()) - parts.push(sshbuf.readPart()); - - assert.ok(parts.length >= 1, - 'key must have at least one part'); - assert.ok(partial || sshbuf.atEnd(), - 'leftover bytes at end of key'); - - var Constructor = Key; - var algInfo = algs.info[key.type]; - if (type === 'private' || algInfo.parts.length !== parts.length) { - algInfo = algs.privInfo[key.type]; - Constructor = PrivateKey; - } - assert.strictEqual(algInfo.parts.length, parts.length); - - if (key.type === 'ecdsa') { - var res = /^ecdsa-sha2-(.+)$/.exec(alg); - assert.ok(res !== null); - assert.strictEqual(res[1], parts[0].data.toString()); - } - - var normalized = true; - for (var i = 0; i < algInfo.parts.length; ++i) { - parts[i].name = algInfo.parts[i]; - if (parts[i].name !== 'curve' && - algInfo.normalize !== false) { - var p = parts[i]; - var nd = utils.mpNormalize(p.data); - if (nd !== p.data) { - p.data = nd; - normalized = false; - } - } - } - - if (normalized) - key._rfc4253Cache = sshbuf.toBuffer(); - - if (partial && typeof (partial) === 'object') { - partial.remainder = sshbuf.remainder(); - partial.consumed = sshbuf._offset; - } - - return (new Constructor(key)); -} - -function write(key, options) { - assert.object(key); - - var alg = keyTypeToAlg(key); - var i; - - var algInfo = algs.info[key.type]; - if (PrivateKey.isPrivateKey(key)) - algInfo = algs.privInfo[key.type]; - var parts = algInfo.parts; - - var buf = new SSHBuffer({}); - - buf.writeString(alg); - - for (i = 0; i < parts.length; ++i) { - var data = key.part[parts[i]].data; - if (algInfo.normalize !== false) - data = utils.mpNormalize(data); - buf.writeBuffer(data); - } - - return (buf.toBuffer()); -} diff --git a/node_modules/sshpk/lib/formats/ssh-private.js b/node_modules/sshpk/lib/formats/ssh-private.js deleted file mode 100644 index 2fcf719..0000000 --- a/node_modules/sshpk/lib/formats/ssh-private.js +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - read: read, - readSSHPrivate: readSSHPrivate, - write: write -}; - -var assert = require('assert-plus'); -var asn1 = require('asn1'); -var algs = require('../algs'); -var utils = require('../utils'); -var crypto = require('crypto'); - -var Key = require('../key'); -var PrivateKey = require('../private-key'); -var pem = require('./pem'); -var rfc4253 = require('./rfc4253'); -var SSHBuffer = require('../ssh-buffer'); -var errors = require('../errors'); - -var bcrypt; - -function read(buf, options) { - return (pem.read(buf, options)); -} - -var MAGIC = 'openssh-key-v1'; - -function readSSHPrivate(type, buf, options) { - buf = new SSHBuffer({buffer: buf}); - - var magic = buf.readCString(); - assert.strictEqual(magic, MAGIC, 'bad magic string'); - - var cipher = buf.readString(); - var kdf = buf.readString(); - var kdfOpts = buf.readBuffer(); - - var nkeys = buf.readInt(); - if (nkeys !== 1) { - throw (new Error('OpenSSH-format key file contains ' + - 'multiple keys: this is unsupported.')); - } - - var pubKey = buf.readBuffer(); - - if (type === 'public') { - assert.ok(buf.atEnd(), 'excess bytes left after key'); - return (rfc4253.read(pubKey)); - } - - var privKeyBlob = buf.readBuffer(); - assert.ok(buf.atEnd(), 'excess bytes left after key'); - - var kdfOptsBuf = new SSHBuffer({ buffer: kdfOpts }); - switch (kdf) { - case 'none': - if (cipher !== 'none') { - throw (new Error('OpenSSH-format key uses KDF "none" ' + - 'but specifies a cipher other than "none"')); - } - break; - case 'bcrypt': - var salt = kdfOptsBuf.readBuffer(); - var rounds = kdfOptsBuf.readInt(); - var cinf = utils.opensshCipherInfo(cipher); - if (bcrypt === undefined) { - bcrypt = require('bcrypt-pbkdf'); - } - - if (typeof (options.passphrase) === 'string') { - options.passphrase = new Buffer(options.passphrase, - 'utf-8'); - } - if (!Buffer.isBuffer(options.passphrase)) { - throw (new errors.KeyEncryptedError( - options.filename, 'OpenSSH')); - } - - var pass = new Uint8Array(options.passphrase); - var salti = new Uint8Array(salt); - /* Use the pbkdf to derive both the key and the IV. */ - var out = new Uint8Array(cinf.keySize + cinf.blockSize); - var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length, - out, out.length, rounds); - if (res !== 0) { - throw (new Error('bcrypt_pbkdf function returned ' + - 'failure, parameters invalid')); - } - out = new Buffer(out); - var ckey = out.slice(0, cinf.keySize); - var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize); - var cipherStream = crypto.createDecipheriv(cinf.opensslName, - ckey, iv); - cipherStream.setAutoPadding(false); - var chunk, chunks = []; - cipherStream.once('error', function (e) { - if (e.toString().indexOf('bad decrypt') !== -1) { - throw (new Error('Incorrect passphrase ' + - 'supplied, could not decrypt key')); - } - throw (e); - }); - cipherStream.write(privKeyBlob); - cipherStream.end(); - while ((chunk = cipherStream.read()) !== null) - chunks.push(chunk); - privKeyBlob = Buffer.concat(chunks); - break; - default: - throw (new Error( - 'OpenSSH-format key uses unknown KDF "' + kdf + '"')); - } - - buf = new SSHBuffer({buffer: privKeyBlob}); - - var checkInt1 = buf.readInt(); - var checkInt2 = buf.readInt(); - if (checkInt1 !== checkInt2) { - throw (new Error('Incorrect passphrase supplied, could not ' + - 'decrypt key')); - } - - var ret = {}; - var key = rfc4253.readInternal(ret, 'private', buf.remainder()); - - buf.skip(ret.consumed); - - var comment = buf.readString(); - key.comment = comment; - - return (key); -} - -function write(key, options) { - var pubKey; - if (PrivateKey.isPrivateKey(key)) - pubKey = key.toPublic(); - else - pubKey = key; - - var cipher = 'none'; - var kdf = 'none'; - var kdfopts = new Buffer(0); - var cinf = { blockSize: 8 }; - var passphrase; - if (options !== undefined) { - passphrase = options.passphrase; - if (typeof (passphrase) === 'string') - passphrase = new Buffer(passphrase, 'utf-8'); - if (passphrase !== undefined) { - assert.buffer(passphrase, 'options.passphrase'); - assert.optionalString(options.cipher, 'options.cipher'); - cipher = options.cipher; - if (cipher === undefined) - cipher = 'aes128-ctr'; - cinf = utils.opensshCipherInfo(cipher); - kdf = 'bcrypt'; - } - } - - var privBuf; - if (PrivateKey.isPrivateKey(key)) { - privBuf = new SSHBuffer({}); - var checkInt = crypto.randomBytes(4).readUInt32BE(0); - privBuf.writeInt(checkInt); - privBuf.writeInt(checkInt); - privBuf.write(key.toBuffer('rfc4253')); - privBuf.writeString(key.comment || ''); - - var n = 1; - while (privBuf._offset % cinf.blockSize !== 0) - privBuf.writeChar(n++); - privBuf = privBuf.toBuffer(); - } - - switch (kdf) { - case 'none': - break; - case 'bcrypt': - var salt = crypto.randomBytes(16); - var rounds = 16; - var kdfssh = new SSHBuffer({}); - kdfssh.writeBuffer(salt); - kdfssh.writeInt(rounds); - kdfopts = kdfssh.toBuffer(); - - if (bcrypt === undefined) { - bcrypt = require('bcrypt-pbkdf'); - } - var pass = new Uint8Array(passphrase); - var salti = new Uint8Array(salt); - /* Use the pbkdf to derive both the key and the IV. */ - var out = new Uint8Array(cinf.keySize + cinf.blockSize); - var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length, - out, out.length, rounds); - if (res !== 0) { - throw (new Error('bcrypt_pbkdf function returned ' + - 'failure, parameters invalid')); - } - out = new Buffer(out); - var ckey = out.slice(0, cinf.keySize); - var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize); - - var cipherStream = crypto.createCipheriv(cinf.opensslName, - ckey, iv); - cipherStream.setAutoPadding(false); - var chunk, chunks = []; - cipherStream.once('error', function (e) { - throw (e); - }); - cipherStream.write(privBuf); - cipherStream.end(); - while ((chunk = cipherStream.read()) !== null) - chunks.push(chunk); - privBuf = Buffer.concat(chunks); - break; - default: - throw (new Error('Unsupported kdf ' + kdf)); - } - - var buf = new SSHBuffer({}); - - buf.writeCString(MAGIC); - buf.writeString(cipher); /* cipher */ - buf.writeString(kdf); /* kdf */ - buf.writeBuffer(kdfopts); /* kdfoptions */ - - buf.writeInt(1); /* nkeys */ - buf.writeBuffer(pubKey.toBuffer('rfc4253')); - - if (privBuf) - buf.writeBuffer(privBuf); - - buf = buf.toBuffer(); - - var header; - if (PrivateKey.isPrivateKey(key)) - header = 'OPENSSH PRIVATE KEY'; - else - header = 'OPENSSH PUBLIC KEY'; - - var tmp = buf.toString('base64'); - var len = tmp.length + (tmp.length / 70) + - 18 + 16 + header.length*2 + 10; - buf = new Buffer(len); - var o = 0; - o += buf.write('-----BEGIN ' + header + '-----\n', o); - for (var i = 0; i < tmp.length; ) { - var limit = i + 70; - if (limit > tmp.length) - limit = tmp.length; - o += buf.write(tmp.slice(i, limit), o); - buf[o++] = 10; - i = limit; - } - o += buf.write('-----END ' + header + '-----\n', o); - - return (buf.slice(0, o)); -} diff --git a/node_modules/sshpk/lib/formats/ssh.js b/node_modules/sshpk/lib/formats/ssh.js deleted file mode 100644 index 655c9ea..0000000 --- a/node_modules/sshpk/lib/formats/ssh.js +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - read: read, - write: write -}; - -var assert = require('assert-plus'); -var rfc4253 = require('./rfc4253'); -var utils = require('../utils'); -var Key = require('../key'); -var PrivateKey = require('../private-key'); - -var sshpriv = require('./ssh-private'); - -/*JSSTYLED*/ -var SSHKEY_RE = /^([a-z0-9-]+)[ \t]+([a-zA-Z0-9+\/]+[=]*)([\n \t]+([^\n]+))?$/; -/*JSSTYLED*/ -var SSHKEY_RE2 = /^([a-z0-9-]+)[ \t]+([a-zA-Z0-9+\/ \t\n]+[=]*)(.*)$/; - -function read(buf, options) { - if (typeof (buf) !== 'string') { - assert.buffer(buf, 'buf'); - buf = buf.toString('ascii'); - } - - var trimmed = buf.trim().replace(/[\\\r]/g, ''); - var m = trimmed.match(SSHKEY_RE); - if (!m) - m = trimmed.match(SSHKEY_RE2); - assert.ok(m, 'key must match regex'); - - var type = rfc4253.algToKeyType(m[1]); - var kbuf = new Buffer(m[2], 'base64'); - - /* - * This is a bit tricky. If we managed to parse the key and locate the - * key comment with the regex, then do a non-partial read and assert - * that we have consumed all bytes. If we couldn't locate the key - * comment, though, there may be whitespace shenanigans going on that - * have conjoined the comment to the rest of the key. We do a partial - * read in this case to try to make the best out of a sorry situation. - */ - var key; - var ret = {}; - if (m[4]) { - try { - key = rfc4253.read(kbuf); - - } catch (e) { - m = trimmed.match(SSHKEY_RE2); - assert.ok(m, 'key must match regex'); - kbuf = new Buffer(m[2], 'base64'); - key = rfc4253.readInternal(ret, 'public', kbuf); - } - } else { - key = rfc4253.readInternal(ret, 'public', kbuf); - } - - assert.strictEqual(type, key.type); - - if (m[4] && m[4].length > 0) { - key.comment = m[4]; - - } else if (ret.consumed) { - /* - * Now the magic: trying to recover the key comment when it's - * gotten conjoined to the key or otherwise shenanigan'd. - * - * Work out how much base64 we used, then drop all non-base64 - * chars from the beginning up to this point in the the string. - * Then offset in this and try to make up for missing = chars. - */ - var data = m[2] + m[3]; - var realOffset = Math.ceil(ret.consumed / 3) * 4; - data = data.slice(0, realOffset - 2). /*JSSTYLED*/ - replace(/[^a-zA-Z0-9+\/=]/g, '') + - data.slice(realOffset - 2); - - var padding = ret.consumed % 3; - if (padding > 0 && - data.slice(realOffset - 1, realOffset) !== '=') - realOffset--; - while (data.slice(realOffset, realOffset + 1) === '=') - realOffset++; - - /* Finally, grab what we think is the comment & clean it up. */ - var trailer = data.slice(realOffset); - trailer = trailer.replace(/[\r\n]/g, ' '). - replace(/^\s+/, ''); - if (trailer.match(/^[a-zA-Z0-9]/)) - key.comment = trailer; - } - - return (key); -} - -function write(key, options) { - assert.object(key); - if (!Key.isKey(key)) - throw (new Error('Must be a public key')); - - var parts = []; - var alg = rfc4253.keyTypeToAlg(key); - parts.push(alg); - - var buf = rfc4253.write(key); - parts.push(buf.toString('base64')); - - if (key.comment) - parts.push(key.comment); - - return (new Buffer(parts.join(' '))); -} diff --git a/node_modules/sshpk/lib/formats/x509-pem.js b/node_modules/sshpk/lib/formats/x509-pem.js deleted file mode 100644 index c59c7d5..0000000 --- a/node_modules/sshpk/lib/formats/x509-pem.js +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2016 Joyent, Inc. - -var x509 = require('./x509'); - -module.exports = { - read: read, - verify: x509.verify, - sign: x509.sign, - write: write -}; - -var assert = require('assert-plus'); -var asn1 = require('asn1'); -var algs = require('../algs'); -var utils = require('../utils'); -var Key = require('../key'); -var PrivateKey = require('../private-key'); -var pem = require('./pem'); -var Identity = require('../identity'); -var Signature = require('../signature'); -var Certificate = require('../certificate'); - -function read(buf, options) { - if (typeof (buf) !== 'string') { - assert.buffer(buf, 'buf'); - buf = buf.toString('ascii'); - } - - var lines = buf.trim().split(/[\r\n]+/g); - - var m = lines[0].match(/*JSSTYLED*/ - /[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/); - assert.ok(m, 'invalid PEM header'); - - var m2 = lines[lines.length - 1].match(/*JSSTYLED*/ - /[-]+[ ]*END CERTIFICATE[ ]*[-]+/); - assert.ok(m2, 'invalid PEM footer'); - - var headers = {}; - while (true) { - lines = lines.slice(1); - m = lines[0].match(/*JSSTYLED*/ - /^([A-Za-z0-9-]+): (.+)$/); - if (!m) - break; - headers[m[1].toLowerCase()] = m[2]; - } - - /* Chop off the first and last lines */ - lines = lines.slice(0, -1).join(''); - buf = new Buffer(lines, 'base64'); - - return (x509.read(buf, options)); -} - -function write(cert, options) { - var dbuf = x509.write(cert, options); - - var header = 'CERTIFICATE'; - var tmp = dbuf.toString('base64'); - var len = tmp.length + (tmp.length / 64) + - 18 + 16 + header.length*2 + 10; - var buf = new Buffer(len); - var o = 0; - o += buf.write('-----BEGIN ' + header + '-----\n', o); - for (var i = 0; i < tmp.length; ) { - var limit = i + 64; - if (limit > tmp.length) - limit = tmp.length; - o += buf.write(tmp.slice(i, limit), o); - buf[o++] = 10; - i = limit; - } - o += buf.write('-----END ' + header + '-----\n', o); - - return (buf.slice(0, o)); -} diff --git a/node_modules/sshpk/lib/formats/x509.js b/node_modules/sshpk/lib/formats/x509.js deleted file mode 100644 index a297540..0000000 --- a/node_modules/sshpk/lib/formats/x509.js +++ /dev/null @@ -1,484 +0,0 @@ -// Copyright 2016 Joyent, Inc. - -module.exports = { - read: read, - verify: verify, - sign: sign, - write: write -}; - -var assert = require('assert-plus'); -var asn1 = require('asn1'); -var algs = require('../algs'); -var utils = require('../utils'); -var Key = require('../key'); -var PrivateKey = require('../private-key'); -var pem = require('./pem'); -var Identity = require('../identity'); -var Signature = require('../signature'); -var Certificate = require('../certificate'); -var pkcs8 = require('./pkcs8'); - -/* - * This file is based on RFC5280 (X.509). - */ - -/* Helper to read in a single mpint */ -function readMPInt(der, nm) { - assert.strictEqual(der.peek(), asn1.Ber.Integer, - nm + ' is not an Integer'); - return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); -} - -function verify(cert, key) { - var sig = cert.signatures.x509; - assert.object(sig, 'x509 signature'); - - var algParts = sig.algo.split('-'); - if (algParts[0] !== key.type) - return (false); - - var blob = sig.cache; - if (blob === undefined) { - var der = new asn1.BerWriter(); - writeTBSCert(cert, der); - blob = der.buffer; - } - - var verifier = key.createVerify(algParts[1]); - verifier.write(blob); - return (verifier.verify(sig.signature)); -} - -function Local(i) { - return (asn1.Ber.Context | asn1.Ber.Constructor | i); -} - -function Context(i) { - return (asn1.Ber.Context | i); -} - -var SIGN_ALGS = { - 'rsa-md5': '1.2.840.113549.1.1.4', - 'rsa-sha1': '1.2.840.113549.1.1.5', - 'rsa-sha256': '1.2.840.113549.1.1.11', - 'rsa-sha384': '1.2.840.113549.1.1.12', - 'rsa-sha512': '1.2.840.113549.1.1.13', - 'dsa-sha1': '1.2.840.10040.4.3', - 'dsa-sha256': '2.16.840.1.101.3.4.3.2', - 'ecdsa-sha1': '1.2.840.10045.4.1', - 'ecdsa-sha256': '1.2.840.10045.4.3.2', - 'ecdsa-sha384': '1.2.840.10045.4.3.3', - 'ecdsa-sha512': '1.2.840.10045.4.3.4' -}; -Object.keys(SIGN_ALGS).forEach(function (k) { - SIGN_ALGS[SIGN_ALGS[k]] = k; -}); -SIGN_ALGS['1.3.14.3.2.3'] = 'rsa-md5'; -SIGN_ALGS['1.3.14.3.2.29'] = 'rsa-sha1'; - -var EXTS = { - 'issuerKeyId': '2.5.29.35', - 'altName': '2.5.29.17' -}; - -function read(buf, options) { - if (typeof (buf) === 'string') { - buf = new Buffer(buf, 'binary'); - } - assert.buffer(buf, 'buf'); - - var der = new asn1.BerReader(buf); - - der.readSequence(); - if (Math.abs(der.length - der.remain) > 1) { - throw (new Error('DER sequence does not contain whole byte ' + - 'stream')); - } - - var tbsStart = der.offset; - der.readSequence(); - var sigOffset = der.offset + der.length; - var tbsEnd = sigOffset; - - if (der.peek() === Local(0)) { - der.readSequence(Local(0)); - var version = der.readInt(); - assert.ok(version <= 3, - 'only x.509 versions up to v3 supported'); - } - - var cert = {}; - cert.signatures = {}; - var sig = (cert.signatures.x509 = {}); - sig.extras = {}; - - cert.serial = readMPInt(der, 'serial'); - - der.readSequence(); - var after = der.offset + der.length; - var certAlgOid = der.readOID(); - var certAlg = SIGN_ALGS[certAlgOid]; - if (certAlg === undefined) - throw (new Error('unknown signature algorithm ' + certAlgOid)); - - der._offset = after; - cert.issuer = Identity.parseAsn1(der); - - der.readSequence(); - cert.validFrom = readDate(der); - cert.validUntil = readDate(der); - - cert.subjects = [Identity.parseAsn1(der)]; - - der.readSequence(); - after = der.offset + der.length; - cert.subjectKey = pkcs8.readPkcs8(undefined, 'public', der); - der._offset = after; - - /* issuerUniqueID */ - if (der.peek() === Local(1)) { - der.readSequence(Local(1)); - sig.extras.issuerUniqueID = - buf.slice(der.offset, der.offset + der.length); - der._offset += der.length; - } - - /* subjectUniqueID */ - if (der.peek() === Local(2)) { - der.readSequence(Local(2)); - sig.extras.subjectUniqueID = - buf.slice(der.offset, der.offset + der.length); - der._offset += der.length; - } - - /* extensions */ - if (der.peek() === Local(3)) { - der.readSequence(Local(3)); - var extEnd = der.offset + der.length; - der.readSequence(); - - while (der.offset < extEnd) - readExtension(cert, buf, der); - - assert.strictEqual(der.offset, extEnd); - } - - assert.strictEqual(der.offset, sigOffset); - - der.readSequence(); - after = der.offset + der.length; - var sigAlgOid = der.readOID(); - var sigAlg = SIGN_ALGS[sigAlgOid]; - if (sigAlg === undefined) - throw (new Error('unknown signature algorithm ' + sigAlgOid)); - der._offset = after; - - var sigData = der.readString(asn1.Ber.BitString, true); - if (sigData[0] === 0) - sigData = sigData.slice(1); - var algParts = sigAlg.split('-'); - - sig.signature = Signature.parse(sigData, algParts[0], 'asn1'); - sig.signature.hashAlgorithm = algParts[1]; - sig.algo = sigAlg; - sig.cache = buf.slice(tbsStart, tbsEnd); - - return (new Certificate(cert)); -} - -function readDate(der) { - if (der.peek() === asn1.Ber.UTCTime) { - return (utcTimeToDate(der.readString(asn1.Ber.UTCTime))); - } else if (der.peek() === asn1.Ber.GeneralizedTime) { - return (gTimeToDate(der.readString(asn1.Ber.GeneralizedTime))); - } else { - throw (new Error('Unsupported date format')); - } -} - -/* RFC5280, section 4.2.1.6 (GeneralName type) */ -var ALTNAME = { - OtherName: Local(0), - RFC822Name: Context(1), - DNSName: Context(2), - X400Address: Local(3), - DirectoryName: Local(4), - EDIPartyName: Local(5), - URI: Context(6), - IPAddress: Context(7), - OID: Context(8) -}; - -function readExtension(cert, buf, der) { - der.readSequence(); - var after = der.offset + der.length; - var extId = der.readOID(); - var id; - var sig = cert.signatures.x509; - sig.extras.exts = []; - - var critical; - if (der.peek() === asn1.Ber.Boolean) - critical = der.readBoolean(); - - switch (extId) { - case (EXTS.altName): - der.readSequence(asn1.Ber.OctetString); - der.readSequence(); - var aeEnd = der.offset + der.length; - while (der.offset < aeEnd) { - switch (der.peek()) { - case ALTNAME.OtherName: - case ALTNAME.EDIPartyName: - der.readSequence(); - der._offset += der.length; - break; - case ALTNAME.OID: - der.readOID(ALTNAME.OID); - break; - case ALTNAME.RFC822Name: - /* RFC822 specifies email addresses */ - var email = der.readString(ALTNAME.RFC822Name); - id = Identity.forEmail(email); - if (!cert.subjects[0].equals(id)) - cert.subjects.push(id); - break; - case ALTNAME.DirectoryName: - der.readSequence(ALTNAME.DirectoryName); - id = Identity.parseAsn1(der); - if (!cert.subjects[0].equals(id)) - cert.subjects.push(id); - break; - case ALTNAME.DNSName: - var host = der.readString( - ALTNAME.DNSName); - id = Identity.forHost(host); - if (!cert.subjects[0].equals(id)) - cert.subjects.push(id); - break; - default: - der.readString(der.peek()); - break; - } - } - sig.extras.exts.push({ oid: extId, critical: critical }); - break; - default: - sig.extras.exts.push({ - oid: extId, - critical: critical, - data: der.readString(asn1.Ber.OctetString, true) - }); - break; - } - - der._offset = after; -} - -var UTCTIME_RE = - /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/; -function utcTimeToDate(t) { - var m = t.match(UTCTIME_RE); - assert.ok(m, 'timestamps must be in UTC'); - var d = new Date(); - - var thisYear = d.getUTCFullYear(); - var century = Math.floor(thisYear / 100) * 100; - - var year = parseInt(m[1], 10); - if (thisYear % 100 < 50 && year >= 60) - year += (century - 1); - else - year += century; - d.setUTCFullYear(year, parseInt(m[2], 10) - 1, parseInt(m[3], 10)); - d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10)); - if (m[6] && m[6].length > 0) - d.setUTCSeconds(parseInt(m[6], 10)); - return (d); -} - -var GTIME_RE = - /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/; -function gTimeToDate(t) { - var m = t.match(GTIME_RE); - assert.ok(m); - var d = new Date(); - - d.setUTCFullYear(parseInt(m[1], 10), parseInt(m[2], 10) - 1, - parseInt(m[3], 10)); - d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10)); - if (m[6] && m[6].length > 0) - d.setUTCSeconds(parseInt(m[6], 10)); - return (d); -} - -function zeroPad(n) { - var s = '' + n; - while (s.length < 2) - s = '0' + s; - return (s); -} - -function dateToUTCTime(d) { - var s = ''; - s += zeroPad(d.getUTCFullYear() % 100); - s += zeroPad(d.getUTCMonth() + 1); - s += zeroPad(d.getUTCDate()); - s += zeroPad(d.getUTCHours()); - s += zeroPad(d.getUTCMinutes()); - s += zeroPad(d.getUTCSeconds()); - s += 'Z'; - return (s); -} - -function sign(cert, key) { - if (cert.signatures.x509 === undefined) - cert.signatures.x509 = {}; - var sig = cert.signatures.x509; - - sig.algo = key.type + '-' + key.defaultHashAlgorithm(); - if (SIGN_ALGS[sig.algo] === undefined) - return (false); - - var der = new asn1.BerWriter(); - writeTBSCert(cert, der); - var blob = der.buffer; - sig.cache = blob; - - var signer = key.createSign(); - signer.write(blob); - cert.signatures.x509.signature = signer.sign(); - - return (true); -} - -function write(cert, options) { - var sig = cert.signatures.x509; - assert.object(sig, 'x509 signature'); - - var der = new asn1.BerWriter(); - der.startSequence(); - if (sig.cache) { - der._ensure(sig.cache.length); - sig.cache.copy(der._buf, der._offset); - der._offset += sig.cache.length; - } else { - writeTBSCert(cert, der); - } - - der.startSequence(); - der.writeOID(SIGN_ALGS[sig.algo]); - if (sig.algo.match(/^rsa-/)) - der.writeNull(); - der.endSequence(); - - var sigData = sig.signature.toBuffer('asn1'); - var data = new Buffer(sigData.length + 1); - data[0] = 0; - sigData.copy(data, 1); - der.writeBuffer(data, asn1.Ber.BitString); - der.endSequence(); - - return (der.buffer); -} - -function writeTBSCert(cert, der) { - var sig = cert.signatures.x509; - assert.object(sig, 'x509 signature'); - - der.startSequence(); - - der.startSequence(Local(0)); - der.writeInt(2); - der.endSequence(); - - der.writeBuffer(utils.mpNormalize(cert.serial), asn1.Ber.Integer); - - der.startSequence(); - der.writeOID(SIGN_ALGS[sig.algo]); - der.endSequence(); - - cert.issuer.toAsn1(der); - - der.startSequence(); - der.writeString(dateToUTCTime(cert.validFrom), asn1.Ber.UTCTime); - der.writeString(dateToUTCTime(cert.validUntil), asn1.Ber.UTCTime); - der.endSequence(); - - var subject = cert.subjects[0]; - var altNames = cert.subjects.slice(1); - subject.toAsn1(der); - - pkcs8.writePkcs8(der, cert.subjectKey); - - if (sig.extras && sig.extras.issuerUniqueID) { - der.writeBuffer(sig.extras.issuerUniqueID, Local(1)); - } - - if (sig.extras && sig.extras.subjectUniqueID) { - der.writeBuffer(sig.extras.subjectUniqueID, Local(2)); - } - - if (altNames.length > 0 || subject.type === 'host' || - (sig.extras && sig.extras.exts)) { - der.startSequence(Local(3)); - der.startSequence(); - - var exts = [ - { oid: EXTS.altName } - ]; - if (sig.extras && sig.extras.exts) - exts = sig.extras.exts; - - for (var i = 0; i < exts.length; ++i) { - der.startSequence(); - der.writeOID(exts[i].oid); - - if (exts[i].critical !== undefined) - der.writeBoolean(exts[i].critical); - - if (exts[i].oid === EXTS.altName) { - der.startSequence(asn1.Ber.OctetString); - der.startSequence(); - if (subject.type === 'host') { - der.writeString(subject.hostname, - Context(2)); - } - for (var j = 0; j < altNames.length; ++j) { - if (altNames[j].type === 'host') { - der.writeString( - altNames[j].hostname, - ALTNAME.DNSName); - } else if (altNames[j].type === - 'email') { - der.writeString( - altNames[j].email, - ALTNAME.RFC822Name); - } else { - /* - * Encode anything else as a - * DN style name for now. - */ - der.startSequence( - ALTNAME.DirectoryName); - altNames[j].toAsn1(der); - der.endSequence(); - } - } - der.endSequence(); - der.endSequence(); - } else { - der.writeBuffer(exts[i].data, - asn1.Ber.OctetString); - } - - der.endSequence(); - } - - der.endSequence(); - der.endSequence(); - } - - der.endSequence(); -} diff --git a/node_modules/sshpk/lib/identity.js b/node_modules/sshpk/lib/identity.js deleted file mode 100644 index b4f5cd7..0000000 --- a/node_modules/sshpk/lib/identity.js +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright 2016 Joyent, Inc. - -module.exports = Identity; - -var assert = require('assert-plus'); -var algs = require('./algs'); -var crypto = require('crypto'); -var Fingerprint = require('./fingerprint'); -var Signature = require('./signature'); -var errs = require('./errors'); -var util = require('util'); -var utils = require('./utils'); -var asn1 = require('asn1'); - -/*JSSTYLED*/ -var DNS_NAME_RE = /^([*]|[a-z0-9][a-z0-9\-]{0,62})(?:\.([*]|[a-z0-9][a-z0-9\-]{0,62}))*$/i; - -var oids = {}; -oids.cn = '2.5.4.3'; -oids.o = '2.5.4.10'; -oids.ou = '2.5.4.11'; -oids.l = '2.5.4.7'; -oids.s = '2.5.4.8'; -oids.c = '2.5.4.6'; -oids.sn = '2.5.4.4'; -oids.dc = '0.9.2342.19200300.100.1.25'; -oids.uid = '0.9.2342.19200300.100.1.1'; -oids.mail = '0.9.2342.19200300.100.1.3'; - -var unoids = {}; -Object.keys(oids).forEach(function (k) { - unoids[oids[k]] = k; -}); - -function Identity(opts) { - var self = this; - assert.object(opts, 'options'); - assert.arrayOfObject(opts.components, 'options.components'); - this.components = opts.components; - this.componentLookup = {}; - this.components.forEach(function (c) { - if (c.name && !c.oid) - c.oid = oids[c.name]; - if (c.oid && !c.name) - c.name = unoids[c.oid]; - if (self.componentLookup[c.name] === undefined) - self.componentLookup[c.name] = []; - self.componentLookup[c.name].push(c); - }); - if (this.componentLookup.cn && this.componentLookup.cn.length > 0) { - this.cn = this.componentLookup.cn[0].value; - } - assert.optionalString(opts.type, 'options.type'); - if (opts.type === undefined) { - if (this.components.length === 1 && - this.componentLookup.cn && - this.componentLookup.cn.length === 1 && - this.componentLookup.cn[0].value.match(DNS_NAME_RE)) { - this.type = 'host'; - this.hostname = this.componentLookup.cn[0].value; - - } else if (this.componentLookup.dc && - this.components.length === this.componentLookup.dc.length) { - this.type = 'host'; - this.hostname = this.componentLookup.dc.map( - function (c) { - return (c.value); - }).join('.'); - - } else if (this.componentLookup.uid && - this.components.length === - this.componentLookup.uid.length) { - this.type = 'user'; - this.uid = this.componentLookup.uid[0].value; - - } else if (this.componentLookup.cn && - this.componentLookup.cn.length === 1 && - this.componentLookup.cn[0].value.match(DNS_NAME_RE)) { - this.type = 'host'; - this.hostname = this.componentLookup.cn[0].value; - - } else if (this.componentLookup.uid && - this.componentLookup.uid.length === 1) { - this.type = 'user'; - this.uid = this.componentLookup.uid[0].value; - - } else if (this.componentLookup.mail && - this.componentLookup.mail.length === 1) { - this.type = 'email'; - this.email = this.componentLookup.mail[0].value; - - } else if (this.componentLookup.cn && - this.componentLookup.cn.length === 1) { - this.type = 'user'; - this.uid = this.componentLookup.cn[0].value; - - } else { - this.type = 'unknown'; - } - } else { - this.type = opts.type; - if (this.type === 'host') - this.hostname = opts.hostname; - else if (this.type === 'user') - this.uid = opts.uid; - else if (this.type === 'email') - this.email = opts.email; - else - throw (new Error('Unknown type ' + this.type)); - } -} - -Identity.prototype.toString = function () { - return (this.components.map(function (c) { - return (c.name.toUpperCase() + '=' + c.value); - }).join(', ')); -}; - -Identity.prototype.toAsn1 = function (der, tag) { - der.startSequence(tag); - this.components.forEach(function (c) { - der.startSequence(asn1.Ber.Constructor | asn1.Ber.Set); - der.startSequence(); - der.writeOID(c.oid); - der.writeString(c.value, asn1.Ber.PrintableString); - der.endSequence(); - der.endSequence(); - }); - der.endSequence(); -}; - -function globMatch(a, b) { - if (a === '**' || b === '**') - return (true); - var aParts = a.split('.'); - var bParts = b.split('.'); - if (aParts.length !== bParts.length) - return (false); - for (var i = 0; i < aParts.length; ++i) { - if (aParts[i] === '*' || bParts[i] === '*') - continue; - if (aParts[i] !== bParts[i]) - return (false); - } - return (true); -} - -Identity.prototype.equals = function (other) { - if (!Identity.isIdentity(other, [1, 0])) - return (false); - if (other.components.length !== this.components.length) - return (false); - for (var i = 0; i < this.components.length; ++i) { - if (this.components[i].oid !== other.components[i].oid) - return (false); - if (!globMatch(this.components[i].value, - other.components[i].value)) { - return (false); - } - } - return (true); -}; - -Identity.forHost = function (hostname) { - assert.string(hostname, 'hostname'); - return (new Identity({ - type: 'host', - hostname: hostname, - components: [ { name: 'cn', value: hostname } ] - })); -}; - -Identity.forUser = function (uid) { - assert.string(uid, 'uid'); - return (new Identity({ - type: 'user', - uid: uid, - components: [ { name: 'uid', value: uid } ] - })); -}; - -Identity.forEmail = function (email) { - assert.string(email, 'email'); - return (new Identity({ - type: 'email', - email: email, - components: [ { name: 'mail', value: email } ] - })); -}; - -Identity.parseDN = function (dn) { - assert.string(dn, 'dn'); - var parts = dn.split(','); - var cmps = parts.map(function (c) { - c = c.trim(); - var eqPos = c.indexOf('='); - var name = c.slice(0, eqPos).toLowerCase(); - var value = c.slice(eqPos + 1); - return ({ name: name, value: value }); - }); - return (new Identity({ components: cmps })); -}; - -Identity.parseAsn1 = function (der, top) { - var components = []; - der.readSequence(top); - var end = der.offset + der.length; - while (der.offset < end) { - der.readSequence(asn1.Ber.Constructor | asn1.Ber.Set); - var after = der.offset + der.length; - der.readSequence(); - var oid = der.readOID(); - var type = der.peek(); - var value; - switch (type) { - case asn1.Ber.PrintableString: - case asn1.Ber.IA5String: - case asn1.Ber.OctetString: - case asn1.Ber.T61String: - value = der.readString(type); - break; - case asn1.Ber.Utf8String: - value = der.readString(type, true); - value = value.toString('utf8'); - break; - case asn1.Ber.CharacterString: - case asn1.Ber.BMPString: - value = der.readString(type, true); - value = value.toString('utf16le'); - break; - default: - throw (new Error('Unknown asn1 type ' + type)); - } - components.push({ oid: oid, value: value }); - der._offset = after; - } - der._offset = end; - return (new Identity({ - components: components - })); -}; - -Identity.isIdentity = function (obj, ver) { - return (utils.isCompatible(obj, Identity, ver)); -}; - -/* - * API versions for Identity: - * [1,0] -- initial ver - */ -Identity.prototype._sshpkApiVersion = [1, 0]; - -Identity._oldVersionDetect = function (obj) { - return ([1, 0]); -}; diff --git a/node_modules/sshpk/lib/index.js b/node_modules/sshpk/lib/index.js deleted file mode 100644 index 96a1384..0000000 --- a/node_modules/sshpk/lib/index.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -var Key = require('./key'); -var Fingerprint = require('./fingerprint'); -var Signature = require('./signature'); -var PrivateKey = require('./private-key'); -var Certificate = require('./certificate'); -var Identity = require('./identity'); -var errs = require('./errors'); - -module.exports = { - /* top-level classes */ - Key: Key, - parseKey: Key.parse, - Fingerprint: Fingerprint, - parseFingerprint: Fingerprint.parse, - Signature: Signature, - parseSignature: Signature.parse, - PrivateKey: PrivateKey, - parsePrivateKey: PrivateKey.parse, - Certificate: Certificate, - parseCertificate: Certificate.parse, - createSelfSignedCertificate: Certificate.createSelfSigned, - createCertificate: Certificate.create, - Identity: Identity, - identityFromDN: Identity.parseDN, - identityForHost: Identity.forHost, - identityForUser: Identity.forUser, - identityForEmail: Identity.forEmail, - - /* errors */ - FingerprintFormatError: errs.FingerprintFormatError, - InvalidAlgorithmError: errs.InvalidAlgorithmError, - KeyParseError: errs.KeyParseError, - SignatureParseError: errs.SignatureParseError, - KeyEncryptedError: errs.KeyEncryptedError, - CertificateParseError: errs.CertificateParseError -}; diff --git a/node_modules/sshpk/lib/key.js b/node_modules/sshpk/lib/key.js deleted file mode 100644 index ff5c363..0000000 --- a/node_modules/sshpk/lib/key.js +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = Key; - -var assert = require('assert-plus'); -var algs = require('./algs'); -var crypto = require('crypto'); -var Fingerprint = require('./fingerprint'); -var Signature = require('./signature'); -var DiffieHellman = require('./dhe'); -var errs = require('./errors'); -var utils = require('./utils'); -var PrivateKey = require('./private-key'); -var edCompat; - -try { - edCompat = require('./ed-compat'); -} catch (e) { - /* Just continue through, and bail out if we try to use it. */ -} - -var InvalidAlgorithmError = errs.InvalidAlgorithmError; -var KeyParseError = errs.KeyParseError; - -var formats = {}; -formats['auto'] = require('./formats/auto'); -formats['pem'] = require('./formats/pem'); -formats['pkcs1'] = require('./formats/pkcs1'); -formats['pkcs8'] = require('./formats/pkcs8'); -formats['rfc4253'] = require('./formats/rfc4253'); -formats['ssh'] = require('./formats/ssh'); -formats['ssh-private'] = require('./formats/ssh-private'); -formats['openssh'] = formats['ssh-private']; - -function Key(opts) { - assert.object(opts, 'options'); - assert.arrayOfObject(opts.parts, 'options.parts'); - assert.string(opts.type, 'options.type'); - assert.optionalString(opts.comment, 'options.comment'); - - var algInfo = algs.info[opts.type]; - if (typeof (algInfo) !== 'object') - throw (new InvalidAlgorithmError(opts.type)); - - var partLookup = {}; - for (var i = 0; i < opts.parts.length; ++i) { - var part = opts.parts[i]; - partLookup[part.name] = part; - } - - this.type = opts.type; - this.parts = opts.parts; - this.part = partLookup; - this.comment = undefined; - this.source = opts.source; - - /* for speeding up hashing/fingerprint operations */ - this._rfc4253Cache = opts._rfc4253Cache; - this._hashCache = {}; - - var sz; - this.curve = undefined; - if (this.type === 'ecdsa') { - var curve = this.part.curve.data.toString(); - this.curve = curve; - sz = algs.curves[curve].size; - } else if (this.type === 'ed25519') { - sz = 256; - this.curve = 'curve25519'; - } else { - var szPart = this.part[algInfo.sizePart]; - sz = szPart.data.length; - sz = sz * 8 - utils.countZeros(szPart.data); - } - this.size = sz; -} - -Key.formats = formats; - -Key.prototype.toBuffer = function (format, options) { - if (format === undefined) - format = 'ssh'; - assert.string(format, 'format'); - assert.object(formats[format], 'formats[format]'); - assert.optionalObject(options, 'options'); - - if (format === 'rfc4253') { - if (this._rfc4253Cache === undefined) - this._rfc4253Cache = formats['rfc4253'].write(this); - return (this._rfc4253Cache); - } - - return (formats[format].write(this, options)); -}; - -Key.prototype.toString = function (format, options) { - return (this.toBuffer(format, options).toString()); -}; - -Key.prototype.hash = function (algo) { - assert.string(algo, 'algorithm'); - algo = algo.toLowerCase(); - if (algs.hashAlgs[algo] === undefined) - throw (new InvalidAlgorithmError(algo)); - - if (this._hashCache[algo]) - return (this._hashCache[algo]); - - var hash = crypto.createHash(algo). - update(this.toBuffer('rfc4253')).digest(); - this._hashCache[algo] = hash; - return (hash); -}; - -Key.prototype.fingerprint = function (algo) { - if (algo === undefined) - algo = 'sha256'; - assert.string(algo, 'algorithm'); - var opts = { - type: 'key', - hash: this.hash(algo), - algorithm: algo - }; - return (new Fingerprint(opts)); -}; - -Key.prototype.defaultHashAlgorithm = function () { - var hashAlgo = 'sha1'; - if (this.type === 'rsa') - hashAlgo = 'sha256'; - if (this.type === 'dsa' && this.size > 1024) - hashAlgo = 'sha256'; - if (this.type === 'ed25519') - hashAlgo = 'sha512'; - if (this.type === 'ecdsa') { - if (this.size <= 256) - hashAlgo = 'sha256'; - else if (this.size <= 384) - hashAlgo = 'sha384'; - else - hashAlgo = 'sha512'; - } - return (hashAlgo); -}; - -Key.prototype.createVerify = function (hashAlgo) { - if (hashAlgo === undefined) - hashAlgo = this.defaultHashAlgorithm(); - assert.string(hashAlgo, 'hash algorithm'); - - /* ED25519 is not supported by OpenSSL, use a javascript impl. */ - if (this.type === 'ed25519' && edCompat !== undefined) - return (new edCompat.Verifier(this, hashAlgo)); - if (this.type === 'curve25519') - throw (new Error('Curve25519 keys are not suitable for ' + - 'signing or verification')); - - var v, nm, err; - try { - nm = hashAlgo.toUpperCase(); - v = crypto.createVerify(nm); - } catch (e) { - err = e; - } - if (v === undefined || (err instanceof Error && - err.message.match(/Unknown message digest/))) { - nm = 'RSA-'; - nm += hashAlgo.toUpperCase(); - v = crypto.createVerify(nm); - } - assert.ok(v, 'failed to create verifier'); - var oldVerify = v.verify.bind(v); - var key = this.toBuffer('pkcs8'); - var self = this; - v.verify = function (signature, fmt) { - if (Signature.isSignature(signature, [2, 0])) { - if (signature.type !== self.type) - return (false); - if (signature.hashAlgorithm && - signature.hashAlgorithm !== hashAlgo) - return (false); - return (oldVerify(key, signature.toBuffer('asn1'))); - - } else if (typeof (signature) === 'string' || - Buffer.isBuffer(signature)) { - return (oldVerify(key, signature, fmt)); - - /* - * Avoid doing this on valid arguments, walking the prototype - * chain can be quite slow. - */ - } else if (Signature.isSignature(signature, [1, 0])) { - throw (new Error('signature was created by too old ' + - 'a version of sshpk and cannot be verified')); - - } else { - throw (new TypeError('signature must be a string, ' + - 'Buffer, or Signature object')); - } - }; - return (v); -}; - -Key.prototype.createDiffieHellman = function () { - if (this.type === 'rsa') - throw (new Error('RSA keys do not support Diffie-Hellman')); - - return (new DiffieHellman(this)); -}; -Key.prototype.createDH = Key.prototype.createDiffieHellman; - -Key.parse = function (data, format, options) { - if (typeof (data) !== 'string') - assert.buffer(data, 'data'); - if (format === undefined) - format = 'auto'; - assert.string(format, 'format'); - if (typeof (options) === 'string') - options = { filename: options }; - assert.optionalObject(options, 'options'); - if (options === undefined) - options = {}; - assert.optionalString(options.filename, 'options.filename'); - if (options.filename === undefined) - options.filename = '(unnamed)'; - - assert.object(formats[format], 'formats[format]'); - - try { - var k = formats[format].read(data, options); - if (k instanceof PrivateKey) - k = k.toPublic(); - if (!k.comment) - k.comment = options.filename; - return (k); - } catch (e) { - if (e.name === 'KeyEncryptedError') - throw (e); - throw (new KeyParseError(options.filename, format, e)); - } -}; - -Key.isKey = function (obj, ver) { - return (utils.isCompatible(obj, Key, ver)); -}; - -/* - * API versions for Key: - * [1,0] -- initial ver, may take Signature for createVerify or may not - * [1,1] -- added pkcs1, pkcs8 formats - * [1,2] -- added auto, ssh-private, openssh formats - * [1,3] -- added defaultHashAlgorithm - * [1,4] -- added ed support, createDH - * [1,5] -- first explicitly tagged version - */ -Key.prototype._sshpkApiVersion = [1, 5]; - -Key._oldVersionDetect = function (obj) { - assert.func(obj.toBuffer); - assert.func(obj.fingerprint); - if (obj.createDH) - return ([1, 4]); - if (obj.defaultHashAlgorithm) - return ([1, 3]); - if (obj.formats['auto']) - return ([1, 2]); - if (obj.formats['pkcs1']) - return ([1, 1]); - return ([1, 0]); -}; diff --git a/node_modules/sshpk/lib/private-key.js b/node_modules/sshpk/lib/private-key.js deleted file mode 100644 index f80d939..0000000 --- a/node_modules/sshpk/lib/private-key.js +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = PrivateKey; - -var assert = require('assert-plus'); -var algs = require('./algs'); -var crypto = require('crypto'); -var Fingerprint = require('./fingerprint'); -var Signature = require('./signature'); -var errs = require('./errors'); -var util = require('util'); -var utils = require('./utils'); -var edCompat; -var ed; - -try { - edCompat = require('./ed-compat'); -} catch (e) { - /* Just continue through, and bail out if we try to use it. */ -} - -var Key = require('./key'); - -var InvalidAlgorithmError = errs.InvalidAlgorithmError; -var KeyParseError = errs.KeyParseError; -var KeyEncryptedError = errs.KeyEncryptedError; - -var formats = {}; -formats['auto'] = require('./formats/auto'); -formats['pem'] = require('./formats/pem'); -formats['pkcs1'] = require('./formats/pkcs1'); -formats['pkcs8'] = require('./formats/pkcs8'); -formats['rfc4253'] = require('./formats/rfc4253'); -formats['ssh-private'] = require('./formats/ssh-private'); -formats['openssh'] = formats['ssh-private']; -formats['ssh'] = formats['ssh-private']; - -function PrivateKey(opts) { - assert.object(opts, 'options'); - Key.call(this, opts); - - this._pubCache = undefined; -} -util.inherits(PrivateKey, Key); - -PrivateKey.formats = formats; - -PrivateKey.prototype.toBuffer = function (format, options) { - if (format === undefined) - format = 'pkcs1'; - assert.string(format, 'format'); - assert.object(formats[format], 'formats[format]'); - assert.optionalObject(options, 'options'); - - return (formats[format].write(this, options)); -}; - -PrivateKey.prototype.hash = function (algo) { - return (this.toPublic().hash(algo)); -}; - -PrivateKey.prototype.toPublic = function () { - if (this._pubCache) - return (this._pubCache); - - var algInfo = algs.info[this.type]; - var pubParts = []; - for (var i = 0; i < algInfo.parts.length; ++i) { - var p = algInfo.parts[i]; - pubParts.push(this.part[p]); - } - - this._pubCache = new Key({ - type: this.type, - source: this, - parts: pubParts - }); - if (this.comment) - this._pubCache.comment = this.comment; - return (this._pubCache); -}; - -PrivateKey.prototype.derive = function (newType, newSize) { - assert.string(newType, 'type'); - assert.optionalNumber(newSize, 'size'); - var priv, pub; - - if (this.type === 'ed25519' && newType === 'curve25519') { - if (ed === undefined) - ed = require('jodid25519'); - - priv = this.part.r.data; - if (priv[0] === 0x00) - priv = priv.slice(1); - priv = priv.slice(0, 32); - - pub = ed.dh.publicKey(priv); - priv = utils.mpNormalize(Buffer.concat([priv, pub])); - - return (new PrivateKey({ - type: 'curve25519', - parts: [ - { name: 'R', data: utils.mpNormalize(pub) }, - { name: 'r', data: priv } - ] - })); - } else if (this.type === 'curve25519' && newType === 'ed25519') { - if (ed === undefined) - ed = require('jodid25519'); - - priv = this.part.r.data; - if (priv[0] === 0x00) - priv = priv.slice(1); - priv = priv.slice(0, 32); - - pub = ed.eddsa.publicKey(priv.toString('binary')); - pub = new Buffer(pub, 'binary'); - - priv = utils.mpNormalize(Buffer.concat([priv, pub])); - - return (new PrivateKey({ - type: 'ed25519', - parts: [ - { name: 'R', data: utils.mpNormalize(pub) }, - { name: 'r', data: priv } - ] - })); - } - throw (new Error('Key derivation not supported from ' + this.type + - ' to ' + newType)); -}; - -PrivateKey.prototype.createVerify = function (hashAlgo) { - return (this.toPublic().createVerify(hashAlgo)); -}; - -PrivateKey.prototype.createSign = function (hashAlgo) { - if (hashAlgo === undefined) - hashAlgo = this.defaultHashAlgorithm(); - assert.string(hashAlgo, 'hash algorithm'); - - /* ED25519 is not supported by OpenSSL, use a javascript impl. */ - if (this.type === 'ed25519' && edCompat !== undefined) - return (new edCompat.Signer(this, hashAlgo)); - if (this.type === 'curve25519') - throw (new Error('Curve25519 keys are not suitable for ' + - 'signing or verification')); - - var v, nm, err; - try { - nm = hashAlgo.toUpperCase(); - v = crypto.createSign(nm); - } catch (e) { - err = e; - } - if (v === undefined || (err instanceof Error && - err.message.match(/Unknown message digest/))) { - nm = 'RSA-'; - nm += hashAlgo.toUpperCase(); - v = crypto.createSign(nm); - } - assert.ok(v, 'failed to create verifier'); - var oldSign = v.sign.bind(v); - var key = this.toBuffer('pkcs1'); - var type = this.type; - v.sign = function () { - var sig = oldSign(key); - if (typeof (sig) === 'string') - sig = new Buffer(sig, 'binary'); - sig = Signature.parse(sig, type, 'asn1'); - sig.hashAlgorithm = hashAlgo; - return (sig); - }; - return (v); -}; - -PrivateKey.parse = function (data, format, options) { - if (typeof (data) !== 'string') - assert.buffer(data, 'data'); - if (format === undefined) - format = 'auto'; - assert.string(format, 'format'); - if (typeof (options) === 'string') - options = { filename: options }; - assert.optionalObject(options, 'options'); - if (options === undefined) - options = {}; - assert.optionalString(options.filename, 'options.filename'); - if (options.filename === undefined) - options.filename = '(unnamed)'; - - assert.object(formats[format], 'formats[format]'); - - try { - var k = formats[format].read(data, options); - assert.ok(k instanceof PrivateKey, 'key is not a private key'); - if (!k.comment) - k.comment = options.filename; - return (k); - } catch (e) { - if (e.name === 'KeyEncryptedError') - throw (e); - throw (new KeyParseError(options.filename, format, e)); - } -}; - -PrivateKey.isPrivateKey = function (obj, ver) { - return (utils.isCompatible(obj, PrivateKey, ver)); -}; - -/* - * API versions for PrivateKey: - * [1,0] -- initial ver - * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats - * [1,2] -- added defaultHashAlgorithm - * [1,3] -- added derive, ed, createDH - * [1,4] -- first tagged version - */ -PrivateKey.prototype._sshpkApiVersion = [1, 4]; - -PrivateKey._oldVersionDetect = function (obj) { - assert.func(obj.toPublic); - assert.func(obj.createSign); - if (obj.derive) - return ([1, 3]); - if (obj.defaultHashAlgorithm) - return ([1, 2]); - if (obj.formats['auto']) - return ([1, 1]); - return ([1, 0]); -}; diff --git a/node_modules/sshpk/lib/signature.js b/node_modules/sshpk/lib/signature.js deleted file mode 100644 index 964f55c..0000000 --- a/node_modules/sshpk/lib/signature.js +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = Signature; - -var assert = require('assert-plus'); -var algs = require('./algs'); -var crypto = require('crypto'); -var errs = require('./errors'); -var utils = require('./utils'); -var asn1 = require('asn1'); -var SSHBuffer = require('./ssh-buffer'); - -var InvalidAlgorithmError = errs.InvalidAlgorithmError; -var SignatureParseError = errs.SignatureParseError; - -function Signature(opts) { - assert.object(opts, 'options'); - assert.arrayOfObject(opts.parts, 'options.parts'); - assert.string(opts.type, 'options.type'); - - var partLookup = {}; - for (var i = 0; i < opts.parts.length; ++i) { - var part = opts.parts[i]; - partLookup[part.name] = part; - } - - this.type = opts.type; - this.hashAlgorithm = opts.hashAlgo; - this.parts = opts.parts; - this.part = partLookup; -} - -Signature.prototype.toBuffer = function (format) { - if (format === undefined) - format = 'asn1'; - assert.string(format, 'format'); - - var buf; - - switch (this.type) { - case 'rsa': - case 'ed25519': - if (format === 'ssh') { - buf = new SSHBuffer({}); - buf.writeString('ssh-' + this.type); - buf.writePart(this.part.sig); - return (buf.toBuffer()); - } else { - return (this.part.sig.data); - } - - case 'dsa': - case 'ecdsa': - var r, s; - if (format === 'asn1') { - var der = new asn1.BerWriter(); - der.startSequence(); - r = utils.mpNormalize(this.part.r.data); - s = utils.mpNormalize(this.part.s.data); - der.writeBuffer(r, asn1.Ber.Integer); - der.writeBuffer(s, asn1.Ber.Integer); - der.endSequence(); - return (der.buffer); - } else if (format === 'ssh' && this.type === 'dsa') { - buf = new SSHBuffer({}); - buf.writeString('ssh-dss'); - r = this.part.r.data; - if (r.length > 20 && r[0] === 0x00) - r = r.slice(1); - s = this.part.s.data; - if (s.length > 20 && s[0] === 0x00) - s = s.slice(1); - if ((this.hashAlgorithm && - this.hashAlgorithm !== 'sha1') || - r.length + s.length !== 40) { - throw (new Error('OpenSSH only supports ' + - 'DSA signatures with SHA1 hash')); - } - buf.writeBuffer(Buffer.concat([r, s])); - return (buf.toBuffer()); - } else if (format === 'ssh' && this.type === 'ecdsa') { - var inner = new SSHBuffer({}); - r = this.part.r.data; - inner.writeBuffer(r); - inner.writePart(this.part.s); - - buf = new SSHBuffer({}); - /* XXX: find a more proper way to do this? */ - var curve; - if (r[0] === 0x00) - r = r.slice(1); - var sz = r.length * 8; - if (sz === 256) - curve = 'nistp256'; - else if (sz === 384) - curve = 'nistp384'; - else if (sz === 528) - curve = 'nistp521'; - buf.writeString('ecdsa-sha2-' + curve); - buf.writeBuffer(inner.toBuffer()); - return (buf.toBuffer()); - } - throw (new Error('Invalid signature format')); - default: - throw (new Error('Invalid signature data')); - } -}; - -Signature.prototype.toString = function (format) { - assert.optionalString(format, 'format'); - return (this.toBuffer(format).toString('base64')); -}; - -Signature.parse = function (data, type, format) { - if (typeof (data) === 'string') - data = new Buffer(data, 'base64'); - assert.buffer(data, 'data'); - assert.string(format, 'format'); - assert.string(type, 'type'); - - var opts = {}; - opts.type = type.toLowerCase(); - opts.parts = []; - - try { - assert.ok(data.length > 0, 'signature must not be empty'); - switch (opts.type) { - case 'rsa': - return (parseOneNum(data, type, format, opts, - 'ssh-rsa')); - case 'ed25519': - return (parseOneNum(data, type, format, opts, - 'ssh-ed25519')); - - case 'dsa': - case 'ecdsa': - if (format === 'asn1') - return (parseDSAasn1(data, type, format, opts)); - else if (opts.type === 'dsa') - return (parseDSA(data, type, format, opts)); - else - return (parseECDSA(data, type, format, opts)); - - default: - throw (new InvalidAlgorithmError(type)); - } - - } catch (e) { - if (e instanceof InvalidAlgorithmError) - throw (e); - throw (new SignatureParseError(type, format, e)); - } -}; - -function parseOneNum(data, type, format, opts, headType) { - if (format === 'ssh') { - try { - var buf = new SSHBuffer({buffer: data}); - var head = buf.readString(); - } catch (e) { - /* fall through */ - } - if (head === headType) { - var sig = buf.readPart(); - assert.ok(buf.atEnd(), 'extra trailing bytes'); - sig.name = 'sig'; - opts.parts.push(sig); - return (new Signature(opts)); - } - } - opts.parts.push({name: 'sig', data: data}); - return (new Signature(opts)); -} - -function parseDSAasn1(data, type, format, opts) { - var der = new asn1.BerReader(data); - der.readSequence(); - var r = der.readString(asn1.Ber.Integer, true); - var s = der.readString(asn1.Ber.Integer, true); - - opts.parts.push({name: 'r', data: utils.mpNormalize(r)}); - opts.parts.push({name: 's', data: utils.mpNormalize(s)}); - - return (new Signature(opts)); -} - -function parseDSA(data, type, format, opts) { - if (data.length != 40) { - var buf = new SSHBuffer({buffer: data}); - var d = buf.readBuffer(); - if (d.toString('ascii') === 'ssh-dss') - d = buf.readBuffer(); - assert.ok(buf.atEnd(), 'extra trailing bytes'); - assert.strictEqual(d.length, 40, 'invalid inner length'); - data = d; - } - opts.parts.push({name: 'r', data: data.slice(0, 20)}); - opts.parts.push({name: 's', data: data.slice(20, 40)}); - return (new Signature(opts)); -} - -function parseECDSA(data, type, format, opts) { - var buf = new SSHBuffer({buffer: data}); - - var r, s; - var inner = buf.readBuffer(); - if (inner.toString('ascii').match(/^ecdsa-/)) { - inner = buf.readBuffer(); - assert.ok(buf.atEnd(), 'extra trailing bytes on outer'); - buf = new SSHBuffer({buffer: inner}); - r = buf.readPart(); - } else { - r = {data: inner}; - } - - s = buf.readPart(); - assert.ok(buf.atEnd(), 'extra trailing bytes'); - - r.name = 'r'; - s.name = 's'; - - opts.parts.push(r); - opts.parts.push(s); - return (new Signature(opts)); -} - -Signature.isSignature = function (obj, ver) { - return (utils.isCompatible(obj, Signature, ver)); -}; - -/* - * API versions for Signature: - * [1,0] -- initial ver - * [2,0] -- support for rsa in full ssh format, compat with sshpk-agent - * hashAlgorithm property - * [2,1] -- first tagged version - */ -Signature.prototype._sshpkApiVersion = [2, 1]; - -Signature._oldVersionDetect = function (obj) { - assert.func(obj.toBuffer); - if (obj.hasOwnProperty('hashAlgorithm')) - return ([2, 0]); - return ([1, 0]); -}; diff --git a/node_modules/sshpk/lib/ssh-buffer.js b/node_modules/sshpk/lib/ssh-buffer.js deleted file mode 100644 index 8fc2cb8..0000000 --- a/node_modules/sshpk/lib/ssh-buffer.js +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = SSHBuffer; - -var assert = require('assert-plus'); - -function SSHBuffer(opts) { - assert.object(opts, 'options'); - if (opts.buffer !== undefined) - assert.buffer(opts.buffer, 'options.buffer'); - - this._size = opts.buffer ? opts.buffer.length : 1024; - this._buffer = opts.buffer || (new Buffer(this._size)); - this._offset = 0; -} - -SSHBuffer.prototype.toBuffer = function () { - return (this._buffer.slice(0, this._offset)); -}; - -SSHBuffer.prototype.atEnd = function () { - return (this._offset >= this._buffer.length); -}; - -SSHBuffer.prototype.remainder = function () { - return (this._buffer.slice(this._offset)); -}; - -SSHBuffer.prototype.skip = function (n) { - this._offset += n; -}; - -SSHBuffer.prototype.expand = function () { - this._size *= 2; - var buf = new Buffer(this._size); - this._buffer.copy(buf, 0); - this._buffer = buf; -}; - -SSHBuffer.prototype.readPart = function () { - return ({data: this.readBuffer()}); -}; - -SSHBuffer.prototype.readBuffer = function () { - var len = this._buffer.readUInt32BE(this._offset); - this._offset += 4; - assert.ok(this._offset + len <= this._buffer.length, - 'length out of bounds at +0x' + this._offset.toString(16) + - ' (data truncated?)'); - var buf = this._buffer.slice(this._offset, this._offset + len); - this._offset += len; - return (buf); -}; - -SSHBuffer.prototype.readString = function () { - return (this.readBuffer().toString()); -}; - -SSHBuffer.prototype.readCString = function () { - var offset = this._offset; - while (offset < this._buffer.length && - this._buffer[offset] !== 0x00) - offset++; - assert.ok(offset < this._buffer.length, 'c string does not terminate'); - var str = this._buffer.slice(this._offset, offset).toString(); - this._offset = offset + 1; - return (str); -}; - -SSHBuffer.prototype.readInt = function () { - var v = this._buffer.readUInt32BE(this._offset); - this._offset += 4; - return (v); -}; - -SSHBuffer.prototype.readInt64 = function () { - assert.ok(this._offset + 8 < this._buffer.length, - 'buffer not long enough to read Int64'); - var v = this._buffer.slice(this._offset, this._offset + 8); - this._offset += 8; - return (v); -}; - -SSHBuffer.prototype.readChar = function () { - var v = this._buffer[this._offset++]; - return (v); -}; - -SSHBuffer.prototype.writeBuffer = function (buf) { - while (this._offset + 4 + buf.length > this._size) - this.expand(); - this._buffer.writeUInt32BE(buf.length, this._offset); - this._offset += 4; - buf.copy(this._buffer, this._offset); - this._offset += buf.length; -}; - -SSHBuffer.prototype.writeString = function (str) { - this.writeBuffer(new Buffer(str, 'utf8')); -}; - -SSHBuffer.prototype.writeCString = function (str) { - while (this._offset + 1 + str.length > this._size) - this.expand(); - this._buffer.write(str, this._offset); - this._offset += str.length; - this._buffer[this._offset++] = 0; -}; - -SSHBuffer.prototype.writeInt = function (v) { - while (this._offset + 4 > this._size) - this.expand(); - this._buffer.writeUInt32BE(v, this._offset); - this._offset += 4; -}; - -SSHBuffer.prototype.writeInt64 = function (v) { - assert.buffer(v, 'value'); - if (v.length > 8) { - var lead = v.slice(0, v.length - 8); - for (var i = 0; i < lead.length; ++i) { - assert.strictEqual(lead[i], 0, - 'must fit in 64 bits of precision'); - } - v = v.slice(v.length - 8, v.length); - } - while (this._offset + 8 > this._size) - this.expand(); - v.copy(this._buffer, this._offset); - this._offset += 8; -}; - -SSHBuffer.prototype.writeChar = function (v) { - while (this._offset + 1 > this._size) - this.expand(); - this._buffer[this._offset++] = v; -}; - -SSHBuffer.prototype.writePart = function (p) { - this.writeBuffer(p.data); -}; - -SSHBuffer.prototype.write = function (buf) { - while (this._offset + buf.length > this._size) - this.expand(); - buf.copy(this._buffer, this._offset); - this._offset += buf.length; -}; diff --git a/node_modules/sshpk/lib/utils.js b/node_modules/sshpk/lib/utils.js deleted file mode 100644 index 466634c..0000000 --- a/node_modules/sshpk/lib/utils.js +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -module.exports = { - bufferSplit: bufferSplit, - addRSAMissing: addRSAMissing, - calculateDSAPublic: calculateDSAPublic, - mpNormalize: mpNormalize, - ecNormalize: ecNormalize, - countZeros: countZeros, - assertCompatible: assertCompatible, - isCompatible: isCompatible, - opensslKeyDeriv: opensslKeyDeriv, - opensshCipherInfo: opensshCipherInfo -}; - -var assert = require('assert-plus'); -var PrivateKey = require('./private-key'); -var crypto = require('crypto'); - -var MAX_CLASS_DEPTH = 3; - -function isCompatible(obj, klass, needVer) { - if (obj === null || typeof (obj) !== 'object') - return (false); - if (needVer === undefined) - needVer = klass.prototype._sshpkApiVersion; - if (obj instanceof klass && - klass.prototype._sshpkApiVersion[0] == needVer[0]) - return (true); - var proto = Object.getPrototypeOf(obj); - var depth = 0; - while (proto.constructor.name !== klass.name) { - proto = Object.getPrototypeOf(proto); - if (!proto || ++depth > MAX_CLASS_DEPTH) - return (false); - } - if (proto.constructor.name !== klass.name) - return (false); - var ver = proto._sshpkApiVersion; - if (ver === undefined) - ver = klass._oldVersionDetect(obj); - if (ver[0] != needVer[0] || ver[1] < needVer[1]) - return (false); - return (true); -} - -function assertCompatible(obj, klass, needVer, name) { - if (name === undefined) - name = 'object'; - assert.ok(obj, name + ' must not be null'); - assert.object(obj, name + ' must be an object'); - if (needVer === undefined) - needVer = klass.prototype._sshpkApiVersion; - if (obj instanceof klass && - klass.prototype._sshpkApiVersion[0] == needVer[0]) - return; - var proto = Object.getPrototypeOf(obj); - var depth = 0; - while (proto.constructor.name !== klass.name) { - proto = Object.getPrototypeOf(proto); - assert.ok(proto && ++depth <= MAX_CLASS_DEPTH, - name + ' must be a ' + klass.name + ' instance'); - } - assert.strictEqual(proto.constructor.name, klass.name, - name + ' must be a ' + klass.name + ' instance'); - var ver = proto._sshpkApiVersion; - if (ver === undefined) - ver = klass._oldVersionDetect(obj); - assert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1], - name + ' must be compatible with ' + klass.name + ' klass ' + - 'version ' + needVer[0] + '.' + needVer[1]); -} - -var CIPHER_LEN = { - 'des-ede3-cbc': { key: 7, iv: 8 }, - 'aes-128-cbc': { key: 16, iv: 16 } -}; -var PKCS5_SALT_LEN = 8; - -function opensslKeyDeriv(cipher, salt, passphrase, count) { - assert.buffer(salt, 'salt'); - assert.buffer(passphrase, 'passphrase'); - assert.number(count, 'iteration count'); - - var clen = CIPHER_LEN[cipher]; - assert.object(clen, 'supported cipher'); - - salt = salt.slice(0, PKCS5_SALT_LEN); - - var D, D_prev, bufs; - var material = new Buffer(0); - while (material.length < clen.key + clen.iv) { - bufs = []; - if (D_prev) - bufs.push(D_prev); - bufs.push(passphrase); - bufs.push(salt); - D = Buffer.concat(bufs); - for (var j = 0; j < count; ++j) - D = crypto.createHash('md5').update(D).digest(); - material = Buffer.concat([material, D]); - D_prev = D; - } - - return ({ - key: material.slice(0, clen.key), - iv: material.slice(clen.key, clen.key + clen.iv) - }); -} - -/* Count leading zero bits on a buffer */ -function countZeros(buf) { - var o = 0, obit = 8; - while (o < buf.length) { - var mask = (1 << obit); - if ((buf[o] & mask) === mask) - break; - obit--; - if (obit < 0) { - o++; - obit = 8; - } - } - return (o*8 + (8 - obit) - 1); -} - -function bufferSplit(buf, chr) { - assert.buffer(buf); - assert.string(chr); - - var parts = []; - var lastPart = 0; - var matches = 0; - for (var i = 0; i < buf.length; ++i) { - if (buf[i] === chr.charCodeAt(matches)) - ++matches; - else if (buf[i] === chr.charCodeAt(0)) - matches = 1; - else - matches = 0; - - if (matches >= chr.length) { - var newPart = i + 1; - parts.push(buf.slice(lastPart, newPart - matches)); - lastPart = newPart; - matches = 0; - } - } - if (lastPart <= buf.length) - parts.push(buf.slice(lastPart, buf.length)); - - return (parts); -} - -function ecNormalize(buf, addZero) { - assert.buffer(buf); - if (buf[0] === 0x00 && buf[1] === 0x04) { - if (addZero) - return (buf); - return (buf.slice(1)); - } else if (buf[0] === 0x04) { - if (!addZero) - return (buf); - } else { - while (buf[0] === 0x00) - buf = buf.slice(1); - if (buf[0] === 0x02 || buf[0] === 0x03) - throw (new Error('Compressed elliptic curve points ' + - 'are not supported')); - if (buf[0] !== 0x04) - throw (new Error('Not a valid elliptic curve point')); - if (!addZero) - return (buf); - } - var b = new Buffer(buf.length + 1); - b[0] = 0x0; - buf.copy(b, 1); - return (b); -} - -function mpNormalize(buf) { - assert.buffer(buf); - while (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00) - buf = buf.slice(1); - if ((buf[0] & 0x80) === 0x80) { - var b = new Buffer(buf.length + 1); - b[0] = 0x00; - buf.copy(b, 1); - buf = b; - } - return (buf); -} - -function bigintToMpBuf(bigint) { - var buf = new Buffer(bigint.toByteArray()); - buf = mpNormalize(buf); - return (buf); -} - -function calculateDSAPublic(g, p, x) { - assert.buffer(g); - assert.buffer(p); - assert.buffer(x); - try { - var bigInt = require('jsbn').BigInteger; - } catch (e) { - throw (new Error('To load a PKCS#8 format DSA private key, ' + - 'the node jsbn library is required.')); - } - g = new bigInt(g); - p = new bigInt(p); - x = new bigInt(x); - var y = g.modPow(x, p); - var ybuf = bigintToMpBuf(y); - return (ybuf); -} - -function addRSAMissing(key) { - assert.object(key); - assertCompatible(key, PrivateKey, [1, 1]); - try { - var bigInt = require('jsbn').BigInteger; - } catch (e) { - throw (new Error('To write a PEM private key from ' + - 'this source, the node jsbn lib is required.')); - } - - var d = new bigInt(key.part.d.data); - var buf; - - if (!key.part.dmodp) { - var p = new bigInt(key.part.p.data); - var dmodp = d.mod(p.subtract(1)); - - buf = bigintToMpBuf(dmodp); - key.part.dmodp = {name: 'dmodp', data: buf}; - key.parts.push(key.part.dmodp); - } - if (!key.part.dmodq) { - var q = new bigInt(key.part.q.data); - var dmodq = d.mod(q.subtract(1)); - - buf = bigintToMpBuf(dmodq); - key.part.dmodq = {name: 'dmodq', data: buf}; - key.parts.push(key.part.dmodq); - } -} - -function opensshCipherInfo(cipher) { - var inf = {}; - switch (cipher) { - case '3des-cbc': - inf.keySize = 24; - inf.blockSize = 8; - inf.opensslName = 'des-ede3-cbc'; - break; - case 'blowfish-cbc': - inf.keySize = 16; - inf.blockSize = 8; - inf.opensslName = 'bf-cbc'; - break; - case 'aes128-cbc': - case 'aes128-ctr': - case 'aes128-gcm@openssh.com': - inf.keySize = 16; - inf.blockSize = 16; - inf.opensslName = 'aes-128-' + cipher.slice(7, 10); - break; - case 'aes192-cbc': - case 'aes192-ctr': - case 'aes192-gcm@openssh.com': - inf.keySize = 24; - inf.blockSize = 16; - inf.opensslName = 'aes-192-' + cipher.slice(7, 10); - break; - case 'aes256-cbc': - case 'aes256-ctr': - case 'aes256-gcm@openssh.com': - inf.keySize = 32; - inf.blockSize = 16; - inf.opensslName = 'aes-256-' + cipher.slice(7, 10); - break; - default: - throw (new Error( - 'Unsupported openssl cipher "' + cipher + '"')); - } - return (inf); -} diff --git a/node_modules/sshpk/man/man1/sshpk-conv.1 b/node_modules/sshpk/man/man1/sshpk-conv.1 deleted file mode 100644 index 0887dce..0000000 --- a/node_modules/sshpk/man/man1/sshpk-conv.1 +++ /dev/null @@ -1,135 +0,0 @@ -.TH sshpk\-conv 1 "Jan 2016" sshpk "sshpk Commands" -.SH NAME -.PP -sshpk\-conv \- convert between key formats -.SH SYNOPSYS -.PP -\fB\fCsshpk\-conv\fR \-t FORMAT [FILENAME] [OPTIONS...] -.PP -\fB\fCsshpk\-conv\fR \-i [FILENAME] [OPTIONS...] -.SH DESCRIPTION -.PP -Reads in a public or private key and converts it between different formats, -particularly formats used in the SSH protocol and the well\-known PEM PKCS#1/7 -formats. -.PP -In the second form, with the \fB\fC\-i\fR option given, identifies a key and prints to -stderr information about its nature, size and fingerprint. -.SH EXAMPLES -.PP -Assume the following SSH\-format public key in \fB\fCid_ecdsa.pub\fR: -.PP -.RS -.nf -ecdsa\-sha2\-nistp256 AAAAE2VjZHNhLXNoYTI...9M/4c4= user@host -.fi -.RE -.PP -Identify it with \fB\fC\-i\fR: -.PP -.RS -.nf -$ sshpk\-conv \-i id_ecdsa.pub -id_ecdsa: a 256 bit ECDSA public key -ECDSA curve: nistp256 -Comment: user@host -Fingerprint: - SHA256:vCNX7eUkdvqqW0m4PoxQAZRv+CM4P4fS8+CbliAvS4k - 81:ad:d5:57:e5:6f:7d:a2:93:79:56:af:d7:c0:38:51 -.fi -.RE -.PP -Convert it to \fB\fCpkcs8\fR format, for use with e.g. OpenSSL: -.PP -.RS -.nf -$ sshpk\-conv \-t pkcs8 id_ecdsa -\-\-\-\-\-BEGIN PUBLIC KEY\-\-\-\-\- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAsA4R6N6AS3gzaPBeLjG2ObSgUsR -zOt+kWJoijLnw3ZMYUKmAx+lD0I5XUxdrPcs1vH5f3cn9TvRvO9L0z/hzg== -\-\-\-\-\-END PUBLIC KEY\-\-\-\-\- -.fi -.RE -.PP -Retrieve the public half of a private key: -.PP -.RS -.nf -$ openssl genrsa 2048 | sshpk\-conv \-t ssh \-c foo@bar -ssh\-rsa AAAAB3NzaC1yc2EAAA...koK7 foo@bar -.fi -.RE -.PP -Convert a private key to PKCS#1 (OpenSSL) format from a new\-style OpenSSH key -format (the \fB\fCssh\-keygen \-o\fR format): -.PP -.RS -.nf -$ ssh\-keygen \-o \-f foobar -\&... -$ sshpk\-conv \-p \-t pkcs1 foobar -\-\-\-\-\-BEGIN RSA PRIVATE KEY\-\-\-\-\- -MIIDpAIBAAKCAQEA6T/GYJndb1TRH3+NL.... -\-\-\-\-\-END RSA PRIVATE KEY\-\-\-\-\- -.fi -.RE -.SH OPTIONS -.TP -\fB\fC\-i, \-\-identify\fR -Instead of converting the key, output identifying information about it to -stderr, including its type, size and fingerprints. -.TP -\fB\fC\-p, \-\-private\fR -Treat the key as a private key instead of a public key (the default). If you -supply \fB\fCsshpk\-conv\fR with a private key and do not give this option, it will -extract only the public half of the key from it and work with that. -.TP -\fB\fC\-f PATH, \-\-file=PATH\fR -Input file to take the key from instead of stdin. If a filename is supplied -as a positional argument, it is equivalent to using this option. -.TP -\fB\fC\-o PATH, \-\-out=PATH\fR -Output file name to use instead of stdout. -.PP -\fB\fC\-T FORMAT, \-\-informat=FORMAT\fR -.TP -\fB\fC\-t FORMAT, \-\-outformat=FORMAT\fR -Selects the input and output formats to be used (see FORMATS, below). -.TP -\fB\fC\-c TEXT, \-\-comment=TEXT\fR -Sets the key comment for the output file, if supported. -.SH FORMATS -.PP -Currently supported formats: -.TP -\fB\fCpem, pkcs1\fR -The standard PEM format used by older OpenSSH and most TLS libraries such as -OpenSSL. The classic \fB\fCid_rsa\fR file is usually in this format. It is an ASN.1 -encoded structure, base64\-encoded and placed between PEM headers. -.TP -\fB\fCssh\fR -The SSH public key text format (the format of an \fB\fCid_rsa.pub\fR file). A single -line, containing 3 space separated parts: the key type, key body and optional -key comment. -.TP -\fB\fCpkcs8\fR -A newer PEM format, usually used only for public keys by TLS libraries such -as OpenSSL. The ASN.1 structure is more generic than that of \fB\fCpkcs1\fR\&. -.TP -\fB\fCopenssh\fR -The new \fB\fCssh\-keygen \-o\fR format from OpenSSH. This can be mistaken for a PEM -encoding but is actually an OpenSSH internal format. -.TP -\fB\fCrfc4253\fR -The internal binary format of keys when sent over the wire in the SSH -protocol. This is also the format that the \fB\fCssh\-agent\fR uses in its protocol. -.SH SEE ALSO -.PP -.BR ssh-keygen (1), -.BR openssl (1) -.SH BUGS -.PP -Encrypted (password\-protected) keys are not supported. -.PP -Report bugs at Github -\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/man/man1/sshpk-sign.1 b/node_modules/sshpk/man/man1/sshpk-sign.1 deleted file mode 100644 index 749916b..0000000 --- a/node_modules/sshpk/man/man1/sshpk-sign.1 +++ /dev/null @@ -1,81 +0,0 @@ -.TH sshpk\-sign 1 "Jan 2016" sshpk "sshpk Commands" -.SH NAME -.PP -sshpk\-sign \- sign data using an SSH key -.SH SYNOPSYS -.PP -\fB\fCsshpk\-sign\fR \-i KEYPATH [OPTION...] -.SH DESCRIPTION -.PP -Takes in arbitrary bytes, and signs them using an SSH private key. The key can -be of any type or format supported by the \fB\fCsshpk\fR library, including the -standard OpenSSH formats, as well as PEM PKCS#1 and PKCS#8. -.PP -The signature is printed out in Base64 encoding, unless the \fB\fC\-\-binary\fR or \fB\fC\-b\fR -option is given. -.SH EXAMPLES -.PP -Signing with default settings: -.PP -.RS -.nf -$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa -MEUCIAMdLS/vXrrtWFepwe... -.fi -.RE -.PP -Signing in SSH (RFC 4253) format (rather than the default ASN.1): -.PP -.RS -.nf -$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa \-t ssh -AAAAFGVjZHNhLXNoYTIt... -.fi -.RE -.PP -Saving the binary signature to a file: -.PP -.RS -.nf -$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa \\ - \-o signature.bin \-b -$ cat signature.bin | base64 -MEUCIAMdLS/vXrrtWFepwe... -.fi -.RE -.SH OPTIONS -.TP -\fB\fC\-v, \-\-verbose\fR -Print extra information about the key and signature to stderr when signing. -.TP -\fB\fC\-b, \-\-binary\fR -Don't base64\-encode the signature before outputting it. -.TP -\fB\fC\-i KEY, \-\-identity=KEY\fR -Select the key to be used for signing. \fB\fCKEY\fR must be a relative or absolute -filesystem path to the key file. Any format supported by the \fB\fCsshpk\fR library -is supported, including OpenSSH formats and standard PEM PKCS. -.TP -\fB\fC\-f PATH, \-\-file=PATH\fR -Input file to sign instead of stdin. -.TP -\fB\fC\-o PATH, \-\-out=PATH\fR -Output file to save signature in instead of stdout. -.TP -\fB\fC\-H HASH, \-\-hash=HASH\fR -Set the hash algorithm to be used for signing. This should be one of \fB\fCsha1\fR, -\fB\fCsha256\fR or \fB\fCsha512\fR\&. Some key types may place restrictions on which hash -algorithms may be used (e.g. ED25519 keys can only use SHA\-512). -.TP -\fB\fC\-t FORMAT, \-\-format=FORMAT\fR -Choose the signature format to use, from \fB\fCasn1\fR, \fB\fCssh\fR or \fB\fCraw\fR (only for -ED25519 signatures). The \fB\fCasn1\fR format is the default, as it is the format -used with TLS and typically the standard in most non\-SSH libraries (e.g. -OpenSSL). The \fB\fCssh\fR format is used in the SSH protocol and by the ssh\-agent. -.SH SEE ALSO -.PP -.BR sshpk-verify (1) -.SH BUGS -.PP -Report bugs at Github -\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/man/man1/sshpk-verify.1 b/node_modules/sshpk/man/man1/sshpk-verify.1 deleted file mode 100644 index f79169d..0000000 --- a/node_modules/sshpk/man/man1/sshpk-verify.1 +++ /dev/null @@ -1,68 +0,0 @@ -.TH sshpk\-verify 1 "Jan 2016" sshpk "sshpk Commands" -.SH NAME -.PP -sshpk\-verify \- verify a signature on data using an SSH key -.SH SYNOPSYS -.PP -\fB\fCsshpk\-verify\fR \-i KEYPATH \-s SIGNATURE [OPTION...] -.SH DESCRIPTION -.PP -Takes in arbitrary bytes and a Base64\-encoded signature, and verifies that the -signature was produced by the private half of the given SSH public key. -.SH EXAMPLES -.PP -.RS -.nf -$ printf 'foo' | sshpk\-verify \-i ~/.ssh/id_ecdsa \-s MEUCIQCYp... -OK -$ printf 'foo' | sshpk\-verify \-i ~/.ssh/id_ecdsa \-s GARBAGE... -NOT OK -.fi -.RE -.SH EXIT STATUS -.TP -\fB\fC0\fR -Signature validates and matches the key. -.TP -\fB\fC1\fR -Signature is parseable and the correct length but does not match the key or -otherwise is invalid. -.TP -\fB\fC2\fR -The signature or key could not be parsed. -.TP -\fB\fC3\fR -Invalid commandline options were supplied. -.SH OPTIONS -.TP -\fB\fC\-v, \-\-verbose\fR -Print extra information about the key and signature to stderr when verifying. -.TP -\fB\fC\-i KEY, \-\-identity=KEY\fR -Select the key to be used for verification. \fB\fCKEY\fR must be a relative or -absolute filesystem path to the key file. Any format supported by the \fB\fCsshpk\fR -library is supported, including OpenSSH formats and standard PEM PKCS. -.TP -\fB\fC\-s BASE64, \-\-signature=BASE64\fR -Supplies the base64\-encoded signature to be verified. -.TP -\fB\fC\-f PATH, \-\-file=PATH\fR -Input file to verify instead of stdin. -.TP -\fB\fC\-H HASH, \-\-hash=HASH\fR -Set the hash algorithm to be used for signing. This should be one of \fB\fCsha1\fR, -\fB\fCsha256\fR or \fB\fCsha512\fR\&. Some key types may place restrictions on which hash -algorithms may be used (e.g. ED25519 keys can only use SHA\-512). -.TP -\fB\fC\-t FORMAT, \-\-format=FORMAT\fR -Choose the signature format to use, from \fB\fCasn1\fR, \fB\fCssh\fR or \fB\fCraw\fR (only for -ED25519 signatures). The \fB\fCasn1\fR format is the default, as it is the format -used with TLS and typically the standard in most non\-SSH libraries (e.g. -OpenSSL). The \fB\fCssh\fR format is used in the SSH protocol and by the ssh\-agent. -.SH SEE ALSO -.PP -.BR sshpk-sign (1) -.SH BUGS -.PP -Report bugs at Github -\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/node_modules/assert-plus/AUTHORS b/node_modules/sshpk/node_modules/assert-plus/AUTHORS deleted file mode 100644 index 1923524..0000000 --- a/node_modules/sshpk/node_modules/assert-plus/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -Dave Eddy -Fred Kuo -Lars-Magnus Skog -Mark Cavage -Patrick Mooney -Rob Gulewich diff --git a/node_modules/sshpk/node_modules/assert-plus/CHANGES.md b/node_modules/sshpk/node_modules/assert-plus/CHANGES.md deleted file mode 100644 index 57d92bf..0000000 --- a/node_modules/sshpk/node_modules/assert-plus/CHANGES.md +++ /dev/null @@ -1,14 +0,0 @@ -# assert-plus Changelog - -## 1.0.0 - -- *BREAKING* assert.number (and derivatives) now accept Infinity as valid input -- Add assert.finite check. Previous assert.number callers should use this if - they expect Infinity inputs to throw. - -## 0.2.0 - -- Fix `assert.object(null)` so it throws -- Fix optional/arrayOf exports for non-type-of asserts -- Add optiona/arrayOf exports for Stream/Date/Regex/uuid -- Add basic unit test coverage diff --git a/node_modules/sshpk/node_modules/assert-plus/README.md b/node_modules/sshpk/node_modules/assert-plus/README.md deleted file mode 100644 index ec200d1..0000000 --- a/node_modules/sshpk/node_modules/assert-plus/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# assert-plus - -This library is a super small wrapper over node's assert module that has two -things: (1) the ability to disable assertions with the environment variable -NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like -`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks -like this: - -```javascript - var assert = require('assert-plus'); - - function fooAccount(options, callback) { - assert.object(options, 'options'); - assert.number(options.id, 'options.id'); - assert.bool(options.isManager, 'options.isManager'); - assert.string(options.name, 'options.name'); - assert.arrayOfString(options.email, 'options.email'); - assert.func(callback, 'callback'); - - // Do stuff - callback(null, {}); - } -``` - -# API - -All methods that *aren't* part of node's core assert API are simply assumed to -take an argument, and then a string 'name' that's not a message; `AssertionError` -will be thrown if the assertion fails with a message like: - - AssertionError: foo (string) is required - at test (/home/mark/work/foo/foo.js:3:9) - at Object. (/home/mark/work/foo/foo.js:15:1) - at Module._compile (module.js:446:26) - at Object..js (module.js:464:10) - at Module.load (module.js:353:31) - at Function._load (module.js:311:12) - at Array.0 (module.js:484:10) - at EventEmitter._tickCallback (node.js:190:38) - -from: - -```javascript - function test(foo) { - assert.string(foo, 'foo'); - } -``` - -There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: - -```javascript - function test(foo) { - assert.arrayOfString(foo, 'foo'); - } -``` - -You can assert IFF an argument is not `undefined` (i.e., an optional arg): - -```javascript - assert.optionalString(foo, 'foo'); -``` - -Lastly, you can opt-out of assertion checking altogether by setting the -environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have -lots of assertions, and don't want to pay `typeof ()` taxes to v8 in -production. Be advised: The standard functions re-exported from `assert` are -also disabled in assert-plus if NDEBUG is specified. Using them directly from -the `assert` module avoids this behavior. - -The complete list of APIs is: - -* assert.array -* assert.bool -* assert.buffer -* assert.func -* assert.number -* assert.finite -* assert.object -* assert.string -* assert.stream -* assert.date -* assert.regexp -* assert.uuid -* assert.arrayOfArray -* assert.arrayOfBool -* assert.arrayOfBuffer -* assert.arrayOfFunc -* assert.arrayOfNumber -* assert.arrayOfFinite -* assert.arrayOfObject -* assert.arrayOfString -* assert.arrayOfStream -* assert.arrayOfDate -* assert.arrayOfRegexp -* assert.arrayOfUuid -* assert.optionalArray -* assert.optionalBool -* assert.optionalBuffer -* assert.optionalFunc -* assert.optionalNumber -* assert.optionalFinite -* assert.optionalObject -* assert.optionalString -* assert.optionalStream -* assert.optionalDate -* assert.optionalRegexp -* assert.optionalUuid -* assert.optionalArrayOfArray -* assert.optionalArrayOfBool -* assert.optionalArrayOfBuffer -* assert.optionalArrayOfFunc -* assert.optionalArrayOfNumber -* assert.optionalArrayOfFinite -* assert.optionalArrayOfObject -* assert.optionalArrayOfString -* assert.optionalArrayOfStream -* assert.optionalArrayOfDate -* assert.optionalArrayOfRegexp -* assert.optionalArrayOfUuid -* assert.AssertionError -* assert.fail -* assert.ok -* assert.equal -* assert.notEqual -* assert.deepEqual -* assert.notDeepEqual -* assert.strictEqual -* assert.notStrictEqual -* assert.throws -* assert.doesNotThrow -* assert.ifError - -# Installation - - npm install assert-plus - -## License - -The MIT License (MIT) -Copyright (c) 2012 Mark Cavage - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -## Bugs - -See . diff --git a/node_modules/sshpk/node_modules/assert-plus/assert.js b/node_modules/sshpk/node_modules/assert-plus/assert.js deleted file mode 100644 index 26f944e..0000000 --- a/node_modules/sshpk/node_modules/assert-plus/assert.js +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright (c) 2012, Mark Cavage. All rights reserved. -// Copyright 2015 Joyent, Inc. - -var assert = require('assert'); -var Stream = require('stream').Stream; -var util = require('util'); - - -///--- Globals - -/* JSSTYLED */ -var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; - - -///--- Internal - -function _capitalize(str) { - return (str.charAt(0).toUpperCase() + str.slice(1)); -} - -function _toss(name, expected, oper, arg, actual) { - throw new assert.AssertionError({ - message: util.format('%s (%s) is required', name, expected), - actual: (actual === undefined) ? typeof (arg) : actual(arg), - expected: expected, - operator: oper || '===', - stackStartFunction: _toss.caller - }); -} - -function _getClass(arg) { - return (Object.prototype.toString.call(arg).slice(8, -1)); -} - -function noop() { - // Why even bother with asserts? -} - - -///--- Exports - -var types = { - bool: { - check: function (arg) { return typeof (arg) === 'boolean'; } - }, - func: { - check: function (arg) { return typeof (arg) === 'function'; } - }, - string: { - check: function (arg) { return typeof (arg) === 'string'; } - }, - object: { - check: function (arg) { - return typeof (arg) === 'object' && arg !== null; - } - }, - number: { - check: function (arg) { - return typeof (arg) === 'number' && !isNaN(arg); - } - }, - finite: { - check: function (arg) { - return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); - } - }, - buffer: { - check: function (arg) { return Buffer.isBuffer(arg); }, - operator: 'Buffer.isBuffer' - }, - array: { - check: function (arg) { return Array.isArray(arg); }, - operator: 'Array.isArray' - }, - stream: { - check: function (arg) { return arg instanceof Stream; }, - operator: 'instanceof', - actual: _getClass - }, - date: { - check: function (arg) { return arg instanceof Date; }, - operator: 'instanceof', - actual: _getClass - }, - regexp: { - check: function (arg) { return arg instanceof RegExp; }, - operator: 'instanceof', - actual: _getClass - }, - uuid: { - check: function (arg) { - return typeof (arg) === 'string' && UUID_REGEXP.test(arg); - }, - operator: 'isUUID' - } -}; - -function _setExports(ndebug) { - var keys = Object.keys(types); - var out; - - /* re-export standard assert */ - if (process.env.NODE_NDEBUG) { - out = noop; - } else { - out = function (arg, msg) { - if (!arg) { - _toss(msg, 'true', arg); - } - }; - } - - /* standard checks */ - keys.forEach(function (k) { - if (ndebug) { - out[k] = noop; - return; - } - var type = types[k]; - out[k] = function (arg, msg) { - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* optional checks */ - keys.forEach(function (k) { - var name = 'optional' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* arrayOf checks */ - keys.forEach(function (k) { - var name = 'arrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* optionalArrayOf checks */ - keys.forEach(function (k) { - var name = 'optionalArrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* re-export built-in assertions */ - Object.keys(assert).forEach(function (k) { - if (k === 'AssertionError') { - out[k] = assert[k]; - return; - } - if (ndebug) { - out[k] = noop; - return; - } - out[k] = assert[k]; - }); - - /* export ourselves (for unit tests _only_) */ - out._setExports = _setExports; - - return out; -} - -module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/node_modules/sshpk/node_modules/assert-plus/package.json b/node_modules/sshpk/node_modules/assert-plus/package.json deleted file mode 100644 index 7308cac..0000000 --- a/node_modules/sshpk/node_modules/assert-plus/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "assert-plus@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/sshpk" - ] - ], - "_from": "assert-plus@>=1.0.0 <2.0.0", - "_id": "assert-plus@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/sshpk/assert-plus", - "_nodeVersion": "0.10.40", - "_npmUser": { - "email": "patrick.f.mooney@gmail.com", - "name": "pfmooney" - }, - "_npmVersion": "3.3.9", - "_phantomChildren": {}, - "_requested": { - "name": "assert-plus", - "raw": "assert-plus@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "_shasum": "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525", - "_shrinkwrap": null, - "_spec": "assert-plus@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/sshpk", - "author": { - "email": "mcavage@gmail.com", - "name": "Mark Cavage" - }, - "bugs": { - "url": "https://github.com/mcavage/node-assert-plus/issues" - }, - "contributors": [ - { - "email": "dave@daveeddy.com", - "name": "Dave Eddy" - }, - { - "email": "fred.kuo@joyent.com", - "name": "Fred Kuo" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "Lars-Magnus Skog" - }, - { - "email": "mcavage@gmail.com", - "name": "Mark Cavage" - }, - { - "email": "pmooney@pfmooney.com", - "name": "Patrick Mooney" - }, - { - "email": "robert.gulewich@joyent.com", - "name": "Rob Gulewich" - } - ], - "dependencies": {}, - "description": "Extra assertions on top of node's assert module", - "devDependencies": { - "faucet": "0.0.1", - "tape": "4.2.2" - }, - "directories": {}, - "dist": { - "shasum": "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525", - "tarball": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - }, - "engines": { - "node": ">=0.8" - }, - "homepage": "https://github.com/mcavage/node-assert-plus#readme", - "license": "MIT", - "main": "./assert.js", - "maintainers": [ - { - "email": "mcavage@gmail.com", - "name": "mcavage" - }, - { - "email": "patrick.f.mooney@gmail.com", - "name": "pfmooney" - } - ], - "name": "assert-plus", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mcavage/node-assert-plus.git" - }, - "scripts": { - "test": "tape tests/*.js | ./node_modules/.bin/faucet" - }, - "version": "1.0.0" -} diff --git a/node_modules/sshpk/package.json b/node_modules/sshpk/package.json deleted file mode 100644 index 4ff4cb3..0000000 --- a/node_modules/sshpk/package.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "_args": [ - [ - "sshpk@^1.7.0", - "/Users/jbaylina/git/MVP/node_modules/http-signature" - ] - ], - "_from": "sshpk@>=1.7.0 <2.0.0", - "_id": "sshpk@1.10.1", - "_inCache": true, - "_installable": true, - "_location": "/sshpk", - "_nodeVersion": "0.12.15", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/sshpk-1.10.1.tgz_1475095320582_0.4095200637821108" - }, - "_npmUser": { - "email": "alex@cooperi.net", - "name": "arekinath" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "sshpk", - "raw": "sshpk@^1.7.0", - "rawSpec": "^1.7.0", - "scope": null, - "spec": ">=1.7.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/http-signature" - ], - "_resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", - "_shasum": "30e1a5d329244974a1af61511339d595af6638b0", - "_shrinkwrap": null, - "_spec": "sshpk@^1.7.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/http-signature", - "author": { - "name": "Joyent, Inc" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "bugs": { - "url": "https://github.com/arekinath/node-sshpk/issues" - }, - "contributors": [ - { - "email": "dave@daveeddy.com", - "name": "Dave Eddy" - }, - { - "email": "mcavage@gmail.com", - "name": "Mark Cavage" - }, - { - "email": "alex@cooperi.net", - "name": "Alex Wilson" - } - ], - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jodid25519": "^1.0.0", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - }, - "description": "A library for finding and using SSH public keys", - "devDependencies": { - "benchmark": "^1.0.0", - "sinon": "^1.17.2", - "tape": "^3.5.0", - "temp": "^0.8.2" - }, - "directories": { - "bin": "./bin", - "lib": "./lib", - "man": "./man/man1" - }, - "dist": { - "shasum": "30e1a5d329244974a1af61511339d595af6638b0", - "tarball": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "gitHead": "4212272b3889f2df155d2aa8a1a5305fe7a7d3a5", - "homepage": "https://github.com/arekinath/node-sshpk#readme", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "alex@cooperi.net", - "name": "arekinath" - } - ], - "man": [ - "/Users/alex.wilson/dev/node-sshpk/man/man1/sshpk-conv.1", - "/Users/alex.wilson/dev/node-sshpk/man/man1/sshpk-sign.1", - "/Users/alex.wilson/dev/node-sshpk/man/man1/sshpk-verify.1" - ], - "name": "sshpk", - "optionalDependencies": { - "bcrypt-pbkdf": "^1.0.0", - "ecc-jsbn": "~0.1.1", - "jodid25519": "^1.0.0", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - }, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/arekinath/node-sshpk.git" - }, - "scripts": { - "test": "tape test/*.js" - }, - "version": "1.10.1" -} diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js deleted file mode 100644 index b9bec62..0000000 --- a/node_modules/string-width/index.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; -var stripAnsi = require('strip-ansi'); -var codePointAt = require('code-point-at'); -var isFullwidthCodePoint = require('is-fullwidth-code-point'); - -// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1345 -module.exports = function (str) { - if (typeof str !== 'string' || str.length === 0) { - return 0; - } - - var width = 0; - - str = stripAnsi(str); - - for (var i = 0; i < str.length; i++) { - var code = codePointAt(str, i); - - // ignore control characters - if (code <= 0x1f || (code >= 0x7f && code <= 0x9f)) { - continue; - } - - // surrogates - if (code >= 0x10000) { - i++; - } - - if (isFullwidthCodePoint(code)) { - width += 2; - } else { - width++; - } - } - - return width; -}; diff --git a/node_modules/string-width/license b/node_modules/string-width/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/string-width/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/string-width/package.json b/node_modules/string-width/package.json deleted file mode 100644 index d12074a..0000000 --- a/node_modules/string-width/package.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "_args": [ - [ - "string-width@^1.0.1", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "string-width@>=1.0.1 <2.0.0", - "_id": "string-width@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/string-width", - "_nodeVersion": "4.4.5", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/string-width-1.0.2.tgz_1471188233009_0.6573935742489994" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.15.5", - "_phantomChildren": {}, - "_requested": { - "name": "string-width", - "raw": "string-width@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/cliui", - "/solc/yargs", - "/wrap-ansi", - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "_shasum": "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3", - "_shrinkwrap": null, - "_spec": "string-width@^1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/string-width/issues" - }, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "description": "Get the visual width of a string - the number of columns required to display it", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3", - "tarball": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "282cf3d53918a92cc3ee0778dcf938039bcbc47b", - "homepage": "https://github.com/sindresorhus/string-width#readme", - "keywords": [ - "string", - "str", - "character", - "char", - "unicode", - "width", - "visual", - "column", - "columns", - "fullwidth", - "full-width", - "full", - "ansi", - "escape", - "codes", - "cli", - "command-line", - "terminal", - "console", - "cjk", - "chinese", - "japanese", - "korean", - "fixed-width" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "string-width", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/string-width.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.0.2" -} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md deleted file mode 100644 index 1ab42c9..0000000 --- a/node_modules/string-width/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# string-width [![Build Status](https://travis-ci.org/sindresorhus/string-width.svg?branch=master)](https://travis-ci.org/sindresorhus/string-width) - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - - -## Install - -``` -$ npm install --save string-width -``` - - -## Usage - -```js -const stringWidth = require('string-width'); - -stringWidth('古'); -//=> 2 - -stringWidth('\u001b[1m古\u001b[22m'); -//=> 2 - -stringWidth('a'); -//=> 1 -``` - - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/string.prototype.trim/.eslintrc b/node_modules/string.prototype.trim/.eslintrc deleted file mode 100644 index b80719c..0000000 --- a/node_modules/string.prototype.trim/.eslintrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "max-nested-callbacks": [2, 3], - "new-cap": [2, { "capIsNewExceptions": ["CheckObjectCoercible", "ToString"] }], - "no-invalid-this": [1] - } -} diff --git a/node_modules/string.prototype.trim/.jscs.json b/node_modules/string.prototype.trim/.jscs.json deleted file mode 100644 index d0d49f7..0000000 --- a/node_modules/string.prototype.trim/.jscs.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "es3": true, - - "additionalRules": [], - - "requireSemicolons": true, - - "disallowMultipleSpaces": true, - - "disallowIdentifierNames": [], - - "requireCurlyBraces": { - "allExcept": [], - "keywords": ["if", "else", "for", "while", "do", "try", "catch"] - }, - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "disallowSpaceBeforeComma": true, - "disallowSpaceAfterComma": false, - "disallowSpaceBeforeSemicolon": true, - - "disallowNodeTypes": [ - "DebuggerStatement", - "ForInStatement", - "LabeledStatement", - "SwitchCase", - "SwitchStatement", - "WithStatement" - ], - - "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": "allButReserved", - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": { "allExcept": ["keywords"] }, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - }, - - "disallowOperatorBeforeLineBreak": [], - - "requireSpaceBeforeKeywords": [ - "do", - "for", - "if", - "else", - "switch", - "case", - "try", - "catch", - "finally", - "while", - "with", - "return" - ], - - "validateAlignedFunctionParameters": { - "lineBreakAfterOpeningBraces": true, - "lineBreakBeforeClosingBraces": true - }, - - "requirePaddingNewLinesBeforeExport": true, - - "validateNewlineAfterArrayElements": { - "maximum": 1 - }, - - "requirePaddingNewLinesAfterUseStrict": true, - - "disallowArrowFunctions": true, - - "disallowMultiLineTernary": true, - - "validateOrderInObjectKeys": "asc-insensitive", - - "disallowIdenticalDestructuringNames": true, - - "disallowNestedTernaries": { "maxLevel": 1 }, - - "requireSpaceAfterComma": { "allExcept": ["trailing"] }, - "requireAlignedMultilineParams": false, - - "requireSpacesInGenerator": { - "afterStar": true - }, - - "disallowSpacesInGenerator": { - "beforeStar": true - }, - - "disallowVar": false, - - "requireArrayDestructuring": false, - - "requireEnhancedObjectLiterals": false, - - "requireObjectDestructuring": false, - - "requireEarlyReturn": false, - - "requireCapitalizedConstructorsNew": { - "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] - } -} - diff --git a/node_modules/string.prototype.trim/.npmignore b/node_modules/string.prototype.trim/.npmignore deleted file mode 100644 index 123ae94..0000000 --- a/node_modules/string.prototype.trim/.npmignore +++ /dev/null @@ -1,27 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules diff --git a/node_modules/string.prototype.trim/.travis.yml b/node_modules/string.prototype.trim/.travis.yml deleted file mode 100644 index 9569baa..0000000 --- a/node_modules/string.prototype.trim/.travis.yml +++ /dev/null @@ -1,73 +0,0 @@ -language: node_js -node_js: - - "5.5" - - "5.4" - - "5.3" - - "5.2" - - "5.1" - - "5.0" - - "4.2" - - "4.1" - - "4.0" - - "iojs-v3.3" - - "iojs-v3.2" - - "iojs-v3.1" - - "iojs-v3.0" - - "iojs-v2.5" - - "iojs-v2.4" - - "iojs-v2.3" - - "iojs-v2.2" - - "iojs-v2.1" - - "iojs-v2.0" - - "iojs-v1.8" - - "iojs-v1.7" - - "iojs-v1.6" - - "iojs-v1.5" - - "iojs-v1.4" - - "iojs-v1.3" - - "iojs-v1.2" - - "iojs-v1.1" - - "iojs-v1.0" - - "0.12" - - "0.11" - - "0.10" - - "0.9" - - "0.8" - - "0.6" - - "0.4" -before_install: - - 'if [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi' - - 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi' -script: - - 'if [ "${TRAVIS_NODE_VERSION}" != "4.2" ]; then npm run tests-only ; else npm test ; fi' -sudo: false -matrix: - fast_finish: true - allow_failures: - - node_js: "5.4" - - node_js: "5.3" - - node_js: "5.2" - - node_js: "5.1" - - node_js: "5.0" - - node_js: "4.1" - - node_js: "4.0" - - node_js: "iojs-v3.2" - - node_js: "iojs-v3.1" - - node_js: "iojs-v3.0" - - node_js: "iojs-v2.4" - - node_js: "iojs-v2.3" - - node_js: "iojs-v2.2" - - node_js: "iojs-v2.1" - - node_js: "iojs-v2.0" - - node_js: "iojs-v1.7" - - node_js: "iojs-v1.6" - - node_js: "iojs-v1.5" - - node_js: "iojs-v1.4" - - node_js: "iojs-v1.3" - - node_js: "iojs-v1.2" - - node_js: "iojs-v1.1" - - node_js: "iojs-v1.0" - - node_js: "0.11" - - node_js: "0.9" - - node_js: "0.6" - - node_js: "0.4" diff --git a/node_modules/string.prototype.trim/CHANGELOG.md b/node_modules/string.prototype.trim/CHANGELOG.md deleted file mode 100644 index b4251b0..0000000 --- a/node_modules/string.prototype.trim/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -1.1.2 / 2016-02-06 -================= - * Use the polyfill, not the implementation, as the default export. - * package.json: use object form of "authors", add "contributors" - * [Deps] update `define-properties`, `es-abstract` - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `semver`, `@ljharb/eslint-config` - * [Tests] fix npm upgrades for older nodes - * [Tests] up to `node` `v5.5`, don’t allow `0.8` to fail - -1.1.1 / 2015-08-16 -================= - * [Docs] remove "if" around `.shim` call in example - -1.1.0 / 2015-08-16 -================= - * [New] Implement the [es-shim API](es-shims/api). - * [Refactor] Move implementation to `implementation.js` - * [Deps] update `es-abstract` - * [Dev Deps] update `jscs`, `tape` - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - -1.0.0 / 2015-08-08 -================= - * Initial release diff --git a/node_modules/string.prototype.trim/LICENSE b/node_modules/string.prototype.trim/LICENSE deleted file mode 100644 index fcf5754..0000000 --- a/node_modules/string.prototype.trim/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/string.prototype.trim/Makefile b/node_modules/string.prototype.trim/Makefile deleted file mode 100644 index b9e4fe1..0000000 --- a/node_modules/string.prototype.trim/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -# Since we rely on paths relative to the makefile location, abort if make isn't being run from there. -$(if $(findstring /,$(MAKEFILE_LIST)),$(error Please only invoke this makefile from the directory it resides in)) - - # The files that need updating when incrementing the version number. -VERSIONED_FILES := *.js *.json README* - - -# Add the local npm packages' bin folder to the PATH, so that `make` can find them, when invoked directly. -# Note that rather than using `$(npm bin)` the 'node_modules/.bin' path component is hard-coded, so that invocation works even from an environment -# where npm is (temporarily) unavailable due to having deactivated an nvm instance loaded into the calling shell in order to avoid interference with tests. -export PATH := $(shell printf '%s' "$$PWD/node_modules/.bin:$$PATH") -UTILS := semver -# Make sure that all required utilities can be located. -UTIL_CHECK := $(or $(shell PATH="$(PATH)" which $(UTILS) >/dev/null && echo 'ok'),$(error Did you forget to run `npm install` after cloning the repo? At least one of the required supporting utilities not found: $(UTILS))) - -# Default target (by virtue of being the first non '.'-prefixed in the file). -.PHONY: _no-target-specified -_no-target-specified: - $(error Please specify the target to make - `make list` shows targets. Alternatively, use `npm test` to run the default tests; `npm run` shows all tests) - -# Lists all targets defined in this makefile. -.PHONY: list -list: - @$(MAKE) -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | command grep -v -e '^[^[:alnum:]]' -e '^$@$$command ' | sort - -# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS). -.PHONY: test -test: - @npm test - -.PHONY: _ensure-tag -_ensure-tag: -ifndef TAG - $(error Please invoke with `make TAG= release`, where is either an increment specifier (patch, minor, major, prepatch, preminor, premajor, prerelease), or an explicit major.minor.patch version number) -endif - -CHANGELOG_ERROR = $(error No CHANGELOG specified) -.PHONY: _ensure-changelog -_ensure-changelog: - @ (git status -sb --porcelain | command grep -E '^( M|[MA] ) CHANGELOG.md' > /dev/null) || (echo no CHANGELOG.md specified && exit 2) - -# Ensures that the git workspace is clean. -.PHONY: _ensure-clean -_ensure-clean: - @[ -z "$$((git status --porcelain --untracked-files=no || echo err) | command grep -v 'CHANGELOG.md')" ] || { echo "Workspace is not clean; please commit changes first." >&2; exit 2; } - -# Makes a release; invoke with `make TAG= release`. -.PHONY: release -release: _ensure-tag _ensure-changelog _ensure-clean - @old_ver=`git describe --abbrev=0 --tags --match 'v[0-9]*.[0-9]*.[0-9]*'` || { echo "Failed to determine current version." >&2; exit 1; }; old_ver=$${old_ver#v}; \ - new_ver=`echo "$(TAG)" | sed 's/^v//'`; new_ver=$${new_ver:-patch}; \ - if printf "$$new_ver" | command grep -q '^[0-9]'; then \ - semver "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be major.minor.patch' >&2; exit 2; }; \ - semver -r "> $$old_ver" "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be HIGHER than current one.' >&2; exit 2; } \ - else \ - new_ver=`semver -i "$$new_ver" "$$old_ver"` || { echo 'Invalid version-increment specifier: $(TAG)' >&2; exit 2; } \ - fi; \ - printf "=== Bumping version **$$old_ver** to **$$new_ver** before committing and tagging:\n=== TYPE 'proceed' TO PROCEED, anything else to abort: " && read response && [ "$$response" = 'proceed' ] || { echo 'Aborted.' >&2; exit 2; }; \ - replace "$$old_ver" "$$new_ver" -- $(VERSIONED_FILES) && \ - git commit -m "v$$new_ver" $(VERSIONED_FILES) CHANGELOG.md && \ - git tag -a -m "v$$new_ver" "v$$new_ver" diff --git a/node_modules/string.prototype.trim/README.md b/node_modules/string.prototype.trim/README.md deleted file mode 100644 index 256595e..0000000 --- a/node_modules/string.prototype.trim/README.md +++ /dev/null @@ -1,50 +0,0 @@ -String.prototype.trim [![Version Badge][npm-version-svg]][package-url] - -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -[![browser support][testling-svg]][testling-url] - -An ES5 spec-compliant `String.prototype.trim` shim. Invoke its "shim" method to shim `String.prototype.trim` if it is unavailable. - -This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](http://www.ecma-international.org/ecma-262/5.1/#sec-15.5.4.20). - -Most common usage: - -```js -var assert = require('assert'); -var trim = require('string.prototype.trim'); - -assert(trim(' \t\na \t\n') === 'a'); - -trim.shim(); // will be a no-op if not needed - -assert(trim(' \t\na \t\n') === ' \t\na \t\n'.trim()); -``` - -## Engine Bugs -Some implementations of `String#trim` incorrectly trim zero-width spaces. This shim detects and corrects this behavior. - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[package-url]: https://npmjs.com/package/string.prototype.trim -[npm-version-svg]: http://versionbadg.es/es-shims/String.prototype.trim.svg -[travis-svg]: https://travis-ci.org/es-shims/String.prototype.trim.svg -[travis-url]: https://travis-ci.org/es-shims/String.prototype.trim -[deps-svg]: https://david-dm.org/es-shims/String.prototype.trim.svg -[deps-url]: https://david-dm.org/es-shims/String.prototype.trim -[dev-deps-svg]: https://david-dm.org/es-shims/String.prototype.trim/dev-status.svg -[dev-deps-url]: https://david-dm.org/es-shims/String.prototype.trim#info=devDependencies -[testling-svg]: https://ci.testling.com/es-shims/String.prototype.trim.png -[testling-url]: https://ci.testling.com/es-shims/String.prototype.trim -[npm-badge-png]: https://nodei.co/npm/string.prototype.trim.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/string.prototype.trim.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/string.prototype.trim.svg -[downloads-url]: http://npm-stat.com/charts.html?package=string.prototype.trim diff --git a/node_modules/string.prototype.trim/implementation.js b/node_modules/string.prototype.trim/implementation.js deleted file mode 100644 index 304246c..0000000 --- a/node_modules/string.prototype.trim/implementation.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var bind = require('function-bind'); -var ES = require('es-abstract/es5'); -var replace = bind.call(Function.call, String.prototype.replace); - -var leftWhitespace = /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/; -var rightWhitespace = /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/; - -module.exports = function trim() { - var S = ES.ToString(ES.CheckObjectCoercible(this)); - return replace(replace(S, leftWhitespace, ''), rightWhitespace, ''); -}; diff --git a/node_modules/string.prototype.trim/index.js b/node_modules/string.prototype.trim/index.js deleted file mode 100644 index 4040ba9..0000000 --- a/node_modules/string.prototype.trim/index.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var bind = require('function-bind'); -var define = require('define-properties'); - -var implementation = require('./implementation'); -var getPolyfill = require('./polyfill'); -var shim = require('./shim'); - -var boundTrim = bind.call(Function.call, getPolyfill()); - -define(boundTrim, { - getPolyfill: getPolyfill, - implementation: implementation, - shim: shim -}); - -module.exports = boundTrim; diff --git a/node_modules/string.prototype.trim/package.json b/node_modules/string.prototype.trim/package.json deleted file mode 100644 index 3370059..0000000 --- a/node_modules/string.prototype.trim/package.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "_args": [ - [ - "string.prototype.trim@~1.1.2", - "/Users/jbaylina/git/MVP/node_modules/tape" - ] - ], - "_from": "string.prototype.trim@>=1.1.2 <1.2.0", - "_id": "string.prototype.trim@1.1.2", - "_inCache": true, - "_installable": true, - "_location": "/string.prototype.trim", - "_nodeVersion": "5.5.0", - "_npmOperationalInternal": { - "host": "packages-9-west.internal.npmjs.com", - "tmp": "tmp/string.prototype.trim-1.1.2.tgz_1454751443709_0.9118233555927873" - }, - "_npmUser": { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "string.prototype.trim", - "raw": "string.prototype.trim@~1.1.2", - "rawSpec": "~1.1.2", - "scope": null, - "spec": ">=1.1.2 <1.2.0", - "type": "range" - }, - "_requiredBy": [ - "/tape" - ], - "_resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "_shasum": "d04de2c89e137f4d7d206f086b5ed2fae6be8cea", - "_shrinkwrap": null, - "_spec": "string.prototype.trim@~1.1.2", - "_where": "/Users/jbaylina/git/MVP/node_modules/tape", - "author": { - "email": "ljharb@gmail.com", - "name": "Jordan Harband", - "url": "http://ljharb.codes" - }, - "bugs": { - "url": "https://github.com/es-shims/String.prototype.trim/issues" - }, - "contributors": [ - { - "email": "ljharb@gmail.com", - "name": "Jordan Harband", - "url": "http://ljharb.codes" - } - ], - "dependencies": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" - }, - "description": "ES5 spec-compliant shim for String.prototype.trim", - "devDependencies": { - "@es-shims/api": "^1.0.0", - "@ljharb/eslint-config": "^1.6.1", - "covert": "^1.1.0", - "eslint": "^1.10.3", - "jscs": "^2.9.0", - "nsp": "^2.2.0", - "replace": "^0.3.0", - "semver": "^5.1.0", - "tape": "^4.4.0" - }, - "directories": {}, - "dist": { - "shasum": "d04de2c89e137f4d7d206f086b5ed2fae6be8cea", - "tarball": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz" - }, - "engines": { - "node": ">= 0.4" - }, - "gitHead": "7894aca30500058496b701919121b895d13c62eb", - "homepage": "https://github.com/es-shims/String.prototype.trim#readme", - "keywords": [ - "String.prototype.trim", - "string", - "ES5", - "shim", - "trim", - "polyfill", - "es-shim API" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "ljharb@gmail.com", - "name": "ljharb" - } - ], - "name": "string.prototype.trim", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/es-shims/String.prototype.trim.git" - }, - "scripts": { - "coverage": "covert test/*.js", - "coverage-quiet": "covert test/*.js --quiet", - "eslint": "eslint test/*.js *.js", - "jscs": "jscs test/*.js *.js", - "lint": "npm run jscs && npm run eslint", - "security": "nsp check", - "test": "npm run lint && es-shim-api --bound && npm run tests-only && npm run security", - "test:module": "node test/index.js", - "test:shimmed": "node test/shimmed.js", - "tests-only": "npm run test:shimmed && npm run test:module" - }, - "testling": { - "browsers": [ - "iexplore/9.0..latest", - "firefox/4.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/11.6..latest", - "opera/next", - "safari/5.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ], - "files": "test/index.js" - }, - "version": "1.1.2" -} diff --git a/node_modules/string.prototype.trim/polyfill.js b/node_modules/string.prototype.trim/polyfill.js deleted file mode 100644 index afdb6f5..0000000 --- a/node_modules/string.prototype.trim/polyfill.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var implementation = require('./implementation'); - -var zeroWidthSpace = '\u200b'; - -module.exports = function getPolyfill() { - if (String.prototype.trim && zeroWidthSpace.trim() === zeroWidthSpace) { - return String.prototype.trim; - } - return implementation; -}; diff --git a/node_modules/string.prototype.trim/shim.js b/node_modules/string.prototype.trim/shim.js deleted file mode 100644 index 477025c..0000000 --- a/node_modules/string.prototype.trim/shim.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var define = require('define-properties'); -var getPolyfill = require('./polyfill'); - -module.exports = function shimStringTrim() { - var polyfill = getPolyfill(); - define(String.prototype, { trim: polyfill }, { trim: function () { return String.prototype.trim !== polyfill; } }); - return polyfill; -}; diff --git a/node_modules/string.prototype.trim/test/index.js b/node_modules/string.prototype.trim/test/index.js deleted file mode 100644 index a735984..0000000 --- a/node_modules/string.prototype.trim/test/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var trim = require('../'); -var test = require('tape'); -var runTests = require('./tests'); - -test('as a function', function (t) { - t.test('bad array/this value', function (st) { - st.throws(function () { trim(undefined, 'a'); }, TypeError, 'undefined is not an object'); - st.throws(function () { trim(null, 'a'); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(trim, t); - - t.end(); -}); diff --git a/node_modules/string.prototype.trim/test/shimmed.js b/node_modules/string.prototype.trim/test/shimmed.js deleted file mode 100644 index 95d9b2d..0000000 --- a/node_modules/string.prototype.trim/test/shimmed.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var trim = require('../'); -trim.shim(); - -var test = require('tape'); -var defineProperties = require('define-properties'); -var bind = require('function-bind'); -var isEnumerable = Object.prototype.propertyIsEnumerable; -var functionsHaveNames = function f() {}.name === 'f'; - -var runTests = require('./tests'); - -test('shimmed', function (t) { - t.equal(String.prototype.trim.length, 0, 'String#trim has a length of 0'); - t.test('Function name', { skip: !functionsHaveNames }, function (st) { - st.equal(String.prototype.trim.name, 'trim', 'String#trim has name "trim"'); - st.end(); - }); - - t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) { - et.equal(false, isEnumerable.call(String.prototype, 'trim'), 'String#trim is not enumerable'); - et.end(); - }); - - var supportsStrictMode = (function () { return typeof this === 'undefined'; }()); - - t.test('bad string/this value', { skip: !supportsStrictMode }, function (st) { - st.throws(function () { return trim(undefined, 'a'); }, TypeError, 'undefined is not an object'); - st.throws(function () { return trim(null, 'a'); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(bind.call(Function.call, String.prototype.trim), t); - - t.end(); -}); diff --git a/node_modules/string.prototype.trim/test/tests.js b/node_modules/string.prototype.trim/test/tests.js deleted file mode 100644 index 6e3889c..0000000 --- a/node_modules/string.prototype.trim/test/tests.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -module.exports = function (trim, t) { - t.test('normal cases', function (st) { - st.equal(trim(' \t\na \t\n'), 'a', 'strips whitespace off left and right sides'); - st.equal(trim('a'), 'a', 'noop when no whitespace'); - - var allWhitespaceChars = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; - st.equal(trim(allWhitespaceChars + 'a' + allWhitespaceChars), 'a', 'all expected whitespace chars are trimmed'); - - st.end(); - }); - - t.test('zero-width spaces', function (st) { - var zeroWidth = '\u200b'; - st.equal(trim(zeroWidth), zeroWidth, 'zero width space does not trim'); - st.end(); - }); -}; diff --git a/node_modules/string_decoder/.npmignore b/node_modules/string_decoder/.npmignore deleted file mode 100644 index 206320c..0000000 --- a/node_modules/string_decoder/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -build -test diff --git a/node_modules/string_decoder/LICENSE b/node_modules/string_decoder/LICENSE deleted file mode 100644 index 6de584a..0000000 --- a/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string_decoder/README.md b/node_modules/string_decoder/README.md deleted file mode 100644 index 4d2aa00..0000000 --- a/node_modules/string_decoder/README.md +++ /dev/null @@ -1,7 +0,0 @@ -**string_decoder.js** (`require('string_decoder')`) from Node.js core - -Copyright Joyent, Inc. and other Node contributors. See LICENCE file for details. - -Version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. **Prefer the stable version over the unstable.** - -The *build/* directory contains a build script that will scrape the source from the [joyent/node](https://github.com/joyent/node) repo given a specific Node version. \ No newline at end of file diff --git a/node_modules/string_decoder/index.js b/node_modules/string_decoder/index.js deleted file mode 100644 index b00e54f..0000000 --- a/node_modules/string_decoder/index.js +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var Buffer = require('buffer').Buffer; - -var isBufferEncoding = Buffer.isEncoding - || function(encoding) { - switch (encoding && encoding.toLowerCase()) { - case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; - default: return false; - } - } - - -function assertEncoding(encoding) { - if (encoding && !isBufferEncoding(encoding)) { - throw new Error('Unknown encoding: ' + encoding); - } -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. CESU-8 is handled as part of the UTF-8 encoding. -// -// @TODO Handling all encodings inside a single object makes it very difficult -// to reason about this code, so it should be split up in the future. -// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code -// points as used by CESU-8. -var StringDecoder = exports.StringDecoder = function(encoding) { - this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); - assertEncoding(encoding); - switch (this.encoding) { - case 'utf8': - // CESU-8 represents each of Surrogate Pair by 3-bytes - this.surrogateSize = 3; - break; - case 'ucs2': - case 'utf16le': - // UTF-16 represents each of Surrogate Pair by 2-bytes - this.surrogateSize = 2; - this.detectIncompleteChar = utf16DetectIncompleteChar; - break; - case 'base64': - // Base-64 stores 3 bytes in 4 chars, and pads the remainder. - this.surrogateSize = 3; - this.detectIncompleteChar = base64DetectIncompleteChar; - break; - default: - this.write = passThroughWrite; - return; - } - - // Enough space to store all bytes of a single character. UTF-8 needs 4 - // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). - this.charBuffer = new Buffer(6); - // Number of bytes received for the current incomplete multi-byte character. - this.charReceived = 0; - // Number of bytes expected for the current incomplete multi-byte character. - this.charLength = 0; -}; - - -// write decodes the given buffer and returns it as JS string that is -// guaranteed to not contain any partial multi-byte characters. Any partial -// character found at the end of the buffer is buffered up, and will be -// returned when calling write again with the remaining bytes. -// -// Note: Converting a Buffer containing an orphan surrogate to a String -// currently works, but converting a String to a Buffer (via `new Buffer`, or -// Buffer#write) will replace incomplete surrogates with the unicode -// replacement character. See https://codereview.chromium.org/121173009/ . -StringDecoder.prototype.write = function(buffer) { - var charStr = ''; - // if our last write ended with an incomplete multibyte character - while (this.charLength) { - // determine how many remaining bytes this buffer has to offer for this char - var available = (buffer.length >= this.charLength - this.charReceived) ? - this.charLength - this.charReceived : - buffer.length; - - // add the new bytes to the char buffer - buffer.copy(this.charBuffer, this.charReceived, 0, available); - this.charReceived += available; - - if (this.charReceived < this.charLength) { - // still not enough chars in this buffer? wait for more ... - return ''; - } - - // remove bytes belonging to the current character from the buffer - buffer = buffer.slice(available, buffer.length); - - // get the character that was split - charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); - - // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character - var charCode = charStr.charCodeAt(charStr.length - 1); - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - this.charLength += this.surrogateSize; - charStr = ''; - continue; - } - this.charReceived = this.charLength = 0; - - // if there are no more bytes in this buffer, just emit our char - if (buffer.length === 0) { - return charStr; - } - break; - } - - // determine and set charLength / charReceived - this.detectIncompleteChar(buffer); - - var end = buffer.length; - if (this.charLength) { - // buffer the incomplete character bytes we got - buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); - end -= this.charReceived; - } - - charStr += buffer.toString(this.encoding, 0, end); - - var end = charStr.length - 1; - var charCode = charStr.charCodeAt(end); - // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - var size = this.surrogateSize; - this.charLength += size; - this.charReceived += size; - this.charBuffer.copy(this.charBuffer, size, 0, size); - buffer.copy(this.charBuffer, 0, 0, size); - return charStr.substring(0, end); - } - - // or just emit the charStr - return charStr; -}; - -// detectIncompleteChar determines if there is an incomplete UTF-8 character at -// the end of the given buffer. If so, it sets this.charLength to the byte -// length that character, and sets this.charReceived to the number of bytes -// that are available for this character. -StringDecoder.prototype.detectIncompleteChar = function(buffer) { - // determine how many bytes we have to check at the end of this buffer - var i = (buffer.length >= 3) ? 3 : buffer.length; - - // Figure out if one of the last i bytes of our buffer announces an - // incomplete char. - for (; i > 0; i--) { - var c = buffer[buffer.length - i]; - - // See http://en.wikipedia.org/wiki/UTF-8#Description - - // 110XXXXX - if (i == 1 && c >> 5 == 0x06) { - this.charLength = 2; - break; - } - - // 1110XXXX - if (i <= 2 && c >> 4 == 0x0E) { - this.charLength = 3; - break; - } - - // 11110XXX - if (i <= 3 && c >> 3 == 0x1E) { - this.charLength = 4; - break; - } - } - this.charReceived = i; -}; - -StringDecoder.prototype.end = function(buffer) { - var res = ''; - if (buffer && buffer.length) - res = this.write(buffer); - - if (this.charReceived) { - var cr = this.charReceived; - var buf = this.charBuffer; - var enc = this.encoding; - res += buf.slice(0, cr).toString(enc); - } - - return res; -}; - -function passThroughWrite(buffer) { - return buffer.toString(this.encoding); -} - -function utf16DetectIncompleteChar(buffer) { - this.charReceived = buffer.length % 2; - this.charLength = this.charReceived ? 2 : 0; -} - -function base64DetectIncompleteChar(buffer) { - this.charReceived = buffer.length % 3; - this.charLength = this.charReceived ? 3 : 0; -} diff --git a/node_modules/string_decoder/package.json b/node_modules/string_decoder/package.json deleted file mode 100644 index 1ee3d70..0000000 --- a/node_modules/string_decoder/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "string_decoder@~0.10.x", - "/Users/jbaylina/git/MVP/node_modules/level-ws/node_modules/readable-stream" - ] - ], - "_from": "string_decoder@>=0.10.0 <0.11.0", - "_id": "string_decoder@0.10.31", - "_inCache": true, - "_installable": true, - "_location": "/string_decoder", - "_npmUser": { - "email": "rod@vagg.org", - "name": "rvagg" - }, - "_npmVersion": "1.4.23", - "_phantomChildren": {}, - "_requested": { - "name": "string_decoder", - "raw": "string_decoder@~0.10.x", - "rawSpec": "~0.10.x", - "scope": null, - "spec": ">=0.10.0 <0.11.0", - "type": "range" - }, - "_requiredBy": [ - "/bl/readable-stream", - "/level-iterator-stream/readable-stream", - "/level-ws/readable-stream", - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", - "_shrinkwrap": null, - "_spec": "string_decoder@~0.10.x", - "_where": "/Users/jbaylina/git/MVP/node_modules/level-ws/node_modules/readable-stream", - "bugs": { - "url": "https://github.com/rvagg/string_decoder/issues" - }, - "dependencies": {}, - "description": "The string_decoder module from Node core", - "devDependencies": { - "tap": "~0.4.8" - }, - "directories": {}, - "dist": { - "shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", - "tarball": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - }, - "gitHead": "d46d4fd87cf1d06e031c23f1ba170ca7d4ade9a0", - "homepage": "https://github.com/rvagg/string_decoder", - "keywords": [ - "string", - "decoder", - "browser", - "browserify" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - }, - { - "email": "rod@vagg.org", - "name": "rvagg" - } - ], - "name": "string_decoder", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/rvagg/string_decoder.git" - }, - "scripts": { - "test": "tap test/simple/*.js" - }, - "version": "0.10.31" -} diff --git a/node_modules/stringstream/.npmignore b/node_modules/stringstream/.npmignore deleted file mode 100644 index 7dccd97..0000000 --- a/node_modules/stringstream/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz - -pids -logs -results - -node_modules -npm-debug.log \ No newline at end of file diff --git a/node_modules/stringstream/.travis.yml b/node_modules/stringstream/.travis.yml deleted file mode 100644 index f1d0f13..0000000 --- a/node_modules/stringstream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/node_modules/stringstream/LICENSE.txt b/node_modules/stringstream/LICENSE.txt deleted file mode 100644 index ab861ac..0000000 --- a/node_modules/stringstream/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 Michael Hart (michael.hart.au@gmail.com) - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/stringstream/README.md b/node_modules/stringstream/README.md deleted file mode 100644 index 32fc982..0000000 --- a/node_modules/stringstream/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Decode streams into strings The Right Way(tm) - -```javascript -var fs = require('fs') -var zlib = require('zlib') -var strs = require('stringstream') - -var utf8Stream = fs.createReadStream('massiveLogFile.gz') - .pipe(zlib.createGunzip()) - .pipe(strs('utf8')) -``` - -No need to deal with `setEncoding()` weirdness, just compose streams -like they were supposed to be! - -Handles input and output encoding: - -```javascript -// Stream from utf8 to hex to base64... Why not, ay. -var hex64Stream = fs.createReadStream('myFile') - .pipe(strs('utf8', 'hex')) - .pipe(strs('hex', 'base64')) -``` - -Also deals with `base64` output correctly by aligning each emitted data -chunk so that there are no dangling `=` characters: - -```javascript -var stream = fs.createReadStream('myFile').pipe(strs('base64')) - -var base64Str = '' - -stream.on('data', function(data) { base64Str += data }) -stream.on('end', function() { - console.log('My base64 encoded file is: ' + base64Str) // Wouldn't work with setEncoding() - console.log('Original file is: ' + new Buffer(base64Str, 'base64')) -}) -``` diff --git a/node_modules/stringstream/example.js b/node_modules/stringstream/example.js deleted file mode 100644 index f82b85e..0000000 --- a/node_modules/stringstream/example.js +++ /dev/null @@ -1,27 +0,0 @@ -var fs = require('fs') -var zlib = require('zlib') -var strs = require('stringstream') - -var utf8Stream = fs.createReadStream('massiveLogFile.gz') - .pipe(zlib.createGunzip()) - .pipe(strs('utf8')) - -utf8Stream.pipe(process.stdout) - -// Stream from utf8 to hex to base64... Why not, ay. -var hex64Stream = fs.createReadStream('myFile') - .pipe(strs('utf8', 'hex')) - .pipe(strs('hex', 'base64')) - -hex64Stream.pipe(process.stdout) - -// Deals with base64 correctly by aligning chunks -var stream = fs.createReadStream('myFile').pipe(strs('base64')) - -var base64Str = '' - -stream.on('data', function(data) { base64Str += data }) -stream.on('end', function() { - console.log('My base64 encoded file is: ' + base64Str) // Wouldn't work with setEncoding() - console.log('Original file is: ' + new Buffer(base64Str, 'base64')) -}) diff --git a/node_modules/stringstream/package.json b/node_modules/stringstream/package.json deleted file mode 100644 index e362388..0000000 --- a/node_modules/stringstream/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_args": [ - [ - "stringstream@~0.0.4", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "stringstream@>=0.0.4 <0.1.0", - "_id": "stringstream@0.0.5", - "_inCache": true, - "_installable": true, - "_location": "/stringstream", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "michael.hart.au@gmail.com", - "name": "hichaelmart" - }, - "_npmVersion": "2.14.8", - "_phantomChildren": {}, - "_requested": { - "name": "stringstream", - "raw": "stringstream@~0.0.4", - "rawSpec": "~0.0.4", - "scope": null, - "spec": ">=0.0.4 <0.1.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "_shasum": "4e484cd4de5a0bbbee18e46307710a8a81621878", - "_shrinkwrap": null, - "_spec": "stringstream@~0.0.4", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "michael.hart.au@gmail.com", - "name": "Michael Hart", - "url": "http://github.com/mhart" - }, - "bugs": { - "url": "https://github.com/mhart/StringStream/issues" - }, - "dependencies": {}, - "description": "Encode and decode streams into string streams", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "4e484cd4de5a0bbbee18e46307710a8a81621878", - "tarball": "http://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" - }, - "gitHead": "1efe3bf507bf3a1161f8473908b60e881d41422b", - "homepage": "https://github.com/mhart/StringStream#readme", - "keywords": [ - "string", - "stream", - "base64", - "gzip" - ], - "license": "MIT", - "main": "stringstream.js", - "maintainers": [ - { - "email": "michael.hart.au@gmail.com", - "name": "hichaelmart" - } - ], - "name": "stringstream", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mhart/StringStream.git" - }, - "scripts": {}, - "version": "0.0.5" -} diff --git a/node_modules/stringstream/stringstream.js b/node_modules/stringstream/stringstream.js deleted file mode 100644 index 4ece127..0000000 --- a/node_modules/stringstream/stringstream.js +++ /dev/null @@ -1,102 +0,0 @@ -var util = require('util') -var Stream = require('stream') -var StringDecoder = require('string_decoder').StringDecoder - -module.exports = StringStream -module.exports.AlignedStringDecoder = AlignedStringDecoder - -function StringStream(from, to) { - if (!(this instanceof StringStream)) return new StringStream(from, to) - - Stream.call(this) - - if (from == null) from = 'utf8' - - this.readable = this.writable = true - this.paused = false - this.toEncoding = (to == null ? from : to) - this.fromEncoding = (to == null ? '' : from) - this.decoder = new AlignedStringDecoder(this.toEncoding) -} -util.inherits(StringStream, Stream) - -StringStream.prototype.write = function(data) { - if (!this.writable) { - var err = new Error('stream not writable') - err.code = 'EPIPE' - this.emit('error', err) - return false - } - if (this.fromEncoding) { - if (Buffer.isBuffer(data)) data = data.toString() - data = new Buffer(data, this.fromEncoding) - } - var string = this.decoder.write(data) - if (string.length) this.emit('data', string) - return !this.paused -} - -StringStream.prototype.flush = function() { - if (this.decoder.flush) { - var string = this.decoder.flush() - if (string.length) this.emit('data', string) - } -} - -StringStream.prototype.end = function() { - if (!this.writable && !this.readable) return - this.flush() - this.emit('end') - this.writable = this.readable = false - this.destroy() -} - -StringStream.prototype.destroy = function() { - this.decoder = null - this.writable = this.readable = false - this.emit('close') -} - -StringStream.prototype.pause = function() { - this.paused = true -} - -StringStream.prototype.resume = function () { - if (this.paused) this.emit('drain') - this.paused = false -} - -function AlignedStringDecoder(encoding) { - StringDecoder.call(this, encoding) - - switch (this.encoding) { - case 'base64': - this.write = alignedWrite - this.alignedBuffer = new Buffer(3) - this.alignedBytes = 0 - break - } -} -util.inherits(AlignedStringDecoder, StringDecoder) - -AlignedStringDecoder.prototype.flush = function() { - if (!this.alignedBuffer || !this.alignedBytes) return '' - var leftover = this.alignedBuffer.toString(this.encoding, 0, this.alignedBytes) - this.alignedBytes = 0 - return leftover -} - -function alignedWrite(buffer) { - var rem = (this.alignedBytes + buffer.length) % this.alignedBuffer.length - if (!rem && !this.alignedBytes) return buffer.toString(this.encoding) - - var returnBuffer = new Buffer(this.alignedBytes + buffer.length - rem) - - this.alignedBuffer.copy(returnBuffer, 0, 0, this.alignedBytes) - buffer.copy(returnBuffer, this.alignedBytes, 0, buffer.length - rem) - - buffer.copy(this.alignedBuffer, 0, buffer.length - rem, buffer.length) - this.alignedBytes = rem - - return returnBuffer.toString(this.encoding) -} diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js deleted file mode 100644 index 099480f..0000000 --- a/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; -var ansiRegex = require('ansi-regex')(); - -module.exports = function (str) { - return typeof str === 'string' ? str.replace(ansiRegex, '') : str; -}; diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/strip-ansi/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json deleted file mode 100644 index 4fff2a8..0000000 --- a/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "_args": [ - [ - "strip-ansi@^3.0.0", - "/Users/jbaylina/git/MVP/node_modules/chalk" - ] - ], - "_from": "strip-ansi@>=3.0.0 <4.0.0", - "_id": "strip-ansi@3.0.1", - "_inCache": true, - "_installable": true, - "_location": "/strip-ansi", - "_nodeVersion": "0.12.7", - "_npmOperationalInternal": { - "host": "packages-9-west.internal.npmjs.com", - "tmp": "tmp/strip-ansi-3.0.1.tgz_1456057278183_0.28958667791448534" - }, - "_npmUser": { - "email": "jappelman@xebia.com", - "name": "jbnicolai" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": {}, - "_requested": { - "name": "strip-ansi", - "raw": "strip-ansi@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/chalk", - "/cliui", - "/string-width" - ], - "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "_shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", - "_shrinkwrap": null, - "_spec": "strip-ansi@^3.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/chalk", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/chalk/strip-ansi/issues" - }, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "description": "Strip ANSI escape codes", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", - "tarball": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "8270705c704956da865623e564eba4875c3ea17f", - "homepage": "https://github.com/chalk/strip-ansi", - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - { - "email": "jappelman@xebia.com", - "name": "jbnicolai" - } - ], - "name": "strip-ansi", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/chalk/strip-ansi.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "3.0.1" -} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md deleted file mode 100644 index cb7d9ff..0000000 --- a/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install --save strip-ansi -``` - - -## Usage - -```js -var stripAnsi = require('strip-ansi'); - -stripAnsi('\u001b[4mcake\u001b[0m'); -//=> 'cake' -``` - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/strip-bom/index.js b/node_modules/strip-bom/index.js deleted file mode 100644 index 5695c5c..0000000 --- a/node_modules/strip-bom/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; -var isUtf8 = require('is-utf8'); - -module.exports = function (x) { - // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string - // conversion translates it to FEFF (UTF-16 BOM) - if (typeof x === 'string' && x.charCodeAt(0) === 0xFEFF) { - return x.slice(1); - } - - if (Buffer.isBuffer(x) && isUtf8(x) && - x[0] === 0xEF && x[1] === 0xBB && x[2] === 0xBF) { - return x.slice(3); - } - - return x; -}; diff --git a/node_modules/strip-bom/license b/node_modules/strip-bom/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/strip-bom/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/strip-bom/package.json b/node_modules/strip-bom/package.json deleted file mode 100644 index 41cd8d9..0000000 --- a/node_modules/strip-bom/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "strip-bom@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/load-json-file" - ] - ], - "_from": "strip-bom@>=2.0.0 <3.0.0", - "_id": "strip-bom@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/strip-bom", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.11.2", - "_phantomChildren": {}, - "_requested": { - "name": "strip-bom", - "raw": "strip-bom@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/load-json-file" - ], - "_resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "_shasum": "6219a85616520491f35788bdbf1447a99c7e6b0e", - "_shrinkwrap": null, - "_spec": "strip-bom@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/load-json-file", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/strip-bom/issues" - }, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "description": "Strip UTF-8 byte order mark (BOM) from a string/buffer", - "devDependencies": { - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "6219a85616520491f35788bdbf1447a99c7e6b0e", - "tarball": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "851b9c126dba9561cc14ef3dc2634dcc11df4d11", - "homepage": "https://github.com/sindresorhus/strip-bom", - "keywords": [ - "bom", - "strip", - "byte", - "mark", - "unicode", - "utf8", - "utf-8", - "remove", - "delete", - "trim", - "text", - "buffer", - "string" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "strip-bom", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/strip-bom.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "2.0.0" -} diff --git a/node_modules/strip-bom/readme.md b/node_modules/strip-bom/readme.md deleted file mode 100644 index 8ecf258..0000000 --- a/node_modules/strip-bom/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# strip-bom [![Build Status](https://travis-ci.org/sindresorhus/strip-bom.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-bom) - -> Strip UTF-8 [byte order mark](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8) (BOM) from a string/buffer - -From Wikipedia: - -> The Unicode Standard permits the BOM in UTF-8, but does not require nor recommend its use. Byte order has no meaning in UTF-8. - - -## Install - -``` -$ npm install --save strip-bom -``` - - -## Usage - -```js -var fs = require('fs'); -var stripBom = require('strip-bom'); - -stripBom('\uFEFFunicorn'); -//=> 'unicorn' - -stripBom(fs.readFileSync('unicorn.txt')); -//=> 'unicorn' -``` - - -## Related - -- [strip-bom-cli](https://github.com/sindresorhus/strip-bom-cli) - CLI for this module -- [strip-bom-stream](https://github.com/sindresorhus/strip-bom-stream) - Stream version of this module - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/supports-color/index.js b/node_modules/supports-color/index.js deleted file mode 100644 index 4346e27..0000000 --- a/node_modules/supports-color/index.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; -var argv = process.argv; - -var terminator = argv.indexOf('--'); -var hasFlag = function (flag) { - flag = '--' + flag; - var pos = argv.indexOf(flag); - return pos !== -1 && (terminator !== -1 ? pos < terminator : true); -}; - -module.exports = (function () { - if ('FORCE_COLOR' in process.env) { - return true; - } - - if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false')) { - return false; - } - - if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - return true; - } - - if (process.stdout && !process.stdout.isTTY) { - return false; - } - - if (process.platform === 'win32') { - return true; - } - - if ('COLORTERM' in process.env) { - return true; - } - - if (process.env.TERM === 'dumb') { - return false; - } - - if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { - return true; - } - - return false; -})(); diff --git a/node_modules/supports-color/license b/node_modules/supports-color/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/supports-color/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/supports-color/package.json b/node_modules/supports-color/package.json deleted file mode 100644 index 64d997a..0000000 --- a/node_modules/supports-color/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "supports-color@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/chalk" - ] - ], - "_from": "supports-color@>=2.0.0 <3.0.0", - "_id": "supports-color@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/supports-color", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.11.2", - "_phantomChildren": {}, - "_requested": { - "name": "supports-color", - "raw": "supports-color@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/chalk" - ], - "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "_shasum": "535d045ce6b6363fa40117084629995e9df324c7", - "_shrinkwrap": null, - "_spec": "supports-color@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/chalk", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/chalk/supports-color/issues" - }, - "dependencies": {}, - "description": "Detect whether a terminal supports color", - "devDependencies": { - "mocha": "*", - "require-uncached": "^1.0.2" - }, - "directories": {}, - "dist": { - "shasum": "535d045ce6b6363fa40117084629995e9df324c7", - "tarball": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - }, - "engines": { - "node": ">=0.8.0" - }, - "files": [ - "index.js" - ], - "gitHead": "8400d98ade32b2adffd50902c06d9e725a5c6588", - "homepage": "https://github.com/chalk/supports-color", - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "ansi", - "styles", - "tty", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "support", - "supports", - "capability", - "detect" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - { - "email": "jappelman@xebia.com", - "name": "jbnicolai" - } - ], - "name": "supports-color", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/chalk/supports-color.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "2.0.0" -} diff --git a/node_modules/supports-color/readme.md b/node_modules/supports-color/readme.md deleted file mode 100644 index b4761f1..0000000 --- a/node_modules/supports-color/readme.md +++ /dev/null @@ -1,36 +0,0 @@ -# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) - -> Detect whether a terminal supports color - - -## Install - -``` -$ npm install --save supports-color -``` - - -## Usage - -```js -var supportsColor = require('supports-color'); - -if (supportsColor) { - console.log('Terminal supports color'); -} -``` - -It obeys the `--color` and `--no-color` CLI flags. - -For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`. - - -## Related - -- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/tape/.npmignore b/node_modules/tape/.npmignore deleted file mode 100644 index 07e6e47..0000000 --- a/node_modules/tape/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/node_modules/tape/.travis.yml b/node_modules/tape/.travis.yml deleted file mode 100644 index a699c63..0000000 --- a/node_modules/tape/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -sudo: true -node_js: - - "0.10" - - "0.12" - - "iojs" - - "4" - - "5" - - "6" diff --git a/node_modules/tape/LICENSE b/node_modules/tape/LICENSE deleted file mode 100644 index ee27ba4..0000000 --- a/node_modules/tape/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/tape/bin/tape b/node_modules/tape/bin/tape deleted file mode 100755 index 498910c..0000000 --- a/node_modules/tape/bin/tape +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env node - -var resolveModule = require('resolve').sync; -var resolvePath = require('path').resolve; -var parseOpts = require('minimist'); -var glob = require('glob'); - -var opts = parseOpts(process.argv.slice(2), { - alias: { r: 'require' }, - string: 'require', - default: { r: [] } - }); - -var cwd = process.cwd(); - -if (typeof opts.require === 'string') { - opts.require = [opts.require]; -} - -opts.require.forEach(function(module) { - if (module) { - /* This check ensures we ignore `-r ""`, trailing `-r`, or - * other silly things the user might (inadvertently) be doing. */ - require(resolveModule(module, { basedir: cwd })); - } -}); - -opts._.forEach(function (arg) { - glob(arg, function (err, files) { - files.forEach(function (file) { - require(resolvePath(cwd, file)); - }); - }); -}); - -// vim: ft=javascript diff --git a/node_modules/tape/example/array.js b/node_modules/tape/example/array.js deleted file mode 100644 index d36857d..0000000 --- a/node_modules/tape/example/array.js +++ /dev/null @@ -1,35 +0,0 @@ -var falafel = require('falafel'); -var test = require('../'); - -test('array', function (t) { - t.plan(5); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); -}); diff --git a/node_modules/tape/example/fail.js b/node_modules/tape/example/fail.js deleted file mode 100644 index a7bf444..0000000 --- a/node_modules/tape/example/fail.js +++ /dev/null @@ -1,35 +0,0 @@ -var falafel = require('falafel'); -var test = require('../'); - -test('array', function (t) { - t.plan(5); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]); - } - ); -}); diff --git a/node_modules/tape/example/nested.js b/node_modules/tape/example/nested.js deleted file mode 100644 index 0e233d3..0000000 --- a/node_modules/tape/example/nested.js +++ /dev/null @@ -1,51 +0,0 @@ -var falafel = require('falafel'); -var test = require('../'); - -test('nested array test', function (t) { - t.plan(5); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - t.test('inside test', function (q) { - q.plan(2); - q.ok(true, 'inside ok'); - - setTimeout(function () { - q.ok(true, 'inside delayed'); - }, 3000); - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); -}); - -test('another', function (t) { - t.plan(1); - setTimeout(function () { - t.ok(true); - }, 100); -}); diff --git a/node_modules/tape/example/nested_fail.js b/node_modules/tape/example/nested_fail.js deleted file mode 100644 index 3ab5cb3..0000000 --- a/node_modules/tape/example/nested_fail.js +++ /dev/null @@ -1,51 +0,0 @@ -var falafel = require('falafel'); -var test = require('../'); - -test('nested array test', function (t) { - t.plan(5); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - t.test('inside test', function (q) { - q.plan(2); - q.ok(true); - - setTimeout(function () { - q.equal(3, 4); - }, 3000); - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); -}); - -test('another', function (t) { - t.plan(1); - setTimeout(function () { - t.ok(true); - }, 100); -}); diff --git a/node_modules/tape/example/not_enough.js b/node_modules/tape/example/not_enough.js deleted file mode 100644 index 13b682b..0000000 --- a/node_modules/tape/example/not_enough.js +++ /dev/null @@ -1,35 +0,0 @@ -var falafel = require('falafel'); -var test = require('../'); - -test('array', function (t) { - t.plan(8); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); -}); diff --git a/node_modules/tape/example/static/build.sh b/node_modules/tape/example/static/build.sh deleted file mode 100755 index c583640..0000000 --- a/node_modules/tape/example/static/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -browserify ../timing.js -o bundle.js diff --git a/node_modules/tape/example/static/index.html b/node_modules/tape/example/static/index.html deleted file mode 100644 index 45ccf07..0000000 --- a/node_modules/tape/example/static/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - diff --git a/node_modules/tape/example/static/server.js b/node_modules/tape/example/static/server.js deleted file mode 100644 index 80cea43..0000000 --- a/node_modules/tape/example/static/server.js +++ /dev/null @@ -1,4 +0,0 @@ -var http = require('http'); -var ecstatic = require('ecstatic')(__dirname); -var server = http.createServer(ecstatic); -server.listen(8000); diff --git a/node_modules/tape/example/stream/object.js b/node_modules/tape/example/stream/object.js deleted file mode 100644 index 8f77f0f..0000000 --- a/node_modules/tape/example/stream/object.js +++ /dev/null @@ -1,10 +0,0 @@ -var test = require('../../'); -var path = require('path'); - -test.createStream({ objectMode: true }).on('data', function (row) { - console.log(JSON.stringify(row)) -}); - -process.argv.slice(2).forEach(function (file) { - require(path.resolve(file)); -}); diff --git a/node_modules/tape/example/stream/tap.js b/node_modules/tape/example/stream/tap.js deleted file mode 100644 index 9ea9ff7..0000000 --- a/node_modules/tape/example/stream/tap.js +++ /dev/null @@ -1,8 +0,0 @@ -var test = require('../../'); -var path = require('path'); - -test.createStream().pipe(process.stdout); - -process.argv.slice(2).forEach(function (file) { - require(path.resolve(file)); -}); diff --git a/node_modules/tape/example/stream/test/x.js b/node_modules/tape/example/stream/test/x.js deleted file mode 100644 index 7dbb98a..0000000 --- a/node_modules/tape/example/stream/test/x.js +++ /dev/null @@ -1,5 +0,0 @@ -var test = require('../../../'); -test(function (t) { - t.plan(1); - t.equal('beep', 'boop'); -}); diff --git a/node_modules/tape/example/stream/test/y.js b/node_modules/tape/example/stream/test/y.js deleted file mode 100644 index 28606d5..0000000 --- a/node_modules/tape/example/stream/test/y.js +++ /dev/null @@ -1,11 +0,0 @@ -var test = require('../../../'); -test(function (t) { - t.plan(2); - t.equal(1+1, 2); - t.ok(true); -}); - -test('wheee', function (t) { - t.ok(true); - t.end(); -}); diff --git a/node_modules/tape/example/throw.js b/node_modules/tape/example/throw.js deleted file mode 100644 index 9a69ec0..0000000 --- a/node_modules/tape/example/throw.js +++ /dev/null @@ -1,10 +0,0 @@ -var falafel = require('falafel'); -var test = require('../'); - -test('throw', function (t) { - t.plan(2); - - setTimeout(function () { - throw new Error('doom'); - }, 100); -}); diff --git a/node_modules/tape/example/timing.js b/node_modules/tape/example/timing.js deleted file mode 100644 index 0268dc7..0000000 --- a/node_modules/tape/example/timing.js +++ /dev/null @@ -1,12 +0,0 @@ -var test = require('../'); - -test('timing test', function (t) { - t.plan(2); - - t.equal(typeof Date.now, 'function'); - var start = new Date; - - setTimeout(function () { - t.equal(new Date - start, 100); - }, 100); -}); diff --git a/node_modules/tape/example/too_many.js b/node_modules/tape/example/too_many.js deleted file mode 100644 index ee285fb..0000000 --- a/node_modules/tape/example/too_many.js +++ /dev/null @@ -1,35 +0,0 @@ -var falafel = require('falafel'); -var test = require('../'); - -test('array', function (t) { - t.plan(3); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); -}); diff --git a/node_modules/tape/example/two.js b/node_modules/tape/example/two.js deleted file mode 100644 index 78e49c3..0000000 --- a/node_modules/tape/example/two.js +++ /dev/null @@ -1,18 +0,0 @@ -var test = require('../'); - -test('one', function (t) { - t.plan(2); - t.ok(true); - setTimeout(function () { - t.equal(1+3, 4); - }, 100); -}); - -test('two', function (t) { - t.plan(3); - t.equal(5, 2+3); - setTimeout(function () { - t.equal('a'.charCodeAt(0), 97); - t.ok(true); - }, 50); -}); diff --git a/node_modules/tape/index.js b/node_modules/tape/index.js deleted file mode 100644 index f3ffcae..0000000 --- a/node_modules/tape/index.js +++ /dev/null @@ -1,151 +0,0 @@ -var defined = require('defined'); -var createDefaultStream = require('./lib/default_stream'); -var Test = require('./lib/test'); -var createResult = require('./lib/results'); -var through = require('through'); - -var canEmitExit = typeof process !== 'undefined' && process - && typeof process.on === 'function' && process.browser !== true -; -var canExit = typeof process !== 'undefined' && process - && typeof process.exit === 'function' -; - -var nextTick = typeof setImmediate !== 'undefined' - ? setImmediate - : process.nextTick -; - -exports = module.exports = (function () { - var harness; - var lazyLoad = function () { - return getHarness().apply(this, arguments); - }; - - lazyLoad.only = function () { - return getHarness().only.apply(this, arguments); - }; - - lazyLoad.createStream = function (opts) { - if (!opts) opts = {}; - if (!harness) { - var output = through(); - getHarness({ stream: output, objectMode: opts.objectMode }); - return output; - } - return harness.createStream(opts); - }; - - lazyLoad.onFinish = function () { - return getHarness().onFinish.apply(this, arguments); - }; - - lazyLoad.getHarness = getHarness - - return lazyLoad - - function getHarness (opts) { - if (!opts) opts = {}; - opts.autoclose = !canEmitExit; - if (!harness) harness = createExitHarness(opts); - return harness; - } -})(); - -function createExitHarness (conf) { - if (!conf) conf = {}; - var harness = createHarness({ - autoclose: defined(conf.autoclose, false) - }); - - var stream = harness.createStream({ objectMode: conf.objectMode }); - var es = stream.pipe(conf.stream || createDefaultStream()); - if (canEmitExit) { - es.on('error', function (err) { harness._exitCode = 1 }); - } - - var ended = false; - stream.on('end', function () { ended = true }); - - if (conf.exit === false) return harness; - if (!canEmitExit || !canExit) return harness; - - var inErrorState = false; - - process.on('exit', function (code) { - // let the process exit cleanly. - if (code !== 0) { - return - } - - if (!ended) { - var only = harness._results._only; - for (var i = 0; i < harness._tests.length; i++) { - var t = harness._tests[i]; - if (only && t !== only) continue; - t._exit(); - } - } - harness.close(); - process.exit(code || harness._exitCode); - }); - - return harness; -} - -exports.createHarness = createHarness; -exports.Test = Test; -exports.test = exports; // tap compat -exports.test.skip = Test.skip; - -var exitInterval; - -function createHarness (conf_) { - if (!conf_) conf_ = {}; - var results = createResult(); - if (conf_.autoclose !== false) { - results.once('done', function () { results.close() }); - } - - var test = function (name, conf, cb) { - var t = new Test(name, conf, cb); - test._tests.push(t); - - (function inspectCode (st) { - st.on('test', function sub (st_) { - inspectCode(st_); - }); - st.on('result', function (r) { - if (!r.ok && typeof r !== 'string') test._exitCode = 1 - }); - })(t); - - results.push(t); - return t; - }; - test._results = results; - - test._tests = []; - - test.createStream = function (opts) { - return results.createStream(opts); - }; - - test.onFinish = function (cb) { - results.on('done', cb); - }; - - var only = false; - test.only = function () { - if (only) throw new Error('there can only be one only test'); - only = true; - var t = test.apply(null, arguments); - results.only(t); - return t; - }; - test._exitCode = 0; - - test.close = function () { results.close() }; - - return test; -} diff --git a/node_modules/tape/lib/default_stream.js b/node_modules/tape/lib/default_stream.js deleted file mode 100644 index c8e9918..0000000 --- a/node_modules/tape/lib/default_stream.js +++ /dev/null @@ -1,31 +0,0 @@ -var through = require('through'); -var fs = require('fs'); - -module.exports = function () { - var line = ''; - var stream = through(write, flush); - return stream; - - function write (buf) { - for (var i = 0; i < buf.length; i++) { - var c = typeof buf === 'string' - ? buf.charAt(i) - : String.fromCharCode(buf[i]) - ; - if (c === '\n') flush(); - else line += c; - } - } - - function flush () { - if (fs.writeSync && /^win/.test(process.platform)) { - try { fs.writeSync(1, line + '\n'); } - catch (e) { stream.emit('error', e) } - } - else { - try { console.log(line) } - catch (e) { stream.emit('error', e) } - } - line = ''; - } -}; diff --git a/node_modules/tape/lib/results.js b/node_modules/tape/lib/results.js deleted file mode 100644 index efc60ce..0000000 --- a/node_modules/tape/lib/results.js +++ /dev/null @@ -1,188 +0,0 @@ -var EventEmitter = require('events').EventEmitter; -var inherits = require('inherits'); -var through = require('through'); -var resumer = require('resumer'); -var inspect = require('object-inspect'); -var bind = require('function-bind'); -var has = require('has'); -var regexpTest = bind.call(Function.call, RegExp.prototype.test); -var yamlIndicators = /\:|\-|\?/; -var nextTick = typeof setImmediate !== 'undefined' - ? setImmediate - : process.nextTick -; - -module.exports = Results; -inherits(Results, EventEmitter); - -function Results () { - if (!(this instanceof Results)) return new Results; - this.count = 0; - this.fail = 0; - this.pass = 0; - this._stream = through(); - this.tests = []; - this._only = null; -} - -Results.prototype.createStream = function (opts) { - if (!opts) opts = {}; - var self = this; - var output, testId = 0; - if (opts.objectMode) { - output = through(); - self.on('_push', function ontest (t, extra) { - if (!extra) extra = {}; - var id = testId++; - t.once('prerun', function () { - var row = { - type: 'test', - name: t.name, - id: id - }; - if (has(extra, 'parent')) { - row.parent = extra.parent; - } - output.queue(row); - }); - t.on('test', function (st) { - ontest(st, { parent: id }); - }); - t.on('result', function (res) { - res.test = id; - res.type = 'assert'; - output.queue(res); - }); - t.on('end', function () { - output.queue({ type: 'end', test: id }); - }); - }); - self.on('done', function () { output.queue(null) }); - } - else { - output = resumer(); - output.queue('TAP version 13\n'); - self._stream.pipe(output); - } - - nextTick(function next() { - var t; - while (t = getNextTest(self)) { - t.run(); - if (!t.ended) return t.once('end', function(){ nextTick(next); }); - } - self.emit('done'); - }); - - return output; -}; - -Results.prototype.push = function (t) { - var self = this; - self.tests.push(t); - self._watch(t); - self.emit('_push', t); -}; - -Results.prototype.only = function (t) { - this._only = t; -}; - -Results.prototype._watch = function (t) { - var self = this; - var write = function (s) { self._stream.queue(s) }; - t.once('prerun', function () { - write('# ' + t.name + '\n'); - }); - - t.on('result', function (res) { - if (typeof res === 'string') { - write('# ' + res + '\n'); - return; - } - write(encodeResult(res, self.count + 1)); - self.count ++; - - if (res.ok) self.pass ++ - else self.fail ++ - }); - - t.on('test', function (st) { self._watch(st) }); -}; - -Results.prototype.close = function () { - var self = this; - if (self.closed) self._stream.emit('error', new Error('ALREADY CLOSED')); - self.closed = true; - var write = function (s) { self._stream.queue(s) }; - - write('\n1..' + self.count + '\n'); - write('# tests ' + self.count + '\n'); - write('# pass ' + self.pass + '\n'); - if (self.fail) write('# fail ' + self.fail + '\n') - else write('\n# ok\n') - - self._stream.queue(null); -}; - -function encodeResult (res, count) { - var output = ''; - output += (res.ok ? 'ok ' : 'not ok ') + count; - output += res.name ? ' ' + res.name.toString().replace(/\s+/g, ' ') : ''; - - if (res.skip) output += ' # SKIP'; - else if (res.todo) output += ' # TODO'; - - output += '\n'; - if (res.ok) return output; - - var outer = ' '; - var inner = outer + ' '; - output += outer + '---\n'; - output += inner + 'operator: ' + res.operator + '\n'; - - if (has(res, 'expected') || has(res, 'actual')) { - var ex = inspect(res.expected, {depth: res.objectPrintDepth}); - var ac = inspect(res.actual, {depth: res.objectPrintDepth}); - - if (Math.max(ex.length, ac.length) > 65 || invalidYaml(ex) || invalidYaml(ac)) { - output += inner + 'expected: |-\n' + inner + ' ' + ex + '\n'; - output += inner + 'actual: |-\n' + inner + ' ' + ac + '\n'; - } - else { - output += inner + 'expected: ' + ex + '\n'; - output += inner + 'actual: ' + ac + '\n'; - } - } - if (res.at) { - output += inner + 'at: ' + res.at + '\n'; - } - if (res.operator === 'error' && res.actual && res.actual.stack) { - var lines = String(res.actual.stack).split('\n'); - output += inner + 'stack: |-\n'; - for (var i = 0; i < lines.length; i++) { - output += inner + ' ' + lines[i] + '\n'; - } - } - - output += outer + '...\n'; - return output; -} - -function getNextTest (results) { - if (!results._only) { - return results.tests.shift(); - } - - do { - var t = results.tests.shift(); - if (!t) continue; - if (results._only === t) { - return t; - } - } while (results.tests.length !== 0) -} - -function invalidYaml (str) { - return regexpTest(yamlIndicators, str); -} diff --git a/node_modules/tape/lib/test.js b/node_modules/tape/lib/test.js deleted file mode 100644 index d4b4b1c..0000000 --- a/node_modules/tape/lib/test.js +++ /dev/null @@ -1,507 +0,0 @@ -var deepEqual = require('deep-equal'); -var defined = require('defined'); -var path = require('path'); -var inherits = require('inherits'); -var EventEmitter = require('events').EventEmitter; -var has = require('has'); -var trim = require('string.prototype.trim'); -var bind = require('function-bind'); -var isEnumerable = bind.call(Function.call, Object.prototype.propertyIsEnumerable); - -module.exports = Test; - -var nextTick = typeof setImmediate !== 'undefined' - ? setImmediate - : process.nextTick -; -var safeSetTimeout = setTimeout; - -inherits(Test, EventEmitter); - -var getTestArgs = function (name_, opts_, cb_) { - var name = '(anonymous)'; - var opts = {}; - var cb; - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - var t = typeof arg; - if (t === 'string') { - name = arg; - } - else if (t === 'object') { - opts = arg || opts; - } - else if (t === 'function') { - cb = arg; - } - } - return { name: name, opts: opts, cb: cb }; -}; - -function Test (name_, opts_, cb_) { - if (! (this instanceof Test)) { - return new Test(name_, opts_, cb_); - } - - var args = getTestArgs(name_, opts_, cb_); - - this.readable = true; - this.name = args.name || '(anonymous)'; - this.assertCount = 0; - this.pendingCount = 0; - this._skip = args.opts.skip || false; - this._timeout = args.opts.timeout; - this._objectPrintDepth = args.opts.objectPrintDepth || 5; - this._plan = undefined; - this._cb = args.cb; - this._progeny = []; - this._ok = true; - - for (var prop in this) { - this[prop] = (function bind(self, val) { - if (typeof val === 'function') { - return function bound() { - return val.apply(self, arguments); - }; - } - else return val; - })(this, this[prop]); - } -} - -Test.prototype.run = function () { - if (this._skip) { - this.comment('SKIP ' + this.name); - } - if (!this._cb || this._skip) { - return this._end(); - } - if (this._timeout != null) { - this.timeoutAfter(this._timeout); - } - this.emit('prerun'); - this._cb(this); - this.emit('run'); -}; - -Test.prototype.test = function (name, opts, cb) { - var self = this; - var t = new Test(name, opts, cb); - this._progeny.push(t); - this.pendingCount++; - this.emit('test', t); - t.on('prerun', function () { - self.assertCount++; - }) - - if (!self._pendingAsserts()) { - nextTick(function () { - self._end(); - }); - } - - nextTick(function() { - if (!self._plan && self.pendingCount == self._progeny.length) { - self._end(); - } - }); -}; - -Test.prototype.comment = function (msg) { - var that = this; - trim(msg).split('\n').forEach(function (aMsg) { - that.emit('result', trim(aMsg).replace(/^#\s*/, '')); - }); -}; - -Test.prototype.plan = function (n) { - this._plan = n; - this.emit('plan', n); -}; - -Test.prototype.timeoutAfter = function(ms) { - if (!ms) throw new Error('timeoutAfter requires a timespan'); - var self = this; - var timeout = safeSetTimeout(function() { - self.fail('test timed out after ' + ms + 'ms'); - self.end(); - }, ms); - this.once('end', function() { - clearTimeout(timeout); - }); -} - -Test.prototype.end = function (err) { - var self = this; - if (arguments.length >= 1 && !!err) { - this.ifError(err); - } - - if (this.calledEnd) { - this.fail('.end() called twice'); - } - this.calledEnd = true; - this._end(); -}; - -Test.prototype._end = function (err) { - var self = this; - if (this._progeny.length) { - var t = this._progeny.shift(); - t.on('end', function () { self._end() }); - t.run(); - return; - } - - if (!this.ended) this.emit('end'); - var pendingAsserts = this._pendingAsserts(); - if (!this._planError && this._plan !== undefined && pendingAsserts) { - this._planError = true; - this.fail('plan != count', { - expected : this._plan, - actual : this.assertCount - }); - } - this.ended = true; -}; - -Test.prototype._exit = function () { - if (this._plan !== undefined && - !this._planError && this.assertCount !== this._plan) { - this._planError = true; - this.fail('plan != count', { - expected : this._plan, - actual : this.assertCount, - exiting : true - }); - } - else if (!this.ended) { - this.fail('test exited without ending', { - exiting: true - }); - } -}; - -Test.prototype._pendingAsserts = function () { - if (this._plan === undefined) { - return 1; - } - else { - return this._plan - (this._progeny.length + this.assertCount); - } -}; - -Test.prototype._assert = function assert (ok, opts) { - var self = this; - var extra = opts.extra || {}; - - var res = { - id : self.assertCount ++, - ok : Boolean(ok), - skip : defined(extra.skip, opts.skip), - name : defined(extra.message, opts.message, '(unnamed assert)'), - operator : defined(extra.operator, opts.operator), - objectPrintDepth : self._objectPrintDepth - }; - if (has(opts, 'actual') || has(extra, 'actual')) { - res.actual = defined(extra.actual, opts.actual); - } - if (has(opts, 'expected') || has(extra, 'expected')) { - res.expected = defined(extra.expected, opts.expected); - } - this._ok = Boolean(this._ok && ok); - - if (!ok) { - res.error = defined(extra.error, opts.error, new Error(res.name)); - } - - if (!ok) { - var e = new Error('exception'); - var err = (e.stack || '').split('\n'); - var dir = path.dirname(__dirname) + path.sep; - - for (var i = 0; i < err.length; i++) { - var m = /^[^\s]*\s*\bat\s+(.+)/.exec(err[i]); - if (!m) { - continue; - } - - var s = m[1].split(/\s+/); - var filem = /((?:\/|[A-Z]:\\)[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[1]); - if (!filem) { - filem = /((?:\/|[A-Z]:\\)[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[2]); - - if (!filem) { - filem = /((?:\/|[A-Z]:\\)[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[3]); - - if (!filem) { - continue; - } - } - } - - if (filem[1].slice(0, dir.length) === dir) { - continue; - } - - res.functionName = s[0]; - res.file = filem[1]; - res.line = Number(filem[2]); - if (filem[3]) res.column = filem[3]; - - res.at = m[1]; - break; - } - } - - self.emit('result', res); - - var pendingAsserts = self._pendingAsserts(); - if (!pendingAsserts) { - if (extra.exiting) { - self._end(); - } else { - nextTick(function () { - self._end(); - }); - } - } - - if (!self._planError && pendingAsserts < 0) { - self._planError = true; - self.fail('plan != count', { - expected : self._plan, - actual : self._plan - pendingAsserts - }); - } -}; - -Test.prototype.fail = function (msg, extra) { - this._assert(false, { - message : msg, - operator : 'fail', - extra : extra - }); -}; - -Test.prototype.pass = function (msg, extra) { - this._assert(true, { - message : msg, - operator : 'pass', - extra : extra - }); -}; - -Test.prototype.skip = function (msg, extra) { - this._assert(true, { - message : msg, - operator : 'skip', - skip : true, - extra : extra - }); -}; - -Test.prototype.ok -= Test.prototype['true'] -= Test.prototype.assert -= function (value, msg, extra) { - this._assert(value, { - message : defined(msg, 'should be truthy'), - operator : 'ok', - expected : true, - actual : value, - extra : extra - }); -}; - -Test.prototype.notOk -= Test.prototype['false'] -= Test.prototype.notok -= function (value, msg, extra) { - this._assert(!value, { - message : defined(msg, 'should be falsy'), - operator : 'notOk', - expected : false, - actual : value, - extra : extra - }); -}; - -Test.prototype.error -= Test.prototype.ifError -= Test.prototype.ifErr -= Test.prototype.iferror -= function (err, msg, extra) { - this._assert(!err, { - message : defined(msg, String(err)), - operator : 'error', - actual : err, - extra : extra - }); -}; - -Test.prototype.equal -= Test.prototype.equals -= Test.prototype.isEqual -= Test.prototype.is -= Test.prototype.strictEqual -= Test.prototype.strictEquals -= function (a, b, msg, extra) { - this._assert(a === b, { - message : defined(msg, 'should be equal'), - operator : 'equal', - actual : a, - expected : b, - extra : extra - }); -}; - -Test.prototype.notEqual -= Test.prototype.notEquals -= Test.prototype.notStrictEqual -= Test.prototype.notStrictEquals -= Test.prototype.isNotEqual -= Test.prototype.isNot -= Test.prototype.not -= Test.prototype.doesNotEqual -= Test.prototype.isInequal -= function (a, b, msg, extra) { - this._assert(a !== b, { - message : defined(msg, 'should not be equal'), - operator : 'notEqual', - actual : a, - notExpected : b, - extra : extra - }); -}; - -Test.prototype.deepEqual -= Test.prototype.deepEquals -= Test.prototype.isEquivalent -= Test.prototype.same -= function (a, b, msg, extra) { - this._assert(deepEqual(a, b, { strict: true }), { - message : defined(msg, 'should be equivalent'), - operator : 'deepEqual', - actual : a, - expected : b, - extra : extra - }); -}; - -Test.prototype.deepLooseEqual -= Test.prototype.looseEqual -= Test.prototype.looseEquals -= function (a, b, msg, extra) { - this._assert(deepEqual(a, b), { - message : defined(msg, 'should be equivalent'), - operator : 'deepLooseEqual', - actual : a, - expected : b, - extra : extra - }); -}; - -Test.prototype.notDeepEqual -= Test.prototype.notEquivalent -= Test.prototype.notDeeply -= Test.prototype.notSame -= Test.prototype.isNotDeepEqual -= Test.prototype.isNotDeeply -= Test.prototype.isNotEquivalent -= Test.prototype.isInequivalent -= function (a, b, msg, extra) { - this._assert(!deepEqual(a, b, { strict: true }), { - message : defined(msg, 'should not be equivalent'), - operator : 'notDeepEqual', - actual : a, - notExpected : b, - extra : extra - }); -}; - -Test.prototype.notDeepLooseEqual -= Test.prototype.notLooseEqual -= Test.prototype.notLooseEquals -= function (a, b, msg, extra) { - this._assert(!deepEqual(a, b), { - message : defined(msg, 'should be equivalent'), - operator : 'notDeepLooseEqual', - actual : a, - expected : b, - extra : extra - }); -}; - -Test.prototype['throws'] = function (fn, expected, msg, extra) { - if (typeof expected === 'string') { - msg = expected; - expected = undefined; - } - - var caught = undefined; - - try { - fn(); - } catch (err) { - caught = { error : err }; - if ((err != null) && (!isEnumerable(err, 'message') || !has(err, 'message'))) { - var message = err.message; - delete err.message; - err.message = message; - } - } - - var passed = caught; - - if (expected instanceof RegExp) { - passed = expected.test(caught && caught.error); - expected = String(expected); - } - - if (typeof expected === 'function' && caught) { - passed = caught.error instanceof expected; - caught.error = caught.error.constructor; - } - - this._assert(typeof fn === 'function' && passed, { - message : defined(msg, 'should throw'), - operator : 'throws', - actual : caught && caught.error, - expected : expected, - error: !passed && caught && caught.error, - extra : extra - }); -}; - -Test.prototype.doesNotThrow = function (fn, expected, msg, extra) { - if (typeof expected === 'string') { - msg = expected; - expected = undefined; - } - var caught = undefined; - try { - fn(); - } - catch (err) { - caught = { error : err }; - } - this._assert(!caught, { - message : defined(msg, 'should not throw'), - operator : 'throws', - actual : caught && caught.error, - expected : expected, - error : caught && caught.error, - extra : extra - }); -}; - -Test.skip = function (name_, _opts, _cb) { - var args = getTestArgs.apply(null, arguments); - args.opts.skip = true; - return Test(args.name, args.opts, args.cb); -}; - -// vim: set softtabstop=4 shiftwidth=4: - diff --git a/node_modules/tape/package.json b/node_modules/tape/package.json deleted file mode 100644 index c89a513..0000000 --- a/node_modules/tape/package.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "_args": [ - [ - "tape@^4.4.0", - "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine" - ] - ], - "_from": "tape@>=4.4.0 <5.0.0", - "_id": "tape@4.6.2", - "_inCache": true, - "_installable": true, - "_location": "/tape", - "_nodeVersion": "6.6.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/tape-4.6.2.tgz_1475259151192_0.3350706466007978" - }, - "_npmUser": { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "tape", - "raw": "tape@^4.4.0", - "rawSpec": "^4.4.0", - "scope": null, - "spec": ">=4.4.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/tape/-/tape-4.6.2.tgz", - "_shasum": "19b3d874508485a1dc30fb30fe2a7d9be2c28b78", - "_shrinkwrap": null, - "_spec": "tape@^4.4.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bin": { - "tape": "./bin/tape" - }, - "bugs": { - "url": "https://github.com/substack/tape/issues" - }, - "dependencies": { - "deep-equal": "~1.0.1", - "defined": "~1.0.0", - "function-bind": "~1.1.0", - "glob": "~7.1.0", - "has": "~1.0.1", - "inherits": "~2.0.3", - "minimist": "~1.2.0", - "object-inspect": "~1.2.1", - "resolve": "~1.1.7", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.1.2", - "through": "~2.3.8" - }, - "description": "tap-producing test harness for node and browsers", - "devDependencies": { - "concat-stream": "~1.5.2", - "falafel": "~2.0.0", - "js-yaml": "~3.6.1", - "tap": "~7.1.1", - "tap-parser": "~3.0.3" - }, - "directories": { - "example": "example", - "test": "test" - }, - "dist": { - "shasum": "19b3d874508485a1dc30fb30fe2a7d9be2c28b78", - "tarball": "https://registry.npmjs.org/tape/-/tape-4.6.2.tgz" - }, - "gitHead": "c9b8ce83e875f556acdb0cc46d6cec9a3c057bd3", - "homepage": "https://github.com/substack/tape", - "keywords": [ - "tap", - "test", - "harness", - "assert", - "browser" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "substack@gmail.com", - "name": "substack" - }, - { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - { - "email": "d@domenic.me", - "name": "domenic" - }, - { - "email": "ljharb@gmail.com", - "name": "ljharb" - } - ], - "name": "tape", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/tape.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "testling": { - "browsers": [ - "ie/6..latest", - "chrome/20..latest", - "firefox/10..latest", - "safari/latest", - "opera/11.0..latest", - "iphone/6", - "ipad/6" - ], - "files": "test/browser/*.js" - }, - "version": "4.6.2" -} diff --git a/node_modules/tape/readme.markdown b/node_modules/tape/readme.markdown deleted file mode 100644 index a45db94..0000000 --- a/node_modules/tape/readme.markdown +++ /dev/null @@ -1,385 +0,0 @@ -# tape - -tap-producing test harness for node and browsers - -[![browser support](https://ci.testling.com/substack/tape.png)](http://ci.testling.com/substack/tape) - -[![build status](https://secure.travis-ci.org/substack/tape.svg?branch=master)](http://travis-ci.org/substack/tape) - -![tape](http://substack.net/images/tape_drive.png) - -# example - -``` js -var test = require('tape'); - -test('timing test', function (t) { - t.plan(2); - - t.equal(typeof Date.now, 'function'); - var start = Date.now(); - - setTimeout(function () { - t.equal(Date.now() - start, 100); - }, 100); -}); -``` - -``` -$ node example/timing.js -TAP version 13 -# timing test -ok 1 should be equal -not ok 2 should be equal - --- - operator: equal - expected: 100 - actual: 107 - ... - -1..2 -# tests 2 -# pass 1 -# fail 1 -``` - -# usage - -You always need to `require('tape')` in test files. You can run the tests by -usual node means (`require('test-file.js')` or `node test-file.js`). You can -also run tests using the `tape` binary to utilize globbing, on Windows for -example: - -```sh -$ tape tests/**/*.js -``` - -`tape`'s arguments are passed to the -[`glob`](https://www.npmjs.com/package/glob) module. If you want `glob` to -perform the expansion on a system where the shell performs such expansion, quote -the arguments as necessary: - -```sh -$ tape 'tests/**/*.js' -$ tape "tests/**/*.js" -``` - -## Preloading modules - -Additionally, it is possible to make `tape` load one or more modules before running any tests, by using the `-r` or `--require` flag. Here's an example that loads [babel-register](http://babeljs.io/docs/usage/require/) before running any tests, to allow for JIT compilation: - -```sh -$ tape -r babel-register tests/**/*.js -``` - -Depending on the module you're loading, you may be able to paramaterize it using environment variables or auxiliary files. Babel, for instance, will load options from [`.babelrc`](http://babeljs.io/docs/usage/babelrc/) at runtime. - -The `-r` flag behaves exactly like node's `require`, and uses the same module resolution algorithm. This means that if you need to load local modules, you have to prepend their path with `./` or `../` accordingly. - -For example: - -```sh -$ tape -r ./my/local/module tests/**/*.js -``` - -Please note that all modules loaded using the `-r` flag will run *before* any tests, regardless of when they are specified. For example, `tape -r a b -r c` will actually load `a` and `c` *before* loading `b`, since they are flagged as required modules. - -# things that go well with tape - -tape maintains a fairly minimal core. Additional features are usually added by using another module alongside tape. - -## pretty reporters - -The default TAP output is good for machines and humans that are robots. - -If you want a more colorful / pretty output there are lots of modules on npm -that will output something pretty if you pipe TAP into them: - - - https://github.com/scottcorgan/tap-spec - - https://github.com/scottcorgan/tap-dot - - https://github.com/substack/faucet - - https://github.com/juliangruber/tap-bail - - https://github.com/kirbysayshi/tap-browser-color - - https://github.com/gummesson/tap-json - - https://github.com/gummesson/tap-min - - https://github.com/calvinmetcalf/tap-nyan - - https://www.npmjs.org/package/tap-pessimist - - https://github.com/toolness/tap-prettify - - https://github.com/shuhei/colortape - - https://github.com/aghassemi/tap-xunit - - https://github.com/namuol/tap-difflet - - https://github.com/gritzko/tape-dom - - https://github.com/axross/tap-diff - - https://github.com/axross/tap-notify - - https://github.com/zoubin/tap-summary - - https://github.com/Hypercubed/tap-markdown - -To use them, try `node test/index.js | tap-spec` or pipe it into one -of the modules of your choice! - -## uncaught exceptions - -By default, uncaught exceptions in your tests will not be intercepted, and will cause tape to crash. If you find this behavior undesirable, use [tape-catch](https://github.com/michaelrhodes/tape-catch) to report any exceptions as TAP errors. - -## other - -- CoffeeScript support with https://www.npmjs.com/package/coffeetape -- Promise support with https://www.npmjs.com/package/blue-tape -- ES6 support with https://www.npmjs.com/package/babel-tape-runner - -# methods - -The assertion methods in tape are heavily influenced or copied from the methods -in [node-tap](https://github.com/isaacs/node-tap). - -``` -var test = require('tape') -``` - -## test([name], [opts], cb) - -Create a new test with an optional `name` string and optional `opts` object. -`cb(t)` fires with the new test object `t` once all preceeding tests have -finished. Tests execute serially. - -Available `opts` options are: -- opts.skip = true/false. See test.skip. -- opts.timeout = 500. Set a timeout for the test, after which it will fail. - See test.timeoutAfter. -- opts.objectPrintDepth = 5. Configure max depth of expected / actual object - printing. - -If you forget to `t.plan()` out how many assertions you are going to run and you -don't call `t.end()` explicitly, your test will hang. - -## test.skip(name, cb) - -Generate a new test that will be skipped over. - -## test.onFinish(fn) - -The onFinish hook will get invoked when ALL tape tests have finished -right before tape is about to print the test summary. - -## t.plan(n) - -Declare that `n` assertions should be run. `t.end()` will be called -automatically after the `n`th assertion. If there are any more assertions after -the `n`th, or after `t.end()` is called, they will generate errors. - -## t.end(err) - -Declare the end of a test explicitly. If `err` is passed in `t.end` will assert -that it is falsey. - -## t.fail(msg) - -Generate a failing assertion with a message `msg`. - -## t.pass(msg) - -Generate a passing assertion with a message `msg`. - -## t.timeoutAfter(ms) - -Automatically timeout the test after X ms. - -## t.skip(msg) - -Generate an assertion that will be skipped over. - -## t.ok(value, msg) - -Assert that `value` is truthy with an optional description of the assertion `msg`. - -Aliases: `t.true()`, `t.assert()` - -## t.notOk(value, msg) - -Assert that `value` is falsy with an optional description of the assertion `msg`. - -Aliases: `t.false()`, `t.notok()` - -## t.error(err, msg) - -Assert that `err` is falsy. If `err` is non-falsy, use its `err.message` as the -description message. - -Aliases: `t.ifError()`, `t.ifErr()`, `t.iferror()` - -## t.equal(actual, expected, msg) - -Assert that `actual === expected` with an optional description of the assertion `msg`. - -Aliases: `t.equals()`, `t.isEqual()`, `t.is()`, `t.strictEqual()`, -`t.strictEquals()` - -## t.notEqual(actual, expected, msg) - -Assert that `actual !== expected` with an optional description of the assertion `msg`. - -Aliases: `t.notEquals()`, `t.notStrictEqual()`, `t.notStrictEquals()`, -`t.isNotEqual()`, `t.isNot()`, `t.not()`, `t.doesNotEqual()`, `t.isInequal()` - -## t.deepEqual(actual, expected, msg) - -Assert that `actual` and `expected` have the same structure and nested values using -[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal) -with strict comparisons (`===`) on leaf nodes and an optional description of the assertion `msg`. - -Aliases: `t.deepEquals()`, `t.isEquivalent()`, `t.same()` - -## t.notDeepEqual(actual, expected, msg) - -Assert that `actual` and `expected` do not have the same structure and nested values using -[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal) -with strict comparisons (`===`) on leaf nodes and an optional description of the assertion `msg`. - -Aliases: `t.notEquivalent()`, `t.notDeeply()`, `t.notSame()`, -`t.isNotDeepEqual()`, `t.isNotDeeply()`, `t.isNotEquivalent()`, -`t.isInequivalent()` - -## t.deepLooseEqual(actual, expected, msg) - -Assert that `actual` and `expected` have the same structure and nested values using -[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal) -with loose comparisons (`==`) on leaf nodes and an optional description of the assertion `msg`. - -Aliases: `t.looseEqual()`, `t.looseEquals()` - -## t.notDeepLooseEqual(actual, expected, msg) - -Assert that `actual` and `expected` do not have the same structure and nested values using -[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal) -with loose comparisons (`==`) on leaf nodes and an optional description of the assertion `msg`. - -Aliases: `t.notLooseEqual()`, `t.notLooseEquals()` - -## t.throws(fn, expected, msg) - -Assert that the function call `fn()` throws an exception. `expected`, if present, must be a `RegExp` or `Function`. The `RegExp` matches the string representation of the exception, as generated by `err.toString()`. The `Function` is the exception thrown (e.g. `Error`). `msg` is an optional description of the assertion. - -## t.doesNotThrow(fn, expected, msg) - -Assert that the function call `fn()` does not throw an exception. `msg` is an optional description of the assertion. - -## t.test(name, [opts], cb) - -Create a subtest with a new test handle `st` from `cb(st)` inside the current -test `t`. `cb(st)` will only fire when `t` finishes. Additional tests queued up -after `t` will not be run until all subtests finish. - -You may pass the same options that [`test()`](#testname-opts-cb) accepts. - -## t.comment(message) - -Print a message without breaking the tap output. (Useful when using e.g. `tap-colorize` where output is buffered & `console.log` will print in incorrect order vis-a-vis tap output.) - -## var htest = test.createHarness() - -Create a new test harness instance, which is a function like `test()`, but with -a new pending stack and test state. - -By default the TAP output goes to `console.log()`. You can pipe the output to -someplace else if you `htest.createStream().pipe()` to a destination stream on -the first tick. - -## test.only(name, cb) - -Like `test(name, cb)` except if you use `.only` this is the only test case -that will run for the entire process, all other test cases using tape will -be ignored - -## var stream = test.createStream(opts) - -Create a stream of output, bypassing the default output stream that writes -messages to `console.log()`. By default `stream` will be a text stream of TAP -output, but you can get an object stream instead by setting `opts.objectMode` to -`true`. - -### tap stream reporter - -You can create your own custom test reporter using this `createStream()` api: - -``` js -var test = require('tape'); -var path = require('path'); - -test.createStream().pipe(process.stdout); - -process.argv.slice(2).forEach(function (file) { - require(path.resolve(file)); -}); -``` - -You could substitute `process.stdout` for whatever other output stream you want, -like a network connection or a file. - -Pass in test files to run as arguments: - -``` -$ node tap.js test/x.js test/y.js -TAP version 13 -# (anonymous) -not ok 1 should be equal - --- - operator: equal - expected: "boop" - actual: "beep" - ... -# (anonymous) -ok 2 should be equal -ok 3 (unnamed assert) -# wheee -ok 4 (unnamed assert) - -1..4 -# tests 4 -# pass 3 -# fail 1 -``` - -### object stream reporter - -Here's how you can render an object stream instead of TAP: - -``` js -var test = require('tape'); -var path = require('path'); - -test.createStream({ objectMode: true }).on('data', function (row) { - console.log(JSON.stringify(row)) -}); - -process.argv.slice(2).forEach(function (file) { - require(path.resolve(file)); -}); -``` - -The output for this runner is: - -``` -$ node object.js test/x.js test/y.js -{"type":"test","name":"(anonymous)","id":0} -{"id":0,"ok":false,"name":"should be equal","operator":"equal","actual":"beep","expected":"boop","error":{},"test":0,"type":"assert"} -{"type":"end","test":0} -{"type":"test","name":"(anonymous)","id":1} -{"id":0,"ok":true,"name":"should be equal","operator":"equal","actual":2,"expected":2,"test":1,"type":"assert"} -{"id":1,"ok":true,"name":"(unnamed assert)","operator":"ok","actual":true,"expected":true,"test":1,"type":"assert"} -{"type":"end","test":1} -{"type":"test","name":"wheee","id":2} -{"id":0,"ok":true,"name":"(unnamed assert)","operator":"ok","actual":true,"expected":true,"test":2,"type":"assert"} -{"type":"end","test":2} -``` - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install tape --save-dev -``` - -# license - -MIT diff --git a/node_modules/tape/test/add-subtest-async.js b/node_modules/tape/test/add-subtest-async.js deleted file mode 100644 index 74b4d8a..0000000 --- a/node_modules/tape/test/add-subtest-async.js +++ /dev/null @@ -1,11 +0,0 @@ -var test = require('../') - -test('parent', function (t) { - t.pass('parent'); - setTimeout(function () { - t.test('child', function (t) { - t.pass('child'); - t.end(); - }); - }, 100) -}) diff --git a/node_modules/tape/test/array.js b/node_modules/tape/test/array.js deleted file mode 100644 index d206be5..0000000 --- a/node_modules/tape/test/array.js +++ /dev/null @@ -1,61 +0,0 @@ -var falafel = require('falafel'); -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -tap.test('array test', function (tt) { - tt.plan(1); - - var test = tape.createHarness(); - - test.createStream().pipe(concat(function (rows) { - tt.same(rows.toString('utf8'), [ - 'TAP version 13', - '# array', - 'ok 1 should be equivalent', - 'ok 2 should be equivalent', - 'ok 3 should be equivalent', - 'ok 4 should be equivalent', - 'ok 5 should be equivalent', - '', - '1..5', - '# tests 5', - '# pass 5', - '', - '# ok' - ].join('\n') + '\n'); - })); - - test('array', function (t) { - t.plan(5); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); - }); -}); diff --git a/node_modules/tape/test/bound.js b/node_modules/tape/test/bound.js deleted file mode 100644 index d398195..0000000 --- a/node_modules/tape/test/bound.js +++ /dev/null @@ -1,10 +0,0 @@ -var test = require('../'); - -test('bind works', function (t) { - t.plan(2); - var equal = t.equal; - var deepEqual = t.deepEqual; - equal(3, 3); - deepEqual([4], [4]); - t.end(); -}); diff --git a/node_modules/tape/test/browser/asserts.js b/node_modules/tape/test/browser/asserts.js deleted file mode 100644 index a1b24f6..0000000 --- a/node_modules/tape/test/browser/asserts.js +++ /dev/null @@ -1,9 +0,0 @@ -var test = require('../../'); - -test(function (t) { - t.plan(4); - t.ok(true); - t.equal(3, 1+2); - t.deepEqual([1,2,[3,4]], [1,2,[3,4]]); - t.notDeepEqual([1,2,[3,4,5]], [1,2,[3,4]]); -}); diff --git a/node_modules/tape/test/child_ordering.js b/node_modules/tape/test/child_ordering.js deleted file mode 100644 index 12efafe..0000000 --- a/node_modules/tape/test/child_ordering.js +++ /dev/null @@ -1,54 +0,0 @@ -var test = require('../'); - -var childRan = false; - -test('parent', function(t) { - t.test('child', function(t) { - childRan = true; - t.pass('child ran'); - t.end(); - }); - t.end(); -}); - -test('uncle', function(t) { - t.ok(childRan, 'Child should run before next top-level test'); - t.end(); -}); - -var grandParentRan = false; -var parentRan = false; -var grandChildRan = false; -test('grandparent', function(t) { - t.ok(!grandParentRan, 'grand parent ran twice'); - grandParentRan = true; - t.test('parent', function(t) { - t.ok(!parentRan, 'parent ran twice'); - parentRan = true; - t.test('grandchild', function(t) { - t.ok(!grandChildRan, 'grand child ran twice'); - grandChildRan = true; - t.pass('grand child ran'); - t.end(); - }); - t.pass('parent ran'); - t.end(); - }); - t.test('other parent', function(t) { - t.ok(parentRan, 'first parent runs before second parent'); - t.ok(grandChildRan, 'grandchild runs before second parent'); - t.end(); - }); - t.pass('grandparent ran'); - t.end(); -}); - -test('second grandparent', function(t) { - t.ok(grandParentRan, 'grandparent ran'); - t.ok(parentRan, 'parent ran'); - t.ok(grandChildRan, 'grandchild ran'); - t.pass('other grandparent ran'); - t.end(); -}); - -// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/tape/test/circular-things.js b/node_modules/tape/test/circular-things.js deleted file mode 100644 index 590ae43..0000000 --- a/node_modules/tape/test/circular-things.js +++ /dev/null @@ -1,36 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -tap.test('circular test', function (assert) { - var test = tape.createHarness({ exit : false }); - assert.plan(1); - - test.createStream().pipe(concat(function (body) { - assert.equal( - body.toString('utf8'), - 'TAP version 13\n' - + '# circular\n' - + 'not ok 1 should be equal\n' - + ' ---\n' - + ' operator: equal\n' - + ' expected: |-\n' - + ' {}\n' - + ' actual: |-\n' - + ' { circular: [Circular] }\n' - + ' ...\n' - + '\n' - + '1..1\n' - + '# tests 1\n' - + '# pass 0\n' - + '# fail 1\n' - ); - })); - - test("circular", function (t) { - t.plan(1); - var circular = {}; - circular.circular = circular; - t.equal(circular, {}); - }) -}) diff --git a/node_modules/tape/test/comment.js b/node_modules/tape/test/comment.js deleted file mode 100644 index ab00690..0000000 --- a/node_modules/tape/test/comment.js +++ /dev/null @@ -1,175 +0,0 @@ -var concat = require('concat-stream'); -var tap = require('tap'); -var tape = require('../'); - -// Exploratory test to ascertain proper output when no t.comment() call -// is made. -tap.test('no comment', function (assert) { - assert.plan(1); - - var verify = function (output) { - assert.equal(output.toString('utf8'), [ - 'TAP version 13', - '# no comment', - '', - '1..0', - '# tests 0', - '# pass 0', - '', - '# ok', - '' - ].join('\n')); - }; - - var test = tape.createHarness(); - test.createStream().pipe(concat(verify)); - test('no comment', function (t) { - t.end(); - }); -}); - -// Exploratory test, can we call t.comment() passing nothing? -tap.test('missing argument', function (assert) { - assert.plan(1); - var test = tape.createHarness(); - test.createStream(); - test('missing argument', function (t) { - try { - t.comment(); - t.end(); - } catch (err) { - assert.equal(err.constructor, TypeError); - } finally { - assert.end(); - } - }); -}); - -// Exploratory test, can we call t.comment() passing nothing? -tap.test('null argument', function (assert) { - assert.plan(1); - var test = tape.createHarness(); - test.createStream(); - test('null argument', function (t) { - try { - t.comment(null); - t.end(); - } catch (err) { - assert.equal(err.constructor, TypeError); - } finally { - assert.end(); - } - }); -}); - - -// Exploratory test, how is whitespace treated? -tap.test('whitespace', function (assert) { - assert.plan(1); - - var verify = function (output) { - assert.equal(output.toString('utf8'), [ - 'TAP version 13', - '# whitespace', - '# ', - '# a', - '# a', - '# a', - '', - '1..0', - '# tests 0', - '# pass 0', - '', - '# ok', - '' - ].join('\n')); - }; - - var test = tape.createHarness(); - test.createStream().pipe(concat(verify)); - test('whitespace', function (t) { - t.comment(' '); - t.comment(' a'); - t.comment('a '); - t.comment(' a '); - t.end(); - }); -}); - -// Exploratory test, how about passing types other than strings? -tap.test('non-string types', function (assert) { - assert.plan(1); - - var verify = function (output) { - assert.equal(output.toString('utf8'), [ - 'TAP version 13', - '# non-string types', - '# true', - '# false', - '# 42', - '# 6.66', - '# [object Object]', - '# [object Object]', - '# [object Object]', - '# function ConstructorFunction() {}', - '', - '1..0', - '# tests 0', - '# pass 0', - '', - '# ok', - '' - ].join('\n')); - }; - - var test = tape.createHarness(); - test.createStream().pipe(concat(verify)); - test('non-string types', function (t) { - t.comment(true); - t.comment(false); - t.comment(42); - t.comment(6.66); - t.comment({}); - t.comment({"answer": 42}); - function ConstructorFunction() {} - t.comment(new ConstructorFunction()); - t.comment(ConstructorFunction); - t.end(); - }); -}); - -tap.test('multiline string', function (assert) { - assert.plan(1); - - var verify = function (output) { - assert.equal(output.toString('utf8'), [ - 'TAP version 13', - '# multiline strings', - '# a', - '# b', - '# c', - '# d', - '', - '1..0', - '# tests 0', - '# pass 0', - '', - '# ok', - '' - ].join('\n')); - }; - - var test = tape.createHarness(); - test.createStream().pipe(concat(verify)); - test('multiline strings', function (t) { - t.comment([ - 'a', - 'b', - ].join('\n')); - t.comment([ - 'c', - 'd', - ].join('\r\n')); - t.end(); - }); -}); diff --git a/node_modules/tape/test/deep-equal-failure.js b/node_modules/tape/test/deep-equal-failure.js deleted file mode 100644 index 3f12b30..0000000 --- a/node_modules/tape/test/deep-equal-failure.js +++ /dev/null @@ -1,174 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); -var tapParser = require('tap-parser'); -var yaml = require('js-yaml'); - -tap.test('deep equal failure', function (assert) { - var test = tape.createHarness({ exit : false }); - var stream = test.createStream(); - var parser = tapParser(); - assert.plan(3); - - stream.pipe(parser); - stream.pipe(concat(function (body) { - assert.equal( - body.toString('utf8'), - 'TAP version 13\n' - + '# deep equal\n' - + 'not ok 1 should be equal\n' - + ' ---\n' - + ' operator: equal\n' - + ' expected: |-\n' - + ' { b: 2 }\n' - + ' actual: |-\n' - + ' { a: 1 }\n' - + ' ...\n' - + '\n' - + '1..1\n' - + '# tests 1\n' - + '# pass 0\n' - + '# fail 1\n' - ); - - assert.deepEqual(getDiag(body), { - operator: 'equal', - expected: '{ b: 2 }', - actual: '{ a: 1 }' - }); - })); - - parser.once('assert', function (data) { - assert.deepEqual(data, { - ok: false, - id: 1, - name: 'should be equal', - diag: { - operator: 'equal', - expected: '{ b: 2 }', - actual: '{ a: 1 }' - } - }); - }); - - test("deep equal", function (t) { - t.plan(1); - t.equal({a: 1}, {b: 2}); - }); -}) - -tap.test('deep equal failure, depth 6, with option', function (assert) { - var test = tape.createHarness({ exit : false }); - var stream = test.createStream(); - var parser = tapParser(); - assert.plan(3); - - stream.pipe(parser); - stream.pipe(concat(function (body) { - assert.equal( - body.toString('utf8'), - 'TAP version 13\n' - + '# deep equal\n' - + 'not ok 1 should be equal\n' - + ' ---\n' - + ' operator: equal\n' - + ' expected: |-\n' - + ' { a: { a1: { a2: { a3: { a4: { a5: 2 } } } } } }\n' - + ' actual: |-\n' - + ' { a: { a1: { a2: { a3: { a4: { a5: 1 } } } } } }\n' - + ' ...\n' - + '\n' - + '1..1\n' - + '# tests 1\n' - + '# pass 0\n' - + '# fail 1\n' - ); - - assert.deepEqual(getDiag(body), { - operator: 'equal', - expected: '{ a: { a1: { a2: { a3: { a4: { a5: 2 } } } } } }', - actual: '{ a: { a1: { a2: { a3: { a4: { a5: 1 } } } } } }' - }); - })); - - parser.once('assert', function (data) { - assert.deepEqual(data, { - ok: false, - id: 1, - name: 'should be equal', - diag: { - operator: 'equal', - expected: '{ a: { a1: { a2: { a3: { a4: { a5: 2 } } } } } }', - actual: '{ a: { a1: { a2: { a3: { a4: { a5: 1 } } } } } }' - } - }); - }); - - test("deep equal", {objectPrintDepth: 6}, function (t) { - t.plan(1); - t.equal({ a: { a1: { a2: { a3: { a4: { a5: 1 } } } } } }, { a: { a1: { a2: { a3: { a4: { a5: 2 } } } } } }); - }); -}) - -tap.test('deep equal failure, depth 6, without option', function (assert) { - var test = tape.createHarness({ exit : false }); - var stream = test.createStream(); - var parser = tapParser(); - assert.plan(3); - - stream.pipe(parser); - stream.pipe(concat(function (body) { - assert.equal( - body.toString('utf8'), - 'TAP version 13\n' - + '# deep equal\n' - + 'not ok 1 should be equal\n' - + ' ---\n' - + ' operator: equal\n' - + ' expected: |-\n' - + ' { a: { a1: { a2: { a3: { a4: [Object] } } } } }\n' - + ' actual: |-\n' - + ' { a: { a1: { a2: { a3: { a4: [Object] } } } } }\n' - + ' ...\n' - + '\n' - + '1..1\n' - + '# tests 1\n' - + '# pass 0\n' - + '# fail 1\n' - ); - - assert.deepEqual(getDiag(body), { - operator: 'equal', - expected: '{ a: { a1: { a2: { a3: { a4: [Object] } } } } }', - actual: '{ a: { a1: { a2: { a3: { a4: [Object] } } } } }' - }); - })); - - parser.once('assert', function (data) { - assert.deepEqual(data, { - ok: false, - id: 1, - name: 'should be equal', - diag: { - operator: 'equal', - expected: '{ a: { a1: { a2: { a3: { a4: [Object] } } } } }', - actual: '{ a: { a1: { a2: { a3: { a4: [Object] } } } } }' - } - }); - }); - - test("deep equal", function (t) { - t.plan(1); - t.equal({ a: { a1: { a2: { a3: { a4: { a5: 1 } } } } } }, { a: { a1: { a2: { a3: { a4: { a5: 2 } } } } } }); - }); -}) - -function getDiag (body) { - var yamlStart = body.indexOf(' ---'); - var yamlEnd = body.indexOf(' ...\n'); - var diag = body.slice(yamlStart, yamlEnd).split('\n').map(function (line) { - return line.slice(2); - }).join('\n'); - - return yaml.safeLoad(diag); -} diff --git a/node_modules/tape/test/deep.js b/node_modules/tape/test/deep.js deleted file mode 100644 index 909ebe1..0000000 --- a/node_modules/tape/test/deep.js +++ /dev/null @@ -1,17 +0,0 @@ -var test = require('../'); - -test('deep strict equal', function (t) { - t.notDeepEqual( - [ { a: '3' } ], - [ { a: 3 } ] - ); - t.end(); -}); - -test('deep loose equal', function (t) { - t.deepLooseEqual( - [ { a: '3' } ], - [ { a: 3 } ] - ); - t.end(); -}); diff --git a/node_modules/tape/test/default-messages.js b/node_modules/tape/test/default-messages.js deleted file mode 100644 index 46c055f..0000000 --- a/node_modules/tape/test/default-messages.js +++ /dev/null @@ -1,31 +0,0 @@ -var tap = require('tap'); -var path = require('path'); -var spawn = require('child_process').spawn; -var concat = require('concat-stream'); - -tap.test('default messages', function (t) { - t.plan(1); - - var ps = spawn(process.execPath, [path.join(__dirname, 'messages', 'defaults.js')]); - - ps.stdout.pipe(concat(function (rows) { - - t.same(rows.toString('utf8'), [ - 'TAP version 13', - '# default messages', - 'ok 1 should be truthy', - 'ok 2 should be falsy', - 'ok 3 should be equal', - 'ok 4 should not be equal', - 'ok 5 should be equivalent', - 'ok 6 should be equivalent', - 'ok 7 should be equivalent', - '', - '1..7', - '# tests 7', - '# pass 7', - '', - '# ok' - ].join('\n') + '\n\n'); - })); -}); diff --git a/node_modules/tape/test/double_end.js b/node_modules/tape/test/double_end.js deleted file mode 100644 index 624ce3a..0000000 --- a/node_modules/tape/test/double_end.js +++ /dev/null @@ -1,28 +0,0 @@ -var test = require('tap').test; -var path = require('path'); -var concat = require('concat-stream'); -var spawn = require('child_process').spawn; - -test(function (t) { - t.plan(2); - var ps = spawn(process.execPath, [path.join(__dirname, 'double_end', 'double.js')]); - ps.on('exit', function (code) { - t.equal(code, 1); - }); - ps.stdout.pipe(concat(function (body) { - t.equal(body.toString('utf8'), [ - 'TAP version 13', - '# double end', - 'ok 1 should be equal', - 'not ok 2 .end() called twice', - ' ---', - ' operator: fail', - ' ...', - '', - '1..2', - '# tests 2', - '# pass 1', - '# fail 1', - ].join('\n') + '\n\n'); - })); -}); diff --git a/node_modules/tape/test/double_end/double.js b/node_modules/tape/test/double_end/double.js deleted file mode 100644 index 4473482..0000000 --- a/node_modules/tape/test/double_end/double.js +++ /dev/null @@ -1,9 +0,0 @@ -var test = require('../../'); - -test('double end', function (t) { - t.equal(1 + 1, 2); - t.end(); - setTimeout(function () { - t.end(); - }, 5); -}); diff --git a/node_modules/tape/test/end-as-callback.js b/node_modules/tape/test/end-as-callback.js deleted file mode 100644 index a9478cb..0000000 --- a/node_modules/tape/test/end-as-callback.js +++ /dev/null @@ -1,87 +0,0 @@ -var tap = require("tap"); -var tape = require("../"); -var concat = require('concat-stream'); - -tap.test("tape assert.end as callback", function (tt) { - var test = tape.createHarness({ exit: false }) - - test.createStream().pipe(concat(function (rows) { - tt.equal(rows.toString('utf8'), [ - 'TAP version 13', - '# do a task and write', - 'ok 1 null', - 'ok 2 should be equal', - '# do a task and write fail', - 'ok 3 null', - 'ok 4 should be equal', - 'not ok 5 Error: fail', - getStackTrace(rows), // tap error stack - '', - '1..5', - '# tests 5', - '# pass 4', - '# fail 1' - ].join('\n') + '\n'); - tt.end() - })); - - test("do a task and write", function (assert) { - fakeAsyncTask("foo", function (err, value) { - assert.ifError(err) - assert.equal(value, "taskfoo") - - fakeAsyncWrite("bar", assert.end) - }) - }) - - test("do a task and write fail", function (assert) { - fakeAsyncTask("bar", function (err, value) { - assert.ifError(err) - assert.equal(value, "taskbar") - - fakeAsyncWriteFail("baz", assert.end) - }) - }) -}) - -function fakeAsyncTask(name, cb) { - cb(null, "task" + name) -} - -function fakeAsyncWrite(name, cb) { - cb(null) -} - -function fakeAsyncWriteFail(name, cb) { - cb(new Error("fail")) -} - -/** - * extract the stack trace for the failed test. - * this will change dependent on the environment - * so no point hard-coding it in the test assertion - * see: https://git.io/v6hGG for example - * @param String rows - the tap output lines - * @returns String stacktrace - just the error stack part - */ -function getStackTrace(rows) { - var stacktrace = ' ---\n'; - var extract = false; - rows.toString('utf8').split('\n').forEach(function (row) { - if (!extract) { - if (row.indexOf('---') > -1) { // start of stack trace - extract = true; - } - } else { - if (row.indexOf('...') > -1) { // end of stack trace - extract = false; - stacktrace += ' ...'; - } else { - stacktrace += row + '\n'; - } - - } - }); - // console.log(stacktrace); - return stacktrace; -} diff --git a/node_modules/tape/test/exit.js b/node_modules/tape/test/exit.js deleted file mode 100644 index 963e6b0..0000000 --- a/node_modules/tape/test/exit.js +++ /dev/null @@ -1,131 +0,0 @@ -var tap = require('tap'); -var path = require('path'); -var spawn = require('child_process').spawn; -var concat = require('concat-stream'); - -tap.test('exit ok', function (t) { - t.plan(2); - - var tc = function (rows) { - t.same(rows.toString('utf8'), [ - 'TAP version 13', - '# array', - '# hi', - 'ok 1 should be equivalent', - 'ok 2 should be equivalent', - 'ok 3 should be equivalent', - 'ok 4 should be equivalent', - 'ok 5 should be equivalent', - '', - '1..5', - '# tests 5', - '# pass 5', - '', - '# ok', - '', // yes, these double-blank-lines at the end are required. - '' // if you can figure out how to remove them, please do! - ].join('\n')); - } - - var ps = spawn(process.execPath, [path.join(__dirname, 'exit', 'ok.js')]); - ps.stdout.pipe(concat(tc)); - ps.on('exit', function (code) { - t.equal(code, 0); - }); -}); - -tap.test('exit fail', function (t) { - t.plan(2); - - var tc = function (rows) { - t.same(rows.toString('utf8'), [ - 'TAP version 13', - '# array', - 'ok 1 should be equivalent', - 'ok 2 should be equivalent', - 'ok 3 should be equivalent', - 'ok 4 should be equivalent', - 'not ok 5 should be equivalent', - ' ---', - ' operator: deepEqual', - ' expected: [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]', - ' actual: [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]', - ' ...', - '', - '1..5', - '# tests 5', - '# pass 4', - '# fail 1' - ].join('\n') + '\n\n'); - }; - - var ps = spawn(process.execPath, [path.join(__dirname, 'exit', 'fail.js')]); - ps.stdout.pipe(concat(tc)); - ps.on('exit', function (code) { - t.notEqual(code, 0); - }); -}); - -tap.test('too few exit', function (t) { - t.plan(2); - - var tc = function (rows) { - t.same(rows.toString('utf8'), [ - 'TAP version 13', - '# array', - 'ok 1 should be equivalent', - 'ok 2 should be equivalent', - 'ok 3 should be equivalent', - 'ok 4 should be equivalent', - 'ok 5 should be equivalent', - 'not ok 6 plan != count', - ' ---', - ' operator: fail', - ' expected: 6', - ' actual: 5', - ' ...', - '', - '1..6', - '# tests 6', - '# pass 5', - '# fail 1' - ].join('\n') + '\n\n'); - }; - - var ps = spawn(process.execPath, [path.join(__dirname, '/exit/too_few.js')]); - ps.stdout.pipe(concat(tc)); - ps.on('exit', function (code) { - t.notEqual(code, 0); - }); -}); - -tap.test('more planned in a second test', function (t) { - t.plan(2); - - var tc = function (rows) { - t.same(rows.toString('utf8'), [ - 'TAP version 13', - '# first', - 'ok 1 should be truthy', - '# second', - 'ok 2 should be truthy', - 'not ok 3 plan != count', - ' ---', - ' operator: fail', - ' expected: 2', - ' actual: 1', - ' ...', - '', - '1..3', - '# tests 3', - '# pass 2', - '# fail 1' - ].join('\n') + '\n\n'); - }; - - var ps = spawn(process.execPath, [path.join(__dirname, '/exit/second.js')]); - ps.stdout.pipe(concat(tc)); - ps.on('exit', function (code) { - t.notEqual(code, 0); - }); -}); diff --git a/node_modules/tape/test/exit/fail.js b/node_modules/tape/test/exit/fail.js deleted file mode 100644 index d7fd3ce..0000000 --- a/node_modules/tape/test/exit/fail.js +++ /dev/null @@ -1,35 +0,0 @@ -var test = require('../../'); -var falafel = require('falafel'); - -test('array', function (t) { - t.plan(5); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]); - } - ); -}); diff --git a/node_modules/tape/test/exit/ok.js b/node_modules/tape/test/exit/ok.js deleted file mode 100644 index f1068e5..0000000 --- a/node_modules/tape/test/exit/ok.js +++ /dev/null @@ -1,36 +0,0 @@ -var falafel = require('falafel'); -var test = require('../../'); - -test('array', function (t) { - t.comment('hi'); - t.plan(5); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); -}); diff --git a/node_modules/tape/test/exit/second.js b/node_modules/tape/test/exit/second.js deleted file mode 100644 index 8a206bb..0000000 --- a/node_modules/tape/test/exit/second.js +++ /dev/null @@ -1,11 +0,0 @@ -var test = require('../../'); - -test('first', function (t) { - t.plan(1); - t.ok(true); -}); - -test('second', function (t) { - t.plan(2); - t.ok(true); -}); diff --git a/node_modules/tape/test/exit/too_few.js b/node_modules/tape/test/exit/too_few.js deleted file mode 100644 index 8e60ce5..0000000 --- a/node_modules/tape/test/exit/too_few.js +++ /dev/null @@ -1,35 +0,0 @@ -var falafel = require('falafel'); -var test = require('../../'); - -test('array', function (t) { - t.plan(6); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); -}); diff --git a/node_modules/tape/test/exposed-harness.js b/node_modules/tape/test/exposed-harness.js deleted file mode 100644 index b790340..0000000 --- a/node_modules/tape/test/exposed-harness.js +++ /dev/null @@ -1,13 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); - -tap.test('main harness object is exposed', function (assert) { - - assert.equal(typeof tape.getHarness, 'function', 'tape.getHarness is a function') - - assert.equal(tape.getHarness()._results.pass, 0) - - assert.end() - -}) - diff --git a/node_modules/tape/test/fail.js b/node_modules/tape/test/fail.js deleted file mode 100644 index 54c544c..0000000 --- a/node_modules/tape/test/fail.js +++ /dev/null @@ -1,67 +0,0 @@ -var falafel = require('falafel'); -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -tap.test('array test', function (tt) { - tt.plan(1); - - var test = tape.createHarness({ exit : false }); - var tc = function (rows) { - tt.same(rows.toString('utf8'), [ - 'TAP version 13', - '# array', - 'ok 1 should be equivalent', - 'ok 2 should be equivalent', - 'ok 3 should be equivalent', - 'ok 4 should be equivalent', - 'not ok 5 should be equivalent', - ' ---', - ' operator: deepEqual', - ' expected: [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]', - ' actual: [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]', - ' ...', - '', - '1..5', - '# tests 5', - '# pass 4', - '# fail 1', - '' - ].join('\n')); - }; - - test.createStream().pipe(concat(tc)); - - test('array', function (t) { - t.plan(5); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]); - } - ); - }); -}); diff --git a/node_modules/tape/test/many.js b/node_modules/tape/test/many.js deleted file mode 100644 index 10556e5..0000000 --- a/node_modules/tape/test/many.js +++ /dev/null @@ -1,8 +0,0 @@ -var test = require('../'); - -test('many tests', function (t) { - t.plan(100); - for (var i = 0; i < 100; i++) { - setTimeout(function () { t.pass() }, Math.random() * 50); - } -}); diff --git a/node_modules/tape/test/max_listeners.js b/node_modules/tape/test/max_listeners.js deleted file mode 100644 index e807cdb..0000000 --- a/node_modules/tape/test/max_listeners.js +++ /dev/null @@ -1,10 +0,0 @@ -var spawn = require('child_process').spawn; -var path = require('path'); - -var ps = spawn(process.execPath, [path.join(__dirname, 'max_listeners', 'source.js')]); - -ps.stdout.pipe(process.stdout, { end : false }); - -ps.stderr.on('data', function (buf) { - console.log('not ok ' + buf); -}); diff --git a/node_modules/tape/test/max_listeners/source.js b/node_modules/tape/test/max_listeners/source.js deleted file mode 100644 index f78782f..0000000 --- a/node_modules/tape/test/max_listeners/source.js +++ /dev/null @@ -1,5 +0,0 @@ -var test = require('../../'); - -for (var i = 0; i < 11; i ++) { - test(function (t) { t.ok(true, 'true is truthy'); t.end() }); -} diff --git a/node_modules/tape/test/messages/defaults.js b/node_modules/tape/test/messages/defaults.js deleted file mode 100644 index 8d842eb..0000000 --- a/node_modules/tape/test/messages/defaults.js +++ /dev/null @@ -1,12 +0,0 @@ -var test = require('../../'); - -test('default messages', function (t) { - t.plan(7); - t.ok(true); - t.notOk(false); - t.equal(true, true); - t.notEqual(true, false); - t.deepEqual(true, true); - t.deepLooseEqual(true, true); - t.notDeepLooseEqual(true, false); -}); diff --git a/node_modules/tape/test/nested-async-plan-noend.js b/node_modules/tape/test/nested-async-plan-noend.js deleted file mode 100644 index 6f8cfdd..0000000 --- a/node_modules/tape/test/nested-async-plan-noend.js +++ /dev/null @@ -1,36 +0,0 @@ -var test = require('../'); - -test('Harness async test support', function(t) { - t.plan(3); - - t.ok(true, 'sync child A'); - - t.test('sync child B', function(tt) { - tt.plan(2); - - setTimeout(function(){ - tt.test('async grandchild A', function(ttt) { - ttt.plan(1); - ttt.ok(true); - }); - }, 50); - - setTimeout(function() { - tt.test('async grandchild B', function(ttt) { - ttt.plan(1); - ttt.ok(true); - }); - }, 100); - }); - - setTimeout(function() { - t.test('async child', function(tt) { - tt.plan(2); - tt.ok(true, 'sync grandchild in async child A'); - tt.test('sync grandchild in async child B', function(ttt) { - ttt.plan(1); - ttt.ok(true); - }); - }); - }, 200); -}); diff --git a/node_modules/tape/test/nested-sync-noplan-noend.js b/node_modules/tape/test/nested-sync-noplan-noend.js deleted file mode 100644 index 6039093..0000000 --- a/node_modules/tape/test/nested-sync-noplan-noend.js +++ /dev/null @@ -1,43 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -tap.test('nested sync test without plan or end', function (tt) { - tt.plan(1); - - var test = tape.createHarness(); - var tc = function (rows) { - tt.same(rows.toString('utf8'), [ - 'TAP version 13', - '# nested without plan or end', - '# first', - 'ok 1 should be truthy', - '# second', - 'ok 2 should be truthy', - '', - '1..2', - '# tests 2', - '# pass 2', - '', - '# ok' - ].join('\n') + '\n'); - }; - - test.createStream().pipe(concat(tc)); - - test('nested without plan or end', function(t) { - t.test('first', function(q) { - setTimeout(function first() { - q.ok(true); - q.end() - }, 10); - }); - t.test('second', function(q) { - setTimeout(function second() { - q.ok(true); - q.end() - }, 10); - }); - }); - -}); diff --git a/node_modules/tape/test/nested.js b/node_modules/tape/test/nested.js deleted file mode 100644 index f444f95..0000000 --- a/node_modules/tape/test/nested.js +++ /dev/null @@ -1,83 +0,0 @@ -var falafel = require('falafel'); -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -tap.test('array test', function (tt) { - tt.plan(1); - - var test = tape.createHarness(); - var tc = function (rows) { - tt.same(rows.toString('utf8'), [ - 'TAP version 13', - '# nested array test', - 'ok 1 should be equivalent', - 'ok 2 should be equivalent', - 'ok 3 should be equivalent', - 'ok 4 should be equivalent', - 'ok 5 should be equivalent', - '# inside test', - 'ok 6 should be truthy', - 'ok 7 should be truthy', - '# another', - 'ok 8 should be truthy', - '', - '1..8', - '# tests 8', - '# pass 8', - '', - '# ok' - ].join('\n') + '\n'); - }; - - test.createStream().pipe(concat(tc)); - - test('nested array test', function (t) { - t.plan(6); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - t.test('inside test', function (q) { - q.plan(2); - q.ok(true); - - setTimeout(function () { - q.ok(true); - }, 100); - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); - }); - - test('another', function (t) { - t.plan(1); - setTimeout(function () { - t.ok(true); - }, 50); - }); -}); diff --git a/node_modules/tape/test/nested2.js b/node_modules/tape/test/nested2.js deleted file mode 100644 index 58ae8f3..0000000 --- a/node_modules/tape/test/nested2.js +++ /dev/null @@ -1,19 +0,0 @@ -var test = require('../'); - -test(function(t) { - var i = 0 - t.test('setup', function(t) { - process.nextTick(function() { - t.equal(i, 0, 'called once') - i++ - t.end() - }) - }) - - - t.test('teardown', function(t) { - t.end() - }) - - t.end() -}) diff --git a/node_modules/tape/test/no_callback.js b/node_modules/tape/test/no_callback.js deleted file mode 100644 index 760ff26..0000000 --- a/node_modules/tape/test/no_callback.js +++ /dev/null @@ -1,3 +0,0 @@ -var test = require('../'); - -test('No callback.'); diff --git a/node_modules/tape/test/onFinish.js b/node_modules/tape/test/onFinish.js deleted file mode 100644 index 5b77fae..0000000 --- a/node_modules/tape/test/onFinish.js +++ /dev/null @@ -1,12 +0,0 @@ -var tap = require("tap"); -var tape = require("../"); - -tap.test("on finish", {timeout: 1000}, function (tt) { - tt.plan(1); - tape.onFinish(function() { - tt.pass('tape ended'); - }); - tape('dummy test', function(t) { - t.end(); - }); -}); diff --git a/node_modules/tape/test/only-twice.js b/node_modules/tape/test/only-twice.js deleted file mode 100644 index ce6048e..0000000 --- a/node_modules/tape/test/only-twice.js +++ /dev/null @@ -1,21 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); - -tap.test('only twice error', function (assert) { - var test = tape.createHarness({ exit : false }); - - test.only("first only", function (t) { - t.end() - }); - - assert.throws(function() { - test.only('second only', function(t) { - t.end(); - }); - }, { - name: 'Error', - message: 'there can only be one only test' - }); - assert.end(); -}); - diff --git a/node_modules/tape/test/only.js b/node_modules/tape/test/only.js deleted file mode 100644 index f68c450..0000000 --- a/node_modules/tape/test/only.js +++ /dev/null @@ -1,45 +0,0 @@ -var tap = require('tap'); -var tape = require('../'); -var concat = require('concat-stream'); - -tap.test('tape only test', function (tt) { - var test = tape.createHarness({ exit: false }); - var ran = []; - - var tc = function (rows) { - tt.deepEqual(rows.toString('utf8'), [ - 'TAP version 13', - '# run success', - 'ok 1 assert name', - '', - '1..1', - '# tests 1', - '# pass 1', - '', - '# ok' - ].join('\n') + '\n'); - tt.deepEqual(ran, [ 3 ]); - - tt.end() - }; - - test.createStream().pipe(concat(tc)); - - test("never run fail", function (t) { - ran.push(1); - t.equal(true, false) - t.end() - }) - - test("never run success", function (t) { - ran.push(2); - t.equal(true, true) - t.end() - }) - - test.only("run success", function (t) { - ran.push(3); - t.ok(true, "assert name") - t.end() - }) -}) diff --git a/node_modules/tape/test/only2.js b/node_modules/tape/test/only2.js deleted file mode 100644 index fcf4f43..0000000 --- a/node_modules/tape/test/only2.js +++ /dev/null @@ -1,9 +0,0 @@ -var test = require('../'); - -test('only2 test 1', function (t) { - t.end(); -}); - -test.only('only2 test 2', function (t) { - t.end(); -}); diff --git a/node_modules/tape/test/only3.js b/node_modules/tape/test/only3.js deleted file mode 100644 index b192a4e..0000000 --- a/node_modules/tape/test/only3.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('../'); - -test('only3 test 1', function (t) { - t.fail('not 1'); - t.end(); -}); - -test.only('only3 test 2', function (t) { - t.end(); -}); - -test('only3 test 3', function (t) { - t.fail('not 3'); - t.end(); -}); diff --git a/node_modules/tape/test/only4.js b/node_modules/tape/test/only4.js deleted file mode 100644 index d570b5b..0000000 --- a/node_modules/tape/test/only4.js +++ /dev/null @@ -1,10 +0,0 @@ -var test = require('../'); - -test('only4 duplicate test name', function (t) { - t.fail('not 1'); - t.end(); -}); - -test.only('only4 duplicate test name', function (t) { - t.end(); -}); diff --git a/node_modules/tape/test/only5.js b/node_modules/tape/test/only5.js deleted file mode 100644 index 0e15887..0000000 --- a/node_modules/tape/test/only5.js +++ /dev/null @@ -1,10 +0,0 @@ -var test = require('../'); - -test.only('only5 duplicate test name', function (t) { - t.end(); -}); - -test('only5 duplicate test name', function (t) { - t.fail('not 2'); - t.end(); -}); diff --git a/node_modules/tape/test/order.js b/node_modules/tape/test/order.js deleted file mode 100644 index 02aaa05..0000000 --- a/node_modules/tape/test/order.js +++ /dev/null @@ -1,17 +0,0 @@ -var test = require('../'); -var current = 0; - -test(function (t) { - t.equal(current++, 0); - t.end(); -}); -test(function (t) { - t.plan(1); - setTimeout(function () { - t.equal(current++, 1); - }, 100); -}); -test(function (t) { - t.equal(current++, 2); - t.end(); -}); diff --git a/node_modules/tape/test/plan_optional.js b/node_modules/tape/test/plan_optional.js deleted file mode 100644 index a092eab..0000000 --- a/node_modules/tape/test/plan_optional.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('../'); - -test('plan should be optional', function (t) { - t.pass('no plan here'); - t.end(); -}); - -test('no plan async', function (t) { - setTimeout(function() { - t.pass('ok'); - t.end(); - }, 100); -}); - -// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/tape/test/require.js b/node_modules/tape/test/require.js deleted file mode 100644 index 6b05a00..0000000 --- a/node_modules/tape/test/require.js +++ /dev/null @@ -1,69 +0,0 @@ -var tap = require('tap'); -var spawn = require('child_process').spawn; -var concat = require('concat-stream'); - -tap.test('requiring a single module', function (t) { - t.plan(2); - - var tc = function (rows) { - t.same(rows.toString('utf8'), [ - 'TAP version 13', - '# module-a', - 'ok 1 loaded module a', - '# test-a', - 'ok 2 module-a loaded in same context', - 'ok 3 test ran after module-a was loaded', - '', - '1..3', - '# tests 3', - '# pass 3', - '', - '# ok' - ].join('\n') + '\n\n'); - }; - - var ps = tape('-r ./require/a require/test-a.js'); - ps.stdout.pipe(concat(tc)); - ps.on('exit', function (code) { - t.equal(code, 0); - }); -}); - -tap.test('requiring multiple modules', function (t) { - t.plan(2); - - var tc = function (rows) { - t.same(rows.toString('utf8'), [ - 'TAP version 13', - '# module-a', - 'ok 1 loaded module a', - '# module-b', - 'ok 2 loaded module b', - '# test-a', - 'ok 3 module-a loaded in same context', - 'ok 4 test ran after module-a was loaded', - '# test-b', - 'ok 5 module-b loaded in same context', - 'ok 6 test ran after module-b was loaded', - '', - '1..6', - '# tests 6', - '# pass 6', - '', - '# ok' - ].join('\n') + '\n\n'); - }; - - var ps = tape('-r ./require/a -r ./require/b require/test-a.js require/test-b.js'); - ps.stdout.pipe(concat(tc)); - ps.on('exit', function (code) { - t.equal(code, 0); - }); -}); - -function tape(args) { - var proc = require('child_process') - var bin = __dirname + '/../bin/tape' - - return proc.spawn('node', [bin].concat(args.split(' ')), { cwd: __dirname }) -} \ No newline at end of file diff --git a/node_modules/tape/test/require/a.js b/node_modules/tape/test/require/a.js deleted file mode 100644 index b2dd811..0000000 --- a/node_modules/tape/test/require/a.js +++ /dev/null @@ -1,8 +0,0 @@ -var tape = require('../..'); - -tape.test('module-a', function(t) { - t.plan(1) - t.pass('loaded module a') -}) - -global.module_a = true \ No newline at end of file diff --git a/node_modules/tape/test/require/b.js b/node_modules/tape/test/require/b.js deleted file mode 100644 index 2206c17..0000000 --- a/node_modules/tape/test/require/b.js +++ /dev/null @@ -1,8 +0,0 @@ -var tape = require('../..'); - -tape.test('module-b', function(t) { - t.plan(1) - t.pass('loaded module b') -}) - -global.module_b = true \ No newline at end of file diff --git a/node_modules/tape/test/require/test-a.js b/node_modules/tape/test/require/test-a.js deleted file mode 100644 index 822ef54..0000000 --- a/node_modules/tape/test/require/test-a.js +++ /dev/null @@ -1,7 +0,0 @@ -var tape = require('../..'); - -tape.test('test-a', function(t) { - t.ok(global.module_a, 'module-a loaded in same context') - t.pass('test ran after module-a was loaded') - t.end() -}) \ No newline at end of file diff --git a/node_modules/tape/test/require/test-b.js b/node_modules/tape/test/require/test-b.js deleted file mode 100644 index 8efcba1..0000000 --- a/node_modules/tape/test/require/test-b.js +++ /dev/null @@ -1,7 +0,0 @@ -var tape = require('../..'); - -tape.test('test-b', function(t) { - t.ok(global.module_b, 'module-b loaded in same context') - t.pass('test ran after module-b was loaded') - t.end() -}) \ No newline at end of file diff --git a/node_modules/tape/test/skip.js b/node_modules/tape/test/skip.js deleted file mode 100644 index 54c53f9..0000000 --- a/node_modules/tape/test/skip.js +++ /dev/null @@ -1,52 +0,0 @@ -var test = require('../'); -var ran = 0; - -var concat = require('concat-stream'); -var tap = require('tap'); - -tap.test('test SKIP comment', function (assert) { - assert.plan(1); - - var verify = function (output) { - assert.equal(output.toString('utf8'), [ - 'TAP version 13', - '# SKIP skipped', - '', - '1..0', - '# tests 0', - '# pass 0', - '', - '# ok', - '' - ].join('\n')); - }; - - var tapeTest = test.createHarness(); - tapeTest.createStream().pipe(concat(verify)); - tapeTest('skipped', { skip: true }, function (t) { - t.end(); - }); -}); - -test('skip this', { skip: true }, function(t) { - t.fail('this should not even run'); - ran++; - t.end(); -}); - -test.skip('skip this too', function(t) { - t.fail('this should not even run'); - ran++; - t.end(); -}); - -test('skip subtest', function(t) { - ran++; - t.test('skip this', { skip: true }, function(t) { - t.fail('this should not even run'); - t.end(); - }); - t.end(); -}); - -// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/tape/test/stackTrace.js b/node_modules/tape/test/stackTrace.js deleted file mode 100644 index bde1bc5..0000000 --- a/node_modules/tape/test/stackTrace.js +++ /dev/null @@ -1,77 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); -var tapParser = require('tap-parser'); -var yaml = require('js-yaml'); - -tap.test('preserves stack trace with newlines', function (tt) { - tt.plan(3); - - var test = tape.createHarness(); - var stream = test.createStream(); - var parser = stream.pipe(tapParser()); - var stackTrace = 'foo\n bar'; - - parser.once('assert', function (data) { - tt.deepEqual(data, { - ok: false, - id: 1, - name: "Error: Preserve stack", - diag: { - stack: stackTrace, - operator: 'error', - expected: 'undefined', - actual: '[Error: Preserve stack]' - } - }); - }); - - stream.pipe(concat(function (body) { - var body = body.toString('utf8') - tt.equal( - body, - 'TAP version 13\n' - + '# multiline stack trace\n' - + 'not ok 1 Error: Preserve stack\n' - + ' ---\n' - + ' operator: error\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + ' [Error: Preserve stack]\n' - + ' stack: |-\n' - + ' foo\n' - + ' bar\n' - + ' ...\n' - + '\n' - + '1..1\n' - + '# tests 1\n' - + '# pass 0\n' - + '# fail 1\n' - ); - - tt.deepEqual(getDiag(body), { - stack: stackTrace, - operator: 'error', - expected: 'undefined', - actual: '[Error: Preserve stack]' - }); - })); - - test('multiline stack trace', function (t) { - t.plan(1); - var err = new Error('Preserve stack'); - err.stack = stackTrace; - t.error(err); - }); -}); - -function getDiag (body) { - var yamlStart = body.indexOf(' ---'); - var yamlEnd = body.indexOf(' ...\n'); - var diag = body.slice(yamlStart, yamlEnd).split('\n').map(function (line) { - return line.slice(2); - }).join('\n'); - - return yaml.safeLoad(diag); -} diff --git a/node_modules/tape/test/subcount.js b/node_modules/tape/test/subcount.js deleted file mode 100644 index 3a5df3f..0000000 --- a/node_modules/tape/test/subcount.js +++ /dev/null @@ -1,14 +0,0 @@ -var test = require('../'); - -test('parent test', function (t) { - t.plan(2); - t.test('first child', function (t) { - t.plan(1); - t.pass('pass first child'); - }) - - t.test(function (t) { - t.plan(1); - t.pass('pass second child'); - }) -}) diff --git a/node_modules/tape/test/subtest_and_async.js b/node_modules/tape/test/subtest_and_async.js deleted file mode 100644 index 719dbf5..0000000 --- a/node_modules/tape/test/subtest_and_async.js +++ /dev/null @@ -1,23 +0,0 @@ -var test = require('../'); - -var asyncFunction = function (callback) { - setTimeout(callback, Math.random * 50); -}; - -test('master test', function (t) { - t.test('subtest 1', function (t) { - t.pass('subtest 1 before async call'); - asyncFunction(function () { - t.pass('subtest 1 in async callback'); - t.end(); - }) - }); - - t.test('subtest 2', function (t) { - t.pass('subtest 2 before async call'); - asyncFunction(function () { - t.pass('subtest 2 in async callback'); - t.end(); - }) - }); -}); diff --git a/node_modules/tape/test/subtest_plan.js b/node_modules/tape/test/subtest_plan.js deleted file mode 100644 index 2b075ae..0000000 --- a/node_modules/tape/test/subtest_plan.js +++ /dev/null @@ -1,21 +0,0 @@ -var test = require('../'); - -test('parent', function (t) { - t.plan(3) - - var firstChildRan = false; - - t.pass('assertion in parent'); - - t.test('first child', function (t) { - t.plan(1); - t.pass('pass first child'); - firstChildRan = true; - }); - - t.test('second child', function (t) { - t.plan(2); - t.ok(firstChildRan, 'first child ran first'); - t.pass('pass second child'); - }); -}); diff --git a/node_modules/tape/test/throws.js b/node_modules/tape/test/throws.js deleted file mode 100644 index 31ab9a4..0000000 --- a/node_modules/tape/test/throws.js +++ /dev/null @@ -1,145 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -function fn() { - throw new TypeError('RegExp'); -} - -function getNonFunctionMessage(fn) { - try { - fn(); - } catch (e) { - return e.message; - } -} - -tap.test('failures', function (tt) { - tt.plan(1); - - var test = tape.createHarness(); - test.createStream().pipe(concat(function (body) { - tt.equal( - body.toString('utf8'), - 'TAP version 13\n' - + '# non functions\n' - + 'not ok 1 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + " { [TypeError: " + getNonFunctionMessage() + "] message: '" + getNonFunctionMessage() + "' }\n" - + ' ...\n' - + 'not ok 2 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + " { [TypeError: " + getNonFunctionMessage(null) + "] message: '" + getNonFunctionMessage(null) + "' }\n" - + ' ...\n' - + 'not ok 3 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + " { [TypeError: " + getNonFunctionMessage(true) + "] message: '" + getNonFunctionMessage(true) + "' }\n" - + ' ...\n' - + 'not ok 4 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + " { [TypeError: " + getNonFunctionMessage(false) + "] message: '" + getNonFunctionMessage(false) + "' }\n" - + ' ...\n' - + 'not ok 5 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + " { [TypeError: " + getNonFunctionMessage('abc') + "] message: '" + getNonFunctionMessage('abc') + "' }\n" - + ' ...\n' - + 'not ok 6 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + " { [TypeError: " + getNonFunctionMessage(/a/g) + "] message: '" + getNonFunctionMessage(/a/g) + "' }\n" - + ' ...\n' - + 'not ok 7 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + " { [TypeError: " + getNonFunctionMessage([]) + "] message: '" + getNonFunctionMessage([]) + "' }\n" - + ' ...\n' - + 'not ok 8 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: |-\n' - + ' undefined\n' - + ' actual: |-\n' - + " { [TypeError: " + getNonFunctionMessage({}) + "] message: '" + getNonFunctionMessage({}) + "' }\n" - + ' ...\n' - + '# function\n' - + 'not ok 9 should throw\n' - + ' ---\n' - + ' operator: throws\n' - + ' expected: undefined\n' - + ' actual: undefined\n' - + ' ...\n' - + '# custom error messages\n' - + 'ok 10 "message" is enumerable\n' - + "ok 11 { custom: 'error', message: 'message' }\n" - + 'ok 12 getter is still the same\n' - + '# throws null\n' - + 'ok 13 throws null\n' - + '\n1..13\n' - + '# tests 13\n' - + '# pass 4\n' - + '# fail 9\n' - ); - })); - - test('non functions', function (t) { - t.plan(8); - t.throws(); - t.throws(null); - t.throws(true); - t.throws(false); - t.throws('abc'); - t.throws(/a/g); - t.throws([]); - t.throws({}); - }); - - test('function', function (t) { - t.plan(1); - t.throws(function () {}); - }); - - test('custom error messages', function (t) { - t.plan(3); - var getter = function () { return 'message'; }; - var messageGetterError = Object.defineProperty( - { custom: 'error' }, - 'message', - { configurable: true, enumerable: true, get: getter } - ); - t.equal(Object.prototype.propertyIsEnumerable.call(messageGetterError, 'message'), true, '"message" is enumerable'); - t.throws(function () { throw messageGetterError; }, "{ custom: 'error', message: 'message' }"); - t.equal(Object.getOwnPropertyDescriptor(messageGetterError, 'message').get, getter, 'getter is still the same'); - }); - - test('throws null', function (t) { - t.plan(1); - t.throws(function () { throw null; }, 'throws null'); - t.end(); - }); -}); diff --git a/node_modules/tape/test/timeout.js b/node_modules/tape/test/timeout.js deleted file mode 100644 index 9f4cd82..0000000 --- a/node_modules/tape/test/timeout.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('../'); -var ran = 0; - -test('timeout', function(t) { - t.pass('this should run'); - ran++; - setTimeout(function () { - t.end(); - }, 100); -}); - -test('should still run', { timeout: 50 }, function(t) { - t.equal(ran, 1); - t.end(); -}); diff --git a/node_modules/tape/test/timeoutAfter.js b/node_modules/tape/test/timeoutAfter.js deleted file mode 100644 index e44e3c7..0000000 --- a/node_modules/tape/test/timeoutAfter.js +++ /dev/null @@ -1,31 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -tap.test('timeoutAfter test', function (tt) { - tt.plan(1); - - var test = tape.createHarness(); - var tc = function (rows) { - tt.same(rows.toString('utf8'), [ - 'TAP version 13', - '# timeoutAfter', - 'not ok 1 test timed out after 1ms', - ' ---', - ' operator: fail', - ' ...', - '', - '1..1', - '# tests 1', - '# pass 0', - '# fail 1' - ].join('\n') + '\n'); - }; - - test.createStream().pipe(concat(tc)); - - test('timeoutAfter', function (t) { - t.plan(1); - t.timeoutAfter(1); - }); -}); diff --git a/node_modules/tape/test/too_many.js b/node_modules/tape/test/too_many.js deleted file mode 100644 index 233a7ab..0000000 --- a/node_modules/tape/test/too_many.js +++ /dev/null @@ -1,67 +0,0 @@ -var falafel = require('falafel'); -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -tap.test('array test', function (tt) { - tt.plan(1); - - var test = tape.createHarness({ exit : false }); - var tc = function (rows) { - tt.same(rows.toString('utf8'), [ - 'TAP version 13', - '# array', - 'ok 1 should be equivalent', - 'ok 2 should be equivalent', - 'ok 3 should be equivalent', - 'ok 4 should be equivalent', - 'not ok 5 plan != count', - ' ---', - ' operator: fail', - ' expected: 3', - ' actual: 4', - ' ...', - 'ok 6 should be equivalent', - '', - '1..6', - '# tests 6', - '# pass 5', - '# fail 1' - ].join('\n') + '\n'); - }; - - test.createStream().pipe(concat(tc)); - - test('array', function (t) { - t.plan(3); - - var src = '(' + function () { - var xs = [ 1, 2, [ 3, 4 ] ]; - var ys = [ 5, 6 ]; - g([ xs, ys ]); - } + ')()'; - - var output = falafel(src, function (node) { - if (node.type === 'ArrayExpression') { - node.update('fn(' + node.source() + ')'); - } - }); - - var arrays = [ - [ 3, 4 ], - [ 1, 2, [ 3, 4 ] ], - [ 5, 6 ], - [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], - ]; - - Function(['fn','g'], output)( - function (xs) { - t.same(arrays.shift(), xs); - return xs; - }, - function (xs) { - t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); - } - ); - }); -}); diff --git a/node_modules/tape/test/undef.js b/node_modules/tape/test/undef.js deleted file mode 100644 index d3ae8d4..0000000 --- a/node_modules/tape/test/undef.js +++ /dev/null @@ -1,34 +0,0 @@ -var tape = require('../'); -var tap = require('tap'); -var concat = require('concat-stream'); - -tap.test('array test', function (tt) { - tt.plan(1); - - var test = tape.createHarness(); - test.createStream().pipe(concat(function (body) { - tt.equal( - body.toString('utf8'), - 'TAP version 13\n' - + '# undef\n' - + 'not ok 1 should be equivalent\n' - + ' ---\n' - + ' operator: deepEqual\n' - + ' expected: |-\n' - + ' { beep: undefined }\n' - + ' actual: |-\n' - + ' {}\n' - + ' ...\n' - + '\n' - + '1..1\n' - + '# tests 1\n' - + '# pass 0\n' - + '# fail 1\n' - ); - })); - - test('undef', function (t) { - t.plan(1); - t.deepEqual({}, { beep: undefined }); - }); -}); diff --git a/node_modules/through/.travis.yml b/node_modules/through/.travis.yml deleted file mode 100644 index c693a93..0000000 --- a/node_modules/through/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - "0.10" diff --git a/node_modules/through/LICENSE.APACHE2 b/node_modules/through/LICENSE.APACHE2 deleted file mode 100644 index 6366c04..0000000 --- a/node_modules/through/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/through/LICENSE.MIT b/node_modules/through/LICENSE.MIT deleted file mode 100644 index 6eafbd7..0000000 --- a/node_modules/through/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/through/index.js b/node_modules/through/index.js deleted file mode 100644 index ca5fc59..0000000 --- a/node_modules/through/index.js +++ /dev/null @@ -1,108 +0,0 @@ -var Stream = require('stream') - -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) - -exports = module.exports = through -through.through = through - -//create a readable writable stream. - -function through (write, end, opts) { - write = write || function (data) { this.queue(data) } - end = end || function () { this.queue(null) } - - var ended = false, destroyed = false, buffer = [], _ended = false - var stream = new Stream() - stream.readable = stream.writable = true - stream.paused = false - -// stream.autoPause = !(opts && opts.autoPause === false) - stream.autoDestroy = !(opts && opts.autoDestroy === false) - - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } - - function drain() { - while(buffer.length && !stream.paused) { - var data = buffer.shift() - if(null === data) - return stream.emit('end') - else - stream.emit('data', data) - } - } - - stream.queue = stream.push = function (data) { -// console.error(ended) - if(_ended) return stream - if(data === null) _ended = true - buffer.push(data) - drain() - return stream - } - - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - //this is only a problem if end is not emitted synchronously. - //a nicer way to do this is to make sure this is the last listener for 'end' - - stream.on('end', function () { - stream.readable = false - if(!stream.writable && stream.autoDestroy) - process.nextTick(function () { - stream.destroy() - }) - }) - - function _end () { - stream.writable = false - end.call(stream) - if(!stream.readable && stream.autoDestroy) - stream.destroy() - } - - stream.end = function (data) { - if(ended) return - ended = true - if(arguments.length) stream.write(data) - _end() // will emit or queue - return stream - } - - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - buffer.length = 0 - stream.writable = stream.readable = false - stream.emit('close') - return stream - } - - stream.pause = function () { - if(stream.paused) return - stream.paused = true - return stream - } - - stream.resume = function () { - if(stream.paused) { - stream.paused = false - stream.emit('resume') - } - drain() - //may have become paused again, - //as drain emits 'data'. - if(!stream.paused) - stream.emit('drain') - return stream - } - return stream -} - diff --git a/node_modules/through/package.json b/node_modules/through/package.json deleted file mode 100644 index cd965d4..0000000 --- a/node_modules/through/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "through@~2.3.8", - "/Users/jbaylina/git/MVP/node_modules/tape" - ] - ], - "_from": "through@>=2.3.8 <2.4.0", - "_id": "through@2.3.8", - "_inCache": true, - "_installable": true, - "_location": "/through", - "_nodeVersion": "2.3.1", - "_npmUser": { - "email": "dominic.tarr@gmail.com", - "name": "dominictarr" - }, - "_npmVersion": "2.12.0", - "_phantomChildren": {}, - "_requested": { - "name": "through", - "raw": "through@~2.3.8", - "rawSpec": "~2.3.8", - "scope": null, - "spec": ">=2.3.8 <2.4.0", - "type": "range" - }, - "_requiredBy": [ - "/resumer", - "/tape" - ], - "_resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "_shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5", - "_shrinkwrap": null, - "_spec": "through@~2.3.8", - "_where": "/Users/jbaylina/git/MVP/node_modules/tape", - "author": { - "email": "dominic.tarr@gmail.com", - "name": "Dominic Tarr", - "url": "dominictarr.com" - }, - "bugs": { - "url": "https://github.com/dominictarr/through/issues" - }, - "dependencies": {}, - "description": "simplified stream construction", - "devDependencies": { - "from": "~0.1.3", - "stream-spec": "~0.3.5", - "tape": "~2.3.2" - }, - "directories": {}, - "dist": { - "shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5", - "tarball": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - }, - "gitHead": "2c5a6f9a0cc54da759b6e10964f2081c358e49dc", - "homepage": "https://github.com/dominictarr/through", - "keywords": [ - "stream", - "streams", - "user-streams", - "pipe" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "dominic.tarr@gmail.com", - "name": "dominictarr" - } - ], - "name": "through", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/dominictarr/through.git" - }, - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "testling": { - "browsers": [ - "ie/8..latest", - "ff/15..latest", - "chrome/20..latest", - "safari/5.1..latest" - ], - "files": "test/*.js" - }, - "version": "2.3.8" -} diff --git a/node_modules/through/readme.markdown b/node_modules/through/readme.markdown deleted file mode 100644 index cb34c81..0000000 --- a/node_modules/through/readme.markdown +++ /dev/null @@ -1,64 +0,0 @@ -#through - -[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through) -[![testling badge](https://ci.testling.com/dominictarr/through.png)](https://ci.testling.com/dominictarr/through) - -Easy way to create a `Stream` that is both `readable` and `writable`. - -* Pass in optional `write` and `end` methods. -* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`. -* Use `this.pause()` and `this.resume()` to manage flow. -* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`). - -This function is the basis for most of the synchronous streams in -[event-stream](http://github.com/dominictarr/event-stream). - -``` js -var through = require('through') - -through(function write(data) { - this.queue(data) //data *must* not be null - }, - function end () { //optional - this.queue(null) - }) -``` - -Or, can also be used _without_ buffering on pause, use `this.emit('data', data)`, -and this.emit('end') - -``` js -var through = require('through') - -through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) -``` - -## Extended Options - -You will probably not need these 99% of the time. - -### autoDestroy=false - -By default, `through` emits close when the writable -and readable side of the stream has ended. -If that is not desired, set `autoDestroy=false`. - -``` js -var through = require('through') - -//like this -var ts = through(write, end, {autoDestroy: false}) -//or like this -var ts = through(write, end) -ts.autoDestroy = false -``` - -## License - -MIT / Apache2 diff --git a/node_modules/through/test/async.js b/node_modules/through/test/async.js deleted file mode 100644 index 46bdbae..0000000 --- a/node_modules/through/test/async.js +++ /dev/null @@ -1,28 +0,0 @@ -var from = require('from') -var through = require('../') - -var tape = require('tape') - -tape('simple async example', function (t) { - - var n = 0, expected = [1,2,3,4,5], actual = [] - from(expected) - .pipe(through(function(data) { - this.pause() - n ++ - setTimeout(function(){ - console.log('pushing data', data) - this.push(data) - this.resume() - }.bind(this), 300) - })).pipe(through(function(data) { - console.log('pushing data second time', data); - this.push(data) - })).on('data', function (d) { - actual.push(d) - }).on('end', function() { - t.deepEqual(actual, expected) - t.end() - }) - -}) diff --git a/node_modules/through/test/auto-destroy.js b/node_modules/through/test/auto-destroy.js deleted file mode 100644 index 9a8fd00..0000000 --- a/node_modules/through/test/auto-destroy.js +++ /dev/null @@ -1,30 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('end before close', function (assert) { - var ts = through() - ts.autoDestroy = false - var ended = false, closed = false - - ts.on('end', function () { - assert.ok(!closed) - ended = true - }) - ts.on('close', function () { - assert.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.ok(ended) - assert.notOk(closed) - ts.destroy() - assert.ok(closed) - assert.end() -}) - diff --git a/node_modules/through/test/buffering.js b/node_modules/through/test/buffering.js deleted file mode 100644 index b0084bf..0000000 --- a/node_modules/through/test/buffering.js +++ /dev/null @@ -1,71 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('buffering', function(assert) { - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - assert.deepEqual(actual, [1, 2, 3]) - ts.pause() - ts.write(4) - ts.write(5) - ts.write(6) - assert.deepEqual(actual, [1, 2, 3]) - ts.resume() - assert.deepEqual(actual, [1, 2, 3, 4, 5, 6]) - ts.pause() - ts.end() - assert.ok(!ended) - ts.resume() - assert.ok(ended) - assert.end() -}) - -test('buffering has data in queue, when ends', function (assert) { - - /* - * If stream ends while paused with data in the queue, - * stream should still emit end after all data is written - * on resume. - */ - - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.pause() - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.deepEqual(actual, [], 'no data written yet, still paused') - assert.ok(!ended, 'end not emitted yet, still paused') - ts.resume() - assert.deepEqual(actual, [1, 2, 3], 'resumed, all data should be delivered') - assert.ok(ended, 'end should be emitted once all data was delivered') - assert.end(); -}) diff --git a/node_modules/through/test/end.js b/node_modules/through/test/end.js deleted file mode 100644 index fa113f5..0000000 --- a/node_modules/through/test/end.js +++ /dev/null @@ -1,45 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('end before close', function (assert) { - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - assert.ok(!closed) - ended = true - }) - ts.on('close', function () { - assert.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.ok(ended) - assert.ok(closed) - assert.end() -}) - -test('end only once', function (t) { - - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - t.equal(ended, false) - ended = true - }) - - ts.queue(null) - ts.queue(null) - ts.queue(null) - - ts.resume() - - t.end() -}) diff --git a/node_modules/through/test/index.js b/node_modules/through/test/index.js deleted file mode 100644 index 96da82f..0000000 --- a/node_modules/through/test/index.js +++ /dev/null @@ -1,133 +0,0 @@ - -var test = require('tape') -var spec = require('stream-spec') -var through = require('../') - -/* - I'm using these two functions, and not streams and pipe - so there is less to break. if this test fails it must be - the implementation of _through_ -*/ - -function write(array, stream) { - array = array.slice() - function next() { - while(array.length) - if(stream.write(array.shift()) === false) - return stream.once('drain', next) - - stream.end() - } - - next() -} - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -test('simple defaults', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through() - var s = spec(t).through().pausable() - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected) - assert.end() - }) - - t.on('close', s.validate) - - write(expected, t) -}); - -test('simple functions', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through(function (data) { - this.emit('data', data*2) - }) - var s = spec(t).through().pausable() - - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected.map(function (data) { - return data*2 - })) - assert.end() - }) - - t.on('close', s.validate) - - write(expected, t) -}) - -test('pauses', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l) //Math.random()) - - var t = through() - - var s = spec(t) - .through() - .pausable() - - t.on('data', function () { - if(Math.random() > 0.1) return - t.pause() - process.nextTick(function () { - t.resume() - }) - }) - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected) - }) - - t.on('close', function () { - s.validate() - assert.end() - }) - - write(expected, t) -}) - -test('does not soft-end on `undefined`', function(assert) { - var stream = through() - , count = 0 - - stream.on('data', function (data) { - count++ - }) - - stream.write(undefined) - stream.write(undefined) - - assert.equal(count, 2) - - assert.end() -}) diff --git a/node_modules/tough-cookie/LICENSE b/node_modules/tough-cookie/LICENSE deleted file mode 100644 index 1bc286f..0000000 --- a/node_modules/tough-cookie/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2015, Salesforce.com, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=== - -The following exceptions apply: - -=== - -`public_suffix_list.dat` was obtained from - via -. The license for this file is MPL/2.0. The header of -that file reads as follows: - - // This Source Code Form is subject to the terms of the Mozilla Public - // License, v. 2.0. If a copy of the MPL was not distributed with this - // file, You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/node_modules/tough-cookie/README.md b/node_modules/tough-cookie/README.md deleted file mode 100644 index 126f222..0000000 --- a/node_modules/tough-cookie/README.md +++ /dev/null @@ -1,506 +0,0 @@ -[RFC6265](https://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js - -[![npm package](https://nodei.co/npm/tough-cookie.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/tough-cookie/) - -[![Build Status](https://travis-ci.org/SalesforceEng/tough-cookie.png?branch=master)](https://travis-ci.org/SalesforceEng/tough-cookie) - -# Synopsis - -``` javascript -var tough = require('tough-cookie'); -var Cookie = tough.Cookie; -var cookie = Cookie.parse(header); -cookie.value = 'somethingdifferent'; -header = cookie.toString(); - -var cookiejar = new tough.CookieJar(); -cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); -// ... -cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { - res.headers['cookie'] = cookies.join('; '); -}); -``` - -# Installation - -It's _so_ easy! - -`npm install tough-cookie` - -Why the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken. - -## Version Support - -Support for versions of node.js will follow that of the [request](https://www.npmjs.com/package/request) module. - -# API - -## tough - -Functions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be "bound". - -**Note**: prior to 1.0.x, several of these functions took a `strict` parameter. This has since been removed from the API as it was no longer necessary. - -### `parseDate(string)` - -Parse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. - -### `formatDate(date)` - -Format a Date into a RFC1123 string (the RFC6265-recommended format). - -### `canonicalDomain(str)` - -Transforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects). - -### `domainMatch(str,domStr[,canonicalize=true])` - -Answers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match". - -The `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not. - -### `defaultPath(path)` - -Given a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC. - -The `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output. - -### `pathMatch(reqPath,cookiePath)` - -Answers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean. - -This is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`. - -### `parse(cookieString[, options])` - -alias for `Cookie.parse(cookieString[, options])` - -### `fromJSON(string)` - -alias for `Cookie.fromJSON(string)` - -### `getPublicSuffix(hostname)` - -Returns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it. - -For example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`. - -For further information, see http://publicsuffix.org/. This module derives its list from that site. - -### `cookieCompare(a,b)` - -For use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). The sort algorithm is, in order of precedence: - -* Longest `.path` -* oldest `.creation` (which has a 1ms precision, same as `Date`) -* lowest `.creationIndex` (to get beyond the 1ms precision) - -``` javascript -var cookies = [ /* unsorted array of Cookie objects */ ]; -cookies = cookies.sort(cookieCompare); -``` - -**Note**: Since JavaScript's `Date` is limited to a 1ms precision, cookies within the same milisecond are entirely possible. This is especially true when using the `now` option to `.setCookie()`. The `.creationIndex` property is a per-process global counter, assigned during construction with `new Cookie()`. This preserves the spirit of the RFC sorting: older cookies go first. This works great for `MemoryCookieStore`, since `Set-Cookie` headers are parsed in order, but may not be so great for distributed systems. Sophisticated `Store`s may wish to set this to some other _logical clock_ such that if cookies A and B are created in the same millisecond, but cookie A is created before cookie B, then `A.creationIndex < B.creationIndex`. If you want to alter the global counter, which you probably _shouldn't_ do, it's stored in `Cookie.cookiesCreated`. - -### `permuteDomain(domain)` - -Generates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores. - -### `permutePath(path)` - -Generates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores. - - -## Cookie - -Exported via `tough.Cookie`. - -### `Cookie.parse(cookieString[, options])` - -Parses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. - -The options parameter is not required and currently has only one property: - - * _loose_ - boolean - if `true` enable parsing of key-less cookies like `=abc` and `=`, which are not RFC-compliant. - -If options is not an object, it is ignored, which means you can use `Array#map` with it. - -Here's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response: - -``` javascript -if (res.headers['set-cookie'] instanceof Array) - cookies = res.headers['set-cookie'].map(Cookie.parse); -else - cookies = [Cookie.parse(res.headers['set-cookie'])]; -``` - -### Properties - -Cookie object properties: - - * _key_ - string - the name or key of the cookie (default "") - * _value_ - string - the value of the cookie (default "") - * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()` - * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()` - * _domain_ - string - the `Domain=` attribute of the cookie - * _path_ - string - the `Path=` of the cookie - * _secure_ - boolean - the `Secure` cookie flag - * _httpOnly_ - boolean - the `HttpOnly` cookie flag - * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside) - * _creation_ - `Date` - when this cookie was constructed - * _creationIndex_ - number - set at construction, used to provide greater sort precision (please see `cookieCompare(a,b)` for a full explanation) - -After a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes: - - * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied) - * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one. - * _creation_ - `Date` - **modified** from construction to when the cookie was added to the jar - * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute. - -### `Cookie([{properties}])` - -Receives an options object that can contain any of the above Cookie properties, uses the default for unspecified properties. - -### `.toString()` - -encode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`. - -### `.cookieString()` - -encode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '='). - -### `.setExpires(String)` - -sets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `"Infinity"` (a string) is set. - -### `.setMaxAge(number)` - -sets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly. - -### `.expiryTime([now=Date.now()])` - -### `.expiryDate([now=Date.now()])` - -expiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds. - -Max-Age takes precedence over Expires (as per the RFC). The `.creation` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute. - -If Expires (`.expires`) is set, that's returned. - -Otherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents). - -### `.TTL([now=Date.now()])` - -compute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply. - -The "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned. - -### `.canonicalizedDoman()` - -### `.cdomain()` - -return the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters. - -### `.toJSON()` - -For convenience in using `JSON.serialize(cookie)`. Returns a plain-old `Object` that can be JSON-serialized. - -Any `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are exported in ISO format (`.toISOString()`). - -**NOTE**: Custom `Cookie` properties will be discarded. In tough-cookie 1.x, since there was no `.toJSON` method explicitly defined, all enumerable properties were captured. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array. - -### `Cookie.fromJSON(strOrObj)` - -Does the reverse of `cookie.toJSON()`. If passed a string, will `JSON.parse()` that first. - -Any `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are parsed via `Date.parse()`, not the tough-cookie `parseDate`, since it's JavaScript/JSON-y timestamps being handled at this layer. - -Returns `null` upon JSON parsing error. - -### `.clone()` - -Does a deep clone of this cookie, exactly implemented as `Cookie.fromJSON(cookie.toJSON())`. - -### `.validate()` - -Status: *IN PROGRESS*. Works for a few things, but is by no means comprehensive. - -validates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct: - -``` javascript -if (cookie.validate() === true) { - // it's tasty -} else { - // yuck! -} -``` - - -## CookieJar - -Exported via `tough.CookieJar`. - -### `CookieJar([store],[options])` - -Simply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used. - -The `options` object can be omitted and can have the following properties: - - * _rejectPublicSuffixes_ - boolean - default `true` - reject cookies with domains like "com" and "co.uk" - * _looseMode_ - boolean - default `false` - accept malformed cookies like `bar` and `=bar`, which have an implied empty name. - This is not in the standard, but is used sometimes on the web and is accepted by (most) browsers. - -Since eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods. - -### `.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))` - -Attempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.creation`, `.lastAccessed` and `.hostOnly` properties. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. `Store` errors aren't ignored by this option. - -As per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual). - -### `.setCookieSync(cookieOrString, currentUrl, [{options}])` - -Synchronous version of `setCookie`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getCookies(currentUrl, [{options},] cb(err,cookies))` - -Retrieve the list of cookies that can be sent in a Cookie header for the current url. - -If an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially). - * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the underlying store (the default `MemoryCookieStore` supports it). - -The `.lastAccessed` property of the returned cookies will have been updated. - -### `.getCookiesSync(currentUrl, [{options}])` - -Synchronous version of `getCookies`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getCookieString(...)` - -Accepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`. - -### `.getCookieStringSync(...)` - -Synchronous version of `getCookieString`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getSetCookieStrings(...)` - -Returns an array of strings suitable for **Set-Cookie** headers. Accepts the same options as `.getCookies()`. Simply maps the cookie array via `.toString()`. - -### `.getSetCookieStringsSync(...)` - -Synchronous version of `getSetCookieStrings`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.serialize(cb(err,serializedObject))` - -Serialize the Jar if the underlying store supports `.getAllCookies`. - -**NOTE**: Custom `Cookie` properties will be discarded. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array. - -See [Serialization Format]. - -### `.serializeSync()` - -Sync version of .serialize - -### `.toJSON()` - -Alias of .serializeSync() for the convenience of `JSON.stringify(cookiejar)`. - -### `CookieJar.deserialize(serialized, [store], cb(err,object))` - -A new Jar is created and the serialized Cookies are added to the underlying store. Each `Cookie` is added via `store.putCookie` in the order in which they appear in the serialization. - -The `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. - -As a convenience, if `serialized` is a string, it is passed through `JSON.parse` first. If that throws an error, this is passed to the callback. - -### `CookieJar.deserializeSync(serialized, [store])` - -Sync version of `.deserialize`. _Note_ that the `store` must be synchronous for this to work. - -### `CookieJar.fromJSON(string)` - -Alias of `.deserializeSync` to provide consistency with `Cookie.fromJSON()`. - -### `.clone([store,]cb(err,newJar))` - -Produces a deep clone of this jar. Modifications to the original won't affect the clone, and vice versa. - -The `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. Transferring between store types is supported so long as the source implements `.getAllCookies()` and the destination implements `.putCookie()`. - -### `.cloneSync([store])` - -Synchronous version of `.clone`, returning a new `CookieJar` instance. - -The `store` argument is optional, but must be a _synchronous_ `Store` instance if specified. If not passed, a new instance of `MemoryCookieStore` is used. - -The _source_ and _destination_ must both be synchronous `Store`s. If one or both stores are asynchronous, use `.clone` instead. Recall that `MemoryCookieStore` supports both synchronous and asynchronous API calls. - -## Store - -Base class for CookieJar stores. Available as `tough.Store`. - -## Store API - -The storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores. - -Stores should inherit from the base `Store` class, which is available as `require('tough-cookie').Store`. - -Stores are asynchronous by default, but if `store.synchronous` is set to `true`, then the `*Sync` methods on the of the containing `CookieJar` can be used (however, the continuation-passing style - -All `domain` parameters will have been normalized before calling. - -The Cookie store must have all of the following methods. - -### `store.findCookie(domain, path, key, cb(err,cookie))` - -Retrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned. - -Callback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error). - -### `store.findCookies(domain, path, cb(err,cookies))` - -Locates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above. - -If no cookies are found, the callback MUST be passed an empty array. - -The resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done. - -As of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only). - -### `store.putCookie(cookie, cb(err))` - -Adds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur. - -The `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties. - -Pass an error if the cookie cannot be stored. - -### `store.updateCookie(oldCookie, newCookie, cb(err))` - -Update an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store. - -The `.lastAccessed` property will always be different between the two objects (to the precision possible via JavaScript's clock). Both `.creation` and `.creationIndex` are guaranteed to be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are selected for automatic deletion (e.g., least-recently-used, which is up to the store to implement). - -Stores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object. - -The `newCookie` and `oldCookie` objects MUST NOT be modified. - -Pass an error if the newCookie cannot be stored. - -### `store.removeCookie(domain, path, key, cb(err))` - -Remove a cookie from the store (see notes on `findCookie` about the uniqueness constraint). - -The implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie. - -### `store.removeCookies(domain, path, cb(err))` - -Removes matching cookies from the store. The `path` parameter is optional, and if missing means all paths in a domain should be removed. - -Pass an error ONLY if removing any existing cookies failed. - -### `store.getAllCookies(cb(err, cookies))` - -Produces an `Array` of all cookies during `jar.serialize()`. The items in the array can be true `Cookie` objects or generic `Object`s with the [Serialization Format] data structure. - -Cookies SHOULD be returned in creation order to preserve sorting via `compareCookies()`. For reference, `MemoryCookieStore` will sort by `.creationIndex` since it uses true `Cookie` objects internally. If you don't return the cookies in creation order, they'll still be sorted by creation time, but this only has a precision of 1ms. See `compareCookies` for more detail. - -Pass an error if retrieval fails. - -## MemoryCookieStore - -Inherits from `Store`. - -A just-in-memory CookieJar synchronous store implementation, used by default. Despite being a synchronous implementation, it's usable with both the synchronous and asynchronous forms of the `CookieJar` API. - -## Community Cookie Stores - -These are some Store implementations authored and maintained by the community. They aren't official and we don't vouch for them but you may be interested to have a look: - -- [`db-cookie-store`](https://github.com/JSBizon/db-cookie-store): SQL including SQLite-based databases -- [`file-cookie-store`](https://github.com/JSBizon/file-cookie-store): Netscape cookie file format on disk -- [`redis-cookie-store`](https://github.com/benkroeger/redis-cookie-store): Redis -- [`tough-cookie-filestore`](https://github.com/mitsuru/tough-cookie-filestore): JSON on disk -- [`tough-cookie-web-storage-store`](https://github.com/exponentjs/tough-cookie-web-storage-store): DOM localStorage and sessionStorage - - -# Serialization Format - -**NOTE**: if you want to have custom `Cookie` properties serialized, add the property name to `Cookie.serializableProperties`. - -```js - { - // The version of tough-cookie that serialized this jar. - version: 'tough-cookie@1.x.y', - - // add the store type, to make humans happy: - storeType: 'MemoryCookieStore', - - // CookieJar configuration: - rejectPublicSuffixes: true, - // ... future items go here - - // Gets filled from jar.store.getAllCookies(): - cookies: [ - { - key: 'string', - value: 'string', - // ... - /* other Cookie.serializableProperties go here */ - } - ] - } -``` - -# Copyright and License - -(tl;dr: BSD-3-Clause with some MPL/2.0) - -```text - Copyright (c) 2015, Salesforce.com, Inc. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of Salesforce.com nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -``` - -Portions may be licensed under different licenses (in particular `public_suffix_list.dat` is MPL/2.0); please read that file and the LICENSE file for full details. diff --git a/node_modules/tough-cookie/lib/cookie.js b/node_modules/tough-cookie/lib/cookie.js deleted file mode 100644 index c3dacfe..0000000 --- a/node_modules/tough-cookie/lib/cookie.js +++ /dev/null @@ -1,1336 +0,0 @@ -/*! - * Copyright (c) 2015, Salesforce.com, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of Salesforce.com nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -'use strict'; -var net = require('net'); -var urlParse = require('url').parse; -var pubsuffix = require('./pubsuffix'); -var Store = require('./store').Store; -var MemoryCookieStore = require('./memstore').MemoryCookieStore; -var pathMatch = require('./pathMatch').pathMatch; -var VERSION = require('../package.json').version; - -var punycode; -try { - punycode = require('punycode'); -} catch(e) { - console.warn("cookie: can't load punycode; won't use punycode for domain normalization"); -} - -var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/; - -// From RFC6265 S4.1.1 -// note that it excludes \x3B ";" -var COOKIE_OCTET = /[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]/; -var COOKIE_OCTETS = new RegExp('^'+COOKIE_OCTET.source+'+$'); - -var CONTROL_CHARS = /[\x00-\x1F]/; - -// Double quotes are part of the value (see: S4.1.1). -// '\r', '\n' and '\0' should be treated as a terminator in the "relaxed" mode -// (see: https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60) -// '=' and ';' are attribute/values separators -// (see: https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L64) -var COOKIE_PAIR = /^(([^=;]+))\s*=\s*([^\n\r\0]*)/; - -// Used to parse non-RFC-compliant cookies like '=abc' when given the `loose` -// option in Cookie.parse: -var LOOSE_COOKIE_PAIR = /^((?:=)?([^=;]*)\s*=\s*)?([^\n\r\0]*)/; - -// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"' -// Note ';' is \x3B -var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/; - -var DAY_OF_MONTH = /^(\d{1,2})[^\d]*$/; -var TIME = /^(\d{1,2})[^\d]*:(\d{1,2})[^\d]*:(\d{1,2})[^\d]*$/; -var MONTH = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/i; - -var MONTH_TO_NUM = { - jan:0, feb:1, mar:2, apr:3, may:4, jun:5, - jul:6, aug:7, sep:8, oct:9, nov:10, dec:11 -}; -var NUM_TO_MONTH = [ - 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' -]; -var NUM_TO_DAY = [ - 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' -]; - -var YEAR = /^(\d{2}|\d{4})$/; // 2 to 4 digits - -var MAX_TIME = 2147483647000; // 31-bit max -var MIN_TIME = 0; // 31-bit min - - -// RFC6265 S5.1.1 date parser: -function parseDate(str) { - if (!str) { - return; - } - - /* RFC6265 S5.1.1: - * 2. Process each date-token sequentially in the order the date-tokens - * appear in the cookie-date - */ - var tokens = str.split(DATE_DELIM); - if (!tokens) { - return; - } - - var hour = null; - var minutes = null; - var seconds = null; - var day = null; - var month = null; - var year = null; - - for (var i=0; i 23 || minutes > 59 || seconds > 59) { - return; - } - - continue; - } - } - - /* 2.2. If the found-day-of-month flag is not set and the date-token matches - * the day-of-month production, set the found-day-of- month flag and set - * the day-of-month-value to the number denoted by the date-token. Skip - * the remaining sub-steps and continue to the next date-token. - */ - if (day === null) { - result = DAY_OF_MONTH.exec(token); - if (result) { - day = parseInt(result, 10); - /* RFC6265 S5.1.1.5: - * [fail if] the day-of-month-value is less than 1 or greater than 31 - */ - if(day < 1 || day > 31) { - return; - } - continue; - } - } - - /* 2.3. If the found-month flag is not set and the date-token matches the - * month production, set the found-month flag and set the month-value to - * the month denoted by the date-token. Skip the remaining sub-steps and - * continue to the next date-token. - */ - if (month === null) { - result = MONTH.exec(token); - if (result) { - month = MONTH_TO_NUM[result[1].toLowerCase()]; - continue; - } - } - - /* 2.4. If the found-year flag is not set and the date-token matches the year - * production, set the found-year flag and set the year-value to the number - * denoted by the date-token. Skip the remaining sub-steps and continue to - * the next date-token. - */ - if (year === null) { - result = YEAR.exec(token); - if (result) { - year = parseInt(result[0], 10); - /* From S5.1.1: - * 3. If the year-value is greater than or equal to 70 and less - * than or equal to 99, increment the year-value by 1900. - * 4. If the year-value is greater than or equal to 0 and less - * than or equal to 69, increment the year-value by 2000. - */ - if (70 <= year && year <= 99) { - year += 1900; - } else if (0 <= year && year <= 69) { - year += 2000; - } - - if (year < 1601) { - return; // 5. ... the year-value is less than 1601 - } - } - } - } - - if (seconds === null || day === null || month === null || year === null) { - return; // 5. ... at least one of the found-day-of-month, found-month, found- - // year, or found-time flags is not set, - } - - return new Date(Date.UTC(year, month, day, hour, minutes, seconds)); -} - -function formatDate(date) { - var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d; - var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h; - var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m; - var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s; - return NUM_TO_DAY[date.getUTCDay()] + ', ' + - d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+ - h+':'+m+':'+s+' GMT'; -} - -// S5.1.2 Canonicalized Host Names -function canonicalDomain(str) { - if (str == null) { - return null; - } - str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading . - - // convert to IDN if any non-ASCII characters - if (punycode && /[^\u0001-\u007f]/.test(str)) { - str = punycode.toASCII(str); - } - - return str.toLowerCase(); -} - -// S5.1.3 Domain Matching -function domainMatch(str, domStr, canonicalize) { - if (str == null || domStr == null) { - return null; - } - if (canonicalize !== false) { - str = canonicalDomain(str); - domStr = canonicalDomain(domStr); - } - - /* - * "The domain string and the string are identical. (Note that both the - * domain string and the string will have been canonicalized to lower case at - * this point)" - */ - if (str == domStr) { - return true; - } - - /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */ - - /* "* The string is a host name (i.e., not an IP address)." */ - if (net.isIP(str)) { - return false; - } - - /* "* The domain string is a suffix of the string" */ - var idx = str.indexOf(domStr); - if (idx <= 0) { - return false; // it's a non-match (-1) or prefix (0) - } - - // e.g "a.b.c".indexOf("b.c") === 2 - // 5 === 3+2 - if (str.length !== domStr.length + idx) { // it's not a suffix - return false; - } - - /* "* The last character of the string that is not included in the domain - * string is a %x2E (".") character." */ - if (str.substr(idx-1,1) !== '.') { - return false; - } - - return true; -} - - -// RFC6265 S5.1.4 Paths and Path-Match - -/* - * "The user agent MUST use an algorithm equivalent to the following algorithm - * to compute the default-path of a cookie:" - * - * Assumption: the path (and not query part or absolute uri) is passed in. - */ -function defaultPath(path) { - // "2. If the uri-path is empty or if the first character of the uri-path is not - // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. - if (!path || path.substr(0,1) !== "/") { - return "/"; - } - - // "3. If the uri-path contains no more than one %x2F ("/") character, output - // %x2F ("/") and skip the remaining step." - if (path === "/") { - return path; - } - - var rightSlash = path.lastIndexOf("/"); - if (rightSlash === 0) { - return "/"; - } - - // "4. Output the characters of the uri-path from the first character up to, - // but not including, the right-most %x2F ("/")." - return path.slice(0, rightSlash); -} - - -function parse(str, options) { - if (!options || typeof options !== 'object') { - options = {}; - } - str = str.trim(); - - // We use a regex to parse the "name-value-pair" part of S5.2 - var firstSemi = str.indexOf(';'); // S5.2 step 1 - var pairRe = options.loose ? LOOSE_COOKIE_PAIR : COOKIE_PAIR; - var result = pairRe.exec(firstSemi === -1 ? str : str.substr(0,firstSemi)); - - // Rx satisfies the "the name string is empty" and "lacks a %x3D ("=")" - // constraints as well as trimming any whitespace. - if (!result) { - return; - } - - var c = new Cookie(); - if (result[1]) { - c.key = result[2].trim(); - } else { - c.key = ''; - } - c.value = result[3].trim(); - if (CONTROL_CHARS.test(c.key) || CONTROL_CHARS.test(c.value)) { - return; - } - - if (firstSemi === -1) { - return c; - } - - // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string - // (including the %x3B (";") in question)." plus later on in the same section - // "discard the first ";" and trim". - var unparsed = str.slice(firstSemi + 1).trim(); - - // "If the unparsed-attributes string is empty, skip the rest of these - // steps." - if (unparsed.length === 0) { - return c; - } - - /* - * S5.2 says that when looping over the items "[p]rocess the attribute-name - * and attribute-value according to the requirements in the following - * subsections" for every item. Plus, for many of the individual attributes - * in S5.3 it says to use the "attribute-value of the last attribute in the - * cookie-attribute-list". Therefore, in this implementation, we overwrite - * the previous value. - */ - var cookie_avs = unparsed.split(';'); - while (cookie_avs.length) { - var av = cookie_avs.shift().trim(); - if (av.length === 0) { // happens if ";;" appears - continue; - } - var av_sep = av.indexOf('='); - var av_key, av_value; - - if (av_sep === -1) { - av_key = av; - av_value = null; - } else { - av_key = av.substr(0,av_sep); - av_value = av.substr(av_sep+1); - } - - av_key = av_key.trim().toLowerCase(); - - if (av_value) { - av_value = av_value.trim(); - } - - switch(av_key) { - case 'expires': // S5.2.1 - if (av_value) { - var exp = parseDate(av_value); - // "If the attribute-value failed to parse as a cookie date, ignore the - // cookie-av." - if (exp) { - // over and underflow not realistically a concern: V8's getTime() seems to - // store something larger than a 32-bit time_t (even with 32-bit node) - c.expires = exp; - } - } - break; - - case 'max-age': // S5.2.2 - if (av_value) { - // "If the first character of the attribute-value is not a DIGIT or a "-" - // character ...[or]... If the remainder of attribute-value contains a - // non-DIGIT character, ignore the cookie-av." - if (/^-?[0-9]+$/.test(av_value)) { - var delta = parseInt(av_value, 10); - // "If delta-seconds is less than or equal to zero (0), let expiry-time - // be the earliest representable date and time." - c.setMaxAge(delta); - } - } - break; - - case 'domain': // S5.2.3 - // "If the attribute-value is empty, the behavior is undefined. However, - // the user agent SHOULD ignore the cookie-av entirely." - if (av_value) { - // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E - // (".") character." - var domain = av_value.trim().replace(/^\./, ''); - if (domain) { - // "Convert the cookie-domain to lower case." - c.domain = domain.toLowerCase(); - } - } - break; - - case 'path': // S5.2.4 - /* - * "If the attribute-value is empty or if the first character of the - * attribute-value is not %x2F ("/"): - * Let cookie-path be the default-path. - * Otherwise: - * Let cookie-path be the attribute-value." - * - * We'll represent the default-path as null since it depends on the - * context of the parsing. - */ - c.path = av_value && av_value[0] === "/" ? av_value : null; - break; - - case 'secure': // S5.2.5 - /* - * "If the attribute-name case-insensitively matches the string "Secure", - * the user agent MUST append an attribute to the cookie-attribute-list - * with an attribute-name of Secure and an empty attribute-value." - */ - c.secure = true; - break; - - case 'httponly': // S5.2.6 -- effectively the same as 'secure' - c.httpOnly = true; - break; - - default: - c.extensions = c.extensions || []; - c.extensions.push(av); - break; - } - } - - return c; -} - -// avoid the V8 deoptimization monster! -function jsonParse(str) { - var obj; - try { - obj = JSON.parse(str); - } catch (e) { - return e; - } - return obj; -} - -function fromJSON(str) { - if (!str) { - return null; - } - - var obj; - if (typeof str === 'string') { - obj = jsonParse(str); - if (obj instanceof Error) { - return null; - } - } else { - // assume it's an Object - obj = str; - } - - var c = new Cookie(); - for (var i=0; i 1) { - var lindex = path.lastIndexOf('/'); - if (lindex === 0) { - break; - } - path = path.substr(0,lindex); - permutations.push(path); - } - permutations.push('/'); - return permutations; -} - -function getCookieContext(url) { - if (url instanceof Object) { - return url; - } - // NOTE: decodeURI will throw on malformed URIs (see GH-32). - // Therefore, we will just skip decoding for such URIs. - try { - url = decodeURI(url); - } - catch(err) { - // Silently swallow error - } - - return urlParse(url); -} - -function Cookie(options) { - options = options || {}; - - Object.keys(options).forEach(function(prop) { - if (Cookie.prototype.hasOwnProperty(prop) && - Cookie.prototype[prop] !== options[prop] && - prop.substr(0,1) !== '_') - { - this[prop] = options[prop]; - } - }, this); - - this.creation = this.creation || new Date(); - - // used to break creation ties in cookieCompare(): - Object.defineProperty(this, 'creationIndex', { - configurable: false, - enumerable: false, // important for assert.deepEqual checks - writable: true, - value: ++Cookie.cookiesCreated - }); -} - -Cookie.cookiesCreated = 0; // incremented each time a cookie is created - -Cookie.parse = parse; -Cookie.fromJSON = fromJSON; - -Cookie.prototype.key = ""; -Cookie.prototype.value = ""; - -// the order in which the RFC has them: -Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity -Cookie.prototype.maxAge = null; // takes precedence over expires for TTL -Cookie.prototype.domain = null; -Cookie.prototype.path = null; -Cookie.prototype.secure = false; -Cookie.prototype.httpOnly = false; -Cookie.prototype.extensions = null; - -// set by the CookieJar: -Cookie.prototype.hostOnly = null; // boolean when set -Cookie.prototype.pathIsDefault = null; // boolean when set -Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse -Cookie.prototype.lastAccessed = null; // Date when set -Object.defineProperty(Cookie.prototype, 'creationIndex', { - configurable: true, - enumerable: false, - writable: true, - value: 0 -}); - -Cookie.serializableProperties = Object.keys(Cookie.prototype) - .filter(function(prop) { - return !( - Cookie.prototype[prop] instanceof Function || - prop === 'creationIndex' || - prop.substr(0,1) === '_' - ); - }); - -Cookie.prototype.inspect = function inspect() { - var now = Date.now(); - return 'Cookie="'+this.toString() + - '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') + - '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') + - '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') + - '"'; -}; - -Cookie.prototype.toJSON = function() { - var obj = {}; - - var props = Cookie.serializableProperties; - for (var i=0; i suffixLen) { - var publicSuffix = parts.slice(0,suffixLen+1).reverse().join('.'); - return converted ? punycode.toUnicode(publicSuffix) : publicSuffix; - } - - return null; -}; - -// The following generated structure is used under the MPL version 2.0 -// See public-suffix.txt for more information - -var index = module.exports.index = Object.freeze( -{"ac":true,"com.ac":true,"edu.ac":true,"gov.ac":true,"net.ac":true,"mil.ac":true,"org.ac":true,"ad":true,"nom.ad":true,"ae":true,"co.ae":true,"net.ae":true,"org.ae":true,"sch.ae":true,"ac.ae":true,"gov.ae":true,"mil.ae":true,"aero":true,"accident-investigation.aero":true,"accident-prevention.aero":true,"aerobatic.aero":true,"aeroclub.aero":true,"aerodrome.aero":true,"agents.aero":true,"aircraft.aero":true,"airline.aero":true,"airport.aero":true,"air-surveillance.aero":true,"airtraffic.aero":true,"air-traffic-control.aero":true,"ambulance.aero":true,"amusement.aero":true,"association.aero":true,"author.aero":true,"ballooning.aero":true,"broker.aero":true,"caa.aero":true,"cargo.aero":true,"catering.aero":true,"certification.aero":true,"championship.aero":true,"charter.aero":true,"civilaviation.aero":true,"club.aero":true,"conference.aero":true,"consultant.aero":true,"consulting.aero":true,"control.aero":true,"council.aero":true,"crew.aero":true,"design.aero":true,"dgca.aero":true,"educator.aero":true,"emergency.aero":true,"engine.aero":true,"engineer.aero":true,"entertainment.aero":true,"equipment.aero":true,"exchange.aero":true,"express.aero":true,"federation.aero":true,"flight.aero":true,"freight.aero":true,"fuel.aero":true,"gliding.aero":true,"government.aero":true,"groundhandling.aero":true,"group.aero":true,"hanggliding.aero":true,"homebuilt.aero":true,"insurance.aero":true,"journal.aero":true,"journalist.aero":true,"leasing.aero":true,"logistics.aero":true,"magazine.aero":true,"maintenance.aero":true,"marketplace.aero":true,"media.aero":true,"microlight.aero":true,"modelling.aero":true,"navigation.aero":true,"parachuting.aero":true,"paragliding.aero":true,"passenger-association.aero":true,"pilot.aero":true,"press.aero":true,"production.aero":true,"recreation.aero":true,"repbody.aero":true,"res.aero":true,"research.aero":true,"rotorcraft.aero":true,"safety.aero":true,"scientist.aero":true,"services.aero":true,"show.aero":true,"skydiving.aero":true,"software.aero":true,"student.aero":true,"taxi.aero":true,"trader.aero":true,"trading.aero":true,"trainer.aero":true,"union.aero":true,"workinggroup.aero":true,"works.aero":true,"af":true,"gov.af":true,"com.af":true,"org.af":true,"net.af":true,"edu.af":true,"ag":true,"com.ag":true,"org.ag":true,"net.ag":true,"co.ag":true,"nom.ag":true,"ai":true,"off.ai":true,"com.ai":true,"net.ai":true,"org.ai":true,"al":true,"com.al":true,"edu.al":true,"gov.al":true,"mil.al":true,"net.al":true,"org.al":true,"am":true,"an":true,"com.an":true,"net.an":true,"org.an":true,"edu.an":true,"ao":true,"ed.ao":true,"gv.ao":true,"og.ao":true,"co.ao":true,"pb.ao":true,"it.ao":true,"aq":true,"ar":true,"com.ar":true,"edu.ar":true,"gob.ar":true,"gov.ar":true,"int.ar":true,"mil.ar":true,"net.ar":true,"org.ar":true,"tur.ar":true,"arpa":true,"e164.arpa":true,"in-addr.arpa":true,"ip6.arpa":true,"iris.arpa":true,"uri.arpa":true,"urn.arpa":true,"as":true,"gov.as":true,"asia":true,"at":true,"ac.at":true,"co.at":true,"gv.at":true,"or.at":true,"au":true,"com.au":true,"net.au":true,"org.au":true,"edu.au":true,"gov.au":true,"asn.au":true,"id.au":true,"info.au":true,"conf.au":true,"oz.au":true,"act.au":true,"nsw.au":true,"nt.au":true,"qld.au":true,"sa.au":true,"tas.au":true,"vic.au":true,"wa.au":true,"act.edu.au":true,"nsw.edu.au":true,"nt.edu.au":true,"qld.edu.au":true,"sa.edu.au":true,"tas.edu.au":true,"vic.edu.au":true,"wa.edu.au":true,"qld.gov.au":true,"sa.gov.au":true,"tas.gov.au":true,"vic.gov.au":true,"wa.gov.au":true,"aw":true,"com.aw":true,"ax":true,"az":true,"com.az":true,"net.az":true,"int.az":true,"gov.az":true,"org.az":true,"edu.az":true,"info.az":true,"pp.az":true,"mil.az":true,"name.az":true,"pro.az":true,"biz.az":true,"ba":true,"org.ba":true,"net.ba":true,"edu.ba":true,"gov.ba":true,"mil.ba":true,"unsa.ba":true,"unbi.ba":true,"co.ba":true,"com.ba":true,"rs.ba":true,"bb":true,"biz.bb":true,"co.bb":true,"com.bb":true,"edu.bb":true,"gov.bb":true,"info.bb":true,"net.bb":true,"org.bb":true,"store.bb":true,"tv.bb":true,"*.bd":true,"be":true,"ac.be":true,"bf":true,"gov.bf":true,"bg":true,"a.bg":true,"b.bg":true,"c.bg":true,"d.bg":true,"e.bg":true,"f.bg":true,"g.bg":true,"h.bg":true,"i.bg":true,"j.bg":true,"k.bg":true,"l.bg":true,"m.bg":true,"n.bg":true,"o.bg":true,"p.bg":true,"q.bg":true,"r.bg":true,"s.bg":true,"t.bg":true,"u.bg":true,"v.bg":true,"w.bg":true,"x.bg":true,"y.bg":true,"z.bg":true,"0.bg":true,"1.bg":true,"2.bg":true,"3.bg":true,"4.bg":true,"5.bg":true,"6.bg":true,"7.bg":true,"8.bg":true,"9.bg":true,"bh":true,"com.bh":true,"edu.bh":true,"net.bh":true,"org.bh":true,"gov.bh":true,"bi":true,"co.bi":true,"com.bi":true,"edu.bi":true,"or.bi":true,"org.bi":true,"biz":true,"bj":true,"asso.bj":true,"barreau.bj":true,"gouv.bj":true,"bm":true,"com.bm":true,"edu.bm":true,"gov.bm":true,"net.bm":true,"org.bm":true,"*.bn":true,"bo":true,"com.bo":true,"edu.bo":true,"gov.bo":true,"gob.bo":true,"int.bo":true,"org.bo":true,"net.bo":true,"mil.bo":true,"tv.bo":true,"br":true,"adm.br":true,"adv.br":true,"agr.br":true,"am.br":true,"arq.br":true,"art.br":true,"ato.br":true,"b.br":true,"bio.br":true,"blog.br":true,"bmd.br":true,"cim.br":true,"cng.br":true,"cnt.br":true,"com.br":true,"coop.br":true,"ecn.br":true,"eco.br":true,"edu.br":true,"emp.br":true,"eng.br":true,"esp.br":true,"etc.br":true,"eti.br":true,"far.br":true,"flog.br":true,"fm.br":true,"fnd.br":true,"fot.br":true,"fst.br":true,"g12.br":true,"ggf.br":true,"gov.br":true,"imb.br":true,"ind.br":true,"inf.br":true,"jor.br":true,"jus.br":true,"leg.br":true,"lel.br":true,"mat.br":true,"med.br":true,"mil.br":true,"mp.br":true,"mus.br":true,"net.br":true,"*.nom.br":true,"not.br":true,"ntr.br":true,"odo.br":true,"org.br":true,"ppg.br":true,"pro.br":true,"psc.br":true,"psi.br":true,"qsl.br":true,"radio.br":true,"rec.br":true,"slg.br":true,"srv.br":true,"taxi.br":true,"teo.br":true,"tmp.br":true,"trd.br":true,"tur.br":true,"tv.br":true,"vet.br":true,"vlog.br":true,"wiki.br":true,"zlg.br":true,"bs":true,"com.bs":true,"net.bs":true,"org.bs":true,"edu.bs":true,"gov.bs":true,"bt":true,"com.bt":true,"edu.bt":true,"gov.bt":true,"net.bt":true,"org.bt":true,"bv":true,"bw":true,"co.bw":true,"org.bw":true,"by":true,"gov.by":true,"mil.by":true,"com.by":true,"of.by":true,"bz":true,"com.bz":true,"net.bz":true,"org.bz":true,"edu.bz":true,"gov.bz":true,"ca":true,"ab.ca":true,"bc.ca":true,"mb.ca":true,"nb.ca":true,"nf.ca":true,"nl.ca":true,"ns.ca":true,"nt.ca":true,"nu.ca":true,"on.ca":true,"pe.ca":true,"qc.ca":true,"sk.ca":true,"yk.ca":true,"gc.ca":true,"cat":true,"cc":true,"cd":true,"gov.cd":true,"cf":true,"cg":true,"ch":true,"ci":true,"org.ci":true,"or.ci":true,"com.ci":true,"co.ci":true,"edu.ci":true,"ed.ci":true,"ac.ci":true,"net.ci":true,"go.ci":true,"asso.ci":true,"xn--aroport-bya.ci":true,"int.ci":true,"presse.ci":true,"md.ci":true,"gouv.ci":true,"*.ck":true,"www.ck":false,"cl":true,"gov.cl":true,"gob.cl":true,"co.cl":true,"mil.cl":true,"cm":true,"co.cm":true,"com.cm":true,"gov.cm":true,"net.cm":true,"cn":true,"ac.cn":true,"com.cn":true,"edu.cn":true,"gov.cn":true,"net.cn":true,"org.cn":true,"mil.cn":true,"xn--55qx5d.cn":true,"xn--io0a7i.cn":true,"xn--od0alg.cn":true,"ah.cn":true,"bj.cn":true,"cq.cn":true,"fj.cn":true,"gd.cn":true,"gs.cn":true,"gz.cn":true,"gx.cn":true,"ha.cn":true,"hb.cn":true,"he.cn":true,"hi.cn":true,"hl.cn":true,"hn.cn":true,"jl.cn":true,"js.cn":true,"jx.cn":true,"ln.cn":true,"nm.cn":true,"nx.cn":true,"qh.cn":true,"sc.cn":true,"sd.cn":true,"sh.cn":true,"sn.cn":true,"sx.cn":true,"tj.cn":true,"xj.cn":true,"xz.cn":true,"yn.cn":true,"zj.cn":true,"hk.cn":true,"mo.cn":true,"tw.cn":true,"co":true,"arts.co":true,"com.co":true,"edu.co":true,"firm.co":true,"gov.co":true,"info.co":true,"int.co":true,"mil.co":true,"net.co":true,"nom.co":true,"org.co":true,"rec.co":true,"web.co":true,"com":true,"coop":true,"cr":true,"ac.cr":true,"co.cr":true,"ed.cr":true,"fi.cr":true,"go.cr":true,"or.cr":true,"sa.cr":true,"cu":true,"com.cu":true,"edu.cu":true,"org.cu":true,"net.cu":true,"gov.cu":true,"inf.cu":true,"cv":true,"cw":true,"com.cw":true,"edu.cw":true,"net.cw":true,"org.cw":true,"cx":true,"gov.cx":true,"ac.cy":true,"biz.cy":true,"com.cy":true,"ekloges.cy":true,"gov.cy":true,"ltd.cy":true,"name.cy":true,"net.cy":true,"org.cy":true,"parliament.cy":true,"press.cy":true,"pro.cy":true,"tm.cy":true,"cz":true,"de":true,"dj":true,"dk":true,"dm":true,"com.dm":true,"net.dm":true,"org.dm":true,"edu.dm":true,"gov.dm":true,"do":true,"art.do":true,"com.do":true,"edu.do":true,"gob.do":true,"gov.do":true,"mil.do":true,"net.do":true,"org.do":true,"sld.do":true,"web.do":true,"dz":true,"com.dz":true,"org.dz":true,"net.dz":true,"gov.dz":true,"edu.dz":true,"asso.dz":true,"pol.dz":true,"art.dz":true,"ec":true,"com.ec":true,"info.ec":true,"net.ec":true,"fin.ec":true,"k12.ec":true,"med.ec":true,"pro.ec":true,"org.ec":true,"edu.ec":true,"gov.ec":true,"gob.ec":true,"mil.ec":true,"edu":true,"ee":true,"edu.ee":true,"gov.ee":true,"riik.ee":true,"lib.ee":true,"med.ee":true,"com.ee":true,"pri.ee":true,"aip.ee":true,"org.ee":true,"fie.ee":true,"eg":true,"com.eg":true,"edu.eg":true,"eun.eg":true,"gov.eg":true,"mil.eg":true,"name.eg":true,"net.eg":true,"org.eg":true,"sci.eg":true,"*.er":true,"es":true,"com.es":true,"nom.es":true,"org.es":true,"gob.es":true,"edu.es":true,"et":true,"com.et":true,"gov.et":true,"org.et":true,"edu.et":true,"biz.et":true,"name.et":true,"info.et":true,"net.et":true,"eu":true,"fi":true,"aland.fi":true,"*.fj":true,"*.fk":true,"fm":true,"fo":true,"fr":true,"com.fr":true,"asso.fr":true,"nom.fr":true,"prd.fr":true,"presse.fr":true,"tm.fr":true,"aeroport.fr":true,"assedic.fr":true,"avocat.fr":true,"avoues.fr":true,"cci.fr":true,"chambagri.fr":true,"chirurgiens-dentistes.fr":true,"experts-comptables.fr":true,"geometre-expert.fr":true,"gouv.fr":true,"greta.fr":true,"huissier-justice.fr":true,"medecin.fr":true,"notaires.fr":true,"pharmacien.fr":true,"port.fr":true,"veterinaire.fr":true,"ga":true,"gb":true,"gd":true,"ge":true,"com.ge":true,"edu.ge":true,"gov.ge":true,"org.ge":true,"mil.ge":true,"net.ge":true,"pvt.ge":true,"gf":true,"gg":true,"co.gg":true,"net.gg":true,"org.gg":true,"gh":true,"com.gh":true,"edu.gh":true,"gov.gh":true,"org.gh":true,"mil.gh":true,"gi":true,"com.gi":true,"ltd.gi":true,"gov.gi":true,"mod.gi":true,"edu.gi":true,"org.gi":true,"gl":true,"co.gl":true,"com.gl":true,"edu.gl":true,"net.gl":true,"org.gl":true,"gm":true,"gn":true,"ac.gn":true,"com.gn":true,"edu.gn":true,"gov.gn":true,"org.gn":true,"net.gn":true,"gov":true,"gp":true,"com.gp":true,"net.gp":true,"mobi.gp":true,"edu.gp":true,"org.gp":true,"asso.gp":true,"gq":true,"gr":true,"com.gr":true,"edu.gr":true,"net.gr":true,"org.gr":true,"gov.gr":true,"gs":true,"gt":true,"com.gt":true,"edu.gt":true,"gob.gt":true,"ind.gt":true,"mil.gt":true,"net.gt":true,"org.gt":true,"*.gu":true,"gw":true,"gy":true,"co.gy":true,"com.gy":true,"net.gy":true,"hk":true,"com.hk":true,"edu.hk":true,"gov.hk":true,"idv.hk":true,"net.hk":true,"org.hk":true,"xn--55qx5d.hk":true,"xn--wcvs22d.hk":true,"xn--lcvr32d.hk":true,"xn--mxtq1m.hk":true,"xn--gmqw5a.hk":true,"xn--ciqpn.hk":true,"xn--gmq050i.hk":true,"xn--zf0avx.hk":true,"xn--io0a7i.hk":true,"xn--mk0axi.hk":true,"xn--od0alg.hk":true,"xn--od0aq3b.hk":true,"xn--tn0ag.hk":true,"xn--uc0atv.hk":true,"xn--uc0ay4a.hk":true,"hm":true,"hn":true,"com.hn":true,"edu.hn":true,"org.hn":true,"net.hn":true,"mil.hn":true,"gob.hn":true,"hr":true,"iz.hr":true,"from.hr":true,"name.hr":true,"com.hr":true,"ht":true,"com.ht":true,"shop.ht":true,"firm.ht":true,"info.ht":true,"adult.ht":true,"net.ht":true,"pro.ht":true,"org.ht":true,"med.ht":true,"art.ht":true,"coop.ht":true,"pol.ht":true,"asso.ht":true,"edu.ht":true,"rel.ht":true,"gouv.ht":true,"perso.ht":true,"hu":true,"co.hu":true,"info.hu":true,"org.hu":true,"priv.hu":true,"sport.hu":true,"tm.hu":true,"2000.hu":true,"agrar.hu":true,"bolt.hu":true,"casino.hu":true,"city.hu":true,"erotica.hu":true,"erotika.hu":true,"film.hu":true,"forum.hu":true,"games.hu":true,"hotel.hu":true,"ingatlan.hu":true,"jogasz.hu":true,"konyvelo.hu":true,"lakas.hu":true,"media.hu":true,"news.hu":true,"reklam.hu":true,"sex.hu":true,"shop.hu":true,"suli.hu":true,"szex.hu":true,"tozsde.hu":true,"utazas.hu":true,"video.hu":true,"id":true,"ac.id":true,"biz.id":true,"co.id":true,"desa.id":true,"go.id":true,"mil.id":true,"my.id":true,"net.id":true,"or.id":true,"sch.id":true,"web.id":true,"ie":true,"gov.ie":true,"il":true,"ac.il":true,"co.il":true,"gov.il":true,"idf.il":true,"k12.il":true,"muni.il":true,"net.il":true,"org.il":true,"im":true,"ac.im":true,"co.im":true,"com.im":true,"ltd.co.im":true,"net.im":true,"org.im":true,"plc.co.im":true,"tt.im":true,"tv.im":true,"in":true,"co.in":true,"firm.in":true,"net.in":true,"org.in":true,"gen.in":true,"ind.in":true,"nic.in":true,"ac.in":true,"edu.in":true,"res.in":true,"gov.in":true,"mil.in":true,"info":true,"int":true,"eu.int":true,"io":true,"com.io":true,"iq":true,"gov.iq":true,"edu.iq":true,"mil.iq":true,"com.iq":true,"org.iq":true,"net.iq":true,"ir":true,"ac.ir":true,"co.ir":true,"gov.ir":true,"id.ir":true,"net.ir":true,"org.ir":true,"sch.ir":true,"xn--mgba3a4f16a.ir":true,"xn--mgba3a4fra.ir":true,"is":true,"net.is":true,"com.is":true,"edu.is":true,"gov.is":true,"org.is":true,"int.is":true,"it":true,"gov.it":true,"edu.it":true,"abr.it":true,"abruzzo.it":true,"aosta-valley.it":true,"aostavalley.it":true,"bas.it":true,"basilicata.it":true,"cal.it":true,"calabria.it":true,"cam.it":true,"campania.it":true,"emilia-romagna.it":true,"emiliaromagna.it":true,"emr.it":true,"friuli-v-giulia.it":true,"friuli-ve-giulia.it":true,"friuli-vegiulia.it":true,"friuli-venezia-giulia.it":true,"friuli-veneziagiulia.it":true,"friuli-vgiulia.it":true,"friuliv-giulia.it":true,"friulive-giulia.it":true,"friulivegiulia.it":true,"friulivenezia-giulia.it":true,"friuliveneziagiulia.it":true,"friulivgiulia.it":true,"fvg.it":true,"laz.it":true,"lazio.it":true,"lig.it":true,"liguria.it":true,"lom.it":true,"lombardia.it":true,"lombardy.it":true,"lucania.it":true,"mar.it":true,"marche.it":true,"mol.it":true,"molise.it":true,"piedmont.it":true,"piemonte.it":true,"pmn.it":true,"pug.it":true,"puglia.it":true,"sar.it":true,"sardegna.it":true,"sardinia.it":true,"sic.it":true,"sicilia.it":true,"sicily.it":true,"taa.it":true,"tos.it":true,"toscana.it":true,"trentino-a-adige.it":true,"trentino-aadige.it":true,"trentino-alto-adige.it":true,"trentino-altoadige.it":true,"trentino-s-tirol.it":true,"trentino-stirol.it":true,"trentino-sud-tirol.it":true,"trentino-sudtirol.it":true,"trentino-sued-tirol.it":true,"trentino-suedtirol.it":true,"trentinoa-adige.it":true,"trentinoaadige.it":true,"trentinoalto-adige.it":true,"trentinoaltoadige.it":true,"trentinos-tirol.it":true,"trentinostirol.it":true,"trentinosud-tirol.it":true,"trentinosudtirol.it":true,"trentinosued-tirol.it":true,"trentinosuedtirol.it":true,"tuscany.it":true,"umb.it":true,"umbria.it":true,"val-d-aosta.it":true,"val-daosta.it":true,"vald-aosta.it":true,"valdaosta.it":true,"valle-aosta.it":true,"valle-d-aosta.it":true,"valle-daosta.it":true,"valleaosta.it":true,"valled-aosta.it":true,"valledaosta.it":true,"vallee-aoste.it":true,"valleeaoste.it":true,"vao.it":true,"vda.it":true,"ven.it":true,"veneto.it":true,"ag.it":true,"agrigento.it":true,"al.it":true,"alessandria.it":true,"alto-adige.it":true,"altoadige.it":true,"an.it":true,"ancona.it":true,"andria-barletta-trani.it":true,"andria-trani-barletta.it":true,"andriabarlettatrani.it":true,"andriatranibarletta.it":true,"ao.it":true,"aosta.it":true,"aoste.it":true,"ap.it":true,"aq.it":true,"aquila.it":true,"ar.it":true,"arezzo.it":true,"ascoli-piceno.it":true,"ascolipiceno.it":true,"asti.it":true,"at.it":true,"av.it":true,"avellino.it":true,"ba.it":true,"balsan.it":true,"bari.it":true,"barletta-trani-andria.it":true,"barlettatraniandria.it":true,"belluno.it":true,"benevento.it":true,"bergamo.it":true,"bg.it":true,"bi.it":true,"biella.it":true,"bl.it":true,"bn.it":true,"bo.it":true,"bologna.it":true,"bolzano.it":true,"bozen.it":true,"br.it":true,"brescia.it":true,"brindisi.it":true,"bs.it":true,"bt.it":true,"bz.it":true,"ca.it":true,"cagliari.it":true,"caltanissetta.it":true,"campidano-medio.it":true,"campidanomedio.it":true,"campobasso.it":true,"carbonia-iglesias.it":true,"carboniaiglesias.it":true,"carrara-massa.it":true,"carraramassa.it":true,"caserta.it":true,"catania.it":true,"catanzaro.it":true,"cb.it":true,"ce.it":true,"cesena-forli.it":true,"cesenaforli.it":true,"ch.it":true,"chieti.it":true,"ci.it":true,"cl.it":true,"cn.it":true,"co.it":true,"como.it":true,"cosenza.it":true,"cr.it":true,"cremona.it":true,"crotone.it":true,"cs.it":true,"ct.it":true,"cuneo.it":true,"cz.it":true,"dell-ogliastra.it":true,"dellogliastra.it":true,"en.it":true,"enna.it":true,"fc.it":true,"fe.it":true,"fermo.it":true,"ferrara.it":true,"fg.it":true,"fi.it":true,"firenze.it":true,"florence.it":true,"fm.it":true,"foggia.it":true,"forli-cesena.it":true,"forlicesena.it":true,"fr.it":true,"frosinone.it":true,"ge.it":true,"genoa.it":true,"genova.it":true,"go.it":true,"gorizia.it":true,"gr.it":true,"grosseto.it":true,"iglesias-carbonia.it":true,"iglesiascarbonia.it":true,"im.it":true,"imperia.it":true,"is.it":true,"isernia.it":true,"kr.it":true,"la-spezia.it":true,"laquila.it":true,"laspezia.it":true,"latina.it":true,"lc.it":true,"le.it":true,"lecce.it":true,"lecco.it":true,"li.it":true,"livorno.it":true,"lo.it":true,"lodi.it":true,"lt.it":true,"lu.it":true,"lucca.it":true,"macerata.it":true,"mantova.it":true,"massa-carrara.it":true,"massacarrara.it":true,"matera.it":true,"mb.it":true,"mc.it":true,"me.it":true,"medio-campidano.it":true,"mediocampidano.it":true,"messina.it":true,"mi.it":true,"milan.it":true,"milano.it":true,"mn.it":true,"mo.it":true,"modena.it":true,"monza-brianza.it":true,"monza-e-della-brianza.it":true,"monza.it":true,"monzabrianza.it":true,"monzaebrianza.it":true,"monzaedellabrianza.it":true,"ms.it":true,"mt.it":true,"na.it":true,"naples.it":true,"napoli.it":true,"no.it":true,"novara.it":true,"nu.it":true,"nuoro.it":true,"og.it":true,"ogliastra.it":true,"olbia-tempio.it":true,"olbiatempio.it":true,"or.it":true,"oristano.it":true,"ot.it":true,"pa.it":true,"padova.it":true,"padua.it":true,"palermo.it":true,"parma.it":true,"pavia.it":true,"pc.it":true,"pd.it":true,"pe.it":true,"perugia.it":true,"pesaro-urbino.it":true,"pesarourbino.it":true,"pescara.it":true,"pg.it":true,"pi.it":true,"piacenza.it":true,"pisa.it":true,"pistoia.it":true,"pn.it":true,"po.it":true,"pordenone.it":true,"potenza.it":true,"pr.it":true,"prato.it":true,"pt.it":true,"pu.it":true,"pv.it":true,"pz.it":true,"ra.it":true,"ragusa.it":true,"ravenna.it":true,"rc.it":true,"re.it":true,"reggio-calabria.it":true,"reggio-emilia.it":true,"reggiocalabria.it":true,"reggioemilia.it":true,"rg.it":true,"ri.it":true,"rieti.it":true,"rimini.it":true,"rm.it":true,"rn.it":true,"ro.it":true,"roma.it":true,"rome.it":true,"rovigo.it":true,"sa.it":true,"salerno.it":true,"sassari.it":true,"savona.it":true,"si.it":true,"siena.it":true,"siracusa.it":true,"so.it":true,"sondrio.it":true,"sp.it":true,"sr.it":true,"ss.it":true,"suedtirol.it":true,"sv.it":true,"ta.it":true,"taranto.it":true,"te.it":true,"tempio-olbia.it":true,"tempioolbia.it":true,"teramo.it":true,"terni.it":true,"tn.it":true,"to.it":true,"torino.it":true,"tp.it":true,"tr.it":true,"trani-andria-barletta.it":true,"trani-barletta-andria.it":true,"traniandriabarletta.it":true,"tranibarlettaandria.it":true,"trapani.it":true,"trentino.it":true,"trento.it":true,"treviso.it":true,"trieste.it":true,"ts.it":true,"turin.it":true,"tv.it":true,"ud.it":true,"udine.it":true,"urbino-pesaro.it":true,"urbinopesaro.it":true,"va.it":true,"varese.it":true,"vb.it":true,"vc.it":true,"ve.it":true,"venezia.it":true,"venice.it":true,"verbania.it":true,"vercelli.it":true,"verona.it":true,"vi.it":true,"vibo-valentia.it":true,"vibovalentia.it":true,"vicenza.it":true,"viterbo.it":true,"vr.it":true,"vs.it":true,"vt.it":true,"vv.it":true,"je":true,"co.je":true,"net.je":true,"org.je":true,"*.jm":true,"jo":true,"com.jo":true,"org.jo":true,"net.jo":true,"edu.jo":true,"sch.jo":true,"gov.jo":true,"mil.jo":true,"name.jo":true,"jobs":true,"jp":true,"ac.jp":true,"ad.jp":true,"co.jp":true,"ed.jp":true,"go.jp":true,"gr.jp":true,"lg.jp":true,"ne.jp":true,"or.jp":true,"aichi.jp":true,"akita.jp":true,"aomori.jp":true,"chiba.jp":true,"ehime.jp":true,"fukui.jp":true,"fukuoka.jp":true,"fukushima.jp":true,"gifu.jp":true,"gunma.jp":true,"hiroshima.jp":true,"hokkaido.jp":true,"hyogo.jp":true,"ibaraki.jp":true,"ishikawa.jp":true,"iwate.jp":true,"kagawa.jp":true,"kagoshima.jp":true,"kanagawa.jp":true,"kochi.jp":true,"kumamoto.jp":true,"kyoto.jp":true,"mie.jp":true,"miyagi.jp":true,"miyazaki.jp":true,"nagano.jp":true,"nagasaki.jp":true,"nara.jp":true,"niigata.jp":true,"oita.jp":true,"okayama.jp":true,"okinawa.jp":true,"osaka.jp":true,"saga.jp":true,"saitama.jp":true,"shiga.jp":true,"shimane.jp":true,"shizuoka.jp":true,"tochigi.jp":true,"tokushima.jp":true,"tokyo.jp":true,"tottori.jp":true,"toyama.jp":true,"wakayama.jp":true,"yamagata.jp":true,"yamaguchi.jp":true,"yamanashi.jp":true,"xn--4pvxs.jp":true,"xn--vgu402c.jp":true,"xn--c3s14m.jp":true,"xn--f6qx53a.jp":true,"xn--8pvr4u.jp":true,"xn--uist22h.jp":true,"xn--djrs72d6uy.jp":true,"xn--mkru45i.jp":true,"xn--0trq7p7nn.jp":true,"xn--8ltr62k.jp":true,"xn--2m4a15e.jp":true,"xn--efvn9s.jp":true,"xn--32vp30h.jp":true,"xn--4it797k.jp":true,"xn--1lqs71d.jp":true,"xn--5rtp49c.jp":true,"xn--5js045d.jp":true,"xn--ehqz56n.jp":true,"xn--1lqs03n.jp":true,"xn--qqqt11m.jp":true,"xn--kbrq7o.jp":true,"xn--pssu33l.jp":true,"xn--ntsq17g.jp":true,"xn--uisz3g.jp":true,"xn--6btw5a.jp":true,"xn--1ctwo.jp":true,"xn--6orx2r.jp":true,"xn--rht61e.jp":true,"xn--rht27z.jp":true,"xn--djty4k.jp":true,"xn--nit225k.jp":true,"xn--rht3d.jp":true,"xn--klty5x.jp":true,"xn--kltx9a.jp":true,"xn--kltp7d.jp":true,"xn--uuwu58a.jp":true,"xn--zbx025d.jp":true,"xn--ntso0iqx3a.jp":true,"xn--elqq16h.jp":true,"xn--4it168d.jp":true,"xn--klt787d.jp":true,"xn--rny31h.jp":true,"xn--7t0a264c.jp":true,"xn--5rtq34k.jp":true,"xn--k7yn95e.jp":true,"xn--tor131o.jp":true,"xn--d5qv7z876c.jp":true,"*.kawasaki.jp":true,"*.kitakyushu.jp":true,"*.kobe.jp":true,"*.nagoya.jp":true,"*.sapporo.jp":true,"*.sendai.jp":true,"*.yokohama.jp":true,"city.kawasaki.jp":false,"city.kitakyushu.jp":false,"city.kobe.jp":false,"city.nagoya.jp":false,"city.sapporo.jp":false,"city.sendai.jp":false,"city.yokohama.jp":false,"aisai.aichi.jp":true,"ama.aichi.jp":true,"anjo.aichi.jp":true,"asuke.aichi.jp":true,"chiryu.aichi.jp":true,"chita.aichi.jp":true,"fuso.aichi.jp":true,"gamagori.aichi.jp":true,"handa.aichi.jp":true,"hazu.aichi.jp":true,"hekinan.aichi.jp":true,"higashiura.aichi.jp":true,"ichinomiya.aichi.jp":true,"inazawa.aichi.jp":true,"inuyama.aichi.jp":true,"isshiki.aichi.jp":true,"iwakura.aichi.jp":true,"kanie.aichi.jp":true,"kariya.aichi.jp":true,"kasugai.aichi.jp":true,"kira.aichi.jp":true,"kiyosu.aichi.jp":true,"komaki.aichi.jp":true,"konan.aichi.jp":true,"kota.aichi.jp":true,"mihama.aichi.jp":true,"miyoshi.aichi.jp":true,"nishio.aichi.jp":true,"nisshin.aichi.jp":true,"obu.aichi.jp":true,"oguchi.aichi.jp":true,"oharu.aichi.jp":true,"okazaki.aichi.jp":true,"owariasahi.aichi.jp":true,"seto.aichi.jp":true,"shikatsu.aichi.jp":true,"shinshiro.aichi.jp":true,"shitara.aichi.jp":true,"tahara.aichi.jp":true,"takahama.aichi.jp":true,"tobishima.aichi.jp":true,"toei.aichi.jp":true,"togo.aichi.jp":true,"tokai.aichi.jp":true,"tokoname.aichi.jp":true,"toyoake.aichi.jp":true,"toyohashi.aichi.jp":true,"toyokawa.aichi.jp":true,"toyone.aichi.jp":true,"toyota.aichi.jp":true,"tsushima.aichi.jp":true,"yatomi.aichi.jp":true,"akita.akita.jp":true,"daisen.akita.jp":true,"fujisato.akita.jp":true,"gojome.akita.jp":true,"hachirogata.akita.jp":true,"happou.akita.jp":true,"higashinaruse.akita.jp":true,"honjo.akita.jp":true,"honjyo.akita.jp":true,"ikawa.akita.jp":true,"kamikoani.akita.jp":true,"kamioka.akita.jp":true,"katagami.akita.jp":true,"kazuno.akita.jp":true,"kitaakita.akita.jp":true,"kosaka.akita.jp":true,"kyowa.akita.jp":true,"misato.akita.jp":true,"mitane.akita.jp":true,"moriyoshi.akita.jp":true,"nikaho.akita.jp":true,"noshiro.akita.jp":true,"odate.akita.jp":true,"oga.akita.jp":true,"ogata.akita.jp":true,"semboku.akita.jp":true,"yokote.akita.jp":true,"yurihonjo.akita.jp":true,"aomori.aomori.jp":true,"gonohe.aomori.jp":true,"hachinohe.aomori.jp":true,"hashikami.aomori.jp":true,"hiranai.aomori.jp":true,"hirosaki.aomori.jp":true,"itayanagi.aomori.jp":true,"kuroishi.aomori.jp":true,"misawa.aomori.jp":true,"mutsu.aomori.jp":true,"nakadomari.aomori.jp":true,"noheji.aomori.jp":true,"oirase.aomori.jp":true,"owani.aomori.jp":true,"rokunohe.aomori.jp":true,"sannohe.aomori.jp":true,"shichinohe.aomori.jp":true,"shingo.aomori.jp":true,"takko.aomori.jp":true,"towada.aomori.jp":true,"tsugaru.aomori.jp":true,"tsuruta.aomori.jp":true,"abiko.chiba.jp":true,"asahi.chiba.jp":true,"chonan.chiba.jp":true,"chosei.chiba.jp":true,"choshi.chiba.jp":true,"chuo.chiba.jp":true,"funabashi.chiba.jp":true,"futtsu.chiba.jp":true,"hanamigawa.chiba.jp":true,"ichihara.chiba.jp":true,"ichikawa.chiba.jp":true,"ichinomiya.chiba.jp":true,"inzai.chiba.jp":true,"isumi.chiba.jp":true,"kamagaya.chiba.jp":true,"kamogawa.chiba.jp":true,"kashiwa.chiba.jp":true,"katori.chiba.jp":true,"katsuura.chiba.jp":true,"kimitsu.chiba.jp":true,"kisarazu.chiba.jp":true,"kozaki.chiba.jp":true,"kujukuri.chiba.jp":true,"kyonan.chiba.jp":true,"matsudo.chiba.jp":true,"midori.chiba.jp":true,"mihama.chiba.jp":true,"minamiboso.chiba.jp":true,"mobara.chiba.jp":true,"mutsuzawa.chiba.jp":true,"nagara.chiba.jp":true,"nagareyama.chiba.jp":true,"narashino.chiba.jp":true,"narita.chiba.jp":true,"noda.chiba.jp":true,"oamishirasato.chiba.jp":true,"omigawa.chiba.jp":true,"onjuku.chiba.jp":true,"otaki.chiba.jp":true,"sakae.chiba.jp":true,"sakura.chiba.jp":true,"shimofusa.chiba.jp":true,"shirako.chiba.jp":true,"shiroi.chiba.jp":true,"shisui.chiba.jp":true,"sodegaura.chiba.jp":true,"sosa.chiba.jp":true,"tako.chiba.jp":true,"tateyama.chiba.jp":true,"togane.chiba.jp":true,"tohnosho.chiba.jp":true,"tomisato.chiba.jp":true,"urayasu.chiba.jp":true,"yachimata.chiba.jp":true,"yachiyo.chiba.jp":true,"yokaichiba.chiba.jp":true,"yokoshibahikari.chiba.jp":true,"yotsukaido.chiba.jp":true,"ainan.ehime.jp":true,"honai.ehime.jp":true,"ikata.ehime.jp":true,"imabari.ehime.jp":true,"iyo.ehime.jp":true,"kamijima.ehime.jp":true,"kihoku.ehime.jp":true,"kumakogen.ehime.jp":true,"masaki.ehime.jp":true,"matsuno.ehime.jp":true,"matsuyama.ehime.jp":true,"namikata.ehime.jp":true,"niihama.ehime.jp":true,"ozu.ehime.jp":true,"saijo.ehime.jp":true,"seiyo.ehime.jp":true,"shikokuchuo.ehime.jp":true,"tobe.ehime.jp":true,"toon.ehime.jp":true,"uchiko.ehime.jp":true,"uwajima.ehime.jp":true,"yawatahama.ehime.jp":true,"echizen.fukui.jp":true,"eiheiji.fukui.jp":true,"fukui.fukui.jp":true,"ikeda.fukui.jp":true,"katsuyama.fukui.jp":true,"mihama.fukui.jp":true,"minamiechizen.fukui.jp":true,"obama.fukui.jp":true,"ohi.fukui.jp":true,"ono.fukui.jp":true,"sabae.fukui.jp":true,"sakai.fukui.jp":true,"takahama.fukui.jp":true,"tsuruga.fukui.jp":true,"wakasa.fukui.jp":true,"ashiya.fukuoka.jp":true,"buzen.fukuoka.jp":true,"chikugo.fukuoka.jp":true,"chikuho.fukuoka.jp":true,"chikujo.fukuoka.jp":true,"chikushino.fukuoka.jp":true,"chikuzen.fukuoka.jp":true,"chuo.fukuoka.jp":true,"dazaifu.fukuoka.jp":true,"fukuchi.fukuoka.jp":true,"hakata.fukuoka.jp":true,"higashi.fukuoka.jp":true,"hirokawa.fukuoka.jp":true,"hisayama.fukuoka.jp":true,"iizuka.fukuoka.jp":true,"inatsuki.fukuoka.jp":true,"kaho.fukuoka.jp":true,"kasuga.fukuoka.jp":true,"kasuya.fukuoka.jp":true,"kawara.fukuoka.jp":true,"keisen.fukuoka.jp":true,"koga.fukuoka.jp":true,"kurate.fukuoka.jp":true,"kurogi.fukuoka.jp":true,"kurume.fukuoka.jp":true,"minami.fukuoka.jp":true,"miyako.fukuoka.jp":true,"miyama.fukuoka.jp":true,"miyawaka.fukuoka.jp":true,"mizumaki.fukuoka.jp":true,"munakata.fukuoka.jp":true,"nakagawa.fukuoka.jp":true,"nakama.fukuoka.jp":true,"nishi.fukuoka.jp":true,"nogata.fukuoka.jp":true,"ogori.fukuoka.jp":true,"okagaki.fukuoka.jp":true,"okawa.fukuoka.jp":true,"oki.fukuoka.jp":true,"omuta.fukuoka.jp":true,"onga.fukuoka.jp":true,"onojo.fukuoka.jp":true,"oto.fukuoka.jp":true,"saigawa.fukuoka.jp":true,"sasaguri.fukuoka.jp":true,"shingu.fukuoka.jp":true,"shinyoshitomi.fukuoka.jp":true,"shonai.fukuoka.jp":true,"soeda.fukuoka.jp":true,"sue.fukuoka.jp":true,"tachiarai.fukuoka.jp":true,"tagawa.fukuoka.jp":true,"takata.fukuoka.jp":true,"toho.fukuoka.jp":true,"toyotsu.fukuoka.jp":true,"tsuiki.fukuoka.jp":true,"ukiha.fukuoka.jp":true,"umi.fukuoka.jp":true,"usui.fukuoka.jp":true,"yamada.fukuoka.jp":true,"yame.fukuoka.jp":true,"yanagawa.fukuoka.jp":true,"yukuhashi.fukuoka.jp":true,"aizubange.fukushima.jp":true,"aizumisato.fukushima.jp":true,"aizuwakamatsu.fukushima.jp":true,"asakawa.fukushima.jp":true,"bandai.fukushima.jp":true,"date.fukushima.jp":true,"fukushima.fukushima.jp":true,"furudono.fukushima.jp":true,"futaba.fukushima.jp":true,"hanawa.fukushima.jp":true,"higashi.fukushima.jp":true,"hirata.fukushima.jp":true,"hirono.fukushima.jp":true,"iitate.fukushima.jp":true,"inawashiro.fukushima.jp":true,"ishikawa.fukushima.jp":true,"iwaki.fukushima.jp":true,"izumizaki.fukushima.jp":true,"kagamiishi.fukushima.jp":true,"kaneyama.fukushima.jp":true,"kawamata.fukushima.jp":true,"kitakata.fukushima.jp":true,"kitashiobara.fukushima.jp":true,"koori.fukushima.jp":true,"koriyama.fukushima.jp":true,"kunimi.fukushima.jp":true,"miharu.fukushima.jp":true,"mishima.fukushima.jp":true,"namie.fukushima.jp":true,"nango.fukushima.jp":true,"nishiaizu.fukushima.jp":true,"nishigo.fukushima.jp":true,"okuma.fukushima.jp":true,"omotego.fukushima.jp":true,"ono.fukushima.jp":true,"otama.fukushima.jp":true,"samegawa.fukushima.jp":true,"shimogo.fukushima.jp":true,"shirakawa.fukushima.jp":true,"showa.fukushima.jp":true,"soma.fukushima.jp":true,"sukagawa.fukushima.jp":true,"taishin.fukushima.jp":true,"tamakawa.fukushima.jp":true,"tanagura.fukushima.jp":true,"tenei.fukushima.jp":true,"yabuki.fukushima.jp":true,"yamato.fukushima.jp":true,"yamatsuri.fukushima.jp":true,"yanaizu.fukushima.jp":true,"yugawa.fukushima.jp":true,"anpachi.gifu.jp":true,"ena.gifu.jp":true,"gifu.gifu.jp":true,"ginan.gifu.jp":true,"godo.gifu.jp":true,"gujo.gifu.jp":true,"hashima.gifu.jp":true,"hichiso.gifu.jp":true,"hida.gifu.jp":true,"higashishirakawa.gifu.jp":true,"ibigawa.gifu.jp":true,"ikeda.gifu.jp":true,"kakamigahara.gifu.jp":true,"kani.gifu.jp":true,"kasahara.gifu.jp":true,"kasamatsu.gifu.jp":true,"kawaue.gifu.jp":true,"kitagata.gifu.jp":true,"mino.gifu.jp":true,"minokamo.gifu.jp":true,"mitake.gifu.jp":true,"mizunami.gifu.jp":true,"motosu.gifu.jp":true,"nakatsugawa.gifu.jp":true,"ogaki.gifu.jp":true,"sakahogi.gifu.jp":true,"seki.gifu.jp":true,"sekigahara.gifu.jp":true,"shirakawa.gifu.jp":true,"tajimi.gifu.jp":true,"takayama.gifu.jp":true,"tarui.gifu.jp":true,"toki.gifu.jp":true,"tomika.gifu.jp":true,"wanouchi.gifu.jp":true,"yamagata.gifu.jp":true,"yaotsu.gifu.jp":true,"yoro.gifu.jp":true,"annaka.gunma.jp":true,"chiyoda.gunma.jp":true,"fujioka.gunma.jp":true,"higashiagatsuma.gunma.jp":true,"isesaki.gunma.jp":true,"itakura.gunma.jp":true,"kanna.gunma.jp":true,"kanra.gunma.jp":true,"katashina.gunma.jp":true,"kawaba.gunma.jp":true,"kiryu.gunma.jp":true,"kusatsu.gunma.jp":true,"maebashi.gunma.jp":true,"meiwa.gunma.jp":true,"midori.gunma.jp":true,"minakami.gunma.jp":true,"naganohara.gunma.jp":true,"nakanojo.gunma.jp":true,"nanmoku.gunma.jp":true,"numata.gunma.jp":true,"oizumi.gunma.jp":true,"ora.gunma.jp":true,"ota.gunma.jp":true,"shibukawa.gunma.jp":true,"shimonita.gunma.jp":true,"shinto.gunma.jp":true,"showa.gunma.jp":true,"takasaki.gunma.jp":true,"takayama.gunma.jp":true,"tamamura.gunma.jp":true,"tatebayashi.gunma.jp":true,"tomioka.gunma.jp":true,"tsukiyono.gunma.jp":true,"tsumagoi.gunma.jp":true,"ueno.gunma.jp":true,"yoshioka.gunma.jp":true,"asaminami.hiroshima.jp":true,"daiwa.hiroshima.jp":true,"etajima.hiroshima.jp":true,"fuchu.hiroshima.jp":true,"fukuyama.hiroshima.jp":true,"hatsukaichi.hiroshima.jp":true,"higashihiroshima.hiroshima.jp":true,"hongo.hiroshima.jp":true,"jinsekikogen.hiroshima.jp":true,"kaita.hiroshima.jp":true,"kui.hiroshima.jp":true,"kumano.hiroshima.jp":true,"kure.hiroshima.jp":true,"mihara.hiroshima.jp":true,"miyoshi.hiroshima.jp":true,"naka.hiroshima.jp":true,"onomichi.hiroshima.jp":true,"osakikamijima.hiroshima.jp":true,"otake.hiroshima.jp":true,"saka.hiroshima.jp":true,"sera.hiroshima.jp":true,"seranishi.hiroshima.jp":true,"shinichi.hiroshima.jp":true,"shobara.hiroshima.jp":true,"takehara.hiroshima.jp":true,"abashiri.hokkaido.jp":true,"abira.hokkaido.jp":true,"aibetsu.hokkaido.jp":true,"akabira.hokkaido.jp":true,"akkeshi.hokkaido.jp":true,"asahikawa.hokkaido.jp":true,"ashibetsu.hokkaido.jp":true,"ashoro.hokkaido.jp":true,"assabu.hokkaido.jp":true,"atsuma.hokkaido.jp":true,"bibai.hokkaido.jp":true,"biei.hokkaido.jp":true,"bifuka.hokkaido.jp":true,"bihoro.hokkaido.jp":true,"biratori.hokkaido.jp":true,"chippubetsu.hokkaido.jp":true,"chitose.hokkaido.jp":true,"date.hokkaido.jp":true,"ebetsu.hokkaido.jp":true,"embetsu.hokkaido.jp":true,"eniwa.hokkaido.jp":true,"erimo.hokkaido.jp":true,"esan.hokkaido.jp":true,"esashi.hokkaido.jp":true,"fukagawa.hokkaido.jp":true,"fukushima.hokkaido.jp":true,"furano.hokkaido.jp":true,"furubira.hokkaido.jp":true,"haboro.hokkaido.jp":true,"hakodate.hokkaido.jp":true,"hamatonbetsu.hokkaido.jp":true,"hidaka.hokkaido.jp":true,"higashikagura.hokkaido.jp":true,"higashikawa.hokkaido.jp":true,"hiroo.hokkaido.jp":true,"hokuryu.hokkaido.jp":true,"hokuto.hokkaido.jp":true,"honbetsu.hokkaido.jp":true,"horokanai.hokkaido.jp":true,"horonobe.hokkaido.jp":true,"ikeda.hokkaido.jp":true,"imakane.hokkaido.jp":true,"ishikari.hokkaido.jp":true,"iwamizawa.hokkaido.jp":true,"iwanai.hokkaido.jp":true,"kamifurano.hokkaido.jp":true,"kamikawa.hokkaido.jp":true,"kamishihoro.hokkaido.jp":true,"kamisunagawa.hokkaido.jp":true,"kamoenai.hokkaido.jp":true,"kayabe.hokkaido.jp":true,"kembuchi.hokkaido.jp":true,"kikonai.hokkaido.jp":true,"kimobetsu.hokkaido.jp":true,"kitahiroshima.hokkaido.jp":true,"kitami.hokkaido.jp":true,"kiyosato.hokkaido.jp":true,"koshimizu.hokkaido.jp":true,"kunneppu.hokkaido.jp":true,"kuriyama.hokkaido.jp":true,"kuromatsunai.hokkaido.jp":true,"kushiro.hokkaido.jp":true,"kutchan.hokkaido.jp":true,"kyowa.hokkaido.jp":true,"mashike.hokkaido.jp":true,"matsumae.hokkaido.jp":true,"mikasa.hokkaido.jp":true,"minamifurano.hokkaido.jp":true,"mombetsu.hokkaido.jp":true,"moseushi.hokkaido.jp":true,"mukawa.hokkaido.jp":true,"muroran.hokkaido.jp":true,"naie.hokkaido.jp":true,"nakagawa.hokkaido.jp":true,"nakasatsunai.hokkaido.jp":true,"nakatombetsu.hokkaido.jp":true,"nanae.hokkaido.jp":true,"nanporo.hokkaido.jp":true,"nayoro.hokkaido.jp":true,"nemuro.hokkaido.jp":true,"niikappu.hokkaido.jp":true,"niki.hokkaido.jp":true,"nishiokoppe.hokkaido.jp":true,"noboribetsu.hokkaido.jp":true,"numata.hokkaido.jp":true,"obihiro.hokkaido.jp":true,"obira.hokkaido.jp":true,"oketo.hokkaido.jp":true,"okoppe.hokkaido.jp":true,"otaru.hokkaido.jp":true,"otobe.hokkaido.jp":true,"otofuke.hokkaido.jp":true,"otoineppu.hokkaido.jp":true,"oumu.hokkaido.jp":true,"ozora.hokkaido.jp":true,"pippu.hokkaido.jp":true,"rankoshi.hokkaido.jp":true,"rebun.hokkaido.jp":true,"rikubetsu.hokkaido.jp":true,"rishiri.hokkaido.jp":true,"rishirifuji.hokkaido.jp":true,"saroma.hokkaido.jp":true,"sarufutsu.hokkaido.jp":true,"shakotan.hokkaido.jp":true,"shari.hokkaido.jp":true,"shibecha.hokkaido.jp":true,"shibetsu.hokkaido.jp":true,"shikabe.hokkaido.jp":true,"shikaoi.hokkaido.jp":true,"shimamaki.hokkaido.jp":true,"shimizu.hokkaido.jp":true,"shimokawa.hokkaido.jp":true,"shinshinotsu.hokkaido.jp":true,"shintoku.hokkaido.jp":true,"shiranuka.hokkaido.jp":true,"shiraoi.hokkaido.jp":true,"shiriuchi.hokkaido.jp":true,"sobetsu.hokkaido.jp":true,"sunagawa.hokkaido.jp":true,"taiki.hokkaido.jp":true,"takasu.hokkaido.jp":true,"takikawa.hokkaido.jp":true,"takinoue.hokkaido.jp":true,"teshikaga.hokkaido.jp":true,"tobetsu.hokkaido.jp":true,"tohma.hokkaido.jp":true,"tomakomai.hokkaido.jp":true,"tomari.hokkaido.jp":true,"toya.hokkaido.jp":true,"toyako.hokkaido.jp":true,"toyotomi.hokkaido.jp":true,"toyoura.hokkaido.jp":true,"tsubetsu.hokkaido.jp":true,"tsukigata.hokkaido.jp":true,"urakawa.hokkaido.jp":true,"urausu.hokkaido.jp":true,"uryu.hokkaido.jp":true,"utashinai.hokkaido.jp":true,"wakkanai.hokkaido.jp":true,"wassamu.hokkaido.jp":true,"yakumo.hokkaido.jp":true,"yoichi.hokkaido.jp":true,"aioi.hyogo.jp":true,"akashi.hyogo.jp":true,"ako.hyogo.jp":true,"amagasaki.hyogo.jp":true,"aogaki.hyogo.jp":true,"asago.hyogo.jp":true,"ashiya.hyogo.jp":true,"awaji.hyogo.jp":true,"fukusaki.hyogo.jp":true,"goshiki.hyogo.jp":true,"harima.hyogo.jp":true,"himeji.hyogo.jp":true,"ichikawa.hyogo.jp":true,"inagawa.hyogo.jp":true,"itami.hyogo.jp":true,"kakogawa.hyogo.jp":true,"kamigori.hyogo.jp":true,"kamikawa.hyogo.jp":true,"kasai.hyogo.jp":true,"kasuga.hyogo.jp":true,"kawanishi.hyogo.jp":true,"miki.hyogo.jp":true,"minamiawaji.hyogo.jp":true,"nishinomiya.hyogo.jp":true,"nishiwaki.hyogo.jp":true,"ono.hyogo.jp":true,"sanda.hyogo.jp":true,"sannan.hyogo.jp":true,"sasayama.hyogo.jp":true,"sayo.hyogo.jp":true,"shingu.hyogo.jp":true,"shinonsen.hyogo.jp":true,"shiso.hyogo.jp":true,"sumoto.hyogo.jp":true,"taishi.hyogo.jp":true,"taka.hyogo.jp":true,"takarazuka.hyogo.jp":true,"takasago.hyogo.jp":true,"takino.hyogo.jp":true,"tamba.hyogo.jp":true,"tatsuno.hyogo.jp":true,"toyooka.hyogo.jp":true,"yabu.hyogo.jp":true,"yashiro.hyogo.jp":true,"yoka.hyogo.jp":true,"yokawa.hyogo.jp":true,"ami.ibaraki.jp":true,"asahi.ibaraki.jp":true,"bando.ibaraki.jp":true,"chikusei.ibaraki.jp":true,"daigo.ibaraki.jp":true,"fujishiro.ibaraki.jp":true,"hitachi.ibaraki.jp":true,"hitachinaka.ibaraki.jp":true,"hitachiomiya.ibaraki.jp":true,"hitachiota.ibaraki.jp":true,"ibaraki.ibaraki.jp":true,"ina.ibaraki.jp":true,"inashiki.ibaraki.jp":true,"itako.ibaraki.jp":true,"iwama.ibaraki.jp":true,"joso.ibaraki.jp":true,"kamisu.ibaraki.jp":true,"kasama.ibaraki.jp":true,"kashima.ibaraki.jp":true,"kasumigaura.ibaraki.jp":true,"koga.ibaraki.jp":true,"miho.ibaraki.jp":true,"mito.ibaraki.jp":true,"moriya.ibaraki.jp":true,"naka.ibaraki.jp":true,"namegata.ibaraki.jp":true,"oarai.ibaraki.jp":true,"ogawa.ibaraki.jp":true,"omitama.ibaraki.jp":true,"ryugasaki.ibaraki.jp":true,"sakai.ibaraki.jp":true,"sakuragawa.ibaraki.jp":true,"shimodate.ibaraki.jp":true,"shimotsuma.ibaraki.jp":true,"shirosato.ibaraki.jp":true,"sowa.ibaraki.jp":true,"suifu.ibaraki.jp":true,"takahagi.ibaraki.jp":true,"tamatsukuri.ibaraki.jp":true,"tokai.ibaraki.jp":true,"tomobe.ibaraki.jp":true,"tone.ibaraki.jp":true,"toride.ibaraki.jp":true,"tsuchiura.ibaraki.jp":true,"tsukuba.ibaraki.jp":true,"uchihara.ibaraki.jp":true,"ushiku.ibaraki.jp":true,"yachiyo.ibaraki.jp":true,"yamagata.ibaraki.jp":true,"yawara.ibaraki.jp":true,"yuki.ibaraki.jp":true,"anamizu.ishikawa.jp":true,"hakui.ishikawa.jp":true,"hakusan.ishikawa.jp":true,"kaga.ishikawa.jp":true,"kahoku.ishikawa.jp":true,"kanazawa.ishikawa.jp":true,"kawakita.ishikawa.jp":true,"komatsu.ishikawa.jp":true,"nakanoto.ishikawa.jp":true,"nanao.ishikawa.jp":true,"nomi.ishikawa.jp":true,"nonoichi.ishikawa.jp":true,"noto.ishikawa.jp":true,"shika.ishikawa.jp":true,"suzu.ishikawa.jp":true,"tsubata.ishikawa.jp":true,"tsurugi.ishikawa.jp":true,"uchinada.ishikawa.jp":true,"wajima.ishikawa.jp":true,"fudai.iwate.jp":true,"fujisawa.iwate.jp":true,"hanamaki.iwate.jp":true,"hiraizumi.iwate.jp":true,"hirono.iwate.jp":true,"ichinohe.iwate.jp":true,"ichinoseki.iwate.jp":true,"iwaizumi.iwate.jp":true,"iwate.iwate.jp":true,"joboji.iwate.jp":true,"kamaishi.iwate.jp":true,"kanegasaki.iwate.jp":true,"karumai.iwate.jp":true,"kawai.iwate.jp":true,"kitakami.iwate.jp":true,"kuji.iwate.jp":true,"kunohe.iwate.jp":true,"kuzumaki.iwate.jp":true,"miyako.iwate.jp":true,"mizusawa.iwate.jp":true,"morioka.iwate.jp":true,"ninohe.iwate.jp":true,"noda.iwate.jp":true,"ofunato.iwate.jp":true,"oshu.iwate.jp":true,"otsuchi.iwate.jp":true,"rikuzentakata.iwate.jp":true,"shiwa.iwate.jp":true,"shizukuishi.iwate.jp":true,"sumita.iwate.jp":true,"tanohata.iwate.jp":true,"tono.iwate.jp":true,"yahaba.iwate.jp":true,"yamada.iwate.jp":true,"ayagawa.kagawa.jp":true,"higashikagawa.kagawa.jp":true,"kanonji.kagawa.jp":true,"kotohira.kagawa.jp":true,"manno.kagawa.jp":true,"marugame.kagawa.jp":true,"mitoyo.kagawa.jp":true,"naoshima.kagawa.jp":true,"sanuki.kagawa.jp":true,"tadotsu.kagawa.jp":true,"takamatsu.kagawa.jp":true,"tonosho.kagawa.jp":true,"uchinomi.kagawa.jp":true,"utazu.kagawa.jp":true,"zentsuji.kagawa.jp":true,"akune.kagoshima.jp":true,"amami.kagoshima.jp":true,"hioki.kagoshima.jp":true,"isa.kagoshima.jp":true,"isen.kagoshima.jp":true,"izumi.kagoshima.jp":true,"kagoshima.kagoshima.jp":true,"kanoya.kagoshima.jp":true,"kawanabe.kagoshima.jp":true,"kinko.kagoshima.jp":true,"kouyama.kagoshima.jp":true,"makurazaki.kagoshima.jp":true,"matsumoto.kagoshima.jp":true,"minamitane.kagoshima.jp":true,"nakatane.kagoshima.jp":true,"nishinoomote.kagoshima.jp":true,"satsumasendai.kagoshima.jp":true,"soo.kagoshima.jp":true,"tarumizu.kagoshima.jp":true,"yusui.kagoshima.jp":true,"aikawa.kanagawa.jp":true,"atsugi.kanagawa.jp":true,"ayase.kanagawa.jp":true,"chigasaki.kanagawa.jp":true,"ebina.kanagawa.jp":true,"fujisawa.kanagawa.jp":true,"hadano.kanagawa.jp":true,"hakone.kanagawa.jp":true,"hiratsuka.kanagawa.jp":true,"isehara.kanagawa.jp":true,"kaisei.kanagawa.jp":true,"kamakura.kanagawa.jp":true,"kiyokawa.kanagawa.jp":true,"matsuda.kanagawa.jp":true,"minamiashigara.kanagawa.jp":true,"miura.kanagawa.jp":true,"nakai.kanagawa.jp":true,"ninomiya.kanagawa.jp":true,"odawara.kanagawa.jp":true,"oi.kanagawa.jp":true,"oiso.kanagawa.jp":true,"sagamihara.kanagawa.jp":true,"samukawa.kanagawa.jp":true,"tsukui.kanagawa.jp":true,"yamakita.kanagawa.jp":true,"yamato.kanagawa.jp":true,"yokosuka.kanagawa.jp":true,"yugawara.kanagawa.jp":true,"zama.kanagawa.jp":true,"zushi.kanagawa.jp":true,"aki.kochi.jp":true,"geisei.kochi.jp":true,"hidaka.kochi.jp":true,"higashitsuno.kochi.jp":true,"ino.kochi.jp":true,"kagami.kochi.jp":true,"kami.kochi.jp":true,"kitagawa.kochi.jp":true,"kochi.kochi.jp":true,"mihara.kochi.jp":true,"motoyama.kochi.jp":true,"muroto.kochi.jp":true,"nahari.kochi.jp":true,"nakamura.kochi.jp":true,"nankoku.kochi.jp":true,"nishitosa.kochi.jp":true,"niyodogawa.kochi.jp":true,"ochi.kochi.jp":true,"okawa.kochi.jp":true,"otoyo.kochi.jp":true,"otsuki.kochi.jp":true,"sakawa.kochi.jp":true,"sukumo.kochi.jp":true,"susaki.kochi.jp":true,"tosa.kochi.jp":true,"tosashimizu.kochi.jp":true,"toyo.kochi.jp":true,"tsuno.kochi.jp":true,"umaji.kochi.jp":true,"yasuda.kochi.jp":true,"yusuhara.kochi.jp":true,"amakusa.kumamoto.jp":true,"arao.kumamoto.jp":true,"aso.kumamoto.jp":true,"choyo.kumamoto.jp":true,"gyokuto.kumamoto.jp":true,"hitoyoshi.kumamoto.jp":true,"kamiamakusa.kumamoto.jp":true,"kashima.kumamoto.jp":true,"kikuchi.kumamoto.jp":true,"kosa.kumamoto.jp":true,"kumamoto.kumamoto.jp":true,"mashiki.kumamoto.jp":true,"mifune.kumamoto.jp":true,"minamata.kumamoto.jp":true,"minamioguni.kumamoto.jp":true,"nagasu.kumamoto.jp":true,"nishihara.kumamoto.jp":true,"oguni.kumamoto.jp":true,"ozu.kumamoto.jp":true,"sumoto.kumamoto.jp":true,"takamori.kumamoto.jp":true,"uki.kumamoto.jp":true,"uto.kumamoto.jp":true,"yamaga.kumamoto.jp":true,"yamato.kumamoto.jp":true,"yatsushiro.kumamoto.jp":true,"ayabe.kyoto.jp":true,"fukuchiyama.kyoto.jp":true,"higashiyama.kyoto.jp":true,"ide.kyoto.jp":true,"ine.kyoto.jp":true,"joyo.kyoto.jp":true,"kameoka.kyoto.jp":true,"kamo.kyoto.jp":true,"kita.kyoto.jp":true,"kizu.kyoto.jp":true,"kumiyama.kyoto.jp":true,"kyotamba.kyoto.jp":true,"kyotanabe.kyoto.jp":true,"kyotango.kyoto.jp":true,"maizuru.kyoto.jp":true,"minami.kyoto.jp":true,"minamiyamashiro.kyoto.jp":true,"miyazu.kyoto.jp":true,"muko.kyoto.jp":true,"nagaokakyo.kyoto.jp":true,"nakagyo.kyoto.jp":true,"nantan.kyoto.jp":true,"oyamazaki.kyoto.jp":true,"sakyo.kyoto.jp":true,"seika.kyoto.jp":true,"tanabe.kyoto.jp":true,"uji.kyoto.jp":true,"ujitawara.kyoto.jp":true,"wazuka.kyoto.jp":true,"yamashina.kyoto.jp":true,"yawata.kyoto.jp":true,"asahi.mie.jp":true,"inabe.mie.jp":true,"ise.mie.jp":true,"kameyama.mie.jp":true,"kawagoe.mie.jp":true,"kiho.mie.jp":true,"kisosaki.mie.jp":true,"kiwa.mie.jp":true,"komono.mie.jp":true,"kumano.mie.jp":true,"kuwana.mie.jp":true,"matsusaka.mie.jp":true,"meiwa.mie.jp":true,"mihama.mie.jp":true,"minamiise.mie.jp":true,"misugi.mie.jp":true,"miyama.mie.jp":true,"nabari.mie.jp":true,"shima.mie.jp":true,"suzuka.mie.jp":true,"tado.mie.jp":true,"taiki.mie.jp":true,"taki.mie.jp":true,"tamaki.mie.jp":true,"toba.mie.jp":true,"tsu.mie.jp":true,"udono.mie.jp":true,"ureshino.mie.jp":true,"watarai.mie.jp":true,"yokkaichi.mie.jp":true,"furukawa.miyagi.jp":true,"higashimatsushima.miyagi.jp":true,"ishinomaki.miyagi.jp":true,"iwanuma.miyagi.jp":true,"kakuda.miyagi.jp":true,"kami.miyagi.jp":true,"kawasaki.miyagi.jp":true,"kesennuma.miyagi.jp":true,"marumori.miyagi.jp":true,"matsushima.miyagi.jp":true,"minamisanriku.miyagi.jp":true,"misato.miyagi.jp":true,"murata.miyagi.jp":true,"natori.miyagi.jp":true,"ogawara.miyagi.jp":true,"ohira.miyagi.jp":true,"onagawa.miyagi.jp":true,"osaki.miyagi.jp":true,"rifu.miyagi.jp":true,"semine.miyagi.jp":true,"shibata.miyagi.jp":true,"shichikashuku.miyagi.jp":true,"shikama.miyagi.jp":true,"shiogama.miyagi.jp":true,"shiroishi.miyagi.jp":true,"tagajo.miyagi.jp":true,"taiwa.miyagi.jp":true,"tome.miyagi.jp":true,"tomiya.miyagi.jp":true,"wakuya.miyagi.jp":true,"watari.miyagi.jp":true,"yamamoto.miyagi.jp":true,"zao.miyagi.jp":true,"aya.miyazaki.jp":true,"ebino.miyazaki.jp":true,"gokase.miyazaki.jp":true,"hyuga.miyazaki.jp":true,"kadogawa.miyazaki.jp":true,"kawaminami.miyazaki.jp":true,"kijo.miyazaki.jp":true,"kitagawa.miyazaki.jp":true,"kitakata.miyazaki.jp":true,"kitaura.miyazaki.jp":true,"kobayashi.miyazaki.jp":true,"kunitomi.miyazaki.jp":true,"kushima.miyazaki.jp":true,"mimata.miyazaki.jp":true,"miyakonojo.miyazaki.jp":true,"miyazaki.miyazaki.jp":true,"morotsuka.miyazaki.jp":true,"nichinan.miyazaki.jp":true,"nishimera.miyazaki.jp":true,"nobeoka.miyazaki.jp":true,"saito.miyazaki.jp":true,"shiiba.miyazaki.jp":true,"shintomi.miyazaki.jp":true,"takaharu.miyazaki.jp":true,"takanabe.miyazaki.jp":true,"takazaki.miyazaki.jp":true,"tsuno.miyazaki.jp":true,"achi.nagano.jp":true,"agematsu.nagano.jp":true,"anan.nagano.jp":true,"aoki.nagano.jp":true,"asahi.nagano.jp":true,"azumino.nagano.jp":true,"chikuhoku.nagano.jp":true,"chikuma.nagano.jp":true,"chino.nagano.jp":true,"fujimi.nagano.jp":true,"hakuba.nagano.jp":true,"hara.nagano.jp":true,"hiraya.nagano.jp":true,"iida.nagano.jp":true,"iijima.nagano.jp":true,"iiyama.nagano.jp":true,"iizuna.nagano.jp":true,"ikeda.nagano.jp":true,"ikusaka.nagano.jp":true,"ina.nagano.jp":true,"karuizawa.nagano.jp":true,"kawakami.nagano.jp":true,"kiso.nagano.jp":true,"kisofukushima.nagano.jp":true,"kitaaiki.nagano.jp":true,"komagane.nagano.jp":true,"komoro.nagano.jp":true,"matsukawa.nagano.jp":true,"matsumoto.nagano.jp":true,"miasa.nagano.jp":true,"minamiaiki.nagano.jp":true,"minamimaki.nagano.jp":true,"minamiminowa.nagano.jp":true,"minowa.nagano.jp":true,"miyada.nagano.jp":true,"miyota.nagano.jp":true,"mochizuki.nagano.jp":true,"nagano.nagano.jp":true,"nagawa.nagano.jp":true,"nagiso.nagano.jp":true,"nakagawa.nagano.jp":true,"nakano.nagano.jp":true,"nozawaonsen.nagano.jp":true,"obuse.nagano.jp":true,"ogawa.nagano.jp":true,"okaya.nagano.jp":true,"omachi.nagano.jp":true,"omi.nagano.jp":true,"ookuwa.nagano.jp":true,"ooshika.nagano.jp":true,"otaki.nagano.jp":true,"otari.nagano.jp":true,"sakae.nagano.jp":true,"sakaki.nagano.jp":true,"saku.nagano.jp":true,"sakuho.nagano.jp":true,"shimosuwa.nagano.jp":true,"shinanomachi.nagano.jp":true,"shiojiri.nagano.jp":true,"suwa.nagano.jp":true,"suzaka.nagano.jp":true,"takagi.nagano.jp":true,"takamori.nagano.jp":true,"takayama.nagano.jp":true,"tateshina.nagano.jp":true,"tatsuno.nagano.jp":true,"togakushi.nagano.jp":true,"togura.nagano.jp":true,"tomi.nagano.jp":true,"ueda.nagano.jp":true,"wada.nagano.jp":true,"yamagata.nagano.jp":true,"yamanouchi.nagano.jp":true,"yasaka.nagano.jp":true,"yasuoka.nagano.jp":true,"chijiwa.nagasaki.jp":true,"futsu.nagasaki.jp":true,"goto.nagasaki.jp":true,"hasami.nagasaki.jp":true,"hirado.nagasaki.jp":true,"iki.nagasaki.jp":true,"isahaya.nagasaki.jp":true,"kawatana.nagasaki.jp":true,"kuchinotsu.nagasaki.jp":true,"matsuura.nagasaki.jp":true,"nagasaki.nagasaki.jp":true,"obama.nagasaki.jp":true,"omura.nagasaki.jp":true,"oseto.nagasaki.jp":true,"saikai.nagasaki.jp":true,"sasebo.nagasaki.jp":true,"seihi.nagasaki.jp":true,"shimabara.nagasaki.jp":true,"shinkamigoto.nagasaki.jp":true,"togitsu.nagasaki.jp":true,"tsushima.nagasaki.jp":true,"unzen.nagasaki.jp":true,"ando.nara.jp":true,"gose.nara.jp":true,"heguri.nara.jp":true,"higashiyoshino.nara.jp":true,"ikaruga.nara.jp":true,"ikoma.nara.jp":true,"kamikitayama.nara.jp":true,"kanmaki.nara.jp":true,"kashiba.nara.jp":true,"kashihara.nara.jp":true,"katsuragi.nara.jp":true,"kawai.nara.jp":true,"kawakami.nara.jp":true,"kawanishi.nara.jp":true,"koryo.nara.jp":true,"kurotaki.nara.jp":true,"mitsue.nara.jp":true,"miyake.nara.jp":true,"nara.nara.jp":true,"nosegawa.nara.jp":true,"oji.nara.jp":true,"ouda.nara.jp":true,"oyodo.nara.jp":true,"sakurai.nara.jp":true,"sango.nara.jp":true,"shimoichi.nara.jp":true,"shimokitayama.nara.jp":true,"shinjo.nara.jp":true,"soni.nara.jp":true,"takatori.nara.jp":true,"tawaramoto.nara.jp":true,"tenkawa.nara.jp":true,"tenri.nara.jp":true,"uda.nara.jp":true,"yamatokoriyama.nara.jp":true,"yamatotakada.nara.jp":true,"yamazoe.nara.jp":true,"yoshino.nara.jp":true,"aga.niigata.jp":true,"agano.niigata.jp":true,"gosen.niigata.jp":true,"itoigawa.niigata.jp":true,"izumozaki.niigata.jp":true,"joetsu.niigata.jp":true,"kamo.niigata.jp":true,"kariwa.niigata.jp":true,"kashiwazaki.niigata.jp":true,"minamiuonuma.niigata.jp":true,"mitsuke.niigata.jp":true,"muika.niigata.jp":true,"murakami.niigata.jp":true,"myoko.niigata.jp":true,"nagaoka.niigata.jp":true,"niigata.niigata.jp":true,"ojiya.niigata.jp":true,"omi.niigata.jp":true,"sado.niigata.jp":true,"sanjo.niigata.jp":true,"seiro.niigata.jp":true,"seirou.niigata.jp":true,"sekikawa.niigata.jp":true,"shibata.niigata.jp":true,"tagami.niigata.jp":true,"tainai.niigata.jp":true,"tochio.niigata.jp":true,"tokamachi.niigata.jp":true,"tsubame.niigata.jp":true,"tsunan.niigata.jp":true,"uonuma.niigata.jp":true,"yahiko.niigata.jp":true,"yoita.niigata.jp":true,"yuzawa.niigata.jp":true,"beppu.oita.jp":true,"bungoono.oita.jp":true,"bungotakada.oita.jp":true,"hasama.oita.jp":true,"hiji.oita.jp":true,"himeshima.oita.jp":true,"hita.oita.jp":true,"kamitsue.oita.jp":true,"kokonoe.oita.jp":true,"kuju.oita.jp":true,"kunisaki.oita.jp":true,"kusu.oita.jp":true,"oita.oita.jp":true,"saiki.oita.jp":true,"taketa.oita.jp":true,"tsukumi.oita.jp":true,"usa.oita.jp":true,"usuki.oita.jp":true,"yufu.oita.jp":true,"akaiwa.okayama.jp":true,"asakuchi.okayama.jp":true,"bizen.okayama.jp":true,"hayashima.okayama.jp":true,"ibara.okayama.jp":true,"kagamino.okayama.jp":true,"kasaoka.okayama.jp":true,"kibichuo.okayama.jp":true,"kumenan.okayama.jp":true,"kurashiki.okayama.jp":true,"maniwa.okayama.jp":true,"misaki.okayama.jp":true,"nagi.okayama.jp":true,"niimi.okayama.jp":true,"nishiawakura.okayama.jp":true,"okayama.okayama.jp":true,"satosho.okayama.jp":true,"setouchi.okayama.jp":true,"shinjo.okayama.jp":true,"shoo.okayama.jp":true,"soja.okayama.jp":true,"takahashi.okayama.jp":true,"tamano.okayama.jp":true,"tsuyama.okayama.jp":true,"wake.okayama.jp":true,"yakage.okayama.jp":true,"aguni.okinawa.jp":true,"ginowan.okinawa.jp":true,"ginoza.okinawa.jp":true,"gushikami.okinawa.jp":true,"haebaru.okinawa.jp":true,"higashi.okinawa.jp":true,"hirara.okinawa.jp":true,"iheya.okinawa.jp":true,"ishigaki.okinawa.jp":true,"ishikawa.okinawa.jp":true,"itoman.okinawa.jp":true,"izena.okinawa.jp":true,"kadena.okinawa.jp":true,"kin.okinawa.jp":true,"kitadaito.okinawa.jp":true,"kitanakagusuku.okinawa.jp":true,"kumejima.okinawa.jp":true,"kunigami.okinawa.jp":true,"minamidaito.okinawa.jp":true,"motobu.okinawa.jp":true,"nago.okinawa.jp":true,"naha.okinawa.jp":true,"nakagusuku.okinawa.jp":true,"nakijin.okinawa.jp":true,"nanjo.okinawa.jp":true,"nishihara.okinawa.jp":true,"ogimi.okinawa.jp":true,"okinawa.okinawa.jp":true,"onna.okinawa.jp":true,"shimoji.okinawa.jp":true,"taketomi.okinawa.jp":true,"tarama.okinawa.jp":true,"tokashiki.okinawa.jp":true,"tomigusuku.okinawa.jp":true,"tonaki.okinawa.jp":true,"urasoe.okinawa.jp":true,"uruma.okinawa.jp":true,"yaese.okinawa.jp":true,"yomitan.okinawa.jp":true,"yonabaru.okinawa.jp":true,"yonaguni.okinawa.jp":true,"zamami.okinawa.jp":true,"abeno.osaka.jp":true,"chihayaakasaka.osaka.jp":true,"chuo.osaka.jp":true,"daito.osaka.jp":true,"fujiidera.osaka.jp":true,"habikino.osaka.jp":true,"hannan.osaka.jp":true,"higashiosaka.osaka.jp":true,"higashisumiyoshi.osaka.jp":true,"higashiyodogawa.osaka.jp":true,"hirakata.osaka.jp":true,"ibaraki.osaka.jp":true,"ikeda.osaka.jp":true,"izumi.osaka.jp":true,"izumiotsu.osaka.jp":true,"izumisano.osaka.jp":true,"kadoma.osaka.jp":true,"kaizuka.osaka.jp":true,"kanan.osaka.jp":true,"kashiwara.osaka.jp":true,"katano.osaka.jp":true,"kawachinagano.osaka.jp":true,"kishiwada.osaka.jp":true,"kita.osaka.jp":true,"kumatori.osaka.jp":true,"matsubara.osaka.jp":true,"minato.osaka.jp":true,"minoh.osaka.jp":true,"misaki.osaka.jp":true,"moriguchi.osaka.jp":true,"neyagawa.osaka.jp":true,"nishi.osaka.jp":true,"nose.osaka.jp":true,"osakasayama.osaka.jp":true,"sakai.osaka.jp":true,"sayama.osaka.jp":true,"sennan.osaka.jp":true,"settsu.osaka.jp":true,"shijonawate.osaka.jp":true,"shimamoto.osaka.jp":true,"suita.osaka.jp":true,"tadaoka.osaka.jp":true,"taishi.osaka.jp":true,"tajiri.osaka.jp":true,"takaishi.osaka.jp":true,"takatsuki.osaka.jp":true,"tondabayashi.osaka.jp":true,"toyonaka.osaka.jp":true,"toyono.osaka.jp":true,"yao.osaka.jp":true,"ariake.saga.jp":true,"arita.saga.jp":true,"fukudomi.saga.jp":true,"genkai.saga.jp":true,"hamatama.saga.jp":true,"hizen.saga.jp":true,"imari.saga.jp":true,"kamimine.saga.jp":true,"kanzaki.saga.jp":true,"karatsu.saga.jp":true,"kashima.saga.jp":true,"kitagata.saga.jp":true,"kitahata.saga.jp":true,"kiyama.saga.jp":true,"kouhoku.saga.jp":true,"kyuragi.saga.jp":true,"nishiarita.saga.jp":true,"ogi.saga.jp":true,"omachi.saga.jp":true,"ouchi.saga.jp":true,"saga.saga.jp":true,"shiroishi.saga.jp":true,"taku.saga.jp":true,"tara.saga.jp":true,"tosu.saga.jp":true,"yoshinogari.saga.jp":true,"arakawa.saitama.jp":true,"asaka.saitama.jp":true,"chichibu.saitama.jp":true,"fujimi.saitama.jp":true,"fujimino.saitama.jp":true,"fukaya.saitama.jp":true,"hanno.saitama.jp":true,"hanyu.saitama.jp":true,"hasuda.saitama.jp":true,"hatogaya.saitama.jp":true,"hatoyama.saitama.jp":true,"hidaka.saitama.jp":true,"higashichichibu.saitama.jp":true,"higashimatsuyama.saitama.jp":true,"honjo.saitama.jp":true,"ina.saitama.jp":true,"iruma.saitama.jp":true,"iwatsuki.saitama.jp":true,"kamiizumi.saitama.jp":true,"kamikawa.saitama.jp":true,"kamisato.saitama.jp":true,"kasukabe.saitama.jp":true,"kawagoe.saitama.jp":true,"kawaguchi.saitama.jp":true,"kawajima.saitama.jp":true,"kazo.saitama.jp":true,"kitamoto.saitama.jp":true,"koshigaya.saitama.jp":true,"kounosu.saitama.jp":true,"kuki.saitama.jp":true,"kumagaya.saitama.jp":true,"matsubushi.saitama.jp":true,"minano.saitama.jp":true,"misato.saitama.jp":true,"miyashiro.saitama.jp":true,"miyoshi.saitama.jp":true,"moroyama.saitama.jp":true,"nagatoro.saitama.jp":true,"namegawa.saitama.jp":true,"niiza.saitama.jp":true,"ogano.saitama.jp":true,"ogawa.saitama.jp":true,"ogose.saitama.jp":true,"okegawa.saitama.jp":true,"omiya.saitama.jp":true,"otaki.saitama.jp":true,"ranzan.saitama.jp":true,"ryokami.saitama.jp":true,"saitama.saitama.jp":true,"sakado.saitama.jp":true,"satte.saitama.jp":true,"sayama.saitama.jp":true,"shiki.saitama.jp":true,"shiraoka.saitama.jp":true,"soka.saitama.jp":true,"sugito.saitama.jp":true,"toda.saitama.jp":true,"tokigawa.saitama.jp":true,"tokorozawa.saitama.jp":true,"tsurugashima.saitama.jp":true,"urawa.saitama.jp":true,"warabi.saitama.jp":true,"yashio.saitama.jp":true,"yokoze.saitama.jp":true,"yono.saitama.jp":true,"yorii.saitama.jp":true,"yoshida.saitama.jp":true,"yoshikawa.saitama.jp":true,"yoshimi.saitama.jp":true,"aisho.shiga.jp":true,"gamo.shiga.jp":true,"higashiomi.shiga.jp":true,"hikone.shiga.jp":true,"koka.shiga.jp":true,"konan.shiga.jp":true,"kosei.shiga.jp":true,"koto.shiga.jp":true,"kusatsu.shiga.jp":true,"maibara.shiga.jp":true,"moriyama.shiga.jp":true,"nagahama.shiga.jp":true,"nishiazai.shiga.jp":true,"notogawa.shiga.jp":true,"omihachiman.shiga.jp":true,"otsu.shiga.jp":true,"ritto.shiga.jp":true,"ryuoh.shiga.jp":true,"takashima.shiga.jp":true,"takatsuki.shiga.jp":true,"torahime.shiga.jp":true,"toyosato.shiga.jp":true,"yasu.shiga.jp":true,"akagi.shimane.jp":true,"ama.shimane.jp":true,"gotsu.shimane.jp":true,"hamada.shimane.jp":true,"higashiizumo.shimane.jp":true,"hikawa.shimane.jp":true,"hikimi.shimane.jp":true,"izumo.shimane.jp":true,"kakinoki.shimane.jp":true,"masuda.shimane.jp":true,"matsue.shimane.jp":true,"misato.shimane.jp":true,"nishinoshima.shimane.jp":true,"ohda.shimane.jp":true,"okinoshima.shimane.jp":true,"okuizumo.shimane.jp":true,"shimane.shimane.jp":true,"tamayu.shimane.jp":true,"tsuwano.shimane.jp":true,"unnan.shimane.jp":true,"yakumo.shimane.jp":true,"yasugi.shimane.jp":true,"yatsuka.shimane.jp":true,"arai.shizuoka.jp":true,"atami.shizuoka.jp":true,"fuji.shizuoka.jp":true,"fujieda.shizuoka.jp":true,"fujikawa.shizuoka.jp":true,"fujinomiya.shizuoka.jp":true,"fukuroi.shizuoka.jp":true,"gotemba.shizuoka.jp":true,"haibara.shizuoka.jp":true,"hamamatsu.shizuoka.jp":true,"higashiizu.shizuoka.jp":true,"ito.shizuoka.jp":true,"iwata.shizuoka.jp":true,"izu.shizuoka.jp":true,"izunokuni.shizuoka.jp":true,"kakegawa.shizuoka.jp":true,"kannami.shizuoka.jp":true,"kawanehon.shizuoka.jp":true,"kawazu.shizuoka.jp":true,"kikugawa.shizuoka.jp":true,"kosai.shizuoka.jp":true,"makinohara.shizuoka.jp":true,"matsuzaki.shizuoka.jp":true,"minamiizu.shizuoka.jp":true,"mishima.shizuoka.jp":true,"morimachi.shizuoka.jp":true,"nishiizu.shizuoka.jp":true,"numazu.shizuoka.jp":true,"omaezaki.shizuoka.jp":true,"shimada.shizuoka.jp":true,"shimizu.shizuoka.jp":true,"shimoda.shizuoka.jp":true,"shizuoka.shizuoka.jp":true,"susono.shizuoka.jp":true,"yaizu.shizuoka.jp":true,"yoshida.shizuoka.jp":true,"ashikaga.tochigi.jp":true,"bato.tochigi.jp":true,"haga.tochigi.jp":true,"ichikai.tochigi.jp":true,"iwafune.tochigi.jp":true,"kaminokawa.tochigi.jp":true,"kanuma.tochigi.jp":true,"karasuyama.tochigi.jp":true,"kuroiso.tochigi.jp":true,"mashiko.tochigi.jp":true,"mibu.tochigi.jp":true,"moka.tochigi.jp":true,"motegi.tochigi.jp":true,"nasu.tochigi.jp":true,"nasushiobara.tochigi.jp":true,"nikko.tochigi.jp":true,"nishikata.tochigi.jp":true,"nogi.tochigi.jp":true,"ohira.tochigi.jp":true,"ohtawara.tochigi.jp":true,"oyama.tochigi.jp":true,"sakura.tochigi.jp":true,"sano.tochigi.jp":true,"shimotsuke.tochigi.jp":true,"shioya.tochigi.jp":true,"takanezawa.tochigi.jp":true,"tochigi.tochigi.jp":true,"tsuga.tochigi.jp":true,"ujiie.tochigi.jp":true,"utsunomiya.tochigi.jp":true,"yaita.tochigi.jp":true,"aizumi.tokushima.jp":true,"anan.tokushima.jp":true,"ichiba.tokushima.jp":true,"itano.tokushima.jp":true,"kainan.tokushima.jp":true,"komatsushima.tokushima.jp":true,"matsushige.tokushima.jp":true,"mima.tokushima.jp":true,"minami.tokushima.jp":true,"miyoshi.tokushima.jp":true,"mugi.tokushima.jp":true,"nakagawa.tokushima.jp":true,"naruto.tokushima.jp":true,"sanagochi.tokushima.jp":true,"shishikui.tokushima.jp":true,"tokushima.tokushima.jp":true,"wajiki.tokushima.jp":true,"adachi.tokyo.jp":true,"akiruno.tokyo.jp":true,"akishima.tokyo.jp":true,"aogashima.tokyo.jp":true,"arakawa.tokyo.jp":true,"bunkyo.tokyo.jp":true,"chiyoda.tokyo.jp":true,"chofu.tokyo.jp":true,"chuo.tokyo.jp":true,"edogawa.tokyo.jp":true,"fuchu.tokyo.jp":true,"fussa.tokyo.jp":true,"hachijo.tokyo.jp":true,"hachioji.tokyo.jp":true,"hamura.tokyo.jp":true,"higashikurume.tokyo.jp":true,"higashimurayama.tokyo.jp":true,"higashiyamato.tokyo.jp":true,"hino.tokyo.jp":true,"hinode.tokyo.jp":true,"hinohara.tokyo.jp":true,"inagi.tokyo.jp":true,"itabashi.tokyo.jp":true,"katsushika.tokyo.jp":true,"kita.tokyo.jp":true,"kiyose.tokyo.jp":true,"kodaira.tokyo.jp":true,"koganei.tokyo.jp":true,"kokubunji.tokyo.jp":true,"komae.tokyo.jp":true,"koto.tokyo.jp":true,"kouzushima.tokyo.jp":true,"kunitachi.tokyo.jp":true,"machida.tokyo.jp":true,"meguro.tokyo.jp":true,"minato.tokyo.jp":true,"mitaka.tokyo.jp":true,"mizuho.tokyo.jp":true,"musashimurayama.tokyo.jp":true,"musashino.tokyo.jp":true,"nakano.tokyo.jp":true,"nerima.tokyo.jp":true,"ogasawara.tokyo.jp":true,"okutama.tokyo.jp":true,"ome.tokyo.jp":true,"oshima.tokyo.jp":true,"ota.tokyo.jp":true,"setagaya.tokyo.jp":true,"shibuya.tokyo.jp":true,"shinagawa.tokyo.jp":true,"shinjuku.tokyo.jp":true,"suginami.tokyo.jp":true,"sumida.tokyo.jp":true,"tachikawa.tokyo.jp":true,"taito.tokyo.jp":true,"tama.tokyo.jp":true,"toshima.tokyo.jp":true,"chizu.tottori.jp":true,"hino.tottori.jp":true,"kawahara.tottori.jp":true,"koge.tottori.jp":true,"kotoura.tottori.jp":true,"misasa.tottori.jp":true,"nanbu.tottori.jp":true,"nichinan.tottori.jp":true,"sakaiminato.tottori.jp":true,"tottori.tottori.jp":true,"wakasa.tottori.jp":true,"yazu.tottori.jp":true,"yonago.tottori.jp":true,"asahi.toyama.jp":true,"fuchu.toyama.jp":true,"fukumitsu.toyama.jp":true,"funahashi.toyama.jp":true,"himi.toyama.jp":true,"imizu.toyama.jp":true,"inami.toyama.jp":true,"johana.toyama.jp":true,"kamiichi.toyama.jp":true,"kurobe.toyama.jp":true,"nakaniikawa.toyama.jp":true,"namerikawa.toyama.jp":true,"nanto.toyama.jp":true,"nyuzen.toyama.jp":true,"oyabe.toyama.jp":true,"taira.toyama.jp":true,"takaoka.toyama.jp":true,"tateyama.toyama.jp":true,"toga.toyama.jp":true,"tonami.toyama.jp":true,"toyama.toyama.jp":true,"unazuki.toyama.jp":true,"uozu.toyama.jp":true,"yamada.toyama.jp":true,"arida.wakayama.jp":true,"aridagawa.wakayama.jp":true,"gobo.wakayama.jp":true,"hashimoto.wakayama.jp":true,"hidaka.wakayama.jp":true,"hirogawa.wakayama.jp":true,"inami.wakayama.jp":true,"iwade.wakayama.jp":true,"kainan.wakayama.jp":true,"kamitonda.wakayama.jp":true,"katsuragi.wakayama.jp":true,"kimino.wakayama.jp":true,"kinokawa.wakayama.jp":true,"kitayama.wakayama.jp":true,"koya.wakayama.jp":true,"koza.wakayama.jp":true,"kozagawa.wakayama.jp":true,"kudoyama.wakayama.jp":true,"kushimoto.wakayama.jp":true,"mihama.wakayama.jp":true,"misato.wakayama.jp":true,"nachikatsuura.wakayama.jp":true,"shingu.wakayama.jp":true,"shirahama.wakayama.jp":true,"taiji.wakayama.jp":true,"tanabe.wakayama.jp":true,"wakayama.wakayama.jp":true,"yuasa.wakayama.jp":true,"yura.wakayama.jp":true,"asahi.yamagata.jp":true,"funagata.yamagata.jp":true,"higashine.yamagata.jp":true,"iide.yamagata.jp":true,"kahoku.yamagata.jp":true,"kaminoyama.yamagata.jp":true,"kaneyama.yamagata.jp":true,"kawanishi.yamagata.jp":true,"mamurogawa.yamagata.jp":true,"mikawa.yamagata.jp":true,"murayama.yamagata.jp":true,"nagai.yamagata.jp":true,"nakayama.yamagata.jp":true,"nanyo.yamagata.jp":true,"nishikawa.yamagata.jp":true,"obanazawa.yamagata.jp":true,"oe.yamagata.jp":true,"oguni.yamagata.jp":true,"ohkura.yamagata.jp":true,"oishida.yamagata.jp":true,"sagae.yamagata.jp":true,"sakata.yamagata.jp":true,"sakegawa.yamagata.jp":true,"shinjo.yamagata.jp":true,"shirataka.yamagata.jp":true,"shonai.yamagata.jp":true,"takahata.yamagata.jp":true,"tendo.yamagata.jp":true,"tozawa.yamagata.jp":true,"tsuruoka.yamagata.jp":true,"yamagata.yamagata.jp":true,"yamanobe.yamagata.jp":true,"yonezawa.yamagata.jp":true,"yuza.yamagata.jp":true,"abu.yamaguchi.jp":true,"hagi.yamaguchi.jp":true,"hikari.yamaguchi.jp":true,"hofu.yamaguchi.jp":true,"iwakuni.yamaguchi.jp":true,"kudamatsu.yamaguchi.jp":true,"mitou.yamaguchi.jp":true,"nagato.yamaguchi.jp":true,"oshima.yamaguchi.jp":true,"shimonoseki.yamaguchi.jp":true,"shunan.yamaguchi.jp":true,"tabuse.yamaguchi.jp":true,"tokuyama.yamaguchi.jp":true,"toyota.yamaguchi.jp":true,"ube.yamaguchi.jp":true,"yuu.yamaguchi.jp":true,"chuo.yamanashi.jp":true,"doshi.yamanashi.jp":true,"fuefuki.yamanashi.jp":true,"fujikawa.yamanashi.jp":true,"fujikawaguchiko.yamanashi.jp":true,"fujiyoshida.yamanashi.jp":true,"hayakawa.yamanashi.jp":true,"hokuto.yamanashi.jp":true,"ichikawamisato.yamanashi.jp":true,"kai.yamanashi.jp":true,"kofu.yamanashi.jp":true,"koshu.yamanashi.jp":true,"kosuge.yamanashi.jp":true,"minami-alps.yamanashi.jp":true,"minobu.yamanashi.jp":true,"nakamichi.yamanashi.jp":true,"nanbu.yamanashi.jp":true,"narusawa.yamanashi.jp":true,"nirasaki.yamanashi.jp":true,"nishikatsura.yamanashi.jp":true,"oshino.yamanashi.jp":true,"otsuki.yamanashi.jp":true,"showa.yamanashi.jp":true,"tabayama.yamanashi.jp":true,"tsuru.yamanashi.jp":true,"uenohara.yamanashi.jp":true,"yamanakako.yamanashi.jp":true,"yamanashi.yamanashi.jp":true,"*.ke":true,"kg":true,"org.kg":true,"net.kg":true,"com.kg":true,"edu.kg":true,"gov.kg":true,"mil.kg":true,"*.kh":true,"ki":true,"edu.ki":true,"biz.ki":true,"net.ki":true,"org.ki":true,"gov.ki":true,"info.ki":true,"com.ki":true,"km":true,"org.km":true,"nom.km":true,"gov.km":true,"prd.km":true,"tm.km":true,"edu.km":true,"mil.km":true,"ass.km":true,"com.km":true,"coop.km":true,"asso.km":true,"presse.km":true,"medecin.km":true,"notaires.km":true,"pharmaciens.km":true,"veterinaire.km":true,"gouv.km":true,"kn":true,"net.kn":true,"org.kn":true,"edu.kn":true,"gov.kn":true,"kp":true,"com.kp":true,"edu.kp":true,"gov.kp":true,"org.kp":true,"rep.kp":true,"tra.kp":true,"kr":true,"ac.kr":true,"co.kr":true,"es.kr":true,"go.kr":true,"hs.kr":true,"kg.kr":true,"mil.kr":true,"ms.kr":true,"ne.kr":true,"or.kr":true,"pe.kr":true,"re.kr":true,"sc.kr":true,"busan.kr":true,"chungbuk.kr":true,"chungnam.kr":true,"daegu.kr":true,"daejeon.kr":true,"gangwon.kr":true,"gwangju.kr":true,"gyeongbuk.kr":true,"gyeonggi.kr":true,"gyeongnam.kr":true,"incheon.kr":true,"jeju.kr":true,"jeonbuk.kr":true,"jeonnam.kr":true,"seoul.kr":true,"ulsan.kr":true,"*.kw":true,"ky":true,"edu.ky":true,"gov.ky":true,"com.ky":true,"org.ky":true,"net.ky":true,"kz":true,"org.kz":true,"edu.kz":true,"net.kz":true,"gov.kz":true,"mil.kz":true,"com.kz":true,"la":true,"int.la":true,"net.la":true,"info.la":true,"edu.la":true,"gov.la":true,"per.la":true,"com.la":true,"org.la":true,"lb":true,"com.lb":true,"edu.lb":true,"gov.lb":true,"net.lb":true,"org.lb":true,"lc":true,"com.lc":true,"net.lc":true,"co.lc":true,"org.lc":true,"edu.lc":true,"gov.lc":true,"li":true,"lk":true,"gov.lk":true,"sch.lk":true,"net.lk":true,"int.lk":true,"com.lk":true,"org.lk":true,"edu.lk":true,"ngo.lk":true,"soc.lk":true,"web.lk":true,"ltd.lk":true,"assn.lk":true,"grp.lk":true,"hotel.lk":true,"ac.lk":true,"lr":true,"com.lr":true,"edu.lr":true,"gov.lr":true,"org.lr":true,"net.lr":true,"ls":true,"co.ls":true,"org.ls":true,"lt":true,"gov.lt":true,"lu":true,"lv":true,"com.lv":true,"edu.lv":true,"gov.lv":true,"org.lv":true,"mil.lv":true,"id.lv":true,"net.lv":true,"asn.lv":true,"conf.lv":true,"ly":true,"com.ly":true,"net.ly":true,"gov.ly":true,"plc.ly":true,"edu.ly":true,"sch.ly":true,"med.ly":true,"org.ly":true,"id.ly":true,"ma":true,"co.ma":true,"net.ma":true,"gov.ma":true,"org.ma":true,"ac.ma":true,"press.ma":true,"mc":true,"tm.mc":true,"asso.mc":true,"md":true,"me":true,"co.me":true,"net.me":true,"org.me":true,"edu.me":true,"ac.me":true,"gov.me":true,"its.me":true,"priv.me":true,"mg":true,"org.mg":true,"nom.mg":true,"gov.mg":true,"prd.mg":true,"tm.mg":true,"edu.mg":true,"mil.mg":true,"com.mg":true,"co.mg":true,"mh":true,"mil":true,"mk":true,"com.mk":true,"org.mk":true,"net.mk":true,"edu.mk":true,"gov.mk":true,"inf.mk":true,"name.mk":true,"ml":true,"com.ml":true,"edu.ml":true,"gouv.ml":true,"gov.ml":true,"net.ml":true,"org.ml":true,"presse.ml":true,"*.mm":true,"mn":true,"gov.mn":true,"edu.mn":true,"org.mn":true,"mo":true,"com.mo":true,"net.mo":true,"org.mo":true,"edu.mo":true,"gov.mo":true,"mobi":true,"mp":true,"mq":true,"mr":true,"gov.mr":true,"ms":true,"com.ms":true,"edu.ms":true,"gov.ms":true,"net.ms":true,"org.ms":true,"mt":true,"com.mt":true,"edu.mt":true,"net.mt":true,"org.mt":true,"mu":true,"com.mu":true,"net.mu":true,"org.mu":true,"gov.mu":true,"ac.mu":true,"co.mu":true,"or.mu":true,"museum":true,"academy.museum":true,"agriculture.museum":true,"air.museum":true,"airguard.museum":true,"alabama.museum":true,"alaska.museum":true,"amber.museum":true,"ambulance.museum":true,"american.museum":true,"americana.museum":true,"americanantiques.museum":true,"americanart.museum":true,"amsterdam.museum":true,"and.museum":true,"annefrank.museum":true,"anthro.museum":true,"anthropology.museum":true,"antiques.museum":true,"aquarium.museum":true,"arboretum.museum":true,"archaeological.museum":true,"archaeology.museum":true,"architecture.museum":true,"art.museum":true,"artanddesign.museum":true,"artcenter.museum":true,"artdeco.museum":true,"arteducation.museum":true,"artgallery.museum":true,"arts.museum":true,"artsandcrafts.museum":true,"asmatart.museum":true,"assassination.museum":true,"assisi.museum":true,"association.museum":true,"astronomy.museum":true,"atlanta.museum":true,"austin.museum":true,"australia.museum":true,"automotive.museum":true,"aviation.museum":true,"axis.museum":true,"badajoz.museum":true,"baghdad.museum":true,"bahn.museum":true,"bale.museum":true,"baltimore.museum":true,"barcelona.museum":true,"baseball.museum":true,"basel.museum":true,"baths.museum":true,"bauern.museum":true,"beauxarts.museum":true,"beeldengeluid.museum":true,"bellevue.museum":true,"bergbau.museum":true,"berkeley.museum":true,"berlin.museum":true,"bern.museum":true,"bible.museum":true,"bilbao.museum":true,"bill.museum":true,"birdart.museum":true,"birthplace.museum":true,"bonn.museum":true,"boston.museum":true,"botanical.museum":true,"botanicalgarden.museum":true,"botanicgarden.museum":true,"botany.museum":true,"brandywinevalley.museum":true,"brasil.museum":true,"bristol.museum":true,"british.museum":true,"britishcolumbia.museum":true,"broadcast.museum":true,"brunel.museum":true,"brussel.museum":true,"brussels.museum":true,"bruxelles.museum":true,"building.museum":true,"burghof.museum":true,"bus.museum":true,"bushey.museum":true,"cadaques.museum":true,"california.museum":true,"cambridge.museum":true,"can.museum":true,"canada.museum":true,"capebreton.museum":true,"carrier.museum":true,"cartoonart.museum":true,"casadelamoneda.museum":true,"castle.museum":true,"castres.museum":true,"celtic.museum":true,"center.museum":true,"chattanooga.museum":true,"cheltenham.museum":true,"chesapeakebay.museum":true,"chicago.museum":true,"children.museum":true,"childrens.museum":true,"childrensgarden.museum":true,"chiropractic.museum":true,"chocolate.museum":true,"christiansburg.museum":true,"cincinnati.museum":true,"cinema.museum":true,"circus.museum":true,"civilisation.museum":true,"civilization.museum":true,"civilwar.museum":true,"clinton.museum":true,"clock.museum":true,"coal.museum":true,"coastaldefence.museum":true,"cody.museum":true,"coldwar.museum":true,"collection.museum":true,"colonialwilliamsburg.museum":true,"coloradoplateau.museum":true,"columbia.museum":true,"columbus.museum":true,"communication.museum":true,"communications.museum":true,"community.museum":true,"computer.museum":true,"computerhistory.museum":true,"xn--comunicaes-v6a2o.museum":true,"contemporary.museum":true,"contemporaryart.museum":true,"convent.museum":true,"copenhagen.museum":true,"corporation.museum":true,"xn--correios-e-telecomunicaes-ghc29a.museum":true,"corvette.museum":true,"costume.museum":true,"countryestate.museum":true,"county.museum":true,"crafts.museum":true,"cranbrook.museum":true,"creation.museum":true,"cultural.museum":true,"culturalcenter.museum":true,"culture.museum":true,"cyber.museum":true,"cymru.museum":true,"dali.museum":true,"dallas.museum":true,"database.museum":true,"ddr.museum":true,"decorativearts.museum":true,"delaware.museum":true,"delmenhorst.museum":true,"denmark.museum":true,"depot.museum":true,"design.museum":true,"detroit.museum":true,"dinosaur.museum":true,"discovery.museum":true,"dolls.museum":true,"donostia.museum":true,"durham.museum":true,"eastafrica.museum":true,"eastcoast.museum":true,"education.museum":true,"educational.museum":true,"egyptian.museum":true,"eisenbahn.museum":true,"elburg.museum":true,"elvendrell.museum":true,"embroidery.museum":true,"encyclopedic.museum":true,"england.museum":true,"entomology.museum":true,"environment.museum":true,"environmentalconservation.museum":true,"epilepsy.museum":true,"essex.museum":true,"estate.museum":true,"ethnology.museum":true,"exeter.museum":true,"exhibition.museum":true,"family.museum":true,"farm.museum":true,"farmequipment.museum":true,"farmers.museum":true,"farmstead.museum":true,"field.museum":true,"figueres.museum":true,"filatelia.museum":true,"film.museum":true,"fineart.museum":true,"finearts.museum":true,"finland.museum":true,"flanders.museum":true,"florida.museum":true,"force.museum":true,"fortmissoula.museum":true,"fortworth.museum":true,"foundation.museum":true,"francaise.museum":true,"frankfurt.museum":true,"franziskaner.museum":true,"freemasonry.museum":true,"freiburg.museum":true,"fribourg.museum":true,"frog.museum":true,"fundacio.museum":true,"furniture.museum":true,"gallery.museum":true,"garden.museum":true,"gateway.museum":true,"geelvinck.museum":true,"gemological.museum":true,"geology.museum":true,"georgia.museum":true,"giessen.museum":true,"glas.museum":true,"glass.museum":true,"gorge.museum":true,"grandrapids.museum":true,"graz.museum":true,"guernsey.museum":true,"halloffame.museum":true,"hamburg.museum":true,"handson.museum":true,"harvestcelebration.museum":true,"hawaii.museum":true,"health.museum":true,"heimatunduhren.museum":true,"hellas.museum":true,"helsinki.museum":true,"hembygdsforbund.museum":true,"heritage.museum":true,"histoire.museum":true,"historical.museum":true,"historicalsociety.museum":true,"historichouses.museum":true,"historisch.museum":true,"historisches.museum":true,"history.museum":true,"historyofscience.museum":true,"horology.museum":true,"house.museum":true,"humanities.museum":true,"illustration.museum":true,"imageandsound.museum":true,"indian.museum":true,"indiana.museum":true,"indianapolis.museum":true,"indianmarket.museum":true,"intelligence.museum":true,"interactive.museum":true,"iraq.museum":true,"iron.museum":true,"isleofman.museum":true,"jamison.museum":true,"jefferson.museum":true,"jerusalem.museum":true,"jewelry.museum":true,"jewish.museum":true,"jewishart.museum":true,"jfk.museum":true,"journalism.museum":true,"judaica.museum":true,"judygarland.museum":true,"juedisches.museum":true,"juif.museum":true,"karate.museum":true,"karikatur.museum":true,"kids.museum":true,"koebenhavn.museum":true,"koeln.museum":true,"kunst.museum":true,"kunstsammlung.museum":true,"kunstunddesign.museum":true,"labor.museum":true,"labour.museum":true,"lajolla.museum":true,"lancashire.museum":true,"landes.museum":true,"lans.museum":true,"xn--lns-qla.museum":true,"larsson.museum":true,"lewismiller.museum":true,"lincoln.museum":true,"linz.museum":true,"living.museum":true,"livinghistory.museum":true,"localhistory.museum":true,"london.museum":true,"losangeles.museum":true,"louvre.museum":true,"loyalist.museum":true,"lucerne.museum":true,"luxembourg.museum":true,"luzern.museum":true,"mad.museum":true,"madrid.museum":true,"mallorca.museum":true,"manchester.museum":true,"mansion.museum":true,"mansions.museum":true,"manx.museum":true,"marburg.museum":true,"maritime.museum":true,"maritimo.museum":true,"maryland.museum":true,"marylhurst.museum":true,"media.museum":true,"medical.museum":true,"medizinhistorisches.museum":true,"meeres.museum":true,"memorial.museum":true,"mesaverde.museum":true,"michigan.museum":true,"midatlantic.museum":true,"military.museum":true,"mill.museum":true,"miners.museum":true,"mining.museum":true,"minnesota.museum":true,"missile.museum":true,"missoula.museum":true,"modern.museum":true,"moma.museum":true,"money.museum":true,"monmouth.museum":true,"monticello.museum":true,"montreal.museum":true,"moscow.museum":true,"motorcycle.museum":true,"muenchen.museum":true,"muenster.museum":true,"mulhouse.museum":true,"muncie.museum":true,"museet.museum":true,"museumcenter.museum":true,"museumvereniging.museum":true,"music.museum":true,"national.museum":true,"nationalfirearms.museum":true,"nationalheritage.museum":true,"nativeamerican.museum":true,"naturalhistory.museum":true,"naturalhistorymuseum.museum":true,"naturalsciences.museum":true,"nature.museum":true,"naturhistorisches.museum":true,"natuurwetenschappen.museum":true,"naumburg.museum":true,"naval.museum":true,"nebraska.museum":true,"neues.museum":true,"newhampshire.museum":true,"newjersey.museum":true,"newmexico.museum":true,"newport.museum":true,"newspaper.museum":true,"newyork.museum":true,"niepce.museum":true,"norfolk.museum":true,"north.museum":true,"nrw.museum":true,"nuernberg.museum":true,"nuremberg.museum":true,"nyc.museum":true,"nyny.museum":true,"oceanographic.museum":true,"oceanographique.museum":true,"omaha.museum":true,"online.museum":true,"ontario.museum":true,"openair.museum":true,"oregon.museum":true,"oregontrail.museum":true,"otago.museum":true,"oxford.museum":true,"pacific.museum":true,"paderborn.museum":true,"palace.museum":true,"paleo.museum":true,"palmsprings.museum":true,"panama.museum":true,"paris.museum":true,"pasadena.museum":true,"pharmacy.museum":true,"philadelphia.museum":true,"philadelphiaarea.museum":true,"philately.museum":true,"phoenix.museum":true,"photography.museum":true,"pilots.museum":true,"pittsburgh.museum":true,"planetarium.museum":true,"plantation.museum":true,"plants.museum":true,"plaza.museum":true,"portal.museum":true,"portland.museum":true,"portlligat.museum":true,"posts-and-telecommunications.museum":true,"preservation.museum":true,"presidio.museum":true,"press.museum":true,"project.museum":true,"public.museum":true,"pubol.museum":true,"quebec.museum":true,"railroad.museum":true,"railway.museum":true,"research.museum":true,"resistance.museum":true,"riodejaneiro.museum":true,"rochester.museum":true,"rockart.museum":true,"roma.museum":true,"russia.museum":true,"saintlouis.museum":true,"salem.museum":true,"salvadordali.museum":true,"salzburg.museum":true,"sandiego.museum":true,"sanfrancisco.museum":true,"santabarbara.museum":true,"santacruz.museum":true,"santafe.museum":true,"saskatchewan.museum":true,"satx.museum":true,"savannahga.museum":true,"schlesisches.museum":true,"schoenbrunn.museum":true,"schokoladen.museum":true,"school.museum":true,"schweiz.museum":true,"science.museum":true,"scienceandhistory.museum":true,"scienceandindustry.museum":true,"sciencecenter.museum":true,"sciencecenters.museum":true,"science-fiction.museum":true,"sciencehistory.museum":true,"sciences.museum":true,"sciencesnaturelles.museum":true,"scotland.museum":true,"seaport.museum":true,"settlement.museum":true,"settlers.museum":true,"shell.museum":true,"sherbrooke.museum":true,"sibenik.museum":true,"silk.museum":true,"ski.museum":true,"skole.museum":true,"society.museum":true,"sologne.museum":true,"soundandvision.museum":true,"southcarolina.museum":true,"southwest.museum":true,"space.museum":true,"spy.museum":true,"square.museum":true,"stadt.museum":true,"stalbans.museum":true,"starnberg.museum":true,"state.museum":true,"stateofdelaware.museum":true,"station.museum":true,"steam.museum":true,"steiermark.museum":true,"stjohn.museum":true,"stockholm.museum":true,"stpetersburg.museum":true,"stuttgart.museum":true,"suisse.museum":true,"surgeonshall.museum":true,"surrey.museum":true,"svizzera.museum":true,"sweden.museum":true,"sydney.museum":true,"tank.museum":true,"tcm.museum":true,"technology.museum":true,"telekommunikation.museum":true,"television.museum":true,"texas.museum":true,"textile.museum":true,"theater.museum":true,"time.museum":true,"timekeeping.museum":true,"topology.museum":true,"torino.museum":true,"touch.museum":true,"town.museum":true,"transport.museum":true,"tree.museum":true,"trolley.museum":true,"trust.museum":true,"trustee.museum":true,"uhren.museum":true,"ulm.museum":true,"undersea.museum":true,"university.museum":true,"usa.museum":true,"usantiques.museum":true,"usarts.museum":true,"uscountryestate.museum":true,"usculture.museum":true,"usdecorativearts.museum":true,"usgarden.museum":true,"ushistory.museum":true,"ushuaia.museum":true,"uslivinghistory.museum":true,"utah.museum":true,"uvic.museum":true,"valley.museum":true,"vantaa.museum":true,"versailles.museum":true,"viking.museum":true,"village.museum":true,"virginia.museum":true,"virtual.museum":true,"virtuel.museum":true,"vlaanderen.museum":true,"volkenkunde.museum":true,"wales.museum":true,"wallonie.museum":true,"war.museum":true,"washingtondc.museum":true,"watchandclock.museum":true,"watch-and-clock.museum":true,"western.museum":true,"westfalen.museum":true,"whaling.museum":true,"wildlife.museum":true,"williamsburg.museum":true,"windmill.museum":true,"workshop.museum":true,"york.museum":true,"yorkshire.museum":true,"yosemite.museum":true,"youth.museum":true,"zoological.museum":true,"zoology.museum":true,"xn--9dbhblg6di.museum":true,"xn--h1aegh.museum":true,"mv":true,"aero.mv":true,"biz.mv":true,"com.mv":true,"coop.mv":true,"edu.mv":true,"gov.mv":true,"info.mv":true,"int.mv":true,"mil.mv":true,"museum.mv":true,"name.mv":true,"net.mv":true,"org.mv":true,"pro.mv":true,"mw":true,"ac.mw":true,"biz.mw":true,"co.mw":true,"com.mw":true,"coop.mw":true,"edu.mw":true,"gov.mw":true,"int.mw":true,"museum.mw":true,"net.mw":true,"org.mw":true,"mx":true,"com.mx":true,"org.mx":true,"gob.mx":true,"edu.mx":true,"net.mx":true,"my":true,"com.my":true,"net.my":true,"org.my":true,"gov.my":true,"edu.my":true,"mil.my":true,"name.my":true,"*.mz":true,"teledata.mz":false,"na":true,"info.na":true,"pro.na":true,"name.na":true,"school.na":true,"or.na":true,"dr.na":true,"us.na":true,"mx.na":true,"ca.na":true,"in.na":true,"cc.na":true,"tv.na":true,"ws.na":true,"mobi.na":true,"co.na":true,"com.na":true,"org.na":true,"name":true,"nc":true,"asso.nc":true,"ne":true,"net":true,"nf":true,"com.nf":true,"net.nf":true,"per.nf":true,"rec.nf":true,"web.nf":true,"arts.nf":true,"firm.nf":true,"info.nf":true,"other.nf":true,"store.nf":true,"ng":true,"com.ng":true,"edu.ng":true,"name.ng":true,"net.ng":true,"org.ng":true,"sch.ng":true,"gov.ng":true,"mil.ng":true,"mobi.ng":true,"*.ni":true,"nl":true,"bv.nl":true,"no":true,"fhs.no":true,"vgs.no":true,"fylkesbibl.no":true,"folkebibl.no":true,"museum.no":true,"idrett.no":true,"priv.no":true,"mil.no":true,"stat.no":true,"dep.no":true,"kommune.no":true,"herad.no":true,"aa.no":true,"ah.no":true,"bu.no":true,"fm.no":true,"hl.no":true,"hm.no":true,"jan-mayen.no":true,"mr.no":true,"nl.no":true,"nt.no":true,"of.no":true,"ol.no":true,"oslo.no":true,"rl.no":true,"sf.no":true,"st.no":true,"svalbard.no":true,"tm.no":true,"tr.no":true,"va.no":true,"vf.no":true,"gs.aa.no":true,"gs.ah.no":true,"gs.bu.no":true,"gs.fm.no":true,"gs.hl.no":true,"gs.hm.no":true,"gs.jan-mayen.no":true,"gs.mr.no":true,"gs.nl.no":true,"gs.nt.no":true,"gs.of.no":true,"gs.ol.no":true,"gs.oslo.no":true,"gs.rl.no":true,"gs.sf.no":true,"gs.st.no":true,"gs.svalbard.no":true,"gs.tm.no":true,"gs.tr.no":true,"gs.va.no":true,"gs.vf.no":true,"akrehamn.no":true,"xn--krehamn-dxa.no":true,"algard.no":true,"xn--lgrd-poac.no":true,"arna.no":true,"brumunddal.no":true,"bryne.no":true,"bronnoysund.no":true,"xn--brnnysund-m8ac.no":true,"drobak.no":true,"xn--drbak-wua.no":true,"egersund.no":true,"fetsund.no":true,"floro.no":true,"xn--flor-jra.no":true,"fredrikstad.no":true,"hokksund.no":true,"honefoss.no":true,"xn--hnefoss-q1a.no":true,"jessheim.no":true,"jorpeland.no":true,"xn--jrpeland-54a.no":true,"kirkenes.no":true,"kopervik.no":true,"krokstadelva.no":true,"langevag.no":true,"xn--langevg-jxa.no":true,"leirvik.no":true,"mjondalen.no":true,"xn--mjndalen-64a.no":true,"mo-i-rana.no":true,"mosjoen.no":true,"xn--mosjen-eya.no":true,"nesoddtangen.no":true,"orkanger.no":true,"osoyro.no":true,"xn--osyro-wua.no":true,"raholt.no":true,"xn--rholt-mra.no":true,"sandnessjoen.no":true,"xn--sandnessjen-ogb.no":true,"skedsmokorset.no":true,"slattum.no":true,"spjelkavik.no":true,"stathelle.no":true,"stavern.no":true,"stjordalshalsen.no":true,"xn--stjrdalshalsen-sqb.no":true,"tananger.no":true,"tranby.no":true,"vossevangen.no":true,"afjord.no":true,"xn--fjord-lra.no":true,"agdenes.no":true,"al.no":true,"xn--l-1fa.no":true,"alesund.no":true,"xn--lesund-hua.no":true,"alstahaug.no":true,"alta.no":true,"xn--lt-liac.no":true,"alaheadju.no":true,"xn--laheadju-7ya.no":true,"alvdal.no":true,"amli.no":true,"xn--mli-tla.no":true,"amot.no":true,"xn--mot-tla.no":true,"andebu.no":true,"andoy.no":true,"xn--andy-ira.no":true,"andasuolo.no":true,"ardal.no":true,"xn--rdal-poa.no":true,"aremark.no":true,"arendal.no":true,"xn--s-1fa.no":true,"aseral.no":true,"xn--seral-lra.no":true,"asker.no":true,"askim.no":true,"askvoll.no":true,"askoy.no":true,"xn--asky-ira.no":true,"asnes.no":true,"xn--snes-poa.no":true,"audnedaln.no":true,"aukra.no":true,"aure.no":true,"aurland.no":true,"aurskog-holand.no":true,"xn--aurskog-hland-jnb.no":true,"austevoll.no":true,"austrheim.no":true,"averoy.no":true,"xn--avery-yua.no":true,"balestrand.no":true,"ballangen.no":true,"balat.no":true,"xn--blt-elab.no":true,"balsfjord.no":true,"bahccavuotna.no":true,"xn--bhccavuotna-k7a.no":true,"bamble.no":true,"bardu.no":true,"beardu.no":true,"beiarn.no":true,"bajddar.no":true,"xn--bjddar-pta.no":true,"baidar.no":true,"xn--bidr-5nac.no":true,"berg.no":true,"bergen.no":true,"berlevag.no":true,"xn--berlevg-jxa.no":true,"bearalvahki.no":true,"xn--bearalvhki-y4a.no":true,"bindal.no":true,"birkenes.no":true,"bjarkoy.no":true,"xn--bjarky-fya.no":true,"bjerkreim.no":true,"bjugn.no":true,"bodo.no":true,"xn--bod-2na.no":true,"badaddja.no":true,"xn--bdddj-mrabd.no":true,"budejju.no":true,"bokn.no":true,"bremanger.no":true,"bronnoy.no":true,"xn--brnny-wuac.no":true,"bygland.no":true,"bykle.no":true,"barum.no":true,"xn--brum-voa.no":true,"bo.telemark.no":true,"xn--b-5ga.telemark.no":true,"bo.nordland.no":true,"xn--b-5ga.nordland.no":true,"bievat.no":true,"xn--bievt-0qa.no":true,"bomlo.no":true,"xn--bmlo-gra.no":true,"batsfjord.no":true,"xn--btsfjord-9za.no":true,"bahcavuotna.no":true,"xn--bhcavuotna-s4a.no":true,"dovre.no":true,"drammen.no":true,"drangedal.no":true,"dyroy.no":true,"xn--dyry-ira.no":true,"donna.no":true,"xn--dnna-gra.no":true,"eid.no":true,"eidfjord.no":true,"eidsberg.no":true,"eidskog.no":true,"eidsvoll.no":true,"eigersund.no":true,"elverum.no":true,"enebakk.no":true,"engerdal.no":true,"etne.no":true,"etnedal.no":true,"evenes.no":true,"evenassi.no":true,"xn--eveni-0qa01ga.no":true,"evje-og-hornnes.no":true,"farsund.no":true,"fauske.no":true,"fuossko.no":true,"fuoisku.no":true,"fedje.no":true,"fet.no":true,"finnoy.no":true,"xn--finny-yua.no":true,"fitjar.no":true,"fjaler.no":true,"fjell.no":true,"flakstad.no":true,"flatanger.no":true,"flekkefjord.no":true,"flesberg.no":true,"flora.no":true,"fla.no":true,"xn--fl-zia.no":true,"folldal.no":true,"forsand.no":true,"fosnes.no":true,"frei.no":true,"frogn.no":true,"froland.no":true,"frosta.no":true,"frana.no":true,"xn--frna-woa.no":true,"froya.no":true,"xn--frya-hra.no":true,"fusa.no":true,"fyresdal.no":true,"forde.no":true,"xn--frde-gra.no":true,"gamvik.no":true,"gangaviika.no":true,"xn--ggaviika-8ya47h.no":true,"gaular.no":true,"gausdal.no":true,"gildeskal.no":true,"xn--gildeskl-g0a.no":true,"giske.no":true,"gjemnes.no":true,"gjerdrum.no":true,"gjerstad.no":true,"gjesdal.no":true,"gjovik.no":true,"xn--gjvik-wua.no":true,"gloppen.no":true,"gol.no":true,"gran.no":true,"grane.no":true,"granvin.no":true,"gratangen.no":true,"grimstad.no":true,"grong.no":true,"kraanghke.no":true,"xn--kranghke-b0a.no":true,"grue.no":true,"gulen.no":true,"hadsel.no":true,"halden.no":true,"halsa.no":true,"hamar.no":true,"hamaroy.no":true,"habmer.no":true,"xn--hbmer-xqa.no":true,"hapmir.no":true,"xn--hpmir-xqa.no":true,"hammerfest.no":true,"hammarfeasta.no":true,"xn--hmmrfeasta-s4ac.no":true,"haram.no":true,"hareid.no":true,"harstad.no":true,"hasvik.no":true,"aknoluokta.no":true,"xn--koluokta-7ya57h.no":true,"hattfjelldal.no":true,"aarborte.no":true,"haugesund.no":true,"hemne.no":true,"hemnes.no":true,"hemsedal.no":true,"heroy.more-og-romsdal.no":true,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":true,"heroy.nordland.no":true,"xn--hery-ira.nordland.no":true,"hitra.no":true,"hjartdal.no":true,"hjelmeland.no":true,"hobol.no":true,"xn--hobl-ira.no":true,"hof.no":true,"hol.no":true,"hole.no":true,"holmestrand.no":true,"holtalen.no":true,"xn--holtlen-hxa.no":true,"hornindal.no":true,"horten.no":true,"hurdal.no":true,"hurum.no":true,"hvaler.no":true,"hyllestad.no":true,"hagebostad.no":true,"xn--hgebostad-g3a.no":true,"hoyanger.no":true,"xn--hyanger-q1a.no":true,"hoylandet.no":true,"xn--hylandet-54a.no":true,"ha.no":true,"xn--h-2fa.no":true,"ibestad.no":true,"inderoy.no":true,"xn--indery-fya.no":true,"iveland.no":true,"jevnaker.no":true,"jondal.no":true,"jolster.no":true,"xn--jlster-bya.no":true,"karasjok.no":true,"karasjohka.no":true,"xn--krjohka-hwab49j.no":true,"karlsoy.no":true,"galsa.no":true,"xn--gls-elac.no":true,"karmoy.no":true,"xn--karmy-yua.no":true,"kautokeino.no":true,"guovdageaidnu.no":true,"klepp.no":true,"klabu.no":true,"xn--klbu-woa.no":true,"kongsberg.no":true,"kongsvinger.no":true,"kragero.no":true,"xn--krager-gya.no":true,"kristiansand.no":true,"kristiansund.no":true,"krodsherad.no":true,"xn--krdsherad-m8a.no":true,"kvalsund.no":true,"rahkkeravju.no":true,"xn--rhkkervju-01af.no":true,"kvam.no":true,"kvinesdal.no":true,"kvinnherad.no":true,"kviteseid.no":true,"kvitsoy.no":true,"xn--kvitsy-fya.no":true,"kvafjord.no":true,"xn--kvfjord-nxa.no":true,"giehtavuoatna.no":true,"kvanangen.no":true,"xn--kvnangen-k0a.no":true,"navuotna.no":true,"xn--nvuotna-hwa.no":true,"kafjord.no":true,"xn--kfjord-iua.no":true,"gaivuotna.no":true,"xn--givuotna-8ya.no":true,"larvik.no":true,"lavangen.no":true,"lavagis.no":true,"loabat.no":true,"xn--loabt-0qa.no":true,"lebesby.no":true,"davvesiida.no":true,"leikanger.no":true,"leirfjord.no":true,"leka.no":true,"leksvik.no":true,"lenvik.no":true,"leangaviika.no":true,"xn--leagaviika-52b.no":true,"lesja.no":true,"levanger.no":true,"lier.no":true,"lierne.no":true,"lillehammer.no":true,"lillesand.no":true,"lindesnes.no":true,"lindas.no":true,"xn--linds-pra.no":true,"lom.no":true,"loppa.no":true,"lahppi.no":true,"xn--lhppi-xqa.no":true,"lund.no":true,"lunner.no":true,"luroy.no":true,"xn--lury-ira.no":true,"luster.no":true,"lyngdal.no":true,"lyngen.no":true,"ivgu.no":true,"lardal.no":true,"lerdal.no":true,"xn--lrdal-sra.no":true,"lodingen.no":true,"xn--ldingen-q1a.no":true,"lorenskog.no":true,"xn--lrenskog-54a.no":true,"loten.no":true,"xn--lten-gra.no":true,"malvik.no":true,"masoy.no":true,"xn--msy-ula0h.no":true,"muosat.no":true,"xn--muost-0qa.no":true,"mandal.no":true,"marker.no":true,"marnardal.no":true,"masfjorden.no":true,"meland.no":true,"meldal.no":true,"melhus.no":true,"meloy.no":true,"xn--mely-ira.no":true,"meraker.no":true,"xn--merker-kua.no":true,"moareke.no":true,"xn--moreke-jua.no":true,"midsund.no":true,"midtre-gauldal.no":true,"modalen.no":true,"modum.no":true,"molde.no":true,"moskenes.no":true,"moss.no":true,"mosvik.no":true,"malselv.no":true,"xn--mlselv-iua.no":true,"malatvuopmi.no":true,"xn--mlatvuopmi-s4a.no":true,"namdalseid.no":true,"aejrie.no":true,"namsos.no":true,"namsskogan.no":true,"naamesjevuemie.no":true,"xn--nmesjevuemie-tcba.no":true,"laakesvuemie.no":true,"nannestad.no":true,"narvik.no":true,"narviika.no":true,"naustdal.no":true,"nedre-eiker.no":true,"nes.akershus.no":true,"nes.buskerud.no":true,"nesna.no":true,"nesodden.no":true,"nesseby.no":true,"unjarga.no":true,"xn--unjrga-rta.no":true,"nesset.no":true,"nissedal.no":true,"nittedal.no":true,"nord-aurdal.no":true,"nord-fron.no":true,"nord-odal.no":true,"norddal.no":true,"nordkapp.no":true,"davvenjarga.no":true,"xn--davvenjrga-y4a.no":true,"nordre-land.no":true,"nordreisa.no":true,"raisa.no":true,"xn--risa-5na.no":true,"nore-og-uvdal.no":true,"notodden.no":true,"naroy.no":true,"xn--nry-yla5g.no":true,"notteroy.no":true,"xn--nttery-byae.no":true,"odda.no":true,"oksnes.no":true,"xn--ksnes-uua.no":true,"oppdal.no":true,"oppegard.no":true,"xn--oppegrd-ixa.no":true,"orkdal.no":true,"orland.no":true,"xn--rland-uua.no":true,"orskog.no":true,"xn--rskog-uua.no":true,"orsta.no":true,"xn--rsta-fra.no":true,"os.hedmark.no":true,"os.hordaland.no":true,"osen.no":true,"osteroy.no":true,"xn--ostery-fya.no":true,"ostre-toten.no":true,"xn--stre-toten-zcb.no":true,"overhalla.no":true,"ovre-eiker.no":true,"xn--vre-eiker-k8a.no":true,"oyer.no":true,"xn--yer-zna.no":true,"oygarden.no":true,"xn--ygarden-p1a.no":true,"oystre-slidre.no":true,"xn--ystre-slidre-ujb.no":true,"porsanger.no":true,"porsangu.no":true,"xn--porsgu-sta26f.no":true,"porsgrunn.no":true,"radoy.no":true,"xn--rady-ira.no":true,"rakkestad.no":true,"rana.no":true,"ruovat.no":true,"randaberg.no":true,"rauma.no":true,"rendalen.no":true,"rennebu.no":true,"rennesoy.no":true,"xn--rennesy-v1a.no":true,"rindal.no":true,"ringebu.no":true,"ringerike.no":true,"ringsaker.no":true,"rissa.no":true,"risor.no":true,"xn--risr-ira.no":true,"roan.no":true,"rollag.no":true,"rygge.no":true,"ralingen.no":true,"xn--rlingen-mxa.no":true,"rodoy.no":true,"xn--rdy-0nab.no":true,"romskog.no":true,"xn--rmskog-bya.no":true,"roros.no":true,"xn--rros-gra.no":true,"rost.no":true,"xn--rst-0na.no":true,"royken.no":true,"xn--ryken-vua.no":true,"royrvik.no":true,"xn--ryrvik-bya.no":true,"rade.no":true,"xn--rde-ula.no":true,"salangen.no":true,"siellak.no":true,"saltdal.no":true,"salat.no":true,"xn--slt-elab.no":true,"xn--slat-5na.no":true,"samnanger.no":true,"sande.more-og-romsdal.no":true,"sande.xn--mre-og-romsdal-qqb.no":true,"sande.vestfold.no":true,"sandefjord.no":true,"sandnes.no":true,"sandoy.no":true,"xn--sandy-yua.no":true,"sarpsborg.no":true,"sauda.no":true,"sauherad.no":true,"sel.no":true,"selbu.no":true,"selje.no":true,"seljord.no":true,"sigdal.no":true,"siljan.no":true,"sirdal.no":true,"skaun.no":true,"skedsmo.no":true,"ski.no":true,"skien.no":true,"skiptvet.no":true,"skjervoy.no":true,"xn--skjervy-v1a.no":true,"skierva.no":true,"xn--skierv-uta.no":true,"skjak.no":true,"xn--skjk-soa.no":true,"skodje.no":true,"skanland.no":true,"xn--sknland-fxa.no":true,"skanit.no":true,"xn--sknit-yqa.no":true,"smola.no":true,"xn--smla-hra.no":true,"snillfjord.no":true,"snasa.no":true,"xn--snsa-roa.no":true,"snoasa.no":true,"snaase.no":true,"xn--snase-nra.no":true,"sogndal.no":true,"sokndal.no":true,"sola.no":true,"solund.no":true,"songdalen.no":true,"sortland.no":true,"spydeberg.no":true,"stange.no":true,"stavanger.no":true,"steigen.no":true,"steinkjer.no":true,"stjordal.no":true,"xn--stjrdal-s1a.no":true,"stokke.no":true,"stor-elvdal.no":true,"stord.no":true,"stordal.no":true,"storfjord.no":true,"omasvuotna.no":true,"strand.no":true,"stranda.no":true,"stryn.no":true,"sula.no":true,"suldal.no":true,"sund.no":true,"sunndal.no":true,"surnadal.no":true,"sveio.no":true,"svelvik.no":true,"sykkylven.no":true,"sogne.no":true,"xn--sgne-gra.no":true,"somna.no":true,"xn--smna-gra.no":true,"sondre-land.no":true,"xn--sndre-land-0cb.no":true,"sor-aurdal.no":true,"xn--sr-aurdal-l8a.no":true,"sor-fron.no":true,"xn--sr-fron-q1a.no":true,"sor-odal.no":true,"xn--sr-odal-q1a.no":true,"sor-varanger.no":true,"xn--sr-varanger-ggb.no":true,"matta-varjjat.no":true,"xn--mtta-vrjjat-k7af.no":true,"sorfold.no":true,"xn--srfold-bya.no":true,"sorreisa.no":true,"xn--srreisa-q1a.no":true,"sorum.no":true,"xn--srum-gra.no":true,"tana.no":true,"deatnu.no":true,"time.no":true,"tingvoll.no":true,"tinn.no":true,"tjeldsund.no":true,"dielddanuorri.no":true,"tjome.no":true,"xn--tjme-hra.no":true,"tokke.no":true,"tolga.no":true,"torsken.no":true,"tranoy.no":true,"xn--trany-yua.no":true,"tromso.no":true,"xn--troms-zua.no":true,"tromsa.no":true,"romsa.no":true,"trondheim.no":true,"troandin.no":true,"trysil.no":true,"trana.no":true,"xn--trna-woa.no":true,"trogstad.no":true,"xn--trgstad-r1a.no":true,"tvedestrand.no":true,"tydal.no":true,"tynset.no":true,"tysfjord.no":true,"divtasvuodna.no":true,"divttasvuotna.no":true,"tysnes.no":true,"tysvar.no":true,"xn--tysvr-vra.no":true,"tonsberg.no":true,"xn--tnsberg-q1a.no":true,"ullensaker.no":true,"ullensvang.no":true,"ulvik.no":true,"utsira.no":true,"vadso.no":true,"xn--vads-jra.no":true,"cahcesuolo.no":true,"xn--hcesuolo-7ya35b.no":true,"vaksdal.no":true,"valle.no":true,"vang.no":true,"vanylven.no":true,"vardo.no":true,"xn--vard-jra.no":true,"varggat.no":true,"xn--vrggt-xqad.no":true,"vefsn.no":true,"vaapste.no":true,"vega.no":true,"vegarshei.no":true,"xn--vegrshei-c0a.no":true,"vennesla.no":true,"verdal.no":true,"verran.no":true,"vestby.no":true,"vestnes.no":true,"vestre-slidre.no":true,"vestre-toten.no":true,"vestvagoy.no":true,"xn--vestvgy-ixa6o.no":true,"vevelstad.no":true,"vik.no":true,"vikna.no":true,"vindafjord.no":true,"volda.no":true,"voss.no":true,"varoy.no":true,"xn--vry-yla5g.no":true,"vagan.no":true,"xn--vgan-qoa.no":true,"voagat.no":true,"vagsoy.no":true,"xn--vgsy-qoa0j.no":true,"vaga.no":true,"xn--vg-yiab.no":true,"valer.ostfold.no":true,"xn--vler-qoa.xn--stfold-9xa.no":true,"valer.hedmark.no":true,"xn--vler-qoa.hedmark.no":true,"*.np":true,"nr":true,"biz.nr":true,"info.nr":true,"gov.nr":true,"edu.nr":true,"org.nr":true,"net.nr":true,"com.nr":true,"nu":true,"nz":true,"ac.nz":true,"co.nz":true,"cri.nz":true,"geek.nz":true,"gen.nz":true,"govt.nz":true,"health.nz":true,"iwi.nz":true,"kiwi.nz":true,"maori.nz":true,"mil.nz":true,"xn--mori-qsa.nz":true,"net.nz":true,"org.nz":true,"parliament.nz":true,"school.nz":true,"om":true,"co.om":true,"com.om":true,"edu.om":true,"gov.om":true,"med.om":true,"museum.om":true,"net.om":true,"org.om":true,"pro.om":true,"org":true,"pa":true,"ac.pa":true,"gob.pa":true,"com.pa":true,"org.pa":true,"sld.pa":true,"edu.pa":true,"net.pa":true,"ing.pa":true,"abo.pa":true,"med.pa":true,"nom.pa":true,"pe":true,"edu.pe":true,"gob.pe":true,"nom.pe":true,"mil.pe":true,"org.pe":true,"com.pe":true,"net.pe":true,"pf":true,"com.pf":true,"org.pf":true,"edu.pf":true,"*.pg":true,"ph":true,"com.ph":true,"net.ph":true,"org.ph":true,"gov.ph":true,"edu.ph":true,"ngo.ph":true,"mil.ph":true,"i.ph":true,"pk":true,"com.pk":true,"net.pk":true,"edu.pk":true,"org.pk":true,"fam.pk":true,"biz.pk":true,"web.pk":true,"gov.pk":true,"gob.pk":true,"gok.pk":true,"gon.pk":true,"gop.pk":true,"gos.pk":true,"info.pk":true,"pl":true,"com.pl":true,"net.pl":true,"org.pl":true,"aid.pl":true,"agro.pl":true,"atm.pl":true,"auto.pl":true,"biz.pl":true,"edu.pl":true,"gmina.pl":true,"gsm.pl":true,"info.pl":true,"mail.pl":true,"miasta.pl":true,"media.pl":true,"mil.pl":true,"nieruchomosci.pl":true,"nom.pl":true,"pc.pl":true,"powiat.pl":true,"priv.pl":true,"realestate.pl":true,"rel.pl":true,"sex.pl":true,"shop.pl":true,"sklep.pl":true,"sos.pl":true,"szkola.pl":true,"targi.pl":true,"tm.pl":true,"tourism.pl":true,"travel.pl":true,"turystyka.pl":true,"gov.pl":true,"ap.gov.pl":true,"ic.gov.pl":true,"is.gov.pl":true,"us.gov.pl":true,"kmpsp.gov.pl":true,"kppsp.gov.pl":true,"kwpsp.gov.pl":true,"psp.gov.pl":true,"wskr.gov.pl":true,"kwp.gov.pl":true,"mw.gov.pl":true,"ug.gov.pl":true,"um.gov.pl":true,"umig.gov.pl":true,"ugim.gov.pl":true,"upow.gov.pl":true,"uw.gov.pl":true,"starostwo.gov.pl":true,"pa.gov.pl":true,"po.gov.pl":true,"psse.gov.pl":true,"pup.gov.pl":true,"rzgw.gov.pl":true,"sa.gov.pl":true,"so.gov.pl":true,"sr.gov.pl":true,"wsa.gov.pl":true,"sko.gov.pl":true,"uzs.gov.pl":true,"wiih.gov.pl":true,"winb.gov.pl":true,"pinb.gov.pl":true,"wios.gov.pl":true,"witd.gov.pl":true,"wzmiuw.gov.pl":true,"piw.gov.pl":true,"wiw.gov.pl":true,"griw.gov.pl":true,"wif.gov.pl":true,"oum.gov.pl":true,"sdn.gov.pl":true,"zp.gov.pl":true,"uppo.gov.pl":true,"mup.gov.pl":true,"wuoz.gov.pl":true,"konsulat.gov.pl":true,"oirm.gov.pl":true,"augustow.pl":true,"babia-gora.pl":true,"bedzin.pl":true,"beskidy.pl":true,"bialowieza.pl":true,"bialystok.pl":true,"bielawa.pl":true,"bieszczady.pl":true,"boleslawiec.pl":true,"bydgoszcz.pl":true,"bytom.pl":true,"cieszyn.pl":true,"czeladz.pl":true,"czest.pl":true,"dlugoleka.pl":true,"elblag.pl":true,"elk.pl":true,"glogow.pl":true,"gniezno.pl":true,"gorlice.pl":true,"grajewo.pl":true,"ilawa.pl":true,"jaworzno.pl":true,"jelenia-gora.pl":true,"jgora.pl":true,"kalisz.pl":true,"kazimierz-dolny.pl":true,"karpacz.pl":true,"kartuzy.pl":true,"kaszuby.pl":true,"katowice.pl":true,"kepno.pl":true,"ketrzyn.pl":true,"klodzko.pl":true,"kobierzyce.pl":true,"kolobrzeg.pl":true,"konin.pl":true,"konskowola.pl":true,"kutno.pl":true,"lapy.pl":true,"lebork.pl":true,"legnica.pl":true,"lezajsk.pl":true,"limanowa.pl":true,"lomza.pl":true,"lowicz.pl":true,"lubin.pl":true,"lukow.pl":true,"malbork.pl":true,"malopolska.pl":true,"mazowsze.pl":true,"mazury.pl":true,"mielec.pl":true,"mielno.pl":true,"mragowo.pl":true,"naklo.pl":true,"nowaruda.pl":true,"nysa.pl":true,"olawa.pl":true,"olecko.pl":true,"olkusz.pl":true,"olsztyn.pl":true,"opoczno.pl":true,"opole.pl":true,"ostroda.pl":true,"ostroleka.pl":true,"ostrowiec.pl":true,"ostrowwlkp.pl":true,"pila.pl":true,"pisz.pl":true,"podhale.pl":true,"podlasie.pl":true,"polkowice.pl":true,"pomorze.pl":true,"pomorskie.pl":true,"prochowice.pl":true,"pruszkow.pl":true,"przeworsk.pl":true,"pulawy.pl":true,"radom.pl":true,"rawa-maz.pl":true,"rybnik.pl":true,"rzeszow.pl":true,"sanok.pl":true,"sejny.pl":true,"slask.pl":true,"slupsk.pl":true,"sosnowiec.pl":true,"stalowa-wola.pl":true,"skoczow.pl":true,"starachowice.pl":true,"stargard.pl":true,"suwalki.pl":true,"swidnica.pl":true,"swiebodzin.pl":true,"swinoujscie.pl":true,"szczecin.pl":true,"szczytno.pl":true,"tarnobrzeg.pl":true,"tgory.pl":true,"turek.pl":true,"tychy.pl":true,"ustka.pl":true,"walbrzych.pl":true,"warmia.pl":true,"warszawa.pl":true,"waw.pl":true,"wegrow.pl":true,"wielun.pl":true,"wlocl.pl":true,"wloclawek.pl":true,"wodzislaw.pl":true,"wolomin.pl":true,"wroclaw.pl":true,"zachpomor.pl":true,"zagan.pl":true,"zarow.pl":true,"zgora.pl":true,"zgorzelec.pl":true,"pm":true,"pn":true,"gov.pn":true,"co.pn":true,"org.pn":true,"edu.pn":true,"net.pn":true,"post":true,"pr":true,"com.pr":true,"net.pr":true,"org.pr":true,"gov.pr":true,"edu.pr":true,"isla.pr":true,"pro.pr":true,"biz.pr":true,"info.pr":true,"name.pr":true,"est.pr":true,"prof.pr":true,"ac.pr":true,"pro":true,"aca.pro":true,"bar.pro":true,"cpa.pro":true,"jur.pro":true,"law.pro":true,"med.pro":true,"eng.pro":true,"ps":true,"edu.ps":true,"gov.ps":true,"sec.ps":true,"plo.ps":true,"com.ps":true,"org.ps":true,"net.ps":true,"pt":true,"net.pt":true,"gov.pt":true,"org.pt":true,"edu.pt":true,"int.pt":true,"publ.pt":true,"com.pt":true,"nome.pt":true,"pw":true,"co.pw":true,"ne.pw":true,"or.pw":true,"ed.pw":true,"go.pw":true,"belau.pw":true,"py":true,"com.py":true,"coop.py":true,"edu.py":true,"gov.py":true,"mil.py":true,"net.py":true,"org.py":true,"qa":true,"com.qa":true,"edu.qa":true,"gov.qa":true,"mil.qa":true,"name.qa":true,"net.qa":true,"org.qa":true,"sch.qa":true,"re":true,"com.re":true,"asso.re":true,"nom.re":true,"ro":true,"com.ro":true,"org.ro":true,"tm.ro":true,"nt.ro":true,"nom.ro":true,"info.ro":true,"rec.ro":true,"arts.ro":true,"firm.ro":true,"store.ro":true,"www.ro":true,"rs":true,"co.rs":true,"org.rs":true,"edu.rs":true,"ac.rs":true,"gov.rs":true,"in.rs":true,"ru":true,"ac.ru":true,"com.ru":true,"edu.ru":true,"int.ru":true,"net.ru":true,"org.ru":true,"pp.ru":true,"adygeya.ru":true,"altai.ru":true,"amur.ru":true,"arkhangelsk.ru":true,"astrakhan.ru":true,"bashkiria.ru":true,"belgorod.ru":true,"bir.ru":true,"bryansk.ru":true,"buryatia.ru":true,"cbg.ru":true,"chel.ru":true,"chelyabinsk.ru":true,"chita.ru":true,"chukotka.ru":true,"chuvashia.ru":true,"dagestan.ru":true,"dudinka.ru":true,"e-burg.ru":true,"grozny.ru":true,"irkutsk.ru":true,"ivanovo.ru":true,"izhevsk.ru":true,"jar.ru":true,"joshkar-ola.ru":true,"kalmykia.ru":true,"kaluga.ru":true,"kamchatka.ru":true,"karelia.ru":true,"kazan.ru":true,"kchr.ru":true,"kemerovo.ru":true,"khabarovsk.ru":true,"khakassia.ru":true,"khv.ru":true,"kirov.ru":true,"koenig.ru":true,"komi.ru":true,"kostroma.ru":true,"krasnoyarsk.ru":true,"kuban.ru":true,"kurgan.ru":true,"kursk.ru":true,"lipetsk.ru":true,"magadan.ru":true,"mari.ru":true,"mari-el.ru":true,"marine.ru":true,"mordovia.ru":true,"msk.ru":true,"murmansk.ru":true,"nalchik.ru":true,"nnov.ru":true,"nov.ru":true,"novosibirsk.ru":true,"nsk.ru":true,"omsk.ru":true,"orenburg.ru":true,"oryol.ru":true,"palana.ru":true,"penza.ru":true,"perm.ru":true,"ptz.ru":true,"rnd.ru":true,"ryazan.ru":true,"sakhalin.ru":true,"samara.ru":true,"saratov.ru":true,"simbirsk.ru":true,"smolensk.ru":true,"spb.ru":true,"stavropol.ru":true,"stv.ru":true,"surgut.ru":true,"tambov.ru":true,"tatarstan.ru":true,"tom.ru":true,"tomsk.ru":true,"tsaritsyn.ru":true,"tsk.ru":true,"tula.ru":true,"tuva.ru":true,"tver.ru":true,"tyumen.ru":true,"udm.ru":true,"udmurtia.ru":true,"ulan-ude.ru":true,"vladikavkaz.ru":true,"vladimir.ru":true,"vladivostok.ru":true,"volgograd.ru":true,"vologda.ru":true,"voronezh.ru":true,"vrn.ru":true,"vyatka.ru":true,"yakutia.ru":true,"yamal.ru":true,"yaroslavl.ru":true,"yekaterinburg.ru":true,"yuzhno-sakhalinsk.ru":true,"amursk.ru":true,"baikal.ru":true,"cmw.ru":true,"fareast.ru":true,"jamal.ru":true,"kms.ru":true,"k-uralsk.ru":true,"kustanai.ru":true,"kuzbass.ru":true,"magnitka.ru":true,"mytis.ru":true,"nakhodka.ru":true,"nkz.ru":true,"norilsk.ru":true,"oskol.ru":true,"pyatigorsk.ru":true,"rubtsovsk.ru":true,"snz.ru":true,"syzran.ru":true,"vdonsk.ru":true,"zgrad.ru":true,"gov.ru":true,"mil.ru":true,"test.ru":true,"rw":true,"gov.rw":true,"net.rw":true,"edu.rw":true,"ac.rw":true,"com.rw":true,"co.rw":true,"int.rw":true,"mil.rw":true,"gouv.rw":true,"sa":true,"com.sa":true,"net.sa":true,"org.sa":true,"gov.sa":true,"med.sa":true,"pub.sa":true,"edu.sa":true,"sch.sa":true,"sb":true,"com.sb":true,"edu.sb":true,"gov.sb":true,"net.sb":true,"org.sb":true,"sc":true,"com.sc":true,"gov.sc":true,"net.sc":true,"org.sc":true,"edu.sc":true,"sd":true,"com.sd":true,"net.sd":true,"org.sd":true,"edu.sd":true,"med.sd":true,"tv.sd":true,"gov.sd":true,"info.sd":true,"se":true,"a.se":true,"ac.se":true,"b.se":true,"bd.se":true,"brand.se":true,"c.se":true,"d.se":true,"e.se":true,"f.se":true,"fh.se":true,"fhsk.se":true,"fhv.se":true,"g.se":true,"h.se":true,"i.se":true,"k.se":true,"komforb.se":true,"kommunalforbund.se":true,"komvux.se":true,"l.se":true,"lanbib.se":true,"m.se":true,"n.se":true,"naturbruksgymn.se":true,"o.se":true,"org.se":true,"p.se":true,"parti.se":true,"pp.se":true,"press.se":true,"r.se":true,"s.se":true,"t.se":true,"tm.se":true,"u.se":true,"w.se":true,"x.se":true,"y.se":true,"z.se":true,"sg":true,"com.sg":true,"net.sg":true,"org.sg":true,"gov.sg":true,"edu.sg":true,"per.sg":true,"sh":true,"com.sh":true,"net.sh":true,"gov.sh":true,"org.sh":true,"mil.sh":true,"si":true,"sj":true,"sk":true,"sl":true,"com.sl":true,"net.sl":true,"edu.sl":true,"gov.sl":true,"org.sl":true,"sm":true,"sn":true,"art.sn":true,"com.sn":true,"edu.sn":true,"gouv.sn":true,"org.sn":true,"perso.sn":true,"univ.sn":true,"so":true,"com.so":true,"net.so":true,"org.so":true,"sr":true,"st":true,"co.st":true,"com.st":true,"consulado.st":true,"edu.st":true,"embaixada.st":true,"gov.st":true,"mil.st":true,"net.st":true,"org.st":true,"principe.st":true,"saotome.st":true,"store.st":true,"su":true,"adygeya.su":true,"arkhangelsk.su":true,"balashov.su":true,"bashkiria.su":true,"bryansk.su":true,"dagestan.su":true,"grozny.su":true,"ivanovo.su":true,"kalmykia.su":true,"kaluga.su":true,"karelia.su":true,"khakassia.su":true,"krasnodar.su":true,"kurgan.su":true,"lenug.su":true,"mordovia.su":true,"msk.su":true,"murmansk.su":true,"nalchik.su":true,"nov.su":true,"obninsk.su":true,"penza.su":true,"pokrovsk.su":true,"sochi.su":true,"spb.su":true,"togliatti.su":true,"troitsk.su":true,"tula.su":true,"tuva.su":true,"vladikavkaz.su":true,"vladimir.su":true,"vologda.su":true,"sv":true,"com.sv":true,"edu.sv":true,"gob.sv":true,"org.sv":true,"red.sv":true,"sx":true,"gov.sx":true,"sy":true,"edu.sy":true,"gov.sy":true,"net.sy":true,"mil.sy":true,"com.sy":true,"org.sy":true,"sz":true,"co.sz":true,"ac.sz":true,"org.sz":true,"tc":true,"td":true,"tel":true,"tf":true,"tg":true,"th":true,"ac.th":true,"co.th":true,"go.th":true,"in.th":true,"mi.th":true,"net.th":true,"or.th":true,"tj":true,"ac.tj":true,"biz.tj":true,"co.tj":true,"com.tj":true,"edu.tj":true,"go.tj":true,"gov.tj":true,"int.tj":true,"mil.tj":true,"name.tj":true,"net.tj":true,"nic.tj":true,"org.tj":true,"test.tj":true,"web.tj":true,"tk":true,"tl":true,"gov.tl":true,"tm":true,"com.tm":true,"co.tm":true,"org.tm":true,"net.tm":true,"nom.tm":true,"gov.tm":true,"mil.tm":true,"edu.tm":true,"tn":true,"com.tn":true,"ens.tn":true,"fin.tn":true,"gov.tn":true,"ind.tn":true,"intl.tn":true,"nat.tn":true,"net.tn":true,"org.tn":true,"info.tn":true,"perso.tn":true,"tourism.tn":true,"edunet.tn":true,"rnrt.tn":true,"rns.tn":true,"rnu.tn":true,"mincom.tn":true,"agrinet.tn":true,"defense.tn":true,"turen.tn":true,"to":true,"com.to":true,"gov.to":true,"net.to":true,"org.to":true,"edu.to":true,"mil.to":true,"tp":true,"tr":true,"com.tr":true,"info.tr":true,"biz.tr":true,"net.tr":true,"org.tr":true,"web.tr":true,"gen.tr":true,"tv.tr":true,"av.tr":true,"dr.tr":true,"bbs.tr":true,"name.tr":true,"tel.tr":true,"gov.tr":true,"bel.tr":true,"pol.tr":true,"mil.tr":true,"k12.tr":true,"edu.tr":true,"kep.tr":true,"nc.tr":true,"gov.nc.tr":true,"travel":true,"tt":true,"co.tt":true,"com.tt":true,"org.tt":true,"net.tt":true,"biz.tt":true,"info.tt":true,"pro.tt":true,"int.tt":true,"coop.tt":true,"jobs.tt":true,"mobi.tt":true,"travel.tt":true,"museum.tt":true,"aero.tt":true,"name.tt":true,"gov.tt":true,"edu.tt":true,"tv":true,"tw":true,"edu.tw":true,"gov.tw":true,"mil.tw":true,"com.tw":true,"net.tw":true,"org.tw":true,"idv.tw":true,"game.tw":true,"ebiz.tw":true,"club.tw":true,"xn--zf0ao64a.tw":true,"xn--uc0atv.tw":true,"xn--czrw28b.tw":true,"tz":true,"ac.tz":true,"co.tz":true,"go.tz":true,"hotel.tz":true,"info.tz":true,"me.tz":true,"mil.tz":true,"mobi.tz":true,"ne.tz":true,"or.tz":true,"sc.tz":true,"tv.tz":true,"ua":true,"com.ua":true,"edu.ua":true,"gov.ua":true,"in.ua":true,"net.ua":true,"org.ua":true,"cherkassy.ua":true,"cherkasy.ua":true,"chernigov.ua":true,"chernihiv.ua":true,"chernivtsi.ua":true,"chernovtsy.ua":true,"ck.ua":true,"cn.ua":true,"cr.ua":true,"crimea.ua":true,"cv.ua":true,"dn.ua":true,"dnepropetrovsk.ua":true,"dnipropetrovsk.ua":true,"dominic.ua":true,"donetsk.ua":true,"dp.ua":true,"if.ua":true,"ivano-frankivsk.ua":true,"kh.ua":true,"kharkiv.ua":true,"kharkov.ua":true,"kherson.ua":true,"khmelnitskiy.ua":true,"khmelnytskyi.ua":true,"kiev.ua":true,"kirovograd.ua":true,"km.ua":true,"kr.ua":true,"krym.ua":true,"ks.ua":true,"kv.ua":true,"kyiv.ua":true,"lg.ua":true,"lt.ua":true,"lugansk.ua":true,"lutsk.ua":true,"lv.ua":true,"lviv.ua":true,"mk.ua":true,"mykolaiv.ua":true,"nikolaev.ua":true,"od.ua":true,"odesa.ua":true,"odessa.ua":true,"pl.ua":true,"poltava.ua":true,"rivne.ua":true,"rovno.ua":true,"rv.ua":true,"sb.ua":true,"sebastopol.ua":true,"sevastopol.ua":true,"sm.ua":true,"sumy.ua":true,"te.ua":true,"ternopil.ua":true,"uz.ua":true,"uzhgorod.ua":true,"vinnica.ua":true,"vinnytsia.ua":true,"vn.ua":true,"volyn.ua":true,"yalta.ua":true,"zaporizhzhe.ua":true,"zaporizhzhia.ua":true,"zhitomir.ua":true,"zhytomyr.ua":true,"zp.ua":true,"zt.ua":true,"ug":true,"co.ug":true,"or.ug":true,"ac.ug":true,"sc.ug":true,"go.ug":true,"ne.ug":true,"com.ug":true,"org.ug":true,"uk":true,"ac.uk":true,"co.uk":true,"gov.uk":true,"ltd.uk":true,"me.uk":true,"net.uk":true,"nhs.uk":true,"org.uk":true,"plc.uk":true,"police.uk":true,"*.sch.uk":true,"us":true,"dni.us":true,"fed.us":true,"isa.us":true,"kids.us":true,"nsn.us":true,"ak.us":true,"al.us":true,"ar.us":true,"as.us":true,"az.us":true,"ca.us":true,"co.us":true,"ct.us":true,"dc.us":true,"de.us":true,"fl.us":true,"ga.us":true,"gu.us":true,"hi.us":true,"ia.us":true,"id.us":true,"il.us":true,"in.us":true,"ks.us":true,"ky.us":true,"la.us":true,"ma.us":true,"md.us":true,"me.us":true,"mi.us":true,"mn.us":true,"mo.us":true,"ms.us":true,"mt.us":true,"nc.us":true,"nd.us":true,"ne.us":true,"nh.us":true,"nj.us":true,"nm.us":true,"nv.us":true,"ny.us":true,"oh.us":true,"ok.us":true,"or.us":true,"pa.us":true,"pr.us":true,"ri.us":true,"sc.us":true,"sd.us":true,"tn.us":true,"tx.us":true,"ut.us":true,"vi.us":true,"vt.us":true,"va.us":true,"wa.us":true,"wi.us":true,"wv.us":true,"wy.us":true,"k12.ak.us":true,"k12.al.us":true,"k12.ar.us":true,"k12.as.us":true,"k12.az.us":true,"k12.ca.us":true,"k12.co.us":true,"k12.ct.us":true,"k12.dc.us":true,"k12.de.us":true,"k12.fl.us":true,"k12.ga.us":true,"k12.gu.us":true,"k12.ia.us":true,"k12.id.us":true,"k12.il.us":true,"k12.in.us":true,"k12.ks.us":true,"k12.ky.us":true,"k12.la.us":true,"k12.ma.us":true,"k12.md.us":true,"k12.me.us":true,"k12.mi.us":true,"k12.mn.us":true,"k12.mo.us":true,"k12.ms.us":true,"k12.mt.us":true,"k12.nc.us":true,"k12.ne.us":true,"k12.nh.us":true,"k12.nj.us":true,"k12.nm.us":true,"k12.nv.us":true,"k12.ny.us":true,"k12.oh.us":true,"k12.ok.us":true,"k12.or.us":true,"k12.pa.us":true,"k12.pr.us":true,"k12.ri.us":true,"k12.sc.us":true,"k12.tn.us":true,"k12.tx.us":true,"k12.ut.us":true,"k12.vi.us":true,"k12.vt.us":true,"k12.va.us":true,"k12.wa.us":true,"k12.wi.us":true,"k12.wy.us":true,"cc.ak.us":true,"cc.al.us":true,"cc.ar.us":true,"cc.as.us":true,"cc.az.us":true,"cc.ca.us":true,"cc.co.us":true,"cc.ct.us":true,"cc.dc.us":true,"cc.de.us":true,"cc.fl.us":true,"cc.ga.us":true,"cc.gu.us":true,"cc.hi.us":true,"cc.ia.us":true,"cc.id.us":true,"cc.il.us":true,"cc.in.us":true,"cc.ks.us":true,"cc.ky.us":true,"cc.la.us":true,"cc.ma.us":true,"cc.md.us":true,"cc.me.us":true,"cc.mi.us":true,"cc.mn.us":true,"cc.mo.us":true,"cc.ms.us":true,"cc.mt.us":true,"cc.nc.us":true,"cc.nd.us":true,"cc.ne.us":true,"cc.nh.us":true,"cc.nj.us":true,"cc.nm.us":true,"cc.nv.us":true,"cc.ny.us":true,"cc.oh.us":true,"cc.ok.us":true,"cc.or.us":true,"cc.pa.us":true,"cc.pr.us":true,"cc.ri.us":true,"cc.sc.us":true,"cc.sd.us":true,"cc.tn.us":true,"cc.tx.us":true,"cc.ut.us":true,"cc.vi.us":true,"cc.vt.us":true,"cc.va.us":true,"cc.wa.us":true,"cc.wi.us":true,"cc.wv.us":true,"cc.wy.us":true,"lib.ak.us":true,"lib.al.us":true,"lib.ar.us":true,"lib.as.us":true,"lib.az.us":true,"lib.ca.us":true,"lib.co.us":true,"lib.ct.us":true,"lib.dc.us":true,"lib.de.us":true,"lib.fl.us":true,"lib.ga.us":true,"lib.gu.us":true,"lib.hi.us":true,"lib.ia.us":true,"lib.id.us":true,"lib.il.us":true,"lib.in.us":true,"lib.ks.us":true,"lib.ky.us":true,"lib.la.us":true,"lib.ma.us":true,"lib.md.us":true,"lib.me.us":true,"lib.mi.us":true,"lib.mn.us":true,"lib.mo.us":true,"lib.ms.us":true,"lib.mt.us":true,"lib.nc.us":true,"lib.nd.us":true,"lib.ne.us":true,"lib.nh.us":true,"lib.nj.us":true,"lib.nm.us":true,"lib.nv.us":true,"lib.ny.us":true,"lib.oh.us":true,"lib.ok.us":true,"lib.or.us":true,"lib.pa.us":true,"lib.pr.us":true,"lib.ri.us":true,"lib.sc.us":true,"lib.sd.us":true,"lib.tn.us":true,"lib.tx.us":true,"lib.ut.us":true,"lib.vi.us":true,"lib.vt.us":true,"lib.va.us":true,"lib.wa.us":true,"lib.wi.us":true,"lib.wy.us":true,"pvt.k12.ma.us":true,"chtr.k12.ma.us":true,"paroch.k12.ma.us":true,"uy":true,"com.uy":true,"edu.uy":true,"gub.uy":true,"mil.uy":true,"net.uy":true,"org.uy":true,"uz":true,"co.uz":true,"com.uz":true,"net.uz":true,"org.uz":true,"va":true,"vc":true,"com.vc":true,"net.vc":true,"org.vc":true,"gov.vc":true,"mil.vc":true,"edu.vc":true,"ve":true,"arts.ve":true,"co.ve":true,"com.ve":true,"e12.ve":true,"edu.ve":true,"firm.ve":true,"gob.ve":true,"gov.ve":true,"info.ve":true,"int.ve":true,"mil.ve":true,"net.ve":true,"org.ve":true,"rec.ve":true,"store.ve":true,"tec.ve":true,"web.ve":true,"vg":true,"vi":true,"co.vi":true,"com.vi":true,"k12.vi":true,"net.vi":true,"org.vi":true,"vn":true,"com.vn":true,"net.vn":true,"org.vn":true,"edu.vn":true,"gov.vn":true,"int.vn":true,"ac.vn":true,"biz.vn":true,"info.vn":true,"name.vn":true,"pro.vn":true,"health.vn":true,"vu":true,"com.vu":true,"edu.vu":true,"net.vu":true,"org.vu":true,"wf":true,"ws":true,"com.ws":true,"net.ws":true,"org.ws":true,"gov.ws":true,"edu.ws":true,"yt":true,"xn--mgbaam7a8h":true,"xn--y9a3aq":true,"xn--54b7fta0cc":true,"xn--90ais":true,"xn--fiqs8s":true,"xn--fiqz9s":true,"xn--lgbbat1ad8j":true,"xn--wgbh1c":true,"xn--node":true,"xn--qxam":true,"xn--j6w193g":true,"xn--h2brj9c":true,"xn--mgbbh1a71e":true,"xn--fpcrj9c3d":true,"xn--gecrj9c":true,"xn--s9brj9c":true,"xn--45brj9c":true,"xn--xkc2dl3a5ee0h":true,"xn--mgba3a4f16a":true,"xn--mgba3a4fra":true,"xn--mgbtx2b":true,"xn--mgbayh7gpa":true,"xn--3e0b707e":true,"xn--80ao21a":true,"xn--fzc2c9e2c":true,"xn--xkc2al3hye2a":true,"xn--mgbc0a9azcg":true,"xn--d1alf":true,"xn--l1acc":true,"xn--mix891f":true,"xn--mix082f":true,"xn--mgbx4cd0ab":true,"xn--mgb9awbf":true,"xn--mgbai9azgqp6j":true,"xn--mgbai9a5eva00b":true,"xn--ygbi2ammx":true,"xn--90a3ac":true,"xn--o1ac.xn--90a3ac":true,"xn--c1avg.xn--90a3ac":true,"xn--90azh.xn--90a3ac":true,"xn--d1at.xn--90a3ac":true,"xn--o1ach.xn--90a3ac":true,"xn--80au.xn--90a3ac":true,"xn--p1ai":true,"xn--wgbl6a":true,"xn--mgberp4a5d4ar":true,"xn--mgberp4a5d4a87g":true,"xn--mgbqly7c0a67fbc":true,"xn--mgbqly7cvafr":true,"xn--mgbpl2fh":true,"xn--yfro4i67o":true,"xn--clchc0ea0b2g2a9gcd":true,"xn--ogbpf8fl":true,"xn--mgbtf8fl":true,"xn--o3cw4h":true,"xn--pgbs0dh":true,"xn--kpry57d":true,"xn--kprw13d":true,"xn--nnx388a":true,"xn--j1amh":true,"xn--mgb2ddes":true,"xxx":true,"*.ye":true,"ac.za":true,"agrica.za":true,"alt.za":true,"co.za":true,"edu.za":true,"gov.za":true,"grondar.za":true,"law.za":true,"mil.za":true,"net.za":true,"ngo.za":true,"nis.za":true,"nom.za":true,"org.za":true,"school.za":true,"tm.za":true,"web.za":true,"*.zm":true,"*.zw":true,"aaa":true,"aarp":true,"abarth":true,"abb":true,"abbott":true,"abbvie":true,"abc":true,"able":true,"abogado":true,"abudhabi":true,"academy":true,"accenture":true,"accountant":true,"accountants":true,"aco":true,"active":true,"actor":true,"adac":true,"ads":true,"adult":true,"aeg":true,"aetna":true,"afamilycompany":true,"afl":true,"africa":true,"africamagic":true,"agakhan":true,"agency":true,"aig":true,"aigo":true,"airbus":true,"airforce":true,"airtel":true,"akdn":true,"alfaromeo":true,"alibaba":true,"alipay":true,"allfinanz":true,"allstate":true,"ally":true,"alsace":true,"alstom":true,"americanexpress":true,"americanfamily":true,"amex":true,"amfam":true,"amica":true,"amsterdam":true,"analytics":true,"android":true,"anquan":true,"anz":true,"aol":true,"apartments":true,"app":true,"apple":true,"aquarelle":true,"aramco":true,"archi":true,"army":true,"arte":true,"asda":true,"associates":true,"athleta":true,"attorney":true,"auction":true,"audi":true,"audible":true,"audio":true,"auspost":true,"author":true,"auto":true,"autos":true,"avianca":true,"aws":true,"axa":true,"azure":true,"baby":true,"baidu":true,"banamex":true,"bananarepublic":true,"band":true,"bank":true,"bar":true,"barcelona":true,"barclaycard":true,"barclays":true,"barefoot":true,"bargains":true,"basketball":true,"bauhaus":true,"bayern":true,"bbc":true,"bbt":true,"bbva":true,"bcg":true,"bcn":true,"beats":true,"beer":true,"bentley":true,"berlin":true,"best":true,"bestbuy":true,"bet":true,"bharti":true,"bible":true,"bid":true,"bike":true,"bing":true,"bingo":true,"bio":true,"black":true,"blackfriday":true,"blanco":true,"blockbuster":true,"blog":true,"bloomberg":true,"blue":true,"bms":true,"bmw":true,"bnl":true,"bnpparibas":true,"boats":true,"boehringer":true,"bofa":true,"bom":true,"bond":true,"boo":true,"book":true,"booking":true,"boots":true,"bosch":true,"bostik":true,"bot":true,"boutique":true,"bradesco":true,"bridgestone":true,"broadway":true,"broker":true,"brother":true,"brussels":true,"budapest":true,"bugatti":true,"build":true,"builders":true,"business":true,"buy":true,"buzz":true,"bzh":true,"cab":true,"cafe":true,"cal":true,"call":true,"calvinklein":true,"camera":true,"camp":true,"cancerresearch":true,"canon":true,"capetown":true,"capital":true,"capitalone":true,"car":true,"caravan":true,"cards":true,"care":true,"career":true,"careers":true,"cars":true,"cartier":true,"casa":true,"case":true,"caseih":true,"cash":true,"casino":true,"catering":true,"cba":true,"cbn":true,"cbre":true,"cbs":true,"ceb":true,"center":true,"ceo":true,"cern":true,"cfa":true,"cfd":true,"chanel":true,"channel":true,"chase":true,"chat":true,"cheap":true,"chintai":true,"chloe":true,"christmas":true,"chrome":true,"chrysler":true,"church":true,"cipriani":true,"circle":true,"cisco":true,"citadel":true,"citi":true,"citic":true,"city":true,"cityeats":true,"claims":true,"cleaning":true,"click":true,"clinic":true,"clothing":true,"cloud":true,"club":true,"clubmed":true,"coach":true,"codes":true,"coffee":true,"college":true,"cologne":true,"comcast":true,"commbank":true,"community":true,"company":true,"computer":true,"comsec":true,"condos":true,"construction":true,"consulting":true,"contact":true,"contractors":true,"cooking":true,"cookingchannel":true,"cool":true,"corsica":true,"country":true,"coupon":true,"coupons":true,"courses":true,"credit":true,"creditcard":true,"creditunion":true,"cricket":true,"crown":true,"crs":true,"cruises":true,"csc":true,"cuisinella":true,"cymru":true,"cyou":true,"dabur":true,"dad":true,"dance":true,"date":true,"dating":true,"datsun":true,"day":true,"dclk":true,"dds":true,"deal":true,"dealer":true,"deals":true,"degree":true,"delivery":true,"dell":true,"deloitte":true,"delta":true,"democrat":true,"dental":true,"dentist":true,"desi":true,"design":true,"dev":true,"dhl":true,"diamonds":true,"diet":true,"digital":true,"direct":true,"directory":true,"discount":true,"discover":true,"dish":true,"dnp":true,"docs":true,"dodge":true,"dog":true,"doha":true,"domains":true,"doosan":true,"dot":true,"download":true,"drive":true,"dstv":true,"dtv":true,"dubai":true,"duck":true,"dunlop":true,"duns":true,"dupont":true,"durban":true,"dvag":true,"dwg":true,"earth":true,"eat":true,"edeka":true,"education":true,"email":true,"emerck":true,"emerson":true,"energy":true,"engineer":true,"engineering":true,"enterprises":true,"epost":true,"epson":true,"equipment":true,"ericsson":true,"erni":true,"esq":true,"estate":true,"esurance":true,"etisalat":true,"eurovision":true,"eus":true,"events":true,"everbank":true,"exchange":true,"expert":true,"exposed":true,"express":true,"extraspace":true,"fage":true,"fail":true,"fairwinds":true,"faith":true,"family":true,"fan":true,"fans":true,"farm":true,"farmers":true,"fashion":true,"fast":true,"fedex":true,"feedback":true,"ferrari":true,"ferrero":true,"fiat":true,"fidelity":true,"fido":true,"film":true,"final":true,"finance":true,"financial":true,"fire":true,"firestone":true,"firmdale":true,"fish":true,"fishing":true,"fit":true,"fitness":true,"flickr":true,"flights":true,"flir":true,"florist":true,"flowers":true,"flsmidth":true,"fly":true,"foo":true,"foodnetwork":true,"football":true,"ford":true,"forex":true,"forsale":true,"forum":true,"foundation":true,"fox":true,"fresenius":true,"frl":true,"frogans":true,"frontdoor":true,"frontier":true,"ftr":true,"fujitsu":true,"fujixerox":true,"fund":true,"furniture":true,"futbol":true,"fyi":true,"gal":true,"gallery":true,"gallo":true,"gallup":true,"game":true,"games":true,"gap":true,"garden":true,"gbiz":true,"gdn":true,"gea":true,"gent":true,"genting":true,"george":true,"ggee":true,"gift":true,"gifts":true,"gives":true,"giving":true,"glade":true,"glass":true,"gle":true,"global":true,"globo":true,"gmail":true,"gmo":true,"gmx":true,"godaddy":true,"gold":true,"goldpoint":true,"golf":true,"goo":true,"goodhands":true,"goodyear":true,"goog":true,"google":true,"gop":true,"got":true,"gotv":true,"grainger":true,"graphics":true,"gratis":true,"green":true,"gripe":true,"group":true,"guardian":true,"gucci":true,"guge":true,"guide":true,"guitars":true,"guru":true,"hamburg":true,"hangout":true,"haus":true,"hbo":true,"hdfc":true,"hdfcbank":true,"health":true,"healthcare":true,"help":true,"helsinki":true,"here":true,"hermes":true,"hgtv":true,"hiphop":true,"hisamitsu":true,"hitachi":true,"hiv":true,"hkt":true,"hockey":true,"holdings":true,"holiday":true,"homedepot":true,"homegoods":true,"homes":true,"homesense":true,"honda":true,"honeywell":true,"horse":true,"host":true,"hosting":true,"hot":true,"hoteles":true,"hotmail":true,"house":true,"how":true,"hsbc":true,"htc":true,"hughes":true,"hyatt":true,"hyundai":true,"ibm":true,"icbc":true,"ice":true,"icu":true,"ieee":true,"ifm":true,"iinet":true,"ikano":true,"imamat":true,"imdb":true,"immo":true,"immobilien":true,"industries":true,"infiniti":true,"ing":true,"ink":true,"institute":true,"insurance":true,"insure":true,"intel":true,"international":true,"intuit":true,"investments":true,"ipiranga":true,"irish":true,"iselect":true,"ismaili":true,"ist":true,"istanbul":true,"itau":true,"itv":true,"iveco":true,"iwc":true,"jaguar":true,"java":true,"jcb":true,"jcp":true,"jeep":true,"jetzt":true,"jewelry":true,"jio":true,"jlc":true,"jll":true,"jmp":true,"jnj":true,"joburg":true,"jot":true,"joy":true,"jpmorgan":true,"jprs":true,"juegos":true,"juniper":true,"kaufen":true,"kddi":true,"kerryhotels":true,"kerrylogistics":true,"kerryproperties":true,"kfh":true,"kia":true,"kim":true,"kinder":true,"kindle":true,"kitchen":true,"kiwi":true,"koeln":true,"komatsu":true,"kosher":true,"kpmg":true,"kpn":true,"krd":true,"kred":true,"kuokgroup":true,"kyknet":true,"kyoto":true,"lacaixa":true,"ladbrokes":true,"lamborghini":true,"lancaster":true,"lancia":true,"lancome":true,"land":true,"landrover":true,"lanxess":true,"lasalle":true,"lat":true,"latino":true,"latrobe":true,"law":true,"lawyer":true,"lds":true,"lease":true,"leclerc":true,"lefrak":true,"legal":true,"lego":true,"lexus":true,"lgbt":true,"liaison":true,"lidl":true,"life":true,"lifeinsurance":true,"lifestyle":true,"lighting":true,"like":true,"lilly":true,"limited":true,"limo":true,"lincoln":true,"linde":true,"link":true,"lipsy":true,"live":true,"living":true,"lixil":true,"loan":true,"loans":true,"locker":true,"locus":true,"loft":true,"lol":true,"london":true,"lotte":true,"lotto":true,"love":true,"lpl":true,"lplfinancial":true,"ltd":true,"ltda":true,"lundbeck":true,"lupin":true,"luxe":true,"luxury":true,"macys":true,"madrid":true,"maif":true,"maison":true,"makeup":true,"man":true,"management":true,"mango":true,"market":true,"marketing":true,"markets":true,"marriott":true,"marshalls":true,"maserati":true,"mattel":true,"mba":true,"mcd":true,"mcdonalds":true,"mckinsey":true,"med":true,"media":true,"meet":true,"melbourne":true,"meme":true,"memorial":true,"men":true,"menu":true,"meo":true,"metlife":true,"miami":true,"microsoft":true,"mini":true,"mint":true,"mit":true,"mitsubishi":true,"mlb":true,"mls":true,"mma":true,"mnet":true,"mobily":true,"moda":true,"moe":true,"moi":true,"mom":true,"monash":true,"money":true,"monster":true,"montblanc":true,"mopar":true,"mormon":true,"mortgage":true,"moscow":true,"moto":true,"motorcycles":true,"mov":true,"movie":true,"movistar":true,"msd":true,"mtn":true,"mtpc":true,"mtr":true,"multichoice":true,"mutual":true,"mutuelle":true,"mzansimagic":true,"nab":true,"nadex":true,"nagoya":true,"naspers":true,"nationwide":true,"natura":true,"navy":true,"nba":true,"nec":true,"netbank":true,"netflix":true,"network":true,"neustar":true,"new":true,"newholland":true,"news":true,"next":true,"nextdirect":true,"nexus":true,"nfl":true,"ngo":true,"nhk":true,"nico":true,"nike":true,"nikon":true,"ninja":true,"nissan":true,"nokia":true,"northwesternmutual":true,"norton":true,"now":true,"nowruz":true,"nowtv":true,"nra":true,"nrw":true,"ntt":true,"nyc":true,"obi":true,"observer":true,"off":true,"office":true,"okinawa":true,"olayan":true,"olayangroup":true,"oldnavy":true,"ollo":true,"omega":true,"one":true,"ong":true,"onl":true,"online":true,"onyourside":true,"ooo":true,"open":true,"oracle":true,"orange":true,"organic":true,"orientexpress":true,"osaka":true,"otsuka":true,"ott":true,"ovh":true,"page":true,"pamperedchef":true,"panasonic":true,"panerai":true,"paris":true,"pars":true,"partners":true,"parts":true,"party":true,"passagens":true,"pay":true,"payu":true,"pccw":true,"pet":true,"pfizer":true,"pharmacy":true,"philips":true,"photo":true,"photography":true,"photos":true,"physio":true,"piaget":true,"pics":true,"pictet":true,"pictures":true,"pid":true,"pin":true,"ping":true,"pink":true,"pioneer":true,"pizza":true,"place":true,"play":true,"playstation":true,"plumbing":true,"plus":true,"pnc":true,"pohl":true,"poker":true,"politie":true,"porn":true,"pramerica":true,"praxi":true,"press":true,"prime":true,"prod":true,"productions":true,"prof":true,"progressive":true,"promo":true,"properties":true,"property":true,"protection":true,"pru":true,"prudential":true,"pub":true,"qpon":true,"quebec":true,"quest":true,"qvc":true,"racing":true,"raid":true,"read":true,"realestate":true,"realtor":true,"realty":true,"recipes":true,"red":true,"redstone":true,"redumbrella":true,"rehab":true,"reise":true,"reisen":true,"reit":true,"reliance":true,"ren":true,"rent":true,"rentals":true,"repair":true,"report":true,"republican":true,"rest":true,"restaurant":true,"review":true,"reviews":true,"rexroth":true,"rich":true,"richardli":true,"ricoh":true,"rightathome":true,"ril":true,"rio":true,"rip":true,"rocher":true,"rocks":true,"rodeo":true,"rogers":true,"room":true,"rsvp":true,"ruhr":true,"run":true,"rwe":true,"ryukyu":true,"saarland":true,"safe":true,"safety":true,"sakura":true,"sale":true,"salon":true,"samsclub":true,"samsung":true,"sandvik":true,"sandvikcoromant":true,"sanofi":true,"sap":true,"sapo":true,"sarl":true,"sas":true,"save":true,"saxo":true,"sbi":true,"sbs":true,"sca":true,"scb":true,"schaeffler":true,"schmidt":true,"scholarships":true,"school":true,"schule":true,"schwarz":true,"science":true,"scjohnson":true,"scor":true,"scot":true,"seat":true,"secure":true,"security":true,"seek":true,"sener":true,"services":true,"ses":true,"seven":true,"sew":true,"sex":true,"sexy":true,"sfr":true,"shangrila":true,"sharp":true,"shaw":true,"shell":true,"shia":true,"shiksha":true,"shoes":true,"shouji":true,"show":true,"showtime":true,"shriram":true,"silk":true,"sina":true,"singles":true,"site":true,"ski":true,"skin":true,"sky":true,"skype":true,"sling":true,"smart":true,"smile":true,"sncf":true,"soccer":true,"social":true,"softbank":true,"software":true,"sohu":true,"solar":true,"solutions":true,"song":true,"sony":true,"soy":true,"space":true,"spiegel":true,"spot":true,"spreadbetting":true,"srl":true,"srt":true,"stada":true,"staples":true,"star":true,"starhub":true,"statebank":true,"statefarm":true,"statoil":true,"stc":true,"stcgroup":true,"stockholm":true,"storage":true,"store":true,"studio":true,"study":true,"style":true,"sucks":true,"supersport":true,"supplies":true,"supply":true,"support":true,"surf":true,"surgery":true,"suzuki":true,"swatch":true,"swiftcover":true,"swiss":true,"sydney":true,"symantec":true,"systems":true,"tab":true,"taipei":true,"talk":true,"taobao":true,"target":true,"tatamotors":true,"tatar":true,"tattoo":true,"tax":true,"taxi":true,"tci":true,"tdk":true,"team":true,"tech":true,"technology":true,"telecity":true,"telefonica":true,"temasek":true,"tennis":true,"teva":true,"thd":true,"theater":true,"theatre":true,"theguardian":true,"tiaa":true,"tickets":true,"tienda":true,"tiffany":true,"tips":true,"tires":true,"tirol":true,"tjmaxx":true,"tjx":true,"tkmaxx":true,"tmall":true,"today":true,"tokyo":true,"tools":true,"top":true,"toray":true,"toshiba":true,"total":true,"tours":true,"town":true,"toyota":true,"toys":true,"trade":true,"trading":true,"training":true,"travelchannel":true,"travelers":true,"travelersinsurance":true,"trust":true,"trv":true,"tube":true,"tui":true,"tunes":true,"tushu":true,"tvs":true,"ubank":true,"ubs":true,"uconnect":true,"university":true,"uno":true,"uol":true,"ups":true,"vacations":true,"vana":true,"vanguard":true,"vegas":true,"ventures":true,"verisign":true,"versicherung":true,"vet":true,"viajes":true,"video":true,"vig":true,"viking":true,"villas":true,"vin":true,"vip":true,"virgin":true,"visa":true,"vision":true,"vista":true,"vistaprint":true,"viva":true,"vivo":true,"vlaanderen":true,"vodka":true,"volkswagen":true,"vote":true,"voting":true,"voto":true,"voyage":true,"vuelos":true,"wales":true,"walmart":true,"walter":true,"wang":true,"wanggou":true,"warman":true,"watch":true,"watches":true,"weather":true,"weatherchannel":true,"webcam":true,"weber":true,"website":true,"wed":true,"wedding":true,"weibo":true,"weir":true,"whoswho":true,"wien":true,"wiki":true,"williamhill":true,"win":true,"windows":true,"wine":true,"winners":true,"wme":true,"wolterskluwer":true,"woodside":true,"work":true,"works":true,"world":true,"wtc":true,"wtf":true,"xbox":true,"xerox":true,"xfinity":true,"xihuan":true,"xin":true,"xn--11b4c3d":true,"xn--1ck2e1b":true,"xn--1qqw23a":true,"xn--30rr7y":true,"xn--3bst00m":true,"xn--3ds443g":true,"xn--3oq18vl8pn36a":true,"xn--3pxu8k":true,"xn--42c2d9a":true,"xn--45q11c":true,"xn--4gbrim":true,"xn--4gq48lf9j":true,"xn--55qw42g":true,"xn--55qx5d":true,"xn--5su34j936bgsg":true,"xn--5tzm5g":true,"xn--6frz82g":true,"xn--6qq986b3xl":true,"xn--80adxhks":true,"xn--80asehdb":true,"xn--80aswg":true,"xn--8y0a063a":true,"xn--9dbq2a":true,"xn--9et52u":true,"xn--9krt00a":true,"xn--b4w605ferd":true,"xn--bck1b9a5dre4c":true,"xn--c1avg":true,"xn--c2br7g":true,"xn--cck2b3b":true,"xn--cg4bki":true,"xn--czr694b":true,"xn--czrs0t":true,"xn--czru2d":true,"xn--d1acj3b":true,"xn--eckvdtc9d":true,"xn--efvy88h":true,"xn--estv75g":true,"xn--fct429k":true,"xn--fhbei":true,"xn--fiq228c5hs":true,"xn--fiq64b":true,"xn--fjq720a":true,"xn--flw351e":true,"xn--fzys8d69uvgm":true,"xn--g2xx48c":true,"xn--gckr3f0f":true,"xn--hxt814e":true,"xn--i1b6b1a6a2e":true,"xn--imr513n":true,"xn--io0a7i":true,"xn--j1aef":true,"xn--jlq61u9w7b":true,"xn--jvr189m":true,"xn--kcrx77d1x4a":true,"xn--kpu716f":true,"xn--kput3i":true,"xn--mgba3a3ejt":true,"xn--mgba7c0bbn0a":true,"xn--mgbaakc7dvf":true,"xn--mgbab2bd":true,"xn--mgbb9fbpob":true,"xn--mgbca7dzdo":true,"xn--mgbt3dhd":true,"xn--mk1bu44c":true,"xn--mxtq1m":true,"xn--ngbc5azd":true,"xn--ngbe9e0a":true,"xn--nqv7f":true,"xn--nqv7fs00ema":true,"xn--nyqy26a":true,"xn--p1acf":true,"xn--pbt977c":true,"xn--pssy2u":true,"xn--q9jyb4c":true,"xn--qcka1pmc":true,"xn--rhqv96g":true,"xn--rovu88b":true,"xn--ses554g":true,"xn--t60b56a":true,"xn--tckwe":true,"xn--unup4y":true,"xn--vermgensberater-ctb":true,"xn--vermgensberatung-pwb":true,"xn--vhquv":true,"xn--vuq861b":true,"xn--w4r85el8fhu5dnra":true,"xn--w4rs40l":true,"xn--xhq521b":true,"xn--zfr164b":true,"xperia":true,"xyz":true,"yachts":true,"yahoo":true,"yamaxun":true,"yandex":true,"yodobashi":true,"yoga":true,"yokohama":true,"you":true,"youtube":true,"yun":true,"zappos":true,"zara":true,"zero":true,"zip":true,"zippo":true,"zone":true,"zuerich":true,"cloudfront.net":true,"ap-northeast-1.compute.amazonaws.com":true,"ap-southeast-1.compute.amazonaws.com":true,"ap-southeast-2.compute.amazonaws.com":true,"cn-north-1.compute.amazonaws.cn":true,"compute.amazonaws.cn":true,"compute.amazonaws.com":true,"compute-1.amazonaws.com":true,"eu-west-1.compute.amazonaws.com":true,"eu-central-1.compute.amazonaws.com":true,"sa-east-1.compute.amazonaws.com":true,"us-east-1.amazonaws.com":true,"us-gov-west-1.compute.amazonaws.com":true,"us-west-1.compute.amazonaws.com":true,"us-west-2.compute.amazonaws.com":true,"z-1.compute-1.amazonaws.com":true,"z-2.compute-1.amazonaws.com":true,"elasticbeanstalk.com":true,"elb.amazonaws.com":true,"s3.amazonaws.com":true,"s3-ap-northeast-1.amazonaws.com":true,"s3-ap-southeast-1.amazonaws.com":true,"s3-ap-southeast-2.amazonaws.com":true,"s3-external-1.amazonaws.com":true,"s3-external-2.amazonaws.com":true,"s3-fips-us-gov-west-1.amazonaws.com":true,"s3-eu-central-1.amazonaws.com":true,"s3-eu-west-1.amazonaws.com":true,"s3-sa-east-1.amazonaws.com":true,"s3-us-gov-west-1.amazonaws.com":true,"s3-us-west-1.amazonaws.com":true,"s3-us-west-2.amazonaws.com":true,"s3.cn-north-1.amazonaws.com.cn":true,"s3.eu-central-1.amazonaws.com":true,"betainabox.com":true,"ae.org":true,"ar.com":true,"br.com":true,"cn.com":true,"com.de":true,"com.se":true,"de.com":true,"eu.com":true,"gb.com":true,"gb.net":true,"hu.com":true,"hu.net":true,"jp.net":true,"jpn.com":true,"kr.com":true,"mex.com":true,"no.com":true,"qc.com":true,"ru.com":true,"sa.com":true,"se.com":true,"se.net":true,"uk.com":true,"uk.net":true,"us.com":true,"uy.com":true,"za.bz":true,"za.com":true,"africa.com":true,"gr.com":true,"in.net":true,"us.org":true,"co.com":true,"c.la":true,"cloudcontrolled.com":true,"cloudcontrolapp.com":true,"co.ca":true,"c.cdn77.org":true,"cdn77-ssl.net":true,"r.cdn77.net":true,"rsc.cdn77.org":true,"ssl.origin.cdn77-secure.org":true,"co.nl":true,"co.no":true,"*.platform.sh":true,"cupcake.is":true,"dreamhosters.com":true,"duckdns.org":true,"dyndns-at-home.com":true,"dyndns-at-work.com":true,"dyndns-blog.com":true,"dyndns-free.com":true,"dyndns-home.com":true,"dyndns-ip.com":true,"dyndns-mail.com":true,"dyndns-office.com":true,"dyndns-pics.com":true,"dyndns-remote.com":true,"dyndns-server.com":true,"dyndns-web.com":true,"dyndns-wiki.com":true,"dyndns-work.com":true,"dyndns.biz":true,"dyndns.info":true,"dyndns.org":true,"dyndns.tv":true,"at-band-camp.net":true,"ath.cx":true,"barrel-of-knowledge.info":true,"barrell-of-knowledge.info":true,"better-than.tv":true,"blogdns.com":true,"blogdns.net":true,"blogdns.org":true,"blogsite.org":true,"boldlygoingnowhere.org":true,"broke-it.net":true,"buyshouses.net":true,"cechire.com":true,"dnsalias.com":true,"dnsalias.net":true,"dnsalias.org":true,"dnsdojo.com":true,"dnsdojo.net":true,"dnsdojo.org":true,"does-it.net":true,"doesntexist.com":true,"doesntexist.org":true,"dontexist.com":true,"dontexist.net":true,"dontexist.org":true,"doomdns.com":true,"doomdns.org":true,"dvrdns.org":true,"dyn-o-saur.com":true,"dynalias.com":true,"dynalias.net":true,"dynalias.org":true,"dynathome.net":true,"dyndns.ws":true,"endofinternet.net":true,"endofinternet.org":true,"endoftheinternet.org":true,"est-a-la-maison.com":true,"est-a-la-masion.com":true,"est-le-patron.com":true,"est-mon-blogueur.com":true,"for-better.biz":true,"for-more.biz":true,"for-our.info":true,"for-some.biz":true,"for-the.biz":true,"forgot.her.name":true,"forgot.his.name":true,"from-ak.com":true,"from-al.com":true,"from-ar.com":true,"from-az.net":true,"from-ca.com":true,"from-co.net":true,"from-ct.com":true,"from-dc.com":true,"from-de.com":true,"from-fl.com":true,"from-ga.com":true,"from-hi.com":true,"from-ia.com":true,"from-id.com":true,"from-il.com":true,"from-in.com":true,"from-ks.com":true,"from-ky.com":true,"from-la.net":true,"from-ma.com":true,"from-md.com":true,"from-me.org":true,"from-mi.com":true,"from-mn.com":true,"from-mo.com":true,"from-ms.com":true,"from-mt.com":true,"from-nc.com":true,"from-nd.com":true,"from-ne.com":true,"from-nh.com":true,"from-nj.com":true,"from-nm.com":true,"from-nv.com":true,"from-ny.net":true,"from-oh.com":true,"from-ok.com":true,"from-or.com":true,"from-pa.com":true,"from-pr.com":true,"from-ri.com":true,"from-sc.com":true,"from-sd.com":true,"from-tn.com":true,"from-tx.com":true,"from-ut.com":true,"from-va.com":true,"from-vt.com":true,"from-wa.com":true,"from-wi.com":true,"from-wv.com":true,"from-wy.com":true,"ftpaccess.cc":true,"fuettertdasnetz.de":true,"game-host.org":true,"game-server.cc":true,"getmyip.com":true,"gets-it.net":true,"go.dyndns.org":true,"gotdns.com":true,"gotdns.org":true,"groks-the.info":true,"groks-this.info":true,"ham-radio-op.net":true,"here-for-more.info":true,"hobby-site.com":true,"hobby-site.org":true,"home.dyndns.org":true,"homedns.org":true,"homeftp.net":true,"homeftp.org":true,"homeip.net":true,"homelinux.com":true,"homelinux.net":true,"homelinux.org":true,"homeunix.com":true,"homeunix.net":true,"homeunix.org":true,"iamallama.com":true,"in-the-band.net":true,"is-a-anarchist.com":true,"is-a-blogger.com":true,"is-a-bookkeeper.com":true,"is-a-bruinsfan.org":true,"is-a-bulls-fan.com":true,"is-a-candidate.org":true,"is-a-caterer.com":true,"is-a-celticsfan.org":true,"is-a-chef.com":true,"is-a-chef.net":true,"is-a-chef.org":true,"is-a-conservative.com":true,"is-a-cpa.com":true,"is-a-cubicle-slave.com":true,"is-a-democrat.com":true,"is-a-designer.com":true,"is-a-doctor.com":true,"is-a-financialadvisor.com":true,"is-a-geek.com":true,"is-a-geek.net":true,"is-a-geek.org":true,"is-a-green.com":true,"is-a-guru.com":true,"is-a-hard-worker.com":true,"is-a-hunter.com":true,"is-a-knight.org":true,"is-a-landscaper.com":true,"is-a-lawyer.com":true,"is-a-liberal.com":true,"is-a-libertarian.com":true,"is-a-linux-user.org":true,"is-a-llama.com":true,"is-a-musician.com":true,"is-a-nascarfan.com":true,"is-a-nurse.com":true,"is-a-painter.com":true,"is-a-patsfan.org":true,"is-a-personaltrainer.com":true,"is-a-photographer.com":true,"is-a-player.com":true,"is-a-republican.com":true,"is-a-rockstar.com":true,"is-a-socialist.com":true,"is-a-soxfan.org":true,"is-a-student.com":true,"is-a-teacher.com":true,"is-a-techie.com":true,"is-a-therapist.com":true,"is-an-accountant.com":true,"is-an-actor.com":true,"is-an-actress.com":true,"is-an-anarchist.com":true,"is-an-artist.com":true,"is-an-engineer.com":true,"is-an-entertainer.com":true,"is-by.us":true,"is-certified.com":true,"is-found.org":true,"is-gone.com":true,"is-into-anime.com":true,"is-into-cars.com":true,"is-into-cartoons.com":true,"is-into-games.com":true,"is-leet.com":true,"is-lost.org":true,"is-not-certified.com":true,"is-saved.org":true,"is-slick.com":true,"is-uberleet.com":true,"is-very-bad.org":true,"is-very-evil.org":true,"is-very-good.org":true,"is-very-nice.org":true,"is-very-sweet.org":true,"is-with-theband.com":true,"isa-geek.com":true,"isa-geek.net":true,"isa-geek.org":true,"isa-hockeynut.com":true,"issmarterthanyou.com":true,"isteingeek.de":true,"istmein.de":true,"kicks-ass.net":true,"kicks-ass.org":true,"knowsitall.info":true,"land-4-sale.us":true,"lebtimnetz.de":true,"leitungsen.de":true,"likes-pie.com":true,"likescandy.com":true,"merseine.nu":true,"mine.nu":true,"misconfused.org":true,"mypets.ws":true,"myphotos.cc":true,"neat-url.com":true,"office-on-the.net":true,"on-the-web.tv":true,"podzone.net":true,"podzone.org":true,"readmyblog.org":true,"saves-the-whales.com":true,"scrapper-site.net":true,"scrapping.cc":true,"selfip.biz":true,"selfip.com":true,"selfip.info":true,"selfip.net":true,"selfip.org":true,"sells-for-less.com":true,"sells-for-u.com":true,"sells-it.net":true,"sellsyourhome.org":true,"servebbs.com":true,"servebbs.net":true,"servebbs.org":true,"serveftp.net":true,"serveftp.org":true,"servegame.org":true,"shacknet.nu":true,"simple-url.com":true,"space-to-rent.com":true,"stuff-4-sale.org":true,"stuff-4-sale.us":true,"teaches-yoga.com":true,"thruhere.net":true,"traeumtgerade.de":true,"webhop.biz":true,"webhop.info":true,"webhop.net":true,"webhop.org":true,"worse-than.tv":true,"writesthisblog.com":true,"eu.org":true,"al.eu.org":true,"asso.eu.org":true,"at.eu.org":true,"au.eu.org":true,"be.eu.org":true,"bg.eu.org":true,"ca.eu.org":true,"cd.eu.org":true,"ch.eu.org":true,"cn.eu.org":true,"cy.eu.org":true,"cz.eu.org":true,"de.eu.org":true,"dk.eu.org":true,"edu.eu.org":true,"ee.eu.org":true,"es.eu.org":true,"fi.eu.org":true,"fr.eu.org":true,"gr.eu.org":true,"hr.eu.org":true,"hu.eu.org":true,"ie.eu.org":true,"il.eu.org":true,"in.eu.org":true,"int.eu.org":true,"is.eu.org":true,"it.eu.org":true,"jp.eu.org":true,"kr.eu.org":true,"lt.eu.org":true,"lu.eu.org":true,"lv.eu.org":true,"mc.eu.org":true,"me.eu.org":true,"mk.eu.org":true,"mt.eu.org":true,"my.eu.org":true,"net.eu.org":true,"ng.eu.org":true,"nl.eu.org":true,"no.eu.org":true,"nz.eu.org":true,"paris.eu.org":true,"pl.eu.org":true,"pt.eu.org":true,"q-a.eu.org":true,"ro.eu.org":true,"ru.eu.org":true,"se.eu.org":true,"si.eu.org":true,"sk.eu.org":true,"tr.eu.org":true,"uk.eu.org":true,"us.eu.org":true,"a.ssl.fastly.net":true,"b.ssl.fastly.net":true,"global.ssl.fastly.net":true,"a.prod.fastly.net":true,"global.prod.fastly.net":true,"firebaseapp.com":true,"flynnhub.com":true,"service.gov.uk":true,"github.io":true,"githubusercontent.com":true,"ro.com":true,"appspot.com":true,"blogspot.ae":true,"blogspot.al":true,"blogspot.am":true,"blogspot.ba":true,"blogspot.be":true,"blogspot.bg":true,"blogspot.bj":true,"blogspot.ca":true,"blogspot.cf":true,"blogspot.ch":true,"blogspot.cl":true,"blogspot.co.at":true,"blogspot.co.id":true,"blogspot.co.il":true,"blogspot.co.ke":true,"blogspot.co.nz":true,"blogspot.co.uk":true,"blogspot.co.za":true,"blogspot.com":true,"blogspot.com.ar":true,"blogspot.com.au":true,"blogspot.com.br":true,"blogspot.com.by":true,"blogspot.com.co":true,"blogspot.com.cy":true,"blogspot.com.ee":true,"blogspot.com.eg":true,"blogspot.com.es":true,"blogspot.com.mt":true,"blogspot.com.ng":true,"blogspot.com.tr":true,"blogspot.com.uy":true,"blogspot.cv":true,"blogspot.cz":true,"blogspot.de":true,"blogspot.dk":true,"blogspot.fi":true,"blogspot.fr":true,"blogspot.gr":true,"blogspot.hk":true,"blogspot.hr":true,"blogspot.hu":true,"blogspot.ie":true,"blogspot.in":true,"blogspot.is":true,"blogspot.it":true,"blogspot.jp":true,"blogspot.kr":true,"blogspot.li":true,"blogspot.lt":true,"blogspot.lu":true,"blogspot.md":true,"blogspot.mk":true,"blogspot.mr":true,"blogspot.mx":true,"blogspot.my":true,"blogspot.nl":true,"blogspot.no":true,"blogspot.pe":true,"blogspot.pt":true,"blogspot.qa":true,"blogspot.re":true,"blogspot.ro":true,"blogspot.rs":true,"blogspot.ru":true,"blogspot.se":true,"blogspot.sg":true,"blogspot.si":true,"blogspot.sk":true,"blogspot.sn":true,"blogspot.td":true,"blogspot.tw":true,"blogspot.ug":true,"blogspot.vn":true,"codespot.com":true,"googleapis.com":true,"googlecode.com":true,"pagespeedmobilizer.com":true,"withgoogle.com":true,"withyoutube.com":true,"herokuapp.com":true,"herokussl.com":true,"iki.fi":true,"biz.at":true,"info.at":true,"co.pl":true,"azurewebsites.net":true,"azure-mobile.net":true,"cloudapp.net":true,"bmoattachments.org":true,"4u.com":true,"nfshost.com":true,"nyc.mn":true,"nid.io":true,"operaunite.com":true,"outsystemscloud.com":true,"art.pl":true,"gliwice.pl":true,"krakow.pl":true,"poznan.pl":true,"wroc.pl":true,"zakopane.pl":true,"pantheon.io":true,"gotpantheon.com":true,"priv.at":true,"qa2.com":true,"rhcloud.com":true,"sandcats.io":true,"biz.ua":true,"co.ua":true,"pp.ua":true,"sinaapp.com":true,"vipsinaapp.com":true,"1kapp.com":true,"gda.pl":true,"gdansk.pl":true,"gdynia.pl":true,"med.pl":true,"sopot.pl":true,"hk.com":true,"hk.org":true,"ltd.hk":true,"inc.hk":true,"yolasite.com":true,"za.net":true,"za.org":true}); - -// END of automatically generated file diff --git a/node_modules/tough-cookie/lib/store.js b/node_modules/tough-cookie/lib/store.js deleted file mode 100644 index bce5292..0000000 --- a/node_modules/tough-cookie/lib/store.js +++ /dev/null @@ -1,71 +0,0 @@ -/*! - * Copyright (c) 2015, Salesforce.com, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of Salesforce.com nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -'use strict'; -/*jshint unused:false */ - -function Store() { -} -exports.Store = Store; - -// Stores may be synchronous, but are still required to use a -// Continuation-Passing Style API. The CookieJar itself will expose a "*Sync" -// API that converts from synchronous-callbacks to imperative style. -Store.prototype.synchronous = false; - -Store.prototype.findCookie = function(domain, path, key, cb) { - throw new Error('findCookie is not implemented'); -}; - -Store.prototype.findCookies = function(domain, path, cb) { - throw new Error('findCookies is not implemented'); -}; - -Store.prototype.putCookie = function(cookie, cb) { - throw new Error('putCookie is not implemented'); -}; - -Store.prototype.updateCookie = function(oldCookie, newCookie, cb) { - // recommended default implementation: - // return this.putCookie(newCookie, cb); - throw new Error('updateCookie is not implemented'); -}; - -Store.prototype.removeCookie = function(domain, path, key, cb) { - throw new Error('removeCookie is not implemented'); -}; - -Store.prototype.removeCookies = function(domain, path, cb) { - throw new Error('removeCookies is not implemented'); -}; - -Store.prototype.getAllCookies = function(cb) { - throw new Error('getAllCookies is not implemented (therefore jar cannot be serialized)'); -}; diff --git a/node_modules/tough-cookie/package.json b/node_modules/tough-cookie/package.json deleted file mode 100644 index 6d4d61f..0000000 --- a/node_modules/tough-cookie/package.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "_args": [ - [ - "tough-cookie@~2.3.0", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "tough-cookie@>=2.3.0 <2.4.0", - "_id": "tough-cookie@2.3.1", - "_inCache": true, - "_installable": true, - "_location": "/tough-cookie", - "_nodeVersion": "6.3.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/tough-cookie-2.3.1.tgz_1469494891088_0.8524557144846767" - }, - "_npmUser": { - "email": "jstash@gmail.com", - "name": "jstash" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "tough-cookie", - "raw": "tough-cookie@~2.3.0", - "rawSpec": "~2.3.0", - "scope": null, - "spec": ">=2.3.0 <2.4.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.1.tgz", - "_shasum": "99c77dfbb7d804249e8a299d4cb0fd81fef083fd", - "_shrinkwrap": null, - "_spec": "tough-cookie@~2.3.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "jstashewsky@salesforce.com", - "name": "Jeremy Stashewsky" - }, - "bugs": { - "url": "https://github.com/SalesforceEng/tough-cookie/issues" - }, - "contributors": [ - { - "name": "Alexander Savin" - }, - { - "name": "Ian Livingstone" - }, - { - "name": "Ivan Nikulin" - }, - { - "name": "Lalit Kapoor" - }, - { - "name": "Sam Thompson" - }, - { - "name": "Sebastian Mayr" - } - ], - "dependencies": {}, - "description": "RFC6265 Cookies and Cookie Jar for node.js", - "devDependencies": { - "async": "^1.4.2", - "string.prototype.repeat": "^0.2.0", - "vows": "^0.8.1" - }, - "directories": {}, - "dist": { - "shasum": "99c77dfbb7d804249e8a299d4cb0fd81fef083fd", - "tarball": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.1.tgz" - }, - "engines": { - "node": ">=0.8" - }, - "files": [ - "lib" - ], - "gitHead": "c11a2d11d12348a35ef595c809e30e641a804a7d", - "homepage": "https://github.com/SalesforceEng/tough-cookie", - "keywords": [ - "HTTP", - "cookie", - "cookies", - "set-cookie", - "cookiejar", - "jar", - "RFC6265", - "RFC2965" - ], - "license": "BSD-3-Clause", - "main": "./lib/cookie", - "maintainers": [ - { - "email": "jstash@gmail.com", - "name": "jstash" - }, - { - "email": "emily@contactvibe.com", - "name": "nexxy" - } - ], - "name": "tough-cookie", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/SalesforceEng/tough-cookie.git" - }, - "scripts": { - "suffixup": "curl -o public_suffix_list.dat https://publicsuffix.org/list/public_suffix_list.dat && ./generate-pubsuffix.js", - "test": "vows test/*_test.js" - }, - "version": "2.3.1" -} diff --git a/node_modules/trim/.npmignore b/node_modules/trim/.npmignore deleted file mode 100644 index f1250e5..0000000 --- a/node_modules/trim/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/trim/History.md b/node_modules/trim/History.md deleted file mode 100644 index c8aa68f..0000000 --- a/node_modules/trim/History.md +++ /dev/null @@ -1,5 +0,0 @@ - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/trim/Makefile b/node_modules/trim/Makefile deleted file mode 100644 index 4e9c8d3..0000000 --- a/node_modules/trim/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --require should \ - --reporter spec - -.PHONY: test \ No newline at end of file diff --git a/node_modules/trim/Readme.md b/node_modules/trim/Readme.md deleted file mode 100644 index 3460f52..0000000 --- a/node_modules/trim/Readme.md +++ /dev/null @@ -1,69 +0,0 @@ - -# trim - - Trims string whitespace. - -## Installation - -``` -$ npm install trim -$ component install component/trim -``` - -## API - - - [trim(str)](#trimstr) - - [.left(str)](#leftstr) - - [.right(str)](#rightstr) - - - -### trim(str) -should trim leading / trailing whitespace. - -```js -trim(' foo bar ').should.equal('foo bar'); -trim('\n\n\nfoo bar\n\r\n\n').should.equal('foo bar'); -``` - - -### .left(str) -should trim leading whitespace. - -```js -trim.left(' foo bar ').should.equal('foo bar '); -``` - - -### .right(str) -should trim trailing whitespace. - -```js -trim.right(' foo bar ').should.equal(' foo bar'); -``` - - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/trim/component.json b/node_modules/trim/component.json deleted file mode 100644 index 560b258..0000000 --- a/node_modules/trim/component.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "trim", - "version": "0.0.1", - "description": "Trim string whitespace", - "keywords": ["string", "trim"], - "scripts": ["index.js"] -} \ No newline at end of file diff --git a/node_modules/trim/index.js b/node_modules/trim/index.js deleted file mode 100644 index 640c24c..0000000 --- a/node_modules/trim/index.js +++ /dev/null @@ -1,14 +0,0 @@ - -exports = module.exports = trim; - -function trim(str){ - return str.replace(/^\s*|\s*$/g, ''); -} - -exports.left = function(str){ - return str.replace(/^\s*/, ''); -}; - -exports.right = function(str){ - return str.replace(/\s*$/, ''); -}; diff --git a/node_modules/trim/package.json b/node_modules/trim/package.json deleted file mode 100644 index ccd38f2..0000000 --- a/node_modules/trim/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_args": [ - [ - "trim@0.0.1", - "/Users/jbaylina/git/MVP/node_modules/parse-headers" - ] - ], - "_from": "trim@0.0.1", - "_id": "trim@0.0.1", - "_inCache": true, - "_installable": true, - "_location": "/trim", - "_npmUser": { - "email": "tj@vision-media.ca", - "name": "tjholowaychuk" - }, - "_npmVersion": "1.2.2", - "_phantomChildren": {}, - "_requested": { - "name": "trim", - "raw": "trim@0.0.1", - "rawSpec": "0.0.1", - "scope": null, - "spec": "0.0.1", - "type": "version" - }, - "_requiredBy": [ - "/parse-headers" - ], - "_resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "_shasum": "5858547f6b290757ee95cccc666fb50084c460dd", - "_shrinkwrap": null, - "_spec": "trim@0.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/parse-headers", - "author": { - "email": "tj@vision-media.ca", - "name": "TJ Holowaychuk" - }, - "component": { - "scripts": { - "trim/index.js": "index.js" - } - }, - "dependencies": {}, - "description": "Trim string whitespace", - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "directories": {}, - "dist": { - "shasum": "5858547f6b290757ee95cccc666fb50084c460dd", - "tarball": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz" - }, - "keywords": [ - "string", - "trim" - ], - "main": "index", - "maintainers": [ - { - "email": "tj@vision-media.ca", - "name": "tjholowaychuk" - } - ], - "name": "trim", - "optionalDependencies": {}, - "readme": "\n# trim\n\n Trims string whitespace.\n\n## Installation\n\n```\n$ npm install trim\n$ component install component/trim\n```\n\n## API\n\n - [trim(str)](#trimstr)\n - [.left(str)](#leftstr)\n - [.right(str)](#rightstr)\n\n \n\n### trim(str)\nshould trim leading / trailing whitespace.\n\n```js\ntrim(' foo bar ').should.equal('foo bar');\ntrim('\\n\\n\\nfoo bar\\n\\r\\n\\n').should.equal('foo bar');\n```\n\n\n### .left(str)\nshould trim leading whitespace.\n\n```js\ntrim.left(' foo bar ').should.equal('foo bar ');\n```\n\n\n### .right(str)\nshould trim trailing whitespace.\n\n```js\ntrim.right(' foo bar ').should.equal(' foo bar');\n```\n\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "version": "0.0.1" -} diff --git a/node_modules/tunnel-agent/LICENSE b/node_modules/tunnel-agent/LICENSE deleted file mode 100644 index a4a9aee..0000000 --- a/node_modules/tunnel-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/tunnel-agent/README.md b/node_modules/tunnel-agent/README.md deleted file mode 100644 index bb533d5..0000000 --- a/node_modules/tunnel-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -tunnel-agent -============ - -HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/tunnel-agent/index.js b/node_modules/tunnel-agent/index.js deleted file mode 100644 index 68013ac..0000000 --- a/node_modules/tunnel-agent/index.js +++ /dev/null @@ -1,243 +0,0 @@ -'use strict' - -var net = require('net') - , tls = require('tls') - , http = require('http') - , https = require('https') - , events = require('events') - , assert = require('assert') - , util = require('util') - ; - -exports.httpOverHttp = httpOverHttp -exports.httpsOverHttp = httpsOverHttp -exports.httpOverHttps = httpOverHttps -exports.httpsOverHttps = httpsOverHttps - - -function httpOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - return agent -} - -function httpsOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - agent.createSocket = createSecureSocket - agent.defaultPort = 443 - return agent -} - -function httpOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - return agent -} - -function httpsOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - agent.createSocket = createSecureSocket - agent.defaultPort = 443 - return agent -} - - -function TunnelingAgent(options) { - var self = this - self.options = options || {} - self.proxyOptions = self.options.proxy || {} - self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets - self.requests = [] - self.sockets = [] - - self.on('free', function onFree(socket, host, port) { - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i] - if (pending.host === host && pending.port === port) { - // Detect the request to connect same origin server, - // reuse the connection. - self.requests.splice(i, 1) - pending.request.onSocket(socket) - return - } - } - socket.destroy() - self.removeSocket(socket) - }) -} -util.inherits(TunnelingAgent, events.EventEmitter) - -TunnelingAgent.prototype.addRequest = function addRequest(req, options) { - var self = this - - // Legacy API: addRequest(req, host, port, path) - if (typeof options === 'string') { - options = { - host: options, - port: arguments[2], - path: arguments[3] - }; - } - - if (self.sockets.length >= this.maxSockets) { - // We are over limit so we'll add it to the queue. - self.requests.push({host: options.host, port: options.port, request: req}) - return - } - - // If we are under maxSockets create a new one. - self.createConnection({host: options.host, port: options.port, request: req}) -} - -TunnelingAgent.prototype.createConnection = function createConnection(pending) { - var self = this - - self.createSocket(pending, function(socket) { - socket.on('free', onFree) - socket.on('close', onCloseOrRemove) - socket.on('agentRemove', onCloseOrRemove) - pending.request.onSocket(socket) - - function onFree() { - self.emit('free', socket, pending.host, pending.port) - } - - function onCloseOrRemove(err) { - self.removeSocket(socket) - socket.removeListener('free', onFree) - socket.removeListener('close', onCloseOrRemove) - socket.removeListener('agentRemove', onCloseOrRemove) - } - }) -} - -TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { - var self = this - var placeholder = {} - self.sockets.push(placeholder) - - var connectOptions = mergeOptions({}, self.proxyOptions, - { method: 'CONNECT' - , path: options.host + ':' + options.port - , agent: false - } - ) - if (connectOptions.proxyAuth) { - connectOptions.headers = connectOptions.headers || {} - connectOptions.headers['Proxy-Authorization'] = 'Basic ' + - new Buffer(connectOptions.proxyAuth).toString('base64') - } - - debug('making CONNECT request') - var connectReq = self.request(connectOptions) - connectReq.useChunkedEncodingByDefault = false // for v0.6 - connectReq.once('response', onResponse) // for v0.6 - connectReq.once('upgrade', onUpgrade) // for v0.6 - connectReq.once('connect', onConnect) // for v0.7 or later - connectReq.once('error', onError) - connectReq.end() - - function onResponse(res) { - // Very hacky. This is necessary to avoid http-parser leaks. - res.upgrade = true - } - - function onUpgrade(res, socket, head) { - // Hacky. - process.nextTick(function() { - onConnect(res, socket, head) - }) - } - - function onConnect(res, socket, head) { - connectReq.removeAllListeners() - socket.removeAllListeners() - - if (res.statusCode === 200) { - assert.equal(head.length, 0) - debug('tunneling connection has established') - self.sockets[self.sockets.indexOf(placeholder)] = socket - cb(socket) - } else { - debug('tunneling socket could not be established, statusCode=%d', res.statusCode) - var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } - } - - function onError(cause) { - connectReq.removeAllListeners() - - debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack) - var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } -} - -TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { - var pos = this.sockets.indexOf(socket) - if (pos === -1) return - - this.sockets.splice(pos, 1) - - var pending = this.requests.shift() - if (pending) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createConnection(pending) - } -} - -function createSecureSocket(options, cb) { - var self = this - TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { - // 0 is dummy port for v0.6 - var secureSocket = tls.connect(0, mergeOptions({}, self.options, - { servername: options.host - , socket: socket - } - )) - self.sockets[self.sockets.indexOf(socket)] = secureSocket - cb(secureSocket) - }) -} - - -function mergeOptions(target) { - for (var i = 1, len = arguments.length; i < len; ++i) { - var overrides = arguments[i] - if (typeof overrides === 'object') { - var keys = Object.keys(overrides) - for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { - var k = keys[j] - if (overrides[k] !== undefined) { - target[k] = overrides[k] - } - } - } - } - return target -} - - -var debug -if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug = function() { - var args = Array.prototype.slice.call(arguments) - if (typeof args[0] === 'string') { - args[0] = 'TUNNEL: ' + args[0] - } else { - args.unshift('TUNNEL:') - } - console.error.apply(console, args) - } -} else { - debug = function() {} -} -exports.debug = debug // for test diff --git a/node_modules/tunnel-agent/package.json b/node_modules/tunnel-agent/package.json deleted file mode 100644 index e548d85..0000000 --- a/node_modules/tunnel-agent/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "tunnel-agent@~0.4.1", - "/Users/jbaylina/git/MVP/node_modules/request" - ] - ], - "_from": "tunnel-agent@>=0.4.1 <0.5.0", - "_id": "tunnel-agent@0.4.3", - "_inCache": true, - "_installable": true, - "_location": "/tunnel-agent", - "_nodeVersion": "5.9.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/tunnel-agent-0.4.3.tgz_1462396470295_0.23639482469297945" - }, - "_npmUser": { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - }, - "_npmVersion": "2.15.3", - "_phantomChildren": {}, - "_requested": { - "name": "tunnel-agent", - "raw": "tunnel-agent@~0.4.1", - "rawSpec": "~0.4.1", - "scope": null, - "spec": ">=0.4.1 <0.5.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "_shasum": "6373db76909fe570e08d73583365ed828a74eeeb", - "_shrinkwrap": null, - "_spec": "tunnel-agent@~0.4.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/request", - "author": { - "email": "mikeal.rogers@gmail.com", - "name": "Mikeal Rogers", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/tunnel-agent/issues" - }, - "dependencies": {}, - "description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "6373db76909fe570e08d73583365ed828a74eeeb", - "tarball": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" - }, - "engines": { - "node": "*" - }, - "files": [ - "index.js" - ], - "gitHead": "e72d830f5ed388a2a71d37ce062c38e3fb34bdde", - "homepage": "https://github.com/mikeal/tunnel-agent#readme", - "license": "Apache-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - }, - { - "email": "jnylen@gmail.com", - "name": "nylen" - }, - { - "email": "fkschott@gmail.com", - "name": "fredkschott" - }, - { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - } - ], - "name": "tunnel-agent", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "url": "git+https://github.com/mikeal/tunnel-agent.git" - }, - "scripts": {}, - "version": "0.4.3" -} diff --git a/node_modules/tweetnacl/.npmignore b/node_modules/tweetnacl/.npmignore deleted file mode 100644 index 7d98dcb..0000000 --- a/node_modules/tweetnacl/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -.eslintrc -.travis.yml -bower.json -test diff --git a/node_modules/tweetnacl/CHANGELOG.md b/node_modules/tweetnacl/CHANGELOG.md deleted file mode 100644 index 9debcb4..0000000 --- a/node_modules/tweetnacl/CHANGELOG.md +++ /dev/null @@ -1,181 +0,0 @@ -TweetNaCl.js Changelog -====================== - - -v0.14.1 -------- - -No code changes, just tweaked packaging and added COPYING.txt. - - -v0.14.0 -------- - -* **Breaking change!** All functions from `nacl.util` have been removed. These - functions are no longer available: - - nacl.util.decodeUTF8 - nacl.util.encodeUTF8 - nacl.util.decodeBase64 - nacl.util.encodeBase64 - - If want to continue using them, you can include - package: - - - - - or - - var nacl = require('tweetnacl'); - nacl.util = require('tweetnacl-util'); - - However it is recommended to use better packages that have wider - compatibility and better performance. Functions from `nacl.util` were never - intended to be robust solution for string conversion and were included for - convenience: cryptography library is not the right place for them. - - Currently calling these functions will throw error pointing to - `tweetnacl-util-js` (in the next version this error message will be removed). - -* Improved detection of available random number generators, making it possible - to use `nacl.randomBytes` and related functions in Web Workers without - changes. - -* Changes to testing (see README). - - -v0.13.3 -------- - -No code changes. - -* Reverted license field in package.json to "Public domain". - -* Fixed typo in README. - - -v0.13.2 -------- - -* Fixed undefined variable bug in fast version of Poly1305. No worries, this - bug was *never* triggered. - -* Specified CC0 public domain dedication. - -* Updated development dependencies. - - -v0.13.1 -------- - -* Exclude `crypto` and `buffer` modules from browserify builds. - - -v0.13.0 -------- - -* Made `nacl-fast` the default version in NPM package. Now - `require("tweetnacl")` will use fast version; to get the original version, - use `require("tweetnacl/nacl.js")`. - -* Cleanup temporary array after generating random bytes. - - -v0.12.2 -------- - -* Improved performance of curve operations, making `nacl.scalarMult`, `nacl.box`, - `nacl.sign` and related functions up to 3x faster in `nacl-fast` version. - - -v0.12.1 -------- - -* Significantly improved performance of Salsa20 (~1.5x faster) and - Poly1305 (~3.5x faster) in `nacl-fast` version. - - -v0.12.0 -------- - -* Instead of using the given secret key directly, TweetNaCl.js now copies it to - a new array in `nacl.box.keyPair.fromSecretKey` and - `nacl.sign.keyPair.fromSecretKey`. - - -v0.11.2 -------- - -* Added new constant: `nacl.sign.seedLength`. - - -v0.11.1 -------- - -* Even faster hash for both short and long inputs (in `nacl-fast`). - - -v0.11.0 -------- - -* Implement `nacl.sign.keyPair.fromSeed` to enable creation of sign key pairs - deterministically from a 32-byte seed. (It behaves like - [libsodium's](http://doc.libsodium.org/public-key_cryptography/public-key_signatures.html) - `crypto_sign_seed_keypair`: the seed becomes a secret part of the secret key.) - -* Fast version now has an improved hash implementation that is 2x-5x faster. - -* Fixed benchmarks, which may have produced incorrect measurements. - - -v0.10.1 -------- - -* Exported undocumented `nacl.lowlevel.crypto_core_hsalsa20`. - - -v0.10.0 -------- - -* **Signature API breaking change!** `nacl.sign` and `nacl.sign.open` now deal - with signed messages, and new `nacl.sign.detached` and - `nacl.sign.detached.verify` are available. - - Previously, `nacl.sign` returned a signature, and `nacl.sign.open` accepted a - message and "detached" signature. This was unlike NaCl's API, which dealt with - signed messages (concatenation of signature and message). - - The new API is: - - nacl.sign(message, secretKey) -> signedMessage - nacl.sign.open(signedMessage, publicKey) -> message | null - - Since detached signatures are common, two new API functions were introduced: - - nacl.sign.detached(message, secretKey) -> signature - nacl.sign.detached.verify(message, signature, publicKey) -> true | false - - (Note that it's `verify`, not `open`, and it returns a boolean value, unlike - `open`, which returns an "unsigned" message.) - -* NPM package now comes without `test` directory to keep it small. - - -v0.9.2 ------- - -* Improved documentation. -* Fast version: increased theoretical message size limit from 2^32-1 to 2^52 - bytes in Poly1305 (and thus, secretbox and box). However this has no impact - in practice since JavaScript arrays or ArrayBuffers are limited to 32-bit - indexes, and most implementations won't allocate more than a gigabyte or so. - (Obviously, there are no tests for the correctness of implementation.) Also, - it's not recommended to use messages that large without splitting them into - smaller packets anyway. - - -v0.9.1 ------- - -* Initial release diff --git a/node_modules/tweetnacl/COPYING.txt b/node_modules/tweetnacl/COPYING.txt deleted file mode 100644 index c2bd1e5..0000000 --- a/node_modules/tweetnacl/COPYING.txt +++ /dev/null @@ -1,9 +0,0 @@ -Public Domain - -The person who associated a work with this deed has dedicated the work to the -public domain by waiving all of his or her rights to the work worldwide under -copyright law, including all related and neighboring rights, to the extent -allowed by law. - -You can copy, modify, distribute and perform the work, even for commercial -purposes, all without asking permission. diff --git a/node_modules/tweetnacl/README.md b/node_modules/tweetnacl/README.md deleted file mode 100644 index c80bbed..0000000 --- a/node_modules/tweetnacl/README.md +++ /dev/null @@ -1,445 +0,0 @@ -TweetNaCl.js -============ - -Port of [TweetNaCl](http://tweetnacl.cr.yp.to) / [NaCl](http://nacl.cr.yp.to/) -to JavaScript for modern browsers and Node.js. Public domain. - -[![Build Status](https://travis-ci.org/dchest/tweetnacl-js.svg?branch=master) -](https://travis-ci.org/dchest/tweetnacl-js) - -Demo: - -**:warning: Beta version. The library is stable and API is frozen, however -it has not been independently reviewed. If you can help reviewing it, please -[contact me](mailto:dmitry@codingrobots.com).** - -Documentation -============= - -* [Overview](#overview) -* [Installation](#installation) -* [Usage](#usage) - * [Public-key authenticated encryption (box)](#public-key-authenticated-encryption-box) - * [Secret-key authenticated encryption (secretbox)](#secret-key-authenticated-encryption-secretbox) - * [Scalar multiplication](#scalar-multiplication) - * [Signatures](#signatures) - * [Hashing](#hashing) - * [Random bytes generation](#random-bytes-generation) - * [Constant-time comparison](#constant-time-comparison) -* [System requirements](#system-requirements) -* [Development and testing](#development-and-testing) -* [Contributors](#contributors) -* [Who uses it](#who-uses-it) - - -Overview --------- - -The primary goal of this project is to produce a translation of TweetNaCl to -JavaScript which is as close as possible to the original C implementation, plus -a thin layer of idiomatic high-level API on top of it. - -There are two versions, you can use either of them: - -* `nacl.js` is the port of TweetNaCl with minimum differences from the - original + high-level API. - -* `nacl-fast.js` is like `nacl.js`, but with some functions replaced with - faster versions. - - -Installation ------------- - -You can install TweetNaCl.js via a package manager: - -[Bower](http://bower.io): - - $ bower install tweetnacl - -[NPM](https://www.npmjs.org/): - - $ npm install tweetnacl - -or [download source code](https://github.com/dchest/tweetnacl-js/releases). - - -Usage ------ - -All API functions accept and return bytes as `Uint8Array`s. If you need to -encode or decode strings, use functions from - or one of the more robust codec -packages. - -In Node.js v4 and later `Buffer` objects are backed by `Uint8Array`s, so you -can freely pass them to TweetNaCl.js functions as arguments. The returned -objects are still `Uint8Array`s, so if you need `Buffer`s, you'll have to -convert them manually; make sure to convert using copying: `new Buffer(array)`, -instead of sharing: `new Buffer(array.buffer)`, because some functions return -subarrays of their buffers. - - -### Public-key authenticated encryption (box) - -Implements *curve25519-xsalsa20-poly1305*. - -#### nacl.box.keyPair() - -Generates a new random key pair for box and returns it as an object with -`publicKey` and `secretKey` members: - - { - publicKey: ..., // Uint8Array with 32-byte public key - secretKey: ... // Uint8Array with 32-byte secret key - } - - -#### nacl.box.keyPair.fromSecretKey(secretKey) - -Returns a key pair for box with public key corresponding to the given secret -key. - -#### nacl.box(message, nonce, theirPublicKey, mySecretKey) - -Encrypt and authenticates message using peer's public key, our secret key, and -the given nonce, which must be unique for each distinct message for a key pair. - -Returns an encrypted and authenticated message, which is -`nacl.box.overheadLength` longer than the original message. - -#### nacl.box.open(box, nonce, theirPublicKey, mySecretKey) - -Authenticates and decrypts the given box with peer's public key, our secret -key, and the given nonce. - -Returns the original message, or `false` if authentication fails. - -#### nacl.box.before(theirPublicKey, mySecretKey) - -Returns a precomputed shared key which can be used in `nacl.box.after` and -`nacl.box.open.after`. - -#### nacl.box.after(message, nonce, sharedKey) - -Same as `nacl.box`, but uses a shared key precomputed with `nacl.box.before`. - -#### nacl.box.open.after(box, nonce, sharedKey) - -Same as `nacl.box.open`, but uses a shared key precomputed with `nacl.box.before`. - -#### nacl.box.publicKeyLength = 32 - -Length of public key in bytes. - -#### nacl.box.secretKeyLength = 32 - -Length of secret key in bytes. - -#### nacl.box.sharedKeyLength = 32 - -Length of precomputed shared key in bytes. - -#### nacl.box.nonceLength = 24 - -Length of nonce in bytes. - -#### nacl.box.overheadLength = 16 - -Length of overhead added to box compared to original message. - - -### Secret-key authenticated encryption (secretbox) - -Implements *xsalsa20-poly1305*. - -#### nacl.secretbox(message, nonce, key) - -Encrypt and authenticates message using the key and the nonce. The nonce must -be unique for each distinct message for this key. - -Returns an encrypted and authenticated message, which is -`nacl.secretbox.overheadLength` longer than the original message. - -#### nacl.secretbox.open(box, nonce, key) - -Authenticates and decrypts the given secret box using the key and the nonce. - -Returns the original message, or `false` if authentication fails. - -#### nacl.secretbox.keyLength = 32 - -Length of key in bytes. - -#### nacl.secretbox.nonceLength = 24 - -Length of nonce in bytes. - -#### nacl.secretbox.overheadLength = 16 - -Length of overhead added to secret box compared to original message. - - -### Scalar multiplication - -Implements *curve25519*. - -#### nacl.scalarMult(n, p) - -Multiplies an integer `n` by a group element `p` and returns the resulting -group element. - -#### nacl.scalarMult.base(n) - -Multiplies an integer `n` by a standard group element and returns the resulting -group element. - -#### nacl.scalarMult.scalarLength = 32 - -Length of scalar in bytes. - -#### nacl.scalarMult.groupElementLength = 32 - -Length of group element in bytes. - - -### Signatures - -Implements [ed25519](http://ed25519.cr.yp.to). - -#### nacl.sign.keyPair() - -Generates new random key pair for signing and returns it as an object with -`publicKey` and `secretKey` members: - - { - publicKey: ..., // Uint8Array with 32-byte public key - secretKey: ... // Uint8Array with 64-byte secret key - } - -#### nacl.sign.keyPair.fromSecretKey(secretKey) - -Returns a signing key pair with public key corresponding to the given -64-byte secret key. The secret key must have been generated by -`nacl.sign.keyPair` or `nacl.sign.keyPair.fromSeed`. - -#### nacl.sign.keyPair.fromSeed(seed) - -Returns a new signing key pair generated deterministically from a 32-byte seed. -The seed must contain enough entropy to be secure. This method is not -recommended for general use: instead, use `nacl.sign.keyPair` to generate a new -key pair from a random seed. - -#### nacl.sign(message, secretKey) - -Signs the message using the secret key and returns a signed message. - -#### nacl.sign.open(signedMessage, publicKey) - -Verifies the signed message and returns the message without signature. - -Returns `null` if verification failed. - -#### nacl.sign.detached(message, secretKey) - -Signs the message using the secret key and returns a signature. - -#### nacl.sign.detached.verify(message, signature, publicKey) - -Verifies the signature for the message and returns `true` if verification -succeeded or `false` if it failed. - -#### nacl.sign.publicKeyLength = 32 - -Length of signing public key in bytes. - -#### nacl.sign.secretKeyLength = 64 - -Length of signing secret key in bytes. - -#### nacl.sign.seedLength = 32 - -Length of seed for `nacl.sign.keyPair.fromSeed` in bytes. - -#### nacl.sign.signatureLength = 64 - -Length of signature in bytes. - - -### Hashing - -Implements *SHA-512*. - -#### nacl.hash(message) - -Returns SHA-512 hash of the message. - -#### nacl.hash.hashLength = 64 - -Length of hash in bytes. - - -### Random bytes generation - -#### nacl.randomBytes(length) - -Returns a `Uint8Array` of the given length containing random bytes of -cryptographic quality. - -**Implementation note** - -TweetNaCl.js uses the following methods to generate random bytes, -depending on the platform it runs on: - -* `window.crypto.getRandomValues` (WebCrypto standard) -* `window.msCrypto.getRandomValues` (Internet Explorer 11) -* `crypto.randomBytes` (Node.js) - -If the platform doesn't provide a suitable PRNG, the following functions, -which require random numbers, will throw exception: - -* `nacl.randomBytes` -* `nacl.box.keyPair` -* `nacl.sign.keyPair` - -Other functions are deterministic and will continue working. - -If a platform you are targeting doesn't implement secure random number -generator, but you somehow have a cryptographically-strong source of entropy -(not `Math.random`!), and you know what you are doing, you can plug it into -TweetNaCl.js like this: - - nacl.setPRNG(function(x, n) { - // ... copy n random bytes into x ... - }); - -Note that `nacl.setPRNG` *completely replaces* internal random byte generator -with the one provided. - - -### Constant-time comparison - -#### nacl.verify(x, y) - -Compares `x` and `y` in constant time and returns `true` if their lengths are -non-zero and equal, and their contents are equal. - -Returns `false` if either of the arguments has zero length, or arguments have -different lengths, or their contents differ. - - -System requirements -------------------- - -TweetNaCl.js supports modern browsers that have a cryptographically secure -pseudorandom number generator and typed arrays, including the latest versions -of: - -* Chrome -* Firefox -* Safari (Mac, iOS) -* Internet Explorer 11 - -Other systems: - -* Node.js - - -Development and testing ------------------------- - -Install NPM modules needed for development: - - $ npm install - -To build minified versions: - - $ npm run build - -Tests use minified version, so make sure to rebuild it every time you change -`nacl.js` or `nacl-fast.js`. - -### Testing - -To run tests in Node.js: - - $ npm run test-node - -By default all tests described here work on `nacl.min.js`. To test other -versions, set environment variable `NACL_SRC` to the file name you want to test. -For example, the following command will test fast minified version: - - $ NACL_SRC=nacl-fast.min.js npm run test-node - -To run full suite of tests in Node.js, including comparing outputs of -JavaScript port to outputs of the original C version: - - $ npm run test-node-all - -To prepare tests for browsers: - - $ npm run build-test-browser - -and then open `test/browser/test.html` (or `test/browser/test-fast.html`) to -run them. - -To run headless browser tests with `tape-run` (powered by Electron): - - $ npm run test-browser - -(If you get `Error: spawn ENOENT`, install *xvfb*: `sudo apt-get install xvfb`.) - -To run tests in both Node and Electron: - - $ npm test - -### Benchmarking - -To run benchmarks in Node.js: - - $ npm run bench - $ NACL_SRC=nacl-fast.min.js npm run bench - -To run benchmarks in a browser, open `test/benchmark/bench.html` (or -`test/benchmark/bench-fast.html`). - - -Contributors ------------- - -JavaScript port: - - * [Dmitry Chestnykh](http://github.com/dchest) (ported xsalsa20, poly1305, curve25519) - * [Devi Mandiri](https://github.com/devi) (ported curve25519, ed25519, sha512) - -Original authors of [NaCl](http://nacl.cr.yp.to), [TweetNaCl](http://tweetnacl.cr.yp.to) -and [Poly1305-donna](https://github.com/floodyberry/poly1305-donna) -(who are *not* responsible for any errors in this implementation): - - * [Daniel J. Bernstein](http://cr.yp.to/djb.html) - * Wesley Janssen - * [Tanja Lange](http://hyperelliptic.org/tanja) - * [Peter Schwabe](http://www.cryptojedi.org/users/peter/) - * [Matthew Dempsky](https://github.com/mdempsky) - * [Andrew Moon](https://github.com/floodyberry) - -Contributors have dedicated their work to the public domain. - -This software is distributed without any warranty. - - -Third-party libraries based on TweetNaCl.js -------------------------------------------- - -* [forward-secrecy](https://github.com/alax/forward-secrecy) — Axolotl ratchet implementation -* [nacl-stream](https://github.com/dchest/nacl-stream-js) - streaming encryption -* [tweetnacl-auth-js](https://github.com/dchest/tweetnacl-auth-js) — implementation of [`crypto_auth`](http://nacl.cr.yp.to/auth.html) - - -Who uses it ------------ - -Some notable users of TweetNaCl.js: - -* [miniLock](http://minilock.io/) -* [Stellar](https://www.stellar.org/) diff --git a/node_modules/tweetnacl/nacl-fast.js b/node_modules/tweetnacl/nacl-fast.js deleted file mode 100644 index 5e4562f..0000000 --- a/node_modules/tweetnacl/nacl-fast.js +++ /dev/null @@ -1,2388 +0,0 @@ -(function(nacl) { -'use strict'; - -// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. -// Public domain. -// -// Implementation derived from TweetNaCl version 20140427. -// See for details: http://tweetnacl.cr.yp.to/ - -var gf = function(init) { - var i, r = new Float64Array(16); - if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; - return r; -}; - -// Pluggable, initialized in high-level API below. -var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; - -var _0 = new Uint8Array(16); -var _9 = new Uint8Array(32); _9[0] = 9; - -var gf0 = gf(), - gf1 = gf([1]), - _121665 = gf([0xdb41, 1]), - D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), - D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), - X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), - Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), - I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); - -function ts64(x, i, h, l) { - x[i] = (h >> 24) & 0xff; - x[i+1] = (h >> 16) & 0xff; - x[i+2] = (h >> 8) & 0xff; - x[i+3] = h & 0xff; - x[i+4] = (l >> 24) & 0xff; - x[i+5] = (l >> 16) & 0xff; - x[i+6] = (l >> 8) & 0xff; - x[i+7] = l & 0xff; -} - -function vn(x, xi, y, yi, n) { - var i,d = 0; - for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; - return (1 & ((d - 1) >>> 8)) - 1; -} - -function crypto_verify_16(x, xi, y, yi) { - return vn(x,xi,y,yi,16); -} - -function crypto_verify_32(x, xi, y, yi) { - return vn(x,xi,y,yi,32); -} - -function core_salsa20(o, p, k, c) { - var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, - j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, - j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, - j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, - j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, - j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, - j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, - j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, - j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, - j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, - j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, - j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, - j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, - j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, - j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, - j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; - - var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, - x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, - x15 = j15, u; - - for (var i = 0; i < 20; i += 2) { - u = x0 + x12 | 0; - x4 ^= u<<7 | u>>>(32-7); - u = x4 + x0 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x4 | 0; - x12 ^= u<<13 | u>>>(32-13); - u = x12 + x8 | 0; - x0 ^= u<<18 | u>>>(32-18); - - u = x5 + x1 | 0; - x9 ^= u<<7 | u>>>(32-7); - u = x9 + x5 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x9 | 0; - x1 ^= u<<13 | u>>>(32-13); - u = x1 + x13 | 0; - x5 ^= u<<18 | u>>>(32-18); - - u = x10 + x6 | 0; - x14 ^= u<<7 | u>>>(32-7); - u = x14 + x10 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x14 | 0; - x6 ^= u<<13 | u>>>(32-13); - u = x6 + x2 | 0; - x10 ^= u<<18 | u>>>(32-18); - - u = x15 + x11 | 0; - x3 ^= u<<7 | u>>>(32-7); - u = x3 + x15 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x3 | 0; - x11 ^= u<<13 | u>>>(32-13); - u = x11 + x7 | 0; - x15 ^= u<<18 | u>>>(32-18); - - u = x0 + x3 | 0; - x1 ^= u<<7 | u>>>(32-7); - u = x1 + x0 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x1 | 0; - x3 ^= u<<13 | u>>>(32-13); - u = x3 + x2 | 0; - x0 ^= u<<18 | u>>>(32-18); - - u = x5 + x4 | 0; - x6 ^= u<<7 | u>>>(32-7); - u = x6 + x5 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x6 | 0; - x4 ^= u<<13 | u>>>(32-13); - u = x4 + x7 | 0; - x5 ^= u<<18 | u>>>(32-18); - - u = x10 + x9 | 0; - x11 ^= u<<7 | u>>>(32-7); - u = x11 + x10 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x11 | 0; - x9 ^= u<<13 | u>>>(32-13); - u = x9 + x8 | 0; - x10 ^= u<<18 | u>>>(32-18); - - u = x15 + x14 | 0; - x12 ^= u<<7 | u>>>(32-7); - u = x12 + x15 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x12 | 0; - x14 ^= u<<13 | u>>>(32-13); - u = x14 + x13 | 0; - x15 ^= u<<18 | u>>>(32-18); - } - x0 = x0 + j0 | 0; - x1 = x1 + j1 | 0; - x2 = x2 + j2 | 0; - x3 = x3 + j3 | 0; - x4 = x4 + j4 | 0; - x5 = x5 + j5 | 0; - x6 = x6 + j6 | 0; - x7 = x7 + j7 | 0; - x8 = x8 + j8 | 0; - x9 = x9 + j9 | 0; - x10 = x10 + j10 | 0; - x11 = x11 + j11 | 0; - x12 = x12 + j12 | 0; - x13 = x13 + j13 | 0; - x14 = x14 + j14 | 0; - x15 = x15 + j15 | 0; - - o[ 0] = x0 >>> 0 & 0xff; - o[ 1] = x0 >>> 8 & 0xff; - o[ 2] = x0 >>> 16 & 0xff; - o[ 3] = x0 >>> 24 & 0xff; - - o[ 4] = x1 >>> 0 & 0xff; - o[ 5] = x1 >>> 8 & 0xff; - o[ 6] = x1 >>> 16 & 0xff; - o[ 7] = x1 >>> 24 & 0xff; - - o[ 8] = x2 >>> 0 & 0xff; - o[ 9] = x2 >>> 8 & 0xff; - o[10] = x2 >>> 16 & 0xff; - o[11] = x2 >>> 24 & 0xff; - - o[12] = x3 >>> 0 & 0xff; - o[13] = x3 >>> 8 & 0xff; - o[14] = x3 >>> 16 & 0xff; - o[15] = x3 >>> 24 & 0xff; - - o[16] = x4 >>> 0 & 0xff; - o[17] = x4 >>> 8 & 0xff; - o[18] = x4 >>> 16 & 0xff; - o[19] = x4 >>> 24 & 0xff; - - o[20] = x5 >>> 0 & 0xff; - o[21] = x5 >>> 8 & 0xff; - o[22] = x5 >>> 16 & 0xff; - o[23] = x5 >>> 24 & 0xff; - - o[24] = x6 >>> 0 & 0xff; - o[25] = x6 >>> 8 & 0xff; - o[26] = x6 >>> 16 & 0xff; - o[27] = x6 >>> 24 & 0xff; - - o[28] = x7 >>> 0 & 0xff; - o[29] = x7 >>> 8 & 0xff; - o[30] = x7 >>> 16 & 0xff; - o[31] = x7 >>> 24 & 0xff; - - o[32] = x8 >>> 0 & 0xff; - o[33] = x8 >>> 8 & 0xff; - o[34] = x8 >>> 16 & 0xff; - o[35] = x8 >>> 24 & 0xff; - - o[36] = x9 >>> 0 & 0xff; - o[37] = x9 >>> 8 & 0xff; - o[38] = x9 >>> 16 & 0xff; - o[39] = x9 >>> 24 & 0xff; - - o[40] = x10 >>> 0 & 0xff; - o[41] = x10 >>> 8 & 0xff; - o[42] = x10 >>> 16 & 0xff; - o[43] = x10 >>> 24 & 0xff; - - o[44] = x11 >>> 0 & 0xff; - o[45] = x11 >>> 8 & 0xff; - o[46] = x11 >>> 16 & 0xff; - o[47] = x11 >>> 24 & 0xff; - - o[48] = x12 >>> 0 & 0xff; - o[49] = x12 >>> 8 & 0xff; - o[50] = x12 >>> 16 & 0xff; - o[51] = x12 >>> 24 & 0xff; - - o[52] = x13 >>> 0 & 0xff; - o[53] = x13 >>> 8 & 0xff; - o[54] = x13 >>> 16 & 0xff; - o[55] = x13 >>> 24 & 0xff; - - o[56] = x14 >>> 0 & 0xff; - o[57] = x14 >>> 8 & 0xff; - o[58] = x14 >>> 16 & 0xff; - o[59] = x14 >>> 24 & 0xff; - - o[60] = x15 >>> 0 & 0xff; - o[61] = x15 >>> 8 & 0xff; - o[62] = x15 >>> 16 & 0xff; - o[63] = x15 >>> 24 & 0xff; -} - -function core_hsalsa20(o,p,k,c) { - var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, - j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, - j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, - j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, - j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, - j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, - j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, - j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, - j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, - j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, - j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, - j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, - j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, - j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, - j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, - j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; - - var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, - x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, - x15 = j15, u; - - for (var i = 0; i < 20; i += 2) { - u = x0 + x12 | 0; - x4 ^= u<<7 | u>>>(32-7); - u = x4 + x0 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x4 | 0; - x12 ^= u<<13 | u>>>(32-13); - u = x12 + x8 | 0; - x0 ^= u<<18 | u>>>(32-18); - - u = x5 + x1 | 0; - x9 ^= u<<7 | u>>>(32-7); - u = x9 + x5 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x9 | 0; - x1 ^= u<<13 | u>>>(32-13); - u = x1 + x13 | 0; - x5 ^= u<<18 | u>>>(32-18); - - u = x10 + x6 | 0; - x14 ^= u<<7 | u>>>(32-7); - u = x14 + x10 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x14 | 0; - x6 ^= u<<13 | u>>>(32-13); - u = x6 + x2 | 0; - x10 ^= u<<18 | u>>>(32-18); - - u = x15 + x11 | 0; - x3 ^= u<<7 | u>>>(32-7); - u = x3 + x15 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x3 | 0; - x11 ^= u<<13 | u>>>(32-13); - u = x11 + x7 | 0; - x15 ^= u<<18 | u>>>(32-18); - - u = x0 + x3 | 0; - x1 ^= u<<7 | u>>>(32-7); - u = x1 + x0 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x1 | 0; - x3 ^= u<<13 | u>>>(32-13); - u = x3 + x2 | 0; - x0 ^= u<<18 | u>>>(32-18); - - u = x5 + x4 | 0; - x6 ^= u<<7 | u>>>(32-7); - u = x6 + x5 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x6 | 0; - x4 ^= u<<13 | u>>>(32-13); - u = x4 + x7 | 0; - x5 ^= u<<18 | u>>>(32-18); - - u = x10 + x9 | 0; - x11 ^= u<<7 | u>>>(32-7); - u = x11 + x10 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x11 | 0; - x9 ^= u<<13 | u>>>(32-13); - u = x9 + x8 | 0; - x10 ^= u<<18 | u>>>(32-18); - - u = x15 + x14 | 0; - x12 ^= u<<7 | u>>>(32-7); - u = x12 + x15 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x12 | 0; - x14 ^= u<<13 | u>>>(32-13); - u = x14 + x13 | 0; - x15 ^= u<<18 | u>>>(32-18); - } - - o[ 0] = x0 >>> 0 & 0xff; - o[ 1] = x0 >>> 8 & 0xff; - o[ 2] = x0 >>> 16 & 0xff; - o[ 3] = x0 >>> 24 & 0xff; - - o[ 4] = x5 >>> 0 & 0xff; - o[ 5] = x5 >>> 8 & 0xff; - o[ 6] = x5 >>> 16 & 0xff; - o[ 7] = x5 >>> 24 & 0xff; - - o[ 8] = x10 >>> 0 & 0xff; - o[ 9] = x10 >>> 8 & 0xff; - o[10] = x10 >>> 16 & 0xff; - o[11] = x10 >>> 24 & 0xff; - - o[12] = x15 >>> 0 & 0xff; - o[13] = x15 >>> 8 & 0xff; - o[14] = x15 >>> 16 & 0xff; - o[15] = x15 >>> 24 & 0xff; - - o[16] = x6 >>> 0 & 0xff; - o[17] = x6 >>> 8 & 0xff; - o[18] = x6 >>> 16 & 0xff; - o[19] = x6 >>> 24 & 0xff; - - o[20] = x7 >>> 0 & 0xff; - o[21] = x7 >>> 8 & 0xff; - o[22] = x7 >>> 16 & 0xff; - o[23] = x7 >>> 24 & 0xff; - - o[24] = x8 >>> 0 & 0xff; - o[25] = x8 >>> 8 & 0xff; - o[26] = x8 >>> 16 & 0xff; - o[27] = x8 >>> 24 & 0xff; - - o[28] = x9 >>> 0 & 0xff; - o[29] = x9 >>> 8 & 0xff; - o[30] = x9 >>> 16 & 0xff; - o[31] = x9 >>> 24 & 0xff; -} - -function crypto_core_salsa20(out,inp,k,c) { - core_salsa20(out,inp,k,c); -} - -function crypto_core_hsalsa20(out,inp,k,c) { - core_hsalsa20(out,inp,k,c); -} - -var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); - // "expand 32-byte k" - -function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { - var z = new Uint8Array(16), x = new Uint8Array(64); - var u, i; - for (i = 0; i < 16; i++) z[i] = 0; - for (i = 0; i < 8; i++) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; - u = 1; - for (i = 8; i < 16; i++) { - u = u + (z[i] & 0xff) | 0; - z[i] = u & 0xff; - u >>>= 8; - } - b -= 64; - cpos += 64; - mpos += 64; - } - if (b > 0) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; - } - return 0; -} - -function crypto_stream_salsa20(c,cpos,b,n,k) { - var z = new Uint8Array(16), x = new Uint8Array(64); - var u, i; - for (i = 0; i < 16; i++) z[i] = 0; - for (i = 0; i < 8; i++) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < 64; i++) c[cpos+i] = x[i]; - u = 1; - for (i = 8; i < 16; i++) { - u = u + (z[i] & 0xff) | 0; - z[i] = u & 0xff; - u >>>= 8; - } - b -= 64; - cpos += 64; - } - if (b > 0) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < b; i++) c[cpos+i] = x[i]; - } - return 0; -} - -function crypto_stream(c,cpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - var sn = new Uint8Array(8); - for (var i = 0; i < 8; i++) sn[i] = n[i+16]; - return crypto_stream_salsa20(c,cpos,d,sn,s); -} - -function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - var sn = new Uint8Array(8); - for (var i = 0; i < 8; i++) sn[i] = n[i+16]; - return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); -} - -/* -* Port of Andrew Moon's Poly1305-donna-16. Public domain. -* https://github.com/floodyberry/poly1305-donna -*/ - -var poly1305 = function(key) { - this.buffer = new Uint8Array(16); - this.r = new Uint16Array(10); - this.h = new Uint16Array(10); - this.pad = new Uint16Array(8); - this.leftover = 0; - this.fin = 0; - - var t0, t1, t2, t3, t4, t5, t6, t7; - - t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; - t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; - t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; - t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; - t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; - this.r[5] = ((t4 >>> 1)) & 0x1ffe; - t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; - t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; - t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; - this.r[9] = ((t7 >>> 5)) & 0x007f; - - this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; - this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; - this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; - this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; - this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; - this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; - this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; - this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; -}; - -poly1305.prototype.blocks = function(m, mpos, bytes) { - var hibit = this.fin ? 0 : (1 << 11); - var t0, t1, t2, t3, t4, t5, t6, t7, c; - var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; - - var h0 = this.h[0], - h1 = this.h[1], - h2 = this.h[2], - h3 = this.h[3], - h4 = this.h[4], - h5 = this.h[5], - h6 = this.h[6], - h7 = this.h[7], - h8 = this.h[8], - h9 = this.h[9]; - - var r0 = this.r[0], - r1 = this.r[1], - r2 = this.r[2], - r3 = this.r[3], - r4 = this.r[4], - r5 = this.r[5], - r6 = this.r[6], - r7 = this.r[7], - r8 = this.r[8], - r9 = this.r[9]; - - while (bytes >= 16) { - t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; - t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; - t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; - t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; - t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; - h5 += ((t4 >>> 1)) & 0x1fff; - t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; - t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; - t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; - h9 += ((t7 >>> 5)) | hibit; - - c = 0; - - d0 = c; - d0 += h0 * r0; - d0 += h1 * (5 * r9); - d0 += h2 * (5 * r8); - d0 += h3 * (5 * r7); - d0 += h4 * (5 * r6); - c = (d0 >>> 13); d0 &= 0x1fff; - d0 += h5 * (5 * r5); - d0 += h6 * (5 * r4); - d0 += h7 * (5 * r3); - d0 += h8 * (5 * r2); - d0 += h9 * (5 * r1); - c += (d0 >>> 13); d0 &= 0x1fff; - - d1 = c; - d1 += h0 * r1; - d1 += h1 * r0; - d1 += h2 * (5 * r9); - d1 += h3 * (5 * r8); - d1 += h4 * (5 * r7); - c = (d1 >>> 13); d1 &= 0x1fff; - d1 += h5 * (5 * r6); - d1 += h6 * (5 * r5); - d1 += h7 * (5 * r4); - d1 += h8 * (5 * r3); - d1 += h9 * (5 * r2); - c += (d1 >>> 13); d1 &= 0x1fff; - - d2 = c; - d2 += h0 * r2; - d2 += h1 * r1; - d2 += h2 * r0; - d2 += h3 * (5 * r9); - d2 += h4 * (5 * r8); - c = (d2 >>> 13); d2 &= 0x1fff; - d2 += h5 * (5 * r7); - d2 += h6 * (5 * r6); - d2 += h7 * (5 * r5); - d2 += h8 * (5 * r4); - d2 += h9 * (5 * r3); - c += (d2 >>> 13); d2 &= 0x1fff; - - d3 = c; - d3 += h0 * r3; - d3 += h1 * r2; - d3 += h2 * r1; - d3 += h3 * r0; - d3 += h4 * (5 * r9); - c = (d3 >>> 13); d3 &= 0x1fff; - d3 += h5 * (5 * r8); - d3 += h6 * (5 * r7); - d3 += h7 * (5 * r6); - d3 += h8 * (5 * r5); - d3 += h9 * (5 * r4); - c += (d3 >>> 13); d3 &= 0x1fff; - - d4 = c; - d4 += h0 * r4; - d4 += h1 * r3; - d4 += h2 * r2; - d4 += h3 * r1; - d4 += h4 * r0; - c = (d4 >>> 13); d4 &= 0x1fff; - d4 += h5 * (5 * r9); - d4 += h6 * (5 * r8); - d4 += h7 * (5 * r7); - d4 += h8 * (5 * r6); - d4 += h9 * (5 * r5); - c += (d4 >>> 13); d4 &= 0x1fff; - - d5 = c; - d5 += h0 * r5; - d5 += h1 * r4; - d5 += h2 * r3; - d5 += h3 * r2; - d5 += h4 * r1; - c = (d5 >>> 13); d5 &= 0x1fff; - d5 += h5 * r0; - d5 += h6 * (5 * r9); - d5 += h7 * (5 * r8); - d5 += h8 * (5 * r7); - d5 += h9 * (5 * r6); - c += (d5 >>> 13); d5 &= 0x1fff; - - d6 = c; - d6 += h0 * r6; - d6 += h1 * r5; - d6 += h2 * r4; - d6 += h3 * r3; - d6 += h4 * r2; - c = (d6 >>> 13); d6 &= 0x1fff; - d6 += h5 * r1; - d6 += h6 * r0; - d6 += h7 * (5 * r9); - d6 += h8 * (5 * r8); - d6 += h9 * (5 * r7); - c += (d6 >>> 13); d6 &= 0x1fff; - - d7 = c; - d7 += h0 * r7; - d7 += h1 * r6; - d7 += h2 * r5; - d7 += h3 * r4; - d7 += h4 * r3; - c = (d7 >>> 13); d7 &= 0x1fff; - d7 += h5 * r2; - d7 += h6 * r1; - d7 += h7 * r0; - d7 += h8 * (5 * r9); - d7 += h9 * (5 * r8); - c += (d7 >>> 13); d7 &= 0x1fff; - - d8 = c; - d8 += h0 * r8; - d8 += h1 * r7; - d8 += h2 * r6; - d8 += h3 * r5; - d8 += h4 * r4; - c = (d8 >>> 13); d8 &= 0x1fff; - d8 += h5 * r3; - d8 += h6 * r2; - d8 += h7 * r1; - d8 += h8 * r0; - d8 += h9 * (5 * r9); - c += (d8 >>> 13); d8 &= 0x1fff; - - d9 = c; - d9 += h0 * r9; - d9 += h1 * r8; - d9 += h2 * r7; - d9 += h3 * r6; - d9 += h4 * r5; - c = (d9 >>> 13); d9 &= 0x1fff; - d9 += h5 * r4; - d9 += h6 * r3; - d9 += h7 * r2; - d9 += h8 * r1; - d9 += h9 * r0; - c += (d9 >>> 13); d9 &= 0x1fff; - - c = (((c << 2) + c)) | 0; - c = (c + d0) | 0; - d0 = c & 0x1fff; - c = (c >>> 13); - d1 += c; - - h0 = d0; - h1 = d1; - h2 = d2; - h3 = d3; - h4 = d4; - h5 = d5; - h6 = d6; - h7 = d7; - h8 = d8; - h9 = d9; - - mpos += 16; - bytes -= 16; - } - this.h[0] = h0; - this.h[1] = h1; - this.h[2] = h2; - this.h[3] = h3; - this.h[4] = h4; - this.h[5] = h5; - this.h[6] = h6; - this.h[7] = h7; - this.h[8] = h8; - this.h[9] = h9; -}; - -poly1305.prototype.finish = function(mac, macpos) { - var g = new Uint16Array(10); - var c, mask, f, i; - - if (this.leftover) { - i = this.leftover; - this.buffer[i++] = 1; - for (; i < 16; i++) this.buffer[i] = 0; - this.fin = 1; - this.blocks(this.buffer, 0, 16); - } - - c = this.h[1] >>> 13; - this.h[1] &= 0x1fff; - for (i = 2; i < 10; i++) { - this.h[i] += c; - c = this.h[i] >>> 13; - this.h[i] &= 0x1fff; - } - this.h[0] += (c * 5); - c = this.h[0] >>> 13; - this.h[0] &= 0x1fff; - this.h[1] += c; - c = this.h[1] >>> 13; - this.h[1] &= 0x1fff; - this.h[2] += c; - - g[0] = this.h[0] + 5; - c = g[0] >>> 13; - g[0] &= 0x1fff; - for (i = 1; i < 10; i++) { - g[i] = this.h[i] + c; - c = g[i] >>> 13; - g[i] &= 0x1fff; - } - g[9] -= (1 << 13); - - mask = (c ^ 1) - 1; - for (i = 0; i < 10; i++) g[i] &= mask; - mask = ~mask; - for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; - - this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; - this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; - this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; - this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; - this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; - this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; - this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; - this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; - - f = this.h[0] + this.pad[0]; - this.h[0] = f & 0xffff; - for (i = 1; i < 8; i++) { - f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; - this.h[i] = f & 0xffff; - } - - mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; - mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; - mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; - mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; - mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; - mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; - mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; - mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; - mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; - mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; - mac[macpos+10] = (this.h[5] >>> 0) & 0xff; - mac[macpos+11] = (this.h[5] >>> 8) & 0xff; - mac[macpos+12] = (this.h[6] >>> 0) & 0xff; - mac[macpos+13] = (this.h[6] >>> 8) & 0xff; - mac[macpos+14] = (this.h[7] >>> 0) & 0xff; - mac[macpos+15] = (this.h[7] >>> 8) & 0xff; -}; - -poly1305.prototype.update = function(m, mpos, bytes) { - var i, want; - - if (this.leftover) { - want = (16 - this.leftover); - if (want > bytes) - want = bytes; - for (i = 0; i < want; i++) - this.buffer[this.leftover + i] = m[mpos+i]; - bytes -= want; - mpos += want; - this.leftover += want; - if (this.leftover < 16) - return; - this.blocks(this.buffer, 0, 16); - this.leftover = 0; - } - - if (bytes >= 16) { - want = bytes - (bytes % 16); - this.blocks(m, mpos, want); - mpos += want; - bytes -= want; - } - - if (bytes) { - for (i = 0; i < bytes; i++) - this.buffer[this.leftover + i] = m[mpos+i]; - this.leftover += bytes; - } -}; - -function crypto_onetimeauth(out, outpos, m, mpos, n, k) { - var s = new poly1305(k); - s.update(m, mpos, n); - s.finish(out, outpos); - return 0; -} - -function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { - var x = new Uint8Array(16); - crypto_onetimeauth(x,0,m,mpos,n,k); - return crypto_verify_16(h,hpos,x,0); -} - -function crypto_secretbox(c,m,d,n,k) { - var i; - if (d < 32) return -1; - crypto_stream_xor(c,0,m,0,d,n,k); - crypto_onetimeauth(c, 16, c, 32, d - 32, c); - for (i = 0; i < 16; i++) c[i] = 0; - return 0; -} - -function crypto_secretbox_open(m,c,d,n,k) { - var i; - var x = new Uint8Array(32); - if (d < 32) return -1; - crypto_stream(x,0,32,n,k); - if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; - crypto_stream_xor(m,0,c,0,d,n,k); - for (i = 0; i < 32; i++) m[i] = 0; - return 0; -} - -function set25519(r, a) { - var i; - for (i = 0; i < 16; i++) r[i] = a[i]|0; -} - -function car25519(o) { - var i, v, c = 1; - for (i = 0; i < 16; i++) { - v = o[i] + c + 65535; - c = Math.floor(v / 65536); - o[i] = v - c * 65536; - } - o[0] += c-1 + 37 * (c-1); -} - -function sel25519(p, q, b) { - var t, c = ~(b-1); - for (var i = 0; i < 16; i++) { - t = c & (p[i] ^ q[i]); - p[i] ^= t; - q[i] ^= t; - } -} - -function pack25519(o, n) { - var i, j, b; - var m = gf(), t = gf(); - for (i = 0; i < 16; i++) t[i] = n[i]; - car25519(t); - car25519(t); - car25519(t); - for (j = 0; j < 2; j++) { - m[0] = t[0] - 0xffed; - for (i = 1; i < 15; i++) { - m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); - m[i-1] &= 0xffff; - } - m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); - b = (m[15]>>16) & 1; - m[14] &= 0xffff; - sel25519(t, m, 1-b); - } - for (i = 0; i < 16; i++) { - o[2*i] = t[i] & 0xff; - o[2*i+1] = t[i]>>8; - } -} - -function neq25519(a, b) { - var c = new Uint8Array(32), d = new Uint8Array(32); - pack25519(c, a); - pack25519(d, b); - return crypto_verify_32(c, 0, d, 0); -} - -function par25519(a) { - var d = new Uint8Array(32); - pack25519(d, a); - return d[0] & 1; -} - -function unpack25519(o, n) { - var i; - for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); - o[15] &= 0x7fff; -} - -function A(o, a, b) { - for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; -} - -function Z(o, a, b) { - for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; -} - -function M(o, a, b) { - var v, c, - t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, - t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, - t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, - t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, - b0 = b[0], - b1 = b[1], - b2 = b[2], - b3 = b[3], - b4 = b[4], - b5 = b[5], - b6 = b[6], - b7 = b[7], - b8 = b[8], - b9 = b[9], - b10 = b[10], - b11 = b[11], - b12 = b[12], - b13 = b[13], - b14 = b[14], - b15 = b[15]; - - v = a[0]; - t0 += v * b0; - t1 += v * b1; - t2 += v * b2; - t3 += v * b3; - t4 += v * b4; - t5 += v * b5; - t6 += v * b6; - t7 += v * b7; - t8 += v * b8; - t9 += v * b9; - t10 += v * b10; - t11 += v * b11; - t12 += v * b12; - t13 += v * b13; - t14 += v * b14; - t15 += v * b15; - v = a[1]; - t1 += v * b0; - t2 += v * b1; - t3 += v * b2; - t4 += v * b3; - t5 += v * b4; - t6 += v * b5; - t7 += v * b6; - t8 += v * b7; - t9 += v * b8; - t10 += v * b9; - t11 += v * b10; - t12 += v * b11; - t13 += v * b12; - t14 += v * b13; - t15 += v * b14; - t16 += v * b15; - v = a[2]; - t2 += v * b0; - t3 += v * b1; - t4 += v * b2; - t5 += v * b3; - t6 += v * b4; - t7 += v * b5; - t8 += v * b6; - t9 += v * b7; - t10 += v * b8; - t11 += v * b9; - t12 += v * b10; - t13 += v * b11; - t14 += v * b12; - t15 += v * b13; - t16 += v * b14; - t17 += v * b15; - v = a[3]; - t3 += v * b0; - t4 += v * b1; - t5 += v * b2; - t6 += v * b3; - t7 += v * b4; - t8 += v * b5; - t9 += v * b6; - t10 += v * b7; - t11 += v * b8; - t12 += v * b9; - t13 += v * b10; - t14 += v * b11; - t15 += v * b12; - t16 += v * b13; - t17 += v * b14; - t18 += v * b15; - v = a[4]; - t4 += v * b0; - t5 += v * b1; - t6 += v * b2; - t7 += v * b3; - t8 += v * b4; - t9 += v * b5; - t10 += v * b6; - t11 += v * b7; - t12 += v * b8; - t13 += v * b9; - t14 += v * b10; - t15 += v * b11; - t16 += v * b12; - t17 += v * b13; - t18 += v * b14; - t19 += v * b15; - v = a[5]; - t5 += v * b0; - t6 += v * b1; - t7 += v * b2; - t8 += v * b3; - t9 += v * b4; - t10 += v * b5; - t11 += v * b6; - t12 += v * b7; - t13 += v * b8; - t14 += v * b9; - t15 += v * b10; - t16 += v * b11; - t17 += v * b12; - t18 += v * b13; - t19 += v * b14; - t20 += v * b15; - v = a[6]; - t6 += v * b0; - t7 += v * b1; - t8 += v * b2; - t9 += v * b3; - t10 += v * b4; - t11 += v * b5; - t12 += v * b6; - t13 += v * b7; - t14 += v * b8; - t15 += v * b9; - t16 += v * b10; - t17 += v * b11; - t18 += v * b12; - t19 += v * b13; - t20 += v * b14; - t21 += v * b15; - v = a[7]; - t7 += v * b0; - t8 += v * b1; - t9 += v * b2; - t10 += v * b3; - t11 += v * b4; - t12 += v * b5; - t13 += v * b6; - t14 += v * b7; - t15 += v * b8; - t16 += v * b9; - t17 += v * b10; - t18 += v * b11; - t19 += v * b12; - t20 += v * b13; - t21 += v * b14; - t22 += v * b15; - v = a[8]; - t8 += v * b0; - t9 += v * b1; - t10 += v * b2; - t11 += v * b3; - t12 += v * b4; - t13 += v * b5; - t14 += v * b6; - t15 += v * b7; - t16 += v * b8; - t17 += v * b9; - t18 += v * b10; - t19 += v * b11; - t20 += v * b12; - t21 += v * b13; - t22 += v * b14; - t23 += v * b15; - v = a[9]; - t9 += v * b0; - t10 += v * b1; - t11 += v * b2; - t12 += v * b3; - t13 += v * b4; - t14 += v * b5; - t15 += v * b6; - t16 += v * b7; - t17 += v * b8; - t18 += v * b9; - t19 += v * b10; - t20 += v * b11; - t21 += v * b12; - t22 += v * b13; - t23 += v * b14; - t24 += v * b15; - v = a[10]; - t10 += v * b0; - t11 += v * b1; - t12 += v * b2; - t13 += v * b3; - t14 += v * b4; - t15 += v * b5; - t16 += v * b6; - t17 += v * b7; - t18 += v * b8; - t19 += v * b9; - t20 += v * b10; - t21 += v * b11; - t22 += v * b12; - t23 += v * b13; - t24 += v * b14; - t25 += v * b15; - v = a[11]; - t11 += v * b0; - t12 += v * b1; - t13 += v * b2; - t14 += v * b3; - t15 += v * b4; - t16 += v * b5; - t17 += v * b6; - t18 += v * b7; - t19 += v * b8; - t20 += v * b9; - t21 += v * b10; - t22 += v * b11; - t23 += v * b12; - t24 += v * b13; - t25 += v * b14; - t26 += v * b15; - v = a[12]; - t12 += v * b0; - t13 += v * b1; - t14 += v * b2; - t15 += v * b3; - t16 += v * b4; - t17 += v * b5; - t18 += v * b6; - t19 += v * b7; - t20 += v * b8; - t21 += v * b9; - t22 += v * b10; - t23 += v * b11; - t24 += v * b12; - t25 += v * b13; - t26 += v * b14; - t27 += v * b15; - v = a[13]; - t13 += v * b0; - t14 += v * b1; - t15 += v * b2; - t16 += v * b3; - t17 += v * b4; - t18 += v * b5; - t19 += v * b6; - t20 += v * b7; - t21 += v * b8; - t22 += v * b9; - t23 += v * b10; - t24 += v * b11; - t25 += v * b12; - t26 += v * b13; - t27 += v * b14; - t28 += v * b15; - v = a[14]; - t14 += v * b0; - t15 += v * b1; - t16 += v * b2; - t17 += v * b3; - t18 += v * b4; - t19 += v * b5; - t20 += v * b6; - t21 += v * b7; - t22 += v * b8; - t23 += v * b9; - t24 += v * b10; - t25 += v * b11; - t26 += v * b12; - t27 += v * b13; - t28 += v * b14; - t29 += v * b15; - v = a[15]; - t15 += v * b0; - t16 += v * b1; - t17 += v * b2; - t18 += v * b3; - t19 += v * b4; - t20 += v * b5; - t21 += v * b6; - t22 += v * b7; - t23 += v * b8; - t24 += v * b9; - t25 += v * b10; - t26 += v * b11; - t27 += v * b12; - t28 += v * b13; - t29 += v * b14; - t30 += v * b15; - - t0 += 38 * t16; - t1 += 38 * t17; - t2 += 38 * t18; - t3 += 38 * t19; - t4 += 38 * t20; - t5 += 38 * t21; - t6 += 38 * t22; - t7 += 38 * t23; - t8 += 38 * t24; - t9 += 38 * t25; - t10 += 38 * t26; - t11 += 38 * t27; - t12 += 38 * t28; - t13 += 38 * t29; - t14 += 38 * t30; - // t15 left as is - - // first car - c = 1; - v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; - v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; - v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; - v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; - v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; - v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; - v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; - v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; - v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; - v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; - v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; - v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; - v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; - v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; - v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; - v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; - t0 += c-1 + 37 * (c-1); - - // second car - c = 1; - v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; - v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; - v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; - v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; - v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; - v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; - v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; - v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; - v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; - v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; - v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; - v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; - v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; - v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; - v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; - v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; - t0 += c-1 + 37 * (c-1); - - o[ 0] = t0; - o[ 1] = t1; - o[ 2] = t2; - o[ 3] = t3; - o[ 4] = t4; - o[ 5] = t5; - o[ 6] = t6; - o[ 7] = t7; - o[ 8] = t8; - o[ 9] = t9; - o[10] = t10; - o[11] = t11; - o[12] = t12; - o[13] = t13; - o[14] = t14; - o[15] = t15; -} - -function S(o, a) { - M(o, a, a); -} - -function inv25519(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 253; a >= 0; a--) { - S(c, c); - if(a !== 2 && a !== 4) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} - -function pow2523(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 250; a >= 0; a--) { - S(c, c); - if(a !== 1) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} - -function crypto_scalarmult(q, n, p) { - var z = new Uint8Array(32); - var x = new Float64Array(80), r, i; - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(); - for (i = 0; i < 31; i++) z[i] = n[i]; - z[31]=(n[31]&127)|64; - z[0]&=248; - unpack25519(x,p); - for (i = 0; i < 16; i++) { - b[i]=x[i]; - d[i]=a[i]=c[i]=0; - } - a[0]=d[0]=1; - for (i=254; i>=0; --i) { - r=(z[i>>>3]>>>(i&7))&1; - sel25519(a,b,r); - sel25519(c,d,r); - A(e,a,c); - Z(a,a,c); - A(c,b,d); - Z(b,b,d); - S(d,e); - S(f,a); - M(a,c,a); - M(c,b,e); - A(e,a,c); - Z(a,a,c); - S(b,a); - Z(c,d,f); - M(a,c,_121665); - A(a,a,d); - M(c,c,a); - M(a,d,f); - M(d,b,x); - S(b,e); - sel25519(a,b,r); - sel25519(c,d,r); - } - for (i = 0; i < 16; i++) { - x[i+16]=a[i]; - x[i+32]=c[i]; - x[i+48]=b[i]; - x[i+64]=d[i]; - } - var x32 = x.subarray(32); - var x16 = x.subarray(16); - inv25519(x32,x32); - M(x16,x16,x32); - pack25519(q,x16); - return 0; -} - -function crypto_scalarmult_base(q, n) { - return crypto_scalarmult(q, n, _9); -} - -function crypto_box_keypair(y, x) { - randombytes(x, 32); - return crypto_scalarmult_base(y, x); -} - -function crypto_box_beforenm(k, y, x) { - var s = new Uint8Array(32); - crypto_scalarmult(s, x, y); - return crypto_core_hsalsa20(k, _0, s, sigma); -} - -var crypto_box_afternm = crypto_secretbox; -var crypto_box_open_afternm = crypto_secretbox_open; - -function crypto_box(c, m, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_afternm(c, m, d, n, k); -} - -function crypto_box_open(m, c, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_open_afternm(m, c, d, n, k); -} - -var K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; - -function crypto_hashblocks_hl(hh, hl, m, n) { - var wh = new Int32Array(16), wl = new Int32Array(16), - bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, - bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, - th, tl, i, j, h, l, a, b, c, d; - - var ah0 = hh[0], - ah1 = hh[1], - ah2 = hh[2], - ah3 = hh[3], - ah4 = hh[4], - ah5 = hh[5], - ah6 = hh[6], - ah7 = hh[7], - - al0 = hl[0], - al1 = hl[1], - al2 = hl[2], - al3 = hl[3], - al4 = hl[4], - al5 = hl[5], - al6 = hl[6], - al7 = hl[7]; - - var pos = 0; - while (n >= 128) { - for (i = 0; i < 16; i++) { - j = 8 * i + pos; - wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; - wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; - } - for (i = 0; i < 80; i++) { - bh0 = ah0; - bh1 = ah1; - bh2 = ah2; - bh3 = ah3; - bh4 = ah4; - bh5 = ah5; - bh6 = ah6; - bh7 = ah7; - - bl0 = al0; - bl1 = al1; - bl2 = al2; - bl3 = al3; - bl4 = al4; - bl5 = al5; - bl6 = al6; - bl7 = al7; - - // add - h = ah7; - l = al7; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - // Sigma1 - h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); - l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // Ch - h = (ah4 & ah5) ^ (~ah4 & ah6); - l = (al4 & al5) ^ (~al4 & al6); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // K - h = K[i*2]; - l = K[i*2+1]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // w - h = wh[i%16]; - l = wl[i%16]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - th = c & 0xffff | d << 16; - tl = a & 0xffff | b << 16; - - // add - h = th; - l = tl; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - // Sigma0 - h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); - l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // Maj - h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); - l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - bh7 = (c & 0xffff) | (d << 16); - bl7 = (a & 0xffff) | (b << 16); - - // add - h = bh3; - l = bl3; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = th; - l = tl; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - bh3 = (c & 0xffff) | (d << 16); - bl3 = (a & 0xffff) | (b << 16); - - ah1 = bh0; - ah2 = bh1; - ah3 = bh2; - ah4 = bh3; - ah5 = bh4; - ah6 = bh5; - ah7 = bh6; - ah0 = bh7; - - al1 = bl0; - al2 = bl1; - al3 = bl2; - al4 = bl3; - al5 = bl4; - al6 = bl5; - al7 = bl6; - al0 = bl7; - - if (i%16 === 15) { - for (j = 0; j < 16; j++) { - // add - h = wh[j]; - l = wl[j]; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = wh[(j+9)%16]; - l = wl[(j+9)%16]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // sigma0 - th = wh[(j+1)%16]; - tl = wl[(j+1)%16]; - h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); - l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // sigma1 - th = wh[(j+14)%16]; - tl = wl[(j+14)%16]; - h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); - l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - wh[j] = (c & 0xffff) | (d << 16); - wl[j] = (a & 0xffff) | (b << 16); - } - } - } - - // add - h = ah0; - l = al0; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[0]; - l = hl[0]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[0] = ah0 = (c & 0xffff) | (d << 16); - hl[0] = al0 = (a & 0xffff) | (b << 16); - - h = ah1; - l = al1; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[1]; - l = hl[1]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[1] = ah1 = (c & 0xffff) | (d << 16); - hl[1] = al1 = (a & 0xffff) | (b << 16); - - h = ah2; - l = al2; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[2]; - l = hl[2]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[2] = ah2 = (c & 0xffff) | (d << 16); - hl[2] = al2 = (a & 0xffff) | (b << 16); - - h = ah3; - l = al3; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[3]; - l = hl[3]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[3] = ah3 = (c & 0xffff) | (d << 16); - hl[3] = al3 = (a & 0xffff) | (b << 16); - - h = ah4; - l = al4; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[4]; - l = hl[4]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[4] = ah4 = (c & 0xffff) | (d << 16); - hl[4] = al4 = (a & 0xffff) | (b << 16); - - h = ah5; - l = al5; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[5]; - l = hl[5]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[5] = ah5 = (c & 0xffff) | (d << 16); - hl[5] = al5 = (a & 0xffff) | (b << 16); - - h = ah6; - l = al6; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[6]; - l = hl[6]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[6] = ah6 = (c & 0xffff) | (d << 16); - hl[6] = al6 = (a & 0xffff) | (b << 16); - - h = ah7; - l = al7; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[7]; - l = hl[7]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[7] = ah7 = (c & 0xffff) | (d << 16); - hl[7] = al7 = (a & 0xffff) | (b << 16); - - pos += 128; - n -= 128; - } - - return n; -} - -function crypto_hash(out, m, n) { - var hh = new Int32Array(8), - hl = new Int32Array(8), - x = new Uint8Array(256), - i, b = n; - - hh[0] = 0x6a09e667; - hh[1] = 0xbb67ae85; - hh[2] = 0x3c6ef372; - hh[3] = 0xa54ff53a; - hh[4] = 0x510e527f; - hh[5] = 0x9b05688c; - hh[6] = 0x1f83d9ab; - hh[7] = 0x5be0cd19; - - hl[0] = 0xf3bcc908; - hl[1] = 0x84caa73b; - hl[2] = 0xfe94f82b; - hl[3] = 0x5f1d36f1; - hl[4] = 0xade682d1; - hl[5] = 0x2b3e6c1f; - hl[6] = 0xfb41bd6b; - hl[7] = 0x137e2179; - - crypto_hashblocks_hl(hh, hl, m, n); - n %= 128; - - for (i = 0; i < n; i++) x[i] = m[b-n+i]; - x[n] = 128; - - n = 256-128*(n<112?1:0); - x[n-9] = 0; - ts64(x, n-8, (b / 0x20000000) | 0, b << 3); - crypto_hashblocks_hl(hh, hl, x, n); - - for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); - - return 0; -} - -function add(p, q) { - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(), - g = gf(), h = gf(), t = gf(); - - Z(a, p[1], p[0]); - Z(t, q[1], q[0]); - M(a, a, t); - A(b, p[0], p[1]); - A(t, q[0], q[1]); - M(b, b, t); - M(c, p[3], q[3]); - M(c, c, D2); - M(d, p[2], q[2]); - A(d, d, d); - Z(e, b, a); - Z(f, d, c); - A(g, d, c); - A(h, b, a); - - M(p[0], e, f); - M(p[1], h, g); - M(p[2], g, f); - M(p[3], e, h); -} - -function cswap(p, q, b) { - var i; - for (i = 0; i < 4; i++) { - sel25519(p[i], q[i], b); - } -} - -function pack(r, p) { - var tx = gf(), ty = gf(), zi = gf(); - inv25519(zi, p[2]); - M(tx, p[0], zi); - M(ty, p[1], zi); - pack25519(r, ty); - r[31] ^= par25519(tx) << 7; -} - -function scalarmult(p, q, s) { - var b, i; - set25519(p[0], gf0); - set25519(p[1], gf1); - set25519(p[2], gf1); - set25519(p[3], gf0); - for (i = 255; i >= 0; --i) { - b = (s[(i/8)|0] >> (i&7)) & 1; - cswap(p, q, b); - add(q, p); - add(p, p); - cswap(p, q, b); - } -} - -function scalarbase(p, s) { - var q = [gf(), gf(), gf(), gf()]; - set25519(q[0], X); - set25519(q[1], Y); - set25519(q[2], gf1); - M(q[3], X, Y); - scalarmult(p, q, s); -} - -function crypto_sign_keypair(pk, sk, seeded) { - var d = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()]; - var i; - - if (!seeded) randombytes(sk, 32); - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - scalarbase(p, d); - pack(pk, p); - - for (i = 0; i < 32; i++) sk[i+32] = pk[i]; - return 0; -} - -var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); - -function modL(r, x) { - var carry, i, j, k; - for (i = 63; i >= 32; --i) { - carry = 0; - for (j = i - 32, k = i - 12; j < k; ++j) { - x[j] += carry - 16 * x[i] * L[j - (i - 32)]; - carry = (x[j] + 128) >> 8; - x[j] -= carry * 256; - } - x[j] += carry; - x[i] = 0; - } - carry = 0; - for (j = 0; j < 32; j++) { - x[j] += carry - (x[31] >> 4) * L[j]; - carry = x[j] >> 8; - x[j] &= 255; - } - for (j = 0; j < 32; j++) x[j] -= carry * L[j]; - for (i = 0; i < 32; i++) { - x[i+1] += x[i] >> 8; - r[i] = x[i] & 255; - } -} - -function reduce(r) { - var x = new Float64Array(64), i; - for (i = 0; i < 64; i++) x[i] = r[i]; - for (i = 0; i < 64; i++) r[i] = 0; - modL(r, x); -} - -// Note: difference from C - smlen returned, not passed as argument. -function crypto_sign(sm, m, n, sk) { - var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); - var i, j, x = new Float64Array(64); - var p = [gf(), gf(), gf(), gf()]; - - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - var smlen = n + 64; - for (i = 0; i < n; i++) sm[64 + i] = m[i]; - for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; - - crypto_hash(r, sm.subarray(32), n+32); - reduce(r); - scalarbase(p, r); - pack(sm, p); - - for (i = 32; i < 64; i++) sm[i] = sk[i]; - crypto_hash(h, sm, n + 64); - reduce(h); - - for (i = 0; i < 64; i++) x[i] = 0; - for (i = 0; i < 32; i++) x[i] = r[i]; - for (i = 0; i < 32; i++) { - for (j = 0; j < 32; j++) { - x[i+j] += h[i] * d[j]; - } - } - - modL(sm.subarray(32), x); - return smlen; -} - -function unpackneg(r, p) { - var t = gf(), chk = gf(), num = gf(), - den = gf(), den2 = gf(), den4 = gf(), - den6 = gf(); - - set25519(r[2], gf1); - unpack25519(r[1], p); - S(num, r[1]); - M(den, num, D); - Z(num, num, r[2]); - A(den, r[2], den); - - S(den2, den); - S(den4, den2); - M(den6, den4, den2); - M(t, den6, num); - M(t, t, den); - - pow2523(t, t); - M(t, t, num); - M(t, t, den); - M(t, t, den); - M(r[0], t, den); - - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) M(r[0], r[0], I); - - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) return -1; - - if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); - - M(r[3], r[0], r[1]); - return 0; -} - -function crypto_sign_open(m, sm, n, pk) { - var i, mlen; - var t = new Uint8Array(32), h = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()], - q = [gf(), gf(), gf(), gf()]; - - mlen = -1; - if (n < 64) return -1; - - if (unpackneg(q, pk)) return -1; - - for (i = 0; i < n; i++) m[i] = sm[i]; - for (i = 0; i < 32; i++) m[i+32] = pk[i]; - crypto_hash(h, m, n); - reduce(h); - scalarmult(p, q, h); - - scalarbase(q, sm.subarray(32)); - add(p, q); - pack(t, p); - - n -= 64; - if (crypto_verify_32(sm, 0, t, 0)) { - for (i = 0; i < n; i++) m[i] = 0; - return -1; - } - - for (i = 0; i < n; i++) m[i] = sm[i + 64]; - mlen = n; - return mlen; -} - -var crypto_secretbox_KEYBYTES = 32, - crypto_secretbox_NONCEBYTES = 24, - crypto_secretbox_ZEROBYTES = 32, - crypto_secretbox_BOXZEROBYTES = 16, - crypto_scalarmult_BYTES = 32, - crypto_scalarmult_SCALARBYTES = 32, - crypto_box_PUBLICKEYBYTES = 32, - crypto_box_SECRETKEYBYTES = 32, - crypto_box_BEFORENMBYTES = 32, - crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, - crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, - crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, - crypto_sign_BYTES = 64, - crypto_sign_PUBLICKEYBYTES = 32, - crypto_sign_SECRETKEYBYTES = 64, - crypto_sign_SEEDBYTES = 32, - crypto_hash_BYTES = 64; - -nacl.lowlevel = { - crypto_core_hsalsa20: crypto_core_hsalsa20, - crypto_stream_xor: crypto_stream_xor, - crypto_stream: crypto_stream, - crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, - crypto_stream_salsa20: crypto_stream_salsa20, - crypto_onetimeauth: crypto_onetimeauth, - crypto_onetimeauth_verify: crypto_onetimeauth_verify, - crypto_verify_16: crypto_verify_16, - crypto_verify_32: crypto_verify_32, - crypto_secretbox: crypto_secretbox, - crypto_secretbox_open: crypto_secretbox_open, - crypto_scalarmult: crypto_scalarmult, - crypto_scalarmult_base: crypto_scalarmult_base, - crypto_box_beforenm: crypto_box_beforenm, - crypto_box_afternm: crypto_box_afternm, - crypto_box: crypto_box, - crypto_box_open: crypto_box_open, - crypto_box_keypair: crypto_box_keypair, - crypto_hash: crypto_hash, - crypto_sign: crypto_sign, - crypto_sign_keypair: crypto_sign_keypair, - crypto_sign_open: crypto_sign_open, - - crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, - crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, - crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, - crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, - crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, - crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, - crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, - crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, - crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, - crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, - crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, - crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, - crypto_sign_BYTES: crypto_sign_BYTES, - crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, - crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, - crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, - crypto_hash_BYTES: crypto_hash_BYTES -}; - -/* High-level API */ - -function checkLengths(k, n) { - if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); - if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); -} - -function checkBoxLengths(pk, sk) { - if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); - if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); -} - -function checkArrayTypes() { - var t, i; - for (i = 0; i < arguments.length; i++) { - if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') - throw new TypeError('unexpected type ' + t + ', use Uint8Array'); - } -} - -function cleanup(arr) { - for (var i = 0; i < arr.length; i++) arr[i] = 0; -} - -// TODO: Completely remove this in v0.15. -if (!nacl.util) { - nacl.util = {}; - nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { - throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); - }; -} - -nacl.randomBytes = function(n) { - var b = new Uint8Array(n); - randombytes(b, n); - return b; -}; - -nacl.secretbox = function(msg, nonce, key) { - checkArrayTypes(msg, nonce, key); - checkLengths(key, nonce); - var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); - var c = new Uint8Array(m.length); - for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; - crypto_secretbox(c, m, m.length, nonce, key); - return c.subarray(crypto_secretbox_BOXZEROBYTES); -}; - -nacl.secretbox.open = function(box, nonce, key) { - checkArrayTypes(box, nonce, key); - checkLengths(key, nonce); - var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); - var m = new Uint8Array(c.length); - for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; - if (c.length < 32) return false; - if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; - return m.subarray(crypto_secretbox_ZEROBYTES); -}; - -nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; -nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; -nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; - -nacl.scalarMult = function(n, p) { - checkArrayTypes(n, p); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult(q, n, p); - return q; -}; - -nacl.scalarMult.base = function(n) { - checkArrayTypes(n); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult_base(q, n); - return q; -}; - -nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; -nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; - -nacl.box = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox(msg, nonce, k); -}; - -nacl.box.before = function(publicKey, secretKey) { - checkArrayTypes(publicKey, secretKey); - checkBoxLengths(publicKey, secretKey); - var k = new Uint8Array(crypto_box_BEFORENMBYTES); - crypto_box_beforenm(k, publicKey, secretKey); - return k; -}; - -nacl.box.after = nacl.secretbox; - -nacl.box.open = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox.open(msg, nonce, k); -}; - -nacl.box.open.after = nacl.secretbox.open; - -nacl.box.keyPair = function() { - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); - crypto_box_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.box.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_box_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - crypto_scalarmult_base(pk, secretKey); - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; - -nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; -nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; -nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; -nacl.box.nonceLength = crypto_box_NONCEBYTES; -nacl.box.overheadLength = nacl.secretbox.overheadLength; - -nacl.sign = function(msg, secretKey) { - checkArrayTypes(msg, secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); - crypto_sign(signedMsg, msg, msg.length, secretKey); - return signedMsg; -}; - -nacl.sign.open = function(signedMsg, publicKey) { - if (arguments.length !== 2) - throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); - checkArrayTypes(signedMsg, publicKey); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var tmp = new Uint8Array(signedMsg.length); - var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); - if (mlen < 0) return null; - var m = new Uint8Array(mlen); - for (var i = 0; i < m.length; i++) m[i] = tmp[i]; - return m; -}; - -nacl.sign.detached = function(msg, secretKey) { - var signedMsg = nacl.sign(msg, secretKey); - var sig = new Uint8Array(crypto_sign_BYTES); - for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; - return sig; -}; - -nacl.sign.detached.verify = function(msg, sig, publicKey) { - checkArrayTypes(msg, sig, publicKey); - if (sig.length !== crypto_sign_BYTES) - throw new Error('bad signature size'); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var sm = new Uint8Array(crypto_sign_BYTES + msg.length); - var m = new Uint8Array(crypto_sign_BYTES + msg.length); - var i; - for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; - for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; - return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); -}; - -nacl.sign.keyPair = function() { - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - crypto_sign_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.sign.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; - -nacl.sign.keyPair.fromSeed = function(seed) { - checkArrayTypes(seed); - if (seed.length !== crypto_sign_SEEDBYTES) - throw new Error('bad seed size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - for (var i = 0; i < 32; i++) sk[i] = seed[i]; - crypto_sign_keypair(pk, sk, true); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; -nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; -nacl.sign.seedLength = crypto_sign_SEEDBYTES; -nacl.sign.signatureLength = crypto_sign_BYTES; - -nacl.hash = function(msg) { - checkArrayTypes(msg); - var h = new Uint8Array(crypto_hash_BYTES); - crypto_hash(h, msg, msg.length); - return h; -}; - -nacl.hash.hashLength = crypto_hash_BYTES; - -nacl.verify = function(x, y) { - checkArrayTypes(x, y); - // Zero length arguments are considered not equal. - if (x.length === 0 || y.length === 0) return false; - if (x.length !== y.length) return false; - return (vn(x, 0, y, 0, x.length) === 0) ? true : false; -}; - -nacl.setPRNG = function(fn) { - randombytes = fn; -}; - -(function() { - // Initialize PRNG if environment provides CSPRNG. - // If not, methods calling randombytes will throw. - var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; - if (crypto && crypto.getRandomValues) { - // Browsers. - var QUOTA = 65536; - nacl.setPRNG(function(x, n) { - var i, v = new Uint8Array(n); - for (i = 0; i < n; i += QUOTA) { - crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); - } - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } else if (typeof require !== 'undefined') { - // Node.js. - crypto = require('crypto'); - if (crypto && crypto.randomBytes) { - nacl.setPRNG(function(x, n) { - var i, v = crypto.randomBytes(n); - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } - } -})(); - -})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl-fast.min.js b/node_modules/tweetnacl/nacl-fast.min.js deleted file mode 100644 index 624fbbe..0000000 --- a/node_modules/tweetnacl/nacl-fast.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(r){"use strict";function t(r,t,n,e){r[t]=n>>24&255,r[t+1]=n>>16&255,r[t+2]=n>>8&255,r[t+3]=255&n,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function n(r,t,n,e,o){var i,h=0;for(i=0;o>i;i++)h|=r[t+i]^n[e+i];return(1&h-1>>>8)-1}function e(r,t,e,o){return n(r,t,e,o,16)}function o(r,t,e,o){return n(r,t,e,o,32)}function i(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=u,B=c,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;20>O;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;d=d+i|0,U=U+h|0,E=E+a|0,x=x+f|0,M=M+s|0,m=m+u|0,B=B+c|0,S=S+y|0,K=K+l|0,T=T+w|0,Y=Y+p|0,k=k+v|0,L=L+b|0,z=z+g|0,R=R+_|0,P=P+A|0,r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=U>>>0&255,r[5]=U>>>8&255,r[6]=U>>>16&255,r[7]=U>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=x>>>0&255,r[13]=x>>>8&255,r[14]=x>>>16&255,r[15]=x>>>24&255,r[16]=M>>>0&255,r[17]=M>>>8&255,r[18]=M>>>16&255,r[19]=M>>>24&255,r[20]=m>>>0&255,r[21]=m>>>8&255,r[22]=m>>>16&255,r[23]=m>>>24&255,r[24]=B>>>0&255,r[25]=B>>>8&255,r[26]=B>>>16&255,r[27]=B>>>24&255,r[28]=S>>>0&255,r[29]=S>>>8&255,r[30]=S>>>16&255,r[31]=S>>>24&255,r[32]=K>>>0&255,r[33]=K>>>8&255,r[34]=K>>>16&255,r[35]=K>>>24&255,r[36]=T>>>0&255,r[37]=T>>>8&255,r[38]=T>>>16&255,r[39]=T>>>24&255,r[40]=Y>>>0&255,r[41]=Y>>>8&255,r[42]=Y>>>16&255,r[43]=Y>>>24&255,r[44]=k>>>0&255,r[45]=k>>>8&255,r[46]=k>>>16&255,r[47]=k>>>24&255,r[48]=L>>>0&255,r[49]=L>>>8&255,r[50]=L>>>16&255,r[51]=L>>>24&255,r[52]=z>>>0&255,r[53]=z>>>8&255,r[54]=z>>>16&255,r[55]=z>>>24&255,r[56]=R>>>0&255,r[57]=R>>>8&255,r[58]=R>>>16&255,r[59]=R>>>24&255,r[60]=P>>>0&255,r[61]=P>>>8&255,r[62]=P>>>16&255,r[63]=P>>>24&255}function h(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=u,B=c,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;20>O;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=m>>>0&255,r[5]=m>>>8&255,r[6]=m>>>16&255,r[7]=m>>>24&255,r[8]=Y>>>0&255,r[9]=Y>>>8&255,r[10]=Y>>>16&255,r[11]=Y>>>24&255,r[12]=P>>>0&255,r[13]=P>>>8&255,r[14]=P>>>16&255,r[15]=P>>>24&255,r[16]=B>>>0&255,r[17]=B>>>8&255,r[18]=B>>>16&255,r[19]=B>>>24&255,r[20]=S>>>0&255,r[21]=S>>>8&255,r[22]=S>>>16&255,r[23]=S>>>24&255,r[24]=K>>>0&255,r[25]=K>>>8&255,r[26]=K>>>16&255,r[27]=K>>>24&255,r[28]=T>>>0&255,r[29]=T>>>8&255,r[30]=T>>>16&255,r[31]=T>>>24&255}function a(r,t,n,e){i(r,t,n,e)}function f(r,t,n,e){h(r,t,n,e)}function s(r,t,n,e,o,i,h){var f,s,u=new Uint8Array(16),c=new Uint8Array(64);for(s=0;16>s;s++)u[s]=0;for(s=0;8>s;s++)u[s]=i[s];for(;o>=64;){for(a(c,u,h,cr),s=0;64>s;s++)r[t+s]=n[e+s]^c[s];for(f=1,s=8;16>s;s++)f=f+(255&u[s])|0,u[s]=255&f,f>>>=8;o-=64,t+=64,e+=64}if(o>0)for(a(c,u,h,cr),s=0;o>s;s++)r[t+s]=n[e+s]^c[s];return 0}function u(r,t,n,e,o){var i,h,f=new Uint8Array(16),s=new Uint8Array(64);for(h=0;16>h;h++)f[h]=0;for(h=0;8>h;h++)f[h]=e[h];for(;n>=64;){for(a(s,f,o,cr),h=0;64>h;h++)r[t+h]=s[h];for(i=1,h=8;16>h;h++)i=i+(255&f[h])|0,f[h]=255&i,i>>>=8;n-=64,t+=64}if(n>0)for(a(s,f,o,cr),h=0;n>h;h++)r[t+h]=s[h];return 0}function c(r,t,n,e,o){var i=new Uint8Array(32);f(i,e,o,cr);for(var h=new Uint8Array(8),a=0;8>a;a++)h[a]=e[a+16];return u(r,t,n,h,i)}function y(r,t,n,e,o,i,h){var a=new Uint8Array(32);f(a,i,h,cr);for(var u=new Uint8Array(8),c=0;8>c;c++)u[c]=i[c+16];return s(r,t,n,e,o,u,a)}function l(r,t,n,e,o,i){var h=new yr(i);return h.update(n,e,o),h.finish(r,t),0}function w(r,t,n,o,i,h){var a=new Uint8Array(16);return l(a,0,n,o,i,h),e(r,t,a,0)}function p(r,t,n,e,o){var i;if(32>n)return-1;for(y(r,0,t,0,n,e,o),l(r,16,r,32,n-32,r),i=0;16>i;i++)r[i]=0;return 0}function v(r,t,n,e,o){var i,h=new Uint8Array(32);if(32>n)return-1;if(c(h,0,32,e,o),0!==w(t,16,t,32,n-32,h))return-1;for(y(r,0,t,0,n,e,o),i=0;32>i;i++)r[i]=0;return 0}function b(r,t){var n;for(n=0;16>n;n++)r[n]=0|t[n]}function g(r){var t,n,e=1;for(t=0;16>t;t++)n=r[t]+e+65535,e=Math.floor(n/65536),r[t]=n-65536*e;r[0]+=e-1+37*(e-1)}function _(r,t,n){for(var e,o=~(n-1),i=0;16>i;i++)e=o&(r[i]^t[i]),r[i]^=e,t[i]^=e}function A(r,t){var n,e,o,i=$(),h=$();for(n=0;16>n;n++)h[n]=t[n];for(g(h),g(h),g(h),e=0;2>e;e++){for(i[0]=h[0]-65517,n=1;15>n;n++)i[n]=h[n]-65535-(i[n-1]>>16&1),i[n-1]&=65535;i[15]=h[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,_(h,i,1-o)}for(n=0;16>n;n++)r[2*n]=255&h[n],r[2*n+1]=h[n]>>8}function d(r,t){var n=new Uint8Array(32),e=new Uint8Array(32);return A(n,r),A(e,t),o(n,0,e,0)}function U(r){var t=new Uint8Array(32);return A(t,r),1&t[0]}function E(r,t){var n;for(n=0;16>n;n++)r[n]=t[2*n]+(t[2*n+1]<<8);r[15]&=32767}function x(r,t,n){for(var e=0;16>e;e++)r[e]=t[e]+n[e]}function M(r,t,n){for(var e=0;16>e;e++)r[e]=t[e]-n[e]}function m(r,t,n){var e,o,i=0,h=0,a=0,f=0,s=0,u=0,c=0,y=0,l=0,w=0,p=0,v=0,b=0,g=0,_=0,A=0,d=0,U=0,E=0,x=0,M=0,m=0,B=0,S=0,K=0,T=0,Y=0,k=0,L=0,z=0,R=0,P=n[0],O=n[1],N=n[2],C=n[3],F=n[4],I=n[5],G=n[6],Z=n[7],j=n[8],q=n[9],V=n[10],X=n[11],D=n[12],H=n[13],J=n[14],Q=n[15];e=t[0],i+=e*P,h+=e*O,a+=e*N,f+=e*C,s+=e*F,u+=e*I,c+=e*G,y+=e*Z,l+=e*j,w+=e*q,p+=e*V,v+=e*X,b+=e*D,g+=e*H,_+=e*J,A+=e*Q,e=t[1],h+=e*P,a+=e*O,f+=e*N,s+=e*C,u+=e*F,c+=e*I,y+=e*G,l+=e*Z,w+=e*j,p+=e*q,v+=e*V,b+=e*X,g+=e*D,_+=e*H,A+=e*J,d+=e*Q,e=t[2],a+=e*P,f+=e*O,s+=e*N,u+=e*C,c+=e*F,y+=e*I,l+=e*G,w+=e*Z,p+=e*j,v+=e*q,b+=e*V,g+=e*X,_+=e*D,A+=e*H,d+=e*J,U+=e*Q,e=t[3],f+=e*P,s+=e*O,u+=e*N,c+=e*C,y+=e*F,l+=e*I,w+=e*G,p+=e*Z,v+=e*j,b+=e*q,g+=e*V,_+=e*X,A+=e*D,d+=e*H,U+=e*J,E+=e*Q,e=t[4],s+=e*P,u+=e*O,c+=e*N,y+=e*C,l+=e*F,w+=e*I,p+=e*G,v+=e*Z,b+=e*j,g+=e*q,_+=e*V,A+=e*X,d+=e*D,U+=e*H,E+=e*J,x+=e*Q,e=t[5],u+=e*P,c+=e*O,y+=e*N,l+=e*C,w+=e*F,p+=e*I,v+=e*G,b+=e*Z,g+=e*j,_+=e*q,A+=e*V,d+=e*X,U+=e*D,E+=e*H,x+=e*J,M+=e*Q,e=t[6],c+=e*P,y+=e*O,l+=e*N,w+=e*C,p+=e*F,v+=e*I,b+=e*G,g+=e*Z,_+=e*j,A+=e*q,d+=e*V,U+=e*X,E+=e*D,x+=e*H,M+=e*J,m+=e*Q,e=t[7],y+=e*P,l+=e*O,w+=e*N,p+=e*C,v+=e*F,b+=e*I,g+=e*G,_+=e*Z,A+=e*j,d+=e*q,U+=e*V,E+=e*X,x+=e*D,M+=e*H,m+=e*J,B+=e*Q,e=t[8],l+=e*P,w+=e*O,p+=e*N,v+=e*C,b+=e*F,g+=e*I,_+=e*G,A+=e*Z,d+=e*j,U+=e*q,E+=e*V,x+=e*X,M+=e*D,m+=e*H,B+=e*J,S+=e*Q,e=t[9],w+=e*P,p+=e*O,v+=e*N,b+=e*C,g+=e*F,_+=e*I,A+=e*G,d+=e*Z,U+=e*j,E+=e*q,x+=e*V,M+=e*X,m+=e*D,B+=e*H,S+=e*J,K+=e*Q,e=t[10],p+=e*P,v+=e*O,b+=e*N,g+=e*C,_+=e*F,A+=e*I,d+=e*G,U+=e*Z,E+=e*j,x+=e*q,M+=e*V,m+=e*X,B+=e*D,S+=e*H,K+=e*J,T+=e*Q,e=t[11],v+=e*P,b+=e*O,g+=e*N,_+=e*C,A+=e*F,d+=e*I,U+=e*G,E+=e*Z,x+=e*j,M+=e*q,m+=e*V,B+=e*X,S+=e*D,K+=e*H,T+=e*J,Y+=e*Q,e=t[12],b+=e*P,g+=e*O,_+=e*N,A+=e*C,d+=e*F,U+=e*I,E+=e*G,x+=e*Z,M+=e*j,m+=e*q,B+=e*V,S+=e*X,K+=e*D,T+=e*H,Y+=e*J,k+=e*Q,e=t[13],g+=e*P,_+=e*O,A+=e*N,d+=e*C,U+=e*F,E+=e*I,x+=e*G,M+=e*Z,m+=e*j,B+=e*q,S+=e*V,K+=e*X,T+=e*D,Y+=e*H,k+=e*J,L+=e*Q,e=t[14],_+=e*P,A+=e*O,d+=e*N,U+=e*C,E+=e*F,x+=e*I,M+=e*G,m+=e*Z,B+=e*j,S+=e*q,K+=e*V,T+=e*X,Y+=e*D,k+=e*H,L+=e*J,z+=e*Q,e=t[15],A+=e*P,d+=e*O,U+=e*N,E+=e*C,x+=e*F,M+=e*I,m+=e*G,B+=e*Z,S+=e*j,K+=e*q,T+=e*V,Y+=e*X,k+=e*D,L+=e*H,z+=e*J,R+=e*Q,i+=38*d,h+=38*U,a+=38*E,f+=38*x,s+=38*M,u+=38*m,c+=38*B,y+=38*S,l+=38*K,w+=38*T,p+=38*Y,v+=38*k,b+=38*L,g+=38*z,_+=38*R,o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),r[0]=i,r[1]=h,r[2]=a,r[3]=f,r[4]=s,r[5]=u,r[6]=c,r[7]=y,r[8]=l,r[9]=w,r[10]=p,r[11]=v,r[12]=b,r[13]=g,r[14]=_,r[15]=A}function B(r,t){m(r,t,t)}function S(r,t){var n,e=$();for(n=0;16>n;n++)e[n]=t[n];for(n=253;n>=0;n--)B(e,e),2!==n&&4!==n&&m(e,e,t);for(n=0;16>n;n++)r[n]=e[n]}function K(r,t){var n,e=$();for(n=0;16>n;n++)e[n]=t[n];for(n=250;n>=0;n--)B(e,e),1!==n&&m(e,e,t);for(n=0;16>n;n++)r[n]=e[n]}function T(r,t,n){var e,o,i=new Uint8Array(32),h=new Float64Array(80),a=$(),f=$(),s=$(),u=$(),c=$(),y=$();for(o=0;31>o;o++)i[o]=t[o];for(i[31]=127&t[31]|64,i[0]&=248,E(h,n),o=0;16>o;o++)f[o]=h[o],u[o]=a[o]=s[o]=0;for(a[0]=u[0]=1,o=254;o>=0;--o)e=i[o>>>3]>>>(7&o)&1,_(a,f,e),_(s,u,e),x(c,a,s),M(a,a,s),x(s,f,u),M(f,f,u),B(u,c),B(y,a),m(a,s,a),m(s,f,c),x(c,a,s),M(a,a,s),B(f,a),M(s,u,y),m(a,s,ir),x(a,a,u),m(s,s,a),m(a,u,y),m(u,f,h),B(f,c),_(a,f,e),_(s,u,e);for(o=0;16>o;o++)h[o+16]=a[o],h[o+32]=s[o],h[o+48]=f[o],h[o+64]=u[o];var l=h.subarray(32),w=h.subarray(16);return S(l,l),m(w,w,l),A(r,w),0}function Y(r,t){return T(r,t,nr)}function k(r,t){return rr(t,32),Y(r,t)}function L(r,t,n){var e=new Uint8Array(32);return T(e,n,t),f(r,tr,e,cr)}function z(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),lr(r,t,n,e,h)}function R(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),wr(r,t,n,e,h)}function P(r,t,n,e){for(var o,i,h,a,f,s,u,c,y,l,w,p,v,b,g,_,A,d,U,E,x,M,m,B,S,K,T=new Int32Array(16),Y=new Int32Array(16),k=r[0],L=r[1],z=r[2],R=r[3],P=r[4],O=r[5],N=r[6],C=r[7],F=t[0],I=t[1],G=t[2],Z=t[3],j=t[4],q=t[5],V=t[6],X=t[7],D=0;e>=128;){for(U=0;16>U;U++)E=8*U+D,T[U]=n[E+0]<<24|n[E+1]<<16|n[E+2]<<8|n[E+3],Y[U]=n[E+4]<<24|n[E+5]<<16|n[E+6]<<8|n[E+7];for(U=0;80>U;U++)if(o=k,i=L,h=z,a=R,f=P,s=O,u=N,c=C,y=F,l=I,w=G,p=Z,v=j,b=q,g=V,_=X,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(P>>>14|j<<18)^(P>>>18|j<<14)^(j>>>9|P<<23),M=(j>>>14|P<<18)^(j>>>18|P<<14)^(P>>>9|j<<23),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=P&O^~P&N,M=j&q^~j&V,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=pr[2*U],M=pr[2*U+1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=T[U%16],M=Y[U%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,A=65535&S|K<<16,d=65535&m|B<<16,x=A,M=d,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(k>>>28|F<<4)^(F>>>2|k<<30)^(F>>>7|k<<25),M=(F>>>28|k<<4)^(k>>>2|F<<30)^(k>>>7|F<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=k&L^k&z^L&z,M=F&I^F&G^I&G,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,c=65535&S|K<<16,_=65535&m|B<<16,x=a,M=p,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=A,M=d,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,a=65535&S|K<<16,p=65535&m|B<<16,L=o,z=i,R=h,P=a,O=f,N=s,C=u,k=c,I=y,G=l,Z=w,j=p,q=v,V=b,X=g,F=_,U%16===15)for(E=0;16>E;E++)x=T[E],M=Y[E],m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=T[(E+9)%16],M=Y[(E+9)%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+1)%16],d=Y[(E+1)%16],x=(A>>>1|d<<31)^(A>>>8|d<<24)^A>>>7,M=(d>>>1|A<<31)^(d>>>8|A<<24)^(d>>>7|A<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+14)%16],d=Y[(E+14)%16],x=(A>>>19|d<<13)^(d>>>29|A<<3)^A>>>6,M=(d>>>19|A<<13)^(A>>>29|d<<3)^(d>>>6|A<<26),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,T[E]=65535&S|K<<16,Y[E]=65535&m|B<<16;x=k,M=F,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[0],M=t[0],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[0]=k=65535&S|K<<16,t[0]=F=65535&m|B<<16,x=L,M=I,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[1],M=t[1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[1]=L=65535&S|K<<16,t[1]=I=65535&m|B<<16,x=z,M=G,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[2],M=t[2],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[2]=z=65535&S|K<<16,t[2]=G=65535&m|B<<16,x=R,M=Z,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[3],M=t[3],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[3]=R=65535&S|K<<16,t[3]=Z=65535&m|B<<16,x=P,M=j,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[4],M=t[4],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[4]=P=65535&S|K<<16,t[4]=j=65535&m|B<<16,x=O,M=q,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[5],M=t[5],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[5]=O=65535&S|K<<16,t[5]=q=65535&m|B<<16,x=N,M=V,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[6],M=t[6],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[6]=N=65535&S|K<<16,t[6]=V=65535&m|B<<16,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[7],M=t[7],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[7]=C=65535&S|K<<16,t[7]=X=65535&m|B<<16,D+=128,e-=128}return e}function O(r,n,e){var o,i=new Int32Array(8),h=new Int32Array(8),a=new Uint8Array(256),f=e;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,h[0]=4089235720,h[1]=2227873595,h[2]=4271175723,h[3]=1595750129,h[4]=2917565137,h[5]=725511199,h[6]=4215389547,h[7]=327033209,P(i,h,n,e),e%=128,o=0;e>o;o++)a[o]=n[f-e+o];for(a[e]=128,e=256-128*(112>e?1:0),a[e-9]=0,t(a,e-8,f/536870912|0,f<<3),P(i,h,a,e),o=0;8>o;o++)t(r,8*o,i[o],h[o]);return 0}function N(r,t){var n=$(),e=$(),o=$(),i=$(),h=$(),a=$(),f=$(),s=$(),u=$();M(n,r[1],r[0]),M(u,t[1],t[0]),m(n,n,u),x(e,r[0],r[1]),x(u,t[0],t[1]),m(e,e,u),m(o,r[3],t[3]),m(o,o,ar),m(i,r[2],t[2]),x(i,i,i),M(h,e,n),M(a,i,o),x(f,i,o),x(s,e,n),m(r[0],h,a),m(r[1],s,f),m(r[2],f,a),m(r[3],h,s)}function C(r,t,n){var e;for(e=0;4>e;e++)_(r[e],t[e],n)}function F(r,t){var n=$(),e=$(),o=$();S(o,t[2]),m(n,t[0],o),m(e,t[1],o),A(r,e),r[31]^=U(n)<<7}function I(r,t,n){var e,o;for(b(r[0],er),b(r[1],or),b(r[2],or),b(r[3],er),o=255;o>=0;--o)e=n[o/8|0]>>(7&o)&1,C(r,t,e),N(t,r),N(r,r),C(r,t,e)}function G(r,t){var n=[$(),$(),$(),$()];b(n[0],fr),b(n[1],sr),b(n[2],or),m(n[3],fr,sr),I(r,n,t)}function Z(r,t,n){var e,o=new Uint8Array(64),i=[$(),$(),$(),$()];for(n||rr(t,32),O(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,G(i,o),F(r,i),e=0;32>e;e++)t[e+32]=r[e];return 0}function j(r,t){var n,e,o,i;for(e=63;e>=32;--e){for(n=0,o=e-32,i=e-12;i>o;++o)t[o]+=n-16*t[e]*vr[o-(e-32)],n=t[o]+128>>8,t[o]-=256*n;t[o]+=n,t[e]=0}for(n=0,o=0;32>o;o++)t[o]+=n-(t[31]>>4)*vr[o],n=t[o]>>8,t[o]&=255;for(o=0;32>o;o++)t[o]-=n*vr[o];for(e=0;32>e;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function q(r){var t,n=new Float64Array(64);for(t=0;64>t;t++)n[t]=r[t];for(t=0;64>t;t++)r[t]=0;j(r,n)}function V(r,t,n,e){var o,i,h=new Uint8Array(64),a=new Uint8Array(64),f=new Uint8Array(64),s=new Float64Array(64),u=[$(),$(),$(),$()];O(h,e,32),h[0]&=248,h[31]&=127,h[31]|=64;var c=n+64;for(o=0;n>o;o++)r[64+o]=t[o];for(o=0;32>o;o++)r[32+o]=h[32+o];for(O(f,r.subarray(32),n+32),q(f),G(u,f),F(r,u),o=32;64>o;o++)r[o]=e[o];for(O(a,r,n+64),q(a),o=0;64>o;o++)s[o]=0;for(o=0;32>o;o++)s[o]=f[o];for(o=0;32>o;o++)for(i=0;32>i;i++)s[o+i]+=a[o]*h[i];return j(r.subarray(32),s),c}function X(r,t){var n=$(),e=$(),o=$(),i=$(),h=$(),a=$(),f=$();return b(r[2],or),E(r[1],t),B(o,r[1]),m(i,o,hr),M(o,o,r[2]),x(i,r[2],i),B(h,i),B(a,h),m(f,a,h),m(n,f,o),m(n,n,i),K(n,n),m(n,n,o),m(n,n,i),m(n,n,i),m(r[0],n,i),B(e,r[0]),m(e,e,i),d(e,o)&&m(r[0],r[0],ur),B(e,r[0]),m(e,e,i),d(e,o)?-1:(U(r[0])===t[31]>>7&&M(r[0],er,r[0]),m(r[3],r[0],r[1]),0)}function D(r,t,n,e){var i,h,a=new Uint8Array(32),f=new Uint8Array(64),s=[$(),$(),$(),$()],u=[$(),$(),$(),$()];if(h=-1,64>n)return-1;if(X(u,e))return-1;for(i=0;n>i;i++)r[i]=t[i];for(i=0;32>i;i++)r[i+32]=e[i];if(O(f,r,n),q(f),I(s,u,f),G(u,t.subarray(32)),N(s,u),F(a,s),n-=64,o(t,0,a,0)){for(i=0;n>i;i++)r[i]=0;return-1}for(i=0;n>i;i++)r[i]=t[i+64];return h=n}function H(r,t){if(r.length!==br)throw new Error("bad key size");if(t.length!==gr)throw new Error("bad nonce size")}function J(r,t){if(r.length!==Er)throw new Error("bad public key size");if(t.length!==xr)throw new Error("bad secret key size")}function Q(){var r,t;for(t=0;t>>13|n<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(n>>>10|e<<6),o=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|o<<9),i=255&r[8]|(255&r[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,h=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(i>>>14|h<<2),a=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(h>>>11|a<<5),f=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(a>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};yr.prototype.blocks=function(r,t,n){for(var e,o,i,h,a,f,s,u,c,y,l,w,p,v,b,g,_,A,d,U=this.fin?0:2048,E=this.h[0],x=this.h[1],M=this.h[2],m=this.h[3],B=this.h[4],S=this.h[5],K=this.h[6],T=this.h[7],Y=this.h[8],k=this.h[9],L=this.r[0],z=this.r[1],R=this.r[2],P=this.r[3],O=this.r[4],N=this.r[5],C=this.r[6],F=this.r[7],I=this.r[8],G=this.r[9];n>=16;)e=255&r[t+0]|(255&r[t+1])<<8,E+=8191&e,o=255&r[t+2]|(255&r[t+3])<<8,x+=8191&(e>>>13|o<<3),i=255&r[t+4]|(255&r[t+5])<<8,M+=8191&(o>>>10|i<<6),h=255&r[t+6]|(255&r[t+7])<<8,m+=8191&(i>>>7|h<<9),a=255&r[t+8]|(255&r[t+9])<<8,B+=8191&(h>>>4|a<<12),S+=a>>>1&8191,f=255&r[t+10]|(255&r[t+11])<<8,K+=8191&(a>>>14|f<<2),s=255&r[t+12]|(255&r[t+13])<<8,T+=8191&(f>>>11|s<<5),u=255&r[t+14]|(255&r[t+15])<<8,Y+=8191&(s>>>8|u<<8),k+=u>>>5|U,c=0,y=c,y+=E*L,y+=x*(5*G),y+=M*(5*I),y+=m*(5*F),y+=B*(5*C),c=y>>>13,y&=8191,y+=S*(5*N),y+=K*(5*O),y+=T*(5*P),y+=Y*(5*R),y+=k*(5*z),c+=y>>>13,y&=8191,l=c,l+=E*z,l+=x*L,l+=M*(5*G),l+=m*(5*I),l+=B*(5*F),c=l>>>13,l&=8191,l+=S*(5*C),l+=K*(5*N),l+=T*(5*O),l+=Y*(5*P),l+=k*(5*R),c+=l>>>13,l&=8191,w=c,w+=E*R,w+=x*z,w+=M*L,w+=m*(5*G),w+=B*(5*I),c=w>>>13,w&=8191,w+=S*(5*F),w+=K*(5*C),w+=T*(5*N),w+=Y*(5*O),w+=k*(5*P),c+=w>>>13,w&=8191,p=c,p+=E*P,p+=x*R,p+=M*z,p+=m*L,p+=B*(5*G),c=p>>>13,p&=8191,p+=S*(5*I),p+=K*(5*F),p+=T*(5*C),p+=Y*(5*N),p+=k*(5*O),c+=p>>>13,p&=8191,v=c,v+=E*O,v+=x*P,v+=M*R,v+=m*z,v+=B*L,c=v>>>13,v&=8191,v+=S*(5*G),v+=K*(5*I),v+=T*(5*F),v+=Y*(5*C),v+=k*(5*N),c+=v>>>13,v&=8191,b=c,b+=E*N,b+=x*O,b+=M*P,b+=m*R,b+=B*z,c=b>>>13,b&=8191,b+=S*L,b+=K*(5*G),b+=T*(5*I),b+=Y*(5*F),b+=k*(5*C),c+=b>>>13,b&=8191,g=c,g+=E*C,g+=x*N,g+=M*O,g+=m*P,g+=B*R,c=g>>>13,g&=8191,g+=S*z,g+=K*L,g+=T*(5*G),g+=Y*(5*I),g+=k*(5*F),c+=g>>>13,g&=8191,_=c,_+=E*F,_+=x*C,_+=M*N,_+=m*O,_+=B*P,c=_>>>13,_&=8191,_+=S*R,_+=K*z,_+=T*L,_+=Y*(5*G),_+=k*(5*I),c+=_>>>13,_&=8191,A=c,A+=E*I,A+=x*F,A+=M*C,A+=m*N,A+=B*O,c=A>>>13,A&=8191,A+=S*P,A+=K*R,A+=T*z,A+=Y*L,A+=k*(5*G),c+=A>>>13,A&=8191,d=c,d+=E*G,d+=x*I,d+=M*F,d+=m*C,d+=B*N,c=d>>>13,d&=8191,d+=S*O,d+=K*P,d+=T*R,d+=Y*z,d+=k*L,c+=d>>>13,d&=8191,c=(c<<2)+c|0,c=c+y|0,y=8191&c,c>>>=13,l+=c,E=y,x=l,M=w,m=p,B=v,S=b,K=g,T=_,Y=A,k=d,t+=16,n-=16;this.h[0]=E,this.h[1]=x,this.h[2]=M,this.h[3]=m,this.h[4]=B,this.h[5]=S,this.h[6]=K,this.h[7]=T,this.h[8]=Y,this.h[9]=k},yr.prototype.finish=function(r,t){var n,e,o,i,h=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;16>i;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,i=2;10>i;i++)this.h[i]+=n,n=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,h[0]=this.h[0]+5,n=h[0]>>>13,h[0]&=8191,i=1;10>i;i++)h[i]=this.h[i]+n,n=h[i]>>>13,h[i]&=8191;for(h[9]-=8192,e=(1^n)-1,i=0;10>i;i++)h[i]&=e;for(e=~e,i=0;10>i;i++)this.h[i]=this.h[i]&e|h[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;8>i;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},yr.prototype.update=function(r,t,n){var e,o;if(this.leftover){for(o=16-this.leftover,o>n&&(o=n),e=0;o>e;e++)this.buffer[this.leftover+e]=r[t+e];if(n-=o,t+=o,this.leftover+=o,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(n>=16&&(o=n-n%16,this.blocks(r,t,o),t+=o,n-=o),n){for(e=0;n>e;e++)this.buffer[this.leftover+e]=r[t+e];this.leftover+=n}};var lr=p,wr=v,pr=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],vr=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]),br=32,gr=24,_r=32,Ar=16,dr=32,Ur=32,Er=32,xr=32,Mr=32,mr=gr,Br=_r,Sr=Ar,Kr=64,Tr=32,Yr=64,kr=32,Lr=64;r.lowlevel={crypto_core_hsalsa20:f,crypto_stream_xor:y,crypto_stream:c,crypto_stream_salsa20_xor:s,crypto_stream_salsa20:u,crypto_onetimeauth:l,crypto_onetimeauth_verify:w,crypto_verify_16:e,crypto_verify_32:o,crypto_secretbox:p,crypto_secretbox_open:v,crypto_scalarmult:T,crypto_scalarmult_base:Y,crypto_box_beforenm:L,crypto_box_afternm:lr,crypto_box:z,crypto_box_open:R,crypto_box_keypair:k,crypto_hash:O,crypto_sign:V,crypto_sign_keypair:Z,crypto_sign_open:D,crypto_secretbox_KEYBYTES:br,crypto_secretbox_NONCEBYTES:gr,crypto_secretbox_ZEROBYTES:_r,crypto_secretbox_BOXZEROBYTES:Ar,crypto_scalarmult_BYTES:dr,crypto_scalarmult_SCALARBYTES:Ur,crypto_box_PUBLICKEYBYTES:Er,crypto_box_SECRETKEYBYTES:xr,crypto_box_BEFORENMBYTES:Mr,crypto_box_NONCEBYTES:mr,crypto_box_ZEROBYTES:Br,crypto_box_BOXZEROBYTES:Sr,crypto_sign_BYTES:Kr,crypto_sign_PUBLICKEYBYTES:Tr,crypto_sign_SECRETKEYBYTES:Yr,crypto_sign_SEEDBYTES:kr,crypto_hash_BYTES:Lr},r.util||(r.util={},r.util.decodeUTF8=r.util.encodeUTF8=r.util.encodeBase64=r.util.decodeBase64=function(){throw new Error("nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js")}),r.randomBytes=function(r){var t=new Uint8Array(r);return rr(t,r),t},r.secretbox=function(r,t,n){Q(r,t,n),H(n,t);for(var e=new Uint8Array(_r+r.length),o=new Uint8Array(e.length),i=0;ie)return null;for(var o=new Uint8Array(e),i=0;ie;e++)o[e]=t[e];for(e=0;e=0},r.sign.keyPair=function(){var r=new Uint8Array(Tr),t=new Uint8Array(Yr);return Z(r,t),{publicKey:r,secretKey:t}},r.sign.keyPair.fromSecretKey=function(r){if(Q(r),r.length!==Yr)throw new Error("bad secret key size");for(var t=new Uint8Array(Tr),n=0;ne;e++)n[e]=r[e];return Z(t,n,!0),{publicKey:t,secretKey:n}},r.sign.publicKeyLength=Tr,r.sign.secretKeyLength=Yr,r.sign.seedLength=kr,r.sign.signatureLength=Kr,r.hash=function(r){Q(r);var t=new Uint8Array(Lr);return O(t,r,r.length),t},r.hash.hashLength=Lr,r.verify=function(r,t){return Q(r,t), -0===r.length||0===t.length?!1:r.length!==t.length?!1:0===n(r,0,t,0,r.length)?!0:!1},r.setPRNG=function(r){rr=r},function(){var t="undefined"!=typeof self?self.crypto||self.msCrypto:null;if(t&&t.getRandomValues){var n=65536;r.setPRNG(function(r,e){var o,i=new Uint8Array(e);for(o=0;e>o;o+=n)t.getRandomValues(i.subarray(o,o+Math.min(e-o,n)));for(o=0;e>o;o++)r[o]=i[o];W(i)})}else"undefined"!=typeof require&&(t=require("crypto"),t&&t.randomBytes&&r.setPRNG(function(r,n){var e,o=t.randomBytes(n);for(e=0;n>e;e++)r[e]=o[e];W(o)}))}()}("undefined"!=typeof module&&module.exports?module.exports:self.nacl=self.nacl||{}); \ No newline at end of file diff --git a/node_modules/tweetnacl/nacl.js b/node_modules/tweetnacl/nacl.js deleted file mode 100644 index f72dd78..0000000 --- a/node_modules/tweetnacl/nacl.js +++ /dev/null @@ -1,1175 +0,0 @@ -(function(nacl) { -'use strict'; - -// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. -// Public domain. -// -// Implementation derived from TweetNaCl version 20140427. -// See for details: http://tweetnacl.cr.yp.to/ - -var u64 = function(h, l) { this.hi = h|0 >>> 0; this.lo = l|0 >>> 0; }; -var gf = function(init) { - var i, r = new Float64Array(16); - if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; - return r; -}; - -// Pluggable, initialized in high-level API below. -var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; - -var _0 = new Uint8Array(16); -var _9 = new Uint8Array(32); _9[0] = 9; - -var gf0 = gf(), - gf1 = gf([1]), - _121665 = gf([0xdb41, 1]), - D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), - D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), - X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), - Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), - I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); - -function L32(x, c) { return (x << c) | (x >>> (32 - c)); } - -function ld32(x, i) { - var u = x[i+3] & 0xff; - u = (u<<8)|(x[i+2] & 0xff); - u = (u<<8)|(x[i+1] & 0xff); - return (u<<8)|(x[i+0] & 0xff); -} - -function dl64(x, i) { - var h = (x[i] << 24) | (x[i+1] << 16) | (x[i+2] << 8) | x[i+3]; - var l = (x[i+4] << 24) | (x[i+5] << 16) | (x[i+6] << 8) | x[i+7]; - return new u64(h, l); -} - -function st32(x, j, u) { - var i; - for (i = 0; i < 4; i++) { x[j+i] = u & 255; u >>>= 8; } -} - -function ts64(x, i, u) { - x[i] = (u.hi >> 24) & 0xff; - x[i+1] = (u.hi >> 16) & 0xff; - x[i+2] = (u.hi >> 8) & 0xff; - x[i+3] = u.hi & 0xff; - x[i+4] = (u.lo >> 24) & 0xff; - x[i+5] = (u.lo >> 16) & 0xff; - x[i+6] = (u.lo >> 8) & 0xff; - x[i+7] = u.lo & 0xff; -} - -function vn(x, xi, y, yi, n) { - var i,d = 0; - for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; - return (1 & ((d - 1) >>> 8)) - 1; -} - -function crypto_verify_16(x, xi, y, yi) { - return vn(x,xi,y,yi,16); -} - -function crypto_verify_32(x, xi, y, yi) { - return vn(x,xi,y,yi,32); -} - -function core(out,inp,k,c,h) { - var w = new Uint32Array(16), x = new Uint32Array(16), - y = new Uint32Array(16), t = new Uint32Array(4); - var i, j, m; - - for (i = 0; i < 4; i++) { - x[5*i] = ld32(c, 4*i); - x[1+i] = ld32(k, 4*i); - x[6+i] = ld32(inp, 4*i); - x[11+i] = ld32(k, 16+4*i); - } - - for (i = 0; i < 16; i++) y[i] = x[i]; - - for (i = 0; i < 20; i++) { - for (j = 0; j < 4; j++) { - for (m = 0; m < 4; m++) t[m] = x[(5*j+4*m)%16]; - t[1] ^= L32((t[0]+t[3])|0, 7); - t[2] ^= L32((t[1]+t[0])|0, 9); - t[3] ^= L32((t[2]+t[1])|0,13); - t[0] ^= L32((t[3]+t[2])|0,18); - for (m = 0; m < 4; m++) w[4*j+(j+m)%4] = t[m]; - } - for (m = 0; m < 16; m++) x[m] = w[m]; - } - - if (h) { - for (i = 0; i < 16; i++) x[i] = (x[i] + y[i]) | 0; - for (i = 0; i < 4; i++) { - x[5*i] = (x[5*i] - ld32(c, 4*i)) | 0; - x[6+i] = (x[6+i] - ld32(inp, 4*i)) | 0; - } - for (i = 0; i < 4; i++) { - st32(out,4*i,x[5*i]); - st32(out,16+4*i,x[6+i]); - } - } else { - for (i = 0; i < 16; i++) st32(out, 4 * i, (x[i] + y[i]) | 0); - } -} - -function crypto_core_salsa20(out,inp,k,c) { - core(out,inp,k,c,false); - return 0; -} - -function crypto_core_hsalsa20(out,inp,k,c) { - core(out,inp,k,c,true); - return 0; -} - -var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); - // "expand 32-byte k" - -function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { - var z = new Uint8Array(16), x = new Uint8Array(64); - var u, i; - if (!b) return 0; - for (i = 0; i < 16; i++) z[i] = 0; - for (i = 0; i < 8; i++) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < 64; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; - u = 1; - for (i = 8; i < 16; i++) { - u = u + (z[i] & 0xff) | 0; - z[i] = u & 0xff; - u >>>= 8; - } - b -= 64; - cpos += 64; - if (m) mpos += 64; - } - if (b > 0) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < b; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; - } - return 0; -} - -function crypto_stream_salsa20(c,cpos,d,n,k) { - return crypto_stream_salsa20_xor(c,cpos,null,0,d,n,k); -} - -function crypto_stream(c,cpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - return crypto_stream_salsa20(c,cpos,d,n.subarray(16),s); -} - -function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,n.subarray(16),s); -} - -function add1305(h, c) { - var j, u = 0; - for (j = 0; j < 17; j++) { - u = (u + ((h[j] + c[j]) | 0)) | 0; - h[j] = u & 255; - u >>>= 8; - } -} - -var minusp = new Uint32Array([ - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 -]); - -function crypto_onetimeauth(out, outpos, m, mpos, n, k) { - var s, i, j, u; - var x = new Uint32Array(17), r = new Uint32Array(17), - h = new Uint32Array(17), c = new Uint32Array(17), - g = new Uint32Array(17); - for (j = 0; j < 17; j++) r[j]=h[j]=0; - for (j = 0; j < 16; j++) r[j]=k[j]; - r[3]&=15; - r[4]&=252; - r[7]&=15; - r[8]&=252; - r[11]&=15; - r[12]&=252; - r[15]&=15; - - while (n > 0) { - for (j = 0; j < 17; j++) c[j] = 0; - for (j = 0; (j < 16) && (j < n); ++j) c[j] = m[mpos+j]; - c[j] = 1; - mpos += j; n -= j; - add1305(h,c); - for (i = 0; i < 17; i++) { - x[i] = 0; - for (j = 0; j < 17; j++) x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j])|0))) | 0) | 0; - } - for (i = 0; i < 17; i++) h[i] = x[i]; - u = 0; - for (j = 0; j < 16; j++) { - u = (u + h[j]) | 0; - h[j] = u & 255; - u >>>= 8; - } - u = (u + h[16]) | 0; h[16] = u & 3; - u = (5 * (u >>> 2)) | 0; - for (j = 0; j < 16; j++) { - u = (u + h[j]) | 0; - h[j] = u & 255; - u >>>= 8; - } - u = (u + h[16]) | 0; h[16] = u; - } - - for (j = 0; j < 17; j++) g[j] = h[j]; - add1305(h,minusp); - s = (-(h[16] >>> 7) | 0); - for (j = 0; j < 17; j++) h[j] ^= s & (g[j] ^ h[j]); - - for (j = 0; j < 16; j++) c[j] = k[j + 16]; - c[16] = 0; - add1305(h,c); - for (j = 0; j < 16; j++) out[outpos+j] = h[j]; - return 0; -} - -function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { - var x = new Uint8Array(16); - crypto_onetimeauth(x,0,m,mpos,n,k); - return crypto_verify_16(h,hpos,x,0); -} - -function crypto_secretbox(c,m,d,n,k) { - var i; - if (d < 32) return -1; - crypto_stream_xor(c,0,m,0,d,n,k); - crypto_onetimeauth(c, 16, c, 32, d - 32, c); - for (i = 0; i < 16; i++) c[i] = 0; - return 0; -} - -function crypto_secretbox_open(m,c,d,n,k) { - var i; - var x = new Uint8Array(32); - if (d < 32) return -1; - crypto_stream(x,0,32,n,k); - if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; - crypto_stream_xor(m,0,c,0,d,n,k); - for (i = 0; i < 32; i++) m[i] = 0; - return 0; -} - -function set25519(r, a) { - var i; - for (i = 0; i < 16; i++) r[i] = a[i]|0; -} - -function car25519(o) { - var c; - var i; - for (i = 0; i < 16; i++) { - o[i] += 65536; - c = Math.floor(o[i] / 65536); - o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0); - o[i] -= (c * 65536); - } -} - -function sel25519(p, q, b) { - var t, c = ~(b-1); - for (var i = 0; i < 16; i++) { - t = c & (p[i] ^ q[i]); - p[i] ^= t; - q[i] ^= t; - } -} - -function pack25519(o, n) { - var i, j, b; - var m = gf(), t = gf(); - for (i = 0; i < 16; i++) t[i] = n[i]; - car25519(t); - car25519(t); - car25519(t); - for (j = 0; j < 2; j++) { - m[0] = t[0] - 0xffed; - for (i = 1; i < 15; i++) { - m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); - m[i-1] &= 0xffff; - } - m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); - b = (m[15]>>16) & 1; - m[14] &= 0xffff; - sel25519(t, m, 1-b); - } - for (i = 0; i < 16; i++) { - o[2*i] = t[i] & 0xff; - o[2*i+1] = t[i]>>8; - } -} - -function neq25519(a, b) { - var c = new Uint8Array(32), d = new Uint8Array(32); - pack25519(c, a); - pack25519(d, b); - return crypto_verify_32(c, 0, d, 0); -} - -function par25519(a) { - var d = new Uint8Array(32); - pack25519(d, a); - return d[0] & 1; -} - -function unpack25519(o, n) { - var i; - for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); - o[15] &= 0x7fff; -} - -function A(o, a, b) { - var i; - for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0; -} - -function Z(o, a, b) { - var i; - for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0; -} - -function M(o, a, b) { - var i, j, t = new Float64Array(31); - for (i = 0; i < 31; i++) t[i] = 0; - for (i = 0; i < 16; i++) { - for (j = 0; j < 16; j++) { - t[i+j] += a[i] * b[j]; - } - } - for (i = 0; i < 15; i++) { - t[i] += 38 * t[i+16]; - } - for (i = 0; i < 16; i++) o[i] = t[i]; - car25519(o); - car25519(o); -} - -function S(o, a) { - M(o, a, a); -} - -function inv25519(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 253; a >= 0; a--) { - S(c, c); - if(a !== 2 && a !== 4) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} - -function pow2523(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 250; a >= 0; a--) { - S(c, c); - if(a !== 1) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} - -function crypto_scalarmult(q, n, p) { - var z = new Uint8Array(32); - var x = new Float64Array(80), r, i; - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(); - for (i = 0; i < 31; i++) z[i] = n[i]; - z[31]=(n[31]&127)|64; - z[0]&=248; - unpack25519(x,p); - for (i = 0; i < 16; i++) { - b[i]=x[i]; - d[i]=a[i]=c[i]=0; - } - a[0]=d[0]=1; - for (i=254; i>=0; --i) { - r=(z[i>>>3]>>>(i&7))&1; - sel25519(a,b,r); - sel25519(c,d,r); - A(e,a,c); - Z(a,a,c); - A(c,b,d); - Z(b,b,d); - S(d,e); - S(f,a); - M(a,c,a); - M(c,b,e); - A(e,a,c); - Z(a,a,c); - S(b,a); - Z(c,d,f); - M(a,c,_121665); - A(a,a,d); - M(c,c,a); - M(a,d,f); - M(d,b,x); - S(b,e); - sel25519(a,b,r); - sel25519(c,d,r); - } - for (i = 0; i < 16; i++) { - x[i+16]=a[i]; - x[i+32]=c[i]; - x[i+48]=b[i]; - x[i+64]=d[i]; - } - var x32 = x.subarray(32); - var x16 = x.subarray(16); - inv25519(x32,x32); - M(x16,x16,x32); - pack25519(q,x16); - return 0; -} - -function crypto_scalarmult_base(q, n) { - return crypto_scalarmult(q, n, _9); -} - -function crypto_box_keypair(y, x) { - randombytes(x, 32); - return crypto_scalarmult_base(y, x); -} - -function crypto_box_beforenm(k, y, x) { - var s = new Uint8Array(32); - crypto_scalarmult(s, x, y); - return crypto_core_hsalsa20(k, _0, s, sigma); -} - -var crypto_box_afternm = crypto_secretbox; -var crypto_box_open_afternm = crypto_secretbox_open; - -function crypto_box(c, m, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_afternm(c, m, d, n, k); -} - -function crypto_box_open(m, c, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_open_afternm(m, c, d, n, k); -} - -function add64() { - var a = 0, b = 0, c = 0, d = 0, m16 = 65535, l, h, i; - for (i = 0; i < arguments.length; i++) { - l = arguments[i].lo; - h = arguments[i].hi; - a += (l & m16); b += (l >>> 16); - c += (h & m16); d += (h >>> 16); - } - - b += (a >>> 16); - c += (b >>> 16); - d += (c >>> 16); - - return new u64((c & m16) | (d << 16), (a & m16) | (b << 16)); -} - -function shr64(x, c) { - return new u64((x.hi >>> c), (x.lo >>> c) | (x.hi << (32 - c))); -} - -function xor64() { - var l = 0, h = 0, i; - for (i = 0; i < arguments.length; i++) { - l ^= arguments[i].lo; - h ^= arguments[i].hi; - } - return new u64(h, l); -} - -function R(x, c) { - var h, l, c1 = 32 - c; - if (c < 32) { - h = (x.hi >>> c) | (x.lo << c1); - l = (x.lo >>> c) | (x.hi << c1); - } else if (c < 64) { - h = (x.lo >>> c) | (x.hi << c1); - l = (x.hi >>> c) | (x.lo << c1); - } - return new u64(h, l); -} - -function Ch(x, y, z) { - var h = (x.hi & y.hi) ^ (~x.hi & z.hi), - l = (x.lo & y.lo) ^ (~x.lo & z.lo); - return new u64(h, l); -} - -function Maj(x, y, z) { - var h = (x.hi & y.hi) ^ (x.hi & z.hi) ^ (y.hi & z.hi), - l = (x.lo & y.lo) ^ (x.lo & z.lo) ^ (y.lo & z.lo); - return new u64(h, l); -} - -function Sigma0(x) { return xor64(R(x,28), R(x,34), R(x,39)); } -function Sigma1(x) { return xor64(R(x,14), R(x,18), R(x,41)); } -function sigma0(x) { return xor64(R(x, 1), R(x, 8), shr64(x,7)); } -function sigma1(x) { return xor64(R(x,19), R(x,61), shr64(x,6)); } - -var K = [ - new u64(0x428a2f98, 0xd728ae22), new u64(0x71374491, 0x23ef65cd), - new u64(0xb5c0fbcf, 0xec4d3b2f), new u64(0xe9b5dba5, 0x8189dbbc), - new u64(0x3956c25b, 0xf348b538), new u64(0x59f111f1, 0xb605d019), - new u64(0x923f82a4, 0xaf194f9b), new u64(0xab1c5ed5, 0xda6d8118), - new u64(0xd807aa98, 0xa3030242), new u64(0x12835b01, 0x45706fbe), - new u64(0x243185be, 0x4ee4b28c), new u64(0x550c7dc3, 0xd5ffb4e2), - new u64(0x72be5d74, 0xf27b896f), new u64(0x80deb1fe, 0x3b1696b1), - new u64(0x9bdc06a7, 0x25c71235), new u64(0xc19bf174, 0xcf692694), - new u64(0xe49b69c1, 0x9ef14ad2), new u64(0xefbe4786, 0x384f25e3), - new u64(0x0fc19dc6, 0x8b8cd5b5), new u64(0x240ca1cc, 0x77ac9c65), - new u64(0x2de92c6f, 0x592b0275), new u64(0x4a7484aa, 0x6ea6e483), - new u64(0x5cb0a9dc, 0xbd41fbd4), new u64(0x76f988da, 0x831153b5), - new u64(0x983e5152, 0xee66dfab), new u64(0xa831c66d, 0x2db43210), - new u64(0xb00327c8, 0x98fb213f), new u64(0xbf597fc7, 0xbeef0ee4), - new u64(0xc6e00bf3, 0x3da88fc2), new u64(0xd5a79147, 0x930aa725), - new u64(0x06ca6351, 0xe003826f), new u64(0x14292967, 0x0a0e6e70), - new u64(0x27b70a85, 0x46d22ffc), new u64(0x2e1b2138, 0x5c26c926), - new u64(0x4d2c6dfc, 0x5ac42aed), new u64(0x53380d13, 0x9d95b3df), - new u64(0x650a7354, 0x8baf63de), new u64(0x766a0abb, 0x3c77b2a8), - new u64(0x81c2c92e, 0x47edaee6), new u64(0x92722c85, 0x1482353b), - new u64(0xa2bfe8a1, 0x4cf10364), new u64(0xa81a664b, 0xbc423001), - new u64(0xc24b8b70, 0xd0f89791), new u64(0xc76c51a3, 0x0654be30), - new u64(0xd192e819, 0xd6ef5218), new u64(0xd6990624, 0x5565a910), - new u64(0xf40e3585, 0x5771202a), new u64(0x106aa070, 0x32bbd1b8), - new u64(0x19a4c116, 0xb8d2d0c8), new u64(0x1e376c08, 0x5141ab53), - new u64(0x2748774c, 0xdf8eeb99), new u64(0x34b0bcb5, 0xe19b48a8), - new u64(0x391c0cb3, 0xc5c95a63), new u64(0x4ed8aa4a, 0xe3418acb), - new u64(0x5b9cca4f, 0x7763e373), new u64(0x682e6ff3, 0xd6b2b8a3), - new u64(0x748f82ee, 0x5defb2fc), new u64(0x78a5636f, 0x43172f60), - new u64(0x84c87814, 0xa1f0ab72), new u64(0x8cc70208, 0x1a6439ec), - new u64(0x90befffa, 0x23631e28), new u64(0xa4506ceb, 0xde82bde9), - new u64(0xbef9a3f7, 0xb2c67915), new u64(0xc67178f2, 0xe372532b), - new u64(0xca273ece, 0xea26619c), new u64(0xd186b8c7, 0x21c0c207), - new u64(0xeada7dd6, 0xcde0eb1e), new u64(0xf57d4f7f, 0xee6ed178), - new u64(0x06f067aa, 0x72176fba), new u64(0x0a637dc5, 0xa2c898a6), - new u64(0x113f9804, 0xbef90dae), new u64(0x1b710b35, 0x131c471b), - new u64(0x28db77f5, 0x23047d84), new u64(0x32caab7b, 0x40c72493), - new u64(0x3c9ebe0a, 0x15c9bebc), new u64(0x431d67c4, 0x9c100d4c), - new u64(0x4cc5d4be, 0xcb3e42b6), new u64(0x597f299c, 0xfc657e2a), - new u64(0x5fcb6fab, 0x3ad6faec), new u64(0x6c44198c, 0x4a475817) -]; - -function crypto_hashblocks(x, m, n) { - var z = [], b = [], a = [], w = [], t, i, j; - - for (i = 0; i < 8; i++) z[i] = a[i] = dl64(x, 8*i); - - var pos = 0; - while (n >= 128) { - for (i = 0; i < 16; i++) w[i] = dl64(m, 8*i+pos); - for (i = 0; i < 80; i++) { - for (j = 0; j < 8; j++) b[j] = a[j]; - t = add64(a[7], Sigma1(a[4]), Ch(a[4], a[5], a[6]), K[i], w[i%16]); - b[7] = add64(t, Sigma0(a[0]), Maj(a[0], a[1], a[2])); - b[3] = add64(b[3], t); - for (j = 0; j < 8; j++) a[(j+1)%8] = b[j]; - if (i%16 === 15) { - for (j = 0; j < 16; j++) { - w[j] = add64(w[j], w[(j+9)%16], sigma0(w[(j+1)%16]), sigma1(w[(j+14)%16])); - } - } - } - - for (i = 0; i < 8; i++) { - a[i] = add64(a[i], z[i]); - z[i] = a[i]; - } - - pos += 128; - n -= 128; - } - - for (i = 0; i < 8; i++) ts64(x, 8*i, z[i]); - return n; -} - -var iv = new Uint8Array([ - 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, - 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, - 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b, - 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1, - 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1, - 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f, - 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b, - 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79 -]); - -function crypto_hash(out, m, n) { - var h = new Uint8Array(64), x = new Uint8Array(256); - var i, b = n; - - for (i = 0; i < 64; i++) h[i] = iv[i]; - - crypto_hashblocks(h, m, n); - n %= 128; - - for (i = 0; i < 256; i++) x[i] = 0; - for (i = 0; i < n; i++) x[i] = m[b-n+i]; - x[n] = 128; - - n = 256-128*(n<112?1:0); - x[n-9] = 0; - ts64(x, n-8, new u64((b / 0x20000000) | 0, b << 3)); - crypto_hashblocks(h, x, n); - - for (i = 0; i < 64; i++) out[i] = h[i]; - - return 0; -} - -function add(p, q) { - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(), - g = gf(), h = gf(), t = gf(); - - Z(a, p[1], p[0]); - Z(t, q[1], q[0]); - M(a, a, t); - A(b, p[0], p[1]); - A(t, q[0], q[1]); - M(b, b, t); - M(c, p[3], q[3]); - M(c, c, D2); - M(d, p[2], q[2]); - A(d, d, d); - Z(e, b, a); - Z(f, d, c); - A(g, d, c); - A(h, b, a); - - M(p[0], e, f); - M(p[1], h, g); - M(p[2], g, f); - M(p[3], e, h); -} - -function cswap(p, q, b) { - var i; - for (i = 0; i < 4; i++) { - sel25519(p[i], q[i], b); - } -} - -function pack(r, p) { - var tx = gf(), ty = gf(), zi = gf(); - inv25519(zi, p[2]); - M(tx, p[0], zi); - M(ty, p[1], zi); - pack25519(r, ty); - r[31] ^= par25519(tx) << 7; -} - -function scalarmult(p, q, s) { - var b, i; - set25519(p[0], gf0); - set25519(p[1], gf1); - set25519(p[2], gf1); - set25519(p[3], gf0); - for (i = 255; i >= 0; --i) { - b = (s[(i/8)|0] >> (i&7)) & 1; - cswap(p, q, b); - add(q, p); - add(p, p); - cswap(p, q, b); - } -} - -function scalarbase(p, s) { - var q = [gf(), gf(), gf(), gf()]; - set25519(q[0], X); - set25519(q[1], Y); - set25519(q[2], gf1); - M(q[3], X, Y); - scalarmult(p, q, s); -} - -function crypto_sign_keypair(pk, sk, seeded) { - var d = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()]; - var i; - - if (!seeded) randombytes(sk, 32); - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - scalarbase(p, d); - pack(pk, p); - - for (i = 0; i < 32; i++) sk[i+32] = pk[i]; - return 0; -} - -var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); - -function modL(r, x) { - var carry, i, j, k; - for (i = 63; i >= 32; --i) { - carry = 0; - for (j = i - 32, k = i - 12; j < k; ++j) { - x[j] += carry - 16 * x[i] * L[j - (i - 32)]; - carry = (x[j] + 128) >> 8; - x[j] -= carry * 256; - } - x[j] += carry; - x[i] = 0; - } - carry = 0; - for (j = 0; j < 32; j++) { - x[j] += carry - (x[31] >> 4) * L[j]; - carry = x[j] >> 8; - x[j] &= 255; - } - for (j = 0; j < 32; j++) x[j] -= carry * L[j]; - for (i = 0; i < 32; i++) { - x[i+1] += x[i] >> 8; - r[i] = x[i] & 255; - } -} - -function reduce(r) { - var x = new Float64Array(64), i; - for (i = 0; i < 64; i++) x[i] = r[i]; - for (i = 0; i < 64; i++) r[i] = 0; - modL(r, x); -} - -// Note: difference from C - smlen returned, not passed as argument. -function crypto_sign(sm, m, n, sk) { - var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); - var i, j, x = new Float64Array(64); - var p = [gf(), gf(), gf(), gf()]; - - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - var smlen = n + 64; - for (i = 0; i < n; i++) sm[64 + i] = m[i]; - for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; - - crypto_hash(r, sm.subarray(32), n+32); - reduce(r); - scalarbase(p, r); - pack(sm, p); - - for (i = 32; i < 64; i++) sm[i] = sk[i]; - crypto_hash(h, sm, n + 64); - reduce(h); - - for (i = 0; i < 64; i++) x[i] = 0; - for (i = 0; i < 32; i++) x[i] = r[i]; - for (i = 0; i < 32; i++) { - for (j = 0; j < 32; j++) { - x[i+j] += h[i] * d[j]; - } - } - - modL(sm.subarray(32), x); - return smlen; -} - -function unpackneg(r, p) { - var t = gf(), chk = gf(), num = gf(), - den = gf(), den2 = gf(), den4 = gf(), - den6 = gf(); - - set25519(r[2], gf1); - unpack25519(r[1], p); - S(num, r[1]); - M(den, num, D); - Z(num, num, r[2]); - A(den, r[2], den); - - S(den2, den); - S(den4, den2); - M(den6, den4, den2); - M(t, den6, num); - M(t, t, den); - - pow2523(t, t); - M(t, t, num); - M(t, t, den); - M(t, t, den); - M(r[0], t, den); - - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) M(r[0], r[0], I); - - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) return -1; - - if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); - - M(r[3], r[0], r[1]); - return 0; -} - -function crypto_sign_open(m, sm, n, pk) { - var i, mlen; - var t = new Uint8Array(32), h = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()], - q = [gf(), gf(), gf(), gf()]; - - mlen = -1; - if (n < 64) return -1; - - if (unpackneg(q, pk)) return -1; - - for (i = 0; i < n; i++) m[i] = sm[i]; - for (i = 0; i < 32; i++) m[i+32] = pk[i]; - crypto_hash(h, m, n); - reduce(h); - scalarmult(p, q, h); - - scalarbase(q, sm.subarray(32)); - add(p, q); - pack(t, p); - - n -= 64; - if (crypto_verify_32(sm, 0, t, 0)) { - for (i = 0; i < n; i++) m[i] = 0; - return -1; - } - - for (i = 0; i < n; i++) m[i] = sm[i + 64]; - mlen = n; - return mlen; -} - -var crypto_secretbox_KEYBYTES = 32, - crypto_secretbox_NONCEBYTES = 24, - crypto_secretbox_ZEROBYTES = 32, - crypto_secretbox_BOXZEROBYTES = 16, - crypto_scalarmult_BYTES = 32, - crypto_scalarmult_SCALARBYTES = 32, - crypto_box_PUBLICKEYBYTES = 32, - crypto_box_SECRETKEYBYTES = 32, - crypto_box_BEFORENMBYTES = 32, - crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, - crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, - crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, - crypto_sign_BYTES = 64, - crypto_sign_PUBLICKEYBYTES = 32, - crypto_sign_SECRETKEYBYTES = 64, - crypto_sign_SEEDBYTES = 32, - crypto_hash_BYTES = 64; - -nacl.lowlevel = { - crypto_core_hsalsa20: crypto_core_hsalsa20, - crypto_stream_xor: crypto_stream_xor, - crypto_stream: crypto_stream, - crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, - crypto_stream_salsa20: crypto_stream_salsa20, - crypto_onetimeauth: crypto_onetimeauth, - crypto_onetimeauth_verify: crypto_onetimeauth_verify, - crypto_verify_16: crypto_verify_16, - crypto_verify_32: crypto_verify_32, - crypto_secretbox: crypto_secretbox, - crypto_secretbox_open: crypto_secretbox_open, - crypto_scalarmult: crypto_scalarmult, - crypto_scalarmult_base: crypto_scalarmult_base, - crypto_box_beforenm: crypto_box_beforenm, - crypto_box_afternm: crypto_box_afternm, - crypto_box: crypto_box, - crypto_box_open: crypto_box_open, - crypto_box_keypair: crypto_box_keypair, - crypto_hash: crypto_hash, - crypto_sign: crypto_sign, - crypto_sign_keypair: crypto_sign_keypair, - crypto_sign_open: crypto_sign_open, - - crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, - crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, - crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, - crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, - crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, - crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, - crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, - crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, - crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, - crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, - crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, - crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, - crypto_sign_BYTES: crypto_sign_BYTES, - crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, - crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, - crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, - crypto_hash_BYTES: crypto_hash_BYTES -}; - -/* High-level API */ - -function checkLengths(k, n) { - if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); - if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); -} - -function checkBoxLengths(pk, sk) { - if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); - if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); -} - -function checkArrayTypes() { - var t, i; - for (i = 0; i < arguments.length; i++) { - if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') - throw new TypeError('unexpected type ' + t + ', use Uint8Array'); - } -} - -function cleanup(arr) { - for (var i = 0; i < arr.length; i++) arr[i] = 0; -} - -// TODO: Completely remove this in v0.15. -if (!nacl.util) { - nacl.util = {}; - nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { - throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); - }; -} - -nacl.randomBytes = function(n) { - var b = new Uint8Array(n); - randombytes(b, n); - return b; -}; - -nacl.secretbox = function(msg, nonce, key) { - checkArrayTypes(msg, nonce, key); - checkLengths(key, nonce); - var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); - var c = new Uint8Array(m.length); - for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; - crypto_secretbox(c, m, m.length, nonce, key); - return c.subarray(crypto_secretbox_BOXZEROBYTES); -}; - -nacl.secretbox.open = function(box, nonce, key) { - checkArrayTypes(box, nonce, key); - checkLengths(key, nonce); - var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); - var m = new Uint8Array(c.length); - for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; - if (c.length < 32) return false; - if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; - return m.subarray(crypto_secretbox_ZEROBYTES); -}; - -nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; -nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; -nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; - -nacl.scalarMult = function(n, p) { - checkArrayTypes(n, p); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult(q, n, p); - return q; -}; - -nacl.scalarMult.base = function(n) { - checkArrayTypes(n); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult_base(q, n); - return q; -}; - -nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; -nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; - -nacl.box = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox(msg, nonce, k); -}; - -nacl.box.before = function(publicKey, secretKey) { - checkArrayTypes(publicKey, secretKey); - checkBoxLengths(publicKey, secretKey); - var k = new Uint8Array(crypto_box_BEFORENMBYTES); - crypto_box_beforenm(k, publicKey, secretKey); - return k; -}; - -nacl.box.after = nacl.secretbox; - -nacl.box.open = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox.open(msg, nonce, k); -}; - -nacl.box.open.after = nacl.secretbox.open; - -nacl.box.keyPair = function() { - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); - crypto_box_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.box.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_box_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - crypto_scalarmult_base(pk, secretKey); - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; - -nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; -nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; -nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; -nacl.box.nonceLength = crypto_box_NONCEBYTES; -nacl.box.overheadLength = nacl.secretbox.overheadLength; - -nacl.sign = function(msg, secretKey) { - checkArrayTypes(msg, secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); - crypto_sign(signedMsg, msg, msg.length, secretKey); - return signedMsg; -}; - -nacl.sign.open = function(signedMsg, publicKey) { - if (arguments.length !== 2) - throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); - checkArrayTypes(signedMsg, publicKey); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var tmp = new Uint8Array(signedMsg.length); - var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); - if (mlen < 0) return null; - var m = new Uint8Array(mlen); - for (var i = 0; i < m.length; i++) m[i] = tmp[i]; - return m; -}; - -nacl.sign.detached = function(msg, secretKey) { - var signedMsg = nacl.sign(msg, secretKey); - var sig = new Uint8Array(crypto_sign_BYTES); - for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; - return sig; -}; - -nacl.sign.detached.verify = function(msg, sig, publicKey) { - checkArrayTypes(msg, sig, publicKey); - if (sig.length !== crypto_sign_BYTES) - throw new Error('bad signature size'); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var sm = new Uint8Array(crypto_sign_BYTES + msg.length); - var m = new Uint8Array(crypto_sign_BYTES + msg.length); - var i; - for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; - for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; - return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); -}; - -nacl.sign.keyPair = function() { - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - crypto_sign_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.sign.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; - -nacl.sign.keyPair.fromSeed = function(seed) { - checkArrayTypes(seed); - if (seed.length !== crypto_sign_SEEDBYTES) - throw new Error('bad seed size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - for (var i = 0; i < 32; i++) sk[i] = seed[i]; - crypto_sign_keypair(pk, sk, true); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; -nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; -nacl.sign.seedLength = crypto_sign_SEEDBYTES; -nacl.sign.signatureLength = crypto_sign_BYTES; - -nacl.hash = function(msg) { - checkArrayTypes(msg); - var h = new Uint8Array(crypto_hash_BYTES); - crypto_hash(h, msg, msg.length); - return h; -}; - -nacl.hash.hashLength = crypto_hash_BYTES; - -nacl.verify = function(x, y) { - checkArrayTypes(x, y); - // Zero length arguments are considered not equal. - if (x.length === 0 || y.length === 0) return false; - if (x.length !== y.length) return false; - return (vn(x, 0, y, 0, x.length) === 0) ? true : false; -}; - -nacl.setPRNG = function(fn) { - randombytes = fn; -}; - -(function() { - // Initialize PRNG if environment provides CSPRNG. - // If not, methods calling randombytes will throw. - var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; - if (crypto && crypto.getRandomValues) { - // Browsers. - var QUOTA = 65536; - nacl.setPRNG(function(x, n) { - var i, v = new Uint8Array(n); - for (i = 0; i < n; i += QUOTA) { - crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); - } - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } else if (typeof require !== 'undefined') { - // Node.js. - crypto = require('crypto'); - if (crypto && crypto.randomBytes) { - nacl.setPRNG(function(x, n) { - var i, v = crypto.randomBytes(n); - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } - } -})(); - -})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl.min.js b/node_modules/tweetnacl/nacl.min.js deleted file mode 100644 index eed3854..0000000 --- a/node_modules/tweetnacl/nacl.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(r){"use strict";function n(r,n){return r<>>32-n}function e(r,n){var e=255&r[n+3];return e=e<<8|255&r[n+2],e=e<<8|255&r[n+1],e<<8|255&r[n+0]}function t(r,n){var e=r[n]<<24|r[n+1]<<16|r[n+2]<<8|r[n+3],t=r[n+4]<<24|r[n+5]<<16|r[n+6]<<8|r[n+7];return new lr(e,t)}function o(r,n,e){var t;for(t=0;4>t;t++)r[n+t]=255&e,e>>>=8}function i(r,n,e){r[n]=e.hi>>24&255,r[n+1]=e.hi>>16&255,r[n+2]=e.hi>>8&255,r[n+3]=255&e.hi,r[n+4]=e.lo>>24&255,r[n+5]=e.lo>>16&255,r[n+6]=e.lo>>8&255,r[n+7]=255&e.lo}function a(r,n,e,t,o){var i,a=0;for(i=0;o>i;i++)a|=r[n+i]^e[t+i];return(1&a-1>>>8)-1}function f(r,n,e,t){return a(r,n,e,t,16)}function u(r,n,e,t){return a(r,n,e,t,32)}function c(r,t,i,a,f){var u,c,w,y=new Uint32Array(16),s=new Uint32Array(16),l=new Uint32Array(16),h=new Uint32Array(4);for(u=0;4>u;u++)s[5*u]=e(a,4*u),s[1+u]=e(i,4*u),s[6+u]=e(t,4*u),s[11+u]=e(i,16+4*u);for(u=0;16>u;u++)l[u]=s[u];for(u=0;20>u;u++){for(c=0;4>c;c++){for(w=0;4>w;w++)h[w]=s[(5*c+4*w)%16];for(h[1]^=n(h[0]+h[3]|0,7),h[2]^=n(h[1]+h[0]|0,9),h[3]^=n(h[2]+h[1]|0,13),h[0]^=n(h[3]+h[2]|0,18),w=0;4>w;w++)y[4*c+(c+w)%4]=h[w]}for(w=0;16>w;w++)s[w]=y[w]}if(f){for(u=0;16>u;u++)s[u]=s[u]+l[u]|0;for(u=0;4>u;u++)s[5*u]=s[5*u]-e(a,4*u)|0,s[6+u]=s[6+u]-e(t,4*u)|0;for(u=0;4>u;u++)o(r,4*u,s[5*u]),o(r,16+4*u,s[6+u])}else for(u=0;16>u;u++)o(r,4*u,s[u]+l[u]|0)}function w(r,n,e,t){return c(r,n,e,t,!1),0}function y(r,n,e,t){return c(r,n,e,t,!0),0}function s(r,n,e,t,o,i,a){var f,u,c=new Uint8Array(16),y=new Uint8Array(64);if(!o)return 0;for(u=0;16>u;u++)c[u]=0;for(u=0;8>u;u++)c[u]=i[u];for(;o>=64;){for(w(y,c,a,Br),u=0;64>u;u++)r[n+u]=(e?e[t+u]:0)^y[u];for(f=1,u=8;16>u;u++)f=f+(255&c[u])|0,c[u]=255&f,f>>>=8;o-=64,n+=64,e&&(t+=64)}if(o>0)for(w(y,c,a,Br),u=0;o>u;u++)r[n+u]=(e?e[t+u]:0)^y[u];return 0}function l(r,n,e,t,o){return s(r,n,null,0,e,t,o)}function h(r,n,e,t,o){var i=new Uint8Array(32);return y(i,t,o,Br),l(r,n,e,t.subarray(16),i)}function g(r,n,e,t,o,i,a){var f=new Uint8Array(32);return y(f,i,a,Br),s(r,n,e,t,o,i.subarray(16),f)}function v(r,n){var e,t=0;for(e=0;17>e;e++)t=t+(r[e]+n[e]|0)|0,r[e]=255&t,t>>>=8}function b(r,n,e,t,o,i){var a,f,u,c,w=new Uint32Array(17),y=new Uint32Array(17),s=new Uint32Array(17),l=new Uint32Array(17),h=new Uint32Array(17);for(u=0;17>u;u++)y[u]=s[u]=0;for(u=0;16>u;u++)y[u]=i[u];for(y[3]&=15,y[4]&=252,y[7]&=15,y[8]&=252,y[11]&=15,y[12]&=252,y[15]&=15;o>0;){for(u=0;17>u;u++)l[u]=0;for(u=0;16>u&&o>u;++u)l[u]=e[t+u];for(l[u]=1,t+=u,o-=u,v(s,l),f=0;17>f;f++)for(w[f]=0,u=0;17>u;u++)w[f]=w[f]+s[u]*(f>=u?y[f-u]:320*y[f+17-u]|0)|0|0;for(f=0;17>f;f++)s[f]=w[f];for(c=0,u=0;16>u;u++)c=c+s[u]|0,s[u]=255&c,c>>>=8;for(c=c+s[16]|0,s[16]=3&c,c=5*(c>>>2)|0,u=0;16>u;u++)c=c+s[u]|0,s[u]=255&c,c>>>=8;c=c+s[16]|0,s[16]=c}for(u=0;17>u;u++)h[u]=s[u];for(v(s,Sr),a=0|-(s[16]>>>7),u=0;17>u;u++)s[u]^=a&(h[u]^s[u]);for(u=0;16>u;u++)l[u]=i[u+16];for(l[16]=0,v(s,l),u=0;16>u;u++)r[n+u]=s[u];return 0}function p(r,n,e,t,o,i){var a=new Uint8Array(16);return b(a,0,e,t,o,i),f(r,n,a,0)}function _(r,n,e,t,o){var i;if(32>e)return-1;for(g(r,0,n,0,e,t,o),b(r,16,r,32,e-32,r),i=0;16>i;i++)r[i]=0;return 0}function A(r,n,e,t,o){var i,a=new Uint8Array(32);if(32>e)return-1;if(h(a,0,32,t,o),0!==p(n,16,n,32,e-32,a))return-1;for(g(r,0,n,0,e,t,o),i=0;32>i;i++)r[i]=0;return 0}function U(r,n){var e;for(e=0;16>e;e++)r[e]=0|n[e]}function E(r){var n,e;for(e=0;16>e;e++)r[e]+=65536,n=Math.floor(r[e]/65536),r[(e+1)*(15>e?1:0)]+=n-1+37*(n-1)*(15===e?1:0),r[e]-=65536*n}function d(r,n,e){for(var t,o=~(e-1),i=0;16>i;i++)t=o&(r[i]^n[i]),r[i]^=t,n[i]^=t}function x(r,n){var e,t,o,i=hr(),a=hr();for(e=0;16>e;e++)a[e]=n[e];for(E(a),E(a),E(a),t=0;2>t;t++){for(i[0]=a[0]-65517,e=1;15>e;e++)i[e]=a[e]-65535-(i[e-1]>>16&1),i[e-1]&=65535;i[15]=a[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,d(a,i,1-o)}for(e=0;16>e;e++)r[2*e]=255&a[e],r[2*e+1]=a[e]>>8}function m(r,n){var e=new Uint8Array(32),t=new Uint8Array(32);return x(e,r),x(t,n),u(e,0,t,0)}function B(r){var n=new Uint8Array(32);return x(n,r),1&n[0]}function S(r,n){var e;for(e=0;16>e;e++)r[e]=n[2*e]+(n[2*e+1]<<8);r[15]&=32767}function K(r,n,e){var t;for(t=0;16>t;t++)r[t]=n[t]+e[t]|0}function T(r,n,e){var t;for(t=0;16>t;t++)r[t]=n[t]-e[t]|0}function Y(r,n,e){var t,o,i=new Float64Array(31);for(t=0;31>t;t++)i[t]=0;for(t=0;16>t;t++)for(o=0;16>o;o++)i[t+o]+=n[t]*e[o];for(t=0;15>t;t++)i[t]+=38*i[t+16];for(t=0;16>t;t++)r[t]=i[t];E(r),E(r)}function L(r,n){Y(r,n,n)}function k(r,n){var e,t=hr();for(e=0;16>e;e++)t[e]=n[e];for(e=253;e>=0;e--)L(t,t),2!==e&&4!==e&&Y(t,t,n);for(e=0;16>e;e++)r[e]=t[e]}function z(r,n){var e,t=hr();for(e=0;16>e;e++)t[e]=n[e];for(e=250;e>=0;e--)L(t,t),1!==e&&Y(t,t,n);for(e=0;16>e;e++)r[e]=t[e]}function R(r,n,e){var t,o,i=new Uint8Array(32),a=new Float64Array(80),f=hr(),u=hr(),c=hr(),w=hr(),y=hr(),s=hr();for(o=0;31>o;o++)i[o]=n[o];for(i[31]=127&n[31]|64,i[0]&=248,S(a,e),o=0;16>o;o++)u[o]=a[o],w[o]=f[o]=c[o]=0;for(f[0]=w[0]=1,o=254;o>=0;--o)t=i[o>>>3]>>>(7&o)&1,d(f,u,t),d(c,w,t),K(y,f,c),T(f,f,c),K(c,u,w),T(u,u,w),L(w,y),L(s,f),Y(f,c,f),Y(c,u,y),K(y,f,c),T(f,f,c),L(u,f),T(c,w,s),Y(f,c,Ar),K(f,f,w),Y(c,c,f),Y(f,w,s),Y(w,u,a),L(u,y),d(f,u,t),d(c,w,t);for(o=0;16>o;o++)a[o+16]=f[o],a[o+32]=c[o],a[o+48]=u[o],a[o+64]=w[o];var l=a.subarray(32),h=a.subarray(16);return k(l,l),Y(h,h,l),x(r,h),0}function P(r,n){return R(r,n,br)}function O(r,n){return gr(n,32),P(r,n)}function F(r,n,e){var t=new Uint8Array(32);return R(t,e,n),y(r,vr,t,Br)}function N(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Kr(r,n,e,t,a)}function C(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Tr(r,n,e,t,a)}function M(){var r,n,e,t=0,o=0,i=0,a=0,f=65535;for(e=0;e>>16,i+=n&f,a+=n>>>16;return o+=t>>>16,i+=o>>>16,a+=i>>>16,new lr(i&f|a<<16,t&f|o<<16)}function G(r,n){return new lr(r.hi>>>n,r.lo>>>n|r.hi<<32-n)}function Z(){var r,n=0,e=0;for(r=0;rn?(e=r.hi>>>n|r.lo<>>n|r.hi<n&&(e=r.lo>>>n|r.hi<>>n|r.lo<a;a++)u[a]=w[a]=t(r,8*a);for(var s=0;e>=128;){for(a=0;16>a;a++)y[a]=t(n,8*a+s);for(a=0;80>a;a++){for(f=0;8>f;f++)c[f]=w[f];for(o=M(w[7],X(w[4]),q(w[4],w[5],w[6]),Yr[a],y[a%16]),c[7]=M(o,V(w[0]),I(w[0],w[1],w[2])),c[3]=M(c[3],o),f=0;8>f;f++)w[(f+1)%8]=c[f];if(a%16===15)for(f=0;16>f;f++)y[f]=M(y[f],y[(f+9)%16],D(y[(f+1)%16]),H(y[(f+14)%16]))}for(a=0;8>a;a++)w[a]=M(w[a],u[a]),u[a]=w[a];s+=128,e-=128}for(a=0;8>a;a++)i(r,8*a,u[a]);return e}function Q(r,n,e){var t,o=new Uint8Array(64),a=new Uint8Array(256),f=e;for(t=0;64>t;t++)o[t]=Lr[t];for(J(o,n,e),e%=128,t=0;256>t;t++)a[t]=0;for(t=0;e>t;t++)a[t]=n[f-e+t];for(a[e]=128,e=256-128*(112>e?1:0),a[e-9]=0,i(a,e-8,new lr(f/536870912|0,f<<3)),J(o,a,e),t=0;64>t;t++)r[t]=o[t];return 0}function W(r,n){var e=hr(),t=hr(),o=hr(),i=hr(),a=hr(),f=hr(),u=hr(),c=hr(),w=hr();T(e,r[1],r[0]),T(w,n[1],n[0]),Y(e,e,w),K(t,r[0],r[1]),K(w,n[0],n[1]),Y(t,t,w),Y(o,r[3],n[3]),Y(o,o,Er),Y(i,r[2],n[2]),K(i,i,i),T(a,t,e),T(f,i,o),K(u,i,o),K(c,t,e),Y(r[0],a,f),Y(r[1],c,u),Y(r[2],u,f),Y(r[3],a,c)}function $(r,n,e){var t;for(t=0;4>t;t++)d(r[t],n[t],e)}function rr(r,n){var e=hr(),t=hr(),o=hr();k(o,n[2]),Y(e,n[0],o),Y(t,n[1],o),x(r,t),r[31]^=B(e)<<7}function nr(r,n,e){var t,o;for(U(r[0],pr),U(r[1],_r),U(r[2],_r),U(r[3],pr),o=255;o>=0;--o)t=e[o/8|0]>>(7&o)&1,$(r,n,t),W(n,r),W(r,r),$(r,n,t)}function er(r,n){var e=[hr(),hr(),hr(),hr()];U(e[0],dr),U(e[1],xr),U(e[2],_r),Y(e[3],dr,xr),nr(r,e,n)}function tr(r,n,e){var t,o=new Uint8Array(64),i=[hr(),hr(),hr(),hr()];for(e||gr(n,32),Q(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,er(i,o),rr(r,i),t=0;32>t;t++)n[t+32]=r[t];return 0}function or(r,n){var e,t,o,i;for(t=63;t>=32;--t){for(e=0,o=t-32,i=t-12;i>o;++o)n[o]+=e-16*n[t]*kr[o-(t-32)],e=n[o]+128>>8,n[o]-=256*e;n[o]+=e,n[t]=0}for(e=0,o=0;32>o;o++)n[o]+=e-(n[31]>>4)*kr[o],e=n[o]>>8,n[o]&=255;for(o=0;32>o;o++)n[o]-=e*kr[o];for(t=0;32>t;t++)n[t+1]+=n[t]>>8,r[t]=255&n[t]}function ir(r){var n,e=new Float64Array(64);for(n=0;64>n;n++)e[n]=r[n];for(n=0;64>n;n++)r[n]=0;or(r,e)}function ar(r,n,e,t){var o,i,a=new Uint8Array(64),f=new Uint8Array(64),u=new Uint8Array(64),c=new Float64Array(64),w=[hr(),hr(),hr(),hr()];Q(a,t,32),a[0]&=248,a[31]&=127,a[31]|=64;var y=e+64;for(o=0;e>o;o++)r[64+o]=n[o];for(o=0;32>o;o++)r[32+o]=a[32+o];for(Q(u,r.subarray(32),e+32),ir(u),er(w,u),rr(r,w),o=32;64>o;o++)r[o]=t[o];for(Q(f,r,e+64),ir(f),o=0;64>o;o++)c[o]=0;for(o=0;32>o;o++)c[o]=u[o];for(o=0;32>o;o++)for(i=0;32>i;i++)c[o+i]+=f[o]*a[i];return or(r.subarray(32),c),y}function fr(r,n){var e=hr(),t=hr(),o=hr(),i=hr(),a=hr(),f=hr(),u=hr();return U(r[2],_r),S(r[1],n),L(o,r[1]),Y(i,o,Ur),T(o,o,r[2]),K(i,r[2],i),L(a,i),L(f,a),Y(u,f,a),Y(e,u,o),Y(e,e,i),z(e,e),Y(e,e,o),Y(e,e,i),Y(e,e,i),Y(r[0],e,i),L(t,r[0]),Y(t,t,i),m(t,o)&&Y(r[0],r[0],mr),L(t,r[0]),Y(t,t,i),m(t,o)?-1:(B(r[0])===n[31]>>7&&T(r[0],pr,r[0]),Y(r[3],r[0],r[1]),0)}function ur(r,n,e,t){var o,i,a=new Uint8Array(32),f=new Uint8Array(64),c=[hr(),hr(),hr(),hr()],w=[hr(),hr(),hr(),hr()];if(i=-1,64>e)return-1;if(fr(w,t))return-1;for(o=0;e>o;o++)r[o]=n[o];for(o=0;32>o;o++)r[o+32]=t[o];if(Q(f,r,e),ir(f),nr(c,w,f),er(w,n.subarray(32)),W(c,w),rr(a,c),e-=64,u(n,0,a,0)){for(o=0;e>o;o++)r[o]=0;return-1}for(o=0;e>o;o++)r[o]=n[o+64];return i=e}function cr(r,n){if(r.length!==zr)throw new Error("bad key size");if(n.length!==Rr)throw new Error("bad nonce size")}function wr(r,n){if(r.length!==Cr)throw new Error("bad public key size");if(n.length!==Mr)throw new Error("bad secret key size")}function yr(){var r,n;for(n=0;nt)return null;for(var o=new Uint8Array(t),i=0;it;t++)o[t]=n[t];for(t=0;t=0},r.sign.keyPair=function(){var r=new Uint8Array(Vr),n=new Uint8Array(Xr);return tr(r,n),{publicKey:r,secretKey:n}},r.sign.keyPair.fromSecretKey=function(r){if(yr(r),r.length!==Xr)throw new Error("bad secret key size");for(var n=new Uint8Array(Vr),e=0;et;t++)e[t]=r[t];return tr(n,e,!0),{publicKey:n,secretKey:e}},r.sign.publicKeyLength=Vr,r.sign.secretKeyLength=Xr,r.sign.seedLength=Dr,r.sign.signatureLength=Ir,r.hash=function(r){yr(r);var n=new Uint8Array(Hr);return Q(n,r,r.length),n},r.hash.hashLength=Hr,r.verify=function(r,n){return yr(r,n),0===r.length||0===n.length?!1:r.length!==n.length?!1:0===a(r,0,n,0,r.length)?!0:!1},r.setPRNG=function(r){gr=r},function(){var n="undefined"!=typeof self?self.crypto||self.msCrypto:null;if(n&&n.getRandomValues){var e=65536;r.setPRNG(function(r,t){var o,i=new Uint8Array(t);for(o=0;t>o;o+=e)n.getRandomValues(i.subarray(o,o+Math.min(t-o,e)));for(o=0;t>o;o++)r[o]=i[o];sr(i)})}else"undefined"!=typeof require&&(n=require("crypto"),n&&n.randomBytes&&r.setPRNG(function(r,e){var t,o=n.randomBytes(e);for(t=0;e>t;t++)r[t]=o[t];sr(o)}))}()}("undefined"!=typeof module&&module.exports?module.exports:self.nacl=self.nacl||{}); \ No newline at end of file diff --git a/node_modules/tweetnacl/package.json b/node_modules/tweetnacl/package.json deleted file mode 100644 index ce3e06f..0000000 --- a/node_modules/tweetnacl/package.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "_args": [ - [ - "tweetnacl@~0.14.0", - "/Users/jbaylina/git/MVP/node_modules/sshpk" - ] - ], - "_from": "tweetnacl@>=0.14.0 <0.15.0", - "_id": "tweetnacl@0.14.3", - "_inCache": true, - "_installable": true, - "_location": "/tweetnacl", - "_nodeVersion": "5.6.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/tweetnacl-0.14.3.tgz_1459224951636_0.7403244483284652" - }, - "_npmUser": { - "email": "dmitry@codingrobots.com", - "name": "dchest" - }, - "_npmVersion": "3.7.3", - "_phantomChildren": {}, - "_requested": { - "name": "tweetnacl", - "raw": "tweetnacl@~0.14.0", - "rawSpec": "~0.14.0", - "scope": null, - "spec": ">=0.14.0 <0.15.0", - "type": "range" - }, - "_requiredBy": [ - "/bcrypt-pbkdf", - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.3.tgz", - "_shasum": "3da382f670f25ded78d7b3d1792119bca0b7132d", - "_shrinkwrap": null, - "_spec": "tweetnacl@~0.14.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/sshpk", - "author": { - "name": "TweetNaCl-js contributors" - }, - "browser": { - "buffer": false, - "crypto": false - }, - "bugs": { - "url": "https://github.com/dchest/tweetnacl-js/issues" - }, - "dependencies": {}, - "description": "Port of TweetNaCl cryptographic library to JavaScript", - "devDependencies": { - "browserify": "^13.0.0", - "eslint": "^2.2.0", - "faucet": "^0.0.1", - "tap-browser-color": "^0.1.2", - "tape": "^4.4.0", - "tape-run": "^2.1.3", - "tweetnacl-util": "^0.13.3", - "uglify-js": "^2.6.1" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "3da382f670f25ded78d7b3d1792119bca0b7132d", - "tarball": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.3.tgz" - }, - "gitHead": "3eb4fc544a2a1d6c0a41b98b9906288ca8b087e4", - "homepage": "https://tweetnacl.js.org", - "keywords": [ - "crypto", - "cryptography", - "curve25519", - "ed25519", - "encrypt", - "hash", - "key", - "nacl", - "poly1305", - "public", - "salsa20", - "signatures" - ], - "license": "SEE LICENSE IN COPYING.txt", - "main": "nacl-fast.js", - "maintainers": [ - { - "email": "dmitry@codingrobots.com", - "name": "dchest" - } - ], - "name": "tweetnacl", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/dchest/tweetnacl-js.git" - }, - "scripts": { - "bench": "node test/benchmark/bench.js", - "build": "uglifyjs nacl.js -c -m -o nacl.min.js && uglifyjs nacl-fast.js -c -m -o nacl-fast.min.js", - "build-test-browser": "browserify test/browser/init.js test/*.js | uglifyjs -c -m -o test/browser/_bundle.js 2>/dev/null && browserify test/browser/init.js test/*.quick.js | uglifyjs -c -m -o test/browser/_bundle-quick.js 2>/dev/null", - "lint": "eslint nacl.js nacl-fast.js test/*.js test/benchmark/*.js", - "test": "npm run test-node-all && npm run test-browser", - "test-browser": "NACL_SRC=${NACL_SRC:='nacl.min.js'} && npm run build-test-browser && cat $NACL_SRC test/browser/_bundle.js | tape-run | faucet", - "test-node": "tape test/*.js | faucet", - "test-node-all": "make -C test/c && tape test/*.js test/c/*.js | faucet" - }, - "version": "0.14.3" -} diff --git a/node_modules/unorm/LICENSE.md b/node_modules/unorm/LICENSE.md deleted file mode 100644 index ed1d4f3..0000000 --- a/node_modules/unorm/LICENSE.md +++ /dev/null @@ -1,42 +0,0 @@ -The software dual licensed under the MIT and GPL licenses. MIT license: - - Copyright (c) 2008-2013 Matsuza , Bjarke Walling - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - -GPL notice (please read the [full GPL license] online): - - Copyright (C) 2008-2013 Matsuza , Bjarke Walling - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -[full GPL license]: http://www.gnu.org/licenses/gpl-2.0-standalone.html diff --git a/node_modules/unorm/README.md b/node_modules/unorm/README.md deleted file mode 100644 index 6ff6420..0000000 --- a/node_modules/unorm/README.md +++ /dev/null @@ -1,118 +0,0 @@ -This is [Unicode Normalizer] in a Common JS module. I'm not affiliated with Matsuza, the original author of Unicode Normalizer. - -[![Build Status](https://travis-ci.org/walling/unorm.png?branch=master)](https://travis-ci.org/walling/unorm) - - -Installation ------------- - -```bash -npm install unorm -``` - -Polyfill --------- - -You can use this module as a polyfill for [String.prototype.normalize], for example: - -```javascript -console.log('æøåäüö'.normalize('NFKD')); -``` - -The module uses some [EcmaScript 5](http://kangax.github.io/es5-compat-table/) features. Other browsers should use a compability shim, e.g. [es5-shim](https://github.com/kriskowal/es5-shim). - -Functions ---------- - -This module exports four functions: `nfc`, `nfd`, `nfkc`, and `nfkd`; one for each Unicode normalization. In the browser the functions are exported in the `unorm` global. In CommonJS environments you just require the module. Functions: - - * `unorm.nfd(str)` – Canonical Decomposition - * `unorm.nfc(str)` – Canonical Decomposition, followed by Canonical Composition - * `unorm.nfkd(str)` – Compatibility Decomposition - * `unorm.nfkc(str)` – Compatibility Decomposition, followed by Canonical Composition - - -Node.JS example ---------------- - -For a longer example, see `examples` directory. - -```javascript -var unorm = require('unorm'); - -var text = - 'The \u212B symbol invented by A. J. \u00C5ngstr\u00F6m ' + - '(1814, L\u00F6gd\u00F6, \u2013 1874) denotes the length ' + - '10\u207B\u00B9\u2070 m.'; - -var combining = /[\u0300-\u036F]/g; // Use XRegExp('\\p{M}', 'g'); see example.js. - -console.log('Regular: ' + text); -console.log('NFC: ' + unorm.nfc(text)); -console.log('NFD: ' + unorm.nfd(text)); -console.log('NFKC: ' + unorm.nfkc(text)); -console.log('NFKD: * ' + unorm.nfkd(text).replace(combining, '')); -console.log(' * = Combining characters removed from decomposed form.'); -``` - - -Road map --------- - -As of November 2013. Longer term: - -- Look at possible optimizations (speed primarely, module size secondarily) -- Adding functions to quick check normalizations: `is_nfc`, `is_nfd`, etc. - - -Contributers ------------- - - - **Oleg Grenrus** is helping to maintain this library. He cleaned up the code base, fixed JSHint errors, created a test suite and updated the normalization data to Unicode 6.3. - - -Development notes ------------------ - -- [Unicode normalization forms report](http://www.unicode.org/reports/tr15/) -- Unicode data can be found from http://www.unicode.org/Public/UCD/latest/ucd - -To generate new unicode data, run: -```sh -cd src/data/src -javac UnormNormalizerBuilder.java -java UnormNormalizerBuilder -``` -produced `unormdata.js` contains needed table - -Execute `node benchmark/benchmark.js` to run simple benchmarks, if you do any changes which may affect performance. - -License -------- - -This project includes the software package **Unicode Normalizer 1.0.0**. The -software dual licensed under the MIT and GPL licenses. Here is the MIT license: - - Copyright (c) 2008-2013 Matsuza , Bjarke Walling - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - - -[Unicode Normalizer]: http://coderepos.org/share/browser/lang/javascript/UnicodeNormalizer -[String.prototype.normalize]: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.5.3.26 diff --git a/node_modules/unorm/lib/unorm.js b/node_modules/unorm/lib/unorm.js deleted file mode 100644 index 92d3699..0000000 --- a/node_modules/unorm/lib/unorm.js +++ /dev/null @@ -1,442 +0,0 @@ -(function (root) { - "use strict"; - -/***** unorm.js *****/ - -/* - * UnicodeNormalizer 1.0.0 - * Copyright (c) 2008 Matsuza - * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. - * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $ - * $Rev: 13309 $ - */ - - var DEFAULT_FEATURE = [null, 0, {}]; - var CACHE_THRESHOLD = 10; - var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28; - var NCount = VCount * TCount; // 588 - var SCount = LCount * NCount; // 11172 - - var UChar = function(cp, feature){ - this.codepoint = cp; - this.feature = feature; - }; - - // Strategies - var cache = {}; - var cacheCounter = []; - for (var i = 0; i <= 0xFF; ++i){ - cacheCounter[i] = 0; - } - - function fromCache(next, cp, needFeature){ - var ret = cache[cp]; - if(!ret){ - ret = next(cp, needFeature); - if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){ - cache[cp] = ret; - } - } - return ret; - } - - function fromData(next, cp, needFeature){ - var hash = cp & 0xFF00; - var dunit = UChar.udata[hash] || {}; - var f = dunit[cp]; - return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE); - } - function fromCpOnly(next, cp, needFeature){ - return !!needFeature ? next(cp, needFeature) : new UChar(cp, null); - } - function fromRuleBasedJamo(next, cp, needFeature){ - var j; - if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){ - return next(cp, needFeature); - } - if(LBase <= cp && cp < LBase + LCount){ - var c = {}; - var base = (cp - LBase) * VCount; - for (j = 0; j < VCount; ++j){ - c[VBase + j] = SBase + TCount * (j + base); - } - return new UChar(cp, [,,c]); - } - - var SIndex = cp - SBase; - var TIndex = SIndex % TCount; - var feature = []; - if(TIndex !== 0){ - feature[0] = [SBase + SIndex - TIndex, TBase + TIndex]; - } else { - feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)]; - feature[2] = {}; - for (j = 1; j < TCount; ++j){ - feature[2][TBase + j] = cp + j; - } - } - return new UChar(cp, feature); - } - function fromCpFilter(next, cp, needFeature){ - return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature); - } - - var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData]; - - UChar.fromCharCode = strategies.reduceRight(function (next, strategy) { - return function (cp, needFeature) { - return strategy(next, cp, needFeature); - }; - }, null); - - UChar.isHighSurrogate = function(cp){ - return cp >= 0xD800 && cp <= 0xDBFF; - }; - UChar.isLowSurrogate = function(cp){ - return cp >= 0xDC00 && cp <= 0xDFFF; - }; - - UChar.prototype.prepFeature = function(){ - if(!this.feature){ - this.feature = UChar.fromCharCode(this.codepoint, true).feature; - } - }; - - UChar.prototype.toString = function(){ - if(this.codepoint < 0x10000){ - return String.fromCharCode(this.codepoint); - } else { - var x = this.codepoint - 0x10000; - return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00); - } - }; - - UChar.prototype.getDecomp = function(){ - this.prepFeature(); - return this.feature[0] || null; - }; - - UChar.prototype.isCompatibility = function(){ - this.prepFeature(); - return !!this.feature[1] && (this.feature[1] & (1 << 8)); - }; - UChar.prototype.isExclude = function(){ - this.prepFeature(); - return !!this.feature[1] && (this.feature[1] & (1 << 9)); - }; - UChar.prototype.getCanonicalClass = function(){ - this.prepFeature(); - return !!this.feature[1] ? (this.feature[1] & 0xff) : 0; - }; - UChar.prototype.getComposite = function(following){ - this.prepFeature(); - if(!this.feature[2]){ - return null; - } - var cp = this.feature[2][following.codepoint]; - return cp ? UChar.fromCharCode(cp) : null; - }; - - var UCharIterator = function(str){ - this.str = str; - this.cursor = 0; - }; - UCharIterator.prototype.next = function(){ - if(!!this.str && this.cursor < this.str.length){ - var cp = this.str.charCodeAt(this.cursor++); - var d; - if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){ - cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000; - ++this.cursor; - } - return UChar.fromCharCode(cp); - } else { - this.str = null; - return null; - } - }; - - var RecursDecompIterator = function(it, cano){ - this.it = it; - this.canonical = cano; - this.resBuf = []; - }; - - RecursDecompIterator.prototype.next = function(){ - function recursiveDecomp(cano, uchar){ - var decomp = uchar.getDecomp(); - if(!!decomp && !(cano && uchar.isCompatibility())){ - var ret = []; - for(var i = 0; i < decomp.length; ++i){ - var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i])); - ret = ret.concat(a); - } - return ret; - } else { - return [uchar]; - } - } - if(this.resBuf.length === 0){ - var uchar = this.it.next(); - if(!uchar){ - return null; - } - this.resBuf = recursiveDecomp(this.canonical, uchar); - } - return this.resBuf.shift(); - }; - - var DecompIterator = function(it){ - this.it = it; - this.resBuf = []; - }; - - DecompIterator.prototype.next = function(){ - var cc; - if(this.resBuf.length === 0){ - do{ - var uchar = this.it.next(); - if(!uchar){ - break; - } - cc = uchar.getCanonicalClass(); - var inspt = this.resBuf.length; - if(cc !== 0){ - for(; inspt > 0; --inspt){ - var uchar2 = this.resBuf[inspt - 1]; - var cc2 = uchar2.getCanonicalClass(); - if(cc2 <= cc){ - break; - } - } - } - this.resBuf.splice(inspt, 0, uchar); - } while(cc !== 0); - } - return this.resBuf.shift(); - }; - - var CompIterator = function(it){ - this.it = it; - this.procBuf = []; - this.resBuf = []; - this.lastClass = null; - }; - - CompIterator.prototype.next = function(){ - while(this.resBuf.length === 0){ - var uchar = this.it.next(); - if(!uchar){ - this.resBuf = this.procBuf; - this.procBuf = []; - break; - } - if(this.procBuf.length === 0){ - this.lastClass = uchar.getCanonicalClass(); - this.procBuf.push(uchar); - } else { - var starter = this.procBuf[0]; - var composite = starter.getComposite(uchar); - var cc = uchar.getCanonicalClass(); - if(!!composite && (this.lastClass < cc || this.lastClass === 0)){ - this.procBuf[0] = composite; - } else { - if(cc === 0){ - this.resBuf = this.procBuf; - this.procBuf = []; - } - this.lastClass = cc; - this.procBuf.push(uchar); - } - } - } - return this.resBuf.shift(); - }; - - var createIterator = function(mode, str){ - switch(mode){ - case "NFD": - return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)); - case "NFKD": - return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)); - case "NFC": - return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true))); - case "NFKC": - return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false))); - } - throw mode + " is invalid"; - }; - var normalize = function(mode, str){ - var it = createIterator(mode, str); - var ret = ""; - var uchar; - while(!!(uchar = it.next())){ - ret += uchar.toString(); - } - return ret; - }; - - /* API functions */ - function nfd(str){ - return normalize("NFD", str); - } - - function nfkd(str){ - return normalize("NFKD", str); - } - - function nfc(str){ - return normalize("NFC", str); - } - - function nfkc(str){ - return normalize("NFKC", str); - } - -/* Unicode data */ -UChar.udata={ -0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]}, -256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]}, -512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]}, -768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]}, -1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]}, -1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]}, -1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]}, -1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]}, -2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]}, -2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]}, -2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]}, -2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]}, -3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]}, -3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]}, -3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]}, -3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]}, -4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]}, -4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]}, -4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]}, -4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]}, -5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]}, -5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]}, -5632:{71231:[,9],71350:[,9],71351:[,7]}, -5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]}, -6144:{6313:[,228]}, -6400:{6457:[,222],6458:[,230],6459:[,220]}, -6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]}, -6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]}, -7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]}, -7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]}, -7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]}, -7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]}, -8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]}, -8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]}, -8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]}, -8960:{9001:[[12296]],9002:[[12297]]}, -9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]}, -10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]}, -11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]}, -11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]}, -11776:{11935:[[27597],256],12019:[[40863],256]}, -12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]}, -12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]}, -12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]}, -12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]}, -13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]}, -27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]}, -27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]}, -42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]}, -42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]}, -43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]}, -43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]}, -43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]}, -43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]}, -48128:{113822:[,1]}, -53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]}, -53760:{119362:[,230],119363:[,230],119364:[,230]}, -54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]}, -54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]}, -54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]}, -55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]}, -59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]}, -60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]}, -61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]}, -61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]}, -63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]}, -63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]}, -64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]}, -64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]}, -64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]}, -64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]}, -65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]}, -65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]} - -}; - - /***** Module to export */ - var unorm = { - nfc: nfc, - nfd: nfd, - nfkc: nfkc, - nfkd: nfkd - }; - - /*globals module:true,define:true*/ - - // CommonJS - if (typeof module === "object") { - module.exports = unorm; - - // AMD - } else if (typeof define === "function" && define.amd) { - define("unorm", function () { - return unorm; - }); - - // Global - } else { - root.unorm = unorm; - } - - /***** Export as shim for String::normalize method *****/ - /* - http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21 - - 21.1.3.12 String.prototype.normalize(form="NFC") - When the normalize method is called with one argument form, the following steps are taken: - - 1. Let O be CheckObjectCoercible(this value). - 2. Let S be ToString(O). - 3. ReturnIfAbrupt(S). - 4. If form is not provided or undefined let form be "NFC". - 5. Let f be ToString(form). - 6. ReturnIfAbrupt(f). - 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception. - 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms. - 9. Return ns. - - The length property of the normalize method is 0. - - *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method. - */ - unorm.shimApplied = false; - - if (!String.prototype.normalize) { - String.prototype.normalize = function(form) { - var str = "" + this; - form = form === undefined ? "NFC" : form; - - if (form === "NFC") { - return unorm.nfc(str); - } else if (form === "NFD") { - return unorm.nfd(str); - } else if (form === "NFKC") { - return unorm.nfkc(str); - } else if (form === "NFKD") { - return unorm.nfkd(str); - } else { - throw new RangeError("Invalid normalization form: " + form); - } - }; - - unorm.shimApplied = true; - } -}(this)); diff --git a/node_modules/unorm/package.json b/node_modules/unorm/package.json deleted file mode 100644 index 8ad9c23..0000000 --- a/node_modules/unorm/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "unorm@^1.3.3", - "/Users/jbaylina/git/MVP/node_modules/bip39" - ] - ], - "_from": "unorm@>=1.3.3 <2.0.0", - "_id": "unorm@1.4.1", - "_inCache": true, - "_installable": true, - "_location": "/unorm", - "_npmUser": { - "email": "bwp@bwp.dk", - "name": "walling" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "unorm", - "raw": "unorm@^1.3.3", - "rawSpec": "^1.3.3", - "scope": null, - "spec": ">=1.3.3 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/bip39" - ], - "_resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "_shasum": "364200d5f13646ca8bcd44490271335614792300", - "_shrinkwrap": null, - "_spec": "unorm@^1.3.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/bip39", - "author": { - "email": "bwp@bwp.dk", - "name": "Bjarke Walling" - }, - "bugs": { - "url": "https://github.com/walling/unorm/issues" - }, - "contributors": [ - { - "email": "bwp@bwp.dk", - "name": "Bjarke Walling" - }, - { - "email": "oleg.grenrus@iki.fi", - "name": "Oleg Grenrus" - }, - { - "email": "matsuza@gmail.com", - "name": "Matsuza" - } - ], - "dependencies": {}, - "description": "JavaScript Unicode 8.0 Normalization - NFC, NFD, NFKC, NFKD. Read UAX #15 Unicode Normalization Forms.", - "devDependencies": { - "benchmark": "~1.0.0", - "grunt": "~0.4.1", - "grunt-contrib-jshint": "~0.8.0", - "grunt-contrib-watch": "~0.5.0", - "grunt-simple-mocha": "~0.4.0", - "unorm": "1.4.1" - }, - "directories": {}, - "dist": { - "shasum": "364200d5f13646ca8bcd44490271335614792300", - "tarball": "http://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz" - }, - "engines": { - "node": ">= 0.4.0" - }, - "gitHead": "e802d0d7844cf74b03742bce1147a82ace218396", - "homepage": "https://github.com/walling/unorm", - "license": "MIT or GPL-2.0", - "main": "./lib/unorm.js", - "maintainers": [ - { - "email": "bwp@bwp.dk", - "name": "walling" - } - ], - "name": "unorm", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/walling/unorm.git" - }, - "scripts": { - "test": "grunt test" - }, - "version": "1.4.1" -} diff --git a/node_modules/utf8/LICENSE-MIT.txt b/node_modules/utf8/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7..0000000 --- a/node_modules/utf8/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/utf8/README.md b/node_modules/utf8/README.md deleted file mode 100644 index 36b8de0..0000000 --- a/node_modules/utf8/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# utf8.js [![Build status](https://travis-ci.org/mathiasbynens/utf8.js.svg?branch=master)](https://travis-ci.org/mathiasbynens/utf8.js) [![Code coverage status](http://img.shields.io/coveralls/mathiasbynens/utf8.js/master.svg)](https://coveralls.io/r/mathiasbynens/utf8.js) [![Dependency status](https://gemnasium.com/mathiasbynens/utf8.js.svg)](https://gemnasium.com/mathiasbynens/utf8.js) - -_utf8.js_ is a well-tested UTF-8 encoder/decoder written in JavaScript. Unlike many other JavaScript solutions, it is designed to be a _proper_ UTF-8 encoder/decoder: it can encode/decode any scalar Unicode code point values, as per [the Encoding Standard](https://encoding.spec.whatwg.org/#utf-8). [Here’s an online demo.](https://mothereff.in/utf-8) - -Feel free to fork if you see possible improvements! - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install utf8 -``` - -Via [Bower](http://bower.io/): - -```bash -bower install utf8 -``` - -Via [Component](https://github.com/component/component): - -```bash -component install mathiasbynens/utf8.js -``` - -In a browser: - -```html - -``` - -In [Narwhal](http://narwhaljs.org/), [Node.js](https://nodejs.org/), and [RingoJS ≥ v0.8.0](http://ringojs.org/): - -```js -var utf8 = require('utf8'); -``` - -In [Rhino](http://www.mozilla.org/rhino/): - -```js -load('utf8.js'); -``` - -Using an AMD loader like [RequireJS](http://requirejs.org/): - -```js -require( - { - 'paths': { - 'utf8': 'path/to/utf8' - } - }, - ['utf8'], - function(utf8) { - console.log(utf8); - } -); -``` - -## API - -### `utf8.encode(string)` - -Encodes any given JavaScript string (`string`) as UTF-8, and returns the UTF-8-encoded version of the string. It throws an error if the input string contains a non-scalar value, i.e. a lone surrogate. (If you need to be able to encode non-scalar values as well, use [WTF-8](https://mths.be/wtf8) instead.) - -```js -// U+00A9 COPYRIGHT SIGN; see http://codepoints.net/U+00A9 -utf8.encode('\xA9'); -// → '\xC2\xA9' -// U+10001 LINEAR B SYLLABLE B038 E; see http://codepoints.net/U+10001 -utf8.encode('\uD800\uDC01'); -// → '\xF0\x90\x80\x81' -``` - -### `utf8.decode(byteString)` - -Decodes any given UTF-8-encoded string (`byteString`) as UTF-8, and returns the UTF-8-decoded version of the string. It throws an error when malformed UTF-8 is detected. (If you need to be able to decode encoded non-scalar values as well, use [WTF-8](https://mths.be/wtf8) instead.) - -```js -utf8.decode('\xC2\xA9'); -// → '\xA9' - -utf8.decode('\xF0\x90\x80\x81'); -// → '\uD800\uDC01' -// → U+10001 LINEAR B SYLLABLE B038 E -``` - -### `utf8.version` - -A string representing the semantic version number. - -## Support - -utf8.js has been tested in at least Chrome 27-39, Firefox 3-34, Safari 4-8, Opera 10-28, IE 6-11, Node.js v0.10.0, Narwhal 0.3.2, RingoJS 0.8-0.11, PhantomJS 1.9.0, and Rhino 1.7RC4. - -## Unit tests & code coverage - -After cloning this repository, run `npm install` to install the dependencies needed for development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. - -Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`. - -To generate the code coverage report, use `grunt cover`. - -## FAQ - -### Why is the first release named v2.0.0? Haven’t you heard of [semantic versioning](http://semver.org/)? - -Long before utf8.js was created, the `utf8` module on npm was registered and used by another (slightly buggy) library. @ryanmcgrath was kind enough to give me access to the `utf8` package on npm when I told him about utf8.js. Since there has already been a v1.0.0 release of the old library, and to avoid breaking backwards compatibility with projects that rely on the `utf8` npm package, I decided the tag the first release of utf8.js as v2.0.0 and take it from there. - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -utf8.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/utf8/package.json b/node_modules/utf8/package.json deleted file mode 100644 index 45d08e0..0000000 --- a/node_modules/utf8/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "utf8@^2.1.1", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet" - ] - ], - "_from": "utf8@>=2.1.1 <3.0.0", - "_id": "utf8@2.1.2", - "_inCache": true, - "_installable": true, - "_location": "/utf8", - "_nodeVersion": "6.8.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/utf8-2.1.2.tgz_1476775892107_0.41815652255900204" - }, - "_npmUser": { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "utf8", - "raw": "utf8@^2.1.1", - "rawSpec": "^2.1.1", - "scope": null, - "spec": ">=2.1.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc/web3", - "/ethereumjs-wallet", - "/web3", - "/web3-provider-engine/web3" - ], - "_resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "_shasum": "1fa0d9270e9be850d9b05027f63519bf46457d96", - "_shrinkwrap": null, - "_spec": "utf8@^2.1.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "bugs": { - "url": "https://github.com/mathiasbynens/utf8.js/issues" - }, - "dependencies": {}, - "description": "A well-tested UTF-8 encoder/decoder written in JavaScript.", - "devDependencies": { - "coveralls": "^2.11.14", - "grunt": "^1.0.1", - "grunt-shell": "^1.1.2", - "istanbul": "^0.4.5", - "qunit-extras": "^1.4.2", - "qunitjs": "~1.11.0", - "requirejs": "^2.3.2" - }, - "directories": {}, - "dist": { - "shasum": "1fa0d9270e9be850d9b05027f63519bf46457d96", - "tarball": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz" - }, - "files": [ - "LICENSE-MIT.txt", - "utf8.js" - ], - "gitHead": "5566334e1aa5347ba652c38dc186df08b47d8fb9", - "homepage": "https://mths.be/utf8js", - "keywords": [ - "charset", - "encoding", - "unicode", - "utf8" - ], - "license": "MIT", - "main": "utf8.js", - "maintainers": [ - { - "email": "ryan@venodesigns.net", - "name": "ryanmcgrath" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - } - ], - "name": "utf8", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mathiasbynens/utf8.js.git" - }, - "scripts": { - "test": "node tests/tests.js" - }, - "version": "2.1.2" -} diff --git a/node_modules/utf8/utf8.js b/node_modules/utf8/utf8.js deleted file mode 100644 index c55e85c..0000000 --- a/node_modules/utf8/utf8.js +++ /dev/null @@ -1,244 +0,0 @@ -/*! https://mths.be/utf8js v2.1.2 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.1.2', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); diff --git a/node_modules/util-deprecate/History.md b/node_modules/util-deprecate/History.md deleted file mode 100644 index acc8675..0000000 --- a/node_modules/util-deprecate/History.md +++ /dev/null @@ -1,16 +0,0 @@ - -1.0.2 / 2015-10-07 -================== - - * use try/catch when checking `localStorage` (#3, @kumavis) - -1.0.1 / 2014-11-25 -================== - - * browser: use `console.warn()` for deprecation calls - * browser: more jsdocs - -1.0.0 / 2014-04-30 -================== - - * initial commit diff --git a/node_modules/util-deprecate/LICENSE b/node_modules/util-deprecate/LICENSE deleted file mode 100644 index 6a60e8c..0000000 --- a/node_modules/util-deprecate/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/util-deprecate/README.md b/node_modules/util-deprecate/README.md deleted file mode 100644 index 75622fa..0000000 --- a/node_modules/util-deprecate/README.md +++ /dev/null @@ -1,53 +0,0 @@ -util-deprecate -============== -### The Node.js `util.deprecate()` function with browser support - -In Node.js, this module simply re-exports the `util.deprecate()` function. - -In the web browser (i.e. via browserify), a browser-specific implementation -of the `util.deprecate()` function is used. - - -## API - -A `deprecate()` function is the only thing exposed by this module. - -``` javascript -// setup: -exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead'); - - -// users see: -foo(); -// foo() is deprecated, use bar() instead -foo(); -foo(); -``` - - -## License - -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/util-deprecate/browser.js b/node_modules/util-deprecate/browser.js deleted file mode 100644 index 549ae2f..0000000 --- a/node_modules/util-deprecate/browser.js +++ /dev/null @@ -1,67 +0,0 @@ - -/** - * Module exports. - */ - -module.exports = deprecate; - -/** - * Mark that a method should not be used. - * Returns a modified function which warns once by default. - * - * If `localStorage.noDeprecation = true` is set, then it is a no-op. - * - * If `localStorage.throwDeprecation = true` is set, then deprecated functions - * will throw an Error when invoked. - * - * If `localStorage.traceDeprecation = true` is set, then deprecated functions - * will invoke `console.trace()` instead of `console.error()`. - * - * @param {Function} fn - the function to deprecate - * @param {String} msg - the string to print to the console when `fn` is invoked - * @returns {Function} a new "deprecated" version of `fn` - * @api public - */ - -function deprecate (fn, msg) { - if (config('noDeprecation')) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (config('throwDeprecation')) { - throw new Error(msg); - } else if (config('traceDeprecation')) { - console.trace(msg); - } else { - console.warn(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -} - -/** - * Checks `localStorage` for boolean values for the given `name`. - * - * @param {String} name - * @returns {Boolean} - * @api private - */ - -function config (name) { - // accessing global.localStorage can trigger a DOMException in sandboxed iframes - try { - if (!global.localStorage) return false; - } catch (_) { - return false; - } - var val = global.localStorage[name]; - if (null == val) return false; - return String(val).toLowerCase() === 'true'; -} diff --git a/node_modules/util-deprecate/node.js b/node_modules/util-deprecate/node.js deleted file mode 100644 index 5e6fcff..0000000 --- a/node_modules/util-deprecate/node.js +++ /dev/null @@ -1,6 +0,0 @@ - -/** - * For Node.js, simply re-export the core `util.deprecate` function. - */ - -module.exports = require('util').deprecate; diff --git a/node_modules/util-deprecate/package.json b/node_modules/util-deprecate/package.json deleted file mode 100644 index fa7d875..0000000 --- a/node_modules/util-deprecate/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "util-deprecate@~1.0.1", - "/Users/jbaylina/git/MVP/node_modules/readable-stream" - ] - ], - "_from": "util-deprecate@>=1.0.1 <1.1.0", - "_id": "util-deprecate@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/util-deprecate", - "_nodeVersion": "4.1.2", - "_npmUser": { - "email": "nathan@tootallnate.net", - "name": "tootallnate" - }, - "_npmVersion": "2.14.4", - "_phantomChildren": {}, - "_requested": { - "name": "util-deprecate", - "raw": "util-deprecate@~1.0.1", - "rawSpec": "~1.0.1", - "scope": null, - "spec": ">=1.0.1 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/bl/readable-stream", - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "_shrinkwrap": null, - "_spec": "util-deprecate@~1.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/readable-stream", - "author": { - "email": "nathan@tootallnate.net", - "name": "Nathan Rajlich", - "url": "http://n8.io/" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/TooTallNate/util-deprecate/issues" - }, - "dependencies": {}, - "description": "The Node.js `util.deprecate()` function with browser support", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "tarball": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - }, - "gitHead": "475fb6857cd23fafff20c1be846c1350abf8e6d4", - "homepage": "https://github.com/TooTallNate/util-deprecate", - "keywords": [ - "util", - "deprecate", - "browserify", - "browser", - "node" - ], - "license": "MIT", - "main": "node.js", - "maintainers": [ - { - "email": "nathan@tootallnate.net", - "name": "tootallnate" - } - ], - "name": "util-deprecate", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/util-deprecate.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.0.2" -} diff --git a/node_modules/uuid/.npmignore b/node_modules/uuid/.npmignore deleted file mode 100644 index fd4f2b0..0000000 --- a/node_modules/uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/node_modules/uuid/.travis.yml b/node_modules/uuid/.travis.yml deleted file mode 100644 index 9400c11..0000000 --- a/node_modules/uuid/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.6" - - "0.8" - - "0.10" diff --git a/node_modules/uuid/LICENSE.md b/node_modules/uuid/LICENSE.md deleted file mode 100644 index f039427..0000000 --- a/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/uuid/README.md b/node_modules/uuid/README.md deleted file mode 100644 index c04bf89..0000000 --- a/node_modules/uuid/README.md +++ /dev/null @@ -1,205 +0,0 @@ -# uuid [![Build Status](https://secure.travis-ci.org/defunctzombie/node-uuid.svg?branch=master)](http://travis-ci.org/defunctzombie/node-uuid) # - -[![browser support](https://ci.testling.com/defunctzombie/node-uuid.png)](https://ci.testling.com/defunctzombie/node-uuid) - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Cryptographically strong random # generation on supporting platforms -* 1185 bytes minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html - -``` - -Or in node.js: - -``` -npm install uuid -``` - -```javascript -var uuid = require('uuid'); - -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -cd benchmark/ -npm install -node benchmark.js -``` - -For a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 2.0.0 - -* Removed uuid.BufferClass - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/uuid/benchmark/README.md b/node_modules/uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea..0000000 --- a/node_modules/uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/uuid/benchmark/bench.gnu b/node_modules/uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbb..0000000 --- a/node_modules/uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/uuid/benchmark/bench.sh b/node_modules/uuid/benchmark/bench.sh deleted file mode 100755 index d870a0c..0000000 --- a/node_modules/uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/uuid/benchmark/benchmark-native.c b/node_modules/uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f..0000000 --- a/node_modules/uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include -#include -#include -#include - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/uuid/benchmark/benchmark.js b/node_modules/uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efb..0000000 --- a/node_modules/uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/uuid/benchmark/package.json b/node_modules/uuid/benchmark/package.json deleted file mode 100644 index 94e0b59..0000000 --- a/node_modules/uuid/benchmark/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "benchmark-uuid", - "private": true, - "description": "Benchmarks for node-uuid", - "dependencies": { - "uuid": "1.4.1", - "uuid-js": "0.7.4" - } -} diff --git a/node_modules/uuid/misc/compare.js b/node_modules/uuid/misc/compare.js deleted file mode 100644 index 3de3415..0000000 --- a/node_modules/uuid/misc/compare.js +++ /dev/null @@ -1,62 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../'), - uuidjs = require('uuid-js'), - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/uuid/misc/perf.js b/node_modules/uuid/misc/perf.js deleted file mode 100644 index bdc9eb4..0000000 --- a/node_modules/uuid/misc/perf.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -var log = console.log; - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/uuid/package.json b/node_modules/uuid/package.json deleted file mode 100644 index edcd883..0000000 --- a/node_modules/uuid/package.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "_args": [ - [ - "uuid@^2.0.1", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet" - ] - ], - "_from": "uuid@>=2.0.1 <3.0.0", - "_id": "uuid@2.0.3", - "_inCache": true, - "_installable": true, - "_location": "/uuid", - "_nodeVersion": "6.2.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/uuid-2.0.3.tgz_1474232617862_0.6578061426989734" - }, - "_npmUser": { - "email": "shtylman@gmail.com", - "name": "defunctzombie" - }, - "_npmVersion": "3.8.9", - "_phantomChildren": {}, - "_requested": { - "name": "uuid", - "raw": "uuid@^2.0.1", - "rawSpec": "^2.0.1", - "scope": null, - "spec": ">=2.0.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-wallet" - ], - "_resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "_shasum": "67e2e863797215530dff318e5bf9dcebfd47b21a", - "_shrinkwrap": null, - "_spec": "uuid@^2.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-wallet", - "author": { - "email": "robert@broofa.com", - "name": "Robert Kieffer" - }, - "browser": { - "./rng.js": "./rng-browser.js" - }, - "bugs": { - "url": "https://github.com/defunctzombie/node-uuid/issues" - }, - "contributors": [ - { - "email": "dev@tavan.de", - "name": "Christoph Tavan" - }, - { - "email": "vincent@zeroload.net", - "name": "Vincent Voyer" - } - ], - "dependencies": {}, - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "devDependencies": { - "mocha": "1.8.0" - }, - "directories": {}, - "dist": { - "shasum": "67e2e863797215530dff318e5bf9dcebfd47b21a", - "tarball": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz" - }, - "gitHead": "3f44acd0e722e965c14af816e2f658361a6b15f9", - "homepage": "https://github.com/defunctzombie/node-uuid#readme", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "license": "MIT", - "main": "./uuid.js", - "maintainers": [ - { - "email": "robert@broofa.com", - "name": "broofa" - }, - { - "email": "tim@fostle.com", - "name": "tim-smart" - }, - { - "email": "vincent.voyer@gmail.com", - "name": "vvo" - }, - { - "email": "shtylman@gmail.com", - "name": "defunctzombie" - } - ], - "name": "uuid", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/defunctzombie/node-uuid.git" - }, - "scripts": { - "test": "mocha test/test.js" - }, - "testling": { - "browsers": [ - "ie6..latest", - "firefox/3.6..latest", - "chrome/22..latest", - "safari/5.1..latest" - ], - "files": "test/*.js", - "harness": "mocha-tdd" - }, - "version": "2.0.3" -} diff --git a/node_modules/uuid/rng-browser.js b/node_modules/uuid/rng-browser.js deleted file mode 100644 index 82ffaf6..0000000 --- a/node_modules/uuid/rng-browser.js +++ /dev/null @@ -1,32 +0,0 @@ - -var rng; - -var crypto = global.crypto || global.msCrypto; // for IE 11 -if (crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; -} - -if (!rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; -} - -module.exports = rng; - diff --git a/node_modules/uuid/rng.js b/node_modules/uuid/rng.js deleted file mode 100644 index 3977f79..0000000 --- a/node_modules/uuid/rng.js +++ /dev/null @@ -1,4 +0,0 @@ -var rb = require('crypto').randomBytes; -module.exports = function() { - return rb(16); -}; diff --git a/node_modules/uuid/test/mocha.opts b/node_modules/uuid/test/mocha.opts deleted file mode 100644 index e2bfcc5..0000000 --- a/node_modules/uuid/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---ui qunit diff --git a/node_modules/uuid/test/test.js b/node_modules/uuid/test/test.js deleted file mode 100644 index 4c9872f..0000000 --- a/node_modules/uuid/test/test.js +++ /dev/null @@ -1,105 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - test(name, function() { - // avoid .map for older browsers - for (var i=0 ; i 10k ids created in 1ms', function() { - // Verify throw if too many ids created - var thrown = false; - try { - uuid.v1({msecs: TIME, nsecs: 10000}); - } catch (e) { - thrown = true; - } - assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); -}); - -test('clock regression by msec', function() { - // Verify clock regression bumps clockseq - var uidt = uuid.v1({msecs: TIME}); - var uidtb = uuid.v1({msecs: TIME - 1}); - assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' - ); -}); - -test('clock regression by nsec', function() { - // Verify clock regression bumps clockseq - var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); - var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); - assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' - ); -}); - -test('explicit options product expected id', function() { - // Verify explicit options produce expected id - var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] - }); - assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); -}); - -test('ids spanning 1ms boundary are 100ns apart', function() { - // Verify adjacent ids across a msec boundary are 1 time unit apart - var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); - var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - - var before = u0.split('-')[0], after = u1.split('-')[0]; - var dt = parseInt(after, 16) - parseInt(before, 16); - assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); -}); - -test('parse/unparse', function() { - var id = '00112233445566778899aabbccddeeff'; - assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); - assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); -}); - diff --git a/node_modules/uuid/uuid.js b/node_modules/uuid/uuid.js deleted file mode 100644 index be5bfed..0000000 --- a/node_modules/uuid/uuid.js +++ /dev/null @@ -1,183 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -// Unique ID creation requires a high quality random # generator. We feature -// detect to determine the best RNG source, normalizing to a function that -// returns 128-bits of randomness, since that's what's usually required -var _rng = require('./rng'); - -// Maps for number <-> hex string conversion -var _byteToHex = []; -var _hexToByte = {}; -for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; -} - -// **`parse()` - Parse a UUID into it's component bytes** -function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; -} - -// **`unparse()` - Convert UUID byte array (ala parse()) into a string** -function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; -} - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -// random #'s we need to init node and clockseq -var _seedBytes = _rng(); - -// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] -]; - -// Per 4.2.2, randomize (14 bit) clockseq -var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - -// Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; - -// See https://github.com/broofa/node-uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); -} - -// **`v4()` - Generate random UUID** - -// See https://github.com/broofa/node-uuid for API details -function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); -} - -// Export public API -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; -uuid.parse = parse; -uuid.unparse = unparse; - -module.exports = uuid; diff --git a/node_modules/validate-npm-package-license/LICENSE b/node_modules/validate-npm-package-license/LICENSE deleted file mode 100644 index a5e905d..0000000 --- a/node_modules/validate-npm-package-license/LICENSE +++ /dev/null @@ -1,174 +0,0 @@ -SPDX:Apache-2.0 - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the -copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other -entities that control, are controlled by, or are under common control -with that entity. For the purposes of this definition, "control" means -(i) the power, direct or indirect, to cause the direction or management -of such entity, whether by contract or otherwise, or (ii) ownership of -fifty percent (50%) or more of the outstanding shares, or (iii) -beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, -including but not limited to software source code, documentation source, -and configuration files. - -"Object" form shall mean any form resulting from mechanical -transformation or translation of a Source form, including but not -limited to compiled object code, generated documentation, and -conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object -form, made available under the License, as indicated by a copyright -notice that is included in or attached to the work (an example is -provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object -form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain -separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original -version of the Work and any modifications or additions to that Work or -Derivative Works thereof, that is intentionally submitted to Licensor -for inclusion in the Work by the copyright owner or by an individual or -Legal Entity authorized to submit on behalf of the copyright owner. For -the purposes of this definition, "submitted" means any form of -electronic, verbal, or written communication sent to the Licensor or its -representatives, including but not limited to communication on -electronic mailing lists, source code control systems, and issue -tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding -communication that is conspicuously marked or otherwise designated in -writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on -behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright -license to reproduce, prepare Derivative Works of, publicly display, -publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this -License, each Contributor hereby grants to You a perpetual, worldwide, -non-exclusive, no-charge, royalty-free, irrevocable (except as stated in -this section) patent license to make, have made, use, offer to sell, -sell, import, and otherwise transfer the Work, where such license -applies only to those patent claims licensable by such Contributor that -are necessarily infringed by their Contribution(s) alone or by -combination of their Contribution(s) with the Work to which such -Contribution(s) was submitted. If You institute patent litigation -against any entity (including a cross-claim or counterclaim in a -lawsuit) alleging that the Work or a Contribution incorporated within -the Work constitutes direct or contributory patent infringement, then -any patent licenses granted to You under this License for that Work -shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work -or Derivative Works thereof in any medium, with or without -modifications, and in Source or Object form, provided that You meet the -following conditions: - -(a) You must give any other recipients of the Work or Derivative Works a -copy of this License; and - -(b) You must cause any modified files to carry prominent notices stating -that You changed the files; and - -(c) You must retain, in the Source form of any Derivative Works that You -distribute, all copyright, patent, trademark, and attribution notices -from the Source form of the Work, excluding those notices that do not -pertain to any part of the Derivative Works; and - -(d) If the Work includes a "NOTICE" text file as part of its -distribution, then any Derivative Works that You distribute must include -a readable copy of the attribution notices contained within such NOTICE -file, excluding those notices that do not pertain to any part of the -Derivative Works, in at least one of the following places: within a -NOTICE text file distributed as part of the Derivative Works; within the -Source form or documentation, if provided along with the Derivative -Works; or, within a display generated by the Derivative Works, if and -wherever such third-party notices normally appear. The contents of the -NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative -Works that You distribute, alongside or as an addendum to the NOTICE -text from the Work, provided that such additional attribution notices -cannot be construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may -provide additional or different license terms and conditions for use, -reproduction, or distribution of Your modifications, or for any such -Derivative Works as a whole, provided Your use, reproduction, and -distribution of the Work otherwise complies with the conditions stated -in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, -any Contribution intentionally submitted for inclusion in the Work by -You to the Licensor shall be under the terms and conditions of this -License, without any additional terms or conditions. Notwithstanding the -above, nothing herein shall supersede or modify the terms of any -separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. This License does not grant permission to use the trade -names, trademarks, service marks, or product names of the Licensor, -except as required for reasonable and customary use in describing the -origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed -to in writing, Licensor provides the Work (and each Contributor provides -its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS -OF ANY KIND, either express or implied, including, without limitation, -any warranties or conditions of TITLE, NON-INFRINGEMENT, -MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely -responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your -exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, -whether in tort (including negligence), contract, or otherwise, unless -required by applicable law (such as deliberate and grossly negligent -acts) or agreed to in writing, shall any Contributor be liable to You -for damages, including any direct, indirect, special, incidental, or -consequential damages of any character arising as a result of this -License or out of the use or inability to use the Work (including but -not limited to damages for loss of goodwill, work stoppage, computer -failure or malfunction, or any and all other commercial damages or -losses), even if such Contributor has been advised of the possibility of -such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the -Work or Derivative Works thereof, You may choose to offer, and charge a -fee for, acceptance of support, warranty, indemnity, or other liability -obligations and/or rights consistent with this License. However, in -accepting such obligations, You may act only on Your own behalf and on -Your sole responsibility, not on behalf of any other Contributor, and -only if You agree to indemnify, defend, and hold each Contributor -harmless for any liability incurred by, or claims asserted against, such -Contributor by reason of your accepting any such warranty or additional -liability. diff --git a/node_modules/validate-npm-package-license/README.md b/node_modules/validate-npm-package-license/README.md deleted file mode 100644 index c5b3bfc..0000000 --- a/node_modules/validate-npm-package-license/README.md +++ /dev/null @@ -1,113 +0,0 @@ -validate-npm-package-license -============================ - -Give me a string and I'll tell you if it's a valid npm package license string. - -```javascript -var valid = require('validate-npm-package-license'); -``` - -SPDX license identifiers are valid license strings: - -```javascript - -var assert = require('assert'); -var validSPDXExpression = { - validForNewPackages: true, - validForOldPackages: true, - spdx: true -}; - -assert.deepEqual(valid('MIT'), validSPDXExpression); -assert.deepEqual(valid('BSD-2-Clause'), validSPDXExpression); -assert.deepEqual(valid('Apache-2.0'), validSPDXExpression); -assert.deepEqual(valid('ISC'), validSPDXExpression); -``` -The function will return a warning and suggestion for nearly-correct license identifiers: - -```javascript -assert.deepEqual( - valid('Apache 2.0'), - { - validForOldPackages: false, - validForNewPackages: false, - warnings: [ - 'license should be ' + - 'a valid SPDX license expression (without "LicenseRef"), ' + - '"UNLICENSED", or ' + - '"SEE LICENSE IN "', - 'license is similar to the valid expression "Apache-2.0"' - ] - } -); -``` - -SPDX expressions are valid, too ... - -```javascript -// Simple SPDX license expression for dual licensing -assert.deepEqual( - valid('(GPL-3.0 OR BSD-2-Clause)'), - validSPDXExpression -); -``` - -... except if they contain `LicenseRef`: - -```javascript -var warningAboutLicenseRef = { - validForOldPackages: false, - validForNewPackages: false, - spdx: true, - warnings: [ - 'license should be ' + - 'a valid SPDX license expression (without "LicenseRef"), ' + - '"UNLICENSED", or ' + - '"SEE LICENSE IN "', - ] -}; - -assert.deepEqual( - valid('LicenseRef-Made-Up'), - warningAboutLicenseRef -); - -assert.deepEqual( - valid('(MIT OR LicenseRef-Made-Up)'), - warningAboutLicenseRef -); -``` - -If you can't describe your licensing terms with standardized SPDX identifiers, put the terms in a file in the package and point users there: - -```javascript -assert.deepEqual( - valid('SEE LICENSE IN LICENSE.txt'), - { - validForNewPackages: true, - validForOldPackages: true, - inFile: 'LICENSE.txt' - } -); - -assert.deepEqual( - valid('SEE LICENSE IN license.md'), - { - validForNewPackages: true, - validForOldPackages: true, - inFile: 'license.md' - } -); -``` - -If there aren't any licensing terms, use `UNLICENSED`: - -```javascript -var unlicensed = { - validForNewPackages: true, - validForOldPackages: true, - unlicensed: true -}; -assert.deepEqual(valid('UNLICENSED'), unlicensed); -assert.deepEqual(valid('UNLICENCED'), unlicensed); -``` diff --git a/node_modules/validate-npm-package-license/index.js b/node_modules/validate-npm-package-license/index.js deleted file mode 100644 index 2ad98d9..0000000 --- a/node_modules/validate-npm-package-license/index.js +++ /dev/null @@ -1,84 +0,0 @@ -var parse = require('spdx-expression-parse'); -var correct = require('spdx-correct'); - -var genericWarning = ( - 'license should be ' + - 'a valid SPDX license expression (without "LicenseRef"), ' + - '"UNLICENSED", or ' + - '"SEE LICENSE IN "' -); - -var fileReferenceRE = /^SEE LICEN[CS]E IN (.+)$/; - -function startsWith(prefix, string) { - return string.slice(0, prefix.length) === prefix; -} - -function usesLicenseRef(ast) { - if (ast.hasOwnProperty('license')) { - var license = ast.license; - return ( - startsWith('LicenseRef', license) || - startsWith('DocumentRef', license) - ); - } else { - return ( - usesLicenseRef(ast.left) || - usesLicenseRef(ast.right) - ); - } -} - -module.exports = function(argument) { - var ast; - - try { - ast = parse(argument); - } catch (e) { - var match - if ( - argument === 'UNLICENSED' || - argument === 'UNLICENCED' - ) { - return { - validForOldPackages: true, - validForNewPackages: true, - unlicensed: true - }; - } else if (match = fileReferenceRE.exec(argument)) { - return { - validForOldPackages: true, - validForNewPackages: true, - inFile: match[1] - }; - } else { - var result = { - validForOldPackages: false, - validForNewPackages: false, - warnings: [genericWarning] - }; - var corrected = correct(argument); - if (corrected) { - result.warnings.push( - 'license is similar to the valid expression "' + corrected + '"' - ); - } - return result; - } - } - - if (usesLicenseRef(ast)) { - return { - validForNewPackages: false, - validForOldPackages: false, - spdx: true, - warnings: [genericWarning] - }; - } else { - return { - validForNewPackages: true, - validForOldPackages: true, - spdx: true - }; - } -}; diff --git a/node_modules/validate-npm-package-license/package.json b/node_modules/validate-npm-package-license/package.json deleted file mode 100644 index 006f106..0000000 --- a/node_modules/validate-npm-package-license/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "validate-npm-package-license@^3.0.1", - "/Users/jbaylina/git/MVP/node_modules/normalize-package-data" - ] - ], - "_from": "validate-npm-package-license@>=3.0.1 <4.0.0", - "_id": "validate-npm-package-license@3.0.1", - "_inCache": true, - "_installable": true, - "_location": "/validate-npm-package-license", - "_nodeVersion": "0.12.7", - "_npmUser": { - "email": "kyle@kemitchell.com", - "name": "kemitchell" - }, - "_npmVersion": "2.13.5", - "_phantomChildren": {}, - "_requested": { - "name": "validate-npm-package-license", - "raw": "validate-npm-package-license@^3.0.1", - "rawSpec": "^3.0.1", - "scope": null, - "spec": ">=3.0.1 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/normalize-package-data" - ], - "_resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "_shasum": "2804babe712ad3379459acfbe24746ab2c303fbc", - "_shrinkwrap": null, - "_spec": "validate-npm-package-license@^3.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/normalize-package-data", - "author": { - "email": "kyle@kemitchell.com", - "name": "Kyle E. Mitchell", - "url": "https://kemitchell.com" - }, - "bugs": { - "url": "https://github.com/kemitchell/validate-npm-package-license.js/issues" - }, - "dependencies": { - "spdx-correct": "~1.0.0", - "spdx-expression-parse": "~1.0.0" - }, - "description": "Give me a string and I'll tell you if it's a valid npm package license string", - "devDependencies": { - "defence-cli": "^1.0.1", - "replace-require-self": "^1.0.0" - }, - "directories": {}, - "dist": { - "shasum": "2804babe712ad3379459acfbe24746ab2c303fbc", - "tarball": "http://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" - }, - "gitHead": "00200d28f9960985f221bc1a8a71e4760daf39bf", - "homepage": "https://github.com/kemitchell/validate-npm-package-license.js#readme", - "keywords": [ - "license", - "npm", - "package", - "validation" - ], - "license": "Apache-2.0", - "maintainers": [ - { - "email": "kyle@kemitchell.com", - "name": "kemitchell" - }, - { - "email": "ogd@aoaioxxysz.net", - "name": "othiym23" - } - ], - "name": "validate-npm-package-license", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/kemitchell/validate-npm-package-license.js.git" - }, - "scripts": { - "test": "defence README.md | replace-require-self | node" - }, - "version": "3.0.1" -} diff --git a/node_modules/verror/.gitmodules b/node_modules/verror/.gitmodules deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/verror/.npmignore b/node_modules/verror/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/verror/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/verror/LICENSE b/node_modules/verror/LICENSE deleted file mode 100644 index cbc0bb3..0000000 --- a/node_modules/verror/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE diff --git a/node_modules/verror/Makefile b/node_modules/verror/Makefile deleted file mode 100644 index 00faa97..0000000 --- a/node_modules/verror/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright (c) 2012, Joyent, Inc. All rights reserved. -# -# Makefile: top-level Makefile -# -# This Makefile contains only repo-specific logic and uses included makefiles -# to supply common targets (javascriptlint, jsstyle, restdown, etc.), which are -# used by other repos as well. -# - -# -# Tools -# -NPM = npm - -# -# Files -# -JS_FILES := $(shell find lib examples tests -name '*.js') -JSL_FILES_NODE = $(JS_FILES) -JSSTYLE_FILES = $(JS_FILES) -JSL_CONF_NODE = jsl.node.conf - -.PHONY: all -all: - $(NPM) install - -.PHONY: test -test: - node tests/tst.inherit.js - node tests/tst.verror.js - node tests/tst.werror.js - @echo all tests passed - -include ./Makefile.targ diff --git a/node_modules/verror/Makefile.targ b/node_modules/verror/Makefile.targ deleted file mode 100644 index 2a64fe7..0000000 --- a/node_modules/verror/Makefile.targ +++ /dev/null @@ -1,285 +0,0 @@ -# -*- mode: makefile -*- -# -# Copyright (c) 2012, Joyent, Inc. All rights reserved. -# -# Makefile.targ: common targets. -# -# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped -# into other repos as-is without requiring any modifications. If you find -# yourself changing this file, you should instead update the original copy in -# eng.git and then update your repo to use the new version. -# -# This Makefile defines several useful targets and rules. You can use it by -# including it from a Makefile that specifies some of the variables below. -# -# Targets defined in this Makefile: -# -# check Checks JavaScript files for lint and style -# Checks bash scripts for syntax -# Checks SMF manifests for validity against the SMF DTD -# -# clean Removes built files -# -# docs Builds restdown documentation in docs/ -# -# prepush Depends on "check" and "test" -# -# test Does nothing (you should override this) -# -# xref Generates cscope (source cross-reference index) -# -# For details on what these targets are supposed to do, see the Joyent -# Engineering Guide. -# -# To make use of these targets, you'll need to set some of these variables. Any -# variables left unset will simply not be used. -# -# BASH_FILES Bash scripts to check for syntax -# (paths relative to top-level Makefile) -# -# CLEAN_FILES Files to remove as part of the "clean" target. Note -# that files generated by targets in this Makefile are -# automatically included in CLEAN_FILES. These include -# restdown-generated HTML and JSON files. -# -# DOC_FILES Restdown (documentation source) files. These are -# assumed to be contained in "docs/", and must NOT -# contain the "docs/" prefix. -# -# JSL_CONF_NODE Specify JavaScriptLint configuration files -# JSL_CONF_WEB (paths relative to top-level Makefile) -# -# Node.js and Web configuration files are separate -# because you'll usually want different global variable -# configurations. If no file is specified, none is given -# to jsl, which causes it to use a default configuration, -# which probably isn't what you want. -# -# JSL_FILES_NODE JavaScript files to check with Node config file. -# JSL_FILES_WEB JavaScript files to check with Web config file. -# -# You can also override these variables: -# -# BASH Path to bash (default: bash) -# -# CSCOPE_DIRS Directories to search for source files for the cscope -# index. (default: ".") -# -# JSL Path to JavaScriptLint (default: "jsl") -# -# JSL_FLAGS_NODE Additional flags to pass through to JSL -# JSL_FLAGS_WEB -# JSL_FLAGS -# -# JSSTYLE Path to jsstyle (default: jsstyle) -# -# JSSTYLE_FLAGS Additional flags to pass through to jsstyle -# - -# -# Defaults for the various tools we use. -# -BASH ?= bash -BASHSTYLE ?= tools/bashstyle -CP ?= cp -CSCOPE ?= cscope -CSCOPE_DIRS ?= . -JSL ?= jsl -JSSTYLE ?= jsstyle -MKDIR ?= mkdir -p -MV ?= mv -RESTDOWN_FLAGS ?= -RMTREE ?= rm -rf -JSL_FLAGS ?= --nologo --nosummary - -ifeq ($(shell uname -s),SunOS) - TAR ?= gtar -else - TAR ?= tar -endif - - -# -# Defaults for other fixed values. -# -BUILD = build -DISTCLEAN_FILES += $(BUILD) -DOC_BUILD = $(BUILD)/docs/public - -# -# Configure JSL_FLAGS_{NODE,WEB} based on JSL_CONF_{NODE,WEB}. -# -ifneq ($(origin JSL_CONF_NODE), undefined) - JSL_FLAGS_NODE += --conf=$(JSL_CONF_NODE) -endif - -ifneq ($(origin JSL_CONF_WEB), undefined) - JSL_FLAGS_WEB += --conf=$(JSL_CONF_WEB) -endif - -# -# Targets. For descriptions on what these are supposed to do, see the -# Joyent Engineering Guide. -# - -# -# Instruct make to keep around temporary files. We have rules below that -# automatically update git submodules as needed, but they employ a deps/*/.git -# temporary file. Without this directive, make tries to remove these .git -# directories after the build has completed. -# -.SECONDARY: $($(wildcard deps/*):%=%/.git) - -# -# This rule enables other rules that use files from a git submodule to have -# those files depend on deps/module/.git and have "make" automatically check -# out the submodule as needed. -# -deps/%/.git: - git submodule update --init deps/$* - -# -# These recipes make heavy use of dynamically-created phony targets. The parent -# Makefile defines a list of input files like BASH_FILES. We then say that each -# of these files depends on a fake target called filename.bashchk, and then we -# define a pattern rule for those targets that runs bash in check-syntax-only -# mode. This mechanism has the nice properties that if you specify zero files, -# the rule becomes a noop (unlike a single rule to check all bash files, which -# would invoke bash with zero files), and you can check individual files from -# the command line with "make filename.bashchk". -# -.PHONY: check-bash -check-bash: $(BASH_FILES:%=%.bashchk) $(BASH_FILES:%=%.bashstyle) - -%.bashchk: % - $(BASH) -n $^ - -%.bashstyle: % - $(BASHSTYLE) $^ - -.PHONY: check-jsl check-jsl-node check-jsl-web -check-jsl: check-jsl-node check-jsl-web - -check-jsl-node: $(JSL_FILES_NODE:%=%.jslnodechk) - -check-jsl-web: $(JSL_FILES_WEB:%=%.jslwebchk) - -%.jslnodechk: % $(JSL_EXEC) - $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_NODE) $< - -%.jslwebchk: % $(JSL_EXEC) - $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_WEB) $< - -.PHONY: check-jsstyle -check-jsstyle: $(JSSTYLE_FILES:%=%.jsstylechk) - -%.jsstylechk: % $(JSSTYLE_EXEC) - $(JSSTYLE) $(JSSTYLE_FLAGS) $< - -.PHONY: check -check: check-jsl check-jsstyle check-bash - @echo check ok - -.PHONY: clean -clean:: - -$(RMTREE) $(CLEAN_FILES) - -.PHONY: distclean -distclean:: clean - -$(RMTREE) $(DISTCLEAN_FILES) - -CSCOPE_FILES = cscope.in.out cscope.out cscope.po.out -CLEAN_FILES += $(CSCOPE_FILES) - -.PHONY: xref -xref: cscope.files - $(CSCOPE) -bqR - -.PHONY: cscope.files -cscope.files: - find $(CSCOPE_DIRS) -name '*.c' -o -name '*.h' -o -name '*.cc' \ - -o -name '*.js' -o -name '*.s' -o -name '*.cpp' > $@ - -# -# The "docs" target is complicated because we do several things here: -# -# (1) Use restdown to build HTML and JSON files from each of DOC_FILES. -# -# (2) Copy these files into $(DOC_BUILD) (build/docs/public), which -# functions as a complete copy of the documentation that could be -# mirrored or served over HTTP. -# -# (3) Then copy any directories and media from docs/media into -# $(DOC_BUILD)/media. This allows projects to include their own media, -# including files that will override same-named files provided by -# restdown. -# -# Step (3) is the surprisingly complex part: in order to do this, we need to -# identify the subdirectories in docs/media, recreate them in -# $(DOC_BUILD)/media, then do the same with the files. -# -DOC_MEDIA_DIRS := $(shell find docs/media -type d 2>/dev/null | grep -v "^docs/media$$") -DOC_MEDIA_DIRS := $(DOC_MEDIA_DIRS:docs/media/%=%) -DOC_MEDIA_DIRS_BUILD := $(DOC_MEDIA_DIRS:%=$(DOC_BUILD)/media/%) - -DOC_MEDIA_FILES := $(shell find docs/media -type f 2>/dev/null) -DOC_MEDIA_FILES := $(DOC_MEDIA_FILES:docs/media/%=%) -DOC_MEDIA_FILES_BUILD := $(DOC_MEDIA_FILES:%=$(DOC_BUILD)/media/%) - -# -# Like the other targets, "docs" just depends on the final files we want to -# create in $(DOC_BUILD), leveraging other targets and recipes to define how -# to get there. -# -.PHONY: docs -docs: \ - $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.html) \ - $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.json) \ - $(DOC_MEDIA_FILES_BUILD) - -# -# We keep the intermediate files so that the next build can see whether the -# files in DOC_BUILD are up to date. -# -.PRECIOUS: \ - $(DOC_FILES:%.restdown=docs/%.html) \ - $(DOC_FILES:%.restdown=docs/%json) - -# -# We do clean those intermediate files, as well as all of DOC_BUILD. -# -CLEAN_FILES += \ - $(DOC_BUILD) \ - $(DOC_FILES:%.restdown=docs/%.html) \ - $(DOC_FILES:%.restdown=docs/%.json) - -# -# Before installing the files, we must make sure the directories exist. The | -# syntax tells make that the dependency need only exist, not be up to date. -# Otherwise, it might try to rebuild spuriously because the directory itself -# appears out of date. -# -$(DOC_MEDIA_FILES_BUILD): | $(DOC_MEDIA_DIRS_BUILD) - -$(DOC_BUILD)/%: docs/% | $(DOC_BUILD) - $(CP) $< $@ - -docs/%.json docs/%.html: docs/%.restdown | $(DOC_BUILD) $(RESTDOWN_EXEC) - $(RESTDOWN) $(RESTDOWN_FLAGS) -m $(DOC_BUILD) $< - -$(DOC_BUILD): - $(MKDIR) $@ - -$(DOC_MEDIA_DIRS_BUILD): - $(MKDIR) $@ - -# -# The default "test" target does nothing. This should usually be overridden by -# the parent Makefile. It's included here so we can define "prepush" without -# requiring the repo to define "test". -# -.PHONY: test -test: - -.PHONY: prepush -prepush: check test diff --git a/node_modules/verror/README.md b/node_modules/verror/README.md deleted file mode 100644 index e9b5497..0000000 --- a/node_modules/verror/README.md +++ /dev/null @@ -1,120 +0,0 @@ -# verror: richer JavaScript errors - -This module provides two classes: VError, for accretive errors, and WError, for -wrapping errors. Both support printf-style error messages using extsprintf. - -## Printf-style errors - -At the most basic level, VError is just like JavaScript's Error class, but with -printf-style arguments: - - var verror = require('verror'); - - var opname = 'read'; - var err = new verror.VError('"%s" operation failed', opname); - console.log(err.message); - console.log(err.stack); - -This prints: - - "read" operation failed - "read" operation failed - at Object. (/Users/dap/node-verror/examples/varargs.js:4:11) - at Module._compile (module.js:449:26) - at Object.Module._extensions..js (module.js:467:10) - at Module.load (module.js:356:32) - at Function.Module._load (module.js:312:12) - at Module.runMain (module.js:492:10) - at process.startup.processNextTick.process._tickCallback (node.js:244:9) - - -## VError for accretive error messages - -More interestingly, you can use VError to build up an error describing what -happened at various levels in the stack. For example, suppose you have a -request handler that stats a file and fails if it doesn't exist: - - var fs = require('fs'); - var verror = require('verror'); - - function checkFile(filename, callback) { - fs.stat(filename, function (err) { - if (err) - /* Annotate the "stat" error with what we were doing. */ - return (callback(new verror.VError(err, - 'failed to check "%s"', filename))); - - /* ... */ - }); - } - - function handleRequest(filename, callback) { - checkFile('/nonexistent', function (err) { - if (err) { - /* Annotate the "checkFile" error with what we were doing. */ - return (callback(new verror.VError(err, 'request failed'))); - } - - /* ... */ - }); - } - - handleRequest('/nonexistent', function (err) { - if (err) - console.log(err.message); - /* ... */ - }); - -Since the file "/nonexistent" doesn't exist, this prints out: - - request failed: failed to check "/nonexistent": ENOENT, stat '/nonexistent' - -The idea here is that the lowest level (Node's "fs.stat" function) generates an -arbitrary error, and each higher level (request handler and stat callback) -creates a new VError that annotates the previous error with what it was doing, -so that the result is a clear message explaining what failed at each level. - -This plays nicely with extsprintf's "%r" specifier, which prints out a -Java-style stacktrace with the whole chain of exceptions: - - EXCEPTION: VError: request failed: failed to check "/nonexistent": ENOENT, stat '/nonexistent' - at /Users/dap/work/node-verror/examples/levels.js:21:21 - at /Users/dap/work/node-verror/examples/levels.js:9:12 - at Object.oncomplete (fs.js:297:15) - Caused by: EXCEPTION: VError: failed to check "/nonexistent": ENOENT, stat '/nonexistent' - at /Users/dap/work/node-verror/examples/levels.js:9:21 - at Object.oncomplete (fs.js:297:15) - Caused by: EXCEPTION: Error: Error: ENOENT, stat '/nonexistent' - - -## WError for wrapped errors - -Sometimes you don't want an Error's "message" field to include the details of -all of the low-level errors, but you still want to be able to get at them -programmatically. For example, in an HTTP server, you probably don't want to -spew all of the low-level errors back to the client, but you do want to include -them in the audit log entry for the request. In that case, you can use a -WError, which is created exactly like VError (and also supports both -printf-style arguments and an optional cause), but the resulting "message" only -contains the top-level error. It's also more verbose, including the class -associated with each error in the cause chain. Using the same example above, -but replacing the VError in handleRequest with WError, we get this output: - - request failed - -That's what we wanted -- just a high-level summary for the client. But we can -get the object's toString() for the full details: - - WError: request failed; caused by WError: failed to check "/nonexistent"; - caused by Error: ENOENT, stat '/nonexistent' - -# Contributing - -Contributions welcome. Code should be "make check" clean. To run "make check", -you'll need these tools: - -* https://github.com/davepacheco/jsstyle -* https://github.com/davepacheco/javascriptlint - -If you're changing something non-trivial or user-facing, you may want to submit -an issue first. diff --git a/node_modules/verror/examples/levels-verror.js b/node_modules/verror/examples/levels-verror.js deleted file mode 100644 index 53a7022..0000000 --- a/node_modules/verror/examples/levels-verror.js +++ /dev/null @@ -1,36 +0,0 @@ -var extsprintf = require('extsprintf'); -var fs = require('fs'); -var verror = require('../lib/verror'); - -function checkFile(filename, callback) { - fs.stat(filename, function (err) { - if (err) - /* Annotate the "stat" error with what we were doing. */ - return (callback(new verror.VError(err, - 'failed to check "%s"', filename))); - - /* ... */ - return (callback()); - }); -} - -function handleRequest(filename, callback) { - checkFile('/nonexistent', function (err) { - if (err) - /* Annotate the "checkFile" error. */ - return (callback(new verror.VError( - err, 'request failed'))); - - /* ... */ - return (callback()); - }); -} - -handleRequest('/nonexistent', function (err) { - if (err) { - console.log(err.message); - console.log(extsprintf.sprintf('%r', err)); - } - - /* ... */ -}); diff --git a/node_modules/verror/examples/levels-werror.js b/node_modules/verror/examples/levels-werror.js deleted file mode 100644 index 7e57075..0000000 --- a/node_modules/verror/examples/levels-werror.js +++ /dev/null @@ -1,34 +0,0 @@ -var extsprintf = require('extsprintf'); -var fs = require('fs'); -var verror = require('../lib/verror'); - -function checkFile(filename, callback) { - fs.stat(filename, function (err) { - if (err) - /* Annotate the "stat" error with what we were doing. */ - return (callback(new verror.VError(err, - 'failed to check "%s"', filename))); - - /* ... */ - return (callback()); - }); -} - -function handleRequest(filename, callback) { - checkFile('/nonexistent', function (err) { - if (err) - /* Wrap the "checkFile" error. */ - return (callback(new verror.WError( - err, 'request failed'))); - - /* ... */ - return (callback()); - }); -} - -handleRequest('/nonexistent', function (err) { - if (err) { - console.log(err.message); - console.log(err.toString()); - } -}); diff --git a/node_modules/verror/examples/varargs.js b/node_modules/verror/examples/varargs.js deleted file mode 100644 index 2e14ee4..0000000 --- a/node_modules/verror/examples/varargs.js +++ /dev/null @@ -1,6 +0,0 @@ -var verror = require('../lib/verror'); - -var opname = 'read'; -var err = new verror.VError('"%s" operation failed', opname); -console.log(err.message); -console.log(err.stack); diff --git a/node_modules/verror/examples/verror.js b/node_modules/verror/examples/verror.js deleted file mode 100644 index 887b181..0000000 --- a/node_modules/verror/examples/verror.js +++ /dev/null @@ -1,13 +0,0 @@ -var mod_fs = require('fs'); -var mod_verror = require('../lib/verror'); - -var filename = '/nonexistent'; - -mod_fs.stat(filename, function (err1) { - var err2 = new mod_verror.VError(err1, 'failed to stat "%s"', filename); - - /* The following would normally be higher up the stack. */ - var err3 = new mod_verror.VError(err2, 'failed to handle request'); - console.log(err3.message); - console.log(err3.stack); -}); diff --git a/node_modules/verror/examples/werror.js b/node_modules/verror/examples/werror.js deleted file mode 100644 index f55e532..0000000 --- a/node_modules/verror/examples/werror.js +++ /dev/null @@ -1,14 +0,0 @@ -var mod_fs = require('fs'); -var mod_verror = require('../lib/verror'); - -var filename = '/nonexistent'; - -mod_fs.stat(filename, function (err1) { - var err2 = new mod_verror.WError(err1, 'failed to stat "%s"', filename); - - /* The following would normally be higher up the stack. */ - var err3 = new mod_verror.WError(err2, 'failed to handle request'); - console.log(err3.message); - console.log(err3.toString()); - console.log(err3.stack); -}); diff --git a/node_modules/verror/jsl.node.conf b/node_modules/verror/jsl.node.conf deleted file mode 100644 index bd724a2..0000000 --- a/node_modules/verror/jsl.node.conf +++ /dev/null @@ -1,139 +0,0 @@ -# -# Configuration File for JavaScript Lint -# -# This configuration file can be used to lint a collection of scripts, or to enable -# or disable warnings for scripts that are linted via the command line. -# - -### Warnings -# Enable or disable warnings based on requirements. -# Use "+WarningName" to display or "-WarningName" to suppress. -# -+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent -+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity -+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement -+anon_no_return_value # anonymous function does not always return value -+assign_to_function_call # assignment to a function call --block_without_braces # block statement without curly braces -+comma_separated_stmts # multiple statements separated by commas (use semicolons?) -+comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) -+default_not_at_end # the default case is not at the end of the switch statement -+dup_option_explicit # duplicate "option explicit" control comment -+duplicate_case_in_switch # duplicate case in switch statement -+duplicate_formal # duplicate formal argument {name} -+empty_statement # empty statement or extra semicolon -+identifier_hides_another # identifer {name} hides an identifier in a parent scope --inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement -+incorrect_version # Expected /*jsl:content-type*/ control comment. The script was parsed with the wrong version. -+invalid_fallthru # unexpected "fallthru" control comment -+invalid_pass # unexpected "pass" control comment -+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax -+leading_decimal_point # leading decimal point may indicate a number or an object member -+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax -+meaningless_block # meaningless block; curly braces have no impact -+mismatch_ctrl_comments # mismatched control comment; "ignore" and "end" control comments must have a one-to-one correspondence -+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma -+missing_break # missing break statement -+missing_break_for_last_case # missing break statement for last case in switch -+missing_default_case # missing default case in switch statement -+missing_option_explicit # the "option explicit" control comment is missing -+missing_semicolon # missing semicolon -+missing_semicolon_for_lambda # missing semicolon for lambda assignment -+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs -+nested_comment # nested comment -+no_return_value # function {name} does not always return a value -+octal_number # leading zeros make an octal number -+parseint_missing_radix # parseInt missing radix parameter -+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag -+redeclared_var # redeclaration of {name} -+trailing_comma_in_array # extra comma is not recommended in array initializers -+trailing_decimal_point # trailing decimal point may indicate a number or an object member -+undeclared_identifier # undeclared identifier: {name} -+unreachable_code # unreachable code --unreferenced_argument # argument declared but never referenced: {name} --unreferenced_function # function is declared but never referenced: {name} -+unreferenced_variable # variable is declared but never referenced: {name} -+unsupported_version # JavaScript {version} is not supported -+use_of_label # use of label -+useless_assign # useless assignment -+useless_comparison # useless comparison; comparing identical expressions --useless_quotes # the quotation marks are unnecessary -+useless_void # use of the void type may be unnecessary (void is always undefined) -+var_hides_arg # variable {name} hides argument -+want_assign_or_call # expected an assignment or function call -+with_statement # with statement hides undeclared variables; use temporary variable instead - - -### Output format -# Customize the format of the error message. -# __FILE__ indicates current file path -# __FILENAME__ indicates current file name -# __LINE__ indicates current line -# __COL__ indicates current column -# __ERROR__ indicates error message (__ERROR_PREFIX__: __ERROR_MSG__) -# __ERROR_NAME__ indicates error name (used in configuration file) -# __ERROR_PREFIX__ indicates error prefix -# __ERROR_MSG__ indicates error message -# -# For machine-friendly output, the output format can be prefixed with -# "encode:". If specified, all items will be encoded with C-slashes. -# -# Visual Studio syntax (default): -+output-format __FILE__(__LINE__): __ERROR__ -# Alternative syntax: -#+output-format __FILE__:__LINE__: __ERROR__ - - -### Context -# Show the in-line position of the error. -# Use "+context" to display or "-context" to suppress. -# -+context - - -### Control Comments -# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for -# the /*@keyword@*/ control comments and JScript conditional comments. (The latter is -# enabled in JScript with @cc_on@). The /*jsl:keyword*/ syntax is preferred for this reason, -# although legacy control comments are enabled by default for backward compatibility. -# --legacy_control_comments - - -### Defining identifiers -# By default, "option explicit" is enabled on a per-file basis. -# To enable this for all files, use "+always_use_option_explicit" --always_use_option_explicit - -# Define certain identifiers of which the lint is not aware. -# (Use this in conjunction with the "undeclared identifier" warning.) -# -# Common uses for webpages might be: -+define __dirname -+define clearInterval -+define clearTimeout -+define console -+define exports -+define global -+define process -+define require -+define setInterval -+define setTimeout -+define Buffer -+define JSON -+define Math -+define __dirname -+define __filename - -### JavaScript Version -# To change the default JavaScript version: -#+default-type text/javascript;version=1.5 -#+default-type text/javascript;e4x=1 - -### Files -# Specify which files to lint -# Use "+recurse" to enable recursion (disabled by default). -# To add a set of files, use "+process FileName", "+process Folder\Path\*.js", -# or "+process Folder\Path\*.htm". -# - diff --git a/node_modules/verror/lib/verror.js b/node_modules/verror/lib/verror.js deleted file mode 100644 index 9ca087b..0000000 --- a/node_modules/verror/lib/verror.js +++ /dev/null @@ -1,157 +0,0 @@ -/* - * verror.js: richer JavaScript errors - */ - -var mod_assert = require('assert'); -var mod_util = require('util'); - -var mod_extsprintf = require('extsprintf'); - -/* - * Public interface - */ -exports.VError = VError; -exports.WError = WError; -exports.MultiError = MultiError; - -/* - * Like JavaScript's built-in Error class, but supports a "cause" argument and a - * printf-style message. The cause argument can be null. - */ -function VError(options) -{ - var args, causedBy, ctor, tailmsg; - - if (options instanceof Error || typeof (options) === 'object') { - args = Array.prototype.slice.call(arguments, 1); - } else { - args = Array.prototype.slice.call(arguments, 0); - options = undefined; - } - - tailmsg = args.length > 0 ? - mod_extsprintf.sprintf.apply(null, args) : ''; - this.jse_shortmsg = tailmsg; - this.jse_summary = tailmsg; - - if (options) { - causedBy = options.cause; - - if (!causedBy || !(options.cause instanceof Error)) - causedBy = options; - - if (causedBy && (causedBy instanceof Error)) { - this.jse_cause = causedBy; - this.jse_summary += ': ' + causedBy.message; - } - } - - this.message = this.jse_summary; - Error.call(this, this.jse_summary); - - if (Error.captureStackTrace) { - ctor = options ? options.constructorOpt : undefined; - ctor = ctor || arguments.callee; - Error.captureStackTrace(this, ctor); - } -} - -mod_util.inherits(VError, Error); -VError.prototype.name = 'VError'; - -VError.prototype.toString = function ve_toString() -{ - var str = (this.hasOwnProperty('name') && this.name || - this.constructor.name || this.constructor.prototype.name); - if (this.message) - str += ': ' + this.message; - - return (str); -}; - -VError.prototype.cause = function ve_cause() -{ - return (this.jse_cause); -}; - - -/* - * Represents a collection of errors for the purpose of consumers that generally - * only deal with one error. Callers can extract the individual errors - * contained in this object, but may also just treat it as a normal single - * error, in which case a summary message will be printed. - */ -function MultiError(errors) -{ - mod_assert.ok(errors.length > 0); - this.ase_errors = errors; - - VError.call(this, errors[0], 'first of %d error%s', - errors.length, errors.length == 1 ? '' : 's'); -} - -mod_util.inherits(MultiError, VError); - - - -/* - * Like JavaScript's built-in Error class, but supports a "cause" argument which - * is wrapped, not "folded in" as with VError. Accepts a printf-style message. - * The cause argument can be null. - */ -function WError(options) -{ - Error.call(this); - - var args, cause, ctor; - if (typeof (options) === 'object') { - args = Array.prototype.slice.call(arguments, 1); - } else { - args = Array.prototype.slice.call(arguments, 0); - options = undefined; - } - - if (args.length > 0) { - this.message = mod_extsprintf.sprintf.apply(null, args); - } else { - this.message = ''; - } - - if (options) { - if (options instanceof Error) { - cause = options; - } else { - cause = options.cause; - ctor = options.constructorOpt; - } - } - - Error.captureStackTrace(this, ctor || this.constructor); - if (cause) - this.cause(cause); - -} - -mod_util.inherits(WError, Error); -WError.prototype.name = 'WError'; - - -WError.prototype.toString = function we_toString() -{ - var str = (this.hasOwnProperty('name') && this.name || - this.constructor.name || this.constructor.prototype.name); - if (this.message) - str += ': ' + this.message; - if (this.we_cause && this.we_cause.message) - str += '; caused by ' + this.we_cause.toString(); - - return (str); -}; - -WError.prototype.cause = function we_cause(c) -{ - if (c instanceof Error) - this.we_cause = c; - - return (this.we_cause); -}; diff --git a/node_modules/verror/package.json b/node_modules/verror/package.json deleted file mode 100644 index 92b55b7..0000000 --- a/node_modules/verror/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_args": [ - [ - "verror@1.3.6", - "/Users/jbaylina/git/MVP/node_modules/jsprim" - ] - ], - "_from": "verror@1.3.6", - "_id": "verror@1.3.6", - "_inCache": true, - "_installable": true, - "_location": "/verror", - "_npmUser": { - "email": "dap@cs.brown.edu", - "name": "dap" - }, - "_npmVersion": "1.1.65", - "_phantomChildren": {}, - "_requested": { - "name": "verror", - "raw": "verror@1.3.6", - "rawSpec": "1.3.6", - "scope": null, - "spec": "1.3.6", - "type": "version" - }, - "_requiredBy": [ - "/jsprim" - ], - "_resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "_shasum": "cff5df12946d297d2baaefaa2689e25be01c005c", - "_shrinkwrap": null, - "_spec": "verror@1.3.6", - "_where": "/Users/jbaylina/git/MVP/node_modules/jsprim", - "bugs": { - "url": "https://github.com/davepacheco/node-verror/issues" - }, - "dependencies": { - "extsprintf": "1.0.2" - }, - "description": "richer JavaScript errors", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "cff5df12946d297d2baaefaa2689e25be01c005c", - "tarball": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz" - }, - "engines": [ - "node >=0.6.0" - ], - "homepage": "https://github.com/davepacheco/node-verror#readme", - "main": "./lib/verror.js", - "maintainers": [ - { - "email": "dap@cs.brown.edu", - "name": "dap" - } - ], - "name": "verror", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/davepacheco/node-verror.git" - }, - "scripts": { - "test": "make test" - }, - "version": "1.3.6" -} diff --git a/node_modules/verror/tests/tst.inherit.js b/node_modules/verror/tests/tst.inherit.js deleted file mode 100644 index 0f0d70b..0000000 --- a/node_modules/verror/tests/tst.inherit.js +++ /dev/null @@ -1,100 +0,0 @@ -/* - * tst.inherit.js: test that inheriting from VError and WError work as expected. - */ - -var mod_assert = require('assert'); -var mod_util = require('util'); - -var mod_verror = require('../lib/verror'); - -var VError = mod_verror.VError; -var WError = mod_verror.WError; -var err, suberr; - -function VErrorChild() -{ - VError.apply(this, Array.prototype.slice.call(arguments)); -} - -mod_util.inherits(VErrorChild, VError); -VErrorChild.prototype.name = 'VErrorChild'; - - -function WErrorChild() -{ - WError.apply(this, Array.prototype.slice.call(arguments)); -} - -mod_util.inherits(WErrorChild, WError); -WErrorChild.prototype.name = 'WErrorChild'; - - -suberr = new Error('root cause'); -err = new VErrorChild(suberr, 'top'); -mod_assert.ok(err instanceof Error); -mod_assert.ok(err instanceof VError); -mod_assert.ok(err instanceof VErrorChild); -mod_assert.equal(err.cause(), suberr); -mod_assert.equal(err.message, 'top: root cause'); -mod_assert.equal(err.toString(), 'VErrorChild: top: root cause'); -mod_assert.equal(err.stack.split('\n')[0], 'VErrorChild: top: root cause'); - -suberr = new Error('root cause'); -err = new WErrorChild(suberr, 'top'); -mod_assert.ok(err instanceof Error); -mod_assert.ok(err instanceof WError); -mod_assert.ok(err instanceof WErrorChild); -mod_assert.equal(err.cause(), suberr); -mod_assert.equal(err.message, 'top'); -mod_assert.equal(err.toString(), - 'WErrorChild: top; caused by Error: root cause'); -mod_assert.equal(err.stack.split('\n')[0], - 'WErrorChild: top; caused by Error: root cause'); - - -// Test that `.toString()` uses the ctor name. I.e. setting -// `.prototype.name` isn't necessary. -function VErrorChildNoName() { - VError.apply(this, Array.prototype.slice.call(arguments)); -} -mod_util.inherits(VErrorChildNoName, VError); -err = new VErrorChildNoName('top'); -mod_assert.equal(err.toString(), 'VErrorChildNoName: top'); - -function WErrorChildNoName() { - WError.apply(this, Array.prototype.slice.call(arguments)); -} -mod_util.inherits(WErrorChildNoName, WError); -err = new WErrorChildNoName('top'); -mod_assert.equal(err.toString(), 'WErrorChildNoName: top'); - - -// Test that `.prototype.name` can be used for the `.toString()` -// when the ctor is anonymous. -var VErrorChildAnon = function () { - VError.apply(this, Array.prototype.slice.call(arguments)); -}; -mod_util.inherits(VErrorChildAnon, VError); -VErrorChildAnon.prototype.name = 'VErrorChildAnon'; -err = new VErrorChildAnon('top'); -mod_assert.equal(err.toString(), 'VErrorChildAnon: top'); - -var WErrorChildAnon = function () { - WError.apply(this, Array.prototype.slice.call(arguments)); -}; -mod_util.inherits(WErrorChildAnon, WError); -WErrorChildAnon.prototype.name = 'WErrorChildAnon'; -err = new WErrorChildAnon('top'); -mod_assert.equal(err.toString(), 'WErrorChildAnon: top'); - - -// Test get appropriate exception name in `.toString()` when reconstituting -// an error instance a la: -// https://github.com/mcavage/node-fast/blob/master/lib/client.js#L215 -err = new VError('top'); -err.name = 'CustomNameError'; -mod_assert.equal(err.toString(), 'CustomNameError: top'); - -err = new WError('top'); -err.name = 'CustomNameError'; -mod_assert.equal(err.toString(), 'CustomNameError: top'); diff --git a/node_modules/verror/tests/tst.verror.js b/node_modules/verror/tests/tst.verror.js deleted file mode 100644 index ee937cd..0000000 --- a/node_modules/verror/tests/tst.verror.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * tst.verror.js: tests basic functionality of the VError class. - */ - -var mod_assert = require('assert'); -var mod_verror = require('../lib/verror'); - -var VError = mod_verror.VError; -var WError = mod_verror.WError; - -var err, suberr, stack, substack; - -/* - * Remove full paths and relative line numbers from stack traces so that we can - * compare against "known-good" output. - */ -function cleanStack(stacktxt) -{ - var re = new RegExp(__filename + ':\\d+:\\d+', 'gm'); - stacktxt = stacktxt.replace(re, 'tst.verror.js'); - return (stacktxt); -} - -/* - * Save the generic parts of all stack traces so we can avoid hardcoding - * Node-specific implementation details in our testing of stack traces. - */ -var nodestack = new Error().stack.split('\n').slice(2).join('\n'); - -/* no arguments */ -err = new VError(); -mod_assert.equal(err.name, 'VError'); -mod_assert.ok(err instanceof Error); -mod_assert.ok(err instanceof VError); -mod_assert.equal(err.message, ''); -mod_assert.ok(err.cause() === undefined); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'VError', - ' at Object. (tst.verror.js)' -].join('\n') + '\n' + nodestack); - -/* options-argument form */ -err = new VError({}); -mod_assert.equal(err.message, ''); -mod_assert.ok(err.cause() === undefined); - -/* simple message */ -err = new VError('my error'); -mod_assert.equal(err.message, 'my error'); -mod_assert.ok(err.cause() === undefined); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'VError: my error', - ' at Object. (tst.verror.js)' -].join('\n') + '\n' + nodestack); - -err = new VError({}, 'my error'); -mod_assert.equal(err.message, 'my error'); -mod_assert.ok(err.cause() === undefined); - -/* printf-style message */ -err = new VError('%s error: %3d problems', 'very bad', 15); -mod_assert.equal(err.message, 'very bad error: 15 problems'); -mod_assert.ok(err.cause() === undefined); - -err = new VError({}, '%s error: %3d problems', 'very bad', 15); -mod_assert.equal(err.message, 'very bad error: 15 problems'); -mod_assert.ok(err.cause() === undefined); - -/* caused by another error, with no additional message */ -suberr = new Error('root cause'); -err = new VError(suberr); -mod_assert.equal(err.message, ': root cause'); -mod_assert.ok(err.cause() === suberr); - -err = new VError({ 'cause': suberr }); -mod_assert.equal(err.message, ': root cause'); -mod_assert.ok(err.cause() === suberr); - -/* caused by another error, with annotation */ -err = new VError(suberr, 'proximate cause: %d issues', 3); -mod_assert.equal(err.message, 'proximate cause: 3 issues: root cause'); -mod_assert.ok(err.cause() === suberr); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'VError: proximate cause: 3 issues: root cause', - ' at Object. (tst.verror.js)' -].join('\n') + '\n' + nodestack); - -err = new VError({ 'cause': suberr }, 'proximate cause: %d issues', 3); -mod_assert.equal(err.message, 'proximate cause: 3 issues: root cause'); -mod_assert.ok(err.cause() === suberr); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'VError: proximate cause: 3 issues: root cause', - ' at Object. (tst.verror.js)' -].join('\n') + '\n' + nodestack); - -/* caused by another VError, with annotation. */ -suberr = err; -err = new VError(suberr, 'top'); -mod_assert.equal(err.message, 'top: proximate cause: 3 issues: root cause'); -mod_assert.ok(err.cause() === suberr); - -err = new VError({ 'cause': suberr }, 'top'); -mod_assert.equal(err.message, 'top: proximate cause: 3 issues: root cause'); -mod_assert.ok(err.cause() === suberr); - -/* caused by a WError */ -suberr = new WError(new Error('root cause'), 'mid'); -err = new VError(suberr, 'top'); -mod_assert.equal(err.message, 'top: mid'); -mod_assert.ok(err.cause() === suberr); - -/* null cause (for backwards compatibility with older versions) */ -err = new VError(null, 'my error'); -mod_assert.equal(err.message, 'my error'); -mod_assert.ok(err.cause() === undefined); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'VError: my error', - ' at Object. (tst.verror.js)' -].join('\n') + '\n' + nodestack); - -err = new VError({ 'cause': null }, 'my error'); -mod_assert.equal(err.message, 'my error'); -mod_assert.ok(err.cause() === undefined); - -err = new VError(null); -mod_assert.equal(err.message, ''); -mod_assert.ok(err.cause() === undefined); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'VError', - ' at Object. (tst.verror.js)' -].join('\n') + '\n' + nodestack); - -/* constructorOpt */ -function makeErr(options) { - return (new VError(options, 'test error')); -} -err = makeErr({}); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'VError: test error', - ' at makeErr (tst.verror.js)', - ' at Object. (tst.verror.js)' -].join('\n') + '\n' + nodestack); - -err = makeErr({ 'constructorOpt': makeErr }); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'VError: test error', - ' at Object. (tst.verror.js)' -].join('\n') + '\n' + nodestack); diff --git a/node_modules/verror/tests/tst.werror.js b/node_modules/verror/tests/tst.werror.js deleted file mode 100644 index c8cdc61..0000000 --- a/node_modules/verror/tests/tst.werror.js +++ /dev/null @@ -1,179 +0,0 @@ -/* - * tst.werror.js: tests basic functionality of the WError class. - */ - -var mod_assert = require('assert'); -var mod_verror = require('../lib/verror'); - -var VError = mod_verror.VError; -var WError = mod_verror.WError; - -var err, suberr, stack, substack; - -/* - * Remove full paths and relative line numbers from stack traces so that we can - * compare against "known-good" output. - */ -function cleanStack(stacktxt) -{ - var re = new RegExp(__filename + ':\\d+:\\d+', 'gm'); - stacktxt = stacktxt.replace(re, 'tst.werror.js'); - return (stacktxt); -} - -/* - * Save the generic parts of all stack traces so we can avoid hardcoding - * Node-specific implementation details in our testing of stack traces. - */ -var nodestack = new Error().stack.split('\n').slice(2).join('\n'); - -/* no arguments */ -err = new WError(); -mod_assert.equal(err.name, 'WError'); -mod_assert.ok(err instanceof Error); -mod_assert.ok(err instanceof WError); -mod_assert.equal(err.message, ''); -mod_assert.equal(err.toString(), 'WError'); -mod_assert.ok(err.cause() === undefined); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'WError', - ' at Object. (tst.werror.js)' -].join('\n') + '\n' + nodestack); - -/* options-argument form */ -err = new WError({}); -mod_assert.equal(err.message, ''); -mod_assert.equal(err.toString(), 'WError'); -mod_assert.ok(err.cause() === undefined); - -/* simple message */ -err = new WError('my error'); -mod_assert.equal(err.message, 'my error'); -mod_assert.equal(err.toString(), 'WError: my error'); -mod_assert.ok(err.cause() === undefined); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'WError: my error', - ' at Object. (tst.werror.js)' -].join('\n') + '\n' + nodestack); - -err = new WError({}, 'my error'); -mod_assert.equal(err.message, 'my error'); -mod_assert.equal(err.toString(), 'WError: my error'); -mod_assert.ok(err.cause() === undefined); - -/* printf-style message */ -err = new WError('%s error: %3d problems', 'very bad', 15); -mod_assert.equal(err.message, 'very bad error: 15 problems'); -mod_assert.equal(err.toString(), 'WError: very bad error: 15 problems'); -mod_assert.ok(err.cause() === undefined); - -err = new WError({}, '%s error: %3d problems', 'very bad', 15); -mod_assert.equal(err.message, 'very bad error: 15 problems'); -mod_assert.equal(err.toString(), 'WError: very bad error: 15 problems'); -mod_assert.ok(err.cause() === undefined); - -/* caused by another error, with no additional message */ -suberr = new Error('root cause'); -err = new WError(suberr); -mod_assert.equal(err.message, ''); -mod_assert.equal(err.toString(), 'WError; caused by Error: root cause'); -mod_assert.ok(err.cause() === suberr); - -err = new WError({ 'cause': suberr }); -mod_assert.equal(err.message, ''); -mod_assert.equal(err.toString(), 'WError; caused by Error: root cause'); -mod_assert.ok(err.cause() === suberr); - -/* caused by another error, with annotation */ -err = new WError(suberr, 'proximate cause: %d issues', 3); -mod_assert.equal(err.message, 'proximate cause: 3 issues'); -mod_assert.equal(err.toString(), 'WError: proximate cause: 3 issues; ' + - 'caused by Error: root cause'); -mod_assert.ok(err.cause() === suberr); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'WError: proximate cause: 3 issues; caused by Error: root cause', - ' at Object. (tst.werror.js)' -].join('\n') + '\n' + nodestack); - -err = new WError({ 'cause': suberr }, 'proximate cause: %d issues', 3); -mod_assert.equal(err.message, 'proximate cause: 3 issues'); -mod_assert.equal(err.toString(), 'WError: proximate cause: 3 issues; ' + - 'caused by Error: root cause'); -mod_assert.ok(err.cause() === suberr); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'WError: proximate cause: 3 issues; caused by Error: root cause', - ' at Object. (tst.werror.js)' -].join('\n') + '\n' + nodestack); - -/* caused by another WError, with annotation. */ -suberr = err; -err = new WError(suberr, 'top'); -mod_assert.equal(err.message, 'top'); -mod_assert.equal(err.toString(), 'WError: top; caused by WError: ' + - 'proximate cause: 3 issues; caused by Error: root cause'); -mod_assert.ok(err.cause() === suberr); - -err = new WError({ 'cause': suberr }, 'top'); -mod_assert.equal(err.message, 'top'); -mod_assert.equal(err.toString(), 'WError: top; caused by WError: ' + - 'proximate cause: 3 issues; caused by Error: root cause'); -mod_assert.ok(err.cause() === suberr); - -/* caused by a VError */ -suberr = new VError(new Error('root cause'), 'mid'); -err = new WError(suberr, 'top'); -mod_assert.equal(err.message, 'top'); -mod_assert.equal(err.toString(), - 'WError: top; caused by VError: mid: root cause'); -mod_assert.ok(err.cause() === suberr); - -/* null cause (for backwards compatibility with older versions) */ -err = new WError(null, 'my error'); -mod_assert.equal(err.message, 'my error'); -mod_assert.equal(err.toString(), 'WError: my error'); -mod_assert.ok(err.cause() === undefined); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'WError: my error', - ' at Object. (tst.werror.js)' -].join('\n') + '\n' + nodestack); - -err = new WError({ 'cause': null }, 'my error'); -mod_assert.equal(err.message, 'my error'); -mod_assert.equal(err.toString(), 'WError: my error'); -mod_assert.ok(err.cause() === undefined); - -err = new WError(null); -mod_assert.equal(err.message, ''); -mod_assert.equal(err.toString(), 'WError'); -mod_assert.ok(err.cause() === undefined); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'WError', - ' at Object. (tst.werror.js)' -].join('\n') + '\n' + nodestack); - -/* constructorOpt */ -function makeErr(options) { - return (new WError(options, 'test error')); -} -err = makeErr({}); -mod_assert.equal(err.toString(), 'WError: test error'); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'WError: test error', - ' at makeErr (tst.werror.js)', - ' at Object. (tst.werror.js)' -].join('\n') + '\n' + nodestack); - -err = makeErr({ 'constructorOpt': makeErr }); -mod_assert.equal(err.toString(), 'WError: test error'); -stack = cleanStack(err.stack); -mod_assert.equal(stack, [ - 'WError: test error', - ' at Object. (tst.werror.js)' -].join('\n') + '\n' + nodestack); diff --git a/node_modules/web3-provider-engine/.npmignore b/node_modules/web3-provider-engine/.npmignore deleted file mode 100644 index c6b1254..0000000 --- a/node_modules/web3-provider-engine/.npmignore +++ /dev/null @@ -1,66 +0,0 @@ - -# Created by https://www.gitignore.io/api/osx,node - -### OSX ### -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -### Node ### -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git -node_modules - -# Optional npm cache directory -.npm - -# Optional REPL history -.node_repl_history - diff --git a/node_modules/web3-provider-engine/README.md b/node_modules/web3-provider-engine/README.md deleted file mode 100644 index 274edf3..0000000 --- a/node_modules/web3-provider-engine/README.md +++ /dev/null @@ -1,164 +0,0 @@ -# Web3 ProviderEngine - -Web3 ProviderEngine is a tool for composing your own [web3 providers](https://github.com/ethereum/wiki/wiki/JavaScript-API#web3). - -Status: WIP - expect breaking changes and strange behaviour - -### Composable - -Built to be modular - works via a stack of 'sub-providers' which are like normal web3 providers but only handle a subset of rpc methods. - -The subproviders can emit new rpc requests in order to handle their own; e.g. `eth_call` may trigger `eth_getAccountBalance`, `eth_getCode`, and others. -The provider engine also handles caching of rpc request results. - -```js -const ProviderEngine = require('web3-provider-engine') -const CacheSubprovider = require('web3-provider-engine/subproviders/cache.js') -const FixtureSubprovider = require('web3-provider-engine/subproviders/fixture.js') -const FilterSubprovider = require('web3-provider-engine/subproviders/filters.js') -const VmSubprovider = require('web3-provider-engine/subproviders/vm.js') -const HookedWalletSubprovider = require('web3-provider-engine/subproviders/hooked-wallet.js') -const NonceSubprovider = require('web3-provider-engine/subproviders/nonce-tracker.js') -const RpcSubprovider = require('web3-provider-engine/subproviders/rpc.js') - -var engine = new ProviderEngine() -var web3 = new Web3(engine) - -// static results -engine.addProvider(new FixtureSubprovider({ - web3_clientVersion: 'ProviderEngine/v0.0.0/javascript', - net_listening: true, - eth_hashrate: '0x00', - eth_mining: false, - eth_syncing: true, -}) - -// cache layer -engine.addProvider(new CacheSubprovider()) - -// filters -engine.addProvider(new FilterSubprovider()) - -// pending nonce -engine.addProvider(new NonceSubprovider()) - -// vm -engine.addProvider(new VmSubprovider()) - -// id mgmt -engine.addProvider(new HookedWalletSubprovider({ - getAccounts: function(cb){ ... }, - approveTransaction: function(cb){ ... }, - signTransaction: function(cb){ ... }, -})) - -// data source -engine.addProvider(new RpcSubprovider({ - rpcUrl: 'https://testrpc.metamask.io/', -})) - -// log new blocks -engine.on('block', function(block){ - console.log('================================') - console.log('BLOCK CHANGED:', '#'+block.number.toString('hex'), '0x'+block.hash.toString('hex')) - console.log('================================') -}) - -// network connectivity error -engine.on('error', function(err){ - // report connectivity errors - console.error(err.stack) -}) - -// start polling for blocks -engine.start() - -``` - -### Built For Zero-Clients - -The [Ethereum JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) was not designed to have one node service many clients. -However a smaller, lighter subset of the JSON RPC can be used to provide the blockchain data that an Ethereum 'zero-client' node would need to function. -We handle as many types of requests locally as possible, and just let data lookups fallback to some data source ( hosted rpc, blockchain api, etc ). -Categorically, we don’t want / can’t have the following types of RPC calls go to the network: -* id mgmt + tx signing (requires private data) -* filters (requires a stateful data api) -* vm (expensive, hard to scale) - - -### Current RPC method support: - -##### static -- [x] web3_clientVersion -- [x] net_version -- [x] net_listening -- [x] net_peerCount -- [x] eth_protocolVersion -- [x] eth_hashrate -- [x] eth_mining -- [x] eth_syncing - -##### filters -- [x] eth_newBlockFilter -- [x] eth_newPendingTransactionFilter -- [x] eth_newFilter -- [x] eth_uninstallFilter -- [x] eth_getFilterLogs -- [x] eth_getFilterChanges - -##### accounts manager -- [x] eth_coinbase -- [x] eth_accounts -- [x] eth_sendTransaction -- [x] eth_sign - -##### vm -- [x] eth_call -- [x] eth_estimateGas - -##### db source -- [ ] db_putString -- [ ] db_getString -- [ ] db_putHex -- [ ] db_getHex - -##### compiler -- [ ] eth_getCompilers -- [ ] eth_compileLLL -- [ ] eth_compileSerpent -- [ ] eth_compileSolidity - -##### shh gateway -- [ ] shh_version -- [ ] shh_post -- [ ] shh_newIdentity -- [ ] shh_hasIdentity -- [ ] shh_newGroup -- [ ] shh_addToGroup - -##### data source ( fallback to rpc ) -* eth_gasPrice -* eth_blockNumber -* eth_getBalance -* eth_getBlockByHash -* eth_getBlockByNumber -* eth_getBlockTransactionCountByHash -* eth_getBlockTransactionCountByNumber -* eth_getCode -* eth_getStorageAt -* eth_getTransactionByBlockHashAndIndex -* eth_getTransactionByBlockNumberAndIndex -* eth_getTransactionByHash -* eth_getTransactionCount -* eth_getTransactionReceipt -* eth_getUncleByBlockHashAndIndex -* eth_getUncleByBlockNumberAndIndex -* eth_getUncleCountByBlockHash -* eth_getUncleCountByBlockNumber -* eth_sendRawTransaction -* eth_getLogs ( not used in web3.js ) - -##### ( not supported ) -* eth_getWork -* eth_submitWork -* eth_submitHashrate ( not used in web3.js ) diff --git a/node_modules/web3-provider-engine/dist/ProviderEngine.js b/node_modules/web3-provider-engine/dist/ProviderEngine.js deleted file mode 100644 index 9e9ddca..0000000 --- a/node_modules/web3-provider-engine/dist/ProviderEngine.js +++ /dev/null @@ -1,19973 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ProviderEngine = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= self._providers.length) { - end(new Error('Request for method "' + payload.method + '" not handled by any subprovider. Please check your subprovider configuration to ensure this method is handled.')) - } else { - try { - var provider = self._providers[currentProvider] - provider.handleRequest(payload, next, end) - } catch (e) { - end(e) - } - } - } - - function end(_error, _result) { - error = _error - result = _result - - async.eachSeries(stack, function(fn, callback) { - - if (fn) { - fn(error, result, callback) - } else { - callback() - } - }, function() { - // console.log('COMPLETED:', payload) - // console.log('RESULT: ', result) - - var resultObj = { - id: payload.id, - jsonrpc: payload.jsonrpc, - result: result - } - - if (error != null) { - resultObj.error = { - message: error.stack || error.message || error, - code: -32000 - } - // respond with both error formats - finished(error, resultObj) - } else { - self._inspectResponseForNewBlock(payload, resultObj, finished) - } - }) - } -} - -// -// from remote-data -// - -Web3ProviderEngine.prototype._startPolling = function(){ - const self = this - - self._fetchLatestBlock() - - self._pollIntervalId = setInterval(function() { - self._fetchLatestBlock() - }, self._pollingInterval) - - // Tell node that block polling shouldn't keep the process open. - // https://nodejs.org/api/timers.html#timers_timeout_unref - if (self._pollIntervalId.unref && self._pollingShouldUnref) { - self._pollIntervalId.unref() - } -} - -Web3ProviderEngine.prototype._stopPolling = function(){ - const self = this - clearInterval(self._pollIntervalId) -} - -Web3ProviderEngine.prototype._fetchLatestBlock = function(cb) { - if (!cb) cb = function(err) { if (err) return console.error(err) } - - const self = this - - self._fetchBlock('latest', function(err, block) { - if (err) { - self.emit('error', err) - return cb(err) - } - - if (!self.currentBlock || 0 !== self.currentBlock.hash.compare(block.hash)) { - self._setCurrentBlock(block) - } - - cb(null, block) - }) -} - -Web3ProviderEngine.prototype._setCurrentBlock = function(block){ - const self = this - self.currentBlock = block - self.emit('block', block) -} - -Web3ProviderEngine.prototype._fetchBlock = function(number, cb){ - const self = this - - // skip: cache, readiness, block number rewrite - self._handleAsync(createPayload({ - method: 'eth_getBlockByNumber', - params: [number, false], - }), function(err, resultObj){ - if (err) return cb(err) - if (resultObj.error) return cb(resultObj.error) - var data = resultObj.result; - - - // json -> buffers - var block = { - number: ethUtil.toBuffer(data.number), - hash: ethUtil.toBuffer(data.hash), - parentHash: ethUtil.toBuffer(data.parentHash), - nonce: ethUtil.toBuffer(data.nonce), - sha3Uncles: ethUtil.toBuffer(data.sha3Uncles), - logsBloom: ethUtil.toBuffer(data.logsBloom), - transactionsRoot: ethUtil.toBuffer(data.transactionsRoot), - stateRoot: ethUtil.toBuffer(data.stateRoot), - receiptRoot: ethUtil.toBuffer(data.receiptRoot), - miner: ethUtil.toBuffer(data.miner), - difficulty: ethUtil.toBuffer(data.difficulty), - totalDifficulty: ethUtil.toBuffer(data.totalDifficulty), - size: ethUtil.toBuffer(data.size), - extraData: ethUtil.toBuffer(data.extraData), - gasLimit: ethUtil.toBuffer(data.gasLimit), - gasUsed: ethUtil.toBuffer(data.gasUsed), - timestamp: ethUtil.toBuffer(data.timestamp), - transactions: data.transactions, - } - - cb(null, block) - }) -} - -Web3ProviderEngine.prototype._inspectResponseForNewBlock = function(payload, resultObj, cb) { - - // these methods return responses with a block reference - if (payload.method != 'eth_getTransactionByHash' - && payload.method != 'eth_getTransactionReceipt') { - return cb(null, resultObj) - } - - if (resultObj.result == null || resultObj.result.blockNumber == null) { - return cb(null, resultObj) - } - - var blockNumber = ethUtil.toBuffer(resultObj.result.blockNumber) - - // If we found a new block number on the result, - // fetch the block details before returning the original response. - // We do this b/c a user might be polling for a tx by hash, - // and when getting a response may assume that we are on the new block and - // try to query data from that block but would otherwise get old data due to - // our blockTag-rewriting mechanism - if (0 !== this.currentBlock.number.compare(blockNumber)) { - this._fetchLatestBlock(function(err, block) { - cb(null, resultObj) - }) - } else { - cb(null, resultObj) - } - -} - -// util - -function SourceNotFoundError(payload){ - return new Error('Source for RPC method "'+payload.method+'" not found.') -} - - -},{"./util/create-payload.js":84,"./util/rpc-cache-utils.js":86,"./util/stoplight.js":87,"async":3,"ethereumjs-util":36,"events":37,"util":82}],2:[function(require,module,exports){ -// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 -// -// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! -// -// Originally from narwhal.js (http://narwhaljs.org) -// Copyright (c) 2009 Thomas Robinson <280north.com> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the 'Software'), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -// when used in node, this will actually load the util module we depend on -// versus loading the builtin util module as happens otherwise -// this is a bug in node module loading as far as I am concerned -var util = require('util/'); - -var pSlice = Array.prototype.slice; -var hasOwn = Object.prototype.hasOwnProperty; - -// 1. The assert module provides functions that throw -// AssertionError's when particular conditions are not met. The -// assert module must conform to the following interface. - -var assert = module.exports = ok; - -// 2. The AssertionError is defined in assert. -// new assert.AssertionError({ message: message, -// actual: actual, -// expected: expected }) - -assert.AssertionError = function AssertionError(options) { - this.name = 'AssertionError'; - this.actual = options.actual; - this.expected = options.expected; - this.operator = options.operator; - if (options.message) { - this.message = options.message; - this.generatedMessage = false; - } else { - this.message = getMessage(this); - this.generatedMessage = true; - } - var stackStartFunction = options.stackStartFunction || fail; - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, stackStartFunction); - } - else { - // non v8 browsers so we can have a stacktrace - var err = new Error(); - if (err.stack) { - var out = err.stack; - - // try to strip useless frames - var fn_name = stackStartFunction.name; - var idx = out.indexOf('\n' + fn_name); - if (idx >= 0) { - // once we have located the function frame - // we need to strip out everything before it (and its line) - var next_line = out.indexOf('\n', idx + 1); - out = out.substring(next_line + 1); - } - - this.stack = out; - } - } -}; - -// assert.AssertionError instanceof Error -util.inherits(assert.AssertionError, Error); - -function replacer(key, value) { - if (util.isUndefined(value)) { - return '' + value; - } - if (util.isNumber(value) && !isFinite(value)) { - return value.toString(); - } - if (util.isFunction(value) || util.isRegExp(value)) { - return value.toString(); - } - return value; -} - -function truncate(s, n) { - if (util.isString(s)) { - return s.length < n ? s : s.slice(0, n); - } else { - return s; - } -} - -function getMessage(self) { - return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + - self.operator + ' ' + - truncate(JSON.stringify(self.expected, replacer), 128); -} - -// At present only the three keys mentioned above are used and -// understood by the spec. Implementations or sub modules can pass -// other keys to the AssertionError's constructor - they will be -// ignored. - -// 3. All of the following functions must throw an AssertionError -// when a corresponding condition is not met, with a message that -// may be undefined if not provided. All assertion methods provide -// both the actual and expected values to the assertion error for -// display purposes. - -function fail(actual, expected, message, operator, stackStartFunction) { - throw new assert.AssertionError({ - message: message, - actual: actual, - expected: expected, - operator: operator, - stackStartFunction: stackStartFunction - }); -} - -// EXTENSION! allows for well behaved errors defined elsewhere. -assert.fail = fail; - -// 4. Pure assertion tests whether a value is truthy, as determined -// by !!guard. -// assert.ok(guard, message_opt); -// This statement is equivalent to assert.equal(true, !!guard, -// message_opt);. To test strictly for the value true, use -// assert.strictEqual(true, guard, message_opt);. - -function ok(value, message) { - if (!value) fail(value, true, message, '==', assert.ok); -} -assert.ok = ok; - -// 5. The equality assertion tests shallow, coercive equality with -// ==. -// assert.equal(actual, expected, message_opt); - -assert.equal = function equal(actual, expected, message) { - if (actual != expected) fail(actual, expected, message, '==', assert.equal); -}; - -// 6. The non-equality assertion tests for whether two objects are not equal -// with != assert.notEqual(actual, expected, message_opt); - -assert.notEqual = function notEqual(actual, expected, message) { - if (actual == expected) { - fail(actual, expected, message, '!=', assert.notEqual); - } -}; - -// 7. The equivalence assertion tests a deep equality relation. -// assert.deepEqual(actual, expected, message_opt); - -assert.deepEqual = function deepEqual(actual, expected, message) { - if (!_deepEqual(actual, expected)) { - fail(actual, expected, message, 'deepEqual', assert.deepEqual); - } -}; - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (util.isBuffer(actual) && util.isBuffer(expected)) { - if (actual.length != expected.length) return false; - - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } - - return true; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); - - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!util.isObject(actual) && !util.isObject(expected)) { - return actual == expected; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - -function isArguments(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -} - -function objEquiv(a, b) { - if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - // if one is a primitive, the other must be same - if (util.isPrimitive(a) || util.isPrimitive(b)) { - return a === b; - } - var aIsArgs = isArguments(a), - bIsArgs = isArguments(b); - if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) - return false; - if (aIsArgs) { - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - var ka = objectKeys(a), - kb = objectKeys(b), - key, i; - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key])) return false; - } - return true; -} - -// 8. The non-equivalence assertion tests for any deep inequality. -// assert.notDeepEqual(actual, expected, message_opt); - -assert.notDeepEqual = function notDeepEqual(actual, expected, message) { - if (_deepEqual(actual, expected)) { - fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); - } -}; - -// 9. The strict equality assertion tests strict equality, as determined by ===. -// assert.strictEqual(actual, expected, message_opt); - -assert.strictEqual = function strictEqual(actual, expected, message) { - if (actual !== expected) { - fail(actual, expected, message, '===', assert.strictEqual); - } -}; - -// 10. The strict non-equality assertion tests for strict inequality, as -// determined by !==. assert.notStrictEqual(actual, expected, message_opt); - -assert.notStrictEqual = function notStrictEqual(actual, expected, message) { - if (actual === expected) { - fail(actual, expected, message, '!==', assert.notStrictEqual); - } -}; - -function expectedException(actual, expected) { - if (!actual || !expected) { - return false; - } - - if (Object.prototype.toString.call(expected) == '[object RegExp]') { - return expected.test(actual); - } else if (actual instanceof expected) { - return true; - } else if (expected.call({}, actual) === true) { - return true; - } - - return false; -} - -function _throws(shouldThrow, block, expected, message) { - var actual; - - if (util.isString(expected)) { - message = expected; - expected = null; - } - - try { - block(); - } catch (e) { - actual = e; - } - - message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + - (message ? ' ' + message : '.'); - - if (shouldThrow && !actual) { - fail(actual, expected, 'Missing expected exception' + message); - } - - if (!shouldThrow && expectedException(actual, expected)) { - fail(actual, expected, 'Got unwanted exception' + message); - } - - if ((shouldThrow && actual && expected && - !expectedException(actual, expected)) || (!shouldThrow && actual)) { - throw actual; - } -} - -// 11. Expected to throw an error: -// assert.throws(block, Error_opt, message_opt); - -assert.throws = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [true].concat(pSlice.call(arguments))); -}; - -// EXTENSION! This is annoying to write outside this module. -assert.doesNotThrow = function(block, /*optional*/message) { - _throws.apply(this, [false].concat(pSlice.call(arguments))); -}; - -assert.ifError = function(err) { if (err) {throw err;}}; - -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - if (hasOwn.call(obj, key)) keys.push(key); - } - return keys; -}; - -},{"util/":82}],3:[function(require,module,exports){ -(function (process,global){ -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -(function () { - - var async = {}; - function noop() {} - function identity(v) { - return v; - } - function toBool(v) { - return !!v; - } - function notId(v) { - return !v; - } - - // global on the server, window in the browser - var previous_async; - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self === 'object' && self.self === self && self || - typeof global === 'object' && global.global === global && global || - this; - - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - return function() { - if (fn === null) throw new Error("Callback was already called."); - fn.apply(this, arguments); - fn = null; - }; - } - - function _once(fn) { - return function() { - if (fn === null) return; - fn.apply(this, arguments); - fn = null; - }; - } - - //// cross-browser compatiblity functions //// - - var _toString = Object.prototype.toString; - - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; - - // Ported from underscore.js isObject - var _isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - function _isArrayLike(arr) { - return _isArray(arr) || ( - // has a positive integer length property - typeof arr.length === "number" && - arr.length >= 0 && - arr.length % 1 === 0 - ); - } - - function _arrayEach(arr, iterator) { - var index = -1, - length = arr.length; - - while (++index < length) { - iterator(arr[index], index, arr); - } - } - - function _map(arr, iterator) { - var index = -1, - length = arr.length, - result = Array(length); - - while (++index < length) { - result[index] = iterator(arr[index], index, arr); - } - return result; - } - - function _range(count) { - return _map(Array(count), function (v, i) { return i; }); - } - - function _reduce(arr, iterator, memo) { - _arrayEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - } - - function _forEachOf(object, iterator) { - _arrayEach(_keys(object), function (key) { - iterator(object[key], key); - }); - } - - function _indexOf(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === item) return i; - } - return -1; - } - - var _keys = Object.keys || function (obj) { - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - function _keyIterator(coll) { - var i = -1; - var len; - var keys; - if (_isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? i : null; - }; - } else { - keys = _keys(coll); - len = keys.length; - return function next() { - i++; - return i < len ? keys[i] : null; - }; - } - } - - // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) - // This accumulates the arguments passed into an array, after a given index. - // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). - function _restParam(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0); - var rest = Array(length); - for (var index = 0; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - } - // Currently unused but handle cases outside of the switch statement: - // var args = Array(startIndex + 1); - // for (index = 0; index < startIndex; index++) { - // args[index] = arguments[index]; - // } - // args[startIndex] = rest; - // return func.apply(this, args); - }; - } - - function _withoutIndex(iterator) { - return function (value, index, callback) { - return iterator(value, callback); - }; - } - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - - // capture the global reference to guard against fakeTimer mocks - var _setImmediate = typeof setImmediate === 'function' && setImmediate; - - var _delay = _setImmediate ? function(fn) { - // not a direct alias for IE10 compatibility - _setImmediate(fn); - } : function(fn) { - setTimeout(fn, 0); - }; - - if (typeof process === 'object' && typeof process.nextTick === 'function') { - async.nextTick = process.nextTick; - } else { - async.nextTick = _delay; - } - async.setImmediate = _setImmediate ? _delay : async.nextTick; - - - async.forEach = - async.each = function (arr, iterator, callback) { - return async.eachOf(arr, _withoutIndex(iterator), callback); - }; - - async.forEachSeries = - async.eachSeries = function (arr, iterator, callback) { - return async.eachOfSeries(arr, _withoutIndex(iterator), callback); - }; - - - async.forEachLimit = - async.eachLimit = function (arr, limit, iterator, callback) { - return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); - }; - - async.forEachOf = - async.eachOf = function (object, iterator, callback) { - callback = _once(callback || noop); - object = object || []; - - var iter = _keyIterator(object); - var key, completed = 0; - - while ((key = iter()) != null) { - completed += 1; - iterator(object[key], key, only_once(done)); - } - - if (completed === 0) callback(null); - - function done(err) { - completed--; - if (err) { - callback(err); - } - // Check key is null in case iterator isn't exhausted - // and done resolved synchronously. - else if (key === null && completed <= 0) { - callback(null); - } - } - }; - - async.forEachOfSeries = - async.eachOfSeries = function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - var key = nextKey(); - function iterate() { - var sync = true; - if (key === null) { - return callback(null); - } - iterator(obj[key], key, only_once(function (err) { - if (err) { - callback(err); - } - else { - key = nextKey(); - if (key === null) { - return callback(null); - } else { - if (sync) { - async.setImmediate(iterate); - } else { - iterate(); - } - } - } - })); - sync = false; - } - iterate(); - }; - - - - async.forEachOfLimit = - async.eachOfLimit = function (obj, limit, iterator, callback) { - _eachOfLimit(limit)(obj, iterator, callback); - }; - - function _eachOfLimit(limit) { - - return function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - if (limit <= 0) { - return callback(null); - } - var done = false; - var running = 0; - var errored = false; - - (function replenish () { - if (done && running <= 0) { - return callback(null); - } - - while (running < limit && !errored) { - var key = nextKey(); - if (key === null) { - done = true; - if (running <= 0) { - callback(null); - } - return; - } - running += 1; - iterator(obj[key], key, only_once(function (err) { - running -= 1; - if (err) { - callback(err); - errored = true; - } - else { - replenish(); - } - })); - } - })(); - }; - } - - - function doParallel(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOf, obj, iterator, callback); - }; - } - function doParallelLimit(fn) { - return function (obj, limit, iterator, callback) { - return fn(_eachOfLimit(limit), obj, iterator, callback); - }; - } - function doSeries(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOfSeries, obj, iterator, callback); - }; - } - - function _asyncMap(eachfn, arr, iterator, callback) { - callback = _once(callback || noop); - arr = arr || []; - var results = _isArrayLike(arr) ? [] : {}; - eachfn(arr, function (value, index, callback) { - iterator(value, function (err, v) { - results[index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = doParallelLimit(_asyncMap); - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.inject = - async.foldl = - async.reduce = function (arr, memo, iterator, callback) { - async.eachOfSeries(arr, function (x, i, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - - async.foldr = - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, identity).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - - async.transform = function (arr, memo, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = memo; - memo = _isArray(arr) ? [] : {}; - } - - async.eachOf(arr, function(v, k, cb) { - iterator(memo, v, k, cb); - }, function(err) { - callback(err, memo); - }); - }; - - function _filter(eachfn, arr, iterator, callback) { - var results = []; - eachfn(arr, function (x, index, callback) { - iterator(x, function (v) { - if (v) { - results.push({index: index, value: x}); - } - callback(); - }); - }, function () { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - } - - async.select = - async.filter = doParallel(_filter); - - async.selectLimit = - async.filterLimit = doParallelLimit(_filter); - - async.selectSeries = - async.filterSeries = doSeries(_filter); - - function _reject(eachfn, arr, iterator, callback) { - _filter(eachfn, arr, function(value, cb) { - iterator(value, function(v) { - cb(!v); - }); - }, callback); - } - async.reject = doParallel(_reject); - async.rejectLimit = doParallelLimit(_reject); - async.rejectSeries = doSeries(_reject); - - function _createTester(eachfn, check, getResult) { - return function(arr, limit, iterator, cb) { - function done() { - if (cb) cb(getResult(false, void 0)); - } - function iteratee(x, _, callback) { - if (!cb) return callback(); - iterator(x, function (v) { - if (cb && check(v)) { - cb(getResult(true, x)); - cb = iterator = false; - } - callback(); - }); - } - if (arguments.length > 3) { - eachfn(arr, limit, iteratee, done); - } else { - cb = iterator; - iterator = limit; - eachfn(arr, iteratee, done); - } - }; - } - - async.any = - async.some = _createTester(async.eachOf, toBool, identity); - - async.someLimit = _createTester(async.eachOfLimit, toBool, identity); - - async.all = - async.every = _createTester(async.eachOf, notId, notId); - - async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - - function _findGetResult(v, x) { - return x; - } - async.detect = _createTester(async.eachOf, identity, _findGetResult); - async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); - async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - callback(null, _map(results.sort(comparator), function (x) { - return x.value; - })); - } - - }); - - function comparator(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - } - }; - - async.auto = function (tasks, concurrency, callback) { - if (typeof arguments[1] === 'function') { - // concurrency is optional, shift the args. - callback = concurrency; - concurrency = null; - } - callback = _once(callback || noop); - var keys = _keys(tasks); - var remainingTasks = keys.length; - if (!remainingTasks) { - return callback(null); - } - if (!concurrency) { - concurrency = remainingTasks; - } - - var results = {}; - var runningTasks = 0; - - var hasError = false; - - var listeners = []; - function addListener(fn) { - listeners.unshift(fn); - } - function removeListener(fn) { - var idx = _indexOf(listeners, fn); - if (idx >= 0) listeners.splice(idx, 1); - } - function taskComplete() { - remainingTasks--; - _arrayEach(listeners.slice(0), function (fn) { - fn(); - }); - } - - addListener(function () { - if (!remainingTasks) { - callback(null, results); - } - }); - - _arrayEach(keys, function (k) { - if (hasError) return; - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = _restParam(function(err, args) { - runningTasks--; - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _forEachOf(results, function(val, rkey) { - safeResults[rkey] = val; - }); - safeResults[k] = args; - hasError = true; - - callback(err, safeResults); - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }); - var requires = task.slice(0, task.length - 1); - // prevent dead-locks - var len = requires.length; - var dep; - while (len--) { - if (!(dep = tasks[requires[len]])) { - throw new Error('Has nonexistent dependency in ' + requires.join(', ')); - } - if (_isArray(dep) && _indexOf(dep, k) >= 0) { - throw new Error('Has cyclic dependencies'); - } - } - function ready() { - return runningTasks < concurrency && _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - } - if (ready()) { - runningTasks++; - task[task.length - 1](taskCallback, results); - } - else { - addListener(listener); - } - function listener() { - if (ready()) { - runningTasks++; - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - } - }); - }; - - - - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var attempts = []; - - var opts = { - times: DEFAULT_TIMES, - interval: DEFAULT_INTERVAL - }; - - function parseTimes(acc, t){ - if(typeof t === 'number'){ - acc.times = parseInt(t, 10) || DEFAULT_TIMES; - } else if(typeof t === 'object'){ - acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; - acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; - } else { - throw new Error('Unsupported argument type for \'times\': ' + typeof t); - } - } - - var length = arguments.length; - if (length < 1 || length > 3) { - throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); - } else if (length <= 2 && typeof times === 'function') { - callback = task; - task = times; - } - if (typeof times !== 'function') { - parseTimes(opts, times); - } - opts.callback = callback; - opts.task = task; - - function wrappedTask(wrappedCallback, wrappedResults) { - function retryAttempt(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - } - - function retryInterval(interval){ - return function(seriesCallback){ - setTimeout(function(){ - seriesCallback(null); - }, interval); - }; - } - - while (opts.times) { - - var finalAttempt = !(opts.times-=1); - attempts.push(retryAttempt(opts.task, finalAttempt)); - if(!finalAttempt && opts.interval > 0){ - attempts.push(retryInterval(opts.interval)); - } - } - - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || opts.callback)(data.err, data.result); - }); - } - - // If a callback is passed, run this as a controll flow - return opts.callback ? wrappedTask() : wrappedTask; - }; - - async.waterfall = function (tasks, callback) { - callback = _once(callback || noop); - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - function wrapIterator(iterator) { - return _restParam(function (err, args) { - if (err) { - callback.apply(null, [err].concat(args)); - } - else { - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - ensureAsync(iterator).apply(null, args); - } - }); - } - wrapIterator(async.iterator(tasks))(); - }; - - function _parallel(eachfn, tasks, callback) { - callback = callback || noop; - var results = _isArrayLike(tasks) ? [] : {}; - - eachfn(tasks, function (task, key, callback) { - task(_restParam(function (err, args) { - if (args.length <= 1) { - args = args[0]; - } - results[key] = args; - callback(err); - })); - }, function (err) { - callback(err, results); - }); - } - - async.parallel = function (tasks, callback) { - _parallel(async.eachOf, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel(_eachOfLimit(limit), tasks, callback); - }; - - async.series = function(tasks, callback) { - _parallel(async.eachOfSeries, tasks, callback); - }; - - async.iterator = function (tasks) { - function makeCallback(index) { - function fn() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - } - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - } - return makeCallback(0); - }; - - async.apply = _restParam(function (fn, args) { - return _restParam(function (callArgs) { - return fn.apply( - null, args.concat(callArgs) - ); - }); - }); - - function _concat(eachfn, arr, fn, callback) { - var result = []; - eachfn(arr, function (x, index, cb) { - fn(x, function (err, y) { - result = result.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, result); - }); - } - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - callback = callback || noop; - if (test()) { - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else if (test.apply(this, args)) { - iterator(next); - } else { - callback.apply(null, [null].concat(args)); - } - }); - iterator(next); - } else { - callback(null); - } - }; - - async.doWhilst = function (iterator, test, callback) { - var calls = 0; - return async.whilst(function() { - return ++calls <= 1 || test.apply(this, arguments); - }, iterator, callback); - }; - - async.until = function (test, iterator, callback) { - return async.whilst(function() { - return !test.apply(this, arguments); - }, iterator, callback); - }; - - async.doUntil = function (iterator, test, callback) { - return async.doWhilst(iterator, function() { - return !test.apply(this, arguments); - }, callback); - }; - - async.during = function (test, iterator, callback) { - callback = callback || noop; - - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else { - args.push(check); - test.apply(this, args); - } - }); - - var check = function(err, truth) { - if (err) { - callback(err); - } else if (truth) { - iterator(next); - } else { - callback(null); - } - }; - - test(check); - }; - - async.doDuring = function (iterator, test, callback) { - var calls = 0; - async.during(function(next) { - if (calls++ < 1) { - next(null, true); - } else { - test.apply(this, arguments); - } - }, iterator, callback); - }; - - function _queue(worker, concurrency, payload) { - if (concurrency == null) { - concurrency = 1; - } - else if(concurrency === 0) { - throw new Error('Concurrency must not be zero'); - } - function _insert(q, data, pos, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0 && q.idle()) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - callback: callback || noop - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - }); - async.setImmediate(q.process); - } - function _next(q, tasks) { - return function(){ - workers -= 1; - - var removed = false; - var args = arguments; - _arrayEach(tasks, function (task) { - _arrayEach(workersList, function (worker, index) { - if (worker === task && !removed) { - workersList.splice(index, 1); - removed = true; - } - }); - - task.callback.apply(task, args); - }); - if (q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - var workers = 0; - var workersList = []; - var q = { - tasks: [], - concurrency: concurrency, - payload: payload, - saturated: noop, - empty: noop, - drain: noop, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = noop; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - while(!q.paused && workers < q.concurrency && q.tasks.length){ - - var tasks = q.payload ? - q.tasks.splice(0, q.payload) : - q.tasks.splice(0, q.tasks.length); - - var data = _map(tasks, function (task) { - return task.data; - }); - - if (q.tasks.length === 0) { - q.empty(); - } - workers += 1; - workersList.push(tasks[0]); - var cb = only_once(_next(q, tasks)); - worker(data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - workersList: function () { - return workersList; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - q.paused = true; - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - var resumeCount = Math.min(q.concurrency, q.tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - async.setImmediate(q.process); - } - } - }; - return q; - } - - async.queue = function (worker, concurrency) { - var q = _queue(function (items, cb) { - worker(items[0], cb); - }, concurrency, 1); - - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - } - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : noop - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; - - return q; - }; - - async.cargo = function (worker, payload) { - return _queue(worker, 1, payload); - }; - - function _console_fn(name) { - return _restParam(function (fn, args) { - fn.apply(null, args.concat([_restParam(function (err, args) { - if (typeof console === 'object') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _arrayEach(args, function (x) { - console[name](x); - }); - } - } - })])); - }); - } - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - var has = Object.prototype.hasOwnProperty; - hasher = hasher || identity; - var memoized = _restParam(function memoized(args) { - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has.call(memo, key)) { - async.setImmediate(function () { - callback.apply(null, memo[key]); - }); - } - else if (has.call(queues, key)) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([_restParam(function (args) { - memo[key] = args; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, args); - } - })])); - } - }); - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - function _times(mapper) { - return function (count, iterator, callback) { - mapper(_range(count), iterator, callback); - }; - } - - async.times = _times(async.map); - async.timesSeries = _times(async.mapSeries); - async.timesLimit = function (count, limit, iterator, callback) { - return async.mapLimit(_range(count), limit, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return _restParam(function (args) { - var that = this; - - var callback = args[args.length - 1]; - if (typeof callback == 'function') { - args.pop(); - } else { - callback = noop; - } - - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { - cb(err, nextargs); - })])); - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }); - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - - function _applyEach(eachfn) { - return _restParam(function(fns, args) { - var go = _restParam(function(args) { - var that = this; - var callback = args.pop(); - return eachfn(fns, function (fn, _, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }); - if (args.length) { - return go.apply(this, args); - } - else { - return go; - } - }); - } - - async.applyEach = _applyEach(async.eachOf); - async.applyEachSeries = _applyEach(async.eachOfSeries); - - - async.forever = function (fn, callback) { - var done = only_once(callback || noop); - var task = ensureAsync(fn); - function next(err) { - if (err) { - return done(err); - } - task(next); - } - next(); - }; - - function ensureAsync(fn) { - return _restParam(function (args) { - var callback = args.pop(); - args.push(function () { - var innerArgs = arguments; - if (sync) { - async.setImmediate(function () { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - }); - var sync = true; - fn.apply(this, args); - sync = false; - }); - } - - async.ensureAsync = ensureAsync; - - async.constant = _restParam(function(values) { - var args = [null].concat(values); - return function (callback) { - return callback.apply(this, args); - }; - }); - - async.wrapSync = - async.asyncify = function asyncify(func) { - return _restParam(function (args) { - var callback = args.pop(); - var result; - try { - result = func.apply(this, args); - } catch (e) { - return callback(e); - } - // if result is Promise object - if (_isObject(result) && typeof result.then === "function") { - result.then(function(value) { - callback(null, value); - })["catch"](function(err) { - callback(err.message ? err : new Error(err)); - }); - } else { - callback(null, result); - } - }); - }; - - // Node.js - if (typeof module === 'object' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define === 'function' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via - -``` - -## Documentation - -Some functions are also available in the following forms: -* `Series` - the same as `` but runs only a single async operation at a time -* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time - -### Collections - -* [`each`](#each), `eachSeries`, `eachLimit` -* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit` -* [`map`](#map), `mapSeries`, `mapLimit` -* [`filter`](#filter), `filterSeries`, `filterLimit` -* [`reject`](#reject), `rejectSeries`, `rejectLimit` -* [`reduce`](#reduce), [`reduceRight`](#reduceRight) -* [`detect`](#detect), `detectSeries`, `detectLimit` -* [`sortBy`](#sortBy) -* [`some`](#some), `someLimit` -* [`every`](#every), `everyLimit` -* [`concat`](#concat), `concatSeries` - -### Control Flow - -* [`series`](#seriestasks-callback) -* [`parallel`](#parallel), `parallelLimit` -* [`whilst`](#whilst), [`doWhilst`](#doWhilst) -* [`until`](#until), [`doUntil`](#doUntil) -* [`during`](#during), [`doDuring`](#doDuring) -* [`forever`](#forever) -* [`waterfall`](#waterfall) -* [`compose`](#compose) -* [`seq`](#seq) -* [`applyEach`](#applyEach), `applyEachSeries` -* [`queue`](#queue), [`priorityQueue`](#priorityQueue) -* [`cargo`](#cargo) -* [`auto`](#auto) -* [`retry`](#retry) -* [`iterator`](#iterator) -* [`times`](#times), `timesSeries`, `timesLimit` - -### Utils - -* [`apply`](#apply) -* [`nextTick`](#nextTick) -* [`memoize`](#memoize) -* [`unmemoize`](#unmemoize) -* [`ensureAsync`](#ensureAsync) -* [`constant`](#constant) -* [`asyncify`](#asyncify) -* [`wrapSync`](#wrapSync) -* [`log`](#log) -* [`dir`](#dir) -* [`noConflict`](#noConflict) - -## Collections - - - -### each(arr, iterator, [callback]) - -Applies the function `iterator` to each item in `arr`, in parallel. -The `iterator` is called with an item from the list, and a callback for when it -has finished. If the `iterator` passes an error to its `callback`, the main -`callback` (for the `each` function) is immediately called with the error. - -Note, that since this function applies `iterator` to each item in parallel, -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err)` which must be called once it has - completed. If no error has occurred, the `callback` should be run without - arguments or with an explicit `null` argument. The array index is not passed - to the iterator. If you need the index, use [`forEachOf`](#forEachOf). -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions - have finished, or an error occurs. - -__Examples__ - - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - -```js -// assuming openFiles is an array of file names - -async.each(openFiles, function(file, callback) { - - // Perform operation on file here. - console.log('Processing file ' + file); - - if( file.length > 32 ) { - console.log('This file name is too long'); - callback('File name too long'); - } else { - // Do work to process file here - console.log('File processed'); - callback(); - } -}, function(err){ - // if any of the file processing produced an error, err would equal that error - if( err ) { - // One of the iterations produced an error. - // All processing will now stop. - console.log('A file failed to process'); - } else { - console.log('All files have been processed successfully'); - } -}); -``` - -__Related__ - -* eachSeries(arr, iterator, [callback]) -* eachLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - - -### forEachOf(obj, iterator, [callback]) - -Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator. - -__Arguments__ - -* `obj` - An object or array to iterate over. -* `iterator(item, key, callback)` - A function to apply to each item in `obj`. -The `key` is the item's key, or index in the case of an array. The iterator is -passed a `callback(err)` which must be called once it has completed. If no -error has occurred, the callback should be run without arguments or with an -explicit `null` argument. -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs. - -__Example__ - -```js -var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; -var configs = {}; - -async.forEachOf(obj, function (value, key, callback) { - fs.readFile(__dirname + value, "utf8", function (err, data) { - if (err) return callback(err); - try { - configs[key] = JSON.parse(data); - } catch (e) { - return callback(e); - } - callback(); - }) -}, function (err) { - if (err) console.error(err.message); - // configs is now a map of JSON data - doSomethingWith(configs); -}) -``` - -__Related__ - -* forEachOfSeries(obj, iterator, [callback]) -* forEachOfLimit(obj, limit, iterator, [callback]) - ---------------------------------------- - - -### map(arr, iterator, [callback]) - -Produces a new array of values by mapping each value in `arr` through -the `iterator` function. The `iterator` is called with an item from `arr` and a -callback for when it has finished processing. Each of these callback takes 2 arguments: -an `error`, and the transformed item from `arr`. If `iterator` passes an error to its -callback, the main `callback` (for the `map` function) is immediately called with the error. - -Note, that since this function applies the `iterator` to each item in parallel, -there is no guarantee that the `iterator` functions will complete in order. -However, the results array will be in the same order as the original `arr`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, transformed)` which must be called once - it has completed with an error (which can be `null`) and a transformed item. -* `callback(err, results)` - *Optional* A callback which is called when all `iterator` - functions have finished, or an error occurs. Results is an array of the - transformed items from the `arr`. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - -__Related__ -* mapSeries(arr, iterator, [callback]) -* mapLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - -### filter(arr, iterator, [callback]) - -__Alias:__ `select` - -Returns a new array of all the values in `arr` which pass an async truth test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The `iterator` is passed a `callback(truthValue)`, which must be called with a - boolean argument once it has completed. -* `callback(results)` - *Optional* A callback which is called after all the `iterator` - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - -__Related__ - -* filterSeries(arr, iterator, [callback]) -* filterLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reject(arr, iterator, [callback]) - -The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. - -__Related__ - -* rejectSeries(arr, iterator, [callback]) -* rejectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reduce(arr, memo, iterator, [callback]) - -__Aliases:__ `inject`, `foldl` - -Reduces `arr` into a single value using an async `iterator` to return -each successive step. `memo` is the initial state of the reduction. -This function only operates in series. - -For performance reasons, it may make sense to split a call to this function into -a parallel map, and then use the normal `Array.prototype.reduce` on the results. -This function is for situations where each step in the reduction needs to be async; -if you can get the data before reducing it, then it's probably a good idea to do so. - -__Arguments__ - -* `arr` - An array to iterate over. -* `memo` - The initial state of the reduction. -* `iterator(memo, item, callback)` - A function applied to each item in the - array to produce the next step in the reduction. The `iterator` is passed a - `callback(err, reduction)` which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main `callback` is - immediately called with the error. -* `callback(err, result)` - *Optional* A callback which is called after all the `iterator` - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - - -### reduceRight(arr, memo, iterator, [callback]) - -__Alias:__ `foldr` - -Same as [`reduce`](#reduce), only operates on `arr` in reverse order. - - ---------------------------------------- - - -### detect(arr, iterator, [callback]) - -Returns the first value in `arr` that passes an async truth test. The -`iterator` is applied in parallel, meaning the first iterator to return `true` will -fire the detect `callback` with that result. That means the result might not be -the first item in the original `arr` (in terms of order) that passes the test. - -If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The iterator is passed a `callback(truthValue)` which must be called with a - boolean argument once it has completed. **Note: this callback does not take an error as its first argument.** -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the `iterator` functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value `undefined` if none passed. **Note: this callback does not take an error as its first argument.** - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - -__Related__ - -* detectSeries(arr, iterator, [callback]) -* detectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### sortBy(arr, iterator, [callback]) - -Sorts a list by the results of running each `arr` value through an async `iterator`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, sortValue)` which must be called once it - has completed with an error (which can be `null`) and a value to use as the sort - criteria. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is the items from - the original `arr` sorted by the values returned by the `iterator` calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - -__Sort Order__ - -By modifying the callback parameter the sorting order can be influenced: - -```js -//ascending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x); -}, function(err,result){ - //result callback -} ); - -//descending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x*-1); //<- x*-1 instead of x, turns the order around -}, function(err,result){ - //result callback -} ); -``` - ---------------------------------------- - - -### some(arr, iterator, [callback]) - -__Alias:__ `any` - -Returns `true` if at least one element in the `arr` satisfies an async test. -_The callback for each iterator call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. Once any iterator -call returns `true`, the main `callback` is immediately called. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)`` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - -__Related__ - -* someLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### every(arr, iterator, [callback]) - -__Alias:__ `all` - -Returns `true` if every element in `arr` satisfies an async test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `false`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - -__Related__ - -* everyLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### concat(arr, iterator, [callback]) - -Applies `iterator` to each item in `arr`, concatenating the results. Returns the -concatenated list. The `iterator`s are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of `arr` passed to the `iterator` function. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, results)` which must be called once it - has completed with an error (which can be `null`) and an array of results. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is an array containing - the concatenated results of the `iterator` function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - -__Related__ - -* concatSeries(arr, iterator, [callback]) - - -## Control Flow - - -### series(tasks, [callback]) - -Run the functions in the `tasks` array in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run, and `callback` is immediately called with the value of the error. -Otherwise, `callback` receives an array of results when `tasks` have completed. - -It is also possible to use an object instead of an array. Each property will be -run as a function, and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`series`](#series). - -**Note** that while many implementations preserve the order of object properties, the -[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) -explicitly states that - -> The mechanics and order of enumerating the properties is not specified. - -So if you rely on the order in which your series of functions are executed, and want -this to work on all platforms, consider using an array. - -__Arguments__ - -* `tasks` - An array or object containing functions to run, each function is passed - a `callback(err, result)` it must call on completion with an error `err` (which can - be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the `task` callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - - -### parallel(tasks, [callback]) - -Run the `tasks` array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main `callback` is immediately called with the value of the error. -Once the `tasks` have completed, the results are passed to the final `callback` as an -array. - -**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`parallel`](#parallel). - - -__Arguments__ - -* `tasks` - An array or object containing functions to run. Each function is passed - a `callback(err, result)` which it must call on completion with an error `err` - (which can be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed successfully. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - -__Related__ - -* parallelLimit(tasks, limit, [callback]) - ---------------------------------------- - - -### whilst(test, fn, callback) - -Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, -or an error occurs. - -__Arguments__ - -* `test()` - synchronous truth test to perform before each execution of `fn`. -* `fn(callback)` - A function which is called each time `test` passes. The function is - passed a `callback(err)`, which must be called once it has completed with an - optional `err` argument. -* `callback(err, [results])` - A callback which is called after the test - function has failed and repeated execution of `fn` has stopped. `callback` - will be passed an error and any arguments passed to the final `fn`'s callback. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(function () { - callback(null, count); - }, 1000); - }, - function (err, n) { - // 5 seconds have passed, n = 5 - } -); -``` - ---------------------------------------- - - -### doWhilst(fn, test, callback) - -The post-check version of [`whilst`](#whilst). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - - -### until(test, fn, callback) - -Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, -or an error occurs. `callback` will be passed an error and any arguments passed -to the final `fn`'s callback. - -The inverse of [`whilst`](#whilst). - ---------------------------------------- - - -### doUntil(fn, test, callback) - -Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - - -### during(test, fn, callback) - -Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error. - -__Example__ - -```js -var count = 0; - -async.during( - function (callback) { - return callback(null, count < 5); - }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - - -### doDuring(fn, test, callback) - -The post-check version of [`during`](#during). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function. - ---------------------------------------- - - -### forever(fn, [errback]) - -Calls the asynchronous function `fn` with a callback parameter that allows it to -call itself again, in series, indefinitely. - -If an error is passed to the callback then `errback` is called with the -error, and execution stops, otherwise it will never be called. - -```js -async.forever( - function(next) { - // next is suitable for passing to things that need a callback(err [, whatever]); - // it will result in this function being called again. - }, - function(err) { - // if next is called with a value in its first parameter, it will appear - // in here as 'err', and execution will stop. - } -); -``` - ---------------------------------------- - - -### waterfall(tasks, [callback]) - -Runs the `tasks` array of functions in series, each passing their results to the next in -the array. However, if any of the `tasks` pass an error to their own callback, the -next function is not executed, and the main `callback` is immediately called with -the error. - -__Arguments__ - -* `tasks` - An array of functions to run, each function is passed a - `callback(err, result1, result2, ...)` it must call on completion. The first - argument is an error (which can be `null`) and any further arguments will be - passed as arguments in order to the next task. -* `callback(err, [results])` - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback) { - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); - }, - function(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` -Or, with named functions: - -```js -async.waterfall([ - myFirstFunction, - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(callback) { - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - -Or, if you need to pass any argument to the first function: - -```js -async.waterfall([ - async.apply(myFirstFunction, 'zero'), - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(arg1, callback) { - // arg1 now equals 'zero' - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - ---------------------------------------- - -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions `f()`, `g()`, and `h()` would produce the result of -`f(g(h()))`, only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- - -### seq(fn1, fn2...) - -Version of the compose function that is more natural to read. -Each function consumes the return value of the previous function. -It is the equivalent of [`compose`](#compose) with the arguments reversed. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -// Requires lodash (or underscore), express3 and dresende's orm2. -// Part of an app, that fetches cats of the logged user. -// This example uses `seq` function to avoid overnesting and error -// handling clutter. -app.get('/cats', function(request, response) { - var User = request.models.User; - async.seq( - _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) - function(user, fn) { - user.getCats(fn); // 'getCats' has signature (callback(err, data)) - } - )(req.session.user_id, function (err, cats) { - if (err) { - console.error(err); - response.json({ status: 'error', message: err.message }); - } else { - response.json({ status: 'ok', message: 'Cats found', data: cats }); - } - }); -}); -``` - ---------------------------------------- - -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling -`callback` after all functions have completed. If you only provide the first -argument, then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* `fns` - the asynchronous functions to all call with the same arguments -* `args...` - any number of separate arguments to pass to the function -* `callback` - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - -__Related__ - -* applyEachSeries(tasks, args..., [callback]) - ---------------------------------------- - - -### queue(worker, [concurrency]) - -Creates a `queue` object with the specified `concurrency`. Tasks added to the -`queue` are processed in parallel (up to the `concurrency` limit). If all -`worker`s are in progress, the task is queued until one becomes available. -Once a `worker` completes a `task`, that `task`'s callback is called. - -__Arguments__ - -* `worker(task, callback)` - An asynchronous function for processing a queued - task, which must call its `callback(err)` argument when finished, with an - optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`. -* `concurrency` - An `integer` for determining how many `worker` functions should be - run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown. - -__Queue objects__ - -The `queue` object returned by this function has the following properties and -methods: - -* `length()` - a function returning the number of items waiting to be processed. -* `started` - a function returning whether or not any items have been pushed and processed by the queue -* `running()` - a function returning the number of items currently being processed. -* `workersList()` - a function returning the array of items currently being processed. -* `idle()` - a function returning false if there are items waiting or being processed, or true if not. -* `concurrency` - an integer for determining how many `worker` functions should be - run in parallel. This property can be changed after a `queue` is created to - alter the concurrency on-the-fly. -* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once - the `worker` has finished processing the task. Instead of a single task, a `tasks` array - can be submitted. The respective callback is used for every task in the list. -* `unshift(task, [callback])` - add a new task to the front of the `queue`. -* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, - and further tasks will be queued. -* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. -* `paused` - a boolean for determining whether the queue is in a paused state -* `pause()` - a function that pauses the processing of tasks until `resume()` is called. -* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. -* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle. - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing item'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - - ---------------------------------------- - - -### priorityQueue(worker, concurrency) - -The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: - -* `push(task, priority, [callback])` - `priority` should be a number. If an array of - `tasks` is given, all tasks will be assigned the same priority. -* The `unshift` method was removed. - ---------------------------------------- - - -### cargo(worker, [payload]) - -Creates a `cargo` object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the `payload` limit). If the -`worker` is in progress, the task is queued until it becomes available. Once -the `worker` has completed some tasks, each callback of those tasks is called. -Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work. - -While [queue](#queue) passes only one task to one of a group of workers -at a time, cargo passes an array of tasks to a single worker, repeating -when the worker is finished. - -__Arguments__ - -* `worker(tasks, callback)` - An asynchronous function for processing an array of - queued tasks, which must call its `callback(err)` argument when finished, with - an optional `err` argument. -* `payload` - An optional `integer` for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The `cargo` object returned by this function has the following properties and -methods: - -* `length()` - A function returning the number of items waiting to be processed. -* `payload` - An `integer` for determining how many tasks should be - process per round. This property can be changed after a `cargo` is created to - alter the payload on-the-fly. -* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called - once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` - can be submitted. The respective callback is used for every task in the list. -* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. -* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. -* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue) - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i -### auto(tasks, [concurrency], [callback]) - -Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied. - -If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far. - -Note, all functions are called with a `results` object as a second argument, -so it is unsafe to pass functions in the `tasks` object which cannot handle the -extra argument. - -For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling `readFile` with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to `readFile` in a function which does not forward the -`results` object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* `tasks` - An object. Each of its properties is either a function or an array of - requirements, with the function itself the last item in the array. The object's key - of a property serves as the name of the task defined by that property, - i.e. can be used when specifying requirements for other tasks. - The function receives two arguments: (1) a `callback(err, result)` which must be - called when finished, passing an `error` (which can be `null`) and the result of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions. -* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible. -* `callback(err, results)` - An optional callback which is called when all the - tasks have been completed. It receives the `err` argument if any `tasks` - pass an error to their callback. Results are always returned; however, if - an error occurs, no further `tasks` will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - make_folder: function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - }, - write_file: ['get_data', 'make_folder', function(callback, results){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, 'filename'); - }], - email_link: ['write_file', function(callback, results){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - callback(null, {'file':results.write_file, 'email':'user@example.com'}); - }] -}, function(err, results) { - console.log('err = ', err); - console.log('results = ', results); -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - } -], -function(err, results){ - async.series([ - function(callback){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - results.push('filename'); - callback(null); - }, - function(callback){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - callback(null, {'file':results.pop(), 'email':'user@example.com'}); - } - ]); -}); -``` - -For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding -new tasks much easier (and the code more readable). - - ---------------------------------------- - - -### retry([opts = {times: 5, interval: 0}| 5], task, [callback]) - -Attempts to get a successful response from `task` no more than `times` times before -returning an error. If the task is successful, the `callback` will be passed the result -of the successful task. If all attempts fail, the callback will be passed the error and -result (if any) of the final attempt. - -__Arguments__ - -* `opts` - Can be either an object with `times` and `interval` or a number. - * `times` - The number of attempts to make before giving up. The default is `5`. - * `interval` - The time to wait between retries, in milliseconds. The default is `0`. - * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. -* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` - which must be called when finished, passing `err` (which can be `null`) and the `result` of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions (if nested inside another control flow). -* `callback(err, results)` - An optional callback which is called when the - task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. - -The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below: - -```js -// try calling apiMethod 3 times -async.retry(3, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod 3 times, waiting 200 ms between each retry -async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod the default 5 times no delay between each retry -async.retry(apiMethod, function(err, result) { - // do something with the result -}); -``` - -It can also be embedded within other control flow functions to retry individual methods -that are not as reliable, like this: - -```js -async.auto({ - users: api.getUsers.bind(api), - payments: async.retry(3, api.getPayments.bind(api)) -}, function(err, results) { - // do something with the results -}); -``` - - ---------------------------------------- - - -### iterator(tasks) - -Creates an iterator function which calls the next function in the `tasks` array, -returning a continuation to call the next one after that. It's also possible to -“peek” at the next iterator with `iterator.next()`. - -This function is used internally by the `async` module, but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* `tasks` - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - - -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied. - -Useful as a shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - - -### nextTick(callback), setImmediate(callback) - -Calls `callback` on a later loop around the event loop. In Node.js this just -calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` -if available, otherwise `setTimeout(callback, 0)`, which means other higher priority -events may precede the execution of `callback`. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* `callback` - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - - -### times(n, iterator, [callback]) - -Calls the `iterator` function `n` times, and accumulates results in the same manner -you would use with [`map`](#map). - -__Arguments__ - -* `n` - The number of times to run the function. -* `iterator` - The function to call `n` times. -* `callback` - see [`map`](#map) - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -__Related__ - -* timesSeries(n, iterator, [callback]) -* timesLimit(n, limit, iterator, [callback]) - - -## Utils - - -### memoize(fn, [hasher]) - -Caches the results of an `async` function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* `fn` - The function to proxy and cache results from. -* `hasher` - An optional function for generating a custom hash for storing - results. It has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - - -### unmemoize(fn) - -Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized -form. Handy for testing. - -__Arguments__ - -* `fn` - the memoized function - ---------------------------------------- - - -### ensureAsync(fn) - -Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained. - -__Arguments__ - -* `fn` - an async function, one that expects a node-style callback as its last argument - -Returns a wrapped function with the exact same call signature as the function passed in. - -__Example__ - -```js -function sometimesAsync(arg, callback) { - if (cache[arg]) { - return callback(null, cache[arg]); // this would be synchronous!! - } else { - doSomeIO(arg, callback); // this IO would be asynchronous - } -} - -// this has a risk of stack overflows if many results are cached in a row -async.mapSeries(args, sometimesAsync, done); - -// this will defer sometimesAsync's callback if necessary, -// preventing stack overflows -async.mapSeries(args, async.ensureAsync(sometimesAsync), done); - -``` - ---------------------------------------- - - -### constant(values...) - -Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`. - -__Example__ - -```js -async.waterfall([ - async.constant(42), - function (value, next) { - // value === 42 - }, - //... -], callback); - -async.waterfall([ - async.constant(filename, "utf8"), - fs.readFile, - function (fileData, next) { - //... - } - //... -], callback); - -async.auto({ - hostname: async.constant("https://server.net/"), - port: findFreePort, - launchServer: ["hostname", "port", function (cb, options) { - startServer(options, cb); - }], - //... -}, callback); - -``` - ---------------------------------------- - - - -### asyncify(func) - -__Alias:__ `wrapSync` - -Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback. - -__Example__ - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(JSON.parse), - function (data, next) { - // data is the result of parsing the text. - // If there was a parsing error, it would have been caught. - } -], callback) -``` - -If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example: - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(function (contents) { - return db.model.create(contents); - }), - function (model, next) { - // `model` is the instantiated model object. - // If there was an error, this function would be skipped. - } -], callback) -``` - -This also means you can asyncify ES2016 `async` functions. - -```js -var q = async.queue(async.asyncify(async function (file) { - var intermediateStep = await processFile(file); - return await somePromise(intermediateStep) -})); - -q.push(files); -``` - ---------------------------------------- - - -### log(function, arguments) - -Logs the result of an `async` function to the `console`. Only works in Node.js or -in browsers that support `console.log` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.log` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - - -### dir(function, arguments) - -Logs the result of an `async` function to the `console` using `console.dir` to -display the properties of the resulting object. Only works in Node.js or -in browsers that support `console.dir` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.dir` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - - -### noConflict() - -Changes the value of `async` back to its original value, returning a reference to the -`async` object. diff --git a/node_modules/web3-provider-engine/node_modules/async/dist/async.js b/node_modules/web3-provider-engine/node_modules/async/dist/async.js deleted file mode 100644 index 31e7620..0000000 --- a/node_modules/web3-provider-engine/node_modules/async/dist/async.js +++ /dev/null @@ -1,1265 +0,0 @@ -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -(function () { - - var async = {}; - function noop() {} - function identity(v) { - return v; - } - function toBool(v) { - return !!v; - } - function notId(v) { - return !v; - } - - // global on the server, window in the browser - var previous_async; - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self === 'object' && self.self === self && self || - typeof global === 'object' && global.global === global && global || - this; - - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - return function() { - if (fn === null) throw new Error("Callback was already called."); - fn.apply(this, arguments); - fn = null; - }; - } - - function _once(fn) { - return function() { - if (fn === null) return; - fn.apply(this, arguments); - fn = null; - }; - } - - //// cross-browser compatiblity functions //// - - var _toString = Object.prototype.toString; - - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; - - // Ported from underscore.js isObject - var _isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - function _isArrayLike(arr) { - return _isArray(arr) || ( - // has a positive integer length property - typeof arr.length === "number" && - arr.length >= 0 && - arr.length % 1 === 0 - ); - } - - function _arrayEach(arr, iterator) { - var index = -1, - length = arr.length; - - while (++index < length) { - iterator(arr[index], index, arr); - } - } - - function _map(arr, iterator) { - var index = -1, - length = arr.length, - result = Array(length); - - while (++index < length) { - result[index] = iterator(arr[index], index, arr); - } - return result; - } - - function _range(count) { - return _map(Array(count), function (v, i) { return i; }); - } - - function _reduce(arr, iterator, memo) { - _arrayEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - } - - function _forEachOf(object, iterator) { - _arrayEach(_keys(object), function (key) { - iterator(object[key], key); - }); - } - - function _indexOf(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === item) return i; - } - return -1; - } - - var _keys = Object.keys || function (obj) { - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - function _keyIterator(coll) { - var i = -1; - var len; - var keys; - if (_isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? i : null; - }; - } else { - keys = _keys(coll); - len = keys.length; - return function next() { - i++; - return i < len ? keys[i] : null; - }; - } - } - - // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) - // This accumulates the arguments passed into an array, after a given index. - // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). - function _restParam(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0); - var rest = Array(length); - for (var index = 0; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - } - // Currently unused but handle cases outside of the switch statement: - // var args = Array(startIndex + 1); - // for (index = 0; index < startIndex; index++) { - // args[index] = arguments[index]; - // } - // args[startIndex] = rest; - // return func.apply(this, args); - }; - } - - function _withoutIndex(iterator) { - return function (value, index, callback) { - return iterator(value, callback); - }; - } - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - - // capture the global reference to guard against fakeTimer mocks - var _setImmediate = typeof setImmediate === 'function' && setImmediate; - - var _delay = _setImmediate ? function(fn) { - // not a direct alias for IE10 compatibility - _setImmediate(fn); - } : function(fn) { - setTimeout(fn, 0); - }; - - if (typeof process === 'object' && typeof process.nextTick === 'function') { - async.nextTick = process.nextTick; - } else { - async.nextTick = _delay; - } - async.setImmediate = _setImmediate ? _delay : async.nextTick; - - - async.forEach = - async.each = function (arr, iterator, callback) { - return async.eachOf(arr, _withoutIndex(iterator), callback); - }; - - async.forEachSeries = - async.eachSeries = function (arr, iterator, callback) { - return async.eachOfSeries(arr, _withoutIndex(iterator), callback); - }; - - - async.forEachLimit = - async.eachLimit = function (arr, limit, iterator, callback) { - return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); - }; - - async.forEachOf = - async.eachOf = function (object, iterator, callback) { - callback = _once(callback || noop); - object = object || []; - - var iter = _keyIterator(object); - var key, completed = 0; - - while ((key = iter()) != null) { - completed += 1; - iterator(object[key], key, only_once(done)); - } - - if (completed === 0) callback(null); - - function done(err) { - completed--; - if (err) { - callback(err); - } - // Check key is null in case iterator isn't exhausted - // and done resolved synchronously. - else if (key === null && completed <= 0) { - callback(null); - } - } - }; - - async.forEachOfSeries = - async.eachOfSeries = function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - var key = nextKey(); - function iterate() { - var sync = true; - if (key === null) { - return callback(null); - } - iterator(obj[key], key, only_once(function (err) { - if (err) { - callback(err); - } - else { - key = nextKey(); - if (key === null) { - return callback(null); - } else { - if (sync) { - async.setImmediate(iterate); - } else { - iterate(); - } - } - } - })); - sync = false; - } - iterate(); - }; - - - - async.forEachOfLimit = - async.eachOfLimit = function (obj, limit, iterator, callback) { - _eachOfLimit(limit)(obj, iterator, callback); - }; - - function _eachOfLimit(limit) { - - return function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - if (limit <= 0) { - return callback(null); - } - var done = false; - var running = 0; - var errored = false; - - (function replenish () { - if (done && running <= 0) { - return callback(null); - } - - while (running < limit && !errored) { - var key = nextKey(); - if (key === null) { - done = true; - if (running <= 0) { - callback(null); - } - return; - } - running += 1; - iterator(obj[key], key, only_once(function (err) { - running -= 1; - if (err) { - callback(err); - errored = true; - } - else { - replenish(); - } - })); - } - })(); - }; - } - - - function doParallel(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOf, obj, iterator, callback); - }; - } - function doParallelLimit(fn) { - return function (obj, limit, iterator, callback) { - return fn(_eachOfLimit(limit), obj, iterator, callback); - }; - } - function doSeries(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOfSeries, obj, iterator, callback); - }; - } - - function _asyncMap(eachfn, arr, iterator, callback) { - callback = _once(callback || noop); - arr = arr || []; - var results = _isArrayLike(arr) ? [] : {}; - eachfn(arr, function (value, index, callback) { - iterator(value, function (err, v) { - results[index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = doParallelLimit(_asyncMap); - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.inject = - async.foldl = - async.reduce = function (arr, memo, iterator, callback) { - async.eachOfSeries(arr, function (x, i, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - - async.foldr = - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, identity).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - - async.transform = function (arr, memo, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = memo; - memo = _isArray(arr) ? [] : {}; - } - - async.eachOf(arr, function(v, k, cb) { - iterator(memo, v, k, cb); - }, function(err) { - callback(err, memo); - }); - }; - - function _filter(eachfn, arr, iterator, callback) { - var results = []; - eachfn(arr, function (x, index, callback) { - iterator(x, function (v) { - if (v) { - results.push({index: index, value: x}); - } - callback(); - }); - }, function () { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - } - - async.select = - async.filter = doParallel(_filter); - - async.selectLimit = - async.filterLimit = doParallelLimit(_filter); - - async.selectSeries = - async.filterSeries = doSeries(_filter); - - function _reject(eachfn, arr, iterator, callback) { - _filter(eachfn, arr, function(value, cb) { - iterator(value, function(v) { - cb(!v); - }); - }, callback); - } - async.reject = doParallel(_reject); - async.rejectLimit = doParallelLimit(_reject); - async.rejectSeries = doSeries(_reject); - - function _createTester(eachfn, check, getResult) { - return function(arr, limit, iterator, cb) { - function done() { - if (cb) cb(getResult(false, void 0)); - } - function iteratee(x, _, callback) { - if (!cb) return callback(); - iterator(x, function (v) { - if (cb && check(v)) { - cb(getResult(true, x)); - cb = iterator = false; - } - callback(); - }); - } - if (arguments.length > 3) { - eachfn(arr, limit, iteratee, done); - } else { - cb = iterator; - iterator = limit; - eachfn(arr, iteratee, done); - } - }; - } - - async.any = - async.some = _createTester(async.eachOf, toBool, identity); - - async.someLimit = _createTester(async.eachOfLimit, toBool, identity); - - async.all = - async.every = _createTester(async.eachOf, notId, notId); - - async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - - function _findGetResult(v, x) { - return x; - } - async.detect = _createTester(async.eachOf, identity, _findGetResult); - async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); - async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - callback(null, _map(results.sort(comparator), function (x) { - return x.value; - })); - } - - }); - - function comparator(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - } - }; - - async.auto = function (tasks, concurrency, callback) { - if (typeof arguments[1] === 'function') { - // concurrency is optional, shift the args. - callback = concurrency; - concurrency = null; - } - callback = _once(callback || noop); - var keys = _keys(tasks); - var remainingTasks = keys.length; - if (!remainingTasks) { - return callback(null); - } - if (!concurrency) { - concurrency = remainingTasks; - } - - var results = {}; - var runningTasks = 0; - - var hasError = false; - - var listeners = []; - function addListener(fn) { - listeners.unshift(fn); - } - function removeListener(fn) { - var idx = _indexOf(listeners, fn); - if (idx >= 0) listeners.splice(idx, 1); - } - function taskComplete() { - remainingTasks--; - _arrayEach(listeners.slice(0), function (fn) { - fn(); - }); - } - - addListener(function () { - if (!remainingTasks) { - callback(null, results); - } - }); - - _arrayEach(keys, function (k) { - if (hasError) return; - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = _restParam(function(err, args) { - runningTasks--; - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _forEachOf(results, function(val, rkey) { - safeResults[rkey] = val; - }); - safeResults[k] = args; - hasError = true; - - callback(err, safeResults); - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }); - var requires = task.slice(0, task.length - 1); - // prevent dead-locks - var len = requires.length; - var dep; - while (len--) { - if (!(dep = tasks[requires[len]])) { - throw new Error('Has nonexistent dependency in ' + requires.join(', ')); - } - if (_isArray(dep) && _indexOf(dep, k) >= 0) { - throw new Error('Has cyclic dependencies'); - } - } - function ready() { - return runningTasks < concurrency && _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - } - if (ready()) { - runningTasks++; - task[task.length - 1](taskCallback, results); - } - else { - addListener(listener); - } - function listener() { - if (ready()) { - runningTasks++; - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - } - }); - }; - - - - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var attempts = []; - - var opts = { - times: DEFAULT_TIMES, - interval: DEFAULT_INTERVAL - }; - - function parseTimes(acc, t){ - if(typeof t === 'number'){ - acc.times = parseInt(t, 10) || DEFAULT_TIMES; - } else if(typeof t === 'object'){ - acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; - acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; - } else { - throw new Error('Unsupported argument type for \'times\': ' + typeof t); - } - } - - var length = arguments.length; - if (length < 1 || length > 3) { - throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); - } else if (length <= 2 && typeof times === 'function') { - callback = task; - task = times; - } - if (typeof times !== 'function') { - parseTimes(opts, times); - } - opts.callback = callback; - opts.task = task; - - function wrappedTask(wrappedCallback, wrappedResults) { - function retryAttempt(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - } - - function retryInterval(interval){ - return function(seriesCallback){ - setTimeout(function(){ - seriesCallback(null); - }, interval); - }; - } - - while (opts.times) { - - var finalAttempt = !(opts.times-=1); - attempts.push(retryAttempt(opts.task, finalAttempt)); - if(!finalAttempt && opts.interval > 0){ - attempts.push(retryInterval(opts.interval)); - } - } - - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || opts.callback)(data.err, data.result); - }); - } - - // If a callback is passed, run this as a controll flow - return opts.callback ? wrappedTask() : wrappedTask; - }; - - async.waterfall = function (tasks, callback) { - callback = _once(callback || noop); - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - function wrapIterator(iterator) { - return _restParam(function (err, args) { - if (err) { - callback.apply(null, [err].concat(args)); - } - else { - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - ensureAsync(iterator).apply(null, args); - } - }); - } - wrapIterator(async.iterator(tasks))(); - }; - - function _parallel(eachfn, tasks, callback) { - callback = callback || noop; - var results = _isArrayLike(tasks) ? [] : {}; - - eachfn(tasks, function (task, key, callback) { - task(_restParam(function (err, args) { - if (args.length <= 1) { - args = args[0]; - } - results[key] = args; - callback(err); - })); - }, function (err) { - callback(err, results); - }); - } - - async.parallel = function (tasks, callback) { - _parallel(async.eachOf, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel(_eachOfLimit(limit), tasks, callback); - }; - - async.series = function(tasks, callback) { - _parallel(async.eachOfSeries, tasks, callback); - }; - - async.iterator = function (tasks) { - function makeCallback(index) { - function fn() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - } - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - } - return makeCallback(0); - }; - - async.apply = _restParam(function (fn, args) { - return _restParam(function (callArgs) { - return fn.apply( - null, args.concat(callArgs) - ); - }); - }); - - function _concat(eachfn, arr, fn, callback) { - var result = []; - eachfn(arr, function (x, index, cb) { - fn(x, function (err, y) { - result = result.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, result); - }); - } - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - callback = callback || noop; - if (test()) { - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else if (test.apply(this, args)) { - iterator(next); - } else { - callback.apply(null, [null].concat(args)); - } - }); - iterator(next); - } else { - callback(null); - } - }; - - async.doWhilst = function (iterator, test, callback) { - var calls = 0; - return async.whilst(function() { - return ++calls <= 1 || test.apply(this, arguments); - }, iterator, callback); - }; - - async.until = function (test, iterator, callback) { - return async.whilst(function() { - return !test.apply(this, arguments); - }, iterator, callback); - }; - - async.doUntil = function (iterator, test, callback) { - return async.doWhilst(iterator, function() { - return !test.apply(this, arguments); - }, callback); - }; - - async.during = function (test, iterator, callback) { - callback = callback || noop; - - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else { - args.push(check); - test.apply(this, args); - } - }); - - var check = function(err, truth) { - if (err) { - callback(err); - } else if (truth) { - iterator(next); - } else { - callback(null); - } - }; - - test(check); - }; - - async.doDuring = function (iterator, test, callback) { - var calls = 0; - async.during(function(next) { - if (calls++ < 1) { - next(null, true); - } else { - test.apply(this, arguments); - } - }, iterator, callback); - }; - - function _queue(worker, concurrency, payload) { - if (concurrency == null) { - concurrency = 1; - } - else if(concurrency === 0) { - throw new Error('Concurrency must not be zero'); - } - function _insert(q, data, pos, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0 && q.idle()) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - callback: callback || noop - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - }); - async.setImmediate(q.process); - } - function _next(q, tasks) { - return function(){ - workers -= 1; - - var removed = false; - var args = arguments; - _arrayEach(tasks, function (task) { - _arrayEach(workersList, function (worker, index) { - if (worker === task && !removed) { - workersList.splice(index, 1); - removed = true; - } - }); - - task.callback.apply(task, args); - }); - if (q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - var workers = 0; - var workersList = []; - var q = { - tasks: [], - concurrency: concurrency, - payload: payload, - saturated: noop, - empty: noop, - drain: noop, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = noop; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - while(!q.paused && workers < q.concurrency && q.tasks.length){ - - var tasks = q.payload ? - q.tasks.splice(0, q.payload) : - q.tasks.splice(0, q.tasks.length); - - var data = _map(tasks, function (task) { - return task.data; - }); - - if (q.tasks.length === 0) { - q.empty(); - } - workers += 1; - workersList.push(tasks[0]); - var cb = only_once(_next(q, tasks)); - worker(data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - workersList: function () { - return workersList; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - q.paused = true; - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - var resumeCount = Math.min(q.concurrency, q.tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - async.setImmediate(q.process); - } - } - }; - return q; - } - - async.queue = function (worker, concurrency) { - var q = _queue(function (items, cb) { - worker(items[0], cb); - }, concurrency, 1); - - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - } - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : noop - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; - - return q; - }; - - async.cargo = function (worker, payload) { - return _queue(worker, 1, payload); - }; - - function _console_fn(name) { - return _restParam(function (fn, args) { - fn.apply(null, args.concat([_restParam(function (err, args) { - if (typeof console === 'object') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _arrayEach(args, function (x) { - console[name](x); - }); - } - } - })])); - }); - } - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - var has = Object.prototype.hasOwnProperty; - hasher = hasher || identity; - var memoized = _restParam(function memoized(args) { - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has.call(memo, key)) { - async.setImmediate(function () { - callback.apply(null, memo[key]); - }); - } - else if (has.call(queues, key)) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([_restParam(function (args) { - memo[key] = args; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, args); - } - })])); - } - }); - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - function _times(mapper) { - return function (count, iterator, callback) { - mapper(_range(count), iterator, callback); - }; - } - - async.times = _times(async.map); - async.timesSeries = _times(async.mapSeries); - async.timesLimit = function (count, limit, iterator, callback) { - return async.mapLimit(_range(count), limit, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return _restParam(function (args) { - var that = this; - - var callback = args[args.length - 1]; - if (typeof callback == 'function') { - args.pop(); - } else { - callback = noop; - } - - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { - cb(err, nextargs); - })])); - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }); - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - - function _applyEach(eachfn) { - return _restParam(function(fns, args) { - var go = _restParam(function(args) { - var that = this; - var callback = args.pop(); - return eachfn(fns, function (fn, _, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }); - if (args.length) { - return go.apply(this, args); - } - else { - return go; - } - }); - } - - async.applyEach = _applyEach(async.eachOf); - async.applyEachSeries = _applyEach(async.eachOfSeries); - - - async.forever = function (fn, callback) { - var done = only_once(callback || noop); - var task = ensureAsync(fn); - function next(err) { - if (err) { - return done(err); - } - task(next); - } - next(); - }; - - function ensureAsync(fn) { - return _restParam(function (args) { - var callback = args.pop(); - args.push(function () { - var innerArgs = arguments; - if (sync) { - async.setImmediate(function () { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - }); - var sync = true; - fn.apply(this, args); - sync = false; - }); - } - - async.ensureAsync = ensureAsync; - - async.constant = _restParam(function(values) { - var args = [null].concat(values); - return function (callback) { - return callback.apply(this, args); - }; - }); - - async.wrapSync = - async.asyncify = function asyncify(func) { - return _restParam(function (args) { - var callback = args.pop(); - var result; - try { - result = func.apply(this, args); - } catch (e) { - return callback(e); - } - // if result is Promise object - if (_isObject(result) && typeof result.then === "function") { - result.then(function(value) { - callback(null, value); - })["catch"](function(err) { - callback(err.message ? err : new Error(err)); - }); - } else { - callback(null, result); - } - }); - }; - - // Node.js - if (typeof module === 'object' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define === 'function' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via -``` - -For [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry - - $ npm install bignumber.js - -```javascript -var BigNumber = require('bignumber.js'); -``` - -To load with AMD loader libraries such as [requireJS](http://requirejs.org/): - -```javascript -require(['path/to/bignumber'], function(BigNumber) { - // Use BigNumber here in local scope. No global BigNumber. -}); -``` - -## Use - -*In all examples below, `var`, semicolons and `toString` calls are not shown. -If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* - -The library exports a single function: `BigNumber`, the constructor of BigNumber instances. - -It accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object, - -```javascript -x = new BigNumber(123.4567) -y = BigNumber('123456.7e-3') -z = new BigNumber(x) -x.equals(y) && y.equals(z) && x.equals(z) // true -``` - - -and a base from 2 to 64 inclusive can be specified. - -```javascript -x = new BigNumber(1011, 2) // "11" -y = new BigNumber('zz.9', 36) // "1295.25" -z = x.plus(y) // "1306.25" -``` - -A BigNumber is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new BigNumber(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a BigNumber can be chained. - -```javascript -x.dividedBy(y).plus(z).times(9).floor() -x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil() -``` - -Many method names have a shorter alias. - -```javascript -x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true -x.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true -``` - -Like JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods - -```javascript -x = new BigNumber(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -x.toNumber() // 255.5 -``` - - and a base can be specified for `toString`. - - ```javascript - x.toString(16) // "ff.8" - ``` - -There is also a `toFormat` method which may be useful for internationalisation - -```javascript -y = new BigNumber('1234567.898765') -y.toFormat(2) // "1,234,567.90" -``` - -The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor. - -The other arithmetic operations always give the exact result. - -```javascript -BigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) -// Alternatively, BigNumber.config( 10, 4 ); - -x = new BigNumber(2); -y = new BigNumber(3); -z = x.div(y) // "0.6666666667" -z.sqrt() // "0.8164965809" -z.pow(-3) // "3.3749999995" -z.toString(2) // "0.1010101011" -z.times(z) // "0.44444444448888888889" -z.times(z).round(10) // "0.4444444445" -``` - -There is a `toFraction` method with an optional *maximum denominator* argument - -```javascript -y = new BigNumber(355) -pi = y.dividedBy(113) // "3.1415929204" -pi.toFraction() // [ "7853982301", "2500000000" ] -pi.toFraction(1000) // [ "355", "113" ] -``` - -and `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values. - -```javascript -x = new BigNumber(NaN) // "NaN" -y = new BigNumber(Infinity) // "Infinity" -x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true -``` - -The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - - -```javascript -x = new BigNumber(-123.456); -x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - - -Multiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it. - -```javascript -// Set DECIMAL_PLACES for the original BigNumber constructor -BigNumber.config({ DECIMAL_PLACES: 10 }) - -// Create another BigNumber constructor, optionally passing in a configuration object -BN = BigNumber.another({ DECIMAL_PLACES: 5 }) - -x = new BigNumber(1) -y = new BN(1) - -x.div(3) // '0.3333333333' -y.div(3) // '0.33333' -``` - -For futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. - -## Test - -The *test* directory contains the test scripts for each method. - -The tests can be run with Node or a browser. For Node use - - $ npm test - -or - - $ node test/every-test - -To test a single method, e.g. - - $ node test/toFraction - -For the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. - -*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. - -## Versions - -This is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported. - -## Performance - -See the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory. - -## Build - -For Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed - - npm install uglify-js -g - -then - - npm run build - -will create *bignumber.min.js*. - -A source map will also be created in the root directory. - -## Feedback - -Open an issue, or email - -Michael - -M8ch88l@gmail.com - -## Licence - -MIT. - -See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE). - -## Change Log - -####2.0.6 -* 31/03/2015 -* Add bower.json. Tweak division after in-depth review. - -####2.0.5 -* 25/03/2015 -* Amend README. Remove bitcoin address. - -####2.0.4 -* 25/03/2015 -* Critical bugfix #58: division. - -####2.0.3 -* 18/02/2015 -* Amend README. Add source map. - -####2.0.2 -* 18/02/2015 -* Correct links. - -####2.0.1 -* 18/02/2015 -* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods. -* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. -* Add an `another` method to enable multiple independent constructors to be created. -* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. -* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. -* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. -* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. -* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. -* Improve code quality. -* Improve documentation. - -####2.0.0 -* 29/12/2014 -* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. -* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. -* Store a BigNumber's coefficient in base 1e14, rather than base 10. -* Add fast path for integers to BigNumber constructor. -* Incorporate the library into the online documentation. - -####1.5.0 -* 13/11/2014 -* Add `toJSON` and `decimalPlaces` methods. - -####1.4.1 -* 08/06/2014 -* Amend README. - -####1.4.0 -* 08/05/2014 -* Add `toNumber`. - -####1.3.0 -* 08/11/2013 -* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. -* Maximum radix to 64. - -####1.2.1 -* 17/10/2013 -* Sign of zero when x < 0 and x + (-x) = 0. - -####1.2.0 -* 19/9/2013 -* Throw Error objects for stack. - -####1.1.1 -* 22/8/2013 -* Show original value in constructor error message. - -####1.1.0 -* 1/8/2013 -* Allow numbers with trailing radix point. - -####1.0.1 -* Bugfix: error messages with incorrect method name - -####1.0.0 -* 8/11/2012 -* Initial release diff --git a/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.js b/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.js deleted file mode 100644 index d14e7a0..0000000 --- a/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.js +++ /dev/null @@ -1,2683 +0,0 @@ -/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.7 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor( base / ( yc[0] + 1 ) ); - - // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1. - // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) { - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder. - // Trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while ( compare( prod, rem, prodL, remL ) == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if ( n == 0 ) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while ( compare( yc, rem, yL, remL ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); diff --git a/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.js.map b/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.js.map deleted file mode 100644 index d64b533..0000000 --- a/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bignumber.min.js","sources":["bignumber.js"],"names":["global","another","configObj","BigNumber","n","b","c","e","i","num","len","str","x","this","ERRORS","raise","isValidInt","id","round","DECIMAL_PLACES","ROUNDING_MODE","RegExp","ALPHABET","slice","test","parseNumeric","s","replace","length","tooManyDigits","charCodeAt","convertBase","isNumeric","indexOf","search","substring","MAX_EXP","MIN_EXP","LOG_BASE","push","baseOut","baseIn","sign","d","k","r","xc","y","dp","rm","toLowerCase","POW_PRECISION","pow","toBaseOut","toFixedPoint","coeffToString","pop","div","unshift","charAt","format","caller","c0","ne","roundingMode","toString","TO_EXP_NEG","toExponential","maxOrMin","args","method","m","isArray","call","intValidatorWithErrors","min","max","name","truncate","normalise","j","msg","val","error","Error","sd","ni","rd","pows10","POWS_TEN","out","mathceil","mathfloor","BASE","P","prototype","ONE","TO_EXP_POS","CRYPTO","MODULO_MODE","FORMAT","decimalSeparator","groupSeparator","groupSize","secondaryGroupSize","fractionGroupSeparator","fractionGroupSize","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","v","p","a","arguments","o","has","hasOwnProperty","MAX","intValidatorNoErrors","notBool","crypto","lt","gt","random","pow2_53","random53bitInt","Math","rand","getRandomValues","Uint32Array","randomBytes","copy","shift","multiply","base","temp","xlo","xhi","carry","klo","SQRT_BASE","khi","compare","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","yc","NaN","bitFloor","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","isNaN","p1","p2","absoluteValue","abs","ceil","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","divToInt","equals","eq","floor","greaterThan","greaterThanOrEqualTo","gte","isFinite","isInteger","isInt","isNegative","isNeg","isZero","lessThan","lessThanOrEqualTo","lte","minus","sub","t","xLTy","plus","xe","ye","reverse","modulo","mod","times","negated","neg","add","precision","z","MAX_SAFE_INTEGER","squareRoot","sqrt","rep","half","mul","xcL","ycL","ylo","yhi","zc","sqrtBase","toDigits","toFixed","toFormat","arr","split","g1","g2","intPart","fractionPart","intDigits","substr","toFraction","md","d0","d2","exp","n0","n1","d1","toNumber","toPower","parseFloat","toPrecision","truncated","trunc","valueOf","toJSON","l","obj","Object","arrL","define","amd","module","exports","require"],"mappings":";CAEC,SAAWA,GACR,YAqCA,SAASC,GAAQC,GAiHb,QAASC,GAAWC,EAAGC,GACnB,GAAIC,GAAGC,EAAGC,EAAGC,EAAKC,EAAKC,EACnBC,EAAIC,IAGR,MAAQD,YAAaT,IAIjB,MADIW,IAAQC,EAAO,GAAI,+BAAgCX,GAChD,GAAID,GAAWC,EAAGC,EAK7B,IAAU,MAALA,GAAcW,EAAYX,EAAG,EAAG,GAAIY,EAAI,QA4BtC,CAMH,GALAZ,EAAQ,EAAJA,EACJM,EAAMP,EAAI,GAIA,IAALC,EAED,MADAO,GAAI,GAAIT,GAAWC,YAAaD,GAAYC,EAAIO,GACzCO,EAAON,EAAGO,EAAiBP,EAAEL,EAAI,EAAGa,EAK/C,KAAOX,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,IAC7C,GAAMiB,QAAQ,OAAUf,EAAI,IAAMgB,EAASC,MAAO,EAAGlB,GAAM,MAC1D,SAAWC,EAAI,MAAU,GAAJD,EAAS,IAAM,IAAOmB,KAAKb,GAChD,MAAOc,GAAcb,EAAGD,EAAKF,EAAKJ,EAGlCI,IACAG,EAAEc,EAAY,EAAR,EAAItB,GAAUO,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAE1CT,GAAUH,EAAIgB,QAAS,YAAa,IAAKC,OAAS,IAGnDb,EAAOE,EAAIY,EAAezB,GAI9BK,GAAM,GAENG,EAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAGlEZ,EAAMoB,EAAapB,EAAK,GAAIN,EAAGO,EAAEc,OA9DmB,CAGpD,GAAKtB,YAAaD,GAKd,MAJAS,GAAEc,EAAItB,EAAEsB,EACRd,EAAEL,EAAIH,EAAEG,EACRK,EAAEN,GAAMF,EAAIA,EAAEE,GAAMF,EAAEmB,QAAUnB,OAChCa,EAAK,EAIT,KAAOR,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,EAAI,CAIhD,GAHAQ,EAAEc,EAAY,EAAR,EAAItB,GAAUA,GAAKA,EAAG,IAAO,EAG9BA,MAAQA,EAAI,CACb,IAAMG,EAAI,EAAGC,EAAIJ,EAAGI,GAAK,GAAIA,GAAK,GAAID,KAItC,MAHAK,GAAEL,EAAIA,EACNK,EAAEN,GAAKF,QACPa,EAAK,GAITN,EAAMP,EAAI,OACP,CACH,IAAM4B,EAAUR,KAAMb,EAAMP,EAAI,IAAO,MAAOqB,GAAcb,EAAGD,EAAKF,EACpEG,GAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,GAwDtE,KAhBOhB,EAAII,EAAIsB,QAAQ,MAAS,KAAKtB,EAAMA,EAAIgB,QAAS,IAAK,MAGtDnB,EAAIG,EAAIuB,OAAQ,OAAW,GAGrB,EAAJ3B,IAAQA,EAAIC,GACjBD,IAAMI,EAAIY,MAAOf,EAAI,GACrBG,EAAMA,EAAIwB,UAAW,EAAG3B,IACZ,EAAJD,IAGRA,EAAII,EAAIiB,QAINpB,EAAI,EAAyB,KAAtBG,EAAImB,WAAWtB,GAAWA,KAGvC,IAAME,EAAMC,EAAIiB,OAAkC,KAA1BjB,EAAImB,aAAapB,KAGzC,GAFAC,EAAMA,EAAIY,MAAOf,EAAGE,EAAM,GAYtB,GATAA,EAAMC,EAAIiB,OAILnB,GAAOK,GAAUJ,EAAM,IAAKK,EAAOE,EAAIY,EAAejB,EAAEc,EAAItB,GAEjEG,EAAIA,EAAIC,EAAI,EAGPD,EAAI6B,EAGLxB,EAAEN,EAAIM,EAAEL,EAAI,SAGT,IAAS8B,EAAJ9B,EAGRK,EAAEN,GAAMM,EAAEL,EAAI,OACX,CAWH,GAVAK,EAAEL,EAAIA,EACNK,EAAEN,KAMFE,GAAMD,EAAI,GAAM+B,EACP,EAAJ/B,IAAQC,GAAK8B,GAET5B,EAAJF,EAAU,CAGX,IAFIA,GAAGI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAO,EAAGf,IAE1BE,GAAO4B,EAAc5B,EAAJF,GACnBI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAOf,EAAGA,GAAK8B,GAGlC3B,GAAMA,EAAIY,MAAMf,GAChBA,EAAI8B,EAAW3B,EAAIiB,WAEnBpB,IAAKE,CAGT,MAAQF,IAAKG,GAAO,KACpBC,EAAEN,EAAEiC,MAAO5B,OAKfC,GAAEN,GAAMM,EAAEL,EAAI,EAGlBU,GAAK,EAgVT,QAASc,GAAapB,EAAK6B,EAASC,EAAQC,GACxC,GAAIC,GAAGpC,EAAGqC,EAAGC,EAAGjC,EAAGkC,EAAIC,EACnBvC,EAAIG,EAAIsB,QAAS,KACjBe,EAAK7B,EACL8B,EAAK7B,CA0BT,KAxBc,GAATqB,IAAc9B,EAAMA,EAAIuC,eAGxB1C,GAAK,IACNoC,EAAIO,EAGJA,EAAgB,EAChBxC,EAAMA,EAAIgB,QAAS,IAAK,IACxBoB,EAAI,GAAI5C,GAAUsC,GAClB7B,EAAImC,EAAEK,IAAKzC,EAAIiB,OAASpB,GACxB2C,EAAgBP,EAIhBG,EAAEzC,EAAI+C,EAAWC,EAAcC,EAAe3C,EAAEN,GAAKM,EAAEL,GAAK,GAAIiC,GAChEO,EAAExC,EAAIwC,EAAEzC,EAAEsB,QAIdkB,EAAKO,EAAW1C,EAAK8B,EAAQD,GAC7BjC,EAAIqC,EAAIE,EAAGlB,OAGQ,GAAXkB,IAAKF,GAASE,EAAGU,OACzB,IAAMV,EAAG,GAAK,MAAO,GA2BrB,IAzBS,EAAJtC,IACCD,GAEFK,EAAEN,EAAIwC,EACNlC,EAAEL,EAAIA,EAGNK,EAAEc,EAAIgB,EACN9B,EAAI6C,EAAK7C,EAAGmC,EAAGC,EAAIC,EAAIT,GACvBM,EAAKlC,EAAEN,EACPuC,EAAIjC,EAAEiC,EACNtC,EAAIK,EAAEL,GAGVoC,EAAIpC,EAAIyC,EAAK,EAGbxC,EAAIsC,EAAGH,GACPC,EAAIJ,EAAU,EACdK,EAAIA,GAAS,EAAJF,GAAsB,MAAbG,EAAGH,EAAI,GAEzBE,EAAS,EAALI,GAAgB,MAALzC,GAAaqC,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IACzDlB,EAAIoC,GAAKpC,GAAKoC,IAAY,GAANK,GAAWJ,GAAW,GAANI,GAAuB,EAAZH,EAAGH,EAAI,IACtDM,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAE1B,EAAJiB,IAAUG,EAAG,GAGdnC,EAAMkC,EAAIS,EAAc,KAAMN,GAAO,QAClC,CAGH,GAFAF,EAAGlB,OAASe,EAERE,EAGA,MAAQL,IAAWM,IAAKH,GAAKH,GACzBM,EAAGH,GAAK,EAEFA,MACApC,EACFuC,EAAGY,QAAQ,GAMvB,KAAMd,EAAIE,EAAGlB,QAASkB,IAAKF,KAG3B,IAAMpC,EAAI,EAAGG,EAAM,GAASiC,GAALpC,EAAQG,GAAOW,EAASqC,OAAQb,EAAGtC,OAC1DG,EAAM2C,EAAc3C,EAAKJ,GAI7B,MAAOI,GA4QX,QAASiD,GAAQxD,EAAGI,EAAGyC,EAAIY,GACvB,GAAIC,GAAIvD,EAAGwD,EAAIrD,EAAKC,CAKpB,IAHAsC,EAAW,MAANA,GAAcjC,EAAYiC,EAAI,EAAG,EAAGY,EAAQG,GACxC,EAALf,EAAS7B,GAEPhB,EAAEE,EAAI,MAAOF,GAAE6D,UAIrB,IAHAH,EAAK1D,EAAEE,EAAE,GACTyD,EAAK3D,EAAEG,EAEG,MAALC,EACDG,EAAM4C,EAAenD,EAAEE,GACvBK,EAAgB,IAAVkD,GAA0B,IAAVA,GAAsBK,GAANH,EAClCI,EAAexD,EAAKoD,GACpBT,EAAc3C,EAAKoD,OAevB,IAbA3D,EAAIc,EAAO,GAAIf,GAAUC,GAAII,EAAGyC,GAGhC1C,EAAIH,EAAEG,EAENI,EAAM4C,EAAenD,EAAEE,GACvBI,EAAMC,EAAIiB,OAOK,IAAViC,GAA0B,IAAVA,IAAuBtD,GAALC,GAAe0D,GAAL3D,GAAoB,CAGjE,KAAcC,EAANE,EAASC,GAAO,IAAKD,KAC7BC,EAAMwD,EAAexD,EAAKJ,OAQ1B,IAJAC,GAAKuD,EACLpD,EAAM2C,EAAc3C,EAAKJ,GAGpBA,EAAI,EAAIG,GACT,KAAOF,EAAI,EAAI,IAAMG,GAAO,IAAKH,IAAKG,GAAO,UAG7C,IADAH,GAAKD,EAAIG,EACJF,EAAI,EAEL,IADKD,EAAI,GAAKG,IAAMC,GAAO,KACnBH,IAAKG,GAAO,KAMpC,MAAOP,GAAEsB,EAAI,GAAKoC,EAAK,IAAMnD,EAAMA,EAKvC,QAASyD,GAAUC,EAAMC,GACrB,GAAIC,GAAGnE,EACHI,EAAI,CAKR,KAHKgE,EAASH,EAAK,MAAOA,EAAOA,EAAK,IACtCE,EAAI,GAAIpE,GAAWkE,EAAK,MAEd7D,EAAI6D,EAAKzC,QAAU,CAIzB,GAHAxB,EAAI,GAAID,GAAWkE,EAAK7D,KAGlBJ,EAAEsB,EAAI,CACR6C,EAAInE,CACJ,OACQkE,EAAOG,KAAMF,EAAGnE,KACxBmE,EAAInE,GAIZ,MAAOmE,GAQX,QAASG,GAAwBtE,EAAGuE,EAAKC,EAAKf,EAAQgB,GAMlD,OALSF,EAAJvE,GAAWA,EAAIwE,GAAOxE,GAAK0E,EAAS1E,KACrCW,EAAO8C,GAAUgB,GAAQ,mBACjBF,EAAJvE,GAAWA,EAAIwE,EAAM,gBAAkB,mBAAqBxE,IAG7D,EAQX,QAAS2E,GAAW3E,EAAGE,EAAGC,GAKtB,IAJA,GAAIC,GAAI,EACJwE,EAAI1E,EAAEsB,QAGDtB,IAAI0E,GAAI1E,EAAEkD,OAGnB,IAAMwB,EAAI1E,EAAE,GAAI0E,GAAK,GAAIA,GAAK,GAAIxE,KAkBlC,OAfOD,EAAIC,EAAID,EAAI+B,EAAW,GAAMF,EAGhChC,EAAEE,EAAIF,EAAEG,EAAI,KAGA8B,EAAJ9B,EAGRH,EAAEE,GAAMF,EAAEG,EAAI,IAEdH,EAAEG,EAAIA,EACNH,EAAEE,EAAIA,GAGHF,EAmDX,QAASW,GAAO8C,EAAQoB,EAAKC,GACzB,GAAIC,GAAQ,GAAIC,QACZ,gBACA,MACA,SACA,MACA,WACA,KACA,KACA,MACA,KACA,MACA,QACA,MACA,OACA,YACA,SACA,QACA,QACA,QACA,WACA,gBACA,UACA,WACA,aACA,MACA,cACA,WACA,aACFvB,GAAU,MAAQoB,EAAM,KAAOC,EAIjC,MAFAC,GAAMN,KAAO,kBACb5D,EAAK,EACCkE,EAQV,QAASjE,GAAON,EAAGyE,EAAIpC,EAAIJ,GACvB,GAAIF,GAAGnC,EAAGwE,EAAGpC,EAAGxC,EAAGkF,EAAIC,EACnBzC,EAAKlC,EAAEN,EACPkF,EAASC,CAGb,IAAI3C,EAAI,CAQJ4C,EAAK,CAGD,IAAM/C,EAAI,EAAGC,EAAIE,EAAG,GAAIF,GAAK,GAAIA,GAAK,GAAID,KAI1C,GAHAnC,EAAI6E,EAAK1C,EAGA,EAAJnC,EACDA,GAAK8B,EACL0C,EAAIK,EACJjF,EAAI0C,EAAIwC,EAAK,GAGbC,EAAKnF,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,MAIpC,IAFAM,EAAKK,GAAYnF,EAAI,GAAM8B,GAEtBgD,GAAMxC,EAAGlB,OAAS,CAEnB,IAAIiB,EASA,KAAM6C,EANN,MAAQ5C,EAAGlB,QAAU0D,EAAIxC,EAAGP,KAAK,IACjCnC,EAAImF,EAAK,EACT5C,EAAI,EACJnC,GAAK8B,EACL0C,EAAIxE,EAAI8B,EAAW,MAIpB,CAIH,IAHAlC,EAAIwC,EAAIE,EAAGwC,GAGL3C,EAAI,EAAGC,GAAK,GAAIA,GAAK,GAAID,KAG/BnC,GAAK8B,EAIL0C,EAAIxE,EAAI8B,EAAWK,EAGnB4C,EAAS,EAAJP,EAAQ,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,EAmBxD,GAfAnC,EAAIA,GAAU,EAALwC,GAKO,MAAdvC,EAAGwC,EAAK,KAAoB,EAAJN,EAAQ5E,EAAIA,EAAIoF,EAAQ7C,EAAIqC,EAAI,IAE1DnC,EAAS,EAALI,GACEsC,GAAM1C,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAClD6D,EAAK,GAAW,GAANA,IAAmB,GAANtC,GAAWJ,GAAW,GAANI,IAGnCzC,EAAI,EAAIwE,EAAI,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,GAAM,EAAIlC,EAAGwC,EAAK,IAAO,GAAO,GAClErC,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAElB,EAAL2D,IAAWvC,EAAG,GAiBf,MAhBAA,GAAGlB,OAAS,EAERiB,GAGAwC,GAAMzE,EAAEL,EAAI,EAGZuC,EAAG,GAAK0C,EAAQH,EAAK/C,GACrB1B,EAAEL,GAAK8E,GAAM,GAIbvC,EAAG,GAAKlC,EAAEL,EAAI,EAGXK,CAkBX,IAdU,GAALJ,GACDsC,EAAGlB,OAAS0D,EACZ1C,EAAI,EACJ0C,MAEAxC,EAAGlB,OAAS0D,EAAK,EACjB1C,EAAI4C,EAAQlD,EAAW9B,GAIvBsC,EAAGwC,GAAMN,EAAI,EAAIY,EAAWxF,EAAIoF,EAAQ7C,EAAIqC,GAAMQ,EAAOR,IAAOpC,EAAI,GAIpEC,EAEA,OAAY,CAGR,GAAW,GAANyC,EAAU,CAGX,IAAM9E,EAAI,EAAGwE,EAAIlC,EAAG,GAAIkC,GAAK,GAAIA,GAAK,GAAIxE,KAE1C,IADAwE,EAAIlC,EAAG,IAAMF,EACPA,EAAI,EAAGoC,GAAK,GAAIA,GAAK,GAAIpC,KAG1BpC,GAAKoC,IACNhC,EAAEL,IACGuC,EAAG,IAAM+C,IAAO/C,EAAG,GAAK,GAGjC,OAGA,GADAA,EAAGwC,IAAO1C,EACLE,EAAGwC,IAAOO,EAAO,KACtB/C,GAAGwC,KAAQ,EACX1C,EAAI,EAMhB,IAAMpC,EAAIsC,EAAGlB,OAAoB,IAAZkB,IAAKtC,GAAUsC,EAAGU,QAItC5C,EAAEL,EAAI6B,EACPxB,EAAEN,EAAIM,EAAEL,EAAI,KAGJK,EAAEL,EAAI8B,IACdzB,EAAEN,GAAMM,EAAEL,EAAI,IAItB,MAAOK,GAjzCX,GAAI6C,GAGAxC,EAAK,EACL6E,EAAI3F,EAAU4F,UACdC,EAAM,GAAI7F,GAAU,GAYpBgB,EAAiB,GAejBC,EAAgB,EAMhB8C,EAAa,GAIb+B,EAAa,GAMb5D,EAAU,KAKVD,EAAU,IAGVtB,GAAS,EAGTE,EAAa0D,EAGbwB,GAAS,EAoBTC,EAAc,EAIdhD,EAAgB,IAGhBiD,GACIC,iBAAkB,IAClBC,eAAgB,IAChBC,UAAW,EACXC,mBAAoB,EACpBC,uBAAwB,IACxBC,kBAAmB,EAk0E3B,OA/oEAvG,GAAUF,QAAUA,EAEpBE,EAAUwG,SAAW,EACrBxG,EAAUyG,WAAa,EACvBzG,EAAU0G,WAAa,EACvB1G,EAAU2G,YAAc,EACxB3G,EAAU4G,cAAgB,EAC1B5G,EAAU6G,gBAAkB,EAC5B7G,EAAU8G,gBAAkB,EAC5B9G,EAAU+G,gBAAkB,EAC5B/G,EAAUgH,iBAAmB,EAC7BhH,EAAUiH,OAAS,EAoCnBjH,EAAUkH,OAAS,WACf,GAAIC,GAAGC,EACH/G,EAAI,EACJqC,KACA2E,EAAIC,UACJC,EAAIF,EAAE,GACNG,EAAMD,GAAiB,gBAALA,GACd,WAAc,MAAKA,GAAEE,eAAeL,GAA4B,OAAdD,EAAII,EAAEH,IAA1C,QACd,WAAc,MAAKC,GAAE5F,OAASpB,EAA6B,OAAhB8G,EAAIE,EAAEhH,MAAnC,OA6GtB,OAxGKmH,GAAKJ,EAAI,mBAAsBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KAC1DpG,EAAqB,EAAJmG,GAErBzE,EAAE0E,GAAKpG,EAKFwG,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACvDnG,EAAoB,EAAJkG,GAEpBzE,EAAE0E,GAAKnG,EAMFuG,EAAKJ,EAAI,oBAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,EAAG,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACnErD,EAAoB,EAAPoD,EAAE,GACfrB,EAAoB,EAAPqB,EAAE,IAEXtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KACrCrD,IAAgB+B,EAAkC,GAAf,EAAJqB,GAASA,EAAIA,MAGpDzE,EAAE0E,IAAOrD,EAAY+B,GAOhB0B,EAAKJ,EAAI,WAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,GAAI,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACpElF,EAAiB,EAAPiF,EAAE,GACZlF,EAAiB,EAAPkF,EAAE,IAERtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KAC5B,EAAJD,EAAQjF,IAAaD,EAA+B,GAAf,EAAJkF,GAASA,EAAIA,IAC1CxG,GAAQC,EAAO,EAAGwG,EAAI,kBAAmBD,KAG1DzE,EAAE0E,IAAOlF,EAASD,GAIbuF,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBrG,EAAK,EACLD,GAAeF,IAAWwG,GAAM5C,EAAyBoD,GAClDhH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKzG,EAKF6G,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBpB,KAAaoB,IAAKU,GAA2B,gBAAVA,IAC9BV,IAAMpB,GAAUpF,GAASC,EAAO,EAAG,qBAAsBiH,IACvDlH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKrB,EAKFyB,EAAKJ,EAAI,gBAAmBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACrDpB,EAAkB,EAAJmB,GAElBzE,EAAE0E,GAAKpB,EAKFwB,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KACzDpE,EAAoB,EAAJmE,GAEpBzE,EAAE0E,GAAKpE,EAIFwE,EAAKJ,EAAI,YAEO,gBAALD,GACRlB,EAASkB,EACFxG,GACPC,EAAO,EAAGwG,EAAI,iBAAkBD,IAGxCzE,EAAE0E,GAAKnB,EAEAvD,GASX1C,EAAUyE,IAAM,WAAc,MAAOR,GAAUqD,UAAW3B,EAAEmC,KAQ5D9H,EAAUwE,IAAM,WAAc,MAAOP,GAAUqD,UAAW3B,EAAEoC,KAc5D/H,EAAUgI,OAAS,WACf,GAAIC,GAAU,iBAMVC,EAAkBC,KAAKH,SAAWC,EAAW,QAC7C,WAAc,MAAOxC,GAAW0C,KAAKH,SAAWC,IAChD,WAAc,MAA2C,UAAlB,WAAhBE,KAAKH,SAAwB,IACjC,QAAhBG,KAAKH,SAAsB,GAElC,OAAO,UAAUnF,GACb,GAAIwE,GAAGnH,EAAGE,EAAGqC,EAAG0E,EACZ9G,EAAI,EACJF,KACAiI,EAAO,GAAIpI,GAAU6F,EAKzB,IAHAhD,EAAW,MAANA,GAAehC,EAAYgC,EAAI,EAAG6E,EAAK,IAA6B,EAAL7E,EAAjB7B,EACnDyB,EAAI+C,EAAU3C,EAAKV,GAEf4D,EAGA,GAAK8B,GAAUA,EAAOQ,gBAAkB,CAIpC,IAFAhB,EAAIQ,EAAOQ,gBAAiB,GAAIC,aAAa7F,GAAK,IAEtCA,EAAJpC,GAQJ8G,EAAW,OAAPE,EAAEhH,IAAgBgH,EAAEhH,EAAI,KAAO,IAM9B8G,GAAK,MACNjH,EAAI2H,EAAOQ,gBAAiB,GAAIC,aAAY,IAC5CjB,EAAEhH,GAAKH,EAAE,GACTmH,EAAEhH,EAAI,GAAKH,EAAE,KAKbC,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MAGL,IAAKoF,GAAUA,EAAOU,YAAc,CAKvC,IAFAlB,EAAIQ,EAAOU,YAAa9F,GAAK,GAEjBA,EAAJpC,GAMJ8G,EAAsB,iBAAP,GAAPE,EAAEhH,IAA6C,cAAXgH,EAAEhH,EAAI,GAC/B,WAAXgH,EAAEhH,EAAI,GAAkC,SAAXgH,EAAEhH,EAAI,IACnCgH,EAAEhH,EAAI,IAAM,KAASgH,EAAEhH,EAAI,IAAM,GAAMgH,EAAEhH,EAAI,GAEhD8G,GAAK,KACNU,EAAOU,YAAY,GAAGC,KAAMnB,EAAGhH,IAI/BF,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MACD9B,IACPC,EAAO,GAAI,qBAAsBiH,EAKzC,KAAKxH,EAED,KAAYoC,EAAJpC,GACJ8G,EAAIe,IACK,KAAJf,IAAWhH,EAAEE,KAAO8G,EAAI,KAcrC,KAVA1E,EAAItC,IAAIE,GACRwC,GAAMV,EAGDM,GAAKI,IACNsE,EAAI7B,EAASnD,EAAWU,GACxB1C,EAAEE,GAAKoF,EAAWhD,EAAI0E,GAAMA,GAIf,IAAThH,EAAEE,GAAUF,EAAEkD,MAAOhD,KAG7B,GAAS,EAAJA,EACDF,GAAMC,EAAI,OACP,CAGH,IAAMA,EAAI,GAAc,IAATD,EAAE,GAAUA,EAAEsI,QAASrI,GAAK+B,GAG3C,IAAM9B,EAAI,EAAG8G,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAI9G,KAGhC8B,EAAJ9B,IAAeD,GAAK+B,EAAW9B,GAKxC,MAFA+H,GAAKhI,EAAIA,EACTgI,EAAKjI,EAAIA,EACFiI,MAqGf9E,EAAM,WAGF,QAASoF,GAAUjI,EAAGgC,EAAGkG,GACrB,GAAIvE,GAAGwE,EAAMC,EAAKC,EACdC,EAAQ,EACR1I,EAAII,EAAEgB,OACNuH,EAAMvG,EAAIwG,EACVC,EAAMzG,EAAIwG,EAAY,CAE1B,KAAMxI,EAAIA,EAAEW,QAASf,KACjBwI,EAAMpI,EAAEJ,GAAK4I,EACbH,EAAMrI,EAAEJ,GAAK4I,EAAY,EACzB7E,EAAI8E,EAAML,EAAMC,EAAME,EACtBJ,EAAOI,EAAMH,EAAUzE,EAAI6E,EAAcA,EAAcF,EACvDA,GAAUH,EAAOD,EAAO,IAAQvE,EAAI6E,EAAY,GAAMC,EAAMJ,EAC5DrI,EAAEJ,GAAKuI,EAAOD,CAKlB,OAFII,IAAOtI,EAAE8C,QAAQwF,GAEdtI,EAGX,QAAS0I,GAAS9B,EAAGnH,EAAGkJ,EAAIC,GACxB,GAAIhJ,GAAGiJ,CAEP,IAAKF,GAAMC,EACPC,EAAMF,EAAKC,EAAK,EAAI,OAGpB,KAAMhJ,EAAIiJ,EAAM,EAAOF,EAAJ/I,EAAQA,IAEvB,GAAKgH,EAAEhH,IAAMH,EAAEG,GAAK,CAChBiJ,EAAMjC,EAAEhH,GAAKH,EAAEG,GAAK,EAAI,EACxB,OAIZ,MAAOiJ,GAGX,QAASC,GAAUlC,EAAGnH,EAAGkJ,EAAIT,GAIzB,IAHA,GAAItI,GAAI,EAGA+I,KACJ/B,EAAE+B,IAAO/I,EACTA,EAAIgH,EAAE+B,GAAMlJ,EAAEkJ,GAAM,EAAI,EACxB/B,EAAE+B,GAAM/I,EAAIsI,EAAOtB,EAAE+B,GAAMlJ,EAAEkJ,EAIjC,OAAS/B,EAAE,IAAMA,EAAE5F,OAAS,EAAG4F,EAAEoB,UAIrC,MAAO,UAAWhI,EAAGmC,EAAGC,EAAIC,EAAI6F,GAC5B,GAAIW,GAAKlJ,EAAGC,EAAGmJ,EAAMvJ,EAAGwJ,EAAMC,EAAOC,EAAGC,EAAIC,EAAKC,EAAMC,EAAMC,EAAIC,EAAIC,EACjEC,EAAIC,EACJ7I,EAAId,EAAEc,GAAKqB,EAAErB,EAAI,EAAI,GACrBoB,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAGX,MAAMwC,GAAOA,EAAG,IAAO0H,GAAOA,EAAG,IAE7B,MAAO,IAAIrK,GAGRS,EAAEc,GAAMqB,EAAErB,IAAOoB,GAAK0H,GAAM1H,EAAG,IAAM0H,EAAG,GAAMA,GAG7C1H,GAAe,GAATA,EAAG,KAAY0H,EAAS,EAAJ9I,EAAQA,EAAI,EAHc+I,IAoB5D,KAbAX,EAAI,GAAI3J,GAAUuB,GAClBqI,EAAKD,EAAExJ,KACPC,EAAIK,EAAEL,EAAIwC,EAAExC,EACZmB,EAAIsB,EAAKzC,EAAI,EAEPuI,IACFA,EAAOjD,EACPtF,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDZ,EAAIA,EAAIY,EAAW,GAKjB9B,EAAI,EAAGgK,EAAGhK,KAAQsC,EAAGtC,IAAM,GAAKA,KAGtC,GAFKgK,EAAGhK,IAAOsC,EAAGtC,IAAM,IAAMD,IAErB,EAAJmB,EACDqI,EAAGxH,KAAK,GACRoH,GAAO,MACJ,CAwBH,IAvBAS,EAAKtH,EAAGlB,OACR0I,EAAKE,EAAG5I,OACRpB,EAAI,EACJkB,GAAK,EAILtB,EAAIwF,EAAWkD,GAAS0B,EAAG,GAAK,IAI3BpK,EAAI,IACLoK,EAAK3B,EAAU2B,EAAIpK,EAAG0I,GACtBhG,EAAK+F,EAAU/F,EAAI1C,EAAG0I,GACtBwB,EAAKE,EAAG5I,OACRwI,EAAKtH,EAAGlB,QAGZuI,EAAKG,EACLN,EAAMlH,EAAGvB,MAAO,EAAG+I,GACnBL,EAAOD,EAAIpI,OAGI0I,EAAPL,EAAWD,EAAIC,KAAU,GACjCM,EAAKC,EAAGjJ,QACRgJ,EAAG7G,QAAQ,GACX2G,EAAMG,EAAG,GACJA,EAAG,IAAM1B,EAAO,GAAIuB,GAIzB,GAAG,CAOC,GANAjK,EAAI,EAGJqJ,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,GAGjB,EAANR,EAAU,CAkBX,GAdAS,EAAOF,EAAI,GACNM,GAAML,IAAOC,EAAOA,EAAOpB,GAASkB,EAAI,IAAM,IAGnD5J,EAAIwF,EAAWsE,EAAOG,GAUjBjK,EAAI,EAeL,IAZIA,GAAK0I,IAAM1I,EAAI0I,EAAO,GAG1Bc,EAAOf,EAAU2B,EAAIpK,EAAG0I,GACxBe,EAAQD,EAAKhI,OACbqI,EAAOD,EAAIpI,OAOkC,GAArC0H,EAASM,EAAMI,EAAKH,EAAOI,IAC/B7J,IAGAsJ,EAAUE,EAAWC,EAALS,EAAaC,EAAKC,EAAIX,EAAOf,GAC7Ce,EAAQD,EAAKhI,OACb6H,EAAM,MAQA,IAALrJ,IAGDqJ,EAAMrJ,EAAI,GAIdwJ,EAAOY,EAAGjJ,QACVsI,EAAQD,EAAKhI,MAUjB,IAPaqI,EAARJ,GAAeD,EAAKlG,QAAQ,GAGjCgG,EAAUM,EAAKJ,EAAMK,EAAMnB,GAC3BmB,EAAOD,EAAIpI,OAGC,IAAP6H,EAMD,KAAQH,EAASkB,EAAIR,EAAKM,EAAIL,GAAS,GACnC7J,IAGAsJ,EAAUM,EAAUC,EAALK,EAAYC,EAAKC,EAAIP,EAAMnB,GAC1CmB,EAAOD,EAAIpI,WAGH,KAAR6H,IACRrJ,IACA4J,GAAO,GAIXD,GAAGvJ,KAAOJ,EAGL4J,EAAI,GACLA,EAAIC,KAAUnH,EAAGqH,IAAO,GAExBH,GAAQlH,EAAGqH,IACXF,EAAO,UAEHE,IAAOC,GAAgB,MAAVJ,EAAI,KAAgBtI,IAE7CiI,GAAiB,MAAVK,EAAI,GAGLD,EAAG,IAAKA,EAAGnB,QAGrB,GAAKE,GAAQjD,EAAO,CAGhB,IAAMrF,EAAI,EAAGkB,EAAIqI,EAAG,GAAIrI,GAAK,GAAIA,GAAK,GAAIlB,KAC1CU,EAAO4I,EAAG9G,GAAO8G,EAAEvJ,EAAIC,EAAID,EAAI+B,EAAW,GAAM,EAAGW,EAAI0G,OAIvDG,GAAEvJ,EAAIA,EACNuJ,EAAEjH,GAAK8G,CAGX,OAAOG,OAgJfrI,EAAe,WACX,GAAIkJ,GAAa,iBACbC,EAAW,cACXC,EAAY,cACZC,EAAkB,qBAClBC,EAAmB,mBAEvB,OAAO,UAAWnK,EAAGD,EAAKF,EAAKJ,GAC3B,GAAIyI,GACApH,EAAIjB,EAAME,EAAMA,EAAIgB,QAASoJ,EAAkB,GAGnD,IAAKD,EAAgBtJ,KAAKE,GACtBd,EAAEc,EAAIsJ,MAAMtJ,GAAK,KAAW,EAAJA,EAAQ,GAAK,MAClC,CACH,IAAMjB,IAGFiB,EAAIA,EAAEC,QAASgJ,EAAY,SAAWpG,EAAG0G,EAAIC,GAEzC,MADApC,GAAoC,MAA3BoC,EAAKA,EAAGhI,eAAyB,GAAW,KAANgI,EAAY,EAAI,EACvD7K,GAAKA,GAAKyI,EAAYvE,EAAL0G,IAGzB5K,IACAyI,EAAOzI,EAGPqB,EAAIA,EAAEC,QAASiJ,EAAU,MAAOjJ,QAASkJ,EAAW,SAGnDlK,GAAOe,GAAI,MAAO,IAAIvB,GAAWuB,EAAGoH,EAKzChI,IAAQC,EAAOE,EAAI,SAAYZ,EAAI,SAAWA,EAAI,IAAO,UAAWM,GACxEC,EAAEc,EAAI,KAGVd,EAAEN,EAAIM,EAAEL,EAAI,KACZU,EAAK,MAmNb6E,EAAEqF,cAAgBrF,EAAEsF,IAAM,WACtB,GAAIxK,GAAI,GAAIT,GAAUU,KAEtB,OADKD,GAAEc,EAAI,IAAId,EAAEc,EAAI,GACdd,GAQXkF,EAAEuF,KAAO,WACL,MAAOnK,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAWnDuF,EAAEwF,WAAaxF,EAAE2D,IAAM,SAAW1G,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAEyF,cAAgBzF,EAAE9C,GAAK,WACrB,GAAI5C,GAAGkH,EACHhH,EAAIO,KAAKP,CAEb,KAAMA,EAAI,MAAO,KAIjB,IAHAF,IAAQkH,EAAIhH,EAAEsB,OAAS,GAAM8I,EAAU7J,KAAKN,EAAI+B,IAAeA,EAG1DgF,EAAIhH,EAAEgH,GAAK,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9C,MAFS,GAAJA,IAAQA,EAAI,GAEVA,GAwBX0F,EAAE0F,UAAY1F,EAAErC,IAAM,SAAWV,EAAG1C,GAEhC,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAKc,EAAgBC,IAQ7D0E,EAAE2F,mBAAqB3F,EAAE4F,SAAW,SAAW3I,EAAG1C,GAE9C,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAK,EAAG,IAQhDyF,EAAE6F,OAAS7F,EAAE8F,GAAK,SAAW7I,EAAG1C,GAE5B,MADAY,GAAK,EAC6C,IAA3CqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAE+F,MAAQ,WACN,MAAO3K,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEgG,YAAchG,EAAEoC,GAAK,SAAWnF,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAEiG,qBAAuBjG,EAAEkG,IAAM,SAAWjJ,EAAG1C,GAE3C,MADAY,GAAK,EACqD,KAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAuB,IAANA,GAQnEyF,EAAEmG,SAAW,WACT,QAASpL,KAAKP,GAOlBwF,EAAEoG,UAAYpG,EAAEqG,MAAQ,WACpB,QAAStL,KAAKP,GAAKoK,EAAU7J,KAAKN,EAAI+B,GAAazB,KAAKP,EAAEsB,OAAS,GAOvEkE,EAAEkF,MAAQ,WACN,OAAQnK,KAAKa,GAOjBoE,EAAEsG,WAAatG,EAAEuG,MAAQ,WACrB,MAAOxL,MAAKa,EAAI,GAOpBoE,EAAEwG,OAAS,WACP,QAASzL,KAAKP,GAAkB,GAAbO,KAAKP,EAAE,IAQ9BwF,EAAEyG,SAAWzG,EAAEmC,GAAK,SAAWlF,EAAG1C,GAE9B,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAE0G,kBAAoB1G,EAAE2G,IAAM,SAAW1J,EAAG1C,GAExC,MADAY,GAAK,EACqD,MAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAwB,IAANA,GAwBpEyF,EAAE4G,MAAQ5G,EAAE6G,IAAM,SAAW5J,EAAG1C,GAC5B,GAAIG,GAAGwE,EAAG4H,EAAGC,EACTjM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGrC,IAAKjD,GAAKnH,EAEN,MADA0C,GAAErB,GAAKrB,EACAO,EAAEkM,KAAK/J,EAGlB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO1H,IAAOC,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAWqK,EAAK5J,EAAI6J,IAGxE,KAAM3H,EAAG,KAAO0H,EAAG,GAGf,MAAOA,GAAG,IAAOzH,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAW2C,EAAG,GAAKlC,EAGrC,GAAjBQ,GAAsB,EAAI,GASpC,GALA2L,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAaf,KAXKH,EAAW,EAAJrF,IACRA,GAAKA,EACLoF,EAAI9J,IAEJkK,EAAKD,EACLH,EAAIpC,GAGRoC,EAAEK,UAGI5M,EAAImH,EAAGnH,IAAKuM,EAAErK,KAAK,IACzBqK,EAAEK,cAMF,KAFAjI,GAAM6H,GAASrF,EAAI1E,EAAGlB,SAAavB,EAAImK,EAAG5I,SAAa4F,EAAInH,EAErDmH,EAAInH,EAAI,EAAO2E,EAAJ3E,EAAOA,IAEpB,GAAKyC,EAAGzC,IAAMmK,EAAGnK,GAAK,CAClBwM,EAAO/J,EAAGzC,GAAKmK,EAAGnK,EAClB,OAYZ,GANIwM,IAAMD,EAAI9J,EAAIA,EAAK0H,EAAIA,EAAKoC,EAAG7J,EAAErB,GAAKqB,EAAErB,GAE5CrB,GAAM2E,EAAIwF,EAAG5I,SAAapB,EAAIsC,EAAGlB,QAI5BvB,EAAI,EAAI,KAAQA,IAAKyC,EAAGtC,KAAO,GAIpC,IAHAH,EAAIwF,EAAO,EAGHb,EAAIwC,GAAK,CAEb,GAAK1E,IAAKkC,GAAKwF,EAAGxF,GAAK,CACnB,IAAMxE,EAAIwE,EAAGxE,IAAMsC,IAAKtC,GAAIsC,EAAGtC,GAAKH,KAClCyC,EAAGtC,GACLsC,EAAGkC,IAAMa,EAGb/C,EAAGkC,IAAMwF,EAAGxF,GAIhB,KAAiB,GAATlC,EAAG,GAASA,EAAG8F,UAAWoE,GAGlC,MAAMlK,GAAG,GAWFiC,EAAWhC,EAAGD,EAAIkK,IAPrBjK,EAAErB,EAAqB,GAAjBN,EAAqB,GAAK,EAChC2B,EAAEzC,GAAMyC,EAAExC,EAAI,GACPwC,IA8Bf+C,EAAEoH,OAASpH,EAAEqH,IAAM,SAAWpK,EAAG1C,GAC7B,GAAIyJ,GAAGpI,EACHd,EAAIC,IAMR,OAJAI,GAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAGhBO,EAAEN,IAAMyC,EAAErB,GAAKqB,EAAEzC,IAAMyC,EAAEzC,EAAE,GACtB,GAAIH,GAAUsK,MAGZ1H,EAAEzC,GAAKM,EAAEN,IAAMM,EAAEN,EAAE,GACrB,GAAIH,GAAUS,IAGL,GAAfuF,GAIDzE,EAAIqB,EAAErB,EACNqB,EAAErB,EAAI,EACNoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAG,GAClBA,EAAErB,EAAIA,EACNoI,EAAEpI,GAAKA,GAEPoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAGoD,GAGfvF,EAAE8L,MAAO5C,EAAEsD,MAAMrK,MAQ5B+C,EAAEuH,QAAUvH,EAAEwH,IAAM,WAChB,GAAI1M,GAAI,GAAIT,GAAUU,KAEtB,OADAD,GAAEc,GAAKd,EAAEc,GAAK,KACPd,GAwBXkF,EAAEgH,KAAOhH,EAAEyH,IAAM,SAAWxK,EAAG1C,GAC3B,GAAIuM,GACAhM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGpC,IAAKjD,GAAKnH,EAEP,MADA0C,GAAErB,GAAKrB,EACAO,EAAE8L,MAAM3J,EAGnB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO,IAAIrK,GAAWqH,EAAI,EAI5C,KAAM1E,EAAG,KAAO0H,EAAG,GAAK,MAAOA,GAAG,GAAKzH,EAAI,GAAI5C,GAAW2C,EAAG,GAAKlC,EAAQ,EAAJ4G,GAQ1E,GALAuF,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAUf,IATKxF,EAAI,GACLwF,EAAKD,EACLH,EAAIpC,IAEJhD,GAAKA,EACLoF,EAAI9J,GAGR8J,EAAEK,UACMzF,IAAKoF,EAAErK,KAAK,IACpBqK,EAAEK,UAUN,IAPAzF,EAAI1E,EAAGlB,OACPvB,EAAImK,EAAG5I,OAGM,EAAR4F,EAAInH,IAAQuM,EAAIpC,EAAIA,EAAK1H,EAAIA,EAAK8J,EAAGvM,EAAImH,GAGxCA,EAAI,EAAGnH,GACTmH,GAAM1E,IAAKzC,GAAKyC,EAAGzC,GAAKmK,EAAGnK,GAAKmH,GAAM3B,EAAO,EAC7C/C,EAAGzC,IAAMwF,CAUb,OAPI2B,KACA1E,EAAGY,QAAQ8D,KACTwF,GAKCjI,EAAWhC,EAAGD,EAAIkK,IAS7BlH,EAAE0H,UAAY1H,EAAET,GAAK,SAAUoI,GAC3B,GAAIrN,GAAGkH,EACH1G,EAAIC,KACJP,EAAIM,EAAEN,CAQV,IALU,MAALmN,GAAaA,MAAQA,GAAW,IAANA,GAAiB,IAANA,IAClC3M,GAAQC,EAAO,GAAI,WAAagH,EAAS0F,GACxCA,KAAOA,IAAIA,EAAI,QAGlBnN,EAAI,MAAO,KAIjB,IAHAgH,EAAIhH,EAAEsB,OAAS,EACfxB,EAAIkH,EAAIhF,EAAW,EAEdgF,EAAIhH,EAAEgH,GAAK,CAGZ,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9B,IAAMkH,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAIlH,MAKtC,MAFKqN,IAAK7M,EAAEL,EAAI,EAAIH,IAAIA,EAAIQ,EAAEL,EAAI,GAE3BH,GAiBX0F,EAAE5E,MAAQ,SAAW8B,EAAIC,GACrB,GAAI7C,GAAI,GAAID,GAAUU,KAOtB,QALW,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACvC3G,EAAOd,IAAK4C,EAAKnC,KAAKN,EAAI,EAAS,MAAN0C,GAC1BjC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,GAG3ChB,GAgBX0F,EAAE8C,MAAQ,SAAUhG,GAChB,GAAIxC,GAAIS,IACR,OAAOG,GAAY4B,GAAI8K,EAAkBA,EAAkB,GAAI,YAG3DtN,EAAEgN,MAAO,KAAOtI,EAASlC,IACzB,GAAIzC,GAAWC,EAAEE,GAAKF,EAAEE,EAAE,MAAaoN,EAAL9K,GAAyBA,EAAI8K,GAC7DtN,EAAEsB,GAAU,EAAJkB,EAAQ,EAAI,EAAI,GACxBxC,IAeV0F,EAAE6H,WAAa7H,EAAE8H,KAAO,WACpB,GAAIrJ,GAAGnE,EAAGyC,EAAGgL,EAAKjB,EACdhM,EAAIC,KACJP,EAAIM,EAAEN,EACNoB,EAAId,EAAEc,EACNnB,EAAIK,EAAEL,EACNyC,EAAK7B,EAAiB,EACtB2M,EAAO,GAAI3N,GAAU,MAGzB,IAAW,IAANuB,IAAYpB,IAAMA,EAAE,GACrB,MAAO,IAAIH,IAAYuB,GAAS,EAAJA,KAAYpB,GAAKA,EAAE,IAAOmK,IAAMnK,EAAIM,EAAI,EAAI,EA8B5E,IA1BAc,EAAI4G,KAAKsF,MAAOhN,GAIN,GAALc,GAAUA,GAAK,EAAI,GACpBtB,EAAImD,EAAcjD,IACXF,EAAEwB,OAASrB,GAAM,GAAK,IAAIH,GAAK,KACtCsB,EAAI4G,KAAKsF,KAAKxN,GACdG,EAAImK,GAAYnK,EAAI,GAAM,IAAY,EAAJA,GAASA,EAAI,GAE1CmB,GAAK,EAAI,EACVtB,EAAI,KAAOG,GAEXH,EAAIsB,EAAEyC,gBACN/D,EAAIA,EAAEmB,MAAO,EAAGnB,EAAE6B,QAAQ,KAAO,GAAM1B,GAG3CsC,EAAI,GAAI1C,GAAUC,IAElByC,EAAI,GAAI1C,GAAWuB,EAAI,IAOtBmB,EAAEvC,EAAE,GAML,IALAC,EAAIsC,EAAEtC,EACNmB,EAAInB,EAAIyC,EACC,EAAJtB,IAAQA,EAAI,KAOb,GAHAkL,EAAI/J,EACJA,EAAIiL,EAAKV,MAAOR,EAAEE,KAAMrJ,EAAK7C,EAAGgM,EAAG5J,EAAI,KAElCO,EAAeqJ,EAAEtM,GAAMiB,MAAO,EAAGG,MAAUtB,EAC3CmD,EAAeV,EAAEvC,IAAMiB,MAAO,EAAGG,GAAM,CAWxC,GANKmB,EAAEtC,EAAIA,KAAMmB,EACjBtB,EAAIA,EAAEmB,MAAOG,EAAI,EAAGA,EAAI,GAKd,QAALtB,IAAgByN,GAAY,QAALzN,GAgBrB,IAIIA,KAAOA,EAAEmB,MAAM,IAAqB,KAAfnB,EAAEuD,OAAO,MAGjCzC,EAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAG,GACpCoD,GAAK1B,EAAEuK,MAAMvK,GAAG+I,GAAGhL,GAGvB,OAvBA,IAAMiN,IACF3M,EAAO0L,EAAGA,EAAErM,EAAIY,EAAiB,EAAG,GAE/ByL,EAAEQ,MAAMR,GAAGhB,GAAGhL,IAAK,CACpBiC,EAAI+J,CACJ,OAIR5J,GAAM,EACNtB,GAAK,EACLmM,EAAM,EAkBtB,MAAO3M,GAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAGC,EAAemD,IAwB9DuB,EAAEsH,MAAQtH,EAAEiI,IAAM,SAAWhL,EAAG1C,GAC5B,GAAIC,GAAGC,EAAGC,EAAGwE,EAAGpC,EAAG2B,EAAGyJ,EAAKhF,EAAKC,EAAKgF,EAAKC,EAAKC,EAAKC,EAChDtF,EAAMuF,EACNzN,EAAIC,KACJiC,EAAKlC,EAAEN,EACPkK,GAAOvJ,EAAK,GAAI8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAAMC,CAGhD,MAAMwC,GAAO0H,GAAO1H,EAAG,IAAO0H,EAAG,IAmB7B,OAhBM5J,EAAEc,IAAMqB,EAAErB,GAAKoB,IAAOA,EAAG,KAAO0H,GAAMA,IAAOA,EAAG,KAAO1H,EACzDC,EAAEzC,EAAIyC,EAAExC,EAAIwC,EAAErB,EAAI,MAElBqB,EAAErB,GAAKd,EAAEc,EAGHoB,GAAO0H,GAKTzH,EAAEzC,GAAK,GACPyC,EAAExC,EAAI,GALNwC,EAAEzC,EAAIyC,EAAExC,EAAI,MASbwC,CAYX,KATAxC,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDS,EAAErB,GAAKd,EAAEc,EACTsM,EAAMlL,EAAGlB,OACTqM,EAAMzD,EAAG5I,OAGEqM,EAAND,IAAYI,EAAKtL,EAAIA,EAAK0H,EAAIA,EAAK4D,EAAI5N,EAAIwN,EAAKA,EAAMC,EAAKA,EAAMzN,GAGhEA,EAAIwN,EAAMC,EAAKG,KAAS5N,IAAK4N,EAAG7L,KAAK,IAK3C,IAHAuG,EAAOjD,EACPwI,EAAWjF,EAEL5I,EAAIyN,IAAOzN,GAAK,GAAK,CAKvB,IAJAF,EAAI,EACJ4N,EAAM1D,EAAGhK,GAAK6N,EACdF,EAAM3D,EAAGhK,GAAK6N,EAAW,EAEnBzL,EAAIoL,EAAKhJ,EAAIxE,EAAIoC,EAAGoC,EAAIxE,GAC1BwI,EAAMlG,IAAKF,GAAKyL,EAChBpF,EAAMnG,EAAGF,GAAKyL,EAAW,EACzB9J,EAAI4J,EAAMnF,EAAMC,EAAMiF,EACtBlF,EAAMkF,EAAMlF,EAAUzE,EAAI8J,EAAaA,EAAaD,EAAGpJ,GAAK1E,EAC5DA,GAAM0I,EAAMF,EAAO,IAAQvE,EAAI8J,EAAW,GAAMF,EAAMlF,EACtDmF,EAAGpJ,KAAOgE,EAAMF,CAGpBsF,GAAGpJ,GAAK1E,EASZ,MANIA,KACEC,EAEF6N,EAAGxF,QAGA7D,EAAWhC,EAAGqL,EAAI7N,IAgB7BuF,EAAEwI,SAAW,SAAWjJ,EAAIpC,GACxB,GAAI7C,GAAI,GAAID,GAAUU,KAGtB,OAFAwE,GAAW,MAANA,GAAerE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aAA4B,EAALxC,EAAP,KAChEpC,EAAW,MAANA,GAAejC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,EACxDiE,EAAKnE,EAAOd,EAAGiF,EAAIpC,GAAO7C,GAgBrC0F,EAAE3B,cAAgB,SAAWnB,EAAIC,GAC7B,MAAOW,GAAQ/C,KACP,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MAAS7E,EAAK,EAAI,KAAMC,EAAI,KAmBxE6C,EAAEyI,QAAU,SAAWvL,EAAIC,GACvB,MAAOW,GAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACrD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,KA0BtC6C,EAAE0I,SAAW,SAAWxL,EAAIC,GACxB,GAAItC,GAAMiD,EAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACxD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,GAElC,IAAKpC,KAAKP,EAAI,CACV,GAAIE,GACAiO,EAAM9N,EAAI+N,MAAM,KAChBC,GAAMvI,EAAOG,UACbqI,GAAMxI,EAAOI,mBACbF,EAAiBF,EAAOE,eACxBuI,EAAUJ,EAAI,GACdK,EAAeL,EAAI,GACnBpC,EAAQxL,KAAKa,EAAI,EACjBqN,EAAY1C,EAAQwC,EAAQtN,MAAM,GAAKsN,EACvCnO,EAAMqO,EAAUnN,MAIpB,IAFIgN,IAAIpO,EAAImO,EAAIA,EAAKC,EAAIA,EAAKpO,EAAGE,GAAOF,GAEnCmO,EAAK,GAAKjO,EAAM,EAAI,CAIrB,IAHAF,EAAIE,EAAMiO,GAAMA,EAChBE,EAAUE,EAAUC,OAAQ,EAAGxO,GAEnBE,EAAJF,EAASA,GAAKmO,EAClBE,GAAWvI,EAAiByI,EAAUC,OAAQxO,EAAGmO,EAGhDC,GAAK,IAAIC,GAAWvI,EAAiByI,EAAUxN,MAAMf,IACtD6L,IAAOwC,EAAU,IAAMA,GAG/BlO,EAAMmO,EACFD,EAAUzI,EAAOC,mBAAuBuI,GAAMxI,EAAOM,mBACnDoI,EAAanN,QAAS,GAAIN,QAAQ,OAASuN,EAAK,OAAQ,KACxD,KAAOxI,EAAOK,wBACdqI,GACFD,EAGR,MAAOlO,IAgBXmF,EAAEmJ,WAAa,SAAUC,GACrB,GAAIT,GAAKU,EAAIC,EAAI7O,EAAG8O,EAAKjP,EAAGkP,EAAIxF,EAAGpI,EAC/BkB,EAAI9B,EACJF,EAAIC,KACJiC,EAAKlC,EAAEN,EACPqC,EAAI,GAAIxC,GAAU6F,GAClBuJ,EAAKJ,EAAK,GAAIhP,GAAU6F,GACxBwJ,EAAKF,EAAK,GAAInP,GAAU6F,EAoB5B,IAlBW,MAANkJ,IACDpO,GAAS,EACTV,EAAI,GAAID,GAAU+O,GAClBpO,EAAS8B,KAEDA,EAAIxC,EAAE+L,UAAa/L,EAAE6H,GAAGjC,MAExBlF,GACAC,EAAO,GACL,oBAAuB6B,EAAI,eAAiB,kBAAoBsM,GAKtEA,GAAMtM,GAAKxC,EAAEE,GAAKY,EAAOd,EAAGA,EAAEG,EAAI,EAAG,GAAIyL,IAAIhG,GAAO5F,EAAI,QAI1D0C,EAAK,MAAOlC,GAAEqD,UAgBpB,KAfAvC,EAAI6B,EAAcT,GAIlBvC,EAAIoC,EAAEpC,EAAImB,EAAEE,OAAShB,EAAEL,EAAI,EAC3BoC,EAAErC,EAAE,GAAKmF,GAAY4J,EAAM9O,EAAI+B,GAAa,EAAIA,EAAW+M,EAAMA,GACjEH,GAAMA,GAAM9O,EAAEqJ,IAAI9G,GAAK,EAAMpC,EAAI,EAAIoC,EAAI4M,EAAOnP,EAEhDiP,EAAMjN,EACNA,EAAU,EAAI,EACdhC,EAAI,GAAID,GAAUuB,GAGlB4N,EAAGhP,EAAE,GAAK,EAGNwJ,EAAIrG,EAAKrD,EAAGuC,EAAG,EAAG,GAClByM,EAAKD,EAAGrC,KAAMhD,EAAEsD,MAAMoC,IACH,GAAdJ,EAAG3F,IAAIyF,IACZC,EAAKK,EACLA,EAAKJ,EACLG,EAAKD,EAAGxC,KAAMhD,EAAEsD,MAAOgC,EAAKG,IAC5BD,EAAKF,EACLzM,EAAIvC,EAAEsM,MAAO5C,EAAEsD,MAAOgC,EAAKzM,IAC3BvC,EAAIgP,CAgBR,OAbAA,GAAK3L,EAAKyL,EAAGxC,MAAMyC,GAAKK,EAAI,EAAG,GAC/BF,EAAKA,EAAGxC,KAAMsC,EAAGhC,MAAMmC,IACvBJ,EAAKA,EAAGrC,KAAMsC,EAAGhC,MAAMoC,IACvBF,EAAG5N,EAAI6N,EAAG7N,EAAId,EAAEc,EAChBnB,GAAK,EAGLkO,EAAMhL,EAAK8L,EAAIC,EAAIjP,EAAGa,GAAgBsL,MAAM9L,GAAGwK,MAAM3B,IAC/ChG,EAAK6L,EAAIH,EAAI5O,EAAGa,GAAgBsL,MAAM9L,GAAGwK,OAAU,GAC7CmE,EAAGtL,WAAYuL,EAAGvL,aAClBqL,EAAGrL,WAAYkL,EAAGlL,YAE9B7B,EAAUiN,EACHZ,GAOX3I,EAAE2J,SAAW,WACT,GAAI7O,GAAIC,IAGR,QAAQD,IAAOA,EAAEc,EAAU,EAANd,EAAEc,EAAQ+I,MAenC3E,EAAE4J,QAAU5J,EAAE1C,IAAM,SAAUhD,GAC1B,GAAIwC,GAAGG,EACHvC,EAAIoF,EAAe,EAAJxF,GAASA,GAAKA,GAC7BQ,EAAIC,IAGR,KAAMG,EAAYZ,GAAIsN,EAAkBA,EAAkB,GAAI,eACzDzB,SAAS7L,IAAMI,EAAIkN,IAAsBtN,GAAK,IAC/CuP,WAAWvP,IAAMA,KAAQA,EAAIqK,MAC7B,MAAO,IAAItK,GAAWmI,KAAKlF,KAAMxC,EAAGR,GASxC,KAHAwC,EAAIO,EAAgBwC,EAAUxC,EAAgBb,EAAW,GAAM,EAC/DS,EAAI,GAAI5C,GAAU6F,KAEN,CAER,GAAKxF,EAAI,EAAI,CAET,GADAuC,EAAIA,EAAEqK,MAAMxM,IACNmC,EAAEzC,EAAI,KACPsC,IAAKG,EAAEzC,EAAEsB,OAASgB,IAAIG,EAAEzC,EAAEsB,OAASgB,GAI5C,GADApC,EAAIoF,EAAWpF,EAAI,IACbA,EAAI,KAEVI,GAAIA,EAAEwM,MAAMxM,GACPgC,GAAKhC,EAAEN,GAAKM,EAAEN,EAAEsB,OAASgB,IAAIhC,EAAEN,EAAEsB,OAASgB,GAInD,MADS,GAAJxC,IAAQ2C,EAAIiD,EAAIvC,IAAIV,IAClBH,EAAI1B,EAAO6B,EAAGI,EAAe/B,GAAkB2B,GAkB1D+C,EAAE8J,YAAc,SAAWvK,EAAIpC,GAC3B,MAAOW,GAAQ/C,KAAY,MAANwE,GAAcrE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aACtD,EAALxC,EAAS,KAAMpC,EAAI,KAgB3B6C,EAAE7B,SAAW,SAAU5D,GACnB,GAAIM,GACAP,EAAIS,KACJa,EAAItB,EAAEsB,EACNnB,EAAIH,EAAEG,CAyBV,OAtBW,QAANA,EAEGmB,GACAf,EAAM,WACG,EAAJe,IAAQf,EAAM,IAAMA,IAEzBA,EAAM,OAGVA,EAAM4C,EAAenD,EAAEE,GAOnBK,EALM,MAALN,GAAcW,EAAYX,EAAG,EAAG,GAAI,GAAI,QAKnC0B,EAAauB,EAAc3C,EAAKJ,GAAS,EAAJF,EAAO,GAAIqB,GAJ3CwC,GAAL3D,GAAmBA,GAAK0F,EAC1B9B,EAAexD,EAAKJ,GACpB+C,EAAc3C,EAAKJ,GAKlB,EAAJmB,GAAStB,EAAEE,EAAE,KAAKK,EAAM,IAAMA,IAGhCA,GAQXmF,EAAE+J,UAAY/J,EAAEgK,MAAQ,WACpB,MAAO5O,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEiK,QAAUjK,EAAEkK,OAAS,WACnB,MAAOnP,MAAKoD,YAcE,MAAb/D,GAAoBC,EAAUkH,OAAOnH,GAEnCC,EAOX,QAASuK,GAAStK,GACd,GAAII,GAAQ,EAAJJ,CACR,OAAOA,GAAI,GAAKA,IAAMI,EAAIA,EAAIA,EAAI,EAKtC,QAAS+C,GAAciE,GAMnB,IALA,GAAI9F,GAAG+L,EACHjN,EAAI,EACJwE,EAAIwC,EAAE5F,OACNiB,EAAI2E,EAAE,GAAK,GAEHxC,EAAJxE,GAAS,CAGb,IAFAkB,EAAI8F,EAAEhH,KAAO,GACbiN,EAAInL,EAAWZ,EAAEE,OACT6L,IAAK/L,EAAI,IAAMA,GACvBmB,GAAKnB,EAIT,IAAMsD,EAAInC,EAAEjB,OAA8B,KAAtBiB,EAAEf,aAAakD,KACnC,MAAOnC,GAAEtB,MAAO,EAAGyD,EAAI,GAAK,GAKhC,QAASsE,GAAS1I,EAAGmC,GACjB,GAAIyE,GAAGnH,EACHyC,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,EACPE,EAAII,EAAEc,EACNsD,EAAIjC,EAAErB,EACNkB,EAAIhC,EAAEL,EACN0P,EAAIlN,EAAExC,CAGV,KAAMC,IAAMwE,EAAI,MAAO,KAMvB,IAJAwC,EAAI1E,IAAOA,EAAG,GACdzC,EAAImK,IAAOA,EAAG,GAGThD,GAAKnH,EAAI,MAAOmH,GAAInH,EAAI,GAAK2E,EAAIxE,CAGtC,IAAKA,GAAKwE,EAAI,MAAOxE,EAMrB,IAJAgH,EAAQ,EAAJhH,EACJH,EAAIuC,GAAKqN,GAGHnN,IAAO0H,EAAK,MAAOnK,GAAI,GAAKyC,EAAK0E,EAAI,EAAI,EAG/C,KAAMnH,EAAI,MAAOuC,GAAIqN,EAAIzI,EAAI,EAAI,EAKjC,KAHAxC,GAAMpC,EAAIE,EAAGlB,SAAaqO,EAAIzF,EAAG5I,QAAWgB,EAAIqN,EAG1CzP,EAAI,EAAOwE,EAAJxE,EAAOA,IAAM,GAAKsC,EAAGtC,IAAMgK,EAAGhK,GAAK,MAAOsC,GAAGtC,GAAKgK,EAAGhK,GAAKgH,EAAI,EAAI,EAG/E,OAAO5E,IAAKqN,EAAI,EAAIrN,EAAIqN,EAAIzI,EAAI,EAAI,GASxC,QAASM,GAAsB1H,EAAGuE,EAAKC,GACnC,OAASxE,EAAI0E,EAAS1E,KAAQuE,GAAYC,GAALxE,EAIzC,QAASoE,GAAQ0L,GACb,MAA8C,kBAAvCC,OAAOpK,UAAU9B,SAASQ,KAAKyL,GAS1C,QAAS7M,GAAW1C,EAAK8B,EAAQD,GAO7B,IANA,GAAIwC,GAEAoL,EADA3B,GAAO,GAEPjO,EAAI,EACJE,EAAMC,EAAIiB,OAEFlB,EAAJF,GAAW,CACf,IAAM4P,EAAO3B,EAAI7M,OAAQwO,IAAQ3B,EAAI2B,IAAS3N,GAG9C,IAFAgM,EAAKzJ,EAAI,IAAO1D,EAASW,QAAStB,EAAIgD,OAAQnD,MAEtCwE,EAAIyJ,EAAI7M,OAAQoD,IAEfyJ,EAAIzJ,GAAKxC,EAAU,IACD,MAAdiM,EAAIzJ,EAAI,KAAayJ,EAAIzJ,EAAI,GAAK,GACvCyJ,EAAIzJ,EAAI,IAAMyJ,EAAIzJ,GAAKxC,EAAU,EACjCiM,EAAIzJ,IAAMxC,GAKtB,MAAOiM,GAAIxB,UAIf,QAAS9I,GAAexD,EAAKJ,GACzB,OAASI,EAAIiB,OAAS,EAAIjB,EAAIgD,OAAO,GAAK,IAAMhD,EAAIY,MAAM,GAAKZ,IACvD,EAAJJ,EAAQ,IAAM,MAASA,EAI/B,QAAS+C,GAAc3C,EAAKJ,GACxB,GAAIG,GAAK+M,CAGT,IAAS,EAAJlN,EAAQ,CAGT,IAAMkN,EAAI,OAAQlN,EAAGkN,GAAK,KAC1B9M,EAAM8M,EAAI9M,MAOV,IAHAD,EAAMC,EAAIiB,SAGHrB,EAAIG,EAAM,CACb,IAAM+M,EAAI,IAAKlN,GAAKG,IAAOH,EAAGkN,GAAK,KACnC9M,GAAO8M,MACK/M,GAAJH,IACRI,EAAMA,EAAIY,MAAO,EAAGhB,GAAM,IAAMI,EAAIY,MAAMhB,GAIlD,OAAOI,GAIX,QAASmE,GAAS1E,GAEd,MADAA,GAAIuP,WAAWvP,GACJ,EAAJA,EAAQuF,EAASvF,GAAKwF,EAAUxF,GAtlF3C,GAAID,GAAW6H,EAAQvG,EACnBO,EAAY,uCACZ2D,EAAW2C,KAAK+C,KAChBzF,EAAY0C,KAAKuD,MACjB9D,EAAU,iCACV/D,EAAe,gBACfnC,EAAgB,kDAChBP,EAAW,mEACXuE,EAAO,KACPvD,EAAW,GACXoL,EAAmB,iBAEnBjI,GAAY,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAC7E2D,EAAY,IAOZvB,EAAM,GA4kFV,IAHA1H,EAAYF,IAGU,kBAAVoQ,SAAwBA,OAAOC,IACvCD,OAAQ,WAAc,MAAOlQ,SAG1B,IAAsB,mBAAVoQ,SAAyBA,OAAOC,SAE/C,GADAD,OAAOC,QAAUrQ,GACX6H,EAAS,IAAMA,EAASyI,QAAQ,UAAa,MAAOlQ,SAI1DP,GAAOG,UAAYA,GAExBU"} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.min.js b/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.min.js deleted file mode 100644 index 70a1216..0000000 --- a/node_modules/web3-provider-engine/node_modules/bignumber.js/bignumber.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ -!function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,k);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+O.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,b,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&L(M,b,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=k;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=O.charAt(g[d++]));e=l(e,u)}return e}function _(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:k,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&B>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||B>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function x(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[n%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==N&&(a[0]=1));break}if(a[l]+=s,a[l]!=N)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(k=0|e),r[n]=k,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(B=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(B=-($=0|(0>e?-e:e)))),r[n]=[B,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?F:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h||"object"!=typeof h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return x(arguments,T.lt)},a.min=function(){return x(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,b,O,S,R,A,E,D,_,x,F=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*F:F/0:0/0);for(v=new a(F),b=v.c=[],c=i.e-o.e,F=u+c+1,f||(f=N,c=t(i.e/y)-t(o.e/y),F=F/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>F)b.push(1),g=!0;else{for(E=I.length,_=L.length,h=0,F+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),_=L.length,E=I.length),A=_,O=I.slice(0,_),S=O.length;_>S;O[S++]=0);x=L.slice(),x.unshift(0),D=L[0],L[1]>=f/2&&D++;do{if(p=0,l=n(L,O,_,S),0>l){if(R=O[0],_!=S&&(R=R*f+(O[1]||0)),p=m(R/D),p>1)for(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=O.length;1==n(d,O,w,S);)p--,r(d,w>_?x:L,w,f),w=d.length,l=1;else 0==p&&(l=p=1),d=L.slice(),w=d.length;if(S>w&&d.unshift(0),r(O,d,S,f),S=O.length,-1==l)for(;n(L,O,_,S)<1;)p++,r(O,S>_?x:L,S,f),S=O.length}else 0===l&&(p++,O=[0]);b[h++]=p,O[0]?O[S++]=I[A]||0:(O=[I[A]],S=1)}while((A++=10;F/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,k)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(0/0);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:0/0);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==k?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=N-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/N|0,f[n]%=N;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:k),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?0/0:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=O,O=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=N,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=O[--s]%v,h=O[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:k,e?U(t,e,n):t},T.toExponential=function(e,n){return _(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return _(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=_(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,k).minus(g).abs().cmp(C(f,t,o,k).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){var e=this;return+e||(e.s?0*e.s:0/0)},T.toPower=T.pow=function(e){var n,t,r=m(0>e?-e:+e),i=this;if(!H(e,-S,S,23,"exponent")&&(!isFinite(e)||r>S&&(e/=0)||parseFloat(e)!=e&&!(e=0/0)))return new a(Math.pow(+i,e));for(n=J?d(J/y+2):0,t=new a(q);;){if(r%2){if(t=t.times(i),!t.c)break;n&&t.c.length>n&&(t.c.length=n)}if(r=m(r/2),!r)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>e&&(t=q.div(t)),n?U(t,J,k):t},T.toPrecision=function(e,n){return _(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):B>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=O.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",b="number type has more than 15 significant digits",O="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",N=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if(a=n(),"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e.BigNumber=a}(this); -//# sourceMappingURL=bignumber.js.map \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/bignumber.js/bower.json b/node_modules/web3-provider-engine/node_modules/bignumber.js/bower.json deleted file mode 100644 index 8aadebb..0000000 --- a/node_modules/web3-provider-engine/node_modules/bignumber.js/bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "bignumber.js", - "main": "bignumber.js", - "version": "2.0.7", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "authors": [ - "Michael Mclaughlin " - ], - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "ignore": [ - ".*", - "*.json", - "test" - ] -} - diff --git a/node_modules/web3-provider-engine/node_modules/bignumber.js/doc/API.html b/node_modules/web3-provider-engine/node_modules/bignumber.js/doc/API.html deleted file mode 100644 index e0b173f..0000000 --- a/node_modules/web3-provider-engine/node_modules/bignumber.js/doc/API.html +++ /dev/null @@ -1,2160 +0,0 @@ - - - - - - -bignumber.js API - - - - -

      - -
      - -

      bignumber.js

      - -

      A JavaScript library for arbitrary-precision arithmetic.

      -

      Hosted on GitHub.

      - -

      API

      - -

      - See the README on GitHub for a - quick-start introduction. -

      -

      - In all examples below, var and semicolons are not shown, and if a commented-out - value is in quotes it means toString has been called on the preceding expression. -

      - - -

      CONSTRUCTOR

      - -
      - BigNumberBigNumber(value [, base]) ⇒ BigNumber -
      -
      -
      value
      -
      - number|string|BigNumber: see RANGE for - range. -
      -
      - A numeric value. -
      -
      - Legitimate values include ±0, ±Infinity and - NaN. -
      -
      - Values of type number with more than 15 significant digits are - considered invalid (if ERRORS is true) as calling - toString or valueOf on - such numbers may not result in the intended value. -
      console.log( 823456789123456.3 );    // 823456789123456.2
      -
      -
      - There is no limit to the number of digits of a value of type string (other than - that of JavaScript's maximum array size). -
      -
      - Decimal string values may be in exponential, as well as normal (fixed-point) notation. - Non-decimal values must be in normal notation. -
      -
      - String values in hexadecimal literal form, e.g. '0xff', are valid, as are - string values with the octal and binary prefixs '0o' and '0b'. - String values in octal literal form without the prefix will be interpreted as - decimals, e.g. '011' is interpreted as 11, not 9. -
      -
      Values in any base may have fraction digits.
      -
      - For bases from 10 to 36, lower and/or upper case letters can be - used to represent values from 10 to 35. -
      -
      - For bases above 36, a-z represents values from 10 to - 35, A-Z from 36 to 61, and - $ and _ represent 62 and 63 respectively - (this can be changed by editing the ALPHABET variable near the top of the - source file). -
      -
      -
      -
      base
      -
      - number: integer, 2 to 64 inclusive -
      -
      The base of value.
      -
      - If base is omitted, or is null or undefined, base - 10 is assumed. -
      -
      -
      -

      Returns a new instance of a BigNumber object.

      -

      - If a base is specified, the value is rounded according to - the current DECIMAL_PLACES and - ROUNDING_MODE configuration. -

      -

      - See Errors for the treatment of an invalid value or - base. -

      -
      -x = new BigNumber(9)                       // '9'
      -y = new BigNumber(x)                       // '9'
      -
      -// 'new' is optional if ERRORS is false
      -BigNumber(435.345)                         // '435.345'
      -
      -new BigNumber('5032485723458348569331745.33434346346912144534543')
      -new BigNumber('4.321e+4')                  // '43210'
      -new BigNumber('-735.0918e-430')            // '-7.350918e-428'
      -new BigNumber(Infinity)                    // 'Infinity'
      -new BigNumber(NaN)                         // 'NaN'
      -new BigNumber('.5')                        // '0.5'
      -new BigNumber('+2')                        // '2'
      -new BigNumber(-10110100.1, 2)              // '-180.5'
      -new BigNumber(-0b10110100.1)               // '-180.5'
      -new BigNumber('123412421.234324', 5)       // '607236.557696'
      -new BigNumber('ff.8', 16)                  // '255.5'
      -new BigNumber('0xff.8')                    // '255.5'
      -

      - The following throws 'not a base 2 number' if - ERRORS is true, otherwise it returns a BigNumber with value - NaN. -

      -
      new BigNumber(9, 2)
      -

      - The following throws 'number type has more than 15 significant digits' if - errors is true, otherwise it returns a BigNumber with value - 96517860459076820. -

      -
      new BigNumber(96517860459076817.4395)
      -

      - The following throws 'not a number' if ERRORS - is true, otherwise it returns a BigNumber with value NaN. -

      -
      new BigNumber('blurgh')
      -

      - A value is only rounded by the constructor if a base is specified. -

      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -new BigNumber(1.23456789)                  // '1.23456789'
      -new BigNumber(1.23456789, 10)              // '1.23457'
      - - - -

      Methods

      -

      The static methods of a BigNumber constructor.

      - - - - -
      - another.another([obj]) ⇒ BigNumber constructor -
      -

      obj: object

      -

      - Returns a new independent BigNumber constructor with configuration as described by - obj (see config), or with the default - configuration if obj is null or undefined. -

      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -BN = BigNumber.another({ DECIMAL_PLACES: 9 })
      -
      -x = new BigNumber(1)
      -y = new BN(1)
      -
      -x.div(3)                        // 0.33333
      -y.div(3)                        // 0.333333333
      -
      -// BN = BigNumber.another({ DECIMAL_PLACES: 9 }) is equivalent to:
      -BN = BigNumber.another()
      -BN.config({ DECIMAL_PLACES: 9 })
      - - - -
      configconfig([obj]) ⇒ object
      -

      - obj: object: an object that contains some or all of the following - properties. -

      -

      Configures the 'global' settings for this particular BigNumber constructor.

      -

      Note: the configuration can also be supplied as an argument list, see below.

      -
      -
      DECIMAL_PLACES
      -
      - number: integer, 0 to 1e+9 inclusive
      - Default value: 20 -
      -
      - The maximum number of decimal places of the results of operations involving - division, i.e. division, square root and base conversion operations, and power - operations with negative exponents.
      -
      -
      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -BigNumber.config(5)    // equivalent
      -
      - - - -
      ROUNDING_MODE
      -
      - number: integer, 0 to 8 inclusive
      - Default value: 4 (ROUND_HALF_UP) -
      -
      - The rounding mode used in the above operations and the default rounding mode of - round, - toExponential, - toFixed, - toFormat and - toPrecision. -
      -
      The modes are available as enumerated properties of the BigNumber constructor.
      -
      -
      BigNumber.config({ ROUNDING_MODE: 0 })
      -BigNumber.config(null, BigNumber.ROUND_UP)    // equivalent
      -
      - - - -
      EXPONENTIAL_AT
      -
      - number: integer, magnitude 0 to 1e+9 inclusive, or -
      - number[]: [ integer -1e+9 to 0 inclusive, integer - 0 to 1e+9 inclusive ]
      - Default value: [-7, 20] -
      -
      - The exponent value(s) at which toString returns exponential notation. -
      -
      - If a single number is assigned, the value is the exponent magnitude.
      - If an array of two numbers is assigned then the first number is the negative exponent - value at and beneath which exponential notation is used, and the second number is the - positive exponent value at and above which the same. -
      -
      - For example, to emulate JavaScript numbers in terms of the exponent values at which they - begin to use exponential notation, use [-7, 20]. -
      -
      -
      BigNumber.config({ EXPONENTIAL_AT: 2 })
      -new BigNumber(12.3)         // '12.3'        e is only 1
      -new BigNumber(123)          // '1.23e+2'
      -new BigNumber(0.123)        // '0.123'       e is only -1
      -new BigNumber(0.0123)       // '1.23e-2'
      -
      -BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
      -new BigNumber(123456789)    // '123456789'   e is only 8
      -new BigNumber(0.000000123)  // '1.23e-7'
      -
      -// Almost never return exponential notation:
      -BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
      -
      -// Always return exponential notation:
      -BigNumber.config({ EXPONENTIAL_AT: 0 })
      -
      -
      - Regardless of the value of EXPONENTIAL_AT, the toFixed method - will always return a value in normal notation and the toExponential method - will always return a value in exponential form. -
      -
      - Calling toString with a base argument, e.g. toString(10), will - also always return normal notation. -
      - - - -
      RANGE
      -
      - number: integer, magnitude 1 to 1e+9 inclusive, or -
      - number[]: [ integer -1e+9 to -1 inclusive, integer - 1 to 1e+9 inclusive ]
      - Default value: [-1e+9, 1e+9] -
      -
      - The exponent value(s) beyond which overflow to Infinity and underflow to - zero occurs. -
      -
      - If a single number is assigned, it is the maximum exponent magnitude: values wth a - positive exponent of greater magnitude become Infinity and those with a - negative exponent of greater magnitude become zero. -
      - If an array of two numbers is assigned then the first number is the negative exponent - limit and the second number is the positive exponent limit. -
      -
      - For example, to emulate JavaScript numbers in terms of the exponent values at which they - become zero and Infinity, use [-324, 308]. -
      -
      -
      BigNumber.config({ RANGE: 500 })
      -BigNumber.config().RANGE     // [ -500, 500 ]
      -new BigNumber('9.999e499')   // '9.999e+499'
      -new BigNumber('1e500')       // 'Infinity'
      -new BigNumber('1e-499')      // '1e-499'
      -new BigNumber('1e-500')      // '0'
      -
      -BigNumber.config({ RANGE: [-3, 4] })
      -new BigNumber(99999)         // '99999'      e is only 4
      -new BigNumber(100000)        // 'Infinity'   e is 5
      -new BigNumber(0.001)         // '0.01'       e is only -3
      -new BigNumber(0.0001)        // '0'          e is -4
      -
      -
      - The largest possible magnitude of a finite BigNumber is - 9.999...e+1000000000.
      - The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. -
      - - - -
      ERRORS
      -
      - boolean|number: true, false, 0 or - 1.
      - Default value: true -
      -
      - The value that determines whether BigNumber Errors are thrown.
      - If ERRORS is false, no errors will be thrown. -
      -
      See Errors.
      -
      BigNumber.config({ ERRORS: false })
      - - - -
      CRYPTO
      -
      - boolean|number: true, false, 0 or - 1.
      - Default value: false -
      -
      - The value that determines whether cryptographically-secure pseudo-random number - generation is used. -
      -
      - If CRYPTO is set to true then the - random method will generate random digits using - crypto.getRandomValues in browsers that support it, or - crypto.randomBytes if using a version of Node.js that supports it. -
      -
      - If neither function is supported by the host environment then attempting to set - CRYPTO to true will fail, and if ERRORS - is true an exception will be thrown. -
      -
      - If CRYPTO is false then the source of randomness used will be - Math.random (which is assumed to generate at least 30 bits of - randomness). -
      -
      See random.
      -
      -
      BigNumber.config({ CRYPTO: true })
      -BigNumber.config().CRYPTO       // true
      -BigNumber.random()              // 0.54340758610486147524
      -
      - - - -
      MODULO_MODE
      -
      - number: integer, 0 to 9 inclusive
      - Default value: 1 (ROUND_DOWN) -
      -
      The modulo mode used when calculating the modulus: a mod n.
      -
      - The quotient, q = a / n, is calculated according to the - ROUNDING_MODE that corresponds to the chosen - MODULO_MODE. -
      -
      The remainder, r, is calculated as: r = a - n * q.
      -
      - The modes that are most commonly used for the modulus/remainder operation are shown in - the following table. Although the other rounding modes can be used, they may not give - useful results. -
      -
      - - - - - - - - - - - - - - - - - - - - - - -
      PropertyValueDescription
      ROUND_UP0 - The remainder is positive if the dividend is negative, otherwise it is negative. -
      ROUND_DOWN1 - The remainder has the same sign as the dividend.
      - This uses 'truncating division' and matches the behaviour of JavaScript's - remainder operator %. -
      ROUND_FLOOR3 - The remainder has the same sign as the divisor.
      - This matches Python's % operator. -
      ROUND_HALF_EVEN6The IEEE 754 remainder function.
      EUCLID9 - The remainder is always positive. Euclidian division:
      - q = sign(n) * floor(a / abs(n)) -
      -
      -
      - The rounding/modulo modes are available as enumerated properties of the BigNumber - constructor. -
      -
      See modulo.
      -
      -
      BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
      -BigNumber.config({ MODULO_MODE: 9 })          // equivalent
      -
      - - - -
      POW_PRECISION
      -
      - number: integer, 0 to 1e+9 inclusive.
      - Default value: 100 -
      -
      - The maximum number of significant digits of the result of the power operation. -
      -
      If set to 0, the number of signifcant digits will not be limited.
      -
      See toPower.
      -
      BigNumber.config({ POW_PRECISION: 100 })
      - - - -
      FORMAT
      -
      object
      -
      - The FORMAT object configures the format of the string returned by the - toFormat method. -
      -
      - The example below shows the properties of the FORMAT object that are - recognised, and their default values. -
      -
      - Unlike the other configuration properties, the values of the properties of the - FORMAT object will not be checked for validity. The existing - FORMAT object will simply be replaced by the object that is passed in. - Note that all the properties shown below do not have to be included. -
      -
      See toFormat for examples of usage.
      -
      -
      -BigNumber.config({
      -    FORMAT: {
      -        // the decimal separator
      -        decimalSeparator: '.',
      -        // the grouping separator of the integer part
      -        groupSeparator: ',',
      -        // the primary grouping size of the integer part
      -        groupSize: 3,
      -        // the secondary grouping size of the integer part
      -        secondaryGroupSize: 0,
      -        // the grouping separator of the fraction part
      -        fractionGroupSeparator: ' ',
      -        // the grouping size of the fraction part
      -        fractionGroupSize: 0
      -    }
      -});
      -
      -
      -
      -

      Returns an object with the above properties and their current values.

      -

      - If the value to be assigned to any of the above properties is null or - undefined it is ignored. -

      -

      See Errors for the treatment of invalid values.

      -
      -BigNumber.config({
      -    DECIMAL_PLACES: 40,
      -    ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
      -    EXPONENTIAL_AT: [-10, 20],
      -    RANGE: [-500, 500],
      -    ERRORS: true,
      -    CRYPTO: true,
      -    MODULO_MODE: BigNumber.ROUND_FLOOR,
      -    POW_PRECISION: 80,
      -    FORMAT: {
      -        groupSize: 3,
      -        groupSeparator: ' ',
      -        decimalSeparator: ','
      -    }
      -});
      -
      -// Alternatively but equivalently (excluding FORMAT):
      -BigNumber.config( 40, 7, [-10, 20], 500, 1, 1, 3, 80 )
      -
      -obj = BigNumber.config();
      -obj.ERRORS       // true
      -obj.RANGE        // [-500, 500]
      - - - -
      - max.max([arg1 [, arg2, ...]]) ⇒ BigNumber -
      -

      - arg1, arg2, ...: number|string|BigNumber
      - See BigNumber for further parameter details. -

      -

      - Returns a BigNumber whose value is the maximum of arg1, - arg2,... . -

      -

      The argument to this method can also be an array of values.

      -

      The return value is always exact and unrounded.

      -
      x = new BigNumber('3257869345.0378653')
      -BigNumber.max(4e9, x, '123456789.9')          // '4000000000'
      -
      -arr = [12, '13', new BigNumber(14)]
      -BigNumber.max(arr)                            // '14'
      - - - -
      - min.min([arg1 [, arg2, ...]]) ⇒ BigNumber -
      -

      - arg1, arg2, ...: number|string|BigNumber
      - See BigNumber for further parameter details. -

      -

      - Returns a BigNumber whose value is the minimum of arg1, - arg2,... . -

      -

      The argument to this method can also be an array of values.

      -

      The return value is always exact and unrounded.

      -
      x = new BigNumber('3257869345.0378653')
      -BigNumber.min(4e9, x, '123456789.9')          // '123456789.9'
      -
      -arr = [2, new BigNumber(-14), '-15.9999', -12]
      -BigNumber.min(arr)                            // '-15.9999'
      - - - -
      - random.random([dp]) ⇒ BigNumber -
      -

      dp: number: integer, 0 to 1e+9 inclusive

      -

      - Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and - less than 1. -

      -

      - The return value will have dp decimal places (or less if trailing zeros are - produced).
      - If dp is omitted then the number of decimal places will default to the current - DECIMAL_PLACES setting. -

      -

      - Depending on the value of this BigNumber constructor's - CRYPTO setting and the support for the - crypto object in the host environment, the random digits of the return value are - generated by either Math.random (fastest), crypto.getRandomValues - (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). -

      -

      - If CRYPTO is true, i.e. one of the - crypto methods is to be used, the value of a returned BigNumber should be - cryptographically-secure and statistically indistinguishable from a random value. -

      -
      BigNumber.config({ DECIMAL_PLACES: 10 })
      -BigNumber.random()              // '0.4117936847'
      -BigNumber.random(20)            // '0.78193327636914089009'
      - - - -

      Properties

      -

      - The library's enumerated rounding modes are stored as properties of the constructor.
      - (They are not referenced internally by the library itself.) -

      -

      - Rounding modes 0 to 6 (inclusive) are the same as those of Java's - BigDecimal class. -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      PropertyValueDescription
      ROUND_UP0Rounds away from zero
      ROUND_DOWN1Rounds towards zero
      ROUND_CEIL2Rounds towards Infinity
      ROUND_FLOOR3Rounds towards -Infinity
      ROUND_HALF_UP4 - Rounds towards nearest neighbour.
      - If equidistant, rounds away from zero -
      ROUND_HALF_DOWN5 - Rounds towards nearest neighbour.
      - If equidistant, rounds towards zero -
      ROUND_HALF_EVEN6 - Rounds towards nearest neighbour.
      - If equidistant, rounds towards even neighbour -
      ROUND_HALF_CEIL7 - Rounds towards nearest neighbour.
      - If equidistant, rounds towards Infinity -
      ROUND_HALF_FLOOR8 - Rounds towards nearest neighbour.
      - If equidistant, rounds towards -Infinity -
      -
      -BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
      -BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
      - - -

      INSTANCE

      - -

      Methods

      -

      The methods inherited by a BigNumber instance from its constructor's prototype object.

      -

      A BigNumber is immutable in the sense that it is not changed by its methods.

      -

      - The treatment of ±0, ±Infinity and NaN is - consistent with how JavaScript treats these values. -

      -

      - Many method names have a shorter alias.
      - (Internally, the library always uses the shorter method names.) -

      - - - -
      absoluteValue.abs() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of - this BigNumber. -

      -

      The return value is always exact and unrounded.

      -
      -x = new BigNumber(-0.8)
      -y = x.absoluteValue()           // '0.8'
      -z = y.abs()                     // '0.8'
      - - - -
      ceil.ceil() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the value of this BigNumber rounded to - a whole number in the direction of positive Infinity. -

      -
      -x = new BigNumber(1.3)
      -x.ceil()                        // '2'
      -y = new BigNumber(-1.8)
      -y.ceil()                        // '-1'
      - - - -
      comparedTo.cmp(n [, base]) ⇒ number
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      - - - - - - - - - - - - - - - - - - -
      Returns 
      1If the value of this BigNumber is greater than the value of n
      -1If the value of this BigNumber is less than the value of n
      0If this BigNumber and n have the same value
      nullIf the value of either this BigNumber or n is NaN
      -
      -x = new BigNumber(Infinity)
      -y = new BigNumber(5)
      -x.comparedTo(y)                 // 1
      -x.comparedTo(x.minus(1))        // 0
      -y.cmp(NaN)                      // null
      -y.cmp('110', 2)                 // -1
      - - - -
      decimalPlaces.dp() ⇒ number
      -

      - Return the number of decimal places of the value of this BigNumber, or null if - the value of this BigNumber is ±Infinity or NaN. -

      -
      -x = new BigNumber(123.45)
      -x.decimalPlaces()               // 2
      -y = new BigNumber('9.9e-101')
      -y.dp()                          // 102
      - - - -
      dividedBy.div(n [, base]) ⇒ BigNumber -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns a BigNumber whose value is the value of this BigNumber divided by - n, rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

      -
      -x = new BigNumber(355)
      -y = new BigNumber(113)
      -x.dividedBy(y)                  // '3.14159292035398230088'
      -x.div(5)                        // '71'
      -x.div(47, 16)                   // '5'
      - - - -
      - dividedToIntegerBy.divToInt(n [, base]) ⇒ - BigNumber -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Return a BigNumber whose value is the integer part of dividing the value of this BigNumber by - n. -

      -
      -x = new BigNumber(5)
      -y = new BigNumber(3)
      -x.dividedToIntegerBy(y)         // '1'
      -x.divToInt(0.7)                 // '7'
      -x.divToInt('0.f', 16)           // '5'
      - - - -
      equals.eq(n [, base]) ⇒ boolean
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber equals the value of n, - otherwise returns false.
      - As with JavaScript, NaN does not equal NaN. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -0 === 1e-324                    // true
      -x = new BigNumber(0)
      -x.equals('1e-324')              // false
      -BigNumber(-0).eq(x)             // true  ( -0 === 0 )
      -BigNumber(255).eq('ff', 16)     // true
      -
      -y = new BigNumber(NaN)
      -y.equals(NaN)                   // false
      - - - -
      floor.floor() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the value of this BigNumber rounded to a whole number in - the direction of negative Infinity. -

      -
      -x = new BigNumber(1.8)
      -x.floor()                       // '1'
      -y = new BigNumber(-1.3)
      -y.floor()                       // '-2'
      - - - -
      greaterThan.gt(n [, base]) ⇒ boolean
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber is greater than the value of - n, otherwise returns false. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -0.1 > (0.3 - 0.2)                           // true
      -x = new BigNumber(0.1)
      -x.greaterThan(BigNumber(0.3).minus(0.2))    // false
      -BigNumber(0).gt(x)                          // false
      -BigNumber(11, 3).gt(11.1, 2)                // true
      - - - -
      - greaterThanOrEqualTo.gte(n [, base]) ⇒ boolean -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber is greater than or equal to the value - of n, otherwise returns false. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -(0.3 - 0.2) >= 0.1                   // false
      -x = new BigNumber(0.3).minus(0.2)
      -x.greaterThanOrEqualTo(0.1)          // true
      -BigNumber(1).gte(x)                  // true
      -BigNumber(10, 18).gte('i', 36)       // true
      - - - -
      isFinite.isFinite() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is a finite number, otherwise - returns false. -

      -

      - The only possible non-finite values of a BigNumber are NaN, Infinity - and -Infinity. -

      -
      -x = new BigNumber(1)
      -x.isFinite()                    // true
      -y = new BigNumber(Infinity)
      -y.isFinite()                    // false
      -

      - Note: The native method isFinite() can be used if - n <= Number.MAX_VALUE. -

      - - - -
      isInteger.isInt() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is a whole number, otherwise returns - false. -

      -
      -x = new BigNumber(1)
      -x.isInteger()                   // true
      -y = new BigNumber(123.456)
      -y.isInt()                       // false
      - - - -
      isNaN.isNaN() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is NaN, otherwise - returns false. -

      -
      -x = new BigNumber(NaN)
      -x.isNaN()                       // true
      -y = new BigNumber('Infinity')
      -y.isNaN()                       // false
      -

      Note: The native method isNaN() can also be used.

      - - - -
      isNegative.isNeg() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is negative, otherwise returns - false. -

      -
      -x = new BigNumber(-0)
      -x.isNegative()                  // true
      -y = new BigNumber(2)
      -y.isNeg                         // false
      -

      Note: n < 0 can be used if n <= -Number.MIN_VALUE.

      - - - -
      isZero.isZero() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is zero or minus zero, otherwise - returns false. -

      -
      -x = new BigNumber(-0)
      -x.isZero() && x.isNeg()         // true
      -y = new BigNumber(Infinity)
      -y.isZero()                      // false
      -

      Note: n == 0 can be used if n >= Number.MIN_VALUE.

      - - - -
      lessThan.lt(n [, base]) ⇒ boolean
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber is less than the value of - n, otherwise returns false. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -(0.3 - 0.2) < 0.1                     // true
      -x = new BigNumber(0.3).minus(0.2)
      -x.lessThan(0.1)                       // false
      -BigNumber(0).lt(x)                    // true
      -BigNumber(11.1, 2).lt(11, 3)          // true
      - - - -
      - lessThanOrEqualTo.lte(n [, base]) ⇒ boolean -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber is less than or equal to the value of - n, otherwise returns false. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -0.1 <= (0.3 - 0.2)                                // false
      -x = new BigNumber(0.1)
      -x.lessThanOrEqualTo(BigNumber(0.3).minus(0.2))    // true
      -BigNumber(-1).lte(x)                              // true
      -BigNumber(10, 18).lte('i', 36)                    // true
      - - - -
      - minus.minus(n [, base]) ⇒ BigNumber -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      Returns a BigNumber whose value is the value of this BigNumber minus n.

      -

      The return value is always exact and unrounded.

      -
      -0.3 - 0.1                       // 0.19999999999999998
      -x = new BigNumber(0.3)
      -x.minus(0.1)                    // '0.2'
      -x.minus(0.6, 20)                // '0'
      - - - -
      modulo.mod(n [, base]) ⇒ BigNumber
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. - the integer remainder of dividing this BigNumber by n. -

      -

      - The value returned, and in particular its sign, is dependent on the value of the - MODULO_MODE setting of this BigNumber constructor. - If it is 1 (default value), the result will have the same sign as this BigNumber, - and it will match that of Javascript's % operator (within the limits of double - precision) and BigDecimal's remainder method. -

      -

      The return value is always exact and unrounded.

      -

      - See MODULO_MODE for a description of the other - modulo modes. -

      -
      -1 % 0.9                         // 0.09999999999999998
      -x = new BigNumber(1)
      -x.modulo(0.9)                   // '0.1'
      -y = new BigNumber(33)
      -y.mod('a', 33)                  // '3'
      - - - -
      negated.neg() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by - -1. -

      -
      -x = new BigNumber(1.8)
      -x.negated()                     // '-1.8'
      -y = new BigNumber(-1.3)
      -y.neg()                         // '1.3'
      - - - -
      plus.plus(n [, base]) ⇒ BigNumber
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      Returns a BigNumber whose value is the value of this BigNumber plus n.

      -

      The return value is always exact and unrounded.

      -
      -0.1 + 0.2                       // 0.30000000000000004
      -x = new BigNumber(0.1)
      -y = x.plus(0.2)                 // '0.3'
      -BigNumber(0.7).plus(x).plus(y)  // '1'
      -x.plus('0.1', 8)                // '0.225'
      - - - -
      precision.sd([z]) ⇒ number
      -

      - z: boolean|number: true, false, 0 - or 1 -

      -

      Returns the number of significant digits of the value of this BigNumber.

      -

      - If z is true or 1 then any trailing zeros of the - integer part of a number are counted as significant digits, otherwise they are not. -

      -
      -x = new BigNumber(1.234)
      -x.precision()                   // 4
      -y = new BigNumber(987000)
      -y.sd()                          // 3
      -y.sd(true)                      // 6
      - - - -
      round.round([dp [, rm]]) ⇒ BigNumber
      -

      - dp: number: integer, 0 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      - Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - rm to a maximum of dp decimal places. -

      -

      - if dp is omitted, or is null or undefined, the - return value is n rounded to a whole number.
      - if rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

      -
      -x = 1234.56
      -Math.round(x)                             // 1235
      -
      -y = new BigNumber(x)
      -y.round()                                 // '1235'
      -y.round(1)                                // '1234.6'
      -y.round(2)                                // '1234.56'
      -y.round(10)                               // '1234.56'
      -y.round(0, 1)                             // '1234'
      -y.round(0, 6)                             // '1235'
      -y.round(1, 1)                             // '1234.5'
      -y.round(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
      -y                                         // '1234.56'
      - - - -
      shift.shift(n) ⇒ BigNumber
      -

      - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

      -

      - Returns a BigNumber whose value is the value of this BigNumber shifted n places. -

      - The shift is of the decimal point, i.e. of powers of ten, and is to the left if n - is negative or to the right if n is positive. -

      -

      The return value is always exact and unrounded.

      -
      -x = new BigNumber(1.23)
      -x.shift(3)                      // '1230'
      -x.shift(-3)                     // '0.00123'
      - - - -
      squareRoot.sqrt() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the square root of the value of this BigNumber, - rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

      -

      - The return value will be correctly rounded, i.e. rounded as if the result was first calculated - to an infinite number of correct digits before rounding. -

      -
      -x = new BigNumber(16)
      -x.squareRoot()                  // '4'
      -y = new BigNumber(3)
      -y.sqrt()                        // '1.73205080756887729353'
      - - - -
      times.times(n [, base]) ⇒ BigNumber
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      Returns a BigNumber whose value is the value of this BigNumber times n.

      -

      The return value is always exact and unrounded.

      -
      -0.6 * 3                         // 1.7999999999999998
      -x = new BigNumber(0.6)
      -y = x.times(3)                  // '1.8'
      -BigNumber('7e+500').times(y)    // '1.26e+501'
      -x.times('-a', 16)               // '-6'
      - - - -
      - toDigits.toDigits([sd [, rm]]) ⇒ BigNumber -
      -

      - sd: number: integer, 1 to 1e+9 inclusive.
      - rm: number: integer, 0 to 8 inclusive. -

      -

      - Returns a BigNumber whose value is the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

      -

      - If sd is omitted or is null or undefined, the return - value will not be rounded.
      - If rm is omitted or is null or undefined, - ROUNDING_MODE will be used. -

      -

      - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

      -
      -BigNumber.config({ precision: 5, rounding: 4 })
      -x = new BigNumber(9876.54321)
      -
      -x.toSignificantDigits()                          // '9876.5'
      -x.toSignificantDigits(6)                         // '9876.54'
      -x.toSignificantDigits(6, BigNumber.ROUND_UP)     // '9876.55'
      -x.toSD(2)                                        // '9900'
      -x.toSD(2, 1)                                     // '9800'
      -x                                                // '9876.54321'
      - - - -
      - toExponential.toExponential([dp [, rm]]) ⇒ string -
      -

      - dp: number: integer, 0 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      - Returns a string representing the value of this BigNumber in exponential notation rounded - using rounding mode rm to dp decimal places, i.e with one digit - before the decimal point and dp digits after it. -

      -

      - If the value of this BigNumber in exponential notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

      -

      - If dp is omitted, or is null or undefined, the number - of digits after the decimal point defaults to the minimum number of digits necessary to - represent the value exactly.
      - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

      -
      -x = 45.6
      -y = new BigNumber(x)
      -x.toExponential()               // '4.56e+1'
      -y.toExponential()               // '4.56e+1'
      -x.toExponential(0)              // '5e+1'
      -y.toExponential(0)              // '5e+1'
      -x.toExponential(1)              // '4.6e+1'
      -y.toExponential(1)              // '4.6e+1'
      -y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
      -x.toExponential(3)              // '4.560e+1'
      -y.toExponential(3)              // '4.560e+1'
      - - - -
      - toFixed.toFixed([dp [, rm]]) ⇒ string -
      -

      - dp: number: integer, 0 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm. -

      -

      - If the value of this BigNumber in normal notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

      -

      - Unlike Number.prototype.toFixed, which returns exponential notation if a number - is greater or equal to 1021, this method will always return normal - notation. -

      -

      - If dp is omitted or is null or undefined, the return - value will be unrounded and in normal notation. This is also unlike - Number.prototype.toFixed, which returns the value to zero decimal places.
      - It is useful when fixed-point notation is required and the current - EXPONENTIAL_AT setting causes - toString to return exponential notation.
      - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

      -
      -x = 3.456
      -y = new BigNumber(x)
      -x.toFixed()                     // '3'
      -y.toFixed()                     // '3.456'
      -y.toFixed(0)                    // '3'
      -x.toFixed(2)                    // '3.46'
      -y.toFixed(2)                    // '3.46'
      -y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
      -x.toFixed(5)                    // '3.45600'
      -y.toFixed(5)                    // '3.45600'
      - - - -
      - toFormat.toFormat([dp [, rm]]) ⇒ string -
      -

      - dp: number: integer, 0 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      -

      - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm, and formatted - according to the properties of the FORMAT object. -

      -

      - See the examples below for the properties of the - FORMAT object, their types and their usage. -

      -

      - If dp is omitted or is null or undefined, then the - return value is not rounded to a fixed number of decimal places.
      - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

      -
      -format = {
      -    decimalSeparator: '.',
      -    groupSeparator: ',',
      -    groupSize: 3,
      -    secondaryGroupSize: 0,
      -    fractionGroupSeparator: ' ',
      -    fractionGroupSize: 0
      -}
      -BigNumber.config({ FORMAT: format })
      -
      -x = new BigNumber('123456789.123456789')
      -x.toFormat()                    // '123,456,789.123456789'
      -x.toFormat(1)                   // '123,456,789.1'
      -
      -// If a reference to the object assigned to FORMAT has been retained,
      -// the format properties can be changed directly
      -format.groupSeparator = ' '
      -format.fractionGroupSize = 5
      -x.toFormat()                    // '123 456 789.12345 6789'
      -
      -BigNumber.config({
      -    FORMAT: {
      -        decimalSeparator = ',',
      -        groupSeparator = '.',
      -        groupSize = 3,
      -        secondaryGroupSize = 2
      -    }
      -})
      -
      -x.toFormat(6)                   // '12.34.56.789,123'
      - - - -
      - toFraction.toFraction([max]) ⇒ [string, string] -
      -

      - max: number|string|BigNumber: integer >= 1 and < - Infinity -

      -

      - Returns a string array representing the value of this BigNumber as a simple fraction with an - integer numerator and an integer denominator. The denominator will be a positive non-zero - value less than or equal to max. -

      -

      - If a maximum denominator, max, is not specified, or is null or - undefined, the denominator will be the lowest value necessary to represent the - number exactly. -

      -

      - See Errors for the treatment of other non-integer or out of range - max values. -

      -
      -x = new BigNumber(1.75)
      -x.toFraction()                  // '7, 4'
      -
      -pi = new BigNumber('3.14159265358')
      -pi.toFraction()                 // '157079632679,50000000000'
      -pi.toFraction(100000)           // '312689, 99532'
      -pi.toFraction(10000)            // '355, 113'
      -pi.toFraction(100)              // '311, 99'
      -pi.toFraction(10)               // '22, 7'
      -pi.toFraction(1)                // '3, 1'
      - - - -
      toJSON.toJSON() ⇒ string
      -

      As valueOf.

      -
      -x = new BigNumber('177.7e+457')
      -y = new BigNumber(235.4325)
      -z = new BigNumber('0.0098074')
      -
      -// Serialize an array of three BigNumbers
      -str = JSON.stringify( [x, y, z] )
      -// "["1.777e+459","235.4325","0.0098074"]"
      -
      -// Return an array of three BigNumbers
      -JSON.parse(str, function (key, val) {
      -    return key === '' ? val : new BigNumber(val)
      -})
      - - - -
      toNumber.toNumber() ⇒ number
      -

      Returns the value of this BigNumber as a JavaScript number primitive.

      -

      - Type coercion with, for example, the unary plus operator will also work, except that a - BigNumber with the value minus zero will be converted to positive zero. -

      -
      -x = new BigNumber(456.789)
      -x.toNumber()                    // 456.789
      -+x                              // 456.789
      -
      -y = new BigNumber('45987349857634085409857349856430985')
      -y.toNumber()                    // 4.598734985763409e+34
      -
      -z = new BigNumber(-0)
      -1 / +z                          // Infinity
      -1 / z.toNumber()                // -Infinity
      - - - -
      toPower.pow(n) ⇒ BigNumber
      -

      - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

      -

      - Returns a BigNumber whose value is the value of this BigNumber raised to the power - n. -

      -

      - If n is negative the result is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

      -

      - If n is not an integer or is out of range: -

      -

      - If ERRORS is true a BigNumber Error is thrown,
      - else if n is greater than 9007199254740991, it is interpreted as - Infinity;
      - else if n is less than -9007199254740991, it is interpreted as - -Infinity;
      - else if n is otherwise a number, it is truncated to an integer;
      - else it is interpreted as NaN. -

      -

      - As the number of digits of the result of the power operation can grow so large so quickly, - e.g. 123.45610000 has over 50000 digits, the number of significant - digits calculated is limited to the value of the - POW_PRECISION setting (default value: - 100). -

      -

      - Set POW_PRECISION to 0 for an - unlimited number of significant digits to be calculated (this will cause the method to slow - dramatically for larger exponents). -

      -

      - Negative exponents will be calculated to the number of decimal places specified by - DECIMAL_PLACES (but not to more than - POW_PRECISION significant digits). -

      -
      -Math.pow(0.7, 2)                // 0.48999999999999994
      -x = new BigNumber(0.7)
      -x.toPower(2)                    // '0.49'
      -BigNumber(3).pow(-2)            // '0.11111111111111111111'
      - - - -
      - toPrecision.toPrecision([sd [, rm]]) ⇒ string -
      -

      - sd: number: integer, 1 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      - Returns a string representing the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

      -

      - If sd is less than the number of digits necessary to represent the integer part - of the value in normal (fixed-point) notation, then exponential notation is used. -

      -

      - If sd is omitted, or is null or undefined, then the - return value is the same as n.toString().
      - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

      -
      -x = 45.6
      -y = new BigNumber(x)
      -x.toPrecision()                 // '45.6'
      -y.toPrecision()                 // '45.6'
      -x.toPrecision(1)                // '5e+1'
      -y.toPrecision(1)                // '5e+1'
      -y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
      -y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
      -x.toPrecision(5)                // '45.600'
      -y.toPrecision(5)                // '45.600'
      - - - -
      toString.toString([base]) ⇒ string
      -

      base: number: integer, 2 to 64 inclusive

      -

      - Returns a string representing the value of this BigNumber in the specified base, or base - 10 if base is omitted or is null or - undefined. -

      -

      - For bases above 10, values from 10 to 35 are - represented by a-z (as with Number.prototype.toString), - 36 to 61 by A-Z, and 62 and - 63 by $ and _ respectively. -

      -

      - If a base is specified the value is rounded according to the current - DECIMAL_PLACES - and ROUNDING_MODE configuration. -

      -

      - If a base is not specified, and this BigNumber has a positive - exponent that is equal to or greater than the positive component of the - current EXPONENTIAL_AT setting, - or a negative exponent equal to or less than the negative component of the - setting, then exponential notation is returned. -

      -

      If base is null or undefined it is ignored.

      -

      - See Errors for the treatment of other non-integer or out of range - base values. -

      -
      -x = new BigNumber(750000)
      -x.toString()                    // '750000'
      -BigNumber.config({ EXPONENTIAL_AT: 5 })
      -x.toString()                    // '7.5e+5'
      -
      -y = new BigNumber(362.875)
      -y.toString(2)                   // '101101010.111'
      -y.toString(9)                   // '442.77777777777777777778'
      -y.toString(32)                  // 'ba.s'
      -
      -BigNumber.config({ DECIMAL_PLACES: 4 });
      -z = new BigNumber('1.23456789')
      -z.toString()                    // '1.23456789'
      -z.toString(10)                  // '1.2346'
      - - - -
      truncated.trunc() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the value of this BigNumber truncated to a whole number. -

      -
      -x = new BigNumber(123.456)
      -x.truncated()                   // '123'
      -y = new BigNumber(-12.3)
      -y.trunc()                       // '-12'
      - - - -
      valueOf.valueOf() ⇒ string
      -

      As toString, but does not accept a base argument.

      -
      -x = new BigNumber('1.777e+457')
      -x.valueOf()                     // '1.777e+457'
      - - - -

      Properties

      -

      A BigNumber is an object with three properties:

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      PropertyDescriptionTypeValue
      ccoefficient*number[] Array of base 1e14 numbers
      eexponentnumberInteger, -1000000000 to 1000000000 inclusive
      ssignnumber-1 or 1
      -

      *significand

      -

      The value of any of the three properties may also be null.

      -

      - From v2.0.0 of this library, the value of the coefficient of a BigNumber is stored in a - normalised base 100000000000000 floating point format, as opposed to the base - 10 format used in v1.x.x -

      -

      - This change means the properties of a BigNumber are now best considered to be read-only. - Previously it was acceptable to change the exponent of a BigNumber by writing to its exponent - property directly, but this is no longer recommended as the number of digits in the first - element of the coefficient array is dependent on the exponent, so the coefficient would also - need to be altered. -

      -

      - Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are - not necessarily preserved. -

      -
      x = new BigNumber(0.123)              // '0.123'
      -x.toExponential()                     // '1.23e-1'
      -x.c                                   // '1,2,3'
      -x.e                                   // -1
      -x.s                                   // 1
      -
      -y = new Number(-123.4567000e+2)       // '-12345.67'
      -y.toExponential()                     // '-1.234567e+4'
      -z = new BigNumber('-123.4567000e+2')  // '-12345.67'
      -z.toExponential()                     // '-1.234567e+4'
      -z.c                                   // '1,2,3,4,5,6,7'
      -z.e                                   // 4
      -z.s                                   // -1
      - - - -

      Zero, NaN and Infinity

      -

      - The table below shows how ±0, NaN and - ±Infinity are stored. -

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      ces
      ±0[0]0±1
      NaNnullnullnull
      ±Infinitynullnull±1
      -
      -x = new Number(-0)              // 0
      -1 / x == -Infinity              // true
      -
      -y = new BigNumber(-0)           // '0'
      -y.c                             // '0' ( [0].toString() )
      -y.e                             // 0
      -y.s                             // -1
      - - - -

      Errors

      -

      - The errors that are thrown are generic Error objects with name - BigNumber Error. -

      -

      - The table below shows the errors that may be thrown if ERRORS is - true, and the action taken if ERRORS is false. -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Method(s)ERRORS: true
      Throw BigNumber Error
      ERRORS: false
      Action on invalid argument
      - - BigNumber
      - comparedTo
      - dividedBy
      - dividedToIntegerBy
      - equals
      - greaterThan
      - greaterThanOrEqualTo
      - lessThan
      - lessThanOrEqualTo
      - minus
      - modulo
      - plus
      - times -
      number type has more than
      15 significant digits
      Accept.
      not a base... numberSubstitute NaN.
      base not an integerTruncate to integer.
      Ignore if not a number.
      base out of rangeIgnore.
      not a number*Substitute NaN.
      anothernot an objectIgnore.
      configDECIMAL_PLACES not an integerTruncate to integer.
      Ignore if not a number.
      DECIMAL_PLACES out of rangeIgnore.
      ROUNDING_MODE not an integerTruncate to integer.
      Ignore if not a number.
      ROUNDING_MODE out of rangeIgnore.
      EXPONENTIAL_AT not an integer
      or not [integer, integer]
      Truncate to integer(s).
      Ignore if not number(s).
      EXPONENTIAL_AT out of range
      or not [negative, positive]
      Ignore.
      RANGE not an integer
      or not [integer, integer]
      Truncate to integer(s).
      Ignore if not number(s).
      RANGE cannot be zeroIgnore.
      RANGE out of range
      or not [negative, positive]
      Ignore.
      ERRORS not a boolean
      or binary digit
      Ignore.
      CRYPTO not a boolean
      or binary digit
      Ignore.
      CRYPTO crypto unavailableIgnore.
      MODULO_MODE not an integerTruncate to integer.
      Ignore if not a number.
      MODULO_MODE out of rangeIgnore.
      POW_PRECISION not an integerTruncate to integer.
      Ignore if not a number.
      POW_PRECISION out of rangeIgnore.
      FORMAT not an objectIgnore.
      precisionargument not a boolean
      or binary digit
      Ignore.
      rounddecimal places not an integerTruncate to integer.
      Ignore if not a number.
      decimal places out of rangeIgnore.
      rounding mode not an integerTruncate to integer.
      Ignore if not a number.
      rounding mode out of rangeIgnore.
      shiftargument not an integerTruncate to integer.
      Ignore if not a number.
      argument out of rangeSubstitute ±Infinity. -
      - toExponential
      - toFixed
      - toFormat -
      decimal places not an integerTruncate to integer.
      Ignore if not a number.
      decimal places out of rangeIgnore.
      rounding mode not an integerTruncate to integer.
      Ignore if not a number.
      rounding mode out of rangeIgnore.
      toFractionmax denominator not an integerTruncate to integer.
      Ignore if not a number.
      max denominator out of rangeIgnore.
      - toDigits
      - toPrecision -
      precision not an integerTruncate to integer.
      Ignore if not a number.
      precision out of rangeIgnore.
      rounding mode not an integerTruncate to integer.
      Ignore if not a number.
      rounding mode out of rangeIgnore.
      toPowerexponent not an integerTruncate to integer.
      Substitute NaN if not a number.
      exponent out of rangeSubstitute ±Infinity. -
      toStringbase not an integerTruncate to integer.
      Ignore if not a number.
      base out of rangeIgnore.
      -

      *No error is thrown if the value is NaN or 'NaN'.

      -

      - The message of a BigNumber Error will also contain the name of the method from which - the error originated. -

      -

      To determine if an exception is a BigNumber Error:

      -
      -try {
      -    // ...
      -} catch (e) {
      -    if ( e instanceof Error && e.name == 'BigNumber Error' ) {
      -        // ...
      -    }
      -}
      - - - -

      FAQ

      - -
      Why are trailing fractional zeros removed from BigNumbers?
      -

      - Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the - precision of a value. This can be useful but the results of arithmetic operations can be - misleading. -

      -
      -x = new BigDecimal("1.0")
      -y = new BigDecimal("1.1000")
      -z = x.add(y)                      // 2.1000
      -
      -x = new BigDecimal("1.20")
      -y = new BigDecimal("3.45000")
      -z = x.multiply(y)                 // 4.1400000
      -

      - To specify the precision of a value is to specify that the value lies - within a certain range. -

      -

      - In the first example, x has a value of 1.0. The trailing zero shows - the precision of the value, implying that it is in the range 0.95 to - 1.05. Similarly, the precision indicated by the trailing zeros of y - indicates that the value is in the range 1.09995 to 1.10005. -

      -

      - If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, - and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the - range of the result of the addition implied by the precision of its operands is - 2.04995 to 2.15005. -

      -

      - The result given by BigDecimal of 2.1000 however, indicates that the value is in - the range 2.09995 to 2.10005 and therefore the precision implied by - its trailing zeros may be misleading. -

      -

      - In the second example, the true range is 4.122744 to 4.157256 yet - the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 - to 4.14000005. Again, the precision implied by the trailing zeros may be - misleading. -

      -

      - This library, like binary floating point and most calculators, does not retain trailing - fractional zeros. Instead, the toExponential, toFixed and - toPrecision methods enable trailing zeros to be added if and when required.
      -

      -
      - - - diff --git a/node_modules/web3-provider-engine/node_modules/bignumber.js/package.json b/node_modules/web3-provider-engine/node_modules/bignumber.js/package.json deleted file mode 100644 index a2b90f0..0000000 --- a/node_modules/web3-provider-engine/node_modules/bignumber.js/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_args": [ - [ - "bignumber.js@git+https://github.com/debris/bignumber.js.git#master", - "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine/node_modules/web3" - ] - ], - "_from": "git+https://github.com/debris/bignumber.js.git#master", - "_id": "bignumber.js@2.0.7", - "_inCache": true, - "_installable": true, - "_location": "/web3-provider-engine/bignumber.js", - "_phantomChildren": {}, - "_requested": { - "hosted": { - "directUrl": "https://raw.githubusercontent.com/debris/bignumber.js/master/package.json", - "gitUrl": "git://github.com/debris/bignumber.js.git#master", - "httpsUrl": "git+https://github.com/debris/bignumber.js.git#master", - "shortcut": "github:debris/bignumber.js#master", - "ssh": "git@github.com:debris/bignumber.js.git#master", - "sshUrl": "git+ssh://git@github.com/debris/bignumber.js.git#master", - "type": "github" - }, - "name": "bignumber.js", - "raw": "bignumber.js@git+https://github.com/debris/bignumber.js.git#master", - "rawSpec": "git+https://github.com/debris/bignumber.js.git#master", - "scope": null, - "spec": "git+https://github.com/debris/bignumber.js.git#master", - "type": "hosted" - }, - "_requiredBy": [ - "/web3-provider-engine/web3" - ], - "_resolved": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "_shasum": "69dd0093e38906418555adda085e7b25aeb153dc", - "_shrinkwrap": null, - "_spec": "bignumber.js@git+https://github.com/debris/bignumber.js.git#master", - "_where": "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine/node_modules/web3", - "author": { - "email": "M8ch88l@gmail.com", - "name": "Michael Mclaughlin" - }, - "bugs": { - "url": "https://github.com/MikeMcl/bignumber.js/issues" - }, - "dependencies": {}, - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "devDependencies": {}, - "engines": { - "node": "*" - }, - "gitHead": "94d7146671b9719e00a09c29b01a691bc85048c2", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "main": "bignumber", - "name": "bignumber.js", - "optionalDependencies": {}, - "readme": "![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png)\n\nA JavaScript library for arbitrary-precision decimal and non-decimal arithmetic.\n\n[![Build Status](https://travis-ci.org/MikeMcl/bignumber.js.svg)](https://travis-ci.org/MikeMcl/bignumber.js)\n\n
      \n\n## Features\n\n - Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal\n - 8 KB minified and gzipped\n - Simple API but full-featured\n - Works with numbers with or without fraction digits in bases from 2 to 64 inclusive\n - Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type\n - Includes a `toFraction` and a correctly-rounded `squareRoot` method\n - Supports cryptographically-secure pseudo-random number generation\n - No dependencies\n - Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only\n - Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set\n\n![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png)\n\nIf a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/).\nIt's less than half the size but only works with decimal numbers and only has half the methods.\nIt also does not allow `NaN` or `Infinity`, or have the configuration options of this library.\n\nSee also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits.\n\n## Load\n\nThe library is the single JavaScript file *bignumber.js* (or minified, *bignumber.min.js*).\n\n```html\n\n```\n\nFor [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry\n\n $ npm install bignumber.js\n\n```javascript\nvar BigNumber = require('bignumber.js');\n```\n\nTo load with AMD loader libraries such as [requireJS](http://requirejs.org/):\n\n```javascript\nrequire(['path/to/bignumber'], function(BigNumber) { \n // Use BigNumber here in local scope. No global BigNumber.\n});\n```\n\n## Use\n\n*In all examples below, `var`, semicolons and `toString` calls are not shown.\nIf a commented-out value is in quotes it means `toString` has been called on the preceding expression.*\n\nThe library exports a single function: `BigNumber`, the constructor of BigNumber instances.\n\nIt accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object,\n\n```javascript\nx = new BigNumber(123.4567)\ny = BigNumber('123456.7e-3')\nz = new BigNumber(x)\nx.equals(y) && y.equals(z) && x.equals(z) // true\n```\n\n\nand a base from 2 to 64 inclusive can be specified.\n\n```javascript\nx = new BigNumber(1011, 2) // \"11\"\ny = new BigNumber('zz.9', 36) // \"1295.25\"\nz = x.plus(y) // \"1306.25\"\n```\n\nA BigNumber is immutable in the sense that it is not changed by its methods. \n\n```javascript\n0.3 - 0.1 // 0.19999999999999998 \nx = new BigNumber(0.3)\nx.minus(0.1) // \"0.2\"\nx // \"0.3\"\n```\n\nThe methods that return a BigNumber can be chained.\n\n```javascript\nx.dividedBy(y).plus(z).times(9).floor()\nx.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil()\n```\n\nMany method names have a shorter alias.\n\n```javascript\nx.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true\nx.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true\n```\n\nLike JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods\n\n```javascript\nx = new BigNumber(255.5)\nx.toExponential(5) // \"2.55500e+2\"\nx.toFixed(5) // \"255.50000\"\nx.toPrecision(5) // \"255.50\"\nx.toNumber() // 255.5\n```\n\n and a base can be specified for `toString`.\n\n ```javascript\n x.toString(16) // \"ff.8\"\n ```\n\nThere is also a `toFormat` method which may be useful for internationalisation\n\n```javascript\ny = new BigNumber('1234567.898765')\ny.toFormat(2) // \"1,234,567.90\"\n```\n\nThe maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor.\n\nThe other arithmetic operations always give the exact result.\n\n```javascript\nBigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 })\n// Alternatively, BigNumber.config( 10, 4 );\n\nx = new BigNumber(2);\ny = new BigNumber(3);\nz = x.div(y) // \"0.6666666667\"\nz.sqrt() // \"0.8164965809\"\nz.pow(-3) // \"3.3749999995\"\nz.toString(2) // \"0.1010101011\"\nz.times(z) // \"0.44444444448888888889\"\nz.times(z).round(10) // \"0.4444444445\"\n```\n\nThere is a `toFraction` method with an optional *maximum denominator* argument\n\n```javascript\ny = new BigNumber(355)\npi = y.dividedBy(113) // \"3.1415929204\"\npi.toFraction() // [ \"7853982301\", \"2500000000\" ]\npi.toFraction(1000) // [ \"355\", \"113\" ]\n```\n\nand `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values.\n\n```javascript\nx = new BigNumber(NaN) // \"NaN\"\ny = new BigNumber(Infinity) // \"Infinity\"\nx.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true\n```\n\nThe value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign.\n\n\n```javascript\nx = new BigNumber(-123.456);\nx.c // [ 123, 45600000000000 ] coefficient (i.e. significand)\nx.e // 2 exponent\nx.s // -1 sign\n```\n\n\nMultiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it.\n\n```javascript\n// Set DECIMAL_PLACES for the original BigNumber constructor\nBigNumber.config({ DECIMAL_PLACES: 10 })\n\n// Create another BigNumber constructor, optionally passing in a configuration object\nBN = BigNumber.another({ DECIMAL_PLACES: 5 })\n\nx = new BigNumber(1)\ny = new BN(1)\n\nx.div(3) // '0.3333333333'\ny.div(3) // '0.33333'\n```\n\nFor futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory.\n\n## Test\n\nThe *test* directory contains the test scripts for each method.\n\nThe tests can be run with Node or a browser. For Node use\n\n $ npm test\n\nor\n\n $ node test/every-test\n\nTo test a single method, e.g.\n\n $ node test/toFraction\n\nFor the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. \n\n*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. \n\n## Versions\n\nThis is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported.\n\n## Performance\n\nSee the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory.\n\n## Build\n\nFor Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed\n\n npm install uglify-js -g\n\nthen\n\n npm run build\n\nwill create *bignumber.min.js*.\n\nA source map will also be created in the root directory.\n\n## Feedback\n\nOpen an issue, or email \n\nMichael\n\nM8ch88l@gmail.com\n\n## Licence\n\nMIT.\n\nSee [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE).\n\n## Change Log\n\n####2.0.6\n* 31/03/2015\n* Add bower.json. Tweak division after in-depth review.\n\n####2.0.5\n* 25/03/2015\n* Amend README. Remove bitcoin address.\n\n####2.0.4\n* 25/03/2015\n* Critical bugfix #58: division.\n\n####2.0.3\n* 18/02/2015\n* Amend README. Add source map.\n\n####2.0.2\n* 18/02/2015\n* Correct links.\n\n####2.0.1\n* 18/02/2015\n* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods.\n* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`.\n* Add an `another` method to enable multiple independent constructors to be created.\n* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`.\n* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`.\n* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified.\n* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified.\n* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited.\n* Improve code quality.\n* Improve documentation.\n\n####2.0.0\n* 29/12/2014\n* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods.\n* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`.\n* Store a BigNumber's coefficient in base 1e14, rather than base 10.\n* Add fast path for integers to BigNumber constructor.\n* Incorporate the library into the online documentation.\n\n####1.5.0\n* 13/11/2014\n* Add `toJSON` and `decimalPlaces` methods.\n\n####1.4.1\n* 08/06/2014\n* Amend README.\n\n####1.4.0\n* 08/05/2014\n* Add `toNumber`.\n\n####1.3.0\n* 08/11/2013\n* Ensure correct rounding of `sqrt` in all, rather than almost all, cases.\n* Maximum radix to 64.\n\n####1.2.1\n* 17/10/2013\n* Sign of zero when x < 0 and x + (-x) = 0.\n\n####1.2.0\n* 19/9/2013\n* Throw Error objects for stack.\n\n####1.1.1\n* 22/8/2013\n* Show original value in constructor error message.\n\n####1.1.0\n* 1/8/2013\n* Allow numbers with trailing radix point. \n\n####1.0.1\n* Bugfix: error messages with incorrect method name\n\n####1.0.0\n* 8/11/2012\n* Initial release\n", - "readmeFilename": "README.md", - "repository": { - "type": "git", - "url": "git+https://github.com/MikeMcl/bignumber.js.git" - }, - "scripts": { - "build": "uglifyjs bignumber.js --source-map bignumber.js.map -c -m -o bignumber.min.js --preamble \"/* bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */\"", - "test": "node ./test/every-test.js" - }, - "version": "2.0.7" -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/.bowerrc b/node_modules/web3-provider-engine/node_modules/web3/.bowerrc deleted file mode 100644 index 707e36b..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.bowerrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "directory": "bower", - "cwd": "./", - "analytics": false -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/.name b/node_modules/web3-provider-engine/node_modules/web3/.idea/.name deleted file mode 100644 index 3290557..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -web3 \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/encodings.xml b/node_modules/web3-provider-engine/node_modules/web3/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/jsLibraryMappings.xml b/node_modules/web3-provider-engine/node_modules/web3/.idea/jsLibraryMappings.xml deleted file mode 100644 index 5541181..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/jsLibraryMappings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/libraries/web3_node_modules.xml b/node_modules/web3-provider-engine/node_modules/web3/.idea/libraries/web3_node_modules.xml deleted file mode 100644 index 86c0e35..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/libraries/web3_node_modules.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/misc.xml b/node_modules/web3-provider-engine/node_modules/web3/.idea/misc.xml deleted file mode 100644 index 72abef0..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/misc.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/modules.xml b/node_modules/web3-provider-engine/node_modules/web3/.idea/modules.xml deleted file mode 100644 index 33ec5dd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/vcs.xml b/node_modules/web3-provider-engine/node_modules/web3/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/web3.iml b/node_modules/web3-provider-engine/node_modules/web3/.idea/web3.iml deleted file mode 100644 index 6734ff5..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/web3.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.idea/workspace.xml b/node_modules/web3-provider-engine/node_modules/web3/.idea/workspace.xml deleted file mode 100644 index 8954b16..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.idea/workspace.xml +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - $PROJECT_DIR$/gulpfile.js - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $PROJECT_DIR$ - true - - bdd - - DIRECTORY - - false - - - - - - - - - - - 1456145579499 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/.jshintrc b/node_modules/web3-provider-engine/node_modules/web3/.jshintrc deleted file mode 100644 index a0e8d35..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.jshintrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "browserify": true, - "bitwise": true, - "camelcase": true, - "eqeqeq": true, - "freeze": true, - "funcscope": false, - "maxcomplexity": 4, /* our target is 3! */ - "maxdepth": 3, - "maxerr": 50, - /*"maxlen": 80*/ /*this should be our goal*/ - /*"maxparams": 3,*/ - "nonew": true, - "unused": true, - "undef": true, - "predef": [ - "console" - ] -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/.npm/package/README b/node_modules/web3-provider-engine/node_modules/web3/.npm/package/README deleted file mode 100644 index 3d49255..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.npm/package/README +++ /dev/null @@ -1,7 +0,0 @@ -This directory and the files immediately inside it are automatically generated -when you change this package's NPM dependencies. Commit the files in this -directory (npm-shrinkwrap.json, .gitignore, and this README) to source control -so that others run the same versions of sub-dependencies. - -You should NOT check in the node_modules directory that Meteor automatically -creates; if you are using git, the .gitignore file tells git to ignore it. diff --git a/node_modules/web3-provider-engine/node_modules/web3/.npm/package/npm-shrinkwrap.json b/node_modules/web3-provider-engine/node_modules/web3/.npm/package/npm-shrinkwrap.json deleted file mode 100644 index 90e5c92..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.npm/package/npm-shrinkwrap.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dependencies": { - "xmlhttprequest": { - "version": "1.7.0" - } - } -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/.versions b/node_modules/web3-provider-engine/node_modules/web3/.versions deleted file mode 100644 index 37f948e..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/.versions +++ /dev/null @@ -1,3 +0,0 @@ -ethereum:web3@0.15.2 -meteor@1.1.10 -underscore@1.0.4 diff --git a/node_modules/web3-provider-engine/node_modules/web3/LICENSE b/node_modules/web3-provider-engine/node_modules/web3/LICENSE deleted file mode 100644 index 29a99ab..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/LICENSE +++ /dev/null @@ -1,14 +0,0 @@ -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . diff --git a/node_modules/web3-provider-engine/node_modules/web3/README.md b/node_modules/web3-provider-engine/node_modules/web3/README.md deleted file mode 100644 index 1fab416..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# Migration 0.13.0 -> 0.14.0 - -web3.js version 0.14.0 supports [multiple instances of web3](https://github.com/ethereum/web3.js/issues/297) object. -To migrate to this version, please follow the guide: - -```diff --var web3 = require('web3'); -+var Web3 = require('web3'); -+var web3 = new Web3(); -``` - - -# Ethereum JavaScript API - -[![Join the chat at https://gitter.im/ethereum/web3.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ethereum/web3.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -This is the Ethereum compatible [JavaScript API](https://github.com/ethereum/wiki/wiki/JavaScript-API) -which implements the [Generic JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) spec. It's available on npm as a node module, for bower and component as an embeddable js and as a meteor.js package. - -[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![dependency status][dep-image]][dep-url] [![dev dependency status][dep-dev-image]][dep-dev-url][![Coverage Status][coveralls-image]][coveralls-url][![Stories in Ready][waffle-image]][waffle-url] - - - -You need to run a local Ethereum node to use this library. - -[Documentation](https://github.com/ethereum/wiki/wiki/JavaScript-API) - -## Installation - -### Node.js - -```bash -npm install web3 -``` - -### Meteor.js - -```bash -meteor add ethereum:web3 -``` - -### As Browser module -Bower - -```bash -bower install web3 -``` - -Component - -```bash -component install ethereum/web3.js -``` - -* Include `ethereum.min.js` in your html file. (not required for the meteor package) - -## Usage -Use the `web3` object directly from global namespace: - -```js -console.log(web3); // {eth: .., shh: ...} // it's here! -``` - -Set a provider (HttpProvider) - -```js -web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); -``` - -There you go, now you can use it: - -```js -var coinbase = web3.eth.coinbase; -var balance = web3.eth.getBalance(coinbase); -``` - -You can find more examples in [`example`](https://github.com/ethereum/web3.js/tree/master/example) directory. - - -## Contribute! - -### Requirements - -* Node.js -* npm - -```bash -sudo apt-get update -sudo apt-get install nodejs -sudo apt-get install npm -sudo apt-get install nodejs-legacy -``` - -### Building (gulp) - -```bash -npm run-script build -``` - - -### Testing (mocha) - -```bash -npm test -``` - -[npm-image]: https://badge.fury.io/js/web3.png -[npm-url]: https://npmjs.org/package/web3 -[travis-image]: https://travis-ci.org/ethereum/web3.js.svg -[travis-url]: https://travis-ci.org/ethereum/web3.js -[dep-image]: https://david-dm.org/ethereum/web3.js.svg -[dep-url]: https://david-dm.org/ethereum/web3.js -[dep-dev-image]: https://david-dm.org/ethereum/web3.js/dev-status.svg -[dep-dev-url]: https://david-dm.org/ethereum/web3.js#info=devDependencies -[coveralls-image]: https://coveralls.io/repos/ethereum/web3.js/badge.svg?branch=master -[coveralls-url]: https://coveralls.io/r/ethereum/web3.js?branch=master -[waffle-image]: https://badge.waffle.io/ethereum/web3.js.svg?label=ready&title=Ready -[waffle-url]: http://waffle.io/ethereum/web3.js - diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower.json b/node_modules/web3-provider-engine/node_modules/web3/bower.json deleted file mode 100644 index 133eff2..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "web3", - "namespace": "ethereum", - "version": "0.15.3", - "description": "Ethereum Compatible JavaScript API", - "main": [ - "./dist/web3.js", - "./dist/web3.min.js" - ], - "dependencies": { - "bignumber.js": ">=2.0.0", - "crypto-js": "~3.1.4" - }, - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js.git" - }, - "homepage": "https://github.com/ethereum/web3.js", - "bugs": { - "url": "https://github.com/ethereum/web3.js/issues" - }, - "keywords": [ - "ethereum", - "javascript", - "API" - ], - "authors": [ - { - "name": "Marek Kotewicz", - "email": "marek@ethdev.com", - "homepage": "https://github.com/debris" - }, - { - "name": "Marian Oancea", - "email": "marian@ethdev.com", - "homepage": "https://github.com/cubedro" - }, - { - "name": "Fabian Vogelsteller", - "email": "fabian@ethdev.com", - "homepage": "https://github.com/frozeman" - } - ], - "license": "LGPL-3.0", - "ignore": [ - "example", - "lib", - "node_modules", - "package.json", - "package.js", - ".versions", - ".bowerrc", - ".editorconfig", - ".gitignore", - ".jshintrc", - ".npmignore", - ".travis.yml", - "gulpfile.js", - "index.js", - "**/*.txt" - ] -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/.bower.json b/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/.bower.json deleted file mode 100644 index daab06d..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/.bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "bignumber.js", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "version": "2.0.5", - "_release": "2.0.5", - "_resolution": { - "type": "version", - "tag": "v2.0.5", - "commit": "c5eeb7e9ded3547ce27980f649a66ef167375cfb" - }, - "_source": "git://github.com/MikeMcl/bignumber.js.git", - "_target": ">=2.0.0", - "_originalSource": "bignumber.js" -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/LICENCE b/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/LICENCE deleted file mode 100644 index a5d1b40..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/LICENCE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT Expat Licence. - -Copyright (c) 2012 Michael Mclaughlin - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/README.md b/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/README.md deleted file mode 100644 index d72d14f..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/README.md +++ /dev/null @@ -1,324 +0,0 @@ -![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png) - -*WARNING: Critical division bug found in v2.0.0 - v2.0.3. Fixed in v2.0.4+* - -A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic. - -[![Build Status](https://travis-ci.org/MikeMcl/bignumber.js.svg)](https://travis-ci.org/MikeMcl/bignumber.js) - -
      - -## Features - - - Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal - - 8 KB minified and gzipped - - Simple API but full-featured - - Works with numbers with or without fraction digits in bases from 2 to 64 inclusive - - Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type - - Includes a `toFraction` and a correctly-rounded `squareRoot` method - - Supports cryptographically-secure pseudo-random number generation - - No dependencies - - Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only - - Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set - -![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png) - -If a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/). -It's less than half the size but only works with decimal numbers and only has half the methods. -It also does not allow `NaN` or `Infinity`, or have the configuration options of this library. - -See also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits. - -## Load - -The library is the single JavaScript file *bignumber.js* (or minified, *bignumber.min.js*). - -```html - -``` - -For [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry - - $ npm install bignumber.js - -```javascript -var BigNumber = require('bignumber.js'); -``` - -To load with AMD loader libraries such as [requireJS](http://requirejs.org/): - -```javascript -require(['path/to/bignumber'], function(BigNumber) { - // Use BigNumber here in local scope. No global BigNumber. -}); -``` - -## Use - -*In all examples below, `var`, semicolons and `toString` calls are not shown. -If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* - -The library exports a single function: `BigNumber`, the constructor of BigNumber instances. - -It accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object, - -```javascript -x = new BigNumber(123.4567) -y = BigNumber('123456.7e-3') -z = new BigNumber(x) -x.equals(y) && y.equals(z) && x.equals(z) // true -``` - - -and a base from 2 to 64 inclusive can be specified. - -```javascript -x = new BigNumber(1011, 2) // "11" -y = new BigNumber('zz.9', 36) // "1295.25" -z = x.plus(y) // "1306.25" -``` - -A BigNumber is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new BigNumber(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a BigNumber can be chained. - -```javascript -x.dividedBy(y).plus(z).times(9).floor() -x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil() -``` - -Many method names have a shorter alias. - -```javascript -x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true -x.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true -``` - -Like JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods - -```javascript -x = new BigNumber(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -x.toNumber() // 255.5 -``` - - and a base can be specified for `toString`. - - ```javascript - x.toString(16) // "ff.8" - ``` - -There is also a `toFormat` method which may be useful for internationalisation - -```javascript -y = new BigNumber('1234567.898765') -y.toFormat(2) // "1,234,567.90" -``` - -The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor. - -The other arithmetic operations always give the exact result. - -```javascript -BigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) -// Alternatively, BigNumber.config( 10, 4 ); - -x = new BigNumber(2); -y = new BigNumber(3); -z = x.div(y) // "0.6666666667" -z.sqrt() // "0.8164965809" -z.pow(-3) // "3.3749999995" -z.toString(2) // "0.1010101011" -z.times(z) // "0.44444444448888888889" -z.times(z).round(10) // "0.4444444445" -``` - -There is a `toFraction` method with an optional *maximum denominator* argument - -```javascript -y = new BigNumber(355) -pi = y.dividedBy(113) // "3.1415929204" -pi.toFraction() // [ "7853982301", "2500000000" ] -pi.toFraction(1000) // [ "355", "113" ] -``` - -and `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values. - -```javascript -x = new BigNumber(NaN) // "NaN" -y = new BigNumber(Infinity) // "Infinity" -x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true -``` - -The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - - -```javascript -x = new BigNumber(-123.456); -x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - - -Multiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it. - -```javascript -// Set DECIMAL_PLACES for the original BigNumber constructor -BigNumber.config({ DECIMAL_PLACES: 10 }) - -// Create another BigNumber constructor, optionally passing in a configuration object -BN = BigNumber.another({ DECIMAL_PLACES: 5 }) - -x = new BigNumber(1) -y = new BN(1) - -x.div(3) // '0.3333333333' -y.div(3) // '0.33333' -``` - -For futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. - -## Test - -The *test* directory contains the test scripts for each method. - -The tests can be run with Node or a browser. For Node use - - $ npm test - -or - - $ node test/every-test - -To test a single method, e.g. - - $ node test/toFraction - -For the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. - -*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. - -## Versions - -This is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported. - -## Performance - -See the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory. - -## Build - -For Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed - - npm install uglify-js -g - -then - - npm run build - -will create *bignumber.min.js*. - -A source map will also be created in the *doc* directory. - -## Feedback - -Open an issue, or email - -Michael - -M8ch88l@gmail.com - -## Licence - -MIT. - -See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE). - -## Change Log - -####2.0.5 -* 25/03/2015 -* Amend README. Remove bitcoin address. - -####2.0.4 -* 25/03/2015 -* Critical bugfix #58: division. - -####2.0.3 -* 18/02/2015 -* Amend README. Add source map. - -####2.0.2 -* 18/02/2015 -* Correct links. - -####2.0.1 -* 18/02/2015 -* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods. -* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. -* Add an `another` method to enable multiple independent constructors to be created. -* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. -* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. -* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. -* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. -* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. -* Improve code quality. -* Improve documentation. - -####2.0.0 -* 29/12/2014 -* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. -* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. -* Store a BigNumber's coefficient in base 1e14, rather than base 10. -* Add fast path for integers to BigNumber constructor. -* Incorporate the library into the online documentation. - -####1.5.0 -* 13/11/2014 -* Add `toJSON` and `decimalPlaces` methods. - -####1.4.1 -* 08/06/2014 -* Amend README. - -####1.4.0 -* 08/05/2014 -* Add `toNumber`. - -####1.3.0 -* 08/11/2013 -* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. -* Maximum radix to 64. - -####1.2.1 -* 17/10/2013 -* Sign of zero when x < 0 and x + (-x) = 0. - -####1.2.0 -* 19/9/2013 -* Throw Error objects for stack. - -####1.1.1 -* 22/8/2013 -* Show original value in constructor error message. - -####1.1.0 -* 1/8/2013 -* Allow numbers with trailing radix point. - -####1.0.1 -* Bugfix: error messages with incorrect method name - -####1.0.0 -* 8/11/2012 -* Initial release diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/bignumber.js b/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/bignumber.js deleted file mode 100644 index 4dbe3cd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/bignumber.js +++ /dev/null @@ -1,2667 +0,0 @@ -/*! bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.5 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base/2 - - n = mathfloor( base / ( yc[0] + 1 ) ); - - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - cmp = compare( prod, rem, prodL, remL ); - - // product > remainder. - if ( cmp == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - } - } else { - - // cmp is -1. - // If n is 0, there is no need to compare yc and rem again - // below, so change cmp to 1 to avoid it. - // If n is 1, compare yc and rem again below. - if ( n == 0 ) cmp = n = 1; - prod = yc.slice(); - } - - prodL = prod.length; - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - while ( ( cmp = compare( yc, rem, yL, remL ) ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( cmp && rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/bignumber.min.js b/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/bignumber.min.js deleted file mode 100644 index 982112e..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/bignumber.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */ -!function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,k);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+O.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,b,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&L(M,b,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=k;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=O.charAt(g[d++]));e=l(e,u)}return e}function _(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:k,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&B>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||B>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function x(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[n%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==N&&(a[0]=1));break}if(a[l]+=s,a[l]!=N)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(k=0|e),r[n]=k,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(B=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(B=-($=0|(0>e?-e:e)))),r[n]=[B,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?F:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h||"object"!=typeof h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return x(arguments,T.lt)},a.min=function(){return x(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,b,O,S,R,A,E,D,_,x,F=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*F:F/0:0/0);for(v=new a(F),b=v.c=[],c=i.e-o.e,F=u+c+1,f||(f=N,c=t(i.e/y)-t(o.e/y),F=F/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>F)b.push(1),g=!0;else{for(E=I.length,_=L.length,h=0,F+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),_=L.length,E=I.length),A=_,O=I.slice(0,_),S=O.length;_>S;O[S++]=0);x=L.slice(),x.unshift(0),D=L[0],L[1]>=f/2&&D++;do{if(p=0,l=n(L,O,_,S),0>l){if(R=O[0],_!=S&&(R=R*f+(O[1]||0)),p=m(R/D),p>1?(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=O.length,l=n(d,O,w,S),1==l&&(p--,r(d,w>_?x:L,w,f))):(0==p&&(l=p=1),d=L.slice()),w=d.length,S>w&&d.unshift(0),r(O,d,S,f),S=O.length,-1==l)for(;(l=n(L,O,_,S))<1;)p++,r(O,S>_?x:L,S,f),S=O.length}else 0===l&&(p++,O=[0]);b[h++]=p,l&&O[0]?O[S++]=I[A]||0:(O=[I[A]],S=1)}while((A++=10;F/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])(?=\w[\w.]*$)/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,k)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(0/0);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:0/0);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==k?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=N-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/N|0,f[n]%=N;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:k),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?0/0:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=O,O=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=N,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=O[--s]%v,h=O[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:k,e?U(t,e,n):t},T.toExponential=function(e,n){return _(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return _(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=_(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,k).minus(g).abs().cmp(C(f,t,o,k).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){var e=this;return+e||(e.s?0*e.s:0/0)},T.toPower=T.pow=function(e){var n,t,r=m(0>e?-e:+e),i=this;if(!H(e,-S,S,23,"exponent")&&(!isFinite(e)||r>S&&(e/=0)||parseFloat(e)!=e&&!(e=0/0)))return new a(Math.pow(+i,e));for(n=J?d(J/y+2):0,t=new a(q);;){if(r%2){if(t=t.times(i),!t.c)break;n&&t.c.length>n&&(t.c.length=n)}if(r=m(r/2),!r)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>e&&(t=q.div(t)),n?U(t,J,k):t},T.toPrecision=function(e,n){return _(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):B>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=O.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",b="number type has more than 15 significant digits",O="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",N=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if(a=n(),"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e.BigNumber=a}(this); -//# sourceMappingURL=doc/bignumber.js.map \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/doc/API.html b/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/doc/API.html deleted file mode 100644 index e0b173f..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/doc/API.html +++ /dev/null @@ -1,2160 +0,0 @@ - - - - - - -bignumber.js API - - - - - - -
      - -

      bignumber.js

      - -

      A JavaScript library for arbitrary-precision arithmetic.

      -

      Hosted on GitHub.

      - -

      API

      - -

      - See the README on GitHub for a - quick-start introduction. -

      -

      - In all examples below, var and semicolons are not shown, and if a commented-out - value is in quotes it means toString has been called on the preceding expression. -

      - - -

      CONSTRUCTOR

      - -
      - BigNumberBigNumber(value [, base]) ⇒ BigNumber -
      -
      -
      value
      -
      - number|string|BigNumber: see RANGE for - range. -
      -
      - A numeric value. -
      -
      - Legitimate values include ±0, ±Infinity and - NaN. -
      -
      - Values of type number with more than 15 significant digits are - considered invalid (if ERRORS is true) as calling - toString or valueOf on - such numbers may not result in the intended value. -
      console.log( 823456789123456.3 );    // 823456789123456.2
      -
      -
      - There is no limit to the number of digits of a value of type string (other than - that of JavaScript's maximum array size). -
      -
      - Decimal string values may be in exponential, as well as normal (fixed-point) notation. - Non-decimal values must be in normal notation. -
      -
      - String values in hexadecimal literal form, e.g. '0xff', are valid, as are - string values with the octal and binary prefixs '0o' and '0b'. - String values in octal literal form without the prefix will be interpreted as - decimals, e.g. '011' is interpreted as 11, not 9. -
      -
      Values in any base may have fraction digits.
      -
      - For bases from 10 to 36, lower and/or upper case letters can be - used to represent values from 10 to 35. -
      -
      - For bases above 36, a-z represents values from 10 to - 35, A-Z from 36 to 61, and - $ and _ represent 62 and 63 respectively - (this can be changed by editing the ALPHABET variable near the top of the - source file). -
      -
      -
      -
      base
      -
      - number: integer, 2 to 64 inclusive -
      -
      The base of value.
      -
      - If base is omitted, or is null or undefined, base - 10 is assumed. -
      -
      -
      -

      Returns a new instance of a BigNumber object.

      -

      - If a base is specified, the value is rounded according to - the current DECIMAL_PLACES and - ROUNDING_MODE configuration. -

      -

      - See Errors for the treatment of an invalid value or - base. -

      -
      -x = new BigNumber(9)                       // '9'
      -y = new BigNumber(x)                       // '9'
      -
      -// 'new' is optional if ERRORS is false
      -BigNumber(435.345)                         // '435.345'
      -
      -new BigNumber('5032485723458348569331745.33434346346912144534543')
      -new BigNumber('4.321e+4')                  // '43210'
      -new BigNumber('-735.0918e-430')            // '-7.350918e-428'
      -new BigNumber(Infinity)                    // 'Infinity'
      -new BigNumber(NaN)                         // 'NaN'
      -new BigNumber('.5')                        // '0.5'
      -new BigNumber('+2')                        // '2'
      -new BigNumber(-10110100.1, 2)              // '-180.5'
      -new BigNumber(-0b10110100.1)               // '-180.5'
      -new BigNumber('123412421.234324', 5)       // '607236.557696'
      -new BigNumber('ff.8', 16)                  // '255.5'
      -new BigNumber('0xff.8')                    // '255.5'
      -

      - The following throws 'not a base 2 number' if - ERRORS is true, otherwise it returns a BigNumber with value - NaN. -

      -
      new BigNumber(9, 2)
      -

      - The following throws 'number type has more than 15 significant digits' if - errors is true, otherwise it returns a BigNumber with value - 96517860459076820. -

      -
      new BigNumber(96517860459076817.4395)
      -

      - The following throws 'not a number' if ERRORS - is true, otherwise it returns a BigNumber with value NaN. -

      -
      new BigNumber('blurgh')
      -

      - A value is only rounded by the constructor if a base is specified. -

      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -new BigNumber(1.23456789)                  // '1.23456789'
      -new BigNumber(1.23456789, 10)              // '1.23457'
      - - - -

      Methods

      -

      The static methods of a BigNumber constructor.

      - - - - -
      - another.another([obj]) ⇒ BigNumber constructor -
      -

      obj: object

      -

      - Returns a new independent BigNumber constructor with configuration as described by - obj (see config), or with the default - configuration if obj is null or undefined. -

      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -BN = BigNumber.another({ DECIMAL_PLACES: 9 })
      -
      -x = new BigNumber(1)
      -y = new BN(1)
      -
      -x.div(3)                        // 0.33333
      -y.div(3)                        // 0.333333333
      -
      -// BN = BigNumber.another({ DECIMAL_PLACES: 9 }) is equivalent to:
      -BN = BigNumber.another()
      -BN.config({ DECIMAL_PLACES: 9 })
      - - - -
      configconfig([obj]) ⇒ object
      -

      - obj: object: an object that contains some or all of the following - properties. -

      -

      Configures the 'global' settings for this particular BigNumber constructor.

      -

      Note: the configuration can also be supplied as an argument list, see below.

      -
      -
      DECIMAL_PLACES
      -
      - number: integer, 0 to 1e+9 inclusive
      - Default value: 20 -
      -
      - The maximum number of decimal places of the results of operations involving - division, i.e. division, square root and base conversion operations, and power - operations with negative exponents.
      -
      -
      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -BigNumber.config(5)    // equivalent
      -
      - - - -
      ROUNDING_MODE
      -
      - number: integer, 0 to 8 inclusive
      - Default value: 4 (ROUND_HALF_UP) -
      -
      - The rounding mode used in the above operations and the default rounding mode of - round, - toExponential, - toFixed, - toFormat and - toPrecision. -
      -
      The modes are available as enumerated properties of the BigNumber constructor.
      -
      -
      BigNumber.config({ ROUNDING_MODE: 0 })
      -BigNumber.config(null, BigNumber.ROUND_UP)    // equivalent
      -
      - - - -
      EXPONENTIAL_AT
      -
      - number: integer, magnitude 0 to 1e+9 inclusive, or -
      - number[]: [ integer -1e+9 to 0 inclusive, integer - 0 to 1e+9 inclusive ]
      - Default value: [-7, 20] -
      -
      - The exponent value(s) at which toString returns exponential notation. -
      -
      - If a single number is assigned, the value is the exponent magnitude.
      - If an array of two numbers is assigned then the first number is the negative exponent - value at and beneath which exponential notation is used, and the second number is the - positive exponent value at and above which the same. -
      -
      - For example, to emulate JavaScript numbers in terms of the exponent values at which they - begin to use exponential notation, use [-7, 20]. -
      -
      -
      BigNumber.config({ EXPONENTIAL_AT: 2 })
      -new BigNumber(12.3)         // '12.3'        e is only 1
      -new BigNumber(123)          // '1.23e+2'
      -new BigNumber(0.123)        // '0.123'       e is only -1
      -new BigNumber(0.0123)       // '1.23e-2'
      -
      -BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
      -new BigNumber(123456789)    // '123456789'   e is only 8
      -new BigNumber(0.000000123)  // '1.23e-7'
      -
      -// Almost never return exponential notation:
      -BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
      -
      -// Always return exponential notation:
      -BigNumber.config({ EXPONENTIAL_AT: 0 })
      -
      -
      - Regardless of the value of EXPONENTIAL_AT, the toFixed method - will always return a value in normal notation and the toExponential method - will always return a value in exponential form. -
      -
      - Calling toString with a base argument, e.g. toString(10), will - also always return normal notation. -
      - - - -
      RANGE
      -
      - number: integer, magnitude 1 to 1e+9 inclusive, or -
      - number[]: [ integer -1e+9 to -1 inclusive, integer - 1 to 1e+9 inclusive ]
      - Default value: [-1e+9, 1e+9] -
      -
      - The exponent value(s) beyond which overflow to Infinity and underflow to - zero occurs. -
      -
      - If a single number is assigned, it is the maximum exponent magnitude: values wth a - positive exponent of greater magnitude become Infinity and those with a - negative exponent of greater magnitude become zero. -
      - If an array of two numbers is assigned then the first number is the negative exponent - limit and the second number is the positive exponent limit. -
      -
      - For example, to emulate JavaScript numbers in terms of the exponent values at which they - become zero and Infinity, use [-324, 308]. -
      -
      -
      BigNumber.config({ RANGE: 500 })
      -BigNumber.config().RANGE     // [ -500, 500 ]
      -new BigNumber('9.999e499')   // '9.999e+499'
      -new BigNumber('1e500')       // 'Infinity'
      -new BigNumber('1e-499')      // '1e-499'
      -new BigNumber('1e-500')      // '0'
      -
      -BigNumber.config({ RANGE: [-3, 4] })
      -new BigNumber(99999)         // '99999'      e is only 4
      -new BigNumber(100000)        // 'Infinity'   e is 5
      -new BigNumber(0.001)         // '0.01'       e is only -3
      -new BigNumber(0.0001)        // '0'          e is -4
      -
      -
      - The largest possible magnitude of a finite BigNumber is - 9.999...e+1000000000.
      - The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. -
      - - - -
      ERRORS
      -
      - boolean|number: true, false, 0 or - 1.
      - Default value: true -
      -
      - The value that determines whether BigNumber Errors are thrown.
      - If ERRORS is false, no errors will be thrown. -
      -
      See Errors.
      -
      BigNumber.config({ ERRORS: false })
      - - - -
      CRYPTO
      -
      - boolean|number: true, false, 0 or - 1.
      - Default value: false -
      -
      - The value that determines whether cryptographically-secure pseudo-random number - generation is used. -
      -
      - If CRYPTO is set to true then the - random method will generate random digits using - crypto.getRandomValues in browsers that support it, or - crypto.randomBytes if using a version of Node.js that supports it. -
      -
      - If neither function is supported by the host environment then attempting to set - CRYPTO to true will fail, and if ERRORS - is true an exception will be thrown. -
      -
      - If CRYPTO is false then the source of randomness used will be - Math.random (which is assumed to generate at least 30 bits of - randomness). -
      -
      See random.
      -
      -
      BigNumber.config({ CRYPTO: true })
      -BigNumber.config().CRYPTO       // true
      -BigNumber.random()              // 0.54340758610486147524
      -
      - - - -
      MODULO_MODE
      -
      - number: integer, 0 to 9 inclusive
      - Default value: 1 (ROUND_DOWN) -
      -
      The modulo mode used when calculating the modulus: a mod n.
      -
      - The quotient, q = a / n, is calculated according to the - ROUNDING_MODE that corresponds to the chosen - MODULO_MODE. -
      -
      The remainder, r, is calculated as: r = a - n * q.
      -
      - The modes that are most commonly used for the modulus/remainder operation are shown in - the following table. Although the other rounding modes can be used, they may not give - useful results. -
      -
      - - - - - - - - - - - - - - - - - - - - - - -
      PropertyValueDescription
      ROUND_UP0 - The remainder is positive if the dividend is negative, otherwise it is negative. -
      ROUND_DOWN1 - The remainder has the same sign as the dividend.
      - This uses 'truncating division' and matches the behaviour of JavaScript's - remainder operator %. -
      ROUND_FLOOR3 - The remainder has the same sign as the divisor.
      - This matches Python's % operator. -
      ROUND_HALF_EVEN6The IEEE 754 remainder function.
      EUCLID9 - The remainder is always positive. Euclidian division:
      - q = sign(n) * floor(a / abs(n)) -
      -
      -
      - The rounding/modulo modes are available as enumerated properties of the BigNumber - constructor. -
      -
      See modulo.
      -
      -
      BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
      -BigNumber.config({ MODULO_MODE: 9 })          // equivalent
      -
      - - - -
      POW_PRECISION
      -
      - number: integer, 0 to 1e+9 inclusive.
      - Default value: 100 -
      -
      - The maximum number of significant digits of the result of the power operation. -
      -
      If set to 0, the number of signifcant digits will not be limited.
      -
      See toPower.
      -
      BigNumber.config({ POW_PRECISION: 100 })
      - - - -
      FORMAT
      -
      object
      -
      - The FORMAT object configures the format of the string returned by the - toFormat method. -
      -
      - The example below shows the properties of the FORMAT object that are - recognised, and their default values. -
      -
      - Unlike the other configuration properties, the values of the properties of the - FORMAT object will not be checked for validity. The existing - FORMAT object will simply be replaced by the object that is passed in. - Note that all the properties shown below do not have to be included. -
      -
      See toFormat for examples of usage.
      -
      -
      -BigNumber.config({
      -    FORMAT: {
      -        // the decimal separator
      -        decimalSeparator: '.',
      -        // the grouping separator of the integer part
      -        groupSeparator: ',',
      -        // the primary grouping size of the integer part
      -        groupSize: 3,
      -        // the secondary grouping size of the integer part
      -        secondaryGroupSize: 0,
      -        // the grouping separator of the fraction part
      -        fractionGroupSeparator: ' ',
      -        // the grouping size of the fraction part
      -        fractionGroupSize: 0
      -    }
      -});
      -
      -
      -
      -

      Returns an object with the above properties and their current values.

      -

      - If the value to be assigned to any of the above properties is null or - undefined it is ignored. -

      -

      See Errors for the treatment of invalid values.

      -
      -BigNumber.config({
      -    DECIMAL_PLACES: 40,
      -    ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
      -    EXPONENTIAL_AT: [-10, 20],
      -    RANGE: [-500, 500],
      -    ERRORS: true,
      -    CRYPTO: true,
      -    MODULO_MODE: BigNumber.ROUND_FLOOR,
      -    POW_PRECISION: 80,
      -    FORMAT: {
      -        groupSize: 3,
      -        groupSeparator: ' ',
      -        decimalSeparator: ','
      -    }
      -});
      -
      -// Alternatively but equivalently (excluding FORMAT):
      -BigNumber.config( 40, 7, [-10, 20], 500, 1, 1, 3, 80 )
      -
      -obj = BigNumber.config();
      -obj.ERRORS       // true
      -obj.RANGE        // [-500, 500]
      - - - -
      - max.max([arg1 [, arg2, ...]]) ⇒ BigNumber -
      -

      - arg1, arg2, ...: number|string|BigNumber
      - See BigNumber for further parameter details. -

      -

      - Returns a BigNumber whose value is the maximum of arg1, - arg2,... . -

      -

      The argument to this method can also be an array of values.

      -

      The return value is always exact and unrounded.

      -
      x = new BigNumber('3257869345.0378653')
      -BigNumber.max(4e9, x, '123456789.9')          // '4000000000'
      -
      -arr = [12, '13', new BigNumber(14)]
      -BigNumber.max(arr)                            // '14'
      - - - -
      - min.min([arg1 [, arg2, ...]]) ⇒ BigNumber -
      -

      - arg1, arg2, ...: number|string|BigNumber
      - See BigNumber for further parameter details. -

      -

      - Returns a BigNumber whose value is the minimum of arg1, - arg2,... . -

      -

      The argument to this method can also be an array of values.

      -

      The return value is always exact and unrounded.

      -
      x = new BigNumber('3257869345.0378653')
      -BigNumber.min(4e9, x, '123456789.9')          // '123456789.9'
      -
      -arr = [2, new BigNumber(-14), '-15.9999', -12]
      -BigNumber.min(arr)                            // '-15.9999'
      - - - -
      - random.random([dp]) ⇒ BigNumber -
      -

      dp: number: integer, 0 to 1e+9 inclusive

      -

      - Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and - less than 1. -

      -

      - The return value will have dp decimal places (or less if trailing zeros are - produced).
      - If dp is omitted then the number of decimal places will default to the current - DECIMAL_PLACES setting. -

      -

      - Depending on the value of this BigNumber constructor's - CRYPTO setting and the support for the - crypto object in the host environment, the random digits of the return value are - generated by either Math.random (fastest), crypto.getRandomValues - (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). -

      -

      - If CRYPTO is true, i.e. one of the - crypto methods is to be used, the value of a returned BigNumber should be - cryptographically-secure and statistically indistinguishable from a random value. -

      -
      BigNumber.config({ DECIMAL_PLACES: 10 })
      -BigNumber.random()              // '0.4117936847'
      -BigNumber.random(20)            // '0.78193327636914089009'
      - - - -

      Properties

      -

      - The library's enumerated rounding modes are stored as properties of the constructor.
      - (They are not referenced internally by the library itself.) -

      -

      - Rounding modes 0 to 6 (inclusive) are the same as those of Java's - BigDecimal class. -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      PropertyValueDescription
      ROUND_UP0Rounds away from zero
      ROUND_DOWN1Rounds towards zero
      ROUND_CEIL2Rounds towards Infinity
      ROUND_FLOOR3Rounds towards -Infinity
      ROUND_HALF_UP4 - Rounds towards nearest neighbour.
      - If equidistant, rounds away from zero -
      ROUND_HALF_DOWN5 - Rounds towards nearest neighbour.
      - If equidistant, rounds towards zero -
      ROUND_HALF_EVEN6 - Rounds towards nearest neighbour.
      - If equidistant, rounds towards even neighbour -
      ROUND_HALF_CEIL7 - Rounds towards nearest neighbour.
      - If equidistant, rounds towards Infinity -
      ROUND_HALF_FLOOR8 - Rounds towards nearest neighbour.
      - If equidistant, rounds towards -Infinity -
      -
      -BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
      -BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
      - - -

      INSTANCE

      - -

      Methods

      -

      The methods inherited by a BigNumber instance from its constructor's prototype object.

      -

      A BigNumber is immutable in the sense that it is not changed by its methods.

      -

      - The treatment of ±0, ±Infinity and NaN is - consistent with how JavaScript treats these values. -

      -

      - Many method names have a shorter alias.
      - (Internally, the library always uses the shorter method names.) -

      - - - -
      absoluteValue.abs() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of - this BigNumber. -

      -

      The return value is always exact and unrounded.

      -
      -x = new BigNumber(-0.8)
      -y = x.absoluteValue()           // '0.8'
      -z = y.abs()                     // '0.8'
      - - - -
      ceil.ceil() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the value of this BigNumber rounded to - a whole number in the direction of positive Infinity. -

      -
      -x = new BigNumber(1.3)
      -x.ceil()                        // '2'
      -y = new BigNumber(-1.8)
      -y.ceil()                        // '-1'
      - - - -
      comparedTo.cmp(n [, base]) ⇒ number
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      - - - - - - - - - - - - - - - - - - -
      Returns 
      1If the value of this BigNumber is greater than the value of n
      -1If the value of this BigNumber is less than the value of n
      0If this BigNumber and n have the same value
      nullIf the value of either this BigNumber or n is NaN
      -
      -x = new BigNumber(Infinity)
      -y = new BigNumber(5)
      -x.comparedTo(y)                 // 1
      -x.comparedTo(x.minus(1))        // 0
      -y.cmp(NaN)                      // null
      -y.cmp('110', 2)                 // -1
      - - - -
      decimalPlaces.dp() ⇒ number
      -

      - Return the number of decimal places of the value of this BigNumber, or null if - the value of this BigNumber is ±Infinity or NaN. -

      -
      -x = new BigNumber(123.45)
      -x.decimalPlaces()               // 2
      -y = new BigNumber('9.9e-101')
      -y.dp()                          // 102
      - - - -
      dividedBy.div(n [, base]) ⇒ BigNumber -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns a BigNumber whose value is the value of this BigNumber divided by - n, rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

      -
      -x = new BigNumber(355)
      -y = new BigNumber(113)
      -x.dividedBy(y)                  // '3.14159292035398230088'
      -x.div(5)                        // '71'
      -x.div(47, 16)                   // '5'
      - - - -
      - dividedToIntegerBy.divToInt(n [, base]) ⇒ - BigNumber -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Return a BigNumber whose value is the integer part of dividing the value of this BigNumber by - n. -

      -
      -x = new BigNumber(5)
      -y = new BigNumber(3)
      -x.dividedToIntegerBy(y)         // '1'
      -x.divToInt(0.7)                 // '7'
      -x.divToInt('0.f', 16)           // '5'
      - - - -
      equals.eq(n [, base]) ⇒ boolean
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber equals the value of n, - otherwise returns false.
      - As with JavaScript, NaN does not equal NaN. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -0 === 1e-324                    // true
      -x = new BigNumber(0)
      -x.equals('1e-324')              // false
      -BigNumber(-0).eq(x)             // true  ( -0 === 0 )
      -BigNumber(255).eq('ff', 16)     // true
      -
      -y = new BigNumber(NaN)
      -y.equals(NaN)                   // false
      - - - -
      floor.floor() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the value of this BigNumber rounded to a whole number in - the direction of negative Infinity. -

      -
      -x = new BigNumber(1.8)
      -x.floor()                       // '1'
      -y = new BigNumber(-1.3)
      -y.floor()                       // '-2'
      - - - -
      greaterThan.gt(n [, base]) ⇒ boolean
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber is greater than the value of - n, otherwise returns false. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -0.1 > (0.3 - 0.2)                           // true
      -x = new BigNumber(0.1)
      -x.greaterThan(BigNumber(0.3).minus(0.2))    // false
      -BigNumber(0).gt(x)                          // false
      -BigNumber(11, 3).gt(11.1, 2)                // true
      - - - -
      - greaterThanOrEqualTo.gte(n [, base]) ⇒ boolean -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber is greater than or equal to the value - of n, otherwise returns false. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -(0.3 - 0.2) >= 0.1                   // false
      -x = new BigNumber(0.3).minus(0.2)
      -x.greaterThanOrEqualTo(0.1)          // true
      -BigNumber(1).gte(x)                  // true
      -BigNumber(10, 18).gte('i', 36)       // true
      - - - -
      isFinite.isFinite() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is a finite number, otherwise - returns false. -

      -

      - The only possible non-finite values of a BigNumber are NaN, Infinity - and -Infinity. -

      -
      -x = new BigNumber(1)
      -x.isFinite()                    // true
      -y = new BigNumber(Infinity)
      -y.isFinite()                    // false
      -

      - Note: The native method isFinite() can be used if - n <= Number.MAX_VALUE. -

      - - - -
      isInteger.isInt() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is a whole number, otherwise returns - false. -

      -
      -x = new BigNumber(1)
      -x.isInteger()                   // true
      -y = new BigNumber(123.456)
      -y.isInt()                       // false
      - - - -
      isNaN.isNaN() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is NaN, otherwise - returns false. -

      -
      -x = new BigNumber(NaN)
      -x.isNaN()                       // true
      -y = new BigNumber('Infinity')
      -y.isNaN()                       // false
      -

      Note: The native method isNaN() can also be used.

      - - - -
      isNegative.isNeg() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is negative, otherwise returns - false. -

      -
      -x = new BigNumber(-0)
      -x.isNegative()                  // true
      -y = new BigNumber(2)
      -y.isNeg                         // false
      -

      Note: n < 0 can be used if n <= -Number.MIN_VALUE.

      - - - -
      isZero.isZero() ⇒ boolean
      -

      - Returns true if the value of this BigNumber is zero or minus zero, otherwise - returns false. -

      -
      -x = new BigNumber(-0)
      -x.isZero() && x.isNeg()         // true
      -y = new BigNumber(Infinity)
      -y.isZero()                      // false
      -

      Note: n == 0 can be used if n >= Number.MIN_VALUE.

      - - - -
      lessThan.lt(n [, base]) ⇒ boolean
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber is less than the value of - n, otherwise returns false. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -(0.3 - 0.2) < 0.1                     // true
      -x = new BigNumber(0.3).minus(0.2)
      -x.lessThan(0.1)                       // false
      -BigNumber(0).lt(x)                    // true
      -BigNumber(11.1, 2).lt(11, 3)          // true
      - - - -
      - lessThanOrEqualTo.lte(n [, base]) ⇒ boolean -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns true if the value of this BigNumber is less than or equal to the value of - n, otherwise returns false. -

      -

      Note: This method uses the comparedTo method internally.

      -
      -0.1 <= (0.3 - 0.2)                                // false
      -x = new BigNumber(0.1)
      -x.lessThanOrEqualTo(BigNumber(0.3).minus(0.2))    // true
      -BigNumber(-1).lte(x)                              // true
      -BigNumber(10, 18).lte('i', 36)                    // true
      - - - -
      - minus.minus(n [, base]) ⇒ BigNumber -
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      Returns a BigNumber whose value is the value of this BigNumber minus n.

      -

      The return value is always exact and unrounded.

      -
      -0.3 - 0.1                       // 0.19999999999999998
      -x = new BigNumber(0.3)
      -x.minus(0.1)                    // '0.2'
      -x.minus(0.6, 20)                // '0'
      - - - -
      modulo.mod(n [, base]) ⇒ BigNumber
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      - Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. - the integer remainder of dividing this BigNumber by n. -

      -

      - The value returned, and in particular its sign, is dependent on the value of the - MODULO_MODE setting of this BigNumber constructor. - If it is 1 (default value), the result will have the same sign as this BigNumber, - and it will match that of Javascript's % operator (within the limits of double - precision) and BigDecimal's remainder method. -

      -

      The return value is always exact and unrounded.

      -

      - See MODULO_MODE for a description of the other - modulo modes. -

      -
      -1 % 0.9                         // 0.09999999999999998
      -x = new BigNumber(1)
      -x.modulo(0.9)                   // '0.1'
      -y = new BigNumber(33)
      -y.mod('a', 33)                  // '3'
      - - - -
      negated.neg() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by - -1. -

      -
      -x = new BigNumber(1.8)
      -x.negated()                     // '-1.8'
      -y = new BigNumber(-1.3)
      -y.neg()                         // '1.3'
      - - - -
      plus.plus(n [, base]) ⇒ BigNumber
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      Returns a BigNumber whose value is the value of this BigNumber plus n.

      -

      The return value is always exact and unrounded.

      -
      -0.1 + 0.2                       // 0.30000000000000004
      -x = new BigNumber(0.1)
      -y = x.plus(0.2)                 // '0.3'
      -BigNumber(0.7).plus(x).plus(y)  // '1'
      -x.plus('0.1', 8)                // '0.225'
      - - - -
      precision.sd([z]) ⇒ number
      -

      - z: boolean|number: true, false, 0 - or 1 -

      -

      Returns the number of significant digits of the value of this BigNumber.

      -

      - If z is true or 1 then any trailing zeros of the - integer part of a number are counted as significant digits, otherwise they are not. -

      -
      -x = new BigNumber(1.234)
      -x.precision()                   // 4
      -y = new BigNumber(987000)
      -y.sd()                          // 3
      -y.sd(true)                      // 6
      - - - -
      round.round([dp [, rm]]) ⇒ BigNumber
      -

      - dp: number: integer, 0 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      - Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - rm to a maximum of dp decimal places. -

      -

      - if dp is omitted, or is null or undefined, the - return value is n rounded to a whole number.
      - if rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

      -
      -x = 1234.56
      -Math.round(x)                             // 1235
      -
      -y = new BigNumber(x)
      -y.round()                                 // '1235'
      -y.round(1)                                // '1234.6'
      -y.round(2)                                // '1234.56'
      -y.round(10)                               // '1234.56'
      -y.round(0, 1)                             // '1234'
      -y.round(0, 6)                             // '1235'
      -y.round(1, 1)                             // '1234.5'
      -y.round(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
      -y                                         // '1234.56'
      - - - -
      shift.shift(n) ⇒ BigNumber
      -

      - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

      -

      - Returns a BigNumber whose value is the value of this BigNumber shifted n places. -

      - The shift is of the decimal point, i.e. of powers of ten, and is to the left if n - is negative or to the right if n is positive. -

      -

      The return value is always exact and unrounded.

      -
      -x = new BigNumber(1.23)
      -x.shift(3)                      // '1230'
      -x.shift(-3)                     // '0.00123'
      - - - -
      squareRoot.sqrt() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the square root of the value of this BigNumber, - rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

      -

      - The return value will be correctly rounded, i.e. rounded as if the result was first calculated - to an infinite number of correct digits before rounding. -

      -
      -x = new BigNumber(16)
      -x.squareRoot()                  // '4'
      -y = new BigNumber(3)
      -y.sqrt()                        // '1.73205080756887729353'
      - - - -
      times.times(n [, base]) ⇒ BigNumber
      -

      - n: number|string|BigNumber
      - base: number
      - See BigNumber for further parameter details. -

      -

      Returns a BigNumber whose value is the value of this BigNumber times n.

      -

      The return value is always exact and unrounded.

      -
      -0.6 * 3                         // 1.7999999999999998
      -x = new BigNumber(0.6)
      -y = x.times(3)                  // '1.8'
      -BigNumber('7e+500').times(y)    // '1.26e+501'
      -x.times('-a', 16)               // '-6'
      - - - -
      - toDigits.toDigits([sd [, rm]]) ⇒ BigNumber -
      -

      - sd: number: integer, 1 to 1e+9 inclusive.
      - rm: number: integer, 0 to 8 inclusive. -

      -

      - Returns a BigNumber whose value is the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

      -

      - If sd is omitted or is null or undefined, the return - value will not be rounded.
      - If rm is omitted or is null or undefined, - ROUNDING_MODE will be used. -

      -

      - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

      -
      -BigNumber.config({ precision: 5, rounding: 4 })
      -x = new BigNumber(9876.54321)
      -
      -x.toSignificantDigits()                          // '9876.5'
      -x.toSignificantDigits(6)                         // '9876.54'
      -x.toSignificantDigits(6, BigNumber.ROUND_UP)     // '9876.55'
      -x.toSD(2)                                        // '9900'
      -x.toSD(2, 1)                                     // '9800'
      -x                                                // '9876.54321'
      - - - -
      - toExponential.toExponential([dp [, rm]]) ⇒ string -
      -

      - dp: number: integer, 0 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      - Returns a string representing the value of this BigNumber in exponential notation rounded - using rounding mode rm to dp decimal places, i.e with one digit - before the decimal point and dp digits after it. -

      -

      - If the value of this BigNumber in exponential notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

      -

      - If dp is omitted, or is null or undefined, the number - of digits after the decimal point defaults to the minimum number of digits necessary to - represent the value exactly.
      - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

      -
      -x = 45.6
      -y = new BigNumber(x)
      -x.toExponential()               // '4.56e+1'
      -y.toExponential()               // '4.56e+1'
      -x.toExponential(0)              // '5e+1'
      -y.toExponential(0)              // '5e+1'
      -x.toExponential(1)              // '4.6e+1'
      -y.toExponential(1)              // '4.6e+1'
      -y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
      -x.toExponential(3)              // '4.560e+1'
      -y.toExponential(3)              // '4.560e+1'
      - - - -
      - toFixed.toFixed([dp [, rm]]) ⇒ string -
      -

      - dp: number: integer, 0 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm. -

      -

      - If the value of this BigNumber in normal notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

      -

      - Unlike Number.prototype.toFixed, which returns exponential notation if a number - is greater or equal to 1021, this method will always return normal - notation. -

      -

      - If dp is omitted or is null or undefined, the return - value will be unrounded and in normal notation. This is also unlike - Number.prototype.toFixed, which returns the value to zero decimal places.
      - It is useful when fixed-point notation is required and the current - EXPONENTIAL_AT setting causes - toString to return exponential notation.
      - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

      -
      -x = 3.456
      -y = new BigNumber(x)
      -x.toFixed()                     // '3'
      -y.toFixed()                     // '3.456'
      -y.toFixed(0)                    // '3'
      -x.toFixed(2)                    // '3.46'
      -y.toFixed(2)                    // '3.46'
      -y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
      -x.toFixed(5)                    // '3.45600'
      -y.toFixed(5)                    // '3.45600'
      - - - -
      - toFormat.toFormat([dp [, rm]]) ⇒ string -
      -

      - dp: number: integer, 0 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      -

      - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm, and formatted - according to the properties of the FORMAT object. -

      -

      - See the examples below for the properties of the - FORMAT object, their types and their usage. -

      -

      - If dp is omitted or is null or undefined, then the - return value is not rounded to a fixed number of decimal places.
      - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

      -
      -format = {
      -    decimalSeparator: '.',
      -    groupSeparator: ',',
      -    groupSize: 3,
      -    secondaryGroupSize: 0,
      -    fractionGroupSeparator: ' ',
      -    fractionGroupSize: 0
      -}
      -BigNumber.config({ FORMAT: format })
      -
      -x = new BigNumber('123456789.123456789')
      -x.toFormat()                    // '123,456,789.123456789'
      -x.toFormat(1)                   // '123,456,789.1'
      -
      -// If a reference to the object assigned to FORMAT has been retained,
      -// the format properties can be changed directly
      -format.groupSeparator = ' '
      -format.fractionGroupSize = 5
      -x.toFormat()                    // '123 456 789.12345 6789'
      -
      -BigNumber.config({
      -    FORMAT: {
      -        decimalSeparator = ',',
      -        groupSeparator = '.',
      -        groupSize = 3,
      -        secondaryGroupSize = 2
      -    }
      -})
      -
      -x.toFormat(6)                   // '12.34.56.789,123'
      - - - -
      - toFraction.toFraction([max]) ⇒ [string, string] -
      -

      - max: number|string|BigNumber: integer >= 1 and < - Infinity -

      -

      - Returns a string array representing the value of this BigNumber as a simple fraction with an - integer numerator and an integer denominator. The denominator will be a positive non-zero - value less than or equal to max. -

      -

      - If a maximum denominator, max, is not specified, or is null or - undefined, the denominator will be the lowest value necessary to represent the - number exactly. -

      -

      - See Errors for the treatment of other non-integer or out of range - max values. -

      -
      -x = new BigNumber(1.75)
      -x.toFraction()                  // '7, 4'
      -
      -pi = new BigNumber('3.14159265358')
      -pi.toFraction()                 // '157079632679,50000000000'
      -pi.toFraction(100000)           // '312689, 99532'
      -pi.toFraction(10000)            // '355, 113'
      -pi.toFraction(100)              // '311, 99'
      -pi.toFraction(10)               // '22, 7'
      -pi.toFraction(1)                // '3, 1'
      - - - -
      toJSON.toJSON() ⇒ string
      -

      As valueOf.

      -
      -x = new BigNumber('177.7e+457')
      -y = new BigNumber(235.4325)
      -z = new BigNumber('0.0098074')
      -
      -// Serialize an array of three BigNumbers
      -str = JSON.stringify( [x, y, z] )
      -// "["1.777e+459","235.4325","0.0098074"]"
      -
      -// Return an array of three BigNumbers
      -JSON.parse(str, function (key, val) {
      -    return key === '' ? val : new BigNumber(val)
      -})
      - - - -
      toNumber.toNumber() ⇒ number
      -

      Returns the value of this BigNumber as a JavaScript number primitive.

      -

      - Type coercion with, for example, the unary plus operator will also work, except that a - BigNumber with the value minus zero will be converted to positive zero. -

      -
      -x = new BigNumber(456.789)
      -x.toNumber()                    // 456.789
      -+x                              // 456.789
      -
      -y = new BigNumber('45987349857634085409857349856430985')
      -y.toNumber()                    // 4.598734985763409e+34
      -
      -z = new BigNumber(-0)
      -1 / +z                          // Infinity
      -1 / z.toNumber()                // -Infinity
      - - - -
      toPower.pow(n) ⇒ BigNumber
      -

      - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

      -

      - Returns a BigNumber whose value is the value of this BigNumber raised to the power - n. -

      -

      - If n is negative the result is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

      -

      - If n is not an integer or is out of range: -

      -

      - If ERRORS is true a BigNumber Error is thrown,
      - else if n is greater than 9007199254740991, it is interpreted as - Infinity;
      - else if n is less than -9007199254740991, it is interpreted as - -Infinity;
      - else if n is otherwise a number, it is truncated to an integer;
      - else it is interpreted as NaN. -

      -

      - As the number of digits of the result of the power operation can grow so large so quickly, - e.g. 123.45610000 has over 50000 digits, the number of significant - digits calculated is limited to the value of the - POW_PRECISION setting (default value: - 100). -

      -

      - Set POW_PRECISION to 0 for an - unlimited number of significant digits to be calculated (this will cause the method to slow - dramatically for larger exponents). -

      -

      - Negative exponents will be calculated to the number of decimal places specified by - DECIMAL_PLACES (but not to more than - POW_PRECISION significant digits). -

      -
      -Math.pow(0.7, 2)                // 0.48999999999999994
      -x = new BigNumber(0.7)
      -x.toPower(2)                    // '0.49'
      -BigNumber(3).pow(-2)            // '0.11111111111111111111'
      - - - -
      - toPrecision.toPrecision([sd [, rm]]) ⇒ string -
      -

      - sd: number: integer, 1 to 1e+9 inclusive
      - rm: number: integer, 0 to 8 inclusive -

      -

      - Returns a string representing the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

      -

      - If sd is less than the number of digits necessary to represent the integer part - of the value in normal (fixed-point) notation, then exponential notation is used. -

      -

      - If sd is omitted, or is null or undefined, then the - return value is the same as n.toString().
      - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

      -

      - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

      -
      -x = 45.6
      -y = new BigNumber(x)
      -x.toPrecision()                 // '45.6'
      -y.toPrecision()                 // '45.6'
      -x.toPrecision(1)                // '5e+1'
      -y.toPrecision(1)                // '5e+1'
      -y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
      -y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
      -x.toPrecision(5)                // '45.600'
      -y.toPrecision(5)                // '45.600'
      - - - -
      toString.toString([base]) ⇒ string
      -

      base: number: integer, 2 to 64 inclusive

      -

      - Returns a string representing the value of this BigNumber in the specified base, or base - 10 if base is omitted or is null or - undefined. -

      -

      - For bases above 10, values from 10 to 35 are - represented by a-z (as with Number.prototype.toString), - 36 to 61 by A-Z, and 62 and - 63 by $ and _ respectively. -

      -

      - If a base is specified the value is rounded according to the current - DECIMAL_PLACES - and ROUNDING_MODE configuration. -

      -

      - If a base is not specified, and this BigNumber has a positive - exponent that is equal to or greater than the positive component of the - current EXPONENTIAL_AT setting, - or a negative exponent equal to or less than the negative component of the - setting, then exponential notation is returned. -

      -

      If base is null or undefined it is ignored.

      -

      - See Errors for the treatment of other non-integer or out of range - base values. -

      -
      -x = new BigNumber(750000)
      -x.toString()                    // '750000'
      -BigNumber.config({ EXPONENTIAL_AT: 5 })
      -x.toString()                    // '7.5e+5'
      -
      -y = new BigNumber(362.875)
      -y.toString(2)                   // '101101010.111'
      -y.toString(9)                   // '442.77777777777777777778'
      -y.toString(32)                  // 'ba.s'
      -
      -BigNumber.config({ DECIMAL_PLACES: 4 });
      -z = new BigNumber('1.23456789')
      -z.toString()                    // '1.23456789'
      -z.toString(10)                  // '1.2346'
      - - - -
      truncated.trunc() ⇒ BigNumber
      -

      - Returns a BigNumber whose value is the value of this BigNumber truncated to a whole number. -

      -
      -x = new BigNumber(123.456)
      -x.truncated()                   // '123'
      -y = new BigNumber(-12.3)
      -y.trunc()                       // '-12'
      - - - -
      valueOf.valueOf() ⇒ string
      -

      As toString, but does not accept a base argument.

      -
      -x = new BigNumber('1.777e+457')
      -x.valueOf()                     // '1.777e+457'
      - - - -

      Properties

      -

      A BigNumber is an object with three properties:

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      PropertyDescriptionTypeValue
      ccoefficient*number[] Array of base 1e14 numbers
      eexponentnumberInteger, -1000000000 to 1000000000 inclusive
      ssignnumber-1 or 1
      -

      *significand

      -

      The value of any of the three properties may also be null.

      -

      - From v2.0.0 of this library, the value of the coefficient of a BigNumber is stored in a - normalised base 100000000000000 floating point format, as opposed to the base - 10 format used in v1.x.x -

      -

      - This change means the properties of a BigNumber are now best considered to be read-only. - Previously it was acceptable to change the exponent of a BigNumber by writing to its exponent - property directly, but this is no longer recommended as the number of digits in the first - element of the coefficient array is dependent on the exponent, so the coefficient would also - need to be altered. -

      -

      - Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are - not necessarily preserved. -

      -
      x = new BigNumber(0.123)              // '0.123'
      -x.toExponential()                     // '1.23e-1'
      -x.c                                   // '1,2,3'
      -x.e                                   // -1
      -x.s                                   // 1
      -
      -y = new Number(-123.4567000e+2)       // '-12345.67'
      -y.toExponential()                     // '-1.234567e+4'
      -z = new BigNumber('-123.4567000e+2')  // '-12345.67'
      -z.toExponential()                     // '-1.234567e+4'
      -z.c                                   // '1,2,3,4,5,6,7'
      -z.e                                   // 4
      -z.s                                   // -1
      - - - -

      Zero, NaN and Infinity

      -

      - The table below shows how ±0, NaN and - ±Infinity are stored. -

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      ces
      ±0[0]0±1
      NaNnullnullnull
      ±Infinitynullnull±1
      -
      -x = new Number(-0)              // 0
      -1 / x == -Infinity              // true
      -
      -y = new BigNumber(-0)           // '0'
      -y.c                             // '0' ( [0].toString() )
      -y.e                             // 0
      -y.s                             // -1
      - - - -

      Errors

      -

      - The errors that are thrown are generic Error objects with name - BigNumber Error. -

      -

      - The table below shows the errors that may be thrown if ERRORS is - true, and the action taken if ERRORS is false. -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Method(s)ERRORS: true
      Throw BigNumber Error
      ERRORS: false
      Action on invalid argument
      - - BigNumber
      - comparedTo
      - dividedBy
      - dividedToIntegerBy
      - equals
      - greaterThan
      - greaterThanOrEqualTo
      - lessThan
      - lessThanOrEqualTo
      - minus
      - modulo
      - plus
      - times -
      number type has more than
      15 significant digits
      Accept.
      not a base... numberSubstitute NaN.
      base not an integerTruncate to integer.
      Ignore if not a number.
      base out of rangeIgnore.
      not a number*Substitute NaN.
      anothernot an objectIgnore.
      configDECIMAL_PLACES not an integerTruncate to integer.
      Ignore if not a number.
      DECIMAL_PLACES out of rangeIgnore.
      ROUNDING_MODE not an integerTruncate to integer.
      Ignore if not a number.
      ROUNDING_MODE out of rangeIgnore.
      EXPONENTIAL_AT not an integer
      or not [integer, integer]
      Truncate to integer(s).
      Ignore if not number(s).
      EXPONENTIAL_AT out of range
      or not [negative, positive]
      Ignore.
      RANGE not an integer
      or not [integer, integer]
      Truncate to integer(s).
      Ignore if not number(s).
      RANGE cannot be zeroIgnore.
      RANGE out of range
      or not [negative, positive]
      Ignore.
      ERRORS not a boolean
      or binary digit
      Ignore.
      CRYPTO not a boolean
      or binary digit
      Ignore.
      CRYPTO crypto unavailableIgnore.
      MODULO_MODE not an integerTruncate to integer.
      Ignore if not a number.
      MODULO_MODE out of rangeIgnore.
      POW_PRECISION not an integerTruncate to integer.
      Ignore if not a number.
      POW_PRECISION out of rangeIgnore.
      FORMAT not an objectIgnore.
      precisionargument not a boolean
      or binary digit
      Ignore.
      rounddecimal places not an integerTruncate to integer.
      Ignore if not a number.
      decimal places out of rangeIgnore.
      rounding mode not an integerTruncate to integer.
      Ignore if not a number.
      rounding mode out of rangeIgnore.
      shiftargument not an integerTruncate to integer.
      Ignore if not a number.
      argument out of rangeSubstitute ±Infinity. -
      - toExponential
      - toFixed
      - toFormat -
      decimal places not an integerTruncate to integer.
      Ignore if not a number.
      decimal places out of rangeIgnore.
      rounding mode not an integerTruncate to integer.
      Ignore if not a number.
      rounding mode out of rangeIgnore.
      toFractionmax denominator not an integerTruncate to integer.
      Ignore if not a number.
      max denominator out of rangeIgnore.
      - toDigits
      - toPrecision -
      precision not an integerTruncate to integer.
      Ignore if not a number.
      precision out of rangeIgnore.
      rounding mode not an integerTruncate to integer.
      Ignore if not a number.
      rounding mode out of rangeIgnore.
      toPowerexponent not an integerTruncate to integer.
      Substitute NaN if not a number.
      exponent out of rangeSubstitute ±Infinity. -
      toStringbase not an integerTruncate to integer.
      Ignore if not a number.
      base out of rangeIgnore.
      -

      *No error is thrown if the value is NaN or 'NaN'.

      -

      - The message of a BigNumber Error will also contain the name of the method from which - the error originated. -

      -

      To determine if an exception is a BigNumber Error:

      -
      -try {
      -    // ...
      -} catch (e) {
      -    if ( e instanceof Error && e.name == 'BigNumber Error' ) {
      -        // ...
      -    }
      -}
      - - - -

      FAQ

      - -
      Why are trailing fractional zeros removed from BigNumbers?
      -

      - Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the - precision of a value. This can be useful but the results of arithmetic operations can be - misleading. -

      -
      -x = new BigDecimal("1.0")
      -y = new BigDecimal("1.1000")
      -z = x.add(y)                      // 2.1000
      -
      -x = new BigDecimal("1.20")
      -y = new BigDecimal("3.45000")
      -z = x.multiply(y)                 // 4.1400000
      -

      - To specify the precision of a value is to specify that the value lies - within a certain range. -

      -

      - In the first example, x has a value of 1.0. The trailing zero shows - the precision of the value, implying that it is in the range 0.95 to - 1.05. Similarly, the precision indicated by the trailing zeros of y - indicates that the value is in the range 1.09995 to 1.10005. -

      -

      - If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, - and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the - range of the result of the addition implied by the precision of its operands is - 2.04995 to 2.15005. -

      -

      - The result given by BigDecimal of 2.1000 however, indicates that the value is in - the range 2.09995 to 2.10005 and therefore the precision implied by - its trailing zeros may be misleading. -

      -

      - In the second example, the true range is 4.122744 to 4.157256 yet - the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 - to 4.14000005. Again, the precision implied by the trailing zeros may be - misleading. -

      -

      - This library, like binary floating point and most calculators, does not retain trailing - fractional zeros. Instead, the toExponential, toFixed and - toPrecision methods enable trailing zeros to be added if and when required.
      -

      -
      - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map b/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map deleted file mode 100644 index 120ed53..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bignumber.min.js","sources":["bignumber.js"],"names":["global","another","configObj","BigNumber","n","b","c","e","i","num","len","str","x","this","ERRORS","raise","isValidInt","id","round","DECIMAL_PLACES","ROUNDING_MODE","RegExp","ALPHABET","slice","test","parseNumeric","s","replace","length","tooManyDigits","charCodeAt","convertBase","isNumeric","indexOf","search","substring","MAX_EXP","MIN_EXP","LOG_BASE","push","baseOut","baseIn","sign","d","k","r","xc","y","dp","rm","toLowerCase","POW_PRECISION","pow","toBaseOut","toFixedPoint","coeffToString","pop","div","unshift","charAt","format","caller","c0","ne","roundingMode","toString","TO_EXP_NEG","toExponential","maxOrMin","args","method","m","isArray","call","intValidatorWithErrors","min","max","name","truncate","normalise","j","msg","val","error","Error","sd","ni","rd","pows10","POWS_TEN","out","mathceil","mathfloor","BASE","P","prototype","ONE","TO_EXP_POS","CRYPTO","MODULO_MODE","FORMAT","decimalSeparator","groupSeparator","groupSize","secondaryGroupSize","fractionGroupSeparator","fractionGroupSize","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","v","p","a","arguments","o","has","hasOwnProperty","MAX","intValidatorNoErrors","notBool","crypto","lt","gt","random","pow2_53","random53bitInt","Math","rand","getRandomValues","Uint32Array","randomBytes","copy","shift","multiply","base","temp","xlo","xhi","carry","klo","SQRT_BASE","khi","compare","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","yc","NaN","bitFloor","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","isNaN","p1","p2","absoluteValue","abs","ceil","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","divToInt","equals","eq","floor","greaterThan","greaterThanOrEqualTo","gte","isFinite","isInteger","isInt","isNegative","isNeg","isZero","lessThan","lessThanOrEqualTo","lte","minus","sub","t","xLTy","plus","xe","ye","reverse","modulo","mod","times","negated","neg","add","precision","z","MAX_SAFE_INTEGER","squareRoot","sqrt","rep","half","mul","xcL","ycL","ylo","yhi","zc","sqrtBase","toDigits","toFixed","toFormat","arr","split","g1","g2","intPart","fractionPart","intDigits","substr","toFraction","md","d0","d2","exp","n0","n1","d1","toNumber","toPower","parseFloat","toPrecision","truncated","trunc","valueOf","toJSON","l","obj","Object","arrL","define","amd","module","exports","require"],"mappings":";CAEC,SAAWA,GACR,YAqCA,SAASC,GAAQC,GAiHb,QAASC,GAAWC,EAAGC,GACnB,GAAIC,GAAGC,EAAGC,EAAGC,EAAKC,EAAKC,EACnBC,EAAIC,IAGR,MAAQD,YAAaT,IAIjB,MADIW,IAAQC,EAAO,GAAI,+BAAgCX,GAChD,GAAID,GAAWC,EAAGC,EAK7B,IAAU,MAALA,GAAcW,EAAYX,EAAG,EAAG,GAAIY,EAAI,QA4BtC,CAMH,GALAZ,EAAQ,EAAJA,EACJM,EAAMP,EAAI,GAIA,IAALC,EAED,MADAO,GAAI,GAAIT,GAAWC,YAAaD,GAAYC,EAAIO,GACzCO,EAAON,EAAGO,EAAiBP,EAAEL,EAAI,EAAGa,EAK/C,KAAOX,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,IAC7C,GAAMiB,QAAQ,OAAUf,EAAI,IAAMgB,EAASC,MAAO,EAAGlB,GAAM,MAC1D,SAAWC,EAAI,MAAU,GAAJD,EAAS,IAAM,IAAOmB,KAAKb,GAChD,MAAOc,GAAcb,EAAGD,EAAKF,EAAKJ,EAGlCI,IACAG,EAAEc,EAAY,EAAR,EAAItB,GAAUO,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAE1CT,GAAUH,EAAIgB,QAAS,YAAa,IAAKC,OAAS,IAGnDb,EAAOE,EAAIY,EAAezB,GAI9BK,GAAM,GAENG,EAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAGlEZ,EAAMoB,EAAapB,EAAK,GAAIN,EAAGO,EAAEc,OA9DmB,CAGpD,GAAKtB,YAAaD,GAKd,MAJAS,GAAEc,EAAItB,EAAEsB,EACRd,EAAEL,EAAIH,EAAEG,EACRK,EAAEN,GAAMF,EAAIA,EAAEE,GAAMF,EAAEmB,QAAUnB,OAChCa,EAAK,EAIT,KAAOR,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,EAAI,CAIhD,GAHAQ,EAAEc,EAAY,EAAR,EAAItB,GAAUA,GAAKA,EAAG,IAAO,EAG9BA,MAAQA,EAAI,CACb,IAAMG,EAAI,EAAGC,EAAIJ,EAAGI,GAAK,GAAIA,GAAK,GAAID,KAItC,MAHAK,GAAEL,EAAIA,EACNK,EAAEN,GAAKF,QACPa,EAAK,GAITN,EAAMP,EAAI,OACP,CACH,IAAM4B,EAAUR,KAAMb,EAAMP,EAAI,IAAO,MAAOqB,GAAcb,EAAGD,EAAKF,EACpEG,GAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,GAwDtE,KAhBOhB,EAAII,EAAIsB,QAAQ,MAAS,KAAKtB,EAAMA,EAAIgB,QAAS,IAAK,MAGtDnB,EAAIG,EAAIuB,OAAQ,OAAW,GAGrB,EAAJ3B,IAAQA,EAAIC,GACjBD,IAAMI,EAAIY,MAAOf,EAAI,GACrBG,EAAMA,EAAIwB,UAAW,EAAG3B,IACZ,EAAJD,IAGRA,EAAII,EAAIiB,QAINpB,EAAI,EAAyB,KAAtBG,EAAImB,WAAWtB,GAAWA,KAGvC,IAAME,EAAMC,EAAIiB,OAAkC,KAA1BjB,EAAImB,aAAapB,KAGzC,GAFAC,EAAMA,EAAIY,MAAOf,EAAGE,EAAM,GAYtB,GATAA,EAAMC,EAAIiB,OAILnB,GAAOK,GAAUJ,EAAM,IAAKK,EAAOE,EAAIY,EAAejB,EAAEc,EAAItB,GAEjEG,EAAIA,EAAIC,EAAI,EAGPD,EAAI6B,EAGLxB,EAAEN,EAAIM,EAAEL,EAAI,SAGT,IAAS8B,EAAJ9B,EAGRK,EAAEN,GAAMM,EAAEL,EAAI,OACX,CAWH,GAVAK,EAAEL,EAAIA,EACNK,EAAEN,KAMFE,GAAMD,EAAI,GAAM+B,EACP,EAAJ/B,IAAQC,GAAK8B,GAET5B,EAAJF,EAAU,CAGX,IAFIA,GAAGI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAO,EAAGf,IAE1BE,GAAO4B,EAAc5B,EAAJF,GACnBI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAOf,EAAGA,GAAK8B,GAGlC3B,GAAMA,EAAIY,MAAMf,GAChBA,EAAI8B,EAAW3B,EAAIiB,WAEnBpB,IAAKE,CAGT,MAAQF,IAAKG,GAAO,KACpBC,EAAEN,EAAEiC,MAAO5B,OAKfC,GAAEN,GAAMM,EAAEL,EAAI,EAGlBU,GAAK,EAgVT,QAASc,GAAapB,EAAK6B,EAASC,EAAQC,GACxC,GAAIC,GAAGpC,EAAGqC,EAAGC,EAAGjC,EAAGkC,EAAIC,EACnBvC,EAAIG,EAAIsB,QAAS,KACjBe,EAAK7B,EACL8B,EAAK7B,CA0BT,KAxBc,GAATqB,IAAc9B,EAAMA,EAAIuC,eAGxB1C,GAAK,IACNoC,EAAIO,EAGJA,EAAgB,EAChBxC,EAAMA,EAAIgB,QAAS,IAAK,IACxBoB,EAAI,GAAI5C,GAAUsC,GAClB7B,EAAImC,EAAEK,IAAKzC,EAAIiB,OAASpB,GACxB2C,EAAgBP,EAIhBG,EAAEzC,EAAI+C,EAAWC,EAAcC,EAAe3C,EAAEN,GAAKM,EAAEL,GAAK,GAAIiC,GAChEO,EAAExC,EAAIwC,EAAEzC,EAAEsB,QAIdkB,EAAKO,EAAW1C,EAAK8B,EAAQD,GAC7BjC,EAAIqC,EAAIE,EAAGlB,OAGQ,GAAXkB,IAAKF,GAASE,EAAGU,OACzB,IAAMV,EAAG,GAAK,MAAO,GA2BrB,IAzBS,EAAJtC,IACCD,GAEFK,EAAEN,EAAIwC,EACNlC,EAAEL,EAAIA,EAGNK,EAAEc,EAAIgB,EACN9B,EAAI6C,EAAK7C,EAAGmC,EAAGC,EAAIC,EAAIT,GACvBM,EAAKlC,EAAEN,EACPuC,EAAIjC,EAAEiC,EACNtC,EAAIK,EAAEL,GAGVoC,EAAIpC,EAAIyC,EAAK,EAGbxC,EAAIsC,EAAGH,GACPC,EAAIJ,EAAU,EACdK,EAAIA,GAAS,EAAJF,GAAsB,MAAbG,EAAGH,EAAI,GAEzBE,EAAS,EAALI,GAAgB,MAALzC,GAAaqC,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IACzDlB,EAAIoC,GAAKpC,GAAKoC,IAAY,GAANK,GAAWJ,GAAW,GAANI,GAAuB,EAAZH,EAAGH,EAAI,IACtDM,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAE1B,EAAJiB,IAAUG,EAAG,GAGdnC,EAAMkC,EAAIS,EAAc,KAAMN,GAAO,QAClC,CAGH,GAFAF,EAAGlB,OAASe,EAERE,EAGA,MAAQL,IAAWM,IAAKH,GAAKH,GACzBM,EAAGH,GAAK,EAEFA,MACApC,EACFuC,EAAGY,QAAQ,GAMvB,KAAMd,EAAIE,EAAGlB,QAASkB,IAAKF,KAG3B,IAAMpC,EAAI,EAAGG,EAAM,GAASiC,GAALpC,EAAQG,GAAOW,EAASqC,OAAQb,EAAGtC,OAC1DG,EAAM2C,EAAc3C,EAAKJ,GAI7B,MAAOI,GA4PX,QAASiD,GAAQxD,EAAGI,EAAGyC,EAAIY,GACvB,GAAIC,GAAIvD,EAAGwD,EAAIrD,EAAKC,CAKpB,IAHAsC,EAAW,MAANA,GAAcjC,EAAYiC,EAAI,EAAG,EAAGY,EAAQG,GACxC,EAALf,EAAS7B,GAEPhB,EAAEE,EAAI,MAAOF,GAAE6D,UAIrB,IAHAH,EAAK1D,EAAEE,EAAE,GACTyD,EAAK3D,EAAEG,EAEG,MAALC,EACDG,EAAM4C,EAAenD,EAAEE,GACvBK,EAAgB,IAAVkD,GAA0B,IAAVA,GAAsBK,GAANH,EAClCI,EAAexD,EAAKoD,GACpBT,EAAc3C,EAAKoD,OAevB,IAbA3D,EAAIc,EAAO,GAAIf,GAAUC,GAAII,EAAGyC,GAGhC1C,EAAIH,EAAEG,EAENI,EAAM4C,EAAenD,EAAEE,GACvBI,EAAMC,EAAIiB,OAOK,IAAViC,GAA0B,IAAVA,IAAuBtD,GAALC,GAAe0D,GAAL3D,GAAoB,CAGjE,KAAcC,EAANE,EAASC,GAAO,IAAKD,KAC7BC,EAAMwD,EAAexD,EAAKJ,OAQ1B,IAJAC,GAAKuD,EACLpD,EAAM2C,EAAc3C,EAAKJ,GAGpBA,EAAI,EAAIG,GACT,KAAOF,EAAI,EAAI,IAAMG,GAAO,IAAKH,IAAKG,GAAO,UAG7C,IADAH,GAAKD,EAAIG,EACJF,EAAI,EAEL,IADKD,EAAI,GAAKG,IAAMC,GAAO,KACnBH,IAAKG,GAAO,KAMpC,MAAOP,GAAEsB,EAAI,GAAKoC,EAAK,IAAMnD,EAAMA,EAKvC,QAASyD,GAAUC,EAAMC,GACrB,GAAIC,GAAGnE,EACHI,EAAI,CAKR,KAHKgE,EAASH,EAAK,MAAOA,EAAOA,EAAK,IACtCE,EAAI,GAAIpE,GAAWkE,EAAK,MAEd7D,EAAI6D,EAAKzC,QAAU,CAIzB,GAHAxB,EAAI,GAAID,GAAWkE,EAAK7D,KAGlBJ,EAAEsB,EAAI,CACR6C,EAAInE,CACJ,OACQkE,EAAOG,KAAMF,EAAGnE,KACxBmE,EAAInE,GAIZ,MAAOmE,GAQX,QAASG,GAAwBtE,EAAGuE,EAAKC,EAAKf,EAAQgB,GAMlD,OALSF,EAAJvE,GAAWA,EAAIwE,GAAOxE,GAAK0E,EAAS1E,KACrCW,EAAO8C,GAAUgB,GAAQ,mBACjBF,EAAJvE,GAAWA,EAAIwE,EAAM,gBAAkB,mBAAqBxE,IAG7D,EAQX,QAAS2E,GAAW3E,EAAGE,EAAGC,GAKtB,IAJA,GAAIC,GAAI,EACJwE,EAAI1E,EAAEsB,QAGDtB,IAAI0E,GAAI1E,EAAEkD,OAGnB,IAAMwB,EAAI1E,EAAE,GAAI0E,GAAK,GAAIA,GAAK,GAAIxE,KAkBlC,OAfOD,EAAIC,EAAID,EAAI+B,EAAW,GAAMF,EAGhChC,EAAEE,EAAIF,EAAEG,EAAI,KAGA8B,EAAJ9B,EAGRH,EAAEE,GAAMF,EAAEG,EAAI,IAEdH,EAAEG,EAAIA,EACNH,EAAEE,EAAIA,GAGHF,EAmDX,QAASW,GAAO8C,EAAQoB,EAAKC,GACzB,GAAIC,GAAQ,GAAIC,QACZ,gBACA,MACA,SACA,MACA,WACA,KACA,KACA,MACA,KACA,MACA,QACA,MACA,OACA,YACA,SACA,QACA,QACA,QACA,WACA,gBACA,UACA,WACA,aACA,MACA,cACA,WACA,aACFvB,GAAU,MAAQoB,EAAM,KAAOC,EAIjC,MAFAC,GAAMN,KAAO,kBACb5D,EAAK,EACCkE,EAQV,QAASjE,GAAON,EAAGyE,EAAIpC,EAAIJ,GACvB,GAAIF,GAAGnC,EAAGwE,EAAGpC,EAAGxC,EAAGkF,EAAIC,EACnBzC,EAAKlC,EAAEN,EACPkF,EAASC,CAGb,IAAI3C,EAAI,CAQJ4C,EAAK,CAGD,IAAM/C,EAAI,EAAGC,EAAIE,EAAG,GAAIF,GAAK,GAAIA,GAAK,GAAID,KAI1C,GAHAnC,EAAI6E,EAAK1C,EAGA,EAAJnC,EACDA,GAAK8B,EACL0C,EAAIK,EACJjF,EAAI0C,EAAIwC,EAAK,GAGbC,EAAKnF,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,MAIpC,IAFAM,EAAKK,GAAYnF,EAAI,GAAM8B,GAEtBgD,GAAMxC,EAAGlB,OAAS,CAEnB,IAAIiB,EASA,KAAM6C,EANN,MAAQ5C,EAAGlB,QAAU0D,EAAIxC,EAAGP,KAAK,IACjCnC,EAAImF,EAAK,EACT5C,EAAI,EACJnC,GAAK8B,EACL0C,EAAIxE,EAAI8B,EAAW,MAIpB,CAIH,IAHAlC,EAAIwC,EAAIE,EAAGwC,GAGL3C,EAAI,EAAGC,GAAK,GAAIA,GAAK,GAAID,KAG/BnC,GAAK8B,EAIL0C,EAAIxE,EAAI8B,EAAWK,EAGnB4C,EAAS,EAAJP,EAAQ,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,EAmBxD,GAfAnC,EAAIA,GAAU,EAALwC,GAKO,MAAdvC,EAAGwC,EAAK,KAAoB,EAAJN,EAAQ5E,EAAIA,EAAIoF,EAAQ7C,EAAIqC,EAAI,IAE1DnC,EAAS,EAALI,GACEsC,GAAM1C,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAClD6D,EAAK,GAAW,GAANA,IAAmB,GAANtC,GAAWJ,GAAW,GAANI,IAGnCzC,EAAI,EAAIwE,EAAI,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,GAAM,EAAIlC,EAAGwC,EAAK,IAAO,GAAO,GAClErC,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAElB,EAAL2D,IAAWvC,EAAG,GAiBf,MAhBAA,GAAGlB,OAAS,EAERiB,GAGAwC,GAAMzE,EAAEL,EAAI,EAGZuC,EAAG,GAAK0C,EAAQH,EAAK/C,GACrB1B,EAAEL,GAAK8E,GAAM,GAIbvC,EAAG,GAAKlC,EAAEL,EAAI,EAGXK,CAkBX,IAdU,GAALJ,GACDsC,EAAGlB,OAAS0D,EACZ1C,EAAI,EACJ0C,MAEAxC,EAAGlB,OAAS0D,EAAK,EACjB1C,EAAI4C,EAAQlD,EAAW9B,GAIvBsC,EAAGwC,GAAMN,EAAI,EAAIY,EAAWxF,EAAIoF,EAAQ7C,EAAIqC,GAAMQ,EAAOR,IAAOpC,EAAI,GAIpEC,EAEA,OAAY,CAGR,GAAW,GAANyC,EAAU,CAGX,IAAM9E,EAAI,EAAGwE,EAAIlC,EAAG,GAAIkC,GAAK,GAAIA,GAAK,GAAIxE,KAE1C,IADAwE,EAAIlC,EAAG,IAAMF,EACPA,EAAI,EAAGoC,GAAK,GAAIA,GAAK,GAAIpC,KAG1BpC,GAAKoC,IACNhC,EAAEL,IACGuC,EAAG,IAAM+C,IAAO/C,EAAG,GAAK,GAGjC,OAGA,GADAA,EAAGwC,IAAO1C,EACLE,EAAGwC,IAAOO,EAAO,KACtB/C,GAAGwC,KAAQ,EACX1C,EAAI,EAMhB,IAAMpC,EAAIsC,EAAGlB,OAAoB,IAAZkB,IAAKtC,GAAUsC,EAAGU,QAItC5C,EAAEL,EAAI6B,EACPxB,EAAEN,EAAIM,EAAEL,EAAI,KAGJK,EAAEL,EAAI8B,IACdzB,EAAEN,GAAMM,EAAEL,EAAI,IAItB,MAAOK,GAjyCX,GAAI6C,GAGAxC,EAAK,EACL6E,EAAI3F,EAAU4F,UACdC,EAAM,GAAI7F,GAAU,GAYpBgB,EAAiB,GAejBC,EAAgB,EAMhB8C,EAAa,GAIb+B,EAAa,GAMb5D,EAAU,KAKVD,EAAU,IAGVtB,GAAS,EAGTE,EAAa0D,EAGbwB,GAAS,EAoBTC,EAAc,EAIdhD,EAAgB,IAGhBiD,GACIC,iBAAkB,IAClBC,eAAgB,IAChBC,UAAW,EACXC,mBAAoB,EACpBC,uBAAwB,IACxBC,kBAAmB,EAkzE3B,OA/nEAvG,GAAUF,QAAUA,EAEpBE,EAAUwG,SAAW,EACrBxG,EAAUyG,WAAa,EACvBzG,EAAU0G,WAAa,EACvB1G,EAAU2G,YAAc,EACxB3G,EAAU4G,cAAgB,EAC1B5G,EAAU6G,gBAAkB,EAC5B7G,EAAU8G,gBAAkB,EAC5B9G,EAAU+G,gBAAkB,EAC5B/G,EAAUgH,iBAAmB,EAC7BhH,EAAUiH,OAAS,EAoCnBjH,EAAUkH,OAAS,WACf,GAAIC,GAAGC,EACH/G,EAAI,EACJqC,KACA2E,EAAIC,UACJC,EAAIF,EAAE,GACNG,EAAMD,GAAiB,gBAALA,GACd,WAAc,MAAKA,GAAEE,eAAeL,GAA4B,OAAdD,EAAII,EAAEH,IAA1C,QACd,WAAc,MAAKC,GAAE5F,OAASpB,EAA6B,OAAhB8G,EAAIE,EAAEhH,MAAnC,OA6GtB,OAxGKmH,GAAKJ,EAAI,mBAAsBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KAC1DpG,EAAqB,EAAJmG,GAErBzE,EAAE0E,GAAKpG,EAKFwG,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACvDnG,EAAoB,EAAJkG,GAEpBzE,EAAE0E,GAAKnG,EAMFuG,EAAKJ,EAAI,oBAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,EAAG,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACnErD,EAAoB,EAAPoD,EAAE,GACfrB,EAAoB,EAAPqB,EAAE,IAEXtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KACrCrD,IAAgB+B,EAAkC,GAAf,EAAJqB,GAASA,EAAIA,MAGpDzE,EAAE0E,IAAOrD,EAAY+B,GAOhB0B,EAAKJ,EAAI,WAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,GAAI,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACpElF,EAAiB,EAAPiF,EAAE,GACZlF,EAAiB,EAAPkF,EAAE,IAERtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KAC5B,EAAJD,EAAQjF,IAAaD,EAA+B,GAAf,EAAJkF,GAASA,EAAIA,IAC1CxG,GAAQC,EAAO,EAAGwG,EAAI,kBAAmBD,KAG1DzE,EAAE0E,IAAOlF,EAASD,GAIbuF,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBrG,EAAK,EACLD,GAAeF,IAAWwG,GAAM5C,EAAyBoD,GAClDhH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKzG,EAKF6G,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBpB,KAAaoB,IAAKU,GAA2B,gBAAVA,IAC9BV,IAAMpB,GAAUpF,GAASC,EAAO,EAAG,qBAAsBiH,IACvDlH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKrB,EAKFyB,EAAKJ,EAAI,gBAAmBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACrDpB,EAAkB,EAAJmB,GAElBzE,EAAE0E,GAAKpB,EAKFwB,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KACzDpE,EAAoB,EAAJmE,GAEpBzE,EAAE0E,GAAKpE,EAIFwE,EAAKJ,EAAI,YAEO,gBAALD,GACRlB,EAASkB,EACFxG,GACPC,EAAO,EAAGwG,EAAI,iBAAkBD,IAGxCzE,EAAE0E,GAAKnB,EAEAvD,GASX1C,EAAUyE,IAAM,WAAc,MAAOR,GAAUqD,UAAW3B,EAAEmC,KAQ5D9H,EAAUwE,IAAM,WAAc,MAAOP,GAAUqD,UAAW3B,EAAEoC,KAc5D/H,EAAUgI,OAAS,WACf,GAAIC,GAAU,iBAMVC,EAAkBC,KAAKH,SAAWC,EAAW,QAC7C,WAAc,MAAOxC,GAAW0C,KAAKH,SAAWC,IAChD,WAAc,MAA2C,UAAlB,WAAhBE,KAAKH,SAAwB,IACjC,QAAhBG,KAAKH,SAAsB,GAElC,OAAO,UAAUnF,GACb,GAAIwE,GAAGnH,EAAGE,EAAGqC,EAAG0E,EACZ9G,EAAI,EACJF,KACAiI,EAAO,GAAIpI,GAAU6F,EAKzB,IAHAhD,EAAW,MAANA,GAAehC,EAAYgC,EAAI,EAAG6E,EAAK,IAA6B,EAAL7E,EAAjB7B,EACnDyB,EAAI+C,EAAU3C,EAAKV,GAEf4D,EAGA,GAAK8B,GAAUA,EAAOQ,gBAAkB,CAIpC,IAFAhB,EAAIQ,EAAOQ,gBAAiB,GAAIC,aAAa7F,GAAK,IAEtCA,EAAJpC,GAQJ8G,EAAW,OAAPE,EAAEhH,IAAgBgH,EAAEhH,EAAI,KAAO,IAM9B8G,GAAK,MACNjH,EAAI2H,EAAOQ,gBAAiB,GAAIC,aAAY,IAC5CjB,EAAEhH,GAAKH,EAAE,GACTmH,EAAEhH,EAAI,GAAKH,EAAE,KAKbC,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MAGL,IAAKoF,GAAUA,EAAOU,YAAc,CAKvC,IAFAlB,EAAIQ,EAAOU,YAAa9F,GAAK,GAEjBA,EAAJpC,GAMJ8G,EAAsB,iBAAP,GAAPE,EAAEhH,IAA6C,cAAXgH,EAAEhH,EAAI,GAC/B,WAAXgH,EAAEhH,EAAI,GAAkC,SAAXgH,EAAEhH,EAAI,IACnCgH,EAAEhH,EAAI,IAAM,KAASgH,EAAEhH,EAAI,IAAM,GAAMgH,EAAEhH,EAAI,GAEhD8G,GAAK,KACNU,EAAOU,YAAY,GAAGC,KAAMnB,EAAGhH,IAI/BF,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MACD9B,IACPC,EAAO,GAAI,qBAAsBiH,EAKzC,KAAKxH,EAED,KAAYoC,EAAJpC,GACJ8G,EAAIe,IACK,KAAJf,IAAWhH,EAAEE,KAAO8G,EAAI,KAcrC,KAVA1E,EAAItC,IAAIE,GACRwC,GAAMV,EAGDM,GAAKI,IACNsE,EAAI7B,EAASnD,EAAWU,GACxB1C,EAAEE,GAAKoF,EAAWhD,EAAI0E,GAAMA,GAIf,IAAThH,EAAEE,GAAUF,EAAEkD,MAAOhD,KAG7B,GAAS,EAAJA,EACDF,GAAMC,EAAI,OACP,CAGH,IAAMA,EAAI,GAAc,IAATD,EAAE,GAAUA,EAAEsI,QAASrI,GAAK+B,GAG3C,IAAM9B,EAAI,EAAG8G,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAI9G,KAGhC8B,EAAJ9B,IAAeD,GAAK+B,EAAW9B,GAKxC,MAFA+H,GAAKhI,EAAIA,EACTgI,EAAKjI,EAAIA,EACFiI,MAqGf9E,EAAM,WAGF,QAASoF,GAAUjI,EAAGgC,EAAGkG,GACrB,GAAIvE,GAAGwE,EAAMC,EAAKC,EACdC,EAAQ,EACR1I,EAAII,EAAEgB,OACNuH,EAAMvG,EAAIwG,EACVC,EAAMzG,EAAIwG,EAAY,CAE1B,KAAMxI,EAAIA,EAAEW,QAASf,KACjBwI,EAAMpI,EAAEJ,GAAK4I,EACbH,EAAMrI,EAAEJ,GAAK4I,EAAY,EACzB7E,EAAI8E,EAAML,EAAMC,EAAME,EACtBJ,EAAOI,EAAMH,EAAUzE,EAAI6E,EAAcA,EAAcF,EACvDA,GAAUH,EAAOD,EAAO,IAAQvE,EAAI6E,EAAY,GAAMC,EAAMJ,EAC5DrI,EAAEJ,GAAKuI,EAAOD,CAKlB,OAFII,IAAOtI,EAAE8C,QAAQwF,GAEdtI,EAGX,QAAS0I,GAAS9B,EAAGnH,EAAGkJ,EAAIC,GACxB,GAAIhJ,GAAGiJ,CAEP,IAAKF,GAAMC,EACPC,EAAMF,EAAKC,EAAK,EAAI,OAGpB,KAAMhJ,EAAIiJ,EAAM,EAAOF,EAAJ/I,EAAQA,IAEvB,GAAKgH,EAAEhH,IAAMH,EAAEG,GAAK,CAChBiJ,EAAMjC,EAAEhH,GAAKH,EAAEG,GAAK,EAAI,EACxB,OAIZ,MAAOiJ,GAGX,QAASC,GAAUlC,EAAGnH,EAAGkJ,EAAIT,GAIzB,IAHA,GAAItI,GAAI,EAGA+I,KACJ/B,EAAE+B,IAAO/I,EACTA,EAAIgH,EAAE+B,GAAMlJ,EAAEkJ,GAAM,EAAI,EACxB/B,EAAE+B,GAAM/I,EAAIsI,EAAOtB,EAAE+B,GAAMlJ,EAAEkJ,EAIjC,OAAS/B,EAAE,IAAMA,EAAE5F,OAAS,EAAG4F,EAAEoB,UAIrC,MAAO,UAAWhI,EAAGmC,EAAGC,EAAIC,EAAI6F,GAC5B,GAAIW,GAAKlJ,EAAGC,EAAGmJ,EAAMvJ,EAAGwJ,EAAMC,EAAOC,EAAGC,EAAIC,EAAKC,EAAMC,EAAMC,EAAIC,EAAIC,EACjEC,EAAIC,EACJ7I,EAAId,EAAEc,GAAKqB,EAAErB,EAAI,EAAI,GACrBoB,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAGX,MAAMwC,GAAOA,EAAG,IAAO0H,GAAOA,EAAG,IAE7B,MAAO,IAAIrK,GAGRS,EAAEc,GAAMqB,EAAErB,IAAOoB,GAAK0H,GAAM1H,EAAG,IAAM0H,EAAG,GAAMA,GAG7C1H,GAAe,GAATA,EAAG,KAAY0H,EAAS,EAAJ9I,EAAQA,EAAI,EAHc+I,IAoB5D,KAbAX,EAAI,GAAI3J,GAAUuB,GAClBqI,EAAKD,EAAExJ,KACPC,EAAIK,EAAEL,EAAIwC,EAAExC,EACZmB,EAAIsB,EAAKzC,EAAI,EAEPuI,IACFA,EAAOjD,EACPtF,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDZ,EAAIA,EAAIY,EAAW,GAKjB9B,EAAI,EAAGgK,EAAGhK,KAAQsC,EAAGtC,IAAM,GAAKA,KAGtC,GAFKgK,EAAGhK,IAAOsC,EAAGtC,IAAM,IAAMD,IAErB,EAAJmB,EACDqI,EAAGxH,KAAK,GACRoH,GAAO,MACJ,CAsBH,IArBAS,EAAKtH,EAAGlB,OACR0I,EAAKE,EAAG5I,OACRpB,EAAI,EACJkB,GAAK,EAILtB,EAAIwF,EAAWkD,GAAS0B,EAAG,GAAK,IAE3BpK,EAAI,IACLoK,EAAK3B,EAAU2B,EAAIpK,EAAG0I,GACtBhG,EAAK+F,EAAU/F,EAAI1C,EAAG0I,GACtBwB,EAAKE,EAAG5I,OACRwI,EAAKtH,EAAGlB,QAGZuI,EAAKG,EACLN,EAAMlH,EAAGvB,MAAO,EAAG+I,GACnBL,EAAOD,EAAIpI,OAGI0I,EAAPL,EAAWD,EAAIC,KAAU,GACjCM,EAAKC,EAAGjJ,QACRgJ,EAAG7G,QAAQ,GACX2G,EAAMG,EAAG,GACJA,EAAG,IAAM1B,EAAO,GAAIuB,GAEzB,GAAG,CAOC,GANAjK,EAAI,EAGJqJ,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,GAGjB,EAANR,GAuDD,GAnDAS,EAAOF,EAAI,GACNM,GAAML,IAAOC,EAAOA,EAAOpB,GAASkB,EAAI,IAAM,IAGnD5J,EAAIwF,EAAWsE,EAAOG,GAUjBjK,EAAI,GAEDA,GAAK0I,IAAM1I,EAAI0I,EAAO,GAG1Bc,EAAOf,EAAU2B,EAAIpK,EAAG0I,GACxBe,EAAQD,EAAKhI,OACbqI,EAAOD,EAAIpI,OAGX6H,EAAMH,EAASM,EAAMI,EAAKH,EAAOI,GAGrB,GAAPR,IACDrJ,IAGAsJ,EAAUE,EAAWC,EAALS,EAAaC,EAAKC,EAAIX,EAAOf,MAQvC,GAAL1I,IAASqJ,EAAMrJ,EAAI,GACxBwJ,EAAOY,EAAGjJ,SAGdsI,EAAQD,EAAKhI,OACAqI,EAARJ,GAAeD,EAAKlG,QAAQ,GAGjCgG,EAAUM,EAAKJ,EAAMK,EAAMnB,GAC3BmB,EAAOD,EAAIpI,OAGC,IAAP6H,EAID,MAAUA,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,IAAW,GAC7C7J,IAGAsJ,EAAUM,EAAUC,EAALK,EAAYC,EAAKC,EAAIP,EAAMnB,GAC1CmB,EAAOD,EAAIpI,WAGH,KAAR6H,IACRrJ,IACA4J,GAAO,GAIXD,GAAGvJ,KAAOJ,EAGLqJ,GAAOO,EAAI,GACZA,EAAIC,KAAUnH,EAAGqH,IAAO,GAExBH,GAAQlH,EAAGqH,IACXF,EAAO,UAEHE,IAAOC,GAAgB,MAAVJ,EAAI,KAAgBtI,IAE7CiI,GAAiB,MAAVK,EAAI,GAGLD,EAAG,IAAKA,EAAGnB,QAGrB,GAAKE,GAAQjD,EAAO,CAGhB,IAAMrF,EAAI,EAAGkB,EAAIqI,EAAG,GAAIrI,GAAK,GAAIA,GAAK,GAAIlB,KAC1CU,EAAO4I,EAAG9G,GAAO8G,EAAEvJ,EAAIC,EAAID,EAAI+B,EAAW,GAAM,EAAGW,EAAI0G,OAIvDG,GAAEvJ,EAAIA,EACNuJ,EAAEjH,GAAK8G,CAGX,OAAOG,OAgJfrI,EAAe,WACX,GAAIkJ,GAAa,8BACbC,EAAW,cACXC,EAAY,cACZC,EAAkB,qBAClBC,EAAmB,4BAEvB,OAAO,UAAWnK,EAAGD,EAAKF,EAAKJ,GAC3B,GAAIyI,GACApH,EAAIjB,EAAME,EAAMA,EAAIgB,QAASoJ,EAAkB,GAGnD,IAAKD,EAAgBtJ,KAAKE,GACtBd,EAAEc,EAAIsJ,MAAMtJ,GAAK,KAAW,EAAJA,EAAQ,GAAK,MAClC,CACH,IAAMjB,IAGFiB,EAAIA,EAAEC,QAASgJ,EAAY,SAAWpG,EAAG0G,EAAIC,GAEzC,MADApC,GAAoC,MAA3BoC,EAAKA,EAAGhI,eAAyB,GAAW,KAANgI,EAAY,EAAI,EACvD7K,GAAKA,GAAKyI,EAAYvE,EAAL0G,IAGzB5K,IACAyI,EAAOzI,EAGPqB,EAAIA,EAAEC,QAASiJ,EAAU,MAAOjJ,QAASkJ,EAAW,SAGnDlK,GAAOe,GAAI,MAAO,IAAIvB,GAAWuB,EAAGoH,EAKzChI,IAAQC,EAAOE,EAAI,SAAYZ,EAAI,SAAWA,EAAI,IAAO,UAAWM,GACxEC,EAAEc,EAAI,KAGVd,EAAEN,EAAIM,EAAEL,EAAI,KACZU,EAAK,MAmNb6E,EAAEqF,cAAgBrF,EAAEsF,IAAM,WACtB,GAAIxK,GAAI,GAAIT,GAAUU,KAEtB,OADKD,GAAEc,EAAI,IAAId,EAAEc,EAAI,GACdd,GAQXkF,EAAEuF,KAAO,WACL,MAAOnK,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAWnDuF,EAAEwF,WAAaxF,EAAE2D,IAAM,SAAW1G,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAEyF,cAAgBzF,EAAE9C,GAAK,WACrB,GAAI5C,GAAGkH,EACHhH,EAAIO,KAAKP,CAEb,KAAMA,EAAI,MAAO,KAIjB,IAHAF,IAAQkH,EAAIhH,EAAEsB,OAAS,GAAM8I,EAAU7J,KAAKN,EAAI+B,IAAeA,EAG1DgF,EAAIhH,EAAEgH,GAAK,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9C,MAFS,GAAJA,IAAQA,EAAI,GAEVA,GAwBX0F,EAAE0F,UAAY1F,EAAErC,IAAM,SAAWV,EAAG1C,GAEhC,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAKc,EAAgBC,IAQ7D0E,EAAE2F,mBAAqB3F,EAAE4F,SAAW,SAAW3I,EAAG1C,GAE9C,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAK,EAAG,IAQhDyF,EAAE6F,OAAS7F,EAAE8F,GAAK,SAAW7I,EAAG1C,GAE5B,MADAY,GAAK,EAC6C,IAA3CqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAE+F,MAAQ,WACN,MAAO3K,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEgG,YAAchG,EAAEoC,GAAK,SAAWnF,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAEiG,qBAAuBjG,EAAEkG,IAAM,SAAWjJ,EAAG1C,GAE3C,MADAY,GAAK,EACqD,KAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAuB,IAANA,GAQnEyF,EAAEmG,SAAW,WACT,QAASpL,KAAKP,GAOlBwF,EAAEoG,UAAYpG,EAAEqG,MAAQ,WACpB,QAAStL,KAAKP,GAAKoK,EAAU7J,KAAKN,EAAI+B,GAAazB,KAAKP,EAAEsB,OAAS,GAOvEkE,EAAEkF,MAAQ,WACN,OAAQnK,KAAKa,GAOjBoE,EAAEsG,WAAatG,EAAEuG,MAAQ,WACrB,MAAOxL,MAAKa,EAAI,GAOpBoE,EAAEwG,OAAS,WACP,QAASzL,KAAKP,GAAkB,GAAbO,KAAKP,EAAE,IAQ9BwF,EAAEyG,SAAWzG,EAAEmC,GAAK,SAAWlF,EAAG1C,GAE9B,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAE0G,kBAAoB1G,EAAE2G,IAAM,SAAW1J,EAAG1C,GAExC,MADAY,GAAK,EACqD,MAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAwB,IAANA,GAwBpEyF,EAAE4G,MAAQ5G,EAAE6G,IAAM,SAAW5J,EAAG1C,GAC5B,GAAIG,GAAGwE,EAAG4H,EAAGC,EACTjM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGrC,IAAKjD,GAAKnH,EAEN,MADA0C,GAAErB,GAAKrB,EACAO,EAAEkM,KAAK/J,EAGlB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO1H,IAAOC,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAWqK,EAAK5J,EAAI6J,IAGxE,KAAM3H,EAAG,KAAO0H,EAAG,GAGf,MAAOA,GAAG,IAAOzH,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAW2C,EAAG,GAAKlC,EAGrC,GAAjBQ,GAAsB,EAAI,GASpC,GALA2L,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAaf,KAXKH,EAAW,EAAJrF,IACRA,GAAKA,EACLoF,EAAI9J,IAEJkK,EAAKD,EACLH,EAAIpC,GAGRoC,EAAEK,UAGI5M,EAAImH,EAAGnH,IAAKuM,EAAErK,KAAK,IACzBqK,EAAEK,cAMF,KAFAjI,GAAM6H,GAASrF,EAAI1E,EAAGlB,SAAavB,EAAImK,EAAG5I,SAAa4F,EAAInH,EAErDmH,EAAInH,EAAI,EAAO2E,EAAJ3E,EAAOA,IAEpB,GAAKyC,EAAGzC,IAAMmK,EAAGnK,GAAK,CAClBwM,EAAO/J,EAAGzC,GAAKmK,EAAGnK,EAClB,OAYZ,GANIwM,IAAMD,EAAI9J,EAAIA,EAAK0H,EAAIA,EAAKoC,EAAG7J,EAAErB,GAAKqB,EAAErB,GAE5CrB,GAAM2E,EAAIwF,EAAG5I,SAAapB,EAAIsC,EAAGlB,QAI5BvB,EAAI,EAAI,KAAQA,IAAKyC,EAAGtC,KAAO,GAIpC,IAHAH,EAAIwF,EAAO,EAGHb,EAAIwC,GAAK,CAEb,GAAK1E,IAAKkC,GAAKwF,EAAGxF,GAAK,CACnB,IAAMxE,EAAIwE,EAAGxE,IAAMsC,IAAKtC,GAAIsC,EAAGtC,GAAKH,KAClCyC,EAAGtC,GACLsC,EAAGkC,IAAMa,EAGb/C,EAAGkC,IAAMwF,EAAGxF,GAIhB,KAAiB,GAATlC,EAAG,GAASA,EAAG8F,UAAWoE,GAGlC,MAAMlK,GAAG,GAWFiC,EAAWhC,EAAGD,EAAIkK,IAPrBjK,EAAErB,EAAqB,GAAjBN,EAAqB,GAAK,EAChC2B,EAAEzC,GAAMyC,EAAExC,EAAI,GACPwC,IA8Bf+C,EAAEoH,OAASpH,EAAEqH,IAAM,SAAWpK,EAAG1C,GAC7B,GAAIyJ,GAAGpI,EACHd,EAAIC,IAMR,OAJAI,GAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAGhBO,EAAEN,IAAMyC,EAAErB,GAAKqB,EAAEzC,IAAMyC,EAAEzC,EAAE,GACtB,GAAIH,GAAUsK,MAGZ1H,EAAEzC,GAAKM,EAAEN,IAAMM,EAAEN,EAAE,GACrB,GAAIH,GAAUS,IAGL,GAAfuF,GAIDzE,EAAIqB,EAAErB,EACNqB,EAAErB,EAAI,EACNoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAG,GAClBA,EAAErB,EAAIA,EACNoI,EAAEpI,GAAKA,GAEPoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAGoD,GAGfvF,EAAE8L,MAAO5C,EAAEsD,MAAMrK,MAQ5B+C,EAAEuH,QAAUvH,EAAEwH,IAAM,WAChB,GAAI1M,GAAI,GAAIT,GAAUU,KAEtB,OADAD,GAAEc,GAAKd,EAAEc,GAAK,KACPd,GAwBXkF,EAAEgH,KAAOhH,EAAEyH,IAAM,SAAWxK,EAAG1C,GAC3B,GAAIuM,GACAhM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGpC,IAAKjD,GAAKnH,EAEP,MADA0C,GAAErB,GAAKrB,EACAO,EAAE8L,MAAM3J,EAGnB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO,IAAIrK,GAAWqH,EAAI,EAI5C,KAAM1E,EAAG,KAAO0H,EAAG,GAAK,MAAOA,GAAG,GAAKzH,EAAI,GAAI5C,GAAW2C,EAAG,GAAKlC,EAAQ,EAAJ4G,GAQ1E,GALAuF,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAUf,IATKxF,EAAI,GACLwF,EAAKD,EACLH,EAAIpC,IAEJhD,GAAKA,EACLoF,EAAI9J,GAGR8J,EAAEK,UACMzF,IAAKoF,EAAErK,KAAK,IACpBqK,EAAEK,UAUN,IAPAzF,EAAI1E,EAAGlB,OACPvB,EAAImK,EAAG5I,OAGM,EAAR4F,EAAInH,IAAQuM,EAAIpC,EAAIA,EAAK1H,EAAIA,EAAK8J,EAAGvM,EAAImH,GAGxCA,EAAI,EAAGnH,GACTmH,GAAM1E,IAAKzC,GAAKyC,EAAGzC,GAAKmK,EAAGnK,GAAKmH,GAAM3B,EAAO,EAC7C/C,EAAGzC,IAAMwF,CAUb,OAPI2B,KACA1E,EAAGY,QAAQ8D,KACTwF,GAKCjI,EAAWhC,EAAGD,EAAIkK,IAS7BlH,EAAE0H,UAAY1H,EAAET,GAAK,SAAUoI,GAC3B,GAAIrN,GAAGkH,EACH1G,EAAIC,KACJP,EAAIM,EAAEN,CAQV,IALU,MAALmN,GAAaA,MAAQA,GAAW,IAANA,GAAiB,IAANA,IAClC3M,GAAQC,EAAO,GAAI,WAAagH,EAAS0F,GACxCA,KAAOA,IAAIA,EAAI,QAGlBnN,EAAI,MAAO,KAIjB,IAHAgH,EAAIhH,EAAEsB,OAAS,EACfxB,EAAIkH,EAAIhF,EAAW,EAEdgF,EAAIhH,EAAEgH,GAAK,CAGZ,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9B,IAAMkH,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAIlH,MAKtC,MAFKqN,IAAK7M,EAAEL,EAAI,EAAIH,IAAIA,EAAIQ,EAAEL,EAAI,GAE3BH,GAiBX0F,EAAE5E,MAAQ,SAAW8B,EAAIC,GACrB,GAAI7C,GAAI,GAAID,GAAUU,KAOtB,QALW,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACvC3G,EAAOd,IAAK4C,EAAKnC,KAAKN,EAAI,EAAS,MAAN0C,GAC1BjC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,GAG3ChB,GAgBX0F,EAAE8C,MAAQ,SAAUhG,GAChB,GAAIxC,GAAIS,IACR,OAAOG,GAAY4B,GAAI8K,EAAkBA,EAAkB,GAAI,YAG3DtN,EAAEgN,MAAO,KAAOtI,EAASlC,IACzB,GAAIzC,GAAWC,EAAEE,GAAKF,EAAEE,EAAE,MAAaoN,EAAL9K,GAAyBA,EAAI8K,GAC7DtN,EAAEsB,GAAU,EAAJkB,EAAQ,EAAI,EAAI,GACxBxC,IAeV0F,EAAE6H,WAAa7H,EAAE8H,KAAO,WACpB,GAAIrJ,GAAGnE,EAAGyC,EAAGgL,EAAKjB,EACdhM,EAAIC,KACJP,EAAIM,EAAEN,EACNoB,EAAId,EAAEc,EACNnB,EAAIK,EAAEL,EACNyC,EAAK7B,EAAiB,EACtB2M,EAAO,GAAI3N,GAAU,MAGzB,IAAW,IAANuB,IAAYpB,IAAMA,EAAE,GACrB,MAAO,IAAIH,IAAYuB,GAAS,EAAJA,KAAYpB,GAAKA,EAAE,IAAOmK,IAAMnK,EAAIM,EAAI,EAAI,EA8B5E,IA1BAc,EAAI4G,KAAKsF,MAAOhN,GAIN,GAALc,GAAUA,GAAK,EAAI,GACpBtB,EAAImD,EAAcjD,IACXF,EAAEwB,OAASrB,GAAM,GAAK,IAAIH,GAAK,KACtCsB,EAAI4G,KAAKsF,KAAKxN,GACdG,EAAImK,GAAYnK,EAAI,GAAM,IAAY,EAAJA,GAASA,EAAI,GAE1CmB,GAAK,EAAI,EACVtB,EAAI,KAAOG,GAEXH,EAAIsB,EAAEyC,gBACN/D,EAAIA,EAAEmB,MAAO,EAAGnB,EAAE6B,QAAQ,KAAO,GAAM1B,GAG3CsC,EAAI,GAAI1C,GAAUC,IAElByC,EAAI,GAAI1C,GAAWuB,EAAI,IAOtBmB,EAAEvC,EAAE,GAML,IALAC,EAAIsC,EAAEtC,EACNmB,EAAInB,EAAIyC,EACC,EAAJtB,IAAQA,EAAI,KAOb,GAHAkL,EAAI/J,EACJA,EAAIiL,EAAKV,MAAOR,EAAEE,KAAMrJ,EAAK7C,EAAGgM,EAAG5J,EAAI,KAElCO,EAAeqJ,EAAEtM,GAAMiB,MAAO,EAAGG,MAAUtB,EAC3CmD,EAAeV,EAAEvC,IAAMiB,MAAO,EAAGG,GAAM,CAWxC,GANKmB,EAAEtC,EAAIA,KAAMmB,EACjBtB,EAAIA,EAAEmB,MAAOG,EAAI,EAAGA,EAAI,GAKd,QAALtB,IAAgByN,GAAY,QAALzN,GAgBrB,IAIIA,KAAOA,EAAEmB,MAAM,IAAqB,KAAfnB,EAAEuD,OAAO,MAGjCzC,EAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAG,GACpCoD,GAAK1B,EAAEuK,MAAMvK,GAAG+I,GAAGhL,GAGvB,OAvBA,IAAMiN,IACF3M,EAAO0L,EAAGA,EAAErM,EAAIY,EAAiB,EAAG,GAE/ByL,EAAEQ,MAAMR,GAAGhB,GAAGhL,IAAK,CACpBiC,EAAI+J,CACJ,OAIR5J,GAAM,EACNtB,GAAK,EACLmM,EAAM,EAkBtB,MAAO3M,GAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAGC,EAAemD,IAwB9DuB,EAAEsH,MAAQtH,EAAEiI,IAAM,SAAWhL,EAAG1C,GAC5B,GAAIC,GAAGC,EAAGC,EAAGwE,EAAGpC,EAAG2B,EAAGyJ,EAAKhF,EAAKC,EAAKgF,EAAKC,EAAKC,EAAKC,EAChDtF,EAAMuF,EACNzN,EAAIC,KACJiC,EAAKlC,EAAEN,EACPkK,GAAOvJ,EAAK,GAAI8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAAMC,CAGhD,MAAMwC,GAAO0H,GAAO1H,EAAG,IAAO0H,EAAG,IAmB7B,OAhBM5J,EAAEc,IAAMqB,EAAErB,GAAKoB,IAAOA,EAAG,KAAO0H,GAAMA,IAAOA,EAAG,KAAO1H,EACzDC,EAAEzC,EAAIyC,EAAExC,EAAIwC,EAAErB,EAAI,MAElBqB,EAAErB,GAAKd,EAAEc,EAGHoB,GAAO0H,GAKTzH,EAAEzC,GAAK,GACPyC,EAAExC,EAAI,GALNwC,EAAEzC,EAAIyC,EAAExC,EAAI,MASbwC,CAYX,KATAxC,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDS,EAAErB,GAAKd,EAAEc,EACTsM,EAAMlL,EAAGlB,OACTqM,EAAMzD,EAAG5I,OAGEqM,EAAND,IAAYI,EAAKtL,EAAIA,EAAK0H,EAAIA,EAAK4D,EAAI5N,EAAIwN,EAAKA,EAAMC,EAAKA,EAAMzN,GAGhEA,EAAIwN,EAAMC,EAAKG,KAAS5N,IAAK4N,EAAG7L,KAAK,IAK3C,IAHAuG,EAAOjD,EACPwI,EAAWjF,EAEL5I,EAAIyN,IAAOzN,GAAK,GAAK,CAKvB,IAJAF,EAAI,EACJ4N,EAAM1D,EAAGhK,GAAK6N,EACdF,EAAM3D,EAAGhK,GAAK6N,EAAW,EAEnBzL,EAAIoL,EAAKhJ,EAAIxE,EAAIoC,EAAGoC,EAAIxE,GAC1BwI,EAAMlG,IAAKF,GAAKyL,EAChBpF,EAAMnG,EAAGF,GAAKyL,EAAW,EACzB9J,EAAI4J,EAAMnF,EAAMC,EAAMiF,EACtBlF,EAAMkF,EAAMlF,EAAUzE,EAAI8J,EAAaA,EAAaD,EAAGpJ,GAAK1E,EAC5DA,GAAM0I,EAAMF,EAAO,IAAQvE,EAAI8J,EAAW,GAAMF,EAAMlF,EACtDmF,EAAGpJ,KAAOgE,EAAMF,CAGpBsF,GAAGpJ,GAAK1E,EASZ,MANIA,KACEC,EAEF6N,EAAGxF,QAGA7D,EAAWhC,EAAGqL,EAAI7N,IAgB7BuF,EAAEwI,SAAW,SAAWjJ,EAAIpC,GACxB,GAAI7C,GAAI,GAAID,GAAUU,KAGtB,OAFAwE,GAAW,MAANA,GAAerE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aAA4B,EAALxC,EAAP,KAChEpC,EAAW,MAANA,GAAejC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,EACxDiE,EAAKnE,EAAOd,EAAGiF,EAAIpC,GAAO7C,GAgBrC0F,EAAE3B,cAAgB,SAAWnB,EAAIC,GAC7B,MAAOW,GAAQ/C,KACP,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MAAS7E,EAAK,EAAI,KAAMC,EAAI,KAmBxE6C,EAAEyI,QAAU,SAAWvL,EAAIC,GACvB,MAAOW,GAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACrD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,KA0BtC6C,EAAE0I,SAAW,SAAWxL,EAAIC,GACxB,GAAItC,GAAMiD,EAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACxD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,GAElC,IAAKpC,KAAKP,EAAI,CACV,GAAIE,GACAiO,EAAM9N,EAAI+N,MAAM,KAChBC,GAAMvI,EAAOG,UACbqI,GAAMxI,EAAOI,mBACbF,EAAiBF,EAAOE,eACxBuI,EAAUJ,EAAI,GACdK,EAAeL,EAAI,GACnBpC,EAAQxL,KAAKa,EAAI,EACjBqN,EAAY1C,EAAQwC,EAAQtN,MAAM,GAAKsN,EACvCnO,EAAMqO,EAAUnN,MAIpB,IAFIgN,IAAIpO,EAAImO,EAAIA,EAAKC,EAAIA,EAAKpO,EAAGE,GAAOF,GAEnCmO,EAAK,GAAKjO,EAAM,EAAI,CAIrB,IAHAF,EAAIE,EAAMiO,GAAMA,EAChBE,EAAUE,EAAUC,OAAQ,EAAGxO,GAEnBE,EAAJF,EAASA,GAAKmO,EAClBE,GAAWvI,EAAiByI,EAAUC,OAAQxO,EAAGmO,EAGhDC,GAAK,IAAIC,GAAWvI,EAAiByI,EAAUxN,MAAMf,IACtD6L,IAAOwC,EAAU,IAAMA,GAG/BlO,EAAMmO,EACFD,EAAUzI,EAAOC,mBAAuBuI,GAAMxI,EAAOM,mBACnDoI,EAAanN,QAAS,GAAIN,QAAQ,OAASuN,EAAK,OAAQ,KACxD,KAAOxI,EAAOK,wBACdqI,GACFD,EAGR,MAAOlO,IAgBXmF,EAAEmJ,WAAa,SAAUC,GACrB,GAAIT,GAAKU,EAAIC,EAAI7O,EAAG8O,EAAKjP,EAAGkP,EAAIxF,EAAGpI,EAC/BkB,EAAI9B,EACJF,EAAIC,KACJiC,EAAKlC,EAAEN,EACPqC,EAAI,GAAIxC,GAAU6F,GAClBuJ,EAAKJ,EAAK,GAAIhP,GAAU6F,GACxBwJ,EAAKF,EAAK,GAAInP,GAAU6F,EAoB5B,IAlBW,MAANkJ,IACDpO,GAAS,EACTV,EAAI,GAAID,GAAU+O,GAClBpO,EAAS8B,KAEDA,EAAIxC,EAAE+L,UAAa/L,EAAE6H,GAAGjC,MAExBlF,GACAC,EAAO,GACL,oBAAuB6B,EAAI,eAAiB,kBAAoBsM,GAKtEA,GAAMtM,GAAKxC,EAAEE,GAAKY,EAAOd,EAAGA,EAAEG,EAAI,EAAG,GAAIyL,IAAIhG,GAAO5F,EAAI,QAI1D0C,EAAK,MAAOlC,GAAEqD,UAgBpB,KAfAvC,EAAI6B,EAAcT,GAIlBvC,EAAIoC,EAAEpC,EAAImB,EAAEE,OAAShB,EAAEL,EAAI,EAC3BoC,EAAErC,EAAE,GAAKmF,GAAY4J,EAAM9O,EAAI+B,GAAa,EAAIA,EAAW+M,EAAMA,GACjEH,GAAMA,GAAM9O,EAAEqJ,IAAI9G,GAAK,EAAMpC,EAAI,EAAIoC,EAAI4M,EAAOnP,EAEhDiP,EAAMjN,EACNA,EAAU,EAAI,EACdhC,EAAI,GAAID,GAAUuB,GAGlB4N,EAAGhP,EAAE,GAAK,EAGNwJ,EAAIrG,EAAKrD,EAAGuC,EAAG,EAAG,GAClByM,EAAKD,EAAGrC,KAAMhD,EAAEsD,MAAMoC,IACH,GAAdJ,EAAG3F,IAAIyF,IACZC,EAAKK,EACLA,EAAKJ,EACLG,EAAKD,EAAGxC,KAAMhD,EAAEsD,MAAOgC,EAAKG,IAC5BD,EAAKF,EACLzM,EAAIvC,EAAEsM,MAAO5C,EAAEsD,MAAOgC,EAAKzM,IAC3BvC,EAAIgP,CAgBR,OAbAA,GAAK3L,EAAKyL,EAAGxC,MAAMyC,GAAKK,EAAI,EAAG,GAC/BF,EAAKA,EAAGxC,KAAMsC,EAAGhC,MAAMmC,IACvBJ,EAAKA,EAAGrC,KAAMsC,EAAGhC,MAAMoC,IACvBF,EAAG5N,EAAI6N,EAAG7N,EAAId,EAAEc,EAChBnB,GAAK,EAGLkO,EAAMhL,EAAK8L,EAAIC,EAAIjP,EAAGa,GAAgBsL,MAAM9L,GAAGwK,MAAM3B,IAC/ChG,EAAK6L,EAAIH,EAAI5O,EAAGa,GAAgBsL,MAAM9L,GAAGwK,OAAU,GAC7CmE,EAAGtL,WAAYuL,EAAGvL,aAClBqL,EAAGrL,WAAYkL,EAAGlL,YAE9B7B,EAAUiN,EACHZ,GAOX3I,EAAE2J,SAAW,WACT,GAAI7O,GAAIC,IAGR,QAAQD,IAAOA,EAAEc,EAAU,EAANd,EAAEc,EAAQ+I,MAenC3E,EAAE4J,QAAU5J,EAAE1C,IAAM,SAAUhD,GAC1B,GAAIwC,GAAGG,EACHvC,EAAIoF,EAAe,EAAJxF,GAASA,GAAKA,GAC7BQ,EAAIC,IAGR,KAAMG,EAAYZ,GAAIsN,EAAkBA,EAAkB,GAAI,eACzDzB,SAAS7L,IAAMI,EAAIkN,IAAsBtN,GAAK,IAC/CuP,WAAWvP,IAAMA,KAAQA,EAAIqK,MAC7B,MAAO,IAAItK,GAAWmI,KAAKlF,KAAMxC,EAAGR,GASxC,KAHAwC,EAAIO,EAAgBwC,EAAUxC,EAAgBb,EAAW,GAAM,EAC/DS,EAAI,GAAI5C,GAAU6F,KAEN,CAER,GAAKxF,EAAI,EAAI,CAET,GADAuC,EAAIA,EAAEqK,MAAMxM,IACNmC,EAAEzC,EAAI,KACPsC,IAAKG,EAAEzC,EAAEsB,OAASgB,IAAIG,EAAEzC,EAAEsB,OAASgB,GAI5C,GADApC,EAAIoF,EAAWpF,EAAI,IACbA,EAAI,KAEVI,GAAIA,EAAEwM,MAAMxM,GACPgC,GAAKhC,EAAEN,GAAKM,EAAEN,EAAEsB,OAASgB,IAAIhC,EAAEN,EAAEsB,OAASgB,GAInD,MADS,GAAJxC,IAAQ2C,EAAIiD,EAAIvC,IAAIV,IAClBH,EAAI1B,EAAO6B,EAAGI,EAAe/B,GAAkB2B,GAkB1D+C,EAAE8J,YAAc,SAAWvK,EAAIpC,GAC3B,MAAOW,GAAQ/C,KAAY,MAANwE,GAAcrE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aACtD,EAALxC,EAAS,KAAMpC,EAAI,KAgB3B6C,EAAE7B,SAAW,SAAU5D,GACnB,GAAIM,GACAP,EAAIS,KACJa,EAAItB,EAAEsB,EACNnB,EAAIH,EAAEG,CAyBV,OAtBW,QAANA,EAEGmB,GACAf,EAAM,WACG,EAAJe,IAAQf,EAAM,IAAMA,IAEzBA,EAAM,OAGVA,EAAM4C,EAAenD,EAAEE,GAOnBK,EALM,MAALN,GAAcW,EAAYX,EAAG,EAAG,GAAI,GAAI,QAKnC0B,EAAauB,EAAc3C,EAAKJ,GAAS,EAAJF,EAAO,GAAIqB,GAJ3CwC,GAAL3D,GAAmBA,GAAK0F,EAC1B9B,EAAexD,EAAKJ,GACpB+C,EAAc3C,EAAKJ,GAKlB,EAAJmB,GAAStB,EAAEE,EAAE,KAAKK,EAAM,IAAMA,IAGhCA,GAQXmF,EAAE+J,UAAY/J,EAAEgK,MAAQ,WACpB,MAAO5O,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEiK,QAAUjK,EAAEkK,OAAS,WACnB,MAAOnP,MAAKoD,YAcE,MAAb/D,GAAoBC,EAAUkH,OAAOnH,GAEnCC,EAOX,QAASuK,GAAStK,GACd,GAAII,GAAQ,EAAJJ,CACR,OAAOA,GAAI,GAAKA,IAAMI,EAAIA,EAAIA,EAAI,EAKtC,QAAS+C,GAAciE,GAMnB,IALA,GAAI9F,GAAG+L,EACHjN,EAAI,EACJwE,EAAIwC,EAAE5F,OACNiB,EAAI2E,EAAE,GAAK,GAEHxC,EAAJxE,GAAS,CAGb,IAFAkB,EAAI8F,EAAEhH,KAAO,GACbiN,EAAInL,EAAWZ,EAAEE,OACT6L,IAAK/L,EAAI,IAAMA,GACvBmB,GAAKnB,EAIT,IAAMsD,EAAInC,EAAEjB,OAA8B,KAAtBiB,EAAEf,aAAakD,KACnC,MAAOnC,GAAEtB,MAAO,EAAGyD,EAAI,GAAK,GAKhC,QAASsE,GAAS1I,EAAGmC,GACjB,GAAIyE,GAAGnH,EACHyC,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,EACPE,EAAII,EAAEc,EACNsD,EAAIjC,EAAErB,EACNkB,EAAIhC,EAAEL,EACN0P,EAAIlN,EAAExC,CAGV,KAAMC,IAAMwE,EAAI,MAAO,KAMvB,IAJAwC,EAAI1E,IAAOA,EAAG,GACdzC,EAAImK,IAAOA,EAAG,GAGThD,GAAKnH,EAAI,MAAOmH,GAAInH,EAAI,GAAK2E,EAAIxE,CAGtC,IAAKA,GAAKwE,EAAI,MAAOxE,EAMrB,IAJAgH,EAAQ,EAAJhH,EACJH,EAAIuC,GAAKqN,GAGHnN,IAAO0H,EAAK,MAAOnK,GAAI,GAAKyC,EAAK0E,EAAI,EAAI,EAG/C,KAAMnH,EAAI,MAAOuC,GAAIqN,EAAIzI,EAAI,EAAI,EAKjC,KAHAxC,GAAMpC,EAAIE,EAAGlB,SAAaqO,EAAIzF,EAAG5I,QAAWgB,EAAIqN,EAG1CzP,EAAI,EAAOwE,EAAJxE,EAAOA,IAAM,GAAKsC,EAAGtC,IAAMgK,EAAGhK,GAAK,MAAOsC,GAAGtC,GAAKgK,EAAGhK,GAAKgH,EAAI,EAAI,EAG/E,OAAO5E,IAAKqN,EAAI,EAAIrN,EAAIqN,EAAIzI,EAAI,EAAI,GASxC,QAASM,GAAsB1H,EAAGuE,EAAKC,GACnC,OAASxE,EAAI0E,EAAS1E,KAAQuE,GAAYC,GAALxE,EAIzC,QAASoE,GAAQ0L,GACb,MAA8C,kBAAvCC,OAAOpK,UAAU9B,SAASQ,KAAKyL,GAS1C,QAAS7M,GAAW1C,EAAK8B,EAAQD,GAO7B,IANA,GAAIwC,GAEAoL,EADA3B,GAAO,GAEPjO,EAAI,EACJE,EAAMC,EAAIiB,OAEFlB,EAAJF,GAAW,CACf,IAAM4P,EAAO3B,EAAI7M,OAAQwO,IAAQ3B,EAAI2B,IAAS3N,GAG9C,IAFAgM,EAAKzJ,EAAI,IAAO1D,EAASW,QAAStB,EAAIgD,OAAQnD,MAEtCwE,EAAIyJ,EAAI7M,OAAQoD,IAEfyJ,EAAIzJ,GAAKxC,EAAU,IACD,MAAdiM,EAAIzJ,EAAI,KAAayJ,EAAIzJ,EAAI,GAAK,GACvCyJ,EAAIzJ,EAAI,IAAMyJ,EAAIzJ,GAAKxC,EAAU,EACjCiM,EAAIzJ,IAAMxC,GAKtB,MAAOiM,GAAIxB,UAIf,QAAS9I,GAAexD,EAAKJ,GACzB,OAASI,EAAIiB,OAAS,EAAIjB,EAAIgD,OAAO,GAAK,IAAMhD,EAAIY,MAAM,GAAKZ,IACvD,EAAJJ,EAAQ,IAAM,MAASA,EAI/B,QAAS+C,GAAc3C,EAAKJ,GACxB,GAAIG,GAAK+M,CAGT,IAAS,EAAJlN,EAAQ,CAGT,IAAMkN,EAAI,OAAQlN,EAAGkN,GAAK,KAC1B9M,EAAM8M,EAAI9M,MAOV,IAHAD,EAAMC,EAAIiB,SAGHrB,EAAIG,EAAM,CACb,IAAM+M,EAAI,IAAKlN,GAAKG,IAAOH,EAAGkN,GAAK,KACnC9M,GAAO8M,MACK/M,GAAJH,IACRI,EAAMA,EAAIY,MAAO,EAAGhB,GAAM,IAAMI,EAAIY,MAAMhB,GAIlD,OAAOI,GAIX,QAASmE,GAAS1E,GAEd,MADAA,GAAIuP,WAAWvP,GACJ,EAAJA,EAAQuF,EAASvF,GAAKwF,EAAUxF,GAtkF3C,GAAID,GAAW6H,EAAQvG,EACnBO,EAAY,uCACZ2D,EAAW2C,KAAK+C,KAChBzF,EAAY0C,KAAKuD,MACjB9D,EAAU,iCACV/D,EAAe,gBACfnC,EAAgB,kDAChBP,EAAW,mEACXuE,EAAO,KACPvD,EAAW,GACXoL,EAAmB,iBAEnBjI,GAAY,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAC7E2D,EAAY,IAOZvB,EAAM,GA4jFV,IAHA1H,EAAYF,IAGU,kBAAVoQ,SAAwBA,OAAOC,IACvCD,OAAQ,WAAc,MAAOlQ,SAG1B,IAAsB,mBAAVoQ,SAAyBA,OAAOC,SAE/C,GADAD,OAAOC,QAAUrQ,GACX6H,EAAS,IAAMA,EAASyI,QAAQ,UAAa,MAAOlQ,SAI1DP,GAAOG,UAAYA,GAExBU"} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/package.json b/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/package.json deleted file mode 100644 index bc020c1..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/bignumber.js/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "bignumber.js", - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "version": "2.0.5", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "repository" : { - "type": "git", - "url": "https://github.com/MikeMcl/bignumber.js.git" - }, - "main": "bignumber", - "author": { - "name": "Michael Mclaughlin", - "email": "M8ch88l@gmail.com" - }, - "engines": { - "node": "*" - }, - "license": "MIT", - "scripts": { - "test": "node ./test/every-test.js", - "build": "uglifyjs bignumber.js --source-map doc/bignumber.js.map -c -m -o bignumber.min.js --preamble \"/* bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */\"" - } -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/.bower.json b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/.bower.json deleted file mode 100644 index f3eb4c2..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/.bower.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {}, - "ignore": [], - "_release": "3.1.4", - "_resolution": { - "type": "version", - "tag": "3.1.4", - "commit": "9cc7f829741eddabe693a704f10f972fb9c0d5a6" - }, - "_source": "git://github.com/brix/crypto-js.git", - "_target": "~3.1.4", - "_originalSource": "crypto-js" -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/CONTRIBUTING.md b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/CONTRIBUTING.md deleted file mode 100644 index 09bf774..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/CONTRIBUTING.md +++ /dev/null @@ -1,28 +0,0 @@ -# Contribution - -# Git Flow - -The crypto-js project uses [git flow](https://github.com/nvie/gitflow) to manage branches. -Do your changes on the `develop` or even better on a `feature/*` branch. Don't do any changes on the `master` branch. - -# Pull request - -Target your pull request on `develop` branch. Other pull request won't be accepted. - -# How to build - -1. Clone - -2. Run - - ```sh - npm install - ``` - -3. Run - - ```sh - npm run build - ``` - -4. Check `build` folder \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/README.md b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/README.md deleted file mode 100644 index 5ead0a0..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# crypto-js - -Modularized port of googlecode project crypto-js. - -## Node.js (Install) - -Requirements: - -- Node.js -- npm (Node.js package manager) - -```bash -npm install crypto-js -``` - -### Usage - -Modular include: - -```javascript -var AES = require("crypto-js/aes"); -var SHA256 = require("crypto-js/sha256"); -... -console.log(SHA256("Message")); -``` - -Including all libraries, for access to extra methods: - -```javascript -var CryptoJS = require("crypto-js"); -console.log(CryptoJS.HmacSHA1("Message", "Key")); -``` - -## Client (browser) - -Requirements: - -- Node.js -- Bower (package manager for frontend) - -```bash -bower install crypto-js -``` - -### Usage - -Modular include: - -```javascript -require.config({ - packages: [ - { - name: 'crypto-js', - location: 'path-to/bower_components/crypto-js', - main: 'index' - } - ] -}); - -require(["crypto-js/aes", "crypto-js/sha256"], function (AES, SHA256) { - console.log(SHA256("Message")); -}); -``` - -Including all libraries, for access to extra methods: - -```javascript -// Above-mentioned will work or use this simple form -require.config({ - paths: { - 'require-js': 'path-to/bower_components/crypto-js/crypto-js' - } -}); - -require(["crypto-js"], function (CryptoJS) { - console.log(CryptoJS.HmacSHA1("Message", "Key")); -}); -``` - -### Usage without RequireJS - -```html - - - -## API - -See: https://code.google.com/p/crypto-js - -### List of modules - - -- ```crypto-js/core``` -- ```crypto-js/x64-core``` -- ```crypto-js/lib-typedarrays``` - ---- - -- ```crypto-js/md5``` -- ```crypto-js/sha1``` -- ```crypto-js/sha256``` -- ```crypto-js/sha224``` -- ```crypto-js/sha512``` -- ```crypto-js/sha384``` -- ```crypto-js/sha3``` -- ```crypto-js/ripemd160``` - ---- - -- ```crypto-js/hmac-md5``` -- ```crypto-js/hmac-sha1``` -- ```crypto-js/hmac-sha256``` -- ```crypto-js/hmac-sha224``` -- ```crypto-js/hmac-sha512``` -- ```crypto-js/hmac-sha384``` -- ```crypto-js/hmac-sha3``` -- ```crypto-js/hmac-ripemd160``` - ---- - -- ```crypto-js/pbkdf2``` - ---- - -- ```crypto-js/aes``` -- ```crypto-js/tripledes``` -- ```crypto-js/rc4``` -- ```crypto-js/rabbit``` -- ```crypto-js/rabbit-legacy``` -- ```crypto-js/evpkdf``` - ---- - -- ```crypto-js/format-openssl``` -- ```crypto-js/format-hex``` - ---- - -- ```crypto-js/enc-latin1``` -- ```crypto-js/enc-utf8``` -- ```crypto-js/enc-hex``` -- ```crypto-js/enc-utf16``` -- ```crypto-js/enc-base64``` - ---- - -- ```crypto-js/mode-cfb``` -- ```crypto-js/mode-ctr``` -- ```crypto-js/mode-ctr-gladman``` -- ```crypto-js/mode-ofb``` -- ```crypto-js/mode-ecb``` - ---- - -- ```crypto-js/pad-pkcs7``` -- ```crypto-js/pad-ansix923``` -- ```crypto-js/pad-iso10126``` -- ```crypto-js/pad-iso97971``` -- ```crypto-js/pad-zeropadding``` -- ```crypto-js/pad-nopadding``` - -## License - -[The MIT License (MIT)](http://opensource.org/licenses/MIT) - -Copyright (c) 2009-2013 Jeff Mott -Copyright (c) 2013-2015 Evan Vosberg - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/aes.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/aes.js deleted file mode 100644 index ff0d208..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/aes.js +++ /dev/null @@ -1,227 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/bower.json b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/bower.json deleted file mode 100644 index 32c13d0..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/bower.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {}, - "ignore": [] -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/cipher-core.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/cipher-core.js deleted file mode 100644 index 4fad569..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/cipher-core.js +++ /dev/null @@ -1,875 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/core.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/core.js deleted file mode 100644 index b39b0fd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/core.js +++ /dev/null @@ -1,745 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else if (thatWords.length > 0xffff) { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } else { - // Copy all words at once - thisWords.push.apply(thisWords, thatWords); - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/crypto-js.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/crypto-js.js deleted file mode 100644 index e961277..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/crypto-js.js +++ /dev/null @@ -1,5951 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else if (thatWords.length > 0xffff) { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } else { - // Copy all words at once - thisWords.push.apply(thisWords, thatWords); - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki deleted file mode 100644 index 6b20199..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki +++ /dev/null @@ -1,470 +0,0 @@ - - ----- - -= Quick-start Guide = - -== Hashers == - -=== The Hasher Algorithms === - -==== MD5 ==== - -MD5 is a widely used hash function. It's been used in a variety of security applications and is also commonly used to check the integrity of files. Though, MD5 is not collision resistant, and it isn't suitable for applications like SSL certificates or digital signatures that rely on this property. - -{{{ - - -}}} - -==== SHA-1 ==== - -The SHA hash functions were designed by the National Security Agency (NSA). SHA-1 is the most established of the existing SHA hash functions, and it's used in a variety of security applications and protocols. Though, SHA-1's collision resistance has been weakening as new attacks are discovered or improved. - -{{{ - - -}}} - -==== SHA-2 ==== - -SHA-256 is one of the four variants in the SHA-2 set. It isn't as widely used as SHA-1, though it appears to provide much better security. - -{{{ - - -}}} - -SHA-512 is largely identical to SHA-256 but operates on 64-bit words rather than 32. - -{{{ - - -}}} - -CryptoJS also supports SHA-224 and SHA-384, which are largely identical but truncated versions of SHA-256 and SHA-512 respectively. - -==== SHA-3 ==== - -SHA-3 is the winner of a five-year competition to select a new cryptographic hash algorithm where 64 competing designs were evaluated. - -{{{ - - -}}} - -SHA-3 can be configured to output hash lengths of one of 224, 256, 384, or 512 bits. The default is 512 bits. - -{{{ - - -}}} - -==== RIPEMD-160 ==== - -{{{ - - -}}} - -=== The Hasher Input === - -The hash algorithms accept either strings or instances of CryptoJS.lib.WordArray. A WordArray object represents an array of 32-bit words. When you pass a string, it's automatically converted to a WordArray encoded as UTF-8. - -=== The Hasher Output === - -The hash you get back isn't a string yet. It's a WordArray object. When you use a WordArray object in a string context, it's automatically converted to a hex string. - -{{{ - - -}}} - -You can convert a WordArray object to other formats by explicitly calling the toString method and passing an encoder. - -{{{ - - - -}}} - -=== Progressive Hashing === - -{{{ - - -}}} - -== HMAC == - -Keyed-hash message authentication codes (HMAC) is a mechanism for message authentication using cryptographic hash functions. - -HMAC can be used in combination with any iterated cryptographic hash function. - -{{{ - - - - - -}}} - -=== Progressive HMAC Hashing === - -{{{ - - -}}} - -== PBKDF2 == - -PBKDF2 is a password-based key derivation function. In many applications of cryptography, user security is ultimately dependent on a password, and because a password usually can't be used directly as a cryptographic key, some processing is required. - -A salt provides a large set of keys for any given password, and an iteration count increases the cost of producing keys from a password, thereby also increasing the difficulty of attack. - -{{{ - - -}}} - -== Ciphers == - -=== The Cipher Algorithms === - -==== AES ==== - -The Advanced Encryption Standard (AES) is a U.S. Federal Information Processing Standard (FIPS). It was selected after a 5-year process where 15 competing designs were evaluated. - -{{{ - - -}}} - -CryptoJS supports AES-128, AES-192, and AES-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key. - -==== DES, Triple DES ==== - -DES is a previously dominant algorithm for encryption, and was published as an official Federal Information Processing Standard (FIPS). DES is now considered to be insecure due to the small key size. - -{{{ - - -}}} - -Triple DES applies DES three times to each block to increase the key size. The algorithm is believed to be secure in this form. - -{{{ - - -}}} - -==== Rabbit ==== - -Rabbit is a high-performance stream cipher and a finalist in the eSTREAM Portfolio. It is one of the four designs selected after a 3 1/2-year process where 22 designs were evaluated. - -{{{ - - -}}} - -==== RC4, RC4Drop ==== - -RC4 is a widely-used stream cipher. It's used in popular protocols such as SSL and WEP. Although remarkable for its simplicity and speed, the algorithm's history doesn't inspire confidence in its security. - -{{{ - - -}}} - -It was discovered that the first few bytes of keystream are strongly non-random and leak information about the key. We can defend against this attack by discarding the initial portion of the keystream. This modified algorithm is traditionally called RC4-drop. - -By default, 192 words (768 bytes) are dropped, but you can configure the algorithm to drop any number of words. - -{{{ - - -}}} - -=== Custom Key and IV === - -{{{ - - -}}} - -=== Block Modes and Padding === - -{{{ - - - - -}}} - -CryptoJS supports the following modes: - - * CBC (the default) - * CFB - * CTR - * OFB - * ECB - -And CryptoJS supports the following padding schemes: - - * Pkcs7 (the default) - * Iso97971 - * AnsiX923 - * Iso10126 - * ZeroPadding - * NoPadding - -=== The Cipher Input === - -For the plaintext message, the cipher algorithms accept either strings or instances of CryptoJS.lib.WordArray. - -For the key, when you pass a string, it's treated as a passphrase and used to derive an actual key and IV. Or you can pass a WordArray that represents the actual key. If you pass the actual key, you must also pass the actual IV. - -For the ciphertext, the cipher algorithms accept either strings or instances of CryptoJS.lib.CipherParams. A CipherParams object represents a collection of parameters such as the IV, a salt, and the raw ciphertext itself. When you pass a string, it's automatically converted to a CipherParams object according to a configurable format strategy. - -=== The Cipher Output === - -The plaintext you get back after decryption is a WordArray object. See Hashers' Output for more detail. - -The ciphertext you get back after encryption isn't a string yet. It's a CipherParams object. A CipherParams object gives you access to all the parameters used during encryption. When you use a CipherParams object in a string context, it's automatically converted to a string according to a format strategy. The default is an OpenSSL-compatible format. - -{{{ - - -}}} - -You can define your own formats in order to be compatible with other crypto implementations. A format is an object with two methods—stringify and parse—that converts between CipherParams objects and ciphertext strings. - -Here's how you might write a JSON formatter: - -{{{ - - -}}} - -=== Progressive Ciphering === - -{{{ - - -}}} - -=== Interoperability === - -==== With OpenSSL ==== - -Encrypt with OpenSSL: - -{{{ -openssl enc -aes-256-cbc -in infile -out outfile -pass pass:"Secret Passphrase" -e -base64 -}}} - -Decrypt with CryptoJS: - -{{{ - - -}}} - -== Encoders == - -CryptoJS can convert from encoding formats such as Base64, Latin1 or Hex to WordArray objects and vica versa. - -{{{ - - - - -}}} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-base64.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-base64.js deleted file mode 100644 index cb1b79c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-base64.js +++ /dev/null @@ -1,123 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-hex.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-hex.js deleted file mode 100644 index 88161ff..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-hex.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Hex; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-latin1.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-latin1.js deleted file mode 100644 index ade56dc..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-latin1.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Latin1; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-utf16.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-utf16.js deleted file mode 100644 index 7de6245..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-utf16.js +++ /dev/null @@ -1,149 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-utf8.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-utf8.js deleted file mode 100644 index e7a251d..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/enc-utf8.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Utf8; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/evpkdf.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/evpkdf.js deleted file mode 100644 index 3fe5c01..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/evpkdf.js +++ /dev/null @@ -1,132 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/format-hex.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/format-hex.js deleted file mode 100644 index 2e9a861..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/format-hex.js +++ /dev/null @@ -1,66 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/format-openssl.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/format-openssl.js deleted file mode 100644 index 3373edc..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/format-openssl.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.format.OpenSSL; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-md5.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-md5.js deleted file mode 100644 index ad7a90a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-md5.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./md5"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./md5", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacMD5; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-ripemd160.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-ripemd160.js deleted file mode 100644 index 73d55a7..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-ripemd160.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./ripemd160"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./ripemd160", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacRIPEMD160; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha1.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha1.js deleted file mode 100644 index 0b570cb..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha1.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA1; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha224.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha224.js deleted file mode 100644 index 3778863..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha224.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./sha224"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./sha224", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA224; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha256.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha256.js deleted file mode 100644 index 33b0c9f..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha256.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA256; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha3.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha3.js deleted file mode 100644 index 467495c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha3.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha3"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha3", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJSHmacSHA3; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha384.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha384.js deleted file mode 100644 index 0036e2b..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha384.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./sha384"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512", "./sha384", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA384; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha512.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha512.js deleted file mode 100644 index c1005b6..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac-sha512.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA512; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac.js deleted file mode 100644 index 8c09851..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/hmac.js +++ /dev/null @@ -1,143 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/index.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/index.js deleted file mode 100644 index c93556a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/index.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/lib-typedarrays.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/lib-typedarrays.js deleted file mode 100644 index 264b210..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/lib-typedarrays.js +++ /dev/null @@ -1,76 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/md5.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/md5.js deleted file mode 100644 index 12b0fdd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/md5.js +++ /dev/null @@ -1,268 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-cfb.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-cfb.js deleted file mode 100644 index 86231f1..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-cfb.js +++ /dev/null @@ -1,78 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js deleted file mode 100644 index bbc5687..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js +++ /dev/null @@ -1,116 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ctr.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ctr.js deleted file mode 100644 index c3d470a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ctr.js +++ /dev/null @@ -1,58 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ecb.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ecb.js deleted file mode 100644 index ff06921..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ecb.js +++ /dev/null @@ -1,40 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ofb.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ofb.js deleted file mode 100644 index c01314c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/mode-ofb.js +++ /dev/null @@ -1,54 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/package.json b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/package.json deleted file mode 100644 index a20bf4c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "author": { - "name": "Evan Vosberg", - "url": "http://github.com/evanvosberg" - }, - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {} -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-ansix923.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-ansix923.js deleted file mode 100644 index f01f21e..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-ansix923.js +++ /dev/null @@ -1,49 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-iso10126.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-iso10126.js deleted file mode 100644 index 6e2aefd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-iso10126.js +++ /dev/null @@ -1,44 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-iso97971.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-iso97971.js deleted file mode 100644 index 41049b4..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-iso97971.js +++ /dev/null @@ -1,40 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-nopadding.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-nopadding.js deleted file mode 100644 index c7787c9..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-nopadding.js +++ /dev/null @@ -1,30 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-pkcs7.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-pkcs7.js deleted file mode 100644 index 3555168..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-pkcs7.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.pad.Pkcs7; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-zeropadding.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-zeropadding.js deleted file mode 100644 index 0e8a859..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pad-zeropadding.js +++ /dev/null @@ -1,45 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pbkdf2.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pbkdf2.js deleted file mode 100644 index 1258251..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/pbkdf2.js +++ /dev/null @@ -1,145 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rabbit-legacy.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rabbit-legacy.js deleted file mode 100644 index e118b6b..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rabbit-legacy.js +++ /dev/null @@ -1,190 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rabbit.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rabbit.js deleted file mode 100644 index 1b06833..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rabbit.js +++ /dev/null @@ -1,192 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rc4.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rc4.js deleted file mode 100644 index 0e4bdff..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/rc4.js +++ /dev/null @@ -1,139 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/ripemd160.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/ripemd160.js deleted file mode 100644 index 24feb47..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/ripemd160.js +++ /dev/null @@ -1,267 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha1.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha1.js deleted file mode 100644 index 6691149..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha1.js +++ /dev/null @@ -1,150 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha224.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha224.js deleted file mode 100644 index d8ce988..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha224.js +++ /dev/null @@ -1,80 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha256.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha256.js deleted file mode 100644 index de2d7fc..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha256.js +++ /dev/null @@ -1,199 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha3.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha3.js deleted file mode 100644 index 4fb27fe..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha3.js +++ /dev/null @@ -1,323 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha384.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha384.js deleted file mode 100644 index a0b95bf..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha384.js +++ /dev/null @@ -1,83 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha512.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha512.js deleted file mode 100644 index 3359315..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/sha512.js +++ /dev/null @@ -1,323 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/tripledes.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/tripledes.js deleted file mode 100644 index c7becf3..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/tripledes.js +++ /dev/null @@ -1,770 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/x64-core.js b/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/x64-core.js deleted file mode 100644 index 57dcc14..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/bower/crypto-js/x64-core.js +++ /dev/null @@ -1,304 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/coverage.json b/node_modules/web3-provider-engine/node_modules/web3/coverage/coverage.json deleted file mode 100644 index 10cacdd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js","s":{"1":1,"2":1,"3":0,"4":1},"b":{"1":[0,1],"2":[1,0]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"2":{"start":{"line":4,"column":0},"end":{"line":6,"column":1}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":23}},"4":{"start":{"line":8,"column":0},"end":{"line":8,"column":22}}},"branchMap":{"1":{"line":4,"type":"if","locations":[{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},{"start":{"line":4,"column":0},"end":{"line":4,"column":0}}]},"2":{"line":4,"type":"binary-expr","locations":[{"start":{"line":4,"column":4},"end":{"line":4,"column":33}},{"start":{"line":4,"column":37},"end":{"line":4,"column":71}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":154,"18":154,"19":154,"20":154,"21":154,"22":154,"23":154,"24":154,"25":154,"26":154,"27":154,"28":1,"29":1,"30":25,"31":25,"32":1,"33":13,"34":13,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":154,"53":1,"54":0,"55":1,"56":4,"57":1},"b":{"1":[0,0]},"f":{"1":154,"2":25,"3":13,"4":1,"5":154,"6":0,"7":4},"fnMap":{"1":{"name":"Web3","line":46,"loc":{"start":{"line":46,"column":0},"end":{"line":46,"column":25}}},"2":{"name":"(anonymous_2)","line":73,"loc":{"start":{"line":73,"column":29},"end":{"line":73,"column":49}}},"3":{"name":"(anonymous_3)","line":78,"loc":{"start":{"line":78,"column":23},"end":{"line":78,"column":48}}},"4":{"name":"(anonymous_4)","line":100,"loc":{"start":{"line":100,"column":26},"end":{"line":100,"column":42}}},"5":{"name":"(anonymous_5)","line":105,"loc":{"start":{"line":105,"column":17},"end":{"line":105,"column":29}}},"6":{"name":"(anonymous_6)","line":129,"loc":{"start":{"line":129,"column":29},"end":{"line":129,"column":39}}},"7":{"name":"(anonymous_7)","line":133,"loc":{"start":{"line":133,"column":29},"end":{"line":133,"column":41}}}},"statementMap":{"1":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"2":{"start":{"line":29,"column":0},"end":{"line":29,"column":34}},"3":{"start":{"line":30,"column":0},"end":{"line":30,"column":40}},"4":{"start":{"line":31,"column":0},"end":{"line":31,"column":38}},"5":{"start":{"line":32,"column":0},"end":{"line":32,"column":40}},"6":{"start":{"line":33,"column":0},"end":{"line":33,"column":40}},"7":{"start":{"line":34,"column":0},"end":{"line":34,"column":42}},"8":{"start":{"line":35,"column":0},"end":{"line":35,"column":40}},"9":{"start":{"line":36,"column":0},"end":{"line":36,"column":37}},"10":{"start":{"line":37,"column":0},"end":{"line":37,"column":35}},"11":{"start":{"line":38,"column":0},"end":{"line":38,"column":38}},"12":{"start":{"line":39,"column":0},"end":{"line":39,"column":36}},"13":{"start":{"line":40,"column":0},"end":{"line":40,"column":42}},"14":{"start":{"line":41,"column":0},"end":{"line":41,"column":50}},"15":{"start":{"line":42,"column":0},"end":{"line":42,"column":48}},"16":{"start":{"line":46,"column":0},"end":{"line":65,"column":1}},"17":{"start":{"line":47,"column":4},"end":{"line":47,"column":56}},"18":{"start":{"line":48,"column":4},"end":{"line":48,"column":36}},"19":{"start":{"line":49,"column":4},"end":{"line":49,"column":29}},"20":{"start":{"line":50,"column":4},"end":{"line":50,"column":27}},"21":{"start":{"line":51,"column":4},"end":{"line":51,"column":29}},"22":{"start":{"line":52,"column":4},"end":{"line":52,"column":29}},"23":{"start":{"line":53,"column":4},"end":{"line":53,"column":35}},"24":{"start":{"line":54,"column":4},"end":{"line":56,"column":6}},"25":{"start":{"line":57,"column":4},"end":{"line":60,"column":6}},"26":{"start":{"line":61,"column":4},"end":{"line":61,"column":32}},"27":{"start":{"line":62,"column":4},"end":{"line":64,"column":7}},"28":{"start":{"line":68,"column":0},"end":{"line":71,"column":2}},"29":{"start":{"line":73,"column":0},"end":{"line":76,"column":2}},"30":{"start":{"line":74,"column":4},"end":{"line":74,"column":47}},"31":{"start":{"line":75,"column":4},"end":{"line":75,"column":36}},"32":{"start":{"line":78,"column":0},"end":{"line":81,"column":2}},"33":{"start":{"line":79,"column":4},"end":{"line":79,"column":46}},"34":{"start":{"line":80,"column":4},"end":{"line":80,"column":35}},"35":{"start":{"line":83,"column":0},"end":{"line":83,"column":35}},"36":{"start":{"line":84,"column":0},"end":{"line":84,"column":39}},"37":{"start":{"line":85,"column":0},"end":{"line":85,"column":37}},"38":{"start":{"line":86,"column":0},"end":{"line":86,"column":43}},"39":{"start":{"line":87,"column":0},"end":{"line":87,"column":41}},"40":{"start":{"line":88,"column":0},"end":{"line":88,"column":43}},"41":{"start":{"line":89,"column":0},"end":{"line":89,"column":47}},"42":{"start":{"line":90,"column":0},"end":{"line":90,"column":47}},"43":{"start":{"line":91,"column":0},"end":{"line":91,"column":35}},"44":{"start":{"line":92,"column":0},"end":{"line":92,"column":39}},"45":{"start":{"line":93,"column":0},"end":{"line":93,"column":43}},"46":{"start":{"line":94,"column":0},"end":{"line":94,"column":37}},"47":{"start":{"line":95,"column":0},"end":{"line":95,"column":27}},"48":{"start":{"line":100,"column":0},"end":{"line":103,"column":2}},"49":{"start":{"line":101,"column":4},"end":{"line":101,"column":30}},"50":{"start":{"line":102,"column":4},"end":{"line":102,"column":26}},"51":{"start":{"line":105,"column":0},"end":{"line":127,"column":2}},"52":{"start":{"line":106,"column":4},"end":{"line":126,"column":6}},"53":{"start":{"line":129,"column":0},"end":{"line":131,"column":2}},"54":{"start":{"line":130,"column":4},"end":{"line":130,"column":72}},"55":{"start":{"line":133,"column":0},"end":{"line":135,"column":2}},"56":{"start":{"line":134,"column":4},"end":{"line":134,"column":27}},"57":{"start":{"line":137,"column":0},"end":{"line":137,"column":22}}},"branchMap":{"1":{"line":130,"type":"binary-expr","locations":[{"start":{"line":130,"column":12},"end":{"line":130,"column":32}},{"start":{"line":130,"column":36},"end":{"line":130,"column":70}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":156,"7":156,"8":1,"9":76,"10":7,"11":7,"12":69,"13":69,"14":69,"15":0,"16":69,"17":1,"18":75,"19":0,"20":75,"21":75,"22":72,"23":1,"24":71,"25":0,"26":71,"27":1,"28":4,"29":0,"30":4,"31":4,"32":4,"33":0,"34":4,"35":0,"36":4,"37":1,"38":9,"39":9,"40":0,"41":1,"42":12,"43":12,"44":12,"45":10,"46":10,"47":10,"48":0,"49":1,"50":181,"51":181,"52":11,"53":181,"54":181,"55":135,"56":7,"57":7,"58":7,"59":1,"60":24,"61":24,"62":6,"63":24,"64":0,"65":1},"b":{"1":[7,69],"2":[0,69],"3":[0,75],"4":[1,71],"5":[0,71],"6":[0,4],"7":[0,4],"8":[0,4],"9":[9,0],"10":[12,0],"11":[10,0],"12":[0,10],"13":[11,170],"14":[135,46],"15":[181,135],"16":[7,0],"17":[7,0],"18":[7,7],"19":[0,24]},"f":{"1":156,"2":76,"3":75,"4":72,"5":4,"6":4,"7":9,"8":12,"9":10,"10":181,"11":7,"12":24,"13":6},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":21},"end":{"line":38,"column":41}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":32},"end":{"line":50,"column":48}}},"3":{"name":"(anonymous_3)","line":73,"loc":{"start":{"line":73,"column":37},"end":{"line":73,"column":63}}},"4":{"name":"(anonymous_4)","line":78,"loc":{"start":{"line":78,"column":37},"end":{"line":78,"column":60}}},"5":{"name":"(anonymous_5)","line":98,"loc":{"start":{"line":98,"column":37},"end":{"line":98,"column":63}}},"6":{"name":"(anonymous_6)","line":104,"loc":{"start":{"line":104,"column":37},"end":{"line":104,"column":61}}},"7":{"name":"(anonymous_7)","line":125,"loc":{"start":{"line":125,"column":43},"end":{"line":125,"column":73}}},"8":{"name":"(anonymous_8)","line":144,"loc":{"start":{"line":144,"column":46},"end":{"line":144,"column":70}}},"9":{"name":"(anonymous_9)","line":152,"loc":{"start":{"line":152,"column":11},"end":{"line":152,"column":32}}},"10":{"name":"(anonymous_10)","line":171,"loc":{"start":{"line":171,"column":39},"end":{"line":171,"column":52}}},"11":{"name":"(anonymous_11)","line":182,"loc":{"start":{"line":182,"column":41},"end":{"line":182,"column":62}}},"12":{"name":"(anonymous_12)","line":196,"loc":{"start":{"line":196,"column":33},"end":{"line":196,"column":58}}},"13":{"name":"(anonymous_13)","line":201,"loc":{"start":{"line":201,"column":44},"end":{"line":201,"column":56}}}},"statementMap":{"1":{"start":{"line":27,"column":0},"end":{"line":27,"column":35}},"2":{"start":{"line":28,"column":0},"end":{"line":28,"column":38}},"3":{"start":{"line":29,"column":0},"end":{"line":29,"column":35}},"4":{"start":{"line":30,"column":0},"end":{"line":30,"column":33}},"5":{"start":{"line":38,"column":0},"end":{"line":41,"column":2}},"6":{"start":{"line":39,"column":4},"end":{"line":39,"column":31}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":28}},"8":{"start":{"line":50,"column":0},"end":{"line":64,"column":2}},"9":{"start":{"line":51,"column":4},"end":{"line":54,"column":5}},"10":{"start":{"line":52,"column":8},"end":{"line":52,"column":48}},"11":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"12":{"start":{"line":56,"column":4},"end":{"line":56,"column":76}},"13":{"start":{"line":57,"column":4},"end":{"line":57,"column":45}},"14":{"start":{"line":59,"column":4},"end":{"line":61,"column":5}},"15":{"start":{"line":60,"column":8},"end":{"line":60,"column":45}},"16":{"start":{"line":63,"column":4},"end":{"line":63,"column":25}},"17":{"start":{"line":73,"column":0},"end":{"line":89,"column":2}},"18":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"19":{"start":{"line":75,"column":8},"end":{"line":75,"column":50}},"20":{"start":{"line":77,"column":4},"end":{"line":77,"column":76}},"21":{"start":{"line":78,"column":4},"end":{"line":88,"column":7}},"22":{"start":{"line":79,"column":8},"end":{"line":81,"column":9}},"23":{"start":{"line":80,"column":12},"end":{"line":80,"column":33}},"24":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"25":{"start":{"line":84,"column":12},"end":{"line":84,"column":60}},"26":{"start":{"line":87,"column":8},"end":{"line":87,"column":38}},"27":{"start":{"line":98,"column":0},"end":{"line":115,"column":2}},"28":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"29":{"start":{"line":100,"column":8},"end":{"line":100,"column":50}},"30":{"start":{"line":103,"column":4},"end":{"line":103,"column":61}},"31":{"start":{"line":104,"column":4},"end":{"line":114,"column":7}},"32":{"start":{"line":105,"column":8},"end":{"line":107,"column":9}},"33":{"start":{"line":106,"column":12},"end":{"line":106,"column":33}},"34":{"start":{"line":109,"column":8},"end":{"line":111,"column":9}},"35":{"start":{"line":110,"column":12},"end":{"line":110,"column":61}},"36":{"start":{"line":113,"column":8},"end":{"line":113,"column":31}},"37":{"start":{"line":125,"column":0},"end":{"line":135,"column":2}},"38":{"start":{"line":126,"column":4},"end":{"line":134,"column":5}},"39":{"start":{"line":127,"column":8},"end":{"line":130,"column":10}},"40":{"start":{"line":133,"column":8},"end":{"line":133,"column":87}},"41":{"start":{"line":144,"column":0},"end":{"line":163,"column":1}},"42":{"start":{"line":145,"column":4},"end":{"line":145,"column":21}},"43":{"start":{"line":147,"column":4},"end":{"line":162,"column":5}},"44":{"start":{"line":149,"column":8},"end":{"line":160,"column":11}},"45":{"start":{"line":154,"column":12},"end":{"line":156,"column":13}},"46":{"start":{"line":155,"column":16},"end":{"line":155,"column":47}},"47":{"start":{"line":158,"column":12},"end":{"line":159,"column":38}},"48":{"start":{"line":159,"column":16},"end":{"line":159,"column":38}},"49":{"start":{"line":171,"column":0},"end":{"line":189,"column":2}},"50":{"start":{"line":172,"column":4},"end":{"line":172,"column":21}},"51":{"start":{"line":175,"column":4},"end":{"line":176,"column":21}},"52":{"start":{"line":176,"column":8},"end":{"line":176,"column":21}},"53":{"start":{"line":178,"column":4},"end":{"line":178,"column":22}},"54":{"start":{"line":181,"column":4},"end":{"line":188,"column":5}},"55":{"start":{"line":182,"column":8},"end":{"line":187,"column":11}},"56":{"start":{"line":183,"column":12},"end":{"line":186,"column":13}},"57":{"start":{"line":184,"column":16},"end":{"line":185,"column":105}},"58":{"start":{"line":185,"column":20},"end":{"line":185,"column":105}},"59":{"start":{"line":196,"column":0},"end":{"line":209,"column":2}},"60":{"start":{"line":197,"column":4},"end":{"line":197,"column":21}},"61":{"start":{"line":201,"column":4},"end":{"line":203,"column":7}},"62":{"start":{"line":202,"column":8},"end":{"line":202,"column":37}},"63":{"start":{"line":207,"column":4},"end":{"line":208,"column":30}},"64":{"start":{"line":208,"column":8},"end":{"line":208,"column":30}},"65":{"start":{"line":211,"column":0},"end":{"line":211,"column":32}}},"branchMap":{"1":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"2":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":4},"end":{"line":59,"column":4}},{"start":{"line":59,"column":4},"end":{"line":59,"column":4}}]},"3":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":74,"column":4}},{"start":{"line":74,"column":4},"end":{"line":74,"column":4}}]},"4":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":8},"end":{"line":79,"column":8}},{"start":{"line":79,"column":8},"end":{"line":79,"column":8}}]},"5":{"line":83,"type":"if","locations":[{"start":{"line":83,"column":8},"end":{"line":83,"column":8}},{"start":{"line":83,"column":8},"end":{"line":83,"column":8}}]},"6":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"7":{"line":105,"type":"if","locations":[{"start":{"line":105,"column":8},"end":{"line":105,"column":8}},{"start":{"line":105,"column":8},"end":{"line":105,"column":8}}]},"8":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"9":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":126,"column":4}},{"start":{"line":126,"column":4},"end":{"line":126,"column":4}}]},"10":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"11":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":12},"end":{"line":154,"column":12}},{"start":{"line":154,"column":12},"end":{"line":154,"column":12}}]},"12":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":12},"end":{"line":158,"column":12}},{"start":{"line":158,"column":12},"end":{"line":158,"column":12}}]},"13":{"line":175,"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":175,"column":4}},{"start":{"line":175,"column":4},"end":{"line":175,"column":4}}]},"14":{"line":181,"type":"if","locations":[{"start":{"line":181,"column":4},"end":{"line":181,"column":4}},{"start":{"line":181,"column":4},"end":{"line":181,"column":4}}]},"15":{"line":181,"type":"binary-expr","locations":[{"start":{"line":181,"column":7},"end":{"line":181,"column":20}},{"start":{"line":181,"column":24},"end":{"line":181,"column":40}}]},"16":{"line":183,"type":"if","locations":[{"start":{"line":183,"column":12},"end":{"line":183,"column":12}},{"start":{"line":183,"column":12},"end":{"line":183,"column":12}}]},"17":{"line":184,"type":"if","locations":[{"start":{"line":184,"column":16},"end":{"line":184,"column":16}},{"start":{"line":184,"column":16},"end":{"line":184,"column":16}}]},"18":{"line":184,"type":"binary-expr","locations":[{"start":{"line":184,"column":19},"end":{"line":184,"column":66}},{"start":{"line":184,"column":70},"end":{"line":184,"column":126}}]},"19":{"line":207,"type":"if","locations":[{"start":{"line":207,"column":4},"end":{"line":207,"column":4}},{"start":{"line":207,"column":4},"end":{"line":207,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js","s":{"1":1,"2":301,"3":300,"4":1,"5":1,"6":1,"7":298,"8":298,"9":1,"10":158,"11":0,"12":158,"13":1,"14":157,"15":1,"16":6,"17":6,"18":10,"19":1},"b":{"1":[300,1],"2":[0,158],"3":[158,15],"4":[157,156,154,152,150]},"f":{"1":301,"2":298,"3":158,"4":157,"5":6,"6":10},"fnMap":{"1":{"name":"(anonymous_1)","line":23,"loc":{"start":{"line":23,"column":14},"end":{"line":23,"column":26}}},"2":{"name":"(anonymous_2)","line":36,"loc":{"start":{"line":36,"column":22},"end":{"line":36,"column":34}}},"3":{"name":"(anonymous_3)","line":49,"loc":{"start":{"line":49,"column":30},"end":{"line":49,"column":56}}},"4":{"name":"(anonymous_4)","line":68,"loc":{"start":{"line":68,"column":36},"end":{"line":68,"column":56}}},"5":{"name":"(anonymous_5)","line":83,"loc":{"start":{"line":83,"column":35},"end":{"line":83,"column":55}}},"6":{"name":"(anonymous_6)","line":85,"loc":{"start":{"line":85,"column":24},"end":{"line":85,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":31,"column":2}},"2":{"start":{"line":25,"column":4},"end":{"line":27,"column":5}},"3":{"start":{"line":26,"column":8},"end":{"line":26,"column":51}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":47}},"5":{"start":{"line":30,"column":4},"end":{"line":30,"column":23}},"6":{"start":{"line":36,"column":0},"end":{"line":39,"column":2}},"7":{"start":{"line":37,"column":4},"end":{"line":37,"column":33}},"8":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"9":{"start":{"line":49,"column":0},"end":{"line":59,"column":2}},"10":{"start":{"line":50,"column":4},"end":{"line":51,"column":61}},"11":{"start":{"line":51,"column":8},"end":{"line":51,"column":61}},"12":{"start":{"line":53,"column":4},"end":{"line":58,"column":6}},"13":{"start":{"line":68,"column":0},"end":{"line":74,"column":2}},"14":{"start":{"line":69,"column":4},"end":{"line":73,"column":38}},"15":{"start":{"line":83,"column":0},"end":{"line":88,"column":2}},"16":{"start":{"line":84,"column":4},"end":{"line":84,"column":20}},"17":{"start":{"line":85,"column":4},"end":{"line":87,"column":7}},"18":{"start":{"line":86,"column":8},"end":{"line":86,"column":62}},"19":{"start":{"line":90,"column":0},"end":{"line":90,"column":25}}},"branchMap":{"1":{"line":25,"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":25,"column":4}},{"start":{"line":25,"column":4},"end":{"line":25,"column":4}}]},"2":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"3":{"line":56,"type":"binary-expr","locations":[{"start":{"line":56,"column":16},"end":{"line":56,"column":22}},{"start":{"line":56,"column":26},"end":{"line":56,"column":28}}]},"4":{"line":69,"type":"binary-expr","locations":[{"start":{"line":69,"column":11},"end":{"line":69,"column":21}},{"start":{"line":70,"column":8},"end":{"line":70,"column":23}},{"start":{"line":71,"column":8},"end":{"line":71,"column":34}},{"start":{"line":72,"column":8},"end":{"line":72,"column":39}},{"start":{"line":73,"column":8},"end":{"line":73,"column":37}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js","s":{"1":2,"2":2,"3":2,"4":2,"5":205,"6":2,"7":38,"8":2,"9":10,"10":10,"11":10,"12":3,"13":10,"14":133,"15":133,"16":2,"17":131,"18":10,"19":2,"20":5,"21":5,"22":5,"23":5,"24":5,"25":110,"26":110,"27":5,"28":2,"29":25,"30":25,"31":25,"32":291,"33":291,"34":2,"35":289,"36":289,"37":25,"38":2,"39":10,"40":10,"41":236,"42":236,"43":236,"44":10,"45":2,"46":105,"47":48,"48":57,"49":136,"50":57,"51":2,"52":101,"53":101,"54":2,"55":94,"56":94,"57":2,"58":193,"59":2,"60":160,"61":160,"62":160,"63":2,"64":126,"65":2,"66":124,"67":1,"68":123,"69":2,"70":121,"71":62,"72":5,"73":57,"74":42,"75":15,"76":5,"77":69,"78":2,"79":39,"80":39,"81":39,"82":1,"83":38,"84":2,"85":12,"86":12,"87":2,"88":27,"89":26,"90":2,"91":705,"92":705,"93":47,"94":658,"95":208,"96":450,"97":2,"98":205,"99":205,"100":5,"101":200,"102":2,"103":78,"104":2,"105":24,"106":2,"107":0,"108":0,"109":0,"110":0,"111":0,"112":2,"113":875,"114":2,"115":832,"116":2,"117":358,"118":2,"119":286,"120":2,"121":126,"122":2,"123":453,"124":2,"125":9,"126":9,"127":5,"128":2},"b":{"1":[0,205],"2":[0,38],"3":[3,7],"4":[2,131],"5":[5,0],"6":[2,289],"7":[0,289],"8":[31,205],"9":[48,57],"10":[101,0],"11":[94,0],"12":[17,143],"13":[2,124],"14":[1,123],"15":[2,121],"16":[62,59],"17":[5,57],"18":[42,15],"19":[5,10],"20":[39,0],"21":[1,38],"22":[0,12],"23":[0,26],"24":[705,40],"25":[47,658],"26":[208,450],"27":[658,234,45],"28":[5,200],"29":[0,0],"30":[0,0],"31":[875,826,780,780],"32":[832,505,459,459]},"f":{"1":205,"2":38,"3":10,"4":5,"5":25,"6":10,"7":105,"8":136,"9":101,"10":94,"11":193,"12":160,"13":126,"14":39,"15":12,"16":27,"17":705,"18":205,"19":78,"20":24,"21":0,"22":875,"23":832,"24":358,"25":286,"26":126,"27":453,"28":9},"fnMap":{"1":{"name":"(anonymous_1)","line":76,"loc":{"start":{"line":76,"column":14},"end":{"line":76,"column":45}}},"2":{"name":"(anonymous_2)","line":89,"loc":{"start":{"line":89,"column":15},"end":{"line":89,"column":46}}},"3":{"name":"(anonymous_3)","line":100,"loc":{"start":{"line":100,"column":13},"end":{"line":100,"column":27}}},"4":{"name":"(anonymous_4)","line":124,"loc":{"start":{"line":124,"column":14},"end":{"line":124,"column":28}}},"5":{"name":"(anonymous_5)","line":147,"loc":{"start":{"line":147,"column":15},"end":{"line":147,"column":29}}},"6":{"name":"(anonymous_6)","line":169,"loc":{"start":{"line":169,"column":16},"end":{"line":169,"column":30}}},"7":{"name":"(anonymous_7)","line":187,"loc":{"start":{"line":187,"column":26},"end":{"line":187,"column":42}}},"8":{"name":"(anonymous_8)","line":192,"loc":{"start":{"line":192,"column":35},"end":{"line":192,"column":46}}},"9":{"name":"(anonymous_9)","line":203,"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":41}}},"10":{"name":"(anonymous_10)","line":209,"loc":{"start":{"line":209,"column":22},"end":{"line":209,"column":38}}},"11":{"name":"(anonymous_11)","line":222,"loc":{"start":{"line":222,"column":16},"end":{"line":222,"column":33}}},"12":{"name":"(anonymous_12)","line":233,"loc":{"start":{"line":233,"column":18},"end":{"line":233,"column":35}}},"13":{"name":"(anonymous_13)","line":249,"loc":{"start":{"line":249,"column":12},"end":{"line":249,"column":27}}},"14":{"name":"(anonymous_14)","line":282,"loc":{"start":{"line":282,"column":21},"end":{"line":282,"column":37}}},"15":{"name":"(anonymous_15)","line":312,"loc":{"start":{"line":312,"column":14},"end":{"line":312,"column":37}}},"16":{"name":"(anonymous_16)","line":339,"loc":{"start":{"line":339,"column":12},"end":{"line":339,"column":35}}},"17":{"name":"(anonymous_17)","line":352,"loc":{"start":{"line":352,"column":18},"end":{"line":352,"column":35}}},"18":{"name":"(anonymous_18)","line":372,"loc":{"start":{"line":372,"column":23},"end":{"line":372,"column":41}}},"19":{"name":"(anonymous_19)","line":387,"loc":{"start":{"line":387,"column":22},"end":{"line":387,"column":41}}},"20":{"name":"(anonymous_20)","line":398,"loc":{"start":{"line":398,"column":16},"end":{"line":398,"column":35}}},"21":{"name":"(anonymous_21)","line":409,"loc":{"start":{"line":409,"column":16},"end":{"line":409,"column":35}}},"22":{"name":"(anonymous_22)","line":428,"loc":{"start":{"line":428,"column":18},"end":{"line":428,"column":36}}},"23":{"name":"(anonymous_23)","line":440,"loc":{"start":{"line":440,"column":15},"end":{"line":440,"column":33}}},"24":{"name":"(anonymous_24)","line":452,"loc":{"start":{"line":452,"column":17},"end":{"line":452,"column":35}}},"25":{"name":"(anonymous_25)","line":463,"loc":{"start":{"line":463,"column":15},"end":{"line":463,"column":33}}},"26":{"name":"(anonymous_26)","line":474,"loc":{"start":{"line":474,"column":16},"end":{"line":474,"column":34}}},"27":{"name":"(anonymous_27)","line":485,"loc":{"start":{"line":485,"column":14},"end":{"line":485,"column":32}}},"28":{"name":"(anonymous_28)","line":496,"loc":{"start":{"line":496,"column":13},"end":{"line":496,"column":28}}}},"statementMap":{"1":{"start":{"line":37,"column":0},"end":{"line":37,"column":40}},"2":{"start":{"line":38,"column":0},"end":{"line":38,"column":27}},"3":{"start":{"line":40,"column":0},"end":{"line":65,"column":2}},"4":{"start":{"line":76,"column":0},"end":{"line":78,"column":2}},"5":{"start":{"line":77,"column":4},"end":{"line":77,"column":81}},"6":{"start":{"line":89,"column":0},"end":{"line":91,"column":2}},"7":{"start":{"line":90,"column":4},"end":{"line":90,"column":83}},"8":{"start":{"line":100,"column":0},"end":{"line":115,"column":2}},"9":{"start":{"line":102,"column":4},"end":{"line":102,"column":17}},"10":{"start":{"line":103,"column":4},"end":{"line":103,"column":30}},"11":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"12":{"start":{"line":105,"column":8},"end":{"line":105,"column":14}},"13":{"start":{"line":107,"column":4},"end":{"line":112,"column":5}},"14":{"start":{"line":108,"column":8},"end":{"line":108,"column":50}},"15":{"start":{"line":109,"column":8},"end":{"line":110,"column":18}},"16":{"start":{"line":110,"column":12},"end":{"line":110,"column":18}},"17":{"start":{"line":111,"column":8},"end":{"line":111,"column":41}},"18":{"start":{"line":114,"column":4},"end":{"line":114,"column":28}},"19":{"start":{"line":124,"column":0},"end":{"line":137,"column":2}},"20":{"start":{"line":126,"column":4},"end":{"line":126,"column":17}},"21":{"start":{"line":127,"column":4},"end":{"line":127,"column":30}},"22":{"start":{"line":128,"column":4},"end":{"line":130,"column":5}},"23":{"start":{"line":129,"column":8},"end":{"line":129,"column":14}},"24":{"start":{"line":131,"column":4},"end":{"line":134,"column":5}},"25":{"start":{"line":132,"column":8},"end":{"line":132,"column":50}},"26":{"start":{"line":133,"column":8},"end":{"line":133,"column":41}},"27":{"start":{"line":136,"column":4},"end":{"line":136,"column":15}},"28":{"start":{"line":147,"column":0},"end":{"line":159,"column":2}},"29":{"start":{"line":148,"column":4},"end":{"line":148,"column":27}},"30":{"start":{"line":149,"column":4},"end":{"line":149,"column":17}},"31":{"start":{"line":150,"column":4},"end":{"line":156,"column":5}},"32":{"start":{"line":151,"column":8},"end":{"line":151,"column":37}},"33":{"start":{"line":152,"column":8},"end":{"line":153,"column":18}},"34":{"start":{"line":153,"column":12},"end":{"line":153,"column":18}},"35":{"start":{"line":154,"column":8},"end":{"line":154,"column":34}},"36":{"start":{"line":155,"column":8},"end":{"line":155,"column":42}},"37":{"start":{"line":158,"column":4},"end":{"line":158,"column":22}},"38":{"start":{"line":169,"column":0},"end":{"line":178,"column":2}},"39":{"start":{"line":170,"column":4},"end":{"line":170,"column":17}},"40":{"start":{"line":171,"column":4},"end":{"line":175,"column":5}},"41":{"start":{"line":172,"column":8},"end":{"line":172,"column":37}},"42":{"start":{"line":173,"column":8},"end":{"line":173,"column":34}},"43":{"start":{"line":174,"column":8},"end":{"line":174,"column":42}},"44":{"start":{"line":177,"column":4},"end":{"line":177,"column":22}},"45":{"start":{"line":187,"column":0},"end":{"line":194,"column":2}},"46":{"start":{"line":188,"column":4},"end":{"line":190,"column":5}},"47":{"start":{"line":189,"column":8},"end":{"line":189,"column":25}},"48":{"start":{"line":192,"column":4},"end":{"line":192,"column":72}},"49":{"start":{"line":192,"column":47},"end":{"line":192,"column":61}},"50":{"start":{"line":193,"column":4},"end":{"line":193,"column":44}},"51":{"start":{"line":203,"column":0},"end":{"line":206,"column":2}},"52":{"start":{"line":204,"column":4},"end":{"line":204,"column":35}},"53":{"start":{"line":205,"column":4},"end":{"line":205,"column":57}},"54":{"start":{"line":209,"column":0},"end":{"line":213,"column":2}},"55":{"start":{"line":211,"column":4},"end":{"line":211,"column":35}},"56":{"start":{"line":212,"column":4},"end":{"line":212,"column":105}},"57":{"start":{"line":222,"column":0},"end":{"line":224,"column":2}},"58":{"start":{"line":223,"column":4},"end":{"line":223,"column":41}},"59":{"start":{"line":233,"column":0},"end":{"line":238,"column":2}},"60":{"start":{"line":234,"column":4},"end":{"line":234,"column":36}},"61":{"start":{"line":235,"column":4},"end":{"line":235,"column":37}},"62":{"start":{"line":237,"column":4},"end":{"line":237,"column":73}},"63":{"start":{"line":249,"column":0},"end":{"line":272,"column":2}},"64":{"start":{"line":252,"column":4},"end":{"line":253,"column":33}},"65":{"start":{"line":253,"column":8},"end":{"line":253,"column":33}},"66":{"start":{"line":255,"column":4},"end":{"line":256,"column":32}},"67":{"start":{"line":256,"column":8},"end":{"line":256,"column":32}},"68":{"start":{"line":258,"column":4},"end":{"line":259,"column":45}},"69":{"start":{"line":259,"column":8},"end":{"line":259,"column":45}},"70":{"start":{"line":262,"column":4},"end":{"line":269,"column":5}},"71":{"start":{"line":263,"column":8},"end":{"line":268,"column":34}},"72":{"start":{"line":264,"column":12},"end":{"line":264,"column":36}},"73":{"start":{"line":265,"column":13},"end":{"line":268,"column":34}},"74":{"start":{"line":266,"column":12},"end":{"line":266,"column":23}},"75":{"start":{"line":267,"column":13},"end":{"line":268,"column":34}},"76":{"start":{"line":268,"column":12},"end":{"line":268,"column":34}},"77":{"start":{"line":271,"column":4},"end":{"line":271,"column":28}},"78":{"start":{"line":282,"column":0},"end":{"line":289,"column":2}},"79":{"start":{"line":283,"column":4},"end":{"line":283,"column":47}},"80":{"start":{"line":284,"column":4},"end":{"line":284,"column":34}},"81":{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},"82":{"start":{"line":286,"column":8},"end":{"line":286,"column":131}},"83":{"start":{"line":288,"column":4},"end":{"line":288,"column":40}},"84":{"start":{"line":312,"column":0},"end":{"line":316,"column":2}},"85":{"start":{"line":313,"column":4},"end":{"line":313,"column":74}},"86":{"start":{"line":315,"column":4},"end":{"line":315,"column":72}},"87":{"start":{"line":339,"column":0},"end":{"line":343,"column":2}},"88":{"start":{"line":340,"column":4},"end":{"line":340,"column":70}},"89":{"start":{"line":342,"column":4},"end":{"line":342,"column":72}},"90":{"start":{"line":352,"column":0},"end":{"line":363,"column":2}},"91":{"start":{"line":354,"column":4},"end":{"line":354,"column":25}},"92":{"start":{"line":355,"column":4},"end":{"line":356,"column":22}},"93":{"start":{"line":356,"column":8},"end":{"line":356,"column":22}},"94":{"start":{"line":358,"column":4},"end":{"line":360,"column":5}},"95":{"start":{"line":359,"column":8},"end":{"line":359,"column":58}},"96":{"start":{"line":362,"column":4},"end":{"line":362,"column":50}},"97":{"start":{"line":372,"column":0},"end":{"line":378,"column":2}},"98":{"start":{"line":373,"column":4},"end":{"line":373,"column":40}},"99":{"start":{"line":374,"column":4},"end":{"line":376,"column":5}},"100":{"start":{"line":375,"column":8},"end":{"line":375,"column":125}},"101":{"start":{"line":377,"column":4},"end":{"line":377,"column":21}},"102":{"start":{"line":387,"column":0},"end":{"line":389,"column":2}},"103":{"start":{"line":388,"column":4},"end":{"line":388,"column":45}},"104":{"start":{"line":398,"column":0},"end":{"line":400,"column":2}},"105":{"start":{"line":399,"column":4},"end":{"line":399,"column":48}},"106":{"start":{"line":409,"column":0},"end":{"line":419,"column":2}},"107":{"start":{"line":410,"column":4},"end":{"line":412,"column":5}},"108":{"start":{"line":411,"column":8},"end":{"line":411,"column":23}},"109":{"start":{"line":414,"column":4},"end":{"line":416,"column":5}},"110":{"start":{"line":415,"column":8},"end":{"line":415,"column":30}},"111":{"start":{"line":418,"column":4},"end":{"line":418,"column":56}},"112":{"start":{"line":428,"column":0},"end":{"line":431,"column":2}},"113":{"start":{"line":429,"column":4},"end":{"line":430,"column":82}},"114":{"start":{"line":440,"column":0},"end":{"line":443,"column":2}},"115":{"start":{"line":441,"column":4},"end":{"line":442,"column":79}},"116":{"start":{"line":452,"column":0},"end":{"line":454,"column":2}},"117":{"start":{"line":453,"column":4},"end":{"line":453,"column":40}},"118":{"start":{"line":463,"column":0},"end":{"line":465,"column":2}},"119":{"start":{"line":464,"column":4},"end":{"line":464,"column":38}},"120":{"start":{"line":474,"column":0},"end":{"line":476,"column":2}},"121":{"start":{"line":475,"column":4},"end":{"line":475,"column":39}},"122":{"start":{"line":485,"column":0},"end":{"line":487,"column":2}},"123":{"start":{"line":486,"column":4},"end":{"line":486,"column":35}},"124":{"start":{"line":496,"column":0},"end":{"line":502,"column":2}},"125":{"start":{"line":497,"column":4},"end":{"line":501,"column":5}},"126":{"start":{"line":498,"column":8},"end":{"line":498,"column":33}},"127":{"start":{"line":500,"column":8},"end":{"line":500,"column":21}},"128":{"start":{"line":504,"column":0},"end":{"line":531,"column":2}}},"branchMap":{"1":{"line":77,"type":"cond-expr","locations":[{"start":{"line":77,"column":60},"end":{"line":77,"column":64}},{"start":{"line":77,"column":67},"end":{"line":77,"column":70}}]},"2":{"line":90,"type":"cond-expr","locations":[{"start":{"line":90,"column":70},"end":{"line":90,"column":74}},{"start":{"line":90,"column":77},"end":{"line":90,"column":80}}]},"3":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":104,"column":4}},{"start":{"line":104,"column":4},"end":{"line":104,"column":4}}]},"4":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"5":{"line":128,"type":"if","locations":[{"start":{"line":128,"column":4},"end":{"line":128,"column":4}},{"start":{"line":128,"column":4},"end":{"line":128,"column":4}}]},"6":{"line":152,"type":"if","locations":[{"start":{"line":152,"column":8},"end":{"line":152,"column":8}},{"start":{"line":152,"column":8},"end":{"line":152,"column":8}}]},"7":{"line":155,"type":"cond-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":37}},{"start":{"line":155,"column":40},"end":{"line":155,"column":41}}]},"8":{"line":174,"type":"cond-expr","locations":[{"start":{"line":174,"column":30},"end":{"line":174,"column":37}},{"start":{"line":174,"column":40},"end":{"line":174,"column":41}}]},"9":{"line":188,"type":"if","locations":[{"start":{"line":188,"column":4},"end":{"line":188,"column":4}},{"start":{"line":188,"column":4},"end":{"line":188,"column":4}}]},"10":{"line":205,"type":"cond-expr","locations":[{"start":{"line":205,"column":27},"end":{"line":205,"column":49}},{"start":{"line":205,"column":52},"end":{"line":205,"column":56}}]},"11":{"line":212,"type":"cond-expr","locations":[{"start":{"line":212,"column":27},"end":{"line":212,"column":99}},{"start":{"line":212,"column":102},"end":{"line":212,"column":104}}]},"12":{"line":237,"type":"cond-expr","locations":[{"start":{"line":237,"column":32},"end":{"line":237,"column":56}},{"start":{"line":237,"column":59},"end":{"line":237,"column":72}}]},"13":{"line":252,"type":"if","locations":[{"start":{"line":252,"column":4},"end":{"line":252,"column":4}},{"start":{"line":252,"column":4},"end":{"line":252,"column":4}}]},"14":{"line":255,"type":"if","locations":[{"start":{"line":255,"column":4},"end":{"line":255,"column":4}},{"start":{"line":255,"column":4},"end":{"line":255,"column":4}}]},"15":{"line":258,"type":"if","locations":[{"start":{"line":258,"column":4},"end":{"line":258,"column":4}},{"start":{"line":258,"column":4},"end":{"line":258,"column":4}}]},"16":{"line":262,"type":"if","locations":[{"start":{"line":262,"column":4},"end":{"line":262,"column":4}},{"start":{"line":262,"column":4},"end":{"line":262,"column":4}}]},"17":{"line":263,"type":"if","locations":[{"start":{"line":263,"column":8},"end":{"line":263,"column":8}},{"start":{"line":263,"column":8},"end":{"line":263,"column":8}}]},"18":{"line":265,"type":"if","locations":[{"start":{"line":265,"column":13},"end":{"line":265,"column":13}},{"start":{"line":265,"column":13},"end":{"line":265,"column":13}}]},"19":{"line":267,"type":"if","locations":[{"start":{"line":267,"column":13},"end":{"line":267,"column":13}},{"start":{"line":267,"column":13},"end":{"line":267,"column":13}}]},"20":{"line":283,"type":"cond-expr","locations":[{"start":{"line":283,"column":18},"end":{"line":283,"column":36}},{"start":{"line":283,"column":39},"end":{"line":283,"column":46}}]},"21":{"line":285,"type":"if","locations":[{"start":{"line":285,"column":4},"end":{"line":285,"column":4}},{"start":{"line":285,"column":4},"end":{"line":285,"column":4}}]},"22":{"line":315,"type":"cond-expr","locations":[{"start":{"line":315,"column":33},"end":{"line":315,"column":44}},{"start":{"line":315,"column":47},"end":{"line":315,"column":71}}]},"23":{"line":342,"type":"cond-expr","locations":[{"start":{"line":342,"column":33},"end":{"line":342,"column":44}},{"start":{"line":342,"column":47},"end":{"line":342,"column":71}}]},"24":{"line":354,"type":"binary-expr","locations":[{"start":{"line":354,"column":13},"end":{"line":354,"column":19}},{"start":{"line":354,"column":23},"end":{"line":354,"column":24}}]},"25":{"line":355,"type":"if","locations":[{"start":{"line":355,"column":4},"end":{"line":355,"column":4}},{"start":{"line":355,"column":4},"end":{"line":355,"column":4}}]},"26":{"line":358,"type":"if","locations":[{"start":{"line":358,"column":4},"end":{"line":358,"column":4}},{"start":{"line":358,"column":4},"end":{"line":358,"column":4}}]},"27":{"line":358,"type":"binary-expr","locations":[{"start":{"line":358,"column":8},"end":{"line":358,"column":24}},{"start":{"line":358,"column":29},"end":{"line":358,"column":55}},{"start":{"line":358,"column":59},"end":{"line":358,"column":86}}]},"28":{"line":374,"type":"if","locations":[{"start":{"line":374,"column":4},"end":{"line":374,"column":4}},{"start":{"line":374,"column":4},"end":{"line":374,"column":4}}]},"29":{"line":410,"type":"if","locations":[{"start":{"line":410,"column":4},"end":{"line":410,"column":4}},{"start":{"line":410,"column":4},"end":{"line":410,"column":4}}]},"30":{"line":414,"type":"if","locations":[{"start":{"line":414,"column":4},"end":{"line":414,"column":4}},{"start":{"line":414,"column":4},"end":{"line":414,"column":4}}]},"31":{"line":429,"type":"binary-expr","locations":[{"start":{"line":429,"column":11},"end":{"line":429,"column":38}},{"start":{"line":430,"column":9},"end":{"line":430,"column":15}},{"start":{"line":430,"column":19},"end":{"line":430,"column":37}},{"start":{"line":430,"column":41},"end":{"line":430,"column":80}}]},"32":{"line":441,"type":"binary-expr","locations":[{"start":{"line":441,"column":11},"end":{"line":441,"column":37}},{"start":{"line":442,"column":9},"end":{"line":442,"column":15}},{"start":{"line":442,"column":19},"end":{"line":442,"column":37}},{"start":{"line":442,"column":41},"end":{"line":442,"column":77}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":38,"column":0},"end":{"line":38,"column":40}},"2":{"start":{"line":40,"column":0},"end":{"line":68,"column":2}},"3":{"start":{"line":70,"column":0},"end":{"line":78,"column":2}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js","s":{"1":3,"2":4,"3":0,"4":7,"5":6,"6":6},"b":{"1":[2,4],"2":[6,2,2]},"f":{"1":4,"2":0,"3":7,"4":6},"fnMap":{"1":{"name":"(anonymous_1)","line":24,"loc":{"start":{"line":24,"column":27},"end":{"line":24,"column":39}}},"2":{"name":"(anonymous_2)","line":27,"loc":{"start":{"line":27,"column":23},"end":{"line":27,"column":38}}},"3":{"name":"(anonymous_3)","line":30,"loc":{"start":{"line":30,"column":21},"end":{"line":30,"column":33}}},"4":{"name":"(anonymous_4)","line":33,"loc":{"start":{"line":33,"column":21},"end":{"line":33,"column":38}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":37,"column":2}},"2":{"start":{"line":25,"column":8},"end":{"line":25,"column":63}},"3":{"start":{"line":28,"column":8},"end":{"line":28,"column":84}},"4":{"start":{"line":31,"column":8},"end":{"line":31,"column":56}},"5":{"start":{"line":34,"column":8},"end":{"line":34,"column":155}},"6":{"start":{"line":35,"column":8},"end":{"line":35,"column":34}}},"branchMap":{"1":{"line":34,"type":"cond-expr","locations":[{"start":{"line":34,"column":77},"end":{"line":34,"column":97}},{"start":{"line":34,"column":100},"end":{"line":34,"column":154}}]},"2":{"line":34,"type":"binary-expr","locations":[{"start":{"line":34,"column":22},"end":{"line":34,"column":30}},{"start":{"line":34,"column":34},"end":{"line":34,"column":48}},{"start":{"line":34,"column":52},"end":{"line":34,"column":74}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js","s":{"1":1,"2":1,"3":15,"4":15,"5":11,"6":15,"7":1,"8":21,"9":21,"10":21,"11":21,"12":21,"13":661,"14":661,"15":450,"16":211,"17":1,"18":21,"19":21,"20":158,"21":158,"22":21,"23":1,"24":113,"25":1,"26":5,"27":5,"28":5,"29":5,"30":1,"31":6,"32":6,"33":6,"34":6,"35":1,"36":1,"37":1,"38":18,"39":18,"40":1,"41":99,"42":1,"43":19,"44":1,"45":2,"46":1,"47":0,"48":1,"49":1,"50":1,"51":1,"52":1,"53":10,"54":10,"55":10,"56":10,"57":0,"58":1,"59":0,"60":1},"b":{"1":[450,211],"2":[661,450],"3":[99,15],"4":[19,1],"5":[1,0],"6":[1,0],"7":[10,0]},"f":{"1":15,"2":21,"3":661,"4":21,"5":113,"6":5,"7":6,"8":1,"9":18,"10":99,"11":19,"12":2,"13":0,"14":1,"15":1,"16":10,"17":0},"fnMap":{"1":{"name":"(anonymous_1)","line":25,"loc":{"start":{"line":25,"column":14},"end":{"line":25,"column":39}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":22},"end":{"line":41,"column":38}}},"3":{"name":"(anonymous_3)","line":48,"loc":{"start":{"line":48,"column":30},"end":{"line":48,"column":41}}},"4":{"name":"(anonymous_4)","line":66,"loc":{"start":{"line":66,"column":14},"end":{"line":66,"column":30}}},"5":{"name":"(anonymous_5)","line":83,"loc":{"start":{"line":83,"column":11},"end":{"line":83,"column":27}}},"6":{"name":"(anonymous_6)","line":94,"loc":{"start":{"line":94,"column":19},"end":{"line":94,"column":38}}},"7":{"name":"(anonymous_7)","line":110,"loc":{"start":{"line":110,"column":16},"end":{"line":110,"column":32}}},"8":{"name":"(anonymous_8)","line":126,"loc":{"start":{"line":126,"column":22},"end":{"line":126,"column":41}}},"9":{"name":"(anonymous_9)","line":137,"loc":{"start":{"line":137,"column":15},"end":{"line":137,"column":31}}},"10":{"name":"(anonymous_10)","line":148,"loc":{"start":{"line":148,"column":25},"end":{"line":148,"column":37}}},"11":{"name":"(anonymous_11)","line":159,"loc":{"start":{"line":159,"column":26},"end":{"line":159,"column":38}}},"12":{"name":"(anonymous_12)","line":169,"loc":{"start":{"line":169,"column":28},"end":{"line":169,"column":40}}},"13":{"name":"(anonymous_13)","line":180,"loc":{"start":{"line":180,"column":26},"end":{"line":180,"column":38}}},"14":{"name":"(anonymous_14)","line":191,"loc":{"start":{"line":191,"column":29},"end":{"line":191,"column":41}}},"15":{"name":"(anonymous_15)","line":202,"loc":{"start":{"line":202,"column":24},"end":{"line":202,"column":36}}},"16":{"name":"(anonymous_16)","line":212,"loc":{"start":{"line":212,"column":25},"end":{"line":212,"column":37}}},"17":{"name":"(anonymous_17)","line":222,"loc":{"start":{"line":222,"column":26},"end":{"line":222,"column":38}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":40}},"2":{"start":{"line":25,"column":0},"end":{"line":31,"column":2}},"3":{"start":{"line":26,"column":4},"end":{"line":26,"column":24}},"4":{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},"5":{"start":{"line":28,"column":8},"end":{"line":28,"column":31}},"6":{"start":{"line":30,"column":4},"end":{"line":30,"column":18}},"7":{"start":{"line":41,"column":0},"end":{"line":57,"column":2}},"8":{"start":{"line":42,"column":4},"end":{"line":42,"column":30}},"9":{"start":{"line":43,"column":4},"end":{"line":43,"column":30}},"10":{"start":{"line":45,"column":4},"end":{"line":45,"column":30}},"11":{"start":{"line":46,"column":4},"end":{"line":46,"column":45}},"12":{"start":{"line":48,"column":4},"end":{"line":56,"column":16}},"13":{"start":{"line":49,"column":8},"end":{"line":49,"column":35}},"14":{"start":{"line":50,"column":8},"end":{"line":55,"column":9}},"15":{"start":{"line":52,"column":12},"end":{"line":52,"column":33}},"16":{"start":{"line":54,"column":12},"end":{"line":54,"column":21}},"17":{"start":{"line":66,"column":0},"end":{"line":76,"column":2}},"18":{"start":{"line":67,"column":4},"end":{"line":68,"column":14}},"19":{"start":{"line":70,"column":4},"end":{"line":73,"column":5}},"20":{"start":{"line":71,"column":8},"end":{"line":71,"column":38}},"21":{"start":{"line":72,"column":8},"end":{"line":72,"column":77}},"22":{"start":{"line":75,"column":4},"end":{"line":75,"column":40}},"23":{"start":{"line":83,"column":0},"end":{"line":85,"column":2}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":22}},"25":{"start":{"line":94,"column":0},"end":{"line":99,"column":2}},"26":{"start":{"line":95,"column":4},"end":{"line":95,"column":42}},"27":{"start":{"line":96,"column":4},"end":{"line":96,"column":35}},"28":{"start":{"line":97,"column":4},"end":{"line":97,"column":37}},"29":{"start":{"line":98,"column":4},"end":{"line":98,"column":47}},"30":{"start":{"line":110,"column":0},"end":{"line":117,"column":2}},"31":{"start":{"line":111,"column":4},"end":{"line":111,"column":27}},"32":{"start":{"line":113,"column":4},"end":{"line":113,"column":72}},"33":{"start":{"line":114,"column":4},"end":{"line":114,"column":56}},"34":{"start":{"line":116,"column":4},"end":{"line":116,"column":53}},"35":{"start":{"line":126,"column":0},"end":{"line":128,"column":2}},"36":{"start":{"line":127,"column":4},"end":{"line":127,"column":75}},"37":{"start":{"line":137,"column":0},"end":{"line":140,"column":2}},"38":{"start":{"line":138,"column":4},"end":{"line":138,"column":27}},"39":{"start":{"line":139,"column":4},"end":{"line":139,"column":23}},"40":{"start":{"line":148,"column":0},"end":{"line":151,"column":2}},"41":{"start":{"line":149,"column":4},"end":{"line":150,"column":51}},"42":{"start":{"line":159,"column":0},"end":{"line":161,"column":2}},"43":{"start":{"line":160,"column":4},"end":{"line":160,"column":64}},"44":{"start":{"line":169,"column":0},"end":{"line":171,"column":2}},"45":{"start":{"line":170,"column":4},"end":{"line":170,"column":36}},"46":{"start":{"line":180,"column":0},"end":{"line":182,"column":2}},"47":{"start":{"line":181,"column":4},"end":{"line":181,"column":35}},"48":{"start":{"line":191,"column":0},"end":{"line":193,"column":2}},"49":{"start":{"line":192,"column":4},"end":{"line":192,"column":60}},"50":{"start":{"line":202,"column":0},"end":{"line":204,"column":2}},"51":{"start":{"line":203,"column":4},"end":{"line":203,"column":58}},"52":{"start":{"line":212,"column":0},"end":{"line":220,"column":2}},"53":{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},"54":{"start":{"line":214,"column":8},"end":{"line":214,"column":42}},"55":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"56":{"start":{"line":216,"column":8},"end":{"line":216,"column":46}},"57":{"start":{"line":219,"column":4},"end":{"line":219,"column":14}},"58":{"start":{"line":222,"column":0},"end":{"line":224,"column":2}},"59":{"start":{"line":223,"column":4},"end":{"line":223,"column":22}},"60":{"start":{"line":226,"column":0},"end":{"line":226,"column":22}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":8},"end":{"line":50,"column":8}},{"start":{"line":50,"column":8},"end":{"line":50,"column":8}}]},"2":{"line":50,"type":"binary-expr","locations":[{"start":{"line":50,"column":12},"end":{"line":50,"column":21}},{"start":{"line":50,"column":25},"end":{"line":50,"column":34}}]},"3":{"line":149,"type":"binary-expr","locations":[{"start":{"line":149,"column":11},"end":{"line":149,"column":75}},{"start":{"line":150,"column":8},"end":{"line":150,"column":50}}]},"4":{"line":160,"type":"binary-expr","locations":[{"start":{"line":160,"column":11},"end":{"line":160,"column":35}},{"start":{"line":160,"column":39},"end":{"line":160,"column":63}}]},"5":{"line":192,"type":"cond-expr","locations":[{"start":{"line":192,"column":31},"end":{"line":192,"column":54}},{"start":{"line":192,"column":57},"end":{"line":192,"column":59}}]},"6":{"line":203,"type":"cond-expr","locations":[{"start":{"line":203,"column":31},"end":{"line":203,"column":52}},{"start":{"line":203,"column":55},"end":{"line":203,"column":57}}]},"7":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":4},"end":{"line":213,"column":4}},{"start":{"line":213,"column":4},"end":{"line":213,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":6,"13":1,"14":4,"15":1,"16":6,"17":1,"18":6,"19":1,"20":6,"21":1,"22":154,"23":154,"24":154,"25":3696,"26":3696,"27":154,"28":1078,"29":1078,"30":154,"31":154,"32":1,"33":5,"34":0,"35":0,"36":1,"37":0,"38":0,"39":0,"40":1,"41":154,"42":154,"43":154,"44":154,"45":6,"46":154,"47":154,"48":154,"49":154,"50":154,"51":154,"52":154,"53":154,"54":154,"55":154,"56":154,"57":154,"58":154,"59":154,"60":154,"61":154,"62":154,"63":154,"64":154,"65":154,"66":154,"67":1,"68":154,"69":1,"70":27,"71":27,"72":1,"73":0,"74":1,"75":2,"76":1},"b":{"1":[2,4],"2":[6,2],"3":[2,2],"4":[4,2],"5":[2,4],"6":[6,2],"7":[2,4],"8":[6,4],"9":[2,4],"10":[6,4]},"f":{"1":6,"2":4,"3":6,"4":6,"5":6,"6":154,"7":3696,"8":1078,"9":5,"10":0,"11":0,"12":0,"13":154,"14":6,"15":154,"16":27,"17":0,"18":2},"fnMap":{"1":{"name":"(anonymous_1)","line":37,"loc":{"start":{"line":37,"column":16},"end":{"line":37,"column":32}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":31},"end":{"line":41,"column":47}}},"3":{"name":"(anonymous_3)","line":45,"loc":{"start":{"line":45,"column":16},"end":{"line":45,"column":32}}},"4":{"name":"(anonymous_4)","line":49,"loc":{"start":{"line":49,"column":35},"end":{"line":49,"column":51}}},"5":{"name":"(anonymous_5)","line":53,"loc":{"start":{"line":53,"column":21},"end":{"line":53,"column":37}}},"6":{"name":"Eth","line":57,"loc":{"start":{"line":57,"column":0},"end":{"line":57,"column":19}}},"7":{"name":"(anonymous_7)","line":62,"loc":{"start":{"line":62,"column":22},"end":{"line":62,"column":39}}},"8":{"name":"(anonymous_8)","line":67,"loc":{"start":{"line":67,"column":25},"end":{"line":67,"column":37}}},"9":{"name":"(anonymous_9)","line":78,"loc":{"start":{"line":78,"column":9},"end":{"line":78,"column":21}}},"10":{"name":"(anonymous_10)","line":81,"loc":{"start":{"line":81,"column":9},"end":{"line":81,"column":24}}},"11":{"name":"(anonymous_11)","line":88,"loc":{"start":{"line":88,"column":9},"end":{"line":88,"column":21}}},"12":{"name":"(anonymous_12)","line":91,"loc":{"start":{"line":91,"column":9},"end":{"line":91,"column":24}}},"13":{"name":"(anonymous_13)","line":97,"loc":{"start":{"line":97,"column":14},"end":{"line":97,"column":26}}},"14":{"name":"(anonymous_14)","line":124,"loc":{"start":{"line":124,"column":63},"end":{"line":124,"column":78}}},"15":{"name":"(anonymous_15)","line":320,"loc":{"start":{"line":320,"column":17},"end":{"line":320,"column":29}}},"16":{"name":"(anonymous_16)","line":357,"loc":{"start":{"line":357,"column":25},"end":{"line":357,"column":40}}},"17":{"name":"(anonymous_17)","line":362,"loc":{"start":{"line":362,"column":24},"end":{"line":362,"column":36}}},"18":{"name":"(anonymous_18)","line":366,"loc":{"start":{"line":366,"column":28},"end":{"line":366,"column":40}}}},"statementMap":{"1":{"start":{"line":26,"column":0},"end":{"line":26,"column":42}},"2":{"start":{"line":27,"column":0},"end":{"line":27,"column":41}},"3":{"start":{"line":28,"column":0},"end":{"line":28,"column":38}},"4":{"start":{"line":29,"column":0},"end":{"line":29,"column":34}},"5":{"start":{"line":30,"column":0},"end":{"line":30,"column":38}},"6":{"start":{"line":31,"column":0},"end":{"line":31,"column":48}},"7":{"start":{"line":32,"column":0},"end":{"line":32,"column":38}},"8":{"start":{"line":33,"column":0},"end":{"line":33,"column":36}},"9":{"start":{"line":34,"column":0},"end":{"line":34,"column":30}},"10":{"start":{"line":35,"column":0},"end":{"line":35,"column":38}},"11":{"start":{"line":37,"column":0},"end":{"line":39,"column":2}},"12":{"start":{"line":38,"column":4},"end":{"line":38,"column":116}},"13":{"start":{"line":41,"column":0},"end":{"line":43,"column":2}},"14":{"start":{"line":42,"column":4},"end":{"line":42,"column":154}},"15":{"start":{"line":45,"column":0},"end":{"line":47,"column":2}},"16":{"start":{"line":46,"column":4},"end":{"line":46,"column":142}},"17":{"start":{"line":49,"column":0},"end":{"line":51,"column":2}},"18":{"start":{"line":50,"column":4},"end":{"line":50,"column":148}},"19":{"start":{"line":53,"column":0},"end":{"line":55,"column":2}},"20":{"start":{"line":54,"column":4},"end":{"line":54,"column":136}},"21":{"start":{"line":57,"column":0},"end":{"line":75,"column":1}},"22":{"start":{"line":58,"column":4},"end":{"line":58,"column":48}},"23":{"start":{"line":60,"column":4},"end":{"line":60,"column":20}},"24":{"start":{"line":62,"column":4},"end":{"line":65,"column":7}},"25":{"start":{"line":63,"column":8},"end":{"line":63,"column":36}},"26":{"start":{"line":64,"column":8},"end":{"line":64,"column":55}},"27":{"start":{"line":67,"column":4},"end":{"line":70,"column":7}},"28":{"start":{"line":68,"column":8},"end":{"line":68,"column":31}},"29":{"start":{"line":69,"column":8},"end":{"line":69,"column":50}},"30":{"start":{"line":73,"column":4},"end":{"line":73,"column":21}},"31":{"start":{"line":74,"column":4},"end":{"line":74,"column":57}},"32":{"start":{"line":77,"column":0},"end":{"line":85,"column":3}},"33":{"start":{"line":79,"column":8},"end":{"line":79,"column":30}},"34":{"start":{"line":82,"column":8},"end":{"line":82,"column":29}},"35":{"start":{"line":83,"column":8},"end":{"line":83,"column":19}},"36":{"start":{"line":87,"column":0},"end":{"line":95,"column":3}},"37":{"start":{"line":89,"column":8},"end":{"line":89,"column":32}},"38":{"start":{"line":92,"column":8},"end":{"line":92,"column":31}},"39":{"start":{"line":93,"column":8},"end":{"line":93,"column":19}},"40":{"start":{"line":97,"column":0},"end":{"line":317,"column":2}},"41":{"start":{"line":98,"column":4},"end":{"line":104,"column":7}},"42":{"start":{"line":106,"column":4},"end":{"line":111,"column":7}},"43":{"start":{"line":113,"column":4},"end":{"line":118,"column":7}},"44":{"start":{"line":120,"column":4},"end":{"line":126,"column":7}},"45":{"start":{"line":124,"column":80},"end":{"line":124,"column":93}},"46":{"start":{"line":128,"column":4},"end":{"line":135,"column":7}},"47":{"start":{"line":137,"column":4},"end":{"line":143,"column":7}},"48":{"start":{"line":145,"column":4},"end":{"line":151,"column":7}},"49":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"50":{"start":{"line":160,"column":4},"end":{"line":166,"column":7}},"51":{"start":{"line":168,"column":4},"end":{"line":173,"column":7}},"52":{"start":{"line":175,"column":4},"end":{"line":181,"column":7}},"53":{"start":{"line":183,"column":4},"end":{"line":188,"column":7}},"54":{"start":{"line":190,"column":4},"end":{"line":195,"column":7}},"55":{"start":{"line":197,"column":4},"end":{"line":202,"column":7}},"56":{"start":{"line":204,"column":4},"end":{"line":209,"column":7}},"57":{"start":{"line":211,"column":4},"end":{"line":217,"column":7}},"58":{"start":{"line":219,"column":4},"end":{"line":223,"column":7}},"59":{"start":{"line":225,"column":4},"end":{"line":229,"column":7}},"60":{"start":{"line":231,"column":4},"end":{"line":235,"column":7}},"61":{"start":{"line":237,"column":4},"end":{"line":241,"column":7}},"62":{"start":{"line":243,"column":4},"end":{"line":247,"column":7}},"63":{"start":{"line":249,"column":4},"end":{"line":253,"column":7}},"64":{"start":{"line":255,"column":4},"end":{"line":261,"column":7}},"65":{"start":{"line":265,"column":4},"end":{"line":288,"column":7}},"66":{"start":{"line":291,"column":4},"end":{"line":316,"column":6}},"67":{"start":{"line":320,"column":0},"end":{"line":355,"column":2}},"68":{"start":{"line":321,"column":4},"end":{"line":354,"column":6}},"69":{"start":{"line":357,"column":0},"end":{"line":360,"column":2}},"70":{"start":{"line":358,"column":4},"end":{"line":358,"column":42}},"71":{"start":{"line":359,"column":4},"end":{"line":359,"column":19}},"72":{"start":{"line":362,"column":0},"end":{"line":364,"column":2}},"73":{"start":{"line":363,"column":4},"end":{"line":363,"column":72}},"74":{"start":{"line":366,"column":0},"end":{"line":368,"column":2}},"75":{"start":{"line":367,"column":4},"end":{"line":367,"column":68}},"76":{"start":{"line":371,"column":0},"end":{"line":371,"column":21}}},"branchMap":{"1":{"line":38,"type":"cond-expr","locations":[{"start":{"line":38,"column":70},"end":{"line":38,"column":90}},{"start":{"line":38,"column":93},"end":{"line":38,"column":115}}]},"2":{"line":38,"type":"binary-expr","locations":[{"start":{"line":38,"column":12},"end":{"line":38,"column":35}},{"start":{"line":38,"column":39},"end":{"line":38,"column":66}}]},"3":{"line":42,"type":"cond-expr","locations":[{"start":{"line":42,"column":70},"end":{"line":42,"column":109}},{"start":{"line":42,"column":112},"end":{"line":42,"column":153}}]},"4":{"line":42,"type":"binary-expr","locations":[{"start":{"line":42,"column":12},"end":{"line":42,"column":35}},{"start":{"line":42,"column":39},"end":{"line":42,"column":66}}]},"5":{"line":46,"type":"cond-expr","locations":[{"start":{"line":46,"column":70},"end":{"line":46,"column":103}},{"start":{"line":46,"column":106},"end":{"line":46,"column":141}}]},"6":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":12},"end":{"line":46,"column":35}},{"start":{"line":46,"column":39},"end":{"line":46,"column":66}}]},"7":{"line":50,"type":"cond-expr","locations":[{"start":{"line":50,"column":70},"end":{"line":50,"column":106}},{"start":{"line":50,"column":109},"end":{"line":50,"column":147}}]},"8":{"line":50,"type":"binary-expr","locations":[{"start":{"line":50,"column":12},"end":{"line":50,"column":35}},{"start":{"line":50,"column":39},"end":{"line":50,"column":66}}]},"9":{"line":54,"type":"cond-expr","locations":[{"start":{"line":54,"column":70},"end":{"line":54,"column":100}},{"start":{"line":54,"column":103},"end":{"line":54,"column":135}}]},"10":{"line":54,"type":"binary-expr","locations":[{"start":{"line":54,"column":12},"end":{"line":54,"column":35}},{"start":{"line":54,"column":39},"end":{"line":54,"column":66}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js","s":{"1":1,"2":1,"3":1,"4":1,"5":26,"6":1,"7":67,"8":1,"9":55,"10":20,"11":35,"12":1,"13":67,"14":0,"15":67,"16":15,"17":52,"18":1,"19":15,"20":15,"21":4,"22":15,"23":15,"24":15,"25":60,"26":18,"27":15,"28":1,"29":13,"30":13,"31":13,"32":11,"33":13,"34":52,"35":24,"36":13,"37":1,"38":12,"39":11,"40":12,"41":11,"42":12,"43":12,"44":12,"45":12,"46":12,"47":1,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":2,"55":2,"56":4,"57":2,"58":1,"59":15,"60":15,"61":15,"62":15,"63":15,"64":14,"65":15,"66":15,"67":15,"68":12,"69":20,"70":4,"71":15,"72":1,"73":5,"74":7,"75":2,"76":5,"77":5,"78":5,"79":0,"80":5,"81":5,"82":7,"83":5,"84":5,"85":0,"86":5,"87":1,"88":16,"89":13,"90":16,"91":13,"92":16,"93":13,"94":16,"95":1,"96":5,"97":5,"98":5,"99":5,"100":0,"101":5,"102":6,"103":5,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":0,"111":1,"112":2,"113":1,"114":1,"115":80,"116":80,"117":8,"118":72,"119":58,"120":14,"121":9,"122":5,"123":1,"124":0,"125":0,"126":0,"127":0,"128":1},"b":{"1":[67,59,53],"2":[20,35],"3":[0,67],"4":[15,52],"5":[15,11],"6":[4,11],"7":[15,0],"8":[13,0],"9":[11,2],"10":[11,1],"11":[11,1],"12":[2,0],"13":[2,0],"14":[2,0],"15":[14,1],"16":[12,3],"17":[4,16],"18":[2,5],"19":[7,5],"20":[5,0],"21":[5,1],"22":[0,7],"23":[0,5],"24":[5,4],"25":[13,3],"26":[13,3],"27":[13,3],"28":[0,5],"29":[0,0],"30":[0,6],"31":[0,1],"32":[8,72],"33":[80,8],"34":[58,14],"35":[9,5]},"f":{"1":26,"2":67,"3":55,"4":67,"5":15,"6":60,"7":18,"8":13,"9":52,"10":24,"11":12,"12":2,"13":4,"14":15,"15":20,"16":5,"17":7,"18":7,"19":16,"20":5,"21":6,"22":1,"23":2,"24":80,"25":0},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":31},"end":{"line":35,"column":49}}},"2":{"name":"(anonymous_2)","line":39,"loc":{"start":{"line":39,"column":30},"end":{"line":39,"column":53}}},"3":{"name":"(anonymous_3)","line":43,"loc":{"start":{"line":43,"column":39},"end":{"line":43,"column":62}}},"4":{"name":"(anonymous_4)","line":50,"loc":{"start":{"line":50,"column":32},"end":{"line":50,"column":55}}},"5":{"name":"(anonymous_5)","line":66,"loc":{"start":{"line":66,"column":25},"end":{"line":66,"column":43}}},"6":{"name":"(anonymous_6)","line":78,"loc":{"start":{"line":78,"column":49},"end":{"line":78,"column":64}}},"7":{"name":"(anonymous_7)","line":80,"loc":{"start":{"line":80,"column":15},"end":{"line":80,"column":28}}},"8":{"name":"(anonymous_8)","line":94,"loc":{"start":{"line":94,"column":32},"end":{"line":94,"column":50}}},"9":{"name":"(anonymous_9)","line":103,"loc":{"start":{"line":103,"column":49},"end":{"line":103,"column":64}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":15},"end":{"line":105,"column":28}}},"11":{"name":"(anonymous_11)","line":119,"loc":{"start":{"line":119,"column":33},"end":{"line":119,"column":46}}},"12":{"name":"(anonymous_12)","line":138,"loc":{"start":{"line":138,"column":40},"end":{"line":138,"column":58}}},"13":{"name":"(anonymous_13)","line":147,"loc":{"start":{"line":147,"column":40},"end":{"line":147,"column":53}}},"14":{"name":"(anonymous_14)","line":162,"loc":{"start":{"line":162,"column":27},"end":{"line":162,"column":43}}},"15":{"name":"(anonymous_15)","line":176,"loc":{"start":{"line":176,"column":35},"end":{"line":176,"column":49}}},"16":{"name":"(anonymous_16)","line":192,"loc":{"start":{"line":192,"column":24},"end":{"line":192,"column":42}}},"17":{"name":"(anonymous_17)","line":193,"loc":{"start":{"line":193,"column":18},"end":{"line":193,"column":33}}},"18":{"name":"(anonymous_18)","line":208,"loc":{"start":{"line":208,"column":40},"end":{"line":208,"column":55}}},"19":{"name":"(anonymous_19)","line":227,"loc":{"start":{"line":227,"column":25},"end":{"line":227,"column":39}}},"20":{"name":"(anonymous_20)","line":245,"loc":{"start":{"line":245,"column":25},"end":{"line":245,"column":40}}},"21":{"name":"(anonymous_21)","line":258,"loc":{"start":{"line":258,"column":34},"end":{"line":258,"column":49}}},"22":{"name":"(anonymous_22)","line":273,"loc":{"start":{"line":273,"column":26},"end":{"line":273,"column":40}}},"23":{"name":"(anonymous_23)","line":290,"loc":{"start":{"line":290,"column":34},"end":{"line":290,"column":49}}},"24":{"name":"(anonymous_24)","line":297,"loc":{"start":{"line":297,"column":28},"end":{"line":297,"column":47}}},"25":{"name":"(anonymous_25)","line":310,"loc":{"start":{"line":310,"column":29},"end":{"line":310,"column":46}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":40}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":29}},"4":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"5":{"start":{"line":36,"column":4},"end":{"line":36,"column":37}},"6":{"start":{"line":39,"column":0},"end":{"line":41,"column":2}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":95}},"8":{"start":{"line":43,"column":0},"end":{"line":48,"column":2}},"9":{"start":{"line":44,"column":4},"end":{"line":46,"column":5}},"10":{"start":{"line":45,"column":8},"end":{"line":45,"column":35}},"11":{"start":{"line":47,"column":4},"end":{"line":47,"column":50}},"12":{"start":{"line":50,"column":0},"end":{"line":57,"column":2}},"13":{"start":{"line":51,"column":4},"end":{"line":55,"column":5}},"14":{"start":{"line":52,"column":8},"end":{"line":52,"column":25}},"15":{"start":{"line":53,"column":11},"end":{"line":55,"column":5}},"16":{"start":{"line":54,"column":8},"end":{"line":54,"column":27}},"17":{"start":{"line":56,"column":4},"end":{"line":56,"column":36}},"18":{"start":{"line":66,"column":0},"end":{"line":85,"column":2}},"19":{"start":{"line":68,"column":4},"end":{"line":68,"column":57}},"20":{"start":{"line":70,"column":4},"end":{"line":72,"column":5}},"21":{"start":{"line":71,"column":8},"end":{"line":71,"column":59}},"22":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"23":{"start":{"line":75,"column":8},"end":{"line":75,"column":55}},"24":{"start":{"line":78,"column":4},"end":{"line":82,"column":7}},"25":{"start":{"line":79,"column":8},"end":{"line":79,"column":42}},"26":{"start":{"line":81,"column":8},"end":{"line":81,"column":55}},"27":{"start":{"line":84,"column":4},"end":{"line":84,"column":19}},"28":{"start":{"line":94,"column":0},"end":{"line":110,"column":2}},"29":{"start":{"line":96,"column":4},"end":{"line":96,"column":57}},"30":{"start":{"line":97,"column":4},"end":{"line":97,"column":55}},"31":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"32":{"start":{"line":100,"column":8},"end":{"line":100,"column":55}},"33":{"start":{"line":103,"column":4},"end":{"line":107,"column":7}},"34":{"start":{"line":104,"column":8},"end":{"line":104,"column":42}},"35":{"start":{"line":106,"column":8},"end":{"line":106,"column":55}},"36":{"start":{"line":109,"column":4},"end":{"line":109,"column":19}},"37":{"start":{"line":119,"column":0},"end":{"line":129,"column":2}},"38":{"start":{"line":120,"column":4},"end":{"line":121,"column":57}},"39":{"start":{"line":121,"column":8},"end":{"line":121,"column":57}},"40":{"start":{"line":122,"column":4},"end":{"line":123,"column":67}},"41":{"start":{"line":123,"column":8},"end":{"line":123,"column":67}},"42":{"start":{"line":124,"column":4},"end":{"line":124,"column":41}},"43":{"start":{"line":125,"column":4},"end":{"line":125,"column":37}},"44":{"start":{"line":126,"column":4},"end":{"line":126,"column":49}},"45":{"start":{"line":127,"column":4},"end":{"line":127,"column":43}},"46":{"start":{"line":128,"column":4},"end":{"line":128,"column":14}},"47":{"start":{"line":138,"column":0},"end":{"line":153,"column":2}},"48":{"start":{"line":139,"column":4},"end":{"line":140,"column":67}},"49":{"start":{"line":140,"column":8},"end":{"line":140,"column":67}},"50":{"start":{"line":141,"column":4},"end":{"line":142,"column":77}},"51":{"start":{"line":142,"column":8},"end":{"line":142,"column":77}},"52":{"start":{"line":143,"column":4},"end":{"line":143,"column":75}},"53":{"start":{"line":144,"column":4},"end":{"line":144,"column":55}},"54":{"start":{"line":146,"column":4},"end":{"line":150,"column":5}},"55":{"start":{"line":147,"column":8},"end":{"line":149,"column":11}},"56":{"start":{"line":148,"column":12},"end":{"line":148,"column":43}},"57":{"start":{"line":152,"column":4},"end":{"line":152,"column":19}},"58":{"start":{"line":162,"column":0},"end":{"line":183,"column":2}},"59":{"start":{"line":165,"column":4},"end":{"line":165,"column":53}},"60":{"start":{"line":166,"column":4},"end":{"line":166,"column":51}},"61":{"start":{"line":167,"column":4},"end":{"line":167,"column":45}},"62":{"start":{"line":168,"column":4},"end":{"line":168,"column":55}},"63":{"start":{"line":169,"column":4},"end":{"line":170,"column":53}},"64":{"start":{"line":170,"column":8},"end":{"line":170,"column":53}},"65":{"start":{"line":172,"column":4},"end":{"line":172,"column":59}},"66":{"start":{"line":173,"column":4},"end":{"line":173,"column":69}},"67":{"start":{"line":175,"column":4},"end":{"line":180,"column":5}},"68":{"start":{"line":176,"column":8},"end":{"line":179,"column":11}},"69":{"start":{"line":177,"column":12},"end":{"line":178,"column":56}},"70":{"start":{"line":178,"column":16},"end":{"line":178,"column":56}},"71":{"start":{"line":182,"column":4},"end":{"line":182,"column":17}},"72":{"start":{"line":192,"column":0},"end":{"line":218,"column":2}},"73":{"start":{"line":193,"column":4},"end":{"line":204,"column":6}},"74":{"start":{"line":195,"column":8},"end":{"line":196,"column":24}},"75":{"start":{"line":196,"column":12},"end":{"line":196,"column":24}},"76":{"start":{"line":198,"column":8},"end":{"line":198,"column":30}},"77":{"start":{"line":200,"column":8},"end":{"line":203,"column":41}},"78":{"start":{"line":201,"column":12},"end":{"line":201,"column":25}},"79":{"start":{"line":203,"column":12},"end":{"line":203,"column":41}},"80":{"start":{"line":207,"column":4},"end":{"line":207,"column":42}},"81":{"start":{"line":208,"column":4},"end":{"line":210,"column":7}},"82":{"start":{"line":209,"column":8},"end":{"line":209,"column":76}},"83":{"start":{"line":212,"column":4},"end":{"line":212,"column":19}},"84":{"start":{"line":214,"column":4},"end":{"line":215,"column":59}},"85":{"start":{"line":215,"column":8},"end":{"line":215,"column":59}},"86":{"start":{"line":217,"column":4},"end":{"line":217,"column":19}},"87":{"start":{"line":227,"column":0},"end":{"line":236,"column":2}},"88":{"start":{"line":228,"column":4},"end":{"line":229,"column":59}},"89":{"start":{"line":229,"column":8},"end":{"line":229,"column":59}},"90":{"start":{"line":230,"column":4},"end":{"line":231,"column":69}},"91":{"start":{"line":231,"column":8},"end":{"line":231,"column":69}},"92":{"start":{"line":232,"column":4},"end":{"line":233,"column":53}},"93":{"start":{"line":233,"column":8},"end":{"line":233,"column":53}},"94":{"start":{"line":235,"column":4},"end":{"line":235,"column":15}},"95":{"start":{"line":245,"column":0},"end":{"line":264,"column":2}},"96":{"start":{"line":248,"column":4},"end":{"line":248,"column":43}},"97":{"start":{"line":249,"column":4},"end":{"line":249,"column":59}},"98":{"start":{"line":250,"column":4},"end":{"line":250,"column":53}},"99":{"start":{"line":253,"column":4},"end":{"line":255,"column":5}},"100":{"start":{"line":254,"column":8},"end":{"line":254,"column":55}},"101":{"start":{"line":258,"column":4},"end":{"line":261,"column":7}},"102":{"start":{"line":260,"column":8},"end":{"line":260,"column":75}},"103":{"start":{"line":263,"column":4},"end":{"line":263,"column":16}},"104":{"start":{"line":273,"column":0},"end":{"line":295,"column":2}},"105":{"start":{"line":275,"column":4},"end":{"line":275,"column":47}},"106":{"start":{"line":276,"column":4},"end":{"line":276,"column":43}},"107":{"start":{"line":277,"column":4},"end":{"line":277,"column":41}},"108":{"start":{"line":278,"column":4},"end":{"line":278,"column":55}},"109":{"start":{"line":287,"column":4},"end":{"line":289,"column":5}},"110":{"start":{"line":288,"column":8},"end":{"line":288,"column":25}},"111":{"start":{"line":290,"column":4},"end":{"line":292,"column":7}},"112":{"start":{"line":291,"column":8},"end":{"line":291,"column":36}},"113":{"start":{"line":294,"column":4},"end":{"line":294,"column":16}},"114":{"start":{"line":297,"column":0},"end":{"line":307,"column":2}},"115":{"start":{"line":298,"column":4},"end":{"line":298,"column":33}},"116":{"start":{"line":299,"column":4},"end":{"line":305,"column":5}},"117":{"start":{"line":300,"column":8},"end":{"line":300,"column":37}},"118":{"start":{"line":301,"column":11},"end":{"line":305,"column":5}},"119":{"start":{"line":302,"column":8},"end":{"line":302,"column":23}},"120":{"start":{"line":303,"column":11},"end":{"line":305,"column":5}},"121":{"start":{"line":304,"column":8},"end":{"line":304,"column":30}},"122":{"start":{"line":306,"column":4},"end":{"line":306,"column":28}},"123":{"start":{"line":310,"column":0},"end":{"line":317,"column":2}},"124":{"start":{"line":312,"column":4},"end":{"line":312,"column":65}},"125":{"start":{"line":313,"column":4},"end":{"line":313,"column":63}},"126":{"start":{"line":314,"column":4},"end":{"line":314,"column":63}},"127":{"start":{"line":316,"column":4},"end":{"line":316,"column":18}},"128":{"start":{"line":319,"column":0},"end":{"line":334,"column":2}}},"branchMap":{"1":{"line":40,"type":"binary-expr","locations":[{"start":{"line":40,"column":11},"end":{"line":40,"column":35}},{"start":{"line":40,"column":39},"end":{"line":40,"column":64}},{"start":{"line":40,"column":68},"end":{"line":40,"column":94}}]},"2":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"3":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"4":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":11},"end":{"line":53,"column":11}},{"start":{"line":53,"column":11},"end":{"line":53,"column":11}}]},"5":{"line":68,"type":"binary-expr","locations":[{"start":{"line":68,"column":19},"end":{"line":68,"column":31}},{"start":{"line":68,"column":35},"end":{"line":68,"column":56}}]},"6":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":4},"end":{"line":70,"column":4}},{"start":{"line":70,"column":4},"end":{"line":70,"column":4}}]},"7":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":74,"column":4}},{"start":{"line":74,"column":4},"end":{"line":74,"column":4}}]},"8":{"line":96,"type":"binary-expr","locations":[{"start":{"line":96,"column":19},"end":{"line":96,"column":31}},{"start":{"line":96,"column":35},"end":{"line":96,"column":56}}]},"9":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"10":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":4}},{"start":{"line":120,"column":4},"end":{"line":120,"column":4}}]},"11":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":122,"column":4}},{"start":{"line":122,"column":4},"end":{"line":122,"column":4}}]},"12":{"line":139,"type":"if","locations":[{"start":{"line":139,"column":4},"end":{"line":139,"column":4}},{"start":{"line":139,"column":4},"end":{"line":139,"column":4}}]},"13":{"line":141,"type":"if","locations":[{"start":{"line":141,"column":4},"end":{"line":141,"column":4}},{"start":{"line":141,"column":4},"end":{"line":141,"column":4}}]},"14":{"line":146,"type":"if","locations":[{"start":{"line":146,"column":4},"end":{"line":146,"column":4}},{"start":{"line":146,"column":4},"end":{"line":146,"column":4}}]},"15":{"line":169,"type":"if","locations":[{"start":{"line":169,"column":4},"end":{"line":169,"column":4}},{"start":{"line":169,"column":4},"end":{"line":169,"column":4}}]},"16":{"line":175,"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":175,"column":4}},{"start":{"line":175,"column":4},"end":{"line":175,"column":4}}]},"17":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":12},"end":{"line":177,"column":12}},{"start":{"line":177,"column":12},"end":{"line":177,"column":12}}]},"18":{"line":195,"type":"if","locations":[{"start":{"line":195,"column":8},"end":{"line":195,"column":8}},{"start":{"line":195,"column":8},"end":{"line":195,"column":8}}]},"19":{"line":195,"type":"binary-expr","locations":[{"start":{"line":195,"column":11},"end":{"line":195,"column":25}},{"start":{"line":195,"column":29},"end":{"line":195,"column":57}}]},"20":{"line":200,"type":"if","locations":[{"start":{"line":200,"column":8},"end":{"line":200,"column":8}},{"start":{"line":200,"column":8},"end":{"line":200,"column":8}}]},"21":{"line":207,"type":"binary-expr","locations":[{"start":{"line":207,"column":21},"end":{"line":207,"column":35}},{"start":{"line":207,"column":39},"end":{"line":207,"column":41}}]},"22":{"line":209,"type":"cond-expr","locations":[{"start":{"line":209,"column":40},"end":{"line":209,"column":58}},{"start":{"line":209,"column":61},"end":{"line":209,"column":75}}]},"23":{"line":214,"type":"if","locations":[{"start":{"line":214,"column":4},"end":{"line":214,"column":4}},{"start":{"line":214,"column":4},"end":{"line":214,"column":4}}]},"24":{"line":214,"type":"binary-expr","locations":[{"start":{"line":214,"column":7},"end":{"line":214,"column":22}},{"start":{"line":214,"column":26},"end":{"line":214,"column":59}}]},"25":{"line":228,"type":"if","locations":[{"start":{"line":228,"column":4},"end":{"line":228,"column":4}},{"start":{"line":228,"column":4},"end":{"line":228,"column":4}}]},"26":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":4},"end":{"line":230,"column":4}},{"start":{"line":230,"column":4},"end":{"line":230,"column":4}}]},"27":{"line":232,"type":"if","locations":[{"start":{"line":232,"column":4},"end":{"line":232,"column":4}},{"start":{"line":232,"column":4},"end":{"line":232,"column":4}}]},"28":{"line":253,"type":"if","locations":[{"start":{"line":253,"column":4},"end":{"line":253,"column":4}},{"start":{"line":253,"column":4},"end":{"line":253,"column":4}}]},"29":{"line":254,"type":"cond-expr","locations":[{"start":{"line":254,"column":36},"end":{"line":254,"column":49}},{"start":{"line":254,"column":52},"end":{"line":254,"column":54}}]},"30":{"line":260,"type":"cond-expr","locations":[{"start":{"line":260,"column":45},"end":{"line":260,"column":50}},{"start":{"line":260,"column":53},"end":{"line":260,"column":74}}]},"31":{"line":287,"type":"if","locations":[{"start":{"line":287,"column":4},"end":{"line":287,"column":4}},{"start":{"line":287,"column":4},"end":{"line":287,"column":4}}]},"32":{"line":299,"type":"if","locations":[{"start":{"line":299,"column":4},"end":{"line":299,"column":4}},{"start":{"line":299,"column":4},"end":{"line":299,"column":4}}]},"33":{"line":299,"type":"binary-expr","locations":[{"start":{"line":299,"column":8},"end":{"line":299,"column":22}},{"start":{"line":299,"column":26},"end":{"line":299,"column":41}}]},"34":{"line":301,"type":"if","locations":[{"start":{"line":301,"column":11},"end":{"line":301,"column":11}},{"start":{"line":301,"column":11},"end":{"line":301,"column":11}}]},"35":{"line":303,"type":"if","locations":[{"start":{"line":303,"column":11},"end":{"line":303,"column":11}},{"start":{"line":303,"column":11},"end":{"line":303,"column":11}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js","s":{"1":1,"2":1,"3":1,"4":5096,"5":5096,"6":5096,"7":5096,"8":5096,"9":5096,"10":1,"11":4930,"12":1,"13":117,"14":1,"15":116,"16":57,"17":1,"18":117,"19":2,"20":1,"21":115,"22":23,"23":92,"24":166,"25":1,"26":115,"27":115,"28":6,"29":10,"30":109,"31":1,"32":113,"33":113,"34":113,"35":113,"36":113,"37":1,"38":4930,"39":4930,"40":4930,"41":4930,"42":462,"43":462,"44":4468,"45":1,"46":4930,"47":4930,"48":109,"49":109,"50":51,"51":51,"52":58,"53":4930,"54":4930,"55":1,"56":4,"57":4,"58":4,"59":1},"b":{"1":[5096,780],"2":[31,86],"3":[57,59],"4":[2,115],"5":[23,92],"6":[158,8],"7":[6,109],"8":[3,7],"9":[10,3],"10":[58,51],"11":[109,59],"12":[462,4468],"13":[462,154],"14":[51,58]},"f":{"1":5096,"2":4930,"3":117,"4":116,"5":117,"6":115,"7":166,"8":115,"9":10,"10":113,"11":4930,"12":4930,"13":109,"14":51,"15":4},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":13},"end":{"line":26,"column":32}}},"2":{"name":"(anonymous_2)","line":35,"loc":{"start":{"line":35,"column":37},"end":{"line":35,"column":51}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":27},"end":{"line":46,"column":43}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":35},"end":{"line":57,"column":51}}},"5":{"name":"(anonymous_5)","line":70,"loc":{"start":{"line":70,"column":32},"end":{"line":70,"column":48}}},"6":{"name":"(anonymous_6)","line":83,"loc":{"start":{"line":83,"column":31},"end":{"line":83,"column":47}}},"7":{"name":"(anonymous_7)","line":88,"loc":{"start":{"line":88,"column":35},"end":{"line":88,"column":63}}},"8":{"name":"(anonymous_8)","line":100,"loc":{"start":{"line":100,"column":32},"end":{"line":100,"column":50}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":26},"end":{"line":104,"column":39}}},"10":{"name":"(anonymous_10)","line":119,"loc":{"start":{"line":119,"column":29},"end":{"line":119,"column":45}}},"11":{"name":"(anonymous_11)","line":132,"loc":{"start":{"line":132,"column":34},"end":{"line":132,"column":49}}},"12":{"name":"(anonymous_12)","line":144,"loc":{"start":{"line":144,"column":29},"end":{"line":144,"column":40}}},"13":{"name":"(anonymous_13)","line":146,"loc":{"start":{"line":146,"column":15},"end":{"line":146,"column":27}}},"14":{"name":"(anonymous_14)","line":149,"loc":{"start":{"line":149,"column":60},"end":{"line":149,"column":83}}},"15":{"name":"(anonymous_15)","line":166,"loc":{"start":{"line":166,"column":27},"end":{"line":166,"column":39}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":33,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":29}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":29}},"6":{"start":{"line":29,"column":4},"end":{"line":29,"column":38}},"7":{"start":{"line":30,"column":4},"end":{"line":30,"column":49}},"8":{"start":{"line":31,"column":4},"end":{"line":31,"column":51}},"9":{"start":{"line":32,"column":4},"end":{"line":32,"column":31}},"10":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"11":{"start":{"line":36,"column":4},"end":{"line":36,"column":29}},"12":{"start":{"line":46,"column":0},"end":{"line":48,"column":2}},"13":{"start":{"line":47,"column":4},"end":{"line":47,"column":69}},"14":{"start":{"line":57,"column":0},"end":{"line":61,"column":2}},"15":{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},"16":{"start":{"line":59,"column":8},"end":{"line":59,"column":26}},"17":{"start":{"line":70,"column":0},"end":{"line":74,"column":2}},"18":{"start":{"line":71,"column":4},"end":{"line":73,"column":5}},"19":{"start":{"line":72,"column":8},"end":{"line":72,"column":45}},"20":{"start":{"line":83,"column":0},"end":{"line":91,"column":2}},"21":{"start":{"line":84,"column":4},"end":{"line":86,"column":5}},"22":{"start":{"line":85,"column":8},"end":{"line":85,"column":20}},"23":{"start":{"line":88,"column":4},"end":{"line":90,"column":7}},"24":{"start":{"line":89,"column":8},"end":{"line":89,"column":64}},"25":{"start":{"line":100,"column":0},"end":{"line":110,"column":2}},"26":{"start":{"line":101,"column":4},"end":{"line":101,"column":21}},"27":{"start":{"line":103,"column":4},"end":{"line":109,"column":5}},"28":{"start":{"line":104,"column":8},"end":{"line":106,"column":11}},"29":{"start":{"line":105,"column":12},"end":{"line":105,"column":83}},"30":{"start":{"line":108,"column":8},"end":{"line":108,"column":86}},"31":{"start":{"line":119,"column":0},"end":{"line":130,"column":2}},"32":{"start":{"line":120,"column":4},"end":{"line":120,"column":34}},"33":{"start":{"line":121,"column":4},"end":{"line":121,"column":46}},"34":{"start":{"line":122,"column":4},"end":{"line":122,"column":40}},"35":{"start":{"line":123,"column":4},"end":{"line":123,"column":30}},"36":{"start":{"line":125,"column":4},"end":{"line":129,"column":6}},"37":{"start":{"line":132,"column":0},"end":{"line":142,"column":2}},"38":{"start":{"line":133,"column":4},"end":{"line":133,"column":32}},"39":{"start":{"line":134,"column":4},"end":{"line":134,"column":26}},"40":{"start":{"line":135,"column":4},"end":{"line":135,"column":36}},"41":{"start":{"line":136,"column":4},"end":{"line":141,"column":5}},"42":{"start":{"line":137,"column":8},"end":{"line":137,"column":42}},"43":{"start":{"line":138,"column":8},"end":{"line":138,"column":37}},"44":{"start":{"line":140,"column":8},"end":{"line":140,"column":28}},"45":{"start":{"line":144,"column":0},"end":{"line":157,"column":2}},"46":{"start":{"line":145,"column":4},"end":{"line":145,"column":22}},"47":{"start":{"line":146,"column":4},"end":{"line":154,"column":6}},"48":{"start":{"line":147,"column":8},"end":{"line":147,"column":78}},"49":{"start":{"line":148,"column":8},"end":{"line":152,"column":9}},"50":{"start":{"line":149,"column":12},"end":{"line":151,"column":15}},"51":{"start":{"line":150,"column":16},"end":{"line":150,"column":67}},"52":{"start":{"line":153,"column":8},"end":{"line":153,"column":72}},"53":{"start":{"line":155,"column":4},"end":{"line":155,"column":43}},"54":{"start":{"line":156,"column":4},"end":{"line":156,"column":16}},"55":{"start":{"line":166,"column":0},"end":{"line":170,"column":2}},"56":{"start":{"line":167,"column":4},"end":{"line":167,"column":72}},"57":{"start":{"line":168,"column":4},"end":{"line":168,"column":50}},"58":{"start":{"line":169,"column":4},"end":{"line":169,"column":19}},"59":{"start":{"line":172,"column":0},"end":{"line":172,"column":24}}},"branchMap":{"1":{"line":29,"type":"binary-expr","locations":[{"start":{"line":29,"column":18},"end":{"line":29,"column":32}},{"start":{"line":29,"column":36},"end":{"line":29,"column":37}}]},"2":{"line":47,"type":"cond-expr","locations":[{"start":{"line":47,"column":41},"end":{"line":47,"column":56}},{"start":{"line":47,"column":59},"end":{"line":47,"column":68}}]},"3":{"line":58,"type":"if","locations":[{"start":{"line":58,"column":4},"end":{"line":58,"column":4}},{"start":{"line":58,"column":4},"end":{"line":58,"column":4}}]},"4":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":71,"column":4}},{"start":{"line":71,"column":4},"end":{"line":71,"column":4}}]},"5":{"line":84,"type":"if","locations":[{"start":{"line":84,"column":4},"end":{"line":84,"column":4}},{"start":{"line":84,"column":4},"end":{"line":84,"column":4}}]},"6":{"line":89,"type":"cond-expr","locations":[{"start":{"line":89,"column":27},"end":{"line":89,"column":49}},{"start":{"line":89,"column":52},"end":{"line":89,"column":63}}]},"7":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]},"8":{"line":105,"type":"cond-expr","locations":[{"start":{"line":105,"column":50},"end":{"line":105,"column":76}},{"start":{"line":105,"column":79},"end":{"line":105,"column":82}}]},"9":{"line":105,"type":"binary-expr","locations":[{"start":{"line":105,"column":19},"end":{"line":105,"column":40}},{"start":{"line":105,"column":44},"end":{"line":105,"column":47}}]},"10":{"line":108,"type":"cond-expr","locations":[{"start":{"line":108,"column":48},"end":{"line":108,"column":76}},{"start":{"line":108,"column":79},"end":{"line":108,"column":85}}]},"11":{"line":108,"type":"binary-expr","locations":[{"start":{"line":108,"column":15},"end":{"line":108,"column":35}},{"start":{"line":108,"column":39},"end":{"line":108,"column":45}}]},"12":{"line":136,"type":"if","locations":[{"start":{"line":136,"column":4},"end":{"line":136,"column":4}},{"start":{"line":136,"column":4},"end":{"line":136,"column":4}}]},"13":{"line":137,"type":"binary-expr","locations":[{"start":{"line":137,"column":23},"end":{"line":137,"column":35}},{"start":{"line":137,"column":39},"end":{"line":137,"column":41}}]},"14":{"line":148,"type":"if","locations":[{"start":{"line":148,"column":8},"end":{"line":148,"column":8}},{"start":{"line":148,"column":8},"end":{"line":148,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js","s":{"1":1,"2":1,"3":2004,"4":2004,"5":2004,"6":2004,"7":2004,"8":2004,"9":1,"10":2004,"11":1,"12":0,"13":1,"14":20,"15":1,"16":2,"17":2,"18":1,"19":2004,"20":2004,"21":2004,"22":2004,"23":616,"24":616,"25":616,"26":2004,"27":2004,"28":1,"29":2004,"30":1,"31":2004,"32":2004,"33":17,"34":1,"35":2004,"36":2004,"37":1,"38":1,"39":2004,"40":2004,"41":1,"42":2,"43":2,"44":2,"45":1},"b":{"1":[0,0],"2":[8,12],"3":[20,11],"4":[2,0],"5":[616,1388],"6":[616,0]},"f":{"1":2004,"2":2004,"3":0,"4":20,"5":2,"6":2004,"7":2004,"8":2004,"9":17,"10":2004,"11":1,"12":1,"13":2},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":15},"end":{"line":26,"column":34}}},"2":{"name":"(anonymous_2)","line":35,"loc":{"start":{"line":35,"column":39},"end":{"line":35,"column":53}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":33},"end":{"line":46,"column":48}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":34},"end":{"line":57,"column":52}}},"5":{"name":"(anonymous_5)","line":68,"loc":{"start":{"line":68,"column":37},"end":{"line":68,"column":53}}},"6":{"name":"(anonymous_6)","line":82,"loc":{"start":{"line":82,"column":36},"end":{"line":82,"column":51}}},"7":{"name":"(anonymous_7)","line":100,"loc":{"start":{"line":100,"column":22},"end":{"line":100,"column":38}}},"8":{"name":"(anonymous_8)","line":104,"loc":{"start":{"line":104,"column":30},"end":{"line":104,"column":42}}},"9":{"name":"get","line":106,"loc":{"start":{"line":106,"column":11},"end":{"line":106,"column":26}}},"10":{"name":"(anonymous_10)","line":113,"loc":{"start":{"line":113,"column":35},"end":{"line":113,"column":47}}},"11":{"name":"(anonymous_11)","line":115,"loc":{"start":{"line":115,"column":14},"end":{"line":115,"column":34}}},"12":{"name":"(anonymous_12)","line":118,"loc":{"start":{"line":118,"column":11},"end":{"line":118,"column":34}}},"13":{"name":"(anonymous_13)","line":133,"loc":{"start":{"line":133,"column":29},"end":{"line":133,"column":41}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":26,"column":0},"end":{"line":33,"column":2}},"3":{"start":{"line":27,"column":4},"end":{"line":27,"column":29}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":33}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":33}},"6":{"start":{"line":30,"column":4},"end":{"line":30,"column":51}},"7":{"start":{"line":31,"column":4},"end":{"line":31,"column":49}},"8":{"start":{"line":32,"column":4},"end":{"line":32,"column":31}},"9":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"10":{"start":{"line":36,"column":4},"end":{"line":36,"column":29}},"11":{"start":{"line":46,"column":0},"end":{"line":48,"column":2}},"12":{"start":{"line":47,"column":4},"end":{"line":47,"column":64}},"13":{"start":{"line":57,"column":0},"end":{"line":59,"column":2}},"14":{"start":{"line":58,"column":4},"end":{"line":58,"column":91}},"15":{"start":{"line":68,"column":0},"end":{"line":72,"column":2}},"16":{"start":{"line":69,"column":4},"end":{"line":71,"column":5}},"17":{"start":{"line":70,"column":8},"end":{"line":70,"column":26}},"18":{"start":{"line":82,"column":0},"end":{"line":98,"column":2}},"19":{"start":{"line":83,"column":4},"end":{"line":86,"column":6}},"20":{"start":{"line":88,"column":4},"end":{"line":88,"column":37}},"21":{"start":{"line":89,"column":4},"end":{"line":89,"column":24}},"22":{"start":{"line":90,"column":4},"end":{"line":94,"column":5}},"23":{"start":{"line":91,"column":8},"end":{"line":91,"column":44}},"24":{"start":{"line":92,"column":8},"end":{"line":92,"column":28}},"25":{"start":{"line":93,"column":8},"end":{"line":93,"column":24}},"26":{"start":{"line":96,"column":4},"end":{"line":96,"column":44}},"27":{"start":{"line":97,"column":4},"end":{"line":97,"column":54}},"28":{"start":{"line":100,"column":0},"end":{"line":102,"column":2}},"29":{"start":{"line":101,"column":4},"end":{"line":101,"column":64}},"30":{"start":{"line":104,"column":0},"end":{"line":111,"column":2}},"31":{"start":{"line":105,"column":4},"end":{"line":105,"column":24}},"32":{"start":{"line":106,"column":4},"end":{"line":110,"column":6}},"33":{"start":{"line":107,"column":8},"end":{"line":109,"column":12}},"34":{"start":{"line":113,"column":0},"end":{"line":124,"column":2}},"35":{"start":{"line":114,"column":4},"end":{"line":114,"column":24}},"36":{"start":{"line":115,"column":4},"end":{"line":121,"column":6}},"37":{"start":{"line":116,"column":8},"end":{"line":120,"column":11}},"38":{"start":{"line":119,"column":12},"end":{"line":119,"column":57}},"39":{"start":{"line":122,"column":4},"end":{"line":122,"column":42}},"40":{"start":{"line":123,"column":4},"end":{"line":123,"column":15}},"41":{"start":{"line":133,"column":0},"end":{"line":141,"column":2}},"42":{"start":{"line":134,"column":4},"end":{"line":138,"column":6}},"43":{"start":{"line":139,"column":4},"end":{"line":139,"column":50}},"44":{"start":{"line":140,"column":4},"end":{"line":140,"column":19}},"45":{"start":{"line":143,"column":0},"end":{"line":143,"column":26}}},"branchMap":{"1":{"line":47,"type":"cond-expr","locations":[{"start":{"line":47,"column":33},"end":{"line":47,"column":57}},{"start":{"line":47,"column":60},"end":{"line":47,"column":63}}]},"2":{"line":58,"type":"cond-expr","locations":[{"start":{"line":58,"column":53},"end":{"line":58,"column":81}},{"start":{"line":58,"column":84},"end":{"line":58,"column":90}}]},"3":{"line":58,"type":"binary-expr","locations":[{"start":{"line":58,"column":11},"end":{"line":58,"column":31}},{"start":{"line":58,"column":35},"end":{"line":58,"column":50}}]},"4":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]},"5":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":4}},{"start":{"line":90,"column":4},"end":{"line":90,"column":4}}]},"6":{"line":91,"type":"binary-expr","locations":[{"start":{"line":91,"column":24},"end":{"line":91,"column":37}},{"start":{"line":91,"column":41},"end":{"line":91,"column":43}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js","s":{"1":1,"2":1,"3":1,"4":1,"5":308,"6":308,"7":308,"8":308,"9":308,"10":1,"11":308,"12":1,"13":308,"14":308,"15":308,"16":308,"17":0,"18":0,"19":308,"20":1,"21":308,"22":308,"23":7,"24":7,"25":1},"b":{"1":[308,0],"2":[0,308],"3":[0,0]},"f":{"1":308,"2":308,"3":308,"4":308,"5":7},"fnMap":{"1":{"name":"(anonymous_1)","line":30,"loc":{"start":{"line":30,"column":16},"end":{"line":30,"column":35}}},"2":{"name":"(anonymous_2)","line":39,"loc":{"start":{"line":39,"column":44},"end":{"line":39,"column":58}}},"3":{"name":"(anonymous_3)","line":44,"loc":{"start":{"line":44,"column":41},"end":{"line":44,"column":56}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":36},"end":{"line":57,"column":47}}},"5":{"name":"(anonymous_5)","line":60,"loc":{"start":{"line":60,"column":11},"end":{"line":60,"column":21}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":48}},"4":{"start":{"line":30,"column":0},"end":{"line":36,"column":2}},"5":{"start":{"line":31,"column":4},"end":{"line":31,"column":29}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":39}},"7":{"start":{"line":33,"column":4},"end":{"line":33,"column":43}},"8":{"start":{"line":34,"column":4},"end":{"line":34,"column":53}},"9":{"start":{"line":35,"column":4},"end":{"line":35,"column":31}},"10":{"start":{"line":39,"column":0},"end":{"line":41,"column":2}},"11":{"start":{"line":40,"column":4},"end":{"line":40,"column":29}},"12":{"start":{"line":44,"column":0},"end":{"line":54,"column":2}},"13":{"start":{"line":45,"column":4},"end":{"line":45,"column":32}},"14":{"start":{"line":46,"column":4},"end":{"line":46,"column":26}},"15":{"start":{"line":47,"column":4},"end":{"line":47,"column":36}},"16":{"start":{"line":48,"column":4},"end":{"line":53,"column":5}},"17":{"start":{"line":49,"column":8},"end":{"line":49,"column":42}},"18":{"start":{"line":50,"column":8},"end":{"line":50,"column":37}},"19":{"start":{"line":52,"column":8},"end":{"line":52,"column":28}},"20":{"start":{"line":57,"column":0},"end":{"line":70,"column":2}},"21":{"start":{"line":58,"column":4},"end":{"line":58,"column":21}},"22":{"start":{"line":60,"column":4},"end":{"line":69,"column":6}},"23":{"start":{"line":61,"column":8},"end":{"line":66,"column":11}},"24":{"start":{"line":68,"column":8},"end":{"line":68,"column":69}},"25":{"start":{"line":72,"column":0},"end":{"line":72,"column":31}}},"branchMap":{"1":{"line":34,"type":"binary-expr","locations":[{"start":{"line":34,"column":25},"end":{"line":34,"column":46}},{"start":{"line":34,"column":50},"end":{"line":34,"column":52}}]},"2":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":48,"column":4}},{"start":{"line":48,"column":4},"end":{"line":48,"column":4}}]},"3":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":23},"end":{"line":49,"column":35}},{"start":{"line":49,"column":39},"end":{"line":49,"column":41}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js","s":{"1":1,"2":1,"3":1,"4":10,"5":10,"6":10,"7":1,"8":10,"9":10,"10":1,"11":10,"12":10,"13":4,"14":10,"15":4,"16":10,"17":0,"18":1,"19":10,"20":10,"21":5,"22":5,"23":5,"24":5,"25":5,"26":1,"27":7,"28":7,"29":1,"30":10,"31":10,"32":10,"33":10,"34":1,"35":6,"36":1,"37":10,"38":10,"39":10,"40":0,"41":10,"42":0,"43":0,"44":0,"45":0,"46":0,"47":10,"48":10,"49":9,"50":9,"51":9,"52":7,"53":0,"54":10,"55":0,"56":1},"b":{"1":[10,0],"2":[4,6],"3":[4,6],"4":[0,10],"5":[5,5],"6":[10,6],"7":[5,0],"8":[7,0],"9":[7,7,7],"10":[0,10],"11":[0,10],"12":[10,5,5,0],"13":[0,0],"14":[10,0],"15":[9,0],"16":[9,9]},"f":{"1":10,"2":10,"3":10,"4":10,"5":5,"6":7,"7":10,"8":6,"9":10,"10":0,"11":0,"12":9,"13":7},"fnMap":{"1":{"name":"(anonymous_1)","line":28,"loc":{"start":{"line":28,"column":15},"end":{"line":28,"column":34}}},"2":{"name":"(anonymous_2)","line":49,"loc":{"start":{"line":49,"column":42},"end":{"line":49,"column":58}}},"3":{"name":"(anonymous_3)","line":63,"loc":{"start":{"line":63,"column":39},"end":{"line":63,"column":55}}},"4":{"name":"(anonymous_4)","line":85,"loc":{"start":{"line":85,"column":38},"end":{"line":85,"column":54}}},"5":{"name":"(anonymous_5)","line":92,"loc":{"start":{"line":92,"column":56},"end":{"line":92,"column":84}}},"6":{"name":"(anonymous_6)","line":108,"loc":{"start":{"line":108,"column":39},"end":{"line":108,"column":57}}},"7":{"name":"(anonymous_7)","line":121,"loc":{"start":{"line":121,"column":36},"end":{"line":121,"column":52}}},"8":{"name":"(anonymous_8)","line":138,"loc":{"start":{"line":138,"column":37},"end":{"line":138,"column":56}}},"9":{"name":"(anonymous_9)","line":148,"loc":{"start":{"line":148,"column":35},"end":{"line":148,"column":46}}},"10":{"name":"(anonymous_10)","line":162,"loc":{"start":{"line":162,"column":11},"end":{"line":162,"column":32}}},"11":{"name":"(anonymous_11)","line":164,"loc":{"start":{"line":164,"column":29},"end":{"line":164,"column":42}}},"12":{"name":"(anonymous_12)","line":176,"loc":{"start":{"line":176,"column":55},"end":{"line":176,"column":78}}},"13":{"name":"(anonymous_13)","line":181,"loc":{"start":{"line":181,"column":78},"end":{"line":181,"column":99}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"3":{"start":{"line":28,"column":0},"end":{"line":38,"column":2}},"4":{"start":{"line":29,"column":4},"end":{"line":29,"column":19}},"5":{"start":{"line":30,"column":4},"end":{"line":30,"column":25}},"6":{"start":{"line":32,"column":4},"end":{"line":37,"column":5}},"7":{"start":{"line":49,"column":0},"end":{"line":53,"column":2}},"8":{"start":{"line":50,"column":4},"end":{"line":52,"column":5}},"9":{"start":{"line":51,"column":8},"end":{"line":51,"column":26}},"10":{"start":{"line":63,"column":0},"end":{"line":75,"column":2}},"11":{"start":{"line":64,"column":4},"end":{"line":64,"column":49}},"12":{"start":{"line":66,"column":4},"end":{"line":67,"column":26}},"13":{"start":{"line":67,"column":8},"end":{"line":67,"column":26}},"14":{"start":{"line":69,"column":4},"end":{"line":70,"column":32}},"15":{"start":{"line":70,"column":8},"end":{"line":70,"column":32}},"16":{"start":{"line":72,"column":4},"end":{"line":74,"column":5}},"17":{"start":{"line":73,"column":8},"end":{"line":73,"column":45}},"18":{"start":{"line":85,"column":0},"end":{"line":98,"column":2}},"19":{"start":{"line":86,"column":4},"end":{"line":86,"column":49}},"20":{"start":{"line":88,"column":4},"end":{"line":90,"column":5}},"21":{"start":{"line":89,"column":8},"end":{"line":89,"column":20}},"22":{"start":{"line":92,"column":4},"end":{"line":94,"column":7}},"23":{"start":{"line":93,"column":8},"end":{"line":93,"column":68}},"24":{"start":{"line":95,"column":4},"end":{"line":95,"column":35}},"25":{"start":{"line":97,"column":4},"end":{"line":97,"column":25}},"26":{"start":{"line":108,"column":0},"end":{"line":112,"column":2}},"27":{"start":{"line":109,"column":4},"end":{"line":109,"column":49}},"28":{"start":{"line":111,"column":4},"end":{"line":111,"column":116}},"29":{"start":{"line":121,"column":0},"end":{"line":130,"column":2}},"30":{"start":{"line":122,"column":4},"end":{"line":122,"column":48}},"31":{"start":{"line":123,"column":4},"end":{"line":123,"column":41}},"32":{"start":{"line":124,"column":4},"end":{"line":124,"column":31}},"33":{"start":{"line":126,"column":4},"end":{"line":129,"column":6}},"34":{"start":{"line":138,"column":0},"end":{"line":140,"column":2}},"35":{"start":{"line":139,"column":4},"end":{"line":139,"column":77}},"36":{"start":{"line":148,"column":0},"end":{"line":194,"column":2}},"37":{"start":{"line":149,"column":4},"end":{"line":149,"column":21}},"38":{"start":{"line":150,"column":4},"end":{"line":150,"column":73}},"39":{"start":{"line":153,"column":4},"end":{"line":154,"column":117}},"40":{"start":{"line":154,"column":8},"end":{"line":154,"column":117}},"41":{"start":{"line":158,"column":4},"end":{"line":171,"column":5}},"42":{"start":{"line":159,"column":8},"end":{"line":170,"column":11}},"43":{"start":{"line":163,"column":12},"end":{"line":169,"column":13}},"44":{"start":{"line":164,"column":16},"end":{"line":166,"column":19}},"45":{"start":{"line":165,"column":20},"end":{"line":165,"column":67}},"46":{"start":{"line":168,"column":16},"end":{"line":168,"column":36}},"47":{"start":{"line":174,"column":4},"end":{"line":193,"column":83}},"48":{"start":{"line":176,"column":8},"end":{"line":187,"column":11}},"49":{"start":{"line":177,"column":12},"end":{"line":186,"column":13}},"50":{"start":{"line":178,"column":16},"end":{"line":178,"column":34}},"51":{"start":{"line":181,"column":16},"end":{"line":183,"column":19}},"52":{"start":{"line":182,"column":20},"end":{"line":182,"column":76}},"53":{"start":{"line":185,"column":16},"end":{"line":185,"column":36}},"54":{"start":{"line":190,"column":8},"end":{"line":190,"column":20}},"55":{"start":{"line":193,"column":8},"end":{"line":193,"column":83}},"56":{"start":{"line":196,"column":0},"end":{"line":196,"column":30}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"2":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":4},"end":{"line":66,"column":4}},{"start":{"line":66,"column":4},"end":{"line":66,"column":4}}]},"3":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]},"4":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":4},"end":{"line":72,"column":4}},{"start":{"line":72,"column":4},"end":{"line":72,"column":4}}]},"5":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":4}},{"start":{"line":88,"column":4},"end":{"line":88,"column":4}}]},"6":{"line":88,"type":"binary-expr","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":21}},{"start":{"line":88,"column":25},"end":{"line":88,"column":53}}]},"7":{"line":93,"type":"cond-expr","locations":[{"start":{"line":93,"column":27},"end":{"line":93,"column":51}},{"start":{"line":93,"column":54},"end":{"line":93,"column":67}}]},"8":{"line":111,"type":"cond-expr","locations":[{"start":{"line":111,"column":70},"end":{"line":111,"column":106}},{"start":{"line":111,"column":109},"end":{"line":111,"column":115}}]},"9":{"line":111,"type":"binary-expr","locations":[{"start":{"line":111,"column":12},"end":{"line":111,"column":24}},{"start":{"line":111,"column":28},"end":{"line":111,"column":56}},{"start":{"line":111,"column":60},"end":{"line":111,"column":66}}]},"10":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":4}},{"start":{"line":153,"column":4},"end":{"line":153,"column":4}}]},"11":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":4}},{"start":{"line":158,"column":4},"end":{"line":158,"column":4}}]},"12":{"line":158,"type":"binary-expr","locations":[{"start":{"line":158,"column":7},"end":{"line":158,"column":35}},{"start":{"line":158,"column":39},"end":{"line":158,"column":72}},{"start":{"line":158,"column":76},"end":{"line":158,"column":121}},{"start":{"line":158,"column":125},"end":{"line":158,"column":162}}]},"13":{"line":163,"type":"if","locations":[{"start":{"line":163,"column":12},"end":{"line":163,"column":12}},{"start":{"line":163,"column":12},"end":{"line":163,"column":12}}]},"14":{"line":174,"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":174,"column":4}},{"start":{"line":174,"column":4},"end":{"line":174,"column":4}}]},"15":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":12},"end":{"line":177,"column":12}},{"start":{"line":177,"column":12},"end":{"line":177,"column":12}}]},"16":{"line":177,"type":"binary-expr","locations":[{"start":{"line":177,"column":15},"end":{"line":177,"column":19}},{"start":{"line":177,"column":23},"end":{"line":177,"column":29}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":26,"13":91,"14":68,"15":68,"16":1,"17":26,"18":91,"19":26,"20":26,"21":26,"22":22,"23":22,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":1,"52":27,"53":27,"54":27,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":0,"71":1,"72":1,"73":0,"74":0,"75":0,"76":0,"77":1,"78":1,"79":26,"80":26,"81":26,"82":26,"83":0,"84":26,"85":1,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":1,"95":27,"96":27,"97":27,"98":27,"99":1},"b":{"1":[1,0],"2":[1,1],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,0],"16":[1,1],"17":[1,0],"18":[0,1],"19":[0,26],"20":[0,0],"21":[0,0]},"f":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":26,"7":91,"8":68,"9":68,"10":26,"11":91,"12":22,"13":0,"14":0,"15":0,"16":0,"17":27,"18":1,"19":1,"20":26,"21":0,"22":27},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":30},"end":{"line":35,"column":53}}},"2":{"name":"(anonymous_2)","line":36,"loc":{"start":{"line":36,"column":22},"end":{"line":36,"column":38}}},"3":{"name":"(anonymous_3)","line":38,"loc":{"start":{"line":38,"column":11},"end":{"line":38,"column":27}}},"4":{"name":"(anonymous_4)","line":39,"loc":{"start":{"line":39,"column":31},"end":{"line":39,"column":48}}},"5":{"name":"(anonymous_5)","line":42,"loc":{"start":{"line":42,"column":11},"end":{"line":42,"column":28}}},"6":{"name":"(anonymous_6)","line":54,"loc":{"start":{"line":54,"column":29},"end":{"line":54,"column":49}}},"7":{"name":"(anonymous_7)","line":55,"loc":{"start":{"line":55,"column":24},"end":{"line":55,"column":40}}},"8":{"name":"(anonymous_8)","line":57,"loc":{"start":{"line":57,"column":11},"end":{"line":57,"column":27}}},"9":{"name":"(anonymous_9)","line":59,"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":28}}},"10":{"name":"(anonymous_10)","line":71,"loc":{"start":{"line":71,"column":26},"end":{"line":71,"column":46}}},"11":{"name":"(anonymous_11)","line":72,"loc":{"start":{"line":72,"column":37},"end":{"line":72,"column":53}}},"12":{"name":"(anonymous_12)","line":79,"loc":{"start":{"line":79,"column":15},"end":{"line":79,"column":31}}},"13":{"name":"(anonymous_13)","line":94,"loc":{"start":{"line":94,"column":30},"end":{"line":94,"column":58}}},"14":{"name":"(anonymous_14)","line":99,"loc":{"start":{"line":99,"column":48},"end":{"line":99,"column":59}}},"15":{"name":"(anonymous_15)","line":117,"loc":{"start":{"line":117,"column":78},"end":{"line":117,"column":98}}},"16":{"name":"(anonymous_16)","line":120,"loc":{"start":{"line":120,"column":71},"end":{"line":120,"column":88}}},"17":{"name":"(anonymous_17)","line":163,"loc":{"start":{"line":163,"column":22},"end":{"line":163,"column":42}}},"18":{"name":"(anonymous_18)","line":191,"loc":{"start":{"line":191,"column":32},"end":{"line":191,"column":44}}},"19":{"name":"(anonymous_19)","line":214,"loc":{"start":{"line":214,"column":42},"end":{"line":214,"column":63}}},"20":{"name":"(anonymous_20)","line":246,"loc":{"start":{"line":246,"column":31},"end":{"line":246,"column":60}}},"21":{"name":"(anonymous_21)","line":265,"loc":{"start":{"line":265,"column":36},"end":{"line":265,"column":48}}},"22":{"name":"(anonymous_22)","line":287,"loc":{"start":{"line":287,"column":15},"end":{"line":287,"column":44}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":41}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":39}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":45}},"5":{"start":{"line":35,"column":0},"end":{"line":45,"column":2}},"6":{"start":{"line":36,"column":4},"end":{"line":44,"column":16}},"7":{"start":{"line":37,"column":8},"end":{"line":37,"column":83}},"8":{"start":{"line":39,"column":8},"end":{"line":41,"column":11}},"9":{"start":{"line":40,"column":12},"end":{"line":40,"column":30}},"10":{"start":{"line":43,"column":8},"end":{"line":43,"column":49}},"11":{"start":{"line":54,"column":0},"end":{"line":62,"column":2}},"12":{"start":{"line":55,"column":4},"end":{"line":61,"column":7}},"13":{"start":{"line":56,"column":8},"end":{"line":56,"column":40}},"14":{"start":{"line":58,"column":8},"end":{"line":58,"column":75}},"15":{"start":{"line":60,"column":8},"end":{"line":60,"column":37}},"16":{"start":{"line":71,"column":0},"end":{"line":83,"column":2}},"17":{"start":{"line":72,"column":4},"end":{"line":74,"column":7}},"18":{"start":{"line":73,"column":8},"end":{"line":73,"column":37}},"19":{"start":{"line":76,"column":4},"end":{"line":76,"column":101}},"20":{"start":{"line":77,"column":4},"end":{"line":77,"column":41}},"21":{"start":{"line":79,"column":4},"end":{"line":82,"column":7}},"22":{"start":{"line":80,"column":8},"end":{"line":80,"column":90}},"23":{"start":{"line":81,"column":8},"end":{"line":81,"column":38}},"24":{"start":{"line":94,"column":0},"end":{"line":155,"column":2}},"25":{"start":{"line":95,"column":4},"end":{"line":96,"column":30}},"26":{"start":{"line":99,"column":4},"end":{"line":154,"column":7}},"27":{"start":{"line":100,"column":8},"end":{"line":153,"column":9}},"28":{"start":{"line":101,"column":12},"end":{"line":101,"column":20}},"29":{"start":{"line":104,"column":12},"end":{"line":152,"column":13}},"30":{"start":{"line":106,"column":16},"end":{"line":106,"column":38}},"31":{"start":{"line":107,"column":16},"end":{"line":107,"column":37}},"32":{"start":{"line":109,"column":16},"end":{"line":112,"column":95}},"33":{"start":{"line":110,"column":20},"end":{"line":110,"column":99}},"34":{"start":{"line":112,"column":20},"end":{"line":112,"column":95}},"35":{"start":{"line":117,"column":16},"end":{"line":151,"column":19}},"36":{"start":{"line":118,"column":20},"end":{"line":150,"column":21}},"37":{"start":{"line":120,"column":24},"end":{"line":149,"column":27}},"38":{"start":{"line":123,"column":28},"end":{"line":124,"column":39}},"39":{"start":{"line":124,"column":32},"end":{"line":124,"column":39}},"40":{"start":{"line":126,"column":28},"end":{"line":126,"column":50}},"41":{"start":{"line":127,"column":28},"end":{"line":127,"column":49}},"42":{"start":{"line":129,"column":28},"end":{"line":148,"column":29}},"43":{"start":{"line":133,"column":32},"end":{"line":133,"column":75}},"44":{"start":{"line":136,"column":32},"end":{"line":136,"column":65}},"45":{"start":{"line":137,"column":32},"end":{"line":137,"column":62}},"46":{"start":{"line":140,"column":32},"end":{"line":141,"column":61}},"47":{"start":{"line":141,"column":36},"end":{"line":141,"column":61}},"48":{"start":{"line":144,"column":32},"end":{"line":147,"column":124}},"49":{"start":{"line":145,"column":36},"end":{"line":145,"column":128}},"50":{"start":{"line":147,"column":36},"end":{"line":147,"column":124}},"51":{"start":{"line":163,"column":0},"end":{"line":168,"column":2}},"52":{"start":{"line":164,"column":4},"end":{"line":164,"column":19}},"53":{"start":{"line":165,"column":4},"end":{"line":165,"column":19}},"54":{"start":{"line":167,"column":4},"end":{"line":167,"column":47}},"55":{"start":{"line":191,"column":0},"end":{"line":235,"column":2}},"56":{"start":{"line":192,"column":4},"end":{"line":192,"column":52}},"57":{"start":{"line":195,"column":4},"end":{"line":195,"column":21}},"58":{"start":{"line":196,"column":4},"end":{"line":196,"column":17}},"59":{"start":{"line":198,"column":4},"end":{"line":198,"column":53}},"60":{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},"61":{"start":{"line":200,"column":8},"end":{"line":200,"column":30}},"62":{"start":{"line":203,"column":4},"end":{"line":203,"column":37}},"63":{"start":{"line":204,"column":4},"end":{"line":206,"column":5}},"64":{"start":{"line":205,"column":8},"end":{"line":205,"column":29}},"65":{"start":{"line":208,"column":4},"end":{"line":208,"column":56}},"66":{"start":{"line":209,"column":4},"end":{"line":209,"column":26}},"67":{"start":{"line":211,"column":4},"end":{"line":232,"column":5}},"68":{"start":{"line":214,"column":8},"end":{"line":226,"column":11}},"69":{"start":{"line":215,"column":12},"end":{"line":225,"column":13}},"70":{"start":{"line":216,"column":16},"end":{"line":216,"column":30}},"71":{"start":{"line":219,"column":16},"end":{"line":219,"column":48}},"72":{"start":{"line":222,"column":16},"end":{"line":222,"column":41}},"73":{"start":{"line":224,"column":16},"end":{"line":224,"column":60}},"74":{"start":{"line":228,"column":8},"end":{"line":228,"column":53}},"75":{"start":{"line":230,"column":8},"end":{"line":230,"column":40}},"76":{"start":{"line":231,"column":8},"end":{"line":231,"column":42}},"77":{"start":{"line":234,"column":4},"end":{"line":234,"column":20}},"78":{"start":{"line":246,"column":0},"end":{"line":258,"column":2}},"79":{"start":{"line":247,"column":4},"end":{"line":247,"column":61}},"80":{"start":{"line":251,"column":4},"end":{"line":251,"column":37}},"81":{"start":{"line":252,"column":4},"end":{"line":252,"column":34}},"82":{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},"83":{"start":{"line":255,"column":8},"end":{"line":255,"column":33}},"84":{"start":{"line":257,"column":4},"end":{"line":257,"column":20}},"85":{"start":{"line":265,"column":0},"end":{"line":278,"column":2}},"86":{"start":{"line":266,"column":4},"end":{"line":266,"column":21}},"87":{"start":{"line":267,"column":4},"end":{"line":267,"column":53}},"88":{"start":{"line":269,"column":4},"end":{"line":269,"column":37}},"89":{"start":{"line":270,"column":4},"end":{"line":272,"column":5}},"90":{"start":{"line":271,"column":8},"end":{"line":271,"column":29}},"91":{"start":{"line":274,"column":4},"end":{"line":274,"column":56}},"92":{"start":{"line":275,"column":4},"end":{"line":275,"column":26}},"93":{"start":{"line":277,"column":4},"end":{"line":277,"column":24}},"94":{"start":{"line":287,"column":0},"end":{"line":292,"column":2}},"95":{"start":{"line":288,"column":4},"end":{"line":288,"column":20}},"96":{"start":{"line":289,"column":4},"end":{"line":289,"column":32}},"97":{"start":{"line":290,"column":4},"end":{"line":290,"column":27}},"98":{"start":{"line":291,"column":4},"end":{"line":291,"column":19}},"99":{"start":{"line":294,"column":0},"end":{"line":294,"column":33}}},"branchMap":{"1":{"line":36,"type":"binary-expr","locations":[{"start":{"line":36,"column":11},"end":{"line":44,"column":9}},{"start":{"line":44,"column":13},"end":{"line":44,"column":15}}]},"2":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":15},"end":{"line":37,"column":42}},{"start":{"line":37,"column":46},"end":{"line":37,"column":82}}]},"3":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":8},"end":{"line":100,"column":8}},{"start":{"line":100,"column":8},"end":{"line":100,"column":8}}]},"4":{"line":100,"type":"binary-expr","locations":[{"start":{"line":100,"column":12},"end":{"line":100,"column":14}},{"start":{"line":100,"column":18},"end":{"line":100,"column":32}}]},"5":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":12},"end":{"line":104,"column":12}},{"start":{"line":104,"column":12},"end":{"line":104,"column":12}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":16},"end":{"line":109,"column":16}},{"start":{"line":109,"column":16},"end":{"line":109,"column":16}}]},"7":{"line":118,"type":"if","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":20}},{"start":{"line":118,"column":20},"end":{"line":118,"column":20}}]},"8":{"line":118,"type":"binary-expr","locations":[{"start":{"line":118,"column":23},"end":{"line":118,"column":30}},{"start":{"line":118,"column":34},"end":{"line":118,"column":48}}]},"9":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":28},"end":{"line":123,"column":28}},{"start":{"line":123,"column":28},"end":{"line":123,"column":28}}]},"10":{"line":123,"type":"binary-expr","locations":[{"start":{"line":123,"column":31},"end":{"line":123,"column":44}},{"start":{"line":123,"column":48},"end":{"line":123,"column":53}}]},"11":{"line":129,"type":"if","locations":[{"start":{"line":129,"column":28},"end":{"line":129,"column":28}},{"start":{"line":129,"column":28},"end":{"line":129,"column":28}}]},"12":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":32},"end":{"line":140,"column":32}},{"start":{"line":140,"column":32},"end":{"line":140,"column":32}}]},"13":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":32},"end":{"line":144,"column":32}},{"start":{"line":144,"column":32},"end":{"line":144,"column":32}}]},"14":{"line":199,"type":"if","locations":[{"start":{"line":199,"column":4},"end":{"line":199,"column":4}},{"start":{"line":199,"column":4},"end":{"line":199,"column":4}}]},"15":{"line":204,"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":4}},{"start":{"line":204,"column":4},"end":{"line":204,"column":4}}]},"16":{"line":204,"type":"binary-expr","locations":[{"start":{"line":204,"column":8},"end":{"line":204,"column":28}},{"start":{"line":204,"column":32},"end":{"line":204,"column":52}}]},"17":{"line":211,"type":"if","locations":[{"start":{"line":211,"column":4},"end":{"line":211,"column":4}},{"start":{"line":211,"column":4},"end":{"line":211,"column":4}}]},"18":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":12},"end":{"line":215,"column":12}},{"start":{"line":215,"column":12},"end":{"line":215,"column":12}}]},"19":{"line":254,"type":"if","locations":[{"start":{"line":254,"column":4},"end":{"line":254,"column":4}},{"start":{"line":254,"column":4},"end":{"line":254,"column":4}}]},"20":{"line":270,"type":"if","locations":[{"start":{"line":270,"column":4},"end":{"line":270,"column":4}},{"start":{"line":270,"column":4},"end":{"line":270,"column":4}}]},"21":{"line":270,"type":"binary-expr","locations":[{"start":{"line":270,"column":8},"end":{"line":270,"column":28}},{"start":{"line":270,"column":32},"end":{"line":270,"column":52}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":267,"15":2403,"16":267,"17":0,"18":267,"19":1,"20":64,"21":1,"22":107,"23":107,"24":135,"25":107,"26":135,"27":135,"28":135,"29":107,"30":107,"31":1,"32":107,"33":107,"34":107,"35":270,"36":107,"37":135,"38":43,"39":43,"40":43,"41":92,"42":107,"43":135,"44":43,"45":43,"46":43,"47":107,"48":1,"49":287,"50":287,"51":42,"52":42,"53":42,"54":42,"55":42,"56":42,"57":42,"58":0,"59":0,"60":0,"61":42,"62":42,"63":82,"64":82,"65":42,"66":245,"67":13,"68":13,"69":13,"70":13,"71":13,"72":1,"73":1,"74":1,"75":2,"76":2,"77":13,"78":13,"79":27,"80":27,"81":13,"82":232,"83":1,"84":68,"85":1,"86":106,"87":106,"88":106,"89":132,"90":1,"91":106,"92":132,"93":106,"94":29,"95":106,"96":132,"97":132,"98":1,"99":213,"100":213,"101":267,"102":1,"103":1},"b":{"1":[0,267],"2":[270,230],"3":[43,92],"4":[43,92],"5":[42,245],"6":[0,42],"7":[0,0],"8":[13,232],"9":[1,12],"10":[2,1],"11":[2,1]},"f":{"1":1,"2":267,"3":2403,"4":64,"5":107,"6":135,"7":135,"8":107,"9":270,"10":135,"11":135,"12":287,"13":42,"14":42,"15":42,"16":13,"17":1,"18":13,"19":68,"20":106,"21":132,"22":106,"23":132,"24":132,"25":213,"26":267},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":20},"end":{"line":38,"column":37}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":39},"end":{"line":50,"column":55}}},"3":{"name":"(anonymous_3)","line":51,"loc":{"start":{"line":51,"column":42},"end":{"line":51,"column":55}}},"4":{"name":"(anonymous_4)","line":70,"loc":{"start":{"line":70,"column":38},"end":{"line":70,"column":61}}},"5":{"name":"(anonymous_5)","line":82,"loc":{"start":{"line":82,"column":39},"end":{"line":82,"column":64}}},"6":{"name":"(anonymous_6)","line":85,"loc":{"start":{"line":85,"column":37},"end":{"line":85,"column":68}}},"7":{"name":"(anonymous_7)","line":89,"loc":{"start":{"line":89,"column":45},"end":{"line":89,"column":81}}},"8":{"name":"(anonymous_8)","line":100,"loc":{"start":{"line":100,"column":48},"end":{"line":100,"column":105}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":20},"end":{"line":104,"column":33}}},"10":{"name":"(anonymous_10)","line":108,"loc":{"start":{"line":108,"column":18},"end":{"line":108,"column":37}}},"11":{"name":"(anonymous_11)","line":121,"loc":{"start":{"line":121,"column":18},"end":{"line":121,"column":37}}},"12":{"name":"(anonymous_12)","line":132,"loc":{"start":{"line":132,"column":43},"end":{"line":132,"column":90}}},"13":{"name":"(anonymous_13)","line":135,"loc":{"start":{"line":135,"column":16},"end":{"line":135,"column":28}}},"14":{"name":"(anonymous_14)","line":141,"loc":{"start":{"line":141,"column":13},"end":{"line":141,"column":25}}},"15":{"name":"(anonymous_15)","line":152,"loc":{"start":{"line":152,"column":13},"end":{"line":152,"column":25}}},"16":{"name":"(anonymous_16)","line":163,"loc":{"start":{"line":163,"column":16},"end":{"line":163,"column":28}}},"17":{"name":"(anonymous_17)","line":170,"loc":{"start":{"line":170,"column":17},"end":{"line":170,"column":29}}},"18":{"name":"(anonymous_18)","line":180,"loc":{"start":{"line":180,"column":13},"end":{"line":180,"column":25}}},"19":{"name":"(anonymous_19)","line":202,"loc":{"start":{"line":202,"column":38},"end":{"line":202,"column":61}}},"20":{"name":"(anonymous_20)","line":214,"loc":{"start":{"line":214,"column":39},"end":{"line":214,"column":63}}},"21":{"name":"(anonymous_21)","line":218,"loc":{"start":{"line":218,"column":29},"end":{"line":218,"column":60}}},"22":{"name":"(anonymous_22)","line":223,"loc":{"start":{"line":223,"column":37},"end":{"line":223,"column":69}}},"23":{"name":"(anonymous_23)","line":224,"loc":{"start":{"line":224,"column":37},"end":{"line":224,"column":68}}},"24":{"name":"(anonymous_24)","line":233,"loc":{"start":{"line":233,"column":23},"end":{"line":233,"column":48}}},"25":{"name":"(anonymous_25)","line":240,"loc":{"start":{"line":240,"column":43},"end":{"line":240,"column":60}}},"26":{"name":"(anonymous_26)","line":242,"loc":{"start":{"line":242,"column":21},"end":{"line":242,"column":37}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":32}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":47}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":41}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":39}},"5":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"6":{"start":{"line":29,"column":0},"end":{"line":29,"column":57}},"7":{"start":{"line":30,"column":0},"end":{"line":30,"column":45}},"8":{"start":{"line":31,"column":0},"end":{"line":31,"column":41}},"9":{"start":{"line":32,"column":0},"end":{"line":32,"column":43}},"10":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"11":{"start":{"line":38,"column":0},"end":{"line":40,"column":2}},"12":{"start":{"line":39,"column":4},"end":{"line":39,"column":24}},"13":{"start":{"line":50,"column":0},"end":{"line":60,"column":2}},"14":{"start":{"line":51,"column":4},"end":{"line":53,"column":10}},"15":{"start":{"line":52,"column":8},"end":{"line":52,"column":30}},"16":{"start":{"line":55,"column":4},"end":{"line":57,"column":5}},"17":{"start":{"line":56,"column":8},"end":{"line":56,"column":55}},"18":{"start":{"line":59,"column":4},"end":{"line":59,"column":24}},"19":{"start":{"line":70,"column":0},"end":{"line":72,"column":2}},"20":{"start":{"line":71,"column":4},"end":{"line":71,"column":46}},"21":{"start":{"line":82,"column":0},"end":{"line":98,"column":2}},"22":{"start":{"line":83,"column":4},"end":{"line":83,"column":53}},"23":{"start":{"line":85,"column":4},"end":{"line":87,"column":7}},"24":{"start":{"line":86,"column":8},"end":{"line":86,"column":64}},"25":{"start":{"line":89,"column":4},"end":{"line":93,"column":10}},"26":{"start":{"line":90,"column":8},"end":{"line":90,"column":75}},"27":{"start":{"line":91,"column":8},"end":{"line":91,"column":84}},"28":{"start":{"line":92,"column":8},"end":{"line":92,"column":45}},"29":{"start":{"line":95,"column":4},"end":{"line":95,"column":91}},"30":{"start":{"line":97,"column":4},"end":{"line":97,"column":18}},"31":{"start":{"line":100,"column":0},"end":{"line":129,"column":2}},"32":{"start":{"line":101,"column":4},"end":{"line":101,"column":20}},"33":{"start":{"line":102,"column":4},"end":{"line":102,"column":20}},"34":{"start":{"line":104,"column":4},"end":{"line":106,"column":6}},"35":{"start":{"line":105,"column":7},"end":{"line":105,"column":100}},"36":{"start":{"line":108,"column":4},"end":{"line":119,"column":7}},"37":{"start":{"line":109,"column":8},"end":{"line":116,"column":9}},"38":{"start":{"line":110,"column":12},"end":{"line":110,"column":63}},"39":{"start":{"line":111,"column":12},"end":{"line":111,"column":98}},"40":{"start":{"line":112,"column":12},"end":{"line":112,"column":42}},"41":{"start":{"line":115,"column":12},"end":{"line":115,"column":100}},"42":{"start":{"line":121,"column":4},"end":{"line":127,"column":7}},"43":{"start":{"line":122,"column":8},"end":{"line":126,"column":9}},"44":{"start":{"line":123,"column":12},"end":{"line":123,"column":98}},"45":{"start":{"line":124,"column":12},"end":{"line":124,"column":42}},"46":{"start":{"line":125,"column":12},"end":{"line":125,"column":24}},"47":{"start":{"line":128,"column":4},"end":{"line":128,"column":18}},"48":{"start":{"line":132,"column":0},"end":{"line":192,"column":2}},"49":{"start":{"line":133,"column":4},"end":{"line":133,"column":20}},"50":{"start":{"line":134,"column":4},"end":{"line":189,"column":5}},"51":{"start":{"line":135,"column":8},"end":{"line":160,"column":13}},"52":{"start":{"line":137,"column":12},"end":{"line":137,"column":59}},"53":{"start":{"line":138,"column":12},"end":{"line":138,"column":83}},"54":{"start":{"line":139,"column":12},"end":{"line":139,"column":36}},"55":{"start":{"line":141,"column":12},"end":{"line":149,"column":17}},"56":{"start":{"line":142,"column":16},"end":{"line":142,"column":39}},"57":{"start":{"line":143,"column":16},"end":{"line":148,"column":17}},"58":{"start":{"line":144,"column":20},"end":{"line":147,"column":21}},"59":{"start":{"line":145,"column":24},"end":{"line":145,"column":68}},"60":{"start":{"line":146,"column":24},"end":{"line":146,"column":119}},"61":{"start":{"line":152,"column":12},"end":{"line":157,"column":17}},"62":{"start":{"line":153,"column":16},"end":{"line":156,"column":17}},"63":{"start":{"line":154,"column":20},"end":{"line":154,"column":54}},"64":{"start":{"line":155,"column":20},"end":{"line":155,"column":122}},"65":{"start":{"line":159,"column":12},"end":{"line":159,"column":26}},"66":{"start":{"line":162,"column":11},"end":{"line":189,"column":5}},"67":{"start":{"line":163,"column":8},"end":{"line":188,"column":13}},"68":{"start":{"line":164,"column":12},"end":{"line":164,"column":59}},"69":{"start":{"line":165,"column":12},"end":{"line":165,"column":83}},"70":{"start":{"line":166,"column":12},"end":{"line":166,"column":28}},"71":{"start":{"line":169,"column":12},"end":{"line":178,"column":13}},"72":{"start":{"line":170,"column":16},"end":{"line":177,"column":21}},"73":{"start":{"line":171,"column":20},"end":{"line":171,"column":43}},"74":{"start":{"line":172,"column":20},"end":{"line":176,"column":21}},"75":{"start":{"line":174,"column":24},"end":{"line":174,"column":74}},"76":{"start":{"line":175,"column":24},"end":{"line":175,"column":119}},"77":{"start":{"line":180,"column":12},"end":{"line":185,"column":17}},"78":{"start":{"line":181,"column":16},"end":{"line":184,"column":17}},"79":{"start":{"line":182,"column":20},"end":{"line":182,"column":54}},"80":{"start":{"line":183,"column":20},"end":{"line":183,"column":117}},"81":{"start":{"line":187,"column":12},"end":{"line":187,"column":26}},"82":{"start":{"line":191,"column":4},"end":{"line":191,"column":19}},"83":{"start":{"line":202,"column":0},"end":{"line":204,"column":2}},"84":{"start":{"line":203,"column":4},"end":{"line":203,"column":47}},"85":{"start":{"line":214,"column":0},"end":{"line":221,"column":2}},"86":{"start":{"line":215,"column":4},"end":{"line":215,"column":53}},"87":{"start":{"line":216,"column":4},"end":{"line":216,"column":56}},"88":{"start":{"line":218,"column":4},"end":{"line":220,"column":7}},"89":{"start":{"line":219,"column":8},"end":{"line":219,"column":80}},"90":{"start":{"line":223,"column":0},"end":{"line":238,"column":2}},"91":{"start":{"line":224,"column":4},"end":{"line":226,"column":7}},"92":{"start":{"line":225,"column":8},"end":{"line":225,"column":59}},"93":{"start":{"line":228,"column":4},"end":{"line":231,"column":5}},"94":{"start":{"line":230,"column":8},"end":{"line":230,"column":37}},"95":{"start":{"line":233,"column":4},"end":{"line":237,"column":7}},"96":{"start":{"line":235,"column":8},"end":{"line":235,"column":83}},"97":{"start":{"line":236,"column":8},"end":{"line":236,"column":41}},"98":{"start":{"line":240,"column":0},"end":{"line":245,"column":2}},"99":{"start":{"line":241,"column":4},"end":{"line":241,"column":20}},"100":{"start":{"line":242,"column":4},"end":{"line":244,"column":7}},"101":{"start":{"line":243,"column":8},"end":{"line":243,"column":39}},"102":{"start":{"line":247,"column":0},"end":{"line":257,"column":3}},"103":{"start":{"line":259,"column":0},"end":{"line":259,"column":23}}},"branchMap":{"1":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":55,"column":4}},{"start":{"line":55,"column":4},"end":{"line":55,"column":4}}]},"2":{"line":105,"type":"binary-expr","locations":[{"start":{"line":105,"column":14},"end":{"line":105,"column":55}},{"start":{"line":105,"column":59},"end":{"line":105,"column":99}}]},"3":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"4":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":8},"end":{"line":122,"column":8}},{"start":{"line":122,"column":8},"end":{"line":122,"column":8}}]},"5":{"line":134,"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":134,"column":4}},{"start":{"line":134,"column":4},"end":{"line":134,"column":4}}]},"6":{"line":143,"type":"if","locations":[{"start":{"line":143,"column":16},"end":{"line":143,"column":16}},{"start":{"line":143,"column":16},"end":{"line":143,"column":16}}]},"7":{"line":145,"type":"binary-expr","locations":[{"start":{"line":145,"column":42},"end":{"line":145,"column":62}},{"start":{"line":145,"column":66},"end":{"line":145,"column":67}}]},"8":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":11},"end":{"line":162,"column":11}},{"start":{"line":162,"column":11},"end":{"line":162,"column":11}}]},"9":{"line":169,"type":"if","locations":[{"start":{"line":169,"column":12},"end":{"line":169,"column":12}},{"start":{"line":169,"column":12},"end":{"line":169,"column":12}}]},"10":{"line":174,"type":"binary-expr","locations":[{"start":{"line":174,"column":42},"end":{"line":174,"column":68}},{"start":{"line":174,"column":72},"end":{"line":174,"column":73}}]},"11":{"line":174,"type":"binary-expr","locations":[{"start":{"line":174,"column":44},"end":{"line":174,"column":58}},{"start":{"line":174,"column":62},"end":{"line":174,"column":64}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":205,"7":205,"8":205,"9":1,"10":15,"11":15,"12":15,"13":15,"14":1,"15":9,"16":9,"17":9,"18":9,"19":9,"20":1,"21":14,"22":14,"23":14,"24":14,"25":14,"26":1,"27":15,"28":15,"29":1,"30":7,"31":1,"32":61,"33":1,"34":61,"35":61,"36":3,"37":58,"38":1,"39":45,"40":45,"41":1,"42":7,"43":1,"44":0,"45":1,"46":12,"47":1,"48":10,"49":1,"50":15,"51":15,"52":1,"53":7,"54":7,"55":1,"56":26,"57":26,"58":1},"b":{"1":[7,8],"2":[61,0],"3":[3,58],"4":[45,0],"5":[6,6]},"f":{"1":205,"2":15,"3":9,"4":14,"5":15,"6":7,"7":61,"8":61,"9":45,"10":7,"11":0,"12":12,"13":10,"14":15,"15":7,"16":26},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":21},"end":{"line":38,"column":38}}},"2":{"name":"(anonymous_2)","line":51,"loc":{"start":{"line":51,"column":23},"end":{"line":51,"column":40}}},"3":{"name":"(anonymous_3)","line":65,"loc":{"start":{"line":65,"column":30},"end":{"line":65,"column":47}}},"4":{"name":"(anonymous_4)","line":80,"loc":{"start":{"line":80,"column":24},"end":{"line":80,"column":41}}},"5":{"name":"(anonymous_5)","line":95,"loc":{"start":{"line":95,"column":22},"end":{"line":95,"column":39}}},"6":{"name":"(anonymous_6)","line":108,"loc":{"start":{"line":108,"column":22},"end":{"line":108,"column":39}}},"7":{"name":"(anonymous_7)","line":119,"loc":{"start":{"line":119,"column":23},"end":{"line":119,"column":40}}},"8":{"name":"(anonymous_8)","line":130,"loc":{"start":{"line":130,"column":22},"end":{"line":130,"column":39}}},"9":{"name":"(anonymous_9)","line":148,"loc":{"start":{"line":148,"column":23},"end":{"line":148,"column":40}}},"10":{"name":"(anonymous_10)","line":160,"loc":{"start":{"line":160,"column":23},"end":{"line":160,"column":40}}},"11":{"name":"(anonymous_11)","line":171,"loc":{"start":{"line":171,"column":24},"end":{"line":171,"column":41}}},"12":{"name":"(anonymous_12)","line":182,"loc":{"start":{"line":182,"column":23},"end":{"line":182,"column":40}}},"13":{"name":"(anonymous_13)","line":193,"loc":{"start":{"line":193,"column":24},"end":{"line":193,"column":41}}},"14":{"name":"(anonymous_14)","line":204,"loc":{"start":{"line":204,"column":31},"end":{"line":204,"column":48}}},"15":{"name":"(anonymous_15)","line":216,"loc":{"start":{"line":216,"column":25},"end":{"line":216,"column":42}}},"16":{"name":"(anonymous_16)","line":228,"loc":{"start":{"line":228,"column":26},"end":{"line":228,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":40}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":35}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":39}},"5":{"start":{"line":38,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":39,"column":4},"end":{"line":39,"column":52}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":87}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":37}},"9":{"start":{"line":51,"column":0},"end":{"line":56,"column":2}},"10":{"start":{"line":52,"column":4},"end":{"line":52,"column":46}},"11":{"start":{"line":53,"column":4},"end":{"line":53,"column":50}},"12":{"start":{"line":54,"column":4},"end":{"line":54,"column":44}},"13":{"start":{"line":55,"column":4},"end":{"line":55,"column":37}},"14":{"start":{"line":65,"column":0},"end":{"line":71,"column":2}},"15":{"start":{"line":66,"column":4},"end":{"line":66,"column":46}},"16":{"start":{"line":67,"column":4},"end":{"line":67,"column":35}},"17":{"start":{"line":68,"column":4},"end":{"line":68,"column":50}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":44}},"19":{"start":{"line":70,"column":4},"end":{"line":70,"column":68}},"20":{"start":{"line":80,"column":0},"end":{"line":86,"column":2}},"21":{"start":{"line":81,"column":4},"end":{"line":81,"column":49}},"22":{"start":{"line":82,"column":4},"end":{"line":82,"column":35}},"23":{"start":{"line":83,"column":4},"end":{"line":83,"column":50}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":44}},"25":{"start":{"line":85,"column":4},"end":{"line":85,"column":68}},"26":{"start":{"line":95,"column":0},"end":{"line":98,"column":2}},"27":{"start":{"line":96,"column":4},"end":{"line":96,"column":106}},"28":{"start":{"line":97,"column":4},"end":{"line":97,"column":37}},"29":{"start":{"line":108,"column":0},"end":{"line":110,"column":2}},"30":{"start":{"line":109,"column":4},"end":{"line":109,"column":81}},"31":{"start":{"line":119,"column":0},"end":{"line":121,"column":2}},"32":{"start":{"line":120,"column":4},"end":{"line":120,"column":84}},"33":{"start":{"line":130,"column":0},"end":{"line":139,"column":2}},"34":{"start":{"line":131,"column":4},"end":{"line":131,"column":42}},"35":{"start":{"line":135,"column":4},"end":{"line":137,"column":5}},"36":{"start":{"line":136,"column":8},"end":{"line":136,"column":142}},"37":{"start":{"line":138,"column":4},"end":{"line":138,"column":36}},"38":{"start":{"line":148,"column":0},"end":{"line":151,"column":2}},"39":{"start":{"line":149,"column":4},"end":{"line":149,"column":42}},"40":{"start":{"line":150,"column":4},"end":{"line":150,"column":36}},"41":{"start":{"line":160,"column":0},"end":{"line":162,"column":2}},"42":{"start":{"line":161,"column":4},"end":{"line":161,"column":71}},"43":{"start":{"line":171,"column":0},"end":{"line":173,"column":2}},"44":{"start":{"line":172,"column":4},"end":{"line":172,"column":72}},"45":{"start":{"line":182,"column":0},"end":{"line":184,"column":2}},"46":{"start":{"line":183,"column":4},"end":{"line":183,"column":116}},"47":{"start":{"line":193,"column":0},"end":{"line":195,"column":2}},"48":{"start":{"line":194,"column":4},"end":{"line":194,"column":37}},"49":{"start":{"line":204,"column":0},"end":{"line":207,"column":2}},"50":{"start":{"line":205,"column":4},"end":{"line":205,"column":86}},"51":{"start":{"line":206,"column":4},"end":{"line":206,"column":57}},"52":{"start":{"line":216,"column":0},"end":{"line":219,"column":2}},"53":{"start":{"line":217,"column":4},"end":{"line":217,"column":86}},"54":{"start":{"line":218,"column":4},"end":{"line":218,"column":64}},"55":{"start":{"line":228,"column":0},"end":{"line":231,"column":2}},"56":{"start":{"line":229,"column":4},"end":{"line":229,"column":35}},"57":{"start":{"line":230,"column":4},"end":{"line":230,"column":63}},"58":{"start":{"line":233,"column":0},"end":{"line":249,"column":2}}},"branchMap":{"1":{"line":96,"type":"cond-expr","locations":[{"start":{"line":96,"column":95},"end":{"line":96,"column":98}},{"start":{"line":96,"column":101},"end":{"line":96,"column":104}}]},"2":{"line":131,"type":"binary-expr","locations":[{"start":{"line":131,"column":16},"end":{"line":131,"column":34}},{"start":{"line":131,"column":38},"end":{"line":131,"column":41}}]},"3":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":4},"end":{"line":135,"column":4}},{"start":{"line":135,"column":4},"end":{"line":135,"column":4}}]},"4":{"line":149,"type":"binary-expr","locations":[{"start":{"line":149,"column":16},"end":{"line":149,"column":34}},{"start":{"line":149,"column":38},"end":{"line":149,"column":41}}]},"5":{"line":183,"type":"cond-expr","locations":[{"start":{"line":183,"column":103},"end":{"line":183,"column":107}},{"start":{"line":183,"column":110},"end":{"line":183,"column":115}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js","s":{"1":1,"2":1,"3":434,"4":434,"5":1,"6":0,"7":1,"8":0,"9":1,"10":0,"11":1,"12":668,"13":1,"14":0,"15":1,"16":389,"17":389,"18":0,"19":1,"20":279,"21":1,"22":235,"23":1,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1},"b":{"1":[434,0],"2":[0,0],"3":[389,0],"4":[44,235],"5":[0,0]},"f":{"1":434,"2":0,"3":0,"4":0,"5":668,"6":0,"7":389,"8":279,"9":235,"10":0,"11":0,"12":0,"13":0},"fnMap":{"1":{"name":"(anonymous_1)","line":29,"loc":{"start":{"line":29,"column":20},"end":{"line":29,"column":45}}},"2":{"name":"(anonymous_2)","line":40,"loc":{"start":{"line":40,"column":44},"end":{"line":40,"column":56}}},"3":{"name":"(anonymous_3)","line":51,"loc":{"start":{"line":51,"column":37},"end":{"line":51,"column":55}}},"4":{"name":"(anonymous_4)","line":63,"loc":{"start":{"line":63,"column":34},"end":{"line":63,"column":51}}},"5":{"name":"(anonymous_5)","line":74,"loc":{"start":{"line":74,"column":36},"end":{"line":74,"column":48}}},"6":{"name":"(anonymous_6)","line":84,"loc":{"start":{"line":84,"column":40},"end":{"line":84,"column":52}}},"7":{"name":"(anonymous_7)","line":94,"loc":{"start":{"line":94,"column":37},"end":{"line":94,"column":49}}},"8":{"name":"(anonymous_8)","line":107,"loc":{"start":{"line":107,"column":38},"end":{"line":107,"column":50}}},"9":{"name":"(anonymous_9)","line":117,"loc":{"start":{"line":117,"column":33},"end":{"line":117,"column":45}}},"10":{"name":"(anonymous_10)","line":128,"loc":{"start":{"line":128,"column":27},"end":{"line":128,"column":45}}},"11":{"name":"(anonymous_11)","line":132,"loc":{"start":{"line":132,"column":34},"end":{"line":132,"column":51}}},"12":{"name":"(anonymous_12)","line":142,"loc":{"start":{"line":142,"column":31},"end":{"line":142,"column":56}}},"13":{"name":"(anonymous_13)","line":144,"loc":{"start":{"line":144,"column":27},"end":{"line":144,"column":52}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":29,"column":0},"end":{"line":32,"column":2}},"3":{"start":{"line":30,"column":4},"end":{"line":30,"column":29}},"4":{"start":{"line":31,"column":4},"end":{"line":31,"column":25}},"5":{"start":{"line":40,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":41}},"7":{"start":{"line":51,"column":0},"end":{"line":53,"column":2}},"8":{"start":{"line":52,"column":4},"end":{"line":52,"column":49}},"9":{"start":{"line":63,"column":0},"end":{"line":65,"column":2}},"10":{"start":{"line":64,"column":4},"end":{"line":64,"column":55}},"11":{"start":{"line":74,"column":0},"end":{"line":76,"column":2}},"12":{"start":{"line":75,"column":4},"end":{"line":75,"column":37}},"13":{"start":{"line":84,"column":0},"end":{"line":86,"column":2}},"14":{"start":{"line":85,"column":4},"end":{"line":85,"column":104}},"15":{"start":{"line":94,"column":0},"end":{"line":99,"column":2}},"16":{"start":{"line":95,"column":4},"end":{"line":97,"column":5}},"17":{"start":{"line":96,"column":8},"end":{"line":96,"column":26}},"18":{"start":{"line":98,"column":4},"end":{"line":98,"column":32}},"19":{"start":{"line":107,"column":0},"end":{"line":109,"column":2}},"20":{"start":{"line":108,"column":4},"end":{"line":108,"column":46}},"21":{"start":{"line":117,"column":0},"end":{"line":119,"column":2}},"22":{"start":{"line":118,"column":4},"end":{"line":118,"column":50}},"23":{"start":{"line":128,"column":0},"end":{"line":147,"column":2}},"24":{"start":{"line":131,"column":4},"end":{"line":131,"column":41}},"25":{"start":{"line":132,"column":4},"end":{"line":139,"column":7}},"26":{"start":{"line":133,"column":8},"end":{"line":135,"column":9}},"27":{"start":{"line":134,"column":12},"end":{"line":134,"column":25}},"28":{"start":{"line":136,"column":8},"end":{"line":136,"column":33}},"29":{"start":{"line":137,"column":8},"end":{"line":137,"column":49}},"30":{"start":{"line":138,"column":8},"end":{"line":138,"column":40}},"31":{"start":{"line":142,"column":4},"end":{"line":146,"column":12}},"32":{"start":{"line":143,"column":8},"end":{"line":143,"column":44}},"33":{"start":{"line":145,"column":8},"end":{"line":145,"column":43}},"34":{"start":{"line":151,"column":0},"end":{"line":151,"column":31}}},"branchMap":{"1":{"line":30,"type":"binary-expr","locations":[{"start":{"line":30,"column":17},"end":{"line":30,"column":22}},{"start":{"line":30,"column":26},"end":{"line":30,"column":28}}]},"2":{"line":85,"type":"cond-expr","locations":[{"start":{"line":85,"column":31},"end":{"line":85,"column":33}},{"start":{"line":85,"column":36},"end":{"line":85,"column":103}}]},"3":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":4},"end":{"line":95,"column":4}},{"start":{"line":95,"column":4},"end":{"line":95,"column":4}}]},"4":{"line":108,"type":"cond-expr","locations":[{"start":{"line":108,"column":30},"end":{"line":108,"column":40}},{"start":{"line":108,"column":43},"end":{"line":108,"column":45}}]},"5":{"line":133,"type":"if","locations":[{"start":{"line":133,"column":8},"end":{"line":133,"column":8}},{"start":{"line":133,"column":8},"end":{"line":133,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":100,"12":1},"b":{},"f":{"1":1,"2":267,"3":100},"fnMap":{"1":{"name":"(anonymous_1)","line":14,"loc":{"start":{"line":14,"column":26},"end":{"line":14,"column":38}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":39},"end":{"line":22,"column":55}}},"3":{"name":"(anonymous_3)","line":26,"loc":{"start":{"line":26,"column":49},"end":{"line":26,"column":65}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":14,"column":0},"end":{"line":17,"column":2}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":50}},"6":{"start":{"line":19,"column":0},"end":{"line":19,"column":53}},"7":{"start":{"line":20,"column":0},"end":{"line":20,"column":64}},"8":{"start":{"line":22,"column":0},"end":{"line":24,"column":2}},"9":{"start":{"line":23,"column":4},"end":{"line":23,"column":50}},"10":{"start":{"line":26,"column":0},"end":{"line":28,"column":2}},"11":{"start":{"line":27,"column":4},"end":{"line":27,"column":45}},"12":{"start":{"line":30,"column":0},"end":{"line":30,"column":37}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js","s":{"1":1,"2":1,"3":1,"4":9,"5":9,"6":1,"7":0,"8":1,"9":0,"10":1,"11":1029,"12":1029,"13":1,"14":619,"15":619,"16":1,"17":678,"18":678,"19":123,"20":555,"21":1,"22":128,"23":128,"24":0,"25":128,"26":1,"27":338,"28":1,"29":2454,"30":1,"31":201,"32":201,"33":22,"34":22,"35":22,"36":22,"37":22,"38":22,"39":43,"40":22,"41":179,"42":11,"43":11,"44":11,"45":11,"46":11,"47":23,"48":11,"49":168,"50":1,"51":216,"52":216,"53":21,"54":21,"55":21,"56":21,"57":21,"58":21,"59":21,"60":21,"61":21,"62":37,"63":21,"64":195,"65":19,"66":19,"67":19,"68":19,"69":19,"70":19,"71":19,"72":19,"73":47,"74":19,"75":176,"76":22,"77":22,"78":22,"79":22,"80":22,"81":154,"82":154,"83":1},"b":{"1":[1029,186],"2":[619,43],"3":[123,555],"4":[123,54],"5":[0,128],"6":[22,179],"7":[11,168],"8":[21,195],"9":[19,176],"10":[22,154]},"f":{"1":9,"2":0,"3":0,"4":1029,"5":619,"6":678,"7":128,"8":338,"9":2454,"10":201,"11":22,"12":43,"13":11,"14":216,"15":21,"16":19,"17":22},"fnMap":{"1":{"name":"(anonymous_1)","line":7,"loc":{"start":{"line":7,"column":19},"end":{"line":7,"column":37}}},"2":{"name":"(anonymous_2)","line":19,"loc":{"start":{"line":19,"column":32},"end":{"line":19,"column":48}}},"3":{"name":"(anonymous_3)","line":30,"loc":{"start":{"line":30,"column":42},"end":{"line":30,"column":58}}},"4":{"name":"(anonymous_4)","line":44,"loc":{"start":{"line":44,"column":40},"end":{"line":44,"column":56}}},"5":{"name":"(anonymous_5)","line":59,"loc":{"start":{"line":59,"column":39},"end":{"line":59,"column":55}}},"6":{"name":"(anonymous_6)","line":78,"loc":{"start":{"line":78,"column":43},"end":{"line":78,"column":59}}},"7":{"name":"(anonymous_7)","line":99,"loc":{"start":{"line":99,"column":36},"end":{"line":99,"column":52}}},"8":{"name":"(anonymous_8)","line":117,"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":51}}},"9":{"name":"(anonymous_9)","line":132,"loc":{"start":{"line":132,"column":37},"end":{"line":132,"column":53}}},"10":{"name":"(anonymous_10)","line":145,"loc":{"start":{"line":145,"column":32},"end":{"line":145,"column":55}}},"11":{"name":"(anonymous_11)","line":149,"loc":{"start":{"line":149,"column":16},"end":{"line":149,"column":28}}},"12":{"name":"(anonymous_12)","line":156,"loc":{"start":{"line":156,"column":26},"end":{"line":156,"column":39}}},"13":{"name":"(anonymous_13)","line":165,"loc":{"start":{"line":165,"column":16},"end":{"line":165,"column":28}}},"14":{"name":"(anonymous_14)","line":191,"loc":{"start":{"line":191,"column":32},"end":{"line":191,"column":63}}},"15":{"name":"(anonymous_15)","line":196,"loc":{"start":{"line":196,"column":16},"end":{"line":196,"column":28}}},"16":{"name":"(anonymous_16)","line":215,"loc":{"start":{"line":215,"column":16},"end":{"line":215,"column":28}}},"17":{"name":"(anonymous_17)","line":232,"loc":{"start":{"line":232,"column":16},"end":{"line":232,"column":28}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"3":{"start":{"line":7,"column":0},"end":{"line":10,"column":2}},"4":{"start":{"line":8,"column":4},"end":{"line":8,"column":49}},"5":{"start":{"line":9,"column":4},"end":{"line":9,"column":51}},"6":{"start":{"line":19,"column":0},"end":{"line":21,"column":2}},"7":{"start":{"line":20,"column":4},"end":{"line":20,"column":64}},"8":{"start":{"line":30,"column":0},"end":{"line":32,"column":2}},"9":{"start":{"line":31,"column":4},"end":{"line":31,"column":65}},"10":{"start":{"line":44,"column":0},"end":{"line":47,"column":2}},"11":{"start":{"line":45,"column":4},"end":{"line":45,"column":45}},"12":{"start":{"line":46,"column":4},"end":{"line":46,"column":85}},"13":{"start":{"line":59,"column":0},"end":{"line":62,"column":2}},"14":{"start":{"line":60,"column":4},"end":{"line":60,"column":45}},"15":{"start":{"line":61,"column":4},"end":{"line":61,"column":86}},"16":{"start":{"line":78,"column":0},"end":{"line":84,"column":2}},"17":{"start":{"line":79,"column":4},"end":{"line":79,"column":45}},"18":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"19":{"start":{"line":81,"column":7},"end":{"line":81,"column":85}},"20":{"start":{"line":83,"column":4},"end":{"line":83,"column":13}},"21":{"start":{"line":99,"column":0},"end":{"line":107,"column":2}},"22":{"start":{"line":101,"column":4},"end":{"line":101,"column":45}},"23":{"start":{"line":102,"column":4},"end":{"line":104,"column":5}},"24":{"start":{"line":103,"column":8},"end":{"line":103,"column":20}},"25":{"start":{"line":106,"column":4},"end":{"line":106,"column":84}},"26":{"start":{"line":117,"column":0},"end":{"line":119,"column":2}},"27":{"start":{"line":118,"column":4},"end":{"line":118,"column":17}},"28":{"start":{"line":132,"column":0},"end":{"line":135,"column":2}},"29":{"start":{"line":134,"column":4},"end":{"line":134,"column":39}},"30":{"start":{"line":145,"column":0},"end":{"line":180,"column":2}},"31":{"start":{"line":146,"column":4},"end":{"line":146,"column":20}},"32":{"start":{"line":147,"column":4},"end":{"line":177,"column":5}},"33":{"start":{"line":149,"column":8},"end":{"line":161,"column":13}},"34":{"start":{"line":150,"column":12},"end":{"line":150,"column":38}},"35":{"start":{"line":151,"column":12},"end":{"line":151,"column":51}},"36":{"start":{"line":153,"column":12},"end":{"line":153,"column":28}},"37":{"start":{"line":154,"column":12},"end":{"line":154,"column":59}},"38":{"start":{"line":156,"column":12},"end":{"line":158,"column":15}},"39":{"start":{"line":157,"column":16},"end":{"line":157,"column":56}},"40":{"start":{"line":160,"column":12},"end":{"line":160,"column":26}},"41":{"start":{"line":163,"column":11},"end":{"line":177,"column":5}},"42":{"start":{"line":165,"column":8},"end":{"line":175,"column":13}},"43":{"start":{"line":166,"column":12},"end":{"line":166,"column":54}},"44":{"start":{"line":167,"column":12},"end":{"line":167,"column":51}},"45":{"start":{"line":169,"column":12},"end":{"line":169,"column":28}},"46":{"start":{"line":170,"column":12},"end":{"line":172,"column":13}},"47":{"start":{"line":171,"column":16},"end":{"line":171,"column":63}},"48":{"start":{"line":174,"column":12},"end":{"line":174,"column":26}},"49":{"start":{"line":179,"column":4},"end":{"line":179,"column":54}},"50":{"start":{"line":191,"column":0},"end":{"line":243,"column":2}},"51":{"start":{"line":192,"column":4},"end":{"line":192,"column":20}},"52":{"start":{"line":194,"column":4},"end":{"line":239,"column":5}},"53":{"start":{"line":196,"column":8},"end":{"line":211,"column":13}},"54":{"start":{"line":197,"column":12},"end":{"line":197,"column":76}},"55":{"start":{"line":198,"column":12},"end":{"line":198,"column":76}},"56":{"start":{"line":199,"column":12},"end":{"line":199,"column":46}},"57":{"start":{"line":201,"column":12},"end":{"line":201,"column":51}},"58":{"start":{"line":202,"column":12},"end":{"line":202,"column":75}},"59":{"start":{"line":203,"column":12},"end":{"line":203,"column":100}},"60":{"start":{"line":204,"column":12},"end":{"line":204,"column":28}},"61":{"start":{"line":206,"column":12},"end":{"line":208,"column":13}},"62":{"start":{"line":207,"column":16},"end":{"line":207,"column":76}},"63":{"start":{"line":210,"column":12},"end":{"line":210,"column":26}},"64":{"start":{"line":213,"column":11},"end":{"line":239,"column":5}},"65":{"start":{"line":215,"column":8},"end":{"line":229,"column":13}},"66":{"start":{"line":216,"column":12},"end":{"line":216,"column":54}},"67":{"start":{"line":217,"column":12},"end":{"line":217,"column":36}},"68":{"start":{"line":219,"column":12},"end":{"line":219,"column":51}},"69":{"start":{"line":220,"column":12},"end":{"line":220,"column":75}},"70":{"start":{"line":221,"column":12},"end":{"line":221,"column":100}},"71":{"start":{"line":222,"column":12},"end":{"line":222,"column":28}},"72":{"start":{"line":224,"column":12},"end":{"line":226,"column":13}},"73":{"start":{"line":225,"column":16},"end":{"line":225,"column":76}},"74":{"start":{"line":228,"column":12},"end":{"line":228,"column":26}},"75":{"start":{"line":230,"column":11},"end":{"line":239,"column":5}},"76":{"start":{"line":232,"column":8},"end":{"line":238,"column":13}},"77":{"start":{"line":233,"column":12},"end":{"line":233,"column":78}},"78":{"start":{"line":234,"column":12},"end":{"line":234,"column":78}},"79":{"start":{"line":235,"column":12},"end":{"line":235,"column":63}},"80":{"start":{"line":237,"column":12},"end":{"line":237,"column":123}},"81":{"start":{"line":241,"column":4},"end":{"line":241,"column":45}},"82":{"start":{"line":242,"column":4},"end":{"line":242,"column":90}},"83":{"start":{"line":245,"column":0},"end":{"line":245,"column":30}}},"branchMap":{"1":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":11},"end":{"line":46,"column":24}},{"start":{"line":46,"column":28},"end":{"line":46,"column":84}}]},"2":{"line":61,"type":"binary-expr","locations":[{"start":{"line":61,"column":11},"end":{"line":61,"column":24}},{"start":{"line":61,"column":28},"end":{"line":61,"column":85}}]},"3":{"line":80,"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":80,"column":4}},{"start":{"line":80,"column":4},"end":{"line":80,"column":4}}]},"4":{"line":81,"type":"binary-expr","locations":[{"start":{"line":81,"column":23},"end":{"line":81,"column":78}},{"start":{"line":81,"column":82},"end":{"line":81,"column":83}}]},"5":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"6":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"7":{"line":163,"type":"if","locations":[{"start":{"line":163,"column":11},"end":{"line":163,"column":11}},{"start":{"line":163,"column":11},"end":{"line":163,"column":11}}]},"8":{"line":194,"type":"if","locations":[{"start":{"line":194,"column":4},"end":{"line":194,"column":4}},{"start":{"line":194,"column":4},"end":{"line":194,"column":4}}]},"9":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":11},"end":{"line":213,"column":11}},{"start":{"line":213,"column":11},"end":{"line":213,"column":11}}]},"10":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":11},"end":{"line":230,"column":11}},{"start":{"line":230,"column":11},"end":{"line":230,"column":11}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":44,"12":1},"b":{},"f":{"1":1,"2":267,"3":44},"fnMap":{"1":{"name":"(anonymous_1)","line":14,"loc":{"start":{"line":14,"column":23},"end":{"line":14,"column":35}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":36},"end":{"line":22,"column":52}}},"3":{"name":"(anonymous_3)","line":26,"loc":{"start":{"line":26,"column":46},"end":{"line":26,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":14,"column":0},"end":{"line":17,"column":2}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":45}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":47}},"6":{"start":{"line":19,"column":0},"end":{"line":19,"column":50}},"7":{"start":{"line":20,"column":0},"end":{"line":20,"column":58}},"8":{"start":{"line":22,"column":0},"end":{"line":24,"column":2}},"9":{"start":{"line":23,"column":4},"end":{"line":23,"column":49}},"10":{"start":{"line":26,"column":0},"end":{"line":28,"column":2}},"11":{"start":{"line":27,"column":4},"end":{"line":27,"column":45}},"12":{"start":{"line":30,"column":0},"end":{"line":30,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":234,"12":1},"b":{},"f":{"1":1,"2":267,"3":234},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":22},"end":{"line":20,"column":34}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":35},"end":{"line":28,"column":51}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":45},"end":{"line":32,"column":61}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":44}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":46}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":49}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":56}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":57}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":33}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":139,"12":1},"b":{},"f":{"1":1,"2":267,"3":139},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":23},"end":{"line":20,"column":35}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":36},"end":{"line":28,"column":52}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":46},"end":{"line":32,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":44}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":47}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":58}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":37,"12":1,"13":33,"14":1},"b":{},"f":{"1":1,"2":267,"3":37,"4":33},"fnMap":{"1":{"name":"(anonymous_1)","line":4,"loc":{"start":{"line":4,"column":31},"end":{"line":4,"column":43}}},"2":{"name":"(anonymous_2)","line":12,"loc":{"start":{"line":12,"column":44},"end":{"line":12,"column":60}}},"3":{"name":"(anonymous_3)","line":16,"loc":{"start":{"line":16,"column":54},"end":{"line":16,"column":70}}},"4":{"name":"(anonymous_4)","line":20,"loc":{"start":{"line":20,"column":51},"end":{"line":20,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"4":{"start":{"line":5,"column":4},"end":{"line":5,"column":53}},"5":{"start":{"line":6,"column":4},"end":{"line":6,"column":55}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":58}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":74}},"8":{"start":{"line":12,"column":0},"end":{"line":14,"column":2}},"9":{"start":{"line":13,"column":4},"end":{"line":13,"column":50}},"10":{"start":{"line":16,"column":0},"end":{"line":18,"column":2}},"11":{"start":{"line":17,"column":4},"end":{"line":17,"column":45}},"12":{"start":{"line":20,"column":0},"end":{"line":22,"column":2}},"13":{"start":{"line":21,"column":4},"end":{"line":21,"column":16}},"14":{"start":{"line":24,"column":0},"end":{"line":24,"column":42}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":28,"12":1,"13":35,"14":1},"b":{},"f":{"1":1,"2":267,"3":28,"4":35},"fnMap":{"1":{"name":"(anonymous_1)","line":4,"loc":{"start":{"line":4,"column":25},"end":{"line":4,"column":37}}},"2":{"name":"(anonymous_2)","line":12,"loc":{"start":{"line":12,"column":38},"end":{"line":12,"column":54}}},"3":{"name":"(anonymous_3)","line":16,"loc":{"start":{"line":16,"column":48},"end":{"line":16,"column":64}}},"4":{"name":"(anonymous_4)","line":20,"loc":{"start":{"line":20,"column":45},"end":{"line":20,"column":57}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"4":{"start":{"line":5,"column":4},"end":{"line":5,"column":47}},"5":{"start":{"line":6,"column":4},"end":{"line":6,"column":49}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":52}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":62}},"8":{"start":{"line":12,"column":0},"end":{"line":14,"column":2}},"9":{"start":{"line":13,"column":4},"end":{"line":13,"column":51}},"10":{"start":{"line":16,"column":0},"end":{"line":18,"column":2}},"11":{"start":{"line":17,"column":4},"end":{"line":17,"column":45}},"12":{"start":{"line":20,"column":0},"end":{"line":22,"column":2}},"13":{"start":{"line":21,"column":4},"end":{"line":21,"column":16}},"14":{"start":{"line":24,"column":0},"end":{"line":24,"column":36}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":28,"12":1},"b":{},"f":{"1":1,"2":267,"3":28},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":23},"end":{"line":20,"column":35}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":36},"end":{"line":28,"column":52}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":46},"end":{"line":32,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":45}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":47}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":56}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":0,"12":1},"b":{},"f":{"1":1,"2":267,"3":0},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":24},"end":{"line":20,"column":36}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":37},"end":{"line":28,"column":53}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":47},"end":{"line":32,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":45}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":51}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":60}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":59}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":38,"12":38,"13":38,"14":1},"b":{},"f":{"1":1,"2":267,"3":38},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":24},"end":{"line":20,"column":36}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":37},"end":{"line":28,"column":53}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":47},"end":{"line":32,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":46}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":51}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":60}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":61}},"10":{"start":{"line":32,"column":0},"end":{"line":36,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":47}},"12":{"start":{"line":34,"column":4},"end":{"line":34,"column":36}},"13":{"start":{"line":35,"column":4},"end":{"line":35,"column":47}},"14":{"start":{"line":38,"column":0},"end":{"line":38,"column":35}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":61,"8":61,"9":61,"10":61,"11":61,"12":61,"13":61,"14":1,"15":16,"16":50,"17":25,"18":1,"19":30,"20":1,"21":22,"22":1,"23":2,"24":1,"25":12,"26":12,"27":12,"28":12,"29":24,"30":4,"31":12,"32":12,"33":11,"34":9,"35":11,"36":21,"37":16,"38":16,"39":6,"40":10,"41":1,"42":2,"43":9,"44":11,"45":12,"46":12,"47":1,"48":8,"49":8,"50":8,"51":8,"52":1,"53":1,"54":1,"55":1,"56":0,"57":0,"58":1,"59":1,"60":1,"61":7,"62":7,"63":7,"64":8,"65":8,"66":12,"67":8,"68":8,"69":8,"70":8,"71":8,"72":8,"73":8,"74":25,"75":25,"76":8,"77":8,"78":8,"79":1,"80":3,"81":3,"82":3,"83":1,"84":3,"85":1,"86":3,"87":3,"88":3,"89":1,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":1,"98":48,"99":48,"100":48,"101":26,"102":22,"103":22,"104":22,"105":22,"106":1},"b":{"1":[35,26],"2":[30,22],"3":[12,1],"4":[12,2],"5":[11,1],"6":[9,2],"7":[6,10],"8":[16,11],"9":[1,9],"10":[8,1],"11":[8,2],"12":[1,7],"13":[0,1],"14":[1,7],"15":[12,13],"16":[3,0],"17":[1,2],"18":[0,0],"19":[0,0],"20":[26,22],"21":[22,0]},"f":{"1":61,"2":16,"3":50,"4":25,"5":30,"6":22,"7":2,"8":12,"9":24,"10":4,"11":21,"12":16,"13":2,"14":8,"15":1,"16":12,"17":25,"18":3,"19":3,"20":0,"21":0,"22":48},"fnMap":{"1":{"name":"(anonymous_1)","line":33,"loc":{"start":{"line":33,"column":20},"end":{"line":33,"column":72}}},"2":{"name":"(anonymous_2)","line":51,"loc":{"start":{"line":51,"column":32},"end":{"line":51,"column":59}}},"3":{"name":"(anonymous_3)","line":52,"loc":{"start":{"line":52,"column":25},"end":{"line":52,"column":38}}},"4":{"name":"(anonymous_4)","line":54,"loc":{"start":{"line":54,"column":11},"end":{"line":54,"column":24}}},"5":{"name":"(anonymous_5)","line":66,"loc":{"start":{"line":66,"column":38},"end":{"line":66,"column":54}}},"6":{"name":"(anonymous_6)","line":76,"loc":{"start":{"line":76,"column":35},"end":{"line":76,"column":47}}},"7":{"name":"(anonymous_7)","line":86,"loc":{"start":{"line":86,"column":36},"end":{"line":86,"column":48}}},"8":{"name":"(anonymous_8)","line":97,"loc":{"start":{"line":97,"column":33},"end":{"line":97,"column":52}}},"9":{"name":"(anonymous_9)","line":103,"loc":{"start":{"line":103,"column":36},"end":{"line":103,"column":49}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":15},"end":{"line":105,"column":28}}},"11":{"name":"(anonymous_11)","line":118,"loc":{"start":{"line":118,"column":48},"end":{"line":118,"column":61}}},"12":{"name":"(anonymous_12)","line":120,"loc":{"start":{"line":120,"column":15},"end":{"line":120,"column":28}}},"13":{"name":"(anonymous_13)","line":127,"loc":{"start":{"line":127,"column":33},"end":{"line":127,"column":46}}},"14":{"name":"(anonymous_14)","line":149,"loc":{"start":{"line":149,"column":33},"end":{"line":149,"column":49}}},"15":{"name":"(anonymous_15)","line":158,"loc":{"start":{"line":158,"column":38},"end":{"line":158,"column":51}}},"16":{"name":"(anonymous_16)","line":179,"loc":{"start":{"line":179,"column":36},"end":{"line":179,"column":54}}},"17":{"name":"(anonymous_17)","line":189,"loc":{"start":{"line":189,"column":40},"end":{"line":189,"column":64}}},"18":{"name":"(anonymous_18)","line":208,"loc":{"start":{"line":208,"column":34},"end":{"line":208,"column":63}}},"19":{"name":"(anonymous_19)","line":233,"loc":{"start":{"line":233,"column":34},"end":{"line":233,"column":63}}},"20":{"name":"(anonymous_20)","line":260,"loc":{"start":{"line":260,"column":40},"end":{"line":260,"column":67}}},"21":{"name":"(anonymous_21)","line":268,"loc":{"start":{"line":268,"column":11},"end":{"line":268,"column":32}}},"22":{"name":"(anonymous_22)","line":289,"loc":{"start":{"line":289,"column":43},"end":{"line":289,"column":63}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":41}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":41}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":36}},"5":{"start":{"line":28,"column":0},"end":{"line":28,"column":45}},"6":{"start":{"line":33,"column":0},"end":{"line":41,"column":2}},"7":{"start":{"line":34,"column":4},"end":{"line":34,"column":42}},"8":{"start":{"line":35,"column":4},"end":{"line":35,"column":28}},"9":{"start":{"line":36,"column":4},"end":{"line":36,"column":22}},"10":{"start":{"line":37,"column":4},"end":{"line":37,"column":70}},"11":{"start":{"line":38,"column":4},"end":{"line":38,"column":31}},"12":{"start":{"line":39,"column":4},"end":{"line":39,"column":37}},"13":{"start":{"line":40,"column":4},"end":{"line":40,"column":34}},"14":{"start":{"line":51,"column":0},"end":{"line":57,"column":2}},"15":{"start":{"line":52,"column":4},"end":{"line":56,"column":7}},"16":{"start":{"line":53,"column":8},"end":{"line":53,"column":37}},"17":{"start":{"line":55,"column":8},"end":{"line":55,"column":22}},"18":{"start":{"line":66,"column":0},"end":{"line":68,"column":2}},"19":{"start":{"line":67,"column":4},"end":{"line":67,"column":56}},"20":{"start":{"line":76,"column":0},"end":{"line":78,"column":2}},"21":{"start":{"line":77,"column":4},"end":{"line":77,"column":45}},"22":{"start":{"line":86,"column":0},"end":{"line":88,"column":2}},"23":{"start":{"line":87,"column":4},"end":{"line":87,"column":28}},"24":{"start":{"line":97,"column":0},"end":{"line":140,"column":2}},"25":{"start":{"line":98,"column":4},"end":{"line":98,"column":28}},"26":{"start":{"line":99,"column":4},"end":{"line":99,"column":35}},"27":{"start":{"line":100,"column":4},"end":{"line":100,"column":20}},"28":{"start":{"line":103,"column":4},"end":{"line":107,"column":7}},"29":{"start":{"line":104,"column":8},"end":{"line":104,"column":40}},"30":{"start":{"line":106,"column":8},"end":{"line":106,"column":69}},"31":{"start":{"line":109,"column":4},"end":{"line":109,"column":23}},"32":{"start":{"line":112,"column":4},"end":{"line":135,"column":5}},"33":{"start":{"line":114,"column":8},"end":{"line":116,"column":9}},"34":{"start":{"line":115,"column":12},"end":{"line":115,"column":56}},"35":{"start":{"line":118,"column":8},"end":{"line":132,"column":11}},"36":{"start":{"line":119,"column":12},"end":{"line":119,"column":38}},"37":{"start":{"line":121,"column":12},"end":{"line":121,"column":40}},"38":{"start":{"line":122,"column":12},"end":{"line":124,"column":13}},"39":{"start":{"line":123,"column":16},"end":{"line":123,"column":28}},"40":{"start":{"line":126,"column":12},"end":{"line":130,"column":13}},"41":{"start":{"line":127,"column":16},"end":{"line":129,"column":19}},"42":{"start":{"line":128,"column":20},"end":{"line":128,"column":63}},"43":{"start":{"line":131,"column":12},"end":{"line":131,"column":59}},"44":{"start":{"line":134,"column":8},"end":{"line":134,"column":60}},"45":{"start":{"line":137,"column":4},"end":{"line":137,"column":35}},"46":{"start":{"line":139,"column":4},"end":{"line":139,"column":18}},"47":{"start":{"line":149,"column":0},"end":{"line":198,"column":2}},"48":{"start":{"line":150,"column":4},"end":{"line":150,"column":41}},"49":{"start":{"line":151,"column":4},"end":{"line":151,"column":32}},"50":{"start":{"line":152,"column":4},"end":{"line":152,"column":36}},"51":{"start":{"line":155,"column":4},"end":{"line":176,"column":5}},"52":{"start":{"line":157,"column":8},"end":{"line":157,"column":49}},"53":{"start":{"line":158,"column":8},"end":{"line":160,"column":14}},"54":{"start":{"line":159,"column":12},"end":{"line":159,"column":69}},"55":{"start":{"line":162,"column":8},"end":{"line":165,"column":9}},"56":{"start":{"line":163,"column":12},"end":{"line":163,"column":54}},"57":{"start":{"line":164,"column":12},"end":{"line":164,"column":24}},"58":{"start":{"line":167,"column":8},"end":{"line":167,"column":48}},"59":{"start":{"line":168,"column":8},"end":{"line":168,"column":30}},"60":{"start":{"line":169,"column":8},"end":{"line":169,"column":36}},"61":{"start":{"line":173,"column":8},"end":{"line":173,"column":26}},"62":{"start":{"line":174,"column":8},"end":{"line":174,"column":30}},"63":{"start":{"line":175,"column":8},"end":{"line":175,"column":36}},"64":{"start":{"line":178,"column":4},"end":{"line":178,"column":67}},"65":{"start":{"line":179,"column":4},"end":{"line":179,"column":92}},"66":{"start":{"line":179,"column":56},"end":{"line":179,"column":79}},"67":{"start":{"line":180,"column":4},"end":{"line":180,"column":82}},"68":{"start":{"line":182,"column":4},"end":{"line":182,"column":44}},"69":{"start":{"line":183,"column":4},"end":{"line":183,"column":89}},"70":{"start":{"line":185,"column":4},"end":{"line":185,"column":53}},"71":{"start":{"line":186,"column":4},"end":{"line":186,"column":42}},"72":{"start":{"line":187,"column":4},"end":{"line":187,"column":34}},"73":{"start":{"line":189,"column":4},"end":{"line":192,"column":11}},"74":{"start":{"line":190,"column":8},"end":{"line":190,"column":95}},"75":{"start":{"line":191,"column":8},"end":{"line":191,"column":19}},"76":{"start":{"line":194,"column":4},"end":{"line":194,"column":23}},"77":{"start":{"line":195,"column":4},"end":{"line":195,"column":25}},"78":{"start":{"line":197,"column":4},"end":{"line":197,"column":18}},"79":{"start":{"line":208,"column":0},"end":{"line":223,"column":2}},"80":{"start":{"line":210,"column":4},"end":{"line":216,"column":5}},"81":{"start":{"line":211,"column":8},"end":{"line":211,"column":51}},"82":{"start":{"line":213,"column":8},"end":{"line":215,"column":9}},"83":{"start":{"line":214,"column":12},"end":{"line":214,"column":27}},"84":{"start":{"line":218,"column":4},"end":{"line":222,"column":6}},"85":{"start":{"line":233,"column":0},"end":{"line":248,"column":2}},"86":{"start":{"line":235,"column":4},"end":{"line":235,"column":51}},"87":{"start":{"line":236,"column":4},"end":{"line":245,"column":7}},"88":{"start":{"line":247,"column":4},"end":{"line":247,"column":93}},"89":{"start":{"line":260,"column":0},"end":{"line":281,"column":2}},"90":{"start":{"line":262,"column":4},"end":{"line":262,"column":51}},"91":{"start":{"line":264,"column":4},"end":{"line":275,"column":5}},"92":{"start":{"line":265,"column":8},"end":{"line":274,"column":11}},"93":{"start":{"line":269,"column":12},"end":{"line":273,"column":13}},"94":{"start":{"line":270,"column":16},"end":{"line":270,"column":62}},"95":{"start":{"line":272,"column":16},"end":{"line":272,"column":37}},"96":{"start":{"line":277,"column":4},"end":{"line":280,"column":27}},"97":{"start":{"line":289,"column":0},"end":{"line":309,"column":2}},"98":{"start":{"line":290,"column":4},"end":{"line":290,"column":42}},"99":{"start":{"line":293,"column":4},"end":{"line":293,"column":58}},"100":{"start":{"line":296,"column":4},"end":{"line":307,"column":5}},"101":{"start":{"line":297,"column":8},"end":{"line":297,"column":37}},"102":{"start":{"line":302,"column":8},"end":{"line":302,"column":45}},"103":{"start":{"line":303,"column":8},"end":{"line":305,"column":9}},"104":{"start":{"line":304,"column":12},"end":{"line":304,"column":44}},"105":{"start":{"line":306,"column":8},"end":{"line":306,"column":83}},"106":{"start":{"line":311,"column":0},"end":{"line":311,"column":31}}},"branchMap":{"1":{"line":37,"type":"cond-expr","locations":[{"start":{"line":37,"column":31},"end":{"line":37,"column":62}},{"start":{"line":37,"column":65},"end":{"line":37,"column":69}}]},"2":{"line":67,"type":"binary-expr","locations":[{"start":{"line":67,"column":36},"end":{"line":67,"column":40}},{"start":{"line":67,"column":44},"end":{"line":67,"column":54}}]},"3":{"line":98,"type":"binary-expr","locations":[{"start":{"line":98,"column":14},"end":{"line":98,"column":21}},{"start":{"line":98,"column":25},"end":{"line":98,"column":27}}]},"4":{"line":99,"type":"binary-expr","locations":[{"start":{"line":99,"column":14},"end":{"line":99,"column":28}},{"start":{"line":99,"column":32},"end":{"line":99,"column":34}}]},"5":{"line":112,"type":"if","locations":[{"start":{"line":112,"column":4},"end":{"line":112,"column":4}},{"start":{"line":112,"column":4},"end":{"line":112,"column":4}}]},"6":{"line":114,"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":114,"column":8}},{"start":{"line":114,"column":8},"end":{"line":114,"column":8}}]},"7":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":12},"end":{"line":122,"column":12}},{"start":{"line":122,"column":12},"end":{"line":122,"column":12}}]},"8":{"line":122,"type":"binary-expr","locations":[{"start":{"line":122,"column":16},"end":{"line":122,"column":35}},{"start":{"line":122,"column":39},"end":{"line":122,"column":53}}]},"9":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":12},"end":{"line":126,"column":12}},{"start":{"line":126,"column":12},"end":{"line":126,"column":12}}]},"10":{"line":151,"type":"binary-expr","locations":[{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},{"start":{"line":151,"column":29},"end":{"line":151,"column":31}}]},"11":{"line":152,"type":"binary-expr","locations":[{"start":{"line":152,"column":18},"end":{"line":152,"column":29}},{"start":{"line":152,"column":33},"end":{"line":152,"column":35}}]},"12":{"line":155,"type":"if","locations":[{"start":{"line":155,"column":4},"end":{"line":155,"column":4}},{"start":{"line":155,"column":4},"end":{"line":155,"column":4}}]},"13":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":8},"end":{"line":162,"column":8}},{"start":{"line":162,"column":8},"end":{"line":162,"column":8}}]},"14":{"line":178,"type":"cond-expr","locations":[{"start":{"line":178,"column":32},"end":{"line":178,"column":43}},{"start":{"line":178,"column":46},"end":{"line":178,"column":66}}]},"15":{"line":190,"type":"cond-expr","locations":[{"start":{"line":190,"column":46},"end":{"line":190,"column":67}},{"start":{"line":190,"column":70},"end":{"line":190,"column":94}}]},"16":{"line":210,"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":4}},{"start":{"line":210,"column":4},"end":{"line":210,"column":4}}]},"17":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":8},"end":{"line":213,"column":8}},{"start":{"line":213,"column":8},"end":{"line":213,"column":8}}]},"18":{"line":264,"type":"if","locations":[{"start":{"line":264,"column":4},"end":{"line":264,"column":4}},{"start":{"line":264,"column":4},"end":{"line":264,"column":4}}]},"19":{"line":269,"type":"if","locations":[{"start":{"line":269,"column":12},"end":{"line":269,"column":12}},{"start":{"line":269,"column":12},"end":{"line":269,"column":12}}]},"20":{"line":296,"type":"if","locations":[{"start":{"line":296,"column":4},"end":{"line":296,"column":4}},{"start":{"line":296,"column":4},"end":{"line":296,"column":4}}]},"21":{"line":303,"type":"if","locations":[{"start":{"line":303,"column":8},"end":{"line":303,"column":8}},{"start":{"line":303,"column":8},"end":{"line":303,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js","s":{"1":1,"2":1,"3":1,"4":42,"5":2,"6":2,"7":2,"8":42},"b":{"1":[2,40],"2":[42,2],"3":[2,0],"4":[2,2]},"f":{"1":42},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":17},"end":{"line":26,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":36}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":37}},"3":{"start":{"line":26,"column":0},"end":{"line":37,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":32,"column":5}},"5":{"start":{"line":28,"column":8},"end":{"line":30,"column":9}},"6":{"start":{"line":29,"column":12},"end":{"line":29,"column":36}},"7":{"start":{"line":31,"column":8},"end":{"line":31,"column":46}},"8":{"start":{"line":34,"column":4},"end":{"line":36,"column":18}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":4}},{"start":{"line":27,"column":4},"end":{"line":27,"column":4}}]},"2":{"line":27,"type":"binary-expr","locations":[{"start":{"line":27,"column":8},"end":{"line":27,"column":15}},{"start":{"line":27,"column":19},"end":{"line":27,"column":45}}]},"3":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":8},"end":{"line":28,"column":8}},{"start":{"line":28,"column":8},"end":{"line":28,"column":8}}]},"4":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":12},"end":{"line":28,"column":28}},{"start":{"line":28,"column":32},"end":{"line":28,"column":59}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":68,"7":68,"8":94,"9":68,"10":42,"11":68,"12":68,"13":68,"14":1,"15":16,"16":4,"17":1,"18":8,"19":2,"20":1,"21":16,"22":16,"23":9,"24":16,"25":16,"26":16,"27":1,"28":16,"29":1,"30":9,"31":0,"32":9,"33":9,"34":9,"35":1,"36":8,"37":14,"38":8,"39":8,"40":8,"41":8,"42":7,"43":7,"44":1,"45":1,"46":1,"47":1,"48":5,"49":16,"50":5,"51":5,"52":5,"53":4,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":0,"62":1,"63":0,"64":0,"65":0,"66":1,"67":68,"68":1,"69":68,"70":1,"71":2,"72":2,"73":2,"74":2,"75":2,"76":1,"77":9,"78":9,"79":3,"80":6,"81":1,"82":68,"83":68,"84":68,"85":68,"86":68,"87":68,"88":68,"89":68,"90":67,"91":68,"92":1},"b":{"1":[4,12],"2":[2,6],"3":[8,4],"4":[9,7],"5":[16,9],"6":[0,9],"7":[9,0],"8":[9,0],"9":[7,1],"10":[4,1],"11":[1,0],"12":[2,0],"13":[3,6],"14":[67,1]},"f":{"1":68,"2":94,"3":42,"4":16,"5":8,"6":16,"7":16,"8":9,"9":8,"10":14,"11":1,"12":5,"13":16,"14":1,"15":0,"16":68,"17":68,"18":2,"19":9,"20":68},"fnMap":{"1":{"name":"(anonymous_1)","line":31,"loc":{"start":{"line":31,"column":23},"end":{"line":31,"column":53}}},"2":{"name":"(anonymous_2)","line":33,"loc":{"start":{"line":33,"column":39},"end":{"line":33,"column":52}}},"3":{"name":"(anonymous_3)","line":36,"loc":{"start":{"line":36,"column":41},"end":{"line":36,"column":54}}},"4":{"name":"(anonymous_4)","line":44,"loc":{"start":{"line":44,"column":45},"end":{"line":44,"column":61}}},"5":{"name":"(anonymous_5)","line":50,"loc":{"start":{"line":50,"column":49},"end":{"line":50,"column":65}}},"6":{"name":"(anonymous_6)","line":63,"loc":{"start":{"line":63,"column":39},"end":{"line":63,"column":55}}},"7":{"name":"(anonymous_7)","line":79,"loc":{"start":{"line":79,"column":39},"end":{"line":79,"column":51}}},"8":{"name":"(anonymous_8)","line":84,"loc":{"start":{"line":84,"column":42},"end":{"line":84,"column":60}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":34},"end":{"line":104,"column":46}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":60},"end":{"line":105,"column":73}}},"11":{"name":"(anonymous_11)","line":117,"loc":{"start":{"line":117,"column":42},"end":{"line":117,"column":67}}},"12":{"name":"(anonymous_12)","line":127,"loc":{"start":{"line":127,"column":45},"end":{"line":127,"column":57}}},"13":{"name":"(anonymous_13)","line":128,"loc":{"start":{"line":128,"column":60},"end":{"line":128,"column":73}}},"14":{"name":"(anonymous_14)","line":144,"loc":{"start":{"line":144,"column":41},"end":{"line":144,"column":53}}},"15":{"name":"(anonymous_15)","line":162,"loc":{"start":{"line":162,"column":37},"end":{"line":162,"column":49}}},"16":{"name":"(anonymous_16)","line":175,"loc":{"start":{"line":175,"column":41},"end":{"line":175,"column":53}}},"17":{"name":"(anonymous_17)","line":185,"loc":{"start":{"line":185,"column":38},"end":{"line":185,"column":50}}},"18":{"name":"(anonymous_18)","line":195,"loc":{"start":{"line":195,"column":37},"end":{"line":195,"column":49}}},"19":{"name":"(anonymous_19)","line":214,"loc":{"start":{"line":214,"column":37},"end":{"line":214,"column":49}}},"20":{"name":"(anonymous_20)","line":232,"loc":{"start":{"line":232,"column":46},"end":{"line":232,"column":66}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":41}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":36}},"5":{"start":{"line":31,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":20}},"7":{"start":{"line":33,"column":4},"end":{"line":35,"column":7}},"8":{"start":{"line":34,"column":8},"end":{"line":34,"column":22}},"9":{"start":{"line":36,"column":4},"end":{"line":38,"column":7}},"10":{"start":{"line":37,"column":8},"end":{"line":37,"column":22}},"11":{"start":{"line":39,"column":4},"end":{"line":39,"column":35}},"12":{"start":{"line":40,"column":4},"end":{"line":40,"column":49}},"13":{"start":{"line":41,"column":4},"end":{"line":41,"column":28}},"14":{"start":{"line":44,"column":0},"end":{"line":48,"column":2}},"15":{"start":{"line":45,"column":4},"end":{"line":47,"column":5}},"16":{"start":{"line":46,"column":8},"end":{"line":46,"column":26}},"17":{"start":{"line":50,"column":0},"end":{"line":54,"column":2}},"18":{"start":{"line":51,"column":4},"end":{"line":53,"column":5}},"19":{"start":{"line":52,"column":8},"end":{"line":52,"column":71}},"20":{"start":{"line":63,"column":0},"end":{"line":71,"column":2}},"21":{"start":{"line":64,"column":4},"end":{"line":64,"column":21}},"22":{"start":{"line":65,"column":4},"end":{"line":67,"column":5}},"23":{"start":{"line":66,"column":8},"end":{"line":66,"column":40}},"24":{"start":{"line":68,"column":4},"end":{"line":68,"column":31}},"25":{"start":{"line":69,"column":4},"end":{"line":69,"column":88}},"26":{"start":{"line":70,"column":4},"end":{"line":70,"column":19}},"27":{"start":{"line":79,"column":0},"end":{"line":81,"column":2}},"28":{"start":{"line":80,"column":4},"end":{"line":80,"column":40}},"29":{"start":{"line":84,"column":0},"end":{"line":92,"column":2}},"30":{"start":{"line":85,"column":4},"end":{"line":87,"column":5}},"31":{"start":{"line":86,"column":8},"end":{"line":86,"column":15}},"32":{"start":{"line":89,"column":4},"end":{"line":89,"column":59}},"33":{"start":{"line":90,"column":4},"end":{"line":90,"column":63}},"34":{"start":{"line":91,"column":4},"end":{"line":91,"column":52}},"35":{"start":{"line":104,"column":0},"end":{"line":120,"column":2}},"36":{"start":{"line":105,"column":4},"end":{"line":105,"column":101}},"37":{"start":{"line":105,"column":74},"end":{"line":105,"column":97}},"38":{"start":{"line":106,"column":4},"end":{"line":106,"column":46}},"39":{"start":{"line":107,"column":4},"end":{"line":107,"column":54}},"40":{"start":{"line":108,"column":4},"end":{"line":108,"column":39}},"41":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"42":{"start":{"line":112,"column":8},"end":{"line":112,"column":59}},"43":{"start":{"line":113,"column":8},"end":{"line":113,"column":41}},"44":{"start":{"line":116,"column":4},"end":{"line":116,"column":20}},"45":{"start":{"line":117,"column":4},"end":{"line":119,"column":7}},"46":{"start":{"line":118,"column":8},"end":{"line":118,"column":51}},"47":{"start":{"line":127,"column":0},"end":{"line":137,"column":2}},"48":{"start":{"line":128,"column":4},"end":{"line":128,"column":101}},"49":{"start":{"line":128,"column":74},"end":{"line":128,"column":97}},"50":{"start":{"line":129,"column":4},"end":{"line":129,"column":46}},"51":{"start":{"line":130,"column":4},"end":{"line":130,"column":39}},"52":{"start":{"line":132,"column":4},"end":{"line":134,"column":5}},"53":{"start":{"line":133,"column":8},"end":{"line":133,"column":50}},"54":{"start":{"line":136,"column":4},"end":{"line":136,"column":49}},"55":{"start":{"line":144,"column":0},"end":{"line":154,"column":2}},"56":{"start":{"line":145,"column":4},"end":{"line":145,"column":53}},"57":{"start":{"line":146,"column":4},"end":{"line":146,"column":46}},"58":{"start":{"line":147,"column":4},"end":{"line":147,"column":39}},"59":{"start":{"line":149,"column":4},"end":{"line":151,"column":5}},"60":{"start":{"line":150,"column":8},"end":{"line":150,"column":46}},"61":{"start":{"line":153,"column":4},"end":{"line":153,"column":45}},"62":{"start":{"line":162,"column":0},"end":{"line":167,"column":2}},"63":{"start":{"line":163,"column":4},"end":{"line":163,"column":53}},"64":{"start":{"line":164,"column":4},"end":{"line":164,"column":39}},"65":{"start":{"line":166,"column":4},"end":{"line":166,"column":24}},"66":{"start":{"line":175,"column":0},"end":{"line":177,"column":2}},"67":{"start":{"line":176,"column":4},"end":{"line":176,"column":48}},"68":{"start":{"line":185,"column":0},"end":{"line":187,"column":2}},"69":{"start":{"line":186,"column":4},"end":{"line":186,"column":45}},"70":{"start":{"line":195,"column":0},"end":{"line":207,"column":2}},"71":{"start":{"line":196,"column":4},"end":{"line":196,"column":53}},"72":{"start":{"line":197,"column":4},"end":{"line":197,"column":46}},"73":{"start":{"line":198,"column":4},"end":{"line":198,"column":39}},"74":{"start":{"line":199,"column":4},"end":{"line":199,"column":46}},"75":{"start":{"line":201,"column":4},"end":{"line":206,"column":6}},"76":{"start":{"line":214,"column":0},"end":{"line":224,"column":2}},"77":{"start":{"line":215,"column":4},"end":{"line":215,"column":38}},"78":{"start":{"line":218,"column":4},"end":{"line":220,"column":5}},"79":{"start":{"line":219,"column":8},"end":{"line":219,"column":87}},"80":{"start":{"line":223,"column":4},"end":{"line":223,"column":72}},"81":{"start":{"line":232,"column":0},"end":{"line":244,"column":2}},"82":{"start":{"line":233,"column":4},"end":{"line":233,"column":42}},"83":{"start":{"line":234,"column":4},"end":{"line":234,"column":46}},"84":{"start":{"line":235,"column":4},"end":{"line":235,"column":40}},"85":{"start":{"line":236,"column":4},"end":{"line":236,"column":62}},"86":{"start":{"line":237,"column":4},"end":{"line":237,"column":54}},"87":{"start":{"line":238,"column":4},"end":{"line":238,"column":46}},"88":{"start":{"line":239,"column":4},"end":{"line":239,"column":41}},"89":{"start":{"line":240,"column":4},"end":{"line":242,"column":5}},"90":{"start":{"line":241,"column":8},"end":{"line":241,"column":40}},"91":{"start":{"line":243,"column":4},"end":{"line":243,"column":53}},"92":{"start":{"line":246,"column":0},"end":{"line":246,"column":34}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":4},"end":{"line":45,"column":4}},{"start":{"line":45,"column":4},"end":{"line":45,"column":4}}]},"2":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"3":{"line":51,"type":"binary-expr","locations":[{"start":{"line":51,"column":8},"end":{"line":51,"column":45}},{"start":{"line":51,"column":49},"end":{"line":51,"column":86}}]},"4":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]},"5":{"line":65,"type":"binary-expr","locations":[{"start":{"line":65,"column":8},"end":{"line":65,"column":45}},{"start":{"line":65,"column":49},"end":{"line":65,"column":85}}]},"6":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":4},"end":{"line":85,"column":4}},{"start":{"line":85,"column":4},"end":{"line":85,"column":4}}]},"7":{"line":89,"type":"cond-expr","locations":[{"start":{"line":89,"column":34},"end":{"line":89,"column":49}},{"start":{"line":89,"column":52},"end":{"line":89,"column":58}}]},"8":{"line":91,"type":"cond-expr","locations":[{"start":{"line":91,"column":33},"end":{"line":91,"column":42}},{"start":{"line":91,"column":45},"end":{"line":91,"column":51}}]},"9":{"line":111,"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":111,"column":4}},{"start":{"line":111,"column":4},"end":{"line":111,"column":4}}]},"10":{"line":132,"type":"if","locations":[{"start":{"line":132,"column":4},"end":{"line":132,"column":4}},{"start":{"line":132,"column":4},"end":{"line":132,"column":4}}]},"11":{"line":149,"type":"if","locations":[{"start":{"line":149,"column":4},"end":{"line":149,"column":4}},{"start":{"line":149,"column":4},"end":{"line":149,"column":4}}]},"12":{"line":202,"type":"cond-expr","locations":[{"start":{"line":202,"column":33},"end":{"line":202,"column":43}},{"start":{"line":202,"column":46},"end":{"line":202,"column":67}}]},"13":{"line":218,"type":"if","locations":[{"start":{"line":218,"column":4},"end":{"line":218,"column":4}},{"start":{"line":218,"column":4},"end":{"line":218,"column":4}}]},"14":{"line":240,"type":"if","locations":[{"start":{"line":240,"column":4},"end":{"line":240,"column":4}},{"start":{"line":240,"column":4},"end":{"line":240,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":70}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":65}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":72}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":70}},"5":{"start":{"line":29,"column":0},"end":{"line":38,"column":2}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":0,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":0,"16":1,"17":1,"18":1,"19":1},"b":{"1":[0,1],"2":[0,1],"3":[1,0]},"f":{"1":1,"2":0,"3":0,"4":1},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":15},"end":{"line":35,"column":57}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":47},"end":{"line":50,"column":71}}},"3":{"name":"(anonymous_3)","line":65,"loc":{"start":{"line":65,"column":24},"end":{"line":65,"column":66}}},"4":{"name":"(anonymous_4)","line":83,"loc":{"start":{"line":83,"column":14},"end":{"line":83,"column":64}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":29}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":61}},"3":{"start":{"line":35,"column":0},"end":{"line":54,"column":2}},"4":{"start":{"line":36,"column":4},"end":{"line":36,"column":28}},"5":{"start":{"line":37,"column":4},"end":{"line":39,"column":5}},"6":{"start":{"line":38,"column":8},"end":{"line":38,"column":48}},"7":{"start":{"line":41,"column":4},"end":{"line":43,"column":5}},"8":{"start":{"line":42,"column":8},"end":{"line":42,"column":77}},"9":{"start":{"line":45,"column":4},"end":{"line":48,"column":5}},"10":{"start":{"line":46,"column":8},"end":{"line":46,"column":65}},"11":{"start":{"line":47,"column":8},"end":{"line":47,"column":65}},"12":{"start":{"line":50,"column":4},"end":{"line":52,"column":7}},"13":{"start":{"line":51,"column":8},"end":{"line":51,"column":75}},"14":{"start":{"line":65,"column":0},"end":{"line":71,"column":2}},"15":{"start":{"line":66,"column":4},"end":{"line":70,"column":17}},"16":{"start":{"line":83,"column":0},"end":{"line":89,"column":2}},"17":{"start":{"line":84,"column":4},"end":{"line":84,"column":26}},"18":{"start":{"line":85,"column":4},"end":{"line":88,"column":17}},"19":{"start":{"line":91,"column":0},"end":{"line":91,"column":26}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":4}},{"start":{"line":37,"column":4},"end":{"line":37,"column":4}}]},"2":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":4}},{"start":{"line":41,"column":4},"end":{"line":41,"column":4}}]},"3":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":4},"end":{"line":45,"column":4}},{"start":{"line":45,"column":4},"end":{"line":45,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js","s":{"1":1,"2":1,"3":154,"4":154,"5":154,"6":616,"7":616,"8":1,"9":154,"10":154,"11":154,"12":154,"13":154,"14":1},"b":{},"f":{"1":154,"2":616,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":25,"loc":{"start":{"line":25,"column":9},"end":{"line":25,"column":25}}},"2":{"name":"(anonymous_2)","line":30,"loc":{"start":{"line":30,"column":22},"end":{"line":30,"column":39}}},"3":{"name":"(anonymous_3)","line":36,"loc":{"start":{"line":36,"column":14},"end":{"line":36,"column":26}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":34}},"2":{"start":{"line":25,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":26,"column":4},"end":{"line":26,"column":48}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":20}},"5":{"start":{"line":30,"column":4},"end":{"line":33,"column":7}},"6":{"start":{"line":31,"column":8},"end":{"line":31,"column":36}},"7":{"start":{"line":32,"column":8},"end":{"line":32,"column":55}},"8":{"start":{"line":36,"column":0},"end":{"line":64,"column":2}},"9":{"start":{"line":37,"column":4},"end":{"line":41,"column":7}},"10":{"start":{"line":43,"column":4},"end":{"line":47,"column":7}},"11":{"start":{"line":49,"column":4},"end":{"line":53,"column":7}},"12":{"start":{"line":55,"column":4},"end":{"line":59,"column":7}},"13":{"start":{"line":61,"column":4},"end":{"line":63,"column":6}},"14":{"start":{"line":66,"column":0},"end":{"line":66,"column":20}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js","s":{"1":1,"2":1,"3":1,"4":1,"5":154,"6":154,"7":154,"8":924,"9":924,"10":1,"11":154,"12":154,"13":154,"14":154,"15":154,"16":154,"17":154,"18":154,"19":1},"b":{},"f":{"1":154,"2":924,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":28,"loc":{"start":{"line":28,"column":10},"end":{"line":28,"column":26}}},"2":{"name":"(anonymous_2)","line":33,"loc":{"start":{"line":33,"column":22},"end":{"line":33,"column":39}}},"3":{"name":"(anonymous_3)","line":40,"loc":{"start":{"line":40,"column":14},"end":{"line":40,"column":26}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":34}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":42}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":48}},"4":{"start":{"line":28,"column":0},"end":{"line":37,"column":2}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":48}},"6":{"start":{"line":31,"column":4},"end":{"line":31,"column":20}},"7":{"start":{"line":33,"column":4},"end":{"line":36,"column":7}},"8":{"start":{"line":34,"column":8},"end":{"line":34,"column":36}},"9":{"start":{"line":35,"column":8},"end":{"line":35,"column":55}},"10":{"start":{"line":40,"column":0},"end":{"line":103,"column":2}},"11":{"start":{"line":42,"column":4},"end":{"line":47,"column":7}},"12":{"start":{"line":49,"column":4},"end":{"line":53,"column":7}},"13":{"start":{"line":55,"column":4},"end":{"line":59,"column":7}},"14":{"start":{"line":61,"column":4},"end":{"line":65,"column":7}},"15":{"start":{"line":67,"column":4},"end":{"line":71,"column":7}},"16":{"start":{"line":73,"column":4},"end":{"line":79,"column":7}},"17":{"start":{"line":82,"column":4},"end":{"line":93,"column":7}},"18":{"start":{"line":95,"column":4},"end":{"line":102,"column":6}},"19":{"start":{"line":105,"column":0},"end":{"line":105,"column":21}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js","s":{"1":1,"2":1,"3":1,"4":154,"5":154,"6":154,"7":308,"8":308,"9":1,"10":154,"11":1},"b":{},"f":{"1":154,"2":308,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":10},"end":{"line":26,"column":26}}},"2":{"name":"(anonymous_2)","line":31,"loc":{"start":{"line":31,"column":25},"end":{"line":31,"column":37}}},"3":{"name":"(anonymous_3)","line":38,"loc":{"start":{"line":38,"column":17},"end":{"line":38,"column":29}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":26,"column":0},"end":{"line":35,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":48}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":20}},"6":{"start":{"line":31,"column":4},"end":{"line":34,"column":7}},"7":{"start":{"line":32,"column":8},"end":{"line":32,"column":31}},"8":{"start":{"line":33,"column":8},"end":{"line":33,"column":50}},"9":{"start":{"line":38,"column":0},"end":{"line":50,"column":2}},"10":{"start":{"line":39,"column":4},"end":{"line":49,"column":6}},"11":{"start":{"line":52,"column":0},"end":{"line":52,"column":21}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js","s":{"1":1,"2":167,"3":167,"4":1},"b":{},"f":{"1":167},"fnMap":{"1":{"name":"(anonymous_1)","line":3,"loc":{"start":{"line":3,"column":15},"end":{"line":3,"column":27}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":6,"column":2}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":33}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":36}},"4":{"start":{"line":8,"column":0},"end":{"line":8,"column":26}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":154,"7":157,"8":157,"9":1,"10":1,"11":1,"12":156,"13":157,"14":2,"15":2,"16":2,"17":157,"18":156,"19":618,"20":618,"21":154,"22":154,"23":154,"24":154,"25":154,"26":1},"b":{"1":[1,156],"2":[1,0],"3":[2,155],"4":[156,1]},"f":{"1":154,"2":157,"3":2,"4":618},"fnMap":{"1":{"name":"(anonymous_1)","line":8,"loc":{"start":{"line":8,"column":13},"end":{"line":8,"column":29}}},"2":{"name":"(anonymous_2)","line":10,"loc":{"start":{"line":10,"column":13},"end":{"line":10,"column":34}}},"3":{"name":"(anonymous_3)","line":23,"loc":{"start":{"line":23,"column":38},"end":{"line":23,"column":56}}},"4":{"name":"(anonymous_4)","line":30,"loc":{"start":{"line":30,"column":41},"end":{"line":30,"column":61}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":40}},"3":{"start":{"line":3,"column":0},"end":{"line":3,"column":33}},"4":{"start":{"line":4,"column":0},"end":{"line":4,"column":37}},"5":{"start":{"line":8,"column":0},"end":{"line":43,"column":2}},"6":{"start":{"line":10,"column":4},"end":{"line":35,"column":6}},"7":{"start":{"line":12,"column":8},"end":{"line":12,"column":27}},"8":{"start":{"line":13,"column":8},"end":{"line":20,"column":9}},"9":{"start":{"line":14,"column":12},"end":{"line":16,"column":13}},"10":{"start":{"line":15,"column":16},"end":{"line":15,"column":46}},"11":{"start":{"line":17,"column":12},"end":{"line":17,"column":54}},"12":{"start":{"line":19,"column":12},"end":{"line":19,"column":34}},"13":{"start":{"line":22,"column":8},"end":{"line":27,"column":9}},"14":{"start":{"line":23,"column":12},"end":{"line":26,"column":15}},"15":{"start":{"line":24,"column":16},"end":{"line":24,"column":54}},"16":{"start":{"line":25,"column":16},"end":{"line":25,"column":63}},"17":{"start":{"line":29,"column":8},"end":{"line":34,"column":9}},"18":{"start":{"line":30,"column":12},"end":{"line":33,"column":15}},"19":{"start":{"line":31,"column":16},"end":{"line":31,"column":56}},"20":{"start":{"line":32,"column":16},"end":{"line":32,"column":65}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":31}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":21}},"23":{"start":{"line":39,"column":4},"end":{"line":39,"column":23}},"24":{"start":{"line":40,"column":4},"end":{"line":40,"column":27}},"25":{"start":{"line":42,"column":4},"end":{"line":42,"column":14}},"26":{"start":{"line":47,"column":0},"end":{"line":47,"column":24}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":8},"end":{"line":13,"column":8}},{"start":{"line":13,"column":8},"end":{"line":13,"column":8}}]},"2":{"line":14,"type":"if","locations":[{"start":{"line":14,"column":12},"end":{"line":14,"column":12}},{"start":{"line":14,"column":12},"end":{"line":14,"column":12}}]},"3":{"line":22,"type":"if","locations":[{"start":{"line":22,"column":8},"end":{"line":22,"column":8}},{"start":{"line":22,"column":8},"end":{"line":22,"column":8}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":29,"column":8}},{"start":{"line":29,"column":8},"end":{"line":29,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js","s":{"1":1,"2":1,"3":1,"4":4,"5":4,"6":1,"7":8,"8":1,"9":4,"10":4,"11":4,"12":4,"13":8,"14":8,"15":8,"16":2,"17":6,"18":1},"b":{"1":[4,0],"2":[8,0],"3":[8,0],"4":[2,6],"5":[6,0]},"f":{"1":4,"2":8,"3":4,"4":4,"5":8,"6":8},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":12},"end":{"line":26,"column":28}}},"2":{"name":"(anonymous_2)","line":37,"loc":{"start":{"line":37,"column":22},"end":{"line":37,"column":41}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":26},"end":{"line":46,"column":38}}},"4":{"name":"(anonymous_4)","line":48,"loc":{"start":{"line":48,"column":44},"end":{"line":48,"column":68}}},"5":{"name":"(anonymous_5)","line":50,"loc":{"start":{"line":50,"column":21},"end":{"line":50,"column":47}}},"6":{"name":"(anonymous_6)","line":52,"loc":{"start":{"line":52,"column":19},"end":{"line":52,"column":44}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":35}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":29,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":47}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":23}},"6":{"start":{"line":37,"column":0},"end":{"line":39,"column":2}},"7":{"start":{"line":38,"column":4},"end":{"line":38,"column":32}},"8":{"start":{"line":46,"column":0},"end":{"line":63,"column":2}},"9":{"start":{"line":47,"column":4},"end":{"line":47,"column":33}},"10":{"start":{"line":48,"column":4},"end":{"line":62,"column":7}},"11":{"start":{"line":49,"column":8},"end":{"line":49,"column":32}},"12":{"start":{"line":50,"column":8},"end":{"line":61,"column":11}},"13":{"start":{"line":51,"column":12},"end":{"line":51,"column":40}},"14":{"start":{"line":53,"column":12},"end":{"line":60,"column":13}},"15":{"start":{"line":55,"column":16},"end":{"line":57,"column":17}},"16":{"start":{"line":56,"column":20},"end":{"line":56,"column":84}},"17":{"start":{"line":59,"column":16},"end":{"line":59,"column":129}},"18":{"start":{"line":65,"column":0},"end":{"line":65,"column":23}}},"branchMap":{"1":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":18},"end":{"line":49,"column":25}},{"start":{"line":49,"column":29},"end":{"line":49,"column":31}}]},"2":{"line":51,"type":"binary-expr","locations":[{"start":{"line":51,"column":19},"end":{"line":51,"column":33}},{"start":{"line":51,"column":37},"end":{"line":51,"column":39}}]},"3":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":12},"end":{"line":53,"column":12}},{"start":{"line":53,"column":12},"end":{"line":53,"column":12}}]},"4":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":16},"end":{"line":55,"column":16}},{"start":{"line":55,"column":16},"end":{"line":55,"column":16}}]},"5":{"line":59,"type":"cond-expr","locations":[{"start":{"line":59,"column":73},"end":{"line":59,"column":110}},{"start":{"line":59,"column":113},"end":{"line":59,"column":126}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js","s":{"1":2,"2":2,"3":2,"4":0,"5":2,"6":0,"7":2,"8":2,"9":3,"10":2,"11":3,"12":3,"13":3,"14":3,"15":2,"16":2,"17":2,"18":2,"19":0,"20":2,"21":2,"22":2,"23":0,"24":2,"25":2,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":0,"34":1,"35":1,"36":1,"37":0,"38":2,"39":1,"40":1,"41":1,"42":0,"43":2},"b":{"1":[0,2],"2":[2,0],"3":[0,2],"4":[2,0],"5":[3,3],"6":[1,0]},"f":{"1":3,"2":3,"3":2,"4":1,"5":1,"6":1},"fnMap":{"1":{"name":"(anonymous_1)","line":48,"loc":{"start":{"line":48,"column":19},"end":{"line":48,"column":35}}},"2":{"name":"(anonymous_2)","line":59,"loc":{"start":{"line":59,"column":40},"end":{"line":59,"column":57}}},"3":{"name":"(anonymous_3)","line":73,"loc":{"start":{"line":73,"column":30},"end":{"line":73,"column":49}}},"4":{"name":"(anonymous_4)","line":100,"loc":{"start":{"line":100,"column":35},"end":{"line":100,"column":64}}},"5":{"name":"(anonymous_5)","line":103,"loc":{"start":{"line":103,"column":33},"end":{"line":103,"column":44}}},"6":{"name":"(anonymous_6)","line":131,"loc":{"start":{"line":131,"column":37},"end":{"line":131,"column":48}}}},"statementMap":{"1":{"start":{"line":27,"column":0},"end":{"line":27,"column":33}},"2":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"3":{"start":{"line":33,"column":0},"end":{"line":43,"column":1}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":66}},"5":{"start":{"line":37,"column":7},"end":{"line":43,"column":1}},"6":{"start":{"line":38,"column":4},"end":{"line":38,"column":43}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":62}},"8":{"start":{"line":48,"column":0},"end":{"line":50,"column":2}},"9":{"start":{"line":49,"column":4},"end":{"line":49,"column":48}},"10":{"start":{"line":59,"column":0},"end":{"line":64,"column":2}},"11":{"start":{"line":60,"column":4},"end":{"line":60,"column":39}},"12":{"start":{"line":61,"column":4},"end":{"line":61,"column":43}},"13":{"start":{"line":62,"column":4},"end":{"line":62,"column":64}},"14":{"start":{"line":63,"column":4},"end":{"line":63,"column":19}},"15":{"start":{"line":73,"column":0},"end":{"line":91,"column":2}},"16":{"start":{"line":74,"column":4},"end":{"line":74,"column":45}},"17":{"start":{"line":76,"column":4},"end":{"line":80,"column":5}},"18":{"start":{"line":77,"column":8},"end":{"line":77,"column":46}},"19":{"start":{"line":79,"column":8},"end":{"line":79,"column":50}},"20":{"start":{"line":82,"column":4},"end":{"line":82,"column":38}},"21":{"start":{"line":84,"column":4},"end":{"line":88,"column":5}},"22":{"start":{"line":85,"column":8},"end":{"line":85,"column":36}},"23":{"start":{"line":87,"column":8},"end":{"line":87,"column":59}},"24":{"start":{"line":90,"column":4},"end":{"line":90,"column":18}},"25":{"start":{"line":100,"column":0},"end":{"line":123,"column":2}},"26":{"start":{"line":101,"column":4},"end":{"line":101,"column":44}},"27":{"start":{"line":103,"column":4},"end":{"line":116,"column":6}},"28":{"start":{"line":104,"column":8},"end":{"line":115,"column":9}},"29":{"start":{"line":105,"column":12},"end":{"line":105,"column":46}},"30":{"start":{"line":106,"column":12},"end":{"line":106,"column":29}},"31":{"start":{"line":108,"column":12},"end":{"line":112,"column":13}},"32":{"start":{"line":109,"column":16},"end":{"line":109,"column":44}},"33":{"start":{"line":111,"column":16},"end":{"line":111,"column":69}},"34":{"start":{"line":114,"column":12},"end":{"line":114,"column":36}},"35":{"start":{"line":118,"column":4},"end":{"line":122,"column":5}},"36":{"start":{"line":119,"column":8},"end":{"line":119,"column":46}},"37":{"start":{"line":121,"column":8},"end":{"line":121,"column":54}},"38":{"start":{"line":131,"column":0},"end":{"line":143,"column":2}},"39":{"start":{"line":132,"column":4},"end":{"line":142,"column":5}},"40":{"start":{"line":133,"column":8},"end":{"line":138,"column":11}},"41":{"start":{"line":139,"column":8},"end":{"line":139,"column":20}},"42":{"start":{"line":141,"column":8},"end":{"line":141,"column":21}},"43":{"start":{"line":145,"column":0},"end":{"line":145,"column":30}}},"branchMap":{"1":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},{"start":{"line":33,"column":0},"end":{"line":33,"column":0}}]},"2":{"line":33,"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":33}},{"start":{"line":33,"column":37},"end":{"line":33,"column":52}}]},"3":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":7},"end":{"line":37,"column":7}},{"start":{"line":37,"column":7},"end":{"line":37,"column":7}}]},"4":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":11},"end":{"line":37,"column":40}},{"start":{"line":37,"column":44},"end":{"line":37,"column":65}}]},"5":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":16},"end":{"line":49,"column":20}},{"start":{"line":49,"column":24},"end":{"line":49,"column":47}}]},"6":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":8}},{"start":{"line":104,"column":8},"end":{"line":104,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js","s":{"1":2,"2":2,"3":2,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5,"10":5,"11":2,"12":2,"13":2,"14":0,"15":0,"16":0,"17":2,"18":2,"19":0,"20":0,"21":0,"22":2,"23":1,"24":1,"25":2,"26":5,"27":5,"28":0,"29":5,"30":0,"31":5,"32":0,"33":2,"34":2,"35":2,"36":2,"37":2,"38":0,"39":2,"40":2,"41":2,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":1,"55":1,"56":1,"57":1,"58":2,"59":0,"60":0,"61":0,"62":0,"63":2,"64":3,"65":3,"66":2,"67":3,"68":2,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":0,"77":1,"78":0,"79":2,"80":1,"81":1,"82":1,"83":1,"84":2,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":2,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":2,"102":0,"103":0,"104":0,"105":0,"106":0,"107":2,"108":0,"109":0,"110":0,"111":0,"112":0,"113":2},"b":{"1":[0,2],"2":[0,0],"3":[0,2],"4":[2,0],"5":[0,0],"6":[1,1],"7":[0,2],"8":[2,0],"9":[1,0],"10":[1,0],"11":[0,0],"12":[2,1],"13":[1,0],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0]},"f":{"1":5,"2":2,"3":2,"4":0,"5":0,"6":5,"7":0,"8":0,"9":0,"10":2,"11":2,"12":0,"13":1,"14":0,"15":3,"16":1,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0},"fnMap":{"1":{"name":"(anonymous_1)","line":29,"loc":{"start":{"line":29,"column":18},"end":{"line":29,"column":39}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":31},"end":{"line":41,"column":46}}},"3":{"name":"(anonymous_3)","line":44,"loc":{"start":{"line":44,"column":54},"end":{"line":44,"column":70}}},"4":{"name":"(anonymous_4)","line":50,"loc":{"start":{"line":50,"column":31},"end":{"line":50,"column":45}}},"5":{"name":"(anonymous_5)","line":60,"loc":{"start":{"line":60,"column":52},"end":{"line":60,"column":70}}},"6":{"name":"(anonymous_6)","line":79,"loc":{"start":{"line":79,"column":41},"end":{"line":79,"column":51}}},"7":{"name":"(anonymous_7)","line":82,"loc":{"start":{"line":82,"column":32},"end":{"line":82,"column":43}}},"8":{"name":"(anonymous_8)","line":86,"loc":{"start":{"line":86,"column":30},"end":{"line":86,"column":40}}},"9":{"name":"(anonymous_9)","line":90,"loc":{"start":{"line":90,"column":34},"end":{"line":90,"column":44}}},"10":{"name":"(anonymous_10)","line":101,"loc":{"start":{"line":101,"column":39},"end":{"line":101,"column":54}}},"11":{"name":"(anonymous_11)","line":113,"loc":{"start":{"line":113,"column":26},"end":{"line":113,"column":40}}},"12":{"name":"(anonymous_12)","line":130,"loc":{"start":{"line":130,"column":48},"end":{"line":130,"column":58}}},"13":{"name":"(anonymous_13)","line":156,"loc":{"start":{"line":156,"column":45},"end":{"line":156,"column":73}}},"14":{"name":"(anonymous_14)","line":169,"loc":{"start":{"line":169,"column":33},"end":{"line":169,"column":44}}},"15":{"name":"(anonymous_15)","line":184,"loc":{"start":{"line":184,"column":36},"end":{"line":184,"column":47}}},"16":{"name":"(anonymous_16)","line":194,"loc":{"start":{"line":194,"column":29},"end":{"line":194,"column":48}}},"17":{"name":"(anonymous_17)","line":218,"loc":{"start":{"line":218,"column":34},"end":{"line":218,"column":63}}},"18":{"name":"(anonymous_18)","line":235,"loc":{"start":{"line":235,"column":27},"end":{"line":235,"column":53}}},"19":{"name":"(anonymous_19)","line":258,"loc":{"start":{"line":258,"column":39},"end":{"line":258,"column":65}}},"20":{"name":"(anonymous_20)","line":263,"loc":{"start":{"line":263,"column":47},"end":{"line":263,"column":66}}},"21":{"name":"(anonymous_21)","line":281,"loc":{"start":{"line":281,"column":43},"end":{"line":281,"column":59}}},"22":{"name":"(anonymous_22)","line":298,"loc":{"start":{"line":298,"column":30},"end":{"line":298,"column":50}}}},"statementMap":{"1":{"start":{"line":25,"column":0},"end":{"line":25,"column":38}},"2":{"start":{"line":26,"column":0},"end":{"line":26,"column":33}},"3":{"start":{"line":29,"column":0},"end":{"line":72,"column":2}},"4":{"start":{"line":30,"column":4},"end":{"line":30,"column":21}},"5":{"start":{"line":31,"column":4},"end":{"line":31,"column":32}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":36}},"7":{"start":{"line":33,"column":4},"end":{"line":33,"column":21}},"8":{"start":{"line":35,"column":4},"end":{"line":35,"column":53}},"9":{"start":{"line":37,"column":4},"end":{"line":37,"column":28}},"10":{"start":{"line":41,"column":4},"end":{"line":71,"column":7}},"11":{"start":{"line":44,"column":8},"end":{"line":70,"column":11}},"12":{"start":{"line":46,"column":12},"end":{"line":46,"column":26}},"13":{"start":{"line":49,"column":12},"end":{"line":56,"column":13}},"14":{"start":{"line":50,"column":16},"end":{"line":53,"column":19}},"15":{"start":{"line":51,"column":20},"end":{"line":52,"column":37}},"16":{"start":{"line":52,"column":24},"end":{"line":52,"column":37}},"17":{"start":{"line":55,"column":16},"end":{"line":55,"column":31}},"18":{"start":{"line":59,"column":12},"end":{"line":69,"column":13}},"19":{"start":{"line":60,"column":16},"end":{"line":63,"column":19}},"20":{"start":{"line":61,"column":20},"end":{"line":62,"column":47}},"21":{"start":{"line":62,"column":24},"end":{"line":62,"column":47}},"22":{"start":{"line":66,"column":19},"end":{"line":69,"column":13}},"23":{"start":{"line":67,"column":16},"end":{"line":67,"column":58}},"24":{"start":{"line":68,"column":16},"end":{"line":68,"column":51}},"25":{"start":{"line":79,"column":0},"end":{"line":93,"column":2}},"26":{"start":{"line":80,"column":4},"end":{"line":80,"column":21}},"27":{"start":{"line":82,"column":4},"end":{"line":84,"column":7}},"28":{"start":{"line":83,"column":8},"end":{"line":83,"column":25}},"29":{"start":{"line":86,"column":4},"end":{"line":88,"column":7}},"30":{"start":{"line":87,"column":8},"end":{"line":87,"column":25}},"31":{"start":{"line":90,"column":4},"end":{"line":92,"column":7}},"32":{"start":{"line":91,"column":8},"end":{"line":91,"column":25}},"33":{"start":{"line":101,"column":0},"end":{"line":147,"column":2}},"34":{"start":{"line":102,"column":4},"end":{"line":103,"column":26}},"35":{"start":{"line":106,"column":4},"end":{"line":111,"column":23}},"36":{"start":{"line":113,"column":4},"end":{"line":144,"column":7}},"37":{"start":{"line":116,"column":8},"end":{"line":117,"column":42}},"38":{"start":{"line":117,"column":12},"end":{"line":117,"column":42}},"39":{"start":{"line":119,"column":8},"end":{"line":119,"column":26}},"40":{"start":{"line":121,"column":8},"end":{"line":136,"column":9}},"41":{"start":{"line":122,"column":12},"end":{"line":122,"column":38}},"42":{"start":{"line":126,"column":12},"end":{"line":126,"column":35}},"43":{"start":{"line":129,"column":12},"end":{"line":129,"column":49}},"44":{"start":{"line":130,"column":12},"end":{"line":133,"column":26}},"45":{"start":{"line":131,"column":16},"end":{"line":131,"column":32}},"46":{"start":{"line":132,"column":16},"end":{"line":132,"column":51}},"47":{"start":{"line":135,"column":12},"end":{"line":135,"column":19}},"48":{"start":{"line":139,"column":8},"end":{"line":139,"column":45}},"49":{"start":{"line":140,"column":8},"end":{"line":140,"column":31}},"50":{"start":{"line":142,"column":8},"end":{"line":143,"column":38}},"51":{"start":{"line":143,"column":12},"end":{"line":143,"column":38}},"52":{"start":{"line":146,"column":4},"end":{"line":146,"column":24}},"53":{"start":{"line":156,"column":0},"end":{"line":162,"column":2}},"54":{"start":{"line":157,"column":4},"end":{"line":157,"column":41}},"55":{"start":{"line":158,"column":4},"end":{"line":158,"column":53}},"56":{"start":{"line":160,"column":4},"end":{"line":160,"column":42}},"57":{"start":{"line":161,"column":4},"end":{"line":161,"column":47}},"58":{"start":{"line":169,"column":0},"end":{"line":176,"column":2}},"59":{"start":{"line":170,"column":4},"end":{"line":175,"column":5}},"60":{"start":{"line":171,"column":8},"end":{"line":174,"column":9}},"61":{"start":{"line":172,"column":12},"end":{"line":172,"column":76}},"62":{"start":{"line":173,"column":12},"end":{"line":173,"column":47}},"63":{"start":{"line":184,"column":0},"end":{"line":192,"column":2}},"64":{"start":{"line":185,"column":4},"end":{"line":185,"column":21}},"65":{"start":{"line":188,"column":4},"end":{"line":189,"column":53}},"66":{"start":{"line":189,"column":8},"end":{"line":189,"column":53}},"67":{"start":{"line":191,"column":4},"end":{"line":191,"column":38}},"68":{"start":{"line":194,"column":0},"end":{"line":216,"column":2}},"69":{"start":{"line":196,"column":4},"end":{"line":215,"column":5}},"70":{"start":{"line":197,"column":8},"end":{"line":197,"column":19}},"71":{"start":{"line":200,"column":8},"end":{"line":201,"column":55}},"72":{"start":{"line":201,"column":12},"end":{"line":201,"column":55}},"73":{"start":{"line":203,"column":8},"end":{"line":203,"column":70}},"74":{"start":{"line":205,"column":8},"end":{"line":209,"column":9}},"75":{"start":{"line":206,"column":12},"end":{"line":206,"column":38}},"76":{"start":{"line":208,"column":12},"end":{"line":208,"column":47}},"77":{"start":{"line":211,"column":8},"end":{"line":211,"column":22}},"78":{"start":{"line":214,"column":8},"end":{"line":214,"column":143}},"79":{"start":{"line":218,"column":0},"end":{"line":226,"column":2}},"80":{"start":{"line":220,"column":4},"end":{"line":221,"column":51}},"81":{"start":{"line":221,"column":8},"end":{"line":221,"column":51}},"82":{"start":{"line":224,"column":4},"end":{"line":224,"column":51}},"83":{"start":{"line":225,"column":4},"end":{"line":225,"column":49}},"84":{"start":{"line":235,"column":0},"end":{"line":249,"column":2}},"85":{"start":{"line":237,"column":4},"end":{"line":238,"column":77}},"86":{"start":{"line":238,"column":8},"end":{"line":238,"column":77}},"87":{"start":{"line":240,"column":4},"end":{"line":248,"column":5}},"88":{"start":{"line":242,"column":12},"end":{"line":242,"column":54}},"89":{"start":{"line":243,"column":12},"end":{"line":243,"column":18}},"90":{"start":{"line":246,"column":12},"end":{"line":246,"column":47}},"91":{"start":{"line":247,"column":12},"end":{"line":247,"column":18}},"92":{"start":{"line":258,"column":0},"end":{"line":273,"column":2}},"93":{"start":{"line":259,"column":4},"end":{"line":259,"column":21}},"94":{"start":{"line":261,"column":4},"end":{"line":272,"column":5}},"95":{"start":{"line":263,"column":12},"end":{"line":266,"column":15}},"96":{"start":{"line":264,"column":16},"end":{"line":265,"column":65}},"97":{"start":{"line":265,"column":20},"end":{"line":265,"column":65}},"98":{"start":{"line":267,"column":12},"end":{"line":267,"column":18}},"99":{"start":{"line":270,"column":12},"end":{"line":270,"column":59}},"100":{"start":{"line":271,"column":12},"end":{"line":271,"column":18}},"101":{"start":{"line":281,"column":0},"end":{"line":291,"column":2}},"102":{"start":{"line":282,"column":4},"end":{"line":290,"column":5}},"103":{"start":{"line":284,"column":12},"end":{"line":284,"column":44}},"104":{"start":{"line":285,"column":12},"end":{"line":285,"column":18}},"105":{"start":{"line":288,"column":12},"end":{"line":288,"column":53}},"106":{"start":{"line":289,"column":12},"end":{"line":289,"column":18}},"107":{"start":{"line":298,"column":0},"end":{"line":306,"column":2}},"108":{"start":{"line":299,"column":4},"end":{"line":299,"column":20}},"109":{"start":{"line":300,"column":4},"end":{"line":300,"column":36}},"110":{"start":{"line":302,"column":4},"end":{"line":302,"column":48}},"111":{"start":{"line":303,"column":4},"end":{"line":303,"column":46}},"112":{"start":{"line":305,"column":4},"end":{"line":305,"column":28}},"113":{"start":{"line":308,"column":0},"end":{"line":308,"column":29}}},"branchMap":{"1":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":12},"end":{"line":49,"column":12}},{"start":{"line":49,"column":12},"end":{"line":49,"column":12}}]},"2":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":20},"end":{"line":51,"column":20}},{"start":{"line":51,"column":20},"end":{"line":51,"column":20}}]},"3":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":12},"end":{"line":59,"column":12}},{"start":{"line":59,"column":12},"end":{"line":59,"column":12}}]},"4":{"line":59,"type":"binary-expr","locations":[{"start":{"line":59,"column":15},"end":{"line":59,"column":18}},{"start":{"line":59,"column":22},"end":{"line":59,"column":58}}]},"5":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":20},"end":{"line":61,"column":20}},{"start":{"line":61,"column":20},"end":{"line":61,"column":20}}]},"6":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":19},"end":{"line":66,"column":19}},{"start":{"line":66,"column":19},"end":{"line":66,"column":19}}]},"7":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":8}},{"start":{"line":116,"column":8},"end":{"line":116,"column":8}}]},"8":{"line":142,"type":"if","locations":[{"start":{"line":142,"column":8},"end":{"line":142,"column":8}},{"start":{"line":142,"column":8},"end":{"line":142,"column":8}}]},"9":{"line":157,"type":"binary-expr","locations":[{"start":{"line":157,"column":13},"end":{"line":157,"column":23}},{"start":{"line":157,"column":27},"end":{"line":157,"column":40}}]},"10":{"line":158,"type":"binary-expr","locations":[{"start":{"line":158,"column":17},"end":{"line":158,"column":31}},{"start":{"line":158,"column":35},"end":{"line":158,"column":52}}]},"11":{"line":171,"type":"if","locations":[{"start":{"line":171,"column":8},"end":{"line":171,"column":8}},{"start":{"line":171,"column":8},"end":{"line":171,"column":8}}]},"12":{"line":188,"type":"if","locations":[{"start":{"line":188,"column":4},"end":{"line":188,"column":4}},{"start":{"line":188,"column":4},"end":{"line":188,"column":4}}]},"13":{"line":196,"type":"if","locations":[{"start":{"line":196,"column":4},"end":{"line":196,"column":4}},{"start":{"line":196,"column":4},"end":{"line":196,"column":4}}]},"14":{"line":200,"type":"if","locations":[{"start":{"line":200,"column":8},"end":{"line":200,"column":8}},{"start":{"line":200,"column":8},"end":{"line":200,"column":8}}]},"15":{"line":220,"type":"if","locations":[{"start":{"line":220,"column":4},"end":{"line":220,"column":4}},{"start":{"line":220,"column":4},"end":{"line":220,"column":4}}]},"16":{"line":237,"type":"if","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":4}},{"start":{"line":237,"column":4},"end":{"line":237,"column":4}}]},"17":{"line":240,"type":"switch","locations":[{"start":{"line":241,"column":8},"end":{"line":243,"column":18}},{"start":{"line":245,"column":8},"end":{"line":247,"column":18}}]},"18":{"line":261,"type":"switch","locations":[{"start":{"line":262,"column":8},"end":{"line":267,"column":18}},{"start":{"line":269,"column":8},"end":{"line":271,"column":18}}]},"19":{"line":264,"type":"if","locations":[{"start":{"line":264,"column":16},"end":{"line":264,"column":16}},{"start":{"line":264,"column":16},"end":{"line":264,"column":16}}]},"20":{"line":282,"type":"switch","locations":[{"start":{"line":283,"column":8},"end":{"line":285,"column":18}},{"start":{"line":287,"column":8},"end":{"line":289,"column":18}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":1,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":1,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":1,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":1,"113":1,"114":1,"115":1,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":1,"125":1,"126":0,"127":0,"128":1,"129":1,"130":1,"131":0,"132":0,"133":0,"134":0,"135":0},"b":{"1":[1,1],"2":[1,1,1,1],"3":[1,1],"4":[0,1],"5":[1,1],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,1],"29":[1,0,0],"30":[1,0],"31":[1,1],"32":[1,0],"33":[0,0]},"f":{"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"fnMap":{"1":{"name":"(anonymous_1)","line":2,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":17}}},"2":{"name":"ucs2decode","line":23,"loc":{"start":{"line":23,"column":1},"end":{"line":23,"column":29}}},"3":{"name":"ucs2encode","line":50,"loc":{"start":{"line":50,"column":1},"end":{"line":50,"column":28}}},"4":{"name":"checkScalarValue","line":67,"loc":{"start":{"line":67,"column":1},"end":{"line":67,"column":38}}},"5":{"name":"createByte","line":77,"loc":{"start":{"line":77,"column":1},"end":{"line":77,"column":39}}},"6":{"name":"encodeCodePoint","line":81,"loc":{"start":{"line":81,"column":1},"end":{"line":81,"column":37}}},"7":{"name":"utf8encode","line":103,"loc":{"start":{"line":103,"column":1},"end":{"line":103,"column":29}}},"8":{"name":"readContinuationByte","line":118,"loc":{"start":{"line":118,"column":1},"end":{"line":118,"column":33}}},"9":{"name":"decodeSymbol","line":134,"loc":{"start":{"line":134,"column":1},"end":{"line":134,"column":25}}},"10":{"name":"utf8decode","line":200,"loc":{"start":{"line":200,"column":1},"end":{"line":200,"column":33}}},"11":{"name":"(anonymous_11)","line":227,"loc":{"start":{"line":227,"column":9},"end":{"line":227,"column":20}}}},"statementMap":{"1":{"start":{"line":2,"column":1},"end":{"line":244,"column":9}},"2":{"start":{"line":5,"column":1},"end":{"line":5,"column":57}},"3":{"start":{"line":8,"column":1},"end":{"line":9,"column":42}},"4":{"start":{"line":13,"column":1},"end":{"line":13,"column":54}},"5":{"start":{"line":14,"column":1},"end":{"line":16,"column":2}},"6":{"start":{"line":15,"column":2},"end":{"line":15,"column":20}},"7":{"start":{"line":20,"column":1},"end":{"line":20,"column":46}},"8":{"start":{"line":23,"column":1},"end":{"line":47,"column":2}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":18}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":18}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":29}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":12}},"13":{"start":{"line":28,"column":2},"end":{"line":28,"column":12}},"14":{"start":{"line":29,"column":2},"end":{"line":45,"column":3}},"15":{"start":{"line":30,"column":3},"end":{"line":30,"column":40}},"16":{"start":{"line":31,"column":3},"end":{"line":44,"column":4}},"17":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"18":{"start":{"line":34,"column":4},"end":{"line":41,"column":5}},"19":{"start":{"line":35,"column":5},"end":{"line":35,"column":70}},"20":{"start":{"line":39,"column":5},"end":{"line":39,"column":24}},"21":{"start":{"line":40,"column":5},"end":{"line":40,"column":15}},"22":{"start":{"line":43,"column":4},"end":{"line":43,"column":23}},"23":{"start":{"line":46,"column":2},"end":{"line":46,"column":16}},"24":{"start":{"line":50,"column":1},"end":{"line":65,"column":2}},"25":{"start":{"line":51,"column":2},"end":{"line":51,"column":28}},"26":{"start":{"line":52,"column":2},"end":{"line":52,"column":17}},"27":{"start":{"line":53,"column":2},"end":{"line":53,"column":12}},"28":{"start":{"line":54,"column":2},"end":{"line":54,"column":18}},"29":{"start":{"line":55,"column":2},"end":{"line":63,"column":3}},"30":{"start":{"line":56,"column":3},"end":{"line":56,"column":24}},"31":{"start":{"line":57,"column":3},"end":{"line":61,"column":4}},"32":{"start":{"line":58,"column":4},"end":{"line":58,"column":21}},"33":{"start":{"line":59,"column":4},"end":{"line":59,"column":64}},"34":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"35":{"start":{"line":62,"column":3},"end":{"line":62,"column":39}},"36":{"start":{"line":64,"column":2},"end":{"line":64,"column":16}},"37":{"start":{"line":67,"column":1},"end":{"line":74,"column":2}},"38":{"start":{"line":68,"column":2},"end":{"line":73,"column":3}},"39":{"start":{"line":69,"column":3},"end":{"line":72,"column":5}},"40":{"start":{"line":77,"column":1},"end":{"line":79,"column":2}},"41":{"start":{"line":78,"column":2},"end":{"line":78,"column":66}},"42":{"start":{"line":81,"column":1},"end":{"line":101,"column":2}},"43":{"start":{"line":82,"column":2},"end":{"line":84,"column":3}},"44":{"start":{"line":83,"column":3},"end":{"line":83,"column":40}},"45":{"start":{"line":85,"column":2},"end":{"line":85,"column":18}},"46":{"start":{"line":86,"column":2},"end":{"line":98,"column":3}},"47":{"start":{"line":87,"column":3},"end":{"line":87,"column":65}},"48":{"start":{"line":89,"column":7},"end":{"line":98,"column":3}},"49":{"start":{"line":90,"column":3},"end":{"line":90,"column":31}},"50":{"start":{"line":91,"column":3},"end":{"line":91,"column":66}},"51":{"start":{"line":92,"column":3},"end":{"line":92,"column":38}},"52":{"start":{"line":94,"column":7},"end":{"line":98,"column":3}},"53":{"start":{"line":95,"column":3},"end":{"line":95,"column":66}},"54":{"start":{"line":96,"column":3},"end":{"line":96,"column":39}},"55":{"start":{"line":97,"column":3},"end":{"line":97,"column":38}},"56":{"start":{"line":99,"column":2},"end":{"line":99,"column":58}},"57":{"start":{"line":100,"column":2},"end":{"line":100,"column":16}},"58":{"start":{"line":103,"column":1},"end":{"line":114,"column":2}},"59":{"start":{"line":104,"column":2},"end":{"line":104,"column":38}},"60":{"start":{"line":105,"column":2},"end":{"line":105,"column":33}},"61":{"start":{"line":106,"column":2},"end":{"line":106,"column":17}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":16}},"63":{"start":{"line":108,"column":2},"end":{"line":108,"column":22}},"64":{"start":{"line":109,"column":2},"end":{"line":112,"column":3}},"65":{"start":{"line":110,"column":3},"end":{"line":110,"column":33}},"66":{"start":{"line":111,"column":3},"end":{"line":111,"column":44}},"67":{"start":{"line":113,"column":2},"end":{"line":113,"column":20}},"68":{"start":{"line":118,"column":1},"end":{"line":132,"column":2}},"69":{"start":{"line":119,"column":2},"end":{"line":121,"column":3}},"70":{"start":{"line":120,"column":3},"end":{"line":120,"column":37}},"71":{"start":{"line":123,"column":2},"end":{"line":123,"column":53}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":14}},"73":{"start":{"line":126,"column":2},"end":{"line":128,"column":3}},"74":{"start":{"line":127,"column":3},"end":{"line":127,"column":34}},"75":{"start":{"line":131,"column":2},"end":{"line":131,"column":43}},"76":{"start":{"line":134,"column":1},"end":{"line":195,"column":2}},"77":{"start":{"line":135,"column":2},"end":{"line":135,"column":12}},"78":{"start":{"line":136,"column":2},"end":{"line":136,"column":12}},"79":{"start":{"line":137,"column":2},"end":{"line":137,"column":12}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":12}},"81":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}},"82":{"start":{"line":141,"column":2},"end":{"line":143,"column":3}},"83":{"start":{"line":142,"column":3},"end":{"line":142,"column":37}},"84":{"start":{"line":145,"column":2},"end":{"line":147,"column":3}},"85":{"start":{"line":146,"column":3},"end":{"line":146,"column":16}},"86":{"start":{"line":150,"column":2},"end":{"line":150,"column":38}},"87":{"start":{"line":151,"column":2},"end":{"line":151,"column":14}},"88":{"start":{"line":154,"column":2},"end":{"line":156,"column":3}},"89":{"start":{"line":155,"column":3},"end":{"line":155,"column":16}},"90":{"start":{"line":159,"column":2},"end":{"line":167,"column":3}},"91":{"start":{"line":160,"column":3},"end":{"line":160,"column":38}},"92":{"start":{"line":161,"column":3},"end":{"line":161,"column":45}},"93":{"start":{"line":162,"column":3},"end":{"line":166,"column":4}},"94":{"start":{"line":163,"column":4},"end":{"line":163,"column":21}},"95":{"start":{"line":165,"column":4},"end":{"line":165,"column":45}},"96":{"start":{"line":170,"column":2},"end":{"line":180,"column":3}},"97":{"start":{"line":171,"column":3},"end":{"line":171,"column":34}},"98":{"start":{"line":172,"column":3},"end":{"line":172,"column":34}},"99":{"start":{"line":173,"column":3},"end":{"line":173,"column":61}},"100":{"start":{"line":174,"column":3},"end":{"line":179,"column":4}},"101":{"start":{"line":175,"column":4},"end":{"line":175,"column":32}},"102":{"start":{"line":176,"column":4},"end":{"line":176,"column":21}},"103":{"start":{"line":178,"column":4},"end":{"line":178,"column":45}},"104":{"start":{"line":183,"column":2},"end":{"line":192,"column":3}},"105":{"start":{"line":184,"column":3},"end":{"line":184,"column":34}},"106":{"start":{"line":185,"column":3},"end":{"line":185,"column":34}},"107":{"start":{"line":186,"column":3},"end":{"line":186,"column":34}},"108":{"start":{"line":187,"column":3},"end":{"line":188,"column":28}},"109":{"start":{"line":189,"column":3},"end":{"line":191,"column":4}},"110":{"start":{"line":190,"column":4},"end":{"line":190,"column":21}},"111":{"start":{"line":194,"column":2},"end":{"line":194,"column":40}},"112":{"start":{"line":197,"column":1},"end":{"line":197,"column":15}},"113":{"start":{"line":198,"column":1},"end":{"line":198,"column":15}},"114":{"start":{"line":199,"column":1},"end":{"line":199,"column":15}},"115":{"start":{"line":200,"column":1},"end":{"line":210,"column":2}},"116":{"start":{"line":201,"column":2},"end":{"line":201,"column":37}},"117":{"start":{"line":202,"column":2},"end":{"line":202,"column":31}},"118":{"start":{"line":203,"column":2},"end":{"line":203,"column":16}},"119":{"start":{"line":204,"column":2},"end":{"line":204,"column":22}},"120":{"start":{"line":205,"column":2},"end":{"line":205,"column":10}},"121":{"start":{"line":206,"column":2},"end":{"line":208,"column":3}},"122":{"start":{"line":207,"column":3},"end":{"line":207,"column":24}},"123":{"start":{"line":209,"column":2},"end":{"line":209,"column":32}},"124":{"start":{"line":214,"column":1},"end":{"line":218,"column":3}},"125":{"start":{"line":222,"column":1},"end":{"line":242,"column":2}},"126":{"start":{"line":227,"column":2},"end":{"line":229,"column":5}},"127":{"start":{"line":228,"column":3},"end":{"line":228,"column":15}},"128":{"start":{"line":230,"column":8},"end":{"line":242,"column":2}},"129":{"start":{"line":231,"column":2},"end":{"line":239,"column":3}},"130":{"start":{"line":232,"column":3},"end":{"line":232,"column":29}},"131":{"start":{"line":234,"column":3},"end":{"line":234,"column":19}},"132":{"start":{"line":235,"column":3},"end":{"line":235,"column":46}},"133":{"start":{"line":236,"column":3},"end":{"line":238,"column":4}},"134":{"start":{"line":237,"column":4},"end":{"line":237,"column":69}},"135":{"start":{"line":241,"column":2},"end":{"line":241,"column":19}}},"branchMap":{"1":{"line":5,"type":"binary-expr","locations":[{"start":{"line":5,"column":19},"end":{"line":5,"column":45}},{"start":{"line":5,"column":49},"end":{"line":5,"column":56}}]},"2":{"line":8,"type":"binary-expr","locations":[{"start":{"line":8,"column":18},"end":{"line":8,"column":43}},{"start":{"line":8,"column":47},"end":{"line":8,"column":53}},{"start":{"line":9,"column":2},"end":{"line":9,"column":31}},{"start":{"line":9,"column":35},"end":{"line":9,"column":41}}]},"3":{"line":13,"type":"binary-expr","locations":[{"start":{"line":13,"column":18},"end":{"line":13,"column":43}},{"start":{"line":13,"column":47},"end":{"line":13,"column":53}}]},"4":{"line":14,"type":"if","locations":[{"start":{"line":14,"column":1},"end":{"line":14,"column":1}},{"start":{"line":14,"column":1},"end":{"line":14,"column":1}}]},"5":{"line":14,"type":"binary-expr","locations":[{"start":{"line":14,"column":5},"end":{"line":14,"column":37}},{"start":{"line":14,"column":41},"end":{"line":14,"column":73}}]},"6":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":3},"end":{"line":31,"column":3}},{"start":{"line":31,"column":3},"end":{"line":31,"column":3}}]},"7":{"line":31,"type":"binary-expr","locations":[{"start":{"line":31,"column":7},"end":{"line":31,"column":22}},{"start":{"line":31,"column":26},"end":{"line":31,"column":41}},{"start":{"line":31,"column":45},"end":{"line":31,"column":61}}]},"8":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"9":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":3},"end":{"line":57,"column":3}},{"start":{"line":57,"column":3},"end":{"line":57,"column":3}}]},"10":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":2},"end":{"line":68,"column":2}},{"start":{"line":68,"column":2},"end":{"line":68,"column":2}}]},"11":{"line":68,"type":"binary-expr","locations":[{"start":{"line":68,"column":6},"end":{"line":68,"column":25}},{"start":{"line":68,"column":29},"end":{"line":68,"column":48}}]},"12":{"line":82,"type":"if","locations":[{"start":{"line":82,"column":2},"end":{"line":82,"column":2}},{"start":{"line":82,"column":2},"end":{"line":82,"column":2}}]},"13":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":2},"end":{"line":86,"column":2}},{"start":{"line":86,"column":2},"end":{"line":86,"column":2}}]},"14":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":7},"end":{"line":89,"column":7}},{"start":{"line":89,"column":7},"end":{"line":89,"column":7}}]},"15":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":7},"end":{"line":94,"column":7}},{"start":{"line":94,"column":7},"end":{"line":94,"column":7}}]},"16":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":2},"end":{"line":119,"column":2}},{"start":{"line":119,"column":2},"end":{"line":119,"column":2}}]},"17":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":2},"end":{"line":126,"column":2}},{"start":{"line":126,"column":2},"end":{"line":126,"column":2}}]},"18":{"line":141,"type":"if","locations":[{"start":{"line":141,"column":2},"end":{"line":141,"column":2}},{"start":{"line":141,"column":2},"end":{"line":141,"column":2}}]},"19":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":2},"end":{"line":145,"column":2}},{"start":{"line":145,"column":2},"end":{"line":145,"column":2}}]},"20":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":2},"end":{"line":154,"column":2}},{"start":{"line":154,"column":2},"end":{"line":154,"column":2}}]},"21":{"line":159,"type":"if","locations":[{"start":{"line":159,"column":2},"end":{"line":159,"column":2}},{"start":{"line":159,"column":2},"end":{"line":159,"column":2}}]},"22":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":3},"end":{"line":162,"column":3}},{"start":{"line":162,"column":3},"end":{"line":162,"column":3}}]},"23":{"line":170,"type":"if","locations":[{"start":{"line":170,"column":2},"end":{"line":170,"column":2}},{"start":{"line":170,"column":2},"end":{"line":170,"column":2}}]},"24":{"line":174,"type":"if","locations":[{"start":{"line":174,"column":3},"end":{"line":174,"column":3}},{"start":{"line":174,"column":3},"end":{"line":174,"column":3}}]},"25":{"line":183,"type":"if","locations":[{"start":{"line":183,"column":2},"end":{"line":183,"column":2}},{"start":{"line":183,"column":2},"end":{"line":183,"column":2}}]},"26":{"line":189,"type":"if","locations":[{"start":{"line":189,"column":3},"end":{"line":189,"column":3}},{"start":{"line":189,"column":3},"end":{"line":189,"column":3}}]},"27":{"line":189,"type":"binary-expr","locations":[{"start":{"line":189,"column":7},"end":{"line":189,"column":28}},{"start":{"line":189,"column":32},"end":{"line":189,"column":53}}]},"28":{"line":222,"type":"if","locations":[{"start":{"line":222,"column":1},"end":{"line":222,"column":1}},{"start":{"line":222,"column":1},"end":{"line":222,"column":1}}]},"29":{"line":223,"type":"binary-expr","locations":[{"start":{"line":223,"column":2},"end":{"line":223,"column":29}},{"start":{"line":224,"column":2},"end":{"line":224,"column":31}},{"start":{"line":225,"column":2},"end":{"line":225,"column":12}}]},"30":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":8},"end":{"line":230,"column":8}},{"start":{"line":230,"column":8},"end":{"line":230,"column":8}}]},"31":{"line":230,"type":"binary-expr","locations":[{"start":{"line":230,"column":12},"end":{"line":230,"column":23}},{"start":{"line":230,"column":27},"end":{"line":230,"column":48}}]},"32":{"line":231,"type":"if","locations":[{"start":{"line":231,"column":2},"end":{"line":231,"column":2}},{"start":{"line":231,"column":2},"end":{"line":231,"column":2}}]},"33":{"line":237,"type":"binary-expr","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":34}},{"start":{"line":237,"column":39},"end":{"line":237,"column":67}}]}}}} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/base.css b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/base.css deleted file mode 100644 index a6a2f32..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/base.css +++ /dev/null @@ -1,182 +0,0 @@ -body, html { - margin:0; padding: 0; -} -body { - font-family: Helvetica Neue, Helvetica,Arial; - font-size: 10pt; -} -div.header, div.footer { - background: #eee; - padding: 1em; -} -div.header { - z-index: 100; - position: fixed; - top: 0; - border-bottom: 1px solid #666; - width: 100%; -} -div.footer { - border-top: 1px solid #666; -} -div.body { - margin-top: 10em; -} -div.meta { - font-size: 90%; - text-align: center; -} -h1, h2, h3 { - font-weight: normal; -} -h1 { - font-size: 12pt; -} -h2 { - font-size: 10pt; -} -pre { - font-family: Consolas, Menlo, Monaco, monospace; - margin: 0; - padding: 0; - line-height: 1.3; - font-size: 14px; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} - -div.path { font-size: 110%; } -div.path a:link, div.path a:visited { color: #000; } -table.coverage { border-collapse: collapse; margin:0; padding: 0 } - -table.coverage td { - margin: 0; - padding: 0; - color: #111; - vertical-align: top; -} -table.coverage td.line-count { - width: 50px; - text-align: right; - padding-right: 5px; -} -table.coverage td.line-coverage { - color: #777 !important; - text-align: right; - border-left: 1px solid #666; - border-right: 1px solid #666; -} - -table.coverage td.text { -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 40px; -} -table.coverage td span.cline-neutral { - background: #eee; -} -table.coverage td span.cline-yes { - background: #b5d592; - color: #999; -} -table.coverage td span.cline-no { - background: #fc8c84; -} - -.cstat-yes { color: #111; } -.cstat-no { background: #fc8c84; color: #111; } -.fstat-no { background: #ffc520; color: #111 !important; } -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -.missing-if-branch { - display: inline-block; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: black; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} - -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} - -.entity, .metric { font-weight: bold; } -.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; } -.metric small { font-size: 80%; font-weight: normal; color: #666; } - -div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; } -div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; } -div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; } -div.coverage-summary th.file { border-right: none !important; } -div.coverage-summary th.pic { border-left: none !important; text-align: right; } -div.coverage-summary th.pct { border-right: none !important; } -div.coverage-summary th.abs { border-left: none !important; text-align: right; } -div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; } -div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; } -div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; } -div.coverage-summary td.pic { min-width: 120px !important; } -div.coverage-summary a:link { text-decoration: none; color: #000; } -div.coverage-summary a:visited { text-decoration: none; color: #777; } -div.coverage-summary a:hover { text-decoration: underline; } -div.coverage-summary tfoot td { border-top: 1px solid #666; } - -div.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -div.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -div.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} - -.high { background: #b5d592 !important; } -.medium { background: #ffe87c !important; } -.low { background: #fc8c84 !important; } - -span.cover-fill, span.cover-empty { - display:inline-block; - border:1px solid #444; - background: white; - height: 12px; -} -span.cover-fill { - background: #ccc; - border-right: 1px solid #444; -} -span.cover-empty { - background: white; - border-left: none; -} -span.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/index.html deleted file mode 100644 index 54f0df7..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - Code coverage report for ethereum.js/ - - - - - - - - -
      -

      Code coverage report for ethereum.js/

      -

      - - Statements: 100% (6 / 6)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (6 / 6)      - - Ignored: none      -

      -
      All files » ethereum.js/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      index.js100%(6 / 6)100%(0 / 0)100%(0 / 0)100%(6 / 6)
      -
      -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html deleted file mode 100644 index 4f9fed4..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - Code coverage report for ethereum.js/index.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/index.js

      -

      - - Statements: 100% (6 / 6)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (6 / 6)      - - Ignored: none      -

      -
      All files » ethereum.js/ » index.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -81 -1 -1 -1 -1 -  -1 - 
      var web3 = require('./lib/web3');
      -web3.providers.HttpProvider = require('./lib/web3/httpprovider');
      -web3.providers.QtSyncProvider = require('./lib/web3/qtsync');
      -web3.eth.contract = require('./lib/web3/contract');
      -web3.abi = require('./lib/solidity/abi');
      - 
      -module.exports = web3;
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html deleted file mode 100644 index 820fb88..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/ - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/

      -

      - - Statements: 95.08% (58 / 61)      - - - Branches: 50% (1 / 2)      - - - Functions: 90% (9 / 10)      - - - Lines: 95.08% (58 / 61)      - - Ignored: none      -

      -
      All files » ethereum.js/lib/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      web3.js95.08%(58 / 61)50%(1 / 2)90%(9 / 10)95.08%(58 / 61)
      -
      -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html deleted file mode 100644 index cf3a9e6..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html +++ /dev/null @@ -1,792 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/abi.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/solidity/abi.js

      -

      - - Statements: 100% (93 / 93)      - - - Branches: 100% (28 / 28)      - - - Functions: 100% (17 / 17)      - - - Lines: 100% (93 / 93)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -1 -296 -  -  -  -  -  -  -  -  -  -  -1 -  -91 -10 -81 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -84 -84 -84 -  -  -84 -91 -  -  -84 -  -91 -91 -200 -  -91 -1 -  -  -90 -  -90 -5 -12 -  -85 -5 -  -80 -  -  -83 -  -83 -  -  -  -  -  -  -  -  -  -1 -58 -9 -49 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -  -53 -53 -53 -  -53 -58 -  -  -53 -53 -  -53 -  -58 -58 -163 -  -  -58 -1 -  -  -57 -57 -2 -2 -2 -2 -4 -4 -  -2 -  -55 -7 -7 -7 -  -48 -48 -  -  -  -52 -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -32 -32 -  -32 -80 -80 -  -  -32 -31 -  -  -32 -  -  -27 -  -  -  -  -  -  -  -  -  -1 -25 -25 -  -30 -30 -  -30 -47 -  -  -30 -29 -  -  -30 -  -  -25 -  -  -1 -  -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file abi.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - *   Gav Wood <g@ethdev.com>
      - * @date 2014
      - */
      - 
      -var utils = require('../utils/utils');
      -var c = require('../utils/config');
      -var types = require('./types');
      -var f = require('./formatters');
      - 
      -/**
      - * throw incorrect type error
      - *
      - * @method throwTypeError
      - * @param {String} type
      - * @throws incorrect type error
      - */
      -var throwTypeError = function (type) {
      -    throw new Error('parser does not support type: ' + type);
      -};
      - 
      -/** This method should be called if we want to check if givent type is an array type
      - *
      - * @method isArrayType
      - * @param {String} type name
      - * @returns {Boolean} true if it is, otherwise false
      - */
      -var isArrayType = function (type) {
      -    return type.slice(-2) === '[]';
      -};
      - 
      -/**
      - * This method should be called to return dynamic type length in hex
      - *
      - * @method dynamicTypeBytes
      - * @param {String} type
      - * @param {String|Array} dynamic type
      - * @return {String} length of dynamic type in hex or empty string if type is not dynamic
      - */
      -var dynamicTypeBytes = function (type, value) {
      -    // TODO: decide what to do with array of strings
      -    if (isArrayType(type) || type === 'bytes')
      -        return f.formatInputInt(value.length);
      -    return "";
      -};
      - 
      -var inputTypes = types.inputTypes();
      - 
      -/**
      - * Formats input params to bytes
      - *
      - * @method formatInput
      - * @param {Array} abi inputs of method
      - * @param {Array} params that will be formatted to bytes
      - * @returns bytes representation of input params
      - */
      -var formatInput = function (inputs, params) {
      -    var bytes = "";
      -    var toAppendConstant = "";
      -    var toAppendArrayContent = "";
      - 
      -    /// first we iterate in search for dynamic
      -    inputs.forEach(function (input, index) {
      -        bytes += dynamicTypeBytes(input.type, params[index]);
      -    });
      - 
      -    inputs.forEach(function (input, i) {
      -        /*jshint maxcomplexity:5 */
      -        var typeMatch = false;
      -        for (var j = 0; j < inputTypes.length && !typeMatch; j++) {
      -            typeMatch = inputTypes[j].type(inputs[i].type, params[i]);
      -        }
      -        if (!typeMatch) {
      -            throwTypeError(inputs[i].type);
      -        }
      - 
      -        var formatter = inputTypes[j - 1].format;
      - 
      -        if (isArrayType(inputs[i].type))
      -            toAppendArrayContent += params[i].reduce(function (acc, curr) {
      -                return acc + formatter(curr);
      -            }, "");
      -        else if (inputs[i].type === 'bytes')
      -            toAppendArrayContent += formatter(params[i]);
      -        else
      -            toAppendConstant += formatter(params[i]);
      -    });
      - 
      -    bytes += toAppendConstant + toAppendArrayContent;
      - 
      -    return bytes;
      -};
      - 
      -/**
      - * This method should be called to predict the length of dynamic type
      - *
      - * @method dynamicBytesLength
      - * @param {String} type
      - * @returns {Number} length of dynamic type, 0 or multiplication of ETH_PADDING (32)
      - */
      -var dynamicBytesLength = function (type) {
      -    if (isArrayType(type) || type === 'bytes')
      -        return c.ETH_PADDING * 2;
      -    return 0;
      -};
      - 
      -var outputTypes = types.outputTypes();
      - 
      -/** 
      - * Formats output bytes back to param list
      - *
      - * @method formatOutput
      - * @param {Array} abi outputs of method
      - * @param {String} bytes represention of output
      - * @returns {Array} output params
      - */
      -var formatOutput = function (outs, output) {
      - 
      -    output = output.slice(2);
      -    var result = [];
      -    var padding = c.ETH_PADDING * 2;
      - 
      -    var dynamicPartLength = outs.reduce(function (acc, curr) {
      -        return acc + dynamicBytesLength(curr.type);
      -    }, 0);
      - 
      -    var dynamicPart = output.slice(0, dynamicPartLength);
      -    output = output.slice(dynamicPartLength);
      - 
      -    outs.forEach(function (out, i) {
      -        /*jshint maxcomplexity:6 */
      -        var typeMatch = false;
      -        for (var j = 0; j < outputTypes.length && !typeMatch; j++) {
      -            typeMatch = outputTypes[j].type(outs[i].type);
      -        }
      - 
      -        if (!typeMatch) {
      -            throwTypeError(outs[i].type);
      -        }
      - 
      -        var formatter = outputTypes[j - 1].format;
      -        if (isArrayType(outs[i].type)) {
      -            var size = f.formatOutputUInt(dynamicPart.slice(0, padding));
      -            dynamicPart = dynamicPart.slice(padding);
      -            var array = [];
      -            for (var k = 0; k < size; k++) {
      -                array.push(formatter(output.slice(0, padding)));
      -                output = output.slice(padding);
      -            }
      -            result.push(array);
      -        }
      -        else if (types.prefixedType('bytes')(outs[i].type)) {
      -            dynamicPart = dynamicPart.slice(padding);
      -            result.push(formatter(output.slice(0, padding)));
      -            output = output.slice(padding);
      -        } else {
      -            result.push(formatter(output.slice(0, padding)));
      -            output = output.slice(padding);
      -        }
      -    });
      - 
      -    return result;
      -};
      - 
      -/**
      - * Should be called to create input parser for contract with given abi
      - *
      - * @method inputParser
      - * @param {Array} contract abi
      - * @returns {Object} input parser object for given json abi
      - * TODO: refactor creating the parser, do not double logic from contract
      - */
      -var inputParser = function (json) {
      -    var parser = {};
      -    json.forEach(function (method) {
      -        var displayName = utils.extractDisplayName(method.name);
      -        var typeName = utils.extractTypeName(method.name);
      - 
      -        var impl = function () {
      -            var params = Array.prototype.slice.call(arguments);
      -            return formatInput(method.inputs, params);
      -        };
      - 
      -        if (parser[displayName] === undefined) {
      -            parser[displayName] = impl;
      -        }
      - 
      -        parser[displayName][typeName] = impl;
      -    });
      - 
      -    return parser;
      -};
      - 
      -/**
      - * Should be called to create output parser for contract with given abi
      - *
      - * @method outputParser
      - * @param {Array} contract abi
      - * @returns {Object} output parser for given json abi
      - */
      -var outputParser = function (json) {
      -    var parser = {};
      -    json.forEach(function (method) {
      - 
      -        var displayName = utils.extractDisplayName(method.name);
      -        var typeName = utils.extractTypeName(method.name);
      - 
      -        var impl = function (output) {
      -            return formatOutput(method.outputs, output);
      -        };
      - 
      -        if (parser[displayName] === undefined) {
      -            parser[displayName] = impl;
      -        }
      - 
      -        parser[displayName][typeName] = impl;
      -    });
      - 
      -    return parser;
      -};
      - 
      -module.exports = {
      -    inputParser: inputParser,
      -    outputParser: outputParser,
      -    formatInput: formatInput,
      -    formatOutput: formatOutput
      -};
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html deleted file mode 100644 index c4eed45..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html +++ /dev/null @@ -1,690 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/formatters.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/solidity/formatters.js

      -

      - - Statements: 97.37% (37 / 38)      - - - Branches: 91.67% (11 / 12)      - - - Functions: 92.86% (13 / 14)      - - - Lines: 97.37% (37 / 38)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -103 -  -  -  -  -  -  -  -  -  -  -  -1 -103 -103 -103 -  -  -  -  -  -  -  -  -  -1 -5 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -27 -  -  -  -  -  -  -  -  -  -1 -  -27 -  -  -  -27 -7 -  -20 -  -  -  -  -  -  -  -  -  -1 -20 -20 -  -  -  -  -  -  -  -  -  -1 -4 -  -  -  -  -  -  -  -  -  -1 -3 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -5 -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file formatters.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var BigNumber = require('bignumber.js');
      -var utils = require('../utils/utils');
      -var c = require('../utils/config');
      - 
      -/**
      - * Should be called to pad string to expected length
      - *
      - * @method padLeft
      - * @param {String} string to be padded
      - * @param {Number} characters that result string should have
      - * @param {String} sign, by default 0
      - * @returns {String} right aligned string
      - */
      -var padLeft = function (string, chars, sign) {
      -    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
      -};
      - 
      -/**
      - * Formats input value to byte representation of int
      - * If value is negative, return it's two's complement
      - * If the value is floating point, round it down
      - *
      - * @method formatInputInt
      - * @param {String|Number|BigNumber} value that needs to be formatted
      - * @returns {String} right-aligned byte representation of int
      - */
      -var formatInputInt = function (value) {
      -    var padding = c.ETH_PADDING * 2;
      -    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
      -    return padLeft(utils.toTwosComplement(value).round().toString(16), padding);
      -};
      - 
      -/**
      - * Formats input value to byte representation of string
      - *
      - * @method formatInputString
      - * @param {String}
      - * @returns {String} left-algined byte representation of string
      - */
      -var formatInputString = function (value) {
      -    return utils.fromAscii(value, c.ETH_PADDING).substr(2);
      -};
      - 
      -/**
      - * Formats input value to byte representation of bool
      - *
      - * @method formatInputBool
      - * @param {Boolean}
      - * @returns {String} right-aligned byte representation bool
      - */
      -var formatInputBool = function (value) {
      -    return '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
      -};
      - 
      -/**
      - * Formats input value to byte representation of real
      - * Values are multiplied by 2^m and encoded as integers
      - *
      - * @method formatInputReal
      - * @param {String|Number|BigNumber}
      - * @returns {String} byte representation of real
      - */
      -var formatInputReal = function (value) {
      -    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); 
      -};
      - 
      -/**
      - * Check if input value is negative
      - *
      - * @method signedIsNegative
      - * @param {String} value is hex format
      - * @returns {Boolean} true if it is negative, otherwise false
      - */
      -var signedIsNegative = function (value) {
      -    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
      -};
      - 
      -/**
      - * Formats right-aligned output bytes to int
      - *
      - * @method formatOutputInt
      - * @param {String} bytes
      - * @returns {BigNumber} right-aligned output bytes formatted to big number
      - */
      -var formatOutputInt = function (value) {
      - 
      -    value = value || "0";
      - 
      -    // check if it's negative number
      -    // it it is, return two's complement
      -    if (signedIsNegative(value)) {
      -        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
      -    }
      -    return new BigNumber(value, 16);
      -};
      - 
      -/**
      - * Formats right-aligned output bytes to uint
      - *
      - * @method formatOutputUInt
      - * @param {String} bytes
      - * @returns {BigNumeber} right-aligned output bytes formatted to uint
      - */
      -var formatOutputUInt = function (value) {
      -    value = value || "0";
      -    return new BigNumber(value, 16);
      -};
      - 
      -/**
      - * Formats right-aligned output bytes to real
      - *
      - * @method formatOutputReal
      - * @param {String}
      - * @returns {BigNumber} input bytes formatted to real
      - */
      -var formatOutputReal = function (value) {
      -    return formatOutputInt(value).dividedBy(new BigNumber(2).pow(128)); 
      -};
      - 
      -/**
      - * Formats right-aligned output bytes to ureal
      - *
      - * @method formatOutputUReal
      - * @param {String}
      - * @returns {BigNumber} input bytes formatted to ureal
      - */
      -var formatOutputUReal = function (value) {
      -    return formatOutputUInt(value).dividedBy(new BigNumber(2).pow(128)); 
      -};
      - 
      -/**
      - * Should be used to format output hash
      - *
      - * @method formatOutputHash
      - * @param {String}
      - * @returns {String} right-aligned output bytes formatted to hex
      - */
      -var formatOutputHash = function (value) {
      -    return "0x" + value;
      -};
      - 
      -/**
      - * Should be used to format output bool
      - *
      - * @method formatOutputBool
      - * @param {String}
      - * @returns {Boolean} right-aligned input bytes formatted to bool
      - */
      -var formatOutputBool = function (value) {
      -    return value === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
      -};
      - 
      -/**
      - * Should be used to format output string
      - *
      - * @method formatOutputString
      - * @param {Sttring} left-aligned hex representation of string
      - * @returns {String} ascii string
      - */
      -var formatOutputString = function (value) {
      -    return utils.toAscii(value);
      -};
      - 
      -/**
      - * Should be used to format output address
      - *
      - * @method formatOutputAddress
      - * @param {String} right-aligned input bytes
      - * @returns {String} address
      - */
      -var formatOutputAddress = function (value) {
      -    return "0x" + value.slice(value.length - 40, value.length);
      -};
      - 
      -module.exports = {
      -    formatInputInt: formatInputInt,
      -    formatInputString: formatInputString,
      -    formatInputBool: formatInputBool,
      -    formatInputReal: formatInputReal,
      -    formatOutputInt: formatOutputInt,
      -    formatOutputUInt: formatOutputUInt,
      -    formatOutputReal: formatOutputReal,
      -    formatOutputUReal: formatOutputUReal,
      -    formatOutputHash: formatOutputHash,
      -    formatOutputBool: formatOutputBool,
      -    formatOutputString: formatOutputString,
      -    formatOutputAddress: formatOutputAddress
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html deleted file mode 100644 index cfcf93a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/ - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/solidity/

      -

      - - Statements: 99.3% (142 / 143)      - - - Branches: 97.5% (39 / 40)      - - - Functions: 97.3% (36 / 37)      - - - Lines: 99.3% (142 / 143)      - - Ignored: none      -

      -
      All files » ethereum.js/lib/solidity/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      abi.js100%(93 / 93)100%(28 / 28)100%(17 / 17)100%(93 / 93)
      formatters.js97.37%(37 / 38)91.67%(11 / 12)92.86%(13 / 14)97.37%(37 / 38)
      types.js100%(12 / 12)100%(0 / 0)100%(6 / 6)100%(12 / 12)
      -
      -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html deleted file mode 100644 index 07acd7d..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/types.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/solidity/types.js

      -

      - - Statements: 100% (12 / 12)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (6 / 6)      - - - Lines: 100% (12 / 12)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -1 -65 -396 -  -  -  -  -  -1 -4 -22 -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file types.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var f = require('./formatters');
      - 
      -/// @param expected type prefix (string)
      -/// @returns function which checks if type has matching prefix. if yes, returns true, otherwise false
      -var prefixedType = function (prefix) {
      -    return function (type) {
      -        return type.indexOf(prefix) === 0;
      -    };
      -};
      - 
      -/// @param expected type name (string)
      -/// @returns function which checks if type is matching expected one. if yes, returns true, otherwise false
      -var namedType = function (name) {
      -    return function (type) {
      -        return name === type;
      -    };
      -};
      - 
      -/// Setups input formatters for solidity types
      -/// @returns an array of input formatters 
      -var inputTypes = function () {
      -    
      -    return [
      -        { type: prefixedType('uint'), format: f.formatInputInt },
      -        { type: prefixedType('int'), format: f.formatInputInt },
      -        { type: prefixedType('bytes'), format: f.formatInputString }, 
      -        { type: prefixedType('real'), format: f.formatInputReal },
      -        { type: prefixedType('ureal'), format: f.formatInputReal },
      -        { type: namedType('address'), format: f.formatInputInt },
      -        { type: namedType('bool'), format: f.formatInputBool }
      -    ];
      -};
      - 
      -/// Setups output formaters for solidity types
      -/// @returns an array of output formatters
      -var outputTypes = function () {
      - 
      -    return [
      -        { type: prefixedType('uint'), format: f.formatOutputUInt },
      -        { type: prefixedType('int'), format: f.formatOutputInt },
      -        { type: prefixedType('bytes'), format: f.formatOutputString },
      -        { type: prefixedType('real'), format: f.formatOutputReal },
      -        { type: prefixedType('ureal'), format: f.formatOutputUReal },
      -        { type: namedType('address'), format: f.formatOutputAddress },
      -        { type: namedType('bool'), format: f.formatOutputBool }
      -    ];
      -};
      - 
      -module.exports = {
      -    prefixedType: prefixedType,
      -    namedType: namedType,
      -    inputTypes: inputTypes,
      -    outputTypes: outputTypes
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html deleted file mode 100644 index 92546cd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/config.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/utils/config.js

      -

      - - Statements: 100% (3 / 3)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (3 / 3)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file config.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -/**
      - * Utils
      - * 
      - * @module utils
      - */
      - 
      -/**
      - * Utility functions
      - * 
      - * @class [utils] config
      - * @constructor
      - */
      - 
      -/// required to define ETH_BIGNUMBER_ROUNDING_MODE
      -var BigNumber = require('bignumber.js');
      - 
      -var ETH_UNITS = [ 
      -    'wei', 
      -    'Kwei', 
      -    'Mwei', 
      -    'Gwei', 
      -    'szabo', 
      -    'finney', 
      -    'ether', 
      -    'grand', 
      -    'Mether', 
      -    'Gether', 
      -    'Tether', 
      -    'Pether', 
      -    'Eether', 
      -    'Zether', 
      -    'Yether', 
      -    'Nether', 
      -    'Dether', 
      -    'Vether', 
      -    'Uether' 
      -];
      - 
      -module.exports = {
      -    ETH_PADDING: 32,
      -    ETH_SIGNATURE_LENGTH: 4,
      -    ETH_UNITS: ETH_UNITS,
      -    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
      -    ETH_POLLING_TIMEOUT: 1000,
      -    ETH_DEFAULTBLOCK: 'latest'
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html deleted file mode 100644 index 91caf95..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/ - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/utils/

      -

      - - Statements: 100% (110 / 110)      - - - Branches: 92.06% (58 / 63)      - - - Functions: 100% (26 / 26)      - - - Lines: 100% (110 / 110)      - - Ignored: none      -

      -
      All files » ethereum.js/lib/utils/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      config.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
      utils.js100%(107 / 107)92.06%(58 / 63)100%(26 / 26)100%(107 / 107)
      -
      -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html deleted file mode 100644 index 5fad23e..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html +++ /dev/null @@ -1,1443 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/utils.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/utils/utils.js

      -

      - - Statements: 100% (107 / 107)      - - - Branches: 92.06% (58 / 63)      - - - Functions: 100% (26 / 26)      - - - Lines: 100% (107 / 107)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -3 -3 -3 -3 -  -3 -  -  -  -  -  -  -  -  -  -1 -  -10 -10 -10 -3 -  -10 -70 -70 -7 -  -  -63 -  -  -10 -  -  -  -  -  -  -  -  -  -1 -18 -18 -195 -195 -  -  -18 -  -  -  -  -  -  -  -  -  -  -1 -18 -18 -18 -135 -18 -  -  -  -  -  -  -  -  -  -1 -78 -78 -  -  -  -1 -  -76 -76 -  -  -  -  -  -  -  -  -  -1 -8 -13 -  -  -  -  -  -  -  -  -  -  -1 -8 -13 -  -  -  -  -  -  -  -  -  -  -1 -120 -  -  -  -  -  -  -  -  -  -1 -119 -119 -  -119 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -93 -2 -  -91 -1 -  -90 -3 -  -  -87 -35 -5 -30 -2 -  -  -80 -  -  -  -  -  -  -  -  -  -  -1 -25 -25 -25 -1 -  -24 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -12 -  -12 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -13 -  -12 -  -  -  -  -  -  -  -  -  -1 -  -464 -464 -54 -  -410 -154 -  -  -256 -  -  -  -  -  -  -  -  -  -1 -103 -103 -10 -  -93 -  -  -  -  -  -  -  -  -  -1 -6 -3 -  -  -3 -  -  -  -  -  -  -  -  -  -  -1 -587 -  -  -  -  -  -  -  -  -  -  -1 -557 -  -  -  -  -  -  -  -  -  -  -1 -182 -  -  -  -  -  -  -  -  -  -1 -174 -  -  -  -  -  -  -  -  -  -1 -93 -  -  -  -  -  -  -  -  -  -1 -106 -  -  -  -  -  -  -  -  -  -1 -10 -10 -  -5 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file utils.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -/**
      - * Utils
      - * 
      - * @module utils
      - */
      - 
      -/**
      - * Utility functions
      - * 
      - * @class [utils] utils
      - * @constructor
      - */
      - 
      -var BigNumber = require('bignumber.js');
      - 
      -var unitMap = {
      -    'wei':      '1',
      -    'kwei':     '1000',
      -    'ada':      '1000',
      -    'mwei':     '1000000',
      -    'babbage':  '1000000',
      -    'gwei':     '1000000000',
      -    'shannon':  '1000000000',
      -    'szabo':    '1000000000000',
      -    'finney':   '1000000000000000',
      -    'ether':    '1000000000000000000',
      -    'kether':   '1000000000000000000000',
      -    'grand':    '1000000000000000000000',
      -    'einstein': '1000000000000000000000',
      -    'mether':   '1000000000000000000000000',
      -    'gether':   '1000000000000000000000000000',
      -    'tether':   '1000000000000000000000000000000'
      -};
      - 
      - 
      -/** Finds first index of array element matching pattern
      - *
      - * @method findIndex
      - * @param {Array}
      - * @param {Function} pattern
      - * @returns {Number} index of element
      - */
      -var findIndex = function (array, callback) {
      -    var end = false;
      -    var i = 0;
      -    for (; i < array.length && !end; i++) {
      -        end = callback(array[i]);
      -    }
      -    return end ? i - 1 : -1;
      -};
      - 
      -/** 
      - * Should be called to get sting from it's hex representation
      - *
      - * @method toAscii
      - * @param {String} string in hex
      - * @returns {String} ascii string representation of hex value
      - */
      -var toAscii = function(hex) {
      -// Find termination
      -    var str = "";
      -    var i = 0, l = hex.length;
      -    if (hex.substring(0, 2) === '0x') {
      -        i = 2;
      -    }
      -    for (; i < l; i+=2) {
      -        var code = parseInt(hex.substr(i, 2), 16);
      -        if (code === 0) {
      -            break;
      -        }
      - 
      -        str += String.fromCharCode(code);
      -    }
      - 
      -    return str;
      -};
      -    
      -/**
      - * Shold be called to get hex representation (prefixed by 0x) of ascii string 
      - *
      - * @method fromAscii
      - * @param {String} string
      - * @returns {String} hex representation of input string
      - */
      -var toHexNative = function(str) {
      -    var hex = "";
      -    for(var i = 0; i < str.length; i++) {
      -        var n = str.charCodeAt(i).toString(16);
      -        hex += n.length < 2 ? '0' + n : n;
      -    }
      - 
      -    return hex;
      -};
      - 
      -/**
      - * Shold be called to get hex representation (prefixed by 0x) of ascii string 
      - *
      - * @method fromAscii
      - * @param {String} string
      - * @param {Number} optional padding
      - * @returns {String} hex representation of input string
      - */
      -var fromAscii = function(str, pad) {
      -    pad = pad === undefined ? 0 : pad;
      -    var hex = toHexNative(str);
      -    while (hex.length < pad*2)
      -        hex += "00";
      -    return "0x" + hex;
      -};
      - 
      -/**
      - * Should be called to get display name of contract function
      - * 
      - * @method extractDisplayName
      - * @param {String} name of function/event
      - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
      - */
      -var extractDisplayName = function (name) {
      -    var length = name.indexOf('('); 
      -    return length !== -1 ? name.substr(0, length) : name;
      -};
      - 
      -/// @returns overloaded part of function/event name
      -var extractTypeName = function (name) {
      -    /// TODO: make it invulnerable
      -    var length = name.indexOf('(');
      -    return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : "";
      -};
      - 
      -/**
      - * Filters all functions from input abi
      - *
      - * @method filterFunctions
      - * @param {Array} abi
      - * @returns {Array} abi array with filtered objects of type 'function'
      - */
      -var filterFunctions = function (json) {
      -    return json.filter(function (current) {
      -        return current.type === 'function'; 
      -    }); 
      -};
      - 
      -/**
      - * Filters all events from input abi
      - *
      - * @method filterEvents
      - * @param {Array} abi
      - * @returns {Array} abi array with filtered objects of type 'event'
      - */
      -var filterEvents = function (json) {
      -    return json.filter(function (current) {
      -        return current.type === 'event';
      -    });
      -};
      - 
      -/**
      - * Converts value to it's decimal representation in string
      - *
      - * @method toDecimal
      - * @param {String|Number|BigNumber}
      - * @return {String}
      - */
      -var toDecimal = function (value) {
      -    return toBigNumber(value).toNumber();
      -};
      - 
      -/**
      - * Converts value to it's hex representation
      - *
      - * @method fromDecimal
      - * @param {String|Number|BigNumber}
      - * @return {String}
      - */
      -var fromDecimal = function (value) {
      -    var number = toBigNumber(value);
      -    var result = number.toString(16);
      - 
      -    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
      -};
      - 
      -/**
      - * Auto converts any given value into it's hex representation.
      - *
      - * And even stringifys objects before.
      - *
      - * @method toHex
      - * @param {String|Number|BigNumber|Object}
      - * @return {String}
      - */
      -var toHex = function (val) {
      -    /*jshint maxcomplexity:7 */
      - 
      -    if (isBoolean(val))
      -        return fromDecimal(+val);
      - 
      -    if (isBigNumber(val))
      -        return fromDecimal(val);
      - 
      -    if (isObject(val))
      -        return fromAscii(JSON.stringify(val));
      - 
      -    // if its a negative number, pass it through fromDecimal
      -    if (isString(val)) {
      -        if (val.indexOf('-0x') === 0)
      -           return fromDecimal(val);
      -        else if (!isFinite(val))
      -            return fromAscii(val);
      -    }
      - 
      -    return fromDecimal(val);
      -};
      - 
      -/**
      - * Returns value of unit in Wei
      - *
      - * @method getValueOfUnit
      - * @param {String} unit the unit to convert to, default ether
      - * @returns {BigNumber} value of the unit (in Wei)
      - * @throws error if the unit is not correct:w
      - */
      -var getValueOfUnit = function (unit) {
      -    unit = unit ? unit.toLowerCase() : 'ether';
      -    var unitValue = unitMap[unit];
      -    if (unitValue === undefined) {
      -        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
      -    }
      -    return new BigNumber(unitValue, 10);
      -};
      - 
      -/**
      - * Takes a number of wei and converts it to any other ether unit.
      - *
      - * Possible units are:
      - * - kwei/ada
      - * - mwei/babbage
      - * - gwei/shannon
      - * - szabo
      - * - finney
      - * - ether
      - * - kether/grand/einstein
      - * - mether
      - * - gether
      - * - tether
      - *
      - * @method fromWei
      - * @param {Number|String} number can be a number, number string or a HEX of a decimal
      - * @param {String} unit the unit to convert to, default ether
      - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
      -*/
      -var fromWei = function(number, unit) {
      -    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));
      - 
      -    return isBigNumber(number) ? returnValue : returnValue.toString(10); 
      -};
      - 
      -/**
      - * Takes a number of a unit and converts it to wei.
      - *
      - * Possible units are:
      - * - kwei/ada
      - * - mwei/babbage
      - * - gwei/shannon
      - * - szabo
      - * - finney
      - * - ether
      - * - kether/grand/einstein
      - * - mether
      - * - gether
      - * - tether
      - *
      - * @method toWei
      - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
      - * @param {String} unit the unit to convert from, default ether
      - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
      -*/
      -var toWei = function(number, unit) {
      -    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));
      - 
      -    return isBigNumber(number) ? returnValue : returnValue.toString(10); 
      -};
      - 
      -/**
      - * Takes an input and transforms it into an bignumber
      - *
      - * @method toBigNumber
      - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
      - * @return {BigNumber} BigNumber
      -*/
      -var toBigNumber = function(number) {
      -    /*jshint maxcomplexity:5 */
      -    number = number || 0;
      -    if (isBigNumber(number))
      -        return number;
      - 
      -    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
      -        return new BigNumber(number.replace('0x',''), 16);
      -    }
      -   
      -    return new BigNumber(number.toString(10), 10);
      -};
      - 
      -/**
      - * Takes and input transforms it into bignumber and if it is negative value, into two's complement
      - *
      - * @method toTwosComplement
      - * @param {Number|String|BigNumber}
      - * @return {BigNumber}
      - */
      -var toTwosComplement = function (number) {
      -    var bigNumber = toBigNumber(number);
      -    if (bigNumber.lessThan(0)) {
      -        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
      -    }
      -    return bigNumber;
      -};
      - 
      -/**
      - * Checks if the given string has proper length
      - *
      - * @method isAddress
      - * @param {String} address the given HEX adress
      - * @return {Boolean}
      -*/
      -var isAddress = function(address) {
      -    if (!isString(address)) {
      -        return false;
      -    }
      - 
      -    return ((address.indexOf('0x') === 0 && address.length === 42) ||
      -            (address.indexOf('0x') === -1 && address.length === 40));
      -};
      - 
      -/**
      - * Returns true if object is BigNumber, otherwise false
      - *
      - * @method isBigNumber
      - * @param {Object}
      - * @return {Boolean} 
      - */
      -var isBigNumber = function (object) {
      -    return object instanceof BigNumber ||
      -        (object && object.constructor && object.constructor.name === 'BigNumber');
      -};
      - 
      -/**
      - * Returns true if object is string, otherwise false
      - * 
      - * @method isString
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isString = function (object) {
      -    return typeof object === 'string' ||
      -        (object && object.constructor && object.constructor.name === 'String');
      -};
      - 
      -/**
      - * Returns true if object is function, otherwise false
      - *
      - * @method isFunction
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isFunction = function (object) {
      -    return typeof object === 'function';
      -};
      - 
      -/**
      - * Returns true if object is Objet, otherwise false
      - *
      - * @method isObject
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isObject = function (object) {
      -    return typeof object === 'object';
      -};
      - 
      -/**
      - * Returns true if object is boolean, otherwise false
      - *
      - * @method isBoolean
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isBoolean = function (object) {
      -    return typeof object === 'boolean';
      -};
      - 
      -/**
      - * Returns true if object is array, otherwise false
      - *
      - * @method isArray
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isArray = function (object) {
      -    return object instanceof Array; 
      -};
      - 
      -/**
      - * Returns true if given string is valid json object
      - * 
      - * @method isJson
      - * @param {String}
      - * @return {Boolean}
      - */
      -var isJson = function (str) {
      -    try {
      -        return !!JSON.parse(str);
      -    } catch (e) {
      -        return false;
      -    }
      -};
      - 
      -module.exports = {
      -    findIndex: findIndex,
      -    toHex: toHex,
      -    toDecimal: toDecimal,
      -    fromDecimal: fromDecimal,
      -    toAscii: toAscii,
      -    fromAscii: fromAscii,
      -    extractDisplayName: extractDisplayName,
      -    extractTypeName: extractTypeName,
      -    filterFunctions: filterFunctions,
      -    filterEvents: filterEvents,
      -    toWei: toWei,
      -    fromWei: fromWei,
      -    toBigNumber: toBigNumber,
      -    toTwosComplement: toTwosComplement,
      -    isBigNumber: isBigNumber,
      -    isAddress: isAddress,
      -    isFunction: isFunction,
      -    isString: isString,
      -    isObject: isObject,
      -    isBoolean: isBoolean,
      -    isArray: isArray,
      -    isJson: isJson
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html deleted file mode 100644 index a2f507c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html +++ /dev/null @@ -1,519 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3.js

      -

      - - Statements: 95.08% (58 / 61)      - - - Branches: 50% (1 / 2)      - - - Functions: 90% (9 / 10)      - - - Lines: 95.08% (58 / 61)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -5 -27 -  -  -  -  -  -1 -3 -11 -  -  -  -  -1 -1 -1 -1 -1 -  -  -1 -  -  -  -4 -  -  -  -  -  -4 -  -  -  -1 -1 -1 -  -1 -1 -1 -123 -  -1 -2 -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -1 -  -4 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file web3.js
      - * @authors:
      - *   Jeffrey Wilcke <jeff@ethdev.com>
      - *   Marek Kotewicz <marek@ethdev.com>
      - *   Marian Oancea <marian@ethdev.com>
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - *   Gav Wood <g@ethdev.com>
      - * @date 2014
      - */
      - 
      -var version = require('./version.json');
      -var net = require('./web3/net');
      -var eth = require('./web3/eth');
      -var db = require('./web3/db');
      -var shh = require('./web3/shh');
      -var watches = require('./web3/watches');
      -var Filter = require('./web3/filter');
      -var utils = require('./utils/utils');
      -var formatters = require('./web3/formatters');
      -var RequestManager = require('./web3/requestmanager');
      -var c = require('./utils/config');
      -var Method = require('./web3/method');
      -var Property = require('./web3/property');
      - 
      -var web3Methods = [
      -    new Method({
      -        name: 'sha3',
      -        call: 'web3_sha3',
      -        params: 1
      -    })
      -];
      - 
      -var web3Properties = [
      -    new Property({
      -        name: 'version.client',
      -        getter: 'web3_clientVersion'
      -    }),
      -    new Property({
      -        name: 'version.network',
      -        getter: 'net_version',
      -        inputFormatter: utils.toDecimal
      -    }),
      -    new Property({
      -        name: 'version.ethereum',
      -        getter: 'net_eth',
      -        inputFormatter: utils.toDecimal
      -    }),
      -    new Property({
      -        name: 'version.whisper',
      -        getter: 'net_shh',
      -        inputFormatter: utils.toDecimal
      -    })
      -];
      - 
      -/// creates methods in a given object based on method description on input
      -/// setups api calls for these methods
      -var setupMethods = function (obj, methods) {
      -    methods.forEach(function (method) {
      -        method.attachToObject(obj);
      -    });
      -};
      - 
      -/// creates properties in a given object based on properties description on input
      -/// setups api calls for these properties
      -var setupProperties = function (obj, properties) {
      -    properties.forEach(function (property) {
      -        property.attachToObject(obj);
      -    });
      -};
      - 
      -/// setups web3 object, and it's in-browser executed methods
      -var web3 = {};
      -web3.providers = {};
      -web3.version = {};
      -web3.version.api = version.version;
      -web3.eth = {};
      - 
      -/*jshint maxparams:4 */
      -web3.eth.filter = function (fil, eventParams, options, formatter) {
      - 
      -    // if its event, treat it differently
      -    // TODO: simplify and remove
      -    Iif (fil._isEvent) {
      -        return fil(eventParams, options);
      -    }
      - 
      -    // what outputLogFormatter? that's wrong
      -    //return new Filter(fil, watches.eth(), formatters.outputLogFormatter);
      -    return new Filter(fil, watches.eth(), formatter);
      -};
      -/*jshint maxparams:3 */
      - 
      -web3.shh = {};
      -web3.shh.filter = function (fil) {
      -    return new Filter(fil, watches.shh(), formatters.outputPostFormatter);
      -};
      -web3.net = {};
      -web3.db = {};
      -web3.setProvider = function (provider) {
      -    RequestManager.getInstance().setProvider(provider);
      -};
      -web3.reset = function () {
      -    RequestManager.getInstance().reset();
      -};
      -web3.toHex = utils.toHex;
      -web3.toAscii = utils.toAscii;
      -web3.fromAscii = utils.fromAscii;
      -web3.toDecimal = utils.toDecimal;
      -web3.fromDecimal = utils.fromDecimal;
      -web3.toBigNumber = utils.toBigNumber;
      -web3.toWei = utils.toWei;
      -web3.fromWei = utils.fromWei;
      -web3.isAddress = utils.isAddress;
      - 
      -// ADD defaultblock
      -Object.defineProperty(web3.eth, 'defaultBlock', {
      -    get: function () {
      -        return c.ETH_DEFAULTBLOCK;
      -    },
      -    set: function (val) {
      -        c.ETH_DEFAULTBLOCK = val;
      -        return c.ETH_DEFAULTBLOCK;
      -    }
      -});
      - 
      - 
      -/// setups all api methods
      -setupMethods(web3, web3Methods);
      -setupProperties(web3, web3Properties);
      -setupMethods(web3.net, net.methods);
      -setupProperties(web3.net, net.properties);
      -setupMethods(web3.eth, eth.methods);
      -setupProperties(web3.eth, eth.properties);
      -setupMethods(web3.db, db.methods);
      -setupMethods(web3.shh, shh.methods);
      - 
      -module.exports = web3;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html deleted file mode 100644 index 07a83c0..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html +++ /dev/null @@ -1,738 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/contract.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/contract.js

      -

      - - Statements: 61.22% (60 / 98)      - - - Branches: 34.78% (8 / 23)      - - - Functions: 61.9% (13 / 21)      - - - Lines: 60.82% (59 / 97)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -1 -  -7 -  -  -  -  -  -  -7 -  -  -  -  -  -7 -  -  -  -  -  -  -7 -7 -28 -  -  -  -  -  -  -  -1 -7 -7 -  -  -7 -  -8 -8 -  -8 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -8 -7 -  -  -8 -  -  -  -1 -7 -7 -  -  -  -  -  -7 -  -  -  -  -  -  -  -  -  -1 -  -7 -  -2 -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -  -2 -  -2 -2 -  -2 -2 -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -7 -7 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -7 -11 -7 -8 -7 -  -  -  -7 -7 -7 -7 -7 -  -7 -  -  -1 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file contract.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2014
      - */
      - 
      -var web3 = require('../web3'); 
      -var abi = require('../solidity/abi');
      -var utils = require('../utils/utils');
      -var eventImpl = require('./event');
      -var signature = require('./signature');
      - 
      -var addFunctionRelatedPropertiesToContract = function (contract) {
      -    
      -    contract.call = function (options) {
      -        contract._isTransaction = false;
      -        contract._options = options;
      -        return contract;
      -    };
      - 
      - 
      -    contract.sendTransaction = function (options) {
      -        contract._isTransaction = true;
      -        contract._options = options;
      -        return contract;
      -    };
      -    // DEPRECATED
      -    contract.transact = function (options) {
      - 
      -        console.warn('myContract.transact() is deprecated please use myContract.sendTransaction() instead.');
      - 
      -        return contract.sendTransaction(options);
      -    };
      - 
      -    contract._options = {};
      -    ['gas', 'gasPrice', 'value', 'from'].forEach(function(p) {
      -        contract[p] = function (v) {
      -            contract._options[p] = v;
      -            return contract;
      -        };
      -    });
      - 
      -};
      - 
      -var addFunctionsToContract = function (contract, desc, address) {
      -    var inputParser = abi.inputParser(desc);
      -    var outputParser = abi.outputParser(desc);
      - 
      -    // create contract functions
      -    utils.filterFunctions(desc).forEach(function (method) {
      - 
      -        var displayName = utils.extractDisplayName(method.name);
      -        var typeName = utils.extractTypeName(method.name);
      - 
      -        var impl = function () {
      -            /*jshint maxcomplexity:7 */
      -            var params = Array.prototype.slice.call(arguments);
      -            var sign = signature.functionSignatureFromAscii(method.name);
      -            var parsed = inputParser[displayName][typeName].apply(null, params);
      - 
      -            var options = contract._options || {};
      -            options.to = address;
      -            options.data = sign + parsed;
      -            
      -            var isTransaction = contract._isTransaction === true || (contract._isTransaction !== false && !method.constant);
      -            var collapse = options.collapse !== false;
      -            
      -            // reset
      -            contract._options = {};
      -            contract._isTransaction = null;
      - 
      -            if (isTransaction) {
      -                
      -                // transactions do not have any output, cause we do not know, when they will be processed
      -                web3.eth.sendTransaction(options);
      -                return;
      -            }
      -            
      -            var output = web3.eth.call(options);
      -            var ret = outputParser[displayName][typeName](output);
      -            if (collapse)
      -            {
      -                if (ret.length === 1)
      -                    ret = ret[0];
      -                else if (ret.length === 0)
      -                    ret = null;
      -            }
      -            return ret;
      -        };
      - 
      -        if (contract[displayName] === undefined) {
      -            contract[displayName] = impl;
      -        }
      - 
      -        contract[displayName][typeName] = impl;
      -    });
      -};
      - 
      -var addEventRelatedPropertiesToContract = function (contract, desc, address) {
      -    contract.address = address;
      -    contract._onWatchEventResult = function (data) {
      -        var matchingEvent = event.getMatchingEvent(utils.filterEvents(desc));
      -        var parser = eventImpl.outputParser(matchingEvent);
      -        return parser(data);
      -    };
      -    
      -    Object.defineProperty(contract, 'topics', {
      -        get: function() {
      -            return utils.filterEvents(desc).map(function (e) {
      -                return signature.eventSignatureFromAscii(e.name);
      -            });
      -        }
      -    });
      - 
      -};
      - 
      -var addEventsToContract = function (contract, desc, address) {
      -    // create contract events
      -    utils.filterEvents(desc).forEach(function (e) {
      - 
      -        var impl = function () {
      -            var params = Array.prototype.slice.call(arguments);
      -            var sign = signature.eventSignatureFromAscii(e.name);
      -            var event = eventImpl.inputParser(address, sign, e);
      -            var o = event.apply(null, params);
      -            var outputFormatter = function (data) {
      -                var parser = eventImpl.outputParser(e);
      -                return parser(data);
      -            };
      -            return web3.eth.filter(o, undefined, undefined, outputFormatter);
      -        };
      -        
      -        // this property should be used by eth.filter to check if object is an event
      -        impl._isEvent = true;
      - 
      -        var displayName = utils.extractDisplayName(e.name);
      -        var typeName = utils.extractTypeName(e.name);
      - 
      -        Eif (contract[displayName] === undefined) {
      -            contract[displayName] = impl;
      -        }
      - 
      -        contract[displayName][typeName] = impl;
      - 
      -    });
      -};
      - 
      - 
      -/**
      - * This method should be called when we want to call / transact some solidity method from javascript
      - * it returns an object which has same methods available as solidity contract description
      - * usage example: 
      - *
      - * var abi = [{
      - *      name: 'myMethod',
      - *      inputs: [{ name: 'a', type: 'string' }],
      - *      outputs: [{name: 'd', type: 'string' }]
      - * }];  // contract abi
      - *
      - * var MyContract = web3.eth.contract(abi); // creation of contract prototype
      - *
      - * var contractInstance = new MyContract('0x0123123121');
      - *
      - * contractInstance.myMethod('this is test string param for call'); // myMethod call (implicit, default)
      - * contractInstance.call().myMethod('this is test string param for call'); // myMethod call (explicit)
      - * contractInstance.sendTransaction().myMethod('this is test string param for transact'); // myMethod sendTransaction
      - *
      - * @param abi - abi json description of the contract, which is being created
      - * @returns contract object
      - */
      -var contract = function (abi) {
      - 
      -    // return prototype
      -    Eif(abi instanceof Array && arguments.length === 1) {
      -        return Contract.bind(null, abi);
      - 
      -    // deprecated: auto initiate contract
      -    } else {
      - 
      -        console.warn('Initiating a contract like this is deprecated please use var MyContract = eth.contract(abi); new MyContract(address); instead.');
      - 
      -        return new Contract(arguments[1], arguments[0]);
      -    }
      - 
      -};
      - 
      -function Contract(abi, address) {
      - 
      -    // workaround for invalid assumption that method.name is the full anonymous prototype of the method.
      -    // it's not. it's just the name. the rest of the code assumes it's actually the anonymous
      -    // prototype, so we make it so as a workaround.
      -    // TODO: we may not want to modify input params, maybe use copy instead?
      -    abi.forEach(function (method) {
      -        if (method.name.indexOf('(') === -1) {
      -            var displayName = method.name;
      -            var typeName = method.inputs.map(function(i){return i.type; }).join();
      -            method.name = displayName + '(' + typeName + ')';
      -        }
      -    });
      - 
      -    var result = {};
      -    addFunctionRelatedPropertiesToContract(result);
      -    addFunctionsToContract(result, abi, address);
      -    addEventRelatedPropertiesToContract(result, abi, address);
      -    addEventsToContract(result, abi, address);
      - 
      -    return result;
      -}
      - 
      -module.exports = contract;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html deleted file mode 100644 index 4b72666..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/db.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/db.js

      -

      - - Statements: 100% (7 / 7)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (7 / 7)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -1 -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file db.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Method = require('./method');
      - 
      -var putString = new Method({
      -    name: 'putString',
      -    call: 'db_putString',
      -    params: 3
      -});
      - 
      - 
      -var getString = new Method({
      -    name: 'getString',
      -    call: 'db_getString',
      -    params: 2
      -});
      - 
      -var putHex = new Method({
      -    name: 'putHex',
      -    call: 'db_putHex',
      -    params: 3
      -});
      - 
      -var getHex = new Method({
      -    name: 'getHex',
      -    call: 'db_getHex',
      -    params: 2
      -});
      - 
      -var methods = [
      -    putString, getString, putHex, getHex
      -];
      - 
      -module.exports = {
      -    methods: methods
      -};
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html deleted file mode 100644 index 6076cc0..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/errors.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/errors.js

      -

      - - Statements: 33.33% (2 / 6)      - - - Branches: 0% (0 / 5)      - - - Functions: 0% (0 / 1)      - - - Lines: 33.33% (2 / 6)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file errors.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      - 
      -module.exports = {
      -    InvalidNumberOfParams: new Error('Invalid number of input parameters'),
      -    InvalidProvider: new Error('Providor not set or invalid'),
      -    InvalidResponse: function(result){
      -        var message = 'Invalid JSON RPC response';
      - 
      -        if(utils.isObject(result) && result.error && result.error.message) {
      -            message = result.error.message;
      -        }
      - 
      -        return new Error(message);
      -    }
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html deleted file mode 100644 index 2dda846..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html +++ /dev/null @@ -1,819 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/eth.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/eth.js

      -

      - - Statements: 100% (36 / 36)      - - - Branches: 100% (20 / 20)      - - - Functions: 100% (7 / 7)      - - - Lines: 100% (36 / 36)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -6 -  -  -1 -4 -  -  -1 -6 -  -  -1 -4 -  -  -1 -4 -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -6 -  -  -  -1 -  -  -  -6 -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/**
      - * @file eth.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @author Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -/**
      - * Web3
      - * 
      - * @module web3
      - */
      - 
      -/**
      - * Eth methods and properties
      - *
      - * An example method object can look as follows:
      - *
      - *      {
      - *      name: 'getBlock',
      - *      call: blockCall,
      - *      params: 2,
      - *      outputFormatter: formatters.outputBlockFormatter,
      - *      inputFormatter: [ // can be a formatter funciton or an array of functions. Where each item in the array will be used for one parameter
      - *           utils.toHex, // formats paramter 1
      - *           function(param){ return !!param; } // formats paramter 2
      - *         ]
      - *       },
      - *
      - * @class [web3] eth
      - * @constructor
      - */
      - 
      -"use strict";
      - 
      -var formatters = require('./formatters');
      -var utils = require('../utils/utils');
      -var Method = require('./method');
      -var Property = require('./property');
      - 
      -var blockCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
      -};
      - 
      -var transactionFromBlockCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
      -};
      - 
      -var uncleCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
      -};
      - 
      -var getBlockTransactionCountCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
      -};
      - 
      -var uncleCountCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
      -};
      - 
      -/// @returns an array of objects describing web3.eth api methods
      - 
      -var getBalance = new Method({
      -    name: 'getBalance', 
      -    call: 'eth_getBalance', 
      -    params: 2,
      -    inputFormatter: [utils.toHex, formatters.inputDefaultBlockNumberFormatter],
      -    outputFormatter: formatters.outputBigNumberFormatter
      -});
      - 
      -var getStorageAt = new Method({
      -    name: 'getStorageAt', 
      -    call: 'eth_getStorageAt', 
      -    params: 3,
      -    inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
      -});
      - 
      -var getCode = new Method({
      -    name: 'getCode',
      -    call: 'eth_getCode',
      -    params: 2,
      -    inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter]
      -});
      - 
      -var getBlock = new Method({
      -    name: 'getBlock', 
      -    call: blockCall,
      -    params: 2,
      -    inputFormatter: [utils.toHex, function (val) { return !!val; }],
      -    outputFormatter: formatters.outputBlockFormatter
      -});
      - 
      -var getUncle = new Method({
      -    name: 'getUncle',
      -    call: uncleCall,
      -    params: 3,
      -    inputFormatter: [utils.toHex, utils.toHex, function (val) { return !!val; }],
      -    outputFormatter: formatters.outputBlockFormatter,
      - 
      -});
      - 
      -var getCompilers = new Method({
      -    name: 'getCompilers',
      -    call: 'eth_getCompilers',
      -    params: 0
      -});
      - 
      -var getBlockTransactionCount = new Method({
      -    name: 'getBlockTransactionCount',
      -    call: getBlockTransactionCountCall,
      -    params: 1,
      -    inputFormatter: [utils.toHex],
      -    outputFormatter: utils.toDecimal
      -});
      - 
      -var getBlockUncleCount = new Method({
      -    name: 'getBlockUncleCount',
      -    call: uncleCountCall,
      -    params: 1,
      -    inputFormatter: [utils.toHex],
      -    outputFormatter: utils.toDecimal
      -});
      - 
      -var getTransaction = new Method({
      -    name: 'getTransaction',
      -    call: 'eth_getTransactionByHash',
      -    params: 1,
      -    outputFormatter: formatters.outputTransactionFormatter
      -});
      - 
      -var getTransactionFromBlock = new Method({
      -    name: 'getTransactionFromBlock',
      -    call: transactionFromBlockCall,
      -    params: 2,
      -    inputFormatter: [utils.toHex, utils.toHex],
      -    outputFormatter: formatters.outputTransactionFormatter
      -});
      - 
      -var getTransactionCount = new Method({
      -    name: 'getTransactionCount',
      -    call: 'eth_getTransactionCount',
      -    params: 2,
      -    inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
      -    outputFormatter: utils.toDecimal
      -});
      - 
      -var sendTransaction = new Method({
      -    name: 'sendTransaction',
      -    call: 'eth_sendTransaction',
      -    params: 1,
      -    inputFormatter: [formatters.inputTransactionFormatter]
      -});
      - 
      -var call = new Method({
      -    name: 'call',
      -    call: 'eth_call',
      -    params: 2,
      -    inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
      -});
      - 
      -var compileSolidity = new Method({
      -    name: 'compile.solidity',
      -    call: 'eth_compileSolidity',
      -    params: 1
      -});
      - 
      -var compileLLL = new Method({
      -    name: 'compile.lll',
      -    call: 'eth_compileLLL',
      -    params: 1
      -});
      - 
      -var compileSerpent = new Method({
      -    name: 'compile.serpent',
      -    call: 'eth_compileSerpent',
      -    params: 1
      -});
      - 
      -var flush = new Method({
      -    name: 'flush',
      -    call: 'eth_flush',
      -    params: 0
      -});
      - 
      -var methods = [
      -    getBalance,
      -    getStorageAt,
      -    getCode,
      -    getBlock,
      -    getUncle,
      -    getCompilers,
      -    getBlockTransactionCount,
      -    getBlockUncleCount,
      -    getTransaction,
      -    getTransactionFromBlock,
      -    getTransactionCount,
      -    call,
      -    sendTransaction,
      -    compileSolidity,
      -    compileLLL,
      -    compileSerpent,
      -    flush
      -];
      - 
      -/// @returns an array of objects describing web3.eth api properties
      - 
      - 
      - 
      -var properties = [
      -    new Property({
      -        name: 'coinbase',
      -        getter: 'eth_coinbase'
      -    }),
      -    new Property({
      -        name: 'mining',
      -        getter: 'eth_mining'
      -    }),
      -    new Property({
      -        name: 'gasPrice',
      -        getter: 'eth_gasPrice',
      -        outputFormatter: formatters.inputNumberFormatter
      -    }),
      -    new Property({
      -        name: 'accounts',
      -        getter: 'eth_accounts'
      -    }),
      -    new Property({
      -        name: 'blockNumber',
      -        getter: 'eth_blockNumber',
      -        outputFormatter: utils.toDecimal
      -    })
      -];
      - 
      -module.exports = {
      -    methods: methods,
      -    properties: properties
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html deleted file mode 100644 index 708e5bd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/event.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/event.js

      -

      - - Statements: 86.89% (53 / 61)      - - - Branches: 75% (12 / 16)      - - - Functions: 93.33% (14 / 15)      - - - Lines: 86.67% (52 / 60)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -1 -9 -24 -  -  -  -1 -3 -3 -  -  -3 -  -  -  -3 -  -  -1 -  -4 -3 -  -3 -3 -1 -2 -  -  -2 -  -  -  -1 -  -  -5 -5 -5 -5 -5 -5 -4 -  -5 -  -  -  -1 -3 -3 -3 -9 -9 -5 -  -4 -  -9 -9 -  -  -  -1 -  -3 -3 -  -  -  -  -  -  -3 -  -  -3 -  -3 -5 -3 -  -3 -3 -  -3 -  -3 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file event.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2014
      - */
      - 
      -var abi = require('../solidity/abi');
      -var utils = require('../utils/utils');
      -var signature = require('./signature');
      - 
      -/// filter inputs array && returns only indexed (or not) inputs
      -/// @param inputs array
      -/// @param bool if result should be an array of indexed params on not
      -/// @returns array of (not?) indexed params
      -var filterInputs = function (inputs, indexed) {
      -    return inputs.filter(function (current) {
      -        return current.indexed === indexed;
      -    });
      -};
      - 
      -var inputWithName = function (inputs, name) {
      -    var index = utils.findIndex(inputs, function (input) {
      -        return input.name === name;
      -    });
      -    
      -    Iif (index === -1) {
      -        console.error('indexed param with name ' + name + ' not found');
      -        return undefined;
      -    }
      -    return inputs[index];
      -};
      - 
      -var indexedParamsToTopics = function (event, indexed) {
      -    // sort keys?
      -    return Object.keys(indexed).map(function (key) {
      -        var inputs = [inputWithName(filterInputs(event.inputs, true), key)];
      - 
      -        var value = indexed[key];
      -        if (value instanceof Array) {
      -            return value.map(function (v) {
      -                return abi.formatInput(inputs, [v]);
      -            }); 
      -        }
      -        return '0x' + abi.formatInput(inputs, [value]);
      -    });
      -};
      - 
      -var inputParser = function (address, sign, event) {
      -    
      -    // valid options are 'earliest', 'latest', 'offset' and 'max', as defined for 'eth.filter'
      -    return function (indexed, options) {
      -        var o = options || {};
      -        o.address = address;
      -        o.topics = [];
      -        o.topics.push(sign);
      -        if (indexed) {
      -            o.topics = o.topics.concat(indexedParamsToTopics(event, indexed));
      -        }
      -        return o;
      -    };
      -};
      - 
      -var getArgumentsObject = function (inputs, indexed, notIndexed) {
      -    var indexedCopy = indexed.slice();
      -    var notIndexedCopy = notIndexed.slice();
      -    return inputs.reduce(function (acc, current) {
      -        var value;
      -        if (current.indexed)
      -            value = indexedCopy.splice(0, 1)[0];
      -        else
      -            value = notIndexedCopy.splice(0, 1)[0];
      - 
      -        acc[current.name] = value;
      -        return acc;
      -    }, {}); 
      -};
      - 
      -var outputParser = function (event) {
      -    
      -    return function (output) {
      -        var result = {
      -            event: utils.extractDisplayName(event.name),
      -            number: output.number,
      -            hash: output.hash,
      -            args: {}
      -        };
      - 
      -        Iif (!output.topics) {
      -            return result;
      -        }
      -        output.data = output.data || '';
      -       
      -        var indexedOutputs = filterInputs(event.inputs, true);
      -        var indexedData = "0x" + output.topics.slice(1, output.topics.length).map(function (topics) { return topics.slice(2); }).join("");
      -        var indexedRes = abi.formatOutput(indexedOutputs, indexedData);
      - 
      -        var notIndexedOutputs = filterInputs(event.inputs, false);
      -        var notIndexedRes = abi.formatOutput(notIndexedOutputs, output.data);
      - 
      -        result.args = getArgumentsObject(event.inputs, indexedRes, notIndexedRes);
      - 
      -        return result;
      -    };
      -};
      - 
      -var getMatchingEvent = function (events, payload) {
      -    for (var i = 0; i < events.length; i++) {
      -        var sign = signature.eventSignatureFromAscii(events[i].name); 
      -        if (sign === payload.topics[0]) {
      -            return events[i];
      -        }
      -    }
      -    return undefined;
      -};
      - 
      - 
      -module.exports = {
      -    inputParser: inputParser,
      -    outputParser: outputParser,
      -    getMatchingEvent: getMatchingEvent
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html deleted file mode 100644 index 1378fef..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/filter.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/filter.js

      -

      - - Statements: 85.11% (40 / 47)      - - - Branches: 72.22% (13 / 18)      - - - Functions: 76.92% (10 / 13)      - - - Lines: 85.11% (40 / 47)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -1 -  -5 -2 -  -  -3 -  -  -3 -3 -4 -  -  -3 -6 -4 -  -2 -  -  -2 -  -  -  -3 -  -  -  -  -  -  -  -  -1 -5 -5 -20 -  -5 -5 -5 -5 -5 -  -  -1 -2 -2 -  -2 -2 -  -  -  -  -  -2 -2 -2 -2 -  -  -  -  -2 -  -  -  -  -  -1 -1 -1 -1 -  -  -1 -  -  -  -  -  -  -  -1 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file filter.js
      - * @authors:
      - *   Jeffrey Wilcke <jeff@ethdev.com>
      - *   Marek Kotewicz <marek@ethdev.com>
      - *   Marian Oancea <marian@ethdev.com>
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - *   Gav Wood <g@ethdev.com>
      - * @date 2014
      - */
      - 
      -var RequestManager = require('./requestmanager');
      -var utils = require('../utils/utils');
      - 
      -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
      -/// @param should be string or object
      -/// @returns options string or object
      -var getOptions = function (options) {
      - 
      -    if (utils.isString(options)) {
      -        return options;
      -    } 
      - 
      -    options = options || {};
      - 
      -    // make sure topics, get converted to hex
      -    options.topics = options.topics || [];
      -    options.topics = options.topics.map(function(topic){
      -        return utils.toHex(topic);
      -    });
      - 
      -    var asBlockNumber = function (n) {
      -        if (typeof n === 'undefined') {
      -            return undefined;
      -        }
      -        Iif (n === 'latest' || n === 'pending') {
      -           return n; 
      -        }
      -        return utils.toHex(n);
      -    };
      - 
      -    // lazy load
      -    return {
      -        topics: options.topics,
      -        to: options.to,
      -        address: options.address,
      -        fromBlock: asBlockNumber(options.fromBlock),
      -        toBlock: asBlockNumber(options.toBlock) 
      -    }; 
      -};
      - 
      -var Filter = function (options, methods, formatter) {
      -    var implementation = {};
      -    methods.forEach(function (method) {
      -        method.attachToObject(implementation);
      -    });
      -    this.options = getOptions(options);
      -    this.implementation = implementation;
      -    this.callbacks = [];
      -    this.formatter = formatter;
      -    this.filterId = this.implementation.newFilter(this.options);
      -};
      - 
      -Filter.prototype.watch = function (callback) {
      -    this.callbacks.push(callback);
      -    var self = this;
      - 
      -    var onMessage = function (error, messages) {
      -        Iif (error) {
      -            return self.callbacks.forEach(function (callback) {
      -                callback(error);
      -            });
      -        }
      - 
      -        messages.forEach(function (message) {
      -            message = self.formatter ? self.formatter(message) : message;
      -            self.callbacks.forEach(function (callback) {
      -                callback(null, message);
      -            });
      -        });
      -    };
      - 
      -    RequestManager.getInstance().startPolling({
      -        method: this.implementation.poll.call,
      -        params: [this.filterId],
      -    }, this.filterId, onMessage, this.stopWatching.bind(this));
      -};
      - 
      -Filter.prototype.stopWatching = function () {
      -    RequestManager.getInstance().stopPolling(this.filterId);
      -    this.implementation.uninstallFilter(this.filterId);
      -    this.callbacks = [];
      -};
      - 
      -Filter.prototype.get = function () {
      -    var logs = this.implementation.getLogs(this.filterId);
      -    var self = this;
      -    return logs.map(function (log) {
      -        return self.formatter ? self.formatter(log) : log;
      -    });
      -};
      - 
      -module.exports = Filter;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html deleted file mode 100644 index dc57471..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html +++ /dev/null @@ -1,681 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/formatters.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/formatters.js

      -

      - - Statements: 89.39% (59 / 66)      - - - Branches: 64.29% (9 / 14)      - - - Functions: 92.31% (12 / 13)      - - - Lines: 89.39% (59 / 66)      - - Ignored: none      -

      -
      All files » ethereum.js/lib/web3/ » formatters.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -1 -8 -  -  -1 -18 -  -  -  -  -  -  -  -  -  -1 -  -  -1 -  -  -  -  -1 -3 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -11 -11 -11 -11 -11 -11 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -13 -13 -13 -13 -13 -  -13 -13 -13 -  -13 -12 -20 -4 -  -  -  -13 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -  -1 -  -  -  -  -1 -2 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -1 -1 -  -1 -1 -  -  -  -1 -2 -  -  -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file formatters.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @author Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      -var config = require('../utils/config');
      - 
      -/**
      - * Should the format output to a big number
      - *
      - * @method outputBigNumberFormatter
      - * @param {String|Number|BigNumber}
      - * @returns {BigNumber} object
      - */
      -var outputBigNumberFormatter = function (number) {
      -    return utils.toBigNumber(number);
      -};
      - 
      -var inputDefaultBlockNumberFormatter = function (blockNumber) {
      -    return blockNumber === undefined ? config.ETH_DEFAULTBLOCK : utils.toHex(blockNumber); // instead use default block number here
      -};
      - 
      -/**
      - * Formats the input of a transaction and converts all values to HEX
      - *
      - * @method inputTransactionFormatter
      - * @param {Object} transaction options
      - * @returns object
      -*/
      -var inputTransactionFormatter = function (options){
      - 
      -    // make code -> data
      -    Iif (options.code) {
      -        options.data = options.code;
      -        delete options.code;
      -    }
      - 
      -    ['gasPrice', 'gas', 'value'].forEach(function(key){
      -        options[key] = utils.fromDecimal(options[key]);
      -    });
      - 
      -    return options; 
      -};
      - 
      -/**
      - * Formats the output of a transaction to its proper values
      - * 
      - * @method outputTransactionFormatter
      - * @param {Object} transaction
      - * @returns {Object} transaction
      -*/
      -var outputTransactionFormatter = function (tx){
      -    tx.blockNumber = utils.toDecimal(tx.blockNumber);
      -    tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
      -    tx.gas = utils.toDecimal(tx.gas);
      -    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
      -    tx.value = utils.toBigNumber(tx.value);
      -    return tx;
      -};
      - 
      -/**
      - * Formats the input of a call and converts all values to HEX
      - *
      - * @method inputCallFormatter
      - * @param {Object} transaction options
      - * @returns object
      -*/
      -var inputCallFormatter = function (options){
      -    
      -    // make code -> data
      -    if (options.code) {
      -        options.data = options.code;
      -        delete options.code;
      -    }
      - 
      -    return options; 
      -};
      - 
      -/**
      - * Formats the output of a block to its proper values
      - *
      - * @method outputBlockFormatter
      - * @param {Object} block object 
      - * @returns {Object} block object
      -*/
      -var outputBlockFormatter = function(block) {
      - 
      -    // transform to number
      -    block.gasLimit = utils.toDecimal(block.gasLimit);
      -    block.gasUsed = utils.toDecimal(block.gasUsed);
      -    block.size = utils.toDecimal(block.size);
      -    block.timestamp = utils.toDecimal(block.timestamp);
      -    block.number = utils.toDecimal(block.number);
      - 
      -    block.minGasPrice = utils.toBigNumber(block.minGasPrice);
      -    block.difficulty = utils.toBigNumber(block.difficulty);
      -    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);
      - 
      -    if (utils.isArray(block.transactions)) {
      -        block.transactions.forEach(function(item){
      -            if(!utils.isString(item))
      -                return outputTransactionFormatter(item);
      -        });
      -    }
      - 
      -    return block;
      -};
      - 
      -/**
      - * Formats the output of a log
      - * 
      - * @method outputLogFormatter
      - * @param {Object} log object
      - * @returns {Object} log
      -*/
      -var outputLogFormatter = function(log){
      -    log.blockNumber = utils.toDecimal(log.blockNumber);
      -    log.transactionIndex = utils.toDecimal(log.transactionIndex);
      -    log.logIndex = utils.toDecimal(log.logIndex);
      - 
      -    return log;
      -};
      - 
      - 
      -/**
      - * Formats the input of a whisper post and converts all values to HEX
      - *
      - * @method inputPostFormatter
      - * @param {Object} transaction object
      - * @returns {Object}
      -*/
      -var inputPostFormatter = function(post){
      - 
      -    post.payload = utils.toHex(post.payload);
      -    post.ttl = utils.fromDecimal(post.ttl);
      -    post.priority = utils.fromDecimal(post.priority);
      - 
      -    Iif(!utils.isArray(post.topics)) {
      -        post.topics = [post.topics];
      -    }
      - 
      -    // format the following options
      -    post.topics = post.topics.map(function(topic){
      -        return utils.fromAscii(topic);
      -    });
      - 
      -    return post; 
      -};
      - 
      -/**
      - * Formats the output of a received post message
      - *
      - * @method outputPostFormatter
      - * @param {Object}
      - * @returns {Object}
      - */
      -var outputPostFormatter = function(post){
      - 
      -    post.expiry = utils.toDecimal(post.expiry);
      -    post.sent = utils.toDecimal(post.sent);
      -    post.ttl = utils.toDecimal(post.ttl);
      -    post.workProved = utils.toDecimal(post.workProved);
      -    post.payloadRaw = post.payload;
      -    post.payload = utils.toAscii(post.payload);
      - 
      -    Eif (utils.isJson(post.payload)) {
      -        post.payload = JSON.parse(post.payload);
      -    }
      - 
      -    // format the following options
      -    post.topics = post.topics.map(function(topic){
      -        return utils.toAscii(topic);
      -    });
      - 
      -    return post;
      -};
      - 
      -module.exports = {
      -    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
      -    inputTransactionFormatter: inputTransactionFormatter,
      -    inputCallFormatter: inputCallFormatter,
      -    inputPostFormatter: inputPostFormatter,
      -    outputBigNumberFormatter: outputBigNumberFormatter,
      -    outputTransactionFormatter: outputTransactionFormatter,
      -    outputBlockFormatter: outputBlockFormatter,
      -    outputLogFormatter: outputLogFormatter,
      -    outputPostFormatter: outputPostFormatter
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html deleted file mode 100644 index 109c174..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/httpprovider.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/httpprovider.js

      -

      - - Statements: 100% (16 / 16)      - - - Branches: 75% (3 / 4)      - - - Functions: 100% (4 / 4)      - - - Lines: 100% (16 / 16)      - - Ignored: none      -

      -
      All files » ethereum.js/lib/web3/ » httpprovider.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -2 -2 -  -  -2 -1 -  -1 -1 -  -  -  -  -  -  -1 -  -  -2 -1 -1 -1 -  -1 -  -  -  -1 -1 -  -  -2 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file httpprovider.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - *   Marian Oancea <marian@ethdev.com>
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2014
      - */
      - 
      -"use strict";
      - 
      -var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore:line
      - 
      -var HttpProvider = function (host) {
      -    this.host = host || 'http://localhost:8080';
      -};
      - 
      -HttpProvider.prototype.send = function (payload) {
      -    var request = new XMLHttpRequest();
      - 
      -    request.open('POST', this.host, false);
      -    request.send(JSON.stringify(payload));
      - 
      -    // check request.status
      -    // TODO: throw an error here! it cannot silently fail!!!
      -    //if (request.status !== 200) {
      -        //return;
      -    //}
      -    return JSON.parse(request.responseText);
      -};
      - 
      -HttpProvider.prototype.sendAsync = function (payload, callback) {
      -    var request = new XMLHttpRequest();
      -    request.onreadystatechange = function() {
      -        Eif (request.readyState === 4) {
      -            // TODO: handle the error properly here!!!
      -            callback(null, JSON.parse(request.responseText));
      -        }
      -    };
      - 
      -    request.open('POST', this.host, true);
      -    request.send(JSON.stringify(payload));
      -};
      - 
      -module.exports = HttpProvider;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html deleted file mode 100644 index 974444a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/ - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/

      -

      - - Statements: 85.45% (464 / 543)      - - - Branches: 70.52% (122 / 173)      - - - Functions: 86.78% (105 / 121)      - - - Lines: 85.4% (462 / 541)      - - Ignored: none      -

      -
      All files » ethereum.js/lib/web3/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      contract.js61.22%(60 / 98)34.78%(8 / 23)61.9%(13 / 21)60.82%(59 / 97)
      db.js100%(7 / 7)100%(0 / 0)100%(0 / 0)100%(7 / 7)
      errors.js33.33%(2 / 6)0%(0 / 5)0%(0 / 1)33.33%(2 / 6)
      eth.js100%(36 / 36)100%(20 / 20)100%(7 / 7)100%(36 / 36)
      event.js86.89%(53 / 61)75%(12 / 16)93.33%(14 / 15)86.67%(52 / 60)
      filter.js85.11%(40 / 47)72.22%(13 / 18)76.92%(10 / 13)85.11%(40 / 47)
      formatters.js89.39%(59 / 66)64.29%(9 / 14)92.31%(12 / 13)89.39%(59 / 66)
      httpprovider.js100%(16 / 16)75%(3 / 4)100%(4 / 4)100%(16 / 16)
      jsonrpc.js88.89%(16 / 18)81.82%(9 / 11)100%(6 / 6)88.89%(16 / 18)
      method.js100%(47 / 47)100%(22 / 22)100%(11 / 11)100%(47 / 47)
      net.js100%(5 / 5)100%(0 / 0)100%(0 / 0)100%(5 / 5)
      property.js91.3%(21 / 23)70%(7 / 10)66.67%(4 / 6)91.3%(21 / 23)
      qtsync.js100%(5 / 5)100%(0 / 0)100%(2 / 2)100%(5 / 5)
      requestmanager.js85.53%(65 / 76)60.71%(17 / 28)100%(17 / 17)85.53%(65 / 76)
      shh.js100%(9 / 9)100%(0 / 0)100%(0 / 0)100%(9 / 9)
      signature.js100%(7 / 7)100%(0 / 0)100%(2 / 2)100%(7 / 7)
      watches.js100%(16 / 16)100%(2 / 2)100%(3 / 3)100%(16 / 16)
      -
      -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html deleted file mode 100644 index 3647bad..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/jsonrpc.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/jsonrpc.js

      -

      - - Statements: 88.89% (16 / 18)      - - - Branches: 81.82% (9 / 11)      - - - Functions: 100% (6 / 6)      - - - Lines: 88.89% (16 / 18)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -175 -  -  -175 -  -  -  -  -  -1 -172 -172 -  -  -  -  -  -  -  -  -  -  -1 -90 -  -  -90 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -95 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -4 -4 -4 -  -  -  -1 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file jsonrpc.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Jsonrpc = function () {
      -    // singleton pattern
      -    Iif (arguments.callee._singletonInstance) {
      -        return arguments.callee._singletonInstance;
      -    }
      -    this.messageId = 1;
      -};
      - 
      -/**
      - * @return {Jsonrpc} singleton
      - */
      -Jsonrpc.getInstance = function () {
      -    var instance = new Jsonrpc();
      -    return instance;
      -};
      - 
      -/**
      - * Should be called to valid json create payload object
      - *
      - * @method toPayload
      - * @param {Function} method of jsonrpc call, required
      - * @param {Array} params, an array of method params, optional
      - * @returns {Object} valid jsonrpc payload object
      - */
      -Jsonrpc.prototype.toPayload = function (method, params) {
      -    Iif (!method)
      -        console.error('jsonrpc method should be specified!');
      - 
      -    return {
      -        jsonrpc: '2.0',
      -        method: method,
      -        params: params || [],
      -        id: this.messageId++
      -    }; 
      -};
      - 
      -/**
      - * Should be called to check if jsonrpc response is valid
      - *
      - * @method isValidResponse
      - * @param {Object}
      - * @returns {Boolean} true if response is valid, otherwise false 
      - */
      -Jsonrpc.prototype.isValidResponse = function (response) {
      -    return !!response &&
      -        !response.error &&
      -        response.jsonrpc === '2.0' &&
      -        typeof response.id === 'number' &&
      -        response.result !== undefined; // only undefined is not valid json object
      -};
      - 
      -/**
      - * Should be called to create batch payload object
      - *
      - * @method toBatchPayload
      - * @param {Array} messages, an array of objects with method (required) and params (optional) fields
      - * @returns {Array} batch payload
      - */
      -Jsonrpc.prototype.toBatchPayload = function (messages) {
      -    var self = this;
      -    return messages.map(function (message) {
      -        return self.toPayload(message.method, message.params);
      -    }); 
      -};
      - 
      -module.exports = Jsonrpc;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html deleted file mode 100644 index a144e51..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html +++ /dev/null @@ -1,534 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/method.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/method.js

      -

      - - Statements: 100% (47 / 47)      - - - Branches: 100% (22 / 22)      - - - Functions: 100% (11 / 11)      - - - Lines: 100% (47 / 47)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -1 -58 -58 -58 -58 -58 -  -  -  -  -  -  -  -  -  -1 -73 -  -  -  -  -  -  -  -  -  -1 -72 -32 -  -40 -  -  -  -  -  -  -  -  -  -1 -73 -2 -  -  -  -  -  -  -  -  -  -  -1 -71 -28 -  -  -43 -91 -  -  -  -  -  -  -  -  -  -  -1 -71 -  -  -  -  -  -  -  -  -  -1 -47 -47 -47 -47 -3 -3 -  -44 -  -  -  -  -  -  -  -  -  -  -1 -69 -69 -69 -69 -  -69 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -69 -69 -30 -30 -30 -  -  -39 -  -  -1 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/**
      - * @file method.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var RequestManager = require('./requestmanager');
      -var utils = require('../utils/utils');
      -var errors = require('./errors');
      - 
      -var Method = function (options) {
      -    this.name = options.name;
      -    this.call = options.call;
      -    this.params = options.params || 0;
      -    this.inputFormatter = options.inputFormatter;
      -    this.outputFormatter = options.outputFormatter;
      -};
      - 
      -/**
      - * Should be used to determine name of the jsonrpc method based on arguments
      - *
      - * @method getCall
      - * @param {Array} arguments
      - * @return {String} name of jsonrpc method
      - */
      -Method.prototype.getCall = function (args) {
      -    return utils.isFunction(this.call) ? this.call(args) : this.call;
      -};
      - 
      -/**
      - * Should be used to extract callback from array of arguments. Modifies input param
      - *
      - * @method extractCallback
      - * @param {Array} arguments
      - * @return {Function|Null} callback, if exists
      - */
      -Method.prototype.extractCallback = function (args) {
      -    if (utils.isFunction(args[args.length - 1])) {
      -        return args.pop(); // modify the args array!
      -    }
      -    return null;
      -};
      - 
      -/**
      - * Should be called to check if the number of arguments is correct
      - * 
      - * @method validateArgs
      - * @param {Array} arguments
      - * @throws {Error} if it is not
      - */
      -Method.prototype.validateArgs = function (args) {
      -    if (args.length !== this.params) {
      -        throw errors.InvalidNumberOfParams;
      -    }
      -};
      - 
      -/**
      - * Should be called to format input args of method
      - * 
      - * @method formatInput
      - * @param {Array}
      - * @return {Array}
      - */
      -Method.prototype.formatInput = function (args) {
      -    if (!this.inputFormatter) {
      -        return args;
      -    }
      - 
      -    return this.inputFormatter.map(function (formatter, index) {
      -        return formatter ? formatter(args[index]) : args[index];
      -    });
      -};
      - 
      -/**
      - * Should be called to format output(result) of method
      - *
      - * @method formatOutput
      - * @param {Object}
      - * @return {Object}
      - */
      -Method.prototype.formatOutput = function (result) {
      -    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
      -};
      - 
      -/**
      - * Should attach function to method
      - * 
      - * @method attachToObject
      - * @param {Object}
      - * @param {Function}
      - */
      -Method.prototype.attachToObject = function (obj) {
      -    var func = this.send.bind(this);
      -    func.call = this.call; // that's ugly. filter.js uses it
      -    var name = this.name.split('.');
      -    if (name.length > 1) {
      -        obj[name[0]] = obj[name[0]] || {};
      -        obj[name[0]][name[1]] = func;
      -    } else {
      -        obj[name[0]] = func; 
      -    }
      -};
      - 
      -/**
      - * Should create payload from given input args
      - *
      - * @method toPayload
      - * @param {Array} args
      - * @return {Object}
      - */
      -Method.prototype.toPayload = function (args) {
      -    var call = this.getCall(args);
      -    var callback = this.extractCallback(args);
      -    var params = this.formatInput(args);
      -    this.validateArgs(params);
      - 
      -    return {
      -        method: call,
      -        params: params,
      -        callback: callback
      -    };
      -};
      - 
      -/**
      - * Should send request to the API
      - *
      - * @method send
      - * @param list of params
      - * @return result
      - */
      -Method.prototype.send = function () {
      -    var payload = this.toPayload(Array.prototype.slice.call(arguments));
      -    if (payload.callback) {
      -        var self = this;
      -        return RequestManager.getInstance().sendAsync(payload, function (err, result) {
      -            payload.callback(null, self.formatOutput(result));
      -        });
      -    }
      -    return this.formatOutput(RequestManager.getInstance().send(payload));
      -};
      - 
      -module.exports = Method;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html deleted file mode 100644 index b3da6ba..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/net.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/net.js

      -

      - - Statements: 100% (5 / 5)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (5 / 5)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file eth.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      -var Property = require('./property');
      - 
      -/// @returns an array of objects describing web3.eth api methods
      -var methods = [
      -];
      - 
      -/// @returns an array of objects describing web3.eth api properties
      -var properties = [
      -    new Property({
      -        name: 'listening',
      -        getter: 'net_listening'
      -    }),
      -    new Property({
      -        name: 'peerCount',
      -        getter: 'net_peerCount',
      -        outputFormatter: utils.toDecimal
      -    })
      -];
      - 
      - 
      -module.exports = {
      -    methods: methods,
      -    properties: properties
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html deleted file mode 100644 index 3d6e6b2..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html +++ /dev/null @@ -1,369 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/property.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/property.js

      -

      - - Statements: 91.3% (21 / 23)      - - - Branches: 70% (7 / 10)      - - - Functions: 66.67% (4 / 6)      - - - Lines: 91.3% (21 / 23)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -11 -11 -11 -11 -11 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -13 -  -  -  -  -  -  -  -  -  -1 -11 -  -  -  -  -11 -11 -4 -4 -  -7 -  -  -  -  -  -  -  -  -  -1 -13 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/**
      - * @file property.js
      - * @author Fabian Vogelsteller <fabian@frozeman.de>
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var RequestManager = require('./requestmanager');
      - 
      -var Property = function (options) {
      -    this.name = options.name;
      -    this.getter = options.getter;
      -    this.setter = options.setter;
      -    this.outputFormatter = options.outputFormatter;
      -    this.inputFormatter = options.inputFormatter;
      -};
      - 
      -/**
      - * Should be called to format input args of method
      - * 
      - * @method formatInput
      - * @param {Array}
      - * @return {Array}
      - */
      -Property.prototype.formatInput = function (arg) {
      -    return this.inputFormatter ? this.inputFormatter(arg) : arg;
      -};
      - 
      -/**
      - * Should be called to format output(result) of method
      - *
      - * @method formatOutput
      - * @param {Object}
      - * @return {Object}
      - */
      -Property.prototype.formatOutput = function (result) {
      -    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
      -};
      - 
      -/**
      - * Should attach function to method
      - * 
      - * @method attachToObject
      - * @param {Object}
      - * @param {Function}
      - */
      -Property.prototype.attachToObject = function (obj) {
      -    var proto = {
      -        get: this.get.bind(this),
      -        set: this.set.bind(this)
      -    };
      - 
      -    var name = this.name.split('.');
      -    if (name.length > 1) {
      -        obj[name[0]] = obj[name[0]] || {};
      -        Object.defineProperty(obj[name[0]], name[1], proto); 
      -    } else {
      -        Object.defineProperty(obj, name[0], proto);
      -    }
      -};
      - 
      -/**
      - * Should be used to get value of the property
      - *
      - * @method get
      - * @return {Object} value of the property
      - */
      -Property.prototype.get = function () {
      -    return this.formatOutput(RequestManager.getInstance().send({
      -        method: this.getter
      -    }));
      -};
      - 
      -/**
      - * Should be used to set value of the property
      - *
      - * @method set
      - * @param {Object} new value of the property
      - */
      -Property.prototype.set = function (value) {
      -    return RequestManager.getInstance().send({
      -        method: this.setter,
      -        params: [this.formatInput(value)]
      -    });
      -};
      - 
      -module.exports = Property;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html deleted file mode 100644 index 8bd50d2..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/qtsync.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/qtsync.js

      -

      - - Statements: 100% (5 / 5)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (2 / 2)      - - - Lines: 100% (5 / 5)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -2 -1 -1 -  -  -2 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file qtsync.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - *   Marian Oancea <marian@ethdev.com>
      - * @date 2014
      - */
      - 
      -var QtSyncProvider = function () {
      -};
      - 
      -QtSyncProvider.prototype.send = function (payload) {
      -    var result = navigator.qt.callMethod(JSON.stringify(payload));
      -    return JSON.parse(result);
      -};
      - 
      -module.exports = QtSyncProvider;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html deleted file mode 100644 index fc0b004..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html +++ /dev/null @@ -1,714 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/requestmanager.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/requestmanager.js

      -

      - - Statements: 85.53% (65 / 76)      - - - Branches: 60.71% (17 / 28)      - - - Functions: 100% (17 / 17)      - - - Lines: 85.53% (65 / 76)      - - Ignored: none      -

      -
      All files » ethereum.js/lib/web3/ » requestmanager.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -1 -  -212 -211 -  -1 -  -1 -1 -1 -1 -  -  -  -  -  -1 -212 -212 -  -  -  -  -  -  -  -  -  -1 -53 -  -  -  -  -53 -53 -  -53 -  -  -  -53 -  -  -  -  -  -  -  -  -  -1 -31 -  -  -  -31 -31 -31 -  -  -  -31 -  -  -  -31 -  -  -  -  -  -  -  -  -  -1 -125 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -  -  -  -  -  -  -  -  -1 -2 -1 -  -2 -  -2 -2 -2 -  -2 -  -  -  -  -  -  -  -1 -5 -  -5 -3 -  -  -2 -  -  -  -  -2 -2 -  -  -2 -2 -  -2 -  -  -  -2 -  -  -  -2 -2 -2 -  -2 -2 -  -  -2 -  -2 -  -2 -  -  -  -  -1 -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file requestmanager.js
      - * @author Jeffrey Wilcke <jeff@ethdev.com>
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @author Marian Oancea <marian@ethdev.com>
      - * @author Fabian Vogelsteller <fabian@ethdev.com>
      - * @author Gav Wood <g@ethdev.com>
      - * @date 2014
      - */
      - 
      -var Jsonrpc = require('./jsonrpc');
      -var utils = require('../utils/utils');
      -var c = require('../utils/config');
      -var errors = require('./errors');
      - 
      -/**
      - * It's responsible for passing messages to providers
      - * It's also responsible for polling the ethereum node for incoming messages
      - * Default poll timeout is 1 second
      - * Singleton
      - */
      -var RequestManager = function (provider) {
      -    // singleton pattern
      -    if (arguments.callee._singletonInstance) {
      -        return arguments.callee._singletonInstance;
      -    }
      -    arguments.callee._singletonInstance = this;
      - 
      -    this.provider = provider;
      -    this.polls = [];
      -    this.timeout = null;
      -    this.poll();
      -};
      - 
      -/**
      - * @return {RequestManager} singleton
      - */
      -RequestManager.getInstance = function () {
      -    var instance = new RequestManager();
      -    return instance;
      -};
      - 
      -/**
      - * Should be used to synchronously send request
      - *
      - * @method send
      - * @param {Object} data
      - * @return {Object}
      - */
      -RequestManager.prototype.send = function (data) {
      -    Iif (!this.provider) {
      -        console.error(errors.InvalidProvider);
      -        return null;
      -    }
      - 
      -    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
      -    var result = this.provider.send(payload);
      - 
      -    Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
      -        throw errors.InvalidResponse(result);
      -    }
      - 
      -    return result.result;
      -};
      - 
      -/**
      - * Should be used to asynchronously send request
      - *
      - * @method sendAsync
      - * @param {Object} data
      - * @param {Function} callback
      - */
      -RequestManager.prototype.sendAsync = function (data, callback) {
      -    Iif (!this.provider) {
      -        return callback(errors.InvalidProvider);
      -    }
      - 
      -    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
      -    this.provider.sendAsync(payload, function (err, result) {
      -        Iif (err) {
      -            return callback(err);
      -        }
      -        
      -        Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
      -            return callback(errors.InvalidResponse(result));
      -        }
      - 
      -        callback(null, result.result);
      -    });
      -};
      - 
      -/**
      - * Should be used to set provider of request manager
      - *
      - * @method setProvider
      - * @param {Object}
      - */
      -RequestManager.prototype.setProvider = function (p) {
      -    this.provider = p;
      -};
      - 
      -/*jshint maxparams:4 */
      - 
      -/**
      - * Should be used to start polling
      - *
      - * @method startPolling
      - * @param {Object} data
      - * @param {Number} pollId
      - * @param {Function} callback
      - * @param {Function} uninstall
      - *
      - * @todo cleanup number of params
      - */
      -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {
      -    this.polls.push({data: data, id: pollId, callback: callback, uninstall: uninstall});
      -};
      -/*jshint maxparams:3 */
      - 
      -/**
      - * Should be used to stop polling for filter with given id
      - *
      - * @method stopPolling
      - * @param {Number} pollId
      - */
      -RequestManager.prototype.stopPolling = function (pollId) {
      -    for (var i = this.polls.length; i--;) {
      -        var poll = this.polls[i];
      -        Eif (poll.id === pollId) {
      -            this.polls.splice(i, 1);
      -        }
      -    }
      -};
      - 
      -/**
      - * Should be called to reset polling mechanism of request manager
      - *
      - * @method reset
      - */
      -RequestManager.prototype.reset = function () {
      -    this.polls.forEach(function (poll) {
      -        poll.uninstall(poll.id); 
      -    });
      -    this.polls = [];
      - 
      -    Eif (this.timeout) {
      -        clearTimeout(this.timeout);
      -        this.timeout = null;
      -    }
      -    this.poll();
      -};
      - 
      -/**
      - * Should be called to poll for changes on filter with given id
      - *
      - * @method poll
      - */
      -RequestManager.prototype.poll = function () {
      -    this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);
      - 
      -    if (!this.polls.length) {
      -        return;
      -    }
      - 
      -    Iif (!this.provider) {
      -        console.error(errors.InvalidProvider);
      -        return;
      -    }
      - 
      -    var payload = Jsonrpc.getInstance().toBatchPayload(this.polls.map(function (data) {
      -        return data.data;
      -    }));
      - 
      -    var self = this;
      -    this.provider.sendAsync(payload, function (error, results) {
      -        // TODO: console log?
      -        Iif (error) {
      -            return;
      -        }
      -            
      -        Iif (!utils.isArray(results)) {
      -            throw errors.InvalidResponse(results);
      -        }
      - 
      -        results.map(function (result, index) {
      -            result.callback = self.polls[index].callback;
      -            return result;
      -        }).filter(function (result) {
      -            var valid = Jsonrpc.getInstance().isValidResponse(result);
      -            Iif (!valid) {
      -                result.callback(errors.InvalidResponse(result));
      -            }
      -            return valid;
      -        }).filter(function (result) {
      -            return utils.isArray(result.result) && result.result.length > 0;
      -        }).forEach(function (result) {
      -            result.callback(null, result.result);
      -        });
      -    });
      -};
      - 
      -module.exports = RequestManager;
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html deleted file mode 100644 index 4d5162f..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/shh.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/shh.js

      -

      - - Statements: 100% (9 / 9)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (9 / 9)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file shh.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Method = require('./method');
      -var formatters = require('./formatters');
      - 
      -var post = new Method({
      -    name: 'post', 
      -    call: 'shh_post', 
      -    params: 1,
      -    inputFormatter: formatters.inputPostFormatter
      -});
      - 
      -var newIdentity = new Method({
      -    name: 'newIdentity',
      -    call: 'shh_newIdentity',
      -    params: 0
      -});
      - 
      -var hasIdentity = new Method({
      -    name: 'hasIdentity',
      -    call: 'shh_hasIdentity',
      -    params: 1
      -});
      - 
      -var newGroup = new Method({
      -    name: 'newGroup',
      -    call: 'shh_newGroup',
      -    params: 0
      -});
      - 
      -var addToGroup = new Method({
      -    name: 'addToGroup',
      -    call: 'shh_addToGroup',
      -    params: 0
      -});
      - 
      -var methods = [
      -    post,
      -    newIdentity,
      -    hasIdentity,
      -    newGroup,
      -    addToGroup
      -];
      - 
      -module.exports = {
      -    methods: methods
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html deleted file mode 100644 index ab4d2fc..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/signature.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/signature.js

      -

      - - Statements: 100% (7 / 7)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (2 / 2)      - - - Lines: 100% (7 / 7)      - - Ignored: none      -

      -
      All files » ethereum.js/lib/web3/ » signature.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -1 -1 -  -  -  -  -1 -2 -  -  -1 -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file signature.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var web3 = require('../web3'); 
      -var c = require('../utils/config');
      - 
      -/// @param function name for which we want to get signature
      -/// @returns signature of function with given name
      -var functionSignatureFromAscii = function (name) {
      -    return web3.sha3(web3.fromAscii(name)).slice(0, 2 + c.ETH_SIGNATURE_LENGTH * 2);
      -};
      - 
      -/// @param event name for which we want to get signature
      -/// @returns signature of event with given name
      -var eventSignatureFromAscii = function (name) {
      -    return web3.sha3(web3.fromAscii(name));
      -};
      - 
      -module.exports = {
      -    functionSignatureFromAscii: functionSignatureFromAscii,
      -    eventSignatureFromAscii: eventSignatureFromAscii
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html deleted file mode 100644 index 66f6a8a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html +++ /dev/null @@ -1,360 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/watches.js - - - - - - - - -
      -

      Code coverage report for ethereum.js/lib/web3/watches.js

      -

      - - Statements: 100% (16 / 16)      - - - Branches: 100% (2 / 2)      - - - Functions: 100% (3 / 3)      - - - Lines: 100% (16 / 16)      - - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -1 -4 -4 -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  - 
      /*
      -    This file is part of ethereum.js.
      - 
      -    ethereum.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    ethereum.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file watches.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Method = require('./method');
      - 
      -/// @returns an array of objects describing web3.eth.filter api methods
      -var eth = function () {
      -    var newFilterCall = function (args) {
      -        return typeof args[0] === 'string' ? 'eth_newBlockFilter' : 'eth_newFilter';
      -    };
      - 
      -    var newFilter = new Method({
      -        name: 'newFilter',
      -        call: newFilterCall,
      -        params: 1
      -    });
      - 
      -    var uninstallFilter = new Method({
      -        name: 'uninstallFilter',
      -        call: 'eth_uninstallFilter',
      -        params: 1
      -    });
      - 
      -    var getLogs = new Method({
      -        name: 'getLogs',
      -        call: 'eth_getFilterLogs',
      -        params: 1
      -    });
      - 
      -    var poll = new Method({
      -        name: 'poll',
      -        call: 'eth_getFilterChanges',
      -        params: 1
      -    });
      - 
      -    return [
      -        newFilter,
      -        uninstallFilter,
      -        getLogs,
      -        poll
      -    ];
      -};
      - 
      -/// @returns an array of objects describing web3.shh.watch api methods
      -var shh = function () {
      -    var newFilter = new Method({
      -        name: 'newFilter',
      -        call: 'shh_newFilter',
      -        params: 1
      -    });
      - 
      -    var uninstallFilter = new Method({
      -        name: 'uninstallFilter',
      -        call: 'shh_uninstallFilter',
      -        params: 1
      -    });
      - 
      -    var getLogs = new Method({
      -        name: 'getLogs',
      -        call: 'shh_getMessages',
      -        params: 1
      -    });
      - 
      -    var poll = new Method({
      -        name: 'poll',
      -        call: 'shh_getFilterChanges',
      -        params: 1
      -    });
      - 
      -    return [
      -        newFilter,
      -        uninstallFilter,
      -        getLogs,
      -        poll
      -    ];
      -};
      - 
      -module.exports = {
      -    eth: eth,
      -    shh: shh
      -};
      - 
      - 
      - -
      - - - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/index.html deleted file mode 100644 index b24a51c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/index.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - Code coverage report for All files - - - - - - -
      -

      Code coverage report for All files

      -

      - Statements: 83.81% (1538 / 1835)      - Branches: 66.25% (426 / 643)      - Functions: 85.5% (336 / 393)      - Lines: 83.78% (1534 / 1831)      - Ignored: none      -

      -
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      web3/75%(3 / 4)50%(2 / 4)100%(0 / 0)75%(3 / 4)
      web3/lib/98.25%(56 / 57)0%(0 / 2)85.71%(6 / 7)98.25%(56 / 57)
      web3/lib/solidity/93.88%(368 / 392)79.03%(49 / 62)88.12%(89 / 101)93.88%(368 / 392)
      web3/lib/utils/96.4%(134 / 139)81.82%(63 / 77)96.55%(28 / 29)96.38%(133 / 138)
      web3/lib/web3/85.02%(840 / 988)67.4%(275 / 408)86.7%(189 / 218)84.97%(837 / 985)
      web3/lib/web3/methods/95%(114 / 120)100%(20 / 20)85.19%(23 / 27)95%(114 / 120)
      web3/node_modules/utf8/17.04%(23 / 135)24.29%(17 / 70)9.09%(1 / 11)17.04%(23 / 135)
      -
      -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/prettify.css b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/prettify.js b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a..0000000 Binary files a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png and /dev/null differ diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/sorter.js b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/sorter.js deleted file mode 100644 index 6afb736..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/sorter.js +++ /dev/null @@ -1,156 +0,0 @@ -var addSorting = (function () { - "use strict"; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { return document.querySelector('.coverage-summary table'); } - // returns the thead element of the summary table - function getTableHeader() { return getTable().querySelector('thead tr'); } - // returns the tbody element of the summary table - function getTableBody() { return getTable().querySelector('tbody'); } - // returns the th element for nth column - function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - el = getNthColumn(i).querySelector('.sorter'); - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/index.html deleted file mode 100644 index 4b23bc9..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for web3/ - - - - - - -
      -

      Code coverage report for web3/

      -

      - Statements: 75% (3 / 4)      - Branches: 50% (2 / 4)      - Functions: 100% (0 / 0)      - Lines: 75% (3 / 4)      - Ignored: none      -

      -
      All files » web3/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      index.js75%(3 / 4)50%(2 / 4)100%(0 / 0)75%(3 / 4)
      -
      -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/index.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/index.js.html deleted file mode 100644 index c0c10d1..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/index.js.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - Code coverage report for web3/index.js - - - - - - -
      -

      Code coverage report for web3/index.js

      -

      - Statements: 75% (3 / 4)      - Branches: 50% (2 / 4)      - Functions: 100% (0 / 0)      - Lines: 75% (3 / 4)      - Ignored: none      -

      -
      All files » web3/ » index.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -91 -  -  -1 -  -  -  -1 - 
      var Web3 = require('./lib/web3');
      - 
      -// dont override global variable
      -Iif (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {
      -    window.Web3 = Web3;
      -}
      - 
      -module.exports = Web3;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/index.html deleted file mode 100644 index 4dd2115..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for web3/lib/ - - - - - - -
      -

      Code coverage report for web3/lib/

      -

      - Statements: 98.25% (56 / 57)      - Branches: 0% (0 / 2)      - Functions: 85.71% (6 / 7)      - Lines: 98.25% (56 / 57)      - Ignored: none      -

      -
      All files » web3/lib/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      web3.js98.25%(56 / 57)0%(0 / 2)85.71%(6 / 7)98.25%(56 / 57)
      -
      -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html deleted file mode 100644 index eb7a8d4..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/address.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/address.js

      -

      - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

      -
      All files » web3/lib/solidity/ » address.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -321 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -100 -  -  -1 -  - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -/**
      - * SolidityTypeAddress is a prootype that represents address type
      - * It matches:
      - * address
      - * address[]
      - * address[4]
      - * address[][]
      - * address[3][]
      - * address[][6][], ...
      - */
      -var SolidityTypeAddress = function () {
      -    this._inputFormatter = f.formatInputInt;
      -    this._outputFormatter = f.formatOutputAddress;
      -};
      - 
      -SolidityTypeAddress.prototype = new SolidityType({});
      -SolidityTypeAddress.prototype.constructor = SolidityTypeAddress;
      - 
      -SolidityTypeAddress.prototype.isType = function (name) {
      -    return !!name.match(/address(\[([0-9]*)\])?/);
      -};
      - 
      -SolidityTypeAddress.prototype.staticPartLength = function (name) {
      -    return 32 * this.staticArrayLength(name);
      -};
      - 
      -module.exports = SolidityTypeAddress;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html deleted file mode 100644 index 14a9396..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/bool.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/bool.js

      -

      - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -311 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -44 -  -  -1 - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -/**
      - * SolidityTypeBool is a prootype that represents bool type
      - * It matches:
      - * bool
      - * bool[]
      - * bool[4]
      - * bool[][]
      - * bool[3][]
      - * bool[][6][], ...
      - */
      -var SolidityTypeBool = function () {
      -    this._inputFormatter = f.formatInputBool;
      -    this._outputFormatter = f.formatOutputBool;
      -};
      - 
      -SolidityTypeBool.prototype = new SolidityType({});
      -SolidityTypeBool.prototype.constructor = SolidityTypeBool;
      - 
      -SolidityTypeBool.prototype.isType = function (name) {
      -    return !!name.match(/^bool(\[([0-9]*)\])*$/);
      -};
      - 
      -SolidityTypeBool.prototype.staticPartLength = function (name) {
      -    return 32 * this.staticArrayLength(name);
      -};
      - 
      -module.exports = SolidityTypeBool;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html deleted file mode 100644 index c07aefc..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/bytes.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/bytes.js

      -

      - Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (14 / 14)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -391 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -38 -38 -38 -  -  -1 - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -/**
      - * SolidityTypeBytes is a prootype that represents bytes type
      - * It matches:
      - * bytes
      - * bytes[]
      - * bytes[4]
      - * bytes[][]
      - * bytes[3][]
      - * bytes[][6][], ...
      - * bytes32
      - * bytes64[]
      - * bytes8[4]
      - * bytes256[][]
      - * bytes[3][]
      - * bytes64[][6][], ...
      - */
      -var SolidityTypeBytes = function () {
      -    this._inputFormatter = f.formatInputBytes;
      -    this._outputFormatter = f.formatOutputBytes;
      -};
      - 
      -SolidityTypeBytes.prototype = new SolidityType({});
      -SolidityTypeBytes.prototype.constructor = SolidityTypeBytes;
      - 
      -SolidityTypeBytes.prototype.isType = function (name) {
      -    return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/);
      -};
      - 
      -SolidityTypeBytes.prototype.staticPartLength = function (name) {
      -    var matches = name.match(/^bytes([0-9]*)/);
      -    var size = parseInt(matches[1]);
      -    return size * this.staticArrayLength(name);
      -};
      - 
      -module.exports = SolidityTypeBytes;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html deleted file mode 100644 index 7451a42..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html +++ /dev/null @@ -1,825 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/coder.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/coder.js

      -

      - Statements: 96.12% (99 / 103)      - Branches: 81.82% (18 / 22)      - Functions: 100% (26 / 26)      - Lines: 96.12% (99 / 103)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -267 -2403 -  -  -267 -  -  -  -267 -  -  -  -  -  -  -  -  -  -  -1 -64 -  -  -  -  -  -  -  -  -  -  -1 -107 -  -107 -135 -  -  -107 -135 -135 -135 -  -  -107 -  -107 -  -  -1 -107 -107 -  -107 -270 -  -  -107 -135 -43 -43 -43 -  -  -92 -  -  -  -  -  -107 -135 -43 -43 -43 -  -  -107 -  -  -  -1 -287 -287 -42 -  -42 -42 -42 -  -42 -42 -42 -  -  -  -  -  -  -  -  -42 -42 -82 -82 -  -  -  -42 -  -  -245 -13 -13 -13 -13 -  -  -13 -1 -1 -1 -  -2 -2 -  -  -  -  -13 -13 -27 -27 -  -  -  -13 -  -  -  -232 -  -  -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -  -  -1 -106 -106 -  -106 -132 -  -  -  -1 -106 -132 -  -  -106 -  -29 -  -  -106 -  -132 -132 -  -  -  -1 -213 -213 -267 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file coder.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var f = require('./formatters');
      - 
      -var SolidityTypeAddress = require('./address');
      -var SolidityTypeBool = require('./bool');
      -var SolidityTypeInt = require('./int');
      -var SolidityTypeUInt = require('./uint');
      -var SolidityTypeDynamicBytes = require('./dynamicbytes');
      -var SolidityTypeString = require('./string');
      -var SolidityTypeReal = require('./real');
      -var SolidityTypeUReal = require('./ureal');
      -var SolidityTypeBytes = require('./bytes');
      - 
      -/**
      - * SolidityCoder prototype should be used to encode/decode solidity params of any type
      - */
      -var SolidityCoder = function (types) {
      -    this._types = types;
      -};
      - 
      -/**
      - * This method should be used to transform type to SolidityType
      - *
      - * @method _requireType
      - * @param {String} type
      - * @returns {SolidityType} 
      - * @throws {Error} throws if no matching type is found
      - */
      -SolidityCoder.prototype._requireType = function (type) {
      -    var solidityType = this._types.filter(function (t) {
      -        return t.isType(type);
      -    })[0];
      - 
      -    Iif (!solidityType) {
      -        throw Error('invalid solidity type!: ' + type);
      -    }
      - 
      -    return solidityType;
      -};
      - 
      -/**
      - * Should be used to encode plain param
      - *
      - * @method encodeParam
      - * @param {String} type
      - * @param {Object} plain param
      - * @return {String} encoded plain param
      - */
      -SolidityCoder.prototype.encodeParam = function (type, param) {
      -    return this.encodeParams([type], [param]);
      -};
      - 
      -/**
      - * Should be used to encode list of params
      - *
      - * @method encodeParams
      - * @param {Array} types
      - * @param {Array} params
      - * @return {String} encoded list of params
      - */
      -SolidityCoder.prototype.encodeParams = function (types, params) {
      -    var solidityTypes = this.getSolidityTypes(types);
      - 
      -    var encodeds = solidityTypes.map(function (solidityType, index) {
      -        return solidityType.encode(params[index], types[index]);
      -    });
      - 
      -    var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {
      -        var staticPartLength = solidityType.staticPartLength(types[index]);
      -        var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;
      -        return acc + roundedStaticPartLength;
      -    }, 0);
      - 
      -    var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); 
      - 
      -    return result;
      -};
      - 
      -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {
      -    var result = "";
      -    var self = this;
      - 
      -    var isDynamic = function (i) {
      -       return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]);
      -    };
      - 
      -    types.forEach(function (type, i) {
      -        if (isDynamic(i)) {
      -            result += f.formatInputInt(dynamicOffset).encode();
      -            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
      -            dynamicOffset += e.length / 2;
      -        } else {
      -            // don't add length to dynamicOffset. it's already counted
      -            result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
      -        }
      - 
      -        // TODO: figure out nested arrays
      -    });
      -    
      -    types.forEach(function (type, i) {
      -        if (isDynamic(i)) {
      -            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
      -            dynamicOffset += e.length / 2;
      -            result += e;
      -        }
      -    });
      -    return result;
      -};
      - 
      -// TODO: refactor whole encoding!
      -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {
      -    var self = this;
      -    if (solidityType.isDynamicArray(type)) {
      -        return (function () {
      -            // offset was already set
      -            var nestedName = solidityType.nestedName(type);
      -            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
      -            var result = encoded[0];
      -            
      -            (function () {
      -                var previousLength = 2; // in int
      -                Iif (solidityType.isDynamicArray(nestedName)) {
      -                    for (var i = 1; i < encoded.length; i++) {
      -                        previousLength += +(encoded[i - 1])[0] || 0;
      -                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
      -                    }
      -                }
      -            })();
      -            
      -            // first element is length, skip it
      -            (function () {
      -                for (var i = 0; i < encoded.length - 1; i++) {
      -                    var additionalOffset = result / 2;
      -                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset +  additionalOffset);
      -                }
      -            })();
      - 
      -            return result;
      -        })();
      -       
      -    } else if (solidityType.isStaticArray(type)) {
      -        return (function () {
      -            var nestedName = solidityType.nestedName(type);
      -            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
      -            var result = "";
      - 
      - 
      -            if (solidityType.isDynamicArray(nestedName)) {
      -                (function () {
      -                    var previousLength = 0; // in int
      -                    for (var i = 0; i < encoded.length; i++) {
      -                        // calculate length of previous item
      -                        previousLength += +(encoded[i - 1] || [])[0] || 0; 
      -                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
      -                    }
      -                })();
      -            }
      - 
      -            (function () {
      -                for (var i = 0; i < encoded.length; i++) {
      -                    var additionalOffset = result / 2;
      -                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset);
      -                }
      -            })();
      - 
      -            return result;
      -        })();
      -    }
      - 
      -    return encoded;
      -};
      - 
      -/**
      - * Should be used to decode bytes to plain param
      - *
      - * @method decodeParam
      - * @param {String} type
      - * @param {String} bytes
      - * @return {Object} plain param
      - */
      -SolidityCoder.prototype.decodeParam = function (type, bytes) {
      -    return this.decodeParams([type], bytes)[0];
      -};
      - 
      -/**
      - * Should be used to decode list of params
      - *
      - * @method decodeParam
      - * @param {Array} types
      - * @param {String} bytes
      - * @return {Array} array of plain params
      - */
      -SolidityCoder.prototype.decodeParams = function (types, bytes) {
      -    var solidityTypes = this.getSolidityTypes(types);
      -    var offsets = this.getOffsets(types, solidityTypes);
      -        
      -    return solidityTypes.map(function (solidityType, index) {
      -        return solidityType.decode(bytes, offsets[index],  types[index], index);
      -    });
      -};
      - 
      -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) {
      -    var lengths =  solidityTypes.map(function (solidityType, index) {
      -        return solidityType.staticPartLength(types[index]);
      -    });
      -    
      -    for (var i = 1; i < lengths.length; i++) {
      -         // sum with length of previous element
      -        lengths[i] += lengths[i - 1]; 
      -    }
      - 
      -    return lengths.map(function (length, index) {
      -        // remove the current length, so the length is sum of previous elements
      -        var staticPartLength = solidityTypes[index].staticPartLength(types[index]);
      -        return length - staticPartLength; 
      -    });
      -};
      - 
      -SolidityCoder.prototype.getSolidityTypes = function (types) {
      -    var self = this;
      -    return types.map(function (type) {
      -        return self._requireType(type);
      -    });
      -};
      - 
      -var coder = new SolidityCoder([
      -    new SolidityTypeAddress(),
      -    new SolidityTypeBool(),
      -    new SolidityTypeInt(),
      -    new SolidityTypeUInt(),
      -    new SolidityTypeDynamicBytes(),
      -    new SolidityTypeBytes(),
      -    new SolidityTypeString(),
      -    new SolidityTypeReal(),
      -    new SolidityTypeUReal()
      -]);
      - 
      -module.exports = coder;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html deleted file mode 100644 index db77fe2..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/dynamicbytes.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/dynamicbytes.js

      -

      - Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (4 / 4)      - Lines: 100% (14 / 14)      - Ignored: none      -

      -
      All files » web3/lib/solidity/ » dynamicbytes.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -261 -1 -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -37 -  -  -1 -33 -  -  -1 -  - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -var SolidityTypeDynamicBytes = function () {
      -    this._inputFormatter = f.formatInputDynamicBytes;
      -    this._outputFormatter = f.formatOutputDynamicBytes;
      -};
      - 
      -SolidityTypeDynamicBytes.prototype = new SolidityType({});
      -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;
      - 
      -SolidityTypeDynamicBytes.prototype.isType = function (name) {
      -    return !!name.match(/^bytes(\[([0-9]*)\])*$/);
      -};
      - 
      -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) {
      -    return 32 * this.staticArrayLength(name);
      -};
      - 
      -SolidityTypeDynamicBytes.prototype.isDynamicType = function () {
      -    return true;
      -};
      - 
      -module.exports = SolidityTypeDynamicBytes;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html deleted file mode 100644 index 2958567..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html +++ /dev/null @@ -1,795 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/formatters.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/formatters.js

      -

      - Statements: 98.28% (57 / 58)      - Branches: 80% (8 / 10)      - Functions: 93.75% (15 / 16)      - Lines: 98.28% (57 / 58)      - Ignored: none      -

      -
      All files » web3/lib/solidity/ » formatters.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -205 -205 -205 -  -  -  -  -  -  -  -  -  -1 -15 -15 -15 -15 -  -  -  -  -  -  -  -  -  -1 -9 -9 -9 -9 -9 -  -  -  -  -  -  -  -  -  -1 -14 -14 -14 -14 -14 -  -  -  -  -  -  -  -  -  -1 -15 -15 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -61 -  -  -  -  -  -  -  -  -  -1 -61 -  -  -  -61 -3 -  -58 -  -  -  -  -  -  -  -  -  -1 -45 -45 -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -12 -  -  -  -  -  -  -  -  -  -1 -10 -  -  -  -  -  -  -  -  -  -1 -15 -15 -  -  -  -  -  -  -  -  -  -1 -7 -7 -  -  -  -  -  -  -  -  -  -1 -26 -26 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file formatters.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var BigNumber = require('bignumber.js');
      -var utils = require('../utils/utils');
      -var c = require('../utils/config');
      -var SolidityParam = require('./param');
      - 
      - 
      -/**
      - * Formats input value to byte representation of int
      - * If value is negative, return it's two's complement
      - * If the value is floating point, round it down
      - *
      - * @method formatInputInt
      - * @param {String|Number|BigNumber} value that needs to be formatted
      - * @returns {SolidityParam}
      - */
      -var formatInputInt = function (value) {
      -    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
      -    var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64);
      -    return new SolidityParam(result);
      -};
      - 
      -/**
      - * Formats input bytes
      - *
      - * @method formatInputBytes
      - * @param {String}
      - * @returns {SolidityParam}
      - */
      -var formatInputBytes = function (value) {
      -    var result = utils.toHex(value).substr(2);
      -    var l = Math.floor((result.length + 63) / 64);
      -    result = utils.padRight(result, l * 64);
      -    return new SolidityParam(result);
      -};
      - 
      -/**
      - * Formats input bytes
      - *
      - * @method formatDynamicInputBytes
      - * @param {String}
      - * @returns {SolidityParam}
      - */
      -var formatInputDynamicBytes = function (value) {
      -    var result = utils.toHex(value).substr(2);
      -    var length = result.length / 2;
      -    var l = Math.floor((result.length + 63) / 64);
      -    result = utils.padRight(result, l * 64);
      -    return new SolidityParam(formatInputInt(length).value + result);
      -};
      - 
      -/**
      - * Formats input value to byte representation of string
      - *
      - * @method formatInputString
      - * @param {String}
      - * @returns {SolidityParam}
      - */
      -var formatInputString = function (value) {
      -    var result = utils.fromUtf8(value).substr(2);
      -    var length = result.length / 2;
      -    var l = Math.floor((result.length + 63) / 64);
      -    result = utils.padRight(result, l * 64);
      -    return new SolidityParam(formatInputInt(length).value + result);
      -};
      - 
      -/**
      - * Formats input value to byte representation of bool
      - *
      - * @method formatInputBool
      - * @param {Boolean}
      - * @returns {SolidityParam}
      - */
      -var formatInputBool = function (value) {
      -    var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
      -    return new SolidityParam(result);
      -};
      - 
      -/**
      - * Formats input value to byte representation of real
      - * Values are multiplied by 2^m and encoded as integers
      - *
      - * @method formatInputReal
      - * @param {String|Number|BigNumber}
      - * @returns {SolidityParam}
      - */
      -var formatInputReal = function (value) {
      -    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));
      -};
      - 
      -/**
      - * Check if input value is negative
      - *
      - * @method signedIsNegative
      - * @param {String} value is hex format
      - * @returns {Boolean} true if it is negative, otherwise false
      - */
      -var signedIsNegative = function (value) {
      -    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
      -};
      - 
      -/**
      - * Formats right-aligned output bytes to int
      - *
      - * @method formatOutputInt
      - * @param {SolidityParam} param
      - * @returns {BigNumber} right-aligned output bytes formatted to big number
      - */
      -var formatOutputInt = function (param) {
      -    var value = param.staticPart() || "0";
      - 
      -    // check if it's negative number
      -    // it it is, return two's complement
      -    if (signedIsNegative(value)) {
      -        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
      -    }
      -    return new BigNumber(value, 16);
      -};
      - 
      -/**
      - * Formats right-aligned output bytes to uint
      - *
      - * @method formatOutputUInt
      - * @param {SolidityParam}
      - * @returns {BigNumeber} right-aligned output bytes formatted to uint
      - */
      -var formatOutputUInt = function (param) {
      -    var value = param.staticPart() || "0";
      -    return new BigNumber(value, 16);
      -};
      - 
      -/**
      - * Formats right-aligned output bytes to real
      - *
      - * @method formatOutputReal
      - * @param {SolidityParam}
      - * @returns {BigNumber} input bytes formatted to real
      - */
      -var formatOutputReal = function (param) {
      -    return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); 
      -};
      - 
      -/**
      - * Formats right-aligned output bytes to ureal
      - *
      - * @method formatOutputUReal
      - * @param {SolidityParam}
      - * @returns {BigNumber} input bytes formatted to ureal
      - */
      -var formatOutputUReal = function (param) {
      -    return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); 
      -};
      - 
      -/**
      - * Should be used to format output bool
      - *
      - * @method formatOutputBool
      - * @param {SolidityParam}
      - * @returns {Boolean} right-aligned input bytes formatted to bool
      - */
      -var formatOutputBool = function (param) {
      -    return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
      -};
      - 
      -/**
      - * Should be used to format output bytes
      - *
      - * @method formatOutputBytes
      - * @param {SolidityParam} left-aligned hex representation of string
      - * @returns {String} hex string
      - */
      -var formatOutputBytes = function (param) {
      -    return '0x' + param.staticPart();
      -};
      - 
      -/**
      - * Should be used to format output bytes
      - *
      - * @method formatOutputDynamicBytes
      - * @param {SolidityParam} left-aligned hex representation of string
      - * @returns {String} hex string
      - */
      -var formatOutputDynamicBytes = function (param) {
      -    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
      -    return '0x' + param.dynamicPart().substr(64, length);
      -};
      - 
      -/**
      - * Should be used to format output string
      - *
      - * @method formatOutputString
      - * @param {SolidityParam} left-aligned hex representation of string
      - * @returns {String} ascii string
      - */
      -var formatOutputString = function (param) {
      -    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
      -    return utils.toUtf8(param.dynamicPart().substr(64, length));
      -};
      - 
      -/**
      - * Should be used to format output address
      - *
      - * @method formatOutputAddress
      - * @param {SolidityParam} right-aligned input bytes
      - * @returns {String} address
      - */
      -var formatOutputAddress = function (param) {
      -    var value = param.staticPart();
      -    return "0x" + value.slice(value.length - 40, value.length);
      -};
      - 
      -module.exports = {
      -    formatInputInt: formatInputInt,
      -    formatInputBytes: formatInputBytes,
      -    formatInputDynamicBytes: formatInputDynamicBytes,
      -    formatInputString: formatInputString,
      -    formatInputBool: formatInputBool,
      -    formatInputReal: formatInputReal,
      -    formatOutputInt: formatOutputInt,
      -    formatOutputUInt: formatOutputUInt,
      -    formatOutputReal: formatOutputReal,
      -    formatOutputUReal: formatOutputUReal,
      -    formatOutputBool: formatOutputBool,
      -    formatOutputBytes: formatOutputBytes,
      -    formatOutputDynamicBytes: formatOutputDynamicBytes,
      -    formatOutputString: formatOutputString,
      -    formatOutputAddress: formatOutputAddress
      -};
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html deleted file mode 100644 index 4b24547..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/ - - - - - - -
      -

      Code coverage report for web3/lib/solidity/

      -

      - Statements: 93.88% (368 / 392)      - Branches: 79.03% (49 / 62)      - Functions: 88.12% (89 / 101)      - Lines: 93.88% (368 / 392)      - Ignored: none      -

      -
      All files » web3/lib/solidity/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      address.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
      bool.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
      bytes.js100%(14 / 14)100%(0 / 0)100%(3 / 3)100%(14 / 14)
      coder.js96.12%(99 / 103)81.82%(18 / 22)100%(26 / 26)96.12%(99 / 103)
      dynamicbytes.js100%(14 / 14)100%(0 / 0)100%(4 / 4)100%(14 / 14)
      formatters.js98.28%(57 / 58)80%(8 / 10)93.75%(15 / 16)98.28%(57 / 58)
      int.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
      param.js55.88%(19 / 34)40%(4 / 10)38.46%(5 / 13)55.88%(19 / 34)
      real.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
      string.js100%(14 / 14)100%(0 / 0)100%(4 / 4)100%(14 / 14)
      type.js96.39%(80 / 83)95%(19 / 20)88.24%(15 / 17)96.39%(80 / 83)
      uint.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
      ureal.js91.67%(11 / 12)100%(0 / 0)66.67%(2 / 3)91.67%(11 / 12)
      -
      -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html deleted file mode 100644 index 5d4084c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/int.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/int.js

      -

      - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -234 -  -  -1 - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -/**
      - * SolidityTypeInt is a prootype that represents int type
      - * It matches:
      - * int
      - * int[]
      - * int[4]
      - * int[][]
      - * int[3][]
      - * int[][6][], ...
      - * int32
      - * int64[]
      - * int8[4]
      - * int256[][]
      - * int[3][]
      - * int64[][6][], ...
      - */
      -var SolidityTypeInt = function () {
      -    this._inputFormatter = f.formatInputInt;
      -    this._outputFormatter = f.formatOutputInt;
      -};
      - 
      -SolidityTypeInt.prototype = new SolidityType({});
      -SolidityTypeInt.prototype.constructor = SolidityTypeInt;
      - 
      -SolidityTypeInt.prototype.isType = function (name) {
      -    return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/);
      -};
      - 
      -SolidityTypeInt.prototype.staticPartLength = function (name) {
      -    return 32 * this.staticArrayLength(name);
      -};
      - 
      -module.exports = SolidityTypeInt;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html deleted file mode 100644 index a2c3d9f..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/param.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/param.js

      -

      - Statements: 55.88% (19 / 34)      - Branches: 40% (4 / 10)      - Functions: 38.46% (5 / 13)      - Lines: 55.88% (19 / 34)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -1 -434 -434 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -668 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -1 -389 -389 -  -  -  -  -  -  -  -  -  -  -1 -279 -  -  -  -  -  -  -  -  -1 -235 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file param.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      - 
      -/**
      - * SolidityParam object prototype.
      - * Should be used when encoding, decoding solidity bytes
      - */
      -var SolidityParam = function (value, offset) {
      -    this.value = value || '';
      -    this.offset = offset; // offset in bytes
      -};
      - 
      -/**
      - * This method should be used to get length of params's dynamic part
      - * 
      - * @method dynamicPartLength
      - * @returns {Number} length of dynamic part (in bytes)
      - */
      -SolidityParam.prototype.dynamicPartLength = function () {
      -    return this.dynamicPart().length / 2;
      -};
      - 
      -/**
      - * This method should be used to create copy of solidity param with different offset
      - *
      - * @method withOffset
      - * @param {Number} offset length in bytes
      - * @returns {SolidityParam} new solidity param with applied offset
      - */
      -SolidityParam.prototype.withOffset = function (offset) {
      -    return new SolidityParam(this.value, offset);
      -};
      - 
      -/**
      - * This method should be used to combine solidity params together
      - * eg. when appending an array
      - *
      - * @method combine
      - * @param {SolidityParam} param with which we should combine
      - * @param {SolidityParam} result of combination
      - */
      -SolidityParam.prototype.combine = function (param) {
      -    return new SolidityParam(this.value + param.value); 
      -};
      - 
      -/**
      - * This method should be called to check if param has dynamic size.
      - * If it has, it returns true, otherwise false
      - *
      - * @method isDynamic
      - * @returns {Boolean}
      - */
      -SolidityParam.prototype.isDynamic = function () {
      -    return this.offset !== undefined;
      -};
      - 
      -/**
      - * This method should be called to transform offset to bytes
      - *
      - * @method offsetAsBytes
      - * @returns {String} bytes representation of offset
      - */
      -SolidityParam.prototype.offsetAsBytes = function () {
      -    return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);
      -};
      - 
      -/**
      - * This method should be called to get static part of param
      - *
      - * @method staticPart
      - * @returns {String} offset if it is a dynamic param, otherwise value
      - */
      -SolidityParam.prototype.staticPart = function () {
      -    Eif (!this.isDynamic()) {
      -        return this.value; 
      -    } 
      -    return this.offsetAsBytes();
      -};
      - 
      -/**
      - * This method should be called to get dynamic part of param
      - *
      - * @method dynamicPart
      - * @returns {String} returns a value if it is a dynamic param, otherwise empty string
      - */
      -SolidityParam.prototype.dynamicPart = function () {
      -    return this.isDynamic() ? this.value : '';
      -};
      - 
      -/**
      - * This method should be called to encode param
      - *
      - * @method encode
      - * @returns {String}
      - */
      -SolidityParam.prototype.encode = function () {
      -    return this.staticPart() + this.dynamicPart();
      -};
      - 
      -/**
      - * This method should be called to encode array of params
      - *
      - * @method encodeList
      - * @param {Array[SolidityParam]} params
      - * @returns {String}
      - */
      -SolidityParam.encodeList = function (params) {
      -    
      -    // updating offsets
      -    var totalOffset = params.length * 32;
      -    var offsetParams = params.map(function (param) {
      -        if (!param.isDynamic()) {
      -            return param;
      -        }
      -        var offset = totalOffset;
      -        totalOffset += param.dynamicPartLength();
      -        return param.withOffset(offset);
      -    });
      - 
      -    // encode everything!
      -    return offsetParams.reduce(function (result, param) {
      -        return result + param.dynamicPart();
      -    }, offsetParams.reduce(function (result, param) {
      -        return result + param.staticPart();
      -    }, ''));
      -};
      - 
      - 
      - 
      -module.exports = SolidityParam;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html deleted file mode 100644 index 624ddb3..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/real.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/real.js

      -

      - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -28 -  -  -1 - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -/**
      - * SolidityTypeReal is a prootype that represents real type
      - * It matches:
      - * real
      - * real[]
      - * real[4]
      - * real[][]
      - * real[3][]
      - * real[][6][], ...
      - * real32
      - * real64[]
      - * real8[4]
      - * real256[][]
      - * real[3][]
      - * real64[][6][], ...
      - */
      -var SolidityTypeReal = function () {
      -    this._inputFormatter = f.formatInputReal;
      -    this._outputFormatter = f.formatOutputReal;
      -};
      - 
      -SolidityTypeReal.prototype = new SolidityType({});
      -SolidityTypeReal.prototype.constructor = SolidityTypeReal;
      - 
      -SolidityTypeReal.prototype.isType = function (name) {
      -    return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/);
      -};
      - 
      -SolidityTypeReal.prototype.staticPartLength = function (name) {
      -    return 32 * this.staticArrayLength(name);
      -};
      - 
      -module.exports = SolidityTypeReal;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html deleted file mode 100644 index 2ac2a29..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/string.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/string.js

      -

      - Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (4 / 4)      - Lines: 100% (14 / 14)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -261 -1 -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -28 -  -  -1 -35 -  -  -1 -  - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -var SolidityTypeString = function () {
      -    this._inputFormatter = f.formatInputString;
      -    this._outputFormatter = f.formatOutputString;
      -};
      - 
      -SolidityTypeString.prototype = new SolidityType({});
      -SolidityTypeString.prototype.constructor = SolidityTypeString;
      - 
      -SolidityTypeString.prototype.isType = function (name) {
      -    return !!name.match(/^string(\[([0-9]*)\])*$/);
      -};
      - 
      -SolidityTypeString.prototype.staticPartLength = function (name) {
      -    return 32 * this.staticArrayLength(name);
      -};
      - 
      -SolidityTypeString.prototype.isDynamicType = function () {
      -    return true;
      -};
      - 
      -module.exports = SolidityTypeString;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html deleted file mode 100644 index 97b2c34..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html +++ /dev/null @@ -1,780 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/type.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/type.js

      -

      - Statements: 96.39% (80 / 83)      - Branches: 95% (19 / 20)      - Functions: 88.24% (15 / 17)      - Lines: 96.39% (80 / 83)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -2461 -1 -  -  -  -  -1 -9 -9 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1029 -1029 -  -  -  -  -  -  -  -  -  -  -  -  -1 -619 -619 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -678 -678 -123 -  -555 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -128 -128 -  -  -  -128 -  -  -  -  -  -  -  -  -  -  -1 -338 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -2454 -  -  -  -  -  -  -  -  -  -  -1 -201 -201 -  -22 -22 -22 -  -22 -22 -  -22 -43 -  -  -22 -  -  -179 -  -11 -11 -11 -  -11 -11 -23 -  -  -11 -  -  -  -  -168 -  -  -  -  -  -  -  -  -  -  -  -1 -216 -  -216 -  -21 -21 -21 -21 -  -21 -21 -21 -21 -  -21 -37 -  -  -21 -  -  -195 -  -19 -19 -19 -  -19 -19 -19 -19 -  -19 -47 -  -  -19 -  -176 -  -22 -22 -22 -22 -  -22 -  -  -  -154 -154 -  -  -1 - 
      var f = require('./formatters');
      -var SolidityParam = require('./param');
      - 
      -/**
      - * SolidityType prototype is used to encode/decode solidity params of certain type
      - */
      -var SolidityType = function (config) {
      -    this._inputFormatter = config.inputFormatter;
      -    this._outputFormatter = config.outputFormatter;
      -};
      - 
      -/**
      - * Should be used to determine if this SolidityType do match given name
      - *
      - * @method isType
      - * @param {String} name
      - * @return {Bool} true if type match this SolidityType, otherwise false
      - */
      -SolidityType.prototype.isType = function (name) {
      -    throw "this method should be overrwritten for type " + name;
      -};
      - 
      -/**
      - * Should be used to determine what is the length of static part in given type
      - *
      - * @method staticPartLength
      - * @param {String} name
      - * @return {Number} length of static part in bytes
      - */
      -SolidityType.prototype.staticPartLength = function (name) {
      -    throw "this method should be overrwritten for type: " + name;
      -};
      - 
      -/**
      - * Should be used to determine if type is dynamic array
      - * eg: 
      - * "type[]" => true
      - * "type[4]" => false
      - *
      - * @method isDynamicArray
      - * @param {String} name
      - * @return {Bool} true if the type is dynamic array 
      - */
      -SolidityType.prototype.isDynamicArray = function (name) {
      -    var nestedTypes = this.nestedTypes(name);
      -    return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
      -};
      - 
      -/**
      - * Should be used to determine if type is static array
      - * eg: 
      - * "type[]" => false
      - * "type[4]" => true
      - *
      - * @method isStaticArray
      - * @param {String} name
      - * @return {Bool} true if the type is static array 
      - */
      -SolidityType.prototype.isStaticArray = function (name) {
      -    var nestedTypes = this.nestedTypes(name);
      -    return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
      -};
      - 
      -/**
      - * Should return length of static array
      - * eg. 
      - * "int[32]" => 32
      - * "int256[14]" => 14
      - * "int[2][3]" => 3
      - * "int" => 1
      - * "int[1]" => 1
      - * "int[]" => 1
      - *
      - * @method staticArrayLength
      - * @param {String} name
      - * @return {Number} static array length
      - */
      -SolidityType.prototype.staticArrayLength = function (name) {
      -    var nestedTypes = this.nestedTypes(name);
      -    if (nestedTypes) {
      -       return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);
      -    }
      -    return 1;
      -};
      - 
      -/**
      - * Should return nested type
      - * eg.
      - * "int[32]" => "int"
      - * "int256[14]" => "int256"
      - * "int[2][3]" => "int[2]"
      - * "int" => "int"
      - * "int[]" => "int"
      - *
      - * @method nestedName
      - * @param {String} name
      - * @return {String} nested name
      - */
      -SolidityType.prototype.nestedName = function (name) {
      -    // remove last [] in name
      -    var nestedTypes = this.nestedTypes(name);
      -    Iif (!nestedTypes) {
      -        return name;
      -    }
      - 
      -    return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);
      -};
      - 
      -/**
      - * Should return true if type has dynamic size by default
      - * such types are "string", "bytes"
      - *
      - * @method isDynamicType
      - * @param {String} name
      - * @return {Bool} true if is dynamic, otherwise false
      - */
      -SolidityType.prototype.isDynamicType = function () {
      -    return false;
      -};
      - 
      -/**
      - * Should return array of nested types
      - * eg.
      - * "int[2][3][]" => ["[2]", "[3]", "[]"]
      - * "int[] => ["[]"]
      - * "int" => null
      - *
      - * @method nestedTypes
      - * @param {String} name
      - * @return {Array} array of nested types
      - */
      -SolidityType.prototype.nestedTypes = function (name) {
      -    // return list of strings eg. "[]", "[3]", "[]", "[2]"
      -    return name.match(/(\[[0-9]*\])/g);
      -};
      - 
      -/**
      - * Should be used to encode the value
      - *
      - * @method encode
      - * @param {Object} value 
      - * @param {String} name
      - * @return {String} encoded value
      - */
      -SolidityType.prototype.encode = function (value, name) {
      -    var self = this;
      -    if (this.isDynamicArray(name)) {
      - 
      -        return (function () {
      -            var length = value.length;                          // in int
      -            var nestedName = self.nestedName(name);
      - 
      -            var result = [];
      -            result.push(f.formatInputInt(length).encode());
      -            
      -            value.forEach(function (v) {
      -                result.push(self.encode(v, nestedName));
      -            });
      - 
      -            return result;
      -        })();
      - 
      -    } else if (this.isStaticArray(name)) {
      - 
      -        return (function () {
      -            var length = self.staticArrayLength(name);          // in int
      -            var nestedName = self.nestedName(name);
      - 
      -            var result = [];
      -            for (var i = 0; i < length; i++) {
      -                result.push(self.encode(value[i], nestedName));
      -            }
      - 
      -            return result;
      -        })();
      - 
      -    }
      - 
      -    return this._inputFormatter(value, name).encode();
      -};
      - 
      -/**
      - * Should be used to decode value from bytes
      - *
      - * @method decode
      - * @param {String} bytes
      - * @param {Number} offset in bytes
      - * @param {String} name type name
      - * @returns {Object} decoded value
      - */
      -SolidityType.prototype.decode = function (bytes, offset, name) {
      -    var self = this;
      - 
      -    if (this.isDynamicArray(name)) {
      - 
      -        return (function () {
      -            var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes
      -            var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int
      -            var arrayStart = arrayOffset + 32; // array starts after length; // in bytes
      - 
      -            var nestedName = self.nestedName(name);
      -            var nestedStaticPartLength = self.staticPartLength(nestedName);  // in bytes
      -            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
      -            var result = [];
      - 
      -            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
      -                result.push(self.decode(bytes, arrayStart + i, nestedName));
      -            }
      - 
      -            return result;
      -        })();
      - 
      -    } else if (this.isStaticArray(name)) {
      - 
      -        return (function () {
      -            var length = self.staticArrayLength(name);                      // in int
      -            var arrayStart = offset;                                        // in bytes
      - 
      -            var nestedName = self.nestedName(name);
      -            var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes
      -            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
      -            var result = [];
      - 
      -            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
      -                result.push(self.decode(bytes, arrayStart + i, nestedName));
      -            }
      - 
      -            return result;
      -        })();
      -    } else if (this.isDynamicType(name)) {
      -        
      -        return (function () {
      -            var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64));      // in bytes
      -            var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64));      // in bytes
      -            var roundedLength = Math.floor((length + 31) / 32);                     // in int
      -        
      -            return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0));
      -        })();
      -    }
      - 
      -    var length = this.staticPartLength(name);
      -    return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2)));
      -};
      - 
      -module.exports = SolidityType;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html deleted file mode 100644 index a958b50..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/uint.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/uint.js

      -

      - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -139 -  -  -1 - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -/**
      - * SolidityTypeUInt is a prootype that represents uint type
      - * It matches:
      - * uint
      - * uint[]
      - * uint[4]
      - * uint[][]
      - * uint[3][]
      - * uint[][6][], ...
      - * uint32
      - * uint64[]
      - * uint8[4]
      - * uint256[][]
      - * uint[3][]
      - * uint64[][6][], ...
      - */
      -var SolidityTypeUInt = function () {
      -    this._inputFormatter = f.formatInputInt;
      -    this._outputFormatter = f.formatOutputUInt;
      -};
      - 
      -SolidityTypeUInt.prototype = new SolidityType({});
      -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt;
      - 
      -SolidityTypeUInt.prototype.isType = function (name) {
      -    return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/);
      -};
      - 
      -SolidityTypeUInt.prototype.staticPartLength = function (name) {
      -    return 32 * this.staticArrayLength(name);
      -};
      - 
      -module.exports = SolidityTypeUInt;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html deleted file mode 100644 index d9f578c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/ureal.js - - - - - - -
      -

      Code coverage report for web3/lib/solidity/ureal.js

      -

      - Statements: 91.67% (11 / 12)      - Branches: 100% (0 / 0)      - Functions: 66.67% (2 / 3)      - Lines: 91.67% (11 / 12)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -  -  -  -1 - 
      var f = require('./formatters');
      -var SolidityType = require('./type');
      - 
      -/**
      - * SolidityTypeUReal is a prootype that represents ureal type
      - * It matches:
      - * ureal
      - * ureal[]
      - * ureal[4]
      - * ureal[][]
      - * ureal[3][]
      - * ureal[][6][], ...
      - * ureal32
      - * ureal64[]
      - * ureal8[4]
      - * ureal256[][]
      - * ureal[3][]
      - * ureal64[][6][], ...
      - */
      -var SolidityTypeUReal = function () {
      -    this._inputFormatter = f.formatInputReal;
      -    this._outputFormatter = f.formatOutputUReal;
      -};
      - 
      -SolidityTypeUReal.prototype = new SolidityType({});
      -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal;
      - 
      -SolidityTypeUReal.prototype.isType = function (name) {
      -    return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/);
      -};
      - 
      -SolidityTypeUReal.prototype.staticPartLength = function (name) {
      -    return 32 * this.staticArrayLength(name);
      -};
      - 
      -module.exports = SolidityTypeUReal;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html deleted file mode 100644 index 2455021..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - Code coverage report for web3/lib/utils/config.js - - - - - - -
      -

      Code coverage report for web3/lib/utils/config.js

      -

      - Statements: 100% (3 / 3)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (3 / 3)      - Ignored: none      -

      -
      All files » web3/lib/utils/ » config.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file config.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -/**
      - * Utils
      - * 
      - * @module utils
      - */
      - 
      -/**
      - * Utility functions
      - * 
      - * @class [utils] config
      - * @constructor
      - */
      - 
      - 
      -/// required to define ETH_BIGNUMBER_ROUNDING_MODE
      -var BigNumber = require('bignumber.js');
      - 
      -var ETH_UNITS = [
      -    'wei',
      -    'kwei',
      -    'Mwei',
      -    'Gwei',
      -    'szabo',
      -    'finney',
      -    'femtoether',
      -    'picoether',
      -    'nanoether',
      -    'microether',
      -    'milliether',
      -    'nano',
      -    'micro',
      -    'milli',
      -    'ether',
      -    'grand',
      -    'Mether',
      -    'Gether',
      -    'Tether',
      -    'Pether',
      -    'Eether',
      -    'Zether',
      -    'Yether',
      -    'Nether',
      -    'Dether',
      -    'Vether',
      -    'Uether'
      -];
      - 
      -module.exports = {
      -    ETH_PADDING: 32,
      -    ETH_SIGNATURE_LENGTH: 4,
      -    ETH_UNITS: ETH_UNITS,
      -    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
      -    ETH_POLLING_TIMEOUT: 1000/2,
      -    defaultBlock: 'latest',
      -    defaultAccount: undefined
      -};
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html deleted file mode 100644 index c390aef..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - Code coverage report for web3/lib/utils/ - - - - - - -
      -

      Code coverage report for web3/lib/utils/

      -

      - Statements: 96.4% (134 / 139)      - Branches: 81.82% (63 / 77)      - Functions: 96.55% (28 / 29)      - Lines: 96.38% (133 / 138)      - Ignored: none      -

      -
      All files » web3/lib/utils/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      config.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
      sha3.js100%(8 / 8)87.5%(7 / 8)100%(1 / 1)100%(8 / 8)
      utils.js96.09%(123 / 128)81.16%(56 / 69)96.43%(27 / 28)96.06%(122 / 127)
      -
      -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html deleted file mode 100644 index 1b1aaef..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/utils/sha3.js - - - - - - -
      -

      Code coverage report for web3/lib/utils/sha3.js

      -

      - Statements: 100% (8 / 8)      - Branches: 87.5% (7 / 8)      - Functions: 100% (1 / 1)      - Lines: 100% (8 / 8)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -42 -2 -2 -  -2 -  -  -42 -  -  -  -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file sha3.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var CryptoJS = require('crypto-js');
      -var sha3 = require('crypto-js/sha3');
      - 
      -module.exports = function (value, options) {
      -    if (options && options.encoding === 'hex') {
      -        Eif (value.length > 2 && value.substr(0, 2) === '0x') {
      -            value = value.substr(2);
      -        }
      -        value = CryptoJS.enc.Hex.parse(value);
      -    }
      - 
      -    return sha3(value, {
      -        outputLength: 256
      -    }).toString();
      -};
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html deleted file mode 100644 index fd8a89a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html +++ /dev/null @@ -1,1638 +0,0 @@ - - - - Code coverage report for web3/lib/utils/utils.js - - - - - - -
      -

      Code coverage report for web3/lib/utils/utils.js

      -

      - Statements: 96.09% (123 / 128)      - Branches: 81.16% (56 / 69)      - Functions: 96.43% (27 / 28)      - Lines: 96.06% (122 / 127)      - Ignored: none      -

      -
      All files » web3/lib/utils/ » utils.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -205 -  -  -  -  -  -  -  -  -  -  -  -2 -38 -  -  -  -  -  -  -  -  -  -2 -  -10 -10 -10 -3 -  -10 -133 -133 -2 -131 -  -  -10 -  -  -  -  -  -  -  -  -  -2 -  -5 -5 -5 -5 -  -5 -110 -110 -  -  -5 -  -  -  -  -  -  -  -  -  -  -2 -25 -25 -25 -291 -291 -2 -289 -289 -  -  -25 -  -  -  -  -  -  -  -  -  -  -2 -10 -10 -236 -236 -236 -  -  -10 -  -  -  -  -  -  -  -  -  -2 -105 -48 -  -  -136 -57 -  -  -  -  -  -  -  -  -  -2 -101 -101 -  -  -  -2 -  -94 -94 -  -  -  -  -  -  -  -  -  -2 -193 -  -  -  -  -  -  -  -  -  -2 -160 -160 -  -160 -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -126 -2 -  -124 -1 -  -123 -2 -  -  -121 -62 -5 -57 -42 -15 -5 -  -  -69 -  -  -  -  -  -  -  -  -  -  -2 -39 -39 -39 -1 -  -38 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -12 -  -12 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -27 -  -26 -  -  -  -  -  -  -  -  -  -2 -  -705 -705 -47 -  -658 -208 -  -  -450 -  -  -  -  -  -  -  -  -  -2 -205 -205 -5 -  -200 -  -  -  -  -  -  -  -  -  -2 -78 -  -  -  -  -  -  -  -  -  -2 -24 -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -875 -  -  -  -  -  -  -  -  -  -  -2 -832 -  -  -  -  -  -  -  -  -  -  -2 -358 -  -  -  -  -  -  -  -  -  -2 -286 -  -  -  -  -  -  -  -  -  -2 -126 -  -  -  -  -  -  -  -  -  -2 -453 -  -  -  -  -  -  -  -  -  -2 -9 -9 -  -5 -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/**
      - * @file utils.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -/**
      - * Utils
      - *
      - * @module utils
      - */
      - 
      -/**
      - * Utility functions
      - *
      - * @class [utils] utils
      - * @constructor
      - */
      - 
      - 
      -var BigNumber = require('bignumber.js');
      -var utf8 = require('utf8');
      - 
      -var unitMap = {
      -    'wei':          '1',
      -    'kwei':         '1000',
      -    'ada':          '1000',
      -    'femtoether':   '1000',
      -    'mwei':         '1000000',
      -    'babbage':      '1000000',
      -    'picoether':    '1000000',
      -    'gwei':         '1000000000',
      -    'shannon':      '1000000000',
      -    'nanoether':    '1000000000',
      -    'nano':         '1000000000',
      -    'szabo':        '1000000000000',
      -    'microether':   '1000000000000',
      -    'micro':        '1000000000000',
      -    'finney':       '1000000000000000',
      -    'milliether':    '1000000000000000',
      -    'milli':         '1000000000000000',
      -    'ether':        '1000000000000000000',
      -    'kether':       '1000000000000000000000',
      -    'grand':        '1000000000000000000000',
      -    'einstein':     '1000000000000000000000',
      -    'mether':       '1000000000000000000000000',
      -    'gether':       '1000000000000000000000000000',
      -    'tether':       '1000000000000000000000000000000'
      -};
      - 
      -/**
      - * Should be called to pad string to expected length
      - *
      - * @method padLeft
      - * @param {String} string to be padded
      - * @param {Number} characters that result string should have
      - * @param {String} sign, by default 0
      - * @returns {String} right aligned string
      - */
      -var padLeft = function (string, chars, sign) {
      -    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
      -};
      - 
      -/**
      - * Should be called to pad string to expected length
      - *
      - * @method padRight
      - * @param {String} string to be padded
      - * @param {Number} characters that result string should have
      - * @param {String} sign, by default 0
      - * @returns {String} right aligned string
      - */
      -var padRight = function (string, chars, sign) {
      -    return string + (new Array(chars - string.length + 1).join(sign ? sign : "0"));
      -};
      - 
      -/**
      - * Should be called to get utf8 from it's hex representation
      - *
      - * @method toUtf8
      - * @param {String} string in hex
      - * @returns {String} ascii string representation of hex value
      - */
      -var toUtf8 = function(hex) {
      -// Find termination
      -    var str = "";
      -    var i = 0, l = hex.length;
      -    if (hex.substring(0, 2) === '0x') {
      -        i = 2;
      -    }
      -    for (; i < l; i+=2) {
      -        var code = parseInt(hex.substr(i, 2), 16);
      -        if (code === 0)
      -            break;
      -        str += String.fromCharCode(code);
      -    }
      - 
      -    return utf8.decode(str);
      -};
      - 
      -/**
      - * Should be called to get ascii from it's hex representation
      - *
      - * @method toAscii
      - * @param {String} string in hex
      - * @returns {String} ascii string representation of hex value
      - */
      -var toAscii = function(hex) {
      -// Find termination
      -    var str = "";
      -    var i = 0, l = hex.length;
      -    Eif (hex.substring(0, 2) === '0x') {
      -        i = 2;
      -    }
      -    for (; i < l; i+=2) {
      -        var code = parseInt(hex.substr(i, 2), 16);
      -        str += String.fromCharCode(code);
      -    }
      - 
      -    return str;
      -};
      - 
      -/**
      - * Should be called to get hex representation (prefixed by 0x) of utf8 a string
      - *
      - * @method fromUtf8
      - * @param {String} string
      - * @param {Number} optional padding
      - * @returns {String} hex representation of input string
      - */
      -var fromUtf8 = function(str) {
      -    str = utf8.encode(str);
      -    var hex = "";
      -    for(var i = 0; i < str.length; i++) {
      -        var code = str.charCodeAt(i);
      -        if (code === 0)
      -            break;
      -        var n = code.toString(16);
      -        hex += n.length < 2 ? '0' + n : n;
      -    }
      - 
      -    return "0x" + hex;
      -};
      - 
      -/**
      - * Should be called to get hex representation (prefixed by 0x) of ascii string
      - *
      - * @method fromAscii
      - * @param {String} string
      - * @param {Number} optional padding
      - * @returns {String} hex representation of input string
      - */
      -var fromAscii = function(str) {
      -    var hex = "";
      -    for(var i = 0; i < str.length; i++) {
      -        var code = str.charCodeAt(i);
      -        var n = code.toString(16);
      -        hex += n.length < 2 ? '0' + n : n;
      -    }
      - 
      -    return "0x" + hex;
      -};
      - 
      -/**
      - * Should be used to create full function/event name from json abi
      - *
      - * @method transformToFullName
      - * @param {Object} json-abi
      - * @return {String} full fnction/event name
      - */
      -var transformToFullName = function (json) {
      -    if (json.name.indexOf('(') !== -1) {
      -        return json.name;
      -    }
      - 
      -    var typeName = json.inputs.map(function(i){return i.type; }).join();
      -    return json.name + '(' + typeName + ')';
      -};
      - 
      -/**
      - * Should be called to get display name of contract function
      - *
      - * @method extractDisplayName
      - * @param {String} name of function/event
      - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
      - */
      -var extractDisplayName = function (name) {
      -    var length = name.indexOf('(');
      -    return length !== -1 ? name.substr(0, length) : name;
      -};
      - 
      -/// @returns overloaded part of function/event name
      -var extractTypeName = function (name) {
      -    /// TODO: make it invulnerable
      -    var length = name.indexOf('(');
      -    return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : "";
      -};
      - 
      -/**
      - * Converts value to it's decimal representation in string
      - *
      - * @method toDecimal
      - * @param {String|Number|BigNumber}
      - * @return {String}
      - */
      -var toDecimal = function (value) {
      -    return toBigNumber(value).toNumber();
      -};
      - 
      -/**
      - * Converts value to it's hex representation
      - *
      - * @method fromDecimal
      - * @param {String|Number|BigNumber}
      - * @return {String}
      - */
      -var fromDecimal = function (value) {
      -    var number = toBigNumber(value);
      -    var result = number.toString(16);
      - 
      -    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
      -};
      - 
      -/**
      - * Auto converts any given value into it's hex representation.
      - *
      - * And even stringifys objects before.
      - *
      - * @method toHex
      - * @param {String|Number|BigNumber|Object}
      - * @return {String}
      - */
      -var toHex = function (val) {
      -    /*jshint maxcomplexity: 8 */
      - 
      -    if (isBoolean(val))
      -        return fromDecimal(+val);
      - 
      -    if (isBigNumber(val))
      -        return fromDecimal(val);
      - 
      -    if (isObject(val))
      -        return fromUtf8(JSON.stringify(val));
      - 
      -    // if its a negative number, pass it through fromDecimal
      -    if (isString(val)) {
      -        if (val.indexOf('-0x') === 0)
      -            return fromDecimal(val);
      -        else if(val.indexOf('0x') === 0)
      -            return val;
      -        else if (!isFinite(val))
      -            return fromAscii(val);
      -    }
      - 
      -    return fromDecimal(val);
      -};
      - 
      -/**
      - * Returns value of unit in Wei
      - *
      - * @method getValueOfUnit
      - * @param {String} unit the unit to convert to, default ether
      - * @returns {BigNumber} value of the unit (in Wei)
      - * @throws error if the unit is not correct:w
      - */
      -var getValueOfUnit = function (unit) {
      -    unit = unit ? unit.toLowerCase() : 'ether';
      -    var unitValue = unitMap[unit];
      -    if (unitValue === undefined) {
      -        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
      -    }
      -    return new BigNumber(unitValue, 10);
      -};
      - 
      -/**
      - * Takes a number of wei and converts it to any other ether unit.
      - *
      - * Possible units are:
      - *   SI Short   SI Full        Effigy       Other
      - * - kwei       femtoether     ada
      - * - mwei       picoether      babbage
      - * - gwei       nanoether      shannon      nano
      - * - --         microether     szabo        micro
      - * - --         milliether     finney       milli
      - * - ether      --             --
      - * - kether                    einstein     grand
      - * - mether
      - * - gether
      - * - tether
      - *
      - * @method fromWei
      - * @param {Number|String} number can be a number, number string or a HEX of a decimal
      - * @param {String} unit the unit to convert to, default ether
      - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
      -*/
      -var fromWei = function(number, unit) {
      -    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));
      - 
      -    return isBigNumber(number) ? returnValue : returnValue.toString(10);
      -};
      - 
      -/**
      - * Takes a number of a unit and converts it to wei.
      - *
      - * Possible units are:
      - *   SI Short   SI Full        Effigy       Other
      - * - kwei       femtoether     ada
      - * - mwei       picoether      babbage
      - * - gwei       nanoether      shannon      nano
      - * - --         microether     szabo        micro
      - * - --         milliether     finney       milli
      - * - ether      --             --
      - * - kether                    einstein     grand
      - * - mether
      - * - gether
      - * - tether
      - *
      - * @method toWei
      - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
      - * @param {String} unit the unit to convert from, default ether
      - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
      -*/
      -var toWei = function(number, unit) {
      -    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));
      - 
      -    return isBigNumber(number) ? returnValue : returnValue.toString(10);
      -};
      - 
      -/**
      - * Takes an input and transforms it into an bignumber
      - *
      - * @method toBigNumber
      - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
      - * @return {BigNumber} BigNumber
      -*/
      -var toBigNumber = function(number) {
      -    /*jshint maxcomplexity:5 */
      -    number = number || 0;
      -    if (isBigNumber(number))
      -        return number;
      - 
      -    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
      -        return new BigNumber(number.replace('0x',''), 16);
      -    }
      - 
      -    return new BigNumber(number.toString(10), 10);
      -};
      - 
      -/**
      - * Takes and input transforms it into bignumber and if it is negative value, into two's complement
      - *
      - * @method toTwosComplement
      - * @param {Number|String|BigNumber}
      - * @return {BigNumber}
      - */
      -var toTwosComplement = function (number) {
      -    var bigNumber = toBigNumber(number);
      -    if (bigNumber.lessThan(0)) {
      -        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
      -    }
      -    return bigNumber;
      -};
      - 
      -/**
      - * Checks if the given string is strictly an address
      - *
      - * @method isStrictAddress
      - * @param {String} address the given HEX adress
      - * @return {Boolean}
      -*/
      -var isStrictAddress = function (address) {
      -    return /^0x[0-9a-f]{40}$/i.test(address);
      -};
      - 
      -/**
      - * Checks if the given string is an address
      - *
      - * @method isAddress
      - * @param {String} address the given HEX adress
      - * @return {Boolean}
      -*/
      -var isAddress = function (address) {
      -    return /^(0x)?[0-9a-f]{40}$/i.test(address);
      -};
      - 
      -/**
      - * Transforms given string to valid 20 bytes-length addres with 0x prefix
      - *
      - * @method toAddress
      - * @param {String} address
      - * @return {String} formatted address
      - */
      -var toAddress = function (address) {
      -    if (isStrictAddress(address)) {
      -        return address;
      -    }
      - 
      -    if (/^[0-9a-f]{40}$/.test(address)) {
      -        return '0x' + address;
      -    }
      - 
      -    return '0x' + padLeft(toHex(address).substr(2), 40);
      -};
      - 
      -/**
      - * Returns true if object is BigNumber, otherwise false
      - *
      - * @method isBigNumber
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isBigNumber = function (object) {
      -    return object instanceof BigNumber ||
      -        (object && object.constructor && object.constructor.name === 'BigNumber');
      -};
      - 
      -/**
      - * Returns true if object is string, otherwise false
      - *
      - * @method isString
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isString = function (object) {
      -    return typeof object === 'string' ||
      -        (object && object.constructor && object.constructor.name === 'String');
      -};
      - 
      -/**
      - * Returns true if object is function, otherwise false
      - *
      - * @method isFunction
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isFunction = function (object) {
      -    return typeof object === 'function';
      -};
      - 
      -/**
      - * Returns true if object is Objet, otherwise false
      - *
      - * @method isObject
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isObject = function (object) {
      -    return typeof object === 'object';
      -};
      - 
      -/**
      - * Returns true if object is boolean, otherwise false
      - *
      - * @method isBoolean
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isBoolean = function (object) {
      -    return typeof object === 'boolean';
      -};
      - 
      -/**
      - * Returns true if object is array, otherwise false
      - *
      - * @method isArray
      - * @param {Object}
      - * @return {Boolean}
      - */
      -var isArray = function (object) {
      -    return object instanceof Array;
      -};
      - 
      -/**
      - * Returns true if given string is valid json object
      - *
      - * @method isJson
      - * @param {String}
      - * @return {Boolean}
      - */
      -var isJson = function (str) {
      -    try {
      -        return !!JSON.parse(str);
      -    } catch (e) {
      -        return false;
      -    }
      -};
      - 
      -module.exports = {
      -    padLeft: padLeft,
      -    padRight: padRight,
      -    toHex: toHex,
      -    toDecimal: toDecimal,
      -    fromDecimal: fromDecimal,
      -    toUtf8: toUtf8,
      -    toAscii: toAscii,
      -    fromUtf8: fromUtf8,
      -    fromAscii: fromAscii,
      -    transformToFullName: transformToFullName,
      -    extractDisplayName: extractDisplayName,
      -    extractTypeName: extractTypeName,
      -    toWei: toWei,
      -    fromWei: fromWei,
      -    toBigNumber: toBigNumber,
      -    toTwosComplement: toTwosComplement,
      -    toAddress: toAddress,
      -    isBigNumber: isBigNumber,
      -    isStrictAddress: isStrictAddress,
      -    isAddress: isAddress,
      -    isFunction: isFunction,
      -    isString: isString,
      -    isObject: isObject,
      -    isBoolean: isBoolean,
      -    isArray: isArray,
      -    isJson: isJson
      -};
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html deleted file mode 100644 index 1a926e7..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - Code coverage report for web3/lib/web3.js - - - - - - -
      -

      Code coverage report for web3/lib/web3.js

      -

      - Statements: 98.25% (56 / 57)      - Branches: 0% (0 / 2)      - Functions: 85.71% (6 / 7)      - Lines: 98.25% (56 / 57)      - Ignored: none      -

      -
      All files » web3/lib/ » web3.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -1 -154 -154 -154 -154 -154 -154 -154 -154 -  -  -154 -  -  -  -154 -154 -  -  -  -  -  -1 -  -  -  -  -1 -25 -25 -  -  -1 -13 -13 -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -  -1 -1 -1 -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -1 -4 -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file web3.js
      - * @authors:
      - *   Jeffrey Wilcke <jeff@ethdev.com>
      - *   Marek Kotewicz <marek@ethdev.com>
      - *   Marian Oancea <marian@ethdev.com>
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - *   Gav Wood <g@ethdev.com>
      - * @date 2014
      - */
      - 
      -var RequestManager = require('./web3/requestmanager');
      -var Iban = require('./web3/iban');
      -var Eth = require('./web3/methods/eth');
      -var DB = require('./web3/methods/db');
      -var Shh = require('./web3/methods/shh');
      -var Net = require('./web3/methods/net');
      -var Settings = require('./web3/settings');
      -var version = require('./version.json');
      -var utils = require('./utils/utils');
      -var sha3 = require('./utils/sha3');
      -var extend = require('./web3/extend');
      -var Batch = require('./web3/batch');
      -var Property = require('./web3/property');
      -var HttpProvider = require('./web3/httpprovider');
      -var IpcProvider = require('./web3/ipcprovider');
      - 
      - 
      - 
      -function Web3 (provider) {
      -    this._requestManager = new RequestManager(provider);
      -    this.currentProvider = provider;
      -    this.eth = new Eth(this);
      -    this.db = new DB(this);
      -    this.shh = new Shh(this);
      -    this.net = new Net(this);
      -    this.settings = new Settings();
      -    this.version = {
      -        api: version.version
      -    };
      -    this.providers = {
      -        HttpProvider: HttpProvider,
      -        IpcProvider: IpcProvider
      -    };
      -    this._extend = extend(this);
      -    this._extend({
      -        properties: properties()
      -    });
      -}
      - 
      -// expose providers on the class
      -Web3.providers = {
      -    HttpProvider: HttpProvider,
      -    IpcProvider: IpcProvider
      -};
      - 
      -Web3.prototype.setProvider = function (provider) {
      -    this._requestManager.setProvider(provider);
      -    this.currentProvider = provider;
      -};
      - 
      -Web3.prototype.reset = function (keepIsSyncing) {
      -    this._requestManager.reset(keepIsSyncing);
      -    this.settings = new Settings();
      -};
      - 
      -Web3.prototype.toHex = utils.toHex;
      -Web3.prototype.toAscii = utils.toAscii;
      -Web3.prototype.toUtf8 = utils.toUtf8;
      -Web3.prototype.fromAscii = utils.fromAscii;
      -Web3.prototype.fromUtf8 = utils.fromUtf8;
      -Web3.prototype.toDecimal = utils.toDecimal;
      -Web3.prototype.fromDecimal = utils.fromDecimal;
      -Web3.prototype.toBigNumber = utils.toBigNumber;
      -Web3.prototype.toWei = utils.toWei;
      -Web3.prototype.fromWei = utils.fromWei;
      -Web3.prototype.isAddress = utils.isAddress;
      -Web3.prototype.isIBAN = utils.isIBAN;
      -Web3.prototype.sha3 = sha3;
      - 
      -/**
      - * Transforms direct icap to address
      - */
      -Web3.prototype.fromICAP = function (icap) {
      -    var iban = new Iban(icap);
      -    return iban.address();
      -};
      - 
      -var properties = function () {
      -    return [
      -        new Property({
      -            name: 'version.node',
      -            getter: 'web3_clientVersion'
      -        }),
      -        new Property({
      -            name: 'version.network',
      -            getter: 'net_version',
      -            inputFormatter: utils.toDecimal
      -        }),
      -        new Property({
      -            name: 'version.ethereum',
      -            getter: 'eth_protocolVersion',
      -            inputFormatter: utils.toDecimal
      -        }),
      -        new Property({
      -            name: 'version.whisper',
      -            getter: 'shh_version',
      -            inputFormatter: utils.toDecimal
      -        })
      -    ];
      -};
      - 
      -Web3.prototype.isConnected = function(){
      -    return (this.currentProvider && this.currentProvider.isConnected());
      -};
      - 
      -Web3.prototype.createBatch = function () {
      -    return new Batch(this);
      -};
      - 
      -module.exports = Web3;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html deleted file mode 100644 index 493184b..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - Code coverage report for web3/lib/web3/allevents.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/allevents.js

      -

      - Statements: 85.37% (35 / 41)      - Branches: 50% (6 / 12)      - Functions: 87.5% (7 / 8)      - Lines: 85.37% (35 / 41)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » allevents.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -  -1 -26 -26 -26 -  -  -1 -1 -1 -  -1 -2 -  -  -  -  -1 -  -1 -  -  -1 -2 -2 -  -2 -2 -2 -  -  -2 -  -  -  -  -2 -2 -  -  -1 -  -1 -  -  -  -  -  -1 -1 -1 -  -  -1 -26 -26 -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file allevents.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2014
      - */
      - 
      -var sha3 = require('../utils/sha3');
      -var SolidityEvent = require('./event');
      -var formatters = require('./formatters');
      -var utils = require('../utils/utils');
      -var Filter = require('./filter');
      -var watches = require('./methods/watches');
      - 
      -var AllSolidityEvents = function (requestManager, json, address) {
      -    this._requestManager = requestManager;
      -    this._json = json;
      -    this._address = address;
      -};
      - 
      -AllSolidityEvents.prototype.encode = function (options) {
      -    options = options || {};
      -    var result = {};
      - 
      -    ['fromBlock', 'toBlock'].filter(function (f) {
      -        return options[f] !== undefined;
      -    }).forEach(function (f) {
      -        result[f] = formatters.inputBlockNumberFormatter(options[f]);
      -    });
      - 
      -    result.address = this._address;
      - 
      -    return result;
      -};
      - 
      -AllSolidityEvents.prototype.decode = function (data) {
      -    data.data = data.data || '';
      -    data.topics = data.topics || [];
      - 
      -    var eventTopic = data.topics[0].slice(2);
      -    var match = this._json.filter(function (j) {
      -        return eventTopic === sha3(utils.transformToFullName(j));
      -    })[0];
      - 
      -    Iif (!match) { // cannot find matching event?
      -        console.warn('cannot find event for log');
      -        return data;
      -    }
      - 
      -    var event = new SolidityEvent(this._requestManager, match, this._address);
      -    return event.decode(data);
      -};
      - 
      -AllSolidityEvents.prototype.execute = function (options, callback) {
      - 
      -    Iif (utils.isFunction(arguments[arguments.length - 1])) {
      -        callback = arguments[arguments.length - 1];
      -        if(arguments.length === 1)
      -            options = null;
      -    }
      - 
      -    var o = this.encode(options);
      -    var formatter = this.decode.bind(this);
      -    return new Filter(this._requestManager, o, watches.eth(), formatter, callback);
      -};
      - 
      -AllSolidityEvents.prototype.attachToContract = function (contract) {
      -    var execute = this.execute.bind(this);
      -    contract.allEvents = execute;
      -};
      - 
      -module.exports = AllSolidityEvents;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html deleted file mode 100644 index abe7311..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - Code coverage report for web3/lib/web3/batch.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/batch.js

      -

      - Statements: 100% (18 / 18)      - Branches: 60% (6 / 10)      - Functions: 100% (6 / 6)      - Lines: 100% (18 / 18)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » batch.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -4 -4 -  -  -  -  -  -  -  -  -1 -8 -  -  -  -  -  -  -  -1 -4 -4 -4 -4 -8 -  -8 -  -8 -2 -  -  -6 -  -  -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file batch.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Jsonrpc = require('./jsonrpc');
      -var errors = require('./errors');
      - 
      -var Batch = function (web3) {
      -    this.requestManager = web3._requestManager;
      -    this.requests = [];
      -};
      - 
      -/**
      - * Should be called to add create new request to batch request
      - *
      - * @method add
      - * @param {Object} jsonrpc requet object
      - */
      -Batch.prototype.add = function (request) {
      -    this.requests.push(request);
      -};
      - 
      -/**
      - * Should be called to execute batch request
      - *
      - * @method execute
      - */
      -Batch.prototype.execute = function () {
      -    var requests = this.requests;
      -    this.requestManager.sendBatch(requests, function (err, results) {
      -        results = results || [];
      -        requests.map(function (request, index) {
      -            return results[index] || {};
      -        }).forEach(function (result, index) {
      -            Eif (requests[index].callback) {
      - 
      -                if (!Jsonrpc.getInstance().isValidResponse(result)) {
      -                    return requests[index].callback(errors.InvalidResponse(result));
      -                }
      - 
      -                requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));
      -            }
      -        });
      -    }); 
      -};
      - 
      -module.exports = Batch;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html deleted file mode 100644 index b19457e..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - Code coverage report for web3/lib/web3/contract.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/contract.js

      -

      - Statements: 59.6% (59 / 99)      - Branches: 23.81% (10 / 42)      - Functions: 77.27% (17 / 22)      - Lines: 59.6% (59 / 99)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » contract.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -1 -1 -  -1 -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -26 -91 -  -68 -  -68 -  -  -  -  -  -  -  -  -  -  -1 -26 -91 -  -  -26 -26 -  -26 -22 -22 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -  -27 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -1 -  -1 -1 -1 -  -  -1 -1 -1 -  -  -1 -1 -  -1 -  -  -1 -1 -  -  -  -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -26 -  -  -  -26 -26 -  -26 -  -  -26 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -27 -27 -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file contract.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2014
      - */
      - 
      -var utils = require('../utils/utils');
      -var coder = require('../solidity/coder');
      -var ContractEvent = require('./event');
      -var SolidityFunction = require('./function');
      - 
      -/**
      - * Should be called to encode constructor params
      - *
      - * @method encodeConstructorParams
      - * @param {Array} abi
      - * @param {Array} constructor params
      - */
      -var encodeConstructorParams = function (abi, params) {
      -    return abi.filter(function (json) {
      -        return json.type === 'constructor' && json.inputs.length === params.length;
      -    }).map(function (json) {
      -        return json.inputs.map(function (input) {
      -            return input.type;
      -        });
      -    }).map(function (types) {
      -        return coder.encodeParams(types, params);
      -    })[0] || '';
      -};
      - 
      -/**
      - * Should be called to add functions to contract object
      - *
      - * @method addFunctionsToContract
      - * @param {Contract} contract
      - * @param {Array} abi
      - */
      -var addFunctionsToContract = function (contract) {
      -    contract.abi.filter(function (json) {
      -        return json.type === 'function';
      -    }).map(function (json) {
      -        return new SolidityFunction(contract._eth, json, contract.address);
      -    }).forEach(function (f) {
      -        f.attachToContract(contract);
      -    });
      -};
      - 
      -/**
      - * Should be called to add events to contract object
      - *
      - * @method addEventsToContract
      - * @param {Contract} contract
      - * @param {Array} abi
      - */
      -var addEventsToContract = function (contract) {
      -    var events = contract.abi.filter(function (json) {
      -        return json.type === 'event';
      -    });
      - 
      -    var allEvents = new ContractEvent(contract._eth._requestManager, events, contract.address, true);
      -    allEvents.attachToContract(contract);
      -    
      -    events.map(function (json) {
      -        var ev = new ContractEvent(contract._eth._requestManager, json, contract.address);
      -        ev.attachToContract(contract);
      -    });
      -};
      - 
      - 
      -/**
      - * Should be called to check if the contract gets properly deployed on the blockchain.
      - *
      - * @method checkForContractAddress
      - * @param {Object} contract
      - * @param {Function} callback
      - * @returns {Undefined}
      - */
      -var checkForContractAddress = function(contract, callback){
      -    var count = 0,
      -        callbackFired = false;
      - 
      -    // wait for receipt
      -    var filter = contract._eth.filter('latest', function(e){
      -        if (!e && !callbackFired) {
      -            count++;
      - 
      -            // stop watching after 50 blocks (timeout)
      -            if (count > 50) {
      -                
      -                filter.stopWatching();
      -                callbackFired = true;
      - 
      -                if (callback)
      -                    callback(new Error('Contract transaction couldn\'t be found after 50 blocks'));
      -                else
      -                    throw new Error('Contract transaction couldn\'t be found after 50 blocks');
      - 
      - 
      -            } else {
      - 
      -                contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){
      -                    if(receipt && !callbackFired) {
      - 
      -                        contract._eth.getCode(receipt.contractAddress, function(e, code){
      -                            /*jshint maxcomplexity: 6 */
      - 
      -                            if(callbackFired || !code)
      -                                return;
      -                            
      -                            filter.stopWatching();
      -                            callbackFired = true;
      - 
      -                            if(code.length > 2) {
      - 
      -                                // console.log('Contract code deployed!');
      - 
      -                                contract.address = receipt.contractAddress;
      - 
      -                                // attach events and methods again after we have
      -                                addFunctionsToContract(contract);
      -                                addEventsToContract(contract);
      - 
      -                                // call callback for the second time
      -                                if(callback)
      -                                    callback(null, contract);
      - 
      -                            } else {
      -                                if(callback)
      -                                    callback(new Error('The contract code couldn\'t be stored, please check your gas amount.'));
      -                                else
      -                                    throw new Error('The contract code couldn\'t be stored, please check your gas amount.');
      -                            }
      -                        });
      -                    }
      -                });
      -            }
      -        }
      -    });
      -};
      - 
      -/**
      - * Should be called to create new ContractFactory instance
      - *
      - * @method ContractFactory
      - * @param {Array} abi
      - */
      -var ContractFactory = function (eth, abi) {
      -    this.eth = eth;
      -    this.abi = abi;
      - 
      -    this.new.getData = this.getData.bind(this);
      -};
      - 
      -/**
      - * Should be called to create new ContractFactory
      - *
      - * @method contract
      - * @param {Array} abi
      - * @returns {ContractFactory} new contract factory
      - */
      -//var contract = function (abi) {
      -    //return new ContractFactory(abi);
      -//};
      - 
      -/**
      - * Should be called to create new contract on a blockchain
      - * 
      - * @method new
      - * @param {Any} contract constructor param1 (optional)
      - * @param {Any} contract constructor param2 (optional)
      - * @param {Object} contract transaction object (required)
      - * @param {Function} callback
      - * @returns {Contract} returns contract instance
      - */
      -ContractFactory.prototype.new = function () {
      -    var contract = new Contract(this.eth, this.abi);
      - 
      -    // parse arguments
      -    var options = {}; // required!
      -    var callback;
      - 
      -    var args = Array.prototype.slice.call(arguments);
      -    Eif (utils.isFunction(args[args.length - 1])) {
      -        callback = args.pop();
      -    }
      - 
      -    var last = args[args.length - 1];
      -    Eif (utils.isObject(last) && !utils.isArray(last)) {
      -        options = args.pop();
      -    }
      - 
      -    var bytes = encodeConstructorParams(this.abi, args);
      -    options.data += bytes;
      - 
      -    Eif (callback) {
      - 
      -        // wait for the contract address adn check if the code was deployed
      -        this.eth.sendTransaction(options, function (err, hash) {
      -            Iif (err) {
      -                callback(err);
      -            } else {
      -                // add the transaction hash
      -                contract.transactionHash = hash;
      - 
      -                // call callback for the first time
      -                callback(null, contract);
      - 
      -                checkForContractAddress(contract, callback);
      -            }
      -        });
      -    } else {
      -        var hash = this.eth.sendTransaction(options);
      -        // add the transaction hash
      -        contract.transactionHash = hash;
      -        checkForContractAddress(contract);
      -    }
      - 
      -    return contract;
      -};
      - 
      -/**
      - * Should be called to get access to existing contract on a blockchain
      - *
      - * @method at
      - * @param {Address} contract address (required)
      - * @param {Function} callback {optional)
      - * @returns {Contract} returns contract if no callback was passed,
      - * otherwise calls callback function (err, contract)
      - */
      -ContractFactory.prototype.at = function (address, callback) {
      -    var contract = new Contract(this.eth, this.abi, address);
      - 
      -    // this functions are not part of prototype, 
      -    // because we dont want to spoil the interface
      -    addFunctionsToContract(contract);
      -    addEventsToContract(contract);
      -    
      -    Iif (callback) {
      -        callback(null, contract);
      -    } 
      -    return contract;
      -};
      - 
      -/**
      - * Gets the data, which is data to deploy plus constructor params
      - *
      - * @method getData
      - */
      -ContractFactory.prototype.getData = function () {
      -    var options = {}; // required!
      -    var args = Array.prototype.slice.call(arguments);
      - 
      -    var last = args[args.length - 1];
      -    if (utils.isObject(last) && !utils.isArray(last)) {
      -        options = args.pop();
      -    }
      - 
      -    var bytes = encodeConstructorParams(this.abi, args);
      -    options.data += bytes;
      - 
      -    return options.data;
      -};
      - 
      -/**
      - * Should be called to create new contract instance
      - *
      - * @method Contract
      - * @param {Array} abi
      - * @param {Address} contract address
      - */
      -var Contract = function (eth, abi, address) {
      -    this._eth = eth;
      -    this.transactionHash = null;
      -    this.address = address;
      -    this.abi = abi;
      -};
      - 
      -module.exports = ContractFactory;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html deleted file mode 100644 index a03587d..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/web3/errors.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/errors.js

      -

      - Statements: 83.33% (5 / 6)      - Branches: 100% (5 / 5)      - Functions: 75% (3 / 4)      - Lines: 83.33% (5 / 6)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » errors.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -3 -  -4 -  -  -  -  -  -7 -  -  -6 -6 -  -  -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file errors.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -module.exports = {
      -    InvalidNumberOfParams: function () {
      -        return new Error('Invalid number of input parameters');
      -    },
      -    InvalidConnection: function (host){
      -        return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.');
      -    },
      -    InvalidProvider: function () {
      -        return new Error('Provider not set or invalid');
      -    },
      -    InvalidResponse: function (result){
      -        var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
      -        return new Error(message);
      -    }
      -};
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html deleted file mode 100644 index f6a2688..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html +++ /dev/null @@ -1,981 +0,0 @@ - - - - Code coverage report for web3/lib/web3/event.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/event.js

      -

      - Statements: 91.51% (97 / 106)      - Branches: 83.33% (35 / 42)      - Functions: 90.91% (20 / 22)      - Lines: 91.43% (96 / 105)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » event.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -  -  -  -1 -61 -61 -61 -61 -61 -61 -61 -  -  -  -  -  -  -  -  -  -  -1 -16 -50 -  -25 -  -  -  -  -  -  -  -  -  -  -1 -30 -  -  -  -  -  -  -  -  -1 -22 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -12 -12 -12 -  -  -12 -24 -  -4 -  -  -12 -  -  -12 -  -11 -9 -  -  -11 -21 -  -16 -16 -6 -  -  -10 -1 -2 -  -  -9 -  -  -11 -  -  -12 -  -12 -  -  -  -  -  -  -  -  -  -1 -8 -8 -8 -  -  -8 -  -1 -1 -1 -  -  -1 -  -  -  -  -1 -1 -1 -  -  -  -7 -7 -7 -  -  -8 -12 -8 -  -8 -8 -  -8 -8 -8 -  -8 -25 -25 -  -  -8 -8 -  -8 -  -  -  -  -  -  -  -  -  -  -1 -  -3 -3 -  -3 -1 -  -  -  -3 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -3 -3 -  -  -  -  -  -  -  -  -  -  -3 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -48 -  -  -48 -  -  -48 -26 -  -  -  -  -22 -22 -22 -  -22 -  -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file event.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @author Fabian Vogelsteller <fabian@frozeman.de>
      - * @date 2016
      - */
      - 
      -var utils = require('../utils/utils');
      -var coder = require('../solidity/coder');
      -var formatters = require('./formatters');
      -var sha3 = require('../utils/sha3');
      -var Subscription = require('./subscription');
      - 
      -/**
      - * This prototype should be used to create event filters
      - */
      -var ContractEvent = function (requestManager, json, address, allEvents) {
      -    this._requestManager = requestManager;
      -    this._address = address;
      -    this._json = json;
      -    this._name = json.inputs ? utils.transformToFullName(json) : null;
      -    this._params = json.inputs;
      -    this._anonymous = json.anonymous;
      -    this._allEvents = !!allEvents;
      -};
      - 
      -/**
      - * Should be used to get filtered param types
      - *
      - * @method types
      - * @param {Bool} decide if returned typed should be indexed
      - * @param {Object} params the parameters of the event
      - * @return {Array} array of types
      - */
      -ContractEvent.prototype.types = function (indexed, params) {
      -    return params.filter(function (i) {
      -        return i.indexed === indexed;
      -    }).map(function (i) {
      -        return i.type;
      -    });
      -};
      - 
      -/**
      - * Should be used to get event display name
      - *
      - * @method displayName
      - * @param {String} name (optional) the events name
      - * @return {String} event display name
      - */
      -ContractEvent.prototype.displayName = function (name) {
      -    return utils.extractDisplayName(name || this._name);
      -};
      - 
      -/**
      - * Should be used to get event type name
      - *
      - * @method typeName
      - * @return {String} event type name
      - */
      -ContractEvent.prototype.typeName = function () {
      -    return utils.extractTypeName(this._name);
      -};
      - 
      -/**
      - * Should be used to get event signature
      - *
      - * @method signature
      - * @return {String} event signature
      - */
      -ContractEvent.prototype.signature = function () {
      -    return sha3(this._name);
      -};
      - 
      -/**
      - * Should be used to encode indexed params and options to one final object
      - * 
      - * @method encode
      - * @param {Object} options
      - * @return {Object} everything combined together and encoded
      - */
      -ContractEvent.prototype.encode = function (options) {
      -    options = options || {};
      -    indexed = options.filter || {};
      -    var result = {};
      - 
      - 
      -    ['fromBlock', 'toBlock'].filter(function (f) {
      -        return options[f] !== undefined;
      -    }).forEach(function (f) {
      -        result[f] = formatters.inputBlockNumberFormatter(options[f]);
      -    });
      - 
      -    result.topics = [];
      - 
      -    // single events
      -    if(!this._allEvents) {
      -        
      -        if (!this._anonymous) {
      -            result.topics.push('0x' + this.signature());
      -        }
      - 
      -        var indexedTopics = this._params.filter(function (i) {
      -            return i.indexed === true;
      -        }).map(function (i) {
      -            var value = indexed[i.name];
      -            if (value === undefined || value === null) {
      -                return null;
      -            }
      -            
      -            if (utils.isArray(value)) {
      -                return value.map(function (v) {
      -                    return '0x' + coder.encodeParam(i.type, v);
      -                });
      -            }
      -            return '0x' + coder.encodeParam(i.type, value);
      -        });
      - 
      -        result.topics = result.topics.concat(indexedTopics);
      -    }
      - 
      -    result.address = this._address;
      - 
      -    return result;
      -};
      - 
      -/**
      - * Should be used to decode indexed params and options
      - *
      - * @method decode
      - * @param {Object} data
      - * @return {Object} result object with decoded indexed && not indexed params
      - */
      -ContractEvent.prototype.decode = function (data) {
      -    var name = params = anonymous = null;
      -    data.data = data.data || '';
      -    data.topics = data.topics || [];
      - 
      -    // all events
      -    if(this._allEvents) {
      - 
      -        var eventTopic = data.topics[0].slice(2);
      -        var match = this._json.filter(function (j) {
      -            return eventTopic === sha3(utils.transformToFullName(j));
      -        })[0];
      - 
      -        Iif (!match) { // cannot find matching event?
      -            console.warn('Can\'t find event for log');
      -            return data;
      -        }
      - 
      -        name = utils.transformToFullName(match);
      -        params = match.inputs;
      -        anonymous = match.anonymous;
      - 
      -    // single event
      -    } else {
      -        name = this._name;
      -        params = this._params;
      -        anonymous = this._anonymous;
      -    }
      - 
      -    var argTopics = anonymous ? data.topics : data.topics.slice(1);
      -    var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join("");
      -    var indexedParams = coder.decodeParams(this.types(true, params), indexedData); 
      - 
      -    var notIndexedData = data.data.slice(2);
      -    var notIndexedParams = coder.decodeParams(this.types(false, params), notIndexedData);
      -    
      -    var result = formatters.outputLogFormatter(data);
      -    result.event = this.displayName(name);
      -    result.address = data.address;
      - 
      -    result.returnValues = params.reduce(function (acc, current) {
      -        acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();
      -        return acc;
      -    }, {});
      - 
      -    delete result.data;
      -    delete result.topics;
      - 
      -    return result;
      -};
      - 
      -/**
      - * Get the arguments of the function call
      - *
      - * @method getArgs
      - * @param {Object} options
      - * @param {Function} callback
      - * @return {Object} filter object
      - */
      -ContractEvent.prototype.getArgs = function (options, callback) {
      - 
      -    Eif (utils.isFunction(arguments[arguments.length - 1])) {
      -        callback = arguments[arguments.length - 1];
      - 
      -        if(arguments.length === 1) {
      -            options = null;
      -        }
      -    }
      -    
      -    return {
      -        options: this.encode(options),
      -        formatter: this.decode.bind(this),
      -        callback: callback
      -    };
      -};
      - 
      -/**
      - * Should be used to create new filter object from event
      - *
      - * @method execute
      - * @param {Object} options
      - * @param {Function} callback
      - * @return {Object} filter object
      - */
      -ContractEvent.prototype.execute = function (options, callback) {
      - 
      -    var args = this.getArgs.apply(this, arguments);
      -    var subscription = new Subscription({
      -        subscription: {
      -            params: 1,
      -            inputFormatter: [formatters.inputLogFormatter],
      -            outputFormatter: args.formatter
      -        },
      -        subscribeMethod: 'eth_subscribe',
      -        unsubscribeMethod: 'eth_unsubscribe',
      -        requestManager: this._requestManager
      -    });
      - 
      -    return subscription.subscribe.apply(subscription, ['logs', args.options, args.callback]);
      -};
      - 
      -// TODO: put indexed args into the options object
      - 
      -/**
      - * Get past logs for this event
      - *
      - * @method getPastEvents
      - * @param {Object} options
      - * @param {Function} callback
      - * @param {Contract}
      - */
      -ContractEvent.prototype.getPastEvents = function(options, callback){
      - 
      -    var args = this.getArgs.apply(this, arguments);
      - 
      -    if (utils.isFunction(callback)) {
      -        this._requestManager.sendAsync({
      -            method: 'eth_getLogs',
      -            params: [args.options]
      -        }, function(error, logs){
      -            if(!error) {
      -                args.callback(null, logs.map(args.formatter));
      -            } else {
      -                args.callback(error);
      -            }
      -        });
      -    }
      - 
      -    return this._requestManager.send({
      -        method: 'eth_getLogs',
      -        params: [args.options]
      -    }).map(args.formatter);
      -};
      - 
      -/**
      - * Should be used to attach event to contract object
      - *
      - * @method attachToContract
      - * @param {Contract}
      - */
      -ContractEvent.prototype.attachToContract = function (contract) {
      -    var execute = this.execute.bind(this);
      - 
      -    // attach past logs
      -    execute.getPastEvents = this.getPastEvents.bind(this);
      - 
      -    // all events
      -    if(this._allEvents) {
      -        contract.allEvents = execute;
      -    
      -    // single event
      -    } else {
      - 
      -        var displayName = this.displayName();
      -        Eif (!contract[displayName]) {
      -            contract[displayName] = execute;
      -        }
      -        contract[displayName][this.typeName()] = this.execute.bind(this, contract);
      -    }
      - 
      -};
      - 
      -module.exports = ContractEvent;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html deleted file mode 100644 index 7d2e620..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - Code coverage report for web3/lib/web3/extend.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/extend.js

      -

      - Statements: 100% (26 / 26)      - Branches: 87.5% (7 / 8)      - Functions: 100% (4 / 4)      - Lines: 100% (26 / 26)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » extend.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -491 -1 -1 -1 -  -  -  -1 -  -154 -  -157 -157 -1 -1 -  -1 -  -156 -  -  -157 -2 -2 -2 -  -  -  -157 -156 -618 -618 -  -  -  -  -154 -154 -154 -154 -  -154 -  -  -  -  -1 -  - 
      var formatters = require('./formatters');
      -var utils = require('./../utils/utils');
      -var Method = require('./method');
      -var Property = require('./property');
      - 
      -// TODO: refactor, so the input params are not altered.
      -// it's necessary to make same 'extension' work with multiple providers
      -var extend = function (web3) {
      -    /* jshint maxcomplexity:5 */
      -    var ex = function (extension) {
      - 
      -        var extendedObject;
      -        if (extension.property) {
      -            Eif (!web3[extension.property]) {
      -                web3[extension.property] = {};
      -            }
      -            extendedObject = web3[extension.property];
      -        } else {
      -            extendedObject = web3;
      -        }
      - 
      -        if (extension.methods) {
      -            extension.methods.forEach(function (method) {
      -                method.attachToObject(extendedObject);
      -                method.setRequestManager(web3._requestManager);
      -            });
      -        }
      - 
      -        if (extension.properties) {
      -            extension.properties.forEach(function (property) {
      -                property.attachToObject(extendedObject);
      -                property.setRequestManager(web3._requestManager);
      -            });
      -        }
      -    };
      - 
      -    ex.formatters = formatters; 
      -    ex.utils = utils;
      -    ex.Method = Method;
      -    ex.Property = Property;
      - 
      -    return ex;
      -};
      - 
      - 
      - 
      -module.exports = extend;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html deleted file mode 100644 index 59be9e4..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html +++ /dev/null @@ -1,735 +0,0 @@ - - - - Code coverage report for web3/lib/web3/filter.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/filter.js

      -

      - Statements: 90.22% (83 / 92)      - Branches: 73.91% (34 / 46)      - Functions: 87.5% (21 / 24)      - Lines: 90.22% (83 / 92)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » filter.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -1 -  -19 -4 -  -15 -  -15 -12 -  -3 -  -  -  -  -  -1 -  -15 -6 -  -  -9 -  -  -9 -9 -17 -  -  -9 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -7 -3 -  -3 -  -  -  -3 -3 -3 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -7 -7 -  -  -  -  -  -7 -7 -7 -7 -7 -  -  -  -  -  -7 -  -  -  -  -  -  -1 -15 -15 -15 -60 -60 -  -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -  -  -  -  -15 -  -  -  -15 -4 -  -15 -  -  -15 -4 -  -15 -4 -  -  -15 -3 -  -  -  -  -15 -  -  -1 -7 -  -7 -3 -3 -  -  -7 -  -  -1 -7 -  -7 -7 -  -  -1 -15 -15 -11 -  -  -4 -  -7 -7 -  -  -7 -11 -  -  -  -  -  -4 -4 -  -  -  -  -  -  -  -11 -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file filter.js
      - * @authors:
      - *   Jeffrey Wilcke <jeff@ethdev.com>
      - *   Marek Kotewicz <marek@ethdev.com>
      - *   Marian Oancea <marian@ethdev.com>
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - *   Gav Wood <g@ethdev.com>
      - * @date 2014
      - */
      - 
      -var formatters = require('./formatters');
      -var utils = require('../utils/utils');
      - 
      -/**
      -* Converts a given topic to a hex string, but also allows null values.
      -*
      -* @param {Mixed} value
      -* @return {String}
      -*/
      -var toTopic = function(value){
      - 
      -    if(value === null || typeof value === 'undefined')
      -        return null;
      - 
      -    value = String(value);
      - 
      -    if(value.indexOf('0x') === 0)
      -        return value;
      -    else
      -        return utils.fromUtf8(value);
      -};
      - 
      -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
      -/// @param should be string or object
      -/// @returns options string or object
      -var getOptions = function (options) {
      - 
      -    if (utils.isString(options)) {
      -        return options;
      -    }
      - 
      -    options = options || {};
      - 
      -    // make sure topics, get converted to hex
      -    options.topics = options.topics || [];
      -    options.topics = options.topics.map(function(topic){
      -        return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
      -    });
      - 
      -    return {
      -        topics: options.topics,
      -        from: options.from,
      -        to: options.to,
      -        address: options.address,
      -        fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),
      -        toBlock: formatters.inputBlockNumberFormatter(options.toBlock)
      -    };
      -};
      - 
      -/**
      -Adds the callback and sets up the methods, to iterate over the results.
      - 
      -@method getLogsAtStart
      -@param {Object} self
      -@param {funciton}
      -*/
      -var getLogsAtStart = function(self, callback){
      -    // call getFilterLogs for the first watch callback start
      -    if (!utils.isString(self.options)) {
      -        self.get(function (err, messages) {
      -            // don't send all the responses to all the watches again... just to self one
      -            Iif (err) {
      -                callback(err);
      -            }
      - 
      -            Eif(utils.isArray(messages)) {
      -                messages.forEach(function (message) {
      -                    callback(null, message);
      -                });
      -            }
      -        });
      -    }
      -};
      - 
      -/**
      -Adds the callback and sets up the methods, to iterate over the results.
      - 
      -@method pollFilter
      -@param {Object} self
      -*/
      -var pollFilter = function(self) {
      - 
      -    var onMessage = function (error, messages) {
      -        Iif (error) {
      -            return self.callbacks.forEach(function (callback) {
      -                callback(error);
      -            });
      -        }
      - 
      -        Eif(utils.isArray(messages)) {
      -            messages.forEach(function (message) {
      -                message = self.formatter ? self.formatter(message) : message;
      -                self.callbacks.forEach(function (callback) {
      -                    callback(null, message);
      -                });
      -            });
      -        }
      -    };
      - 
      -    self.requestManager.startPolling({
      -        method: self.implementation.poll.call,
      -        params: [self.filterId],
      -    }, self.filterId, onMessage, self.stopWatching.bind(self));
      - 
      -};
      - 
      -var Filter = function (requestManager, options, methods, formatter, callback) {
      -    var self = this;
      -    var implementation = {};
      -    methods.forEach(function (method) {
      -        method.setRequestManager(requestManager);
      -        method.attachToObject(implementation);
      -    });
      -    this.requestManager = requestManager;
      -    this.options = getOptions(options);
      -    this.implementation = implementation;
      -    this.filterId = null;
      -    this.callbacks = [];
      -    this.getLogsCallbacks = [];
      -    this.pollFilters = [];
      -    this.formatter = formatter;
      -    this.implementation.newFilter(this.options, function(error, id){
      -        Iif(error) {
      -            self.callbacks.forEach(function(cb){
      -                cb(error);
      -            });
      -        } else {
      -            self.filterId = id;
      - 
      -            // check if there are get pending callbacks as a consequence
      -            // of calling get() with filterId unassigned.
      -            self.getLogsCallbacks.forEach(function (cb){
      -                self.get(cb);
      -            });
      -            self.getLogsCallbacks = [];
      - 
      -            // get filter logs for the already existing watch calls
      -            self.callbacks.forEach(function(cb){
      -                getLogsAtStart(self, cb);
      -            });
      -            if(self.callbacks.length > 0)
      -                pollFilter(self);
      - 
      -            // start to watch immediately
      -            if(typeof callback === 'function') {
      -                return self.watch(callback);
      -            }
      -        }
      -    });
      - 
      -    return this;
      -};
      - 
      -Filter.prototype.watch = function (callback) {
      -    this.callbacks.push(callback);
      - 
      -    if(this.filterId) {
      -        getLogsAtStart(this, callback);
      -        pollFilter(this);
      -    }
      - 
      -    return this;
      -};
      - 
      -Filter.prototype.stopWatching = function () {
      -    this.requestManager.stopPolling(this.filterId);
      -    // remove filter async
      -    this.implementation.uninstallFilter(this.filterId, function(){});
      -    this.callbacks = [];
      -};
      - 
      -Filter.prototype.get = function (callback) {
      -    var self = this;
      -    if (utils.isFunction(callback)) {
      -        if (this.filterId === null) {
      -            // If filterId is not set yet, call it back
      -            // when newFilter() assigns it.
      -            this.getLogsCallbacks.push(callback);
      -        } else {
      -            this.implementation.getLogs(this.filterId, function(err, res){
      -                Iif (err) {
      -                    callback(err);
      -                } else {
      -                    callback(null, res.map(function (log) {
      -                        return self.formatter ? self.formatter(log) : log;
      -                    }));
      -                }
      -            });
      -        }
      -    } else {
      -        Eif (this.filterId === null) {
      -            throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.');
      -        }
      -        var logs = this.implementation.getLogs(this.filterId);
      -        return logs.map(function (log) {
      -            return self.formatter ? self.formatter(log) : log;
      -        });
      -    }
      - 
      -    return this;
      -};
      - 
      -module.exports = Filter;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html deleted file mode 100644 index 887c64e..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html +++ /dev/null @@ -1,1050 +0,0 @@ - - - - Code coverage report for web3/lib/web3/formatters.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/formatters.js

      -

      - Statements: 92.97% (119 / 128)      - Branches: 80.28% (57 / 71)      - Functions: 96% (24 / 25)      - Lines: 92.97% (119 / 128)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » formatters.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -1 -26 -  -  -1 -67 -  -  -1 -55 -20 -  -35 -  -  -1 -67 -  -67 -15 -  -52 -  -  -  -  -  -  -  -  -  -1 -  -15 -  -15 -4 -  -  -15 -15 -  -  -15 -60 -  -18 -  -  -15 -  -  -  -  -  -  -  -  -  -1 -  -13 -13 -  -13 -11 -  -  -13 -52 -  -24 -  -  -13 -  -  -  -  -  -  -  -  -  -1 -12 -11 -12 -11 -12 -12 -12 -12 -12 -  -  -  -  -  -  -  -  -  -1 -2 -2 -2 -2 -2 -2 -  -2 -2 -4 -  -  -  -2 -  -  -  -  -  -  -  -  -  -1 -  -  -15 -15 -15 -15 -15 -14 -  -15 -15 -  -15 -12 -20 -4 -  -  -  -15 -  -  -  -  -  -  -  -  -  -1 -5 -  -7 -2 -  -5 -  -5 -5 -  -  -  -  -  -5 -5 -7 -  -  -5 -  -5 -  -  -5 -  -  -  -  -  -  -  -  -  -1 -16 -13 -16 -13 -16 -13 -  -16 -  -  -  -  -  -  -  -  -  -1 -  -  -5 -5 -5 -  -  -5 -  -  -  -  -5 -  -6 -  -  -5 -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -  -  -1 -2 -  -  -1 -  -  -1 -80 -80 -8 -72 -58 -14 -9 -  -5 -  -  -  -1 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file formatters.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @author Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      -var config = require('../utils/config');
      -var Iban = require('./iban');
      - 
      -/**
      - * Should the format output to a big number
      - *
      - * @method outputBigNumberFormatter
      - * @param {String|Number|BigNumber}
      - * @returns {BigNumber} object
      - */
      -var outputBigNumberFormatter = function (number) {
      -    return utils.toBigNumber(number);
      -};
      - 
      -var isPredefinedBlockNumber = function (blockNumber) {
      -    return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';
      -};
      - 
      -var inputDefaultBlockNumberFormatter = function (blockNumber) {
      -    if (blockNumber === undefined) {
      -        return config.defaultBlock;
      -    }
      -    return inputBlockNumberFormatter(blockNumber);
      -};
      - 
      -var inputBlockNumberFormatter = function (blockNumber) {
      -    Iif (blockNumber === undefined) {
      -        return undefined;
      -    } else if (isPredefinedBlockNumber(blockNumber)) {
      -        return blockNumber;
      -    }
      -    return utils.toHex(blockNumber);
      -};
      - 
      -/**
      - * Formats the input of a transaction and converts all values to HEX
      - *
      - * @method inputCallFormatter
      - * @param {Object} transaction options
      - * @returns object
      -*/
      -var inputCallFormatter = function (options){
      - 
      -    options.from = options.from || config.defaultAccount;
      - 
      -    if (options.from) {
      -        options.from = inputAddressFormatter(options.from);
      -    }
      - 
      -    Eif (options.to) { // it might be contract creation
      -        options.to = inputAddressFormatter(options.to);
      -    }
      - 
      -    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
      -        return options[key] !== undefined;
      -    }).forEach(function(key){
      -        options[key] = utils.fromDecimal(options[key]);
      -    });
      - 
      -    return options; 
      -};
      - 
      -/**
      - * Formats the input of a transaction and converts all values to HEX
      - *
      - * @method inputTransactionFormatter
      - * @param {Object} transaction options
      - * @returns object
      -*/
      -var inputTransactionFormatter = function (options){
      - 
      -    options.from = options.from || config.defaultAccount;
      -    options.from = inputAddressFormatter(options.from);
      - 
      -    if (options.to) { // it might be contract creation
      -        options.to = inputAddressFormatter(options.to);
      -    }
      - 
      -    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
      -        return options[key] !== undefined;
      -    }).forEach(function(key){
      -        options[key] = utils.fromDecimal(options[key]);
      -    });
      - 
      -    return options; 
      -};
      - 
      -/**
      - * Formats the output of a transaction to its proper values
      - * 
      - * @method outputTransactionFormatter
      - * @param {Object} tx
      - * @returns {Object}
      -*/
      -var outputTransactionFormatter = function (tx){
      -    if(tx.blockNumber !== null)
      -        tx.blockNumber = utils.toDecimal(tx.blockNumber);
      -    if(tx.transactionIndex !== null)
      -        tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
      -    tx.nonce = utils.toDecimal(tx.nonce);
      -    tx.gas = utils.toDecimal(tx.gas);
      -    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
      -    tx.value = utils.toBigNumber(tx.value);
      -    return tx;
      -};
      - 
      -/**
      - * Formats the output of a transaction receipt to its proper values
      - * 
      - * @method outputTransactionReceiptFormatter
      - * @param {Object} receipt
      - * @returns {Object}
      -*/
      -var outputTransactionReceiptFormatter = function (receipt){
      -    Eif(receipt.blockNumber !== null)
      -        receipt.blockNumber = utils.toDecimal(receipt.blockNumber);
      -    Eif(receipt.transactionIndex !== null)
      -        receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);
      -    receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);
      -    receipt.gasUsed = utils.toDecimal(receipt.gasUsed);
      - 
      -    Eif(utils.isArray(receipt.logs)) {
      -        receipt.logs = receipt.logs.map(function(log){
      -            return outputLogFormatter(log);
      -        });
      -    }
      - 
      -    return receipt;
      -};
      - 
      -/**
      - * Formats the output of a block to its proper values
      - *
      - * @method outputBlockFormatter
      - * @param {Object} block 
      - * @returns {Object}
      -*/
      -var outputBlockFormatter = function(block) {
      - 
      -    // transform to number
      -    block.gasLimit = utils.toDecimal(block.gasLimit);
      -    block.gasUsed = utils.toDecimal(block.gasUsed);
      -    block.size = utils.toDecimal(block.size);
      -    block.timestamp = utils.toDecimal(block.timestamp);
      -    if(block.number !== null)
      -        block.number = utils.toDecimal(block.number);
      - 
      -    block.difficulty = utils.toBigNumber(block.difficulty);
      -    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);
      - 
      -    if (utils.isArray(block.transactions)) {
      -        block.transactions.forEach(function(item){
      -            if(!utils.isString(item))
      -                return outputTransactionFormatter(item);
      -        });
      -    }
      - 
      -    return block;
      -};
      - 
      -/**
      - * Formats the input of a log
      - * 
      - * @method inputLogFormatter
      - * @param {Object} log object
      - * @returns {Object} log
      -*/
      -var inputLogFormatter = function(options) {
      -    var toTopic = function(value){
      - 
      -        if(value === null || typeof value === 'undefined')
      -            return null;
      - 
      -        value = String(value);
      - 
      -        Eif(value.indexOf('0x') === 0)
      -            return value;
      -        else
      -            return utils.fromUtf8(value);
      -    };
      - 
      -    // make sure topics, get converted to hex
      -    options.topics = options.topics || [];
      -    options.topics = options.topics.map(function(topic){
      -        return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
      -    });
      - 
      -    toTopic = null;
      - 
      -    Iif(options.address && !utils.isAddress(options.address))
      -        throw new Error('The given address is not valid!');
      - 
      -    return options;
      -};
      - 
      -/**
      - * Formats the output of a log
      - * 
      - * @method outputLogFormatter
      - * @param {Object} log object
      - * @returns {Object} log
      -*/
      -var outputLogFormatter = function(log) {
      -    if(log.blockNumber !== null)
      -        log.blockNumber = utils.toDecimal(log.blockNumber);
      -    if(log.transactionIndex !== null)
      -        log.transactionIndex = utils.toDecimal(log.transactionIndex);
      -    if(log.logIndex !== null)
      -        log.logIndex = utils.toDecimal(log.logIndex);
      - 
      -    return log;
      -};
      - 
      -/**
      - * Formats the input of a whisper post and converts all values to HEX
      - *
      - * @method inputPostFormatter
      - * @param {Object} transaction object
      - * @returns {Object}
      -*/
      -var inputPostFormatter = function(post) {
      - 
      -    // post.payload = utils.toHex(post.payload);
      -    post.ttl = utils.fromDecimal(post.ttl);
      -    post.workToProve = utils.fromDecimal(post.workToProve);
      -    post.priority = utils.fromDecimal(post.priority);
      - 
      -    // fallback
      -    Iif (!utils.isArray(post.topics)) {
      -        post.topics = post.topics ? [post.topics] : [];
      -    }
      - 
      -    // format the following options
      -    post.topics = post.topics.map(function(topic){
      -        // convert only if not hex
      -        return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);
      -    });
      - 
      -    return post; 
      -};
      - 
      -/**
      - * Formats the output of a received post message
      - *
      - * @method outputPostFormatter
      - * @param {Object}
      - * @returns {Object}
      - */
      -var outputPostFormatter = function(post){
      - 
      -    post.expiry = utils.toDecimal(post.expiry);
      -    post.sent = utils.toDecimal(post.sent);
      -    post.ttl = utils.toDecimal(post.ttl);
      -    post.workProved = utils.toDecimal(post.workProved);
      -    // post.payloadRaw = post.payload;
      -    // post.payload = utils.toAscii(post.payload);
      - 
      -    // if (utils.isJson(post.payload)) {
      -    //     post.payload = JSON.parse(post.payload);
      -    // }
      - 
      -    // format the following options
      -    Iif (!post.topics) {
      -        post.topics = [];
      -    }
      -    post.topics = post.topics.map(function(topic){
      -        return utils.toAscii(topic);
      -    });
      - 
      -    return post;
      -};
      - 
      -var inputAddressFormatter = function (address) {
      -    var iban = new Iban(address);
      -    if (iban.isValid() && iban.isDirect()) {
      -        return '0x' + iban.address();
      -    } else if (utils.isStrictAddress(address)) {
      -        return address;
      -    } else if (utils.isAddress(address)) {
      -        return '0x' + address;
      -    }
      -    throw 'invalid address';
      -};
      - 
      - 
      -var outputSyncingFormatter = function(result) {
      - 
      -    result.startingBlock = utils.toDecimal(result.startingBlock);
      -    result.currentBlock = utils.toDecimal(result.currentBlock);
      -    result.highestBlock = utils.toDecimal(result.highestBlock);
      - 
      -    return result;
      -};
      - 
      -module.exports = {
      -    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
      -    inputBlockNumberFormatter: inputBlockNumberFormatter,
      -    inputCallFormatter: inputCallFormatter,
      -    inputTransactionFormatter: inputTransactionFormatter,
      -    inputAddressFormatter: inputAddressFormatter,
      -    inputPostFormatter: inputPostFormatter,
      -    inputLogFormatter: inputLogFormatter,
      -    outputBigNumberFormatter: outputBigNumberFormatter,
      -    outputTransactionFormatter: outputTransactionFormatter,
      -    outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
      -    outputBlockFormatter: outputBlockFormatter,
      -    outputLogFormatter: outputLogFormatter,
      -    outputPostFormatter: outputPostFormatter,
      -    outputSyncingFormatter: outputSyncingFormatter
      -};
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html deleted file mode 100644 index 5f02de8..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html +++ /dev/null @@ -1,786 +0,0 @@ - - - - Code coverage report for web3/lib/web3/function.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/function.js

      -

      - Statements: 94.57% (87 / 92)      - Branches: 82.14% (23 / 28)      - Functions: 95% (19 / 20)      - Lines: 94.44% (85 / 90)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » function.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -1 -68 -68 -94 -  -68 -42 -  -68 -68 -68 -  -  -1 -16 -4 -  -  -  -1 -8 -2 -  -  -  -  -  -  -  -  -  -  -1 -16 -16 -9 -  -16 -16 -16 -  -  -  -  -  -  -  -  -1 -16 -  -  -  -1 -9 -  -  -  -9 -9 -9 -  -  -  -  -  -  -  -  -  -  -  -  -1 -14 -8 -8 -8 -  -  -8 -7 -7 -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -1 -16 -5 -5 -  -5 -4 -  -  -1 -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -1 -2 -2 -2 -2 -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -1 -9 -  -  -9 -3 -  -  -  -6 -  -  -  -  -  -  -  -  -1 -68 -68 -68 -68 -68 -68 -68 -68 -67 -  -68 -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/**
      - * @file function.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var coder = require('../solidity/coder');
      -var utils = require('../utils/utils');
      -var formatters = require('./formatters');
      -var sha3 = require('../utils/sha3');
      - 
      -/**
      - * This prototype should be used to call/sendTransaction to solidity functions
      - */
      -var SolidityFunction = function (eth, json, address) {
      -    this._eth = eth;
      -    this._inputTypes = json.inputs.map(function (i) {
      -        return i.type;
      -    });
      -    this._outputTypes = json.outputs.map(function (i) {
      -        return i.type;
      -    });
      -    this._constant = json.constant;
      -    this._name = utils.transformToFullName(json);
      -    this._address = address;
      -};
      - 
      -SolidityFunction.prototype.extractCallback = function (args) {
      -    if (utils.isFunction(args[args.length - 1])) {
      -        return args.pop(); // modify the args array!
      -    }
      -};
      - 
      -SolidityFunction.prototype.extractDefaultBlock = function (args) {
      -    if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {
      -        return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!
      -    }
      -};
      - 
      -/**
      - * Should be used to create payload from arguments
      - *
      - * @method toPayload
      - * @param {Array} solidity function params
      - * @param {Object} optional payload options
      - */
      -SolidityFunction.prototype.toPayload = function (args) {
      -    var options = {};
      -    if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {
      -        options = args[args.length - 1];
      -    }
      -    options.to = this._address;
      -    options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);
      -    return options;
      -};
      - 
      -/**
      - * Should be used to get function signature
      - *
      - * @method signature
      - * @return {String} function signature
      - */
      -SolidityFunction.prototype.signature = function () {
      -    return sha3(this._name).slice(0, 8);
      -};
      - 
      - 
      -SolidityFunction.prototype.unpackOutput = function (output) {
      -    Iif (!output) {
      -        return;
      -    }
      - 
      -    output = output.length >= 2 ? output.slice(2) : output;
      -    var result = coder.decodeParams(this._outputTypes, output);
      -    return result.length === 1 ? result[0] : result;
      -};
      - 
      -/**
      - * Calls a contract function.
      - *
      - * @method call
      - * @param {...Object} Contract function arguments
      - * @param {function} If the last argument is a function, the contract function
      - *   call will be asynchronous, and the callback will be passed the
      - *   error and result.
      - * @return {String} output bytes
      - */
      -SolidityFunction.prototype.call = function () {
      -    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
      -    var callback = this.extractCallback(args);
      -    var defaultBlock = this.extractDefaultBlock(args);
      -    var payload = this.toPayload(args);
      - 
      - 
      -    if (!callback) {
      -        var output = this._eth.call(payload, defaultBlock);
      -        return this.unpackOutput(output);
      -    } 
      -        
      -    var self = this;
      -    this._eth.call(payload, defaultBlock, function (error, output) {
      -        callback(error, self.unpackOutput(output));
      -    });
      -};
      - 
      -/**
      - * Should be used to sendTransaction to solidity function
      - *
      - * @method sendTransaction
      - */
      -SolidityFunction.prototype.sendTransaction = function () {
      -    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
      -    var callback = this.extractCallback(args);
      -    var payload = this.toPayload(args);
      - 
      -    if (!callback) {
      -        return this._eth.sendTransaction(payload);
      -    }
      - 
      -    this._eth.sendTransaction(payload, callback);
      -};
      - 
      -/**
      - * Should be used to estimateGas of solidity function
      - *
      - * @method estimateGas
      - */
      -SolidityFunction.prototype.estimateGas = function () {
      -    var args = Array.prototype.slice.call(arguments);
      -    var callback = this.extractCallback(args);
      -    var payload = this.toPayload(args);
      - 
      -    Eif (!callback) {
      -        return this._eth.estimateGas(payload);
      -    }
      - 
      -    this._eth.estimateGas(payload, callback);
      -};
      - 
      -/**
      - * Return the encoded data of the call
      - *
      - * @method getData
      - * @return {String} the encoded data
      - */
      -SolidityFunction.prototype.getData = function () {
      -    var args = Array.prototype.slice.call(arguments);
      -    var payload = this.toPayload(args);
      - 
      -    return payload.data;
      -};
      - 
      -/**
      - * Should be used to get function display name
      - *
      - * @method displayName
      - * @return {String} display name of the function
      - */
      -SolidityFunction.prototype.displayName = function () {
      -    return utils.extractDisplayName(this._name);
      -};
      - 
      -/**
      - * Should be used to get function type name
      - *
      - * @method typeName
      - * @return {String} type name of the function
      - */
      -SolidityFunction.prototype.typeName = function () {
      -    return utils.extractTypeName(this._name);
      -};
      - 
      -/**
      - * Should be called to get rpc requests from solidity function
      - *
      - * @method request
      - * @returns {Object}
      - */
      -SolidityFunction.prototype.request = function () {
      -    var args = Array.prototype.slice.call(arguments);
      -    var callback = this.extractCallback(args);
      -    var payload = this.toPayload(args);
      -    var format = this.unpackOutput.bind(this);
      -    
      -    return {
      -        method: this._constant ? 'eth_call' : 'eth_sendTransaction',
      -        callback: callback,
      -        params: [payload], 
      -        format: format
      -    };
      -};
      - 
      -/**
      - * Should be called to execute function
      - *
      - * @method execute
      - */
      -SolidityFunction.prototype.execute = function () {
      -    var transaction = !this._constant;
      - 
      -    // send transaction
      -    if (transaction) {
      -        return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));
      -    }
      - 
      -    // call
      -    return this.call.apply(this, Array.prototype.slice.call(arguments));
      -};
      - 
      -/**
      - * Should be called to attach function to contract
      - *
      - * @method attachToContract
      - * @param {Contract}
      - */
      -SolidityFunction.prototype.attachToContract = function (contract) {
      -    var execute = this.execute.bind(this);
      -    execute.request = this.request.bind(this);
      -    execute.call = this.call.bind(this);
      -    execute.sendTransaction = this.sendTransaction.bind(this);
      -    execute.estimateGas = this.estimateGas.bind(this);
      -    execute.getData = this.getData.bind(this);
      -    var displayName = this.displayName();
      -    if (!contract[displayName]) {
      -        contract[displayName] = execute;
      -    }
      -    contract[displayName][this.typeName()] = execute; // circular!!!!
      -};
      - 
      -module.exports = SolidityFunction;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html deleted file mode 100644 index ffd76ec..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - Code coverage report for web3/lib/web3/httpprovider.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/httpprovider.js

      -

      - Statements: 83.72% (36 / 43)      - Branches: 58.33% (7 / 12)      - Functions: 100% (6 / 6)      - Lines: 83.72% (36 / 43)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » httpprovider.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -2 -  -  -2 -  -  -  -2 -  -  -  -  -2 -  -  -  -  -  -2 -3 -  -  -  -  -  -  -  -  -  -2 -3 -3 -3 -3 -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -2 -  -  -  -  -2 -  -2 -2 -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -2 -1 -  -1 -1 -1 -1 -  -1 -1 -  -  -  -  -1 -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -  -2 -1 -1 -  -  -  -  -  -1 -  -  -  -  -  -2 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file httpprovider.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - *   Marian Oancea <marian@ethdev.com>
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -"use strict";
      - 
      -var errors = require('./errors');
      - 
      -// workaround to use httpprovider in different envs
      -var XMLHttpRequest; // jshint ignore: line
      - 
      -// meteor server environment
      -Iif (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line
      -    XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line
      - 
      -// browser
      -} else Iif (typeof window !== 'undefined' && window.XMLHttpRequest) {
      -    XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line
      - 
      -// node
      -} else {
      -    XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line
      -}
      - 
      -/**
      - * HttpProvider should be used to send rpc calls over http
      - */
      -var HttpProvider = function (host) {
      -    this.host = host || 'http://localhost:8545';
      -};
      - 
      -/**
      - * Should be called to prepare new XMLHttpRequest
      - *
      - * @method prepareRequest
      - * @param {Boolean} true if request should be async
      - * @return {XMLHttpRequest} object
      - */
      -HttpProvider.prototype.prepareRequest = function (async) {
      -    var request = new XMLHttpRequest();
      -    request.open('POST', this.host, async);
      -    request.setRequestHeader('Content-Type','application/json');
      -    return request;
      -};
      - 
      -/**
      - * Should be called to make sync request
      - *
      - * @method send
      - * @param {Object} payload
      - * @return {Object} result
      - */
      -HttpProvider.prototype.send = function (payload) {
      -    var request = this.prepareRequest(false);
      - 
      -    try {
      -        request.send(JSON.stringify(payload));
      -    } catch(error) {
      -        throw errors.InvalidConnection(this.host);
      -    }
      - 
      -    var result = request.responseText;
      - 
      -    try {
      -        result = JSON.parse(result);
      -    } catch(e) {
      -        throw errors.InvalidResponse(request.responseText);                
      -    }
      - 
      -    return result;
      -};
      - 
      -/**
      - * Should be used to make async request
      - *
      - * @method sendAsync
      - * @param {Object} payload
      - * @param {Function} callback triggered on end with (err, result)
      - */
      -HttpProvider.prototype.sendAsync = function (payload, callback) {
      -    var request = this.prepareRequest(true); 
      - 
      -    request.onreadystatechange = function() {
      -        Eif (request.readyState === 4) {
      -            var result = request.responseText;
      -            var error = null;
      - 
      -            try {
      -                result = JSON.parse(result);
      -            } catch(e) {
      -                error = errors.InvalidResponse(request.responseText);                
      -            }
      - 
      -            callback(error, result);
      -        }
      -    };
      -    
      -    try {
      -        request.send(JSON.stringify(payload));
      -    } catch(error) {
      -        callback(errors.InvalidConnection(this.host));
      -    }
      -};
      - 
      -/**
      - * Synchronously tries to make Http request
      - *
      - * @method isConnected
      - * @return {Boolean} returns true if request haven't failed. Otherwise false
      - */
      -HttpProvider.prototype.isConnected = function() {
      -    try {
      -        this.send({
      -            id: 9999999999,
      -            jsonrpc: '2.0',
      -            method: 'net_listening',
      -            params: []
      -        });
      -        return true;
      -    } catch(e) {
      -        return false;
      -    }
      -};
      - 
      -module.exports = HttpProvider;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html deleted file mode 100644 index 55b46bb..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html +++ /dev/null @@ -1,726 +0,0 @@ - - - - Code coverage report for web3/lib/web3/iban.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/iban.js

      -

      - Statements: 95% (57 / 60)      - Branches: 78.57% (11 / 14)      - Functions: 88.24% (15 / 17)      - Lines: 95% (57 / 60)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -15 -15 -11 -  -15 -  -  -  -  -  -  -  -  -  -  -1 -21 -21 -  -21 -21 -  -21 -661 -661 -  -450 -  -211 -  -  -  -  -  -  -  -  -  -  -  -1 -21 -  -  -21 -158 -158 -  -  -21 -  -  -  -  -  -  -  -1 -113 -  -  -  -  -  -  -  -  -  -1 -5 -5 -5 -5 -  -  -  -  -  -  -  -  -  -  -  -1 -6 -  -6 -6 -  -6 -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -1 -18 -18 -  -  -  -  -  -  -  -  -1 -99 -  -  -  -  -  -  -  -  -  -1 -19 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -1 -10 -10 -10 -10 -  -  -  -  -  -1 -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file iban.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var BigNumber = require('bignumber.js');
      - 
      -var padLeft = function (string, bytes) {
      -    var result = string;
      -    while (result.length < bytes * 2) {
      -        result = '00' + result;
      -    }
      -    return result;
      -};
      - 
      -/**
      - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
      - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
      - *
      - * @method iso13616Prepare
      - * @param {String} iban the IBAN
      - * @returns {String} the prepared IBAN
      - */
      -var iso13616Prepare = function (iban) {
      -    var A = 'A'.charCodeAt(0);
      -    var Z = 'Z'.charCodeAt(0);
      - 
      -    iban = iban.toUpperCase();
      -    iban = iban.substr(4) + iban.substr(0,4);
      - 
      -    return iban.split('').map(function(n){
      -        var code = n.charCodeAt(0);
      -        if (code >= A && code <= Z){
      -            // A = 10, B = 11, ... Z = 35
      -            return code - A + 10;
      -        } else {
      -            return n;
      -        }
      -    }).join('');
      -};
      - 
      -/**
      - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.
      - *
      - * @method mod9710
      - * @param {String} iban
      - * @returns {Number}
      - */
      -var mod9710 = function (iban) {
      -    var remainder = iban,
      -        block;
      - 
      -    while (remainder.length > 2){
      -        block = remainder.slice(0, 9);
      -        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
      -    }
      - 
      -    return parseInt(remainder, 10) % 97;
      -};
      - 
      -/**
      - * This prototype should be used to create iban object from iban correct string
      - *
      - * @param {String} iban
      - */
      -var Iban = function (iban) {
      -    this._iban = iban;
      -};
      - 
      -/**
      - * This method should be used to create iban object from ethereum address
      - *
      - * @method fromAddress
      - * @param {String} address
      - * @return {Iban} the IBAN object
      - */
      -Iban.fromAddress = function (address) {
      -    var asBn = new BigNumber(address, 16);
      -    var base36 = asBn.toString(36);
      -    var padded = padLeft(base36, 15);
      -    return Iban.fromBban(padded.toUpperCase());
      -};
      - 
      -/**
      - * Convert the passed BBAN to an IBAN for this country specification.
      - * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
      - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
      - *
      - * @method fromBban
      - * @param {String} bban the BBAN to convert to IBAN
      - * @returns {Iban} the IBAN object
      - */
      -Iban.fromBban = function (bban) {
      -    var countryCode = 'XE';
      - 
      -    var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
      -    var checkDigit = ('0' + (98 - remainder)).slice(-2);
      - 
      -    return new Iban(countryCode + checkDigit + bban);
      -};
      - 
      -/**
      - * Should be used to create IBAN object for given institution and identifier
      - *
      - * @method createIndirect
      - * @param {Object} options, required options are "institution" and "identifier"
      - * @return {Iban} the IBAN object
      - */
      -Iban.createIndirect = function (options) {
      -    return Iban.fromBban('ETH' + options.institution + options.identifier);
      -};
      - 
      -/**
      - * Thos method should be used to check if given string is valid iban object
      - *
      - * @method isValid
      - * @param {String} iban string
      - * @return {Boolean} true if it is valid IBAN
      - */
      -Iban.isValid = function (iban) {
      -    var i = new Iban(iban);
      -    return i.isValid();
      -};
      - 
      -/**
      - * Should be called to check if iban is correct
      - *
      - * @method isValid
      - * @returns {Boolean} true if it is, otherwise false
      - */
      -Iban.prototype.isValid = function () {
      -    return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
      -        mod9710(iso13616Prepare(this._iban)) === 1;
      -};
      - 
      -/**
      - * Should be called to check if iban number is direct
      - *
      - * @method isDirect
      - * @returns {Boolean} true if it is, otherwise false
      - */
      -Iban.prototype.isDirect = function () {
      -    return this._iban.length === 34 || this._iban.length === 35;
      -};
      - 
      -/**
      - * Should be called to check if iban number if indirect
      - *
      - * @method isIndirect
      - * @returns {Boolean} true if it is, otherwise false
      - */
      -Iban.prototype.isIndirect = function () {
      -    return this._iban.length === 20;
      -};
      - 
      -/**
      - * Should be called to get iban checksum
      - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
      - *
      - * @method checksum
      - * @returns {String} checksum
      - */
      -Iban.prototype.checksum = function () {
      -    return this._iban.substr(2, 2);
      -};
      - 
      -/**
      - * Should be called to get institution identifier
      - * eg. XREG
      - *
      - * @method institution
      - * @returns {String} institution identifier
      - */
      -Iban.prototype.institution = function () {
      -    return this.isIndirect() ? this._iban.substr(7, 4) : '';
      -};
      - 
      -/**
      - * Should be called to get client identifier within institution
      - * eg. GAVOFYORK
      - *
      - * @method client
      - * @returns {String} client identifier
      - */
      -Iban.prototype.client = function () {
      -    return this.isIndirect() ? this._iban.substr(11) : '';
      -};
      - 
      -/**
      - * Should be called to get client direct address
      - *
      - * @method address
      - * @returns {String} client direct address
      - */
      -Iban.prototype.address = function () {
      -    Eif (this.isDirect()) {
      -        var base36 = this._iban.substr(4);
      -        var asBn = new BigNumber(base36, 36);
      -        return padLeft(asBn.toString(16), 20);
      -    } 
      - 
      -    return '';
      -};
      - 
      -Iban.prototype.toString = function () {
      -    return this._iban;
      -};
      - 
      -module.exports = Iban;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html deleted file mode 100644 index 1820b72..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - Code coverage report for web3/lib/web3/ - - - - - - -
      -

      Code coverage report for web3/lib/web3/

      -

      - Statements: 85.02% (840 / 988)      - Branches: 67.4% (275 / 408)      - Functions: 86.7% (189 / 218)      - Lines: 84.97% (837 / 985)      - Ignored: none      -

      -
      All files » web3/lib/web3/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      batch.js100%(18 / 18)60%(6 / 10)100%(6 / 6)100%(18 / 18)
      contract.js59.6%(59 / 99)23.81%(10 / 42)77.27%(17 / 22)59.6%(59 / 99)
      errors.js83.33%(5 / 6)100%(5 / 5)75%(3 / 4)83.33%(5 / 6)
      event.js91.51%(97 / 106)83.33%(35 / 42)90.91%(20 / 22)91.43%(96 / 105)
      extend.js100%(26 / 26)87.5%(7 / 8)100%(4 / 4)100%(26 / 26)
      formatters.js92.97%(119 / 128)80.28%(57 / 71)96%(24 / 25)92.97%(119 / 128)
      function.js94.57%(87 / 92)82.14%(23 / 28)95%(19 / 20)94.44%(85 / 90)
      httpprovider.js83.72%(36 / 43)58.33%(7 / 12)100%(6 / 6)83.72%(36 / 43)
      iban.js95%(57 / 60)78.57%(11 / 14)88.24%(15 / 17)95%(57 / 60)
      ipcprovider.js58.41%(66 / 113)35%(14 / 40)45.45%(10 / 22)58.41%(66 / 113)
      jsonrpc.js94.74%(18 / 19)90.91%(10 / 11)100%(6 / 6)94.74%(18 / 19)
      method.js100%(59 / 59)100%(28 / 28)100%(15 / 15)100%(59 / 59)
      namereg.js100%(5 / 5)100%(0 / 0)100%(0 / 0)100%(5 / 5)
      property.js97.78%(44 / 45)66.67%(8 / 12)92.31%(12 / 13)97.78%(44 / 45)
      requestmanager.js86.15%(56 / 65)65.79%(25 / 38)100%(13 / 13)86.15%(56 / 65)
      settings.js100%(4 / 4)100%(0 / 0)100%(1 / 1)100%(4 / 4)
      subscription.js83.93%(47 / 56)68.57%(24 / 35)84.62%(11 / 13)83.93%(47 / 56)
      subscriptions.js92%(23 / 25)33.33%(2 / 6)100%(5 / 5)92%(23 / 25)
      transfer.js73.68%(14 / 19)50%(3 / 6)50%(2 / 4)73.68%(14 / 19)
      -
      -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html deleted file mode 100644 index 201deb6..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html +++ /dev/null @@ -1,972 +0,0 @@ - - - - Code coverage report for web3/lib/web3/ipcprovider.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/ipcprovider.js

      -

      - Statements: 58.41% (66 / 113)      - Branches: 35% (14 / 40)      - Functions: 45.45% (10 / 22)      - Lines: 58.41% (66 / 113)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » ipcprovider.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -  -2 -5 -5 -5 -5 -  -5 -  -5 -  -  -  -5 -  -  -2 -  -2 -  -  -2 -  -  -  -  -  -2 -  -  -  -2 -  -  -  -  -  -  -2 -1 -1 -  -  -  -  -  -  -  -  -  -  -2 -5 -  -5 -  -  -  -5 -  -  -  -5 -  -  -  -  -  -  -  -  -  -  -2 -2 -  -  -  -2 -  -  -  -  -  -  -2 -  -  -2 -  -  -2 -  -2 -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -2 -  -  -2 -  -  -  -  -  -  -  -  -  -2 -1 -1 -  -1 -1 -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -3 -  -  -3 -2 -  -3 -  -  -2 -  -1 -1 -  -  -1 -1 -  -1 -  -1 -1 -  -  -  -  -1 -  -  -  -  -  -  -2 -  -1 -1 -  -  -1 -1 -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -2 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file ipcprovider.js
      - * @authors:
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -"use strict";
      - 
      -var utils = require('../utils/utils');
      -var errors = require('./errors');
      - 
      - 
      -var IpcProvider = function (path, net) {
      -    var _this = this;
      -    this.responseCallbacks = {};
      -    this.notificationCallbacks = [];
      -    this.path = path;
      -    
      -    this.connection = net.connect({path: this.path});
      - 
      -    this.addDefaultEvents();
      - 
      - 
      -    // LISTEN FOR CONNECTION RESPONSES
      -    this.connection.on('data', function(data) {
      -        /*jshint maxcomplexity: 6 */
      - 
      -        _this._parseResponse(data.toString()).forEach(function(result){
      - 
      -            var id = null;
      - 
      -            // get the id which matches the returned id
      -            Iif(utils.isArray(result)) {
      -                result.forEach(function(load){
      -                    if(_this.responseCallbacks[load.id])
      -                        id = load.id;
      -                });
      -            } else {
      -                id = result.id;
      -            }
      - 
      -            // notification
      -            Iif(!id && result.method === 'eth_subscription') {
      -                _this.notificationCallbacks.forEach(function(callback){
      -                    if(utils.isFunction(callback))
      -                        callback(null, result);
      -                });
      - 
      -            // fire the callback
      -            } else if(_this.responseCallbacks[id]) {
      -                _this.responseCallbacks[id](null, result);
      -                delete _this.responseCallbacks[id];
      -            }
      -        });
      -    });
      -};
      - 
      -/**
      -Will add the error and end event to timeout existing calls
      - 
      -@method addDefaultEvents
      -*/
      -IpcProvider.prototype.addDefaultEvents = function(){
      -    var _this = this;
      - 
      -    this.connection.on('error', function(e){
      -        _this._timeout();
      -    });
      - 
      -    this.connection.on('end', function(){
      -        _this._timeout();
      -    });
      - 
      -    this.connection.on('timeout', function(){
      -        _this._timeout();
      -    }); 
      -};
      - 
      -/**
      -Will parse the response and make an array out of it.
      - 
      -@method _parseResponse
      -@param {String} data
      -*/
      -IpcProvider.prototype._parseResponse = function(data) {
      -    var _this = this,
      -        returnValues = [];
      -    
      -    // DE-CHUNKER
      -    var dechunkedData = data
      -        .replace(/\}\{/g,'}|--|{') // }{
      -        .replace(/\}\]\[\{/g,'}]|--|[{') // }][{
      -        .replace(/\}\[\{/g,'}|--|[{') // }[{
      -        .replace(/\}\]\{/g,'}]|--|{') // }]{
      -        .split('|--|');
      - 
      -    dechunkedData.forEach(function(data){
      - 
      -        // prepend the last chunk
      -        Iif(_this.lastChunk)
      -            data = _this.lastChunk + data;
      - 
      -        var result = null;
      - 
      -        try {
      -            result = JSON.parse(data);
      - 
      -        } catch(e) {
      - 
      -            _this.lastChunk = data;
      - 
      -            // start timeout to cancel all requests
      -            clearTimeout(_this.lastChunkTimeout);
      -            _this.lastChunkTimeout = setTimeout(function(){
      -                _this.timeout();
      -                throw errors.InvalidResponse(data);
      -            }, 1000 * 15);
      - 
      -            return;
      -        }
      - 
      -        // cancel timeout and set chunk to null
      -        clearTimeout(_this.lastChunkTimeout);
      -        _this.lastChunk = null;
      - 
      -        Eif(result)
      -            returnValues.push(result);
      -    });
      - 
      -    return returnValues;
      -};
      - 
      - 
      -/**
      -Get the adds a callback to the responseCallbacks object,
      -which will be called if a response matching the response Id will arrive.
      - 
      -@method _addResponseCallback
      -*/
      -IpcProvider.prototype._addResponseCallback = function(payload, callback) {
      -    var id = payload.id || payload[0].id;
      -    var method = payload.method || payload[0].method;
      - 
      -    this.responseCallbacks[id] = callback;
      -    this.responseCallbacks[id].method = method;
      -};
      - 
      -/**
      -Timeout all requests when the end/error event is fired
      - 
      -@method _timeout
      -*/
      -IpcProvider.prototype._timeout = function() {
      -    for(var key in this.responseCallbacks) {
      -        if(this.responseCallbacks.hasOwnProperty(key)){
      -            this.responseCallbacks[key](errors.InvalidConnection('on IPC'));
      -            delete this.responseCallbacks[key];
      -        }
      -    }
      -};
      - 
      - 
      -/**
      -Check if the current connection is still valid.
      - 
      -@method isConnected
      -*/
      -IpcProvider.prototype.isConnected = function() {
      -    var _this = this;
      - 
      -    // try reconnect, when connection is gone
      -    if(!_this.connection.writable)
      -        _this.connection.connect({path: _this.path});
      - 
      -    return !!this.connection.writable;
      -};
      - 
      -IpcProvider.prototype.send = function (payload) {
      - 
      -    Eif(this.connection.writeSync) {
      -        var result;
      - 
      -        // try reconnect, when connection is gone
      -        Eif(!this.connection.writable)
      -            this.connection.connect({path: this.path});
      - 
      -        var data = this.connection.writeSync(JSON.stringify(payload));
      - 
      -        try {
      -            result = JSON.parse(data);
      -        } catch(e) {
      -            throw errors.InvalidResponse(data);                
      -        }
      - 
      -        return result;
      - 
      -    } else {
      -        throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.');
      -    }
      -};
      - 
      -IpcProvider.prototype.sendAsync = function (payload, callback) {
      -    // try reconnect, when connection is gone
      -    Eif(!this.connection.writable)
      -        this.connection.connect({path: this.path});
      - 
      - 
      -    this.connection.write(JSON.stringify(payload));
      -    this._addResponseCallback(payload, callback);
      -};
      - 
      -/**
      -Subscribes to provider events.provider
      - 
      -@method on
      -@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
      -@param {Function} callback   the callback to call
      -*/
      -IpcProvider.prototype.on = function (type, callback) {
      - 
      -    if(typeof callback !== 'function')
      -        throw new Error('The second parameter callback must be a function.');
      - 
      -    switch(type){
      -        case 'notification':
      -            this.notificationCallbacks.push(callback);
      -            break;
      - 
      -        default:
      -            this.connection.on(type, callback);
      -            break;
      -    }
      -};
      - 
      -/**
      -Removes event listener
      - 
      -@method removeListener
      -@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
      -@param {Function} callback   the callback to call
      -*/
      -IpcProvider.prototype.removeListener = function (type, callback) {
      -    var _this = this;
      - 
      -    switch(type){
      -        case 'notification':
      -            this.notificationCallbacks.forEach(function(cb, index){
      -                if(cb === callback)
      -                    _this.notificationCallbacks.splice(index, 1);
      -            });
      -            break;
      - 
      -        default:
      -            this.connection.removeListener(type, callback);
      -            break;
      -    }
      -};
      - 
      -/**
      -Removes all event listeners
      - 
      -@method removeAllListeners
      -@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
      -*/
      -IpcProvider.prototype.removeAllListeners = function (type) {
      -    switch(type){
      -        case 'notification':
      -            this.notificationCallbacks = [];
      -            break;
      - 
      -        default:
      -            this.connection.removeAllListeners(type);
      -            break;
      -    }
      -};
      - 
      -/**
      -Resetes the providers, clears all callbacks
      - 
      -@method reset
      -*/
      -IpcProvider.prototype.reset = function (callback) {
      -    this._timeout();
      -    this.notificationCallbacks = [];
      - 
      -    this.connection.removeAllListeners('error');
      -    this.connection.removeAllListeners('end');
      - 
      -    this.addDefaultEvents();
      -};
      - 
      -module.exports = IpcProvider;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html deleted file mode 100644 index cc2cedf..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - Code coverage report for web3/lib/web3/jsonrpc.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/jsonrpc.js

      -

      - Statements: 94.74% (18 / 19)      - Branches: 90.91% (10 / 11)      - Functions: 100% (6 / 6)      - Lines: 94.74% (18 / 19)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » jsonrpc.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -301 -300 -  -1 -  -1 -  -  -  -  -  -1 -298 -298 -  -  -  -  -  -  -  -  -  -  -1 -158 -  -  -158 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -157 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -6 -6 -10 -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file jsonrpc.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Jsonrpc = function () {
      -    // singleton pattern
      -    if (arguments.callee._singletonInstance) {
      -        return arguments.callee._singletonInstance;
      -    }
      -    arguments.callee._singletonInstance = this;
      - 
      -    this.messageId = 1;
      -};
      - 
      -/**
      - * @return {Jsonrpc} singleton
      - */
      -Jsonrpc.getInstance = function () {
      -    var instance = new Jsonrpc();
      -    return instance;
      -};
      - 
      -/**
      - * Should be called to valid json create payload object
      - *
      - * @method toPayload
      - * @param {Function} method of jsonrpc call, required
      - * @param {Array} params, an array of method params, optional
      - * @returns {Object} valid jsonrpc payload object
      - */
      -Jsonrpc.prototype.toPayload = function (method, params) {
      -    Iif (!method)
      -        console.error('jsonrpc method should be specified!');
      - 
      -    return {
      -        jsonrpc: '2.0',
      -        method: method,
      -        params: params || [],
      -        id: this.messageId++
      -    };
      -};
      - 
      -/**
      - * Should be called to check if jsonrpc response is valid
      - *
      - * @method isValidResponse
      - * @param {Object}
      - * @returns {Boolean} true if response is valid, otherwise false
      - */
      -Jsonrpc.prototype.isValidResponse = function (response) {
      -    return !!response &&
      -        !response.error &&
      -        response.jsonrpc === '2.0' &&
      -        typeof response.id === 'number' &&
      -        response.result !== undefined; // only undefined is not valid json object
      -};
      - 
      -/**
      - * Should be called to create batch payload object
      - *
      - * @method toBatchPayload
      - * @param {Array} messages, an array of objects with method (required) and params (optional) fields
      - * @returns {Array} batch payload
      - */
      -Jsonrpc.prototype.toBatchPayload = function (messages) {
      -    var self = this;
      -    return messages.map(function (message) {
      -        return self.toPayload(message.method, message.params);
      -    });
      -};
      - 
      -module.exports = Jsonrpc;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html deleted file mode 100644 index 5f797d4..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - Code coverage report for web3/lib/web3/method.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/method.js

      -

      - Statements: 100% (59 / 59)      - Branches: 100% (28 / 28)      - Functions: 100% (15 / 15)      - Lines: 100% (59 / 59)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » method.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -5096 -5096 -5096 -5096 -5096 -5096 -  -  -1 -4930 -  -  -  -  -  -  -  -  -  -1 -117 -  -  -  -  -  -  -  -  -  -1 -116 -57 -  -  -  -  -  -  -  -  -  -  -1 -117 -2 -  -  -  -  -  -  -  -  -  -  -1 -115 -23 -  -  -92 -166 -  -  -  -  -  -  -  -  -  -  -1 -115 -  -115 -6 -10 -  -  -109 -  -  -  -  -  -  -  -  -  -  -1 -113 -113 -113 -113 -  -113 -  -  -  -  -  -  -1 -4930 -4930 -4930 -4930 -462 -462 -  -4468 -  -  -  -1 -4930 -4930 -109 -109 -51 -51 -  -  -58 -  -4930 -4930 -  -  -  -  -  -  -  -  -  -1 -4 -4 -4 -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/**
      - * @file method.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      -var errors = require('./errors');
      - 
      -var Method = function (options) {
      -    this.name = options.name;
      -    this.call = options.call;
      -    this.params = options.params || 0;
      -    this.inputFormatter = options.inputFormatter;
      -    this.outputFormatter = options.outputFormatter;
      -    this.requestManager = null;
      -};
      - 
      -Method.prototype.setRequestManager = function (rm) {
      -    this.requestManager = rm;
      -};
      - 
      -/**
      - * Should be used to determine name of the jsonrpc method based on arguments
      - *
      - * @method getCall
      - * @param {Array} arguments
      - * @return {String} name of jsonrpc method
      - */
      -Method.prototype.getCall = function (args) {
      -    return utils.isFunction(this.call) ? this.call(args) : this.call;
      -};
      - 
      -/**
      - * Should be used to extract callback from array of arguments. Modifies input param
      - *
      - * @method extractCallback
      - * @param {Array} arguments
      - * @return {Function|Null} callback, if exists
      - */
      -Method.prototype.extractCallback = function (args) {
      -    if (utils.isFunction(args[args.length - 1])) {
      -        return args.pop(); // modify the args array!
      -    }
      -};
      - 
      -/**
      - * Should be called to check if the number of arguments is correct
      - * 
      - * @method validateArgs
      - * @param {Array} arguments
      - * @throws {Error} if it is not
      - */
      -Method.prototype.validateArgs = function (args) {
      -    if (args.length !== this.params) {
      -        throw errors.InvalidNumberOfParams();
      -    }
      -};
      - 
      -/**
      - * Should be called to format input args of method
      - * 
      - * @method formatInput
      - * @param {Array}
      - * @return {Array}
      - */
      -Method.prototype.formatInput = function (args) {
      -    if (!this.inputFormatter) {
      -        return args;
      -    }
      - 
      -    return this.inputFormatter.map(function (formatter, index) {
      -        return formatter ? formatter(args[index]) : args[index];
      -    });
      -};
      - 
      -/**
      - * Should be called to format output(result) of method
      - *
      - * @method formatOutput
      - * @param {Object}
      - * @return {Object}
      - */
      -Method.prototype.formatOutput = function (result) {
      -    var _this = this;
      - 
      -    if(utils.isArray(result)) {
      -        return result.map(function(res){
      -            return _this.outputFormatter && res ? _this.outputFormatter(res) : res;
      -        });
      -    } else {
      -        return this.outputFormatter && result ? this.outputFormatter(result) : result;
      -    }
      -};
      - 
      -/**
      - * Should create payload from given input args
      - *
      - * @method toPayload
      - * @param {Array} args
      - * @return {Object}
      - */
      -Method.prototype.toPayload = function (args) {
      -    var call = this.getCall(args);
      -    var callback = this.extractCallback(args);
      -    var params = this.formatInput(args);
      -    this.validateArgs(params);
      - 
      -    return {
      -        method: call,
      -        params: params,
      -        callback: callback
      -    };
      -};
      - 
      -Method.prototype.attachToObject = function (obj) {
      -    var func = this.buildCall();
      -    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
      -    var name = this.name.split('.');
      -    if (name.length > 1) {
      -        obj[name[0]] = obj[name[0]] || {};
      -        obj[name[0]][name[1]] = func;
      -    } else {
      -        obj[name[0]] = func; 
      -    }
      -};
      - 
      -Method.prototype.buildCall = function() {
      -    var method = this;
      -    var send = function () {
      -        var payload = method.toPayload(Array.prototype.slice.call(arguments));
      -        if (payload.callback) {
      -            return method.requestManager.sendAsync(payload, function (err, result) {
      -                payload.callback(err, method.formatOutput(result));
      -            });
      -        }
      -        return method.formatOutput(method.requestManager.send(payload));
      -    };
      -    send.request = this.request.bind(this);
      -    return send;
      -};
      - 
      -/**
      - * Should be called to create pure JSONRPC request which can be used in batch request
      - *
      - * @method request
      - * @param {...} params
      - * @return {Object} jsonrpc request
      - */
      -Method.prototype.request = function () {
      -    var payload = this.toPayload(Array.prototype.slice.call(arguments));
      -    payload.format = this.formatOutput.bind(this);
      -    return payload;
      -};
      - 
      -module.exports = Method;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html deleted file mode 100644 index f43388b..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/db.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/methods/db.js

      -

      - Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (14 / 14)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -154 -  -154 -  -154 -616 -616 -  -  -  -1 -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -1 - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file db.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Method = require('../method');
      - 
      -var DB = function (web3) {
      -    this._requestManager = web3._requestManager;
      - 
      -    var self = this;
      -    
      -    methods().forEach(function(method) { 
      -        method.attachToObject(self);
      -        method.setRequestManager(web3._requestManager);
      -    });
      -};
      - 
      -var methods = function () {
      -    var putString = new Method({
      -        name: 'putString',
      -        call: 'db_putString',
      -        params: 3
      -    });
      - 
      -    var getString = new Method({
      -        name: 'getString',
      -        call: 'db_getString',
      -        params: 2
      -    });
      - 
      -    var putHex = new Method({
      -        name: 'putHex',
      -        call: 'db_putHex',
      -        params: 3
      -    });
      - 
      -    var getHex = new Method({
      -        name: 'getHex',
      -        call: 'db_getHex',
      -        params: 2
      -    });
      - 
      -    return [
      -        putString, getString, putHex, getHex
      -    ];
      -};
      - 
      -module.exports = DB;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html deleted file mode 100644 index acd7623..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html +++ /dev/null @@ -1,1161 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/eth.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/methods/eth.js

      -

      - Statements: 92.11% (70 / 76)      - Branches: 100% (20 / 20)      - Functions: 77.78% (14 / 18)      - Lines: 92.11% (70 / 76)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -6 -  -  -1 -4 -  -  -1 -6 -  -  -1 -6 -  -  -1 -6 -  -  -1 -154 -  -154 -  -154 -3696 -3696 -  -  -154 -1078 -1078 -  -  -  -154 -154 -  -  -1 -  -5 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -1 -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -6 -  -  -  -154 -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -  -  -1 -  -  -  -1 -2 -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/**
      - * @file eth.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @author Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -"use strict";
      - 
      -var formatters = require('../formatters');
      -var utils = require('../../utils/utils');
      -var c = require('../../utils/config');
      -var Method = require('../method');
      -var Property = require('../property');
      -var Subscriptions = require('../subscriptions');
      -var Contract = require('../contract');
      -var namereg = require('../namereg');
      -var Iban = require('../iban');
      -var transfer = require('../transfer');
      - 
      -var blockCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
      -};
      - 
      -var transactionFromBlockCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
      -};
      - 
      -var uncleCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
      -};
      - 
      -var getBlockTransactionCountCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
      -};
      - 
      -var uncleCountCall = function (args) {
      -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
      -};
      - 
      -function Eth(web3) {
      -    this._requestManager = web3._requestManager;
      - 
      -    var self = this;
      - 
      -    methods().forEach(function(method) { 
      -        method.attachToObject(self);
      -        method.setRequestManager(self._requestManager);
      -    });
      - 
      -    properties().forEach(function(p) { 
      -        p.attachToObject(self);
      -        p.setRequestManager(self._requestManager);
      -    });
      - 
      - 
      -    this.iban = Iban;
      -    this.sendIBANTransaction = transfer.bind(null, this);
      -}
      - 
      -Object.defineProperty(Eth.prototype, 'defaultBlock', {
      -    get: function () {
      -        return c.defaultBlock;
      -    },
      -    set: function (val) {
      -        c.defaultBlock = val;
      -        return val;
      -    }
      -});
      - 
      -Object.defineProperty(Eth.prototype, 'defaultAccount', {
      -    get: function () {
      -        return c.defaultAccount;
      -    },
      -    set: function (val) {
      -        c.defaultAccount = val;
      -        return val;
      -    }
      -});
      - 
      -var methods = function () {
      -    var getBalance = new Method({
      -        name: 'getBalance',
      -        call: 'eth_getBalance',
      -        params: 2,
      -        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],
      -        outputFormatter: formatters.outputBigNumberFormatter
      -    });
      - 
      -    var getStorageAt = new Method({
      -        name: 'getStorageAt',
      -        call: 'eth_getStorageAt',
      -        params: 3,
      -        inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
      -    });
      - 
      -    var getCode = new Method({
      -        name: 'getCode',
      -        call: 'eth_getCode',
      -        params: 2,
      -        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
      -    });
      - 
      -    var getBlock = new Method({
      -        name: 'getBlock',
      -        call: blockCall,
      -        params: 2,
      -        inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],
      -        outputFormatter: formatters.outputBlockFormatter
      -    });
      - 
      -    var getUncle = new Method({
      -        name: 'getUncle',
      -        call: uncleCall,
      -        params: 2,
      -        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
      -        outputFormatter: formatters.outputBlockFormatter,
      - 
      -    });
      - 
      -    var getBlockTransactionCount = new Method({
      -        name: 'getBlockTransactionCount',
      -        call: getBlockTransactionCountCall,
      -        params: 1,
      -        inputFormatter: [formatters.inputBlockNumberFormatter],
      -        outputFormatter: utils.toDecimal
      -    });
      - 
      -    var getBlockUncleCount = new Method({
      -        name: 'getBlockUncleCount',
      -        call: uncleCountCall,
      -        params: 1,
      -        inputFormatter: [formatters.inputBlockNumberFormatter],
      -        outputFormatter: utils.toDecimal
      -    });
      - 
      -    var getTransaction = new Method({
      -        name: 'getTransaction',
      -        call: 'eth_getTransactionByHash',
      -        params: 1,
      -        outputFormatter: formatters.outputTransactionFormatter
      -    });
      - 
      -    var getTransactionFromBlock = new Method({
      -        name: 'getTransactionFromBlock',
      -        call: transactionFromBlockCall,
      -        params: 2,
      -        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
      -        outputFormatter: formatters.outputTransactionFormatter
      -    });
      - 
      -    var getTransactionReceipt = new Method({
      -        name: 'getTransactionReceipt',
      -        call: 'eth_getTransactionReceipt',
      -        params: 1,
      -        outputFormatter: formatters.outputTransactionReceiptFormatter
      -    });
      - 
      -    var getTransactionCount = new Method({
      -        name: 'getTransactionCount',
      -        call: 'eth_getTransactionCount',
      -        params: 2,
      -        inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
      -        outputFormatter: utils.toDecimal
      -    });
      - 
      -    var sendRawTransaction = new Method({
      -        name: 'sendRawTransaction',
      -        call: 'eth_sendRawTransaction',
      -        params: 1,
      -        inputFormatter: [null]
      -    });
      - 
      -    var sendTransaction = new Method({
      -        name: 'sendTransaction',
      -        call: 'eth_sendTransaction',
      -        params: 1,
      -        inputFormatter: [formatters.inputTransactionFormatter]
      -    });
      - 
      -    var sign = new Method({
      -        name: 'sign',
      -        call: 'eth_sign',
      -        params: 2,
      -        inputFormatter: [formatters.inputAddressFormatter, null]
      -    });
      - 
      -    var call = new Method({
      -        name: 'call',
      -        call: 'eth_call',
      -        params: 2,
      -        inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
      -    });
      - 
      -    var estimateGas = new Method({
      -        name: 'estimateGas',
      -        call: 'eth_estimateGas',
      -        params: 1,
      -        inputFormatter: [formatters.inputCallFormatter],
      -        outputFormatter: utils.toDecimal
      -    });
      - 
      -    var getCompilers = new Method({
      -        name: 'getCompilers',
      -        call: 'eth_getCompilers',
      -        params: 0
      -    });
      - 
      -    var compileSolidity = new Method({
      -        name: 'compile.solidity',
      -        call: 'eth_compileSolidity',
      -        params: 1
      -    });
      - 
      -    var compileLLL = new Method({
      -        name: 'compile.lll',
      -        call: 'eth_compileLLL',
      -        params: 1
      -    });
      - 
      -    var compileSerpent = new Method({
      -        name: 'compile.serpent',
      -        call: 'eth_compileSerpent',
      -        params: 1
      -    });
      - 
      -    var submitWork = new Method({
      -        name: 'submitWork',
      -        call: 'eth_submitWork',
      -        params: 3
      -    });
      - 
      -    var getWork = new Method({
      -        name: 'getWork',
      -        call: 'eth_getWork',
      -        params: 0
      -    });
      - 
      -    var getPastLogs = new Method({
      -        name: 'getPastLogs',
      -        call: 'eth_getLogs',
      -        params: 1,
      -        inputFormatter: [formatters.inputLogFormatter],
      -        outputFormatter: formatters.outputLogFormatter
      -    });
      - 
      - 
      -    // subscriptions
      -    var subscribe = new Subscriptions({
      -        name: 'subscribe',
      -        subscribe: 'eth_subscribe',
      -        unsubscribe: 'eth_unsubscribe',
      -        subscriptions: {
      -            'newBlocks': {
      -                params: 1,
      -                outputFormatter: formatters.outputBlockFormatter
      -            },
      -            'pendingTransactions': {
      -                params: 0,
      -                outputFormatter: formatters.outputTransactionFormatter
      -            },
      -            'logs': {
      -                params: 1,
      -                inputFormatter: [formatters.inputLogFormatter],
      -                outputFormatter: formatters.outputLogFormatter
      -            },
      -            'syncing': {
      -                params: 0,
      -                outputFormatter: formatters.outputSyncingFormatter
      -            }
      -        }
      -    });
      - 
      - 
      -    return [
      -        getBalance,
      -        getStorageAt,
      -        getCode,
      -        getBlock,
      -        getUncle,
      -        getCompilers,
      -        getBlockTransactionCount,
      -        getBlockUncleCount,
      -        getTransaction,
      -        getTransactionFromBlock,
      -        getTransactionReceipt,
      -        getTransactionCount,
      -        call,
      -        estimateGas,
      -        sendRawTransaction,
      -        sendTransaction,
      -        sign,
      -        compileSolidity,
      -        compileLLL,
      -        compileSerpent,
      -        submitWork,
      -        getWork,
      -        subscribe,
      -        getPastLogs
      -    ];
      -};
      - 
      - 
      -var properties = function () {
      -    return [
      -        new Property({
      -            name: 'coinbase',
      -            getter: 'eth_coinbase'
      -        }),
      -        new Property({
      -            name: 'mining',
      -            getter: 'eth_mining'
      -        }),
      -        new Property({
      -            name: 'hashrate',
      -            getter: 'eth_hashrate',
      -            outputFormatter: utils.toDecimal
      -        }),
      -        new Property({
      -            name: 'syncing',
      -            getter: 'eth_syncing',
      -            outputFormatter: formatters.outputSyncingFormatter
      -        }),
      -        new Property({
      -            name: 'gasPrice',
      -            getter: 'eth_gasPrice',
      -            outputFormatter: formatters.outputBigNumberFormatter
      -        }),
      -        new Property({
      -            name: 'accounts',
      -            getter: 'eth_accounts'
      -        }),
      -        new Property({
      -            name: 'blockNumber',
      -            getter: 'eth_blockNumber',
      -            outputFormatter: utils.toDecimal
      -        })
      -    ];
      -};
      - 
      -Eth.prototype.contract = function (abi) {
      -    var factory = new Contract(this, abi);
      -    return factory;
      -};
      - 
      -Eth.prototype.namereg = function () {
      -    return this.contract(namereg.global.abi).at(namereg.global.address);
      -};
      - 
      -Eth.prototype.icapNamereg = function () {
      -    return this.contract(namereg.icap.abi).at(namereg.icap.address);
      -};
      - 
      - 
      -module.exports = Eth;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html deleted file mode 100644 index 3201ad8..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/ - - - - - - -
      -

      Code coverage report for web3/lib/web3/methods/

      -

      - Statements: 95% (114 / 120)      - Branches: 100% (20 / 20)      - Functions: 85.19% (23 / 27)      - Lines: 95% (114 / 120)      - Ignored: none      -

      -
      All files » web3/lib/web3/methods/
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FileStatementsBranchesFunctionsLines
      db.js100%(14 / 14)100%(0 / 0)100%(3 / 3)100%(14 / 14)
      eth.js92.11%(70 / 76)100%(20 / 20)77.78%(14 / 18)92.11%(70 / 76)
      net.js100%(11 / 11)100%(0 / 0)100%(3 / 3)100%(11 / 11)
      shh.js100%(19 / 19)100%(0 / 0)100%(3 / 3)100%(19 / 19)
      -
      -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html deleted file mode 100644 index ae675fe..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/net.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/methods/net.js

      -

      - Statements: 100% (11 / 11)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (11 / 11)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -154 -  -154 -  -154 -308 -308 -  -  -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -1 - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file eth.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../../utils/utils');
      -var Property = require('../property');
      - 
      -var Net = function (web3) {
      -    this._requestManager = web3._requestManager;
      - 
      -    var self = this;
      - 
      -    properties().forEach(function(p) { 
      -        p.attachToObject(self);
      -        p.setRequestManager(web3._requestManager);
      -    });
      -};
      - 
      -/// @returns an array of objects describing web3.eth api properties
      -var properties = function () {
      -    return [
      -        new Property({
      -            name: 'listening',
      -            getter: 'net_listening'
      -        }),
      -        new Property({
      -            name: 'peerCount',
      -            getter: 'net_peerCount',
      -            outputFormatter: utils.toDecimal
      -        })
      -    ];
      -};
      - 
      -module.exports = Net;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html deleted file mode 100644 index 39cae5c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/shh.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/methods/shh.js

      -

      - Statements: 100% (19 / 19)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (19 / 19)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -154 -  -154 -  -154 -924 -924 -  -  -  -  -1 -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file shh.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Method = require('../method');
      -var formatters = require('../formatters');
      -var Subscriptions = require('../subscriptions');
      - 
      - 
      -var Shh = function (web3) {
      -    this._requestManager = web3._requestManager;
      - 
      -    var self = this;
      - 
      -    methods().forEach(function(method) { 
      -        method.attachToObject(self);
      -        method.setRequestManager(self._requestManager);
      -    });
      -};
      - 
      - 
      -var methods = function () { 
      - 
      -    var post = new Method({
      -        name: 'post', 
      -        call: 'shh_post', 
      -        params: 1,
      -        inputFormatter: [formatters.inputPostFormatter]
      -    });
      - 
      -    var newIdentity = new Method({
      -        name: 'newIdentity',
      -        call: 'shh_newIdentity',
      -        params: 0
      -    });
      - 
      -    var hasIdentity = new Method({
      -        name: 'hasIdentity',
      -        call: 'shh_hasIdentity',
      -        params: 1
      -    });
      - 
      -    var newGroup = new Method({
      -        name: 'newGroup',
      -        call: 'shh_newGroup',
      -        params: 0
      -    });
      - 
      -    var addToGroup = new Method({
      -        name: 'addToGroup',
      -        call: 'shh_addToGroup',
      -        params: 0
      -    });
      - 
      -    var getPastLogs = new Method({
      -        name: 'getPastMessages',
      -        call: 'shh_getMessages',
      -        params: 1,
      -        inputFormatter: [formatters.inputLogFormatter],
      -        outputFormatter: formatters.outputPostFormatter
      -    });
      - 
      -    // subscriptions
      -    var subscribe = new Subscriptions({
      -        name: 'subscribe',
      -        subscribe: 'shh_subscribe',
      -        unsubscribe: 'shh_unsubscribe',
      -        subscriptions: {
      -            'messages': {
      -                params: 1,
      -                inputFormatter: [formatters.inputLogFormatter],
      -                outputFormatter: formatters.outputPostFormatter
      -            }
      -        }
      -    });
      - 
      -    return [
      -        post,
      -        newIdentity,
      -        hasIdentity,
      -        newGroup,
      -        addToGroup,
      -        subscribe
      -    ];
      -};
      - 
      -module.exports = Shh;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html deleted file mode 100644 index 467fbeb..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html +++ /dev/null @@ -1,387 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/watches.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/methods/watches.js

      -

      - Statements: 100% (24 / 24)      - Branches: 100% (3 / 3)      - Functions: 100% (3 / 3)      - Lines: 100% (24 / 24)      - Ignored: none      -

      - -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -1 -11 -11 -  -11 -  -3 -3 -3 -  -3 -3 -3 -  -5 -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -  -  -  -1 -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -  -  -1 -  -  -  -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file watches.js
      - * @authors:
      - *   Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Method = require('../method');
      - 
      -/// @returns an array of objects describing web3.eth.filter api methods
      -var eth = function () {
      -    var newFilterCall = function (args) {
      -        var type = args[0];
      - 
      -        switch(type) {
      -            case 'latest':
      -                args.shift();
      -                this.params = 0;
      -                return 'eth_newBlockFilter';
      -            case 'pending':
      -                args.shift();
      -                this.params = 0;
      -                return 'eth_newPendingTransactionFilter';
      -            default:
      -                return 'eth_newFilter';
      -        }
      -    };
      - 
      -    var newFilter = new Method({
      -        name: 'newFilter',
      -        call: newFilterCall,
      -        params: 1
      -    });
      - 
      -    var uninstallFilter = new Method({
      -        name: 'uninstallFilter',
      -        call: 'eth_uninstallFilter',
      -        params: 1
      -    });
      - 
      -    var getLogs = new Method({
      -        name: 'getLogs',
      -        call: 'eth_getFilterLogs',
      -        params: 1
      -    });
      - 
      -    var poll = new Method({
      -        name: 'poll',
      -        call: 'eth_getFilterChanges',
      -        params: 1
      -    });
      - 
      -    return [
      -        newFilter,
      -        uninstallFilter,
      -        getLogs,
      -        poll
      -    ];
      -};
      - 
      -/// @returns an array of objects describing web3.shh.watch api methods
      -var shh = function () {
      -    var newFilter = new Method({
      -        name: 'newFilter',
      -        call: 'shh_newFilter',
      -        params: 1
      -    });
      - 
      -    var uninstallFilter = new Method({
      -        name: 'uninstallFilter',
      -        call: 'shh_uninstallFilter',
      -        params: 1
      -    });
      - 
      -    var getLogs = new Method({
      -        name: 'getLogs',
      -        call: 'shh_getMessages',
      -        params: 1
      -    });
      - 
      -    var poll = new Method({
      -        name: 'poll',
      -        call: 'shh_getFilterChanges',
      -        params: 1
      -    });
      - 
      -    return [
      -        newFilter,
      -        uninstallFilter,
      -        getLogs,
      -        poll
      -    ];
      -};
      - 
      -module.exports = {
      -    eth: eth,
      -    shh: shh
      -};
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html deleted file mode 100644 index b6c1c47..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - Code coverage report for web3/lib/web3/namereg.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/namereg.js

      -

      - Statements: 100% (5 / 5)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (5 / 5)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » namereg.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file namereg.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json');
      -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json');
      - 
      -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';
      -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';
      - 
      -module.exports = {
      -    global: {
      -        abi: globalRegistrarAbi,
      -        address: globalNameregAddress
      -    },
      -    icap: {
      -        abi: icapRegistrarAbi,
      -        address: icapNameregAddress
      -    }
      -};
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html deleted file mode 100644 index c6c2c09..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - Code coverage report for web3/lib/web3/property.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/property.js

      -

      - Statements: 97.78% (44 / 45)      - Branches: 66.67% (8 / 12)      - Functions: 92.31% (12 / 13)      - Lines: 97.78% (44 / 45)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » property.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -2004 -2004 -2004 -2004 -2004 -2004 -  -  -1 -2004 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -20 -  -  -  -  -  -  -  -  -  -1 -2 -2 -  -  -  -  -  -  -  -  -  -  -  -1 -2004 -  -  -  -  -2004 -2004 -2004 -616 -616 -616 -  -  -2004 -2004 -  -  -1 -2004 -  -  -1 -2004 -2004 -17 -  -  -  -  -  -1 -2004 -2004 -1 -  -  -1 -  -  -2004 -2004 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -2 -2 -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/**
      - * @file property.js
      - * @author Fabian Vogelsteller <fabian@frozeman.de>
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      - 
      -var Property = function (options) {
      -    this.name = options.name;
      -    this.getter = options.getter;
      -    this.setter = options.setter;
      -    this.outputFormatter = options.outputFormatter;
      -    this.inputFormatter = options.inputFormatter;
      -    this.requestManager = null;
      -};
      - 
      -Property.prototype.setRequestManager = function (rm) {
      -    this.requestManager = rm;
      -};
      - 
      -/**
      - * Should be called to format input args of method
      - * 
      - * @method formatInput
      - * @param {Array}
      - * @return {Array}
      - */
      -Property.prototype.formatInput = function (arg) {
      -    return this.inputFormatter ? this.inputFormatter(arg) : arg;
      -};
      - 
      -/**
      - * Should be called to format output(result) of method
      - *
      - * @method formatOutput
      - * @param {Object}
      - * @return {Object}
      - */
      -Property.prototype.formatOutput = function (result) {
      -    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
      -};
      - 
      -/**
      - * Should be used to extract callback from array of arguments. Modifies input param
      - *
      - * @method extractCallback
      - * @param {Array} arguments
      - * @return {Function|Null} callback, if exists
      - */
      -Property.prototype.extractCallback = function (args) {
      -    Eif (utils.isFunction(args[args.length - 1])) {
      -        return args.pop(); // modify the args array!
      -    }
      -};
      - 
      - 
      -/**
      - * Should attach function to method
      - * 
      - * @method attachToObject
      - * @param {Object}
      - * @param {Function}
      - */
      -Property.prototype.attachToObject = function (obj) {
      -    var proto = {
      -        get: this.buildGet(),
      -        enumerable: true 
      -    };
      - 
      -    var names = this.name.split('.');
      -    var name = names[0];
      -    if (names.length > 1) {
      -        obj[names[0]] = obj[names[0]] || {};
      -        obj = obj[names[0]];
      -        name = names[1];
      -    }
      - 
      -    Object.defineProperty(obj, name, proto);
      -    obj[asyncGetterName(name)] = this.buildAsyncGet();
      -};
      - 
      -var asyncGetterName = function (name) {
      -    return 'get' + name.charAt(0).toUpperCase() + name.slice(1);
      -};
      - 
      -Property.prototype.buildGet = function () {
      -    var property = this;
      -    return function get() {
      -        return property.formatOutput(property.requestManager.send({
      -            method: property.getter
      -        })); 
      -    };
      -};
      - 
      -Property.prototype.buildAsyncGet = function () {
      -    var property = this;
      -    var get = function (callback) {
      -        property.requestManager.sendAsync({
      -            method: property.getter
      -        }, function (err, result) {
      -            callback(err, property.formatOutput(result));
      -        });
      -    };
      -    get.request = this.request.bind(this);
      -    return get;
      -};
      - 
      -/**
      - * Should be called to create pure JSONRPC request which can be used in batch request
      - *
      - * @method request
      - * @param {...} params
      - * @return {Object} jsonrpc request
      - */
      -Property.prototype.request = function () {
      -    var payload = {
      -        method: this.getter,
      -        params: [],
      -        callback: this.extractCallback(Array.prototype.slice.call(arguments))
      -    };
      -    payload.format = this.formatOutput.bind(this);
      -    return payload;
      -};
      - 
      -module.exports = Property;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html deleted file mode 100644 index 0ece315..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html +++ /dev/null @@ -1,678 +0,0 @@ - - - - Code coverage report for web3/lib/web3/requestmanager.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/requestmanager.js

      -

      - Statements: 86.15% (56 / 65)      - Branches: 65.79% (25 / 38)      - Functions: 100% (13 / 13)      - Lines: 86.15% (56 / 65)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » requestmanager.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -1 -156 -156 -  -  -  -  -  -  -  -  -  -1 -76 -7 -7 -  -  -69 -69 -  -69 -  -  -  -69 -  -  -  -  -  -  -  -  -  -1 -75 -  -  -75 -75 -72 -1 -  -  -71 -  -  -  -71 -  -  -  -  -  -  -  -  -  -  -1 -4 -  -  -  -4 -4 -4 -  -  -  -4 -  -  -  -4 -  -  -  -  -  -  -  -  -  -  -  -1 -9 -9 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -12 -  -12 -  -12 -  -  -  -  -10 -10 -  -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -1 -181 -  -  -181 -11 -  -181 -  -  -181 -135 -7 -7 -7 -  -  -  -  -  -  -  -  -  -  -1 -24 -  -  -  -24 -6 -  -  -  -  -24 -  -  -  -1 - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file requestmanager.js
      - * @author Jeffrey Wilcke <jeff@ethdev.com>
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @author Marian Oancea <marian@ethdev.com>
      - * @author Fabian Vogelsteller <fabian@ethdev.com>
      - * @author Gav Wood <g@ethdev.com>
      - * @date 2014
      - */
      - 
      -var Jsonrpc = require('./jsonrpc');
      -var utils = require('../utils/utils');
      -var c = require('../utils/config');
      -var errors = require('./errors');
      - 
      -/**
      - * It's responsible for passing messages to providers
      - * It's also responsible for polling the ethereum node for incoming messages
      - * Default poll timeout is 1 second
      - * Singleton
      - */
      -var RequestManager = function (provider) {
      -    this.setProvider(provider);
      -    this.subscriptions = {};
      -};
      - 
      -/**
      - * Should be used to synchronously send request
      - *
      - * @method send
      - * @param {Object} data
      - * @return {Object}
      - */
      -RequestManager.prototype.send = function (data) {
      -    if (!this.provider) {
      -        console.error(errors.InvalidProvider());
      -        return null;
      -    }
      - 
      -    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
      -    var result = this.provider.send(payload);
      - 
      -    Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
      -        throw errors.InvalidResponse(result);
      -    }
      - 
      -    return result.result;
      -};
      - 
      -/**
      - * Should be used to asynchronously send request
      - *
      - * @method sendAsync
      - * @param {Object} data
      - * @param {Function} callback
      - */
      -RequestManager.prototype.sendAsync = function (data, callback) {
      -    Iif (!this.provider) {
      -        return callback(errors.InvalidProvider());
      -    }
      -    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
      -    this.provider.sendAsync(payload, function (err, result) {        
      -        if (err) {
      -            return callback(err);
      -        }
      - 
      -        Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
      -            return callback(errors.InvalidResponse(result));
      -        }
      - 
      -        callback(null, result.result);
      -    });
      -};
      - 
      -/**
      - * Should be called to asynchronously send batch request
      - *
      - * @method sendBatch
      - * @param {Array} batch data
      - * @param {Function} callback
      - */
      -RequestManager.prototype.sendBatch = function (data, callback) {
      -    Iif (!this.provider) {
      -        return callback(errors.InvalidProvider());
      -    }
      - 
      -    var payload = Jsonrpc.getInstance().toBatchPayload(data);
      -    this.provider.sendAsync(payload, function (err, results) {
      -        Iif (err) {
      -            return callback(err);
      -        }
      - 
      -        Iif (!utils.isArray(results)) {
      -            return callback(errors.InvalidResponse(results));
      -        }
      - 
      -        callback(err, results);
      -    }); 
      -};
      - 
      - 
      -/**
      - * Waits for notifications
      - *
      - * @method addSubscription
      - * @param {String} id           the subscription id
      - * @param {Function} callback   the callback to call for incoming notifications
      - */
      -RequestManager.prototype.addSubscription = function (type, id, callback) {
      -    Eif(this.provider.on) {
      -        this.subscriptions[id] = {
      -            callback: callback,
      -            type: type
      -        };
      -        
      -    } else {
      -        throw new Error('This provider doesn\'t support subscriptions', this.provider);
      -    }
      -};
      - 
      -/**
      - * Waits for notifications
      - *
      - * @method removeSubscription
      - * @param {String} id           the subscription id
      - * @param {Function} callback   fired once the subscription is removed
      - */
      -RequestManager.prototype.removeSubscription = function (id, callback) {
      -    var _this = this;
      - 
      -    Eif(this.subscriptions[id]) {
      - 
      -        this.sendAsync({
      -            method: this.subscriptions[id].type + '_unsubscribe',
      -            params: [id]
      -        }, function(err, result){
      - 
      -            Eif(!err) {
      -                delete _this.subscriptions[id];
      -            }
      - 
      -            Iif(utils.isFunction(callback))
      -                callback(err, result);
      -        });
      - 
      -    }
      -}
      - 
      -/**
      - * Should be used to set provider of request manager
      - *
      - * @method setProvider
      - * @param {Object}
      - */
      -RequestManager.prototype.setProvider = function (p) {
      -    var _this = this;
      - 
      -    // reset the old one before changing
      -    if(this.provider)
      -        this.reset();
      - 
      -    this.provider = p;
      - 
      -    // listen to incoming notifications
      -    if(this.provider && this.provider.on) {
      -        this.provider.on('notification', function(err, result){
      -            Eif(!err) {
      -                Eif(_this.subscriptions[result.params.subscription] && _this.subscriptions[result.params.subscription].callback)
      -                    _this.subscriptions[result.params.subscription].callback(null, result.params.result);
      -            }
      -        });
      -    }
      -};
      - 
      -/**
      - * Should be called to reset the polling mechanism of the request manager
      - *
      - * @method reset
      - */
      -RequestManager.prototype.reset = function (keepIsSyncing) {
      -    var _this = this;
      - 
      - 
      -    // uninstall all subscriptions
      -    Object.keys(this.subscriptions).forEach(function(id){
      -        _this.removeSubscription(id);
      -    });
      - 
      - 
      -    //  reset notification callbacks etc.
      -    Iif(this.provider.reset)
      -        this.provider.reset();
      -};
      - 
      -module.exports = RequestManager;
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html deleted file mode 100644 index f022468..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - Code coverage report for web3/lib/web3/settings.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/settings.js

      -

      - Statements: 100% (4 / 4)      - Branches: 100% (0 / 0)      - Functions: 100% (1 / 1)      - Lines: 100% (4 / 4)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » settings.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10  -  -1 -167 -167 -  -  -1 -  - 
       
      - 
      -var Settings = function () {
      -    this.defaultBlock = 'latest';
      -    this.defaultAccount = undefined;
      -};
      - 
      -module.exports = Settings;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html deleted file mode 100644 index 9227849..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html +++ /dev/null @@ -1,630 +0,0 @@ - - - - Code coverage report for web3/lib/web3/subscription.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/subscription.js

      -

      - Statements: 83.93% (47 / 56)      - Branches: 68.57% (24 / 35)      - Functions: 84.62% (11 / 13)      - Lines: 83.93% (47 / 56)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » subscription.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -10 -10 -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -10 -10 -  -  -  -  -  -  -  -  -  -  -  -1 -10 -  -10 -4 -  -10 -4 -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -1 -10 -  -10 -5 -  -  -5 -5 -  -5 -  -5 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -7 -  -  -  -  -  -  -  -  -  -1 -10 -10 -10 -  -10 -  -  -  -  -  -  -  -  -  -  -  -1 -6 -  -  -  -  -  -  -  -  -1 -10 -10 -  -  -10 -  -  -  -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -10 -  -10 -9 -9 -  -  -9 -7 -  -  -  -  -  -  -  -10 -  -  -  -  -  -1
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file subscription.js
      - *
      - * @authors:
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      -var errors = require('./errors');
      - 
      - 
      -Subscription = function (options) {
      -    this.id = null;
      -    this.callback = null;
      - 
      -    this.options = {
      -        subscription: options.subscription,
      -        subscribeMethod: options.subscribeMethod,
      -        unsubscribeMethod: options.unsubscribeMethod,
      -        requestManager: options.requestManager
      -    }
      -};
      - 
      - 
      -/**
      - * Should be used to extract callback from array of arguments. Modifies input param
      - *
      - * @method extractCallback
      - * @param {Array} arguments
      - * @return {Function|Null} callback, if exists
      - */
      - 
      -Subscription.prototype._extractCallback = function (args) {
      -    Eif (utils.isFunction(args[args.length - 1])) {
      -        return args.pop(); // modify the args array!
      -    }
      -};
      - 
      -/**
      - * Should be called to check if the number of arguments is correct
      - * 
      - * @method validateArgs
      - * @param {Array} arguments
      - * @throws {Error} if it is not
      - */
      - 
      -Subscription.prototype._validateArgs = function (args) {
      -    var subscription = this.options.subscription;
      - 
      -    if(!subscription)
      -        subscription = {};
      - 
      -    if(!subscription.params)
      -        subscription.params = 0;
      - 
      -    Iif (args.length !== subscription.params + 1) {
      -        throw errors.InvalidNumberOfParams();
      -    }
      -};
      - 
      -/**
      - * Should be called to format input args of method
      - * 
      - * @method formatInput
      - * @param {Array}
      - * @return {Array}
      - */
      - 
      -Subscription.prototype._formatInput = function (args) {
      -    var subscription = this.options.subscription;
      - 
      -    if (!subscription || !subscription.inputFormatter) {
      -        return args;
      -    }
      - 
      -    var formattedArgs = subscription.inputFormatter.map(function (formatter, index) {
      -        return formatter ? formatter(args[index+1]) : args[index+1];
      -    });
      -    formattedArgs.unshift(args[0]);
      - 
      -    return formattedArgs;
      -};
      - 
      -/**
      - * Should be called to format output(result) of method
      - *
      - * @method formatOutput
      - * @param {Object}
      - * @return {Object}
      - */
      - 
      -Subscription.prototype._formatOutput = function (result) {
      -    var subscription = this.options.subscription;
      - 
      -    return (subscription && subscription.outputFormatter && result) ? subscription.outputFormatter(result) : result;
      -};
      - 
      -/**
      - * Should create payload from given input args
      - *
      - * @method toPayload
      - * @param {Array} args
      - * @return {Object}
      - */
      -Subscription.prototype._toPayload = function (args) {
      -    this.callback = this._extractCallback(args);
      -    var params = this._formatInput(args);
      -    this._validateArgs(params);
      - 
      -    return {
      -        method: this.options.subscribeMethod,
      -        params: params
      -    };
      -};
      - 
      -/**
      - * Unsubscribes and clears callbacks
      - *
      - * @method unsubscribe
      - * @return {Object}
      - */
      -Subscription.prototype.unsubscribe = function(callback) {
      -    return this.options.requestManager.removeSubscription(this.id, callback);
      -};
      - 
      -/**
      - * Subscribes and watches for changes
      - *
      - * @method subscribe
      - * @return {Object}
      - */
      -Subscription.prototype.subscribe = function() {
      -    var _this = this;
      -    var payload = this._toPayload(Array.prototype.slice.call(arguments));
      - 
      -    // throw error, if provider doesnt support subscriptions
      -    Iif(!this.options.requestManager.provider.on)
      -        throw new Error('The current provider doesn\'t support subscriptions', this.options.requestManager.provider);
      - 
      - 
      -    // get past logs, if fromBlock is available
      -    Iif(payload.params[0] === 'logs' && utils.isObject(payload.params[1]) && payload.params[1].hasOwnProperty('fromBlock') && isFinite(payload.params[1].fromBlock)) {
      -        this.options.requestManager.sendAsync({
      -            method: 'eth_getLogs',
      -            params: [payload.params[1]]
      -        }, function (err, logs) {
      -            if(!err) {
      -                logs.forEach(function(log){
      -                    _this.callback(null, _this._formatOutput(log));
      -                });
      -            } else {
      -                _this.callback(err);
      -            }
      -        });
      -    }
      - 
      -    // create subscription
      -    Eif (_this.callback) {
      - 
      -        this.options.requestManager.sendAsync(payload, function (err, result) {
      -            Eif(!err && result) {
      -                _this.id = result;
      -                
      -                // call callback on notifications
      -                _this.options.requestManager.addSubscription('eth', _this.id, function(err, result){
      -                    _this.callback(err, _this._formatOutput(result), _this);
      -                });
      -            } else {
      -                _this.callback(err);
      -            }
      -        });
      - 
      -        // return an object to cancel the subscription
      -        return this;
      - 
      -    } else
      -        throw new Error('Subscriptions require a callback as the last parameter!');
      -};
      - 
      -module.exports = Subscription;
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html deleted file mode 100644 index 426c50e..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - Code coverage report for web3/lib/web3/subscriptions.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/subscriptions.js

      -

      - Statements: 92% (23 / 25)      - Branches: 33.33% (2 / 6)      - Functions: 100% (5 / 5)      - Lines: 92% (23 / 25)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » subscriptions.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -1 -308 -308 -308 -308 -308 -  -  -  -1 -308 -  -  -  -1 -308 -308 -308 -308 -  -  -  -308 -  -  -  -  -1 -308 -  -308 -7 -  -  -  -  -  -  -7 -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file subscriptions.js
      - *
      - * @authors:
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -var utils = require('../utils/utils');
      -var errors = require('./errors');
      -var Subscription = require('./subscription.js');
      - 
      - 
      - 
      -Subscriptions = function (options) {
      -    this.name = options.name;
      -    this.subscribe = options.subscribe;
      -    this.unsubscribe = options.unsubscribe;
      -    this.subscriptions = options.subscriptions || {};
      -    this.requestManager = null;
      -};
      - 
      - 
      -Subscriptions.prototype.setRequestManager = function (rm) {
      -    this.requestManager = rm;
      -};
      - 
      - 
      -Subscriptions.prototype.attachToObject = function (obj) {
      -    var func = this.buildCall();
      -    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
      -    var name = this.name.split('.');
      -    Iif (name.length > 1) {
      -        obj[name[0]] = obj[name[0]] || {};
      -        obj[name[0]][name[1]] = func;
      -    } else {
      -        obj[name[0]] = func; 
      -    }
      -};
      - 
      - 
      -Subscriptions.prototype.buildCall = function() {
      -    var _this = this;
      - 
      -    return function(){
      -        var subscription = new Subscription({
      -            subscription: _this.subscriptions[arguments[0]],
      -            subscribeMethod: _this.subscribe,
      -            unsubscribeMethod: _this.unsubscribe,
      -            requestManager: _this.requestManager
      -        });
      - 
      -        return subscription.subscribe.apply(subscription, arguments);
      -    };
      -};
      - 
      -module.exports = Subscriptions;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html deleted file mode 100644 index 8e774b8..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - Code coverage report for web3/lib/web3/syncing.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/syncing.js

      -

      - Statements: 94.12% (32 / 34)      - Branches: 64.29% (9 / 14)      - Functions: 87.5% (7 / 8)      - Lines: 94.12% (32 / 34)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » syncing.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -  -  -  -  -  -  -  -1 -  -1 -1 -  -  -  -  -  -1 -1 -  -1 -1 -  -  -1 -1 -  -  -1 -1 -  -  -1 -  -  -  -  -1 -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -1 -1 -1 -1 -  -  -1 -1 -1 -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** @file syncing.js
      - * @authors:
      - *   Fabian Vogelsteller <fabian@ethdev.com>
      - * @date 2015
      - */
      - 
      -var formatters = require('./formatters');
      -var utils = require('../utils/utils');
      - 
      -var count = 1;
      - 
      -/**
      -Adds the callback and sets up the methods, to iterate over the results.
      - 
      -@method pollSyncing
      -@param {Object} self
      -*/
      -var pollSyncing = function(self) {
      - 
      -    var onMessage = function (error, sync) {
      -        Iif (error) {
      -            return self.callbacks.forEach(function (callback) {
      -                callback(error);
      -            });
      -        }
      - 
      -        Eif(utils.isObject(sync) && sync.startingBlock)
      -            sync = formatters.outputSyncingFormatter(sync);
      - 
      -        self.callbacks.forEach(function (callback) {
      -            Eif (self.lastSyncState !== sync) {
      -                
      -                // call the callback with true first so the app can stop anything, before receiving the sync data
      -                Eif(!self.lastSyncState && utils.isObject(sync))
      -                    callback(null, true);
      -                
      -                // call on the next CPU cycle, so the actions of the sync stop can be processes first
      -                setTimeout(function() {
      -                    callback(null, sync);
      -                }, 0);
      -                
      -                self.lastSyncState = sync;
      -            }
      -        });
      -    };
      - 
      -    self.requestManager.startPolling({
      -        method: 'eth_syncing',
      -        params: [],
      -    }, self.pollId, onMessage, self.stopWatching.bind(self));
      - 
      -};
      - 
      -var IsSyncing = function (requestManager, callback) {
      -    this.requestManager = requestManager;
      -    this.pollId = 'syncPoll_'+ count++;
      -    this.callbacks = [];
      -    this.addCallback(callback);
      -    this.lastSyncState = false;
      -    pollSyncing(this);
      - 
      -    return this;
      -};
      - 
      -IsSyncing.prototype.addCallback = function (callback) {
      -    Eif(callback)
      -        this.callbacks.push(callback);
      -    return this;
      -};
      - 
      -IsSyncing.prototype.stopWatching = function () {
      -    this.requestManager.stopPolling(this.pollId);
      -    this.callbacks = [];
      -};
      - 
      -module.exports = IsSyncing;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html deleted file mode 100644 index e57bfeb..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - Code coverage report for web3/lib/web3/transfer.js - - - - - - -
      -

      Code coverage report for web3/lib/web3/transfer.js

      -

      - Statements: 73.68% (14 / 19)      - Branches: 50% (3 / 6)      - Functions: 50% (2 / 4)      - Lines: 73.68% (14 / 19)      - Ignored: none      -

      -
      All files » web3/lib/web3/ » transfer.js
      -
      -
      -
      
      -
      -
      1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -1 -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -1 -  - 
      /*
      -    This file is part of web3.js.
      - 
      -    web3.js is free software: you can redistribute it and/or modify
      -    it under the terms of the GNU Lesser General Public License as published by
      -    the Free Software Foundation, either version 3 of the License, or
      -    (at your option) any later version.
      - 
      -    web3.js is distributed in the hope that it will be useful,
      -    but WITHOUT ANY WARRANTY; without even the implied warranty of
      -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      -    GNU Lesser General Public License for more details.
      - 
      -    You should have received a copy of the GNU Lesser General Public License
      -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
      -*/
      -/** 
      - * @file transfer.js
      - * @author Marek Kotewicz <marek@ethdev.com>
      - * @date 2015
      - */
      - 
      -var Iban = require('./iban');
      -var exchangeAbi = require('../contracts/SmartExchange.json');
      - 
      -/**
      - * Should be used to make Iban transfer
      - *
      - * @method transfer
      - * @param {String} from
      - * @param {String} to iban
      - * @param {Value} value to be tranfered
      - * @param {Function} callback, callback
      - */
      -var transfer = function (eth, from, to, value, callback) {
      -    var iban = new Iban(to); 
      -    Iif (!iban.isValid()) {
      -        throw new Error('invalid iban address');
      -    }
      - 
      -    Iif (iban.isDirect()) {
      -        return transferToAddress(eth, from, iban.address(), value, callback);
      -    }
      -    
      -    Eif (!callback) {
      -        var address = eth.icapNamereg().addr(iban.institution());
      -        return deposit(eth, from, address, value, iban.client());
      -    }
      - 
      -    eth.icapNamereg().addr(iban.institution(), function (err, address) {
      -        return deposit(eth, from, address, value, iban.client(), callback);
      -    });
      -    
      -};
      - 
      -/**
      - * Should be used to transfer funds to certain address
      - *
      - * @method transferToAddress
      - * @param {String} from
      - * @param {String} to
      - * @param {Value} value to be tranfered
      - * @param {Function} callback, callback
      - */
      -var transferToAddress = function (eth, from, to, value, callback) {
      -    return eth.sendTransaction({
      -        address: to,
      -        from: from,
      -        value: value
      -    }, callback);
      -};
      - 
      -/**
      - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)
      - *
      - * @method deposit
      - * @param {String} from
      - * @param {String} to
      - * @param {Value} value to be transfered
      - * @param {String} client unique identifier
      - * @param {Function} callback, callback
      - */
      -var deposit = function (eth, from, to, value, client, callback) {
      -    var abi = exchangeAbi;
      -    return eth.contract(abi).at(to).deposit(client, {
      -        from: from,
      -        value: value
      -    }, callback);
      -};
      - 
      -module.exports = transfer;
      - 
      - 
      - -
      - - - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov.info b/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov.info deleted file mode 100644 index ea28a51..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/coverage/lcov.info +++ /dev/null @@ -1,3638 +0,0 @@ -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js -FNF:0 -FNH:0 -DA:1,1 -DA:4,1 -DA:5,0 -DA:8,1 -LF:4 -LH:3 -BRDA:4,1,0,0 -BRDA:4,1,1,1 -BRDA:4,2,0,1 -BRDA:4,2,1,0 -BRF:4 -BRH:2 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js -FN:46,Web3 -FN:73,(anonymous_2) -FN:78,(anonymous_3) -FN:100,(anonymous_4) -FN:105,(anonymous_5) -FN:129,(anonymous_6) -FN:133,(anonymous_7) -FNF:7 -FNH:6 -FNDA:154,Web3 -FNDA:25,(anonymous_2) -FNDA:13,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:154,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:4,(anonymous_7) -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:38,1 -DA:39,1 -DA:40,1 -DA:41,1 -DA:42,1 -DA:46,1 -DA:47,154 -DA:48,154 -DA:49,154 -DA:50,154 -DA:51,154 -DA:52,154 -DA:53,154 -DA:54,154 -DA:57,154 -DA:61,154 -DA:62,154 -DA:68,1 -DA:73,1 -DA:74,25 -DA:75,25 -DA:78,1 -DA:79,13 -DA:80,13 -DA:83,1 -DA:84,1 -DA:85,1 -DA:86,1 -DA:87,1 -DA:88,1 -DA:89,1 -DA:90,1 -DA:91,1 -DA:92,1 -DA:93,1 -DA:94,1 -DA:95,1 -DA:100,1 -DA:101,1 -DA:102,1 -DA:105,1 -DA:106,154 -DA:129,1 -DA:130,0 -DA:133,1 -DA:134,4 -DA:137,1 -LF:57 -LH:56 -BRDA:130,1,0,0 -BRDA:130,1,1,0 -BRF:2 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js -FN:38,(anonymous_1) -FN:50,(anonymous_2) -FN:73,(anonymous_3) -FN:78,(anonymous_4) -FN:98,(anonymous_5) -FN:104,(anonymous_6) -FN:125,(anonymous_7) -FN:144,(anonymous_8) -FN:152,(anonymous_9) -FN:171,(anonymous_10) -FN:182,(anonymous_11) -FN:196,(anonymous_12) -FN:201,(anonymous_13) -FNF:13 -FNH:13 -FNDA:156,(anonymous_1) -FNDA:76,(anonymous_2) -FNDA:75,(anonymous_3) -FNDA:72,(anonymous_4) -FNDA:4,(anonymous_5) -FNDA:4,(anonymous_6) -FNDA:9,(anonymous_7) -FNDA:12,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:181,(anonymous_10) -FNDA:7,(anonymous_11) -FNDA:24,(anonymous_12) -FNDA:6,(anonymous_13) -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:38,1 -DA:39,156 -DA:40,156 -DA:50,1 -DA:51,76 -DA:52,7 -DA:53,7 -DA:56,69 -DA:57,69 -DA:59,69 -DA:60,0 -DA:63,69 -DA:73,1 -DA:74,75 -DA:75,0 -DA:77,75 -DA:78,75 -DA:79,72 -DA:80,1 -DA:83,71 -DA:84,0 -DA:87,71 -DA:98,1 -DA:99,4 -DA:100,0 -DA:103,4 -DA:104,4 -DA:105,4 -DA:106,0 -DA:109,4 -DA:110,0 -DA:113,4 -DA:125,1 -DA:126,9 -DA:127,9 -DA:133,0 -DA:144,1 -DA:145,12 -DA:147,12 -DA:149,12 -DA:154,10 -DA:155,10 -DA:158,10 -DA:159,0 -DA:171,1 -DA:172,181 -DA:175,181 -DA:176,11 -DA:178,181 -DA:181,181 -DA:182,135 -DA:183,7 -DA:184,7 -DA:185,7 -DA:196,1 -DA:197,24 -DA:201,24 -DA:202,6 -DA:207,24 -DA:208,0 -DA:211,1 -LF:65 -LH:56 -BRDA:51,1,0,7 -BRDA:51,1,1,69 -BRDA:59,2,0,0 -BRDA:59,2,1,69 -BRDA:74,3,0,0 -BRDA:74,3,1,75 -BRDA:79,4,0,1 -BRDA:79,4,1,71 -BRDA:83,5,0,0 -BRDA:83,5,1,71 -BRDA:99,6,0,0 -BRDA:99,6,1,4 -BRDA:105,7,0,0 -BRDA:105,7,1,4 -BRDA:109,8,0,0 -BRDA:109,8,1,4 -BRDA:126,9,0,9 -BRDA:126,9,1,0 -BRDA:147,10,0,12 -BRDA:147,10,1,0 -BRDA:154,11,0,10 -BRDA:154,11,1,0 -BRDA:158,12,0,0 -BRDA:158,12,1,10 -BRDA:175,13,0,11 -BRDA:175,13,1,170 -BRDA:181,14,0,135 -BRDA:181,14,1,46 -BRDA:181,15,0,181 -BRDA:181,15,1,135 -BRDA:183,16,0,7 -BRDA:183,16,1,0 -BRDA:184,17,0,7 -BRDA:184,17,1,0 -BRDA:184,18,0,7 -BRDA:184,18,1,7 -BRDA:207,19,0,0 -BRDA:207,19,1,24 -BRF:38 -BRH:25 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js -FN:23,(anonymous_1) -FN:36,(anonymous_2) -FN:49,(anonymous_3) -FN:68,(anonymous_4) -FN:83,(anonymous_5) -FN:85,(anonymous_6) -FNF:6 -FNH:6 -FNDA:301,(anonymous_1) -FNDA:298,(anonymous_2) -FNDA:158,(anonymous_3) -FNDA:157,(anonymous_4) -FNDA:6,(anonymous_5) -FNDA:10,(anonymous_6) -DA:23,1 -DA:25,301 -DA:26,300 -DA:28,1 -DA:30,1 -DA:36,1 -DA:37,298 -DA:38,298 -DA:49,1 -DA:50,158 -DA:51,0 -DA:53,158 -DA:68,1 -DA:69,157 -DA:83,1 -DA:84,6 -DA:85,6 -DA:86,10 -DA:90,1 -LF:19 -LH:18 -BRDA:25,1,0,300 -BRDA:25,1,1,1 -BRDA:50,2,0,0 -BRDA:50,2,1,158 -BRDA:56,3,0,158 -BRDA:56,3,1,15 -BRDA:69,4,0,157 -BRDA:69,4,1,156 -BRDA:69,4,2,154 -BRDA:69,4,3,152 -BRDA:69,4,4,150 -BRF:11 -BRH:10 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js -FN:76,(anonymous_1) -FN:89,(anonymous_2) -FN:100,(anonymous_3) -FN:124,(anonymous_4) -FN:147,(anonymous_5) -FN:169,(anonymous_6) -FN:187,(anonymous_7) -FN:192,(anonymous_8) -FN:203,(anonymous_9) -FN:209,(anonymous_10) -FN:222,(anonymous_11) -FN:233,(anonymous_12) -FN:249,(anonymous_13) -FN:282,(anonymous_14) -FN:312,(anonymous_15) -FN:339,(anonymous_16) -FN:352,(anonymous_17) -FN:372,(anonymous_18) -FN:387,(anonymous_19) -FN:398,(anonymous_20) -FN:409,(anonymous_21) -FN:428,(anonymous_22) -FN:440,(anonymous_23) -FN:452,(anonymous_24) -FN:463,(anonymous_25) -FN:474,(anonymous_26) -FN:485,(anonymous_27) -FN:496,(anonymous_28) -FNF:28 -FNH:27 -FNDA:205,(anonymous_1) -FNDA:38,(anonymous_2) -FNDA:10,(anonymous_3) -FNDA:5,(anonymous_4) -FNDA:25,(anonymous_5) -FNDA:10,(anonymous_6) -FNDA:105,(anonymous_7) -FNDA:136,(anonymous_8) -FNDA:101,(anonymous_9) -FNDA:94,(anonymous_10) -FNDA:193,(anonymous_11) -FNDA:160,(anonymous_12) -FNDA:126,(anonymous_13) -FNDA:39,(anonymous_14) -FNDA:12,(anonymous_15) -FNDA:27,(anonymous_16) -FNDA:705,(anonymous_17) -FNDA:205,(anonymous_18) -FNDA:78,(anonymous_19) -FNDA:24,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:875,(anonymous_22) -FNDA:832,(anonymous_23) -FNDA:358,(anonymous_24) -FNDA:286,(anonymous_25) -FNDA:126,(anonymous_26) -FNDA:453,(anonymous_27) -FNDA:9,(anonymous_28) -DA:37,2 -DA:38,2 -DA:40,2 -DA:76,2 -DA:77,205 -DA:89,2 -DA:90,38 -DA:100,2 -DA:102,10 -DA:103,10 -DA:104,10 -DA:105,3 -DA:107,10 -DA:108,133 -DA:109,133 -DA:110,2 -DA:111,131 -DA:114,10 -DA:124,2 -DA:126,5 -DA:127,5 -DA:128,5 -DA:129,5 -DA:131,5 -DA:132,110 -DA:133,110 -DA:136,5 -DA:147,2 -DA:148,25 -DA:149,25 -DA:150,25 -DA:151,291 -DA:152,291 -DA:153,2 -DA:154,289 -DA:155,289 -DA:158,25 -DA:169,2 -DA:170,10 -DA:171,10 -DA:172,236 -DA:173,236 -DA:174,236 -DA:177,10 -DA:187,2 -DA:188,105 -DA:189,48 -DA:192,136 -DA:193,57 -DA:203,2 -DA:204,101 -DA:205,101 -DA:209,2 -DA:211,94 -DA:212,94 -DA:222,2 -DA:223,193 -DA:233,2 -DA:234,160 -DA:235,160 -DA:237,160 -DA:249,2 -DA:252,126 -DA:253,2 -DA:255,124 -DA:256,1 -DA:258,123 -DA:259,2 -DA:262,121 -DA:263,62 -DA:264,5 -DA:265,57 -DA:266,42 -DA:267,15 -DA:268,5 -DA:271,69 -DA:282,2 -DA:283,39 -DA:284,39 -DA:285,39 -DA:286,1 -DA:288,38 -DA:312,2 -DA:313,12 -DA:315,12 -DA:339,2 -DA:340,27 -DA:342,26 -DA:352,2 -DA:354,705 -DA:355,705 -DA:356,47 -DA:358,658 -DA:359,208 -DA:362,450 -DA:372,2 -DA:373,205 -DA:374,205 -DA:375,5 -DA:377,200 -DA:387,2 -DA:388,78 -DA:398,2 -DA:399,24 -DA:409,2 -DA:410,0 -DA:411,0 -DA:414,0 -DA:415,0 -DA:418,0 -DA:428,2 -DA:429,875 -DA:440,2 -DA:441,832 -DA:452,2 -DA:453,358 -DA:463,2 -DA:464,286 -DA:474,2 -DA:475,126 -DA:485,2 -DA:486,453 -DA:496,2 -DA:497,9 -DA:498,9 -DA:500,5 -DA:504,2 -LF:127 -LH:122 -BRDA:77,1,0,0 -BRDA:77,1,1,205 -BRDA:90,2,0,0 -BRDA:90,2,1,38 -BRDA:104,3,0,3 -BRDA:104,3,1,7 -BRDA:109,4,0,2 -BRDA:109,4,1,131 -BRDA:128,5,0,5 -BRDA:128,5,1,0 -BRDA:152,6,0,2 -BRDA:152,6,1,289 -BRDA:155,7,0,0 -BRDA:155,7,1,289 -BRDA:174,8,0,31 -BRDA:174,8,1,205 -BRDA:188,9,0,48 -BRDA:188,9,1,57 -BRDA:205,10,0,101 -BRDA:205,10,1,0 -BRDA:212,11,0,94 -BRDA:212,11,1,0 -BRDA:237,12,0,17 -BRDA:237,12,1,143 -BRDA:252,13,0,2 -BRDA:252,13,1,124 -BRDA:255,14,0,1 -BRDA:255,14,1,123 -BRDA:258,15,0,2 -BRDA:258,15,1,121 -BRDA:262,16,0,62 -BRDA:262,16,1,59 -BRDA:263,17,0,5 -BRDA:263,17,1,57 -BRDA:265,18,0,42 -BRDA:265,18,1,15 -BRDA:267,19,0,5 -BRDA:267,19,1,10 -BRDA:283,20,0,39 -BRDA:283,20,1,0 -BRDA:285,21,0,1 -BRDA:285,21,1,38 -BRDA:315,22,0,0 -BRDA:315,22,1,12 -BRDA:342,23,0,0 -BRDA:342,23,1,26 -BRDA:354,24,0,705 -BRDA:354,24,1,40 -BRDA:355,25,0,47 -BRDA:355,25,1,658 -BRDA:358,26,0,208 -BRDA:358,26,1,450 -BRDA:358,27,0,658 -BRDA:358,27,1,234 -BRDA:358,27,2,45 -BRDA:374,28,0,5 -BRDA:374,28,1,200 -BRDA:410,29,0,0 -BRDA:410,29,1,0 -BRDA:414,30,0,0 -BRDA:414,30,1,0 -BRDA:429,31,0,875 -BRDA:429,31,1,826 -BRDA:429,31,2,780 -BRDA:429,31,3,780 -BRDA:441,32,0,832 -BRDA:441,32,1,505 -BRDA:441,32,2,459 -BRDA:441,32,3,459 -BRF:69 -BRH:56 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js -FNF:0 -FNH:0 -DA:38,1 -DA:40,1 -DA:70,1 -LF:3 -LH:3 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js -FN:24,(anonymous_1) -FN:27,(anonymous_2) -FN:30,(anonymous_3) -FN:33,(anonymous_4) -FNF:4 -FNH:3 -FNDA:4,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:7,(anonymous_3) -FNDA:6,(anonymous_4) -DA:23,3 -DA:25,4 -DA:28,0 -DA:31,7 -DA:34,6 -DA:35,6 -LF:6 -LH:5 -BRDA:34,1,0,2 -BRDA:34,1,1,4 -BRDA:34,2,0,6 -BRDA:34,2,1,2 -BRDA:34,2,2,2 -BRF:5 -BRH:5 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js -FN:25,(anonymous_1) -FN:41,(anonymous_2) -FN:48,(anonymous_3) -FN:66,(anonymous_4) -FN:83,(anonymous_5) -FN:94,(anonymous_6) -FN:110,(anonymous_7) -FN:126,(anonymous_8) -FN:137,(anonymous_9) -FN:148,(anonymous_10) -FN:159,(anonymous_11) -FN:169,(anonymous_12) -FN:180,(anonymous_13) -FN:191,(anonymous_14) -FN:202,(anonymous_15) -FN:212,(anonymous_16) -FN:222,(anonymous_17) -FNF:17 -FNH:15 -FNDA:15,(anonymous_1) -FNDA:21,(anonymous_2) -FNDA:661,(anonymous_3) -FNDA:21,(anonymous_4) -FNDA:113,(anonymous_5) -FNDA:5,(anonymous_6) -FNDA:6,(anonymous_7) -FNDA:1,(anonymous_8) -FNDA:18,(anonymous_9) -FNDA:99,(anonymous_10) -FNDA:19,(anonymous_11) -FNDA:2,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:1,(anonymous_14) -FNDA:1,(anonymous_15) -FNDA:10,(anonymous_16) -FNDA:0,(anonymous_17) -DA:23,1 -DA:25,1 -DA:26,15 -DA:27,15 -DA:28,11 -DA:30,15 -DA:41,1 -DA:42,21 -DA:43,21 -DA:45,21 -DA:46,21 -DA:48,21 -DA:49,661 -DA:50,661 -DA:52,450 -DA:54,211 -DA:66,1 -DA:67,21 -DA:70,21 -DA:71,158 -DA:72,158 -DA:75,21 -DA:83,1 -DA:84,113 -DA:94,1 -DA:95,5 -DA:96,5 -DA:97,5 -DA:98,5 -DA:110,1 -DA:111,6 -DA:113,6 -DA:114,6 -DA:116,6 -DA:126,1 -DA:127,1 -DA:137,1 -DA:138,18 -DA:139,18 -DA:148,1 -DA:149,99 -DA:159,1 -DA:160,19 -DA:169,1 -DA:170,2 -DA:180,1 -DA:181,0 -DA:191,1 -DA:192,1 -DA:202,1 -DA:203,1 -DA:212,1 -DA:213,10 -DA:214,10 -DA:215,10 -DA:216,10 -DA:219,0 -DA:222,1 -DA:223,0 -DA:226,1 -LF:60 -LH:57 -BRDA:50,1,0,450 -BRDA:50,1,1,211 -BRDA:50,2,0,661 -BRDA:50,2,1,450 -BRDA:149,3,0,99 -BRDA:149,3,1,15 -BRDA:160,4,0,19 -BRDA:160,4,1,1 -BRDA:192,5,0,1 -BRDA:192,5,1,0 -BRDA:203,6,0,1 -BRDA:203,6,1,0 -BRDA:213,7,0,10 -BRDA:213,7,1,0 -BRF:14 -BRH:11 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js -FN:37,(anonymous_1) -FN:41,(anonymous_2) -FN:45,(anonymous_3) -FN:49,(anonymous_4) -FN:53,(anonymous_5) -FN:57,Eth -FN:62,(anonymous_7) -FN:67,(anonymous_8) -FN:78,(anonymous_9) -FN:81,(anonymous_10) -FN:88,(anonymous_11) -FN:91,(anonymous_12) -FN:97,(anonymous_13) -FN:124,(anonymous_14) -FN:320,(anonymous_15) -FN:357,(anonymous_16) -FN:362,(anonymous_17) -FN:366,(anonymous_18) -FNF:18 -FNH:14 -FNDA:6,(anonymous_1) -FNDA:4,(anonymous_2) -FNDA:6,(anonymous_3) -FNDA:6,(anonymous_4) -FNDA:6,(anonymous_5) -FNDA:154,Eth -FNDA:3696,(anonymous_7) -FNDA:1078,(anonymous_8) -FNDA:5,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:154,(anonymous_13) -FNDA:6,(anonymous_14) -FNDA:154,(anonymous_15) -FNDA:27,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:2,(anonymous_18) -DA:26,1 -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,1 -DA:35,1 -DA:37,1 -DA:38,6 -DA:41,1 -DA:42,4 -DA:45,1 -DA:46,6 -DA:49,1 -DA:50,6 -DA:53,1 -DA:54,6 -DA:57,1 -DA:58,154 -DA:60,154 -DA:62,154 -DA:63,3696 -DA:64,3696 -DA:67,154 -DA:68,1078 -DA:69,1078 -DA:73,154 -DA:74,154 -DA:77,1 -DA:79,5 -DA:82,0 -DA:83,0 -DA:87,1 -DA:89,0 -DA:92,0 -DA:93,0 -DA:97,1 -DA:98,154 -DA:106,154 -DA:113,154 -DA:120,154 -DA:124,6 -DA:128,154 -DA:137,154 -DA:145,154 -DA:153,154 -DA:160,154 -DA:168,154 -DA:175,154 -DA:183,154 -DA:190,154 -DA:197,154 -DA:204,154 -DA:211,154 -DA:219,154 -DA:225,154 -DA:231,154 -DA:237,154 -DA:243,154 -DA:249,154 -DA:255,154 -DA:265,154 -DA:291,154 -DA:320,1 -DA:321,154 -DA:357,1 -DA:358,27 -DA:359,27 -DA:362,1 -DA:363,0 -DA:366,1 -DA:367,2 -DA:371,1 -LF:76 -LH:70 -BRDA:38,1,0,2 -BRDA:38,1,1,4 -BRDA:38,2,0,6 -BRDA:38,2,1,2 -BRDA:42,3,0,2 -BRDA:42,3,1,2 -BRDA:42,4,0,4 -BRDA:42,4,1,2 -BRDA:46,5,0,2 -BRDA:46,5,1,4 -BRDA:46,6,0,6 -BRDA:46,6,1,2 -BRDA:50,7,0,2 -BRDA:50,7,1,4 -BRDA:50,8,0,6 -BRDA:50,8,1,4 -BRDA:54,9,0,2 -BRDA:54,9,1,4 -BRDA:54,10,0,6 -BRDA:54,10,1,4 -BRF:20 -BRH:20 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js -FN:35,(anonymous_1) -FN:39,(anonymous_2) -FN:43,(anonymous_3) -FN:50,(anonymous_4) -FN:66,(anonymous_5) -FN:78,(anonymous_6) -FN:80,(anonymous_7) -FN:94,(anonymous_8) -FN:103,(anonymous_9) -FN:105,(anonymous_10) -FN:119,(anonymous_11) -FN:138,(anonymous_12) -FN:147,(anonymous_13) -FN:162,(anonymous_14) -FN:176,(anonymous_15) -FN:192,(anonymous_16) -FN:193,(anonymous_17) -FN:208,(anonymous_18) -FN:227,(anonymous_19) -FN:245,(anonymous_20) -FN:258,(anonymous_21) -FN:273,(anonymous_22) -FN:290,(anonymous_23) -FN:297,(anonymous_24) -FN:310,(anonymous_25) -FNF:25 -FNH:24 -FNDA:26,(anonymous_1) -FNDA:67,(anonymous_2) -FNDA:55,(anonymous_3) -FNDA:67,(anonymous_4) -FNDA:15,(anonymous_5) -FNDA:60,(anonymous_6) -FNDA:18,(anonymous_7) -FNDA:13,(anonymous_8) -FNDA:52,(anonymous_9) -FNDA:24,(anonymous_10) -FNDA:12,(anonymous_11) -FNDA:2,(anonymous_12) -FNDA:4,(anonymous_13) -FNDA:15,(anonymous_14) -FNDA:20,(anonymous_15) -FNDA:5,(anonymous_16) -FNDA:7,(anonymous_17) -FNDA:7,(anonymous_18) -FNDA:16,(anonymous_19) -FNDA:5,(anonymous_20) -FNDA:6,(anonymous_21) -FNDA:1,(anonymous_22) -FNDA:2,(anonymous_23) -FNDA:80,(anonymous_24) -FNDA:0,(anonymous_25) -DA:24,1 -DA:25,1 -DA:26,1 -DA:35,1 -DA:36,26 -DA:39,1 -DA:40,67 -DA:43,1 -DA:44,55 -DA:45,20 -DA:47,35 -DA:50,1 -DA:51,67 -DA:52,0 -DA:53,67 -DA:54,15 -DA:56,52 -DA:66,1 -DA:68,15 -DA:70,15 -DA:71,4 -DA:74,15 -DA:75,15 -DA:78,15 -DA:79,60 -DA:81,18 -DA:84,15 -DA:94,1 -DA:96,13 -DA:97,13 -DA:99,13 -DA:100,11 -DA:103,13 -DA:104,52 -DA:106,24 -DA:109,13 -DA:119,1 -DA:120,12 -DA:121,11 -DA:122,12 -DA:123,11 -DA:124,12 -DA:125,12 -DA:126,12 -DA:127,12 -DA:128,12 -DA:138,1 -DA:139,2 -DA:140,2 -DA:141,2 -DA:142,2 -DA:143,2 -DA:144,2 -DA:146,2 -DA:147,2 -DA:148,4 -DA:152,2 -DA:162,1 -DA:165,15 -DA:166,15 -DA:167,15 -DA:168,15 -DA:169,15 -DA:170,14 -DA:172,15 -DA:173,15 -DA:175,15 -DA:176,12 -DA:177,20 -DA:178,4 -DA:182,15 -DA:192,1 -DA:193,5 -DA:195,7 -DA:196,2 -DA:198,5 -DA:200,5 -DA:201,5 -DA:203,0 -DA:207,5 -DA:208,5 -DA:209,7 -DA:212,5 -DA:214,5 -DA:215,0 -DA:217,5 -DA:227,1 -DA:228,16 -DA:229,13 -DA:230,16 -DA:231,13 -DA:232,16 -DA:233,13 -DA:235,16 -DA:245,1 -DA:248,5 -DA:249,5 -DA:250,5 -DA:253,5 -DA:254,0 -DA:258,5 -DA:260,6 -DA:263,5 -DA:273,1 -DA:275,1 -DA:276,1 -DA:277,1 -DA:278,1 -DA:287,1 -DA:288,0 -DA:290,1 -DA:291,2 -DA:294,1 -DA:297,1 -DA:298,80 -DA:299,80 -DA:300,8 -DA:301,72 -DA:302,58 -DA:303,14 -DA:304,9 -DA:306,5 -DA:310,1 -DA:312,0 -DA:313,0 -DA:314,0 -DA:316,0 -DA:319,1 -LF:128 -LH:119 -BRDA:40,1,0,67 -BRDA:40,1,1,59 -BRDA:40,1,2,53 -BRDA:44,2,0,20 -BRDA:44,2,1,35 -BRDA:51,3,0,0 -BRDA:51,3,1,67 -BRDA:53,4,0,15 -BRDA:53,4,1,52 -BRDA:68,5,0,15 -BRDA:68,5,1,11 -BRDA:70,6,0,4 -BRDA:70,6,1,11 -BRDA:74,7,0,15 -BRDA:74,7,1,0 -BRDA:96,8,0,13 -BRDA:96,8,1,0 -BRDA:99,9,0,11 -BRDA:99,9,1,2 -BRDA:120,10,0,11 -BRDA:120,10,1,1 -BRDA:122,11,0,11 -BRDA:122,11,1,1 -BRDA:139,12,0,2 -BRDA:139,12,1,0 -BRDA:141,13,0,2 -BRDA:141,13,1,0 -BRDA:146,14,0,2 -BRDA:146,14,1,0 -BRDA:169,15,0,14 -BRDA:169,15,1,1 -BRDA:175,16,0,12 -BRDA:175,16,1,3 -BRDA:177,17,0,4 -BRDA:177,17,1,16 -BRDA:195,18,0,2 -BRDA:195,18,1,5 -BRDA:195,19,0,7 -BRDA:195,19,1,5 -BRDA:200,20,0,5 -BRDA:200,20,1,0 -BRDA:207,21,0,5 -BRDA:207,21,1,1 -BRDA:209,22,0,0 -BRDA:209,22,1,7 -BRDA:214,23,0,0 -BRDA:214,23,1,5 -BRDA:214,24,0,5 -BRDA:214,24,1,4 -BRDA:228,25,0,13 -BRDA:228,25,1,3 -BRDA:230,26,0,13 -BRDA:230,26,1,3 -BRDA:232,27,0,13 -BRDA:232,27,1,3 -BRDA:253,28,0,0 -BRDA:253,28,1,5 -BRDA:254,29,0,0 -BRDA:254,29,1,0 -BRDA:260,30,0,0 -BRDA:260,30,1,6 -BRDA:287,31,0,0 -BRDA:287,31,1,1 -BRDA:299,32,0,8 -BRDA:299,32,1,72 -BRDA:299,33,0,80 -BRDA:299,33,1,8 -BRDA:301,34,0,58 -BRDA:301,34,1,14 -BRDA:303,35,0,9 -BRDA:303,35,1,5 -BRF:71 -BRH:57 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js -FN:26,(anonymous_1) -FN:35,(anonymous_2) -FN:46,(anonymous_3) -FN:57,(anonymous_4) -FN:70,(anonymous_5) -FN:83,(anonymous_6) -FN:88,(anonymous_7) -FN:100,(anonymous_8) -FN:104,(anonymous_9) -FN:119,(anonymous_10) -FN:132,(anonymous_11) -FN:144,(anonymous_12) -FN:146,(anonymous_13) -FN:149,(anonymous_14) -FN:166,(anonymous_15) -FNF:15 -FNH:15 -FNDA:5096,(anonymous_1) -FNDA:4930,(anonymous_2) -FNDA:117,(anonymous_3) -FNDA:116,(anonymous_4) -FNDA:117,(anonymous_5) -FNDA:115,(anonymous_6) -FNDA:166,(anonymous_7) -FNDA:115,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:113,(anonymous_10) -FNDA:4930,(anonymous_11) -FNDA:4930,(anonymous_12) -FNDA:109,(anonymous_13) -FNDA:51,(anonymous_14) -FNDA:4,(anonymous_15) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,5096 -DA:28,5096 -DA:29,5096 -DA:30,5096 -DA:31,5096 -DA:32,5096 -DA:35,1 -DA:36,4930 -DA:46,1 -DA:47,117 -DA:57,1 -DA:58,116 -DA:59,57 -DA:70,1 -DA:71,117 -DA:72,2 -DA:83,1 -DA:84,115 -DA:85,23 -DA:88,92 -DA:89,166 -DA:100,1 -DA:101,115 -DA:103,115 -DA:104,6 -DA:105,10 -DA:108,109 -DA:119,1 -DA:120,113 -DA:121,113 -DA:122,113 -DA:123,113 -DA:125,113 -DA:132,1 -DA:133,4930 -DA:134,4930 -DA:135,4930 -DA:136,4930 -DA:137,462 -DA:138,462 -DA:140,4468 -DA:144,1 -DA:145,4930 -DA:146,4930 -DA:147,109 -DA:148,109 -DA:149,51 -DA:150,51 -DA:153,58 -DA:155,4930 -DA:156,4930 -DA:166,1 -DA:167,4 -DA:168,4 -DA:169,4 -DA:172,1 -LF:59 -LH:59 -BRDA:29,1,0,5096 -BRDA:29,1,1,780 -BRDA:47,2,0,31 -BRDA:47,2,1,86 -BRDA:58,3,0,57 -BRDA:58,3,1,59 -BRDA:71,4,0,2 -BRDA:71,4,1,115 -BRDA:84,5,0,23 -BRDA:84,5,1,92 -BRDA:89,6,0,158 -BRDA:89,6,1,8 -BRDA:103,7,0,6 -BRDA:103,7,1,109 -BRDA:105,8,0,3 -BRDA:105,8,1,7 -BRDA:105,9,0,10 -BRDA:105,9,1,3 -BRDA:108,10,0,58 -BRDA:108,10,1,51 -BRDA:108,11,0,109 -BRDA:108,11,1,59 -BRDA:136,12,0,462 -BRDA:136,12,1,4468 -BRDA:137,13,0,462 -BRDA:137,13,1,154 -BRDA:148,14,0,51 -BRDA:148,14,1,58 -BRF:28 -BRH:28 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js -FN:26,(anonymous_1) -FN:35,(anonymous_2) -FN:46,(anonymous_3) -FN:57,(anonymous_4) -FN:68,(anonymous_5) -FN:82,(anonymous_6) -FN:100,(anonymous_7) -FN:104,(anonymous_8) -FN:106,get -FN:113,(anonymous_10) -FN:115,(anonymous_11) -FN:118,(anonymous_12) -FN:133,(anonymous_13) -FNF:13 -FNH:12 -FNDA:2004,(anonymous_1) -FNDA:2004,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:20,(anonymous_4) -FNDA:2,(anonymous_5) -FNDA:2004,(anonymous_6) -FNDA:2004,(anonymous_7) -FNDA:2004,(anonymous_8) -FNDA:17,get -FNDA:2004,(anonymous_10) -FNDA:1,(anonymous_11) -FNDA:1,(anonymous_12) -FNDA:2,(anonymous_13) -DA:24,1 -DA:26,1 -DA:27,2004 -DA:28,2004 -DA:29,2004 -DA:30,2004 -DA:31,2004 -DA:32,2004 -DA:35,1 -DA:36,2004 -DA:46,1 -DA:47,0 -DA:57,1 -DA:58,20 -DA:68,1 -DA:69,2 -DA:70,2 -DA:82,1 -DA:83,2004 -DA:88,2004 -DA:89,2004 -DA:90,2004 -DA:91,616 -DA:92,616 -DA:93,616 -DA:96,2004 -DA:97,2004 -DA:100,1 -DA:101,2004 -DA:104,1 -DA:105,2004 -DA:106,2004 -DA:107,17 -DA:113,1 -DA:114,2004 -DA:115,2004 -DA:116,1 -DA:119,1 -DA:122,2004 -DA:123,2004 -DA:133,1 -DA:134,2 -DA:139,2 -DA:140,2 -DA:143,1 -LF:45 -LH:44 -BRDA:47,1,0,0 -BRDA:47,1,1,0 -BRDA:58,2,0,8 -BRDA:58,2,1,12 -BRDA:58,3,0,20 -BRDA:58,3,1,11 -BRDA:69,4,0,2 -BRDA:69,4,1,0 -BRDA:90,5,0,616 -BRDA:90,5,1,1388 -BRDA:91,6,0,616 -BRDA:91,6,1,0 -BRF:12 -BRH:8 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js -FN:30,(anonymous_1) -FN:39,(anonymous_2) -FN:44,(anonymous_3) -FN:57,(anonymous_4) -FN:60,(anonymous_5) -FNF:5 -FNH:5 -FNDA:308,(anonymous_1) -FNDA:308,(anonymous_2) -FNDA:308,(anonymous_3) -FNDA:308,(anonymous_4) -FNDA:7,(anonymous_5) -DA:24,1 -DA:25,1 -DA:26,1 -DA:30,1 -DA:31,308 -DA:32,308 -DA:33,308 -DA:34,308 -DA:35,308 -DA:39,1 -DA:40,308 -DA:44,1 -DA:45,308 -DA:46,308 -DA:47,308 -DA:48,308 -DA:49,0 -DA:50,0 -DA:52,308 -DA:57,1 -DA:58,308 -DA:60,308 -DA:61,7 -DA:68,7 -DA:72,1 -LF:25 -LH:23 -BRDA:34,1,0,308 -BRDA:34,1,1,0 -BRDA:48,2,0,0 -BRDA:48,2,1,308 -BRDA:49,3,0,0 -BRDA:49,3,1,0 -BRF:6 -BRH:2 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js -FN:28,(anonymous_1) -FN:49,(anonymous_2) -FN:63,(anonymous_3) -FN:85,(anonymous_4) -FN:92,(anonymous_5) -FN:108,(anonymous_6) -FN:121,(anonymous_7) -FN:138,(anonymous_8) -FN:148,(anonymous_9) -FN:162,(anonymous_10) -FN:164,(anonymous_11) -FN:176,(anonymous_12) -FN:181,(anonymous_13) -FNF:13 -FNH:11 -FNDA:10,(anonymous_1) -FNDA:10,(anonymous_2) -FNDA:10,(anonymous_3) -FNDA:10,(anonymous_4) -FNDA:5,(anonymous_5) -FNDA:7,(anonymous_6) -FNDA:10,(anonymous_7) -FNDA:6,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:9,(anonymous_12) -FNDA:7,(anonymous_13) -DA:24,1 -DA:25,1 -DA:28,1 -DA:29,10 -DA:30,10 -DA:32,10 -DA:49,1 -DA:50,10 -DA:51,10 -DA:63,1 -DA:64,10 -DA:66,10 -DA:67,4 -DA:69,10 -DA:70,4 -DA:72,10 -DA:73,0 -DA:85,1 -DA:86,10 -DA:88,10 -DA:89,5 -DA:92,5 -DA:93,5 -DA:95,5 -DA:97,5 -DA:108,1 -DA:109,7 -DA:111,7 -DA:121,1 -DA:122,10 -DA:123,10 -DA:124,10 -DA:126,10 -DA:138,1 -DA:139,6 -DA:148,1 -DA:149,10 -DA:150,10 -DA:153,10 -DA:154,0 -DA:158,10 -DA:159,0 -DA:163,0 -DA:164,0 -DA:165,0 -DA:168,0 -DA:174,10 -DA:176,10 -DA:177,9 -DA:178,9 -DA:181,9 -DA:182,7 -DA:185,0 -DA:190,10 -DA:193,0 -DA:196,1 -LF:56 -LH:47 -BRDA:50,1,0,10 -BRDA:50,1,1,0 -BRDA:66,2,0,4 -BRDA:66,2,1,6 -BRDA:69,3,0,4 -BRDA:69,3,1,6 -BRDA:72,4,0,0 -BRDA:72,4,1,10 -BRDA:88,5,0,5 -BRDA:88,5,1,5 -BRDA:88,6,0,10 -BRDA:88,6,1,6 -BRDA:93,7,0,5 -BRDA:93,7,1,0 -BRDA:111,8,0,7 -BRDA:111,8,1,0 -BRDA:111,9,0,7 -BRDA:111,9,1,7 -BRDA:111,9,2,7 -BRDA:153,10,0,0 -BRDA:153,10,1,10 -BRDA:158,11,0,0 -BRDA:158,11,1,10 -BRDA:158,12,0,10 -BRDA:158,12,1,5 -BRDA:158,12,2,5 -BRDA:158,12,3,0 -BRDA:163,13,0,0 -BRDA:163,13,1,0 -BRDA:174,14,0,10 -BRDA:174,14,1,0 -BRDA:177,15,0,9 -BRDA:177,15,1,0 -BRDA:177,16,0,9 -BRDA:177,16,1,9 -BRF:35 -BRH:24 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js -FN:35,(anonymous_1) -FN:36,(anonymous_2) -FN:38,(anonymous_3) -FN:39,(anonymous_4) -FN:42,(anonymous_5) -FN:54,(anonymous_6) -FN:55,(anonymous_7) -FN:57,(anonymous_8) -FN:59,(anonymous_9) -FN:71,(anonymous_10) -FN:72,(anonymous_11) -FN:79,(anonymous_12) -FN:94,(anonymous_13) -FN:99,(anonymous_14) -FN:117,(anonymous_15) -FN:120,(anonymous_16) -FN:163,(anonymous_17) -FN:191,(anonymous_18) -FN:214,(anonymous_19) -FN:246,(anonymous_20) -FN:265,(anonymous_21) -FN:287,(anonymous_22) -FNF:22 -FNH:17 -FNDA:1,(anonymous_1) -FNDA:1,(anonymous_2) -FNDA:1,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:1,(anonymous_5) -FNDA:26,(anonymous_6) -FNDA:91,(anonymous_7) -FNDA:68,(anonymous_8) -FNDA:68,(anonymous_9) -FNDA:26,(anonymous_10) -FNDA:91,(anonymous_11) -FNDA:22,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:27,(anonymous_17) -FNDA:1,(anonymous_18) -FNDA:1,(anonymous_19) -FNDA:26,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:27,(anonymous_22) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:39,1 -DA:40,1 -DA:43,1 -DA:54,1 -DA:55,26 -DA:56,91 -DA:58,68 -DA:60,68 -DA:71,1 -DA:72,26 -DA:73,91 -DA:76,26 -DA:77,26 -DA:79,26 -DA:80,22 -DA:81,22 -DA:94,1 -DA:95,0 -DA:99,0 -DA:100,0 -DA:101,0 -DA:104,0 -DA:106,0 -DA:107,0 -DA:109,0 -DA:110,0 -DA:112,0 -DA:117,0 -DA:118,0 -DA:120,0 -DA:123,0 -DA:124,0 -DA:126,0 -DA:127,0 -DA:129,0 -DA:133,0 -DA:136,0 -DA:137,0 -DA:140,0 -DA:141,0 -DA:144,0 -DA:145,0 -DA:147,0 -DA:163,1 -DA:164,27 -DA:165,27 -DA:167,27 -DA:191,1 -DA:192,1 -DA:195,1 -DA:196,1 -DA:198,1 -DA:199,1 -DA:200,1 -DA:203,1 -DA:204,1 -DA:205,1 -DA:208,1 -DA:209,1 -DA:211,1 -DA:214,1 -DA:215,1 -DA:216,0 -DA:219,1 -DA:222,1 -DA:224,0 -DA:228,0 -DA:230,0 -DA:231,0 -DA:234,1 -DA:246,1 -DA:247,26 -DA:251,26 -DA:252,26 -DA:254,26 -DA:255,0 -DA:257,26 -DA:265,1 -DA:266,0 -DA:267,0 -DA:269,0 -DA:270,0 -DA:271,0 -DA:274,0 -DA:275,0 -DA:277,0 -DA:287,1 -DA:288,27 -DA:289,27 -DA:290,27 -DA:291,27 -DA:294,1 -LF:99 -LH:59 -BRDA:36,1,0,1 -BRDA:36,1,1,0 -BRDA:37,2,0,1 -BRDA:37,2,1,1 -BRDA:100,3,0,0 -BRDA:100,3,1,0 -BRDA:100,4,0,0 -BRDA:100,4,1,0 -BRDA:104,5,0,0 -BRDA:104,5,1,0 -BRDA:109,6,0,0 -BRDA:109,6,1,0 -BRDA:118,7,0,0 -BRDA:118,7,1,0 -BRDA:118,8,0,0 -BRDA:118,8,1,0 -BRDA:123,9,0,0 -BRDA:123,9,1,0 -BRDA:123,10,0,0 -BRDA:123,10,1,0 -BRDA:129,11,0,0 -BRDA:129,11,1,0 -BRDA:140,12,0,0 -BRDA:140,12,1,0 -BRDA:144,13,0,0 -BRDA:144,13,1,0 -BRDA:199,14,0,1 -BRDA:199,14,1,0 -BRDA:204,15,0,1 -BRDA:204,15,1,0 -BRDA:204,16,0,1 -BRDA:204,16,1,1 -BRDA:211,17,0,1 -BRDA:211,17,1,0 -BRDA:215,18,0,0 -BRDA:215,18,1,1 -BRDA:254,19,0,0 -BRDA:254,19,1,26 -BRDA:270,20,0,0 -BRDA:270,20,1,0 -BRDA:270,21,0,0 -BRDA:270,21,1,0 -BRF:42 -BRH:10 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js -FN:38,(anonymous_1) -FN:50,(anonymous_2) -FN:51,(anonymous_3) -FN:70,(anonymous_4) -FN:82,(anonymous_5) -FN:85,(anonymous_6) -FN:89,(anonymous_7) -FN:100,(anonymous_8) -FN:104,(anonymous_9) -FN:108,(anonymous_10) -FN:121,(anonymous_11) -FN:132,(anonymous_12) -FN:135,(anonymous_13) -FN:141,(anonymous_14) -FN:152,(anonymous_15) -FN:163,(anonymous_16) -FN:170,(anonymous_17) -FN:180,(anonymous_18) -FN:202,(anonymous_19) -FN:214,(anonymous_20) -FN:218,(anonymous_21) -FN:223,(anonymous_22) -FN:224,(anonymous_23) -FN:233,(anonymous_24) -FN:240,(anonymous_25) -FN:242,(anonymous_26) -FNF:26 -FNH:26 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:2403,(anonymous_3) -FNDA:64,(anonymous_4) -FNDA:107,(anonymous_5) -FNDA:135,(anonymous_6) -FNDA:135,(anonymous_7) -FNDA:107,(anonymous_8) -FNDA:270,(anonymous_9) -FNDA:135,(anonymous_10) -FNDA:135,(anonymous_11) -FNDA:287,(anonymous_12) -FNDA:42,(anonymous_13) -FNDA:42,(anonymous_14) -FNDA:42,(anonymous_15) -FNDA:13,(anonymous_16) -FNDA:1,(anonymous_17) -FNDA:13,(anonymous_18) -FNDA:68,(anonymous_19) -FNDA:106,(anonymous_20) -FNDA:132,(anonymous_21) -FNDA:106,(anonymous_22) -FNDA:132,(anonymous_23) -FNDA:132,(anonymous_24) -FNDA:213,(anonymous_25) -FNDA:267,(anonymous_26) -DA:23,1 -DA:25,1 -DA:26,1 -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:38,1 -DA:39,1 -DA:50,1 -DA:51,267 -DA:52,2403 -DA:55,267 -DA:56,0 -DA:59,267 -DA:70,1 -DA:71,64 -DA:82,1 -DA:83,107 -DA:85,107 -DA:86,135 -DA:89,107 -DA:90,135 -DA:91,135 -DA:92,135 -DA:95,107 -DA:97,107 -DA:100,1 -DA:101,107 -DA:102,107 -DA:104,107 -DA:105,270 -DA:108,107 -DA:109,135 -DA:110,43 -DA:111,43 -DA:112,43 -DA:115,92 -DA:121,107 -DA:122,135 -DA:123,43 -DA:124,43 -DA:125,43 -DA:128,107 -DA:132,1 -DA:133,287 -DA:134,287 -DA:135,42 -DA:137,42 -DA:138,42 -DA:139,42 -DA:141,42 -DA:142,42 -DA:143,42 -DA:144,0 -DA:145,0 -DA:146,0 -DA:152,42 -DA:153,42 -DA:154,82 -DA:155,82 -DA:159,42 -DA:162,245 -DA:163,13 -DA:164,13 -DA:165,13 -DA:166,13 -DA:169,13 -DA:170,1 -DA:171,1 -DA:172,1 -DA:174,2 -DA:175,2 -DA:180,13 -DA:181,13 -DA:182,27 -DA:183,27 -DA:187,13 -DA:191,232 -DA:202,1 -DA:203,68 -DA:214,1 -DA:215,106 -DA:216,106 -DA:218,106 -DA:219,132 -DA:223,1 -DA:224,106 -DA:225,132 -DA:228,106 -DA:230,29 -DA:233,106 -DA:235,132 -DA:236,132 -DA:240,1 -DA:241,213 -DA:242,213 -DA:243,267 -DA:247,1 -DA:259,1 -LF:103 -LH:99 -BRDA:55,1,0,0 -BRDA:55,1,1,267 -BRDA:105,2,0,270 -BRDA:105,2,1,230 -BRDA:109,3,0,43 -BRDA:109,3,1,92 -BRDA:122,4,0,43 -BRDA:122,4,1,92 -BRDA:134,5,0,42 -BRDA:134,5,1,245 -BRDA:143,6,0,0 -BRDA:143,6,1,42 -BRDA:145,7,0,0 -BRDA:145,7,1,0 -BRDA:162,8,0,13 -BRDA:162,8,1,232 -BRDA:169,9,0,1 -BRDA:169,9,1,12 -BRDA:174,10,0,2 -BRDA:174,10,1,1 -BRDA:174,11,0,2 -BRDA:174,11,1,1 -BRF:22 -BRH:18 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js -FN:38,(anonymous_1) -FN:51,(anonymous_2) -FN:65,(anonymous_3) -FN:80,(anonymous_4) -FN:95,(anonymous_5) -FN:108,(anonymous_6) -FN:119,(anonymous_7) -FN:130,(anonymous_8) -FN:148,(anonymous_9) -FN:160,(anonymous_10) -FN:171,(anonymous_11) -FN:182,(anonymous_12) -FN:193,(anonymous_13) -FN:204,(anonymous_14) -FN:216,(anonymous_15) -FN:228,(anonymous_16) -FNF:16 -FNH:15 -FNDA:205,(anonymous_1) -FNDA:15,(anonymous_2) -FNDA:9,(anonymous_3) -FNDA:14,(anonymous_4) -FNDA:15,(anonymous_5) -FNDA:7,(anonymous_6) -FNDA:61,(anonymous_7) -FNDA:61,(anonymous_8) -FNDA:45,(anonymous_9) -FNDA:7,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:12,(anonymous_12) -FNDA:10,(anonymous_13) -FNDA:15,(anonymous_14) -FNDA:7,(anonymous_15) -FNDA:26,(anonymous_16) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:38,1 -DA:39,205 -DA:40,205 -DA:41,205 -DA:51,1 -DA:52,15 -DA:53,15 -DA:54,15 -DA:55,15 -DA:65,1 -DA:66,9 -DA:67,9 -DA:68,9 -DA:69,9 -DA:70,9 -DA:80,1 -DA:81,14 -DA:82,14 -DA:83,14 -DA:84,14 -DA:85,14 -DA:95,1 -DA:96,15 -DA:97,15 -DA:108,1 -DA:109,7 -DA:119,1 -DA:120,61 -DA:130,1 -DA:131,61 -DA:135,61 -DA:136,3 -DA:138,58 -DA:148,1 -DA:149,45 -DA:150,45 -DA:160,1 -DA:161,7 -DA:171,1 -DA:172,0 -DA:182,1 -DA:183,12 -DA:193,1 -DA:194,10 -DA:204,1 -DA:205,15 -DA:206,15 -DA:216,1 -DA:217,7 -DA:218,7 -DA:228,1 -DA:229,26 -DA:230,26 -DA:233,1 -LF:58 -LH:57 -BRDA:96,1,0,7 -BRDA:96,1,1,8 -BRDA:131,2,0,61 -BRDA:131,2,1,0 -BRDA:135,3,0,3 -BRDA:135,3,1,58 -BRDA:149,4,0,45 -BRDA:149,4,1,0 -BRDA:183,5,0,6 -BRDA:183,5,1,6 -BRF:10 -BRH:8 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js -FN:29,(anonymous_1) -FN:40,(anonymous_2) -FN:51,(anonymous_3) -FN:63,(anonymous_4) -FN:74,(anonymous_5) -FN:84,(anonymous_6) -FN:94,(anonymous_7) -FN:107,(anonymous_8) -FN:117,(anonymous_9) -FN:128,(anonymous_10) -FN:132,(anonymous_11) -FN:142,(anonymous_12) -FN:144,(anonymous_13) -FNF:13 -FNH:5 -FNDA:434,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:668,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:389,(anonymous_7) -FNDA:279,(anonymous_8) -FNDA:235,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -DA:23,1 -DA:29,1 -DA:30,434 -DA:31,434 -DA:40,1 -DA:41,0 -DA:51,1 -DA:52,0 -DA:63,1 -DA:64,0 -DA:74,1 -DA:75,668 -DA:84,1 -DA:85,0 -DA:94,1 -DA:95,389 -DA:96,389 -DA:98,0 -DA:107,1 -DA:108,279 -DA:117,1 -DA:118,235 -DA:128,1 -DA:131,0 -DA:132,0 -DA:133,0 -DA:134,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:142,0 -DA:143,0 -DA:145,0 -DA:151,1 -LF:34 -LH:19 -BRDA:30,1,0,434 -BRDA:30,1,1,0 -BRDA:85,2,0,0 -BRDA:85,2,1,0 -BRDA:95,3,0,389 -BRDA:95,3,1,0 -BRDA:108,4,0,44 -BRDA:108,4,1,235 -BRDA:133,5,0,0 -BRDA:133,5,1,0 -BRF:10 -BRH:4 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js -FN:14,(anonymous_1) -FN:22,(anonymous_2) -FN:26,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:100,(anonymous_3) -DA:1,1 -DA:2,1 -DA:14,1 -DA:15,1 -DA:16,1 -DA:19,1 -DA:20,1 -DA:22,1 -DA:23,267 -DA:26,1 -DA:27,100 -DA:30,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js -FN:7,(anonymous_1) -FN:19,(anonymous_2) -FN:30,(anonymous_3) -FN:44,(anonymous_4) -FN:59,(anonymous_5) -FN:78,(anonymous_6) -FN:99,(anonymous_7) -FN:117,(anonymous_8) -FN:132,(anonymous_9) -FN:145,(anonymous_10) -FN:149,(anonymous_11) -FN:156,(anonymous_12) -FN:165,(anonymous_13) -FN:191,(anonymous_14) -FN:196,(anonymous_15) -FN:215,(anonymous_16) -FN:232,(anonymous_17) -FNF:17 -FNH:15 -FNDA:9,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:1029,(anonymous_4) -FNDA:619,(anonymous_5) -FNDA:678,(anonymous_6) -FNDA:128,(anonymous_7) -FNDA:338,(anonymous_8) -FNDA:2454,(anonymous_9) -FNDA:201,(anonymous_10) -FNDA:22,(anonymous_11) -FNDA:43,(anonymous_12) -FNDA:11,(anonymous_13) -FNDA:216,(anonymous_14) -FNDA:21,(anonymous_15) -FNDA:19,(anonymous_16) -FNDA:22,(anonymous_17) -DA:1,1 -DA:2,1 -DA:7,1 -DA:8,9 -DA:9,9 -DA:19,1 -DA:20,0 -DA:30,1 -DA:31,0 -DA:44,1 -DA:45,1029 -DA:46,1029 -DA:59,1 -DA:60,619 -DA:61,619 -DA:78,1 -DA:79,678 -DA:80,678 -DA:81,123 -DA:83,555 -DA:99,1 -DA:101,128 -DA:102,128 -DA:103,0 -DA:106,128 -DA:117,1 -DA:118,338 -DA:132,1 -DA:134,2454 -DA:145,1 -DA:146,201 -DA:147,201 -DA:149,22 -DA:150,22 -DA:151,22 -DA:153,22 -DA:154,22 -DA:156,22 -DA:157,43 -DA:160,22 -DA:163,179 -DA:165,11 -DA:166,11 -DA:167,11 -DA:169,11 -DA:170,11 -DA:171,23 -DA:174,11 -DA:179,168 -DA:191,1 -DA:192,216 -DA:194,216 -DA:196,21 -DA:197,21 -DA:198,21 -DA:199,21 -DA:201,21 -DA:202,21 -DA:203,21 -DA:204,21 -DA:206,21 -DA:207,37 -DA:210,21 -DA:213,195 -DA:215,19 -DA:216,19 -DA:217,19 -DA:219,19 -DA:220,19 -DA:221,19 -DA:222,19 -DA:224,19 -DA:225,47 -DA:228,19 -DA:230,176 -DA:232,22 -DA:233,22 -DA:234,22 -DA:235,22 -DA:237,22 -DA:241,154 -DA:242,154 -DA:245,1 -LF:83 -LH:80 -BRDA:46,1,0,1029 -BRDA:46,1,1,186 -BRDA:61,2,0,619 -BRDA:61,2,1,43 -BRDA:80,3,0,123 -BRDA:80,3,1,555 -BRDA:81,4,0,123 -BRDA:81,4,1,54 -BRDA:102,5,0,0 -BRDA:102,5,1,128 -BRDA:147,6,0,22 -BRDA:147,6,1,179 -BRDA:163,7,0,11 -BRDA:163,7,1,168 -BRDA:194,8,0,21 -BRDA:194,8,1,195 -BRDA:213,9,0,19 -BRDA:213,9,1,176 -BRDA:230,10,0,22 -BRDA:230,10,1,154 -BRF:20 -BRH:19 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js -FN:14,(anonymous_1) -FN:22,(anonymous_2) -FN:26,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:44,(anonymous_3) -DA:1,1 -DA:2,1 -DA:14,1 -DA:15,1 -DA:16,1 -DA:19,1 -DA:20,1 -DA:22,1 -DA:23,267 -DA:26,1 -DA:27,44 -DA:30,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:234,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,234 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:139,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,139 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js -FN:4,(anonymous_1) -FN:12,(anonymous_2) -FN:16,(anonymous_3) -FN:20,(anonymous_4) -FNF:4 -FNH:4 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:37,(anonymous_3) -FNDA:33,(anonymous_4) -DA:1,1 -DA:2,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:9,1 -DA:10,1 -DA:12,1 -DA:13,267 -DA:16,1 -DA:17,37 -DA:20,1 -DA:21,33 -DA:24,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js -FN:4,(anonymous_1) -FN:12,(anonymous_2) -FN:16,(anonymous_3) -FN:20,(anonymous_4) -FNF:4 -FNH:4 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:28,(anonymous_3) -FNDA:35,(anonymous_4) -DA:1,1 -DA:2,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:9,1 -DA:10,1 -DA:12,1 -DA:13,267 -DA:16,1 -DA:17,28 -DA:20,1 -DA:21,35 -DA:24,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:28,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,28 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:2 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:0,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,0 -DA:36,1 -LF:12 -LH:11 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:38,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,38 -DA:34,38 -DA:35,38 -DA:38,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js -FN:33,(anonymous_1) -FN:51,(anonymous_2) -FN:52,(anonymous_3) -FN:54,(anonymous_4) -FN:66,(anonymous_5) -FN:76,(anonymous_6) -FN:86,(anonymous_7) -FN:97,(anonymous_8) -FN:103,(anonymous_9) -FN:105,(anonymous_10) -FN:118,(anonymous_11) -FN:120,(anonymous_12) -FN:127,(anonymous_13) -FN:149,(anonymous_14) -FN:158,(anonymous_15) -FN:179,(anonymous_16) -FN:189,(anonymous_17) -FN:208,(anonymous_18) -FN:233,(anonymous_19) -FN:260,(anonymous_20) -FN:268,(anonymous_21) -FN:289,(anonymous_22) -FNF:22 -FNH:20 -FNDA:61,(anonymous_1) -FNDA:16,(anonymous_2) -FNDA:50,(anonymous_3) -FNDA:25,(anonymous_4) -FNDA:30,(anonymous_5) -FNDA:22,(anonymous_6) -FNDA:2,(anonymous_7) -FNDA:12,(anonymous_8) -FNDA:24,(anonymous_9) -FNDA:4,(anonymous_10) -FNDA:21,(anonymous_11) -FNDA:16,(anonymous_12) -FNDA:2,(anonymous_13) -FNDA:8,(anonymous_14) -FNDA:1,(anonymous_15) -FNDA:12,(anonymous_16) -FNDA:25,(anonymous_17) -FNDA:3,(anonymous_18) -FNDA:3,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:48,(anonymous_22) -DA:24,1 -DA:25,1 -DA:26,1 -DA:27,1 -DA:28,1 -DA:33,1 -DA:34,61 -DA:35,61 -DA:36,61 -DA:37,61 -DA:38,61 -DA:39,61 -DA:40,61 -DA:51,1 -DA:52,16 -DA:53,50 -DA:55,25 -DA:66,1 -DA:67,30 -DA:76,1 -DA:77,22 -DA:86,1 -DA:87,2 -DA:97,1 -DA:98,12 -DA:99,12 -DA:100,12 -DA:103,12 -DA:104,24 -DA:106,4 -DA:109,12 -DA:112,12 -DA:114,11 -DA:115,9 -DA:118,11 -DA:119,21 -DA:121,16 -DA:122,16 -DA:123,6 -DA:126,10 -DA:127,1 -DA:128,2 -DA:131,9 -DA:134,11 -DA:137,12 -DA:139,12 -DA:149,1 -DA:150,8 -DA:151,8 -DA:152,8 -DA:155,8 -DA:157,1 -DA:158,1 -DA:159,1 -DA:162,1 -DA:163,0 -DA:164,0 -DA:167,1 -DA:168,1 -DA:169,1 -DA:173,7 -DA:174,7 -DA:175,7 -DA:178,8 -DA:179,12 -DA:180,8 -DA:182,8 -DA:183,8 -DA:185,8 -DA:186,8 -DA:187,8 -DA:189,8 -DA:190,25 -DA:191,25 -DA:194,8 -DA:195,8 -DA:197,8 -DA:208,1 -DA:210,3 -DA:211,3 -DA:213,3 -DA:214,1 -DA:218,3 -DA:233,1 -DA:235,3 -DA:236,3 -DA:247,3 -DA:260,1 -DA:262,0 -DA:264,0 -DA:265,0 -DA:269,0 -DA:270,0 -DA:272,0 -DA:277,0 -DA:289,1 -DA:290,48 -DA:293,48 -DA:296,48 -DA:297,26 -DA:302,22 -DA:303,22 -DA:304,22 -DA:306,22 -DA:311,1 -LF:105 -LH:96 -BRDA:37,1,0,35 -BRDA:37,1,1,26 -BRDA:67,2,0,30 -BRDA:67,2,1,22 -BRDA:98,3,0,12 -BRDA:98,3,1,1 -BRDA:99,4,0,12 -BRDA:99,4,1,2 -BRDA:112,5,0,11 -BRDA:112,5,1,1 -BRDA:114,6,0,9 -BRDA:114,6,1,2 -BRDA:122,7,0,6 -BRDA:122,7,1,10 -BRDA:122,8,0,16 -BRDA:122,8,1,11 -BRDA:126,9,0,1 -BRDA:126,9,1,9 -BRDA:151,10,0,8 -BRDA:151,10,1,1 -BRDA:152,11,0,8 -BRDA:152,11,1,2 -BRDA:155,12,0,1 -BRDA:155,12,1,7 -BRDA:162,13,0,0 -BRDA:162,13,1,1 -BRDA:178,14,0,1 -BRDA:178,14,1,7 -BRDA:190,15,0,12 -BRDA:190,15,1,13 -BRDA:210,16,0,3 -BRDA:210,16,1,0 -BRDA:213,17,0,1 -BRDA:213,17,1,2 -BRDA:264,18,0,0 -BRDA:264,18,1,0 -BRDA:269,19,0,0 -BRDA:269,19,1,0 -BRDA:296,20,0,26 -BRDA:296,20,1,22 -BRDA:303,21,0,22 -BRDA:303,21,1,0 -BRF:42 -BRH:35 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js -FN:26,(anonymous_1) -FNF:1 -FNH:1 -FNDA:42,(anonymous_1) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,42 -DA:28,2 -DA:29,2 -DA:31,2 -DA:34,42 -LF:8 -LH:8 -BRDA:27,1,0,2 -BRDA:27,1,1,40 -BRDA:27,2,0,42 -BRDA:27,2,1,2 -BRDA:28,3,0,2 -BRDA:28,3,1,0 -BRDA:28,4,0,2 -BRDA:28,4,1,2 -BRF:8 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js -FN:31,(anonymous_1) -FN:33,(anonymous_2) -FN:36,(anonymous_3) -FN:44,(anonymous_4) -FN:50,(anonymous_5) -FN:63,(anonymous_6) -FN:79,(anonymous_7) -FN:84,(anonymous_8) -FN:104,(anonymous_9) -FN:105,(anonymous_10) -FN:117,(anonymous_11) -FN:127,(anonymous_12) -FN:128,(anonymous_13) -FN:144,(anonymous_14) -FN:162,(anonymous_15) -FN:175,(anonymous_16) -FN:185,(anonymous_17) -FN:195,(anonymous_18) -FN:214,(anonymous_19) -FN:232,(anonymous_20) -FNF:20 -FNH:19 -FNDA:68,(anonymous_1) -FNDA:94,(anonymous_2) -FNDA:42,(anonymous_3) -FNDA:16,(anonymous_4) -FNDA:8,(anonymous_5) -FNDA:16,(anonymous_6) -FNDA:16,(anonymous_7) -FNDA:9,(anonymous_8) -FNDA:8,(anonymous_9) -FNDA:14,(anonymous_10) -FNDA:1,(anonymous_11) -FNDA:5,(anonymous_12) -FNDA:16,(anonymous_13) -FNDA:1,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:68,(anonymous_16) -FNDA:68,(anonymous_17) -FNDA:2,(anonymous_18) -FNDA:9,(anonymous_19) -FNDA:68,(anonymous_20) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:31,1 -DA:32,68 -DA:33,68 -DA:34,94 -DA:36,68 -DA:37,42 -DA:39,68 -DA:40,68 -DA:41,68 -DA:44,1 -DA:45,16 -DA:46,4 -DA:50,1 -DA:51,8 -DA:52,2 -DA:63,1 -DA:64,16 -DA:65,16 -DA:66,9 -DA:68,16 -DA:69,16 -DA:70,16 -DA:79,1 -DA:80,16 -DA:84,1 -DA:85,9 -DA:86,0 -DA:89,9 -DA:90,9 -DA:91,9 -DA:104,1 -DA:105,14 -DA:106,8 -DA:107,8 -DA:108,8 -DA:111,8 -DA:112,7 -DA:113,7 -DA:116,1 -DA:117,1 -DA:118,1 -DA:127,1 -DA:128,16 -DA:129,5 -DA:130,5 -DA:132,5 -DA:133,4 -DA:136,1 -DA:144,1 -DA:145,1 -DA:146,1 -DA:147,1 -DA:149,1 -DA:150,1 -DA:153,0 -DA:162,1 -DA:163,0 -DA:164,0 -DA:166,0 -DA:175,1 -DA:176,68 -DA:185,1 -DA:186,68 -DA:195,1 -DA:196,2 -DA:197,2 -DA:198,2 -DA:199,2 -DA:201,2 -DA:214,1 -DA:215,9 -DA:218,9 -DA:219,3 -DA:223,6 -DA:232,1 -DA:233,68 -DA:234,68 -DA:235,68 -DA:236,68 -DA:237,68 -DA:238,68 -DA:239,68 -DA:240,68 -DA:241,67 -DA:243,68 -DA:246,1 -LF:90 -LH:85 -BRDA:45,1,0,4 -BRDA:45,1,1,12 -BRDA:51,2,0,2 -BRDA:51,2,1,6 -BRDA:51,3,0,8 -BRDA:51,3,1,4 -BRDA:65,4,0,9 -BRDA:65,4,1,7 -BRDA:65,5,0,16 -BRDA:65,5,1,9 -BRDA:85,6,0,0 -BRDA:85,6,1,9 -BRDA:89,7,0,9 -BRDA:89,7,1,0 -BRDA:91,8,0,9 -BRDA:91,8,1,0 -BRDA:111,9,0,7 -BRDA:111,9,1,1 -BRDA:132,10,0,4 -BRDA:132,10,1,1 -BRDA:149,11,0,1 -BRDA:149,11,1,0 -BRDA:202,12,0,2 -BRDA:202,12,1,0 -BRDA:218,13,0,3 -BRDA:218,13,1,6 -BRDA:240,14,0,67 -BRDA:240,14,1,1 -BRF:28 -BRH:23 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js -FNF:0 -FNH:0 -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,1 -DA:29,1 -LF:5 -LH:5 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js -FN:35,(anonymous_1) -FN:50,(anonymous_2) -FN:65,(anonymous_3) -FN:83,(anonymous_4) -FNF:4 -FNH:2 -FNDA:1,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:1,(anonymous_4) -DA:23,1 -DA:24,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:38,0 -DA:41,1 -DA:42,0 -DA:45,1 -DA:46,1 -DA:47,1 -DA:50,0 -DA:51,0 -DA:65,1 -DA:66,0 -DA:83,1 -DA:84,1 -DA:85,1 -DA:91,1 -LF:19 -LH:14 -BRDA:37,1,0,0 -BRDA:37,1,1,1 -BRDA:41,2,0,0 -BRDA:41,2,1,1 -BRDA:45,3,0,1 -BRDA:45,3,1,0 -BRF:6 -BRH:3 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js -FN:25,(anonymous_1) -FN:30,(anonymous_2) -FN:36,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:616,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:25,1 -DA:26,154 -DA:28,154 -DA:30,154 -DA:31,616 -DA:32,616 -DA:36,1 -DA:37,154 -DA:43,154 -DA:49,154 -DA:55,154 -DA:61,154 -DA:66,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js -FN:28,(anonymous_1) -FN:33,(anonymous_2) -FN:40,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:924,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:24,1 -DA:25,1 -DA:28,1 -DA:29,154 -DA:31,154 -DA:33,154 -DA:34,924 -DA:35,924 -DA:40,1 -DA:42,154 -DA:49,154 -DA:55,154 -DA:61,154 -DA:67,154 -DA:73,154 -DA:82,154 -DA:95,154 -DA:105,1 -LF:19 -LH:19 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js -FN:26,(anonymous_1) -FN:31,(anonymous_2) -FN:38,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:308,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,154 -DA:29,154 -DA:31,154 -DA:32,308 -DA:33,308 -DA:38,1 -DA:39,154 -DA:52,1 -LF:11 -LH:11 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js -FN:3,(anonymous_1) -FNF:1 -FNH:1 -FNDA:167,(anonymous_1) -DA:3,1 -DA:4,167 -DA:5,167 -DA:8,1 -LF:4 -LH:4 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js -FN:8,(anonymous_1) -FN:10,(anonymous_2) -FN:23,(anonymous_3) -FN:30,(anonymous_4) -FNF:4 -FNH:4 -FNDA:154,(anonymous_1) -FNDA:157,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:618,(anonymous_4) -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:8,1 -DA:10,154 -DA:12,157 -DA:13,157 -DA:14,1 -DA:15,1 -DA:17,1 -DA:19,156 -DA:22,157 -DA:23,2 -DA:24,2 -DA:25,2 -DA:29,157 -DA:30,156 -DA:31,618 -DA:32,618 -DA:37,154 -DA:38,154 -DA:39,154 -DA:40,154 -DA:42,154 -DA:47,1 -LF:26 -LH:26 -BRDA:13,1,0,1 -BRDA:13,1,1,156 -BRDA:14,2,0,1 -BRDA:14,2,1,0 -BRDA:22,3,0,2 -BRDA:22,3,1,155 -BRDA:29,4,0,156 -BRDA:29,4,1,1 -BRF:8 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js -FN:26,(anonymous_1) -FN:37,(anonymous_2) -FN:46,(anonymous_3) -FN:48,(anonymous_4) -FN:50,(anonymous_5) -FN:52,(anonymous_6) -FNF:6 -FNH:6 -FNDA:4,(anonymous_1) -FNDA:8,(anonymous_2) -FNDA:4,(anonymous_3) -FNDA:4,(anonymous_4) -FNDA:8,(anonymous_5) -FNDA:8,(anonymous_6) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,4 -DA:28,4 -DA:37,1 -DA:38,8 -DA:46,1 -DA:47,4 -DA:48,4 -DA:49,4 -DA:50,4 -DA:51,8 -DA:53,8 -DA:55,8 -DA:56,2 -DA:59,6 -DA:65,1 -LF:18 -LH:18 -BRDA:49,1,0,4 -BRDA:49,1,1,0 -BRDA:51,2,0,8 -BRDA:51,2,1,0 -BRDA:53,3,0,8 -BRDA:53,3,1,0 -BRDA:55,4,0,2 -BRDA:55,4,1,6 -BRDA:59,5,0,6 -BRDA:59,5,1,0 -BRF:10 -BRH:6 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js -FN:48,(anonymous_1) -FN:59,(anonymous_2) -FN:73,(anonymous_3) -FN:100,(anonymous_4) -FN:103,(anonymous_5) -FN:131,(anonymous_6) -FNF:6 -FNH:6 -FNDA:3,(anonymous_1) -FNDA:3,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:1,(anonymous_5) -FNDA:1,(anonymous_6) -DA:27,2 -DA:30,2 -DA:33,2 -DA:34,0 -DA:37,2 -DA:38,0 -DA:42,2 -DA:48,2 -DA:49,3 -DA:59,2 -DA:60,3 -DA:61,3 -DA:62,3 -DA:63,3 -DA:73,2 -DA:74,2 -DA:76,2 -DA:77,2 -DA:79,0 -DA:82,2 -DA:84,2 -DA:85,2 -DA:87,0 -DA:90,2 -DA:100,2 -DA:101,1 -DA:103,1 -DA:104,1 -DA:105,1 -DA:106,1 -DA:108,1 -DA:109,1 -DA:111,0 -DA:114,1 -DA:118,1 -DA:119,1 -DA:121,0 -DA:131,2 -DA:132,1 -DA:133,1 -DA:139,1 -DA:141,0 -DA:145,2 -LF:43 -LH:36 -BRDA:33,1,0,0 -BRDA:33,1,1,2 -BRDA:33,2,0,2 -BRDA:33,2,1,0 -BRDA:37,3,0,0 -BRDA:37,3,1,2 -BRDA:37,4,0,2 -BRDA:37,4,1,0 -BRDA:49,5,0,3 -BRDA:49,5,1,3 -BRDA:104,6,0,1 -BRDA:104,6,1,0 -BRF:12 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js -FN:29,(anonymous_1) -FN:41,(anonymous_2) -FN:44,(anonymous_3) -FN:50,(anonymous_4) -FN:60,(anonymous_5) -FN:79,(anonymous_6) -FN:82,(anonymous_7) -FN:86,(anonymous_8) -FN:90,(anonymous_9) -FN:101,(anonymous_10) -FN:113,(anonymous_11) -FN:130,(anonymous_12) -FN:156,(anonymous_13) -FN:169,(anonymous_14) -FN:184,(anonymous_15) -FN:194,(anonymous_16) -FN:218,(anonymous_17) -FN:235,(anonymous_18) -FN:258,(anonymous_19) -FN:263,(anonymous_20) -FN:281,(anonymous_21) -FN:298,(anonymous_22) -FNF:22 -FNH:10 -FNDA:5,(anonymous_1) -FNDA:2,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:5,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:2,(anonymous_10) -FNDA:2,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:1,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:3,(anonymous_15) -FNDA:1,(anonymous_16) -FNDA:1,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -DA:25,2 -DA:26,2 -DA:29,2 -DA:30,5 -DA:31,5 -DA:32,5 -DA:33,5 -DA:35,5 -DA:37,5 -DA:41,5 -DA:44,2 -DA:46,2 -DA:49,2 -DA:50,0 -DA:51,0 -DA:52,0 -DA:55,2 -DA:59,2 -DA:60,0 -DA:61,0 -DA:62,0 -DA:66,2 -DA:67,1 -DA:68,1 -DA:79,2 -DA:80,5 -DA:82,5 -DA:83,0 -DA:86,5 -DA:87,0 -DA:90,5 -DA:91,0 -DA:101,2 -DA:102,2 -DA:106,2 -DA:113,2 -DA:116,2 -DA:117,0 -DA:119,2 -DA:121,2 -DA:122,2 -DA:126,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:135,0 -DA:139,2 -DA:140,2 -DA:142,2 -DA:143,2 -DA:146,2 -DA:156,2 -DA:157,1 -DA:158,1 -DA:160,1 -DA:161,1 -DA:169,2 -DA:170,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:184,2 -DA:185,3 -DA:188,3 -DA:189,2 -DA:191,3 -DA:194,2 -DA:196,1 -DA:197,1 -DA:200,1 -DA:201,1 -DA:203,1 -DA:205,1 -DA:206,1 -DA:208,0 -DA:211,1 -DA:214,0 -DA:218,2 -DA:220,1 -DA:221,1 -DA:224,1 -DA:225,1 -DA:235,2 -DA:237,0 -DA:238,0 -DA:240,0 -DA:242,0 -DA:243,0 -DA:246,0 -DA:247,0 -DA:258,2 -DA:259,0 -DA:261,0 -DA:263,0 -DA:264,0 -DA:265,0 -DA:267,0 -DA:270,0 -DA:271,0 -DA:281,2 -DA:282,0 -DA:284,0 -DA:285,0 -DA:288,0 -DA:289,0 -DA:298,2 -DA:299,0 -DA:300,0 -DA:302,0 -DA:303,0 -DA:305,0 -DA:308,2 -LF:113 -LH:66 -BRDA:49,1,0,0 -BRDA:49,1,1,2 -BRDA:51,2,0,0 -BRDA:51,2,1,0 -BRDA:59,3,0,0 -BRDA:59,3,1,2 -BRDA:59,4,0,2 -BRDA:59,4,1,0 -BRDA:61,5,0,0 -BRDA:61,5,1,0 -BRDA:66,6,0,1 -BRDA:66,6,1,1 -BRDA:116,7,0,0 -BRDA:116,7,1,2 -BRDA:142,8,0,2 -BRDA:142,8,1,0 -BRDA:157,9,0,1 -BRDA:157,9,1,0 -BRDA:158,10,0,1 -BRDA:158,10,1,0 -BRDA:171,11,0,0 -BRDA:171,11,1,0 -BRDA:188,12,0,2 -BRDA:188,12,1,1 -BRDA:196,13,0,1 -BRDA:196,13,1,0 -BRDA:200,14,0,1 -BRDA:200,14,1,0 -BRDA:220,15,0,1 -BRDA:220,15,1,0 -BRDA:237,16,0,0 -BRDA:237,16,1,0 -BRDA:240,17,0,0 -BRDA:240,17,1,0 -BRDA:261,18,0,0 -BRDA:261,18,1,0 -BRDA:264,19,0,0 -BRDA:264,19,1,0 -BRDA:282,20,0,0 -BRDA:282,20,1,0 -BRF:40 -BRH:14 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js -FN:2,(anonymous_1) -FN:23,ucs2decode -FN:50,ucs2encode -FN:67,checkScalarValue -FN:77,createByte -FN:81,encodeCodePoint -FN:103,utf8encode -FN:118,readContinuationByte -FN:134,decodeSymbol -FN:200,utf8decode -FN:227,(anonymous_11) -FNF:11 -FNH:1 -FNDA:1,(anonymous_1) -FNDA:0,ucs2decode -FNDA:0,ucs2encode -FNDA:0,checkScalarValue -FNDA:0,createByte -FNDA:0,encodeCodePoint -FNDA:0,utf8encode -FNDA:0,readContinuationByte -FNDA:0,decodeSymbol -FNDA:0,utf8decode -FNDA:0,(anonymous_11) -DA:2,1 -DA:5,1 -DA:8,1 -DA:13,1 -DA:14,1 -DA:15,0 -DA:20,1 -DA:23,1 -DA:24,0 -DA:25,0 -DA:26,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:39,0 -DA:40,0 -DA:43,0 -DA:46,0 -DA:50,1 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:62,0 -DA:64,0 -DA:67,1 -DA:68,0 -DA:69,0 -DA:77,1 -DA:78,0 -DA:81,1 -DA:82,0 -DA:83,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:97,0 -DA:99,0 -DA:100,0 -DA:103,1 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:113,0 -DA:118,1 -DA:119,0 -DA:120,0 -DA:123,0 -DA:124,0 -DA:126,0 -DA:127,0 -DA:131,0 -DA:134,1 -DA:135,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:141,0 -DA:142,0 -DA:145,0 -DA:146,0 -DA:150,0 -DA:151,0 -DA:154,0 -DA:155,0 -DA:159,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:163,0 -DA:165,0 -DA:170,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:178,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:187,0 -DA:189,0 -DA:190,0 -DA:194,0 -DA:197,1 -DA:198,1 -DA:199,1 -DA:200,1 -DA:201,0 -DA:202,0 -DA:203,0 -DA:204,0 -DA:205,0 -DA:206,0 -DA:207,0 -DA:209,0 -DA:214,1 -DA:222,1 -DA:227,0 -DA:228,0 -DA:230,1 -DA:231,1 -DA:232,1 -DA:234,0 -DA:235,0 -DA:236,0 -DA:237,0 -DA:241,0 -LF:135 -LH:23 -BRDA:5,1,0,1 -BRDA:5,1,1,1 -BRDA:8,2,0,1 -BRDA:8,2,1,1 -BRDA:8,2,2,1 -BRDA:8,2,3,1 -BRDA:13,3,0,1 -BRDA:13,3,1,1 -BRDA:14,4,0,0 -BRDA:14,4,1,1 -BRDA:14,5,0,1 -BRDA:14,5,1,1 -BRDA:31,6,0,0 -BRDA:31,6,1,0 -BRDA:31,7,0,0 -BRDA:31,7,1,0 -BRDA:31,7,2,0 -BRDA:34,8,0,0 -BRDA:34,8,1,0 -BRDA:57,9,0,0 -BRDA:57,9,1,0 -BRDA:68,10,0,0 -BRDA:68,10,1,0 -BRDA:68,11,0,0 -BRDA:68,11,1,0 -BRDA:82,12,0,0 -BRDA:82,12,1,0 -BRDA:86,13,0,0 -BRDA:86,13,1,0 -BRDA:89,14,0,0 -BRDA:89,14,1,0 -BRDA:94,15,0,0 -BRDA:94,15,1,0 -BRDA:119,16,0,0 -BRDA:119,16,1,0 -BRDA:126,17,0,0 -BRDA:126,17,1,0 -BRDA:141,18,0,0 -BRDA:141,18,1,0 -BRDA:145,19,0,0 -BRDA:145,19,1,0 -BRDA:154,20,0,0 -BRDA:154,20,1,0 -BRDA:159,21,0,0 -BRDA:159,21,1,0 -BRDA:162,22,0,0 -BRDA:162,22,1,0 -BRDA:170,23,0,0 -BRDA:170,23,1,0 -BRDA:174,24,0,0 -BRDA:174,24,1,0 -BRDA:183,25,0,0 -BRDA:183,25,1,0 -BRDA:189,26,0,0 -BRDA:189,26,1,0 -BRDA:189,27,0,0 -BRDA:189,27,1,0 -BRDA:222,28,0,0 -BRDA:222,28,1,1 -BRDA:223,29,0,1 -BRDA:223,29,1,0 -BRDA:223,29,2,0 -BRDA:230,30,0,1 -BRDA:230,30,1,0 -BRDA:230,31,0,1 -BRDA:230,31,1,1 -BRDA:231,32,0,1 -BRDA:231,32,1,0 -BRDA:237,33,0,0 -BRDA:237,33,1,0 -BRF:70 -BRH:17 -end_of_record diff --git a/node_modules/web3-provider-engine/node_modules/web3/dist/web3-light.js b/node_modules/web3-provider-engine/node_modules/web3/dist/web3-light.js deleted file mode 100644 index a7ff9bb..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/dist/web3-light.js +++ /dev/null @@ -1,13247 +0,0 @@ -require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o. -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - - -},{"./address":4,"./bool":5,"./bytes":6,"./dynamicbytes":8,"./formatters":9,"./int":10,"./real":12,"./string":13,"./uint":15,"./ureal":16}],8:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - - -},{"./formatters":9,"./type":14}],9:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - - -},{"../utils/config":18,"../utils/utils":20,"./param":11,"bignumber.js":"bignumber.js"}],10:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; - -},{"./formatters":9,"./type":14}],11:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - - -},{"../utils/utils":20}],12:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; - -},{"./formatters":9,"./type":14}],13:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - - -},{"./formatters":9,"./type":14}],14:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; - -},{"./formatters":9,"./param":11}],15:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; - -},{"./formatters":9,"./type":14}],16:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; - -},{"./formatters":9,"./type":14}],17:[function(require,module,exports){ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - - -},{}],18:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - - -},{"bignumber.js":"bignumber.js"}],19:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - - -},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; - -},{"./sha3.js":19,"bignumber.js":"bignumber.js","utf8":84}],21:[function(require,module,exports){ -module.exports={ - "version": "0.15.3" -} - -},{}],22:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; -Web3.prototype.sha3 = sha3; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - - -},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46}],23:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - - -},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - - -},{"./errors":26,"./jsonrpc":35}],25:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; - -},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - - -},{}],27:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(require,module,exports){ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - - -},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.filterId); - // remove filter async - this.implementation.uninstallFilter(this.filterId, function(){}); - this.callbacks = []; -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - - -},{"../utils/utils":20,"./formatters":30}],30:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw 'invalid address'; -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - - -},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// meteor server environment -if (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line - XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line - -// browser -} else if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - - -},{"./errors":26,"xmlhttprequest":17}],33:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '00' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - - -},{"bignumber.js":"bignumber.js"}],34:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - - -},{"../utils/utils":20,"./errors":26}],35:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = function () { - // singleton pattern - if (arguments.callee._singletonInstance) { - return arguments.callee._singletonInstance; - } - arguments.callee._singletonInstance = this; - - this.messageId = 1; -}; - -/** - * @return {Jsonrpc} singleton - */ -Jsonrpc.getInstance = function () { - var instance = new Jsonrpc(); - return instance; -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.prototype.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - return { - jsonrpc: '2.0', - method: method, - params: params || [], - id: this.messageId++ - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.prototype.isValidResponse = function (response) { - return !!response && - !response.error && - response.jsonrpc === '2.0' && - typeof response.id === 'number' && - response.result !== undefined; // only undefined is not valid json object -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.prototype.toBatchPayload = function (messages) { - var self = this; - return messages.map(function (message) { - return self.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - - -},{}],36:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - - -},{"../utils/utils":20,"./errors":26}],37:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; - -},{"../method":36}],38:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - - -},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; - -},{"../../utils/utils":20,"../property":44}],40:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [null, null, null] - }); - - return [ - newAccount, - unlockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; - -},{"../method":36,"../property":44}],41:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - - -},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - - -},{"../method":36}],43:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - - -},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - - -},{"../utils/utils":20}],45:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.getInstance().toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.getInstance().isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - - -},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(require,module,exports){ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - - -},{}],47:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - - -},{"../utils/utils":20,"./formatters":30}],48:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - - -},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(require,module,exports){ - -},{}],50:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); -},{"./core":52}],52:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); -},{}],53:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); -},{"./core":52}],54:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); -},{"./core":52}],55:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); -},{"./cipher-core":51,"./core":52}],57:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); -},{"./core":52}],58:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); -},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); -},{"./core":52}],60:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); -},{"./core":52}],61:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); -},{"./cipher-core":51,"./core":52}],62:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); -},{"./cipher-core":51,"./core":52}],63:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); -},{"./cipher-core":51,"./core":52}],64:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); -},{"./cipher-core":51,"./core":52}],65:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); -},{"./cipher-core":51,"./core":52}],66:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); -},{"./cipher-core":51,"./core":52}],67:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); -},{"./cipher-core":51,"./core":52}],68:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); -},{"./cipher-core":51,"./core":52}],69:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); -},{"./cipher-core":51,"./core":52}],70:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); -},{"./cipher-core":51,"./core":52}],71:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); -},{"./core":52}],76:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); -},{"./core":52}],77:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); -},{"./core":52,"./sha256":78}],78:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); -},{"./core":52}],79:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); -},{"./core":52,"./x64-core":83}],80:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); -},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); -},{"./core":52,"./x64-core":83}],82:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); -},{"./core":52}],84:[function(require,module,exports){ -/*! https://mths.be/utf8js v2.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - var byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.0.0', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); - -},{}],"bignumber.js":[function(require,module,exports){ -'use strict'; - -module.exports = BigNumber; // jshint ignore:line - - -},{}],"web3":[function(require,module,exports){ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; - -},{"./lib/web3":22}]},{},["web3"]) -//# sourceMappingURL=web3-light.js.map diff --git a/node_modules/web3-provider-engine/node_modules/web3/dist/web3-light.min.js b/node_modules/web3-provider-engine/node_modules/web3/dist/web3-light.min.js deleted file mode 100644 index bd1dd22..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/dist/web3-light.min.js +++ /dev/null @@ -1,4 +0,0 @@ -require=function t(e,r,n){function o(a,s){if(!r[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=r[a]={exports:{}};e[a][0].call(f.exports,function(t){var r=e[a][1][t];return o(r?r:t)},f,f.exports,t,e,r,n)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;aa;a++)i.push(r.encode(t[a],o));return i}():this._inputFormatter(t,e).encode()},i.prototype.decode=function(t,e,r){var n=this;if(this.isDynamicArray(r))return function(){for(var o=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*o,64)),a=o+32,s=n.nestedName(r),c=n.staticPartLength(s),u=32*Math.floor((c+31)/32),f=[],p=0;i*u>p;p+=u)f.push(n.decode(t,a+p,s));return f}();if(this.isStaticArray(r))return function(){for(var o=n.staticArrayLength(r),i=e,a=n.nestedName(r),s=n.staticPartLength(a),c=32*Math.floor((s+31)/32),u=[],f=0;o*c>f;f+=c)u.push(n.decode(t,i+f,a));return u}();if(this.isDynamicType(r))return function(){var r=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*r,64)),a=Math.floor((i+31)/32);return n._outputFormatter(new o(t.substr(2*r,64*(1+a)),0))}();var i=this.staticPartLength(r);return this._outputFormatter(new o(t.substr(2*e,2*i)))},e.exports=i},{"./formatters":9,"./param":11}],15:[function(t,e,r){var n=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=n.formatInputInt,this._outputFormatter=n.formatOutputUInt};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],16:[function(t,e,r){var n=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=n.formatInputReal,this._outputFormatter=n.formatOutputUReal};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],17:[function(t,e,r){"use strict";"undefined"==typeof XMLHttpRequest?r.XMLHttpRequest={}:r.XMLHttpRequest=XMLHttpRequest},{}],18:[function(t,e,r){var n=t("bignumber.js"),o=["wei","kwei","Mwei","Gwei","szabo","finney","femtoether","picoether","nanoether","microether","milliether","nano","micro","milli","ether","grand","Mether","Gether","Tether","Pether","Eether","Zether","Yether","Nether","Dether","Vether","Uether"];e.exports={ETH_PADDING:32,ETH_SIGNATURE_LENGTH:4,ETH_UNITS:o,ETH_BIGNUMBER_ROUNDING_MODE:{ROUNDING_MODE:n.ROUND_DOWN},ETH_POLLING_TIMEOUT:500,defaultBlock:"latest",defaultAccount:void 0}},{"bignumber.js":"bignumber.js"}],19:[function(t,e,r){var n=t("crypto-js"),o=t("crypto-js/sha3");e.exports=function(t,e){return e&&"hex"===e.encoding&&(t.length>2&&"0x"===t.substr(0,2)&&(t=t.substr(2)),t=n.enc.Hex.parse(t)),o(t,{outputLength:256}).toString()}},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(t,e,r){var n=t("bignumber.js"),o=t("./sha3.js"),i=t("utf8"),a={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"},s=function(t,e,r){return new Array(e-t.length+1).join(r?r:"0")+t},c=function(t,e,r){return t+new Array(e-t.length+1).join(r?r:"0")},u=function(t){var e="",r=0,n=t.length;for("0x"===t.substring(0,2)&&(r=2);n>r;r+=2){var o=parseInt(t.substr(r,2),16);if(0===o)break;e+=String.fromCharCode(o)}return i.decode(e)},f=function(t){var e="",r=0,n=t.length;for("0x"===t.substring(0,2)&&(r=2);n>r;r+=2){var o=parseInt(t.substr(r,2),16);e+=String.fromCharCode(o)}return e},p=function(t){t=i.encode(t);for(var e="",r=0;rr;r++)if(parseInt(e[r],16)>7&&t[r].toUpperCase()!==t[r]||parseInt(e[r],16)<=7&&t[r].toLowerCase()!==t[r])return!1;return!0},A=function(t){if("undefined"==typeof t)return"";t=t.toLowerCase().replace("0x","");for(var e=o(t),r="0x",n=0;n7?t[n].toUpperCase():t[n];return r},F=function(t){return B(t)?t:/^[0-9a-f]{40}$/.test(t)?"0x"+t:"0x"+s(v(t).substr(2),40)},I=function(t){return t instanceof n||t&&t.constructor&&"BigNumber"===t.constructor.name},P=function(t){return"string"==typeof t||t&&t.constructor&&"String"===t.constructor.name},D=function(t){return"function"==typeof t},T=function(t){return"object"==typeof t},O=function(t){return"boolean"==typeof t},M=function(t){return t instanceof Array},E=function(t){try{return!!JSON.parse(t)}catch(e){return!1}};e.exports={padLeft:s,padRight:c,toHex:v,toDecimal:y,fromDecimal:g,toUtf8:u,toAscii:f,fromUtf8:p,fromAscii:h,transformToFullName:l,extractDisplayName:d,extractTypeName:m,toWei:w,fromWei:_,toBigNumber:x,toTwosComplement:k,toAddress:F,isBigNumber:I,isStrictAddress:B,isAddress:S,isChecksumAddress:C,toChecksumAddress:A,isFunction:D,isString:P,isObject:T,isBoolean:O,isArray:M,isJson:E}},{"./sha3.js":19,"bignumber.js":"bignumber.js",utf8:84}],21:[function(t,e,r){e.exports={version:"0.15.3"}},{}],22:[function(t,e,r){function n(t){this._requestManager=new o(t),this.currentProvider=t,this.eth=new a(this),this.db=new s(this),this.shh=new c(this),this.net=new u(this),this.personal=new f(this),this.settings=new p,this.version={api:h.version},this.providers={HttpProvider:v,IpcProvider:b},this._extend=m(this),this._extend({properties:_()})}var o=t("./web3/requestmanager"),i=t("./web3/iban"),a=t("./web3/methods/eth"),s=t("./web3/methods/db"),c=t("./web3/methods/shh"),u=t("./web3/methods/net"),f=t("./web3/methods/personal"),p=t("./web3/settings"),h=t("./version.json"),l=t("./utils/utils"),d=t("./utils/sha3"),m=t("./web3/extend"),y=t("./web3/batch"),g=t("./web3/property"),v=t("./web3/httpprovider"),b=t("./web3/ipcprovider");n.providers={HttpProvider:v,IpcProvider:b},n.prototype.setProvider=function(t){this._requestManager.setProvider(t),this.currentProvider=t},n.prototype.reset=function(t){this._requestManager.reset(t),this.settings=new p},n.prototype.toHex=l.toHex,n.prototype.toAscii=l.toAscii,n.prototype.toUtf8=l.toUtf8,n.prototype.fromAscii=l.fromAscii,n.prototype.fromUtf8=l.fromUtf8,n.prototype.toDecimal=l.toDecimal,n.prototype.fromDecimal=l.fromDecimal,n.prototype.toBigNumber=l.toBigNumber,n.prototype.toWei=l.toWei,n.prototype.fromWei=l.fromWei,n.prototype.isAddress=l.isAddress,n.prototype.isChecksumAddress=l.isChecksumAddress,n.prototype.toChecksumAddress=l.toChecksumAddress,n.prototype.isIBAN=l.isIBAN,n.prototype.sha3=d,n.prototype.fromICAP=function(t){var e=new i(t);return e.address()};var _=function(){return[new g({name:"version.node",getter:"web3_clientVersion"}),new g({name:"version.network",getter:"net_version",inputFormatter:l.toDecimal}),new g({name:"version.ethereum",getter:"eth_protocolVersion",inputFormatter:l.toDecimal}),new g({name:"version.whisper",getter:"shh_version",inputFormatter:l.toDecimal})]};n.prototype.isConnected=function(){return this.currentProvider&&this.currentProvider.isConnected()},n.prototype.createBatch=function(){return new y(this)},e.exports=n},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46}],23:[function(t,e,r){var n=t("../utils/sha3"),o=t("./event"),i=t("./formatters"),a=t("../utils/utils"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,r){this._requestManager=t,this._json=e,this._address=r};u.prototype.encode=function(t){t=t||{};var e={};return["fromBlock","toBlock"].filter(function(e){return void 0!==t[e]}).forEach(function(r){e[r]=i.inputBlockNumberFormatter(t[r])}),e.address=this._address,e},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=t.topics[0].slice(2),r=this._json.filter(function(t){return e===n(a.transformToFullName(t))})[0];if(!r)return console.warn("cannot find event for log"),t;var i=new o(this._requestManager,r,this._address);return i.decode(t)},u.prototype.execute=function(t,e){a.isFunction(arguments[arguments.length-1])&&(e=arguments[arguments.length-1],1===arguments.length&&(t=null));var r=this.encode(t),n=this.decode.bind(this);return new s(this._requestManager,r,c.eth(),n,e)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this);t.allEvents=e},e.exports=u},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(t,e,r){var n=t("./jsonrpc"),o=t("./errors"),i=function(t){this.requestManager=t._requestManager,this.requests=[]};i.prototype.add=function(t){this.requests.push(t)},i.prototype.execute=function(){var t=this.requests;this.requestManager.sendBatch(t,function(e,r){r=r||[],t.map(function(t,e){return r[e]||{}}).forEach(function(e,r){if(t[r].callback){if(!n.getInstance().isValidResponse(e))return t[r].callback(o.InvalidResponse(e));t[r].callback(null,t[r].format?t[r].format(e.result):e.result)}})})},e.exports=i},{"./errors":26,"./jsonrpc":35}],25:[function(t,e,r){var n=t("../utils/utils"),o=t("../solidity/coder"),i=t("./event"),a=t("./function"),s=t("./allevents"),c=function(t,e){return t.filter(function(t){return"constructor"===t.type&&t.inputs.length===e.length}).map(function(t){return t.inputs.map(function(t){return t.type})}).map(function(t){return o.encodeParams(t,e)})[0]||""},u=function(t){t.abi.filter(function(t){return"function"===t.type}).map(function(e){return new a(t._eth,e,t.address)}).forEach(function(e){e.attachToContract(t)})},f=function(t){var e=t.abi.filter(function(t){return"event"===t.type}),r=new s(t._eth._requestManager,e,t.address);r.attachToContract(t),e.map(function(e){return new i(t._eth._requestManager,e,t.address)}).forEach(function(e){e.attachToContract(t)})},p=function(t,e){var r=0,n=!1,o=t._eth.filter("latest",function(i){if(!i&&!n)if(r++,r>50){if(o.stopWatching(),n=!0,!e)throw new Error("Contract transaction couldn't be found after 50 blocks");e(new Error("Contract transaction couldn't be found after 50 blocks"))}else t._eth.getTransactionReceipt(t.transactionHash,function(r,i){i&&!n&&t._eth.getCode(i.contractAddress,function(r,a){if(!n&&a)if(o.stopWatching(),n=!0,a.length>2)t.address=i.contractAddress,u(t),f(t),e&&e(null,t);else{if(!e)throw new Error("The contract code couldn't be stored, please check your gas amount.");e(new Error("The contract code couldn't be stored, please check your gas amount."))}})})})},h=function(t,e){this.eth=t,this.abi=e,this["new"]=function(){var t,e=new l(this.eth,this.abi),r={},o=Array.prototype.slice.call(arguments);n.isFunction(o[o.length-1])&&(t=o.pop());var i=o[o.length-1];n.isObject(i)&&!n.isArray(i)&&(r=o.pop());var a=c(this.abi,o);if(r.data+=a,t)this.eth.sendTransaction(r,function(r,n){r?t(r):(e.transactionHash=n,t(null,e),p(e,t))});else{var s=this.eth.sendTransaction(r);e.transactionHash=s,p(e)}return e},this["new"].getData=this.getData.bind(this)};h.prototype.at=function(t,e){var r=new l(this.eth,this.abi,t);return u(r),f(r),e&&e(null,r),r},h.prototype.getData=function(){var t={},e=Array.prototype.slice.call(arguments),r=e[e.length-1];n.isObject(r)&&!n.isArray(r)&&(t=e.pop());var o=c(this.abi,e);return t.data+=o,t.data};var l=function(t,e,r){this._eth=t,this.transactionHash=null,this.address=r,this.abi=e};e.exports=h},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(t,e,r){e.exports={InvalidNumberOfParams:function(){return new Error("Invalid number of input parameters")},InvalidConnection:function(t){return new Error("CONNECTION ERROR: Couldn't connect to node "+t+".")},InvalidProvider:function(){return new Error("Provider not set or invalid")},InvalidResponse:function(t){var e=t&&t.error&&t.error.message?t.error.message:"Invalid JSON RPC response: "+JSON.stringify(t);return new Error(e)}}},{}],27:[function(t,e,r){var n=t("../utils/utils"),o=t("../solidity/coder"),i=t("./formatters"),a=t("../utils/sha3"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,r){this._requestManager=t,this._params=e.inputs,this._name=n.transformToFullName(e),this._address=r,this._anonymous=e.anonymous};u.prototype.types=function(t){return this._params.filter(function(e){return e.indexed===t}).map(function(t){return t.type})},u.prototype.displayName=function(){return n.extractDisplayName(this._name)},u.prototype.typeName=function(){return n.extractTypeName(this._name)},u.prototype.signature=function(){return a(this._name)},u.prototype.encode=function(t,e){t=t||{},e=e||{};var r={};["fromBlock","toBlock"].filter(function(t){return void 0!==e[t]}).forEach(function(t){r[t]=i.inputBlockNumberFormatter(e[t])}),r.topics=[],r.address=this._address,this._anonymous||r.topics.push("0x"+this.signature());var a=this._params.filter(function(t){return t.indexed===!0}).map(function(e){var r=t[e.name];return void 0===r||null===r?null:n.isArray(r)?r.map(function(t){return"0x"+o.encodeParam(e.type,t)}):"0x"+o.encodeParam(e.type,r)});return r.topics=r.topics.concat(a),r},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=this._anonymous?t.topics:t.topics.slice(1),r=e.map(function(t){return t.slice(2)}).join(""),n=o.decodeParams(this.types(!0),r),a=t.data.slice(2),s=o.decodeParams(this.types(!1),a),c=i.outputLogFormatter(t);return c.event=this.displayName(),c.address=t.address,c.args=this._params.reduce(function(t,e){return t[e.name]=e.indexed?n.shift():s.shift(),t},{}),delete c.data,delete c.topics,c},u.prototype.execute=function(t,e,r){n.isFunction(arguments[arguments.length-1])&&(r=arguments[arguments.length-1],2===arguments.length&&(e=null),1===arguments.length&&(e=null,t={}));var o=this.encode(t,e),i=this.decode.bind(this);return new s(this._requestManager,o,c.eth(),i,r)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this),r=this.displayName();t[r]||(t[r]=e),t[r][this.typeName()]=this.execute.bind(this,t)},e.exports=u},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(t,e,r){var n=t("./formatters"),o=t("./../utils/utils"),i=t("./method"),a=t("./property"),s=function(t){var e=function(e){var r;e.property?(t[e.property]||(t[e.property]={}),r=t[e.property]):r=t,e.methods&&e.methods.forEach(function(e){e.attachToObject(r),e.setRequestManager(t._requestManager)}),e.properties&&e.properties.forEach(function(e){e.attachToObject(r),e.setRequestManager(t._requestManager)})};return e.formatters=n,e.utils=o,e.Method=i,e.Property=a,e};e.exports=s},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(t,e,r){var n=t("./formatters"),o=t("../utils/utils"),i=function(t){return null===t||"undefined"==typeof t?null:(t=String(t),0===t.indexOf("0x")?t:o.fromUtf8(t))},a=function(t){return o.isString(t)?t:(t=t||{},t.topics=t.topics||[],t.topics=t.topics.map(function(t){return o.isArray(t)?t.map(i):i(t)}),{topics:t.topics,from:t.from,to:t.to,address:t.address,fromBlock:n.inputBlockNumberFormatter(t.fromBlock),toBlock:n.inputBlockNumberFormatter(t.toBlock)})},s=function(t,e){o.isString(t.options)||t.get(function(t,r){t&&e(t),o.isArray(r)&&r.forEach(function(t){e(null,t)})})},c=function(t){var e=function(e,r){return e?t.callbacks.forEach(function(t){t(e)}):void(o.isArray(r)&&r.forEach(function(e){e=t.formatter?t.formatter(e):e,t.callbacks.forEach(function(t){t(null,e)})}))};t.requestManager.startPolling({method:t.implementation.poll.call,params:[t.filterId]},t.filterId,e,t.stopWatching.bind(t))},u=function(t,e,r,n,o){var i=this,u={};return r.forEach(function(e){e.setRequestManager(t),e.attachToObject(u)}),this.requestManager=t,this.options=a(e),this.implementation=u,this.filterId=null,this.callbacks=[],this.getLogsCallbacks=[], -this.pollFilters=[],this.formatter=n,this.implementation.newFilter(this.options,function(t,e){if(t)i.callbacks.forEach(function(e){e(t)});else if(i.filterId=e,i.getLogsCallbacks.forEach(function(t){i.get(t)}),i.getLogsCallbacks=[],i.callbacks.forEach(function(t){s(i,t)}),i.callbacks.length>0&&c(i),"function"==typeof o)return i.watch(o)}),this};u.prototype.watch=function(t){return this.callbacks.push(t),this.filterId&&(s(this,t),c(this)),this},u.prototype.stopWatching=function(){this.requestManager.stopPolling(this.filterId),this.implementation.uninstallFilter(this.filterId,function(){}),this.callbacks=[]},u.prototype.get=function(t){var e=this;if(!o.isFunction(t)){if(null===this.filterId)throw new Error("Filter ID Error: filter().get() can't be chained synchronous, please provide a callback for the get() method.");var r=this.implementation.getLogs(this.filterId);return r.map(function(t){return e.formatter?e.formatter(t):t})}return null===this.filterId?this.getLogsCallbacks.push(t):this.implementation.getLogs(this.filterId,function(r,n){r?t(r):t(null,n.map(function(t){return e.formatter?e.formatter(t):t}))}),this},e.exports=u},{"../utils/utils":20,"./formatters":30}],30:[function(t,e,r){var n=t("../utils/utils"),o=t("../utils/config"),i=t("./iban"),a=function(t){return n.toBigNumber(t)},s=function(t){return"latest"===t||"pending"===t||"earliest"===t},c=function(t){return void 0===t?o.defaultBlock:u(t)},u=function(t){return void 0===t?void 0:s(t)?t:n.toHex(t)},f=function(t){return t.from=t.from||o.defaultAccount,t.from&&(t.from=v(t.from)),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=n.fromDecimal(t[e])}),t},p=function(t){return t.from=t.from||o.defaultAccount,t.from=v(t.from),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=n.fromDecimal(t[e])}),t},h=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),t.nonce=n.toDecimal(t.nonce),t.gas=n.toDecimal(t.gas),t.gasPrice=n.toBigNumber(t.gasPrice),t.value=n.toBigNumber(t.value),t},l=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),t.cumulativeGasUsed=n.toDecimal(t.cumulativeGasUsed),t.gasUsed=n.toDecimal(t.gasUsed),n.isArray(t.logs)&&(t.logs=t.logs.map(function(t){return m(t)})),t},d=function(t){return t.gasLimit=n.toDecimal(t.gasLimit),t.gasUsed=n.toDecimal(t.gasUsed),t.size=n.toDecimal(t.size),t.timestamp=n.toDecimal(t.timestamp),null!==t.number&&(t.number=n.toDecimal(t.number)),t.difficulty=n.toBigNumber(t.difficulty),t.totalDifficulty=n.toBigNumber(t.totalDifficulty),n.isArray(t.transactions)&&t.transactions.forEach(function(t){return n.isString(t)?void 0:h(t)}),t},m=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),null!==t.logIndex&&(t.logIndex=n.toDecimal(t.logIndex)),t},y=function(t){return t.ttl=n.fromDecimal(t.ttl),t.workToProve=n.fromDecimal(t.workToProve),t.priority=n.fromDecimal(t.priority),n.isArray(t.topics)||(t.topics=t.topics?[t.topics]:[]),t.topics=t.topics.map(function(t){return 0===t.indexOf("0x")?t:n.fromUtf8(t)}),t},g=function(t){return t.expiry=n.toDecimal(t.expiry),t.sent=n.toDecimal(t.sent),t.ttl=n.toDecimal(t.ttl),t.workProved=n.toDecimal(t.workProved),t.topics||(t.topics=[]),t.topics=t.topics.map(function(t){return n.toAscii(t)}),t},v=function(t){var e=new i(t);if(e.isValid()&&e.isDirect())return"0x"+e.address();if(n.isStrictAddress(t))return t;if(n.isAddress(t))return"0x"+t;throw"invalid address"},b=function(t){return t.startingBlock=n.toDecimal(t.startingBlock),t.currentBlock=n.toDecimal(t.currentBlock),t.highestBlock=n.toDecimal(t.highestBlock),t};e.exports={inputDefaultBlockNumberFormatter:c,inputBlockNumberFormatter:u,inputCallFormatter:f,inputTransactionFormatter:p,inputAddressFormatter:v,inputPostFormatter:y,outputBigNumberFormatter:a,outputTransactionFormatter:h,outputTransactionReceiptFormatter:l,outputBlockFormatter:d,outputLogFormatter:m,outputPostFormatter:g,outputSyncingFormatter:b}},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(t,e,r){var n=t("../solidity/coder"),o=t("../utils/utils"),i=t("./formatters"),a=t("../utils/sha3"),s=function(t,e,r){this._eth=t,this._inputTypes=e.inputs.map(function(t){return t.type}),this._outputTypes=e.outputs.map(function(t){return t.type}),this._constant=e.constant,this._name=o.transformToFullName(e),this._address=r};s.prototype.extractCallback=function(t){return o.isFunction(t[t.length-1])?t.pop():void 0},s.prototype.extractDefaultBlock=function(t){return t.length>this._inputTypes.length&&!o.isObject(t[t.length-1])?i.inputDefaultBlockNumberFormatter(t.pop()):void 0},s.prototype.toPayload=function(t){var e={};return t.length>this._inputTypes.length&&o.isObject(t[t.length-1])&&(e=t[t.length-1]),e.to=this._address,e.data="0x"+this.signature()+n.encodeParams(this._inputTypes,t),e},s.prototype.signature=function(){return a(this._name).slice(0,8)},s.prototype.unpackOutput=function(t){if(t){t=t.length>=2?t.slice(2):t;var e=n.decodeParams(this._outputTypes,t);return 1===e.length?e[0]:e}},s.prototype.call=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),r=this.extractDefaultBlock(t),n=this.toPayload(t);if(!e){var o=this._eth.call(n,r);return this.unpackOutput(o)}var i=this;this._eth.call(n,r,function(t,r){e(t,i.unpackOutput(r))})},s.prototype.sendTransaction=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),r=this.toPayload(t);return e?void this._eth.sendTransaction(r,e):this._eth.sendTransaction(r)},s.prototype.estimateGas=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),r=this.toPayload(t);return e?void this._eth.estimateGas(r,e):this._eth.estimateGas(r)},s.prototype.getData=function(){var t=Array.prototype.slice.call(arguments),e=this.toPayload(t);return e.data},s.prototype.displayName=function(){return o.extractDisplayName(this._name)},s.prototype.typeName=function(){return o.extractTypeName(this._name)},s.prototype.request=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),r=this.toPayload(t),n=this.unpackOutput.bind(this);return{method:this._constant?"eth_call":"eth_sendTransaction",callback:e,params:[r],format:n}},s.prototype.execute=function(){var t=!this._constant;return t?this.sendTransaction.apply(this,Array.prototype.slice.call(arguments)):this.call.apply(this,Array.prototype.slice.call(arguments))},s.prototype.attachToContract=function(t){var e=this.execute.bind(this);e.request=this.request.bind(this),e.call=this.call.bind(this),e.sendTransaction=this.sendTransaction.bind(this),e.estimateGas=this.estimateGas.bind(this),e.getData=this.getData.bind(this);var r=this.displayName();t[r]||(t[r]=e),t[r][this.typeName()]=e},e.exports=s},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(t,e,r){"use strict";var n,o=t("./errors");n="undefined"!=typeof Meteor&&Meteor.isServer?Npm.require("xmlhttprequest").XMLHttpRequest:"undefined"!=typeof window&&window.XMLHttpRequest?window.XMLHttpRequest:t("xmlhttprequest").XMLHttpRequest;var i=function(t){this.host=t||"http://localhost:8545"};i.prototype.prepareRequest=function(t){var e=new n;return e.open("POST",this.host,t),e.setRequestHeader("Content-Type","application/json"),e},i.prototype.send=function(t){var e=this.prepareRequest(!1);try{e.send(JSON.stringify(t))}catch(r){throw o.InvalidConnection(this.host)}var n=e.responseText;try{n=JSON.parse(n)}catch(i){throw o.InvalidResponse(e.responseText)}return n},i.prototype.sendAsync=function(t,e){var r=this.prepareRequest(!0);r.onreadystatechange=function(){if(4===r.readyState){var t=r.responseText,n=null;try{t=JSON.parse(t)}catch(i){n=o.InvalidResponse(r.responseText)}e(n,t)}};try{r.send(JSON.stringify(t))}catch(n){e(o.InvalidConnection(this.host))}},i.prototype.isConnected=function(){try{return this.send({id:9999999999,jsonrpc:"2.0",method:"net_listening",params:[]}),!0}catch(t){return!1}},e.exports=i},{"./errors":26,xmlhttprequest:17}],33:[function(t,e,r){var n=t("bignumber.js"),o=function(t,e){for(var r=t;r.length<2*e;)r="00"+r;return r},i=function(t){var e="A".charCodeAt(0),r="Z".charCodeAt(0);return t=t.toUpperCase(),t=t.substr(4)+t.substr(0,4),t.split("").map(function(t){var n=t.charCodeAt(0);return n>=e&&r>=n?n-e+10:t}).join("")},a=function(t){for(var e,r=t;r.length>2;)e=r.slice(0,9),r=parseInt(e,10)%97+r.slice(e.length);return parseInt(r,10)%97},s=function(t){this._iban=t};s.fromAddress=function(t){var e=new n(t,16),r=e.toString(36),i=o(r,15);return s.fromBban(i.toUpperCase())},s.fromBban=function(t){var e="XE",r=a(i(e+"00"+t)),n=("0"+(98-r)).slice(-2);return new s(e+n+t)},s.createIndirect=function(t){return s.fromBban("ETH"+t.institution+t.identifier)},s.isValid=function(t){var e=new s(t);return e.isValid()},s.prototype.isValid=function(){return/^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban)&&1===a(i(this._iban))},s.prototype.isDirect=function(){return 34===this._iban.length||35===this._iban.length},s.prototype.isIndirect=function(){return 20===this._iban.length},s.prototype.checksum=function(){return this._iban.substr(2,2)},s.prototype.institution=function(){return this.isIndirect()?this._iban.substr(7,4):""},s.prototype.client=function(){return this.isIndirect()?this._iban.substr(11):""},s.prototype.address=function(){if(this.isDirect()){var t=this._iban.substr(4),e=new n(t,36);return o(e.toString(16),20)}return""},s.prototype.toString=function(){return this._iban},e.exports=s},{"bignumber.js":"bignumber.js"}],34:[function(t,e,r){"use strict";var n=t("../utils/utils"),o=t("./errors"),i=function(t,e){var r=this;this.responseCallbacks={},this.path=t,this.connection=e.connect({path:this.path}),this.connection.on("error",function(t){console.error("IPC Connection Error",t),r._timeout()}),this.connection.on("end",function(){r._timeout()}),this.connection.on("data",function(t){r._parseResponse(t.toString()).forEach(function(t){var e=null;n.isArray(t)?t.forEach(function(t){r.responseCallbacks[t.id]&&(e=t.id)}):e=t.id,r.responseCallbacks[e]&&(r.responseCallbacks[e](null,t),delete r.responseCallbacks[e])})})};i.prototype._parseResponse=function(t){var e=this,r=[],n=t.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|");return n.forEach(function(t){e.lastChunk&&(t=e.lastChunk+t);var n=null;try{n=JSON.parse(t)}catch(i){return e.lastChunk=t,clearTimeout(e.lastChunkTimeout),void(e.lastChunkTimeout=setTimeout(function(){throw e._timeout(),o.InvalidResponse(t)},15e3))}clearTimeout(e.lastChunkTimeout),e.lastChunk=null,n&&r.push(n)}),r},i.prototype._addResponseCallback=function(t,e){var r=t.id||t[0].id,n=t.method||t[0].method;this.responseCallbacks[r]=e,this.responseCallbacks[r].method=n},i.prototype._timeout=function(){for(var t in this.responseCallbacks)this.responseCallbacks.hasOwnProperty(t)&&(this.responseCallbacks[t](o.InvalidConnection("on IPC")),delete this.responseCallbacks[t])},i.prototype.isConnected=function(){var t=this;return t.connection.writable||t.connection.connect({path:t.path}),!!this.connection.writable},i.prototype.send=function(t){if(this.connection.writeSync){var e;this.connection.writable||this.connection.connect({path:this.path});var r=this.connection.writeSync(JSON.stringify(t));try{e=JSON.parse(r)}catch(n){throw o.InvalidResponse(r)}return e}throw new Error('You tried to send "'+t.method+'" synchronously. Synchronous requests are not supported by the IPC provider.')},i.prototype.sendAsync=function(t,e){this.connection.writable||this.connection.connect({path:this.path}),this.connection.write(JSON.stringify(t)),this._addResponseCallback(t,e)},e.exports=i},{"../utils/utils":20,"./errors":26}],35:[function(t,e,r){var n=function(){return arguments.callee._singletonInstance?arguments.callee._singletonInstance:(arguments.callee._singletonInstance=this,void(this.messageId=1))};n.getInstance=function(){var t=new n;return t},n.prototype.toPayload=function(t,e){return t||console.error("jsonrpc method should be specified!"),{jsonrpc:"2.0",method:t,params:e||[],id:this.messageId++}},n.prototype.isValidResponse=function(t){return!!t&&!t.error&&"2.0"===t.jsonrpc&&"number"==typeof t.id&&void 0!==t.result},n.prototype.toBatchPayload=function(t){var e=this;return t.map(function(t){return e.toPayload(t.method,t.params)})},e.exports=n},{}],36:[function(t,e,r){var n=t("../utils/utils"),o=t("./errors"),i=function(t){this.name=t.name,this.call=t.call,this.params=t.params||0,this.inputFormatter=t.inputFormatter,this.outputFormatter=t.outputFormatter,this.requestManager=null};i.prototype.setRequestManager=function(t){this.requestManager=t},i.prototype.getCall=function(t){return n.isFunction(this.call)?this.call(t):this.call},i.prototype.extractCallback=function(t){return n.isFunction(t[t.length-1])?t.pop():void 0},i.prototype.validateArgs=function(t){if(t.length!==this.params)throw o.InvalidNumberOfParams()},i.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter.map(function(e,r){return e?e(t[r]):t[r]}):t},i.prototype.formatOutput=function(t){return this.outputFormatter&&t?this.outputFormatter(t):t},i.prototype.toPayload=function(t){var e=this.getCall(t),r=this.extractCallback(t),n=this.formatInput(t);return this.validateArgs(n),{method:e,params:n,callback:r}},i.prototype.attachToObject=function(t){var e=this.buildCall();e.call=this.call;var r=this.name.split(".");r.length>1?(t[r[0]]=t[r[0]]||{},t[r[0]][r[1]]=e):t[r[0]]=e},i.prototype.buildCall=function(){var t=this,e=function(){var e=t.toPayload(Array.prototype.slice.call(arguments));return e.callback?t.requestManager.sendAsync(e,function(r,n){e.callback(r,t.formatOutput(n))}):t.formatOutput(t.requestManager.send(e))};return e.request=this.request.bind(this),e},i.prototype.request=function(){var t=this.toPayload(Array.prototype.slice.call(arguments));return t.format=this.formatOutput.bind(this),t},e.exports=i},{"../utils/utils":20,"./errors":26}],37:[function(t,e,r){var n=t("../method"),o=function(t){this._requestManager=t._requestManager;var e=this;i().forEach(function(r){r.attachToObject(e),r.setRequestManager(t._requestManager)})},i=function(){var t=new n({name:"putString",call:"db_putString",params:3}),e=new n({name:"getString",call:"db_getString",params:2}),r=new n({name:"putHex",call:"db_putHex",params:3}),o=new n({name:"getHex",call:"db_getHex",params:2});return[t,e,r,o]};e.exports=o},{"../method":36}],38:[function(t,e,r){"use strict";function n(t){this._requestManager=t._requestManager;var e=this;w().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),x().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),this.iban=d,this.sendIBANTransaction=m.bind(null,this)}var o=t("../formatters"),i=t("../../utils/utils"),a=t("../method"),s=t("../property"),c=t("../../utils/config"),u=t("../contract"),f=t("./watches"),p=t("../filter"),h=t("../syncing"),l=t("../namereg"),d=t("../iban"),m=t("../transfer"),y=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockByHash":"eth_getBlockByNumber"},g=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getTransactionByBlockHashAndIndex":"eth_getTransactionByBlockNumberAndIndex"},v=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleByBlockHashAndIndex":"eth_getUncleByBlockNumberAndIndex"},b=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockTransactionCountByHash":"eth_getBlockTransactionCountByNumber"},_=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleCountByBlockHash":"eth_getUncleCountByBlockNumber"};Object.defineProperty(n.prototype,"defaultBlock",{get:function(){return c.defaultBlock},set:function(t){return c.defaultBlock=t,t}}),Object.defineProperty(n.prototype,"defaultAccount",{get:function(){return c.defaultAccount},set:function(t){return c.defaultAccount=t,t}});var w=function(){var t=new a({name:"getBalance",call:"eth_getBalance",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter],outputFormatter:o.outputBigNumberFormatter}),e=new a({name:"getStorageAt",call:"eth_getStorageAt",params:3,inputFormatter:[null,i.toHex,o.inputDefaultBlockNumberFormatter]}),r=new a({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter]}),n=new a({name:"getBlock",call:y,params:2,inputFormatter:[o.inputBlockNumberFormatter,function(t){return!!t}],outputFormatter:o.outputBlockFormatter}),s=new a({name:"getUncle",call:v,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputBlockFormatter}),c=new a({name:"getCompilers",call:"eth_getCompilers",params:0}),u=new a({name:"getBlockTransactionCount",call:b,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),f=new a({name:"getBlockUncleCount",call:_,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),p=new a({name:"getTransaction",call:"eth_getTransactionByHash",params:1,outputFormatter:o.outputTransactionFormatter}),h=new a({name:"getTransactionFromBlock",call:g,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputTransactionFormatter}),l=new a({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,outputFormatter:o.outputTransactionReceiptFormatter}),d=new a({name:"getTransactionCount",call:"eth_getTransactionCount",params:2,inputFormatter:[null,o.inputDefaultBlockNumberFormatter],outputFormatter:i.toDecimal}),m=new a({name:"sendRawTransaction",call:"eth_sendRawTransaction",params:1,inputFormatter:[null]}),w=new a({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[o.inputTransactionFormatter]}),x=new a({name:"sign",call:"eth_sign",params:2,inputFormatter:[o.inputAddressFormatter,null]}),k=new a({name:"call",call:"eth_call",params:2,inputFormatter:[o.inputCallFormatter,o.inputDefaultBlockNumberFormatter]}),B=new a({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[o.inputCallFormatter],outputFormatter:i.toDecimal}),S=new a({name:"compile.solidity",call:"eth_compileSolidity",params:1}),C=new a({name:"compile.lll",call:"eth_compileLLL",params:1}),A=new a({name:"compile.serpent",call:"eth_compileSerpent",params:1}),F=new a({name:"submitWork",call:"eth_submitWork",params:3}),I=new a({name:"getWork",call:"eth_getWork",params:0});return[t,e,r,n,s,c,u,f,p,h,l,d,k,B,m,w,x,S,C,A,F,I]},x=function(){return[new s({name:"coinbase",getter:"eth_coinbase"}),new s({name:"mining",getter:"eth_mining"}),new s({name:"hashrate",getter:"eth_hashrate",outputFormatter:i.toDecimal}),new s({name:"syncing",getter:"eth_syncing",outputFormatter:o.outputSyncingFormatter}),new s({name:"gasPrice",getter:"eth_gasPrice",outputFormatter:o.outputBigNumberFormatter}),new s({name:"accounts",getter:"eth_accounts"}),new s({name:"blockNumber",getter:"eth_blockNumber",outputFormatter:i.toDecimal})]};n.prototype.contract=function(t){var e=new u(this,t);return e},n.prototype.filter=function(t,e){return new p(this._requestManager,t,f.eth(),o.outputLogFormatter,e)},n.prototype.namereg=function(){return this.contract(l.global.abi).at(l.global.address)},n.prototype.icapNamereg=function(){return this.contract(l.icap.abi).at(l.icap.address)},n.prototype.isSyncing=function(t){return new h(this._requestManager,t)},e.exports=n},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(t,e,r){var n=t("../../utils/utils"),o=t("../property"),i=function(t){this._requestManager=t._requestManager;var e=this;a().forEach(function(r){r.attachToObject(e),r.setRequestManager(t._requestManager)})},a=function(){return[new o({name:"listening",getter:"net_listening"}),new o({name:"peerCount",getter:"net_peerCount",outputFormatter:n.toDecimal})]};e.exports=i},{"../../utils/utils":20,"../property":44}],40:[function(t,e,r){"use strict";function n(t){this._requestManager=t._requestManager;var e=this;a().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),s().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})}var o=t("../method"),i=t("../property"),a=function(){var t=new o({name:"newAccount",call:"personal_newAccount",params:1,inputFormatter:[null]}),e=new o({name:"unlockAccount",call:"personal_unlockAccount",params:3,inputFormatter:[null,null,null]});return[t,e]},s=function(){return[new i({name:"listAccounts",getter:"personal_listAccounts"})]};e.exports=n},{"../method":36,"../property":44}],41:[function(t,e,r){var n=t("../method"),o=t("../formatters"),i=t("../filter"),a=t("./watches"),s=function(t){this._requestManager=t._requestManager;var e=this;c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})};s.prototype.filter=function(t,e){return new i(this._requestManager,t,a.shh(),o.outputPostFormatter,e)};var c=function(){var t=new n({name:"post",call:"shh_post",params:1,inputFormatter:[o.inputPostFormatter]}),e=new n({name:"newIdentity",call:"shh_newIdentity",params:0}),r=new n({name:"hasIdentity",call:"shh_hasIdentity",params:1}),i=new n({name:"newGroup",call:"shh_newGroup",params:0}),a=new n({name:"addToGroup",call:"shh_addToGroup",params:0});return[t,e,r,i,a]};e.exports=s},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(t,e,r){var n=t("../method"),o=function(){var t=function(t){var e=t[0];switch(e){case"latest":return t.shift(),this.params=0,"eth_newBlockFilter";case"pending":return t.shift(),this.params=0,"eth_newPendingTransactionFilter";default:return"eth_newFilter"}},e=new n({name:"newFilter",call:t,params:1}),r=new n({name:"uninstallFilter",call:"eth_uninstallFilter",params:1}),o=new n({name:"getLogs",call:"eth_getFilterLogs",params:1}),i=new n({name:"poll",call:"eth_getFilterChanges",params:1});return[e,r,o,i]},i=function(){var t=new n({name:"newFilter",call:"shh_newFilter",params:1}),e=new n({name:"uninstallFilter",call:"shh_uninstallFilter",params:1}),r=new n({name:"getLogs",call:"shh_getMessages",params:1}),o=new n({name:"poll",call:"shh_getFilterChanges",params:1});return[t,e,r,o]};e.exports={eth:o,shh:i}},{"../method":36}],43:[function(t,e,r){var n=t("../contracts/GlobalRegistrar.json"),o=t("../contracts/ICAPRegistrar.json"),i="0xc6d9d2cd449a754c494264e1809c50e34d64562b",a="0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00";e.exports={global:{abi:n,address:i},icap:{abi:o,address:a}}},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(t,e,r){var n=t("../utils/utils"),o=function(t){this.name=t.name,this.getter=t.getter,this.setter=t.setter,this.outputFormatter=t.outputFormatter,this.inputFormatter=t.inputFormatter,this.requestManager=null};o.prototype.setRequestManager=function(t){this.requestManager=t},o.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter(t):t},o.prototype.formatOutput=function(t){return this.outputFormatter&&null!==t?this.outputFormatter(t):t},o.prototype.extractCallback=function(t){return n.isFunction(t[t.length-1])?t.pop():void 0},o.prototype.attachToObject=function(t){var e={get:this.buildGet(),enumerable:!0},r=this.name.split("."),n=r[0];r.length>1&&(t[r[0]]=t[r[0]]||{},t=t[r[0]],n=r[1]),Object.defineProperty(t,n,e),t[i(n)]=this.buildAsyncGet()};var i=function(t){return"get"+t.charAt(0).toUpperCase()+t.slice(1)};o.prototype.buildGet=function(){var t=this;return function(){return t.formatOutput(t.requestManager.send({method:t.getter}))}},o.prototype.buildAsyncGet=function(){var t=this,e=function(e){t.requestManager.sendAsync({method:t.getter},function(r,n){e(r,t.formatOutput(n))})};return e.request=this.request.bind(this),e},o.prototype.request=function(){var t={method:this.getter,params:[],callback:this.extractCallback(Array.prototype.slice.call(arguments))};return t.format=this.formatOutput.bind(this),t},e.exports=o},{"../utils/utils":20}],45:[function(t,e,r){var n=t("./jsonrpc"),o=t("../utils/utils"),i=t("../utils/config"),a=t("./errors"),s=function(t){this.provider=t,this.polls={},this.timeout=null};s.prototype.send=function(t){if(!this.provider)return console.error(a.InvalidProvider()),null;var e=n.getInstance().toPayload(t.method,t.params),r=this.provider.send(e);if(!n.getInstance().isValidResponse(r))throw a.InvalidResponse(r);return r.result},s.prototype.sendAsync=function(t,e){if(!this.provider)return e(a.InvalidProvider());var r=n.getInstance().toPayload(t.method,t.params);this.provider.sendAsync(r,function(t,r){return t?e(t):n.getInstance().isValidResponse(r)?void e(null,r.result):e(a.InvalidResponse(r))})},s.prototype.sendBatch=function(t,e){if(!this.provider)return e(a.InvalidProvider());var r=n.getInstance().toBatchPayload(t);this.provider.sendAsync(r,function(t,r){return t?e(t):o.isArray(r)?void e(t,r):e(a.InvalidResponse(r))})},s.prototype.setProvider=function(t){this.provider=t},s.prototype.startPolling=function(t,e,r,n){this.polls[e]={data:t,id:e,callback:r,uninstall:n},this.timeout||this.poll()},s.prototype.stopPolling=function(t){delete this.polls[t],0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.reset=function(t){for(var e in this.polls)t&&-1!==e.indexOf("syncPoll_")||(this.polls[e].uninstall(),delete this.polls[e]);0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.poll=function(){if(this.timeout=setTimeout(this.poll.bind(this),i.ETH_POLLING_TIMEOUT),0!==Object.keys(this.polls).length){if(!this.provider)return void console.error(a.InvalidProvider());var t=[],e=[];for(var r in this.polls)t.push(this.polls[r].data),e.push(r);if(0!==t.length){var s=n.getInstance().toBatchPayload(t),c={};s.forEach(function(t,r){c[t.id]=e[r]});var u=this;this.provider.sendAsync(s,function(t,e){if(!t){if(!o.isArray(e))throw a.InvalidResponse(e);e.map(function(t){var e=c[t.id];return u.polls[e]?(t.callback=u.polls[e].callback,t):!1}).filter(function(t){return!!t}).filter(function(t){var e=n.getInstance().isValidResponse(t);return e||t.callback(a.InvalidResponse(t)),e}).forEach(function(t){t.callback(null,t.result)})}})}}},e.exports=s},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(t,e,r){var n=function(){this.defaultBlock="latest",this.defaultAccount=void 0};e.exports=n},{}],47:[function(t,e,r){var n=t("./formatters"),o=t("../utils/utils"),i=1,a=function(t){var e=function(e,r){return e?t.callbacks.forEach(function(t){t(e)}):(o.isObject(r)&&r.startingBlock&&(r=n.outputSyncingFormatter(r)),void t.callbacks.forEach(function(e){t.lastSyncState!==r&&(!t.lastSyncState&&o.isObject(r)&&e(null,!0),setTimeout(function(){e(null,r)},0),t.lastSyncState=r)}))};t.requestManager.startPolling({method:"eth_syncing",params:[]},t.pollId,e,t.stopWatching.bind(t))},s=function(t,e){return this.requestManager=t,this.pollId="syncPoll_"+i++,this.callbacks=[],this.addCallback(e),this.lastSyncState=!1,a(this),this};s.prototype.addCallback=function(t){return t&&this.callbacks.push(t),this},s.prototype.stopWatching=function(){this.requestManager.stopPolling(this.pollId),this.callbacks=[]},e.exports=s},{"../utils/utils":20,"./formatters":30}],48:[function(t,e,r){var n=t("./iban"),o=t("../contracts/SmartExchange.json"),i=function(t,e,r,o,i){var c=new n(r);if(!c.isValid())throw new Error("invalid iban address");if(c.isDirect())return a(t,e,c.address(),o,i);if(!i){var u=t.icapNamereg().addr(c.institution());return s(t,e,u,o,c.client())}t.icapNamereg().addr(c.institution(),function(r,n){return s(t,e,n,o,c.client(),i)})},a=function(t,e,r,n,o){return t.sendTransaction({address:r,from:e,value:n},o)},s=function(t,e,r,n,i,a){var s=o;return t.contract(s).at(r).deposit(i,{from:e,value:n},a)};e.exports=i},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(t,e,r){},{}],50:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.BlockCipher,o=e.algo,i=[],a=[],s=[],c=[],u=[],f=[],p=[],h=[],l=[],d=[];!function(){for(var t=[],e=0;256>e;e++)128>e?t[e]=e<<1:t[e]=e<<1^283;for(var r=0,n=0,e=0;256>e;e++){var o=n^n<<1^n<<2^n<<3^n<<4;o=o>>>8^255&o^99,i[r]=o,a[o]=r;var m=t[r],y=t[m],g=t[y],v=257*t[o]^16843008*o;s[r]=v<<24|v>>>8,c[r]=v<<16|v>>>16,u[r]=v<<8|v>>>24,f[r]=v;var v=16843009*g^65537*y^257*m^16843008*r;p[o]=v<<24|v>>>8,h[o]=v<<16|v>>>16,l[o]=v<<8|v>>>24,d[o]=v,r?(r=m^t[t[t[g^m]]],n^=t[t[n]]):r=n=1}}();var m=[0,1,2,4,8,16,32,64,128,27,54],y=o.AES=n.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes/4,n=this._nRounds=r+6,o=4*(n+1),a=this._keySchedule=[],s=0;o>s;s++)if(r>s)a[s]=e[s];else{var c=a[s-1];s%r?r>6&&s%r==4&&(c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c]):(c=c<<8|c>>>24,c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c],c^=m[s/r|0]<<24),a[s]=a[s-r]^c}for(var u=this._invKeySchedule=[],f=0;o>f;f++){var s=o-f;if(f%4)var c=a[s];else var c=a[s-4];4>f||4>=s?u[f]=c:u[f]=p[i[c>>>24]]^h[i[c>>>16&255]]^l[i[c>>>8&255]]^d[i[255&c]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,c,u,f,i)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,p,h,l,d,a);var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,o,i,a,s){for(var c=this._nRounds,u=t[e]^r[0],f=t[e+1]^r[1],p=t[e+2]^r[2],h=t[e+3]^r[3],l=4,d=1;c>d;d++){var m=n[u>>>24]^o[f>>>16&255]^i[p>>>8&255]^a[255&h]^r[l++],y=n[f>>>24]^o[p>>>16&255]^i[h>>>8&255]^a[255&u]^r[l++],g=n[p>>>24]^o[h>>>16&255]^i[u>>>8&255]^a[255&f]^r[l++],v=n[h>>>24]^o[u>>>16&255]^i[f>>>8&255]^a[255&p]^r[l++];u=m,f=y,p=g,h=v}var m=(s[u>>>24]<<24|s[f>>>16&255]<<16|s[p>>>8&255]<<8|s[255&h])^r[l++],y=(s[f>>>24]<<24|s[p>>>16&255]<<16|s[h>>>8&255]<<8|s[255&u])^r[l++],g=(s[p>>>24]<<24|s[h>>>16&255]<<16|s[u>>>8&255]<<8|s[255&f])^r[l++],v=(s[h>>>24]<<24|s[u>>>16&255]<<16|s[f>>>8&255]<<8|s[255&p])^r[l++];t[e]=m,t[e+1]=y,t[e+2]=g,t[e+3]=v},keySize:8});e.AES=n._createHelper(y)}(),t.AES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){t.lib.Cipher||function(e){var r=t,n=r.lib,o=n.Base,i=n.WordArray,a=n.BufferedBlockAlgorithm,s=r.enc,c=(s.Utf8,s.Base64),u=r.algo,f=u.EvpKDF,p=n.Cipher=a.extend({cfg:o.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?k:_}return function(e){return{encrypt:function(r,n,o){return t(n).encrypt(e,r,n,o)},decrypt:function(r,n,o){return t(n).decrypt(e,r,n,o)}}}}()}),h=(n.StreamCipher=p.extend({_doFinalize:function(){ -var t=this._process(!0);return t},blockSize:1}),r.mode={}),l=n.BlockCipherMode=o.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),d=h.CBC=function(){function t(t,r,n){var o=this._iv;if(o){var i=o;this._iv=e}else var i=this._prevBlock;for(var a=0;n>a;a++)t[r+a]^=i[a]}var r=l.extend();return r.Encryptor=r.extend({processBlock:function(e,r){var n=this._cipher,o=n.blockSize;t.call(this,e,r,o),n.encryptBlock(e,r),this._prevBlock=e.slice(r,r+o)}}),r.Decryptor=r.extend({processBlock:function(e,r){var n=this._cipher,o=n.blockSize,i=e.slice(r,r+o);n.decryptBlock(e,r),t.call(this,e,r,o),this._prevBlock=i}}),r}(),m=r.pad={},y=m.Pkcs7={pad:function(t,e){for(var r=4*e,n=r-t.sigBytes%r,o=n<<24|n<<16|n<<8|n,a=[],s=0;n>s;s+=4)a.push(o);var c=i.create(a,n);t.concat(c)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},g=(n.BlockCipher=p.extend({cfg:p.cfg.extend({mode:d,padding:y}),reset:function(){p.reset.call(this);var t=this.cfg,e=t.iv,r=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else{var n=r.createDecryptor;this._minBufferSize=1}this._mode=n.call(r,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{var e=this._process(!0);t.unpad(e)}return e},blockSize:4}),n.CipherParams=o.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=r.format={},b=v.OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;if(r)var n=i.create([1398893684,1701076831]).concat(r).concat(e);else var n=e;return n.toString(c)},parse:function(t){var e=c.parse(t),r=e.words;if(1398893684==r[0]&&1701076831==r[1]){var n=i.create(r.slice(2,4));r.splice(0,4),e.sigBytes-=16}return g.create({ciphertext:e,salt:n})}},_=n.SerializableCipher=o.extend({cfg:o.extend({format:b}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var o=t.createEncryptor(r,n),i=o.finalize(e),a=o.cfg;return g.create({ciphertext:i,key:r,iv:a.iv,algorithm:t,mode:a.mode,padding:a.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var o=t.createDecryptor(r,n).finalize(e.ciphertext);return o},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=r.kdf={},x=w.OpenSSL={execute:function(t,e,r,n){n||(n=i.random(8));var o=f.create({keySize:e+r}).compute(t,n),a=i.create(o.words.slice(e),4*r);return o.sigBytes=4*e,g.create({key:o,iv:a,salt:n})}},k=n.PasswordBasedCipher=_.extend({cfg:_.cfg.extend({kdf:x}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var o=n.kdf.execute(r,t.keySize,t.ivSize);n.iv=o.iv;var i=_.encrypt.call(this,t,e,o.key,n);return i.mixIn(o),i},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var o=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);n.iv=o.iv;var i=_.decrypt.call(this,t,e,o.key,n);return i}})}()})},{"./core":52}],52:[function(t,e,r){!function(t,n){"object"==typeof r?e.exports=r=n():"function"==typeof define&&define.amd?define([],n):t.CryptoJS=n()}(this,function(){var t=t||function(t,e){var r={},n=r.lib={},o=n.Base=function(){function t(){}return{extend:function(e){t.prototype=this;var r=new t;return e&&r.mixIn(e),r.hasOwnProperty("init")||(r.init=function(){r.$super.init.apply(this,arguments)}),r.init.prototype=r,r.$super=this,r},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),i=n.WordArray=o.extend({init:function(t,r){t=this.words=t||[],r!=e?this.sigBytes=r:this.sigBytes=4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,r=t.words,n=this.sigBytes,o=t.sigBytes;if(this.clamp(),n%4)for(var i=0;o>i;i++){var a=r[i>>>2]>>>24-i%4*8&255;e[n+i>>>2]|=a<<24-(n+i)%4*8}else for(var i=0;o>i;i+=4)e[n+i>>>2]=r[i>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var r,n=[],o=function(e){var e=e,r=987654321,n=4294967295;return function(){r=36969*(65535&r)+(r>>16)&n,e=18e3*(65535&e)+(e>>16)&n;var o=(r<<16)+e&n;return o/=4294967296,o+=.5,o*(t.random()>.5?1:-1)}},a=0;e>a;a+=4){var s=o(4294967296*(r||t.random()));r=987654071*s(),n.push(4294967296*s()|0)}return new i.init(n,e)}}),a=r.enc={},s=a.Hex={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n+=2)r[n>>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new i.init(r,e/2)}},c=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;n.push(String.fromCharCode(i))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n++)r[n>>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new i.init(r,e)}},u=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},f=n.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=u.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r=this._data,n=r.words,o=r.sigBytes,a=this.blockSize,s=4*a,c=o/s;c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*a,f=t.min(4*u,o);if(u){for(var p=0;u>p;p+=a)this._doProcessBlock(n,p);var h=n.splice(0,u);r.sigBytes-=f}return new i.init(h,f)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(n.Hasher=f.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},blockSize:16,_createHelper:function(t){return function(e,r){return new t.init(r).finalize(e)}},_createHmacHelper:function(t){return function(e,r){return new p.HMAC.init(t,r).finalize(e)}}}),r.algo={});return r}(Math);return t})},{}],53:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=e.enc;o.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,n=this._map;t.clamp();for(var o=[],i=0;r>i;i+=3)for(var a=e[i>>>2]>>>24-i%4*8&255,s=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,u=a<<16|s<<8|c,f=0;4>f&&r>i+.75*f;f++)o.push(n.charAt(u>>>6*(3-f)&63));var p=n.charAt(64);if(p)for(;o.length%4;)o.push(p);return o.join("")},parse:function(t){var e=t.length,r=this._map,o=r.charAt(64);if(o){var i=t.indexOf(o);-1!=i&&(e=i)}for(var a=[],s=0,c=0;e>c;c++)if(c%4){var u=r.indexOf(t.charAt(c-1))<>>6-c%4*2;a[s>>>2]|=(u|f)<<24-s%4*8,s++}return n.create(a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64})},{"./core":52}],54:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(t){return t<<8&4278255360|t>>>8&16711935}var r=t,n=r.lib,o=n.WordArray,i=r.enc;i.Utf16=i.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o+=2){var i=e[o>>>2]>>>16-o%4*8&65535;n.push(String.fromCharCode(i))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n++)r[n>>>1]|=t.charCodeAt(n)<<16-n%2*16;return o.create(r,2*e)}};i.Utf16LE={stringify:function(t){for(var r=t.words,n=t.sigBytes,o=[],i=0;n>i;i+=2){var a=e(r[i>>>2]>>>16-i%4*8&65535);o.push(String.fromCharCode(a))}return o.join("")},parse:function(t){for(var r=t.length,n=[],i=0;r>i;i++)n[i>>>1]|=e(t.charCodeAt(i)<<16-i%2*16);return o.create(n,2*r)}}}(),t.enc.Utf16})},{"./core":52}],55:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.Base,o=r.WordArray,i=e.algo,a=i.MD5,s=i.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=r.hasher.create(),i=o.create(),a=i.words,s=r.keySize,c=r.iterations;a.lengthf;f++)u=n.finalize(u),n.reset();i.concat(u)}return i.sigBytes=4*s,i}});e.EvpKDF=function(t,e,r){return s.create(r).compute(t,e)}}(),t.EvpKDF})},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.CipherParams,i=r.enc,a=i.Hex,s=r.format;s.Hex={stringify:function(t){return t.ciphertext.toString(a)},parse:function(t){var e=a.parse(t);return o.create({ciphertext:e})}}}(),t.format.Hex})},{"./cipher-core":51,"./core":52}],57:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){!function(){var e=t,r=e.lib,n=r.Base,o=e.enc,i=o.Utf8,a=e.algo;a.HMAC=n.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=i.parse(e));var r=t.blockSize,n=4*r;e.sigBytes>n&&(e=t.finalize(e)),e.clamp();for(var o=this._oKey=e.clone(),a=this._iKey=e.clone(),s=o.words,c=a.words,u=0;r>u;u++)s[u]^=1549556828,c[u]^=909522486;o.sigBytes=a.sigBytes=n,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,r=e.finalize(t);e.reset();var n=e.finalize(this._oKey.clone().concat(r));return n}})}()})},{"./core":52}],58:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core"),t("./lib-typedarrays"),t("./enc-utf16"),t("./enc-base64"),t("./md5"),t("./sha1"),t("./sha256"),t("./sha224"),t("./sha512"),t("./sha384"),t("./sha3"),t("./ripemd160"),t("./hmac"),t("./pbkdf2"),t("./evpkdf"),t("./cipher-core"),t("./mode-cfb"),t("./mode-ctr"),t("./mode-ctr-gladman"),t("./mode-ofb"),t("./mode-ecb"),t("./pad-ansix923"),t("./pad-iso10126"),t("./pad-iso97971"),t("./pad-zeropadding"),t("./pad-nopadding"),t("./format-hex"),t("./aes"),t("./tripledes"),t("./rc4"),t("./rabbit"),t("./rabbit-legacy")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./lib-typedarrays","./enc-utf16","./enc-base64","./md5","./sha1","./sha256","./sha224","./sha512","./sha384","./sha3","./ripemd160","./hmac","./pbkdf2","./evpkdf","./cipher-core","./mode-cfb","./mode-ctr","./mode-ctr-gladman","./mode-ofb","./mode-ecb","./pad-ansix923","./pad-iso10126","./pad-iso97971","./pad-zeropadding","./pad-nopadding","./format-hex","./aes","./tripledes","./rc4","./rabbit","./rabbit-legacy"],o):n.CryptoJS=o(n.CryptoJS)}(this,function(t){return t})},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){if("function"==typeof ArrayBuffer){var e=t,r=e.lib,n=r.WordArray,o=n.init,i=n.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,r=[],n=0;e>n;n++)r[n>>>2]|=t[n]<<24-n%4*8;o.call(this,r,e)}else o.apply(this,arguments)};i.prototype=n}}(),t.lib.WordArray})},{"./core":52}],60:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){function r(t,e,r,n,o,i,a){var s=t+(e&r|~e&n)+o+a;return(s<>>32-i)+e}function n(t,e,r,n,o,i,a){var s=t+(e&n|r&~n)+o+a;return(s<>>32-i)+e}function o(t,e,r,n,o,i,a){var s=t+(e^r^n)+o+a;return(s<>>32-i)+e}function i(t,e,r,n,o,i,a){var s=t+(r^(e|~n))+o+a;return(s<>>32-i)+e}var a=t,s=a.lib,c=s.WordArray,u=s.Hasher,f=a.algo,p=[];!function(){for(var t=0;64>t;t++)p[t]=4294967296*e.abs(e.sin(t+1))|0}();var h=f.MD5=u.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var a=0;16>a;a++){var s=e+a,c=t[s];t[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var u=this._hash.words,f=t[e+0],h=t[e+1],l=t[e+2],d=t[e+3],m=t[e+4],y=t[e+5],g=t[e+6],v=t[e+7],b=t[e+8],_=t[e+9],w=t[e+10],x=t[e+11],k=t[e+12],B=t[e+13],S=t[e+14],C=t[e+15],A=u[0],F=u[1],I=u[2],P=u[3];A=r(A,F,I,P,f,7,p[0]),P=r(P,A,F,I,h,12,p[1]),I=r(I,P,A,F,l,17,p[2]),F=r(F,I,P,A,d,22,p[3]),A=r(A,F,I,P,m,7,p[4]),P=r(P,A,F,I,y,12,p[5]),I=r(I,P,A,F,g,17,p[6]),F=r(F,I,P,A,v,22,p[7]),A=r(A,F,I,P,b,7,p[8]),P=r(P,A,F,I,_,12,p[9]),I=r(I,P,A,F,w,17,p[10]),F=r(F,I,P,A,x,22,p[11]),A=r(A,F,I,P,k,7,p[12]),P=r(P,A,F,I,B,12,p[13]),I=r(I,P,A,F,S,17,p[14]),F=r(F,I,P,A,C,22,p[15]),A=n(A,F,I,P,h,5,p[16]),P=n(P,A,F,I,g,9,p[17]),I=n(I,P,A,F,x,14,p[18]),F=n(F,I,P,A,f,20,p[19]),A=n(A,F,I,P,y,5,p[20]),P=n(P,A,F,I,w,9,p[21]),I=n(I,P,A,F,C,14,p[22]),F=n(F,I,P,A,m,20,p[23]),A=n(A,F,I,P,_,5,p[24]),P=n(P,A,F,I,S,9,p[25]),I=n(I,P,A,F,d,14,p[26]),F=n(F,I,P,A,b,20,p[27]),A=n(A,F,I,P,B,5,p[28]),P=n(P,A,F,I,l,9,p[29]),I=n(I,P,A,F,v,14,p[30]),F=n(F,I,P,A,k,20,p[31]),A=o(A,F,I,P,y,4,p[32]),P=o(P,A,F,I,b,11,p[33]),I=o(I,P,A,F,x,16,p[34]),F=o(F,I,P,A,S,23,p[35]),A=o(A,F,I,P,h,4,p[36]),P=o(P,A,F,I,m,11,p[37]),I=o(I,P,A,F,v,16,p[38]),F=o(F,I,P,A,w,23,p[39]),A=o(A,F,I,P,B,4,p[40]),P=o(P,A,F,I,f,11,p[41]),I=o(I,P,A,F,d,16,p[42]),F=o(F,I,P,A,g,23,p[43]),A=o(A,F,I,P,_,4,p[44]),P=o(P,A,F,I,k,11,p[45]),I=o(I,P,A,F,C,16,p[46]),F=o(F,I,P,A,l,23,p[47]),A=i(A,F,I,P,f,6,p[48]),P=i(P,A,F,I,v,10,p[49]),I=i(I,P,A,F,S,15,p[50]),F=i(F,I,P,A,y,21,p[51]),A=i(A,F,I,P,k,6,p[52]),P=i(P,A,F,I,d,10,p[53]),I=i(I,P,A,F,w,15,p[54]),F=i(F,I,P,A,h,21,p[55]),A=i(A,F,I,P,b,6,p[56]),P=i(P,A,F,I,C,10,p[57]),I=i(I,P,A,F,g,15,p[58]),F=i(F,I,P,A,B,21,p[59]),A=i(A,F,I,P,m,6,p[60]),P=i(P,A,F,I,x,10,p[61]),I=i(I,P,A,F,l,15,p[62]),F=i(F,I,P,A,_,21,p[63]),u[0]=u[0]+A|0,u[1]=u[1]+F|0,u[2]=u[2]+I|0,u[3]=u[3]+P|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,o=8*t.sigBytes;r[o>>>5]|=128<<24-o%32;var i=e.floor(n/4294967296),a=n;r[(o+64>>>9<<4)+15]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),r[(o+64>>>9<<4)+14]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(r.length+1),this._process();for(var s=this._hash,c=s.words,u=0;4>u;u++){var f=c[u];c[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return s},clone:function(){var t=u.clone.call(this);return t._hash=this._hash.clone(),t}});a.MD5=u._createHelper(h),a.HmacMD5=u._createHmacHelper(h)}(Math),t.MD5})},{"./core":52}],61:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CFB=function(){function e(t,e,r,n){var o=this._iv;if(o){var i=o.slice(0);this._iv=void 0}else var i=this._prevBlock;n.encryptBlock(i,0);for(var a=0;r>a;a++)t[e+a]^=i[a]}var r=t.lib.BlockCipherMode.extend();return r.Encryptor=r.extend({processBlock:function(t,r){var n=this._cipher,o=n.blockSize;e.call(this,t,r,o,n),this._prevBlock=t.slice(r,r+o)}}),r.Decryptor=r.extend({processBlock:function(t,r){var n=this._cipher,o=n.blockSize,i=t.slice(r,r+o);e.call(this,t,r,o,n),this._prevBlock=i}}),r}(),t.mode.CFB})},{"./cipher-core":51,"./core":52}],62:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CTRGladman=function(){function e(t){if(255===(t>>24&255)){var e=t>>16&255,r=t>>8&255,n=255&t;255===e?(e=0,255===r?(r=0,255===n?n=0:++n):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=n}else t+=1<<24;return t}function r(t){return 0===(t[0]=e(t[0]))&&(t[1]=e(t[1])),t}var n=t.lib.BlockCipherMode.extend(),o=n.Encryptor=n.extend({processBlock:function(t,e){var n=this._cipher,o=n.blockSize,i=this._iv,a=this._counter;i&&(a=this._counter=i.slice(0),this._iv=void 0),r(a);var s=a.slice(0);n.encryptBlock(s,0);for(var c=0;o>c;c++)t[e+c]^=s[c]}});return n.Decryptor=o,n}(),t.mode.CTRGladman})},{"./cipher-core":51,"./core":52}],63:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CTR=function(){var e=t.lib.BlockCipherMode.extend(),r=e.Encryptor=e.extend({processBlock:function(t,e){var r=this._cipher,n=r.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var a=i.slice(0);r.encryptBlock(a,0),i[n-1]=i[n-1]+1|0;for(var s=0;n>s;s++)t[e+s]^=a[s]}});return e.Decryptor=r,e}(),t.mode.CTR})},{"./cipher-core":51,"./core":52}],64:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.ECB=function(){var e=t.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),e.Decryptor=e.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),e}(),t.mode.ECB})},{"./cipher-core":51,"./core":52}],65:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.OFB=function(){var e=t.lib.BlockCipherMode.extend(),r=e.Encryptor=e.extend({processBlock:function(t,e){var r=this._cipher,n=r.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),r.encryptBlock(i,0);for(var a=0;n>a;a++)t[e+a]^=i[a]}});return e.Decryptor=r,e}(),t.mode.OFB})},{"./cipher-core":51,"./core":52}],66:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,n=4*e,o=n-r%n,i=r+o-1;t.clamp(),t.words[i>>>2]|=o<<24-i%4*8,t.sigBytes+=o},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},{"./cipher-core":51,"./core":52}],67:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.Iso10126={pad:function(e,r){var n=4*r,o=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(o-1)).concat(t.lib.WordArray.create([o<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},{"./cipher-core":51,"./core":52}],68:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.Iso97971={pad:function(e,r){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,r)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},{"./cipher-core":51,"./core":52}],69:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},{"./cipher-core":51,"./core":52}],70:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){for(var e=t.words,r=t.sigBytes-1;!(e[r>>>2]>>>24-r%4*8&255);)r--;t.sigBytes=r+1}},t.pad.ZeroPadding})},{"./cipher-core":51,"./core":52}],71:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.Base,o=r.WordArray,i=e.algo,a=i.SHA1,s=i.HMAC,c=i.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=s.create(r.hasher,t),i=o.create(),a=o.create([1]),c=i.words,u=a.words,f=r.keySize,p=r.iterations;c.lengthy;y++){m=n.finalize(m),n.reset();for(var g=m.words,v=0;d>v;v++)l[v]^=g[v]}i.concat(h),u[0]++}return i.sigBytes=4*f,i}});e.PBKDF2=function(t,e,r){return c.create(r).compute(t,e)}}(),t.PBKDF2})},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,r=0;8>r;r++)s[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var r=0;8>r;r++){var n=t[r]+e[r],o=65535&n,i=n>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&n)*n|0)+((65535&n)*n|0);c[r]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=[],s=[],c=[],u=i.RabbitLegacy=o.extend({_doReset:function(){var t=this._key.words,r=this.cfg.iv,n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],o=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;4>i;i++)e.call(this);for(var i=0;8>i;i++)o[i]^=n[i+4&7];if(r){var a=r.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,h=f<<16|65535&u;o[0]^=u,o[1]^=p,o[2]^=f,o[3]^=h,o[4]^=u,o[5]^=p,o[6]^=f,o[7]^=h;for(var i=0;4>i;i++)e.call(this)}},_doProcessBlock:function(t,r){var n=this._X;e.call(this),a[0]=n[0]^n[5]>>>16^n[3]<<16,a[1]=n[2]^n[7]>>>16^n[5]<<16,a[2]=n[4]^n[1]>>>16^n[7]<<16,a[3]=n[6]^n[3]>>>16^n[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[r+o]^=a[o]},blockSize:4,ivSize:2});r.RabbitLegacy=o._createHelper(u)}(),t.RabbitLegacy})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,r=0;8>r;r++)s[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var r=0;8>r;r++){var n=t[r]+e[r],o=65535&n,i=n>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&n)*n|0)+((65535&n)*n|0);c[r]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=[],s=[],c=[],u=i.Rabbit=o.extend({_doReset:function(){for(var t=this._key.words,r=this.cfg.iv,n=0;4>n;n++)t[n]=16711935&(t[n]<<8|t[n]>>>24)|4278255360&(t[n]<<24|t[n]>>>8);var o=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var n=0;4>n;n++)e.call(this);for(var n=0;8>n;n++)i[n]^=o[n+4&7];if(r){var a=r.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,h=f<<16|65535&u;i[0]^=u,i[1]^=p,i[2]^=f,i[3]^=h,i[4]^=u,i[5]^=p,i[6]^=f,i[7]^=h;for(var n=0;4>n;n++)e.call(this)}},_doProcessBlock:function(t,r){var n=this._X;e.call(this),a[0]=n[0]^n[5]>>>16^n[3]<<16,a[1]=n[2]^n[7]>>>16^n[5]<<16,a[2]=n[4]^n[1]>>>16^n[7]<<16,a[3]=n[6]^n[3]>>>16^n[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[r+o]^=a[o]},blockSize:4,ivSize:2});r.Rabbit=o._createHelper(u)}(),t.Rabbit})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._S,e=this._i,r=this._j,n=0,o=0;4>o;o++){e=(e+1)%256,r=(r+t[e])%256;var i=t[e];t[e]=t[r],t[r]=i,n|=t[(t[e]+t[r])%256]<<24-8*o}return this._i=e,this._j=r,n}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=i.RC4=o.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,n=this._S=[],o=0;256>o;o++)n[o]=o;for(var o=0,i=0;256>o;o++){var a=o%r,s=e[a>>>2]>>>24-a%4*8&255;i=(i+n[o]+s)%256;var c=n[o];n[o]=n[i],n[i]=c}this._i=this._j=0},_doProcessBlock:function(t,r){t[r]^=e.call(this)},keySize:8,ivSize:0});r.RC4=o._createHelper(a);var s=i.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)e.call(this)}});r.RC4Drop=o._createHelper(s)}(),t.RC4})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){function r(t,e,r){return t^e^r}function n(t,e,r){return t&e|~t&r}function o(t,e,r){return(t|~e)^r}function i(t,e,r){return t&r|e&~r}function a(t,e,r){return t^(e|~r)}function s(t,e){return t<>>32-e}var c=t,u=c.lib,f=u.WordArray,p=u.Hasher,h=c.algo,l=f.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),d=f.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),m=f.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),y=f.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),g=f.create([0,1518500249,1859775393,2400959708,2840853838]),v=f.create([1352829926,1548603684,1836072691,2053994217,0]),b=h.RIPEMD160=p.extend({_doReset:function(){this._hash=f.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var c=0;16>c;c++){var u=e+c,f=t[u];t[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}var p,h,b,_,w,x,k,B,S,C,A=this._hash.words,F=g.words,I=v.words,P=l.words,D=d.words,T=m.words,O=y.words;x=p=A[0],k=h=A[1],B=b=A[2],S=_=A[3],C=w=A[4];for(var M,c=0;80>c;c+=1)M=p+t[e+P[c]]|0,M+=16>c?r(h,b,_)+F[0]:32>c?n(h,b,_)+F[1]:48>c?o(h,b,_)+F[2]:64>c?i(h,b,_)+F[3]:a(h,b,_)+F[4],M=0|M,M=s(M,T[c]),M=M+w|0,p=w,w=_,_=s(b,10),b=h,h=M,M=x+t[e+D[c]]|0,M+=16>c?a(k,B,S)+I[0]:32>c?i(k,B,S)+I[1]:48>c?o(k,B,S)+I[2]:64>c?n(k,B,S)+I[3]:r(k,B,S)+I[4],M=0|M,M=s(M,O[c]),M=M+C|0,x=C,C=S,S=s(B,10),B=k,k=M;M=A[1]+b+S|0,A[1]=A[2]+_+C|0,A[2]=A[3]+w+x|0,A[3]=A[4]+p+k|0,A[4]=A[0]+h+B|0,A[0]=M},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[(n+64>>>9<<4)+14]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var o=this._hash,i=o.words,a=0;5>a;a++){var s=i[a];i[a]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return o},clone:function(){var t=p.clone.call(this);return t._hash=this._hash.clone(),t}});c.RIPEMD160=p._createHelper(b),c.HmacRIPEMD160=p._createHmacHelper(b)}(Math),t.RIPEMD160})},{"./core":52}],76:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=r.Hasher,i=e.algo,a=[],s=i.SHA1=o.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],s=r[3],c=r[4],u=0;80>u;u++){if(16>u)a[u]=0|t[e+u];else{ -var f=a[u-3]^a[u-8]^a[u-14]^a[u-16];a[u]=f<<1|f>>>31}var p=(n<<5|n>>>27)+c+a[u];p+=20>u?(o&i|~o&s)+1518500249:40>u?(o^i^s)+1859775393:60>u?(o&i|o&s|i&s)-1894007588:(o^i^s)-899497514,c=s,s=i,i=o<<30|o>>>2,o=n,n=p}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[(n+64>>>9<<4)+14]=Math.floor(r/4294967296),e[(n+64>>>9<<4)+15]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=o._createHelper(s),e.HmacSHA1=o._createHmacHelper(s)}(),t.SHA1})},{"./core":52}],77:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha256")):"function"==typeof define&&define.amd?define(["./core","./sha256"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=e.algo,i=o.SHA256,a=o.SHA224=i.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=i._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=i._createHelper(a),e.HmacSHA224=i._createHmacHelper(a)}(),t.SHA224})},{"./core":52,"./sha256":78}],78:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.WordArray,i=n.Hasher,a=r.algo,s=[],c=[];!function(){function t(t){for(var r=e.sqrt(t),n=2;r>=n;n++)if(!(t%n))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var n=2,o=0;64>o;)t(n)&&(8>o&&(s[o]=r(e.pow(n,.5))),c[o]=r(e.pow(n,1/3)),o++),n++}();var u=[],f=a.SHA256=i.extend({_doReset:function(){this._hash=new o.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],f=r[5],p=r[6],h=r[7],l=0;64>l;l++){if(16>l)u[l]=0|t[e+l];else{var d=u[l-15],m=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,y=u[l-2],g=(y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10;u[l]=m+u[l-7]+g+u[l-16]}var v=s&f^~s&p,b=n&o^n&i^o&i,_=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),w=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),x=h+w+v+c[l]+u[l],k=_+b;h=p,p=f,f=s,s=a+x|0,a=i,i=o,o=n,n=x+k|0}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+a|0,r[4]=r[4]+s|0,r[5]=r[5]+f|0,r[6]=r[6]+p|0,r[7]=r[7]+h|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,o=8*t.sigBytes;return r[o>>>5]|=128<<24-o%32,r[(o+64>>>9<<4)+14]=e.floor(n/4294967296),r[(o+64>>>9<<4)+15]=n,t.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});r.SHA256=i._createHelper(f),r.HmacSHA256=i._createHmacHelper(f)}(Math),t.SHA256})},{"./core":52}],79:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.WordArray,i=n.Hasher,a=r.x64,s=a.Word,c=r.algo,u=[],f=[],p=[];!function(){for(var t=1,e=0,r=0;24>r;r++){u[t+5*e]=(r+1)*(r+2)/2%64;var n=e%5,o=(2*t+3*e)%5;t=n,e=o}for(var t=0;5>t;t++)for(var e=0;5>e;e++)f[t+5*e]=e+(2*t+3*e)%5*5;for(var i=1,a=0;24>a;a++){for(var c=0,h=0,l=0;7>l;l++){if(1&i){var d=(1<d?h^=1<t;t++)h[t]=s.create()}();var l=c.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;25>e;e++)t[e]=new s.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var r=this._state,n=this.blockSize/2,o=0;n>o;o++){var i=t[e+2*o],a=t[e+2*o+1];i=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8);var s=r[o];s.high^=a,s.low^=i}for(var c=0;24>c;c++){for(var l=0;5>l;l++){for(var d=0,m=0,y=0;5>y;y++){var s=r[l+5*y];d^=s.high,m^=s.low}var g=h[l];g.high=d,g.low=m}for(var l=0;5>l;l++)for(var v=h[(l+4)%5],b=h[(l+1)%5],_=b.high,w=b.low,d=v.high^(_<<1|w>>>31),m=v.low^(w<<1|_>>>31),y=0;5>y;y++){var s=r[l+5*y];s.high^=d,s.low^=m}for(var x=1;25>x;x++){var s=r[x],k=s.high,B=s.low,S=u[x];if(32>S)var d=k<>>32-S,m=B<>>32-S;else var d=B<>>64-S,m=k<>>64-S;var C=h[f[x]];C.high=d,C.low=m}var A=h[0],F=r[0];A.high=F.high,A.low=F.low;for(var l=0;5>l;l++)for(var y=0;5>y;y++){var x=l+5*y,s=r[x],I=h[x],P=h[(l+1)%5+5*y],D=h[(l+2)%5+5*y];s.high=I.high^~P.high&D.high,s.low=I.low^~P.low&D.low}var s=r[0],T=p[c];s.high^=T.high,s.low^=T.low}},_doFinalize:function(){var t=this._data,r=t.words,n=(8*this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(e.ceil((n+1)/i)*i>>>5)-1]|=128,t.sigBytes=4*r.length,this._process();for(var a=this._state,s=this.cfg.outputLength/8,c=s/8,u=[],f=0;c>f;f++){var p=a[f],h=p.high,l=p.low;h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8),l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),u.push(l),u.push(h)}return new o.init(u,s)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;25>r;r++)e[r]=e[r].clone();return t}});r.SHA3=i._createHelper(l),r.HmacSHA3=i._createHmacHelper(l)}(Math),t.SHA3})},{"./core":52,"./x64-core":83}],80:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core"),t("./sha512")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./sha512"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.x64,n=r.Word,o=r.WordArray,i=e.algo,a=i.SHA512,s=i.SHA384=a.extend({_doReset:function(){this._hash=new o.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=a._createHelper(s),e.HmacSHA384=a._createHmacHelper(s)}(),t.SHA384})},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){return a.create.apply(a,arguments)}var r=t,n=r.lib,o=n.Hasher,i=r.x64,a=i.Word,s=i.WordArray,c=r.algo,u=[e(1116352408,3609767458),e(1899447441,602891725),e(3049323471,3964484399),e(3921009573,2173295548),e(961987163,4081628472),e(1508970993,3053834265),e(2453635748,2937671579),e(2870763221,3664609560),e(3624381080,2734883394),e(310598401,1164996542),e(607225278,1323610764),e(1426881987,3590304994),e(1925078388,4068182383),e(2162078206,991336113),e(2614888103,633803317),e(3248222580,3479774868),e(3835390401,2666613458),e(4022224774,944711139),e(264347078,2341262773),e(604807628,2007800933),e(770255983,1495990901),e(1249150122,1856431235),e(1555081692,3175218132),e(1996064986,2198950837),e(2554220882,3999719339),e(2821834349,766784016),e(2952996808,2566594879),e(3210313671,3203337956),e(3336571891,1034457026),e(3584528711,2466948901),e(113926993,3758326383),e(338241895,168717936),e(666307205,1188179964),e(773529912,1546045734),e(1294757372,1522805485),e(1396182291,2643833823),e(1695183700,2343527390),e(1986661051,1014477480),e(2177026350,1206759142),e(2456956037,344077627),e(2730485921,1290863460),e(2820302411,3158454273),e(3259730800,3505952657),e(3345764771,106217008),e(3516065817,3606008344),e(3600352804,1432725776),e(4094571909,1467031594),e(275423344,851169720),e(430227734,3100823752),e(506948616,1363258195),e(659060556,3750685593),e(883997877,3785050280),e(958139571,3318307427),e(1322822218,3812723403),e(1537002063,2003034995),e(1747873779,3602036899),e(1955562222,1575990012),e(2024104815,1125592928),e(2227730452,2716904306),e(2361852424,442776044),e(2428436474,593698344),e(2756734187,3733110249),e(3204031479,2999351573),e(3329325298,3815920427),e(3391569614,3928383900),e(3515267271,566280711),e(3940187606,3454069534),e(4118630271,4000239992),e(116418474,1914138554),e(174292421,2731055270),e(289380356,3203993006),e(460393269,320620315),e(685471733,587496836),e(852142971,1086792851),e(1017036298,365543100),e(1126000580,2618297676),e(1288033470,3409855158),e(1501505948,4234509866),e(1607167915,987167468),e(1816402316,1246189591)],f=[];!function(){for(var t=0;80>t;t++)f[t]=e()}();var p=c.SHA512=o.extend({_doReset:function(){this._hash=new s.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],c=r[5],p=r[6],h=r[7],l=n.high,d=n.low,m=o.high,y=o.low,g=i.high,v=i.low,b=a.high,_=a.low,w=s.high,x=s.low,k=c.high,B=c.low,S=p.high,C=p.low,A=h.high,F=h.low,I=l,P=d,D=m,T=y,O=g,M=v,E=b,H=_,N=w,R=x,j=k,q=B,L=S,z=C,U=A,W=F,J=0;80>J;J++){var G=f[J];if(16>J)var X=G.high=0|t[e+2*J],K=G.low=0|t[e+2*J+1];else{var $=f[J-15],V=$.high,Z=$.low,Y=(V>>>1|Z<<31)^(V>>>8|Z<<24)^V>>>7,Q=(Z>>>1|V<<31)^(Z>>>8|V<<24)^(Z>>>7|V<<25),tt=f[J-2],et=tt.high,rt=tt.low,nt=(et>>>19|rt<<13)^(et<<3|rt>>>29)^et>>>6,ot=(rt>>>19|et<<13)^(rt<<3|et>>>29)^(rt>>>6|et<<26),it=f[J-7],at=it.high,st=it.low,ct=f[J-16],ut=ct.high,ft=ct.low,K=Q+st,X=Y+at+(Q>>>0>K>>>0?1:0),K=K+ot,X=X+nt+(ot>>>0>K>>>0?1:0),K=K+ft,X=X+ut+(ft>>>0>K>>>0?1:0);G.high=X,G.low=K}var pt=N&j^~N&L,ht=R&q^~R&z,lt=I&D^I&O^D&O,dt=P&T^P&M^T&M,mt=(I>>>28|P<<4)^(I<<30|P>>>2)^(I<<25|P>>>7),yt=(P>>>28|I<<4)^(P<<30|I>>>2)^(P<<25|I>>>7),gt=(N>>>14|R<<18)^(N>>>18|R<<14)^(N<<23|R>>>9),vt=(R>>>14|N<<18)^(R>>>18|N<<14)^(R<<23|N>>>9),bt=u[J],_t=bt.high,wt=bt.low,xt=W+vt,kt=U+gt+(W>>>0>xt>>>0?1:0),xt=xt+ht,kt=kt+pt+(ht>>>0>xt>>>0?1:0),xt=xt+wt,kt=kt+_t+(wt>>>0>xt>>>0?1:0),xt=xt+K,kt=kt+X+(K>>>0>xt>>>0?1:0),Bt=yt+dt,St=mt+lt+(yt>>>0>Bt>>>0?1:0);U=L,W=z,L=j,z=q,j=N,q=R,R=H+xt|0,N=E+kt+(H>>>0>R>>>0?1:0)|0,E=O,H=M,O=D,M=T,D=I,T=P,P=xt+Bt|0,I=kt+St+(xt>>>0>P>>>0?1:0)|0}d=n.low=d+P,n.high=l+I+(P>>>0>d>>>0?1:0),y=o.low=y+T,o.high=m+D+(T>>>0>y>>>0?1:0),v=i.low=v+M,i.high=g+O+(M>>>0>v>>>0?1:0),_=a.low=_+H,a.high=b+E+(H>>>0>_>>>0?1:0),x=s.low=x+R,s.high=w+N+(R>>>0>x>>>0?1:0),B=c.low=B+q,c.high=k+j+(q>>>0>B>>>0?1:0),C=p.low=C+z,p.high=S+L+(z>>>0>C>>>0?1:0),F=h.low=F+W,h.high=A+U+(W>>>0>F>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[(n+128>>>10<<5)+30]=Math.floor(r/4294967296),e[(n+128>>>10<<5)+31]=r,t.sigBytes=4*e.length,this._process();var o=this._hash.toX32();return o},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});r.SHA512=o._createHelper(p),r.HmacSHA512=o._createHmacHelper(p)}(),t.SHA512})},{"./core":52,"./x64-core":83}],82:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<n;n++){var o=c[n]-1;r[n]=e[o>>>5]>>>31-o%32&1}for(var i=this._subKeys=[],a=0;16>a;a++){for(var s=i[a]=[],p=f[a],n=0;24>n;n++)s[n/6|0]|=r[(u[n]-1+p)%28]<<31-n%6,s[4+(n/6|0)]|=r[28+(u[n+24]-1+p)%28]<<31-n%6;s[0]=s[0]<<1|s[0]>>>31;for(var n=1;7>n;n++)s[n]=s[n]>>>4*(n-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var h=this._invSubKeys=[],n=0;16>n;n++)h[n]=i[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,n,o){this._lBlock=t[n],this._rBlock=t[n+1],e.call(this,4,252645135),e.call(this,16,65535),r.call(this,2,858993459),r.call(this,8,16711935),e.call(this,1,1431655765);for(var i=0;16>i;i++){for(var a=o[i],s=this._lBlock,c=this._rBlock,u=0,f=0;8>f;f++)u|=p[f][((c^a[f])&h[f])>>>0];this._lBlock=c,this._rBlock=s^u}var l=this._lBlock;this._lBlock=this._rBlock,this._rBlock=l,e.call(this,1,1431655765),r.call(this,8,16711935),r.call(this,2,858993459),e.call(this,16,65535),e.call(this,4,252645135),t[n]=this._lBlock,t[n+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});n.DES=a._createHelper(l);var d=s.TripleDES=a.extend({_doReset:function(){var t=this._key,e=t.words;this._des1=l.createEncryptor(i.create(e.slice(0,2))),this._des2=l.createEncryptor(i.create(e.slice(2,4))),this._des3=l.createEncryptor(i.create(e.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});n.TripleDES=a._createHelper(d)}(),t.TripleDES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.Base,i=n.WordArray,a=r.x64={};a.Word=o.extend({init:function(t,e){this.high=t,this.low=e}}),a.WordArray=o.extend({init:function(t,r){t=this.words=t||[],r!=e?this.sigBytes=r:this.sigBytes=8*t.length},toX32:function(){for(var t=this.words,e=t.length,r=[],n=0;e>n;n++){var o=t[n];r.push(o.high),r.push(o.low)}return i.create(r,this.sigBytes)},clone:function(){for(var t=o.clone.call(this),e=t.words=this.words.slice(0),r=e.length,n=0;r>n;n++)e[n]=e[n].clone();return t}})}(),t})},{"./core":52}],84:[function(t,e,r){!function(t){function n(t){for(var e,r,n=[],o=0,i=t.length;i>o;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(r=t.charCodeAt(o++),56320==(64512&r)?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),o--)):n.push(e);return n}function o(t){for(var e,r=t.length,n=-1,o="";++n65535&&(e-=65536,o+=v(e>>>10&1023|55296),e=56320|1023&e),o+=v(e);return o}function i(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return v(t>>e&63|128)}function s(t){if(0==(4294967168&t))return v(t);var e="";return 0==(4294965248&t)?e=v(t>>6&31|192):0==(4294901760&t)?(i(t),e=v(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=v(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=v(63&t|128)}function c(t){for(var e,r=n(t),o=r.length,i=-1,a="";++i=y)throw Error("Invalid byte index");var t=255&m[g];if(g++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function f(){var t,e,r,n,o;if(g>y)throw Error("Invalid byte index");if(g==y)return!1;if(t=255&m[g],g++,0==(128&t))return t;if(192==(224&t)){var e=u();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=u(),r=u(),o=(15&t)<<12|e<<6|r,o>=2048)return i(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=u(),r=u(),n=u(),o=(15&t)<<18|e<<12|r<<6|n,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function p(t){m=n(t),y=m.length,g=0;for(var e,r=[];(e=f())!==!1;)r.push(e);return o(r)}var h="object"==typeof r&&r,l="object"==typeof e&&e&&e.exports==h&&e,d="object"==typeof global&&global;(d.global===d||d.window===d)&&(t=d);var m,y,g,v=String.fromCharCode,b={version:"2.0.0",encode:c,decode:p};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return b});else if(h&&!h.nodeType)if(l)l.exports=b;else{var _={},w=_.hasOwnProperty;for(var x in b)w.call(b,x)&&(h[x]=b[x])}else t.utf8=b}(this)},{}],"bignumber.js":[function(t,e,r){"use strict";e.exports=BigNumber},{}],web3:[function(t,e,r){var n=t("./lib/web3");"undefined"!=typeof window&&"undefined"==typeof window.Web3&&(window.Web3=n),e.exports=n},{"./lib/web3":22}]},{},["web3"]); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/dist/web3.js b/node_modules/web3-provider-engine/node_modules/web3/dist/web3.js deleted file mode 100644 index f817581..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/dist/web3.js +++ /dev/null @@ -1,15926 +0,0 @@ -require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o. -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - - -},{"./address":4,"./bool":5,"./bytes":6,"./dynamicbytes":8,"./formatters":9,"./int":10,"./real":12,"./string":13,"./uint":15,"./ureal":16}],8:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - - -},{"./formatters":9,"./type":14}],9:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - - -},{"../utils/config":18,"../utils/utils":20,"./param":11,"bignumber.js":"bignumber.js"}],10:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; - -},{"./formatters":9,"./type":14}],11:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - - -},{"../utils/utils":20}],12:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; - -},{"./formatters":9,"./type":14}],13:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - - -},{"./formatters":9,"./type":14}],14:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; - -},{"./formatters":9,"./param":11}],15:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; - -},{"./formatters":9,"./type":14}],16:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; - -},{"./formatters":9,"./type":14}],17:[function(require,module,exports){ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - - -},{}],18:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - - -},{"bignumber.js":"bignumber.js"}],19:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - - -},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; - -},{"./sha3.js":19,"bignumber.js":"bignumber.js","utf8":84}],21:[function(require,module,exports){ -module.exports={ - "version": "0.15.3" -} - -},{}],22:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; -Web3.prototype.sha3 = sha3; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - - -},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46}],23:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - - -},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - - -},{"./errors":26,"./jsonrpc":35}],25:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; - -},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - - -},{}],27:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(require,module,exports){ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - - -},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.filterId); - // remove filter async - this.implementation.uninstallFilter(this.filterId, function(){}); - this.callbacks = []; -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - - -},{"../utils/utils":20,"./formatters":30}],30:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw 'invalid address'; -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - - -},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// meteor server environment -if (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line - XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line - -// browser -} else if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - - -},{"./errors":26,"xmlhttprequest":17}],33:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '00' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - - -},{"bignumber.js":"bignumber.js"}],34:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - - -},{"../utils/utils":20,"./errors":26}],35:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = function () { - // singleton pattern - if (arguments.callee._singletonInstance) { - return arguments.callee._singletonInstance; - } - arguments.callee._singletonInstance = this; - - this.messageId = 1; -}; - -/** - * @return {Jsonrpc} singleton - */ -Jsonrpc.getInstance = function () { - var instance = new Jsonrpc(); - return instance; -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.prototype.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - return { - jsonrpc: '2.0', - method: method, - params: params || [], - id: this.messageId++ - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.prototype.isValidResponse = function (response) { - return !!response && - !response.error && - response.jsonrpc === '2.0' && - typeof response.id === 'number' && - response.result !== undefined; // only undefined is not valid json object -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.prototype.toBatchPayload = function (messages) { - var self = this; - return messages.map(function (message) { - return self.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - - -},{}],36:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - - -},{"../utils/utils":20,"./errors":26}],37:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; - -},{"../method":36}],38:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - - -},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; - -},{"../../utils/utils":20,"../property":44}],40:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [null, null, null] - }); - - return [ - newAccount, - unlockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; - -},{"../method":36,"../property":44}],41:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - - -},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - - -},{"../method":36}],43:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - - -},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - - -},{"../utils/utils":20}],45:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.getInstance().toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.getInstance().isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - - -},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(require,module,exports){ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - - -},{}],47:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - - -},{"../utils/utils":20,"./formatters":30}],48:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - - -},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(require,module,exports){ - -},{}],50:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); -},{"./core":52}],52:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); -},{}],53:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); -},{"./core":52}],54:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); -},{"./core":52}],55:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); -},{"./cipher-core":51,"./core":52}],57:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); -},{"./core":52}],58:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); -},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); -},{"./core":52}],60:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); -},{"./core":52}],61:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); -},{"./cipher-core":51,"./core":52}],62:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); -},{"./cipher-core":51,"./core":52}],63:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); -},{"./cipher-core":51,"./core":52}],64:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); -},{"./cipher-core":51,"./core":52}],65:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); -},{"./cipher-core":51,"./core":52}],66:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); -},{"./cipher-core":51,"./core":52}],67:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); -},{"./cipher-core":51,"./core":52}],68:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); -},{"./cipher-core":51,"./core":52}],69:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); -},{"./cipher-core":51,"./core":52}],70:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); -},{"./cipher-core":51,"./core":52}],71:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); -},{"./core":52}],76:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); -},{"./core":52}],77:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); -},{"./core":52,"./sha256":78}],78:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); -},{"./core":52}],79:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); -},{"./core":52,"./x64-core":83}],80:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); -},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); -},{"./core":52,"./x64-core":83}],82:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); -},{"./core":52}],84:[function(require,module,exports){ -/*! https://mths.be/utf8js v2.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - var byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.0.0', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); - -},{}],"bignumber.js":[function(require,module,exports){ -/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.7 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor( base / ( yc[0] + 1 ) ); - - // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1. - // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) { - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder. - // Trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while ( compare( prod, rem, prodL, remL ) == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if ( n == 0 ) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while ( compare( yc, rem, yL, remL ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); - -},{"crypto":49}],"web3":[function(require,module,exports){ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; - -},{"./lib/web3":22}]},{},["web3"]) -//# sourceMappingURL=web3.js.map diff --git a/node_modules/web3-provider-engine/node_modules/web3/dist/web3.js.map b/node_modules/web3-provider-engine/node_modules/web3/dist/web3.js.map deleted file mode 100644 index 97ced9f..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/dist/web3.js.map +++ /dev/null @@ -1,185 +0,0 @@ -{ - "version": 3, - "sources": [ - "node_modules/browserify/node_modules/browser-pack/_prelude.js", - "lib/contracts/GlobalRegistrar.json", - "lib/contracts/ICAPRegistrar.json", - "lib/contracts/SmartExchange.json", - "lib/solidity/address.js", - "lib/solidity/bool.js", - "lib/solidity/bytes.js", - "lib/solidity/coder.js", - "lib/solidity/dynamicbytes.js", - "lib/solidity/formatters.js", - "lib/solidity/int.js", - "lib/solidity/param.js", - "lib/solidity/real.js", - "lib/solidity/string.js", - "lib/solidity/type.js", - "lib/solidity/uint.js", - "lib/solidity/ureal.js", - "lib/utils/browser-xhr.js", - "lib/utils/config.js", - "lib/utils/sha3.js", - "lib/utils/utils.js", - "lib/version.json", - "lib/web3.js", - "lib/web3/allevents.js", - "lib/web3/batch.js", - "lib/web3/contract.js", - "lib/web3/errors.js", - "lib/web3/event.js", - "lib/web3/extend.js", - "lib/web3/filter.js", - "lib/web3/formatters.js", - "lib/web3/function.js", - "lib/web3/httpprovider.js", - "lib/web3/iban.js", - "lib/web3/ipcprovider.js", - "lib/web3/jsonrpc.js", - "lib/web3/method.js", - "lib/web3/methods/db.js", - "lib/web3/methods/eth.js", - "lib/web3/methods/net.js", - "lib/web3/methods/personal.js", - "lib/web3/methods/shh.js", - "lib/web3/methods/watches.js", - "lib/web3/namereg.js", - "lib/web3/property.js", - "lib/web3/requestmanager.js", - "lib/web3/settings.js", - "lib/web3/syncing.js", - "lib/web3/transfer.js", - "node_modules/browserify/lib/_empty.js", - "node_modules/crypto-js/aes.js", - "node_modules/crypto-js/cipher-core.js", - "node_modules/crypto-js/core.js", - "node_modules/crypto-js/enc-base64.js", - "node_modules/crypto-js/enc-utf16.js", - "node_modules/crypto-js/evpkdf.js", - "node_modules/crypto-js/format-hex.js", - "node_modules/crypto-js/hmac.js", - "node_modules/crypto-js/index.js", - "node_modules/crypto-js/lib-typedarrays.js", - "node_modules/crypto-js/md5.js", - "node_modules/crypto-js/mode-cfb.js", - "node_modules/crypto-js/mode-ctr-gladman.js", - "node_modules/crypto-js/mode-ctr.js", - "node_modules/crypto-js/mode-ecb.js", - "node_modules/crypto-js/mode-ofb.js", - "node_modules/crypto-js/pad-ansix923.js", - "node_modules/crypto-js/pad-iso10126.js", - "node_modules/crypto-js/pad-iso97971.js", - "node_modules/crypto-js/pad-nopadding.js", - "node_modules/crypto-js/pad-zeropadding.js", - "node_modules/crypto-js/pbkdf2.js", - "node_modules/crypto-js/rabbit-legacy.js", - "node_modules/crypto-js/rabbit.js", - "node_modules/crypto-js/rc4.js", - "node_modules/crypto-js/ripemd160.js", - "node_modules/crypto-js/sha1.js", - "node_modules/crypto-js/sha224.js", - "node_modules/crypto-js/sha256.js", - "node_modules/crypto-js/sha3.js", - "node_modules/crypto-js/sha384.js", - "node_modules/crypto-js/sha512.js", - "node_modules/crypto-js/tripledes.js", - "node_modules/crypto-js/x64-core.js", - "node_modules/utf8/utf8.js", - "bignumber.js", - "index.js" - ], - "names": [], - "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrlBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC12BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACruBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3nFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", - "file": "generated.js", - "sourceRoot": "", - "sourcesContent": [ - "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o.\n*/\n/** \n * @file coder.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar f = require('./formatters');\n\nvar SolidityTypeAddress = require('./address');\nvar SolidityTypeBool = require('./bool');\nvar SolidityTypeInt = require('./int');\nvar SolidityTypeUInt = require('./uint');\nvar SolidityTypeDynamicBytes = require('./dynamicbytes');\nvar SolidityTypeString = require('./string');\nvar SolidityTypeReal = require('./real');\nvar SolidityTypeUReal = require('./ureal');\nvar SolidityTypeBytes = require('./bytes');\n\n/**\n * SolidityCoder prototype should be used to encode/decode solidity params of any type\n */\nvar SolidityCoder = function (types) {\n this._types = types;\n};\n\n/**\n * This method should be used to transform type to SolidityType\n *\n * @method _requireType\n * @param {String} type\n * @returns {SolidityType} \n * @throws {Error} throws if no matching type is found\n */\nSolidityCoder.prototype._requireType = function (type) {\n var solidityType = this._types.filter(function (t) {\n return t.isType(type);\n })[0];\n\n if (!solidityType) {\n throw Error('invalid solidity type!: ' + type);\n }\n\n return solidityType;\n};\n\n/**\n * Should be used to encode plain param\n *\n * @method encodeParam\n * @param {String} type\n * @param {Object} plain param\n * @return {String} encoded plain param\n */\nSolidityCoder.prototype.encodeParam = function (type, param) {\n return this.encodeParams([type], [param]);\n};\n\n/**\n * Should be used to encode list of params\n *\n * @method encodeParams\n * @param {Array} types\n * @param {Array} params\n * @return {String} encoded list of params\n */\nSolidityCoder.prototype.encodeParams = function (types, params) {\n var solidityTypes = this.getSolidityTypes(types);\n\n var encodeds = solidityTypes.map(function (solidityType, index) {\n return solidityType.encode(params[index], types[index]);\n });\n\n var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {\n var staticPartLength = solidityType.staticPartLength(types[index]);\n var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;\n return acc + roundedStaticPartLength;\n }, 0);\n\n var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); \n\n return result;\n};\n\nSolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {\n var result = \"\";\n var self = this;\n\n var isDynamic = function (i) {\n return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]);\n };\n\n types.forEach(function (type, i) {\n if (isDynamic(i)) {\n result += f.formatInputInt(dynamicOffset).encode();\n var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n dynamicOffset += e.length / 2;\n } else {\n // don't add length to dynamicOffset. it's already counted\n result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n }\n\n // TODO: figure out nested arrays\n });\n \n types.forEach(function (type, i) {\n if (isDynamic(i)) {\n var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n dynamicOffset += e.length / 2;\n result += e;\n }\n });\n return result;\n};\n\n// TODO: refactor whole encoding!\nSolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {\n var self = this;\n if (solidityType.isDynamicArray(type)) {\n return (function () {\n // offset was already set\n var nestedName = solidityType.nestedName(type);\n var nestedStaticPartLength = solidityType.staticPartLength(nestedName);\n var result = encoded[0];\n \n (function () {\n var previousLength = 2; // in int\n if (solidityType.isDynamicArray(nestedName)) {\n for (var i = 1; i < encoded.length; i++) {\n previousLength += +(encoded[i - 1])[0] || 0;\n result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();\n }\n }\n })();\n \n // first element is length, skip it\n (function () {\n for (var i = 0; i < encoded.length - 1; i++) {\n var additionalOffset = result / 2;\n result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset);\n }\n })();\n\n return result;\n })();\n \n } else if (solidityType.isStaticArray(type)) {\n return (function () {\n var nestedName = solidityType.nestedName(type);\n var nestedStaticPartLength = solidityType.staticPartLength(nestedName);\n var result = \"\";\n\n\n if (solidityType.isDynamicArray(nestedName)) {\n (function () {\n var previousLength = 0; // in int\n for (var i = 0; i < encoded.length; i++) {\n // calculate length of previous item\n previousLength += +(encoded[i - 1] || [])[0] || 0; \n result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();\n }\n })();\n }\n\n (function () {\n for (var i = 0; i < encoded.length; i++) {\n var additionalOffset = result / 2;\n result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset);\n }\n })();\n\n return result;\n })();\n }\n\n return encoded;\n};\n\n/**\n * Should be used to decode bytes to plain param\n *\n * @method decodeParam\n * @param {String} type\n * @param {String} bytes\n * @return {Object} plain param\n */\nSolidityCoder.prototype.decodeParam = function (type, bytes) {\n return this.decodeParams([type], bytes)[0];\n};\n\n/**\n * Should be used to decode list of params\n *\n * @method decodeParam\n * @param {Array} types\n * @param {String} bytes\n * @return {Array} array of plain params\n */\nSolidityCoder.prototype.decodeParams = function (types, bytes) {\n var solidityTypes = this.getSolidityTypes(types);\n var offsets = this.getOffsets(types, solidityTypes);\n \n return solidityTypes.map(function (solidityType, index) {\n return solidityType.decode(bytes, offsets[index], types[index], index);\n });\n};\n\nSolidityCoder.prototype.getOffsets = function (types, solidityTypes) {\n var lengths = solidityTypes.map(function (solidityType, index) {\n return solidityType.staticPartLength(types[index]);\n });\n \n for (var i = 1; i < lengths.length; i++) {\n // sum with length of previous element\n lengths[i] += lengths[i - 1]; \n }\n\n return lengths.map(function (length, index) {\n // remove the current length, so the length is sum of previous elements\n var staticPartLength = solidityTypes[index].staticPartLength(types[index]);\n return length - staticPartLength; \n });\n};\n\nSolidityCoder.prototype.getSolidityTypes = function (types) {\n var self = this;\n return types.map(function (type) {\n return self._requireType(type);\n });\n};\n\nvar coder = new SolidityCoder([\n new SolidityTypeAddress(),\n new SolidityTypeBool(),\n new SolidityTypeInt(),\n new SolidityTypeUInt(),\n new SolidityTypeDynamicBytes(),\n new SolidityTypeBytes(),\n new SolidityTypeString(),\n new SolidityTypeReal(),\n new SolidityTypeUReal()\n]);\n\nmodule.exports = coder;\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\nvar SolidityTypeDynamicBytes = function () {\n this._inputFormatter = f.formatInputDynamicBytes;\n this._outputFormatter = f.formatOutputDynamicBytes;\n};\n\nSolidityTypeDynamicBytes.prototype = new SolidityType({});\nSolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;\n\nSolidityTypeDynamicBytes.prototype.isType = function (name) {\n return !!name.match(/^bytes(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeDynamicBytes.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nSolidityTypeDynamicBytes.prototype.isDynamicType = function () {\n return true;\n};\n\nmodule.exports = SolidityTypeDynamicBytes;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file formatters.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar BigNumber = require('bignumber.js');\nvar utils = require('../utils/utils');\nvar c = require('../utils/config');\nvar SolidityParam = require('./param');\n\n\n/**\n * Formats input value to byte representation of int\n * If value is negative, return it's two's complement\n * If the value is floating point, round it down\n *\n * @method formatInputInt\n * @param {String|Number|BigNumber} value that needs to be formatted\n * @returns {SolidityParam}\n */\nvar formatInputInt = function (value) {\n BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);\n var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64);\n return new SolidityParam(result);\n};\n\n/**\n * Formats input bytes\n *\n * @method formatInputBytes\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputBytes = function (value) {\n var result = utils.toHex(value).substr(2);\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(result);\n};\n\n/**\n * Formats input bytes\n *\n * @method formatDynamicInputBytes\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputDynamicBytes = function (value) {\n var result = utils.toHex(value).substr(2);\n var length = result.length / 2;\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(formatInputInt(length).value + result);\n};\n\n/**\n * Formats input value to byte representation of string\n *\n * @method formatInputString\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputString = function (value) {\n var result = utils.fromUtf8(value).substr(2);\n var length = result.length / 2;\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(formatInputInt(length).value + result);\n};\n\n/**\n * Formats input value to byte representation of bool\n *\n * @method formatInputBool\n * @param {Boolean}\n * @returns {SolidityParam}\n */\nvar formatInputBool = function (value) {\n var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0');\n return new SolidityParam(result);\n};\n\n/**\n * Formats input value to byte representation of real\n * Values are multiplied by 2^m and encoded as integers\n *\n * @method formatInputReal\n * @param {String|Number|BigNumber}\n * @returns {SolidityParam}\n */\nvar formatInputReal = function (value) {\n return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));\n};\n\n/**\n * Check if input value is negative\n *\n * @method signedIsNegative\n * @param {String} value is hex format\n * @returns {Boolean} true if it is negative, otherwise false\n */\nvar signedIsNegative = function (value) {\n return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';\n};\n\n/**\n * Formats right-aligned output bytes to int\n *\n * @method formatOutputInt\n * @param {SolidityParam} param\n * @returns {BigNumber} right-aligned output bytes formatted to big number\n */\nvar formatOutputInt = function (param) {\n var value = param.staticPart() || \"0\";\n\n // check if it's negative number\n // it it is, return two's complement\n if (signedIsNegative(value)) {\n return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);\n }\n return new BigNumber(value, 16);\n};\n\n/**\n * Formats right-aligned output bytes to uint\n *\n * @method formatOutputUInt\n * @param {SolidityParam}\n * @returns {BigNumeber} right-aligned output bytes formatted to uint\n */\nvar formatOutputUInt = function (param) {\n var value = param.staticPart() || \"0\";\n return new BigNumber(value, 16);\n};\n\n/**\n * Formats right-aligned output bytes to real\n *\n * @method formatOutputReal\n * @param {SolidityParam}\n * @returns {BigNumber} input bytes formatted to real\n */\nvar formatOutputReal = function (param) {\n return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); \n};\n\n/**\n * Formats right-aligned output bytes to ureal\n *\n * @method formatOutputUReal\n * @param {SolidityParam}\n * @returns {BigNumber} input bytes formatted to ureal\n */\nvar formatOutputUReal = function (param) {\n return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); \n};\n\n/**\n * Should be used to format output bool\n *\n * @method formatOutputBool\n * @param {SolidityParam}\n * @returns {Boolean} right-aligned input bytes formatted to bool\n */\nvar formatOutputBool = function (param) {\n return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;\n};\n\n/**\n * Should be used to format output bytes\n *\n * @method formatOutputBytes\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} hex string\n */\nvar formatOutputBytes = function (param) {\n return '0x' + param.staticPart();\n};\n\n/**\n * Should be used to format output bytes\n *\n * @method formatOutputDynamicBytes\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} hex string\n */\nvar formatOutputDynamicBytes = function (param) {\n var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;\n return '0x' + param.dynamicPart().substr(64, length);\n};\n\n/**\n * Should be used to format output string\n *\n * @method formatOutputString\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} ascii string\n */\nvar formatOutputString = function (param) {\n var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;\n return utils.toUtf8(param.dynamicPart().substr(64, length));\n};\n\n/**\n * Should be used to format output address\n *\n * @method formatOutputAddress\n * @param {SolidityParam} right-aligned input bytes\n * @returns {String} address\n */\nvar formatOutputAddress = function (param) {\n var value = param.staticPart();\n return \"0x\" + value.slice(value.length - 40, value.length);\n};\n\nmodule.exports = {\n formatInputInt: formatInputInt,\n formatInputBytes: formatInputBytes,\n formatInputDynamicBytes: formatInputDynamicBytes,\n formatInputString: formatInputString,\n formatInputBool: formatInputBool,\n formatInputReal: formatInputReal,\n formatOutputInt: formatOutputInt,\n formatOutputUInt: formatOutputUInt,\n formatOutputReal: formatOutputReal,\n formatOutputUReal: formatOutputUReal,\n formatOutputBool: formatOutputBool,\n formatOutputBytes: formatOutputBytes,\n formatOutputDynamicBytes: formatOutputDynamicBytes,\n formatOutputString: formatOutputString,\n formatOutputAddress: formatOutputAddress\n};\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeInt is a prootype that represents int type\n * It matches:\n * int\n * int[]\n * int[4]\n * int[][]\n * int[3][]\n * int[][6][], ...\n * int32\n * int64[]\n * int8[4]\n * int256[][]\n * int[3][]\n * int64[][6][], ...\n */\nvar SolidityTypeInt = function () {\n this._inputFormatter = f.formatInputInt;\n this._outputFormatter = f.formatOutputInt;\n};\n\nSolidityTypeInt.prototype = new SolidityType({});\nSolidityTypeInt.prototype.constructor = SolidityTypeInt;\n\nSolidityTypeInt.prototype.isType = function (name) {\n return !!name.match(/^int([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeInt.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeInt;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file param.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\n\n/**\n * SolidityParam object prototype.\n * Should be used when encoding, decoding solidity bytes\n */\nvar SolidityParam = function (value, offset) {\n this.value = value || '';\n this.offset = offset; // offset in bytes\n};\n\n/**\n * This method should be used to get length of params's dynamic part\n * \n * @method dynamicPartLength\n * @returns {Number} length of dynamic part (in bytes)\n */\nSolidityParam.prototype.dynamicPartLength = function () {\n return this.dynamicPart().length / 2;\n};\n\n/**\n * This method should be used to create copy of solidity param with different offset\n *\n * @method withOffset\n * @param {Number} offset length in bytes\n * @returns {SolidityParam} new solidity param with applied offset\n */\nSolidityParam.prototype.withOffset = function (offset) {\n return new SolidityParam(this.value, offset);\n};\n\n/**\n * This method should be used to combine solidity params together\n * eg. when appending an array\n *\n * @method combine\n * @param {SolidityParam} param with which we should combine\n * @param {SolidityParam} result of combination\n */\nSolidityParam.prototype.combine = function (param) {\n return new SolidityParam(this.value + param.value); \n};\n\n/**\n * This method should be called to check if param has dynamic size.\n * If it has, it returns true, otherwise false\n *\n * @method isDynamic\n * @returns {Boolean}\n */\nSolidityParam.prototype.isDynamic = function () {\n return this.offset !== undefined;\n};\n\n/**\n * This method should be called to transform offset to bytes\n *\n * @method offsetAsBytes\n * @returns {String} bytes representation of offset\n */\nSolidityParam.prototype.offsetAsBytes = function () {\n return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);\n};\n\n/**\n * This method should be called to get static part of param\n *\n * @method staticPart\n * @returns {String} offset if it is a dynamic param, otherwise value\n */\nSolidityParam.prototype.staticPart = function () {\n if (!this.isDynamic()) {\n return this.value; \n } \n return this.offsetAsBytes();\n};\n\n/**\n * This method should be called to get dynamic part of param\n *\n * @method dynamicPart\n * @returns {String} returns a value if it is a dynamic param, otherwise empty string\n */\nSolidityParam.prototype.dynamicPart = function () {\n return this.isDynamic() ? this.value : '';\n};\n\n/**\n * This method should be called to encode param\n *\n * @method encode\n * @returns {String}\n */\nSolidityParam.prototype.encode = function () {\n return this.staticPart() + this.dynamicPart();\n};\n\n/**\n * This method should be called to encode array of params\n *\n * @method encodeList\n * @param {Array[SolidityParam]} params\n * @returns {String}\n */\nSolidityParam.encodeList = function (params) {\n \n // updating offsets\n var totalOffset = params.length * 32;\n var offsetParams = params.map(function (param) {\n if (!param.isDynamic()) {\n return param;\n }\n var offset = totalOffset;\n totalOffset += param.dynamicPartLength();\n return param.withOffset(offset);\n });\n\n // encode everything!\n return offsetParams.reduce(function (result, param) {\n return result + param.dynamicPart();\n }, offsetParams.reduce(function (result, param) {\n return result + param.staticPart();\n }, ''));\n};\n\n\n\nmodule.exports = SolidityParam;\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeReal is a prootype that represents real type\n * It matches:\n * real\n * real[]\n * real[4]\n * real[][]\n * real[3][]\n * real[][6][], ...\n * real32\n * real64[]\n * real8[4]\n * real256[][]\n * real[3][]\n * real64[][6][], ...\n */\nvar SolidityTypeReal = function () {\n this._inputFormatter = f.formatInputReal;\n this._outputFormatter = f.formatOutputReal;\n};\n\nSolidityTypeReal.prototype = new SolidityType({});\nSolidityTypeReal.prototype.constructor = SolidityTypeReal;\n\nSolidityTypeReal.prototype.isType = function (name) {\n return !!name.match(/real([0-9]*)?(\\[([0-9]*)\\])?/);\n};\n\nSolidityTypeReal.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeReal;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\nvar SolidityTypeString = function () {\n this._inputFormatter = f.formatInputString;\n this._outputFormatter = f.formatOutputString;\n};\n\nSolidityTypeString.prototype = new SolidityType({});\nSolidityTypeString.prototype.constructor = SolidityTypeString;\n\nSolidityTypeString.prototype.isType = function (name) {\n return !!name.match(/^string(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeString.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nSolidityTypeString.prototype.isDynamicType = function () {\n return true;\n};\n\nmodule.exports = SolidityTypeString;\n\n", - "var f = require('./formatters');\nvar SolidityParam = require('./param');\n\n/**\n * SolidityType prototype is used to encode/decode solidity params of certain type\n */\nvar SolidityType = function (config) {\n this._inputFormatter = config.inputFormatter;\n this._outputFormatter = config.outputFormatter;\n};\n\n/**\n * Should be used to determine if this SolidityType do match given name\n *\n * @method isType\n * @param {String} name\n * @return {Bool} true if type match this SolidityType, otherwise false\n */\nSolidityType.prototype.isType = function (name) {\n throw \"this method should be overrwritten for type \" + name;\n};\n\n/**\n * Should be used to determine what is the length of static part in given type\n *\n * @method staticPartLength\n * @param {String} name\n * @return {Number} length of static part in bytes\n */\nSolidityType.prototype.staticPartLength = function (name) {\n throw \"this method should be overrwritten for type: \" + name;\n};\n\n/**\n * Should be used to determine if type is dynamic array\n * eg: \n * \"type[]\" => true\n * \"type[4]\" => false\n *\n * @method isDynamicArray\n * @param {String} name\n * @return {Bool} true if the type is dynamic array \n */\nSolidityType.prototype.isDynamicArray = function (name) {\n var nestedTypes = this.nestedTypes(name);\n return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);\n};\n\n/**\n * Should be used to determine if type is static array\n * eg: \n * \"type[]\" => false\n * \"type[4]\" => true\n *\n * @method isStaticArray\n * @param {String} name\n * @return {Bool} true if the type is static array \n */\nSolidityType.prototype.isStaticArray = function (name) {\n var nestedTypes = this.nestedTypes(name);\n return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);\n};\n\n/**\n * Should return length of static array\n * eg. \n * \"int[32]\" => 32\n * \"int256[14]\" => 14\n * \"int[2][3]\" => 3\n * \"int\" => 1\n * \"int[1]\" => 1\n * \"int[]\" => 1\n *\n * @method staticArrayLength\n * @param {String} name\n * @return {Number} static array length\n */\nSolidityType.prototype.staticArrayLength = function (name) {\n var nestedTypes = this.nestedTypes(name);\n if (nestedTypes) {\n return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);\n }\n return 1;\n};\n\n/**\n * Should return nested type\n * eg.\n * \"int[32]\" => \"int\"\n * \"int256[14]\" => \"int256\"\n * \"int[2][3]\" => \"int[2]\"\n * \"int\" => \"int\"\n * \"int[]\" => \"int\"\n *\n * @method nestedName\n * @param {String} name\n * @return {String} nested name\n */\nSolidityType.prototype.nestedName = function (name) {\n // remove last [] in name\n var nestedTypes = this.nestedTypes(name);\n if (!nestedTypes) {\n return name;\n }\n\n return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);\n};\n\n/**\n * Should return true if type has dynamic size by default\n * such types are \"string\", \"bytes\"\n *\n * @method isDynamicType\n * @param {String} name\n * @return {Bool} true if is dynamic, otherwise false\n */\nSolidityType.prototype.isDynamicType = function () {\n return false;\n};\n\n/**\n * Should return array of nested types\n * eg.\n * \"int[2][3][]\" => [\"[2]\", \"[3]\", \"[]\"]\n * \"int[] => [\"[]\"]\n * \"int\" => null\n *\n * @method nestedTypes\n * @param {String} name\n * @return {Array} array of nested types\n */\nSolidityType.prototype.nestedTypes = function (name) {\n // return list of strings eg. \"[]\", \"[3]\", \"[]\", \"[2]\"\n return name.match(/(\\[[0-9]*\\])/g);\n};\n\n/**\n * Should be used to encode the value\n *\n * @method encode\n * @param {Object} value \n * @param {String} name\n * @return {String} encoded value\n */\nSolidityType.prototype.encode = function (value, name) {\n var self = this;\n if (this.isDynamicArray(name)) {\n\n return (function () {\n var length = value.length; // in int\n var nestedName = self.nestedName(name);\n\n var result = [];\n result.push(f.formatInputInt(length).encode());\n \n value.forEach(function (v) {\n result.push(self.encode(v, nestedName));\n });\n\n return result;\n })();\n\n } else if (this.isStaticArray(name)) {\n\n return (function () {\n var length = self.staticArrayLength(name); // in int\n var nestedName = self.nestedName(name);\n\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(self.encode(value[i], nestedName));\n }\n\n return result;\n })();\n\n }\n\n return this._inputFormatter(value, name).encode();\n};\n\n/**\n * Should be used to decode value from bytes\n *\n * @method decode\n * @param {String} bytes\n * @param {Number} offset in bytes\n * @param {String} name type name\n * @returns {Object} decoded value\n */\nSolidityType.prototype.decode = function (bytes, offset, name) {\n var self = this;\n\n if (this.isDynamicArray(name)) {\n\n return (function () {\n var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes\n var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int\n var arrayStart = arrayOffset + 32; // array starts after length; // in bytes\n\n var nestedName = self.nestedName(name);\n var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes\n var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;\n var result = [];\n\n for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {\n result.push(self.decode(bytes, arrayStart + i, nestedName));\n }\n\n return result;\n })();\n\n } else if (this.isStaticArray(name)) {\n\n return (function () {\n var length = self.staticArrayLength(name); // in int\n var arrayStart = offset; // in bytes\n\n var nestedName = self.nestedName(name);\n var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes\n var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;\n var result = [];\n\n for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {\n result.push(self.decode(bytes, arrayStart + i, nestedName));\n }\n\n return result;\n })();\n } else if (this.isDynamicType(name)) {\n \n return (function () {\n var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes\n var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes\n var roundedLength = Math.floor((length + 31) / 32); // in int\n \n return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0));\n })();\n }\n\n var length = this.staticPartLength(name);\n return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2)));\n};\n\nmodule.exports = SolidityType;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeUInt is a prootype that represents uint type\n * It matches:\n * uint\n * uint[]\n * uint[4]\n * uint[][]\n * uint[3][]\n * uint[][6][], ...\n * uint32\n * uint64[]\n * uint8[4]\n * uint256[][]\n * uint[3][]\n * uint64[][6][], ...\n */\nvar SolidityTypeUInt = function () {\n this._inputFormatter = f.formatInputInt;\n this._outputFormatter = f.formatOutputUInt;\n};\n\nSolidityTypeUInt.prototype = new SolidityType({});\nSolidityTypeUInt.prototype.constructor = SolidityTypeUInt;\n\nSolidityTypeUInt.prototype.isType = function (name) {\n return !!name.match(/^uint([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeUInt.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeUInt;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeUReal is a prootype that represents ureal type\n * It matches:\n * ureal\n * ureal[]\n * ureal[4]\n * ureal[][]\n * ureal[3][]\n * ureal[][6][], ...\n * ureal32\n * ureal64[]\n * ureal8[4]\n * ureal256[][]\n * ureal[3][]\n * ureal64[][6][], ...\n */\nvar SolidityTypeUReal = function () {\n this._inputFormatter = f.formatInputReal;\n this._outputFormatter = f.formatOutputUReal;\n};\n\nSolidityTypeUReal.prototype = new SolidityType({});\nSolidityTypeUReal.prototype.constructor = SolidityTypeUReal;\n\nSolidityTypeUReal.prototype.isType = function (name) {\n return !!name.match(/^ureal([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeUReal.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeUReal;\n", - "'use strict';\n\n// go env doesn't have and need XMLHttpRequest\nif (typeof XMLHttpRequest === 'undefined') {\n exports.XMLHttpRequest = {};\n} else {\n exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line\n}\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file config.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\n/**\n * Utils\n * \n * @module utils\n */\n\n/**\n * Utility functions\n * \n * @class [utils] config\n * @constructor\n */\n\n\n/// required to define ETH_BIGNUMBER_ROUNDING_MODE\nvar BigNumber = require('bignumber.js');\n\nvar ETH_UNITS = [\n 'wei',\n 'kwei',\n 'Mwei',\n 'Gwei',\n 'szabo',\n 'finney',\n 'femtoether',\n 'picoether',\n 'nanoether',\n 'microether',\n 'milliether',\n 'nano',\n 'micro',\n 'milli',\n 'ether',\n 'grand',\n 'Mether',\n 'Gether',\n 'Tether',\n 'Pether',\n 'Eether',\n 'Zether',\n 'Yether',\n 'Nether',\n 'Dether',\n 'Vether',\n 'Uether'\n];\n\nmodule.exports = {\n ETH_PADDING: 32,\n ETH_SIGNATURE_LENGTH: 4,\n ETH_UNITS: ETH_UNITS,\n ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },\n ETH_POLLING_TIMEOUT: 1000/2,\n defaultBlock: 'latest',\n defaultAccount: undefined\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file sha3.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar CryptoJS = require('crypto-js');\nvar sha3 = require('crypto-js/sha3');\n\nmodule.exports = function (value, options) {\n if (options && options.encoding === 'hex') {\n if (value.length > 2 && value.substr(0, 2) === '0x') {\n value = value.substr(2);\n }\n value = CryptoJS.enc.Hex.parse(value);\n }\n\n return sha3(value, {\n outputLength: 256\n }).toString();\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file utils.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\n/**\n * Utils\n *\n * @module utils\n */\n\n/**\n * Utility functions\n *\n * @class [utils] utils\n * @constructor\n */\n\n\nvar BigNumber = require('bignumber.js');\nvar sha3 = require('./sha3.js');\nvar utf8 = require('utf8');\n\nvar unitMap = {\n 'noether': '0', \n 'wei': '1',\n 'kwei': '1000',\n 'Kwei': '1000',\n 'babbage': '1000',\n 'femtoether': '1000',\n 'mwei': '1000000',\n 'Mwei': '1000000',\n 'lovelace': '1000000',\n 'picoether': '1000000',\n 'gwei': '1000000000',\n 'Gwei': '1000000000',\n 'shannon': '1000000000',\n 'nanoether': '1000000000',\n 'nano': '1000000000',\n 'szabo': '1000000000000',\n 'microether': '1000000000000',\n 'micro': '1000000000000',\n 'finney': '1000000000000000',\n 'milliether': '1000000000000000',\n 'milli': '1000000000000000',\n 'ether': '1000000000000000000',\n 'kether': '1000000000000000000000',\n 'grand': '1000000000000000000000',\n 'mether': '1000000000000000000000000',\n 'gether': '1000000000000000000000000000',\n 'tether': '1000000000000000000000000000000'\n};\n\n/**\n * Should be called to pad string to expected length\n *\n * @method padLeft\n * @param {String} string to be padded\n * @param {Number} characters that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar padLeft = function (string, chars, sign) {\n return new Array(chars - string.length + 1).join(sign ? sign : \"0\") + string;\n};\n\n/**\n * Should be called to pad string to expected length\n *\n * @method padRight\n * @param {String} string to be padded\n * @param {Number} characters that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar padRight = function (string, chars, sign) {\n return string + (new Array(chars - string.length + 1).join(sign ? sign : \"0\"));\n};\n\n/**\n * Should be called to get utf8 from it's hex representation\n *\n * @method toUtf8\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nvar toUtf8 = function(hex) {\n// Find termination\n var str = \"\";\n var i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i+=2) {\n var code = parseInt(hex.substr(i, 2), 16);\n if (code === 0)\n break;\n str += String.fromCharCode(code);\n }\n\n return utf8.decode(str);\n};\n\n/**\n * Should be called to get ascii from it's hex representation\n *\n * @method toAscii\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nvar toAscii = function(hex) {\n// Find termination\n var str = \"\";\n var i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i+=2) {\n var code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n\n return str;\n};\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @method fromUtf8\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nvar fromUtf8 = function(str) {\n str = utf8.encode(str);\n var hex = \"\";\n for(var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n if (code === 0)\n break;\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return \"0x\" + hex;\n};\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @method fromAscii\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nvar fromAscii = function(str) {\n var hex = \"\";\n for(var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return \"0x\" + hex;\n};\n\n/**\n * Should be used to create full function/event name from json abi\n *\n * @method transformToFullName\n * @param {Object} json-abi\n * @return {String} full fnction/event name\n */\nvar transformToFullName = function (json) {\n if (json.name.indexOf('(') !== -1) {\n return json.name;\n }\n\n var typeName = json.inputs.map(function(i){return i.type; }).join();\n return json.name + '(' + typeName + ')';\n};\n\n/**\n * Should be called to get display name of contract function\n *\n * @method extractDisplayName\n * @param {String} name of function/event\n * @returns {String} display name for function/event eg. multiply(uint256) -> multiply\n */\nvar extractDisplayName = function (name) {\n var length = name.indexOf('(');\n return length !== -1 ? name.substr(0, length) : name;\n};\n\n/// @returns overloaded part of function/event name\nvar extractTypeName = function (name) {\n /// TODO: make it invulnerable\n var length = name.indexOf('(');\n return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : \"\";\n};\n\n/**\n * Converts value to it's decimal representation in string\n *\n * @method toDecimal\n * @param {String|Number|BigNumber}\n * @return {String}\n */\nvar toDecimal = function (value) {\n return toBigNumber(value).toNumber();\n};\n\n/**\n * Converts value to it's hex representation\n *\n * @method fromDecimal\n * @param {String|Number|BigNumber}\n * @return {String}\n */\nvar fromDecimal = function (value) {\n var number = toBigNumber(value);\n var result = number.toString(16);\n\n return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;\n};\n\n/**\n * Auto converts any given value into it's hex representation.\n *\n * And even stringifys objects before.\n *\n * @method toHex\n * @param {String|Number|BigNumber|Object}\n * @return {String}\n */\nvar toHex = function (val) {\n /*jshint maxcomplexity: 8 */\n\n if (isBoolean(val))\n return fromDecimal(+val);\n\n if (isBigNumber(val))\n return fromDecimal(val);\n\n if (isObject(val))\n return fromUtf8(JSON.stringify(val));\n\n // if its a negative number, pass it through fromDecimal\n if (isString(val)) {\n if (val.indexOf('-0x') === 0)\n return fromDecimal(val);\n else if(val.indexOf('0x') === 0)\n return val;\n else if (!isFinite(val))\n return fromAscii(val);\n }\n\n return fromDecimal(val);\n};\n\n/**\n * Returns value of unit in Wei\n *\n * @method getValueOfUnit\n * @param {String} unit the unit to convert to, default ether\n * @returns {BigNumber} value of the unit (in Wei)\n * @throws error if the unit is not correct:w\n */\nvar getValueOfUnit = function (unit) {\n unit = unit ? unit.toLowerCase() : 'ether';\n var unitValue = unitMap[unit];\n if (unitValue === undefined) {\n throw new Error('This unit doesn\\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));\n }\n return new BigNumber(unitValue, 10);\n};\n\n/**\n * Takes a number of wei and converts it to any other ether unit.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method fromWei\n * @param {Number|String} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert to, default ether\n * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number\n*/\nvar fromWei = function(number, unit) {\n var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));\n\n return isBigNumber(number) ? returnValue : returnValue.toString(10);\n};\n\n/**\n * Takes a number of a unit and converts it to wei.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method toWei\n * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert from, default ether\n * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number\n*/\nvar toWei = function(number, unit) {\n var returnValue = toBigNumber(number).times(getValueOfUnit(unit));\n\n return isBigNumber(number) ? returnValue : returnValue.toString(10);\n};\n\n/**\n * Takes an input and transforms it into an bignumber\n *\n * @method toBigNumber\n * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber\n * @return {BigNumber} BigNumber\n*/\nvar toBigNumber = function(number) {\n /*jshint maxcomplexity:5 */\n number = number || 0;\n if (isBigNumber(number))\n return number;\n\n if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {\n return new BigNumber(number.replace('0x',''), 16);\n }\n\n return new BigNumber(number.toString(10), 10);\n};\n\n/**\n * Takes and input transforms it into bignumber and if it is negative value, into two's complement\n *\n * @method toTwosComplement\n * @param {Number|String|BigNumber}\n * @return {BigNumber}\n */\nvar toTwosComplement = function (number) {\n var bigNumber = toBigNumber(number);\n if (bigNumber.lessThan(0)) {\n return new BigNumber(\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\", 16).plus(bigNumber).plus(1);\n }\n return bigNumber;\n};\n\n/**\n * Checks if the given string is strictly an address\n *\n * @method isStrictAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isStrictAddress = function (address) {\n return /^0x[0-9a-f]{40}$/i.test(address);\n};\n\n/**\n * Checks if the given string is an address\n *\n * @method isAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isAddress = function (address) {\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n // check if it has the basic requirements of an address\n return false;\n } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {\n // If it's all small caps or all all caps, return true\n return true;\n } else {\n // Otherwise check each case\n return isChecksumAddress(address);\n }\n};\n\n\n\n/**\n * Checks if the given string is a checksummed address\n *\n * @method isChecksumAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isChecksumAddress = function (address) { \n // Check each case\n address = address.replace('0x','');\n var addressHash = sha3(address.toLowerCase());\n\n for (var i = 0; i < 40; i++ ) { \n // the nth letter should be uppercase if the nth digit of casemap is 1\n if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {\n return false;\n }\n }\n return true; \n};\n\n\n\n/**\n * Makes a checksum address\n *\n * @method toChecksumAddress\n * @param {String} address the given HEX adress\n * @return {String}\n*/\nvar toChecksumAddress = function (address) { \n if (typeof address === 'undefined') return '';\n\n address = address.toLowerCase().replace('0x','');\n var addressHash = sha3(address);\n var checksumAddress = '0x';\n\n for (var i = 0; i < address.length; i++ ) { \n // If ith character is 9 to f then make it uppercase \n if (parseInt(addressHash[i], 16) > 7) {\n checksumAddress += address[i].toUpperCase();\n } else {\n checksumAddress += address[i];\n }\n }\n return checksumAddress;\n};\n\n/**\n * Transforms given string to valid 20 bytes-length addres with 0x prefix\n *\n * @method toAddress\n * @param {String} address\n * @return {String} formatted address\n */\nvar toAddress = function (address) {\n if (isStrictAddress(address)) {\n return address;\n }\n\n if (/^[0-9a-f]{40}$/.test(address)) {\n return '0x' + address;\n }\n\n return '0x' + padLeft(toHex(address).substr(2), 40);\n};\n\n/**\n * Returns true if object is BigNumber, otherwise false\n *\n * @method isBigNumber\n * @param {Object}\n * @return {Boolean}\n */\nvar isBigNumber = function (object) {\n return object instanceof BigNumber ||\n (object && object.constructor && object.constructor.name === 'BigNumber');\n};\n\n/**\n * Returns true if object is string, otherwise false\n *\n * @method isString\n * @param {Object}\n * @return {Boolean}\n */\nvar isString = function (object) {\n return typeof object === 'string' ||\n (object && object.constructor && object.constructor.name === 'String');\n};\n\n/**\n * Returns true if object is function, otherwise false\n *\n * @method isFunction\n * @param {Object}\n * @return {Boolean}\n */\nvar isFunction = function (object) {\n return typeof object === 'function';\n};\n\n/**\n * Returns true if object is Objet, otherwise false\n *\n * @method isObject\n * @param {Object}\n * @return {Boolean}\n */\nvar isObject = function (object) {\n return typeof object === 'object';\n};\n\n/**\n * Returns true if object is boolean, otherwise false\n *\n * @method isBoolean\n * @param {Object}\n * @return {Boolean}\n */\nvar isBoolean = function (object) {\n return typeof object === 'boolean';\n};\n\n/**\n * Returns true if object is array, otherwise false\n *\n * @method isArray\n * @param {Object}\n * @return {Boolean}\n */\nvar isArray = function (object) {\n return object instanceof Array;\n};\n\n/**\n * Returns true if given string is valid json object\n *\n * @method isJson\n * @param {String}\n * @return {Boolean}\n */\nvar isJson = function (str) {\n try {\n return !!JSON.parse(str);\n } catch (e) {\n return false;\n }\n};\n\nmodule.exports = {\n padLeft: padLeft,\n padRight: padRight,\n toHex: toHex,\n toDecimal: toDecimal,\n fromDecimal: fromDecimal,\n toUtf8: toUtf8,\n toAscii: toAscii,\n fromUtf8: fromUtf8,\n fromAscii: fromAscii,\n transformToFullName: transformToFullName,\n extractDisplayName: extractDisplayName,\n extractTypeName: extractTypeName,\n toWei: toWei,\n fromWei: fromWei,\n toBigNumber: toBigNumber,\n toTwosComplement: toTwosComplement,\n toAddress: toAddress,\n isBigNumber: isBigNumber,\n isStrictAddress: isStrictAddress,\n isAddress: isAddress,\n isChecksumAddress: isChecksumAddress,\n toChecksumAddress: toChecksumAddress,\n isFunction: isFunction,\n isString: isString,\n isObject: isObject,\n isBoolean: isBoolean,\n isArray: isArray,\n isJson: isJson\n};\n", - "module.exports={\n \"version\": \"0.15.3\"\n}\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file web3.js\n * @authors:\n * Jeffrey Wilcke \n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * Gav Wood \n * @date 2014\n */\n\nvar RequestManager = require('./web3/requestmanager');\nvar Iban = require('./web3/iban');\nvar Eth = require('./web3/methods/eth');\nvar DB = require('./web3/methods/db');\nvar Shh = require('./web3/methods/shh');\nvar Net = require('./web3/methods/net');\nvar Personal = require('./web3/methods/personal');\nvar Settings = require('./web3/settings');\nvar version = require('./version.json');\nvar utils = require('./utils/utils');\nvar sha3 = require('./utils/sha3');\nvar extend = require('./web3/extend');\nvar Batch = require('./web3/batch');\nvar Property = require('./web3/property');\nvar HttpProvider = require('./web3/httpprovider');\nvar IpcProvider = require('./web3/ipcprovider');\n\n\n\nfunction Web3 (provider) {\n this._requestManager = new RequestManager(provider);\n this.currentProvider = provider;\n this.eth = new Eth(this);\n this.db = new DB(this);\n this.shh = new Shh(this);\n this.net = new Net(this);\n this.personal = new Personal(this);\n this.settings = new Settings();\n this.version = {\n api: version.version\n };\n this.providers = {\n HttpProvider: HttpProvider,\n IpcProvider: IpcProvider\n };\n this._extend = extend(this);\n this._extend({\n properties: properties()\n });\n}\n\n// expose providers on the class\nWeb3.providers = {\n HttpProvider: HttpProvider,\n IpcProvider: IpcProvider\n};\n\nWeb3.prototype.setProvider = function (provider) {\n this._requestManager.setProvider(provider);\n this.currentProvider = provider;\n};\n\nWeb3.prototype.reset = function (keepIsSyncing) {\n this._requestManager.reset(keepIsSyncing);\n this.settings = new Settings();\n};\n\nWeb3.prototype.toHex = utils.toHex;\nWeb3.prototype.toAscii = utils.toAscii;\nWeb3.prototype.toUtf8 = utils.toUtf8;\nWeb3.prototype.fromAscii = utils.fromAscii;\nWeb3.prototype.fromUtf8 = utils.fromUtf8;\nWeb3.prototype.toDecimal = utils.toDecimal;\nWeb3.prototype.fromDecimal = utils.fromDecimal;\nWeb3.prototype.toBigNumber = utils.toBigNumber;\nWeb3.prototype.toWei = utils.toWei;\nWeb3.prototype.fromWei = utils.fromWei;\nWeb3.prototype.isAddress = utils.isAddress;\nWeb3.prototype.isChecksumAddress = utils.isChecksumAddress;\nWeb3.prototype.toChecksumAddress = utils.toChecksumAddress;\nWeb3.prototype.isIBAN = utils.isIBAN;\nWeb3.prototype.sha3 = sha3;\n\n/**\n * Transforms direct icap to address\n */\nWeb3.prototype.fromICAP = function (icap) {\n var iban = new Iban(icap);\n return iban.address();\n};\n\nvar properties = function () {\n return [\n new Property({\n name: 'version.node',\n getter: 'web3_clientVersion'\n }),\n new Property({\n name: 'version.network',\n getter: 'net_version',\n inputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'version.ethereum',\n getter: 'eth_protocolVersion',\n inputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'version.whisper',\n getter: 'shh_version',\n inputFormatter: utils.toDecimal\n })\n ];\n};\n\nWeb3.prototype.isConnected = function(){\n return (this.currentProvider && this.currentProvider.isConnected());\n};\n\nWeb3.prototype.createBatch = function () {\n return new Batch(this);\n};\n\nmodule.exports = Web3;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file allevents.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar sha3 = require('../utils/sha3');\nvar SolidityEvent = require('./event');\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\nvar Filter = require('./filter');\nvar watches = require('./methods/watches');\n\nvar AllSolidityEvents = function (requestManager, json, address) {\n this._requestManager = requestManager;\n this._json = json;\n this._address = address;\n};\n\nAllSolidityEvents.prototype.encode = function (options) {\n options = options || {};\n var result = {};\n\n ['fromBlock', 'toBlock'].filter(function (f) {\n return options[f] !== undefined;\n }).forEach(function (f) {\n result[f] = formatters.inputBlockNumberFormatter(options[f]);\n });\n\n result.address = this._address;\n\n return result;\n};\n\nAllSolidityEvents.prototype.decode = function (data) {\n data.data = data.data || '';\n data.topics = data.topics || [];\n\n var eventTopic = data.topics[0].slice(2);\n var match = this._json.filter(function (j) {\n return eventTopic === sha3(utils.transformToFullName(j));\n })[0];\n\n if (!match) { // cannot find matching event?\n console.warn('cannot find event for log');\n return data;\n }\n\n var event = new SolidityEvent(this._requestManager, match, this._address);\n return event.decode(data);\n};\n\nAllSolidityEvents.prototype.execute = function (options, callback) {\n\n if (utils.isFunction(arguments[arguments.length - 1])) {\n callback = arguments[arguments.length - 1];\n if(arguments.length === 1)\n options = null;\n }\n\n var o = this.encode(options);\n var formatter = this.decode.bind(this);\n return new Filter(this._requestManager, o, watches.eth(), formatter, callback);\n};\n\nAllSolidityEvents.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n contract.allEvents = execute;\n};\n\nmodule.exports = AllSolidityEvents;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file batch.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar Jsonrpc = require('./jsonrpc');\nvar errors = require('./errors');\n\nvar Batch = function (web3) {\n this.requestManager = web3._requestManager;\n this.requests = [];\n};\n\n/**\n * Should be called to add create new request to batch request\n *\n * @method add\n * @param {Object} jsonrpc requet object\n */\nBatch.prototype.add = function (request) {\n this.requests.push(request);\n};\n\n/**\n * Should be called to execute batch request\n *\n * @method execute\n */\nBatch.prototype.execute = function () {\n var requests = this.requests;\n this.requestManager.sendBatch(requests, function (err, results) {\n results = results || [];\n requests.map(function (request, index) {\n return results[index] || {};\n }).forEach(function (result, index) {\n if (requests[index].callback) {\n\n if (!Jsonrpc.getInstance().isValidResponse(result)) {\n return requests[index].callback(errors.InvalidResponse(result));\n }\n\n requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));\n }\n });\n }); \n};\n\nmodule.exports = Batch;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file contract.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar utils = require('../utils/utils');\nvar coder = require('../solidity/coder');\nvar SolidityEvent = require('./event');\nvar SolidityFunction = require('./function');\nvar AllEvents = require('./allevents');\n\n/**\n * Should be called to encode constructor params\n *\n * @method encodeConstructorParams\n * @param {Array} abi\n * @param {Array} constructor params\n */\nvar encodeConstructorParams = function (abi, params) {\n return abi.filter(function (json) {\n return json.type === 'constructor' && json.inputs.length === params.length;\n }).map(function (json) {\n return json.inputs.map(function (input) {\n return input.type;\n });\n }).map(function (types) {\n return coder.encodeParams(types, params);\n })[0] || '';\n};\n\n/**\n * Should be called to add functions to contract object\n *\n * @method addFunctionsToContract\n * @param {Contract} contract\n * @param {Array} abi\n */\nvar addFunctionsToContract = function (contract) {\n contract.abi.filter(function (json) {\n return json.type === 'function';\n }).map(function (json) {\n return new SolidityFunction(contract._eth, json, contract.address);\n }).forEach(function (f) {\n f.attachToContract(contract);\n });\n};\n\n/**\n * Should be called to add events to contract object\n *\n * @method addEventsToContract\n * @param {Contract} contract\n * @param {Array} abi\n */\nvar addEventsToContract = function (contract) {\n var events = contract.abi.filter(function (json) {\n return json.type === 'event';\n });\n\n var All = new AllEvents(contract._eth._requestManager, events, contract.address);\n All.attachToContract(contract);\n\n events.map(function (json) {\n return new SolidityEvent(contract._eth._requestManager, json, contract.address);\n }).forEach(function (e) {\n e.attachToContract(contract);\n });\n};\n\n\n/**\n * Should be called to check if the contract gets properly deployed on the blockchain.\n *\n * @method checkForContractAddress\n * @param {Object} contract\n * @param {Function} callback\n * @returns {Undefined}\n */\nvar checkForContractAddress = function(contract, callback){\n var count = 0,\n callbackFired = false;\n\n // wait for receipt\n var filter = contract._eth.filter('latest', function(e){\n if (!e && !callbackFired) {\n count++;\n\n // stop watching after 50 blocks (timeout)\n if (count > 50) {\n\n filter.stopWatching();\n callbackFired = true;\n\n if (callback)\n callback(new Error('Contract transaction couldn\\'t be found after 50 blocks'));\n else\n throw new Error('Contract transaction couldn\\'t be found after 50 blocks');\n\n\n } else {\n\n contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){\n if(receipt && !callbackFired) {\n\n contract._eth.getCode(receipt.contractAddress, function(e, code){\n /*jshint maxcomplexity: 6 */\n\n if(callbackFired || !code)\n return;\n\n filter.stopWatching();\n callbackFired = true;\n\n if(code.length > 2) {\n\n // console.log('Contract code deployed!');\n\n contract.address = receipt.contractAddress;\n\n // attach events and methods again after we have\n addFunctionsToContract(contract);\n addEventsToContract(contract);\n\n // call callback for the second time\n if(callback)\n callback(null, contract);\n\n } else {\n if(callback)\n callback(new Error('The contract code couldn\\'t be stored, please check your gas amount.'));\n else\n throw new Error('The contract code couldn\\'t be stored, please check your gas amount.');\n }\n });\n }\n });\n }\n }\n });\n};\n\n/**\n * Should be called to create new ContractFactory instance\n *\n * @method ContractFactory\n * @param {Array} abi\n */\nvar ContractFactory = function (eth, abi) {\n this.eth = eth;\n this.abi = abi;\n\n /**\n * Should be called to create new contract on a blockchain\n *\n * @method new\n * @param {Any} contract constructor param1 (optional)\n * @param {Any} contract constructor param2 (optional)\n * @param {Object} contract transaction object (required)\n * @param {Function} callback\n * @returns {Contract} returns contract instance\n */\n this.new = function () {\n var contract = new Contract(this.eth, this.abi);\n\n // parse arguments\n var options = {}; // required!\n var callback;\n\n var args = Array.prototype.slice.call(arguments);\n if (utils.isFunction(args[args.length - 1])) {\n callback = args.pop();\n }\n\n var last = args[args.length - 1];\n if (utils.isObject(last) && !utils.isArray(last)) {\n options = args.pop();\n }\n\n var bytes = encodeConstructorParams(this.abi, args);\n options.data += bytes;\n\n if (callback) {\n\n // wait for the contract address adn check if the code was deployed\n this.eth.sendTransaction(options, function (err, hash) {\n if (err) {\n callback(err);\n } else {\n // add the transaction hash\n contract.transactionHash = hash;\n\n // call callback for the first time\n callback(null, contract);\n\n checkForContractAddress(contract, callback);\n }\n });\n } else {\n var hash = this.eth.sendTransaction(options);\n // add the transaction hash\n contract.transactionHash = hash;\n checkForContractAddress(contract);\n }\n\n return contract;\n };\n\n this.new.getData = this.getData.bind(this);\n};\n\n/**\n * Should be called to create new ContractFactory\n *\n * @method contract\n * @param {Array} abi\n * @returns {ContractFactory} new contract factory\n */\n//var contract = function (abi) {\n //return new ContractFactory(abi);\n//};\n\n\n\n/**\n * Should be called to get access to existing contract on a blockchain\n *\n * @method at\n * @param {Address} contract address (required)\n * @param {Function} callback {optional)\n * @returns {Contract} returns contract if no callback was passed,\n * otherwise calls callback function (err, contract)\n */\nContractFactory.prototype.at = function (address, callback) {\n var contract = new Contract(this.eth, this.abi, address);\n\n // this functions are not part of prototype,\n // because we dont want to spoil the interface\n addFunctionsToContract(contract);\n addEventsToContract(contract);\n\n if (callback) {\n callback(null, contract);\n }\n return contract;\n};\n\n/**\n * Gets the data, which is data to deploy plus constructor params\n *\n * @method getData\n */\nContractFactory.prototype.getData = function () {\n var options = {}; // required!\n var args = Array.prototype.slice.call(arguments);\n\n var last = args[args.length - 1];\n if (utils.isObject(last) && !utils.isArray(last)) {\n options = args.pop();\n }\n\n var bytes = encodeConstructorParams(this.abi, args);\n options.data += bytes;\n\n return options.data;\n};\n\n/**\n * Should be called to create new contract instance\n *\n * @method Contract\n * @param {Array} abi\n * @param {Address} contract address\n */\nvar Contract = function (eth, abi, address) {\n this._eth = eth;\n this.transactionHash = null;\n this.address = address;\n this.abi = abi;\n};\n\nmodule.exports = ContractFactory;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file errors.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nmodule.exports = {\n InvalidNumberOfParams: function () {\n return new Error('Invalid number of input parameters');\n },\n InvalidConnection: function (host){\n return new Error('CONNECTION ERROR: Couldn\\'t connect to node '+ host +'.');\n },\n InvalidProvider: function () {\n return new Error('Provider not set or invalid');\n },\n InvalidResponse: function (result){\n var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);\n return new Error(message);\n }\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file event.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar utils = require('../utils/utils');\nvar coder = require('../solidity/coder');\nvar formatters = require('./formatters');\nvar sha3 = require('../utils/sha3');\nvar Filter = require('./filter');\nvar watches = require('./methods/watches');\n\n/**\n * This prototype should be used to create event filters\n */\nvar SolidityEvent = function (requestManager, json, address) {\n this._requestManager = requestManager;\n this._params = json.inputs;\n this._name = utils.transformToFullName(json);\n this._address = address;\n this._anonymous = json.anonymous;\n};\n\n/**\n * Should be used to get filtered param types\n *\n * @method types\n * @param {Bool} decide if returned typed should be indexed\n * @return {Array} array of types\n */\nSolidityEvent.prototype.types = function (indexed) {\n return this._params.filter(function (i) {\n return i.indexed === indexed;\n }).map(function (i) {\n return i.type;\n });\n};\n\n/**\n * Should be used to get event display name\n *\n * @method displayName\n * @return {String} event display name\n */\nSolidityEvent.prototype.displayName = function () {\n return utils.extractDisplayName(this._name);\n};\n\n/**\n * Should be used to get event type name\n *\n * @method typeName\n * @return {String} event type name\n */\nSolidityEvent.prototype.typeName = function () {\n return utils.extractTypeName(this._name);\n};\n\n/**\n * Should be used to get event signature\n *\n * @method signature\n * @return {String} event signature\n */\nSolidityEvent.prototype.signature = function () {\n return sha3(this._name);\n};\n\n/**\n * Should be used to encode indexed params and options to one final object\n * \n * @method encode\n * @param {Object} indexed\n * @param {Object} options\n * @return {Object} everything combined together and encoded\n */\nSolidityEvent.prototype.encode = function (indexed, options) {\n indexed = indexed || {};\n options = options || {};\n var result = {};\n\n ['fromBlock', 'toBlock'].filter(function (f) {\n return options[f] !== undefined;\n }).forEach(function (f) {\n result[f] = formatters.inputBlockNumberFormatter(options[f]);\n });\n\n result.topics = [];\n\n result.address = this._address;\n if (!this._anonymous) {\n result.topics.push('0x' + this.signature());\n }\n\n var indexedTopics = this._params.filter(function (i) {\n return i.indexed === true;\n }).map(function (i) {\n var value = indexed[i.name];\n if (value === undefined || value === null) {\n return null;\n }\n \n if (utils.isArray(value)) {\n return value.map(function (v) {\n return '0x' + coder.encodeParam(i.type, v);\n });\n }\n return '0x' + coder.encodeParam(i.type, value);\n });\n\n result.topics = result.topics.concat(indexedTopics);\n\n return result;\n};\n\n/**\n * Should be used to decode indexed params and options\n *\n * @method decode\n * @param {Object} data\n * @return {Object} result object with decoded indexed && not indexed params\n */\nSolidityEvent.prototype.decode = function (data) {\n \n data.data = data.data || '';\n data.topics = data.topics || [];\n\n var argTopics = this._anonymous ? data.topics : data.topics.slice(1);\n var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(\"\");\n var indexedParams = coder.decodeParams(this.types(true), indexedData); \n\n var notIndexedData = data.data.slice(2);\n var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData);\n \n var result = formatters.outputLogFormatter(data);\n result.event = this.displayName();\n result.address = data.address;\n\n result.args = this._params.reduce(function (acc, current) {\n acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();\n return acc;\n }, {});\n\n delete result.data;\n delete result.topics;\n\n return result;\n};\n\n/**\n * Should be used to create new filter object from event\n *\n * @method execute\n * @param {Object} indexed\n * @param {Object} options\n * @return {Object} filter object\n */\nSolidityEvent.prototype.execute = function (indexed, options, callback) {\n\n if (utils.isFunction(arguments[arguments.length - 1])) {\n callback = arguments[arguments.length - 1];\n if(arguments.length === 2)\n options = null;\n if(arguments.length === 1) {\n options = null;\n indexed = {};\n }\n }\n \n var o = this.encode(indexed, options);\n var formatter = this.decode.bind(this);\n return new Filter(this._requestManager, o, watches.eth(), formatter, callback);\n};\n\n/**\n * Should be used to attach event to contract object\n *\n * @method attachToContract\n * @param {Contract}\n */\nSolidityEvent.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n var displayName = this.displayName();\n if (!contract[displayName]) {\n contract[displayName] = execute;\n }\n contract[displayName][this.typeName()] = this.execute.bind(this, contract);\n};\n\nmodule.exports = SolidityEvent;\n\n", - "var formatters = require('./formatters');\nvar utils = require('./../utils/utils');\nvar Method = require('./method');\nvar Property = require('./property');\n\n// TODO: refactor, so the input params are not altered.\n// it's necessary to make same 'extension' work with multiple providers\nvar extend = function (web3) {\n /* jshint maxcomplexity:5 */\n var ex = function (extension) {\n\n var extendedObject;\n if (extension.property) {\n if (!web3[extension.property]) {\n web3[extension.property] = {};\n }\n extendedObject = web3[extension.property];\n } else {\n extendedObject = web3;\n }\n\n if (extension.methods) {\n extension.methods.forEach(function (method) {\n method.attachToObject(extendedObject);\n method.setRequestManager(web3._requestManager);\n });\n }\n\n if (extension.properties) {\n extension.properties.forEach(function (property) {\n property.attachToObject(extendedObject);\n property.setRequestManager(web3._requestManager);\n });\n }\n };\n\n ex.formatters = formatters; \n ex.utils = utils;\n ex.Method = Method;\n ex.Property = Property;\n\n return ex;\n};\n\n\n\nmodule.exports = extend;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file filter.js\n * @authors:\n * Jeffrey Wilcke \n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * Gav Wood \n * @date 2014\n */\n\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\n\n/**\n* Converts a given topic to a hex string, but also allows null values.\n*\n* @param {Mixed} value\n* @return {String}\n*/\nvar toTopic = function(value){\n\n if(value === null || typeof value === 'undefined')\n return null;\n\n value = String(value);\n\n if(value.indexOf('0x') === 0)\n return value;\n else\n return utils.fromUtf8(value);\n};\n\n/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones\n/// @param should be string or object\n/// @returns options string or object\nvar getOptions = function (options) {\n\n if (utils.isString(options)) {\n return options;\n }\n\n options = options || {};\n\n // make sure topics, get converted to hex\n options.topics = options.topics || [];\n options.topics = options.topics.map(function(topic){\n return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);\n });\n\n return {\n topics: options.topics,\n from: options.from,\n to: options.to,\n address: options.address,\n fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),\n toBlock: formatters.inputBlockNumberFormatter(options.toBlock)\n };\n};\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method getLogsAtStart\n@param {Object} self\n@param {funciton}\n*/\nvar getLogsAtStart = function(self, callback){\n // call getFilterLogs for the first watch callback start\n if (!utils.isString(self.options)) {\n self.get(function (err, messages) {\n // don't send all the responses to all the watches again... just to self one\n if (err) {\n callback(err);\n }\n\n if(utils.isArray(messages)) {\n messages.forEach(function (message) {\n callback(null, message);\n });\n }\n });\n }\n};\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method pollFilter\n@param {Object} self\n*/\nvar pollFilter = function(self) {\n\n var onMessage = function (error, messages) {\n if (error) {\n return self.callbacks.forEach(function (callback) {\n callback(error);\n });\n }\n\n if(utils.isArray(messages)) {\n messages.forEach(function (message) {\n message = self.formatter ? self.formatter(message) : message;\n self.callbacks.forEach(function (callback) {\n callback(null, message);\n });\n });\n }\n };\n\n self.requestManager.startPolling({\n method: self.implementation.poll.call,\n params: [self.filterId],\n }, self.filterId, onMessage, self.stopWatching.bind(self));\n\n};\n\nvar Filter = function (requestManager, options, methods, formatter, callback) {\n var self = this;\n var implementation = {};\n methods.forEach(function (method) {\n method.setRequestManager(requestManager);\n method.attachToObject(implementation);\n });\n this.requestManager = requestManager;\n this.options = getOptions(options);\n this.implementation = implementation;\n this.filterId = null;\n this.callbacks = [];\n this.getLogsCallbacks = [];\n this.pollFilters = [];\n this.formatter = formatter;\n this.implementation.newFilter(this.options, function(error, id){\n if(error) {\n self.callbacks.forEach(function(cb){\n cb(error);\n });\n } else {\n self.filterId = id;\n\n // check if there are get pending callbacks as a consequence\n // of calling get() with filterId unassigned.\n self.getLogsCallbacks.forEach(function (cb){\n self.get(cb);\n });\n self.getLogsCallbacks = [];\n\n // get filter logs for the already existing watch calls\n self.callbacks.forEach(function(cb){\n getLogsAtStart(self, cb);\n });\n if(self.callbacks.length > 0)\n pollFilter(self);\n\n // start to watch immediately\n if(typeof callback === 'function') {\n return self.watch(callback);\n }\n }\n });\n\n return this;\n};\n\nFilter.prototype.watch = function (callback) {\n this.callbacks.push(callback);\n\n if(this.filterId) {\n getLogsAtStart(this, callback);\n pollFilter(this);\n }\n\n return this;\n};\n\nFilter.prototype.stopWatching = function () {\n this.requestManager.stopPolling(this.filterId);\n // remove filter async\n this.implementation.uninstallFilter(this.filterId, function(){});\n this.callbacks = [];\n};\n\nFilter.prototype.get = function (callback) {\n var self = this;\n if (utils.isFunction(callback)) {\n if (this.filterId === null) {\n // If filterId is not set yet, call it back\n // when newFilter() assigns it.\n this.getLogsCallbacks.push(callback);\n } else {\n this.implementation.getLogs(this.filterId, function(err, res){\n if (err) {\n callback(err);\n } else {\n callback(null, res.map(function (log) {\n return self.formatter ? self.formatter(log) : log;\n }));\n }\n });\n }\n } else {\n if (this.filterId === null) {\n throw new Error('Filter ID Error: filter().get() can\\'t be chained synchronous, please provide a callback for the get() method.');\n }\n var logs = this.implementation.getLogs(this.filterId);\n return logs.map(function (log) {\n return self.formatter ? self.formatter(log) : log;\n });\n }\n\n return this;\n};\n\nmodule.exports = Filter;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file formatters.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\nvar config = require('../utils/config');\nvar Iban = require('./iban');\n\n/**\n * Should the format output to a big number\n *\n * @method outputBigNumberFormatter\n * @param {String|Number|BigNumber}\n * @returns {BigNumber} object\n */\nvar outputBigNumberFormatter = function (number) {\n return utils.toBigNumber(number);\n};\n\nvar isPredefinedBlockNumber = function (blockNumber) {\n return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';\n};\n\nvar inputDefaultBlockNumberFormatter = function (blockNumber) {\n if (blockNumber === undefined) {\n return config.defaultBlock;\n }\n return inputBlockNumberFormatter(blockNumber);\n};\n\nvar inputBlockNumberFormatter = function (blockNumber) {\n if (blockNumber === undefined) {\n return undefined;\n } else if (isPredefinedBlockNumber(blockNumber)) {\n return blockNumber;\n }\n return utils.toHex(blockNumber);\n};\n\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputCallFormatter\n * @param {Object} transaction options\n * @returns object\n*/\nvar inputCallFormatter = function (options){\n\n options.from = options.from || config.defaultAccount;\n\n if (options.from) {\n options.from = inputAddressFormatter(options.from);\n }\n\n if (options.to) { // it might be contract creation\n options.to = inputAddressFormatter(options.to);\n }\n\n ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {\n return options[key] !== undefined;\n }).forEach(function(key){\n options[key] = utils.fromDecimal(options[key]);\n });\n\n return options; \n};\n\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputTransactionFormatter\n * @param {Object} transaction options\n * @returns object\n*/\nvar inputTransactionFormatter = function (options){\n\n options.from = options.from || config.defaultAccount;\n options.from = inputAddressFormatter(options.from);\n\n if (options.to) { // it might be contract creation\n options.to = inputAddressFormatter(options.to);\n }\n\n ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {\n return options[key] !== undefined;\n }).forEach(function(key){\n options[key] = utils.fromDecimal(options[key]);\n });\n\n return options; \n};\n\n/**\n * Formats the output of a transaction to its proper values\n * \n * @method outputTransactionFormatter\n * @param {Object} tx\n * @returns {Object}\n*/\nvar outputTransactionFormatter = function (tx){\n if(tx.blockNumber !== null)\n tx.blockNumber = utils.toDecimal(tx.blockNumber);\n if(tx.transactionIndex !== null)\n tx.transactionIndex = utils.toDecimal(tx.transactionIndex);\n tx.nonce = utils.toDecimal(tx.nonce);\n tx.gas = utils.toDecimal(tx.gas);\n tx.gasPrice = utils.toBigNumber(tx.gasPrice);\n tx.value = utils.toBigNumber(tx.value);\n return tx;\n};\n\n/**\n * Formats the output of a transaction receipt to its proper values\n * \n * @method outputTransactionReceiptFormatter\n * @param {Object} receipt\n * @returns {Object}\n*/\nvar outputTransactionReceiptFormatter = function (receipt){\n if(receipt.blockNumber !== null)\n receipt.blockNumber = utils.toDecimal(receipt.blockNumber);\n if(receipt.transactionIndex !== null)\n receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);\n receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);\n receipt.gasUsed = utils.toDecimal(receipt.gasUsed);\n\n if(utils.isArray(receipt.logs)) {\n receipt.logs = receipt.logs.map(function(log){\n return outputLogFormatter(log);\n });\n }\n\n return receipt;\n};\n\n/**\n * Formats the output of a block to its proper values\n *\n * @method outputBlockFormatter\n * @param {Object} block \n * @returns {Object}\n*/\nvar outputBlockFormatter = function(block) {\n\n // transform to number\n block.gasLimit = utils.toDecimal(block.gasLimit);\n block.gasUsed = utils.toDecimal(block.gasUsed);\n block.size = utils.toDecimal(block.size);\n block.timestamp = utils.toDecimal(block.timestamp);\n if(block.number !== null)\n block.number = utils.toDecimal(block.number);\n\n block.difficulty = utils.toBigNumber(block.difficulty);\n block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);\n\n if (utils.isArray(block.transactions)) {\n block.transactions.forEach(function(item){\n if(!utils.isString(item))\n return outputTransactionFormatter(item);\n });\n }\n\n return block;\n};\n\n/**\n * Formats the output of a log\n * \n * @method outputLogFormatter\n * @param {Object} log object\n * @returns {Object} log\n*/\nvar outputLogFormatter = function(log) {\n if(log.blockNumber !== null)\n log.blockNumber = utils.toDecimal(log.blockNumber);\n if(log.transactionIndex !== null)\n log.transactionIndex = utils.toDecimal(log.transactionIndex);\n if(log.logIndex !== null)\n log.logIndex = utils.toDecimal(log.logIndex);\n\n return log;\n};\n\n/**\n * Formats the input of a whisper post and converts all values to HEX\n *\n * @method inputPostFormatter\n * @param {Object} transaction object\n * @returns {Object}\n*/\nvar inputPostFormatter = function(post) {\n\n // post.payload = utils.toHex(post.payload);\n post.ttl = utils.fromDecimal(post.ttl);\n post.workToProve = utils.fromDecimal(post.workToProve);\n post.priority = utils.fromDecimal(post.priority);\n\n // fallback\n if (!utils.isArray(post.topics)) {\n post.topics = post.topics ? [post.topics] : [];\n }\n\n // format the following options\n post.topics = post.topics.map(function(topic){\n // convert only if not hex\n return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);\n });\n\n return post; \n};\n\n/**\n * Formats the output of a received post message\n *\n * @method outputPostFormatter\n * @param {Object}\n * @returns {Object}\n */\nvar outputPostFormatter = function(post){\n\n post.expiry = utils.toDecimal(post.expiry);\n post.sent = utils.toDecimal(post.sent);\n post.ttl = utils.toDecimal(post.ttl);\n post.workProved = utils.toDecimal(post.workProved);\n // post.payloadRaw = post.payload;\n // post.payload = utils.toAscii(post.payload);\n\n // if (utils.isJson(post.payload)) {\n // post.payload = JSON.parse(post.payload);\n // }\n\n // format the following options\n if (!post.topics) {\n post.topics = [];\n }\n post.topics = post.topics.map(function(topic){\n return utils.toAscii(topic);\n });\n\n return post;\n};\n\nvar inputAddressFormatter = function (address) {\n var iban = new Iban(address);\n if (iban.isValid() && iban.isDirect()) {\n return '0x' + iban.address();\n } else if (utils.isStrictAddress(address)) {\n return address;\n } else if (utils.isAddress(address)) {\n return '0x' + address;\n }\n throw 'invalid address';\n};\n\n\nvar outputSyncingFormatter = function(result) {\n\n result.startingBlock = utils.toDecimal(result.startingBlock);\n result.currentBlock = utils.toDecimal(result.currentBlock);\n result.highestBlock = utils.toDecimal(result.highestBlock);\n\n return result;\n};\n\nmodule.exports = {\n inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,\n inputBlockNumberFormatter: inputBlockNumberFormatter,\n inputCallFormatter: inputCallFormatter,\n inputTransactionFormatter: inputTransactionFormatter,\n inputAddressFormatter: inputAddressFormatter,\n inputPostFormatter: inputPostFormatter,\n outputBigNumberFormatter: outputBigNumberFormatter,\n outputTransactionFormatter: outputTransactionFormatter,\n outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,\n outputBlockFormatter: outputBlockFormatter,\n outputLogFormatter: outputLogFormatter,\n outputPostFormatter: outputPostFormatter,\n outputSyncingFormatter: outputSyncingFormatter\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file function.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar coder = require('../solidity/coder');\nvar utils = require('../utils/utils');\nvar formatters = require('./formatters');\nvar sha3 = require('../utils/sha3');\n\n/**\n * This prototype should be used to call/sendTransaction to solidity functions\n */\nvar SolidityFunction = function (eth, json, address) {\n this._eth = eth;\n this._inputTypes = json.inputs.map(function (i) {\n return i.type;\n });\n this._outputTypes = json.outputs.map(function (i) {\n return i.type;\n });\n this._constant = json.constant;\n this._name = utils.transformToFullName(json);\n this._address = address;\n};\n\nSolidityFunction.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\nSolidityFunction.prototype.extractDefaultBlock = function (args) {\n if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {\n return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!\n }\n};\n\n/**\n * Should be used to create payload from arguments\n *\n * @method toPayload\n * @param {Array} solidity function params\n * @param {Object} optional payload options\n */\nSolidityFunction.prototype.toPayload = function (args) {\n var options = {};\n if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {\n options = args[args.length - 1];\n }\n options.to = this._address;\n options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);\n return options;\n};\n\n/**\n * Should be used to get function signature\n *\n * @method signature\n * @return {String} function signature\n */\nSolidityFunction.prototype.signature = function () {\n return sha3(this._name).slice(0, 8);\n};\n\n\nSolidityFunction.prototype.unpackOutput = function (output) {\n if (!output) {\n return;\n }\n\n output = output.length >= 2 ? output.slice(2) : output;\n var result = coder.decodeParams(this._outputTypes, output);\n return result.length === 1 ? result[0] : result;\n};\n\n/**\n * Calls a contract function.\n *\n * @method call\n * @param {...Object} Contract function arguments\n * @param {function} If the last argument is a function, the contract function\n * call will be asynchronous, and the callback will be passed the\n * error and result.\n * @return {String} output bytes\n */\nSolidityFunction.prototype.call = function () {\n var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });\n var callback = this.extractCallback(args);\n var defaultBlock = this.extractDefaultBlock(args);\n var payload = this.toPayload(args);\n\n\n if (!callback) {\n var output = this._eth.call(payload, defaultBlock);\n return this.unpackOutput(output);\n } \n \n var self = this;\n this._eth.call(payload, defaultBlock, function (error, output) {\n callback(error, self.unpackOutput(output));\n });\n};\n\n/**\n * Should be used to sendTransaction to solidity function\n *\n * @method sendTransaction\n */\nSolidityFunction.prototype.sendTransaction = function () {\n var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n\n if (!callback) {\n return this._eth.sendTransaction(payload);\n }\n\n this._eth.sendTransaction(payload, callback);\n};\n\n/**\n * Should be used to estimateGas of solidity function\n *\n * @method estimateGas\n */\nSolidityFunction.prototype.estimateGas = function () {\n var args = Array.prototype.slice.call(arguments);\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n\n if (!callback) {\n return this._eth.estimateGas(payload);\n }\n\n this._eth.estimateGas(payload, callback);\n};\n\n/**\n * Return the encoded data of the call\n *\n * @method getData\n * @return {String} the encoded data\n */\nSolidityFunction.prototype.getData = function () {\n var args = Array.prototype.slice.call(arguments);\n var payload = this.toPayload(args);\n\n return payload.data;\n};\n\n/**\n * Should be used to get function display name\n *\n * @method displayName\n * @return {String} display name of the function\n */\nSolidityFunction.prototype.displayName = function () {\n return utils.extractDisplayName(this._name);\n};\n\n/**\n * Should be used to get function type name\n *\n * @method typeName\n * @return {String} type name of the function\n */\nSolidityFunction.prototype.typeName = function () {\n return utils.extractTypeName(this._name);\n};\n\n/**\n * Should be called to get rpc requests from solidity function\n *\n * @method request\n * @returns {Object}\n */\nSolidityFunction.prototype.request = function () {\n var args = Array.prototype.slice.call(arguments);\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n var format = this.unpackOutput.bind(this);\n \n return {\n method: this._constant ? 'eth_call' : 'eth_sendTransaction',\n callback: callback,\n params: [payload], \n format: format\n };\n};\n\n/**\n * Should be called to execute function\n *\n * @method execute\n */\nSolidityFunction.prototype.execute = function () {\n var transaction = !this._constant;\n\n // send transaction\n if (transaction) {\n return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));\n }\n\n // call\n return this.call.apply(this, Array.prototype.slice.call(arguments));\n};\n\n/**\n * Should be called to attach function to contract\n *\n * @method attachToContract\n * @param {Contract}\n */\nSolidityFunction.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n execute.request = this.request.bind(this);\n execute.call = this.call.bind(this);\n execute.sendTransaction = this.sendTransaction.bind(this);\n execute.estimateGas = this.estimateGas.bind(this);\n execute.getData = this.getData.bind(this);\n var displayName = this.displayName();\n if (!contract[displayName]) {\n contract[displayName] = execute;\n }\n contract[displayName][this.typeName()] = execute; // circular!!!!\n};\n\nmodule.exports = SolidityFunction;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file httpprovider.js\n * @authors:\n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar errors = require('./errors');\n\n// workaround to use httpprovider in different envs\nvar XMLHttpRequest; // jshint ignore: line\n\n// meteor server environment\nif (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line\n XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line\n\n// browser\n} else if (typeof window !== 'undefined' && window.XMLHttpRequest) {\n XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line\n\n// node\n} else {\n XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line\n}\n\n/**\n * HttpProvider should be used to send rpc calls over http\n */\nvar HttpProvider = function (host) {\n this.host = host || 'http://localhost:8545';\n};\n\n/**\n * Should be called to prepare new XMLHttpRequest\n *\n * @method prepareRequest\n * @param {Boolean} true if request should be async\n * @return {XMLHttpRequest} object\n */\nHttpProvider.prototype.prepareRequest = function (async) {\n var request = new XMLHttpRequest();\n request.open('POST', this.host, async);\n request.setRequestHeader('Content-Type','application/json');\n return request;\n};\n\n/**\n * Should be called to make sync request\n *\n * @method send\n * @param {Object} payload\n * @return {Object} result\n */\nHttpProvider.prototype.send = function (payload) {\n var request = this.prepareRequest(false);\n\n try {\n request.send(JSON.stringify(payload));\n } catch(error) {\n throw errors.InvalidConnection(this.host);\n }\n\n var result = request.responseText;\n\n try {\n result = JSON.parse(result);\n } catch(e) {\n throw errors.InvalidResponse(request.responseText); \n }\n\n return result;\n};\n\n/**\n * Should be used to make async request\n *\n * @method sendAsync\n * @param {Object} payload\n * @param {Function} callback triggered on end with (err, result)\n */\nHttpProvider.prototype.sendAsync = function (payload, callback) {\n var request = this.prepareRequest(true); \n\n request.onreadystatechange = function() {\n if (request.readyState === 4) {\n var result = request.responseText;\n var error = null;\n\n try {\n result = JSON.parse(result);\n } catch(e) {\n error = errors.InvalidResponse(request.responseText); \n }\n\n callback(error, result);\n }\n };\n \n try {\n request.send(JSON.stringify(payload));\n } catch(error) {\n callback(errors.InvalidConnection(this.host));\n }\n};\n\n/**\n * Synchronously tries to make Http request\n *\n * @method isConnected\n * @return {Boolean} returns true if request haven't failed. Otherwise false\n */\nHttpProvider.prototype.isConnected = function() {\n try {\n this.send({\n id: 9999999999,\n jsonrpc: '2.0',\n method: 'net_listening',\n params: []\n });\n return true;\n } catch(e) {\n return false;\n }\n};\n\nmodule.exports = HttpProvider;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file iban.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar BigNumber = require('bignumber.js');\n\nvar padLeft = function (string, bytes) {\n var result = string;\n while (result.length < bytes * 2) {\n result = '00' + result;\n }\n return result;\n};\n\n/**\n * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to\n * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.\n *\n * @method iso13616Prepare\n * @param {String} iban the IBAN\n * @returns {String} the prepared IBAN\n */\nvar iso13616Prepare = function (iban) {\n var A = 'A'.charCodeAt(0);\n var Z = 'Z'.charCodeAt(0);\n\n iban = iban.toUpperCase();\n iban = iban.substr(4) + iban.substr(0,4);\n\n return iban.split('').map(function(n){\n var code = n.charCodeAt(0);\n if (code >= A && code <= Z){\n // A = 10, B = 11, ... Z = 35\n return code - A + 10;\n } else {\n return n;\n }\n }).join('');\n};\n\n/**\n * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.\n *\n * @method mod9710\n * @param {String} iban\n * @returns {Number}\n */\nvar mod9710 = function (iban) {\n var remainder = iban,\n block;\n\n while (remainder.length > 2){\n block = remainder.slice(0, 9);\n remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);\n }\n\n return parseInt(remainder, 10) % 97;\n};\n\n/**\n * This prototype should be used to create iban object from iban correct string\n *\n * @param {String} iban\n */\nvar Iban = function (iban) {\n this._iban = iban;\n};\n\n/**\n * This method should be used to create iban object from ethereum address\n *\n * @method fromAddress\n * @param {String} address\n * @return {Iban} the IBAN object\n */\nIban.fromAddress = function (address) {\n var asBn = new BigNumber(address, 16);\n var base36 = asBn.toString(36);\n var padded = padLeft(base36, 15);\n return Iban.fromBban(padded.toUpperCase());\n};\n\n/**\n * Convert the passed BBAN to an IBAN for this country specification.\n * Please note that \"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\".\n * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n *\n * @method fromBban\n * @param {String} bban the BBAN to convert to IBAN\n * @returns {Iban} the IBAN object\n */\nIban.fromBban = function (bban) {\n var countryCode = 'XE';\n\n var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));\n var checkDigit = ('0' + (98 - remainder)).slice(-2);\n\n return new Iban(countryCode + checkDigit + bban);\n};\n\n/**\n * Should be used to create IBAN object for given institution and identifier\n *\n * @method createIndirect\n * @param {Object} options, required options are \"institution\" and \"identifier\"\n * @return {Iban} the IBAN object\n */\nIban.createIndirect = function (options) {\n return Iban.fromBban('ETH' + options.institution + options.identifier);\n};\n\n/**\n * Thos method should be used to check if given string is valid iban object\n *\n * @method isValid\n * @param {String} iban string\n * @return {Boolean} true if it is valid IBAN\n */\nIban.isValid = function (iban) {\n var i = new Iban(iban);\n return i.isValid();\n};\n\n/**\n * Should be called to check if iban is correct\n *\n * @method isValid\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isValid = function () {\n return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&\n mod9710(iso13616Prepare(this._iban)) === 1;\n};\n\n/**\n * Should be called to check if iban number is direct\n *\n * @method isDirect\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isDirect = function () {\n return this._iban.length === 34 || this._iban.length === 35;\n};\n\n/**\n * Should be called to check if iban number if indirect\n *\n * @method isIndirect\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isIndirect = function () {\n return this._iban.length === 20;\n};\n\n/**\n * Should be called to get iban checksum\n * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)\n *\n * @method checksum\n * @returns {String} checksum\n */\nIban.prototype.checksum = function () {\n return this._iban.substr(2, 2);\n};\n\n/**\n * Should be called to get institution identifier\n * eg. XREG\n *\n * @method institution\n * @returns {String} institution identifier\n */\nIban.prototype.institution = function () {\n return this.isIndirect() ? this._iban.substr(7, 4) : '';\n};\n\n/**\n * Should be called to get client identifier within institution\n * eg. GAVOFYORK\n *\n * @method client\n * @returns {String} client identifier\n */\nIban.prototype.client = function () {\n return this.isIndirect() ? this._iban.substr(11) : '';\n};\n\n/**\n * Should be called to get client direct address\n *\n * @method address\n * @returns {String} client direct address\n */\nIban.prototype.address = function () {\n if (this.isDirect()) {\n var base36 = this._iban.substr(4);\n var asBn = new BigNumber(base36, 36);\n return padLeft(asBn.toString(16), 20);\n } \n\n return '';\n};\n\nIban.prototype.toString = function () {\n return this._iban;\n};\n\nmodule.exports = Iban;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file ipcprovider.js\n * @authors:\n * Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar utils = require('../utils/utils');\nvar errors = require('./errors');\n\n\nvar IpcProvider = function (path, net) {\n var _this = this;\n this.responseCallbacks = {};\n this.path = path;\n \n this.connection = net.connect({path: this.path});\n\n this.connection.on('error', function(e){\n console.error('IPC Connection Error', e);\n _this._timeout();\n });\n\n this.connection.on('end', function(){\n _this._timeout();\n }); \n\n\n // LISTEN FOR CONNECTION RESPONSES\n this.connection.on('data', function(data) {\n /*jshint maxcomplexity: 6 */\n\n _this._parseResponse(data.toString()).forEach(function(result){\n\n var id = null;\n\n // get the id which matches the returned id\n if(utils.isArray(result)) {\n result.forEach(function(load){\n if(_this.responseCallbacks[load.id])\n id = load.id;\n });\n } else {\n id = result.id;\n }\n\n // fire the callback\n if(_this.responseCallbacks[id]) {\n _this.responseCallbacks[id](null, result);\n delete _this.responseCallbacks[id];\n }\n });\n });\n};\n\n/**\nWill parse the response and make an array out of it.\n\n@method _parseResponse\n@param {String} data\n*/\nIpcProvider.prototype._parseResponse = function(data) {\n var _this = this,\n returnValues = [];\n \n // DE-CHUNKER\n var dechunkedData = data\n .replace(/\\}[\\n\\r]?\\{/g,'}|--|{') // }{\n .replace(/\\}\\][\\n\\r]?\\[\\{/g,'}]|--|[{') // }][{\n .replace(/\\}[\\n\\r]?\\[\\{/g,'}|--|[{') // }[{\n .replace(/\\}\\][\\n\\r]?\\{/g,'}]|--|{') // }]{\n .split('|--|');\n\n dechunkedData.forEach(function(data){\n\n // prepend the last chunk\n if(_this.lastChunk)\n data = _this.lastChunk + data;\n\n var result = null;\n\n try {\n result = JSON.parse(data);\n\n } catch(e) {\n\n _this.lastChunk = data;\n\n // start timeout to cancel all requests\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunkTimeout = setTimeout(function(){\n _this._timeout();\n throw errors.InvalidResponse(data);\n }, 1000 * 15);\n\n return;\n }\n\n // cancel timeout and set chunk to null\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunk = null;\n\n if(result)\n returnValues.push(result);\n });\n\n return returnValues;\n};\n\n\n/**\nGet the adds a callback to the responseCallbacks object,\nwhich will be called if a response matching the response Id will arrive.\n\n@method _addResponseCallback\n*/\nIpcProvider.prototype._addResponseCallback = function(payload, callback) {\n var id = payload.id || payload[0].id;\n var method = payload.method || payload[0].method;\n\n this.responseCallbacks[id] = callback;\n this.responseCallbacks[id].method = method;\n};\n\n/**\nTimeout all requests when the end/error event is fired\n\n@method _timeout\n*/\nIpcProvider.prototype._timeout = function() {\n for(var key in this.responseCallbacks) {\n if(this.responseCallbacks.hasOwnProperty(key)){\n this.responseCallbacks[key](errors.InvalidConnection('on IPC'));\n delete this.responseCallbacks[key];\n }\n }\n};\n\n\n/**\nCheck if the current connection is still valid.\n\n@method isConnected\n*/\nIpcProvider.prototype.isConnected = function() {\n var _this = this;\n\n // try reconnect, when connection is gone\n if(!_this.connection.writable)\n _this.connection.connect({path: _this.path});\n\n return !!this.connection.writable;\n};\n\nIpcProvider.prototype.send = function (payload) {\n\n if(this.connection.writeSync) {\n var result;\n\n // try reconnect, when connection is gone\n if(!this.connection.writable)\n this.connection.connect({path: this.path});\n\n var data = this.connection.writeSync(JSON.stringify(payload));\n\n try {\n result = JSON.parse(data);\n } catch(e) {\n throw errors.InvalidResponse(data); \n }\n\n return result;\n\n } else {\n throw new Error('You tried to send \"'+ payload.method +'\" synchronously. Synchronous requests are not supported by the IPC provider.');\n }\n};\n\nIpcProvider.prototype.sendAsync = function (payload, callback) {\n // try reconnect, when connection is gone\n if(!this.connection.writable)\n this.connection.connect({path: this.path});\n\n\n this.connection.write(JSON.stringify(payload));\n this._addResponseCallback(payload, callback);\n};\n\nmodule.exports = IpcProvider;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file jsonrpc.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Jsonrpc = function () {\n // singleton pattern\n if (arguments.callee._singletonInstance) {\n return arguments.callee._singletonInstance;\n }\n arguments.callee._singletonInstance = this;\n\n this.messageId = 1;\n};\n\n/**\n * @return {Jsonrpc} singleton\n */\nJsonrpc.getInstance = function () {\n var instance = new Jsonrpc();\n return instance;\n};\n\n/**\n * Should be called to valid json create payload object\n *\n * @method toPayload\n * @param {Function} method of jsonrpc call, required\n * @param {Array} params, an array of method params, optional\n * @returns {Object} valid jsonrpc payload object\n */\nJsonrpc.prototype.toPayload = function (method, params) {\n if (!method)\n console.error('jsonrpc method should be specified!');\n\n return {\n jsonrpc: '2.0',\n method: method,\n params: params || [],\n id: this.messageId++\n };\n};\n\n/**\n * Should be called to check if jsonrpc response is valid\n *\n * @method isValidResponse\n * @param {Object}\n * @returns {Boolean} true if response is valid, otherwise false\n */\nJsonrpc.prototype.isValidResponse = function (response) {\n return !!response &&\n !response.error &&\n response.jsonrpc === '2.0' &&\n typeof response.id === 'number' &&\n response.result !== undefined; // only undefined is not valid json object\n};\n\n/**\n * Should be called to create batch payload object\n *\n * @method toBatchPayload\n * @param {Array} messages, an array of objects with method (required) and params (optional) fields\n * @returns {Array} batch payload\n */\nJsonrpc.prototype.toBatchPayload = function (messages) {\n var self = this;\n return messages.map(function (message) {\n return self.toPayload(message.method, message.params);\n });\n};\n\nmodule.exports = Jsonrpc;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file method.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\nvar errors = require('./errors');\n\nvar Method = function (options) {\n this.name = options.name;\n this.call = options.call;\n this.params = options.params || 0;\n this.inputFormatter = options.inputFormatter;\n this.outputFormatter = options.outputFormatter;\n this.requestManager = null;\n};\n\nMethod.prototype.setRequestManager = function (rm) {\n this.requestManager = rm;\n};\n\n/**\n * Should be used to determine name of the jsonrpc method based on arguments\n *\n * @method getCall\n * @param {Array} arguments\n * @return {String} name of jsonrpc method\n */\nMethod.prototype.getCall = function (args) {\n return utils.isFunction(this.call) ? this.call(args) : this.call;\n};\n\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nMethod.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\n/**\n * Should be called to check if the number of arguments is correct\n * \n * @method validateArgs\n * @param {Array} arguments\n * @throws {Error} if it is not\n */\nMethod.prototype.validateArgs = function (args) {\n if (args.length !== this.params) {\n throw errors.InvalidNumberOfParams();\n }\n};\n\n/**\n * Should be called to format input args of method\n * \n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nMethod.prototype.formatInput = function (args) {\n if (!this.inputFormatter) {\n return args;\n }\n\n return this.inputFormatter.map(function (formatter, index) {\n return formatter ? formatter(args[index]) : args[index];\n });\n};\n\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param {Object}\n * @return {Object}\n */\nMethod.prototype.formatOutput = function (result) {\n return this.outputFormatter && result ? this.outputFormatter(result) : result;\n};\n\n/**\n * Should create payload from given input args\n *\n * @method toPayload\n * @param {Array} args\n * @return {Object}\n */\nMethod.prototype.toPayload = function (args) {\n var call = this.getCall(args);\n var callback = this.extractCallback(args);\n var params = this.formatInput(args);\n this.validateArgs(params);\n\n return {\n method: call,\n params: params,\n callback: callback\n };\n};\n\nMethod.prototype.attachToObject = function (obj) {\n var func = this.buildCall();\n func.call = this.call; // TODO!!! that's ugly. filter.js uses it\n var name = this.name.split('.');\n if (name.length > 1) {\n obj[name[0]] = obj[name[0]] || {};\n obj[name[0]][name[1]] = func;\n } else {\n obj[name[0]] = func; \n }\n};\n\nMethod.prototype.buildCall = function() {\n var method = this;\n var send = function () {\n var payload = method.toPayload(Array.prototype.slice.call(arguments));\n if (payload.callback) {\n return method.requestManager.sendAsync(payload, function (err, result) {\n payload.callback(err, method.formatOutput(result));\n });\n }\n return method.formatOutput(method.requestManager.send(payload));\n };\n send.request = this.request.bind(this);\n return send;\n};\n\n/**\n * Should be called to create pure JSONRPC request which can be used in batch request\n *\n * @method request\n * @param {...} params\n * @return {Object} jsonrpc request\n */\nMethod.prototype.request = function () {\n var payload = this.toPayload(Array.prototype.slice.call(arguments));\n payload.format = this.formatOutput.bind(this);\n return payload;\n};\n\nmodule.exports = Method;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file db.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\n\nvar DB = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n \n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(web3._requestManager);\n });\n};\n\nvar methods = function () {\n var putString = new Method({\n name: 'putString',\n call: 'db_putString',\n params: 3\n });\n\n var getString = new Method({\n name: 'getString',\n call: 'db_getString',\n params: 2\n });\n\n var putHex = new Method({\n name: 'putHex',\n call: 'db_putHex',\n params: 3\n });\n\n var getHex = new Method({\n name: 'getHex',\n call: 'db_getHex',\n params: 2\n });\n\n return [\n putString, getString, putHex, getHex\n ];\n};\n\nmodule.exports = DB;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file eth.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar formatters = require('../formatters');\nvar utils = require('../../utils/utils');\nvar Method = require('../method');\nvar Property = require('../property');\nvar c = require('../../utils/config');\nvar Contract = require('../contract');\nvar watches = require('./watches');\nvar Filter = require('../filter');\nvar IsSyncing = require('../syncing');\nvar namereg = require('../namereg');\nvar Iban = require('../iban');\nvar transfer = require('../transfer');\n\nvar blockCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? \"eth_getBlockByHash\" : \"eth_getBlockByNumber\";\n};\n\nvar transactionFromBlockCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';\n};\n\nvar uncleCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';\n};\n\nvar getBlockTransactionCountCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';\n};\n\nvar uncleCountCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';\n};\n\nfunction Eth(web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n\n properties().forEach(function(p) { \n p.attachToObject(self);\n p.setRequestManager(self._requestManager);\n });\n\n\n this.iban = Iban;\n this.sendIBANTransaction = transfer.bind(null, this);\n}\n\nObject.defineProperty(Eth.prototype, 'defaultBlock', {\n get: function () {\n return c.defaultBlock;\n },\n set: function (val) {\n c.defaultBlock = val;\n return val;\n }\n});\n\nObject.defineProperty(Eth.prototype, 'defaultAccount', {\n get: function () {\n return c.defaultAccount;\n },\n set: function (val) {\n c.defaultAccount = val;\n return val;\n }\n});\n\nvar methods = function () {\n var getBalance = new Method({\n name: 'getBalance',\n call: 'eth_getBalance',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],\n outputFormatter: formatters.outputBigNumberFormatter\n });\n\n var getStorageAt = new Method({\n name: 'getStorageAt',\n call: 'eth_getStorageAt',\n params: 3,\n inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var getCode = new Method({\n name: 'getCode',\n call: 'eth_getCode',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var getBlock = new Method({\n name: 'getBlock',\n call: blockCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],\n outputFormatter: formatters.outputBlockFormatter\n });\n\n var getUncle = new Method({\n name: 'getUncle',\n call: uncleCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],\n outputFormatter: formatters.outputBlockFormatter,\n\n });\n\n var getCompilers = new Method({\n name: 'getCompilers',\n call: 'eth_getCompilers',\n params: 0\n });\n\n var getBlockTransactionCount = new Method({\n name: 'getBlockTransactionCount',\n call: getBlockTransactionCountCall,\n params: 1,\n inputFormatter: [formatters.inputBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var getBlockUncleCount = new Method({\n name: 'getBlockUncleCount',\n call: uncleCountCall,\n params: 1,\n inputFormatter: [formatters.inputBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var getTransaction = new Method({\n name: 'getTransaction',\n call: 'eth_getTransactionByHash',\n params: 1,\n outputFormatter: formatters.outputTransactionFormatter\n });\n\n var getTransactionFromBlock = new Method({\n name: 'getTransactionFromBlock',\n call: transactionFromBlockCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],\n outputFormatter: formatters.outputTransactionFormatter\n });\n\n var getTransactionReceipt = new Method({\n name: 'getTransactionReceipt',\n call: 'eth_getTransactionReceipt',\n params: 1,\n outputFormatter: formatters.outputTransactionReceiptFormatter\n });\n\n var getTransactionCount = new Method({\n name: 'getTransactionCount',\n call: 'eth_getTransactionCount',\n params: 2,\n inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var sendRawTransaction = new Method({\n name: 'sendRawTransaction',\n call: 'eth_sendRawTransaction',\n params: 1,\n inputFormatter: [null]\n });\n\n var sendTransaction = new Method({\n name: 'sendTransaction',\n call: 'eth_sendTransaction',\n params: 1,\n inputFormatter: [formatters.inputTransactionFormatter]\n });\n\n var sign = new Method({\n name: 'sign',\n call: 'eth_sign',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, null]\n });\n\n var call = new Method({\n name: 'call',\n call: 'eth_call',\n params: 2,\n inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var estimateGas = new Method({\n name: 'estimateGas',\n call: 'eth_estimateGas',\n params: 1,\n inputFormatter: [formatters.inputCallFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var compileSolidity = new Method({\n name: 'compile.solidity',\n call: 'eth_compileSolidity',\n params: 1\n });\n\n var compileLLL = new Method({\n name: 'compile.lll',\n call: 'eth_compileLLL',\n params: 1\n });\n\n var compileSerpent = new Method({\n name: 'compile.serpent',\n call: 'eth_compileSerpent',\n params: 1\n });\n\n var submitWork = new Method({\n name: 'submitWork',\n call: 'eth_submitWork',\n params: 3\n });\n\n var getWork = new Method({\n name: 'getWork',\n call: 'eth_getWork',\n params: 0\n });\n\n return [\n getBalance,\n getStorageAt,\n getCode,\n getBlock,\n getUncle,\n getCompilers,\n getBlockTransactionCount,\n getBlockUncleCount,\n getTransaction,\n getTransactionFromBlock,\n getTransactionReceipt,\n getTransactionCount,\n call,\n estimateGas,\n sendRawTransaction,\n sendTransaction,\n sign,\n compileSolidity,\n compileLLL,\n compileSerpent,\n submitWork,\n getWork\n ];\n};\n\n\nvar properties = function () {\n return [\n new Property({\n name: 'coinbase',\n getter: 'eth_coinbase'\n }),\n new Property({\n name: 'mining',\n getter: 'eth_mining'\n }),\n new Property({\n name: 'hashrate',\n getter: 'eth_hashrate',\n outputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'syncing',\n getter: 'eth_syncing',\n outputFormatter: formatters.outputSyncingFormatter\n }),\n new Property({\n name: 'gasPrice',\n getter: 'eth_gasPrice',\n outputFormatter: formatters.outputBigNumberFormatter\n }),\n new Property({\n name: 'accounts',\n getter: 'eth_accounts'\n }),\n new Property({\n name: 'blockNumber',\n getter: 'eth_blockNumber',\n outputFormatter: utils.toDecimal\n })\n ];\n};\n\nEth.prototype.contract = function (abi) {\n var factory = new Contract(this, abi);\n return factory;\n};\n\nEth.prototype.filter = function (fil, callback) {\n return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback);\n};\n\nEth.prototype.namereg = function () {\n return this.contract(namereg.global.abi).at(namereg.global.address);\n};\n\nEth.prototype.icapNamereg = function () {\n return this.contract(namereg.icap.abi).at(namereg.icap.address);\n};\n\nEth.prototype.isSyncing = function (callback) {\n return new IsSyncing(this._requestManager, callback);\n};\n\nmodule.exports = Eth;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file eth.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../../utils/utils');\nvar Property = require('../property');\n\nvar Net = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n properties().forEach(function(p) { \n p.attachToObject(self);\n p.setRequestManager(web3._requestManager);\n });\n};\n\n/// @returns an array of objects describing web3.eth api properties\nvar properties = function () {\n return [\n new Property({\n name: 'listening',\n getter: 'net_listening'\n }),\n new Property({\n name: 'peerCount',\n getter: 'net_peerCount',\n outputFormatter: utils.toDecimal\n })\n ];\n};\n\nmodule.exports = Net;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file eth.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar Method = require('../method');\nvar Property = require('../property');\n\nfunction Personal(web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) {\n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n\n properties().forEach(function(p) {\n p.attachToObject(self);\n p.setRequestManager(self._requestManager);\n });\n}\n\nvar methods = function () {\n var newAccount = new Method({\n name: 'newAccount',\n call: 'personal_newAccount',\n params: 1,\n inputFormatter: [null]\n });\n\n var unlockAccount = new Method({\n name: 'unlockAccount',\n call: 'personal_unlockAccount',\n params: 3,\n inputFormatter: [null, null, null]\n });\n\n return [\n newAccount,\n unlockAccount\n ];\n};\n\nvar properties = function () {\n return [\n new Property({\n name: 'listAccounts',\n getter: 'personal_listAccounts'\n })\n ];\n};\n\n\nmodule.exports = Personal;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file shh.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\nvar formatters = require('../formatters');\nvar Filter = require('../filter');\nvar watches = require('./watches');\n\nvar Shh = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n};\n\nShh.prototype.filter = function (fil, callback) {\n return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback);\n};\n\nvar methods = function () { \n\n var post = new Method({\n name: 'post', \n call: 'shh_post', \n params: 1,\n inputFormatter: [formatters.inputPostFormatter]\n });\n\n var newIdentity = new Method({\n name: 'newIdentity',\n call: 'shh_newIdentity',\n params: 0\n });\n\n var hasIdentity = new Method({\n name: 'hasIdentity',\n call: 'shh_hasIdentity',\n params: 1\n });\n\n var newGroup = new Method({\n name: 'newGroup',\n call: 'shh_newGroup',\n params: 0\n });\n\n var addToGroup = new Method({\n name: 'addToGroup',\n call: 'shh_addToGroup',\n params: 0\n });\n\n return [\n post,\n newIdentity,\n hasIdentity,\n newGroup,\n addToGroup\n ];\n};\n\nmodule.exports = Shh;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file watches.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\n\n/// @returns an array of objects describing web3.eth.filter api methods\nvar eth = function () {\n var newFilterCall = function (args) {\n var type = args[0];\n\n switch(type) {\n case 'latest':\n args.shift();\n this.params = 0;\n return 'eth_newBlockFilter';\n case 'pending':\n args.shift();\n this.params = 0;\n return 'eth_newPendingTransactionFilter';\n default:\n return 'eth_newFilter';\n }\n };\n\n var newFilter = new Method({\n name: 'newFilter',\n call: newFilterCall,\n params: 1\n });\n\n var uninstallFilter = new Method({\n name: 'uninstallFilter',\n call: 'eth_uninstallFilter',\n params: 1\n });\n\n var getLogs = new Method({\n name: 'getLogs',\n call: 'eth_getFilterLogs',\n params: 1\n });\n\n var poll = new Method({\n name: 'poll',\n call: 'eth_getFilterChanges',\n params: 1\n });\n\n return [\n newFilter,\n uninstallFilter,\n getLogs,\n poll\n ];\n};\n\n/// @returns an array of objects describing web3.shh.watch api methods\nvar shh = function () {\n var newFilter = new Method({\n name: 'newFilter',\n call: 'shh_newFilter',\n params: 1\n });\n\n var uninstallFilter = new Method({\n name: 'uninstallFilter',\n call: 'shh_uninstallFilter',\n params: 1\n });\n\n var getLogs = new Method({\n name: 'getLogs',\n call: 'shh_getMessages',\n params: 1\n });\n\n var poll = new Method({\n name: 'poll',\n call: 'shh_getFilterChanges',\n params: 1\n });\n\n return [\n newFilter,\n uninstallFilter,\n getLogs,\n poll\n ];\n};\n\nmodule.exports = {\n eth: eth,\n shh: shh\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file namereg.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar globalRegistrarAbi = require('../contracts/GlobalRegistrar.json');\nvar icapRegistrarAbi= require('../contracts/ICAPRegistrar.json');\n\nvar globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';\nvar icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';\n\nmodule.exports = {\n global: {\n abi: globalRegistrarAbi,\n address: globalNameregAddress\n },\n icap: {\n abi: icapRegistrarAbi,\n address: icapNameregAddress\n }\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file property.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\n\nvar Property = function (options) {\n this.name = options.name;\n this.getter = options.getter;\n this.setter = options.setter;\n this.outputFormatter = options.outputFormatter;\n this.inputFormatter = options.inputFormatter;\n this.requestManager = null;\n};\n\nProperty.prototype.setRequestManager = function (rm) {\n this.requestManager = rm;\n};\n\n/**\n * Should be called to format input args of method\n * \n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nProperty.prototype.formatInput = function (arg) {\n return this.inputFormatter ? this.inputFormatter(arg) : arg;\n};\n\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param {Object}\n * @return {Object}\n */\nProperty.prototype.formatOutput = function (result) {\n return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;\n};\n\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nProperty.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\n\n/**\n * Should attach function to method\n * \n * @method attachToObject\n * @param {Object}\n * @param {Function}\n */\nProperty.prototype.attachToObject = function (obj) {\n var proto = {\n get: this.buildGet(),\n enumerable: true \n };\n\n var names = this.name.split('.');\n var name = names[0];\n if (names.length > 1) {\n obj[names[0]] = obj[names[0]] || {};\n obj = obj[names[0]];\n name = names[1];\n }\n\n Object.defineProperty(obj, name, proto);\n obj[asyncGetterName(name)] = this.buildAsyncGet();\n};\n\nvar asyncGetterName = function (name) {\n return 'get' + name.charAt(0).toUpperCase() + name.slice(1);\n};\n\nProperty.prototype.buildGet = function () {\n var property = this;\n return function get() {\n return property.formatOutput(property.requestManager.send({\n method: property.getter\n })); \n };\n};\n\nProperty.prototype.buildAsyncGet = function () {\n var property = this;\n var get = function (callback) {\n property.requestManager.sendAsync({\n method: property.getter\n }, function (err, result) {\n callback(err, property.formatOutput(result));\n });\n };\n get.request = this.request.bind(this);\n return get;\n};\n\n/**\n * Should be called to create pure JSONRPC request which can be used in batch request\n *\n * @method request\n * @param {...} params\n * @return {Object} jsonrpc request\n */\nProperty.prototype.request = function () {\n var payload = {\n method: this.getter,\n params: [],\n callback: this.extractCallback(Array.prototype.slice.call(arguments))\n };\n payload.format = this.formatOutput.bind(this);\n return payload;\n};\n\nmodule.exports = Property;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file requestmanager.js\n * @author Jeffrey Wilcke \n * @author Marek Kotewicz \n * @author Marian Oancea \n * @author Fabian Vogelsteller \n * @author Gav Wood \n * @date 2014\n */\n\nvar Jsonrpc = require('./jsonrpc');\nvar utils = require('../utils/utils');\nvar c = require('../utils/config');\nvar errors = require('./errors');\n\n/**\n * It's responsible for passing messages to providers\n * It's also responsible for polling the ethereum node for incoming messages\n * Default poll timeout is 1 second\n * Singleton\n */\nvar RequestManager = function (provider) {\n this.provider = provider;\n this.polls = {};\n this.timeout = null;\n};\n\n/**\n * Should be used to synchronously send request\n *\n * @method send\n * @param {Object} data\n * @return {Object}\n */\nRequestManager.prototype.send = function (data) {\n if (!this.provider) {\n console.error(errors.InvalidProvider());\n return null;\n }\n\n var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);\n var result = this.provider.send(payload);\n\n if (!Jsonrpc.getInstance().isValidResponse(result)) {\n throw errors.InvalidResponse(result);\n }\n\n return result.result;\n};\n\n/**\n * Should be used to asynchronously send request\n *\n * @method sendAsync\n * @param {Object} data\n * @param {Function} callback\n */\nRequestManager.prototype.sendAsync = function (data, callback) {\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n\n var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);\n this.provider.sendAsync(payload, function (err, result) {\n if (err) {\n return callback(err);\n }\n \n if (!Jsonrpc.getInstance().isValidResponse(result)) {\n return callback(errors.InvalidResponse(result));\n }\n\n callback(null, result.result);\n });\n};\n\n/**\n * Should be called to asynchronously send batch request\n *\n * @method sendBatch\n * @param {Array} batch data\n * @param {Function} callback\n */\nRequestManager.prototype.sendBatch = function (data, callback) {\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n\n var payload = Jsonrpc.getInstance().toBatchPayload(data);\n\n this.provider.sendAsync(payload, function (err, results) {\n if (err) {\n return callback(err);\n }\n\n if (!utils.isArray(results)) {\n return callback(errors.InvalidResponse(results));\n }\n\n callback(err, results);\n }); \n};\n\n/**\n * Should be used to set provider of request manager\n *\n * @method setProvider\n * @param {Object}\n */\nRequestManager.prototype.setProvider = function (p) {\n this.provider = p;\n};\n\n/**\n * Should be used to start polling\n *\n * @method startPolling\n * @param {Object} data\n * @param {Number} pollId\n * @param {Function} callback\n * @param {Function} uninstall\n *\n * @todo cleanup number of params\n */\nRequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {\n this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall};\n\n\n // start polling\n if (!this.timeout) {\n this.poll();\n }\n};\n\n/**\n * Should be used to stop polling for filter with given id\n *\n * @method stopPolling\n * @param {Number} pollId\n */\nRequestManager.prototype.stopPolling = function (pollId) {\n delete this.polls[pollId];\n\n // stop polling\n if(Object.keys(this.polls).length === 0 && this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n};\n\n/**\n * Should be called to reset the polling mechanism of the request manager\n *\n * @method reset\n */\nRequestManager.prototype.reset = function (keepIsSyncing) {\n /*jshint maxcomplexity:5 */\n\n for (var key in this.polls) {\n // remove all polls, except sync polls,\n // they need to be removed manually by calling syncing.stopWatching()\n if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) {\n this.polls[key].uninstall();\n delete this.polls[key];\n }\n }\n\n // stop polling\n if(Object.keys(this.polls).length === 0 && this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n};\n\n/**\n * Should be called to poll for changes on filter with given id\n *\n * @method poll\n */\nRequestManager.prototype.poll = function () {\n /*jshint maxcomplexity: 6 */\n this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);\n\n if (Object.keys(this.polls).length === 0) {\n return;\n }\n\n if (!this.provider) {\n console.error(errors.InvalidProvider());\n return;\n }\n\n var pollsData = [];\n var pollsIds = [];\n for (var key in this.polls) {\n pollsData.push(this.polls[key].data);\n pollsIds.push(key);\n }\n\n if (pollsData.length === 0) {\n return;\n }\n\n var payload = Jsonrpc.getInstance().toBatchPayload(pollsData);\n \n // map the request id to they poll id\n var pollsIdMap = {};\n payload.forEach(function(load, index){\n pollsIdMap[load.id] = pollsIds[index];\n });\n\n\n var self = this;\n this.provider.sendAsync(payload, function (error, results) {\n\n\n // TODO: console log?\n if (error) {\n return;\n }\n\n if (!utils.isArray(results)) {\n throw errors.InvalidResponse(results);\n }\n results.map(function (result) {\n var id = pollsIdMap[result.id];\n\n // make sure the filter is still installed after arrival of the request\n if (self.polls[id]) {\n result.callback = self.polls[id].callback;\n return result;\n } else\n return false;\n }).filter(function (result) {\n return !!result; \n }).filter(function (result) {\n var valid = Jsonrpc.getInstance().isValidResponse(result);\n if (!valid) {\n result.callback(errors.InvalidResponse(result));\n }\n return valid;\n }).forEach(function (result) {\n result.callback(null, result.result);\n });\n });\n};\n\nmodule.exports = RequestManager;\n\n", - "\n\nvar Settings = function () {\n this.defaultBlock = 'latest';\n this.defaultAccount = undefined;\n};\n\nmodule.exports = Settings;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file syncing.js\n * @authors:\n * Fabian Vogelsteller \n * @date 2015\n */\n\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\n\nvar count = 1;\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method pollSyncing\n@param {Object} self\n*/\nvar pollSyncing = function(self) {\n\n var onMessage = function (error, sync) {\n if (error) {\n return self.callbacks.forEach(function (callback) {\n callback(error);\n });\n }\n\n if(utils.isObject(sync) && sync.startingBlock)\n sync = formatters.outputSyncingFormatter(sync);\n\n self.callbacks.forEach(function (callback) {\n if (self.lastSyncState !== sync) {\n \n // call the callback with true first so the app can stop anything, before receiving the sync data\n if(!self.lastSyncState && utils.isObject(sync))\n callback(null, true);\n \n // call on the next CPU cycle, so the actions of the sync stop can be processes first\n setTimeout(function() {\n callback(null, sync);\n }, 0);\n \n self.lastSyncState = sync;\n }\n });\n };\n\n self.requestManager.startPolling({\n method: 'eth_syncing',\n params: [],\n }, self.pollId, onMessage, self.stopWatching.bind(self));\n\n};\n\nvar IsSyncing = function (requestManager, callback) {\n this.requestManager = requestManager;\n this.pollId = 'syncPoll_'+ count++;\n this.callbacks = [];\n this.addCallback(callback);\n this.lastSyncState = false;\n pollSyncing(this);\n\n return this;\n};\n\nIsSyncing.prototype.addCallback = function (callback) {\n if(callback)\n this.callbacks.push(callback);\n return this;\n};\n\nIsSyncing.prototype.stopWatching = function () {\n this.requestManager.stopPolling(this.pollId);\n this.callbacks = [];\n};\n\nmodule.exports = IsSyncing;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file transfer.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar Iban = require('./iban');\nvar exchangeAbi = require('../contracts/SmartExchange.json');\n\n/**\n * Should be used to make Iban transfer\n *\n * @method transfer\n * @param {String} from\n * @param {String} to iban\n * @param {Value} value to be tranfered\n * @param {Function} callback, callback\n */\nvar transfer = function (eth, from, to, value, callback) {\n var iban = new Iban(to); \n if (!iban.isValid()) {\n throw new Error('invalid iban address');\n }\n\n if (iban.isDirect()) {\n return transferToAddress(eth, from, iban.address(), value, callback);\n }\n \n if (!callback) {\n var address = eth.icapNamereg().addr(iban.institution());\n return deposit(eth, from, address, value, iban.client());\n }\n\n eth.icapNamereg().addr(iban.institution(), function (err, address) {\n return deposit(eth, from, address, value, iban.client(), callback);\n });\n \n};\n\n/**\n * Should be used to transfer funds to certain address\n *\n * @method transferToAddress\n * @param {String} from\n * @param {String} to\n * @param {Value} value to be tranfered\n * @param {Function} callback, callback\n */\nvar transferToAddress = function (eth, from, to, value, callback) {\n return eth.sendTransaction({\n address: to,\n from: from,\n value: value\n }, callback);\n};\n\n/**\n * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)\n *\n * @method deposit\n * @param {String} from\n * @param {String} to\n * @param {Value} value to be transfered\n * @param {String} client unique identifier\n * @param {Function} callback, callback\n */\nvar deposit = function (eth, from, to, value, client, callback) {\n var abi = exchangeAbi;\n return eth.contract(abi).at(to).deposit(client, {\n from: from,\n value: value\n }, callback);\n};\n\nmodule.exports = transfer;\n\n", - null, - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\t function F() {}\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t F.prototype = this;\n\t var subtype = new F();\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init')) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex != -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);\n\t var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\n\t return WordArray.create(words, nBytes);\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t var keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t i--;\n\t }\n\t data.sigBytes = i + 1;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA1 = C_algo.SHA1;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA1\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA1,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t var Wih = Wi.high = M[offset + i * 2] | 0;\n\t var Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t var Wil = gamma0l + Wi7l;\n\t var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t var Wil = Wil + gamma1l;\n\t var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t var Wil = Wil + Wi16l;\n\t var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));", - "/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n", - "/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */\n\n;(function (global) {\n 'use strict';\n\n /*\n bignumber.js v2.0.7\n A JavaScript library for arbitrary-precision arithmetic.\n https://github.com/MikeMcl/bignumber.js\n Copyright (c) 2015 Michael Mclaughlin \n MIT Expat Licence\n */\n\n\n var BigNumber, crypto, parseNumeric,\n isNumeric = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\n mathceil = Math.ceil,\n mathfloor = Math.floor,\n notBool = ' not a boolean or binary digit',\n roundingMode = 'rounding mode',\n tooManyDigits = 'number type has more than 15 significant digits',\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_',\n BASE = 1e14,\n LOG_BASE = 14,\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\n SQRT_BASE = 1e7,\n\n /*\n * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\n * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an\n * exception is thrown (if ERRORS is true).\n */\n MAX = 1E9; // 0 to MAX_INT32\n\n\n /*\n * Create and return a BigNumber constructor.\n */\n function another(configObj) {\n var div,\n\n // id tracks the caller function, so its name can be included in error messages.\n id = 0,\n P = BigNumber.prototype,\n ONE = new BigNumber(1),\n\n\n /********************************* EDITABLE DEFAULTS **********************************/\n\n\n /*\n * The default values below must be integers within the inclusive ranges stated.\n * The values can also be changed at run-time using BigNumber.config.\n */\n\n // The maximum number of decimal places for operations involving division.\n DECIMAL_PLACES = 20, // 0 to MAX\n\n /*\n * The rounding mode used when rounding to the above decimal places, and when using\n * toExponential, toFixed, toFormat and toPrecision, and round (default value).\n * UP 0 Away from zero.\n * DOWN 1 Towards zero.\n * CEIL 2 Towards +Infinity.\n * FLOOR 3 Towards -Infinity.\n * HALF_UP 4 Towards nearest neighbour. If equidistant, up.\n * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\n * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\n * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\n * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\n */\n ROUNDING_MODE = 4, // 0 to 8\n\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\n\n // The exponent value at and beneath which toString returns exponential notation.\n // Number type: -7\n TO_EXP_NEG = -7, // 0 to -MAX\n\n // The exponent value at and above which toString returns exponential notation.\n // Number type: 21\n TO_EXP_POS = 21, // 0 to MAX\n\n // RANGE : [MIN_EXP, MAX_EXP]\n\n // The minimum exponent value, beneath which underflow to zero occurs.\n // Number type: -324 (5e-324)\n MIN_EXP = -1e7, // -1 to -MAX\n\n // The maximum exponent value, above which overflow to Infinity occurs.\n // Number type: 308 (1.7976931348623157e+308)\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\n MAX_EXP = 1e7, // 1 to MAX\n\n // Whether BigNumber Errors are ever thrown.\n ERRORS = true, // true or false\n\n // Change to intValidatorNoErrors if ERRORS is false.\n isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors\n\n // Whether to use cryptographically-secure random number generation, if available.\n CRYPTO = false, // true or false\n\n /*\n * The modulo mode used when calculating the modulus: a mod n.\n * The quotient (q = a / n) is calculated according to the corresponding rounding mode.\n * The remainder (r) is calculated as: r = a - n * q.\n *\n * UP 0 The remainder is positive if the dividend is negative, else is negative.\n * DOWN 1 The remainder has the same sign as the dividend.\n * This modulo mode is commonly known as 'truncated division' and is\n * equivalent to (a % n) in JavaScript.\n * FLOOR 3 The remainder has the same sign as the divisor (Python %).\n * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\n * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\n * The remainder is always positive.\n *\n * The truncated division, floored division, Euclidian division and IEEE 754 remainder\n * modes are commonly used for the modulus operation.\n * Although the other rounding modes can also be used, they may not give useful results.\n */\n MODULO_MODE = 1, // 0 to 9\n\n // The maximum number of significant digits of the result of the toPower operation.\n // If POW_PRECISION is 0, there will be unlimited significant digits.\n POW_PRECISION = 100, // 0 to MAX\n\n // The format specification used by the BigNumber.prototype.toFormat method.\n FORMAT = {\n decimalSeparator: '.',\n groupSeparator: ',',\n groupSize: 3,\n secondaryGroupSize: 0,\n fractionGroupSeparator: '\\xA0', // non-breaking space\n fractionGroupSize: 0\n };\n\n\n /******************************************************************************************/\n\n\n // CONSTRUCTOR\n\n\n /*\n * The BigNumber constructor and exported function.\n * Create and return a new instance of a BigNumber object.\n *\n * n {number|string|BigNumber} A numeric value.\n * [b] {number} The base of n. Integer, 2 to 64 inclusive.\n */\n function BigNumber( n, b ) {\n var c, e, i, num, len, str,\n x = this;\n\n // Enable constructor usage without new.\n if ( !( x instanceof BigNumber ) ) {\n\n // 'BigNumber() constructor call without new: {n}'\n if (ERRORS) raise( 26, 'constructor call without new', n );\n return new BigNumber( n, b );\n }\n\n // 'new BigNumber() base not an integer: {b}'\n // 'new BigNumber() base out of range: {b}'\n if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) {\n\n // Duplicate.\n if ( n instanceof BigNumber ) {\n x.s = n.s;\n x.e = n.e;\n x.c = ( n = n.c ) ? n.slice() : n;\n id = 0;\n return;\n }\n\n if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) {\n x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1;\n\n // Fast path for integers.\n if ( n === ~~n ) {\n for ( e = 0, i = n; i >= 10; i /= 10, e++ );\n x.e = e;\n x.c = [n];\n id = 0;\n return;\n }\n\n str = n + '';\n } else {\n if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num );\n x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;\n }\n } else {\n b = b | 0;\n str = n + '';\n\n // Ensure return value is rounded to DECIMAL_PLACES as with other bases.\n // Allow exponential notation to be used with base 10 argument.\n if ( b == 10 ) {\n x = new BigNumber( n instanceof BigNumber ? n : str );\n return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE );\n }\n\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\n // Any number in exponential form will fail due to the [Ee][+-].\n if ( ( num = typeof n == 'number' ) && n * 0 != 0 ||\n !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) +\n '(?:\\\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) {\n return parseNumeric( x, str, num, b );\n }\n\n if (num) {\n x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1;\n\n if ( ERRORS && str.replace( /^0\\.0*|\\./, '' ).length > 15 ) {\n\n // 'new BigNumber() number type has more than 15 significant digits: {n}'\n raise( id, tooManyDigits, n );\n }\n\n // Prevent later check for length on converted number.\n num = false;\n } else {\n x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;\n }\n\n str = convertBase( str, 10, b, x.s );\n }\n\n // Decimal point?\n if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' );\n\n // Exponential form?\n if ( ( i = str.search( /e/i ) ) > 0 ) {\n\n // Determine exponent.\n if ( e < 0 ) e = i;\n e += +str.slice( i + 1 );\n str = str.substring( 0, i );\n } else if ( e < 0 ) {\n\n // Integer.\n e = str.length;\n }\n\n // Determine leading zeros.\n for ( i = 0; str.charCodeAt(i) === 48; i++ );\n\n // Determine trailing zeros.\n for ( len = str.length; str.charCodeAt(--len) === 48; );\n str = str.slice( i, len + 1 );\n\n if (str) {\n len = str.length;\n\n // Disallow numbers with over 15 significant digits if number type.\n // 'new BigNumber() number type has more than 15 significant digits: {n}'\n if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n );\n\n e = e - i - 1;\n\n // Overflow?\n if ( e > MAX_EXP ) {\n\n // Infinity.\n x.c = x.e = null;\n\n // Underflow?\n } else if ( e < MIN_EXP ) {\n\n // Zero.\n x.c = [ x.e = 0 ];\n } else {\n x.e = e;\n x.c = [];\n\n // Transform base\n\n // e is the base 10 exponent.\n // i is where to slice str to get the first element of the coefficient array.\n i = ( e + 1 ) % LOG_BASE;\n if ( e < 0 ) i += LOG_BASE;\n\n if ( i < len ) {\n if (i) x.c.push( +str.slice( 0, i ) );\n\n for ( len -= LOG_BASE; i < len; ) {\n x.c.push( +str.slice( i, i += LOG_BASE ) );\n }\n\n str = str.slice(i);\n i = LOG_BASE - str.length;\n } else {\n i -= len;\n }\n\n for ( ; i--; str += '0' );\n x.c.push( +str );\n }\n } else {\n\n // Zero.\n x.c = [ x.e = 0 ];\n }\n\n id = 0;\n }\n\n\n // CONSTRUCTOR PROPERTIES\n\n\n BigNumber.another = another;\n\n BigNumber.ROUND_UP = 0;\n BigNumber.ROUND_DOWN = 1;\n BigNumber.ROUND_CEIL = 2;\n BigNumber.ROUND_FLOOR = 3;\n BigNumber.ROUND_HALF_UP = 4;\n BigNumber.ROUND_HALF_DOWN = 5;\n BigNumber.ROUND_HALF_EVEN = 6;\n BigNumber.ROUND_HALF_CEIL = 7;\n BigNumber.ROUND_HALF_FLOOR = 8;\n BigNumber.EUCLID = 9;\n\n\n /*\n * Configure infrequently-changing library-wide settings.\n *\n * Accept an object or an argument list, with one or many of the following properties or\n * parameters respectively:\n *\n * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive\n * ROUNDING_MODE {number} Integer, 0 to 8 inclusive\n * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or\n * [integer -MAX to 0 incl., 0 to MAX incl.]\n * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\n * [integer -MAX to -1 incl., integer 1 to MAX incl.]\n * ERRORS {boolean|number} true, false, 1 or 0\n * CRYPTO {boolean|number} true, false, 1 or 0\n * MODULO_MODE {number} 0 to 9 inclusive\n * POW_PRECISION {number} 0 to MAX inclusive\n * FORMAT {object} See BigNumber.prototype.toFormat\n * decimalSeparator {string}\n * groupSeparator {string}\n * groupSize {number}\n * secondaryGroupSize {number}\n * fractionGroupSeparator {string}\n * fractionGroupSize {number}\n *\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\n *\n * E.g.\n * BigNumber.config(20, 4) is equivalent to\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\n *\n * Ignore properties/parameters set to null or undefined.\n * Return an object with the properties current values.\n */\n BigNumber.config = function () {\n var v, p,\n i = 0,\n r = {},\n a = arguments,\n o = a[0],\n has = o && typeof o == 'object'\n ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; }\n : function () { if ( a.length > i ) return ( v = a[i++] ) != null; };\n\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\n // 'config() DECIMAL_PLACES not an integer: {v}'\n // 'config() DECIMAL_PLACES out of range: {v}'\n if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) {\n DECIMAL_PLACES = v | 0;\n }\n r[p] = DECIMAL_PLACES;\n\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\n // 'config() ROUNDING_MODE not an integer: {v}'\n // 'config() ROUNDING_MODE out of range: {v}'\n if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) {\n ROUNDING_MODE = v | 0;\n }\n r[p] = ROUNDING_MODE;\n\n // EXPONENTIAL_AT {number|number[]}\n // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive].\n // 'config() EXPONENTIAL_AT not an integer: {v}'\n // 'config() EXPONENTIAL_AT out of range: {v}'\n if ( has( p = 'EXPONENTIAL_AT' ) ) {\n\n if ( isArray(v) ) {\n if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) {\n TO_EXP_NEG = v[0] | 0;\n TO_EXP_POS = v[1] | 0;\n }\n } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {\n TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 );\n }\n }\n r[p] = [ TO_EXP_NEG, TO_EXP_POS ];\n\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\n // 'config() RANGE not an integer: {v}'\n // 'config() RANGE cannot be zero: {v}'\n // 'config() RANGE out of range: {v}'\n if ( has( p = 'RANGE' ) ) {\n\n if ( isArray(v) ) {\n if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) {\n MIN_EXP = v[0] | 0;\n MAX_EXP = v[1] | 0;\n }\n } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {\n if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 );\n else if (ERRORS) raise( 2, p + ' cannot be zero', v );\n }\n }\n r[p] = [ MIN_EXP, MAX_EXP ];\n\n // ERRORS {boolean|number} true, false, 1 or 0.\n // 'config() ERRORS not a boolean or binary digit: {v}'\n if ( has( p = 'ERRORS' ) ) {\n\n if ( v === !!v || v === 1 || v === 0 ) {\n id = 0;\n isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors;\n } else if (ERRORS) {\n raise( 2, p + notBool, v );\n }\n }\n r[p] = ERRORS;\n\n // CRYPTO {boolean|number} true, false, 1 or 0.\n // 'config() CRYPTO not a boolean or binary digit: {v}'\n // 'config() crypto unavailable: {crypto}'\n if ( has( p = 'CRYPTO' ) ) {\n\n if ( v === !!v || v === 1 || v === 0 ) {\n CRYPTO = !!( v && crypto && typeof crypto == 'object' );\n if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto );\n } else if (ERRORS) {\n raise( 2, p + notBool, v );\n }\n }\n r[p] = CRYPTO;\n\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\n // 'config() MODULO_MODE not an integer: {v}'\n // 'config() MODULO_MODE out of range: {v}'\n if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) {\n MODULO_MODE = v | 0;\n }\n r[p] = MODULO_MODE;\n\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\n // 'config() POW_PRECISION not an integer: {v}'\n // 'config() POW_PRECISION out of range: {v}'\n if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) {\n POW_PRECISION = v | 0;\n }\n r[p] = POW_PRECISION;\n\n // FORMAT {object}\n // 'config() FORMAT not an object: {v}'\n if ( has( p = 'FORMAT' ) ) {\n\n if ( typeof v == 'object' ) {\n FORMAT = v;\n } else if (ERRORS) {\n raise( 2, p + ' not an object', v );\n }\n }\n r[p] = FORMAT;\n\n return r;\n };\n\n\n /*\n * Return a new BigNumber whose value is the maximum of the arguments.\n *\n * arguments {number|string|BigNumber}\n */\n BigNumber.max = function () { return maxOrMin( arguments, P.lt ); };\n\n\n /*\n * Return a new BigNumber whose value is the minimum of the arguments.\n *\n * arguments {number|string|BigNumber}\n */\n BigNumber.min = function () { return maxOrMin( arguments, P.gt ); };\n\n\n /*\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\n * zeros are produced).\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n *\n * 'random() decimal places not an integer: {dp}'\n * 'random() decimal places out of range: {dp}'\n * 'random() crypto unavailable: {crypto}'\n */\n BigNumber.random = (function () {\n var pow2_53 = 0x20000000000000;\n\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\n // Check if Math.random() produces more than 32 bits of randomness.\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\n ? function () { return mathfloor( Math.random() * pow2_53 ); }\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\n (Math.random() * 0x800000 | 0); };\n\n return function (dp) {\n var a, b, e, k, v,\n i = 0,\n c = [],\n rand = new BigNumber(ONE);\n\n dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0;\n k = mathceil( dp / LOG_BASE );\n\n if (CRYPTO) {\n\n // Browsers supporting crypto.getRandomValues.\n if ( crypto && crypto.getRandomValues ) {\n\n a = crypto.getRandomValues( new Uint32Array( k *= 2 ) );\n\n for ( ; i < k; ) {\n\n // 53 bits:\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\n // 11111 11111111 11111111\n // 0x20000 is 2^21.\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\n\n // Rejection sampling:\n // 0 <= v < 9007199254740992\n // Probability that v >= 9e15, is\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\n if ( v >= 9e15 ) {\n b = crypto.getRandomValues( new Uint32Array(2) );\n a[i] = b[0];\n a[i + 1] = b[1];\n } else {\n\n // 0 <= v <= 8999999999999999\n // 0 <= (v % 1e14) <= 99999999999999\n c.push( v % 1e14 );\n i += 2;\n }\n }\n i = k / 2;\n\n // Node.js supporting crypto.randomBytes.\n } else if ( crypto && crypto.randomBytes ) {\n\n // buffer\n a = crypto.randomBytes( k *= 7 );\n\n for ( ; i < k; ) {\n\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\n // 0x100000000 is 2^32, 0x1000000 is 2^24\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\n // 0 <= v < 9007199254740992\n v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) +\n ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) +\n ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6];\n\n if ( v >= 9e15 ) {\n crypto.randomBytes(7).copy( a, i );\n } else {\n\n // 0 <= (v % 1e14) <= 99999999999999\n c.push( v % 1e14 );\n i += 7;\n }\n }\n i = k / 7;\n } else if (ERRORS) {\n raise( 14, 'crypto unavailable', crypto );\n }\n }\n\n // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false.\n if (!i) {\n\n for ( ; i < k; ) {\n v = random53bitInt();\n if ( v < 9e15 ) c[i++] = v % 1e14;\n }\n }\n\n k = c[--i];\n dp %= LOG_BASE;\n\n // Convert trailing digits to zeros according to dp.\n if ( k && dp ) {\n v = POWS_TEN[LOG_BASE - dp];\n c[i] = mathfloor( k / v ) * v;\n }\n\n // Remove trailing elements which are zero.\n for ( ; c[i] === 0; c.pop(), i-- );\n\n // Zero?\n if ( i < 0 ) {\n c = [ e = 0 ];\n } else {\n\n // Remove leading elements which are zero and adjust exponent accordingly.\n for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE);\n\n // Count the digits of the first element of c to determine leading zeros, and...\n for ( i = 1, v = c[0]; v >= 10; v /= 10, i++);\n\n // adjust the exponent accordingly.\n if ( i < LOG_BASE ) e -= LOG_BASE - i;\n }\n\n rand.e = e;\n rand.c = c;\n return rand;\n };\n })();\n\n\n // PRIVATE FUNCTIONS\n\n\n // Convert a numeric string of baseIn to a numeric string of baseOut.\n function convertBase( str, baseOut, baseIn, sign ) {\n var d, e, k, r, x, xc, y,\n i = str.indexOf( '.' ),\n dp = DECIMAL_PLACES,\n rm = ROUNDING_MODE;\n\n if ( baseIn < 37 ) str = str.toLowerCase();\n\n // Non-integer.\n if ( i >= 0 ) {\n k = POW_PRECISION;\n\n // Unlimited precision.\n POW_PRECISION = 0;\n str = str.replace( '.', '' );\n y = new BigNumber(baseIn);\n x = y.pow( str.length - i );\n POW_PRECISION = k;\n\n // Convert str as if an integer, then restore the fraction part by dividing the\n // result by its base raised to a power.\n y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut );\n y.e = y.c.length;\n }\n\n // Convert the number as integer.\n xc = toBaseOut( str, baseIn, baseOut );\n e = k = xc.length;\n\n // Remove trailing zeros.\n for ( ; xc[--k] == 0; xc.pop() );\n if ( !xc[0] ) return '0';\n\n if ( i < 0 ) {\n --e;\n } else {\n x.c = xc;\n x.e = e;\n\n // sign is needed for correct rounding.\n x.s = sign;\n x = div( x, y, dp, rm, baseOut );\n xc = x.c;\n r = x.r;\n e = x.e;\n }\n\n d = e + dp + 1;\n\n // The rounding digit, i.e. the digit to the right of the digit that may be rounded up.\n i = xc[d];\n k = baseOut / 2;\n r = r || d < 0 || xc[d + 1] != null;\n\n r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )\n : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\n rm == ( x.s < 0 ? 8 : 7 ) );\n\n if ( d < 1 || !xc[0] ) {\n\n // 1^-dp or 0.\n str = r ? toFixedPoint( '1', -dp ) : '0';\n } else {\n xc.length = d;\n\n if (r) {\n\n // Rounding up may mean the previous digit has to be rounded up and so on.\n for ( --baseOut; ++xc[--d] > baseOut; ) {\n xc[d] = 0;\n\n if ( !d ) {\n ++e;\n xc.unshift(1);\n }\n }\n }\n\n // Determine trailing zeros.\n for ( k = xc.length; !xc[--k]; );\n\n // E.g. [4, 11, 15] becomes 4bf.\n for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) );\n str = toFixedPoint( str, e );\n }\n\n // The caller will add the sign.\n return str;\n }\n\n\n // Perform division in the specified base. Called by div and convertBase.\n div = (function () {\n\n // Assume non-zero x and k.\n function multiply( x, k, base ) {\n var m, temp, xlo, xhi,\n carry = 0,\n i = x.length,\n klo = k % SQRT_BASE,\n khi = k / SQRT_BASE | 0;\n\n for ( x = x.slice(); i--; ) {\n xlo = x[i] % SQRT_BASE;\n xhi = x[i] / SQRT_BASE | 0;\n m = khi * xlo + xhi * klo;\n temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry;\n carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi;\n x[i] = temp % base;\n }\n\n if (carry) x.unshift(carry);\n\n return x;\n }\n\n function compare( a, b, aL, bL ) {\n var i, cmp;\n\n if ( aL != bL ) {\n cmp = aL > bL ? 1 : -1;\n } else {\n\n for ( i = cmp = 0; i < aL; i++ ) {\n\n if ( a[i] != b[i] ) {\n cmp = a[i] > b[i] ? 1 : -1;\n break;\n }\n }\n }\n return cmp;\n }\n\n function subtract( a, b, aL, base ) {\n var i = 0;\n\n // Subtract b from a.\n for ( ; aL--; ) {\n a[aL] -= i;\n i = a[aL] < b[aL] ? 1 : 0;\n a[aL] = i * base + a[aL] - b[aL];\n }\n\n // Remove leading zeros.\n for ( ; !a[0] && a.length > 1; a.shift() );\n }\n\n // x: dividend, y: divisor.\n return function ( x, y, dp, rm, base ) {\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\n yL, yz,\n s = x.s == y.s ? 1 : -1,\n xc = x.c,\n yc = y.c;\n\n // Either NaN, Infinity or 0?\n if ( !xc || !xc[0] || !yc || !yc[0] ) {\n\n return new BigNumber(\n\n // Return NaN if either NaN, or both Infinity or 0.\n !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN :\n\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\n );\n }\n\n q = new BigNumber(s);\n qc = q.c = [];\n e = x.e - y.e;\n s = dp + e + 1;\n\n if ( !base ) {\n base = BASE;\n e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE );\n s = s / LOG_BASE | 0;\n }\n\n // Result exponent may be one less then the current value of e.\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\n for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ );\n if ( yc[i] > ( xc[i] || 0 ) ) e--;\n\n if ( s < 0 ) {\n qc.push(1);\n more = true;\n } else {\n xL = xc.length;\n yL = yc.length;\n i = 0;\n s += 2;\n\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\n\n n = mathfloor( base / ( yc[0] + 1 ) );\n\n // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1.\n // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) {\n if ( n > 1 ) {\n yc = multiply( yc, n, base );\n xc = multiply( xc, n, base );\n yL = yc.length;\n xL = xc.length;\n }\n\n xi = yL;\n rem = xc.slice( 0, yL );\n remL = rem.length;\n\n // Add zeros to make remainder as long as divisor.\n for ( ; remL < yL; rem[remL++] = 0 );\n yz = yc.slice();\n yz.unshift(0);\n yc0 = yc[0];\n if ( yc[1] >= base / 2 ) yc0++;\n // Not necessary, but to prevent trial digit n > base, when using base 3.\n // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15;\n\n do {\n n = 0;\n\n // Compare divisor and remainder.\n cmp = compare( yc, rem, yL, remL );\n\n // If divisor < remainder.\n if ( cmp < 0 ) {\n\n // Calculate trial digit, n.\n\n rem0 = rem[0];\n if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 );\n\n // n is how many times the divisor goes into the current remainder.\n n = mathfloor( rem0 / yc0 );\n\n // Algorithm:\n // 1. product = divisor * trial digit (n)\n // 2. if product > remainder: product -= divisor, n--\n // 3. remainder -= product\n // 4. if product was < remainder at 2:\n // 5. compare new remainder and divisor\n // 6. If remainder > divisor: remainder -= divisor, n++\n\n if ( n > 1 ) {\n\n // n may be > base only when base is 3.\n if (n >= base) n = base - 1;\n\n // product = divisor * trial digit.\n prod = multiply( yc, n, base );\n prodL = prod.length;\n remL = rem.length;\n\n // Compare product and remainder.\n // If product > remainder.\n // Trial digit n too high.\n // n is 1 too high about 5% of the time, and is not known to have\n // ever been more than 1 too high.\n while ( compare( prod, rem, prodL, remL ) == 1 ) {\n n--;\n\n // Subtract divisor from product.\n subtract( prod, yL < prodL ? yz : yc, prodL, base );\n prodL = prod.length;\n cmp = 1;\n }\n } else {\n\n // n is 0 or 1, cmp is -1.\n // If n is 0, there is no need to compare yc and rem again below,\n // so change cmp to 1 to avoid it.\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\n if ( n == 0 ) {\n\n // divisor < remainder, so n must be at least 1.\n cmp = n = 1;\n }\n\n // product = divisor\n prod = yc.slice();\n prodL = prod.length;\n }\n\n if ( prodL < remL ) prod.unshift(0);\n\n // Subtract product from remainder.\n subtract( rem, prod, remL, base );\n remL = rem.length;\n\n // If product was < remainder.\n if ( cmp == -1 ) {\n\n // Compare divisor and new remainder.\n // If divisor < new remainder, subtract divisor from remainder.\n // Trial digit n too low.\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\n while ( compare( yc, rem, yL, remL ) < 1 ) {\n n++;\n\n // Subtract divisor from remainder.\n subtract( rem, yL < remL ? yz : yc, remL, base );\n remL = rem.length;\n }\n }\n } else if ( cmp === 0 ) {\n n++;\n rem = [0];\n } // else cmp === 1 and n will be 0\n\n // Add the next digit, n, to the result array.\n qc[i++] = n;\n\n // Update the remainder.\n if ( rem[0] ) {\n rem[remL++] = xc[xi] || 0;\n } else {\n rem = [ xc[xi] ];\n remL = 1;\n }\n } while ( ( xi++ < xL || rem[0] != null ) && s-- );\n\n more = rem[0] != null;\n\n // Leading zero?\n if ( !qc[0] ) qc.shift();\n }\n\n if ( base == BASE ) {\n\n // To calculate q.e, first get the number of digits of qc[0].\n for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ );\n round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more );\n\n // Caller is convertBase.\n } else {\n q.e = e;\n q.r = +more;\n }\n\n return q;\n };\n })();\n\n\n /*\n * Return a string representing the value of BigNumber n in fixed-point or exponential\n * notation rounded to the specified decimal places or significant digits.\n *\n * n is a BigNumber.\n * i is the index of the last digit required (i.e. the digit that may be rounded up).\n * rm is the rounding mode.\n * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24.\n */\n function format( n, i, rm, caller ) {\n var c0, e, ne, len, str;\n\n rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode )\n ? rm | 0 : ROUNDING_MODE;\n\n if ( !n.c ) return n.toString();\n c0 = n.c[0];\n ne = n.e;\n\n if ( i == null ) {\n str = coeffToString( n.c );\n str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG\n ? toExponential( str, ne )\n : toFixedPoint( str, ne );\n } else {\n n = round( new BigNumber(n), i, rm );\n\n // n.e may have changed if the value was rounded up.\n e = n.e;\n\n str = coeffToString( n.c );\n len = str.length;\n\n // toPrecision returns exponential notation if the number of significant digits\n // specified is less than the number of digits necessary to represent the integer\n // part of the value in fixed-point notation.\n\n // Exponential notation.\n if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) {\n\n // Append zeros?\n for ( ; len < i; str += '0', len++ );\n str = toExponential( str, e );\n\n // Fixed-point notation.\n } else {\n i -= ne;\n str = toFixedPoint( str, e );\n\n // Append zeros?\n if ( e + 1 > len ) {\n if ( --i > 0 ) for ( str += '.'; i--; str += '0' );\n } else {\n i += e - len;\n if ( i > 0 ) {\n if ( e + 1 == len ) str += '.';\n for ( ; i--; str += '0' );\n }\n }\n }\n }\n\n return n.s < 0 && c0 ? '-' + str : str;\n }\n\n\n // Handle BigNumber.max and BigNumber.min.\n function maxOrMin( args, method ) {\n var m, n,\n i = 0;\n\n if ( isArray( args[0] ) ) args = args[0];\n m = new BigNumber( args[0] );\n\n for ( ; ++i < args.length; ) {\n n = new BigNumber( args[i] );\n\n // If any number is NaN, return NaN.\n if ( !n.s ) {\n m = n;\n break;\n } else if ( method.call( m, n ) ) {\n m = n;\n }\n }\n\n return m;\n }\n\n\n /*\n * Return true if n is an integer in range, otherwise throw.\n * Use for argument validation when ERRORS is true.\n */\n function intValidatorWithErrors( n, min, max, caller, name ) {\n if ( n < min || n > max || n != truncate(n) ) {\n raise( caller, ( name || 'decimal places' ) +\n ( n < min || n > max ? ' out of range' : ' not an integer' ), n );\n }\n\n return true;\n }\n\n\n /*\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\n * Called by minus, plus and times.\n */\n function normalise( n, c, e ) {\n var i = 1,\n j = c.length;\n\n // Remove trailing zeros.\n for ( ; !c[--j]; c.pop() );\n\n // Calculate the base 10 exponent. First get the number of digits of c[0].\n for ( j = c[0]; j >= 10; j /= 10, i++ );\n\n // Overflow?\n if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) {\n\n // Infinity.\n n.c = n.e = null;\n\n // Underflow?\n } else if ( e < MIN_EXP ) {\n\n // Zero.\n n.c = [ n.e = 0 ];\n } else {\n n.e = e;\n n.c = c;\n }\n\n return n;\n }\n\n\n // Handle values that fail the validity test in BigNumber.\n parseNumeric = (function () {\n var basePrefix = /^(-?)0([xbo])/i,\n dotAfter = /^([^.]+)\\.$/,\n dotBefore = /^\\.([^.]+)$/,\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\n whitespaceOrPlus = /^\\s*\\+|^\\s+|\\s+$/g;\n\n return function ( x, str, num, b ) {\n var base,\n s = num ? str : str.replace( whitespaceOrPlus, '' );\n\n // No exception on ±Infinity or NaN.\n if ( isInfinityOrNaN.test(s) ) {\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\n } else {\n if ( !num ) {\n\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\n s = s.replace( basePrefix, function ( m, p1, p2 ) {\n base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\n return !b || b == base ? p1 : m;\n });\n\n if (b) {\n base = b;\n\n // E.g. '1.' to '1', '.1' to '0.1'\n s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' );\n }\n\n if ( str != s ) return new BigNumber( s, base );\n }\n\n // 'new BigNumber() not a number: {n}'\n // 'new BigNumber() not a base {b} number: {n}'\n if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str );\n x.s = null;\n }\n\n x.c = x.e = null;\n id = 0;\n }\n })();\n\n\n // Throw a BigNumber Error.\n function raise( caller, msg, val ) {\n var error = new Error( [\n 'new BigNumber', // 0\n 'cmp', // 1\n 'config', // 2\n 'div', // 3\n 'divToInt', // 4\n 'eq', // 5\n 'gt', // 6\n 'gte', // 7\n 'lt', // 8\n 'lte', // 9\n 'minus', // 10\n 'mod', // 11\n 'plus', // 12\n 'precision', // 13\n 'random', // 14\n 'round', // 15\n 'shift', // 16\n 'times', // 17\n 'toDigits', // 18\n 'toExponential', // 19\n 'toFixed', // 20\n 'toFormat', // 21\n 'toFraction', // 22\n 'pow', // 23\n 'toPrecision', // 24\n 'toString', // 25\n 'BigNumber' // 26\n ][caller] + '() ' + msg + ': ' + val );\n\n error.name = 'BigNumber Error';\n id = 0;\n throw error;\n }\n\n\n /*\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\n * If r is truthy, it is known that there are more digits after the rounding digit.\n */\n function round( x, sd, rm, r ) {\n var d, i, j, k, n, ni, rd,\n xc = x.c,\n pows10 = POWS_TEN;\n\n // if x is not Infinity or NaN...\n if (xc) {\n\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\n // ni is the index of n within x.c.\n // d is the number of digits of n.\n // i is the index of rd within n including leading zeros.\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\n out: {\n\n // Get the number of digits of the first element of xc.\n for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ );\n i = sd - d;\n\n // If the rounding digit is in the first element of xc...\n if ( i < 0 ) {\n i += LOG_BASE;\n j = sd;\n n = xc[ ni = 0 ];\n\n // Get the rounding digit at index j of n.\n rd = n / pows10[ d - j - 1 ] % 10 | 0;\n } else {\n ni = mathceil( ( i + 1 ) / LOG_BASE );\n\n if ( ni >= xc.length ) {\n\n if (r) {\n\n // Needed by sqrt.\n for ( ; xc.length <= ni; xc.push(0) );\n n = rd = 0;\n d = 1;\n i %= LOG_BASE;\n j = i - LOG_BASE + 1;\n } else {\n break out;\n }\n } else {\n n = k = xc[ni];\n\n // Get the number of digits of n.\n for ( d = 1; k >= 10; k /= 10, d++ );\n\n // Get the index of rd within n.\n i %= LOG_BASE;\n\n // Get the index of rd within n, adjusted for leading zeros.\n // The number of leading zeros of n is given by LOG_BASE - d.\n j = i - LOG_BASE + d;\n\n // Get the rounding digit at index j of n.\n rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0;\n }\n }\n\n r = r || sd < 0 ||\n\n // Are there any non-zero digits after the rounding digit?\n // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\n xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] );\n\n r = rm < 4\n ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )\n : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 &&\n\n // Check whether the digit to the left of the rounding digit is odd.\n ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 ||\n rm == ( x.s < 0 ? 8 : 7 ) );\n\n if ( sd < 1 || !xc[0] ) {\n xc.length = 0;\n\n if (r) {\n\n // Convert sd to decimal places.\n sd -= x.e + 1;\n\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\n xc[0] = pows10[ sd % LOG_BASE ];\n x.e = -sd || 0;\n } else {\n\n // Zero.\n xc[0] = x.e = 0;\n }\n\n return x;\n }\n\n // Remove excess digits.\n if ( i == 0 ) {\n xc.length = ni;\n k = 1;\n ni--;\n } else {\n xc.length = ni + 1;\n k = pows10[ LOG_BASE - i ];\n\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\n // j > 0 means i > number of leading zeros of n.\n xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0;\n }\n\n // Round up?\n if (r) {\n\n for ( ; ; ) {\n\n // If the digit to be rounded up is in the first element of xc...\n if ( ni == 0 ) {\n\n // i will be the length of xc[0] before k is added.\n for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ );\n j = xc[0] += k;\n for ( k = 1; j >= 10; j /= 10, k++ );\n\n // if i != k the length has increased.\n if ( i != k ) {\n x.e++;\n if ( xc[0] == BASE ) xc[0] = 1;\n }\n\n break;\n } else {\n xc[ni] += k;\n if ( xc[ni] != BASE ) break;\n xc[ni--] = 0;\n k = 1;\n }\n }\n }\n\n // Remove trailing zeros.\n for ( i = xc.length; xc[--i] === 0; xc.pop() );\n }\n\n // Overflow? Infinity.\n if ( x.e > MAX_EXP ) {\n x.c = x.e = null;\n\n // Underflow? Zero.\n } else if ( x.e < MIN_EXP ) {\n x.c = [ x.e = 0 ];\n }\n }\n\n return x;\n }\n\n\n // PROTOTYPE/INSTANCE METHODS\n\n\n /*\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\n */\n P.absoluteValue = P.abs = function () {\n var x = new BigNumber(this);\n if ( x.s < 0 ) x.s = 1;\n return x;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole\n * number in the direction of Infinity.\n */\n P.ceil = function () {\n return round( new BigNumber(this), this.e + 1, 2 );\n };\n\n\n /*\n * Return\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\n * 0 if they have the same value,\n * or null if the value of either is NaN.\n */\n P.comparedTo = P.cmp = function ( y, b ) {\n id = 1;\n return compare( this, new BigNumber( y, b ) );\n };\n\n\n /*\n * Return the number of decimal places of the value of this BigNumber, or null if the value\n * of this BigNumber is ±Infinity or NaN.\n */\n P.decimalPlaces = P.dp = function () {\n var n, v,\n c = this.c;\n\n if ( !c ) return null;\n n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE;\n\n // Subtract the number of trailing zeros of the last number.\n if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- );\n if ( n < 0 ) n = 0;\n\n return n;\n };\n\n\n /*\n * n / 0 = I\n * n / N = N\n * n / I = 0\n * 0 / n = 0\n * 0 / 0 = N\n * 0 / N = N\n * 0 / I = 0\n * N / n = N\n * N / 0 = N\n * N / N = N\n * N / I = N\n * I / n = I\n * I / 0 = I\n * I / N = N\n * I / I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\n */\n P.dividedBy = P.div = function ( y, b ) {\n id = 3;\n return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE );\n };\n\n\n /*\n * Return a new BigNumber whose value is the integer part of dividing the value of this\n * BigNumber by the value of BigNumber(y, b).\n */\n P.dividedToIntegerBy = P.divToInt = function ( y, b ) {\n id = 4;\n return div( this, new BigNumber( y, b ), 0, 1 );\n };\n\n\n /*\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.equals = P.eq = function ( y, b ) {\n id = 5;\n return compare( this, new BigNumber( y, b ) ) === 0;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole\n * number in the direction of -Infinity.\n */\n P.floor = function () {\n return round( new BigNumber(this), this.e + 1, 3 );\n };\n\n\n /*\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.greaterThan = P.gt = function ( y, b ) {\n id = 6;\n return compare( this, new BigNumber( y, b ) ) > 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is greater than or equal to the value of\n * BigNumber(y, b), otherwise returns false.\n */\n P.greaterThanOrEqualTo = P.gte = function ( y, b ) {\n id = 7;\n return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0;\n\n };\n\n\n /*\n * Return true if the value of this BigNumber is a finite number, otherwise returns false.\n */\n P.isFinite = function () {\n return !!this.c;\n };\n\n\n /*\n * Return true if the value of this BigNumber is an integer, otherwise return false.\n */\n P.isInteger = P.isInt = function () {\n return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2;\n };\n\n\n /*\n * Return true if the value of this BigNumber is NaN, otherwise returns false.\n */\n P.isNaN = function () {\n return !this.s;\n };\n\n\n /*\n * Return true if the value of this BigNumber is negative, otherwise returns false.\n */\n P.isNegative = P.isNeg = function () {\n return this.s < 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is 0 or -0, otherwise returns false.\n */\n P.isZero = function () {\n return !!this.c && this.c[0] == 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.lessThan = P.lt = function ( y, b ) {\n id = 8;\n return compare( this, new BigNumber( y, b ) ) < 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is less than or equal to the value of\n * BigNumber(y, b), otherwise returns false.\n */\n P.lessThanOrEqualTo = P.lte = function ( y, b ) {\n id = 9;\n return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0;\n };\n\n\n /*\n * n - 0 = n\n * n - N = N\n * n - I = -I\n * 0 - n = -n\n * 0 - 0 = 0\n * 0 - N = N\n * 0 - I = -I\n * N - n = N\n * N - 0 = N\n * N - N = N\n * N - I = N\n * I - n = I\n * I - 0 = I\n * I - N = N\n * I - I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\n * BigNumber(y, b).\n */\n P.minus = P.sub = function ( y, b ) {\n var i, j, t, xLTy,\n x = this,\n a = x.s;\n\n id = 10;\n y = new BigNumber( y, b );\n b = y.s;\n\n // Either NaN?\n if ( !a || !b ) return new BigNumber(NaN);\n\n // Signs differ?\n if ( a != b ) {\n y.s = -b;\n return x.plus(y);\n }\n\n var xe = x.e / LOG_BASE,\n ye = y.e / LOG_BASE,\n xc = x.c,\n yc = y.c;\n\n if ( !xe || !ye ) {\n\n // Either Infinity?\n if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN );\n\n // Either zero?\n if ( !xc[0] || !yc[0] ) {\n\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\n return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x :\n\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\n ROUNDING_MODE == 3 ? -0 : 0 );\n }\n }\n\n xe = bitFloor(xe);\n ye = bitFloor(ye);\n xc = xc.slice();\n\n // Determine which is the bigger number.\n if ( a = xe - ye ) {\n\n if ( xLTy = a < 0 ) {\n a = -a;\n t = xc;\n } else {\n ye = xe;\n t = yc;\n }\n\n t.reverse();\n\n // Prepend zeros to equalise exponents.\n for ( b = a; b--; t.push(0) );\n t.reverse();\n } else {\n\n // Exponents equal. Check digit by digit.\n j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b;\n\n for ( a = b = 0; b < j; b++ ) {\n\n if ( xc[b] != yc[b] ) {\n xLTy = xc[b] < yc[b];\n break;\n }\n }\n }\n\n // x < y? Point xc to the array of the bigger number.\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\n\n b = ( j = yc.length ) - ( i = xc.length );\n\n // Append zeros to xc if shorter.\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\n if ( b > 0 ) for ( ; b--; xc[i++] = 0 );\n b = BASE - 1;\n\n // Subtract yc from xc.\n for ( ; j > a; ) {\n\n if ( xc[--j] < yc[j] ) {\n for ( i = j; i && !xc[--i]; xc[i] = b );\n --xc[i];\n xc[j] += BASE;\n }\n\n xc[j] -= yc[j];\n }\n\n // Remove leading zeros and adjust exponent accordingly.\n for ( ; xc[0] == 0; xc.shift(), --ye );\n\n // Zero?\n if ( !xc[0] ) {\n\n // Following IEEE 754 (2008) 6.3,\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\n y.c = [ y.e = 0 ];\n return y;\n }\n\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\n // for finite x and y.\n return normalise( y, xc, ye );\n };\n\n\n /*\n * n % 0 = N\n * n % N = N\n * n % I = n\n * 0 % n = 0\n * -0 % n = -0\n * 0 % 0 = N\n * 0 % N = N\n * 0 % I = 0\n * N % n = N\n * N % 0 = N\n * N % N = N\n * N % I = N\n * I % n = N\n * I % 0 = N\n * I % N = N\n * I % I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\n */\n P.modulo = P.mod = function ( y, b ) {\n var q, s,\n x = this;\n\n id = 11;\n y = new BigNumber( y, b );\n\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\n if ( !x.c || !y.s || y.c && !y.c[0] ) {\n return new BigNumber(NaN);\n\n // Return x if y is Infinity or x is zero.\n } else if ( !y.c || x.c && !x.c[0] ) {\n return new BigNumber(x);\n }\n\n if ( MODULO_MODE == 9 ) {\n\n // Euclidian division: q = sign(y) * floor(x / abs(y))\n // r = x - qy where 0 <= r < abs(y)\n s = y.s;\n y.s = 1;\n q = div( x, y, 0, 3 );\n y.s = s;\n q.s *= s;\n } else {\n q = div( x, y, 0, MODULO_MODE );\n }\n\n return x.minus( q.times(y) );\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber negated,\n * i.e. multiplied by -1.\n */\n P.negated = P.neg = function () {\n var x = new BigNumber(this);\n x.s = -x.s || null;\n return x;\n };\n\n\n /*\n * n + 0 = n\n * n + N = N\n * n + I = I\n * 0 + n = n\n * 0 + 0 = 0\n * 0 + N = N\n * 0 + I = I\n * N + n = N\n * N + 0 = N\n * N + N = N\n * N + I = N\n * I + n = I\n * I + 0 = I\n * I + N = N\n * I + I = I\n *\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\n * BigNumber(y, b).\n */\n P.plus = P.add = function ( y, b ) {\n var t,\n x = this,\n a = x.s;\n\n id = 12;\n y = new BigNumber( y, b );\n b = y.s;\n\n // Either NaN?\n if ( !a || !b ) return new BigNumber(NaN);\n\n // Signs differ?\n if ( a != b ) {\n y.s = -b;\n return x.minus(y);\n }\n\n var xe = x.e / LOG_BASE,\n ye = y.e / LOG_BASE,\n xc = x.c,\n yc = y.c;\n\n if ( !xe || !ye ) {\n\n // Return ±Infinity if either ±Infinity.\n if ( !xc || !yc ) return new BigNumber( a / 0 );\n\n // Either zero?\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\n if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 );\n }\n\n xe = bitFloor(xe);\n ye = bitFloor(ye);\n xc = xc.slice();\n\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\n if ( a = xe - ye ) {\n if ( a > 0 ) {\n ye = xe;\n t = yc;\n } else {\n a = -a;\n t = xc;\n }\n\n t.reverse();\n for ( ; a--; t.push(0) );\n t.reverse();\n }\n\n a = xc.length;\n b = yc.length;\n\n // Point xc to the longer array, and b to the shorter length.\n if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a;\n\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\n for ( a = 0; b; ) {\n a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0;\n xc[b] %= BASE;\n }\n\n if (a) {\n xc.unshift(a);\n ++ye;\n }\n\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\n // ye = MAX_EXP + 1 possible\n return normalise( y, xc, ye );\n };\n\n\n /*\n * Return the number of significant digits of the value of this BigNumber.\n *\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\n */\n P.precision = P.sd = function (z) {\n var n, v,\n x = this,\n c = x.c;\n\n // 'precision() argument not a boolean or binary digit: {z}'\n if ( z != null && z !== !!z && z !== 1 && z !== 0 ) {\n if (ERRORS) raise( 13, 'argument' + notBool, z );\n if ( z != !!z ) z = null;\n }\n\n if ( !c ) return null;\n v = c.length - 1;\n n = v * LOG_BASE + 1;\n\n if ( v = c[v] ) {\n\n // Subtract the number of trailing zeros of the last element.\n for ( ; v % 10 == 0; v /= 10, n-- );\n\n // Add the number of digits of the first element.\n for ( v = c[0]; v >= 10; v /= 10, n++ );\n }\n\n if ( z && x.e + 1 > n ) n = x.e + 1;\n\n return n;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of\n * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if\n * omitted.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'round() decimal places out of range: {dp}'\n * 'round() decimal places not an integer: {dp}'\n * 'round() rounding mode not an integer: {rm}'\n * 'round() rounding mode out of range: {rm}'\n */\n P.round = function ( dp, rm ) {\n var n = new BigNumber(this);\n\n if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) {\n round( n, ~~dp + this.e + 1, rm == null ||\n !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 );\n }\n\n return n;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\n *\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\n *\n * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity\n * otherwise.\n *\n * 'shift() argument not an integer: {k}'\n * 'shift() argument out of range: {k}'\n */\n P.shift = function (k) {\n var n = this;\n return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' )\n\n // k < 1e+21, or truncate(k) will produce exponential notation.\n ? n.times( '1e' + truncate(k) )\n : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER )\n ? n.s * ( k < 0 ? 0 : 1 / 0 )\n : n );\n };\n\n\n /*\n * sqrt(-n) = N\n * sqrt( N) = N\n * sqrt(-I) = N\n * sqrt( I) = I\n * sqrt( 0) = 0\n * sqrt(-0) = -0\n *\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\n */\n P.squareRoot = P.sqrt = function () {\n var m, n, r, rep, t,\n x = this,\n c = x.c,\n s = x.s,\n e = x.e,\n dp = DECIMAL_PLACES + 4,\n half = new BigNumber('0.5');\n\n // Negative/NaN/Infinity/zero?\n if ( s !== 1 || !c || !c[0] ) {\n return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 );\n }\n\n // Initial estimate.\n s = Math.sqrt( +x );\n\n // Math.sqrt underflow/overflow?\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\n if ( s == 0 || s == 1 / 0 ) {\n n = coeffToString(c);\n if ( ( n.length + e ) % 2 == 0 ) n += '0';\n s = Math.sqrt(n);\n e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 );\n\n if ( s == 1 / 0 ) {\n n = '1e' + e;\n } else {\n n = s.toExponential();\n n = n.slice( 0, n.indexOf('e') + 1 ) + e;\n }\n\n r = new BigNumber(n);\n } else {\n r = new BigNumber( s + '' );\n }\n\n // Check for zero.\n // r could be zero if MIN_EXP is changed after the this value was created.\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\n // coeffToString to throw.\n if ( r.c[0] ) {\n e = r.e;\n s = e + dp;\n if ( s < 3 ) s = 0;\n\n // Newton-Raphson iteration.\n for ( ; ; ) {\n t = r;\n r = half.times( t.plus( div( x, t, dp, 1 ) ) );\n\n if ( coeffToString( t.c ).slice( 0, s ) === ( n =\n coeffToString( r.c ) ).slice( 0, s ) ) {\n\n // The exponent of r may here be one less than the final result exponent,\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\n // are indexed correctly.\n if ( r.e < e ) --s;\n n = n.slice( s - 3, s + 1 );\n\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\n // iteration.\n if ( n == '9999' || !rep && n == '4999' ) {\n\n // On the first iteration only, check to see if rounding up gives the\n // exact result as the nines may infinitely repeat.\n if ( !rep ) {\n round( t, t.e + DECIMAL_PLACES + 2, 0 );\n\n if ( t.times(t).eq(x) ) {\n r = t;\n break;\n }\n }\n\n dp += 4;\n s += 4;\n rep = 1;\n } else {\n\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\n // result. If not, then there are further digits and m will be truthy.\n if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) {\n\n // Truncate to the first rounding digit.\n round( r, r.e + DECIMAL_PLACES + 2, 1 );\n m = !r.times(r).eq(x);\n }\n\n break;\n }\n }\n }\n }\n\n return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m );\n };\n\n\n /*\n * n * 0 = 0\n * n * N = N\n * n * I = I\n * 0 * n = 0\n * 0 * 0 = 0\n * 0 * N = N\n * 0 * I = N\n * N * n = N\n * N * 0 = N\n * N * N = N\n * N * I = N\n * I * n = I\n * I * 0 = N\n * I * N = N\n * I * I = I\n *\n * Return a new BigNumber whose value is the value of this BigNumber times the value of\n * BigNumber(y, b).\n */\n P.times = P.mul = function ( y, b ) {\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\n base, sqrtBase,\n x = this,\n xc = x.c,\n yc = ( id = 17, y = new BigNumber( y, b ) ).c;\n\n // Either NaN, ±Infinity or ±0?\n if ( !xc || !yc || !xc[0] || !yc[0] ) {\n\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\n if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) {\n y.c = y.e = y.s = null;\n } else {\n y.s *= x.s;\n\n // Return ±Infinity if either is ±Infinity.\n if ( !xc || !yc ) {\n y.c = y.e = null;\n\n // Return ±0 if either is ±0.\n } else {\n y.c = [0];\n y.e = 0;\n }\n }\n\n return y;\n }\n\n e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE );\n y.s *= x.s;\n xcL = xc.length;\n ycL = yc.length;\n\n // Ensure xc points to longer array and xcL to its length.\n if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\n\n // Initialise the result array with zeros.\n for ( i = xcL + ycL, zc = []; i--; zc.push(0) );\n\n base = BASE;\n sqrtBase = SQRT_BASE;\n\n for ( i = ycL; --i >= 0; ) {\n c = 0;\n ylo = yc[i] % sqrtBase;\n yhi = yc[i] / sqrtBase | 0;\n\n for ( k = xcL, j = i + k; j > i; ) {\n xlo = xc[--k] % sqrtBase;\n xhi = xc[k] / sqrtBase | 0;\n m = yhi * xlo + xhi * ylo;\n xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c;\n c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi;\n zc[j--] = xlo % base;\n }\n\n zc[j] = c;\n }\n\n if (c) {\n ++e;\n } else {\n zc.shift();\n }\n\n return normalise( y, zc, e );\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of\n * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted.\n *\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toDigits() precision out of range: {sd}'\n * 'toDigits() precision not an integer: {sd}'\n * 'toDigits() rounding mode not an integer: {rm}'\n * 'toDigits() rounding mode out of range: {rm}'\n */\n P.toDigits = function ( sd, rm ) {\n var n = new BigNumber(this);\n sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0;\n rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0;\n return sd ? round( n, sd, rm ) : n;\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in exponential notation and\n * rounded using ROUNDING_MODE to dp fixed decimal places.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toExponential() decimal places not an integer: {dp}'\n * 'toExponential() decimal places out of range: {dp}'\n * 'toExponential() rounding mode not an integer: {rm}'\n * 'toExponential() rounding mode out of range: {rm}'\n */\n P.toExponential = function ( dp, rm ) {\n return format( this,\n dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\n *\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\n * but e.g. (-0.00001).toFixed(0) is '-0'.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toFixed() decimal places not an integer: {dp}'\n * 'toFixed() decimal places out of range: {dp}'\n * 'toFixed() rounding mode not an integer: {rm}'\n * 'toFixed() rounding mode out of range: {rm}'\n */\n P.toFixed = function ( dp, rm ) {\n return format( this, dp != null && isValidInt( dp, 0, MAX, 20 )\n ? ~~dp + this.e + 1 : null, rm, 20 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\n * of the FORMAT object (see BigNumber.config).\n *\n * FORMAT = {\n * decimalSeparator : '.',\n * groupSeparator : ',',\n * groupSize : 3,\n * secondaryGroupSize : 0,\n * fractionGroupSeparator : '\\xA0', // non-breaking space\n * fractionGroupSize : 0\n * };\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toFormat() decimal places not an integer: {dp}'\n * 'toFormat() decimal places out of range: {dp}'\n * 'toFormat() rounding mode not an integer: {rm}'\n * 'toFormat() rounding mode out of range: {rm}'\n */\n P.toFormat = function ( dp, rm ) {\n var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 )\n ? ~~dp + this.e + 1 : null, rm, 21 );\n\n if ( this.c ) {\n var i,\n arr = str.split('.'),\n g1 = +FORMAT.groupSize,\n g2 = +FORMAT.secondaryGroupSize,\n groupSeparator = FORMAT.groupSeparator,\n intPart = arr[0],\n fractionPart = arr[1],\n isNeg = this.s < 0,\n intDigits = isNeg ? intPart.slice(1) : intPart,\n len = intDigits.length;\n\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\n\n if ( g1 > 0 && len > 0 ) {\n i = len % g1 || g1;\n intPart = intDigits.substr( 0, i );\n\n for ( ; i < len; i += g1 ) {\n intPart += groupSeparator + intDigits.substr( i, g1 );\n }\n\n if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i);\n if (isNeg) intPart = '-' + intPart;\n }\n\n str = fractionPart\n ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize )\n ? fractionPart.replace( new RegExp( '\\\\d{' + g2 + '}\\\\B', 'g' ),\n '$&' + FORMAT.fractionGroupSeparator )\n : fractionPart )\n : intPart;\n }\n\n return str;\n };\n\n\n /*\n * Return a string array representing the value of this BigNumber as a simple fraction with\n * an integer numerator and an integer denominator. The denominator will be a positive\n * non-zero value less than or equal to the specified maximum denominator. If a maximum\n * denominator is not specified, the denominator will be the lowest value necessary to\n * represent the number exactly.\n *\n * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator.\n *\n * 'toFraction() max denominator not an integer: {md}'\n * 'toFraction() max denominator out of range: {md}'\n */\n P.toFraction = function (md) {\n var arr, d0, d2, e, exp, n, n0, q, s,\n k = ERRORS,\n x = this,\n xc = x.c,\n d = new BigNumber(ONE),\n n1 = d0 = new BigNumber(ONE),\n d1 = n0 = new BigNumber(ONE);\n\n if ( md != null ) {\n ERRORS = false;\n n = new BigNumber(md);\n ERRORS = k;\n\n if ( !( k = n.isInt() ) || n.lt(ONE) ) {\n\n if (ERRORS) {\n raise( 22,\n 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md );\n }\n\n // ERRORS is false:\n // If md is a finite non-integer >= 1, round it to an integer and use it.\n md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null;\n }\n }\n\n if ( !xc ) return x.toString();\n s = coeffToString(xc);\n\n // Determine initial denominator.\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\n e = d.e = s.length - x.e - 1;\n d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ];\n md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n;\n\n exp = MAX_EXP;\n MAX_EXP = 1 / 0;\n n = new BigNumber(s);\n\n // n0 = d1 = 0\n n0.c[0] = 0;\n\n for ( ; ; ) {\n q = div( n, d, 0, 1 );\n d2 = d0.plus( q.times(d1) );\n if ( d2.cmp(md) == 1 ) break;\n d0 = d1;\n d1 = d2;\n n1 = n0.plus( q.times( d2 = n1 ) );\n n0 = d2;\n d = n.minus( q.times( d2 = d ) );\n n = d2;\n }\n\n d2 = div( md.minus(d0), d1, 0, 1 );\n n0 = n0.plus( d2.times(n1) );\n d0 = d0.plus( d2.times(d1) );\n n0.s = n1.s = x.s;\n e *= 2;\n\n // Determine which fraction is closer to x, n0/d0 or n1/d1\n arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp(\n div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1\n ? [ n1.toString(), d1.toString() ]\n : [ n0.toString(), d0.toString() ];\n\n MAX_EXP = exp;\n return arr;\n };\n\n\n /*\n * Return the value of this BigNumber converted to a number primitive.\n */\n P.toNumber = function () {\n var x = this;\n\n // Ensure zero has correct sign.\n return +x || ( x.s ? x.s * 0 : NaN );\n };\n\n\n /*\n * Return a BigNumber whose value is the value of this BigNumber raised to the power n.\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\n * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE.\n *\n * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive.\n * (Performs 54 loop iterations for n of 9007199254740992.)\n *\n * 'pow() exponent not an integer: {n}'\n * 'pow() exponent out of range: {n}'\n */\n P.toPower = P.pow = function (n) {\n var k, y,\n i = mathfloor( n < 0 ? -n : +n ),\n x = this;\n\n // Pass ±Infinity to Math.pow if exponent is out of range.\n if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) &&\n ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) ||\n parseFloat(n) != n && !( n = NaN ) ) ) {\n return new BigNumber( Math.pow( +x, n ) );\n }\n\n // Truncating each coefficient array to a length of k after each multiplication equates\n // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a\n // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.)\n k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0;\n y = new BigNumber(ONE);\n\n for ( ; ; ) {\n\n if ( i % 2 ) {\n y = y.times(x);\n if ( !y.c ) break;\n if ( k && y.c.length > k ) y.c.length = k;\n }\n\n i = mathfloor( i / 2 );\n if ( !i ) break;\n\n x = x.times(x);\n if ( k && x.c && x.c.length > k ) x.c.length = k;\n }\n\n if ( n < 0 ) y = ONE.div(y);\n return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y;\n };\n\n\n /*\n * Return a string representing the value of this BigNumber rounded to sd significant digits\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\n * necessary to represent the integer part of the value in fixed-point notation, then use\n * exponential notation.\n *\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toPrecision() precision not an integer: {sd}'\n * 'toPrecision() precision out of range: {sd}'\n * 'toPrecision() rounding mode not an integer: {rm}'\n * 'toPrecision() rounding mode out of range: {rm}'\n */\n P.toPrecision = function ( sd, rm ) {\n return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' )\n ? sd | 0 : null, rm, 24 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\n * TO_EXP_NEG, return exponential notation.\n *\n * [b] {number} Integer, 2 to 64 inclusive.\n *\n * 'toString() base not an integer: {b}'\n * 'toString() base out of range: {b}'\n */\n P.toString = function (b) {\n var str,\n n = this,\n s = n.s,\n e = n.e;\n\n // Infinity or NaN?\n if ( e === null ) {\n\n if (s) {\n str = 'Infinity';\n if ( s < 0 ) str = '-' + str;\n } else {\n str = 'NaN';\n }\n } else {\n str = coeffToString( n.c );\n\n if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) {\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\n ? toExponential( str, e )\n : toFixedPoint( str, e );\n } else {\n str = convertBase( toFixedPoint( str, e ), b | 0, 10, s );\n }\n\n if ( s < 0 && n.c[0] ) str = '-' + str;\n }\n\n return str;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole\n * number.\n */\n P.truncated = P.trunc = function () {\n return round( new BigNumber(this), this.e + 1, 1 );\n };\n\n\n\n /*\n * Return as toString, but do not accept a base argument.\n */\n P.valueOf = P.toJSON = function () {\n return this.toString();\n };\n\n\n // Aliases for BigDecimal methods.\n //P.add = P.plus; // P.add included above\n //P.subtract = P.minus; // P.sub included above\n //P.multiply = P.times; // P.mul included above\n //P.divide = P.div;\n //P.remainder = P.mod;\n //P.compareTo = P.cmp;\n //P.negate = P.neg;\n\n\n if ( configObj != null ) BigNumber.config(configObj);\n\n return BigNumber;\n }\n\n\n // PRIVATE HELPER FUNCTIONS\n\n\n function bitFloor(n) {\n var i = n | 0;\n return n > 0 || n === i ? i : i - 1;\n }\n\n\n // Return a coefficient array as a string of base 10 digits.\n function coeffToString(a) {\n var s, z,\n i = 1,\n j = a.length,\n r = a[0] + '';\n\n for ( ; i < j; ) {\n s = a[i++] + '';\n z = LOG_BASE - s.length;\n for ( ; z--; s = '0' + s );\n r += s;\n }\n\n // Determine trailing zeros.\n for ( j = r.length; r.charCodeAt(--j) === 48; );\n return r.slice( 0, j + 1 || 1 );\n }\n\n\n // Compare the value of BigNumbers x and y.\n function compare( x, y ) {\n var a, b,\n xc = x.c,\n yc = y.c,\n i = x.s,\n j = y.s,\n k = x.e,\n l = y.e;\n\n // Either NaN?\n if ( !i || !j ) return null;\n\n a = xc && !xc[0];\n b = yc && !yc[0];\n\n // Either zero?\n if ( a || b ) return a ? b ? 0 : -j : i;\n\n // Signs differ?\n if ( i != j ) return i;\n\n a = i < 0;\n b = k == l;\n\n // Either Infinity?\n if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1;\n\n // Compare exponents.\n if ( !b ) return k > l ^ a ? 1 : -1;\n\n j = ( k = xc.length ) < ( l = yc.length ) ? k : l;\n\n // Compare digit by digit.\n for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1;\n\n // Compare lengths.\n return k == l ? 0 : k > l ^ a ? 1 : -1;\n }\n\n\n /*\n * Return true if n is a valid number in range, otherwise false.\n * Use for argument validation when ERRORS is false.\n * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10.\n */\n function intValidatorNoErrors( n, min, max ) {\n return ( n = truncate(n) ) >= min && n <= max;\n }\n\n\n function isArray(obj) {\n return Object.prototype.toString.call(obj) == '[object Array]';\n }\n\n\n /*\n * Convert string of baseIn to an array of numbers of baseOut.\n * Eg. convertBase('255', 10, 16) returns [15, 15].\n * Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\n */\n function toBaseOut( str, baseIn, baseOut ) {\n var j,\n arr = [0],\n arrL,\n i = 0,\n len = str.length;\n\n for ( ; i < len; ) {\n for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn );\n arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) );\n\n for ( ; j < arr.length; j++ ) {\n\n if ( arr[j] > baseOut - 1 ) {\n if ( arr[j + 1] == null ) arr[j + 1] = 0;\n arr[j + 1] += arr[j] / baseOut | 0;\n arr[j] %= baseOut;\n }\n }\n }\n\n return arr.reverse();\n }\n\n\n function toExponential( str, e ) {\n return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) +\n ( e < 0 ? 'e' : 'e+' ) + e;\n }\n\n\n function toFixedPoint( str, e ) {\n var len, z;\n\n // Negative exponent?\n if ( e < 0 ) {\n\n // Prepend zeros.\n for ( z = '0.'; ++e; z += '0' );\n str = z + str;\n\n // Positive exponent\n } else {\n len = str.length;\n\n // Append zeros.\n if ( ++e > len ) {\n for ( z = '0', e -= len; --e; z += '0' );\n str += z;\n } else if ( e < len ) {\n str = str.slice( 0, e ) + '.' + str.slice(e);\n }\n }\n\n return str;\n }\n\n\n function truncate(n) {\n n = parseFloat(n);\n return n < 0 ? mathceil(n) : mathfloor(n);\n }\n\n\n // EXPORT\n\n\n BigNumber = another();\n\n // AMD.\n if ( typeof define == 'function' && define.amd ) {\n define( function () { return BigNumber; } );\n\n // Node and other environments that support module.exports.\n } else if ( typeof module != 'undefined' && module.exports ) {\n module.exports = BigNumber;\n if ( !crypto ) try { crypto = require('crypto'); } catch (e) {}\n\n // Browser.\n } else {\n global.BigNumber = BigNumber;\n }\n})(this);\n", - "var Web3 = require('./lib/web3');\n\n// dont override global variable\nif (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {\n window.Web3 = Web3;\n}\n\nmodule.exports = Web3;\n" - ] -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/dist/web3.min.js b/node_modules/web3-provider-engine/node_modules/web3/dist/web3.min.js deleted file mode 100644 index 761e183..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/dist/web3.min.js +++ /dev/null @@ -1,5 +0,0 @@ -require=function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[a]={exports:{}};e[a][0].call(f.exports,function(t){var n=e[a][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;aa;a++)i.push(n.encode(t[a],o));return i}():this._inputFormatter(t,e).encode()},i.prototype.decode=function(t,e,n){var r=this;if(this.isDynamicArray(n))return function(){for(var o=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*o,64)),a=o+32,s=r.nestedName(n),c=r.staticPartLength(s),u=32*Math.floor((c+31)/32),f=[],p=0;i*u>p;p+=u)f.push(r.decode(t,a+p,s));return f}();if(this.isStaticArray(n))return function(){for(var o=r.staticArrayLength(n),i=e,a=r.nestedName(n),s=r.staticPartLength(a),c=32*Math.floor((s+31)/32),u=[],f=0;o*c>f;f+=c)u.push(r.decode(t,i+f,a));return u}();if(this.isDynamicType(n))return function(){var n=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*n,64)),a=Math.floor((i+31)/32);return r._outputFormatter(new o(t.substr(2*n,64*(1+a)),0))}();var i=this.staticPartLength(n);return this._outputFormatter(new o(t.substr(2*e,2*i)))},e.exports=i},{"./formatters":9,"./param":11}],15:[function(t,e,n){var r=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=r.formatInputInt,this._outputFormatter=r.formatOutputUInt};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],16:[function(t,e,n){var r=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=r.formatInputReal,this._outputFormatter=r.formatOutputUReal};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],17:[function(t,e,n){"use strict";"undefined"==typeof XMLHttpRequest?n.XMLHttpRequest={}:n.XMLHttpRequest=XMLHttpRequest},{}],18:[function(t,e,n){var r=t("bignumber.js"),o=["wei","kwei","Mwei","Gwei","szabo","finney","femtoether","picoether","nanoether","microether","milliether","nano","micro","milli","ether","grand","Mether","Gether","Tether","Pether","Eether","Zether","Yether","Nether","Dether","Vether","Uether"];e.exports={ETH_PADDING:32,ETH_SIGNATURE_LENGTH:4,ETH_UNITS:o,ETH_BIGNUMBER_ROUNDING_MODE:{ROUNDING_MODE:r.ROUND_DOWN},ETH_POLLING_TIMEOUT:500,defaultBlock:"latest",defaultAccount:void 0}},{"bignumber.js":"bignumber.js"}],19:[function(t,e,n){var r=t("crypto-js"),o=t("crypto-js/sha3");e.exports=function(t,e){return e&&"hex"===e.encoding&&(t.length>2&&"0x"===t.substr(0,2)&&(t=t.substr(2)),t=r.enc.Hex.parse(t)),o(t,{outputLength:256}).toString()}},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(t,e,n){var r=t("bignumber.js"),o=t("./sha3.js"),i=t("utf8"),a={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"},s=function(t,e,n){return new Array(e-t.length+1).join(n?n:"0")+t},c=function(t,e,n){return t+new Array(e-t.length+1).join(n?n:"0")},u=function(t){var e="",n=0,r=t.length;for("0x"===t.substring(0,2)&&(n=2);r>n;n+=2){var o=parseInt(t.substr(n,2),16);if(0===o)break;e+=String.fromCharCode(o)}return i.decode(e)},f=function(t){var e="",n=0,r=t.length;for("0x"===t.substring(0,2)&&(n=2);r>n;n+=2){var o=parseInt(t.substr(n,2),16);e+=String.fromCharCode(o)}return e},p=function(t){t=i.encode(t);for(var e="",n=0;nn;n++)if(parseInt(e[n],16)>7&&t[n].toUpperCase()!==t[n]||parseInt(e[n],16)<=7&&t[n].toLowerCase()!==t[n])return!1;return!0},C=function(t){if("undefined"==typeof t)return"";t=t.toLowerCase().replace("0x","");for(var e=o(t),n="0x",r=0;r7?t[r].toUpperCase():t[r];return n},F=function(t){return B(t)?t:/^[0-9a-f]{40}$/.test(t)?"0x"+t:"0x"+s(v(t).substr(2),40)},I=function(t){return t instanceof r||t&&t.constructor&&"BigNumber"===t.constructor.name},O=function(t){return"string"==typeof t||t&&t.constructor&&"String"===t.constructor.name},N=function(t){return"function"==typeof t},D=function(t){return"object"==typeof t},P=function(t){return"boolean"==typeof t},T=function(t){return t instanceof Array},E=function(t){try{return!!JSON.parse(t)}catch(e){return!1}};e.exports={padLeft:s,padRight:c,toHex:v,toDecimal:y,fromDecimal:g,toUtf8:u,toAscii:f,fromUtf8:p,fromAscii:l,transformToFullName:h,extractDisplayName:d,extractTypeName:m,toWei:w,fromWei:_,toBigNumber:x,toTwosComplement:k,toAddress:F,isBigNumber:I,isStrictAddress:B,isAddress:S,isChecksumAddress:A,toChecksumAddress:C,isFunction:N,isString:O,isObject:D,isBoolean:P,isArray:T,isJson:E}},{"./sha3.js":19,"bignumber.js":"bignumber.js",utf8:84}],21:[function(t,e,n){e.exports={version:"0.15.3"}},{}],22:[function(t,e,n){function r(t){this._requestManager=new o(t),this.currentProvider=t,this.eth=new a(this),this.db=new s(this),this.shh=new c(this),this.net=new u(this),this.personal=new f(this),this.settings=new p,this.version={api:l.version},this.providers={HttpProvider:v,IpcProvider:b},this._extend=m(this),this._extend({properties:_()})}var o=t("./web3/requestmanager"),i=t("./web3/iban"),a=t("./web3/methods/eth"),s=t("./web3/methods/db"),c=t("./web3/methods/shh"),u=t("./web3/methods/net"),f=t("./web3/methods/personal"),p=t("./web3/settings"),l=t("./version.json"),h=t("./utils/utils"),d=t("./utils/sha3"),m=t("./web3/extend"),y=t("./web3/batch"),g=t("./web3/property"),v=t("./web3/httpprovider"),b=t("./web3/ipcprovider");r.providers={HttpProvider:v,IpcProvider:b},r.prototype.setProvider=function(t){this._requestManager.setProvider(t),this.currentProvider=t},r.prototype.reset=function(t){this._requestManager.reset(t),this.settings=new p},r.prototype.toHex=h.toHex,r.prototype.toAscii=h.toAscii,r.prototype.toUtf8=h.toUtf8,r.prototype.fromAscii=h.fromAscii,r.prototype.fromUtf8=h.fromUtf8,r.prototype.toDecimal=h.toDecimal,r.prototype.fromDecimal=h.fromDecimal,r.prototype.toBigNumber=h.toBigNumber,r.prototype.toWei=h.toWei,r.prototype.fromWei=h.fromWei,r.prototype.isAddress=h.isAddress,r.prototype.isChecksumAddress=h.isChecksumAddress,r.prototype.toChecksumAddress=h.toChecksumAddress,r.prototype.isIBAN=h.isIBAN,r.prototype.sha3=d,r.prototype.fromICAP=function(t){var e=new i(t);return e.address()};var _=function(){return[new g({name:"version.node",getter:"web3_clientVersion"}),new g({name:"version.network",getter:"net_version",inputFormatter:h.toDecimal}),new g({name:"version.ethereum",getter:"eth_protocolVersion",inputFormatter:h.toDecimal}),new g({name:"version.whisper",getter:"shh_version",inputFormatter:h.toDecimal})]};r.prototype.isConnected=function(){return this.currentProvider&&this.currentProvider.isConnected()},r.prototype.createBatch=function(){return new y(this)},e.exports=r},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46}],23:[function(t,e,n){var r=t("../utils/sha3"),o=t("./event"),i=t("./formatters"),a=t("../utils/utils"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,n){this._requestManager=t,this._json=e,this._address=n};u.prototype.encode=function(t){t=t||{};var e={};return["fromBlock","toBlock"].filter(function(e){return void 0!==t[e]}).forEach(function(n){e[n]=i.inputBlockNumberFormatter(t[n])}),e.address=this._address,e},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=t.topics[0].slice(2),n=this._json.filter(function(t){return e===r(a.transformToFullName(t))})[0];if(!n)return console.warn("cannot find event for log"),t;var i=new o(this._requestManager,n,this._address);return i.decode(t)},u.prototype.execute=function(t,e){a.isFunction(arguments[arguments.length-1])&&(e=arguments[arguments.length-1],1===arguments.length&&(t=null));var n=this.encode(t),r=this.decode.bind(this);return new s(this._requestManager,n,c.eth(),r,e)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this);t.allEvents=e},e.exports=u},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(t,e,n){var r=t("./jsonrpc"),o=t("./errors"),i=function(t){this.requestManager=t._requestManager,this.requests=[]};i.prototype.add=function(t){this.requests.push(t)},i.prototype.execute=function(){var t=this.requests;this.requestManager.sendBatch(t,function(e,n){n=n||[],t.map(function(t,e){return n[e]||{}}).forEach(function(e,n){if(t[n].callback){if(!r.getInstance().isValidResponse(e))return t[n].callback(o.InvalidResponse(e));t[n].callback(null,t[n].format?t[n].format(e.result):e.result)}})})},e.exports=i},{"./errors":26,"./jsonrpc":35}],25:[function(t,e,n){var r=t("../utils/utils"),o=t("../solidity/coder"),i=t("./event"),a=t("./function"),s=t("./allevents"),c=function(t,e){return t.filter(function(t){return"constructor"===t.type&&t.inputs.length===e.length}).map(function(t){return t.inputs.map(function(t){return t.type})}).map(function(t){return o.encodeParams(t,e)})[0]||""},u=function(t){t.abi.filter(function(t){return"function"===t.type}).map(function(e){return new a(t._eth,e,t.address)}).forEach(function(e){e.attachToContract(t)})},f=function(t){var e=t.abi.filter(function(t){return"event"===t.type}),n=new s(t._eth._requestManager,e,t.address);n.attachToContract(t),e.map(function(e){return new i(t._eth._requestManager,e,t.address)}).forEach(function(e){e.attachToContract(t)})},p=function(t,e){var n=0,r=!1,o=t._eth.filter("latest",function(i){if(!i&&!r)if(n++,n>50){if(o.stopWatching(),r=!0,!e)throw new Error("Contract transaction couldn't be found after 50 blocks");e(new Error("Contract transaction couldn't be found after 50 blocks"))}else t._eth.getTransactionReceipt(t.transactionHash,function(n,i){i&&!r&&t._eth.getCode(i.contractAddress,function(n,a){if(!r&&a)if(o.stopWatching(),r=!0,a.length>2)t.address=i.contractAddress,u(t),f(t),e&&e(null,t);else{if(!e)throw new Error("The contract code couldn't be stored, please check your gas amount.");e(new Error("The contract code couldn't be stored, please check your gas amount."))}})})})},l=function(t,e){this.eth=t,this.abi=e,this["new"]=function(){var t,e=new h(this.eth,this.abi),n={},o=Array.prototype.slice.call(arguments);r.isFunction(o[o.length-1])&&(t=o.pop());var i=o[o.length-1];r.isObject(i)&&!r.isArray(i)&&(n=o.pop());var a=c(this.abi,o);if(n.data+=a,t)this.eth.sendTransaction(n,function(n,r){n?t(n):(e.transactionHash=r,t(null,e),p(e,t))});else{var s=this.eth.sendTransaction(n);e.transactionHash=s,p(e)}return e},this["new"].getData=this.getData.bind(this)};l.prototype.at=function(t,e){var n=new h(this.eth,this.abi,t);return u(n),f(n),e&&e(null,n),n},l.prototype.getData=function(){var t={},e=Array.prototype.slice.call(arguments),n=e[e.length-1];r.isObject(n)&&!r.isArray(n)&&(t=e.pop());var o=c(this.abi,e);return t.data+=o,t.data};var h=function(t,e,n){this._eth=t,this.transactionHash=null,this.address=n,this.abi=e};e.exports=l},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(t,e,n){e.exports={InvalidNumberOfParams:function(){return new Error("Invalid number of input parameters")},InvalidConnection:function(t){return new Error("CONNECTION ERROR: Couldn't connect to node "+t+".")},InvalidProvider:function(){return new Error("Provider not set or invalid")},InvalidResponse:function(t){var e=t&&t.error&&t.error.message?t.error.message:"Invalid JSON RPC response: "+JSON.stringify(t);return new Error(e)}}},{}],27:[function(t,e,n){var r=t("../utils/utils"),o=t("../solidity/coder"),i=t("./formatters"),a=t("../utils/sha3"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,n){this._requestManager=t,this._params=e.inputs,this._name=r.transformToFullName(e),this._address=n,this._anonymous=e.anonymous};u.prototype.types=function(t){return this._params.filter(function(e){return e.indexed===t}).map(function(t){return t.type})},u.prototype.displayName=function(){return r.extractDisplayName(this._name)},u.prototype.typeName=function(){return r.extractTypeName(this._name)},u.prototype.signature=function(){return a(this._name)},u.prototype.encode=function(t,e){t=t||{},e=e||{};var n={};["fromBlock","toBlock"].filter(function(t){return void 0!==e[t]}).forEach(function(t){n[t]=i.inputBlockNumberFormatter(e[t])}),n.topics=[],n.address=this._address,this._anonymous||n.topics.push("0x"+this.signature());var a=this._params.filter(function(t){return t.indexed===!0}).map(function(e){var n=t[e.name];return void 0===n||null===n?null:r.isArray(n)?n.map(function(t){return"0x"+o.encodeParam(e.type,t)}):"0x"+o.encodeParam(e.type,n)});return n.topics=n.topics.concat(a),n},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=this._anonymous?t.topics:t.topics.slice(1),n=e.map(function(t){return t.slice(2)}).join(""),r=o.decodeParams(this.types(!0),n),a=t.data.slice(2),s=o.decodeParams(this.types(!1),a),c=i.outputLogFormatter(t);return c.event=this.displayName(),c.address=t.address,c.args=this._params.reduce(function(t,e){return t[e.name]=e.indexed?r.shift():s.shift(),t},{}),delete c.data,delete c.topics,c},u.prototype.execute=function(t,e,n){r.isFunction(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],2===arguments.length&&(e=null),1===arguments.length&&(e=null,t={}));var o=this.encode(t,e),i=this.decode.bind(this);return new s(this._requestManager,o,c.eth(),i,n)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this),n=this.displayName();t[n]||(t[n]=e),t[n][this.typeName()]=this.execute.bind(this,t)},e.exports=u},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(t,e,n){var r=t("./formatters"),o=t("./../utils/utils"),i=t("./method"),a=t("./property"),s=function(t){var e=function(e){var n;e.property?(t[e.property]||(t[e.property]={}),n=t[e.property]):n=t,e.methods&&e.methods.forEach(function(e){e.attachToObject(n),e.setRequestManager(t._requestManager)}),e.properties&&e.properties.forEach(function(e){e.attachToObject(n),e.setRequestManager(t._requestManager)})};return e.formatters=r,e.utils=o,e.Method=i,e.Property=a,e};e.exports=s},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(t,e,n){var r=t("./formatters"),o=t("../utils/utils"),i=function(t){return null===t||"undefined"==typeof t?null:(t=String(t),0===t.indexOf("0x")?t:o.fromUtf8(t))},a=function(t){return o.isString(t)?t:(t=t||{},t.topics=t.topics||[],t.topics=t.topics.map(function(t){return o.isArray(t)?t.map(i):i(t)}),{topics:t.topics,from:t.from,to:t.to,address:t.address,fromBlock:r.inputBlockNumberFormatter(t.fromBlock),toBlock:r.inputBlockNumberFormatter(t.toBlock)})},s=function(t,e){o.isString(t.options)||t.get(function(t,n){t&&e(t),o.isArray(n)&&n.forEach(function(t){e(null,t)})})},c=function(t){var e=function(e,n){return e?t.callbacks.forEach(function(t){t(e)}):void(o.isArray(n)&&n.forEach(function(e){e=t.formatter?t.formatter(e):e,t.callbacks.forEach(function(t){t(null,e)})}))};t.requestManager.startPolling({method:t.implementation.poll.call,params:[t.filterId]},t.filterId,e,t.stopWatching.bind(t))},u=function(t,e,n,r,o){var i=this,u={};return n.forEach(function(e){e.setRequestManager(t),e.attachToObject(u)}),this.requestManager=t,this.options=a(e),this.implementation=u,this.filterId=null,this.callbacks=[],this.getLogsCallbacks=[], -this.pollFilters=[],this.formatter=r,this.implementation.newFilter(this.options,function(t,e){if(t)i.callbacks.forEach(function(e){e(t)});else if(i.filterId=e,i.getLogsCallbacks.forEach(function(t){i.get(t)}),i.getLogsCallbacks=[],i.callbacks.forEach(function(t){s(i,t)}),i.callbacks.length>0&&c(i),"function"==typeof o)return i.watch(o)}),this};u.prototype.watch=function(t){return this.callbacks.push(t),this.filterId&&(s(this,t),c(this)),this},u.prototype.stopWatching=function(){this.requestManager.stopPolling(this.filterId),this.implementation.uninstallFilter(this.filterId,function(){}),this.callbacks=[]},u.prototype.get=function(t){var e=this;if(!o.isFunction(t)){if(null===this.filterId)throw new Error("Filter ID Error: filter().get() can't be chained synchronous, please provide a callback for the get() method.");var n=this.implementation.getLogs(this.filterId);return n.map(function(t){return e.formatter?e.formatter(t):t})}return null===this.filterId?this.getLogsCallbacks.push(t):this.implementation.getLogs(this.filterId,function(n,r){n?t(n):t(null,r.map(function(t){return e.formatter?e.formatter(t):t}))}),this},e.exports=u},{"../utils/utils":20,"./formatters":30}],30:[function(t,e,n){var r=t("../utils/utils"),o=t("../utils/config"),i=t("./iban"),a=function(t){return r.toBigNumber(t)},s=function(t){return"latest"===t||"pending"===t||"earliest"===t},c=function(t){return void 0===t?o.defaultBlock:u(t)},u=function(t){return void 0===t?void 0:s(t)?t:r.toHex(t)},f=function(t){return t.from=t.from||o.defaultAccount,t.from&&(t.from=v(t.from)),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=r.fromDecimal(t[e])}),t},p=function(t){return t.from=t.from||o.defaultAccount,t.from=v(t.from),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=r.fromDecimal(t[e])}),t},l=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),t.nonce=r.toDecimal(t.nonce),t.gas=r.toDecimal(t.gas),t.gasPrice=r.toBigNumber(t.gasPrice),t.value=r.toBigNumber(t.value),t},h=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),t.cumulativeGasUsed=r.toDecimal(t.cumulativeGasUsed),t.gasUsed=r.toDecimal(t.gasUsed),r.isArray(t.logs)&&(t.logs=t.logs.map(function(t){return m(t)})),t},d=function(t){return t.gasLimit=r.toDecimal(t.gasLimit),t.gasUsed=r.toDecimal(t.gasUsed),t.size=r.toDecimal(t.size),t.timestamp=r.toDecimal(t.timestamp),null!==t.number&&(t.number=r.toDecimal(t.number)),t.difficulty=r.toBigNumber(t.difficulty),t.totalDifficulty=r.toBigNumber(t.totalDifficulty),r.isArray(t.transactions)&&t.transactions.forEach(function(t){return r.isString(t)?void 0:l(t)}),t},m=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),null!==t.logIndex&&(t.logIndex=r.toDecimal(t.logIndex)),t},y=function(t){return t.ttl=r.fromDecimal(t.ttl),t.workToProve=r.fromDecimal(t.workToProve),t.priority=r.fromDecimal(t.priority),r.isArray(t.topics)||(t.topics=t.topics?[t.topics]:[]),t.topics=t.topics.map(function(t){return 0===t.indexOf("0x")?t:r.fromUtf8(t)}),t},g=function(t){return t.expiry=r.toDecimal(t.expiry),t.sent=r.toDecimal(t.sent),t.ttl=r.toDecimal(t.ttl),t.workProved=r.toDecimal(t.workProved),t.topics||(t.topics=[]),t.topics=t.topics.map(function(t){return r.toAscii(t)}),t},v=function(t){var e=new i(t);if(e.isValid()&&e.isDirect())return"0x"+e.address();if(r.isStrictAddress(t))return t;if(r.isAddress(t))return"0x"+t;throw"invalid address"},b=function(t){return t.startingBlock=r.toDecimal(t.startingBlock),t.currentBlock=r.toDecimal(t.currentBlock),t.highestBlock=r.toDecimal(t.highestBlock),t};e.exports={inputDefaultBlockNumberFormatter:c,inputBlockNumberFormatter:u,inputCallFormatter:f,inputTransactionFormatter:p,inputAddressFormatter:v,inputPostFormatter:y,outputBigNumberFormatter:a,outputTransactionFormatter:l,outputTransactionReceiptFormatter:h,outputBlockFormatter:d,outputLogFormatter:m,outputPostFormatter:g,outputSyncingFormatter:b}},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(t,e,n){var r=t("../solidity/coder"),o=t("../utils/utils"),i=t("./formatters"),a=t("../utils/sha3"),s=function(t,e,n){this._eth=t,this._inputTypes=e.inputs.map(function(t){return t.type}),this._outputTypes=e.outputs.map(function(t){return t.type}),this._constant=e.constant,this._name=o.transformToFullName(e),this._address=n};s.prototype.extractCallback=function(t){return o.isFunction(t[t.length-1])?t.pop():void 0},s.prototype.extractDefaultBlock=function(t){return t.length>this._inputTypes.length&&!o.isObject(t[t.length-1])?i.inputDefaultBlockNumberFormatter(t.pop()):void 0},s.prototype.toPayload=function(t){var e={};return t.length>this._inputTypes.length&&o.isObject(t[t.length-1])&&(e=t[t.length-1]),e.to=this._address,e.data="0x"+this.signature()+r.encodeParams(this._inputTypes,t),e},s.prototype.signature=function(){return a(this._name).slice(0,8)},s.prototype.unpackOutput=function(t){if(t){t=t.length>=2?t.slice(2):t;var e=r.decodeParams(this._outputTypes,t);return 1===e.length?e[0]:e}},s.prototype.call=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),n=this.extractDefaultBlock(t),r=this.toPayload(t);if(!e){var o=this._eth.call(r,n);return this.unpackOutput(o)}var i=this;this._eth.call(r,n,function(t,n){e(t,i.unpackOutput(n))})},s.prototype.sendTransaction=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),n=this.toPayload(t);return e?void this._eth.sendTransaction(n,e):this._eth.sendTransaction(n)},s.prototype.estimateGas=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),n=this.toPayload(t);return e?void this._eth.estimateGas(n,e):this._eth.estimateGas(n)},s.prototype.getData=function(){var t=Array.prototype.slice.call(arguments),e=this.toPayload(t);return e.data},s.prototype.displayName=function(){return o.extractDisplayName(this._name)},s.prototype.typeName=function(){return o.extractTypeName(this._name)},s.prototype.request=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),n=this.toPayload(t),r=this.unpackOutput.bind(this);return{method:this._constant?"eth_call":"eth_sendTransaction",callback:e,params:[n],format:r}},s.prototype.execute=function(){var t=!this._constant;return t?this.sendTransaction.apply(this,Array.prototype.slice.call(arguments)):this.call.apply(this,Array.prototype.slice.call(arguments))},s.prototype.attachToContract=function(t){var e=this.execute.bind(this);e.request=this.request.bind(this),e.call=this.call.bind(this),e.sendTransaction=this.sendTransaction.bind(this),e.estimateGas=this.estimateGas.bind(this),e.getData=this.getData.bind(this);var n=this.displayName();t[n]||(t[n]=e),t[n][this.typeName()]=e},e.exports=s},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(t,e,n){"use strict";var r,o=t("./errors");r="undefined"!=typeof Meteor&&Meteor.isServer?Npm.require("xmlhttprequest").XMLHttpRequest:"undefined"!=typeof window&&window.XMLHttpRequest?window.XMLHttpRequest:t("xmlhttprequest").XMLHttpRequest;var i=function(t){this.host=t||"http://localhost:8545"};i.prototype.prepareRequest=function(t){var e=new r;return e.open("POST",this.host,t),e.setRequestHeader("Content-Type","application/json"),e},i.prototype.send=function(t){var e=this.prepareRequest(!1);try{e.send(JSON.stringify(t))}catch(n){throw o.InvalidConnection(this.host)}var r=e.responseText;try{r=JSON.parse(r)}catch(i){throw o.InvalidResponse(e.responseText)}return r},i.prototype.sendAsync=function(t,e){var n=this.prepareRequest(!0);n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText,r=null;try{t=JSON.parse(t)}catch(i){r=o.InvalidResponse(n.responseText)}e(r,t)}};try{n.send(JSON.stringify(t))}catch(r){e(o.InvalidConnection(this.host))}},i.prototype.isConnected=function(){try{return this.send({id:9999999999,jsonrpc:"2.0",method:"net_listening",params:[]}),!0}catch(t){return!1}},e.exports=i},{"./errors":26,xmlhttprequest:17}],33:[function(t,e,n){var r=t("bignumber.js"),o=function(t,e){for(var n=t;n.length<2*e;)n="00"+n;return n},i=function(t){var e="A".charCodeAt(0),n="Z".charCodeAt(0);return t=t.toUpperCase(),t=t.substr(4)+t.substr(0,4),t.split("").map(function(t){var r=t.charCodeAt(0);return r>=e&&n>=r?r-e+10:t}).join("")},a=function(t){for(var e,n=t;n.length>2;)e=n.slice(0,9),n=parseInt(e,10)%97+n.slice(e.length);return parseInt(n,10)%97},s=function(t){this._iban=t};s.fromAddress=function(t){var e=new r(t,16),n=e.toString(36),i=o(n,15);return s.fromBban(i.toUpperCase())},s.fromBban=function(t){var e="XE",n=a(i(e+"00"+t)),r=("0"+(98-n)).slice(-2);return new s(e+r+t)},s.createIndirect=function(t){return s.fromBban("ETH"+t.institution+t.identifier)},s.isValid=function(t){var e=new s(t);return e.isValid()},s.prototype.isValid=function(){return/^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban)&&1===a(i(this._iban))},s.prototype.isDirect=function(){return 34===this._iban.length||35===this._iban.length},s.prototype.isIndirect=function(){return 20===this._iban.length},s.prototype.checksum=function(){return this._iban.substr(2,2)},s.prototype.institution=function(){return this.isIndirect()?this._iban.substr(7,4):""},s.prototype.client=function(){return this.isIndirect()?this._iban.substr(11):""},s.prototype.address=function(){if(this.isDirect()){var t=this._iban.substr(4),e=new r(t,36);return o(e.toString(16),20)}return""},s.prototype.toString=function(){return this._iban},e.exports=s},{"bignumber.js":"bignumber.js"}],34:[function(t,e,n){"use strict";var r=t("../utils/utils"),o=t("./errors"),i=function(t,e){var n=this;this.responseCallbacks={},this.path=t,this.connection=e.connect({path:this.path}),this.connection.on("error",function(t){console.error("IPC Connection Error",t),n._timeout()}),this.connection.on("end",function(){n._timeout()}),this.connection.on("data",function(t){n._parseResponse(t.toString()).forEach(function(t){var e=null;r.isArray(t)?t.forEach(function(t){n.responseCallbacks[t.id]&&(e=t.id)}):e=t.id,n.responseCallbacks[e]&&(n.responseCallbacks[e](null,t),delete n.responseCallbacks[e])})})};i.prototype._parseResponse=function(t){var e=this,n=[],r=t.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|");return r.forEach(function(t){e.lastChunk&&(t=e.lastChunk+t);var r=null;try{r=JSON.parse(t)}catch(i){return e.lastChunk=t,clearTimeout(e.lastChunkTimeout),void(e.lastChunkTimeout=setTimeout(function(){throw e._timeout(),o.InvalidResponse(t)},15e3))}clearTimeout(e.lastChunkTimeout),e.lastChunk=null,r&&n.push(r)}),n},i.prototype._addResponseCallback=function(t,e){var n=t.id||t[0].id,r=t.method||t[0].method;this.responseCallbacks[n]=e,this.responseCallbacks[n].method=r},i.prototype._timeout=function(){for(var t in this.responseCallbacks)this.responseCallbacks.hasOwnProperty(t)&&(this.responseCallbacks[t](o.InvalidConnection("on IPC")),delete this.responseCallbacks[t])},i.prototype.isConnected=function(){var t=this;return t.connection.writable||t.connection.connect({path:t.path}),!!this.connection.writable},i.prototype.send=function(t){if(this.connection.writeSync){var e;this.connection.writable||this.connection.connect({path:this.path});var n=this.connection.writeSync(JSON.stringify(t));try{e=JSON.parse(n)}catch(r){throw o.InvalidResponse(n)}return e}throw new Error('You tried to send "'+t.method+'" synchronously. Synchronous requests are not supported by the IPC provider.')},i.prototype.sendAsync=function(t,e){this.connection.writable||this.connection.connect({path:this.path}),this.connection.write(JSON.stringify(t)),this._addResponseCallback(t,e)},e.exports=i},{"../utils/utils":20,"./errors":26}],35:[function(t,e,n){var r=function(){return arguments.callee._singletonInstance?arguments.callee._singletonInstance:(arguments.callee._singletonInstance=this,void(this.messageId=1))};r.getInstance=function(){var t=new r;return t},r.prototype.toPayload=function(t,e){return t||console.error("jsonrpc method should be specified!"),{jsonrpc:"2.0",method:t,params:e||[],id:this.messageId++}},r.prototype.isValidResponse=function(t){return!!t&&!t.error&&"2.0"===t.jsonrpc&&"number"==typeof t.id&&void 0!==t.result},r.prototype.toBatchPayload=function(t){var e=this;return t.map(function(t){return e.toPayload(t.method,t.params)})},e.exports=r},{}],36:[function(t,e,n){var r=t("../utils/utils"),o=t("./errors"),i=function(t){this.name=t.name,this.call=t.call,this.params=t.params||0,this.inputFormatter=t.inputFormatter,this.outputFormatter=t.outputFormatter,this.requestManager=null};i.prototype.setRequestManager=function(t){this.requestManager=t},i.prototype.getCall=function(t){return r.isFunction(this.call)?this.call(t):this.call},i.prototype.extractCallback=function(t){return r.isFunction(t[t.length-1])?t.pop():void 0},i.prototype.validateArgs=function(t){if(t.length!==this.params)throw o.InvalidNumberOfParams()},i.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter.map(function(e,n){return e?e(t[n]):t[n]}):t},i.prototype.formatOutput=function(t){return this.outputFormatter&&t?this.outputFormatter(t):t},i.prototype.toPayload=function(t){var e=this.getCall(t),n=this.extractCallback(t),r=this.formatInput(t);return this.validateArgs(r),{method:e,params:r,callback:n}},i.prototype.attachToObject=function(t){var e=this.buildCall();e.call=this.call;var n=this.name.split(".");n.length>1?(t[n[0]]=t[n[0]]||{},t[n[0]][n[1]]=e):t[n[0]]=e},i.prototype.buildCall=function(){var t=this,e=function(){var e=t.toPayload(Array.prototype.slice.call(arguments));return e.callback?t.requestManager.sendAsync(e,function(n,r){e.callback(n,t.formatOutput(r))}):t.formatOutput(t.requestManager.send(e))};return e.request=this.request.bind(this),e},i.prototype.request=function(){var t=this.toPayload(Array.prototype.slice.call(arguments));return t.format=this.formatOutput.bind(this),t},e.exports=i},{"../utils/utils":20,"./errors":26}],37:[function(t,e,n){var r=t("../method"),o=function(t){this._requestManager=t._requestManager;var e=this;i().forEach(function(n){n.attachToObject(e),n.setRequestManager(t._requestManager)})},i=function(){var t=new r({name:"putString",call:"db_putString",params:3}),e=new r({name:"getString",call:"db_getString",params:2}),n=new r({name:"putHex",call:"db_putHex",params:3}),o=new r({name:"getHex",call:"db_getHex",params:2});return[t,e,n,o]};e.exports=o},{"../method":36}],38:[function(t,e,n){"use strict";function r(t){this._requestManager=t._requestManager;var e=this;w().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),x().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),this.iban=d,this.sendIBANTransaction=m.bind(null,this)}var o=t("../formatters"),i=t("../../utils/utils"),a=t("../method"),s=t("../property"),c=t("../../utils/config"),u=t("../contract"),f=t("./watches"),p=t("../filter"),l=t("../syncing"),h=t("../namereg"),d=t("../iban"),m=t("../transfer"),y=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockByHash":"eth_getBlockByNumber"},g=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getTransactionByBlockHashAndIndex":"eth_getTransactionByBlockNumberAndIndex"},v=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleByBlockHashAndIndex":"eth_getUncleByBlockNumberAndIndex"},b=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockTransactionCountByHash":"eth_getBlockTransactionCountByNumber"},_=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleCountByBlockHash":"eth_getUncleCountByBlockNumber"};Object.defineProperty(r.prototype,"defaultBlock",{get:function(){return c.defaultBlock},set:function(t){return c.defaultBlock=t,t}}),Object.defineProperty(r.prototype,"defaultAccount",{get:function(){return c.defaultAccount},set:function(t){return c.defaultAccount=t,t}});var w=function(){var t=new a({name:"getBalance",call:"eth_getBalance",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter],outputFormatter:o.outputBigNumberFormatter}),e=new a({name:"getStorageAt",call:"eth_getStorageAt",params:3,inputFormatter:[null,i.toHex,o.inputDefaultBlockNumberFormatter]}),n=new a({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter]}),r=new a({name:"getBlock",call:y,params:2,inputFormatter:[o.inputBlockNumberFormatter,function(t){return!!t}],outputFormatter:o.outputBlockFormatter}),s=new a({name:"getUncle",call:v,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputBlockFormatter}),c=new a({name:"getCompilers",call:"eth_getCompilers",params:0}),u=new a({name:"getBlockTransactionCount",call:b,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),f=new a({name:"getBlockUncleCount",call:_,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),p=new a({name:"getTransaction",call:"eth_getTransactionByHash",params:1,outputFormatter:o.outputTransactionFormatter}),l=new a({name:"getTransactionFromBlock",call:g,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputTransactionFormatter}),h=new a({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,outputFormatter:o.outputTransactionReceiptFormatter}),d=new a({name:"getTransactionCount",call:"eth_getTransactionCount",params:2,inputFormatter:[null,o.inputDefaultBlockNumberFormatter],outputFormatter:i.toDecimal}),m=new a({name:"sendRawTransaction",call:"eth_sendRawTransaction",params:1,inputFormatter:[null]}),w=new a({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[o.inputTransactionFormatter]}),x=new a({name:"sign",call:"eth_sign",params:2,inputFormatter:[o.inputAddressFormatter,null]}),k=new a({name:"call",call:"eth_call",params:2,inputFormatter:[o.inputCallFormatter,o.inputDefaultBlockNumberFormatter]}),B=new a({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[o.inputCallFormatter],outputFormatter:i.toDecimal}),S=new a({name:"compile.solidity",call:"eth_compileSolidity",params:1}),A=new a({name:"compile.lll",call:"eth_compileLLL",params:1}),C=new a({name:"compile.serpent",call:"eth_compileSerpent",params:1}),F=new a({name:"submitWork",call:"eth_submitWork",params:3}),I=new a({name:"getWork",call:"eth_getWork",params:0});return[t,e,n,r,s,c,u,f,p,l,h,d,k,B,m,w,x,S,A,C,F,I]},x=function(){return[new s({name:"coinbase",getter:"eth_coinbase"}),new s({name:"mining",getter:"eth_mining"}),new s({name:"hashrate",getter:"eth_hashrate",outputFormatter:i.toDecimal}),new s({name:"syncing",getter:"eth_syncing",outputFormatter:o.outputSyncingFormatter}),new s({name:"gasPrice",getter:"eth_gasPrice",outputFormatter:o.outputBigNumberFormatter}),new s({name:"accounts",getter:"eth_accounts"}),new s({name:"blockNumber",getter:"eth_blockNumber",outputFormatter:i.toDecimal})]};r.prototype.contract=function(t){var e=new u(this,t);return e},r.prototype.filter=function(t,e){return new p(this._requestManager,t,f.eth(),o.outputLogFormatter,e)},r.prototype.namereg=function(){return this.contract(h.global.abi).at(h.global.address)},r.prototype.icapNamereg=function(){return this.contract(h.icap.abi).at(h.icap.address)},r.prototype.isSyncing=function(t){return new l(this._requestManager,t)},e.exports=r},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(t,e,n){var r=t("../../utils/utils"),o=t("../property"),i=function(t){this._requestManager=t._requestManager;var e=this;a().forEach(function(n){n.attachToObject(e),n.setRequestManager(t._requestManager)})},a=function(){return[new o({name:"listening",getter:"net_listening"}),new o({name:"peerCount",getter:"net_peerCount",outputFormatter:r.toDecimal})]};e.exports=i},{"../../utils/utils":20,"../property":44}],40:[function(t,e,n){"use strict";function r(t){this._requestManager=t._requestManager;var e=this;a().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),s().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})}var o=t("../method"),i=t("../property"),a=function(){var t=new o({name:"newAccount",call:"personal_newAccount",params:1,inputFormatter:[null]}),e=new o({name:"unlockAccount",call:"personal_unlockAccount",params:3,inputFormatter:[null,null,null]});return[t,e]},s=function(){return[new i({name:"listAccounts",getter:"personal_listAccounts"})]};e.exports=r},{"../method":36,"../property":44}],41:[function(t,e,n){var r=t("../method"),o=t("../formatters"),i=t("../filter"),a=t("./watches"),s=function(t){this._requestManager=t._requestManager;var e=this;c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})};s.prototype.filter=function(t,e){return new i(this._requestManager,t,a.shh(),o.outputPostFormatter,e)};var c=function(){var t=new r({name:"post",call:"shh_post",params:1,inputFormatter:[o.inputPostFormatter]}),e=new r({name:"newIdentity",call:"shh_newIdentity",params:0}),n=new r({name:"hasIdentity",call:"shh_hasIdentity",params:1}),i=new r({name:"newGroup",call:"shh_newGroup",params:0}),a=new r({name:"addToGroup",call:"shh_addToGroup",params:0});return[t,e,n,i,a]};e.exports=s},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(t,e,n){var r=t("../method"),o=function(){var t=function(t){var e=t[0];switch(e){case"latest":return t.shift(),this.params=0,"eth_newBlockFilter";case"pending":return t.shift(),this.params=0,"eth_newPendingTransactionFilter";default:return"eth_newFilter"}},e=new r({name:"newFilter",call:t,params:1}),n=new r({name:"uninstallFilter",call:"eth_uninstallFilter",params:1}),o=new r({name:"getLogs",call:"eth_getFilterLogs",params:1}),i=new r({name:"poll",call:"eth_getFilterChanges",params:1});return[e,n,o,i]},i=function(){var t=new r({name:"newFilter",call:"shh_newFilter",params:1}),e=new r({name:"uninstallFilter",call:"shh_uninstallFilter",params:1}),n=new r({name:"getLogs",call:"shh_getMessages",params:1}),o=new r({name:"poll",call:"shh_getFilterChanges",params:1});return[t,e,n,o]};e.exports={eth:o,shh:i}},{"../method":36}],43:[function(t,e,n){var r=t("../contracts/GlobalRegistrar.json"),o=t("../contracts/ICAPRegistrar.json"),i="0xc6d9d2cd449a754c494264e1809c50e34d64562b",a="0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00";e.exports={global:{abi:r,address:i},icap:{abi:o,address:a}}},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(t,e,n){var r=t("../utils/utils"),o=function(t){this.name=t.name,this.getter=t.getter,this.setter=t.setter,this.outputFormatter=t.outputFormatter,this.inputFormatter=t.inputFormatter,this.requestManager=null};o.prototype.setRequestManager=function(t){this.requestManager=t},o.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter(t):t},o.prototype.formatOutput=function(t){return this.outputFormatter&&null!==t?this.outputFormatter(t):t},o.prototype.extractCallback=function(t){return r.isFunction(t[t.length-1])?t.pop():void 0},o.prototype.attachToObject=function(t){var e={get:this.buildGet(),enumerable:!0},n=this.name.split("."),r=n[0];n.length>1&&(t[n[0]]=t[n[0]]||{},t=t[n[0]],r=n[1]),Object.defineProperty(t,r,e),t[i(r)]=this.buildAsyncGet()};var i=function(t){return"get"+t.charAt(0).toUpperCase()+t.slice(1)};o.prototype.buildGet=function(){var t=this;return function(){return t.formatOutput(t.requestManager.send({method:t.getter}))}},o.prototype.buildAsyncGet=function(){var t=this,e=function(e){t.requestManager.sendAsync({method:t.getter},function(n,r){e(n,t.formatOutput(r))})};return e.request=this.request.bind(this),e},o.prototype.request=function(){var t={method:this.getter,params:[],callback:this.extractCallback(Array.prototype.slice.call(arguments))};return t.format=this.formatOutput.bind(this),t},e.exports=o},{"../utils/utils":20}],45:[function(t,e,n){var r=t("./jsonrpc"),o=t("../utils/utils"),i=t("../utils/config"),a=t("./errors"),s=function(t){this.provider=t,this.polls={},this.timeout=null};s.prototype.send=function(t){if(!this.provider)return console.error(a.InvalidProvider()),null;var e=r.getInstance().toPayload(t.method,t.params),n=this.provider.send(e);if(!r.getInstance().isValidResponse(n))throw a.InvalidResponse(n);return n.result},s.prototype.sendAsync=function(t,e){if(!this.provider)return e(a.InvalidProvider());var n=r.getInstance().toPayload(t.method,t.params);this.provider.sendAsync(n,function(t,n){return t?e(t):r.getInstance().isValidResponse(n)?void e(null,n.result):e(a.InvalidResponse(n))})},s.prototype.sendBatch=function(t,e){if(!this.provider)return e(a.InvalidProvider());var n=r.getInstance().toBatchPayload(t);this.provider.sendAsync(n,function(t,n){return t?e(t):o.isArray(n)?void e(t,n):e(a.InvalidResponse(n))})},s.prototype.setProvider=function(t){this.provider=t},s.prototype.startPolling=function(t,e,n,r){this.polls[e]={data:t,id:e,callback:n,uninstall:r},this.timeout||this.poll()},s.prototype.stopPolling=function(t){delete this.polls[t],0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.reset=function(t){for(var e in this.polls)t&&-1!==e.indexOf("syncPoll_")||(this.polls[e].uninstall(),delete this.polls[e]);0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.poll=function(){if(this.timeout=setTimeout(this.poll.bind(this),i.ETH_POLLING_TIMEOUT),0!==Object.keys(this.polls).length){if(!this.provider)return void console.error(a.InvalidProvider());var t=[],e=[];for(var n in this.polls)t.push(this.polls[n].data),e.push(n);if(0!==t.length){var s=r.getInstance().toBatchPayload(t),c={};s.forEach(function(t,n){c[t.id]=e[n]});var u=this;this.provider.sendAsync(s,function(t,e){if(!t){if(!o.isArray(e))throw a.InvalidResponse(e);e.map(function(t){var e=c[t.id];return u.polls[e]?(t.callback=u.polls[e].callback,t):!1}).filter(function(t){return!!t}).filter(function(t){var e=r.getInstance().isValidResponse(t);return e||t.callback(a.InvalidResponse(t)),e}).forEach(function(t){t.callback(null,t.result)})}})}}},e.exports=s},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(t,e,n){var r=function(){this.defaultBlock="latest",this.defaultAccount=void 0};e.exports=r},{}],47:[function(t,e,n){var r=t("./formatters"),o=t("../utils/utils"),i=1,a=function(t){var e=function(e,n){return e?t.callbacks.forEach(function(t){t(e)}):(o.isObject(n)&&n.startingBlock&&(n=r.outputSyncingFormatter(n)),void t.callbacks.forEach(function(e){t.lastSyncState!==n&&(!t.lastSyncState&&o.isObject(n)&&e(null,!0),setTimeout(function(){e(null,n)},0),t.lastSyncState=n)}))};t.requestManager.startPolling({method:"eth_syncing",params:[]},t.pollId,e,t.stopWatching.bind(t))},s=function(t,e){return this.requestManager=t,this.pollId="syncPoll_"+i++,this.callbacks=[],this.addCallback(e),this.lastSyncState=!1,a(this),this};s.prototype.addCallback=function(t){return t&&this.callbacks.push(t),this},s.prototype.stopWatching=function(){this.requestManager.stopPolling(this.pollId),this.callbacks=[]},e.exports=s},{"../utils/utils":20,"./formatters":30}],48:[function(t,e,n){var r=t("./iban"),o=t("../contracts/SmartExchange.json"),i=function(t,e,n,o,i){var c=new r(n);if(!c.isValid())throw new Error("invalid iban address");if(c.isDirect())return a(t,e,c.address(),o,i);if(!i){var u=t.icapNamereg().addr(c.institution());return s(t,e,u,o,c.client())}t.icapNamereg().addr(c.institution(),function(n,r){return s(t,e,r,o,c.client(),i)})},a=function(t,e,n,r,o){return t.sendTransaction({address:n,from:e,value:r},o)},s=function(t,e,n,r,i,a){var s=o;return t.contract(s).at(n).deposit(i,{from:e,value:r},a)};e.exports=i},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(t,e,n){},{}],50:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.BlockCipher,o=e.algo,i=[],a=[],s=[],c=[],u=[],f=[],p=[],l=[],h=[],d=[];!function(){for(var t=[],e=0;256>e;e++)128>e?t[e]=e<<1:t[e]=e<<1^283;for(var n=0,r=0,e=0;256>e;e++){var o=r^r<<1^r<<2^r<<3^r<<4;o=o>>>8^255&o^99,i[n]=o,a[o]=n;var m=t[n],y=t[m],g=t[y],v=257*t[o]^16843008*o;s[n]=v<<24|v>>>8,c[n]=v<<16|v>>>16,u[n]=v<<8|v>>>24,f[n]=v;var v=16843009*g^65537*y^257*m^16843008*n;p[o]=v<<24|v>>>8,l[o]=v<<16|v>>>16,h[o]=v<<8|v>>>24,d[o]=v,n?(n=m^t[t[t[g^m]]],r^=t[t[r]]):n=r=1}}();var m=[0,1,2,4,8,16,32,64,128,27,54],y=o.AES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,n=t.sigBytes/4,r=this._nRounds=n+6,o=4*(r+1),a=this._keySchedule=[],s=0;o>s;s++)if(n>s)a[s]=e[s];else{var c=a[s-1];s%n?n>6&&s%n==4&&(c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c]):(c=c<<8|c>>>24,c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c],c^=m[s/n|0]<<24),a[s]=a[s-n]^c}for(var u=this._invKeySchedule=[],f=0;o>f;f++){var s=o-f;if(f%4)var c=a[s];else var c=a[s-4];4>f||4>=s?u[f]=c:u[f]=p[i[c>>>24]]^l[i[c>>>16&255]]^h[i[c>>>8&255]]^d[i[255&c]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,c,u,f,i)},decryptBlock:function(t,e){var n=t[e+1];t[e+1]=t[e+3],t[e+3]=n,this._doCryptBlock(t,e,this._invKeySchedule,p,l,h,d,a);var n=t[e+1];t[e+1]=t[e+3],t[e+3]=n},_doCryptBlock:function(t,e,n,r,o,i,a,s){for(var c=this._nRounds,u=t[e]^n[0],f=t[e+1]^n[1],p=t[e+2]^n[2],l=t[e+3]^n[3],h=4,d=1;c>d;d++){var m=r[u>>>24]^o[f>>>16&255]^i[p>>>8&255]^a[255&l]^n[h++],y=r[f>>>24]^o[p>>>16&255]^i[l>>>8&255]^a[255&u]^n[h++],g=r[p>>>24]^o[l>>>16&255]^i[u>>>8&255]^a[255&f]^n[h++],v=r[l>>>24]^o[u>>>16&255]^i[f>>>8&255]^a[255&p]^n[h++];u=m,f=y,p=g,l=v}var m=(s[u>>>24]<<24|s[f>>>16&255]<<16|s[p>>>8&255]<<8|s[255&l])^n[h++],y=(s[f>>>24]<<24|s[p>>>16&255]<<16|s[l>>>8&255]<<8|s[255&u])^n[h++],g=(s[p>>>24]<<24|s[l>>>16&255]<<16|s[u>>>8&255]<<8|s[255&f])^n[h++],v=(s[l>>>24]<<24|s[u>>>16&255]<<16|s[f>>>8&255]<<8|s[255&p])^n[h++];t[e]=m,t[e+1]=y,t[e+2]=g,t[e+3]=v},keySize:8});e.AES=r._createHelper(y)}(),t.AES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){t.lib.Cipher||function(e){var n=t,r=n.lib,o=r.Base,i=r.WordArray,a=r.BufferedBlockAlgorithm,s=n.enc,c=(s.Utf8,s.Base64),u=n.algo,f=u.EvpKDF,p=r.Cipher=a.extend({cfg:o.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,n){this.cfg=this.cfg.extend(n),this._xformMode=t,this._key=e,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?k:_}return function(e){return{encrypt:function(n,r,o){return t(r).encrypt(e,n,r,o)},decrypt:function(n,r,o){return t(r).decrypt(e,n,r,o)}}}}()}),l=(r.StreamCipher=p.extend({_doFinalize:function(){ -var t=this._process(!0);return t},blockSize:1}),n.mode={}),h=r.BlockCipherMode=o.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),d=l.CBC=function(){function t(t,n,r){var o=this._iv;if(o){var i=o;this._iv=e}else var i=this._prevBlock;for(var a=0;r>a;a++)t[n+a]^=i[a]}var n=h.extend();return n.Encryptor=n.extend({processBlock:function(e,n){var r=this._cipher,o=r.blockSize;t.call(this,e,n,o),r.encryptBlock(e,n),this._prevBlock=e.slice(n,n+o)}}),n.Decryptor=n.extend({processBlock:function(e,n){var r=this._cipher,o=r.blockSize,i=e.slice(n,n+o);r.decryptBlock(e,n),t.call(this,e,n,o),this._prevBlock=i}}),n}(),m=n.pad={},y=m.Pkcs7={pad:function(t,e){for(var n=4*e,r=n-t.sigBytes%n,o=r<<24|r<<16|r<<8|r,a=[],s=0;r>s;s+=4)a.push(o);var c=i.create(a,r);t.concat(c)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},g=(r.BlockCipher=p.extend({cfg:p.cfg.extend({mode:d,padding:y}),reset:function(){p.reset.call(this);var t=this.cfg,e=t.iv,n=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var r=n.createEncryptor;else{var r=n.createDecryptor;this._minBufferSize=1}this._mode=r.call(n,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{var e=this._process(!0);t.unpad(e)}return e},blockSize:4}),r.CipherParams=o.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=n.format={},b=v.OpenSSL={stringify:function(t){var e=t.ciphertext,n=t.salt;if(n)var r=i.create([1398893684,1701076831]).concat(n).concat(e);else var r=e;return r.toString(c)},parse:function(t){var e=c.parse(t),n=e.words;if(1398893684==n[0]&&1701076831==n[1]){var r=i.create(n.slice(2,4));n.splice(0,4),e.sigBytes-=16}return g.create({ciphertext:e,salt:r})}},_=r.SerializableCipher=o.extend({cfg:o.extend({format:b}),encrypt:function(t,e,n,r){r=this.cfg.extend(r);var o=t.createEncryptor(n,r),i=o.finalize(e),a=o.cfg;return g.create({ciphertext:i,key:n,iv:a.iv,algorithm:t,mode:a.mode,padding:a.padding,blockSize:t.blockSize,formatter:r.format})},decrypt:function(t,e,n,r){r=this.cfg.extend(r),e=this._parse(e,r.format);var o=t.createDecryptor(n,r).finalize(e.ciphertext);return o},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=n.kdf={},x=w.OpenSSL={execute:function(t,e,n,r){r||(r=i.random(8));var o=f.create({keySize:e+n}).compute(t,r),a=i.create(o.words.slice(e),4*n);return o.sigBytes=4*e,g.create({key:o,iv:a,salt:r})}},k=r.PasswordBasedCipher=_.extend({cfg:_.cfg.extend({kdf:x}),encrypt:function(t,e,n,r){r=this.cfg.extend(r);var o=r.kdf.execute(n,t.keySize,t.ivSize);r.iv=o.iv;var i=_.encrypt.call(this,t,e,o.key,r);return i.mixIn(o),i},decrypt:function(t,e,n,r){r=this.cfg.extend(r),e=this._parse(e,r.format);var o=r.kdf.execute(n,t.keySize,t.ivSize,e.salt);r.iv=o.iv;var i=_.decrypt.call(this,t,e,o.key,r);return i}})}()})},{"./core":52}],52:[function(t,e,n){!function(t,r){"object"==typeof n?e.exports=n=r():"function"==typeof define&&define.amd?define([],r):t.CryptoJS=r()}(this,function(){var t=t||function(t,e){var n={},r=n.lib={},o=r.Base=function(){function t(){}return{extend:function(e){t.prototype=this;var n=new t;return e&&n.mixIn(e),n.hasOwnProperty("init")||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),i=r.WordArray=o.extend({init:function(t,n){t=this.words=t||[],n!=e?this.sigBytes=n:this.sigBytes=4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,n=t.words,r=this.sigBytes,o=t.sigBytes;if(this.clamp(),r%4)for(var i=0;o>i;i++){var a=n[i>>>2]>>>24-i%4*8&255;e[r+i>>>2]|=a<<24-(r+i)%4*8}else for(var i=0;o>i;i+=4)e[r+i>>>2]=n[i>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,n=this.sigBytes;e[n>>>2]&=4294967295<<32-n%4*8,e.length=t.ceil(n/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var n,r=[],o=function(e){var e=e,n=987654321,r=4294967295;return function(){n=36969*(65535&n)+(n>>16)&r,e=18e3*(65535&e)+(e>>16)&r;var o=(n<<16)+e&r;return o/=4294967296,o+=.5,o*(t.random()>.5?1:-1)}},a=0;e>a;a+=4){var s=o(4294967296*(n||t.random()));n=987654071*s(),r.push(4294967296*s()|0)}return new i.init(r,e)}}),a=n.enc={},s=a.Hex={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push((i>>>4).toString(16)),r.push((15&i).toString(16))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r+=2)n[r>>>3]|=parseInt(t.substr(r,2),16)<<24-r%8*4;return new i.init(n,e/2)}},c=a.Latin1={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(i))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r++)n[r>>>2]|=(255&t.charCodeAt(r))<<24-r%4*8;return new i.init(n,e)}},u=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=u.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var n=this._data,r=n.words,o=n.sigBytes,a=this.blockSize,s=4*a,c=o/s;c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*a,f=t.min(4*u,o);if(u){for(var p=0;u>p;p+=a)this._doProcessBlock(r,p);var l=r.splice(0,u);n.sigBytes-=f}return new i.init(l,f)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(r.Hasher=f.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},blockSize:16,_createHelper:function(t){return function(e,n){return new t.init(n).finalize(e)}},_createHmacHelper:function(t){return function(e,n){return new p.HMAC.init(t,n).finalize(e)}}}),n.algo={});return n}(Math);return t})},{}],53:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=e.enc;o.Base64={stringify:function(t){var e=t.words,n=t.sigBytes,r=this._map;t.clamp();for(var o=[],i=0;n>i;i+=3)for(var a=e[i>>>2]>>>24-i%4*8&255,s=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,u=a<<16|s<<8|c,f=0;4>f&&n>i+.75*f;f++)o.push(r.charAt(u>>>6*(3-f)&63));var p=r.charAt(64);if(p)for(;o.length%4;)o.push(p);return o.join("")},parse:function(t){var e=t.length,n=this._map,o=n.charAt(64);if(o){var i=t.indexOf(o);-1!=i&&(e=i)}for(var a=[],s=0,c=0;e>c;c++)if(c%4){var u=n.indexOf(t.charAt(c-1))<>>6-c%4*2;a[s>>>2]|=(u|f)<<24-s%4*8,s++}return r.create(a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64})},{"./core":52}],54:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(t){return t<<8&4278255360|t>>>8&16711935}var n=t,r=n.lib,o=r.WordArray,i=n.enc;i.Utf16=i.Utf16BE={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o+=2){var i=e[o>>>2]>>>16-o%4*8&65535;r.push(String.fromCharCode(i))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r++)n[r>>>1]|=t.charCodeAt(r)<<16-r%2*16;return o.create(n,2*e)}};i.Utf16LE={stringify:function(t){for(var n=t.words,r=t.sigBytes,o=[],i=0;r>i;i+=2){var a=e(n[i>>>2]>>>16-i%4*8&65535);o.push(String.fromCharCode(a))}return o.join("")},parse:function(t){for(var n=t.length,r=[],i=0;n>i;i++)r[i>>>1]|=e(t.charCodeAt(i)<<16-i%2*16);return o.create(r,2*n)}}}(),t.enc.Utf16})},{"./core":52}],55:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.Base,o=n.WordArray,i=e.algo,a=i.MD5,s=i.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var n=this.cfg,r=n.hasher.create(),i=o.create(),a=i.words,s=n.keySize,c=n.iterations;a.lengthf;f++)u=r.finalize(u),r.reset();i.concat(u)}return i.sigBytes=4*s,i}});e.EvpKDF=function(t,e,n){return s.create(n).compute(t,e)}}(),t.EvpKDF})},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.CipherParams,i=n.enc,a=i.Hex,s=n.format;s.Hex={stringify:function(t){return t.ciphertext.toString(a)},parse:function(t){var e=a.parse(t);return o.create({ciphertext:e})}}}(),t.format.Hex})},{"./cipher-core":51,"./core":52}],57:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){!function(){var e=t,n=e.lib,r=n.Base,o=e.enc,i=o.Utf8,a=e.algo;a.HMAC=r.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=i.parse(e));var n=t.blockSize,r=4*n;e.sigBytes>r&&(e=t.finalize(e)),e.clamp();for(var o=this._oKey=e.clone(),a=this._iKey=e.clone(),s=o.words,c=a.words,u=0;n>u;u++)s[u]^=1549556828,c[u]^=909522486;o.sigBytes=a.sigBytes=r,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,n=e.finalize(t);e.reset();var r=e.finalize(this._oKey.clone().concat(n));return r}})}()})},{"./core":52}],58:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core"),t("./lib-typedarrays"),t("./enc-utf16"),t("./enc-base64"),t("./md5"),t("./sha1"),t("./sha256"),t("./sha224"),t("./sha512"),t("./sha384"),t("./sha3"),t("./ripemd160"),t("./hmac"),t("./pbkdf2"),t("./evpkdf"),t("./cipher-core"),t("./mode-cfb"),t("./mode-ctr"),t("./mode-ctr-gladman"),t("./mode-ofb"),t("./mode-ecb"),t("./pad-ansix923"),t("./pad-iso10126"),t("./pad-iso97971"),t("./pad-zeropadding"),t("./pad-nopadding"),t("./format-hex"),t("./aes"),t("./tripledes"),t("./rc4"),t("./rabbit"),t("./rabbit-legacy")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./lib-typedarrays","./enc-utf16","./enc-base64","./md5","./sha1","./sha256","./sha224","./sha512","./sha384","./sha3","./ripemd160","./hmac","./pbkdf2","./evpkdf","./cipher-core","./mode-cfb","./mode-ctr","./mode-ctr-gladman","./mode-ofb","./mode-ecb","./pad-ansix923","./pad-iso10126","./pad-iso97971","./pad-zeropadding","./pad-nopadding","./format-hex","./aes","./tripledes","./rc4","./rabbit","./rabbit-legacy"],o):r.CryptoJS=o(r.CryptoJS)}(this,function(t){return t})},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){if("function"==typeof ArrayBuffer){var e=t,n=e.lib,r=n.WordArray,o=r.init,i=r.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,n=[],r=0;e>r;r++)n[r>>>2]|=t[r]<<24-r%4*8;o.call(this,n,e)}else o.apply(this,arguments)};i.prototype=r}}(),t.lib.WordArray})},{"./core":52}],60:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){function n(t,e,n,r,o,i,a){var s=t+(e&n|~e&r)+o+a;return(s<>>32-i)+e}function r(t,e,n,r,o,i,a){var s=t+(e&r|n&~r)+o+a;return(s<>>32-i)+e}function o(t,e,n,r,o,i,a){var s=t+(e^n^r)+o+a;return(s<>>32-i)+e}function i(t,e,n,r,o,i,a){var s=t+(n^(e|~r))+o+a;return(s<>>32-i)+e}var a=t,s=a.lib,c=s.WordArray,u=s.Hasher,f=a.algo,p=[];!function(){for(var t=0;64>t;t++)p[t]=4294967296*e.abs(e.sin(t+1))|0}();var l=f.MD5=u.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var a=0;16>a;a++){var s=e+a,c=t[s];t[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var u=this._hash.words,f=t[e+0],l=t[e+1],h=t[e+2],d=t[e+3],m=t[e+4],y=t[e+5],g=t[e+6],v=t[e+7],b=t[e+8],_=t[e+9],w=t[e+10],x=t[e+11],k=t[e+12],B=t[e+13],S=t[e+14],A=t[e+15],C=u[0],F=u[1],I=u[2],O=u[3];C=n(C,F,I,O,f,7,p[0]),O=n(O,C,F,I,l,12,p[1]),I=n(I,O,C,F,h,17,p[2]),F=n(F,I,O,C,d,22,p[3]),C=n(C,F,I,O,m,7,p[4]),O=n(O,C,F,I,y,12,p[5]),I=n(I,O,C,F,g,17,p[6]),F=n(F,I,O,C,v,22,p[7]),C=n(C,F,I,O,b,7,p[8]),O=n(O,C,F,I,_,12,p[9]),I=n(I,O,C,F,w,17,p[10]),F=n(F,I,O,C,x,22,p[11]),C=n(C,F,I,O,k,7,p[12]),O=n(O,C,F,I,B,12,p[13]),I=n(I,O,C,F,S,17,p[14]),F=n(F,I,O,C,A,22,p[15]),C=r(C,F,I,O,l,5,p[16]),O=r(O,C,F,I,g,9,p[17]),I=r(I,O,C,F,x,14,p[18]),F=r(F,I,O,C,f,20,p[19]),C=r(C,F,I,O,y,5,p[20]),O=r(O,C,F,I,w,9,p[21]),I=r(I,O,C,F,A,14,p[22]),F=r(F,I,O,C,m,20,p[23]),C=r(C,F,I,O,_,5,p[24]),O=r(O,C,F,I,S,9,p[25]),I=r(I,O,C,F,d,14,p[26]),F=r(F,I,O,C,b,20,p[27]),C=r(C,F,I,O,B,5,p[28]),O=r(O,C,F,I,h,9,p[29]),I=r(I,O,C,F,v,14,p[30]),F=r(F,I,O,C,k,20,p[31]),C=o(C,F,I,O,y,4,p[32]),O=o(O,C,F,I,b,11,p[33]),I=o(I,O,C,F,x,16,p[34]),F=o(F,I,O,C,S,23,p[35]),C=o(C,F,I,O,l,4,p[36]),O=o(O,C,F,I,m,11,p[37]),I=o(I,O,C,F,v,16,p[38]),F=o(F,I,O,C,w,23,p[39]),C=o(C,F,I,O,B,4,p[40]),O=o(O,C,F,I,f,11,p[41]),I=o(I,O,C,F,d,16,p[42]),F=o(F,I,O,C,g,23,p[43]),C=o(C,F,I,O,_,4,p[44]),O=o(O,C,F,I,k,11,p[45]),I=o(I,O,C,F,A,16,p[46]),F=o(F,I,O,C,h,23,p[47]),C=i(C,F,I,O,f,6,p[48]),O=i(O,C,F,I,v,10,p[49]),I=i(I,O,C,F,S,15,p[50]),F=i(F,I,O,C,y,21,p[51]),C=i(C,F,I,O,k,6,p[52]),O=i(O,C,F,I,d,10,p[53]),I=i(I,O,C,F,w,15,p[54]),F=i(F,I,O,C,l,21,p[55]),C=i(C,F,I,O,b,6,p[56]),O=i(O,C,F,I,A,10,p[57]),I=i(I,O,C,F,g,15,p[58]),F=i(F,I,O,C,B,21,p[59]),C=i(C,F,I,O,m,6,p[60]),O=i(O,C,F,I,x,10,p[61]),I=i(I,O,C,F,h,15,p[62]),F=i(F,I,O,C,_,21,p[63]),u[0]=u[0]+C|0,u[1]=u[1]+F|0,u[2]=u[2]+I|0,u[3]=u[3]+O|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296),a=r;n[(o+64>>>9<<4)+15]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[(o+64>>>9<<4)+14]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,c=s.words,u=0;4>u;u++){var f=c[u];c[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return s},clone:function(){var t=u.clone.call(this);return t._hash=this._hash.clone(),t}});a.MD5=u._createHelper(l),a.HmacMD5=u._createHmacHelper(l)}(Math),t.MD5})},{"./core":52}],61:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CFB=function(){function e(t,e,n,r){var o=this._iv;if(o){var i=o.slice(0);this._iv=void 0}else var i=this._prevBlock;r.encryptBlock(i,0);for(var a=0;n>a;a++)t[e+a]^=i[a]}var n=t.lib.BlockCipherMode.extend();return n.Encryptor=n.extend({processBlock:function(t,n){var r=this._cipher,o=r.blockSize;e.call(this,t,n,o,r),this._prevBlock=t.slice(n,n+o)}}),n.Decryptor=n.extend({processBlock:function(t,n){var r=this._cipher,o=r.blockSize,i=t.slice(n,n+o);e.call(this,t,n,o,r),this._prevBlock=i}}),n}(),t.mode.CFB})},{"./cipher-core":51,"./core":52}],62:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CTRGladman=function(){function e(t){if(255===(t>>24&255)){var e=t>>16&255,n=t>>8&255,r=255&t;255===e?(e=0,255===n?(n=0,255===r?r=0:++r):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=r}else t+=1<<24;return t}function n(t){return 0===(t[0]=e(t[0]))&&(t[1]=e(t[1])),t}var r=t.lib.BlockCipherMode.extend(),o=r.Encryptor=r.extend({processBlock:function(t,e){var r=this._cipher,o=r.blockSize,i=this._iv,a=this._counter;i&&(a=this._counter=i.slice(0),this._iv=void 0),n(a);var s=a.slice(0);r.encryptBlock(s,0);for(var c=0;o>c;c++)t[e+c]^=s[c]}});return r.Decryptor=o,r}(),t.mode.CTRGladman})},{"./cipher-core":51,"./core":52}],63:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CTR=function(){var e=t.lib.BlockCipherMode.extend(),n=e.Encryptor=e.extend({processBlock:function(t,e){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var a=i.slice(0);n.encryptBlock(a,0),i[r-1]=i[r-1]+1|0;for(var s=0;r>s;s++)t[e+s]^=a[s]}});return e.Decryptor=n,e}(),t.mode.CTR})},{"./cipher-core":51,"./core":52}],64:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.ECB=function(){var e=t.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),e.Decryptor=e.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),e}(),t.mode.ECB})},{"./cipher-core":51,"./core":52}],65:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.OFB=function(){var e=t.lib.BlockCipherMode.extend(),n=e.Encryptor=e.extend({processBlock:function(t,e){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),n.encryptBlock(i,0);for(var a=0;r>a;a++)t[e+a]^=i[a]}});return e.Decryptor=n,e}(),t.mode.OFB})},{"./cipher-core":51,"./core":52}],66:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.AnsiX923={pad:function(t,e){var n=t.sigBytes,r=4*e,o=r-n%r,i=n+o-1;t.clamp(),t.words[i>>>2]|=o<<24-i%4*8,t.sigBytes+=o},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},{"./cipher-core":51,"./core":52}],67:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.Iso10126={pad:function(e,n){var r=4*n,o=r-e.sigBytes%r;e.concat(t.lib.WordArray.random(o-1)).concat(t.lib.WordArray.create([o<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},{"./cipher-core":51,"./core":52}],68:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.Iso97971={pad:function(e,n){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,n)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},{"./cipher-core":51,"./core":52}],69:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},{"./cipher-core":51,"./core":52}],70:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.ZeroPadding={pad:function(t,e){var n=4*e;t.clamp(),t.sigBytes+=n-(t.sigBytes%n||n)},unpad:function(t){for(var e=t.words,n=t.sigBytes-1;!(e[n>>>2]>>>24-n%4*8&255);)n--;t.sigBytes=n+1}},t.pad.ZeroPadding})},{"./cipher-core":51,"./core":52}],71:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.Base,o=n.WordArray,i=e.algo,a=i.SHA1,s=i.HMAC,c=i.PBKDF2=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var n=this.cfg,r=s.create(n.hasher,t),i=o.create(),a=o.create([1]),c=i.words,u=a.words,f=n.keySize,p=n.iterations;c.lengthy;y++){m=r.finalize(m),r.reset();for(var g=m.words,v=0;d>v;v++)h[v]^=g[v]}i.concat(l),u[0]++}return i.sigBytes=4*f,i}});e.PBKDF2=function(t,e,n){return c.create(n).compute(t,e)}}(),t.PBKDF2})},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,n=0;8>n;n++)s[n]=e[n];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var n=0;8>n;n++){var r=t[n]+e[n],o=65535&r,i=r>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&r)*r|0)+((65535&r)*r|0);c[n]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=[],s=[],c=[],u=i.RabbitLegacy=o.extend({_doReset:function(){var t=this._key.words,n=this.cfg.iv,r=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],o=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;4>i;i++)e.call(this);for(var i=0;8>i;i++)o[i]^=r[i+4&7];if(n){var a=n.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,l=f<<16|65535&u;o[0]^=u,o[1]^=p,o[2]^=f,o[3]^=l,o[4]^=u,o[5]^=p,o[6]^=f,o[7]^=l;for(var i=0;4>i;i++)e.call(this)}},_doProcessBlock:function(t,n){var r=this._X;e.call(this),a[0]=r[0]^r[5]>>>16^r[3]<<16,a[1]=r[2]^r[7]>>>16^r[5]<<16,a[2]=r[4]^r[1]>>>16^r[7]<<16,a[3]=r[6]^r[3]>>>16^r[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[n+o]^=a[o]},blockSize:4,ivSize:2});n.RabbitLegacy=o._createHelper(u)}(),t.RabbitLegacy})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,n=0;8>n;n++)s[n]=e[n];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var n=0;8>n;n++){var r=t[n]+e[n],o=65535&r,i=r>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&r)*r|0)+((65535&r)*r|0);c[n]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=[],s=[],c=[],u=i.Rabbit=o.extend({_doReset:function(){for(var t=this._key.words,n=this.cfg.iv,r=0;4>r;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);var o=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;4>r;r++)e.call(this);for(var r=0;8>r;r++)i[r]^=o[r+4&7];if(n){var a=n.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,l=f<<16|65535&u;i[0]^=u,i[1]^=p,i[2]^=f,i[3]^=l,i[4]^=u,i[5]^=p,i[6]^=f,i[7]^=l;for(var r=0;4>r;r++)e.call(this)}},_doProcessBlock:function(t,n){var r=this._X;e.call(this),a[0]=r[0]^r[5]>>>16^r[3]<<16,a[1]=r[2]^r[7]>>>16^r[5]<<16,a[2]=r[4]^r[1]>>>16^r[7]<<16,a[3]=r[6]^r[3]>>>16^r[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[n+o]^=a[o]},blockSize:4,ivSize:2});n.Rabbit=o._createHelper(u)}(),t.Rabbit})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._S,e=this._i,n=this._j,r=0,o=0;4>o;o++){e=(e+1)%256,n=(n+t[e])%256;var i=t[e];t[e]=t[n],t[n]=i,r|=t[(t[e]+t[n])%256]<<24-8*o}return this._i=e,this._j=n,r}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=i.RC4=o.extend({_doReset:function(){for(var t=this._key,e=t.words,n=t.sigBytes,r=this._S=[],o=0;256>o;o++)r[o]=o;for(var o=0,i=0;256>o;o++){var a=o%n,s=e[a>>>2]>>>24-a%4*8&255;i=(i+r[o]+s)%256;var c=r[o];r[o]=r[i],r[i]=c}this._i=this._j=0},_doProcessBlock:function(t,n){t[n]^=e.call(this)},keySize:8,ivSize:0});n.RC4=o._createHelper(a);var s=i.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)e.call(this)}});n.RC4Drop=o._createHelper(s)}(),t.RC4})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){function n(t,e,n){return t^e^n}function r(t,e,n){return t&e|~t&n}function o(t,e,n){return(t|~e)^n}function i(t,e,n){return t&n|e&~n}function a(t,e,n){return t^(e|~n)}function s(t,e){return t<>>32-e}var c=t,u=c.lib,f=u.WordArray,p=u.Hasher,l=c.algo,h=f.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),d=f.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),m=f.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),y=f.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),g=f.create([0,1518500249,1859775393,2400959708,2840853838]),v=f.create([1352829926,1548603684,1836072691,2053994217,0]),b=l.RIPEMD160=p.extend({_doReset:function(){this._hash=f.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var c=0;16>c;c++){var u=e+c,f=t[u];t[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}var p,l,b,_,w,x,k,B,S,A,C=this._hash.words,F=g.words,I=v.words,O=h.words,N=d.words,D=m.words,P=y.words;x=p=C[0],k=l=C[1],B=b=C[2],S=_=C[3],A=w=C[4];for(var T,c=0;80>c;c+=1)T=p+t[e+O[c]]|0,T+=16>c?n(l,b,_)+F[0]:32>c?r(l,b,_)+F[1]:48>c?o(l,b,_)+F[2]:64>c?i(l,b,_)+F[3]:a(l,b,_)+F[4],T=0|T,T=s(T,D[c]),T=T+w|0,p=w,w=_,_=s(b,10),b=l,l=T,T=x+t[e+N[c]]|0,T+=16>c?a(k,B,S)+I[0]:32>c?i(k,B,S)+I[1]:48>c?o(k,B,S)+I[2]:64>c?r(k,B,S)+I[3]:n(k,B,S)+I[4],T=0|T,T=s(T,P[c]),T=T+A|0,x=A,A=S,S=s(B,10),B=k,k=T;T=C[1]+b+S|0,C[1]=C[2]+_+A|0,C[2]=C[3]+w+x|0,C[3]=C[4]+p+k|0,C[4]=C[0]+l+B|0,C[0]=T},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;e[r>>>5]|=128<<24-r%32,e[(r+64>>>9<<4)+14]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),t.sigBytes=4*(e.length+1),this._process();for(var o=this._hash,i=o.words,a=0;5>a;a++){var s=i[a];i[a]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return o},clone:function(){var t=p.clone.call(this);return t._hash=this._hash.clone(),t}});c.RIPEMD160=p._createHelper(b),c.HmacRIPEMD160=p._createHmacHelper(b)}(Math),t.RIPEMD160})},{"./core":52}],76:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=n.Hasher,i=e.algo,a=[],s=i.SHA1=o.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],s=n[3],c=n[4],u=0;80>u;u++){if(16>u)a[u]=0|t[e+u];else{ -var f=a[u-3]^a[u-8]^a[u-14]^a[u-16];a[u]=f<<1|f>>>31}var p=(r<<5|r>>>27)+c+a[u];p+=20>u?(o&i|~o&s)+1518500249:40>u?(o^i^s)+1859775393:60>u?(o&i|o&s|i&s)-1894007588:(o^i^s)-899497514,c=s,s=i,i=o<<30|o>>>2,o=r,r=p}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return e[r>>>5]|=128<<24-r%32,e[(r+64>>>9<<4)+14]=Math.floor(n/4294967296),e[(r+64>>>9<<4)+15]=n,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=o._createHelper(s),e.HmacSHA1=o._createHmacHelper(s)}(),t.SHA1})},{"./core":52}],77:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha256")):"function"==typeof define&&define.amd?define(["./core","./sha256"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=e.algo,i=o.SHA256,a=o.SHA224=i.extend({_doReset:function(){this._hash=new r.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=i._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=i._createHelper(a),e.HmacSHA224=i._createHmacHelper(a)}(),t.SHA224})},{"./core":52,"./sha256":78}],78:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.algo,s=[],c=[];!function(){function t(t){for(var n=e.sqrt(t),r=2;n>=r;r++)if(!(t%r))return!1;return!0}function n(t){return 4294967296*(t-(0|t))|0}for(var r=2,o=0;64>o;)t(r)&&(8>o&&(s[o]=n(e.pow(r,.5))),c[o]=n(e.pow(r,1/3)),o++),r++}();var u=[],f=a.SHA256=i.extend({_doReset:function(){this._hash=new o.init(s.slice(0))},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],a=n[3],s=n[4],f=n[5],p=n[6],l=n[7],h=0;64>h;h++){if(16>h)u[h]=0|t[e+h];else{var d=u[h-15],m=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,y=u[h-2],g=(y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10;u[h]=m+u[h-7]+g+u[h-16]}var v=s&f^~s&p,b=r&o^r&i^o&i,_=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),w=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),x=l+w+v+c[h]+u[h],k=_+b;l=p,p=f,f=s,s=a+x|0,a=i,i=o,o=r,r=x+k|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+a|0,n[4]=n[4]+s|0,n[5]=n[5]+f|0,n[6]=n[6]+p|0,n[7]=n[7]+l|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[(o+64>>>9<<4)+14]=e.floor(r/4294967296),n[(o+64>>>9<<4)+15]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});n.SHA256=i._createHelper(f),n.HmacSHA256=i._createHmacHelper(f)}(Math),t.SHA256})},{"./core":52}],79:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.x64,s=a.Word,c=n.algo,u=[],f=[],p=[];!function(){for(var t=1,e=0,n=0;24>n;n++){u[t+5*e]=(n+1)*(n+2)/2%64;var r=e%5,o=(2*t+3*e)%5;t=r,e=o}for(var t=0;5>t;t++)for(var e=0;5>e;e++)f[t+5*e]=e+(2*t+3*e)%5*5;for(var i=1,a=0;24>a;a++){for(var c=0,l=0,h=0;7>h;h++){if(1&i){var d=(1<d?l^=1<t;t++)l[t]=s.create()}();var h=c.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;25>e;e++)t[e]=new s.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var n=this._state,r=this.blockSize/2,o=0;r>o;o++){var i=t[e+2*o],a=t[e+2*o+1];i=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8);var s=n[o];s.high^=a,s.low^=i}for(var c=0;24>c;c++){for(var h=0;5>h;h++){for(var d=0,m=0,y=0;5>y;y++){var s=n[h+5*y];d^=s.high,m^=s.low}var g=l[h];g.high=d,g.low=m}for(var h=0;5>h;h++)for(var v=l[(h+4)%5],b=l[(h+1)%5],_=b.high,w=b.low,d=v.high^(_<<1|w>>>31),m=v.low^(w<<1|_>>>31),y=0;5>y;y++){var s=n[h+5*y];s.high^=d,s.low^=m}for(var x=1;25>x;x++){var s=n[x],k=s.high,B=s.low,S=u[x];if(32>S)var d=k<>>32-S,m=B<>>32-S;else var d=B<>>64-S,m=k<>>64-S;var A=l[f[x]];A.high=d,A.low=m}var C=l[0],F=n[0];C.high=F.high,C.low=F.low;for(var h=0;5>h;h++)for(var y=0;5>y;y++){var x=h+5*y,s=n[x],I=l[x],O=l[(h+1)%5+5*y],N=l[(h+2)%5+5*y];s.high=I.high^~O.high&N.high,s.low=I.low^~O.low&N.low}var s=n[0],D=p[c];s.high^=D.high,s.low^=D.low}},_doFinalize:function(){var t=this._data,n=t.words,r=(8*this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;n[r>>>5]|=1<<24-r%32,n[(e.ceil((r+1)/i)*i>>>5)-1]|=128,t.sigBytes=4*n.length,this._process();for(var a=this._state,s=this.cfg.outputLength/8,c=s/8,u=[],f=0;c>f;f++){var p=a[f],l=p.high,h=p.low;l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8),u.push(h),u.push(l)}return new o.init(u,s)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),n=0;25>n;n++)e[n]=e[n].clone();return t}});n.SHA3=i._createHelper(h),n.HmacSHA3=i._createHmacHelper(h)}(Math),t.SHA3})},{"./core":52,"./x64-core":83}],80:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core"),t("./sha512")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./sha512"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.x64,r=n.Word,o=n.WordArray,i=e.algo,a=i.SHA512,s=i.SHA384=a.extend({_doReset:function(){this._hash=new o.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=a._createHelper(s),e.HmacSHA384=a._createHmacHelper(s)}(),t.SHA384})},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){return a.create.apply(a,arguments)}var n=t,r=n.lib,o=r.Hasher,i=n.x64,a=i.Word,s=i.WordArray,c=n.algo,u=[e(1116352408,3609767458),e(1899447441,602891725),e(3049323471,3964484399),e(3921009573,2173295548),e(961987163,4081628472),e(1508970993,3053834265),e(2453635748,2937671579),e(2870763221,3664609560),e(3624381080,2734883394),e(310598401,1164996542),e(607225278,1323610764),e(1426881987,3590304994),e(1925078388,4068182383),e(2162078206,991336113),e(2614888103,633803317),e(3248222580,3479774868),e(3835390401,2666613458),e(4022224774,944711139),e(264347078,2341262773),e(604807628,2007800933),e(770255983,1495990901),e(1249150122,1856431235),e(1555081692,3175218132),e(1996064986,2198950837),e(2554220882,3999719339),e(2821834349,766784016),e(2952996808,2566594879),e(3210313671,3203337956),e(3336571891,1034457026),e(3584528711,2466948901),e(113926993,3758326383),e(338241895,168717936),e(666307205,1188179964),e(773529912,1546045734),e(1294757372,1522805485),e(1396182291,2643833823),e(1695183700,2343527390),e(1986661051,1014477480),e(2177026350,1206759142),e(2456956037,344077627),e(2730485921,1290863460),e(2820302411,3158454273),e(3259730800,3505952657),e(3345764771,106217008),e(3516065817,3606008344),e(3600352804,1432725776),e(4094571909,1467031594),e(275423344,851169720),e(430227734,3100823752),e(506948616,1363258195),e(659060556,3750685593),e(883997877,3785050280),e(958139571,3318307427),e(1322822218,3812723403),e(1537002063,2003034995),e(1747873779,3602036899),e(1955562222,1575990012),e(2024104815,1125592928),e(2227730452,2716904306),e(2361852424,442776044),e(2428436474,593698344),e(2756734187,3733110249),e(3204031479,2999351573),e(3329325298,3815920427),e(3391569614,3928383900),e(3515267271,566280711),e(3940187606,3454069534),e(4118630271,4000239992),e(116418474,1914138554),e(174292421,2731055270),e(289380356,3203993006),e(460393269,320620315),e(685471733,587496836),e(852142971,1086792851),e(1017036298,365543100),e(1126000580,2618297676),e(1288033470,3409855158),e(1501505948,4234509866),e(1607167915,987167468),e(1816402316,1246189591)],f=[];!function(){for(var t=0;80>t;t++)f[t]=e()}();var p=c.SHA512=o.extend({_doReset:function(){this._hash=new s.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],a=n[3],s=n[4],c=n[5],p=n[6],l=n[7],h=r.high,d=r.low,m=o.high,y=o.low,g=i.high,v=i.low,b=a.high,_=a.low,w=s.high,x=s.low,k=c.high,B=c.low,S=p.high,A=p.low,C=l.high,F=l.low,I=h,O=d,N=m,D=y,P=g,T=v,E=b,R=_,M=w,H=x,j=k,q=B,L=S,z=A,U=C,W=F,J=0;80>J;J++){var G=f[J];if(16>J)var X=G.high=0|t[e+2*J],$=G.low=0|t[e+2*J+1];else{var K=f[J-15],V=K.high,Z=K.low,Y=(V>>>1|Z<<31)^(V>>>8|Z<<24)^V>>>7,Q=(Z>>>1|V<<31)^(Z>>>8|V<<24)^(Z>>>7|V<<25),tt=f[J-2],et=tt.high,nt=tt.low,rt=(et>>>19|nt<<13)^(et<<3|nt>>>29)^et>>>6,ot=(nt>>>19|et<<13)^(nt<<3|et>>>29)^(nt>>>6|et<<26),it=f[J-7],at=it.high,st=it.low,ct=f[J-16],ut=ct.high,ft=ct.low,$=Q+st,X=Y+at+(Q>>>0>$>>>0?1:0),$=$+ot,X=X+rt+(ot>>>0>$>>>0?1:0),$=$+ft,X=X+ut+(ft>>>0>$>>>0?1:0);G.high=X,G.low=$}var pt=M&j^~M&L,lt=H&q^~H&z,ht=I&N^I&P^N&P,dt=O&D^O&T^D&T,mt=(I>>>28|O<<4)^(I<<30|O>>>2)^(I<<25|O>>>7),yt=(O>>>28|I<<4)^(O<<30|I>>>2)^(O<<25|I>>>7),gt=(M>>>14|H<<18)^(M>>>18|H<<14)^(M<<23|H>>>9),vt=(H>>>14|M<<18)^(H>>>18|M<<14)^(H<<23|M>>>9),bt=u[J],_t=bt.high,wt=bt.low,xt=W+vt,kt=U+gt+(W>>>0>xt>>>0?1:0),xt=xt+lt,kt=kt+pt+(lt>>>0>xt>>>0?1:0),xt=xt+wt,kt=kt+_t+(wt>>>0>xt>>>0?1:0),xt=xt+$,kt=kt+X+($>>>0>xt>>>0?1:0),Bt=yt+dt,St=mt+ht+(yt>>>0>Bt>>>0?1:0);U=L,W=z,L=j,z=q,j=M,q=H,H=R+xt|0,M=E+kt+(R>>>0>H>>>0?1:0)|0,E=P,R=T,P=N,T=D,N=I,D=O,O=xt+Bt|0,I=kt+St+(xt>>>0>O>>>0?1:0)|0}d=r.low=d+O,r.high=h+I+(O>>>0>d>>>0?1:0),y=o.low=y+D,o.high=m+N+(D>>>0>y>>>0?1:0),v=i.low=v+T,i.high=g+P+(T>>>0>v>>>0?1:0),_=a.low=_+R,a.high=b+E+(R>>>0>_>>>0?1:0),x=s.low=x+H,s.high=w+M+(H>>>0>x>>>0?1:0),B=c.low=B+q,c.high=k+j+(q>>>0>B>>>0?1:0),A=p.low=A+z,p.high=S+L+(z>>>0>A>>>0?1:0),F=l.low=F+W,l.high=C+U+(W>>>0>F>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;e[r>>>5]|=128<<24-r%32,e[(r+128>>>10<<5)+30]=Math.floor(n/4294967296),e[(r+128>>>10<<5)+31]=n,t.sigBytes=4*e.length,this._process();var o=this._hash.toX32();return o},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});n.SHA512=o._createHelper(p),n.HmacSHA512=o._createHmacHelper(p)}(),t.SHA512})},{"./core":52,"./x64-core":83}],82:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(t,e){var n=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=n,this._lBlock^=n<>>t^this._lBlock)&e;this._lBlock^=n,this._rBlock^=n<r;r++){var o=c[r]-1;n[r]=e[o>>>5]>>>31-o%32&1}for(var i=this._subKeys=[],a=0;16>a;a++){for(var s=i[a]=[],p=f[a],r=0;24>r;r++)s[r/6|0]|=n[(u[r]-1+p)%28]<<31-r%6,s[4+(r/6|0)]|=n[28+(u[r+24]-1+p)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(var r=1;7>r;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var l=this._invSubKeys=[],r=0;16>r;r++)l[r]=i[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,r,o){this._lBlock=t[r],this._rBlock=t[r+1],e.call(this,4,252645135),e.call(this,16,65535),n.call(this,2,858993459),n.call(this,8,16711935),e.call(this,1,1431655765);for(var i=0;16>i;i++){for(var a=o[i],s=this._lBlock,c=this._rBlock,u=0,f=0;8>f;f++)u|=p[f][((c^a[f])&l[f])>>>0];this._lBlock=c,this._rBlock=s^u}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,e.call(this,1,1431655765),n.call(this,8,16711935),n.call(this,2,858993459),e.call(this,16,65535),e.call(this,4,252645135),t[r]=this._lBlock,t[r+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});r.DES=a._createHelper(h);var d=s.TripleDES=a.extend({_doReset:function(){var t=this._key,e=t.words;this._des1=h.createEncryptor(i.create(e.slice(0,2))),this._des2=h.createEncryptor(i.create(e.slice(2,4))),this._des3=h.createEncryptor(i.create(e.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});r.TripleDES=a._createHelper(d)}(),t.TripleDES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.Base,i=r.WordArray,a=n.x64={};a.Word=o.extend({init:function(t,e){this.high=t,this.low=e}}),a.WordArray=o.extend({init:function(t,n){t=this.words=t||[],n!=e?this.sigBytes=n:this.sigBytes=8*t.length},toX32:function(){for(var t=this.words,e=t.length,n=[],r=0;e>r;r++){var o=t[r];n.push(o.high),n.push(o.low)}return i.create(n,this.sigBytes)},clone:function(){for(var t=o.clone.call(this),e=t.words=this.words.slice(0),n=e.length,r=0;n>r;r++)e[r]=e[r].clone();return t}})}(),t})},{"./core":52}],84:[function(t,e,n){!function(t){function r(t){for(var e,n,r=[],o=0,i=t.length;i>o;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function o(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=v(e>>>10&1023|55296),e=56320|1023&e),o+=v(e);return o}function i(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return v(t>>e&63|128)}function s(t){if(0==(4294967168&t))return v(t);var e="";return 0==(4294965248&t)?e=v(t>>6&31|192):0==(4294901760&t)?(i(t),e=v(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=v(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=v(63&t|128)}function c(t){for(var e,n=r(t),o=n.length,i=-1,a="";++i=y)throw Error("Invalid byte index");var t=255&m[g];if(g++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function f(){var t,e,n,r,o;if(g>y)throw Error("Invalid byte index");if(g==y)return!1;if(t=255&m[g],g++,0==(128&t))return t;if(192==(224&t)){var e=u();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=u(),n=u(),o=(15&t)<<12|e<<6|n,o>=2048)return i(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=u(),n=u(),r=u(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function p(t){m=r(t),y=m.length,g=0;for(var e,n=[];(e=f())!==!1;)n.push(e);return o(n)}var l="object"==typeof n&&n,h="object"==typeof e&&e&&e.exports==l&&e,d="object"==typeof global&&global;(d.global===d||d.window===d)&&(t=d);var m,y,g,v=String.fromCharCode,b={version:"2.0.0",encode:c,decode:p};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return b});else if(l&&!l.nodeType)if(h)h.exports=b;else{var _={},w=_.hasOwnProperty;for(var x in b)w.call(b,x)&&(l[x]=b[x])}else t.utf8=b}(this)},{}],"bignumber.js":[function(t,e,n){!function(n){"use strict";function r(t){function e(t,r){var o,i,a,s,c,u,f=this;if(!(f instanceof e))return W&&D(26,"constructor call without new",t),new e(t,r);if(null!=r&&J(r,2,64,E,"base")){if(r=0|r,u=t+"",10==r)return f=new e(t instanceof e?t:u),P(f,H+f.e+1,j);if((s="number"==typeof t)&&0*t!=0||!new RegExp("^-?"+(o="["+x.slice(0,r)+"]+")+"(?:\\."+o+")?$",37>r?"i":"").test(u))return m(f,u,s,r);s?(f.s=0>1/t?(u=u.slice(1),-1):1,W&&u.replace(/^0\.0*|\./,"").length>15&&D(E,w,t),s=!1):f.s=45===u.charCodeAt(0)?(u=u.slice(1),-1):1,u=n(u,10,r,f.s)}else{if(t instanceof e)return f.s=t.s,f.e=t.e,f.c=(t=t.c)?t.slice():t,void(E=0);if((s="number"==typeof t)&&0*t==0){if(f.s=0>1/t?(t=-t,-1):1,t===~~t){for(i=0,a=t;a>=10;a/=10,i++);return f.e=i,f.c=[t],void(E=0)}u=t+""}else{if(!y.test(u=t+""))return m(f,u,s);f.s=45===u.charCodeAt(0)?(u=u.slice(1),-1):1}}for((i=u.indexOf("."))>-1&&(u=u.replace(".","")),(a=u.search(/e/i))>0?(0>i&&(i=a),i+=+u.slice(a+1),u=u.substring(0,a)):0>i&&(i=u.length),a=0;48===u.charCodeAt(a);a++);for(c=u.length;48===u.charCodeAt(--c););if(u=u.slice(a,c+1))if(c=u.length,s&&W&&c>15&&D(E,w,f.s*t),i=i-a-1,i>U)f.c=f.e=null;else if(z>i)f.c=[f.e=0];else{if(f.e=i,f.c=[],a=(i+1)%B,0>i&&(a+=B),c>a){for(a&&f.c.push(+u.slice(0,a)),c-=B;c>a;)f.c.push(+u.slice(a,a+=B));u=u.slice(a),a=B-u.length}else a-=c;for(;a--;u+="0");f.c.push(+u)}else f.c=[f.e=0];E=0}function n(t,n,r,o){var a,s,c,f,l,h,d,m=t.indexOf("."),y=H,g=j;for(37>r&&(t=t.toLowerCase()),m>=0&&(c=$,$=0,t=t.replace(".",""),d=new e(r),l=d.pow(t.length-m),$=c,d.c=u(p(i(l.c),l.e),10,n),d.e=d.c.length),h=u(t,r,n),s=c=h.length;0==h[--c];h.pop());if(!h[0])return"0";if(0>m?--s:(l.c=h,l.e=s,l.s=o,l=T(l,d,y,g,n),h=l.c,f=l.r,s=l.e),a=s+y+1,m=h[a],c=n/2,f=f||0>a||null!=h[a+1],f=4>g?(null!=m||f)&&(0==g||g==(l.s<0?3:2)):m>c||m==c&&(4==g||f||6==g&&1&h[a-1]||g==(l.s<0?8:7)),1>a||!h[0])t=f?p("1",-y):"0";else{if(h.length=a,f)for(--n;++h[--a]>n;)h[a]=0,a||(++s,h.unshift(1));for(c=h.length;!h[--c];);for(m=0,t="";c>=m;t+=x.charAt(h[m++]));t=p(t,s)}return t}function h(t,n,r,o){var a,s,c,u,l;if(r=null!=r&&J(r,0,8,o,_)?0|r:j,!t.c)return t.toString();if(a=t.c[0],c=t.e,null==n)l=i(t.c),l=19==o||24==o&&q>=c?f(l,c):p(l,c);else if(t=P(new e(t),n,r),s=t.e,l=i(t.c),u=l.length,19==o||24==o&&(s>=n||q>=s)){for(;n>u;l+="0",u++);l=f(l,s)}else if(n-=c,l=p(l,s),s+1>u){if(--n>0)for(l+=".";n--;l+="0");}else if(n+=s-u,n>0)for(s+1==u&&(l+=".");n--;l+="0");return t.s<0&&a?"-"+l:l}function I(t,n){var r,o,i=0;for(c(t[0])&&(t=t[0]),r=new e(t[0]);++it||t>n||t!=l(t))&&D(r,(o||"decimal places")+(e>t||t>n?" out of range":" not an integer"),t),!0}function N(t,e,n){for(var r=1,o=e.length;!e[--o];e.pop());for(o=e[0];o>=10;o/=10,r++);return(n=r+n*B-1)>U?t.c=t.e=null:z>n?t.c=[t.e=0]:(t.e=n,t.c=e),t}function D(t,e,n){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][t]+"() "+e+": "+n);throw r.name="BigNumber Error",E=0,r}function P(t,e,n,r){var o,i,a,s,c,u,f,p=t.c,l=A;if(p){t:{for(o=1,s=p[0];s>=10;s/=10,o++);if(i=e-o,0>i)i+=B,a=e,c=p[u=0],f=c/l[o-a-1]%10|0;else if(u=g((i+1)/B),u>=p.length){if(!r)break t;for(;p.length<=u;p.push(0));c=f=0,o=1,i%=B,a=i-B+1}else{for(c=s=p[u],o=1;s>=10;s/=10,o++);i%=B,a=i-B+o,f=0>a?0:c/l[o-a-1]%10|0}if(r=r||0>e||null!=p[u+1]||(0>a?c:c%l[o-a-1]),r=4>n?(f||r)&&(0==n||n==(t.s<0?3:2)):f>5||5==f&&(4==n||r||6==n&&(i>0?a>0?c/l[o-a]:0:p[u-1])%10&1||n==(t.s<0?8:7)),1>e||!p[0])return p.length=0,r?(e-=t.e+1,p[0]=l[e%B],t.e=-e||0):p[0]=t.e=0,t;if(0==i?(p.length=u,s=1,u--):(p.length=u+1,s=l[B-i],p[u]=a>0?v(c/l[o-a]%l[a])*s:0),r)for(;;){if(0==u){for(i=1,a=p[0];a>=10;a/=10,i++);for(a=p[0]+=s,s=1;a>=10;a/=10,s++);i!=s&&(t.e++,p[0]==k&&(p[0]=1));break}if(p[u]+=s,p[u]!=k)break;p[u--]=0,s=1}for(i=p.length;0===p[--i];p.pop());}t.e>U?t.c=t.e=null:t.en?null!=(t=o[n++]):void 0};return a(e="DECIMAL_PLACES")&&J(t,0,F,2,e)&&(H=0|t),r[e]=H,a(e="ROUNDING_MODE")&&J(t,0,8,2,e)&&(j=0|t),r[e]=j,a(e="EXPONENTIAL_AT")&&(c(t)?J(t[0],-F,0,2,e)&&J(t[1],0,F,2,e)&&(q=0|t[0],L=0|t[1]):J(t,-F,F,2,e)&&(q=-(L=0|(0>t?-t:t)))),r[e]=[q,L],a(e="RANGE")&&(c(t)?J(t[0],-F,-1,2,e)&&J(t[1],1,F,2,e)&&(z=0|t[0],U=0|t[1]):J(t,-F,F,2,e)&&(0|t?z=-(U=0|(0>t?-t:t)):W&&D(2,e+" cannot be zero",t))),r[e]=[z,U],a(e="ERRORS")&&(t===!!t||1===t||0===t?(E=0,J=(W=!!t)?O:s):W&&D(2,e+b,t)),r[e]=W,a(e="CRYPTO")&&(t===!!t||1===t||0===t?(G=!(!t||!d||"object"!=typeof d),t&&!G&&W&&D(2,"crypto unavailable",d)):W&&D(2,e+b,t)),r[e]=G,a(e="MODULO_MODE")&&J(t,0,9,2,e)&&(X=0|t),r[e]=X,a(e="POW_PRECISION")&&J(t,0,F,2,e)&&($=0|t),r[e]=$,a(e="FORMAT")&&("object"==typeof t?K=t:W&&D(2,e+" not an object",t)),r[e]=K,r},e.max=function(){return I(arguments,R.lt)},e.min=function(){return I(arguments,R.gt)},e.random=function(){var t=9007199254740992,n=Math.random()*t&2097151?function(){return v(Math.random()*t)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(t){var r,o,i,a,s,c=0,u=[],f=new e(M);if(t=null!=t&&J(t,0,F,14)?0|t:H,a=g(t/B),G)if(d&&d.getRandomValues){for(r=d.getRandomValues(new Uint32Array(a*=2));a>c;)s=131072*r[c]+(r[c+1]>>>11),s>=9e15?(o=d.getRandomValues(new Uint32Array(2)),r[c]=o[0],r[c+1]=o[1]):(u.push(s%1e14),c+=2);c=a/2}else if(d&&d.randomBytes){for(r=d.randomBytes(a*=7);a>c;)s=281474976710656*(31&r[c])+1099511627776*r[c+1]+4294967296*r[c+2]+16777216*r[c+3]+(r[c+4]<<16)+(r[c+5]<<8)+r[c+6],s>=9e15?d.randomBytes(7).copy(r,c):(u.push(s%1e14),c+=7);c=a/7}else W&&D(14,"crypto unavailable",d);if(!c)for(;a>c;)s=n(),9e15>s&&(u[c++]=s%1e14);for(a=u[--c],t%=B,a&&t&&(s=A[B-t],u[c]=v(a/s)*s);0===u[c];u.pop(),c--);if(0>c)u=[i=0];else{for(i=-1;0===u[0];u.shift(),i-=B);for(c=1,s=u[0];s>=10;s/=10,c++);B>c&&(i-=B-c)}return f.e=i,f.c=u,f}}(),T=function(){function t(t,e,n){var r,o,i,a,s=0,c=t.length,u=e%C,f=e/C|0;for(t=t.slice();c--;)i=t[c]%C,a=t[c]/C|0,r=f*i+a*u,o=u*i+r%C*C+s,s=(o/n|0)+(r/C|0)+f*a,t[c]=o%n;return s&&t.unshift(s),t}function n(t,e,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;n>o;o++)if(t[o]!=e[o]){i=t[o]>e[o]?1:-1;break}return i}function r(t,e,n,r){for(var o=0;n--;)t[n]-=o,o=t[n]1;t.shift());}return function(i,a,s,c,u){var f,p,l,h,d,m,y,g,b,_,w,x,S,A,C,F,I,O=i.s==a.s?1:-1,N=i.c,D=a.c;if(!(N&&N[0]&&D&&D[0]))return new e(i.s&&a.s&&(N?!D||N[0]!=D[0]:D)?N&&0==N[0]||!D?0*O:O/0:NaN);for(g=new e(O),b=g.c=[],p=i.e-a.e,O=s+p+1,u||(u=k,p=o(i.e/B)-o(a.e/B),O=O/B|0),l=0;D[l]==(N[l]||0);l++);if(D[l]>(N[l]||0)&&p--,0>O)b.push(1),h=!0;else{for(A=N.length,F=D.length,l=0,O+=2,d=v(u/(D[0]+1)),d>1&&(D=t(D,d,u),N=t(N,d,u),F=D.length,A=N.length),S=F,_=N.slice(0,F),w=_.length;F>w;_[w++]=0);I=D.slice(),I.unshift(0),C=D[0],D[1]>=u/2&&C++;do{if(d=0,f=n(D,_,F,w),0>f){if(x=_[0],F!=w&&(x=x*u+(_[1]||0)),d=v(x/C),d>1)for(d>=u&&(d=u-1),m=t(D,d,u),y=m.length,w=_.length;1==n(m,_,y,w);)d--,r(m,y>F?I:D,y,u),y=m.length,f=1;else 0==d&&(f=d=1),m=D.slice(),y=m.length;if(w>y&&m.unshift(0),r(_,m,w,u),w=_.length,-1==f)for(;n(D,_,F,w)<1;)d++,r(_,w>F?I:D,w,u),w=_.length}else 0===f&&(d++,_=[0]); -b[l++]=d,_[0]?_[w++]=N[S]||0:(_=[N[S]],w=1)}while((S++=10;O/=10,l++);P(g,s+(g.e=l+p*B-1)+1,c,h)}else g.e=p,g.r=+h;return g}}(),m=function(){var t=/^(-?)0([xbo])/i,n=/^([^.]+)\.$/,r=/^\.([^.]+)$/,o=/^-?(Infinity|NaN)$/,i=/^\s*\+|^\s+|\s+$/g;return function(a,s,c,u){var f,p=c?s:s.replace(i,"");if(o.test(p))a.s=isNaN(p)?null:0>p?-1:1;else{if(!c&&(p=p.replace(t,function(t,e,n){return f="x"==(n=n.toLowerCase())?16:"b"==n?2:8,u&&u!=f?t:e}),u&&(f=u,p=p.replace(n,"$1").replace(r,"0.$1")),s!=p))return new e(p,f);W&&D(E,"not a"+(u?" base "+u:"")+" number",s),a.s=null}a.c=a.e=null,E=0}}(),R.absoluteValue=R.abs=function(){var t=new e(this);return t.s<0&&(t.s=1),t},R.ceil=function(){return P(new e(this),this.e+1,2)},R.comparedTo=R.cmp=function(t,n){return E=1,a(this,new e(t,n))},R.decimalPlaces=R.dp=function(){var t,e,n=this.c;if(!n)return null;if(t=((e=n.length-1)-o(this.e/B))*B,e=n[e])for(;e%10==0;e/=10,t--);return 0>t&&(t=0),t},R.dividedBy=R.div=function(t,n){return E=3,T(this,new e(t,n),H,j)},R.dividedToIntegerBy=R.divToInt=function(t,n){return E=4,T(this,new e(t,n),0,1)},R.equals=R.eq=function(t,n){return E=5,0===a(this,new e(t,n))},R.floor=function(){return P(new e(this),this.e+1,3)},R.greaterThan=R.gt=function(t,n){return E=6,a(this,new e(t,n))>0},R.greaterThanOrEqualTo=R.gte=function(t,n){return E=7,1===(n=a(this,new e(t,n)))||0===n},R.isFinite=function(){return!!this.c},R.isInteger=R.isInt=function(){return!!this.c&&o(this.e/B)>this.c.length-2},R.isNaN=function(){return!this.s},R.isNegative=R.isNeg=function(){return this.s<0},R.isZero=function(){return!!this.c&&0==this.c[0]},R.lessThan=R.lt=function(t,n){return E=8,a(this,new e(t,n))<0},R.lessThanOrEqualTo=R.lte=function(t,n){return E=9,-1===(n=a(this,new e(t,n)))||0===n},R.minus=R.sub=function(t,n){var r,i,a,s,c=this,u=c.s;if(E=10,t=new e(t,n),n=t.s,!u||!n)return new e(NaN);if(u!=n)return t.s=-n,c.plus(t);var f=c.e/B,p=t.e/B,l=c.c,h=t.c;if(!f||!p){if(!l||!h)return l?(t.s=-n,t):new e(h?c:NaN);if(!l[0]||!h[0])return h[0]?(t.s=-n,t):new e(l[0]?c:3==j?-0:0)}if(f=o(f),p=o(p),l=l.slice(),u=f-p){for((s=0>u)?(u=-u,a=l):(p=f,a=h),a.reverse(),n=u;n--;a.push(0));a.reverse()}else for(i=(s=(u=l.length)<(n=h.length))?u:n,u=n=0;i>n;n++)if(l[n]!=h[n]){s=l[n]0)for(;n--;l[r++]=0);for(n=k-1;i>u;){if(l[--i]0?(c=s,r=f):(a=-a,r=u),r.reverse();a--;r.push(0));r.reverse()}for(a=u.length,n=f.length,0>a-n&&(r=f,f=u,u=r,n=a),a=0;n;)a=(u[--n]=u[n]+f[n]+a)/k|0,u[n]%=k;return a&&(u.unshift(a),++c),N(t,u,c)},R.precision=R.sd=function(t){var e,n,r=this,o=r.c;if(null!=t&&t!==!!t&&1!==t&&0!==t&&(W&&D(13,"argument"+b,t),t!=!!t&&(t=null)),!o)return null;if(n=o.length-1,e=n*B+1,n=o[n]){for(;n%10==0;n/=10,e--);for(n=o[0];n>=10;n/=10,e++);}return t&&r.e+1>e&&(e=r.e+1),e},R.round=function(t,n){var r=new e(this);return(null==t||J(t,0,F,15))&&P(r,~~t+this.e+1,null!=n&&J(n,0,8,15,_)?0|n:j),r},R.shift=function(t){var n=this;return J(t,-S,S,16,"argument")?n.times("1e"+l(t)):new e(n.c&&n.c[0]&&(-S>t||t>S)?n.s*(0>t?0:1/0):n)},R.squareRoot=R.sqrt=function(){var t,n,r,a,s,c=this,u=c.c,f=c.s,p=c.e,l=H+4,h=new e("0.5");if(1!==f||!u||!u[0])return new e(!f||0>f&&(!u||u[0])?NaN:u?c:1/0);if(f=Math.sqrt(+c),0==f||f==1/0?(n=i(u),(n.length+p)%2==0&&(n+="0"),f=Math.sqrt(n),p=o((p+1)/2)-(0>p||p%2),f==1/0?n="1e"+p:(n=f.toExponential(),n=n.slice(0,n.indexOf("e")+1)+p),r=new e(n)):r=new e(f+""),r.c[0])for(p=r.e,f=p+l,3>f&&(f=0);;)if(s=r,r=h.times(s.plus(T(c,s,l,1))),i(s.c).slice(0,f)===(n=i(r.c)).slice(0,f)){if(r.ef&&(y=_,_=w,w=y,a=f,f=h,h=a),a=f+h,y=[];a--;y.push(0));for(g=k,v=C,a=h;--a>=0;){for(r=0,d=w[a]%v,m=w[a]/v|0,c=f,s=a+c;s>a;)p=_[--c]%v,l=_[c]/v|0,u=m*p+l*d,p=d*p+u%v*v+y[s]+r,r=(p/g|0)+(u/v|0)+m*l,y[s--]=p%g;y[s]=r}return r?++i:y.shift(),N(t,y,i)},R.toDigits=function(t,n){var r=new e(this);return t=null!=t&&J(t,1,F,18,"precision")?0|t:null,n=null!=n&&J(n,0,8,18,_)?0|n:j,t?P(r,t,n):r},R.toExponential=function(t,e){return h(this,null!=t&&J(t,0,F,19)?~~t+1:null,e,19)},R.toFixed=function(t,e){return h(this,null!=t&&J(t,0,F,20)?~~t+this.e+1:null,e,20)},R.toFormat=function(t,e){var n=h(this,null!=t&&J(t,0,F,21)?~~t+this.e+1:null,e,21);if(this.c){var r,o=n.split("."),i=+K.groupSize,a=+K.secondaryGroupSize,s=K.groupSeparator,c=o[0],u=o[1],f=this.s<0,p=f?c.slice(1):c,l=p.length;if(a&&(r=i,i=a,a=r,l-=r),i>0&&l>0){for(r=l%i||i,c=p.substr(0,r);l>r;r+=i)c+=s+p.substr(r,i);a>0&&(c+=s+p.slice(r)),f&&(c="-"+c)}n=u?c+K.decimalSeparator+((a=+K.fractionGroupSize)?u.replace(new RegExp("\\d{"+a+"}\\B","g"),"$&"+K.fractionGroupSeparator):u):c}return n},R.toFraction=function(t){var n,r,o,a,s,c,u,f,p,l=W,h=this,d=h.c,m=new e(M),y=r=new e(M),g=u=new e(M);if(null!=t&&(W=!1,c=new e(t),W=l,(!(l=c.isInt())||c.lt(M))&&(W&&D(22,"max denominator "+(l?"out of range":"not an integer"),t),t=!l&&c.c&&P(c,c.e+1,1).gte(M)?c:null)),!d)return h.toString();for(p=i(d),a=m.e=p.length-h.e-1,m.c[0]=A[(s=a%B)<0?B+s:s],t=!t||c.cmp(m)>0?a>0?m:y:c,s=U,U=1/0,c=new e(p),u.c[0]=0;f=T(c,m,0,1),o=r.plus(f.times(g)),1!=o.cmp(t);)r=g,g=o,y=u.plus(f.times(o=y)),u=o,m=c.minus(f.times(o=m)),c=o;return o=T(t.minus(r),g,0,1),u=u.plus(o.times(y)),r=r.plus(o.times(g)),u.s=y.s=h.s,a*=2,n=T(y,g,a,j).minus(h).abs().cmp(T(u,r,a,j).minus(h).abs())<1?[y.toString(),g.toString()]:[u.toString(),r.toString()],U=s,n},R.toNumber=function(){var t=this;return+t||(t.s?0*t.s:NaN)},R.toPower=R.pow=function(t){var n,r,o=v(0>t?-t:+t),i=this;if(!J(t,-S,S,23,"exponent")&&(!isFinite(t)||o>S&&(t/=0)||parseFloat(t)!=t&&!(t=NaN)))return new e(Math.pow(+i,t));for(n=$?g($/B+2):0,r=new e(M);;){if(o%2){if(r=r.times(i),!r.c)break;n&&r.c.length>n&&(r.c.length=n)}if(o=v(o/2),!o)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>t&&(r=M.div(r)),n?P(r,$,j):r},R.toPrecision=function(t,e){return h(this,null!=t&&J(t,1,F,24,"precision")?0|t:null,e,24)},R.toString=function(t){var e,r=this,o=r.s,a=r.e;return null===a?o?(e="Infinity",0>o&&(e="-"+e)):e="NaN":(e=i(r.c),e=null!=t&&J(t,2,64,25,"base")?n(p(e,a),0|t,10,o):q>=a||a>=L?f(e,a):p(e,a),0>o&&r.c[0]&&(e="-"+e)),e},R.truncated=R.trunc=function(){return P(new e(this),this.e+1,1)},R.valueOf=R.toJSON=function(){return this.toString()},null!=t&&e.config(t),e}function o(t){var e=0|t;return t>0||t===e?e:e-1}function i(t){for(var e,n,r=1,o=t.length,i=t[0]+"";o>r;){for(e=t[r++]+"",n=B-e.length;n--;e="0"+e);i+=e}for(o=i.length;48===i.charCodeAt(--o););return i.slice(0,o+1||1)}function a(t,e){var n,r,o=t.c,i=e.c,a=t.s,s=e.s,c=t.e,u=e.e;if(!a||!s)return null;if(n=o&&!o[0],r=i&&!i[0],n||r)return n?r?0:-s:a;if(a!=s)return a;if(n=0>a,r=c==u,!o||!i)return r?0:!o^n?1:-1;if(!r)return c>u^n?1:-1;for(s=(c=o.length)<(u=i.length)?c:u,a=0;s>a;a++)if(o[a]!=i[a])return o[a]>i[a]^n?1:-1;return c==u?0:c>u^n?1:-1}function s(t,e,n){return(t=l(t))>=e&&n>=t}function c(t){return"[object Array]"==Object.prototype.toString.call(t)}function u(t,e,n){for(var r,o,i=[0],a=0,s=t.length;s>a;){for(o=i.length;o--;i[o]*=e);for(i[r=0]+=x.indexOf(t.charAt(a++));rn-1&&(null==i[r+1]&&(i[r+1]=0),i[r+1]+=i[r]/n|0,i[r]%=n)}return i.reverse()}function f(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(0>e?"e":"e+")+e}function p(t,e){var n,r;if(0>e){for(r="0.";++e;r+="0");t=r+t}else if(n=t.length,++e>n){for(r="0",e-=n;--e;r+="0");t+=r}else n>e&&(t=t.slice(0,e)+"."+t.slice(e));return t}function l(t){return t=parseFloat(t),0>t?g(t):v(t)}var h,d,m,y=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,g=Math.ceil,v=Math.floor,b=" not a boolean or binary digit",_="rounding mode",w="number type has more than 15 significant digits",x="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",k=1e14,B=14,S=9007199254740991,A=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],C=1e7,F=1e9;if(h=r(),"function"==typeof define&&define.amd)define(function(){return h});else if("undefined"!=typeof e&&e.exports){if(e.exports=h,!d)try{d=t("crypto")}catch(I){}}else n.BigNumber=h}(this)},{crypto:49}],web3:[function(t,e,n){var r=t("./lib/web3");"undefined"!=typeof window&&"undefined"==typeof window.Web3&&(window.Web3=r),e.exports=r},{"./lib/web3":22}]},{},["web3"]); \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/example/balance.html b/node_modules/web3-provider-engine/node_modules/web3/example/balance.html deleted file mode 100644 index 2b554a2..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/example/balance.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - -

      coinbase balance

      - -
      -
      -
      -
      -
      - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/example/contract.html b/node_modules/web3-provider-engine/node_modules/web3/example/contract.html deleted file mode 100644 index 88d5af0..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/example/contract.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - -

      contract

      -
      -
      -
      - -
      - -
      - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/example/contract_array.html b/node_modules/web3-provider-engine/node_modules/web3/example/contract_array.html deleted file mode 100644 index 5fe55e7..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/example/contract_array.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - -

      contract

      -
      -
      -
      - -
      - -
      - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/example/event_inc.html b/node_modules/web3-provider-engine/node_modules/web3/example/event_inc.html deleted file mode 100644 index 07c766e..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/example/event_inc.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - -
      -
      - -
      -
      - -
      -
      -
      -
      - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/example/icap.html b/node_modules/web3-provider-engine/node_modules/web3/example/icap.html deleted file mode 100644 index 39d7260..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/example/icap.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - -
      - This page expects geth with JSON-RPC running at port 8545 - -
      -
      - namereg address - eg. 0x436474facc88948696b371052a1befb801f003ca or 'default') -
      - - -
      - - exchange identifier - eg. WYWY -
      - - -
      - - client identifier - eg. GAVOFYORK -
      - - -
      - - value - eg. 100 -
      - - -
      - - IBAN: -
      - - - -
      -
      - - -
      -
      -
      -
      -
      -
      - transfers -
      -
      -
        -
        -
        -
        -
        - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/example/namereg.html b/node_modules/web3-provider-engine/node_modules/web3/example/namereg.html deleted file mode 100644 index dad19b5..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/example/namereg.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - This example shows only part of namereg functionalities. Namereg contract is available here - -

        Namereg

        -

        Search for name

        -
        - Address: - - Name: - -
        -

        Search for address

        -
        - Name: - - Address: - -
        -

        Register name

        -
        - Check if name is available: - - -
        -
        - -
        -

        - If you own the name, you can also change the address it points to -
        - Address: - - - Current address : - -
        - - - - diff --git a/node_modules/web3-provider-engine/node_modules/web3/example/node-app.js b/node_modules/web3-provider-engine/node_modules/web3/example/node-app.js deleted file mode 100644 index 218e928..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/example/node-app.js +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env node - -var Web3 = require('../index.js'); -var web3 = new Web3(); - -web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); - -var coinbase = web3.eth.coinbase; -console.log(coinbase); - -var balance = web3.eth.getBalance(coinbase); -console.log(balance.toString(10)); - diff --git a/node_modules/web3-provider-engine/node_modules/web3/gulpfile.js b/node_modules/web3-provider-engine/node_modules/web3/gulpfile.js deleted file mode 100644 index 4a3518d..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/gulpfile.js +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -var version = require('./lib/version.json'); -var path = require('path'); - -var del = require('del'); -var gulp = require('gulp'); -var browserify = require('browserify'); -var jshint = require('gulp-jshint'); -var uglify = require('gulp-uglify'); -var rename = require('gulp-rename'); -var source = require('vinyl-source-stream'); -var exorcist = require('exorcist'); -var bower = require('bower'); -var streamify = require('gulp-streamify'); -var replace = require('gulp-replace'); - -var DEST = path.join(__dirname, 'dist/'); -var src = 'index'; -var dst = 'web3'; -var lightDst = 'web3-light'; - -var browserifyOptions = { - debug: true, - insert_global_vars: false, // jshint ignore:line - detectGlobals: false, - bundleExternal: true -}; - -gulp.task('version', function(){ - gulp.src(['./package.json']) - .pipe(replace(/\"version\"\: \"([\.0-9]*)\"/, '"version": "'+ version.version + '"')) - .pipe(gulp.dest('./')); - gulp.src(['./bower.json']) - .pipe(replace(/\"version\"\: \"([\.0-9]*)\"/, '"version": "'+ version.version + '"')) - .pipe(gulp.dest('./')); - gulp.src(['./package.js']) - .pipe(replace(/version\: \'([\.0-9]*)\'/, "version: '"+ version.version + "'")) - .pipe(gulp.dest('./')); -}); - -gulp.task('bower', ['version'], function(cb){ - bower.commands.install().on('end', function (installed){ - console.log(installed); - cb(); - }); -}); - -gulp.task('lint', [], function(){ - return gulp.src(['./*.js', './lib/*.js']) - .pipe(jshint()) - .pipe(jshint.reporter('default')); -}); - -gulp.task('clean', ['lint'], function(cb) { - del([ DEST ]).then(cb.bind(null, null)); -}); - -gulp.task('light', ['clean'], function () { - return browserify(browserifyOptions) - .require('./' + src + '.js', {expose: 'web3'}) - .ignore('bignumber.js') - .require('./lib/utils/browser-bn.js', {expose: 'bignumber.js'}) // fake bignumber.js - .add('./' + src + '.js') - .bundle() - .pipe(exorcist(path.join( DEST, lightDst + '.js.map'))) - .pipe(source(lightDst + '.js')) - .pipe(gulp.dest( DEST )) - .pipe(streamify(uglify())) - .pipe(rename(lightDst + '.min.js')) - .pipe(gulp.dest( DEST )); -}); - -gulp.task('standalone', ['clean'], function () { - return browserify(browserifyOptions) - .require('./' + src + '.js', {expose: 'web3'}) - .require('bignumber.js') // expose it to dapp users - .add('./' + src + '.js') - .ignore('crypto') - .bundle() - .pipe(exorcist(path.join( DEST, dst + '.js.map'))) - .pipe(source(dst + '.js')) - .pipe(gulp.dest( DEST )) - .pipe(streamify(uglify())) - .pipe(rename(dst + '.min.js')) - .pipe(gulp.dest( DEST )); -}); - -gulp.task('watch', function() { - gulp.watch(['./lib/*.js'], ['lint', 'build']); -}); - -gulp.task('default', ['version', 'lint', 'clean', 'light', 'standalone']); - diff --git a/node_modules/web3-provider-engine/node_modules/web3/index.js b/node_modules/web3-provider-engine/node_modules/web3/index.js deleted file mode 100644 index badd4d5..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/index.js +++ /dev/null @@ -1,8 +0,0 @@ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/GlobalRegistrar.json b/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/GlobalRegistrar.json deleted file mode 100644 index 928e05f..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/GlobalRegistrar.json +++ /dev/null @@ -1,254 +0,0 @@ -[ - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "name", - "outputs": [ - { - "name": "o_name", - "type": "bytes32" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "content", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "addr", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "reserve", - "outputs": [], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "subRegistrar", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_newOwner", - "type": "address" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_registrar", - "type": "address" - } - ], - "name": "setSubRegistrar", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "Registrar", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_a", - "type": "address" - }, - { - "name": "_primary", - "type": "bool" - } - ], - "name": "setAddress", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_content", - "type": "bytes32" - } - ], - "name": "setContent", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "disown", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_name", - "type": "bytes32" - }, - { - "indexed": false, - "name": "_winner", - "type": "address" - } - ], - "name": "AuctionEnded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_name", - "type": "bytes32" - }, - { - "indexed": false, - "name": "_bidder", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "NewBid", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - } - ], - "name": "Changed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - }, - { - "indexed": true, - "name": "addr", - "type": "address" - } - ], - "name": "PrimaryChanged", - "type": "event" - } -] diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/ICAPRegistrar.json b/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/ICAPRegistrar.json deleted file mode 100644 index 429845d..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/ICAPRegistrar.json +++ /dev/null @@ -1,108 +0,0 @@ -[ - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_refund", - "type": "address" - } - ], - "name": "disown", - "outputs": [], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "addr", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "reserve", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_newOwner", - "type": "address" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_a", - "type": "address" - } - ], - "name": "setAddr", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - } - ], - "name": "Changed", - "type": "event" - } -] diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/SmartExchange.json b/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/SmartExchange.json deleted file mode 100644 index c0881d4..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/contracts/SmartExchange.json +++ /dev/null @@ -1,146 +0,0 @@ -[ - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "bytes32" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "bytes32" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "indirectId", - "type": "bytes32" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "icapTransfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "bytes32" - } - ], - "name": "deposit", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "AnonymousDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "bytes32" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "bytes32" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "bytes32" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "indirectId", - "type": "bytes32" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "IcapTransfer", - "type": "event" - } -] diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/address.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/address.js deleted file mode 100644 index e734549..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/address.js +++ /dev/null @@ -1,31 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeAddress is a prootype that represents address type - * It matches: - * address - * address[] - * address[4] - * address[][] - * address[3][] - * address[][6][], ... - */ -var SolidityTypeAddress = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputAddress; -}; - -SolidityTypeAddress.prototype = new SolidityType({}); -SolidityTypeAddress.prototype.constructor = SolidityTypeAddress; - -SolidityTypeAddress.prototype.isType = function (name) { - return !!name.match(/address(\[([0-9]*)\])?/); -}; - -SolidityTypeAddress.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeAddress; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/bool.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/bool.js deleted file mode 100644 index cdc0439..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/bool.js +++ /dev/null @@ -1,30 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeBool is a prootype that represents bool type - * It matches: - * bool - * bool[] - * bool[4] - * bool[][] - * bool[3][] - * bool[][6][], ... - */ -var SolidityTypeBool = function () { - this._inputFormatter = f.formatInputBool; - this._outputFormatter = f.formatOutputBool; -}; - -SolidityTypeBool.prototype = new SolidityType({}); -SolidityTypeBool.prototype.constructor = SolidityTypeBool; - -SolidityTypeBool.prototype.isType = function (name) { - return !!name.match(/^bool(\[([0-9]*)\])*$/); -}; - -SolidityTypeBool.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeBool; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/bytes.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/bytes.js deleted file mode 100644 index 92dfb0c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/bytes.js +++ /dev/null @@ -1,38 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeBytes is a prootype that represents bytes type - * It matches: - * bytes - * bytes[] - * bytes[4] - * bytes[][] - * bytes[3][] - * bytes[][6][], ... - * bytes32 - * bytes64[] - * bytes8[4] - * bytes256[][] - * bytes[3][] - * bytes64[][6][], ... - */ -var SolidityTypeBytes = function () { - this._inputFormatter = f.formatInputBytes; - this._outputFormatter = f.formatOutputBytes; -}; - -SolidityTypeBytes.prototype = new SolidityType({}); -SolidityTypeBytes.prototype.constructor = SolidityTypeBytes; - -SolidityTypeBytes.prototype.isType = function (name) { - return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/); -}; - -SolidityTypeBytes.prototype.staticPartLength = function (name) { - var matches = name.match(/^bytes([0-9]*)/); - var size = parseInt(matches[1]); - return size * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeBytes; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/coder.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/coder.js deleted file mode 100644 index 76ef926..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/coder.js +++ /dev/null @@ -1,260 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/dynamicbytes.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/dynamicbytes.js deleted file mode 100644 index baa1839..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/dynamicbytes.js +++ /dev/null @@ -1,25 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/formatters.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/formatters.js deleted file mode 100644 index ac37e04..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/formatters.js +++ /dev/null @@ -1,250 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/int.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/int.js deleted file mode 100644 index 4fa4170..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/int.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/param.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/param.js deleted file mode 100644 index e06b592..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/param.js +++ /dev/null @@ -1,152 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/real.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/real.js deleted file mode 100644 index 3433224..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/real.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/string.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/string.js deleted file mode 100644 index f7648d9..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/string.js +++ /dev/null @@ -1,25 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/type.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/type.js deleted file mode 100644 index 0ce5dab..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/type.js +++ /dev/null @@ -1,245 +0,0 @@ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/uint.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/uint.js deleted file mode 100644 index 9ac8011..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/uint.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/ureal.js b/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/ureal.js deleted file mode 100644 index 63d2e31..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/solidity/ureal.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/browser-bn.js b/node_modules/web3-provider-engine/node_modules/web3/lib/utils/browser-bn.js deleted file mode 100644 index 30aabb2..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/browser-bn.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -module.exports = BigNumber; // jshint ignore:line - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/browser-xhr.js b/node_modules/web3-provider-engine/node_modules/web3/lib/utils/browser-xhr.js deleted file mode 100644 index 5d45d72..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/browser-xhr.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/config.js b/node_modules/web3-provider-engine/node_modules/web3/lib/utils/config.js deleted file mode 100644 index 5c16262..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/config.js +++ /dev/null @@ -1,79 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/sha3.js b/node_modules/web3-provider-engine/node_modules/web3/lib/utils/sha3.js deleted file mode 100644 index a7ce60a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/sha3.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/utils.js b/node_modules/web3-provider-engine/node_modules/web3/lib/utils/utils.js deleted file mode 100644 index c8fb1a6..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/utils/utils.js +++ /dev/null @@ -1,597 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/version.json b/node_modules/web3-provider-engine/node_modules/web3/lib/version.json deleted file mode 100644 index fd34bde..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "0.15.3" -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3.js deleted file mode 100644 index 9f7c56b..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; -Web3.prototype.sha3 = sha3; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/allevents.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/allevents.js deleted file mode 100644 index 79416f5..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/allevents.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/batch.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/batch.js deleted file mode 100644 index acb6336..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/batch.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/contract.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/contract.js deleted file mode 100644 index aa65cc6..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/contract.js +++ /dev/null @@ -1,298 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/contract_.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/contract_.js deleted file mode 100644 index 614abcd..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/contract_.js +++ /dev/null @@ -1,338 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - this.deploy.getData = this.getData.bind(this); -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - -/** - * Should be called to create new contract on a blockchain - * - * @method deploy - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ -ContractFactory.prototype.deploy = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; -}; - - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Object} eth - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; - console.log(this); -}; - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = Contract.bind(null, 'test');//function (address, callback) { -// var contract = new Contract(this.eth, this.abi, address); - -// // this functions are not part of prototype, -// // because we dont want to spoil the interface -// addFunctionsToContract(contract); -// addEventsToContract(contract); - -// if (callback) { -// callback(null, contract); -// } -// return contract; -// }; - - - -/* - -new web3.eth.contract(abi, address) -eventemitter = web3.eth.contract.deploy(param1, {data: '0x23456'}); -eventEmitter.on('mined', function(err, address){ -    new web3.eth.contract(abi, address) - }); -eventEmitter.on('transactionHash', function(err, hash){ - - }); -web3.eth.contract.getData(abi, param1, {data: '0x23456'}) -> 0x23456780000005345345 -myContrac.myMethod(param1) -myContrac.myMethod.getData(param1) - -Or - -var myContrac = new web3.eth.contract(abi, address) -eventemitter = new web3.eth.contract(abi).deploy(param1, {data: '0x23456'}); -eventEmitter.on('mined', function(err, address){ -    new web3.eth.contract(abi, address) - }); -eventEmitter.on('transactionHash', function(err, hash){ - - }); -new web3.eth.contract(abi).deploy.getData(param1, {data: '0x23456'}) -> 0x23456780000005345345 -myContrac.myMethod(param1) -myContrac.myMethod.getData(param1) - -var myContrac2 = new web3.eth.contract(abi) -myContrac2.address = '0x12345678...'; - -*/ - - -module.exports = ContractFactory; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/errors.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/errors.js deleted file mode 100644 index 7b66f7d..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/errors.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/event.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/event.js deleted file mode 100644 index c9b2a6c..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/event.js +++ /dev/null @@ -1,208 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/extend.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/extend.js deleted file mode 100644 index 55ad7dc..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/extend.js +++ /dev/null @@ -1,48 +0,0 @@ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/filter.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/filter.js deleted file mode 100644 index 5db6734..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/filter.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.filterId); - // remove filter async - this.implementation.uninstallFilter(this.filterId, function(){}); - this.callbacks = []; -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/formatters.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/formatters.js deleted file mode 100644 index 91ae201..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/formatters.js +++ /dev/null @@ -1,299 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw 'invalid address'; -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/function.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/function.js deleted file mode 100644 index d771514..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/function.js +++ /dev/null @@ -1,247 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/httpprovider.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/httpprovider.js deleted file mode 100644 index aafa5b6..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/httpprovider.js +++ /dev/null @@ -1,146 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// meteor server environment -if (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line - XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line - -// browser -} else if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/iban.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/iban.js deleted file mode 100644 index ea57f4d..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/iban.js +++ /dev/null @@ -1,227 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '00' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/ipcprovider.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/ipcprovider.js deleted file mode 100644 index 4dc46c1..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/ipcprovider.js +++ /dev/null @@ -1,207 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/jsonrpc.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/jsonrpc.js deleted file mode 100644 index d6c0615..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/jsonrpc.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = function () { - // singleton pattern - if (arguments.callee._singletonInstance) { - return arguments.callee._singletonInstance; - } - arguments.callee._singletonInstance = this; - - this.messageId = 1; -}; - -/** - * @return {Jsonrpc} singleton - */ -Jsonrpc.getInstance = function () { - var instance = new Jsonrpc(); - return instance; -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.prototype.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - return { - jsonrpc: '2.0', - method: method, - params: params || [], - id: this.messageId++ - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.prototype.isValidResponse = function (response) { - return !!response && - !response.error && - response.jsonrpc === '2.0' && - typeof response.id === 'number' && - response.result !== undefined; // only undefined is not valid json object -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.prototype.toBatchPayload = function (messages) { - var self = this; - return messages.map(function (message) { - return self.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/method.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/method.js deleted file mode 100644 index ebedd02..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/method.js +++ /dev/null @@ -1,165 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/db.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/db.js deleted file mode 100644 index 4b63960..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/db.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/eth.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/eth.js deleted file mode 100644 index 5b44528..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/eth.js +++ /dev/null @@ -1,343 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/net.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/net.js deleted file mode 100644 index 0fdb852..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/net.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/personal.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/personal.js deleted file mode 100644 index 581d549..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/personal.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [null, null, null] - }); - - return [ - newAccount, - unlockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/shh.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/shh.js deleted file mode 100644 index a3c51f1..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/shh.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/watches.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/watches.js deleted file mode 100644 index 23c7542..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/methods/watches.js +++ /dev/null @@ -1,114 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/namereg.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/namereg.js deleted file mode 100644 index d06ecbe..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/namereg.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/property.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/property.js deleted file mode 100644 index bb791c9..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/property.js +++ /dev/null @@ -1,144 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/requestmanager.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/requestmanager.js deleted file mode 100644 index 3f9c6a0..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/requestmanager.js +++ /dev/null @@ -1,265 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.getInstance().isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.getInstance().toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.getInstance().toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.getInstance().isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/settings.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/settings.js deleted file mode 100644 index 4999235..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/settings.js +++ /dev/null @@ -1,9 +0,0 @@ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/syncing.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/syncing.js deleted file mode 100644 index c81c3e1..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/syncing.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/transfer.js b/node_modules/web3-provider-engine/node_modules/web3/lib/web3/transfer.js deleted file mode 100644 index 6a0d081..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/lib/web3/transfer.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - diff --git a/node_modules/web3-provider-engine/node_modules/web3/package-init.js b/node_modules/web3-provider-engine/node_modules/web3/package-init.js deleted file mode 100644 index 92e6a4a..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/package-init.js +++ /dev/null @@ -1,17 +0,0 @@ -/* jshint ignore:start */ - - -// Browser environment -if(typeof window !== 'undefined') { - Web3 = (typeof window.Web3 !== 'undefined') ? window.Web3 : require('web3'); - BigNumber = (typeof window.BigNumber !== 'undefined') ? window.BigNumber : require('bignumber.js'); -} - - -// Node environment -if(typeof global !== 'undefined') { - Web3 = (typeof global.Web3 !== 'undefined') ? global.Web3 : require('web3'); - BigNumber = (typeof global.BigNumber !== 'undefined') ? global.BigNumber : require('bignumber.js'); -} - -/* jshint ignore:end */ \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/web3/package.js b/node_modules/web3-provider-engine/node_modules/web3/package.js deleted file mode 100644 index 67e93e8..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/package.js +++ /dev/null @@ -1,33 +0,0 @@ -/* jshint ignore:start */ -Package.describe({ - name: 'ethereum:web3', - version: '0.15.3', - summary: 'Ethereum JavaScript API, middleware to talk to a ethreum node over RPC', - git: 'https://github.com/ethereum/ethereum.js', - // By default, Meteor will default to using README.md for documentation. - // To avoid submitting documentation, set this field to null. - documentation: 'README.md' -}); - -Npm.depends({ - "xmlhttprequest": "1.7.0" -}); - - -Package.onUse(function(api) { - api.versionsFrom('1.0.3.2'); - - // api.use('3stack:bignumber@2.0.0', 'client'); - - api.export(['Web3', 'BigNumber'], ['client', 'server']); - - api.addFiles('dist/web3.js', ['client', 'server']); - api.addFiles('package-init.js', ['client', 'server']); -}); - -// Package.onTest(function(api) { -// api.use('tinytest'); -// api.use('test'); -// api.addFiles('test-tests.js'); -// }); -/* jshint ignore:end */ diff --git a/node_modules/web3-provider-engine/node_modules/web3/package.json b/node_modules/web3-provider-engine/node_modules/web3/package.json deleted file mode 100644 index 86c7df7..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/package.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "_args": [ - [ - "web3@^0.15.1", - "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine" - ] - ], - "_from": "web3@>=0.15.1 <0.16.0", - "_id": "web3@0.15.3", - "_inCache": true, - "_installable": true, - "_location": "/web3-provider-engine/web3", - "_nodeVersion": "4.2.4", - "_npmOperationalInternal": { - "host": "packages-5-east.internal.npmjs.com", - "tmp": "tmp/web3-0.15.3.tgz_1456759510959_0.6682048423681408" - }, - "_npmUser": { - "email": "fabian@frozeman.de", - "name": "frozeman" - }, - "_npmVersion": "2.14.12", - "_phantomChildren": {}, - "_requested": { - "name": "web3", - "raw": "web3@^0.15.1", - "rawSpec": "^0.15.1", - "scope": null, - "spec": ">=0.15.1 <0.16.0", - "type": "range" - }, - "_requiredBy": [ - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/web3/-/web3-0.15.3.tgz", - "_shasum": "f997ccda419fc528c0d6c5d8d5382212bfa74628", - "_shrinkwrap": null, - "_spec": "web3@^0.15.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine", - "author": { - "name": "ethdev.com" - }, - "authors": [ - { - "email": "marek@ethdev.com", - "name": "Marek Kotewicz", - "url": "https://github.com/debris" - }, - { - "email": "fabian@ethdev.com", - "homepage": "http://frozeman.de", - "name": "Fabian Vogelsteller" - }, - { - "email": "marian@ethdev.com", - "name": "Marian Oancea", - "url": "https://github.com/cubedro" - }, - { - "email": "g@ethdev.com", - "homepage": "http://gavwood.com", - "name": "Gav Wood" - }, - { - "email": "jeff@ethdev.com", - "name": "Jeffery Wilcke", - "url": "https://github.com/obscuren" - } - ], - "browser": { - "xmlhttprequest": "./lib/utils/browser-xhr.js" - }, - "bugs": { - "url": "https://github.com/ethereum/web3.js/issues" - }, - "dependencies": { - "bignumber.js": "git+https://github.com/debris/bignumber.js.git#master", - "crypto-js": "^3.1.4", - "utf8": "^2.1.1", - "xmlhttprequest": "*" - }, - "description": "Ethereum JavaScript API, middleware to talk to a ethereum node over RPC", - "devDependencies": { - "bower": ">=1.4.1", - "browserify": ">=10.0", - "chai": "^3.0.0", - "coveralls": "^2.11.2", - "del": ">=2.0.2", - "exorcist": "^0.4.0", - "gulp": ">=3.9.0", - "gulp-jshint": ">=1.5.0", - "gulp-rename": ">=1.2.0", - "gulp-replace": "^0.5.3", - "gulp-streamify": "0.0.5", - "gulp-uglify": ">=1.2.0", - "istanbul": "^0.3.5", - "jshint": ">=2.5.0", - "mocha": ">=2.3.3", - "sandboxed-module": "^2.0.2", - "vinyl-source-stream": "^1.1.0" - }, - "directories": { - "lib": "./lib" - }, - "dist": { - "shasum": "f997ccda419fc528c0d6c5d8d5382212bfa74628", - "tarball": "https://registry.npmjs.org/web3/-/web3-0.15.3.tgz" - }, - "gitHead": "fc9e96473a4100e1b5465cd001ff8ece6c097563", - "homepage": "https://github.com/ethereum/web3.js", - "keywords": [ - "ethereum", - "javascript", - "API" - ], - "license": "LGPL-3.0", - "main": "./index.js", - "maintainers": [ - { - "email": "marek.kotewicz@gmail.com", - "name": "debris" - }, - { - "email": "fabian@frozeman.de", - "name": "frozeman" - } - ], - "name": "web3", - "namespace": "ethereum", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ethereum/web3.js.git" - }, - "scripts": { - "build": "gulp", - "lint": "jshint *.js lib", - "test": "mocha", - "test-coveralls": "istanbul cover _mocha -- -R spec && cat coverage/lcov.info | coveralls --verbose", - "watch": "gulp watch" - }, - "version": "0.15.3" -} diff --git a/node_modules/web3-provider-engine/node_modules/web3/styleguide.md b/node_modules/web3-provider-engine/node_modules/web3/styleguide.md deleted file mode 100644 index 9140ca9..0000000 --- a/node_modules/web3-provider-engine/node_modules/web3/styleguide.md +++ /dev/null @@ -1,1741 +0,0 @@ -[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) - -# Airbnb JavaScript Style Guide() { - -*A mostly reasonable approach to JavaScript* - - -## Table of Contents - - 1. [Types](#types) - 1. [Objects](#objects) - 1. [Arrays](#arrays) - 1. [Strings](#strings) - 1. [Functions](#functions) - 1. [Properties](#properties) - 1. [Variables](#variables) - 1. [Hoisting](#hoisting) - 1. [Comparison Operators & Equality](#comparison-operators--equality) - 1. [Blocks](#blocks) - 1. [Comments](#comments) - 1. [Whitespace](#whitespace) - 1. [Commas](#commas) - 1. [Semicolons](#semicolons) - 1. [Type Casting & Coercion](#type-casting--coercion) - 1. [Naming Conventions](#naming-conventions) - 1. [Accessors](#accessors) - 1. [Constructors](#constructors) - 1. [Events](#events) - 1. [Modules](#modules) - 1. [jQuery](#jquery) - 1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility) - 1. [Testing](#testing) - 1. [Performance](#performance) - 1. [Resources](#resources) - 1. [In the Wild](#in-the-wild) - 1. [Translation](#translation) - 1. [The JavaScript Style Guide Guide](#the-javascript-style-guide-guide) - 1. [Chat With Us About Javascript](#chat-with-us-about-javascript) - 1. [Contributors](#contributors) - 1. [License](#license) - -## Types - - - **Primitives**: When you access a primitive type you work directly on its value. - - + `string` - + `number` - + `boolean` - + `null` - + `undefined` - - ```javascript - var foo = 1; - var bar = foo; - - bar = 9; - - console.log(foo, bar); // => 1, 9 - ``` - - **Complex**: When you access a complex type you work on a reference to its value. - - + `object` - + `array` - + `function` - - ```javascript - var foo = [1, 2]; - var bar = foo; - - bar[0] = 9; - - console.log(foo[0], bar[0]); // => 9, 9 - ``` - -**[⬆ back to top](#table-of-contents)** - -## Objects - - - Use the literal syntax for object creation. - - ```javascript - // bad - var item = new Object(); - - // good - var item = {}; - ``` - - - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). - - ```javascript - // bad - var superman = { - default: { clark: 'kent' }, - private: true - }; - - // good - var superman = { - defaults: { clark: 'kent' }, - hidden: true - }; - ``` - - - Use readable synonyms in place of reserved words. - - ```javascript - // bad - var superman = { - class: 'alien' - }; - - // bad - var superman = { - klass: 'alien' - }; - - // good - var superman = { - type: 'alien' - }; - ``` - -**[⬆ back to top](#table-of-contents)** - -## Arrays - - - Use the literal syntax for array creation. - - ```javascript - // bad - var items = new Array(); - - // good - var items = []; - ``` - - - Use Array#push instead of direct assignment to add items to an array. - - ```javascript - var someStack = []; - - - // bad - someStack[someStack.length] = 'abracadabra'; - - // good - someStack.push('abracadabra'); - ``` - - - When you need to copy an array use Array#slice. [jsPerf](http://jsperf.com/converting-arguments-to-an-array/7) - - ```javascript - var len = items.length; - var itemsCopy = []; - var i; - - // bad - for (i = 0; i < len; i++) { - itemsCopy[i] = items[i]; - } - - // good - itemsCopy = items.slice(); - ``` - - - To convert an array-like object to an array, use Array#slice. - - ```javascript - function trigger() { - var args = Array.prototype.slice.call(arguments); - ... - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Strings - - - Use single quotes `''` for strings. - - ```javascript - // bad - var name = "Bob Parr"; - - // good - var name = 'Bob Parr'; - - // bad - var fullName = "Bob " + this.lastName; - - // good - var fullName = 'Bob ' + this.lastName; - ``` - - - Strings longer than 80 characters should be written across multiple lines using string concatenation. - - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40). - - ```javascript - // bad - var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.'; - - // bad - var errorMessage = 'This is a super long error that was thrown because \ - of Batman. When you stop to think about how Batman had anything to do \ - with this, you would get nowhere \ - fast.'; - - // good - var errorMessage = 'This is a super long error that was thrown because ' + - 'of Batman. When you stop to think about how Batman had anything to do ' + - 'with this, you would get nowhere fast.'; - ``` - - - When programmatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2). - - ```javascript - var items; - var messages; - var length; - var i; - - messages = [{ - state: 'success', - message: 'This one worked.' - }, { - state: 'success', - message: 'This one worked as well.' - }, { - state: 'error', - message: 'This one did not work.' - }]; - - length = messages.length; - - // bad - function inbox(messages) { - items = '
          '; - - for (i = 0; i < length; i++) { - items += '
        • ' + messages[i].message + '
        • '; - } - - return items + '
        '; - } - - // good - function inbox(messages) { - items = []; - - for (i = 0; i < length; i++) { - // use direct assignment in this case because we're micro-optimizing. - items[i] = '
      • ' + messages[i].message + '
      • '; - } - - return '
          ' + items.join('') + '
        '; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Functions - - - Function expressions: - - ```javascript - // anonymous function expression - var anonymous = function() { - return true; - }; - - // named function expression - var named = function named() { - return true; - }; - - // immediately-invoked function expression (IIFE) - (function() { - console.log('Welcome to the Internet. Please follow me.'); - })(); - ``` - - - Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. - - **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97). - - ```javascript - // bad - if (currentUser) { - function test() { - console.log('Nope.'); - } - } - - // good - var test; - if (currentUser) { - test = function test() { - console.log('Yup.'); - }; - } - ``` - - - Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope. - - ```javascript - // bad - function nope(name, options, arguments) { - // ...stuff... - } - - // good - function yup(name, options, args) { - // ...stuff... - } - ``` - -**[⬆ back to top](#table-of-contents)** - - - -## Properties - - - Use dot notation when accessing properties. - - ```javascript - var luke = { - jedi: true, - age: 28 - }; - - // bad - var isJedi = luke['jedi']; - - // good - var isJedi = luke.jedi; - ``` - - - Use subscript notation `[]` when accessing properties with a variable. - - ```javascript - var luke = { - jedi: true, - age: 28 - }; - - function getProp(prop) { - return luke[prop]; - } - - var isJedi = getProp('jedi'); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Variables - - - Always use `var` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. - - ```javascript - // bad - superPower = new SuperPower(); - - // good - var superPower = new SuperPower(); - ``` - - - Use one `var` declaration per variable. - It's easier to add new variable declarations this way, and you never have - to worry about swapping out a `;` for a `,` or introducing punctuation-only - diffs. - - ```javascript - // bad - var items = getItems(), - goSportsTeam = true, - dragonball = 'z'; - - // bad - // (compare to above, and try to spot the mistake) - var items = getItems(), - goSportsTeam = true; - dragonball = 'z'; - - // good - var items = getItems(); - var goSportsTeam = true; - var dragonball = 'z'; - ``` - - - Declare unassigned variables last. This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables. - - ```javascript - // bad - var i, len, dragonball, - items = getItems(), - goSportsTeam = true; - - // bad - var i; - var items = getItems(); - var dragonball; - var goSportsTeam = true; - var len; - - // good - var items = getItems(); - var goSportsTeam = true; - var dragonball; - var length; - var i; - ``` - - - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues. - - ```javascript - // bad - function() { - test(); - console.log('doing stuff..'); - - //..other stuff.. - - var name = getName(); - - if (name === 'test') { - return false; - } - - return name; - } - - // good - function() { - var name = getName(); - - test(); - console.log('doing stuff..'); - - //..other stuff.. - - if (name === 'test') { - return false; - } - - return name; - } - - // bad - unnecessary function call - function() { - var name = getName(); - - if (!arguments.length) { - return false; - } - - this.setFirstName(name); - - return true; - } - - // good - function() { - var name; - - if (!arguments.length) { - return false; - } - - name = getName(); - this.setFirstName(name); - - return true; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Hoisting - - - Variable declarations get hoisted to the top of their scope, but their assignment does not. - - ```javascript - // we know this wouldn't work (assuming there - // is no notDefined global variable) - function example() { - console.log(notDefined); // => throws a ReferenceError - } - - // creating a variable declaration after you - // reference the variable will work due to - // variable hoisting. Note: the assignment - // value of `true` is not hoisted. - function example() { - console.log(declaredButNotAssigned); // => undefined - var declaredButNotAssigned = true; - } - - // The interpreter is hoisting the variable - // declaration to the top of the scope, - // which means our example could be rewritten as: - function example() { - var declaredButNotAssigned; - console.log(declaredButNotAssigned); // => undefined - declaredButNotAssigned = true; - } - ``` - - - Anonymous function expressions hoist their variable name, but not the function assignment. - - ```javascript - function example() { - console.log(anonymous); // => undefined - - anonymous(); // => TypeError anonymous is not a function - - var anonymous = function() { - console.log('anonymous function expression'); - }; - } - ``` - - - Named function expressions hoist the variable name, not the function name or the function body. - - ```javascript - function example() { - console.log(named); // => undefined - - named(); // => TypeError named is not a function - - superPower(); // => ReferenceError superPower is not defined - - var named = function superPower() { - console.log('Flying'); - }; - } - - // the same is true when the function name - // is the same as the variable name. - function example() { - console.log(named); // => undefined - - named(); // => TypeError named is not a function - - var named = function named() { - console.log('named'); - } - } - ``` - - - Function declarations hoist their name and the function body. - - ```javascript - function example() { - superPower(); // => Flying - - function superPower() { - console.log('Flying'); - } - } - ``` - - - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/). - -**[⬆ back to top](#table-of-contents)** - - - -## Comparison Operators & Equality - - - Use `===` and `!==` over `==` and `!=`. - - Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules: - - + **Objects** evaluate to **true** - + **Undefined** evaluates to **false** - + **Null** evaluates to **false** - + **Booleans** evaluate to **the value of the boolean** - + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true** - + **Strings** evaluate to **false** if an empty string `''`, otherwise **true** - - ```javascript - if ([0]) { - // true - // An array is an object, objects evaluate to true - } - ``` - - - Use shortcuts. - - ```javascript - // bad - if (name !== '') { - // ...stuff... - } - - // good - if (name) { - // ...stuff... - } - - // bad - if (collection.length > 0) { - // ...stuff... - } - - // good - if (collection.length) { - // ...stuff... - } - ``` - - - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll. - -**[⬆ back to top](#table-of-contents)** - - -## Blocks - - - Use braces with all multi-line blocks. - - ```javascript - // bad - if (test) - return false; - - // good - if (test) return false; - - // good - if (test) { - return false; - } - - // bad - function() { return false; } - - // good - function() { - return false; - } - ``` - - - If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your - `if` block's closing brace. - - ```javascript - // bad - if (test) { - thing1(); - thing2(); - } - else { - thing3(); - } - - // good - if (test) { - thing1(); - thing2(); - } else { - thing3(); - } - ``` - - -**[⬆ back to top](#table-of-contents)** - - -## Comments - - - Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values. - - ```javascript - // bad - // make() returns a new element - // based on the passed in tag name - // - // @param {String} tag - // @return {Element} element - function make(tag) { - - // ...stuff... - - return element; - } - - // good - /** - * make() returns a new element - * based on the passed in tag name - * - * @param {String} tag - * @return {Element} element - */ - function make(tag) { - - // ...stuff... - - return element; - } - ``` - - - Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment. - - ```javascript - // bad - var active = true; // is current tab - - // good - // is current tab - var active = true; - - // bad - function getType() { - console.log('fetching type...'); - // set the default type to 'no type' - var type = this._type || 'no type'; - - return type; - } - - // good - function getType() { - console.log('fetching type...'); - - // set the default type to 'no type' - var type = this._type || 'no type'; - - return type; - } - ``` - - - Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`. - - - Use `// FIXME:` to annotate problems. - - ```javascript - function Calculator() { - - // FIXME: shouldn't use a global here - total = 0; - - return this; - } - ``` - - - Use `// TODO:` to annotate solutions to problems. - - ```javascript - function Calculator() { - - // TODO: total should be configurable by an options param - this.total = 0; - - return this; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Whitespace - - - Use soft tabs set to 4 spaces. - - ```javascript - // good - function() { - ∙∙∙∙var name; - } - - // bad - function() { - ∙var name; - } - - // bad - function() { - ∙∙var name; - } - ``` - - - Place 1 space before the leading brace. - - ```javascript - // bad - function test(){ - console.log('test'); - } - - // good - function test() { - console.log('test'); - } - - // bad - dog.set('attr',{ - age: '1 year', - breed: 'Bernese Mountain Dog' - }); - - // good - dog.set('attr', { - age: '1 year', - breed: 'Bernese Mountain Dog' - }); - ``` - - - Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations. - - ```javascript - // bad - if(isJedi) { - fight (); - } - - // good - if (isJedi) { - fight(); - } - - // bad - function fight () { - console.log ('Swooosh!'); - } - - // good - function fight() { - console.log('Swooosh!'); - } - ``` - - - Set off operators with spaces. - - ```javascript - // bad - var x=y+5; - - // good - var x = y + 5; - ``` - - - End files with a single newline character. - - ```javascript - // bad - (function(global) { - // ...stuff... - })(this); - ``` - - ```javascript - // bad - (function(global) { - // ...stuff... - })(this);↵ - ↵ - ``` - - ```javascript - // good - (function(global) { - // ...stuff... - })(this);↵ - ``` - - - Use indentation when making long method chains. Use a leading dot, which - emphasizes that the line is a method call, not a new statement. - - ```javascript - // bad - $('#items').find('.selected').highlight().end().find('.open').updateCount(); - - // bad - $('#items'). - find('.selected'). - highlight(). - end(). - find('.open'). - updateCount(); - - // good - $('#items') - .find('.selected') - .highlight() - .end() - .find('.open') - .updateCount(); - - // bad - var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true) - .attr('width', (radius + margin) * 2).append('svg:g') - .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')') - .call(tron.led); - - // good - var leds = stage.selectAll('.led') - .data(data) - .enter().append('svg:svg') - .classed('led', true) - .attr('width', (radius + margin) * 2) - .append('svg:g') - .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')') - .call(tron.led); - ``` - - - Leave a blank line after blocks and before the next statement - - ```javascript - // bad - if (foo) { - return bar; - } - return baz; - - // good - if (foo) { - return bar; - } - - return baz; - - // bad - var obj = { - foo: function() { - }, - bar: function() { - } - }; - return obj; - - // good - var obj = { - foo: function() { - }, - - bar: function() { - } - }; - - return obj; - ``` - - -**[⬆ back to top](#table-of-contents)** - -## Commas - - - Leading commas: **Nope.** - - ```javascript - // bad - var story = [ - once - , upon - , aTime - ]; - - // good - var story = [ - once, - upon, - aTime - ]; - - // bad - var hero = { - firstName: 'Bob' - , lastName: 'Parr' - , heroName: 'Mr. Incredible' - , superPower: 'strength' - }; - - // good - var hero = { - firstName: 'Bob', - lastName: 'Parr', - heroName: 'Mr. Incredible', - superPower: 'strength' - }; - ``` - - - Additional trailing comma: **Nope.** This can cause problems with IE6/7 and IE9 if it's in quirksmode. Also, in some implementations of ES3 would add length to an array if it had an additional trailing comma. This was clarified in ES5 ([source](http://es5.github.io/#D)): - - > Edition 5 clarifies the fact that a trailing comma at the end of an ArrayInitialiser does not add to the length of the array. This is not a semantic change from Edition 3 but some implementations may have previously misinterpreted this. - - ```javascript - // bad - var hero = { - firstName: 'Kevin', - lastName: 'Flynn', - }; - - var heroes = [ - 'Batman', - 'Superman', - ]; - - // good - var hero = { - firstName: 'Kevin', - lastName: 'Flynn' - }; - - var heroes = [ - 'Batman', - 'Superman' - ]; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Semicolons - - - **Yup.** - - ```javascript - // bad - (function() { - var name = 'Skywalker' - return name - })() - - // good - (function() { - var name = 'Skywalker'; - return name; - })(); - - // good (guards against the function becoming an argument when two files with IIFEs are concatenated) - ;(function() { - var name = 'Skywalker'; - return name; - })(); - ``` - - [Read more](http://stackoverflow.com/a/7365214/1712802). - -**[⬆ back to top](#table-of-contents)** - - -## Type Casting & Coercion - - - Perform type coercion at the beginning of the statement. - - Strings: - - ```javascript - // => this.reviewScore = 9; - - // bad - var totalScore = this.reviewScore + ''; - - // good - var totalScore = '' + this.reviewScore; - - // bad - var totalScore = '' + this.reviewScore + ' total score'; - - // good - var totalScore = this.reviewScore + ' total score'; - ``` - - - Use `parseInt` for Numbers and always with a radix for type casting. - - ```javascript - var inputValue = '4'; - - // bad - var val = new Number(inputValue); - - // bad - var val = +inputValue; - - // bad - var val = inputValue >> 0; - - // bad - var val = parseInt(inputValue); - - // good - var val = Number(inputValue); - - // good - var val = parseInt(inputValue, 10); - ``` - - - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing. - - ```javascript - // good - /** - * parseInt was the reason my code was slow. - * Bitshifting the String to coerce it to a - * Number made it a lot faster. - */ - var val = inputValue >> 0; - ``` - - - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647: - - ```javascript - 2147483647 >> 0 //=> 2147483647 - 2147483648 >> 0 //=> -2147483648 - 2147483649 >> 0 //=> -2147483647 - ``` - - - Booleans: - - ```javascript - var age = 0; - - // bad - var hasAge = new Boolean(age); - - // good - var hasAge = Boolean(age); - - // good - var hasAge = !!age; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Naming Conventions - - - Avoid single letter names. Be descriptive with your naming. - - ```javascript - // bad - function q() { - // ...stuff... - } - - // good - function query() { - // ..stuff.. - } - ``` - - - Use camelCase when naming objects, functions, and instances. - - ```javascript - // bad - var OBJEcttsssss = {}; - var this_is_my_object = {}; - var o = {}; - function c() {} - - // good - var thisIsMyObject = {}; - function thisIsMyFunction() {} - ``` - - - Use PascalCase when naming constructors or classes. - - ```javascript - // bad - function user(options) { - this.name = options.name; - } - - var bad = new user({ - name: 'nope' - }); - - // good - function User(options) { - this.name = options.name; - } - - var good = new User({ - name: 'yup' - }); - ``` - - - Use a leading underscore `_` when naming private properties. - - ```javascript - // bad - this.__firstName__ = 'Panda'; - this.firstName_ = 'Panda'; - - // good - this._firstName = 'Panda'; - ``` - - - When saving a reference to `this` use `_this`. - - ```javascript - // bad - function() { - var self = this; - return function() { - console.log(self); - }; - } - - // bad - function() { - var that = this; - return function() { - console.log(that); - }; - } - - // good - function() { - var _this = this; - return function() { - console.log(_this); - }; - } - ``` - - - Name your functions. This is helpful for stack traces. - - ```javascript - // bad - var log = function(msg) { - console.log(msg); - }; - - // good - var log = function log(msg) { - console.log(msg); - }; - ``` - - - **Note:** IE8 and below exhibit some quirks with named function expressions. See [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) for more info. - - - If your file exports a single class, your filename should be exactly the name of the class. - ```javascript - // file contents - class CheckBox { - // ... - } - module.exports = CheckBox; - - // in some other file - // bad - var CheckBox = require('./checkBox'); - - // bad - var CheckBox = require('./check_box'); - - // good - var CheckBox = require('./CheckBox'); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Accessors - - - Accessor functions for properties are not required. - - If you do make accessor functions use getVal() and setVal('hello'). - - ```javascript - // bad - dragon.age(); - - // good - dragon.getAge(); - - // bad - dragon.age(25); - - // good - dragon.setAge(25); - ``` - - - If the property is a boolean, use isVal() or hasVal(). - - ```javascript - // bad - if (!dragon.age()) { - return false; - } - - // good - if (!dragon.hasAge()) { - return false; - } - ``` - - - It's okay to create get() and set() functions, but be consistent. - - ```javascript - function Jedi(options) { - options || (options = {}); - var lightsaber = options.lightsaber || 'blue'; - this.set('lightsaber', lightsaber); - } - - Jedi.prototype.set = function(key, val) { - this[key] = val; - }; - - Jedi.prototype.get = function(key) { - return this[key]; - }; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Constructors - - - Assign methods to the prototype object, instead of overwriting the prototype with a new object. Overwriting the prototype makes inheritance impossible: by resetting the prototype you'll overwrite the base! - - ```javascript - function Jedi() { - console.log('new jedi'); - } - - // bad - Jedi.prototype = { - fight: function fight() { - console.log('fighting'); - }, - - block: function block() { - console.log('blocking'); - } - }; - - // good - Jedi.prototype.fight = function fight() { - console.log('fighting'); - }; - - Jedi.prototype.block = function block() { - console.log('blocking'); - }; - ``` - - - Methods can return `this` to help with method chaining. - - ```javascript - // bad - Jedi.prototype.jump = function() { - this.jumping = true; - return true; - }; - - Jedi.prototype.setHeight = function(height) { - this.height = height; - }; - - var luke = new Jedi(); - luke.jump(); // => true - luke.setHeight(20); // => undefined - - // good - Jedi.prototype.jump = function() { - this.jumping = true; - return this; - }; - - Jedi.prototype.setHeight = function(height) { - this.height = height; - return this; - }; - - var luke = new Jedi(); - - luke.jump() - .setHeight(20); - ``` - - - - It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects. - - ```javascript - function Jedi(options) { - options || (options = {}); - this.name = options.name || 'no name'; - } - - Jedi.prototype.getName = function getName() { - return this.name; - }; - - Jedi.prototype.toString = function toString() { - return 'Jedi - ' + this.getName(); - }; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Events - - - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of: - - ```js - // bad - $(this).trigger('listingUpdated', listing.id); - - ... - - $(this).on('listingUpdated', function(e, listingId) { - // do something with listingId - }); - ``` - - prefer: - - ```js - // good - $(this).trigger('listingUpdated', { listingId : listing.id }); - - ... - - $(this).on('listingUpdated', function(e, data) { - // do something with data.listingId - }); - ``` - - **[⬆ back to top](#table-of-contents)** - - -## Modules - - - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933) - - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export. - - Add a method called `noConflict()` that sets the exported module to the previous version and returns this one. - - Always declare `'use strict';` at the top of the module. - - ```javascript - // fancyInput/fancyInput.js - - !function(global) { - 'use strict'; - - var previousFancyInput = global.FancyInput; - - function FancyInput(options) { - this.options = options || {}; - } - - FancyInput.noConflict = function noConflict() { - global.FancyInput = previousFancyInput; - return FancyInput; - }; - - global.FancyInput = FancyInput; - }(this); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## jQuery - - - Prefix jQuery object variables with a `$`. - - ```javascript - // bad - var sidebar = $('.sidebar'); - - // good - var $sidebar = $('.sidebar'); - ``` - - - Cache jQuery lookups. - - ```javascript - // bad - function setSidebar() { - $('.sidebar').hide(); - - // ...stuff... - - $('.sidebar').css({ - 'background-color': 'pink' - }); - } - - // good - function setSidebar() { - var $sidebar = $('.sidebar'); - $sidebar.hide(); - - // ...stuff... - - $sidebar.css({ - 'background-color': 'pink' - }); - } - ``` - - - For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16) - - Use `find` with scoped jQuery object queries. - - ```javascript - // bad - $('ul', '.sidebar').hide(); - - // bad - $('.sidebar').find('ul').hide(); - - // good - $('.sidebar ul').hide(); - - // good - $('.sidebar > ul').hide(); - - // good - $sidebar.find('ul').hide(); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## ECMAScript 5 Compatibility - - - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/). - -**[⬆ back to top](#table-of-contents)** - - -## Testing - - - **Yup.** - - ```javascript - function() { - return true; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Performance - - - [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/) - - [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2) - - [Try/Catch Cost In a Loop](http://jsperf.com/try-catch-in-loop-cost) - - [Bang Function](http://jsperf.com/bang-function) - - [jQuery Find vs Context, Selector](http://jsperf.com/jquery-find-vs-context-sel/13) - - [innerHTML vs textContent for script text](http://jsperf.com/innerhtml-vs-textcontent-for-script-text) - - [Long String Concatenation](http://jsperf.com/ya-string-concat) - - Loading... - -**[⬆ back to top](#table-of-contents)** - - -## Resources - - -**Read This** - - - [Annotated ECMAScript 5.1](http://es5.github.com/) - -**Tools** - - - Code Style Linters - + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc) - + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) - -**Other Style Guides** - - - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml) - - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines) - - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/) - - [JavaScript Standard Style](https://github.com/feross/standard) - -**Other Styles** - - - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen - - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen - - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun - - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman - -**Further Reading** - - - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll - - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer - - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz - - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban - - [Frontend Guidelines](https://github.com/bendc/frontend-guidelines) - Benjamin De Cock - -**Books** - - - [JavaScript: The Good Parts](http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford - - [JavaScript Patterns](http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov - - [Pro JavaScript Design Patterns](http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X) - Ross Harmes and Dustin Diaz - - [High Performance Web Sites: Essential Knowledge for Front-End Engineers](http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders - - [Maintainable JavaScript](http://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas - - [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw - - [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig - - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch - - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault - - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg - - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy - - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon - - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov - - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman - - [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke - - [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) - Kyle Simpson - -**Blogs** - - - [DailyJS](http://dailyjs.com/) - - [JavaScript Weekly](http://javascriptweekly.com/) - - [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/) - - [Bocoup Weblog](http://weblog.bocoup.com/) - - [Adequately Good](http://www.adequatelygood.com/) - - [NCZOnline](http://www.nczonline.net/) - - [Perfection Kills](http://perfectionkills.com/) - - [Ben Alman](http://benalman.com/) - - [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/) - - [Dustin Diaz](http://dustindiaz.com/) - - [nettuts](http://net.tutsplus.com/?s=javascript) - -**Podcasts** - - - [JavaScript Jabber](http://devchat.tv/js-jabber/) - - -**[⬆ back to top](#table-of-contents)** - -## In the Wild - - This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list. - - - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript) - - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript) - - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript) - - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript) - - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript) - - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript) - - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide) - - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript) - - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript) - - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide) - - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript) - - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide) - - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript) - - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript) - - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style) - - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript) - - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript) - - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide) - - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript) - - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions) - - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript) - - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript) - - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript) - - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript) - - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript) - - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript) - - **Muber**: [muber/javascript](https://github.com/muber/javascript) - - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript) - - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript) - - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript) - - **Nordic Venture Family**: [CodeDistillery/javascript](https://github.com/CodeDistillery/javascript) - - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript) - - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript) - - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide) - - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript) - - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide) - - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide) - - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide) - - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript) - - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript) - - **Target**: [target/javascript](https://github.com/target/javascript) - - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript) - - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript) - - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide) - - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript) - - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript) - - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript) - -## Translation - - This style guide is also available in other languages: - - - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide) - - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript) - - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide) - - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript) - - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide) - - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide) - - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide) - - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide) - - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide) - - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide) - - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript) - - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript) - - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide) - - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide) - -## The JavaScript Style Guide Guide - - - [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide) - -## Chat With Us About JavaScript - - - Find us on [gitter](https://gitter.im/airbnb/javascript). - -## Contributors - - - [View Contributors](https://github.com/airbnb/javascript/graphs/contributors) - - -## License - -(The MIT License) - -Copyright (c) 2014 Airbnb - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -**[⬆ back to top](#table-of-contents)** - -# }; diff --git a/node_modules/web3-provider-engine/node_modules/xtend/.jshintrc b/node_modules/web3-provider-engine/node_modules/xtend/.jshintrc deleted file mode 100644 index 77887b5..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/.jshintrc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "maxdepth": 4, - "maxstatements": 200, - "maxcomplexity": 12, - "maxlen": 80, - "maxparams": 5, - - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": false, - "noarg": true, - "noempty": true, - "nonew": true, - "undef": true, - "unused": "vars", - "trailing": true, - - "quotmark": true, - "expr": true, - "asi": true, - - "browser": false, - "esnext": true, - "devel": false, - "node": false, - "nonstandard": false, - - "predef": ["require", "module", "__dirname", "__filename"] -} diff --git a/node_modules/web3-provider-engine/node_modules/xtend/.npmignore b/node_modules/web3-provider-engine/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/web3-provider-engine/node_modules/xtend/LICENCE b/node_modules/web3-provider-engine/node_modules/xtend/LICENCE deleted file mode 100644 index 1a14b43..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/web3-provider-engine/node_modules/xtend/Makefile b/node_modules/web3-provider-engine/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/web3-provider-engine/node_modules/xtend/README.md b/node_modules/web3-provider-engine/node_modules/xtend/README.md deleted file mode 100644 index 093cb29..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# xtend - -[![browser support][3]][4] - -[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Extend like a boss - -xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. - -## Examples - -```js -var extend = require("xtend") - -// extend returns a new object. Does not mutate arguments -var combination = extend({ - a: "a", - b: 'c' -}, { - b: "b" -}) -// { a: "a", b: "b" } -``` - -## Stability status: Locked - -## MIT Licenced - - - [3]: http://ci.testling.com/Raynos/xtend.png - [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/web3-provider-engine/node_modules/xtend/immutable.js b/node_modules/web3-provider-engine/node_modules/xtend/immutable.js deleted file mode 100644 index 94889c9..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/immutable.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/web3-provider-engine/node_modules/xtend/mutable.js b/node_modules/web3-provider-engine/node_modules/xtend/mutable.js deleted file mode 100644 index 72debed..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/mutable.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/web3-provider-engine/node_modules/xtend/package.json b/node_modules/web3-provider-engine/node_modules/xtend/package.json deleted file mode 100644 index 4ae421b..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "xtend@^4.0.1", - "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine" - ] - ], - "_from": "xtend@>=4.0.1 <5.0.0", - "_id": "xtend@4.0.1", - "_inCache": true, - "_installable": true, - "_location": "/web3-provider-engine/xtend", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - "_npmVersion": "2.14.1", - "_phantomChildren": {}, - "_requested": { - "name": "xtend", - "raw": "xtend@^4.0.1", - "rawSpec": "^4.0.1", - "scope": null, - "spec": ">=4.0.1 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "_shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "_shrinkwrap": null, - "_spec": "xtend@^4.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine", - "author": { - "email": "raynos2@gmail.com", - "name": "Raynos" - }, - "bugs": { - "email": "raynos2@gmail.com", - "url": "https://github.com/Raynos/xtend/issues" - }, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Matt Esch" - } - ], - "dependencies": {}, - "description": "extend like a boss", - "devDependencies": { - "tape": "~1.1.0" - }, - "directories": {}, - "dist": { - "shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "tarball": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - }, - "engines": { - "node": ">=0.4" - }, - "gitHead": "23dc302a89756da89c1897bc732a752317e35390", - "homepage": "https://github.com/Raynos/xtend", - "keywords": [ - "extend", - "merge", - "options", - "opts", - "object", - "array" - ], - "license": "MIT", - "main": "immutable", - "maintainers": [ - { - "email": "raynos2@gmail.com", - "name": "raynos" - } - ], - "name": "xtend", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xtend.git" - }, - "scripts": { - "test": "node test" - }, - "testling": { - "browsers": [ - "ie/7..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ], - "files": "test.js" - }, - "version": "4.0.1" -} diff --git a/node_modules/web3-provider-engine/node_modules/xtend/test.js b/node_modules/web3-provider-engine/node_modules/xtend/test.js deleted file mode 100644 index 093a2b0..0000000 --- a/node_modules/web3-provider-engine/node_modules/xtend/test.js +++ /dev/null @@ -1,83 +0,0 @@ -var test = require("tape") -var extend = require("./") -var mutableExtend = require("./mutable") - -test("merge", function(assert) { - var a = { a: "foo" } - var b = { b: "bar" } - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("replace", function(assert) { - var a = { a: "foo" } - var b = { a: "bar" } - - assert.deepEqual(extend(a, b), { a: "bar" }) - assert.end() -}) - -test("undefined", function(assert) { - var a = { a: undefined } - var b = { b: "foo" } - - assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) - assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) - assert.end() -}) - -test("handle 0", function(assert) { - var a = { a: "default" } - var b = { a: 0 } - - assert.deepEqual(extend(a, b), { a: 0 }) - assert.deepEqual(extend(b, a), { a: "default" }) - assert.end() -}) - -test("is immutable", function (assert) { - var record = {} - - extend(record, { foo: "bar" }) - assert.equal(record.foo, undefined) - assert.end() -}) - -test("null as argument", function (assert) { - var a = { foo: "bar" } - var b = null - var c = void 0 - - assert.deepEqual(extend(b, a, c), { foo: "bar" }) - assert.end() -}) - -test("mutable", function (assert) { - var a = { foo: "bar" } - - mutableExtend(a, { bar: "baz" }) - - assert.equal(a.bar, "baz") - assert.end() -}) - -test("null prototype", function(assert) { - var a = { a: "foo" } - var b = Object.create(null) - b.b = "bar"; - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("null prototype mutable", function (assert) { - var a = { foo: "bar" } - var b = Object.create(null) - b.bar = "baz"; - - mutableExtend(a, b) - - assert.equal(a.bar, "baz") - assert.end() -}) diff --git a/node_modules/web3-provider-engine/package.json b/node_modules/web3-provider-engine/package.json deleted file mode 100644 index 85d9e1e..0000000 --- a/node_modules/web3-provider-engine/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_args": [ - [ - "web3-provider-engine@^8.0.3", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "web3-provider-engine@>=8.0.3 <9.0.0", - "_id": "web3-provider-engine@8.1.6", - "_inCache": true, - "_installable": true, - "_location": "/web3-provider-engine", - "_nodeVersion": "6.3.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/web3-provider-engine-8.1.6.tgz_1476735084186_0.3373567995149642" - }, - "_npmUser": { - "email": "aaron@kumavis.me", - "name": "kumavis" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": { - "crypto-js": "3.1.7", - "utf8": "2.1.2", - "xmlhttprequest": "1.8.0" - }, - "_requested": { - "name": "web3-provider-engine", - "raw": "web3-provider-engine@^8.0.3", - "rawSpec": "^8.0.3", - "scope": null, - "spec": ">=8.0.3 <9.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc" - ], - "_resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-8.1.6.tgz", - "_shasum": "edee7cf2426ab2f3adc145e6cecb5e0d73af193a", - "_shrinkwrap": null, - "_spec": "web3-provider-engine@^8.0.3", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": "", - "browser": { - "request": false - }, - "bugs": { - "url": "https://github.com/MetaMask/provider-engine/issues" - }, - "dependencies": { - "async": "^1.5.2", - "clone": "^1.0.2", - "ethereumjs-account": "^2.0.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.1.0", - "ethereumjs-util": "^4.4.0", - "ethereumjs-vm": "^1.4.0", - "fake-merkle-patricia-tree": "^1.0.1", - "isomorphic-fetch": "^2.2.0", - "request": "^2.67.0", - "semaphore": "^1.0.3", - "solc": "^0.4.2", - "tape": "^4.4.0", - "web3": "^0.15.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - }, - "description": "Web3 ProviderEngine is a tool for composing your own [web3 providers](https://github.com/ethereum/wiki/wiki/JavaScript-API#web3).", - "devDependencies": { - "browserify": "^12.0.1" - }, - "directories": {}, - "dist": { - "shasum": "edee7cf2426ab2f3adc145e6cecb5e0d73af193a", - "tarball": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-8.1.6.tgz" - }, - "gitHead": "7b705b95e8d554cafb12b5973c99323d8e655785", - "homepage": "https://github.com/MetaMask/provider-engine#readme", - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "dan@danfinlay.com", - "name": "danfinlay" - }, - { - "email": "aaron@kumavis.me", - "name": "kumavis" - } - ], - "name": "web3-provider-engine", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/MetaMask/provider-engine.git" - }, - "scripts": { - "bundle": "mkdir -p ./dist && npm run bundle-engine && npm run bundle-zero", - "bundle-engine": "browserify -s ProviderEngine -e index.js > dist/ProviderEngine.js", - "bundle-zero": "browserify -s ZeroClientProvider -e zero.js > dist/ZeroClientProvider.js", - "test": "node test/index.js" - }, - "version": "8.1.6" -} diff --git a/node_modules/web3-provider-engine/subproviders/cache.js b/node_modules/web3-provider-engine/subproviders/cache.js deleted file mode 100644 index 7665eee..0000000 --- a/node_modules/web3-provider-engine/subproviders/cache.js +++ /dev/null @@ -1,258 +0,0 @@ -const inherits = require('util').inherits -const ethUtil = require('ethereumjs-util') -const clone = require('clone') -const cacheUtils = require('../util/rpc-cache-utils.js') -const Stoplight = require('../util/stoplight.js') -const Subprovider = require('./subprovider.js') - -module.exports = BlockCacheProvider - -inherits(BlockCacheProvider, Subprovider) - -function BlockCacheProvider(opts) { - const self = this - opts = opts || {} - // set initialization blocker - self._ready = new Stoplight() - self.strategies = { - perma: new ConditionalPermaCacheStrategy({ - eth_getTransactionByHash: function(result) { - return Boolean(result && result.blockHash) - }, - }), - block: new BlockCacheStrategy(self), - fork: new BlockCacheStrategy(self), - } -} - -// setup a block listener on 'setEngine' -BlockCacheProvider.prototype.setEngine = function(engine) { - const self = this - Subprovider.prototype.setEngine.call(self, engine) - // unblock initialization after first block - engine.once('block', function(block) { - self._ready.go() - }) - // empty old cache - engine.on('block', function(block) { - self.strategies.block.cacheRollOff(block) - self.strategies.fork.cacheRollOff(block) - }) -} - -BlockCacheProvider.prototype.handleRequest = function(payload, next, end){ - const self = this - - // skip cache if told to do so - if (payload.skipCache) { - // console.log('CACHE SKIP - skip cache if told to do so') - return next() - } - - // Ignore block polling requests. - if (payload.method === 'eth_getBlockByNumber' && payload.params[0] === 'latest') { - // console.log('CACHE SKIP - Ignore block polling requests.') - return next() - } - - // wait for first block - self._ready.await(function(){ - // actually handle the request - self._handleRequest(payload, next, end) - }) -} - -BlockCacheProvider.prototype._handleRequest = function(payload, next, end){ - const self = this - - var type = cacheUtils.cacheTypeForPayload(payload) - var strategy = this.strategies[type] - - // If there's no strategy in place, pass it down the chain. - if (!strategy) { - return next() - } - - // If the strategy can't cache this request, ignore it. - if (!strategy.canCache(payload)) { - return next() - } - - var blockTag = cacheUtils.blockTagForPayload(payload) - if (!blockTag) blockTag = 'latest' - var requestedBlockNumber - - if (blockTag === 'earliest') { - requestedBlockNumber = '0x00' - } else if (blockTag === 'latest') { - requestedBlockNumber = bufferToHex(self.currentBlock.number) - } else { - // We have a hex number - requestedBlockNumber = blockTag - } - - //console.log('REQUEST at block 0x' + requestedBlockNumber.toString('hex')) - - // end on a hit, continue on a miss - strategy.hitCheck(payload, requestedBlockNumber, end, function() { - // miss fallthrough to provider chain, caching the result on the way back up. - next(function(err, result, cb) { - // err is already handled by engine - if (err) return cb() - strategy.cacheResult(payload, result, requestedBlockNumber, cb) - }) - }) -} - -// -// Cache Strategies -// - -function PermaCacheStrategy() { - this.cache = {} -} - -PermaCacheStrategy.prototype.hitCheck = function(payload, requestedBlockNumber, hit, miss) { - var identifier = cacheUtils.cacheIdentifierForPayload(payload) - var cached = this.cache[identifier] - - if (!cached) return miss() - - // If the block number we're requesting at is greater than or - // equal to the block where we cached a previous response, - // the cache is valid. If it's from earlier than the cache, - // send it back down to the client (where it will be recached.) - var cacheIsEarlyEnough = compareHex(requestedBlockNumber, cached.blockNumber) >= 0 - if (cacheIsEarlyEnough) { - var clonedValue = clone(cached.result) - return hit(null, clonedValue) - } else { - return miss() - } -} - -PermaCacheStrategy.prototype.cacheResult = function(payload, result, requestedBlockNumber, callback) { - var identifier = cacheUtils.cacheIdentifierForPayload(payload) - - if (result) { - var clonedValue = clone(result) - this.cache[identifier] = { - blockNumber: requestedBlockNumber, - result: clonedValue, - } - } - - callback() -} - -PermaCacheStrategy.prototype.canCache = function(payload) { - return cacheUtils.canCache(payload) -} - -// -// ConditionalPermaCacheStrategy -// - -function ConditionalPermaCacheStrategy(conditionals) { - this.strategy = new PermaCacheStrategy() - this.conditionals = conditionals -} - -ConditionalPermaCacheStrategy.prototype.hitCheck = function(payload, requestedBlockNumber, hit, miss) { - return this.strategy.hitCheck(payload, requestedBlockNumber, hit, miss) -} - -ConditionalPermaCacheStrategy.prototype.cacheResult = function(payload, result, requestedBlockNumber, callback) { - var conditional = this.conditionals[payload.method] - - if (conditional) { - if (conditional(result)) { - this.strategy.cacheResult(payload, result, requestedBlockNumber, callback) - } else { - callback() - } - } else { - // Cache all requests that don't have a conditional - this.strategy.cacheResult(payload, result, requestedBlockNumber, callback) - } -} - -ConditionalPermaCacheStrategy.prototype.canCache = function(payload) { - return this.strategy.canCache(payload) -} - -// -// BlockCacheStrategy -// - -function BlockCacheStrategy() { - this.cache = {} -} - -BlockCacheStrategy.prototype.getBlockCacheForPayload = function(payload, blockNumber) { - var blockTag = cacheUtils.blockTagForPayload(payload) - var blockCache = this.cache[blockNumber] - // create new cache if necesary - if (!blockCache) blockCache = this.cache[blockNumber] = {} - - return blockCache -} - -BlockCacheStrategy.prototype.hitCheck = function(payload, requestedBlockNumber, hit, miss) { - var blockCache = this.getBlockCacheForPayload(payload, requestedBlockNumber) - - if (!blockCache) { - return miss() - } - - var identifier = cacheUtils.cacheIdentifierForPayload(payload) - var cached = blockCache[identifier] - - if (cached) { - return hit(null, cached) - } else { - return miss() - } -} - -BlockCacheStrategy.prototype.cacheResult = function(payload, result, requestedBlockNumber, callback) { - if (result) { - var blockCache = this.getBlockCacheForPayload(payload, requestedBlockNumber) - var identifier = cacheUtils.cacheIdentifierForPayload(payload) - blockCache[identifier] = result - } - callback() -} - -BlockCacheStrategy.prototype.canCache = function(payload) { - if (!cacheUtils.canCache(payload)) { - return false - } - - var blockTag = cacheUtils.blockTagForPayload(payload) - - return (blockTag !== 'pending') -} - -// naively removes older block caches -BlockCacheStrategy.prototype.cacheRollOff = function(currentBlock){ - const self = this - var currentNumber = ethUtil.bufferToInt(currentBlock.number) - if (currentNumber > 0) { - var previousHex = ethUtil.intToHex(currentNumber-1) - delete self.cache[previousHex] - } -} - - -// util - -function bufferToHex(buffer){ - return ethUtil.addHexPrefix(buffer.toString('hex')) -} - -function compareHex(hexA, hexB){ - var numA = parseInt(hexA, 16) - var numB = parseInt(hexB, 16) - return numA === numB ? 0 : (numA > numB ? 1 : -1 ) -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/subproviders/default-fixture.js b/node_modules/web3-provider-engine/subproviders/default-fixture.js deleted file mode 100644 index 6618133..0000000 --- a/node_modules/web3-provider-engine/subproviders/default-fixture.js +++ /dev/null @@ -1,18 +0,0 @@ -const inherits = require('util').inherits -const FixtureProvider = require('./fixture.js') -const version = require('../package.json').version - -module.exports = DefaultFixtures - -inherits(DefaultFixtures, FixtureProvider) - -function DefaultFixtures() { - const self = this - var responses = { - web3_clientVersion: 'ProviderEngine/v'+version+'/javascript', - net_listening: true, - eth_hashrate: '0x00', - eth_mining: false, - } - FixtureProvider.call(self, responses) -} diff --git a/node_modules/web3-provider-engine/subproviders/etherscan.js b/node_modules/web3-provider-engine/subproviders/etherscan.js deleted file mode 100644 index 223b333..0000000 --- a/node_modules/web3-provider-engine/subproviders/etherscan.js +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Etherscan.io API connector - * @author github.com/axic - * - * The etherscan.io API supports: - * - * 1) Natively via proxy methods - * - eth_blockNumber * - * - eth_getBlockByNumber * - * - eth_getBlockTransactionCountByNumber - * - getTransactionByHash - * - getTransactionByBlockNumberAndIndex - * - eth_getTransactionCount * - * - eth_sendRawTransaction * - * - eth_call * - * - eth_getTransactionReceipt * - * - eth_getCode * - * - eth_getStorageAt * - * - * 2) Via non-native methods - * - eth_getBalance - */ - -const xhr = process.browser ? require('xhr') : require('request') -const inherits = require('util').inherits -const Subprovider = require('./subprovider.js') - -module.exports = EtherscanProvider - -inherits(EtherscanProvider, Subprovider) - -function EtherscanProvider(opts) { - opts = opts || {} - this.network = (opts.network !== 'api' && opts.network !== 'testnet') ? 'api' : opts.network - this.proto = (opts.https || false) ? 'https' : 'http' - this.requests = []; - this.times = isNaN(opts.times) ? 4 : opts.times; - this.interval = isNaN(opts.interval) ? 1000 : opts.interval; - this.retryFailed = typeof opts.retryFailed === 'boolean' ? opts.retryFailed : true; // not built yet - - setInterval(this.handleRequests, this.interval, this); -} - -EtherscanProvider.prototype.handleRequests = function(self){ - if(self.requests.length == 0) return; - - //console.log('Handling the next ' + self.times + ' of ' + self.requests.length + ' requests'); - - for(var requestIndex = 0; requestIndex < self.times; requestIndex++) { - var requestItem = self.requests.shift() - - if(typeof requestItem !== 'undefined') - handlePayload(requestItem.proto, requestItem.network, requestItem.payload, requestItem.next, requestItem.end) - } -} - -EtherscanProvider.prototype.handleRequest = function(payload, next, end){ - var requestObject = {proto: this.proto, network: this.network, payload: payload, next: next, end: end}, - self = this; - - if(this.retryFailed) - requestObject.end = function(err, result){ - if(err === '403 - Forbidden: Access is denied.') - self.requests.push(requestObject); - else - end(err, result); - }; - - this.requests.push(requestObject); -} - -function handlePayload(proto, network, payload, next, end){ - switch(payload.method) { - case 'eth_blockNumber': - etherscanXHR(true, proto, network, 'proxy', 'eth_blockNumber', {}, end) - return - - case 'eth_getBlockByNumber': - etherscanXHR(true, proto, network, 'proxy', 'eth_getBlockByNumber', { - tag: payload.params[0], - boolean: payload.params[1] }, end) - return - - case 'eth_getBlockTransactionCountByNumber': - etherscanXHR(true, proto, network, 'proxy', 'eth_getBlockTransactionCountByNumber', { - tag: payload.params[0] - }, end) - return - - case 'eth_getTransactionByHash': - etherscanXHR(true, proto, network, 'proxy', 'eth_getTransactionByHash', { - txhash: payload.params[0] - }, end) - return - - case 'eth_getBalance': - etherscanXHR(true, proto, network, 'account', 'balance', { - address: payload.params[0], - tag: payload.params[1] }, end) - return - - case 'eth_call': - etherscanXHR(true, proto, network, 'proxy', 'eth_call', payload.params[0], end) - return - - case 'eth_sendRawTransaction': - etherscanXHR(false, proto, network, 'proxy', 'eth_sendRawTransaction', { hex: payload.params[0] }, end) - return - - case 'eth_getTransactionReceipt': - etherscanXHR(true, proto, network, 'proxy', 'eth_getTransactionReceipt', { txhash: payload.params[0] }, end) - return - - // note !! this does not support topic filtering yet, it will return all block logs - case 'eth_getLogs': - var payloadObject = payload.params[0], - txProcessed = 0, - logs = []; - - etherscanXHR(true, proto, network, 'proxy', 'eth_getBlockByNumber', { - tag: payloadObject.toBlock, - boolean: payload.params[1] }, function(err, blockResult) { - if(err) return end(err); - - for(var transaction in blockResult.transactions){ - etherscanXHR(true, proto, network, 'proxy', 'eth_getTransactionReceipt', { txhash: transaction.hash }, function(err, receiptResult) { - if(!err) logs.concat(receiptResult.logs); - txProcessed += 1; - if(txProcessed === blockResult.transactions.length) end(null, logs) - }) - } - }) - return - - case 'eth_getTransactionCount': - etherscanXHR(true, proto, network, 'proxy', 'eth_getTransactionCount', { - address: payload.params[0], - tag: payload.params[1] - }, end) - return - - case 'eth_getCode': - etherscanXHR(true, proto, network, 'proxy', 'eth_getCode', { - address: payload.params[0], - tag: payload.params[1] - }, end) - return - - case 'eth_getStorageAt': - etherscanXHR(true, proto, network, 'proxy', 'eth_getStorageAt', { - address: payload.params[0], - position: payload.params[1], - tag: payload.params[2] - }, end) - return - - default: - next(); - return - } -} - -function toQueryString(params) { - return Object.keys(params).map(function(k) { - return encodeURIComponent(k) + '=' + encodeURIComponent(params[k]) - }).join('&') -} - -function etherscanXHR(useGetMethod, proto, network, module, action, params, end) { - var uri = proto + '://' + network + '.etherscan.io/api?' + toQueryString({ module: module, action: action }) + '&' + toQueryString(params) - - xhr({ - uri: uri, - method: useGetMethod ? 'GET' : 'POST', - headers: { - 'Accept': 'application/json', - // 'Content-Type': 'application/json', - }, - rejectUnauthorized: false, - }, function(err, res, body) { - // console.log('[etherscan] response: ', err) - - if (err) return end(err) - - /*console.log('[etherscan request]' - + ' method: ' + useGetMethod - + ' proto: ' + proto - + ' network: ' + network - + ' module: ' + module - + ' action: ' + action - + ' params: ' + params - + ' return body: ' + body);*/ - - if(body.indexOf('403 - Forbidden: Access is denied.') > -1) - return end('403 - Forbidden: Access is denied.') - - var data - try { - data = JSON.parse(body) - } catch (err) { - console.error(err.stack) - return end(err) - } - - // console.log('[etherscan] response decoded: ', data) - - // NOTE: or use id === -1? (id=1 is 'success') - if ((module === 'proxy') && data.error) { - // Maybe send back the code too? - return end(data.error.message) - } - - // NOTE: or data.status !== 1? - if ((module === 'account') && (data.message !== 'OK')) { - return end(data.message) - } - - end(null, data.result) - }) -} diff --git a/node_modules/web3-provider-engine/subproviders/filters.js b/node_modules/web3-provider-engine/subproviders/filters.js deleted file mode 100644 index f20e2a4..0000000 --- a/node_modules/web3-provider-engine/subproviders/filters.js +++ /dev/null @@ -1,482 +0,0 @@ -const async = require('async') -const inherits = require('util').inherits -const ethUtil = require('ethereumjs-util') -const Subprovider = require('./subprovider.js') -const Stoplight = require('../util/stoplight.js') - -module.exports = FilterSubprovider - -// handles the following RPC methods: -// eth_newBlockFilter -// eth_newPendingTransactionFilter -// eth_newFilter -// eth_getFilterChanges -// eth_uninstallFilter -// eth_getFilterLogs - -inherits(FilterSubprovider, Subprovider) - -function FilterSubprovider(opts) { - opts = opts || {} - const self = this - self.filterIndex = 0 - self.filters = {} - self.filterDestroyHandlers = {} - self.asyncBlockHandlers = {} - self.asyncPendingBlockHandlers = {} - self._ready = new Stoplight() - self._ready.go() - self.pendingBlockTimeout = opts.pendingBlockTimeout || 4000 - self.checkForPendingBlocksActive = false - - // we dont have engine immeditately - setTimeout(function(){ - // asyncBlockHandlers require locking provider until updates are completed - self.engine.on('block', function(block){ - // pause processing - self._ready.stop() - // update filters - var updaters = valuesFor(self.asyncBlockHandlers) - .map(function(fn){ return fn.bind(null, block) }) - async.parallel(updaters, function(err){ - if (err) console.error(err) - // unpause processing - self._ready.go() - }) - }) - }) - -} - -FilterSubprovider.prototype.handleRequest = function(payload, next, end){ - const self = this - switch(payload.method){ - - case 'eth_newBlockFilter': - self.newBlockFilter(end) - return - - case 'eth_newPendingTransactionFilter': - self.newPendingTransactionFilter(end) - self.checkForPendingBlocks() - return - - case 'eth_newFilter': - self.newLogFilter(payload.params[0], end) - return - - case 'eth_getFilterChanges': - self._ready.await(function(){ - self.getFilterChanges(payload.params[0], end) - }) - return - - case 'eth_getFilterLogs': - self._ready.await(function(){ - self.getFilterLogs(payload.params[0], end) - }) - return - - case 'eth_uninstallFilter': - self._ready.await(function(){ - self.uninstallFilter(payload.params[0], end) - }) - return - - default: - next() - return - } -} - -FilterSubprovider.prototype.newBlockFilter = function(cb) { - const self = this - - self._getBlockNumber(function(err, blockNumber){ - if (err) return cb(err) - - var filter = new BlockFilter({ - blockNumber: blockNumber, - }) - - var newBlockHandler = filter.update.bind(filter) - self.engine.on('block', newBlockHandler) - var destroyHandler = function(){ - self.engine.removeListener('block', newBlockHandler) - } - - self.filterIndex++ - var hexFilterIndex = intToHex(self.filterIndex) - self.filters[hexFilterIndex] = filter - self.filterDestroyHandlers[hexFilterIndex] = destroyHandler - - cb(null, hexFilterIndex) - }) -} - -FilterSubprovider.prototype.newLogFilter = function(opts, cb) { - const self = this - - self._getBlockNumber(function(err, blockNumber){ - if (err) return cb(err) - - var filter = new LogFilter(opts) - var newLogHandler = filter.update.bind(filter) - var blockHandler = function(block, cb){ - self._logsForBlock(block, function(err, logs){ - if (err) return cb(err) - logs.forEach(newLogHandler) - cb() - }) - } - - self.filterIndex++ - self.asyncBlockHandlers[self.filterIndex] = blockHandler - var hexFilterIndex = intToHex(self.filterIndex) - self.filters[hexFilterIndex] = filter - - cb(null, hexFilterIndex) - }) -} - -FilterSubprovider.prototype.newPendingTransactionFilter = function(cb) { - const self = this - - var filter = new PendingTransactionFilter() - var newTxHandler = filter.update.bind(filter) - var blockHandler = function(block, cb){ - self._txHashesForBlock(block, function(err, txs){ - if (err) return cb(err) - txs.forEach(newTxHandler) - cb() - }) - } - - self.filterIndex++ - self.asyncPendingBlockHandlers[self.filterIndex] = blockHandler - var hexFilterIndex = intToHex(self.filterIndex) - self.filters[hexFilterIndex] = filter - - cb(null, hexFilterIndex) -} - -FilterSubprovider.prototype.getFilterChanges = function(filterId, cb) { - const self = this - - var filter = self.filters[filterId] - if (!filter) console.warn('FilterSubprovider - no filter with that id:', filterId) - if (!filter) return cb(null, []) - var results = filter.getChanges() - filter.clearChanges() - cb(null, results) -} - -FilterSubprovider.prototype.getFilterLogs = function(filterId, cb) { - const self = this - - var filter = self.filters[filterId] - if (!filter) console.warn('FilterSubprovider - no filter with that id:', filterId) - if (!filter) return cb(null, []) - if (filter.type === 'log') { - self.emitPayload({ - method: 'eth_getLogs', - params: [{ - fromBlock: filter.fromBlock, - toBlock: filter.toBlock, - address: filter.address, - topics: filter.topics, - }], - }, function(err, res){ - if (err) return cb(err) - cb(null, res.result) - }) - } else { - var results = filter.getAllResults() - cb(null, results) - } -} - -FilterSubprovider.prototype.uninstallFilter = function(filterId, cb) { - const self = this - - var filter = self.filters[filterId] - if (!filter) { - cb(null, false) - return - } - - var destroyHandler = self.filterDestroyHandlers[filterId] - delete self.filters[filterId] - delete self.asyncBlockHandlers[filterId] - delete self.asyncPendingBlockHandlers[filterId] - delete self.filterDestroyHandlers[filterId] - if (destroyHandler) destroyHandler() - - cb(null, true) -} - -// private - -// check for pending blocks -FilterSubprovider.prototype.checkForPendingBlocks = function(){ - const self = this - if (self.checkForPendingBlocksActive) return - var activePendingTxFilters = !!Object.keys(self.asyncPendingBlockHandlers).length - if (activePendingTxFilters) { - self.checkForPendingBlocksActive = true - self.emitPayload({ - method: 'eth_getBlockByNumber', - params: ['pending', true], - }, function(err, res){ - if (err) { - self.checkForPendingBlocksActive = false - console.error(err) - return - } - self.onNewPendingBlock(res.result, function(err){ - if (err) console.error(err) - self.checkForPendingBlocksActive = false - setTimeout(self.checkForPendingBlocks.bind(self), self.pendingBlockTimeout) - }) - }) - } -} - -FilterSubprovider.prototype.onNewPendingBlock = function(block, cb){ - const self = this - // update filters - var updaters = valuesFor(self.asyncPendingBlockHandlers) - .map(function(fn){ return fn.bind(null, block) }) - async.parallel(updaters, cb) -} - -FilterSubprovider.prototype._getBlockNumber = function(cb) { - const self = this - var blockNumber = bufferToHex(self.engine.currentBlock.number) - cb(null, blockNumber) -} - -FilterSubprovider.prototype._logsForBlock = function(block, cb) { - const self = this - var blockNumber = bufferToHex(block.number) - self.emitPayload({ - method: 'eth_getLogs', - params: [{ - fromBlock: blockNumber, - toBlock: blockNumber, - }], - }, function(err, response){ - if (err) return cb(err) - if (response.error) return cb(response.error) - cb(null, response.result) - }) - -} - -FilterSubprovider.prototype._txHashesForBlock = function(block, cb) { - const self = this - var txs = block.transactions - // short circuit if empty - if (txs.length === 0) return cb(null, []) - // txs are already hashes - if ('string' === typeof txs[0]) { - cb(null, txs) - // txs are obj, need to map to hashes - } else { - var results = txs.map((tx) => tx.hash) - cb(null, results) - } -} - -// -// BlockFilter -// - -function BlockFilter(opts) { - // console.log('BlockFilter - new') - const self = this - self.type = 'block' - self.engine = opts.engine - self.blockNumber = opts.blockNumber - self.updates = [] -} - -BlockFilter.prototype.update = function(block){ - // console.log('BlockFilter - update') - const self = this - var blockHash = bufferToHex(block.hash) - self.updates.push(blockHash) -} - -BlockFilter.prototype.getChanges = function(){ - const self = this - var results = self.updates - // console.log('BlockFilter - getChanges:', results.length) - return results -} - -BlockFilter.prototype.clearChanges = function(){ - // console.log('BlockFilter - clearChanges') - const self = this - self.updates = [] -} - -// -// LogFilter -// - -function LogFilter(opts) { - // console.log('LogFilter - new') - const self = this - self.type = 'log' - self.fromBlock = opts.fromBlock || 'latest' - self.toBlock = opts.toBlock || 'latest' - self.address = opts.address ? normalizeHex(opts.address) : opts.address - self.topics = opts.topics || [] - self.updates = [] - self.allResults = [] -} - -LogFilter.prototype.validateLog = function(log){ - // console.log('LogFilter - validateLog:', log) - const self = this - - // check if block number in bounds: - // console.log('LogFilter - validateLog - blockNumber', self.fromBlock, self.toBlock) - if (blockTagIsNumber(self.fromBlock) && hexToInt(self.fromBlock) >= hexToInt(log.blockNumber)) return false - if (blockTagIsNumber(self.toBlock) && hexToInt(self.toBlock) <= hexToInt(log.blockNumber)) return false - - // address is correct: - // console.log('LogFilter - validateLog - address', self.address) - if (self.address && self.address !== log.address) return false - - // topics match: - // topics are position-dependant - // topics can be nested to represent `or` [[a || b], c] - // topics can be null, representing a wild card for that position - // console.log('LogFilter - validateLog - topics', log.topics) - // console.log('LogFilter - validateLog - against topics', self.topics) - var topicsMatch = self.topics.reduce(function(previousMatched, topicPattern, index){ - // abort in progress - if (!previousMatched) return false - // wild card - if (!topicPattern) return true - // pattern is longer than actual topics - var logTopic = log.topics[index] - if (!logTopic) return false - // check each possible matching topic - var subtopicsToMatch = Array.isArray(topicPattern) ? topicPattern : [topicPattern] - var topicDoesMatch = subtopicsToMatch.filter(function(subTopic){ - return logTopic === subTopic - }).length > 0 - return topicDoesMatch - }, true) - - // console.log('LogFilter - validateLog - '+(topicsMatch ? 'approved!' : 'denied!')+' ==============') - return topicsMatch -} - -LogFilter.prototype.update = function(log){ - // console.log('LogFilter - update') - const self = this - // validate filter match - var validated = self.validateLog(log) - if (!validated) return - // add to results - self.updates.push(log) - self.allResults.push(log) -} - -LogFilter.prototype.getChanges = function(){ - // console.log('LogFilter - getChanges') - const self = this - var results = self.updates - return results -} - -LogFilter.prototype.getAllResults = function(){ - // console.log('LogFilter - getAllResults') - const self = this - var results = self.allResults - return results -} - -LogFilter.prototype.clearChanges = function(){ - // console.log('LogFilter - clearChanges') - const self = this - self.updates = [] -} - -// -// PendingTxFilter -// - -function PendingTransactionFilter(){ - // console.log('PendingTransactionFilter - new') - const self = this - self.type = 'pendingTx' - self.updates = [] - self.allResults = [] -} - -PendingTransactionFilter.prototype.validateUnique = function(tx){ - const self = this - return self.allResults.indexOf(tx) === -1 -} - -PendingTransactionFilter.prototype.update = function(tx){ - // console.log('PendingTransactionFilter - update') - const self = this - // validate filter match - var validated = self.validateUnique(tx) - if (!validated) return - // add to results - self.updates.push(tx) - self.allResults.push(tx) -} - -PendingTransactionFilter.prototype.getChanges = function(){ - // console.log('PendingTransactionFilter - getChanges') - const self = this - var results = self.updates - return results -} - -PendingTransactionFilter.prototype.getAllResults = function(){ - // console.log('PendingTransactionFilter - getAllResults') - const self = this - var results = self.allResults - return results -} - -PendingTransactionFilter.prototype.clearChanges = function(){ - // console.log('PendingTransactionFilter - clearChanges') - const self = this - self.updates = [] -} - -// util - -function normalizeHex(hexString) { - return hexString.slice(0, 2) === '0x' ? hexString : '0x'+hexString -} - -function intToHex(value) { - return ethUtil.intToHex(value) -} - -function hexToInt(hexString) { - return Number(hexString) -} - -function bufferToHex(buffer) { - return '0x'+buffer.toString('hex') -} - -function blockTagIsNumber(blockTag){ - return blockTag && ['earliest', 'latest', 'pending'].indexOf(blockTag) === -1 -} - -function valuesFor(obj){ - return Object.keys(obj).map(function(key){ return obj[key] }) -} diff --git a/node_modules/web3-provider-engine/subproviders/fixture.js b/node_modules/web3-provider-engine/subproviders/fixture.js deleted file mode 100644 index 5cd598a..0000000 --- a/node_modules/web3-provider-engine/subproviders/fixture.js +++ /dev/null @@ -1,27 +0,0 @@ -const inherits = require('util').inherits -const Subprovider = require('./subprovider.js') - -module.exports = FixtureProvider - -inherits(FixtureProvider, Subprovider) - -function FixtureProvider(staticResponses){ - const self = this - staticResponses = staticResponses || {} - self.staticResponses = staticResponses -} - -FixtureProvider.prototype.handleRequest = function(payload, next, end){ - const self = this - var staticResponse = self.staticResponses[payload.method] - // async function - if ('function' === typeof staticResponse) { - staticResponse(payload, next, end) - // static response - null is valid response - } else if (staticResponse !== undefined) { - end(null, staticResponse) - // no prepared response - skip - } else { - next() - } -} diff --git a/node_modules/web3-provider-engine/subproviders/gasprice.js b/node_modules/web3-provider-engine/subproviders/gasprice.js deleted file mode 100644 index 257bd87..0000000 --- a/node_modules/web3-provider-engine/subproviders/gasprice.js +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Calculate gasPrice based on last blocks. - * @author github.com/axic - * - * FIXME: support minimum suggested gas and perhaps other options from geth: - * https://github.com/ethereum/go-ethereum/blob/master/eth/gasprice.go - * https://github.com/ethereum/go-ethereum/wiki/Gas-Price-Oracle - */ - -const async = require('async') -const inherits = require('util').inherits -const Subprovider = require('./subprovider.js') - -module.exports = GaspriceProvider - -inherits(GaspriceProvider, Subprovider) - -function GaspriceProvider(opts) { - opts = opts || {} - this.numberOfBlocks = opts.numberOfBlocks || 10 -} - -GaspriceProvider.prototype.handleRequest = function(payload, next, end){ - if (payload.method !== 'eth_gasPrice') - return next() - - const self = this - - self.emitPayload({ method: 'eth_blockNumber' }, function(err, res) { - // FIXME: convert number using a bignum library - var lastBlock = parseInt(res.result, 16) - var blockNumbers = [ ] - for (var i = 0; i < self.numberOfBlocks; i++) { - blockNumbers.push('0x' + lastBlock.toString(16)) - lastBlock-- - } - - function getBlock(item, end) { - self.emitPayload({ method: 'eth_getBlockByNumber', params: [ item, true ] }, function(err, res) { - if (err) return end(err) - end(null, res.result.transactions) - }) - } - - // FIXME: this could be made much faster - function calcPrice(err, transactions) { - // flatten array - transactions = transactions.reduce(function(a, b) { return a.concat(b) }, []) - - // leave only the gasprice - // FIXME: convert number using a bignum library - transactions = transactions.map(function(a) { return parseInt(a.gasPrice, 16) }, []) - - // order ascending - transactions.sort(function(a, b) { return a - b }) - - // ze median - var half = Math.floor(transactions.length / 2) - - var median - if (transactions.length % 2) - median = transactions[half] - else - median = Math.floor((transactions[half - 1] + transactions[half]) / 2.0) - - end(null, median) - } - - async.map(blockNumbers, getBlock, calcPrice) - }) -} diff --git a/node_modules/web3-provider-engine/subproviders/hooked-wallet-ethtx.js b/node_modules/web3-provider-engine/subproviders/hooked-wallet-ethtx.js deleted file mode 100644 index 6b26e2b..0000000 --- a/node_modules/web3-provider-engine/subproviders/hooked-wallet-ethtx.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Uses ethereumjs-tx to sign a transaction. - * - * The two callbacks a user needs to implement are: - * - getAccounts() -- array of addresses supported - * - getPrivateKey(address) -- return private key for a given address - * - * Optionally approveTransaction(), approveMessage() can be supplied too. - */ - -const inherits = require('util').inherits -const HookedWalletProvider = require('./hooked-wallet.js') -const EthTx = require('ethereumjs-tx') -const ethUtil = require('ethereumjs-util') - -module.exports = HookedWalletEthTxSubprovider - -inherits(HookedWalletEthTxSubprovider, HookedWalletProvider) - -function HookedWalletEthTxSubprovider(opts) { - const self = this - - HookedWalletEthTxSubprovider.super_.call(self, opts) - - self.signTransaction = function(txData, cb) { - // defaults - if (txData.gas !== undefined) txData.gasLimit = txData.gas - txData.value = txData.value || '0x00' - - opts.getPrivateKey(txData.from, function(err, privateKey) { - if (err) return cb(err) - - var tx = new EthTx(txData) - tx.sign(privateKey) - cb(null, '0x' + tx.serialize().toString('hex')) - }) - } - - self.signMessage = function(msgParams, cb) { - opts.getPrivateKey(msgParams.from, function(err, privateKey) { - if (err) return cb(err) - var msgHash = ethUtil.sha3(msgParams.data) - var sig = ethUtil.ecsign(msgHash, privateKey) - var serialized = ethUtil.bufferToHex(concatSig(sig.v, sig.r, sig.s)) - cb(null, serialized) - }) - } - -} - -function concatSig(v, r, s) { - r = ethUtil.fromSigned(r) - s = ethUtil.fromSigned(s) - v = ethUtil.bufferToInt(v) - r = ethUtil.toUnsigned(r).toString('hex') - s = ethUtil.toUnsigned(s).toString('hex') - v = ethUtil.stripHexPrefix(ethUtil.intToHex(v)) - return ethUtil.addHexPrefix(r.concat(s, v).toString("hex")) -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/subproviders/hooked-wallet.js b/node_modules/web3-provider-engine/subproviders/hooked-wallet.js deleted file mode 100644 index ba75d74..0000000 --- a/node_modules/web3-provider-engine/subproviders/hooked-wallet.js +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Emulate 'eth_accounts' / 'eth_sendTransaction' using 'eth_sendRawTransaction' - * - * The two callbacks a user needs to implement are: - * - getAccounts() -- array of addresses supported - * - signTransaction(tx) -- sign a raw transaction object - */ - -const async = require('async') -const inherits = require('util').inherits -const extend = require('xtend') -const Semaphore = require('semaphore') -const Subprovider = require('./subprovider.js') -const estimateGas = require('../util/estimate-gas.js') - -module.exports = HookedWalletSubprovider - -// handles the following RPC methods: -// eth_coinbase -// eth_accounts -// eth_sendTransaction -// eth_sign - - -inherits(HookedWalletSubprovider, Subprovider) - -function HookedWalletSubprovider(opts){ - const self = this - // control flow - self.nonceLock = Semaphore(1) - - // data lookup - self.getAccounts = opts.getAccounts - // default to auto-approve - self.approveTransaction = opts.approveTransaction || function(txParams, cb){ cb(null, true) } - self.approveMessage = opts.approveMessage || function(txParams, cb){ cb(null, true) } - // actually perform the signature - self.signTransaction = opts.signTransaction - self.signMessage = opts.signMessage -} - -HookedWalletSubprovider.prototype.handleRequest = function(payload, next, end){ - const self = this - - switch(payload.method) { - - case 'eth_coinbase': - self.getAccounts(function(err, accounts){ - if (err) return end(err) - var result = accounts[0] || null - end(null, result) - }) - return - - case 'eth_accounts': - self.getAccounts(function(err, accounts){ - if (err) return end(err) - end(null, accounts) - }) - return - - case 'eth_sendTransaction': - var txParams = payload.params[0] - async.waterfall([ - self.validateTransaction.bind(self, txParams), - self.approveTransaction.bind(self, txParams), - self.checkApproval.bind(self), - self.finalizeAndSubmitTx.bind(self, txParams) - ], end) - return - - case 'eth_sign': - var address = payload.params[0] - var message = payload.params[1] - // non-standard "extraParams" to be appended to our "msgParams" obj - // good place for metadata - var extraParams = payload.params[2] || {} - var msgParams = extend(extraParams, { - from: address, - data: message, - }) - async.waterfall([ - self.validateMessage.bind(self, msgParams), - self.approveMessage.bind(self, msgParams), - function checkApproval(didApprove, cb){ - cb( didApprove ? null : new Error('User denied message signature.') ) - }, - self.signMessage.bind(self, msgParams), - ], end) - return - - default: - next() - return - - } -} - -HookedWalletSubprovider.prototype.checkApproval = function(didApprove, cb) { - cb( didApprove ? null : new Error('User denied transaction signature.') ) -} - -HookedWalletSubprovider.prototype.finalizeAndSubmitTx = function(txParams, cb) { - const self = this - // must fillInTxExtras + submit in serial or we may repeat the - // nonce provided by nonce-tracker - self.nonceLock.take(function(){ - async.waterfall([ - self.fillInTxExtras.bind(self, txParams), - self.signTransaction.bind(self), - self.submitTx.bind(self), - ], function(err, txHash){ - self.nonceLock.leave() - if (err) return cb(err) - cb(null, txHash) - }) - }) -} - -HookedWalletSubprovider.prototype.submitTx = function(rawTx, cb) { - const self = this - self.emitPayload({ - method: 'eth_sendRawTransaction', - params: [rawTx], - }, function(err, result){ - if (err) return cb(err) - cb(null, result.result) - }) -} - -HookedWalletSubprovider.prototype.validateTransaction = function(txParams, cb){ - const self = this - // shortcut: undefined sender is invalid - if (txParams.from === undefined) return cb(new Error(`Undefined address - from address required to sign transaction.`)) - self.validateSender(txParams.from, function(err, senderIsValid){ - if (err) return cb(err) - if (!senderIsValid) return cb(new Error(`Unknown address - unable to sign transaction for this address: "${txParams.from}"`)) - cb() - }) -} - -HookedWalletSubprovider.prototype.validateMessage = function(msgParams, cb){ - const self = this - if (msgParams.from === undefined) return cb(new Error(`Undefined address - from address required to sign message.`)) - self.validateSender(msgParams.from, function(err, senderIsValid){ - if (err) return cb(err) - if (!senderIsValid) return cb(new Error(`Unknown address - unable to sign message for this address: "${msgParams.from}"`)) - cb() - }) -} - -HookedWalletSubprovider.prototype.validateSender = function(senderAddress, cb){ - const self = this - // shortcut: undefined sender is invalid - if (senderAddress === undefined) return cb(null, false) - self.getAccounts(function(err, accounts){ - if (err) return cb(err) - var senderIsValid = (accounts.map(toLowerCase).indexOf(senderAddress.toLowerCase()) !== -1) - cb(null, senderIsValid) - }) -} - -HookedWalletSubprovider.prototype.fillInTxExtras = function(txParams, cb){ - const self = this - var address = txParams.from - // console.log('fillInTxExtras - address:', address) - - var reqs = {} - - if (txParams.gasPrice === undefined) { - // console.log("need to get gasprice") - reqs.gasPrice = self.emitPayload.bind(self, { method: 'eth_gasPrice', params: [] }) - } - - if (txParams.nonce === undefined) { - // console.log("need to get nonce") - reqs.nonce = self.emitPayload.bind(self, { method: 'eth_getTransactionCount', params: [address, 'pending'] }) - } - - if (txParams.gas === undefined) { - // console.log("need to get gas") - reqs.gas = estimateGas.bind(null, self.engine, cloneTxParams(txParams)) - } - - async.parallel(reqs, function(err, result) { - if (err) return cb(err) - // console.log('fillInTxExtras - result:', result) - - var res = {} - if (result.gasPrice) res.gasPrice = result.gasPrice.result - if (result.nonce) res.nonce = result.nonce.result - if (result.gas) res.gas = result.gas - - cb(null, extend(res, txParams)) - }) -} - -// util - -// we use this to clean any custom params from the txParams -function cloneTxParams(txParams){ - return { - from: txParams.from, - to: txParams.to, - value: txParams.value, - data: txParams.data, - gas: txParams.gas, - gasPrice: txParams.gasPrice, - nonce: txParams.nonce, - } -} - -function toLowerCase(string){ - return string.toLowerCase() -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/subproviders/ipc.js b/node_modules/web3-provider-engine/subproviders/ipc.js deleted file mode 100644 index d1307d8..0000000 --- a/node_modules/web3-provider-engine/subproviders/ipc.js +++ /dev/null @@ -1,68 +0,0 @@ -const net = require('net'); -const inherits = require('util').inherits -const createPayload = require('../util/create-payload.js') -const Subprovider = require('./subprovider.js') - -module.exports = IpcSource - -inherits(IpcSource, Subprovider) - -function IpcSource(opts) { - const self = this - self.ipcPath = opts.ipcPath || '/root/.ethereum/geth.ipc' -} - - -IpcSource.prototype.handleRequest = function(payload, next, end){ - const self = this - var targetPath = self.ipcPath - var method = payload.method - var params = payload.params - - // new payload with random large id, - // so as not to conflict with other concurrent users - var newPayload = createPayload(payload) - // console.log('------------------ network attempt -----------------') - // console.log(payload) - // console.log('---------------------------------------------') - - if(newPayload == null){ - console.log('no payload'); - end('no payload', null); - }; - - var client = net.connect({path: targetPath}, () => { - client.end(JSON.stringify(payload)); - }) - - - client.on('connection', (d) => { - console.log(d) - }); - - client.on('data', (data) => { - var response = ""; - response += data.toString(); - var res = JSON.parse(response); - end(null, res.result); - }); - - // client.on('end', () => { - // console.log('Socket Received payload'); - // }); - - client.on('error', (error) => { - console.error(error); - end(error, null); - }); - - process.setMaxListeners(Infinity); - - process.on('SIGINT', () => { - console.log("Caught interrupt signal"); - - client.end(); - process.exit(); - }); - -} diff --git a/node_modules/web3-provider-engine/subproviders/nonce-tracker.js b/node_modules/web3-provider-engine/subproviders/nonce-tracker.js deleted file mode 100644 index 63d010a..0000000 --- a/node_modules/web3-provider-engine/subproviders/nonce-tracker.js +++ /dev/null @@ -1,83 +0,0 @@ -const inherits = require('util').inherits -const Transaction = require('ethereumjs-tx') -const ethUtil = require('ethereumjs-util') -const Subprovider = require('./subprovider.js') -const blockTagForPayload = require('../util/rpc-cache-utils').blockTagForPayload - -module.exports = NonceTrackerSubprovider - -// handles the following RPC methods: -// eth_getTransactionCount (pending only) -// observes the following RPC methods: -// eth_sendRawTransaction - - -inherits(NonceTrackerSubprovider, Subprovider) - -function NonceTrackerSubprovider(opts){ - const self = this - - self.nonceCache = {} -} - -NonceTrackerSubprovider.prototype.handleRequest = function(payload, next, end){ - const self = this - - switch(payload.method) { - - case 'eth_getTransactionCount': - var blockTag = blockTagForPayload(payload) - var address = payload.params[0] - var cachedResult = self.nonceCache[address] - // only handle requests against the 'pending' blockTag - if (blockTag === 'pending') { - // has a result - if (cachedResult) { - end(null, cachedResult) - // fallthrough then populate cache - } else { - next(function(err, result, cb){ - if (err) return cb() - if (self.nonceCache[address] === undefined) { - self.nonceCache[address] = result - } - cb() - }) - } - } else { - next() - } - return - - case 'eth_sendRawTransaction': - // allow the request to continue normally - next(function(err, result, cb){ - // only update local nonce if tx was submitted correctly - if (err) return cb() - // parse raw tx - var rawTx = payload.params[0] - var stripped = ethUtil.stripHexPrefix(rawTx) - var rawData = new Buffer(ethUtil.stripHexPrefix(rawTx), 'hex') - var tx = new Transaction(new Buffer(ethUtil.stripHexPrefix(rawTx), 'hex')) - // extract address - var address = '0x'+tx.getSenderAddress().toString('hex') - // extract nonce and increment - var nonce = ethUtil.bufferToInt(tx.nonce) - nonce++ - // hexify and normalize - var hexNonce = nonce.toString(16) - if (hexNonce.length%2) hexNonce = '0'+hexNonce - hexNonce = '0x'+hexNonce - // dont update our record on the nonce until the submit was successful - // update cache - self.nonceCache[address] = hexNonce - cb() - }) - return - - default: - next() - return - - } -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/subproviders/rpc.js b/node_modules/web3-provider-engine/subproviders/rpc.js deleted file mode 100644 index 2c7ab20..0000000 --- a/node_modules/web3-provider-engine/subproviders/rpc.js +++ /dev/null @@ -1,57 +0,0 @@ -const xhr = process.browser ? require('xhr') : require('request') -const inherits = require('util').inherits -const createPayload = require('../util/create-payload.js') -const Subprovider = require('./subprovider.js') - -module.exports = RpcSource - -inherits(RpcSource, Subprovider) - -function RpcSource(opts) { - const self = this - self.rpcUrl = opts.rpcUrl -} - - -RpcSource.prototype.handleRequest = function(payload, next, end){ - const self = this - var targetUrl = self.rpcUrl - var method = payload.method - var params = payload.params - - // new payload with random large id, - // so as not to conflict with other concurrent users - var newPayload = createPayload(payload) - - // console.log('------------------ network attempt -----------------') - // console.log(payload) - // console.log('---------------------------------------------') - - xhr({ - uri: targetUrl, - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - }, - body: JSON.stringify(newPayload), - rejectUnauthorized: false, - }, function(err, res, body) { - if (err) return end(err) - - // parse response into raw account - var data - try { - data = JSON.parse(body) - if (data.error) return end(data.error) - } catch (err) { - console.error(err.stack) - return end(err) - } - - // console.log('network:', payload.method, payload.params, '->', data.result) - - end(null, data.result) - }) - -} diff --git a/node_modules/web3-provider-engine/subproviders/sanitizer.js b/node_modules/web3-provider-engine/subproviders/sanitizer.js deleted file mode 100644 index 274239f..0000000 --- a/node_modules/web3-provider-engine/subproviders/sanitizer.js +++ /dev/null @@ -1,78 +0,0 @@ -/* Sanitization Subprovider - * For Parity compatibility - * removes irregular keys - */ - -const inherits = require('util').inherits -const Subprovider = require('./subprovider.js') -const extend = require('xtend') -const ethUtil = require('ethereumjs-util') - -module.exports = SanitizerSubprovider - -inherits(SanitizerSubprovider, Subprovider) - -function SanitizerSubprovider(opts){ - const self = this -} - -SanitizerSubprovider.prototype.handleRequest = function(payload, next, end){ - var txParams = payload.params[0] - - if (typeof txParams === 'object' && !Array.isArray(txParams)) { - var sanitized = cloneTxParams(txParams) - payload.params[0] = sanitized - } - - next() -} - -// we use this to clean any custom params from the txParams -var permitted = [ - 'from', - 'to', - 'value', - 'data', - 'gas', - 'gasPrice', - 'nonce', - 'fromBlock', - 'toBlock', - 'address', - 'topics', -] - -function cloneTxParams(txParams){ - var sanitized = permitted.reduce(function(copy, permitted) { - if (permitted in txParams) { - if (Array.isArray(txParams[permitted])) { - copy[permitted] = txParams[permitted] - .map(function(item) { - return sanitize(item) - }) - } else { - copy[permitted] = sanitize(txParams[permitted]) - } - } - return copy - }, {}) - - return sanitized -} - -function sanitize(value) { - switch (value) { - case 'latest': - return value - case 'pending': - return value - case 'earliest': - return value - default: - if (typeof value === 'string') { - return ethUtil.addHexPrefix(value.toLowerCase()) - } else { - return value - } - } -} diff --git a/node_modules/web3-provider-engine/subproviders/solc.js b/node_modules/web3-provider-engine/subproviders/solc.js deleted file mode 100644 index 07156d5..0000000 --- a/node_modules/web3-provider-engine/subproviders/solc.js +++ /dev/null @@ -1,59 +0,0 @@ -const inherits = require('util').inherits -const solc = require('solc') -const Subprovider = require('./subprovider.js') - -module.exports = SolcSubprovider - -inherits(SolcSubprovider, Subprovider) - -function SolcSubprovider(opts) { - if (opts && opts.version) { - this.solc = solc.useVersion(opts.version) - } else { - this.solc = solc - } -} - -SolcSubprovider.prototype.handleRequest = function(payload, next, end) { - switch (payload.method) { - case 'eth_getCompilers': - cb(null, [ "solidity" ]) - break - - case 'eth_compileSolidity': - this._compileSolidity(payload, end) - break; - - default: - next() - } -} - -// Conforms to https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_compilesolidity -SolcSubprovider.prototype._compileSolidity = function(payload, end) { - // optimised - var output = this.solc.compile(payload.params[0], 1) - if (!output) { - end('Compilation error') - } else if (output.errors) { - end(output.errors) - } else { - // Select first contract FIXME?? - var contract = output.contracts[Object.keys(output.contracts)[0]]; - - var ret = { - code: contract.bytecode, - info: { - source: payload.params[0], - language: 'Solidity', - languageVersion: '0', - compilerVersion: this.solc.version(), - abiDefinition: JSON.parse(contract.interface), - userDoc: { methods: {} }, - developerDoc: { methods: {} } - } - } - - end(null, ret) - } -} diff --git a/node_modules/web3-provider-engine/subproviders/subprovider.js b/node_modules/web3-provider-engine/subproviders/subprovider.js deleted file mode 100644 index 6d2a1ab..0000000 --- a/node_modules/web3-provider-engine/subproviders/subprovider.js +++ /dev/null @@ -1,27 +0,0 @@ -const createPayload = require('../util/create-payload.js') - -module.exports = SubProvider - -// this is the base class for a subprovider -- mostly helpers - - -function SubProvider() { - -} - -SubProvider.prototype.setEngine = function(engine) { - const self = this - self.engine = engine - engine.on('block', function(block) { - self.currentBlock = block - }) -} - -SubProvider.prototype.handleRequest = function(payload, next, end) { - throw new Error('Subproviders should override `handleRequest`.') -} - -SubProvider.prototype.emitPayload = function(payload, cb){ - const self = this - self.engine.sendAsync(createPayload(payload), cb) -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/subproviders/vm.js b/node_modules/web3-provider-engine/subproviders/vm.js deleted file mode 100644 index 92f3301..0000000 --- a/node_modules/web3-provider-engine/subproviders/vm.js +++ /dev/null @@ -1,308 +0,0 @@ -const async = require('async') -const inherits = require('util').inherits -const Stoplight = require('../util/stoplight.js') -const VM = require('ethereumjs-vm') -const Block = require('ethereumjs-block') -const Account = require('ethereumjs-account') -const FakeTransaction = require('ethereumjs-tx/fake.js') -const FakeMerklePatriciaTree = require('fake-merkle-patricia-tree') -const ethUtil = require('ethereumjs-util') -const createPayload = require('../util/create-payload.js') -const Subprovider = require('./subprovider.js') - -module.exports = VmSubprovider - -// handles the following RPC methods: -// eth_call -// eth_estimateGas - - -inherits(VmSubprovider, Subprovider) - -function VmSubprovider(opts){ - const self = this - self.opts = opts || {}; - self.methods = ['eth_call', 'eth_estimateGas'] - // set initialization blocker - self._ready = new Stoplight() -} - -// setup a block listener on 'setEngine' -VmSubprovider.prototype.setEngine = function(engine) { - const self = this - Subprovider.prototype.setEngine.call(self, engine) - // unblock initialization after first block - engine.once('block', function(block) { - self._ready.go() - }) -} - -VmSubprovider.prototype.handleRequest = function(payload, next, end) { - if (this.methods.indexOf(payload.method) < 0) { - return next() - } - - const self = this - // console.log('VmSubprovider - runVm init', arguments) - self.runVm(payload, function(err, results){ - // console.log('VmSubprovider - runVm return', arguments) - if (err) return end(err) - - switch (payload.method) { - - case 'eth_call': - var result = '0x' - if (!results.error && results.vm.return) { - // console.log(results.vm.return.toString('hex')) - result = ethUtil.addHexPrefix(results.vm.return.toString('hex')) - } - return end(null, result) - - case 'eth_estimateGas': - // since eth_estimateGas is just eth_call with - // a different part of the results, - // I considered transforming request to eth_call - // to reduce the cache area, but we'd need to store - // the full vm result somewhere, instead of just - // the return value. so instead we just run it again. - - var result = ethUtil.addHexPrefix(results.gasUsed.toString('hex')) - return end(null, result) - - } - }) -} - -VmSubprovider.prototype.runVm = function(payload, cb){ - const self = this - - var blockData = self.currentBlock - var block = blockFromBlockData(blockData) - var blockNumber = ethUtil.addHexPrefix(blockData.number.toString('hex')) - - // create vm with state lookup intercepted - var vm = self.vm = new VM(null, null, { - enableHomestead: true - }) - - if (self.opts.debug) { - vm.on('step', function (data) { - console.log(data.opcode.name) - }) - } - - vm.stateManager._lookupStorageTrie = self._createAccountStorageTrie.bind(self, blockNumber) - vm.stateManager.cache._lookupAccount = self._fetchAccount.bind(self, blockNumber) - var codeStore = new FallbackAsyncStore(function(address, cb){ self._fetchAccountCode(address, blockNumber, cb) }) - vm.stateManager.getContractCode = codeStore.get.bind(codeStore) - vm.stateManager.setContractCode = codeStore.set.bind(codeStore) - // create tx - var txParams = payload.params[0] - // console.log('params:', payload.params) - - var tx = new FakeTransaction({ - to: txParams.to ? ethUtil.addHexPrefix(txParams.to) : undefined, - from: txParams.from ? ethUtil.addHexPrefix(txParams.from) : undefined, - value: txParams.value ? ethUtil.addHexPrefix(txParams.value) : undefined, - data: txParams.data ? ethUtil.addHexPrefix(txParams.data) : undefined, - gasLimit: txParams.gas ? ethUtil.addHexPrefix(txParams.gas) : block.header.gasLimit, - gasPrice: txParams.gasPrice ? ethUtil.addHexPrefix(txParams.gasPrice) : undefined, - nonce: txParams.nonce ? ethUtil.addHexPrefix(txParams.nonce) : undefined, - }) - - vm.runTx({ - tx: tx, - block: block, - skipNonce: true, - skipBalance: true - }, function(err, results) { - if (err) return cb(err) - if (results.error != null) { - return cb(new Error("VM error: " + results.error)) - } - if (results.vm && results.vm.exception !== 1) { - return cb(new Error("VM Exception while executing " + payload.method + ": " + results.vm.exceptionError)) - } - - cb(null, results) - }) - -} - -VmSubprovider.prototype._createAccountStorageTrie = function(blockNumber, address, cb){ - const self = this - var addressHex = ethUtil.addHexPrefix(address.toString('hex')) - var storageTrie = new FallbackStorageTrie({ - fetchStorage: fetchStorage, - }) - cb(null, storageTrie) - - function fetchStorage(key, cb){ - self._fetchAccountStorage(addressHex, key, blockNumber, cb) - } -} - -VmSubprovider.prototype._fetchAccount = function(blockNumber, address, cb){ - const self = this - var addressHex = ethUtil.addHexPrefix(address.toString('hex')) - async.parallel({ - nonce: self._fetchAccountNonce.bind(self, addressHex, blockNumber), - balance: self._fetchAccountBalance.bind(self, addressHex, blockNumber), - }, function(err, results){ - if (err) return cb(err) - - results._exists = results.nonce !== '0x0' || results.balance != '0x0' || results._code != '0x' - // console.log('fetch account results:', results) - var account = new Account(results) - // needs to be anything but the default (ethUtil.SHA3_NULL) - account.codeHash = new Buffer('0000000000000000000000000000000000000000000000000000000000000000', 'hex') - cb(null, account) - }) - -} - -VmSubprovider.prototype._fetchAccountStorage = function(address, key, blockNumber, cb){ - const self = this - self.emitPayload({ method: 'eth_getStorageAt', params: [address, key, blockNumber] }, function(err, results){ - if (err) return cb(err) - if (results.error) return cb(results.error.message) - - cb(null, results.result) - }) -} - -VmSubprovider.prototype._fetchAccountBalance = function(address, blockNumber, cb){ - const self = this - self.emitPayload({ method: 'eth_getBalance', params: [address, blockNumber] }, function(err, results){ - if (err) return cb(err) - if (results.error) return cb(results.error.message) - cb(null, results.result) - }) -} - -VmSubprovider.prototype._fetchAccountNonce = function(address, blockNumber, cb){ - const self = this - self.emitPayload({ method: 'eth_getTransactionCount', params: [address, blockNumber] }, function(err, results){ - if (err) return cb(err) - if (results.error) return cb(results.error.message); - cb(null, results.result) - }) -} - -VmSubprovider.prototype._fetchAccountCode = function(address, blockNumber, cb){ - const self = this - self.emitPayload({ method: 'eth_getCode', params: [address, blockNumber] }, function(err, results){ - if (err) return cb(err) - if (results.error) return cb(results.error.message); - cb(null, results.result) - }) -} - - -// -// FallbackStorageTrie -// -// is a FakeMerklePatriciaTree that will let lookups -// fallback to the network. writes shadow the network. -// doesn't bother with a stateRoot -// - -inherits(FallbackStorageTrie, FakeMerklePatriciaTree) - -function FallbackStorageTrie(opts) { - const self = this - FakeMerklePatriciaTree.call(self) - self._fetchStorage = opts.fetchStorage -} - -FallbackStorageTrie.prototype.get = function(key, cb){ - const self = this - var _super = FakeMerklePatriciaTree.prototype.get.bind(self) - - _super(key, function(err, value){ - if (err) return cb(err) - if (value) return cb(null, value) - // if value not in tree, try network - var keyHex = key.toString('hex') - self._fetchStorage(keyHex, function(err, rawValue){ - if (err) return cb(err) - var value = ethUtil.toBuffer(rawValue) - value = ethUtil.unpad(value) - var encodedValue = ethUtil.rlp.encode(value) - cb(null, encodedValue) - }) - }) -} - -// -// FallbackAsyncStore -// -// is an async key-value store that will let lookups -// fallback to the network. puts are not sent. -// - -function FallbackAsyncStore(fetchFn){ - // console.log('FallbackAsyncStore - new') - const self = this - self.fetch = fetchFn - self.cache = {} -} - -FallbackAsyncStore.prototype.get = function(address, cb){ - // console.log('FallbackAsyncStore - get', arguments) - const self = this - var addressHex = '0x'+address.toString('hex') - var code = self.cache[addressHex] - if (code !== undefined) { - cb(null, code) - } else { - // console.log('FallbackAsyncStore - fetch init') - self.fetch(addressHex, function(err, value){ - // console.log('FallbackAsyncStore - fetch return', arguments) - if (err) return cb(err) - value = ethUtil.toBuffer(value); - self.cache[addressHex] = value - cb(null, value) - }) - } -} - -FallbackAsyncStore.prototype.set = function(address, code, cb){ - // console.log('FallbackAsyncStore - set', arguments) - const self = this - var addressHex = '0x'+address.toString('hex') - self.cache[addressHex] = code - cb() -} - -// util -const NOT_ENOUGH_FUNDS = 'sender doesn\'t have enough funds to send tx.' -const WRONG_NONCE = 'the tx doesn\'t have the correct nonce. account has nonce of:' -const VM_INTERNAL_ERRORS = [NOT_ENOUGH_FUNDS, WRONG_NONCE] -function isNormalVmError(message){ - var matchedErrors = VM_INTERNAL_ERRORS.filter(function(errorPattern){ - var submessage = message.slice(0,errorPattern.length) - return submessage === errorPattern - }) - return matchedErrors.length === 1 -} - -function blockFromBlockData(blockData){ - var block = new Block() - // block.header.hash = ethUtil.addHexPrefix(blockData.hash.toString('hex')) - - block.header.parentHash = blockData.parentHash - block.header.uncleHash = blockData.sha3Uncles - block.header.coinbase = blockData.miner - block.header.stateRoot = blockData.stateRoot - block.header.transactionTrie = blockData.transactionsRoot - block.header.receiptTrie = blockData.receiptRoot - block.header.bloom = blockData.logsBloom - block.header.difficulty = blockData.difficulty - block.header.number = blockData.number - block.header.gasLimit = blockData.gasLimit - block.header.gasUsed = blockData.gasUsed - block.header.timestamp = blockData.timestamp - block.header.extraData = blockData.extraData - return block -} diff --git a/node_modules/web3-provider-engine/subproviders/wallet.js b/node_modules/web3-provider-engine/subproviders/wallet.js deleted file mode 100644 index 9ede833..0000000 --- a/node_modules/web3-provider-engine/subproviders/wallet.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict' - -const inherits = require('util').inherits -const HookedWalletEthTxSubprovider = require('./hooked-wallet-ethtx.js') - -module.exports = WalletSubprovider - -inherits(WalletSubprovider, HookedWalletEthTxSubprovider) - -function WalletSubprovider (wallet, opts) { - opts.getAccounts = function (cb) { - cb(null, [ wallet.getAddressString() ]) - } - - opts.getPrivateKey = function (address, cb) { - if (address !== wallet.getAddressString()) { - return cb('Account not found') - } - - cb(null, wallet.getPrivateKey()) - } - - WalletSubprovider.super_.call(this, opts) -} diff --git a/node_modules/web3-provider-engine/subproviders/web3.js b/node_modules/web3-provider-engine/subproviders/web3.js deleted file mode 100644 index 6ca7a7d..0000000 --- a/node_modules/web3-provider-engine/subproviders/web3.js +++ /dev/null @@ -1,18 +0,0 @@ -const inherits = require('util').inherits -const Subprovider = require('./subprovider.js') - -module.exports = Web3Subprovider - -inherits(Web3Subprovider, Subprovider) - -function Web3Subprovider(provider){ - this.provider = provider; -} - -Web3Subprovider.prototype.handleRequest = function(payload, next, end){ - this.provider.sendAsync(payload, function(err, response) { - if (err != null) return end(err); - if (response.error != null) return end(new Error(response.error.message)); - end(null, response.result); - }); -} diff --git a/node_modules/web3-provider-engine/subproviders/whitelist.js b/node_modules/web3-provider-engine/subproviders/whitelist.js deleted file mode 100644 index c514284..0000000 --- a/node_modules/web3-provider-engine/subproviders/whitelist.js +++ /dev/null @@ -1,43 +0,0 @@ -const inherits = require('util').inherits -const Subprovider = require('./subprovider.js') - -module.exports = WhitelistProvider - -inherits(WhitelistProvider, Subprovider) - -function WhitelistProvider(methods){ - this.methods = methods; - - if (this.methods == null) { - this.methods = [ - 'eth_gasPrice', - 'eth_blockNumber', - 'eth_getBalance', - 'eth_getBlockByHash', - 'eth_getBlockByNumber', - 'eth_getBlockTransactionCountByHash', - 'eth_getBlockTransactionCountByNumber', - 'eth_getCode', - 'eth_getStorageAt', - 'eth_getTransactionByBlockHashAndIndex', - 'eth_getTransactionByBlockNumberAndIndex', - 'eth_getTransactionByHash', - 'eth_getTransactionCount', - 'eth_getTransactionReceipt', - 'eth_getUncleByBlockHashAndIndex', - 'eth_getUncleByBlockNumberAndIndex', - 'eth_getUncleCountByBlockHash', - 'eth_getUncleCountByBlockNumber', - 'eth_sendRawTransaction', - 'eth_getLogs' - ]; - } -} - -WhitelistProvider.prototype.handleRequest = function(payload, next, end){ - if (this.methods.indexOf(payload.method) >= 0) { - next(); - } else { - end(new Error("Method '" + payload.method + "' not allowed in whitelist.")); - } -} diff --git a/node_modules/web3-provider-engine/test/basic.js b/node_modules/web3-provider-engine/test/basic.js deleted file mode 100644 index 30ca394..0000000 --- a/node_modules/web3-provider-engine/test/basic.js +++ /dev/null @@ -1,45 +0,0 @@ -const test = require('tape') -const ProviderEngine = require('../index.js') -const PassthroughProvider = require('./util/passthrough.js') -const FixtureProvider = require('../subproviders/fixture.js') -const TestBlockProvider = require('./util/block.js') -const createPayload = require('../util/create-payload.js') -const injectMetrics = require('./util/inject-metrics') - - -test('fallthrough test', function(t){ - t.plan(8) - - // handle nothing - var providerA = injectMetrics(new PassthroughProvider()) - // handle "test_rpc" - var providerB = injectMetrics(new FixtureProvider({ - test_rpc: true, - })) - // handle block requests - var providerC = injectMetrics(new TestBlockProvider()) - - var engine = new ProviderEngine() - engine.addProvider(providerA) - engine.addProvider(providerB) - engine.addProvider(providerC) - - engine.start() - engine.sendAsync(createPayload({ method: 'test_rpc' }), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - t.equal(providerA.getWitnessed('test_rpc').length, 1, 'providerA did see "test_rpc"') - t.equal(providerA.getHandled('test_rpc').length, 0, 'providerA did NOT handle "test_rpc"') - - t.equal(providerB.getWitnessed('test_rpc').length, 1, 'providerB did see "test_rpc"') - t.equal(providerB.getHandled('test_rpc').length, 1, 'providerB did handle "test_rpc"') - - t.equal(providerC.getWitnessed('test_rpc').length, 0, 'providerC did NOT see "test_rpc"') - t.equal(providerC.getHandled('test_rpc').length, 0, 'providerC did NOT handle "test_rpc"') - - engine.stop() - t.end() - }) - -}) diff --git a/node_modules/web3-provider-engine/test/cache.js b/node_modules/web3-provider-engine/test/cache.js deleted file mode 100644 index 1efd99c..0000000 --- a/node_modules/web3-provider-engine/test/cache.js +++ /dev/null @@ -1,205 +0,0 @@ -const test = require('tape') -const ProviderEngine = require('../index.js') -const FixtureProvider = require('../subproviders/fixture.js') -const CacheProvider = require('../subproviders/cache.js') -const TestBlockProvider = require('./util/block.js') -const createPayload = require('../util/create-payload.js') -const injectMetrics = require('./util/inject-metrics') - -// skip cache - -cacheTest('skipCache - true', { - method: 'eth_getBalance', - skipCache: true, -}, false) - -cacheTest('skipCache - false', { - method: 'eth_getBalance', - skipCache: false, -}, true) - -// block tags - -cacheTest('getBalance + undefined blockTag', { - method: 'eth_getBalance', - params: ['0x1234'], -}, true) - -cacheTest('getBalance + latest blockTag', { - method: 'eth_getBalance', - params: ['0x1234', 'latest'], -}, true) - -cacheTest('getBalance + pending blockTag', { - method: 'eth_getBalance', - params: ['0x1234', 'pending'], -}, false) - -// tx by hash - -cacheTest('getTransactionByHash for transaction that doesn\'t exist', { - method: 'eth_getTransactionByHash', - params: ['0x00000000000000000000000000000000000000000000000000deadbeefcafe00'], -}, false) - -cacheTest('getTransactionByHash for transaction that\'s pending', { - method: 'eth_getTransactionByHash', - params: ['0x00000000000000000000000000000000000000000000000000deadbeefcafe01'], -}, false) - -cacheTest('getTransactionByHash for mined transaction', { - method: 'eth_getTransactionByHash', - params: ['0x00000000000000000000000000000000000000000000000000deadbeefcafe02'], -}, true) - -// code - -cacheTest('getCode for latest block, then for earliest block, should not return cached response on second request', [{ - method: 'eth_getCode', - params: ['0x1234', 'latest'], -}, { - method: 'eth_getCode', - params: ['0x1234', 'earliest'], -}], false) - -cacheTest('getCode for a specific block, then for the one before it, should not return cached response on second request', [{ - method: 'eth_getCode', - params: ['0x1234', '0x3'], -}, { - method: 'eth_getCode', - params: ['0x1234', '0x2'], -}], false) - -cacheTest('getCode for a specific block, then the one after it, should return cached response on second request', [{ - method: 'eth_getCode', - params: ['0x1234', '0x2'], -}, { - method: 'eth_getCode', - params: ['0x1234', '0x3'], -}], true) - -cacheTest('getCode for an unspecified block, then for the latest, should return cached response on second request', [{ - method: 'eth_getCode', - params: ['0x1234'], -}, { - method: 'eth_getCode', - params: ['0x1234', 'latest'], -}], true) - -// test helper for caching -// 1. Sets up caching and data provider -// 2. Performs first request -// 3. Performs second request -// 4. checks if cache hit or missed - -function cacheTest(label, payloads, shouldHitCacheOnSecondRequest){ - - test('cache - '+label, function(t){ - t.plan(12) - - // cache layer - var cacheProvider = injectMetrics(new CacheProvider()) - // handle balance - var dataProvider = injectMetrics(new FixtureProvider({ - eth_getBalance: '0xdeadbeef', - eth_getCode: '6060604052600560005560408060156000396000f3606060405260e060020a60003504633fa4f245811460245780635524107714602c575b005b603660005481565b6004356000556022565b6060908152602090f3', - eth_getTransactionByHash: function(payload, next, end) { - // represents a pending tx - if (payload.params[0] === '0x00000000000000000000000000000000000000000000000000deadbeefcafe00') { - end(null, null) - } else if (payload.params[0] === '0x00000000000000000000000000000000000000000000000000deadbeefcafe01') { - end(null, { - hash: '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - nonce: '0xd', - blockHash: null, - blockNumber: null, - transactionIndex: null, - from: '0xb1cc05ab12928297911695b55ee78c1188f8ef91', - to: '0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98', - value: '0xddb66b2addf4800', - gas: '0x5622', - gasPrice: '0xba43b7400', - input: '0x', - }) - } else { - end(null, { - hash: payload.params[0], - nonce: '0xd', - blockHash: '0x1', - blockNumber: '0x1', - transactionIndex: '0x0', - from: '0xb1cc05ab12928297911695b55ee78c1188f8ef91', - to: '0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98', - value: '0xddb66b2addf4800', - gas: '0x5622', - gasPrice: '0xba43b7400', - input: '0x', - }) - } - } - })) - // handle dummy block - var blockProvider = injectMetrics(new TestBlockProvider()) - - var engine = new ProviderEngine() - engine.addProvider(cacheProvider) - engine.addProvider(dataProvider) - engine.addProvider(blockProvider) - - engine.start() - - cacheCheck(t, engine, cacheProvider, dataProvider, payloads, function(err, response) { - engine.stop() - t.end() - }) - - function cacheCheck(t, engine, cacheProvider, dataProvider, payloads, cb) { - if (!Array.isArray(payloads)) { - payloads = [payloads, payloads] - } - - var method = payloads[0].method - requestTwice(payloads, function(err, response){ - // first request - t.ifError(err || response.error && response.error.message, 'did not error') - t.ok(response, 'has response') - - t.equal(cacheProvider.getWitnessed(method).length, 1, 'cacheProvider did see "'+method+'"') - t.equal(cacheProvider.getHandled(method).length, 0, 'cacheProvider did NOT handle "'+method+'"') - - t.equal(dataProvider.getWitnessed(method).length, 1, 'dataProvider did see "'+method+'"') - t.equal(dataProvider.getHandled(method).length, 1, 'dataProvider did handle "'+method+'"') - - }, function(err, response){ - // second request - t.ifError(err || response.error && response.error.message, 'did not error') - t.ok(response, 'has response') - - if (shouldHitCacheOnSecondRequest) { - t.equal(cacheProvider.getWitnessed(method).length, 2, 'cacheProvider did see "'+method+'"') - t.equal(cacheProvider.getHandled(method).length, 1, 'cacheProvider did handle "'+method+'"') - - t.equal(dataProvider.getWitnessed(method).length, 1, 'dataProvider did NOT see "'+method+'"') - t.equal(dataProvider.getHandled(method).length, 1, 'dataProvider did NOT handle "'+method+'"') - } else { - t.equal(cacheProvider.getWitnessed(method).length, 2, 'cacheProvider did see "'+method+'"') - t.equal(cacheProvider.getHandled(method).length, 0, 'cacheProvider did handle "'+method+'"') - - t.equal(dataProvider.getWitnessed(method).length, 2, 'dataProvider did NOT see "'+method+'"') - t.equal(dataProvider.getHandled(method).length, 2, 'dataProvider did NOT handle "'+method+'"') - } - - cb() - }) - } - - function requestTwice(payloads, afterFirst, afterSecond){ - engine.sendAsync(createPayload(payloads[0]), function(err, result){ - afterFirst(err, result) - engine.sendAsync(createPayload(payloads[1]), afterSecond) - }) - } - - }) - -} diff --git a/node_modules/web3-provider-engine/test/filters.js b/node_modules/web3-provider-engine/test/filters.js deleted file mode 100644 index bb32518..0000000 --- a/node_modules/web3-provider-engine/test/filters.js +++ /dev/null @@ -1,269 +0,0 @@ -const test = require('tape') -const ProviderEngine = require('../index.js') -const FilterProvider = require('../subproviders/filters.js') -const TestBlockProvider = require('./util/block.js') -const createPayload = require('../util/create-payload.js') -const injectMetrics = require('./util/inject-metrics') - - -filterTest('basic block filter', { method: 'eth_newBlockFilter' }, - function afterInstall(t, testMeta, response, cb){ - var block = testMeta.block = testMeta.blockProvider.nextBlock() - cb() - }, - function filterChangesOne(t, testMeta, response, cb){ - var results = response.result - var returnedBlockHash = response.result[0] - t.equal(results.length, 1, 'correct number of results') - t.equal(returnedBlockHash, testMeta.block.hash, 'correct result') - cb() - }, - function filterChangesTwo(t, testMeta, response, cb){ - var results = response.result - t.equal(results.length, 0, 'correct number of results') - cb() - } -) - -filterTest('log filter - basic', { - method: 'eth_newFilter', - params: [{ - topics: ['0x00000000000000000000000000000000000000000000000000deadbeefcafe01'] - }], - }, - function afterInstall(t, testMeta, response, cb){ - testMeta.tx = testMeta.blockProvider.addTx({ - topics: ['0x00000000000000000000000000000000000000000000000000deadbeefcafe01'] - }) - testMeta.badTx = testMeta.blockProvider.addTx({ - topics: ['0x00000000000000000000000000000000000000000000000000deadbeefcafe02'] - }) - var block = testMeta.block = testMeta.blockProvider.nextBlock() - cb() - }, - function filterChangesOne(t, testMeta, response, cb){ - var results = response.result - var matchedTx = response.result[0] - t.equal(results.length, 1, 'correct number of results') - t.equal(matchedTx, testMeta.tx, 'correct result') - cb() - }, - function filterChangesTwo(t, testMeta, response, cb){ - var results = response.result - t.equal(results.length, 0, 'correct number of results') - cb() - } -) - -filterTest('log filter - and logic', { - method: 'eth_newFilter', - params: [{ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - ], - }], - }, - function afterInstall(t, testMeta, response, cb){ - testMeta.tx = testMeta.blockProvider.addTx({ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - ], - }) - testMeta.badTx = testMeta.blockProvider.addTx({ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - ], - }) - var block = testMeta.block = testMeta.blockProvider.nextBlock() - cb() - }, - function filterChangesOne(t, testMeta, response, cb){ - var results = response.result - var matchedTx = response.result[0] - t.equal(results.length, 1, 'correct number of results') - t.equal(matchedTx, testMeta.tx, 'correct result') - cb() - }, - function filterChangesTwo(t, testMeta, response, cb){ - var results = response.result - t.equal(results.length, 0, 'correct number of results') - cb() - } -) - -filterTest('log filter - or logic', { - method: 'eth_newFilter', - params: [{ - topics: [ - [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - ], - ], - }], - }, - function afterInstall(t, testMeta, response, cb){ - testMeta.tx1 = testMeta.blockProvider.addTx({ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - ], - }) - testMeta.tx2 = testMeta.blockProvider.addTx({ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - ], - }) - testMeta.badTx = testMeta.blockProvider.addTx({ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe03', - ], - }) - var block = testMeta.block = testMeta.blockProvider.nextBlock() - cb() - }, - function filterChangesOne(t, testMeta, response, cb){ - var results = response.result - var matchedTx1 = response.result[0] - var matchedTx2 = response.result[1] - t.equal(results.length, 2, 'correct number of results') - t.equal(matchedTx1, testMeta.tx1, 'correct result') - t.equal(matchedTx2, testMeta.tx2, 'correct result') - cb() - }, - function filterChangesTwo(t, testMeta, response, cb){ - var results = response.result - t.equal(results.length, 0, 'correct number of results') - cb() - } -) - -filterTest('log filter - wildcard logic', { - method: 'eth_newFilter', - params: [{ - topics: [ - null, - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - ], - }], - }, - function afterInstall(t, testMeta, response, cb){ - testMeta.tx1 = testMeta.blockProvider.addTx({ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - ], - }) - testMeta.tx2 = testMeta.blockProvider.addTx({ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - '0x00000000000000000000000000000000000000000000000000deadbeefcafe02', - ], - }) - testMeta.badTx = testMeta.blockProvider.addTx({ - topics: [ - '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - '0x00000000000000000000000000000000000000000000000000deadbeefcafe01', - ], - }) - var block = testMeta.block = testMeta.blockProvider.nextBlock() - cb() - }, - function filterChangesOne(t, testMeta, response, cb){ - var results = response.result - var matchedTx1 = response.result[0] - var matchedTx2 = response.result[1] - t.equal(results.length, 2, 'correct number of results') - t.equal(matchedTx1, testMeta.tx1, 'correct result') - t.equal(matchedTx2, testMeta.tx2, 'correct result') - cb() - }, - function filterChangesTwo(t, testMeta, response, cb){ - var results = response.result - t.equal(results.length, 0, 'correct number of results') - cb() - } -) - -// util - -function filterTest(label, filterPayload, afterInstall, filterChangesOne, filterChangesTwo){ - test('filters - '+label, function(t){ - // t.plan(8) - - // install filter - // new block - // check filter - - var testMeta = {} - - // handle "test_rpc" - var filterProvider = testMeta.filterProvider = injectMetrics(new FilterProvider()) - // handle block requests - var blockProvider = testMeta.blockProvider = injectMetrics(new TestBlockProvider()) - - var engine = testMeta.engine = new ProviderEngine({ - pollingInterval: 20, - pollingShouldUnref: false, - }) - engine.addProvider(filterProvider) - engine.addProvider(blockProvider) - engine.once('block', startTest) - engine.start() - - function startTest(){ - // install block filter - engine.sendAsync(createPayload(filterPayload), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - var method = filterPayload.method - - t.equal(filterProvider.getWitnessed(method).length, 1, 'filterProvider did see "'+method+'"') - t.equal(filterProvider.getHandled(method).length, 1, 'filterProvider did handle "'+method+'"') - - var filterId = testMeta.filterId = response.result - - afterInstall(t, testMeta, response, function(err){ - t.ifError(err, 'did not error') - - engine.once('block', continueTest) - }) - }) - } - - function continueTest(filterId){ - var filterId = testMeta.filterId - // after filter check one - engine.sendAsync(createPayload({ method: 'eth_getFilterChanges', params: [filterId] }), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - t.equal(filterProvider.getWitnessed('eth_getFilterChanges').length, 1, 'filterProvider did see "eth_getFilterChanges"') - t.equal(filterProvider.getHandled('eth_getFilterChanges').length, 1, 'filterProvider did handle "eth_getFilterChanges"') - - filterChangesOne(t, testMeta, response, function(err){ - t.ifError(err, 'did not error') - - // after filter check two - engine.sendAsync(createPayload({ method: 'eth_getFilterChanges', params: [filterId] }), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - t.equal(filterProvider.getWitnessed('eth_getFilterChanges').length, 2, 'filterProvider did see "eth_getFilterChanges"') - t.equal(filterProvider.getHandled('eth_getFilterChanges').length, 2, 'filterProvider did handle "eth_getFilterChanges"') - - filterChangesTwo(t, testMeta, response, function(err){ - t.ifError(err, 'did not error') - engine.stop() - t.end() - }) - }) - }) - }) - } - - }) -} diff --git a/node_modules/web3-provider-engine/test/index.js b/node_modules/web3-provider-engine/test/index.js deleted file mode 100644 index 7814657..0000000 --- a/node_modules/web3-provider-engine/test/index.js +++ /dev/null @@ -1,6 +0,0 @@ -require('./basic') -require('./cache') -require('./filters') -require('./solc') -require('./wallet') -require('./subproviders/sanitizer') diff --git a/node_modules/web3-provider-engine/test/nonce.js b/node_modules/web3-provider-engine/test/nonce.js deleted file mode 100644 index 090615d..0000000 --- a/node_modules/web3-provider-engine/test/nonce.js +++ /dev/null @@ -1,174 +0,0 @@ -const test = require('tape') -const Transaction = require('ethereumjs-tx') -const ethUtil = require('ethereumjs-util') -const ProviderEngine = require('../index.js') -const FixtureProvider = require('../subproviders/fixture.js') -const NonceTracker = require('../subproviders/nonce-tracker.js') -const HookedWalletProvider = require('../subproviders/hooked-wallet.js') -const TestBlockProvider = require('./util/block.js') -const createPayload = require('../util/create-payload.js') -const injectMetrics = require('./util/inject-metrics') - - -test('basic nonce tracking', function(t){ - t.plan(11) - - var privateKey = new Buffer('cccd8f4d88de61f92f3747e4a9604a0395e6ad5138add4bec4a2ddf231ee24f9', 'hex') - var address = new Buffer('1234362ef32bcd26d3dd18ca749378213625ba0b', 'hex') - var addressHex = '0x'+address.toString('hex') - - // sign all tx's - var providerA = injectMetrics(new HookedWalletProvider({ - signTransaction: function(txParams, cb){ - var tx = new Transaction(txParams) - tx.sign(privateKey) - var rawTx = '0x'+tx.serialize().toString('hex') - cb(null, rawTx) - }, - })) - - // handle nonce requests - var providerB = injectMetrics(new NonceTracker()) - // handle all bottom requests - var providerC = injectMetrics(new FixtureProvider({ - eth_gasPrice: '0x1234', - eth_getTransactionCount: '0x00', - eth_sendRawTransaction: function(payload, next, done){ - var rawTx = ethUtil.toBuffer(payload.params[0]) - var tx = new Transaction(rawTx) - var hash = '0x'+tx.hash().toString('hex') - done(null, hash) - }, - })) - // handle block requests - var providerD = injectMetrics(new TestBlockProvider()) - - var engine = new ProviderEngine() - engine.addProvider(providerA) - engine.addProvider(providerB) - engine.addProvider(providerC) - engine.addProvider(providerD) - - var txPayload = { - method: 'eth_sendTransaction', - params: [{ - from: addressHex, - to: addressHex, - value: '0x01', - gas: '0x1234567890', - }] - } - - engine.start() - engine.sendAsync(createPayload(txPayload), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - // tx nonce - t.equal(providerB.getWitnessed('eth_getTransactionCount').length, 1, 'providerB did see "eth_getTransactionCount"') - t.equal(providerB.getHandled('eth_getTransactionCount').length, 0, 'providerB did NOT handle "eth_getTransactionCount"') - t.equal(providerC.getWitnessed('eth_getTransactionCount').length, 1, 'providerC did see "eth_getTransactionCount"') - t.equal(providerC.getHandled('eth_getTransactionCount').length, 1, 'providerC did handle "eth_getTransactionCount"') - // send raw tx - t.equal(providerC.getWitnessed('eth_sendRawTransaction').length, 1, 'providerC did see "eth_sendRawTransaction"') - t.equal(providerC.getHandled('eth_sendRawTransaction').length, 1, 'providerC did handle "eth_sendRawTransaction"') - - engine.sendAsync(createPayload({ - method: 'eth_getTransactionCount', - params: [addressHex, 'pending'], - }), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - // tx nonce did increment - t.equal(response.result, '0x01', 'the provider gives the correct pending nonce') - - engine.stop() - t.end() - - }) - - }) - -}) - - -test('nonce tracking - on error', function(t){ - t.plan(11) - - var privateKey = new Buffer('cccd8f4d88de61f92f3747e4a9604a0395e6ad5138add4bec4a2ddf231ee24f9', 'hex') - var address = new Buffer('1234362ef32bcd26d3dd18ca749378213625ba0b', 'hex') - var addressHex = '0x'+address.toString('hex') - - // sign all tx's - var providerA = injectMetrics(new HookedWalletProvider({ - signTransaction: function(txParams, cb){ - var tx = new Transaction(txParams) - tx.sign(privateKey) - var rawTx = '0x'+tx.serialize().toString('hex') - cb(null, rawTx) - }, - })) - - // handle nonce requests - var providerB = injectMetrics(new NonceTracker()) - // handle all bottom requests - var providerC = injectMetrics(new FixtureProvider({ - eth_gasPrice: '0x1234', - eth_getTransactionCount: '0x00', - eth_sendRawTransaction: function(payload, next, done){ - done(new Error('Always fail.')) - }, - })) - // handle block requests - var providerD = injectMetrics(new TestBlockProvider()) - - var engine = new ProviderEngine() - engine.addProvider(providerA) - engine.addProvider(providerB) - engine.addProvider(providerC) - engine.addProvider(providerD) - - var txPayload = { - method: 'eth_sendTransaction', - params: [{ - from: addressHex, - to: addressHex, - value: '0x01', - gas: '0x1234567890', - }] - } - - engine.start() - engine.sendAsync(createPayload(txPayload), function(err, response){ - t.ok(err, 'did not error') - t.ok(response.error, 'has response') - - // tx nonce - t.equal(providerB.getWitnessed('eth_getTransactionCount').length, 1, 'providerB did see "eth_getTransactionCount"') - t.equal(providerB.getHandled('eth_getTransactionCount').length, 0, 'providerB did NOT handle "eth_getTransactionCount"') - t.equal(providerC.getWitnessed('eth_getTransactionCount').length, 1, 'providerC did see "eth_getTransactionCount"') - t.equal(providerC.getHandled('eth_getTransactionCount').length, 1, 'providerC did handle "eth_getTransactionCount"') - - // send raw tx - t.equal(providerC.getWitnessed('eth_sendRawTransaction').length, 1, 'providerC did see "eth_sendRawTransaction"') - t.equal(providerC.getHandled('eth_sendRawTransaction').length, 1, 'providerC did handle "eth_sendRawTransaction"') - - engine.sendAsync(createPayload({ - method: 'eth_getTransactionCount', - params: [addressHex, 'pending'], - }), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - // tx nonce did NOT increment - t.equal(response.result, '0x00', 'the provider gives the correct pending nonce') - - engine.stop() - t.end() - - }) - - }) - -}) diff --git a/node_modules/web3-provider-engine/test/solc.js b/node_modules/web3-provider-engine/test/solc.js deleted file mode 100644 index 99ab596..0000000 --- a/node_modules/web3-provider-engine/test/solc.js +++ /dev/null @@ -1,45 +0,0 @@ -const test = require('tape') -const ProviderEngine = require('../index.js') -const PassthroughProvider = require('./util/passthrough.js') -const FixtureProvider = require('../subproviders/fixture.js') -const SolcProvider = require('../subproviders/solc.js') -const TestBlockProvider = require('./util/block.js') -const createPayload = require('../util/create-payload.js') -const injectMetrics = require('./util/inject-metrics') -const solc = require('solc') - -test('solc test', function(t){ - t.plan(10) - - // handle solc - var providerA = injectMetrics(new SolcProvider()) - // handle block requests - var providerB = injectMetrics(new TestBlockProvider()) - - var engine = new ProviderEngine() - engine.addProvider(providerA) - engine.addProvider(providerB) - - var contractSource = 'pragma solidity ^0.4.2; contract test { function multiply(uint a) returns(uint d) { return a * 7; } }' - - engine.start() - engine.sendAsync(createPayload({ method: 'eth_compileSolidity', params: [ contractSource ] }), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - t.ok(response.result.code, 'has bytecode') - t.equal(response.result.info.source, contractSource) - t.equal(response.result.info.compilerVersion, solc.version()) - t.ok(response.result.info.abiDefinition, 'has abiDefinition') - - t.equal(providerA.getWitnessed('eth_compileSolidity').length, 1, 'providerA did see "eth_compileSolidity"') - t.equal(providerA.getHandled('eth_compileSolidity').length, 1, 'providerA did handle "eth_compileSolidity"') - - t.equal(providerB.getWitnessed('eth_compileSolidity').length, 0, 'providerB did NOT see "eth_compileSolidity"') - t.equal(providerB.getHandled('eth_compileSolidity').length, 0, 'providerB did NOT handle "eth_compileSolidity"') - - engine.stop() - t.end() - }) - -}) diff --git a/node_modules/web3-provider-engine/test/subproviders/etherscan.js b/node_modules/web3-provider-engine/test/subproviders/etherscan.js deleted file mode 100644 index b36db6c..0000000 --- a/node_modules/web3-provider-engine/test/subproviders/etherscan.js +++ /dev/null @@ -1,129 +0,0 @@ -const sha3 = require('ethereumjs-util').sha3; -const test = require('tape') -const ProviderEngine = require('../../index.js') -const createPayload = require('../../util/create-payload.js') -const EtherscanSubprovider = require('../../subproviders/etherscan') - -test('etherscan eth_getBlockTransactionCountByNumber', function(t) { - t.plan(3) - - var engine = new ProviderEngine() - var etherscan = new EtherscanSubprovider() - engine.addProvider(etherscan) - engine.start() - engine.sendAsync(createPayload({ - method: 'eth_getBlockTransactionCountByNumber', - params: [ - '0x132086' - ], - }), function(err, response){ - t.ifError(err, 'throw no error') - t.ok(response, 'has response') - t.equal(response.result, '0x8') - t.end() - }) -}) - -test('etherscan eth_getTransactionByHash', function(t) { - t.plan(3) - - var engine = new ProviderEngine() - var etherscan = new EtherscanSubprovider() - engine.addProvider(etherscan) - engine.start() - engine.sendAsync(createPayload({ - method: 'eth_getTransactionByHash', - params: [ - '0xe420d77c4f8b5bf95021fa049b634d5e3f051752a14fb7c6a8f1333c37cdf817' - ], - }), function(err, response){ - t.ifError(err, 'throw no error') - t.ok(response, 'has response') - t.equal(response.result.nonce, '0xd', 'nonce matches known nonce') - t.end() - }) -}) - -test('etherscan eth_blockNumber', function(t) { - t.plan(3) - - var engine = new ProviderEngine() - var etherscan = new EtherscanSubprovider() - engine.addProvider(etherscan) - engine.start() - engine.sendAsync(createPayload({ - method: 'eth_blockNumber', - params: [], - }), function(err, response){ - t.ifError(err, 'throw no error') - t.ok(response, 'has response') - t.notEqual(response.result, '0x', 'block number does not equal 0x') - t.end() - }) -}) - -test('etherscan eth_getBlockByNumber', function(t) { - t.plan(3) - - var engine = new ProviderEngine() - var etherscan = new EtherscanSubprovider() - engine.addProvider(etherscan) - engine.start() - engine.sendAsync(createPayload({ - method: 'eth_getBlockByNumber', - params: [ - '0x149a2a', - true - ], - }), function(err, response){ - t.ifError(err, 'throw no error') - t.ok(response, 'has response') - t.equal(response.result.nonce, '0x80fdd9b71954f9fc', 'nonce matches known nonce') - t.end() - }) -}) - -test('etherscan eth_getBalance', function(t) { - t.plan(3) - - var engine = new ProviderEngine() - var etherscan = new EtherscanSubprovider() - engine.addProvider(etherscan) - engine.start() - engine.sendAsync(createPayload({ - method: 'eth_getBalance', - params: [ - '0xa601ea86ae7297e78a54f4b6937fbc222b9d87f4', - 'latest' - ], - }), function(err, response){ - t.ifError(err, 'throw no error') - t.ok(response, 'has response') - t.notEqual(response.result, '0', 'balance does not equal zero') - t.end() - }) -}) - -test('etherscan eth_call', function(t) { - t.plan(3) - - var signature = Buffer.concat([sha3("getLatestBlock()", 256)], 4).toString('hex'); - var engine = new ProviderEngine() - var etherscan = new EtherscanSubprovider() - engine.addProvider(etherscan) - engine.start() - engine.sendAsync(createPayload({ - method: 'eth_call', - params: [{ - to: '0x4EECf99D543B278106ac0c0e8ffe616F2137f10a', - data : signature - }, - 'latest' - ], - }), function(err, response){ - t.ifError(err, 'throw no error') - t.ok(response, 'has response') - t.notEqual(response.result, '0x', 'eth_call to getLatestBlock() does not equal 0x') - t.end() - }) -}) diff --git a/node_modules/web3-provider-engine/test/subproviders/index.js b/node_modules/web3-provider-engine/test/subproviders/index.js deleted file mode 100644 index a0a7f28..0000000 --- a/node_modules/web3-provider-engine/test/subproviders/index.js +++ /dev/null @@ -1,3 +0,0 @@ -require('./etherscan') -require('./ipc'); -require('./sanitizer'); diff --git a/node_modules/web3-provider-engine/test/subproviders/ipc.js b/node_modules/web3-provider-engine/test/subproviders/ipc.js deleted file mode 100644 index 930ba39..0000000 --- a/node_modules/web3-provider-engine/test/subproviders/ipc.js +++ /dev/null @@ -1,40 +0,0 @@ -const sha3 = require('ethereumjs-util').sha3; -const test = require('tape') -const ProviderEngine = require('../../index.js') -const createPayload = require('../../util/create-payload.js') -const IpcSubprovider = require('../../subproviders/ipc') -const socketPath = process.argv[2]; // e.g. '/root/.ethereum/geth.ipc' - -test('ipc personal_listAccounts', function(t) { - t.plan(3) - var engine = new ProviderEngine() - var ipc = new IpcSubprovider({ipcPath : socketPath}); - engine.addProvider(ipc) - engine.start() - engine.sendAsync(createPayload({ - method: 'personal_listAccounts', - params: [], - }), function(err, response){ - t.ifError(err, 'throw no error') - t.ok(response, 'has response') - t.equal(typeof response.result[0], 'string') - t.end() - }) -}) - -test('ipc personal_newAccount', function(t) { - t.plan(3) - var engine = new ProviderEngine() - var ipc = new IpcSubprovider({ipcPath : socketPath}); - engine.addProvider(ipc) - engine.start() - engine.sendAsync(createPayload({ - method: 'personal_newAccount', - params: ['test'], - }), function(err, response){ - t.ifError(err, 'throw no error') - t.ok(response, 'has response') - t.equal(response.result.length, 42); - t.end() - }) -}) diff --git a/node_modules/web3-provider-engine/test/subproviders/sanitizer.js b/node_modules/web3-provider-engine/test/subproviders/sanitizer.js deleted file mode 100644 index 4ea6653..0000000 --- a/node_modules/web3-provider-engine/test/subproviders/sanitizer.js +++ /dev/null @@ -1,58 +0,0 @@ -const test = require('tape') -const ProviderEngine = require('../../index.js') -const createPayload = require('../../util/create-payload.js') -const SanitizerSubprovider = require('../../subproviders/sanitizer') -const MockSubprovider = require('../util/mock-subprovider') -const mockBlock = require('../util/mock_block.json') -const extend = require('xtend') - -test('Sanitizer removes unknown keys', function(t) { - t.plan(7) - - var engine = new ProviderEngine() - - var sanitizer = new SanitizerSubprovider() - engine.addProvider(sanitizer) - - var mock = new MockSubprovider(function (payload, next, end) { - t.ok(!('foo' in payload.params[0])) - t.equal(payload.params[0].gas, '0x01') - t.equal(payload.params[0].data, '0x01') - t.equal(payload.params[0].fromBlock, 'latest') - t.equal(payload.params[0].topics.length, 3) - t.equal(payload.params[0].topics[1], '0x0a') - - if (payload.method === 'eth_getBlockByNumber') { - return end(null, mockBlock.result) - } - - return end(null, extend(mockBlock, { - baz: 'bam', - })) - }) - engine.addProvider(mock) - - engine._fetchBlock = (str, cb) => { - cb(null, mockBlock) - } - - engine.start() - - var payload = { - method: 'eth_estimateGas', - params: [{ - foo: 'bar', - gas: '0x01', - data: '01', - fromBlock: 'latest', - topics: [ - null, - '0X0A', - '0x03', - ], - }], - } - engine.sendAsync(payload, function (err, result) { - t.equal(result.result.baz, 'bam') - }) -}) diff --git a/node_modules/web3-provider-engine/test/util/block.js b/node_modules/web3-provider-engine/test/util/block.js deleted file mode 100644 index 8c508d8..0000000 --- a/node_modules/web3-provider-engine/test/util/block.js +++ /dev/null @@ -1,95 +0,0 @@ -const inherits = require('util').inherits -const extend = require('xtend') -const ethUtil = require('ethereumjs-util') -const FixtureProvider = require('../../subproviders/fixture.js') - -module.exports = TestBlockProvider - -// -// handles only `eth_getBlockByNumber` requests -// returns a dummy block -// - -inherits(TestBlockProvider, FixtureProvider) -function TestBlockProvider(methods){ - const self = this - self._currentBlock = createBlock() - self._pendingTxs = [] - FixtureProvider.call(self, { - eth_getBlockByNumber: function(payload, next, end){ - end(null, self._currentBlock) - }, - eth_getLogs: function(payload, next, end){ - end(null, self._currentBlock.transactions) - }, - }) -} - -// class methods -TestBlockProvider.createBlock = createBlock -TestBlockProvider.incrementHex = incrementHex - -TestBlockProvider.prototype.nextBlock = function(blockParams){ - const self = this - self._currentBlock = createBlock(blockParams, self._currentBlock, self._pendingTxs) - self._pendingTxs = [] - return self._currentBlock -} - -TestBlockProvider.prototype.addTx = function(txParams){ - const self = this - var newTx = extend({ - // defaults - address: randomHash(), - topics: [ - randomHash(), - randomHash(), - randomHash() - ], - data: randomHash(), - blockNumber: '0xdeadbeef', - logIndex: '0xdeadbeef', - blockHash: '0x7c337eac9e3ec7bc99a1d911d326389558c9086afca7480a19698a16e40b2e0a', - transactionHash: '0xd81da851bd3f4094d52cb86929e2ea3732a60ba7c184b853795fc5710a68b5fa', - transactionIndex: '0x0' - // provided - }, txParams) - self._pendingTxs.push(newTx) - return newTx -} - -function createBlock(blockParams, prevBlock, txs) { - blockParams = blockParams || {} - txs = txs || [] - var defaultNumber = prevBlock ? incrementHex(prevBlock.number) : '0x01' - return extend({ - // defaults - number: defaultNumber, - hash: randomHash(), - parentHash: prevBlock ? prevBlock.hash : randomHash(), - nonce: randomHash(), - sha3Uncles: randomHash(), - logsBloom: randomHash(), - transactionsRoot: randomHash(), - stateRoot: randomHash(), - receiptRoot: randomHash(), - miner: randomHash(), - difficulty: randomHash(), - totalDifficulty: randomHash(), - size: randomHash(), - extraData: randomHash(), - gasLimit: randomHash(), - gasUsed: randomHash(), - timestamp: randomHash(), - transactions: txs, - // provided - }, blockParams) -} - -function incrementHex(hexString){ - return ethUtil.intToHex(Number(hexString)+1) -} - -function randomHash(){ - return ethUtil.intToHex(Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)) -} diff --git a/node_modules/web3-provider-engine/test/util/inject-metrics.js b/node_modules/web3-provider-engine/test/util/inject-metrics.js deleted file mode 100644 index 3bf4e92..0000000 --- a/node_modules/web3-provider-engine/test/util/inject-metrics.js +++ /dev/null @@ -1,42 +0,0 @@ - -module.exports = injectSubproviderMetrics - -function injectSubproviderMetrics(subprovider){ - subprovider.payloadsWitnessed = {} - subprovider.payloadsHandled = {} - - subprovider.getWitnessed = getWitnessed.bind(subprovider) - subprovider.getHandled = getHandled.bind(subprovider) - - var _super = subprovider.handleRequest.bind(subprovider) - subprovider.handleRequest = handleRequest.bind(subprovider, _super) - - return subprovider -} - -function getWitnessed(method){ - const self = this - var witnessed = self.payloadsWitnessed[method] = self.payloadsWitnessed[method] || [] - return witnessed -} - -function getHandled(method){ - const self = this - var witnessed = self.payloadsHandled[method] = self.payloadsHandled[method] || [] - return witnessed -} - -function handleRequest(_super, payload, next, end){ - const self = this - // mark payload witnessed - var witnessed = self.getWitnessed(payload.method) - witnessed.push(payload) - // continue - _super(payload, next, function(err, result){ - // mark payload handled - var handled = self.getHandled(payload.method) - handled.push(payload) - // continue - end(err, result) - }) -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/test/util/mock-subprovider.js b/node_modules/web3-provider-engine/test/util/mock-subprovider.js deleted file mode 100644 index 075eb73..0000000 --- a/node_modules/web3-provider-engine/test/util/mock-subprovider.js +++ /dev/null @@ -1,24 +0,0 @@ -const inherits = require('util').inherits -const Subprovider = require('../../subproviders/subprovider.js') -const extend = require('xtend') - -module.exports = MockSubprovider - -inherits(MockSubprovider, Subprovider) - -function MockSubprovider(handleRequest){ - const self = this - - // Optionally provide a handleRequest method - if (handleRequest) { - this.handleRequest = handleRequest - } -} - -var mockResponse = { - data: 'mock-success!' -} -MockSubprovider.prototype.handleRequest = function(payload, next, end){ - end(mockResponse) -} - diff --git a/node_modules/web3-provider-engine/test/util/mock_block.json b/node_modules/web3-provider-engine/test/util/mock_block.json deleted file mode 100644 index a7a82b9..0000000 --- a/node_modules/web3-provider-engine/test/util/mock_block.json +++ /dev/null @@ -1 +0,0 @@ -{"jsonrpc":"2.0","result":{"author":"0x3045126f1a6bcf27b0712c2c4133a2ce69395546","difficulty":"0x05a848d3","extraData":"0xd78301040f844765746887676f312e372e31856c696e7578","gasLimit":"0x47e7c4","gasUsed":"0x044386","hash":"0x39082b44d673569570d6ac46b8b527a0fe4fcf7b40bd09f70d701bbe42144587","logsBloom":"0x00002000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000020000000000000000002000000000000000000000000001000000000000000000000020020000000008000000800400000008000000000000000000000000000008000000000800000000000000000000000200000000000000000000080000100000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000020000000000000040000000000000000000008000000000000000000000100000000","miner":"0x3045126f1a6bcf27b0712c2c4133a2ce69395546","number":"0x1a64a4","parentHash":"0x535d38d2128ade5a19e72934e8018d9649c2940766b88c1fdbd43ef2cd338dad","receiptsRoot":"0x918e809c1a205b2cce68663f3ac6d72b295bb9269de39bdc52a278bd7f51e841","sealFields":["0x48834e4f263cb23860214003d3c752228cdf70d284cbb286b95919c85a6c440f","0x1f1c95b1a27be157"],"sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":1825,"stateRoot":"0xee08496f6c8b7d4227a99ccf2372a96f15500e07bb5b94532ee93d175fe6d1ee","timestamp":"0x57f30d81","totalDifficulty":"0x01623f4272fb2e","transactions":["0x74f3c8d4559e02adfc79809f5e7f91595ad12c80d20259f2cd0c270afe40b4f2","0xa7918107717faf6b2c058628939aaf9aed7bca105ae2018bee8f32cb21638768","0x13749d33769ae67f33482aec8a58d11b276be980d509d9d30fa6760a39a249fc","0x73a886e141d8cd03757997201e9382ca6ab248944ea9b7d29d2259fc029088ef","0xeaeb68cba3f26349796a50ec1d469f8cec6d67fcddc4071b08cc47fb308d73d9","0x8abfc676700f75717f4204d2f16aac8b34bee86849293b0e7e133ab52f12d0f3","0xc5e2cd4389a9efee352a5e70a5db5924510531bca73cd39f1ca7f410de129f37","0xd981eaae3a02220e0158773867e02cce3e021a62dc9babd7d3ffff0c8800ab48","0x4ba75e509ff67b2177b3bb3c7f708fdef966f79655887e49cdda92c9b79bdb56","0xb9bc0f47e59beb252d701ede931b343977a6c20018f806a1892e0748cb771abc","0x3dc76b1bc8964904284dbff63a63be3a321d6a37aab2e61df99e9a911ffa150b"],"transactionsRoot":"0xc111e128231888a1237b9d8105193fde1c3aa3e750105507dcd112179ca03019","uncles":[]},"id":1475546514569366} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/test/util/passthrough.js b/node_modules/web3-provider-engine/test/util/passthrough.js deleted file mode 100644 index 9430307..0000000 --- a/node_modules/web3-provider-engine/test/util/passthrough.js +++ /dev/null @@ -1,15 +0,0 @@ -const inherits = require('util').inherits -const FixtureProvider = require('../../subproviders/fixture.js') - -module.exports = PassthroughProvider - -// -// handles no methods, skips all requests -// mostly useless -// - -inherits(PassthroughProvider, FixtureProvider) -function PassthroughProvider(methods){ - const self = this - FixtureProvider.call(self, {}) -} diff --git a/node_modules/web3-provider-engine/test/wallet.js b/node_modules/web3-provider-engine/test/wallet.js deleted file mode 100644 index 7e11b79..0000000 --- a/node_modules/web3-provider-engine/test/wallet.js +++ /dev/null @@ -1,238 +0,0 @@ -const test = require('tape') -const Transaction = require('ethereumjs-tx') -const ethUtil = require('ethereumjs-util') -const ProviderEngine = require('../index.js') -const FixtureProvider = require('../subproviders/fixture.js') -const NonceTracker = require('../subproviders/nonce-tracker.js') -const HookedWalletProvider = require('../subproviders/hooked-wallet.js') -const HookedWalletTxProvider = require('../subproviders/hooked-wallet-ethtx.js') -const TestBlockProvider = require('./util/block.js') -const createPayload = require('../util/create-payload.js') -const injectMetrics = require('./util/inject-metrics') - - -test('tx sig', function(t){ - t.plan(12) - - var privateKey = new Buffer('cccd8f4d88de61f92f3747e4a9604a0395e6ad5138add4bec4a2ddf231ee24f9', 'hex') - var address = new Buffer('1234362ef32bcd26d3dd18ca749378213625ba0b', 'hex') - var addressHex = '0x'+address.toString('hex') - - // sign all tx's - var providerA = injectMetrics(new HookedWalletProvider({ - getAccounts: function(cb){ - cb(null, [addressHex]) - }, - signTransaction: function(txParams, cb){ - var tx = new Transaction(txParams) - tx.sign(privateKey) - var rawTx = '0x'+tx.serialize().toString('hex') - cb(null, rawTx) - }, - })) - - // handle nonce requests - var providerB = injectMetrics(new NonceTracker()) - // handle all bottom requests - var providerC = injectMetrics(new FixtureProvider({ - eth_gasPrice: '0x1234', - eth_getTransactionCount: '0x00', - eth_sendRawTransaction: function(payload, next, done){ - var rawTx = ethUtil.toBuffer(payload.params[0]) - var tx = new Transaction(rawTx) - var hash = '0x'+tx.hash().toString('hex') - done(null, hash) - }, - })) - // handle block requests - var providerD = injectMetrics(new TestBlockProvider()) - - var engine = new ProviderEngine() - engine.addProvider(providerA) - engine.addProvider(providerB) - engine.addProvider(providerC) - engine.addProvider(providerD) - - var txPayload = { - method: 'eth_sendTransaction', - params: [{ - from: addressHex, - to: addressHex, - value: '0x01', - gas: '0x1234567890', - }] - } - - engine.start() - engine.sendAsync(createPayload(txPayload), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - // intial tx request - t.equal(providerA.getWitnessed('eth_sendTransaction').length, 1, 'providerA did see "signTransaction"') - t.equal(providerA.getHandled('eth_sendTransaction').length, 1, 'providerA did handle "signTransaction"') - - // tx nonce - t.equal(providerB.getWitnessed('eth_getTransactionCount').length, 1, 'providerB did see "eth_getTransactionCount"') - t.equal(providerB.getHandled('eth_getTransactionCount').length, 0, 'providerB did NOT handle "eth_getTransactionCount"') - t.equal(providerC.getWitnessed('eth_getTransactionCount').length, 1, 'providerC did see "eth_getTransactionCount"') - t.equal(providerC.getHandled('eth_getTransactionCount').length, 1, 'providerC did handle "eth_getTransactionCount"') - - // gas price - t.equal(providerC.getWitnessed('eth_gasPrice').length, 1, 'providerB did see "eth_gasPrice"') - t.equal(providerC.getHandled('eth_gasPrice').length, 1, 'providerB did handle "eth_gasPrice"') - - // send raw tx - t.equal(providerC.getWitnessed('eth_sendRawTransaction').length, 1, 'providerC did see "eth_sendRawTransaction"') - t.equal(providerC.getHandled('eth_sendRawTransaction').length, 1, 'providerC did handle "eth_sendRawTransaction"') - - engine.stop() - t.end() - }) - -}) - -test('no such account', function(t){ - t.plan(1) - - var addressHex = '0x1234362ef32bcd26d3dd18ca749378213625ba0b' - var otherAddressHex = '0x4321362ef32bcd26d3dd18ca749378213625ba0c' - - // sign all tx's - var providerA = injectMetrics(new HookedWalletProvider({ - getAccounts: function(cb){ - cb(null, [addressHex]) - }, - })) - - // handle nonce requests - var providerB = injectMetrics(new NonceTracker()) - // handle all bottom requests - var providerC = injectMetrics(new FixtureProvider({ - eth_gasPrice: '0x1234', - eth_getTransactionCount: '0x00', - eth_sendRawTransaction: function(payload, next, done){ - var rawTx = ethUtil.toBuffer(payload.params[0]) - var tx = new Transaction(rawTx) - var hash = '0x'+tx.hash().toString('hex') - done(null, hash) - }, - })) - // handle block requests - var providerD = injectMetrics(new TestBlockProvider()) - - var engine = new ProviderEngine() - engine.addProvider(providerA) - engine.addProvider(providerB) - engine.addProvider(providerC) - engine.addProvider(providerD) - - var txPayload = { - method: 'eth_sendTransaction', - params: [{ - from: otherAddressHex, - to: addressHex, - value: '0x01', - gas: '0x1234567890', - }] - } - - engine.start() - engine.sendAsync(createPayload(txPayload), function(err, response){ - t.ok(err, 'did error') - - engine.stop() - t.end() - }) - -}) - - -test('sign message', function(t){ - t.plan(3) - - var privateKey = new Buffer('cccd8f4d88de61f92f3747e4a9604a0395e6ad5138add4bec4a2ddf231ee24f9', 'hex') - var addressHex = '0x1234362ef32bcd26d3dd18ca749378213625ba0b' - - var messageToSign = 'haay wuurl' - var signedResult = '0x2c865e6843caf741a694522f86281c9ee86294ade3c8cd1889c9f2c9a24e20802b2b6eb79ba49412661bdbf40245d9b01abb393a843734e5be79b38e7dd408ef1c' - - // sign all messages - var providerA = injectMetrics(new HookedWalletTxProvider({ - getAccounts: function(cb){ - cb(null, [addressHex]) - }, - getPrivateKey: function(address, cb){ - cb(null, privateKey) - }, - })) - - // handle block requests - var providerB = injectMetrics(new TestBlockProvider()) - - var engine = new ProviderEngine() - engine.addProvider(providerA) - engine.addProvider(providerB) - - var payload = { - method: 'eth_sign', - params: [ - addressHex, - messageToSign, - ], - } - - engine.start() - engine.sendAsync(createPayload(payload), function(err, response){ - t.ifError(err, 'did not error') - t.ok(response, 'has response') - - t.equal(response.result, signedResult, 'signed response is correct') - - engine.stop() - t.end() - }) - -}) - -test('sender validation, with mixed-case', function(t){ - t.plan(1) - - var senderAddress = '0xE4660fdAb2D6Bd8b50C029ec79E244d132c3bc2B' - - var providerA = injectMetrics(new HookedWalletTxProvider({ - getAccounts: function(cb){ - cb(null, [senderAddress]) - }, - getPrivateKey: function(address, cb){ - t.pass('correctly validated sender') - engine.stop() - t.end() - }, - })) - var providerB = injectMetrics(new TestBlockProvider()) - // handle all bottom requests - var providerC = injectMetrics(new FixtureProvider({ - eth_gasPrice: '0x1234', - eth_estimateGas: '0x1234', - eth_getTransactionCount: '0x00', - })) - - var engine = new ProviderEngine() - engine.addProvider(providerA) - engine.addProvider(providerB) - engine.addProvider(providerC) - - engine.start() - engine.sendAsync({ - method: 'eth_sendTransaction', - params: [{ - from: senderAddress.toLowerCase(), - }] - }, function(err){ - t.notOk(err, 'error was present') - engine.stop() - t.end() - }) - -}) \ No newline at end of file diff --git a/node_modules/web3-provider-engine/util/async.js b/node_modules/web3-provider-engine/util/async.js deleted file mode 100644 index 86afc3a..0000000 --- a/node_modules/web3-provider-engine/util/async.js +++ /dev/null @@ -1,79 +0,0 @@ -module.exports = { - // Works the same as async.parallel - parallel: function(fns, done) { - done = done || function() {}; - this.map(fns, function(fn, callback) { - fn(callback); - }, done); - }, - - // Works the same as async.map - map: function(items, iterator, done) { - done = done || function() {}; - var results = []; - var failure = false; - var expected = items.length; - var actual = 0; - var createIntermediary = function(index) { - return function(err, result) { - // Return if we found a failure anywhere. - // We can't stop execution of functions since they've already - // been fired off; but we can prevent excessive handling of callbacks. - if (failure != false) { - return; - } - - if (err != null) { - failure = true; - done(err, result); - return; - } - - actual += 1; - - if (actual == expected) { - done(null, results); - } - }; - }; - - for (var i = 0; i < items.length; i++) { - var item = items[i]; - iterator(item, createIntermediary(i)); - } - - if (items.length == 0) { - done(null, []); - } - }, - - // Works like async.eachSeries - eachSeries: function(items, iterator, done) { - done = done || function() {}; - var results = []; - var failure = false; - var expected = items.length; - var current = -1; - - function callback(err, result) { - if (err) return done(err); - - results.push(result); - - if (current == expected) { - return done(null, results); - } else { - next(); - } - }; - - function next() { - current += 1; - - var item = items[current]; - iterator(item, callback); - }; - - next() - } -}; diff --git a/node_modules/web3-provider-engine/util/create-payload.js b/node_modules/web3-provider-engine/util/create-payload.js deleted file mode 100644 index ed35093..0000000 --- a/node_modules/web3-provider-engine/util/create-payload.js +++ /dev/null @@ -1,15 +0,0 @@ -const getRandomId = require('./random-id.js') -const extend = require('xtend') - -module.exports = createPayload - - -function createPayload(data){ - return extend({ - // defaults - id: getRandomId(), - jsonrpc: '2.0', - params: [], - // user-specified - }, data) -} diff --git a/node_modules/web3-provider-engine/util/estimate-gas.js b/node_modules/web3-provider-engine/util/estimate-gas.js deleted file mode 100644 index 8f08f15..0000000 --- a/node_modules/web3-provider-engine/util/estimate-gas.js +++ /dev/null @@ -1,27 +0,0 @@ -const createPayload = require('./create-payload.js') - -module.exports = estimateGas - -/* - -This is a work around for https://github.com/ethereum/go-ethereum/issues/2577 - -*/ - - -function estimateGas(provider, txParams, cb) { - provider.sendAsync(createPayload({ - method: 'eth_estimateGas', - params: [txParams] - }), function(err, res){ - if (err) { - // handle simple value transfer case - if (err.message === 'no contract code at given address') { - return cb(null, '0xcf08') - } else { - return cb(err) - } - } - cb(null, res.result) - }) -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/util/random-id.js b/node_modules/web3-provider-engine/util/random-id.js deleted file mode 100644 index ea95917..0000000 --- a/node_modules/web3-provider-engine/util/random-id.js +++ /dev/null @@ -1,14 +0,0 @@ -// gotta keep it within MAX_SAFE_INTEGER -const extraDigits = 3 - -module.exports = createRandomId - - -function createRandomId(){ - // 13 time digits - var datePart = new Date().getTime()*Math.pow(10, extraDigits) - // 3 random digits - var extraPart = Math.floor(Math.random()*Math.pow(10, extraDigits)) - // 16 digits - return datePart+extraPart -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/util/rpc-cache-utils.js b/node_modules/web3-provider-engine/util/rpc-cache-utils.js deleted file mode 100644 index 15506dc..0000000 --- a/node_modules/web3-provider-engine/util/rpc-cache-utils.js +++ /dev/null @@ -1,140 +0,0 @@ -module.exports = { - cacheIdentifierForPayload: cacheIdentifierForPayload, - canCache: canCache, - blockTagForPayload: blockTagForPayload, - paramsWithoutBlockTag: paramsWithoutBlockTag, - blockTagParamIndex: blockTagParamIndex, - cacheTypeForPayload: cacheTypeForPayload, -} - -function cacheIdentifierForPayload(payload){ - var simpleParams = paramsWithoutBlockTag(payload) - if (canCache(payload)) { - return payload.method+':'+JSON.stringify(simpleParams) - } else { - return null - } -} - -function canCache(payload){ - return cacheTypeForPayload(payload) !== 'never' -} - -function blockTagForPayload(payload){ - var index = blockTagParamIndex(payload); - - // Block tag param not passed. - if (index >= payload.params.length) { - return null; - } - - return payload.params[index]; -} - -function paramsWithoutBlockTag(payload){ - var index = blockTagParamIndex(payload); - - // Block tag param not passed. - if (index >= payload.params.length) { - return payload.params; - } - - return payload.params.slice(0,index); -} - -function blockTagParamIndex(payload){ - switch(payload.method) { - // blockTag is second param - case 'eth_getBalance': - case 'eth_getCode': - case 'eth_getTransactionCount': - case 'eth_getStorageAt': - case 'eth_call': - case 'eth_estimateGas': - return 1 - // blockTag is first param - case 'eth_getBlockByNumber': - return 0 - // there is no blockTag - default: - return undefined - } -} - -function cacheTypeForPayload(payload) { - switch (payload.method) { - // cache permanently - case 'web3_clientVersion': - case 'web3_sha3': - case 'eth_protocolVersion': - case 'eth_getBlockTransactionCountByHash': - case 'eth_getUncleCountByBlockHash': - case 'eth_getCode': - case 'eth_getBlockByHash': - case 'eth_getTransactionByHash': - case 'eth_getTransactionByBlockHashAndIndex': - case 'eth_getTransactionReceipt': - case 'eth_getUncleByBlockHashAndIndex': - case 'eth_getCompilers': - case 'eth_compileLLL': - case 'eth_compileSolidity': - case 'eth_compileSerpent': - case 'shh_version': - return 'perma' - - // cache until fork - case 'eth_getBlockByNumber': - case 'eth_getBlockTransactionCountByNumber': - case 'eth_getUncleCountByBlockNumber': - case 'eth_getTransactionByBlockNumberAndIndex': - case 'eth_getUncleByBlockNumberAndIndex': - return 'fork' - - // cache for block - case 'eth_gasPrice': - case 'eth_blockNumber': - case 'eth_getBalance': - case 'eth_getStorageAt': - case 'eth_getTransactionCount': - case 'eth_call': - case 'eth_estimateGas': - case 'eth_getFilterLogs': - case 'eth_getLogs': - return 'block' - - // never cache - case 'net_version': - case 'net_peerCount': - case 'net_listening': - case 'eth_syncing': - case 'eth_sign': - case 'eth_coinbase': - case 'eth_mining': - case 'eth_hashrate': - case 'eth_accounts': - case 'eth_sendTransaction': - case 'eth_sendRawTransaction': - case 'eth_newFilter': - case 'eth_newBlockFilter': - case 'eth_newPendingTransactionFilter': - case 'eth_uninstallFilter': - case 'eth_getFilterChanges': - case 'eth_getWork': - case 'eth_submitWork': - case 'eth_submitHashrate': - case 'db_putString': - case 'db_getString': - case 'db_putHex': - case 'db_getHex': - case 'shh_post': - case 'shh_newIdentity': - case 'shh_hasIdentity': - case 'shh_newGroup': - case 'shh_addToGroup': - case 'shh_newFilter': - case 'shh_uninstallFilter': - case 'shh_getFilterChanges': - case 'shh_getMessages': - return 'never' - } -} diff --git a/node_modules/web3-provider-engine/util/stoplight.js b/node_modules/web3-provider-engine/util/stoplight.js deleted file mode 100644 index af3f534..0000000 --- a/node_modules/web3-provider-engine/util/stoplight.js +++ /dev/null @@ -1,34 +0,0 @@ -const EventEmitter = require('events').EventEmitter -const inherits = require('util').inherits - -module.exports = Stoplight - - -inherits(Stoplight, EventEmitter) - -function Stoplight(){ - const self = this - EventEmitter.call(self) - self.isLocked = true -} - -Stoplight.prototype.go = function(){ - const self = this - self.isLocked = false - self.emit('unlock') -} - -Stoplight.prototype.stop = function(){ - const self = this - self.isLocked = true - self.emit('lock') -} - -Stoplight.prototype.await = function(fn){ - const self = this - if (self.isLocked) { - self.once('unlock', fn) - } else { - setTimeout(fn) - } -} \ No newline at end of file diff --git a/node_modules/web3-provider-engine/zero.js b/node_modules/web3-provider-engine/zero.js deleted file mode 100644 index 470c5aa..0000000 --- a/node_modules/web3-provider-engine/zero.js +++ /dev/null @@ -1,66 +0,0 @@ -const ProviderEngine = require('./index.js') -const DefaultFixture = require('./subproviders/default-fixture.js') -const NonceTrackerSubprovider = require('./subproviders/nonce-tracker.js') -const CacheSubprovider = require('./subproviders/cache.js') -const FilterSubprovider = require('./subproviders/filters.js') -const HookedWalletSubprovider = require('./subproviders/hooked-wallet.js') -const SanitizingSubprovider = require('./subproviders/sanitizer.js') -const RpcSubprovider = require('./subproviders/rpc.js') - - -module.exports = ZeroClientProvider - - -function ZeroClientProvider(opts){ - opts = opts || {} - - var engine = new ProviderEngine() - - // static - var staticSubprovider = new DefaultFixture() - engine.addProvider(staticSubprovider) - - // nonce tracker - engine.addProvider(new NonceTrackerSubprovider()) - - // sanitization - var sanitizer = new SanitizingSubprovider() - engine.addProvider(sanitizer) - - // cache layer - var cacheSubprovider = new CacheSubprovider() - engine.addProvider(cacheSubprovider) - - // filters - var filterSubprovider = new FilterSubprovider() - engine.addProvider(filterSubprovider) - - // id mgmt - var idmgmtSubprovider = new HookedWalletSubprovider({ - getAccounts: opts.getAccounts, - approveTransaction: opts.approveTransaction, - signTransaction: opts.signTransaction, - approveMessage: opts.approveMessage, - signMessage: opts.signMessage, - }) - engine.addProvider(idmgmtSubprovider) - - // data source - var rpcSubprovider = new RpcSubprovider({ - rpcUrl: opts.rpcUrl || 'https://testrpc.metamask.io/', - }) - engine.addProvider(rpcSubprovider) - - // // log new blocks - // engine.on('block', function(block){ - // console.log('================================') - // console.log('BLOCK CHANGED:', '#'+block.number.toString('hex'), '0x'+block.hash.toString('hex')) - // console.log('================================') - // }) - - // start polling - engine.start() - - return engine - -} diff --git a/node_modules/web3/.bowerrc b/node_modules/web3/.bowerrc deleted file mode 100644 index 707e36b..0000000 --- a/node_modules/web3/.bowerrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "directory": "bower", - "cwd": "./", - "analytics": false -} diff --git a/node_modules/web3/.idea/.name b/node_modules/web3/.idea/.name deleted file mode 100644 index 3290557..0000000 --- a/node_modules/web3/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -web3 \ No newline at end of file diff --git a/node_modules/web3/.idea/encodings.xml b/node_modules/web3/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/node_modules/web3/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/node_modules/web3/.idea/jsLibraryMappings.xml b/node_modules/web3/.idea/jsLibraryMappings.xml deleted file mode 100644 index a54c224..0000000 --- a/node_modules/web3/.idea/jsLibraryMappings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/node_modules/web3/.idea/misc.xml b/node_modules/web3/.idea/misc.xml deleted file mode 100644 index 72abef0..0000000 --- a/node_modules/web3/.idea/misc.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3/.idea/modules.xml b/node_modules/web3/.idea/modules.xml deleted file mode 100644 index 33ec5dd..0000000 --- a/node_modules/web3/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3/.idea/vcs.xml b/node_modules/web3/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/node_modules/web3/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/node_modules/web3/.idea/web3.iml b/node_modules/web3/.idea/web3.iml deleted file mode 100644 index c956989..0000000 --- a/node_modules/web3/.idea/web3.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3/.idea/workspace.xml b/node_modules/web3/.idea/workspace.xml deleted file mode 100644 index 136f4b0..0000000 --- a/node_modules/web3/.idea/workspace.xml +++ /dev/null @@ -1,952 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - $PROJECT_DIR$/gulpfile.js - - - DEFINITION_ORDER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - project - - - - - - - - - - - - - - - - /usr/local/bin/node - - $PROJECT_DIR$ - true - - bdd - - DIRECTORY - - false - - - - - - - - - - - - 1456145579499 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/web3/.jshintrc b/node_modules/web3/.jshintrc deleted file mode 100644 index a0e8d35..0000000 --- a/node_modules/web3/.jshintrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "browserify": true, - "bitwise": true, - "camelcase": true, - "eqeqeq": true, - "freeze": true, - "funcscope": false, - "maxcomplexity": 4, /* our target is 3! */ - "maxdepth": 3, - "maxerr": 50, - /*"maxlen": 80*/ /*this should be our goal*/ - /*"maxparams": 3,*/ - "nonew": true, - "unused": true, - "undef": true, - "predef": [ - "console" - ] -} diff --git a/node_modules/web3/.npm/package/README b/node_modules/web3/.npm/package/README deleted file mode 100644 index 3d49255..0000000 --- a/node_modules/web3/.npm/package/README +++ /dev/null @@ -1,7 +0,0 @@ -This directory and the files immediately inside it are automatically generated -when you change this package's NPM dependencies. Commit the files in this -directory (npm-shrinkwrap.json, .gitignore, and this README) to source control -so that others run the same versions of sub-dependencies. - -You should NOT check in the node_modules directory that Meteor automatically -creates; if you are using git, the .gitignore file tells git to ignore it. diff --git a/node_modules/web3/.npm/package/npm-shrinkwrap.json b/node_modules/web3/.npm/package/npm-shrinkwrap.json deleted file mode 100644 index 90e5c92..0000000 --- a/node_modules/web3/.npm/package/npm-shrinkwrap.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dependencies": { - "xmlhttprequest": { - "version": "1.7.0" - } - } -} diff --git a/node_modules/web3/.versions b/node_modules/web3/.versions deleted file mode 100644 index eaad088..0000000 --- a/node_modules/web3/.versions +++ /dev/null @@ -1,3 +0,0 @@ -ethereum:web3@0.17.0-alpha -meteor@1.1.14 -underscore@1.0.8 diff --git a/node_modules/web3/LICENSE b/node_modules/web3/LICENSE deleted file mode 100644 index 29a99ab..0000000 --- a/node_modules/web3/LICENSE +++ /dev/null @@ -1,14 +0,0 @@ -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . diff --git a/node_modules/web3/README.md b/node_modules/web3/README.md deleted file mode 100644 index 5fc81c3..0000000 --- a/node_modules/web3/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# Migration 0.13.0 -> 0.14.0 - -web3.js version 0.14.0 supports [multiple instances of web3](https://github.com/ethereum/web3.js/issues/297) object. -To migrate to this version, please follow the guide: - -```diff --var web3 = require('web3'); -+var Web3 = require('web3'); -+var web3 = new Web3(); -``` - - -# Ethereum JavaScript API - -[![Join the chat at https://gitter.im/ethereum/web3.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ethereum/web3.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -This is the Ethereum compatible [JavaScript API](https://github.com/ethereum/wiki/wiki/JavaScript-API) -which implements the [Generic JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) spec. It's available on npm as a node module, for bower and component as an embeddable js and as a meteor.js package. - -[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![dependency status][dep-image]][dep-url] [![dev dependency status][dep-dev-image]][dep-dev-url] [![Coverage Status][coveralls-image]][coveralls-url] [![Stories in Ready][waffle-image]][waffle-url] - - - -You need to run a local Ethereum node to use this library. - -[Documentation](https://github.com/ethereum/wiki/wiki/JavaScript-API) - -## Installation - -### Node.js - -```bash -npm install web3 -``` - -### Meteor.js - -```bash -meteor add ethereum:web3 -``` - -### As Browser module -Bower - -```bash -bower install web3 -``` - -Component - -```bash -component install ethereum/web3.js -``` - -* Include `web3.min.js` in your html file. (not required for the meteor package) - -## Usage -Use the `web3` object directly from global namespace: - -```js -console.log(web3); // {eth: .., shh: ...} // it's here! -``` - -Set a provider (HttpProvider) - -```js -web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); -``` - -There you go, now you can use it: - -```js -var coinbase = web3.eth.coinbase; -var balance = web3.eth.getBalance(coinbase); -``` - -You can find more examples in [`example`](https://github.com/ethereum/web3.js/tree/master/example) directory. - - -## Contribute! - -### Requirements - -* Node.js -* npm - -```bash -sudo apt-get update -sudo apt-get install nodejs -sudo apt-get install npm -sudo apt-get install nodejs-legacy -``` - -### Building (gulp) - -```bash -npm run-script build -``` - - -### Testing (mocha) - -```bash -npm test -``` - -[npm-image]: https://badge.fury.io/js/web3.png -[npm-url]: https://npmjs.org/package/web3 -[travis-image]: https://travis-ci.org/ethereum/web3.js.svg -[travis-url]: https://travis-ci.org/ethereum/web3.js -[dep-image]: https://david-dm.org/ethereum/web3.js.svg -[dep-url]: https://david-dm.org/ethereum/web3.js -[dep-dev-image]: https://david-dm.org/ethereum/web3.js/dev-status.svg -[dep-dev-url]: https://david-dm.org/ethereum/web3.js#info=devDependencies -[coveralls-image]: https://coveralls.io/repos/ethereum/web3.js/badge.svg?branch=master -[coveralls-url]: https://coveralls.io/r/ethereum/web3.js?branch=master -[waffle-image]: https://badge.waffle.io/ethereum/web3.js.svg?label=ready&title=Ready -[waffle-url]: http://waffle.io/ethereum/web3.js - diff --git a/node_modules/web3/bower.json b/node_modules/web3/bower.json deleted file mode 100644 index cc5c747..0000000 --- a/node_modules/web3/bower.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "web3", - "namespace": "ethereum", - "version": "0.17.0-alpha", - "description": "Ethereum Compatible JavaScript API", - "main": [ - "./dist/web3.js", - "./dist/web3.min.js" - ], - "dependencies": { - "bignumber.js": ">=2.0.0", - "crypto-js": "~3.1.4" - }, - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js.git" - }, - "homepage": "https://github.com/ethereum/web3.js", - "bugs": { - "url": "https://github.com/ethereum/web3.js/issues" - }, - "keywords": [ - "ethereum", - "javascript", - "API" - ], - "authors": [ - { - "name": "Marek Kotewicz", - "email": "marek@ethdev.com", - "homepage": "https://github.com/debris" - }, - { - "name": "Marian Oancea", - "email": "marian@ethdev.com", - "homepage": "https://github.com/cubedro" - }, - { - "name": "Fabian Vogelsteller", - "email": "fabian@ethdev.com", - "homepage": "https://github.com/frozeman" - } - ], - "license": "LGPL-3.0", - "ignore": [ - "example", - "lib", - "node_modules", - "package.json", - "package.js", - ".versions", - ".bowerrc", - ".editorconfig", - ".gitignore", - ".jshintrc", - ".npmignore", - ".travis.yml", - "gulpfile.js", - "index.js", - "**/*.txt" - ] -} diff --git a/node_modules/web3/bower/bignumber.js/.bower.json b/node_modules/web3/bower/bignumber.js/.bower.json deleted file mode 100644 index daab06d..0000000 --- a/node_modules/web3/bower/bignumber.js/.bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "bignumber.js", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "version": "2.0.5", - "_release": "2.0.5", - "_resolution": { - "type": "version", - "tag": "v2.0.5", - "commit": "c5eeb7e9ded3547ce27980f649a66ef167375cfb" - }, - "_source": "git://github.com/MikeMcl/bignumber.js.git", - "_target": ">=2.0.0", - "_originalSource": "bignumber.js" -} \ No newline at end of file diff --git a/node_modules/web3/bower/bignumber.js/LICENCE b/node_modules/web3/bower/bignumber.js/LICENCE deleted file mode 100644 index a5d1b40..0000000 --- a/node_modules/web3/bower/bignumber.js/LICENCE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT Expat Licence. - -Copyright (c) 2012 Michael Mclaughlin - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/node_modules/web3/bower/bignumber.js/README.md b/node_modules/web3/bower/bignumber.js/README.md deleted file mode 100644 index d72d14f..0000000 --- a/node_modules/web3/bower/bignumber.js/README.md +++ /dev/null @@ -1,324 +0,0 @@ -![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png) - -*WARNING: Critical division bug found in v2.0.0 - v2.0.3. Fixed in v2.0.4+* - -A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic. - -[![Build Status](https://travis-ci.org/MikeMcl/bignumber.js.svg)](https://travis-ci.org/MikeMcl/bignumber.js) - -
        - -## Features - - - Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal - - 8 KB minified and gzipped - - Simple API but full-featured - - Works with numbers with or without fraction digits in bases from 2 to 64 inclusive - - Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type - - Includes a `toFraction` and a correctly-rounded `squareRoot` method - - Supports cryptographically-secure pseudo-random number generation - - No dependencies - - Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only - - Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set - -![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png) - -If a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/). -It's less than half the size but only works with decimal numbers and only has half the methods. -It also does not allow `NaN` or `Infinity`, or have the configuration options of this library. - -See also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits. - -## Load - -The library is the single JavaScript file *bignumber.js* (or minified, *bignumber.min.js*). - -```html - -``` - -For [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry - - $ npm install bignumber.js - -```javascript -var BigNumber = require('bignumber.js'); -``` - -To load with AMD loader libraries such as [requireJS](http://requirejs.org/): - -```javascript -require(['path/to/bignumber'], function(BigNumber) { - // Use BigNumber here in local scope. No global BigNumber. -}); -``` - -## Use - -*In all examples below, `var`, semicolons and `toString` calls are not shown. -If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* - -The library exports a single function: `BigNumber`, the constructor of BigNumber instances. - -It accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object, - -```javascript -x = new BigNumber(123.4567) -y = BigNumber('123456.7e-3') -z = new BigNumber(x) -x.equals(y) && y.equals(z) && x.equals(z) // true -``` - - -and a base from 2 to 64 inclusive can be specified. - -```javascript -x = new BigNumber(1011, 2) // "11" -y = new BigNumber('zz.9', 36) // "1295.25" -z = x.plus(y) // "1306.25" -``` - -A BigNumber is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new BigNumber(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a BigNumber can be chained. - -```javascript -x.dividedBy(y).plus(z).times(9).floor() -x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil() -``` - -Many method names have a shorter alias. - -```javascript -x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true -x.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true -``` - -Like JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods - -```javascript -x = new BigNumber(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -x.toNumber() // 255.5 -``` - - and a base can be specified for `toString`. - - ```javascript - x.toString(16) // "ff.8" - ``` - -There is also a `toFormat` method which may be useful for internationalisation - -```javascript -y = new BigNumber('1234567.898765') -y.toFormat(2) // "1,234,567.90" -``` - -The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor. - -The other arithmetic operations always give the exact result. - -```javascript -BigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) -// Alternatively, BigNumber.config( 10, 4 ); - -x = new BigNumber(2); -y = new BigNumber(3); -z = x.div(y) // "0.6666666667" -z.sqrt() // "0.8164965809" -z.pow(-3) // "3.3749999995" -z.toString(2) // "0.1010101011" -z.times(z) // "0.44444444448888888889" -z.times(z).round(10) // "0.4444444445" -``` - -There is a `toFraction` method with an optional *maximum denominator* argument - -```javascript -y = new BigNumber(355) -pi = y.dividedBy(113) // "3.1415929204" -pi.toFraction() // [ "7853982301", "2500000000" ] -pi.toFraction(1000) // [ "355", "113" ] -``` - -and `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values. - -```javascript -x = new BigNumber(NaN) // "NaN" -y = new BigNumber(Infinity) // "Infinity" -x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true -``` - -The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - - -```javascript -x = new BigNumber(-123.456); -x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - - -Multiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it. - -```javascript -// Set DECIMAL_PLACES for the original BigNumber constructor -BigNumber.config({ DECIMAL_PLACES: 10 }) - -// Create another BigNumber constructor, optionally passing in a configuration object -BN = BigNumber.another({ DECIMAL_PLACES: 5 }) - -x = new BigNumber(1) -y = new BN(1) - -x.div(3) // '0.3333333333' -y.div(3) // '0.33333' -``` - -For futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. - -## Test - -The *test* directory contains the test scripts for each method. - -The tests can be run with Node or a browser. For Node use - - $ npm test - -or - - $ node test/every-test - -To test a single method, e.g. - - $ node test/toFraction - -For the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. - -*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. - -## Versions - -This is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported. - -## Performance - -See the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory. - -## Build - -For Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed - - npm install uglify-js -g - -then - - npm run build - -will create *bignumber.min.js*. - -A source map will also be created in the *doc* directory. - -## Feedback - -Open an issue, or email - -Michael - -M8ch88l@gmail.com - -## Licence - -MIT. - -See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE). - -## Change Log - -####2.0.5 -* 25/03/2015 -* Amend README. Remove bitcoin address. - -####2.0.4 -* 25/03/2015 -* Critical bugfix #58: division. - -####2.0.3 -* 18/02/2015 -* Amend README. Add source map. - -####2.0.2 -* 18/02/2015 -* Correct links. - -####2.0.1 -* 18/02/2015 -* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods. -* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. -* Add an `another` method to enable multiple independent constructors to be created. -* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. -* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. -* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. -* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. -* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. -* Improve code quality. -* Improve documentation. - -####2.0.0 -* 29/12/2014 -* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. -* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. -* Store a BigNumber's coefficient in base 1e14, rather than base 10. -* Add fast path for integers to BigNumber constructor. -* Incorporate the library into the online documentation. - -####1.5.0 -* 13/11/2014 -* Add `toJSON` and `decimalPlaces` methods. - -####1.4.1 -* 08/06/2014 -* Amend README. - -####1.4.0 -* 08/05/2014 -* Add `toNumber`. - -####1.3.0 -* 08/11/2013 -* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. -* Maximum radix to 64. - -####1.2.1 -* 17/10/2013 -* Sign of zero when x < 0 and x + (-x) = 0. - -####1.2.0 -* 19/9/2013 -* Throw Error objects for stack. - -####1.1.1 -* 22/8/2013 -* Show original value in constructor error message. - -####1.1.0 -* 1/8/2013 -* Allow numbers with trailing radix point. - -####1.0.1 -* Bugfix: error messages with incorrect method name - -####1.0.0 -* 8/11/2012 -* Initial release diff --git a/node_modules/web3/bower/bignumber.js/bignumber.js b/node_modules/web3/bower/bignumber.js/bignumber.js deleted file mode 100644 index 4dbe3cd..0000000 --- a/node_modules/web3/bower/bignumber.js/bignumber.js +++ /dev/null @@ -1,2667 +0,0 @@ -/*! bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.5 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base/2 - - n = mathfloor( base / ( yc[0] + 1 ) ); - - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - cmp = compare( prod, rem, prodL, remL ); - - // product > remainder. - if ( cmp == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - } - } else { - - // cmp is -1. - // If n is 0, there is no need to compare yc and rem again - // below, so change cmp to 1 to avoid it. - // If n is 1, compare yc and rem again below. - if ( n == 0 ) cmp = n = 1; - prod = yc.slice(); - } - - prodL = prod.length; - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - while ( ( cmp = compare( yc, rem, yL, remL ) ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( cmp && rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); diff --git a/node_modules/web3/bower/bignumber.js/bignumber.min.js b/node_modules/web3/bower/bignumber.js/bignumber.min.js deleted file mode 100644 index 982112e..0000000 --- a/node_modules/web3/bower/bignumber.js/bignumber.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */ -!function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,k);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+O.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,b,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&L(M,b,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=k;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=O.charAt(g[d++]));e=l(e,u)}return e}function _(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:k,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&B>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||B>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function x(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[n%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==N&&(a[0]=1));break}if(a[l]+=s,a[l]!=N)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(k=0|e),r[n]=k,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(B=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(B=-($=0|(0>e?-e:e)))),r[n]=[B,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?F:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h||"object"!=typeof h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return x(arguments,T.lt)},a.min=function(){return x(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,b,O,S,R,A,E,D,_,x,F=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*F:F/0:0/0);for(v=new a(F),b=v.c=[],c=i.e-o.e,F=u+c+1,f||(f=N,c=t(i.e/y)-t(o.e/y),F=F/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>F)b.push(1),g=!0;else{for(E=I.length,_=L.length,h=0,F+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),_=L.length,E=I.length),A=_,O=I.slice(0,_),S=O.length;_>S;O[S++]=0);x=L.slice(),x.unshift(0),D=L[0],L[1]>=f/2&&D++;do{if(p=0,l=n(L,O,_,S),0>l){if(R=O[0],_!=S&&(R=R*f+(O[1]||0)),p=m(R/D),p>1?(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=O.length,l=n(d,O,w,S),1==l&&(p--,r(d,w>_?x:L,w,f))):(0==p&&(l=p=1),d=L.slice()),w=d.length,S>w&&d.unshift(0),r(O,d,S,f),S=O.length,-1==l)for(;(l=n(L,O,_,S))<1;)p++,r(O,S>_?x:L,S,f),S=O.length}else 0===l&&(p++,O=[0]);b[h++]=p,l&&O[0]?O[S++]=I[A]||0:(O=[I[A]],S=1)}while((A++=10;F/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])(?=\w[\w.]*$)/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,k)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(0/0);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:0/0);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==k?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=N-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/N|0,f[n]%=N;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:k),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?0/0:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=O,O=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=N,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=O[--s]%v,h=O[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:k,e?U(t,e,n):t},T.toExponential=function(e,n){return _(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return _(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=_(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,k).minus(g).abs().cmp(C(f,t,o,k).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){var e=this;return+e||(e.s?0*e.s:0/0)},T.toPower=T.pow=function(e){var n,t,r=m(0>e?-e:+e),i=this;if(!H(e,-S,S,23,"exponent")&&(!isFinite(e)||r>S&&(e/=0)||parseFloat(e)!=e&&!(e=0/0)))return new a(Math.pow(+i,e));for(n=J?d(J/y+2):0,t=new a(q);;){if(r%2){if(t=t.times(i),!t.c)break;n&&t.c.length>n&&(t.c.length=n)}if(r=m(r/2),!r)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>e&&(t=q.div(t)),n?U(t,J,k):t},T.toPrecision=function(e,n){return _(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):B>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=O.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",b="number type has more than 15 significant digits",O="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",N=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if(a=n(),"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e.BigNumber=a}(this); -//# sourceMappingURL=doc/bignumber.js.map \ No newline at end of file diff --git a/node_modules/web3/bower/bignumber.js/doc/API.html b/node_modules/web3/bower/bignumber.js/doc/API.html deleted file mode 100644 index e0b173f..0000000 --- a/node_modules/web3/bower/bignumber.js/doc/API.html +++ /dev/null @@ -1,2160 +0,0 @@ - - - - - - -bignumber.js API - - - - - - -
        - -

        bignumber.js

        - -

        A JavaScript library for arbitrary-precision arithmetic.

        -

        Hosted on GitHub.

        - -

        API

        - -

        - See the README on GitHub for a - quick-start introduction. -

        -

        - In all examples below, var and semicolons are not shown, and if a commented-out - value is in quotes it means toString has been called on the preceding expression. -

        - - -

        CONSTRUCTOR

        - -
        - BigNumberBigNumber(value [, base]) ⇒ BigNumber -
        -
        -
        value
        -
        - number|string|BigNumber: see RANGE for - range. -
        -
        - A numeric value. -
        -
        - Legitimate values include ±0, ±Infinity and - NaN. -
        -
        - Values of type number with more than 15 significant digits are - considered invalid (if ERRORS is true) as calling - toString or valueOf on - such numbers may not result in the intended value. -
        console.log( 823456789123456.3 );    // 823456789123456.2
        -
        -
        - There is no limit to the number of digits of a value of type string (other than - that of JavaScript's maximum array size). -
        -
        - Decimal string values may be in exponential, as well as normal (fixed-point) notation. - Non-decimal values must be in normal notation. -
        -
        - String values in hexadecimal literal form, e.g. '0xff', are valid, as are - string values with the octal and binary prefixs '0o' and '0b'. - String values in octal literal form without the prefix will be interpreted as - decimals, e.g. '011' is interpreted as 11, not 9. -
        -
        Values in any base may have fraction digits.
        -
        - For bases from 10 to 36, lower and/or upper case letters can be - used to represent values from 10 to 35. -
        -
        - For bases above 36, a-z represents values from 10 to - 35, A-Z from 36 to 61, and - $ and _ represent 62 and 63 respectively - (this can be changed by editing the ALPHABET variable near the top of the - source file). -
        -
        -
        -
        base
        -
        - number: integer, 2 to 64 inclusive -
        -
        The base of value.
        -
        - If base is omitted, or is null or undefined, base - 10 is assumed. -
        -
        -
        -

        Returns a new instance of a BigNumber object.

        -

        - If a base is specified, the value is rounded according to - the current DECIMAL_PLACES and - ROUNDING_MODE configuration. -

        -

        - See Errors for the treatment of an invalid value or - base. -

        -
        -x = new BigNumber(9)                       // '9'
        -y = new BigNumber(x)                       // '9'
        -
        -// 'new' is optional if ERRORS is false
        -BigNumber(435.345)                         // '435.345'
        -
        -new BigNumber('5032485723458348569331745.33434346346912144534543')
        -new BigNumber('4.321e+4')                  // '43210'
        -new BigNumber('-735.0918e-430')            // '-7.350918e-428'
        -new BigNumber(Infinity)                    // 'Infinity'
        -new BigNumber(NaN)                         // 'NaN'
        -new BigNumber('.5')                        // '0.5'
        -new BigNumber('+2')                        // '2'
        -new BigNumber(-10110100.1, 2)              // '-180.5'
        -new BigNumber(-0b10110100.1)               // '-180.5'
        -new BigNumber('123412421.234324', 5)       // '607236.557696'
        -new BigNumber('ff.8', 16)                  // '255.5'
        -new BigNumber('0xff.8')                    // '255.5'
        -

        - The following throws 'not a base 2 number' if - ERRORS is true, otherwise it returns a BigNumber with value - NaN. -

        -
        new BigNumber(9, 2)
        -

        - The following throws 'number type has more than 15 significant digits' if - errors is true, otherwise it returns a BigNumber with value - 96517860459076820. -

        -
        new BigNumber(96517860459076817.4395)
        -

        - The following throws 'not a number' if ERRORS - is true, otherwise it returns a BigNumber with value NaN. -

        -
        new BigNumber('blurgh')
        -

        - A value is only rounded by the constructor if a base is specified. -

        -
        BigNumber.config({ DECIMAL_PLACES: 5 })
        -new BigNumber(1.23456789)                  // '1.23456789'
        -new BigNumber(1.23456789, 10)              // '1.23457'
        - - - -

        Methods

        -

        The static methods of a BigNumber constructor.

        - - - - -
        - another.another([obj]) ⇒ BigNumber constructor -
        -

        obj: object

        -

        - Returns a new independent BigNumber constructor with configuration as described by - obj (see config), or with the default - configuration if obj is null or undefined. -

        -
        BigNumber.config({ DECIMAL_PLACES: 5 })
        -BN = BigNumber.another({ DECIMAL_PLACES: 9 })
        -
        -x = new BigNumber(1)
        -y = new BN(1)
        -
        -x.div(3)                        // 0.33333
        -y.div(3)                        // 0.333333333
        -
        -// BN = BigNumber.another({ DECIMAL_PLACES: 9 }) is equivalent to:
        -BN = BigNumber.another()
        -BN.config({ DECIMAL_PLACES: 9 })
        - - - -
        configconfig([obj]) ⇒ object
        -

        - obj: object: an object that contains some or all of the following - properties. -

        -

        Configures the 'global' settings for this particular BigNumber constructor.

        -

        Note: the configuration can also be supplied as an argument list, see below.

        -
        -
        DECIMAL_PLACES
        -
        - number: integer, 0 to 1e+9 inclusive
        - Default value: 20 -
        -
        - The maximum number of decimal places of the results of operations involving - division, i.e. division, square root and base conversion operations, and power - operations with negative exponents.
        -
        -
        -
        BigNumber.config({ DECIMAL_PLACES: 5 })
        -BigNumber.config(5)    // equivalent
        -
        - - - -
        ROUNDING_MODE
        -
        - number: integer, 0 to 8 inclusive
        - Default value: 4 (ROUND_HALF_UP) -
        -
        - The rounding mode used in the above operations and the default rounding mode of - round, - toExponential, - toFixed, - toFormat and - toPrecision. -
        -
        The modes are available as enumerated properties of the BigNumber constructor.
        -
        -
        BigNumber.config({ ROUNDING_MODE: 0 })
        -BigNumber.config(null, BigNumber.ROUND_UP)    // equivalent
        -
        - - - -
        EXPONENTIAL_AT
        -
        - number: integer, magnitude 0 to 1e+9 inclusive, or -
        - number[]: [ integer -1e+9 to 0 inclusive, integer - 0 to 1e+9 inclusive ]
        - Default value: [-7, 20] -
        -
        - The exponent value(s) at which toString returns exponential notation. -
        -
        - If a single number is assigned, the value is the exponent magnitude.
        - If an array of two numbers is assigned then the first number is the negative exponent - value at and beneath which exponential notation is used, and the second number is the - positive exponent value at and above which the same. -
        -
        - For example, to emulate JavaScript numbers in terms of the exponent values at which they - begin to use exponential notation, use [-7, 20]. -
        -
        -
        BigNumber.config({ EXPONENTIAL_AT: 2 })
        -new BigNumber(12.3)         // '12.3'        e is only 1
        -new BigNumber(123)          // '1.23e+2'
        -new BigNumber(0.123)        // '0.123'       e is only -1
        -new BigNumber(0.0123)       // '1.23e-2'
        -
        -BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
        -new BigNumber(123456789)    // '123456789'   e is only 8
        -new BigNumber(0.000000123)  // '1.23e-7'
        -
        -// Almost never return exponential notation:
        -BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
        -
        -// Always return exponential notation:
        -BigNumber.config({ EXPONENTIAL_AT: 0 })
        -
        -
        - Regardless of the value of EXPONENTIAL_AT, the toFixed method - will always return a value in normal notation and the toExponential method - will always return a value in exponential form. -
        -
        - Calling toString with a base argument, e.g. toString(10), will - also always return normal notation. -
        - - - -
        RANGE
        -
        - number: integer, magnitude 1 to 1e+9 inclusive, or -
        - number[]: [ integer -1e+9 to -1 inclusive, integer - 1 to 1e+9 inclusive ]
        - Default value: [-1e+9, 1e+9] -
        -
        - The exponent value(s) beyond which overflow to Infinity and underflow to - zero occurs. -
        -
        - If a single number is assigned, it is the maximum exponent magnitude: values wth a - positive exponent of greater magnitude become Infinity and those with a - negative exponent of greater magnitude become zero. -
        - If an array of two numbers is assigned then the first number is the negative exponent - limit and the second number is the positive exponent limit. -
        -
        - For example, to emulate JavaScript numbers in terms of the exponent values at which they - become zero and Infinity, use [-324, 308]. -
        -
        -
        BigNumber.config({ RANGE: 500 })
        -BigNumber.config().RANGE     // [ -500, 500 ]
        -new BigNumber('9.999e499')   // '9.999e+499'
        -new BigNumber('1e500')       // 'Infinity'
        -new BigNumber('1e-499')      // '1e-499'
        -new BigNumber('1e-500')      // '0'
        -
        -BigNumber.config({ RANGE: [-3, 4] })
        -new BigNumber(99999)         // '99999'      e is only 4
        -new BigNumber(100000)        // 'Infinity'   e is 5
        -new BigNumber(0.001)         // '0.01'       e is only -3
        -new BigNumber(0.0001)        // '0'          e is -4
        -
        -
        - The largest possible magnitude of a finite BigNumber is - 9.999...e+1000000000.
        - The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. -
        - - - -
        ERRORS
        -
        - boolean|number: true, false, 0 or - 1.
        - Default value: true -
        -
        - The value that determines whether BigNumber Errors are thrown.
        - If ERRORS is false, no errors will be thrown. -
        -
        See Errors.
        -
        BigNumber.config({ ERRORS: false })
        - - - -
        CRYPTO
        -
        - boolean|number: true, false, 0 or - 1.
        - Default value: false -
        -
        - The value that determines whether cryptographically-secure pseudo-random number - generation is used. -
        -
        - If CRYPTO is set to true then the - random method will generate random digits using - crypto.getRandomValues in browsers that support it, or - crypto.randomBytes if using a version of Node.js that supports it. -
        -
        - If neither function is supported by the host environment then attempting to set - CRYPTO to true will fail, and if ERRORS - is true an exception will be thrown. -
        -
        - If CRYPTO is false then the source of randomness used will be - Math.random (which is assumed to generate at least 30 bits of - randomness). -
        -
        See random.
        -
        -
        BigNumber.config({ CRYPTO: true })
        -BigNumber.config().CRYPTO       // true
        -BigNumber.random()              // 0.54340758610486147524
        -
        - - - -
        MODULO_MODE
        -
        - number: integer, 0 to 9 inclusive
        - Default value: 1 (ROUND_DOWN) -
        -
        The modulo mode used when calculating the modulus: a mod n.
        -
        - The quotient, q = a / n, is calculated according to the - ROUNDING_MODE that corresponds to the chosen - MODULO_MODE. -
        -
        The remainder, r, is calculated as: r = a - n * q.
        -
        - The modes that are most commonly used for the modulus/remainder operation are shown in - the following table. Although the other rounding modes can be used, they may not give - useful results. -
        -
        - - - - - - - - - - - - - - - - - - - - - - -
        PropertyValueDescription
        ROUND_UP0 - The remainder is positive if the dividend is negative, otherwise it is negative. -
        ROUND_DOWN1 - The remainder has the same sign as the dividend.
        - This uses 'truncating division' and matches the behaviour of JavaScript's - remainder operator %. -
        ROUND_FLOOR3 - The remainder has the same sign as the divisor.
        - This matches Python's % operator. -
        ROUND_HALF_EVEN6The IEEE 754 remainder function.
        EUCLID9 - The remainder is always positive. Euclidian division:
        - q = sign(n) * floor(a / abs(n)) -
        -
        -
        - The rounding/modulo modes are available as enumerated properties of the BigNumber - constructor. -
        -
        See modulo.
        -
        -
        BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
        -BigNumber.config({ MODULO_MODE: 9 })          // equivalent
        -
        - - - -
        POW_PRECISION
        -
        - number: integer, 0 to 1e+9 inclusive.
        - Default value: 100 -
        -
        - The maximum number of significant digits of the result of the power operation. -
        -
        If set to 0, the number of signifcant digits will not be limited.
        -
        See toPower.
        -
        BigNumber.config({ POW_PRECISION: 100 })
        - - - -
        FORMAT
        -
        object
        -
        - The FORMAT object configures the format of the string returned by the - toFormat method. -
        -
        - The example below shows the properties of the FORMAT object that are - recognised, and their default values. -
        -
        - Unlike the other configuration properties, the values of the properties of the - FORMAT object will not be checked for validity. The existing - FORMAT object will simply be replaced by the object that is passed in. - Note that all the properties shown below do not have to be included. -
        -
        See toFormat for examples of usage.
        -
        -
        -BigNumber.config({
        -    FORMAT: {
        -        // the decimal separator
        -        decimalSeparator: '.',
        -        // the grouping separator of the integer part
        -        groupSeparator: ',',
        -        // the primary grouping size of the integer part
        -        groupSize: 3,
        -        // the secondary grouping size of the integer part
        -        secondaryGroupSize: 0,
        -        // the grouping separator of the fraction part
        -        fractionGroupSeparator: ' ',
        -        // the grouping size of the fraction part
        -        fractionGroupSize: 0
        -    }
        -});
        -
        -
        -
        -

        Returns an object with the above properties and their current values.

        -

        - If the value to be assigned to any of the above properties is null or - undefined it is ignored. -

        -

        See Errors for the treatment of invalid values.

        -
        -BigNumber.config({
        -    DECIMAL_PLACES: 40,
        -    ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
        -    EXPONENTIAL_AT: [-10, 20],
        -    RANGE: [-500, 500],
        -    ERRORS: true,
        -    CRYPTO: true,
        -    MODULO_MODE: BigNumber.ROUND_FLOOR,
        -    POW_PRECISION: 80,
        -    FORMAT: {
        -        groupSize: 3,
        -        groupSeparator: ' ',
        -        decimalSeparator: ','
        -    }
        -});
        -
        -// Alternatively but equivalently (excluding FORMAT):
        -BigNumber.config( 40, 7, [-10, 20], 500, 1, 1, 3, 80 )
        -
        -obj = BigNumber.config();
        -obj.ERRORS       // true
        -obj.RANGE        // [-500, 500]
        - - - -
        - max.max([arg1 [, arg2, ...]]) ⇒ BigNumber -
        -

        - arg1, arg2, ...: number|string|BigNumber
        - See BigNumber for further parameter details. -

        -

        - Returns a BigNumber whose value is the maximum of arg1, - arg2,... . -

        -

        The argument to this method can also be an array of values.

        -

        The return value is always exact and unrounded.

        -
        x = new BigNumber('3257869345.0378653')
        -BigNumber.max(4e9, x, '123456789.9')          // '4000000000'
        -
        -arr = [12, '13', new BigNumber(14)]
        -BigNumber.max(arr)                            // '14'
        - - - -
        - min.min([arg1 [, arg2, ...]]) ⇒ BigNumber -
        -

        - arg1, arg2, ...: number|string|BigNumber
        - See BigNumber for further parameter details. -

        -

        - Returns a BigNumber whose value is the minimum of arg1, - arg2,... . -

        -

        The argument to this method can also be an array of values.

        -

        The return value is always exact and unrounded.

        -
        x = new BigNumber('3257869345.0378653')
        -BigNumber.min(4e9, x, '123456789.9')          // '123456789.9'
        -
        -arr = [2, new BigNumber(-14), '-15.9999', -12]
        -BigNumber.min(arr)                            // '-15.9999'
        - - - -
        - random.random([dp]) ⇒ BigNumber -
        -

        dp: number: integer, 0 to 1e+9 inclusive

        -

        - Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and - less than 1. -

        -

        - The return value will have dp decimal places (or less if trailing zeros are - produced).
        - If dp is omitted then the number of decimal places will default to the current - DECIMAL_PLACES setting. -

        -

        - Depending on the value of this BigNumber constructor's - CRYPTO setting and the support for the - crypto object in the host environment, the random digits of the return value are - generated by either Math.random (fastest), crypto.getRandomValues - (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). -

        -

        - If CRYPTO is true, i.e. one of the - crypto methods is to be used, the value of a returned BigNumber should be - cryptographically-secure and statistically indistinguishable from a random value. -

        -
        BigNumber.config({ DECIMAL_PLACES: 10 })
        -BigNumber.random()              // '0.4117936847'
        -BigNumber.random(20)            // '0.78193327636914089009'
        - - - -

        Properties

        -

        - The library's enumerated rounding modes are stored as properties of the constructor.
        - (They are not referenced internally by the library itself.) -

        -

        - Rounding modes 0 to 6 (inclusive) are the same as those of Java's - BigDecimal class. -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        PropertyValueDescription
        ROUND_UP0Rounds away from zero
        ROUND_DOWN1Rounds towards zero
        ROUND_CEIL2Rounds towards Infinity
        ROUND_FLOOR3Rounds towards -Infinity
        ROUND_HALF_UP4 - Rounds towards nearest neighbour.
        - If equidistant, rounds away from zero -
        ROUND_HALF_DOWN5 - Rounds towards nearest neighbour.
        - If equidistant, rounds towards zero -
        ROUND_HALF_EVEN6 - Rounds towards nearest neighbour.
        - If equidistant, rounds towards even neighbour -
        ROUND_HALF_CEIL7 - Rounds towards nearest neighbour.
        - If equidistant, rounds towards Infinity -
        ROUND_HALF_FLOOR8 - Rounds towards nearest neighbour.
        - If equidistant, rounds towards -Infinity -
        -
        -BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
        -BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
        - - -

        INSTANCE

        - -

        Methods

        -

        The methods inherited by a BigNumber instance from its constructor's prototype object.

        -

        A BigNumber is immutable in the sense that it is not changed by its methods.

        -

        - The treatment of ±0, ±Infinity and NaN is - consistent with how JavaScript treats these values. -

        -

        - Many method names have a shorter alias.
        - (Internally, the library always uses the shorter method names.) -

        - - - -
        absoluteValue.abs() ⇒ BigNumber
        -

        - Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of - this BigNumber. -

        -

        The return value is always exact and unrounded.

        -
        -x = new BigNumber(-0.8)
        -y = x.absoluteValue()           // '0.8'
        -z = y.abs()                     // '0.8'
        - - - -
        ceil.ceil() ⇒ BigNumber
        -

        - Returns a BigNumber whose value is the value of this BigNumber rounded to - a whole number in the direction of positive Infinity. -

        -
        -x = new BigNumber(1.3)
        -x.ceil()                        // '2'
        -y = new BigNumber(-1.8)
        -y.ceil()                        // '-1'
        - - - -
        comparedTo.cmp(n [, base]) ⇒ number
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        - - - - - - - - - - - - - - - - - - -
        Returns 
        1If the value of this BigNumber is greater than the value of n
        -1If the value of this BigNumber is less than the value of n
        0If this BigNumber and n have the same value
        nullIf the value of either this BigNumber or n is NaN
        -
        -x = new BigNumber(Infinity)
        -y = new BigNumber(5)
        -x.comparedTo(y)                 // 1
        -x.comparedTo(x.minus(1))        // 0
        -y.cmp(NaN)                      // null
        -y.cmp('110', 2)                 // -1
        - - - -
        decimalPlaces.dp() ⇒ number
        -

        - Return the number of decimal places of the value of this BigNumber, or null if - the value of this BigNumber is ±Infinity or NaN. -

        -
        -x = new BigNumber(123.45)
        -x.decimalPlaces()               // 2
        -y = new BigNumber('9.9e-101')
        -y.dp()                          // 102
        - - - -
        dividedBy.div(n [, base]) ⇒ BigNumber -
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        - Returns a BigNumber whose value is the value of this BigNumber divided by - n, rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

        -
        -x = new BigNumber(355)
        -y = new BigNumber(113)
        -x.dividedBy(y)                  // '3.14159292035398230088'
        -x.div(5)                        // '71'
        -x.div(47, 16)                   // '5'
        - - - -
        - dividedToIntegerBy.divToInt(n [, base]) ⇒ - BigNumber -
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        - Return a BigNumber whose value is the integer part of dividing the value of this BigNumber by - n. -

        -
        -x = new BigNumber(5)
        -y = new BigNumber(3)
        -x.dividedToIntegerBy(y)         // '1'
        -x.divToInt(0.7)                 // '7'
        -x.divToInt('0.f', 16)           // '5'
        - - - -
        equals.eq(n [, base]) ⇒ boolean
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        - Returns true if the value of this BigNumber equals the value of n, - otherwise returns false.
        - As with JavaScript, NaN does not equal NaN. -

        -

        Note: This method uses the comparedTo method internally.

        -
        -0 === 1e-324                    // true
        -x = new BigNumber(0)
        -x.equals('1e-324')              // false
        -BigNumber(-0).eq(x)             // true  ( -0 === 0 )
        -BigNumber(255).eq('ff', 16)     // true
        -
        -y = new BigNumber(NaN)
        -y.equals(NaN)                   // false
        - - - -
        floor.floor() ⇒ BigNumber
        -

        - Returns a BigNumber whose value is the value of this BigNumber rounded to a whole number in - the direction of negative Infinity. -

        -
        -x = new BigNumber(1.8)
        -x.floor()                       // '1'
        -y = new BigNumber(-1.3)
        -y.floor()                       // '-2'
        - - - -
        greaterThan.gt(n [, base]) ⇒ boolean
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        - Returns true if the value of this BigNumber is greater than the value of - n, otherwise returns false. -

        -

        Note: This method uses the comparedTo method internally.

        -
        -0.1 > (0.3 - 0.2)                           // true
        -x = new BigNumber(0.1)
        -x.greaterThan(BigNumber(0.3).minus(0.2))    // false
        -BigNumber(0).gt(x)                          // false
        -BigNumber(11, 3).gt(11.1, 2)                // true
        - - - -
        - greaterThanOrEqualTo.gte(n [, base]) ⇒ boolean -
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        - Returns true if the value of this BigNumber is greater than or equal to the value - of n, otherwise returns false. -

        -

        Note: This method uses the comparedTo method internally.

        -
        -(0.3 - 0.2) >= 0.1                   // false
        -x = new BigNumber(0.3).minus(0.2)
        -x.greaterThanOrEqualTo(0.1)          // true
        -BigNumber(1).gte(x)                  // true
        -BigNumber(10, 18).gte('i', 36)       // true
        - - - -
        isFinite.isFinite() ⇒ boolean
        -

        - Returns true if the value of this BigNumber is a finite number, otherwise - returns false. -

        -

        - The only possible non-finite values of a BigNumber are NaN, Infinity - and -Infinity. -

        -
        -x = new BigNumber(1)
        -x.isFinite()                    // true
        -y = new BigNumber(Infinity)
        -y.isFinite()                    // false
        -

        - Note: The native method isFinite() can be used if - n <= Number.MAX_VALUE. -

        - - - -
        isInteger.isInt() ⇒ boolean
        -

        - Returns true if the value of this BigNumber is a whole number, otherwise returns - false. -

        -
        -x = new BigNumber(1)
        -x.isInteger()                   // true
        -y = new BigNumber(123.456)
        -y.isInt()                       // false
        - - - -
        isNaN.isNaN() ⇒ boolean
        -

        - Returns true if the value of this BigNumber is NaN, otherwise - returns false. -

        -
        -x = new BigNumber(NaN)
        -x.isNaN()                       // true
        -y = new BigNumber('Infinity')
        -y.isNaN()                       // false
        -

        Note: The native method isNaN() can also be used.

        - - - -
        isNegative.isNeg() ⇒ boolean
        -

        - Returns true if the value of this BigNumber is negative, otherwise returns - false. -

        -
        -x = new BigNumber(-0)
        -x.isNegative()                  // true
        -y = new BigNumber(2)
        -y.isNeg                         // false
        -

        Note: n < 0 can be used if n <= -Number.MIN_VALUE.

        - - - -
        isZero.isZero() ⇒ boolean
        -

        - Returns true if the value of this BigNumber is zero or minus zero, otherwise - returns false. -

        -
        -x = new BigNumber(-0)
        -x.isZero() && x.isNeg()         // true
        -y = new BigNumber(Infinity)
        -y.isZero()                      // false
        -

        Note: n == 0 can be used if n >= Number.MIN_VALUE.

        - - - -
        lessThan.lt(n [, base]) ⇒ boolean
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        - Returns true if the value of this BigNumber is less than the value of - n, otherwise returns false. -

        -

        Note: This method uses the comparedTo method internally.

        -
        -(0.3 - 0.2) < 0.1                     // true
        -x = new BigNumber(0.3).minus(0.2)
        -x.lessThan(0.1)                       // false
        -BigNumber(0).lt(x)                    // true
        -BigNumber(11.1, 2).lt(11, 3)          // true
        - - - -
        - lessThanOrEqualTo.lte(n [, base]) ⇒ boolean -
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        - Returns true if the value of this BigNumber is less than or equal to the value of - n, otherwise returns false. -

        -

        Note: This method uses the comparedTo method internally.

        -
        -0.1 <= (0.3 - 0.2)                                // false
        -x = new BigNumber(0.1)
        -x.lessThanOrEqualTo(BigNumber(0.3).minus(0.2))    // true
        -BigNumber(-1).lte(x)                              // true
        -BigNumber(10, 18).lte('i', 36)                    // true
        - - - -
        - minus.minus(n [, base]) ⇒ BigNumber -
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        Returns a BigNumber whose value is the value of this BigNumber minus n.

        -

        The return value is always exact and unrounded.

        -
        -0.3 - 0.1                       // 0.19999999999999998
        -x = new BigNumber(0.3)
        -x.minus(0.1)                    // '0.2'
        -x.minus(0.6, 20)                // '0'
        - - - -
        modulo.mod(n [, base]) ⇒ BigNumber
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        - Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. - the integer remainder of dividing this BigNumber by n. -

        -

        - The value returned, and in particular its sign, is dependent on the value of the - MODULO_MODE setting of this BigNumber constructor. - If it is 1 (default value), the result will have the same sign as this BigNumber, - and it will match that of Javascript's % operator (within the limits of double - precision) and BigDecimal's remainder method. -

        -

        The return value is always exact and unrounded.

        -

        - See MODULO_MODE for a description of the other - modulo modes. -

        -
        -1 % 0.9                         // 0.09999999999999998
        -x = new BigNumber(1)
        -x.modulo(0.9)                   // '0.1'
        -y = new BigNumber(33)
        -y.mod('a', 33)                  // '3'
        - - - -
        negated.neg() ⇒ BigNumber
        -

        - Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by - -1. -

        -
        -x = new BigNumber(1.8)
        -x.negated()                     // '-1.8'
        -y = new BigNumber(-1.3)
        -y.neg()                         // '1.3'
        - - - -
        plus.plus(n [, base]) ⇒ BigNumber
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        Returns a BigNumber whose value is the value of this BigNumber plus n.

        -

        The return value is always exact and unrounded.

        -
        -0.1 + 0.2                       // 0.30000000000000004
        -x = new BigNumber(0.1)
        -y = x.plus(0.2)                 // '0.3'
        -BigNumber(0.7).plus(x).plus(y)  // '1'
        -x.plus('0.1', 8)                // '0.225'
        - - - -
        precision.sd([z]) ⇒ number
        -

        - z: boolean|number: true, false, 0 - or 1 -

        -

        Returns the number of significant digits of the value of this BigNumber.

        -

        - If z is true or 1 then any trailing zeros of the - integer part of a number are counted as significant digits, otherwise they are not. -

        -
        -x = new BigNumber(1.234)
        -x.precision()                   // 4
        -y = new BigNumber(987000)
        -y.sd()                          // 3
        -y.sd(true)                      // 6
        - - - -
        round.round([dp [, rm]]) ⇒ BigNumber
        -

        - dp: number: integer, 0 to 1e+9 inclusive
        - rm: number: integer, 0 to 8 inclusive -

        -

        - Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - rm to a maximum of dp decimal places. -

        -

        - if dp is omitted, or is null or undefined, the - return value is n rounded to a whole number.
        - if rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

        -

        - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

        -
        -x = 1234.56
        -Math.round(x)                             // 1235
        -
        -y = new BigNumber(x)
        -y.round()                                 // '1235'
        -y.round(1)                                // '1234.6'
        -y.round(2)                                // '1234.56'
        -y.round(10)                               // '1234.56'
        -y.round(0, 1)                             // '1234'
        -y.round(0, 6)                             // '1235'
        -y.round(1, 1)                             // '1234.5'
        -y.round(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
        -y                                         // '1234.56'
        - - - -
        shift.shift(n) ⇒ BigNumber
        -

        - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

        -

        - Returns a BigNumber whose value is the value of this BigNumber shifted n places. -

        - The shift is of the decimal point, i.e. of powers of ten, and is to the left if n - is negative or to the right if n is positive. -

        -

        The return value is always exact and unrounded.

        -
        -x = new BigNumber(1.23)
        -x.shift(3)                      // '1230'
        -x.shift(-3)                     // '0.00123'
        - - - -
        squareRoot.sqrt() ⇒ BigNumber
        -

        - Returns a BigNumber whose value is the square root of the value of this BigNumber, - rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

        -

        - The return value will be correctly rounded, i.e. rounded as if the result was first calculated - to an infinite number of correct digits before rounding. -

        -
        -x = new BigNumber(16)
        -x.squareRoot()                  // '4'
        -y = new BigNumber(3)
        -y.sqrt()                        // '1.73205080756887729353'
        - - - -
        times.times(n [, base]) ⇒ BigNumber
        -

        - n: number|string|BigNumber
        - base: number
        - See BigNumber for further parameter details. -

        -

        Returns a BigNumber whose value is the value of this BigNumber times n.

        -

        The return value is always exact and unrounded.

        -
        -0.6 * 3                         // 1.7999999999999998
        -x = new BigNumber(0.6)
        -y = x.times(3)                  // '1.8'
        -BigNumber('7e+500').times(y)    // '1.26e+501'
        -x.times('-a', 16)               // '-6'
        - - - -
        - toDigits.toDigits([sd [, rm]]) ⇒ BigNumber -
        -

        - sd: number: integer, 1 to 1e+9 inclusive.
        - rm: number: integer, 0 to 8 inclusive. -

        -

        - Returns a BigNumber whose value is the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

        -

        - If sd is omitted or is null or undefined, the return - value will not be rounded.
        - If rm is omitted or is null or undefined, - ROUNDING_MODE will be used. -

        -

        - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

        -
        -BigNumber.config({ precision: 5, rounding: 4 })
        -x = new BigNumber(9876.54321)
        -
        -x.toSignificantDigits()                          // '9876.5'
        -x.toSignificantDigits(6)                         // '9876.54'
        -x.toSignificantDigits(6, BigNumber.ROUND_UP)     // '9876.55'
        -x.toSD(2)                                        // '9900'
        -x.toSD(2, 1)                                     // '9800'
        -x                                                // '9876.54321'
        - - - -
        - toExponential.toExponential([dp [, rm]]) ⇒ string -
        -

        - dp: number: integer, 0 to 1e+9 inclusive
        - rm: number: integer, 0 to 8 inclusive -

        -

        - Returns a string representing the value of this BigNumber in exponential notation rounded - using rounding mode rm to dp decimal places, i.e with one digit - before the decimal point and dp digits after it. -

        -

        - If the value of this BigNumber in exponential notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

        -

        - If dp is omitted, or is null or undefined, the number - of digits after the decimal point defaults to the minimum number of digits necessary to - represent the value exactly.
        - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

        -

        - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

        -
        -x = 45.6
        -y = new BigNumber(x)
        -x.toExponential()               // '4.56e+1'
        -y.toExponential()               // '4.56e+1'
        -x.toExponential(0)              // '5e+1'
        -y.toExponential(0)              // '5e+1'
        -x.toExponential(1)              // '4.6e+1'
        -y.toExponential(1)              // '4.6e+1'
        -y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
        -x.toExponential(3)              // '4.560e+1'
        -y.toExponential(3)              // '4.560e+1'
        - - - -
        - toFixed.toFixed([dp [, rm]]) ⇒ string -
        -

        - dp: number: integer, 0 to 1e+9 inclusive
        - rm: number: integer, 0 to 8 inclusive -

        -

        - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm. -

        -

        - If the value of this BigNumber in normal notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

        -

        - Unlike Number.prototype.toFixed, which returns exponential notation if a number - is greater or equal to 1021, this method will always return normal - notation. -

        -

        - If dp is omitted or is null or undefined, the return - value will be unrounded and in normal notation. This is also unlike - Number.prototype.toFixed, which returns the value to zero decimal places.
        - It is useful when fixed-point notation is required and the current - EXPONENTIAL_AT setting causes - toString to return exponential notation.
        - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

        -

        - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

        -
        -x = 3.456
        -y = new BigNumber(x)
        -x.toFixed()                     // '3'
        -y.toFixed()                     // '3.456'
        -y.toFixed(0)                    // '3'
        -x.toFixed(2)                    // '3.46'
        -y.toFixed(2)                    // '3.46'
        -y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
        -x.toFixed(5)                    // '3.45600'
        -y.toFixed(5)                    // '3.45600'
        - - - -
        - toFormat.toFormat([dp [, rm]]) ⇒ string -
        -

        - dp: number: integer, 0 to 1e+9 inclusive
        - rm: number: integer, 0 to 8 inclusive -

        -

        -

        - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm, and formatted - according to the properties of the FORMAT object. -

        -

        - See the examples below for the properties of the - FORMAT object, their types and their usage. -

        -

        - If dp is omitted or is null or undefined, then the - return value is not rounded to a fixed number of decimal places.
        - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

        -

        - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

        -
        -format = {
        -    decimalSeparator: '.',
        -    groupSeparator: ',',
        -    groupSize: 3,
        -    secondaryGroupSize: 0,
        -    fractionGroupSeparator: ' ',
        -    fractionGroupSize: 0
        -}
        -BigNumber.config({ FORMAT: format })
        -
        -x = new BigNumber('123456789.123456789')
        -x.toFormat()                    // '123,456,789.123456789'
        -x.toFormat(1)                   // '123,456,789.1'
        -
        -// If a reference to the object assigned to FORMAT has been retained,
        -// the format properties can be changed directly
        -format.groupSeparator = ' '
        -format.fractionGroupSize = 5
        -x.toFormat()                    // '123 456 789.12345 6789'
        -
        -BigNumber.config({
        -    FORMAT: {
        -        decimalSeparator = ',',
        -        groupSeparator = '.',
        -        groupSize = 3,
        -        secondaryGroupSize = 2
        -    }
        -})
        -
        -x.toFormat(6)                   // '12.34.56.789,123'
        - - - -
        - toFraction.toFraction([max]) ⇒ [string, string] -
        -

        - max: number|string|BigNumber: integer >= 1 and < - Infinity -

        -

        - Returns a string array representing the value of this BigNumber as a simple fraction with an - integer numerator and an integer denominator. The denominator will be a positive non-zero - value less than or equal to max. -

        -

        - If a maximum denominator, max, is not specified, or is null or - undefined, the denominator will be the lowest value necessary to represent the - number exactly. -

        -

        - See Errors for the treatment of other non-integer or out of range - max values. -

        -
        -x = new BigNumber(1.75)
        -x.toFraction()                  // '7, 4'
        -
        -pi = new BigNumber('3.14159265358')
        -pi.toFraction()                 // '157079632679,50000000000'
        -pi.toFraction(100000)           // '312689, 99532'
        -pi.toFraction(10000)            // '355, 113'
        -pi.toFraction(100)              // '311, 99'
        -pi.toFraction(10)               // '22, 7'
        -pi.toFraction(1)                // '3, 1'
        - - - -
        toJSON.toJSON() ⇒ string
        -

        As valueOf.

        -
        -x = new BigNumber('177.7e+457')
        -y = new BigNumber(235.4325)
        -z = new BigNumber('0.0098074')
        -
        -// Serialize an array of three BigNumbers
        -str = JSON.stringify( [x, y, z] )
        -// "["1.777e+459","235.4325","0.0098074"]"
        -
        -// Return an array of three BigNumbers
        -JSON.parse(str, function (key, val) {
        -    return key === '' ? val : new BigNumber(val)
        -})
        - - - -
        toNumber.toNumber() ⇒ number
        -

        Returns the value of this BigNumber as a JavaScript number primitive.

        -

        - Type coercion with, for example, the unary plus operator will also work, except that a - BigNumber with the value minus zero will be converted to positive zero. -

        -
        -x = new BigNumber(456.789)
        -x.toNumber()                    // 456.789
        -+x                              // 456.789
        -
        -y = new BigNumber('45987349857634085409857349856430985')
        -y.toNumber()                    // 4.598734985763409e+34
        -
        -z = new BigNumber(-0)
        -1 / +z                          // Infinity
        -1 / z.toNumber()                // -Infinity
        - - - -
        toPower.pow(n) ⇒ BigNumber
        -

        - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

        -

        - Returns a BigNumber whose value is the value of this BigNumber raised to the power - n. -

        -

        - If n is negative the result is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

        -

        - If n is not an integer or is out of range: -

        -

        - If ERRORS is true a BigNumber Error is thrown,
        - else if n is greater than 9007199254740991, it is interpreted as - Infinity;
        - else if n is less than -9007199254740991, it is interpreted as - -Infinity;
        - else if n is otherwise a number, it is truncated to an integer;
        - else it is interpreted as NaN. -

        -

        - As the number of digits of the result of the power operation can grow so large so quickly, - e.g. 123.45610000 has over 50000 digits, the number of significant - digits calculated is limited to the value of the - POW_PRECISION setting (default value: - 100). -

        -

        - Set POW_PRECISION to 0 for an - unlimited number of significant digits to be calculated (this will cause the method to slow - dramatically for larger exponents). -

        -

        - Negative exponents will be calculated to the number of decimal places specified by - DECIMAL_PLACES (but not to more than - POW_PRECISION significant digits). -

        -
        -Math.pow(0.7, 2)                // 0.48999999999999994
        -x = new BigNumber(0.7)
        -x.toPower(2)                    // '0.49'
        -BigNumber(3).pow(-2)            // '0.11111111111111111111'
        - - - -
        - toPrecision.toPrecision([sd [, rm]]) ⇒ string -
        -

        - sd: number: integer, 1 to 1e+9 inclusive
        - rm: number: integer, 0 to 8 inclusive -

        -

        - Returns a string representing the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

        -

        - If sd is less than the number of digits necessary to represent the integer part - of the value in normal (fixed-point) notation, then exponential notation is used. -

        -

        - If sd is omitted, or is null or undefined, then the - return value is the same as n.toString().
        - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

        -

        - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

        -
        -x = 45.6
        -y = new BigNumber(x)
        -x.toPrecision()                 // '45.6'
        -y.toPrecision()                 // '45.6'
        -x.toPrecision(1)                // '5e+1'
        -y.toPrecision(1)                // '5e+1'
        -y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
        -y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
        -x.toPrecision(5)                // '45.600'
        -y.toPrecision(5)                // '45.600'
        - - - -
        toString.toString([base]) ⇒ string
        -

        base: number: integer, 2 to 64 inclusive

        -

        - Returns a string representing the value of this BigNumber in the specified base, or base - 10 if base is omitted or is null or - undefined. -

        -

        - For bases above 10, values from 10 to 35 are - represented by a-z (as with Number.prototype.toString), - 36 to 61 by A-Z, and 62 and - 63 by $ and _ respectively. -

        -

        - If a base is specified the value is rounded according to the current - DECIMAL_PLACES - and ROUNDING_MODE configuration. -

        -

        - If a base is not specified, and this BigNumber has a positive - exponent that is equal to or greater than the positive component of the - current EXPONENTIAL_AT setting, - or a negative exponent equal to or less than the negative component of the - setting, then exponential notation is returned. -

        -

        If base is null or undefined it is ignored.

        -

        - See Errors for the treatment of other non-integer or out of range - base values. -

        -
        -x = new BigNumber(750000)
        -x.toString()                    // '750000'
        -BigNumber.config({ EXPONENTIAL_AT: 5 })
        -x.toString()                    // '7.5e+5'
        -
        -y = new BigNumber(362.875)
        -y.toString(2)                   // '101101010.111'
        -y.toString(9)                   // '442.77777777777777777778'
        -y.toString(32)                  // 'ba.s'
        -
        -BigNumber.config({ DECIMAL_PLACES: 4 });
        -z = new BigNumber('1.23456789')
        -z.toString()                    // '1.23456789'
        -z.toString(10)                  // '1.2346'
        - - - -
        truncated.trunc() ⇒ BigNumber
        -

        - Returns a BigNumber whose value is the value of this BigNumber truncated to a whole number. -

        -
        -x = new BigNumber(123.456)
        -x.truncated()                   // '123'
        -y = new BigNumber(-12.3)
        -y.trunc()                       // '-12'
        - - - -
        valueOf.valueOf() ⇒ string
        -

        As toString, but does not accept a base argument.

        -
        -x = new BigNumber('1.777e+457')
        -x.valueOf()                     // '1.777e+457'
        - - - -

        Properties

        -

        A BigNumber is an object with three properties:

        - - - - - - - - - - - - - - - - - - - - - - - - - -
        PropertyDescriptionTypeValue
        ccoefficient*number[] Array of base 1e14 numbers
        eexponentnumberInteger, -1000000000 to 1000000000 inclusive
        ssignnumber-1 or 1
        -

        *significand

        -

        The value of any of the three properties may also be null.

        -

        - From v2.0.0 of this library, the value of the coefficient of a BigNumber is stored in a - normalised base 100000000000000 floating point format, as opposed to the base - 10 format used in v1.x.x -

        -

        - This change means the properties of a BigNumber are now best considered to be read-only. - Previously it was acceptable to change the exponent of a BigNumber by writing to its exponent - property directly, but this is no longer recommended as the number of digits in the first - element of the coefficient array is dependent on the exponent, so the coefficient would also - need to be altered. -

        -

        - Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are - not necessarily preserved. -

        -
        x = new BigNumber(0.123)              // '0.123'
        -x.toExponential()                     // '1.23e-1'
        -x.c                                   // '1,2,3'
        -x.e                                   // -1
        -x.s                                   // 1
        -
        -y = new Number(-123.4567000e+2)       // '-12345.67'
        -y.toExponential()                     // '-1.234567e+4'
        -z = new BigNumber('-123.4567000e+2')  // '-12345.67'
        -z.toExponential()                     // '-1.234567e+4'
        -z.c                                   // '1,2,3,4,5,6,7'
        -z.e                                   // 4
        -z.s                                   // -1
        - - - -

        Zero, NaN and Infinity

        -

        - The table below shows how ±0, NaN and - ±Infinity are stored. -

        - - - - - - - - - - - - - - - - - - - - - - - - - -
        ces
        ±0[0]0±1
        NaNnullnullnull
        ±Infinitynullnull±1
        -
        -x = new Number(-0)              // 0
        -1 / x == -Infinity              // true
        -
        -y = new BigNumber(-0)           // '0'
        -y.c                             // '0' ( [0].toString() )
        -y.e                             // 0
        -y.s                             // -1
        - - - -

        Errors

        -

        - The errors that are thrown are generic Error objects with name - BigNumber Error. -

        -

        - The table below shows the errors that may be thrown if ERRORS is - true, and the action taken if ERRORS is false. -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method(s)ERRORS: true
        Throw BigNumber Error
        ERRORS: false
        Action on invalid argument
        - - BigNumber
        - comparedTo
        - dividedBy
        - dividedToIntegerBy
        - equals
        - greaterThan
        - greaterThanOrEqualTo
        - lessThan
        - lessThanOrEqualTo
        - minus
        - modulo
        - plus
        - times -
        number type has more than
        15 significant digits
        Accept.
        not a base... numberSubstitute NaN.
        base not an integerTruncate to integer.
        Ignore if not a number.
        base out of rangeIgnore.
        not a number*Substitute NaN.
        anothernot an objectIgnore.
        configDECIMAL_PLACES not an integerTruncate to integer.
        Ignore if not a number.
        DECIMAL_PLACES out of rangeIgnore.
        ROUNDING_MODE not an integerTruncate to integer.
        Ignore if not a number.
        ROUNDING_MODE out of rangeIgnore.
        EXPONENTIAL_AT not an integer
        or not [integer, integer]
        Truncate to integer(s).
        Ignore if not number(s).
        EXPONENTIAL_AT out of range
        or not [negative, positive]
        Ignore.
        RANGE not an integer
        or not [integer, integer]
        Truncate to integer(s).
        Ignore if not number(s).
        RANGE cannot be zeroIgnore.
        RANGE out of range
        or not [negative, positive]
        Ignore.
        ERRORS not a boolean
        or binary digit
        Ignore.
        CRYPTO not a boolean
        or binary digit
        Ignore.
        CRYPTO crypto unavailableIgnore.
        MODULO_MODE not an integerTruncate to integer.
        Ignore if not a number.
        MODULO_MODE out of rangeIgnore.
        POW_PRECISION not an integerTruncate to integer.
        Ignore if not a number.
        POW_PRECISION out of rangeIgnore.
        FORMAT not an objectIgnore.
        precisionargument not a boolean
        or binary digit
        Ignore.
        rounddecimal places not an integerTruncate to integer.
        Ignore if not a number.
        decimal places out of rangeIgnore.
        rounding mode not an integerTruncate to integer.
        Ignore if not a number.
        rounding mode out of rangeIgnore.
        shiftargument not an integerTruncate to integer.
        Ignore if not a number.
        argument out of rangeSubstitute ±Infinity. -
        - toExponential
        - toFixed
        - toFormat -
        decimal places not an integerTruncate to integer.
        Ignore if not a number.
        decimal places out of rangeIgnore.
        rounding mode not an integerTruncate to integer.
        Ignore if not a number.
        rounding mode out of rangeIgnore.
        toFractionmax denominator not an integerTruncate to integer.
        Ignore if not a number.
        max denominator out of rangeIgnore.
        - toDigits
        - toPrecision -
        precision not an integerTruncate to integer.
        Ignore if not a number.
        precision out of rangeIgnore.
        rounding mode not an integerTruncate to integer.
        Ignore if not a number.
        rounding mode out of rangeIgnore.
        toPowerexponent not an integerTruncate to integer.
        Substitute NaN if not a number.
        exponent out of rangeSubstitute ±Infinity. -
        toStringbase not an integerTruncate to integer.
        Ignore if not a number.
        base out of rangeIgnore.
        -

        *No error is thrown if the value is NaN or 'NaN'.

        -

        - The message of a BigNumber Error will also contain the name of the method from which - the error originated. -

        -

        To determine if an exception is a BigNumber Error:

        -
        -try {
        -    // ...
        -} catch (e) {
        -    if ( e instanceof Error && e.name == 'BigNumber Error' ) {
        -        // ...
        -    }
        -}
        - - - -

        FAQ

        - -
        Why are trailing fractional zeros removed from BigNumbers?
        -

        - Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the - precision of a value. This can be useful but the results of arithmetic operations can be - misleading. -

        -
        -x = new BigDecimal("1.0")
        -y = new BigDecimal("1.1000")
        -z = x.add(y)                      // 2.1000
        -
        -x = new BigDecimal("1.20")
        -y = new BigDecimal("3.45000")
        -z = x.multiply(y)                 // 4.1400000
        -

        - To specify the precision of a value is to specify that the value lies - within a certain range. -

        -

        - In the first example, x has a value of 1.0. The trailing zero shows - the precision of the value, implying that it is in the range 0.95 to - 1.05. Similarly, the precision indicated by the trailing zeros of y - indicates that the value is in the range 1.09995 to 1.10005. -

        -

        - If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, - and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the - range of the result of the addition implied by the precision of its operands is - 2.04995 to 2.15005. -

        -

        - The result given by BigDecimal of 2.1000 however, indicates that the value is in - the range 2.09995 to 2.10005 and therefore the precision implied by - its trailing zeros may be misleading. -

        -

        - In the second example, the true range is 4.122744 to 4.157256 yet - the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 - to 4.14000005. Again, the precision implied by the trailing zeros may be - misleading. -

        -

        - This library, like binary floating point and most calculators, does not retain trailing - fractional zeros. Instead, the toExponential, toFixed and - toPrecision methods enable trailing zeros to be added if and when required.
        -

        -
        - - - diff --git a/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map b/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map deleted file mode 100644 index 120ed53..0000000 --- a/node_modules/web3/bower/bignumber.js/doc/bignumber.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bignumber.min.js","sources":["bignumber.js"],"names":["global","another","configObj","BigNumber","n","b","c","e","i","num","len","str","x","this","ERRORS","raise","isValidInt","id","round","DECIMAL_PLACES","ROUNDING_MODE","RegExp","ALPHABET","slice","test","parseNumeric","s","replace","length","tooManyDigits","charCodeAt","convertBase","isNumeric","indexOf","search","substring","MAX_EXP","MIN_EXP","LOG_BASE","push","baseOut","baseIn","sign","d","k","r","xc","y","dp","rm","toLowerCase","POW_PRECISION","pow","toBaseOut","toFixedPoint","coeffToString","pop","div","unshift","charAt","format","caller","c0","ne","roundingMode","toString","TO_EXP_NEG","toExponential","maxOrMin","args","method","m","isArray","call","intValidatorWithErrors","min","max","name","truncate","normalise","j","msg","val","error","Error","sd","ni","rd","pows10","POWS_TEN","out","mathceil","mathfloor","BASE","P","prototype","ONE","TO_EXP_POS","CRYPTO","MODULO_MODE","FORMAT","decimalSeparator","groupSeparator","groupSize","secondaryGroupSize","fractionGroupSeparator","fractionGroupSize","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","v","p","a","arguments","o","has","hasOwnProperty","MAX","intValidatorNoErrors","notBool","crypto","lt","gt","random","pow2_53","random53bitInt","Math","rand","getRandomValues","Uint32Array","randomBytes","copy","shift","multiply","base","temp","xlo","xhi","carry","klo","SQRT_BASE","khi","compare","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","yc","NaN","bitFloor","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","isNaN","p1","p2","absoluteValue","abs","ceil","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","divToInt","equals","eq","floor","greaterThan","greaterThanOrEqualTo","gte","isFinite","isInteger","isInt","isNegative","isNeg","isZero","lessThan","lessThanOrEqualTo","lte","minus","sub","t","xLTy","plus","xe","ye","reverse","modulo","mod","times","negated","neg","add","precision","z","MAX_SAFE_INTEGER","squareRoot","sqrt","rep","half","mul","xcL","ycL","ylo","yhi","zc","sqrtBase","toDigits","toFixed","toFormat","arr","split","g1","g2","intPart","fractionPart","intDigits","substr","toFraction","md","d0","d2","exp","n0","n1","d1","toNumber","toPower","parseFloat","toPrecision","truncated","trunc","valueOf","toJSON","l","obj","Object","arrL","define","amd","module","exports","require"],"mappings":";CAEC,SAAWA,GACR,YAqCA,SAASC,GAAQC,GAiHb,QAASC,GAAWC,EAAGC,GACnB,GAAIC,GAAGC,EAAGC,EAAGC,EAAKC,EAAKC,EACnBC,EAAIC,IAGR,MAAQD,YAAaT,IAIjB,MADIW,IAAQC,EAAO,GAAI,+BAAgCX,GAChD,GAAID,GAAWC,EAAGC,EAK7B,IAAU,MAALA,GAAcW,EAAYX,EAAG,EAAG,GAAIY,EAAI,QA4BtC,CAMH,GALAZ,EAAQ,EAAJA,EACJM,EAAMP,EAAI,GAIA,IAALC,EAED,MADAO,GAAI,GAAIT,GAAWC,YAAaD,GAAYC,EAAIO,GACzCO,EAAON,EAAGO,EAAiBP,EAAEL,EAAI,EAAGa,EAK/C,KAAOX,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,IAC7C,GAAMiB,QAAQ,OAAUf,EAAI,IAAMgB,EAASC,MAAO,EAAGlB,GAAM,MAC1D,SAAWC,EAAI,MAAU,GAAJD,EAAS,IAAM,IAAOmB,KAAKb,GAChD,MAAOc,GAAcb,EAAGD,EAAKF,EAAKJ,EAGlCI,IACAG,EAAEc,EAAY,EAAR,EAAItB,GAAUO,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAE1CT,GAAUH,EAAIgB,QAAS,YAAa,IAAKC,OAAS,IAGnDb,EAAOE,EAAIY,EAAezB,GAI9BK,GAAM,GAENG,EAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAGlEZ,EAAMoB,EAAapB,EAAK,GAAIN,EAAGO,EAAEc,OA9DmB,CAGpD,GAAKtB,YAAaD,GAKd,MAJAS,GAAEc,EAAItB,EAAEsB,EACRd,EAAEL,EAAIH,EAAEG,EACRK,EAAEN,GAAMF,EAAIA,EAAEE,GAAMF,EAAEmB,QAAUnB,OAChCa,EAAK,EAIT,KAAOR,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,EAAI,CAIhD,GAHAQ,EAAEc,EAAY,EAAR,EAAItB,GAAUA,GAAKA,EAAG,IAAO,EAG9BA,MAAQA,EAAI,CACb,IAAMG,EAAI,EAAGC,EAAIJ,EAAGI,GAAK,GAAIA,GAAK,GAAID,KAItC,MAHAK,GAAEL,EAAIA,EACNK,EAAEN,GAAKF,QACPa,EAAK,GAITN,EAAMP,EAAI,OACP,CACH,IAAM4B,EAAUR,KAAMb,EAAMP,EAAI,IAAO,MAAOqB,GAAcb,EAAGD,EAAKF,EACpEG,GAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,GAwDtE,KAhBOhB,EAAII,EAAIsB,QAAQ,MAAS,KAAKtB,EAAMA,EAAIgB,QAAS,IAAK,MAGtDnB,EAAIG,EAAIuB,OAAQ,OAAW,GAGrB,EAAJ3B,IAAQA,EAAIC,GACjBD,IAAMI,EAAIY,MAAOf,EAAI,GACrBG,EAAMA,EAAIwB,UAAW,EAAG3B,IACZ,EAAJD,IAGRA,EAAII,EAAIiB,QAINpB,EAAI,EAAyB,KAAtBG,EAAImB,WAAWtB,GAAWA,KAGvC,IAAME,EAAMC,EAAIiB,OAAkC,KAA1BjB,EAAImB,aAAapB,KAGzC,GAFAC,EAAMA,EAAIY,MAAOf,EAAGE,EAAM,GAYtB,GATAA,EAAMC,EAAIiB,OAILnB,GAAOK,GAAUJ,EAAM,IAAKK,EAAOE,EAAIY,EAAejB,EAAEc,EAAItB,GAEjEG,EAAIA,EAAIC,EAAI,EAGPD,EAAI6B,EAGLxB,EAAEN,EAAIM,EAAEL,EAAI,SAGT,IAAS8B,EAAJ9B,EAGRK,EAAEN,GAAMM,EAAEL,EAAI,OACX,CAWH,GAVAK,EAAEL,EAAIA,EACNK,EAAEN,KAMFE,GAAMD,EAAI,GAAM+B,EACP,EAAJ/B,IAAQC,GAAK8B,GAET5B,EAAJF,EAAU,CAGX,IAFIA,GAAGI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAO,EAAGf,IAE1BE,GAAO4B,EAAc5B,EAAJF,GACnBI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAOf,EAAGA,GAAK8B,GAGlC3B,GAAMA,EAAIY,MAAMf,GAChBA,EAAI8B,EAAW3B,EAAIiB,WAEnBpB,IAAKE,CAGT,MAAQF,IAAKG,GAAO,KACpBC,EAAEN,EAAEiC,MAAO5B,OAKfC,GAAEN,GAAMM,EAAEL,EAAI,EAGlBU,GAAK,EAgVT,QAASc,GAAapB,EAAK6B,EAASC,EAAQC,GACxC,GAAIC,GAAGpC,EAAGqC,EAAGC,EAAGjC,EAAGkC,EAAIC,EACnBvC,EAAIG,EAAIsB,QAAS,KACjBe,EAAK7B,EACL8B,EAAK7B,CA0BT,KAxBc,GAATqB,IAAc9B,EAAMA,EAAIuC,eAGxB1C,GAAK,IACNoC,EAAIO,EAGJA,EAAgB,EAChBxC,EAAMA,EAAIgB,QAAS,IAAK,IACxBoB,EAAI,GAAI5C,GAAUsC,GAClB7B,EAAImC,EAAEK,IAAKzC,EAAIiB,OAASpB,GACxB2C,EAAgBP,EAIhBG,EAAEzC,EAAI+C,EAAWC,EAAcC,EAAe3C,EAAEN,GAAKM,EAAEL,GAAK,GAAIiC,GAChEO,EAAExC,EAAIwC,EAAEzC,EAAEsB,QAIdkB,EAAKO,EAAW1C,EAAK8B,EAAQD,GAC7BjC,EAAIqC,EAAIE,EAAGlB,OAGQ,GAAXkB,IAAKF,GAASE,EAAGU,OACzB,IAAMV,EAAG,GAAK,MAAO,GA2BrB,IAzBS,EAAJtC,IACCD,GAEFK,EAAEN,EAAIwC,EACNlC,EAAEL,EAAIA,EAGNK,EAAEc,EAAIgB,EACN9B,EAAI6C,EAAK7C,EAAGmC,EAAGC,EAAIC,EAAIT,GACvBM,EAAKlC,EAAEN,EACPuC,EAAIjC,EAAEiC,EACNtC,EAAIK,EAAEL,GAGVoC,EAAIpC,EAAIyC,EAAK,EAGbxC,EAAIsC,EAAGH,GACPC,EAAIJ,EAAU,EACdK,EAAIA,GAAS,EAAJF,GAAsB,MAAbG,EAAGH,EAAI,GAEzBE,EAAS,EAALI,GAAgB,MAALzC,GAAaqC,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IACzDlB,EAAIoC,GAAKpC,GAAKoC,IAAY,GAANK,GAAWJ,GAAW,GAANI,GAAuB,EAAZH,EAAGH,EAAI,IACtDM,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAE1B,EAAJiB,IAAUG,EAAG,GAGdnC,EAAMkC,EAAIS,EAAc,KAAMN,GAAO,QAClC,CAGH,GAFAF,EAAGlB,OAASe,EAERE,EAGA,MAAQL,IAAWM,IAAKH,GAAKH,GACzBM,EAAGH,GAAK,EAEFA,MACApC,EACFuC,EAAGY,QAAQ,GAMvB,KAAMd,EAAIE,EAAGlB,QAASkB,IAAKF,KAG3B,IAAMpC,EAAI,EAAGG,EAAM,GAASiC,GAALpC,EAAQG,GAAOW,EAASqC,OAAQb,EAAGtC,OAC1DG,EAAM2C,EAAc3C,EAAKJ,GAI7B,MAAOI,GA4PX,QAASiD,GAAQxD,EAAGI,EAAGyC,EAAIY,GACvB,GAAIC,GAAIvD,EAAGwD,EAAIrD,EAAKC,CAKpB,IAHAsC,EAAW,MAANA,GAAcjC,EAAYiC,EAAI,EAAG,EAAGY,EAAQG,GACxC,EAALf,EAAS7B,GAEPhB,EAAEE,EAAI,MAAOF,GAAE6D,UAIrB,IAHAH,EAAK1D,EAAEE,EAAE,GACTyD,EAAK3D,EAAEG,EAEG,MAALC,EACDG,EAAM4C,EAAenD,EAAEE,GACvBK,EAAgB,IAAVkD,GAA0B,IAAVA,GAAsBK,GAANH,EAClCI,EAAexD,EAAKoD,GACpBT,EAAc3C,EAAKoD,OAevB,IAbA3D,EAAIc,EAAO,GAAIf,GAAUC,GAAII,EAAGyC,GAGhC1C,EAAIH,EAAEG,EAENI,EAAM4C,EAAenD,EAAEE,GACvBI,EAAMC,EAAIiB,OAOK,IAAViC,GAA0B,IAAVA,IAAuBtD,GAALC,GAAe0D,GAAL3D,GAAoB,CAGjE,KAAcC,EAANE,EAASC,GAAO,IAAKD,KAC7BC,EAAMwD,EAAexD,EAAKJ,OAQ1B,IAJAC,GAAKuD,EACLpD,EAAM2C,EAAc3C,EAAKJ,GAGpBA,EAAI,EAAIG,GACT,KAAOF,EAAI,EAAI,IAAMG,GAAO,IAAKH,IAAKG,GAAO,UAG7C,IADAH,GAAKD,EAAIG,EACJF,EAAI,EAEL,IADKD,EAAI,GAAKG,IAAMC,GAAO,KACnBH,IAAKG,GAAO,KAMpC,MAAOP,GAAEsB,EAAI,GAAKoC,EAAK,IAAMnD,EAAMA,EAKvC,QAASyD,GAAUC,EAAMC,GACrB,GAAIC,GAAGnE,EACHI,EAAI,CAKR,KAHKgE,EAASH,EAAK,MAAOA,EAAOA,EAAK,IACtCE,EAAI,GAAIpE,GAAWkE,EAAK,MAEd7D,EAAI6D,EAAKzC,QAAU,CAIzB,GAHAxB,EAAI,GAAID,GAAWkE,EAAK7D,KAGlBJ,EAAEsB,EAAI,CACR6C,EAAInE,CACJ,OACQkE,EAAOG,KAAMF,EAAGnE,KACxBmE,EAAInE,GAIZ,MAAOmE,GAQX,QAASG,GAAwBtE,EAAGuE,EAAKC,EAAKf,EAAQgB,GAMlD,OALSF,EAAJvE,GAAWA,EAAIwE,GAAOxE,GAAK0E,EAAS1E,KACrCW,EAAO8C,GAAUgB,GAAQ,mBACjBF,EAAJvE,GAAWA,EAAIwE,EAAM,gBAAkB,mBAAqBxE,IAG7D,EAQX,QAAS2E,GAAW3E,EAAGE,EAAGC,GAKtB,IAJA,GAAIC,GAAI,EACJwE,EAAI1E,EAAEsB,QAGDtB,IAAI0E,GAAI1E,EAAEkD,OAGnB,IAAMwB,EAAI1E,EAAE,GAAI0E,GAAK,GAAIA,GAAK,GAAIxE,KAkBlC,OAfOD,EAAIC,EAAID,EAAI+B,EAAW,GAAMF,EAGhChC,EAAEE,EAAIF,EAAEG,EAAI,KAGA8B,EAAJ9B,EAGRH,EAAEE,GAAMF,EAAEG,EAAI,IAEdH,EAAEG,EAAIA,EACNH,EAAEE,EAAIA,GAGHF,EAmDX,QAASW,GAAO8C,EAAQoB,EAAKC,GACzB,GAAIC,GAAQ,GAAIC,QACZ,gBACA,MACA,SACA,MACA,WACA,KACA,KACA,MACA,KACA,MACA,QACA,MACA,OACA,YACA,SACA,QACA,QACA,QACA,WACA,gBACA,UACA,WACA,aACA,MACA,cACA,WACA,aACFvB,GAAU,MAAQoB,EAAM,KAAOC,EAIjC,MAFAC,GAAMN,KAAO,kBACb5D,EAAK,EACCkE,EAQV,QAASjE,GAAON,EAAGyE,EAAIpC,EAAIJ,GACvB,GAAIF,GAAGnC,EAAGwE,EAAGpC,EAAGxC,EAAGkF,EAAIC,EACnBzC,EAAKlC,EAAEN,EACPkF,EAASC,CAGb,IAAI3C,EAAI,CAQJ4C,EAAK,CAGD,IAAM/C,EAAI,EAAGC,EAAIE,EAAG,GAAIF,GAAK,GAAIA,GAAK,GAAID,KAI1C,GAHAnC,EAAI6E,EAAK1C,EAGA,EAAJnC,EACDA,GAAK8B,EACL0C,EAAIK,EACJjF,EAAI0C,EAAIwC,EAAK,GAGbC,EAAKnF,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,MAIpC,IAFAM,EAAKK,GAAYnF,EAAI,GAAM8B,GAEtBgD,GAAMxC,EAAGlB,OAAS,CAEnB,IAAIiB,EASA,KAAM6C,EANN,MAAQ5C,EAAGlB,QAAU0D,EAAIxC,EAAGP,KAAK,IACjCnC,EAAImF,EAAK,EACT5C,EAAI,EACJnC,GAAK8B,EACL0C,EAAIxE,EAAI8B,EAAW,MAIpB,CAIH,IAHAlC,EAAIwC,EAAIE,EAAGwC,GAGL3C,EAAI,EAAGC,GAAK,GAAIA,GAAK,GAAID,KAG/BnC,GAAK8B,EAIL0C,EAAIxE,EAAI8B,EAAWK,EAGnB4C,EAAS,EAAJP,EAAQ,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,EAmBxD,GAfAnC,EAAIA,GAAU,EAALwC,GAKO,MAAdvC,EAAGwC,EAAK,KAAoB,EAAJN,EAAQ5E,EAAIA,EAAIoF,EAAQ7C,EAAIqC,EAAI,IAE1DnC,EAAS,EAALI,GACEsC,GAAM1C,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAClD6D,EAAK,GAAW,GAANA,IAAmB,GAANtC,GAAWJ,GAAW,GAANI,IAGnCzC,EAAI,EAAIwE,EAAI,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,GAAM,EAAIlC,EAAGwC,EAAK,IAAO,GAAO,GAClErC,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAElB,EAAL2D,IAAWvC,EAAG,GAiBf,MAhBAA,GAAGlB,OAAS,EAERiB,GAGAwC,GAAMzE,EAAEL,EAAI,EAGZuC,EAAG,GAAK0C,EAAQH,EAAK/C,GACrB1B,EAAEL,GAAK8E,GAAM,GAIbvC,EAAG,GAAKlC,EAAEL,EAAI,EAGXK,CAkBX,IAdU,GAALJ,GACDsC,EAAGlB,OAAS0D,EACZ1C,EAAI,EACJ0C,MAEAxC,EAAGlB,OAAS0D,EAAK,EACjB1C,EAAI4C,EAAQlD,EAAW9B,GAIvBsC,EAAGwC,GAAMN,EAAI,EAAIY,EAAWxF,EAAIoF,EAAQ7C,EAAIqC,GAAMQ,EAAOR,IAAOpC,EAAI,GAIpEC,EAEA,OAAY,CAGR,GAAW,GAANyC,EAAU,CAGX,IAAM9E,EAAI,EAAGwE,EAAIlC,EAAG,GAAIkC,GAAK,GAAIA,GAAK,GAAIxE,KAE1C,IADAwE,EAAIlC,EAAG,IAAMF,EACPA,EAAI,EAAGoC,GAAK,GAAIA,GAAK,GAAIpC,KAG1BpC,GAAKoC,IACNhC,EAAEL,IACGuC,EAAG,IAAM+C,IAAO/C,EAAG,GAAK,GAGjC,OAGA,GADAA,EAAGwC,IAAO1C,EACLE,EAAGwC,IAAOO,EAAO,KACtB/C,GAAGwC,KAAQ,EACX1C,EAAI,EAMhB,IAAMpC,EAAIsC,EAAGlB,OAAoB,IAAZkB,IAAKtC,GAAUsC,EAAGU,QAItC5C,EAAEL,EAAI6B,EACPxB,EAAEN,EAAIM,EAAEL,EAAI,KAGJK,EAAEL,EAAI8B,IACdzB,EAAEN,GAAMM,EAAEL,EAAI,IAItB,MAAOK,GAjyCX,GAAI6C,GAGAxC,EAAK,EACL6E,EAAI3F,EAAU4F,UACdC,EAAM,GAAI7F,GAAU,GAYpBgB,EAAiB,GAejBC,EAAgB,EAMhB8C,EAAa,GAIb+B,EAAa,GAMb5D,EAAU,KAKVD,EAAU,IAGVtB,GAAS,EAGTE,EAAa0D,EAGbwB,GAAS,EAoBTC,EAAc,EAIdhD,EAAgB,IAGhBiD,GACIC,iBAAkB,IAClBC,eAAgB,IAChBC,UAAW,EACXC,mBAAoB,EACpBC,uBAAwB,IACxBC,kBAAmB,EAkzE3B,OA/nEAvG,GAAUF,QAAUA,EAEpBE,EAAUwG,SAAW,EACrBxG,EAAUyG,WAAa,EACvBzG,EAAU0G,WAAa,EACvB1G,EAAU2G,YAAc,EACxB3G,EAAU4G,cAAgB,EAC1B5G,EAAU6G,gBAAkB,EAC5B7G,EAAU8G,gBAAkB,EAC5B9G,EAAU+G,gBAAkB,EAC5B/G,EAAUgH,iBAAmB,EAC7BhH,EAAUiH,OAAS,EAoCnBjH,EAAUkH,OAAS,WACf,GAAIC,GAAGC,EACH/G,EAAI,EACJqC,KACA2E,EAAIC,UACJC,EAAIF,EAAE,GACNG,EAAMD,GAAiB,gBAALA,GACd,WAAc,MAAKA,GAAEE,eAAeL,GAA4B,OAAdD,EAAII,EAAEH,IAA1C,QACd,WAAc,MAAKC,GAAE5F,OAASpB,EAA6B,OAAhB8G,EAAIE,EAAEhH,MAAnC,OA6GtB,OAxGKmH,GAAKJ,EAAI,mBAAsBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KAC1DpG,EAAqB,EAAJmG,GAErBzE,EAAE0E,GAAKpG,EAKFwG,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACvDnG,EAAoB,EAAJkG,GAEpBzE,EAAE0E,GAAKnG,EAMFuG,EAAKJ,EAAI,oBAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,EAAG,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACnErD,EAAoB,EAAPoD,EAAE,GACfrB,EAAoB,EAAPqB,EAAE,IAEXtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KACrCrD,IAAgB+B,EAAkC,GAAf,EAAJqB,GAASA,EAAIA,MAGpDzE,EAAE0E,IAAOrD,EAAY+B,GAOhB0B,EAAKJ,EAAI,WAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,GAAI,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACpElF,EAAiB,EAAPiF,EAAE,GACZlF,EAAiB,EAAPkF,EAAE,IAERtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KAC5B,EAAJD,EAAQjF,IAAaD,EAA+B,GAAf,EAAJkF,GAASA,EAAIA,IAC1CxG,GAAQC,EAAO,EAAGwG,EAAI,kBAAmBD,KAG1DzE,EAAE0E,IAAOlF,EAASD,GAIbuF,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBrG,EAAK,EACLD,GAAeF,IAAWwG,GAAM5C,EAAyBoD,GAClDhH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKzG,EAKF6G,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBpB,KAAaoB,IAAKU,GAA2B,gBAAVA,IAC9BV,IAAMpB,GAAUpF,GAASC,EAAO,EAAG,qBAAsBiH,IACvDlH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKrB,EAKFyB,EAAKJ,EAAI,gBAAmBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACrDpB,EAAkB,EAAJmB,GAElBzE,EAAE0E,GAAKpB,EAKFwB,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KACzDpE,EAAoB,EAAJmE,GAEpBzE,EAAE0E,GAAKpE,EAIFwE,EAAKJ,EAAI,YAEO,gBAALD,GACRlB,EAASkB,EACFxG,GACPC,EAAO,EAAGwG,EAAI,iBAAkBD,IAGxCzE,EAAE0E,GAAKnB,EAEAvD,GASX1C,EAAUyE,IAAM,WAAc,MAAOR,GAAUqD,UAAW3B,EAAEmC,KAQ5D9H,EAAUwE,IAAM,WAAc,MAAOP,GAAUqD,UAAW3B,EAAEoC,KAc5D/H,EAAUgI,OAAS,WACf,GAAIC,GAAU,iBAMVC,EAAkBC,KAAKH,SAAWC,EAAW,QAC7C,WAAc,MAAOxC,GAAW0C,KAAKH,SAAWC,IAChD,WAAc,MAA2C,UAAlB,WAAhBE,KAAKH,SAAwB,IACjC,QAAhBG,KAAKH,SAAsB,GAElC,OAAO,UAAUnF,GACb,GAAIwE,GAAGnH,EAAGE,EAAGqC,EAAG0E,EACZ9G,EAAI,EACJF,KACAiI,EAAO,GAAIpI,GAAU6F,EAKzB,IAHAhD,EAAW,MAANA,GAAehC,EAAYgC,EAAI,EAAG6E,EAAK,IAA6B,EAAL7E,EAAjB7B,EACnDyB,EAAI+C,EAAU3C,EAAKV,GAEf4D,EAGA,GAAK8B,GAAUA,EAAOQ,gBAAkB,CAIpC,IAFAhB,EAAIQ,EAAOQ,gBAAiB,GAAIC,aAAa7F,GAAK,IAEtCA,EAAJpC,GAQJ8G,EAAW,OAAPE,EAAEhH,IAAgBgH,EAAEhH,EAAI,KAAO,IAM9B8G,GAAK,MACNjH,EAAI2H,EAAOQ,gBAAiB,GAAIC,aAAY,IAC5CjB,EAAEhH,GAAKH,EAAE,GACTmH,EAAEhH,EAAI,GAAKH,EAAE,KAKbC,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MAGL,IAAKoF,GAAUA,EAAOU,YAAc,CAKvC,IAFAlB,EAAIQ,EAAOU,YAAa9F,GAAK,GAEjBA,EAAJpC,GAMJ8G,EAAsB,iBAAP,GAAPE,EAAEhH,IAA6C,cAAXgH,EAAEhH,EAAI,GAC/B,WAAXgH,EAAEhH,EAAI,GAAkC,SAAXgH,EAAEhH,EAAI,IACnCgH,EAAEhH,EAAI,IAAM,KAASgH,EAAEhH,EAAI,IAAM,GAAMgH,EAAEhH,EAAI,GAEhD8G,GAAK,KACNU,EAAOU,YAAY,GAAGC,KAAMnB,EAAGhH,IAI/BF,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MACD9B,IACPC,EAAO,GAAI,qBAAsBiH,EAKzC,KAAKxH,EAED,KAAYoC,EAAJpC,GACJ8G,EAAIe,IACK,KAAJf,IAAWhH,EAAEE,KAAO8G,EAAI,KAcrC,KAVA1E,EAAItC,IAAIE,GACRwC,GAAMV,EAGDM,GAAKI,IACNsE,EAAI7B,EAASnD,EAAWU,GACxB1C,EAAEE,GAAKoF,EAAWhD,EAAI0E,GAAMA,GAIf,IAAThH,EAAEE,GAAUF,EAAEkD,MAAOhD,KAG7B,GAAS,EAAJA,EACDF,GAAMC,EAAI,OACP,CAGH,IAAMA,EAAI,GAAc,IAATD,EAAE,GAAUA,EAAEsI,QAASrI,GAAK+B,GAG3C,IAAM9B,EAAI,EAAG8G,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAI9G,KAGhC8B,EAAJ9B,IAAeD,GAAK+B,EAAW9B,GAKxC,MAFA+H,GAAKhI,EAAIA,EACTgI,EAAKjI,EAAIA,EACFiI,MAqGf9E,EAAM,WAGF,QAASoF,GAAUjI,EAAGgC,EAAGkG,GACrB,GAAIvE,GAAGwE,EAAMC,EAAKC,EACdC,EAAQ,EACR1I,EAAII,EAAEgB,OACNuH,EAAMvG,EAAIwG,EACVC,EAAMzG,EAAIwG,EAAY,CAE1B,KAAMxI,EAAIA,EAAEW,QAASf,KACjBwI,EAAMpI,EAAEJ,GAAK4I,EACbH,EAAMrI,EAAEJ,GAAK4I,EAAY,EACzB7E,EAAI8E,EAAML,EAAMC,EAAME,EACtBJ,EAAOI,EAAMH,EAAUzE,EAAI6E,EAAcA,EAAcF,EACvDA,GAAUH,EAAOD,EAAO,IAAQvE,EAAI6E,EAAY,GAAMC,EAAMJ,EAC5DrI,EAAEJ,GAAKuI,EAAOD,CAKlB,OAFII,IAAOtI,EAAE8C,QAAQwF,GAEdtI,EAGX,QAAS0I,GAAS9B,EAAGnH,EAAGkJ,EAAIC,GACxB,GAAIhJ,GAAGiJ,CAEP,IAAKF,GAAMC,EACPC,EAAMF,EAAKC,EAAK,EAAI,OAGpB,KAAMhJ,EAAIiJ,EAAM,EAAOF,EAAJ/I,EAAQA,IAEvB,GAAKgH,EAAEhH,IAAMH,EAAEG,GAAK,CAChBiJ,EAAMjC,EAAEhH,GAAKH,EAAEG,GAAK,EAAI,EACxB,OAIZ,MAAOiJ,GAGX,QAASC,GAAUlC,EAAGnH,EAAGkJ,EAAIT,GAIzB,IAHA,GAAItI,GAAI,EAGA+I,KACJ/B,EAAE+B,IAAO/I,EACTA,EAAIgH,EAAE+B,GAAMlJ,EAAEkJ,GAAM,EAAI,EACxB/B,EAAE+B,GAAM/I,EAAIsI,EAAOtB,EAAE+B,GAAMlJ,EAAEkJ,EAIjC,OAAS/B,EAAE,IAAMA,EAAE5F,OAAS,EAAG4F,EAAEoB,UAIrC,MAAO,UAAWhI,EAAGmC,EAAGC,EAAIC,EAAI6F,GAC5B,GAAIW,GAAKlJ,EAAGC,EAAGmJ,EAAMvJ,EAAGwJ,EAAMC,EAAOC,EAAGC,EAAIC,EAAKC,EAAMC,EAAMC,EAAIC,EAAIC,EACjEC,EAAIC,EACJ7I,EAAId,EAAEc,GAAKqB,EAAErB,EAAI,EAAI,GACrBoB,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAGX,MAAMwC,GAAOA,EAAG,IAAO0H,GAAOA,EAAG,IAE7B,MAAO,IAAIrK,GAGRS,EAAEc,GAAMqB,EAAErB,IAAOoB,GAAK0H,GAAM1H,EAAG,IAAM0H,EAAG,GAAMA,GAG7C1H,GAAe,GAATA,EAAG,KAAY0H,EAAS,EAAJ9I,EAAQA,EAAI,EAHc+I,IAoB5D,KAbAX,EAAI,GAAI3J,GAAUuB,GAClBqI,EAAKD,EAAExJ,KACPC,EAAIK,EAAEL,EAAIwC,EAAExC,EACZmB,EAAIsB,EAAKzC,EAAI,EAEPuI,IACFA,EAAOjD,EACPtF,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDZ,EAAIA,EAAIY,EAAW,GAKjB9B,EAAI,EAAGgK,EAAGhK,KAAQsC,EAAGtC,IAAM,GAAKA,KAGtC,GAFKgK,EAAGhK,IAAOsC,EAAGtC,IAAM,IAAMD,IAErB,EAAJmB,EACDqI,EAAGxH,KAAK,GACRoH,GAAO,MACJ,CAsBH,IArBAS,EAAKtH,EAAGlB,OACR0I,EAAKE,EAAG5I,OACRpB,EAAI,EACJkB,GAAK,EAILtB,EAAIwF,EAAWkD,GAAS0B,EAAG,GAAK,IAE3BpK,EAAI,IACLoK,EAAK3B,EAAU2B,EAAIpK,EAAG0I,GACtBhG,EAAK+F,EAAU/F,EAAI1C,EAAG0I,GACtBwB,EAAKE,EAAG5I,OACRwI,EAAKtH,EAAGlB,QAGZuI,EAAKG,EACLN,EAAMlH,EAAGvB,MAAO,EAAG+I,GACnBL,EAAOD,EAAIpI,OAGI0I,EAAPL,EAAWD,EAAIC,KAAU,GACjCM,EAAKC,EAAGjJ,QACRgJ,EAAG7G,QAAQ,GACX2G,EAAMG,EAAG,GACJA,EAAG,IAAM1B,EAAO,GAAIuB,GAEzB,GAAG,CAOC,GANAjK,EAAI,EAGJqJ,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,GAGjB,EAANR,GAuDD,GAnDAS,EAAOF,EAAI,GACNM,GAAML,IAAOC,EAAOA,EAAOpB,GAASkB,EAAI,IAAM,IAGnD5J,EAAIwF,EAAWsE,EAAOG,GAUjBjK,EAAI,GAEDA,GAAK0I,IAAM1I,EAAI0I,EAAO,GAG1Bc,EAAOf,EAAU2B,EAAIpK,EAAG0I,GACxBe,EAAQD,EAAKhI,OACbqI,EAAOD,EAAIpI,OAGX6H,EAAMH,EAASM,EAAMI,EAAKH,EAAOI,GAGrB,GAAPR,IACDrJ,IAGAsJ,EAAUE,EAAWC,EAALS,EAAaC,EAAKC,EAAIX,EAAOf,MAQvC,GAAL1I,IAASqJ,EAAMrJ,EAAI,GACxBwJ,EAAOY,EAAGjJ,SAGdsI,EAAQD,EAAKhI,OACAqI,EAARJ,GAAeD,EAAKlG,QAAQ,GAGjCgG,EAAUM,EAAKJ,EAAMK,EAAMnB,GAC3BmB,EAAOD,EAAIpI,OAGC,IAAP6H,EAID,MAAUA,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,IAAW,GAC7C7J,IAGAsJ,EAAUM,EAAUC,EAALK,EAAYC,EAAKC,EAAIP,EAAMnB,GAC1CmB,EAAOD,EAAIpI,WAGH,KAAR6H,IACRrJ,IACA4J,GAAO,GAIXD,GAAGvJ,KAAOJ,EAGLqJ,GAAOO,EAAI,GACZA,EAAIC,KAAUnH,EAAGqH,IAAO,GAExBH,GAAQlH,EAAGqH,IACXF,EAAO,UAEHE,IAAOC,GAAgB,MAAVJ,EAAI,KAAgBtI,IAE7CiI,GAAiB,MAAVK,EAAI,GAGLD,EAAG,IAAKA,EAAGnB,QAGrB,GAAKE,GAAQjD,EAAO,CAGhB,IAAMrF,EAAI,EAAGkB,EAAIqI,EAAG,GAAIrI,GAAK,GAAIA,GAAK,GAAIlB,KAC1CU,EAAO4I,EAAG9G,GAAO8G,EAAEvJ,EAAIC,EAAID,EAAI+B,EAAW,GAAM,EAAGW,EAAI0G,OAIvDG,GAAEvJ,EAAIA,EACNuJ,EAAEjH,GAAK8G,CAGX,OAAOG,OAgJfrI,EAAe,WACX,GAAIkJ,GAAa,8BACbC,EAAW,cACXC,EAAY,cACZC,EAAkB,qBAClBC,EAAmB,4BAEvB,OAAO,UAAWnK,EAAGD,EAAKF,EAAKJ,GAC3B,GAAIyI,GACApH,EAAIjB,EAAME,EAAMA,EAAIgB,QAASoJ,EAAkB,GAGnD,IAAKD,EAAgBtJ,KAAKE,GACtBd,EAAEc,EAAIsJ,MAAMtJ,GAAK,KAAW,EAAJA,EAAQ,GAAK,MAClC,CACH,IAAMjB,IAGFiB,EAAIA,EAAEC,QAASgJ,EAAY,SAAWpG,EAAG0G,EAAIC,GAEzC,MADApC,GAAoC,MAA3BoC,EAAKA,EAAGhI,eAAyB,GAAW,KAANgI,EAAY,EAAI,EACvD7K,GAAKA,GAAKyI,EAAYvE,EAAL0G,IAGzB5K,IACAyI,EAAOzI,EAGPqB,EAAIA,EAAEC,QAASiJ,EAAU,MAAOjJ,QAASkJ,EAAW,SAGnDlK,GAAOe,GAAI,MAAO,IAAIvB,GAAWuB,EAAGoH,EAKzChI,IAAQC,EAAOE,EAAI,SAAYZ,EAAI,SAAWA,EAAI,IAAO,UAAWM,GACxEC,EAAEc,EAAI,KAGVd,EAAEN,EAAIM,EAAEL,EAAI,KACZU,EAAK,MAmNb6E,EAAEqF,cAAgBrF,EAAEsF,IAAM,WACtB,GAAIxK,GAAI,GAAIT,GAAUU,KAEtB,OADKD,GAAEc,EAAI,IAAId,EAAEc,EAAI,GACdd,GAQXkF,EAAEuF,KAAO,WACL,MAAOnK,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAWnDuF,EAAEwF,WAAaxF,EAAE2D,IAAM,SAAW1G,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAEyF,cAAgBzF,EAAE9C,GAAK,WACrB,GAAI5C,GAAGkH,EACHhH,EAAIO,KAAKP,CAEb,KAAMA,EAAI,MAAO,KAIjB,IAHAF,IAAQkH,EAAIhH,EAAEsB,OAAS,GAAM8I,EAAU7J,KAAKN,EAAI+B,IAAeA,EAG1DgF,EAAIhH,EAAEgH,GAAK,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9C,MAFS,GAAJA,IAAQA,EAAI,GAEVA,GAwBX0F,EAAE0F,UAAY1F,EAAErC,IAAM,SAAWV,EAAG1C,GAEhC,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAKc,EAAgBC,IAQ7D0E,EAAE2F,mBAAqB3F,EAAE4F,SAAW,SAAW3I,EAAG1C,GAE9C,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAK,EAAG,IAQhDyF,EAAE6F,OAAS7F,EAAE8F,GAAK,SAAW7I,EAAG1C,GAE5B,MADAY,GAAK,EAC6C,IAA3CqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAE+F,MAAQ,WACN,MAAO3K,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEgG,YAAchG,EAAEoC,GAAK,SAAWnF,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAEiG,qBAAuBjG,EAAEkG,IAAM,SAAWjJ,EAAG1C,GAE3C,MADAY,GAAK,EACqD,KAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAuB,IAANA,GAQnEyF,EAAEmG,SAAW,WACT,QAASpL,KAAKP,GAOlBwF,EAAEoG,UAAYpG,EAAEqG,MAAQ,WACpB,QAAStL,KAAKP,GAAKoK,EAAU7J,KAAKN,EAAI+B,GAAazB,KAAKP,EAAEsB,OAAS,GAOvEkE,EAAEkF,MAAQ,WACN,OAAQnK,KAAKa,GAOjBoE,EAAEsG,WAAatG,EAAEuG,MAAQ,WACrB,MAAOxL,MAAKa,EAAI,GAOpBoE,EAAEwG,OAAS,WACP,QAASzL,KAAKP,GAAkB,GAAbO,KAAKP,EAAE,IAQ9BwF,EAAEyG,SAAWzG,EAAEmC,GAAK,SAAWlF,EAAG1C,GAE9B,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAE0G,kBAAoB1G,EAAE2G,IAAM,SAAW1J,EAAG1C,GAExC,MADAY,GAAK,EACqD,MAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAwB,IAANA,GAwBpEyF,EAAE4G,MAAQ5G,EAAE6G,IAAM,SAAW5J,EAAG1C,GAC5B,GAAIG,GAAGwE,EAAG4H,EAAGC,EACTjM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGrC,IAAKjD,GAAKnH,EAEN,MADA0C,GAAErB,GAAKrB,EACAO,EAAEkM,KAAK/J,EAGlB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO1H,IAAOC,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAWqK,EAAK5J,EAAI6J,IAGxE,KAAM3H,EAAG,KAAO0H,EAAG,GAGf,MAAOA,GAAG,IAAOzH,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAW2C,EAAG,GAAKlC,EAGrC,GAAjBQ,GAAsB,EAAI,GASpC,GALA2L,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAaf,KAXKH,EAAW,EAAJrF,IACRA,GAAKA,EACLoF,EAAI9J,IAEJkK,EAAKD,EACLH,EAAIpC,GAGRoC,EAAEK,UAGI5M,EAAImH,EAAGnH,IAAKuM,EAAErK,KAAK,IACzBqK,EAAEK,cAMF,KAFAjI,GAAM6H,GAASrF,EAAI1E,EAAGlB,SAAavB,EAAImK,EAAG5I,SAAa4F,EAAInH,EAErDmH,EAAInH,EAAI,EAAO2E,EAAJ3E,EAAOA,IAEpB,GAAKyC,EAAGzC,IAAMmK,EAAGnK,GAAK,CAClBwM,EAAO/J,EAAGzC,GAAKmK,EAAGnK,EAClB,OAYZ,GANIwM,IAAMD,EAAI9J,EAAIA,EAAK0H,EAAIA,EAAKoC,EAAG7J,EAAErB,GAAKqB,EAAErB,GAE5CrB,GAAM2E,EAAIwF,EAAG5I,SAAapB,EAAIsC,EAAGlB,QAI5BvB,EAAI,EAAI,KAAQA,IAAKyC,EAAGtC,KAAO,GAIpC,IAHAH,EAAIwF,EAAO,EAGHb,EAAIwC,GAAK,CAEb,GAAK1E,IAAKkC,GAAKwF,EAAGxF,GAAK,CACnB,IAAMxE,EAAIwE,EAAGxE,IAAMsC,IAAKtC,GAAIsC,EAAGtC,GAAKH,KAClCyC,EAAGtC,GACLsC,EAAGkC,IAAMa,EAGb/C,EAAGkC,IAAMwF,EAAGxF,GAIhB,KAAiB,GAATlC,EAAG,GAASA,EAAG8F,UAAWoE,GAGlC,MAAMlK,GAAG,GAWFiC,EAAWhC,EAAGD,EAAIkK,IAPrBjK,EAAErB,EAAqB,GAAjBN,EAAqB,GAAK,EAChC2B,EAAEzC,GAAMyC,EAAExC,EAAI,GACPwC,IA8Bf+C,EAAEoH,OAASpH,EAAEqH,IAAM,SAAWpK,EAAG1C,GAC7B,GAAIyJ,GAAGpI,EACHd,EAAIC,IAMR,OAJAI,GAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAGhBO,EAAEN,IAAMyC,EAAErB,GAAKqB,EAAEzC,IAAMyC,EAAEzC,EAAE,GACtB,GAAIH,GAAUsK,MAGZ1H,EAAEzC,GAAKM,EAAEN,IAAMM,EAAEN,EAAE,GACrB,GAAIH,GAAUS,IAGL,GAAfuF,GAIDzE,EAAIqB,EAAErB,EACNqB,EAAErB,EAAI,EACNoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAG,GAClBA,EAAErB,EAAIA,EACNoI,EAAEpI,GAAKA,GAEPoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAGoD,GAGfvF,EAAE8L,MAAO5C,EAAEsD,MAAMrK,MAQ5B+C,EAAEuH,QAAUvH,EAAEwH,IAAM,WAChB,GAAI1M,GAAI,GAAIT,GAAUU,KAEtB,OADAD,GAAEc,GAAKd,EAAEc,GAAK,KACPd,GAwBXkF,EAAEgH,KAAOhH,EAAEyH,IAAM,SAAWxK,EAAG1C,GAC3B,GAAIuM,GACAhM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGpC,IAAKjD,GAAKnH,EAEP,MADA0C,GAAErB,GAAKrB,EACAO,EAAE8L,MAAM3J,EAGnB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO,IAAIrK,GAAWqH,EAAI,EAI5C,KAAM1E,EAAG,KAAO0H,EAAG,GAAK,MAAOA,GAAG,GAAKzH,EAAI,GAAI5C,GAAW2C,EAAG,GAAKlC,EAAQ,EAAJ4G,GAQ1E,GALAuF,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAUf,IATKxF,EAAI,GACLwF,EAAKD,EACLH,EAAIpC,IAEJhD,GAAKA,EACLoF,EAAI9J,GAGR8J,EAAEK,UACMzF,IAAKoF,EAAErK,KAAK,IACpBqK,EAAEK,UAUN,IAPAzF,EAAI1E,EAAGlB,OACPvB,EAAImK,EAAG5I,OAGM,EAAR4F,EAAInH,IAAQuM,EAAIpC,EAAIA,EAAK1H,EAAIA,EAAK8J,EAAGvM,EAAImH,GAGxCA,EAAI,EAAGnH,GACTmH,GAAM1E,IAAKzC,GAAKyC,EAAGzC,GAAKmK,EAAGnK,GAAKmH,GAAM3B,EAAO,EAC7C/C,EAAGzC,IAAMwF,CAUb,OAPI2B,KACA1E,EAAGY,QAAQ8D,KACTwF,GAKCjI,EAAWhC,EAAGD,EAAIkK,IAS7BlH,EAAE0H,UAAY1H,EAAET,GAAK,SAAUoI,GAC3B,GAAIrN,GAAGkH,EACH1G,EAAIC,KACJP,EAAIM,EAAEN,CAQV,IALU,MAALmN,GAAaA,MAAQA,GAAW,IAANA,GAAiB,IAANA,IAClC3M,GAAQC,EAAO,GAAI,WAAagH,EAAS0F,GACxCA,KAAOA,IAAIA,EAAI,QAGlBnN,EAAI,MAAO,KAIjB,IAHAgH,EAAIhH,EAAEsB,OAAS,EACfxB,EAAIkH,EAAIhF,EAAW,EAEdgF,EAAIhH,EAAEgH,GAAK,CAGZ,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9B,IAAMkH,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAIlH,MAKtC,MAFKqN,IAAK7M,EAAEL,EAAI,EAAIH,IAAIA,EAAIQ,EAAEL,EAAI,GAE3BH,GAiBX0F,EAAE5E,MAAQ,SAAW8B,EAAIC,GACrB,GAAI7C,GAAI,GAAID,GAAUU,KAOtB,QALW,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACvC3G,EAAOd,IAAK4C,EAAKnC,KAAKN,EAAI,EAAS,MAAN0C,GAC1BjC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,GAG3ChB,GAgBX0F,EAAE8C,MAAQ,SAAUhG,GAChB,GAAIxC,GAAIS,IACR,OAAOG,GAAY4B,GAAI8K,EAAkBA,EAAkB,GAAI,YAG3DtN,EAAEgN,MAAO,KAAOtI,EAASlC,IACzB,GAAIzC,GAAWC,EAAEE,GAAKF,EAAEE,EAAE,MAAaoN,EAAL9K,GAAyBA,EAAI8K,GAC7DtN,EAAEsB,GAAU,EAAJkB,EAAQ,EAAI,EAAI,GACxBxC,IAeV0F,EAAE6H,WAAa7H,EAAE8H,KAAO,WACpB,GAAIrJ,GAAGnE,EAAGyC,EAAGgL,EAAKjB,EACdhM,EAAIC,KACJP,EAAIM,EAAEN,EACNoB,EAAId,EAAEc,EACNnB,EAAIK,EAAEL,EACNyC,EAAK7B,EAAiB,EACtB2M,EAAO,GAAI3N,GAAU,MAGzB,IAAW,IAANuB,IAAYpB,IAAMA,EAAE,GACrB,MAAO,IAAIH,IAAYuB,GAAS,EAAJA,KAAYpB,GAAKA,EAAE,IAAOmK,IAAMnK,EAAIM,EAAI,EAAI,EA8B5E,IA1BAc,EAAI4G,KAAKsF,MAAOhN,GAIN,GAALc,GAAUA,GAAK,EAAI,GACpBtB,EAAImD,EAAcjD,IACXF,EAAEwB,OAASrB,GAAM,GAAK,IAAIH,GAAK,KACtCsB,EAAI4G,KAAKsF,KAAKxN,GACdG,EAAImK,GAAYnK,EAAI,GAAM,IAAY,EAAJA,GAASA,EAAI,GAE1CmB,GAAK,EAAI,EACVtB,EAAI,KAAOG,GAEXH,EAAIsB,EAAEyC,gBACN/D,EAAIA,EAAEmB,MAAO,EAAGnB,EAAE6B,QAAQ,KAAO,GAAM1B,GAG3CsC,EAAI,GAAI1C,GAAUC,IAElByC,EAAI,GAAI1C,GAAWuB,EAAI,IAOtBmB,EAAEvC,EAAE,GAML,IALAC,EAAIsC,EAAEtC,EACNmB,EAAInB,EAAIyC,EACC,EAAJtB,IAAQA,EAAI,KAOb,GAHAkL,EAAI/J,EACJA,EAAIiL,EAAKV,MAAOR,EAAEE,KAAMrJ,EAAK7C,EAAGgM,EAAG5J,EAAI,KAElCO,EAAeqJ,EAAEtM,GAAMiB,MAAO,EAAGG,MAAUtB,EAC3CmD,EAAeV,EAAEvC,IAAMiB,MAAO,EAAGG,GAAM,CAWxC,GANKmB,EAAEtC,EAAIA,KAAMmB,EACjBtB,EAAIA,EAAEmB,MAAOG,EAAI,EAAGA,EAAI,GAKd,QAALtB,IAAgByN,GAAY,QAALzN,GAgBrB,IAIIA,KAAOA,EAAEmB,MAAM,IAAqB,KAAfnB,EAAEuD,OAAO,MAGjCzC,EAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAG,GACpCoD,GAAK1B,EAAEuK,MAAMvK,GAAG+I,GAAGhL,GAGvB,OAvBA,IAAMiN,IACF3M,EAAO0L,EAAGA,EAAErM,EAAIY,EAAiB,EAAG,GAE/ByL,EAAEQ,MAAMR,GAAGhB,GAAGhL,IAAK,CACpBiC,EAAI+J,CACJ,OAIR5J,GAAM,EACNtB,GAAK,EACLmM,EAAM,EAkBtB,MAAO3M,GAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAGC,EAAemD,IAwB9DuB,EAAEsH,MAAQtH,EAAEiI,IAAM,SAAWhL,EAAG1C,GAC5B,GAAIC,GAAGC,EAAGC,EAAGwE,EAAGpC,EAAG2B,EAAGyJ,EAAKhF,EAAKC,EAAKgF,EAAKC,EAAKC,EAAKC,EAChDtF,EAAMuF,EACNzN,EAAIC,KACJiC,EAAKlC,EAAEN,EACPkK,GAAOvJ,EAAK,GAAI8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAAMC,CAGhD,MAAMwC,GAAO0H,GAAO1H,EAAG,IAAO0H,EAAG,IAmB7B,OAhBM5J,EAAEc,IAAMqB,EAAErB,GAAKoB,IAAOA,EAAG,KAAO0H,GAAMA,IAAOA,EAAG,KAAO1H,EACzDC,EAAEzC,EAAIyC,EAAExC,EAAIwC,EAAErB,EAAI,MAElBqB,EAAErB,GAAKd,EAAEc,EAGHoB,GAAO0H,GAKTzH,EAAEzC,GAAK,GACPyC,EAAExC,EAAI,GALNwC,EAAEzC,EAAIyC,EAAExC,EAAI,MASbwC,CAYX,KATAxC,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDS,EAAErB,GAAKd,EAAEc,EACTsM,EAAMlL,EAAGlB,OACTqM,EAAMzD,EAAG5I,OAGEqM,EAAND,IAAYI,EAAKtL,EAAIA,EAAK0H,EAAIA,EAAK4D,EAAI5N,EAAIwN,EAAKA,EAAMC,EAAKA,EAAMzN,GAGhEA,EAAIwN,EAAMC,EAAKG,KAAS5N,IAAK4N,EAAG7L,KAAK,IAK3C,IAHAuG,EAAOjD,EACPwI,EAAWjF,EAEL5I,EAAIyN,IAAOzN,GAAK,GAAK,CAKvB,IAJAF,EAAI,EACJ4N,EAAM1D,EAAGhK,GAAK6N,EACdF,EAAM3D,EAAGhK,GAAK6N,EAAW,EAEnBzL,EAAIoL,EAAKhJ,EAAIxE,EAAIoC,EAAGoC,EAAIxE,GAC1BwI,EAAMlG,IAAKF,GAAKyL,EAChBpF,EAAMnG,EAAGF,GAAKyL,EAAW,EACzB9J,EAAI4J,EAAMnF,EAAMC,EAAMiF,EACtBlF,EAAMkF,EAAMlF,EAAUzE,EAAI8J,EAAaA,EAAaD,EAAGpJ,GAAK1E,EAC5DA,GAAM0I,EAAMF,EAAO,IAAQvE,EAAI8J,EAAW,GAAMF,EAAMlF,EACtDmF,EAAGpJ,KAAOgE,EAAMF,CAGpBsF,GAAGpJ,GAAK1E,EASZ,MANIA,KACEC,EAEF6N,EAAGxF,QAGA7D,EAAWhC,EAAGqL,EAAI7N,IAgB7BuF,EAAEwI,SAAW,SAAWjJ,EAAIpC,GACxB,GAAI7C,GAAI,GAAID,GAAUU,KAGtB,OAFAwE,GAAW,MAANA,GAAerE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aAA4B,EAALxC,EAAP,KAChEpC,EAAW,MAANA,GAAejC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,EACxDiE,EAAKnE,EAAOd,EAAGiF,EAAIpC,GAAO7C,GAgBrC0F,EAAE3B,cAAgB,SAAWnB,EAAIC,GAC7B,MAAOW,GAAQ/C,KACP,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MAAS7E,EAAK,EAAI,KAAMC,EAAI,KAmBxE6C,EAAEyI,QAAU,SAAWvL,EAAIC,GACvB,MAAOW,GAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACrD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,KA0BtC6C,EAAE0I,SAAW,SAAWxL,EAAIC,GACxB,GAAItC,GAAMiD,EAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACxD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,GAElC,IAAKpC,KAAKP,EAAI,CACV,GAAIE,GACAiO,EAAM9N,EAAI+N,MAAM,KAChBC,GAAMvI,EAAOG,UACbqI,GAAMxI,EAAOI,mBACbF,EAAiBF,EAAOE,eACxBuI,EAAUJ,EAAI,GACdK,EAAeL,EAAI,GACnBpC,EAAQxL,KAAKa,EAAI,EACjBqN,EAAY1C,EAAQwC,EAAQtN,MAAM,GAAKsN,EACvCnO,EAAMqO,EAAUnN,MAIpB,IAFIgN,IAAIpO,EAAImO,EAAIA,EAAKC,EAAIA,EAAKpO,EAAGE,GAAOF,GAEnCmO,EAAK,GAAKjO,EAAM,EAAI,CAIrB,IAHAF,EAAIE,EAAMiO,GAAMA,EAChBE,EAAUE,EAAUC,OAAQ,EAAGxO,GAEnBE,EAAJF,EAASA,GAAKmO,EAClBE,GAAWvI,EAAiByI,EAAUC,OAAQxO,EAAGmO,EAGhDC,GAAK,IAAIC,GAAWvI,EAAiByI,EAAUxN,MAAMf,IACtD6L,IAAOwC,EAAU,IAAMA,GAG/BlO,EAAMmO,EACFD,EAAUzI,EAAOC,mBAAuBuI,GAAMxI,EAAOM,mBACnDoI,EAAanN,QAAS,GAAIN,QAAQ,OAASuN,EAAK,OAAQ,KACxD,KAAOxI,EAAOK,wBACdqI,GACFD,EAGR,MAAOlO,IAgBXmF,EAAEmJ,WAAa,SAAUC,GACrB,GAAIT,GAAKU,EAAIC,EAAI7O,EAAG8O,EAAKjP,EAAGkP,EAAIxF,EAAGpI,EAC/BkB,EAAI9B,EACJF,EAAIC,KACJiC,EAAKlC,EAAEN,EACPqC,EAAI,GAAIxC,GAAU6F,GAClBuJ,EAAKJ,EAAK,GAAIhP,GAAU6F,GACxBwJ,EAAKF,EAAK,GAAInP,GAAU6F,EAoB5B,IAlBW,MAANkJ,IACDpO,GAAS,EACTV,EAAI,GAAID,GAAU+O,GAClBpO,EAAS8B,KAEDA,EAAIxC,EAAE+L,UAAa/L,EAAE6H,GAAGjC,MAExBlF,GACAC,EAAO,GACL,oBAAuB6B,EAAI,eAAiB,kBAAoBsM,GAKtEA,GAAMtM,GAAKxC,EAAEE,GAAKY,EAAOd,EAAGA,EAAEG,EAAI,EAAG,GAAIyL,IAAIhG,GAAO5F,EAAI,QAI1D0C,EAAK,MAAOlC,GAAEqD,UAgBpB,KAfAvC,EAAI6B,EAAcT,GAIlBvC,EAAIoC,EAAEpC,EAAImB,EAAEE,OAAShB,EAAEL,EAAI,EAC3BoC,EAAErC,EAAE,GAAKmF,GAAY4J,EAAM9O,EAAI+B,GAAa,EAAIA,EAAW+M,EAAMA,GACjEH,GAAMA,GAAM9O,EAAEqJ,IAAI9G,GAAK,EAAMpC,EAAI,EAAIoC,EAAI4M,EAAOnP,EAEhDiP,EAAMjN,EACNA,EAAU,EAAI,EACdhC,EAAI,GAAID,GAAUuB,GAGlB4N,EAAGhP,EAAE,GAAK,EAGNwJ,EAAIrG,EAAKrD,EAAGuC,EAAG,EAAG,GAClByM,EAAKD,EAAGrC,KAAMhD,EAAEsD,MAAMoC,IACH,GAAdJ,EAAG3F,IAAIyF,IACZC,EAAKK,EACLA,EAAKJ,EACLG,EAAKD,EAAGxC,KAAMhD,EAAEsD,MAAOgC,EAAKG,IAC5BD,EAAKF,EACLzM,EAAIvC,EAAEsM,MAAO5C,EAAEsD,MAAOgC,EAAKzM,IAC3BvC,EAAIgP,CAgBR,OAbAA,GAAK3L,EAAKyL,EAAGxC,MAAMyC,GAAKK,EAAI,EAAG,GAC/BF,EAAKA,EAAGxC,KAAMsC,EAAGhC,MAAMmC,IACvBJ,EAAKA,EAAGrC,KAAMsC,EAAGhC,MAAMoC,IACvBF,EAAG5N,EAAI6N,EAAG7N,EAAId,EAAEc,EAChBnB,GAAK,EAGLkO,EAAMhL,EAAK8L,EAAIC,EAAIjP,EAAGa,GAAgBsL,MAAM9L,GAAGwK,MAAM3B,IAC/ChG,EAAK6L,EAAIH,EAAI5O,EAAGa,GAAgBsL,MAAM9L,GAAGwK,OAAU,GAC7CmE,EAAGtL,WAAYuL,EAAGvL,aAClBqL,EAAGrL,WAAYkL,EAAGlL,YAE9B7B,EAAUiN,EACHZ,GAOX3I,EAAE2J,SAAW,WACT,GAAI7O,GAAIC,IAGR,QAAQD,IAAOA,EAAEc,EAAU,EAANd,EAAEc,EAAQ+I,MAenC3E,EAAE4J,QAAU5J,EAAE1C,IAAM,SAAUhD,GAC1B,GAAIwC,GAAGG,EACHvC,EAAIoF,EAAe,EAAJxF,GAASA,GAAKA,GAC7BQ,EAAIC,IAGR,KAAMG,EAAYZ,GAAIsN,EAAkBA,EAAkB,GAAI,eACzDzB,SAAS7L,IAAMI,EAAIkN,IAAsBtN,GAAK,IAC/CuP,WAAWvP,IAAMA,KAAQA,EAAIqK,MAC7B,MAAO,IAAItK,GAAWmI,KAAKlF,KAAMxC,EAAGR,GASxC,KAHAwC,EAAIO,EAAgBwC,EAAUxC,EAAgBb,EAAW,GAAM,EAC/DS,EAAI,GAAI5C,GAAU6F,KAEN,CAER,GAAKxF,EAAI,EAAI,CAET,GADAuC,EAAIA,EAAEqK,MAAMxM,IACNmC,EAAEzC,EAAI,KACPsC,IAAKG,EAAEzC,EAAEsB,OAASgB,IAAIG,EAAEzC,EAAEsB,OAASgB,GAI5C,GADApC,EAAIoF,EAAWpF,EAAI,IACbA,EAAI,KAEVI,GAAIA,EAAEwM,MAAMxM,GACPgC,GAAKhC,EAAEN,GAAKM,EAAEN,EAAEsB,OAASgB,IAAIhC,EAAEN,EAAEsB,OAASgB,GAInD,MADS,GAAJxC,IAAQ2C,EAAIiD,EAAIvC,IAAIV,IAClBH,EAAI1B,EAAO6B,EAAGI,EAAe/B,GAAkB2B,GAkB1D+C,EAAE8J,YAAc,SAAWvK,EAAIpC,GAC3B,MAAOW,GAAQ/C,KAAY,MAANwE,GAAcrE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aACtD,EAALxC,EAAS,KAAMpC,EAAI,KAgB3B6C,EAAE7B,SAAW,SAAU5D,GACnB,GAAIM,GACAP,EAAIS,KACJa,EAAItB,EAAEsB,EACNnB,EAAIH,EAAEG,CAyBV,OAtBW,QAANA,EAEGmB,GACAf,EAAM,WACG,EAAJe,IAAQf,EAAM,IAAMA,IAEzBA,EAAM,OAGVA,EAAM4C,EAAenD,EAAEE,GAOnBK,EALM,MAALN,GAAcW,EAAYX,EAAG,EAAG,GAAI,GAAI,QAKnC0B,EAAauB,EAAc3C,EAAKJ,GAAS,EAAJF,EAAO,GAAIqB,GAJ3CwC,GAAL3D,GAAmBA,GAAK0F,EAC1B9B,EAAexD,EAAKJ,GACpB+C,EAAc3C,EAAKJ,GAKlB,EAAJmB,GAAStB,EAAEE,EAAE,KAAKK,EAAM,IAAMA,IAGhCA,GAQXmF,EAAE+J,UAAY/J,EAAEgK,MAAQ,WACpB,MAAO5O,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEiK,QAAUjK,EAAEkK,OAAS,WACnB,MAAOnP,MAAKoD,YAcE,MAAb/D,GAAoBC,EAAUkH,OAAOnH,GAEnCC,EAOX,QAASuK,GAAStK,GACd,GAAII,GAAQ,EAAJJ,CACR,OAAOA,GAAI,GAAKA,IAAMI,EAAIA,EAAIA,EAAI,EAKtC,QAAS+C,GAAciE,GAMnB,IALA,GAAI9F,GAAG+L,EACHjN,EAAI,EACJwE,EAAIwC,EAAE5F,OACNiB,EAAI2E,EAAE,GAAK,GAEHxC,EAAJxE,GAAS,CAGb,IAFAkB,EAAI8F,EAAEhH,KAAO,GACbiN,EAAInL,EAAWZ,EAAEE,OACT6L,IAAK/L,EAAI,IAAMA,GACvBmB,GAAKnB,EAIT,IAAMsD,EAAInC,EAAEjB,OAA8B,KAAtBiB,EAAEf,aAAakD,KACnC,MAAOnC,GAAEtB,MAAO,EAAGyD,EAAI,GAAK,GAKhC,QAASsE,GAAS1I,EAAGmC,GACjB,GAAIyE,GAAGnH,EACHyC,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,EACPE,EAAII,EAAEc,EACNsD,EAAIjC,EAAErB,EACNkB,EAAIhC,EAAEL,EACN0P,EAAIlN,EAAExC,CAGV,KAAMC,IAAMwE,EAAI,MAAO,KAMvB,IAJAwC,EAAI1E,IAAOA,EAAG,GACdzC,EAAImK,IAAOA,EAAG,GAGThD,GAAKnH,EAAI,MAAOmH,GAAInH,EAAI,GAAK2E,EAAIxE,CAGtC,IAAKA,GAAKwE,EAAI,MAAOxE,EAMrB,IAJAgH,EAAQ,EAAJhH,EACJH,EAAIuC,GAAKqN,GAGHnN,IAAO0H,EAAK,MAAOnK,GAAI,GAAKyC,EAAK0E,EAAI,EAAI,EAG/C,KAAMnH,EAAI,MAAOuC,GAAIqN,EAAIzI,EAAI,EAAI,EAKjC,KAHAxC,GAAMpC,EAAIE,EAAGlB,SAAaqO,EAAIzF,EAAG5I,QAAWgB,EAAIqN,EAG1CzP,EAAI,EAAOwE,EAAJxE,EAAOA,IAAM,GAAKsC,EAAGtC,IAAMgK,EAAGhK,GAAK,MAAOsC,GAAGtC,GAAKgK,EAAGhK,GAAKgH,EAAI,EAAI,EAG/E,OAAO5E,IAAKqN,EAAI,EAAIrN,EAAIqN,EAAIzI,EAAI,EAAI,GASxC,QAASM,GAAsB1H,EAAGuE,EAAKC,GACnC,OAASxE,EAAI0E,EAAS1E,KAAQuE,GAAYC,GAALxE,EAIzC,QAASoE,GAAQ0L,GACb,MAA8C,kBAAvCC,OAAOpK,UAAU9B,SAASQ,KAAKyL,GAS1C,QAAS7M,GAAW1C,EAAK8B,EAAQD,GAO7B,IANA,GAAIwC,GAEAoL,EADA3B,GAAO,GAEPjO,EAAI,EACJE,EAAMC,EAAIiB,OAEFlB,EAAJF,GAAW,CACf,IAAM4P,EAAO3B,EAAI7M,OAAQwO,IAAQ3B,EAAI2B,IAAS3N,GAG9C,IAFAgM,EAAKzJ,EAAI,IAAO1D,EAASW,QAAStB,EAAIgD,OAAQnD,MAEtCwE,EAAIyJ,EAAI7M,OAAQoD,IAEfyJ,EAAIzJ,GAAKxC,EAAU,IACD,MAAdiM,EAAIzJ,EAAI,KAAayJ,EAAIzJ,EAAI,GAAK,GACvCyJ,EAAIzJ,EAAI,IAAMyJ,EAAIzJ,GAAKxC,EAAU,EACjCiM,EAAIzJ,IAAMxC,GAKtB,MAAOiM,GAAIxB,UAIf,QAAS9I,GAAexD,EAAKJ,GACzB,OAASI,EAAIiB,OAAS,EAAIjB,EAAIgD,OAAO,GAAK,IAAMhD,EAAIY,MAAM,GAAKZ,IACvD,EAAJJ,EAAQ,IAAM,MAASA,EAI/B,QAAS+C,GAAc3C,EAAKJ,GACxB,GAAIG,GAAK+M,CAGT,IAAS,EAAJlN,EAAQ,CAGT,IAAMkN,EAAI,OAAQlN,EAAGkN,GAAK,KAC1B9M,EAAM8M,EAAI9M,MAOV,IAHAD,EAAMC,EAAIiB,SAGHrB,EAAIG,EAAM,CACb,IAAM+M,EAAI,IAAKlN,GAAKG,IAAOH,EAAGkN,GAAK,KACnC9M,GAAO8M,MACK/M,GAAJH,IACRI,EAAMA,EAAIY,MAAO,EAAGhB,GAAM,IAAMI,EAAIY,MAAMhB,GAIlD,OAAOI,GAIX,QAASmE,GAAS1E,GAEd,MADAA,GAAIuP,WAAWvP,GACJ,EAAJA,EAAQuF,EAASvF,GAAKwF,EAAUxF,GAtkF3C,GAAID,GAAW6H,EAAQvG,EACnBO,EAAY,uCACZ2D,EAAW2C,KAAK+C,KAChBzF,EAAY0C,KAAKuD,MACjB9D,EAAU,iCACV/D,EAAe,gBACfnC,EAAgB,kDAChBP,EAAW,mEACXuE,EAAO,KACPvD,EAAW,GACXoL,EAAmB,iBAEnBjI,GAAY,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAC7E2D,EAAY,IAOZvB,EAAM,GA4jFV,IAHA1H,EAAYF,IAGU,kBAAVoQ,SAAwBA,OAAOC,IACvCD,OAAQ,WAAc,MAAOlQ,SAG1B,IAAsB,mBAAVoQ,SAAyBA,OAAOC,SAE/C,GADAD,OAAOC,QAAUrQ,GACX6H,EAAS,IAAMA,EAASyI,QAAQ,UAAa,MAAOlQ,SAI1DP,GAAOG,UAAYA,GAExBU"} \ No newline at end of file diff --git a/node_modules/web3/bower/bignumber.js/package.json b/node_modules/web3/bower/bignumber.js/package.json deleted file mode 100644 index bc020c1..0000000 --- a/node_modules/web3/bower/bignumber.js/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "bignumber.js", - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "version": "2.0.5", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "repository" : { - "type": "git", - "url": "https://github.com/MikeMcl/bignumber.js.git" - }, - "main": "bignumber", - "author": { - "name": "Michael Mclaughlin", - "email": "M8ch88l@gmail.com" - }, - "engines": { - "node": "*" - }, - "license": "MIT", - "scripts": { - "test": "node ./test/every-test.js", - "build": "uglifyjs bignumber.js --source-map doc/bignumber.js.map -c -m -o bignumber.min.js --preamble \"/* bignumber.js v2.0.5 https://github.com/MikeMcl/bignumber.js/LICENCE */\"" - } -} \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/.bower.json b/node_modules/web3/bower/crypto-js/.bower.json deleted file mode 100644 index f3eb4c2..0000000 --- a/node_modules/web3/bower/crypto-js/.bower.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {}, - "ignore": [], - "_release": "3.1.4", - "_resolution": { - "type": "version", - "tag": "3.1.4", - "commit": "9cc7f829741eddabe693a704f10f972fb9c0d5a6" - }, - "_source": "git://github.com/brix/crypto-js.git", - "_target": "~3.1.4", - "_originalSource": "crypto-js" -} \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/CONTRIBUTING.md b/node_modules/web3/bower/crypto-js/CONTRIBUTING.md deleted file mode 100644 index 09bf774..0000000 --- a/node_modules/web3/bower/crypto-js/CONTRIBUTING.md +++ /dev/null @@ -1,28 +0,0 @@ -# Contribution - -# Git Flow - -The crypto-js project uses [git flow](https://github.com/nvie/gitflow) to manage branches. -Do your changes on the `develop` or even better on a `feature/*` branch. Don't do any changes on the `master` branch. - -# Pull request - -Target your pull request on `develop` branch. Other pull request won't be accepted. - -# How to build - -1. Clone - -2. Run - - ```sh - npm install - ``` - -3. Run - - ```sh - npm run build - ``` - -4. Check `build` folder \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/README.md b/node_modules/web3/bower/crypto-js/README.md deleted file mode 100644 index 5ead0a0..0000000 --- a/node_modules/web3/bower/crypto-js/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# crypto-js - -Modularized port of googlecode project crypto-js. - -## Node.js (Install) - -Requirements: - -- Node.js -- npm (Node.js package manager) - -```bash -npm install crypto-js -``` - -### Usage - -Modular include: - -```javascript -var AES = require("crypto-js/aes"); -var SHA256 = require("crypto-js/sha256"); -... -console.log(SHA256("Message")); -``` - -Including all libraries, for access to extra methods: - -```javascript -var CryptoJS = require("crypto-js"); -console.log(CryptoJS.HmacSHA1("Message", "Key")); -``` - -## Client (browser) - -Requirements: - -- Node.js -- Bower (package manager for frontend) - -```bash -bower install crypto-js -``` - -### Usage - -Modular include: - -```javascript -require.config({ - packages: [ - { - name: 'crypto-js', - location: 'path-to/bower_components/crypto-js', - main: 'index' - } - ] -}); - -require(["crypto-js/aes", "crypto-js/sha256"], function (AES, SHA256) { - console.log(SHA256("Message")); -}); -``` - -Including all libraries, for access to extra methods: - -```javascript -// Above-mentioned will work or use this simple form -require.config({ - paths: { - 'require-js': 'path-to/bower_components/crypto-js/crypto-js' - } -}); - -require(["crypto-js"], function (CryptoJS) { - console.log(CryptoJS.HmacSHA1("Message", "Key")); -}); -``` - -### Usage without RequireJS - -```html - - - -## API - -See: https://code.google.com/p/crypto-js - -### List of modules - - -- ```crypto-js/core``` -- ```crypto-js/x64-core``` -- ```crypto-js/lib-typedarrays``` - ---- - -- ```crypto-js/md5``` -- ```crypto-js/sha1``` -- ```crypto-js/sha256``` -- ```crypto-js/sha224``` -- ```crypto-js/sha512``` -- ```crypto-js/sha384``` -- ```crypto-js/sha3``` -- ```crypto-js/ripemd160``` - ---- - -- ```crypto-js/hmac-md5``` -- ```crypto-js/hmac-sha1``` -- ```crypto-js/hmac-sha256``` -- ```crypto-js/hmac-sha224``` -- ```crypto-js/hmac-sha512``` -- ```crypto-js/hmac-sha384``` -- ```crypto-js/hmac-sha3``` -- ```crypto-js/hmac-ripemd160``` - ---- - -- ```crypto-js/pbkdf2``` - ---- - -- ```crypto-js/aes``` -- ```crypto-js/tripledes``` -- ```crypto-js/rc4``` -- ```crypto-js/rabbit``` -- ```crypto-js/rabbit-legacy``` -- ```crypto-js/evpkdf``` - ---- - -- ```crypto-js/format-openssl``` -- ```crypto-js/format-hex``` - ---- - -- ```crypto-js/enc-latin1``` -- ```crypto-js/enc-utf8``` -- ```crypto-js/enc-hex``` -- ```crypto-js/enc-utf16``` -- ```crypto-js/enc-base64``` - ---- - -- ```crypto-js/mode-cfb``` -- ```crypto-js/mode-ctr``` -- ```crypto-js/mode-ctr-gladman``` -- ```crypto-js/mode-ofb``` -- ```crypto-js/mode-ecb``` - ---- - -- ```crypto-js/pad-pkcs7``` -- ```crypto-js/pad-ansix923``` -- ```crypto-js/pad-iso10126``` -- ```crypto-js/pad-iso97971``` -- ```crypto-js/pad-zeropadding``` -- ```crypto-js/pad-nopadding``` - -## License - -[The MIT License (MIT)](http://opensource.org/licenses/MIT) - -Copyright (c) 2009-2013 Jeff Mott -Copyright (c) 2013-2015 Evan Vosberg - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/aes.js b/node_modules/web3/bower/crypto-js/aes.js deleted file mode 100644 index ff0d208..0000000 --- a/node_modules/web3/bower/crypto-js/aes.js +++ /dev/null @@ -1,227 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/bower.json b/node_modules/web3/bower/crypto-js/bower.json deleted file mode 100644 index 32c13d0..0000000 --- a/node_modules/web3/bower/crypto-js/bower.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {}, - "ignore": [] -} diff --git a/node_modules/web3/bower/crypto-js/cipher-core.js b/node_modules/web3/bower/crypto-js/cipher-core.js deleted file mode 100644 index 4fad569..0000000 --- a/node_modules/web3/bower/crypto-js/cipher-core.js +++ /dev/null @@ -1,875 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/core.js b/node_modules/web3/bower/crypto-js/core.js deleted file mode 100644 index b39b0fd..0000000 --- a/node_modules/web3/bower/crypto-js/core.js +++ /dev/null @@ -1,745 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else if (thatWords.length > 0xffff) { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } else { - // Copy all words at once - thisWords.push.apply(thisWords, thatWords); - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/crypto-js.js b/node_modules/web3/bower/crypto-js/crypto-js.js deleted file mode 100644 index e961277..0000000 --- a/node_modules/web3/bower/crypto-js/crypto-js.js +++ /dev/null @@ -1,5951 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else if (thatWords.length > 0xffff) { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } else { - // Copy all words at once - thisWords.push.apply(thisWords, thatWords); - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki b/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki deleted file mode 100644 index 6b20199..0000000 --- a/node_modules/web3/bower/crypto-js/docs/QuickStartGuide.wiki +++ /dev/null @@ -1,470 +0,0 @@ - - ----- - -= Quick-start Guide = - -== Hashers == - -=== The Hasher Algorithms === - -==== MD5 ==== - -MD5 is a widely used hash function. It's been used in a variety of security applications and is also commonly used to check the integrity of files. Though, MD5 is not collision resistant, and it isn't suitable for applications like SSL certificates or digital signatures that rely on this property. - -{{{ - - -}}} - -==== SHA-1 ==== - -The SHA hash functions were designed by the National Security Agency (NSA). SHA-1 is the most established of the existing SHA hash functions, and it's used in a variety of security applications and protocols. Though, SHA-1's collision resistance has been weakening as new attacks are discovered or improved. - -{{{ - - -}}} - -==== SHA-2 ==== - -SHA-256 is one of the four variants in the SHA-2 set. It isn't as widely used as SHA-1, though it appears to provide much better security. - -{{{ - - -}}} - -SHA-512 is largely identical to SHA-256 but operates on 64-bit words rather than 32. - -{{{ - - -}}} - -CryptoJS also supports SHA-224 and SHA-384, which are largely identical but truncated versions of SHA-256 and SHA-512 respectively. - -==== SHA-3 ==== - -SHA-3 is the winner of a five-year competition to select a new cryptographic hash algorithm where 64 competing designs were evaluated. - -{{{ - - -}}} - -SHA-3 can be configured to output hash lengths of one of 224, 256, 384, or 512 bits. The default is 512 bits. - -{{{ - - -}}} - -==== RIPEMD-160 ==== - -{{{ - - -}}} - -=== The Hasher Input === - -The hash algorithms accept either strings or instances of CryptoJS.lib.WordArray. A WordArray object represents an array of 32-bit words. When you pass a string, it's automatically converted to a WordArray encoded as UTF-8. - -=== The Hasher Output === - -The hash you get back isn't a string yet. It's a WordArray object. When you use a WordArray object in a string context, it's automatically converted to a hex string. - -{{{ - - -}}} - -You can convert a WordArray object to other formats by explicitly calling the toString method and passing an encoder. - -{{{ - - - -}}} - -=== Progressive Hashing === - -{{{ - - -}}} - -== HMAC == - -Keyed-hash message authentication codes (HMAC) is a mechanism for message authentication using cryptographic hash functions. - -HMAC can be used in combination with any iterated cryptographic hash function. - -{{{ - - - - - -}}} - -=== Progressive HMAC Hashing === - -{{{ - - -}}} - -== PBKDF2 == - -PBKDF2 is a password-based key derivation function. In many applications of cryptography, user security is ultimately dependent on a password, and because a password usually can't be used directly as a cryptographic key, some processing is required. - -A salt provides a large set of keys for any given password, and an iteration count increases the cost of producing keys from a password, thereby also increasing the difficulty of attack. - -{{{ - - -}}} - -== Ciphers == - -=== The Cipher Algorithms === - -==== AES ==== - -The Advanced Encryption Standard (AES) is a U.S. Federal Information Processing Standard (FIPS). It was selected after a 5-year process where 15 competing designs were evaluated. - -{{{ - - -}}} - -CryptoJS supports AES-128, AES-192, and AES-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key. - -==== DES, Triple DES ==== - -DES is a previously dominant algorithm for encryption, and was published as an official Federal Information Processing Standard (FIPS). DES is now considered to be insecure due to the small key size. - -{{{ - - -}}} - -Triple DES applies DES three times to each block to increase the key size. The algorithm is believed to be secure in this form. - -{{{ - - -}}} - -==== Rabbit ==== - -Rabbit is a high-performance stream cipher and a finalist in the eSTREAM Portfolio. It is one of the four designs selected after a 3 1/2-year process where 22 designs were evaluated. - -{{{ - - -}}} - -==== RC4, RC4Drop ==== - -RC4 is a widely-used stream cipher. It's used in popular protocols such as SSL and WEP. Although remarkable for its simplicity and speed, the algorithm's history doesn't inspire confidence in its security. - -{{{ - - -}}} - -It was discovered that the first few bytes of keystream are strongly non-random and leak information about the key. We can defend against this attack by discarding the initial portion of the keystream. This modified algorithm is traditionally called RC4-drop. - -By default, 192 words (768 bytes) are dropped, but you can configure the algorithm to drop any number of words. - -{{{ - - -}}} - -=== Custom Key and IV === - -{{{ - - -}}} - -=== Block Modes and Padding === - -{{{ - - - - -}}} - -CryptoJS supports the following modes: - - * CBC (the default) - * CFB - * CTR - * OFB - * ECB - -And CryptoJS supports the following padding schemes: - - * Pkcs7 (the default) - * Iso97971 - * AnsiX923 - * Iso10126 - * ZeroPadding - * NoPadding - -=== The Cipher Input === - -For the plaintext message, the cipher algorithms accept either strings or instances of CryptoJS.lib.WordArray. - -For the key, when you pass a string, it's treated as a passphrase and used to derive an actual key and IV. Or you can pass a WordArray that represents the actual key. If you pass the actual key, you must also pass the actual IV. - -For the ciphertext, the cipher algorithms accept either strings or instances of CryptoJS.lib.CipherParams. A CipherParams object represents a collection of parameters such as the IV, a salt, and the raw ciphertext itself. When you pass a string, it's automatically converted to a CipherParams object according to a configurable format strategy. - -=== The Cipher Output === - -The plaintext you get back after decryption is a WordArray object. See Hashers' Output for more detail. - -The ciphertext you get back after encryption isn't a string yet. It's a CipherParams object. A CipherParams object gives you access to all the parameters used during encryption. When you use a CipherParams object in a string context, it's automatically converted to a string according to a format strategy. The default is an OpenSSL-compatible format. - -{{{ - - -}}} - -You can define your own formats in order to be compatible with other crypto implementations. A format is an object with two methods—stringify and parse—that converts between CipherParams objects and ciphertext strings. - -Here's how you might write a JSON formatter: - -{{{ - - -}}} - -=== Progressive Ciphering === - -{{{ - - -}}} - -=== Interoperability === - -==== With OpenSSL ==== - -Encrypt with OpenSSL: - -{{{ -openssl enc -aes-256-cbc -in infile -out outfile -pass pass:"Secret Passphrase" -e -base64 -}}} - -Decrypt with CryptoJS: - -{{{ - - -}}} - -== Encoders == - -CryptoJS can convert from encoding formats such as Base64, Latin1 or Hex to WordArray objects and vica versa. - -{{{ - - - - -}}} \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/enc-base64.js b/node_modules/web3/bower/crypto-js/enc-base64.js deleted file mode 100644 index cb1b79c..0000000 --- a/node_modules/web3/bower/crypto-js/enc-base64.js +++ /dev/null @@ -1,123 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/enc-hex.js b/node_modules/web3/bower/crypto-js/enc-hex.js deleted file mode 100644 index 88161ff..0000000 --- a/node_modules/web3/bower/crypto-js/enc-hex.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Hex; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/enc-latin1.js b/node_modules/web3/bower/crypto-js/enc-latin1.js deleted file mode 100644 index ade56dc..0000000 --- a/node_modules/web3/bower/crypto-js/enc-latin1.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Latin1; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/enc-utf16.js b/node_modules/web3/bower/crypto-js/enc-utf16.js deleted file mode 100644 index 7de6245..0000000 --- a/node_modules/web3/bower/crypto-js/enc-utf16.js +++ /dev/null @@ -1,149 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/enc-utf8.js b/node_modules/web3/bower/crypto-js/enc-utf8.js deleted file mode 100644 index e7a251d..0000000 --- a/node_modules/web3/bower/crypto-js/enc-utf8.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Utf8; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/evpkdf.js b/node_modules/web3/bower/crypto-js/evpkdf.js deleted file mode 100644 index 3fe5c01..0000000 --- a/node_modules/web3/bower/crypto-js/evpkdf.js +++ /dev/null @@ -1,132 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/format-hex.js b/node_modules/web3/bower/crypto-js/format-hex.js deleted file mode 100644 index 2e9a861..0000000 --- a/node_modules/web3/bower/crypto-js/format-hex.js +++ /dev/null @@ -1,66 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/format-openssl.js b/node_modules/web3/bower/crypto-js/format-openssl.js deleted file mode 100644 index 3373edc..0000000 --- a/node_modules/web3/bower/crypto-js/format-openssl.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.format.OpenSSL; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac-md5.js b/node_modules/web3/bower/crypto-js/hmac-md5.js deleted file mode 100644 index ad7a90a..0000000 --- a/node_modules/web3/bower/crypto-js/hmac-md5.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./md5"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./md5", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacMD5; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac-ripemd160.js b/node_modules/web3/bower/crypto-js/hmac-ripemd160.js deleted file mode 100644 index 73d55a7..0000000 --- a/node_modules/web3/bower/crypto-js/hmac-ripemd160.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./ripemd160"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./ripemd160", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacRIPEMD160; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac-sha1.js b/node_modules/web3/bower/crypto-js/hmac-sha1.js deleted file mode 100644 index 0b570cb..0000000 --- a/node_modules/web3/bower/crypto-js/hmac-sha1.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA1; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac-sha224.js b/node_modules/web3/bower/crypto-js/hmac-sha224.js deleted file mode 100644 index 3778863..0000000 --- a/node_modules/web3/bower/crypto-js/hmac-sha224.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./sha224"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./sha224", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA224; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac-sha256.js b/node_modules/web3/bower/crypto-js/hmac-sha256.js deleted file mode 100644 index 33b0c9f..0000000 --- a/node_modules/web3/bower/crypto-js/hmac-sha256.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA256; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac-sha3.js b/node_modules/web3/bower/crypto-js/hmac-sha3.js deleted file mode 100644 index 467495c..0000000 --- a/node_modules/web3/bower/crypto-js/hmac-sha3.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha3"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha3", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJSHmacSHA3; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac-sha384.js b/node_modules/web3/bower/crypto-js/hmac-sha384.js deleted file mode 100644 index 0036e2b..0000000 --- a/node_modules/web3/bower/crypto-js/hmac-sha384.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./sha384"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512", "./sha384", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA384; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac-sha512.js b/node_modules/web3/bower/crypto-js/hmac-sha512.js deleted file mode 100644 index c1005b6..0000000 --- a/node_modules/web3/bower/crypto-js/hmac-sha512.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA512; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/hmac.js b/node_modules/web3/bower/crypto-js/hmac.js deleted file mode 100644 index 8c09851..0000000 --- a/node_modules/web3/bower/crypto-js/hmac.js +++ /dev/null @@ -1,143 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/index.js b/node_modules/web3/bower/crypto-js/index.js deleted file mode 100644 index c93556a..0000000 --- a/node_modules/web3/bower/crypto-js/index.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/lib-typedarrays.js b/node_modules/web3/bower/crypto-js/lib-typedarrays.js deleted file mode 100644 index 264b210..0000000 --- a/node_modules/web3/bower/crypto-js/lib-typedarrays.js +++ /dev/null @@ -1,76 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/md5.js b/node_modules/web3/bower/crypto-js/md5.js deleted file mode 100644 index 12b0fdd..0000000 --- a/node_modules/web3/bower/crypto-js/md5.js +++ /dev/null @@ -1,268 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/mode-cfb.js b/node_modules/web3/bower/crypto-js/mode-cfb.js deleted file mode 100644 index 86231f1..0000000 --- a/node_modules/web3/bower/crypto-js/mode-cfb.js +++ /dev/null @@ -1,78 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js b/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js deleted file mode 100644 index bbc5687..0000000 --- a/node_modules/web3/bower/crypto-js/mode-ctr-gladman.js +++ /dev/null @@ -1,116 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/mode-ctr.js b/node_modules/web3/bower/crypto-js/mode-ctr.js deleted file mode 100644 index c3d470a..0000000 --- a/node_modules/web3/bower/crypto-js/mode-ctr.js +++ /dev/null @@ -1,58 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/mode-ecb.js b/node_modules/web3/bower/crypto-js/mode-ecb.js deleted file mode 100644 index ff06921..0000000 --- a/node_modules/web3/bower/crypto-js/mode-ecb.js +++ /dev/null @@ -1,40 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/mode-ofb.js b/node_modules/web3/bower/crypto-js/mode-ofb.js deleted file mode 100644 index c01314c..0000000 --- a/node_modules/web3/bower/crypto-js/mode-ofb.js +++ /dev/null @@ -1,54 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/package.json b/node_modules/web3/bower/crypto-js/package.json deleted file mode 100644 index a20bf4c..0000000 --- a/node_modules/web3/bower/crypto-js/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "crypto-js", - "version": "3.1.4", - "description": "Modularized port of googlecode project crypto-js.", - "author": { - "name": "Evan Vosberg", - "url": "http://github.com/evanvosberg" - }, - "homepage": "http://github.com/evanvosberg/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/evanvosberg/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64" - ], - "main": "index.js", - "dependencies": {} -} diff --git a/node_modules/web3/bower/crypto-js/pad-ansix923.js b/node_modules/web3/bower/crypto-js/pad-ansix923.js deleted file mode 100644 index f01f21e..0000000 --- a/node_modules/web3/bower/crypto-js/pad-ansix923.js +++ /dev/null @@ -1,49 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/pad-iso10126.js b/node_modules/web3/bower/crypto-js/pad-iso10126.js deleted file mode 100644 index 6e2aefd..0000000 --- a/node_modules/web3/bower/crypto-js/pad-iso10126.js +++ /dev/null @@ -1,44 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/pad-iso97971.js b/node_modules/web3/bower/crypto-js/pad-iso97971.js deleted file mode 100644 index 41049b4..0000000 --- a/node_modules/web3/bower/crypto-js/pad-iso97971.js +++ /dev/null @@ -1,40 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/pad-nopadding.js b/node_modules/web3/bower/crypto-js/pad-nopadding.js deleted file mode 100644 index c7787c9..0000000 --- a/node_modules/web3/bower/crypto-js/pad-nopadding.js +++ /dev/null @@ -1,30 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/pad-pkcs7.js b/node_modules/web3/bower/crypto-js/pad-pkcs7.js deleted file mode 100644 index 3555168..0000000 --- a/node_modules/web3/bower/crypto-js/pad-pkcs7.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.pad.Pkcs7; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/pad-zeropadding.js b/node_modules/web3/bower/crypto-js/pad-zeropadding.js deleted file mode 100644 index 0e8a859..0000000 --- a/node_modules/web3/bower/crypto-js/pad-zeropadding.js +++ /dev/null @@ -1,45 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/pbkdf2.js b/node_modules/web3/bower/crypto-js/pbkdf2.js deleted file mode 100644 index 1258251..0000000 --- a/node_modules/web3/bower/crypto-js/pbkdf2.js +++ /dev/null @@ -1,145 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/rabbit-legacy.js b/node_modules/web3/bower/crypto-js/rabbit-legacy.js deleted file mode 100644 index e118b6b..0000000 --- a/node_modules/web3/bower/crypto-js/rabbit-legacy.js +++ /dev/null @@ -1,190 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/rabbit.js b/node_modules/web3/bower/crypto-js/rabbit.js deleted file mode 100644 index 1b06833..0000000 --- a/node_modules/web3/bower/crypto-js/rabbit.js +++ /dev/null @@ -1,192 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/rc4.js b/node_modules/web3/bower/crypto-js/rc4.js deleted file mode 100644 index 0e4bdff..0000000 --- a/node_modules/web3/bower/crypto-js/rc4.js +++ /dev/null @@ -1,139 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/ripemd160.js b/node_modules/web3/bower/crypto-js/ripemd160.js deleted file mode 100644 index 24feb47..0000000 --- a/node_modules/web3/bower/crypto-js/ripemd160.js +++ /dev/null @@ -1,267 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/sha1.js b/node_modules/web3/bower/crypto-js/sha1.js deleted file mode 100644 index 6691149..0000000 --- a/node_modules/web3/bower/crypto-js/sha1.js +++ /dev/null @@ -1,150 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/sha224.js b/node_modules/web3/bower/crypto-js/sha224.js deleted file mode 100644 index d8ce988..0000000 --- a/node_modules/web3/bower/crypto-js/sha224.js +++ /dev/null @@ -1,80 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/sha256.js b/node_modules/web3/bower/crypto-js/sha256.js deleted file mode 100644 index de2d7fc..0000000 --- a/node_modules/web3/bower/crypto-js/sha256.js +++ /dev/null @@ -1,199 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/sha3.js b/node_modules/web3/bower/crypto-js/sha3.js deleted file mode 100644 index 4fb27fe..0000000 --- a/node_modules/web3/bower/crypto-js/sha3.js +++ /dev/null @@ -1,323 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/sha384.js b/node_modules/web3/bower/crypto-js/sha384.js deleted file mode 100644 index a0b95bf..0000000 --- a/node_modules/web3/bower/crypto-js/sha384.js +++ /dev/null @@ -1,83 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/sha512.js b/node_modules/web3/bower/crypto-js/sha512.js deleted file mode 100644 index 3359315..0000000 --- a/node_modules/web3/bower/crypto-js/sha512.js +++ /dev/null @@ -1,323 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/tripledes.js b/node_modules/web3/bower/crypto-js/tripledes.js deleted file mode 100644 index c7becf3..0000000 --- a/node_modules/web3/bower/crypto-js/tripledes.js +++ /dev/null @@ -1,770 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); \ No newline at end of file diff --git a/node_modules/web3/bower/crypto-js/x64-core.js b/node_modules/web3/bower/crypto-js/x64-core.js deleted file mode 100644 index 57dcc14..0000000 --- a/node_modules/web3/bower/crypto-js/x64-core.js +++ /dev/null @@ -1,304 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/node_modules/web3/circle.yml b/node_modules/web3/circle.yml deleted file mode 100644 index 71cb47f..0000000 --- a/node_modules/web3/circle.yml +++ /dev/null @@ -1,3 +0,0 @@ -test: - override: - - npm run test && npm run lint \ No newline at end of file diff --git a/node_modules/web3/coverage/coverage.json b/node_modules/web3/coverage/coverage.json deleted file mode 100644 index 10cacdd..0000000 --- a/node_modules/web3/coverage/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js","s":{"1":1,"2":1,"3":0,"4":1},"b":{"1":[0,1],"2":[1,0]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"2":{"start":{"line":4,"column":0},"end":{"line":6,"column":1}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":23}},"4":{"start":{"line":8,"column":0},"end":{"line":8,"column":22}}},"branchMap":{"1":{"line":4,"type":"if","locations":[{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},{"start":{"line":4,"column":0},"end":{"line":4,"column":0}}]},"2":{"line":4,"type":"binary-expr","locations":[{"start":{"line":4,"column":4},"end":{"line":4,"column":33}},{"start":{"line":4,"column":37},"end":{"line":4,"column":71}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":154,"18":154,"19":154,"20":154,"21":154,"22":154,"23":154,"24":154,"25":154,"26":154,"27":154,"28":1,"29":1,"30":25,"31":25,"32":1,"33":13,"34":13,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":154,"53":1,"54":0,"55":1,"56":4,"57":1},"b":{"1":[0,0]},"f":{"1":154,"2":25,"3":13,"4":1,"5":154,"6":0,"7":4},"fnMap":{"1":{"name":"Web3","line":46,"loc":{"start":{"line":46,"column":0},"end":{"line":46,"column":25}}},"2":{"name":"(anonymous_2)","line":73,"loc":{"start":{"line":73,"column":29},"end":{"line":73,"column":49}}},"3":{"name":"(anonymous_3)","line":78,"loc":{"start":{"line":78,"column":23},"end":{"line":78,"column":48}}},"4":{"name":"(anonymous_4)","line":100,"loc":{"start":{"line":100,"column":26},"end":{"line":100,"column":42}}},"5":{"name":"(anonymous_5)","line":105,"loc":{"start":{"line":105,"column":17},"end":{"line":105,"column":29}}},"6":{"name":"(anonymous_6)","line":129,"loc":{"start":{"line":129,"column":29},"end":{"line":129,"column":39}}},"7":{"name":"(anonymous_7)","line":133,"loc":{"start":{"line":133,"column":29},"end":{"line":133,"column":41}}}},"statementMap":{"1":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"2":{"start":{"line":29,"column":0},"end":{"line":29,"column":34}},"3":{"start":{"line":30,"column":0},"end":{"line":30,"column":40}},"4":{"start":{"line":31,"column":0},"end":{"line":31,"column":38}},"5":{"start":{"line":32,"column":0},"end":{"line":32,"column":40}},"6":{"start":{"line":33,"column":0},"end":{"line":33,"column":40}},"7":{"start":{"line":34,"column":0},"end":{"line":34,"column":42}},"8":{"start":{"line":35,"column":0},"end":{"line":35,"column":40}},"9":{"start":{"line":36,"column":0},"end":{"line":36,"column":37}},"10":{"start":{"line":37,"column":0},"end":{"line":37,"column":35}},"11":{"start":{"line":38,"column":0},"end":{"line":38,"column":38}},"12":{"start":{"line":39,"column":0},"end":{"line":39,"column":36}},"13":{"start":{"line":40,"column":0},"end":{"line":40,"column":42}},"14":{"start":{"line":41,"column":0},"end":{"line":41,"column":50}},"15":{"start":{"line":42,"column":0},"end":{"line":42,"column":48}},"16":{"start":{"line":46,"column":0},"end":{"line":65,"column":1}},"17":{"start":{"line":47,"column":4},"end":{"line":47,"column":56}},"18":{"start":{"line":48,"column":4},"end":{"line":48,"column":36}},"19":{"start":{"line":49,"column":4},"end":{"line":49,"column":29}},"20":{"start":{"line":50,"column":4},"end":{"line":50,"column":27}},"21":{"start":{"line":51,"column":4},"end":{"line":51,"column":29}},"22":{"start":{"line":52,"column":4},"end":{"line":52,"column":29}},"23":{"start":{"line":53,"column":4},"end":{"line":53,"column":35}},"24":{"start":{"line":54,"column":4},"end":{"line":56,"column":6}},"25":{"start":{"line":57,"column":4},"end":{"line":60,"column":6}},"26":{"start":{"line":61,"column":4},"end":{"line":61,"column":32}},"27":{"start":{"line":62,"column":4},"end":{"line":64,"column":7}},"28":{"start":{"line":68,"column":0},"end":{"line":71,"column":2}},"29":{"start":{"line":73,"column":0},"end":{"line":76,"column":2}},"30":{"start":{"line":74,"column":4},"end":{"line":74,"column":47}},"31":{"start":{"line":75,"column":4},"end":{"line":75,"column":36}},"32":{"start":{"line":78,"column":0},"end":{"line":81,"column":2}},"33":{"start":{"line":79,"column":4},"end":{"line":79,"column":46}},"34":{"start":{"line":80,"column":4},"end":{"line":80,"column":35}},"35":{"start":{"line":83,"column":0},"end":{"line":83,"column":35}},"36":{"start":{"line":84,"column":0},"end":{"line":84,"column":39}},"37":{"start":{"line":85,"column":0},"end":{"line":85,"column":37}},"38":{"start":{"line":86,"column":0},"end":{"line":86,"column":43}},"39":{"start":{"line":87,"column":0},"end":{"line":87,"column":41}},"40":{"start":{"line":88,"column":0},"end":{"line":88,"column":43}},"41":{"start":{"line":89,"column":0},"end":{"line":89,"column":47}},"42":{"start":{"line":90,"column":0},"end":{"line":90,"column":47}},"43":{"start":{"line":91,"column":0},"end":{"line":91,"column":35}},"44":{"start":{"line":92,"column":0},"end":{"line":92,"column":39}},"45":{"start":{"line":93,"column":0},"end":{"line":93,"column":43}},"46":{"start":{"line":94,"column":0},"end":{"line":94,"column":37}},"47":{"start":{"line":95,"column":0},"end":{"line":95,"column":27}},"48":{"start":{"line":100,"column":0},"end":{"line":103,"column":2}},"49":{"start":{"line":101,"column":4},"end":{"line":101,"column":30}},"50":{"start":{"line":102,"column":4},"end":{"line":102,"column":26}},"51":{"start":{"line":105,"column":0},"end":{"line":127,"column":2}},"52":{"start":{"line":106,"column":4},"end":{"line":126,"column":6}},"53":{"start":{"line":129,"column":0},"end":{"line":131,"column":2}},"54":{"start":{"line":130,"column":4},"end":{"line":130,"column":72}},"55":{"start":{"line":133,"column":0},"end":{"line":135,"column":2}},"56":{"start":{"line":134,"column":4},"end":{"line":134,"column":27}},"57":{"start":{"line":137,"column":0},"end":{"line":137,"column":22}}},"branchMap":{"1":{"line":130,"type":"binary-expr","locations":[{"start":{"line":130,"column":12},"end":{"line":130,"column":32}},{"start":{"line":130,"column":36},"end":{"line":130,"column":70}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":156,"7":156,"8":1,"9":76,"10":7,"11":7,"12":69,"13":69,"14":69,"15":0,"16":69,"17":1,"18":75,"19":0,"20":75,"21":75,"22":72,"23":1,"24":71,"25":0,"26":71,"27":1,"28":4,"29":0,"30":4,"31":4,"32":4,"33":0,"34":4,"35":0,"36":4,"37":1,"38":9,"39":9,"40":0,"41":1,"42":12,"43":12,"44":12,"45":10,"46":10,"47":10,"48":0,"49":1,"50":181,"51":181,"52":11,"53":181,"54":181,"55":135,"56":7,"57":7,"58":7,"59":1,"60":24,"61":24,"62":6,"63":24,"64":0,"65":1},"b":{"1":[7,69],"2":[0,69],"3":[0,75],"4":[1,71],"5":[0,71],"6":[0,4],"7":[0,4],"8":[0,4],"9":[9,0],"10":[12,0],"11":[10,0],"12":[0,10],"13":[11,170],"14":[135,46],"15":[181,135],"16":[7,0],"17":[7,0],"18":[7,7],"19":[0,24]},"f":{"1":156,"2":76,"3":75,"4":72,"5":4,"6":4,"7":9,"8":12,"9":10,"10":181,"11":7,"12":24,"13":6},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":21},"end":{"line":38,"column":41}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":32},"end":{"line":50,"column":48}}},"3":{"name":"(anonymous_3)","line":73,"loc":{"start":{"line":73,"column":37},"end":{"line":73,"column":63}}},"4":{"name":"(anonymous_4)","line":78,"loc":{"start":{"line":78,"column":37},"end":{"line":78,"column":60}}},"5":{"name":"(anonymous_5)","line":98,"loc":{"start":{"line":98,"column":37},"end":{"line":98,"column":63}}},"6":{"name":"(anonymous_6)","line":104,"loc":{"start":{"line":104,"column":37},"end":{"line":104,"column":61}}},"7":{"name":"(anonymous_7)","line":125,"loc":{"start":{"line":125,"column":43},"end":{"line":125,"column":73}}},"8":{"name":"(anonymous_8)","line":144,"loc":{"start":{"line":144,"column":46},"end":{"line":144,"column":70}}},"9":{"name":"(anonymous_9)","line":152,"loc":{"start":{"line":152,"column":11},"end":{"line":152,"column":32}}},"10":{"name":"(anonymous_10)","line":171,"loc":{"start":{"line":171,"column":39},"end":{"line":171,"column":52}}},"11":{"name":"(anonymous_11)","line":182,"loc":{"start":{"line":182,"column":41},"end":{"line":182,"column":62}}},"12":{"name":"(anonymous_12)","line":196,"loc":{"start":{"line":196,"column":33},"end":{"line":196,"column":58}}},"13":{"name":"(anonymous_13)","line":201,"loc":{"start":{"line":201,"column":44},"end":{"line":201,"column":56}}}},"statementMap":{"1":{"start":{"line":27,"column":0},"end":{"line":27,"column":35}},"2":{"start":{"line":28,"column":0},"end":{"line":28,"column":38}},"3":{"start":{"line":29,"column":0},"end":{"line":29,"column":35}},"4":{"start":{"line":30,"column":0},"end":{"line":30,"column":33}},"5":{"start":{"line":38,"column":0},"end":{"line":41,"column":2}},"6":{"start":{"line":39,"column":4},"end":{"line":39,"column":31}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":28}},"8":{"start":{"line":50,"column":0},"end":{"line":64,"column":2}},"9":{"start":{"line":51,"column":4},"end":{"line":54,"column":5}},"10":{"start":{"line":52,"column":8},"end":{"line":52,"column":48}},"11":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"12":{"start":{"line":56,"column":4},"end":{"line":56,"column":76}},"13":{"start":{"line":57,"column":4},"end":{"line":57,"column":45}},"14":{"start":{"line":59,"column":4},"end":{"line":61,"column":5}},"15":{"start":{"line":60,"column":8},"end":{"line":60,"column":45}},"16":{"start":{"line":63,"column":4},"end":{"line":63,"column":25}},"17":{"start":{"line":73,"column":0},"end":{"line":89,"column":2}},"18":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"19":{"start":{"line":75,"column":8},"end":{"line":75,"column":50}},"20":{"start":{"line":77,"column":4},"end":{"line":77,"column":76}},"21":{"start":{"line":78,"column":4},"end":{"line":88,"column":7}},"22":{"start":{"line":79,"column":8},"end":{"line":81,"column":9}},"23":{"start":{"line":80,"column":12},"end":{"line":80,"column":33}},"24":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"25":{"start":{"line":84,"column":12},"end":{"line":84,"column":60}},"26":{"start":{"line":87,"column":8},"end":{"line":87,"column":38}},"27":{"start":{"line":98,"column":0},"end":{"line":115,"column":2}},"28":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"29":{"start":{"line":100,"column":8},"end":{"line":100,"column":50}},"30":{"start":{"line":103,"column":4},"end":{"line":103,"column":61}},"31":{"start":{"line":104,"column":4},"end":{"line":114,"column":7}},"32":{"start":{"line":105,"column":8},"end":{"line":107,"column":9}},"33":{"start":{"line":106,"column":12},"end":{"line":106,"column":33}},"34":{"start":{"line":109,"column":8},"end":{"line":111,"column":9}},"35":{"start":{"line":110,"column":12},"end":{"line":110,"column":61}},"36":{"start":{"line":113,"column":8},"end":{"line":113,"column":31}},"37":{"start":{"line":125,"column":0},"end":{"line":135,"column":2}},"38":{"start":{"line":126,"column":4},"end":{"line":134,"column":5}},"39":{"start":{"line":127,"column":8},"end":{"line":130,"column":10}},"40":{"start":{"line":133,"column":8},"end":{"line":133,"column":87}},"41":{"start":{"line":144,"column":0},"end":{"line":163,"column":1}},"42":{"start":{"line":145,"column":4},"end":{"line":145,"column":21}},"43":{"start":{"line":147,"column":4},"end":{"line":162,"column":5}},"44":{"start":{"line":149,"column":8},"end":{"line":160,"column":11}},"45":{"start":{"line":154,"column":12},"end":{"line":156,"column":13}},"46":{"start":{"line":155,"column":16},"end":{"line":155,"column":47}},"47":{"start":{"line":158,"column":12},"end":{"line":159,"column":38}},"48":{"start":{"line":159,"column":16},"end":{"line":159,"column":38}},"49":{"start":{"line":171,"column":0},"end":{"line":189,"column":2}},"50":{"start":{"line":172,"column":4},"end":{"line":172,"column":21}},"51":{"start":{"line":175,"column":4},"end":{"line":176,"column":21}},"52":{"start":{"line":176,"column":8},"end":{"line":176,"column":21}},"53":{"start":{"line":178,"column":4},"end":{"line":178,"column":22}},"54":{"start":{"line":181,"column":4},"end":{"line":188,"column":5}},"55":{"start":{"line":182,"column":8},"end":{"line":187,"column":11}},"56":{"start":{"line":183,"column":12},"end":{"line":186,"column":13}},"57":{"start":{"line":184,"column":16},"end":{"line":185,"column":105}},"58":{"start":{"line":185,"column":20},"end":{"line":185,"column":105}},"59":{"start":{"line":196,"column":0},"end":{"line":209,"column":2}},"60":{"start":{"line":197,"column":4},"end":{"line":197,"column":21}},"61":{"start":{"line":201,"column":4},"end":{"line":203,"column":7}},"62":{"start":{"line":202,"column":8},"end":{"line":202,"column":37}},"63":{"start":{"line":207,"column":4},"end":{"line":208,"column":30}},"64":{"start":{"line":208,"column":8},"end":{"line":208,"column":30}},"65":{"start":{"line":211,"column":0},"end":{"line":211,"column":32}}},"branchMap":{"1":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"2":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":4},"end":{"line":59,"column":4}},{"start":{"line":59,"column":4},"end":{"line":59,"column":4}}]},"3":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":74,"column":4}},{"start":{"line":74,"column":4},"end":{"line":74,"column":4}}]},"4":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":8},"end":{"line":79,"column":8}},{"start":{"line":79,"column":8},"end":{"line":79,"column":8}}]},"5":{"line":83,"type":"if","locations":[{"start":{"line":83,"column":8},"end":{"line":83,"column":8}},{"start":{"line":83,"column":8},"end":{"line":83,"column":8}}]},"6":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"7":{"line":105,"type":"if","locations":[{"start":{"line":105,"column":8},"end":{"line":105,"column":8}},{"start":{"line":105,"column":8},"end":{"line":105,"column":8}}]},"8":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"9":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":126,"column":4}},{"start":{"line":126,"column":4},"end":{"line":126,"column":4}}]},"10":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"11":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":12},"end":{"line":154,"column":12}},{"start":{"line":154,"column":12},"end":{"line":154,"column":12}}]},"12":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":12},"end":{"line":158,"column":12}},{"start":{"line":158,"column":12},"end":{"line":158,"column":12}}]},"13":{"line":175,"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":175,"column":4}},{"start":{"line":175,"column":4},"end":{"line":175,"column":4}}]},"14":{"line":181,"type":"if","locations":[{"start":{"line":181,"column":4},"end":{"line":181,"column":4}},{"start":{"line":181,"column":4},"end":{"line":181,"column":4}}]},"15":{"line":181,"type":"binary-expr","locations":[{"start":{"line":181,"column":7},"end":{"line":181,"column":20}},{"start":{"line":181,"column":24},"end":{"line":181,"column":40}}]},"16":{"line":183,"type":"if","locations":[{"start":{"line":183,"column":12},"end":{"line":183,"column":12}},{"start":{"line":183,"column":12},"end":{"line":183,"column":12}}]},"17":{"line":184,"type":"if","locations":[{"start":{"line":184,"column":16},"end":{"line":184,"column":16}},{"start":{"line":184,"column":16},"end":{"line":184,"column":16}}]},"18":{"line":184,"type":"binary-expr","locations":[{"start":{"line":184,"column":19},"end":{"line":184,"column":66}},{"start":{"line":184,"column":70},"end":{"line":184,"column":126}}]},"19":{"line":207,"type":"if","locations":[{"start":{"line":207,"column":4},"end":{"line":207,"column":4}},{"start":{"line":207,"column":4},"end":{"line":207,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js","s":{"1":1,"2":301,"3":300,"4":1,"5":1,"6":1,"7":298,"8":298,"9":1,"10":158,"11":0,"12":158,"13":1,"14":157,"15":1,"16":6,"17":6,"18":10,"19":1},"b":{"1":[300,1],"2":[0,158],"3":[158,15],"4":[157,156,154,152,150]},"f":{"1":301,"2":298,"3":158,"4":157,"5":6,"6":10},"fnMap":{"1":{"name":"(anonymous_1)","line":23,"loc":{"start":{"line":23,"column":14},"end":{"line":23,"column":26}}},"2":{"name":"(anonymous_2)","line":36,"loc":{"start":{"line":36,"column":22},"end":{"line":36,"column":34}}},"3":{"name":"(anonymous_3)","line":49,"loc":{"start":{"line":49,"column":30},"end":{"line":49,"column":56}}},"4":{"name":"(anonymous_4)","line":68,"loc":{"start":{"line":68,"column":36},"end":{"line":68,"column":56}}},"5":{"name":"(anonymous_5)","line":83,"loc":{"start":{"line":83,"column":35},"end":{"line":83,"column":55}}},"6":{"name":"(anonymous_6)","line":85,"loc":{"start":{"line":85,"column":24},"end":{"line":85,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":31,"column":2}},"2":{"start":{"line":25,"column":4},"end":{"line":27,"column":5}},"3":{"start":{"line":26,"column":8},"end":{"line":26,"column":51}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":47}},"5":{"start":{"line":30,"column":4},"end":{"line":30,"column":23}},"6":{"start":{"line":36,"column":0},"end":{"line":39,"column":2}},"7":{"start":{"line":37,"column":4},"end":{"line":37,"column":33}},"8":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"9":{"start":{"line":49,"column":0},"end":{"line":59,"column":2}},"10":{"start":{"line":50,"column":4},"end":{"line":51,"column":61}},"11":{"start":{"line":51,"column":8},"end":{"line":51,"column":61}},"12":{"start":{"line":53,"column":4},"end":{"line":58,"column":6}},"13":{"start":{"line":68,"column":0},"end":{"line":74,"column":2}},"14":{"start":{"line":69,"column":4},"end":{"line":73,"column":38}},"15":{"start":{"line":83,"column":0},"end":{"line":88,"column":2}},"16":{"start":{"line":84,"column":4},"end":{"line":84,"column":20}},"17":{"start":{"line":85,"column":4},"end":{"line":87,"column":7}},"18":{"start":{"line":86,"column":8},"end":{"line":86,"column":62}},"19":{"start":{"line":90,"column":0},"end":{"line":90,"column":25}}},"branchMap":{"1":{"line":25,"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":25,"column":4}},{"start":{"line":25,"column":4},"end":{"line":25,"column":4}}]},"2":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"3":{"line":56,"type":"binary-expr","locations":[{"start":{"line":56,"column":16},"end":{"line":56,"column":22}},{"start":{"line":56,"column":26},"end":{"line":56,"column":28}}]},"4":{"line":69,"type":"binary-expr","locations":[{"start":{"line":69,"column":11},"end":{"line":69,"column":21}},{"start":{"line":70,"column":8},"end":{"line":70,"column":23}},{"start":{"line":71,"column":8},"end":{"line":71,"column":34}},{"start":{"line":72,"column":8},"end":{"line":72,"column":39}},{"start":{"line":73,"column":8},"end":{"line":73,"column":37}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js","s":{"1":2,"2":2,"3":2,"4":2,"5":205,"6":2,"7":38,"8":2,"9":10,"10":10,"11":10,"12":3,"13":10,"14":133,"15":133,"16":2,"17":131,"18":10,"19":2,"20":5,"21":5,"22":5,"23":5,"24":5,"25":110,"26":110,"27":5,"28":2,"29":25,"30":25,"31":25,"32":291,"33":291,"34":2,"35":289,"36":289,"37":25,"38":2,"39":10,"40":10,"41":236,"42":236,"43":236,"44":10,"45":2,"46":105,"47":48,"48":57,"49":136,"50":57,"51":2,"52":101,"53":101,"54":2,"55":94,"56":94,"57":2,"58":193,"59":2,"60":160,"61":160,"62":160,"63":2,"64":126,"65":2,"66":124,"67":1,"68":123,"69":2,"70":121,"71":62,"72":5,"73":57,"74":42,"75":15,"76":5,"77":69,"78":2,"79":39,"80":39,"81":39,"82":1,"83":38,"84":2,"85":12,"86":12,"87":2,"88":27,"89":26,"90":2,"91":705,"92":705,"93":47,"94":658,"95":208,"96":450,"97":2,"98":205,"99":205,"100":5,"101":200,"102":2,"103":78,"104":2,"105":24,"106":2,"107":0,"108":0,"109":0,"110":0,"111":0,"112":2,"113":875,"114":2,"115":832,"116":2,"117":358,"118":2,"119":286,"120":2,"121":126,"122":2,"123":453,"124":2,"125":9,"126":9,"127":5,"128":2},"b":{"1":[0,205],"2":[0,38],"3":[3,7],"4":[2,131],"5":[5,0],"6":[2,289],"7":[0,289],"8":[31,205],"9":[48,57],"10":[101,0],"11":[94,0],"12":[17,143],"13":[2,124],"14":[1,123],"15":[2,121],"16":[62,59],"17":[5,57],"18":[42,15],"19":[5,10],"20":[39,0],"21":[1,38],"22":[0,12],"23":[0,26],"24":[705,40],"25":[47,658],"26":[208,450],"27":[658,234,45],"28":[5,200],"29":[0,0],"30":[0,0],"31":[875,826,780,780],"32":[832,505,459,459]},"f":{"1":205,"2":38,"3":10,"4":5,"5":25,"6":10,"7":105,"8":136,"9":101,"10":94,"11":193,"12":160,"13":126,"14":39,"15":12,"16":27,"17":705,"18":205,"19":78,"20":24,"21":0,"22":875,"23":832,"24":358,"25":286,"26":126,"27":453,"28":9},"fnMap":{"1":{"name":"(anonymous_1)","line":76,"loc":{"start":{"line":76,"column":14},"end":{"line":76,"column":45}}},"2":{"name":"(anonymous_2)","line":89,"loc":{"start":{"line":89,"column":15},"end":{"line":89,"column":46}}},"3":{"name":"(anonymous_3)","line":100,"loc":{"start":{"line":100,"column":13},"end":{"line":100,"column":27}}},"4":{"name":"(anonymous_4)","line":124,"loc":{"start":{"line":124,"column":14},"end":{"line":124,"column":28}}},"5":{"name":"(anonymous_5)","line":147,"loc":{"start":{"line":147,"column":15},"end":{"line":147,"column":29}}},"6":{"name":"(anonymous_6)","line":169,"loc":{"start":{"line":169,"column":16},"end":{"line":169,"column":30}}},"7":{"name":"(anonymous_7)","line":187,"loc":{"start":{"line":187,"column":26},"end":{"line":187,"column":42}}},"8":{"name":"(anonymous_8)","line":192,"loc":{"start":{"line":192,"column":35},"end":{"line":192,"column":46}}},"9":{"name":"(anonymous_9)","line":203,"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":41}}},"10":{"name":"(anonymous_10)","line":209,"loc":{"start":{"line":209,"column":22},"end":{"line":209,"column":38}}},"11":{"name":"(anonymous_11)","line":222,"loc":{"start":{"line":222,"column":16},"end":{"line":222,"column":33}}},"12":{"name":"(anonymous_12)","line":233,"loc":{"start":{"line":233,"column":18},"end":{"line":233,"column":35}}},"13":{"name":"(anonymous_13)","line":249,"loc":{"start":{"line":249,"column":12},"end":{"line":249,"column":27}}},"14":{"name":"(anonymous_14)","line":282,"loc":{"start":{"line":282,"column":21},"end":{"line":282,"column":37}}},"15":{"name":"(anonymous_15)","line":312,"loc":{"start":{"line":312,"column":14},"end":{"line":312,"column":37}}},"16":{"name":"(anonymous_16)","line":339,"loc":{"start":{"line":339,"column":12},"end":{"line":339,"column":35}}},"17":{"name":"(anonymous_17)","line":352,"loc":{"start":{"line":352,"column":18},"end":{"line":352,"column":35}}},"18":{"name":"(anonymous_18)","line":372,"loc":{"start":{"line":372,"column":23},"end":{"line":372,"column":41}}},"19":{"name":"(anonymous_19)","line":387,"loc":{"start":{"line":387,"column":22},"end":{"line":387,"column":41}}},"20":{"name":"(anonymous_20)","line":398,"loc":{"start":{"line":398,"column":16},"end":{"line":398,"column":35}}},"21":{"name":"(anonymous_21)","line":409,"loc":{"start":{"line":409,"column":16},"end":{"line":409,"column":35}}},"22":{"name":"(anonymous_22)","line":428,"loc":{"start":{"line":428,"column":18},"end":{"line":428,"column":36}}},"23":{"name":"(anonymous_23)","line":440,"loc":{"start":{"line":440,"column":15},"end":{"line":440,"column":33}}},"24":{"name":"(anonymous_24)","line":452,"loc":{"start":{"line":452,"column":17},"end":{"line":452,"column":35}}},"25":{"name":"(anonymous_25)","line":463,"loc":{"start":{"line":463,"column":15},"end":{"line":463,"column":33}}},"26":{"name":"(anonymous_26)","line":474,"loc":{"start":{"line":474,"column":16},"end":{"line":474,"column":34}}},"27":{"name":"(anonymous_27)","line":485,"loc":{"start":{"line":485,"column":14},"end":{"line":485,"column":32}}},"28":{"name":"(anonymous_28)","line":496,"loc":{"start":{"line":496,"column":13},"end":{"line":496,"column":28}}}},"statementMap":{"1":{"start":{"line":37,"column":0},"end":{"line":37,"column":40}},"2":{"start":{"line":38,"column":0},"end":{"line":38,"column":27}},"3":{"start":{"line":40,"column":0},"end":{"line":65,"column":2}},"4":{"start":{"line":76,"column":0},"end":{"line":78,"column":2}},"5":{"start":{"line":77,"column":4},"end":{"line":77,"column":81}},"6":{"start":{"line":89,"column":0},"end":{"line":91,"column":2}},"7":{"start":{"line":90,"column":4},"end":{"line":90,"column":83}},"8":{"start":{"line":100,"column":0},"end":{"line":115,"column":2}},"9":{"start":{"line":102,"column":4},"end":{"line":102,"column":17}},"10":{"start":{"line":103,"column":4},"end":{"line":103,"column":30}},"11":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"12":{"start":{"line":105,"column":8},"end":{"line":105,"column":14}},"13":{"start":{"line":107,"column":4},"end":{"line":112,"column":5}},"14":{"start":{"line":108,"column":8},"end":{"line":108,"column":50}},"15":{"start":{"line":109,"column":8},"end":{"line":110,"column":18}},"16":{"start":{"line":110,"column":12},"end":{"line":110,"column":18}},"17":{"start":{"line":111,"column":8},"end":{"line":111,"column":41}},"18":{"start":{"line":114,"column":4},"end":{"line":114,"column":28}},"19":{"start":{"line":124,"column":0},"end":{"line":137,"column":2}},"20":{"start":{"line":126,"column":4},"end":{"line":126,"column":17}},"21":{"start":{"line":127,"column":4},"end":{"line":127,"column":30}},"22":{"start":{"line":128,"column":4},"end":{"line":130,"column":5}},"23":{"start":{"line":129,"column":8},"end":{"line":129,"column":14}},"24":{"start":{"line":131,"column":4},"end":{"line":134,"column":5}},"25":{"start":{"line":132,"column":8},"end":{"line":132,"column":50}},"26":{"start":{"line":133,"column":8},"end":{"line":133,"column":41}},"27":{"start":{"line":136,"column":4},"end":{"line":136,"column":15}},"28":{"start":{"line":147,"column":0},"end":{"line":159,"column":2}},"29":{"start":{"line":148,"column":4},"end":{"line":148,"column":27}},"30":{"start":{"line":149,"column":4},"end":{"line":149,"column":17}},"31":{"start":{"line":150,"column":4},"end":{"line":156,"column":5}},"32":{"start":{"line":151,"column":8},"end":{"line":151,"column":37}},"33":{"start":{"line":152,"column":8},"end":{"line":153,"column":18}},"34":{"start":{"line":153,"column":12},"end":{"line":153,"column":18}},"35":{"start":{"line":154,"column":8},"end":{"line":154,"column":34}},"36":{"start":{"line":155,"column":8},"end":{"line":155,"column":42}},"37":{"start":{"line":158,"column":4},"end":{"line":158,"column":22}},"38":{"start":{"line":169,"column":0},"end":{"line":178,"column":2}},"39":{"start":{"line":170,"column":4},"end":{"line":170,"column":17}},"40":{"start":{"line":171,"column":4},"end":{"line":175,"column":5}},"41":{"start":{"line":172,"column":8},"end":{"line":172,"column":37}},"42":{"start":{"line":173,"column":8},"end":{"line":173,"column":34}},"43":{"start":{"line":174,"column":8},"end":{"line":174,"column":42}},"44":{"start":{"line":177,"column":4},"end":{"line":177,"column":22}},"45":{"start":{"line":187,"column":0},"end":{"line":194,"column":2}},"46":{"start":{"line":188,"column":4},"end":{"line":190,"column":5}},"47":{"start":{"line":189,"column":8},"end":{"line":189,"column":25}},"48":{"start":{"line":192,"column":4},"end":{"line":192,"column":72}},"49":{"start":{"line":192,"column":47},"end":{"line":192,"column":61}},"50":{"start":{"line":193,"column":4},"end":{"line":193,"column":44}},"51":{"start":{"line":203,"column":0},"end":{"line":206,"column":2}},"52":{"start":{"line":204,"column":4},"end":{"line":204,"column":35}},"53":{"start":{"line":205,"column":4},"end":{"line":205,"column":57}},"54":{"start":{"line":209,"column":0},"end":{"line":213,"column":2}},"55":{"start":{"line":211,"column":4},"end":{"line":211,"column":35}},"56":{"start":{"line":212,"column":4},"end":{"line":212,"column":105}},"57":{"start":{"line":222,"column":0},"end":{"line":224,"column":2}},"58":{"start":{"line":223,"column":4},"end":{"line":223,"column":41}},"59":{"start":{"line":233,"column":0},"end":{"line":238,"column":2}},"60":{"start":{"line":234,"column":4},"end":{"line":234,"column":36}},"61":{"start":{"line":235,"column":4},"end":{"line":235,"column":37}},"62":{"start":{"line":237,"column":4},"end":{"line":237,"column":73}},"63":{"start":{"line":249,"column":0},"end":{"line":272,"column":2}},"64":{"start":{"line":252,"column":4},"end":{"line":253,"column":33}},"65":{"start":{"line":253,"column":8},"end":{"line":253,"column":33}},"66":{"start":{"line":255,"column":4},"end":{"line":256,"column":32}},"67":{"start":{"line":256,"column":8},"end":{"line":256,"column":32}},"68":{"start":{"line":258,"column":4},"end":{"line":259,"column":45}},"69":{"start":{"line":259,"column":8},"end":{"line":259,"column":45}},"70":{"start":{"line":262,"column":4},"end":{"line":269,"column":5}},"71":{"start":{"line":263,"column":8},"end":{"line":268,"column":34}},"72":{"start":{"line":264,"column":12},"end":{"line":264,"column":36}},"73":{"start":{"line":265,"column":13},"end":{"line":268,"column":34}},"74":{"start":{"line":266,"column":12},"end":{"line":266,"column":23}},"75":{"start":{"line":267,"column":13},"end":{"line":268,"column":34}},"76":{"start":{"line":268,"column":12},"end":{"line":268,"column":34}},"77":{"start":{"line":271,"column":4},"end":{"line":271,"column":28}},"78":{"start":{"line":282,"column":0},"end":{"line":289,"column":2}},"79":{"start":{"line":283,"column":4},"end":{"line":283,"column":47}},"80":{"start":{"line":284,"column":4},"end":{"line":284,"column":34}},"81":{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},"82":{"start":{"line":286,"column":8},"end":{"line":286,"column":131}},"83":{"start":{"line":288,"column":4},"end":{"line":288,"column":40}},"84":{"start":{"line":312,"column":0},"end":{"line":316,"column":2}},"85":{"start":{"line":313,"column":4},"end":{"line":313,"column":74}},"86":{"start":{"line":315,"column":4},"end":{"line":315,"column":72}},"87":{"start":{"line":339,"column":0},"end":{"line":343,"column":2}},"88":{"start":{"line":340,"column":4},"end":{"line":340,"column":70}},"89":{"start":{"line":342,"column":4},"end":{"line":342,"column":72}},"90":{"start":{"line":352,"column":0},"end":{"line":363,"column":2}},"91":{"start":{"line":354,"column":4},"end":{"line":354,"column":25}},"92":{"start":{"line":355,"column":4},"end":{"line":356,"column":22}},"93":{"start":{"line":356,"column":8},"end":{"line":356,"column":22}},"94":{"start":{"line":358,"column":4},"end":{"line":360,"column":5}},"95":{"start":{"line":359,"column":8},"end":{"line":359,"column":58}},"96":{"start":{"line":362,"column":4},"end":{"line":362,"column":50}},"97":{"start":{"line":372,"column":0},"end":{"line":378,"column":2}},"98":{"start":{"line":373,"column":4},"end":{"line":373,"column":40}},"99":{"start":{"line":374,"column":4},"end":{"line":376,"column":5}},"100":{"start":{"line":375,"column":8},"end":{"line":375,"column":125}},"101":{"start":{"line":377,"column":4},"end":{"line":377,"column":21}},"102":{"start":{"line":387,"column":0},"end":{"line":389,"column":2}},"103":{"start":{"line":388,"column":4},"end":{"line":388,"column":45}},"104":{"start":{"line":398,"column":0},"end":{"line":400,"column":2}},"105":{"start":{"line":399,"column":4},"end":{"line":399,"column":48}},"106":{"start":{"line":409,"column":0},"end":{"line":419,"column":2}},"107":{"start":{"line":410,"column":4},"end":{"line":412,"column":5}},"108":{"start":{"line":411,"column":8},"end":{"line":411,"column":23}},"109":{"start":{"line":414,"column":4},"end":{"line":416,"column":5}},"110":{"start":{"line":415,"column":8},"end":{"line":415,"column":30}},"111":{"start":{"line":418,"column":4},"end":{"line":418,"column":56}},"112":{"start":{"line":428,"column":0},"end":{"line":431,"column":2}},"113":{"start":{"line":429,"column":4},"end":{"line":430,"column":82}},"114":{"start":{"line":440,"column":0},"end":{"line":443,"column":2}},"115":{"start":{"line":441,"column":4},"end":{"line":442,"column":79}},"116":{"start":{"line":452,"column":0},"end":{"line":454,"column":2}},"117":{"start":{"line":453,"column":4},"end":{"line":453,"column":40}},"118":{"start":{"line":463,"column":0},"end":{"line":465,"column":2}},"119":{"start":{"line":464,"column":4},"end":{"line":464,"column":38}},"120":{"start":{"line":474,"column":0},"end":{"line":476,"column":2}},"121":{"start":{"line":475,"column":4},"end":{"line":475,"column":39}},"122":{"start":{"line":485,"column":0},"end":{"line":487,"column":2}},"123":{"start":{"line":486,"column":4},"end":{"line":486,"column":35}},"124":{"start":{"line":496,"column":0},"end":{"line":502,"column":2}},"125":{"start":{"line":497,"column":4},"end":{"line":501,"column":5}},"126":{"start":{"line":498,"column":8},"end":{"line":498,"column":33}},"127":{"start":{"line":500,"column":8},"end":{"line":500,"column":21}},"128":{"start":{"line":504,"column":0},"end":{"line":531,"column":2}}},"branchMap":{"1":{"line":77,"type":"cond-expr","locations":[{"start":{"line":77,"column":60},"end":{"line":77,"column":64}},{"start":{"line":77,"column":67},"end":{"line":77,"column":70}}]},"2":{"line":90,"type":"cond-expr","locations":[{"start":{"line":90,"column":70},"end":{"line":90,"column":74}},{"start":{"line":90,"column":77},"end":{"line":90,"column":80}}]},"3":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":104,"column":4}},{"start":{"line":104,"column":4},"end":{"line":104,"column":4}}]},"4":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"5":{"line":128,"type":"if","locations":[{"start":{"line":128,"column":4},"end":{"line":128,"column":4}},{"start":{"line":128,"column":4},"end":{"line":128,"column":4}}]},"6":{"line":152,"type":"if","locations":[{"start":{"line":152,"column":8},"end":{"line":152,"column":8}},{"start":{"line":152,"column":8},"end":{"line":152,"column":8}}]},"7":{"line":155,"type":"cond-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":37}},{"start":{"line":155,"column":40},"end":{"line":155,"column":41}}]},"8":{"line":174,"type":"cond-expr","locations":[{"start":{"line":174,"column":30},"end":{"line":174,"column":37}},{"start":{"line":174,"column":40},"end":{"line":174,"column":41}}]},"9":{"line":188,"type":"if","locations":[{"start":{"line":188,"column":4},"end":{"line":188,"column":4}},{"start":{"line":188,"column":4},"end":{"line":188,"column":4}}]},"10":{"line":205,"type":"cond-expr","locations":[{"start":{"line":205,"column":27},"end":{"line":205,"column":49}},{"start":{"line":205,"column":52},"end":{"line":205,"column":56}}]},"11":{"line":212,"type":"cond-expr","locations":[{"start":{"line":212,"column":27},"end":{"line":212,"column":99}},{"start":{"line":212,"column":102},"end":{"line":212,"column":104}}]},"12":{"line":237,"type":"cond-expr","locations":[{"start":{"line":237,"column":32},"end":{"line":237,"column":56}},{"start":{"line":237,"column":59},"end":{"line":237,"column":72}}]},"13":{"line":252,"type":"if","locations":[{"start":{"line":252,"column":4},"end":{"line":252,"column":4}},{"start":{"line":252,"column":4},"end":{"line":252,"column":4}}]},"14":{"line":255,"type":"if","locations":[{"start":{"line":255,"column":4},"end":{"line":255,"column":4}},{"start":{"line":255,"column":4},"end":{"line":255,"column":4}}]},"15":{"line":258,"type":"if","locations":[{"start":{"line":258,"column":4},"end":{"line":258,"column":4}},{"start":{"line":258,"column":4},"end":{"line":258,"column":4}}]},"16":{"line":262,"type":"if","locations":[{"start":{"line":262,"column":4},"end":{"line":262,"column":4}},{"start":{"line":262,"column":4},"end":{"line":262,"column":4}}]},"17":{"line":263,"type":"if","locations":[{"start":{"line":263,"column":8},"end":{"line":263,"column":8}},{"start":{"line":263,"column":8},"end":{"line":263,"column":8}}]},"18":{"line":265,"type":"if","locations":[{"start":{"line":265,"column":13},"end":{"line":265,"column":13}},{"start":{"line":265,"column":13},"end":{"line":265,"column":13}}]},"19":{"line":267,"type":"if","locations":[{"start":{"line":267,"column":13},"end":{"line":267,"column":13}},{"start":{"line":267,"column":13},"end":{"line":267,"column":13}}]},"20":{"line":283,"type":"cond-expr","locations":[{"start":{"line":283,"column":18},"end":{"line":283,"column":36}},{"start":{"line":283,"column":39},"end":{"line":283,"column":46}}]},"21":{"line":285,"type":"if","locations":[{"start":{"line":285,"column":4},"end":{"line":285,"column":4}},{"start":{"line":285,"column":4},"end":{"line":285,"column":4}}]},"22":{"line":315,"type":"cond-expr","locations":[{"start":{"line":315,"column":33},"end":{"line":315,"column":44}},{"start":{"line":315,"column":47},"end":{"line":315,"column":71}}]},"23":{"line":342,"type":"cond-expr","locations":[{"start":{"line":342,"column":33},"end":{"line":342,"column":44}},{"start":{"line":342,"column":47},"end":{"line":342,"column":71}}]},"24":{"line":354,"type":"binary-expr","locations":[{"start":{"line":354,"column":13},"end":{"line":354,"column":19}},{"start":{"line":354,"column":23},"end":{"line":354,"column":24}}]},"25":{"line":355,"type":"if","locations":[{"start":{"line":355,"column":4},"end":{"line":355,"column":4}},{"start":{"line":355,"column":4},"end":{"line":355,"column":4}}]},"26":{"line":358,"type":"if","locations":[{"start":{"line":358,"column":4},"end":{"line":358,"column":4}},{"start":{"line":358,"column":4},"end":{"line":358,"column":4}}]},"27":{"line":358,"type":"binary-expr","locations":[{"start":{"line":358,"column":8},"end":{"line":358,"column":24}},{"start":{"line":358,"column":29},"end":{"line":358,"column":55}},{"start":{"line":358,"column":59},"end":{"line":358,"column":86}}]},"28":{"line":374,"type":"if","locations":[{"start":{"line":374,"column":4},"end":{"line":374,"column":4}},{"start":{"line":374,"column":4},"end":{"line":374,"column":4}}]},"29":{"line":410,"type":"if","locations":[{"start":{"line":410,"column":4},"end":{"line":410,"column":4}},{"start":{"line":410,"column":4},"end":{"line":410,"column":4}}]},"30":{"line":414,"type":"if","locations":[{"start":{"line":414,"column":4},"end":{"line":414,"column":4}},{"start":{"line":414,"column":4},"end":{"line":414,"column":4}}]},"31":{"line":429,"type":"binary-expr","locations":[{"start":{"line":429,"column":11},"end":{"line":429,"column":38}},{"start":{"line":430,"column":9},"end":{"line":430,"column":15}},{"start":{"line":430,"column":19},"end":{"line":430,"column":37}},{"start":{"line":430,"column":41},"end":{"line":430,"column":80}}]},"32":{"line":441,"type":"binary-expr","locations":[{"start":{"line":441,"column":11},"end":{"line":441,"column":37}},{"start":{"line":442,"column":9},"end":{"line":442,"column":15}},{"start":{"line":442,"column":19},"end":{"line":442,"column":37}},{"start":{"line":442,"column":41},"end":{"line":442,"column":77}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":38,"column":0},"end":{"line":38,"column":40}},"2":{"start":{"line":40,"column":0},"end":{"line":68,"column":2}},"3":{"start":{"line":70,"column":0},"end":{"line":78,"column":2}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js","s":{"1":3,"2":4,"3":0,"4":7,"5":6,"6":6},"b":{"1":[2,4],"2":[6,2,2]},"f":{"1":4,"2":0,"3":7,"4":6},"fnMap":{"1":{"name":"(anonymous_1)","line":24,"loc":{"start":{"line":24,"column":27},"end":{"line":24,"column":39}}},"2":{"name":"(anonymous_2)","line":27,"loc":{"start":{"line":27,"column":23},"end":{"line":27,"column":38}}},"3":{"name":"(anonymous_3)","line":30,"loc":{"start":{"line":30,"column":21},"end":{"line":30,"column":33}}},"4":{"name":"(anonymous_4)","line":33,"loc":{"start":{"line":33,"column":21},"end":{"line":33,"column":38}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":37,"column":2}},"2":{"start":{"line":25,"column":8},"end":{"line":25,"column":63}},"3":{"start":{"line":28,"column":8},"end":{"line":28,"column":84}},"4":{"start":{"line":31,"column":8},"end":{"line":31,"column":56}},"5":{"start":{"line":34,"column":8},"end":{"line":34,"column":155}},"6":{"start":{"line":35,"column":8},"end":{"line":35,"column":34}}},"branchMap":{"1":{"line":34,"type":"cond-expr","locations":[{"start":{"line":34,"column":77},"end":{"line":34,"column":97}},{"start":{"line":34,"column":100},"end":{"line":34,"column":154}}]},"2":{"line":34,"type":"binary-expr","locations":[{"start":{"line":34,"column":22},"end":{"line":34,"column":30}},{"start":{"line":34,"column":34},"end":{"line":34,"column":48}},{"start":{"line":34,"column":52},"end":{"line":34,"column":74}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js","s":{"1":1,"2":1,"3":15,"4":15,"5":11,"6":15,"7":1,"8":21,"9":21,"10":21,"11":21,"12":21,"13":661,"14":661,"15":450,"16":211,"17":1,"18":21,"19":21,"20":158,"21":158,"22":21,"23":1,"24":113,"25":1,"26":5,"27":5,"28":5,"29":5,"30":1,"31":6,"32":6,"33":6,"34":6,"35":1,"36":1,"37":1,"38":18,"39":18,"40":1,"41":99,"42":1,"43":19,"44":1,"45":2,"46":1,"47":0,"48":1,"49":1,"50":1,"51":1,"52":1,"53":10,"54":10,"55":10,"56":10,"57":0,"58":1,"59":0,"60":1},"b":{"1":[450,211],"2":[661,450],"3":[99,15],"4":[19,1],"5":[1,0],"6":[1,0],"7":[10,0]},"f":{"1":15,"2":21,"3":661,"4":21,"5":113,"6":5,"7":6,"8":1,"9":18,"10":99,"11":19,"12":2,"13":0,"14":1,"15":1,"16":10,"17":0},"fnMap":{"1":{"name":"(anonymous_1)","line":25,"loc":{"start":{"line":25,"column":14},"end":{"line":25,"column":39}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":22},"end":{"line":41,"column":38}}},"3":{"name":"(anonymous_3)","line":48,"loc":{"start":{"line":48,"column":30},"end":{"line":48,"column":41}}},"4":{"name":"(anonymous_4)","line":66,"loc":{"start":{"line":66,"column":14},"end":{"line":66,"column":30}}},"5":{"name":"(anonymous_5)","line":83,"loc":{"start":{"line":83,"column":11},"end":{"line":83,"column":27}}},"6":{"name":"(anonymous_6)","line":94,"loc":{"start":{"line":94,"column":19},"end":{"line":94,"column":38}}},"7":{"name":"(anonymous_7)","line":110,"loc":{"start":{"line":110,"column":16},"end":{"line":110,"column":32}}},"8":{"name":"(anonymous_8)","line":126,"loc":{"start":{"line":126,"column":22},"end":{"line":126,"column":41}}},"9":{"name":"(anonymous_9)","line":137,"loc":{"start":{"line":137,"column":15},"end":{"line":137,"column":31}}},"10":{"name":"(anonymous_10)","line":148,"loc":{"start":{"line":148,"column":25},"end":{"line":148,"column":37}}},"11":{"name":"(anonymous_11)","line":159,"loc":{"start":{"line":159,"column":26},"end":{"line":159,"column":38}}},"12":{"name":"(anonymous_12)","line":169,"loc":{"start":{"line":169,"column":28},"end":{"line":169,"column":40}}},"13":{"name":"(anonymous_13)","line":180,"loc":{"start":{"line":180,"column":26},"end":{"line":180,"column":38}}},"14":{"name":"(anonymous_14)","line":191,"loc":{"start":{"line":191,"column":29},"end":{"line":191,"column":41}}},"15":{"name":"(anonymous_15)","line":202,"loc":{"start":{"line":202,"column":24},"end":{"line":202,"column":36}}},"16":{"name":"(anonymous_16)","line":212,"loc":{"start":{"line":212,"column":25},"end":{"line":212,"column":37}}},"17":{"name":"(anonymous_17)","line":222,"loc":{"start":{"line":222,"column":26},"end":{"line":222,"column":38}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":40}},"2":{"start":{"line":25,"column":0},"end":{"line":31,"column":2}},"3":{"start":{"line":26,"column":4},"end":{"line":26,"column":24}},"4":{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},"5":{"start":{"line":28,"column":8},"end":{"line":28,"column":31}},"6":{"start":{"line":30,"column":4},"end":{"line":30,"column":18}},"7":{"start":{"line":41,"column":0},"end":{"line":57,"column":2}},"8":{"start":{"line":42,"column":4},"end":{"line":42,"column":30}},"9":{"start":{"line":43,"column":4},"end":{"line":43,"column":30}},"10":{"start":{"line":45,"column":4},"end":{"line":45,"column":30}},"11":{"start":{"line":46,"column":4},"end":{"line":46,"column":45}},"12":{"start":{"line":48,"column":4},"end":{"line":56,"column":16}},"13":{"start":{"line":49,"column":8},"end":{"line":49,"column":35}},"14":{"start":{"line":50,"column":8},"end":{"line":55,"column":9}},"15":{"start":{"line":52,"column":12},"end":{"line":52,"column":33}},"16":{"start":{"line":54,"column":12},"end":{"line":54,"column":21}},"17":{"start":{"line":66,"column":0},"end":{"line":76,"column":2}},"18":{"start":{"line":67,"column":4},"end":{"line":68,"column":14}},"19":{"start":{"line":70,"column":4},"end":{"line":73,"column":5}},"20":{"start":{"line":71,"column":8},"end":{"line":71,"column":38}},"21":{"start":{"line":72,"column":8},"end":{"line":72,"column":77}},"22":{"start":{"line":75,"column":4},"end":{"line":75,"column":40}},"23":{"start":{"line":83,"column":0},"end":{"line":85,"column":2}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":22}},"25":{"start":{"line":94,"column":0},"end":{"line":99,"column":2}},"26":{"start":{"line":95,"column":4},"end":{"line":95,"column":42}},"27":{"start":{"line":96,"column":4},"end":{"line":96,"column":35}},"28":{"start":{"line":97,"column":4},"end":{"line":97,"column":37}},"29":{"start":{"line":98,"column":4},"end":{"line":98,"column":47}},"30":{"start":{"line":110,"column":0},"end":{"line":117,"column":2}},"31":{"start":{"line":111,"column":4},"end":{"line":111,"column":27}},"32":{"start":{"line":113,"column":4},"end":{"line":113,"column":72}},"33":{"start":{"line":114,"column":4},"end":{"line":114,"column":56}},"34":{"start":{"line":116,"column":4},"end":{"line":116,"column":53}},"35":{"start":{"line":126,"column":0},"end":{"line":128,"column":2}},"36":{"start":{"line":127,"column":4},"end":{"line":127,"column":75}},"37":{"start":{"line":137,"column":0},"end":{"line":140,"column":2}},"38":{"start":{"line":138,"column":4},"end":{"line":138,"column":27}},"39":{"start":{"line":139,"column":4},"end":{"line":139,"column":23}},"40":{"start":{"line":148,"column":0},"end":{"line":151,"column":2}},"41":{"start":{"line":149,"column":4},"end":{"line":150,"column":51}},"42":{"start":{"line":159,"column":0},"end":{"line":161,"column":2}},"43":{"start":{"line":160,"column":4},"end":{"line":160,"column":64}},"44":{"start":{"line":169,"column":0},"end":{"line":171,"column":2}},"45":{"start":{"line":170,"column":4},"end":{"line":170,"column":36}},"46":{"start":{"line":180,"column":0},"end":{"line":182,"column":2}},"47":{"start":{"line":181,"column":4},"end":{"line":181,"column":35}},"48":{"start":{"line":191,"column":0},"end":{"line":193,"column":2}},"49":{"start":{"line":192,"column":4},"end":{"line":192,"column":60}},"50":{"start":{"line":202,"column":0},"end":{"line":204,"column":2}},"51":{"start":{"line":203,"column":4},"end":{"line":203,"column":58}},"52":{"start":{"line":212,"column":0},"end":{"line":220,"column":2}},"53":{"start":{"line":213,"column":4},"end":{"line":217,"column":5}},"54":{"start":{"line":214,"column":8},"end":{"line":214,"column":42}},"55":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"56":{"start":{"line":216,"column":8},"end":{"line":216,"column":46}},"57":{"start":{"line":219,"column":4},"end":{"line":219,"column":14}},"58":{"start":{"line":222,"column":0},"end":{"line":224,"column":2}},"59":{"start":{"line":223,"column":4},"end":{"line":223,"column":22}},"60":{"start":{"line":226,"column":0},"end":{"line":226,"column":22}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":8},"end":{"line":50,"column":8}},{"start":{"line":50,"column":8},"end":{"line":50,"column":8}}]},"2":{"line":50,"type":"binary-expr","locations":[{"start":{"line":50,"column":12},"end":{"line":50,"column":21}},{"start":{"line":50,"column":25},"end":{"line":50,"column":34}}]},"3":{"line":149,"type":"binary-expr","locations":[{"start":{"line":149,"column":11},"end":{"line":149,"column":75}},{"start":{"line":150,"column":8},"end":{"line":150,"column":50}}]},"4":{"line":160,"type":"binary-expr","locations":[{"start":{"line":160,"column":11},"end":{"line":160,"column":35}},{"start":{"line":160,"column":39},"end":{"line":160,"column":63}}]},"5":{"line":192,"type":"cond-expr","locations":[{"start":{"line":192,"column":31},"end":{"line":192,"column":54}},{"start":{"line":192,"column":57},"end":{"line":192,"column":59}}]},"6":{"line":203,"type":"cond-expr","locations":[{"start":{"line":203,"column":31},"end":{"line":203,"column":52}},{"start":{"line":203,"column":55},"end":{"line":203,"column":57}}]},"7":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":4},"end":{"line":213,"column":4}},{"start":{"line":213,"column":4},"end":{"line":213,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":6,"13":1,"14":4,"15":1,"16":6,"17":1,"18":6,"19":1,"20":6,"21":1,"22":154,"23":154,"24":154,"25":3696,"26":3696,"27":154,"28":1078,"29":1078,"30":154,"31":154,"32":1,"33":5,"34":0,"35":0,"36":1,"37":0,"38":0,"39":0,"40":1,"41":154,"42":154,"43":154,"44":154,"45":6,"46":154,"47":154,"48":154,"49":154,"50":154,"51":154,"52":154,"53":154,"54":154,"55":154,"56":154,"57":154,"58":154,"59":154,"60":154,"61":154,"62":154,"63":154,"64":154,"65":154,"66":154,"67":1,"68":154,"69":1,"70":27,"71":27,"72":1,"73":0,"74":1,"75":2,"76":1},"b":{"1":[2,4],"2":[6,2],"3":[2,2],"4":[4,2],"5":[2,4],"6":[6,2],"7":[2,4],"8":[6,4],"9":[2,4],"10":[6,4]},"f":{"1":6,"2":4,"3":6,"4":6,"5":6,"6":154,"7":3696,"8":1078,"9":5,"10":0,"11":0,"12":0,"13":154,"14":6,"15":154,"16":27,"17":0,"18":2},"fnMap":{"1":{"name":"(anonymous_1)","line":37,"loc":{"start":{"line":37,"column":16},"end":{"line":37,"column":32}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":31},"end":{"line":41,"column":47}}},"3":{"name":"(anonymous_3)","line":45,"loc":{"start":{"line":45,"column":16},"end":{"line":45,"column":32}}},"4":{"name":"(anonymous_4)","line":49,"loc":{"start":{"line":49,"column":35},"end":{"line":49,"column":51}}},"5":{"name":"(anonymous_5)","line":53,"loc":{"start":{"line":53,"column":21},"end":{"line":53,"column":37}}},"6":{"name":"Eth","line":57,"loc":{"start":{"line":57,"column":0},"end":{"line":57,"column":19}}},"7":{"name":"(anonymous_7)","line":62,"loc":{"start":{"line":62,"column":22},"end":{"line":62,"column":39}}},"8":{"name":"(anonymous_8)","line":67,"loc":{"start":{"line":67,"column":25},"end":{"line":67,"column":37}}},"9":{"name":"(anonymous_9)","line":78,"loc":{"start":{"line":78,"column":9},"end":{"line":78,"column":21}}},"10":{"name":"(anonymous_10)","line":81,"loc":{"start":{"line":81,"column":9},"end":{"line":81,"column":24}}},"11":{"name":"(anonymous_11)","line":88,"loc":{"start":{"line":88,"column":9},"end":{"line":88,"column":21}}},"12":{"name":"(anonymous_12)","line":91,"loc":{"start":{"line":91,"column":9},"end":{"line":91,"column":24}}},"13":{"name":"(anonymous_13)","line":97,"loc":{"start":{"line":97,"column":14},"end":{"line":97,"column":26}}},"14":{"name":"(anonymous_14)","line":124,"loc":{"start":{"line":124,"column":63},"end":{"line":124,"column":78}}},"15":{"name":"(anonymous_15)","line":320,"loc":{"start":{"line":320,"column":17},"end":{"line":320,"column":29}}},"16":{"name":"(anonymous_16)","line":357,"loc":{"start":{"line":357,"column":25},"end":{"line":357,"column":40}}},"17":{"name":"(anonymous_17)","line":362,"loc":{"start":{"line":362,"column":24},"end":{"line":362,"column":36}}},"18":{"name":"(anonymous_18)","line":366,"loc":{"start":{"line":366,"column":28},"end":{"line":366,"column":40}}}},"statementMap":{"1":{"start":{"line":26,"column":0},"end":{"line":26,"column":42}},"2":{"start":{"line":27,"column":0},"end":{"line":27,"column":41}},"3":{"start":{"line":28,"column":0},"end":{"line":28,"column":38}},"4":{"start":{"line":29,"column":0},"end":{"line":29,"column":34}},"5":{"start":{"line":30,"column":0},"end":{"line":30,"column":38}},"6":{"start":{"line":31,"column":0},"end":{"line":31,"column":48}},"7":{"start":{"line":32,"column":0},"end":{"line":32,"column":38}},"8":{"start":{"line":33,"column":0},"end":{"line":33,"column":36}},"9":{"start":{"line":34,"column":0},"end":{"line":34,"column":30}},"10":{"start":{"line":35,"column":0},"end":{"line":35,"column":38}},"11":{"start":{"line":37,"column":0},"end":{"line":39,"column":2}},"12":{"start":{"line":38,"column":4},"end":{"line":38,"column":116}},"13":{"start":{"line":41,"column":0},"end":{"line":43,"column":2}},"14":{"start":{"line":42,"column":4},"end":{"line":42,"column":154}},"15":{"start":{"line":45,"column":0},"end":{"line":47,"column":2}},"16":{"start":{"line":46,"column":4},"end":{"line":46,"column":142}},"17":{"start":{"line":49,"column":0},"end":{"line":51,"column":2}},"18":{"start":{"line":50,"column":4},"end":{"line":50,"column":148}},"19":{"start":{"line":53,"column":0},"end":{"line":55,"column":2}},"20":{"start":{"line":54,"column":4},"end":{"line":54,"column":136}},"21":{"start":{"line":57,"column":0},"end":{"line":75,"column":1}},"22":{"start":{"line":58,"column":4},"end":{"line":58,"column":48}},"23":{"start":{"line":60,"column":4},"end":{"line":60,"column":20}},"24":{"start":{"line":62,"column":4},"end":{"line":65,"column":7}},"25":{"start":{"line":63,"column":8},"end":{"line":63,"column":36}},"26":{"start":{"line":64,"column":8},"end":{"line":64,"column":55}},"27":{"start":{"line":67,"column":4},"end":{"line":70,"column":7}},"28":{"start":{"line":68,"column":8},"end":{"line":68,"column":31}},"29":{"start":{"line":69,"column":8},"end":{"line":69,"column":50}},"30":{"start":{"line":73,"column":4},"end":{"line":73,"column":21}},"31":{"start":{"line":74,"column":4},"end":{"line":74,"column":57}},"32":{"start":{"line":77,"column":0},"end":{"line":85,"column":3}},"33":{"start":{"line":79,"column":8},"end":{"line":79,"column":30}},"34":{"start":{"line":82,"column":8},"end":{"line":82,"column":29}},"35":{"start":{"line":83,"column":8},"end":{"line":83,"column":19}},"36":{"start":{"line":87,"column":0},"end":{"line":95,"column":3}},"37":{"start":{"line":89,"column":8},"end":{"line":89,"column":32}},"38":{"start":{"line":92,"column":8},"end":{"line":92,"column":31}},"39":{"start":{"line":93,"column":8},"end":{"line":93,"column":19}},"40":{"start":{"line":97,"column":0},"end":{"line":317,"column":2}},"41":{"start":{"line":98,"column":4},"end":{"line":104,"column":7}},"42":{"start":{"line":106,"column":4},"end":{"line":111,"column":7}},"43":{"start":{"line":113,"column":4},"end":{"line":118,"column":7}},"44":{"start":{"line":120,"column":4},"end":{"line":126,"column":7}},"45":{"start":{"line":124,"column":80},"end":{"line":124,"column":93}},"46":{"start":{"line":128,"column":4},"end":{"line":135,"column":7}},"47":{"start":{"line":137,"column":4},"end":{"line":143,"column":7}},"48":{"start":{"line":145,"column":4},"end":{"line":151,"column":7}},"49":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"50":{"start":{"line":160,"column":4},"end":{"line":166,"column":7}},"51":{"start":{"line":168,"column":4},"end":{"line":173,"column":7}},"52":{"start":{"line":175,"column":4},"end":{"line":181,"column":7}},"53":{"start":{"line":183,"column":4},"end":{"line":188,"column":7}},"54":{"start":{"line":190,"column":4},"end":{"line":195,"column":7}},"55":{"start":{"line":197,"column":4},"end":{"line":202,"column":7}},"56":{"start":{"line":204,"column":4},"end":{"line":209,"column":7}},"57":{"start":{"line":211,"column":4},"end":{"line":217,"column":7}},"58":{"start":{"line":219,"column":4},"end":{"line":223,"column":7}},"59":{"start":{"line":225,"column":4},"end":{"line":229,"column":7}},"60":{"start":{"line":231,"column":4},"end":{"line":235,"column":7}},"61":{"start":{"line":237,"column":4},"end":{"line":241,"column":7}},"62":{"start":{"line":243,"column":4},"end":{"line":247,"column":7}},"63":{"start":{"line":249,"column":4},"end":{"line":253,"column":7}},"64":{"start":{"line":255,"column":4},"end":{"line":261,"column":7}},"65":{"start":{"line":265,"column":4},"end":{"line":288,"column":7}},"66":{"start":{"line":291,"column":4},"end":{"line":316,"column":6}},"67":{"start":{"line":320,"column":0},"end":{"line":355,"column":2}},"68":{"start":{"line":321,"column":4},"end":{"line":354,"column":6}},"69":{"start":{"line":357,"column":0},"end":{"line":360,"column":2}},"70":{"start":{"line":358,"column":4},"end":{"line":358,"column":42}},"71":{"start":{"line":359,"column":4},"end":{"line":359,"column":19}},"72":{"start":{"line":362,"column":0},"end":{"line":364,"column":2}},"73":{"start":{"line":363,"column":4},"end":{"line":363,"column":72}},"74":{"start":{"line":366,"column":0},"end":{"line":368,"column":2}},"75":{"start":{"line":367,"column":4},"end":{"line":367,"column":68}},"76":{"start":{"line":371,"column":0},"end":{"line":371,"column":21}}},"branchMap":{"1":{"line":38,"type":"cond-expr","locations":[{"start":{"line":38,"column":70},"end":{"line":38,"column":90}},{"start":{"line":38,"column":93},"end":{"line":38,"column":115}}]},"2":{"line":38,"type":"binary-expr","locations":[{"start":{"line":38,"column":12},"end":{"line":38,"column":35}},{"start":{"line":38,"column":39},"end":{"line":38,"column":66}}]},"3":{"line":42,"type":"cond-expr","locations":[{"start":{"line":42,"column":70},"end":{"line":42,"column":109}},{"start":{"line":42,"column":112},"end":{"line":42,"column":153}}]},"4":{"line":42,"type":"binary-expr","locations":[{"start":{"line":42,"column":12},"end":{"line":42,"column":35}},{"start":{"line":42,"column":39},"end":{"line":42,"column":66}}]},"5":{"line":46,"type":"cond-expr","locations":[{"start":{"line":46,"column":70},"end":{"line":46,"column":103}},{"start":{"line":46,"column":106},"end":{"line":46,"column":141}}]},"6":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":12},"end":{"line":46,"column":35}},{"start":{"line":46,"column":39},"end":{"line":46,"column":66}}]},"7":{"line":50,"type":"cond-expr","locations":[{"start":{"line":50,"column":70},"end":{"line":50,"column":106}},{"start":{"line":50,"column":109},"end":{"line":50,"column":147}}]},"8":{"line":50,"type":"binary-expr","locations":[{"start":{"line":50,"column":12},"end":{"line":50,"column":35}},{"start":{"line":50,"column":39},"end":{"line":50,"column":66}}]},"9":{"line":54,"type":"cond-expr","locations":[{"start":{"line":54,"column":70},"end":{"line":54,"column":100}},{"start":{"line":54,"column":103},"end":{"line":54,"column":135}}]},"10":{"line":54,"type":"binary-expr","locations":[{"start":{"line":54,"column":12},"end":{"line":54,"column":35}},{"start":{"line":54,"column":39},"end":{"line":54,"column":66}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js","s":{"1":1,"2":1,"3":1,"4":1,"5":26,"6":1,"7":67,"8":1,"9":55,"10":20,"11":35,"12":1,"13":67,"14":0,"15":67,"16":15,"17":52,"18":1,"19":15,"20":15,"21":4,"22":15,"23":15,"24":15,"25":60,"26":18,"27":15,"28":1,"29":13,"30":13,"31":13,"32":11,"33":13,"34":52,"35":24,"36":13,"37":1,"38":12,"39":11,"40":12,"41":11,"42":12,"43":12,"44":12,"45":12,"46":12,"47":1,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":2,"55":2,"56":4,"57":2,"58":1,"59":15,"60":15,"61":15,"62":15,"63":15,"64":14,"65":15,"66":15,"67":15,"68":12,"69":20,"70":4,"71":15,"72":1,"73":5,"74":7,"75":2,"76":5,"77":5,"78":5,"79":0,"80":5,"81":5,"82":7,"83":5,"84":5,"85":0,"86":5,"87":1,"88":16,"89":13,"90":16,"91":13,"92":16,"93":13,"94":16,"95":1,"96":5,"97":5,"98":5,"99":5,"100":0,"101":5,"102":6,"103":5,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":0,"111":1,"112":2,"113":1,"114":1,"115":80,"116":80,"117":8,"118":72,"119":58,"120":14,"121":9,"122":5,"123":1,"124":0,"125":0,"126":0,"127":0,"128":1},"b":{"1":[67,59,53],"2":[20,35],"3":[0,67],"4":[15,52],"5":[15,11],"6":[4,11],"7":[15,0],"8":[13,0],"9":[11,2],"10":[11,1],"11":[11,1],"12":[2,0],"13":[2,0],"14":[2,0],"15":[14,1],"16":[12,3],"17":[4,16],"18":[2,5],"19":[7,5],"20":[5,0],"21":[5,1],"22":[0,7],"23":[0,5],"24":[5,4],"25":[13,3],"26":[13,3],"27":[13,3],"28":[0,5],"29":[0,0],"30":[0,6],"31":[0,1],"32":[8,72],"33":[80,8],"34":[58,14],"35":[9,5]},"f":{"1":26,"2":67,"3":55,"4":67,"5":15,"6":60,"7":18,"8":13,"9":52,"10":24,"11":12,"12":2,"13":4,"14":15,"15":20,"16":5,"17":7,"18":7,"19":16,"20":5,"21":6,"22":1,"23":2,"24":80,"25":0},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":31},"end":{"line":35,"column":49}}},"2":{"name":"(anonymous_2)","line":39,"loc":{"start":{"line":39,"column":30},"end":{"line":39,"column":53}}},"3":{"name":"(anonymous_3)","line":43,"loc":{"start":{"line":43,"column":39},"end":{"line":43,"column":62}}},"4":{"name":"(anonymous_4)","line":50,"loc":{"start":{"line":50,"column":32},"end":{"line":50,"column":55}}},"5":{"name":"(anonymous_5)","line":66,"loc":{"start":{"line":66,"column":25},"end":{"line":66,"column":43}}},"6":{"name":"(anonymous_6)","line":78,"loc":{"start":{"line":78,"column":49},"end":{"line":78,"column":64}}},"7":{"name":"(anonymous_7)","line":80,"loc":{"start":{"line":80,"column":15},"end":{"line":80,"column":28}}},"8":{"name":"(anonymous_8)","line":94,"loc":{"start":{"line":94,"column":32},"end":{"line":94,"column":50}}},"9":{"name":"(anonymous_9)","line":103,"loc":{"start":{"line":103,"column":49},"end":{"line":103,"column":64}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":15},"end":{"line":105,"column":28}}},"11":{"name":"(anonymous_11)","line":119,"loc":{"start":{"line":119,"column":33},"end":{"line":119,"column":46}}},"12":{"name":"(anonymous_12)","line":138,"loc":{"start":{"line":138,"column":40},"end":{"line":138,"column":58}}},"13":{"name":"(anonymous_13)","line":147,"loc":{"start":{"line":147,"column":40},"end":{"line":147,"column":53}}},"14":{"name":"(anonymous_14)","line":162,"loc":{"start":{"line":162,"column":27},"end":{"line":162,"column":43}}},"15":{"name":"(anonymous_15)","line":176,"loc":{"start":{"line":176,"column":35},"end":{"line":176,"column":49}}},"16":{"name":"(anonymous_16)","line":192,"loc":{"start":{"line":192,"column":24},"end":{"line":192,"column":42}}},"17":{"name":"(anonymous_17)","line":193,"loc":{"start":{"line":193,"column":18},"end":{"line":193,"column":33}}},"18":{"name":"(anonymous_18)","line":208,"loc":{"start":{"line":208,"column":40},"end":{"line":208,"column":55}}},"19":{"name":"(anonymous_19)","line":227,"loc":{"start":{"line":227,"column":25},"end":{"line":227,"column":39}}},"20":{"name":"(anonymous_20)","line":245,"loc":{"start":{"line":245,"column":25},"end":{"line":245,"column":40}}},"21":{"name":"(anonymous_21)","line":258,"loc":{"start":{"line":258,"column":34},"end":{"line":258,"column":49}}},"22":{"name":"(anonymous_22)","line":273,"loc":{"start":{"line":273,"column":26},"end":{"line":273,"column":40}}},"23":{"name":"(anonymous_23)","line":290,"loc":{"start":{"line":290,"column":34},"end":{"line":290,"column":49}}},"24":{"name":"(anonymous_24)","line":297,"loc":{"start":{"line":297,"column":28},"end":{"line":297,"column":47}}},"25":{"name":"(anonymous_25)","line":310,"loc":{"start":{"line":310,"column":29},"end":{"line":310,"column":46}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":40}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":29}},"4":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"5":{"start":{"line":36,"column":4},"end":{"line":36,"column":37}},"6":{"start":{"line":39,"column":0},"end":{"line":41,"column":2}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":95}},"8":{"start":{"line":43,"column":0},"end":{"line":48,"column":2}},"9":{"start":{"line":44,"column":4},"end":{"line":46,"column":5}},"10":{"start":{"line":45,"column":8},"end":{"line":45,"column":35}},"11":{"start":{"line":47,"column":4},"end":{"line":47,"column":50}},"12":{"start":{"line":50,"column":0},"end":{"line":57,"column":2}},"13":{"start":{"line":51,"column":4},"end":{"line":55,"column":5}},"14":{"start":{"line":52,"column":8},"end":{"line":52,"column":25}},"15":{"start":{"line":53,"column":11},"end":{"line":55,"column":5}},"16":{"start":{"line":54,"column":8},"end":{"line":54,"column":27}},"17":{"start":{"line":56,"column":4},"end":{"line":56,"column":36}},"18":{"start":{"line":66,"column":0},"end":{"line":85,"column":2}},"19":{"start":{"line":68,"column":4},"end":{"line":68,"column":57}},"20":{"start":{"line":70,"column":4},"end":{"line":72,"column":5}},"21":{"start":{"line":71,"column":8},"end":{"line":71,"column":59}},"22":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"23":{"start":{"line":75,"column":8},"end":{"line":75,"column":55}},"24":{"start":{"line":78,"column":4},"end":{"line":82,"column":7}},"25":{"start":{"line":79,"column":8},"end":{"line":79,"column":42}},"26":{"start":{"line":81,"column":8},"end":{"line":81,"column":55}},"27":{"start":{"line":84,"column":4},"end":{"line":84,"column":19}},"28":{"start":{"line":94,"column":0},"end":{"line":110,"column":2}},"29":{"start":{"line":96,"column":4},"end":{"line":96,"column":57}},"30":{"start":{"line":97,"column":4},"end":{"line":97,"column":55}},"31":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"32":{"start":{"line":100,"column":8},"end":{"line":100,"column":55}},"33":{"start":{"line":103,"column":4},"end":{"line":107,"column":7}},"34":{"start":{"line":104,"column":8},"end":{"line":104,"column":42}},"35":{"start":{"line":106,"column":8},"end":{"line":106,"column":55}},"36":{"start":{"line":109,"column":4},"end":{"line":109,"column":19}},"37":{"start":{"line":119,"column":0},"end":{"line":129,"column":2}},"38":{"start":{"line":120,"column":4},"end":{"line":121,"column":57}},"39":{"start":{"line":121,"column":8},"end":{"line":121,"column":57}},"40":{"start":{"line":122,"column":4},"end":{"line":123,"column":67}},"41":{"start":{"line":123,"column":8},"end":{"line":123,"column":67}},"42":{"start":{"line":124,"column":4},"end":{"line":124,"column":41}},"43":{"start":{"line":125,"column":4},"end":{"line":125,"column":37}},"44":{"start":{"line":126,"column":4},"end":{"line":126,"column":49}},"45":{"start":{"line":127,"column":4},"end":{"line":127,"column":43}},"46":{"start":{"line":128,"column":4},"end":{"line":128,"column":14}},"47":{"start":{"line":138,"column":0},"end":{"line":153,"column":2}},"48":{"start":{"line":139,"column":4},"end":{"line":140,"column":67}},"49":{"start":{"line":140,"column":8},"end":{"line":140,"column":67}},"50":{"start":{"line":141,"column":4},"end":{"line":142,"column":77}},"51":{"start":{"line":142,"column":8},"end":{"line":142,"column":77}},"52":{"start":{"line":143,"column":4},"end":{"line":143,"column":75}},"53":{"start":{"line":144,"column":4},"end":{"line":144,"column":55}},"54":{"start":{"line":146,"column":4},"end":{"line":150,"column":5}},"55":{"start":{"line":147,"column":8},"end":{"line":149,"column":11}},"56":{"start":{"line":148,"column":12},"end":{"line":148,"column":43}},"57":{"start":{"line":152,"column":4},"end":{"line":152,"column":19}},"58":{"start":{"line":162,"column":0},"end":{"line":183,"column":2}},"59":{"start":{"line":165,"column":4},"end":{"line":165,"column":53}},"60":{"start":{"line":166,"column":4},"end":{"line":166,"column":51}},"61":{"start":{"line":167,"column":4},"end":{"line":167,"column":45}},"62":{"start":{"line":168,"column":4},"end":{"line":168,"column":55}},"63":{"start":{"line":169,"column":4},"end":{"line":170,"column":53}},"64":{"start":{"line":170,"column":8},"end":{"line":170,"column":53}},"65":{"start":{"line":172,"column":4},"end":{"line":172,"column":59}},"66":{"start":{"line":173,"column":4},"end":{"line":173,"column":69}},"67":{"start":{"line":175,"column":4},"end":{"line":180,"column":5}},"68":{"start":{"line":176,"column":8},"end":{"line":179,"column":11}},"69":{"start":{"line":177,"column":12},"end":{"line":178,"column":56}},"70":{"start":{"line":178,"column":16},"end":{"line":178,"column":56}},"71":{"start":{"line":182,"column":4},"end":{"line":182,"column":17}},"72":{"start":{"line":192,"column":0},"end":{"line":218,"column":2}},"73":{"start":{"line":193,"column":4},"end":{"line":204,"column":6}},"74":{"start":{"line":195,"column":8},"end":{"line":196,"column":24}},"75":{"start":{"line":196,"column":12},"end":{"line":196,"column":24}},"76":{"start":{"line":198,"column":8},"end":{"line":198,"column":30}},"77":{"start":{"line":200,"column":8},"end":{"line":203,"column":41}},"78":{"start":{"line":201,"column":12},"end":{"line":201,"column":25}},"79":{"start":{"line":203,"column":12},"end":{"line":203,"column":41}},"80":{"start":{"line":207,"column":4},"end":{"line":207,"column":42}},"81":{"start":{"line":208,"column":4},"end":{"line":210,"column":7}},"82":{"start":{"line":209,"column":8},"end":{"line":209,"column":76}},"83":{"start":{"line":212,"column":4},"end":{"line":212,"column":19}},"84":{"start":{"line":214,"column":4},"end":{"line":215,"column":59}},"85":{"start":{"line":215,"column":8},"end":{"line":215,"column":59}},"86":{"start":{"line":217,"column":4},"end":{"line":217,"column":19}},"87":{"start":{"line":227,"column":0},"end":{"line":236,"column":2}},"88":{"start":{"line":228,"column":4},"end":{"line":229,"column":59}},"89":{"start":{"line":229,"column":8},"end":{"line":229,"column":59}},"90":{"start":{"line":230,"column":4},"end":{"line":231,"column":69}},"91":{"start":{"line":231,"column":8},"end":{"line":231,"column":69}},"92":{"start":{"line":232,"column":4},"end":{"line":233,"column":53}},"93":{"start":{"line":233,"column":8},"end":{"line":233,"column":53}},"94":{"start":{"line":235,"column":4},"end":{"line":235,"column":15}},"95":{"start":{"line":245,"column":0},"end":{"line":264,"column":2}},"96":{"start":{"line":248,"column":4},"end":{"line":248,"column":43}},"97":{"start":{"line":249,"column":4},"end":{"line":249,"column":59}},"98":{"start":{"line":250,"column":4},"end":{"line":250,"column":53}},"99":{"start":{"line":253,"column":4},"end":{"line":255,"column":5}},"100":{"start":{"line":254,"column":8},"end":{"line":254,"column":55}},"101":{"start":{"line":258,"column":4},"end":{"line":261,"column":7}},"102":{"start":{"line":260,"column":8},"end":{"line":260,"column":75}},"103":{"start":{"line":263,"column":4},"end":{"line":263,"column":16}},"104":{"start":{"line":273,"column":0},"end":{"line":295,"column":2}},"105":{"start":{"line":275,"column":4},"end":{"line":275,"column":47}},"106":{"start":{"line":276,"column":4},"end":{"line":276,"column":43}},"107":{"start":{"line":277,"column":4},"end":{"line":277,"column":41}},"108":{"start":{"line":278,"column":4},"end":{"line":278,"column":55}},"109":{"start":{"line":287,"column":4},"end":{"line":289,"column":5}},"110":{"start":{"line":288,"column":8},"end":{"line":288,"column":25}},"111":{"start":{"line":290,"column":4},"end":{"line":292,"column":7}},"112":{"start":{"line":291,"column":8},"end":{"line":291,"column":36}},"113":{"start":{"line":294,"column":4},"end":{"line":294,"column":16}},"114":{"start":{"line":297,"column":0},"end":{"line":307,"column":2}},"115":{"start":{"line":298,"column":4},"end":{"line":298,"column":33}},"116":{"start":{"line":299,"column":4},"end":{"line":305,"column":5}},"117":{"start":{"line":300,"column":8},"end":{"line":300,"column":37}},"118":{"start":{"line":301,"column":11},"end":{"line":305,"column":5}},"119":{"start":{"line":302,"column":8},"end":{"line":302,"column":23}},"120":{"start":{"line":303,"column":11},"end":{"line":305,"column":5}},"121":{"start":{"line":304,"column":8},"end":{"line":304,"column":30}},"122":{"start":{"line":306,"column":4},"end":{"line":306,"column":28}},"123":{"start":{"line":310,"column":0},"end":{"line":317,"column":2}},"124":{"start":{"line":312,"column":4},"end":{"line":312,"column":65}},"125":{"start":{"line":313,"column":4},"end":{"line":313,"column":63}},"126":{"start":{"line":314,"column":4},"end":{"line":314,"column":63}},"127":{"start":{"line":316,"column":4},"end":{"line":316,"column":18}},"128":{"start":{"line":319,"column":0},"end":{"line":334,"column":2}}},"branchMap":{"1":{"line":40,"type":"binary-expr","locations":[{"start":{"line":40,"column":11},"end":{"line":40,"column":35}},{"start":{"line":40,"column":39},"end":{"line":40,"column":64}},{"start":{"line":40,"column":68},"end":{"line":40,"column":94}}]},"2":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"3":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"4":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":11},"end":{"line":53,"column":11}},{"start":{"line":53,"column":11},"end":{"line":53,"column":11}}]},"5":{"line":68,"type":"binary-expr","locations":[{"start":{"line":68,"column":19},"end":{"line":68,"column":31}},{"start":{"line":68,"column":35},"end":{"line":68,"column":56}}]},"6":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":4},"end":{"line":70,"column":4}},{"start":{"line":70,"column":4},"end":{"line":70,"column":4}}]},"7":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":74,"column":4}},{"start":{"line":74,"column":4},"end":{"line":74,"column":4}}]},"8":{"line":96,"type":"binary-expr","locations":[{"start":{"line":96,"column":19},"end":{"line":96,"column":31}},{"start":{"line":96,"column":35},"end":{"line":96,"column":56}}]},"9":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":99,"column":4}},{"start":{"line":99,"column":4},"end":{"line":99,"column":4}}]},"10":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":4}},{"start":{"line":120,"column":4},"end":{"line":120,"column":4}}]},"11":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":122,"column":4}},{"start":{"line":122,"column":4},"end":{"line":122,"column":4}}]},"12":{"line":139,"type":"if","locations":[{"start":{"line":139,"column":4},"end":{"line":139,"column":4}},{"start":{"line":139,"column":4},"end":{"line":139,"column":4}}]},"13":{"line":141,"type":"if","locations":[{"start":{"line":141,"column":4},"end":{"line":141,"column":4}},{"start":{"line":141,"column":4},"end":{"line":141,"column":4}}]},"14":{"line":146,"type":"if","locations":[{"start":{"line":146,"column":4},"end":{"line":146,"column":4}},{"start":{"line":146,"column":4},"end":{"line":146,"column":4}}]},"15":{"line":169,"type":"if","locations":[{"start":{"line":169,"column":4},"end":{"line":169,"column":4}},{"start":{"line":169,"column":4},"end":{"line":169,"column":4}}]},"16":{"line":175,"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":175,"column":4}},{"start":{"line":175,"column":4},"end":{"line":175,"column":4}}]},"17":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":12},"end":{"line":177,"column":12}},{"start":{"line":177,"column":12},"end":{"line":177,"column":12}}]},"18":{"line":195,"type":"if","locations":[{"start":{"line":195,"column":8},"end":{"line":195,"column":8}},{"start":{"line":195,"column":8},"end":{"line":195,"column":8}}]},"19":{"line":195,"type":"binary-expr","locations":[{"start":{"line":195,"column":11},"end":{"line":195,"column":25}},{"start":{"line":195,"column":29},"end":{"line":195,"column":57}}]},"20":{"line":200,"type":"if","locations":[{"start":{"line":200,"column":8},"end":{"line":200,"column":8}},{"start":{"line":200,"column":8},"end":{"line":200,"column":8}}]},"21":{"line":207,"type":"binary-expr","locations":[{"start":{"line":207,"column":21},"end":{"line":207,"column":35}},{"start":{"line":207,"column":39},"end":{"line":207,"column":41}}]},"22":{"line":209,"type":"cond-expr","locations":[{"start":{"line":209,"column":40},"end":{"line":209,"column":58}},{"start":{"line":209,"column":61},"end":{"line":209,"column":75}}]},"23":{"line":214,"type":"if","locations":[{"start":{"line":214,"column":4},"end":{"line":214,"column":4}},{"start":{"line":214,"column":4},"end":{"line":214,"column":4}}]},"24":{"line":214,"type":"binary-expr","locations":[{"start":{"line":214,"column":7},"end":{"line":214,"column":22}},{"start":{"line":214,"column":26},"end":{"line":214,"column":59}}]},"25":{"line":228,"type":"if","locations":[{"start":{"line":228,"column":4},"end":{"line":228,"column":4}},{"start":{"line":228,"column":4},"end":{"line":228,"column":4}}]},"26":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":4},"end":{"line":230,"column":4}},{"start":{"line":230,"column":4},"end":{"line":230,"column":4}}]},"27":{"line":232,"type":"if","locations":[{"start":{"line":232,"column":4},"end":{"line":232,"column":4}},{"start":{"line":232,"column":4},"end":{"line":232,"column":4}}]},"28":{"line":253,"type":"if","locations":[{"start":{"line":253,"column":4},"end":{"line":253,"column":4}},{"start":{"line":253,"column":4},"end":{"line":253,"column":4}}]},"29":{"line":254,"type":"cond-expr","locations":[{"start":{"line":254,"column":36},"end":{"line":254,"column":49}},{"start":{"line":254,"column":52},"end":{"line":254,"column":54}}]},"30":{"line":260,"type":"cond-expr","locations":[{"start":{"line":260,"column":45},"end":{"line":260,"column":50}},{"start":{"line":260,"column":53},"end":{"line":260,"column":74}}]},"31":{"line":287,"type":"if","locations":[{"start":{"line":287,"column":4},"end":{"line":287,"column":4}},{"start":{"line":287,"column":4},"end":{"line":287,"column":4}}]},"32":{"line":299,"type":"if","locations":[{"start":{"line":299,"column":4},"end":{"line":299,"column":4}},{"start":{"line":299,"column":4},"end":{"line":299,"column":4}}]},"33":{"line":299,"type":"binary-expr","locations":[{"start":{"line":299,"column":8},"end":{"line":299,"column":22}},{"start":{"line":299,"column":26},"end":{"line":299,"column":41}}]},"34":{"line":301,"type":"if","locations":[{"start":{"line":301,"column":11},"end":{"line":301,"column":11}},{"start":{"line":301,"column":11},"end":{"line":301,"column":11}}]},"35":{"line":303,"type":"if","locations":[{"start":{"line":303,"column":11},"end":{"line":303,"column":11}},{"start":{"line":303,"column":11},"end":{"line":303,"column":11}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js","s":{"1":1,"2":1,"3":1,"4":5096,"5":5096,"6":5096,"7":5096,"8":5096,"9":5096,"10":1,"11":4930,"12":1,"13":117,"14":1,"15":116,"16":57,"17":1,"18":117,"19":2,"20":1,"21":115,"22":23,"23":92,"24":166,"25":1,"26":115,"27":115,"28":6,"29":10,"30":109,"31":1,"32":113,"33":113,"34":113,"35":113,"36":113,"37":1,"38":4930,"39":4930,"40":4930,"41":4930,"42":462,"43":462,"44":4468,"45":1,"46":4930,"47":4930,"48":109,"49":109,"50":51,"51":51,"52":58,"53":4930,"54":4930,"55":1,"56":4,"57":4,"58":4,"59":1},"b":{"1":[5096,780],"2":[31,86],"3":[57,59],"4":[2,115],"5":[23,92],"6":[158,8],"7":[6,109],"8":[3,7],"9":[10,3],"10":[58,51],"11":[109,59],"12":[462,4468],"13":[462,154],"14":[51,58]},"f":{"1":5096,"2":4930,"3":117,"4":116,"5":117,"6":115,"7":166,"8":115,"9":10,"10":113,"11":4930,"12":4930,"13":109,"14":51,"15":4},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":13},"end":{"line":26,"column":32}}},"2":{"name":"(anonymous_2)","line":35,"loc":{"start":{"line":35,"column":37},"end":{"line":35,"column":51}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":27},"end":{"line":46,"column":43}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":35},"end":{"line":57,"column":51}}},"5":{"name":"(anonymous_5)","line":70,"loc":{"start":{"line":70,"column":32},"end":{"line":70,"column":48}}},"6":{"name":"(anonymous_6)","line":83,"loc":{"start":{"line":83,"column":31},"end":{"line":83,"column":47}}},"7":{"name":"(anonymous_7)","line":88,"loc":{"start":{"line":88,"column":35},"end":{"line":88,"column":63}}},"8":{"name":"(anonymous_8)","line":100,"loc":{"start":{"line":100,"column":32},"end":{"line":100,"column":50}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":26},"end":{"line":104,"column":39}}},"10":{"name":"(anonymous_10)","line":119,"loc":{"start":{"line":119,"column":29},"end":{"line":119,"column":45}}},"11":{"name":"(anonymous_11)","line":132,"loc":{"start":{"line":132,"column":34},"end":{"line":132,"column":49}}},"12":{"name":"(anonymous_12)","line":144,"loc":{"start":{"line":144,"column":29},"end":{"line":144,"column":40}}},"13":{"name":"(anonymous_13)","line":146,"loc":{"start":{"line":146,"column":15},"end":{"line":146,"column":27}}},"14":{"name":"(anonymous_14)","line":149,"loc":{"start":{"line":149,"column":60},"end":{"line":149,"column":83}}},"15":{"name":"(anonymous_15)","line":166,"loc":{"start":{"line":166,"column":27},"end":{"line":166,"column":39}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":33,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":29}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":29}},"6":{"start":{"line":29,"column":4},"end":{"line":29,"column":38}},"7":{"start":{"line":30,"column":4},"end":{"line":30,"column":49}},"8":{"start":{"line":31,"column":4},"end":{"line":31,"column":51}},"9":{"start":{"line":32,"column":4},"end":{"line":32,"column":31}},"10":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"11":{"start":{"line":36,"column":4},"end":{"line":36,"column":29}},"12":{"start":{"line":46,"column":0},"end":{"line":48,"column":2}},"13":{"start":{"line":47,"column":4},"end":{"line":47,"column":69}},"14":{"start":{"line":57,"column":0},"end":{"line":61,"column":2}},"15":{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},"16":{"start":{"line":59,"column":8},"end":{"line":59,"column":26}},"17":{"start":{"line":70,"column":0},"end":{"line":74,"column":2}},"18":{"start":{"line":71,"column":4},"end":{"line":73,"column":5}},"19":{"start":{"line":72,"column":8},"end":{"line":72,"column":45}},"20":{"start":{"line":83,"column":0},"end":{"line":91,"column":2}},"21":{"start":{"line":84,"column":4},"end":{"line":86,"column":5}},"22":{"start":{"line":85,"column":8},"end":{"line":85,"column":20}},"23":{"start":{"line":88,"column":4},"end":{"line":90,"column":7}},"24":{"start":{"line":89,"column":8},"end":{"line":89,"column":64}},"25":{"start":{"line":100,"column":0},"end":{"line":110,"column":2}},"26":{"start":{"line":101,"column":4},"end":{"line":101,"column":21}},"27":{"start":{"line":103,"column":4},"end":{"line":109,"column":5}},"28":{"start":{"line":104,"column":8},"end":{"line":106,"column":11}},"29":{"start":{"line":105,"column":12},"end":{"line":105,"column":83}},"30":{"start":{"line":108,"column":8},"end":{"line":108,"column":86}},"31":{"start":{"line":119,"column":0},"end":{"line":130,"column":2}},"32":{"start":{"line":120,"column":4},"end":{"line":120,"column":34}},"33":{"start":{"line":121,"column":4},"end":{"line":121,"column":46}},"34":{"start":{"line":122,"column":4},"end":{"line":122,"column":40}},"35":{"start":{"line":123,"column":4},"end":{"line":123,"column":30}},"36":{"start":{"line":125,"column":4},"end":{"line":129,"column":6}},"37":{"start":{"line":132,"column":0},"end":{"line":142,"column":2}},"38":{"start":{"line":133,"column":4},"end":{"line":133,"column":32}},"39":{"start":{"line":134,"column":4},"end":{"line":134,"column":26}},"40":{"start":{"line":135,"column":4},"end":{"line":135,"column":36}},"41":{"start":{"line":136,"column":4},"end":{"line":141,"column":5}},"42":{"start":{"line":137,"column":8},"end":{"line":137,"column":42}},"43":{"start":{"line":138,"column":8},"end":{"line":138,"column":37}},"44":{"start":{"line":140,"column":8},"end":{"line":140,"column":28}},"45":{"start":{"line":144,"column":0},"end":{"line":157,"column":2}},"46":{"start":{"line":145,"column":4},"end":{"line":145,"column":22}},"47":{"start":{"line":146,"column":4},"end":{"line":154,"column":6}},"48":{"start":{"line":147,"column":8},"end":{"line":147,"column":78}},"49":{"start":{"line":148,"column":8},"end":{"line":152,"column":9}},"50":{"start":{"line":149,"column":12},"end":{"line":151,"column":15}},"51":{"start":{"line":150,"column":16},"end":{"line":150,"column":67}},"52":{"start":{"line":153,"column":8},"end":{"line":153,"column":72}},"53":{"start":{"line":155,"column":4},"end":{"line":155,"column":43}},"54":{"start":{"line":156,"column":4},"end":{"line":156,"column":16}},"55":{"start":{"line":166,"column":0},"end":{"line":170,"column":2}},"56":{"start":{"line":167,"column":4},"end":{"line":167,"column":72}},"57":{"start":{"line":168,"column":4},"end":{"line":168,"column":50}},"58":{"start":{"line":169,"column":4},"end":{"line":169,"column":19}},"59":{"start":{"line":172,"column":0},"end":{"line":172,"column":24}}},"branchMap":{"1":{"line":29,"type":"binary-expr","locations":[{"start":{"line":29,"column":18},"end":{"line":29,"column":32}},{"start":{"line":29,"column":36},"end":{"line":29,"column":37}}]},"2":{"line":47,"type":"cond-expr","locations":[{"start":{"line":47,"column":41},"end":{"line":47,"column":56}},{"start":{"line":47,"column":59},"end":{"line":47,"column":68}}]},"3":{"line":58,"type":"if","locations":[{"start":{"line":58,"column":4},"end":{"line":58,"column":4}},{"start":{"line":58,"column":4},"end":{"line":58,"column":4}}]},"4":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":71,"column":4}},{"start":{"line":71,"column":4},"end":{"line":71,"column":4}}]},"5":{"line":84,"type":"if","locations":[{"start":{"line":84,"column":4},"end":{"line":84,"column":4}},{"start":{"line":84,"column":4},"end":{"line":84,"column":4}}]},"6":{"line":89,"type":"cond-expr","locations":[{"start":{"line":89,"column":27},"end":{"line":89,"column":49}},{"start":{"line":89,"column":52},"end":{"line":89,"column":63}}]},"7":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]},"8":{"line":105,"type":"cond-expr","locations":[{"start":{"line":105,"column":50},"end":{"line":105,"column":76}},{"start":{"line":105,"column":79},"end":{"line":105,"column":82}}]},"9":{"line":105,"type":"binary-expr","locations":[{"start":{"line":105,"column":19},"end":{"line":105,"column":40}},{"start":{"line":105,"column":44},"end":{"line":105,"column":47}}]},"10":{"line":108,"type":"cond-expr","locations":[{"start":{"line":108,"column":48},"end":{"line":108,"column":76}},{"start":{"line":108,"column":79},"end":{"line":108,"column":85}}]},"11":{"line":108,"type":"binary-expr","locations":[{"start":{"line":108,"column":15},"end":{"line":108,"column":35}},{"start":{"line":108,"column":39},"end":{"line":108,"column":45}}]},"12":{"line":136,"type":"if","locations":[{"start":{"line":136,"column":4},"end":{"line":136,"column":4}},{"start":{"line":136,"column":4},"end":{"line":136,"column":4}}]},"13":{"line":137,"type":"binary-expr","locations":[{"start":{"line":137,"column":23},"end":{"line":137,"column":35}},{"start":{"line":137,"column":39},"end":{"line":137,"column":41}}]},"14":{"line":148,"type":"if","locations":[{"start":{"line":148,"column":8},"end":{"line":148,"column":8}},{"start":{"line":148,"column":8},"end":{"line":148,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js","s":{"1":1,"2":1,"3":2004,"4":2004,"5":2004,"6":2004,"7":2004,"8":2004,"9":1,"10":2004,"11":1,"12":0,"13":1,"14":20,"15":1,"16":2,"17":2,"18":1,"19":2004,"20":2004,"21":2004,"22":2004,"23":616,"24":616,"25":616,"26":2004,"27":2004,"28":1,"29":2004,"30":1,"31":2004,"32":2004,"33":17,"34":1,"35":2004,"36":2004,"37":1,"38":1,"39":2004,"40":2004,"41":1,"42":2,"43":2,"44":2,"45":1},"b":{"1":[0,0],"2":[8,12],"3":[20,11],"4":[2,0],"5":[616,1388],"6":[616,0]},"f":{"1":2004,"2":2004,"3":0,"4":20,"5":2,"6":2004,"7":2004,"8":2004,"9":17,"10":2004,"11":1,"12":1,"13":2},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":15},"end":{"line":26,"column":34}}},"2":{"name":"(anonymous_2)","line":35,"loc":{"start":{"line":35,"column":39},"end":{"line":35,"column":53}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":33},"end":{"line":46,"column":48}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":34},"end":{"line":57,"column":52}}},"5":{"name":"(anonymous_5)","line":68,"loc":{"start":{"line":68,"column":37},"end":{"line":68,"column":53}}},"6":{"name":"(anonymous_6)","line":82,"loc":{"start":{"line":82,"column":36},"end":{"line":82,"column":51}}},"7":{"name":"(anonymous_7)","line":100,"loc":{"start":{"line":100,"column":22},"end":{"line":100,"column":38}}},"8":{"name":"(anonymous_8)","line":104,"loc":{"start":{"line":104,"column":30},"end":{"line":104,"column":42}}},"9":{"name":"get","line":106,"loc":{"start":{"line":106,"column":11},"end":{"line":106,"column":26}}},"10":{"name":"(anonymous_10)","line":113,"loc":{"start":{"line":113,"column":35},"end":{"line":113,"column":47}}},"11":{"name":"(anonymous_11)","line":115,"loc":{"start":{"line":115,"column":14},"end":{"line":115,"column":34}}},"12":{"name":"(anonymous_12)","line":118,"loc":{"start":{"line":118,"column":11},"end":{"line":118,"column":34}}},"13":{"name":"(anonymous_13)","line":133,"loc":{"start":{"line":133,"column":29},"end":{"line":133,"column":41}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":26,"column":0},"end":{"line":33,"column":2}},"3":{"start":{"line":27,"column":4},"end":{"line":27,"column":29}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":33}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":33}},"6":{"start":{"line":30,"column":4},"end":{"line":30,"column":51}},"7":{"start":{"line":31,"column":4},"end":{"line":31,"column":49}},"8":{"start":{"line":32,"column":4},"end":{"line":32,"column":31}},"9":{"start":{"line":35,"column":0},"end":{"line":37,"column":2}},"10":{"start":{"line":36,"column":4},"end":{"line":36,"column":29}},"11":{"start":{"line":46,"column":0},"end":{"line":48,"column":2}},"12":{"start":{"line":47,"column":4},"end":{"line":47,"column":64}},"13":{"start":{"line":57,"column":0},"end":{"line":59,"column":2}},"14":{"start":{"line":58,"column":4},"end":{"line":58,"column":91}},"15":{"start":{"line":68,"column":0},"end":{"line":72,"column":2}},"16":{"start":{"line":69,"column":4},"end":{"line":71,"column":5}},"17":{"start":{"line":70,"column":8},"end":{"line":70,"column":26}},"18":{"start":{"line":82,"column":0},"end":{"line":98,"column":2}},"19":{"start":{"line":83,"column":4},"end":{"line":86,"column":6}},"20":{"start":{"line":88,"column":4},"end":{"line":88,"column":37}},"21":{"start":{"line":89,"column":4},"end":{"line":89,"column":24}},"22":{"start":{"line":90,"column":4},"end":{"line":94,"column":5}},"23":{"start":{"line":91,"column":8},"end":{"line":91,"column":44}},"24":{"start":{"line":92,"column":8},"end":{"line":92,"column":28}},"25":{"start":{"line":93,"column":8},"end":{"line":93,"column":24}},"26":{"start":{"line":96,"column":4},"end":{"line":96,"column":44}},"27":{"start":{"line":97,"column":4},"end":{"line":97,"column":54}},"28":{"start":{"line":100,"column":0},"end":{"line":102,"column":2}},"29":{"start":{"line":101,"column":4},"end":{"line":101,"column":64}},"30":{"start":{"line":104,"column":0},"end":{"line":111,"column":2}},"31":{"start":{"line":105,"column":4},"end":{"line":105,"column":24}},"32":{"start":{"line":106,"column":4},"end":{"line":110,"column":6}},"33":{"start":{"line":107,"column":8},"end":{"line":109,"column":12}},"34":{"start":{"line":113,"column":0},"end":{"line":124,"column":2}},"35":{"start":{"line":114,"column":4},"end":{"line":114,"column":24}},"36":{"start":{"line":115,"column":4},"end":{"line":121,"column":6}},"37":{"start":{"line":116,"column":8},"end":{"line":120,"column":11}},"38":{"start":{"line":119,"column":12},"end":{"line":119,"column":57}},"39":{"start":{"line":122,"column":4},"end":{"line":122,"column":42}},"40":{"start":{"line":123,"column":4},"end":{"line":123,"column":15}},"41":{"start":{"line":133,"column":0},"end":{"line":141,"column":2}},"42":{"start":{"line":134,"column":4},"end":{"line":138,"column":6}},"43":{"start":{"line":139,"column":4},"end":{"line":139,"column":50}},"44":{"start":{"line":140,"column":4},"end":{"line":140,"column":19}},"45":{"start":{"line":143,"column":0},"end":{"line":143,"column":26}}},"branchMap":{"1":{"line":47,"type":"cond-expr","locations":[{"start":{"line":47,"column":33},"end":{"line":47,"column":57}},{"start":{"line":47,"column":60},"end":{"line":47,"column":63}}]},"2":{"line":58,"type":"cond-expr","locations":[{"start":{"line":58,"column":53},"end":{"line":58,"column":81}},{"start":{"line":58,"column":84},"end":{"line":58,"column":90}}]},"3":{"line":58,"type":"binary-expr","locations":[{"start":{"line":58,"column":11},"end":{"line":58,"column":31}},{"start":{"line":58,"column":35},"end":{"line":58,"column":50}}]},"4":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]},"5":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":4}},{"start":{"line":90,"column":4},"end":{"line":90,"column":4}}]},"6":{"line":91,"type":"binary-expr","locations":[{"start":{"line":91,"column":24},"end":{"line":91,"column":37}},{"start":{"line":91,"column":41},"end":{"line":91,"column":43}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js","s":{"1":1,"2":1,"3":1,"4":1,"5":308,"6":308,"7":308,"8":308,"9":308,"10":1,"11":308,"12":1,"13":308,"14":308,"15":308,"16":308,"17":0,"18":0,"19":308,"20":1,"21":308,"22":308,"23":7,"24":7,"25":1},"b":{"1":[308,0],"2":[0,308],"3":[0,0]},"f":{"1":308,"2":308,"3":308,"4":308,"5":7},"fnMap":{"1":{"name":"(anonymous_1)","line":30,"loc":{"start":{"line":30,"column":16},"end":{"line":30,"column":35}}},"2":{"name":"(anonymous_2)","line":39,"loc":{"start":{"line":39,"column":44},"end":{"line":39,"column":58}}},"3":{"name":"(anonymous_3)","line":44,"loc":{"start":{"line":44,"column":41},"end":{"line":44,"column":56}}},"4":{"name":"(anonymous_4)","line":57,"loc":{"start":{"line":57,"column":36},"end":{"line":57,"column":47}}},"5":{"name":"(anonymous_5)","line":60,"loc":{"start":{"line":60,"column":11},"end":{"line":60,"column":21}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":48}},"4":{"start":{"line":30,"column":0},"end":{"line":36,"column":2}},"5":{"start":{"line":31,"column":4},"end":{"line":31,"column":29}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":39}},"7":{"start":{"line":33,"column":4},"end":{"line":33,"column":43}},"8":{"start":{"line":34,"column":4},"end":{"line":34,"column":53}},"9":{"start":{"line":35,"column":4},"end":{"line":35,"column":31}},"10":{"start":{"line":39,"column":0},"end":{"line":41,"column":2}},"11":{"start":{"line":40,"column":4},"end":{"line":40,"column":29}},"12":{"start":{"line":44,"column":0},"end":{"line":54,"column":2}},"13":{"start":{"line":45,"column":4},"end":{"line":45,"column":32}},"14":{"start":{"line":46,"column":4},"end":{"line":46,"column":26}},"15":{"start":{"line":47,"column":4},"end":{"line":47,"column":36}},"16":{"start":{"line":48,"column":4},"end":{"line":53,"column":5}},"17":{"start":{"line":49,"column":8},"end":{"line":49,"column":42}},"18":{"start":{"line":50,"column":8},"end":{"line":50,"column":37}},"19":{"start":{"line":52,"column":8},"end":{"line":52,"column":28}},"20":{"start":{"line":57,"column":0},"end":{"line":70,"column":2}},"21":{"start":{"line":58,"column":4},"end":{"line":58,"column":21}},"22":{"start":{"line":60,"column":4},"end":{"line":69,"column":6}},"23":{"start":{"line":61,"column":8},"end":{"line":66,"column":11}},"24":{"start":{"line":68,"column":8},"end":{"line":68,"column":69}},"25":{"start":{"line":72,"column":0},"end":{"line":72,"column":31}}},"branchMap":{"1":{"line":34,"type":"binary-expr","locations":[{"start":{"line":34,"column":25},"end":{"line":34,"column":46}},{"start":{"line":34,"column":50},"end":{"line":34,"column":52}}]},"2":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":48,"column":4}},{"start":{"line":48,"column":4},"end":{"line":48,"column":4}}]},"3":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":23},"end":{"line":49,"column":35}},{"start":{"line":49,"column":39},"end":{"line":49,"column":41}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js","s":{"1":1,"2":1,"3":1,"4":10,"5":10,"6":10,"7":1,"8":10,"9":10,"10":1,"11":10,"12":10,"13":4,"14":10,"15":4,"16":10,"17":0,"18":1,"19":10,"20":10,"21":5,"22":5,"23":5,"24":5,"25":5,"26":1,"27":7,"28":7,"29":1,"30":10,"31":10,"32":10,"33":10,"34":1,"35":6,"36":1,"37":10,"38":10,"39":10,"40":0,"41":10,"42":0,"43":0,"44":0,"45":0,"46":0,"47":10,"48":10,"49":9,"50":9,"51":9,"52":7,"53":0,"54":10,"55":0,"56":1},"b":{"1":[10,0],"2":[4,6],"3":[4,6],"4":[0,10],"5":[5,5],"6":[10,6],"7":[5,0],"8":[7,0],"9":[7,7,7],"10":[0,10],"11":[0,10],"12":[10,5,5,0],"13":[0,0],"14":[10,0],"15":[9,0],"16":[9,9]},"f":{"1":10,"2":10,"3":10,"4":10,"5":5,"6":7,"7":10,"8":6,"9":10,"10":0,"11":0,"12":9,"13":7},"fnMap":{"1":{"name":"(anonymous_1)","line":28,"loc":{"start":{"line":28,"column":15},"end":{"line":28,"column":34}}},"2":{"name":"(anonymous_2)","line":49,"loc":{"start":{"line":49,"column":42},"end":{"line":49,"column":58}}},"3":{"name":"(anonymous_3)","line":63,"loc":{"start":{"line":63,"column":39},"end":{"line":63,"column":55}}},"4":{"name":"(anonymous_4)","line":85,"loc":{"start":{"line":85,"column":38},"end":{"line":85,"column":54}}},"5":{"name":"(anonymous_5)","line":92,"loc":{"start":{"line":92,"column":56},"end":{"line":92,"column":84}}},"6":{"name":"(anonymous_6)","line":108,"loc":{"start":{"line":108,"column":39},"end":{"line":108,"column":57}}},"7":{"name":"(anonymous_7)","line":121,"loc":{"start":{"line":121,"column":36},"end":{"line":121,"column":52}}},"8":{"name":"(anonymous_8)","line":138,"loc":{"start":{"line":138,"column":37},"end":{"line":138,"column":56}}},"9":{"name":"(anonymous_9)","line":148,"loc":{"start":{"line":148,"column":35},"end":{"line":148,"column":46}}},"10":{"name":"(anonymous_10)","line":162,"loc":{"start":{"line":162,"column":11},"end":{"line":162,"column":32}}},"11":{"name":"(anonymous_11)","line":164,"loc":{"start":{"line":164,"column":29},"end":{"line":164,"column":42}}},"12":{"name":"(anonymous_12)","line":176,"loc":{"start":{"line":176,"column":55},"end":{"line":176,"column":78}}},"13":{"name":"(anonymous_13)","line":181,"loc":{"start":{"line":181,"column":78},"end":{"line":181,"column":99}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"3":{"start":{"line":28,"column":0},"end":{"line":38,"column":2}},"4":{"start":{"line":29,"column":4},"end":{"line":29,"column":19}},"5":{"start":{"line":30,"column":4},"end":{"line":30,"column":25}},"6":{"start":{"line":32,"column":4},"end":{"line":37,"column":5}},"7":{"start":{"line":49,"column":0},"end":{"line":53,"column":2}},"8":{"start":{"line":50,"column":4},"end":{"line":52,"column":5}},"9":{"start":{"line":51,"column":8},"end":{"line":51,"column":26}},"10":{"start":{"line":63,"column":0},"end":{"line":75,"column":2}},"11":{"start":{"line":64,"column":4},"end":{"line":64,"column":49}},"12":{"start":{"line":66,"column":4},"end":{"line":67,"column":26}},"13":{"start":{"line":67,"column":8},"end":{"line":67,"column":26}},"14":{"start":{"line":69,"column":4},"end":{"line":70,"column":32}},"15":{"start":{"line":70,"column":8},"end":{"line":70,"column":32}},"16":{"start":{"line":72,"column":4},"end":{"line":74,"column":5}},"17":{"start":{"line":73,"column":8},"end":{"line":73,"column":45}},"18":{"start":{"line":85,"column":0},"end":{"line":98,"column":2}},"19":{"start":{"line":86,"column":4},"end":{"line":86,"column":49}},"20":{"start":{"line":88,"column":4},"end":{"line":90,"column":5}},"21":{"start":{"line":89,"column":8},"end":{"line":89,"column":20}},"22":{"start":{"line":92,"column":4},"end":{"line":94,"column":7}},"23":{"start":{"line":93,"column":8},"end":{"line":93,"column":68}},"24":{"start":{"line":95,"column":4},"end":{"line":95,"column":35}},"25":{"start":{"line":97,"column":4},"end":{"line":97,"column":25}},"26":{"start":{"line":108,"column":0},"end":{"line":112,"column":2}},"27":{"start":{"line":109,"column":4},"end":{"line":109,"column":49}},"28":{"start":{"line":111,"column":4},"end":{"line":111,"column":116}},"29":{"start":{"line":121,"column":0},"end":{"line":130,"column":2}},"30":{"start":{"line":122,"column":4},"end":{"line":122,"column":48}},"31":{"start":{"line":123,"column":4},"end":{"line":123,"column":41}},"32":{"start":{"line":124,"column":4},"end":{"line":124,"column":31}},"33":{"start":{"line":126,"column":4},"end":{"line":129,"column":6}},"34":{"start":{"line":138,"column":0},"end":{"line":140,"column":2}},"35":{"start":{"line":139,"column":4},"end":{"line":139,"column":77}},"36":{"start":{"line":148,"column":0},"end":{"line":194,"column":2}},"37":{"start":{"line":149,"column":4},"end":{"line":149,"column":21}},"38":{"start":{"line":150,"column":4},"end":{"line":150,"column":73}},"39":{"start":{"line":153,"column":4},"end":{"line":154,"column":117}},"40":{"start":{"line":154,"column":8},"end":{"line":154,"column":117}},"41":{"start":{"line":158,"column":4},"end":{"line":171,"column":5}},"42":{"start":{"line":159,"column":8},"end":{"line":170,"column":11}},"43":{"start":{"line":163,"column":12},"end":{"line":169,"column":13}},"44":{"start":{"line":164,"column":16},"end":{"line":166,"column":19}},"45":{"start":{"line":165,"column":20},"end":{"line":165,"column":67}},"46":{"start":{"line":168,"column":16},"end":{"line":168,"column":36}},"47":{"start":{"line":174,"column":4},"end":{"line":193,"column":83}},"48":{"start":{"line":176,"column":8},"end":{"line":187,"column":11}},"49":{"start":{"line":177,"column":12},"end":{"line":186,"column":13}},"50":{"start":{"line":178,"column":16},"end":{"line":178,"column":34}},"51":{"start":{"line":181,"column":16},"end":{"line":183,"column":19}},"52":{"start":{"line":182,"column":20},"end":{"line":182,"column":76}},"53":{"start":{"line":185,"column":16},"end":{"line":185,"column":36}},"54":{"start":{"line":190,"column":8},"end":{"line":190,"column":20}},"55":{"start":{"line":193,"column":8},"end":{"line":193,"column":83}},"56":{"start":{"line":196,"column":0},"end":{"line":196,"column":30}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"2":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":4},"end":{"line":66,"column":4}},{"start":{"line":66,"column":4},"end":{"line":66,"column":4}}]},"3":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]},"4":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":4},"end":{"line":72,"column":4}},{"start":{"line":72,"column":4},"end":{"line":72,"column":4}}]},"5":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":4}},{"start":{"line":88,"column":4},"end":{"line":88,"column":4}}]},"6":{"line":88,"type":"binary-expr","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":21}},{"start":{"line":88,"column":25},"end":{"line":88,"column":53}}]},"7":{"line":93,"type":"cond-expr","locations":[{"start":{"line":93,"column":27},"end":{"line":93,"column":51}},{"start":{"line":93,"column":54},"end":{"line":93,"column":67}}]},"8":{"line":111,"type":"cond-expr","locations":[{"start":{"line":111,"column":70},"end":{"line":111,"column":106}},{"start":{"line":111,"column":109},"end":{"line":111,"column":115}}]},"9":{"line":111,"type":"binary-expr","locations":[{"start":{"line":111,"column":12},"end":{"line":111,"column":24}},{"start":{"line":111,"column":28},"end":{"line":111,"column":56}},{"start":{"line":111,"column":60},"end":{"line":111,"column":66}}]},"10":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":4}},{"start":{"line":153,"column":4},"end":{"line":153,"column":4}}]},"11":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":4}},{"start":{"line":158,"column":4},"end":{"line":158,"column":4}}]},"12":{"line":158,"type":"binary-expr","locations":[{"start":{"line":158,"column":7},"end":{"line":158,"column":35}},{"start":{"line":158,"column":39},"end":{"line":158,"column":72}},{"start":{"line":158,"column":76},"end":{"line":158,"column":121}},{"start":{"line":158,"column":125},"end":{"line":158,"column":162}}]},"13":{"line":163,"type":"if","locations":[{"start":{"line":163,"column":12},"end":{"line":163,"column":12}},{"start":{"line":163,"column":12},"end":{"line":163,"column":12}}]},"14":{"line":174,"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":174,"column":4}},{"start":{"line":174,"column":4},"end":{"line":174,"column":4}}]},"15":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":12},"end":{"line":177,"column":12}},{"start":{"line":177,"column":12},"end":{"line":177,"column":12}}]},"16":{"line":177,"type":"binary-expr","locations":[{"start":{"line":177,"column":15},"end":{"line":177,"column":19}},{"start":{"line":177,"column":23},"end":{"line":177,"column":29}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":26,"13":91,"14":68,"15":68,"16":1,"17":26,"18":91,"19":26,"20":26,"21":26,"22":22,"23":22,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":1,"52":27,"53":27,"54":27,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":0,"71":1,"72":1,"73":0,"74":0,"75":0,"76":0,"77":1,"78":1,"79":26,"80":26,"81":26,"82":26,"83":0,"84":26,"85":1,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":1,"95":27,"96":27,"97":27,"98":27,"99":1},"b":{"1":[1,0],"2":[1,1],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,0],"16":[1,1],"17":[1,0],"18":[0,1],"19":[0,26],"20":[0,0],"21":[0,0]},"f":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":26,"7":91,"8":68,"9":68,"10":26,"11":91,"12":22,"13":0,"14":0,"15":0,"16":0,"17":27,"18":1,"19":1,"20":26,"21":0,"22":27},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":30},"end":{"line":35,"column":53}}},"2":{"name":"(anonymous_2)","line":36,"loc":{"start":{"line":36,"column":22},"end":{"line":36,"column":38}}},"3":{"name":"(anonymous_3)","line":38,"loc":{"start":{"line":38,"column":11},"end":{"line":38,"column":27}}},"4":{"name":"(anonymous_4)","line":39,"loc":{"start":{"line":39,"column":31},"end":{"line":39,"column":48}}},"5":{"name":"(anonymous_5)","line":42,"loc":{"start":{"line":42,"column":11},"end":{"line":42,"column":28}}},"6":{"name":"(anonymous_6)","line":54,"loc":{"start":{"line":54,"column":29},"end":{"line":54,"column":49}}},"7":{"name":"(anonymous_7)","line":55,"loc":{"start":{"line":55,"column":24},"end":{"line":55,"column":40}}},"8":{"name":"(anonymous_8)","line":57,"loc":{"start":{"line":57,"column":11},"end":{"line":57,"column":27}}},"9":{"name":"(anonymous_9)","line":59,"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":28}}},"10":{"name":"(anonymous_10)","line":71,"loc":{"start":{"line":71,"column":26},"end":{"line":71,"column":46}}},"11":{"name":"(anonymous_11)","line":72,"loc":{"start":{"line":72,"column":37},"end":{"line":72,"column":53}}},"12":{"name":"(anonymous_12)","line":79,"loc":{"start":{"line":79,"column":15},"end":{"line":79,"column":31}}},"13":{"name":"(anonymous_13)","line":94,"loc":{"start":{"line":94,"column":30},"end":{"line":94,"column":58}}},"14":{"name":"(anonymous_14)","line":99,"loc":{"start":{"line":99,"column":48},"end":{"line":99,"column":59}}},"15":{"name":"(anonymous_15)","line":117,"loc":{"start":{"line":117,"column":78},"end":{"line":117,"column":98}}},"16":{"name":"(anonymous_16)","line":120,"loc":{"start":{"line":120,"column":71},"end":{"line":120,"column":88}}},"17":{"name":"(anonymous_17)","line":163,"loc":{"start":{"line":163,"column":22},"end":{"line":163,"column":42}}},"18":{"name":"(anonymous_18)","line":191,"loc":{"start":{"line":191,"column":32},"end":{"line":191,"column":44}}},"19":{"name":"(anonymous_19)","line":214,"loc":{"start":{"line":214,"column":42},"end":{"line":214,"column":63}}},"20":{"name":"(anonymous_20)","line":246,"loc":{"start":{"line":246,"column":31},"end":{"line":246,"column":60}}},"21":{"name":"(anonymous_21)","line":265,"loc":{"start":{"line":265,"column":36},"end":{"line":265,"column":48}}},"22":{"name":"(anonymous_22)","line":287,"loc":{"start":{"line":287,"column":15},"end":{"line":287,"column":44}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":41}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":39}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":45}},"5":{"start":{"line":35,"column":0},"end":{"line":45,"column":2}},"6":{"start":{"line":36,"column":4},"end":{"line":44,"column":16}},"7":{"start":{"line":37,"column":8},"end":{"line":37,"column":83}},"8":{"start":{"line":39,"column":8},"end":{"line":41,"column":11}},"9":{"start":{"line":40,"column":12},"end":{"line":40,"column":30}},"10":{"start":{"line":43,"column":8},"end":{"line":43,"column":49}},"11":{"start":{"line":54,"column":0},"end":{"line":62,"column":2}},"12":{"start":{"line":55,"column":4},"end":{"line":61,"column":7}},"13":{"start":{"line":56,"column":8},"end":{"line":56,"column":40}},"14":{"start":{"line":58,"column":8},"end":{"line":58,"column":75}},"15":{"start":{"line":60,"column":8},"end":{"line":60,"column":37}},"16":{"start":{"line":71,"column":0},"end":{"line":83,"column":2}},"17":{"start":{"line":72,"column":4},"end":{"line":74,"column":7}},"18":{"start":{"line":73,"column":8},"end":{"line":73,"column":37}},"19":{"start":{"line":76,"column":4},"end":{"line":76,"column":101}},"20":{"start":{"line":77,"column":4},"end":{"line":77,"column":41}},"21":{"start":{"line":79,"column":4},"end":{"line":82,"column":7}},"22":{"start":{"line":80,"column":8},"end":{"line":80,"column":90}},"23":{"start":{"line":81,"column":8},"end":{"line":81,"column":38}},"24":{"start":{"line":94,"column":0},"end":{"line":155,"column":2}},"25":{"start":{"line":95,"column":4},"end":{"line":96,"column":30}},"26":{"start":{"line":99,"column":4},"end":{"line":154,"column":7}},"27":{"start":{"line":100,"column":8},"end":{"line":153,"column":9}},"28":{"start":{"line":101,"column":12},"end":{"line":101,"column":20}},"29":{"start":{"line":104,"column":12},"end":{"line":152,"column":13}},"30":{"start":{"line":106,"column":16},"end":{"line":106,"column":38}},"31":{"start":{"line":107,"column":16},"end":{"line":107,"column":37}},"32":{"start":{"line":109,"column":16},"end":{"line":112,"column":95}},"33":{"start":{"line":110,"column":20},"end":{"line":110,"column":99}},"34":{"start":{"line":112,"column":20},"end":{"line":112,"column":95}},"35":{"start":{"line":117,"column":16},"end":{"line":151,"column":19}},"36":{"start":{"line":118,"column":20},"end":{"line":150,"column":21}},"37":{"start":{"line":120,"column":24},"end":{"line":149,"column":27}},"38":{"start":{"line":123,"column":28},"end":{"line":124,"column":39}},"39":{"start":{"line":124,"column":32},"end":{"line":124,"column":39}},"40":{"start":{"line":126,"column":28},"end":{"line":126,"column":50}},"41":{"start":{"line":127,"column":28},"end":{"line":127,"column":49}},"42":{"start":{"line":129,"column":28},"end":{"line":148,"column":29}},"43":{"start":{"line":133,"column":32},"end":{"line":133,"column":75}},"44":{"start":{"line":136,"column":32},"end":{"line":136,"column":65}},"45":{"start":{"line":137,"column":32},"end":{"line":137,"column":62}},"46":{"start":{"line":140,"column":32},"end":{"line":141,"column":61}},"47":{"start":{"line":141,"column":36},"end":{"line":141,"column":61}},"48":{"start":{"line":144,"column":32},"end":{"line":147,"column":124}},"49":{"start":{"line":145,"column":36},"end":{"line":145,"column":128}},"50":{"start":{"line":147,"column":36},"end":{"line":147,"column":124}},"51":{"start":{"line":163,"column":0},"end":{"line":168,"column":2}},"52":{"start":{"line":164,"column":4},"end":{"line":164,"column":19}},"53":{"start":{"line":165,"column":4},"end":{"line":165,"column":19}},"54":{"start":{"line":167,"column":4},"end":{"line":167,"column":47}},"55":{"start":{"line":191,"column":0},"end":{"line":235,"column":2}},"56":{"start":{"line":192,"column":4},"end":{"line":192,"column":52}},"57":{"start":{"line":195,"column":4},"end":{"line":195,"column":21}},"58":{"start":{"line":196,"column":4},"end":{"line":196,"column":17}},"59":{"start":{"line":198,"column":4},"end":{"line":198,"column":53}},"60":{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},"61":{"start":{"line":200,"column":8},"end":{"line":200,"column":30}},"62":{"start":{"line":203,"column":4},"end":{"line":203,"column":37}},"63":{"start":{"line":204,"column":4},"end":{"line":206,"column":5}},"64":{"start":{"line":205,"column":8},"end":{"line":205,"column":29}},"65":{"start":{"line":208,"column":4},"end":{"line":208,"column":56}},"66":{"start":{"line":209,"column":4},"end":{"line":209,"column":26}},"67":{"start":{"line":211,"column":4},"end":{"line":232,"column":5}},"68":{"start":{"line":214,"column":8},"end":{"line":226,"column":11}},"69":{"start":{"line":215,"column":12},"end":{"line":225,"column":13}},"70":{"start":{"line":216,"column":16},"end":{"line":216,"column":30}},"71":{"start":{"line":219,"column":16},"end":{"line":219,"column":48}},"72":{"start":{"line":222,"column":16},"end":{"line":222,"column":41}},"73":{"start":{"line":224,"column":16},"end":{"line":224,"column":60}},"74":{"start":{"line":228,"column":8},"end":{"line":228,"column":53}},"75":{"start":{"line":230,"column":8},"end":{"line":230,"column":40}},"76":{"start":{"line":231,"column":8},"end":{"line":231,"column":42}},"77":{"start":{"line":234,"column":4},"end":{"line":234,"column":20}},"78":{"start":{"line":246,"column":0},"end":{"line":258,"column":2}},"79":{"start":{"line":247,"column":4},"end":{"line":247,"column":61}},"80":{"start":{"line":251,"column":4},"end":{"line":251,"column":37}},"81":{"start":{"line":252,"column":4},"end":{"line":252,"column":34}},"82":{"start":{"line":254,"column":4},"end":{"line":256,"column":5}},"83":{"start":{"line":255,"column":8},"end":{"line":255,"column":33}},"84":{"start":{"line":257,"column":4},"end":{"line":257,"column":20}},"85":{"start":{"line":265,"column":0},"end":{"line":278,"column":2}},"86":{"start":{"line":266,"column":4},"end":{"line":266,"column":21}},"87":{"start":{"line":267,"column":4},"end":{"line":267,"column":53}},"88":{"start":{"line":269,"column":4},"end":{"line":269,"column":37}},"89":{"start":{"line":270,"column":4},"end":{"line":272,"column":5}},"90":{"start":{"line":271,"column":8},"end":{"line":271,"column":29}},"91":{"start":{"line":274,"column":4},"end":{"line":274,"column":56}},"92":{"start":{"line":275,"column":4},"end":{"line":275,"column":26}},"93":{"start":{"line":277,"column":4},"end":{"line":277,"column":24}},"94":{"start":{"line":287,"column":0},"end":{"line":292,"column":2}},"95":{"start":{"line":288,"column":4},"end":{"line":288,"column":20}},"96":{"start":{"line":289,"column":4},"end":{"line":289,"column":32}},"97":{"start":{"line":290,"column":4},"end":{"line":290,"column":27}},"98":{"start":{"line":291,"column":4},"end":{"line":291,"column":19}},"99":{"start":{"line":294,"column":0},"end":{"line":294,"column":33}}},"branchMap":{"1":{"line":36,"type":"binary-expr","locations":[{"start":{"line":36,"column":11},"end":{"line":44,"column":9}},{"start":{"line":44,"column":13},"end":{"line":44,"column":15}}]},"2":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":15},"end":{"line":37,"column":42}},{"start":{"line":37,"column":46},"end":{"line":37,"column":82}}]},"3":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":8},"end":{"line":100,"column":8}},{"start":{"line":100,"column":8},"end":{"line":100,"column":8}}]},"4":{"line":100,"type":"binary-expr","locations":[{"start":{"line":100,"column":12},"end":{"line":100,"column":14}},{"start":{"line":100,"column":18},"end":{"line":100,"column":32}}]},"5":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":12},"end":{"line":104,"column":12}},{"start":{"line":104,"column":12},"end":{"line":104,"column":12}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":16},"end":{"line":109,"column":16}},{"start":{"line":109,"column":16},"end":{"line":109,"column":16}}]},"7":{"line":118,"type":"if","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":20}},{"start":{"line":118,"column":20},"end":{"line":118,"column":20}}]},"8":{"line":118,"type":"binary-expr","locations":[{"start":{"line":118,"column":23},"end":{"line":118,"column":30}},{"start":{"line":118,"column":34},"end":{"line":118,"column":48}}]},"9":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":28},"end":{"line":123,"column":28}},{"start":{"line":123,"column":28},"end":{"line":123,"column":28}}]},"10":{"line":123,"type":"binary-expr","locations":[{"start":{"line":123,"column":31},"end":{"line":123,"column":44}},{"start":{"line":123,"column":48},"end":{"line":123,"column":53}}]},"11":{"line":129,"type":"if","locations":[{"start":{"line":129,"column":28},"end":{"line":129,"column":28}},{"start":{"line":129,"column":28},"end":{"line":129,"column":28}}]},"12":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":32},"end":{"line":140,"column":32}},{"start":{"line":140,"column":32},"end":{"line":140,"column":32}}]},"13":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":32},"end":{"line":144,"column":32}},{"start":{"line":144,"column":32},"end":{"line":144,"column":32}}]},"14":{"line":199,"type":"if","locations":[{"start":{"line":199,"column":4},"end":{"line":199,"column":4}},{"start":{"line":199,"column":4},"end":{"line":199,"column":4}}]},"15":{"line":204,"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":4}},{"start":{"line":204,"column":4},"end":{"line":204,"column":4}}]},"16":{"line":204,"type":"binary-expr","locations":[{"start":{"line":204,"column":8},"end":{"line":204,"column":28}},{"start":{"line":204,"column":32},"end":{"line":204,"column":52}}]},"17":{"line":211,"type":"if","locations":[{"start":{"line":211,"column":4},"end":{"line":211,"column":4}},{"start":{"line":211,"column":4},"end":{"line":211,"column":4}}]},"18":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":12},"end":{"line":215,"column":12}},{"start":{"line":215,"column":12},"end":{"line":215,"column":12}}]},"19":{"line":254,"type":"if","locations":[{"start":{"line":254,"column":4},"end":{"line":254,"column":4}},{"start":{"line":254,"column":4},"end":{"line":254,"column":4}}]},"20":{"line":270,"type":"if","locations":[{"start":{"line":270,"column":4},"end":{"line":270,"column":4}},{"start":{"line":270,"column":4},"end":{"line":270,"column":4}}]},"21":{"line":270,"type":"binary-expr","locations":[{"start":{"line":270,"column":8},"end":{"line":270,"column":28}},{"start":{"line":270,"column":32},"end":{"line":270,"column":52}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":267,"15":2403,"16":267,"17":0,"18":267,"19":1,"20":64,"21":1,"22":107,"23":107,"24":135,"25":107,"26":135,"27":135,"28":135,"29":107,"30":107,"31":1,"32":107,"33":107,"34":107,"35":270,"36":107,"37":135,"38":43,"39":43,"40":43,"41":92,"42":107,"43":135,"44":43,"45":43,"46":43,"47":107,"48":1,"49":287,"50":287,"51":42,"52":42,"53":42,"54":42,"55":42,"56":42,"57":42,"58":0,"59":0,"60":0,"61":42,"62":42,"63":82,"64":82,"65":42,"66":245,"67":13,"68":13,"69":13,"70":13,"71":13,"72":1,"73":1,"74":1,"75":2,"76":2,"77":13,"78":13,"79":27,"80":27,"81":13,"82":232,"83":1,"84":68,"85":1,"86":106,"87":106,"88":106,"89":132,"90":1,"91":106,"92":132,"93":106,"94":29,"95":106,"96":132,"97":132,"98":1,"99":213,"100":213,"101":267,"102":1,"103":1},"b":{"1":[0,267],"2":[270,230],"3":[43,92],"4":[43,92],"5":[42,245],"6":[0,42],"7":[0,0],"8":[13,232],"9":[1,12],"10":[2,1],"11":[2,1]},"f":{"1":1,"2":267,"3":2403,"4":64,"5":107,"6":135,"7":135,"8":107,"9":270,"10":135,"11":135,"12":287,"13":42,"14":42,"15":42,"16":13,"17":1,"18":13,"19":68,"20":106,"21":132,"22":106,"23":132,"24":132,"25":213,"26":267},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":20},"end":{"line":38,"column":37}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":39},"end":{"line":50,"column":55}}},"3":{"name":"(anonymous_3)","line":51,"loc":{"start":{"line":51,"column":42},"end":{"line":51,"column":55}}},"4":{"name":"(anonymous_4)","line":70,"loc":{"start":{"line":70,"column":38},"end":{"line":70,"column":61}}},"5":{"name":"(anonymous_5)","line":82,"loc":{"start":{"line":82,"column":39},"end":{"line":82,"column":64}}},"6":{"name":"(anonymous_6)","line":85,"loc":{"start":{"line":85,"column":37},"end":{"line":85,"column":68}}},"7":{"name":"(anonymous_7)","line":89,"loc":{"start":{"line":89,"column":45},"end":{"line":89,"column":81}}},"8":{"name":"(anonymous_8)","line":100,"loc":{"start":{"line":100,"column":48},"end":{"line":100,"column":105}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":20},"end":{"line":104,"column":33}}},"10":{"name":"(anonymous_10)","line":108,"loc":{"start":{"line":108,"column":18},"end":{"line":108,"column":37}}},"11":{"name":"(anonymous_11)","line":121,"loc":{"start":{"line":121,"column":18},"end":{"line":121,"column":37}}},"12":{"name":"(anonymous_12)","line":132,"loc":{"start":{"line":132,"column":43},"end":{"line":132,"column":90}}},"13":{"name":"(anonymous_13)","line":135,"loc":{"start":{"line":135,"column":16},"end":{"line":135,"column":28}}},"14":{"name":"(anonymous_14)","line":141,"loc":{"start":{"line":141,"column":13},"end":{"line":141,"column":25}}},"15":{"name":"(anonymous_15)","line":152,"loc":{"start":{"line":152,"column":13},"end":{"line":152,"column":25}}},"16":{"name":"(anonymous_16)","line":163,"loc":{"start":{"line":163,"column":16},"end":{"line":163,"column":28}}},"17":{"name":"(anonymous_17)","line":170,"loc":{"start":{"line":170,"column":17},"end":{"line":170,"column":29}}},"18":{"name":"(anonymous_18)","line":180,"loc":{"start":{"line":180,"column":13},"end":{"line":180,"column":25}}},"19":{"name":"(anonymous_19)","line":202,"loc":{"start":{"line":202,"column":38},"end":{"line":202,"column":61}}},"20":{"name":"(anonymous_20)","line":214,"loc":{"start":{"line":214,"column":39},"end":{"line":214,"column":63}}},"21":{"name":"(anonymous_21)","line":218,"loc":{"start":{"line":218,"column":29},"end":{"line":218,"column":60}}},"22":{"name":"(anonymous_22)","line":223,"loc":{"start":{"line":223,"column":37},"end":{"line":223,"column":69}}},"23":{"name":"(anonymous_23)","line":224,"loc":{"start":{"line":224,"column":37},"end":{"line":224,"column":68}}},"24":{"name":"(anonymous_24)","line":233,"loc":{"start":{"line":233,"column":23},"end":{"line":233,"column":48}}},"25":{"name":"(anonymous_25)","line":240,"loc":{"start":{"line":240,"column":43},"end":{"line":240,"column":60}}},"26":{"name":"(anonymous_26)","line":242,"loc":{"start":{"line":242,"column":21},"end":{"line":242,"column":37}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":32}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":47}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":41}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":39}},"5":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"6":{"start":{"line":29,"column":0},"end":{"line":29,"column":57}},"7":{"start":{"line":30,"column":0},"end":{"line":30,"column":45}},"8":{"start":{"line":31,"column":0},"end":{"line":31,"column":41}},"9":{"start":{"line":32,"column":0},"end":{"line":32,"column":43}},"10":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"11":{"start":{"line":38,"column":0},"end":{"line":40,"column":2}},"12":{"start":{"line":39,"column":4},"end":{"line":39,"column":24}},"13":{"start":{"line":50,"column":0},"end":{"line":60,"column":2}},"14":{"start":{"line":51,"column":4},"end":{"line":53,"column":10}},"15":{"start":{"line":52,"column":8},"end":{"line":52,"column":30}},"16":{"start":{"line":55,"column":4},"end":{"line":57,"column":5}},"17":{"start":{"line":56,"column":8},"end":{"line":56,"column":55}},"18":{"start":{"line":59,"column":4},"end":{"line":59,"column":24}},"19":{"start":{"line":70,"column":0},"end":{"line":72,"column":2}},"20":{"start":{"line":71,"column":4},"end":{"line":71,"column":46}},"21":{"start":{"line":82,"column":0},"end":{"line":98,"column":2}},"22":{"start":{"line":83,"column":4},"end":{"line":83,"column":53}},"23":{"start":{"line":85,"column":4},"end":{"line":87,"column":7}},"24":{"start":{"line":86,"column":8},"end":{"line":86,"column":64}},"25":{"start":{"line":89,"column":4},"end":{"line":93,"column":10}},"26":{"start":{"line":90,"column":8},"end":{"line":90,"column":75}},"27":{"start":{"line":91,"column":8},"end":{"line":91,"column":84}},"28":{"start":{"line":92,"column":8},"end":{"line":92,"column":45}},"29":{"start":{"line":95,"column":4},"end":{"line":95,"column":91}},"30":{"start":{"line":97,"column":4},"end":{"line":97,"column":18}},"31":{"start":{"line":100,"column":0},"end":{"line":129,"column":2}},"32":{"start":{"line":101,"column":4},"end":{"line":101,"column":20}},"33":{"start":{"line":102,"column":4},"end":{"line":102,"column":20}},"34":{"start":{"line":104,"column":4},"end":{"line":106,"column":6}},"35":{"start":{"line":105,"column":7},"end":{"line":105,"column":100}},"36":{"start":{"line":108,"column":4},"end":{"line":119,"column":7}},"37":{"start":{"line":109,"column":8},"end":{"line":116,"column":9}},"38":{"start":{"line":110,"column":12},"end":{"line":110,"column":63}},"39":{"start":{"line":111,"column":12},"end":{"line":111,"column":98}},"40":{"start":{"line":112,"column":12},"end":{"line":112,"column":42}},"41":{"start":{"line":115,"column":12},"end":{"line":115,"column":100}},"42":{"start":{"line":121,"column":4},"end":{"line":127,"column":7}},"43":{"start":{"line":122,"column":8},"end":{"line":126,"column":9}},"44":{"start":{"line":123,"column":12},"end":{"line":123,"column":98}},"45":{"start":{"line":124,"column":12},"end":{"line":124,"column":42}},"46":{"start":{"line":125,"column":12},"end":{"line":125,"column":24}},"47":{"start":{"line":128,"column":4},"end":{"line":128,"column":18}},"48":{"start":{"line":132,"column":0},"end":{"line":192,"column":2}},"49":{"start":{"line":133,"column":4},"end":{"line":133,"column":20}},"50":{"start":{"line":134,"column":4},"end":{"line":189,"column":5}},"51":{"start":{"line":135,"column":8},"end":{"line":160,"column":13}},"52":{"start":{"line":137,"column":12},"end":{"line":137,"column":59}},"53":{"start":{"line":138,"column":12},"end":{"line":138,"column":83}},"54":{"start":{"line":139,"column":12},"end":{"line":139,"column":36}},"55":{"start":{"line":141,"column":12},"end":{"line":149,"column":17}},"56":{"start":{"line":142,"column":16},"end":{"line":142,"column":39}},"57":{"start":{"line":143,"column":16},"end":{"line":148,"column":17}},"58":{"start":{"line":144,"column":20},"end":{"line":147,"column":21}},"59":{"start":{"line":145,"column":24},"end":{"line":145,"column":68}},"60":{"start":{"line":146,"column":24},"end":{"line":146,"column":119}},"61":{"start":{"line":152,"column":12},"end":{"line":157,"column":17}},"62":{"start":{"line":153,"column":16},"end":{"line":156,"column":17}},"63":{"start":{"line":154,"column":20},"end":{"line":154,"column":54}},"64":{"start":{"line":155,"column":20},"end":{"line":155,"column":122}},"65":{"start":{"line":159,"column":12},"end":{"line":159,"column":26}},"66":{"start":{"line":162,"column":11},"end":{"line":189,"column":5}},"67":{"start":{"line":163,"column":8},"end":{"line":188,"column":13}},"68":{"start":{"line":164,"column":12},"end":{"line":164,"column":59}},"69":{"start":{"line":165,"column":12},"end":{"line":165,"column":83}},"70":{"start":{"line":166,"column":12},"end":{"line":166,"column":28}},"71":{"start":{"line":169,"column":12},"end":{"line":178,"column":13}},"72":{"start":{"line":170,"column":16},"end":{"line":177,"column":21}},"73":{"start":{"line":171,"column":20},"end":{"line":171,"column":43}},"74":{"start":{"line":172,"column":20},"end":{"line":176,"column":21}},"75":{"start":{"line":174,"column":24},"end":{"line":174,"column":74}},"76":{"start":{"line":175,"column":24},"end":{"line":175,"column":119}},"77":{"start":{"line":180,"column":12},"end":{"line":185,"column":17}},"78":{"start":{"line":181,"column":16},"end":{"line":184,"column":17}},"79":{"start":{"line":182,"column":20},"end":{"line":182,"column":54}},"80":{"start":{"line":183,"column":20},"end":{"line":183,"column":117}},"81":{"start":{"line":187,"column":12},"end":{"line":187,"column":26}},"82":{"start":{"line":191,"column":4},"end":{"line":191,"column":19}},"83":{"start":{"line":202,"column":0},"end":{"line":204,"column":2}},"84":{"start":{"line":203,"column":4},"end":{"line":203,"column":47}},"85":{"start":{"line":214,"column":0},"end":{"line":221,"column":2}},"86":{"start":{"line":215,"column":4},"end":{"line":215,"column":53}},"87":{"start":{"line":216,"column":4},"end":{"line":216,"column":56}},"88":{"start":{"line":218,"column":4},"end":{"line":220,"column":7}},"89":{"start":{"line":219,"column":8},"end":{"line":219,"column":80}},"90":{"start":{"line":223,"column":0},"end":{"line":238,"column":2}},"91":{"start":{"line":224,"column":4},"end":{"line":226,"column":7}},"92":{"start":{"line":225,"column":8},"end":{"line":225,"column":59}},"93":{"start":{"line":228,"column":4},"end":{"line":231,"column":5}},"94":{"start":{"line":230,"column":8},"end":{"line":230,"column":37}},"95":{"start":{"line":233,"column":4},"end":{"line":237,"column":7}},"96":{"start":{"line":235,"column":8},"end":{"line":235,"column":83}},"97":{"start":{"line":236,"column":8},"end":{"line":236,"column":41}},"98":{"start":{"line":240,"column":0},"end":{"line":245,"column":2}},"99":{"start":{"line":241,"column":4},"end":{"line":241,"column":20}},"100":{"start":{"line":242,"column":4},"end":{"line":244,"column":7}},"101":{"start":{"line":243,"column":8},"end":{"line":243,"column":39}},"102":{"start":{"line":247,"column":0},"end":{"line":257,"column":3}},"103":{"start":{"line":259,"column":0},"end":{"line":259,"column":23}}},"branchMap":{"1":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":55,"column":4}},{"start":{"line":55,"column":4},"end":{"line":55,"column":4}}]},"2":{"line":105,"type":"binary-expr","locations":[{"start":{"line":105,"column":14},"end":{"line":105,"column":55}},{"start":{"line":105,"column":59},"end":{"line":105,"column":99}}]},"3":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"4":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":8},"end":{"line":122,"column":8}},{"start":{"line":122,"column":8},"end":{"line":122,"column":8}}]},"5":{"line":134,"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":134,"column":4}},{"start":{"line":134,"column":4},"end":{"line":134,"column":4}}]},"6":{"line":143,"type":"if","locations":[{"start":{"line":143,"column":16},"end":{"line":143,"column":16}},{"start":{"line":143,"column":16},"end":{"line":143,"column":16}}]},"7":{"line":145,"type":"binary-expr","locations":[{"start":{"line":145,"column":42},"end":{"line":145,"column":62}},{"start":{"line":145,"column":66},"end":{"line":145,"column":67}}]},"8":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":11},"end":{"line":162,"column":11}},{"start":{"line":162,"column":11},"end":{"line":162,"column":11}}]},"9":{"line":169,"type":"if","locations":[{"start":{"line":169,"column":12},"end":{"line":169,"column":12}},{"start":{"line":169,"column":12},"end":{"line":169,"column":12}}]},"10":{"line":174,"type":"binary-expr","locations":[{"start":{"line":174,"column":42},"end":{"line":174,"column":68}},{"start":{"line":174,"column":72},"end":{"line":174,"column":73}}]},"11":{"line":174,"type":"binary-expr","locations":[{"start":{"line":174,"column":44},"end":{"line":174,"column":58}},{"start":{"line":174,"column":62},"end":{"line":174,"column":64}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":205,"7":205,"8":205,"9":1,"10":15,"11":15,"12":15,"13":15,"14":1,"15":9,"16":9,"17":9,"18":9,"19":9,"20":1,"21":14,"22":14,"23":14,"24":14,"25":14,"26":1,"27":15,"28":15,"29":1,"30":7,"31":1,"32":61,"33":1,"34":61,"35":61,"36":3,"37":58,"38":1,"39":45,"40":45,"41":1,"42":7,"43":1,"44":0,"45":1,"46":12,"47":1,"48":10,"49":1,"50":15,"51":15,"52":1,"53":7,"54":7,"55":1,"56":26,"57":26,"58":1},"b":{"1":[7,8],"2":[61,0],"3":[3,58],"4":[45,0],"5":[6,6]},"f":{"1":205,"2":15,"3":9,"4":14,"5":15,"6":7,"7":61,"8":61,"9":45,"10":7,"11":0,"12":12,"13":10,"14":15,"15":7,"16":26},"fnMap":{"1":{"name":"(anonymous_1)","line":38,"loc":{"start":{"line":38,"column":21},"end":{"line":38,"column":38}}},"2":{"name":"(anonymous_2)","line":51,"loc":{"start":{"line":51,"column":23},"end":{"line":51,"column":40}}},"3":{"name":"(anonymous_3)","line":65,"loc":{"start":{"line":65,"column":30},"end":{"line":65,"column":47}}},"4":{"name":"(anonymous_4)","line":80,"loc":{"start":{"line":80,"column":24},"end":{"line":80,"column":41}}},"5":{"name":"(anonymous_5)","line":95,"loc":{"start":{"line":95,"column":22},"end":{"line":95,"column":39}}},"6":{"name":"(anonymous_6)","line":108,"loc":{"start":{"line":108,"column":22},"end":{"line":108,"column":39}}},"7":{"name":"(anonymous_7)","line":119,"loc":{"start":{"line":119,"column":23},"end":{"line":119,"column":40}}},"8":{"name":"(anonymous_8)","line":130,"loc":{"start":{"line":130,"column":22},"end":{"line":130,"column":39}}},"9":{"name":"(anonymous_9)","line":148,"loc":{"start":{"line":148,"column":23},"end":{"line":148,"column":40}}},"10":{"name":"(anonymous_10)","line":160,"loc":{"start":{"line":160,"column":23},"end":{"line":160,"column":40}}},"11":{"name":"(anonymous_11)","line":171,"loc":{"start":{"line":171,"column":24},"end":{"line":171,"column":41}}},"12":{"name":"(anonymous_12)","line":182,"loc":{"start":{"line":182,"column":23},"end":{"line":182,"column":40}}},"13":{"name":"(anonymous_13)","line":193,"loc":{"start":{"line":193,"column":24},"end":{"line":193,"column":41}}},"14":{"name":"(anonymous_14)","line":204,"loc":{"start":{"line":204,"column":31},"end":{"line":204,"column":48}}},"15":{"name":"(anonymous_15)","line":216,"loc":{"start":{"line":216,"column":25},"end":{"line":216,"column":42}}},"16":{"name":"(anonymous_16)","line":228,"loc":{"start":{"line":228,"column":26},"end":{"line":228,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":40}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":35}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":39}},"5":{"start":{"line":38,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":39,"column":4},"end":{"line":39,"column":52}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":87}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":37}},"9":{"start":{"line":51,"column":0},"end":{"line":56,"column":2}},"10":{"start":{"line":52,"column":4},"end":{"line":52,"column":46}},"11":{"start":{"line":53,"column":4},"end":{"line":53,"column":50}},"12":{"start":{"line":54,"column":4},"end":{"line":54,"column":44}},"13":{"start":{"line":55,"column":4},"end":{"line":55,"column":37}},"14":{"start":{"line":65,"column":0},"end":{"line":71,"column":2}},"15":{"start":{"line":66,"column":4},"end":{"line":66,"column":46}},"16":{"start":{"line":67,"column":4},"end":{"line":67,"column":35}},"17":{"start":{"line":68,"column":4},"end":{"line":68,"column":50}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":44}},"19":{"start":{"line":70,"column":4},"end":{"line":70,"column":68}},"20":{"start":{"line":80,"column":0},"end":{"line":86,"column":2}},"21":{"start":{"line":81,"column":4},"end":{"line":81,"column":49}},"22":{"start":{"line":82,"column":4},"end":{"line":82,"column":35}},"23":{"start":{"line":83,"column":4},"end":{"line":83,"column":50}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":44}},"25":{"start":{"line":85,"column":4},"end":{"line":85,"column":68}},"26":{"start":{"line":95,"column":0},"end":{"line":98,"column":2}},"27":{"start":{"line":96,"column":4},"end":{"line":96,"column":106}},"28":{"start":{"line":97,"column":4},"end":{"line":97,"column":37}},"29":{"start":{"line":108,"column":0},"end":{"line":110,"column":2}},"30":{"start":{"line":109,"column":4},"end":{"line":109,"column":81}},"31":{"start":{"line":119,"column":0},"end":{"line":121,"column":2}},"32":{"start":{"line":120,"column":4},"end":{"line":120,"column":84}},"33":{"start":{"line":130,"column":0},"end":{"line":139,"column":2}},"34":{"start":{"line":131,"column":4},"end":{"line":131,"column":42}},"35":{"start":{"line":135,"column":4},"end":{"line":137,"column":5}},"36":{"start":{"line":136,"column":8},"end":{"line":136,"column":142}},"37":{"start":{"line":138,"column":4},"end":{"line":138,"column":36}},"38":{"start":{"line":148,"column":0},"end":{"line":151,"column":2}},"39":{"start":{"line":149,"column":4},"end":{"line":149,"column":42}},"40":{"start":{"line":150,"column":4},"end":{"line":150,"column":36}},"41":{"start":{"line":160,"column":0},"end":{"line":162,"column":2}},"42":{"start":{"line":161,"column":4},"end":{"line":161,"column":71}},"43":{"start":{"line":171,"column":0},"end":{"line":173,"column":2}},"44":{"start":{"line":172,"column":4},"end":{"line":172,"column":72}},"45":{"start":{"line":182,"column":0},"end":{"line":184,"column":2}},"46":{"start":{"line":183,"column":4},"end":{"line":183,"column":116}},"47":{"start":{"line":193,"column":0},"end":{"line":195,"column":2}},"48":{"start":{"line":194,"column":4},"end":{"line":194,"column":37}},"49":{"start":{"line":204,"column":0},"end":{"line":207,"column":2}},"50":{"start":{"line":205,"column":4},"end":{"line":205,"column":86}},"51":{"start":{"line":206,"column":4},"end":{"line":206,"column":57}},"52":{"start":{"line":216,"column":0},"end":{"line":219,"column":2}},"53":{"start":{"line":217,"column":4},"end":{"line":217,"column":86}},"54":{"start":{"line":218,"column":4},"end":{"line":218,"column":64}},"55":{"start":{"line":228,"column":0},"end":{"line":231,"column":2}},"56":{"start":{"line":229,"column":4},"end":{"line":229,"column":35}},"57":{"start":{"line":230,"column":4},"end":{"line":230,"column":63}},"58":{"start":{"line":233,"column":0},"end":{"line":249,"column":2}}},"branchMap":{"1":{"line":96,"type":"cond-expr","locations":[{"start":{"line":96,"column":95},"end":{"line":96,"column":98}},{"start":{"line":96,"column":101},"end":{"line":96,"column":104}}]},"2":{"line":131,"type":"binary-expr","locations":[{"start":{"line":131,"column":16},"end":{"line":131,"column":34}},{"start":{"line":131,"column":38},"end":{"line":131,"column":41}}]},"3":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":4},"end":{"line":135,"column":4}},{"start":{"line":135,"column":4},"end":{"line":135,"column":4}}]},"4":{"line":149,"type":"binary-expr","locations":[{"start":{"line":149,"column":16},"end":{"line":149,"column":34}},{"start":{"line":149,"column":38},"end":{"line":149,"column":41}}]},"5":{"line":183,"type":"cond-expr","locations":[{"start":{"line":183,"column":103},"end":{"line":183,"column":107}},{"start":{"line":183,"column":110},"end":{"line":183,"column":115}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js","s":{"1":1,"2":1,"3":434,"4":434,"5":1,"6":0,"7":1,"8":0,"9":1,"10":0,"11":1,"12":668,"13":1,"14":0,"15":1,"16":389,"17":389,"18":0,"19":1,"20":279,"21":1,"22":235,"23":1,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1},"b":{"1":[434,0],"2":[0,0],"3":[389,0],"4":[44,235],"5":[0,0]},"f":{"1":434,"2":0,"3":0,"4":0,"5":668,"6":0,"7":389,"8":279,"9":235,"10":0,"11":0,"12":0,"13":0},"fnMap":{"1":{"name":"(anonymous_1)","line":29,"loc":{"start":{"line":29,"column":20},"end":{"line":29,"column":45}}},"2":{"name":"(anonymous_2)","line":40,"loc":{"start":{"line":40,"column":44},"end":{"line":40,"column":56}}},"3":{"name":"(anonymous_3)","line":51,"loc":{"start":{"line":51,"column":37},"end":{"line":51,"column":55}}},"4":{"name":"(anonymous_4)","line":63,"loc":{"start":{"line":63,"column":34},"end":{"line":63,"column":51}}},"5":{"name":"(anonymous_5)","line":74,"loc":{"start":{"line":74,"column":36},"end":{"line":74,"column":48}}},"6":{"name":"(anonymous_6)","line":84,"loc":{"start":{"line":84,"column":40},"end":{"line":84,"column":52}}},"7":{"name":"(anonymous_7)","line":94,"loc":{"start":{"line":94,"column":37},"end":{"line":94,"column":49}}},"8":{"name":"(anonymous_8)","line":107,"loc":{"start":{"line":107,"column":38},"end":{"line":107,"column":50}}},"9":{"name":"(anonymous_9)","line":117,"loc":{"start":{"line":117,"column":33},"end":{"line":117,"column":45}}},"10":{"name":"(anonymous_10)","line":128,"loc":{"start":{"line":128,"column":27},"end":{"line":128,"column":45}}},"11":{"name":"(anonymous_11)","line":132,"loc":{"start":{"line":132,"column":34},"end":{"line":132,"column":51}}},"12":{"name":"(anonymous_12)","line":142,"loc":{"start":{"line":142,"column":31},"end":{"line":142,"column":56}}},"13":{"name":"(anonymous_13)","line":144,"loc":{"start":{"line":144,"column":27},"end":{"line":144,"column":52}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"2":{"start":{"line":29,"column":0},"end":{"line":32,"column":2}},"3":{"start":{"line":30,"column":4},"end":{"line":30,"column":29}},"4":{"start":{"line":31,"column":4},"end":{"line":31,"column":25}},"5":{"start":{"line":40,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":41}},"7":{"start":{"line":51,"column":0},"end":{"line":53,"column":2}},"8":{"start":{"line":52,"column":4},"end":{"line":52,"column":49}},"9":{"start":{"line":63,"column":0},"end":{"line":65,"column":2}},"10":{"start":{"line":64,"column":4},"end":{"line":64,"column":55}},"11":{"start":{"line":74,"column":0},"end":{"line":76,"column":2}},"12":{"start":{"line":75,"column":4},"end":{"line":75,"column":37}},"13":{"start":{"line":84,"column":0},"end":{"line":86,"column":2}},"14":{"start":{"line":85,"column":4},"end":{"line":85,"column":104}},"15":{"start":{"line":94,"column":0},"end":{"line":99,"column":2}},"16":{"start":{"line":95,"column":4},"end":{"line":97,"column":5}},"17":{"start":{"line":96,"column":8},"end":{"line":96,"column":26}},"18":{"start":{"line":98,"column":4},"end":{"line":98,"column":32}},"19":{"start":{"line":107,"column":0},"end":{"line":109,"column":2}},"20":{"start":{"line":108,"column":4},"end":{"line":108,"column":46}},"21":{"start":{"line":117,"column":0},"end":{"line":119,"column":2}},"22":{"start":{"line":118,"column":4},"end":{"line":118,"column":50}},"23":{"start":{"line":128,"column":0},"end":{"line":147,"column":2}},"24":{"start":{"line":131,"column":4},"end":{"line":131,"column":41}},"25":{"start":{"line":132,"column":4},"end":{"line":139,"column":7}},"26":{"start":{"line":133,"column":8},"end":{"line":135,"column":9}},"27":{"start":{"line":134,"column":12},"end":{"line":134,"column":25}},"28":{"start":{"line":136,"column":8},"end":{"line":136,"column":33}},"29":{"start":{"line":137,"column":8},"end":{"line":137,"column":49}},"30":{"start":{"line":138,"column":8},"end":{"line":138,"column":40}},"31":{"start":{"line":142,"column":4},"end":{"line":146,"column":12}},"32":{"start":{"line":143,"column":8},"end":{"line":143,"column":44}},"33":{"start":{"line":145,"column":8},"end":{"line":145,"column":43}},"34":{"start":{"line":151,"column":0},"end":{"line":151,"column":31}}},"branchMap":{"1":{"line":30,"type":"binary-expr","locations":[{"start":{"line":30,"column":17},"end":{"line":30,"column":22}},{"start":{"line":30,"column":26},"end":{"line":30,"column":28}}]},"2":{"line":85,"type":"cond-expr","locations":[{"start":{"line":85,"column":31},"end":{"line":85,"column":33}},{"start":{"line":85,"column":36},"end":{"line":85,"column":103}}]},"3":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":4},"end":{"line":95,"column":4}},{"start":{"line":95,"column":4},"end":{"line":95,"column":4}}]},"4":{"line":108,"type":"cond-expr","locations":[{"start":{"line":108,"column":30},"end":{"line":108,"column":40}},{"start":{"line":108,"column":43},"end":{"line":108,"column":45}}]},"5":{"line":133,"type":"if","locations":[{"start":{"line":133,"column":8},"end":{"line":133,"column":8}},{"start":{"line":133,"column":8},"end":{"line":133,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":100,"12":1},"b":{},"f":{"1":1,"2":267,"3":100},"fnMap":{"1":{"name":"(anonymous_1)","line":14,"loc":{"start":{"line":14,"column":26},"end":{"line":14,"column":38}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":39},"end":{"line":22,"column":55}}},"3":{"name":"(anonymous_3)","line":26,"loc":{"start":{"line":26,"column":49},"end":{"line":26,"column":65}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":14,"column":0},"end":{"line":17,"column":2}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":50}},"6":{"start":{"line":19,"column":0},"end":{"line":19,"column":53}},"7":{"start":{"line":20,"column":0},"end":{"line":20,"column":64}},"8":{"start":{"line":22,"column":0},"end":{"line":24,"column":2}},"9":{"start":{"line":23,"column":4},"end":{"line":23,"column":50}},"10":{"start":{"line":26,"column":0},"end":{"line":28,"column":2}},"11":{"start":{"line":27,"column":4},"end":{"line":27,"column":45}},"12":{"start":{"line":30,"column":0},"end":{"line":30,"column":37}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js","s":{"1":1,"2":1,"3":1,"4":9,"5":9,"6":1,"7":0,"8":1,"9":0,"10":1,"11":1029,"12":1029,"13":1,"14":619,"15":619,"16":1,"17":678,"18":678,"19":123,"20":555,"21":1,"22":128,"23":128,"24":0,"25":128,"26":1,"27":338,"28":1,"29":2454,"30":1,"31":201,"32":201,"33":22,"34":22,"35":22,"36":22,"37":22,"38":22,"39":43,"40":22,"41":179,"42":11,"43":11,"44":11,"45":11,"46":11,"47":23,"48":11,"49":168,"50":1,"51":216,"52":216,"53":21,"54":21,"55":21,"56":21,"57":21,"58":21,"59":21,"60":21,"61":21,"62":37,"63":21,"64":195,"65":19,"66":19,"67":19,"68":19,"69":19,"70":19,"71":19,"72":19,"73":47,"74":19,"75":176,"76":22,"77":22,"78":22,"79":22,"80":22,"81":154,"82":154,"83":1},"b":{"1":[1029,186],"2":[619,43],"3":[123,555],"4":[123,54],"5":[0,128],"6":[22,179],"7":[11,168],"8":[21,195],"9":[19,176],"10":[22,154]},"f":{"1":9,"2":0,"3":0,"4":1029,"5":619,"6":678,"7":128,"8":338,"9":2454,"10":201,"11":22,"12":43,"13":11,"14":216,"15":21,"16":19,"17":22},"fnMap":{"1":{"name":"(anonymous_1)","line":7,"loc":{"start":{"line":7,"column":19},"end":{"line":7,"column":37}}},"2":{"name":"(anonymous_2)","line":19,"loc":{"start":{"line":19,"column":32},"end":{"line":19,"column":48}}},"3":{"name":"(anonymous_3)","line":30,"loc":{"start":{"line":30,"column":42},"end":{"line":30,"column":58}}},"4":{"name":"(anonymous_4)","line":44,"loc":{"start":{"line":44,"column":40},"end":{"line":44,"column":56}}},"5":{"name":"(anonymous_5)","line":59,"loc":{"start":{"line":59,"column":39},"end":{"line":59,"column":55}}},"6":{"name":"(anonymous_6)","line":78,"loc":{"start":{"line":78,"column":43},"end":{"line":78,"column":59}}},"7":{"name":"(anonymous_7)","line":99,"loc":{"start":{"line":99,"column":36},"end":{"line":99,"column":52}}},"8":{"name":"(anonymous_8)","line":117,"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":51}}},"9":{"name":"(anonymous_9)","line":132,"loc":{"start":{"line":132,"column":37},"end":{"line":132,"column":53}}},"10":{"name":"(anonymous_10)","line":145,"loc":{"start":{"line":145,"column":32},"end":{"line":145,"column":55}}},"11":{"name":"(anonymous_11)","line":149,"loc":{"start":{"line":149,"column":16},"end":{"line":149,"column":28}}},"12":{"name":"(anonymous_12)","line":156,"loc":{"start":{"line":156,"column":26},"end":{"line":156,"column":39}}},"13":{"name":"(anonymous_13)","line":165,"loc":{"start":{"line":165,"column":16},"end":{"line":165,"column":28}}},"14":{"name":"(anonymous_14)","line":191,"loc":{"start":{"line":191,"column":32},"end":{"line":191,"column":63}}},"15":{"name":"(anonymous_15)","line":196,"loc":{"start":{"line":196,"column":16},"end":{"line":196,"column":28}}},"16":{"name":"(anonymous_16)","line":215,"loc":{"start":{"line":215,"column":16},"end":{"line":215,"column":28}}},"17":{"name":"(anonymous_17)","line":232,"loc":{"start":{"line":232,"column":16},"end":{"line":232,"column":28}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":39}},"3":{"start":{"line":7,"column":0},"end":{"line":10,"column":2}},"4":{"start":{"line":8,"column":4},"end":{"line":8,"column":49}},"5":{"start":{"line":9,"column":4},"end":{"line":9,"column":51}},"6":{"start":{"line":19,"column":0},"end":{"line":21,"column":2}},"7":{"start":{"line":20,"column":4},"end":{"line":20,"column":64}},"8":{"start":{"line":30,"column":0},"end":{"line":32,"column":2}},"9":{"start":{"line":31,"column":4},"end":{"line":31,"column":65}},"10":{"start":{"line":44,"column":0},"end":{"line":47,"column":2}},"11":{"start":{"line":45,"column":4},"end":{"line":45,"column":45}},"12":{"start":{"line":46,"column":4},"end":{"line":46,"column":85}},"13":{"start":{"line":59,"column":0},"end":{"line":62,"column":2}},"14":{"start":{"line":60,"column":4},"end":{"line":60,"column":45}},"15":{"start":{"line":61,"column":4},"end":{"line":61,"column":86}},"16":{"start":{"line":78,"column":0},"end":{"line":84,"column":2}},"17":{"start":{"line":79,"column":4},"end":{"line":79,"column":45}},"18":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"19":{"start":{"line":81,"column":7},"end":{"line":81,"column":85}},"20":{"start":{"line":83,"column":4},"end":{"line":83,"column":13}},"21":{"start":{"line":99,"column":0},"end":{"line":107,"column":2}},"22":{"start":{"line":101,"column":4},"end":{"line":101,"column":45}},"23":{"start":{"line":102,"column":4},"end":{"line":104,"column":5}},"24":{"start":{"line":103,"column":8},"end":{"line":103,"column":20}},"25":{"start":{"line":106,"column":4},"end":{"line":106,"column":84}},"26":{"start":{"line":117,"column":0},"end":{"line":119,"column":2}},"27":{"start":{"line":118,"column":4},"end":{"line":118,"column":17}},"28":{"start":{"line":132,"column":0},"end":{"line":135,"column":2}},"29":{"start":{"line":134,"column":4},"end":{"line":134,"column":39}},"30":{"start":{"line":145,"column":0},"end":{"line":180,"column":2}},"31":{"start":{"line":146,"column":4},"end":{"line":146,"column":20}},"32":{"start":{"line":147,"column":4},"end":{"line":177,"column":5}},"33":{"start":{"line":149,"column":8},"end":{"line":161,"column":13}},"34":{"start":{"line":150,"column":12},"end":{"line":150,"column":38}},"35":{"start":{"line":151,"column":12},"end":{"line":151,"column":51}},"36":{"start":{"line":153,"column":12},"end":{"line":153,"column":28}},"37":{"start":{"line":154,"column":12},"end":{"line":154,"column":59}},"38":{"start":{"line":156,"column":12},"end":{"line":158,"column":15}},"39":{"start":{"line":157,"column":16},"end":{"line":157,"column":56}},"40":{"start":{"line":160,"column":12},"end":{"line":160,"column":26}},"41":{"start":{"line":163,"column":11},"end":{"line":177,"column":5}},"42":{"start":{"line":165,"column":8},"end":{"line":175,"column":13}},"43":{"start":{"line":166,"column":12},"end":{"line":166,"column":54}},"44":{"start":{"line":167,"column":12},"end":{"line":167,"column":51}},"45":{"start":{"line":169,"column":12},"end":{"line":169,"column":28}},"46":{"start":{"line":170,"column":12},"end":{"line":172,"column":13}},"47":{"start":{"line":171,"column":16},"end":{"line":171,"column":63}},"48":{"start":{"line":174,"column":12},"end":{"line":174,"column":26}},"49":{"start":{"line":179,"column":4},"end":{"line":179,"column":54}},"50":{"start":{"line":191,"column":0},"end":{"line":243,"column":2}},"51":{"start":{"line":192,"column":4},"end":{"line":192,"column":20}},"52":{"start":{"line":194,"column":4},"end":{"line":239,"column":5}},"53":{"start":{"line":196,"column":8},"end":{"line":211,"column":13}},"54":{"start":{"line":197,"column":12},"end":{"line":197,"column":76}},"55":{"start":{"line":198,"column":12},"end":{"line":198,"column":76}},"56":{"start":{"line":199,"column":12},"end":{"line":199,"column":46}},"57":{"start":{"line":201,"column":12},"end":{"line":201,"column":51}},"58":{"start":{"line":202,"column":12},"end":{"line":202,"column":75}},"59":{"start":{"line":203,"column":12},"end":{"line":203,"column":100}},"60":{"start":{"line":204,"column":12},"end":{"line":204,"column":28}},"61":{"start":{"line":206,"column":12},"end":{"line":208,"column":13}},"62":{"start":{"line":207,"column":16},"end":{"line":207,"column":76}},"63":{"start":{"line":210,"column":12},"end":{"line":210,"column":26}},"64":{"start":{"line":213,"column":11},"end":{"line":239,"column":5}},"65":{"start":{"line":215,"column":8},"end":{"line":229,"column":13}},"66":{"start":{"line":216,"column":12},"end":{"line":216,"column":54}},"67":{"start":{"line":217,"column":12},"end":{"line":217,"column":36}},"68":{"start":{"line":219,"column":12},"end":{"line":219,"column":51}},"69":{"start":{"line":220,"column":12},"end":{"line":220,"column":75}},"70":{"start":{"line":221,"column":12},"end":{"line":221,"column":100}},"71":{"start":{"line":222,"column":12},"end":{"line":222,"column":28}},"72":{"start":{"line":224,"column":12},"end":{"line":226,"column":13}},"73":{"start":{"line":225,"column":16},"end":{"line":225,"column":76}},"74":{"start":{"line":228,"column":12},"end":{"line":228,"column":26}},"75":{"start":{"line":230,"column":11},"end":{"line":239,"column":5}},"76":{"start":{"line":232,"column":8},"end":{"line":238,"column":13}},"77":{"start":{"line":233,"column":12},"end":{"line":233,"column":78}},"78":{"start":{"line":234,"column":12},"end":{"line":234,"column":78}},"79":{"start":{"line":235,"column":12},"end":{"line":235,"column":63}},"80":{"start":{"line":237,"column":12},"end":{"line":237,"column":123}},"81":{"start":{"line":241,"column":4},"end":{"line":241,"column":45}},"82":{"start":{"line":242,"column":4},"end":{"line":242,"column":90}},"83":{"start":{"line":245,"column":0},"end":{"line":245,"column":30}}},"branchMap":{"1":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":11},"end":{"line":46,"column":24}},{"start":{"line":46,"column":28},"end":{"line":46,"column":84}}]},"2":{"line":61,"type":"binary-expr","locations":[{"start":{"line":61,"column":11},"end":{"line":61,"column":24}},{"start":{"line":61,"column":28},"end":{"line":61,"column":85}}]},"3":{"line":80,"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":80,"column":4}},{"start":{"line":80,"column":4},"end":{"line":80,"column":4}}]},"4":{"line":81,"type":"binary-expr","locations":[{"start":{"line":81,"column":23},"end":{"line":81,"column":78}},{"start":{"line":81,"column":82},"end":{"line":81,"column":83}}]},"5":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"6":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"7":{"line":163,"type":"if","locations":[{"start":{"line":163,"column":11},"end":{"line":163,"column":11}},{"start":{"line":163,"column":11},"end":{"line":163,"column":11}}]},"8":{"line":194,"type":"if","locations":[{"start":{"line":194,"column":4},"end":{"line":194,"column":4}},{"start":{"line":194,"column":4},"end":{"line":194,"column":4}}]},"9":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":11},"end":{"line":213,"column":11}},{"start":{"line":213,"column":11},"end":{"line":213,"column":11}}]},"10":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":11},"end":{"line":230,"column":11}},{"start":{"line":230,"column":11},"end":{"line":230,"column":11}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":44,"12":1},"b":{},"f":{"1":1,"2":267,"3":44},"fnMap":{"1":{"name":"(anonymous_1)","line":14,"loc":{"start":{"line":14,"column":23},"end":{"line":14,"column":35}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":36},"end":{"line":22,"column":52}}},"3":{"name":"(anonymous_3)","line":26,"loc":{"start":{"line":26,"column":46},"end":{"line":26,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":14,"column":0},"end":{"line":17,"column":2}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":45}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":47}},"6":{"start":{"line":19,"column":0},"end":{"line":19,"column":50}},"7":{"start":{"line":20,"column":0},"end":{"line":20,"column":58}},"8":{"start":{"line":22,"column":0},"end":{"line":24,"column":2}},"9":{"start":{"line":23,"column":4},"end":{"line":23,"column":49}},"10":{"start":{"line":26,"column":0},"end":{"line":28,"column":2}},"11":{"start":{"line":27,"column":4},"end":{"line":27,"column":45}},"12":{"start":{"line":30,"column":0},"end":{"line":30,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":234,"12":1},"b":{},"f":{"1":1,"2":267,"3":234},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":22},"end":{"line":20,"column":34}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":35},"end":{"line":28,"column":51}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":45},"end":{"line":32,"column":61}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":44}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":46}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":49}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":56}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":57}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":33}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":139,"12":1},"b":{},"f":{"1":1,"2":267,"3":139},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":23},"end":{"line":20,"column":35}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":36},"end":{"line":28,"column":52}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":46},"end":{"line":32,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":44}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":47}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":58}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":37,"12":1,"13":33,"14":1},"b":{},"f":{"1":1,"2":267,"3":37,"4":33},"fnMap":{"1":{"name":"(anonymous_1)","line":4,"loc":{"start":{"line":4,"column":31},"end":{"line":4,"column":43}}},"2":{"name":"(anonymous_2)","line":12,"loc":{"start":{"line":12,"column":44},"end":{"line":12,"column":60}}},"3":{"name":"(anonymous_3)","line":16,"loc":{"start":{"line":16,"column":54},"end":{"line":16,"column":70}}},"4":{"name":"(anonymous_4)","line":20,"loc":{"start":{"line":20,"column":51},"end":{"line":20,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"4":{"start":{"line":5,"column":4},"end":{"line":5,"column":53}},"5":{"start":{"line":6,"column":4},"end":{"line":6,"column":55}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":58}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":74}},"8":{"start":{"line":12,"column":0},"end":{"line":14,"column":2}},"9":{"start":{"line":13,"column":4},"end":{"line":13,"column":50}},"10":{"start":{"line":16,"column":0},"end":{"line":18,"column":2}},"11":{"start":{"line":17,"column":4},"end":{"line":17,"column":45}},"12":{"start":{"line":20,"column":0},"end":{"line":22,"column":2}},"13":{"start":{"line":21,"column":4},"end":{"line":21,"column":16}},"14":{"start":{"line":24,"column":0},"end":{"line":24,"column":42}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":28,"12":1,"13":35,"14":1},"b":{},"f":{"1":1,"2":267,"3":28,"4":35},"fnMap":{"1":{"name":"(anonymous_1)","line":4,"loc":{"start":{"line":4,"column":25},"end":{"line":4,"column":37}}},"2":{"name":"(anonymous_2)","line":12,"loc":{"start":{"line":12,"column":38},"end":{"line":12,"column":54}}},"3":{"name":"(anonymous_3)","line":16,"loc":{"start":{"line":16,"column":48},"end":{"line":16,"column":64}}},"4":{"name":"(anonymous_4)","line":20,"loc":{"start":{"line":20,"column":45},"end":{"line":20,"column":57}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"4":{"start":{"line":5,"column":4},"end":{"line":5,"column":47}},"5":{"start":{"line":6,"column":4},"end":{"line":6,"column":49}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":52}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":62}},"8":{"start":{"line":12,"column":0},"end":{"line":14,"column":2}},"9":{"start":{"line":13,"column":4},"end":{"line":13,"column":51}},"10":{"start":{"line":16,"column":0},"end":{"line":18,"column":2}},"11":{"start":{"line":17,"column":4},"end":{"line":17,"column":45}},"12":{"start":{"line":20,"column":0},"end":{"line":22,"column":2}},"13":{"start":{"line":21,"column":4},"end":{"line":21,"column":16}},"14":{"start":{"line":24,"column":0},"end":{"line":24,"column":36}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":28,"12":1},"b":{},"f":{"1":1,"2":267,"3":28},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":23},"end":{"line":20,"column":35}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":36},"end":{"line":28,"column":52}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":46},"end":{"line":32,"column":62}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":45}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":47}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":56}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":34}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":0,"12":1},"b":{},"f":{"1":1,"2":267,"3":0},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":24},"end":{"line":20,"column":36}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":37},"end":{"line":28,"column":53}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":47},"end":{"line":32,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":45}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":51}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":60}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":59}},"10":{"start":{"line":32,"column":0},"end":{"line":34,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":267,"10":1,"11":38,"12":38,"13":38,"14":1},"b":{},"f":{"1":1,"2":267,"3":38},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":24},"end":{"line":20,"column":36}}},"2":{"name":"(anonymous_2)","line":28,"loc":{"start":{"line":28,"column":37},"end":{"line":28,"column":53}}},"3":{"name":"(anonymous_3)","line":32,"loc":{"start":{"line":32,"column":47},"end":{"line":32,"column":63}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"3":{"start":{"line":20,"column":0},"end":{"line":23,"column":2}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":46}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":51}},"7":{"start":{"line":26,"column":0},"end":{"line":26,"column":60}},"8":{"start":{"line":28,"column":0},"end":{"line":30,"column":2}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":61}},"10":{"start":{"line":32,"column":0},"end":{"line":36,"column":2}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":47}},"12":{"start":{"line":34,"column":4},"end":{"line":34,"column":36}},"13":{"start":{"line":35,"column":4},"end":{"line":35,"column":47}},"14":{"start":{"line":38,"column":0},"end":{"line":38,"column":35}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":61,"8":61,"9":61,"10":61,"11":61,"12":61,"13":61,"14":1,"15":16,"16":50,"17":25,"18":1,"19":30,"20":1,"21":22,"22":1,"23":2,"24":1,"25":12,"26":12,"27":12,"28":12,"29":24,"30":4,"31":12,"32":12,"33":11,"34":9,"35":11,"36":21,"37":16,"38":16,"39":6,"40":10,"41":1,"42":2,"43":9,"44":11,"45":12,"46":12,"47":1,"48":8,"49":8,"50":8,"51":8,"52":1,"53":1,"54":1,"55":1,"56":0,"57":0,"58":1,"59":1,"60":1,"61":7,"62":7,"63":7,"64":8,"65":8,"66":12,"67":8,"68":8,"69":8,"70":8,"71":8,"72":8,"73":8,"74":25,"75":25,"76":8,"77":8,"78":8,"79":1,"80":3,"81":3,"82":3,"83":1,"84":3,"85":1,"86":3,"87":3,"88":3,"89":1,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":1,"98":48,"99":48,"100":48,"101":26,"102":22,"103":22,"104":22,"105":22,"106":1},"b":{"1":[35,26],"2":[30,22],"3":[12,1],"4":[12,2],"5":[11,1],"6":[9,2],"7":[6,10],"8":[16,11],"9":[1,9],"10":[8,1],"11":[8,2],"12":[1,7],"13":[0,1],"14":[1,7],"15":[12,13],"16":[3,0],"17":[1,2],"18":[0,0],"19":[0,0],"20":[26,22],"21":[22,0]},"f":{"1":61,"2":16,"3":50,"4":25,"5":30,"6":22,"7":2,"8":12,"9":24,"10":4,"11":21,"12":16,"13":2,"14":8,"15":1,"16":12,"17":25,"18":3,"19":3,"20":0,"21":0,"22":48},"fnMap":{"1":{"name":"(anonymous_1)","line":33,"loc":{"start":{"line":33,"column":20},"end":{"line":33,"column":72}}},"2":{"name":"(anonymous_2)","line":51,"loc":{"start":{"line":51,"column":32},"end":{"line":51,"column":59}}},"3":{"name":"(anonymous_3)","line":52,"loc":{"start":{"line":52,"column":25},"end":{"line":52,"column":38}}},"4":{"name":"(anonymous_4)","line":54,"loc":{"start":{"line":54,"column":11},"end":{"line":54,"column":24}}},"5":{"name":"(anonymous_5)","line":66,"loc":{"start":{"line":66,"column":38},"end":{"line":66,"column":54}}},"6":{"name":"(anonymous_6)","line":76,"loc":{"start":{"line":76,"column":35},"end":{"line":76,"column":47}}},"7":{"name":"(anonymous_7)","line":86,"loc":{"start":{"line":86,"column":36},"end":{"line":86,"column":48}}},"8":{"name":"(anonymous_8)","line":97,"loc":{"start":{"line":97,"column":33},"end":{"line":97,"column":52}}},"9":{"name":"(anonymous_9)","line":103,"loc":{"start":{"line":103,"column":36},"end":{"line":103,"column":49}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":15},"end":{"line":105,"column":28}}},"11":{"name":"(anonymous_11)","line":118,"loc":{"start":{"line":118,"column":48},"end":{"line":118,"column":61}}},"12":{"name":"(anonymous_12)","line":120,"loc":{"start":{"line":120,"column":15},"end":{"line":120,"column":28}}},"13":{"name":"(anonymous_13)","line":127,"loc":{"start":{"line":127,"column":33},"end":{"line":127,"column":46}}},"14":{"name":"(anonymous_14)","line":149,"loc":{"start":{"line":149,"column":33},"end":{"line":149,"column":49}}},"15":{"name":"(anonymous_15)","line":158,"loc":{"start":{"line":158,"column":38},"end":{"line":158,"column":51}}},"16":{"name":"(anonymous_16)","line":179,"loc":{"start":{"line":179,"column":36},"end":{"line":179,"column":54}}},"17":{"name":"(anonymous_17)","line":189,"loc":{"start":{"line":189,"column":40},"end":{"line":189,"column":64}}},"18":{"name":"(anonymous_18)","line":208,"loc":{"start":{"line":208,"column":34},"end":{"line":208,"column":63}}},"19":{"name":"(anonymous_19)","line":233,"loc":{"start":{"line":233,"column":34},"end":{"line":233,"column":63}}},"20":{"name":"(anonymous_20)","line":260,"loc":{"start":{"line":260,"column":40},"end":{"line":260,"column":67}}},"21":{"name":"(anonymous_21)","line":268,"loc":{"start":{"line":268,"column":11},"end":{"line":268,"column":32}}},"22":{"name":"(anonymous_22)","line":289,"loc":{"start":{"line":289,"column":43},"end":{"line":289,"column":63}}}},"statementMap":{"1":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"2":{"start":{"line":25,"column":0},"end":{"line":25,"column":41}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":41}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":36}},"5":{"start":{"line":28,"column":0},"end":{"line":28,"column":45}},"6":{"start":{"line":33,"column":0},"end":{"line":41,"column":2}},"7":{"start":{"line":34,"column":4},"end":{"line":34,"column":42}},"8":{"start":{"line":35,"column":4},"end":{"line":35,"column":28}},"9":{"start":{"line":36,"column":4},"end":{"line":36,"column":22}},"10":{"start":{"line":37,"column":4},"end":{"line":37,"column":70}},"11":{"start":{"line":38,"column":4},"end":{"line":38,"column":31}},"12":{"start":{"line":39,"column":4},"end":{"line":39,"column":37}},"13":{"start":{"line":40,"column":4},"end":{"line":40,"column":34}},"14":{"start":{"line":51,"column":0},"end":{"line":57,"column":2}},"15":{"start":{"line":52,"column":4},"end":{"line":56,"column":7}},"16":{"start":{"line":53,"column":8},"end":{"line":53,"column":37}},"17":{"start":{"line":55,"column":8},"end":{"line":55,"column":22}},"18":{"start":{"line":66,"column":0},"end":{"line":68,"column":2}},"19":{"start":{"line":67,"column":4},"end":{"line":67,"column":56}},"20":{"start":{"line":76,"column":0},"end":{"line":78,"column":2}},"21":{"start":{"line":77,"column":4},"end":{"line":77,"column":45}},"22":{"start":{"line":86,"column":0},"end":{"line":88,"column":2}},"23":{"start":{"line":87,"column":4},"end":{"line":87,"column":28}},"24":{"start":{"line":97,"column":0},"end":{"line":140,"column":2}},"25":{"start":{"line":98,"column":4},"end":{"line":98,"column":28}},"26":{"start":{"line":99,"column":4},"end":{"line":99,"column":35}},"27":{"start":{"line":100,"column":4},"end":{"line":100,"column":20}},"28":{"start":{"line":103,"column":4},"end":{"line":107,"column":7}},"29":{"start":{"line":104,"column":8},"end":{"line":104,"column":40}},"30":{"start":{"line":106,"column":8},"end":{"line":106,"column":69}},"31":{"start":{"line":109,"column":4},"end":{"line":109,"column":23}},"32":{"start":{"line":112,"column":4},"end":{"line":135,"column":5}},"33":{"start":{"line":114,"column":8},"end":{"line":116,"column":9}},"34":{"start":{"line":115,"column":12},"end":{"line":115,"column":56}},"35":{"start":{"line":118,"column":8},"end":{"line":132,"column":11}},"36":{"start":{"line":119,"column":12},"end":{"line":119,"column":38}},"37":{"start":{"line":121,"column":12},"end":{"line":121,"column":40}},"38":{"start":{"line":122,"column":12},"end":{"line":124,"column":13}},"39":{"start":{"line":123,"column":16},"end":{"line":123,"column":28}},"40":{"start":{"line":126,"column":12},"end":{"line":130,"column":13}},"41":{"start":{"line":127,"column":16},"end":{"line":129,"column":19}},"42":{"start":{"line":128,"column":20},"end":{"line":128,"column":63}},"43":{"start":{"line":131,"column":12},"end":{"line":131,"column":59}},"44":{"start":{"line":134,"column":8},"end":{"line":134,"column":60}},"45":{"start":{"line":137,"column":4},"end":{"line":137,"column":35}},"46":{"start":{"line":139,"column":4},"end":{"line":139,"column":18}},"47":{"start":{"line":149,"column":0},"end":{"line":198,"column":2}},"48":{"start":{"line":150,"column":4},"end":{"line":150,"column":41}},"49":{"start":{"line":151,"column":4},"end":{"line":151,"column":32}},"50":{"start":{"line":152,"column":4},"end":{"line":152,"column":36}},"51":{"start":{"line":155,"column":4},"end":{"line":176,"column":5}},"52":{"start":{"line":157,"column":8},"end":{"line":157,"column":49}},"53":{"start":{"line":158,"column":8},"end":{"line":160,"column":14}},"54":{"start":{"line":159,"column":12},"end":{"line":159,"column":69}},"55":{"start":{"line":162,"column":8},"end":{"line":165,"column":9}},"56":{"start":{"line":163,"column":12},"end":{"line":163,"column":54}},"57":{"start":{"line":164,"column":12},"end":{"line":164,"column":24}},"58":{"start":{"line":167,"column":8},"end":{"line":167,"column":48}},"59":{"start":{"line":168,"column":8},"end":{"line":168,"column":30}},"60":{"start":{"line":169,"column":8},"end":{"line":169,"column":36}},"61":{"start":{"line":173,"column":8},"end":{"line":173,"column":26}},"62":{"start":{"line":174,"column":8},"end":{"line":174,"column":30}},"63":{"start":{"line":175,"column":8},"end":{"line":175,"column":36}},"64":{"start":{"line":178,"column":4},"end":{"line":178,"column":67}},"65":{"start":{"line":179,"column":4},"end":{"line":179,"column":92}},"66":{"start":{"line":179,"column":56},"end":{"line":179,"column":79}},"67":{"start":{"line":180,"column":4},"end":{"line":180,"column":82}},"68":{"start":{"line":182,"column":4},"end":{"line":182,"column":44}},"69":{"start":{"line":183,"column":4},"end":{"line":183,"column":89}},"70":{"start":{"line":185,"column":4},"end":{"line":185,"column":53}},"71":{"start":{"line":186,"column":4},"end":{"line":186,"column":42}},"72":{"start":{"line":187,"column":4},"end":{"line":187,"column":34}},"73":{"start":{"line":189,"column":4},"end":{"line":192,"column":11}},"74":{"start":{"line":190,"column":8},"end":{"line":190,"column":95}},"75":{"start":{"line":191,"column":8},"end":{"line":191,"column":19}},"76":{"start":{"line":194,"column":4},"end":{"line":194,"column":23}},"77":{"start":{"line":195,"column":4},"end":{"line":195,"column":25}},"78":{"start":{"line":197,"column":4},"end":{"line":197,"column":18}},"79":{"start":{"line":208,"column":0},"end":{"line":223,"column":2}},"80":{"start":{"line":210,"column":4},"end":{"line":216,"column":5}},"81":{"start":{"line":211,"column":8},"end":{"line":211,"column":51}},"82":{"start":{"line":213,"column":8},"end":{"line":215,"column":9}},"83":{"start":{"line":214,"column":12},"end":{"line":214,"column":27}},"84":{"start":{"line":218,"column":4},"end":{"line":222,"column":6}},"85":{"start":{"line":233,"column":0},"end":{"line":248,"column":2}},"86":{"start":{"line":235,"column":4},"end":{"line":235,"column":51}},"87":{"start":{"line":236,"column":4},"end":{"line":245,"column":7}},"88":{"start":{"line":247,"column":4},"end":{"line":247,"column":93}},"89":{"start":{"line":260,"column":0},"end":{"line":281,"column":2}},"90":{"start":{"line":262,"column":4},"end":{"line":262,"column":51}},"91":{"start":{"line":264,"column":4},"end":{"line":275,"column":5}},"92":{"start":{"line":265,"column":8},"end":{"line":274,"column":11}},"93":{"start":{"line":269,"column":12},"end":{"line":273,"column":13}},"94":{"start":{"line":270,"column":16},"end":{"line":270,"column":62}},"95":{"start":{"line":272,"column":16},"end":{"line":272,"column":37}},"96":{"start":{"line":277,"column":4},"end":{"line":280,"column":27}},"97":{"start":{"line":289,"column":0},"end":{"line":309,"column":2}},"98":{"start":{"line":290,"column":4},"end":{"line":290,"column":42}},"99":{"start":{"line":293,"column":4},"end":{"line":293,"column":58}},"100":{"start":{"line":296,"column":4},"end":{"line":307,"column":5}},"101":{"start":{"line":297,"column":8},"end":{"line":297,"column":37}},"102":{"start":{"line":302,"column":8},"end":{"line":302,"column":45}},"103":{"start":{"line":303,"column":8},"end":{"line":305,"column":9}},"104":{"start":{"line":304,"column":12},"end":{"line":304,"column":44}},"105":{"start":{"line":306,"column":8},"end":{"line":306,"column":83}},"106":{"start":{"line":311,"column":0},"end":{"line":311,"column":31}}},"branchMap":{"1":{"line":37,"type":"cond-expr","locations":[{"start":{"line":37,"column":31},"end":{"line":37,"column":62}},{"start":{"line":37,"column":65},"end":{"line":37,"column":69}}]},"2":{"line":67,"type":"binary-expr","locations":[{"start":{"line":67,"column":36},"end":{"line":67,"column":40}},{"start":{"line":67,"column":44},"end":{"line":67,"column":54}}]},"3":{"line":98,"type":"binary-expr","locations":[{"start":{"line":98,"column":14},"end":{"line":98,"column":21}},{"start":{"line":98,"column":25},"end":{"line":98,"column":27}}]},"4":{"line":99,"type":"binary-expr","locations":[{"start":{"line":99,"column":14},"end":{"line":99,"column":28}},{"start":{"line":99,"column":32},"end":{"line":99,"column":34}}]},"5":{"line":112,"type":"if","locations":[{"start":{"line":112,"column":4},"end":{"line":112,"column":4}},{"start":{"line":112,"column":4},"end":{"line":112,"column":4}}]},"6":{"line":114,"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":114,"column":8}},{"start":{"line":114,"column":8},"end":{"line":114,"column":8}}]},"7":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":12},"end":{"line":122,"column":12}},{"start":{"line":122,"column":12},"end":{"line":122,"column":12}}]},"8":{"line":122,"type":"binary-expr","locations":[{"start":{"line":122,"column":16},"end":{"line":122,"column":35}},{"start":{"line":122,"column":39},"end":{"line":122,"column":53}}]},"9":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":12},"end":{"line":126,"column":12}},{"start":{"line":126,"column":12},"end":{"line":126,"column":12}}]},"10":{"line":151,"type":"binary-expr","locations":[{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},{"start":{"line":151,"column":29},"end":{"line":151,"column":31}}]},"11":{"line":152,"type":"binary-expr","locations":[{"start":{"line":152,"column":18},"end":{"line":152,"column":29}},{"start":{"line":152,"column":33},"end":{"line":152,"column":35}}]},"12":{"line":155,"type":"if","locations":[{"start":{"line":155,"column":4},"end":{"line":155,"column":4}},{"start":{"line":155,"column":4},"end":{"line":155,"column":4}}]},"13":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":8},"end":{"line":162,"column":8}},{"start":{"line":162,"column":8},"end":{"line":162,"column":8}}]},"14":{"line":178,"type":"cond-expr","locations":[{"start":{"line":178,"column":32},"end":{"line":178,"column":43}},{"start":{"line":178,"column":46},"end":{"line":178,"column":66}}]},"15":{"line":190,"type":"cond-expr","locations":[{"start":{"line":190,"column":46},"end":{"line":190,"column":67}},{"start":{"line":190,"column":70},"end":{"line":190,"column":94}}]},"16":{"line":210,"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":4}},{"start":{"line":210,"column":4},"end":{"line":210,"column":4}}]},"17":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":8},"end":{"line":213,"column":8}},{"start":{"line":213,"column":8},"end":{"line":213,"column":8}}]},"18":{"line":264,"type":"if","locations":[{"start":{"line":264,"column":4},"end":{"line":264,"column":4}},{"start":{"line":264,"column":4},"end":{"line":264,"column":4}}]},"19":{"line":269,"type":"if","locations":[{"start":{"line":269,"column":12},"end":{"line":269,"column":12}},{"start":{"line":269,"column":12},"end":{"line":269,"column":12}}]},"20":{"line":296,"type":"if","locations":[{"start":{"line":296,"column":4},"end":{"line":296,"column":4}},{"start":{"line":296,"column":4},"end":{"line":296,"column":4}}]},"21":{"line":303,"type":"if","locations":[{"start":{"line":303,"column":8},"end":{"line":303,"column":8}},{"start":{"line":303,"column":8},"end":{"line":303,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js","s":{"1":1,"2":1,"3":1,"4":42,"5":2,"6":2,"7":2,"8":42},"b":{"1":[2,40],"2":[42,2],"3":[2,0],"4":[2,2]},"f":{"1":42},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":17},"end":{"line":26,"column":43}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":36}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":37}},"3":{"start":{"line":26,"column":0},"end":{"line":37,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":32,"column":5}},"5":{"start":{"line":28,"column":8},"end":{"line":30,"column":9}},"6":{"start":{"line":29,"column":12},"end":{"line":29,"column":36}},"7":{"start":{"line":31,"column":8},"end":{"line":31,"column":46}},"8":{"start":{"line":34,"column":4},"end":{"line":36,"column":18}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":4}},{"start":{"line":27,"column":4},"end":{"line":27,"column":4}}]},"2":{"line":27,"type":"binary-expr","locations":[{"start":{"line":27,"column":8},"end":{"line":27,"column":15}},{"start":{"line":27,"column":19},"end":{"line":27,"column":45}}]},"3":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":8},"end":{"line":28,"column":8}},{"start":{"line":28,"column":8},"end":{"line":28,"column":8}}]},"4":{"line":28,"type":"binary-expr","locations":[{"start":{"line":28,"column":12},"end":{"line":28,"column":28}},{"start":{"line":28,"column":32},"end":{"line":28,"column":59}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":68,"7":68,"8":94,"9":68,"10":42,"11":68,"12":68,"13":68,"14":1,"15":16,"16":4,"17":1,"18":8,"19":2,"20":1,"21":16,"22":16,"23":9,"24":16,"25":16,"26":16,"27":1,"28":16,"29":1,"30":9,"31":0,"32":9,"33":9,"34":9,"35":1,"36":8,"37":14,"38":8,"39":8,"40":8,"41":8,"42":7,"43":7,"44":1,"45":1,"46":1,"47":1,"48":5,"49":16,"50":5,"51":5,"52":5,"53":4,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":0,"62":1,"63":0,"64":0,"65":0,"66":1,"67":68,"68":1,"69":68,"70":1,"71":2,"72":2,"73":2,"74":2,"75":2,"76":1,"77":9,"78":9,"79":3,"80":6,"81":1,"82":68,"83":68,"84":68,"85":68,"86":68,"87":68,"88":68,"89":68,"90":67,"91":68,"92":1},"b":{"1":[4,12],"2":[2,6],"3":[8,4],"4":[9,7],"5":[16,9],"6":[0,9],"7":[9,0],"8":[9,0],"9":[7,1],"10":[4,1],"11":[1,0],"12":[2,0],"13":[3,6],"14":[67,1]},"f":{"1":68,"2":94,"3":42,"4":16,"5":8,"6":16,"7":16,"8":9,"9":8,"10":14,"11":1,"12":5,"13":16,"14":1,"15":0,"16":68,"17":68,"18":2,"19":9,"20":68},"fnMap":{"1":{"name":"(anonymous_1)","line":31,"loc":{"start":{"line":31,"column":23},"end":{"line":31,"column":53}}},"2":{"name":"(anonymous_2)","line":33,"loc":{"start":{"line":33,"column":39},"end":{"line":33,"column":52}}},"3":{"name":"(anonymous_3)","line":36,"loc":{"start":{"line":36,"column":41},"end":{"line":36,"column":54}}},"4":{"name":"(anonymous_4)","line":44,"loc":{"start":{"line":44,"column":45},"end":{"line":44,"column":61}}},"5":{"name":"(anonymous_5)","line":50,"loc":{"start":{"line":50,"column":49},"end":{"line":50,"column":65}}},"6":{"name":"(anonymous_6)","line":63,"loc":{"start":{"line":63,"column":39},"end":{"line":63,"column":55}}},"7":{"name":"(anonymous_7)","line":79,"loc":{"start":{"line":79,"column":39},"end":{"line":79,"column":51}}},"8":{"name":"(anonymous_8)","line":84,"loc":{"start":{"line":84,"column":42},"end":{"line":84,"column":60}}},"9":{"name":"(anonymous_9)","line":104,"loc":{"start":{"line":104,"column":34},"end":{"line":104,"column":46}}},"10":{"name":"(anonymous_10)","line":105,"loc":{"start":{"line":105,"column":60},"end":{"line":105,"column":73}}},"11":{"name":"(anonymous_11)","line":117,"loc":{"start":{"line":117,"column":42},"end":{"line":117,"column":67}}},"12":{"name":"(anonymous_12)","line":127,"loc":{"start":{"line":127,"column":45},"end":{"line":127,"column":57}}},"13":{"name":"(anonymous_13)","line":128,"loc":{"start":{"line":128,"column":60},"end":{"line":128,"column":73}}},"14":{"name":"(anonymous_14)","line":144,"loc":{"start":{"line":144,"column":41},"end":{"line":144,"column":53}}},"15":{"name":"(anonymous_15)","line":162,"loc":{"start":{"line":162,"column":37},"end":{"line":162,"column":49}}},"16":{"name":"(anonymous_16)","line":175,"loc":{"start":{"line":175,"column":41},"end":{"line":175,"column":53}}},"17":{"name":"(anonymous_17)","line":185,"loc":{"start":{"line":185,"column":38},"end":{"line":185,"column":50}}},"18":{"name":"(anonymous_18)","line":195,"loc":{"start":{"line":195,"column":37},"end":{"line":195,"column":49}}},"19":{"name":"(anonymous_19)","line":214,"loc":{"start":{"line":214,"column":37},"end":{"line":214,"column":49}}},"20":{"name":"(anonymous_20)","line":232,"loc":{"start":{"line":232,"column":46},"end":{"line":232,"column":66}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":41}},"4":{"start":{"line":26,"column":0},"end":{"line":26,"column":36}},"5":{"start":{"line":31,"column":0},"end":{"line":42,"column":2}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":20}},"7":{"start":{"line":33,"column":4},"end":{"line":35,"column":7}},"8":{"start":{"line":34,"column":8},"end":{"line":34,"column":22}},"9":{"start":{"line":36,"column":4},"end":{"line":38,"column":7}},"10":{"start":{"line":37,"column":8},"end":{"line":37,"column":22}},"11":{"start":{"line":39,"column":4},"end":{"line":39,"column":35}},"12":{"start":{"line":40,"column":4},"end":{"line":40,"column":49}},"13":{"start":{"line":41,"column":4},"end":{"line":41,"column":28}},"14":{"start":{"line":44,"column":0},"end":{"line":48,"column":2}},"15":{"start":{"line":45,"column":4},"end":{"line":47,"column":5}},"16":{"start":{"line":46,"column":8},"end":{"line":46,"column":26}},"17":{"start":{"line":50,"column":0},"end":{"line":54,"column":2}},"18":{"start":{"line":51,"column":4},"end":{"line":53,"column":5}},"19":{"start":{"line":52,"column":8},"end":{"line":52,"column":71}},"20":{"start":{"line":63,"column":0},"end":{"line":71,"column":2}},"21":{"start":{"line":64,"column":4},"end":{"line":64,"column":21}},"22":{"start":{"line":65,"column":4},"end":{"line":67,"column":5}},"23":{"start":{"line":66,"column":8},"end":{"line":66,"column":40}},"24":{"start":{"line":68,"column":4},"end":{"line":68,"column":31}},"25":{"start":{"line":69,"column":4},"end":{"line":69,"column":88}},"26":{"start":{"line":70,"column":4},"end":{"line":70,"column":19}},"27":{"start":{"line":79,"column":0},"end":{"line":81,"column":2}},"28":{"start":{"line":80,"column":4},"end":{"line":80,"column":40}},"29":{"start":{"line":84,"column":0},"end":{"line":92,"column":2}},"30":{"start":{"line":85,"column":4},"end":{"line":87,"column":5}},"31":{"start":{"line":86,"column":8},"end":{"line":86,"column":15}},"32":{"start":{"line":89,"column":4},"end":{"line":89,"column":59}},"33":{"start":{"line":90,"column":4},"end":{"line":90,"column":63}},"34":{"start":{"line":91,"column":4},"end":{"line":91,"column":52}},"35":{"start":{"line":104,"column":0},"end":{"line":120,"column":2}},"36":{"start":{"line":105,"column":4},"end":{"line":105,"column":101}},"37":{"start":{"line":105,"column":74},"end":{"line":105,"column":97}},"38":{"start":{"line":106,"column":4},"end":{"line":106,"column":46}},"39":{"start":{"line":107,"column":4},"end":{"line":107,"column":54}},"40":{"start":{"line":108,"column":4},"end":{"line":108,"column":39}},"41":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"42":{"start":{"line":112,"column":8},"end":{"line":112,"column":59}},"43":{"start":{"line":113,"column":8},"end":{"line":113,"column":41}},"44":{"start":{"line":116,"column":4},"end":{"line":116,"column":20}},"45":{"start":{"line":117,"column":4},"end":{"line":119,"column":7}},"46":{"start":{"line":118,"column":8},"end":{"line":118,"column":51}},"47":{"start":{"line":127,"column":0},"end":{"line":137,"column":2}},"48":{"start":{"line":128,"column":4},"end":{"line":128,"column":101}},"49":{"start":{"line":128,"column":74},"end":{"line":128,"column":97}},"50":{"start":{"line":129,"column":4},"end":{"line":129,"column":46}},"51":{"start":{"line":130,"column":4},"end":{"line":130,"column":39}},"52":{"start":{"line":132,"column":4},"end":{"line":134,"column":5}},"53":{"start":{"line":133,"column":8},"end":{"line":133,"column":50}},"54":{"start":{"line":136,"column":4},"end":{"line":136,"column":49}},"55":{"start":{"line":144,"column":0},"end":{"line":154,"column":2}},"56":{"start":{"line":145,"column":4},"end":{"line":145,"column":53}},"57":{"start":{"line":146,"column":4},"end":{"line":146,"column":46}},"58":{"start":{"line":147,"column":4},"end":{"line":147,"column":39}},"59":{"start":{"line":149,"column":4},"end":{"line":151,"column":5}},"60":{"start":{"line":150,"column":8},"end":{"line":150,"column":46}},"61":{"start":{"line":153,"column":4},"end":{"line":153,"column":45}},"62":{"start":{"line":162,"column":0},"end":{"line":167,"column":2}},"63":{"start":{"line":163,"column":4},"end":{"line":163,"column":53}},"64":{"start":{"line":164,"column":4},"end":{"line":164,"column":39}},"65":{"start":{"line":166,"column":4},"end":{"line":166,"column":24}},"66":{"start":{"line":175,"column":0},"end":{"line":177,"column":2}},"67":{"start":{"line":176,"column":4},"end":{"line":176,"column":48}},"68":{"start":{"line":185,"column":0},"end":{"line":187,"column":2}},"69":{"start":{"line":186,"column":4},"end":{"line":186,"column":45}},"70":{"start":{"line":195,"column":0},"end":{"line":207,"column":2}},"71":{"start":{"line":196,"column":4},"end":{"line":196,"column":53}},"72":{"start":{"line":197,"column":4},"end":{"line":197,"column":46}},"73":{"start":{"line":198,"column":4},"end":{"line":198,"column":39}},"74":{"start":{"line":199,"column":4},"end":{"line":199,"column":46}},"75":{"start":{"line":201,"column":4},"end":{"line":206,"column":6}},"76":{"start":{"line":214,"column":0},"end":{"line":224,"column":2}},"77":{"start":{"line":215,"column":4},"end":{"line":215,"column":38}},"78":{"start":{"line":218,"column":4},"end":{"line":220,"column":5}},"79":{"start":{"line":219,"column":8},"end":{"line":219,"column":87}},"80":{"start":{"line":223,"column":4},"end":{"line":223,"column":72}},"81":{"start":{"line":232,"column":0},"end":{"line":244,"column":2}},"82":{"start":{"line":233,"column":4},"end":{"line":233,"column":42}},"83":{"start":{"line":234,"column":4},"end":{"line":234,"column":46}},"84":{"start":{"line":235,"column":4},"end":{"line":235,"column":40}},"85":{"start":{"line":236,"column":4},"end":{"line":236,"column":62}},"86":{"start":{"line":237,"column":4},"end":{"line":237,"column":54}},"87":{"start":{"line":238,"column":4},"end":{"line":238,"column":46}},"88":{"start":{"line":239,"column":4},"end":{"line":239,"column":41}},"89":{"start":{"line":240,"column":4},"end":{"line":242,"column":5}},"90":{"start":{"line":241,"column":8},"end":{"line":241,"column":40}},"91":{"start":{"line":243,"column":4},"end":{"line":243,"column":53}},"92":{"start":{"line":246,"column":0},"end":{"line":246,"column":34}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":4},"end":{"line":45,"column":4}},{"start":{"line":45,"column":4},"end":{"line":45,"column":4}}]},"2":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":4}},{"start":{"line":51,"column":4},"end":{"line":51,"column":4}}]},"3":{"line":51,"type":"binary-expr","locations":[{"start":{"line":51,"column":8},"end":{"line":51,"column":45}},{"start":{"line":51,"column":49},"end":{"line":51,"column":86}}]},"4":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]},"5":{"line":65,"type":"binary-expr","locations":[{"start":{"line":65,"column":8},"end":{"line":65,"column":45}},{"start":{"line":65,"column":49},"end":{"line":65,"column":85}}]},"6":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":4},"end":{"line":85,"column":4}},{"start":{"line":85,"column":4},"end":{"line":85,"column":4}}]},"7":{"line":89,"type":"cond-expr","locations":[{"start":{"line":89,"column":34},"end":{"line":89,"column":49}},{"start":{"line":89,"column":52},"end":{"line":89,"column":58}}]},"8":{"line":91,"type":"cond-expr","locations":[{"start":{"line":91,"column":33},"end":{"line":91,"column":42}},{"start":{"line":91,"column":45},"end":{"line":91,"column":51}}]},"9":{"line":111,"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":111,"column":4}},{"start":{"line":111,"column":4},"end":{"line":111,"column":4}}]},"10":{"line":132,"type":"if","locations":[{"start":{"line":132,"column":4},"end":{"line":132,"column":4}},{"start":{"line":132,"column":4},"end":{"line":132,"column":4}}]},"11":{"line":149,"type":"if","locations":[{"start":{"line":149,"column":4},"end":{"line":149,"column":4}},{"start":{"line":149,"column":4},"end":{"line":149,"column":4}}]},"12":{"line":202,"type":"cond-expr","locations":[{"start":{"line":202,"column":33},"end":{"line":202,"column":43}},{"start":{"line":202,"column":46},"end":{"line":202,"column":67}}]},"13":{"line":218,"type":"if","locations":[{"start":{"line":218,"column":4},"end":{"line":218,"column":4}},{"start":{"line":218,"column":4},"end":{"line":218,"column":4}}]},"14":{"line":240,"type":"if","locations":[{"start":{"line":240,"column":4},"end":{"line":240,"column":4}},{"start":{"line":240,"column":4},"end":{"line":240,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":70}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":65}},"3":{"start":{"line":26,"column":0},"end":{"line":26,"column":72}},"4":{"start":{"line":27,"column":0},"end":{"line":27,"column":70}},"5":{"start":{"line":29,"column":0},"end":{"line":38,"column":2}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":0,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":0,"16":1,"17":1,"18":1,"19":1},"b":{"1":[0,1],"2":[0,1],"3":[1,0]},"f":{"1":1,"2":0,"3":0,"4":1},"fnMap":{"1":{"name":"(anonymous_1)","line":35,"loc":{"start":{"line":35,"column":15},"end":{"line":35,"column":57}}},"2":{"name":"(anonymous_2)","line":50,"loc":{"start":{"line":50,"column":47},"end":{"line":50,"column":71}}},"3":{"name":"(anonymous_3)","line":65,"loc":{"start":{"line":65,"column":24},"end":{"line":65,"column":66}}},"4":{"name":"(anonymous_4)","line":83,"loc":{"start":{"line":83,"column":14},"end":{"line":83,"column":64}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":29}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":61}},"3":{"start":{"line":35,"column":0},"end":{"line":54,"column":2}},"4":{"start":{"line":36,"column":4},"end":{"line":36,"column":28}},"5":{"start":{"line":37,"column":4},"end":{"line":39,"column":5}},"6":{"start":{"line":38,"column":8},"end":{"line":38,"column":48}},"7":{"start":{"line":41,"column":4},"end":{"line":43,"column":5}},"8":{"start":{"line":42,"column":8},"end":{"line":42,"column":77}},"9":{"start":{"line":45,"column":4},"end":{"line":48,"column":5}},"10":{"start":{"line":46,"column":8},"end":{"line":46,"column":65}},"11":{"start":{"line":47,"column":8},"end":{"line":47,"column":65}},"12":{"start":{"line":50,"column":4},"end":{"line":52,"column":7}},"13":{"start":{"line":51,"column":8},"end":{"line":51,"column":75}},"14":{"start":{"line":65,"column":0},"end":{"line":71,"column":2}},"15":{"start":{"line":66,"column":4},"end":{"line":70,"column":17}},"16":{"start":{"line":83,"column":0},"end":{"line":89,"column":2}},"17":{"start":{"line":84,"column":4},"end":{"line":84,"column":26}},"18":{"start":{"line":85,"column":4},"end":{"line":88,"column":17}},"19":{"start":{"line":91,"column":0},"end":{"line":91,"column":26}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":4}},{"start":{"line":37,"column":4},"end":{"line":37,"column":4}}]},"2":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":4}},{"start":{"line":41,"column":4},"end":{"line":41,"column":4}}]},"3":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":4},"end":{"line":45,"column":4}},{"start":{"line":45,"column":4},"end":{"line":45,"column":4}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js","s":{"1":1,"2":1,"3":154,"4":154,"5":154,"6":616,"7":616,"8":1,"9":154,"10":154,"11":154,"12":154,"13":154,"14":1},"b":{},"f":{"1":154,"2":616,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":25,"loc":{"start":{"line":25,"column":9},"end":{"line":25,"column":25}}},"2":{"name":"(anonymous_2)","line":30,"loc":{"start":{"line":30,"column":22},"end":{"line":30,"column":39}}},"3":{"name":"(anonymous_3)","line":36,"loc":{"start":{"line":36,"column":14},"end":{"line":36,"column":26}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":34}},"2":{"start":{"line":25,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":26,"column":4},"end":{"line":26,"column":48}},"4":{"start":{"line":28,"column":4},"end":{"line":28,"column":20}},"5":{"start":{"line":30,"column":4},"end":{"line":33,"column":7}},"6":{"start":{"line":31,"column":8},"end":{"line":31,"column":36}},"7":{"start":{"line":32,"column":8},"end":{"line":32,"column":55}},"8":{"start":{"line":36,"column":0},"end":{"line":64,"column":2}},"9":{"start":{"line":37,"column":4},"end":{"line":41,"column":7}},"10":{"start":{"line":43,"column":4},"end":{"line":47,"column":7}},"11":{"start":{"line":49,"column":4},"end":{"line":53,"column":7}},"12":{"start":{"line":55,"column":4},"end":{"line":59,"column":7}},"13":{"start":{"line":61,"column":4},"end":{"line":63,"column":6}},"14":{"start":{"line":66,"column":0},"end":{"line":66,"column":20}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js","s":{"1":1,"2":1,"3":1,"4":1,"5":154,"6":154,"7":154,"8":924,"9":924,"10":1,"11":154,"12":154,"13":154,"14":154,"15":154,"16":154,"17":154,"18":154,"19":1},"b":{},"f":{"1":154,"2":924,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":28,"loc":{"start":{"line":28,"column":10},"end":{"line":28,"column":26}}},"2":{"name":"(anonymous_2)","line":33,"loc":{"start":{"line":33,"column":22},"end":{"line":33,"column":39}}},"3":{"name":"(anonymous_3)","line":40,"loc":{"start":{"line":40,"column":14},"end":{"line":40,"column":26}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":34}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":42}},"3":{"start":{"line":25,"column":0},"end":{"line":25,"column":48}},"4":{"start":{"line":28,"column":0},"end":{"line":37,"column":2}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":48}},"6":{"start":{"line":31,"column":4},"end":{"line":31,"column":20}},"7":{"start":{"line":33,"column":4},"end":{"line":36,"column":7}},"8":{"start":{"line":34,"column":8},"end":{"line":34,"column":36}},"9":{"start":{"line":35,"column":8},"end":{"line":35,"column":55}},"10":{"start":{"line":40,"column":0},"end":{"line":103,"column":2}},"11":{"start":{"line":42,"column":4},"end":{"line":47,"column":7}},"12":{"start":{"line":49,"column":4},"end":{"line":53,"column":7}},"13":{"start":{"line":55,"column":4},"end":{"line":59,"column":7}},"14":{"start":{"line":61,"column":4},"end":{"line":65,"column":7}},"15":{"start":{"line":67,"column":4},"end":{"line":71,"column":7}},"16":{"start":{"line":73,"column":4},"end":{"line":79,"column":7}},"17":{"start":{"line":82,"column":4},"end":{"line":93,"column":7}},"18":{"start":{"line":95,"column":4},"end":{"line":102,"column":6}},"19":{"start":{"line":105,"column":0},"end":{"line":105,"column":21}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js","s":{"1":1,"2":1,"3":1,"4":154,"5":154,"6":154,"7":308,"8":308,"9":1,"10":154,"11":1},"b":{},"f":{"1":154,"2":308,"3":154},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":10},"end":{"line":26,"column":26}}},"2":{"name":"(anonymous_2)","line":31,"loc":{"start":{"line":31,"column":25},"end":{"line":31,"column":37}}},"3":{"name":"(anonymous_3)","line":38,"loc":{"start":{"line":38,"column":17},"end":{"line":38,"column":29}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"3":{"start":{"line":26,"column":0},"end":{"line":35,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":48}},"5":{"start":{"line":29,"column":4},"end":{"line":29,"column":20}},"6":{"start":{"line":31,"column":4},"end":{"line":34,"column":7}},"7":{"start":{"line":32,"column":8},"end":{"line":32,"column":31}},"8":{"start":{"line":33,"column":8},"end":{"line":33,"column":50}},"9":{"start":{"line":38,"column":0},"end":{"line":50,"column":2}},"10":{"start":{"line":39,"column":4},"end":{"line":49,"column":6}},"11":{"start":{"line":52,"column":0},"end":{"line":52,"column":21}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js","s":{"1":1,"2":167,"3":167,"4":1},"b":{},"f":{"1":167},"fnMap":{"1":{"name":"(anonymous_1)","line":3,"loc":{"start":{"line":3,"column":15},"end":{"line":3,"column":27}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":6,"column":2}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":33}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":36}},"4":{"start":{"line":8,"column":0},"end":{"line":8,"column":26}}},"branchMap":{}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":154,"7":157,"8":157,"9":1,"10":1,"11":1,"12":156,"13":157,"14":2,"15":2,"16":2,"17":157,"18":156,"19":618,"20":618,"21":154,"22":154,"23":154,"24":154,"25":154,"26":1},"b":{"1":[1,156],"2":[1,0],"3":[2,155],"4":[156,1]},"f":{"1":154,"2":157,"3":2,"4":618},"fnMap":{"1":{"name":"(anonymous_1)","line":8,"loc":{"start":{"line":8,"column":13},"end":{"line":8,"column":29}}},"2":{"name":"(anonymous_2)","line":10,"loc":{"start":{"line":10,"column":13},"end":{"line":10,"column":34}}},"3":{"name":"(anonymous_3)","line":23,"loc":{"start":{"line":23,"column":38},"end":{"line":23,"column":56}}},"4":{"name":"(anonymous_4)","line":30,"loc":{"start":{"line":30,"column":41},"end":{"line":30,"column":61}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":40}},"3":{"start":{"line":3,"column":0},"end":{"line":3,"column":33}},"4":{"start":{"line":4,"column":0},"end":{"line":4,"column":37}},"5":{"start":{"line":8,"column":0},"end":{"line":43,"column":2}},"6":{"start":{"line":10,"column":4},"end":{"line":35,"column":6}},"7":{"start":{"line":12,"column":8},"end":{"line":12,"column":27}},"8":{"start":{"line":13,"column":8},"end":{"line":20,"column":9}},"9":{"start":{"line":14,"column":12},"end":{"line":16,"column":13}},"10":{"start":{"line":15,"column":16},"end":{"line":15,"column":46}},"11":{"start":{"line":17,"column":12},"end":{"line":17,"column":54}},"12":{"start":{"line":19,"column":12},"end":{"line":19,"column":34}},"13":{"start":{"line":22,"column":8},"end":{"line":27,"column":9}},"14":{"start":{"line":23,"column":12},"end":{"line":26,"column":15}},"15":{"start":{"line":24,"column":16},"end":{"line":24,"column":54}},"16":{"start":{"line":25,"column":16},"end":{"line":25,"column":63}},"17":{"start":{"line":29,"column":8},"end":{"line":34,"column":9}},"18":{"start":{"line":30,"column":12},"end":{"line":33,"column":15}},"19":{"start":{"line":31,"column":16},"end":{"line":31,"column":56}},"20":{"start":{"line":32,"column":16},"end":{"line":32,"column":65}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":31}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":21}},"23":{"start":{"line":39,"column":4},"end":{"line":39,"column":23}},"24":{"start":{"line":40,"column":4},"end":{"line":40,"column":27}},"25":{"start":{"line":42,"column":4},"end":{"line":42,"column":14}},"26":{"start":{"line":47,"column":0},"end":{"line":47,"column":24}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":8},"end":{"line":13,"column":8}},{"start":{"line":13,"column":8},"end":{"line":13,"column":8}}]},"2":{"line":14,"type":"if","locations":[{"start":{"line":14,"column":12},"end":{"line":14,"column":12}},{"start":{"line":14,"column":12},"end":{"line":14,"column":12}}]},"3":{"line":22,"type":"if","locations":[{"start":{"line":22,"column":8},"end":{"line":22,"column":8}},{"start":{"line":22,"column":8},"end":{"line":22,"column":8}}]},"4":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":29,"column":8}},{"start":{"line":29,"column":8},"end":{"line":29,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js","s":{"1":1,"2":1,"3":1,"4":4,"5":4,"6":1,"7":8,"8":1,"9":4,"10":4,"11":4,"12":4,"13":8,"14":8,"15":8,"16":2,"17":6,"18":1},"b":{"1":[4,0],"2":[8,0],"3":[8,0],"4":[2,6],"5":[6,0]},"f":{"1":4,"2":8,"3":4,"4":4,"5":8,"6":8},"fnMap":{"1":{"name":"(anonymous_1)","line":26,"loc":{"start":{"line":26,"column":12},"end":{"line":26,"column":28}}},"2":{"name":"(anonymous_2)","line":37,"loc":{"start":{"line":37,"column":22},"end":{"line":37,"column":41}}},"3":{"name":"(anonymous_3)","line":46,"loc":{"start":{"line":46,"column":26},"end":{"line":46,"column":38}}},"4":{"name":"(anonymous_4)","line":48,"loc":{"start":{"line":48,"column":44},"end":{"line":48,"column":68}}},"5":{"name":"(anonymous_5)","line":50,"loc":{"start":{"line":50,"column":21},"end":{"line":50,"column":47}}},"6":{"name":"(anonymous_6)","line":52,"loc":{"start":{"line":52,"column":19},"end":{"line":52,"column":44}}}},"statementMap":{"1":{"start":{"line":23,"column":0},"end":{"line":23,"column":35}},"2":{"start":{"line":24,"column":0},"end":{"line":24,"column":33}},"3":{"start":{"line":26,"column":0},"end":{"line":29,"column":2}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":47}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":23}},"6":{"start":{"line":37,"column":0},"end":{"line":39,"column":2}},"7":{"start":{"line":38,"column":4},"end":{"line":38,"column":32}},"8":{"start":{"line":46,"column":0},"end":{"line":63,"column":2}},"9":{"start":{"line":47,"column":4},"end":{"line":47,"column":33}},"10":{"start":{"line":48,"column":4},"end":{"line":62,"column":7}},"11":{"start":{"line":49,"column":8},"end":{"line":49,"column":32}},"12":{"start":{"line":50,"column":8},"end":{"line":61,"column":11}},"13":{"start":{"line":51,"column":12},"end":{"line":51,"column":40}},"14":{"start":{"line":53,"column":12},"end":{"line":60,"column":13}},"15":{"start":{"line":55,"column":16},"end":{"line":57,"column":17}},"16":{"start":{"line":56,"column":20},"end":{"line":56,"column":84}},"17":{"start":{"line":59,"column":16},"end":{"line":59,"column":129}},"18":{"start":{"line":65,"column":0},"end":{"line":65,"column":23}}},"branchMap":{"1":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":18},"end":{"line":49,"column":25}},{"start":{"line":49,"column":29},"end":{"line":49,"column":31}}]},"2":{"line":51,"type":"binary-expr","locations":[{"start":{"line":51,"column":19},"end":{"line":51,"column":33}},{"start":{"line":51,"column":37},"end":{"line":51,"column":39}}]},"3":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":12},"end":{"line":53,"column":12}},{"start":{"line":53,"column":12},"end":{"line":53,"column":12}}]},"4":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":16},"end":{"line":55,"column":16}},{"start":{"line":55,"column":16},"end":{"line":55,"column":16}}]},"5":{"line":59,"type":"cond-expr","locations":[{"start":{"line":59,"column":73},"end":{"line":59,"column":110}},{"start":{"line":59,"column":113},"end":{"line":59,"column":126}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js","s":{"1":2,"2":2,"3":2,"4":0,"5":2,"6":0,"7":2,"8":2,"9":3,"10":2,"11":3,"12":3,"13":3,"14":3,"15":2,"16":2,"17":2,"18":2,"19":0,"20":2,"21":2,"22":2,"23":0,"24":2,"25":2,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":0,"34":1,"35":1,"36":1,"37":0,"38":2,"39":1,"40":1,"41":1,"42":0,"43":2},"b":{"1":[0,2],"2":[2,0],"3":[0,2],"4":[2,0],"5":[3,3],"6":[1,0]},"f":{"1":3,"2":3,"3":2,"4":1,"5":1,"6":1},"fnMap":{"1":{"name":"(anonymous_1)","line":48,"loc":{"start":{"line":48,"column":19},"end":{"line":48,"column":35}}},"2":{"name":"(anonymous_2)","line":59,"loc":{"start":{"line":59,"column":40},"end":{"line":59,"column":57}}},"3":{"name":"(anonymous_3)","line":73,"loc":{"start":{"line":73,"column":30},"end":{"line":73,"column":49}}},"4":{"name":"(anonymous_4)","line":100,"loc":{"start":{"line":100,"column":35},"end":{"line":100,"column":64}}},"5":{"name":"(anonymous_5)","line":103,"loc":{"start":{"line":103,"column":33},"end":{"line":103,"column":44}}},"6":{"name":"(anonymous_6)","line":131,"loc":{"start":{"line":131,"column":37},"end":{"line":131,"column":48}}}},"statementMap":{"1":{"start":{"line":27,"column":0},"end":{"line":27,"column":33}},"2":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"3":{"start":{"line":33,"column":0},"end":{"line":43,"column":1}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":66}},"5":{"start":{"line":37,"column":7},"end":{"line":43,"column":1}},"6":{"start":{"line":38,"column":4},"end":{"line":38,"column":43}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":62}},"8":{"start":{"line":48,"column":0},"end":{"line":50,"column":2}},"9":{"start":{"line":49,"column":4},"end":{"line":49,"column":48}},"10":{"start":{"line":59,"column":0},"end":{"line":64,"column":2}},"11":{"start":{"line":60,"column":4},"end":{"line":60,"column":39}},"12":{"start":{"line":61,"column":4},"end":{"line":61,"column":43}},"13":{"start":{"line":62,"column":4},"end":{"line":62,"column":64}},"14":{"start":{"line":63,"column":4},"end":{"line":63,"column":19}},"15":{"start":{"line":73,"column":0},"end":{"line":91,"column":2}},"16":{"start":{"line":74,"column":4},"end":{"line":74,"column":45}},"17":{"start":{"line":76,"column":4},"end":{"line":80,"column":5}},"18":{"start":{"line":77,"column":8},"end":{"line":77,"column":46}},"19":{"start":{"line":79,"column":8},"end":{"line":79,"column":50}},"20":{"start":{"line":82,"column":4},"end":{"line":82,"column":38}},"21":{"start":{"line":84,"column":4},"end":{"line":88,"column":5}},"22":{"start":{"line":85,"column":8},"end":{"line":85,"column":36}},"23":{"start":{"line":87,"column":8},"end":{"line":87,"column":59}},"24":{"start":{"line":90,"column":4},"end":{"line":90,"column":18}},"25":{"start":{"line":100,"column":0},"end":{"line":123,"column":2}},"26":{"start":{"line":101,"column":4},"end":{"line":101,"column":44}},"27":{"start":{"line":103,"column":4},"end":{"line":116,"column":6}},"28":{"start":{"line":104,"column":8},"end":{"line":115,"column":9}},"29":{"start":{"line":105,"column":12},"end":{"line":105,"column":46}},"30":{"start":{"line":106,"column":12},"end":{"line":106,"column":29}},"31":{"start":{"line":108,"column":12},"end":{"line":112,"column":13}},"32":{"start":{"line":109,"column":16},"end":{"line":109,"column":44}},"33":{"start":{"line":111,"column":16},"end":{"line":111,"column":69}},"34":{"start":{"line":114,"column":12},"end":{"line":114,"column":36}},"35":{"start":{"line":118,"column":4},"end":{"line":122,"column":5}},"36":{"start":{"line":119,"column":8},"end":{"line":119,"column":46}},"37":{"start":{"line":121,"column":8},"end":{"line":121,"column":54}},"38":{"start":{"line":131,"column":0},"end":{"line":143,"column":2}},"39":{"start":{"line":132,"column":4},"end":{"line":142,"column":5}},"40":{"start":{"line":133,"column":8},"end":{"line":138,"column":11}},"41":{"start":{"line":139,"column":8},"end":{"line":139,"column":20}},"42":{"start":{"line":141,"column":8},"end":{"line":141,"column":21}},"43":{"start":{"line":145,"column":0},"end":{"line":145,"column":30}}},"branchMap":{"1":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},{"start":{"line":33,"column":0},"end":{"line":33,"column":0}}]},"2":{"line":33,"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":33}},{"start":{"line":33,"column":37},"end":{"line":33,"column":52}}]},"3":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":7},"end":{"line":37,"column":7}},{"start":{"line":37,"column":7},"end":{"line":37,"column":7}}]},"4":{"line":37,"type":"binary-expr","locations":[{"start":{"line":37,"column":11},"end":{"line":37,"column":40}},{"start":{"line":37,"column":44},"end":{"line":37,"column":65}}]},"5":{"line":49,"type":"binary-expr","locations":[{"start":{"line":49,"column":16},"end":{"line":49,"column":20}},{"start":{"line":49,"column":24},"end":{"line":49,"column":47}}]},"6":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":8}},{"start":{"line":104,"column":8},"end":{"line":104,"column":8}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js","s":{"1":2,"2":2,"3":2,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5,"10":5,"11":2,"12":2,"13":2,"14":0,"15":0,"16":0,"17":2,"18":2,"19":0,"20":0,"21":0,"22":2,"23":1,"24":1,"25":2,"26":5,"27":5,"28":0,"29":5,"30":0,"31":5,"32":0,"33":2,"34":2,"35":2,"36":2,"37":2,"38":0,"39":2,"40":2,"41":2,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":1,"55":1,"56":1,"57":1,"58":2,"59":0,"60":0,"61":0,"62":0,"63":2,"64":3,"65":3,"66":2,"67":3,"68":2,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":0,"77":1,"78":0,"79":2,"80":1,"81":1,"82":1,"83":1,"84":2,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":2,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":2,"102":0,"103":0,"104":0,"105":0,"106":0,"107":2,"108":0,"109":0,"110":0,"111":0,"112":0,"113":2},"b":{"1":[0,2],"2":[0,0],"3":[0,2],"4":[2,0],"5":[0,0],"6":[1,1],"7":[0,2],"8":[2,0],"9":[1,0],"10":[1,0],"11":[0,0],"12":[2,1],"13":[1,0],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0]},"f":{"1":5,"2":2,"3":2,"4":0,"5":0,"6":5,"7":0,"8":0,"9":0,"10":2,"11":2,"12":0,"13":1,"14":0,"15":3,"16":1,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0},"fnMap":{"1":{"name":"(anonymous_1)","line":29,"loc":{"start":{"line":29,"column":18},"end":{"line":29,"column":39}}},"2":{"name":"(anonymous_2)","line":41,"loc":{"start":{"line":41,"column":31},"end":{"line":41,"column":46}}},"3":{"name":"(anonymous_3)","line":44,"loc":{"start":{"line":44,"column":54},"end":{"line":44,"column":70}}},"4":{"name":"(anonymous_4)","line":50,"loc":{"start":{"line":50,"column":31},"end":{"line":50,"column":45}}},"5":{"name":"(anonymous_5)","line":60,"loc":{"start":{"line":60,"column":52},"end":{"line":60,"column":70}}},"6":{"name":"(anonymous_6)","line":79,"loc":{"start":{"line":79,"column":41},"end":{"line":79,"column":51}}},"7":{"name":"(anonymous_7)","line":82,"loc":{"start":{"line":82,"column":32},"end":{"line":82,"column":43}}},"8":{"name":"(anonymous_8)","line":86,"loc":{"start":{"line":86,"column":30},"end":{"line":86,"column":40}}},"9":{"name":"(anonymous_9)","line":90,"loc":{"start":{"line":90,"column":34},"end":{"line":90,"column":44}}},"10":{"name":"(anonymous_10)","line":101,"loc":{"start":{"line":101,"column":39},"end":{"line":101,"column":54}}},"11":{"name":"(anonymous_11)","line":113,"loc":{"start":{"line":113,"column":26},"end":{"line":113,"column":40}}},"12":{"name":"(anonymous_12)","line":130,"loc":{"start":{"line":130,"column":48},"end":{"line":130,"column":58}}},"13":{"name":"(anonymous_13)","line":156,"loc":{"start":{"line":156,"column":45},"end":{"line":156,"column":73}}},"14":{"name":"(anonymous_14)","line":169,"loc":{"start":{"line":169,"column":33},"end":{"line":169,"column":44}}},"15":{"name":"(anonymous_15)","line":184,"loc":{"start":{"line":184,"column":36},"end":{"line":184,"column":47}}},"16":{"name":"(anonymous_16)","line":194,"loc":{"start":{"line":194,"column":29},"end":{"line":194,"column":48}}},"17":{"name":"(anonymous_17)","line":218,"loc":{"start":{"line":218,"column":34},"end":{"line":218,"column":63}}},"18":{"name":"(anonymous_18)","line":235,"loc":{"start":{"line":235,"column":27},"end":{"line":235,"column":53}}},"19":{"name":"(anonymous_19)","line":258,"loc":{"start":{"line":258,"column":39},"end":{"line":258,"column":65}}},"20":{"name":"(anonymous_20)","line":263,"loc":{"start":{"line":263,"column":47},"end":{"line":263,"column":66}}},"21":{"name":"(anonymous_21)","line":281,"loc":{"start":{"line":281,"column":43},"end":{"line":281,"column":59}}},"22":{"name":"(anonymous_22)","line":298,"loc":{"start":{"line":298,"column":30},"end":{"line":298,"column":50}}}},"statementMap":{"1":{"start":{"line":25,"column":0},"end":{"line":25,"column":38}},"2":{"start":{"line":26,"column":0},"end":{"line":26,"column":33}},"3":{"start":{"line":29,"column":0},"end":{"line":72,"column":2}},"4":{"start":{"line":30,"column":4},"end":{"line":30,"column":21}},"5":{"start":{"line":31,"column":4},"end":{"line":31,"column":32}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":36}},"7":{"start":{"line":33,"column":4},"end":{"line":33,"column":21}},"8":{"start":{"line":35,"column":4},"end":{"line":35,"column":53}},"9":{"start":{"line":37,"column":4},"end":{"line":37,"column":28}},"10":{"start":{"line":41,"column":4},"end":{"line":71,"column":7}},"11":{"start":{"line":44,"column":8},"end":{"line":70,"column":11}},"12":{"start":{"line":46,"column":12},"end":{"line":46,"column":26}},"13":{"start":{"line":49,"column":12},"end":{"line":56,"column":13}},"14":{"start":{"line":50,"column":16},"end":{"line":53,"column":19}},"15":{"start":{"line":51,"column":20},"end":{"line":52,"column":37}},"16":{"start":{"line":52,"column":24},"end":{"line":52,"column":37}},"17":{"start":{"line":55,"column":16},"end":{"line":55,"column":31}},"18":{"start":{"line":59,"column":12},"end":{"line":69,"column":13}},"19":{"start":{"line":60,"column":16},"end":{"line":63,"column":19}},"20":{"start":{"line":61,"column":20},"end":{"line":62,"column":47}},"21":{"start":{"line":62,"column":24},"end":{"line":62,"column":47}},"22":{"start":{"line":66,"column":19},"end":{"line":69,"column":13}},"23":{"start":{"line":67,"column":16},"end":{"line":67,"column":58}},"24":{"start":{"line":68,"column":16},"end":{"line":68,"column":51}},"25":{"start":{"line":79,"column":0},"end":{"line":93,"column":2}},"26":{"start":{"line":80,"column":4},"end":{"line":80,"column":21}},"27":{"start":{"line":82,"column":4},"end":{"line":84,"column":7}},"28":{"start":{"line":83,"column":8},"end":{"line":83,"column":25}},"29":{"start":{"line":86,"column":4},"end":{"line":88,"column":7}},"30":{"start":{"line":87,"column":8},"end":{"line":87,"column":25}},"31":{"start":{"line":90,"column":4},"end":{"line":92,"column":7}},"32":{"start":{"line":91,"column":8},"end":{"line":91,"column":25}},"33":{"start":{"line":101,"column":0},"end":{"line":147,"column":2}},"34":{"start":{"line":102,"column":4},"end":{"line":103,"column":26}},"35":{"start":{"line":106,"column":4},"end":{"line":111,"column":23}},"36":{"start":{"line":113,"column":4},"end":{"line":144,"column":7}},"37":{"start":{"line":116,"column":8},"end":{"line":117,"column":42}},"38":{"start":{"line":117,"column":12},"end":{"line":117,"column":42}},"39":{"start":{"line":119,"column":8},"end":{"line":119,"column":26}},"40":{"start":{"line":121,"column":8},"end":{"line":136,"column":9}},"41":{"start":{"line":122,"column":12},"end":{"line":122,"column":38}},"42":{"start":{"line":126,"column":12},"end":{"line":126,"column":35}},"43":{"start":{"line":129,"column":12},"end":{"line":129,"column":49}},"44":{"start":{"line":130,"column":12},"end":{"line":133,"column":26}},"45":{"start":{"line":131,"column":16},"end":{"line":131,"column":32}},"46":{"start":{"line":132,"column":16},"end":{"line":132,"column":51}},"47":{"start":{"line":135,"column":12},"end":{"line":135,"column":19}},"48":{"start":{"line":139,"column":8},"end":{"line":139,"column":45}},"49":{"start":{"line":140,"column":8},"end":{"line":140,"column":31}},"50":{"start":{"line":142,"column":8},"end":{"line":143,"column":38}},"51":{"start":{"line":143,"column":12},"end":{"line":143,"column":38}},"52":{"start":{"line":146,"column":4},"end":{"line":146,"column":24}},"53":{"start":{"line":156,"column":0},"end":{"line":162,"column":2}},"54":{"start":{"line":157,"column":4},"end":{"line":157,"column":41}},"55":{"start":{"line":158,"column":4},"end":{"line":158,"column":53}},"56":{"start":{"line":160,"column":4},"end":{"line":160,"column":42}},"57":{"start":{"line":161,"column":4},"end":{"line":161,"column":47}},"58":{"start":{"line":169,"column":0},"end":{"line":176,"column":2}},"59":{"start":{"line":170,"column":4},"end":{"line":175,"column":5}},"60":{"start":{"line":171,"column":8},"end":{"line":174,"column":9}},"61":{"start":{"line":172,"column":12},"end":{"line":172,"column":76}},"62":{"start":{"line":173,"column":12},"end":{"line":173,"column":47}},"63":{"start":{"line":184,"column":0},"end":{"line":192,"column":2}},"64":{"start":{"line":185,"column":4},"end":{"line":185,"column":21}},"65":{"start":{"line":188,"column":4},"end":{"line":189,"column":53}},"66":{"start":{"line":189,"column":8},"end":{"line":189,"column":53}},"67":{"start":{"line":191,"column":4},"end":{"line":191,"column":38}},"68":{"start":{"line":194,"column":0},"end":{"line":216,"column":2}},"69":{"start":{"line":196,"column":4},"end":{"line":215,"column":5}},"70":{"start":{"line":197,"column":8},"end":{"line":197,"column":19}},"71":{"start":{"line":200,"column":8},"end":{"line":201,"column":55}},"72":{"start":{"line":201,"column":12},"end":{"line":201,"column":55}},"73":{"start":{"line":203,"column":8},"end":{"line":203,"column":70}},"74":{"start":{"line":205,"column":8},"end":{"line":209,"column":9}},"75":{"start":{"line":206,"column":12},"end":{"line":206,"column":38}},"76":{"start":{"line":208,"column":12},"end":{"line":208,"column":47}},"77":{"start":{"line":211,"column":8},"end":{"line":211,"column":22}},"78":{"start":{"line":214,"column":8},"end":{"line":214,"column":143}},"79":{"start":{"line":218,"column":0},"end":{"line":226,"column":2}},"80":{"start":{"line":220,"column":4},"end":{"line":221,"column":51}},"81":{"start":{"line":221,"column":8},"end":{"line":221,"column":51}},"82":{"start":{"line":224,"column":4},"end":{"line":224,"column":51}},"83":{"start":{"line":225,"column":4},"end":{"line":225,"column":49}},"84":{"start":{"line":235,"column":0},"end":{"line":249,"column":2}},"85":{"start":{"line":237,"column":4},"end":{"line":238,"column":77}},"86":{"start":{"line":238,"column":8},"end":{"line":238,"column":77}},"87":{"start":{"line":240,"column":4},"end":{"line":248,"column":5}},"88":{"start":{"line":242,"column":12},"end":{"line":242,"column":54}},"89":{"start":{"line":243,"column":12},"end":{"line":243,"column":18}},"90":{"start":{"line":246,"column":12},"end":{"line":246,"column":47}},"91":{"start":{"line":247,"column":12},"end":{"line":247,"column":18}},"92":{"start":{"line":258,"column":0},"end":{"line":273,"column":2}},"93":{"start":{"line":259,"column":4},"end":{"line":259,"column":21}},"94":{"start":{"line":261,"column":4},"end":{"line":272,"column":5}},"95":{"start":{"line":263,"column":12},"end":{"line":266,"column":15}},"96":{"start":{"line":264,"column":16},"end":{"line":265,"column":65}},"97":{"start":{"line":265,"column":20},"end":{"line":265,"column":65}},"98":{"start":{"line":267,"column":12},"end":{"line":267,"column":18}},"99":{"start":{"line":270,"column":12},"end":{"line":270,"column":59}},"100":{"start":{"line":271,"column":12},"end":{"line":271,"column":18}},"101":{"start":{"line":281,"column":0},"end":{"line":291,"column":2}},"102":{"start":{"line":282,"column":4},"end":{"line":290,"column":5}},"103":{"start":{"line":284,"column":12},"end":{"line":284,"column":44}},"104":{"start":{"line":285,"column":12},"end":{"line":285,"column":18}},"105":{"start":{"line":288,"column":12},"end":{"line":288,"column":53}},"106":{"start":{"line":289,"column":12},"end":{"line":289,"column":18}},"107":{"start":{"line":298,"column":0},"end":{"line":306,"column":2}},"108":{"start":{"line":299,"column":4},"end":{"line":299,"column":20}},"109":{"start":{"line":300,"column":4},"end":{"line":300,"column":36}},"110":{"start":{"line":302,"column":4},"end":{"line":302,"column":48}},"111":{"start":{"line":303,"column":4},"end":{"line":303,"column":46}},"112":{"start":{"line":305,"column":4},"end":{"line":305,"column":28}},"113":{"start":{"line":308,"column":0},"end":{"line":308,"column":29}}},"branchMap":{"1":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":12},"end":{"line":49,"column":12}},{"start":{"line":49,"column":12},"end":{"line":49,"column":12}}]},"2":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":20},"end":{"line":51,"column":20}},{"start":{"line":51,"column":20},"end":{"line":51,"column":20}}]},"3":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":12},"end":{"line":59,"column":12}},{"start":{"line":59,"column":12},"end":{"line":59,"column":12}}]},"4":{"line":59,"type":"binary-expr","locations":[{"start":{"line":59,"column":15},"end":{"line":59,"column":18}},{"start":{"line":59,"column":22},"end":{"line":59,"column":58}}]},"5":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":20},"end":{"line":61,"column":20}},{"start":{"line":61,"column":20},"end":{"line":61,"column":20}}]},"6":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":19},"end":{"line":66,"column":19}},{"start":{"line":66,"column":19},"end":{"line":66,"column":19}}]},"7":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":8}},{"start":{"line":116,"column":8},"end":{"line":116,"column":8}}]},"8":{"line":142,"type":"if","locations":[{"start":{"line":142,"column":8},"end":{"line":142,"column":8}},{"start":{"line":142,"column":8},"end":{"line":142,"column":8}}]},"9":{"line":157,"type":"binary-expr","locations":[{"start":{"line":157,"column":13},"end":{"line":157,"column":23}},{"start":{"line":157,"column":27},"end":{"line":157,"column":40}}]},"10":{"line":158,"type":"binary-expr","locations":[{"start":{"line":158,"column":17},"end":{"line":158,"column":31}},{"start":{"line":158,"column":35},"end":{"line":158,"column":52}}]},"11":{"line":171,"type":"if","locations":[{"start":{"line":171,"column":8},"end":{"line":171,"column":8}},{"start":{"line":171,"column":8},"end":{"line":171,"column":8}}]},"12":{"line":188,"type":"if","locations":[{"start":{"line":188,"column":4},"end":{"line":188,"column":4}},{"start":{"line":188,"column":4},"end":{"line":188,"column":4}}]},"13":{"line":196,"type":"if","locations":[{"start":{"line":196,"column":4},"end":{"line":196,"column":4}},{"start":{"line":196,"column":4},"end":{"line":196,"column":4}}]},"14":{"line":200,"type":"if","locations":[{"start":{"line":200,"column":8},"end":{"line":200,"column":8}},{"start":{"line":200,"column":8},"end":{"line":200,"column":8}}]},"15":{"line":220,"type":"if","locations":[{"start":{"line":220,"column":4},"end":{"line":220,"column":4}},{"start":{"line":220,"column":4},"end":{"line":220,"column":4}}]},"16":{"line":237,"type":"if","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":4}},{"start":{"line":237,"column":4},"end":{"line":237,"column":4}}]},"17":{"line":240,"type":"switch","locations":[{"start":{"line":241,"column":8},"end":{"line":243,"column":18}},{"start":{"line":245,"column":8},"end":{"line":247,"column":18}}]},"18":{"line":261,"type":"switch","locations":[{"start":{"line":262,"column":8},"end":{"line":267,"column":18}},{"start":{"line":269,"column":8},"end":{"line":271,"column":18}}]},"19":{"line":264,"type":"if","locations":[{"start":{"line":264,"column":16},"end":{"line":264,"column":16}},{"start":{"line":264,"column":16},"end":{"line":264,"column":16}}]},"20":{"line":282,"type":"switch","locations":[{"start":{"line":283,"column":8},"end":{"line":285,"column":18}},{"start":{"line":287,"column":8},"end":{"line":289,"column":18}}]}}},"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js":{"path":"/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":1,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":1,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":1,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":1,"113":1,"114":1,"115":1,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":1,"125":1,"126":0,"127":0,"128":1,"129":1,"130":1,"131":0,"132":0,"133":0,"134":0,"135":0},"b":{"1":[1,1],"2":[1,1,1,1],"3":[1,1],"4":[0,1],"5":[1,1],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,1],"29":[1,0,0],"30":[1,0],"31":[1,1],"32":[1,0],"33":[0,0]},"f":{"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"fnMap":{"1":{"name":"(anonymous_1)","line":2,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":17}}},"2":{"name":"ucs2decode","line":23,"loc":{"start":{"line":23,"column":1},"end":{"line":23,"column":29}}},"3":{"name":"ucs2encode","line":50,"loc":{"start":{"line":50,"column":1},"end":{"line":50,"column":28}}},"4":{"name":"checkScalarValue","line":67,"loc":{"start":{"line":67,"column":1},"end":{"line":67,"column":38}}},"5":{"name":"createByte","line":77,"loc":{"start":{"line":77,"column":1},"end":{"line":77,"column":39}}},"6":{"name":"encodeCodePoint","line":81,"loc":{"start":{"line":81,"column":1},"end":{"line":81,"column":37}}},"7":{"name":"utf8encode","line":103,"loc":{"start":{"line":103,"column":1},"end":{"line":103,"column":29}}},"8":{"name":"readContinuationByte","line":118,"loc":{"start":{"line":118,"column":1},"end":{"line":118,"column":33}}},"9":{"name":"decodeSymbol","line":134,"loc":{"start":{"line":134,"column":1},"end":{"line":134,"column":25}}},"10":{"name":"utf8decode","line":200,"loc":{"start":{"line":200,"column":1},"end":{"line":200,"column":33}}},"11":{"name":"(anonymous_11)","line":227,"loc":{"start":{"line":227,"column":9},"end":{"line":227,"column":20}}}},"statementMap":{"1":{"start":{"line":2,"column":1},"end":{"line":244,"column":9}},"2":{"start":{"line":5,"column":1},"end":{"line":5,"column":57}},"3":{"start":{"line":8,"column":1},"end":{"line":9,"column":42}},"4":{"start":{"line":13,"column":1},"end":{"line":13,"column":54}},"5":{"start":{"line":14,"column":1},"end":{"line":16,"column":2}},"6":{"start":{"line":15,"column":2},"end":{"line":15,"column":20}},"7":{"start":{"line":20,"column":1},"end":{"line":20,"column":46}},"8":{"start":{"line":23,"column":1},"end":{"line":47,"column":2}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":18}},"10":{"start":{"line":25,"column":2},"end":{"line":25,"column":18}},"11":{"start":{"line":26,"column":2},"end":{"line":26,"column":29}},"12":{"start":{"line":27,"column":2},"end":{"line":27,"column":12}},"13":{"start":{"line":28,"column":2},"end":{"line":28,"column":12}},"14":{"start":{"line":29,"column":2},"end":{"line":45,"column":3}},"15":{"start":{"line":30,"column":3},"end":{"line":30,"column":40}},"16":{"start":{"line":31,"column":3},"end":{"line":44,"column":4}},"17":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"18":{"start":{"line":34,"column":4},"end":{"line":41,"column":5}},"19":{"start":{"line":35,"column":5},"end":{"line":35,"column":70}},"20":{"start":{"line":39,"column":5},"end":{"line":39,"column":24}},"21":{"start":{"line":40,"column":5},"end":{"line":40,"column":15}},"22":{"start":{"line":43,"column":4},"end":{"line":43,"column":23}},"23":{"start":{"line":46,"column":2},"end":{"line":46,"column":16}},"24":{"start":{"line":50,"column":1},"end":{"line":65,"column":2}},"25":{"start":{"line":51,"column":2},"end":{"line":51,"column":28}},"26":{"start":{"line":52,"column":2},"end":{"line":52,"column":17}},"27":{"start":{"line":53,"column":2},"end":{"line":53,"column":12}},"28":{"start":{"line":54,"column":2},"end":{"line":54,"column":18}},"29":{"start":{"line":55,"column":2},"end":{"line":63,"column":3}},"30":{"start":{"line":56,"column":3},"end":{"line":56,"column":24}},"31":{"start":{"line":57,"column":3},"end":{"line":61,"column":4}},"32":{"start":{"line":58,"column":4},"end":{"line":58,"column":21}},"33":{"start":{"line":59,"column":4},"end":{"line":59,"column":64}},"34":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"35":{"start":{"line":62,"column":3},"end":{"line":62,"column":39}},"36":{"start":{"line":64,"column":2},"end":{"line":64,"column":16}},"37":{"start":{"line":67,"column":1},"end":{"line":74,"column":2}},"38":{"start":{"line":68,"column":2},"end":{"line":73,"column":3}},"39":{"start":{"line":69,"column":3},"end":{"line":72,"column":5}},"40":{"start":{"line":77,"column":1},"end":{"line":79,"column":2}},"41":{"start":{"line":78,"column":2},"end":{"line":78,"column":66}},"42":{"start":{"line":81,"column":1},"end":{"line":101,"column":2}},"43":{"start":{"line":82,"column":2},"end":{"line":84,"column":3}},"44":{"start":{"line":83,"column":3},"end":{"line":83,"column":40}},"45":{"start":{"line":85,"column":2},"end":{"line":85,"column":18}},"46":{"start":{"line":86,"column":2},"end":{"line":98,"column":3}},"47":{"start":{"line":87,"column":3},"end":{"line":87,"column":65}},"48":{"start":{"line":89,"column":7},"end":{"line":98,"column":3}},"49":{"start":{"line":90,"column":3},"end":{"line":90,"column":31}},"50":{"start":{"line":91,"column":3},"end":{"line":91,"column":66}},"51":{"start":{"line":92,"column":3},"end":{"line":92,"column":38}},"52":{"start":{"line":94,"column":7},"end":{"line":98,"column":3}},"53":{"start":{"line":95,"column":3},"end":{"line":95,"column":66}},"54":{"start":{"line":96,"column":3},"end":{"line":96,"column":39}},"55":{"start":{"line":97,"column":3},"end":{"line":97,"column":38}},"56":{"start":{"line":99,"column":2},"end":{"line":99,"column":58}},"57":{"start":{"line":100,"column":2},"end":{"line":100,"column":16}},"58":{"start":{"line":103,"column":1},"end":{"line":114,"column":2}},"59":{"start":{"line":104,"column":2},"end":{"line":104,"column":38}},"60":{"start":{"line":105,"column":2},"end":{"line":105,"column":33}},"61":{"start":{"line":106,"column":2},"end":{"line":106,"column":17}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":16}},"63":{"start":{"line":108,"column":2},"end":{"line":108,"column":22}},"64":{"start":{"line":109,"column":2},"end":{"line":112,"column":3}},"65":{"start":{"line":110,"column":3},"end":{"line":110,"column":33}},"66":{"start":{"line":111,"column":3},"end":{"line":111,"column":44}},"67":{"start":{"line":113,"column":2},"end":{"line":113,"column":20}},"68":{"start":{"line":118,"column":1},"end":{"line":132,"column":2}},"69":{"start":{"line":119,"column":2},"end":{"line":121,"column":3}},"70":{"start":{"line":120,"column":3},"end":{"line":120,"column":37}},"71":{"start":{"line":123,"column":2},"end":{"line":123,"column":53}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":14}},"73":{"start":{"line":126,"column":2},"end":{"line":128,"column":3}},"74":{"start":{"line":127,"column":3},"end":{"line":127,"column":34}},"75":{"start":{"line":131,"column":2},"end":{"line":131,"column":43}},"76":{"start":{"line":134,"column":1},"end":{"line":195,"column":2}},"77":{"start":{"line":135,"column":2},"end":{"line":135,"column":12}},"78":{"start":{"line":136,"column":2},"end":{"line":136,"column":12}},"79":{"start":{"line":137,"column":2},"end":{"line":137,"column":12}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":12}},"81":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}},"82":{"start":{"line":141,"column":2},"end":{"line":143,"column":3}},"83":{"start":{"line":142,"column":3},"end":{"line":142,"column":37}},"84":{"start":{"line":145,"column":2},"end":{"line":147,"column":3}},"85":{"start":{"line":146,"column":3},"end":{"line":146,"column":16}},"86":{"start":{"line":150,"column":2},"end":{"line":150,"column":38}},"87":{"start":{"line":151,"column":2},"end":{"line":151,"column":14}},"88":{"start":{"line":154,"column":2},"end":{"line":156,"column":3}},"89":{"start":{"line":155,"column":3},"end":{"line":155,"column":16}},"90":{"start":{"line":159,"column":2},"end":{"line":167,"column":3}},"91":{"start":{"line":160,"column":3},"end":{"line":160,"column":38}},"92":{"start":{"line":161,"column":3},"end":{"line":161,"column":45}},"93":{"start":{"line":162,"column":3},"end":{"line":166,"column":4}},"94":{"start":{"line":163,"column":4},"end":{"line":163,"column":21}},"95":{"start":{"line":165,"column":4},"end":{"line":165,"column":45}},"96":{"start":{"line":170,"column":2},"end":{"line":180,"column":3}},"97":{"start":{"line":171,"column":3},"end":{"line":171,"column":34}},"98":{"start":{"line":172,"column":3},"end":{"line":172,"column":34}},"99":{"start":{"line":173,"column":3},"end":{"line":173,"column":61}},"100":{"start":{"line":174,"column":3},"end":{"line":179,"column":4}},"101":{"start":{"line":175,"column":4},"end":{"line":175,"column":32}},"102":{"start":{"line":176,"column":4},"end":{"line":176,"column":21}},"103":{"start":{"line":178,"column":4},"end":{"line":178,"column":45}},"104":{"start":{"line":183,"column":2},"end":{"line":192,"column":3}},"105":{"start":{"line":184,"column":3},"end":{"line":184,"column":34}},"106":{"start":{"line":185,"column":3},"end":{"line":185,"column":34}},"107":{"start":{"line":186,"column":3},"end":{"line":186,"column":34}},"108":{"start":{"line":187,"column":3},"end":{"line":188,"column":28}},"109":{"start":{"line":189,"column":3},"end":{"line":191,"column":4}},"110":{"start":{"line":190,"column":4},"end":{"line":190,"column":21}},"111":{"start":{"line":194,"column":2},"end":{"line":194,"column":40}},"112":{"start":{"line":197,"column":1},"end":{"line":197,"column":15}},"113":{"start":{"line":198,"column":1},"end":{"line":198,"column":15}},"114":{"start":{"line":199,"column":1},"end":{"line":199,"column":15}},"115":{"start":{"line":200,"column":1},"end":{"line":210,"column":2}},"116":{"start":{"line":201,"column":2},"end":{"line":201,"column":37}},"117":{"start":{"line":202,"column":2},"end":{"line":202,"column":31}},"118":{"start":{"line":203,"column":2},"end":{"line":203,"column":16}},"119":{"start":{"line":204,"column":2},"end":{"line":204,"column":22}},"120":{"start":{"line":205,"column":2},"end":{"line":205,"column":10}},"121":{"start":{"line":206,"column":2},"end":{"line":208,"column":3}},"122":{"start":{"line":207,"column":3},"end":{"line":207,"column":24}},"123":{"start":{"line":209,"column":2},"end":{"line":209,"column":32}},"124":{"start":{"line":214,"column":1},"end":{"line":218,"column":3}},"125":{"start":{"line":222,"column":1},"end":{"line":242,"column":2}},"126":{"start":{"line":227,"column":2},"end":{"line":229,"column":5}},"127":{"start":{"line":228,"column":3},"end":{"line":228,"column":15}},"128":{"start":{"line":230,"column":8},"end":{"line":242,"column":2}},"129":{"start":{"line":231,"column":2},"end":{"line":239,"column":3}},"130":{"start":{"line":232,"column":3},"end":{"line":232,"column":29}},"131":{"start":{"line":234,"column":3},"end":{"line":234,"column":19}},"132":{"start":{"line":235,"column":3},"end":{"line":235,"column":46}},"133":{"start":{"line":236,"column":3},"end":{"line":238,"column":4}},"134":{"start":{"line":237,"column":4},"end":{"line":237,"column":69}},"135":{"start":{"line":241,"column":2},"end":{"line":241,"column":19}}},"branchMap":{"1":{"line":5,"type":"binary-expr","locations":[{"start":{"line":5,"column":19},"end":{"line":5,"column":45}},{"start":{"line":5,"column":49},"end":{"line":5,"column":56}}]},"2":{"line":8,"type":"binary-expr","locations":[{"start":{"line":8,"column":18},"end":{"line":8,"column":43}},{"start":{"line":8,"column":47},"end":{"line":8,"column":53}},{"start":{"line":9,"column":2},"end":{"line":9,"column":31}},{"start":{"line":9,"column":35},"end":{"line":9,"column":41}}]},"3":{"line":13,"type":"binary-expr","locations":[{"start":{"line":13,"column":18},"end":{"line":13,"column":43}},{"start":{"line":13,"column":47},"end":{"line":13,"column":53}}]},"4":{"line":14,"type":"if","locations":[{"start":{"line":14,"column":1},"end":{"line":14,"column":1}},{"start":{"line":14,"column":1},"end":{"line":14,"column":1}}]},"5":{"line":14,"type":"binary-expr","locations":[{"start":{"line":14,"column":5},"end":{"line":14,"column":37}},{"start":{"line":14,"column":41},"end":{"line":14,"column":73}}]},"6":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":3},"end":{"line":31,"column":3}},{"start":{"line":31,"column":3},"end":{"line":31,"column":3}}]},"7":{"line":31,"type":"binary-expr","locations":[{"start":{"line":31,"column":7},"end":{"line":31,"column":22}},{"start":{"line":31,"column":26},"end":{"line":31,"column":41}},{"start":{"line":31,"column":45},"end":{"line":31,"column":61}}]},"8":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"9":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":3},"end":{"line":57,"column":3}},{"start":{"line":57,"column":3},"end":{"line":57,"column":3}}]},"10":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":2},"end":{"line":68,"column":2}},{"start":{"line":68,"column":2},"end":{"line":68,"column":2}}]},"11":{"line":68,"type":"binary-expr","locations":[{"start":{"line":68,"column":6},"end":{"line":68,"column":25}},{"start":{"line":68,"column":29},"end":{"line":68,"column":48}}]},"12":{"line":82,"type":"if","locations":[{"start":{"line":82,"column":2},"end":{"line":82,"column":2}},{"start":{"line":82,"column":2},"end":{"line":82,"column":2}}]},"13":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":2},"end":{"line":86,"column":2}},{"start":{"line":86,"column":2},"end":{"line":86,"column":2}}]},"14":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":7},"end":{"line":89,"column":7}},{"start":{"line":89,"column":7},"end":{"line":89,"column":7}}]},"15":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":7},"end":{"line":94,"column":7}},{"start":{"line":94,"column":7},"end":{"line":94,"column":7}}]},"16":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":2},"end":{"line":119,"column":2}},{"start":{"line":119,"column":2},"end":{"line":119,"column":2}}]},"17":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":2},"end":{"line":126,"column":2}},{"start":{"line":126,"column":2},"end":{"line":126,"column":2}}]},"18":{"line":141,"type":"if","locations":[{"start":{"line":141,"column":2},"end":{"line":141,"column":2}},{"start":{"line":141,"column":2},"end":{"line":141,"column":2}}]},"19":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":2},"end":{"line":145,"column":2}},{"start":{"line":145,"column":2},"end":{"line":145,"column":2}}]},"20":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":2},"end":{"line":154,"column":2}},{"start":{"line":154,"column":2},"end":{"line":154,"column":2}}]},"21":{"line":159,"type":"if","locations":[{"start":{"line":159,"column":2},"end":{"line":159,"column":2}},{"start":{"line":159,"column":2},"end":{"line":159,"column":2}}]},"22":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":3},"end":{"line":162,"column":3}},{"start":{"line":162,"column":3},"end":{"line":162,"column":3}}]},"23":{"line":170,"type":"if","locations":[{"start":{"line":170,"column":2},"end":{"line":170,"column":2}},{"start":{"line":170,"column":2},"end":{"line":170,"column":2}}]},"24":{"line":174,"type":"if","locations":[{"start":{"line":174,"column":3},"end":{"line":174,"column":3}},{"start":{"line":174,"column":3},"end":{"line":174,"column":3}}]},"25":{"line":183,"type":"if","locations":[{"start":{"line":183,"column":2},"end":{"line":183,"column":2}},{"start":{"line":183,"column":2},"end":{"line":183,"column":2}}]},"26":{"line":189,"type":"if","locations":[{"start":{"line":189,"column":3},"end":{"line":189,"column":3}},{"start":{"line":189,"column":3},"end":{"line":189,"column":3}}]},"27":{"line":189,"type":"binary-expr","locations":[{"start":{"line":189,"column":7},"end":{"line":189,"column":28}},{"start":{"line":189,"column":32},"end":{"line":189,"column":53}}]},"28":{"line":222,"type":"if","locations":[{"start":{"line":222,"column":1},"end":{"line":222,"column":1}},{"start":{"line":222,"column":1},"end":{"line":222,"column":1}}]},"29":{"line":223,"type":"binary-expr","locations":[{"start":{"line":223,"column":2},"end":{"line":223,"column":29}},{"start":{"line":224,"column":2},"end":{"line":224,"column":31}},{"start":{"line":225,"column":2},"end":{"line":225,"column":12}}]},"30":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":8},"end":{"line":230,"column":8}},{"start":{"line":230,"column":8},"end":{"line":230,"column":8}}]},"31":{"line":230,"type":"binary-expr","locations":[{"start":{"line":230,"column":12},"end":{"line":230,"column":23}},{"start":{"line":230,"column":27},"end":{"line":230,"column":48}}]},"32":{"line":231,"type":"if","locations":[{"start":{"line":231,"column":2},"end":{"line":231,"column":2}},{"start":{"line":231,"column":2},"end":{"line":231,"column":2}}]},"33":{"line":237,"type":"binary-expr","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":34}},{"start":{"line":237,"column":39},"end":{"line":237,"column":67}}]}}}} \ No newline at end of file diff --git a/node_modules/web3/coverage/lcov-report/base.css b/node_modules/web3/coverage/lcov-report/base.css deleted file mode 100644 index a6a2f32..0000000 --- a/node_modules/web3/coverage/lcov-report/base.css +++ /dev/null @@ -1,182 +0,0 @@ -body, html { - margin:0; padding: 0; -} -body { - font-family: Helvetica Neue, Helvetica,Arial; - font-size: 10pt; -} -div.header, div.footer { - background: #eee; - padding: 1em; -} -div.header { - z-index: 100; - position: fixed; - top: 0; - border-bottom: 1px solid #666; - width: 100%; -} -div.footer { - border-top: 1px solid #666; -} -div.body { - margin-top: 10em; -} -div.meta { - font-size: 90%; - text-align: center; -} -h1, h2, h3 { - font-weight: normal; -} -h1 { - font-size: 12pt; -} -h2 { - font-size: 10pt; -} -pre { - font-family: Consolas, Menlo, Monaco, monospace; - margin: 0; - padding: 0; - line-height: 1.3; - font-size: 14px; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} - -div.path { font-size: 110%; } -div.path a:link, div.path a:visited { color: #000; } -table.coverage { border-collapse: collapse; margin:0; padding: 0 } - -table.coverage td { - margin: 0; - padding: 0; - color: #111; - vertical-align: top; -} -table.coverage td.line-count { - width: 50px; - text-align: right; - padding-right: 5px; -} -table.coverage td.line-coverage { - color: #777 !important; - text-align: right; - border-left: 1px solid #666; - border-right: 1px solid #666; -} - -table.coverage td.text { -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 40px; -} -table.coverage td span.cline-neutral { - background: #eee; -} -table.coverage td span.cline-yes { - background: #b5d592; - color: #999; -} -table.coverage td span.cline-no { - background: #fc8c84; -} - -.cstat-yes { color: #111; } -.cstat-no { background: #fc8c84; color: #111; } -.fstat-no { background: #ffc520; color: #111 !important; } -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -.missing-if-branch { - display: inline-block; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: black; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} - -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} - -.entity, .metric { font-weight: bold; } -.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; } -.metric small { font-size: 80%; font-weight: normal; color: #666; } - -div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; } -div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; } -div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; } -div.coverage-summary th.file { border-right: none !important; } -div.coverage-summary th.pic { border-left: none !important; text-align: right; } -div.coverage-summary th.pct { border-right: none !important; } -div.coverage-summary th.abs { border-left: none !important; text-align: right; } -div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; } -div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; } -div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; } -div.coverage-summary td.pic { min-width: 120px !important; } -div.coverage-summary a:link { text-decoration: none; color: #000; } -div.coverage-summary a:visited { text-decoration: none; color: #777; } -div.coverage-summary a:hover { text-decoration: underline; } -div.coverage-summary tfoot td { border-top: 1px solid #666; } - -div.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -div.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -div.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} - -.high { background: #b5d592 !important; } -.medium { background: #ffe87c !important; } -.low { background: #fc8c84 !important; } - -span.cover-fill, span.cover-empty { - display:inline-block; - border:1px solid #444; - background: white; - height: 12px; -} -span.cover-fill { - background: #ccc; - border-right: 1px solid #444; -} -span.cover-empty { - background: white; - border-left: none; -} -span.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/index.html b/node_modules/web3/coverage/lcov-report/ethereum.js/index.html deleted file mode 100644 index 54f0df7..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - Code coverage report for ethereum.js/ - - - - - - - - -
        -

        Code coverage report for ethereum.js/

        -

        - - Statements: 100% (6 / 6)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (6 / 6)      - - Ignored: none      -

        -
        All files » ethereum.js/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        index.js100%(6 / 6)100%(0 / 0)100%(0 / 0)100%(6 / 6)
        -
        -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html deleted file mode 100644 index 4f9fed4..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/index.js.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - Code coverage report for ethereum.js/index.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/index.js

        -

        - - Statements: 100% (6 / 6)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (6 / 6)      - - Ignored: none      -

        -
        All files » ethereum.js/ » index.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -81 -1 -1 -1 -1 -  -1 - 
        var web3 = require('./lib/web3');
        -web3.providers.HttpProvider = require('./lib/web3/httpprovider');
        -web3.providers.QtSyncProvider = require('./lib/web3/qtsync');
        -web3.eth.contract = require('./lib/web3/contract');
        -web3.abi = require('./lib/solidity/abi');
        - 
        -module.exports = web3;
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html deleted file mode 100644 index 820fb88..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/ - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/

        -

        - - Statements: 95.08% (58 / 61)      - - - Branches: 50% (1 / 2)      - - - Functions: 90% (9 / 10)      - - - Lines: 95.08% (58 / 61)      - - Ignored: none      -

        -
        All files » ethereum.js/lib/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        web3.js95.08%(58 / 61)50%(1 / 2)90%(9 / 10)95.08%(58 / 61)
        -
        -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html deleted file mode 100644 index cf3a9e6..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/abi.js.html +++ /dev/null @@ -1,792 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/abi.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/solidity/abi.js

        -

        - - Statements: 100% (93 / 93)      - - - Branches: 100% (28 / 28)      - - - Functions: 100% (17 / 17)      - - - Lines: 100% (93 / 93)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -1 -296 -  -  -  -  -  -  -  -  -  -  -1 -  -91 -10 -81 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -84 -84 -84 -  -  -84 -91 -  -  -84 -  -91 -91 -200 -  -91 -1 -  -  -90 -  -90 -5 -12 -  -85 -5 -  -80 -  -  -83 -  -83 -  -  -  -  -  -  -  -  -  -1 -58 -9 -49 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -  -53 -53 -53 -  -53 -58 -  -  -53 -53 -  -53 -  -58 -58 -163 -  -  -58 -1 -  -  -57 -57 -2 -2 -2 -2 -4 -4 -  -2 -  -55 -7 -7 -7 -  -48 -48 -  -  -  -52 -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -32 -32 -  -32 -80 -80 -  -  -32 -31 -  -  -32 -  -  -27 -  -  -  -  -  -  -  -  -  -1 -25 -25 -  -30 -30 -  -30 -47 -  -  -30 -29 -  -  -30 -  -  -25 -  -  -1 -  -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file abi.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - *   Gav Wood <g@ethdev.com>
        - * @date 2014
        - */
        - 
        -var utils = require('../utils/utils');
        -var c = require('../utils/config');
        -var types = require('./types');
        -var f = require('./formatters');
        - 
        -/**
        - * throw incorrect type error
        - *
        - * @method throwTypeError
        - * @param {String} type
        - * @throws incorrect type error
        - */
        -var throwTypeError = function (type) {
        -    throw new Error('parser does not support type: ' + type);
        -};
        - 
        -/** This method should be called if we want to check if givent type is an array type
        - *
        - * @method isArrayType
        - * @param {String} type name
        - * @returns {Boolean} true if it is, otherwise false
        - */
        -var isArrayType = function (type) {
        -    return type.slice(-2) === '[]';
        -};
        - 
        -/**
        - * This method should be called to return dynamic type length in hex
        - *
        - * @method dynamicTypeBytes
        - * @param {String} type
        - * @param {String|Array} dynamic type
        - * @return {String} length of dynamic type in hex or empty string if type is not dynamic
        - */
        -var dynamicTypeBytes = function (type, value) {
        -    // TODO: decide what to do with array of strings
        -    if (isArrayType(type) || type === 'bytes')
        -        return f.formatInputInt(value.length);
        -    return "";
        -};
        - 
        -var inputTypes = types.inputTypes();
        - 
        -/**
        - * Formats input params to bytes
        - *
        - * @method formatInput
        - * @param {Array} abi inputs of method
        - * @param {Array} params that will be formatted to bytes
        - * @returns bytes representation of input params
        - */
        -var formatInput = function (inputs, params) {
        -    var bytes = "";
        -    var toAppendConstant = "";
        -    var toAppendArrayContent = "";
        - 
        -    /// first we iterate in search for dynamic
        -    inputs.forEach(function (input, index) {
        -        bytes += dynamicTypeBytes(input.type, params[index]);
        -    });
        - 
        -    inputs.forEach(function (input, i) {
        -        /*jshint maxcomplexity:5 */
        -        var typeMatch = false;
        -        for (var j = 0; j < inputTypes.length && !typeMatch; j++) {
        -            typeMatch = inputTypes[j].type(inputs[i].type, params[i]);
        -        }
        -        if (!typeMatch) {
        -            throwTypeError(inputs[i].type);
        -        }
        - 
        -        var formatter = inputTypes[j - 1].format;
        - 
        -        if (isArrayType(inputs[i].type))
        -            toAppendArrayContent += params[i].reduce(function (acc, curr) {
        -                return acc + formatter(curr);
        -            }, "");
        -        else if (inputs[i].type === 'bytes')
        -            toAppendArrayContent += formatter(params[i]);
        -        else
        -            toAppendConstant += formatter(params[i]);
        -    });
        - 
        -    bytes += toAppendConstant + toAppendArrayContent;
        - 
        -    return bytes;
        -};
        - 
        -/**
        - * This method should be called to predict the length of dynamic type
        - *
        - * @method dynamicBytesLength
        - * @param {String} type
        - * @returns {Number} length of dynamic type, 0 or multiplication of ETH_PADDING (32)
        - */
        -var dynamicBytesLength = function (type) {
        -    if (isArrayType(type) || type === 'bytes')
        -        return c.ETH_PADDING * 2;
        -    return 0;
        -};
        - 
        -var outputTypes = types.outputTypes();
        - 
        -/** 
        - * Formats output bytes back to param list
        - *
        - * @method formatOutput
        - * @param {Array} abi outputs of method
        - * @param {String} bytes represention of output
        - * @returns {Array} output params
        - */
        -var formatOutput = function (outs, output) {
        - 
        -    output = output.slice(2);
        -    var result = [];
        -    var padding = c.ETH_PADDING * 2;
        - 
        -    var dynamicPartLength = outs.reduce(function (acc, curr) {
        -        return acc + dynamicBytesLength(curr.type);
        -    }, 0);
        - 
        -    var dynamicPart = output.slice(0, dynamicPartLength);
        -    output = output.slice(dynamicPartLength);
        - 
        -    outs.forEach(function (out, i) {
        -        /*jshint maxcomplexity:6 */
        -        var typeMatch = false;
        -        for (var j = 0; j < outputTypes.length && !typeMatch; j++) {
        -            typeMatch = outputTypes[j].type(outs[i].type);
        -        }
        - 
        -        if (!typeMatch) {
        -            throwTypeError(outs[i].type);
        -        }
        - 
        -        var formatter = outputTypes[j - 1].format;
        -        if (isArrayType(outs[i].type)) {
        -            var size = f.formatOutputUInt(dynamicPart.slice(0, padding));
        -            dynamicPart = dynamicPart.slice(padding);
        -            var array = [];
        -            for (var k = 0; k < size; k++) {
        -                array.push(formatter(output.slice(0, padding)));
        -                output = output.slice(padding);
        -            }
        -            result.push(array);
        -        }
        -        else if (types.prefixedType('bytes')(outs[i].type)) {
        -            dynamicPart = dynamicPart.slice(padding);
        -            result.push(formatter(output.slice(0, padding)));
        -            output = output.slice(padding);
        -        } else {
        -            result.push(formatter(output.slice(0, padding)));
        -            output = output.slice(padding);
        -        }
        -    });
        - 
        -    return result;
        -};
        - 
        -/**
        - * Should be called to create input parser for contract with given abi
        - *
        - * @method inputParser
        - * @param {Array} contract abi
        - * @returns {Object} input parser object for given json abi
        - * TODO: refactor creating the parser, do not double logic from contract
        - */
        -var inputParser = function (json) {
        -    var parser = {};
        -    json.forEach(function (method) {
        -        var displayName = utils.extractDisplayName(method.name);
        -        var typeName = utils.extractTypeName(method.name);
        - 
        -        var impl = function () {
        -            var params = Array.prototype.slice.call(arguments);
        -            return formatInput(method.inputs, params);
        -        };
        - 
        -        if (parser[displayName] === undefined) {
        -            parser[displayName] = impl;
        -        }
        - 
        -        parser[displayName][typeName] = impl;
        -    });
        - 
        -    return parser;
        -};
        - 
        -/**
        - * Should be called to create output parser for contract with given abi
        - *
        - * @method outputParser
        - * @param {Array} contract abi
        - * @returns {Object} output parser for given json abi
        - */
        -var outputParser = function (json) {
        -    var parser = {};
        -    json.forEach(function (method) {
        - 
        -        var displayName = utils.extractDisplayName(method.name);
        -        var typeName = utils.extractTypeName(method.name);
        - 
        -        var impl = function (output) {
        -            return formatOutput(method.outputs, output);
        -        };
        - 
        -        if (parser[displayName] === undefined) {
        -            parser[displayName] = impl;
        -        }
        - 
        -        parser[displayName][typeName] = impl;
        -    });
        - 
        -    return parser;
        -};
        - 
        -module.exports = {
        -    inputParser: inputParser,
        -    outputParser: outputParser,
        -    formatInput: formatInput,
        -    formatOutput: formatOutput
        -};
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html deleted file mode 100644 index c4eed45..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/formatters.js.html +++ /dev/null @@ -1,690 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/formatters.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/solidity/formatters.js

        -

        - - Statements: 97.37% (37 / 38)      - - - Branches: 91.67% (11 / 12)      - - - Functions: 92.86% (13 / 14)      - - - Lines: 97.37% (37 / 38)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -103 -  -  -  -  -  -  -  -  -  -  -  -1 -103 -103 -103 -  -  -  -  -  -  -  -  -  -1 -5 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -27 -  -  -  -  -  -  -  -  -  -1 -  -27 -  -  -  -27 -7 -  -20 -  -  -  -  -  -  -  -  -  -1 -20 -20 -  -  -  -  -  -  -  -  -  -1 -4 -  -  -  -  -  -  -  -  -  -1 -3 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -5 -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file formatters.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var BigNumber = require('bignumber.js');
        -var utils = require('../utils/utils');
        -var c = require('../utils/config');
        - 
        -/**
        - * Should be called to pad string to expected length
        - *
        - * @method padLeft
        - * @param {String} string to be padded
        - * @param {Number} characters that result string should have
        - * @param {String} sign, by default 0
        - * @returns {String} right aligned string
        - */
        -var padLeft = function (string, chars, sign) {
        -    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
        -};
        - 
        -/**
        - * Formats input value to byte representation of int
        - * If value is negative, return it's two's complement
        - * If the value is floating point, round it down
        - *
        - * @method formatInputInt
        - * @param {String|Number|BigNumber} value that needs to be formatted
        - * @returns {String} right-aligned byte representation of int
        - */
        -var formatInputInt = function (value) {
        -    var padding = c.ETH_PADDING * 2;
        -    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
        -    return padLeft(utils.toTwosComplement(value).round().toString(16), padding);
        -};
        - 
        -/**
        - * Formats input value to byte representation of string
        - *
        - * @method formatInputString
        - * @param {String}
        - * @returns {String} left-algined byte representation of string
        - */
        -var formatInputString = function (value) {
        -    return utils.fromAscii(value, c.ETH_PADDING).substr(2);
        -};
        - 
        -/**
        - * Formats input value to byte representation of bool
        - *
        - * @method formatInputBool
        - * @param {Boolean}
        - * @returns {String} right-aligned byte representation bool
        - */
        -var formatInputBool = function (value) {
        -    return '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
        -};
        - 
        -/**
        - * Formats input value to byte representation of real
        - * Values are multiplied by 2^m and encoded as integers
        - *
        - * @method formatInputReal
        - * @param {String|Number|BigNumber}
        - * @returns {String} byte representation of real
        - */
        -var formatInputReal = function (value) {
        -    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); 
        -};
        - 
        -/**
        - * Check if input value is negative
        - *
        - * @method signedIsNegative
        - * @param {String} value is hex format
        - * @returns {Boolean} true if it is negative, otherwise false
        - */
        -var signedIsNegative = function (value) {
        -    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
        -};
        - 
        -/**
        - * Formats right-aligned output bytes to int
        - *
        - * @method formatOutputInt
        - * @param {String} bytes
        - * @returns {BigNumber} right-aligned output bytes formatted to big number
        - */
        -var formatOutputInt = function (value) {
        - 
        -    value = value || "0";
        - 
        -    // check if it's negative number
        -    // it it is, return two's complement
        -    if (signedIsNegative(value)) {
        -        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
        -    }
        -    return new BigNumber(value, 16);
        -};
        - 
        -/**
        - * Formats right-aligned output bytes to uint
        - *
        - * @method formatOutputUInt
        - * @param {String} bytes
        - * @returns {BigNumeber} right-aligned output bytes formatted to uint
        - */
        -var formatOutputUInt = function (value) {
        -    value = value || "0";
        -    return new BigNumber(value, 16);
        -};
        - 
        -/**
        - * Formats right-aligned output bytes to real
        - *
        - * @method formatOutputReal
        - * @param {String}
        - * @returns {BigNumber} input bytes formatted to real
        - */
        -var formatOutputReal = function (value) {
        -    return formatOutputInt(value).dividedBy(new BigNumber(2).pow(128)); 
        -};
        - 
        -/**
        - * Formats right-aligned output bytes to ureal
        - *
        - * @method formatOutputUReal
        - * @param {String}
        - * @returns {BigNumber} input bytes formatted to ureal
        - */
        -var formatOutputUReal = function (value) {
        -    return formatOutputUInt(value).dividedBy(new BigNumber(2).pow(128)); 
        -};
        - 
        -/**
        - * Should be used to format output hash
        - *
        - * @method formatOutputHash
        - * @param {String}
        - * @returns {String} right-aligned output bytes formatted to hex
        - */
        -var formatOutputHash = function (value) {
        -    return "0x" + value;
        -};
        - 
        -/**
        - * Should be used to format output bool
        - *
        - * @method formatOutputBool
        - * @param {String}
        - * @returns {Boolean} right-aligned input bytes formatted to bool
        - */
        -var formatOutputBool = function (value) {
        -    return value === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
        -};
        - 
        -/**
        - * Should be used to format output string
        - *
        - * @method formatOutputString
        - * @param {Sttring} left-aligned hex representation of string
        - * @returns {String} ascii string
        - */
        -var formatOutputString = function (value) {
        -    return utils.toAscii(value);
        -};
        - 
        -/**
        - * Should be used to format output address
        - *
        - * @method formatOutputAddress
        - * @param {String} right-aligned input bytes
        - * @returns {String} address
        - */
        -var formatOutputAddress = function (value) {
        -    return "0x" + value.slice(value.length - 40, value.length);
        -};
        - 
        -module.exports = {
        -    formatInputInt: formatInputInt,
        -    formatInputString: formatInputString,
        -    formatInputBool: formatInputBool,
        -    formatInputReal: formatInputReal,
        -    formatOutputInt: formatOutputInt,
        -    formatOutputUInt: formatOutputUInt,
        -    formatOutputReal: formatOutputReal,
        -    formatOutputUReal: formatOutputUReal,
        -    formatOutputHash: formatOutputHash,
        -    formatOutputBool: formatOutputBool,
        -    formatOutputString: formatOutputString,
        -    formatOutputAddress: formatOutputAddress
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html deleted file mode 100644 index cfcf93a..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/index.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/ - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/solidity/

        -

        - - Statements: 99.3% (142 / 143)      - - - Branches: 97.5% (39 / 40)      - - - Functions: 97.3% (36 / 37)      - - - Lines: 99.3% (142 / 143)      - - Ignored: none      -

        -
        All files » ethereum.js/lib/solidity/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        abi.js100%(93 / 93)100%(28 / 28)100%(17 / 17)100%(93 / 93)
        formatters.js97.37%(37 / 38)91.67%(11 / 12)92.86%(13 / 14)97.37%(37 / 38)
        types.js100%(12 / 12)100%(0 / 0)100%(6 / 6)100%(12 / 12)
        -
        -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html deleted file mode 100644 index 07acd7d..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/solidity/types.js.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/solidity/types.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/solidity/types.js

        -

        - - Statements: 100% (12 / 12)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (6 / 6)      - - - Lines: 100% (12 / 12)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -1 -65 -396 -  -  -  -  -  -1 -4 -22 -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file types.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var f = require('./formatters');
        - 
        -/// @param expected type prefix (string)
        -/// @returns function which checks if type has matching prefix. if yes, returns true, otherwise false
        -var prefixedType = function (prefix) {
        -    return function (type) {
        -        return type.indexOf(prefix) === 0;
        -    };
        -};
        - 
        -/// @param expected type name (string)
        -/// @returns function which checks if type is matching expected one. if yes, returns true, otherwise false
        -var namedType = function (name) {
        -    return function (type) {
        -        return name === type;
        -    };
        -};
        - 
        -/// Setups input formatters for solidity types
        -/// @returns an array of input formatters 
        -var inputTypes = function () {
        -    
        -    return [
        -        { type: prefixedType('uint'), format: f.formatInputInt },
        -        { type: prefixedType('int'), format: f.formatInputInt },
        -        { type: prefixedType('bytes'), format: f.formatInputString }, 
        -        { type: prefixedType('real'), format: f.formatInputReal },
        -        { type: prefixedType('ureal'), format: f.formatInputReal },
        -        { type: namedType('address'), format: f.formatInputInt },
        -        { type: namedType('bool'), format: f.formatInputBool }
        -    ];
        -};
        - 
        -/// Setups output formaters for solidity types
        -/// @returns an array of output formatters
        -var outputTypes = function () {
        - 
        -    return [
        -        { type: prefixedType('uint'), format: f.formatOutputUInt },
        -        { type: prefixedType('int'), format: f.formatOutputInt },
        -        { type: prefixedType('bytes'), format: f.formatOutputString },
        -        { type: prefixedType('real'), format: f.formatOutputReal },
        -        { type: prefixedType('ureal'), format: f.formatOutputUReal },
        -        { type: namedType('address'), format: f.formatOutputAddress },
        -        { type: namedType('bool'), format: f.formatOutputBool }
        -    ];
        -};
        - 
        -module.exports = {
        -    prefixedType: prefixedType,
        -    namedType: namedType,
        -    inputTypes: inputTypes,
        -    outputTypes: outputTypes
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html deleted file mode 100644 index 92546cd..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/config.js.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/config.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/utils/config.js

        -

        - - Statements: 100% (3 / 3)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (3 / 3)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file config.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -/**
        - * Utils
        - * 
        - * @module utils
        - */
        - 
        -/**
        - * Utility functions
        - * 
        - * @class [utils] config
        - * @constructor
        - */
        - 
        -/// required to define ETH_BIGNUMBER_ROUNDING_MODE
        -var BigNumber = require('bignumber.js');
        - 
        -var ETH_UNITS = [ 
        -    'wei', 
        -    'Kwei', 
        -    'Mwei', 
        -    'Gwei', 
        -    'szabo', 
        -    'finney', 
        -    'ether', 
        -    'grand', 
        -    'Mether', 
        -    'Gether', 
        -    'Tether', 
        -    'Pether', 
        -    'Eether', 
        -    'Zether', 
        -    'Yether', 
        -    'Nether', 
        -    'Dether', 
        -    'Vether', 
        -    'Uether' 
        -];
        - 
        -module.exports = {
        -    ETH_PADDING: 32,
        -    ETH_SIGNATURE_LENGTH: 4,
        -    ETH_UNITS: ETH_UNITS,
        -    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
        -    ETH_POLLING_TIMEOUT: 1000,
        -    ETH_DEFAULTBLOCK: 'latest'
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html deleted file mode 100644 index 91caf95..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/index.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/ - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/utils/

        -

        - - Statements: 100% (110 / 110)      - - - Branches: 92.06% (58 / 63)      - - - Functions: 100% (26 / 26)      - - - Lines: 100% (110 / 110)      - - Ignored: none      -

        -
        All files » ethereum.js/lib/utils/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        config.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
        utils.js100%(107 / 107)92.06%(58 / 63)100%(26 / 26)100%(107 / 107)
        -
        -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html deleted file mode 100644 index 5fad23e..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/utils/utils.js.html +++ /dev/null @@ -1,1443 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/utils/utils.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/utils/utils.js

        -

        - - Statements: 100% (107 / 107)      - - - Branches: 92.06% (58 / 63)      - - - Functions: 100% (26 / 26)      - - - Lines: 100% (107 / 107)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -3 -3 -3 -3 -  -3 -  -  -  -  -  -  -  -  -  -1 -  -10 -10 -10 -3 -  -10 -70 -70 -7 -  -  -63 -  -  -10 -  -  -  -  -  -  -  -  -  -1 -18 -18 -195 -195 -  -  -18 -  -  -  -  -  -  -  -  -  -  -1 -18 -18 -18 -135 -18 -  -  -  -  -  -  -  -  -  -1 -78 -78 -  -  -  -1 -  -76 -76 -  -  -  -  -  -  -  -  -  -1 -8 -13 -  -  -  -  -  -  -  -  -  -  -1 -8 -13 -  -  -  -  -  -  -  -  -  -  -1 -120 -  -  -  -  -  -  -  -  -  -1 -119 -119 -  -119 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -93 -2 -  -91 -1 -  -90 -3 -  -  -87 -35 -5 -30 -2 -  -  -80 -  -  -  -  -  -  -  -  -  -  -1 -25 -25 -25 -1 -  -24 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -12 -  -12 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -13 -  -12 -  -  -  -  -  -  -  -  -  -1 -  -464 -464 -54 -  -410 -154 -  -  -256 -  -  -  -  -  -  -  -  -  -1 -103 -103 -10 -  -93 -  -  -  -  -  -  -  -  -  -1 -6 -3 -  -  -3 -  -  -  -  -  -  -  -  -  -  -1 -587 -  -  -  -  -  -  -  -  -  -  -1 -557 -  -  -  -  -  -  -  -  -  -  -1 -182 -  -  -  -  -  -  -  -  -  -1 -174 -  -  -  -  -  -  -  -  -  -1 -93 -  -  -  -  -  -  -  -  -  -1 -106 -  -  -  -  -  -  -  -  -  -1 -10 -10 -  -5 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file utils.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -/**
        - * Utils
        - * 
        - * @module utils
        - */
        - 
        -/**
        - * Utility functions
        - * 
        - * @class [utils] utils
        - * @constructor
        - */
        - 
        -var BigNumber = require('bignumber.js');
        - 
        -var unitMap = {
        -    'wei':      '1',
        -    'kwei':     '1000',
        -    'ada':      '1000',
        -    'mwei':     '1000000',
        -    'babbage':  '1000000',
        -    'gwei':     '1000000000',
        -    'shannon':  '1000000000',
        -    'szabo':    '1000000000000',
        -    'finney':   '1000000000000000',
        -    'ether':    '1000000000000000000',
        -    'kether':   '1000000000000000000000',
        -    'grand':    '1000000000000000000000',
        -    'einstein': '1000000000000000000000',
        -    'mether':   '1000000000000000000000000',
        -    'gether':   '1000000000000000000000000000',
        -    'tether':   '1000000000000000000000000000000'
        -};
        - 
        - 
        -/** Finds first index of array element matching pattern
        - *
        - * @method findIndex
        - * @param {Array}
        - * @param {Function} pattern
        - * @returns {Number} index of element
        - */
        -var findIndex = function (array, callback) {
        -    var end = false;
        -    var i = 0;
        -    for (; i < array.length && !end; i++) {
        -        end = callback(array[i]);
        -    }
        -    return end ? i - 1 : -1;
        -};
        - 
        -/** 
        - * Should be called to get sting from it's hex representation
        - *
        - * @method toAscii
        - * @param {String} string in hex
        - * @returns {String} ascii string representation of hex value
        - */
        -var toAscii = function(hex) {
        -// Find termination
        -    var str = "";
        -    var i = 0, l = hex.length;
        -    if (hex.substring(0, 2) === '0x') {
        -        i = 2;
        -    }
        -    for (; i < l; i+=2) {
        -        var code = parseInt(hex.substr(i, 2), 16);
        -        if (code === 0) {
        -            break;
        -        }
        - 
        -        str += String.fromCharCode(code);
        -    }
        - 
        -    return str;
        -};
        -    
        -/**
        - * Shold be called to get hex representation (prefixed by 0x) of ascii string 
        - *
        - * @method fromAscii
        - * @param {String} string
        - * @returns {String} hex representation of input string
        - */
        -var toHexNative = function(str) {
        -    var hex = "";
        -    for(var i = 0; i < str.length; i++) {
        -        var n = str.charCodeAt(i).toString(16);
        -        hex += n.length < 2 ? '0' + n : n;
        -    }
        - 
        -    return hex;
        -};
        - 
        -/**
        - * Shold be called to get hex representation (prefixed by 0x) of ascii string 
        - *
        - * @method fromAscii
        - * @param {String} string
        - * @param {Number} optional padding
        - * @returns {String} hex representation of input string
        - */
        -var fromAscii = function(str, pad) {
        -    pad = pad === undefined ? 0 : pad;
        -    var hex = toHexNative(str);
        -    while (hex.length < pad*2)
        -        hex += "00";
        -    return "0x" + hex;
        -};
        - 
        -/**
        - * Should be called to get display name of contract function
        - * 
        - * @method extractDisplayName
        - * @param {String} name of function/event
        - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
        - */
        -var extractDisplayName = function (name) {
        -    var length = name.indexOf('('); 
        -    return length !== -1 ? name.substr(0, length) : name;
        -};
        - 
        -/// @returns overloaded part of function/event name
        -var extractTypeName = function (name) {
        -    /// TODO: make it invulnerable
        -    var length = name.indexOf('(');
        -    return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : "";
        -};
        - 
        -/**
        - * Filters all functions from input abi
        - *
        - * @method filterFunctions
        - * @param {Array} abi
        - * @returns {Array} abi array with filtered objects of type 'function'
        - */
        -var filterFunctions = function (json) {
        -    return json.filter(function (current) {
        -        return current.type === 'function'; 
        -    }); 
        -};
        - 
        -/**
        - * Filters all events from input abi
        - *
        - * @method filterEvents
        - * @param {Array} abi
        - * @returns {Array} abi array with filtered objects of type 'event'
        - */
        -var filterEvents = function (json) {
        -    return json.filter(function (current) {
        -        return current.type === 'event';
        -    });
        -};
        - 
        -/**
        - * Converts value to it's decimal representation in string
        - *
        - * @method toDecimal
        - * @param {String|Number|BigNumber}
        - * @return {String}
        - */
        -var toDecimal = function (value) {
        -    return toBigNumber(value).toNumber();
        -};
        - 
        -/**
        - * Converts value to it's hex representation
        - *
        - * @method fromDecimal
        - * @param {String|Number|BigNumber}
        - * @return {String}
        - */
        -var fromDecimal = function (value) {
        -    var number = toBigNumber(value);
        -    var result = number.toString(16);
        - 
        -    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
        -};
        - 
        -/**
        - * Auto converts any given value into it's hex representation.
        - *
        - * And even stringifys objects before.
        - *
        - * @method toHex
        - * @param {String|Number|BigNumber|Object}
        - * @return {String}
        - */
        -var toHex = function (val) {
        -    /*jshint maxcomplexity:7 */
        - 
        -    if (isBoolean(val))
        -        return fromDecimal(+val);
        - 
        -    if (isBigNumber(val))
        -        return fromDecimal(val);
        - 
        -    if (isObject(val))
        -        return fromAscii(JSON.stringify(val));
        - 
        -    // if its a negative number, pass it through fromDecimal
        -    if (isString(val)) {
        -        if (val.indexOf('-0x') === 0)
        -           return fromDecimal(val);
        -        else if (!isFinite(val))
        -            return fromAscii(val);
        -    }
        - 
        -    return fromDecimal(val);
        -};
        - 
        -/**
        - * Returns value of unit in Wei
        - *
        - * @method getValueOfUnit
        - * @param {String} unit the unit to convert to, default ether
        - * @returns {BigNumber} value of the unit (in Wei)
        - * @throws error if the unit is not correct:w
        - */
        -var getValueOfUnit = function (unit) {
        -    unit = unit ? unit.toLowerCase() : 'ether';
        -    var unitValue = unitMap[unit];
        -    if (unitValue === undefined) {
        -        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
        -    }
        -    return new BigNumber(unitValue, 10);
        -};
        - 
        -/**
        - * Takes a number of wei and converts it to any other ether unit.
        - *
        - * Possible units are:
        - * - kwei/ada
        - * - mwei/babbage
        - * - gwei/shannon
        - * - szabo
        - * - finney
        - * - ether
        - * - kether/grand/einstein
        - * - mether
        - * - gether
        - * - tether
        - *
        - * @method fromWei
        - * @param {Number|String} number can be a number, number string or a HEX of a decimal
        - * @param {String} unit the unit to convert to, default ether
        - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
        -*/
        -var fromWei = function(number, unit) {
        -    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));
        - 
        -    return isBigNumber(number) ? returnValue : returnValue.toString(10); 
        -};
        - 
        -/**
        - * Takes a number of a unit and converts it to wei.
        - *
        - * Possible units are:
        - * - kwei/ada
        - * - mwei/babbage
        - * - gwei/shannon
        - * - szabo
        - * - finney
        - * - ether
        - * - kether/grand/einstein
        - * - mether
        - * - gether
        - * - tether
        - *
        - * @method toWei
        - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
        - * @param {String} unit the unit to convert from, default ether
        - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
        -*/
        -var toWei = function(number, unit) {
        -    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));
        - 
        -    return isBigNumber(number) ? returnValue : returnValue.toString(10); 
        -};
        - 
        -/**
        - * Takes an input and transforms it into an bignumber
        - *
        - * @method toBigNumber
        - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
        - * @return {BigNumber} BigNumber
        -*/
        -var toBigNumber = function(number) {
        -    /*jshint maxcomplexity:5 */
        -    number = number || 0;
        -    if (isBigNumber(number))
        -        return number;
        - 
        -    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
        -        return new BigNumber(number.replace('0x',''), 16);
        -    }
        -   
        -    return new BigNumber(number.toString(10), 10);
        -};
        - 
        -/**
        - * Takes and input transforms it into bignumber and if it is negative value, into two's complement
        - *
        - * @method toTwosComplement
        - * @param {Number|String|BigNumber}
        - * @return {BigNumber}
        - */
        -var toTwosComplement = function (number) {
        -    var bigNumber = toBigNumber(number);
        -    if (bigNumber.lessThan(0)) {
        -        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
        -    }
        -    return bigNumber;
        -};
        - 
        -/**
        - * Checks if the given string has proper length
        - *
        - * @method isAddress
        - * @param {String} address the given HEX adress
        - * @return {Boolean}
        -*/
        -var isAddress = function(address) {
        -    if (!isString(address)) {
        -        return false;
        -    }
        - 
        -    return ((address.indexOf('0x') === 0 && address.length === 42) ||
        -            (address.indexOf('0x') === -1 && address.length === 40));
        -};
        - 
        -/**
        - * Returns true if object is BigNumber, otherwise false
        - *
        - * @method isBigNumber
        - * @param {Object}
        - * @return {Boolean} 
        - */
        -var isBigNumber = function (object) {
        -    return object instanceof BigNumber ||
        -        (object && object.constructor && object.constructor.name === 'BigNumber');
        -};
        - 
        -/**
        - * Returns true if object is string, otherwise false
        - * 
        - * @method isString
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isString = function (object) {
        -    return typeof object === 'string' ||
        -        (object && object.constructor && object.constructor.name === 'String');
        -};
        - 
        -/**
        - * Returns true if object is function, otherwise false
        - *
        - * @method isFunction
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isFunction = function (object) {
        -    return typeof object === 'function';
        -};
        - 
        -/**
        - * Returns true if object is Objet, otherwise false
        - *
        - * @method isObject
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isObject = function (object) {
        -    return typeof object === 'object';
        -};
        - 
        -/**
        - * Returns true if object is boolean, otherwise false
        - *
        - * @method isBoolean
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isBoolean = function (object) {
        -    return typeof object === 'boolean';
        -};
        - 
        -/**
        - * Returns true if object is array, otherwise false
        - *
        - * @method isArray
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isArray = function (object) {
        -    return object instanceof Array; 
        -};
        - 
        -/**
        - * Returns true if given string is valid json object
        - * 
        - * @method isJson
        - * @param {String}
        - * @return {Boolean}
        - */
        -var isJson = function (str) {
        -    try {
        -        return !!JSON.parse(str);
        -    } catch (e) {
        -        return false;
        -    }
        -};
        - 
        -module.exports = {
        -    findIndex: findIndex,
        -    toHex: toHex,
        -    toDecimal: toDecimal,
        -    fromDecimal: fromDecimal,
        -    toAscii: toAscii,
        -    fromAscii: fromAscii,
        -    extractDisplayName: extractDisplayName,
        -    extractTypeName: extractTypeName,
        -    filterFunctions: filterFunctions,
        -    filterEvents: filterEvents,
        -    toWei: toWei,
        -    fromWei: fromWei,
        -    toBigNumber: toBigNumber,
        -    toTwosComplement: toTwosComplement,
        -    isBigNumber: isBigNumber,
        -    isAddress: isAddress,
        -    isFunction: isFunction,
        -    isString: isString,
        -    isObject: isObject,
        -    isBoolean: isBoolean,
        -    isArray: isArray,
        -    isJson: isJson
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html deleted file mode 100644 index a2f507c..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3.js.html +++ /dev/null @@ -1,519 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3.js

        -

        - - Statements: 95.08% (58 / 61)      - - - Branches: 50% (1 / 2)      - - - Functions: 90% (9 / 10)      - - - Lines: 95.08% (58 / 61)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -5 -27 -  -  -  -  -  -1 -3 -11 -  -  -  -  -1 -1 -1 -1 -1 -  -  -1 -  -  -  -4 -  -  -  -  -  -4 -  -  -  -1 -1 -1 -  -1 -1 -1 -123 -  -1 -2 -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -1 -  -4 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file web3.js
        - * @authors:
        - *   Jeffrey Wilcke <jeff@ethdev.com>
        - *   Marek Kotewicz <marek@ethdev.com>
        - *   Marian Oancea <marian@ethdev.com>
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - *   Gav Wood <g@ethdev.com>
        - * @date 2014
        - */
        - 
        -var version = require('./version.json');
        -var net = require('./web3/net');
        -var eth = require('./web3/eth');
        -var db = require('./web3/db');
        -var shh = require('./web3/shh');
        -var watches = require('./web3/watches');
        -var Filter = require('./web3/filter');
        -var utils = require('./utils/utils');
        -var formatters = require('./web3/formatters');
        -var RequestManager = require('./web3/requestmanager');
        -var c = require('./utils/config');
        -var Method = require('./web3/method');
        -var Property = require('./web3/property');
        - 
        -var web3Methods = [
        -    new Method({
        -        name: 'sha3',
        -        call: 'web3_sha3',
        -        params: 1
        -    })
        -];
        - 
        -var web3Properties = [
        -    new Property({
        -        name: 'version.client',
        -        getter: 'web3_clientVersion'
        -    }),
        -    new Property({
        -        name: 'version.network',
        -        getter: 'net_version',
        -        inputFormatter: utils.toDecimal
        -    }),
        -    new Property({
        -        name: 'version.ethereum',
        -        getter: 'net_eth',
        -        inputFormatter: utils.toDecimal
        -    }),
        -    new Property({
        -        name: 'version.whisper',
        -        getter: 'net_shh',
        -        inputFormatter: utils.toDecimal
        -    })
        -];
        - 
        -/// creates methods in a given object based on method description on input
        -/// setups api calls for these methods
        -var setupMethods = function (obj, methods) {
        -    methods.forEach(function (method) {
        -        method.attachToObject(obj);
        -    });
        -};
        - 
        -/// creates properties in a given object based on properties description on input
        -/// setups api calls for these properties
        -var setupProperties = function (obj, properties) {
        -    properties.forEach(function (property) {
        -        property.attachToObject(obj);
        -    });
        -};
        - 
        -/// setups web3 object, and it's in-browser executed methods
        -var web3 = {};
        -web3.providers = {};
        -web3.version = {};
        -web3.version.api = version.version;
        -web3.eth = {};
        - 
        -/*jshint maxparams:4 */
        -web3.eth.filter = function (fil, eventParams, options, formatter) {
        - 
        -    // if its event, treat it differently
        -    // TODO: simplify and remove
        -    Iif (fil._isEvent) {
        -        return fil(eventParams, options);
        -    }
        - 
        -    // what outputLogFormatter? that's wrong
        -    //return new Filter(fil, watches.eth(), formatters.outputLogFormatter);
        -    return new Filter(fil, watches.eth(), formatter);
        -};
        -/*jshint maxparams:3 */
        - 
        -web3.shh = {};
        -web3.shh.filter = function (fil) {
        -    return new Filter(fil, watches.shh(), formatters.outputPostFormatter);
        -};
        -web3.net = {};
        -web3.db = {};
        -web3.setProvider = function (provider) {
        -    RequestManager.getInstance().setProvider(provider);
        -};
        -web3.reset = function () {
        -    RequestManager.getInstance().reset();
        -};
        -web3.toHex = utils.toHex;
        -web3.toAscii = utils.toAscii;
        -web3.fromAscii = utils.fromAscii;
        -web3.toDecimal = utils.toDecimal;
        -web3.fromDecimal = utils.fromDecimal;
        -web3.toBigNumber = utils.toBigNumber;
        -web3.toWei = utils.toWei;
        -web3.fromWei = utils.fromWei;
        -web3.isAddress = utils.isAddress;
        - 
        -// ADD defaultblock
        -Object.defineProperty(web3.eth, 'defaultBlock', {
        -    get: function () {
        -        return c.ETH_DEFAULTBLOCK;
        -    },
        -    set: function (val) {
        -        c.ETH_DEFAULTBLOCK = val;
        -        return c.ETH_DEFAULTBLOCK;
        -    }
        -});
        - 
        - 
        -/// setups all api methods
        -setupMethods(web3, web3Methods);
        -setupProperties(web3, web3Properties);
        -setupMethods(web3.net, net.methods);
        -setupProperties(web3.net, net.properties);
        -setupMethods(web3.eth, eth.methods);
        -setupProperties(web3.eth, eth.properties);
        -setupMethods(web3.db, db.methods);
        -setupMethods(web3.shh, shh.methods);
        - 
        -module.exports = web3;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html deleted file mode 100644 index 07a83c0..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/contract.js.html +++ /dev/null @@ -1,738 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/contract.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/contract.js

        -

        - - Statements: 61.22% (60 / 98)      - - - Branches: 34.78% (8 / 23)      - - - Functions: 61.9% (13 / 21)      - - - Lines: 60.82% (59 / 97)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -1 -  -7 -  -  -  -  -  -  -7 -  -  -  -  -  -7 -  -  -  -  -  -  -7 -7 -28 -  -  -  -  -  -  -  -1 -7 -7 -  -  -7 -  -8 -8 -  -8 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -8 -7 -  -  -8 -  -  -  -1 -7 -7 -  -  -  -  -  -7 -  -  -  -  -  -  -  -  -  -1 -  -7 -  -2 -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -  -2 -  -2 -2 -  -2 -2 -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -7 -7 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -7 -11 -7 -8 -7 -  -  -  -7 -7 -7 -7 -7 -  -7 -  -  -1 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file contract.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2014
        - */
        - 
        -var web3 = require('../web3'); 
        -var abi = require('../solidity/abi');
        -var utils = require('../utils/utils');
        -var eventImpl = require('./event');
        -var signature = require('./signature');
        - 
        -var addFunctionRelatedPropertiesToContract = function (contract) {
        -    
        -    contract.call = function (options) {
        -        contract._isTransaction = false;
        -        contract._options = options;
        -        return contract;
        -    };
        - 
        - 
        -    contract.sendTransaction = function (options) {
        -        contract._isTransaction = true;
        -        contract._options = options;
        -        return contract;
        -    };
        -    // DEPRECATED
        -    contract.transact = function (options) {
        - 
        -        console.warn('myContract.transact() is deprecated please use myContract.sendTransaction() instead.');
        - 
        -        return contract.sendTransaction(options);
        -    };
        - 
        -    contract._options = {};
        -    ['gas', 'gasPrice', 'value', 'from'].forEach(function(p) {
        -        contract[p] = function (v) {
        -            contract._options[p] = v;
        -            return contract;
        -        };
        -    });
        - 
        -};
        - 
        -var addFunctionsToContract = function (contract, desc, address) {
        -    var inputParser = abi.inputParser(desc);
        -    var outputParser = abi.outputParser(desc);
        - 
        -    // create contract functions
        -    utils.filterFunctions(desc).forEach(function (method) {
        - 
        -        var displayName = utils.extractDisplayName(method.name);
        -        var typeName = utils.extractTypeName(method.name);
        - 
        -        var impl = function () {
        -            /*jshint maxcomplexity:7 */
        -            var params = Array.prototype.slice.call(arguments);
        -            var sign = signature.functionSignatureFromAscii(method.name);
        -            var parsed = inputParser[displayName][typeName].apply(null, params);
        - 
        -            var options = contract._options || {};
        -            options.to = address;
        -            options.data = sign + parsed;
        -            
        -            var isTransaction = contract._isTransaction === true || (contract._isTransaction !== false && !method.constant);
        -            var collapse = options.collapse !== false;
        -            
        -            // reset
        -            contract._options = {};
        -            contract._isTransaction = null;
        - 
        -            if (isTransaction) {
        -                
        -                // transactions do not have any output, cause we do not know, when they will be processed
        -                web3.eth.sendTransaction(options);
        -                return;
        -            }
        -            
        -            var output = web3.eth.call(options);
        -            var ret = outputParser[displayName][typeName](output);
        -            if (collapse)
        -            {
        -                if (ret.length === 1)
        -                    ret = ret[0];
        -                else if (ret.length === 0)
        -                    ret = null;
        -            }
        -            return ret;
        -        };
        - 
        -        if (contract[displayName] === undefined) {
        -            contract[displayName] = impl;
        -        }
        - 
        -        contract[displayName][typeName] = impl;
        -    });
        -};
        - 
        -var addEventRelatedPropertiesToContract = function (contract, desc, address) {
        -    contract.address = address;
        -    contract._onWatchEventResult = function (data) {
        -        var matchingEvent = event.getMatchingEvent(utils.filterEvents(desc));
        -        var parser = eventImpl.outputParser(matchingEvent);
        -        return parser(data);
        -    };
        -    
        -    Object.defineProperty(contract, 'topics', {
        -        get: function() {
        -            return utils.filterEvents(desc).map(function (e) {
        -                return signature.eventSignatureFromAscii(e.name);
        -            });
        -        }
        -    });
        - 
        -};
        - 
        -var addEventsToContract = function (contract, desc, address) {
        -    // create contract events
        -    utils.filterEvents(desc).forEach(function (e) {
        - 
        -        var impl = function () {
        -            var params = Array.prototype.slice.call(arguments);
        -            var sign = signature.eventSignatureFromAscii(e.name);
        -            var event = eventImpl.inputParser(address, sign, e);
        -            var o = event.apply(null, params);
        -            var outputFormatter = function (data) {
        -                var parser = eventImpl.outputParser(e);
        -                return parser(data);
        -            };
        -            return web3.eth.filter(o, undefined, undefined, outputFormatter);
        -        };
        -        
        -        // this property should be used by eth.filter to check if object is an event
        -        impl._isEvent = true;
        - 
        -        var displayName = utils.extractDisplayName(e.name);
        -        var typeName = utils.extractTypeName(e.name);
        - 
        -        Eif (contract[displayName] === undefined) {
        -            contract[displayName] = impl;
        -        }
        - 
        -        contract[displayName][typeName] = impl;
        - 
        -    });
        -};
        - 
        - 
        -/**
        - * This method should be called when we want to call / transact some solidity method from javascript
        - * it returns an object which has same methods available as solidity contract description
        - * usage example: 
        - *
        - * var abi = [{
        - *      name: 'myMethod',
        - *      inputs: [{ name: 'a', type: 'string' }],
        - *      outputs: [{name: 'd', type: 'string' }]
        - * }];  // contract abi
        - *
        - * var MyContract = web3.eth.contract(abi); // creation of contract prototype
        - *
        - * var contractInstance = new MyContract('0x0123123121');
        - *
        - * contractInstance.myMethod('this is test string param for call'); // myMethod call (implicit, default)
        - * contractInstance.call().myMethod('this is test string param for call'); // myMethod call (explicit)
        - * contractInstance.sendTransaction().myMethod('this is test string param for transact'); // myMethod sendTransaction
        - *
        - * @param abi - abi json description of the contract, which is being created
        - * @returns contract object
        - */
        -var contract = function (abi) {
        - 
        -    // return prototype
        -    Eif(abi instanceof Array && arguments.length === 1) {
        -        return Contract.bind(null, abi);
        - 
        -    // deprecated: auto initiate contract
        -    } else {
        - 
        -        console.warn('Initiating a contract like this is deprecated please use var MyContract = eth.contract(abi); new MyContract(address); instead.');
        - 
        -        return new Contract(arguments[1], arguments[0]);
        -    }
        - 
        -};
        - 
        -function Contract(abi, address) {
        - 
        -    // workaround for invalid assumption that method.name is the full anonymous prototype of the method.
        -    // it's not. it's just the name. the rest of the code assumes it's actually the anonymous
        -    // prototype, so we make it so as a workaround.
        -    // TODO: we may not want to modify input params, maybe use copy instead?
        -    abi.forEach(function (method) {
        -        if (method.name.indexOf('(') === -1) {
        -            var displayName = method.name;
        -            var typeName = method.inputs.map(function(i){return i.type; }).join();
        -            method.name = displayName + '(' + typeName + ')';
        -        }
        -    });
        - 
        -    var result = {};
        -    addFunctionRelatedPropertiesToContract(result);
        -    addFunctionsToContract(result, abi, address);
        -    addEventRelatedPropertiesToContract(result, abi, address);
        -    addEventsToContract(result, abi, address);
        - 
        -    return result;
        -}
        - 
        -module.exports = contract;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html deleted file mode 100644 index 4b72666..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/db.js.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/db.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/db.js

        -

        - - Statements: 100% (7 / 7)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (7 / 7)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -1 -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file db.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Method = require('./method');
        - 
        -var putString = new Method({
        -    name: 'putString',
        -    call: 'db_putString',
        -    params: 3
        -});
        - 
        - 
        -var getString = new Method({
        -    name: 'getString',
        -    call: 'db_getString',
        -    params: 2
        -});
        - 
        -var putHex = new Method({
        -    name: 'putHex',
        -    call: 'db_putHex',
        -    params: 3
        -});
        - 
        -var getHex = new Method({
        -    name: 'getHex',
        -    call: 'db_getHex',
        -    params: 2
        -});
        - 
        -var methods = [
        -    putString, getString, putHex, getHex
        -];
        - 
        -module.exports = {
        -    methods: methods
        -};
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html deleted file mode 100644 index 6076cc0..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/errors.js.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/errors.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/errors.js

        -

        - - Statements: 33.33% (2 / 6)      - - - Branches: 0% (0 / 5)      - - - Functions: 0% (0 / 1)      - - - Lines: 33.33% (2 / 6)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file errors.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        - 
        -module.exports = {
        -    InvalidNumberOfParams: new Error('Invalid number of input parameters'),
        -    InvalidProvider: new Error('Providor not set or invalid'),
        -    InvalidResponse: function(result){
        -        var message = 'Invalid JSON RPC response';
        - 
        -        if(utils.isObject(result) && result.error && result.error.message) {
        -            message = result.error.message;
        -        }
        - 
        -        return new Error(message);
        -    }
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html deleted file mode 100644 index 2dda846..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/eth.js.html +++ /dev/null @@ -1,819 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/eth.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/eth.js

        -

        - - Statements: 100% (36 / 36)      - - - Branches: 100% (20 / 20)      - - - Functions: 100% (7 / 7)      - - - Lines: 100% (36 / 36)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -6 -  -  -1 -4 -  -  -1 -6 -  -  -1 -4 -  -  -1 -4 -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -6 -  -  -  -1 -  -  -  -6 -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/**
        - * @file eth.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @author Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -/**
        - * Web3
        - * 
        - * @module web3
        - */
        - 
        -/**
        - * Eth methods and properties
        - *
        - * An example method object can look as follows:
        - *
        - *      {
        - *      name: 'getBlock',
        - *      call: blockCall,
        - *      params: 2,
        - *      outputFormatter: formatters.outputBlockFormatter,
        - *      inputFormatter: [ // can be a formatter funciton or an array of functions. Where each item in the array will be used for one parameter
        - *           utils.toHex, // formats paramter 1
        - *           function(param){ return !!param; } // formats paramter 2
        - *         ]
        - *       },
        - *
        - * @class [web3] eth
        - * @constructor
        - */
        - 
        -"use strict";
        - 
        -var formatters = require('./formatters');
        -var utils = require('../utils/utils');
        -var Method = require('./method');
        -var Property = require('./property');
        - 
        -var blockCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
        -};
        - 
        -var transactionFromBlockCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
        -};
        - 
        -var uncleCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
        -};
        - 
        -var getBlockTransactionCountCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
        -};
        - 
        -var uncleCountCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
        -};
        - 
        -/// @returns an array of objects describing web3.eth api methods
        - 
        -var getBalance = new Method({
        -    name: 'getBalance', 
        -    call: 'eth_getBalance', 
        -    params: 2,
        -    inputFormatter: [utils.toHex, formatters.inputDefaultBlockNumberFormatter],
        -    outputFormatter: formatters.outputBigNumberFormatter
        -});
        - 
        -var getStorageAt = new Method({
        -    name: 'getStorageAt', 
        -    call: 'eth_getStorageAt', 
        -    params: 3,
        -    inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
        -});
        - 
        -var getCode = new Method({
        -    name: 'getCode',
        -    call: 'eth_getCode',
        -    params: 2,
        -    inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter]
        -});
        - 
        -var getBlock = new Method({
        -    name: 'getBlock', 
        -    call: blockCall,
        -    params: 2,
        -    inputFormatter: [utils.toHex, function (val) { return !!val; }],
        -    outputFormatter: formatters.outputBlockFormatter
        -});
        - 
        -var getUncle = new Method({
        -    name: 'getUncle',
        -    call: uncleCall,
        -    params: 3,
        -    inputFormatter: [utils.toHex, utils.toHex, function (val) { return !!val; }],
        -    outputFormatter: formatters.outputBlockFormatter,
        - 
        -});
        - 
        -var getCompilers = new Method({
        -    name: 'getCompilers',
        -    call: 'eth_getCompilers',
        -    params: 0
        -});
        - 
        -var getBlockTransactionCount = new Method({
        -    name: 'getBlockTransactionCount',
        -    call: getBlockTransactionCountCall,
        -    params: 1,
        -    inputFormatter: [utils.toHex],
        -    outputFormatter: utils.toDecimal
        -});
        - 
        -var getBlockUncleCount = new Method({
        -    name: 'getBlockUncleCount',
        -    call: uncleCountCall,
        -    params: 1,
        -    inputFormatter: [utils.toHex],
        -    outputFormatter: utils.toDecimal
        -});
        - 
        -var getTransaction = new Method({
        -    name: 'getTransaction',
        -    call: 'eth_getTransactionByHash',
        -    params: 1,
        -    outputFormatter: formatters.outputTransactionFormatter
        -});
        - 
        -var getTransactionFromBlock = new Method({
        -    name: 'getTransactionFromBlock',
        -    call: transactionFromBlockCall,
        -    params: 2,
        -    inputFormatter: [utils.toHex, utils.toHex],
        -    outputFormatter: formatters.outputTransactionFormatter
        -});
        - 
        -var getTransactionCount = new Method({
        -    name: 'getTransactionCount',
        -    call: 'eth_getTransactionCount',
        -    params: 2,
        -    inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
        -    outputFormatter: utils.toDecimal
        -});
        - 
        -var sendTransaction = new Method({
        -    name: 'sendTransaction',
        -    call: 'eth_sendTransaction',
        -    params: 1,
        -    inputFormatter: [formatters.inputTransactionFormatter]
        -});
        - 
        -var call = new Method({
        -    name: 'call',
        -    call: 'eth_call',
        -    params: 2,
        -    inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
        -});
        - 
        -var compileSolidity = new Method({
        -    name: 'compile.solidity',
        -    call: 'eth_compileSolidity',
        -    params: 1
        -});
        - 
        -var compileLLL = new Method({
        -    name: 'compile.lll',
        -    call: 'eth_compileLLL',
        -    params: 1
        -});
        - 
        -var compileSerpent = new Method({
        -    name: 'compile.serpent',
        -    call: 'eth_compileSerpent',
        -    params: 1
        -});
        - 
        -var flush = new Method({
        -    name: 'flush',
        -    call: 'eth_flush',
        -    params: 0
        -});
        - 
        -var methods = [
        -    getBalance,
        -    getStorageAt,
        -    getCode,
        -    getBlock,
        -    getUncle,
        -    getCompilers,
        -    getBlockTransactionCount,
        -    getBlockUncleCount,
        -    getTransaction,
        -    getTransactionFromBlock,
        -    getTransactionCount,
        -    call,
        -    sendTransaction,
        -    compileSolidity,
        -    compileLLL,
        -    compileSerpent,
        -    flush
        -];
        - 
        -/// @returns an array of objects describing web3.eth api properties
        - 
        - 
        - 
        -var properties = [
        -    new Property({
        -        name: 'coinbase',
        -        getter: 'eth_coinbase'
        -    }),
        -    new Property({
        -        name: 'mining',
        -        getter: 'eth_mining'
        -    }),
        -    new Property({
        -        name: 'gasPrice',
        -        getter: 'eth_gasPrice',
        -        outputFormatter: formatters.inputNumberFormatter
        -    }),
        -    new Property({
        -        name: 'accounts',
        -        getter: 'eth_accounts'
        -    }),
        -    new Property({
        -        name: 'blockNumber',
        -        getter: 'eth_blockNumber',
        -        outputFormatter: utils.toDecimal
        -    })
        -];
        - 
        -module.exports = {
        -    methods: methods,
        -    properties: properties
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html deleted file mode 100644 index 708e5bd..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/event.js.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/event.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/event.js

        -

        - - Statements: 86.89% (53 / 61)      - - - Branches: 75% (12 / 16)      - - - Functions: 93.33% (14 / 15)      - - - Lines: 86.67% (52 / 60)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -1 -9 -24 -  -  -  -1 -3 -3 -  -  -3 -  -  -  -3 -  -  -1 -  -4 -3 -  -3 -3 -1 -2 -  -  -2 -  -  -  -1 -  -  -5 -5 -5 -5 -5 -5 -4 -  -5 -  -  -  -1 -3 -3 -3 -9 -9 -5 -  -4 -  -9 -9 -  -  -  -1 -  -3 -3 -  -  -  -  -  -  -3 -  -  -3 -  -3 -5 -3 -  -3 -3 -  -3 -  -3 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file event.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2014
        - */
        - 
        -var abi = require('../solidity/abi');
        -var utils = require('../utils/utils');
        -var signature = require('./signature');
        - 
        -/// filter inputs array && returns only indexed (or not) inputs
        -/// @param inputs array
        -/// @param bool if result should be an array of indexed params on not
        -/// @returns array of (not?) indexed params
        -var filterInputs = function (inputs, indexed) {
        -    return inputs.filter(function (current) {
        -        return current.indexed === indexed;
        -    });
        -};
        - 
        -var inputWithName = function (inputs, name) {
        -    var index = utils.findIndex(inputs, function (input) {
        -        return input.name === name;
        -    });
        -    
        -    Iif (index === -1) {
        -        console.error('indexed param with name ' + name + ' not found');
        -        return undefined;
        -    }
        -    return inputs[index];
        -};
        - 
        -var indexedParamsToTopics = function (event, indexed) {
        -    // sort keys?
        -    return Object.keys(indexed).map(function (key) {
        -        var inputs = [inputWithName(filterInputs(event.inputs, true), key)];
        - 
        -        var value = indexed[key];
        -        if (value instanceof Array) {
        -            return value.map(function (v) {
        -                return abi.formatInput(inputs, [v]);
        -            }); 
        -        }
        -        return '0x' + abi.formatInput(inputs, [value]);
        -    });
        -};
        - 
        -var inputParser = function (address, sign, event) {
        -    
        -    // valid options are 'earliest', 'latest', 'offset' and 'max', as defined for 'eth.filter'
        -    return function (indexed, options) {
        -        var o = options || {};
        -        o.address = address;
        -        o.topics = [];
        -        o.topics.push(sign);
        -        if (indexed) {
        -            o.topics = o.topics.concat(indexedParamsToTopics(event, indexed));
        -        }
        -        return o;
        -    };
        -};
        - 
        -var getArgumentsObject = function (inputs, indexed, notIndexed) {
        -    var indexedCopy = indexed.slice();
        -    var notIndexedCopy = notIndexed.slice();
        -    return inputs.reduce(function (acc, current) {
        -        var value;
        -        if (current.indexed)
        -            value = indexedCopy.splice(0, 1)[0];
        -        else
        -            value = notIndexedCopy.splice(0, 1)[0];
        - 
        -        acc[current.name] = value;
        -        return acc;
        -    }, {}); 
        -};
        - 
        -var outputParser = function (event) {
        -    
        -    return function (output) {
        -        var result = {
        -            event: utils.extractDisplayName(event.name),
        -            number: output.number,
        -            hash: output.hash,
        -            args: {}
        -        };
        - 
        -        Iif (!output.topics) {
        -            return result;
        -        }
        -        output.data = output.data || '';
        -       
        -        var indexedOutputs = filterInputs(event.inputs, true);
        -        var indexedData = "0x" + output.topics.slice(1, output.topics.length).map(function (topics) { return topics.slice(2); }).join("");
        -        var indexedRes = abi.formatOutput(indexedOutputs, indexedData);
        - 
        -        var notIndexedOutputs = filterInputs(event.inputs, false);
        -        var notIndexedRes = abi.formatOutput(notIndexedOutputs, output.data);
        - 
        -        result.args = getArgumentsObject(event.inputs, indexedRes, notIndexedRes);
        - 
        -        return result;
        -    };
        -};
        - 
        -var getMatchingEvent = function (events, payload) {
        -    for (var i = 0; i < events.length; i++) {
        -        var sign = signature.eventSignatureFromAscii(events[i].name); 
        -        if (sign === payload.topics[0]) {
        -            return events[i];
        -        }
        -    }
        -    return undefined;
        -};
        - 
        - 
        -module.exports = {
        -    inputParser: inputParser,
        -    outputParser: outputParser,
        -    getMatchingEvent: getMatchingEvent
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html deleted file mode 100644 index 1378fef..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/filter.js.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/filter.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/filter.js

        -

        - - Statements: 85.11% (40 / 47)      - - - Branches: 72.22% (13 / 18)      - - - Functions: 76.92% (10 / 13)      - - - Lines: 85.11% (40 / 47)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -1 -  -5 -2 -  -  -3 -  -  -3 -3 -4 -  -  -3 -6 -4 -  -2 -  -  -2 -  -  -  -3 -  -  -  -  -  -  -  -  -1 -5 -5 -20 -  -5 -5 -5 -5 -5 -  -  -1 -2 -2 -  -2 -2 -  -  -  -  -  -2 -2 -2 -2 -  -  -  -  -2 -  -  -  -  -  -1 -1 -1 -1 -  -  -1 -  -  -  -  -  -  -  -1 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file filter.js
        - * @authors:
        - *   Jeffrey Wilcke <jeff@ethdev.com>
        - *   Marek Kotewicz <marek@ethdev.com>
        - *   Marian Oancea <marian@ethdev.com>
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - *   Gav Wood <g@ethdev.com>
        - * @date 2014
        - */
        - 
        -var RequestManager = require('./requestmanager');
        -var utils = require('../utils/utils');
        - 
        -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
        -/// @param should be string or object
        -/// @returns options string or object
        -var getOptions = function (options) {
        - 
        -    if (utils.isString(options)) {
        -        return options;
        -    } 
        - 
        -    options = options || {};
        - 
        -    // make sure topics, get converted to hex
        -    options.topics = options.topics || [];
        -    options.topics = options.topics.map(function(topic){
        -        return utils.toHex(topic);
        -    });
        - 
        -    var asBlockNumber = function (n) {
        -        if (typeof n === 'undefined') {
        -            return undefined;
        -        }
        -        Iif (n === 'latest' || n === 'pending') {
        -           return n; 
        -        }
        -        return utils.toHex(n);
        -    };
        - 
        -    // lazy load
        -    return {
        -        topics: options.topics,
        -        to: options.to,
        -        address: options.address,
        -        fromBlock: asBlockNumber(options.fromBlock),
        -        toBlock: asBlockNumber(options.toBlock) 
        -    }; 
        -};
        - 
        -var Filter = function (options, methods, formatter) {
        -    var implementation = {};
        -    methods.forEach(function (method) {
        -        method.attachToObject(implementation);
        -    });
        -    this.options = getOptions(options);
        -    this.implementation = implementation;
        -    this.callbacks = [];
        -    this.formatter = formatter;
        -    this.filterId = this.implementation.newFilter(this.options);
        -};
        - 
        -Filter.prototype.watch = function (callback) {
        -    this.callbacks.push(callback);
        -    var self = this;
        - 
        -    var onMessage = function (error, messages) {
        -        Iif (error) {
        -            return self.callbacks.forEach(function (callback) {
        -                callback(error);
        -            });
        -        }
        - 
        -        messages.forEach(function (message) {
        -            message = self.formatter ? self.formatter(message) : message;
        -            self.callbacks.forEach(function (callback) {
        -                callback(null, message);
        -            });
        -        });
        -    };
        - 
        -    RequestManager.getInstance().startPolling({
        -        method: this.implementation.poll.call,
        -        params: [this.filterId],
        -    }, this.filterId, onMessage, this.stopWatching.bind(this));
        -};
        - 
        -Filter.prototype.stopWatching = function () {
        -    RequestManager.getInstance().stopPolling(this.filterId);
        -    this.implementation.uninstallFilter(this.filterId);
        -    this.callbacks = [];
        -};
        - 
        -Filter.prototype.get = function () {
        -    var logs = this.implementation.getLogs(this.filterId);
        -    var self = this;
        -    return logs.map(function (log) {
        -        return self.formatter ? self.formatter(log) : log;
        -    });
        -};
        - 
        -module.exports = Filter;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html deleted file mode 100644 index dc57471..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/formatters.js.html +++ /dev/null @@ -1,681 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/formatters.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/formatters.js

        -

        - - Statements: 89.39% (59 / 66)      - - - Branches: 64.29% (9 / 14)      - - - Functions: 92.31% (12 / 13)      - - - Lines: 89.39% (59 / 66)      - - Ignored: none      -

        -
        All files » ethereum.js/lib/web3/ » formatters.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -1 -8 -  -  -1 -18 -  -  -  -  -  -  -  -  -  -1 -  -  -1 -  -  -  -  -1 -3 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -11 -11 -11 -11 -11 -11 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -13 -13 -13 -13 -13 -  -13 -13 -13 -  -13 -12 -20 -4 -  -  -  -13 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -  -1 -  -  -  -  -1 -2 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -1 -1 -  -1 -1 -  -  -  -1 -2 -  -  -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file formatters.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @author Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        -var config = require('../utils/config');
        - 
        -/**
        - * Should the format output to a big number
        - *
        - * @method outputBigNumberFormatter
        - * @param {String|Number|BigNumber}
        - * @returns {BigNumber} object
        - */
        -var outputBigNumberFormatter = function (number) {
        -    return utils.toBigNumber(number);
        -};
        - 
        -var inputDefaultBlockNumberFormatter = function (blockNumber) {
        -    return blockNumber === undefined ? config.ETH_DEFAULTBLOCK : utils.toHex(blockNumber); // instead use default block number here
        -};
        - 
        -/**
        - * Formats the input of a transaction and converts all values to HEX
        - *
        - * @method inputTransactionFormatter
        - * @param {Object} transaction options
        - * @returns object
        -*/
        -var inputTransactionFormatter = function (options){
        - 
        -    // make code -> data
        -    Iif (options.code) {
        -        options.data = options.code;
        -        delete options.code;
        -    }
        - 
        -    ['gasPrice', 'gas', 'value'].forEach(function(key){
        -        options[key] = utils.fromDecimal(options[key]);
        -    });
        - 
        -    return options; 
        -};
        - 
        -/**
        - * Formats the output of a transaction to its proper values
        - * 
        - * @method outputTransactionFormatter
        - * @param {Object} transaction
        - * @returns {Object} transaction
        -*/
        -var outputTransactionFormatter = function (tx){
        -    tx.blockNumber = utils.toDecimal(tx.blockNumber);
        -    tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
        -    tx.gas = utils.toDecimal(tx.gas);
        -    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
        -    tx.value = utils.toBigNumber(tx.value);
        -    return tx;
        -};
        - 
        -/**
        - * Formats the input of a call and converts all values to HEX
        - *
        - * @method inputCallFormatter
        - * @param {Object} transaction options
        - * @returns object
        -*/
        -var inputCallFormatter = function (options){
        -    
        -    // make code -> data
        -    if (options.code) {
        -        options.data = options.code;
        -        delete options.code;
        -    }
        - 
        -    return options; 
        -};
        - 
        -/**
        - * Formats the output of a block to its proper values
        - *
        - * @method outputBlockFormatter
        - * @param {Object} block object 
        - * @returns {Object} block object
        -*/
        -var outputBlockFormatter = function(block) {
        - 
        -    // transform to number
        -    block.gasLimit = utils.toDecimal(block.gasLimit);
        -    block.gasUsed = utils.toDecimal(block.gasUsed);
        -    block.size = utils.toDecimal(block.size);
        -    block.timestamp = utils.toDecimal(block.timestamp);
        -    block.number = utils.toDecimal(block.number);
        - 
        -    block.minGasPrice = utils.toBigNumber(block.minGasPrice);
        -    block.difficulty = utils.toBigNumber(block.difficulty);
        -    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);
        - 
        -    if (utils.isArray(block.transactions)) {
        -        block.transactions.forEach(function(item){
        -            if(!utils.isString(item))
        -                return outputTransactionFormatter(item);
        -        });
        -    }
        - 
        -    return block;
        -};
        - 
        -/**
        - * Formats the output of a log
        - * 
        - * @method outputLogFormatter
        - * @param {Object} log object
        - * @returns {Object} log
        -*/
        -var outputLogFormatter = function(log){
        -    log.blockNumber = utils.toDecimal(log.blockNumber);
        -    log.transactionIndex = utils.toDecimal(log.transactionIndex);
        -    log.logIndex = utils.toDecimal(log.logIndex);
        - 
        -    return log;
        -};
        - 
        - 
        -/**
        - * Formats the input of a whisper post and converts all values to HEX
        - *
        - * @method inputPostFormatter
        - * @param {Object} transaction object
        - * @returns {Object}
        -*/
        -var inputPostFormatter = function(post){
        - 
        -    post.payload = utils.toHex(post.payload);
        -    post.ttl = utils.fromDecimal(post.ttl);
        -    post.priority = utils.fromDecimal(post.priority);
        - 
        -    Iif(!utils.isArray(post.topics)) {
        -        post.topics = [post.topics];
        -    }
        - 
        -    // format the following options
        -    post.topics = post.topics.map(function(topic){
        -        return utils.fromAscii(topic);
        -    });
        - 
        -    return post; 
        -};
        - 
        -/**
        - * Formats the output of a received post message
        - *
        - * @method outputPostFormatter
        - * @param {Object}
        - * @returns {Object}
        - */
        -var outputPostFormatter = function(post){
        - 
        -    post.expiry = utils.toDecimal(post.expiry);
        -    post.sent = utils.toDecimal(post.sent);
        -    post.ttl = utils.toDecimal(post.ttl);
        -    post.workProved = utils.toDecimal(post.workProved);
        -    post.payloadRaw = post.payload;
        -    post.payload = utils.toAscii(post.payload);
        - 
        -    Eif (utils.isJson(post.payload)) {
        -        post.payload = JSON.parse(post.payload);
        -    }
        - 
        -    // format the following options
        -    post.topics = post.topics.map(function(topic){
        -        return utils.toAscii(topic);
        -    });
        - 
        -    return post;
        -};
        - 
        -module.exports = {
        -    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
        -    inputTransactionFormatter: inputTransactionFormatter,
        -    inputCallFormatter: inputCallFormatter,
        -    inputPostFormatter: inputPostFormatter,
        -    outputBigNumberFormatter: outputBigNumberFormatter,
        -    outputTransactionFormatter: outputTransactionFormatter,
        -    outputBlockFormatter: outputBlockFormatter,
        -    outputLogFormatter: outputLogFormatter,
        -    outputPostFormatter: outputPostFormatter
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html deleted file mode 100644 index 109c174..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/httpprovider.js.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/httpprovider.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/httpprovider.js

        -

        - - Statements: 100% (16 / 16)      - - - Branches: 75% (3 / 4)      - - - Functions: 100% (4 / 4)      - - - Lines: 100% (16 / 16)      - - Ignored: none      -

        -
        All files » ethereum.js/lib/web3/ » httpprovider.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -2 -2 -  -  -2 -1 -  -1 -1 -  -  -  -  -  -  -1 -  -  -2 -1 -1 -1 -  -1 -  -  -  -1 -1 -  -  -2 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file httpprovider.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - *   Marian Oancea <marian@ethdev.com>
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2014
        - */
        - 
        -"use strict";
        - 
        -var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore:line
        - 
        -var HttpProvider = function (host) {
        -    this.host = host || 'http://localhost:8080';
        -};
        - 
        -HttpProvider.prototype.send = function (payload) {
        -    var request = new XMLHttpRequest();
        - 
        -    request.open('POST', this.host, false);
        -    request.send(JSON.stringify(payload));
        - 
        -    // check request.status
        -    // TODO: throw an error here! it cannot silently fail!!!
        -    //if (request.status !== 200) {
        -        //return;
        -    //}
        -    return JSON.parse(request.responseText);
        -};
        - 
        -HttpProvider.prototype.sendAsync = function (payload, callback) {
        -    var request = new XMLHttpRequest();
        -    request.onreadystatechange = function() {
        -        Eif (request.readyState === 4) {
        -            // TODO: handle the error properly here!!!
        -            callback(null, JSON.parse(request.responseText));
        -        }
        -    };
        - 
        -    request.open('POST', this.host, true);
        -    request.send(JSON.stringify(payload));
        -};
        - 
        -module.exports = HttpProvider;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html deleted file mode 100644 index 974444a..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/index.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/ - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/

        -

        - - Statements: 85.45% (464 / 543)      - - - Branches: 70.52% (122 / 173)      - - - Functions: 86.78% (105 / 121)      - - - Lines: 85.4% (462 / 541)      - - Ignored: none      -

        -
        All files » ethereum.js/lib/web3/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        contract.js61.22%(60 / 98)34.78%(8 / 23)61.9%(13 / 21)60.82%(59 / 97)
        db.js100%(7 / 7)100%(0 / 0)100%(0 / 0)100%(7 / 7)
        errors.js33.33%(2 / 6)0%(0 / 5)0%(0 / 1)33.33%(2 / 6)
        eth.js100%(36 / 36)100%(20 / 20)100%(7 / 7)100%(36 / 36)
        event.js86.89%(53 / 61)75%(12 / 16)93.33%(14 / 15)86.67%(52 / 60)
        filter.js85.11%(40 / 47)72.22%(13 / 18)76.92%(10 / 13)85.11%(40 / 47)
        formatters.js89.39%(59 / 66)64.29%(9 / 14)92.31%(12 / 13)89.39%(59 / 66)
        httpprovider.js100%(16 / 16)75%(3 / 4)100%(4 / 4)100%(16 / 16)
        jsonrpc.js88.89%(16 / 18)81.82%(9 / 11)100%(6 / 6)88.89%(16 / 18)
        method.js100%(47 / 47)100%(22 / 22)100%(11 / 11)100%(47 / 47)
        net.js100%(5 / 5)100%(0 / 0)100%(0 / 0)100%(5 / 5)
        property.js91.3%(21 / 23)70%(7 / 10)66.67%(4 / 6)91.3%(21 / 23)
        qtsync.js100%(5 / 5)100%(0 / 0)100%(2 / 2)100%(5 / 5)
        requestmanager.js85.53%(65 / 76)60.71%(17 / 28)100%(17 / 17)85.53%(65 / 76)
        shh.js100%(9 / 9)100%(0 / 0)100%(0 / 0)100%(9 / 9)
        signature.js100%(7 / 7)100%(0 / 0)100%(2 / 2)100%(7 / 7)
        watches.js100%(16 / 16)100%(2 / 2)100%(3 / 3)100%(16 / 16)
        -
        -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html deleted file mode 100644 index 3647bad..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/jsonrpc.js.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/jsonrpc.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/jsonrpc.js

        -

        - - Statements: 88.89% (16 / 18)      - - - Branches: 81.82% (9 / 11)      - - - Functions: 100% (6 / 6)      - - - Lines: 88.89% (16 / 18)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -175 -  -  -175 -  -  -  -  -  -1 -172 -172 -  -  -  -  -  -  -  -  -  -  -1 -90 -  -  -90 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -95 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -4 -4 -4 -  -  -  -1 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file jsonrpc.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Jsonrpc = function () {
        -    // singleton pattern
        -    Iif (arguments.callee._singletonInstance) {
        -        return arguments.callee._singletonInstance;
        -    }
        -    this.messageId = 1;
        -};
        - 
        -/**
        - * @return {Jsonrpc} singleton
        - */
        -Jsonrpc.getInstance = function () {
        -    var instance = new Jsonrpc();
        -    return instance;
        -};
        - 
        -/**
        - * Should be called to valid json create payload object
        - *
        - * @method toPayload
        - * @param {Function} method of jsonrpc call, required
        - * @param {Array} params, an array of method params, optional
        - * @returns {Object} valid jsonrpc payload object
        - */
        -Jsonrpc.prototype.toPayload = function (method, params) {
        -    Iif (!method)
        -        console.error('jsonrpc method should be specified!');
        - 
        -    return {
        -        jsonrpc: '2.0',
        -        method: method,
        -        params: params || [],
        -        id: this.messageId++
        -    }; 
        -};
        - 
        -/**
        - * Should be called to check if jsonrpc response is valid
        - *
        - * @method isValidResponse
        - * @param {Object}
        - * @returns {Boolean} true if response is valid, otherwise false 
        - */
        -Jsonrpc.prototype.isValidResponse = function (response) {
        -    return !!response &&
        -        !response.error &&
        -        response.jsonrpc === '2.0' &&
        -        typeof response.id === 'number' &&
        -        response.result !== undefined; // only undefined is not valid json object
        -};
        - 
        -/**
        - * Should be called to create batch payload object
        - *
        - * @method toBatchPayload
        - * @param {Array} messages, an array of objects with method (required) and params (optional) fields
        - * @returns {Array} batch payload
        - */
        -Jsonrpc.prototype.toBatchPayload = function (messages) {
        -    var self = this;
        -    return messages.map(function (message) {
        -        return self.toPayload(message.method, message.params);
        -    }); 
        -};
        - 
        -module.exports = Jsonrpc;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html deleted file mode 100644 index a144e51..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/method.js.html +++ /dev/null @@ -1,534 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/method.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/method.js

        -

        - - Statements: 100% (47 / 47)      - - - Branches: 100% (22 / 22)      - - - Functions: 100% (11 / 11)      - - - Lines: 100% (47 / 47)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -1 -58 -58 -58 -58 -58 -  -  -  -  -  -  -  -  -  -1 -73 -  -  -  -  -  -  -  -  -  -1 -72 -32 -  -40 -  -  -  -  -  -  -  -  -  -1 -73 -2 -  -  -  -  -  -  -  -  -  -  -1 -71 -28 -  -  -43 -91 -  -  -  -  -  -  -  -  -  -  -1 -71 -  -  -  -  -  -  -  -  -  -1 -47 -47 -47 -47 -3 -3 -  -44 -  -  -  -  -  -  -  -  -  -  -1 -69 -69 -69 -69 -  -69 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -69 -69 -30 -30 -30 -  -  -39 -  -  -1 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/**
        - * @file method.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var RequestManager = require('./requestmanager');
        -var utils = require('../utils/utils');
        -var errors = require('./errors');
        - 
        -var Method = function (options) {
        -    this.name = options.name;
        -    this.call = options.call;
        -    this.params = options.params || 0;
        -    this.inputFormatter = options.inputFormatter;
        -    this.outputFormatter = options.outputFormatter;
        -};
        - 
        -/**
        - * Should be used to determine name of the jsonrpc method based on arguments
        - *
        - * @method getCall
        - * @param {Array} arguments
        - * @return {String} name of jsonrpc method
        - */
        -Method.prototype.getCall = function (args) {
        -    return utils.isFunction(this.call) ? this.call(args) : this.call;
        -};
        - 
        -/**
        - * Should be used to extract callback from array of arguments. Modifies input param
        - *
        - * @method extractCallback
        - * @param {Array} arguments
        - * @return {Function|Null} callback, if exists
        - */
        -Method.prototype.extractCallback = function (args) {
        -    if (utils.isFunction(args[args.length - 1])) {
        -        return args.pop(); // modify the args array!
        -    }
        -    return null;
        -};
        - 
        -/**
        - * Should be called to check if the number of arguments is correct
        - * 
        - * @method validateArgs
        - * @param {Array} arguments
        - * @throws {Error} if it is not
        - */
        -Method.prototype.validateArgs = function (args) {
        -    if (args.length !== this.params) {
        -        throw errors.InvalidNumberOfParams;
        -    }
        -};
        - 
        -/**
        - * Should be called to format input args of method
        - * 
        - * @method formatInput
        - * @param {Array}
        - * @return {Array}
        - */
        -Method.prototype.formatInput = function (args) {
        -    if (!this.inputFormatter) {
        -        return args;
        -    }
        - 
        -    return this.inputFormatter.map(function (formatter, index) {
        -        return formatter ? formatter(args[index]) : args[index];
        -    });
        -};
        - 
        -/**
        - * Should be called to format output(result) of method
        - *
        - * @method formatOutput
        - * @param {Object}
        - * @return {Object}
        - */
        -Method.prototype.formatOutput = function (result) {
        -    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
        -};
        - 
        -/**
        - * Should attach function to method
        - * 
        - * @method attachToObject
        - * @param {Object}
        - * @param {Function}
        - */
        -Method.prototype.attachToObject = function (obj) {
        -    var func = this.send.bind(this);
        -    func.call = this.call; // that's ugly. filter.js uses it
        -    var name = this.name.split('.');
        -    if (name.length > 1) {
        -        obj[name[0]] = obj[name[0]] || {};
        -        obj[name[0]][name[1]] = func;
        -    } else {
        -        obj[name[0]] = func; 
        -    }
        -};
        - 
        -/**
        - * Should create payload from given input args
        - *
        - * @method toPayload
        - * @param {Array} args
        - * @return {Object}
        - */
        -Method.prototype.toPayload = function (args) {
        -    var call = this.getCall(args);
        -    var callback = this.extractCallback(args);
        -    var params = this.formatInput(args);
        -    this.validateArgs(params);
        - 
        -    return {
        -        method: call,
        -        params: params,
        -        callback: callback
        -    };
        -};
        - 
        -/**
        - * Should send request to the API
        - *
        - * @method send
        - * @param list of params
        - * @return result
        - */
        -Method.prototype.send = function () {
        -    var payload = this.toPayload(Array.prototype.slice.call(arguments));
        -    if (payload.callback) {
        -        var self = this;
        -        return RequestManager.getInstance().sendAsync(payload, function (err, result) {
        -            payload.callback(null, self.formatOutput(result));
        -        });
        -    }
        -    return this.formatOutput(RequestManager.getInstance().send(payload));
        -};
        - 
        -module.exports = Method;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html deleted file mode 100644 index b3da6ba..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/net.js.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/net.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/net.js

        -

        - - Statements: 100% (5 / 5)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (5 / 5)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file eth.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        -var Property = require('./property');
        - 
        -/// @returns an array of objects describing web3.eth api methods
        -var methods = [
        -];
        - 
        -/// @returns an array of objects describing web3.eth api properties
        -var properties = [
        -    new Property({
        -        name: 'listening',
        -        getter: 'net_listening'
        -    }),
        -    new Property({
        -        name: 'peerCount',
        -        getter: 'net_peerCount',
        -        outputFormatter: utils.toDecimal
        -    })
        -];
        - 
        - 
        -module.exports = {
        -    methods: methods,
        -    properties: properties
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html deleted file mode 100644 index 3d6e6b2..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/property.js.html +++ /dev/null @@ -1,369 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/property.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/property.js

        -

        - - Statements: 91.3% (21 / 23)      - - - Branches: 70% (7 / 10)      - - - Functions: 66.67% (4 / 6)      - - - Lines: 91.3% (21 / 23)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -11 -11 -11 -11 -11 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -13 -  -  -  -  -  -  -  -  -  -1 -11 -  -  -  -  -11 -11 -4 -4 -  -7 -  -  -  -  -  -  -  -  -  -1 -13 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/**
        - * @file property.js
        - * @author Fabian Vogelsteller <fabian@frozeman.de>
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var RequestManager = require('./requestmanager');
        - 
        -var Property = function (options) {
        -    this.name = options.name;
        -    this.getter = options.getter;
        -    this.setter = options.setter;
        -    this.outputFormatter = options.outputFormatter;
        -    this.inputFormatter = options.inputFormatter;
        -};
        - 
        -/**
        - * Should be called to format input args of method
        - * 
        - * @method formatInput
        - * @param {Array}
        - * @return {Array}
        - */
        -Property.prototype.formatInput = function (arg) {
        -    return this.inputFormatter ? this.inputFormatter(arg) : arg;
        -};
        - 
        -/**
        - * Should be called to format output(result) of method
        - *
        - * @method formatOutput
        - * @param {Object}
        - * @return {Object}
        - */
        -Property.prototype.formatOutput = function (result) {
        -    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
        -};
        - 
        -/**
        - * Should attach function to method
        - * 
        - * @method attachToObject
        - * @param {Object}
        - * @param {Function}
        - */
        -Property.prototype.attachToObject = function (obj) {
        -    var proto = {
        -        get: this.get.bind(this),
        -        set: this.set.bind(this)
        -    };
        - 
        -    var name = this.name.split('.');
        -    if (name.length > 1) {
        -        obj[name[0]] = obj[name[0]] || {};
        -        Object.defineProperty(obj[name[0]], name[1], proto); 
        -    } else {
        -        Object.defineProperty(obj, name[0], proto);
        -    }
        -};
        - 
        -/**
        - * Should be used to get value of the property
        - *
        - * @method get
        - * @return {Object} value of the property
        - */
        -Property.prototype.get = function () {
        -    return this.formatOutput(RequestManager.getInstance().send({
        -        method: this.getter
        -    }));
        -};
        - 
        -/**
        - * Should be used to set value of the property
        - *
        - * @method set
        - * @param {Object} new value of the property
        - */
        -Property.prototype.set = function (value) {
        -    return RequestManager.getInstance().send({
        -        method: this.setter,
        -        params: [this.formatInput(value)]
        -    });
        -};
        - 
        -module.exports = Property;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html deleted file mode 100644 index 8bd50d2..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/qtsync.js.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/qtsync.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/qtsync.js

        -

        - - Statements: 100% (5 / 5)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (2 / 2)      - - - Lines: 100% (5 / 5)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -2 -1 -1 -  -  -2 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file qtsync.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - *   Marian Oancea <marian@ethdev.com>
        - * @date 2014
        - */
        - 
        -var QtSyncProvider = function () {
        -};
        - 
        -QtSyncProvider.prototype.send = function (payload) {
        -    var result = navigator.qt.callMethod(JSON.stringify(payload));
        -    return JSON.parse(result);
        -};
        - 
        -module.exports = QtSyncProvider;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html deleted file mode 100644 index fc0b004..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/requestmanager.js.html +++ /dev/null @@ -1,714 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/requestmanager.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/requestmanager.js

        -

        - - Statements: 85.53% (65 / 76)      - - - Branches: 60.71% (17 / 28)      - - - Functions: 100% (17 / 17)      - - - Lines: 85.53% (65 / 76)      - - Ignored: none      -

        -
        All files » ethereum.js/lib/web3/ » requestmanager.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -1 -  -212 -211 -  -1 -  -1 -1 -1 -1 -  -  -  -  -  -1 -212 -212 -  -  -  -  -  -  -  -  -  -1 -53 -  -  -  -  -53 -53 -  -53 -  -  -  -53 -  -  -  -  -  -  -  -  -  -1 -31 -  -  -  -31 -31 -31 -  -  -  -31 -  -  -  -31 -  -  -  -  -  -  -  -  -  -1 -125 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -  -  -  -  -  -  -  -  -1 -2 -1 -  -2 -  -2 -2 -2 -  -2 -  -  -  -  -  -  -  -1 -5 -  -5 -3 -  -  -2 -  -  -  -  -2 -2 -  -  -2 -2 -  -2 -  -  -  -2 -  -  -  -2 -2 -2 -  -2 -2 -  -  -2 -  -2 -  -2 -  -  -  -  -1 -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file requestmanager.js
        - * @author Jeffrey Wilcke <jeff@ethdev.com>
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @author Marian Oancea <marian@ethdev.com>
        - * @author Fabian Vogelsteller <fabian@ethdev.com>
        - * @author Gav Wood <g@ethdev.com>
        - * @date 2014
        - */
        - 
        -var Jsonrpc = require('./jsonrpc');
        -var utils = require('../utils/utils');
        -var c = require('../utils/config');
        -var errors = require('./errors');
        - 
        -/**
        - * It's responsible for passing messages to providers
        - * It's also responsible for polling the ethereum node for incoming messages
        - * Default poll timeout is 1 second
        - * Singleton
        - */
        -var RequestManager = function (provider) {
        -    // singleton pattern
        -    if (arguments.callee._singletonInstance) {
        -        return arguments.callee._singletonInstance;
        -    }
        -    arguments.callee._singletonInstance = this;
        - 
        -    this.provider = provider;
        -    this.polls = [];
        -    this.timeout = null;
        -    this.poll();
        -};
        - 
        -/**
        - * @return {RequestManager} singleton
        - */
        -RequestManager.getInstance = function () {
        -    var instance = new RequestManager();
        -    return instance;
        -};
        - 
        -/**
        - * Should be used to synchronously send request
        - *
        - * @method send
        - * @param {Object} data
        - * @return {Object}
        - */
        -RequestManager.prototype.send = function (data) {
        -    Iif (!this.provider) {
        -        console.error(errors.InvalidProvider);
        -        return null;
        -    }
        - 
        -    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
        -    var result = this.provider.send(payload);
        - 
        -    Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
        -        throw errors.InvalidResponse(result);
        -    }
        - 
        -    return result.result;
        -};
        - 
        -/**
        - * Should be used to asynchronously send request
        - *
        - * @method sendAsync
        - * @param {Object} data
        - * @param {Function} callback
        - */
        -RequestManager.prototype.sendAsync = function (data, callback) {
        -    Iif (!this.provider) {
        -        return callback(errors.InvalidProvider);
        -    }
        - 
        -    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
        -    this.provider.sendAsync(payload, function (err, result) {
        -        Iif (err) {
        -            return callback(err);
        -        }
        -        
        -        Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
        -            return callback(errors.InvalidResponse(result));
        -        }
        - 
        -        callback(null, result.result);
        -    });
        -};
        - 
        -/**
        - * Should be used to set provider of request manager
        - *
        - * @method setProvider
        - * @param {Object}
        - */
        -RequestManager.prototype.setProvider = function (p) {
        -    this.provider = p;
        -};
        - 
        -/*jshint maxparams:4 */
        - 
        -/**
        - * Should be used to start polling
        - *
        - * @method startPolling
        - * @param {Object} data
        - * @param {Number} pollId
        - * @param {Function} callback
        - * @param {Function} uninstall
        - *
        - * @todo cleanup number of params
        - */
        -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {
        -    this.polls.push({data: data, id: pollId, callback: callback, uninstall: uninstall});
        -};
        -/*jshint maxparams:3 */
        - 
        -/**
        - * Should be used to stop polling for filter with given id
        - *
        - * @method stopPolling
        - * @param {Number} pollId
        - */
        -RequestManager.prototype.stopPolling = function (pollId) {
        -    for (var i = this.polls.length; i--;) {
        -        var poll = this.polls[i];
        -        Eif (poll.id === pollId) {
        -            this.polls.splice(i, 1);
        -        }
        -    }
        -};
        - 
        -/**
        - * Should be called to reset polling mechanism of request manager
        - *
        - * @method reset
        - */
        -RequestManager.prototype.reset = function () {
        -    this.polls.forEach(function (poll) {
        -        poll.uninstall(poll.id); 
        -    });
        -    this.polls = [];
        - 
        -    Eif (this.timeout) {
        -        clearTimeout(this.timeout);
        -        this.timeout = null;
        -    }
        -    this.poll();
        -};
        - 
        -/**
        - * Should be called to poll for changes on filter with given id
        - *
        - * @method poll
        - */
        -RequestManager.prototype.poll = function () {
        -    this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);
        - 
        -    if (!this.polls.length) {
        -        return;
        -    }
        - 
        -    Iif (!this.provider) {
        -        console.error(errors.InvalidProvider);
        -        return;
        -    }
        - 
        -    var payload = Jsonrpc.getInstance().toBatchPayload(this.polls.map(function (data) {
        -        return data.data;
        -    }));
        - 
        -    var self = this;
        -    this.provider.sendAsync(payload, function (error, results) {
        -        // TODO: console log?
        -        Iif (error) {
        -            return;
        -        }
        -            
        -        Iif (!utils.isArray(results)) {
        -            throw errors.InvalidResponse(results);
        -        }
        - 
        -        results.map(function (result, index) {
        -            result.callback = self.polls[index].callback;
        -            return result;
        -        }).filter(function (result) {
        -            var valid = Jsonrpc.getInstance().isValidResponse(result);
        -            Iif (!valid) {
        -                result.callback(errors.InvalidResponse(result));
        -            }
        -            return valid;
        -        }).filter(function (result) {
        -            return utils.isArray(result.result) && result.result.length > 0;
        -        }).forEach(function (result) {
        -            result.callback(null, result.result);
        -        });
        -    });
        -};
        - 
        -module.exports = RequestManager;
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html deleted file mode 100644 index 4d5162f..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/shh.js.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/shh.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/shh.js

        -

        - - Statements: 100% (9 / 9)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (0 / 0)      - - - Lines: 100% (9 / 9)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file shh.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Method = require('./method');
        -var formatters = require('./formatters');
        - 
        -var post = new Method({
        -    name: 'post', 
        -    call: 'shh_post', 
        -    params: 1,
        -    inputFormatter: formatters.inputPostFormatter
        -});
        - 
        -var newIdentity = new Method({
        -    name: 'newIdentity',
        -    call: 'shh_newIdentity',
        -    params: 0
        -});
        - 
        -var hasIdentity = new Method({
        -    name: 'hasIdentity',
        -    call: 'shh_hasIdentity',
        -    params: 1
        -});
        - 
        -var newGroup = new Method({
        -    name: 'newGroup',
        -    call: 'shh_newGroup',
        -    params: 0
        -});
        - 
        -var addToGroup = new Method({
        -    name: 'addToGroup',
        -    call: 'shh_addToGroup',
        -    params: 0
        -});
        - 
        -var methods = [
        -    post,
        -    newIdentity,
        -    hasIdentity,
        -    newGroup,
        -    addToGroup
        -];
        - 
        -module.exports = {
        -    methods: methods
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html deleted file mode 100644 index ab4d2fc..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/signature.js.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/signature.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/signature.js

        -

        - - Statements: 100% (7 / 7)      - - - Branches: 100% (0 / 0)      - - - Functions: 100% (2 / 2)      - - - Lines: 100% (7 / 7)      - - Ignored: none      -

        -
        All files » ethereum.js/lib/web3/ » signature.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -1 -1 -  -  -  -  -1 -2 -  -  -1 -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file signature.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var web3 = require('../web3'); 
        -var c = require('../utils/config');
        - 
        -/// @param function name for which we want to get signature
        -/// @returns signature of function with given name
        -var functionSignatureFromAscii = function (name) {
        -    return web3.sha3(web3.fromAscii(name)).slice(0, 2 + c.ETH_SIGNATURE_LENGTH * 2);
        -};
        - 
        -/// @param event name for which we want to get signature
        -/// @returns signature of event with given name
        -var eventSignatureFromAscii = function (name) {
        -    return web3.sha3(web3.fromAscii(name));
        -};
        - 
        -module.exports = {
        -    functionSignatureFromAscii: functionSignatureFromAscii,
        -    eventSignatureFromAscii: eventSignatureFromAscii
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html b/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html deleted file mode 100644 index 66f6a8a..0000000 --- a/node_modules/web3/coverage/lcov-report/ethereum.js/lib/web3/watches.js.html +++ /dev/null @@ -1,360 +0,0 @@ - - - - Code coverage report for ethereum.js/lib/web3/watches.js - - - - - - - - -
        -

        Code coverage report for ethereum.js/lib/web3/watches.js

        -

        - - Statements: 100% (16 / 16)      - - - Branches: 100% (2 / 2)      - - - Functions: 100% (3 / 3)      - - - Lines: 100% (16 / 16)      - - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -1 -4 -4 -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -1 -  -  -  -  -  -  -  -1 -  -  -  -  - 
        /*
        -    This file is part of ethereum.js.
        - 
        -    ethereum.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    ethereum.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file watches.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Method = require('./method');
        - 
        -/// @returns an array of objects describing web3.eth.filter api methods
        -var eth = function () {
        -    var newFilterCall = function (args) {
        -        return typeof args[0] === 'string' ? 'eth_newBlockFilter' : 'eth_newFilter';
        -    };
        - 
        -    var newFilter = new Method({
        -        name: 'newFilter',
        -        call: newFilterCall,
        -        params: 1
        -    });
        - 
        -    var uninstallFilter = new Method({
        -        name: 'uninstallFilter',
        -        call: 'eth_uninstallFilter',
        -        params: 1
        -    });
        - 
        -    var getLogs = new Method({
        -        name: 'getLogs',
        -        call: 'eth_getFilterLogs',
        -        params: 1
        -    });
        - 
        -    var poll = new Method({
        -        name: 'poll',
        -        call: 'eth_getFilterChanges',
        -        params: 1
        -    });
        - 
        -    return [
        -        newFilter,
        -        uninstallFilter,
        -        getLogs,
        -        poll
        -    ];
        -};
        - 
        -/// @returns an array of objects describing web3.shh.watch api methods
        -var shh = function () {
        -    var newFilter = new Method({
        -        name: 'newFilter',
        -        call: 'shh_newFilter',
        -        params: 1
        -    });
        - 
        -    var uninstallFilter = new Method({
        -        name: 'uninstallFilter',
        -        call: 'shh_uninstallFilter',
        -        params: 1
        -    });
        - 
        -    var getLogs = new Method({
        -        name: 'getLogs',
        -        call: 'shh_getMessages',
        -        params: 1
        -    });
        - 
        -    var poll = new Method({
        -        name: 'poll',
        -        call: 'shh_getFilterChanges',
        -        params: 1
        -    });
        - 
        -    return [
        -        newFilter,
        -        uninstallFilter,
        -        getLogs,
        -        poll
        -    ];
        -};
        - 
        -module.exports = {
        -    eth: eth,
        -    shh: shh
        -};
        - 
        - 
        - -
        - - - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/index.html b/node_modules/web3/coverage/lcov-report/index.html deleted file mode 100644 index b24a51c..0000000 --- a/node_modules/web3/coverage/lcov-report/index.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - Code coverage report for All files - - - - - - -
        -

        Code coverage report for All files

        -

        - Statements: 83.81% (1538 / 1835)      - Branches: 66.25% (426 / 643)      - Functions: 85.5% (336 / 393)      - Lines: 83.78% (1534 / 1831)      - Ignored: none      -

        -
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        web3/75%(3 / 4)50%(2 / 4)100%(0 / 0)75%(3 / 4)
        web3/lib/98.25%(56 / 57)0%(0 / 2)85.71%(6 / 7)98.25%(56 / 57)
        web3/lib/solidity/93.88%(368 / 392)79.03%(49 / 62)88.12%(89 / 101)93.88%(368 / 392)
        web3/lib/utils/96.4%(134 / 139)81.82%(63 / 77)96.55%(28 / 29)96.38%(133 / 138)
        web3/lib/web3/85.02%(840 / 988)67.4%(275 / 408)86.7%(189 / 218)84.97%(837 / 985)
        web3/lib/web3/methods/95%(114 / 120)100%(20 / 20)85.19%(23 / 27)95%(114 / 120)
        web3/node_modules/utf8/17.04%(23 / 135)24.29%(17 / 70)9.09%(1 / 11)17.04%(23 / 135)
        -
        -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/prettify.css b/node_modules/web3/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/node_modules/web3/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/web3/coverage/lcov-report/prettify.js b/node_modules/web3/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/node_modules/web3/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a..0000000 Binary files a/node_modules/web3/coverage/lcov-report/sort-arrow-sprite.png and /dev/null differ diff --git a/node_modules/web3/coverage/lcov-report/sorter.js b/node_modules/web3/coverage/lcov-report/sorter.js deleted file mode 100644 index 5e1bc15..0000000 --- a/node_modules/web3/coverage/lcov-report/sorter.js +++ /dev/null @@ -1,156 +0,0 @@ -var addSorting = (function () { - "use strict"; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { return document.querySelector('.coverage-summary table'); } - // returns the thead element of the summary table - function getTableHeader() { return getTable().querySelector('thead tr'); } - // returns the tbody element of the summary table - function getTableBody() { return getTable().querySelector('tbody'); } - // returns the th element for nth column - function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-abi' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - el = getNthColumn(i).querySelector('.sorter'); - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/node_modules/web3/coverage/lcov-report/web3/index.html b/node_modules/web3/coverage/lcov-report/web3/index.html deleted file mode 100644 index 4b23bc9..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for web3/ - - - - - - -
        -

        Code coverage report for web3/

        -

        - Statements: 75% (3 / 4)      - Branches: 50% (2 / 4)      - Functions: 100% (0 / 0)      - Lines: 75% (3 / 4)      - Ignored: none      -

        -
        All files » web3/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        index.js75%(3 / 4)50%(2 / 4)100%(0 / 0)75%(3 / 4)
        -
        -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/index.js.html b/node_modules/web3/coverage/lcov-report/web3/index.js.html deleted file mode 100644 index c0c10d1..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/index.js.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - Code coverage report for web3/index.js - - - - - - -
        -

        Code coverage report for web3/index.js

        -

        - Statements: 75% (3 / 4)      - Branches: 50% (2 / 4)      - Functions: 100% (0 / 0)      - Lines: 75% (3 / 4)      - Ignored: none      -

        -
        All files » web3/ » index.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -91 -  -  -1 -  -  -  -1 - 
        var Web3 = require('./lib/web3');
        - 
        -// dont override global variable
        -Iif (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {
        -    window.Web3 = Web3;
        -}
        - 
        -module.exports = Web3;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/index.html b/node_modules/web3/coverage/lcov-report/web3/lib/index.html deleted file mode 100644 index 4dd2115..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for web3/lib/ - - - - - - -
        -

        Code coverage report for web3/lib/

        -

        - Statements: 98.25% (56 / 57)      - Branches: 0% (0 / 2)      - Functions: 85.71% (6 / 7)      - Lines: 98.25% (56 / 57)      - Ignored: none      -

        -
        All files » web3/lib/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        web3.js98.25%(56 / 57)0%(0 / 2)85.71%(6 / 7)98.25%(56 / 57)
        -
        -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html deleted file mode 100644 index eb7a8d4..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/address.js.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/address.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/address.js

        -

        - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

        -
        All files » web3/lib/solidity/ » address.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -321 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -100 -  -  -1 -  - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -/**
        - * SolidityTypeAddress is a prootype that represents address type
        - * It matches:
        - * address
        - * address[]
        - * address[4]
        - * address[][]
        - * address[3][]
        - * address[][6][], ...
        - */
        -var SolidityTypeAddress = function () {
        -    this._inputFormatter = f.formatInputInt;
        -    this._outputFormatter = f.formatOutputAddress;
        -};
        - 
        -SolidityTypeAddress.prototype = new SolidityType({});
        -SolidityTypeAddress.prototype.constructor = SolidityTypeAddress;
        - 
        -SolidityTypeAddress.prototype.isType = function (name) {
        -    return !!name.match(/address(\[([0-9]*)\])?/);
        -};
        - 
        -SolidityTypeAddress.prototype.staticPartLength = function (name) {
        -    return 32 * this.staticArrayLength(name);
        -};
        - 
        -module.exports = SolidityTypeAddress;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html deleted file mode 100644 index 14a9396..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bool.js.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/bool.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/bool.js

        -

        - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -311 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -44 -  -  -1 - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -/**
        - * SolidityTypeBool is a prootype that represents bool type
        - * It matches:
        - * bool
        - * bool[]
        - * bool[4]
        - * bool[][]
        - * bool[3][]
        - * bool[][6][], ...
        - */
        -var SolidityTypeBool = function () {
        -    this._inputFormatter = f.formatInputBool;
        -    this._outputFormatter = f.formatOutputBool;
        -};
        - 
        -SolidityTypeBool.prototype = new SolidityType({});
        -SolidityTypeBool.prototype.constructor = SolidityTypeBool;
        - 
        -SolidityTypeBool.prototype.isType = function (name) {
        -    return !!name.match(/^bool(\[([0-9]*)\])*$/);
        -};
        - 
        -SolidityTypeBool.prototype.staticPartLength = function (name) {
        -    return 32 * this.staticArrayLength(name);
        -};
        - 
        -module.exports = SolidityTypeBool;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html deleted file mode 100644 index c07aefc..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/bytes.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/bytes.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/bytes.js

        -

        - Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (14 / 14)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -391 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -38 -38 -38 -  -  -1 - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -/**
        - * SolidityTypeBytes is a prootype that represents bytes type
        - * It matches:
        - * bytes
        - * bytes[]
        - * bytes[4]
        - * bytes[][]
        - * bytes[3][]
        - * bytes[][6][], ...
        - * bytes32
        - * bytes64[]
        - * bytes8[4]
        - * bytes256[][]
        - * bytes[3][]
        - * bytes64[][6][], ...
        - */
        -var SolidityTypeBytes = function () {
        -    this._inputFormatter = f.formatInputBytes;
        -    this._outputFormatter = f.formatOutputBytes;
        -};
        - 
        -SolidityTypeBytes.prototype = new SolidityType({});
        -SolidityTypeBytes.prototype.constructor = SolidityTypeBytes;
        - 
        -SolidityTypeBytes.prototype.isType = function (name) {
        -    return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/);
        -};
        - 
        -SolidityTypeBytes.prototype.staticPartLength = function (name) {
        -    var matches = name.match(/^bytes([0-9]*)/);
        -    var size = parseInt(matches[1]);
        -    return size * this.staticArrayLength(name);
        -};
        - 
        -module.exports = SolidityTypeBytes;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html deleted file mode 100644 index 7451a42..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/coder.js.html +++ /dev/null @@ -1,825 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/coder.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/coder.js

        -

        - Statements: 96.12% (99 / 103)      - Branches: 81.82% (18 / 22)      - Functions: 100% (26 / 26)      - Lines: 96.12% (99 / 103)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -267 -2403 -  -  -267 -  -  -  -267 -  -  -  -  -  -  -  -  -  -  -1 -64 -  -  -  -  -  -  -  -  -  -  -1 -107 -  -107 -135 -  -  -107 -135 -135 -135 -  -  -107 -  -107 -  -  -1 -107 -107 -  -107 -270 -  -  -107 -135 -43 -43 -43 -  -  -92 -  -  -  -  -  -107 -135 -43 -43 -43 -  -  -107 -  -  -  -1 -287 -287 -42 -  -42 -42 -42 -  -42 -42 -42 -  -  -  -  -  -  -  -  -42 -42 -82 -82 -  -  -  -42 -  -  -245 -13 -13 -13 -13 -  -  -13 -1 -1 -1 -  -2 -2 -  -  -  -  -13 -13 -27 -27 -  -  -  -13 -  -  -  -232 -  -  -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -  -  -1 -106 -106 -  -106 -132 -  -  -  -1 -106 -132 -  -  -106 -  -29 -  -  -106 -  -132 -132 -  -  -  -1 -213 -213 -267 -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file coder.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var f = require('./formatters');
        - 
        -var SolidityTypeAddress = require('./address');
        -var SolidityTypeBool = require('./bool');
        -var SolidityTypeInt = require('./int');
        -var SolidityTypeUInt = require('./uint');
        -var SolidityTypeDynamicBytes = require('./dynamicbytes');
        -var SolidityTypeString = require('./string');
        -var SolidityTypeReal = require('./real');
        -var SolidityTypeUReal = require('./ureal');
        -var SolidityTypeBytes = require('./bytes');
        - 
        -/**
        - * SolidityCoder prototype should be used to encode/decode solidity params of any type
        - */
        -var SolidityCoder = function (types) {
        -    this._types = types;
        -};
        - 
        -/**
        - * This method should be used to transform type to SolidityType
        - *
        - * @method _requireType
        - * @param {String} type
        - * @returns {SolidityType} 
        - * @throws {Error} throws if no matching type is found
        - */
        -SolidityCoder.prototype._requireType = function (type) {
        -    var solidityType = this._types.filter(function (t) {
        -        return t.isType(type);
        -    })[0];
        - 
        -    Iif (!solidityType) {
        -        throw Error('invalid solidity type!: ' + type);
        -    }
        - 
        -    return solidityType;
        -};
        - 
        -/**
        - * Should be used to encode plain param
        - *
        - * @method encodeParam
        - * @param {String} type
        - * @param {Object} plain param
        - * @return {String} encoded plain param
        - */
        -SolidityCoder.prototype.encodeParam = function (type, param) {
        -    return this.encodeParams([type], [param]);
        -};
        - 
        -/**
        - * Should be used to encode list of params
        - *
        - * @method encodeParams
        - * @param {Array} types
        - * @param {Array} params
        - * @return {String} encoded list of params
        - */
        -SolidityCoder.prototype.encodeParams = function (types, params) {
        -    var solidityTypes = this.getSolidityTypes(types);
        - 
        -    var encodeds = solidityTypes.map(function (solidityType, index) {
        -        return solidityType.encode(params[index], types[index]);
        -    });
        - 
        -    var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {
        -        var staticPartLength = solidityType.staticPartLength(types[index]);
        -        var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;
        -        return acc + roundedStaticPartLength;
        -    }, 0);
        - 
        -    var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); 
        - 
        -    return result;
        -};
        - 
        -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {
        -    var result = "";
        -    var self = this;
        - 
        -    var isDynamic = function (i) {
        -       return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]);
        -    };
        - 
        -    types.forEach(function (type, i) {
        -        if (isDynamic(i)) {
        -            result += f.formatInputInt(dynamicOffset).encode();
        -            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
        -            dynamicOffset += e.length / 2;
        -        } else {
        -            // don't add length to dynamicOffset. it's already counted
        -            result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
        -        }
        - 
        -        // TODO: figure out nested arrays
        -    });
        -    
        -    types.forEach(function (type, i) {
        -        if (isDynamic(i)) {
        -            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
        -            dynamicOffset += e.length / 2;
        -            result += e;
        -        }
        -    });
        -    return result;
        -};
        - 
        -// TODO: refactor whole encoding!
        -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {
        -    var self = this;
        -    if (solidityType.isDynamicArray(type)) {
        -        return (function () {
        -            // offset was already set
        -            var nestedName = solidityType.nestedName(type);
        -            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
        -            var result = encoded[0];
        -            
        -            (function () {
        -                var previousLength = 2; // in int
        -                Iif (solidityType.isDynamicArray(nestedName)) {
        -                    for (var i = 1; i < encoded.length; i++) {
        -                        previousLength += +(encoded[i - 1])[0] || 0;
        -                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
        -                    }
        -                }
        -            })();
        -            
        -            // first element is length, skip it
        -            (function () {
        -                for (var i = 0; i < encoded.length - 1; i++) {
        -                    var additionalOffset = result / 2;
        -                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset +  additionalOffset);
        -                }
        -            })();
        - 
        -            return result;
        -        })();
        -       
        -    } else if (solidityType.isStaticArray(type)) {
        -        return (function () {
        -            var nestedName = solidityType.nestedName(type);
        -            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
        -            var result = "";
        - 
        - 
        -            if (solidityType.isDynamicArray(nestedName)) {
        -                (function () {
        -                    var previousLength = 0; // in int
        -                    for (var i = 0; i < encoded.length; i++) {
        -                        // calculate length of previous item
        -                        previousLength += +(encoded[i - 1] || [])[0] || 0; 
        -                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
        -                    }
        -                })();
        -            }
        - 
        -            (function () {
        -                for (var i = 0; i < encoded.length; i++) {
        -                    var additionalOffset = result / 2;
        -                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset);
        -                }
        -            })();
        - 
        -            return result;
        -        })();
        -    }
        - 
        -    return encoded;
        -};
        - 
        -/**
        - * Should be used to decode bytes to plain param
        - *
        - * @method decodeParam
        - * @param {String} type
        - * @param {String} bytes
        - * @return {Object} plain param
        - */
        -SolidityCoder.prototype.decodeParam = function (type, bytes) {
        -    return this.decodeParams([type], bytes)[0];
        -};
        - 
        -/**
        - * Should be used to decode list of params
        - *
        - * @method decodeParam
        - * @param {Array} types
        - * @param {String} bytes
        - * @return {Array} array of plain params
        - */
        -SolidityCoder.prototype.decodeParams = function (types, bytes) {
        -    var solidityTypes = this.getSolidityTypes(types);
        -    var offsets = this.getOffsets(types, solidityTypes);
        -        
        -    return solidityTypes.map(function (solidityType, index) {
        -        return solidityType.decode(bytes, offsets[index],  types[index], index);
        -    });
        -};
        - 
        -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) {
        -    var lengths =  solidityTypes.map(function (solidityType, index) {
        -        return solidityType.staticPartLength(types[index]);
        -    });
        -    
        -    for (var i = 1; i < lengths.length; i++) {
        -         // sum with length of previous element
        -        lengths[i] += lengths[i - 1]; 
        -    }
        - 
        -    return lengths.map(function (length, index) {
        -        // remove the current length, so the length is sum of previous elements
        -        var staticPartLength = solidityTypes[index].staticPartLength(types[index]);
        -        return length - staticPartLength; 
        -    });
        -};
        - 
        -SolidityCoder.prototype.getSolidityTypes = function (types) {
        -    var self = this;
        -    return types.map(function (type) {
        -        return self._requireType(type);
        -    });
        -};
        - 
        -var coder = new SolidityCoder([
        -    new SolidityTypeAddress(),
        -    new SolidityTypeBool(),
        -    new SolidityTypeInt(),
        -    new SolidityTypeUInt(),
        -    new SolidityTypeDynamicBytes(),
        -    new SolidityTypeBytes(),
        -    new SolidityTypeString(),
        -    new SolidityTypeReal(),
        -    new SolidityTypeUReal()
        -]);
        - 
        -module.exports = coder;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html deleted file mode 100644 index db77fe2..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/dynamicbytes.js.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/dynamicbytes.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/dynamicbytes.js

        -

        - Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (4 / 4)      - Lines: 100% (14 / 14)      - Ignored: none      -

        -
        All files » web3/lib/solidity/ » dynamicbytes.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -261 -1 -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -37 -  -  -1 -33 -  -  -1 -  - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -var SolidityTypeDynamicBytes = function () {
        -    this._inputFormatter = f.formatInputDynamicBytes;
        -    this._outputFormatter = f.formatOutputDynamicBytes;
        -};
        - 
        -SolidityTypeDynamicBytes.prototype = new SolidityType({});
        -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;
        - 
        -SolidityTypeDynamicBytes.prototype.isType = function (name) {
        -    return !!name.match(/^bytes(\[([0-9]*)\])*$/);
        -};
        - 
        -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) {
        -    return 32 * this.staticArrayLength(name);
        -};
        - 
        -SolidityTypeDynamicBytes.prototype.isDynamicType = function () {
        -    return true;
        -};
        - 
        -module.exports = SolidityTypeDynamicBytes;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html deleted file mode 100644 index 2958567..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/formatters.js.html +++ /dev/null @@ -1,795 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/formatters.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/formatters.js

        -

        - Statements: 98.28% (57 / 58)      - Branches: 80% (8 / 10)      - Functions: 93.75% (15 / 16)      - Lines: 98.28% (57 / 58)      - Ignored: none      -

        -
        All files » web3/lib/solidity/ » formatters.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -205 -205 -205 -  -  -  -  -  -  -  -  -  -1 -15 -15 -15 -15 -  -  -  -  -  -  -  -  -  -1 -9 -9 -9 -9 -9 -  -  -  -  -  -  -  -  -  -1 -14 -14 -14 -14 -14 -  -  -  -  -  -  -  -  -  -1 -15 -15 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -61 -  -  -  -  -  -  -  -  -  -1 -61 -  -  -  -61 -3 -  -58 -  -  -  -  -  -  -  -  -  -1 -45 -45 -  -  -  -  -  -  -  -  -  -1 -7 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -12 -  -  -  -  -  -  -  -  -  -1 -10 -  -  -  -  -  -  -  -  -  -1 -15 -15 -  -  -  -  -  -  -  -  -  -1 -7 -7 -  -  -  -  -  -  -  -  -  -1 -26 -26 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file formatters.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var BigNumber = require('bignumber.js');
        -var utils = require('../utils/utils');
        -var c = require('../utils/config');
        -var SolidityParam = require('./param');
        - 
        - 
        -/**
        - * Formats input value to byte representation of int
        - * If value is negative, return it's two's complement
        - * If the value is floating point, round it down
        - *
        - * @method formatInputInt
        - * @param {String|Number|BigNumber} value that needs to be formatted
        - * @returns {SolidityParam}
        - */
        -var formatInputInt = function (value) {
        -    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
        -    var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64);
        -    return new SolidityParam(result);
        -};
        - 
        -/**
        - * Formats input bytes
        - *
        - * @method formatInputBytes
        - * @param {String}
        - * @returns {SolidityParam}
        - */
        -var formatInputBytes = function (value) {
        -    var result = utils.toHex(value).substr(2);
        -    var l = Math.floor((result.length + 63) / 64);
        -    result = utils.padRight(result, l * 64);
        -    return new SolidityParam(result);
        -};
        - 
        -/**
        - * Formats input bytes
        - *
        - * @method formatDynamicInputBytes
        - * @param {String}
        - * @returns {SolidityParam}
        - */
        -var formatInputDynamicBytes = function (value) {
        -    var result = utils.toHex(value).substr(2);
        -    var length = result.length / 2;
        -    var l = Math.floor((result.length + 63) / 64);
        -    result = utils.padRight(result, l * 64);
        -    return new SolidityParam(formatInputInt(length).value + result);
        -};
        - 
        -/**
        - * Formats input value to byte representation of string
        - *
        - * @method formatInputString
        - * @param {String}
        - * @returns {SolidityParam}
        - */
        -var formatInputString = function (value) {
        -    var result = utils.fromUtf8(value).substr(2);
        -    var length = result.length / 2;
        -    var l = Math.floor((result.length + 63) / 64);
        -    result = utils.padRight(result, l * 64);
        -    return new SolidityParam(formatInputInt(length).value + result);
        -};
        - 
        -/**
        - * Formats input value to byte representation of bool
        - *
        - * @method formatInputBool
        - * @param {Boolean}
        - * @returns {SolidityParam}
        - */
        -var formatInputBool = function (value) {
        -    var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
        -    return new SolidityParam(result);
        -};
        - 
        -/**
        - * Formats input value to byte representation of real
        - * Values are multiplied by 2^m and encoded as integers
        - *
        - * @method formatInputReal
        - * @param {String|Number|BigNumber}
        - * @returns {SolidityParam}
        - */
        -var formatInputReal = function (value) {
        -    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));
        -};
        - 
        -/**
        - * Check if input value is negative
        - *
        - * @method signedIsNegative
        - * @param {String} value is hex format
        - * @returns {Boolean} true if it is negative, otherwise false
        - */
        -var signedIsNegative = function (value) {
        -    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
        -};
        - 
        -/**
        - * Formats right-aligned output bytes to int
        - *
        - * @method formatOutputInt
        - * @param {SolidityParam} param
        - * @returns {BigNumber} right-aligned output bytes formatted to big number
        - */
        -var formatOutputInt = function (param) {
        -    var value = param.staticPart() || "0";
        - 
        -    // check if it's negative number
        -    // it it is, return two's complement
        -    if (signedIsNegative(value)) {
        -        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
        -    }
        -    return new BigNumber(value, 16);
        -};
        - 
        -/**
        - * Formats right-aligned output bytes to uint
        - *
        - * @method formatOutputUInt
        - * @param {SolidityParam}
        - * @returns {BigNumeber} right-aligned output bytes formatted to uint
        - */
        -var formatOutputUInt = function (param) {
        -    var value = param.staticPart() || "0";
        -    return new BigNumber(value, 16);
        -};
        - 
        -/**
        - * Formats right-aligned output bytes to real
        - *
        - * @method formatOutputReal
        - * @param {SolidityParam}
        - * @returns {BigNumber} input bytes formatted to real
        - */
        -var formatOutputReal = function (param) {
        -    return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); 
        -};
        - 
        -/**
        - * Formats right-aligned output bytes to ureal
        - *
        - * @method formatOutputUReal
        - * @param {SolidityParam}
        - * @returns {BigNumber} input bytes formatted to ureal
        - */
        -var formatOutputUReal = function (param) {
        -    return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); 
        -};
        - 
        -/**
        - * Should be used to format output bool
        - *
        - * @method formatOutputBool
        - * @param {SolidityParam}
        - * @returns {Boolean} right-aligned input bytes formatted to bool
        - */
        -var formatOutputBool = function (param) {
        -    return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
        -};
        - 
        -/**
        - * Should be used to format output bytes
        - *
        - * @method formatOutputBytes
        - * @param {SolidityParam} left-aligned hex representation of string
        - * @returns {String} hex string
        - */
        -var formatOutputBytes = function (param) {
        -    return '0x' + param.staticPart();
        -};
        - 
        -/**
        - * Should be used to format output bytes
        - *
        - * @method formatOutputDynamicBytes
        - * @param {SolidityParam} left-aligned hex representation of string
        - * @returns {String} hex string
        - */
        -var formatOutputDynamicBytes = function (param) {
        -    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
        -    return '0x' + param.dynamicPart().substr(64, length);
        -};
        - 
        -/**
        - * Should be used to format output string
        - *
        - * @method formatOutputString
        - * @param {SolidityParam} left-aligned hex representation of string
        - * @returns {String} ascii string
        - */
        -var formatOutputString = function (param) {
        -    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
        -    return utils.toUtf8(param.dynamicPart().substr(64, length));
        -};
        - 
        -/**
        - * Should be used to format output address
        - *
        - * @method formatOutputAddress
        - * @param {SolidityParam} right-aligned input bytes
        - * @returns {String} address
        - */
        -var formatOutputAddress = function (param) {
        -    var value = param.staticPart();
        -    return "0x" + value.slice(value.length - 40, value.length);
        -};
        - 
        -module.exports = {
        -    formatInputInt: formatInputInt,
        -    formatInputBytes: formatInputBytes,
        -    formatInputDynamicBytes: formatInputDynamicBytes,
        -    formatInputString: formatInputString,
        -    formatInputBool: formatInputBool,
        -    formatInputReal: formatInputReal,
        -    formatOutputInt: formatOutputInt,
        -    formatOutputUInt: formatOutputUInt,
        -    formatOutputReal: formatOutputReal,
        -    formatOutputUReal: formatOutputUReal,
        -    formatOutputBool: formatOutputBool,
        -    formatOutputBytes: formatOutputBytes,
        -    formatOutputDynamicBytes: formatOutputDynamicBytes,
        -    formatOutputString: formatOutputString,
        -    formatOutputAddress: formatOutputAddress
        -};
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html deleted file mode 100644 index 4b24547..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/index.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/ - - - - - - -
        -

        Code coverage report for web3/lib/solidity/

        -

        - Statements: 93.88% (368 / 392)      - Branches: 79.03% (49 / 62)      - Functions: 88.12% (89 / 101)      - Lines: 93.88% (368 / 392)      - Ignored: none      -

        -
        All files » web3/lib/solidity/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        address.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
        bool.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
        bytes.js100%(14 / 14)100%(0 / 0)100%(3 / 3)100%(14 / 14)
        coder.js96.12%(99 / 103)81.82%(18 / 22)100%(26 / 26)96.12%(99 / 103)
        dynamicbytes.js100%(14 / 14)100%(0 / 0)100%(4 / 4)100%(14 / 14)
        formatters.js98.28%(57 / 58)80%(8 / 10)93.75%(15 / 16)98.28%(57 / 58)
        int.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
        param.js55.88%(19 / 34)40%(4 / 10)38.46%(5 / 13)55.88%(19 / 34)
        real.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
        string.js100%(14 / 14)100%(0 / 0)100%(4 / 4)100%(14 / 14)
        type.js96.39%(80 / 83)95%(19 / 20)88.24%(15 / 17)96.39%(80 / 83)
        uint.js100%(12 / 12)100%(0 / 0)100%(3 / 3)100%(12 / 12)
        ureal.js91.67%(11 / 12)100%(0 / 0)66.67%(2 / 3)91.67%(11 / 12)
        -
        -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html deleted file mode 100644 index 5d4084c..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/int.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/int.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/int.js

        -

        - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -234 -  -  -1 - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -/**
        - * SolidityTypeInt is a prootype that represents int type
        - * It matches:
        - * int
        - * int[]
        - * int[4]
        - * int[][]
        - * int[3][]
        - * int[][6][], ...
        - * int32
        - * int64[]
        - * int8[4]
        - * int256[][]
        - * int[3][]
        - * int64[][6][], ...
        - */
        -var SolidityTypeInt = function () {
        -    this._inputFormatter = f.formatInputInt;
        -    this._outputFormatter = f.formatOutputInt;
        -};
        - 
        -SolidityTypeInt.prototype = new SolidityType({});
        -SolidityTypeInt.prototype.constructor = SolidityTypeInt;
        - 
        -SolidityTypeInt.prototype.isType = function (name) {
        -    return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/);
        -};
        - 
        -SolidityTypeInt.prototype.staticPartLength = function (name) {
        -    return 32 * this.staticArrayLength(name);
        -};
        - 
        -module.exports = SolidityTypeInt;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html deleted file mode 100644 index a2c3d9f..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/param.js.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/param.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/param.js

        -

        - Statements: 55.88% (19 / 34)      - Branches: 40% (4 / 10)      - Functions: 38.46% (5 / 13)      - Lines: 55.88% (19 / 34)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -1 -434 -434 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -668 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -1 -389 -389 -  -  -  -  -  -  -  -  -  -  -1 -279 -  -  -  -  -  -  -  -  -1 -235 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file param.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        - 
        -/**
        - * SolidityParam object prototype.
        - * Should be used when encoding, decoding solidity bytes
        - */
        -var SolidityParam = function (value, offset) {
        -    this.value = value || '';
        -    this.offset = offset; // offset in bytes
        -};
        - 
        -/**
        - * This method should be used to get length of params's dynamic part
        - * 
        - * @method dynamicPartLength
        - * @returns {Number} length of dynamic part (in bytes)
        - */
        -SolidityParam.prototype.dynamicPartLength = function () {
        -    return this.dynamicPart().length / 2;
        -};
        - 
        -/**
        - * This method should be used to create copy of solidity param with different offset
        - *
        - * @method withOffset
        - * @param {Number} offset length in bytes
        - * @returns {SolidityParam} new solidity param with applied offset
        - */
        -SolidityParam.prototype.withOffset = function (offset) {
        -    return new SolidityParam(this.value, offset);
        -};
        - 
        -/**
        - * This method should be used to combine solidity params together
        - * eg. when appending an array
        - *
        - * @method combine
        - * @param {SolidityParam} param with which we should combine
        - * @param {SolidityParam} result of combination
        - */
        -SolidityParam.prototype.combine = function (param) {
        -    return new SolidityParam(this.value + param.value); 
        -};
        - 
        -/**
        - * This method should be called to check if param has dynamic size.
        - * If it has, it returns true, otherwise false
        - *
        - * @method isDynamic
        - * @returns {Boolean}
        - */
        -SolidityParam.prototype.isDynamic = function () {
        -    return this.offset !== undefined;
        -};
        - 
        -/**
        - * This method should be called to transform offset to bytes
        - *
        - * @method offsetAsBytes
        - * @returns {String} bytes representation of offset
        - */
        -SolidityParam.prototype.offsetAsBytes = function () {
        -    return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);
        -};
        - 
        -/**
        - * This method should be called to get static part of param
        - *
        - * @method staticPart
        - * @returns {String} offset if it is a dynamic param, otherwise value
        - */
        -SolidityParam.prototype.staticPart = function () {
        -    Eif (!this.isDynamic()) {
        -        return this.value; 
        -    } 
        -    return this.offsetAsBytes();
        -};
        - 
        -/**
        - * This method should be called to get dynamic part of param
        - *
        - * @method dynamicPart
        - * @returns {String} returns a value if it is a dynamic param, otherwise empty string
        - */
        -SolidityParam.prototype.dynamicPart = function () {
        -    return this.isDynamic() ? this.value : '';
        -};
        - 
        -/**
        - * This method should be called to encode param
        - *
        - * @method encode
        - * @returns {String}
        - */
        -SolidityParam.prototype.encode = function () {
        -    return this.staticPart() + this.dynamicPart();
        -};
        - 
        -/**
        - * This method should be called to encode array of params
        - *
        - * @method encodeList
        - * @param {Array[SolidityParam]} params
        - * @returns {String}
        - */
        -SolidityParam.encodeList = function (params) {
        -    
        -    // updating offsets
        -    var totalOffset = params.length * 32;
        -    var offsetParams = params.map(function (param) {
        -        if (!param.isDynamic()) {
        -            return param;
        -        }
        -        var offset = totalOffset;
        -        totalOffset += param.dynamicPartLength();
        -        return param.withOffset(offset);
        -    });
        - 
        -    // encode everything!
        -    return offsetParams.reduce(function (result, param) {
        -        return result + param.dynamicPart();
        -    }, offsetParams.reduce(function (result, param) {
        -        return result + param.staticPart();
        -    }, ''));
        -};
        - 
        - 
        - 
        -module.exports = SolidityParam;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html deleted file mode 100644 index 624ddb3..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/real.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/real.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/real.js

        -

        - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -28 -  -  -1 - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -/**
        - * SolidityTypeReal is a prootype that represents real type
        - * It matches:
        - * real
        - * real[]
        - * real[4]
        - * real[][]
        - * real[3][]
        - * real[][6][], ...
        - * real32
        - * real64[]
        - * real8[4]
        - * real256[][]
        - * real[3][]
        - * real64[][6][], ...
        - */
        -var SolidityTypeReal = function () {
        -    this._inputFormatter = f.formatInputReal;
        -    this._outputFormatter = f.formatOutputReal;
        -};
        - 
        -SolidityTypeReal.prototype = new SolidityType({});
        -SolidityTypeReal.prototype.constructor = SolidityTypeReal;
        - 
        -SolidityTypeReal.prototype.isType = function (name) {
        -    return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/);
        -};
        - 
        -SolidityTypeReal.prototype.staticPartLength = function (name) {
        -    return 32 * this.staticArrayLength(name);
        -};
        - 
        -module.exports = SolidityTypeReal;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html deleted file mode 100644 index 2ac2a29..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/string.js.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/string.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/string.js

        -

        - Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (4 / 4)      - Lines: 100% (14 / 14)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -261 -1 -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -28 -  -  -1 -35 -  -  -1 -  - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -var SolidityTypeString = function () {
        -    this._inputFormatter = f.formatInputString;
        -    this._outputFormatter = f.formatOutputString;
        -};
        - 
        -SolidityTypeString.prototype = new SolidityType({});
        -SolidityTypeString.prototype.constructor = SolidityTypeString;
        - 
        -SolidityTypeString.prototype.isType = function (name) {
        -    return !!name.match(/^string(\[([0-9]*)\])*$/);
        -};
        - 
        -SolidityTypeString.prototype.staticPartLength = function (name) {
        -    return 32 * this.staticArrayLength(name);
        -};
        - 
        -SolidityTypeString.prototype.isDynamicType = function () {
        -    return true;
        -};
        - 
        -module.exports = SolidityTypeString;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html deleted file mode 100644 index 97b2c34..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/type.js.html +++ /dev/null @@ -1,780 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/type.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/type.js

        -

        - Statements: 96.39% (80 / 83)      - Branches: 95% (19 / 20)      - Functions: 88.24% (15 / 17)      - Lines: 96.39% (80 / 83)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -2461 -1 -  -  -  -  -1 -9 -9 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1029 -1029 -  -  -  -  -  -  -  -  -  -  -  -  -1 -619 -619 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -678 -678 -123 -  -555 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -128 -128 -  -  -  -128 -  -  -  -  -  -  -  -  -  -  -1 -338 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -2454 -  -  -  -  -  -  -  -  -  -  -1 -201 -201 -  -22 -22 -22 -  -22 -22 -  -22 -43 -  -  -22 -  -  -179 -  -11 -11 -11 -  -11 -11 -23 -  -  -11 -  -  -  -  -168 -  -  -  -  -  -  -  -  -  -  -  -1 -216 -  -216 -  -21 -21 -21 -21 -  -21 -21 -21 -21 -  -21 -37 -  -  -21 -  -  -195 -  -19 -19 -19 -  -19 -19 -19 -19 -  -19 -47 -  -  -19 -  -176 -  -22 -22 -22 -22 -  -22 -  -  -  -154 -154 -  -  -1 - 
        var f = require('./formatters');
        -var SolidityParam = require('./param');
        - 
        -/**
        - * SolidityType prototype is used to encode/decode solidity params of certain type
        - */
        -var SolidityType = function (config) {
        -    this._inputFormatter = config.inputFormatter;
        -    this._outputFormatter = config.outputFormatter;
        -};
        - 
        -/**
        - * Should be used to determine if this SolidityType do match given name
        - *
        - * @method isType
        - * @param {String} name
        - * @return {Bool} true if type match this SolidityType, otherwise false
        - */
        -SolidityType.prototype.isType = function (name) {
        -    throw "this method should be overrwritten for type " + name;
        -};
        - 
        -/**
        - * Should be used to determine what is the length of static part in given type
        - *
        - * @method staticPartLength
        - * @param {String} name
        - * @return {Number} length of static part in bytes
        - */
        -SolidityType.prototype.staticPartLength = function (name) {
        -    throw "this method should be overrwritten for type: " + name;
        -};
        - 
        -/**
        - * Should be used to determine if type is dynamic array
        - * eg: 
        - * "type[]" => true
        - * "type[4]" => false
        - *
        - * @method isDynamicArray
        - * @param {String} name
        - * @return {Bool} true if the type is dynamic array 
        - */
        -SolidityType.prototype.isDynamicArray = function (name) {
        -    var nestedTypes = this.nestedTypes(name);
        -    return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
        -};
        - 
        -/**
        - * Should be used to determine if type is static array
        - * eg: 
        - * "type[]" => false
        - * "type[4]" => true
        - *
        - * @method isStaticArray
        - * @param {String} name
        - * @return {Bool} true if the type is static array 
        - */
        -SolidityType.prototype.isStaticArray = function (name) {
        -    var nestedTypes = this.nestedTypes(name);
        -    return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
        -};
        - 
        -/**
        - * Should return length of static array
        - * eg. 
        - * "int[32]" => 32
        - * "int256[14]" => 14
        - * "int[2][3]" => 3
        - * "int" => 1
        - * "int[1]" => 1
        - * "int[]" => 1
        - *
        - * @method staticArrayLength
        - * @param {String} name
        - * @return {Number} static array length
        - */
        -SolidityType.prototype.staticArrayLength = function (name) {
        -    var nestedTypes = this.nestedTypes(name);
        -    if (nestedTypes) {
        -       return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);
        -    }
        -    return 1;
        -};
        - 
        -/**
        - * Should return nested type
        - * eg.
        - * "int[32]" => "int"
        - * "int256[14]" => "int256"
        - * "int[2][3]" => "int[2]"
        - * "int" => "int"
        - * "int[]" => "int"
        - *
        - * @method nestedName
        - * @param {String} name
        - * @return {String} nested name
        - */
        -SolidityType.prototype.nestedName = function (name) {
        -    // remove last [] in name
        -    var nestedTypes = this.nestedTypes(name);
        -    Iif (!nestedTypes) {
        -        return name;
        -    }
        - 
        -    return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);
        -};
        - 
        -/**
        - * Should return true if type has dynamic size by default
        - * such types are "string", "bytes"
        - *
        - * @method isDynamicType
        - * @param {String} name
        - * @return {Bool} true if is dynamic, otherwise false
        - */
        -SolidityType.prototype.isDynamicType = function () {
        -    return false;
        -};
        - 
        -/**
        - * Should return array of nested types
        - * eg.
        - * "int[2][3][]" => ["[2]", "[3]", "[]"]
        - * "int[] => ["[]"]
        - * "int" => null
        - *
        - * @method nestedTypes
        - * @param {String} name
        - * @return {Array} array of nested types
        - */
        -SolidityType.prototype.nestedTypes = function (name) {
        -    // return list of strings eg. "[]", "[3]", "[]", "[2]"
        -    return name.match(/(\[[0-9]*\])/g);
        -};
        - 
        -/**
        - * Should be used to encode the value
        - *
        - * @method encode
        - * @param {Object} value 
        - * @param {String} name
        - * @return {String} encoded value
        - */
        -SolidityType.prototype.encode = function (value, name) {
        -    var self = this;
        -    if (this.isDynamicArray(name)) {
        - 
        -        return (function () {
        -            var length = value.length;                          // in int
        -            var nestedName = self.nestedName(name);
        - 
        -            var result = [];
        -            result.push(f.formatInputInt(length).encode());
        -            
        -            value.forEach(function (v) {
        -                result.push(self.encode(v, nestedName));
        -            });
        - 
        -            return result;
        -        })();
        - 
        -    } else if (this.isStaticArray(name)) {
        - 
        -        return (function () {
        -            var length = self.staticArrayLength(name);          // in int
        -            var nestedName = self.nestedName(name);
        - 
        -            var result = [];
        -            for (var i = 0; i < length; i++) {
        -                result.push(self.encode(value[i], nestedName));
        -            }
        - 
        -            return result;
        -        })();
        - 
        -    }
        - 
        -    return this._inputFormatter(value, name).encode();
        -};
        - 
        -/**
        - * Should be used to decode value from bytes
        - *
        - * @method decode
        - * @param {String} bytes
        - * @param {Number} offset in bytes
        - * @param {String} name type name
        - * @returns {Object} decoded value
        - */
        -SolidityType.prototype.decode = function (bytes, offset, name) {
        -    var self = this;
        - 
        -    if (this.isDynamicArray(name)) {
        - 
        -        return (function () {
        -            var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes
        -            var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int
        -            var arrayStart = arrayOffset + 32; // array starts after length; // in bytes
        - 
        -            var nestedName = self.nestedName(name);
        -            var nestedStaticPartLength = self.staticPartLength(nestedName);  // in bytes
        -            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
        -            var result = [];
        - 
        -            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
        -                result.push(self.decode(bytes, arrayStart + i, nestedName));
        -            }
        - 
        -            return result;
        -        })();
        - 
        -    } else if (this.isStaticArray(name)) {
        - 
        -        return (function () {
        -            var length = self.staticArrayLength(name);                      // in int
        -            var arrayStart = offset;                                        // in bytes
        - 
        -            var nestedName = self.nestedName(name);
        -            var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes
        -            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
        -            var result = [];
        - 
        -            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
        -                result.push(self.decode(bytes, arrayStart + i, nestedName));
        -            }
        - 
        -            return result;
        -        })();
        -    } else if (this.isDynamicType(name)) {
        -        
        -        return (function () {
        -            var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64));      // in bytes
        -            var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64));      // in bytes
        -            var roundedLength = Math.floor((length + 31) / 32);                     // in int
        -        
        -            return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0));
        -        })();
        -    }
        - 
        -    var length = this.staticPartLength(name);
        -    return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2)));
        -};
        - 
        -module.exports = SolidityType;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html deleted file mode 100644 index a958b50..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/uint.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/uint.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/uint.js

        -

        - Statements: 100% (12 / 12)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (12 / 12)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -139 -  -  -1 - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -/**
        - * SolidityTypeUInt is a prootype that represents uint type
        - * It matches:
        - * uint
        - * uint[]
        - * uint[4]
        - * uint[][]
        - * uint[3][]
        - * uint[][6][], ...
        - * uint32
        - * uint64[]
        - * uint8[4]
        - * uint256[][]
        - * uint[3][]
        - * uint64[][6][], ...
        - */
        -var SolidityTypeUInt = function () {
        -    this._inputFormatter = f.formatInputInt;
        -    this._outputFormatter = f.formatOutputUInt;
        -};
        - 
        -SolidityTypeUInt.prototype = new SolidityType({});
        -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt;
        - 
        -SolidityTypeUInt.prototype.isType = function (name) {
        -    return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/);
        -};
        - 
        -SolidityTypeUInt.prototype.staticPartLength = function (name) {
        -    return 32 * this.staticArrayLength(name);
        -};
        - 
        -module.exports = SolidityTypeUInt;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html deleted file mode 100644 index d9f578c..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/solidity/ureal.js.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - Code coverage report for web3/lib/solidity/ureal.js - - - - - - -
        -

        Code coverage report for web3/lib/solidity/ureal.js

        -

        - Statements: 91.67% (11 / 12)      - Branches: 100% (0 / 0)      - Functions: 66.67% (2 / 3)      - Lines: 91.67% (11 / 12)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -371 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -1 -  -1 -267 -  -  -1 -  -  -  -1 - 
        var f = require('./formatters');
        -var SolidityType = require('./type');
        - 
        -/**
        - * SolidityTypeUReal is a prootype that represents ureal type
        - * It matches:
        - * ureal
        - * ureal[]
        - * ureal[4]
        - * ureal[][]
        - * ureal[3][]
        - * ureal[][6][], ...
        - * ureal32
        - * ureal64[]
        - * ureal8[4]
        - * ureal256[][]
        - * ureal[3][]
        - * ureal64[][6][], ...
        - */
        -var SolidityTypeUReal = function () {
        -    this._inputFormatter = f.formatInputReal;
        -    this._outputFormatter = f.formatOutputUReal;
        -};
        - 
        -SolidityTypeUReal.prototype = new SolidityType({});
        -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal;
        - 
        -SolidityTypeUReal.prototype.isType = function (name) {
        -    return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/);
        -};
        - 
        -SolidityTypeUReal.prototype.staticPartLength = function (name) {
        -    return 32 * this.staticArrayLength(name);
        -};
        - 
        -module.exports = SolidityTypeUReal;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html deleted file mode 100644 index 2455021..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/utils/config.js.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - Code coverage report for web3/lib/utils/config.js - - - - - - -
        -

        Code coverage report for web3/lib/utils/config.js

        -

        - Statements: 100% (3 / 3)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (3 / 3)      - Ignored: none      -

        -
        All files » web3/lib/utils/ » config.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file config.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -/**
        - * Utils
        - * 
        - * @module utils
        - */
        - 
        -/**
        - * Utility functions
        - * 
        - * @class [utils] config
        - * @constructor
        - */
        - 
        - 
        -/// required to define ETH_BIGNUMBER_ROUNDING_MODE
        -var BigNumber = require('bignumber.js');
        - 
        -var ETH_UNITS = [
        -    'wei',
        -    'kwei',
        -    'Mwei',
        -    'Gwei',
        -    'szabo',
        -    'finney',
        -    'femtoether',
        -    'picoether',
        -    'nanoether',
        -    'microether',
        -    'milliether',
        -    'nano',
        -    'micro',
        -    'milli',
        -    'ether',
        -    'grand',
        -    'Mether',
        -    'Gether',
        -    'Tether',
        -    'Pether',
        -    'Eether',
        -    'Zether',
        -    'Yether',
        -    'Nether',
        -    'Dether',
        -    'Vether',
        -    'Uether'
        -];
        - 
        -module.exports = {
        -    ETH_PADDING: 32,
        -    ETH_SIGNATURE_LENGTH: 4,
        -    ETH_UNITS: ETH_UNITS,
        -    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
        -    ETH_POLLING_TIMEOUT: 1000/2,
        -    defaultBlock: 'latest',
        -    defaultAccount: undefined
        -};
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html b/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html deleted file mode 100644 index c390aef..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/utils/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - Code coverage report for web3/lib/utils/ - - - - - - -
        -

        Code coverage report for web3/lib/utils/

        -

        - Statements: 96.4% (134 / 139)      - Branches: 81.82% (63 / 77)      - Functions: 96.55% (28 / 29)      - Lines: 96.38% (133 / 138)      - Ignored: none      -

        -
        All files » web3/lib/utils/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        config.js100%(3 / 3)100%(0 / 0)100%(0 / 0)100%(3 / 3)
        sha3.js100%(8 / 8)87.5%(7 / 8)100%(1 / 1)100%(8 / 8)
        utils.js96.09%(123 / 128)81.16%(56 / 69)96.43%(27 / 28)96.06%(122 / 127)
        -
        -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html deleted file mode 100644 index 1b1aaef..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/utils/sha3.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/utils/sha3.js - - - - - - -
        -

        Code coverage report for web3/lib/utils/sha3.js

        -

        - Statements: 100% (8 / 8)      - Branches: 87.5% (7 / 8)      - Functions: 100% (1 / 1)      - Lines: 100% (8 / 8)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -42 -2 -2 -  -2 -  -  -42 -  -  -  -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file sha3.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var CryptoJS = require('crypto-js');
        -var sha3 = require('crypto-js/sha3');
        - 
        -module.exports = function (value, options) {
        -    if (options && options.encoding === 'hex') {
        -        Eif (value.length > 2 && value.substr(0, 2) === '0x') {
        -            value = value.substr(2);
        -        }
        -        value = CryptoJS.enc.Hex.parse(value);
        -    }
        - 
        -    return sha3(value, {
        -        outputLength: 256
        -    }).toString();
        -};
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html deleted file mode 100644 index fd8a89a..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/utils/utils.js.html +++ /dev/null @@ -1,1638 +0,0 @@ - - - - Code coverage report for web3/lib/utils/utils.js - - - - - - -
        -

        Code coverage report for web3/lib/utils/utils.js

        -

        - Statements: 96.09% (123 / 128)      - Branches: 81.16% (56 / 69)      - Functions: 96.43% (27 / 28)      - Lines: 96.06% (122 / 127)      - Ignored: none      -

        -
        All files » web3/lib/utils/ » utils.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -205 -  -  -  -  -  -  -  -  -  -  -  -2 -38 -  -  -  -  -  -  -  -  -  -2 -  -10 -10 -10 -3 -  -10 -133 -133 -2 -131 -  -  -10 -  -  -  -  -  -  -  -  -  -2 -  -5 -5 -5 -5 -  -5 -110 -110 -  -  -5 -  -  -  -  -  -  -  -  -  -  -2 -25 -25 -25 -291 -291 -2 -289 -289 -  -  -25 -  -  -  -  -  -  -  -  -  -  -2 -10 -10 -236 -236 -236 -  -  -10 -  -  -  -  -  -  -  -  -  -2 -105 -48 -  -  -136 -57 -  -  -  -  -  -  -  -  -  -2 -101 -101 -  -  -  -2 -  -94 -94 -  -  -  -  -  -  -  -  -  -2 -193 -  -  -  -  -  -  -  -  -  -2 -160 -160 -  -160 -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -126 -2 -  -124 -1 -  -123 -2 -  -  -121 -62 -5 -57 -42 -15 -5 -  -  -69 -  -  -  -  -  -  -  -  -  -  -2 -39 -39 -39 -1 -  -38 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -12 -  -12 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -27 -  -26 -  -  -  -  -  -  -  -  -  -2 -  -705 -705 -47 -  -658 -208 -  -  -450 -  -  -  -  -  -  -  -  -  -2 -205 -205 -5 -  -200 -  -  -  -  -  -  -  -  -  -2 -78 -  -  -  -  -  -  -  -  -  -2 -24 -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -875 -  -  -  -  -  -  -  -  -  -  -2 -832 -  -  -  -  -  -  -  -  -  -  -2 -358 -  -  -  -  -  -  -  -  -  -2 -286 -  -  -  -  -  -  -  -  -  -2 -126 -  -  -  -  -  -  -  -  -  -2 -453 -  -  -  -  -  -  -  -  -  -2 -9 -9 -  -5 -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/**
        - * @file utils.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -/**
        - * Utils
        - *
        - * @module utils
        - */
        - 
        -/**
        - * Utility functions
        - *
        - * @class [utils] utils
        - * @constructor
        - */
        - 
        - 
        -var BigNumber = require('bignumber.js');
        -var utf8 = require('utf8');
        - 
        -var unitMap = {
        -    'wei':          '1',
        -    'kwei':         '1000',
        -    'ada':          '1000',
        -    'femtoether':   '1000',
        -    'mwei':         '1000000',
        -    'babbage':      '1000000',
        -    'picoether':    '1000000',
        -    'gwei':         '1000000000',
        -    'shannon':      '1000000000',
        -    'nanoether':    '1000000000',
        -    'nano':         '1000000000',
        -    'szabo':        '1000000000000',
        -    'microether':   '1000000000000',
        -    'micro':        '1000000000000',
        -    'finney':       '1000000000000000',
        -    'milliether':    '1000000000000000',
        -    'milli':         '1000000000000000',
        -    'ether':        '1000000000000000000',
        -    'kether':       '1000000000000000000000',
        -    'grand':        '1000000000000000000000',
        -    'einstein':     '1000000000000000000000',
        -    'mether':       '1000000000000000000000000',
        -    'gether':       '1000000000000000000000000000',
        -    'tether':       '1000000000000000000000000000000'
        -};
        - 
        -/**
        - * Should be called to pad string to expected length
        - *
        - * @method padLeft
        - * @param {String} string to be padded
        - * @param {Number} characters that result string should have
        - * @param {String} sign, by default 0
        - * @returns {String} right aligned string
        - */
        -var padLeft = function (string, chars, sign) {
        -    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
        -};
        - 
        -/**
        - * Should be called to pad string to expected length
        - *
        - * @method padRight
        - * @param {String} string to be padded
        - * @param {Number} characters that result string should have
        - * @param {String} sign, by default 0
        - * @returns {String} right aligned string
        - */
        -var padRight = function (string, chars, sign) {
        -    return string + (new Array(chars - string.length + 1).join(sign ? sign : "0"));
        -};
        - 
        -/**
        - * Should be called to get utf8 from it's hex representation
        - *
        - * @method toUtf8
        - * @param {String} string in hex
        - * @returns {String} ascii string representation of hex value
        - */
        -var toUtf8 = function(hex) {
        -// Find termination
        -    var str = "";
        -    var i = 0, l = hex.length;
        -    if (hex.substring(0, 2) === '0x') {
        -        i = 2;
        -    }
        -    for (; i < l; i+=2) {
        -        var code = parseInt(hex.substr(i, 2), 16);
        -        if (code === 0)
        -            break;
        -        str += String.fromCharCode(code);
        -    }
        - 
        -    return utf8.decode(str);
        -};
        - 
        -/**
        - * Should be called to get ascii from it's hex representation
        - *
        - * @method toAscii
        - * @param {String} string in hex
        - * @returns {String} ascii string representation of hex value
        - */
        -var toAscii = function(hex) {
        -// Find termination
        -    var str = "";
        -    var i = 0, l = hex.length;
        -    Eif (hex.substring(0, 2) === '0x') {
        -        i = 2;
        -    }
        -    for (; i < l; i+=2) {
        -        var code = parseInt(hex.substr(i, 2), 16);
        -        str += String.fromCharCode(code);
        -    }
        - 
        -    return str;
        -};
        - 
        -/**
        - * Should be called to get hex representation (prefixed by 0x) of utf8 a string
        - *
        - * @method fromUtf8
        - * @param {String} string
        - * @param {Number} optional padding
        - * @returns {String} hex representation of input string
        - */
        -var fromUtf8 = function(str) {
        -    str = utf8.encode(str);
        -    var hex = "";
        -    for(var i = 0; i < str.length; i++) {
        -        var code = str.charCodeAt(i);
        -        if (code === 0)
        -            break;
        -        var n = code.toString(16);
        -        hex += n.length < 2 ? '0' + n : n;
        -    }
        - 
        -    return "0x" + hex;
        -};
        - 
        -/**
        - * Should be called to get hex representation (prefixed by 0x) of ascii string
        - *
        - * @method fromAscii
        - * @param {String} string
        - * @param {Number} optional padding
        - * @returns {String} hex representation of input string
        - */
        -var fromAscii = function(str) {
        -    var hex = "";
        -    for(var i = 0; i < str.length; i++) {
        -        var code = str.charCodeAt(i);
        -        var n = code.toString(16);
        -        hex += n.length < 2 ? '0' + n : n;
        -    }
        - 
        -    return "0x" + hex;
        -};
        - 
        -/**
        - * Should be used to create full function/event name from json abi
        - *
        - * @method transformToFullName
        - * @param {Object} json-abi
        - * @return {String} full fnction/event name
        - */
        -var transformToFullName = function (json) {
        -    if (json.name.indexOf('(') !== -1) {
        -        return json.name;
        -    }
        - 
        -    var typeName = json.inputs.map(function(i){return i.type; }).join();
        -    return json.name + '(' + typeName + ')';
        -};
        - 
        -/**
        - * Should be called to get display name of contract function
        - *
        - * @method extractDisplayName
        - * @param {String} name of function/event
        - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
        - */
        -var extractDisplayName = function (name) {
        -    var length = name.indexOf('(');
        -    return length !== -1 ? name.substr(0, length) : name;
        -};
        - 
        -/// @returns overloaded part of function/event name
        -var extractTypeName = function (name) {
        -    /// TODO: make it invulnerable
        -    var length = name.indexOf('(');
        -    return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : "";
        -};
        - 
        -/**
        - * Converts value to it's decimal representation in string
        - *
        - * @method toDecimal
        - * @param {String|Number|BigNumber}
        - * @return {String}
        - */
        -var toDecimal = function (value) {
        -    return toBigNumber(value).toNumber();
        -};
        - 
        -/**
        - * Converts value to it's hex representation
        - *
        - * @method fromDecimal
        - * @param {String|Number|BigNumber}
        - * @return {String}
        - */
        -var fromDecimal = function (value) {
        -    var number = toBigNumber(value);
        -    var result = number.toString(16);
        - 
        -    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
        -};
        - 
        -/**
        - * Auto converts any given value into it's hex representation.
        - *
        - * And even stringifys objects before.
        - *
        - * @method toHex
        - * @param {String|Number|BigNumber|Object}
        - * @return {String}
        - */
        -var toHex = function (val) {
        -    /*jshint maxcomplexity: 8 */
        - 
        -    if (isBoolean(val))
        -        return fromDecimal(+val);
        - 
        -    if (isBigNumber(val))
        -        return fromDecimal(val);
        - 
        -    if (isObject(val))
        -        return fromUtf8(JSON.stringify(val));
        - 
        -    // if its a negative number, pass it through fromDecimal
        -    if (isString(val)) {
        -        if (val.indexOf('-0x') === 0)
        -            return fromDecimal(val);
        -        else if(val.indexOf('0x') === 0)
        -            return val;
        -        else if (!isFinite(val))
        -            return fromAscii(val);
        -    }
        - 
        -    return fromDecimal(val);
        -};
        - 
        -/**
        - * Returns value of unit in Wei
        - *
        - * @method getValueOfUnit
        - * @param {String} unit the unit to convert to, default ether
        - * @returns {BigNumber} value of the unit (in Wei)
        - * @throws error if the unit is not correct:w
        - */
        -var getValueOfUnit = function (unit) {
        -    unit = unit ? unit.toLowerCase() : 'ether';
        -    var unitValue = unitMap[unit];
        -    if (unitValue === undefined) {
        -        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
        -    }
        -    return new BigNumber(unitValue, 10);
        -};
        - 
        -/**
        - * Takes a number of wei and converts it to any other ether unit.
        - *
        - * Possible units are:
        - *   SI Short   SI Full        Effigy       Other
        - * - kwei       femtoether     ada
        - * - mwei       picoether      babbage
        - * - gwei       nanoether      shannon      nano
        - * - --         microether     szabo        micro
        - * - --         milliether     finney       milli
        - * - ether      --             --
        - * - kether                    einstein     grand
        - * - mether
        - * - gether
        - * - tether
        - *
        - * @method fromWei
        - * @param {Number|String} number can be a number, number string or a HEX of a decimal
        - * @param {String} unit the unit to convert to, default ether
        - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
        -*/
        -var fromWei = function(number, unit) {
        -    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));
        - 
        -    return isBigNumber(number) ? returnValue : returnValue.toString(10);
        -};
        - 
        -/**
        - * Takes a number of a unit and converts it to wei.
        - *
        - * Possible units are:
        - *   SI Short   SI Full        Effigy       Other
        - * - kwei       femtoether     ada
        - * - mwei       picoether      babbage
        - * - gwei       nanoether      shannon      nano
        - * - --         microether     szabo        micro
        - * - --         milliether     finney       milli
        - * - ether      --             --
        - * - kether                    einstein     grand
        - * - mether
        - * - gether
        - * - tether
        - *
        - * @method toWei
        - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
        - * @param {String} unit the unit to convert from, default ether
        - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
        -*/
        -var toWei = function(number, unit) {
        -    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));
        - 
        -    return isBigNumber(number) ? returnValue : returnValue.toString(10);
        -};
        - 
        -/**
        - * Takes an input and transforms it into an bignumber
        - *
        - * @method toBigNumber
        - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
        - * @return {BigNumber} BigNumber
        -*/
        -var toBigNumber = function(number) {
        -    /*jshint maxcomplexity:5 */
        -    number = number || 0;
        -    if (isBigNumber(number))
        -        return number;
        - 
        -    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
        -        return new BigNumber(number.replace('0x',''), 16);
        -    }
        - 
        -    return new BigNumber(number.toString(10), 10);
        -};
        - 
        -/**
        - * Takes and input transforms it into bignumber and if it is negative value, into two's complement
        - *
        - * @method toTwosComplement
        - * @param {Number|String|BigNumber}
        - * @return {BigNumber}
        - */
        -var toTwosComplement = function (number) {
        -    var bigNumber = toBigNumber(number);
        -    if (bigNumber.lessThan(0)) {
        -        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
        -    }
        -    return bigNumber;
        -};
        - 
        -/**
        - * Checks if the given string is strictly an address
        - *
        - * @method isStrictAddress
        - * @param {String} address the given HEX adress
        - * @return {Boolean}
        -*/
        -var isStrictAddress = function (address) {
        -    return /^0x[0-9a-f]{40}$/i.test(address);
        -};
        - 
        -/**
        - * Checks if the given string is an address
        - *
        - * @method isAddress
        - * @param {String} address the given HEX adress
        - * @return {Boolean}
        -*/
        -var isAddress = function (address) {
        -    return /^(0x)?[0-9a-f]{40}$/i.test(address);
        -};
        - 
        -/**
        - * Transforms given string to valid 20 bytes-length addres with 0x prefix
        - *
        - * @method toAddress
        - * @param {String} address
        - * @return {String} formatted address
        - */
        -var toAddress = function (address) {
        -    if (isStrictAddress(address)) {
        -        return address;
        -    }
        - 
        -    if (/^[0-9a-f]{40}$/.test(address)) {
        -        return '0x' + address;
        -    }
        - 
        -    return '0x' + padLeft(toHex(address).substr(2), 40);
        -};
        - 
        -/**
        - * Returns true if object is BigNumber, otherwise false
        - *
        - * @method isBigNumber
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isBigNumber = function (object) {
        -    return object instanceof BigNumber ||
        -        (object && object.constructor && object.constructor.name === 'BigNumber');
        -};
        - 
        -/**
        - * Returns true if object is string, otherwise false
        - *
        - * @method isString
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isString = function (object) {
        -    return typeof object === 'string' ||
        -        (object && object.constructor && object.constructor.name === 'String');
        -};
        - 
        -/**
        - * Returns true if object is function, otherwise false
        - *
        - * @method isFunction
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isFunction = function (object) {
        -    return typeof object === 'function';
        -};
        - 
        -/**
        - * Returns true if object is Objet, otherwise false
        - *
        - * @method isObject
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isObject = function (object) {
        -    return typeof object === 'object';
        -};
        - 
        -/**
        - * Returns true if object is boolean, otherwise false
        - *
        - * @method isBoolean
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isBoolean = function (object) {
        -    return typeof object === 'boolean';
        -};
        - 
        -/**
        - * Returns true if object is array, otherwise false
        - *
        - * @method isArray
        - * @param {Object}
        - * @return {Boolean}
        - */
        -var isArray = function (object) {
        -    return object instanceof Array;
        -};
        - 
        -/**
        - * Returns true if given string is valid json object
        - *
        - * @method isJson
        - * @param {String}
        - * @return {Boolean}
        - */
        -var isJson = function (str) {
        -    try {
        -        return !!JSON.parse(str);
        -    } catch (e) {
        -        return false;
        -    }
        -};
        - 
        -module.exports = {
        -    padLeft: padLeft,
        -    padRight: padRight,
        -    toHex: toHex,
        -    toDecimal: toDecimal,
        -    fromDecimal: fromDecimal,
        -    toUtf8: toUtf8,
        -    toAscii: toAscii,
        -    fromUtf8: fromUtf8,
        -    fromAscii: fromAscii,
        -    transformToFullName: transformToFullName,
        -    extractDisplayName: extractDisplayName,
        -    extractTypeName: extractTypeName,
        -    toWei: toWei,
        -    fromWei: fromWei,
        -    toBigNumber: toBigNumber,
        -    toTwosComplement: toTwosComplement,
        -    toAddress: toAddress,
        -    isBigNumber: isBigNumber,
        -    isStrictAddress: isStrictAddress,
        -    isAddress: isAddress,
        -    isFunction: isFunction,
        -    isString: isString,
        -    isObject: isObject,
        -    isBoolean: isBoolean,
        -    isArray: isArray,
        -    isJson: isJson
        -};
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html deleted file mode 100644 index 1a926e7..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3.js.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - Code coverage report for web3/lib/web3.js - - - - - - -
        -

        Code coverage report for web3/lib/web3.js

        -

        - Statements: 98.25% (56 / 57)      - Branches: 0% (0 / 2)      - Functions: 85.71% (6 / 7)      - Lines: 98.25% (56 / 57)      - Ignored: none      -

        -
        All files » web3/lib/ » web3.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -1 -154 -154 -154 -154 -154 -154 -154 -154 -  -  -154 -  -  -  -154 -154 -  -  -  -  -  -1 -  -  -  -  -1 -25 -25 -  -  -1 -13 -13 -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -  -  -1 -1 -1 -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -1 -4 -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file web3.js
        - * @authors:
        - *   Jeffrey Wilcke <jeff@ethdev.com>
        - *   Marek Kotewicz <marek@ethdev.com>
        - *   Marian Oancea <marian@ethdev.com>
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - *   Gav Wood <g@ethdev.com>
        - * @date 2014
        - */
        - 
        -var RequestManager = require('./web3/requestmanager');
        -var Iban = require('./web3/iban');
        -var Eth = require('./web3/methods/eth');
        -var DB = require('./web3/methods/db');
        -var Shh = require('./web3/methods/shh');
        -var Net = require('./web3/methods/net');
        -var Settings = require('./web3/settings');
        -var version = require('./version.json');
        -var utils = require('./utils/utils');
        -var sha3 = require('./utils/sha3');
        -var extend = require('./web3/extend');
        -var Batch = require('./web3/batch');
        -var Property = require('./web3/property');
        -var HttpProvider = require('./web3/httpprovider');
        -var IpcProvider = require('./web3/ipcprovider');
        - 
        - 
        - 
        -function Web3 (provider) {
        -    this._requestManager = new RequestManager(provider);
        -    this.currentProvider = provider;
        -    this.eth = new Eth(this);
        -    this.db = new DB(this);
        -    this.shh = new Shh(this);
        -    this.net = new Net(this);
        -    this.settings = new Settings();
        -    this.version = {
        -        api: version.version
        -    };
        -    this.providers = {
        -        HttpProvider: HttpProvider,
        -        IpcProvider: IpcProvider
        -    };
        -    this._extend = extend(this);
        -    this._extend({
        -        properties: properties()
        -    });
        -}
        - 
        -// expose providers on the class
        -Web3.providers = {
        -    HttpProvider: HttpProvider,
        -    IpcProvider: IpcProvider
        -};
        - 
        -Web3.prototype.setProvider = function (provider) {
        -    this._requestManager.setProvider(provider);
        -    this.currentProvider = provider;
        -};
        - 
        -Web3.prototype.reset = function (keepIsSyncing) {
        -    this._requestManager.reset(keepIsSyncing);
        -    this.settings = new Settings();
        -};
        - 
        -Web3.prototype.toHex = utils.toHex;
        -Web3.prototype.toAscii = utils.toAscii;
        -Web3.prototype.toUtf8 = utils.toUtf8;
        -Web3.prototype.fromAscii = utils.fromAscii;
        -Web3.prototype.fromUtf8 = utils.fromUtf8;
        -Web3.prototype.toDecimal = utils.toDecimal;
        -Web3.prototype.fromDecimal = utils.fromDecimal;
        -Web3.prototype.toBigNumber = utils.toBigNumber;
        -Web3.prototype.toWei = utils.toWei;
        -Web3.prototype.fromWei = utils.fromWei;
        -Web3.prototype.isAddress = utils.isAddress;
        -Web3.prototype.isIBAN = utils.isIBAN;
        -Web3.prototype.sha3 = sha3;
        - 
        -/**
        - * Transforms direct icap to address
        - */
        -Web3.prototype.fromICAP = function (icap) {
        -    var iban = new Iban(icap);
        -    return iban.address();
        -};
        - 
        -var properties = function () {
        -    return [
        -        new Property({
        -            name: 'version.node',
        -            getter: 'web3_clientVersion'
        -        }),
        -        new Property({
        -            name: 'version.network',
        -            getter: 'net_version',
        -            inputFormatter: utils.toDecimal
        -        }),
        -        new Property({
        -            name: 'version.ethereum',
        -            getter: 'eth_protocolVersion',
        -            inputFormatter: utils.toDecimal
        -        }),
        -        new Property({
        -            name: 'version.whisper',
        -            getter: 'shh_version',
        -            inputFormatter: utils.toDecimal
        -        })
        -    ];
        -};
        - 
        -Web3.prototype.isConnected = function(){
        -    return (this.currentProvider && this.currentProvider.isConnected());
        -};
        - 
        -Web3.prototype.createBatch = function () {
        -    return new Batch(this);
        -};
        - 
        -module.exports = Web3;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html deleted file mode 100644 index 493184b..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/allevents.js.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - Code coverage report for web3/lib/web3/allevents.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/allevents.js

        -

        - Statements: 85.37% (35 / 41)      - Branches: 50% (6 / 12)      - Functions: 87.5% (7 / 8)      - Lines: 85.37% (35 / 41)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » allevents.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -  -1 -26 -26 -26 -  -  -1 -1 -1 -  -1 -2 -  -  -  -  -1 -  -1 -  -  -1 -2 -2 -  -2 -2 -2 -  -  -2 -  -  -  -  -2 -2 -  -  -1 -  -1 -  -  -  -  -  -1 -1 -1 -  -  -1 -26 -26 -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file allevents.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2014
        - */
        - 
        -var sha3 = require('../utils/sha3');
        -var SolidityEvent = require('./event');
        -var formatters = require('./formatters');
        -var utils = require('../utils/utils');
        -var Filter = require('./filter');
        -var watches = require('./methods/watches');
        - 
        -var AllSolidityEvents = function (requestManager, json, address) {
        -    this._requestManager = requestManager;
        -    this._json = json;
        -    this._address = address;
        -};
        - 
        -AllSolidityEvents.prototype.encode = function (options) {
        -    options = options || {};
        -    var result = {};
        - 
        -    ['fromBlock', 'toBlock'].filter(function (f) {
        -        return options[f] !== undefined;
        -    }).forEach(function (f) {
        -        result[f] = formatters.inputBlockNumberFormatter(options[f]);
        -    });
        - 
        -    result.address = this._address;
        - 
        -    return result;
        -};
        - 
        -AllSolidityEvents.prototype.decode = function (data) {
        -    data.data = data.data || '';
        -    data.topics = data.topics || [];
        - 
        -    var eventTopic = data.topics[0].slice(2);
        -    var match = this._json.filter(function (j) {
        -        return eventTopic === sha3(utils.transformToFullName(j));
        -    })[0];
        - 
        -    Iif (!match) { // cannot find matching event?
        -        console.warn('cannot find event for log');
        -        return data;
        -    }
        - 
        -    var event = new SolidityEvent(this._requestManager, match, this._address);
        -    return event.decode(data);
        -};
        - 
        -AllSolidityEvents.prototype.execute = function (options, callback) {
        - 
        -    Iif (utils.isFunction(arguments[arguments.length - 1])) {
        -        callback = arguments[arguments.length - 1];
        -        if(arguments.length === 1)
        -            options = null;
        -    }
        - 
        -    var o = this.encode(options);
        -    var formatter = this.decode.bind(this);
        -    return new Filter(this._requestManager, o, watches.eth(), formatter, callback);
        -};
        - 
        -AllSolidityEvents.prototype.attachToContract = function (contract) {
        -    var execute = this.execute.bind(this);
        -    contract.allEvents = execute;
        -};
        - 
        -module.exports = AllSolidityEvents;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html deleted file mode 100644 index abe7311..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/batch.js.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - Code coverage report for web3/lib/web3/batch.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/batch.js

        -

        - Statements: 100% (18 / 18)      - Branches: 60% (6 / 10)      - Functions: 100% (6 / 6)      - Lines: 100% (18 / 18)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » batch.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -4 -4 -  -  -  -  -  -  -  -  -1 -8 -  -  -  -  -  -  -  -1 -4 -4 -4 -4 -8 -  -8 -  -8 -2 -  -  -6 -  -  -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file batch.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Jsonrpc = require('./jsonrpc');
        -var errors = require('./errors');
        - 
        -var Batch = function (web3) {
        -    this.requestManager = web3._requestManager;
        -    this.requests = [];
        -};
        - 
        -/**
        - * Should be called to add create new request to batch request
        - *
        - * @method add
        - * @param {Object} jsonrpc requet object
        - */
        -Batch.prototype.add = function (request) {
        -    this.requests.push(request);
        -};
        - 
        -/**
        - * Should be called to execute batch request
        - *
        - * @method execute
        - */
        -Batch.prototype.execute = function () {
        -    var requests = this.requests;
        -    this.requestManager.sendBatch(requests, function (err, results) {
        -        results = results || [];
        -        requests.map(function (request, index) {
        -            return results[index] || {};
        -        }).forEach(function (result, index) {
        -            Eif (requests[index].callback) {
        - 
        -                if (!Jsonrpc.getInstance().isValidResponse(result)) {
        -                    return requests[index].callback(errors.InvalidResponse(result));
        -                }
        - 
        -                requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));
        -            }
        -        });
        -    }); 
        -};
        - 
        -module.exports = Batch;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html deleted file mode 100644 index b19457e..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/contract.js.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - Code coverage report for web3/lib/web3/contract.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/contract.js

        -

        - Statements: 59.6% (59 / 99)      - Branches: 23.81% (10 / 42)      - Functions: 77.27% (17 / 22)      - Lines: 59.6% (59 / 99)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » contract.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -1 -1 -  -1 -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -26 -91 -  -68 -  -68 -  -  -  -  -  -  -  -  -  -  -1 -26 -91 -  -  -26 -26 -  -26 -22 -22 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -  -27 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -1 -  -1 -1 -1 -  -  -1 -1 -1 -  -  -1 -1 -  -1 -  -  -1 -1 -  -  -  -1 -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -26 -  -  -  -26 -26 -  -26 -  -  -26 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -27 -27 -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file contract.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2014
        - */
        - 
        -var utils = require('../utils/utils');
        -var coder = require('../solidity/coder');
        -var ContractEvent = require('./event');
        -var SolidityFunction = require('./function');
        - 
        -/**
        - * Should be called to encode constructor params
        - *
        - * @method encodeConstructorParams
        - * @param {Array} abi
        - * @param {Array} constructor params
        - */
        -var encodeConstructorParams = function (abi, params) {
        -    return abi.filter(function (json) {
        -        return json.type === 'constructor' && json.inputs.length === params.length;
        -    }).map(function (json) {
        -        return json.inputs.map(function (input) {
        -            return input.type;
        -        });
        -    }).map(function (types) {
        -        return coder.encodeParams(types, params);
        -    })[0] || '';
        -};
        - 
        -/**
        - * Should be called to add functions to contract object
        - *
        - * @method addFunctionsToContract
        - * @param {Contract} contract
        - * @param {Array} abi
        - */
        -var addFunctionsToContract = function (contract) {
        -    contract.abi.filter(function (json) {
        -        return json.type === 'function';
        -    }).map(function (json) {
        -        return new SolidityFunction(contract._eth, json, contract.address);
        -    }).forEach(function (f) {
        -        f.attachToContract(contract);
        -    });
        -};
        - 
        -/**
        - * Should be called to add events to contract object
        - *
        - * @method addEventsToContract
        - * @param {Contract} contract
        - * @param {Array} abi
        - */
        -var addEventsToContract = function (contract) {
        -    var events = contract.abi.filter(function (json) {
        -        return json.type === 'event';
        -    });
        - 
        -    var allEvents = new ContractEvent(contract._eth._requestManager, events, contract.address, true);
        -    allEvents.attachToContract(contract);
        -    
        -    events.map(function (json) {
        -        var ev = new ContractEvent(contract._eth._requestManager, json, contract.address);
        -        ev.attachToContract(contract);
        -    });
        -};
        - 
        - 
        -/**
        - * Should be called to check if the contract gets properly deployed on the blockchain.
        - *
        - * @method checkForContractAddress
        - * @param {Object} contract
        - * @param {Function} callback
        - * @returns {Undefined}
        - */
        -var checkForContractAddress = function(contract, callback){
        -    var count = 0,
        -        callbackFired = false;
        - 
        -    // wait for receipt
        -    var filter = contract._eth.filter('latest', function(e){
        -        if (!e && !callbackFired) {
        -            count++;
        - 
        -            // stop watching after 50 blocks (timeout)
        -            if (count > 50) {
        -                
        -                filter.stopWatching();
        -                callbackFired = true;
        - 
        -                if (callback)
        -                    callback(new Error('Contract transaction couldn\'t be found after 50 blocks'));
        -                else
        -                    throw new Error('Contract transaction couldn\'t be found after 50 blocks');
        - 
        - 
        -            } else {
        - 
        -                contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){
        -                    if(receipt && !callbackFired) {
        - 
        -                        contract._eth.getCode(receipt.contractAddress, function(e, code){
        -                            /*jshint maxcomplexity: 6 */
        - 
        -                            if(callbackFired || !code)
        -                                return;
        -                            
        -                            filter.stopWatching();
        -                            callbackFired = true;
        - 
        -                            if(code.length > 2) {
        - 
        -                                // console.log('Contract code deployed!');
        - 
        -                                contract.address = receipt.contractAddress;
        - 
        -                                // attach events and methods again after we have
        -                                addFunctionsToContract(contract);
        -                                addEventsToContract(contract);
        - 
        -                                // call callback for the second time
        -                                if(callback)
        -                                    callback(null, contract);
        - 
        -                            } else {
        -                                if(callback)
        -                                    callback(new Error('The contract code couldn\'t be stored, please check your gas amount.'));
        -                                else
        -                                    throw new Error('The contract code couldn\'t be stored, please check your gas amount.');
        -                            }
        -                        });
        -                    }
        -                });
        -            }
        -        }
        -    });
        -};
        - 
        -/**
        - * Should be called to create new ContractFactory instance
        - *
        - * @method ContractFactory
        - * @param {Array} abi
        - */
        -var ContractFactory = function (eth, abi) {
        -    this.eth = eth;
        -    this.abi = abi;
        - 
        -    this.new.getData = this.getData.bind(this);
        -};
        - 
        -/**
        - * Should be called to create new ContractFactory
        - *
        - * @method contract
        - * @param {Array} abi
        - * @returns {ContractFactory} new contract factory
        - */
        -//var contract = function (abi) {
        -    //return new ContractFactory(abi);
        -//};
        - 
        -/**
        - * Should be called to create new contract on a blockchain
        - * 
        - * @method new
        - * @param {Any} contract constructor param1 (optional)
        - * @param {Any} contract constructor param2 (optional)
        - * @param {Object} contract transaction object (required)
        - * @param {Function} callback
        - * @returns {Contract} returns contract instance
        - */
        -ContractFactory.prototype.new = function () {
        -    var contract = new Contract(this.eth, this.abi);
        - 
        -    // parse arguments
        -    var options = {}; // required!
        -    var callback;
        - 
        -    var args = Array.prototype.slice.call(arguments);
        -    Eif (utils.isFunction(args[args.length - 1])) {
        -        callback = args.pop();
        -    }
        - 
        -    var last = args[args.length - 1];
        -    Eif (utils.isObject(last) && !utils.isArray(last)) {
        -        options = args.pop();
        -    }
        - 
        -    var bytes = encodeConstructorParams(this.abi, args);
        -    options.data += bytes;
        - 
        -    Eif (callback) {
        - 
        -        // wait for the contract address adn check if the code was deployed
        -        this.eth.sendTransaction(options, function (err, hash) {
        -            Iif (err) {
        -                callback(err);
        -            } else {
        -                // add the transaction hash
        -                contract.transactionHash = hash;
        - 
        -                // call callback for the first time
        -                callback(null, contract);
        - 
        -                checkForContractAddress(contract, callback);
        -            }
        -        });
        -    } else {
        -        var hash = this.eth.sendTransaction(options);
        -        // add the transaction hash
        -        contract.transactionHash = hash;
        -        checkForContractAddress(contract);
        -    }
        - 
        -    return contract;
        -};
        - 
        -/**
        - * Should be called to get access to existing contract on a blockchain
        - *
        - * @method at
        - * @param {Address} contract address (required)
        - * @param {Function} callback {optional)
        - * @returns {Contract} returns contract if no callback was passed,
        - * otherwise calls callback function (err, contract)
        - */
        -ContractFactory.prototype.at = function (address, callback) {
        -    var contract = new Contract(this.eth, this.abi, address);
        - 
        -    // this functions are not part of prototype, 
        -    // because we dont want to spoil the interface
        -    addFunctionsToContract(contract);
        -    addEventsToContract(contract);
        -    
        -    Iif (callback) {
        -        callback(null, contract);
        -    } 
        -    return contract;
        -};
        - 
        -/**
        - * Gets the data, which is data to deploy plus constructor params
        - *
        - * @method getData
        - */
        -ContractFactory.prototype.getData = function () {
        -    var options = {}; // required!
        -    var args = Array.prototype.slice.call(arguments);
        - 
        -    var last = args[args.length - 1];
        -    if (utils.isObject(last) && !utils.isArray(last)) {
        -        options = args.pop();
        -    }
        - 
        -    var bytes = encodeConstructorParams(this.abi, args);
        -    options.data += bytes;
        - 
        -    return options.data;
        -};
        - 
        -/**
        - * Should be called to create new contract instance
        - *
        - * @method Contract
        - * @param {Array} abi
        - * @param {Address} contract address
        - */
        -var Contract = function (eth, abi, address) {
        -    this._eth = eth;
        -    this.transactionHash = null;
        -    this.address = address;
        -    this.abi = abi;
        -};
        - 
        -module.exports = ContractFactory;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html deleted file mode 100644 index a03587d..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/errors.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - Code coverage report for web3/lib/web3/errors.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/errors.js

        -

        - Statements: 83.33% (5 / 6)      - Branches: 100% (5 / 5)      - Functions: 75% (3 / 4)      - Lines: 83.33% (5 / 6)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » errors.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -3 -  -4 -  -  -  -  -  -7 -  -  -6 -6 -  -  -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file errors.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -module.exports = {
        -    InvalidNumberOfParams: function () {
        -        return new Error('Invalid number of input parameters');
        -    },
        -    InvalidConnection: function (host){
        -        return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.');
        -    },
        -    InvalidProvider: function () {
        -        return new Error('Provider not set or invalid');
        -    },
        -    InvalidResponse: function (result){
        -        var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
        -        return new Error(message);
        -    }
        -};
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html deleted file mode 100644 index f6a2688..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/event.js.html +++ /dev/null @@ -1,981 +0,0 @@ - - - - Code coverage report for web3/lib/web3/event.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/event.js

        -

        - Statements: 91.51% (97 / 106)      - Branches: 83.33% (35 / 42)      - Functions: 90.91% (20 / 22)      - Lines: 91.43% (96 / 105)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » event.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -  -  -  -  -1 -61 -61 -61 -61 -61 -61 -61 -  -  -  -  -  -  -  -  -  -  -1 -16 -50 -  -25 -  -  -  -  -  -  -  -  -  -  -1 -30 -  -  -  -  -  -  -  -  -1 -22 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -12 -12 -12 -  -  -12 -24 -  -4 -  -  -12 -  -  -12 -  -11 -9 -  -  -11 -21 -  -16 -16 -6 -  -  -10 -1 -2 -  -  -9 -  -  -11 -  -  -12 -  -12 -  -  -  -  -  -  -  -  -  -1 -8 -8 -8 -  -  -8 -  -1 -1 -1 -  -  -1 -  -  -  -  -1 -1 -1 -  -  -  -7 -7 -7 -  -  -8 -12 -8 -  -8 -8 -  -8 -8 -8 -  -8 -25 -25 -  -  -8 -8 -  -8 -  -  -  -  -  -  -  -  -  -  -1 -  -3 -3 -  -3 -1 -  -  -  -3 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -3 -3 -  -  -  -  -  -  -  -  -  -  -3 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -48 -  -  -48 -  -  -48 -26 -  -  -  -  -22 -22 -22 -  -22 -  -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file event.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @author Fabian Vogelsteller <fabian@frozeman.de>
        - * @date 2016
        - */
        - 
        -var utils = require('../utils/utils');
        -var coder = require('../solidity/coder');
        -var formatters = require('./formatters');
        -var sha3 = require('../utils/sha3');
        -var Subscription = require('./subscription');
        - 
        -/**
        - * This prototype should be used to create event filters
        - */
        -var ContractEvent = function (requestManager, json, address, allEvents) {
        -    this._requestManager = requestManager;
        -    this._address = address;
        -    this._json = json;
        -    this._name = json.inputs ? utils.transformToFullName(json) : null;
        -    this._params = json.inputs;
        -    this._anonymous = json.anonymous;
        -    this._allEvents = !!allEvents;
        -};
        - 
        -/**
        - * Should be used to get filtered param types
        - *
        - * @method types
        - * @param {Bool} decide if returned typed should be indexed
        - * @param {Object} params the parameters of the event
        - * @return {Array} array of types
        - */
        -ContractEvent.prototype.types = function (indexed, params) {
        -    return params.filter(function (i) {
        -        return i.indexed === indexed;
        -    }).map(function (i) {
        -        return i.type;
        -    });
        -};
        - 
        -/**
        - * Should be used to get event display name
        - *
        - * @method displayName
        - * @param {String} name (optional) the events name
        - * @return {String} event display name
        - */
        -ContractEvent.prototype.displayName = function (name) {
        -    return utils.extractDisplayName(name || this._name);
        -};
        - 
        -/**
        - * Should be used to get event type name
        - *
        - * @method typeName
        - * @return {String} event type name
        - */
        -ContractEvent.prototype.typeName = function () {
        -    return utils.extractTypeName(this._name);
        -};
        - 
        -/**
        - * Should be used to get event signature
        - *
        - * @method signature
        - * @return {String} event signature
        - */
        -ContractEvent.prototype.signature = function () {
        -    return sha3(this._name);
        -};
        - 
        -/**
        - * Should be used to encode indexed params and options to one final object
        - * 
        - * @method encode
        - * @param {Object} options
        - * @return {Object} everything combined together and encoded
        - */
        -ContractEvent.prototype.encode = function (options) {
        -    options = options || {};
        -    indexed = options.filter || {};
        -    var result = {};
        - 
        - 
        -    ['fromBlock', 'toBlock'].filter(function (f) {
        -        return options[f] !== undefined;
        -    }).forEach(function (f) {
        -        result[f] = formatters.inputBlockNumberFormatter(options[f]);
        -    });
        - 
        -    result.topics = [];
        - 
        -    // single events
        -    if(!this._allEvents) {
        -        
        -        if (!this._anonymous) {
        -            result.topics.push('0x' + this.signature());
        -        }
        - 
        -        var indexedTopics = this._params.filter(function (i) {
        -            return i.indexed === true;
        -        }).map(function (i) {
        -            var value = indexed[i.name];
        -            if (value === undefined || value === null) {
        -                return null;
        -            }
        -            
        -            if (utils.isArray(value)) {
        -                return value.map(function (v) {
        -                    return '0x' + coder.encodeParam(i.type, v);
        -                });
        -            }
        -            return '0x' + coder.encodeParam(i.type, value);
        -        });
        - 
        -        result.topics = result.topics.concat(indexedTopics);
        -    }
        - 
        -    result.address = this._address;
        - 
        -    return result;
        -};
        - 
        -/**
        - * Should be used to decode indexed params and options
        - *
        - * @method decode
        - * @param {Object} data
        - * @return {Object} result object with decoded indexed && not indexed params
        - */
        -ContractEvent.prototype.decode = function (data) {
        -    var name = params = anonymous = null;
        -    data.data = data.data || '';
        -    data.topics = data.topics || [];
        - 
        -    // all events
        -    if(this._allEvents) {
        - 
        -        var eventTopic = data.topics[0].slice(2);
        -        var match = this._json.filter(function (j) {
        -            return eventTopic === sha3(utils.transformToFullName(j));
        -        })[0];
        - 
        -        Iif (!match) { // cannot find matching event?
        -            console.warn('Can\'t find event for log');
        -            return data;
        -        }
        - 
        -        name = utils.transformToFullName(match);
        -        params = match.inputs;
        -        anonymous = match.anonymous;
        - 
        -    // single event
        -    } else {
        -        name = this._name;
        -        params = this._params;
        -        anonymous = this._anonymous;
        -    }
        - 
        -    var argTopics = anonymous ? data.topics : data.topics.slice(1);
        -    var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join("");
        -    var indexedParams = coder.decodeParams(this.types(true, params), indexedData); 
        - 
        -    var notIndexedData = data.data.slice(2);
        -    var notIndexedParams = coder.decodeParams(this.types(false, params), notIndexedData);
        -    
        -    var result = formatters.outputLogFormatter(data);
        -    result.event = this.displayName(name);
        -    result.address = data.address;
        - 
        -    result.returnValues = params.reduce(function (acc, current) {
        -        acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();
        -        return acc;
        -    }, {});
        - 
        -    delete result.data;
        -    delete result.topics;
        - 
        -    return result;
        -};
        - 
        -/**
        - * Get the arguments of the function call
        - *
        - * @method getArgs
        - * @param {Object} options
        - * @param {Function} callback
        - * @return {Object} filter object
        - */
        -ContractEvent.prototype.getArgs = function (options, callback) {
        - 
        -    Eif (utils.isFunction(arguments[arguments.length - 1])) {
        -        callback = arguments[arguments.length - 1];
        - 
        -        if(arguments.length === 1) {
        -            options = null;
        -        }
        -    }
        -    
        -    return {
        -        options: this.encode(options),
        -        formatter: this.decode.bind(this),
        -        callback: callback
        -    };
        -};
        - 
        -/**
        - * Should be used to create new filter object from event
        - *
        - * @method execute
        - * @param {Object} options
        - * @param {Function} callback
        - * @return {Object} filter object
        - */
        -ContractEvent.prototype.execute = function (options, callback) {
        - 
        -    var args = this.getArgs.apply(this, arguments);
        -    var subscription = new Subscription({
        -        subscription: {
        -            params: 1,
        -            inputFormatter: [formatters.inputLogFormatter],
        -            outputFormatter: args.formatter
        -        },
        -        subscribeMethod: 'eth_subscribe',
        -        unsubscribeMethod: 'eth_unsubscribe',
        -        requestManager: this._requestManager
        -    });
        - 
        -    return subscription.subscribe.apply(subscription, ['logs', args.options, args.callback]);
        -};
        - 
        -// TODO: put indexed args into the options object
        - 
        -/**
        - * Get past logs for this event
        - *
        - * @method getPastEvents
        - * @param {Object} options
        - * @param {Function} callback
        - * @param {Contract}
        - */
        -ContractEvent.prototype.getPastEvents = function(options, callback){
        - 
        -    var args = this.getArgs.apply(this, arguments);
        - 
        -    if (utils.isFunction(callback)) {
        -        this._requestManager.sendAsync({
        -            method: 'eth_getLogs',
        -            params: [args.options]
        -        }, function(error, logs){
        -            if(!error) {
        -                args.callback(null, logs.map(args.formatter));
        -            } else {
        -                args.callback(error);
        -            }
        -        });
        -    }
        - 
        -    return this._requestManager.send({
        -        method: 'eth_getLogs',
        -        params: [args.options]
        -    }).map(args.formatter);
        -};
        - 
        -/**
        - * Should be used to attach event to contract object
        - *
        - * @method attachToContract
        - * @param {Contract}
        - */
        -ContractEvent.prototype.attachToContract = function (contract) {
        -    var execute = this.execute.bind(this);
        - 
        -    // attach past logs
        -    execute.getPastEvents = this.getPastEvents.bind(this);
        - 
        -    // all events
        -    if(this._allEvents) {
        -        contract.allEvents = execute;
        -    
        -    // single event
        -    } else {
        - 
        -        var displayName = this.displayName();
        -        Eif (!contract[displayName]) {
        -            contract[displayName] = execute;
        -        }
        -        contract[displayName][this.typeName()] = this.execute.bind(this, contract);
        -    }
        - 
        -};
        - 
        -module.exports = ContractEvent;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html deleted file mode 100644 index 7d2e620..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/extend.js.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - Code coverage report for web3/lib/web3/extend.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/extend.js

        -

        - Statements: 100% (26 / 26)      - Branches: 87.5% (7 / 8)      - Functions: 100% (4 / 4)      - Lines: 100% (26 / 26)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » extend.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -491 -1 -1 -1 -  -  -  -1 -  -154 -  -157 -157 -1 -1 -  -1 -  -156 -  -  -157 -2 -2 -2 -  -  -  -157 -156 -618 -618 -  -  -  -  -154 -154 -154 -154 -  -154 -  -  -  -  -1 -  - 
        var formatters = require('./formatters');
        -var utils = require('./../utils/utils');
        -var Method = require('./method');
        -var Property = require('./property');
        - 
        -// TODO: refactor, so the input params are not altered.
        -// it's necessary to make same 'extension' work with multiple providers
        -var extend = function (web3) {
        -    /* jshint maxcomplexity:5 */
        -    var ex = function (extension) {
        - 
        -        var extendedObject;
        -        if (extension.property) {
        -            Eif (!web3[extension.property]) {
        -                web3[extension.property] = {};
        -            }
        -            extendedObject = web3[extension.property];
        -        } else {
        -            extendedObject = web3;
        -        }
        - 
        -        if (extension.methods) {
        -            extension.methods.forEach(function (method) {
        -                method.attachToObject(extendedObject);
        -                method.setRequestManager(web3._requestManager);
        -            });
        -        }
        - 
        -        if (extension.properties) {
        -            extension.properties.forEach(function (property) {
        -                property.attachToObject(extendedObject);
        -                property.setRequestManager(web3._requestManager);
        -            });
        -        }
        -    };
        - 
        -    ex.formatters = formatters; 
        -    ex.utils = utils;
        -    ex.Method = Method;
        -    ex.Property = Property;
        - 
        -    return ex;
        -};
        - 
        - 
        - 
        -module.exports = extend;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html deleted file mode 100644 index 59be9e4..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/filter.js.html +++ /dev/null @@ -1,735 +0,0 @@ - - - - Code coverage report for web3/lib/web3/filter.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/filter.js

        -

        - Statements: 90.22% (83 / 92)      - Branches: 73.91% (34 / 46)      - Functions: 87.5% (21 / 24)      - Lines: 90.22% (83 / 92)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » filter.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -1 -  -19 -4 -  -15 -  -15 -12 -  -3 -  -  -  -  -  -1 -  -15 -6 -  -  -9 -  -  -9 -9 -17 -  -  -9 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -7 -3 -  -3 -  -  -  -3 -3 -3 -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -7 -7 -  -  -  -  -  -7 -7 -7 -7 -7 -  -  -  -  -  -7 -  -  -  -  -  -  -1 -15 -15 -15 -60 -60 -  -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -  -  -  -  -15 -  -  -  -15 -4 -  -15 -  -  -15 -4 -  -15 -4 -  -  -15 -3 -  -  -  -  -15 -  -  -1 -7 -  -7 -3 -3 -  -  -7 -  -  -1 -7 -  -7 -7 -  -  -1 -15 -15 -11 -  -  -4 -  -7 -7 -  -  -7 -11 -  -  -  -  -  -4 -4 -  -  -  -  -  -  -  -11 -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file filter.js
        - * @authors:
        - *   Jeffrey Wilcke <jeff@ethdev.com>
        - *   Marek Kotewicz <marek@ethdev.com>
        - *   Marian Oancea <marian@ethdev.com>
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - *   Gav Wood <g@ethdev.com>
        - * @date 2014
        - */
        - 
        -var formatters = require('./formatters');
        -var utils = require('../utils/utils');
        - 
        -/**
        -* Converts a given topic to a hex string, but also allows null values.
        -*
        -* @param {Mixed} value
        -* @return {String}
        -*/
        -var toTopic = function(value){
        - 
        -    if(value === null || typeof value === 'undefined')
        -        return null;
        - 
        -    value = String(value);
        - 
        -    if(value.indexOf('0x') === 0)
        -        return value;
        -    else
        -        return utils.fromUtf8(value);
        -};
        - 
        -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
        -/// @param should be string or object
        -/// @returns options string or object
        -var getOptions = function (options) {
        - 
        -    if (utils.isString(options)) {
        -        return options;
        -    }
        - 
        -    options = options || {};
        - 
        -    // make sure topics, get converted to hex
        -    options.topics = options.topics || [];
        -    options.topics = options.topics.map(function(topic){
        -        return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
        -    });
        - 
        -    return {
        -        topics: options.topics,
        -        from: options.from,
        -        to: options.to,
        -        address: options.address,
        -        fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),
        -        toBlock: formatters.inputBlockNumberFormatter(options.toBlock)
        -    };
        -};
        - 
        -/**
        -Adds the callback and sets up the methods, to iterate over the results.
        - 
        -@method getLogsAtStart
        -@param {Object} self
        -@param {funciton}
        -*/
        -var getLogsAtStart = function(self, callback){
        -    // call getFilterLogs for the first watch callback start
        -    if (!utils.isString(self.options)) {
        -        self.get(function (err, messages) {
        -            // don't send all the responses to all the watches again... just to self one
        -            Iif (err) {
        -                callback(err);
        -            }
        - 
        -            Eif(utils.isArray(messages)) {
        -                messages.forEach(function (message) {
        -                    callback(null, message);
        -                });
        -            }
        -        });
        -    }
        -};
        - 
        -/**
        -Adds the callback and sets up the methods, to iterate over the results.
        - 
        -@method pollFilter
        -@param {Object} self
        -*/
        -var pollFilter = function(self) {
        - 
        -    var onMessage = function (error, messages) {
        -        Iif (error) {
        -            return self.callbacks.forEach(function (callback) {
        -                callback(error);
        -            });
        -        }
        - 
        -        Eif(utils.isArray(messages)) {
        -            messages.forEach(function (message) {
        -                message = self.formatter ? self.formatter(message) : message;
        -                self.callbacks.forEach(function (callback) {
        -                    callback(null, message);
        -                });
        -            });
        -        }
        -    };
        - 
        -    self.requestManager.startPolling({
        -        method: self.implementation.poll.call,
        -        params: [self.filterId],
        -    }, self.filterId, onMessage, self.stopWatching.bind(self));
        - 
        -};
        - 
        -var Filter = function (requestManager, options, methods, formatter, callback) {
        -    var self = this;
        -    var implementation = {};
        -    methods.forEach(function (method) {
        -        method.setRequestManager(requestManager);
        -        method.attachToObject(implementation);
        -    });
        -    this.requestManager = requestManager;
        -    this.options = getOptions(options);
        -    this.implementation = implementation;
        -    this.filterId = null;
        -    this.callbacks = [];
        -    this.getLogsCallbacks = [];
        -    this.pollFilters = [];
        -    this.formatter = formatter;
        -    this.implementation.newFilter(this.options, function(error, id){
        -        Iif(error) {
        -            self.callbacks.forEach(function(cb){
        -                cb(error);
        -            });
        -        } else {
        -            self.filterId = id;
        - 
        -            // check if there are get pending callbacks as a consequence
        -            // of calling get() with filterId unassigned.
        -            self.getLogsCallbacks.forEach(function (cb){
        -                self.get(cb);
        -            });
        -            self.getLogsCallbacks = [];
        - 
        -            // get filter logs for the already existing watch calls
        -            self.callbacks.forEach(function(cb){
        -                getLogsAtStart(self, cb);
        -            });
        -            if(self.callbacks.length > 0)
        -                pollFilter(self);
        - 
        -            // start to watch immediately
        -            if(typeof callback === 'function') {
        -                return self.watch(callback);
        -            }
        -        }
        -    });
        - 
        -    return this;
        -};
        - 
        -Filter.prototype.watch = function (callback) {
        -    this.callbacks.push(callback);
        - 
        -    if(this.filterId) {
        -        getLogsAtStart(this, callback);
        -        pollFilter(this);
        -    }
        - 
        -    return this;
        -};
        - 
        -Filter.prototype.stopWatching = function () {
        -    this.requestManager.stopPolling(this.filterId);
        -    // remove filter async
        -    this.implementation.uninstallFilter(this.filterId, function(){});
        -    this.callbacks = [];
        -};
        - 
        -Filter.prototype.get = function (callback) {
        -    var self = this;
        -    if (utils.isFunction(callback)) {
        -        if (this.filterId === null) {
        -            // If filterId is not set yet, call it back
        -            // when newFilter() assigns it.
        -            this.getLogsCallbacks.push(callback);
        -        } else {
        -            this.implementation.getLogs(this.filterId, function(err, res){
        -                Iif (err) {
        -                    callback(err);
        -                } else {
        -                    callback(null, res.map(function (log) {
        -                        return self.formatter ? self.formatter(log) : log;
        -                    }));
        -                }
        -            });
        -        }
        -    } else {
        -        Eif (this.filterId === null) {
        -            throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.');
        -        }
        -        var logs = this.implementation.getLogs(this.filterId);
        -        return logs.map(function (log) {
        -            return self.formatter ? self.formatter(log) : log;
        -        });
        -    }
        - 
        -    return this;
        -};
        - 
        -module.exports = Filter;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html deleted file mode 100644 index 887c64e..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/formatters.js.html +++ /dev/null @@ -1,1050 +0,0 @@ - - - - Code coverage report for web3/lib/web3/formatters.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/formatters.js

        -

        - Statements: 92.97% (119 / 128)      - Branches: 80.28% (57 / 71)      - Functions: 96% (24 / 25)      - Lines: 92.97% (119 / 128)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » formatters.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -1 -26 -  -  -1 -67 -  -  -1 -55 -20 -  -35 -  -  -1 -67 -  -67 -15 -  -52 -  -  -  -  -  -  -  -  -  -1 -  -15 -  -15 -4 -  -  -15 -15 -  -  -15 -60 -  -18 -  -  -15 -  -  -  -  -  -  -  -  -  -1 -  -13 -13 -  -13 -11 -  -  -13 -52 -  -24 -  -  -13 -  -  -  -  -  -  -  -  -  -1 -12 -11 -12 -11 -12 -12 -12 -12 -12 -  -  -  -  -  -  -  -  -  -1 -2 -2 -2 -2 -2 -2 -  -2 -2 -4 -  -  -  -2 -  -  -  -  -  -  -  -  -  -1 -  -  -15 -15 -15 -15 -15 -14 -  -15 -15 -  -15 -12 -20 -4 -  -  -  -15 -  -  -  -  -  -  -  -  -  -1 -5 -  -7 -2 -  -5 -  -5 -5 -  -  -  -  -  -5 -5 -7 -  -  -5 -  -5 -  -  -5 -  -  -  -  -  -  -  -  -  -1 -16 -13 -16 -13 -16 -13 -  -16 -  -  -  -  -  -  -  -  -  -1 -  -  -5 -5 -5 -  -  -5 -  -  -  -  -5 -  -6 -  -  -5 -  -  -  -  -  -  -  -  -  -1 -  -1 -1 -1 -1 -  -  -  -  -  -  -  -  -1 -  -  -1 -2 -  -  -1 -  -  -1 -80 -80 -8 -72 -58 -14 -9 -  -5 -  -  -  -1 -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file formatters.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @author Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        -var config = require('../utils/config');
        -var Iban = require('./iban');
        - 
        -/**
        - * Should the format output to a big number
        - *
        - * @method outputBigNumberFormatter
        - * @param {String|Number|BigNumber}
        - * @returns {BigNumber} object
        - */
        -var outputBigNumberFormatter = function (number) {
        -    return utils.toBigNumber(number);
        -};
        - 
        -var isPredefinedBlockNumber = function (blockNumber) {
        -    return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';
        -};
        - 
        -var inputDefaultBlockNumberFormatter = function (blockNumber) {
        -    if (blockNumber === undefined) {
        -        return config.defaultBlock;
        -    }
        -    return inputBlockNumberFormatter(blockNumber);
        -};
        - 
        -var inputBlockNumberFormatter = function (blockNumber) {
        -    Iif (blockNumber === undefined) {
        -        return undefined;
        -    } else if (isPredefinedBlockNumber(blockNumber)) {
        -        return blockNumber;
        -    }
        -    return utils.toHex(blockNumber);
        -};
        - 
        -/**
        - * Formats the input of a transaction and converts all values to HEX
        - *
        - * @method inputCallFormatter
        - * @param {Object} transaction options
        - * @returns object
        -*/
        -var inputCallFormatter = function (options){
        - 
        -    options.from = options.from || config.defaultAccount;
        - 
        -    if (options.from) {
        -        options.from = inputAddressFormatter(options.from);
        -    }
        - 
        -    Eif (options.to) { // it might be contract creation
        -        options.to = inputAddressFormatter(options.to);
        -    }
        - 
        -    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        -        return options[key] !== undefined;
        -    }).forEach(function(key){
        -        options[key] = utils.fromDecimal(options[key]);
        -    });
        - 
        -    return options; 
        -};
        - 
        -/**
        - * Formats the input of a transaction and converts all values to HEX
        - *
        - * @method inputTransactionFormatter
        - * @param {Object} transaction options
        - * @returns object
        -*/
        -var inputTransactionFormatter = function (options){
        - 
        -    options.from = options.from || config.defaultAccount;
        -    options.from = inputAddressFormatter(options.from);
        - 
        -    if (options.to) { // it might be contract creation
        -        options.to = inputAddressFormatter(options.to);
        -    }
        - 
        -    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        -        return options[key] !== undefined;
        -    }).forEach(function(key){
        -        options[key] = utils.fromDecimal(options[key]);
        -    });
        - 
        -    return options; 
        -};
        - 
        -/**
        - * Formats the output of a transaction to its proper values
        - * 
        - * @method outputTransactionFormatter
        - * @param {Object} tx
        - * @returns {Object}
        -*/
        -var outputTransactionFormatter = function (tx){
        -    if(tx.blockNumber !== null)
        -        tx.blockNumber = utils.toDecimal(tx.blockNumber);
        -    if(tx.transactionIndex !== null)
        -        tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
        -    tx.nonce = utils.toDecimal(tx.nonce);
        -    tx.gas = utils.toDecimal(tx.gas);
        -    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
        -    tx.value = utils.toBigNumber(tx.value);
        -    return tx;
        -};
        - 
        -/**
        - * Formats the output of a transaction receipt to its proper values
        - * 
        - * @method outputTransactionReceiptFormatter
        - * @param {Object} receipt
        - * @returns {Object}
        -*/
        -var outputTransactionReceiptFormatter = function (receipt){
        -    Eif(receipt.blockNumber !== null)
        -        receipt.blockNumber = utils.toDecimal(receipt.blockNumber);
        -    Eif(receipt.transactionIndex !== null)
        -        receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);
        -    receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);
        -    receipt.gasUsed = utils.toDecimal(receipt.gasUsed);
        - 
        -    Eif(utils.isArray(receipt.logs)) {
        -        receipt.logs = receipt.logs.map(function(log){
        -            return outputLogFormatter(log);
        -        });
        -    }
        - 
        -    return receipt;
        -};
        - 
        -/**
        - * Formats the output of a block to its proper values
        - *
        - * @method outputBlockFormatter
        - * @param {Object} block 
        - * @returns {Object}
        -*/
        -var outputBlockFormatter = function(block) {
        - 
        -    // transform to number
        -    block.gasLimit = utils.toDecimal(block.gasLimit);
        -    block.gasUsed = utils.toDecimal(block.gasUsed);
        -    block.size = utils.toDecimal(block.size);
        -    block.timestamp = utils.toDecimal(block.timestamp);
        -    if(block.number !== null)
        -        block.number = utils.toDecimal(block.number);
        - 
        -    block.difficulty = utils.toBigNumber(block.difficulty);
        -    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);
        - 
        -    if (utils.isArray(block.transactions)) {
        -        block.transactions.forEach(function(item){
        -            if(!utils.isString(item))
        -                return outputTransactionFormatter(item);
        -        });
        -    }
        - 
        -    return block;
        -};
        - 
        -/**
        - * Formats the input of a log
        - * 
        - * @method inputLogFormatter
        - * @param {Object} log object
        - * @returns {Object} log
        -*/
        -var inputLogFormatter = function(options) {
        -    var toTopic = function(value){
        - 
        -        if(value === null || typeof value === 'undefined')
        -            return null;
        - 
        -        value = String(value);
        - 
        -        Eif(value.indexOf('0x') === 0)
        -            return value;
        -        else
        -            return utils.fromUtf8(value);
        -    };
        - 
        -    // make sure topics, get converted to hex
        -    options.topics = options.topics || [];
        -    options.topics = options.topics.map(function(topic){
        -        return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
        -    });
        - 
        -    toTopic = null;
        - 
        -    Iif(options.address && !utils.isAddress(options.address))
        -        throw new Error('The given address is not valid!');
        - 
        -    return options;
        -};
        - 
        -/**
        - * Formats the output of a log
        - * 
        - * @method outputLogFormatter
        - * @param {Object} log object
        - * @returns {Object} log
        -*/
        -var outputLogFormatter = function(log) {
        -    if(log.blockNumber !== null)
        -        log.blockNumber = utils.toDecimal(log.blockNumber);
        -    if(log.transactionIndex !== null)
        -        log.transactionIndex = utils.toDecimal(log.transactionIndex);
        -    if(log.logIndex !== null)
        -        log.logIndex = utils.toDecimal(log.logIndex);
        - 
        -    return log;
        -};
        - 
        -/**
        - * Formats the input of a whisper post and converts all values to HEX
        - *
        - * @method inputPostFormatter
        - * @param {Object} transaction object
        - * @returns {Object}
        -*/
        -var inputPostFormatter = function(post) {
        - 
        -    // post.payload = utils.toHex(post.payload);
        -    post.ttl = utils.fromDecimal(post.ttl);
        -    post.workToProve = utils.fromDecimal(post.workToProve);
        -    post.priority = utils.fromDecimal(post.priority);
        - 
        -    // fallback
        -    Iif (!utils.isArray(post.topics)) {
        -        post.topics = post.topics ? [post.topics] : [];
        -    }
        - 
        -    // format the following options
        -    post.topics = post.topics.map(function(topic){
        -        // convert only if not hex
        -        return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);
        -    });
        - 
        -    return post; 
        -};
        - 
        -/**
        - * Formats the output of a received post message
        - *
        - * @method outputPostFormatter
        - * @param {Object}
        - * @returns {Object}
        - */
        -var outputPostFormatter = function(post){
        - 
        -    post.expiry = utils.toDecimal(post.expiry);
        -    post.sent = utils.toDecimal(post.sent);
        -    post.ttl = utils.toDecimal(post.ttl);
        -    post.workProved = utils.toDecimal(post.workProved);
        -    // post.payloadRaw = post.payload;
        -    // post.payload = utils.toAscii(post.payload);
        - 
        -    // if (utils.isJson(post.payload)) {
        -    //     post.payload = JSON.parse(post.payload);
        -    // }
        - 
        -    // format the following options
        -    Iif (!post.topics) {
        -        post.topics = [];
        -    }
        -    post.topics = post.topics.map(function(topic){
        -        return utils.toAscii(topic);
        -    });
        - 
        -    return post;
        -};
        - 
        -var inputAddressFormatter = function (address) {
        -    var iban = new Iban(address);
        -    if (iban.isValid() && iban.isDirect()) {
        -        return '0x' + iban.address();
        -    } else if (utils.isStrictAddress(address)) {
        -        return address;
        -    } else if (utils.isAddress(address)) {
        -        return '0x' + address;
        -    }
        -    throw 'invalid address';
        -};
        - 
        - 
        -var outputSyncingFormatter = function(result) {
        - 
        -    result.startingBlock = utils.toDecimal(result.startingBlock);
        -    result.currentBlock = utils.toDecimal(result.currentBlock);
        -    result.highestBlock = utils.toDecimal(result.highestBlock);
        - 
        -    return result;
        -};
        - 
        -module.exports = {
        -    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
        -    inputBlockNumberFormatter: inputBlockNumberFormatter,
        -    inputCallFormatter: inputCallFormatter,
        -    inputTransactionFormatter: inputTransactionFormatter,
        -    inputAddressFormatter: inputAddressFormatter,
        -    inputPostFormatter: inputPostFormatter,
        -    inputLogFormatter: inputLogFormatter,
        -    outputBigNumberFormatter: outputBigNumberFormatter,
        -    outputTransactionFormatter: outputTransactionFormatter,
        -    outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
        -    outputBlockFormatter: outputBlockFormatter,
        -    outputLogFormatter: outputLogFormatter,
        -    outputPostFormatter: outputPostFormatter,
        -    outputSyncingFormatter: outputSyncingFormatter
        -};
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html deleted file mode 100644 index 5f02de8..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/function.js.html +++ /dev/null @@ -1,786 +0,0 @@ - - - - Code coverage report for web3/lib/web3/function.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/function.js

        -

        - Statements: 94.57% (87 / 92)      - Branches: 82.14% (23 / 28)      - Functions: 95% (19 / 20)      - Lines: 94.44% (85 / 90)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » function.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -1 -68 -68 -94 -  -68 -42 -  -68 -68 -68 -  -  -1 -16 -4 -  -  -  -1 -8 -2 -  -  -  -  -  -  -  -  -  -  -1 -16 -16 -9 -  -16 -16 -16 -  -  -  -  -  -  -  -  -1 -16 -  -  -  -1 -9 -  -  -  -9 -9 -9 -  -  -  -  -  -  -  -  -  -  -  -  -1 -14 -8 -8 -8 -  -  -8 -7 -7 -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -1 -16 -5 -5 -  -5 -4 -  -  -1 -  -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -1 -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -1 -68 -  -  -  -  -  -  -  -  -1 -2 -2 -2 -2 -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -1 -9 -  -  -9 -3 -  -  -  -6 -  -  -  -  -  -  -  -  -1 -68 -68 -68 -68 -68 -68 -68 -68 -67 -  -68 -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/**
        - * @file function.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var coder = require('../solidity/coder');
        -var utils = require('../utils/utils');
        -var formatters = require('./formatters');
        -var sha3 = require('../utils/sha3');
        - 
        -/**
        - * This prototype should be used to call/sendTransaction to solidity functions
        - */
        -var SolidityFunction = function (eth, json, address) {
        -    this._eth = eth;
        -    this._inputTypes = json.inputs.map(function (i) {
        -        return i.type;
        -    });
        -    this._outputTypes = json.outputs.map(function (i) {
        -        return i.type;
        -    });
        -    this._constant = json.constant;
        -    this._name = utils.transformToFullName(json);
        -    this._address = address;
        -};
        - 
        -SolidityFunction.prototype.extractCallback = function (args) {
        -    if (utils.isFunction(args[args.length - 1])) {
        -        return args.pop(); // modify the args array!
        -    }
        -};
        - 
        -SolidityFunction.prototype.extractDefaultBlock = function (args) {
        -    if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {
        -        return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!
        -    }
        -};
        - 
        -/**
        - * Should be used to create payload from arguments
        - *
        - * @method toPayload
        - * @param {Array} solidity function params
        - * @param {Object} optional payload options
        - */
        -SolidityFunction.prototype.toPayload = function (args) {
        -    var options = {};
        -    if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {
        -        options = args[args.length - 1];
        -    }
        -    options.to = this._address;
        -    options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);
        -    return options;
        -};
        - 
        -/**
        - * Should be used to get function signature
        - *
        - * @method signature
        - * @return {String} function signature
        - */
        -SolidityFunction.prototype.signature = function () {
        -    return sha3(this._name).slice(0, 8);
        -};
        - 
        - 
        -SolidityFunction.prototype.unpackOutput = function (output) {
        -    Iif (!output) {
        -        return;
        -    }
        - 
        -    output = output.length >= 2 ? output.slice(2) : output;
        -    var result = coder.decodeParams(this._outputTypes, output);
        -    return result.length === 1 ? result[0] : result;
        -};
        - 
        -/**
        - * Calls a contract function.
        - *
        - * @method call
        - * @param {...Object} Contract function arguments
        - * @param {function} If the last argument is a function, the contract function
        - *   call will be asynchronous, and the callback will be passed the
        - *   error and result.
        - * @return {String} output bytes
        - */
        -SolidityFunction.prototype.call = function () {
        -    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
        -    var callback = this.extractCallback(args);
        -    var defaultBlock = this.extractDefaultBlock(args);
        -    var payload = this.toPayload(args);
        - 
        - 
        -    if (!callback) {
        -        var output = this._eth.call(payload, defaultBlock);
        -        return this.unpackOutput(output);
        -    } 
        -        
        -    var self = this;
        -    this._eth.call(payload, defaultBlock, function (error, output) {
        -        callback(error, self.unpackOutput(output));
        -    });
        -};
        - 
        -/**
        - * Should be used to sendTransaction to solidity function
        - *
        - * @method sendTransaction
        - */
        -SolidityFunction.prototype.sendTransaction = function () {
        -    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
        -    var callback = this.extractCallback(args);
        -    var payload = this.toPayload(args);
        - 
        -    if (!callback) {
        -        return this._eth.sendTransaction(payload);
        -    }
        - 
        -    this._eth.sendTransaction(payload, callback);
        -};
        - 
        -/**
        - * Should be used to estimateGas of solidity function
        - *
        - * @method estimateGas
        - */
        -SolidityFunction.prototype.estimateGas = function () {
        -    var args = Array.prototype.slice.call(arguments);
        -    var callback = this.extractCallback(args);
        -    var payload = this.toPayload(args);
        - 
        -    Eif (!callback) {
        -        return this._eth.estimateGas(payload);
        -    }
        - 
        -    this._eth.estimateGas(payload, callback);
        -};
        - 
        -/**
        - * Return the encoded data of the call
        - *
        - * @method getData
        - * @return {String} the encoded data
        - */
        -SolidityFunction.prototype.getData = function () {
        -    var args = Array.prototype.slice.call(arguments);
        -    var payload = this.toPayload(args);
        - 
        -    return payload.data;
        -};
        - 
        -/**
        - * Should be used to get function display name
        - *
        - * @method displayName
        - * @return {String} display name of the function
        - */
        -SolidityFunction.prototype.displayName = function () {
        -    return utils.extractDisplayName(this._name);
        -};
        - 
        -/**
        - * Should be used to get function type name
        - *
        - * @method typeName
        - * @return {String} type name of the function
        - */
        -SolidityFunction.prototype.typeName = function () {
        -    return utils.extractTypeName(this._name);
        -};
        - 
        -/**
        - * Should be called to get rpc requests from solidity function
        - *
        - * @method request
        - * @returns {Object}
        - */
        -SolidityFunction.prototype.request = function () {
        -    var args = Array.prototype.slice.call(arguments);
        -    var callback = this.extractCallback(args);
        -    var payload = this.toPayload(args);
        -    var format = this.unpackOutput.bind(this);
        -    
        -    return {
        -        method: this._constant ? 'eth_call' : 'eth_sendTransaction',
        -        callback: callback,
        -        params: [payload], 
        -        format: format
        -    };
        -};
        - 
        -/**
        - * Should be called to execute function
        - *
        - * @method execute
        - */
        -SolidityFunction.prototype.execute = function () {
        -    var transaction = !this._constant;
        - 
        -    // send transaction
        -    if (transaction) {
        -        return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));
        -    }
        - 
        -    // call
        -    return this.call.apply(this, Array.prototype.slice.call(arguments));
        -};
        - 
        -/**
        - * Should be called to attach function to contract
        - *
        - * @method attachToContract
        - * @param {Contract}
        - */
        -SolidityFunction.prototype.attachToContract = function (contract) {
        -    var execute = this.execute.bind(this);
        -    execute.request = this.request.bind(this);
        -    execute.call = this.call.bind(this);
        -    execute.sendTransaction = this.sendTransaction.bind(this);
        -    execute.estimateGas = this.estimateGas.bind(this);
        -    execute.getData = this.getData.bind(this);
        -    var displayName = this.displayName();
        -    if (!contract[displayName]) {
        -        contract[displayName] = execute;
        -    }
        -    contract[displayName][this.typeName()] = execute; // circular!!!!
        -};
        - 
        -module.exports = SolidityFunction;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html deleted file mode 100644 index ffd76ec..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/httpprovider.js.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - Code coverage report for web3/lib/web3/httpprovider.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/httpprovider.js

        -

        - Statements: 83.72% (36 / 43)      - Branches: 58.33% (7 / 12)      - Functions: 100% (6 / 6)      - Lines: 83.72% (36 / 43)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » httpprovider.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -2 -  -  -2 -  -  -  -2 -  -  -  -  -2 -  -  -  -  -  -2 -3 -  -  -  -  -  -  -  -  -  -2 -3 -3 -3 -3 -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -2 -  -  -  -  -2 -  -2 -2 -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -2 -1 -  -1 -1 -1 -1 -  -1 -1 -  -  -  -  -1 -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -  -2 -1 -1 -  -  -  -  -  -1 -  -  -  -  -  -2 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file httpprovider.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - *   Marian Oancea <marian@ethdev.com>
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -"use strict";
        - 
        -var errors = require('./errors');
        - 
        -// workaround to use httpprovider in different envs
        -var XMLHttpRequest; // jshint ignore: line
        - 
        -// meteor server environment
        -Iif (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line
        -    XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line
        - 
        -// browser
        -} else Iif (typeof window !== 'undefined' && window.XMLHttpRequest) {
        -    XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line
        - 
        -// node
        -} else {
        -    XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line
        -}
        - 
        -/**
        - * HttpProvider should be used to send rpc calls over http
        - */
        -var HttpProvider = function (host) {
        -    this.host = host || 'http://localhost:8545';
        -};
        - 
        -/**
        - * Should be called to prepare new XMLHttpRequest
        - *
        - * @method prepareRequest
        - * @param {Boolean} true if request should be async
        - * @return {XMLHttpRequest} object
        - */
        -HttpProvider.prototype.prepareRequest = function (async) {
        -    var request = new XMLHttpRequest();
        -    request.open('POST', this.host, async);
        -    request.setRequestHeader('Content-Type','application/json');
        -    return request;
        -};
        - 
        -/**
        - * Should be called to make sync request
        - *
        - * @method send
        - * @param {Object} payload
        - * @return {Object} result
        - */
        -HttpProvider.prototype.send = function (payload) {
        -    var request = this.prepareRequest(false);
        - 
        -    try {
        -        request.send(JSON.stringify(payload));
        -    } catch(error) {
        -        throw errors.InvalidConnection(this.host);
        -    }
        - 
        -    var result = request.responseText;
        - 
        -    try {
        -        result = JSON.parse(result);
        -    } catch(e) {
        -        throw errors.InvalidResponse(request.responseText);                
        -    }
        - 
        -    return result;
        -};
        - 
        -/**
        - * Should be used to make async request
        - *
        - * @method sendAsync
        - * @param {Object} payload
        - * @param {Function} callback triggered on end with (err, result)
        - */
        -HttpProvider.prototype.sendAsync = function (payload, callback) {
        -    var request = this.prepareRequest(true); 
        - 
        -    request.onreadystatechange = function() {
        -        Eif (request.readyState === 4) {
        -            var result = request.responseText;
        -            var error = null;
        - 
        -            try {
        -                result = JSON.parse(result);
        -            } catch(e) {
        -                error = errors.InvalidResponse(request.responseText);                
        -            }
        - 
        -            callback(error, result);
        -        }
        -    };
        -    
        -    try {
        -        request.send(JSON.stringify(payload));
        -    } catch(error) {
        -        callback(errors.InvalidConnection(this.host));
        -    }
        -};
        - 
        -/**
        - * Synchronously tries to make Http request
        - *
        - * @method isConnected
        - * @return {Boolean} returns true if request haven't failed. Otherwise false
        - */
        -HttpProvider.prototype.isConnected = function() {
        -    try {
        -        this.send({
        -            id: 9999999999,
        -            jsonrpc: '2.0',
        -            method: 'net_listening',
        -            params: []
        -        });
        -        return true;
        -    } catch(e) {
        -        return false;
        -    }
        -};
        - 
        -module.exports = HttpProvider;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html deleted file mode 100644 index 55b46bb..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/iban.js.html +++ /dev/null @@ -1,726 +0,0 @@ - - - - Code coverage report for web3/lib/web3/iban.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/iban.js

        -

        - Statements: 95% (57 / 60)      - Branches: 78.57% (11 / 14)      - Functions: 88.24% (15 / 17)      - Lines: 95% (57 / 60)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -15 -15 -11 -  -15 -  -  -  -  -  -  -  -  -  -  -1 -21 -21 -  -21 -21 -  -21 -661 -661 -  -450 -  -211 -  -  -  -  -  -  -  -  -  -  -  -1 -21 -  -  -21 -158 -158 -  -  -21 -  -  -  -  -  -  -  -1 -113 -  -  -  -  -  -  -  -  -  -1 -5 -5 -5 -5 -  -  -  -  -  -  -  -  -  -  -  -1 -6 -  -6 -6 -  -6 -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -1 -18 -18 -  -  -  -  -  -  -  -  -1 -99 -  -  -  -  -  -  -  -  -  -1 -19 -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -1 -10 -10 -10 -10 -  -  -  -  -  -1 -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file iban.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var BigNumber = require('bignumber.js');
        - 
        -var padLeft = function (string, bytes) {
        -    var result = string;
        -    while (result.length < bytes * 2) {
        -        result = '00' + result;
        -    }
        -    return result;
        -};
        - 
        -/**
        - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
        - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
        - *
        - * @method iso13616Prepare
        - * @param {String} iban the IBAN
        - * @returns {String} the prepared IBAN
        - */
        -var iso13616Prepare = function (iban) {
        -    var A = 'A'.charCodeAt(0);
        -    var Z = 'Z'.charCodeAt(0);
        - 
        -    iban = iban.toUpperCase();
        -    iban = iban.substr(4) + iban.substr(0,4);
        - 
        -    return iban.split('').map(function(n){
        -        var code = n.charCodeAt(0);
        -        if (code >= A && code <= Z){
        -            // A = 10, B = 11, ... Z = 35
        -            return code - A + 10;
        -        } else {
        -            return n;
        -        }
        -    }).join('');
        -};
        - 
        -/**
        - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.
        - *
        - * @method mod9710
        - * @param {String} iban
        - * @returns {Number}
        - */
        -var mod9710 = function (iban) {
        -    var remainder = iban,
        -        block;
        - 
        -    while (remainder.length > 2){
        -        block = remainder.slice(0, 9);
        -        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
        -    }
        - 
        -    return parseInt(remainder, 10) % 97;
        -};
        - 
        -/**
        - * This prototype should be used to create iban object from iban correct string
        - *
        - * @param {String} iban
        - */
        -var Iban = function (iban) {
        -    this._iban = iban;
        -};
        - 
        -/**
        - * This method should be used to create iban object from ethereum address
        - *
        - * @method fromAddress
        - * @param {String} address
        - * @return {Iban} the IBAN object
        - */
        -Iban.fromAddress = function (address) {
        -    var asBn = new BigNumber(address, 16);
        -    var base36 = asBn.toString(36);
        -    var padded = padLeft(base36, 15);
        -    return Iban.fromBban(padded.toUpperCase());
        -};
        - 
        -/**
        - * Convert the passed BBAN to an IBAN for this country specification.
        - * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
        - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
        - *
        - * @method fromBban
        - * @param {String} bban the BBAN to convert to IBAN
        - * @returns {Iban} the IBAN object
        - */
        -Iban.fromBban = function (bban) {
        -    var countryCode = 'XE';
        - 
        -    var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
        -    var checkDigit = ('0' + (98 - remainder)).slice(-2);
        - 
        -    return new Iban(countryCode + checkDigit + bban);
        -};
        - 
        -/**
        - * Should be used to create IBAN object for given institution and identifier
        - *
        - * @method createIndirect
        - * @param {Object} options, required options are "institution" and "identifier"
        - * @return {Iban} the IBAN object
        - */
        -Iban.createIndirect = function (options) {
        -    return Iban.fromBban('ETH' + options.institution + options.identifier);
        -};
        - 
        -/**
        - * Thos method should be used to check if given string is valid iban object
        - *
        - * @method isValid
        - * @param {String} iban string
        - * @return {Boolean} true if it is valid IBAN
        - */
        -Iban.isValid = function (iban) {
        -    var i = new Iban(iban);
        -    return i.isValid();
        -};
        - 
        -/**
        - * Should be called to check if iban is correct
        - *
        - * @method isValid
        - * @returns {Boolean} true if it is, otherwise false
        - */
        -Iban.prototype.isValid = function () {
        -    return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
        -        mod9710(iso13616Prepare(this._iban)) === 1;
        -};
        - 
        -/**
        - * Should be called to check if iban number is direct
        - *
        - * @method isDirect
        - * @returns {Boolean} true if it is, otherwise false
        - */
        -Iban.prototype.isDirect = function () {
        -    return this._iban.length === 34 || this._iban.length === 35;
        -};
        - 
        -/**
        - * Should be called to check if iban number if indirect
        - *
        - * @method isIndirect
        - * @returns {Boolean} true if it is, otherwise false
        - */
        -Iban.prototype.isIndirect = function () {
        -    return this._iban.length === 20;
        -};
        - 
        -/**
        - * Should be called to get iban checksum
        - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
        - *
        - * @method checksum
        - * @returns {String} checksum
        - */
        -Iban.prototype.checksum = function () {
        -    return this._iban.substr(2, 2);
        -};
        - 
        -/**
        - * Should be called to get institution identifier
        - * eg. XREG
        - *
        - * @method institution
        - * @returns {String} institution identifier
        - */
        -Iban.prototype.institution = function () {
        -    return this.isIndirect() ? this._iban.substr(7, 4) : '';
        -};
        - 
        -/**
        - * Should be called to get client identifier within institution
        - * eg. GAVOFYORK
        - *
        - * @method client
        - * @returns {String} client identifier
        - */
        -Iban.prototype.client = function () {
        -    return this.isIndirect() ? this._iban.substr(11) : '';
        -};
        - 
        -/**
        - * Should be called to get client direct address
        - *
        - * @method address
        - * @returns {String} client direct address
        - */
        -Iban.prototype.address = function () {
        -    Eif (this.isDirect()) {
        -        var base36 = this._iban.substr(4);
        -        var asBn = new BigNumber(base36, 36);
        -        return padLeft(asBn.toString(16), 20);
        -    } 
        - 
        -    return '';
        -};
        - 
        -Iban.prototype.toString = function () {
        -    return this._iban;
        -};
        - 
        -module.exports = Iban;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html deleted file mode 100644 index 1820b72..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/index.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - Code coverage report for web3/lib/web3/ - - - - - - -
        -

        Code coverage report for web3/lib/web3/

        -

        - Statements: 85.02% (840 / 988)      - Branches: 67.4% (275 / 408)      - Functions: 86.7% (189 / 218)      - Lines: 84.97% (837 / 985)      - Ignored: none      -

        -
        All files » web3/lib/web3/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        batch.js100%(18 / 18)60%(6 / 10)100%(6 / 6)100%(18 / 18)
        contract.js59.6%(59 / 99)23.81%(10 / 42)77.27%(17 / 22)59.6%(59 / 99)
        errors.js83.33%(5 / 6)100%(5 / 5)75%(3 / 4)83.33%(5 / 6)
        event.js91.51%(97 / 106)83.33%(35 / 42)90.91%(20 / 22)91.43%(96 / 105)
        extend.js100%(26 / 26)87.5%(7 / 8)100%(4 / 4)100%(26 / 26)
        formatters.js92.97%(119 / 128)80.28%(57 / 71)96%(24 / 25)92.97%(119 / 128)
        function.js94.57%(87 / 92)82.14%(23 / 28)95%(19 / 20)94.44%(85 / 90)
        httpprovider.js83.72%(36 / 43)58.33%(7 / 12)100%(6 / 6)83.72%(36 / 43)
        iban.js95%(57 / 60)78.57%(11 / 14)88.24%(15 / 17)95%(57 / 60)
        ipcprovider.js58.41%(66 / 113)35%(14 / 40)45.45%(10 / 22)58.41%(66 / 113)
        jsonrpc.js94.74%(18 / 19)90.91%(10 / 11)100%(6 / 6)94.74%(18 / 19)
        method.js100%(59 / 59)100%(28 / 28)100%(15 / 15)100%(59 / 59)
        namereg.js100%(5 / 5)100%(0 / 0)100%(0 / 0)100%(5 / 5)
        property.js97.78%(44 / 45)66.67%(8 / 12)92.31%(12 / 13)97.78%(44 / 45)
        requestmanager.js86.15%(56 / 65)65.79%(25 / 38)100%(13 / 13)86.15%(56 / 65)
        settings.js100%(4 / 4)100%(0 / 0)100%(1 / 1)100%(4 / 4)
        subscription.js83.93%(47 / 56)68.57%(24 / 35)84.62%(11 / 13)83.93%(47 / 56)
        subscriptions.js92%(23 / 25)33.33%(2 / 6)100%(5 / 5)92%(23 / 25)
        transfer.js73.68%(14 / 19)50%(3 / 6)50%(2 / 4)73.68%(14 / 19)
        -
        -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html deleted file mode 100644 index 201deb6..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/ipcprovider.js.html +++ /dev/null @@ -1,972 +0,0 @@ - - - - Code coverage report for web3/lib/web3/ipcprovider.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/ipcprovider.js

        -

        - Statements: 58.41% (66 / 113)      - Branches: 35% (14 / 40)      - Functions: 45.45% (10 / 22)      - Lines: 58.41% (66 / 113)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » ipcprovider.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -  -2 -5 -5 -5 -5 -  -5 -  -5 -  -  -  -5 -  -  -2 -  -2 -  -  -2 -  -  -  -  -  -2 -  -  -  -2 -  -  -  -  -  -  -2 -1 -1 -  -  -  -  -  -  -  -  -  -  -2 -5 -  -5 -  -  -  -5 -  -  -  -5 -  -  -  -  -  -  -  -  -  -  -2 -2 -  -  -  -2 -  -  -  -  -  -  -2 -  -  -2 -  -  -2 -  -2 -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -2 -  -2 -2 -  -  -2 -  -  -  -  -  -  -  -  -  -2 -1 -1 -  -1 -1 -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -3 -  -  -3 -2 -  -3 -  -  -2 -  -1 -1 -  -  -1 -1 -  -1 -  -1 -1 -  -  -  -  -1 -  -  -  -  -  -  -2 -  -1 -1 -  -  -1 -1 -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2 -  -  -  -  -  -  -  -  -  -2 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file ipcprovider.js
        - * @authors:
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -"use strict";
        - 
        -var utils = require('../utils/utils');
        -var errors = require('./errors');
        - 
        - 
        -var IpcProvider = function (path, net) {
        -    var _this = this;
        -    this.responseCallbacks = {};
        -    this.notificationCallbacks = [];
        -    this.path = path;
        -    
        -    this.connection = net.connect({path: this.path});
        - 
        -    this.addDefaultEvents();
        - 
        - 
        -    // LISTEN FOR CONNECTION RESPONSES
        -    this.connection.on('data', function(data) {
        -        /*jshint maxcomplexity: 6 */
        - 
        -        _this._parseResponse(data.toString()).forEach(function(result){
        - 
        -            var id = null;
        - 
        -            // get the id which matches the returned id
        -            Iif(utils.isArray(result)) {
        -                result.forEach(function(load){
        -                    if(_this.responseCallbacks[load.id])
        -                        id = load.id;
        -                });
        -            } else {
        -                id = result.id;
        -            }
        - 
        -            // notification
        -            Iif(!id && result.method === 'eth_subscription') {
        -                _this.notificationCallbacks.forEach(function(callback){
        -                    if(utils.isFunction(callback))
        -                        callback(null, result);
        -                });
        - 
        -            // fire the callback
        -            } else if(_this.responseCallbacks[id]) {
        -                _this.responseCallbacks[id](null, result);
        -                delete _this.responseCallbacks[id];
        -            }
        -        });
        -    });
        -};
        - 
        -/**
        -Will add the error and end event to timeout existing calls
        - 
        -@method addDefaultEvents
        -*/
        -IpcProvider.prototype.addDefaultEvents = function(){
        -    var _this = this;
        - 
        -    this.connection.on('error', function(e){
        -        _this._timeout();
        -    });
        - 
        -    this.connection.on('end', function(){
        -        _this._timeout();
        -    });
        - 
        -    this.connection.on('timeout', function(){
        -        _this._timeout();
        -    }); 
        -};
        - 
        -/**
        -Will parse the response and make an array out of it.
        - 
        -@method _parseResponse
        -@param {String} data
        -*/
        -IpcProvider.prototype._parseResponse = function(data) {
        -    var _this = this,
        -        returnValues = [];
        -    
        -    // DE-CHUNKER
        -    var dechunkedData = data
        -        .replace(/\}\{/g,'}|--|{') // }{
        -        .replace(/\}\]\[\{/g,'}]|--|[{') // }][{
        -        .replace(/\}\[\{/g,'}|--|[{') // }[{
        -        .replace(/\}\]\{/g,'}]|--|{') // }]{
        -        .split('|--|');
        - 
        -    dechunkedData.forEach(function(data){
        - 
        -        // prepend the last chunk
        -        Iif(_this.lastChunk)
        -            data = _this.lastChunk + data;
        - 
        -        var result = null;
        - 
        -        try {
        -            result = JSON.parse(data);
        - 
        -        } catch(e) {
        - 
        -            _this.lastChunk = data;
        - 
        -            // start timeout to cancel all requests
        -            clearTimeout(_this.lastChunkTimeout);
        -            _this.lastChunkTimeout = setTimeout(function(){
        -                _this.timeout();
        -                throw errors.InvalidResponse(data);
        -            }, 1000 * 15);
        - 
        -            return;
        -        }
        - 
        -        // cancel timeout and set chunk to null
        -        clearTimeout(_this.lastChunkTimeout);
        -        _this.lastChunk = null;
        - 
        -        Eif(result)
        -            returnValues.push(result);
        -    });
        - 
        -    return returnValues;
        -};
        - 
        - 
        -/**
        -Get the adds a callback to the responseCallbacks object,
        -which will be called if a response matching the response Id will arrive.
        - 
        -@method _addResponseCallback
        -*/
        -IpcProvider.prototype._addResponseCallback = function(payload, callback) {
        -    var id = payload.id || payload[0].id;
        -    var method = payload.method || payload[0].method;
        - 
        -    this.responseCallbacks[id] = callback;
        -    this.responseCallbacks[id].method = method;
        -};
        - 
        -/**
        -Timeout all requests when the end/error event is fired
        - 
        -@method _timeout
        -*/
        -IpcProvider.prototype._timeout = function() {
        -    for(var key in this.responseCallbacks) {
        -        if(this.responseCallbacks.hasOwnProperty(key)){
        -            this.responseCallbacks[key](errors.InvalidConnection('on IPC'));
        -            delete this.responseCallbacks[key];
        -        }
        -    }
        -};
        - 
        - 
        -/**
        -Check if the current connection is still valid.
        - 
        -@method isConnected
        -*/
        -IpcProvider.prototype.isConnected = function() {
        -    var _this = this;
        - 
        -    // try reconnect, when connection is gone
        -    if(!_this.connection.writable)
        -        _this.connection.connect({path: _this.path});
        - 
        -    return !!this.connection.writable;
        -};
        - 
        -IpcProvider.prototype.send = function (payload) {
        - 
        -    Eif(this.connection.writeSync) {
        -        var result;
        - 
        -        // try reconnect, when connection is gone
        -        Eif(!this.connection.writable)
        -            this.connection.connect({path: this.path});
        - 
        -        var data = this.connection.writeSync(JSON.stringify(payload));
        - 
        -        try {
        -            result = JSON.parse(data);
        -        } catch(e) {
        -            throw errors.InvalidResponse(data);                
        -        }
        - 
        -        return result;
        - 
        -    } else {
        -        throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.');
        -    }
        -};
        - 
        -IpcProvider.prototype.sendAsync = function (payload, callback) {
        -    // try reconnect, when connection is gone
        -    Eif(!this.connection.writable)
        -        this.connection.connect({path: this.path});
        - 
        - 
        -    this.connection.write(JSON.stringify(payload));
        -    this._addResponseCallback(payload, callback);
        -};
        - 
        -/**
        -Subscribes to provider events.provider
        - 
        -@method on
        -@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
        -@param {Function} callback   the callback to call
        -*/
        -IpcProvider.prototype.on = function (type, callback) {
        - 
        -    if(typeof callback !== 'function')
        -        throw new Error('The second parameter callback must be a function.');
        - 
        -    switch(type){
        -        case 'notification':
        -            this.notificationCallbacks.push(callback);
        -            break;
        - 
        -        default:
        -            this.connection.on(type, callback);
        -            break;
        -    }
        -};
        - 
        -/**
        -Removes event listener
        - 
        -@method removeListener
        -@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
        -@param {Function} callback   the callback to call
        -*/
        -IpcProvider.prototype.removeListener = function (type, callback) {
        -    var _this = this;
        - 
        -    switch(type){
        -        case 'notification':
        -            this.notificationCallbacks.forEach(function(cb, index){
        -                if(cb === callback)
        -                    _this.notificationCallbacks.splice(index, 1);
        -            });
        -            break;
        - 
        -        default:
        -            this.connection.removeListener(type, callback);
        -            break;
        -    }
        -};
        - 
        -/**
        -Removes all event listeners
        - 
        -@method removeAllListeners
        -@param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
        -*/
        -IpcProvider.prototype.removeAllListeners = function (type) {
        -    switch(type){
        -        case 'notification':
        -            this.notificationCallbacks = [];
        -            break;
        - 
        -        default:
        -            this.connection.removeAllListeners(type);
        -            break;
        -    }
        -};
        - 
        -/**
        -Resetes the providers, clears all callbacks
        - 
        -@method reset
        -*/
        -IpcProvider.prototype.reset = function (callback) {
        -    this._timeout();
        -    this.notificationCallbacks = [];
        - 
        -    this.connection.removeAllListeners('error');
        -    this.connection.removeAllListeners('end');
        - 
        -    this.addDefaultEvents();
        -};
        - 
        -module.exports = IpcProvider;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html deleted file mode 100644 index cc2cedf..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/jsonrpc.js.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - Code coverage report for web3/lib/web3/jsonrpc.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/jsonrpc.js

        -

        - Statements: 94.74% (18 / 19)      - Branches: 90.91% (10 / 11)      - Functions: 100% (6 / 6)      - Lines: 94.74% (18 / 19)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » jsonrpc.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -301 -300 -  -1 -  -1 -  -  -  -  -  -1 -298 -298 -  -  -  -  -  -  -  -  -  -  -1 -158 -  -  -158 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -157 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -6 -6 -10 -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file jsonrpc.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Jsonrpc = function () {
        -    // singleton pattern
        -    if (arguments.callee._singletonInstance) {
        -        return arguments.callee._singletonInstance;
        -    }
        -    arguments.callee._singletonInstance = this;
        - 
        -    this.messageId = 1;
        -};
        - 
        -/**
        - * @return {Jsonrpc} singleton
        - */
        -Jsonrpc.getInstance = function () {
        -    var instance = new Jsonrpc();
        -    return instance;
        -};
        - 
        -/**
        - * Should be called to valid json create payload object
        - *
        - * @method toPayload
        - * @param {Function} method of jsonrpc call, required
        - * @param {Array} params, an array of method params, optional
        - * @returns {Object} valid jsonrpc payload object
        - */
        -Jsonrpc.prototype.toPayload = function (method, params) {
        -    Iif (!method)
        -        console.error('jsonrpc method should be specified!');
        - 
        -    return {
        -        jsonrpc: '2.0',
        -        method: method,
        -        params: params || [],
        -        id: this.messageId++
        -    };
        -};
        - 
        -/**
        - * Should be called to check if jsonrpc response is valid
        - *
        - * @method isValidResponse
        - * @param {Object}
        - * @returns {Boolean} true if response is valid, otherwise false
        - */
        -Jsonrpc.prototype.isValidResponse = function (response) {
        -    return !!response &&
        -        !response.error &&
        -        response.jsonrpc === '2.0' &&
        -        typeof response.id === 'number' &&
        -        response.result !== undefined; // only undefined is not valid json object
        -};
        - 
        -/**
        - * Should be called to create batch payload object
        - *
        - * @method toBatchPayload
        - * @param {Array} messages, an array of objects with method (required) and params (optional) fields
        - * @returns {Array} batch payload
        - */
        -Jsonrpc.prototype.toBatchPayload = function (messages) {
        -    var self = this;
        -    return messages.map(function (message) {
        -        return self.toPayload(message.method, message.params);
        -    });
        -};
        - 
        -module.exports = Jsonrpc;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html deleted file mode 100644 index 5f797d4..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/method.js.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - Code coverage report for web3/lib/web3/method.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/method.js

        -

        - Statements: 100% (59 / 59)      - Branches: 100% (28 / 28)      - Functions: 100% (15 / 15)      - Lines: 100% (59 / 59)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » method.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -5096 -5096 -5096 -5096 -5096 -5096 -  -  -1 -4930 -  -  -  -  -  -  -  -  -  -1 -117 -  -  -  -  -  -  -  -  -  -1 -116 -57 -  -  -  -  -  -  -  -  -  -  -1 -117 -2 -  -  -  -  -  -  -  -  -  -  -1 -115 -23 -  -  -92 -166 -  -  -  -  -  -  -  -  -  -  -1 -115 -  -115 -6 -10 -  -  -109 -  -  -  -  -  -  -  -  -  -  -1 -113 -113 -113 -113 -  -113 -  -  -  -  -  -  -1 -4930 -4930 -4930 -4930 -462 -462 -  -4468 -  -  -  -1 -4930 -4930 -109 -109 -51 -51 -  -  -58 -  -4930 -4930 -  -  -  -  -  -  -  -  -  -1 -4 -4 -4 -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/**
        - * @file method.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        -var errors = require('./errors');
        - 
        -var Method = function (options) {
        -    this.name = options.name;
        -    this.call = options.call;
        -    this.params = options.params || 0;
        -    this.inputFormatter = options.inputFormatter;
        -    this.outputFormatter = options.outputFormatter;
        -    this.requestManager = null;
        -};
        - 
        -Method.prototype.setRequestManager = function (rm) {
        -    this.requestManager = rm;
        -};
        - 
        -/**
        - * Should be used to determine name of the jsonrpc method based on arguments
        - *
        - * @method getCall
        - * @param {Array} arguments
        - * @return {String} name of jsonrpc method
        - */
        -Method.prototype.getCall = function (args) {
        -    return utils.isFunction(this.call) ? this.call(args) : this.call;
        -};
        - 
        -/**
        - * Should be used to extract callback from array of arguments. Modifies input param
        - *
        - * @method extractCallback
        - * @param {Array} arguments
        - * @return {Function|Null} callback, if exists
        - */
        -Method.prototype.extractCallback = function (args) {
        -    if (utils.isFunction(args[args.length - 1])) {
        -        return args.pop(); // modify the args array!
        -    }
        -};
        - 
        -/**
        - * Should be called to check if the number of arguments is correct
        - * 
        - * @method validateArgs
        - * @param {Array} arguments
        - * @throws {Error} if it is not
        - */
        -Method.prototype.validateArgs = function (args) {
        -    if (args.length !== this.params) {
        -        throw errors.InvalidNumberOfParams();
        -    }
        -};
        - 
        -/**
        - * Should be called to format input args of method
        - * 
        - * @method formatInput
        - * @param {Array}
        - * @return {Array}
        - */
        -Method.prototype.formatInput = function (args) {
        -    if (!this.inputFormatter) {
        -        return args;
        -    }
        - 
        -    return this.inputFormatter.map(function (formatter, index) {
        -        return formatter ? formatter(args[index]) : args[index];
        -    });
        -};
        - 
        -/**
        - * Should be called to format output(result) of method
        - *
        - * @method formatOutput
        - * @param {Object}
        - * @return {Object}
        - */
        -Method.prototype.formatOutput = function (result) {
        -    var _this = this;
        - 
        -    if(utils.isArray(result)) {
        -        return result.map(function(res){
        -            return _this.outputFormatter && res ? _this.outputFormatter(res) : res;
        -        });
        -    } else {
        -        return this.outputFormatter && result ? this.outputFormatter(result) : result;
        -    }
        -};
        - 
        -/**
        - * Should create payload from given input args
        - *
        - * @method toPayload
        - * @param {Array} args
        - * @return {Object}
        - */
        -Method.prototype.toPayload = function (args) {
        -    var call = this.getCall(args);
        -    var callback = this.extractCallback(args);
        -    var params = this.formatInput(args);
        -    this.validateArgs(params);
        - 
        -    return {
        -        method: call,
        -        params: params,
        -        callback: callback
        -    };
        -};
        - 
        -Method.prototype.attachToObject = function (obj) {
        -    var func = this.buildCall();
        -    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
        -    var name = this.name.split('.');
        -    if (name.length > 1) {
        -        obj[name[0]] = obj[name[0]] || {};
        -        obj[name[0]][name[1]] = func;
        -    } else {
        -        obj[name[0]] = func; 
        -    }
        -};
        - 
        -Method.prototype.buildCall = function() {
        -    var method = this;
        -    var send = function () {
        -        var payload = method.toPayload(Array.prototype.slice.call(arguments));
        -        if (payload.callback) {
        -            return method.requestManager.sendAsync(payload, function (err, result) {
        -                payload.callback(err, method.formatOutput(result));
        -            });
        -        }
        -        return method.formatOutput(method.requestManager.send(payload));
        -    };
        -    send.request = this.request.bind(this);
        -    return send;
        -};
        - 
        -/**
        - * Should be called to create pure JSONRPC request which can be used in batch request
        - *
        - * @method request
        - * @param {...} params
        - * @return {Object} jsonrpc request
        - */
        -Method.prototype.request = function () {
        -    var payload = this.toPayload(Array.prototype.slice.call(arguments));
        -    payload.format = this.formatOutput.bind(this);
        -    return payload;
        -};
        - 
        -module.exports = Method;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html deleted file mode 100644 index f43388b..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/db.js.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/db.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/methods/db.js

        -

        - Statements: 100% (14 / 14)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (14 / 14)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -154 -  -154 -  -154 -616 -616 -  -  -  -1 -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -1 - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file db.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Method = require('../method');
        - 
        -var DB = function (web3) {
        -    this._requestManager = web3._requestManager;
        - 
        -    var self = this;
        -    
        -    methods().forEach(function(method) { 
        -        method.attachToObject(self);
        -        method.setRequestManager(web3._requestManager);
        -    });
        -};
        - 
        -var methods = function () {
        -    var putString = new Method({
        -        name: 'putString',
        -        call: 'db_putString',
        -        params: 3
        -    });
        - 
        -    var getString = new Method({
        -        name: 'getString',
        -        call: 'db_getString',
        -        params: 2
        -    });
        - 
        -    var putHex = new Method({
        -        name: 'putHex',
        -        call: 'db_putHex',
        -        params: 3
        -    });
        - 
        -    var getHex = new Method({
        -        name: 'getHex',
        -        call: 'db_getHex',
        -        params: 2
        -    });
        - 
        -    return [
        -        putString, getString, putHex, getHex
        -    ];
        -};
        - 
        -module.exports = DB;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html deleted file mode 100644 index acd7623..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/eth.js.html +++ /dev/null @@ -1,1161 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/eth.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/methods/eth.js

        -

        - Statements: 92.11% (70 / 76)      - Branches: 100% (20 / 20)      - Functions: 77.78% (14 / 18)      - Lines: 92.11% (70 / 76)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -1 -6 -  -  -1 -4 -  -  -1 -6 -  -  -1 -6 -  -  -1 -6 -  -  -1 -154 -  -154 -  -154 -3696 -3696 -  -  -154 -1078 -1078 -  -  -  -154 -154 -  -  -1 -  -5 -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -1 -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -6 -  -  -  -154 -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -27 -27 -  -  -1 -  -  -  -1 -2 -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/**
        - * @file eth.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @author Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -"use strict";
        - 
        -var formatters = require('../formatters');
        -var utils = require('../../utils/utils');
        -var c = require('../../utils/config');
        -var Method = require('../method');
        -var Property = require('../property');
        -var Subscriptions = require('../subscriptions');
        -var Contract = require('../contract');
        -var namereg = require('../namereg');
        -var Iban = require('../iban');
        -var transfer = require('../transfer');
        - 
        -var blockCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
        -};
        - 
        -var transactionFromBlockCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
        -};
        - 
        -var uncleCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
        -};
        - 
        -var getBlockTransactionCountCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
        -};
        - 
        -var uncleCountCall = function (args) {
        -    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
        -};
        - 
        -function Eth(web3) {
        -    this._requestManager = web3._requestManager;
        - 
        -    var self = this;
        - 
        -    methods().forEach(function(method) { 
        -        method.attachToObject(self);
        -        method.setRequestManager(self._requestManager);
        -    });
        - 
        -    properties().forEach(function(p) { 
        -        p.attachToObject(self);
        -        p.setRequestManager(self._requestManager);
        -    });
        - 
        - 
        -    this.iban = Iban;
        -    this.sendIBANTransaction = transfer.bind(null, this);
        -}
        - 
        -Object.defineProperty(Eth.prototype, 'defaultBlock', {
        -    get: function () {
        -        return c.defaultBlock;
        -    },
        -    set: function (val) {
        -        c.defaultBlock = val;
        -        return val;
        -    }
        -});
        - 
        -Object.defineProperty(Eth.prototype, 'defaultAccount', {
        -    get: function () {
        -        return c.defaultAccount;
        -    },
        -    set: function (val) {
        -        c.defaultAccount = val;
        -        return val;
        -    }
        -});
        - 
        -var methods = function () {
        -    var getBalance = new Method({
        -        name: 'getBalance',
        -        call: 'eth_getBalance',
        -        params: 2,
        -        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],
        -        outputFormatter: formatters.outputBigNumberFormatter
        -    });
        - 
        -    var getStorageAt = new Method({
        -        name: 'getStorageAt',
        -        call: 'eth_getStorageAt',
        -        params: 3,
        -        inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
        -    });
        - 
        -    var getCode = new Method({
        -        name: 'getCode',
        -        call: 'eth_getCode',
        -        params: 2,
        -        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
        -    });
        - 
        -    var getBlock = new Method({
        -        name: 'getBlock',
        -        call: blockCall,
        -        params: 2,
        -        inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],
        -        outputFormatter: formatters.outputBlockFormatter
        -    });
        - 
        -    var getUncle = new Method({
        -        name: 'getUncle',
        -        call: uncleCall,
        -        params: 2,
        -        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
        -        outputFormatter: formatters.outputBlockFormatter,
        - 
        -    });
        - 
        -    var getBlockTransactionCount = new Method({
        -        name: 'getBlockTransactionCount',
        -        call: getBlockTransactionCountCall,
        -        params: 1,
        -        inputFormatter: [formatters.inputBlockNumberFormatter],
        -        outputFormatter: utils.toDecimal
        -    });
        - 
        -    var getBlockUncleCount = new Method({
        -        name: 'getBlockUncleCount',
        -        call: uncleCountCall,
        -        params: 1,
        -        inputFormatter: [formatters.inputBlockNumberFormatter],
        -        outputFormatter: utils.toDecimal
        -    });
        - 
        -    var getTransaction = new Method({
        -        name: 'getTransaction',
        -        call: 'eth_getTransactionByHash',
        -        params: 1,
        -        outputFormatter: formatters.outputTransactionFormatter
        -    });
        - 
        -    var getTransactionFromBlock = new Method({
        -        name: 'getTransactionFromBlock',
        -        call: transactionFromBlockCall,
        -        params: 2,
        -        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
        -        outputFormatter: formatters.outputTransactionFormatter
        -    });
        - 
        -    var getTransactionReceipt = new Method({
        -        name: 'getTransactionReceipt',
        -        call: 'eth_getTransactionReceipt',
        -        params: 1,
        -        outputFormatter: formatters.outputTransactionReceiptFormatter
        -    });
        - 
        -    var getTransactionCount = new Method({
        -        name: 'getTransactionCount',
        -        call: 'eth_getTransactionCount',
        -        params: 2,
        -        inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
        -        outputFormatter: utils.toDecimal
        -    });
        - 
        -    var sendRawTransaction = new Method({
        -        name: 'sendRawTransaction',
        -        call: 'eth_sendRawTransaction',
        -        params: 1,
        -        inputFormatter: [null]
        -    });
        - 
        -    var sendTransaction = new Method({
        -        name: 'sendTransaction',
        -        call: 'eth_sendTransaction',
        -        params: 1,
        -        inputFormatter: [formatters.inputTransactionFormatter]
        -    });
        - 
        -    var sign = new Method({
        -        name: 'sign',
        -        call: 'eth_sign',
        -        params: 2,
        -        inputFormatter: [formatters.inputAddressFormatter, null]
        -    });
        - 
        -    var call = new Method({
        -        name: 'call',
        -        call: 'eth_call',
        -        params: 2,
        -        inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
        -    });
        - 
        -    var estimateGas = new Method({
        -        name: 'estimateGas',
        -        call: 'eth_estimateGas',
        -        params: 1,
        -        inputFormatter: [formatters.inputCallFormatter],
        -        outputFormatter: utils.toDecimal
        -    });
        - 
        -    var getCompilers = new Method({
        -        name: 'getCompilers',
        -        call: 'eth_getCompilers',
        -        params: 0
        -    });
        - 
        -    var compileSolidity = new Method({
        -        name: 'compile.solidity',
        -        call: 'eth_compileSolidity',
        -        params: 1
        -    });
        - 
        -    var compileLLL = new Method({
        -        name: 'compile.lll',
        -        call: 'eth_compileLLL',
        -        params: 1
        -    });
        - 
        -    var compileSerpent = new Method({
        -        name: 'compile.serpent',
        -        call: 'eth_compileSerpent',
        -        params: 1
        -    });
        - 
        -    var submitWork = new Method({
        -        name: 'submitWork',
        -        call: 'eth_submitWork',
        -        params: 3
        -    });
        - 
        -    var getWork = new Method({
        -        name: 'getWork',
        -        call: 'eth_getWork',
        -        params: 0
        -    });
        - 
        -    var getPastLogs = new Method({
        -        name: 'getPastLogs',
        -        call: 'eth_getLogs',
        -        params: 1,
        -        inputFormatter: [formatters.inputLogFormatter],
        -        outputFormatter: formatters.outputLogFormatter
        -    });
        - 
        - 
        -    // subscriptions
        -    var subscribe = new Subscriptions({
        -        name: 'subscribe',
        -        subscribe: 'eth_subscribe',
        -        unsubscribe: 'eth_unsubscribe',
        -        subscriptions: {
        -            'newBlocks': {
        -                params: 1,
        -                outputFormatter: formatters.outputBlockFormatter
        -            },
        -            'pendingTransactions': {
        -                params: 0,
        -                outputFormatter: formatters.outputTransactionFormatter
        -            },
        -            'logs': {
        -                params: 1,
        -                inputFormatter: [formatters.inputLogFormatter],
        -                outputFormatter: formatters.outputLogFormatter
        -            },
        -            'syncing': {
        -                params: 0,
        -                outputFormatter: formatters.outputSyncingFormatter
        -            }
        -        }
        -    });
        - 
        - 
        -    return [
        -        getBalance,
        -        getStorageAt,
        -        getCode,
        -        getBlock,
        -        getUncle,
        -        getCompilers,
        -        getBlockTransactionCount,
        -        getBlockUncleCount,
        -        getTransaction,
        -        getTransactionFromBlock,
        -        getTransactionReceipt,
        -        getTransactionCount,
        -        call,
        -        estimateGas,
        -        sendRawTransaction,
        -        sendTransaction,
        -        sign,
        -        compileSolidity,
        -        compileLLL,
        -        compileSerpent,
        -        submitWork,
        -        getWork,
        -        subscribe,
        -        getPastLogs
        -    ];
        -};
        - 
        - 
        -var properties = function () {
        -    return [
        -        new Property({
        -            name: 'coinbase',
        -            getter: 'eth_coinbase'
        -        }),
        -        new Property({
        -            name: 'mining',
        -            getter: 'eth_mining'
        -        }),
        -        new Property({
        -            name: 'hashrate',
        -            getter: 'eth_hashrate',
        -            outputFormatter: utils.toDecimal
        -        }),
        -        new Property({
        -            name: 'syncing',
        -            getter: 'eth_syncing',
        -            outputFormatter: formatters.outputSyncingFormatter
        -        }),
        -        new Property({
        -            name: 'gasPrice',
        -            getter: 'eth_gasPrice',
        -            outputFormatter: formatters.outputBigNumberFormatter
        -        }),
        -        new Property({
        -            name: 'accounts',
        -            getter: 'eth_accounts'
        -        }),
        -        new Property({
        -            name: 'blockNumber',
        -            getter: 'eth_blockNumber',
        -            outputFormatter: utils.toDecimal
        -        })
        -    ];
        -};
        - 
        -Eth.prototype.contract = function (abi) {
        -    var factory = new Contract(this, abi);
        -    return factory;
        -};
        - 
        -Eth.prototype.namereg = function () {
        -    return this.contract(namereg.global.abi).at(namereg.global.address);
        -};
        - 
        -Eth.prototype.icapNamereg = function () {
        -    return this.contract(namereg.icap.abi).at(namereg.icap.address);
        -};
        - 
        - 
        -module.exports = Eth;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html deleted file mode 100644 index 3201ad8..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/ - - - - - - -
        -

        Code coverage report for web3/lib/web3/methods/

        -

        - Statements: 95% (114 / 120)      - Branches: 100% (20 / 20)      - Functions: 85.19% (23 / 27)      - Lines: 95% (114 / 120)      - Ignored: none      -

        -
        All files » web3/lib/web3/methods/
        -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FileStatementsBranchesFunctionsLines
        db.js100%(14 / 14)100%(0 / 0)100%(3 / 3)100%(14 / 14)
        eth.js92.11%(70 / 76)100%(20 / 20)77.78%(14 / 18)92.11%(70 / 76)
        net.js100%(11 / 11)100%(0 / 0)100%(3 / 3)100%(11 / 11)
        shh.js100%(19 / 19)100%(0 / 0)100%(3 / 3)100%(19 / 19)
        -
        -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html deleted file mode 100644 index ae675fe..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/net.js.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/net.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/methods/net.js

        -

        - Statements: 100% (11 / 11)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (11 / 11)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -154 -  -154 -  -154 -308 -308 -  -  -  -  -1 -154 -  -  -  -  -  -  -  -  -  -  -  -  -1 - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file eth.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../../utils/utils');
        -var Property = require('../property');
        - 
        -var Net = function (web3) {
        -    this._requestManager = web3._requestManager;
        - 
        -    var self = this;
        - 
        -    properties().forEach(function(p) { 
        -        p.attachToObject(self);
        -        p.setRequestManager(web3._requestManager);
        -    });
        -};
        - 
        -/// @returns an array of objects describing web3.eth api properties
        -var properties = function () {
        -    return [
        -        new Property({
        -            name: 'listening',
        -            getter: 'net_listening'
        -        }),
        -        new Property({
        -            name: 'peerCount',
        -            getter: 'net_peerCount',
        -            outputFormatter: utils.toDecimal
        -        })
        -    ];
        -};
        - 
        -module.exports = Net;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html deleted file mode 100644 index 39cae5c..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/shh.js.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/shh.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/methods/shh.js

        -

        - Statements: 100% (19 / 19)      - Branches: 100% (0 / 0)      - Functions: 100% (3 / 3)      - Lines: 100% (19 / 19)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -1 -154 -  -154 -  -154 -924 -924 -  -  -  -  -1 -  -154 -  -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -  -  -  -154 -  -  -  -  -  -  -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file shh.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Method = require('../method');
        -var formatters = require('../formatters');
        -var Subscriptions = require('../subscriptions');
        - 
        - 
        -var Shh = function (web3) {
        -    this._requestManager = web3._requestManager;
        - 
        -    var self = this;
        - 
        -    methods().forEach(function(method) { 
        -        method.attachToObject(self);
        -        method.setRequestManager(self._requestManager);
        -    });
        -};
        - 
        - 
        -var methods = function () { 
        - 
        -    var post = new Method({
        -        name: 'post', 
        -        call: 'shh_post', 
        -        params: 1,
        -        inputFormatter: [formatters.inputPostFormatter]
        -    });
        - 
        -    var newIdentity = new Method({
        -        name: 'newIdentity',
        -        call: 'shh_newIdentity',
        -        params: 0
        -    });
        - 
        -    var hasIdentity = new Method({
        -        name: 'hasIdentity',
        -        call: 'shh_hasIdentity',
        -        params: 1
        -    });
        - 
        -    var newGroup = new Method({
        -        name: 'newGroup',
        -        call: 'shh_newGroup',
        -        params: 0
        -    });
        - 
        -    var addToGroup = new Method({
        -        name: 'addToGroup',
        -        call: 'shh_addToGroup',
        -        params: 0
        -    });
        - 
        -    var getPastLogs = new Method({
        -        name: 'getPastMessages',
        -        call: 'shh_getMessages',
        -        params: 1,
        -        inputFormatter: [formatters.inputLogFormatter],
        -        outputFormatter: formatters.outputPostFormatter
        -    });
        - 
        -    // subscriptions
        -    var subscribe = new Subscriptions({
        -        name: 'subscribe',
        -        subscribe: 'shh_subscribe',
        -        unsubscribe: 'shh_unsubscribe',
        -        subscriptions: {
        -            'messages': {
        -                params: 1,
        -                inputFormatter: [formatters.inputLogFormatter],
        -                outputFormatter: formatters.outputPostFormatter
        -            }
        -        }
        -    });
        - 
        -    return [
        -        post,
        -        newIdentity,
        -        hasIdentity,
        -        newGroup,
        -        addToGroup,
        -        subscribe
        -    ];
        -};
        - 
        -module.exports = Shh;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html deleted file mode 100644 index 467fbeb..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/methods/watches.js.html +++ /dev/null @@ -1,387 +0,0 @@ - - - - Code coverage report for web3/lib/web3/methods/watches.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/methods/watches.js

        -

        - Statements: 100% (24 / 24)      - Branches: 100% (3 / 3)      - Functions: 100% (3 / 3)      - Lines: 100% (24 / 24)      - Ignored: none      -

        - -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -1 -11 -11 -  -11 -  -3 -3 -3 -  -3 -3 -3 -  -5 -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -11 -  -  -  -  -  -  -  -  -1 -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -4 -  -  -  -  -  -  -  -1 -  -  -  -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file watches.js
        - * @authors:
        - *   Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Method = require('../method');
        - 
        -/// @returns an array of objects describing web3.eth.filter api methods
        -var eth = function () {
        -    var newFilterCall = function (args) {
        -        var type = args[0];
        - 
        -        switch(type) {
        -            case 'latest':
        -                args.shift();
        -                this.params = 0;
        -                return 'eth_newBlockFilter';
        -            case 'pending':
        -                args.shift();
        -                this.params = 0;
        -                return 'eth_newPendingTransactionFilter';
        -            default:
        -                return 'eth_newFilter';
        -        }
        -    };
        - 
        -    var newFilter = new Method({
        -        name: 'newFilter',
        -        call: newFilterCall,
        -        params: 1
        -    });
        - 
        -    var uninstallFilter = new Method({
        -        name: 'uninstallFilter',
        -        call: 'eth_uninstallFilter',
        -        params: 1
        -    });
        - 
        -    var getLogs = new Method({
        -        name: 'getLogs',
        -        call: 'eth_getFilterLogs',
        -        params: 1
        -    });
        - 
        -    var poll = new Method({
        -        name: 'poll',
        -        call: 'eth_getFilterChanges',
        -        params: 1
        -    });
        - 
        -    return [
        -        newFilter,
        -        uninstallFilter,
        -        getLogs,
        -        poll
        -    ];
        -};
        - 
        -/// @returns an array of objects describing web3.shh.watch api methods
        -var shh = function () {
        -    var newFilter = new Method({
        -        name: 'newFilter',
        -        call: 'shh_newFilter',
        -        params: 1
        -    });
        - 
        -    var uninstallFilter = new Method({
        -        name: 'uninstallFilter',
        -        call: 'shh_uninstallFilter',
        -        params: 1
        -    });
        - 
        -    var getLogs = new Method({
        -        name: 'getLogs',
        -        call: 'shh_getMessages',
        -        params: 1
        -    });
        - 
        -    var poll = new Method({
        -        name: 'poll',
        -        call: 'shh_getFilterChanges',
        -        params: 1
        -    });
        - 
        -    return [
        -        newFilter,
        -        uninstallFilter,
        -        getLogs,
        -        poll
        -    ];
        -};
        - 
        -module.exports = {
        -    eth: eth,
        -    shh: shh
        -};
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html deleted file mode 100644 index b6c1c47..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/namereg.js.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - Code coverage report for web3/lib/web3/namereg.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/namereg.js

        -

        - Statements: 100% (5 / 5)      - Branches: 100% (0 / 0)      - Functions: 100% (0 / 0)      - Lines: 100% (5 / 5)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » namereg.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -1 -  -1 -  -  -  -  -  -  -  -  -  -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file namereg.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json');
        -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json');
        - 
        -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';
        -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';
        - 
        -module.exports = {
        -    global: {
        -        abi: globalRegistrarAbi,
        -        address: globalNameregAddress
        -    },
        -    icap: {
        -        abi: icapRegistrarAbi,
        -        address: icapNameregAddress
        -    }
        -};
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html deleted file mode 100644 index c6c2c09..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/property.js.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - Code coverage report for web3/lib/web3/property.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/property.js

        -

        - Statements: 97.78% (44 / 45)      - Branches: 66.67% (8 / 12)      - Functions: 92.31% (12 / 13)      - Lines: 97.78% (44 / 45)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » property.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -1 -2004 -2004 -2004 -2004 -2004 -2004 -  -  -1 -2004 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -1 -20 -  -  -  -  -  -  -  -  -  -1 -2 -2 -  -  -  -  -  -  -  -  -  -  -  -1 -2004 -  -  -  -  -2004 -2004 -2004 -616 -616 -616 -  -  -2004 -2004 -  -  -1 -2004 -  -  -1 -2004 -2004 -17 -  -  -  -  -  -1 -2004 -2004 -1 -  -  -1 -  -  -2004 -2004 -  -  -  -  -  -  -  -  -  -1 -2 -  -  -  -  -2 -2 -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/**
        - * @file property.js
        - * @author Fabian Vogelsteller <fabian@frozeman.de>
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        - 
        -var Property = function (options) {
        -    this.name = options.name;
        -    this.getter = options.getter;
        -    this.setter = options.setter;
        -    this.outputFormatter = options.outputFormatter;
        -    this.inputFormatter = options.inputFormatter;
        -    this.requestManager = null;
        -};
        - 
        -Property.prototype.setRequestManager = function (rm) {
        -    this.requestManager = rm;
        -};
        - 
        -/**
        - * Should be called to format input args of method
        - * 
        - * @method formatInput
        - * @param {Array}
        - * @return {Array}
        - */
        -Property.prototype.formatInput = function (arg) {
        -    return this.inputFormatter ? this.inputFormatter(arg) : arg;
        -};
        - 
        -/**
        - * Should be called to format output(result) of method
        - *
        - * @method formatOutput
        - * @param {Object}
        - * @return {Object}
        - */
        -Property.prototype.formatOutput = function (result) {
        -    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
        -};
        - 
        -/**
        - * Should be used to extract callback from array of arguments. Modifies input param
        - *
        - * @method extractCallback
        - * @param {Array} arguments
        - * @return {Function|Null} callback, if exists
        - */
        -Property.prototype.extractCallback = function (args) {
        -    Eif (utils.isFunction(args[args.length - 1])) {
        -        return args.pop(); // modify the args array!
        -    }
        -};
        - 
        - 
        -/**
        - * Should attach function to method
        - * 
        - * @method attachToObject
        - * @param {Object}
        - * @param {Function}
        - */
        -Property.prototype.attachToObject = function (obj) {
        -    var proto = {
        -        get: this.buildGet(),
        -        enumerable: true 
        -    };
        - 
        -    var names = this.name.split('.');
        -    var name = names[0];
        -    if (names.length > 1) {
        -        obj[names[0]] = obj[names[0]] || {};
        -        obj = obj[names[0]];
        -        name = names[1];
        -    }
        - 
        -    Object.defineProperty(obj, name, proto);
        -    obj[asyncGetterName(name)] = this.buildAsyncGet();
        -};
        - 
        -var asyncGetterName = function (name) {
        -    return 'get' + name.charAt(0).toUpperCase() + name.slice(1);
        -};
        - 
        -Property.prototype.buildGet = function () {
        -    var property = this;
        -    return function get() {
        -        return property.formatOutput(property.requestManager.send({
        -            method: property.getter
        -        })); 
        -    };
        -};
        - 
        -Property.prototype.buildAsyncGet = function () {
        -    var property = this;
        -    var get = function (callback) {
        -        property.requestManager.sendAsync({
        -            method: property.getter
        -        }, function (err, result) {
        -            callback(err, property.formatOutput(result));
        -        });
        -    };
        -    get.request = this.request.bind(this);
        -    return get;
        -};
        - 
        -/**
        - * Should be called to create pure JSONRPC request which can be used in batch request
        - *
        - * @method request
        - * @param {...} params
        - * @return {Object} jsonrpc request
        - */
        -Property.prototype.request = function () {
        -    var payload = {
        -        method: this.getter,
        -        params: [],
        -        callback: this.extractCallback(Array.prototype.slice.call(arguments))
        -    };
        -    payload.format = this.formatOutput.bind(this);
        -    return payload;
        -};
        - 
        -module.exports = Property;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html deleted file mode 100644 index 0ece315..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/requestmanager.js.html +++ /dev/null @@ -1,678 +0,0 @@ - - - - Code coverage report for web3/lib/web3/requestmanager.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/requestmanager.js

        -

        - Statements: 86.15% (56 / 65)      - Branches: 65.79% (25 / 38)      - Functions: 100% (13 / 13)      - Lines: 86.15% (56 / 65)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » requestmanager.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -  -  -  -  -  -  -  -1 -156 -156 -  -  -  -  -  -  -  -  -  -1 -76 -7 -7 -  -  -69 -69 -  -69 -  -  -  -69 -  -  -  -  -  -  -  -  -  -1 -75 -  -  -75 -75 -72 -1 -  -  -71 -  -  -  -71 -  -  -  -  -  -  -  -  -  -  -1 -4 -  -  -  -4 -4 -4 -  -  -  -4 -  -  -  -4 -  -  -  -  -  -  -  -  -  -  -  -1 -9 -9 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -12 -  -12 -  -12 -  -  -  -  -10 -10 -  -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -1 -181 -  -  -181 -11 -  -181 -  -  -181 -135 -7 -7 -7 -  -  -  -  -  -  -  -  -  -  -1 -24 -  -  -  -24 -6 -  -  -  -  -24 -  -  -  -1 - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file requestmanager.js
        - * @author Jeffrey Wilcke <jeff@ethdev.com>
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @author Marian Oancea <marian@ethdev.com>
        - * @author Fabian Vogelsteller <fabian@ethdev.com>
        - * @author Gav Wood <g@ethdev.com>
        - * @date 2014
        - */
        - 
        -var Jsonrpc = require('./jsonrpc');
        -var utils = require('../utils/utils');
        -var c = require('../utils/config');
        -var errors = require('./errors');
        - 
        -/**
        - * It's responsible for passing messages to providers
        - * It's also responsible for polling the ethereum node for incoming messages
        - * Default poll timeout is 1 second
        - * Singleton
        - */
        -var RequestManager = function (provider) {
        -    this.setProvider(provider);
        -    this.subscriptions = {};
        -};
        - 
        -/**
        - * Should be used to synchronously send request
        - *
        - * @method send
        - * @param {Object} data
        - * @return {Object}
        - */
        -RequestManager.prototype.send = function (data) {
        -    if (!this.provider) {
        -        console.error(errors.InvalidProvider());
        -        return null;
        -    }
        - 
        -    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
        -    var result = this.provider.send(payload);
        - 
        -    Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
        -        throw errors.InvalidResponse(result);
        -    }
        - 
        -    return result.result;
        -};
        - 
        -/**
        - * Should be used to asynchronously send request
        - *
        - * @method sendAsync
        - * @param {Object} data
        - * @param {Function} callback
        - */
        -RequestManager.prototype.sendAsync = function (data, callback) {
        -    Iif (!this.provider) {
        -        return callback(errors.InvalidProvider());
        -    }
        -    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
        -    this.provider.sendAsync(payload, function (err, result) {        
        -        if (err) {
        -            return callback(err);
        -        }
        - 
        -        Iif (!Jsonrpc.getInstance().isValidResponse(result)) {
        -            return callback(errors.InvalidResponse(result));
        -        }
        - 
        -        callback(null, result.result);
        -    });
        -};
        - 
        -/**
        - * Should be called to asynchronously send batch request
        - *
        - * @method sendBatch
        - * @param {Array} batch data
        - * @param {Function} callback
        - */
        -RequestManager.prototype.sendBatch = function (data, callback) {
        -    Iif (!this.provider) {
        -        return callback(errors.InvalidProvider());
        -    }
        - 
        -    var payload = Jsonrpc.getInstance().toBatchPayload(data);
        -    this.provider.sendAsync(payload, function (err, results) {
        -        Iif (err) {
        -            return callback(err);
        -        }
        - 
        -        Iif (!utils.isArray(results)) {
        -            return callback(errors.InvalidResponse(results));
        -        }
        - 
        -        callback(err, results);
        -    }); 
        -};
        - 
        - 
        -/**
        - * Waits for notifications
        - *
        - * @method addSubscription
        - * @param {String} id           the subscription id
        - * @param {Function} callback   the callback to call for incoming notifications
        - */
        -RequestManager.prototype.addSubscription = function (type, id, callback) {
        -    Eif(this.provider.on) {
        -        this.subscriptions[id] = {
        -            callback: callback,
        -            type: type
        -        };
        -        
        -    } else {
        -        throw new Error('This provider doesn\'t support subscriptions', this.provider);
        -    }
        -};
        - 
        -/**
        - * Waits for notifications
        - *
        - * @method removeSubscription
        - * @param {String} id           the subscription id
        - * @param {Function} callback   fired once the subscription is removed
        - */
        -RequestManager.prototype.removeSubscription = function (id, callback) {
        -    var _this = this;
        - 
        -    Eif(this.subscriptions[id]) {
        - 
        -        this.sendAsync({
        -            method: this.subscriptions[id].type + '_unsubscribe',
        -            params: [id]
        -        }, function(err, result){
        - 
        -            Eif(!err) {
        -                delete _this.subscriptions[id];
        -            }
        - 
        -            Iif(utils.isFunction(callback))
        -                callback(err, result);
        -        });
        - 
        -    }
        -}
        - 
        -/**
        - * Should be used to set provider of request manager
        - *
        - * @method setProvider
        - * @param {Object}
        - */
        -RequestManager.prototype.setProvider = function (p) {
        -    var _this = this;
        - 
        -    // reset the old one before changing
        -    if(this.provider)
        -        this.reset();
        - 
        -    this.provider = p;
        - 
        -    // listen to incoming notifications
        -    if(this.provider && this.provider.on) {
        -        this.provider.on('notification', function(err, result){
        -            Eif(!err) {
        -                Eif(_this.subscriptions[result.params.subscription] && _this.subscriptions[result.params.subscription].callback)
        -                    _this.subscriptions[result.params.subscription].callback(null, result.params.result);
        -            }
        -        });
        -    }
        -};
        - 
        -/**
        - * Should be called to reset the polling mechanism of the request manager
        - *
        - * @method reset
        - */
        -RequestManager.prototype.reset = function (keepIsSyncing) {
        -    var _this = this;
        - 
        - 
        -    // uninstall all subscriptions
        -    Object.keys(this.subscriptions).forEach(function(id){
        -        _this.removeSubscription(id);
        -    });
        - 
        - 
        -    //  reset notification callbacks etc.
        -    Iif(this.provider.reset)
        -        this.provider.reset();
        -};
        - 
        -module.exports = RequestManager;
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html deleted file mode 100644 index f022468..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/settings.js.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - Code coverage report for web3/lib/web3/settings.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/settings.js

        -

        - Statements: 100% (4 / 4)      - Branches: 100% (0 / 0)      - Functions: 100% (1 / 1)      - Lines: 100% (4 / 4)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » settings.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10  -  -1 -167 -167 -  -  -1 -  - 
         
        - 
        -var Settings = function () {
        -    this.defaultBlock = 'latest';
        -    this.defaultAccount = undefined;
        -};
        - 
        -module.exports = Settings;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html deleted file mode 100644 index 9227849..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscription.js.html +++ /dev/null @@ -1,630 +0,0 @@ - - - - Code coverage report for web3/lib/web3/subscription.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/subscription.js

        -

        - Statements: 83.93% (47 / 56)      - Branches: 68.57% (24 / 35)      - Functions: 84.62% (11 / 13)      - Lines: 83.93% (47 / 56)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » subscription.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -1 -10 -10 -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -10 -10 -  -  -  -  -  -  -  -  -  -  -  -1 -10 -  -10 -4 -  -10 -4 -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -1 -10 -  -10 -5 -  -  -5 -5 -  -5 -  -5 -  -  -  -  -  -  -  -  -  -  -1 -7 -  -7 -  -  -  -  -  -  -  -  -  -1 -10 -10 -10 -  -10 -  -  -  -  -  -  -  -  -  -  -  -1 -6 -  -  -  -  -  -  -  -  -1 -10 -10 -  -  -10 -  -  -  -  -10 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -10 -  -10 -9 -9 -  -  -9 -7 -  -  -  -  -  -  -  -10 -  -  -  -  -  -1
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file subscription.js
        - *
        - * @authors:
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        -var errors = require('./errors');
        - 
        - 
        -Subscription = function (options) {
        -    this.id = null;
        -    this.callback = null;
        - 
        -    this.options = {
        -        subscription: options.subscription,
        -        subscribeMethod: options.subscribeMethod,
        -        unsubscribeMethod: options.unsubscribeMethod,
        -        requestManager: options.requestManager
        -    }
        -};
        - 
        - 
        -/**
        - * Should be used to extract callback from array of arguments. Modifies input param
        - *
        - * @method extractCallback
        - * @param {Array} arguments
        - * @return {Function|Null} callback, if exists
        - */
        - 
        -Subscription.prototype._extractCallback = function (args) {
        -    Eif (utils.isFunction(args[args.length - 1])) {
        -        return args.pop(); // modify the args array!
        -    }
        -};
        - 
        -/**
        - * Should be called to check if the number of arguments is correct
        - * 
        - * @method validateArgs
        - * @param {Array} arguments
        - * @throws {Error} if it is not
        - */
        - 
        -Subscription.prototype._validateArgs = function (args) {
        -    var subscription = this.options.subscription;
        - 
        -    if(!subscription)
        -        subscription = {};
        - 
        -    if(!subscription.params)
        -        subscription.params = 0;
        - 
        -    Iif (args.length !== subscription.params + 1) {
        -        throw errors.InvalidNumberOfParams();
        -    }
        -};
        - 
        -/**
        - * Should be called to format input args of method
        - * 
        - * @method formatInput
        - * @param {Array}
        - * @return {Array}
        - */
        - 
        -Subscription.prototype._formatInput = function (args) {
        -    var subscription = this.options.subscription;
        - 
        -    if (!subscription || !subscription.inputFormatter) {
        -        return args;
        -    }
        - 
        -    var formattedArgs = subscription.inputFormatter.map(function (formatter, index) {
        -        return formatter ? formatter(args[index+1]) : args[index+1];
        -    });
        -    formattedArgs.unshift(args[0]);
        - 
        -    return formattedArgs;
        -};
        - 
        -/**
        - * Should be called to format output(result) of method
        - *
        - * @method formatOutput
        - * @param {Object}
        - * @return {Object}
        - */
        - 
        -Subscription.prototype._formatOutput = function (result) {
        -    var subscription = this.options.subscription;
        - 
        -    return (subscription && subscription.outputFormatter && result) ? subscription.outputFormatter(result) : result;
        -};
        - 
        -/**
        - * Should create payload from given input args
        - *
        - * @method toPayload
        - * @param {Array} args
        - * @return {Object}
        - */
        -Subscription.prototype._toPayload = function (args) {
        -    this.callback = this._extractCallback(args);
        -    var params = this._formatInput(args);
        -    this._validateArgs(params);
        - 
        -    return {
        -        method: this.options.subscribeMethod,
        -        params: params
        -    };
        -};
        - 
        -/**
        - * Unsubscribes and clears callbacks
        - *
        - * @method unsubscribe
        - * @return {Object}
        - */
        -Subscription.prototype.unsubscribe = function(callback) {
        -    return this.options.requestManager.removeSubscription(this.id, callback);
        -};
        - 
        -/**
        - * Subscribes and watches for changes
        - *
        - * @method subscribe
        - * @return {Object}
        - */
        -Subscription.prototype.subscribe = function() {
        -    var _this = this;
        -    var payload = this._toPayload(Array.prototype.slice.call(arguments));
        - 
        -    // throw error, if provider doesnt support subscriptions
        -    Iif(!this.options.requestManager.provider.on)
        -        throw new Error('The current provider doesn\'t support subscriptions', this.options.requestManager.provider);
        - 
        - 
        -    // get past logs, if fromBlock is available
        -    Iif(payload.params[0] === 'logs' && utils.isObject(payload.params[1]) && payload.params[1].hasOwnProperty('fromBlock') && isFinite(payload.params[1].fromBlock)) {
        -        this.options.requestManager.sendAsync({
        -            method: 'eth_getLogs',
        -            params: [payload.params[1]]
        -        }, function (err, logs) {
        -            if(!err) {
        -                logs.forEach(function(log){
        -                    _this.callback(null, _this._formatOutput(log));
        -                });
        -            } else {
        -                _this.callback(err);
        -            }
        -        });
        -    }
        - 
        -    // create subscription
        -    Eif (_this.callback) {
        - 
        -        this.options.requestManager.sendAsync(payload, function (err, result) {
        -            Eif(!err && result) {
        -                _this.id = result;
        -                
        -                // call callback on notifications
        -                _this.options.requestManager.addSubscription('eth', _this.id, function(err, result){
        -                    _this.callback(err, _this._formatOutput(result), _this);
        -                });
        -            } else {
        -                _this.callback(err);
        -            }
        -        });
        - 
        -        // return an object to cancel the subscription
        -        return this;
        - 
        -    } else
        -        throw new Error('Subscriptions require a callback as the last parameter!');
        -};
        - 
        -module.exports = Subscription;
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html deleted file mode 100644 index 426c50e..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/subscriptions.js.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - Code coverage report for web3/lib/web3/subscriptions.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/subscriptions.js

        -

        - Statements: 92% (23 / 25)      - Branches: 33.33% (2 / 6)      - Functions: 100% (5 / 5)      - Lines: 92% (23 / 25)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » subscriptions.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -1 -308 -308 -308 -308 -308 -  -  -  -1 -308 -  -  -  -1 -308 -308 -308 -308 -  -  -  -308 -  -  -  -  -1 -308 -  -308 -7 -  -  -  -  -  -  -7 -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file subscriptions.js
        - *
        - * @authors:
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -var utils = require('../utils/utils');
        -var errors = require('./errors');
        -var Subscription = require('./subscription.js');
        - 
        - 
        - 
        -Subscriptions = function (options) {
        -    this.name = options.name;
        -    this.subscribe = options.subscribe;
        -    this.unsubscribe = options.unsubscribe;
        -    this.subscriptions = options.subscriptions || {};
        -    this.requestManager = null;
        -};
        - 
        - 
        -Subscriptions.prototype.setRequestManager = function (rm) {
        -    this.requestManager = rm;
        -};
        - 
        - 
        -Subscriptions.prototype.attachToObject = function (obj) {
        -    var func = this.buildCall();
        -    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
        -    var name = this.name.split('.');
        -    Iif (name.length > 1) {
        -        obj[name[0]] = obj[name[0]] || {};
        -        obj[name[0]][name[1]] = func;
        -    } else {
        -        obj[name[0]] = func; 
        -    }
        -};
        - 
        - 
        -Subscriptions.prototype.buildCall = function() {
        -    var _this = this;
        - 
        -    return function(){
        -        var subscription = new Subscription({
        -            subscription: _this.subscriptions[arguments[0]],
        -            subscribeMethod: _this.subscribe,
        -            unsubscribeMethod: _this.unsubscribe,
        -            requestManager: _this.requestManager
        -        });
        - 
        -        return subscription.subscribe.apply(subscription, arguments);
        -    };
        -};
        - 
        -module.exports = Subscriptions;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html deleted file mode 100644 index 8e774b8..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/syncing.js.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - Code coverage report for web3/lib/web3/syncing.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/syncing.js

        -

        - Statements: 94.12% (32 / 34)      - Branches: 64.29% (9 / 14)      - Functions: 87.5% (7 / 8)      - Lines: 94.12% (32 / 34)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » syncing.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -1 -  -  -  -  -  -  -  -1 -  -1 -1 -  -  -  -  -  -1 -1 -  -1 -1 -  -  -1 -1 -  -  -1 -1 -  -  -1 -  -  -  -  -1 -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -  -1 -  -  -1 -1 -1 -1 -  -  -1 -1 -1 -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** @file syncing.js
        - * @authors:
        - *   Fabian Vogelsteller <fabian@ethdev.com>
        - * @date 2015
        - */
        - 
        -var formatters = require('./formatters');
        -var utils = require('../utils/utils');
        - 
        -var count = 1;
        - 
        -/**
        -Adds the callback and sets up the methods, to iterate over the results.
        - 
        -@method pollSyncing
        -@param {Object} self
        -*/
        -var pollSyncing = function(self) {
        - 
        -    var onMessage = function (error, sync) {
        -        Iif (error) {
        -            return self.callbacks.forEach(function (callback) {
        -                callback(error);
        -            });
        -        }
        - 
        -        Eif(utils.isObject(sync) && sync.startingBlock)
        -            sync = formatters.outputSyncingFormatter(sync);
        - 
        -        self.callbacks.forEach(function (callback) {
        -            Eif (self.lastSyncState !== sync) {
        -                
        -                // call the callback with true first so the app can stop anything, before receiving the sync data
        -                Eif(!self.lastSyncState && utils.isObject(sync))
        -                    callback(null, true);
        -                
        -                // call on the next CPU cycle, so the actions of the sync stop can be processes first
        -                setTimeout(function() {
        -                    callback(null, sync);
        -                }, 0);
        -                
        -                self.lastSyncState = sync;
        -            }
        -        });
        -    };
        - 
        -    self.requestManager.startPolling({
        -        method: 'eth_syncing',
        -        params: [],
        -    }, self.pollId, onMessage, self.stopWatching.bind(self));
        - 
        -};
        - 
        -var IsSyncing = function (requestManager, callback) {
        -    this.requestManager = requestManager;
        -    this.pollId = 'syncPoll_'+ count++;
        -    this.callbacks = [];
        -    this.addCallback(callback);
        -    this.lastSyncState = false;
        -    pollSyncing(this);
        - 
        -    return this;
        -};
        - 
        -IsSyncing.prototype.addCallback = function (callback) {
        -    Eif(callback)
        -        this.callbacks.push(callback);
        -    return this;
        -};
        - 
        -IsSyncing.prototype.stopWatching = function () {
        -    this.requestManager.stopPolling(this.pollId);
        -    this.callbacks = [];
        -};
        - 
        -module.exports = IsSyncing;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html b/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html deleted file mode 100644 index e57bfeb..0000000 --- a/node_modules/web3/coverage/lcov-report/web3/lib/web3/transfer.js.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - Code coverage report for web3/lib/web3/transfer.js - - - - - - -
        -

        Code coverage report for web3/lib/web3/transfer.js

        -

        - Statements: 73.68% (14 / 19)      - Branches: 50% (3 / 6)      - Functions: 50% (2 / 4)      - Lines: 73.68% (14 / 19)      - Ignored: none      -

        -
        All files » web3/lib/web3/ » transfer.js
        -
        -
        -
        
        -
        -
        1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -1 -  -  -  -1 -1 -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -  -  -  -  -  -1 -  - 
        /*
        -    This file is part of web3.js.
        - 
        -    web3.js is free software: you can redistribute it and/or modify
        -    it under the terms of the GNU Lesser General Public License as published by
        -    the Free Software Foundation, either version 3 of the License, or
        -    (at your option) any later version.
        - 
        -    web3.js is distributed in the hope that it will be useful,
        -    but WITHOUT ANY WARRANTY; without even the implied warranty of
        -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        -    GNU Lesser General Public License for more details.
        - 
        -    You should have received a copy of the GNU Lesser General Public License
        -    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
        -*/
        -/** 
        - * @file transfer.js
        - * @author Marek Kotewicz <marek@ethdev.com>
        - * @date 2015
        - */
        - 
        -var Iban = require('./iban');
        -var exchangeAbi = require('../contracts/SmartExchange.json');
        - 
        -/**
        - * Should be used to make Iban transfer
        - *
        - * @method transfer
        - * @param {String} from
        - * @param {String} to iban
        - * @param {Value} value to be tranfered
        - * @param {Function} callback, callback
        - */
        -var transfer = function (eth, from, to, value, callback) {
        -    var iban = new Iban(to); 
        -    Iif (!iban.isValid()) {
        -        throw new Error('invalid iban address');
        -    }
        - 
        -    Iif (iban.isDirect()) {
        -        return transferToAddress(eth, from, iban.address(), value, callback);
        -    }
        -    
        -    Eif (!callback) {
        -        var address = eth.icapNamereg().addr(iban.institution());
        -        return deposit(eth, from, address, value, iban.client());
        -    }
        - 
        -    eth.icapNamereg().addr(iban.institution(), function (err, address) {
        -        return deposit(eth, from, address, value, iban.client(), callback);
        -    });
        -    
        -};
        - 
        -/**
        - * Should be used to transfer funds to certain address
        - *
        - * @method transferToAddress
        - * @param {String} from
        - * @param {String} to
        - * @param {Value} value to be tranfered
        - * @param {Function} callback, callback
        - */
        -var transferToAddress = function (eth, from, to, value, callback) {
        -    return eth.sendTransaction({
        -        address: to,
        -        from: from,
        -        value: value
        -    }, callback);
        -};
        - 
        -/**
        - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)
        - *
        - * @method deposit
        - * @param {String} from
        - * @param {String} to
        - * @param {Value} value to be transfered
        - * @param {String} client unique identifier
        - * @param {Function} callback, callback
        - */
        -var deposit = function (eth, from, to, value, client, callback) {
        -    var abi = exchangeAbi;
        -    return eth.contract(abi).at(to).deposit(client, {
        -        from: from,
        -        value: value
        -    }, callback);
        -};
        - 
        -module.exports = transfer;
        - 
        - 
        - -
        - - - - - - diff --git a/node_modules/web3/coverage/lcov.info b/node_modules/web3/coverage/lcov.info deleted file mode 100644 index ea28a51..0000000 --- a/node_modules/web3/coverage/lcov.info +++ /dev/null @@ -1,3638 +0,0 @@ -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/index.js -FNF:0 -FNH:0 -DA:1,1 -DA:4,1 -DA:5,0 -DA:8,1 -LF:4 -LH:3 -BRDA:4,1,0,0 -BRDA:4,1,1,1 -BRDA:4,2,0,1 -BRDA:4,2,1,0 -BRF:4 -BRH:2 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3.js -FN:46,Web3 -FN:73,(anonymous_2) -FN:78,(anonymous_3) -FN:100,(anonymous_4) -FN:105,(anonymous_5) -FN:129,(anonymous_6) -FN:133,(anonymous_7) -FNF:7 -FNH:6 -FNDA:154,Web3 -FNDA:25,(anonymous_2) -FNDA:13,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:154,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:4,(anonymous_7) -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:38,1 -DA:39,1 -DA:40,1 -DA:41,1 -DA:42,1 -DA:46,1 -DA:47,154 -DA:48,154 -DA:49,154 -DA:50,154 -DA:51,154 -DA:52,154 -DA:53,154 -DA:54,154 -DA:57,154 -DA:61,154 -DA:62,154 -DA:68,1 -DA:73,1 -DA:74,25 -DA:75,25 -DA:78,1 -DA:79,13 -DA:80,13 -DA:83,1 -DA:84,1 -DA:85,1 -DA:86,1 -DA:87,1 -DA:88,1 -DA:89,1 -DA:90,1 -DA:91,1 -DA:92,1 -DA:93,1 -DA:94,1 -DA:95,1 -DA:100,1 -DA:101,1 -DA:102,1 -DA:105,1 -DA:106,154 -DA:129,1 -DA:130,0 -DA:133,1 -DA:134,4 -DA:137,1 -LF:57 -LH:56 -BRDA:130,1,0,0 -BRDA:130,1,1,0 -BRF:2 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/requestmanager.js -FN:38,(anonymous_1) -FN:50,(anonymous_2) -FN:73,(anonymous_3) -FN:78,(anonymous_4) -FN:98,(anonymous_5) -FN:104,(anonymous_6) -FN:125,(anonymous_7) -FN:144,(anonymous_8) -FN:152,(anonymous_9) -FN:171,(anonymous_10) -FN:182,(anonymous_11) -FN:196,(anonymous_12) -FN:201,(anonymous_13) -FNF:13 -FNH:13 -FNDA:156,(anonymous_1) -FNDA:76,(anonymous_2) -FNDA:75,(anonymous_3) -FNDA:72,(anonymous_4) -FNDA:4,(anonymous_5) -FNDA:4,(anonymous_6) -FNDA:9,(anonymous_7) -FNDA:12,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:181,(anonymous_10) -FNDA:7,(anonymous_11) -FNDA:24,(anonymous_12) -FNDA:6,(anonymous_13) -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:38,1 -DA:39,156 -DA:40,156 -DA:50,1 -DA:51,76 -DA:52,7 -DA:53,7 -DA:56,69 -DA:57,69 -DA:59,69 -DA:60,0 -DA:63,69 -DA:73,1 -DA:74,75 -DA:75,0 -DA:77,75 -DA:78,75 -DA:79,72 -DA:80,1 -DA:83,71 -DA:84,0 -DA:87,71 -DA:98,1 -DA:99,4 -DA:100,0 -DA:103,4 -DA:104,4 -DA:105,4 -DA:106,0 -DA:109,4 -DA:110,0 -DA:113,4 -DA:125,1 -DA:126,9 -DA:127,9 -DA:133,0 -DA:144,1 -DA:145,12 -DA:147,12 -DA:149,12 -DA:154,10 -DA:155,10 -DA:158,10 -DA:159,0 -DA:171,1 -DA:172,181 -DA:175,181 -DA:176,11 -DA:178,181 -DA:181,181 -DA:182,135 -DA:183,7 -DA:184,7 -DA:185,7 -DA:196,1 -DA:197,24 -DA:201,24 -DA:202,6 -DA:207,24 -DA:208,0 -DA:211,1 -LF:65 -LH:56 -BRDA:51,1,0,7 -BRDA:51,1,1,69 -BRDA:59,2,0,0 -BRDA:59,2,1,69 -BRDA:74,3,0,0 -BRDA:74,3,1,75 -BRDA:79,4,0,1 -BRDA:79,4,1,71 -BRDA:83,5,0,0 -BRDA:83,5,1,71 -BRDA:99,6,0,0 -BRDA:99,6,1,4 -BRDA:105,7,0,0 -BRDA:105,7,1,4 -BRDA:109,8,0,0 -BRDA:109,8,1,4 -BRDA:126,9,0,9 -BRDA:126,9,1,0 -BRDA:147,10,0,12 -BRDA:147,10,1,0 -BRDA:154,11,0,10 -BRDA:154,11,1,0 -BRDA:158,12,0,0 -BRDA:158,12,1,10 -BRDA:175,13,0,11 -BRDA:175,13,1,170 -BRDA:181,14,0,135 -BRDA:181,14,1,46 -BRDA:181,15,0,181 -BRDA:181,15,1,135 -BRDA:183,16,0,7 -BRDA:183,16,1,0 -BRDA:184,17,0,7 -BRDA:184,17,1,0 -BRDA:184,18,0,7 -BRDA:184,18,1,7 -BRDA:207,19,0,0 -BRDA:207,19,1,24 -BRF:38 -BRH:25 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/jsonrpc.js -FN:23,(anonymous_1) -FN:36,(anonymous_2) -FN:49,(anonymous_3) -FN:68,(anonymous_4) -FN:83,(anonymous_5) -FN:85,(anonymous_6) -FNF:6 -FNH:6 -FNDA:301,(anonymous_1) -FNDA:298,(anonymous_2) -FNDA:158,(anonymous_3) -FNDA:157,(anonymous_4) -FNDA:6,(anonymous_5) -FNDA:10,(anonymous_6) -DA:23,1 -DA:25,301 -DA:26,300 -DA:28,1 -DA:30,1 -DA:36,1 -DA:37,298 -DA:38,298 -DA:49,1 -DA:50,158 -DA:51,0 -DA:53,158 -DA:68,1 -DA:69,157 -DA:83,1 -DA:84,6 -DA:85,6 -DA:86,10 -DA:90,1 -LF:19 -LH:18 -BRDA:25,1,0,300 -BRDA:25,1,1,1 -BRDA:50,2,0,0 -BRDA:50,2,1,158 -BRDA:56,3,0,158 -BRDA:56,3,1,15 -BRDA:69,4,0,157 -BRDA:69,4,1,156 -BRDA:69,4,2,154 -BRDA:69,4,3,152 -BRDA:69,4,4,150 -BRF:11 -BRH:10 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/utils.js -FN:76,(anonymous_1) -FN:89,(anonymous_2) -FN:100,(anonymous_3) -FN:124,(anonymous_4) -FN:147,(anonymous_5) -FN:169,(anonymous_6) -FN:187,(anonymous_7) -FN:192,(anonymous_8) -FN:203,(anonymous_9) -FN:209,(anonymous_10) -FN:222,(anonymous_11) -FN:233,(anonymous_12) -FN:249,(anonymous_13) -FN:282,(anonymous_14) -FN:312,(anonymous_15) -FN:339,(anonymous_16) -FN:352,(anonymous_17) -FN:372,(anonymous_18) -FN:387,(anonymous_19) -FN:398,(anonymous_20) -FN:409,(anonymous_21) -FN:428,(anonymous_22) -FN:440,(anonymous_23) -FN:452,(anonymous_24) -FN:463,(anonymous_25) -FN:474,(anonymous_26) -FN:485,(anonymous_27) -FN:496,(anonymous_28) -FNF:28 -FNH:27 -FNDA:205,(anonymous_1) -FNDA:38,(anonymous_2) -FNDA:10,(anonymous_3) -FNDA:5,(anonymous_4) -FNDA:25,(anonymous_5) -FNDA:10,(anonymous_6) -FNDA:105,(anonymous_7) -FNDA:136,(anonymous_8) -FNDA:101,(anonymous_9) -FNDA:94,(anonymous_10) -FNDA:193,(anonymous_11) -FNDA:160,(anonymous_12) -FNDA:126,(anonymous_13) -FNDA:39,(anonymous_14) -FNDA:12,(anonymous_15) -FNDA:27,(anonymous_16) -FNDA:705,(anonymous_17) -FNDA:205,(anonymous_18) -FNDA:78,(anonymous_19) -FNDA:24,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:875,(anonymous_22) -FNDA:832,(anonymous_23) -FNDA:358,(anonymous_24) -FNDA:286,(anonymous_25) -FNDA:126,(anonymous_26) -FNDA:453,(anonymous_27) -FNDA:9,(anonymous_28) -DA:37,2 -DA:38,2 -DA:40,2 -DA:76,2 -DA:77,205 -DA:89,2 -DA:90,38 -DA:100,2 -DA:102,10 -DA:103,10 -DA:104,10 -DA:105,3 -DA:107,10 -DA:108,133 -DA:109,133 -DA:110,2 -DA:111,131 -DA:114,10 -DA:124,2 -DA:126,5 -DA:127,5 -DA:128,5 -DA:129,5 -DA:131,5 -DA:132,110 -DA:133,110 -DA:136,5 -DA:147,2 -DA:148,25 -DA:149,25 -DA:150,25 -DA:151,291 -DA:152,291 -DA:153,2 -DA:154,289 -DA:155,289 -DA:158,25 -DA:169,2 -DA:170,10 -DA:171,10 -DA:172,236 -DA:173,236 -DA:174,236 -DA:177,10 -DA:187,2 -DA:188,105 -DA:189,48 -DA:192,136 -DA:193,57 -DA:203,2 -DA:204,101 -DA:205,101 -DA:209,2 -DA:211,94 -DA:212,94 -DA:222,2 -DA:223,193 -DA:233,2 -DA:234,160 -DA:235,160 -DA:237,160 -DA:249,2 -DA:252,126 -DA:253,2 -DA:255,124 -DA:256,1 -DA:258,123 -DA:259,2 -DA:262,121 -DA:263,62 -DA:264,5 -DA:265,57 -DA:266,42 -DA:267,15 -DA:268,5 -DA:271,69 -DA:282,2 -DA:283,39 -DA:284,39 -DA:285,39 -DA:286,1 -DA:288,38 -DA:312,2 -DA:313,12 -DA:315,12 -DA:339,2 -DA:340,27 -DA:342,26 -DA:352,2 -DA:354,705 -DA:355,705 -DA:356,47 -DA:358,658 -DA:359,208 -DA:362,450 -DA:372,2 -DA:373,205 -DA:374,205 -DA:375,5 -DA:377,200 -DA:387,2 -DA:388,78 -DA:398,2 -DA:399,24 -DA:409,2 -DA:410,0 -DA:411,0 -DA:414,0 -DA:415,0 -DA:418,0 -DA:428,2 -DA:429,875 -DA:440,2 -DA:441,832 -DA:452,2 -DA:453,358 -DA:463,2 -DA:464,286 -DA:474,2 -DA:475,126 -DA:485,2 -DA:486,453 -DA:496,2 -DA:497,9 -DA:498,9 -DA:500,5 -DA:504,2 -LF:127 -LH:122 -BRDA:77,1,0,0 -BRDA:77,1,1,205 -BRDA:90,2,0,0 -BRDA:90,2,1,38 -BRDA:104,3,0,3 -BRDA:104,3,1,7 -BRDA:109,4,0,2 -BRDA:109,4,1,131 -BRDA:128,5,0,5 -BRDA:128,5,1,0 -BRDA:152,6,0,2 -BRDA:152,6,1,289 -BRDA:155,7,0,0 -BRDA:155,7,1,289 -BRDA:174,8,0,31 -BRDA:174,8,1,205 -BRDA:188,9,0,48 -BRDA:188,9,1,57 -BRDA:205,10,0,101 -BRDA:205,10,1,0 -BRDA:212,11,0,94 -BRDA:212,11,1,0 -BRDA:237,12,0,17 -BRDA:237,12,1,143 -BRDA:252,13,0,2 -BRDA:252,13,1,124 -BRDA:255,14,0,1 -BRDA:255,14,1,123 -BRDA:258,15,0,2 -BRDA:258,15,1,121 -BRDA:262,16,0,62 -BRDA:262,16,1,59 -BRDA:263,17,0,5 -BRDA:263,17,1,57 -BRDA:265,18,0,42 -BRDA:265,18,1,15 -BRDA:267,19,0,5 -BRDA:267,19,1,10 -BRDA:283,20,0,39 -BRDA:283,20,1,0 -BRDA:285,21,0,1 -BRDA:285,21,1,38 -BRDA:315,22,0,0 -BRDA:315,22,1,12 -BRDA:342,23,0,0 -BRDA:342,23,1,26 -BRDA:354,24,0,705 -BRDA:354,24,1,40 -BRDA:355,25,0,47 -BRDA:355,25,1,658 -BRDA:358,26,0,208 -BRDA:358,26,1,450 -BRDA:358,27,0,658 -BRDA:358,27,1,234 -BRDA:358,27,2,45 -BRDA:374,28,0,5 -BRDA:374,28,1,200 -BRDA:410,29,0,0 -BRDA:410,29,1,0 -BRDA:414,30,0,0 -BRDA:414,30,1,0 -BRDA:429,31,0,875 -BRDA:429,31,1,826 -BRDA:429,31,2,780 -BRDA:429,31,3,780 -BRDA:441,32,0,832 -BRDA:441,32,1,505 -BRDA:441,32,2,459 -BRDA:441,32,3,459 -BRF:69 -BRH:56 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/config.js -FNF:0 -FNH:0 -DA:38,1 -DA:40,1 -DA:70,1 -LF:3 -LH:3 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/errors.js -FN:24,(anonymous_1) -FN:27,(anonymous_2) -FN:30,(anonymous_3) -FN:33,(anonymous_4) -FNF:4 -FNH:3 -FNDA:4,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:7,(anonymous_3) -FNDA:6,(anonymous_4) -DA:23,3 -DA:25,4 -DA:28,0 -DA:31,7 -DA:34,6 -DA:35,6 -LF:6 -LH:5 -BRDA:34,1,0,2 -BRDA:34,1,1,4 -BRDA:34,2,0,6 -BRDA:34,2,1,2 -BRDA:34,2,2,2 -BRF:5 -BRH:5 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/iban.js -FN:25,(anonymous_1) -FN:41,(anonymous_2) -FN:48,(anonymous_3) -FN:66,(anonymous_4) -FN:83,(anonymous_5) -FN:94,(anonymous_6) -FN:110,(anonymous_7) -FN:126,(anonymous_8) -FN:137,(anonymous_9) -FN:148,(anonymous_10) -FN:159,(anonymous_11) -FN:169,(anonymous_12) -FN:180,(anonymous_13) -FN:191,(anonymous_14) -FN:202,(anonymous_15) -FN:212,(anonymous_16) -FN:222,(anonymous_17) -FNF:17 -FNH:15 -FNDA:15,(anonymous_1) -FNDA:21,(anonymous_2) -FNDA:661,(anonymous_3) -FNDA:21,(anonymous_4) -FNDA:113,(anonymous_5) -FNDA:5,(anonymous_6) -FNDA:6,(anonymous_7) -FNDA:1,(anonymous_8) -FNDA:18,(anonymous_9) -FNDA:99,(anonymous_10) -FNDA:19,(anonymous_11) -FNDA:2,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:1,(anonymous_14) -FNDA:1,(anonymous_15) -FNDA:10,(anonymous_16) -FNDA:0,(anonymous_17) -DA:23,1 -DA:25,1 -DA:26,15 -DA:27,15 -DA:28,11 -DA:30,15 -DA:41,1 -DA:42,21 -DA:43,21 -DA:45,21 -DA:46,21 -DA:48,21 -DA:49,661 -DA:50,661 -DA:52,450 -DA:54,211 -DA:66,1 -DA:67,21 -DA:70,21 -DA:71,158 -DA:72,158 -DA:75,21 -DA:83,1 -DA:84,113 -DA:94,1 -DA:95,5 -DA:96,5 -DA:97,5 -DA:98,5 -DA:110,1 -DA:111,6 -DA:113,6 -DA:114,6 -DA:116,6 -DA:126,1 -DA:127,1 -DA:137,1 -DA:138,18 -DA:139,18 -DA:148,1 -DA:149,99 -DA:159,1 -DA:160,19 -DA:169,1 -DA:170,2 -DA:180,1 -DA:181,0 -DA:191,1 -DA:192,1 -DA:202,1 -DA:203,1 -DA:212,1 -DA:213,10 -DA:214,10 -DA:215,10 -DA:216,10 -DA:219,0 -DA:222,1 -DA:223,0 -DA:226,1 -LF:60 -LH:57 -BRDA:50,1,0,450 -BRDA:50,1,1,211 -BRDA:50,2,0,661 -BRDA:50,2,1,450 -BRDA:149,3,0,99 -BRDA:149,3,1,15 -BRDA:160,4,0,19 -BRDA:160,4,1,1 -BRDA:192,5,0,1 -BRDA:192,5,1,0 -BRDA:203,6,0,1 -BRDA:203,6,1,0 -BRDA:213,7,0,10 -BRDA:213,7,1,0 -BRF:14 -BRH:11 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/eth.js -FN:37,(anonymous_1) -FN:41,(anonymous_2) -FN:45,(anonymous_3) -FN:49,(anonymous_4) -FN:53,(anonymous_5) -FN:57,Eth -FN:62,(anonymous_7) -FN:67,(anonymous_8) -FN:78,(anonymous_9) -FN:81,(anonymous_10) -FN:88,(anonymous_11) -FN:91,(anonymous_12) -FN:97,(anonymous_13) -FN:124,(anonymous_14) -FN:320,(anonymous_15) -FN:357,(anonymous_16) -FN:362,(anonymous_17) -FN:366,(anonymous_18) -FNF:18 -FNH:14 -FNDA:6,(anonymous_1) -FNDA:4,(anonymous_2) -FNDA:6,(anonymous_3) -FNDA:6,(anonymous_4) -FNDA:6,(anonymous_5) -FNDA:154,Eth -FNDA:3696,(anonymous_7) -FNDA:1078,(anonymous_8) -FNDA:5,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:154,(anonymous_13) -FNDA:6,(anonymous_14) -FNDA:154,(anonymous_15) -FNDA:27,(anonymous_16) -FNDA:0,(anonymous_17) -FNDA:2,(anonymous_18) -DA:26,1 -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,1 -DA:35,1 -DA:37,1 -DA:38,6 -DA:41,1 -DA:42,4 -DA:45,1 -DA:46,6 -DA:49,1 -DA:50,6 -DA:53,1 -DA:54,6 -DA:57,1 -DA:58,154 -DA:60,154 -DA:62,154 -DA:63,3696 -DA:64,3696 -DA:67,154 -DA:68,1078 -DA:69,1078 -DA:73,154 -DA:74,154 -DA:77,1 -DA:79,5 -DA:82,0 -DA:83,0 -DA:87,1 -DA:89,0 -DA:92,0 -DA:93,0 -DA:97,1 -DA:98,154 -DA:106,154 -DA:113,154 -DA:120,154 -DA:124,6 -DA:128,154 -DA:137,154 -DA:145,154 -DA:153,154 -DA:160,154 -DA:168,154 -DA:175,154 -DA:183,154 -DA:190,154 -DA:197,154 -DA:204,154 -DA:211,154 -DA:219,154 -DA:225,154 -DA:231,154 -DA:237,154 -DA:243,154 -DA:249,154 -DA:255,154 -DA:265,154 -DA:291,154 -DA:320,1 -DA:321,154 -DA:357,1 -DA:358,27 -DA:359,27 -DA:362,1 -DA:363,0 -DA:366,1 -DA:367,2 -DA:371,1 -LF:76 -LH:70 -BRDA:38,1,0,2 -BRDA:38,1,1,4 -BRDA:38,2,0,6 -BRDA:38,2,1,2 -BRDA:42,3,0,2 -BRDA:42,3,1,2 -BRDA:42,4,0,4 -BRDA:42,4,1,2 -BRDA:46,5,0,2 -BRDA:46,5,1,4 -BRDA:46,6,0,6 -BRDA:46,6,1,2 -BRDA:50,7,0,2 -BRDA:50,7,1,4 -BRDA:50,8,0,6 -BRDA:50,8,1,4 -BRDA:54,9,0,2 -BRDA:54,9,1,4 -BRDA:54,10,0,6 -BRDA:54,10,1,4 -BRF:20 -BRH:20 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/formatters.js -FN:35,(anonymous_1) -FN:39,(anonymous_2) -FN:43,(anonymous_3) -FN:50,(anonymous_4) -FN:66,(anonymous_5) -FN:78,(anonymous_6) -FN:80,(anonymous_7) -FN:94,(anonymous_8) -FN:103,(anonymous_9) -FN:105,(anonymous_10) -FN:119,(anonymous_11) -FN:138,(anonymous_12) -FN:147,(anonymous_13) -FN:162,(anonymous_14) -FN:176,(anonymous_15) -FN:192,(anonymous_16) -FN:193,(anonymous_17) -FN:208,(anonymous_18) -FN:227,(anonymous_19) -FN:245,(anonymous_20) -FN:258,(anonymous_21) -FN:273,(anonymous_22) -FN:290,(anonymous_23) -FN:297,(anonymous_24) -FN:310,(anonymous_25) -FNF:25 -FNH:24 -FNDA:26,(anonymous_1) -FNDA:67,(anonymous_2) -FNDA:55,(anonymous_3) -FNDA:67,(anonymous_4) -FNDA:15,(anonymous_5) -FNDA:60,(anonymous_6) -FNDA:18,(anonymous_7) -FNDA:13,(anonymous_8) -FNDA:52,(anonymous_9) -FNDA:24,(anonymous_10) -FNDA:12,(anonymous_11) -FNDA:2,(anonymous_12) -FNDA:4,(anonymous_13) -FNDA:15,(anonymous_14) -FNDA:20,(anonymous_15) -FNDA:5,(anonymous_16) -FNDA:7,(anonymous_17) -FNDA:7,(anonymous_18) -FNDA:16,(anonymous_19) -FNDA:5,(anonymous_20) -FNDA:6,(anonymous_21) -FNDA:1,(anonymous_22) -FNDA:2,(anonymous_23) -FNDA:80,(anonymous_24) -FNDA:0,(anonymous_25) -DA:24,1 -DA:25,1 -DA:26,1 -DA:35,1 -DA:36,26 -DA:39,1 -DA:40,67 -DA:43,1 -DA:44,55 -DA:45,20 -DA:47,35 -DA:50,1 -DA:51,67 -DA:52,0 -DA:53,67 -DA:54,15 -DA:56,52 -DA:66,1 -DA:68,15 -DA:70,15 -DA:71,4 -DA:74,15 -DA:75,15 -DA:78,15 -DA:79,60 -DA:81,18 -DA:84,15 -DA:94,1 -DA:96,13 -DA:97,13 -DA:99,13 -DA:100,11 -DA:103,13 -DA:104,52 -DA:106,24 -DA:109,13 -DA:119,1 -DA:120,12 -DA:121,11 -DA:122,12 -DA:123,11 -DA:124,12 -DA:125,12 -DA:126,12 -DA:127,12 -DA:128,12 -DA:138,1 -DA:139,2 -DA:140,2 -DA:141,2 -DA:142,2 -DA:143,2 -DA:144,2 -DA:146,2 -DA:147,2 -DA:148,4 -DA:152,2 -DA:162,1 -DA:165,15 -DA:166,15 -DA:167,15 -DA:168,15 -DA:169,15 -DA:170,14 -DA:172,15 -DA:173,15 -DA:175,15 -DA:176,12 -DA:177,20 -DA:178,4 -DA:182,15 -DA:192,1 -DA:193,5 -DA:195,7 -DA:196,2 -DA:198,5 -DA:200,5 -DA:201,5 -DA:203,0 -DA:207,5 -DA:208,5 -DA:209,7 -DA:212,5 -DA:214,5 -DA:215,0 -DA:217,5 -DA:227,1 -DA:228,16 -DA:229,13 -DA:230,16 -DA:231,13 -DA:232,16 -DA:233,13 -DA:235,16 -DA:245,1 -DA:248,5 -DA:249,5 -DA:250,5 -DA:253,5 -DA:254,0 -DA:258,5 -DA:260,6 -DA:263,5 -DA:273,1 -DA:275,1 -DA:276,1 -DA:277,1 -DA:278,1 -DA:287,1 -DA:288,0 -DA:290,1 -DA:291,2 -DA:294,1 -DA:297,1 -DA:298,80 -DA:299,80 -DA:300,8 -DA:301,72 -DA:302,58 -DA:303,14 -DA:304,9 -DA:306,5 -DA:310,1 -DA:312,0 -DA:313,0 -DA:314,0 -DA:316,0 -DA:319,1 -LF:128 -LH:119 -BRDA:40,1,0,67 -BRDA:40,1,1,59 -BRDA:40,1,2,53 -BRDA:44,2,0,20 -BRDA:44,2,1,35 -BRDA:51,3,0,0 -BRDA:51,3,1,67 -BRDA:53,4,0,15 -BRDA:53,4,1,52 -BRDA:68,5,0,15 -BRDA:68,5,1,11 -BRDA:70,6,0,4 -BRDA:70,6,1,11 -BRDA:74,7,0,15 -BRDA:74,7,1,0 -BRDA:96,8,0,13 -BRDA:96,8,1,0 -BRDA:99,9,0,11 -BRDA:99,9,1,2 -BRDA:120,10,0,11 -BRDA:120,10,1,1 -BRDA:122,11,0,11 -BRDA:122,11,1,1 -BRDA:139,12,0,2 -BRDA:139,12,1,0 -BRDA:141,13,0,2 -BRDA:141,13,1,0 -BRDA:146,14,0,2 -BRDA:146,14,1,0 -BRDA:169,15,0,14 -BRDA:169,15,1,1 -BRDA:175,16,0,12 -BRDA:175,16,1,3 -BRDA:177,17,0,4 -BRDA:177,17,1,16 -BRDA:195,18,0,2 -BRDA:195,18,1,5 -BRDA:195,19,0,7 -BRDA:195,19,1,5 -BRDA:200,20,0,5 -BRDA:200,20,1,0 -BRDA:207,21,0,5 -BRDA:207,21,1,1 -BRDA:209,22,0,0 -BRDA:209,22,1,7 -BRDA:214,23,0,0 -BRDA:214,23,1,5 -BRDA:214,24,0,5 -BRDA:214,24,1,4 -BRDA:228,25,0,13 -BRDA:228,25,1,3 -BRDA:230,26,0,13 -BRDA:230,26,1,3 -BRDA:232,27,0,13 -BRDA:232,27,1,3 -BRDA:253,28,0,0 -BRDA:253,28,1,5 -BRDA:254,29,0,0 -BRDA:254,29,1,0 -BRDA:260,30,0,0 -BRDA:260,30,1,6 -BRDA:287,31,0,0 -BRDA:287,31,1,1 -BRDA:299,32,0,8 -BRDA:299,32,1,72 -BRDA:299,33,0,80 -BRDA:299,33,1,8 -BRDA:301,34,0,58 -BRDA:301,34,1,14 -BRDA:303,35,0,9 -BRDA:303,35,1,5 -BRF:71 -BRH:57 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/method.js -FN:26,(anonymous_1) -FN:35,(anonymous_2) -FN:46,(anonymous_3) -FN:57,(anonymous_4) -FN:70,(anonymous_5) -FN:83,(anonymous_6) -FN:88,(anonymous_7) -FN:100,(anonymous_8) -FN:104,(anonymous_9) -FN:119,(anonymous_10) -FN:132,(anonymous_11) -FN:144,(anonymous_12) -FN:146,(anonymous_13) -FN:149,(anonymous_14) -FN:166,(anonymous_15) -FNF:15 -FNH:15 -FNDA:5096,(anonymous_1) -FNDA:4930,(anonymous_2) -FNDA:117,(anonymous_3) -FNDA:116,(anonymous_4) -FNDA:117,(anonymous_5) -FNDA:115,(anonymous_6) -FNDA:166,(anonymous_7) -FNDA:115,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:113,(anonymous_10) -FNDA:4930,(anonymous_11) -FNDA:4930,(anonymous_12) -FNDA:109,(anonymous_13) -FNDA:51,(anonymous_14) -FNDA:4,(anonymous_15) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,5096 -DA:28,5096 -DA:29,5096 -DA:30,5096 -DA:31,5096 -DA:32,5096 -DA:35,1 -DA:36,4930 -DA:46,1 -DA:47,117 -DA:57,1 -DA:58,116 -DA:59,57 -DA:70,1 -DA:71,117 -DA:72,2 -DA:83,1 -DA:84,115 -DA:85,23 -DA:88,92 -DA:89,166 -DA:100,1 -DA:101,115 -DA:103,115 -DA:104,6 -DA:105,10 -DA:108,109 -DA:119,1 -DA:120,113 -DA:121,113 -DA:122,113 -DA:123,113 -DA:125,113 -DA:132,1 -DA:133,4930 -DA:134,4930 -DA:135,4930 -DA:136,4930 -DA:137,462 -DA:138,462 -DA:140,4468 -DA:144,1 -DA:145,4930 -DA:146,4930 -DA:147,109 -DA:148,109 -DA:149,51 -DA:150,51 -DA:153,58 -DA:155,4930 -DA:156,4930 -DA:166,1 -DA:167,4 -DA:168,4 -DA:169,4 -DA:172,1 -LF:59 -LH:59 -BRDA:29,1,0,5096 -BRDA:29,1,1,780 -BRDA:47,2,0,31 -BRDA:47,2,1,86 -BRDA:58,3,0,57 -BRDA:58,3,1,59 -BRDA:71,4,0,2 -BRDA:71,4,1,115 -BRDA:84,5,0,23 -BRDA:84,5,1,92 -BRDA:89,6,0,158 -BRDA:89,6,1,8 -BRDA:103,7,0,6 -BRDA:103,7,1,109 -BRDA:105,8,0,3 -BRDA:105,8,1,7 -BRDA:105,9,0,10 -BRDA:105,9,1,3 -BRDA:108,10,0,58 -BRDA:108,10,1,51 -BRDA:108,11,0,109 -BRDA:108,11,1,59 -BRDA:136,12,0,462 -BRDA:136,12,1,4468 -BRDA:137,13,0,462 -BRDA:137,13,1,154 -BRDA:148,14,0,51 -BRDA:148,14,1,58 -BRF:28 -BRH:28 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/property.js -FN:26,(anonymous_1) -FN:35,(anonymous_2) -FN:46,(anonymous_3) -FN:57,(anonymous_4) -FN:68,(anonymous_5) -FN:82,(anonymous_6) -FN:100,(anonymous_7) -FN:104,(anonymous_8) -FN:106,get -FN:113,(anonymous_10) -FN:115,(anonymous_11) -FN:118,(anonymous_12) -FN:133,(anonymous_13) -FNF:13 -FNH:12 -FNDA:2004,(anonymous_1) -FNDA:2004,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:20,(anonymous_4) -FNDA:2,(anonymous_5) -FNDA:2004,(anonymous_6) -FNDA:2004,(anonymous_7) -FNDA:2004,(anonymous_8) -FNDA:17,get -FNDA:2004,(anonymous_10) -FNDA:1,(anonymous_11) -FNDA:1,(anonymous_12) -FNDA:2,(anonymous_13) -DA:24,1 -DA:26,1 -DA:27,2004 -DA:28,2004 -DA:29,2004 -DA:30,2004 -DA:31,2004 -DA:32,2004 -DA:35,1 -DA:36,2004 -DA:46,1 -DA:47,0 -DA:57,1 -DA:58,20 -DA:68,1 -DA:69,2 -DA:70,2 -DA:82,1 -DA:83,2004 -DA:88,2004 -DA:89,2004 -DA:90,2004 -DA:91,616 -DA:92,616 -DA:93,616 -DA:96,2004 -DA:97,2004 -DA:100,1 -DA:101,2004 -DA:104,1 -DA:105,2004 -DA:106,2004 -DA:107,17 -DA:113,1 -DA:114,2004 -DA:115,2004 -DA:116,1 -DA:119,1 -DA:122,2004 -DA:123,2004 -DA:133,1 -DA:134,2 -DA:139,2 -DA:140,2 -DA:143,1 -LF:45 -LH:44 -BRDA:47,1,0,0 -BRDA:47,1,1,0 -BRDA:58,2,0,8 -BRDA:58,2,1,12 -BRDA:58,3,0,20 -BRDA:58,3,1,11 -BRDA:69,4,0,2 -BRDA:69,4,1,0 -BRDA:90,5,0,616 -BRDA:90,5,1,1388 -BRDA:91,6,0,616 -BRDA:91,6,1,0 -BRF:12 -BRH:8 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscriptions.js -FN:30,(anonymous_1) -FN:39,(anonymous_2) -FN:44,(anonymous_3) -FN:57,(anonymous_4) -FN:60,(anonymous_5) -FNF:5 -FNH:5 -FNDA:308,(anonymous_1) -FNDA:308,(anonymous_2) -FNDA:308,(anonymous_3) -FNDA:308,(anonymous_4) -FNDA:7,(anonymous_5) -DA:24,1 -DA:25,1 -DA:26,1 -DA:30,1 -DA:31,308 -DA:32,308 -DA:33,308 -DA:34,308 -DA:35,308 -DA:39,1 -DA:40,308 -DA:44,1 -DA:45,308 -DA:46,308 -DA:47,308 -DA:48,308 -DA:49,0 -DA:50,0 -DA:52,308 -DA:57,1 -DA:58,308 -DA:60,308 -DA:61,7 -DA:68,7 -DA:72,1 -LF:25 -LH:23 -BRDA:34,1,0,308 -BRDA:34,1,1,0 -BRDA:48,2,0,0 -BRDA:48,2,1,308 -BRDA:49,3,0,0 -BRDA:49,3,1,0 -BRF:6 -BRH:2 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/subscription.js -FN:28,(anonymous_1) -FN:49,(anonymous_2) -FN:63,(anonymous_3) -FN:85,(anonymous_4) -FN:92,(anonymous_5) -FN:108,(anonymous_6) -FN:121,(anonymous_7) -FN:138,(anonymous_8) -FN:148,(anonymous_9) -FN:162,(anonymous_10) -FN:164,(anonymous_11) -FN:176,(anonymous_12) -FN:181,(anonymous_13) -FNF:13 -FNH:11 -FNDA:10,(anonymous_1) -FNDA:10,(anonymous_2) -FNDA:10,(anonymous_3) -FNDA:10,(anonymous_4) -FNDA:5,(anonymous_5) -FNDA:7,(anonymous_6) -FNDA:10,(anonymous_7) -FNDA:6,(anonymous_8) -FNDA:10,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:9,(anonymous_12) -FNDA:7,(anonymous_13) -DA:24,1 -DA:25,1 -DA:28,1 -DA:29,10 -DA:30,10 -DA:32,10 -DA:49,1 -DA:50,10 -DA:51,10 -DA:63,1 -DA:64,10 -DA:66,10 -DA:67,4 -DA:69,10 -DA:70,4 -DA:72,10 -DA:73,0 -DA:85,1 -DA:86,10 -DA:88,10 -DA:89,5 -DA:92,5 -DA:93,5 -DA:95,5 -DA:97,5 -DA:108,1 -DA:109,7 -DA:111,7 -DA:121,1 -DA:122,10 -DA:123,10 -DA:124,10 -DA:126,10 -DA:138,1 -DA:139,6 -DA:148,1 -DA:149,10 -DA:150,10 -DA:153,10 -DA:154,0 -DA:158,10 -DA:159,0 -DA:163,0 -DA:164,0 -DA:165,0 -DA:168,0 -DA:174,10 -DA:176,10 -DA:177,9 -DA:178,9 -DA:181,9 -DA:182,7 -DA:185,0 -DA:190,10 -DA:193,0 -DA:196,1 -LF:56 -LH:47 -BRDA:50,1,0,10 -BRDA:50,1,1,0 -BRDA:66,2,0,4 -BRDA:66,2,1,6 -BRDA:69,3,0,4 -BRDA:69,3,1,6 -BRDA:72,4,0,0 -BRDA:72,4,1,10 -BRDA:88,5,0,5 -BRDA:88,5,1,5 -BRDA:88,6,0,10 -BRDA:88,6,1,6 -BRDA:93,7,0,5 -BRDA:93,7,1,0 -BRDA:111,8,0,7 -BRDA:111,8,1,0 -BRDA:111,9,0,7 -BRDA:111,9,1,7 -BRDA:111,9,2,7 -BRDA:153,10,0,0 -BRDA:153,10,1,10 -BRDA:158,11,0,0 -BRDA:158,11,1,10 -BRDA:158,12,0,10 -BRDA:158,12,1,5 -BRDA:158,12,2,5 -BRDA:158,12,3,0 -BRDA:163,13,0,0 -BRDA:163,13,1,0 -BRDA:174,14,0,10 -BRDA:174,14,1,0 -BRDA:177,15,0,9 -BRDA:177,15,1,0 -BRDA:177,16,0,9 -BRDA:177,16,1,9 -BRF:35 -BRH:24 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/contract.js -FN:35,(anonymous_1) -FN:36,(anonymous_2) -FN:38,(anonymous_3) -FN:39,(anonymous_4) -FN:42,(anonymous_5) -FN:54,(anonymous_6) -FN:55,(anonymous_7) -FN:57,(anonymous_8) -FN:59,(anonymous_9) -FN:71,(anonymous_10) -FN:72,(anonymous_11) -FN:79,(anonymous_12) -FN:94,(anonymous_13) -FN:99,(anonymous_14) -FN:117,(anonymous_15) -FN:120,(anonymous_16) -FN:163,(anonymous_17) -FN:191,(anonymous_18) -FN:214,(anonymous_19) -FN:246,(anonymous_20) -FN:265,(anonymous_21) -FN:287,(anonymous_22) -FNF:22 -FNH:17 -FNDA:1,(anonymous_1) -FNDA:1,(anonymous_2) -FNDA:1,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:1,(anonymous_5) -FNDA:26,(anonymous_6) -FNDA:91,(anonymous_7) -FNDA:68,(anonymous_8) -FNDA:68,(anonymous_9) -FNDA:26,(anonymous_10) -FNDA:91,(anonymous_11) -FNDA:22,(anonymous_12) -FNDA:0,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:0,(anonymous_16) -FNDA:27,(anonymous_17) -FNDA:1,(anonymous_18) -FNDA:1,(anonymous_19) -FNDA:26,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:27,(anonymous_22) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:39,1 -DA:40,1 -DA:43,1 -DA:54,1 -DA:55,26 -DA:56,91 -DA:58,68 -DA:60,68 -DA:71,1 -DA:72,26 -DA:73,91 -DA:76,26 -DA:77,26 -DA:79,26 -DA:80,22 -DA:81,22 -DA:94,1 -DA:95,0 -DA:99,0 -DA:100,0 -DA:101,0 -DA:104,0 -DA:106,0 -DA:107,0 -DA:109,0 -DA:110,0 -DA:112,0 -DA:117,0 -DA:118,0 -DA:120,0 -DA:123,0 -DA:124,0 -DA:126,0 -DA:127,0 -DA:129,0 -DA:133,0 -DA:136,0 -DA:137,0 -DA:140,0 -DA:141,0 -DA:144,0 -DA:145,0 -DA:147,0 -DA:163,1 -DA:164,27 -DA:165,27 -DA:167,27 -DA:191,1 -DA:192,1 -DA:195,1 -DA:196,1 -DA:198,1 -DA:199,1 -DA:200,1 -DA:203,1 -DA:204,1 -DA:205,1 -DA:208,1 -DA:209,1 -DA:211,1 -DA:214,1 -DA:215,1 -DA:216,0 -DA:219,1 -DA:222,1 -DA:224,0 -DA:228,0 -DA:230,0 -DA:231,0 -DA:234,1 -DA:246,1 -DA:247,26 -DA:251,26 -DA:252,26 -DA:254,26 -DA:255,0 -DA:257,26 -DA:265,1 -DA:266,0 -DA:267,0 -DA:269,0 -DA:270,0 -DA:271,0 -DA:274,0 -DA:275,0 -DA:277,0 -DA:287,1 -DA:288,27 -DA:289,27 -DA:290,27 -DA:291,27 -DA:294,1 -LF:99 -LH:59 -BRDA:36,1,0,1 -BRDA:36,1,1,0 -BRDA:37,2,0,1 -BRDA:37,2,1,1 -BRDA:100,3,0,0 -BRDA:100,3,1,0 -BRDA:100,4,0,0 -BRDA:100,4,1,0 -BRDA:104,5,0,0 -BRDA:104,5,1,0 -BRDA:109,6,0,0 -BRDA:109,6,1,0 -BRDA:118,7,0,0 -BRDA:118,7,1,0 -BRDA:118,8,0,0 -BRDA:118,8,1,0 -BRDA:123,9,0,0 -BRDA:123,9,1,0 -BRDA:123,10,0,0 -BRDA:123,10,1,0 -BRDA:129,11,0,0 -BRDA:129,11,1,0 -BRDA:140,12,0,0 -BRDA:140,12,1,0 -BRDA:144,13,0,0 -BRDA:144,13,1,0 -BRDA:199,14,0,1 -BRDA:199,14,1,0 -BRDA:204,15,0,1 -BRDA:204,15,1,0 -BRDA:204,16,0,1 -BRDA:204,16,1,1 -BRDA:211,17,0,1 -BRDA:211,17,1,0 -BRDA:215,18,0,0 -BRDA:215,18,1,1 -BRDA:254,19,0,0 -BRDA:254,19,1,26 -BRDA:270,20,0,0 -BRDA:270,20,1,0 -BRDA:270,21,0,0 -BRDA:270,21,1,0 -BRF:42 -BRH:10 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/coder.js -FN:38,(anonymous_1) -FN:50,(anonymous_2) -FN:51,(anonymous_3) -FN:70,(anonymous_4) -FN:82,(anonymous_5) -FN:85,(anonymous_6) -FN:89,(anonymous_7) -FN:100,(anonymous_8) -FN:104,(anonymous_9) -FN:108,(anonymous_10) -FN:121,(anonymous_11) -FN:132,(anonymous_12) -FN:135,(anonymous_13) -FN:141,(anonymous_14) -FN:152,(anonymous_15) -FN:163,(anonymous_16) -FN:170,(anonymous_17) -FN:180,(anonymous_18) -FN:202,(anonymous_19) -FN:214,(anonymous_20) -FN:218,(anonymous_21) -FN:223,(anonymous_22) -FN:224,(anonymous_23) -FN:233,(anonymous_24) -FN:240,(anonymous_25) -FN:242,(anonymous_26) -FNF:26 -FNH:26 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:2403,(anonymous_3) -FNDA:64,(anonymous_4) -FNDA:107,(anonymous_5) -FNDA:135,(anonymous_6) -FNDA:135,(anonymous_7) -FNDA:107,(anonymous_8) -FNDA:270,(anonymous_9) -FNDA:135,(anonymous_10) -FNDA:135,(anonymous_11) -FNDA:287,(anonymous_12) -FNDA:42,(anonymous_13) -FNDA:42,(anonymous_14) -FNDA:42,(anonymous_15) -FNDA:13,(anonymous_16) -FNDA:1,(anonymous_17) -FNDA:13,(anonymous_18) -FNDA:68,(anonymous_19) -FNDA:106,(anonymous_20) -FNDA:132,(anonymous_21) -FNDA:106,(anonymous_22) -FNDA:132,(anonymous_23) -FNDA:132,(anonymous_24) -FNDA:213,(anonymous_25) -FNDA:267,(anonymous_26) -DA:23,1 -DA:25,1 -DA:26,1 -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:38,1 -DA:39,1 -DA:50,1 -DA:51,267 -DA:52,2403 -DA:55,267 -DA:56,0 -DA:59,267 -DA:70,1 -DA:71,64 -DA:82,1 -DA:83,107 -DA:85,107 -DA:86,135 -DA:89,107 -DA:90,135 -DA:91,135 -DA:92,135 -DA:95,107 -DA:97,107 -DA:100,1 -DA:101,107 -DA:102,107 -DA:104,107 -DA:105,270 -DA:108,107 -DA:109,135 -DA:110,43 -DA:111,43 -DA:112,43 -DA:115,92 -DA:121,107 -DA:122,135 -DA:123,43 -DA:124,43 -DA:125,43 -DA:128,107 -DA:132,1 -DA:133,287 -DA:134,287 -DA:135,42 -DA:137,42 -DA:138,42 -DA:139,42 -DA:141,42 -DA:142,42 -DA:143,42 -DA:144,0 -DA:145,0 -DA:146,0 -DA:152,42 -DA:153,42 -DA:154,82 -DA:155,82 -DA:159,42 -DA:162,245 -DA:163,13 -DA:164,13 -DA:165,13 -DA:166,13 -DA:169,13 -DA:170,1 -DA:171,1 -DA:172,1 -DA:174,2 -DA:175,2 -DA:180,13 -DA:181,13 -DA:182,27 -DA:183,27 -DA:187,13 -DA:191,232 -DA:202,1 -DA:203,68 -DA:214,1 -DA:215,106 -DA:216,106 -DA:218,106 -DA:219,132 -DA:223,1 -DA:224,106 -DA:225,132 -DA:228,106 -DA:230,29 -DA:233,106 -DA:235,132 -DA:236,132 -DA:240,1 -DA:241,213 -DA:242,213 -DA:243,267 -DA:247,1 -DA:259,1 -LF:103 -LH:99 -BRDA:55,1,0,0 -BRDA:55,1,1,267 -BRDA:105,2,0,270 -BRDA:105,2,1,230 -BRDA:109,3,0,43 -BRDA:109,3,1,92 -BRDA:122,4,0,43 -BRDA:122,4,1,92 -BRDA:134,5,0,42 -BRDA:134,5,1,245 -BRDA:143,6,0,0 -BRDA:143,6,1,42 -BRDA:145,7,0,0 -BRDA:145,7,1,0 -BRDA:162,8,0,13 -BRDA:162,8,1,232 -BRDA:169,9,0,1 -BRDA:169,9,1,12 -BRDA:174,10,0,2 -BRDA:174,10,1,1 -BRDA:174,11,0,2 -BRDA:174,11,1,1 -BRF:22 -BRH:18 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/formatters.js -FN:38,(anonymous_1) -FN:51,(anonymous_2) -FN:65,(anonymous_3) -FN:80,(anonymous_4) -FN:95,(anonymous_5) -FN:108,(anonymous_6) -FN:119,(anonymous_7) -FN:130,(anonymous_8) -FN:148,(anonymous_9) -FN:160,(anonymous_10) -FN:171,(anonymous_11) -FN:182,(anonymous_12) -FN:193,(anonymous_13) -FN:204,(anonymous_14) -FN:216,(anonymous_15) -FN:228,(anonymous_16) -FNF:16 -FNH:15 -FNDA:205,(anonymous_1) -FNDA:15,(anonymous_2) -FNDA:9,(anonymous_3) -FNDA:14,(anonymous_4) -FNDA:15,(anonymous_5) -FNDA:7,(anonymous_6) -FNDA:61,(anonymous_7) -FNDA:61,(anonymous_8) -FNDA:45,(anonymous_9) -FNDA:7,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:12,(anonymous_12) -FNDA:10,(anonymous_13) -FNDA:15,(anonymous_14) -FNDA:7,(anonymous_15) -FNDA:26,(anonymous_16) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:38,1 -DA:39,205 -DA:40,205 -DA:41,205 -DA:51,1 -DA:52,15 -DA:53,15 -DA:54,15 -DA:55,15 -DA:65,1 -DA:66,9 -DA:67,9 -DA:68,9 -DA:69,9 -DA:70,9 -DA:80,1 -DA:81,14 -DA:82,14 -DA:83,14 -DA:84,14 -DA:85,14 -DA:95,1 -DA:96,15 -DA:97,15 -DA:108,1 -DA:109,7 -DA:119,1 -DA:120,61 -DA:130,1 -DA:131,61 -DA:135,61 -DA:136,3 -DA:138,58 -DA:148,1 -DA:149,45 -DA:150,45 -DA:160,1 -DA:161,7 -DA:171,1 -DA:172,0 -DA:182,1 -DA:183,12 -DA:193,1 -DA:194,10 -DA:204,1 -DA:205,15 -DA:206,15 -DA:216,1 -DA:217,7 -DA:218,7 -DA:228,1 -DA:229,26 -DA:230,26 -DA:233,1 -LF:58 -LH:57 -BRDA:96,1,0,7 -BRDA:96,1,1,8 -BRDA:131,2,0,61 -BRDA:131,2,1,0 -BRDA:135,3,0,3 -BRDA:135,3,1,58 -BRDA:149,4,0,45 -BRDA:149,4,1,0 -BRDA:183,5,0,6 -BRDA:183,5,1,6 -BRF:10 -BRH:8 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/param.js -FN:29,(anonymous_1) -FN:40,(anonymous_2) -FN:51,(anonymous_3) -FN:63,(anonymous_4) -FN:74,(anonymous_5) -FN:84,(anonymous_6) -FN:94,(anonymous_7) -FN:107,(anonymous_8) -FN:117,(anonymous_9) -FN:128,(anonymous_10) -FN:132,(anonymous_11) -FN:142,(anonymous_12) -FN:144,(anonymous_13) -FNF:13 -FNH:5 -FNDA:434,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:668,(anonymous_5) -FNDA:0,(anonymous_6) -FNDA:389,(anonymous_7) -FNDA:279,(anonymous_8) -FNDA:235,(anonymous_9) -FNDA:0,(anonymous_10) -FNDA:0,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:0,(anonymous_13) -DA:23,1 -DA:29,1 -DA:30,434 -DA:31,434 -DA:40,1 -DA:41,0 -DA:51,1 -DA:52,0 -DA:63,1 -DA:64,0 -DA:74,1 -DA:75,668 -DA:84,1 -DA:85,0 -DA:94,1 -DA:95,389 -DA:96,389 -DA:98,0 -DA:107,1 -DA:108,279 -DA:117,1 -DA:118,235 -DA:128,1 -DA:131,0 -DA:132,0 -DA:133,0 -DA:134,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:142,0 -DA:143,0 -DA:145,0 -DA:151,1 -LF:34 -LH:19 -BRDA:30,1,0,434 -BRDA:30,1,1,0 -BRDA:85,2,0,0 -BRDA:85,2,1,0 -BRDA:95,3,0,389 -BRDA:95,3,1,0 -BRDA:108,4,0,44 -BRDA:108,4,1,235 -BRDA:133,5,0,0 -BRDA:133,5,1,0 -BRF:10 -BRH:4 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/address.js -FN:14,(anonymous_1) -FN:22,(anonymous_2) -FN:26,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:100,(anonymous_3) -DA:1,1 -DA:2,1 -DA:14,1 -DA:15,1 -DA:16,1 -DA:19,1 -DA:20,1 -DA:22,1 -DA:23,267 -DA:26,1 -DA:27,100 -DA:30,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/type.js -FN:7,(anonymous_1) -FN:19,(anonymous_2) -FN:30,(anonymous_3) -FN:44,(anonymous_4) -FN:59,(anonymous_5) -FN:78,(anonymous_6) -FN:99,(anonymous_7) -FN:117,(anonymous_8) -FN:132,(anonymous_9) -FN:145,(anonymous_10) -FN:149,(anonymous_11) -FN:156,(anonymous_12) -FN:165,(anonymous_13) -FN:191,(anonymous_14) -FN:196,(anonymous_15) -FN:215,(anonymous_16) -FN:232,(anonymous_17) -FNF:17 -FNH:15 -FNDA:9,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:1029,(anonymous_4) -FNDA:619,(anonymous_5) -FNDA:678,(anonymous_6) -FNDA:128,(anonymous_7) -FNDA:338,(anonymous_8) -FNDA:2454,(anonymous_9) -FNDA:201,(anonymous_10) -FNDA:22,(anonymous_11) -FNDA:43,(anonymous_12) -FNDA:11,(anonymous_13) -FNDA:216,(anonymous_14) -FNDA:21,(anonymous_15) -FNDA:19,(anonymous_16) -FNDA:22,(anonymous_17) -DA:1,1 -DA:2,1 -DA:7,1 -DA:8,9 -DA:9,9 -DA:19,1 -DA:20,0 -DA:30,1 -DA:31,0 -DA:44,1 -DA:45,1029 -DA:46,1029 -DA:59,1 -DA:60,619 -DA:61,619 -DA:78,1 -DA:79,678 -DA:80,678 -DA:81,123 -DA:83,555 -DA:99,1 -DA:101,128 -DA:102,128 -DA:103,0 -DA:106,128 -DA:117,1 -DA:118,338 -DA:132,1 -DA:134,2454 -DA:145,1 -DA:146,201 -DA:147,201 -DA:149,22 -DA:150,22 -DA:151,22 -DA:153,22 -DA:154,22 -DA:156,22 -DA:157,43 -DA:160,22 -DA:163,179 -DA:165,11 -DA:166,11 -DA:167,11 -DA:169,11 -DA:170,11 -DA:171,23 -DA:174,11 -DA:179,168 -DA:191,1 -DA:192,216 -DA:194,216 -DA:196,21 -DA:197,21 -DA:198,21 -DA:199,21 -DA:201,21 -DA:202,21 -DA:203,21 -DA:204,21 -DA:206,21 -DA:207,37 -DA:210,21 -DA:213,195 -DA:215,19 -DA:216,19 -DA:217,19 -DA:219,19 -DA:220,19 -DA:221,19 -DA:222,19 -DA:224,19 -DA:225,47 -DA:228,19 -DA:230,176 -DA:232,22 -DA:233,22 -DA:234,22 -DA:235,22 -DA:237,22 -DA:241,154 -DA:242,154 -DA:245,1 -LF:83 -LH:80 -BRDA:46,1,0,1029 -BRDA:46,1,1,186 -BRDA:61,2,0,619 -BRDA:61,2,1,43 -BRDA:80,3,0,123 -BRDA:80,3,1,555 -BRDA:81,4,0,123 -BRDA:81,4,1,54 -BRDA:102,5,0,0 -BRDA:102,5,1,128 -BRDA:147,6,0,22 -BRDA:147,6,1,179 -BRDA:163,7,0,11 -BRDA:163,7,1,168 -BRDA:194,8,0,21 -BRDA:194,8,1,195 -BRDA:213,9,0,19 -BRDA:213,9,1,176 -BRDA:230,10,0,22 -BRDA:230,10,1,154 -BRF:20 -BRH:19 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bool.js -FN:14,(anonymous_1) -FN:22,(anonymous_2) -FN:26,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:44,(anonymous_3) -DA:1,1 -DA:2,1 -DA:14,1 -DA:15,1 -DA:16,1 -DA:19,1 -DA:20,1 -DA:22,1 -DA:23,267 -DA:26,1 -DA:27,44 -DA:30,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/int.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:234,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,234 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/uint.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:139,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,139 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/dynamicbytes.js -FN:4,(anonymous_1) -FN:12,(anonymous_2) -FN:16,(anonymous_3) -FN:20,(anonymous_4) -FNF:4 -FNH:4 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:37,(anonymous_3) -FNDA:33,(anonymous_4) -DA:1,1 -DA:2,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:9,1 -DA:10,1 -DA:12,1 -DA:13,267 -DA:16,1 -DA:17,37 -DA:20,1 -DA:21,33 -DA:24,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/string.js -FN:4,(anonymous_1) -FN:12,(anonymous_2) -FN:16,(anonymous_3) -FN:20,(anonymous_4) -FNF:4 -FNH:4 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:28,(anonymous_3) -FNDA:35,(anonymous_4) -DA:1,1 -DA:2,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:9,1 -DA:10,1 -DA:12,1 -DA:13,267 -DA:16,1 -DA:17,28 -DA:20,1 -DA:21,35 -DA:24,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/real.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:28,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,28 -DA:36,1 -LF:12 -LH:12 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/ureal.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:2 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:0,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,0 -DA:36,1 -LF:12 -LH:11 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/solidity/bytes.js -FN:20,(anonymous_1) -FN:28,(anonymous_2) -FN:32,(anonymous_3) -FNF:3 -FNH:3 -FNDA:1,(anonymous_1) -FNDA:267,(anonymous_2) -FNDA:38,(anonymous_3) -DA:1,1 -DA:2,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:25,1 -DA:26,1 -DA:28,1 -DA:29,267 -DA:32,1 -DA:33,38 -DA:34,38 -DA:35,38 -DA:38,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/event.js -FN:33,(anonymous_1) -FN:51,(anonymous_2) -FN:52,(anonymous_3) -FN:54,(anonymous_4) -FN:66,(anonymous_5) -FN:76,(anonymous_6) -FN:86,(anonymous_7) -FN:97,(anonymous_8) -FN:103,(anonymous_9) -FN:105,(anonymous_10) -FN:118,(anonymous_11) -FN:120,(anonymous_12) -FN:127,(anonymous_13) -FN:149,(anonymous_14) -FN:158,(anonymous_15) -FN:179,(anonymous_16) -FN:189,(anonymous_17) -FN:208,(anonymous_18) -FN:233,(anonymous_19) -FN:260,(anonymous_20) -FN:268,(anonymous_21) -FN:289,(anonymous_22) -FNF:22 -FNH:20 -FNDA:61,(anonymous_1) -FNDA:16,(anonymous_2) -FNDA:50,(anonymous_3) -FNDA:25,(anonymous_4) -FNDA:30,(anonymous_5) -FNDA:22,(anonymous_6) -FNDA:2,(anonymous_7) -FNDA:12,(anonymous_8) -FNDA:24,(anonymous_9) -FNDA:4,(anonymous_10) -FNDA:21,(anonymous_11) -FNDA:16,(anonymous_12) -FNDA:2,(anonymous_13) -FNDA:8,(anonymous_14) -FNDA:1,(anonymous_15) -FNDA:12,(anonymous_16) -FNDA:25,(anonymous_17) -FNDA:3,(anonymous_18) -FNDA:3,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:48,(anonymous_22) -DA:24,1 -DA:25,1 -DA:26,1 -DA:27,1 -DA:28,1 -DA:33,1 -DA:34,61 -DA:35,61 -DA:36,61 -DA:37,61 -DA:38,61 -DA:39,61 -DA:40,61 -DA:51,1 -DA:52,16 -DA:53,50 -DA:55,25 -DA:66,1 -DA:67,30 -DA:76,1 -DA:77,22 -DA:86,1 -DA:87,2 -DA:97,1 -DA:98,12 -DA:99,12 -DA:100,12 -DA:103,12 -DA:104,24 -DA:106,4 -DA:109,12 -DA:112,12 -DA:114,11 -DA:115,9 -DA:118,11 -DA:119,21 -DA:121,16 -DA:122,16 -DA:123,6 -DA:126,10 -DA:127,1 -DA:128,2 -DA:131,9 -DA:134,11 -DA:137,12 -DA:139,12 -DA:149,1 -DA:150,8 -DA:151,8 -DA:152,8 -DA:155,8 -DA:157,1 -DA:158,1 -DA:159,1 -DA:162,1 -DA:163,0 -DA:164,0 -DA:167,1 -DA:168,1 -DA:169,1 -DA:173,7 -DA:174,7 -DA:175,7 -DA:178,8 -DA:179,12 -DA:180,8 -DA:182,8 -DA:183,8 -DA:185,8 -DA:186,8 -DA:187,8 -DA:189,8 -DA:190,25 -DA:191,25 -DA:194,8 -DA:195,8 -DA:197,8 -DA:208,1 -DA:210,3 -DA:211,3 -DA:213,3 -DA:214,1 -DA:218,3 -DA:233,1 -DA:235,3 -DA:236,3 -DA:247,3 -DA:260,1 -DA:262,0 -DA:264,0 -DA:265,0 -DA:269,0 -DA:270,0 -DA:272,0 -DA:277,0 -DA:289,1 -DA:290,48 -DA:293,48 -DA:296,48 -DA:297,26 -DA:302,22 -DA:303,22 -DA:304,22 -DA:306,22 -DA:311,1 -LF:105 -LH:96 -BRDA:37,1,0,35 -BRDA:37,1,1,26 -BRDA:67,2,0,30 -BRDA:67,2,1,22 -BRDA:98,3,0,12 -BRDA:98,3,1,1 -BRDA:99,4,0,12 -BRDA:99,4,1,2 -BRDA:112,5,0,11 -BRDA:112,5,1,1 -BRDA:114,6,0,9 -BRDA:114,6,1,2 -BRDA:122,7,0,6 -BRDA:122,7,1,10 -BRDA:122,8,0,16 -BRDA:122,8,1,11 -BRDA:126,9,0,1 -BRDA:126,9,1,9 -BRDA:151,10,0,8 -BRDA:151,10,1,1 -BRDA:152,11,0,8 -BRDA:152,11,1,2 -BRDA:155,12,0,1 -BRDA:155,12,1,7 -BRDA:162,13,0,0 -BRDA:162,13,1,1 -BRDA:178,14,0,1 -BRDA:178,14,1,7 -BRDA:190,15,0,12 -BRDA:190,15,1,13 -BRDA:210,16,0,3 -BRDA:210,16,1,0 -BRDA:213,17,0,1 -BRDA:213,17,1,2 -BRDA:264,18,0,0 -BRDA:264,18,1,0 -BRDA:269,19,0,0 -BRDA:269,19,1,0 -BRDA:296,20,0,26 -BRDA:296,20,1,22 -BRDA:303,21,0,22 -BRDA:303,21,1,0 -BRF:42 -BRH:35 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/utils/sha3.js -FN:26,(anonymous_1) -FNF:1 -FNH:1 -FNDA:42,(anonymous_1) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,42 -DA:28,2 -DA:29,2 -DA:31,2 -DA:34,42 -LF:8 -LH:8 -BRDA:27,1,0,2 -BRDA:27,1,1,40 -BRDA:27,2,0,42 -BRDA:27,2,1,2 -BRDA:28,3,0,2 -BRDA:28,3,1,0 -BRDA:28,4,0,2 -BRDA:28,4,1,2 -BRF:8 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/function.js -FN:31,(anonymous_1) -FN:33,(anonymous_2) -FN:36,(anonymous_3) -FN:44,(anonymous_4) -FN:50,(anonymous_5) -FN:63,(anonymous_6) -FN:79,(anonymous_7) -FN:84,(anonymous_8) -FN:104,(anonymous_9) -FN:105,(anonymous_10) -FN:117,(anonymous_11) -FN:127,(anonymous_12) -FN:128,(anonymous_13) -FN:144,(anonymous_14) -FN:162,(anonymous_15) -FN:175,(anonymous_16) -FN:185,(anonymous_17) -FN:195,(anonymous_18) -FN:214,(anonymous_19) -FN:232,(anonymous_20) -FNF:20 -FNH:19 -FNDA:68,(anonymous_1) -FNDA:94,(anonymous_2) -FNDA:42,(anonymous_3) -FNDA:16,(anonymous_4) -FNDA:8,(anonymous_5) -FNDA:16,(anonymous_6) -FNDA:16,(anonymous_7) -FNDA:9,(anonymous_8) -FNDA:8,(anonymous_9) -FNDA:14,(anonymous_10) -FNDA:1,(anonymous_11) -FNDA:5,(anonymous_12) -FNDA:16,(anonymous_13) -FNDA:1,(anonymous_14) -FNDA:0,(anonymous_15) -FNDA:68,(anonymous_16) -FNDA:68,(anonymous_17) -FNDA:2,(anonymous_18) -FNDA:9,(anonymous_19) -FNDA:68,(anonymous_20) -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:31,1 -DA:32,68 -DA:33,68 -DA:34,94 -DA:36,68 -DA:37,42 -DA:39,68 -DA:40,68 -DA:41,68 -DA:44,1 -DA:45,16 -DA:46,4 -DA:50,1 -DA:51,8 -DA:52,2 -DA:63,1 -DA:64,16 -DA:65,16 -DA:66,9 -DA:68,16 -DA:69,16 -DA:70,16 -DA:79,1 -DA:80,16 -DA:84,1 -DA:85,9 -DA:86,0 -DA:89,9 -DA:90,9 -DA:91,9 -DA:104,1 -DA:105,14 -DA:106,8 -DA:107,8 -DA:108,8 -DA:111,8 -DA:112,7 -DA:113,7 -DA:116,1 -DA:117,1 -DA:118,1 -DA:127,1 -DA:128,16 -DA:129,5 -DA:130,5 -DA:132,5 -DA:133,4 -DA:136,1 -DA:144,1 -DA:145,1 -DA:146,1 -DA:147,1 -DA:149,1 -DA:150,1 -DA:153,0 -DA:162,1 -DA:163,0 -DA:164,0 -DA:166,0 -DA:175,1 -DA:176,68 -DA:185,1 -DA:186,68 -DA:195,1 -DA:196,2 -DA:197,2 -DA:198,2 -DA:199,2 -DA:201,2 -DA:214,1 -DA:215,9 -DA:218,9 -DA:219,3 -DA:223,6 -DA:232,1 -DA:233,68 -DA:234,68 -DA:235,68 -DA:236,68 -DA:237,68 -DA:238,68 -DA:239,68 -DA:240,68 -DA:241,67 -DA:243,68 -DA:246,1 -LF:90 -LH:85 -BRDA:45,1,0,4 -BRDA:45,1,1,12 -BRDA:51,2,0,2 -BRDA:51,2,1,6 -BRDA:51,3,0,8 -BRDA:51,3,1,4 -BRDA:65,4,0,9 -BRDA:65,4,1,7 -BRDA:65,5,0,16 -BRDA:65,5,1,9 -BRDA:85,6,0,0 -BRDA:85,6,1,9 -BRDA:89,7,0,9 -BRDA:89,7,1,0 -BRDA:91,8,0,9 -BRDA:91,8,1,0 -BRDA:111,9,0,7 -BRDA:111,9,1,1 -BRDA:132,10,0,4 -BRDA:132,10,1,1 -BRDA:149,11,0,1 -BRDA:149,11,1,0 -BRDA:202,12,0,2 -BRDA:202,12,1,0 -BRDA:218,13,0,3 -BRDA:218,13,1,6 -BRDA:240,14,0,67 -BRDA:240,14,1,1 -BRF:28 -BRH:23 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/namereg.js -FNF:0 -FNH:0 -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,1 -DA:29,1 -LF:5 -LH:5 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/transfer.js -FN:35,(anonymous_1) -FN:50,(anonymous_2) -FN:65,(anonymous_3) -FN:83,(anonymous_4) -FNF:4 -FNH:2 -FNDA:1,(anonymous_1) -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:1,(anonymous_4) -DA:23,1 -DA:24,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:38,0 -DA:41,1 -DA:42,0 -DA:45,1 -DA:46,1 -DA:47,1 -DA:50,0 -DA:51,0 -DA:65,1 -DA:66,0 -DA:83,1 -DA:84,1 -DA:85,1 -DA:91,1 -LF:19 -LH:14 -BRDA:37,1,0,0 -BRDA:37,1,1,1 -BRDA:41,2,0,0 -BRDA:41,2,1,1 -BRDA:45,3,0,1 -BRDA:45,3,1,0 -BRF:6 -BRH:3 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/db.js -FN:25,(anonymous_1) -FN:30,(anonymous_2) -FN:36,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:616,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:25,1 -DA:26,154 -DA:28,154 -DA:30,154 -DA:31,616 -DA:32,616 -DA:36,1 -DA:37,154 -DA:43,154 -DA:49,154 -DA:55,154 -DA:61,154 -DA:66,1 -LF:14 -LH:14 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/shh.js -FN:28,(anonymous_1) -FN:33,(anonymous_2) -FN:40,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:924,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:24,1 -DA:25,1 -DA:28,1 -DA:29,154 -DA:31,154 -DA:33,154 -DA:34,924 -DA:35,924 -DA:40,1 -DA:42,154 -DA:49,154 -DA:55,154 -DA:61,154 -DA:67,154 -DA:73,154 -DA:82,154 -DA:95,154 -DA:105,1 -LF:19 -LH:19 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/methods/net.js -FN:26,(anonymous_1) -FN:31,(anonymous_2) -FN:38,(anonymous_3) -FNF:3 -FNH:3 -FNDA:154,(anonymous_1) -FNDA:308,(anonymous_2) -FNDA:154,(anonymous_3) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,154 -DA:29,154 -DA:31,154 -DA:32,308 -DA:33,308 -DA:38,1 -DA:39,154 -DA:52,1 -LF:11 -LH:11 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/settings.js -FN:3,(anonymous_1) -FNF:1 -FNH:1 -FNDA:167,(anonymous_1) -DA:3,1 -DA:4,167 -DA:5,167 -DA:8,1 -LF:4 -LH:4 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/extend.js -FN:8,(anonymous_1) -FN:10,(anonymous_2) -FN:23,(anonymous_3) -FN:30,(anonymous_4) -FNF:4 -FNH:4 -FNDA:154,(anonymous_1) -FNDA:157,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:618,(anonymous_4) -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:8,1 -DA:10,154 -DA:12,157 -DA:13,157 -DA:14,1 -DA:15,1 -DA:17,1 -DA:19,156 -DA:22,157 -DA:23,2 -DA:24,2 -DA:25,2 -DA:29,157 -DA:30,156 -DA:31,618 -DA:32,618 -DA:37,154 -DA:38,154 -DA:39,154 -DA:40,154 -DA:42,154 -DA:47,1 -LF:26 -LH:26 -BRDA:13,1,0,1 -BRDA:13,1,1,156 -BRDA:14,2,0,1 -BRDA:14,2,1,0 -BRDA:22,3,0,2 -BRDA:22,3,1,155 -BRDA:29,4,0,156 -BRDA:29,4,1,1 -BRF:8 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/batch.js -FN:26,(anonymous_1) -FN:37,(anonymous_2) -FN:46,(anonymous_3) -FN:48,(anonymous_4) -FN:50,(anonymous_5) -FN:52,(anonymous_6) -FNF:6 -FNH:6 -FNDA:4,(anonymous_1) -FNDA:8,(anonymous_2) -FNDA:4,(anonymous_3) -FNDA:4,(anonymous_4) -FNDA:8,(anonymous_5) -FNDA:8,(anonymous_6) -DA:23,1 -DA:24,1 -DA:26,1 -DA:27,4 -DA:28,4 -DA:37,1 -DA:38,8 -DA:46,1 -DA:47,4 -DA:48,4 -DA:49,4 -DA:50,4 -DA:51,8 -DA:53,8 -DA:55,8 -DA:56,2 -DA:59,6 -DA:65,1 -LF:18 -LH:18 -BRDA:49,1,0,4 -BRDA:49,1,1,0 -BRDA:51,2,0,8 -BRDA:51,2,1,0 -BRDA:53,3,0,8 -BRDA:53,3,1,0 -BRDA:55,4,0,2 -BRDA:55,4,1,6 -BRDA:59,5,0,6 -BRDA:59,5,1,0 -BRF:10 -BRH:6 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/httpprovider.js -FN:48,(anonymous_1) -FN:59,(anonymous_2) -FN:73,(anonymous_3) -FN:100,(anonymous_4) -FN:103,(anonymous_5) -FN:131,(anonymous_6) -FNF:6 -FNH:6 -FNDA:3,(anonymous_1) -FNDA:3,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:1,(anonymous_5) -FNDA:1,(anonymous_6) -DA:27,2 -DA:30,2 -DA:33,2 -DA:34,0 -DA:37,2 -DA:38,0 -DA:42,2 -DA:48,2 -DA:49,3 -DA:59,2 -DA:60,3 -DA:61,3 -DA:62,3 -DA:63,3 -DA:73,2 -DA:74,2 -DA:76,2 -DA:77,2 -DA:79,0 -DA:82,2 -DA:84,2 -DA:85,2 -DA:87,0 -DA:90,2 -DA:100,2 -DA:101,1 -DA:103,1 -DA:104,1 -DA:105,1 -DA:106,1 -DA:108,1 -DA:109,1 -DA:111,0 -DA:114,1 -DA:118,1 -DA:119,1 -DA:121,0 -DA:131,2 -DA:132,1 -DA:133,1 -DA:139,1 -DA:141,0 -DA:145,2 -LF:43 -LH:36 -BRDA:33,1,0,0 -BRDA:33,1,1,2 -BRDA:33,2,0,2 -BRDA:33,2,1,0 -BRDA:37,3,0,0 -BRDA:37,3,1,2 -BRDA:37,4,0,2 -BRDA:37,4,1,0 -BRDA:49,5,0,3 -BRDA:49,5,1,3 -BRDA:104,6,0,1 -BRDA:104,6,1,0 -BRF:12 -BRH:7 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/lib/web3/ipcprovider.js -FN:29,(anonymous_1) -FN:41,(anonymous_2) -FN:44,(anonymous_3) -FN:50,(anonymous_4) -FN:60,(anonymous_5) -FN:79,(anonymous_6) -FN:82,(anonymous_7) -FN:86,(anonymous_8) -FN:90,(anonymous_9) -FN:101,(anonymous_10) -FN:113,(anonymous_11) -FN:130,(anonymous_12) -FN:156,(anonymous_13) -FN:169,(anonymous_14) -FN:184,(anonymous_15) -FN:194,(anonymous_16) -FN:218,(anonymous_17) -FN:235,(anonymous_18) -FN:258,(anonymous_19) -FN:263,(anonymous_20) -FN:281,(anonymous_21) -FN:298,(anonymous_22) -FNF:22 -FNH:10 -FNDA:5,(anonymous_1) -FNDA:2,(anonymous_2) -FNDA:2,(anonymous_3) -FNDA:0,(anonymous_4) -FNDA:0,(anonymous_5) -FNDA:5,(anonymous_6) -FNDA:0,(anonymous_7) -FNDA:0,(anonymous_8) -FNDA:0,(anonymous_9) -FNDA:2,(anonymous_10) -FNDA:2,(anonymous_11) -FNDA:0,(anonymous_12) -FNDA:1,(anonymous_13) -FNDA:0,(anonymous_14) -FNDA:3,(anonymous_15) -FNDA:1,(anonymous_16) -FNDA:1,(anonymous_17) -FNDA:0,(anonymous_18) -FNDA:0,(anonymous_19) -FNDA:0,(anonymous_20) -FNDA:0,(anonymous_21) -FNDA:0,(anonymous_22) -DA:25,2 -DA:26,2 -DA:29,2 -DA:30,5 -DA:31,5 -DA:32,5 -DA:33,5 -DA:35,5 -DA:37,5 -DA:41,5 -DA:44,2 -DA:46,2 -DA:49,2 -DA:50,0 -DA:51,0 -DA:52,0 -DA:55,2 -DA:59,2 -DA:60,0 -DA:61,0 -DA:62,0 -DA:66,2 -DA:67,1 -DA:68,1 -DA:79,2 -DA:80,5 -DA:82,5 -DA:83,0 -DA:86,5 -DA:87,0 -DA:90,5 -DA:91,0 -DA:101,2 -DA:102,2 -DA:106,2 -DA:113,2 -DA:116,2 -DA:117,0 -DA:119,2 -DA:121,2 -DA:122,2 -DA:126,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:135,0 -DA:139,2 -DA:140,2 -DA:142,2 -DA:143,2 -DA:146,2 -DA:156,2 -DA:157,1 -DA:158,1 -DA:160,1 -DA:161,1 -DA:169,2 -DA:170,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:184,2 -DA:185,3 -DA:188,3 -DA:189,2 -DA:191,3 -DA:194,2 -DA:196,1 -DA:197,1 -DA:200,1 -DA:201,1 -DA:203,1 -DA:205,1 -DA:206,1 -DA:208,0 -DA:211,1 -DA:214,0 -DA:218,2 -DA:220,1 -DA:221,1 -DA:224,1 -DA:225,1 -DA:235,2 -DA:237,0 -DA:238,0 -DA:240,0 -DA:242,0 -DA:243,0 -DA:246,0 -DA:247,0 -DA:258,2 -DA:259,0 -DA:261,0 -DA:263,0 -DA:264,0 -DA:265,0 -DA:267,0 -DA:270,0 -DA:271,0 -DA:281,2 -DA:282,0 -DA:284,0 -DA:285,0 -DA:288,0 -DA:289,0 -DA:298,2 -DA:299,0 -DA:300,0 -DA:302,0 -DA:303,0 -DA:305,0 -DA:308,2 -LF:113 -LH:66 -BRDA:49,1,0,0 -BRDA:49,1,1,2 -BRDA:51,2,0,0 -BRDA:51,2,1,0 -BRDA:59,3,0,0 -BRDA:59,3,1,2 -BRDA:59,4,0,2 -BRDA:59,4,1,0 -BRDA:61,5,0,0 -BRDA:61,5,1,0 -BRDA:66,6,0,1 -BRDA:66,6,1,1 -BRDA:116,7,0,0 -BRDA:116,7,1,2 -BRDA:142,8,0,2 -BRDA:142,8,1,0 -BRDA:157,9,0,1 -BRDA:157,9,1,0 -BRDA:158,10,0,1 -BRDA:158,10,1,0 -BRDA:171,11,0,0 -BRDA:171,11,1,0 -BRDA:188,12,0,2 -BRDA:188,12,1,1 -BRDA:196,13,0,1 -BRDA:196,13,1,0 -BRDA:200,14,0,1 -BRDA:200,14,1,0 -BRDA:220,15,0,1 -BRDA:220,15,1,0 -BRDA:237,16,0,0 -BRDA:237,16,1,0 -BRDA:240,17,0,0 -BRDA:240,17,1,0 -BRDA:261,18,0,0 -BRDA:261,18,1,0 -BRDA:264,19,0,0 -BRDA:264,19,1,0 -BRDA:282,20,0,0 -BRDA:282,20,1,0 -BRF:40 -BRH:14 -end_of_record -TN: -SF:/Users/frozeman/Sites/_ethereum/mist/node_modules/web3/node_modules/utf8/utf8.js -FN:2,(anonymous_1) -FN:23,ucs2decode -FN:50,ucs2encode -FN:67,checkScalarValue -FN:77,createByte -FN:81,encodeCodePoint -FN:103,utf8encode -FN:118,readContinuationByte -FN:134,decodeSymbol -FN:200,utf8decode -FN:227,(anonymous_11) -FNF:11 -FNH:1 -FNDA:1,(anonymous_1) -FNDA:0,ucs2decode -FNDA:0,ucs2encode -FNDA:0,checkScalarValue -FNDA:0,createByte -FNDA:0,encodeCodePoint -FNDA:0,utf8encode -FNDA:0,readContinuationByte -FNDA:0,decodeSymbol -FNDA:0,utf8decode -FNDA:0,(anonymous_11) -DA:2,1 -DA:5,1 -DA:8,1 -DA:13,1 -DA:14,1 -DA:15,0 -DA:20,1 -DA:23,1 -DA:24,0 -DA:25,0 -DA:26,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:39,0 -DA:40,0 -DA:43,0 -DA:46,0 -DA:50,1 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:62,0 -DA:64,0 -DA:67,1 -DA:68,0 -DA:69,0 -DA:77,1 -DA:78,0 -DA:81,1 -DA:82,0 -DA:83,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:97,0 -DA:99,0 -DA:100,0 -DA:103,1 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:113,0 -DA:118,1 -DA:119,0 -DA:120,0 -DA:123,0 -DA:124,0 -DA:126,0 -DA:127,0 -DA:131,0 -DA:134,1 -DA:135,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:141,0 -DA:142,0 -DA:145,0 -DA:146,0 -DA:150,0 -DA:151,0 -DA:154,0 -DA:155,0 -DA:159,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:163,0 -DA:165,0 -DA:170,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:178,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:187,0 -DA:189,0 -DA:190,0 -DA:194,0 -DA:197,1 -DA:198,1 -DA:199,1 -DA:200,1 -DA:201,0 -DA:202,0 -DA:203,0 -DA:204,0 -DA:205,0 -DA:206,0 -DA:207,0 -DA:209,0 -DA:214,1 -DA:222,1 -DA:227,0 -DA:228,0 -DA:230,1 -DA:231,1 -DA:232,1 -DA:234,0 -DA:235,0 -DA:236,0 -DA:237,0 -DA:241,0 -LF:135 -LH:23 -BRDA:5,1,0,1 -BRDA:5,1,1,1 -BRDA:8,2,0,1 -BRDA:8,2,1,1 -BRDA:8,2,2,1 -BRDA:8,2,3,1 -BRDA:13,3,0,1 -BRDA:13,3,1,1 -BRDA:14,4,0,0 -BRDA:14,4,1,1 -BRDA:14,5,0,1 -BRDA:14,5,1,1 -BRDA:31,6,0,0 -BRDA:31,6,1,0 -BRDA:31,7,0,0 -BRDA:31,7,1,0 -BRDA:31,7,2,0 -BRDA:34,8,0,0 -BRDA:34,8,1,0 -BRDA:57,9,0,0 -BRDA:57,9,1,0 -BRDA:68,10,0,0 -BRDA:68,10,1,0 -BRDA:68,11,0,0 -BRDA:68,11,1,0 -BRDA:82,12,0,0 -BRDA:82,12,1,0 -BRDA:86,13,0,0 -BRDA:86,13,1,0 -BRDA:89,14,0,0 -BRDA:89,14,1,0 -BRDA:94,15,0,0 -BRDA:94,15,1,0 -BRDA:119,16,0,0 -BRDA:119,16,1,0 -BRDA:126,17,0,0 -BRDA:126,17,1,0 -BRDA:141,18,0,0 -BRDA:141,18,1,0 -BRDA:145,19,0,0 -BRDA:145,19,1,0 -BRDA:154,20,0,0 -BRDA:154,20,1,0 -BRDA:159,21,0,0 -BRDA:159,21,1,0 -BRDA:162,22,0,0 -BRDA:162,22,1,0 -BRDA:170,23,0,0 -BRDA:170,23,1,0 -BRDA:174,24,0,0 -BRDA:174,24,1,0 -BRDA:183,25,0,0 -BRDA:183,25,1,0 -BRDA:189,26,0,0 -BRDA:189,26,1,0 -BRDA:189,27,0,0 -BRDA:189,27,1,0 -BRDA:222,28,0,0 -BRDA:222,28,1,1 -BRDA:223,29,0,1 -BRDA:223,29,1,0 -BRDA:223,29,2,0 -BRDA:230,30,0,1 -BRDA:230,30,1,0 -BRDA:230,31,0,1 -BRDA:230,31,1,1 -BRDA:231,32,0,1 -BRDA:231,32,1,0 -BRDA:237,33,0,0 -BRDA:237,33,1,0 -BRF:70 -BRH:17 -end_of_record diff --git a/node_modules/web3/dist/web3-light.js b/node_modules/web3/dist/web3-light.js deleted file mode 100644 index e197a1a..0000000 --- a/node_modules/web3/dist/web3-light.js +++ /dev/null @@ -1,13272 +0,0 @@ -require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o. -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - - -},{"./address":4,"./bool":5,"./bytes":6,"./dynamicbytes":8,"./formatters":9,"./int":10,"./real":12,"./string":13,"./uint":15,"./ureal":16}],8:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - - -},{"./formatters":9,"./type":14}],9:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - - -},{"../utils/config":18,"../utils/utils":20,"./param":11,"bignumber.js":"bignumber.js"}],10:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; - -},{"./formatters":9,"./type":14}],11:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - - -},{"../utils/utils":20}],12:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; - -},{"./formatters":9,"./type":14}],13:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - - -},{"./formatters":9,"./type":14}],14:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; - -},{"./formatters":9,"./param":11}],15:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; - -},{"./formatters":9,"./type":14}],16:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; - -},{"./formatters":9,"./type":14}],17:[function(require,module,exports){ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - - -},{}],18:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - - -},{"bignumber.js":"bignumber.js"}],19:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - - -},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; - -},{"./sha3.js":19,"bignumber.js":"bignumber.js","utf8":84}],21:[function(require,module,exports){ -module.exports={ - "version": "0.17.0-alpha" -} - -},{}],22:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); -var BigNumber = require('bignumber.js'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.BigNumber = BigNumber; -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; - - -Web3.prototype.sha3 = function(string, options) { - return '0x' + sha3(string, options); -}; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - - -},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46,"bignumber.js":"bignumber.js"}],23:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - - -},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - - -},{"./errors":26,"./jsonrpc":35}],25:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 3) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; - -},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - - -},{}],27:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(require,module,exports){ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - - -},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function (callback) { - this.requestManager.stopPolling(this.filterId); - this.callbacks = []; - // remove filter async - if (callback) { - this.implementation.uninstallFilter(this.filterId, callback); - } else { - return this.implementation.uninstallFilter(this.filterId); - } -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - - -},{"../utils/utils":20,"./formatters":30}],30:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw new Error('invalid address'); -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - if (result.knownStates) { - result.knownStates = utils.toDecimal(result.knownStates); - result.pulledStates = utils.toDecimal(result.pulledStates); - } - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - - -},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// browser -if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - - -},{"./errors":26,"xmlhttprequest":17}],33:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '0' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - - -},{"bignumber.js":"bignumber.js"}],34:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - - -},{"../utils/utils":20,"./errors":26}],35:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * Aaron Kumavis - * @date 2015 - */ - -// Initialize Jsonrpc as a simple object with utility functions. -var Jsonrpc = { - messageId: 0 -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - // advance message ID - Jsonrpc.messageId++; - - return { - jsonrpc: '2.0', - id: Jsonrpc.messageId, - method: method, - params: params || [] - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.isValidResponse = function (response) { - return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response); - - function validateSingleMessage(message){ - return !!message && - !message.error && - message.jsonrpc === '2.0' && - typeof message.id === 'number' && - message.result !== undefined; // only undefined is not valid json object - } -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.toBatchPayload = function (messages) { - return messages.map(function (message) { - return Jsonrpc.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - - -},{}],36:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - - -},{"../utils/utils":20,"./errors":26}],37:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; - -},{"../method":36}],38:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'protocolVersion', - getter: 'eth_protocolVersion' - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - - -},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; - -},{"../../utils/utils":20,"../property":44}],40:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); -var formatters = require('../formatters'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [formatters.inputAddressFormatter, null, null] - }); - - var unlockAccountAndSendTransaction = new Method({ - name: 'unlockAccountAndSendTransaction', // sendTransaction - call: 'personal_signAndSendTransaction', // personal_sendTransaction - params: 2, - inputFormatter: [formatters.inputTransactionFormatter, null] - }); - - var lockAccount = new Method({ - name: 'lockAccount', - call: 'personal_lockAccount', - params: 1, - inputFormatter: [formatters.inputAddressFormatter] - }); - - return [ - newAccount, - unlockAccount, - unlockAccountAndSendTransaction, - lockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; - -},{"../formatters":30,"../method":36,"../property":44}],41:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - - -},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - - -},{"../method":36}],43:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - - -},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - - -},{"../utils/utils":20}],45:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - - -},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(require,module,exports){ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - - -},{}],47:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - - -},{"../utils/utils":20,"./formatters":30}],48:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - - -},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(require,module,exports){ - -},{}],50:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); -},{"./core":52}],52:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); -},{}],53:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); -},{"./core":52}],54:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); -},{"./core":52}],55:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); -},{"./cipher-core":51,"./core":52}],57:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); -},{"./core":52}],58:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); -},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); -},{"./core":52}],60:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); -},{"./core":52}],61:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); -},{"./cipher-core":51,"./core":52}],62:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); -},{"./cipher-core":51,"./core":52}],63:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); -},{"./cipher-core":51,"./core":52}],64:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); -},{"./cipher-core":51,"./core":52}],65:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); -},{"./cipher-core":51,"./core":52}],66:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); -},{"./cipher-core":51,"./core":52}],67:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); -},{"./cipher-core":51,"./core":52}],68:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); -},{"./cipher-core":51,"./core":52}],69:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); -},{"./cipher-core":51,"./core":52}],70:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); -},{"./cipher-core":51,"./core":52}],71:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); -},{"./core":52}],76:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); -},{"./core":52}],77:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); -},{"./core":52,"./sha256":78}],78:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); -},{"./core":52}],79:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); -},{"./core":52,"./x64-core":83}],80:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); -},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); -},{"./core":52,"./x64-core":83}],82:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); -},{"./core":52}],84:[function(require,module,exports){ -/*! https://mths.be/utf8js v2.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - var byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.0.0', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); - -},{}],"bignumber.js":[function(require,module,exports){ -'use strict'; - -module.exports = BigNumber; // jshint ignore:line - - -},{}],"web3":[function(require,module,exports){ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; - -},{"./lib/web3":22}]},{},["web3"]) -//# sourceMappingURL=web3-light.js.map diff --git a/node_modules/web3/dist/web3-light.min.js b/node_modules/web3/dist/web3-light.min.js deleted file mode 100644 index c12492d..0000000 --- a/node_modules/web3/dist/web3-light.min.js +++ /dev/null @@ -1,4 +0,0 @@ -require=function t(e,r,n){function o(a,s){if(!r[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=r[a]={exports:{}};e[a][0].call(f.exports,function(t){var r=e[a][1][t];return o(r?r:t)},f,f.exports,t,e,r,n)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;aa;a++)i.push(r.encode(t[a],o));return i}():this._inputFormatter(t,e).encode()},i.prototype.decode=function(t,e,r){var n=this;if(this.isDynamicArray(r))return function(){for(var o=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*o,64)),a=o+32,s=n.nestedName(r),c=n.staticPartLength(s),u=32*Math.floor((c+31)/32),f=[],p=0;i*u>p;p+=u)f.push(n.decode(t,a+p,s));return f}();if(this.isStaticArray(r))return function(){for(var o=n.staticArrayLength(r),i=e,a=n.nestedName(r),s=n.staticPartLength(a),c=32*Math.floor((s+31)/32),u=[],f=0;o*c>f;f+=c)u.push(n.decode(t,i+f,a));return u}();if(this.isDynamicType(r))return function(){var r=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*r,64)),a=Math.floor((i+31)/32);return n._outputFormatter(new o(t.substr(2*r,64*(1+a)),0))}();var i=this.staticPartLength(r);return this._outputFormatter(new o(t.substr(2*e,2*i)))},e.exports=i},{"./formatters":9,"./param":11}],15:[function(t,e,r){var n=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=n.formatInputInt,this._outputFormatter=n.formatOutputUInt};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],16:[function(t,e,r){var n=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=n.formatInputReal,this._outputFormatter=n.formatOutputUReal};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],17:[function(t,e,r){"use strict";"undefined"==typeof XMLHttpRequest?r.XMLHttpRequest={}:r.XMLHttpRequest=XMLHttpRequest},{}],18:[function(t,e,r){var n=t("bignumber.js"),o=["wei","kwei","Mwei","Gwei","szabo","finney","femtoether","picoether","nanoether","microether","milliether","nano","micro","milli","ether","grand","Mether","Gether","Tether","Pether","Eether","Zether","Yether","Nether","Dether","Vether","Uether"];e.exports={ETH_PADDING:32,ETH_SIGNATURE_LENGTH:4,ETH_UNITS:o,ETH_BIGNUMBER_ROUNDING_MODE:{ROUNDING_MODE:n.ROUND_DOWN},ETH_POLLING_TIMEOUT:500,defaultBlock:"latest",defaultAccount:void 0}},{"bignumber.js":"bignumber.js"}],19:[function(t,e,r){var n=t("crypto-js"),o=t("crypto-js/sha3");e.exports=function(t,e){return e&&"hex"===e.encoding&&(t.length>2&&"0x"===t.substr(0,2)&&(t=t.substr(2)),t=n.enc.Hex.parse(t)),o(t,{outputLength:256}).toString()}},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(t,e,r){var n=t("bignumber.js"),o=t("./sha3.js"),i=t("utf8"),a={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"},s=function(t,e,r){return new Array(e-t.length+1).join(r?r:"0")+t},c=function(t,e,r){return t+new Array(e-t.length+1).join(r?r:"0")},u=function(t){var e="",r=0,n=t.length;for("0x"===t.substring(0,2)&&(r=2);n>r;r+=2){var o=parseInt(t.substr(r,2),16);if(0===o)break;e+=String.fromCharCode(o)}return i.decode(e)},f=function(t){var e="",r=0,n=t.length;for("0x"===t.substring(0,2)&&(r=2);n>r;r+=2){var o=parseInt(t.substr(r,2),16);e+=String.fromCharCode(o)}return e},p=function(t){t=i.encode(t);for(var e="",r=0;rr;r++)if(parseInt(e[r],16)>7&&t[r].toUpperCase()!==t[r]||parseInt(e[r],16)<=7&&t[r].toLowerCase()!==t[r])return!1;return!0},C=function(t){if("undefined"==typeof t)return"";t=t.toLowerCase().replace("0x","");for(var e=o(t),r="0x",n=0;n7?t[n].toUpperCase():t[n];return r},F=function(t){return B(t)?t:/^[0-9a-f]{40}$/.test(t)?"0x"+t:"0x"+s(v(t).substr(2),40)},I=function(t){return t instanceof n||t&&t.constructor&&"BigNumber"===t.constructor.name},D=function(t){return"string"==typeof t||t&&t.constructor&&"String"===t.constructor.name},P=function(t){return"function"==typeof t},T=function(t){return"object"==typeof t},O=function(t){return"boolean"==typeof t},E=function(t){return t instanceof Array},M=function(t){try{return!!JSON.parse(t)}catch(e){return!1}};e.exports={padLeft:s,padRight:c,toHex:v,toDecimal:y,fromDecimal:g,toUtf8:u,toAscii:f,fromUtf8:p,fromAscii:h,transformToFullName:l,extractDisplayName:d,extractTypeName:m,toWei:w,fromWei:_,toBigNumber:x,toTwosComplement:k,toAddress:F,isBigNumber:I,isStrictAddress:B,isAddress:S,isChecksumAddress:A,toChecksumAddress:C,isFunction:P,isString:D,isObject:T,isBoolean:O,isArray:E,isJson:M}},{"./sha3.js":19,"bignumber.js":"bignumber.js",utf8:84}],21:[function(t,e,r){e.exports={version:"0.17.0-alpha"}},{}],22:[function(t,e,r){function n(t){this._requestManager=new o(t),this.currentProvider=t,this.eth=new a(this),this.db=new s(this),this.shh=new c(this),this.net=new u(this),this.personal=new f(this),this.settings=new p,this.version={api:h.version},this.providers={HttpProvider:v,IpcProvider:b},this._extend=m(this),this._extend({properties:w()})}var o=t("./web3/requestmanager"),i=t("./web3/iban"),a=t("./web3/methods/eth"),s=t("./web3/methods/db"),c=t("./web3/methods/shh"),u=t("./web3/methods/net"),f=t("./web3/methods/personal"),p=t("./web3/settings"),h=t("./version.json"),l=t("./utils/utils"),d=t("./utils/sha3"),m=t("./web3/extend"),y=t("./web3/batch"),g=t("./web3/property"),v=t("./web3/httpprovider"),b=t("./web3/ipcprovider"),_=t("bignumber.js");n.providers={HttpProvider:v,IpcProvider:b},n.prototype.setProvider=function(t){this._requestManager.setProvider(t),this.currentProvider=t},n.prototype.reset=function(t){this._requestManager.reset(t),this.settings=new p},n.prototype.BigNumber=_,n.prototype.toHex=l.toHex,n.prototype.toAscii=l.toAscii,n.prototype.toUtf8=l.toUtf8,n.prototype.fromAscii=l.fromAscii,n.prototype.fromUtf8=l.fromUtf8,n.prototype.toDecimal=l.toDecimal,n.prototype.fromDecimal=l.fromDecimal,n.prototype.toBigNumber=l.toBigNumber,n.prototype.toWei=l.toWei,n.prototype.fromWei=l.fromWei,n.prototype.isAddress=l.isAddress,n.prototype.isChecksumAddress=l.isChecksumAddress,n.prototype.toChecksumAddress=l.toChecksumAddress,n.prototype.isIBAN=l.isIBAN,n.prototype.sha3=function(t,e){return"0x"+d(t,e)},n.prototype.fromICAP=function(t){var e=new i(t);return e.address()};var w=function(){return[new g({name:"version.node",getter:"web3_clientVersion"}),new g({name:"version.network",getter:"net_version",inputFormatter:l.toDecimal}),new g({name:"version.ethereum",getter:"eth_protocolVersion",inputFormatter:l.toDecimal}),new g({name:"version.whisper",getter:"shh_version",inputFormatter:l.toDecimal})]};n.prototype.isConnected=function(){return this.currentProvider&&this.currentProvider.isConnected()},n.prototype.createBatch=function(){return new y(this)},e.exports=n},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46,"bignumber.js":"bignumber.js"}],23:[function(t,e,r){var n=t("../utils/sha3"),o=t("./event"),i=t("./formatters"),a=t("../utils/utils"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,r){this._requestManager=t,this._json=e,this._address=r};u.prototype.encode=function(t){t=t||{};var e={};return["fromBlock","toBlock"].filter(function(e){return void 0!==t[e]}).forEach(function(r){e[r]=i.inputBlockNumberFormatter(t[r])}),e.address=this._address,e},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=t.topics[0].slice(2),r=this._json.filter(function(t){return e===n(a.transformToFullName(t))})[0];if(!r)return console.warn("cannot find event for log"),t;var i=new o(this._requestManager,r,this._address);return i.decode(t)},u.prototype.execute=function(t,e){a.isFunction(arguments[arguments.length-1])&&(e=arguments[arguments.length-1],1===arguments.length&&(t=null));var r=this.encode(t),n=this.decode.bind(this);return new s(this._requestManager,r,c.eth(),n,e)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this);t.allEvents=e},e.exports=u},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(t,e,r){var n=t("./jsonrpc"),o=t("./errors"),i=function(t){this.requestManager=t._requestManager,this.requests=[]};i.prototype.add=function(t){this.requests.push(t)},i.prototype.execute=function(){var t=this.requests;this.requestManager.sendBatch(t,function(e,r){r=r||[],t.map(function(t,e){return r[e]||{}}).forEach(function(e,r){if(t[r].callback){if(!n.isValidResponse(e))return t[r].callback(o.InvalidResponse(e));t[r].callback(null,t[r].format?t[r].format(e.result):e.result)}})})},e.exports=i},{"./errors":26,"./jsonrpc":35}],25:[function(t,e,r){var n=t("../utils/utils"),o=t("../solidity/coder"),i=t("./event"),a=t("./function"),s=t("./allevents"),c=function(t,e){return t.filter(function(t){return"constructor"===t.type&&t.inputs.length===e.length}).map(function(t){return t.inputs.map(function(t){return t.type})}).map(function(t){return o.encodeParams(t,e)})[0]||""},u=function(t){t.abi.filter(function(t){return"function"===t.type}).map(function(e){return new a(t._eth,e,t.address)}).forEach(function(e){e.attachToContract(t)})},f=function(t){var e=t.abi.filter(function(t){return"event"===t.type}),r=new s(t._eth._requestManager,e,t.address);r.attachToContract(t),e.map(function(e){return new i(t._eth._requestManager,e,t.address)}).forEach(function(e){e.attachToContract(t)})},p=function(t,e){var r=0,n=!1,o=t._eth.filter("latest",function(i){if(!i&&!n)if(r++,r>50){if(o.stopWatching(),n=!0,!e)throw new Error("Contract transaction couldn't be found after 50 blocks");e(new Error("Contract transaction couldn't be found after 50 blocks"))}else t._eth.getTransactionReceipt(t.transactionHash,function(r,i){i&&!n&&t._eth.getCode(i.contractAddress,function(r,a){if(!n&&a)if(o.stopWatching(),n=!0,a.length>3)t.address=i.contractAddress,u(t),f(t),e&&e(null,t);else{if(!e)throw new Error("The contract code couldn't be stored, please check your gas amount.");e(new Error("The contract code couldn't be stored, please check your gas amount."))}})})})},h=function(t,e){this.eth=t,this.abi=e,this["new"]=function(){var t,e=new l(this.eth,this.abi),r={},o=Array.prototype.slice.call(arguments);n.isFunction(o[o.length-1])&&(t=o.pop());var i=o[o.length-1];n.isObject(i)&&!n.isArray(i)&&(r=o.pop());var a=c(this.abi,o);if(r.data+=a,t)this.eth.sendTransaction(r,function(r,n){r?t(r):(e.transactionHash=n,t(null,e),p(e,t))});else{var s=this.eth.sendTransaction(r);e.transactionHash=s,p(e)}return e},this["new"].getData=this.getData.bind(this)};h.prototype.at=function(t,e){var r=new l(this.eth,this.abi,t);return u(r),f(r),e&&e(null,r),r},h.prototype.getData=function(){var t={},e=Array.prototype.slice.call(arguments),r=e[e.length-1];n.isObject(r)&&!n.isArray(r)&&(t=e.pop());var o=c(this.abi,e);return t.data+=o,t.data};var l=function(t,e,r){this._eth=t,this.transactionHash=null,this.address=r,this.abi=e};e.exports=h},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(t,e,r){e.exports={InvalidNumberOfParams:function(){return new Error("Invalid number of input parameters")},InvalidConnection:function(t){return new Error("CONNECTION ERROR: Couldn't connect to node "+t+".")},InvalidProvider:function(){return new Error("Provider not set or invalid")},InvalidResponse:function(t){var e=t&&t.error&&t.error.message?t.error.message:"Invalid JSON RPC response: "+JSON.stringify(t);return new Error(e)}}},{}],27:[function(t,e,r){var n=t("../utils/utils"),o=t("../solidity/coder"),i=t("./formatters"),a=t("../utils/sha3"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,r){this._requestManager=t,this._params=e.inputs,this._name=n.transformToFullName(e),this._address=r,this._anonymous=e.anonymous};u.prototype.types=function(t){return this._params.filter(function(e){return e.indexed===t}).map(function(t){return t.type})},u.prototype.displayName=function(){return n.extractDisplayName(this._name)},u.prototype.typeName=function(){return n.extractTypeName(this._name)},u.prototype.signature=function(){return a(this._name)},u.prototype.encode=function(t,e){t=t||{},e=e||{};var r={};["fromBlock","toBlock"].filter(function(t){return void 0!==e[t]}).forEach(function(t){r[t]=i.inputBlockNumberFormatter(e[t])}),r.topics=[],r.address=this._address,this._anonymous||r.topics.push("0x"+this.signature());var a=this._params.filter(function(t){return t.indexed===!0}).map(function(e){var r=t[e.name];return void 0===r||null===r?null:n.isArray(r)?r.map(function(t){return"0x"+o.encodeParam(e.type,t)}):"0x"+o.encodeParam(e.type,r)});return r.topics=r.topics.concat(a),r},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=this._anonymous?t.topics:t.topics.slice(1),r=e.map(function(t){return t.slice(2)}).join(""),n=o.decodeParams(this.types(!0),r),a=t.data.slice(2),s=o.decodeParams(this.types(!1),a),c=i.outputLogFormatter(t);return c.event=this.displayName(),c.address=t.address,c.args=this._params.reduce(function(t,e){return t[e.name]=e.indexed?n.shift():s.shift(),t},{}),delete c.data,delete c.topics,c},u.prototype.execute=function(t,e,r){n.isFunction(arguments[arguments.length-1])&&(r=arguments[arguments.length-1],2===arguments.length&&(e=null),1===arguments.length&&(e=null,t={}));var o=this.encode(t,e),i=this.decode.bind(this);return new s(this._requestManager,o,c.eth(),i,r)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this),r=this.displayName();t[r]||(t[r]=e),t[r][this.typeName()]=this.execute.bind(this,t)},e.exports=u},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(t,e,r){var n=t("./formatters"),o=t("./../utils/utils"),i=t("./method"),a=t("./property"),s=function(t){var e=function(e){var r;e.property?(t[e.property]||(t[e.property]={}),r=t[e.property]):r=t,e.methods&&e.methods.forEach(function(e){e.attachToObject(r),e.setRequestManager(t._requestManager)}),e.properties&&e.properties.forEach(function(e){e.attachToObject(r),e.setRequestManager(t._requestManager)})};return e.formatters=n,e.utils=o,e.Method=i,e.Property=a,e};e.exports=s},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(t,e,r){var n=t("./formatters"),o=t("../utils/utils"),i=function(t){return null===t||"undefined"==typeof t?null:(t=String(t),0===t.indexOf("0x")?t:o.fromUtf8(t))},a=function(t){return o.isString(t)?t:(t=t||{},t.topics=t.topics||[],t.topics=t.topics.map(function(t){return o.isArray(t)?t.map(i):i(t)}),{topics:t.topics,from:t.from,to:t.to,address:t.address,fromBlock:n.inputBlockNumberFormatter(t.fromBlock),toBlock:n.inputBlockNumberFormatter(t.toBlock)})},s=function(t,e){o.isString(t.options)||t.get(function(t,r){t&&e(t),o.isArray(r)&&r.forEach(function(t){e(null,t)})})},c=function(t){var e=function(e,r){return e?t.callbacks.forEach(function(t){t(e)}):void(o.isArray(r)&&r.forEach(function(e){e=t.formatter?t.formatter(e):e,t.callbacks.forEach(function(t){t(null,e)})}))};t.requestManager.startPolling({method:t.implementation.poll.call,params:[t.filterId]},t.filterId,e,t.stopWatching.bind(t))},u=function(t,e,r,n,o){var i=this,u={};return r.forEach(function(e){e.setRequestManager(t),e.attachToObject(u)}),this.requestManager=t, -this.options=a(e),this.implementation=u,this.filterId=null,this.callbacks=[],this.getLogsCallbacks=[],this.pollFilters=[],this.formatter=n,this.implementation.newFilter(this.options,function(t,e){if(t)i.callbacks.forEach(function(e){e(t)});else if(i.filterId=e,i.getLogsCallbacks.forEach(function(t){i.get(t)}),i.getLogsCallbacks=[],i.callbacks.forEach(function(t){s(i,t)}),i.callbacks.length>0&&c(i),"function"==typeof o)return i.watch(o)}),this};u.prototype.watch=function(t){return this.callbacks.push(t),this.filterId&&(s(this,t),c(this)),this},u.prototype.stopWatching=function(t){return this.requestManager.stopPolling(this.filterId),this.callbacks=[],t?void this.implementation.uninstallFilter(this.filterId,t):this.implementation.uninstallFilter(this.filterId)},u.prototype.get=function(t){var e=this;if(!o.isFunction(t)){if(null===this.filterId)throw new Error("Filter ID Error: filter().get() can't be chained synchronous, please provide a callback for the get() method.");var r=this.implementation.getLogs(this.filterId);return r.map(function(t){return e.formatter?e.formatter(t):t})}return null===this.filterId?this.getLogsCallbacks.push(t):this.implementation.getLogs(this.filterId,function(r,n){r?t(r):t(null,n.map(function(t){return e.formatter?e.formatter(t):t}))}),this},e.exports=u},{"../utils/utils":20,"./formatters":30}],30:[function(t,e,r){var n=t("../utils/utils"),o=t("../utils/config"),i=t("./iban"),a=function(t){return n.toBigNumber(t)},s=function(t){return"latest"===t||"pending"===t||"earliest"===t},c=function(t){return void 0===t?o.defaultBlock:u(t)},u=function(t){return void 0===t?void 0:s(t)?t:n.toHex(t)},f=function(t){return t.from=t.from||o.defaultAccount,t.from&&(t.from=v(t.from)),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=n.fromDecimal(t[e])}),t},p=function(t){return t.from=t.from||o.defaultAccount,t.from=v(t.from),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=n.fromDecimal(t[e])}),t},h=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),t.nonce=n.toDecimal(t.nonce),t.gas=n.toDecimal(t.gas),t.gasPrice=n.toBigNumber(t.gasPrice),t.value=n.toBigNumber(t.value),t},l=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),t.cumulativeGasUsed=n.toDecimal(t.cumulativeGasUsed),t.gasUsed=n.toDecimal(t.gasUsed),n.isArray(t.logs)&&(t.logs=t.logs.map(function(t){return m(t)})),t},d=function(t){return t.gasLimit=n.toDecimal(t.gasLimit),t.gasUsed=n.toDecimal(t.gasUsed),t.size=n.toDecimal(t.size),t.timestamp=n.toDecimal(t.timestamp),null!==t.number&&(t.number=n.toDecimal(t.number)),t.difficulty=n.toBigNumber(t.difficulty),t.totalDifficulty=n.toBigNumber(t.totalDifficulty),n.isArray(t.transactions)&&t.transactions.forEach(function(t){return n.isString(t)?void 0:h(t)}),t},m=function(t){return null!==t.blockNumber&&(t.blockNumber=n.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=n.toDecimal(t.transactionIndex)),null!==t.logIndex&&(t.logIndex=n.toDecimal(t.logIndex)),t},y=function(t){return t.ttl=n.fromDecimal(t.ttl),t.workToProve=n.fromDecimal(t.workToProve),t.priority=n.fromDecimal(t.priority),n.isArray(t.topics)||(t.topics=t.topics?[t.topics]:[]),t.topics=t.topics.map(function(t){return 0===t.indexOf("0x")?t:n.fromUtf8(t)}),t},g=function(t){return t.expiry=n.toDecimal(t.expiry),t.sent=n.toDecimal(t.sent),t.ttl=n.toDecimal(t.ttl),t.workProved=n.toDecimal(t.workProved),t.topics||(t.topics=[]),t.topics=t.topics.map(function(t){return n.toAscii(t)}),t},v=function(t){var e=new i(t);if(e.isValid()&&e.isDirect())return"0x"+e.address();if(n.isStrictAddress(t))return t;if(n.isAddress(t))return"0x"+t;throw new Error("invalid address")},b=function(t){return t.startingBlock=n.toDecimal(t.startingBlock),t.currentBlock=n.toDecimal(t.currentBlock),t.highestBlock=n.toDecimal(t.highestBlock),t.knownStates&&(t.knownStates=n.toDecimal(t.knownStates),t.pulledStates=n.toDecimal(t.pulledStates)),t};e.exports={inputDefaultBlockNumberFormatter:c,inputBlockNumberFormatter:u,inputCallFormatter:f,inputTransactionFormatter:p,inputAddressFormatter:v,inputPostFormatter:y,outputBigNumberFormatter:a,outputTransactionFormatter:h,outputTransactionReceiptFormatter:l,outputBlockFormatter:d,outputLogFormatter:m,outputPostFormatter:g,outputSyncingFormatter:b}},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(t,e,r){var n=t("../solidity/coder"),o=t("../utils/utils"),i=t("./formatters"),a=t("../utils/sha3"),s=function(t,e,r){this._eth=t,this._inputTypes=e.inputs.map(function(t){return t.type}),this._outputTypes=e.outputs.map(function(t){return t.type}),this._constant=e.constant,this._name=o.transformToFullName(e),this._address=r};s.prototype.extractCallback=function(t){return o.isFunction(t[t.length-1])?t.pop():void 0},s.prototype.extractDefaultBlock=function(t){return t.length>this._inputTypes.length&&!o.isObject(t[t.length-1])?i.inputDefaultBlockNumberFormatter(t.pop()):void 0},s.prototype.toPayload=function(t){var e={};return t.length>this._inputTypes.length&&o.isObject(t[t.length-1])&&(e=t[t.length-1]),e.to=this._address,e.data="0x"+this.signature()+n.encodeParams(this._inputTypes,t),e},s.prototype.signature=function(){return a(this._name).slice(0,8)},s.prototype.unpackOutput=function(t){if(t){t=t.length>=2?t.slice(2):t;var e=n.decodeParams(this._outputTypes,t);return 1===e.length?e[0]:e}},s.prototype.call=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),r=this.extractDefaultBlock(t),n=this.toPayload(t);if(!e){var o=this._eth.call(n,r);return this.unpackOutput(o)}var i=this;this._eth.call(n,r,function(t,r){e(t,i.unpackOutput(r))})},s.prototype.sendTransaction=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),r=this.toPayload(t);return e?void this._eth.sendTransaction(r,e):this._eth.sendTransaction(r)},s.prototype.estimateGas=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),r=this.toPayload(t);return e?void this._eth.estimateGas(r,e):this._eth.estimateGas(r)},s.prototype.getData=function(){var t=Array.prototype.slice.call(arguments),e=this.toPayload(t);return e.data},s.prototype.displayName=function(){return o.extractDisplayName(this._name)},s.prototype.typeName=function(){return o.extractTypeName(this._name)},s.prototype.request=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),r=this.toPayload(t),n=this.unpackOutput.bind(this);return{method:this._constant?"eth_call":"eth_sendTransaction",callback:e,params:[r],format:n}},s.prototype.execute=function(){var t=!this._constant;return t?this.sendTransaction.apply(this,Array.prototype.slice.call(arguments)):this.call.apply(this,Array.prototype.slice.call(arguments))},s.prototype.attachToContract=function(t){var e=this.execute.bind(this);e.request=this.request.bind(this),e.call=this.call.bind(this),e.sendTransaction=this.sendTransaction.bind(this),e.estimateGas=this.estimateGas.bind(this),e.getData=this.getData.bind(this);var r=this.displayName();t[r]||(t[r]=e),t[r][this.typeName()]=e},e.exports=s},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(t,e,r){"use strict";var n,o=t("./errors");n="undefined"!=typeof window&&window.XMLHttpRequest?window.XMLHttpRequest:t("xmlhttprequest").XMLHttpRequest;var i=function(t){this.host=t||"http://localhost:8545"};i.prototype.prepareRequest=function(t){var e=new n;return e.open("POST",this.host,t),e.setRequestHeader("Content-Type","application/json"),e},i.prototype.send=function(t){var e=this.prepareRequest(!1);try{e.send(JSON.stringify(t))}catch(r){throw o.InvalidConnection(this.host)}var n=e.responseText;try{n=JSON.parse(n)}catch(i){throw o.InvalidResponse(e.responseText)}return n},i.prototype.sendAsync=function(t,e){var r=this.prepareRequest(!0);r.onreadystatechange=function(){if(4===r.readyState){var t=r.responseText,n=null;try{t=JSON.parse(t)}catch(i){n=o.InvalidResponse(r.responseText)}e(n,t)}};try{r.send(JSON.stringify(t))}catch(n){e(o.InvalidConnection(this.host))}},i.prototype.isConnected=function(){try{return this.send({id:9999999999,jsonrpc:"2.0",method:"net_listening",params:[]}),!0}catch(t){return!1}},e.exports=i},{"./errors":26,xmlhttprequest:17}],33:[function(t,e,r){var n=t("bignumber.js"),o=function(t,e){for(var r=t;r.length<2*e;)r="0"+r;return r},i=function(t){var e="A".charCodeAt(0),r="Z".charCodeAt(0);return t=t.toUpperCase(),t=t.substr(4)+t.substr(0,4),t.split("").map(function(t){var n=t.charCodeAt(0);return n>=e&&r>=n?n-e+10:t}).join("")},a=function(t){for(var e,r=t;r.length>2;)e=r.slice(0,9),r=parseInt(e,10)%97+r.slice(e.length);return parseInt(r,10)%97},s=function(t){this._iban=t};s.fromAddress=function(t){var e=new n(t,16),r=e.toString(36),i=o(r,15);return s.fromBban(i.toUpperCase())},s.fromBban=function(t){var e="XE",r=a(i(e+"00"+t)),n=("0"+(98-r)).slice(-2);return new s(e+n+t)},s.createIndirect=function(t){return s.fromBban("ETH"+t.institution+t.identifier)},s.isValid=function(t){var e=new s(t);return e.isValid()},s.prototype.isValid=function(){return/^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban)&&1===a(i(this._iban))},s.prototype.isDirect=function(){return 34===this._iban.length||35===this._iban.length},s.prototype.isIndirect=function(){return 20===this._iban.length},s.prototype.checksum=function(){return this._iban.substr(2,2)},s.prototype.institution=function(){return this.isIndirect()?this._iban.substr(7,4):""},s.prototype.client=function(){return this.isIndirect()?this._iban.substr(11):""},s.prototype.address=function(){if(this.isDirect()){var t=this._iban.substr(4),e=new n(t,36);return o(e.toString(16),20)}return""},s.prototype.toString=function(){return this._iban},e.exports=s},{"bignumber.js":"bignumber.js"}],34:[function(t,e,r){"use strict";var n=t("../utils/utils"),o=t("./errors"),i=function(t,e){var r=this;this.responseCallbacks={},this.path=t,this.connection=e.connect({path:this.path}),this.connection.on("error",function(t){console.error("IPC Connection Error",t),r._timeout()}),this.connection.on("end",function(){r._timeout()}),this.connection.on("data",function(t){r._parseResponse(t.toString()).forEach(function(t){var e=null;n.isArray(t)?t.forEach(function(t){r.responseCallbacks[t.id]&&(e=t.id)}):e=t.id,r.responseCallbacks[e]&&(r.responseCallbacks[e](null,t),delete r.responseCallbacks[e])})})};i.prototype._parseResponse=function(t){var e=this,r=[],n=t.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|");return n.forEach(function(t){e.lastChunk&&(t=e.lastChunk+t);var n=null;try{n=JSON.parse(t)}catch(i){return e.lastChunk=t,clearTimeout(e.lastChunkTimeout),void(e.lastChunkTimeout=setTimeout(function(){throw e._timeout(),o.InvalidResponse(t)},15e3))}clearTimeout(e.lastChunkTimeout),e.lastChunk=null,n&&r.push(n)}),r},i.prototype._addResponseCallback=function(t,e){var r=t.id||t[0].id,n=t.method||t[0].method;this.responseCallbacks[r]=e,this.responseCallbacks[r].method=n},i.prototype._timeout=function(){for(var t in this.responseCallbacks)this.responseCallbacks.hasOwnProperty(t)&&(this.responseCallbacks[t](o.InvalidConnection("on IPC")),delete this.responseCallbacks[t])},i.prototype.isConnected=function(){var t=this;return t.connection.writable||t.connection.connect({path:t.path}),!!this.connection.writable},i.prototype.send=function(t){if(this.connection.writeSync){var e;this.connection.writable||this.connection.connect({path:this.path});var r=this.connection.writeSync(JSON.stringify(t));try{e=JSON.parse(r)}catch(n){throw o.InvalidResponse(r)}return e}throw new Error('You tried to send "'+t.method+'" synchronously. Synchronous requests are not supported by the IPC provider.')},i.prototype.sendAsync=function(t,e){this.connection.writable||this.connection.connect({path:this.path}),this.connection.write(JSON.stringify(t)),this._addResponseCallback(t,e)},e.exports=i},{"../utils/utils":20,"./errors":26}],35:[function(t,e,r){var n={messageId:0};n.toPayload=function(t,e){return t||console.error("jsonrpc method should be specified!"),n.messageId++,{jsonrpc:"2.0",id:n.messageId,method:t,params:e||[]}},n.isValidResponse=function(t){function e(t){return!!t&&!t.error&&"2.0"===t.jsonrpc&&"number"==typeof t.id&&void 0!==t.result}return Array.isArray(t)?t.every(e):e(t)},n.toBatchPayload=function(t){return t.map(function(t){return n.toPayload(t.method,t.params)})},e.exports=n},{}],36:[function(t,e,r){var n=t("../utils/utils"),o=t("./errors"),i=function(t){this.name=t.name,this.call=t.call,this.params=t.params||0,this.inputFormatter=t.inputFormatter,this.outputFormatter=t.outputFormatter,this.requestManager=null};i.prototype.setRequestManager=function(t){this.requestManager=t},i.prototype.getCall=function(t){return n.isFunction(this.call)?this.call(t):this.call},i.prototype.extractCallback=function(t){return n.isFunction(t[t.length-1])?t.pop():void 0},i.prototype.validateArgs=function(t){if(t.length!==this.params)throw o.InvalidNumberOfParams()},i.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter.map(function(e,r){return e?e(t[r]):t[r]}):t},i.prototype.formatOutput=function(t){return this.outputFormatter&&t?this.outputFormatter(t):t},i.prototype.toPayload=function(t){var e=this.getCall(t),r=this.extractCallback(t),n=this.formatInput(t);return this.validateArgs(n),{method:e,params:n,callback:r}},i.prototype.attachToObject=function(t){var e=this.buildCall();e.call=this.call;var r=this.name.split(".");r.length>1?(t[r[0]]=t[r[0]]||{},t[r[0]][r[1]]=e):t[r[0]]=e},i.prototype.buildCall=function(){var t=this,e=function(){var e=t.toPayload(Array.prototype.slice.call(arguments));return e.callback?t.requestManager.sendAsync(e,function(r,n){e.callback(r,t.formatOutput(n))}):t.formatOutput(t.requestManager.send(e))};return e.request=this.request.bind(this),e},i.prototype.request=function(){var t=this.toPayload(Array.prototype.slice.call(arguments));return t.format=this.formatOutput.bind(this),t},e.exports=i},{"../utils/utils":20,"./errors":26}],37:[function(t,e,r){var n=t("../method"),o=function(t){this._requestManager=t._requestManager;var e=this;i().forEach(function(r){r.attachToObject(e),r.setRequestManager(t._requestManager)})},i=function(){var t=new n({name:"putString",call:"db_putString",params:3}),e=new n({name:"getString",call:"db_getString",params:2}),r=new n({name:"putHex",call:"db_putHex",params:3}),o=new n({name:"getHex",call:"db_getHex",params:2});return[t,e,r,o]};e.exports=o},{"../method":36}],38:[function(t,e,r){"use strict";function n(t){this._requestManager=t._requestManager;var e=this;w().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),x().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),this.iban=d,this.sendIBANTransaction=m.bind(null,this)}var o=t("../formatters"),i=t("../../utils/utils"),a=t("../method"),s=t("../property"),c=t("../../utils/config"),u=t("../contract"),f=t("./watches"),p=t("../filter"),h=t("../syncing"),l=t("../namereg"),d=t("../iban"),m=t("../transfer"),y=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockByHash":"eth_getBlockByNumber"},g=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getTransactionByBlockHashAndIndex":"eth_getTransactionByBlockNumberAndIndex"},v=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleByBlockHashAndIndex":"eth_getUncleByBlockNumberAndIndex"},b=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockTransactionCountByHash":"eth_getBlockTransactionCountByNumber"},_=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleCountByBlockHash":"eth_getUncleCountByBlockNumber"};Object.defineProperty(n.prototype,"defaultBlock",{get:function(){return c.defaultBlock},set:function(t){return c.defaultBlock=t,t}}),Object.defineProperty(n.prototype,"defaultAccount",{get:function(){return c.defaultAccount},set:function(t){return c.defaultAccount=t,t}});var w=function(){var t=new a({name:"getBalance",call:"eth_getBalance",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter],outputFormatter:o.outputBigNumberFormatter}),e=new a({name:"getStorageAt",call:"eth_getStorageAt",params:3,inputFormatter:[null,i.toHex,o.inputDefaultBlockNumberFormatter]}),r=new a({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter]}),n=new a({name:"getBlock",call:y,params:2,inputFormatter:[o.inputBlockNumberFormatter,function(t){return!!t}],outputFormatter:o.outputBlockFormatter}),s=new a({name:"getUncle",call:v,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputBlockFormatter}),c=new a({name:"getCompilers",call:"eth_getCompilers",params:0}),u=new a({name:"getBlockTransactionCount",call:b,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),f=new a({name:"getBlockUncleCount",call:_,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),p=new a({name:"getTransaction",call:"eth_getTransactionByHash",params:1,outputFormatter:o.outputTransactionFormatter}),h=new a({name:"getTransactionFromBlock",call:g,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputTransactionFormatter}),l=new a({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,outputFormatter:o.outputTransactionReceiptFormatter}),d=new a({name:"getTransactionCount",call:"eth_getTransactionCount",params:2,inputFormatter:[null,o.inputDefaultBlockNumberFormatter],outputFormatter:i.toDecimal}),m=new a({name:"sendRawTransaction",call:"eth_sendRawTransaction",params:1,inputFormatter:[null]}),w=new a({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[o.inputTransactionFormatter]}),x=new a({name:"sign",call:"eth_sign",params:2,inputFormatter:[o.inputAddressFormatter,null]}),k=new a({name:"call",call:"eth_call",params:2,inputFormatter:[o.inputCallFormatter,o.inputDefaultBlockNumberFormatter]}),B=new a({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[o.inputCallFormatter],outputFormatter:i.toDecimal}),S=new a({name:"compile.solidity",call:"eth_compileSolidity",params:1}),A=new a({name:"compile.lll",call:"eth_compileLLL",params:1}),C=new a({name:"compile.serpent",call:"eth_compileSerpent",params:1}),F=new a({name:"submitWork",call:"eth_submitWork",params:3}),I=new a({name:"getWork",call:"eth_getWork",params:0});return[t,e,r,n,s,c,u,f,p,h,l,d,k,B,m,w,x,S,A,C,F,I]},x=function(){return[new s({name:"coinbase",getter:"eth_coinbase"}),new s({name:"mining",getter:"eth_mining"}),new s({name:"hashrate",getter:"eth_hashrate",outputFormatter:i.toDecimal}),new s({name:"syncing",getter:"eth_syncing",outputFormatter:o.outputSyncingFormatter}),new s({name:"gasPrice",getter:"eth_gasPrice",outputFormatter:o.outputBigNumberFormatter}),new s({name:"accounts",getter:"eth_accounts"}),new s({name:"blockNumber",getter:"eth_blockNumber",outputFormatter:i.toDecimal}),new s({name:"protocolVersion",getter:"eth_protocolVersion"})]};n.prototype.contract=function(t){var e=new u(this,t);return e},n.prototype.filter=function(t,e){return new p(this._requestManager,t,f.eth(),o.outputLogFormatter,e)},n.prototype.namereg=function(){return this.contract(l.global.abi).at(l.global.address)},n.prototype.icapNamereg=function(){return this.contract(l.icap.abi).at(l.icap.address)},n.prototype.isSyncing=function(t){return new h(this._requestManager,t)},e.exports=n},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(t,e,r){var n=t("../../utils/utils"),o=t("../property"),i=function(t){this._requestManager=t._requestManager;var e=this;a().forEach(function(r){r.attachToObject(e),r.setRequestManager(t._requestManager)})},a=function(){return[new o({name:"listening",getter:"net_listening"}),new o({name:"peerCount",getter:"net_peerCount",outputFormatter:n.toDecimal})]};e.exports=i},{"../../utils/utils":20,"../property":44}],40:[function(t,e,r){"use strict";function n(t){this._requestManager=t._requestManager;var e=this;s().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})}var o=t("../method"),i=t("../property"),a=t("../formatters"),s=function(){var t=new o({name:"newAccount",call:"personal_newAccount",params:1,inputFormatter:[null]}),e=new o({name:"unlockAccount",call:"personal_unlockAccount",params:3,inputFormatter:[a.inputAddressFormatter,null,null]}),r=new o({name:"unlockAccountAndSendTransaction",call:"personal_signAndSendTransaction",params:2,inputFormatter:[a.inputTransactionFormatter,null]}),n=new o({name:"lockAccount",call:"personal_lockAccount",params:1,inputFormatter:[a.inputAddressFormatter]});return[t,e,r,n]},c=function(){return[new i({name:"listAccounts",getter:"personal_listAccounts"})]};e.exports=n},{"../formatters":30,"../method":36,"../property":44}],41:[function(t,e,r){var n=t("../method"),o=t("../formatters"),i=t("../filter"),a=t("./watches"),s=function(t){this._requestManager=t._requestManager;var e=this;c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})};s.prototype.filter=function(t,e){return new i(this._requestManager,t,a.shh(),o.outputPostFormatter,e)};var c=function(){var t=new n({name:"post",call:"shh_post",params:1,inputFormatter:[o.inputPostFormatter]}),e=new n({name:"newIdentity",call:"shh_newIdentity",params:0}),r=new n({name:"hasIdentity",call:"shh_hasIdentity",params:1}),i=new n({name:"newGroup",call:"shh_newGroup",params:0}),a=new n({name:"addToGroup",call:"shh_addToGroup",params:0});return[t,e,r,i,a]};e.exports=s},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(t,e,r){var n=t("../method"),o=function(){var t=function(t){var e=t[0];switch(e){case"latest":return t.shift(),this.params=0,"eth_newBlockFilter";case"pending":return t.shift(),this.params=0,"eth_newPendingTransactionFilter";default:return"eth_newFilter"}},e=new n({name:"newFilter",call:t,params:1}),r=new n({name:"uninstallFilter",call:"eth_uninstallFilter",params:1}),o=new n({name:"getLogs",call:"eth_getFilterLogs",params:1}),i=new n({name:"poll",call:"eth_getFilterChanges",params:1});return[e,r,o,i]},i=function(){var t=new n({name:"newFilter",call:"shh_newFilter",params:1}),e=new n({name:"uninstallFilter",call:"shh_uninstallFilter",params:1}),r=new n({name:"getLogs",call:"shh_getMessages",params:1}),o=new n({name:"poll",call:"shh_getFilterChanges",params:1});return[t,e,r,o]};e.exports={eth:o,shh:i}},{"../method":36}],43:[function(t,e,r){var n=t("../contracts/GlobalRegistrar.json"),o=t("../contracts/ICAPRegistrar.json"),i="0xc6d9d2cd449a754c494264e1809c50e34d64562b",a="0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00";e.exports={global:{abi:n,address:i},icap:{abi:o,address:a}}},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(t,e,r){var n=t("../utils/utils"),o=function(t){this.name=t.name,this.getter=t.getter,this.setter=t.setter,this.outputFormatter=t.outputFormatter,this.inputFormatter=t.inputFormatter,this.requestManager=null};o.prototype.setRequestManager=function(t){this.requestManager=t},o.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter(t):t},o.prototype.formatOutput=function(t){return this.outputFormatter&&null!==t?this.outputFormatter(t):t},o.prototype.extractCallback=function(t){return n.isFunction(t[t.length-1])?t.pop():void 0},o.prototype.attachToObject=function(t){var e={get:this.buildGet(),enumerable:!0},r=this.name.split("."),n=r[0];r.length>1&&(t[r[0]]=t[r[0]]||{},t=t[r[0]],n=r[1]),Object.defineProperty(t,n,e),t[i(n)]=this.buildAsyncGet()};var i=function(t){return"get"+t.charAt(0).toUpperCase()+t.slice(1)};o.prototype.buildGet=function(){var t=this;return function(){return t.formatOutput(t.requestManager.send({method:t.getter}))}},o.prototype.buildAsyncGet=function(){var t=this,e=function(e){t.requestManager.sendAsync({method:t.getter},function(r,n){e(r,t.formatOutput(n))})};return e.request=this.request.bind(this),e},o.prototype.request=function(){var t={method:this.getter,params:[],callback:this.extractCallback(Array.prototype.slice.call(arguments))};return t.format=this.formatOutput.bind(this),t},e.exports=o},{"../utils/utils":20}],45:[function(t,e,r){var n=t("./jsonrpc"),o=t("../utils/utils"),i=t("../utils/config"),a=t("./errors"),s=function(t){this.provider=t,this.polls={},this.timeout=null};s.prototype.send=function(t){if(!this.provider)return console.error(a.InvalidProvider()),null;var e=n.toPayload(t.method,t.params),r=this.provider.send(e);if(!n.isValidResponse(r))throw a.InvalidResponse(r);return r.result},s.prototype.sendAsync=function(t,e){if(!this.provider)return e(a.InvalidProvider());var r=n.toPayload(t.method,t.params);this.provider.sendAsync(r,function(t,r){return t?e(t):n.isValidResponse(r)?void e(null,r.result):e(a.InvalidResponse(r))})},s.prototype.sendBatch=function(t,e){if(!this.provider)return e(a.InvalidProvider());var r=n.toBatchPayload(t);this.provider.sendAsync(r,function(t,r){return t?e(t):o.isArray(r)?void e(t,r):e(a.InvalidResponse(r))})},s.prototype.setProvider=function(t){this.provider=t},s.prototype.startPolling=function(t,e,r,n){this.polls[e]={data:t,id:e,callback:r,uninstall:n},this.timeout||this.poll()},s.prototype.stopPolling=function(t){delete this.polls[t],0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.reset=function(t){for(var e in this.polls)t&&-1!==e.indexOf("syncPoll_")||(this.polls[e].uninstall(),delete this.polls[e]);0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.poll=function(){if(this.timeout=setTimeout(this.poll.bind(this),i.ETH_POLLING_TIMEOUT),0!==Object.keys(this.polls).length){if(!this.provider)return void console.error(a.InvalidProvider());var t=[],e=[];for(var r in this.polls)t.push(this.polls[r].data),e.push(r);if(0!==t.length){var s=n.toBatchPayload(t),c={};s.forEach(function(t,r){c[t.id]=e[r]});var u=this;this.provider.sendAsync(s,function(t,e){if(!t){if(!o.isArray(e))throw a.InvalidResponse(e);e.map(function(t){var e=c[t.id];return u.polls[e]?(t.callback=u.polls[e].callback,t):!1}).filter(function(t){return!!t}).filter(function(t){var e=n.isValidResponse(t);return e||t.callback(a.InvalidResponse(t)),e}).forEach(function(t){t.callback(null,t.result)})}})}}},e.exports=s},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(t,e,r){var n=function(){this.defaultBlock="latest",this.defaultAccount=void 0};e.exports=n},{}],47:[function(t,e,r){var n=t("./formatters"),o=t("../utils/utils"),i=1,a=function(t){var e=function(e,r){return e?t.callbacks.forEach(function(t){t(e)}):(o.isObject(r)&&r.startingBlock&&(r=n.outputSyncingFormatter(r)),void t.callbacks.forEach(function(e){t.lastSyncState!==r&&(!t.lastSyncState&&o.isObject(r)&&e(null,!0),setTimeout(function(){e(null,r)},0),t.lastSyncState=r)}))};t.requestManager.startPolling({method:"eth_syncing",params:[]},t.pollId,e,t.stopWatching.bind(t))},s=function(t,e){return this.requestManager=t,this.pollId="syncPoll_"+i++,this.callbacks=[],this.addCallback(e),this.lastSyncState=!1,a(this),this};s.prototype.addCallback=function(t){return t&&this.callbacks.push(t),this},s.prototype.stopWatching=function(){this.requestManager.stopPolling(this.pollId),this.callbacks=[]},e.exports=s},{"../utils/utils":20,"./formatters":30}],48:[function(t,e,r){var n=t("./iban"),o=t("../contracts/SmartExchange.json"),i=function(t,e,r,o,i){var c=new n(r);if(!c.isValid())throw new Error("invalid iban address");if(c.isDirect())return a(t,e,c.address(),o,i);if(!i){var u=t.icapNamereg().addr(c.institution());return s(t,e,u,o,c.client())}t.icapNamereg().addr(c.institution(),function(r,n){return s(t,e,n,o,c.client(),i)})},a=function(t,e,r,n,o){return t.sendTransaction({address:r,from:e,value:n},o)},s=function(t,e,r,n,i,a){var s=o;return t.contract(s).at(r).deposit(i,{from:e,value:n},a)};e.exports=i},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(t,e,r){},{}],50:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.BlockCipher,o=e.algo,i=[],a=[],s=[],c=[],u=[],f=[],p=[],h=[],l=[],d=[];!function(){for(var t=[],e=0;256>e;e++)128>e?t[e]=e<<1:t[e]=e<<1^283;for(var r=0,n=0,e=0;256>e;e++){var o=n^n<<1^n<<2^n<<3^n<<4;o=o>>>8^255&o^99,i[r]=o,a[o]=r;var m=t[r],y=t[m],g=t[y],v=257*t[o]^16843008*o;s[r]=v<<24|v>>>8,c[r]=v<<16|v>>>16,u[r]=v<<8|v>>>24,f[r]=v;var v=16843009*g^65537*y^257*m^16843008*r;p[o]=v<<24|v>>>8,h[o]=v<<16|v>>>16,l[o]=v<<8|v>>>24,d[o]=v,r?(r=m^t[t[t[g^m]]],n^=t[t[n]]):r=n=1}}();var m=[0,1,2,4,8,16,32,64,128,27,54],y=o.AES=n.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes/4,n=this._nRounds=r+6,o=4*(n+1),a=this._keySchedule=[],s=0;o>s;s++)if(r>s)a[s]=e[s];else{var c=a[s-1];s%r?r>6&&s%r==4&&(c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c]):(c=c<<8|c>>>24,c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c],c^=m[s/r|0]<<24),a[s]=a[s-r]^c}for(var u=this._invKeySchedule=[],f=0;o>f;f++){var s=o-f;if(f%4)var c=a[s];else var c=a[s-4];4>f||4>=s?u[f]=c:u[f]=p[i[c>>>24]]^h[i[c>>>16&255]]^l[i[c>>>8&255]]^d[i[255&c]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,c,u,f,i)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,p,h,l,d,a);var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,o,i,a,s){for(var c=this._nRounds,u=t[e]^r[0],f=t[e+1]^r[1],p=t[e+2]^r[2],h=t[e+3]^r[3],l=4,d=1;c>d;d++){var m=n[u>>>24]^o[f>>>16&255]^i[p>>>8&255]^a[255&h]^r[l++],y=n[f>>>24]^o[p>>>16&255]^i[h>>>8&255]^a[255&u]^r[l++],g=n[p>>>24]^o[h>>>16&255]^i[u>>>8&255]^a[255&f]^r[l++],v=n[h>>>24]^o[u>>>16&255]^i[f>>>8&255]^a[255&p]^r[l++];u=m,f=y,p=g,h=v}var m=(s[u>>>24]<<24|s[f>>>16&255]<<16|s[p>>>8&255]<<8|s[255&h])^r[l++],y=(s[f>>>24]<<24|s[p>>>16&255]<<16|s[h>>>8&255]<<8|s[255&u])^r[l++],g=(s[p>>>24]<<24|s[h>>>16&255]<<16|s[u>>>8&255]<<8|s[255&f])^r[l++],v=(s[h>>>24]<<24|s[u>>>16&255]<<16|s[f>>>8&255]<<8|s[255&p])^r[l++];t[e]=m,t[e+1]=y,t[e+2]=g,t[e+3]=v},keySize:8});e.AES=n._createHelper(y)}(),t.AES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){t.lib.Cipher||function(e){var r=t,n=r.lib,o=n.Base,i=n.WordArray,a=n.BufferedBlockAlgorithm,s=r.enc,c=(s.Utf8,s.Base64),u=r.algo,f=u.EvpKDF,p=n.Cipher=a.extend({cfg:o.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},keySize:4,ivSize:4, -_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?k:_}return function(e){return{encrypt:function(r,n,o){return t(n).encrypt(e,r,n,o)},decrypt:function(r,n,o){return t(n).decrypt(e,r,n,o)}}}}()}),h=(n.StreamCipher=p.extend({_doFinalize:function(){var t=this._process(!0);return t},blockSize:1}),r.mode={}),l=n.BlockCipherMode=o.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),d=h.CBC=function(){function t(t,r,n){var o=this._iv;if(o){var i=o;this._iv=e}else var i=this._prevBlock;for(var a=0;n>a;a++)t[r+a]^=i[a]}var r=l.extend();return r.Encryptor=r.extend({processBlock:function(e,r){var n=this._cipher,o=n.blockSize;t.call(this,e,r,o),n.encryptBlock(e,r),this._prevBlock=e.slice(r,r+o)}}),r.Decryptor=r.extend({processBlock:function(e,r){var n=this._cipher,o=n.blockSize,i=e.slice(r,r+o);n.decryptBlock(e,r),t.call(this,e,r,o),this._prevBlock=i}}),r}(),m=r.pad={},y=m.Pkcs7={pad:function(t,e){for(var r=4*e,n=r-t.sigBytes%r,o=n<<24|n<<16|n<<8|n,a=[],s=0;n>s;s+=4)a.push(o);var c=i.create(a,n);t.concat(c)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},g=(n.BlockCipher=p.extend({cfg:p.cfg.extend({mode:d,padding:y}),reset:function(){p.reset.call(this);var t=this.cfg,e=t.iv,r=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else{var n=r.createDecryptor;this._minBufferSize=1}this._mode=n.call(r,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{var e=this._process(!0);t.unpad(e)}return e},blockSize:4}),n.CipherParams=o.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=r.format={},b=v.OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;if(r)var n=i.create([1398893684,1701076831]).concat(r).concat(e);else var n=e;return n.toString(c)},parse:function(t){var e=c.parse(t),r=e.words;if(1398893684==r[0]&&1701076831==r[1]){var n=i.create(r.slice(2,4));r.splice(0,4),e.sigBytes-=16}return g.create({ciphertext:e,salt:n})}},_=n.SerializableCipher=o.extend({cfg:o.extend({format:b}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var o=t.createEncryptor(r,n),i=o.finalize(e),a=o.cfg;return g.create({ciphertext:i,key:r,iv:a.iv,algorithm:t,mode:a.mode,padding:a.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var o=t.createDecryptor(r,n).finalize(e.ciphertext);return o},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=r.kdf={},x=w.OpenSSL={execute:function(t,e,r,n){n||(n=i.random(8));var o=f.create({keySize:e+r}).compute(t,n),a=i.create(o.words.slice(e),4*r);return o.sigBytes=4*e,g.create({key:o,iv:a,salt:n})}},k=n.PasswordBasedCipher=_.extend({cfg:_.cfg.extend({kdf:x}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var o=n.kdf.execute(r,t.keySize,t.ivSize);n.iv=o.iv;var i=_.encrypt.call(this,t,e,o.key,n);return i.mixIn(o),i},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var o=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);n.iv=o.iv;var i=_.decrypt.call(this,t,e,o.key,n);return i}})}()})},{"./core":52}],52:[function(t,e,r){!function(t,n){"object"==typeof r?e.exports=r=n():"function"==typeof define&&define.amd?define([],n):t.CryptoJS=n()}(this,function(){var t=t||function(t,e){var r={},n=r.lib={},o=n.Base=function(){function t(){}return{extend:function(e){t.prototype=this;var r=new t;return e&&r.mixIn(e),r.hasOwnProperty("init")||(r.init=function(){r.$super.init.apply(this,arguments)}),r.init.prototype=r,r.$super=this,r},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),i=n.WordArray=o.extend({init:function(t,r){t=this.words=t||[],r!=e?this.sigBytes=r:this.sigBytes=4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,r=t.words,n=this.sigBytes,o=t.sigBytes;if(this.clamp(),n%4)for(var i=0;o>i;i++){var a=r[i>>>2]>>>24-i%4*8&255;e[n+i>>>2]|=a<<24-(n+i)%4*8}else for(var i=0;o>i;i+=4)e[n+i>>>2]=r[i>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var r,n=[],o=function(e){var e=e,r=987654321,n=4294967295;return function(){r=36969*(65535&r)+(r>>16)&n,e=18e3*(65535&e)+(e>>16)&n;var o=(r<<16)+e&n;return o/=4294967296,o+=.5,o*(t.random()>.5?1:-1)}},a=0;e>a;a+=4){var s=o(4294967296*(r||t.random()));r=987654071*s(),n.push(4294967296*s()|0)}return new i.init(n,e)}}),a=r.enc={},s=a.Hex={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n+=2)r[n>>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new i.init(r,e/2)}},c=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;n.push(String.fromCharCode(i))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n++)r[n>>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new i.init(r,e)}},u=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},f=n.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=u.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r=this._data,n=r.words,o=r.sigBytes,a=this.blockSize,s=4*a,c=o/s;c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*a,f=t.min(4*u,o);if(u){for(var p=0;u>p;p+=a)this._doProcessBlock(n,p);var h=n.splice(0,u);r.sigBytes-=f}return new i.init(h,f)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(n.Hasher=f.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},blockSize:16,_createHelper:function(t){return function(e,r){return new t.init(r).finalize(e)}},_createHmacHelper:function(t){return function(e,r){return new p.HMAC.init(t,r).finalize(e)}}}),r.algo={});return r}(Math);return t})},{}],53:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=e.enc;o.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,n=this._map;t.clamp();for(var o=[],i=0;r>i;i+=3)for(var a=e[i>>>2]>>>24-i%4*8&255,s=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,u=a<<16|s<<8|c,f=0;4>f&&r>i+.75*f;f++)o.push(n.charAt(u>>>6*(3-f)&63));var p=n.charAt(64);if(p)for(;o.length%4;)o.push(p);return o.join("")},parse:function(t){var e=t.length,r=this._map,o=r.charAt(64);if(o){var i=t.indexOf(o);-1!=i&&(e=i)}for(var a=[],s=0,c=0;e>c;c++)if(c%4){var u=r.indexOf(t.charAt(c-1))<>>6-c%4*2;a[s>>>2]|=(u|f)<<24-s%4*8,s++}return n.create(a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64})},{"./core":52}],54:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(t){return t<<8&4278255360|t>>>8&16711935}var r=t,n=r.lib,o=n.WordArray,i=r.enc;i.Utf16=i.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;r>o;o+=2){var i=e[o>>>2]>>>16-o%4*8&65535;n.push(String.fromCharCode(i))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;e>n;n++)r[n>>>1]|=t.charCodeAt(n)<<16-n%2*16;return o.create(r,2*e)}};i.Utf16LE={stringify:function(t){for(var r=t.words,n=t.sigBytes,o=[],i=0;n>i;i+=2){var a=e(r[i>>>2]>>>16-i%4*8&65535);o.push(String.fromCharCode(a))}return o.join("")},parse:function(t){for(var r=t.length,n=[],i=0;r>i;i++)n[i>>>1]|=e(t.charCodeAt(i)<<16-i%2*16);return o.create(n,2*r)}}}(),t.enc.Utf16})},{"./core":52}],55:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.Base,o=r.WordArray,i=e.algo,a=i.MD5,s=i.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=r.hasher.create(),i=o.create(),a=i.words,s=r.keySize,c=r.iterations;a.lengthf;f++)u=n.finalize(u),n.reset();i.concat(u)}return i.sigBytes=4*s,i}});e.EvpKDF=function(t,e,r){return s.create(r).compute(t,e)}}(),t.EvpKDF})},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.CipherParams,i=r.enc,a=i.Hex,s=r.format;s.Hex={stringify:function(t){return t.ciphertext.toString(a)},parse:function(t){var e=a.parse(t);return o.create({ciphertext:e})}}}(),t.format.Hex})},{"./cipher-core":51,"./core":52}],57:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){!function(){var e=t,r=e.lib,n=r.Base,o=e.enc,i=o.Utf8,a=e.algo;a.HMAC=n.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=i.parse(e));var r=t.blockSize,n=4*r;e.sigBytes>n&&(e=t.finalize(e)),e.clamp();for(var o=this._oKey=e.clone(),a=this._iKey=e.clone(),s=o.words,c=a.words,u=0;r>u;u++)s[u]^=1549556828,c[u]^=909522486;o.sigBytes=a.sigBytes=n,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,r=e.finalize(t);e.reset();var n=e.finalize(this._oKey.clone().concat(r));return n}})}()})},{"./core":52}],58:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core"),t("./lib-typedarrays"),t("./enc-utf16"),t("./enc-base64"),t("./md5"),t("./sha1"),t("./sha256"),t("./sha224"),t("./sha512"),t("./sha384"),t("./sha3"),t("./ripemd160"),t("./hmac"),t("./pbkdf2"),t("./evpkdf"),t("./cipher-core"),t("./mode-cfb"),t("./mode-ctr"),t("./mode-ctr-gladman"),t("./mode-ofb"),t("./mode-ecb"),t("./pad-ansix923"),t("./pad-iso10126"),t("./pad-iso97971"),t("./pad-zeropadding"),t("./pad-nopadding"),t("./format-hex"),t("./aes"),t("./tripledes"),t("./rc4"),t("./rabbit"),t("./rabbit-legacy")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./lib-typedarrays","./enc-utf16","./enc-base64","./md5","./sha1","./sha256","./sha224","./sha512","./sha384","./sha3","./ripemd160","./hmac","./pbkdf2","./evpkdf","./cipher-core","./mode-cfb","./mode-ctr","./mode-ctr-gladman","./mode-ofb","./mode-ecb","./pad-ansix923","./pad-iso10126","./pad-iso97971","./pad-zeropadding","./pad-nopadding","./format-hex","./aes","./tripledes","./rc4","./rabbit","./rabbit-legacy"],o):n.CryptoJS=o(n.CryptoJS)}(this,function(t){return t})},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){if("function"==typeof ArrayBuffer){var e=t,r=e.lib,n=r.WordArray,o=n.init,i=n.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,r=[],n=0;e>n;n++)r[n>>>2]|=t[n]<<24-n%4*8;o.call(this,r,e)}else o.apply(this,arguments)};i.prototype=n}}(),t.lib.WordArray})},{"./core":52}],60:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){function r(t,e,r,n,o,i,a){var s=t+(e&r|~e&n)+o+a;return(s<>>32-i)+e}function n(t,e,r,n,o,i,a){var s=t+(e&n|r&~n)+o+a;return(s<>>32-i)+e}function o(t,e,r,n,o,i,a){var s=t+(e^r^n)+o+a;return(s<>>32-i)+e}function i(t,e,r,n,o,i,a){var s=t+(r^(e|~n))+o+a;return(s<>>32-i)+e}var a=t,s=a.lib,c=s.WordArray,u=s.Hasher,f=a.algo,p=[];!function(){for(var t=0;64>t;t++)p[t]=4294967296*e.abs(e.sin(t+1))|0}();var h=f.MD5=u.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var a=0;16>a;a++){var s=e+a,c=t[s];t[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var u=this._hash.words,f=t[e+0],h=t[e+1],l=t[e+2],d=t[e+3],m=t[e+4],y=t[e+5],g=t[e+6],v=t[e+7],b=t[e+8],_=t[e+9],w=t[e+10],x=t[e+11],k=t[e+12],B=t[e+13],S=t[e+14],A=t[e+15],C=u[0],F=u[1],I=u[2],D=u[3];C=r(C,F,I,D,f,7,p[0]),D=r(D,C,F,I,h,12,p[1]),I=r(I,D,C,F,l,17,p[2]),F=r(F,I,D,C,d,22,p[3]),C=r(C,F,I,D,m,7,p[4]),D=r(D,C,F,I,y,12,p[5]),I=r(I,D,C,F,g,17,p[6]),F=r(F,I,D,C,v,22,p[7]),C=r(C,F,I,D,b,7,p[8]),D=r(D,C,F,I,_,12,p[9]),I=r(I,D,C,F,w,17,p[10]),F=r(F,I,D,C,x,22,p[11]),C=r(C,F,I,D,k,7,p[12]),D=r(D,C,F,I,B,12,p[13]),I=r(I,D,C,F,S,17,p[14]),F=r(F,I,D,C,A,22,p[15]),C=n(C,F,I,D,h,5,p[16]),D=n(D,C,F,I,g,9,p[17]),I=n(I,D,C,F,x,14,p[18]),F=n(F,I,D,C,f,20,p[19]),C=n(C,F,I,D,y,5,p[20]),D=n(D,C,F,I,w,9,p[21]),I=n(I,D,C,F,A,14,p[22]),F=n(F,I,D,C,m,20,p[23]),C=n(C,F,I,D,_,5,p[24]),D=n(D,C,F,I,S,9,p[25]),I=n(I,D,C,F,d,14,p[26]),F=n(F,I,D,C,b,20,p[27]),C=n(C,F,I,D,B,5,p[28]),D=n(D,C,F,I,l,9,p[29]),I=n(I,D,C,F,v,14,p[30]),F=n(F,I,D,C,k,20,p[31]),C=o(C,F,I,D,y,4,p[32]),D=o(D,C,F,I,b,11,p[33]),I=o(I,D,C,F,x,16,p[34]),F=o(F,I,D,C,S,23,p[35]),C=o(C,F,I,D,h,4,p[36]),D=o(D,C,F,I,m,11,p[37]),I=o(I,D,C,F,v,16,p[38]),F=o(F,I,D,C,w,23,p[39]),C=o(C,F,I,D,B,4,p[40]),D=o(D,C,F,I,f,11,p[41]),I=o(I,D,C,F,d,16,p[42]),F=o(F,I,D,C,g,23,p[43]),C=o(C,F,I,D,_,4,p[44]),D=o(D,C,F,I,k,11,p[45]),I=o(I,D,C,F,A,16,p[46]),F=o(F,I,D,C,l,23,p[47]),C=i(C,F,I,D,f,6,p[48]),D=i(D,C,F,I,v,10,p[49]),I=i(I,D,C,F,S,15,p[50]),F=i(F,I,D,C,y,21,p[51]),C=i(C,F,I,D,k,6,p[52]),D=i(D,C,F,I,d,10,p[53]),I=i(I,D,C,F,w,15,p[54]),F=i(F,I,D,C,h,21,p[55]),C=i(C,F,I,D,b,6,p[56]),D=i(D,C,F,I,A,10,p[57]),I=i(I,D,C,F,g,15,p[58]),F=i(F,I,D,C,B,21,p[59]),C=i(C,F,I,D,m,6,p[60]),D=i(D,C,F,I,x,10,p[61]),I=i(I,D,C,F,l,15,p[62]),F=i(F,I,D,C,_,21,p[63]),u[0]=u[0]+C|0,u[1]=u[1]+F|0,u[2]=u[2]+I|0,u[3]=u[3]+D|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,o=8*t.sigBytes;r[o>>>5]|=128<<24-o%32;var i=e.floor(n/4294967296),a=n;r[(o+64>>>9<<4)+15]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),r[(o+64>>>9<<4)+14]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(r.length+1),this._process();for(var s=this._hash,c=s.words,u=0;4>u;u++){var f=c[u];c[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return s},clone:function(){var t=u.clone.call(this);return t._hash=this._hash.clone(),t}});a.MD5=u._createHelper(h),a.HmacMD5=u._createHmacHelper(h)}(Math),t.MD5})},{"./core":52}],61:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CFB=function(){function e(t,e,r,n){var o=this._iv;if(o){var i=o.slice(0);this._iv=void 0}else var i=this._prevBlock;n.encryptBlock(i,0);for(var a=0;r>a;a++)t[e+a]^=i[a]}var r=t.lib.BlockCipherMode.extend();return r.Encryptor=r.extend({processBlock:function(t,r){var n=this._cipher,o=n.blockSize;e.call(this,t,r,o,n),this._prevBlock=t.slice(r,r+o)}}),r.Decryptor=r.extend({processBlock:function(t,r){var n=this._cipher,o=n.blockSize,i=t.slice(r,r+o);e.call(this,t,r,o,n),this._prevBlock=i}}),r}(),t.mode.CFB})},{"./cipher-core":51,"./core":52}],62:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CTRGladman=function(){function e(t){if(255===(t>>24&255)){var e=t>>16&255,r=t>>8&255,n=255&t;255===e?(e=0,255===r?(r=0,255===n?n=0:++n):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=n}else t+=1<<24;return t}function r(t){return 0===(t[0]=e(t[0]))&&(t[1]=e(t[1])),t}var n=t.lib.BlockCipherMode.extend(),o=n.Encryptor=n.extend({processBlock:function(t,e){var n=this._cipher,o=n.blockSize,i=this._iv,a=this._counter;i&&(a=this._counter=i.slice(0),this._iv=void 0),r(a);var s=a.slice(0);n.encryptBlock(s,0);for(var c=0;o>c;c++)t[e+c]^=s[c]}});return n.Decryptor=o,n}(),t.mode.CTRGladman})},{"./cipher-core":51,"./core":52}],63:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.CTR=function(){var e=t.lib.BlockCipherMode.extend(),r=e.Encryptor=e.extend({processBlock:function(t,e){var r=this._cipher,n=r.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var a=i.slice(0);r.encryptBlock(a,0),i[n-1]=i[n-1]+1|0;for(var s=0;n>s;s++)t[e+s]^=a[s]}});return e.Decryptor=r,e}(),t.mode.CTR})},{"./cipher-core":51,"./core":52}],64:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.ECB=function(){var e=t.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),e.Decryptor=e.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),e}(),t.mode.ECB})},{"./cipher-core":51,"./core":52}],65:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.mode.OFB=function(){var e=t.lib.BlockCipherMode.extend(),r=e.Encryptor=e.extend({processBlock:function(t,e){var r=this._cipher,n=r.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),r.encryptBlock(i,0);for(var a=0;n>a;a++)t[e+a]^=i[a]}});return e.Decryptor=r,e}(),t.mode.OFB})},{"./cipher-core":51,"./core":52}],66:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,n=4*e,o=n-r%n,i=r+o-1;t.clamp(),t.words[i>>>2]|=o<<24-i%4*8,t.sigBytes+=o},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},{"./cipher-core":51,"./core":52}],67:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.Iso10126={pad:function(e,r){var n=4*r,o=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(o-1)).concat(t.lib.WordArray.create([o<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},{"./cipher-core":51,"./core":52}],68:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.Iso97971={pad:function(e,r){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,r)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},{"./cipher-core":51,"./core":52}],69:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},{"./cipher-core":51,"./core":52}],70:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return t.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){for(var e=t.words,r=t.sigBytes-1;!(e[r>>>2]>>>24-r%4*8&255);)r--;t.sigBytes=r+1}},t.pad.ZeroPadding})},{"./cipher-core":51,"./core":52}],71:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.Base,o=r.WordArray,i=e.algo,a=i.SHA1,s=i.HMAC,c=i.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=s.create(r.hasher,t),i=o.create(),a=o.create([1]),c=i.words,u=a.words,f=r.keySize,p=r.iterations;c.lengthy;y++){m=n.finalize(m),n.reset();for(var g=m.words,v=0;d>v;v++)l[v]^=g[v]}i.concat(h),u[0]++}return i.sigBytes=4*f,i}});e.PBKDF2=function(t,e,r){return c.create(r).compute(t,e)}}(),t.PBKDF2})},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,r=0;8>r;r++)s[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var r=0;8>r;r++){var n=t[r]+e[r],o=65535&n,i=n>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&n)*n|0)+((65535&n)*n|0);c[r]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=[],s=[],c=[],u=i.RabbitLegacy=o.extend({_doReset:function(){var t=this._key.words,r=this.cfg.iv,n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],o=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;4>i;i++)e.call(this);for(var i=0;8>i;i++)o[i]^=n[i+4&7];if(r){var a=r.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,h=f<<16|65535&u;o[0]^=u,o[1]^=p,o[2]^=f,o[3]^=h,o[4]^=u,o[5]^=p,o[6]^=f,o[7]^=h;for(var i=0;4>i;i++)e.call(this)}},_doProcessBlock:function(t,r){var n=this._X;e.call(this),a[0]=n[0]^n[5]>>>16^n[3]<<16,a[1]=n[2]^n[7]>>>16^n[5]<<16,a[2]=n[4]^n[1]>>>16^n[7]<<16,a[3]=n[6]^n[3]>>>16^n[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[r+o]^=a[o]},blockSize:4,ivSize:2});r.RabbitLegacy=o._createHelper(u)}(),t.RabbitLegacy})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,r=0;8>r;r++)s[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var r=0;8>r;r++){var n=t[r]+e[r],o=65535&n,i=n>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&n)*n|0)+((65535&n)*n|0);c[r]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=[],s=[],c=[],u=i.Rabbit=o.extend({_doReset:function(){for(var t=this._key.words,r=this.cfg.iv,n=0;4>n;n++)t[n]=16711935&(t[n]<<8|t[n]>>>24)|4278255360&(t[n]<<24|t[n]>>>8);var o=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var n=0;4>n;n++)e.call(this);for(var n=0;8>n;n++)i[n]^=o[n+4&7];if(r){var a=r.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,h=f<<16|65535&u;i[0]^=u,i[1]^=p,i[2]^=f,i[3]^=h,i[4]^=u,i[5]^=p,i[6]^=f,i[7]^=h;for(var n=0;4>n;n++)e.call(this)}},_doProcessBlock:function(t,r){var n=this._X;e.call(this),a[0]=n[0]^n[5]>>>16^n[3]<<16,a[1]=n[2]^n[7]>>>16^n[5]<<16,a[2]=n[4]^n[1]>>>16^n[7]<<16,a[3]=n[6]^n[3]>>>16^n[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[r+o]^=a[o]},blockSize:4,ivSize:2});r.Rabbit=o._createHelper(u)}(),t.Rabbit})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._S,e=this._i,r=this._j,n=0,o=0;4>o;o++){e=(e+1)%256,r=(r+t[e])%256;var i=t[e];t[e]=t[r],t[r]=i,n|=t[(t[e]+t[r])%256]<<24-8*o}return this._i=e,this._j=r,n}var r=t,n=r.lib,o=n.StreamCipher,i=r.algo,a=i.RC4=o.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,n=this._S=[],o=0;256>o;o++)n[o]=o;for(var o=0,i=0;256>o;o++){var a=o%r,s=e[a>>>2]>>>24-a%4*8&255;i=(i+n[o]+s)%256;var c=n[o];n[o]=n[i],n[i]=c}this._i=this._j=0},_doProcessBlock:function(t,r){t[r]^=e.call(this)},keySize:8,ivSize:0});r.RC4=o._createHelper(a);var s=i.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)e.call(this)}});r.RC4Drop=o._createHelper(s)}(),t.RC4})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){function r(t,e,r){return t^e^r}function n(t,e,r){return t&e|~t&r}function o(t,e,r){return(t|~e)^r}function i(t,e,r){return t&r|e&~r}function a(t,e,r){return t^(e|~r)}function s(t,e){return t<>>32-e}var c=t,u=c.lib,f=u.WordArray,p=u.Hasher,h=c.algo,l=f.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),d=f.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),m=f.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),y=f.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),g=f.create([0,1518500249,1859775393,2400959708,2840853838]),v=f.create([1352829926,1548603684,1836072691,2053994217,0]),b=h.RIPEMD160=p.extend({_doReset:function(){this._hash=f.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var c=0;16>c;c++){var u=e+c,f=t[u];t[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}var p,h,b,_,w,x,k,B,S,A,C=this._hash.words,F=g.words,I=v.words,D=l.words,P=d.words,T=m.words,O=y.words;x=p=C[0],k=h=C[1],B=b=C[2],S=_=C[3],A=w=C[4];for(var E,c=0;80>c;c+=1)E=p+t[e+D[c]]|0,E+=16>c?r(h,b,_)+F[0]:32>c?n(h,b,_)+F[1]:48>c?o(h,b,_)+F[2]:64>c?i(h,b,_)+F[3]:a(h,b,_)+F[4],E=0|E,E=s(E,T[c]),E=E+w|0,p=w,w=_,_=s(b,10),b=h,h=E,E=x+t[e+P[c]]|0,E+=16>c?a(k,B,S)+I[0]:32>c?i(k,B,S)+I[1]:48>c?o(k,B,S)+I[2]:64>c?n(k,B,S)+I[3]:r(k,B,S)+I[4],E=0|E,E=s(E,O[c]),E=E+A|0,x=A,A=S,S=s(B,10),B=k,k=E;E=C[1]+b+S|0,C[1]=C[2]+_+A|0,C[2]=C[3]+w+x|0,C[3]=C[4]+p+k|0,C[4]=C[0]+h+B|0,C[0]=E},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[(n+64>>>9<<4)+14]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var o=this._hash,i=o.words,a=0;5>a;a++){var s=i[a];i[a]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return o},clone:function(){var t=p.clone.call(this);return t._hash=this._hash.clone(),t}});c.RIPEMD160=p._createHelper(b),c.HmacRIPEMD160=p._createHmacHelper(b)}(Math),t.RIPEMD160})},{"./core":52}],76:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=r.Hasher,i=e.algo,a=[],s=i.SHA1=o.extend({ -_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],s=r[3],c=r[4],u=0;80>u;u++){if(16>u)a[u]=0|t[e+u];else{var f=a[u-3]^a[u-8]^a[u-14]^a[u-16];a[u]=f<<1|f>>>31}var p=(n<<5|n>>>27)+c+a[u];p+=20>u?(o&i|~o&s)+1518500249:40>u?(o^i^s)+1859775393:60>u?(o&i|o&s|i&s)-1894007588:(o^i^s)-899497514,c=s,s=i,i=o<<30|o>>>2,o=n,n=p}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[(n+64>>>9<<4)+14]=Math.floor(r/4294967296),e[(n+64>>>9<<4)+15]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=o._createHelper(s),e.HmacSHA1=o._createHmacHelper(s)}(),t.SHA1})},{"./core":52}],77:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./sha256")):"function"==typeof define&&define.amd?define(["./core","./sha256"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=e.algo,i=o.SHA256,a=o.SHA224=i.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=i._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=i._createHelper(a),e.HmacSHA224=i._createHmacHelper(a)}(),t.SHA224})},{"./core":52,"./sha256":78}],78:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.WordArray,i=n.Hasher,a=r.algo,s=[],c=[];!function(){function t(t){for(var r=e.sqrt(t),n=2;r>=n;n++)if(!(t%n))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var n=2,o=0;64>o;)t(n)&&(8>o&&(s[o]=r(e.pow(n,.5))),c[o]=r(e.pow(n,1/3)),o++),n++}();var u=[],f=a.SHA256=i.extend({_doReset:function(){this._hash=new o.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],f=r[5],p=r[6],h=r[7],l=0;64>l;l++){if(16>l)u[l]=0|t[e+l];else{var d=u[l-15],m=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,y=u[l-2],g=(y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10;u[l]=m+u[l-7]+g+u[l-16]}var v=s&f^~s&p,b=n&o^n&i^o&i,_=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),w=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),x=h+w+v+c[l]+u[l],k=_+b;h=p,p=f,f=s,s=a+x|0,a=i,i=o,o=n,n=x+k|0}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+a|0,r[4]=r[4]+s|0,r[5]=r[5]+f|0,r[6]=r[6]+p|0,r[7]=r[7]+h|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,o=8*t.sigBytes;return r[o>>>5]|=128<<24-o%32,r[(o+64>>>9<<4)+14]=e.floor(n/4294967296),r[(o+64>>>9<<4)+15]=n,t.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});r.SHA256=i._createHelper(f),r.HmacSHA256=i._createHmacHelper(f)}(Math),t.SHA256})},{"./core":52}],79:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.WordArray,i=n.Hasher,a=r.x64,s=a.Word,c=r.algo,u=[],f=[],p=[];!function(){for(var t=1,e=0,r=0;24>r;r++){u[t+5*e]=(r+1)*(r+2)/2%64;var n=e%5,o=(2*t+3*e)%5;t=n,e=o}for(var t=0;5>t;t++)for(var e=0;5>e;e++)f[t+5*e]=e+(2*t+3*e)%5*5;for(var i=1,a=0;24>a;a++){for(var c=0,h=0,l=0;7>l;l++){if(1&i){var d=(1<d?h^=1<t;t++)h[t]=s.create()}();var l=c.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;25>e;e++)t[e]=new s.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var r=this._state,n=this.blockSize/2,o=0;n>o;o++){var i=t[e+2*o],a=t[e+2*o+1];i=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8);var s=r[o];s.high^=a,s.low^=i}for(var c=0;24>c;c++){for(var l=0;5>l;l++){for(var d=0,m=0,y=0;5>y;y++){var s=r[l+5*y];d^=s.high,m^=s.low}var g=h[l];g.high=d,g.low=m}for(var l=0;5>l;l++)for(var v=h[(l+4)%5],b=h[(l+1)%5],_=b.high,w=b.low,d=v.high^(_<<1|w>>>31),m=v.low^(w<<1|_>>>31),y=0;5>y;y++){var s=r[l+5*y];s.high^=d,s.low^=m}for(var x=1;25>x;x++){var s=r[x],k=s.high,B=s.low,S=u[x];if(32>S)var d=k<>>32-S,m=B<>>32-S;else var d=B<>>64-S,m=k<>>64-S;var A=h[f[x]];A.high=d,A.low=m}var C=h[0],F=r[0];C.high=F.high,C.low=F.low;for(var l=0;5>l;l++)for(var y=0;5>y;y++){var x=l+5*y,s=r[x],I=h[x],D=h[(l+1)%5+5*y],P=h[(l+2)%5+5*y];s.high=I.high^~D.high&P.high,s.low=I.low^~D.low&P.low}var s=r[0],T=p[c];s.high^=T.high,s.low^=T.low}},_doFinalize:function(){var t=this._data,r=t.words,n=(8*this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(e.ceil((n+1)/i)*i>>>5)-1]|=128,t.sigBytes=4*r.length,this._process();for(var a=this._state,s=this.cfg.outputLength/8,c=s/8,u=[],f=0;c>f;f++){var p=a[f],h=p.high,l=p.low;h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8),l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),u.push(l),u.push(h)}return new o.init(u,s)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;25>r;r++)e[r]=e[r].clone();return t}});r.SHA3=i._createHelper(l),r.HmacSHA3=i._createHmacHelper(l)}(Math),t.SHA3})},{"./core":52,"./x64-core":83}],80:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core"),t("./sha512")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./sha512"],o):o(n.CryptoJS)}(this,function(t){return function(){var e=t,r=e.x64,n=r.Word,o=r.WordArray,i=e.algo,a=i.SHA512,s=i.SHA384=a.extend({_doReset:function(){this._hash=new o.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=a._createHelper(s),e.HmacSHA384=a._createHmacHelper(s)}(),t.SHA384})},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(){return a.create.apply(a,arguments)}var r=t,n=r.lib,o=n.Hasher,i=r.x64,a=i.Word,s=i.WordArray,c=r.algo,u=[e(1116352408,3609767458),e(1899447441,602891725),e(3049323471,3964484399),e(3921009573,2173295548),e(961987163,4081628472),e(1508970993,3053834265),e(2453635748,2937671579),e(2870763221,3664609560),e(3624381080,2734883394),e(310598401,1164996542),e(607225278,1323610764),e(1426881987,3590304994),e(1925078388,4068182383),e(2162078206,991336113),e(2614888103,633803317),e(3248222580,3479774868),e(3835390401,2666613458),e(4022224774,944711139),e(264347078,2341262773),e(604807628,2007800933),e(770255983,1495990901),e(1249150122,1856431235),e(1555081692,3175218132),e(1996064986,2198950837),e(2554220882,3999719339),e(2821834349,766784016),e(2952996808,2566594879),e(3210313671,3203337956),e(3336571891,1034457026),e(3584528711,2466948901),e(113926993,3758326383),e(338241895,168717936),e(666307205,1188179964),e(773529912,1546045734),e(1294757372,1522805485),e(1396182291,2643833823),e(1695183700,2343527390),e(1986661051,1014477480),e(2177026350,1206759142),e(2456956037,344077627),e(2730485921,1290863460),e(2820302411,3158454273),e(3259730800,3505952657),e(3345764771,106217008),e(3516065817,3606008344),e(3600352804,1432725776),e(4094571909,1467031594),e(275423344,851169720),e(430227734,3100823752),e(506948616,1363258195),e(659060556,3750685593),e(883997877,3785050280),e(958139571,3318307427),e(1322822218,3812723403),e(1537002063,2003034995),e(1747873779,3602036899),e(1955562222,1575990012),e(2024104815,1125592928),e(2227730452,2716904306),e(2361852424,442776044),e(2428436474,593698344),e(2756734187,3733110249),e(3204031479,2999351573),e(3329325298,3815920427),e(3391569614,3928383900),e(3515267271,566280711),e(3940187606,3454069534),e(4118630271,4000239992),e(116418474,1914138554),e(174292421,2731055270),e(289380356,3203993006),e(460393269,320620315),e(685471733,587496836),e(852142971,1086792851),e(1017036298,365543100),e(1126000580,2618297676),e(1288033470,3409855158),e(1501505948,4234509866),e(1607167915,987167468),e(1816402316,1246189591)],f=[];!function(){for(var t=0;80>t;t++)f[t]=e()}();var p=c.SHA512=o.extend({_doReset:function(){this._hash=new s.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],c=r[5],p=r[6],h=r[7],l=n.high,d=n.low,m=o.high,y=o.low,g=i.high,v=i.low,b=a.high,_=a.low,w=s.high,x=s.low,k=c.high,B=c.low,S=p.high,A=p.low,C=h.high,F=h.low,I=l,D=d,P=m,T=y,O=g,E=v,M=b,H=_,N=w,R=x,j=k,q=B,L=S,z=A,U=C,W=F,J=0;80>J;J++){var G=f[J];if(16>J)var X=G.high=0|t[e+2*J],K=G.low=0|t[e+2*J+1];else{var V=f[J-15],$=V.high,Z=V.low,Y=($>>>1|Z<<31)^($>>>8|Z<<24)^$>>>7,Q=(Z>>>1|$<<31)^(Z>>>8|$<<24)^(Z>>>7|$<<25),tt=f[J-2],et=tt.high,rt=tt.low,nt=(et>>>19|rt<<13)^(et<<3|rt>>>29)^et>>>6,ot=(rt>>>19|et<<13)^(rt<<3|et>>>29)^(rt>>>6|et<<26),it=f[J-7],at=it.high,st=it.low,ct=f[J-16],ut=ct.high,ft=ct.low,K=Q+st,X=Y+at+(Q>>>0>K>>>0?1:0),K=K+ot,X=X+nt+(ot>>>0>K>>>0?1:0),K=K+ft,X=X+ut+(ft>>>0>K>>>0?1:0);G.high=X,G.low=K}var pt=N&j^~N&L,ht=R&q^~R&z,lt=I&P^I&O^P&O,dt=D&T^D&E^T&E,mt=(I>>>28|D<<4)^(I<<30|D>>>2)^(I<<25|D>>>7),yt=(D>>>28|I<<4)^(D<<30|I>>>2)^(D<<25|I>>>7),gt=(N>>>14|R<<18)^(N>>>18|R<<14)^(N<<23|R>>>9),vt=(R>>>14|N<<18)^(R>>>18|N<<14)^(R<<23|N>>>9),bt=u[J],_t=bt.high,wt=bt.low,xt=W+vt,kt=U+gt+(W>>>0>xt>>>0?1:0),xt=xt+ht,kt=kt+pt+(ht>>>0>xt>>>0?1:0),xt=xt+wt,kt=kt+_t+(wt>>>0>xt>>>0?1:0),xt=xt+K,kt=kt+X+(K>>>0>xt>>>0?1:0),Bt=yt+dt,St=mt+lt+(yt>>>0>Bt>>>0?1:0);U=L,W=z,L=j,z=q,j=N,q=R,R=H+xt|0,N=M+kt+(H>>>0>R>>>0?1:0)|0,M=O,H=E,O=P,E=T,P=I,T=D,D=xt+Bt|0,I=kt+St+(xt>>>0>D>>>0?1:0)|0}d=n.low=d+D,n.high=l+I+(D>>>0>d>>>0?1:0),y=o.low=y+T,o.high=m+P+(T>>>0>y>>>0?1:0),v=i.low=v+E,i.high=g+O+(E>>>0>v>>>0?1:0),_=a.low=_+H,a.high=b+M+(H>>>0>_>>>0?1:0),x=s.low=x+R,s.high=w+N+(R>>>0>x>>>0?1:0),B=c.low=B+q,c.high=k+j+(q>>>0>B>>>0?1:0),A=p.low=A+z,p.high=S+L+(z>>>0>A>>>0?1:0),F=h.low=F+W,h.high=C+U+(W>>>0>F>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[(n+128>>>10<<5)+30]=Math.floor(r/4294967296),e[(n+128>>>10<<5)+31]=r,t.sigBytes=4*e.length,this._process();var o=this._hash.toX32();return o},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});r.SHA512=o._createHelper(p),r.HmacSHA512=o._createHmacHelper(p)}(),t.SHA512})},{"./core":52,"./x64-core":83}],82:[function(t,e,r){!function(n,o,i){"object"==typeof r?e.exports=r=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(n.CryptoJS)}(this,function(t){return function(){function e(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<n;n++){var o=c[n]-1;r[n]=e[o>>>5]>>>31-o%32&1}for(var i=this._subKeys=[],a=0;16>a;a++){for(var s=i[a]=[],p=f[a],n=0;24>n;n++)s[n/6|0]|=r[(u[n]-1+p)%28]<<31-n%6,s[4+(n/6|0)]|=r[28+(u[n+24]-1+p)%28]<<31-n%6;s[0]=s[0]<<1|s[0]>>>31;for(var n=1;7>n;n++)s[n]=s[n]>>>4*(n-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var h=this._invSubKeys=[],n=0;16>n;n++)h[n]=i[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,n,o){this._lBlock=t[n],this._rBlock=t[n+1],e.call(this,4,252645135),e.call(this,16,65535),r.call(this,2,858993459),r.call(this,8,16711935),e.call(this,1,1431655765);for(var i=0;16>i;i++){for(var a=o[i],s=this._lBlock,c=this._rBlock,u=0,f=0;8>f;f++)u|=p[f][((c^a[f])&h[f])>>>0];this._lBlock=c,this._rBlock=s^u}var l=this._lBlock;this._lBlock=this._rBlock,this._rBlock=l,e.call(this,1,1431655765),r.call(this,8,16711935),r.call(this,2,858993459),e.call(this,16,65535),e.call(this,4,252645135),t[n]=this._lBlock,t[n+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});n.DES=a._createHelper(l);var d=s.TripleDES=a.extend({_doReset:function(){var t=this._key,e=t.words;this._des1=l.createEncryptor(i.create(e.slice(0,2))),this._des2=l.createEncryptor(i.create(e.slice(2,4))),this._des3=l.createEncryptor(i.create(e.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});n.TripleDES=a._createHelper(d)}(),t.TripleDES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(t,e,r){!function(n,o){"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)}(this,function(t){return function(e){var r=t,n=r.lib,o=n.Base,i=n.WordArray,a=r.x64={};a.Word=o.extend({init:function(t,e){this.high=t,this.low=e}}),a.WordArray=o.extend({init:function(t,r){t=this.words=t||[],r!=e?this.sigBytes=r:this.sigBytes=8*t.length},toX32:function(){for(var t=this.words,e=t.length,r=[],n=0;e>n;n++){var o=t[n];r.push(o.high),r.push(o.low)}return i.create(r,this.sigBytes)},clone:function(){for(var t=o.clone.call(this),e=t.words=this.words.slice(0),r=e.length,n=0;r>n;n++)e[n]=e[n].clone();return t}})}(),t})},{"./core":52}],84:[function(t,e,r){!function(t){function n(t){for(var e,r,n=[],o=0,i=t.length;i>o;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(r=t.charCodeAt(o++),56320==(64512&r)?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),o--)):n.push(e);return n}function o(t){for(var e,r=t.length,n=-1,o="";++n65535&&(e-=65536,o+=v(e>>>10&1023|55296),e=56320|1023&e),o+=v(e);return o}function i(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return v(t>>e&63|128)}function s(t){if(0==(4294967168&t))return v(t);var e="";return 0==(4294965248&t)?e=v(t>>6&31|192):0==(4294901760&t)?(i(t),e=v(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=v(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=v(63&t|128)}function c(t){for(var e,r=n(t),o=r.length,i=-1,a="";++i=y)throw Error("Invalid byte index");var t=255&m[g];if(g++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function f(){var t,e,r,n,o;if(g>y)throw Error("Invalid byte index");if(g==y)return!1;if(t=255&m[g],g++,0==(128&t))return t;if(192==(224&t)){var e=u();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=u(),r=u(),o=(15&t)<<12|e<<6|r,o>=2048)return i(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=u(),r=u(),n=u(),o=(15&t)<<18|e<<12|r<<6|n,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function p(t){m=n(t),y=m.length,g=0;for(var e,r=[];(e=f())!==!1;)r.push(e);return o(r)}var h="object"==typeof r&&r,l="object"==typeof e&&e&&e.exports==h&&e,d="object"==typeof global&&global;(d.global===d||d.window===d)&&(t=d);var m,y,g,v=String.fromCharCode,b={version:"2.0.0",encode:c,decode:p};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return b});else if(h&&!h.nodeType)if(l)l.exports=b;else{var _={},w=_.hasOwnProperty;for(var x in b)w.call(b,x)&&(h[x]=b[x])}else t.utf8=b}(this)},{}],"bignumber.js":[function(t,e,r){"use strict";e.exports=BigNumber},{}],web3:[function(t,e,r){var n=t("./lib/web3");"undefined"!=typeof window&&"undefined"==typeof window.Web3&&(window.Web3=n),e.exports=n},{"./lib/web3":22}]},{},["web3"]); \ No newline at end of file diff --git a/node_modules/web3/dist/web3.js b/node_modules/web3/dist/web3.js deleted file mode 100644 index 28a2aad..0000000 --- a/node_modules/web3/dist/web3.js +++ /dev/null @@ -1,15951 +0,0 @@ -require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o. -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - - -},{"./address":4,"./bool":5,"./bytes":6,"./dynamicbytes":8,"./formatters":9,"./int":10,"./real":12,"./string":13,"./uint":15,"./ureal":16}],8:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - - -},{"./formatters":9,"./type":14}],9:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - - -},{"../utils/config":18,"../utils/utils":20,"./param":11,"bignumber.js":"bignumber.js"}],10:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; - -},{"./formatters":9,"./type":14}],11:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - - -},{"../utils/utils":20}],12:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; - -},{"./formatters":9,"./type":14}],13:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - - -},{"./formatters":9,"./type":14}],14:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; - -},{"./formatters":9,"./param":11}],15:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; - -},{"./formatters":9,"./type":14}],16:[function(require,module,exports){ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; - -},{"./formatters":9,"./type":14}],17:[function(require,module,exports){ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - - -},{}],18:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - - -},{"bignumber.js":"bignumber.js"}],19:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - - -},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; - -},{"./sha3.js":19,"bignumber.js":"bignumber.js","utf8":84}],21:[function(require,module,exports){ -module.exports={ - "version": "0.17.0-alpha" -} - -},{}],22:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); -var BigNumber = require('bignumber.js'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.BigNumber = BigNumber; -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; - - -Web3.prototype.sha3 = function(string, options) { - return '0x' + sha3(string, options); -}; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - - -},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46,"bignumber.js":"bignumber.js"}],23:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - - -},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - - -},{"./errors":26,"./jsonrpc":35}],25:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 3) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; - -},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - - -},{}],27:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(require,module,exports){ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - - -},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function (callback) { - this.requestManager.stopPolling(this.filterId); - this.callbacks = []; - // remove filter async - if (callback) { - this.implementation.uninstallFilter(this.filterId, callback); - } else { - return this.implementation.uninstallFilter(this.filterId); - } -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - - -},{"../utils/utils":20,"./formatters":30}],30:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw new Error('invalid address'); -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - if (result.knownStates) { - result.knownStates = utils.toDecimal(result.knownStates); - result.pulledStates = utils.toDecimal(result.pulledStates); - } - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - - -},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - - -},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// browser -if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - - -},{"./errors":26,"xmlhttprequest":17}],33:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '0' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - - -},{"bignumber.js":"bignumber.js"}],34:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - - -},{"../utils/utils":20,"./errors":26}],35:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * Aaron Kumavis - * @date 2015 - */ - -// Initialize Jsonrpc as a simple object with utility functions. -var Jsonrpc = { - messageId: 0 -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - // advance message ID - Jsonrpc.messageId++; - - return { - jsonrpc: '2.0', - id: Jsonrpc.messageId, - method: method, - params: params || [] - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.isValidResponse = function (response) { - return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response); - - function validateSingleMessage(message){ - return !!message && - !message.error && - message.jsonrpc === '2.0' && - typeof message.id === 'number' && - message.result !== undefined; // only undefined is not valid json object - } -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.toBatchPayload = function (messages) { - return messages.map(function (message) { - return Jsonrpc.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - - -},{}],36:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - - -},{"../utils/utils":20,"./errors":26}],37:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; - -},{"../method":36}],38:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'protocolVersion', - getter: 'eth_protocolVersion' - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - - -},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; - -},{"../../utils/utils":20,"../property":44}],40:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); -var formatters = require('../formatters'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [formatters.inputAddressFormatter, null, null] - }); - - var unlockAccountAndSendTransaction = new Method({ - name: 'unlockAccountAndSendTransaction', // sendTransaction - call: 'personal_signAndSendTransaction', // personal_sendTransaction - params: 2, - inputFormatter: [formatters.inputTransactionFormatter, null] - }); - - var lockAccount = new Method({ - name: 'lockAccount', - call: 'personal_lockAccount', - params: 1, - inputFormatter: [formatters.inputAddressFormatter] - }); - - return [ - newAccount, - unlockAccount, - unlockAccountAndSendTransaction, - lockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; - -},{"../formatters":30,"../method":36,"../property":44}],41:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - - -},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - - -},{"../method":36}],43:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - - -},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - - -},{"../utils/utils":20}],45:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - - -},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(require,module,exports){ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - - -},{}],47:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - - -},{"../utils/utils":20,"./formatters":30}],48:[function(require,module,exports){ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - - -},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(require,module,exports){ - -},{}],50:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - var block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; - - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); -},{"./core":52}],52:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); - - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); - - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); -},{}],53:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); - - - return CryptoJS.enc.Base64; - -})); -},{"./core":52}],54:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); -},{"./core":52}],55:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); -},{"./cipher-core":51,"./core":52}],57:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); -},{"./core":52}],58:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); -},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); -},{"./core":52}],60:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); -},{"./core":52}],61:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - var keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); -},{"./cipher-core":51,"./core":52}],62:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); -},{"./cipher-core":51,"./core":52}],63:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); -},{"./cipher-core":51,"./core":52}],64:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); -},{"./cipher-core":51,"./core":52}],65:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); -},{"./cipher-core":51,"./core":52}],66:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); -},{"./cipher-core":51,"./core":52}],67:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); -},{"./cipher-core":51,"./core":52}],68:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); -},{"./cipher-core":51,"./core":52}],69:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); -},{"./cipher-core":51,"./core":52}],70:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); -},{"./cipher-core":51,"./core":52}],71:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); -},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); -},{"./core":52}],76:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); -},{"./core":52}],77:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); -},{"./core":52,"./sha256":78}],78:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); -},{"./core":52}],79:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); -},{"./core":52,"./x64-core":83}],80:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); -},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); -},{"./core":52,"./x64-core":83}],82:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); -},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); -},{"./core":52}],84:[function(require,module,exports){ -/*! https://mths.be/utf8js v2.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - var byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.0.0', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); - -},{}],"bignumber.js":[function(require,module,exports){ -/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.7 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor( base / ( yc[0] + 1 ) ); - - // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1. - // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) { - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder. - // Trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while ( compare( prod, rem, prodL, remL ) == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if ( n == 0 ) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while ( compare( yc, rem, yL, remL ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); - -},{"crypto":49}],"web3":[function(require,module,exports){ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; - -},{"./lib/web3":22}]},{},["web3"]) -//# sourceMappingURL=web3.js.map diff --git a/node_modules/web3/dist/web3.js.map b/node_modules/web3/dist/web3.js.map deleted file mode 100644 index f5878ba..0000000 --- a/node_modules/web3/dist/web3.js.map +++ /dev/null @@ -1,185 +0,0 @@ -{ - "version": 3, - "sources": [ - "node_modules/browserify/node_modules/browser-pack/_prelude.js", - "lib/contracts/GlobalRegistrar.json", - "lib/contracts/ICAPRegistrar.json", - "lib/contracts/SmartExchange.json", - "lib/solidity/address.js", - "lib/solidity/bool.js", - "lib/solidity/bytes.js", - "lib/solidity/coder.js", - "lib/solidity/dynamicbytes.js", - "lib/solidity/formatters.js", - "lib/solidity/int.js", - "lib/solidity/param.js", - "lib/solidity/real.js", - "lib/solidity/string.js", - "lib/solidity/type.js", - "lib/solidity/uint.js", - "lib/solidity/ureal.js", - "lib/utils/browser-xhr.js", - "lib/utils/config.js", - "lib/utils/sha3.js", - "lib/utils/utils.js", - "lib/version.json", - "lib/web3.js", - "lib/web3/allevents.js", - "lib/web3/batch.js", - "lib/web3/contract.js", - "lib/web3/errors.js", - "lib/web3/event.js", - "lib/web3/extend.js", - "lib/web3/filter.js", - "lib/web3/formatters.js", - "lib/web3/function.js", - "lib/web3/httpprovider.js", - "lib/web3/iban.js", - "lib/web3/ipcprovider.js", - "lib/web3/jsonrpc.js", - "lib/web3/method.js", - "lib/web3/methods/db.js", - "lib/web3/methods/eth.js", - "lib/web3/methods/net.js", - "lib/web3/methods/personal.js", - "lib/web3/methods/shh.js", - "lib/web3/methods/watches.js", - "lib/web3/namereg.js", - "lib/web3/property.js", - "lib/web3/requestmanager.js", - "lib/web3/settings.js", - "lib/web3/syncing.js", - "lib/web3/transfer.js", - "node_modules/browserify/lib/_empty.js", - "node_modules/crypto-js/aes.js", - "node_modules/crypto-js/cipher-core.js", - "node_modules/crypto-js/core.js", - "node_modules/crypto-js/enc-base64.js", - "node_modules/crypto-js/enc-utf16.js", - "node_modules/crypto-js/evpkdf.js", - "node_modules/crypto-js/format-hex.js", - "node_modules/crypto-js/hmac.js", - "node_modules/crypto-js/index.js", - "node_modules/crypto-js/lib-typedarrays.js", - "node_modules/crypto-js/md5.js", - "node_modules/crypto-js/mode-cfb.js", - "node_modules/crypto-js/mode-ctr-gladman.js", - "node_modules/crypto-js/mode-ctr.js", - "node_modules/crypto-js/mode-ecb.js", - "node_modules/crypto-js/mode-ofb.js", - "node_modules/crypto-js/pad-ansix923.js", - "node_modules/crypto-js/pad-iso10126.js", - "node_modules/crypto-js/pad-iso97971.js", - "node_modules/crypto-js/pad-nopadding.js", - "node_modules/crypto-js/pad-zeropadding.js", - "node_modules/crypto-js/pbkdf2.js", - "node_modules/crypto-js/rabbit-legacy.js", - "node_modules/crypto-js/rabbit.js", - "node_modules/crypto-js/rc4.js", - "node_modules/crypto-js/ripemd160.js", - "node_modules/crypto-js/sha1.js", - "node_modules/crypto-js/sha224.js", - "node_modules/crypto-js/sha256.js", - "node_modules/crypto-js/sha3.js", - "node_modules/crypto-js/sha384.js", - "node_modules/crypto-js/sha512.js", - "node_modules/crypto-js/tripledes.js", - "node_modules/crypto-js/x64-core.js", - "node_modules/utf8/utf8.js", - "bignumber.js", - "index.js" - ], - "names": [], - "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrlBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC12BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACruBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3nFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", - "file": "generated.js", - "sourceRoot": "", - "sourcesContent": [ - "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o.\n*/\n/** \n * @file coder.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar f = require('./formatters');\n\nvar SolidityTypeAddress = require('./address');\nvar SolidityTypeBool = require('./bool');\nvar SolidityTypeInt = require('./int');\nvar SolidityTypeUInt = require('./uint');\nvar SolidityTypeDynamicBytes = require('./dynamicbytes');\nvar SolidityTypeString = require('./string');\nvar SolidityTypeReal = require('./real');\nvar SolidityTypeUReal = require('./ureal');\nvar SolidityTypeBytes = require('./bytes');\n\n/**\n * SolidityCoder prototype should be used to encode/decode solidity params of any type\n */\nvar SolidityCoder = function (types) {\n this._types = types;\n};\n\n/**\n * This method should be used to transform type to SolidityType\n *\n * @method _requireType\n * @param {String} type\n * @returns {SolidityType} \n * @throws {Error} throws if no matching type is found\n */\nSolidityCoder.prototype._requireType = function (type) {\n var solidityType = this._types.filter(function (t) {\n return t.isType(type);\n })[0];\n\n if (!solidityType) {\n throw Error('invalid solidity type!: ' + type);\n }\n\n return solidityType;\n};\n\n/**\n * Should be used to encode plain param\n *\n * @method encodeParam\n * @param {String} type\n * @param {Object} plain param\n * @return {String} encoded plain param\n */\nSolidityCoder.prototype.encodeParam = function (type, param) {\n return this.encodeParams([type], [param]);\n};\n\n/**\n * Should be used to encode list of params\n *\n * @method encodeParams\n * @param {Array} types\n * @param {Array} params\n * @return {String} encoded list of params\n */\nSolidityCoder.prototype.encodeParams = function (types, params) {\n var solidityTypes = this.getSolidityTypes(types);\n\n var encodeds = solidityTypes.map(function (solidityType, index) {\n return solidityType.encode(params[index], types[index]);\n });\n\n var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {\n var staticPartLength = solidityType.staticPartLength(types[index]);\n var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;\n return acc + roundedStaticPartLength;\n }, 0);\n\n var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); \n\n return result;\n};\n\nSolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {\n var result = \"\";\n var self = this;\n\n var isDynamic = function (i) {\n return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]);\n };\n\n types.forEach(function (type, i) {\n if (isDynamic(i)) {\n result += f.formatInputInt(dynamicOffset).encode();\n var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n dynamicOffset += e.length / 2;\n } else {\n // don't add length to dynamicOffset. it's already counted\n result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n }\n\n // TODO: figure out nested arrays\n });\n \n types.forEach(function (type, i) {\n if (isDynamic(i)) {\n var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);\n dynamicOffset += e.length / 2;\n result += e;\n }\n });\n return result;\n};\n\n// TODO: refactor whole encoding!\nSolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {\n var self = this;\n if (solidityType.isDynamicArray(type)) {\n return (function () {\n // offset was already set\n var nestedName = solidityType.nestedName(type);\n var nestedStaticPartLength = solidityType.staticPartLength(nestedName);\n var result = encoded[0];\n \n (function () {\n var previousLength = 2; // in int\n if (solidityType.isDynamicArray(nestedName)) {\n for (var i = 1; i < encoded.length; i++) {\n previousLength += +(encoded[i - 1])[0] || 0;\n result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();\n }\n }\n })();\n \n // first element is length, skip it\n (function () {\n for (var i = 0; i < encoded.length - 1; i++) {\n var additionalOffset = result / 2;\n result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset);\n }\n })();\n\n return result;\n })();\n \n } else if (solidityType.isStaticArray(type)) {\n return (function () {\n var nestedName = solidityType.nestedName(type);\n var nestedStaticPartLength = solidityType.staticPartLength(nestedName);\n var result = \"\";\n\n\n if (solidityType.isDynamicArray(nestedName)) {\n (function () {\n var previousLength = 0; // in int\n for (var i = 0; i < encoded.length; i++) {\n // calculate length of previous item\n previousLength += +(encoded[i - 1] || [])[0] || 0; \n result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();\n }\n })();\n }\n\n (function () {\n for (var i = 0; i < encoded.length; i++) {\n var additionalOffset = result / 2;\n result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset);\n }\n })();\n\n return result;\n })();\n }\n\n return encoded;\n};\n\n/**\n * Should be used to decode bytes to plain param\n *\n * @method decodeParam\n * @param {String} type\n * @param {String} bytes\n * @return {Object} plain param\n */\nSolidityCoder.prototype.decodeParam = function (type, bytes) {\n return this.decodeParams([type], bytes)[0];\n};\n\n/**\n * Should be used to decode list of params\n *\n * @method decodeParam\n * @param {Array} types\n * @param {String} bytes\n * @return {Array} array of plain params\n */\nSolidityCoder.prototype.decodeParams = function (types, bytes) {\n var solidityTypes = this.getSolidityTypes(types);\n var offsets = this.getOffsets(types, solidityTypes);\n \n return solidityTypes.map(function (solidityType, index) {\n return solidityType.decode(bytes, offsets[index], types[index], index);\n });\n};\n\nSolidityCoder.prototype.getOffsets = function (types, solidityTypes) {\n var lengths = solidityTypes.map(function (solidityType, index) {\n return solidityType.staticPartLength(types[index]);\n });\n \n for (var i = 1; i < lengths.length; i++) {\n // sum with length of previous element\n lengths[i] += lengths[i - 1]; \n }\n\n return lengths.map(function (length, index) {\n // remove the current length, so the length is sum of previous elements\n var staticPartLength = solidityTypes[index].staticPartLength(types[index]);\n return length - staticPartLength; \n });\n};\n\nSolidityCoder.prototype.getSolidityTypes = function (types) {\n var self = this;\n return types.map(function (type) {\n return self._requireType(type);\n });\n};\n\nvar coder = new SolidityCoder([\n new SolidityTypeAddress(),\n new SolidityTypeBool(),\n new SolidityTypeInt(),\n new SolidityTypeUInt(),\n new SolidityTypeDynamicBytes(),\n new SolidityTypeBytes(),\n new SolidityTypeString(),\n new SolidityTypeReal(),\n new SolidityTypeUReal()\n]);\n\nmodule.exports = coder;\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\nvar SolidityTypeDynamicBytes = function () {\n this._inputFormatter = f.formatInputDynamicBytes;\n this._outputFormatter = f.formatOutputDynamicBytes;\n};\n\nSolidityTypeDynamicBytes.prototype = new SolidityType({});\nSolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;\n\nSolidityTypeDynamicBytes.prototype.isType = function (name) {\n return !!name.match(/^bytes(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeDynamicBytes.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nSolidityTypeDynamicBytes.prototype.isDynamicType = function () {\n return true;\n};\n\nmodule.exports = SolidityTypeDynamicBytes;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file formatters.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar BigNumber = require('bignumber.js');\nvar utils = require('../utils/utils');\nvar c = require('../utils/config');\nvar SolidityParam = require('./param');\n\n\n/**\n * Formats input value to byte representation of int\n * If value is negative, return it's two's complement\n * If the value is floating point, round it down\n *\n * @method formatInputInt\n * @param {String|Number|BigNumber} value that needs to be formatted\n * @returns {SolidityParam}\n */\nvar formatInputInt = function (value) {\n BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);\n var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64);\n return new SolidityParam(result);\n};\n\n/**\n * Formats input bytes\n *\n * @method formatInputBytes\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputBytes = function (value) {\n var result = utils.toHex(value).substr(2);\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(result);\n};\n\n/**\n * Formats input bytes\n *\n * @method formatDynamicInputBytes\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputDynamicBytes = function (value) {\n var result = utils.toHex(value).substr(2);\n var length = result.length / 2;\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(formatInputInt(length).value + result);\n};\n\n/**\n * Formats input value to byte representation of string\n *\n * @method formatInputString\n * @param {String}\n * @returns {SolidityParam}\n */\nvar formatInputString = function (value) {\n var result = utils.fromUtf8(value).substr(2);\n var length = result.length / 2;\n var l = Math.floor((result.length + 63) / 64);\n result = utils.padRight(result, l * 64);\n return new SolidityParam(formatInputInt(length).value + result);\n};\n\n/**\n * Formats input value to byte representation of bool\n *\n * @method formatInputBool\n * @param {Boolean}\n * @returns {SolidityParam}\n */\nvar formatInputBool = function (value) {\n var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0');\n return new SolidityParam(result);\n};\n\n/**\n * Formats input value to byte representation of real\n * Values are multiplied by 2^m and encoded as integers\n *\n * @method formatInputReal\n * @param {String|Number|BigNumber}\n * @returns {SolidityParam}\n */\nvar formatInputReal = function (value) {\n return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));\n};\n\n/**\n * Check if input value is negative\n *\n * @method signedIsNegative\n * @param {String} value is hex format\n * @returns {Boolean} true if it is negative, otherwise false\n */\nvar signedIsNegative = function (value) {\n return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';\n};\n\n/**\n * Formats right-aligned output bytes to int\n *\n * @method formatOutputInt\n * @param {SolidityParam} param\n * @returns {BigNumber} right-aligned output bytes formatted to big number\n */\nvar formatOutputInt = function (param) {\n var value = param.staticPart() || \"0\";\n\n // check if it's negative number\n // it it is, return two's complement\n if (signedIsNegative(value)) {\n return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);\n }\n return new BigNumber(value, 16);\n};\n\n/**\n * Formats right-aligned output bytes to uint\n *\n * @method formatOutputUInt\n * @param {SolidityParam}\n * @returns {BigNumeber} right-aligned output bytes formatted to uint\n */\nvar formatOutputUInt = function (param) {\n var value = param.staticPart() || \"0\";\n return new BigNumber(value, 16);\n};\n\n/**\n * Formats right-aligned output bytes to real\n *\n * @method formatOutputReal\n * @param {SolidityParam}\n * @returns {BigNumber} input bytes formatted to real\n */\nvar formatOutputReal = function (param) {\n return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); \n};\n\n/**\n * Formats right-aligned output bytes to ureal\n *\n * @method formatOutputUReal\n * @param {SolidityParam}\n * @returns {BigNumber} input bytes formatted to ureal\n */\nvar formatOutputUReal = function (param) {\n return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); \n};\n\n/**\n * Should be used to format output bool\n *\n * @method formatOutputBool\n * @param {SolidityParam}\n * @returns {Boolean} right-aligned input bytes formatted to bool\n */\nvar formatOutputBool = function (param) {\n return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;\n};\n\n/**\n * Should be used to format output bytes\n *\n * @method formatOutputBytes\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} hex string\n */\nvar formatOutputBytes = function (param) {\n return '0x' + param.staticPart();\n};\n\n/**\n * Should be used to format output bytes\n *\n * @method formatOutputDynamicBytes\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} hex string\n */\nvar formatOutputDynamicBytes = function (param) {\n var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;\n return '0x' + param.dynamicPart().substr(64, length);\n};\n\n/**\n * Should be used to format output string\n *\n * @method formatOutputString\n * @param {SolidityParam} left-aligned hex representation of string\n * @returns {String} ascii string\n */\nvar formatOutputString = function (param) {\n var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;\n return utils.toUtf8(param.dynamicPart().substr(64, length));\n};\n\n/**\n * Should be used to format output address\n *\n * @method formatOutputAddress\n * @param {SolidityParam} right-aligned input bytes\n * @returns {String} address\n */\nvar formatOutputAddress = function (param) {\n var value = param.staticPart();\n return \"0x\" + value.slice(value.length - 40, value.length);\n};\n\nmodule.exports = {\n formatInputInt: formatInputInt,\n formatInputBytes: formatInputBytes,\n formatInputDynamicBytes: formatInputDynamicBytes,\n formatInputString: formatInputString,\n formatInputBool: formatInputBool,\n formatInputReal: formatInputReal,\n formatOutputInt: formatOutputInt,\n formatOutputUInt: formatOutputUInt,\n formatOutputReal: formatOutputReal,\n formatOutputUReal: formatOutputUReal,\n formatOutputBool: formatOutputBool,\n formatOutputBytes: formatOutputBytes,\n formatOutputDynamicBytes: formatOutputDynamicBytes,\n formatOutputString: formatOutputString,\n formatOutputAddress: formatOutputAddress\n};\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeInt is a prootype that represents int type\n * It matches:\n * int\n * int[]\n * int[4]\n * int[][]\n * int[3][]\n * int[][6][], ...\n * int32\n * int64[]\n * int8[4]\n * int256[][]\n * int[3][]\n * int64[][6][], ...\n */\nvar SolidityTypeInt = function () {\n this._inputFormatter = f.formatInputInt;\n this._outputFormatter = f.formatOutputInt;\n};\n\nSolidityTypeInt.prototype = new SolidityType({});\nSolidityTypeInt.prototype.constructor = SolidityTypeInt;\n\nSolidityTypeInt.prototype.isType = function (name) {\n return !!name.match(/^int([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeInt.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeInt;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file param.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\n\n/**\n * SolidityParam object prototype.\n * Should be used when encoding, decoding solidity bytes\n */\nvar SolidityParam = function (value, offset) {\n this.value = value || '';\n this.offset = offset; // offset in bytes\n};\n\n/**\n * This method should be used to get length of params's dynamic part\n * \n * @method dynamicPartLength\n * @returns {Number} length of dynamic part (in bytes)\n */\nSolidityParam.prototype.dynamicPartLength = function () {\n return this.dynamicPart().length / 2;\n};\n\n/**\n * This method should be used to create copy of solidity param with different offset\n *\n * @method withOffset\n * @param {Number} offset length in bytes\n * @returns {SolidityParam} new solidity param with applied offset\n */\nSolidityParam.prototype.withOffset = function (offset) {\n return new SolidityParam(this.value, offset);\n};\n\n/**\n * This method should be used to combine solidity params together\n * eg. when appending an array\n *\n * @method combine\n * @param {SolidityParam} param with which we should combine\n * @param {SolidityParam} result of combination\n */\nSolidityParam.prototype.combine = function (param) {\n return new SolidityParam(this.value + param.value); \n};\n\n/**\n * This method should be called to check if param has dynamic size.\n * If it has, it returns true, otherwise false\n *\n * @method isDynamic\n * @returns {Boolean}\n */\nSolidityParam.prototype.isDynamic = function () {\n return this.offset !== undefined;\n};\n\n/**\n * This method should be called to transform offset to bytes\n *\n * @method offsetAsBytes\n * @returns {String} bytes representation of offset\n */\nSolidityParam.prototype.offsetAsBytes = function () {\n return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);\n};\n\n/**\n * This method should be called to get static part of param\n *\n * @method staticPart\n * @returns {String} offset if it is a dynamic param, otherwise value\n */\nSolidityParam.prototype.staticPart = function () {\n if (!this.isDynamic()) {\n return this.value; \n } \n return this.offsetAsBytes();\n};\n\n/**\n * This method should be called to get dynamic part of param\n *\n * @method dynamicPart\n * @returns {String} returns a value if it is a dynamic param, otherwise empty string\n */\nSolidityParam.prototype.dynamicPart = function () {\n return this.isDynamic() ? this.value : '';\n};\n\n/**\n * This method should be called to encode param\n *\n * @method encode\n * @returns {String}\n */\nSolidityParam.prototype.encode = function () {\n return this.staticPart() + this.dynamicPart();\n};\n\n/**\n * This method should be called to encode array of params\n *\n * @method encodeList\n * @param {Array[SolidityParam]} params\n * @returns {String}\n */\nSolidityParam.encodeList = function (params) {\n \n // updating offsets\n var totalOffset = params.length * 32;\n var offsetParams = params.map(function (param) {\n if (!param.isDynamic()) {\n return param;\n }\n var offset = totalOffset;\n totalOffset += param.dynamicPartLength();\n return param.withOffset(offset);\n });\n\n // encode everything!\n return offsetParams.reduce(function (result, param) {\n return result + param.dynamicPart();\n }, offsetParams.reduce(function (result, param) {\n return result + param.staticPart();\n }, ''));\n};\n\n\n\nmodule.exports = SolidityParam;\n\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeReal is a prootype that represents real type\n * It matches:\n * real\n * real[]\n * real[4]\n * real[][]\n * real[3][]\n * real[][6][], ...\n * real32\n * real64[]\n * real8[4]\n * real256[][]\n * real[3][]\n * real64[][6][], ...\n */\nvar SolidityTypeReal = function () {\n this._inputFormatter = f.formatInputReal;\n this._outputFormatter = f.formatOutputReal;\n};\n\nSolidityTypeReal.prototype = new SolidityType({});\nSolidityTypeReal.prototype.constructor = SolidityTypeReal;\n\nSolidityTypeReal.prototype.isType = function (name) {\n return !!name.match(/real([0-9]*)?(\\[([0-9]*)\\])?/);\n};\n\nSolidityTypeReal.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeReal;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\nvar SolidityTypeString = function () {\n this._inputFormatter = f.formatInputString;\n this._outputFormatter = f.formatOutputString;\n};\n\nSolidityTypeString.prototype = new SolidityType({});\nSolidityTypeString.prototype.constructor = SolidityTypeString;\n\nSolidityTypeString.prototype.isType = function (name) {\n return !!name.match(/^string(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeString.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nSolidityTypeString.prototype.isDynamicType = function () {\n return true;\n};\n\nmodule.exports = SolidityTypeString;\n\n", - "var f = require('./formatters');\nvar SolidityParam = require('./param');\n\n/**\n * SolidityType prototype is used to encode/decode solidity params of certain type\n */\nvar SolidityType = function (config) {\n this._inputFormatter = config.inputFormatter;\n this._outputFormatter = config.outputFormatter;\n};\n\n/**\n * Should be used to determine if this SolidityType do match given name\n *\n * @method isType\n * @param {String} name\n * @return {Bool} true if type match this SolidityType, otherwise false\n */\nSolidityType.prototype.isType = function (name) {\n throw \"this method should be overrwritten for type \" + name;\n};\n\n/**\n * Should be used to determine what is the length of static part in given type\n *\n * @method staticPartLength\n * @param {String} name\n * @return {Number} length of static part in bytes\n */\nSolidityType.prototype.staticPartLength = function (name) {\n throw \"this method should be overrwritten for type: \" + name;\n};\n\n/**\n * Should be used to determine if type is dynamic array\n * eg: \n * \"type[]\" => true\n * \"type[4]\" => false\n *\n * @method isDynamicArray\n * @param {String} name\n * @return {Bool} true if the type is dynamic array \n */\nSolidityType.prototype.isDynamicArray = function (name) {\n var nestedTypes = this.nestedTypes(name);\n return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);\n};\n\n/**\n * Should be used to determine if type is static array\n * eg: \n * \"type[]\" => false\n * \"type[4]\" => true\n *\n * @method isStaticArray\n * @param {String} name\n * @return {Bool} true if the type is static array \n */\nSolidityType.prototype.isStaticArray = function (name) {\n var nestedTypes = this.nestedTypes(name);\n return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);\n};\n\n/**\n * Should return length of static array\n * eg. \n * \"int[32]\" => 32\n * \"int256[14]\" => 14\n * \"int[2][3]\" => 3\n * \"int\" => 1\n * \"int[1]\" => 1\n * \"int[]\" => 1\n *\n * @method staticArrayLength\n * @param {String} name\n * @return {Number} static array length\n */\nSolidityType.prototype.staticArrayLength = function (name) {\n var nestedTypes = this.nestedTypes(name);\n if (nestedTypes) {\n return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);\n }\n return 1;\n};\n\n/**\n * Should return nested type\n * eg.\n * \"int[32]\" => \"int\"\n * \"int256[14]\" => \"int256\"\n * \"int[2][3]\" => \"int[2]\"\n * \"int\" => \"int\"\n * \"int[]\" => \"int\"\n *\n * @method nestedName\n * @param {String} name\n * @return {String} nested name\n */\nSolidityType.prototype.nestedName = function (name) {\n // remove last [] in name\n var nestedTypes = this.nestedTypes(name);\n if (!nestedTypes) {\n return name;\n }\n\n return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);\n};\n\n/**\n * Should return true if type has dynamic size by default\n * such types are \"string\", \"bytes\"\n *\n * @method isDynamicType\n * @param {String} name\n * @return {Bool} true if is dynamic, otherwise false\n */\nSolidityType.prototype.isDynamicType = function () {\n return false;\n};\n\n/**\n * Should return array of nested types\n * eg.\n * \"int[2][3][]\" => [\"[2]\", \"[3]\", \"[]\"]\n * \"int[] => [\"[]\"]\n * \"int\" => null\n *\n * @method nestedTypes\n * @param {String} name\n * @return {Array} array of nested types\n */\nSolidityType.prototype.nestedTypes = function (name) {\n // return list of strings eg. \"[]\", \"[3]\", \"[]\", \"[2]\"\n return name.match(/(\\[[0-9]*\\])/g);\n};\n\n/**\n * Should be used to encode the value\n *\n * @method encode\n * @param {Object} value \n * @param {String} name\n * @return {String} encoded value\n */\nSolidityType.prototype.encode = function (value, name) {\n var self = this;\n if (this.isDynamicArray(name)) {\n\n return (function () {\n var length = value.length; // in int\n var nestedName = self.nestedName(name);\n\n var result = [];\n result.push(f.formatInputInt(length).encode());\n \n value.forEach(function (v) {\n result.push(self.encode(v, nestedName));\n });\n\n return result;\n })();\n\n } else if (this.isStaticArray(name)) {\n\n return (function () {\n var length = self.staticArrayLength(name); // in int\n var nestedName = self.nestedName(name);\n\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(self.encode(value[i], nestedName));\n }\n\n return result;\n })();\n\n }\n\n return this._inputFormatter(value, name).encode();\n};\n\n/**\n * Should be used to decode value from bytes\n *\n * @method decode\n * @param {String} bytes\n * @param {Number} offset in bytes\n * @param {String} name type name\n * @returns {Object} decoded value\n */\nSolidityType.prototype.decode = function (bytes, offset, name) {\n var self = this;\n\n if (this.isDynamicArray(name)) {\n\n return (function () {\n var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes\n var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int\n var arrayStart = arrayOffset + 32; // array starts after length; // in bytes\n\n var nestedName = self.nestedName(name);\n var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes\n var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;\n var result = [];\n\n for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {\n result.push(self.decode(bytes, arrayStart + i, nestedName));\n }\n\n return result;\n })();\n\n } else if (this.isStaticArray(name)) {\n\n return (function () {\n var length = self.staticArrayLength(name); // in int\n var arrayStart = offset; // in bytes\n\n var nestedName = self.nestedName(name);\n var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes\n var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;\n var result = [];\n\n for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {\n result.push(self.decode(bytes, arrayStart + i, nestedName));\n }\n\n return result;\n })();\n } else if (this.isDynamicType(name)) {\n \n return (function () {\n var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes\n var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes\n var roundedLength = Math.floor((length + 31) / 32); // in int\n \n return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0));\n })();\n }\n\n var length = this.staticPartLength(name);\n return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2)));\n};\n\nmodule.exports = SolidityType;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeUInt is a prootype that represents uint type\n * It matches:\n * uint\n * uint[]\n * uint[4]\n * uint[][]\n * uint[3][]\n * uint[][6][], ...\n * uint32\n * uint64[]\n * uint8[4]\n * uint256[][]\n * uint[3][]\n * uint64[][6][], ...\n */\nvar SolidityTypeUInt = function () {\n this._inputFormatter = f.formatInputInt;\n this._outputFormatter = f.formatOutputUInt;\n};\n\nSolidityTypeUInt.prototype = new SolidityType({});\nSolidityTypeUInt.prototype.constructor = SolidityTypeUInt;\n\nSolidityTypeUInt.prototype.isType = function (name) {\n return !!name.match(/^uint([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeUInt.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeUInt;\n", - "var f = require('./formatters');\nvar SolidityType = require('./type');\n\n/**\n * SolidityTypeUReal is a prootype that represents ureal type\n * It matches:\n * ureal\n * ureal[]\n * ureal[4]\n * ureal[][]\n * ureal[3][]\n * ureal[][6][], ...\n * ureal32\n * ureal64[]\n * ureal8[4]\n * ureal256[][]\n * ureal[3][]\n * ureal64[][6][], ...\n */\nvar SolidityTypeUReal = function () {\n this._inputFormatter = f.formatInputReal;\n this._outputFormatter = f.formatOutputUReal;\n};\n\nSolidityTypeUReal.prototype = new SolidityType({});\nSolidityTypeUReal.prototype.constructor = SolidityTypeUReal;\n\nSolidityTypeUReal.prototype.isType = function (name) {\n return !!name.match(/^ureal([0-9]*)?(\\[([0-9]*)\\])*$/);\n};\n\nSolidityTypeUReal.prototype.staticPartLength = function (name) {\n return 32 * this.staticArrayLength(name);\n};\n\nmodule.exports = SolidityTypeUReal;\n", - "'use strict';\n\n// go env doesn't have and need XMLHttpRequest\nif (typeof XMLHttpRequest === 'undefined') {\n exports.XMLHttpRequest = {};\n} else {\n exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line\n}\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file config.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\n/**\n * Utils\n * \n * @module utils\n */\n\n/**\n * Utility functions\n * \n * @class [utils] config\n * @constructor\n */\n\n\n/// required to define ETH_BIGNUMBER_ROUNDING_MODE\nvar BigNumber = require('bignumber.js');\n\nvar ETH_UNITS = [\n 'wei',\n 'kwei',\n 'Mwei',\n 'Gwei',\n 'szabo',\n 'finney',\n 'femtoether',\n 'picoether',\n 'nanoether',\n 'microether',\n 'milliether',\n 'nano',\n 'micro',\n 'milli',\n 'ether',\n 'grand',\n 'Mether',\n 'Gether',\n 'Tether',\n 'Pether',\n 'Eether',\n 'Zether',\n 'Yether',\n 'Nether',\n 'Dether',\n 'Vether',\n 'Uether'\n];\n\nmodule.exports = {\n ETH_PADDING: 32,\n ETH_SIGNATURE_LENGTH: 4,\n ETH_UNITS: ETH_UNITS,\n ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },\n ETH_POLLING_TIMEOUT: 1000/2,\n defaultBlock: 'latest',\n defaultAccount: undefined\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file sha3.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar CryptoJS = require('crypto-js');\nvar sha3 = require('crypto-js/sha3');\n\nmodule.exports = function (value, options) {\n if (options && options.encoding === 'hex') {\n if (value.length > 2 && value.substr(0, 2) === '0x') {\n value = value.substr(2);\n }\n value = CryptoJS.enc.Hex.parse(value);\n }\n\n return sha3(value, {\n outputLength: 256\n }).toString();\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file utils.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\n/**\n * Utils\n *\n * @module utils\n */\n\n/**\n * Utility functions\n *\n * @class [utils] utils\n * @constructor\n */\n\n\nvar BigNumber = require('bignumber.js');\nvar sha3 = require('./sha3.js');\nvar utf8 = require('utf8');\n\nvar unitMap = {\n 'noether': '0', \n 'wei': '1',\n 'kwei': '1000',\n 'Kwei': '1000',\n 'babbage': '1000',\n 'femtoether': '1000',\n 'mwei': '1000000',\n 'Mwei': '1000000',\n 'lovelace': '1000000',\n 'picoether': '1000000',\n 'gwei': '1000000000',\n 'Gwei': '1000000000',\n 'shannon': '1000000000',\n 'nanoether': '1000000000',\n 'nano': '1000000000',\n 'szabo': '1000000000000',\n 'microether': '1000000000000',\n 'micro': '1000000000000',\n 'finney': '1000000000000000',\n 'milliether': '1000000000000000',\n 'milli': '1000000000000000',\n 'ether': '1000000000000000000',\n 'kether': '1000000000000000000000',\n 'grand': '1000000000000000000000',\n 'mether': '1000000000000000000000000',\n 'gether': '1000000000000000000000000000',\n 'tether': '1000000000000000000000000000000'\n};\n\n/**\n * Should be called to pad string to expected length\n *\n * @method padLeft\n * @param {String} string to be padded\n * @param {Number} characters that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar padLeft = function (string, chars, sign) {\n return new Array(chars - string.length + 1).join(sign ? sign : \"0\") + string;\n};\n\n/**\n * Should be called to pad string to expected length\n *\n * @method padRight\n * @param {String} string to be padded\n * @param {Number} characters that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar padRight = function (string, chars, sign) {\n return string + (new Array(chars - string.length + 1).join(sign ? sign : \"0\"));\n};\n\n/**\n * Should be called to get utf8 from it's hex representation\n *\n * @method toUtf8\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nvar toUtf8 = function(hex) {\n// Find termination\n var str = \"\";\n var i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i+=2) {\n var code = parseInt(hex.substr(i, 2), 16);\n if (code === 0)\n break;\n str += String.fromCharCode(code);\n }\n\n return utf8.decode(str);\n};\n\n/**\n * Should be called to get ascii from it's hex representation\n *\n * @method toAscii\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nvar toAscii = function(hex) {\n// Find termination\n var str = \"\";\n var i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i+=2) {\n var code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n\n return str;\n};\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @method fromUtf8\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nvar fromUtf8 = function(str) {\n str = utf8.encode(str);\n var hex = \"\";\n for(var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n if (code === 0)\n break;\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return \"0x\" + hex;\n};\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @method fromAscii\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nvar fromAscii = function(str) {\n var hex = \"\";\n for(var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return \"0x\" + hex;\n};\n\n/**\n * Should be used to create full function/event name from json abi\n *\n * @method transformToFullName\n * @param {Object} json-abi\n * @return {String} full fnction/event name\n */\nvar transformToFullName = function (json) {\n if (json.name.indexOf('(') !== -1) {\n return json.name;\n }\n\n var typeName = json.inputs.map(function(i){return i.type; }).join();\n return json.name + '(' + typeName + ')';\n};\n\n/**\n * Should be called to get display name of contract function\n *\n * @method extractDisplayName\n * @param {String} name of function/event\n * @returns {String} display name for function/event eg. multiply(uint256) -> multiply\n */\nvar extractDisplayName = function (name) {\n var length = name.indexOf('(');\n return length !== -1 ? name.substr(0, length) : name;\n};\n\n/// @returns overloaded part of function/event name\nvar extractTypeName = function (name) {\n /// TODO: make it invulnerable\n var length = name.indexOf('(');\n return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : \"\";\n};\n\n/**\n * Converts value to it's decimal representation in string\n *\n * @method toDecimal\n * @param {String|Number|BigNumber}\n * @return {String}\n */\nvar toDecimal = function (value) {\n return toBigNumber(value).toNumber();\n};\n\n/**\n * Converts value to it's hex representation\n *\n * @method fromDecimal\n * @param {String|Number|BigNumber}\n * @return {String}\n */\nvar fromDecimal = function (value) {\n var number = toBigNumber(value);\n var result = number.toString(16);\n\n return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;\n};\n\n/**\n * Auto converts any given value into it's hex representation.\n *\n * And even stringifys objects before.\n *\n * @method toHex\n * @param {String|Number|BigNumber|Object}\n * @return {String}\n */\nvar toHex = function (val) {\n /*jshint maxcomplexity: 8 */\n\n if (isBoolean(val))\n return fromDecimal(+val);\n\n if (isBigNumber(val))\n return fromDecimal(val);\n\n if (isObject(val))\n return fromUtf8(JSON.stringify(val));\n\n // if its a negative number, pass it through fromDecimal\n if (isString(val)) {\n if (val.indexOf('-0x') === 0)\n return fromDecimal(val);\n else if(val.indexOf('0x') === 0)\n return val;\n else if (!isFinite(val))\n return fromAscii(val);\n }\n\n return fromDecimal(val);\n};\n\n/**\n * Returns value of unit in Wei\n *\n * @method getValueOfUnit\n * @param {String} unit the unit to convert to, default ether\n * @returns {BigNumber} value of the unit (in Wei)\n * @throws error if the unit is not correct:w\n */\nvar getValueOfUnit = function (unit) {\n unit = unit ? unit.toLowerCase() : 'ether';\n var unitValue = unitMap[unit];\n if (unitValue === undefined) {\n throw new Error('This unit doesn\\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));\n }\n return new BigNumber(unitValue, 10);\n};\n\n/**\n * Takes a number of wei and converts it to any other ether unit.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method fromWei\n * @param {Number|String} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert to, default ether\n * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number\n*/\nvar fromWei = function(number, unit) {\n var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));\n\n return isBigNumber(number) ? returnValue : returnValue.toString(10);\n};\n\n/**\n * Takes a number of a unit and converts it to wei.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method toWei\n * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert from, default ether\n * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number\n*/\nvar toWei = function(number, unit) {\n var returnValue = toBigNumber(number).times(getValueOfUnit(unit));\n\n return isBigNumber(number) ? returnValue : returnValue.toString(10);\n};\n\n/**\n * Takes an input and transforms it into an bignumber\n *\n * @method toBigNumber\n * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber\n * @return {BigNumber} BigNumber\n*/\nvar toBigNumber = function(number) {\n /*jshint maxcomplexity:5 */\n number = number || 0;\n if (isBigNumber(number))\n return number;\n\n if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {\n return new BigNumber(number.replace('0x',''), 16);\n }\n\n return new BigNumber(number.toString(10), 10);\n};\n\n/**\n * Takes and input transforms it into bignumber and if it is negative value, into two's complement\n *\n * @method toTwosComplement\n * @param {Number|String|BigNumber}\n * @return {BigNumber}\n */\nvar toTwosComplement = function (number) {\n var bigNumber = toBigNumber(number);\n if (bigNumber.lessThan(0)) {\n return new BigNumber(\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\", 16).plus(bigNumber).plus(1);\n }\n return bigNumber;\n};\n\n/**\n * Checks if the given string is strictly an address\n *\n * @method isStrictAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isStrictAddress = function (address) {\n return /^0x[0-9a-f]{40}$/i.test(address);\n};\n\n/**\n * Checks if the given string is an address\n *\n * @method isAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isAddress = function (address) {\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n // check if it has the basic requirements of an address\n return false;\n } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {\n // If it's all small caps or all all caps, return true\n return true;\n } else {\n // Otherwise check each case\n return isChecksumAddress(address);\n }\n};\n\n\n\n/**\n * Checks if the given string is a checksummed address\n *\n * @method isChecksumAddress\n * @param {String} address the given HEX adress\n * @return {Boolean}\n*/\nvar isChecksumAddress = function (address) { \n // Check each case\n address = address.replace('0x','');\n var addressHash = sha3(address.toLowerCase());\n\n for (var i = 0; i < 40; i++ ) { \n // the nth letter should be uppercase if the nth digit of casemap is 1\n if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {\n return false;\n }\n }\n return true; \n};\n\n\n\n/**\n * Makes a checksum address\n *\n * @method toChecksumAddress\n * @param {String} address the given HEX adress\n * @return {String}\n*/\nvar toChecksumAddress = function (address) { \n if (typeof address === 'undefined') return '';\n\n address = address.toLowerCase().replace('0x','');\n var addressHash = sha3(address);\n var checksumAddress = '0x';\n\n for (var i = 0; i < address.length; i++ ) { \n // If ith character is 9 to f then make it uppercase \n if (parseInt(addressHash[i], 16) > 7) {\n checksumAddress += address[i].toUpperCase();\n } else {\n checksumAddress += address[i];\n }\n }\n return checksumAddress;\n};\n\n/**\n * Transforms given string to valid 20 bytes-length addres with 0x prefix\n *\n * @method toAddress\n * @param {String} address\n * @return {String} formatted address\n */\nvar toAddress = function (address) {\n if (isStrictAddress(address)) {\n return address;\n }\n\n if (/^[0-9a-f]{40}$/.test(address)) {\n return '0x' + address;\n }\n\n return '0x' + padLeft(toHex(address).substr(2), 40);\n};\n\n/**\n * Returns true if object is BigNumber, otherwise false\n *\n * @method isBigNumber\n * @param {Object}\n * @return {Boolean}\n */\nvar isBigNumber = function (object) {\n return object instanceof BigNumber ||\n (object && object.constructor && object.constructor.name === 'BigNumber');\n};\n\n/**\n * Returns true if object is string, otherwise false\n *\n * @method isString\n * @param {Object}\n * @return {Boolean}\n */\nvar isString = function (object) {\n return typeof object === 'string' ||\n (object && object.constructor && object.constructor.name === 'String');\n};\n\n/**\n * Returns true if object is function, otherwise false\n *\n * @method isFunction\n * @param {Object}\n * @return {Boolean}\n */\nvar isFunction = function (object) {\n return typeof object === 'function';\n};\n\n/**\n * Returns true if object is Objet, otherwise false\n *\n * @method isObject\n * @param {Object}\n * @return {Boolean}\n */\nvar isObject = function (object) {\n return typeof object === 'object';\n};\n\n/**\n * Returns true if object is boolean, otherwise false\n *\n * @method isBoolean\n * @param {Object}\n * @return {Boolean}\n */\nvar isBoolean = function (object) {\n return typeof object === 'boolean';\n};\n\n/**\n * Returns true if object is array, otherwise false\n *\n * @method isArray\n * @param {Object}\n * @return {Boolean}\n */\nvar isArray = function (object) {\n return object instanceof Array;\n};\n\n/**\n * Returns true if given string is valid json object\n *\n * @method isJson\n * @param {String}\n * @return {Boolean}\n */\nvar isJson = function (str) {\n try {\n return !!JSON.parse(str);\n } catch (e) {\n return false;\n }\n};\n\nmodule.exports = {\n padLeft: padLeft,\n padRight: padRight,\n toHex: toHex,\n toDecimal: toDecimal,\n fromDecimal: fromDecimal,\n toUtf8: toUtf8,\n toAscii: toAscii,\n fromUtf8: fromUtf8,\n fromAscii: fromAscii,\n transformToFullName: transformToFullName,\n extractDisplayName: extractDisplayName,\n extractTypeName: extractTypeName,\n toWei: toWei,\n fromWei: fromWei,\n toBigNumber: toBigNumber,\n toTwosComplement: toTwosComplement,\n toAddress: toAddress,\n isBigNumber: isBigNumber,\n isStrictAddress: isStrictAddress,\n isAddress: isAddress,\n isChecksumAddress: isChecksumAddress,\n toChecksumAddress: toChecksumAddress,\n isFunction: isFunction,\n isString: isString,\n isObject: isObject,\n isBoolean: isBoolean,\n isArray: isArray,\n isJson: isJson\n};\n", - "module.exports={\n \"version\": \"0.17.0-alpha\"\n}\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file web3.js\n * @authors:\n * Jeffrey Wilcke \n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * Gav Wood \n * @date 2014\n */\n\nvar RequestManager = require('./web3/requestmanager');\nvar Iban = require('./web3/iban');\nvar Eth = require('./web3/methods/eth');\nvar DB = require('./web3/methods/db');\nvar Shh = require('./web3/methods/shh');\nvar Net = require('./web3/methods/net');\nvar Personal = require('./web3/methods/personal');\nvar Settings = require('./web3/settings');\nvar version = require('./version.json');\nvar utils = require('./utils/utils');\nvar sha3 = require('./utils/sha3');\nvar extend = require('./web3/extend');\nvar Batch = require('./web3/batch');\nvar Property = require('./web3/property');\nvar HttpProvider = require('./web3/httpprovider');\nvar IpcProvider = require('./web3/ipcprovider');\nvar BigNumber = require('bignumber.js');\n\n\n\nfunction Web3 (provider) {\n this._requestManager = new RequestManager(provider);\n this.currentProvider = provider;\n this.eth = new Eth(this);\n this.db = new DB(this);\n this.shh = new Shh(this);\n this.net = new Net(this);\n this.personal = new Personal(this);\n this.settings = new Settings();\n this.version = {\n api: version.version\n };\n this.providers = {\n HttpProvider: HttpProvider,\n IpcProvider: IpcProvider\n };\n this._extend = extend(this);\n this._extend({\n properties: properties()\n });\n}\n\n// expose providers on the class\nWeb3.providers = {\n HttpProvider: HttpProvider,\n IpcProvider: IpcProvider\n};\n\nWeb3.prototype.setProvider = function (provider) {\n this._requestManager.setProvider(provider);\n this.currentProvider = provider;\n};\n\nWeb3.prototype.reset = function (keepIsSyncing) {\n this._requestManager.reset(keepIsSyncing);\n this.settings = new Settings();\n};\n\nWeb3.prototype.BigNumber = BigNumber;\nWeb3.prototype.toHex = utils.toHex;\nWeb3.prototype.toAscii = utils.toAscii;\nWeb3.prototype.toUtf8 = utils.toUtf8;\nWeb3.prototype.fromAscii = utils.fromAscii;\nWeb3.prototype.fromUtf8 = utils.fromUtf8;\nWeb3.prototype.toDecimal = utils.toDecimal;\nWeb3.prototype.fromDecimal = utils.fromDecimal;\nWeb3.prototype.toBigNumber = utils.toBigNumber;\nWeb3.prototype.toWei = utils.toWei;\nWeb3.prototype.fromWei = utils.fromWei;\nWeb3.prototype.isAddress = utils.isAddress;\nWeb3.prototype.isChecksumAddress = utils.isChecksumAddress;\nWeb3.prototype.toChecksumAddress = utils.toChecksumAddress;\nWeb3.prototype.isIBAN = utils.isIBAN;\n\n\nWeb3.prototype.sha3 = function(string, options) {\n return '0x' + sha3(string, options);\n};\n\n/**\n * Transforms direct icap to address\n */\nWeb3.prototype.fromICAP = function (icap) {\n var iban = new Iban(icap);\n return iban.address();\n};\n\nvar properties = function () {\n return [\n new Property({\n name: 'version.node',\n getter: 'web3_clientVersion'\n }),\n new Property({\n name: 'version.network',\n getter: 'net_version',\n inputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'version.ethereum',\n getter: 'eth_protocolVersion',\n inputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'version.whisper',\n getter: 'shh_version',\n inputFormatter: utils.toDecimal\n })\n ];\n};\n\nWeb3.prototype.isConnected = function(){\n return (this.currentProvider && this.currentProvider.isConnected());\n};\n\nWeb3.prototype.createBatch = function () {\n return new Batch(this);\n};\n\nmodule.exports = Web3;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file allevents.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar sha3 = require('../utils/sha3');\nvar SolidityEvent = require('./event');\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\nvar Filter = require('./filter');\nvar watches = require('./methods/watches');\n\nvar AllSolidityEvents = function (requestManager, json, address) {\n this._requestManager = requestManager;\n this._json = json;\n this._address = address;\n};\n\nAllSolidityEvents.prototype.encode = function (options) {\n options = options || {};\n var result = {};\n\n ['fromBlock', 'toBlock'].filter(function (f) {\n return options[f] !== undefined;\n }).forEach(function (f) {\n result[f] = formatters.inputBlockNumberFormatter(options[f]);\n });\n\n result.address = this._address;\n\n return result;\n};\n\nAllSolidityEvents.prototype.decode = function (data) {\n data.data = data.data || '';\n data.topics = data.topics || [];\n\n var eventTopic = data.topics[0].slice(2);\n var match = this._json.filter(function (j) {\n return eventTopic === sha3(utils.transformToFullName(j));\n })[0];\n\n if (!match) { // cannot find matching event?\n console.warn('cannot find event for log');\n return data;\n }\n\n var event = new SolidityEvent(this._requestManager, match, this._address);\n return event.decode(data);\n};\n\nAllSolidityEvents.prototype.execute = function (options, callback) {\n\n if (utils.isFunction(arguments[arguments.length - 1])) {\n callback = arguments[arguments.length - 1];\n if(arguments.length === 1)\n options = null;\n }\n\n var o = this.encode(options);\n var formatter = this.decode.bind(this);\n return new Filter(this._requestManager, o, watches.eth(), formatter, callback);\n};\n\nAllSolidityEvents.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n contract.allEvents = execute;\n};\n\nmodule.exports = AllSolidityEvents;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file batch.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar Jsonrpc = require('./jsonrpc');\nvar errors = require('./errors');\n\nvar Batch = function (web3) {\n this.requestManager = web3._requestManager;\n this.requests = [];\n};\n\n/**\n * Should be called to add create new request to batch request\n *\n * @method add\n * @param {Object} jsonrpc requet object\n */\nBatch.prototype.add = function (request) {\n this.requests.push(request);\n};\n\n/**\n * Should be called to execute batch request\n *\n * @method execute\n */\nBatch.prototype.execute = function () {\n var requests = this.requests;\n this.requestManager.sendBatch(requests, function (err, results) {\n results = results || [];\n requests.map(function (request, index) {\n return results[index] || {};\n }).forEach(function (result, index) {\n if (requests[index].callback) {\n\n if (!Jsonrpc.isValidResponse(result)) {\n return requests[index].callback(errors.InvalidResponse(result));\n }\n\n requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));\n }\n });\n }); \n};\n\nmodule.exports = Batch;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file contract.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar utils = require('../utils/utils');\nvar coder = require('../solidity/coder');\nvar SolidityEvent = require('./event');\nvar SolidityFunction = require('./function');\nvar AllEvents = require('./allevents');\n\n/**\n * Should be called to encode constructor params\n *\n * @method encodeConstructorParams\n * @param {Array} abi\n * @param {Array} constructor params\n */\nvar encodeConstructorParams = function (abi, params) {\n return abi.filter(function (json) {\n return json.type === 'constructor' && json.inputs.length === params.length;\n }).map(function (json) {\n return json.inputs.map(function (input) {\n return input.type;\n });\n }).map(function (types) {\n return coder.encodeParams(types, params);\n })[0] || '';\n};\n\n/**\n * Should be called to add functions to contract object\n *\n * @method addFunctionsToContract\n * @param {Contract} contract\n * @param {Array} abi\n */\nvar addFunctionsToContract = function (contract) {\n contract.abi.filter(function (json) {\n return json.type === 'function';\n }).map(function (json) {\n return new SolidityFunction(contract._eth, json, contract.address);\n }).forEach(function (f) {\n f.attachToContract(contract);\n });\n};\n\n/**\n * Should be called to add events to contract object\n *\n * @method addEventsToContract\n * @param {Contract} contract\n * @param {Array} abi\n */\nvar addEventsToContract = function (contract) {\n var events = contract.abi.filter(function (json) {\n return json.type === 'event';\n });\n\n var All = new AllEvents(contract._eth._requestManager, events, contract.address);\n All.attachToContract(contract);\n\n events.map(function (json) {\n return new SolidityEvent(contract._eth._requestManager, json, contract.address);\n }).forEach(function (e) {\n e.attachToContract(contract);\n });\n};\n\n\n/**\n * Should be called to check if the contract gets properly deployed on the blockchain.\n *\n * @method checkForContractAddress\n * @param {Object} contract\n * @param {Function} callback\n * @returns {Undefined}\n */\nvar checkForContractAddress = function(contract, callback){\n var count = 0,\n callbackFired = false;\n\n // wait for receipt\n var filter = contract._eth.filter('latest', function(e){\n if (!e && !callbackFired) {\n count++;\n\n // stop watching after 50 blocks (timeout)\n if (count > 50) {\n\n filter.stopWatching();\n callbackFired = true;\n\n if (callback)\n callback(new Error('Contract transaction couldn\\'t be found after 50 blocks'));\n else\n throw new Error('Contract transaction couldn\\'t be found after 50 blocks');\n\n\n } else {\n\n contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){\n if(receipt && !callbackFired) {\n\n contract._eth.getCode(receipt.contractAddress, function(e, code){\n /*jshint maxcomplexity: 6 */\n\n if(callbackFired || !code)\n return;\n\n filter.stopWatching();\n callbackFired = true;\n\n if(code.length > 3) {\n\n // console.log('Contract code deployed!');\n\n contract.address = receipt.contractAddress;\n\n // attach events and methods again after we have\n addFunctionsToContract(contract);\n addEventsToContract(contract);\n\n // call callback for the second time\n if(callback)\n callback(null, contract);\n\n } else {\n if(callback)\n callback(new Error('The contract code couldn\\'t be stored, please check your gas amount.'));\n else\n throw new Error('The contract code couldn\\'t be stored, please check your gas amount.');\n }\n });\n }\n });\n }\n }\n });\n};\n\n/**\n * Should be called to create new ContractFactory instance\n *\n * @method ContractFactory\n * @param {Array} abi\n */\nvar ContractFactory = function (eth, abi) {\n this.eth = eth;\n this.abi = abi;\n\n /**\n * Should be called to create new contract on a blockchain\n *\n * @method new\n * @param {Any} contract constructor param1 (optional)\n * @param {Any} contract constructor param2 (optional)\n * @param {Object} contract transaction object (required)\n * @param {Function} callback\n * @returns {Contract} returns contract instance\n */\n this.new = function () {\n var contract = new Contract(this.eth, this.abi);\n\n // parse arguments\n var options = {}; // required!\n var callback;\n\n var args = Array.prototype.slice.call(arguments);\n if (utils.isFunction(args[args.length - 1])) {\n callback = args.pop();\n }\n\n var last = args[args.length - 1];\n if (utils.isObject(last) && !utils.isArray(last)) {\n options = args.pop();\n }\n\n var bytes = encodeConstructorParams(this.abi, args);\n options.data += bytes;\n\n if (callback) {\n\n // wait for the contract address adn check if the code was deployed\n this.eth.sendTransaction(options, function (err, hash) {\n if (err) {\n callback(err);\n } else {\n // add the transaction hash\n contract.transactionHash = hash;\n\n // call callback for the first time\n callback(null, contract);\n\n checkForContractAddress(contract, callback);\n }\n });\n } else {\n var hash = this.eth.sendTransaction(options);\n // add the transaction hash\n contract.transactionHash = hash;\n checkForContractAddress(contract);\n }\n\n return contract;\n };\n\n this.new.getData = this.getData.bind(this);\n};\n\n/**\n * Should be called to create new ContractFactory\n *\n * @method contract\n * @param {Array} abi\n * @returns {ContractFactory} new contract factory\n */\n//var contract = function (abi) {\n //return new ContractFactory(abi);\n//};\n\n\n\n/**\n * Should be called to get access to existing contract on a blockchain\n *\n * @method at\n * @param {Address} contract address (required)\n * @param {Function} callback {optional)\n * @returns {Contract} returns contract if no callback was passed,\n * otherwise calls callback function (err, contract)\n */\nContractFactory.prototype.at = function (address, callback) {\n var contract = new Contract(this.eth, this.abi, address);\n\n // this functions are not part of prototype,\n // because we dont want to spoil the interface\n addFunctionsToContract(contract);\n addEventsToContract(contract);\n\n if (callback) {\n callback(null, contract);\n }\n return contract;\n};\n\n/**\n * Gets the data, which is data to deploy plus constructor params\n *\n * @method getData\n */\nContractFactory.prototype.getData = function () {\n var options = {}; // required!\n var args = Array.prototype.slice.call(arguments);\n\n var last = args[args.length - 1];\n if (utils.isObject(last) && !utils.isArray(last)) {\n options = args.pop();\n }\n\n var bytes = encodeConstructorParams(this.abi, args);\n options.data += bytes;\n\n return options.data;\n};\n\n/**\n * Should be called to create new contract instance\n *\n * @method Contract\n * @param {Array} abi\n * @param {Address} contract address\n */\nvar Contract = function (eth, abi, address) {\n this._eth = eth;\n this.transactionHash = null;\n this.address = address;\n this.abi = abi;\n};\n\nmodule.exports = ContractFactory;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file errors.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nmodule.exports = {\n InvalidNumberOfParams: function () {\n return new Error('Invalid number of input parameters');\n },\n InvalidConnection: function (host){\n return new Error('CONNECTION ERROR: Couldn\\'t connect to node '+ host +'.');\n },\n InvalidProvider: function () {\n return new Error('Provider not set or invalid');\n },\n InvalidResponse: function (result){\n var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);\n return new Error(message);\n }\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file event.js\n * @author Marek Kotewicz \n * @date 2014\n */\n\nvar utils = require('../utils/utils');\nvar coder = require('../solidity/coder');\nvar formatters = require('./formatters');\nvar sha3 = require('../utils/sha3');\nvar Filter = require('./filter');\nvar watches = require('./methods/watches');\n\n/**\n * This prototype should be used to create event filters\n */\nvar SolidityEvent = function (requestManager, json, address) {\n this._requestManager = requestManager;\n this._params = json.inputs;\n this._name = utils.transformToFullName(json);\n this._address = address;\n this._anonymous = json.anonymous;\n};\n\n/**\n * Should be used to get filtered param types\n *\n * @method types\n * @param {Bool} decide if returned typed should be indexed\n * @return {Array} array of types\n */\nSolidityEvent.prototype.types = function (indexed) {\n return this._params.filter(function (i) {\n return i.indexed === indexed;\n }).map(function (i) {\n return i.type;\n });\n};\n\n/**\n * Should be used to get event display name\n *\n * @method displayName\n * @return {String} event display name\n */\nSolidityEvent.prototype.displayName = function () {\n return utils.extractDisplayName(this._name);\n};\n\n/**\n * Should be used to get event type name\n *\n * @method typeName\n * @return {String} event type name\n */\nSolidityEvent.prototype.typeName = function () {\n return utils.extractTypeName(this._name);\n};\n\n/**\n * Should be used to get event signature\n *\n * @method signature\n * @return {String} event signature\n */\nSolidityEvent.prototype.signature = function () {\n return sha3(this._name);\n};\n\n/**\n * Should be used to encode indexed params and options to one final object\n * \n * @method encode\n * @param {Object} indexed\n * @param {Object} options\n * @return {Object} everything combined together and encoded\n */\nSolidityEvent.prototype.encode = function (indexed, options) {\n indexed = indexed || {};\n options = options || {};\n var result = {};\n\n ['fromBlock', 'toBlock'].filter(function (f) {\n return options[f] !== undefined;\n }).forEach(function (f) {\n result[f] = formatters.inputBlockNumberFormatter(options[f]);\n });\n\n result.topics = [];\n\n result.address = this._address;\n if (!this._anonymous) {\n result.topics.push('0x' + this.signature());\n }\n\n var indexedTopics = this._params.filter(function (i) {\n return i.indexed === true;\n }).map(function (i) {\n var value = indexed[i.name];\n if (value === undefined || value === null) {\n return null;\n }\n \n if (utils.isArray(value)) {\n return value.map(function (v) {\n return '0x' + coder.encodeParam(i.type, v);\n });\n }\n return '0x' + coder.encodeParam(i.type, value);\n });\n\n result.topics = result.topics.concat(indexedTopics);\n\n return result;\n};\n\n/**\n * Should be used to decode indexed params and options\n *\n * @method decode\n * @param {Object} data\n * @return {Object} result object with decoded indexed && not indexed params\n */\nSolidityEvent.prototype.decode = function (data) {\n \n data.data = data.data || '';\n data.topics = data.topics || [];\n\n var argTopics = this._anonymous ? data.topics : data.topics.slice(1);\n var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(\"\");\n var indexedParams = coder.decodeParams(this.types(true), indexedData); \n\n var notIndexedData = data.data.slice(2);\n var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData);\n \n var result = formatters.outputLogFormatter(data);\n result.event = this.displayName();\n result.address = data.address;\n\n result.args = this._params.reduce(function (acc, current) {\n acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();\n return acc;\n }, {});\n\n delete result.data;\n delete result.topics;\n\n return result;\n};\n\n/**\n * Should be used to create new filter object from event\n *\n * @method execute\n * @param {Object} indexed\n * @param {Object} options\n * @return {Object} filter object\n */\nSolidityEvent.prototype.execute = function (indexed, options, callback) {\n\n if (utils.isFunction(arguments[arguments.length - 1])) {\n callback = arguments[arguments.length - 1];\n if(arguments.length === 2)\n options = null;\n if(arguments.length === 1) {\n options = null;\n indexed = {};\n }\n }\n \n var o = this.encode(indexed, options);\n var formatter = this.decode.bind(this);\n return new Filter(this._requestManager, o, watches.eth(), formatter, callback);\n};\n\n/**\n * Should be used to attach event to contract object\n *\n * @method attachToContract\n * @param {Contract}\n */\nSolidityEvent.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n var displayName = this.displayName();\n if (!contract[displayName]) {\n contract[displayName] = execute;\n }\n contract[displayName][this.typeName()] = this.execute.bind(this, contract);\n};\n\nmodule.exports = SolidityEvent;\n\n", - "var formatters = require('./formatters');\nvar utils = require('./../utils/utils');\nvar Method = require('./method');\nvar Property = require('./property');\n\n// TODO: refactor, so the input params are not altered.\n// it's necessary to make same 'extension' work with multiple providers\nvar extend = function (web3) {\n /* jshint maxcomplexity:5 */\n var ex = function (extension) {\n\n var extendedObject;\n if (extension.property) {\n if (!web3[extension.property]) {\n web3[extension.property] = {};\n }\n extendedObject = web3[extension.property];\n } else {\n extendedObject = web3;\n }\n\n if (extension.methods) {\n extension.methods.forEach(function (method) {\n method.attachToObject(extendedObject);\n method.setRequestManager(web3._requestManager);\n });\n }\n\n if (extension.properties) {\n extension.properties.forEach(function (property) {\n property.attachToObject(extendedObject);\n property.setRequestManager(web3._requestManager);\n });\n }\n };\n\n ex.formatters = formatters; \n ex.utils = utils;\n ex.Method = Method;\n ex.Property = Property;\n\n return ex;\n};\n\n\n\nmodule.exports = extend;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file filter.js\n * @authors:\n * Jeffrey Wilcke \n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * Gav Wood \n * @date 2014\n */\n\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\n\n/**\n* Converts a given topic to a hex string, but also allows null values.\n*\n* @param {Mixed} value\n* @return {String}\n*/\nvar toTopic = function(value){\n\n if(value === null || typeof value === 'undefined')\n return null;\n\n value = String(value);\n\n if(value.indexOf('0x') === 0)\n return value;\n else\n return utils.fromUtf8(value);\n};\n\n/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones\n/// @param should be string or object\n/// @returns options string or object\nvar getOptions = function (options) {\n\n if (utils.isString(options)) {\n return options;\n }\n\n options = options || {};\n\n // make sure topics, get converted to hex\n options.topics = options.topics || [];\n options.topics = options.topics.map(function(topic){\n return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);\n });\n\n return {\n topics: options.topics,\n from: options.from,\n to: options.to,\n address: options.address,\n fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),\n toBlock: formatters.inputBlockNumberFormatter(options.toBlock)\n };\n};\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method getLogsAtStart\n@param {Object} self\n@param {funciton}\n*/\nvar getLogsAtStart = function(self, callback){\n // call getFilterLogs for the first watch callback start\n if (!utils.isString(self.options)) {\n self.get(function (err, messages) {\n // don't send all the responses to all the watches again... just to self one\n if (err) {\n callback(err);\n }\n\n if(utils.isArray(messages)) {\n messages.forEach(function (message) {\n callback(null, message);\n });\n }\n });\n }\n};\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method pollFilter\n@param {Object} self\n*/\nvar pollFilter = function(self) {\n\n var onMessage = function (error, messages) {\n if (error) {\n return self.callbacks.forEach(function (callback) {\n callback(error);\n });\n }\n\n if(utils.isArray(messages)) {\n messages.forEach(function (message) {\n message = self.formatter ? self.formatter(message) : message;\n self.callbacks.forEach(function (callback) {\n callback(null, message);\n });\n });\n }\n };\n\n self.requestManager.startPolling({\n method: self.implementation.poll.call,\n params: [self.filterId],\n }, self.filterId, onMessage, self.stopWatching.bind(self));\n\n};\n\nvar Filter = function (requestManager, options, methods, formatter, callback) {\n var self = this;\n var implementation = {};\n methods.forEach(function (method) {\n method.setRequestManager(requestManager);\n method.attachToObject(implementation);\n });\n this.requestManager = requestManager;\n this.options = getOptions(options);\n this.implementation = implementation;\n this.filterId = null;\n this.callbacks = [];\n this.getLogsCallbacks = [];\n this.pollFilters = [];\n this.formatter = formatter;\n this.implementation.newFilter(this.options, function(error, id){\n if(error) {\n self.callbacks.forEach(function(cb){\n cb(error);\n });\n } else {\n self.filterId = id;\n\n // check if there are get pending callbacks as a consequence\n // of calling get() with filterId unassigned.\n self.getLogsCallbacks.forEach(function (cb){\n self.get(cb);\n });\n self.getLogsCallbacks = [];\n\n // get filter logs for the already existing watch calls\n self.callbacks.forEach(function(cb){\n getLogsAtStart(self, cb);\n });\n if(self.callbacks.length > 0)\n pollFilter(self);\n\n // start to watch immediately\n if(typeof callback === 'function') {\n return self.watch(callback);\n }\n }\n });\n\n return this;\n};\n\nFilter.prototype.watch = function (callback) {\n this.callbacks.push(callback);\n\n if(this.filterId) {\n getLogsAtStart(this, callback);\n pollFilter(this);\n }\n\n return this;\n};\n\nFilter.prototype.stopWatching = function (callback) {\n this.requestManager.stopPolling(this.filterId);\n this.callbacks = [];\n // remove filter async\n if (callback) {\n this.implementation.uninstallFilter(this.filterId, callback);\n } else {\n return this.implementation.uninstallFilter(this.filterId);\n }\n};\n\nFilter.prototype.get = function (callback) {\n var self = this;\n if (utils.isFunction(callback)) {\n if (this.filterId === null) {\n // If filterId is not set yet, call it back\n // when newFilter() assigns it.\n this.getLogsCallbacks.push(callback);\n } else {\n this.implementation.getLogs(this.filterId, function(err, res){\n if (err) {\n callback(err);\n } else {\n callback(null, res.map(function (log) {\n return self.formatter ? self.formatter(log) : log;\n }));\n }\n });\n }\n } else {\n if (this.filterId === null) {\n throw new Error('Filter ID Error: filter().get() can\\'t be chained synchronous, please provide a callback for the get() method.');\n }\n var logs = this.implementation.getLogs(this.filterId);\n return logs.map(function (log) {\n return self.formatter ? self.formatter(log) : log;\n });\n }\n\n return this;\n};\n\nmodule.exports = Filter;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file formatters.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\nvar config = require('../utils/config');\nvar Iban = require('./iban');\n\n/**\n * Should the format output to a big number\n *\n * @method outputBigNumberFormatter\n * @param {String|Number|BigNumber}\n * @returns {BigNumber} object\n */\nvar outputBigNumberFormatter = function (number) {\n return utils.toBigNumber(number);\n};\n\nvar isPredefinedBlockNumber = function (blockNumber) {\n return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';\n};\n\nvar inputDefaultBlockNumberFormatter = function (blockNumber) {\n if (blockNumber === undefined) {\n return config.defaultBlock;\n }\n return inputBlockNumberFormatter(blockNumber);\n};\n\nvar inputBlockNumberFormatter = function (blockNumber) {\n if (blockNumber === undefined) {\n return undefined;\n } else if (isPredefinedBlockNumber(blockNumber)) {\n return blockNumber;\n }\n return utils.toHex(blockNumber);\n};\n\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputCallFormatter\n * @param {Object} transaction options\n * @returns object\n*/\nvar inputCallFormatter = function (options){\n\n options.from = options.from || config.defaultAccount;\n\n if (options.from) {\n options.from = inputAddressFormatter(options.from);\n }\n\n if (options.to) { // it might be contract creation\n options.to = inputAddressFormatter(options.to);\n }\n\n ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {\n return options[key] !== undefined;\n }).forEach(function(key){\n options[key] = utils.fromDecimal(options[key]);\n });\n\n return options;\n};\n\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputTransactionFormatter\n * @param {Object} transaction options\n * @returns object\n*/\nvar inputTransactionFormatter = function (options){\n\n options.from = options.from || config.defaultAccount;\n options.from = inputAddressFormatter(options.from);\n\n if (options.to) { // it might be contract creation\n options.to = inputAddressFormatter(options.to);\n }\n\n ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {\n return options[key] !== undefined;\n }).forEach(function(key){\n options[key] = utils.fromDecimal(options[key]);\n });\n\n return options;\n};\n\n/**\n * Formats the output of a transaction to its proper values\n *\n * @method outputTransactionFormatter\n * @param {Object} tx\n * @returns {Object}\n*/\nvar outputTransactionFormatter = function (tx){\n if(tx.blockNumber !== null)\n tx.blockNumber = utils.toDecimal(tx.blockNumber);\n if(tx.transactionIndex !== null)\n tx.transactionIndex = utils.toDecimal(tx.transactionIndex);\n tx.nonce = utils.toDecimal(tx.nonce);\n tx.gas = utils.toDecimal(tx.gas);\n tx.gasPrice = utils.toBigNumber(tx.gasPrice);\n tx.value = utils.toBigNumber(tx.value);\n return tx;\n};\n\n/**\n * Formats the output of a transaction receipt to its proper values\n *\n * @method outputTransactionReceiptFormatter\n * @param {Object} receipt\n * @returns {Object}\n*/\nvar outputTransactionReceiptFormatter = function (receipt){\n if(receipt.blockNumber !== null)\n receipt.blockNumber = utils.toDecimal(receipt.blockNumber);\n if(receipt.transactionIndex !== null)\n receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);\n receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);\n receipt.gasUsed = utils.toDecimal(receipt.gasUsed);\n\n if(utils.isArray(receipt.logs)) {\n receipt.logs = receipt.logs.map(function(log){\n return outputLogFormatter(log);\n });\n }\n\n return receipt;\n};\n\n/**\n * Formats the output of a block to its proper values\n *\n * @method outputBlockFormatter\n * @param {Object} block\n * @returns {Object}\n*/\nvar outputBlockFormatter = function(block) {\n\n // transform to number\n block.gasLimit = utils.toDecimal(block.gasLimit);\n block.gasUsed = utils.toDecimal(block.gasUsed);\n block.size = utils.toDecimal(block.size);\n block.timestamp = utils.toDecimal(block.timestamp);\n if(block.number !== null)\n block.number = utils.toDecimal(block.number);\n\n block.difficulty = utils.toBigNumber(block.difficulty);\n block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);\n\n if (utils.isArray(block.transactions)) {\n block.transactions.forEach(function(item){\n if(!utils.isString(item))\n return outputTransactionFormatter(item);\n });\n }\n\n return block;\n};\n\n/**\n * Formats the output of a log\n *\n * @method outputLogFormatter\n * @param {Object} log object\n * @returns {Object} log\n*/\nvar outputLogFormatter = function(log) {\n if(log.blockNumber !== null)\n log.blockNumber = utils.toDecimal(log.blockNumber);\n if(log.transactionIndex !== null)\n log.transactionIndex = utils.toDecimal(log.transactionIndex);\n if(log.logIndex !== null)\n log.logIndex = utils.toDecimal(log.logIndex);\n\n return log;\n};\n\n/**\n * Formats the input of a whisper post and converts all values to HEX\n *\n * @method inputPostFormatter\n * @param {Object} transaction object\n * @returns {Object}\n*/\nvar inputPostFormatter = function(post) {\n\n // post.payload = utils.toHex(post.payload);\n post.ttl = utils.fromDecimal(post.ttl);\n post.workToProve = utils.fromDecimal(post.workToProve);\n post.priority = utils.fromDecimal(post.priority);\n\n // fallback\n if (!utils.isArray(post.topics)) {\n post.topics = post.topics ? [post.topics] : [];\n }\n\n // format the following options\n post.topics = post.topics.map(function(topic){\n // convert only if not hex\n return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);\n });\n\n return post;\n};\n\n/**\n * Formats the output of a received post message\n *\n * @method outputPostFormatter\n * @param {Object}\n * @returns {Object}\n */\nvar outputPostFormatter = function(post){\n\n post.expiry = utils.toDecimal(post.expiry);\n post.sent = utils.toDecimal(post.sent);\n post.ttl = utils.toDecimal(post.ttl);\n post.workProved = utils.toDecimal(post.workProved);\n // post.payloadRaw = post.payload;\n // post.payload = utils.toAscii(post.payload);\n\n // if (utils.isJson(post.payload)) {\n // post.payload = JSON.parse(post.payload);\n // }\n\n // format the following options\n if (!post.topics) {\n post.topics = [];\n }\n post.topics = post.topics.map(function(topic){\n return utils.toAscii(topic);\n });\n\n return post;\n};\n\nvar inputAddressFormatter = function (address) {\n var iban = new Iban(address);\n if (iban.isValid() && iban.isDirect()) {\n return '0x' + iban.address();\n } else if (utils.isStrictAddress(address)) {\n return address;\n } else if (utils.isAddress(address)) {\n return '0x' + address;\n }\n throw new Error('invalid address');\n};\n\n\nvar outputSyncingFormatter = function(result) {\n\n result.startingBlock = utils.toDecimal(result.startingBlock);\n result.currentBlock = utils.toDecimal(result.currentBlock);\n result.highestBlock = utils.toDecimal(result.highestBlock);\n if (result.knownStates) {\n result.knownStates = utils.toDecimal(result.knownStates);\n result.pulledStates = utils.toDecimal(result.pulledStates);\n }\n\n return result;\n};\n\nmodule.exports = {\n inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,\n inputBlockNumberFormatter: inputBlockNumberFormatter,\n inputCallFormatter: inputCallFormatter,\n inputTransactionFormatter: inputTransactionFormatter,\n inputAddressFormatter: inputAddressFormatter,\n inputPostFormatter: inputPostFormatter,\n outputBigNumberFormatter: outputBigNumberFormatter,\n outputTransactionFormatter: outputTransactionFormatter,\n outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,\n outputBlockFormatter: outputBlockFormatter,\n outputLogFormatter: outputLogFormatter,\n outputPostFormatter: outputPostFormatter,\n outputSyncingFormatter: outputSyncingFormatter\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file function.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar coder = require('../solidity/coder');\nvar utils = require('../utils/utils');\nvar formatters = require('./formatters');\nvar sha3 = require('../utils/sha3');\n\n/**\n * This prototype should be used to call/sendTransaction to solidity functions\n */\nvar SolidityFunction = function (eth, json, address) {\n this._eth = eth;\n this._inputTypes = json.inputs.map(function (i) {\n return i.type;\n });\n this._outputTypes = json.outputs.map(function (i) {\n return i.type;\n });\n this._constant = json.constant;\n this._name = utils.transformToFullName(json);\n this._address = address;\n};\n\nSolidityFunction.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\nSolidityFunction.prototype.extractDefaultBlock = function (args) {\n if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {\n return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!\n }\n};\n\n/**\n * Should be used to create payload from arguments\n *\n * @method toPayload\n * @param {Array} solidity function params\n * @param {Object} optional payload options\n */\nSolidityFunction.prototype.toPayload = function (args) {\n var options = {};\n if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {\n options = args[args.length - 1];\n }\n options.to = this._address;\n options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);\n return options;\n};\n\n/**\n * Should be used to get function signature\n *\n * @method signature\n * @return {String} function signature\n */\nSolidityFunction.prototype.signature = function () {\n return sha3(this._name).slice(0, 8);\n};\n\n\nSolidityFunction.prototype.unpackOutput = function (output) {\n if (!output) {\n return;\n }\n\n output = output.length >= 2 ? output.slice(2) : output;\n var result = coder.decodeParams(this._outputTypes, output);\n return result.length === 1 ? result[0] : result;\n};\n\n/**\n * Calls a contract function.\n *\n * @method call\n * @param {...Object} Contract function arguments\n * @param {function} If the last argument is a function, the contract function\n * call will be asynchronous, and the callback will be passed the\n * error and result.\n * @return {String} output bytes\n */\nSolidityFunction.prototype.call = function () {\n var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });\n var callback = this.extractCallback(args);\n var defaultBlock = this.extractDefaultBlock(args);\n var payload = this.toPayload(args);\n\n\n if (!callback) {\n var output = this._eth.call(payload, defaultBlock);\n return this.unpackOutput(output);\n } \n \n var self = this;\n this._eth.call(payload, defaultBlock, function (error, output) {\n callback(error, self.unpackOutput(output));\n });\n};\n\n/**\n * Should be used to sendTransaction to solidity function\n *\n * @method sendTransaction\n */\nSolidityFunction.prototype.sendTransaction = function () {\n var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n\n if (!callback) {\n return this._eth.sendTransaction(payload);\n }\n\n this._eth.sendTransaction(payload, callback);\n};\n\n/**\n * Should be used to estimateGas of solidity function\n *\n * @method estimateGas\n */\nSolidityFunction.prototype.estimateGas = function () {\n var args = Array.prototype.slice.call(arguments);\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n\n if (!callback) {\n return this._eth.estimateGas(payload);\n }\n\n this._eth.estimateGas(payload, callback);\n};\n\n/**\n * Return the encoded data of the call\n *\n * @method getData\n * @return {String} the encoded data\n */\nSolidityFunction.prototype.getData = function () {\n var args = Array.prototype.slice.call(arguments);\n var payload = this.toPayload(args);\n\n return payload.data;\n};\n\n/**\n * Should be used to get function display name\n *\n * @method displayName\n * @return {String} display name of the function\n */\nSolidityFunction.prototype.displayName = function () {\n return utils.extractDisplayName(this._name);\n};\n\n/**\n * Should be used to get function type name\n *\n * @method typeName\n * @return {String} type name of the function\n */\nSolidityFunction.prototype.typeName = function () {\n return utils.extractTypeName(this._name);\n};\n\n/**\n * Should be called to get rpc requests from solidity function\n *\n * @method request\n * @returns {Object}\n */\nSolidityFunction.prototype.request = function () {\n var args = Array.prototype.slice.call(arguments);\n var callback = this.extractCallback(args);\n var payload = this.toPayload(args);\n var format = this.unpackOutput.bind(this);\n \n return {\n method: this._constant ? 'eth_call' : 'eth_sendTransaction',\n callback: callback,\n params: [payload], \n format: format\n };\n};\n\n/**\n * Should be called to execute function\n *\n * @method execute\n */\nSolidityFunction.prototype.execute = function () {\n var transaction = !this._constant;\n\n // send transaction\n if (transaction) {\n return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));\n }\n\n // call\n return this.call.apply(this, Array.prototype.slice.call(arguments));\n};\n\n/**\n * Should be called to attach function to contract\n *\n * @method attachToContract\n * @param {Contract}\n */\nSolidityFunction.prototype.attachToContract = function (contract) {\n var execute = this.execute.bind(this);\n execute.request = this.request.bind(this);\n execute.call = this.call.bind(this);\n execute.sendTransaction = this.sendTransaction.bind(this);\n execute.estimateGas = this.estimateGas.bind(this);\n execute.getData = this.getData.bind(this);\n var displayName = this.displayName();\n if (!contract[displayName]) {\n contract[displayName] = execute;\n }\n contract[displayName][this.typeName()] = execute; // circular!!!!\n};\n\nmodule.exports = SolidityFunction;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file httpprovider.js\n * @authors:\n * Marek Kotewicz \n * Marian Oancea \n * Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar errors = require('./errors');\n\n// workaround to use httpprovider in different envs\nvar XMLHttpRequest; // jshint ignore: line\n\n// browser\nif (typeof window !== 'undefined' && window.XMLHttpRequest) {\n XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line\n\n// node\n} else {\n XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line\n}\n\n/**\n * HttpProvider should be used to send rpc calls over http\n */\nvar HttpProvider = function (host) {\n this.host = host || 'http://localhost:8545';\n};\n\n/**\n * Should be called to prepare new XMLHttpRequest\n *\n * @method prepareRequest\n * @param {Boolean} true if request should be async\n * @return {XMLHttpRequest} object\n */\nHttpProvider.prototype.prepareRequest = function (async) {\n var request = new XMLHttpRequest();\n request.open('POST', this.host, async);\n request.setRequestHeader('Content-Type','application/json');\n return request;\n};\n\n/**\n * Should be called to make sync request\n *\n * @method send\n * @param {Object} payload\n * @return {Object} result\n */\nHttpProvider.prototype.send = function (payload) {\n var request = this.prepareRequest(false);\n\n try {\n request.send(JSON.stringify(payload));\n } catch(error) {\n throw errors.InvalidConnection(this.host);\n }\n\n var result = request.responseText;\n\n try {\n result = JSON.parse(result);\n } catch(e) {\n throw errors.InvalidResponse(request.responseText); \n }\n\n return result;\n};\n\n/**\n * Should be used to make async request\n *\n * @method sendAsync\n * @param {Object} payload\n * @param {Function} callback triggered on end with (err, result)\n */\nHttpProvider.prototype.sendAsync = function (payload, callback) {\n var request = this.prepareRequest(true); \n\n request.onreadystatechange = function() {\n if (request.readyState === 4) {\n var result = request.responseText;\n var error = null;\n\n try {\n result = JSON.parse(result);\n } catch(e) {\n error = errors.InvalidResponse(request.responseText); \n }\n\n callback(error, result);\n }\n };\n \n try {\n request.send(JSON.stringify(payload));\n } catch(error) {\n callback(errors.InvalidConnection(this.host));\n }\n};\n\n/**\n * Synchronously tries to make Http request\n *\n * @method isConnected\n * @return {Boolean} returns true if request haven't failed. Otherwise false\n */\nHttpProvider.prototype.isConnected = function() {\n try {\n this.send({\n id: 9999999999,\n jsonrpc: '2.0',\n method: 'net_listening',\n params: []\n });\n return true;\n } catch(e) {\n return false;\n }\n};\n\nmodule.exports = HttpProvider;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file iban.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar BigNumber = require('bignumber.js');\n\nvar padLeft = function (string, bytes) {\n var result = string;\n while (result.length < bytes * 2) {\n result = '0' + result;\n }\n return result;\n};\n\n/**\n * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to\n * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.\n *\n * @method iso13616Prepare\n * @param {String} iban the IBAN\n * @returns {String} the prepared IBAN\n */\nvar iso13616Prepare = function (iban) {\n var A = 'A'.charCodeAt(0);\n var Z = 'Z'.charCodeAt(0);\n\n iban = iban.toUpperCase();\n iban = iban.substr(4) + iban.substr(0,4);\n\n return iban.split('').map(function(n){\n var code = n.charCodeAt(0);\n if (code >= A && code <= Z){\n // A = 10, B = 11, ... Z = 35\n return code - A + 10;\n } else {\n return n;\n }\n }).join('');\n};\n\n/**\n * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.\n *\n * @method mod9710\n * @param {String} iban\n * @returns {Number}\n */\nvar mod9710 = function (iban) {\n var remainder = iban,\n block;\n\n while (remainder.length > 2){\n block = remainder.slice(0, 9);\n remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);\n }\n\n return parseInt(remainder, 10) % 97;\n};\n\n/**\n * This prototype should be used to create iban object from iban correct string\n *\n * @param {String} iban\n */\nvar Iban = function (iban) {\n this._iban = iban;\n};\n\n/**\n * This method should be used to create iban object from ethereum address\n *\n * @method fromAddress\n * @param {String} address\n * @return {Iban} the IBAN object\n */\nIban.fromAddress = function (address) {\n var asBn = new BigNumber(address, 16);\n var base36 = asBn.toString(36);\n var padded = padLeft(base36, 15);\n return Iban.fromBban(padded.toUpperCase());\n};\n\n/**\n * Convert the passed BBAN to an IBAN for this country specification.\n * Please note that \"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\".\n * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n *\n * @method fromBban\n * @param {String} bban the BBAN to convert to IBAN\n * @returns {Iban} the IBAN object\n */\nIban.fromBban = function (bban) {\n var countryCode = 'XE';\n\n var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));\n var checkDigit = ('0' + (98 - remainder)).slice(-2);\n\n return new Iban(countryCode + checkDigit + bban);\n};\n\n/**\n * Should be used to create IBAN object for given institution and identifier\n *\n * @method createIndirect\n * @param {Object} options, required options are \"institution\" and \"identifier\"\n * @return {Iban} the IBAN object\n */\nIban.createIndirect = function (options) {\n return Iban.fromBban('ETH' + options.institution + options.identifier);\n};\n\n/**\n * Thos method should be used to check if given string is valid iban object\n *\n * @method isValid\n * @param {String} iban string\n * @return {Boolean} true if it is valid IBAN\n */\nIban.isValid = function (iban) {\n var i = new Iban(iban);\n return i.isValid();\n};\n\n/**\n * Should be called to check if iban is correct\n *\n * @method isValid\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isValid = function () {\n return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&\n mod9710(iso13616Prepare(this._iban)) === 1;\n};\n\n/**\n * Should be called to check if iban number is direct\n *\n * @method isDirect\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isDirect = function () {\n return this._iban.length === 34 || this._iban.length === 35;\n};\n\n/**\n * Should be called to check if iban number if indirect\n *\n * @method isIndirect\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isIndirect = function () {\n return this._iban.length === 20;\n};\n\n/**\n * Should be called to get iban checksum\n * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)\n *\n * @method checksum\n * @returns {String} checksum\n */\nIban.prototype.checksum = function () {\n return this._iban.substr(2, 2);\n};\n\n/**\n * Should be called to get institution identifier\n * eg. XREG\n *\n * @method institution\n * @returns {String} institution identifier\n */\nIban.prototype.institution = function () {\n return this.isIndirect() ? this._iban.substr(7, 4) : '';\n};\n\n/**\n * Should be called to get client identifier within institution\n * eg. GAVOFYORK\n *\n * @method client\n * @returns {String} client identifier\n */\nIban.prototype.client = function () {\n return this.isIndirect() ? this._iban.substr(11) : '';\n};\n\n/**\n * Should be called to get client direct address\n *\n * @method address\n * @returns {String} client direct address\n */\nIban.prototype.address = function () {\n if (this.isDirect()) {\n var base36 = this._iban.substr(4);\n var asBn = new BigNumber(base36, 36);\n return padLeft(asBn.toString(16), 20);\n } \n\n return '';\n};\n\nIban.prototype.toString = function () {\n return this._iban;\n};\n\nmodule.exports = Iban;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file ipcprovider.js\n * @authors:\n * Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar utils = require('../utils/utils');\nvar errors = require('./errors');\n\n\nvar IpcProvider = function (path, net) {\n var _this = this;\n this.responseCallbacks = {};\n this.path = path;\n \n this.connection = net.connect({path: this.path});\n\n this.connection.on('error', function(e){\n console.error('IPC Connection Error', e);\n _this._timeout();\n });\n\n this.connection.on('end', function(){\n _this._timeout();\n }); \n\n\n // LISTEN FOR CONNECTION RESPONSES\n this.connection.on('data', function(data) {\n /*jshint maxcomplexity: 6 */\n\n _this._parseResponse(data.toString()).forEach(function(result){\n\n var id = null;\n\n // get the id which matches the returned id\n if(utils.isArray(result)) {\n result.forEach(function(load){\n if(_this.responseCallbacks[load.id])\n id = load.id;\n });\n } else {\n id = result.id;\n }\n\n // fire the callback\n if(_this.responseCallbacks[id]) {\n _this.responseCallbacks[id](null, result);\n delete _this.responseCallbacks[id];\n }\n });\n });\n};\n\n/**\nWill parse the response and make an array out of it.\n\n@method _parseResponse\n@param {String} data\n*/\nIpcProvider.prototype._parseResponse = function(data) {\n var _this = this,\n returnValues = [];\n \n // DE-CHUNKER\n var dechunkedData = data\n .replace(/\\}[\\n\\r]?\\{/g,'}|--|{') // }{\n .replace(/\\}\\][\\n\\r]?\\[\\{/g,'}]|--|[{') // }][{\n .replace(/\\}[\\n\\r]?\\[\\{/g,'}|--|[{') // }[{\n .replace(/\\}\\][\\n\\r]?\\{/g,'}]|--|{') // }]{\n .split('|--|');\n\n dechunkedData.forEach(function(data){\n\n // prepend the last chunk\n if(_this.lastChunk)\n data = _this.lastChunk + data;\n\n var result = null;\n\n try {\n result = JSON.parse(data);\n\n } catch(e) {\n\n _this.lastChunk = data;\n\n // start timeout to cancel all requests\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunkTimeout = setTimeout(function(){\n _this._timeout();\n throw errors.InvalidResponse(data);\n }, 1000 * 15);\n\n return;\n }\n\n // cancel timeout and set chunk to null\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunk = null;\n\n if(result)\n returnValues.push(result);\n });\n\n return returnValues;\n};\n\n\n/**\nGet the adds a callback to the responseCallbacks object,\nwhich will be called if a response matching the response Id will arrive.\n\n@method _addResponseCallback\n*/\nIpcProvider.prototype._addResponseCallback = function(payload, callback) {\n var id = payload.id || payload[0].id;\n var method = payload.method || payload[0].method;\n\n this.responseCallbacks[id] = callback;\n this.responseCallbacks[id].method = method;\n};\n\n/**\nTimeout all requests when the end/error event is fired\n\n@method _timeout\n*/\nIpcProvider.prototype._timeout = function() {\n for(var key in this.responseCallbacks) {\n if(this.responseCallbacks.hasOwnProperty(key)){\n this.responseCallbacks[key](errors.InvalidConnection('on IPC'));\n delete this.responseCallbacks[key];\n }\n }\n};\n\n\n/**\nCheck if the current connection is still valid.\n\n@method isConnected\n*/\nIpcProvider.prototype.isConnected = function() {\n var _this = this;\n\n // try reconnect, when connection is gone\n if(!_this.connection.writable)\n _this.connection.connect({path: _this.path});\n\n return !!this.connection.writable;\n};\n\nIpcProvider.prototype.send = function (payload) {\n\n if(this.connection.writeSync) {\n var result;\n\n // try reconnect, when connection is gone\n if(!this.connection.writable)\n this.connection.connect({path: this.path});\n\n var data = this.connection.writeSync(JSON.stringify(payload));\n\n try {\n result = JSON.parse(data);\n } catch(e) {\n throw errors.InvalidResponse(data); \n }\n\n return result;\n\n } else {\n throw new Error('You tried to send \"'+ payload.method +'\" synchronously. Synchronous requests are not supported by the IPC provider.');\n }\n};\n\nIpcProvider.prototype.sendAsync = function (payload, callback) {\n // try reconnect, when connection is gone\n if(!this.connection.writable)\n this.connection.connect({path: this.path});\n\n\n this.connection.write(JSON.stringify(payload));\n this._addResponseCallback(payload, callback);\n};\n\nmodule.exports = IpcProvider;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file jsonrpc.js\n * @authors:\n * Marek Kotewicz \n * Aaron Kumavis \n * @date 2015\n */\n\n// Initialize Jsonrpc as a simple object with utility functions.\nvar Jsonrpc = {\n messageId: 0\n};\n\n/**\n * Should be called to valid json create payload object\n *\n * @method toPayload\n * @param {Function} method of jsonrpc call, required\n * @param {Array} params, an array of method params, optional\n * @returns {Object} valid jsonrpc payload object\n */\nJsonrpc.toPayload = function (method, params) {\n if (!method)\n console.error('jsonrpc method should be specified!');\n\n // advance message ID\n Jsonrpc.messageId++;\n\n return {\n jsonrpc: '2.0',\n id: Jsonrpc.messageId,\n method: method,\n params: params || []\n };\n};\n\n/**\n * Should be called to check if jsonrpc response is valid\n *\n * @method isValidResponse\n * @param {Object}\n * @returns {Boolean} true if response is valid, otherwise false\n */\nJsonrpc.isValidResponse = function (response) {\n return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response);\n\n function validateSingleMessage(message){\n return !!message &&\n !message.error &&\n message.jsonrpc === '2.0' &&\n typeof message.id === 'number' &&\n message.result !== undefined; // only undefined is not valid json object\n }\n};\n\n/**\n * Should be called to create batch payload object\n *\n * @method toBatchPayload\n * @param {Array} messages, an array of objects with method (required) and params (optional) fields\n * @returns {Array} batch payload\n */\nJsonrpc.toBatchPayload = function (messages) {\n return messages.map(function (message) {\n return Jsonrpc.toPayload(message.method, message.params);\n });\n};\n\nmodule.exports = Jsonrpc;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file method.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\nvar errors = require('./errors');\n\nvar Method = function (options) {\n this.name = options.name;\n this.call = options.call;\n this.params = options.params || 0;\n this.inputFormatter = options.inputFormatter;\n this.outputFormatter = options.outputFormatter;\n this.requestManager = null;\n};\n\nMethod.prototype.setRequestManager = function (rm) {\n this.requestManager = rm;\n};\n\n/**\n * Should be used to determine name of the jsonrpc method based on arguments\n *\n * @method getCall\n * @param {Array} arguments\n * @return {String} name of jsonrpc method\n */\nMethod.prototype.getCall = function (args) {\n return utils.isFunction(this.call) ? this.call(args) : this.call;\n};\n\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nMethod.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\n/**\n * Should be called to check if the number of arguments is correct\n * \n * @method validateArgs\n * @param {Array} arguments\n * @throws {Error} if it is not\n */\nMethod.prototype.validateArgs = function (args) {\n if (args.length !== this.params) {\n throw errors.InvalidNumberOfParams();\n }\n};\n\n/**\n * Should be called to format input args of method\n * \n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nMethod.prototype.formatInput = function (args) {\n if (!this.inputFormatter) {\n return args;\n }\n\n return this.inputFormatter.map(function (formatter, index) {\n return formatter ? formatter(args[index]) : args[index];\n });\n};\n\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param {Object}\n * @return {Object}\n */\nMethod.prototype.formatOutput = function (result) {\n return this.outputFormatter && result ? this.outputFormatter(result) : result;\n};\n\n/**\n * Should create payload from given input args\n *\n * @method toPayload\n * @param {Array} args\n * @return {Object}\n */\nMethod.prototype.toPayload = function (args) {\n var call = this.getCall(args);\n var callback = this.extractCallback(args);\n var params = this.formatInput(args);\n this.validateArgs(params);\n\n return {\n method: call,\n params: params,\n callback: callback\n };\n};\n\nMethod.prototype.attachToObject = function (obj) {\n var func = this.buildCall();\n func.call = this.call; // TODO!!! that's ugly. filter.js uses it\n var name = this.name.split('.');\n if (name.length > 1) {\n obj[name[0]] = obj[name[0]] || {};\n obj[name[0]][name[1]] = func;\n } else {\n obj[name[0]] = func; \n }\n};\n\nMethod.prototype.buildCall = function() {\n var method = this;\n var send = function () {\n var payload = method.toPayload(Array.prototype.slice.call(arguments));\n if (payload.callback) {\n return method.requestManager.sendAsync(payload, function (err, result) {\n payload.callback(err, method.formatOutput(result));\n });\n }\n return method.formatOutput(method.requestManager.send(payload));\n };\n send.request = this.request.bind(this);\n return send;\n};\n\n/**\n * Should be called to create pure JSONRPC request which can be used in batch request\n *\n * @method request\n * @param {...} params\n * @return {Object} jsonrpc request\n */\nMethod.prototype.request = function () {\n var payload = this.toPayload(Array.prototype.slice.call(arguments));\n payload.format = this.formatOutput.bind(this);\n return payload;\n};\n\nmodule.exports = Method;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file db.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\n\nvar DB = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n \n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(web3._requestManager);\n });\n};\n\nvar methods = function () {\n var putString = new Method({\n name: 'putString',\n call: 'db_putString',\n params: 3\n });\n\n var getString = new Method({\n name: 'getString',\n call: 'db_getString',\n params: 2\n });\n\n var putHex = new Method({\n name: 'putHex',\n call: 'db_putHex',\n params: 3\n });\n\n var getHex = new Method({\n name: 'getHex',\n call: 'db_getHex',\n params: 2\n });\n\n return [\n putString, getString, putHex, getHex\n ];\n};\n\nmodule.exports = DB;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file eth.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar formatters = require('../formatters');\nvar utils = require('../../utils/utils');\nvar Method = require('../method');\nvar Property = require('../property');\nvar c = require('../../utils/config');\nvar Contract = require('../contract');\nvar watches = require('./watches');\nvar Filter = require('../filter');\nvar IsSyncing = require('../syncing');\nvar namereg = require('../namereg');\nvar Iban = require('../iban');\nvar transfer = require('../transfer');\n\nvar blockCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? \"eth_getBlockByHash\" : \"eth_getBlockByNumber\";\n};\n\nvar transactionFromBlockCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';\n};\n\nvar uncleCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';\n};\n\nvar getBlockTransactionCountCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';\n};\n\nvar uncleCountCall = function (args) {\n return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';\n};\n\nfunction Eth(web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n\n properties().forEach(function(p) { \n p.attachToObject(self);\n p.setRequestManager(self._requestManager);\n });\n\n\n this.iban = Iban;\n this.sendIBANTransaction = transfer.bind(null, this);\n}\n\nObject.defineProperty(Eth.prototype, 'defaultBlock', {\n get: function () {\n return c.defaultBlock;\n },\n set: function (val) {\n c.defaultBlock = val;\n return val;\n }\n});\n\nObject.defineProperty(Eth.prototype, 'defaultAccount', {\n get: function () {\n return c.defaultAccount;\n },\n set: function (val) {\n c.defaultAccount = val;\n return val;\n }\n});\n\nvar methods = function () {\n var getBalance = new Method({\n name: 'getBalance',\n call: 'eth_getBalance',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],\n outputFormatter: formatters.outputBigNumberFormatter\n });\n\n var getStorageAt = new Method({\n name: 'getStorageAt',\n call: 'eth_getStorageAt',\n params: 3,\n inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var getCode = new Method({\n name: 'getCode',\n call: 'eth_getCode',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var getBlock = new Method({\n name: 'getBlock',\n call: blockCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],\n outputFormatter: formatters.outputBlockFormatter\n });\n\n var getUncle = new Method({\n name: 'getUncle',\n call: uncleCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],\n outputFormatter: formatters.outputBlockFormatter,\n\n });\n\n var getCompilers = new Method({\n name: 'getCompilers',\n call: 'eth_getCompilers',\n params: 0\n });\n\n var getBlockTransactionCount = new Method({\n name: 'getBlockTransactionCount',\n call: getBlockTransactionCountCall,\n params: 1,\n inputFormatter: [formatters.inputBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var getBlockUncleCount = new Method({\n name: 'getBlockUncleCount',\n call: uncleCountCall,\n params: 1,\n inputFormatter: [formatters.inputBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var getTransaction = new Method({\n name: 'getTransaction',\n call: 'eth_getTransactionByHash',\n params: 1,\n outputFormatter: formatters.outputTransactionFormatter\n });\n\n var getTransactionFromBlock = new Method({\n name: 'getTransactionFromBlock',\n call: transactionFromBlockCall,\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],\n outputFormatter: formatters.outputTransactionFormatter\n });\n\n var getTransactionReceipt = new Method({\n name: 'getTransactionReceipt',\n call: 'eth_getTransactionReceipt',\n params: 1,\n outputFormatter: formatters.outputTransactionReceiptFormatter\n });\n\n var getTransactionCount = new Method({\n name: 'getTransactionCount',\n call: 'eth_getTransactionCount',\n params: 2,\n inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var sendRawTransaction = new Method({\n name: 'sendRawTransaction',\n call: 'eth_sendRawTransaction',\n params: 1,\n inputFormatter: [null]\n });\n\n var sendTransaction = new Method({\n name: 'sendTransaction',\n call: 'eth_sendTransaction',\n params: 1,\n inputFormatter: [formatters.inputTransactionFormatter]\n });\n\n var sign = new Method({\n name: 'sign',\n call: 'eth_sign',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, null]\n });\n\n var call = new Method({\n name: 'call',\n call: 'eth_call',\n params: 2,\n inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]\n });\n\n var estimateGas = new Method({\n name: 'estimateGas',\n call: 'eth_estimateGas',\n params: 1,\n inputFormatter: [formatters.inputCallFormatter],\n outputFormatter: utils.toDecimal\n });\n\n var compileSolidity = new Method({\n name: 'compile.solidity',\n call: 'eth_compileSolidity',\n params: 1\n });\n\n var compileLLL = new Method({\n name: 'compile.lll',\n call: 'eth_compileLLL',\n params: 1\n });\n\n var compileSerpent = new Method({\n name: 'compile.serpent',\n call: 'eth_compileSerpent',\n params: 1\n });\n\n var submitWork = new Method({\n name: 'submitWork',\n call: 'eth_submitWork',\n params: 3\n });\n\n var getWork = new Method({\n name: 'getWork',\n call: 'eth_getWork',\n params: 0\n });\n\n return [\n getBalance,\n getStorageAt,\n getCode,\n getBlock,\n getUncle,\n getCompilers,\n getBlockTransactionCount,\n getBlockUncleCount,\n getTransaction,\n getTransactionFromBlock,\n getTransactionReceipt,\n getTransactionCount,\n call,\n estimateGas,\n sendRawTransaction,\n sendTransaction,\n sign,\n compileSolidity,\n compileLLL,\n compileSerpent,\n submitWork,\n getWork\n ];\n};\n\n\nvar properties = function () {\n return [\n new Property({\n name: 'coinbase',\n getter: 'eth_coinbase'\n }),\n new Property({\n name: 'mining',\n getter: 'eth_mining'\n }),\n new Property({\n name: 'hashrate',\n getter: 'eth_hashrate',\n outputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'syncing',\n getter: 'eth_syncing',\n outputFormatter: formatters.outputSyncingFormatter\n }),\n new Property({\n name: 'gasPrice',\n getter: 'eth_gasPrice',\n outputFormatter: formatters.outputBigNumberFormatter\n }),\n new Property({\n name: 'accounts',\n getter: 'eth_accounts'\n }),\n new Property({\n name: 'blockNumber',\n getter: 'eth_blockNumber',\n outputFormatter: utils.toDecimal\n }),\n new Property({\n name: 'protocolVersion',\n getter: 'eth_protocolVersion'\n })\n ];\n};\n\nEth.prototype.contract = function (abi) {\n var factory = new Contract(this, abi);\n return factory;\n};\n\nEth.prototype.filter = function (fil, callback) {\n return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback);\n};\n\nEth.prototype.namereg = function () {\n return this.contract(namereg.global.abi).at(namereg.global.address);\n};\n\nEth.prototype.icapNamereg = function () {\n return this.contract(namereg.icap.abi).at(namereg.icap.address);\n};\n\nEth.prototype.isSyncing = function (callback) {\n return new IsSyncing(this._requestManager, callback);\n};\n\nmodule.exports = Eth;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file eth.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../../utils/utils');\nvar Property = require('../property');\n\nvar Net = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n properties().forEach(function(p) { \n p.attachToObject(self);\n p.setRequestManager(web3._requestManager);\n });\n};\n\n/// @returns an array of objects describing web3.eth api properties\nvar properties = function () {\n return [\n new Property({\n name: 'listening',\n getter: 'net_listening'\n }),\n new Property({\n name: 'peerCount',\n getter: 'net_peerCount',\n outputFormatter: utils.toDecimal\n })\n ];\n};\n\nmodule.exports = Net;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file eth.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2015\n */\n\n\"use strict\";\n\nvar Method = require('../method');\nvar Property = require('../property');\nvar formatters = require('../formatters');\n\nfunction Personal(web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) {\n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n\n properties().forEach(function(p) {\n p.attachToObject(self);\n p.setRequestManager(self._requestManager);\n });\n}\n\nvar methods = function () {\n var newAccount = new Method({\n name: 'newAccount',\n call: 'personal_newAccount',\n params: 1,\n inputFormatter: [null]\n });\n\n var unlockAccount = new Method({\n name: 'unlockAccount',\n call: 'personal_unlockAccount',\n params: 3,\n inputFormatter: [formatters.inputAddressFormatter, null, null]\n });\n\n var unlockAccountAndSendTransaction = new Method({\n name: 'unlockAccountAndSendTransaction', // sendTransaction\n call: 'personal_signAndSendTransaction', // personal_sendTransaction\n params: 2,\n inputFormatter: [formatters.inputTransactionFormatter, null]\n });\n\n var lockAccount = new Method({\n name: 'lockAccount',\n call: 'personal_lockAccount',\n params: 1,\n inputFormatter: [formatters.inputAddressFormatter]\n });\n\n return [\n newAccount,\n unlockAccount,\n unlockAccountAndSendTransaction,\n lockAccount\n ];\n};\n\nvar properties = function () {\n return [\n new Property({\n name: 'listAccounts',\n getter: 'personal_listAccounts'\n })\n ];\n};\n\n\nmodule.exports = Personal;\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file shh.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\nvar formatters = require('../formatters');\nvar Filter = require('../filter');\nvar watches = require('./watches');\n\nvar Shh = function (web3) {\n this._requestManager = web3._requestManager;\n\n var self = this;\n\n methods().forEach(function(method) { \n method.attachToObject(self);\n method.setRequestManager(self._requestManager);\n });\n};\n\nShh.prototype.filter = function (fil, callback) {\n return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback);\n};\n\nvar methods = function () { \n\n var post = new Method({\n name: 'post', \n call: 'shh_post', \n params: 1,\n inputFormatter: [formatters.inputPostFormatter]\n });\n\n var newIdentity = new Method({\n name: 'newIdentity',\n call: 'shh_newIdentity',\n params: 0\n });\n\n var hasIdentity = new Method({\n name: 'hasIdentity',\n call: 'shh_hasIdentity',\n params: 1\n });\n\n var newGroup = new Method({\n name: 'newGroup',\n call: 'shh_newGroup',\n params: 0\n });\n\n var addToGroup = new Method({\n name: 'addToGroup',\n call: 'shh_addToGroup',\n params: 0\n });\n\n return [\n post,\n newIdentity,\n hasIdentity,\n newGroup,\n addToGroup\n ];\n};\n\nmodule.exports = Shh;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file watches.js\n * @authors:\n * Marek Kotewicz \n * @date 2015\n */\n\nvar Method = require('../method');\n\n/// @returns an array of objects describing web3.eth.filter api methods\nvar eth = function () {\n var newFilterCall = function (args) {\n var type = args[0];\n\n switch(type) {\n case 'latest':\n args.shift();\n this.params = 0;\n return 'eth_newBlockFilter';\n case 'pending':\n args.shift();\n this.params = 0;\n return 'eth_newPendingTransactionFilter';\n default:\n return 'eth_newFilter';\n }\n };\n\n var newFilter = new Method({\n name: 'newFilter',\n call: newFilterCall,\n params: 1\n });\n\n var uninstallFilter = new Method({\n name: 'uninstallFilter',\n call: 'eth_uninstallFilter',\n params: 1\n });\n\n var getLogs = new Method({\n name: 'getLogs',\n call: 'eth_getFilterLogs',\n params: 1\n });\n\n var poll = new Method({\n name: 'poll',\n call: 'eth_getFilterChanges',\n params: 1\n });\n\n return [\n newFilter,\n uninstallFilter,\n getLogs,\n poll\n ];\n};\n\n/// @returns an array of objects describing web3.shh.watch api methods\nvar shh = function () {\n var newFilter = new Method({\n name: 'newFilter',\n call: 'shh_newFilter',\n params: 1\n });\n\n var uninstallFilter = new Method({\n name: 'uninstallFilter',\n call: 'shh_uninstallFilter',\n params: 1\n });\n\n var getLogs = new Method({\n name: 'getLogs',\n call: 'shh_getMessages',\n params: 1\n });\n\n var poll = new Method({\n name: 'poll',\n call: 'shh_getFilterChanges',\n params: 1\n });\n\n return [\n newFilter,\n uninstallFilter,\n getLogs,\n poll\n ];\n};\n\nmodule.exports = {\n eth: eth,\n shh: shh\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file namereg.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar globalRegistrarAbi = require('../contracts/GlobalRegistrar.json');\nvar icapRegistrarAbi= require('../contracts/ICAPRegistrar.json');\n\nvar globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';\nvar icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';\n\nmodule.exports = {\n global: {\n abi: globalRegistrarAbi,\n address: globalNameregAddress\n },\n icap: {\n abi: icapRegistrarAbi,\n address: icapNameregAddress\n }\n};\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file property.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar utils = require('../utils/utils');\n\nvar Property = function (options) {\n this.name = options.name;\n this.getter = options.getter;\n this.setter = options.setter;\n this.outputFormatter = options.outputFormatter;\n this.inputFormatter = options.inputFormatter;\n this.requestManager = null;\n};\n\nProperty.prototype.setRequestManager = function (rm) {\n this.requestManager = rm;\n};\n\n/**\n * Should be called to format input args of method\n * \n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nProperty.prototype.formatInput = function (arg) {\n return this.inputFormatter ? this.inputFormatter(arg) : arg;\n};\n\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param {Object}\n * @return {Object}\n */\nProperty.prototype.formatOutput = function (result) {\n return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;\n};\n\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nProperty.prototype.extractCallback = function (args) {\n if (utils.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n\n\n/**\n * Should attach function to method\n * \n * @method attachToObject\n * @param {Object}\n * @param {Function}\n */\nProperty.prototype.attachToObject = function (obj) {\n var proto = {\n get: this.buildGet(),\n enumerable: true \n };\n\n var names = this.name.split('.');\n var name = names[0];\n if (names.length > 1) {\n obj[names[0]] = obj[names[0]] || {};\n obj = obj[names[0]];\n name = names[1];\n }\n\n Object.defineProperty(obj, name, proto);\n obj[asyncGetterName(name)] = this.buildAsyncGet();\n};\n\nvar asyncGetterName = function (name) {\n return 'get' + name.charAt(0).toUpperCase() + name.slice(1);\n};\n\nProperty.prototype.buildGet = function () {\n var property = this;\n return function get() {\n return property.formatOutput(property.requestManager.send({\n method: property.getter\n })); \n };\n};\n\nProperty.prototype.buildAsyncGet = function () {\n var property = this;\n var get = function (callback) {\n property.requestManager.sendAsync({\n method: property.getter\n }, function (err, result) {\n callback(err, property.formatOutput(result));\n });\n };\n get.request = this.request.bind(this);\n return get;\n};\n\n/**\n * Should be called to create pure JSONRPC request which can be used in batch request\n *\n * @method request\n * @param {...} params\n * @return {Object} jsonrpc request\n */\nProperty.prototype.request = function () {\n var payload = {\n method: this.getter,\n params: [],\n callback: this.extractCallback(Array.prototype.slice.call(arguments))\n };\n payload.format = this.formatOutput.bind(this);\n return payload;\n};\n\nmodule.exports = Property;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file requestmanager.js\n * @author Jeffrey Wilcke \n * @author Marek Kotewicz \n * @author Marian Oancea \n * @author Fabian Vogelsteller \n * @author Gav Wood \n * @date 2014\n */\n\nvar Jsonrpc = require('./jsonrpc');\nvar utils = require('../utils/utils');\nvar c = require('../utils/config');\nvar errors = require('./errors');\n\n/**\n * It's responsible for passing messages to providers\n * It's also responsible for polling the ethereum node for incoming messages\n * Default poll timeout is 1 second\n * Singleton\n */\nvar RequestManager = function (provider) {\n this.provider = provider;\n this.polls = {};\n this.timeout = null;\n};\n\n/**\n * Should be used to synchronously send request\n *\n * @method send\n * @param {Object} data\n * @return {Object}\n */\nRequestManager.prototype.send = function (data) {\n if (!this.provider) {\n console.error(errors.InvalidProvider());\n return null;\n }\n\n var payload = Jsonrpc.toPayload(data.method, data.params);\n var result = this.provider.send(payload);\n\n if (!Jsonrpc.isValidResponse(result)) {\n throw errors.InvalidResponse(result);\n }\n\n return result.result;\n};\n\n/**\n * Should be used to asynchronously send request\n *\n * @method sendAsync\n * @param {Object} data\n * @param {Function} callback\n */\nRequestManager.prototype.sendAsync = function (data, callback) {\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n\n var payload = Jsonrpc.toPayload(data.method, data.params);\n this.provider.sendAsync(payload, function (err, result) {\n if (err) {\n return callback(err);\n }\n \n if (!Jsonrpc.isValidResponse(result)) {\n return callback(errors.InvalidResponse(result));\n }\n\n callback(null, result.result);\n });\n};\n\n/**\n * Should be called to asynchronously send batch request\n *\n * @method sendBatch\n * @param {Array} batch data\n * @param {Function} callback\n */\nRequestManager.prototype.sendBatch = function (data, callback) {\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n\n var payload = Jsonrpc.toBatchPayload(data);\n\n this.provider.sendAsync(payload, function (err, results) {\n if (err) {\n return callback(err);\n }\n\n if (!utils.isArray(results)) {\n return callback(errors.InvalidResponse(results));\n }\n\n callback(err, results);\n }); \n};\n\n/**\n * Should be used to set provider of request manager\n *\n * @method setProvider\n * @param {Object}\n */\nRequestManager.prototype.setProvider = function (p) {\n this.provider = p;\n};\n\n/**\n * Should be used to start polling\n *\n * @method startPolling\n * @param {Object} data\n * @param {Number} pollId\n * @param {Function} callback\n * @param {Function} uninstall\n *\n * @todo cleanup number of params\n */\nRequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {\n this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall};\n\n\n // start polling\n if (!this.timeout) {\n this.poll();\n }\n};\n\n/**\n * Should be used to stop polling for filter with given id\n *\n * @method stopPolling\n * @param {Number} pollId\n */\nRequestManager.prototype.stopPolling = function (pollId) {\n delete this.polls[pollId];\n\n // stop polling\n if(Object.keys(this.polls).length === 0 && this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n};\n\n/**\n * Should be called to reset the polling mechanism of the request manager\n *\n * @method reset\n */\nRequestManager.prototype.reset = function (keepIsSyncing) {\n /*jshint maxcomplexity:5 */\n\n for (var key in this.polls) {\n // remove all polls, except sync polls,\n // they need to be removed manually by calling syncing.stopWatching()\n if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) {\n this.polls[key].uninstall();\n delete this.polls[key];\n }\n }\n\n // stop polling\n if(Object.keys(this.polls).length === 0 && this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n};\n\n/**\n * Should be called to poll for changes on filter with given id\n *\n * @method poll\n */\nRequestManager.prototype.poll = function () {\n /*jshint maxcomplexity: 6 */\n this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);\n\n if (Object.keys(this.polls).length === 0) {\n return;\n }\n\n if (!this.provider) {\n console.error(errors.InvalidProvider());\n return;\n }\n\n var pollsData = [];\n var pollsIds = [];\n for (var key in this.polls) {\n pollsData.push(this.polls[key].data);\n pollsIds.push(key);\n }\n\n if (pollsData.length === 0) {\n return;\n }\n\n var payload = Jsonrpc.toBatchPayload(pollsData);\n \n // map the request id to they poll id\n var pollsIdMap = {};\n payload.forEach(function(load, index){\n pollsIdMap[load.id] = pollsIds[index];\n });\n\n\n var self = this;\n this.provider.sendAsync(payload, function (error, results) {\n\n\n // TODO: console log?\n if (error) {\n return;\n }\n\n if (!utils.isArray(results)) {\n throw errors.InvalidResponse(results);\n }\n results.map(function (result) {\n var id = pollsIdMap[result.id];\n\n // make sure the filter is still installed after arrival of the request\n if (self.polls[id]) {\n result.callback = self.polls[id].callback;\n return result;\n } else\n return false;\n }).filter(function (result) {\n return !!result; \n }).filter(function (result) {\n var valid = Jsonrpc.isValidResponse(result);\n if (!valid) {\n result.callback(errors.InvalidResponse(result));\n }\n return valid;\n }).forEach(function (result) {\n result.callback(null, result.result);\n });\n });\n};\n\nmodule.exports = RequestManager;\n\n", - "\n\nvar Settings = function () {\n this.defaultBlock = 'latest';\n this.defaultAccount = undefined;\n};\n\nmodule.exports = Settings;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file syncing.js\n * @authors:\n * Fabian Vogelsteller \n * @date 2015\n */\n\nvar formatters = require('./formatters');\nvar utils = require('../utils/utils');\n\nvar count = 1;\n\n/**\nAdds the callback and sets up the methods, to iterate over the results.\n\n@method pollSyncing\n@param {Object} self\n*/\nvar pollSyncing = function(self) {\n\n var onMessage = function (error, sync) {\n if (error) {\n return self.callbacks.forEach(function (callback) {\n callback(error);\n });\n }\n\n if(utils.isObject(sync) && sync.startingBlock)\n sync = formatters.outputSyncingFormatter(sync);\n\n self.callbacks.forEach(function (callback) {\n if (self.lastSyncState !== sync) {\n \n // call the callback with true first so the app can stop anything, before receiving the sync data\n if(!self.lastSyncState && utils.isObject(sync))\n callback(null, true);\n \n // call on the next CPU cycle, so the actions of the sync stop can be processes first\n setTimeout(function() {\n callback(null, sync);\n }, 0);\n \n self.lastSyncState = sync;\n }\n });\n };\n\n self.requestManager.startPolling({\n method: 'eth_syncing',\n params: [],\n }, self.pollId, onMessage, self.stopWatching.bind(self));\n\n};\n\nvar IsSyncing = function (requestManager, callback) {\n this.requestManager = requestManager;\n this.pollId = 'syncPoll_'+ count++;\n this.callbacks = [];\n this.addCallback(callback);\n this.lastSyncState = false;\n pollSyncing(this);\n\n return this;\n};\n\nIsSyncing.prototype.addCallback = function (callback) {\n if(callback)\n this.callbacks.push(callback);\n return this;\n};\n\nIsSyncing.prototype.stopWatching = function () {\n this.requestManager.stopPolling(this.pollId);\n this.callbacks = [];\n};\n\nmodule.exports = IsSyncing;\n\n", - "/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** \n * @file transfer.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\nvar Iban = require('./iban');\nvar exchangeAbi = require('../contracts/SmartExchange.json');\n\n/**\n * Should be used to make Iban transfer\n *\n * @method transfer\n * @param {String} from\n * @param {String} to iban\n * @param {Value} value to be tranfered\n * @param {Function} callback, callback\n */\nvar transfer = function (eth, from, to, value, callback) {\n var iban = new Iban(to); \n if (!iban.isValid()) {\n throw new Error('invalid iban address');\n }\n\n if (iban.isDirect()) {\n return transferToAddress(eth, from, iban.address(), value, callback);\n }\n \n if (!callback) {\n var address = eth.icapNamereg().addr(iban.institution());\n return deposit(eth, from, address, value, iban.client());\n }\n\n eth.icapNamereg().addr(iban.institution(), function (err, address) {\n return deposit(eth, from, address, value, iban.client(), callback);\n });\n \n};\n\n/**\n * Should be used to transfer funds to certain address\n *\n * @method transferToAddress\n * @param {String} from\n * @param {String} to\n * @param {Value} value to be tranfered\n * @param {Function} callback, callback\n */\nvar transferToAddress = function (eth, from, to, value, callback) {\n return eth.sendTransaction({\n address: to,\n from: from,\n value: value\n }, callback);\n};\n\n/**\n * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)\n *\n * @method deposit\n * @param {String} from\n * @param {String} to\n * @param {Value} value to be transfered\n * @param {String} client unique identifier\n * @param {Function} callback, callback\n */\nvar deposit = function (eth, from, to, value, client, callback) {\n var abi = exchangeAbi;\n return eth.contract(abi).at(to).deposit(client, {\n from: from,\n value: value\n }, callback);\n};\n\nmodule.exports = transfer;\n\n", - null, - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\t function F() {}\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t F.prototype = this;\n\t var subtype = new F();\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init')) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex != -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);\n\t var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\n\t return WordArray.create(words, nBytes);\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t var keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t i--;\n\t }\n\t data.sigBytes = i + 1;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA1 = C_algo.SHA1;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA1\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA1,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t var Wih = Wi.high = M[offset + i * 2] | 0;\n\t var Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t var Wil = gamma0l + Wi7l;\n\t var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t var Wil = Wil + gamma1l;\n\t var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t var Wil = Wil + Wi16l;\n\t var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));", - ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));", - ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));", - "/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n", - "/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */\n\n;(function (global) {\n 'use strict';\n\n /*\n bignumber.js v2.0.7\n A JavaScript library for arbitrary-precision arithmetic.\n https://github.com/MikeMcl/bignumber.js\n Copyright (c) 2015 Michael Mclaughlin \n MIT Expat Licence\n */\n\n\n var BigNumber, crypto, parseNumeric,\n isNumeric = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\n mathceil = Math.ceil,\n mathfloor = Math.floor,\n notBool = ' not a boolean or binary digit',\n roundingMode = 'rounding mode',\n tooManyDigits = 'number type has more than 15 significant digits',\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_',\n BASE = 1e14,\n LOG_BASE = 14,\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\n SQRT_BASE = 1e7,\n\n /*\n * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\n * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an\n * exception is thrown (if ERRORS is true).\n */\n MAX = 1E9; // 0 to MAX_INT32\n\n\n /*\n * Create and return a BigNumber constructor.\n */\n function another(configObj) {\n var div,\n\n // id tracks the caller function, so its name can be included in error messages.\n id = 0,\n P = BigNumber.prototype,\n ONE = new BigNumber(1),\n\n\n /********************************* EDITABLE DEFAULTS **********************************/\n\n\n /*\n * The default values below must be integers within the inclusive ranges stated.\n * The values can also be changed at run-time using BigNumber.config.\n */\n\n // The maximum number of decimal places for operations involving division.\n DECIMAL_PLACES = 20, // 0 to MAX\n\n /*\n * The rounding mode used when rounding to the above decimal places, and when using\n * toExponential, toFixed, toFormat and toPrecision, and round (default value).\n * UP 0 Away from zero.\n * DOWN 1 Towards zero.\n * CEIL 2 Towards +Infinity.\n * FLOOR 3 Towards -Infinity.\n * HALF_UP 4 Towards nearest neighbour. If equidistant, up.\n * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\n * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\n * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\n * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\n */\n ROUNDING_MODE = 4, // 0 to 8\n\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\n\n // The exponent value at and beneath which toString returns exponential notation.\n // Number type: -7\n TO_EXP_NEG = -7, // 0 to -MAX\n\n // The exponent value at and above which toString returns exponential notation.\n // Number type: 21\n TO_EXP_POS = 21, // 0 to MAX\n\n // RANGE : [MIN_EXP, MAX_EXP]\n\n // The minimum exponent value, beneath which underflow to zero occurs.\n // Number type: -324 (5e-324)\n MIN_EXP = -1e7, // -1 to -MAX\n\n // The maximum exponent value, above which overflow to Infinity occurs.\n // Number type: 308 (1.7976931348623157e+308)\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\n MAX_EXP = 1e7, // 1 to MAX\n\n // Whether BigNumber Errors are ever thrown.\n ERRORS = true, // true or false\n\n // Change to intValidatorNoErrors if ERRORS is false.\n isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors\n\n // Whether to use cryptographically-secure random number generation, if available.\n CRYPTO = false, // true or false\n\n /*\n * The modulo mode used when calculating the modulus: a mod n.\n * The quotient (q = a / n) is calculated according to the corresponding rounding mode.\n * The remainder (r) is calculated as: r = a - n * q.\n *\n * UP 0 The remainder is positive if the dividend is negative, else is negative.\n * DOWN 1 The remainder has the same sign as the dividend.\n * This modulo mode is commonly known as 'truncated division' and is\n * equivalent to (a % n) in JavaScript.\n * FLOOR 3 The remainder has the same sign as the divisor (Python %).\n * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\n * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\n * The remainder is always positive.\n *\n * The truncated division, floored division, Euclidian division and IEEE 754 remainder\n * modes are commonly used for the modulus operation.\n * Although the other rounding modes can also be used, they may not give useful results.\n */\n MODULO_MODE = 1, // 0 to 9\n\n // The maximum number of significant digits of the result of the toPower operation.\n // If POW_PRECISION is 0, there will be unlimited significant digits.\n POW_PRECISION = 100, // 0 to MAX\n\n // The format specification used by the BigNumber.prototype.toFormat method.\n FORMAT = {\n decimalSeparator: '.',\n groupSeparator: ',',\n groupSize: 3,\n secondaryGroupSize: 0,\n fractionGroupSeparator: '\\xA0', // non-breaking space\n fractionGroupSize: 0\n };\n\n\n /******************************************************************************************/\n\n\n // CONSTRUCTOR\n\n\n /*\n * The BigNumber constructor and exported function.\n * Create and return a new instance of a BigNumber object.\n *\n * n {number|string|BigNumber} A numeric value.\n * [b] {number} The base of n. Integer, 2 to 64 inclusive.\n */\n function BigNumber( n, b ) {\n var c, e, i, num, len, str,\n x = this;\n\n // Enable constructor usage without new.\n if ( !( x instanceof BigNumber ) ) {\n\n // 'BigNumber() constructor call without new: {n}'\n if (ERRORS) raise( 26, 'constructor call without new', n );\n return new BigNumber( n, b );\n }\n\n // 'new BigNumber() base not an integer: {b}'\n // 'new BigNumber() base out of range: {b}'\n if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) {\n\n // Duplicate.\n if ( n instanceof BigNumber ) {\n x.s = n.s;\n x.e = n.e;\n x.c = ( n = n.c ) ? n.slice() : n;\n id = 0;\n return;\n }\n\n if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) {\n x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1;\n\n // Fast path for integers.\n if ( n === ~~n ) {\n for ( e = 0, i = n; i >= 10; i /= 10, e++ );\n x.e = e;\n x.c = [n];\n id = 0;\n return;\n }\n\n str = n + '';\n } else {\n if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num );\n x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;\n }\n } else {\n b = b | 0;\n str = n + '';\n\n // Ensure return value is rounded to DECIMAL_PLACES as with other bases.\n // Allow exponential notation to be used with base 10 argument.\n if ( b == 10 ) {\n x = new BigNumber( n instanceof BigNumber ? n : str );\n return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE );\n }\n\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\n // Any number in exponential form will fail due to the [Ee][+-].\n if ( ( num = typeof n == 'number' ) && n * 0 != 0 ||\n !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) +\n '(?:\\\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) {\n return parseNumeric( x, str, num, b );\n }\n\n if (num) {\n x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1;\n\n if ( ERRORS && str.replace( /^0\\.0*|\\./, '' ).length > 15 ) {\n\n // 'new BigNumber() number type has more than 15 significant digits: {n}'\n raise( id, tooManyDigits, n );\n }\n\n // Prevent later check for length on converted number.\n num = false;\n } else {\n x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;\n }\n\n str = convertBase( str, 10, b, x.s );\n }\n\n // Decimal point?\n if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' );\n\n // Exponential form?\n if ( ( i = str.search( /e/i ) ) > 0 ) {\n\n // Determine exponent.\n if ( e < 0 ) e = i;\n e += +str.slice( i + 1 );\n str = str.substring( 0, i );\n } else if ( e < 0 ) {\n\n // Integer.\n e = str.length;\n }\n\n // Determine leading zeros.\n for ( i = 0; str.charCodeAt(i) === 48; i++ );\n\n // Determine trailing zeros.\n for ( len = str.length; str.charCodeAt(--len) === 48; );\n str = str.slice( i, len + 1 );\n\n if (str) {\n len = str.length;\n\n // Disallow numbers with over 15 significant digits if number type.\n // 'new BigNumber() number type has more than 15 significant digits: {n}'\n if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n );\n\n e = e - i - 1;\n\n // Overflow?\n if ( e > MAX_EXP ) {\n\n // Infinity.\n x.c = x.e = null;\n\n // Underflow?\n } else if ( e < MIN_EXP ) {\n\n // Zero.\n x.c = [ x.e = 0 ];\n } else {\n x.e = e;\n x.c = [];\n\n // Transform base\n\n // e is the base 10 exponent.\n // i is where to slice str to get the first element of the coefficient array.\n i = ( e + 1 ) % LOG_BASE;\n if ( e < 0 ) i += LOG_BASE;\n\n if ( i < len ) {\n if (i) x.c.push( +str.slice( 0, i ) );\n\n for ( len -= LOG_BASE; i < len; ) {\n x.c.push( +str.slice( i, i += LOG_BASE ) );\n }\n\n str = str.slice(i);\n i = LOG_BASE - str.length;\n } else {\n i -= len;\n }\n\n for ( ; i--; str += '0' );\n x.c.push( +str );\n }\n } else {\n\n // Zero.\n x.c = [ x.e = 0 ];\n }\n\n id = 0;\n }\n\n\n // CONSTRUCTOR PROPERTIES\n\n\n BigNumber.another = another;\n\n BigNumber.ROUND_UP = 0;\n BigNumber.ROUND_DOWN = 1;\n BigNumber.ROUND_CEIL = 2;\n BigNumber.ROUND_FLOOR = 3;\n BigNumber.ROUND_HALF_UP = 4;\n BigNumber.ROUND_HALF_DOWN = 5;\n BigNumber.ROUND_HALF_EVEN = 6;\n BigNumber.ROUND_HALF_CEIL = 7;\n BigNumber.ROUND_HALF_FLOOR = 8;\n BigNumber.EUCLID = 9;\n\n\n /*\n * Configure infrequently-changing library-wide settings.\n *\n * Accept an object or an argument list, with one or many of the following properties or\n * parameters respectively:\n *\n * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive\n * ROUNDING_MODE {number} Integer, 0 to 8 inclusive\n * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or\n * [integer -MAX to 0 incl., 0 to MAX incl.]\n * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\n * [integer -MAX to -1 incl., integer 1 to MAX incl.]\n * ERRORS {boolean|number} true, false, 1 or 0\n * CRYPTO {boolean|number} true, false, 1 or 0\n * MODULO_MODE {number} 0 to 9 inclusive\n * POW_PRECISION {number} 0 to MAX inclusive\n * FORMAT {object} See BigNumber.prototype.toFormat\n * decimalSeparator {string}\n * groupSeparator {string}\n * groupSize {number}\n * secondaryGroupSize {number}\n * fractionGroupSeparator {string}\n * fractionGroupSize {number}\n *\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\n *\n * E.g.\n * BigNumber.config(20, 4) is equivalent to\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\n *\n * Ignore properties/parameters set to null or undefined.\n * Return an object with the properties current values.\n */\n BigNumber.config = function () {\n var v, p,\n i = 0,\n r = {},\n a = arguments,\n o = a[0],\n has = o && typeof o == 'object'\n ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; }\n : function () { if ( a.length > i ) return ( v = a[i++] ) != null; };\n\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\n // 'config() DECIMAL_PLACES not an integer: {v}'\n // 'config() DECIMAL_PLACES out of range: {v}'\n if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) {\n DECIMAL_PLACES = v | 0;\n }\n r[p] = DECIMAL_PLACES;\n\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\n // 'config() ROUNDING_MODE not an integer: {v}'\n // 'config() ROUNDING_MODE out of range: {v}'\n if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) {\n ROUNDING_MODE = v | 0;\n }\n r[p] = ROUNDING_MODE;\n\n // EXPONENTIAL_AT {number|number[]}\n // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive].\n // 'config() EXPONENTIAL_AT not an integer: {v}'\n // 'config() EXPONENTIAL_AT out of range: {v}'\n if ( has( p = 'EXPONENTIAL_AT' ) ) {\n\n if ( isArray(v) ) {\n if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) {\n TO_EXP_NEG = v[0] | 0;\n TO_EXP_POS = v[1] | 0;\n }\n } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {\n TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 );\n }\n }\n r[p] = [ TO_EXP_NEG, TO_EXP_POS ];\n\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\n // 'config() RANGE not an integer: {v}'\n // 'config() RANGE cannot be zero: {v}'\n // 'config() RANGE out of range: {v}'\n if ( has( p = 'RANGE' ) ) {\n\n if ( isArray(v) ) {\n if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) {\n MIN_EXP = v[0] | 0;\n MAX_EXP = v[1] | 0;\n }\n } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {\n if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 );\n else if (ERRORS) raise( 2, p + ' cannot be zero', v );\n }\n }\n r[p] = [ MIN_EXP, MAX_EXP ];\n\n // ERRORS {boolean|number} true, false, 1 or 0.\n // 'config() ERRORS not a boolean or binary digit: {v}'\n if ( has( p = 'ERRORS' ) ) {\n\n if ( v === !!v || v === 1 || v === 0 ) {\n id = 0;\n isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors;\n } else if (ERRORS) {\n raise( 2, p + notBool, v );\n }\n }\n r[p] = ERRORS;\n\n // CRYPTO {boolean|number} true, false, 1 or 0.\n // 'config() CRYPTO not a boolean or binary digit: {v}'\n // 'config() crypto unavailable: {crypto}'\n if ( has( p = 'CRYPTO' ) ) {\n\n if ( v === !!v || v === 1 || v === 0 ) {\n CRYPTO = !!( v && crypto && typeof crypto == 'object' );\n if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto );\n } else if (ERRORS) {\n raise( 2, p + notBool, v );\n }\n }\n r[p] = CRYPTO;\n\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\n // 'config() MODULO_MODE not an integer: {v}'\n // 'config() MODULO_MODE out of range: {v}'\n if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) {\n MODULO_MODE = v | 0;\n }\n r[p] = MODULO_MODE;\n\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\n // 'config() POW_PRECISION not an integer: {v}'\n // 'config() POW_PRECISION out of range: {v}'\n if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) {\n POW_PRECISION = v | 0;\n }\n r[p] = POW_PRECISION;\n\n // FORMAT {object}\n // 'config() FORMAT not an object: {v}'\n if ( has( p = 'FORMAT' ) ) {\n\n if ( typeof v == 'object' ) {\n FORMAT = v;\n } else if (ERRORS) {\n raise( 2, p + ' not an object', v );\n }\n }\n r[p] = FORMAT;\n\n return r;\n };\n\n\n /*\n * Return a new BigNumber whose value is the maximum of the arguments.\n *\n * arguments {number|string|BigNumber}\n */\n BigNumber.max = function () { return maxOrMin( arguments, P.lt ); };\n\n\n /*\n * Return a new BigNumber whose value is the minimum of the arguments.\n *\n * arguments {number|string|BigNumber}\n */\n BigNumber.min = function () { return maxOrMin( arguments, P.gt ); };\n\n\n /*\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\n * zeros are produced).\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n *\n * 'random() decimal places not an integer: {dp}'\n * 'random() decimal places out of range: {dp}'\n * 'random() crypto unavailable: {crypto}'\n */\n BigNumber.random = (function () {\n var pow2_53 = 0x20000000000000;\n\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\n // Check if Math.random() produces more than 32 bits of randomness.\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\n ? function () { return mathfloor( Math.random() * pow2_53 ); }\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\n (Math.random() * 0x800000 | 0); };\n\n return function (dp) {\n var a, b, e, k, v,\n i = 0,\n c = [],\n rand = new BigNumber(ONE);\n\n dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0;\n k = mathceil( dp / LOG_BASE );\n\n if (CRYPTO) {\n\n // Browsers supporting crypto.getRandomValues.\n if ( crypto && crypto.getRandomValues ) {\n\n a = crypto.getRandomValues( new Uint32Array( k *= 2 ) );\n\n for ( ; i < k; ) {\n\n // 53 bits:\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\n // 11111 11111111 11111111\n // 0x20000 is 2^21.\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\n\n // Rejection sampling:\n // 0 <= v < 9007199254740992\n // Probability that v >= 9e15, is\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\n if ( v >= 9e15 ) {\n b = crypto.getRandomValues( new Uint32Array(2) );\n a[i] = b[0];\n a[i + 1] = b[1];\n } else {\n\n // 0 <= v <= 8999999999999999\n // 0 <= (v % 1e14) <= 99999999999999\n c.push( v % 1e14 );\n i += 2;\n }\n }\n i = k / 2;\n\n // Node.js supporting crypto.randomBytes.\n } else if ( crypto && crypto.randomBytes ) {\n\n // buffer\n a = crypto.randomBytes( k *= 7 );\n\n for ( ; i < k; ) {\n\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\n // 0x100000000 is 2^32, 0x1000000 is 2^24\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\n // 0 <= v < 9007199254740992\n v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) +\n ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) +\n ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6];\n\n if ( v >= 9e15 ) {\n crypto.randomBytes(7).copy( a, i );\n } else {\n\n // 0 <= (v % 1e14) <= 99999999999999\n c.push( v % 1e14 );\n i += 7;\n }\n }\n i = k / 7;\n } else if (ERRORS) {\n raise( 14, 'crypto unavailable', crypto );\n }\n }\n\n // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false.\n if (!i) {\n\n for ( ; i < k; ) {\n v = random53bitInt();\n if ( v < 9e15 ) c[i++] = v % 1e14;\n }\n }\n\n k = c[--i];\n dp %= LOG_BASE;\n\n // Convert trailing digits to zeros according to dp.\n if ( k && dp ) {\n v = POWS_TEN[LOG_BASE - dp];\n c[i] = mathfloor( k / v ) * v;\n }\n\n // Remove trailing elements which are zero.\n for ( ; c[i] === 0; c.pop(), i-- );\n\n // Zero?\n if ( i < 0 ) {\n c = [ e = 0 ];\n } else {\n\n // Remove leading elements which are zero and adjust exponent accordingly.\n for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE);\n\n // Count the digits of the first element of c to determine leading zeros, and...\n for ( i = 1, v = c[0]; v >= 10; v /= 10, i++);\n\n // adjust the exponent accordingly.\n if ( i < LOG_BASE ) e -= LOG_BASE - i;\n }\n\n rand.e = e;\n rand.c = c;\n return rand;\n };\n })();\n\n\n // PRIVATE FUNCTIONS\n\n\n // Convert a numeric string of baseIn to a numeric string of baseOut.\n function convertBase( str, baseOut, baseIn, sign ) {\n var d, e, k, r, x, xc, y,\n i = str.indexOf( '.' ),\n dp = DECIMAL_PLACES,\n rm = ROUNDING_MODE;\n\n if ( baseIn < 37 ) str = str.toLowerCase();\n\n // Non-integer.\n if ( i >= 0 ) {\n k = POW_PRECISION;\n\n // Unlimited precision.\n POW_PRECISION = 0;\n str = str.replace( '.', '' );\n y = new BigNumber(baseIn);\n x = y.pow( str.length - i );\n POW_PRECISION = k;\n\n // Convert str as if an integer, then restore the fraction part by dividing the\n // result by its base raised to a power.\n y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut );\n y.e = y.c.length;\n }\n\n // Convert the number as integer.\n xc = toBaseOut( str, baseIn, baseOut );\n e = k = xc.length;\n\n // Remove trailing zeros.\n for ( ; xc[--k] == 0; xc.pop() );\n if ( !xc[0] ) return '0';\n\n if ( i < 0 ) {\n --e;\n } else {\n x.c = xc;\n x.e = e;\n\n // sign is needed for correct rounding.\n x.s = sign;\n x = div( x, y, dp, rm, baseOut );\n xc = x.c;\n r = x.r;\n e = x.e;\n }\n\n d = e + dp + 1;\n\n // The rounding digit, i.e. the digit to the right of the digit that may be rounded up.\n i = xc[d];\n k = baseOut / 2;\n r = r || d < 0 || xc[d + 1] != null;\n\n r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )\n : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\n rm == ( x.s < 0 ? 8 : 7 ) );\n\n if ( d < 1 || !xc[0] ) {\n\n // 1^-dp or 0.\n str = r ? toFixedPoint( '1', -dp ) : '0';\n } else {\n xc.length = d;\n\n if (r) {\n\n // Rounding up may mean the previous digit has to be rounded up and so on.\n for ( --baseOut; ++xc[--d] > baseOut; ) {\n xc[d] = 0;\n\n if ( !d ) {\n ++e;\n xc.unshift(1);\n }\n }\n }\n\n // Determine trailing zeros.\n for ( k = xc.length; !xc[--k]; );\n\n // E.g. [4, 11, 15] becomes 4bf.\n for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) );\n str = toFixedPoint( str, e );\n }\n\n // The caller will add the sign.\n return str;\n }\n\n\n // Perform division in the specified base. Called by div and convertBase.\n div = (function () {\n\n // Assume non-zero x and k.\n function multiply( x, k, base ) {\n var m, temp, xlo, xhi,\n carry = 0,\n i = x.length,\n klo = k % SQRT_BASE,\n khi = k / SQRT_BASE | 0;\n\n for ( x = x.slice(); i--; ) {\n xlo = x[i] % SQRT_BASE;\n xhi = x[i] / SQRT_BASE | 0;\n m = khi * xlo + xhi * klo;\n temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry;\n carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi;\n x[i] = temp % base;\n }\n\n if (carry) x.unshift(carry);\n\n return x;\n }\n\n function compare( a, b, aL, bL ) {\n var i, cmp;\n\n if ( aL != bL ) {\n cmp = aL > bL ? 1 : -1;\n } else {\n\n for ( i = cmp = 0; i < aL; i++ ) {\n\n if ( a[i] != b[i] ) {\n cmp = a[i] > b[i] ? 1 : -1;\n break;\n }\n }\n }\n return cmp;\n }\n\n function subtract( a, b, aL, base ) {\n var i = 0;\n\n // Subtract b from a.\n for ( ; aL--; ) {\n a[aL] -= i;\n i = a[aL] < b[aL] ? 1 : 0;\n a[aL] = i * base + a[aL] - b[aL];\n }\n\n // Remove leading zeros.\n for ( ; !a[0] && a.length > 1; a.shift() );\n }\n\n // x: dividend, y: divisor.\n return function ( x, y, dp, rm, base ) {\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\n yL, yz,\n s = x.s == y.s ? 1 : -1,\n xc = x.c,\n yc = y.c;\n\n // Either NaN, Infinity or 0?\n if ( !xc || !xc[0] || !yc || !yc[0] ) {\n\n return new BigNumber(\n\n // Return NaN if either NaN, or both Infinity or 0.\n !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN :\n\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\n );\n }\n\n q = new BigNumber(s);\n qc = q.c = [];\n e = x.e - y.e;\n s = dp + e + 1;\n\n if ( !base ) {\n base = BASE;\n e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE );\n s = s / LOG_BASE | 0;\n }\n\n // Result exponent may be one less then the current value of e.\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\n for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ );\n if ( yc[i] > ( xc[i] || 0 ) ) e--;\n\n if ( s < 0 ) {\n qc.push(1);\n more = true;\n } else {\n xL = xc.length;\n yL = yc.length;\n i = 0;\n s += 2;\n\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\n\n n = mathfloor( base / ( yc[0] + 1 ) );\n\n // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1.\n // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) {\n if ( n > 1 ) {\n yc = multiply( yc, n, base );\n xc = multiply( xc, n, base );\n yL = yc.length;\n xL = xc.length;\n }\n\n xi = yL;\n rem = xc.slice( 0, yL );\n remL = rem.length;\n\n // Add zeros to make remainder as long as divisor.\n for ( ; remL < yL; rem[remL++] = 0 );\n yz = yc.slice();\n yz.unshift(0);\n yc0 = yc[0];\n if ( yc[1] >= base / 2 ) yc0++;\n // Not necessary, but to prevent trial digit n > base, when using base 3.\n // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15;\n\n do {\n n = 0;\n\n // Compare divisor and remainder.\n cmp = compare( yc, rem, yL, remL );\n\n // If divisor < remainder.\n if ( cmp < 0 ) {\n\n // Calculate trial digit, n.\n\n rem0 = rem[0];\n if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 );\n\n // n is how many times the divisor goes into the current remainder.\n n = mathfloor( rem0 / yc0 );\n\n // Algorithm:\n // 1. product = divisor * trial digit (n)\n // 2. if product > remainder: product -= divisor, n--\n // 3. remainder -= product\n // 4. if product was < remainder at 2:\n // 5. compare new remainder and divisor\n // 6. If remainder > divisor: remainder -= divisor, n++\n\n if ( n > 1 ) {\n\n // n may be > base only when base is 3.\n if (n >= base) n = base - 1;\n\n // product = divisor * trial digit.\n prod = multiply( yc, n, base );\n prodL = prod.length;\n remL = rem.length;\n\n // Compare product and remainder.\n // If product > remainder.\n // Trial digit n too high.\n // n is 1 too high about 5% of the time, and is not known to have\n // ever been more than 1 too high.\n while ( compare( prod, rem, prodL, remL ) == 1 ) {\n n--;\n\n // Subtract divisor from product.\n subtract( prod, yL < prodL ? yz : yc, prodL, base );\n prodL = prod.length;\n cmp = 1;\n }\n } else {\n\n // n is 0 or 1, cmp is -1.\n // If n is 0, there is no need to compare yc and rem again below,\n // so change cmp to 1 to avoid it.\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\n if ( n == 0 ) {\n\n // divisor < remainder, so n must be at least 1.\n cmp = n = 1;\n }\n\n // product = divisor\n prod = yc.slice();\n prodL = prod.length;\n }\n\n if ( prodL < remL ) prod.unshift(0);\n\n // Subtract product from remainder.\n subtract( rem, prod, remL, base );\n remL = rem.length;\n\n // If product was < remainder.\n if ( cmp == -1 ) {\n\n // Compare divisor and new remainder.\n // If divisor < new remainder, subtract divisor from remainder.\n // Trial digit n too low.\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\n while ( compare( yc, rem, yL, remL ) < 1 ) {\n n++;\n\n // Subtract divisor from remainder.\n subtract( rem, yL < remL ? yz : yc, remL, base );\n remL = rem.length;\n }\n }\n } else if ( cmp === 0 ) {\n n++;\n rem = [0];\n } // else cmp === 1 and n will be 0\n\n // Add the next digit, n, to the result array.\n qc[i++] = n;\n\n // Update the remainder.\n if ( rem[0] ) {\n rem[remL++] = xc[xi] || 0;\n } else {\n rem = [ xc[xi] ];\n remL = 1;\n }\n } while ( ( xi++ < xL || rem[0] != null ) && s-- );\n\n more = rem[0] != null;\n\n // Leading zero?\n if ( !qc[0] ) qc.shift();\n }\n\n if ( base == BASE ) {\n\n // To calculate q.e, first get the number of digits of qc[0].\n for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ );\n round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more );\n\n // Caller is convertBase.\n } else {\n q.e = e;\n q.r = +more;\n }\n\n return q;\n };\n })();\n\n\n /*\n * Return a string representing the value of BigNumber n in fixed-point or exponential\n * notation rounded to the specified decimal places or significant digits.\n *\n * n is a BigNumber.\n * i is the index of the last digit required (i.e. the digit that may be rounded up).\n * rm is the rounding mode.\n * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24.\n */\n function format( n, i, rm, caller ) {\n var c0, e, ne, len, str;\n\n rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode )\n ? rm | 0 : ROUNDING_MODE;\n\n if ( !n.c ) return n.toString();\n c0 = n.c[0];\n ne = n.e;\n\n if ( i == null ) {\n str = coeffToString( n.c );\n str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG\n ? toExponential( str, ne )\n : toFixedPoint( str, ne );\n } else {\n n = round( new BigNumber(n), i, rm );\n\n // n.e may have changed if the value was rounded up.\n e = n.e;\n\n str = coeffToString( n.c );\n len = str.length;\n\n // toPrecision returns exponential notation if the number of significant digits\n // specified is less than the number of digits necessary to represent the integer\n // part of the value in fixed-point notation.\n\n // Exponential notation.\n if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) {\n\n // Append zeros?\n for ( ; len < i; str += '0', len++ );\n str = toExponential( str, e );\n\n // Fixed-point notation.\n } else {\n i -= ne;\n str = toFixedPoint( str, e );\n\n // Append zeros?\n if ( e + 1 > len ) {\n if ( --i > 0 ) for ( str += '.'; i--; str += '0' );\n } else {\n i += e - len;\n if ( i > 0 ) {\n if ( e + 1 == len ) str += '.';\n for ( ; i--; str += '0' );\n }\n }\n }\n }\n\n return n.s < 0 && c0 ? '-' + str : str;\n }\n\n\n // Handle BigNumber.max and BigNumber.min.\n function maxOrMin( args, method ) {\n var m, n,\n i = 0;\n\n if ( isArray( args[0] ) ) args = args[0];\n m = new BigNumber( args[0] );\n\n for ( ; ++i < args.length; ) {\n n = new BigNumber( args[i] );\n\n // If any number is NaN, return NaN.\n if ( !n.s ) {\n m = n;\n break;\n } else if ( method.call( m, n ) ) {\n m = n;\n }\n }\n\n return m;\n }\n\n\n /*\n * Return true if n is an integer in range, otherwise throw.\n * Use for argument validation when ERRORS is true.\n */\n function intValidatorWithErrors( n, min, max, caller, name ) {\n if ( n < min || n > max || n != truncate(n) ) {\n raise( caller, ( name || 'decimal places' ) +\n ( n < min || n > max ? ' out of range' : ' not an integer' ), n );\n }\n\n return true;\n }\n\n\n /*\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\n * Called by minus, plus and times.\n */\n function normalise( n, c, e ) {\n var i = 1,\n j = c.length;\n\n // Remove trailing zeros.\n for ( ; !c[--j]; c.pop() );\n\n // Calculate the base 10 exponent. First get the number of digits of c[0].\n for ( j = c[0]; j >= 10; j /= 10, i++ );\n\n // Overflow?\n if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) {\n\n // Infinity.\n n.c = n.e = null;\n\n // Underflow?\n } else if ( e < MIN_EXP ) {\n\n // Zero.\n n.c = [ n.e = 0 ];\n } else {\n n.e = e;\n n.c = c;\n }\n\n return n;\n }\n\n\n // Handle values that fail the validity test in BigNumber.\n parseNumeric = (function () {\n var basePrefix = /^(-?)0([xbo])/i,\n dotAfter = /^([^.]+)\\.$/,\n dotBefore = /^\\.([^.]+)$/,\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\n whitespaceOrPlus = /^\\s*\\+|^\\s+|\\s+$/g;\n\n return function ( x, str, num, b ) {\n var base,\n s = num ? str : str.replace( whitespaceOrPlus, '' );\n\n // No exception on ±Infinity or NaN.\n if ( isInfinityOrNaN.test(s) ) {\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\n } else {\n if ( !num ) {\n\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\n s = s.replace( basePrefix, function ( m, p1, p2 ) {\n base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\n return !b || b == base ? p1 : m;\n });\n\n if (b) {\n base = b;\n\n // E.g. '1.' to '1', '.1' to '0.1'\n s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' );\n }\n\n if ( str != s ) return new BigNumber( s, base );\n }\n\n // 'new BigNumber() not a number: {n}'\n // 'new BigNumber() not a base {b} number: {n}'\n if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str );\n x.s = null;\n }\n\n x.c = x.e = null;\n id = 0;\n }\n })();\n\n\n // Throw a BigNumber Error.\n function raise( caller, msg, val ) {\n var error = new Error( [\n 'new BigNumber', // 0\n 'cmp', // 1\n 'config', // 2\n 'div', // 3\n 'divToInt', // 4\n 'eq', // 5\n 'gt', // 6\n 'gte', // 7\n 'lt', // 8\n 'lte', // 9\n 'minus', // 10\n 'mod', // 11\n 'plus', // 12\n 'precision', // 13\n 'random', // 14\n 'round', // 15\n 'shift', // 16\n 'times', // 17\n 'toDigits', // 18\n 'toExponential', // 19\n 'toFixed', // 20\n 'toFormat', // 21\n 'toFraction', // 22\n 'pow', // 23\n 'toPrecision', // 24\n 'toString', // 25\n 'BigNumber' // 26\n ][caller] + '() ' + msg + ': ' + val );\n\n error.name = 'BigNumber Error';\n id = 0;\n throw error;\n }\n\n\n /*\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\n * If r is truthy, it is known that there are more digits after the rounding digit.\n */\n function round( x, sd, rm, r ) {\n var d, i, j, k, n, ni, rd,\n xc = x.c,\n pows10 = POWS_TEN;\n\n // if x is not Infinity or NaN...\n if (xc) {\n\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\n // ni is the index of n within x.c.\n // d is the number of digits of n.\n // i is the index of rd within n including leading zeros.\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\n out: {\n\n // Get the number of digits of the first element of xc.\n for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ );\n i = sd - d;\n\n // If the rounding digit is in the first element of xc...\n if ( i < 0 ) {\n i += LOG_BASE;\n j = sd;\n n = xc[ ni = 0 ];\n\n // Get the rounding digit at index j of n.\n rd = n / pows10[ d - j - 1 ] % 10 | 0;\n } else {\n ni = mathceil( ( i + 1 ) / LOG_BASE );\n\n if ( ni >= xc.length ) {\n\n if (r) {\n\n // Needed by sqrt.\n for ( ; xc.length <= ni; xc.push(0) );\n n = rd = 0;\n d = 1;\n i %= LOG_BASE;\n j = i - LOG_BASE + 1;\n } else {\n break out;\n }\n } else {\n n = k = xc[ni];\n\n // Get the number of digits of n.\n for ( d = 1; k >= 10; k /= 10, d++ );\n\n // Get the index of rd within n.\n i %= LOG_BASE;\n\n // Get the index of rd within n, adjusted for leading zeros.\n // The number of leading zeros of n is given by LOG_BASE - d.\n j = i - LOG_BASE + d;\n\n // Get the rounding digit at index j of n.\n rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0;\n }\n }\n\n r = r || sd < 0 ||\n\n // Are there any non-zero digits after the rounding digit?\n // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\n xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] );\n\n r = rm < 4\n ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )\n : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 &&\n\n // Check whether the digit to the left of the rounding digit is odd.\n ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 ||\n rm == ( x.s < 0 ? 8 : 7 ) );\n\n if ( sd < 1 || !xc[0] ) {\n xc.length = 0;\n\n if (r) {\n\n // Convert sd to decimal places.\n sd -= x.e + 1;\n\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\n xc[0] = pows10[ sd % LOG_BASE ];\n x.e = -sd || 0;\n } else {\n\n // Zero.\n xc[0] = x.e = 0;\n }\n\n return x;\n }\n\n // Remove excess digits.\n if ( i == 0 ) {\n xc.length = ni;\n k = 1;\n ni--;\n } else {\n xc.length = ni + 1;\n k = pows10[ LOG_BASE - i ];\n\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\n // j > 0 means i > number of leading zeros of n.\n xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0;\n }\n\n // Round up?\n if (r) {\n\n for ( ; ; ) {\n\n // If the digit to be rounded up is in the first element of xc...\n if ( ni == 0 ) {\n\n // i will be the length of xc[0] before k is added.\n for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ );\n j = xc[0] += k;\n for ( k = 1; j >= 10; j /= 10, k++ );\n\n // if i != k the length has increased.\n if ( i != k ) {\n x.e++;\n if ( xc[0] == BASE ) xc[0] = 1;\n }\n\n break;\n } else {\n xc[ni] += k;\n if ( xc[ni] != BASE ) break;\n xc[ni--] = 0;\n k = 1;\n }\n }\n }\n\n // Remove trailing zeros.\n for ( i = xc.length; xc[--i] === 0; xc.pop() );\n }\n\n // Overflow? Infinity.\n if ( x.e > MAX_EXP ) {\n x.c = x.e = null;\n\n // Underflow? Zero.\n } else if ( x.e < MIN_EXP ) {\n x.c = [ x.e = 0 ];\n }\n }\n\n return x;\n }\n\n\n // PROTOTYPE/INSTANCE METHODS\n\n\n /*\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\n */\n P.absoluteValue = P.abs = function () {\n var x = new BigNumber(this);\n if ( x.s < 0 ) x.s = 1;\n return x;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole\n * number in the direction of Infinity.\n */\n P.ceil = function () {\n return round( new BigNumber(this), this.e + 1, 2 );\n };\n\n\n /*\n * Return\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\n * 0 if they have the same value,\n * or null if the value of either is NaN.\n */\n P.comparedTo = P.cmp = function ( y, b ) {\n id = 1;\n return compare( this, new BigNumber( y, b ) );\n };\n\n\n /*\n * Return the number of decimal places of the value of this BigNumber, or null if the value\n * of this BigNumber is ±Infinity or NaN.\n */\n P.decimalPlaces = P.dp = function () {\n var n, v,\n c = this.c;\n\n if ( !c ) return null;\n n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE;\n\n // Subtract the number of trailing zeros of the last number.\n if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- );\n if ( n < 0 ) n = 0;\n\n return n;\n };\n\n\n /*\n * n / 0 = I\n * n / N = N\n * n / I = 0\n * 0 / n = 0\n * 0 / 0 = N\n * 0 / N = N\n * 0 / I = 0\n * N / n = N\n * N / 0 = N\n * N / N = N\n * N / I = N\n * I / n = I\n * I / 0 = I\n * I / N = N\n * I / I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\n */\n P.dividedBy = P.div = function ( y, b ) {\n id = 3;\n return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE );\n };\n\n\n /*\n * Return a new BigNumber whose value is the integer part of dividing the value of this\n * BigNumber by the value of BigNumber(y, b).\n */\n P.dividedToIntegerBy = P.divToInt = function ( y, b ) {\n id = 4;\n return div( this, new BigNumber( y, b ), 0, 1 );\n };\n\n\n /*\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.equals = P.eq = function ( y, b ) {\n id = 5;\n return compare( this, new BigNumber( y, b ) ) === 0;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole\n * number in the direction of -Infinity.\n */\n P.floor = function () {\n return round( new BigNumber(this), this.e + 1, 3 );\n };\n\n\n /*\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.greaterThan = P.gt = function ( y, b ) {\n id = 6;\n return compare( this, new BigNumber( y, b ) ) > 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is greater than or equal to the value of\n * BigNumber(y, b), otherwise returns false.\n */\n P.greaterThanOrEqualTo = P.gte = function ( y, b ) {\n id = 7;\n return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0;\n\n };\n\n\n /*\n * Return true if the value of this BigNumber is a finite number, otherwise returns false.\n */\n P.isFinite = function () {\n return !!this.c;\n };\n\n\n /*\n * Return true if the value of this BigNumber is an integer, otherwise return false.\n */\n P.isInteger = P.isInt = function () {\n return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2;\n };\n\n\n /*\n * Return true if the value of this BigNumber is NaN, otherwise returns false.\n */\n P.isNaN = function () {\n return !this.s;\n };\n\n\n /*\n * Return true if the value of this BigNumber is negative, otherwise returns false.\n */\n P.isNegative = P.isNeg = function () {\n return this.s < 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is 0 or -0, otherwise returns false.\n */\n P.isZero = function () {\n return !!this.c && this.c[0] == 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\n * otherwise returns false.\n */\n P.lessThan = P.lt = function ( y, b ) {\n id = 8;\n return compare( this, new BigNumber( y, b ) ) < 0;\n };\n\n\n /*\n * Return true if the value of this BigNumber is less than or equal to the value of\n * BigNumber(y, b), otherwise returns false.\n */\n P.lessThanOrEqualTo = P.lte = function ( y, b ) {\n id = 9;\n return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0;\n };\n\n\n /*\n * n - 0 = n\n * n - N = N\n * n - I = -I\n * 0 - n = -n\n * 0 - 0 = 0\n * 0 - N = N\n * 0 - I = -I\n * N - n = N\n * N - 0 = N\n * N - N = N\n * N - I = N\n * I - n = I\n * I - 0 = I\n * I - N = N\n * I - I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\n * BigNumber(y, b).\n */\n P.minus = P.sub = function ( y, b ) {\n var i, j, t, xLTy,\n x = this,\n a = x.s;\n\n id = 10;\n y = new BigNumber( y, b );\n b = y.s;\n\n // Either NaN?\n if ( !a || !b ) return new BigNumber(NaN);\n\n // Signs differ?\n if ( a != b ) {\n y.s = -b;\n return x.plus(y);\n }\n\n var xe = x.e / LOG_BASE,\n ye = y.e / LOG_BASE,\n xc = x.c,\n yc = y.c;\n\n if ( !xe || !ye ) {\n\n // Either Infinity?\n if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN );\n\n // Either zero?\n if ( !xc[0] || !yc[0] ) {\n\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\n return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x :\n\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\n ROUNDING_MODE == 3 ? -0 : 0 );\n }\n }\n\n xe = bitFloor(xe);\n ye = bitFloor(ye);\n xc = xc.slice();\n\n // Determine which is the bigger number.\n if ( a = xe - ye ) {\n\n if ( xLTy = a < 0 ) {\n a = -a;\n t = xc;\n } else {\n ye = xe;\n t = yc;\n }\n\n t.reverse();\n\n // Prepend zeros to equalise exponents.\n for ( b = a; b--; t.push(0) );\n t.reverse();\n } else {\n\n // Exponents equal. Check digit by digit.\n j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b;\n\n for ( a = b = 0; b < j; b++ ) {\n\n if ( xc[b] != yc[b] ) {\n xLTy = xc[b] < yc[b];\n break;\n }\n }\n }\n\n // x < y? Point xc to the array of the bigger number.\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\n\n b = ( j = yc.length ) - ( i = xc.length );\n\n // Append zeros to xc if shorter.\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\n if ( b > 0 ) for ( ; b--; xc[i++] = 0 );\n b = BASE - 1;\n\n // Subtract yc from xc.\n for ( ; j > a; ) {\n\n if ( xc[--j] < yc[j] ) {\n for ( i = j; i && !xc[--i]; xc[i] = b );\n --xc[i];\n xc[j] += BASE;\n }\n\n xc[j] -= yc[j];\n }\n\n // Remove leading zeros and adjust exponent accordingly.\n for ( ; xc[0] == 0; xc.shift(), --ye );\n\n // Zero?\n if ( !xc[0] ) {\n\n // Following IEEE 754 (2008) 6.3,\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\n y.c = [ y.e = 0 ];\n return y;\n }\n\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\n // for finite x and y.\n return normalise( y, xc, ye );\n };\n\n\n /*\n * n % 0 = N\n * n % N = N\n * n % I = n\n * 0 % n = 0\n * -0 % n = -0\n * 0 % 0 = N\n * 0 % N = N\n * 0 % I = 0\n * N % n = N\n * N % 0 = N\n * N % N = N\n * N % I = N\n * I % n = N\n * I % 0 = N\n * I % N = N\n * I % I = N\n *\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\n */\n P.modulo = P.mod = function ( y, b ) {\n var q, s,\n x = this;\n\n id = 11;\n y = new BigNumber( y, b );\n\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\n if ( !x.c || !y.s || y.c && !y.c[0] ) {\n return new BigNumber(NaN);\n\n // Return x if y is Infinity or x is zero.\n } else if ( !y.c || x.c && !x.c[0] ) {\n return new BigNumber(x);\n }\n\n if ( MODULO_MODE == 9 ) {\n\n // Euclidian division: q = sign(y) * floor(x / abs(y))\n // r = x - qy where 0 <= r < abs(y)\n s = y.s;\n y.s = 1;\n q = div( x, y, 0, 3 );\n y.s = s;\n q.s *= s;\n } else {\n q = div( x, y, 0, MODULO_MODE );\n }\n\n return x.minus( q.times(y) );\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber negated,\n * i.e. multiplied by -1.\n */\n P.negated = P.neg = function () {\n var x = new BigNumber(this);\n x.s = -x.s || null;\n return x;\n };\n\n\n /*\n * n + 0 = n\n * n + N = N\n * n + I = I\n * 0 + n = n\n * 0 + 0 = 0\n * 0 + N = N\n * 0 + I = I\n * N + n = N\n * N + 0 = N\n * N + N = N\n * N + I = N\n * I + n = I\n * I + 0 = I\n * I + N = N\n * I + I = I\n *\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\n * BigNumber(y, b).\n */\n P.plus = P.add = function ( y, b ) {\n var t,\n x = this,\n a = x.s;\n\n id = 12;\n y = new BigNumber( y, b );\n b = y.s;\n\n // Either NaN?\n if ( !a || !b ) return new BigNumber(NaN);\n\n // Signs differ?\n if ( a != b ) {\n y.s = -b;\n return x.minus(y);\n }\n\n var xe = x.e / LOG_BASE,\n ye = y.e / LOG_BASE,\n xc = x.c,\n yc = y.c;\n\n if ( !xe || !ye ) {\n\n // Return ±Infinity if either ±Infinity.\n if ( !xc || !yc ) return new BigNumber( a / 0 );\n\n // Either zero?\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\n if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 );\n }\n\n xe = bitFloor(xe);\n ye = bitFloor(ye);\n xc = xc.slice();\n\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\n if ( a = xe - ye ) {\n if ( a > 0 ) {\n ye = xe;\n t = yc;\n } else {\n a = -a;\n t = xc;\n }\n\n t.reverse();\n for ( ; a--; t.push(0) );\n t.reverse();\n }\n\n a = xc.length;\n b = yc.length;\n\n // Point xc to the longer array, and b to the shorter length.\n if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a;\n\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\n for ( a = 0; b; ) {\n a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0;\n xc[b] %= BASE;\n }\n\n if (a) {\n xc.unshift(a);\n ++ye;\n }\n\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\n // ye = MAX_EXP + 1 possible\n return normalise( y, xc, ye );\n };\n\n\n /*\n * Return the number of significant digits of the value of this BigNumber.\n *\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\n */\n P.precision = P.sd = function (z) {\n var n, v,\n x = this,\n c = x.c;\n\n // 'precision() argument not a boolean or binary digit: {z}'\n if ( z != null && z !== !!z && z !== 1 && z !== 0 ) {\n if (ERRORS) raise( 13, 'argument' + notBool, z );\n if ( z != !!z ) z = null;\n }\n\n if ( !c ) return null;\n v = c.length - 1;\n n = v * LOG_BASE + 1;\n\n if ( v = c[v] ) {\n\n // Subtract the number of trailing zeros of the last element.\n for ( ; v % 10 == 0; v /= 10, n-- );\n\n // Add the number of digits of the first element.\n for ( v = c[0]; v >= 10; v /= 10, n++ );\n }\n\n if ( z && x.e + 1 > n ) n = x.e + 1;\n\n return n;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of\n * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if\n * omitted.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'round() decimal places out of range: {dp}'\n * 'round() decimal places not an integer: {dp}'\n * 'round() rounding mode not an integer: {rm}'\n * 'round() rounding mode out of range: {rm}'\n */\n P.round = function ( dp, rm ) {\n var n = new BigNumber(this);\n\n if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) {\n round( n, ~~dp + this.e + 1, rm == null ||\n !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 );\n }\n\n return n;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\n *\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\n *\n * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity\n * otherwise.\n *\n * 'shift() argument not an integer: {k}'\n * 'shift() argument out of range: {k}'\n */\n P.shift = function (k) {\n var n = this;\n return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' )\n\n // k < 1e+21, or truncate(k) will produce exponential notation.\n ? n.times( '1e' + truncate(k) )\n : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER )\n ? n.s * ( k < 0 ? 0 : 1 / 0 )\n : n );\n };\n\n\n /*\n * sqrt(-n) = N\n * sqrt( N) = N\n * sqrt(-I) = N\n * sqrt( I) = I\n * sqrt( 0) = 0\n * sqrt(-0) = -0\n *\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\n */\n P.squareRoot = P.sqrt = function () {\n var m, n, r, rep, t,\n x = this,\n c = x.c,\n s = x.s,\n e = x.e,\n dp = DECIMAL_PLACES + 4,\n half = new BigNumber('0.5');\n\n // Negative/NaN/Infinity/zero?\n if ( s !== 1 || !c || !c[0] ) {\n return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 );\n }\n\n // Initial estimate.\n s = Math.sqrt( +x );\n\n // Math.sqrt underflow/overflow?\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\n if ( s == 0 || s == 1 / 0 ) {\n n = coeffToString(c);\n if ( ( n.length + e ) % 2 == 0 ) n += '0';\n s = Math.sqrt(n);\n e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 );\n\n if ( s == 1 / 0 ) {\n n = '1e' + e;\n } else {\n n = s.toExponential();\n n = n.slice( 0, n.indexOf('e') + 1 ) + e;\n }\n\n r = new BigNumber(n);\n } else {\n r = new BigNumber( s + '' );\n }\n\n // Check for zero.\n // r could be zero if MIN_EXP is changed after the this value was created.\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\n // coeffToString to throw.\n if ( r.c[0] ) {\n e = r.e;\n s = e + dp;\n if ( s < 3 ) s = 0;\n\n // Newton-Raphson iteration.\n for ( ; ; ) {\n t = r;\n r = half.times( t.plus( div( x, t, dp, 1 ) ) );\n\n if ( coeffToString( t.c ).slice( 0, s ) === ( n =\n coeffToString( r.c ) ).slice( 0, s ) ) {\n\n // The exponent of r may here be one less than the final result exponent,\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\n // are indexed correctly.\n if ( r.e < e ) --s;\n n = n.slice( s - 3, s + 1 );\n\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\n // iteration.\n if ( n == '9999' || !rep && n == '4999' ) {\n\n // On the first iteration only, check to see if rounding up gives the\n // exact result as the nines may infinitely repeat.\n if ( !rep ) {\n round( t, t.e + DECIMAL_PLACES + 2, 0 );\n\n if ( t.times(t).eq(x) ) {\n r = t;\n break;\n }\n }\n\n dp += 4;\n s += 4;\n rep = 1;\n } else {\n\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\n // result. If not, then there are further digits and m will be truthy.\n if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) {\n\n // Truncate to the first rounding digit.\n round( r, r.e + DECIMAL_PLACES + 2, 1 );\n m = !r.times(r).eq(x);\n }\n\n break;\n }\n }\n }\n }\n\n return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m );\n };\n\n\n /*\n * n * 0 = 0\n * n * N = N\n * n * I = I\n * 0 * n = 0\n * 0 * 0 = 0\n * 0 * N = N\n * 0 * I = N\n * N * n = N\n * N * 0 = N\n * N * N = N\n * N * I = N\n * I * n = I\n * I * 0 = N\n * I * N = N\n * I * I = I\n *\n * Return a new BigNumber whose value is the value of this BigNumber times the value of\n * BigNumber(y, b).\n */\n P.times = P.mul = function ( y, b ) {\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\n base, sqrtBase,\n x = this,\n xc = x.c,\n yc = ( id = 17, y = new BigNumber( y, b ) ).c;\n\n // Either NaN, ±Infinity or ±0?\n if ( !xc || !yc || !xc[0] || !yc[0] ) {\n\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\n if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) {\n y.c = y.e = y.s = null;\n } else {\n y.s *= x.s;\n\n // Return ±Infinity if either is ±Infinity.\n if ( !xc || !yc ) {\n y.c = y.e = null;\n\n // Return ±0 if either is ±0.\n } else {\n y.c = [0];\n y.e = 0;\n }\n }\n\n return y;\n }\n\n e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE );\n y.s *= x.s;\n xcL = xc.length;\n ycL = yc.length;\n\n // Ensure xc points to longer array and xcL to its length.\n if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\n\n // Initialise the result array with zeros.\n for ( i = xcL + ycL, zc = []; i--; zc.push(0) );\n\n base = BASE;\n sqrtBase = SQRT_BASE;\n\n for ( i = ycL; --i >= 0; ) {\n c = 0;\n ylo = yc[i] % sqrtBase;\n yhi = yc[i] / sqrtBase | 0;\n\n for ( k = xcL, j = i + k; j > i; ) {\n xlo = xc[--k] % sqrtBase;\n xhi = xc[k] / sqrtBase | 0;\n m = yhi * xlo + xhi * ylo;\n xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c;\n c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi;\n zc[j--] = xlo % base;\n }\n\n zc[j] = c;\n }\n\n if (c) {\n ++e;\n } else {\n zc.shift();\n }\n\n return normalise( y, zc, e );\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of\n * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted.\n *\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toDigits() precision out of range: {sd}'\n * 'toDigits() precision not an integer: {sd}'\n * 'toDigits() rounding mode not an integer: {rm}'\n * 'toDigits() rounding mode out of range: {rm}'\n */\n P.toDigits = function ( sd, rm ) {\n var n = new BigNumber(this);\n sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0;\n rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0;\n return sd ? round( n, sd, rm ) : n;\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in exponential notation and\n * rounded using ROUNDING_MODE to dp fixed decimal places.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toExponential() decimal places not an integer: {dp}'\n * 'toExponential() decimal places out of range: {dp}'\n * 'toExponential() rounding mode not an integer: {rm}'\n * 'toExponential() rounding mode out of range: {rm}'\n */\n P.toExponential = function ( dp, rm ) {\n return format( this,\n dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\n *\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\n * but e.g. (-0.00001).toFixed(0) is '-0'.\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toFixed() decimal places not an integer: {dp}'\n * 'toFixed() decimal places out of range: {dp}'\n * 'toFixed() rounding mode not an integer: {rm}'\n * 'toFixed() rounding mode out of range: {rm}'\n */\n P.toFixed = function ( dp, rm ) {\n return format( this, dp != null && isValidInt( dp, 0, MAX, 20 )\n ? ~~dp + this.e + 1 : null, rm, 20 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\n * of the FORMAT object (see BigNumber.config).\n *\n * FORMAT = {\n * decimalSeparator : '.',\n * groupSeparator : ',',\n * groupSize : 3,\n * secondaryGroupSize : 0,\n * fractionGroupSeparator : '\\xA0', // non-breaking space\n * fractionGroupSize : 0\n * };\n *\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toFormat() decimal places not an integer: {dp}'\n * 'toFormat() decimal places out of range: {dp}'\n * 'toFormat() rounding mode not an integer: {rm}'\n * 'toFormat() rounding mode out of range: {rm}'\n */\n P.toFormat = function ( dp, rm ) {\n var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 )\n ? ~~dp + this.e + 1 : null, rm, 21 );\n\n if ( this.c ) {\n var i,\n arr = str.split('.'),\n g1 = +FORMAT.groupSize,\n g2 = +FORMAT.secondaryGroupSize,\n groupSeparator = FORMAT.groupSeparator,\n intPart = arr[0],\n fractionPart = arr[1],\n isNeg = this.s < 0,\n intDigits = isNeg ? intPart.slice(1) : intPart,\n len = intDigits.length;\n\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\n\n if ( g1 > 0 && len > 0 ) {\n i = len % g1 || g1;\n intPart = intDigits.substr( 0, i );\n\n for ( ; i < len; i += g1 ) {\n intPart += groupSeparator + intDigits.substr( i, g1 );\n }\n\n if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i);\n if (isNeg) intPart = '-' + intPart;\n }\n\n str = fractionPart\n ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize )\n ? fractionPart.replace( new RegExp( '\\\\d{' + g2 + '}\\\\B', 'g' ),\n '$&' + FORMAT.fractionGroupSeparator )\n : fractionPart )\n : intPart;\n }\n\n return str;\n };\n\n\n /*\n * Return a string array representing the value of this BigNumber as a simple fraction with\n * an integer numerator and an integer denominator. The denominator will be a positive\n * non-zero value less than or equal to the specified maximum denominator. If a maximum\n * denominator is not specified, the denominator will be the lowest value necessary to\n * represent the number exactly.\n *\n * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator.\n *\n * 'toFraction() max denominator not an integer: {md}'\n * 'toFraction() max denominator out of range: {md}'\n */\n P.toFraction = function (md) {\n var arr, d0, d2, e, exp, n, n0, q, s,\n k = ERRORS,\n x = this,\n xc = x.c,\n d = new BigNumber(ONE),\n n1 = d0 = new BigNumber(ONE),\n d1 = n0 = new BigNumber(ONE);\n\n if ( md != null ) {\n ERRORS = false;\n n = new BigNumber(md);\n ERRORS = k;\n\n if ( !( k = n.isInt() ) || n.lt(ONE) ) {\n\n if (ERRORS) {\n raise( 22,\n 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md );\n }\n\n // ERRORS is false:\n // If md is a finite non-integer >= 1, round it to an integer and use it.\n md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null;\n }\n }\n\n if ( !xc ) return x.toString();\n s = coeffToString(xc);\n\n // Determine initial denominator.\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\n e = d.e = s.length - x.e - 1;\n d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ];\n md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n;\n\n exp = MAX_EXP;\n MAX_EXP = 1 / 0;\n n = new BigNumber(s);\n\n // n0 = d1 = 0\n n0.c[0] = 0;\n\n for ( ; ; ) {\n q = div( n, d, 0, 1 );\n d2 = d0.plus( q.times(d1) );\n if ( d2.cmp(md) == 1 ) break;\n d0 = d1;\n d1 = d2;\n n1 = n0.plus( q.times( d2 = n1 ) );\n n0 = d2;\n d = n.minus( q.times( d2 = d ) );\n n = d2;\n }\n\n d2 = div( md.minus(d0), d1, 0, 1 );\n n0 = n0.plus( d2.times(n1) );\n d0 = d0.plus( d2.times(d1) );\n n0.s = n1.s = x.s;\n e *= 2;\n\n // Determine which fraction is closer to x, n0/d0 or n1/d1\n arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp(\n div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1\n ? [ n1.toString(), d1.toString() ]\n : [ n0.toString(), d0.toString() ];\n\n MAX_EXP = exp;\n return arr;\n };\n\n\n /*\n * Return the value of this BigNumber converted to a number primitive.\n */\n P.toNumber = function () {\n var x = this;\n\n // Ensure zero has correct sign.\n return +x || ( x.s ? x.s * 0 : NaN );\n };\n\n\n /*\n * Return a BigNumber whose value is the value of this BigNumber raised to the power n.\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\n * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE.\n *\n * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive.\n * (Performs 54 loop iterations for n of 9007199254740992.)\n *\n * 'pow() exponent not an integer: {n}'\n * 'pow() exponent out of range: {n}'\n */\n P.toPower = P.pow = function (n) {\n var k, y,\n i = mathfloor( n < 0 ? -n : +n ),\n x = this;\n\n // Pass ±Infinity to Math.pow if exponent is out of range.\n if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) &&\n ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) ||\n parseFloat(n) != n && !( n = NaN ) ) ) {\n return new BigNumber( Math.pow( +x, n ) );\n }\n\n // Truncating each coefficient array to a length of k after each multiplication equates\n // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a\n // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.)\n k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0;\n y = new BigNumber(ONE);\n\n for ( ; ; ) {\n\n if ( i % 2 ) {\n y = y.times(x);\n if ( !y.c ) break;\n if ( k && y.c.length > k ) y.c.length = k;\n }\n\n i = mathfloor( i / 2 );\n if ( !i ) break;\n\n x = x.times(x);\n if ( k && x.c && x.c.length > k ) x.c.length = k;\n }\n\n if ( n < 0 ) y = ONE.div(y);\n return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y;\n };\n\n\n /*\n * Return a string representing the value of this BigNumber rounded to sd significant digits\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\n * necessary to represent the integer part of the value in fixed-point notation, then use\n * exponential notation.\n *\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n *\n * 'toPrecision() precision not an integer: {sd}'\n * 'toPrecision() precision out of range: {sd}'\n * 'toPrecision() rounding mode not an integer: {rm}'\n * 'toPrecision() rounding mode out of range: {rm}'\n */\n P.toPrecision = function ( sd, rm ) {\n return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' )\n ? sd | 0 : null, rm, 24 );\n };\n\n\n /*\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\n * TO_EXP_NEG, return exponential notation.\n *\n * [b] {number} Integer, 2 to 64 inclusive.\n *\n * 'toString() base not an integer: {b}'\n * 'toString() base out of range: {b}'\n */\n P.toString = function (b) {\n var str,\n n = this,\n s = n.s,\n e = n.e;\n\n // Infinity or NaN?\n if ( e === null ) {\n\n if (s) {\n str = 'Infinity';\n if ( s < 0 ) str = '-' + str;\n } else {\n str = 'NaN';\n }\n } else {\n str = coeffToString( n.c );\n\n if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) {\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\n ? toExponential( str, e )\n : toFixedPoint( str, e );\n } else {\n str = convertBase( toFixedPoint( str, e ), b | 0, 10, s );\n }\n\n if ( s < 0 && n.c[0] ) str = '-' + str;\n }\n\n return str;\n };\n\n\n /*\n * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole\n * number.\n */\n P.truncated = P.trunc = function () {\n return round( new BigNumber(this), this.e + 1, 1 );\n };\n\n\n\n /*\n * Return as toString, but do not accept a base argument.\n */\n P.valueOf = P.toJSON = function () {\n return this.toString();\n };\n\n\n // Aliases for BigDecimal methods.\n //P.add = P.plus; // P.add included above\n //P.subtract = P.minus; // P.sub included above\n //P.multiply = P.times; // P.mul included above\n //P.divide = P.div;\n //P.remainder = P.mod;\n //P.compareTo = P.cmp;\n //P.negate = P.neg;\n\n\n if ( configObj != null ) BigNumber.config(configObj);\n\n return BigNumber;\n }\n\n\n // PRIVATE HELPER FUNCTIONS\n\n\n function bitFloor(n) {\n var i = n | 0;\n return n > 0 || n === i ? i : i - 1;\n }\n\n\n // Return a coefficient array as a string of base 10 digits.\n function coeffToString(a) {\n var s, z,\n i = 1,\n j = a.length,\n r = a[0] + '';\n\n for ( ; i < j; ) {\n s = a[i++] + '';\n z = LOG_BASE - s.length;\n for ( ; z--; s = '0' + s );\n r += s;\n }\n\n // Determine trailing zeros.\n for ( j = r.length; r.charCodeAt(--j) === 48; );\n return r.slice( 0, j + 1 || 1 );\n }\n\n\n // Compare the value of BigNumbers x and y.\n function compare( x, y ) {\n var a, b,\n xc = x.c,\n yc = y.c,\n i = x.s,\n j = y.s,\n k = x.e,\n l = y.e;\n\n // Either NaN?\n if ( !i || !j ) return null;\n\n a = xc && !xc[0];\n b = yc && !yc[0];\n\n // Either zero?\n if ( a || b ) return a ? b ? 0 : -j : i;\n\n // Signs differ?\n if ( i != j ) return i;\n\n a = i < 0;\n b = k == l;\n\n // Either Infinity?\n if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1;\n\n // Compare exponents.\n if ( !b ) return k > l ^ a ? 1 : -1;\n\n j = ( k = xc.length ) < ( l = yc.length ) ? k : l;\n\n // Compare digit by digit.\n for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1;\n\n // Compare lengths.\n return k == l ? 0 : k > l ^ a ? 1 : -1;\n }\n\n\n /*\n * Return true if n is a valid number in range, otherwise false.\n * Use for argument validation when ERRORS is false.\n * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10.\n */\n function intValidatorNoErrors( n, min, max ) {\n return ( n = truncate(n) ) >= min && n <= max;\n }\n\n\n function isArray(obj) {\n return Object.prototype.toString.call(obj) == '[object Array]';\n }\n\n\n /*\n * Convert string of baseIn to an array of numbers of baseOut.\n * Eg. convertBase('255', 10, 16) returns [15, 15].\n * Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\n */\n function toBaseOut( str, baseIn, baseOut ) {\n var j,\n arr = [0],\n arrL,\n i = 0,\n len = str.length;\n\n for ( ; i < len; ) {\n for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn );\n arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) );\n\n for ( ; j < arr.length; j++ ) {\n\n if ( arr[j] > baseOut - 1 ) {\n if ( arr[j + 1] == null ) arr[j + 1] = 0;\n arr[j + 1] += arr[j] / baseOut | 0;\n arr[j] %= baseOut;\n }\n }\n }\n\n return arr.reverse();\n }\n\n\n function toExponential( str, e ) {\n return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) +\n ( e < 0 ? 'e' : 'e+' ) + e;\n }\n\n\n function toFixedPoint( str, e ) {\n var len, z;\n\n // Negative exponent?\n if ( e < 0 ) {\n\n // Prepend zeros.\n for ( z = '0.'; ++e; z += '0' );\n str = z + str;\n\n // Positive exponent\n } else {\n len = str.length;\n\n // Append zeros.\n if ( ++e > len ) {\n for ( z = '0', e -= len; --e; z += '0' );\n str += z;\n } else if ( e < len ) {\n str = str.slice( 0, e ) + '.' + str.slice(e);\n }\n }\n\n return str;\n }\n\n\n function truncate(n) {\n n = parseFloat(n);\n return n < 0 ? mathceil(n) : mathfloor(n);\n }\n\n\n // EXPORT\n\n\n BigNumber = another();\n\n // AMD.\n if ( typeof define == 'function' && define.amd ) {\n define( function () { return BigNumber; } );\n\n // Node and other environments that support module.exports.\n } else if ( typeof module != 'undefined' && module.exports ) {\n module.exports = BigNumber;\n if ( !crypto ) try { crypto = require('crypto'); } catch (e) {}\n\n // Browser.\n } else {\n global.BigNumber = BigNumber;\n }\n})(this);\n", - "var Web3 = require('./lib/web3');\n\n// dont override global variable\nif (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {\n window.Web3 = Web3;\n}\n\nmodule.exports = Web3;\n" - ] -} \ No newline at end of file diff --git a/node_modules/web3/dist/web3.min.js b/node_modules/web3/dist/web3.min.js deleted file mode 100644 index 459d47e..0000000 --- a/node_modules/web3/dist/web3.min.js +++ /dev/null @@ -1,5 +0,0 @@ -require=function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[a]={exports:{}};e[a][0].call(f.exports,function(t){var n=e[a][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;aa;a++)i.push(n.encode(t[a],o));return i}():this._inputFormatter(t,e).encode()},i.prototype.decode=function(t,e,n){var r=this;if(this.isDynamicArray(n))return function(){for(var o=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*o,64)),a=o+32,s=r.nestedName(n),c=r.staticPartLength(s),u=32*Math.floor((c+31)/32),f=[],p=0;i*u>p;p+=u)f.push(r.decode(t,a+p,s));return f}();if(this.isStaticArray(n))return function(){for(var o=r.staticArrayLength(n),i=e,a=r.nestedName(n),s=r.staticPartLength(a),c=32*Math.floor((s+31)/32),u=[],f=0;o*c>f;f+=c)u.push(r.decode(t,i+f,a));return u}();if(this.isDynamicType(n))return function(){var n=parseInt("0x"+t.substr(2*e,64)),i=parseInt("0x"+t.substr(2*n,64)),a=Math.floor((i+31)/32);return r._outputFormatter(new o(t.substr(2*n,64*(1+a)),0))}();var i=this.staticPartLength(n);return this._outputFormatter(new o(t.substr(2*e,2*i)))},e.exports=i},{"./formatters":9,"./param":11}],15:[function(t,e,n){var r=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=r.formatInputInt,this._outputFormatter=r.formatOutputUInt};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],16:[function(t,e,n){var r=t("./formatters"),o=t("./type"),i=function(){this._inputFormatter=r.formatInputReal,this._outputFormatter=r.formatOutputUReal};i.prototype=new o({}),i.prototype.constructor=i,i.prototype.isType=function(t){return!!t.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/)},i.prototype.staticPartLength=function(t){return 32*this.staticArrayLength(t)},e.exports=i},{"./formatters":9,"./type":14}],17:[function(t,e,n){"use strict";"undefined"==typeof XMLHttpRequest?n.XMLHttpRequest={}:n.XMLHttpRequest=XMLHttpRequest},{}],18:[function(t,e,n){var r=t("bignumber.js"),o=["wei","kwei","Mwei","Gwei","szabo","finney","femtoether","picoether","nanoether","microether","milliether","nano","micro","milli","ether","grand","Mether","Gether","Tether","Pether","Eether","Zether","Yether","Nether","Dether","Vether","Uether"];e.exports={ETH_PADDING:32,ETH_SIGNATURE_LENGTH:4,ETH_UNITS:o,ETH_BIGNUMBER_ROUNDING_MODE:{ROUNDING_MODE:r.ROUND_DOWN},ETH_POLLING_TIMEOUT:500,defaultBlock:"latest",defaultAccount:void 0}},{"bignumber.js":"bignumber.js"}],19:[function(t,e,n){var r=t("crypto-js"),o=t("crypto-js/sha3");e.exports=function(t,e){return e&&"hex"===e.encoding&&(t.length>2&&"0x"===t.substr(0,2)&&(t=t.substr(2)),t=r.enc.Hex.parse(t)),o(t,{outputLength:256}).toString()}},{"crypto-js":58,"crypto-js/sha3":79}],20:[function(t,e,n){var r=t("bignumber.js"),o=t("./sha3.js"),i=t("utf8"),a={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"},s=function(t,e,n){return new Array(e-t.length+1).join(n?n:"0")+t},c=function(t,e,n){return t+new Array(e-t.length+1).join(n?n:"0")},u=function(t){var e="",n=0,r=t.length;for("0x"===t.substring(0,2)&&(n=2);r>n;n+=2){var o=parseInt(t.substr(n,2),16);if(0===o)break;e+=String.fromCharCode(o)}return i.decode(e)},f=function(t){var e="",n=0,r=t.length;for("0x"===t.substring(0,2)&&(n=2);r>n;n+=2){var o=parseInt(t.substr(n,2),16);e+=String.fromCharCode(o)}return e},p=function(t){t=i.encode(t);for(var e="",n=0;nn;n++)if(parseInt(e[n],16)>7&&t[n].toUpperCase()!==t[n]||parseInt(e[n],16)<=7&&t[n].toLowerCase()!==t[n])return!1;return!0},C=function(t){if("undefined"==typeof t)return"";t=t.toLowerCase().replace("0x","");for(var e=o(t),n="0x",r=0;r7?t[r].toUpperCase():t[r];return n},F=function(t){return B(t)?t:/^[0-9a-f]{40}$/.test(t)?"0x"+t:"0x"+s(v(t).substr(2),40)},I=function(t){return t instanceof r||t&&t.constructor&&"BigNumber"===t.constructor.name},O=function(t){return"string"==typeof t||t&&t.constructor&&"String"===t.constructor.name},D=function(t){return"function"==typeof t},N=function(t){return"object"==typeof t},T=function(t){return"boolean"==typeof t},P=function(t){return t instanceof Array},E=function(t){try{return!!JSON.parse(t)}catch(e){return!1}};e.exports={padLeft:s,padRight:c,toHex:v,toDecimal:y,fromDecimal:g,toUtf8:u,toAscii:f,fromUtf8:p,fromAscii:l,transformToFullName:h,extractDisplayName:d,extractTypeName:m,toWei:w,fromWei:_,toBigNumber:x,toTwosComplement:k,toAddress:F,isBigNumber:I,isStrictAddress:B,isAddress:S,isChecksumAddress:A,toChecksumAddress:C,isFunction:D,isString:O,isObject:N,isBoolean:T,isArray:P,isJson:E}},{"./sha3.js":19,"bignumber.js":"bignumber.js",utf8:84}],21:[function(t,e,n){e.exports={version:"0.17.0-alpha"}},{}],22:[function(t,e,n){function r(t){this._requestManager=new o(t),this.currentProvider=t,this.eth=new a(this),this.db=new s(this),this.shh=new c(this),this.net=new u(this),this.personal=new f(this),this.settings=new p,this.version={api:l.version},this.providers={HttpProvider:v,IpcProvider:b},this._extend=m(this),this._extend({properties:w()})}var o=t("./web3/requestmanager"),i=t("./web3/iban"),a=t("./web3/methods/eth"),s=t("./web3/methods/db"),c=t("./web3/methods/shh"),u=t("./web3/methods/net"),f=t("./web3/methods/personal"),p=t("./web3/settings"),l=t("./version.json"),h=t("./utils/utils"),d=t("./utils/sha3"),m=t("./web3/extend"),y=t("./web3/batch"),g=t("./web3/property"),v=t("./web3/httpprovider"),b=t("./web3/ipcprovider"),_=t("bignumber.js");r.providers={HttpProvider:v,IpcProvider:b},r.prototype.setProvider=function(t){this._requestManager.setProvider(t),this.currentProvider=t},r.prototype.reset=function(t){this._requestManager.reset(t),this.settings=new p},r.prototype.BigNumber=_,r.prototype.toHex=h.toHex,r.prototype.toAscii=h.toAscii,r.prototype.toUtf8=h.toUtf8,r.prototype.fromAscii=h.fromAscii,r.prototype.fromUtf8=h.fromUtf8,r.prototype.toDecimal=h.toDecimal,r.prototype.fromDecimal=h.fromDecimal,r.prototype.toBigNumber=h.toBigNumber,r.prototype.toWei=h.toWei,r.prototype.fromWei=h.fromWei,r.prototype.isAddress=h.isAddress,r.prototype.isChecksumAddress=h.isChecksumAddress,r.prototype.toChecksumAddress=h.toChecksumAddress,r.prototype.isIBAN=h.isIBAN,r.prototype.sha3=function(t,e){return"0x"+d(t,e)},r.prototype.fromICAP=function(t){var e=new i(t);return e.address()};var w=function(){return[new g({name:"version.node",getter:"web3_clientVersion"}),new g({name:"version.network",getter:"net_version",inputFormatter:h.toDecimal}),new g({name:"version.ethereum",getter:"eth_protocolVersion",inputFormatter:h.toDecimal}),new g({name:"version.whisper",getter:"shh_version",inputFormatter:h.toDecimal})]};r.prototype.isConnected=function(){return this.currentProvider&&this.currentProvider.isConnected()},r.prototype.createBatch=function(){return new y(this)},e.exports=r},{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/property":44,"./web3/requestmanager":45,"./web3/settings":46,"bignumber.js":"bignumber.js"}],23:[function(t,e,n){var r=t("../utils/sha3"),o=t("./event"),i=t("./formatters"),a=t("../utils/utils"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,n){this._requestManager=t,this._json=e,this._address=n};u.prototype.encode=function(t){t=t||{};var e={};return["fromBlock","toBlock"].filter(function(e){return void 0!==t[e]}).forEach(function(n){e[n]=i.inputBlockNumberFormatter(t[n])}),e.address=this._address,e},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=t.topics[0].slice(2),n=this._json.filter(function(t){return e===r(a.transformToFullName(t))})[0];if(!n)return console.warn("cannot find event for log"),t;var i=new o(this._requestManager,n,this._address);return i.decode(t)},u.prototype.execute=function(t,e){a.isFunction(arguments[arguments.length-1])&&(e=arguments[arguments.length-1],1===arguments.length&&(t=null));var n=this.encode(t),r=this.decode.bind(this);return new s(this._requestManager,n,c.eth(),r,e)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this);t.allEvents=e},e.exports=u},{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":42}],24:[function(t,e,n){var r=t("./jsonrpc"),o=t("./errors"),i=function(t){this.requestManager=t._requestManager,this.requests=[]};i.prototype.add=function(t){this.requests.push(t)},i.prototype.execute=function(){var t=this.requests;this.requestManager.sendBatch(t,function(e,n){n=n||[],t.map(function(t,e){return n[e]||{}}).forEach(function(e,n){if(t[n].callback){if(!r.isValidResponse(e))return t[n].callback(o.InvalidResponse(e));t[n].callback(null,t[n].format?t[n].format(e.result):e.result)}})})},e.exports=i},{"./errors":26,"./jsonrpc":35}],25:[function(t,e,n){var r=t("../utils/utils"),o=t("../solidity/coder"),i=t("./event"),a=t("./function"),s=t("./allevents"),c=function(t,e){return t.filter(function(t){return"constructor"===t.type&&t.inputs.length===e.length}).map(function(t){return t.inputs.map(function(t){return t.type})}).map(function(t){return o.encodeParams(t,e)})[0]||""},u=function(t){t.abi.filter(function(t){return"function"===t.type}).map(function(e){return new a(t._eth,e,t.address)}).forEach(function(e){e.attachToContract(t)})},f=function(t){var e=t.abi.filter(function(t){return"event"===t.type}),n=new s(t._eth._requestManager,e,t.address);n.attachToContract(t),e.map(function(e){return new i(t._eth._requestManager,e,t.address)}).forEach(function(e){e.attachToContract(t)})},p=function(t,e){var n=0,r=!1,o=t._eth.filter("latest",function(i){if(!i&&!r)if(n++,n>50){if(o.stopWatching(),r=!0,!e)throw new Error("Contract transaction couldn't be found after 50 blocks");e(new Error("Contract transaction couldn't be found after 50 blocks"))}else t._eth.getTransactionReceipt(t.transactionHash,function(n,i){i&&!r&&t._eth.getCode(i.contractAddress,function(n,a){if(!r&&a)if(o.stopWatching(),r=!0,a.length>3)t.address=i.contractAddress,u(t),f(t),e&&e(null,t);else{if(!e)throw new Error("The contract code couldn't be stored, please check your gas amount.");e(new Error("The contract code couldn't be stored, please check your gas amount."))}})})})},l=function(t,e){this.eth=t,this.abi=e,this["new"]=function(){var t,e=new h(this.eth,this.abi),n={},o=Array.prototype.slice.call(arguments);r.isFunction(o[o.length-1])&&(t=o.pop());var i=o[o.length-1];r.isObject(i)&&!r.isArray(i)&&(n=o.pop());var a=c(this.abi,o);if(n.data+=a,t)this.eth.sendTransaction(n,function(n,r){n?t(n):(e.transactionHash=r,t(null,e),p(e,t))});else{var s=this.eth.sendTransaction(n);e.transactionHash=s,p(e)}return e},this["new"].getData=this.getData.bind(this)};l.prototype.at=function(t,e){var n=new h(this.eth,this.abi,t);return u(n),f(n),e&&e(null,n),n},l.prototype.getData=function(){var t={},e=Array.prototype.slice.call(arguments),n=e[e.length-1];r.isObject(n)&&!r.isArray(n)&&(t=e.pop());var o=c(this.abi,e);return t.data+=o,t.data};var h=function(t,e,n){this._eth=t,this.transactionHash=null,this.address=n,this.abi=e};e.exports=l},{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(t,e,n){e.exports={InvalidNumberOfParams:function(){return new Error("Invalid number of input parameters")},InvalidConnection:function(t){return new Error("CONNECTION ERROR: Couldn't connect to node "+t+".")},InvalidProvider:function(){return new Error("Provider not set or invalid")},InvalidResponse:function(t){var e=t&&t.error&&t.error.message?t.error.message:"Invalid JSON RPC response: "+JSON.stringify(t);return new Error(e)}}},{}],27:[function(t,e,n){var r=t("../utils/utils"),o=t("../solidity/coder"),i=t("./formatters"),a=t("../utils/sha3"),s=t("./filter"),c=t("./methods/watches"),u=function(t,e,n){this._requestManager=t,this._params=e.inputs,this._name=r.transformToFullName(e),this._address=n,this._anonymous=e.anonymous};u.prototype.types=function(t){return this._params.filter(function(e){return e.indexed===t}).map(function(t){return t.type})},u.prototype.displayName=function(){return r.extractDisplayName(this._name)},u.prototype.typeName=function(){return r.extractTypeName(this._name)},u.prototype.signature=function(){return a(this._name)},u.prototype.encode=function(t,e){t=t||{},e=e||{};var n={};["fromBlock","toBlock"].filter(function(t){return void 0!==e[t]}).forEach(function(t){n[t]=i.inputBlockNumberFormatter(e[t])}),n.topics=[],n.address=this._address,this._anonymous||n.topics.push("0x"+this.signature());var a=this._params.filter(function(t){return t.indexed===!0}).map(function(e){var n=t[e.name];return void 0===n||null===n?null:r.isArray(n)?n.map(function(t){return"0x"+o.encodeParam(e.type,t)}):"0x"+o.encodeParam(e.type,n)});return n.topics=n.topics.concat(a),n},u.prototype.decode=function(t){t.data=t.data||"",t.topics=t.topics||[];var e=this._anonymous?t.topics:t.topics.slice(1),n=e.map(function(t){return t.slice(2)}).join(""),r=o.decodeParams(this.types(!0),n),a=t.data.slice(2),s=o.decodeParams(this.types(!1),a),c=i.outputLogFormatter(t);return c.event=this.displayName(),c.address=t.address,c.args=this._params.reduce(function(t,e){return t[e.name]=e.indexed?r.shift():s.shift(),t},{}),delete c.data,delete c.topics,c},u.prototype.execute=function(t,e,n){r.isFunction(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],2===arguments.length&&(e=null),1===arguments.length&&(e=null,t={}));var o=this.encode(t,e),i=this.decode.bind(this);return new s(this._requestManager,o,c.eth(),i,n)},u.prototype.attachToContract=function(t){var e=this.execute.bind(this),n=this.displayName();t[n]||(t[n]=e),t[n][this.typeName()]=this.execute.bind(this,t)},e.exports=u},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":42}],28:[function(t,e,n){var r=t("./formatters"),o=t("./../utils/utils"),i=t("./method"),a=t("./property"),s=function(t){var e=function(e){var n;e.property?(t[e.property]||(t[e.property]={}),n=t[e.property]):n=t,e.methods&&e.methods.forEach(function(e){e.attachToObject(n),e.setRequestManager(t._requestManager)}),e.properties&&e.properties.forEach(function(e){e.attachToObject(n),e.setRequestManager(t._requestManager)})};return e.formatters=r,e.utils=o,e.Method=i,e.Property=a,e};e.exports=s},{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":44}],29:[function(t,e,n){var r=t("./formatters"),o=t("../utils/utils"),i=function(t){return null===t||"undefined"==typeof t?null:(t=String(t),0===t.indexOf("0x")?t:o.fromUtf8(t))},a=function(t){return o.isString(t)?t:(t=t||{},t.topics=t.topics||[],t.topics=t.topics.map(function(t){return o.isArray(t)?t.map(i):i(t)}),{topics:t.topics,from:t.from,to:t.to,address:t.address,fromBlock:r.inputBlockNumberFormatter(t.fromBlock),toBlock:r.inputBlockNumberFormatter(t.toBlock)})},s=function(t,e){o.isString(t.options)||t.get(function(t,n){t&&e(t),o.isArray(n)&&n.forEach(function(t){e(null,t)})})},c=function(t){var e=function(e,n){return e?t.callbacks.forEach(function(t){t(e)}):void(o.isArray(n)&&n.forEach(function(e){e=t.formatter?t.formatter(e):e,t.callbacks.forEach(function(t){t(null,e)})}))};t.requestManager.startPolling({method:t.implementation.poll.call,params:[t.filterId]},t.filterId,e,t.stopWatching.bind(t))},u=function(t,e,n,r,o){var i=this,u={};return n.forEach(function(e){e.setRequestManager(t),e.attachToObject(u)}),this.requestManager=t, -this.options=a(e),this.implementation=u,this.filterId=null,this.callbacks=[],this.getLogsCallbacks=[],this.pollFilters=[],this.formatter=r,this.implementation.newFilter(this.options,function(t,e){if(t)i.callbacks.forEach(function(e){e(t)});else if(i.filterId=e,i.getLogsCallbacks.forEach(function(t){i.get(t)}),i.getLogsCallbacks=[],i.callbacks.forEach(function(t){s(i,t)}),i.callbacks.length>0&&c(i),"function"==typeof o)return i.watch(o)}),this};u.prototype.watch=function(t){return this.callbacks.push(t),this.filterId&&(s(this,t),c(this)),this},u.prototype.stopWatching=function(t){return this.requestManager.stopPolling(this.filterId),this.callbacks=[],t?void this.implementation.uninstallFilter(this.filterId,t):this.implementation.uninstallFilter(this.filterId)},u.prototype.get=function(t){var e=this;if(!o.isFunction(t)){if(null===this.filterId)throw new Error("Filter ID Error: filter().get() can't be chained synchronous, please provide a callback for the get() method.");var n=this.implementation.getLogs(this.filterId);return n.map(function(t){return e.formatter?e.formatter(t):t})}return null===this.filterId?this.getLogsCallbacks.push(t):this.implementation.getLogs(this.filterId,function(n,r){n?t(n):t(null,r.map(function(t){return e.formatter?e.formatter(t):t}))}),this},e.exports=u},{"../utils/utils":20,"./formatters":30}],30:[function(t,e,n){var r=t("../utils/utils"),o=t("../utils/config"),i=t("./iban"),a=function(t){return r.toBigNumber(t)},s=function(t){return"latest"===t||"pending"===t||"earliest"===t},c=function(t){return void 0===t?o.defaultBlock:u(t)},u=function(t){return void 0===t?void 0:s(t)?t:r.toHex(t)},f=function(t){return t.from=t.from||o.defaultAccount,t.from&&(t.from=v(t.from)),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=r.fromDecimal(t[e])}),t},p=function(t){return t.from=t.from||o.defaultAccount,t.from=v(t.from),t.to&&(t.to=v(t.to)),["gasPrice","gas","value","nonce"].filter(function(e){return void 0!==t[e]}).forEach(function(e){t[e]=r.fromDecimal(t[e])}),t},l=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),t.nonce=r.toDecimal(t.nonce),t.gas=r.toDecimal(t.gas),t.gasPrice=r.toBigNumber(t.gasPrice),t.value=r.toBigNumber(t.value),t},h=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),t.cumulativeGasUsed=r.toDecimal(t.cumulativeGasUsed),t.gasUsed=r.toDecimal(t.gasUsed),r.isArray(t.logs)&&(t.logs=t.logs.map(function(t){return m(t)})),t},d=function(t){return t.gasLimit=r.toDecimal(t.gasLimit),t.gasUsed=r.toDecimal(t.gasUsed),t.size=r.toDecimal(t.size),t.timestamp=r.toDecimal(t.timestamp),null!==t.number&&(t.number=r.toDecimal(t.number)),t.difficulty=r.toBigNumber(t.difficulty),t.totalDifficulty=r.toBigNumber(t.totalDifficulty),r.isArray(t.transactions)&&t.transactions.forEach(function(t){return r.isString(t)?void 0:l(t)}),t},m=function(t){return null!==t.blockNumber&&(t.blockNumber=r.toDecimal(t.blockNumber)),null!==t.transactionIndex&&(t.transactionIndex=r.toDecimal(t.transactionIndex)),null!==t.logIndex&&(t.logIndex=r.toDecimal(t.logIndex)),t},y=function(t){return t.ttl=r.fromDecimal(t.ttl),t.workToProve=r.fromDecimal(t.workToProve),t.priority=r.fromDecimal(t.priority),r.isArray(t.topics)||(t.topics=t.topics?[t.topics]:[]),t.topics=t.topics.map(function(t){return 0===t.indexOf("0x")?t:r.fromUtf8(t)}),t},g=function(t){return t.expiry=r.toDecimal(t.expiry),t.sent=r.toDecimal(t.sent),t.ttl=r.toDecimal(t.ttl),t.workProved=r.toDecimal(t.workProved),t.topics||(t.topics=[]),t.topics=t.topics.map(function(t){return r.toAscii(t)}),t},v=function(t){var e=new i(t);if(e.isValid()&&e.isDirect())return"0x"+e.address();if(r.isStrictAddress(t))return t;if(r.isAddress(t))return"0x"+t;throw new Error("invalid address")},b=function(t){return t.startingBlock=r.toDecimal(t.startingBlock),t.currentBlock=r.toDecimal(t.currentBlock),t.highestBlock=r.toDecimal(t.highestBlock),t.knownStates&&(t.knownStates=r.toDecimal(t.knownStates),t.pulledStates=r.toDecimal(t.pulledStates)),t};e.exports={inputDefaultBlockNumberFormatter:c,inputBlockNumberFormatter:u,inputCallFormatter:f,inputTransactionFormatter:p,inputAddressFormatter:v,inputPostFormatter:y,outputBigNumberFormatter:a,outputTransactionFormatter:l,outputTransactionReceiptFormatter:h,outputBlockFormatter:d,outputLogFormatter:m,outputPostFormatter:g,outputSyncingFormatter:b}},{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(t,e,n){var r=t("../solidity/coder"),o=t("../utils/utils"),i=t("./formatters"),a=t("../utils/sha3"),s=function(t,e,n){this._eth=t,this._inputTypes=e.inputs.map(function(t){return t.type}),this._outputTypes=e.outputs.map(function(t){return t.type}),this._constant=e.constant,this._name=o.transformToFullName(e),this._address=n};s.prototype.extractCallback=function(t){return o.isFunction(t[t.length-1])?t.pop():void 0},s.prototype.extractDefaultBlock=function(t){return t.length>this._inputTypes.length&&!o.isObject(t[t.length-1])?i.inputDefaultBlockNumberFormatter(t.pop()):void 0},s.prototype.toPayload=function(t){var e={};return t.length>this._inputTypes.length&&o.isObject(t[t.length-1])&&(e=t[t.length-1]),e.to=this._address,e.data="0x"+this.signature()+r.encodeParams(this._inputTypes,t),e},s.prototype.signature=function(){return a(this._name).slice(0,8)},s.prototype.unpackOutput=function(t){if(t){t=t.length>=2?t.slice(2):t;var e=r.decodeParams(this._outputTypes,t);return 1===e.length?e[0]:e}},s.prototype.call=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),n=this.extractDefaultBlock(t),r=this.toPayload(t);if(!e){var o=this._eth.call(r,n);return this.unpackOutput(o)}var i=this;this._eth.call(r,n,function(t,n){e(t,i.unpackOutput(n))})},s.prototype.sendTransaction=function(){var t=Array.prototype.slice.call(arguments).filter(function(t){return void 0!==t}),e=this.extractCallback(t),n=this.toPayload(t);return e?void this._eth.sendTransaction(n,e):this._eth.sendTransaction(n)},s.prototype.estimateGas=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),n=this.toPayload(t);return e?void this._eth.estimateGas(n,e):this._eth.estimateGas(n)},s.prototype.getData=function(){var t=Array.prototype.slice.call(arguments),e=this.toPayload(t);return e.data},s.prototype.displayName=function(){return o.extractDisplayName(this._name)},s.prototype.typeName=function(){return o.extractTypeName(this._name)},s.prototype.request=function(){var t=Array.prototype.slice.call(arguments),e=this.extractCallback(t),n=this.toPayload(t),r=this.unpackOutput.bind(this);return{method:this._constant?"eth_call":"eth_sendTransaction",callback:e,params:[n],format:r}},s.prototype.execute=function(){var t=!this._constant;return t?this.sendTransaction.apply(this,Array.prototype.slice.call(arguments)):this.call.apply(this,Array.prototype.slice.call(arguments))},s.prototype.attachToContract=function(t){var e=this.execute.bind(this);e.request=this.request.bind(this),e.call=this.call.bind(this),e.sendTransaction=this.sendTransaction.bind(this),e.estimateGas=this.estimateGas.bind(this),e.getData=this.getData.bind(this);var n=this.displayName();t[n]||(t[n]=e),t[n][this.typeName()]=e},e.exports=s},{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./formatters":30}],32:[function(t,e,n){"use strict";var r,o=t("./errors");r="undefined"!=typeof window&&window.XMLHttpRequest?window.XMLHttpRequest:t("xmlhttprequest").XMLHttpRequest;var i=function(t){this.host=t||"http://localhost:8545"};i.prototype.prepareRequest=function(t){var e=new r;return e.open("POST",this.host,t),e.setRequestHeader("Content-Type","application/json"),e},i.prototype.send=function(t){var e=this.prepareRequest(!1);try{e.send(JSON.stringify(t))}catch(n){throw o.InvalidConnection(this.host)}var r=e.responseText;try{r=JSON.parse(r)}catch(i){throw o.InvalidResponse(e.responseText)}return r},i.prototype.sendAsync=function(t,e){var n=this.prepareRequest(!0);n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText,r=null;try{t=JSON.parse(t)}catch(i){r=o.InvalidResponse(n.responseText)}e(r,t)}};try{n.send(JSON.stringify(t))}catch(r){e(o.InvalidConnection(this.host))}},i.prototype.isConnected=function(){try{return this.send({id:9999999999,jsonrpc:"2.0",method:"net_listening",params:[]}),!0}catch(t){return!1}},e.exports=i},{"./errors":26,xmlhttprequest:17}],33:[function(t,e,n){var r=t("bignumber.js"),o=function(t,e){for(var n=t;n.length<2*e;)n="0"+n;return n},i=function(t){var e="A".charCodeAt(0),n="Z".charCodeAt(0);return t=t.toUpperCase(),t=t.substr(4)+t.substr(0,4),t.split("").map(function(t){var r=t.charCodeAt(0);return r>=e&&n>=r?r-e+10:t}).join("")},a=function(t){for(var e,n=t;n.length>2;)e=n.slice(0,9),n=parseInt(e,10)%97+n.slice(e.length);return parseInt(n,10)%97},s=function(t){this._iban=t};s.fromAddress=function(t){var e=new r(t,16),n=e.toString(36),i=o(n,15);return s.fromBban(i.toUpperCase())},s.fromBban=function(t){var e="XE",n=a(i(e+"00"+t)),r=("0"+(98-n)).slice(-2);return new s(e+r+t)},s.createIndirect=function(t){return s.fromBban("ETH"+t.institution+t.identifier)},s.isValid=function(t){var e=new s(t);return e.isValid()},s.prototype.isValid=function(){return/^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban)&&1===a(i(this._iban))},s.prototype.isDirect=function(){return 34===this._iban.length||35===this._iban.length},s.prototype.isIndirect=function(){return 20===this._iban.length},s.prototype.checksum=function(){return this._iban.substr(2,2)},s.prototype.institution=function(){return this.isIndirect()?this._iban.substr(7,4):""},s.prototype.client=function(){return this.isIndirect()?this._iban.substr(11):""},s.prototype.address=function(){if(this.isDirect()){var t=this._iban.substr(4),e=new r(t,36);return o(e.toString(16),20)}return""},s.prototype.toString=function(){return this._iban},e.exports=s},{"bignumber.js":"bignumber.js"}],34:[function(t,e,n){"use strict";var r=t("../utils/utils"),o=t("./errors"),i=function(t,e){var n=this;this.responseCallbacks={},this.path=t,this.connection=e.connect({path:this.path}),this.connection.on("error",function(t){console.error("IPC Connection Error",t),n._timeout()}),this.connection.on("end",function(){n._timeout()}),this.connection.on("data",function(t){n._parseResponse(t.toString()).forEach(function(t){var e=null;r.isArray(t)?t.forEach(function(t){n.responseCallbacks[t.id]&&(e=t.id)}):e=t.id,n.responseCallbacks[e]&&(n.responseCallbacks[e](null,t),delete n.responseCallbacks[e])})})};i.prototype._parseResponse=function(t){var e=this,n=[],r=t.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|");return r.forEach(function(t){e.lastChunk&&(t=e.lastChunk+t);var r=null;try{r=JSON.parse(t)}catch(i){return e.lastChunk=t,clearTimeout(e.lastChunkTimeout),void(e.lastChunkTimeout=setTimeout(function(){throw e._timeout(),o.InvalidResponse(t)},15e3))}clearTimeout(e.lastChunkTimeout),e.lastChunk=null,r&&n.push(r)}),n},i.prototype._addResponseCallback=function(t,e){var n=t.id||t[0].id,r=t.method||t[0].method;this.responseCallbacks[n]=e,this.responseCallbacks[n].method=r},i.prototype._timeout=function(){for(var t in this.responseCallbacks)this.responseCallbacks.hasOwnProperty(t)&&(this.responseCallbacks[t](o.InvalidConnection("on IPC")),delete this.responseCallbacks[t])},i.prototype.isConnected=function(){var t=this;return t.connection.writable||t.connection.connect({path:t.path}),!!this.connection.writable},i.prototype.send=function(t){if(this.connection.writeSync){var e;this.connection.writable||this.connection.connect({path:this.path});var n=this.connection.writeSync(JSON.stringify(t));try{e=JSON.parse(n)}catch(r){throw o.InvalidResponse(n)}return e}throw new Error('You tried to send "'+t.method+'" synchronously. Synchronous requests are not supported by the IPC provider.')},i.prototype.sendAsync=function(t,e){this.connection.writable||this.connection.connect({path:this.path}),this.connection.write(JSON.stringify(t)),this._addResponseCallback(t,e)},e.exports=i},{"../utils/utils":20,"./errors":26}],35:[function(t,e,n){var r={messageId:0};r.toPayload=function(t,e){return t||console.error("jsonrpc method should be specified!"),r.messageId++,{jsonrpc:"2.0",id:r.messageId,method:t,params:e||[]}},r.isValidResponse=function(t){function e(t){return!!t&&!t.error&&"2.0"===t.jsonrpc&&"number"==typeof t.id&&void 0!==t.result}return Array.isArray(t)?t.every(e):e(t)},r.toBatchPayload=function(t){return t.map(function(t){return r.toPayload(t.method,t.params)})},e.exports=r},{}],36:[function(t,e,n){var r=t("../utils/utils"),o=t("./errors"),i=function(t){this.name=t.name,this.call=t.call,this.params=t.params||0,this.inputFormatter=t.inputFormatter,this.outputFormatter=t.outputFormatter,this.requestManager=null};i.prototype.setRequestManager=function(t){this.requestManager=t},i.prototype.getCall=function(t){return r.isFunction(this.call)?this.call(t):this.call},i.prototype.extractCallback=function(t){return r.isFunction(t[t.length-1])?t.pop():void 0},i.prototype.validateArgs=function(t){if(t.length!==this.params)throw o.InvalidNumberOfParams()},i.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter.map(function(e,n){return e?e(t[n]):t[n]}):t},i.prototype.formatOutput=function(t){return this.outputFormatter&&t?this.outputFormatter(t):t},i.prototype.toPayload=function(t){var e=this.getCall(t),n=this.extractCallback(t),r=this.formatInput(t);return this.validateArgs(r),{method:e,params:r,callback:n}},i.prototype.attachToObject=function(t){var e=this.buildCall();e.call=this.call;var n=this.name.split(".");n.length>1?(t[n[0]]=t[n[0]]||{},t[n[0]][n[1]]=e):t[n[0]]=e},i.prototype.buildCall=function(){var t=this,e=function(){var e=t.toPayload(Array.prototype.slice.call(arguments));return e.callback?t.requestManager.sendAsync(e,function(n,r){e.callback(n,t.formatOutput(r))}):t.formatOutput(t.requestManager.send(e))};return e.request=this.request.bind(this),e},i.prototype.request=function(){var t=this.toPayload(Array.prototype.slice.call(arguments));return t.format=this.formatOutput.bind(this),t},e.exports=i},{"../utils/utils":20,"./errors":26}],37:[function(t,e,n){var r=t("../method"),o=function(t){this._requestManager=t._requestManager;var e=this;i().forEach(function(n){n.attachToObject(e),n.setRequestManager(t._requestManager)})},i=function(){var t=new r({name:"putString",call:"db_putString",params:3}),e=new r({name:"getString",call:"db_getString",params:2}),n=new r({name:"putHex",call:"db_putHex",params:3}),o=new r({name:"getHex",call:"db_getHex",params:2});return[t,e,n,o]};e.exports=o},{"../method":36}],38:[function(t,e,n){"use strict";function r(t){this._requestManager=t._requestManager;var e=this;w().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),x().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),this.iban=d,this.sendIBANTransaction=m.bind(null,this)}var o=t("../formatters"),i=t("../../utils/utils"),a=t("../method"),s=t("../property"),c=t("../../utils/config"),u=t("../contract"),f=t("./watches"),p=t("../filter"),l=t("../syncing"),h=t("../namereg"),d=t("../iban"),m=t("../transfer"),y=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockByHash":"eth_getBlockByNumber"},g=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getTransactionByBlockHashAndIndex":"eth_getTransactionByBlockNumberAndIndex"},v=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleByBlockHashAndIndex":"eth_getUncleByBlockNumberAndIndex"},b=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getBlockTransactionCountByHash":"eth_getBlockTransactionCountByNumber"},_=function(t){return i.isString(t[0])&&0===t[0].indexOf("0x")?"eth_getUncleCountByBlockHash":"eth_getUncleCountByBlockNumber"};Object.defineProperty(r.prototype,"defaultBlock",{get:function(){return c.defaultBlock},set:function(t){return c.defaultBlock=t,t}}),Object.defineProperty(r.prototype,"defaultAccount",{get:function(){return c.defaultAccount},set:function(t){return c.defaultAccount=t,t}});var w=function(){var t=new a({name:"getBalance",call:"eth_getBalance",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter],outputFormatter:o.outputBigNumberFormatter}),e=new a({name:"getStorageAt",call:"eth_getStorageAt",params:3,inputFormatter:[null,i.toHex,o.inputDefaultBlockNumberFormatter]}),n=new a({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[o.inputAddressFormatter,o.inputDefaultBlockNumberFormatter]}),r=new a({name:"getBlock",call:y,params:2,inputFormatter:[o.inputBlockNumberFormatter,function(t){return!!t}],outputFormatter:o.outputBlockFormatter}),s=new a({name:"getUncle",call:v,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputBlockFormatter}),c=new a({name:"getCompilers",call:"eth_getCompilers",params:0}),u=new a({name:"getBlockTransactionCount",call:b,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),f=new a({name:"getBlockUncleCount",call:_,params:1,inputFormatter:[o.inputBlockNumberFormatter],outputFormatter:i.toDecimal}),p=new a({name:"getTransaction",call:"eth_getTransactionByHash",params:1,outputFormatter:o.outputTransactionFormatter}),l=new a({name:"getTransactionFromBlock",call:g,params:2,inputFormatter:[o.inputBlockNumberFormatter,i.toHex],outputFormatter:o.outputTransactionFormatter}),h=new a({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,outputFormatter:o.outputTransactionReceiptFormatter}),d=new a({name:"getTransactionCount",call:"eth_getTransactionCount",params:2,inputFormatter:[null,o.inputDefaultBlockNumberFormatter],outputFormatter:i.toDecimal}),m=new a({name:"sendRawTransaction",call:"eth_sendRawTransaction",params:1,inputFormatter:[null]}),w=new a({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[o.inputTransactionFormatter]}),x=new a({name:"sign",call:"eth_sign",params:2,inputFormatter:[o.inputAddressFormatter,null]}),k=new a({name:"call",call:"eth_call",params:2,inputFormatter:[o.inputCallFormatter,o.inputDefaultBlockNumberFormatter]}),B=new a({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[o.inputCallFormatter],outputFormatter:i.toDecimal}),S=new a({name:"compile.solidity",call:"eth_compileSolidity",params:1}),A=new a({name:"compile.lll",call:"eth_compileLLL",params:1}),C=new a({name:"compile.serpent",call:"eth_compileSerpent",params:1}),F=new a({name:"submitWork",call:"eth_submitWork",params:3}),I=new a({name:"getWork",call:"eth_getWork",params:0});return[t,e,n,r,s,c,u,f,p,l,h,d,k,B,m,w,x,S,A,C,F,I]},x=function(){return[new s({name:"coinbase",getter:"eth_coinbase"}),new s({name:"mining",getter:"eth_mining"}),new s({name:"hashrate",getter:"eth_hashrate",outputFormatter:i.toDecimal}),new s({name:"syncing",getter:"eth_syncing",outputFormatter:o.outputSyncingFormatter}),new s({name:"gasPrice",getter:"eth_gasPrice",outputFormatter:o.outputBigNumberFormatter}),new s({name:"accounts",getter:"eth_accounts"}),new s({name:"blockNumber",getter:"eth_blockNumber",outputFormatter:i.toDecimal}),new s({name:"protocolVersion",getter:"eth_protocolVersion"})]};r.prototype.contract=function(t){var e=new u(this,t);return e},r.prototype.filter=function(t,e){return new p(this._requestManager,t,f.eth(),o.outputLogFormatter,e)},r.prototype.namereg=function(){return this.contract(h.global.abi).at(h.global.address)},r.prototype.icapNamereg=function(){return this.contract(h.icap.abi).at(h.icap.address)},r.prototype.isSyncing=function(t){return new l(this._requestManager,t)},e.exports=r},{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":43,"../property":44,"../syncing":47,"../transfer":48,"./watches":42}],39:[function(t,e,n){var r=t("../../utils/utils"),o=t("../property"),i=function(t){this._requestManager=t._requestManager;var e=this;a().forEach(function(n){n.attachToObject(e),n.setRequestManager(t._requestManager)})},a=function(){return[new o({name:"listening",getter:"net_listening"}),new o({name:"peerCount",getter:"net_peerCount",outputFormatter:r.toDecimal})]};e.exports=i},{"../../utils/utils":20,"../property":44}],40:[function(t,e,n){"use strict";function r(t){this._requestManager=t._requestManager;var e=this;s().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)}),c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})}var o=t("../method"),i=t("../property"),a=t("../formatters"),s=function(){var t=new o({name:"newAccount",call:"personal_newAccount",params:1,inputFormatter:[null]}),e=new o({name:"unlockAccount",call:"personal_unlockAccount",params:3,inputFormatter:[a.inputAddressFormatter,null,null]}),n=new o({name:"unlockAccountAndSendTransaction",call:"personal_signAndSendTransaction",params:2,inputFormatter:[a.inputTransactionFormatter,null]}),r=new o({name:"lockAccount",call:"personal_lockAccount",params:1,inputFormatter:[a.inputAddressFormatter]});return[t,e,n,r]},c=function(){return[new i({name:"listAccounts",getter:"personal_listAccounts"})]};e.exports=r},{"../formatters":30,"../method":36,"../property":44}],41:[function(t,e,n){var r=t("../method"),o=t("../formatters"),i=t("../filter"),a=t("./watches"),s=function(t){this._requestManager=t._requestManager;var e=this;c().forEach(function(t){t.attachToObject(e),t.setRequestManager(e._requestManager)})};s.prototype.filter=function(t,e){return new i(this._requestManager,t,a.shh(),o.outputPostFormatter,e)};var c=function(){var t=new r({name:"post",call:"shh_post",params:1,inputFormatter:[o.inputPostFormatter]}),e=new r({name:"newIdentity",call:"shh_newIdentity",params:0}),n=new r({name:"hasIdentity",call:"shh_hasIdentity",params:1}),i=new r({name:"newGroup",call:"shh_newGroup",params:0}),a=new r({name:"addToGroup",call:"shh_addToGroup",params:0});return[t,e,n,i,a]};e.exports=s},{"../filter":29,"../formatters":30,"../method":36,"./watches":42}],42:[function(t,e,n){var r=t("../method"),o=function(){var t=function(t){var e=t[0];switch(e){case"latest":return t.shift(),this.params=0,"eth_newBlockFilter";case"pending":return t.shift(),this.params=0,"eth_newPendingTransactionFilter";default:return"eth_newFilter"}},e=new r({name:"newFilter",call:t,params:1}),n=new r({name:"uninstallFilter",call:"eth_uninstallFilter",params:1}),o=new r({name:"getLogs",call:"eth_getFilterLogs",params:1}),i=new r({name:"poll",call:"eth_getFilterChanges",params:1});return[e,n,o,i]},i=function(){var t=new r({name:"newFilter",call:"shh_newFilter",params:1}),e=new r({name:"uninstallFilter",call:"shh_uninstallFilter",params:1}),n=new r({name:"getLogs",call:"shh_getMessages",params:1}),o=new r({name:"poll",call:"shh_getFilterChanges",params:1});return[t,e,n,o]};e.exports={eth:o,shh:i}},{"../method":36}],43:[function(t,e,n){var r=t("../contracts/GlobalRegistrar.json"),o=t("../contracts/ICAPRegistrar.json"),i="0xc6d9d2cd449a754c494264e1809c50e34d64562b",a="0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00";e.exports={global:{abi:r,address:i},icap:{abi:o,address:a}}},{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],44:[function(t,e,n){var r=t("../utils/utils"),o=function(t){this.name=t.name,this.getter=t.getter,this.setter=t.setter,this.outputFormatter=t.outputFormatter,this.inputFormatter=t.inputFormatter,this.requestManager=null};o.prototype.setRequestManager=function(t){this.requestManager=t},o.prototype.formatInput=function(t){return this.inputFormatter?this.inputFormatter(t):t},o.prototype.formatOutput=function(t){return this.outputFormatter&&null!==t?this.outputFormatter(t):t},o.prototype.extractCallback=function(t){return r.isFunction(t[t.length-1])?t.pop():void 0},o.prototype.attachToObject=function(t){var e={get:this.buildGet(),enumerable:!0},n=this.name.split("."),r=n[0];n.length>1&&(t[n[0]]=t[n[0]]||{},t=t[n[0]],r=n[1]),Object.defineProperty(t,r,e),t[i(r)]=this.buildAsyncGet()};var i=function(t){return"get"+t.charAt(0).toUpperCase()+t.slice(1)};o.prototype.buildGet=function(){var t=this;return function(){return t.formatOutput(t.requestManager.send({method:t.getter}))}},o.prototype.buildAsyncGet=function(){var t=this,e=function(e){t.requestManager.sendAsync({method:t.getter},function(n,r){e(n,t.formatOutput(r))})};return e.request=this.request.bind(this),e},o.prototype.request=function(){var t={method:this.getter,params:[],callback:this.extractCallback(Array.prototype.slice.call(arguments))};return t.format=this.formatOutput.bind(this),t},e.exports=o},{"../utils/utils":20}],45:[function(t,e,n){var r=t("./jsonrpc"),o=t("../utils/utils"),i=t("../utils/config"),a=t("./errors"),s=function(t){this.provider=t,this.polls={},this.timeout=null};s.prototype.send=function(t){if(!this.provider)return console.error(a.InvalidProvider()),null;var e=r.toPayload(t.method,t.params),n=this.provider.send(e);if(!r.isValidResponse(n))throw a.InvalidResponse(n);return n.result},s.prototype.sendAsync=function(t,e){if(!this.provider)return e(a.InvalidProvider());var n=r.toPayload(t.method,t.params);this.provider.sendAsync(n,function(t,n){return t?e(t):r.isValidResponse(n)?void e(null,n.result):e(a.InvalidResponse(n))})},s.prototype.sendBatch=function(t,e){if(!this.provider)return e(a.InvalidProvider());var n=r.toBatchPayload(t);this.provider.sendAsync(n,function(t,n){return t?e(t):o.isArray(n)?void e(t,n):e(a.InvalidResponse(n))})},s.prototype.setProvider=function(t){this.provider=t},s.prototype.startPolling=function(t,e,n,r){this.polls[e]={data:t,id:e,callback:n,uninstall:r},this.timeout||this.poll()},s.prototype.stopPolling=function(t){delete this.polls[t],0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.reset=function(t){for(var e in this.polls)t&&-1!==e.indexOf("syncPoll_")||(this.polls[e].uninstall(),delete this.polls[e]);0===Object.keys(this.polls).length&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},s.prototype.poll=function(){if(this.timeout=setTimeout(this.poll.bind(this),i.ETH_POLLING_TIMEOUT),0!==Object.keys(this.polls).length){if(!this.provider)return void console.error(a.InvalidProvider());var t=[],e=[];for(var n in this.polls)t.push(this.polls[n].data),e.push(n);if(0!==t.length){var s=r.toBatchPayload(t),c={};s.forEach(function(t,n){c[t.id]=e[n]});var u=this;this.provider.sendAsync(s,function(t,e){if(!t){if(!o.isArray(e))throw a.InvalidResponse(e);e.map(function(t){var e=c[t.id];return u.polls[e]?(t.callback=u.polls[e].callback,t):!1}).filter(function(t){return!!t}).filter(function(t){var e=r.isValidResponse(t);return e||t.callback(a.InvalidResponse(t)),e}).forEach(function(t){t.callback(null,t.result)})}})}}},e.exports=s},{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],46:[function(t,e,n){var r=function(){this.defaultBlock="latest",this.defaultAccount=void 0};e.exports=r},{}],47:[function(t,e,n){var r=t("./formatters"),o=t("../utils/utils"),i=1,a=function(t){var e=function(e,n){return e?t.callbacks.forEach(function(t){t(e)}):(o.isObject(n)&&n.startingBlock&&(n=r.outputSyncingFormatter(n)),void t.callbacks.forEach(function(e){t.lastSyncState!==n&&(!t.lastSyncState&&o.isObject(n)&&e(null,!0),setTimeout(function(){e(null,n)},0),t.lastSyncState=n)}))};t.requestManager.startPolling({method:"eth_syncing",params:[]},t.pollId,e,t.stopWatching.bind(t))},s=function(t,e){return this.requestManager=t,this.pollId="syncPoll_"+i++,this.callbacks=[],this.addCallback(e),this.lastSyncState=!1,a(this),this};s.prototype.addCallback=function(t){return t&&this.callbacks.push(t),this},s.prototype.stopWatching=function(){this.requestManager.stopPolling(this.pollId),this.callbacks=[]},e.exports=s},{"../utils/utils":20,"./formatters":30}],48:[function(t,e,n){var r=t("./iban"),o=t("../contracts/SmartExchange.json"),i=function(t,e,n,o,i){var c=new r(n);if(!c.isValid())throw new Error("invalid iban address");if(c.isDirect())return a(t,e,c.address(),o,i);if(!i){var u=t.icapNamereg().addr(c.institution());return s(t,e,u,o,c.client())}t.icapNamereg().addr(c.institution(),function(n,r){return s(t,e,r,o,c.client(),i)})},a=function(t,e,n,r,o){return t.sendTransaction({address:n,from:e,value:r},o)},s=function(t,e,n,r,i,a){var s=o;return t.contract(s).at(n).deposit(i,{from:e,value:r},a)};e.exports=i},{"../contracts/SmartExchange.json":3,"./iban":33}],49:[function(t,e,n){},{}],50:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.BlockCipher,o=e.algo,i=[],a=[],s=[],c=[],u=[],f=[],p=[],l=[],h=[],d=[];!function(){for(var t=[],e=0;256>e;e++)128>e?t[e]=e<<1:t[e]=e<<1^283;for(var n=0,r=0,e=0;256>e;e++){var o=r^r<<1^r<<2^r<<3^r<<4;o=o>>>8^255&o^99,i[n]=o,a[o]=n;var m=t[n],y=t[m],g=t[y],v=257*t[o]^16843008*o;s[n]=v<<24|v>>>8,c[n]=v<<16|v>>>16,u[n]=v<<8|v>>>24,f[n]=v;var v=16843009*g^65537*y^257*m^16843008*n;p[o]=v<<24|v>>>8,l[o]=v<<16|v>>>16,h[o]=v<<8|v>>>24,d[o]=v,n?(n=m^t[t[t[g^m]]],r^=t[t[r]]):n=r=1}}();var m=[0,1,2,4,8,16,32,64,128,27,54],y=o.AES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,n=t.sigBytes/4,r=this._nRounds=n+6,o=4*(r+1),a=this._keySchedule=[],s=0;o>s;s++)if(n>s)a[s]=e[s];else{var c=a[s-1];s%n?n>6&&s%n==4&&(c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c]):(c=c<<8|c>>>24,c=i[c>>>24]<<24|i[c>>>16&255]<<16|i[c>>>8&255]<<8|i[255&c],c^=m[s/n|0]<<24),a[s]=a[s-n]^c}for(var u=this._invKeySchedule=[],f=0;o>f;f++){var s=o-f;if(f%4)var c=a[s];else var c=a[s-4];4>f||4>=s?u[f]=c:u[f]=p[i[c>>>24]]^l[i[c>>>16&255]]^h[i[c>>>8&255]]^d[i[255&c]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,c,u,f,i)},decryptBlock:function(t,e){var n=t[e+1];t[e+1]=t[e+3],t[e+3]=n,this._doCryptBlock(t,e,this._invKeySchedule,p,l,h,d,a);var n=t[e+1];t[e+1]=t[e+3],t[e+3]=n},_doCryptBlock:function(t,e,n,r,o,i,a,s){for(var c=this._nRounds,u=t[e]^n[0],f=t[e+1]^n[1],p=t[e+2]^n[2],l=t[e+3]^n[3],h=4,d=1;c>d;d++){var m=r[u>>>24]^o[f>>>16&255]^i[p>>>8&255]^a[255&l]^n[h++],y=r[f>>>24]^o[p>>>16&255]^i[l>>>8&255]^a[255&u]^n[h++],g=r[p>>>24]^o[l>>>16&255]^i[u>>>8&255]^a[255&f]^n[h++],v=r[l>>>24]^o[u>>>16&255]^i[f>>>8&255]^a[255&p]^n[h++];u=m,f=y,p=g,l=v}var m=(s[u>>>24]<<24|s[f>>>16&255]<<16|s[p>>>8&255]<<8|s[255&l])^n[h++],y=(s[f>>>24]<<24|s[p>>>16&255]<<16|s[l>>>8&255]<<8|s[255&u])^n[h++],g=(s[p>>>24]<<24|s[l>>>16&255]<<16|s[u>>>8&255]<<8|s[255&f])^n[h++],v=(s[l>>>24]<<24|s[u>>>16&255]<<16|s[f>>>8&255]<<8|s[255&p])^n[h++];t[e]=m,t[e+1]=y,t[e+2]=g,t[e+3]=v},keySize:8});e.AES=r._createHelper(y)}(),t.AES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],51:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){t.lib.Cipher||function(e){var n=t,r=n.lib,o=r.Base,i=r.WordArray,a=r.BufferedBlockAlgorithm,s=n.enc,c=(s.Utf8,s.Base64),u=n.algo,f=u.EvpKDF,p=r.Cipher=a.extend({cfg:o.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,n){this.cfg=this.cfg.extend(n),this._xformMode=t,this._key=e,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},keySize:4,ivSize:4, -_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?k:_}return function(e){return{encrypt:function(n,r,o){return t(r).encrypt(e,n,r,o)},decrypt:function(n,r,o){return t(r).decrypt(e,n,r,o)}}}}()}),l=(r.StreamCipher=p.extend({_doFinalize:function(){var t=this._process(!0);return t},blockSize:1}),n.mode={}),h=r.BlockCipherMode=o.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),d=l.CBC=function(){function t(t,n,r){var o=this._iv;if(o){var i=o;this._iv=e}else var i=this._prevBlock;for(var a=0;r>a;a++)t[n+a]^=i[a]}var n=h.extend();return n.Encryptor=n.extend({processBlock:function(e,n){var r=this._cipher,o=r.blockSize;t.call(this,e,n,o),r.encryptBlock(e,n),this._prevBlock=e.slice(n,n+o)}}),n.Decryptor=n.extend({processBlock:function(e,n){var r=this._cipher,o=r.blockSize,i=e.slice(n,n+o);r.decryptBlock(e,n),t.call(this,e,n,o),this._prevBlock=i}}),n}(),m=n.pad={},y=m.Pkcs7={pad:function(t,e){for(var n=4*e,r=n-t.sigBytes%n,o=r<<24|r<<16|r<<8|r,a=[],s=0;r>s;s+=4)a.push(o);var c=i.create(a,r);t.concat(c)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},g=(r.BlockCipher=p.extend({cfg:p.cfg.extend({mode:d,padding:y}),reset:function(){p.reset.call(this);var t=this.cfg,e=t.iv,n=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var r=n.createEncryptor;else{var r=n.createDecryptor;this._minBufferSize=1}this._mode=r.call(n,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{var e=this._process(!0);t.unpad(e)}return e},blockSize:4}),r.CipherParams=o.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),v=n.format={},b=v.OpenSSL={stringify:function(t){var e=t.ciphertext,n=t.salt;if(n)var r=i.create([1398893684,1701076831]).concat(n).concat(e);else var r=e;return r.toString(c)},parse:function(t){var e=c.parse(t),n=e.words;if(1398893684==n[0]&&1701076831==n[1]){var r=i.create(n.slice(2,4));n.splice(0,4),e.sigBytes-=16}return g.create({ciphertext:e,salt:r})}},_=r.SerializableCipher=o.extend({cfg:o.extend({format:b}),encrypt:function(t,e,n,r){r=this.cfg.extend(r);var o=t.createEncryptor(n,r),i=o.finalize(e),a=o.cfg;return g.create({ciphertext:i,key:n,iv:a.iv,algorithm:t,mode:a.mode,padding:a.padding,blockSize:t.blockSize,formatter:r.format})},decrypt:function(t,e,n,r){r=this.cfg.extend(r),e=this._parse(e,r.format);var o=t.createDecryptor(n,r).finalize(e.ciphertext);return o},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),w=n.kdf={},x=w.OpenSSL={execute:function(t,e,n,r){r||(r=i.random(8));var o=f.create({keySize:e+n}).compute(t,r),a=i.create(o.words.slice(e),4*n);return o.sigBytes=4*e,g.create({key:o,iv:a,salt:r})}},k=r.PasswordBasedCipher=_.extend({cfg:_.cfg.extend({kdf:x}),encrypt:function(t,e,n,r){r=this.cfg.extend(r);var o=r.kdf.execute(n,t.keySize,t.ivSize);r.iv=o.iv;var i=_.encrypt.call(this,t,e,o.key,r);return i.mixIn(o),i},decrypt:function(t,e,n,r){r=this.cfg.extend(r),e=this._parse(e,r.format);var o=r.kdf.execute(n,t.keySize,t.ivSize,e.salt);r.iv=o.iv;var i=_.decrypt.call(this,t,e,o.key,r);return i}})}()})},{"./core":52}],52:[function(t,e,n){!function(t,r){"object"==typeof n?e.exports=n=r():"function"==typeof define&&define.amd?define([],r):t.CryptoJS=r()}(this,function(){var t=t||function(t,e){var n={},r=n.lib={},o=r.Base=function(){function t(){}return{extend:function(e){t.prototype=this;var n=new t;return e&&n.mixIn(e),n.hasOwnProperty("init")||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),i=r.WordArray=o.extend({init:function(t,n){t=this.words=t||[],n!=e?this.sigBytes=n:this.sigBytes=4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,n=t.words,r=this.sigBytes,o=t.sigBytes;if(this.clamp(),r%4)for(var i=0;o>i;i++){var a=n[i>>>2]>>>24-i%4*8&255;e[r+i>>>2]|=a<<24-(r+i)%4*8}else for(var i=0;o>i;i+=4)e[r+i>>>2]=n[i>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,n=this.sigBytes;e[n>>>2]&=4294967295<<32-n%4*8,e.length=t.ceil(n/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var n,r=[],o=function(e){var e=e,n=987654321,r=4294967295;return function(){n=36969*(65535&n)+(n>>16)&r,e=18e3*(65535&e)+(e>>16)&r;var o=(n<<16)+e&r;return o/=4294967296,o+=.5,o*(t.random()>.5?1:-1)}},a=0;e>a;a+=4){var s=o(4294967296*(n||t.random()));n=987654071*s(),r.push(4294967296*s()|0)}return new i.init(r,e)}}),a=n.enc={},s=a.Hex={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push((i>>>4).toString(16)),r.push((15&i).toString(16))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r+=2)n[r>>>3]|=parseInt(t.substr(r,2),16)<<24-r%8*4;return new i.init(n,e/2)}},c=a.Latin1={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(i))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r++)n[r>>>2]|=(255&t.charCodeAt(r))<<24-r%4*8;return new i.init(n,e)}},u=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=u.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var n=this._data,r=n.words,o=n.sigBytes,a=this.blockSize,s=4*a,c=o/s;c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*a,f=t.min(4*u,o);if(u){for(var p=0;u>p;p+=a)this._doProcessBlock(r,p);var l=r.splice(0,u);n.sigBytes-=f}return new i.init(l,f)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(r.Hasher=f.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},blockSize:16,_createHelper:function(t){return function(e,n){return new t.init(n).finalize(e)}},_createHmacHelper:function(t){return function(e,n){return new p.HMAC.init(t,n).finalize(e)}}}),n.algo={});return n}(Math);return t})},{}],53:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=e.enc;o.Base64={stringify:function(t){var e=t.words,n=t.sigBytes,r=this._map;t.clamp();for(var o=[],i=0;n>i;i+=3)for(var a=e[i>>>2]>>>24-i%4*8&255,s=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,u=a<<16|s<<8|c,f=0;4>f&&n>i+.75*f;f++)o.push(r.charAt(u>>>6*(3-f)&63));var p=r.charAt(64);if(p)for(;o.length%4;)o.push(p);return o.join("")},parse:function(t){var e=t.length,n=this._map,o=n.charAt(64);if(o){var i=t.indexOf(o);-1!=i&&(e=i)}for(var a=[],s=0,c=0;e>c;c++)if(c%4){var u=n.indexOf(t.charAt(c-1))<>>6-c%4*2;a[s>>>2]|=(u|f)<<24-s%4*8,s++}return r.create(a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64})},{"./core":52}],54:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(t){return t<<8&4278255360|t>>>8&16711935}var n=t,r=n.lib,o=r.WordArray,i=n.enc;i.Utf16=i.Utf16BE={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;n>o;o+=2){var i=e[o>>>2]>>>16-o%4*8&65535;r.push(String.fromCharCode(i))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;e>r;r++)n[r>>>1]|=t.charCodeAt(r)<<16-r%2*16;return o.create(n,2*e)}};i.Utf16LE={stringify:function(t){for(var n=t.words,r=t.sigBytes,o=[],i=0;r>i;i+=2){var a=e(n[i>>>2]>>>16-i%4*8&65535);o.push(String.fromCharCode(a))}return o.join("")},parse:function(t){for(var n=t.length,r=[],i=0;n>i;i++)r[i>>>1]|=e(t.charCodeAt(i)<<16-i%2*16);return o.create(r,2*n)}}}(),t.enc.Utf16})},{"./core":52}],55:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.Base,o=n.WordArray,i=e.algo,a=i.MD5,s=i.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var n=this.cfg,r=n.hasher.create(),i=o.create(),a=i.words,s=n.keySize,c=n.iterations;a.lengthf;f++)u=r.finalize(u),r.reset();i.concat(u)}return i.sigBytes=4*s,i}});e.EvpKDF=function(t,e,n){return s.create(n).compute(t,e)}}(),t.EvpKDF})},{"./core":52,"./hmac":57,"./sha1":76}],56:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.CipherParams,i=n.enc,a=i.Hex,s=n.format;s.Hex={stringify:function(t){return t.ciphertext.toString(a)},parse:function(t){var e=a.parse(t);return o.create({ciphertext:e})}}}(),t.format.Hex})},{"./cipher-core":51,"./core":52}],57:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){!function(){var e=t,n=e.lib,r=n.Base,o=e.enc,i=o.Utf8,a=e.algo;a.HMAC=r.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=i.parse(e));var n=t.blockSize,r=4*n;e.sigBytes>r&&(e=t.finalize(e)),e.clamp();for(var o=this._oKey=e.clone(),a=this._iKey=e.clone(),s=o.words,c=a.words,u=0;n>u;u++)s[u]^=1549556828,c[u]^=909522486;o.sigBytes=a.sigBytes=r,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,n=e.finalize(t);e.reset();var r=e.finalize(this._oKey.clone().concat(n));return r}})}()})},{"./core":52}],58:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core"),t("./lib-typedarrays"),t("./enc-utf16"),t("./enc-base64"),t("./md5"),t("./sha1"),t("./sha256"),t("./sha224"),t("./sha512"),t("./sha384"),t("./sha3"),t("./ripemd160"),t("./hmac"),t("./pbkdf2"),t("./evpkdf"),t("./cipher-core"),t("./mode-cfb"),t("./mode-ctr"),t("./mode-ctr-gladman"),t("./mode-ofb"),t("./mode-ecb"),t("./pad-ansix923"),t("./pad-iso10126"),t("./pad-iso97971"),t("./pad-zeropadding"),t("./pad-nopadding"),t("./format-hex"),t("./aes"),t("./tripledes"),t("./rc4"),t("./rabbit"),t("./rabbit-legacy")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./lib-typedarrays","./enc-utf16","./enc-base64","./md5","./sha1","./sha256","./sha224","./sha512","./sha384","./sha3","./ripemd160","./hmac","./pbkdf2","./evpkdf","./cipher-core","./mode-cfb","./mode-ctr","./mode-ctr-gladman","./mode-ofb","./mode-ecb","./pad-ansix923","./pad-iso10126","./pad-iso97971","./pad-zeropadding","./pad-nopadding","./format-hex","./aes","./tripledes","./rc4","./rabbit","./rabbit-legacy"],o):r.CryptoJS=o(r.CryptoJS)}(this,function(t){return t})},{"./aes":50,"./cipher-core":51,"./core":52,"./enc-base64":53,"./enc-utf16":54,"./evpkdf":55,"./format-hex":56,"./hmac":57,"./lib-typedarrays":59,"./md5":60,"./mode-cfb":61,"./mode-ctr":63,"./mode-ctr-gladman":62,"./mode-ecb":64,"./mode-ofb":65,"./pad-ansix923":66,"./pad-iso10126":67,"./pad-iso97971":68,"./pad-nopadding":69,"./pad-zeropadding":70,"./pbkdf2":71,"./rabbit":73,"./rabbit-legacy":72,"./rc4":74,"./ripemd160":75,"./sha1":76,"./sha224":77,"./sha256":78,"./sha3":79,"./sha384":80,"./sha512":81,"./tripledes":82,"./x64-core":83}],59:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){if("function"==typeof ArrayBuffer){var e=t,n=e.lib,r=n.WordArray,o=r.init,i=r.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,n=[],r=0;e>r;r++)n[r>>>2]|=t[r]<<24-r%4*8;o.call(this,n,e)}else o.apply(this,arguments)};i.prototype=r}}(),t.lib.WordArray})},{"./core":52}],60:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){function n(t,e,n,r,o,i,a){var s=t+(e&n|~e&r)+o+a;return(s<>>32-i)+e}function r(t,e,n,r,o,i,a){var s=t+(e&r|n&~r)+o+a;return(s<>>32-i)+e}function o(t,e,n,r,o,i,a){var s=t+(e^n^r)+o+a;return(s<>>32-i)+e}function i(t,e,n,r,o,i,a){var s=t+(n^(e|~r))+o+a;return(s<>>32-i)+e}var a=t,s=a.lib,c=s.WordArray,u=s.Hasher,f=a.algo,p=[];!function(){for(var t=0;64>t;t++)p[t]=4294967296*e.abs(e.sin(t+1))|0}();var l=f.MD5=u.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var a=0;16>a;a++){var s=e+a,c=t[s];t[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var u=this._hash.words,f=t[e+0],l=t[e+1],h=t[e+2],d=t[e+3],m=t[e+4],y=t[e+5],g=t[e+6],v=t[e+7],b=t[e+8],_=t[e+9],w=t[e+10],x=t[e+11],k=t[e+12],B=t[e+13],S=t[e+14],A=t[e+15],C=u[0],F=u[1],I=u[2],O=u[3];C=n(C,F,I,O,f,7,p[0]),O=n(O,C,F,I,l,12,p[1]),I=n(I,O,C,F,h,17,p[2]),F=n(F,I,O,C,d,22,p[3]),C=n(C,F,I,O,m,7,p[4]),O=n(O,C,F,I,y,12,p[5]),I=n(I,O,C,F,g,17,p[6]),F=n(F,I,O,C,v,22,p[7]),C=n(C,F,I,O,b,7,p[8]),O=n(O,C,F,I,_,12,p[9]),I=n(I,O,C,F,w,17,p[10]),F=n(F,I,O,C,x,22,p[11]),C=n(C,F,I,O,k,7,p[12]),O=n(O,C,F,I,B,12,p[13]),I=n(I,O,C,F,S,17,p[14]),F=n(F,I,O,C,A,22,p[15]),C=r(C,F,I,O,l,5,p[16]),O=r(O,C,F,I,g,9,p[17]),I=r(I,O,C,F,x,14,p[18]),F=r(F,I,O,C,f,20,p[19]),C=r(C,F,I,O,y,5,p[20]),O=r(O,C,F,I,w,9,p[21]),I=r(I,O,C,F,A,14,p[22]),F=r(F,I,O,C,m,20,p[23]),C=r(C,F,I,O,_,5,p[24]),O=r(O,C,F,I,S,9,p[25]),I=r(I,O,C,F,d,14,p[26]),F=r(F,I,O,C,b,20,p[27]),C=r(C,F,I,O,B,5,p[28]),O=r(O,C,F,I,h,9,p[29]),I=r(I,O,C,F,v,14,p[30]),F=r(F,I,O,C,k,20,p[31]),C=o(C,F,I,O,y,4,p[32]),O=o(O,C,F,I,b,11,p[33]),I=o(I,O,C,F,x,16,p[34]),F=o(F,I,O,C,S,23,p[35]),C=o(C,F,I,O,l,4,p[36]),O=o(O,C,F,I,m,11,p[37]),I=o(I,O,C,F,v,16,p[38]),F=o(F,I,O,C,w,23,p[39]),C=o(C,F,I,O,B,4,p[40]),O=o(O,C,F,I,f,11,p[41]),I=o(I,O,C,F,d,16,p[42]),F=o(F,I,O,C,g,23,p[43]),C=o(C,F,I,O,_,4,p[44]),O=o(O,C,F,I,k,11,p[45]),I=o(I,O,C,F,A,16,p[46]),F=o(F,I,O,C,h,23,p[47]),C=i(C,F,I,O,f,6,p[48]),O=i(O,C,F,I,v,10,p[49]),I=i(I,O,C,F,S,15,p[50]),F=i(F,I,O,C,y,21,p[51]),C=i(C,F,I,O,k,6,p[52]),O=i(O,C,F,I,d,10,p[53]),I=i(I,O,C,F,w,15,p[54]),F=i(F,I,O,C,l,21,p[55]),C=i(C,F,I,O,b,6,p[56]),O=i(O,C,F,I,A,10,p[57]),I=i(I,O,C,F,g,15,p[58]),F=i(F,I,O,C,B,21,p[59]),C=i(C,F,I,O,m,6,p[60]),O=i(O,C,F,I,x,10,p[61]),I=i(I,O,C,F,h,15,p[62]),F=i(F,I,O,C,_,21,p[63]),u[0]=u[0]+C|0,u[1]=u[1]+F|0,u[2]=u[2]+I|0,u[3]=u[3]+O|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296),a=r;n[(o+64>>>9<<4)+15]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[(o+64>>>9<<4)+14]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,c=s.words,u=0;4>u;u++){var f=c[u];c[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return s},clone:function(){var t=u.clone.call(this);return t._hash=this._hash.clone(),t}});a.MD5=u._createHelper(l),a.HmacMD5=u._createHmacHelper(l)}(Math),t.MD5})},{"./core":52}],61:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CFB=function(){function e(t,e,n,r){var o=this._iv;if(o){var i=o.slice(0);this._iv=void 0}else var i=this._prevBlock;r.encryptBlock(i,0);for(var a=0;n>a;a++)t[e+a]^=i[a]}var n=t.lib.BlockCipherMode.extend();return n.Encryptor=n.extend({processBlock:function(t,n){var r=this._cipher,o=r.blockSize;e.call(this,t,n,o,r),this._prevBlock=t.slice(n,n+o)}}),n.Decryptor=n.extend({processBlock:function(t,n){var r=this._cipher,o=r.blockSize,i=t.slice(n,n+o);e.call(this,t,n,o,r),this._prevBlock=i}}),n}(),t.mode.CFB})},{"./cipher-core":51,"./core":52}],62:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CTRGladman=function(){function e(t){if(255===(t>>24&255)){var e=t>>16&255,n=t>>8&255,r=255&t;255===e?(e=0,255===n?(n=0,255===r?r=0:++r):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=r}else t+=1<<24;return t}function n(t){return 0===(t[0]=e(t[0]))&&(t[1]=e(t[1])),t}var r=t.lib.BlockCipherMode.extend(),o=r.Encryptor=r.extend({processBlock:function(t,e){var r=this._cipher,o=r.blockSize,i=this._iv,a=this._counter;i&&(a=this._counter=i.slice(0),this._iv=void 0),n(a);var s=a.slice(0);r.encryptBlock(s,0);for(var c=0;o>c;c++)t[e+c]^=s[c]}});return r.Decryptor=o,r}(),t.mode.CTRGladman})},{"./cipher-core":51,"./core":52}],63:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.CTR=function(){var e=t.lib.BlockCipherMode.extend(),n=e.Encryptor=e.extend({processBlock:function(t,e){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var a=i.slice(0);n.encryptBlock(a,0),i[r-1]=i[r-1]+1|0;for(var s=0;r>s;s++)t[e+s]^=a[s]}});return e.Decryptor=n,e}(),t.mode.CTR})},{"./cipher-core":51,"./core":52}],64:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.ECB=function(){var e=t.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),e.Decryptor=e.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),e}(),t.mode.ECB})},{"./cipher-core":51,"./core":52}],65:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.mode.OFB=function(){var e=t.lib.BlockCipherMode.extend(),n=e.Encryptor=e.extend({processBlock:function(t,e){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),n.encryptBlock(i,0);for(var a=0;r>a;a++)t[e+a]^=i[a]}});return e.Decryptor=n,e}(),t.mode.OFB})},{"./cipher-core":51,"./core":52}],66:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.AnsiX923={pad:function(t,e){var n=t.sigBytes,r=4*e,o=r-n%r,i=n+o-1;t.clamp(),t.words[i>>>2]|=o<<24-i%4*8,t.sigBytes+=o},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},{"./cipher-core":51,"./core":52}],67:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.Iso10126={pad:function(e,n){var r=4*n,o=r-e.sigBytes%r;e.concat(t.lib.WordArray.random(o-1)).concat(t.lib.WordArray.create([o<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},{"./cipher-core":51,"./core":52}],68:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.Iso97971={pad:function(e,n){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,n)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},{"./cipher-core":51,"./core":52}],69:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},{"./cipher-core":51,"./core":52}],70:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return t.pad.ZeroPadding={pad:function(t,e){var n=4*e;t.clamp(),t.sigBytes+=n-(t.sigBytes%n||n)},unpad:function(t){for(var e=t.words,n=t.sigBytes-1;!(e[n>>>2]>>>24-n%4*8&255);)n--;t.sigBytes=n+1}},t.pad.ZeroPadding})},{"./cipher-core":51,"./core":52}],71:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.Base,o=n.WordArray,i=e.algo,a=i.SHA1,s=i.HMAC,c=i.PBKDF2=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var n=this.cfg,r=s.create(n.hasher,t),i=o.create(),a=o.create([1]),c=i.words,u=a.words,f=n.keySize,p=n.iterations;c.lengthy;y++){m=r.finalize(m),r.reset();for(var g=m.words,v=0;d>v;v++)h[v]^=g[v]}i.concat(l),u[0]++}return i.sigBytes=4*f,i}});e.PBKDF2=function(t,e,n){return c.create(n).compute(t,e)}}(),t.PBKDF2})},{"./core":52,"./hmac":57,"./sha1":76}],72:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,n=0;8>n;n++)s[n]=e[n];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var n=0;8>n;n++){var r=t[n]+e[n],o=65535&r,i=r>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&r)*r|0)+((65535&r)*r|0);c[n]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=[],s=[],c=[],u=i.RabbitLegacy=o.extend({_doReset:function(){var t=this._key.words,n=this.cfg.iv,r=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],o=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;4>i;i++)e.call(this);for(var i=0;8>i;i++)o[i]^=r[i+4&7];if(n){var a=n.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,l=f<<16|65535&u;o[0]^=u,o[1]^=p,o[2]^=f,o[3]^=l,o[4]^=u,o[5]^=p,o[6]^=f,o[7]^=l;for(var i=0;4>i;i++)e.call(this)}},_doProcessBlock:function(t,n){var r=this._X;e.call(this),a[0]=r[0]^r[5]>>>16^r[3]<<16,a[1]=r[2]^r[7]>>>16^r[5]<<16,a[2]=r[4]^r[1]>>>16^r[7]<<16,a[3]=r[6]^r[3]>>>16^r[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[n+o]^=a[o]},blockSize:4,ivSize:2});n.RabbitLegacy=o._createHelper(u)}(),t.RabbitLegacy})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],73:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,n=0;8>n;n++)s[n]=e[n];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var n=0;8>n;n++){var r=t[n]+e[n],o=65535&r,i=r>>>16,a=((o*o>>>17)+o*i>>>15)+i*i,u=((4294901760&r)*r|0)+((65535&r)*r|0);c[n]=a^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=[],s=[],c=[],u=i.Rabbit=o.extend({_doReset:function(){for(var t=this._key.words,n=this.cfg.iv,r=0;4>r;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);var o=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;4>r;r++)e.call(this);for(var r=0;8>r;r++)i[r]^=o[r+4&7];if(n){var a=n.words,s=a[0],c=a[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),p=u>>>16|4294901760&f,l=f<<16|65535&u;i[0]^=u,i[1]^=p,i[2]^=f,i[3]^=l,i[4]^=u,i[5]^=p,i[6]^=f,i[7]^=l;for(var r=0;4>r;r++)e.call(this)}},_doProcessBlock:function(t,n){var r=this._X;e.call(this),a[0]=r[0]^r[5]>>>16^r[3]<<16,a[1]=r[2]^r[7]>>>16^r[5]<<16,a[2]=r[4]^r[1]>>>16^r[7]<<16,a[3]=r[6]^r[3]>>>16^r[1]<<16;for(var o=0;4>o;o++)a[o]=16711935&(a[o]<<8|a[o]>>>24)|4278255360&(a[o]<<24|a[o]>>>8),t[n+o]^=a[o]},blockSize:4,ivSize:2});n.Rabbit=o._createHelper(u)}(),t.Rabbit})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],74:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){for(var t=this._S,e=this._i,n=this._j,r=0,o=0;4>o;o++){e=(e+1)%256,n=(n+t[e])%256;var i=t[e];t[e]=t[n],t[n]=i,r|=t[(t[e]+t[n])%256]<<24-8*o}return this._i=e,this._j=n,r}var n=t,r=n.lib,o=r.StreamCipher,i=n.algo,a=i.RC4=o.extend({_doReset:function(){for(var t=this._key,e=t.words,n=t.sigBytes,r=this._S=[],o=0;256>o;o++)r[o]=o;for(var o=0,i=0;256>o;o++){var a=o%n,s=e[a>>>2]>>>24-a%4*8&255;i=(i+r[o]+s)%256;var c=r[o];r[o]=r[i],r[i]=c}this._i=this._j=0},_doProcessBlock:function(t,n){t[n]^=e.call(this)},keySize:8,ivSize:0});n.RC4=o._createHelper(a);var s=i.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)e.call(this)}});n.RC4Drop=o._createHelper(s)}(),t.RC4})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],75:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){function n(t,e,n){return t^e^n}function r(t,e,n){return t&e|~t&n}function o(t,e,n){return(t|~e)^n}function i(t,e,n){return t&n|e&~n}function a(t,e,n){return t^(e|~n)}function s(t,e){return t<>>32-e}var c=t,u=c.lib,f=u.WordArray,p=u.Hasher,l=c.algo,h=f.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),d=f.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),m=f.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),y=f.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),g=f.create([0,1518500249,1859775393,2400959708,2840853838]),v=f.create([1352829926,1548603684,1836072691,2053994217,0]),b=l.RIPEMD160=p.extend({_doReset:function(){this._hash=f.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var c=0;16>c;c++){var u=e+c,f=t[u];t[u]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}var p,l,b,_,w,x,k,B,S,A,C=this._hash.words,F=g.words,I=v.words,O=h.words,D=d.words,N=m.words,T=y.words;x=p=C[0],k=l=C[1],B=b=C[2],S=_=C[3],A=w=C[4];for(var P,c=0;80>c;c+=1)P=p+t[e+O[c]]|0,P+=16>c?n(l,b,_)+F[0]:32>c?r(l,b,_)+F[1]:48>c?o(l,b,_)+F[2]:64>c?i(l,b,_)+F[3]:a(l,b,_)+F[4],P=0|P,P=s(P,N[c]),P=P+w|0,p=w,w=_,_=s(b,10),b=l,l=P,P=x+t[e+D[c]]|0,P+=16>c?a(k,B,S)+I[0]:32>c?i(k,B,S)+I[1]:48>c?o(k,B,S)+I[2]:64>c?r(k,B,S)+I[3]:n(k,B,S)+I[4],P=0|P,P=s(P,T[c]),P=P+A|0,x=A,A=S,S=s(B,10),B=k,k=P;P=C[1]+b+S|0,C[1]=C[2]+_+A|0,C[2]=C[3]+w+x|0,C[3]=C[4]+p+k|0,C[4]=C[0]+l+B|0,C[0]=P},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;e[r>>>5]|=128<<24-r%32,e[(r+64>>>9<<4)+14]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),t.sigBytes=4*(e.length+1),this._process();for(var o=this._hash,i=o.words,a=0;5>a;a++){var s=i[a];i[a]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return o},clone:function(){var t=p.clone.call(this);return t._hash=this._hash.clone(),t}});c.RIPEMD160=p._createHelper(b),c.HmacRIPEMD160=p._createHmacHelper(b)}(Math),t.RIPEMD160})},{"./core":52}],76:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=n.Hasher,i=e.algo,a=[],s=i.SHA1=o.extend({ -_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],s=n[3],c=n[4],u=0;80>u;u++){if(16>u)a[u]=0|t[e+u];else{var f=a[u-3]^a[u-8]^a[u-14]^a[u-16];a[u]=f<<1|f>>>31}var p=(r<<5|r>>>27)+c+a[u];p+=20>u?(o&i|~o&s)+1518500249:40>u?(o^i^s)+1859775393:60>u?(o&i|o&s|i&s)-1894007588:(o^i^s)-899497514,c=s,s=i,i=o<<30|o>>>2,o=r,r=p}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return e[r>>>5]|=128<<24-r%32,e[(r+64>>>9<<4)+14]=Math.floor(n/4294967296),e[(r+64>>>9<<4)+15]=n,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=o._createHelper(s),e.HmacSHA1=o._createHmacHelper(s)}(),t.SHA1})},{"./core":52}],77:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./sha256")):"function"==typeof define&&define.amd?define(["./core","./sha256"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.lib,r=n.WordArray,o=e.algo,i=o.SHA256,a=o.SHA224=i.extend({_doReset:function(){this._hash=new r.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=i._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=i._createHelper(a),e.HmacSHA224=i._createHmacHelper(a)}(),t.SHA224})},{"./core":52,"./sha256":78}],78:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.algo,s=[],c=[];!function(){function t(t){for(var n=e.sqrt(t),r=2;n>=r;r++)if(!(t%r))return!1;return!0}function n(t){return 4294967296*(t-(0|t))|0}for(var r=2,o=0;64>o;)t(r)&&(8>o&&(s[o]=n(e.pow(r,.5))),c[o]=n(e.pow(r,1/3)),o++),r++}();var u=[],f=a.SHA256=i.extend({_doReset:function(){this._hash=new o.init(s.slice(0))},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],a=n[3],s=n[4],f=n[5],p=n[6],l=n[7],h=0;64>h;h++){if(16>h)u[h]=0|t[e+h];else{var d=u[h-15],m=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,y=u[h-2],g=(y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10;u[h]=m+u[h-7]+g+u[h-16]}var v=s&f^~s&p,b=r&o^r&i^o&i,_=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),w=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),x=l+w+v+c[h]+u[h],k=_+b;l=p,p=f,f=s,s=a+x|0,a=i,i=o,o=r,r=x+k|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+a|0,n[4]=n[4]+s|0,n[5]=n[5]+f|0,n[6]=n[6]+p|0,n[7]=n[7]+l|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[(o+64>>>9<<4)+14]=e.floor(r/4294967296),n[(o+64>>>9<<4)+15]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});n.SHA256=i._createHelper(f),n.HmacSHA256=i._createHmacHelper(f)}(Math),t.SHA256})},{"./core":52}],79:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.x64,s=a.Word,c=n.algo,u=[],f=[],p=[];!function(){for(var t=1,e=0,n=0;24>n;n++){u[t+5*e]=(n+1)*(n+2)/2%64;var r=e%5,o=(2*t+3*e)%5;t=r,e=o}for(var t=0;5>t;t++)for(var e=0;5>e;e++)f[t+5*e]=e+(2*t+3*e)%5*5;for(var i=1,a=0;24>a;a++){for(var c=0,l=0,h=0;7>h;h++){if(1&i){var d=(1<d?l^=1<t;t++)l[t]=s.create()}();var h=c.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;25>e;e++)t[e]=new s.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var n=this._state,r=this.blockSize/2,o=0;r>o;o++){var i=t[e+2*o],a=t[e+2*o+1];i=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8);var s=n[o];s.high^=a,s.low^=i}for(var c=0;24>c;c++){for(var h=0;5>h;h++){for(var d=0,m=0,y=0;5>y;y++){var s=n[h+5*y];d^=s.high,m^=s.low}var g=l[h];g.high=d,g.low=m}for(var h=0;5>h;h++)for(var v=l[(h+4)%5],b=l[(h+1)%5],_=b.high,w=b.low,d=v.high^(_<<1|w>>>31),m=v.low^(w<<1|_>>>31),y=0;5>y;y++){var s=n[h+5*y];s.high^=d,s.low^=m}for(var x=1;25>x;x++){var s=n[x],k=s.high,B=s.low,S=u[x];if(32>S)var d=k<>>32-S,m=B<>>32-S;else var d=B<>>64-S,m=k<>>64-S;var A=l[f[x]];A.high=d,A.low=m}var C=l[0],F=n[0];C.high=F.high,C.low=F.low;for(var h=0;5>h;h++)for(var y=0;5>y;y++){var x=h+5*y,s=n[x],I=l[x],O=l[(h+1)%5+5*y],D=l[(h+2)%5+5*y];s.high=I.high^~O.high&D.high,s.low=I.low^~O.low&D.low}var s=n[0],N=p[c];s.high^=N.high,s.low^=N.low}},_doFinalize:function(){var t=this._data,n=t.words,r=(8*this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;n[r>>>5]|=1<<24-r%32,n[(e.ceil((r+1)/i)*i>>>5)-1]|=128,t.sigBytes=4*n.length,this._process();for(var a=this._state,s=this.cfg.outputLength/8,c=s/8,u=[],f=0;c>f;f++){var p=a[f],l=p.high,h=p.low;l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8),u.push(h),u.push(l)}return new o.init(u,s)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),n=0;25>n;n++)e[n]=e[n].clone();return t}});n.SHA3=i._createHelper(h),n.HmacSHA3=i._createHmacHelper(h)}(Math),t.SHA3})},{"./core":52,"./x64-core":83}],80:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core"),t("./sha512")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./sha512"],o):o(r.CryptoJS)}(this,function(t){return function(){var e=t,n=e.x64,r=n.Word,o=n.WordArray,i=e.algo,a=i.SHA512,s=i.SHA384=a.extend({_doReset:function(){this._hash=new o.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=a._createHelper(s),e.HmacSHA384=a._createHmacHelper(s)}(),t.SHA384})},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(){return a.create.apply(a,arguments)}var n=t,r=n.lib,o=r.Hasher,i=n.x64,a=i.Word,s=i.WordArray,c=n.algo,u=[e(1116352408,3609767458),e(1899447441,602891725),e(3049323471,3964484399),e(3921009573,2173295548),e(961987163,4081628472),e(1508970993,3053834265),e(2453635748,2937671579),e(2870763221,3664609560),e(3624381080,2734883394),e(310598401,1164996542),e(607225278,1323610764),e(1426881987,3590304994),e(1925078388,4068182383),e(2162078206,991336113),e(2614888103,633803317),e(3248222580,3479774868),e(3835390401,2666613458),e(4022224774,944711139),e(264347078,2341262773),e(604807628,2007800933),e(770255983,1495990901),e(1249150122,1856431235),e(1555081692,3175218132),e(1996064986,2198950837),e(2554220882,3999719339),e(2821834349,766784016),e(2952996808,2566594879),e(3210313671,3203337956),e(3336571891,1034457026),e(3584528711,2466948901),e(113926993,3758326383),e(338241895,168717936),e(666307205,1188179964),e(773529912,1546045734),e(1294757372,1522805485),e(1396182291,2643833823),e(1695183700,2343527390),e(1986661051,1014477480),e(2177026350,1206759142),e(2456956037,344077627),e(2730485921,1290863460),e(2820302411,3158454273),e(3259730800,3505952657),e(3345764771,106217008),e(3516065817,3606008344),e(3600352804,1432725776),e(4094571909,1467031594),e(275423344,851169720),e(430227734,3100823752),e(506948616,1363258195),e(659060556,3750685593),e(883997877,3785050280),e(958139571,3318307427),e(1322822218,3812723403),e(1537002063,2003034995),e(1747873779,3602036899),e(1955562222,1575990012),e(2024104815,1125592928),e(2227730452,2716904306),e(2361852424,442776044),e(2428436474,593698344),e(2756734187,3733110249),e(3204031479,2999351573),e(3329325298,3815920427),e(3391569614,3928383900),e(3515267271,566280711),e(3940187606,3454069534),e(4118630271,4000239992),e(116418474,1914138554),e(174292421,2731055270),e(289380356,3203993006),e(460393269,320620315),e(685471733,587496836),e(852142971,1086792851),e(1017036298,365543100),e(1126000580,2618297676),e(1288033470,3409855158),e(1501505948,4234509866),e(1607167915,987167468),e(1816402316,1246189591)],f=[];!function(){for(var t=0;80>t;t++)f[t]=e()}();var p=c.SHA512=o.extend({_doReset:function(){this._hash=new s.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],a=n[3],s=n[4],c=n[5],p=n[6],l=n[7],h=r.high,d=r.low,m=o.high,y=o.low,g=i.high,v=i.low,b=a.high,_=a.low,w=s.high,x=s.low,k=c.high,B=c.low,S=p.high,A=p.low,C=l.high,F=l.low,I=h,O=d,D=m,N=y,T=g,P=v,E=b,R=_,M=w,H=x,j=k,q=B,L=S,z=A,U=C,W=F,J=0;80>J;J++){var G=f[J];if(16>J)var X=G.high=0|t[e+2*J],$=G.low=0|t[e+2*J+1];else{var V=f[J-15],K=V.high,Z=V.low,Y=(K>>>1|Z<<31)^(K>>>8|Z<<24)^K>>>7,Q=(Z>>>1|K<<31)^(Z>>>8|K<<24)^(Z>>>7|K<<25),tt=f[J-2],et=tt.high,nt=tt.low,rt=(et>>>19|nt<<13)^(et<<3|nt>>>29)^et>>>6,ot=(nt>>>19|et<<13)^(nt<<3|et>>>29)^(nt>>>6|et<<26),it=f[J-7],at=it.high,st=it.low,ct=f[J-16],ut=ct.high,ft=ct.low,$=Q+st,X=Y+at+(Q>>>0>$>>>0?1:0),$=$+ot,X=X+rt+(ot>>>0>$>>>0?1:0),$=$+ft,X=X+ut+(ft>>>0>$>>>0?1:0);G.high=X,G.low=$}var pt=M&j^~M&L,lt=H&q^~H&z,ht=I&D^I&T^D&T,dt=O&N^O&P^N&P,mt=(I>>>28|O<<4)^(I<<30|O>>>2)^(I<<25|O>>>7),yt=(O>>>28|I<<4)^(O<<30|I>>>2)^(O<<25|I>>>7),gt=(M>>>14|H<<18)^(M>>>18|H<<14)^(M<<23|H>>>9),vt=(H>>>14|M<<18)^(H>>>18|M<<14)^(H<<23|M>>>9),bt=u[J],_t=bt.high,wt=bt.low,xt=W+vt,kt=U+gt+(W>>>0>xt>>>0?1:0),xt=xt+lt,kt=kt+pt+(lt>>>0>xt>>>0?1:0),xt=xt+wt,kt=kt+_t+(wt>>>0>xt>>>0?1:0),xt=xt+$,kt=kt+X+($>>>0>xt>>>0?1:0),Bt=yt+dt,St=mt+ht+(yt>>>0>Bt>>>0?1:0);U=L,W=z,L=j,z=q,j=M,q=H,H=R+xt|0,M=E+kt+(R>>>0>H>>>0?1:0)|0,E=T,R=P,T=D,P=N,D=I,N=O,O=xt+Bt|0,I=kt+St+(xt>>>0>O>>>0?1:0)|0}d=r.low=d+O,r.high=h+I+(O>>>0>d>>>0?1:0),y=o.low=y+N,o.high=m+D+(N>>>0>y>>>0?1:0),v=i.low=v+P,i.high=g+T+(P>>>0>v>>>0?1:0),_=a.low=_+R,a.high=b+E+(R>>>0>_>>>0?1:0),x=s.low=x+H,s.high=w+M+(H>>>0>x>>>0?1:0),B=c.low=B+q,c.high=k+j+(q>>>0>B>>>0?1:0),A=p.low=A+z,p.high=S+L+(z>>>0>A>>>0?1:0),F=l.low=F+W,l.high=C+U+(W>>>0>F>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;e[r>>>5]|=128<<24-r%32,e[(r+128>>>10<<5)+30]=Math.floor(n/4294967296),e[(r+128>>>10<<5)+31]=n,t.sigBytes=4*e.length,this._process();var o=this._hash.toX32();return o},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});n.SHA512=o._createHelper(p),n.HmacSHA512=o._createHmacHelper(p)}(),t.SHA512})},{"./core":52,"./x64-core":83}],82:[function(t,e,n){!function(r,o,i){"object"==typeof n?e.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(r.CryptoJS)}(this,function(t){return function(){function e(t,e){var n=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=n,this._lBlock^=n<>>t^this._lBlock)&e;this._lBlock^=n,this._rBlock^=n<r;r++){var o=c[r]-1;n[r]=e[o>>>5]>>>31-o%32&1}for(var i=this._subKeys=[],a=0;16>a;a++){for(var s=i[a]=[],p=f[a],r=0;24>r;r++)s[r/6|0]|=n[(u[r]-1+p)%28]<<31-r%6,s[4+(r/6|0)]|=n[28+(u[r+24]-1+p)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(var r=1;7>r;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var l=this._invSubKeys=[],r=0;16>r;r++)l[r]=i[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,r,o){this._lBlock=t[r],this._rBlock=t[r+1],e.call(this,4,252645135),e.call(this,16,65535),n.call(this,2,858993459),n.call(this,8,16711935),e.call(this,1,1431655765);for(var i=0;16>i;i++){for(var a=o[i],s=this._lBlock,c=this._rBlock,u=0,f=0;8>f;f++)u|=p[f][((c^a[f])&l[f])>>>0];this._lBlock=c,this._rBlock=s^u}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,e.call(this,1,1431655765),n.call(this,8,16711935),n.call(this,2,858993459),e.call(this,16,65535),e.call(this,4,252645135),t[r]=this._lBlock,t[r+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});r.DES=a._createHelper(h);var d=s.TripleDES=a.extend({_doReset:function(){var t=this._key,e=t.words;this._des1=h.createEncryptor(i.create(e.slice(0,2))),this._des2=h.createEncryptor(i.create(e.slice(2,4))),this._des3=h.createEncryptor(i.create(e.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});r.TripleDES=a._createHelper(d)}(),t.TripleDES})},{"./cipher-core":51,"./core":52,"./enc-base64":53,"./evpkdf":55,"./md5":60}],83:[function(t,e,n){!function(r,o){"object"==typeof n?e.exports=n=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)}(this,function(t){return function(e){var n=t,r=n.lib,o=r.Base,i=r.WordArray,a=n.x64={};a.Word=o.extend({init:function(t,e){this.high=t,this.low=e}}),a.WordArray=o.extend({init:function(t,n){t=this.words=t||[],n!=e?this.sigBytes=n:this.sigBytes=8*t.length},toX32:function(){for(var t=this.words,e=t.length,n=[],r=0;e>r;r++){var o=t[r];n.push(o.high),n.push(o.low)}return i.create(n,this.sigBytes)},clone:function(){for(var t=o.clone.call(this),e=t.words=this.words.slice(0),n=e.length,r=0;n>r;r++)e[r]=e[r].clone();return t}})}(),t})},{"./core":52}],84:[function(t,e,n){!function(t){function r(t){for(var e,n,r=[],o=0,i=t.length;i>o;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function o(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=v(e>>>10&1023|55296),e=56320|1023&e),o+=v(e);return o}function i(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return v(t>>e&63|128)}function s(t){if(0==(4294967168&t))return v(t);var e="";return 0==(4294965248&t)?e=v(t>>6&31|192):0==(4294901760&t)?(i(t),e=v(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=v(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=v(63&t|128)}function c(t){for(var e,n=r(t),o=n.length,i=-1,a="";++i=y)throw Error("Invalid byte index");var t=255&m[g];if(g++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function f(){var t,e,n,r,o;if(g>y)throw Error("Invalid byte index");if(g==y)return!1;if(t=255&m[g],g++,0==(128&t))return t;if(192==(224&t)){var e=u();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=u(),n=u(),o=(15&t)<<12|e<<6|n,o>=2048)return i(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=u(),n=u(),r=u(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function p(t){m=r(t),y=m.length,g=0;for(var e,n=[];(e=f())!==!1;)n.push(e);return o(n)}var l="object"==typeof n&&n,h="object"==typeof e&&e&&e.exports==l&&e,d="object"==typeof global&&global;(d.global===d||d.window===d)&&(t=d);var m,y,g,v=String.fromCharCode,b={version:"2.0.0",encode:c,decode:p};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return b});else if(l&&!l.nodeType)if(h)h.exports=b;else{var _={},w=_.hasOwnProperty;for(var x in b)w.call(b,x)&&(l[x]=b[x])}else t.utf8=b}(this)},{}],"bignumber.js":[function(t,e,n){!function(n){"use strict";function r(t){function e(t,r){var o,i,a,s,c,u,f=this;if(!(f instanceof e))return W&&N(26,"constructor call without new",t),new e(t,r);if(null!=r&&J(r,2,64,E,"base")){if(r=0|r,u=t+"",10==r)return f=new e(t instanceof e?t:u),T(f,H+f.e+1,j);if((s="number"==typeof t)&&0*t!=0||!new RegExp("^-?"+(o="["+x.slice(0,r)+"]+")+"(?:\\."+o+")?$",37>r?"i":"").test(u))return m(f,u,s,r);s?(f.s=0>1/t?(u=u.slice(1),-1):1,W&&u.replace(/^0\.0*|\./,"").length>15&&N(E,w,t),s=!1):f.s=45===u.charCodeAt(0)?(u=u.slice(1),-1):1,u=n(u,10,r,f.s)}else{if(t instanceof e)return f.s=t.s,f.e=t.e,f.c=(t=t.c)?t.slice():t,void(E=0);if((s="number"==typeof t)&&0*t==0){if(f.s=0>1/t?(t=-t,-1):1,t===~~t){for(i=0,a=t;a>=10;a/=10,i++);return f.e=i,f.c=[t],void(E=0)}u=t+""}else{if(!y.test(u=t+""))return m(f,u,s);f.s=45===u.charCodeAt(0)?(u=u.slice(1),-1):1}}for((i=u.indexOf("."))>-1&&(u=u.replace(".","")),(a=u.search(/e/i))>0?(0>i&&(i=a),i+=+u.slice(a+1),u=u.substring(0,a)):0>i&&(i=u.length),a=0;48===u.charCodeAt(a);a++);for(c=u.length;48===u.charCodeAt(--c););if(u=u.slice(a,c+1))if(c=u.length,s&&W&&c>15&&N(E,w,f.s*t),i=i-a-1,i>U)f.c=f.e=null;else if(z>i)f.c=[f.e=0];else{if(f.e=i,f.c=[],a=(i+1)%B,0>i&&(a+=B),c>a){for(a&&f.c.push(+u.slice(0,a)),c-=B;c>a;)f.c.push(+u.slice(a,a+=B));u=u.slice(a),a=B-u.length}else a-=c;for(;a--;u+="0");f.c.push(+u)}else f.c=[f.e=0];E=0}function n(t,n,r,o){var a,s,c,f,l,h,d,m=t.indexOf("."),y=H,g=j;for(37>r&&(t=t.toLowerCase()),m>=0&&(c=$,$=0,t=t.replace(".",""),d=new e(r),l=d.pow(t.length-m),$=c,d.c=u(p(i(l.c),l.e),10,n),d.e=d.c.length),h=u(t,r,n),s=c=h.length;0==h[--c];h.pop());if(!h[0])return"0";if(0>m?--s:(l.c=h,l.e=s,l.s=o,l=P(l,d,y,g,n),h=l.c,f=l.r,s=l.e),a=s+y+1,m=h[a],c=n/2,f=f||0>a||null!=h[a+1],f=4>g?(null!=m||f)&&(0==g||g==(l.s<0?3:2)):m>c||m==c&&(4==g||f||6==g&&1&h[a-1]||g==(l.s<0?8:7)),1>a||!h[0])t=f?p("1",-y):"0";else{if(h.length=a,f)for(--n;++h[--a]>n;)h[a]=0,a||(++s,h.unshift(1));for(c=h.length;!h[--c];);for(m=0,t="";c>=m;t+=x.charAt(h[m++]));t=p(t,s)}return t}function h(t,n,r,o){var a,s,c,u,l;if(r=null!=r&&J(r,0,8,o,_)?0|r:j,!t.c)return t.toString();if(a=t.c[0],c=t.e,null==n)l=i(t.c),l=19==o||24==o&&q>=c?f(l,c):p(l,c);else if(t=T(new e(t),n,r),s=t.e,l=i(t.c),u=l.length,19==o||24==o&&(s>=n||q>=s)){for(;n>u;l+="0",u++);l=f(l,s)}else if(n-=c,l=p(l,s),s+1>u){if(--n>0)for(l+=".";n--;l+="0");}else if(n+=s-u,n>0)for(s+1==u&&(l+=".");n--;l+="0");return t.s<0&&a?"-"+l:l}function I(t,n){var r,o,i=0;for(c(t[0])&&(t=t[0]),r=new e(t[0]);++it||t>n||t!=l(t))&&N(r,(o||"decimal places")+(e>t||t>n?" out of range":" not an integer"),t),!0}function D(t,e,n){for(var r=1,o=e.length;!e[--o];e.pop());for(o=e[0];o>=10;o/=10,r++);return(n=r+n*B-1)>U?t.c=t.e=null:z>n?t.c=[t.e=0]:(t.e=n,t.c=e),t}function N(t,e,n){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][t]+"() "+e+": "+n);throw r.name="BigNumber Error",E=0,r}function T(t,e,n,r){var o,i,a,s,c,u,f,p=t.c,l=A;if(p){t:{for(o=1,s=p[0];s>=10;s/=10,o++);if(i=e-o,0>i)i+=B,a=e,c=p[u=0],f=c/l[o-a-1]%10|0;else if(u=g((i+1)/B),u>=p.length){if(!r)break t;for(;p.length<=u;p.push(0));c=f=0,o=1,i%=B,a=i-B+1}else{for(c=s=p[u],o=1;s>=10;s/=10,o++);i%=B,a=i-B+o,f=0>a?0:c/l[o-a-1]%10|0}if(r=r||0>e||null!=p[u+1]||(0>a?c:c%l[o-a-1]),r=4>n?(f||r)&&(0==n||n==(t.s<0?3:2)):f>5||5==f&&(4==n||r||6==n&&(i>0?a>0?c/l[o-a]:0:p[u-1])%10&1||n==(t.s<0?8:7)),1>e||!p[0])return p.length=0,r?(e-=t.e+1,p[0]=l[e%B],t.e=-e||0):p[0]=t.e=0,t;if(0==i?(p.length=u,s=1,u--):(p.length=u+1,s=l[B-i],p[u]=a>0?v(c/l[o-a]%l[a])*s:0),r)for(;;){if(0==u){for(i=1,a=p[0];a>=10;a/=10,i++);for(a=p[0]+=s,s=1;a>=10;a/=10,s++);i!=s&&(t.e++,p[0]==k&&(p[0]=1));break}if(p[u]+=s,p[u]!=k)break;p[u--]=0,s=1}for(i=p.length;0===p[--i];p.pop());}t.e>U?t.c=t.e=null:t.en?null!=(t=o[n++]):void 0};return a(e="DECIMAL_PLACES")&&J(t,0,F,2,e)&&(H=0|t),r[e]=H,a(e="ROUNDING_MODE")&&J(t,0,8,2,e)&&(j=0|t),r[e]=j,a(e="EXPONENTIAL_AT")&&(c(t)?J(t[0],-F,0,2,e)&&J(t[1],0,F,2,e)&&(q=0|t[0],L=0|t[1]):J(t,-F,F,2,e)&&(q=-(L=0|(0>t?-t:t)))),r[e]=[q,L],a(e="RANGE")&&(c(t)?J(t[0],-F,-1,2,e)&&J(t[1],1,F,2,e)&&(z=0|t[0],U=0|t[1]):J(t,-F,F,2,e)&&(0|t?z=-(U=0|(0>t?-t:t)):W&&N(2,e+" cannot be zero",t))),r[e]=[z,U],a(e="ERRORS")&&(t===!!t||1===t||0===t?(E=0,J=(W=!!t)?O:s):W&&N(2,e+b,t)),r[e]=W,a(e="CRYPTO")&&(t===!!t||1===t||0===t?(G=!(!t||!d||"object"!=typeof d),t&&!G&&W&&N(2,"crypto unavailable",d)):W&&N(2,e+b,t)),r[e]=G,a(e="MODULO_MODE")&&J(t,0,9,2,e)&&(X=0|t),r[e]=X,a(e="POW_PRECISION")&&J(t,0,F,2,e)&&($=0|t),r[e]=$,a(e="FORMAT")&&("object"==typeof t?V=t:W&&N(2,e+" not an object",t)),r[e]=V,r},e.max=function(){return I(arguments,R.lt)},e.min=function(){return I(arguments,R.gt)},e.random=function(){var t=9007199254740992,n=Math.random()*t&2097151?function(){return v(Math.random()*t)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(t){var r,o,i,a,s,c=0,u=[],f=new e(M);if(t=null!=t&&J(t,0,F,14)?0|t:H,a=g(t/B),G)if(d&&d.getRandomValues){for(r=d.getRandomValues(new Uint32Array(a*=2));a>c;)s=131072*r[c]+(r[c+1]>>>11),s>=9e15?(o=d.getRandomValues(new Uint32Array(2)),r[c]=o[0],r[c+1]=o[1]):(u.push(s%1e14),c+=2);c=a/2}else if(d&&d.randomBytes){for(r=d.randomBytes(a*=7);a>c;)s=281474976710656*(31&r[c])+1099511627776*r[c+1]+4294967296*r[c+2]+16777216*r[c+3]+(r[c+4]<<16)+(r[c+5]<<8)+r[c+6],s>=9e15?d.randomBytes(7).copy(r,c):(u.push(s%1e14),c+=7);c=a/7}else W&&N(14,"crypto unavailable",d);if(!c)for(;a>c;)s=n(),9e15>s&&(u[c++]=s%1e14);for(a=u[--c],t%=B,a&&t&&(s=A[B-t],u[c]=v(a/s)*s);0===u[c];u.pop(),c--);if(0>c)u=[i=0];else{for(i=-1;0===u[0];u.shift(),i-=B);for(c=1,s=u[0];s>=10;s/=10,c++);B>c&&(i-=B-c)}return f.e=i,f.c=u,f}}(),P=function(){function t(t,e,n){var r,o,i,a,s=0,c=t.length,u=e%C,f=e/C|0;for(t=t.slice();c--;)i=t[c]%C,a=t[c]/C|0,r=f*i+a*u,o=u*i+r%C*C+s,s=(o/n|0)+(r/C|0)+f*a,t[c]=o%n;return s&&t.unshift(s),t}function n(t,e,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;n>o;o++)if(t[o]!=e[o]){i=t[o]>e[o]?1:-1;break}return i}function r(t,e,n,r){for(var o=0;n--;)t[n]-=o,o=t[n]1;t.shift());}return function(i,a,s,c,u){var f,p,l,h,d,m,y,g,b,_,w,x,S,A,C,F,I,O=i.s==a.s?1:-1,D=i.c,N=a.c;if(!(D&&D[0]&&N&&N[0]))return new e(i.s&&a.s&&(D?!N||D[0]!=N[0]:N)?D&&0==D[0]||!N?0*O:O/0:NaN);for(g=new e(O),b=g.c=[],p=i.e-a.e,O=s+p+1,u||(u=k,p=o(i.e/B)-o(a.e/B),O=O/B|0),l=0;N[l]==(D[l]||0);l++);if(N[l]>(D[l]||0)&&p--,0>O)b.push(1),h=!0;else{for(A=D.length,F=N.length,l=0,O+=2,d=v(u/(N[0]+1)),d>1&&(N=t(N,d,u),D=t(D,d,u),F=N.length,A=D.length),S=F,_=D.slice(0,F),w=_.length;F>w;_[w++]=0);I=N.slice(),I.unshift(0),C=N[0],N[1]>=u/2&&C++;do{if(d=0,f=n(N,_,F,w),0>f){if(x=_[0],F!=w&&(x=x*u+(_[1]||0)),d=v(x/C),d>1)for(d>=u&&(d=u-1),m=t(N,d,u), -y=m.length,w=_.length;1==n(m,_,y,w);)d--,r(m,y>F?I:N,y,u),y=m.length,f=1;else 0==d&&(f=d=1),m=N.slice(),y=m.length;if(w>y&&m.unshift(0),r(_,m,w,u),w=_.length,-1==f)for(;n(N,_,F,w)<1;)d++,r(_,w>F?I:N,w,u),w=_.length}else 0===f&&(d++,_=[0]);b[l++]=d,_[0]?_[w++]=D[S]||0:(_=[D[S]],w=1)}while((S++=10;O/=10,l++);T(g,s+(g.e=l+p*B-1)+1,c,h)}else g.e=p,g.r=+h;return g}}(),m=function(){var t=/^(-?)0([xbo])/i,n=/^([^.]+)\.$/,r=/^\.([^.]+)$/,o=/^-?(Infinity|NaN)$/,i=/^\s*\+|^\s+|\s+$/g;return function(a,s,c,u){var f,p=c?s:s.replace(i,"");if(o.test(p))a.s=isNaN(p)?null:0>p?-1:1;else{if(!c&&(p=p.replace(t,function(t,e,n){return f="x"==(n=n.toLowerCase())?16:"b"==n?2:8,u&&u!=f?t:e}),u&&(f=u,p=p.replace(n,"$1").replace(r,"0.$1")),s!=p))return new e(p,f);W&&N(E,"not a"+(u?" base "+u:"")+" number",s),a.s=null}a.c=a.e=null,E=0}}(),R.absoluteValue=R.abs=function(){var t=new e(this);return t.s<0&&(t.s=1),t},R.ceil=function(){return T(new e(this),this.e+1,2)},R.comparedTo=R.cmp=function(t,n){return E=1,a(this,new e(t,n))},R.decimalPlaces=R.dp=function(){var t,e,n=this.c;if(!n)return null;if(t=((e=n.length-1)-o(this.e/B))*B,e=n[e])for(;e%10==0;e/=10,t--);return 0>t&&(t=0),t},R.dividedBy=R.div=function(t,n){return E=3,P(this,new e(t,n),H,j)},R.dividedToIntegerBy=R.divToInt=function(t,n){return E=4,P(this,new e(t,n),0,1)},R.equals=R.eq=function(t,n){return E=5,0===a(this,new e(t,n))},R.floor=function(){return T(new e(this),this.e+1,3)},R.greaterThan=R.gt=function(t,n){return E=6,a(this,new e(t,n))>0},R.greaterThanOrEqualTo=R.gte=function(t,n){return E=7,1===(n=a(this,new e(t,n)))||0===n},R.isFinite=function(){return!!this.c},R.isInteger=R.isInt=function(){return!!this.c&&o(this.e/B)>this.c.length-2},R.isNaN=function(){return!this.s},R.isNegative=R.isNeg=function(){return this.s<0},R.isZero=function(){return!!this.c&&0==this.c[0]},R.lessThan=R.lt=function(t,n){return E=8,a(this,new e(t,n))<0},R.lessThanOrEqualTo=R.lte=function(t,n){return E=9,-1===(n=a(this,new e(t,n)))||0===n},R.minus=R.sub=function(t,n){var r,i,a,s,c=this,u=c.s;if(E=10,t=new e(t,n),n=t.s,!u||!n)return new e(NaN);if(u!=n)return t.s=-n,c.plus(t);var f=c.e/B,p=t.e/B,l=c.c,h=t.c;if(!f||!p){if(!l||!h)return l?(t.s=-n,t):new e(h?c:NaN);if(!l[0]||!h[0])return h[0]?(t.s=-n,t):new e(l[0]?c:3==j?-0:0)}if(f=o(f),p=o(p),l=l.slice(),u=f-p){for((s=0>u)?(u=-u,a=l):(p=f,a=h),a.reverse(),n=u;n--;a.push(0));a.reverse()}else for(i=(s=(u=l.length)<(n=h.length))?u:n,u=n=0;i>n;n++)if(l[n]!=h[n]){s=l[n]0)for(;n--;l[r++]=0);for(n=k-1;i>u;){if(l[--i]0?(c=s,r=f):(a=-a,r=u),r.reverse();a--;r.push(0));r.reverse()}for(a=u.length,n=f.length,0>a-n&&(r=f,f=u,u=r,n=a),a=0;n;)a=(u[--n]=u[n]+f[n]+a)/k|0,u[n]%=k;return a&&(u.unshift(a),++c),D(t,u,c)},R.precision=R.sd=function(t){var e,n,r=this,o=r.c;if(null!=t&&t!==!!t&&1!==t&&0!==t&&(W&&N(13,"argument"+b,t),t!=!!t&&(t=null)),!o)return null;if(n=o.length-1,e=n*B+1,n=o[n]){for(;n%10==0;n/=10,e--);for(n=o[0];n>=10;n/=10,e++);}return t&&r.e+1>e&&(e=r.e+1),e},R.round=function(t,n){var r=new e(this);return(null==t||J(t,0,F,15))&&T(r,~~t+this.e+1,null!=n&&J(n,0,8,15,_)?0|n:j),r},R.shift=function(t){var n=this;return J(t,-S,S,16,"argument")?n.times("1e"+l(t)):new e(n.c&&n.c[0]&&(-S>t||t>S)?n.s*(0>t?0:1/0):n)},R.squareRoot=R.sqrt=function(){var t,n,r,a,s,c=this,u=c.c,f=c.s,p=c.e,l=H+4,h=new e("0.5");if(1!==f||!u||!u[0])return new e(!f||0>f&&(!u||u[0])?NaN:u?c:1/0);if(f=Math.sqrt(+c),0==f||f==1/0?(n=i(u),(n.length+p)%2==0&&(n+="0"),f=Math.sqrt(n),p=o((p+1)/2)-(0>p||p%2),f==1/0?n="1e"+p:(n=f.toExponential(),n=n.slice(0,n.indexOf("e")+1)+p),r=new e(n)):r=new e(f+""),r.c[0])for(p=r.e,f=p+l,3>f&&(f=0);;)if(s=r,r=h.times(s.plus(P(c,s,l,1))),i(s.c).slice(0,f)===(n=i(r.c)).slice(0,f)){if(r.ef&&(y=_,_=w,w=y,a=f,f=h,h=a),a=f+h,y=[];a--;y.push(0));for(g=k,v=C,a=h;--a>=0;){for(r=0,d=w[a]%v,m=w[a]/v|0,c=f,s=a+c;s>a;)p=_[--c]%v,l=_[c]/v|0,u=m*p+l*d,p=d*p+u%v*v+y[s]+r,r=(p/g|0)+(u/v|0)+m*l,y[s--]=p%g;y[s]=r}return r?++i:y.shift(),D(t,y,i)},R.toDigits=function(t,n){var r=new e(this);return t=null!=t&&J(t,1,F,18,"precision")?0|t:null,n=null!=n&&J(n,0,8,18,_)?0|n:j,t?T(r,t,n):r},R.toExponential=function(t,e){return h(this,null!=t&&J(t,0,F,19)?~~t+1:null,e,19)},R.toFixed=function(t,e){return h(this,null!=t&&J(t,0,F,20)?~~t+this.e+1:null,e,20)},R.toFormat=function(t,e){var n=h(this,null!=t&&J(t,0,F,21)?~~t+this.e+1:null,e,21);if(this.c){var r,o=n.split("."),i=+V.groupSize,a=+V.secondaryGroupSize,s=V.groupSeparator,c=o[0],u=o[1],f=this.s<0,p=f?c.slice(1):c,l=p.length;if(a&&(r=i,i=a,a=r,l-=r),i>0&&l>0){for(r=l%i||i,c=p.substr(0,r);l>r;r+=i)c+=s+p.substr(r,i);a>0&&(c+=s+p.slice(r)),f&&(c="-"+c)}n=u?c+V.decimalSeparator+((a=+V.fractionGroupSize)?u.replace(new RegExp("\\d{"+a+"}\\B","g"),"$&"+V.fractionGroupSeparator):u):c}return n},R.toFraction=function(t){var n,r,o,a,s,c,u,f,p,l=W,h=this,d=h.c,m=new e(M),y=r=new e(M),g=u=new e(M);if(null!=t&&(W=!1,c=new e(t),W=l,(!(l=c.isInt())||c.lt(M))&&(W&&N(22,"max denominator "+(l?"out of range":"not an integer"),t),t=!l&&c.c&&T(c,c.e+1,1).gte(M)?c:null)),!d)return h.toString();for(p=i(d),a=m.e=p.length-h.e-1,m.c[0]=A[(s=a%B)<0?B+s:s],t=!t||c.cmp(m)>0?a>0?m:y:c,s=U,U=1/0,c=new e(p),u.c[0]=0;f=P(c,m,0,1),o=r.plus(f.times(g)),1!=o.cmp(t);)r=g,g=o,y=u.plus(f.times(o=y)),u=o,m=c.minus(f.times(o=m)),c=o;return o=P(t.minus(r),g,0,1),u=u.plus(o.times(y)),r=r.plus(o.times(g)),u.s=y.s=h.s,a*=2,n=P(y,g,a,j).minus(h).abs().cmp(P(u,r,a,j).minus(h).abs())<1?[y.toString(),g.toString()]:[u.toString(),r.toString()],U=s,n},R.toNumber=function(){var t=this;return+t||(t.s?0*t.s:NaN)},R.toPower=R.pow=function(t){var n,r,o=v(0>t?-t:+t),i=this;if(!J(t,-S,S,23,"exponent")&&(!isFinite(t)||o>S&&(t/=0)||parseFloat(t)!=t&&!(t=NaN)))return new e(Math.pow(+i,t));for(n=$?g($/B+2):0,r=new e(M);;){if(o%2){if(r=r.times(i),!r.c)break;n&&r.c.length>n&&(r.c.length=n)}if(o=v(o/2),!o)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>t&&(r=M.div(r)),n?T(r,$,j):r},R.toPrecision=function(t,e){return h(this,null!=t&&J(t,1,F,24,"precision")?0|t:null,e,24)},R.toString=function(t){var e,r=this,o=r.s,a=r.e;return null===a?o?(e="Infinity",0>o&&(e="-"+e)):e="NaN":(e=i(r.c),e=null!=t&&J(t,2,64,25,"base")?n(p(e,a),0|t,10,o):q>=a||a>=L?f(e,a):p(e,a),0>o&&r.c[0]&&(e="-"+e)),e},R.truncated=R.trunc=function(){return T(new e(this),this.e+1,1)},R.valueOf=R.toJSON=function(){return this.toString()},null!=t&&e.config(t),e}function o(t){var e=0|t;return t>0||t===e?e:e-1}function i(t){for(var e,n,r=1,o=t.length,i=t[0]+"";o>r;){for(e=t[r++]+"",n=B-e.length;n--;e="0"+e);i+=e}for(o=i.length;48===i.charCodeAt(--o););return i.slice(0,o+1||1)}function a(t,e){var n,r,o=t.c,i=e.c,a=t.s,s=e.s,c=t.e,u=e.e;if(!a||!s)return null;if(n=o&&!o[0],r=i&&!i[0],n||r)return n?r?0:-s:a;if(a!=s)return a;if(n=0>a,r=c==u,!o||!i)return r?0:!o^n?1:-1;if(!r)return c>u^n?1:-1;for(s=(c=o.length)<(u=i.length)?c:u,a=0;s>a;a++)if(o[a]!=i[a])return o[a]>i[a]^n?1:-1;return c==u?0:c>u^n?1:-1}function s(t,e,n){return(t=l(t))>=e&&n>=t}function c(t){return"[object Array]"==Object.prototype.toString.call(t)}function u(t,e,n){for(var r,o,i=[0],a=0,s=t.length;s>a;){for(o=i.length;o--;i[o]*=e);for(i[r=0]+=x.indexOf(t.charAt(a++));rn-1&&(null==i[r+1]&&(i[r+1]=0),i[r+1]+=i[r]/n|0,i[r]%=n)}return i.reverse()}function f(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(0>e?"e":"e+")+e}function p(t,e){var n,r;if(0>e){for(r="0.";++e;r+="0");t=r+t}else if(n=t.length,++e>n){for(r="0",e-=n;--e;r+="0");t+=r}else n>e&&(t=t.slice(0,e)+"."+t.slice(e));return t}function l(t){return t=parseFloat(t),0>t?g(t):v(t)}var h,d,m,y=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,g=Math.ceil,v=Math.floor,b=" not a boolean or binary digit",_="rounding mode",w="number type has more than 15 significant digits",x="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",k=1e14,B=14,S=9007199254740991,A=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],C=1e7,F=1e9;if(h=r(),"function"==typeof define&&define.amd)define(function(){return h});else if("undefined"!=typeof e&&e.exports){if(e.exports=h,!d)try{d=t("crypto")}catch(I){}}else n.BigNumber=h}(this)},{crypto:49}],web3:[function(t,e,n){var r=t("./lib/web3");"undefined"!=typeof window&&"undefined"==typeof window.Web3&&(window.Web3=r),e.exports=r},{"./lib/web3":22}]},{},["web3"]); \ No newline at end of file diff --git a/node_modules/web3/example/balance.html b/node_modules/web3/example/balance.html deleted file mode 100644 index 2b554a2..0000000 --- a/node_modules/web3/example/balance.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - -

        coinbase balance

        - -
        -
        -
        -
        -
        - - - diff --git a/node_modules/web3/example/contract.html b/node_modules/web3/example/contract.html deleted file mode 100644 index 88d5af0..0000000 --- a/node_modules/web3/example/contract.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - -

        contract

        -
        -
        -
        - -
        - -
        - - - diff --git a/node_modules/web3/example/contract_array.html b/node_modules/web3/example/contract_array.html deleted file mode 100644 index 5fe55e7..0000000 --- a/node_modules/web3/example/contract_array.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - -

        contract

        -
        -
        -
        - -
        - -
        - - - diff --git a/node_modules/web3/example/event_inc.html b/node_modules/web3/example/event_inc.html deleted file mode 100644 index 07c766e..0000000 --- a/node_modules/web3/example/event_inc.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - -
        -
        - -
        -
        - -
        -
        -
        -
        - - diff --git a/node_modules/web3/example/icap.html b/node_modules/web3/example/icap.html deleted file mode 100644 index 39d7260..0000000 --- a/node_modules/web3/example/icap.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - -
        - This page expects geth with JSON-RPC running at port 8545 - -
        -
        - namereg address - eg. 0x436474facc88948696b371052a1befb801f003ca or 'default') -
        - - -
        - - exchange identifier - eg. WYWY -
        - - -
        - - client identifier - eg. GAVOFYORK -
        - - -
        - - value - eg. 100 -
        - - -
        - - IBAN: -
        - - - -
        -
        - - -
        -
        -
        -
        -
        -
        - transfers -
        -
        -
          -
          -
          -
          -
          - - diff --git a/node_modules/web3/example/namereg.html b/node_modules/web3/example/namereg.html deleted file mode 100644 index dad19b5..0000000 --- a/node_modules/web3/example/namereg.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - This example shows only part of namereg functionalities. Namereg contract is available here - -

          Namereg

          -

          Search for name

          -
          - Address: - - Name: - -
          -

          Search for address

          -
          - Name: - - Address: - -
          -

          Register name

          -
          - Check if name is available: - - -
          -
          - -
          -

          - If you own the name, you can also change the address it points to -
          - Address: - - - Current address : - -
          - - - - diff --git a/node_modules/web3/example/node-app.js b/node_modules/web3/example/node-app.js deleted file mode 100644 index 218e928..0000000 --- a/node_modules/web3/example/node-app.js +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env node - -var Web3 = require('../index.js'); -var web3 = new Web3(); - -web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); - -var coinbase = web3.eth.coinbase; -console.log(coinbase); - -var balance = web3.eth.getBalance(coinbase); -console.log(balance.toString(10)); - diff --git a/node_modules/web3/gulpfile.js b/node_modules/web3/gulpfile.js deleted file mode 100644 index 4a3518d..0000000 --- a/node_modules/web3/gulpfile.js +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -var version = require('./lib/version.json'); -var path = require('path'); - -var del = require('del'); -var gulp = require('gulp'); -var browserify = require('browserify'); -var jshint = require('gulp-jshint'); -var uglify = require('gulp-uglify'); -var rename = require('gulp-rename'); -var source = require('vinyl-source-stream'); -var exorcist = require('exorcist'); -var bower = require('bower'); -var streamify = require('gulp-streamify'); -var replace = require('gulp-replace'); - -var DEST = path.join(__dirname, 'dist/'); -var src = 'index'; -var dst = 'web3'; -var lightDst = 'web3-light'; - -var browserifyOptions = { - debug: true, - insert_global_vars: false, // jshint ignore:line - detectGlobals: false, - bundleExternal: true -}; - -gulp.task('version', function(){ - gulp.src(['./package.json']) - .pipe(replace(/\"version\"\: \"([\.0-9]*)\"/, '"version": "'+ version.version + '"')) - .pipe(gulp.dest('./')); - gulp.src(['./bower.json']) - .pipe(replace(/\"version\"\: \"([\.0-9]*)\"/, '"version": "'+ version.version + '"')) - .pipe(gulp.dest('./')); - gulp.src(['./package.js']) - .pipe(replace(/version\: \'([\.0-9]*)\'/, "version: '"+ version.version + "'")) - .pipe(gulp.dest('./')); -}); - -gulp.task('bower', ['version'], function(cb){ - bower.commands.install().on('end', function (installed){ - console.log(installed); - cb(); - }); -}); - -gulp.task('lint', [], function(){ - return gulp.src(['./*.js', './lib/*.js']) - .pipe(jshint()) - .pipe(jshint.reporter('default')); -}); - -gulp.task('clean', ['lint'], function(cb) { - del([ DEST ]).then(cb.bind(null, null)); -}); - -gulp.task('light', ['clean'], function () { - return browserify(browserifyOptions) - .require('./' + src + '.js', {expose: 'web3'}) - .ignore('bignumber.js') - .require('./lib/utils/browser-bn.js', {expose: 'bignumber.js'}) // fake bignumber.js - .add('./' + src + '.js') - .bundle() - .pipe(exorcist(path.join( DEST, lightDst + '.js.map'))) - .pipe(source(lightDst + '.js')) - .pipe(gulp.dest( DEST )) - .pipe(streamify(uglify())) - .pipe(rename(lightDst + '.min.js')) - .pipe(gulp.dest( DEST )); -}); - -gulp.task('standalone', ['clean'], function () { - return browserify(browserifyOptions) - .require('./' + src + '.js', {expose: 'web3'}) - .require('bignumber.js') // expose it to dapp users - .add('./' + src + '.js') - .ignore('crypto') - .bundle() - .pipe(exorcist(path.join( DEST, dst + '.js.map'))) - .pipe(source(dst + '.js')) - .pipe(gulp.dest( DEST )) - .pipe(streamify(uglify())) - .pipe(rename(dst + '.min.js')) - .pipe(gulp.dest( DEST )); -}); - -gulp.task('watch', function() { - gulp.watch(['./lib/*.js'], ['lint', 'build']); -}); - -gulp.task('default', ['version', 'lint', 'clean', 'light', 'standalone']); - diff --git a/node_modules/web3/index.js b/node_modules/web3/index.js deleted file mode 100644 index badd4d5..0000000 --- a/node_modules/web3/index.js +++ /dev/null @@ -1,8 +0,0 @@ -var Web3 = require('./lib/web3'); - -// dont override global variable -if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { - window.Web3 = Web3; -} - -module.exports = Web3; diff --git a/node_modules/web3/lib/contracts/GlobalRegistrar.json b/node_modules/web3/lib/contracts/GlobalRegistrar.json deleted file mode 100644 index 928e05f..0000000 --- a/node_modules/web3/lib/contracts/GlobalRegistrar.json +++ /dev/null @@ -1,254 +0,0 @@ -[ - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "name", - "outputs": [ - { - "name": "o_name", - "type": "bytes32" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "content", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "addr", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "reserve", - "outputs": [], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "subRegistrar", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_newOwner", - "type": "address" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_registrar", - "type": "address" - } - ], - "name": "setSubRegistrar", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "Registrar", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_a", - "type": "address" - }, - { - "name": "_primary", - "type": "bool" - } - ], - "name": "setAddress", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_content", - "type": "bytes32" - } - ], - "name": "setContent", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "disown", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_name", - "type": "bytes32" - }, - { - "indexed": false, - "name": "_winner", - "type": "address" - } - ], - "name": "AuctionEnded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_name", - "type": "bytes32" - }, - { - "indexed": false, - "name": "_bidder", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "NewBid", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - } - ], - "name": "Changed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - }, - { - "indexed": true, - "name": "addr", - "type": "address" - } - ], - "name": "PrimaryChanged", - "type": "event" - } -] diff --git a/node_modules/web3/lib/contracts/ICAPRegistrar.json b/node_modules/web3/lib/contracts/ICAPRegistrar.json deleted file mode 100644 index 429845d..0000000 --- a/node_modules/web3/lib/contracts/ICAPRegistrar.json +++ /dev/null @@ -1,108 +0,0 @@ -[ - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_refund", - "type": "address" - } - ], - "name": "disown", - "outputs": [], - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "addr", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - } - ], - "name": "reserve", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_newOwner", - "type": "address" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_name", - "type": "bytes32" - }, - { - "name": "_a", - "type": "address" - } - ], - "name": "setAddr", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "name", - "type": "bytes32" - } - ], - "name": "Changed", - "type": "event" - } -] diff --git a/node_modules/web3/lib/contracts/SmartExchange.json b/node_modules/web3/lib/contracts/SmartExchange.json deleted file mode 100644 index c0881d4..0000000 --- a/node_modules/web3/lib/contracts/SmartExchange.json +++ /dev/null @@ -1,146 +0,0 @@ -[ - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "bytes32" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "bytes32" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "indirectId", - "type": "bytes32" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "icapTransfer", - "outputs": [], - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "bytes32" - } - ], - "name": "deposit", - "outputs": [], - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "AnonymousDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "bytes32" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "bytes32" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "bytes32" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "indirectId", - "type": "bytes32" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "IcapTransfer", - "type": "event" - } -] diff --git a/node_modules/web3/lib/solidity/address.js b/node_modules/web3/lib/solidity/address.js deleted file mode 100644 index e734549..0000000 --- a/node_modules/web3/lib/solidity/address.js +++ /dev/null @@ -1,31 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeAddress is a prootype that represents address type - * It matches: - * address - * address[] - * address[4] - * address[][] - * address[3][] - * address[][6][], ... - */ -var SolidityTypeAddress = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputAddress; -}; - -SolidityTypeAddress.prototype = new SolidityType({}); -SolidityTypeAddress.prototype.constructor = SolidityTypeAddress; - -SolidityTypeAddress.prototype.isType = function (name) { - return !!name.match(/address(\[([0-9]*)\])?/); -}; - -SolidityTypeAddress.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeAddress; - diff --git a/node_modules/web3/lib/solidity/bool.js b/node_modules/web3/lib/solidity/bool.js deleted file mode 100644 index cdc0439..0000000 --- a/node_modules/web3/lib/solidity/bool.js +++ /dev/null @@ -1,30 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeBool is a prootype that represents bool type - * It matches: - * bool - * bool[] - * bool[4] - * bool[][] - * bool[3][] - * bool[][6][], ... - */ -var SolidityTypeBool = function () { - this._inputFormatter = f.formatInputBool; - this._outputFormatter = f.formatOutputBool; -}; - -SolidityTypeBool.prototype = new SolidityType({}); -SolidityTypeBool.prototype.constructor = SolidityTypeBool; - -SolidityTypeBool.prototype.isType = function (name) { - return !!name.match(/^bool(\[([0-9]*)\])*$/); -}; - -SolidityTypeBool.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeBool; diff --git a/node_modules/web3/lib/solidity/bytes.js b/node_modules/web3/lib/solidity/bytes.js deleted file mode 100644 index 92dfb0c..0000000 --- a/node_modules/web3/lib/solidity/bytes.js +++ /dev/null @@ -1,38 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeBytes is a prootype that represents bytes type - * It matches: - * bytes - * bytes[] - * bytes[4] - * bytes[][] - * bytes[3][] - * bytes[][6][], ... - * bytes32 - * bytes64[] - * bytes8[4] - * bytes256[][] - * bytes[3][] - * bytes64[][6][], ... - */ -var SolidityTypeBytes = function () { - this._inputFormatter = f.formatInputBytes; - this._outputFormatter = f.formatOutputBytes; -}; - -SolidityTypeBytes.prototype = new SolidityType({}); -SolidityTypeBytes.prototype.constructor = SolidityTypeBytes; - -SolidityTypeBytes.prototype.isType = function (name) { - return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/); -}; - -SolidityTypeBytes.prototype.staticPartLength = function (name) { - var matches = name.match(/^bytes([0-9]*)/); - var size = parseInt(matches[1]); - return size * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeBytes; diff --git a/node_modules/web3/lib/solidity/coder.js b/node_modules/web3/lib/solidity/coder.js deleted file mode 100644 index 76ef926..0000000 --- a/node_modules/web3/lib/solidity/coder.js +++ /dev/null @@ -1,260 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file coder.js - * @author Marek Kotewicz - * @date 2015 - */ - -var f = require('./formatters'); - -var SolidityTypeAddress = require('./address'); -var SolidityTypeBool = require('./bool'); -var SolidityTypeInt = require('./int'); -var SolidityTypeUInt = require('./uint'); -var SolidityTypeDynamicBytes = require('./dynamicbytes'); -var SolidityTypeString = require('./string'); -var SolidityTypeReal = require('./real'); -var SolidityTypeUReal = require('./ureal'); -var SolidityTypeBytes = require('./bytes'); - -/** - * SolidityCoder prototype should be used to encode/decode solidity params of any type - */ -var SolidityCoder = function (types) { - this._types = types; -}; - -/** - * This method should be used to transform type to SolidityType - * - * @method _requireType - * @param {String} type - * @returns {SolidityType} - * @throws {Error} throws if no matching type is found - */ -SolidityCoder.prototype._requireType = function (type) { - var solidityType = this._types.filter(function (t) { - return t.isType(type); - })[0]; - - if (!solidityType) { - throw Error('invalid solidity type!: ' + type); - } - - return solidityType; -}; - -/** - * Should be used to encode plain param - * - * @method encodeParam - * @param {String} type - * @param {Object} plain param - * @return {String} encoded plain param - */ -SolidityCoder.prototype.encodeParam = function (type, param) { - return this.encodeParams([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParams - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -SolidityCoder.prototype.encodeParams = function (types, params) { - var solidityTypes = this.getSolidityTypes(types); - - var encodeds = solidityTypes.map(function (solidityType, index) { - return solidityType.encode(params[index], types[index]); - }); - - var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { - var staticPartLength = solidityType.staticPartLength(types[index]); - var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; - return acc + roundedStaticPartLength; - }, 0); - - var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); - - return result; -}; - -SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { - var result = ""; - var self = this; - - var isDynamic = function (i) { - return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]); - }; - - types.forEach(function (type, i) { - if (isDynamic(i)) { - result += f.formatInputInt(dynamicOffset).encode(); - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - } else { - // don't add length to dynamicOffset. it's already counted - result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - } - - // TODO: figure out nested arrays - }); - - types.forEach(function (type, i) { - if (isDynamic(i)) { - var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); - dynamicOffset += e.length / 2; - result += e; - } - }); - return result; -}; - -// TODO: refactor whole encoding! -SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { - var self = this; - if (solidityType.isDynamicArray(type)) { - return (function () { - // offset was already set - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = encoded[0]; - - (function () { - var previousLength = 2; // in int - if (solidityType.isDynamicArray(nestedName)) { - for (var i = 1; i < encoded.length; i++) { - previousLength += +(encoded[i - 1])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - } - })(); - - // first element is length, skip it - (function () { - for (var i = 0; i < encoded.length - 1; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); - } - })(); - - return result; - })(); - - } else if (solidityType.isStaticArray(type)) { - return (function () { - var nestedName = solidityType.nestedName(type); - var nestedStaticPartLength = solidityType.staticPartLength(nestedName); - var result = ""; - - - if (solidityType.isDynamicArray(nestedName)) { - (function () { - var previousLength = 0; // in int - for (var i = 0; i < encoded.length; i++) { - // calculate length of previous item - previousLength += +(encoded[i - 1] || [])[0] || 0; - result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); - } - })(); - } - - (function () { - for (var i = 0; i < encoded.length; i++) { - var additionalOffset = result / 2; - result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); - } - })(); - - return result; - })(); - } - - return encoded; -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParam - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -SolidityCoder.prototype.decodeParam = function (type, bytes) { - return this.decodeParams([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParam - * @param {Array} types - * @param {String} bytes - * @return {Array} array of plain params - */ -SolidityCoder.prototype.decodeParams = function (types, bytes) { - var solidityTypes = this.getSolidityTypes(types); - var offsets = this.getOffsets(types, solidityTypes); - - return solidityTypes.map(function (solidityType, index) { - return solidityType.decode(bytes, offsets[index], types[index], index); - }); -}; - -SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { - var lengths = solidityTypes.map(function (solidityType, index) { - return solidityType.staticPartLength(types[index]); - }); - - for (var i = 1; i < lengths.length; i++) { - // sum with length of previous element - lengths[i] += lengths[i - 1]; - } - - return lengths.map(function (length, index) { - // remove the current length, so the length is sum of previous elements - var staticPartLength = solidityTypes[index].staticPartLength(types[index]); - return length - staticPartLength; - }); -}; - -SolidityCoder.prototype.getSolidityTypes = function (types) { - var self = this; - return types.map(function (type) { - return self._requireType(type); - }); -}; - -var coder = new SolidityCoder([ - new SolidityTypeAddress(), - new SolidityTypeBool(), - new SolidityTypeInt(), - new SolidityTypeUInt(), - new SolidityTypeDynamicBytes(), - new SolidityTypeBytes(), - new SolidityTypeString(), - new SolidityTypeReal(), - new SolidityTypeUReal() -]); - -module.exports = coder; - diff --git a/node_modules/web3/lib/solidity/dynamicbytes.js b/node_modules/web3/lib/solidity/dynamicbytes.js deleted file mode 100644 index baa1839..0000000 --- a/node_modules/web3/lib/solidity/dynamicbytes.js +++ /dev/null @@ -1,25 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeDynamicBytes = function () { - this._inputFormatter = f.formatInputDynamicBytes; - this._outputFormatter = f.formatOutputDynamicBytes; -}; - -SolidityTypeDynamicBytes.prototype = new SolidityType({}); -SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; - -SolidityTypeDynamicBytes.prototype.isType = function (name) { - return !!name.match(/^bytes(\[([0-9]*)\])*$/); -}; - -SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeDynamicBytes.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeDynamicBytes; - diff --git a/node_modules/web3/lib/solidity/formatters.js b/node_modules/web3/lib/solidity/formatters.js deleted file mode 100644 index ac37e04..0000000 --- a/node_modules/web3/lib/solidity/formatters.js +++ /dev/null @@ -1,250 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var SolidityParam = require('./param'); - - -/** - * Formats input value to byte representation of int - * If value is negative, return it's two's complement - * If the value is floating point, round it down - * - * @method formatInputInt - * @param {String|Number|BigNumber} value that needs to be formatted - * @returns {SolidityParam} - */ -var formatInputInt = function (value) { - BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); - var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputBytes = function (value) { - var result = utils.toHex(value).substr(2); - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(result); -}; - -/** - * Formats input bytes - * - * @method formatDynamicInputBytes - * @param {String} - * @returns {SolidityParam} - */ -var formatInputDynamicBytes = function (value) { - var result = utils.toHex(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of string - * - * @method formatInputString - * @param {String} - * @returns {SolidityParam} - */ -var formatInputString = function (value) { - var result = utils.fromUtf8(value).substr(2); - var length = result.length / 2; - var l = Math.floor((result.length + 63) / 64); - result = utils.padRight(result, l * 64); - return new SolidityParam(formatInputInt(length).value + result); -}; - -/** - * Formats input value to byte representation of bool - * - * @method formatInputBool - * @param {Boolean} - * @returns {SolidityParam} - */ -var formatInputBool = function (value) { - var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); - return new SolidityParam(result); -}; - -/** - * Formats input value to byte representation of real - * Values are multiplied by 2^m and encoded as integers - * - * @method formatInputReal - * @param {String|Number|BigNumber} - * @returns {SolidityParam} - */ -var formatInputReal = function (value) { - return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); -}; - -/** - * Check if input value is negative - * - * @method signedIsNegative - * @param {String} value is hex format - * @returns {Boolean} true if it is negative, otherwise false - */ -var signedIsNegative = function (value) { - return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; -}; - -/** - * Formats right-aligned output bytes to int - * - * @method formatOutputInt - * @param {SolidityParam} param - * @returns {BigNumber} right-aligned output bytes formatted to big number - */ -var formatOutputInt = function (param) { - var value = param.staticPart() || "0"; - - // check if it's negative number - // it it is, return two's complement - if (signedIsNegative(value)) { - return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); - } - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to uint - * - * @method formatOutputUInt - * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint - */ -var formatOutputUInt = function (param) { - var value = param.staticPart() || "0"; - return new BigNumber(value, 16); -}; - -/** - * Formats right-aligned output bytes to real - * - * @method formatOutputReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to real - */ -var formatOutputReal = function (param) { - return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Formats right-aligned output bytes to ureal - * - * @method formatOutputUReal - * @param {SolidityParam} - * @returns {BigNumber} input bytes formatted to ureal - */ -var formatOutputUReal = function (param) { - return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); -}; - -/** - * Should be used to format output bool - * - * @method formatOutputBool - * @param {SolidityParam} - * @returns {Boolean} right-aligned input bytes formatted to bool - */ -var formatOutputBool = function (param) { - return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputBytes = function (param) { - return '0x' + param.staticPart(); -}; - -/** - * Should be used to format output bytes - * - * @method formatOutputDynamicBytes - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} hex string - */ -var formatOutputDynamicBytes = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return '0x' + param.dynamicPart().substr(64, length); -}; - -/** - * Should be used to format output string - * - * @method formatOutputString - * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string - */ -var formatOutputString = function (param) { - var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; - return utils.toUtf8(param.dynamicPart().substr(64, length)); -}; - -/** - * Should be used to format output address - * - * @method formatOutputAddress - * @param {SolidityParam} right-aligned input bytes - * @returns {String} address - */ -var formatOutputAddress = function (param) { - var value = param.staticPart(); - return "0x" + value.slice(value.length - 40, value.length); -}; - -module.exports = { - formatInputInt: formatInputInt, - formatInputBytes: formatInputBytes, - formatInputDynamicBytes: formatInputDynamicBytes, - formatInputString: formatInputString, - formatInputBool: formatInputBool, - formatInputReal: formatInputReal, - formatOutputInt: formatOutputInt, - formatOutputUInt: formatOutputUInt, - formatOutputReal: formatOutputReal, - formatOutputUReal: formatOutputUReal, - formatOutputBool: formatOutputBool, - formatOutputBytes: formatOutputBytes, - formatOutputDynamicBytes: formatOutputDynamicBytes, - formatOutputString: formatOutputString, - formatOutputAddress: formatOutputAddress -}; - diff --git a/node_modules/web3/lib/solidity/int.js b/node_modules/web3/lib/solidity/int.js deleted file mode 100644 index 4fa4170..0000000 --- a/node_modules/web3/lib/solidity/int.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeInt is a prootype that represents int type - * It matches: - * int - * int[] - * int[4] - * int[][] - * int[3][] - * int[][6][], ... - * int32 - * int64[] - * int8[4] - * int256[][] - * int[3][] - * int64[][6][], ... - */ -var SolidityTypeInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputInt; -}; - -SolidityTypeInt.prototype = new SolidityType({}); -SolidityTypeInt.prototype.constructor = SolidityTypeInt; - -SolidityTypeInt.prototype.isType = function (name) { - return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeInt; diff --git a/node_modules/web3/lib/solidity/param.js b/node_modules/web3/lib/solidity/param.js deleted file mode 100644 index e06b592..0000000 --- a/node_modules/web3/lib/solidity/param.js +++ /dev/null @@ -1,152 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file param.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -/** - * SolidityParam object prototype. - * Should be used when encoding, decoding solidity bytes - */ -var SolidityParam = function (value, offset) { - this.value = value || ''; - this.offset = offset; // offset in bytes -}; - -/** - * This method should be used to get length of params's dynamic part - * - * @method dynamicPartLength - * @returns {Number} length of dynamic part (in bytes) - */ -SolidityParam.prototype.dynamicPartLength = function () { - return this.dynamicPart().length / 2; -}; - -/** - * This method should be used to create copy of solidity param with different offset - * - * @method withOffset - * @param {Number} offset length in bytes - * @returns {SolidityParam} new solidity param with applied offset - */ -SolidityParam.prototype.withOffset = function (offset) { - return new SolidityParam(this.value, offset); -}; - -/** - * This method should be used to combine solidity params together - * eg. when appending an array - * - * @method combine - * @param {SolidityParam} param with which we should combine - * @param {SolidityParam} result of combination - */ -SolidityParam.prototype.combine = function (param) { - return new SolidityParam(this.value + param.value); -}; - -/** - * This method should be called to check if param has dynamic size. - * If it has, it returns true, otherwise false - * - * @method isDynamic - * @returns {Boolean} - */ -SolidityParam.prototype.isDynamic = function () { - return this.offset !== undefined; -}; - -/** - * This method should be called to transform offset to bytes - * - * @method offsetAsBytes - * @returns {String} bytes representation of offset - */ -SolidityParam.prototype.offsetAsBytes = function () { - return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); -}; - -/** - * This method should be called to get static part of param - * - * @method staticPart - * @returns {String} offset if it is a dynamic param, otherwise value - */ -SolidityParam.prototype.staticPart = function () { - if (!this.isDynamic()) { - return this.value; - } - return this.offsetAsBytes(); -}; - -/** - * This method should be called to get dynamic part of param - * - * @method dynamicPart - * @returns {String} returns a value if it is a dynamic param, otherwise empty string - */ -SolidityParam.prototype.dynamicPart = function () { - return this.isDynamic() ? this.value : ''; -}; - -/** - * This method should be called to encode param - * - * @method encode - * @returns {String} - */ -SolidityParam.prototype.encode = function () { - return this.staticPart() + this.dynamicPart(); -}; - -/** - * This method should be called to encode array of params - * - * @method encodeList - * @param {Array[SolidityParam]} params - * @returns {String} - */ -SolidityParam.encodeList = function (params) { - - // updating offsets - var totalOffset = params.length * 32; - var offsetParams = params.map(function (param) { - if (!param.isDynamic()) { - return param; - } - var offset = totalOffset; - totalOffset += param.dynamicPartLength(); - return param.withOffset(offset); - }); - - // encode everything! - return offsetParams.reduce(function (result, param) { - return result + param.dynamicPart(); - }, offsetParams.reduce(function (result, param) { - return result + param.staticPart(); - }, '')); -}; - - - -module.exports = SolidityParam; - diff --git a/node_modules/web3/lib/solidity/real.js b/node_modules/web3/lib/solidity/real.js deleted file mode 100644 index 3433224..0000000 --- a/node_modules/web3/lib/solidity/real.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeReal is a prootype that represents real type - * It matches: - * real - * real[] - * real[4] - * real[][] - * real[3][] - * real[][6][], ... - * real32 - * real64[] - * real8[4] - * real256[][] - * real[3][] - * real64[][6][], ... - */ -var SolidityTypeReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputReal; -}; - -SolidityTypeReal.prototype = new SolidityType({}); -SolidityTypeReal.prototype.constructor = SolidityTypeReal; - -SolidityTypeReal.prototype.isType = function (name) { - return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); -}; - -SolidityTypeReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeReal; diff --git a/node_modules/web3/lib/solidity/string.js b/node_modules/web3/lib/solidity/string.js deleted file mode 100644 index f7648d9..0000000 --- a/node_modules/web3/lib/solidity/string.js +++ /dev/null @@ -1,25 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -var SolidityTypeString = function () { - this._inputFormatter = f.formatInputString; - this._outputFormatter = f.formatOutputString; -}; - -SolidityTypeString.prototype = new SolidityType({}); -SolidityTypeString.prototype.constructor = SolidityTypeString; - -SolidityTypeString.prototype.isType = function (name) { - return !!name.match(/^string(\[([0-9]*)\])*$/); -}; - -SolidityTypeString.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -SolidityTypeString.prototype.isDynamicType = function () { - return true; -}; - -module.exports = SolidityTypeString; - diff --git a/node_modules/web3/lib/solidity/type.js b/node_modules/web3/lib/solidity/type.js deleted file mode 100644 index 0ce5dab..0000000 --- a/node_modules/web3/lib/solidity/type.js +++ /dev/null @@ -1,245 +0,0 @@ -var f = require('./formatters'); -var SolidityParam = require('./param'); - -/** - * SolidityType prototype is used to encode/decode solidity params of certain type - */ -var SolidityType = function (config) { - this._inputFormatter = config.inputFormatter; - this._outputFormatter = config.outputFormatter; -}; - -/** - * Should be used to determine if this SolidityType do match given name - * - * @method isType - * @param {String} name - * @return {Bool} true if type match this SolidityType, otherwise false - */ -SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; -}; - -/** - * Should be used to determine what is the length of static part in given type - * - * @method staticPartLength - * @param {String} name - * @return {Number} length of static part in bytes - */ -SolidityType.prototype.staticPartLength = function (name) { - throw "this method should be overrwritten for type: " + name; -}; - -/** - * Should be used to determine if type is dynamic array - * eg: - * "type[]" => true - * "type[4]" => false - * - * @method isDynamicArray - * @param {String} name - * @return {Bool} true if the type is dynamic array - */ -SolidityType.prototype.isDynamicArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should be used to determine if type is static array - * eg: - * "type[]" => false - * "type[4]" => true - * - * @method isStaticArray - * @param {String} name - * @return {Bool} true if the type is static array - */ -SolidityType.prototype.isStaticArray = function (name) { - var nestedTypes = this.nestedTypes(name); - return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); -}; - -/** - * Should return length of static array - * eg. - * "int[32]" => 32 - * "int256[14]" => 14 - * "int[2][3]" => 3 - * "int" => 1 - * "int[1]" => 1 - * "int[]" => 1 - * - * @method staticArrayLength - * @param {String} name - * @return {Number} static array length - */ -SolidityType.prototype.staticArrayLength = function (name) { - var nestedTypes = this.nestedTypes(name); - if (nestedTypes) { - return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); - } - return 1; -}; - -/** - * Should return nested type - * eg. - * "int[32]" => "int" - * "int256[14]" => "int256" - * "int[2][3]" => "int[2]" - * "int" => "int" - * "int[]" => "int" - * - * @method nestedName - * @param {String} name - * @return {String} nested name - */ -SolidityType.prototype.nestedName = function (name) { - // remove last [] in name - var nestedTypes = this.nestedTypes(name); - if (!nestedTypes) { - return name; - } - - return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); -}; - -/** - * Should return true if type has dynamic size by default - * such types are "string", "bytes" - * - * @method isDynamicType - * @param {String} name - * @return {Bool} true if is dynamic, otherwise false - */ -SolidityType.prototype.isDynamicType = function () { - return false; -}; - -/** - * Should return array of nested types - * eg. - * "int[2][3][]" => ["[2]", "[3]", "[]"] - * "int[] => ["[]"] - * "int" => null - * - * @method nestedTypes - * @param {String} name - * @return {Array} array of nested types - */ -SolidityType.prototype.nestedTypes = function (name) { - // return list of strings eg. "[]", "[3]", "[]", "[2]" - return name.match(/(\[[0-9]*\])/g); -}; - -/** - * Should be used to encode the value - * - * @method encode - * @param {Object} value - * @param {String} name - * @return {String} encoded value - */ -SolidityType.prototype.encode = function (value, name) { - var self = this; - if (this.isDynamicArray(name)) { - - return (function () { - var length = value.length; // in int - var nestedName = self.nestedName(name); - - var result = []; - result.push(f.formatInputInt(length).encode()); - - value.forEach(function (v) { - result.push(self.encode(v, nestedName)); - }); - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var nestedName = self.nestedName(name); - - var result = []; - for (var i = 0; i < length; i++) { - result.push(self.encode(value[i], nestedName)); - } - - return result; - })(); - - } - - return this._inputFormatter(value, name).encode(); -}; - -/** - * Should be used to decode value from bytes - * - * @method decode - * @param {String} bytes - * @param {Number} offset in bytes - * @param {String} name type name - * @returns {Object} decoded value - */ -SolidityType.prototype.decode = function (bytes, offset, name) { - var self = this; - - if (this.isDynamicArray(name)) { - - return (function () { - var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int - var arrayStart = arrayOffset + 32; // array starts after length; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - - } else if (this.isStaticArray(name)) { - - return (function () { - var length = self.staticArrayLength(name); // in int - var arrayStart = offset; // in bytes - - var nestedName = self.nestedName(name); - var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes - var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; - var result = []; - - for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { - result.push(self.decode(bytes, arrayStart + i, nestedName)); - } - - return result; - })(); - } else if (this.isDynamicType(name)) { - - return (function () { - var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes - var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes - var roundedLength = Math.floor((length + 31) / 32); // in int - - return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0)); - })(); - } - - var length = this.staticPartLength(name); - return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2))); -}; - -module.exports = SolidityType; diff --git a/node_modules/web3/lib/solidity/uint.js b/node_modules/web3/lib/solidity/uint.js deleted file mode 100644 index 9ac8011..0000000 --- a/node_modules/web3/lib/solidity/uint.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUInt is a prootype that represents uint type - * It matches: - * uint - * uint[] - * uint[4] - * uint[][] - * uint[3][] - * uint[][6][], ... - * uint32 - * uint64[] - * uint8[4] - * uint256[][] - * uint[3][] - * uint64[][6][], ... - */ -var SolidityTypeUInt = function () { - this._inputFormatter = f.formatInputInt; - this._outputFormatter = f.formatOutputUInt; -}; - -SolidityTypeUInt.prototype = new SolidityType({}); -SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; - -SolidityTypeUInt.prototype.isType = function (name) { - return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUInt.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUInt; diff --git a/node_modules/web3/lib/solidity/ureal.js b/node_modules/web3/lib/solidity/ureal.js deleted file mode 100644 index 63d2e31..0000000 --- a/node_modules/web3/lib/solidity/ureal.js +++ /dev/null @@ -1,36 +0,0 @@ -var f = require('./formatters'); -var SolidityType = require('./type'); - -/** - * SolidityTypeUReal is a prootype that represents ureal type - * It matches: - * ureal - * ureal[] - * ureal[4] - * ureal[][] - * ureal[3][] - * ureal[][6][], ... - * ureal32 - * ureal64[] - * ureal8[4] - * ureal256[][] - * ureal[3][] - * ureal64[][6][], ... - */ -var SolidityTypeUReal = function () { - this._inputFormatter = f.formatInputReal; - this._outputFormatter = f.formatOutputUReal; -}; - -SolidityTypeUReal.prototype = new SolidityType({}); -SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; - -SolidityTypeUReal.prototype.isType = function (name) { - return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); -}; - -SolidityTypeUReal.prototype.staticPartLength = function (name) { - return 32 * this.staticArrayLength(name); -}; - -module.exports = SolidityTypeUReal; diff --git a/node_modules/web3/lib/utils/browser-bn.js b/node_modules/web3/lib/utils/browser-bn.js deleted file mode 100644 index 30aabb2..0000000 --- a/node_modules/web3/lib/utils/browser-bn.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -module.exports = BigNumber; // jshint ignore:line - diff --git a/node_modules/web3/lib/utils/browser-xhr.js b/node_modules/web3/lib/utils/browser-xhr.js deleted file mode 100644 index 5d45d72..0000000 --- a/node_modules/web3/lib/utils/browser-xhr.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -// go env doesn't have and need XMLHttpRequest -if (typeof XMLHttpRequest === 'undefined') { - exports.XMLHttpRequest = {}; -} else { - exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line -} - diff --git a/node_modules/web3/lib/utils/config.js b/node_modules/web3/lib/utils/config.js deleted file mode 100644 index 5c16262..0000000 --- a/node_modules/web3/lib/utils/config.js +++ /dev/null @@ -1,79 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file config.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] config - * @constructor - */ - - -/// required to define ETH_BIGNUMBER_ROUNDING_MODE -var BigNumber = require('bignumber.js'); - -var ETH_UNITS = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finney', - 'femtoether', - 'picoether', - 'nanoether', - 'microether', - 'milliether', - 'nano', - 'micro', - 'milli', - 'ether', - 'grand', - 'Mether', - 'Gether', - 'Tether', - 'Pether', - 'Eether', - 'Zether', - 'Yether', - 'Nether', - 'Dether', - 'Vether', - 'Uether' -]; - -module.exports = { - ETH_PADDING: 32, - ETH_SIGNATURE_LENGTH: 4, - ETH_UNITS: ETH_UNITS, - ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, - ETH_POLLING_TIMEOUT: 1000/2, - defaultBlock: 'latest', - defaultAccount: undefined -}; - diff --git a/node_modules/web3/lib/utils/sha3.js b/node_modules/web3/lib/utils/sha3.js deleted file mode 100644 index a7ce60a..0000000 --- a/node_modules/web3/lib/utils/sha3.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3.js - * @author Marek Kotewicz - * @date 2015 - */ - -var CryptoJS = require('crypto-js'); -var sha3 = require('crypto-js/sha3'); - -module.exports = function (value, options) { - if (options && options.encoding === 'hex') { - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - } - - return sha3(value, { - outputLength: 256 - }).toString(); -}; - diff --git a/node_modules/web3/lib/utils/utils.js b/node_modules/web3/lib/utils/utils.js deleted file mode 100644 index c8fb1a6..0000000 --- a/node_modules/web3/lib/utils/utils.js +++ /dev/null @@ -1,597 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utils.js - * @author Marek Kotewicz - * @date 2015 - */ - -/** - * Utils - * - * @module utils - */ - -/** - * Utility functions - * - * @class [utils] utils - * @constructor - */ - - -var BigNumber = require('bignumber.js'); -var sha3 = require('./sha3.js'); -var utf8 = require('utf8'); - -var unitMap = { - 'noether': '0', - 'wei': '1', - 'kwei': '1000', - 'Kwei': '1000', - 'babbage': '1000', - 'femtoether': '1000', - 'mwei': '1000000', - 'Mwei': '1000000', - 'lovelace': '1000000', - 'picoether': '1000000', - 'gwei': '1000000000', - 'Gwei': '1000000000', - 'shannon': '1000000000', - 'nanoether': '1000000000', - 'nano': '1000000000', - 'szabo': '1000000000000', - 'microether': '1000000000000', - 'micro': '1000000000000', - 'finney': '1000000000000000', - 'milliether': '1000000000000000', - 'milli': '1000000000000000', - 'ether': '1000000000000000000', - 'kether': '1000000000000000000000', - 'grand': '1000000000000000000000', - 'mether': '1000000000000000000000000', - 'gether': '1000000000000000000000000000', - 'tether': '1000000000000000000000000000000' -}; - -/** - * Should be called to pad string to expected length - * - * @method padLeft - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padLeft = function (string, chars, sign) { - return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method padRight - * @param {String} string to be padded - * @param {Number} characters that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var padRight = function (string, chars, sign) { - return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method toUtf8 - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toUtf8 = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) - break; - str += String.fromCharCode(code); - } - - return utf8.decode(str); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method toAscii - * @param {String} string in hex - * @returns {String} ascii string representation of hex value - */ -var toAscii = function(hex) { -// Find termination - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method fromUtf8 - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromUtf8 = function(str) { - str = utf8.encode(str); - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code === 0) - break; - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method fromAscii - * @param {String} string - * @param {Number} optional padding - * @returns {String} hex representation of input string - */ -var fromAscii = function(str) { - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method transformToFullName - * @param {Object} json-abi - * @return {String} full fnction/event name - */ -var transformToFullName = function (json) { - if (json.name.indexOf('(') !== -1) { - return json.name; - } - - var typeName = json.inputs.map(function(i){return i.type; }).join(); - return json.name + '(' + typeName + ')'; -}; - -/** - * Should be called to get display name of contract function - * - * @method extractDisplayName - * @param {String} name of function/event - * @returns {String} display name for function/event eg. multiply(uint256) -> multiply - */ -var extractDisplayName = function (name) { - var length = name.indexOf('('); - return length !== -1 ? name.substr(0, length) : name; -}; - -/// @returns overloaded part of function/event name -var extractTypeName = function (name) { - /// TODO: make it invulnerable - var length = name.indexOf('('); - return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; -}; - -/** - * Converts value to it's decimal representation in string - * - * @method toDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var toDecimal = function (value) { - return toBigNumber(value).toNumber(); -}; - -/** - * Converts value to it's hex representation - * - * @method fromDecimal - * @param {String|Number|BigNumber} - * @return {String} - */ -var fromDecimal = function (value) { - var number = toBigNumber(value); - var result = number.toString(16); - - return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BigNumber|Object} - * @return {String} - */ -var toHex = function (val) { - /*jshint maxcomplexity: 8 */ - - if (isBoolean(val)) - return fromDecimal(+val); - - if (isBigNumber(val)) - return fromDecimal(val); - - if (isObject(val)) - return fromUtf8(JSON.stringify(val)); - - // if its a negative number, pass it through fromDecimal - if (isString(val)) { - if (val.indexOf('-0x') === 0) - return fromDecimal(val); - else if(val.indexOf('0x') === 0) - return val; - else if (!isFinite(val)) - return fromAscii(val); - } - - return fromDecimal(val); -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getValueOfUnit = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; - if (unitValue === undefined) { - throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); - } - return new BigNumber(unitValue, 10); -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var fromWei = function(number, unit) { - var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -var toWei = function(number, unit) { - var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return isBigNumber(number) ? returnValue : returnValue.toString(10); -}; - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -var toBigNumber = function(number) { - /*jshint maxcomplexity:5 */ - number = number || 0; - if (isBigNumber(number)) - return number; - - if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x',''), 16); - } - - return new BigNumber(number.toString(10), 10); -}; - -/** - * Takes and input transforms it into bignumber and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BigNumber} - * @return {BigNumber} - */ -var toTwosComplement = function (number) { - var bigNumber = toBigNumber(number); - if (bigNumber.lessThan(0)) { - return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); - } - return bigNumber; -}; - -/** - * Checks if the given string is strictly an address - * - * @method isStrictAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isStrictAddress = function (address) { - return /^0x[0-9a-f]{40}$/i.test(address); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isAddress = function (address) { - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - // check if it has the basic requirements of an address - return false; - } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { - // If it's all small caps or all all caps, return true - return true; - } else { - // Otherwise check each case - return isChecksumAddress(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method isChecksumAddress - * @param {String} address the given HEX adress - * @return {Boolean} -*/ -var isChecksumAddress = function (address) { - // Check each case - address = address.replace('0x',''); - var addressHash = sha3(address.toLowerCase()); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - - - -/** - * Makes a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX adress - * @return {String} -*/ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - address = address.toLowerCase().replace('0x',''); - var addressHash = sha3(address); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Transforms given string to valid 20 bytes-length addres with 0x prefix - * - * @method toAddress - * @param {String} address - * @return {String} formatted address - */ -var toAddress = function (address) { - if (isStrictAddress(address)) { - return address; - } - - if (/^[0-9a-f]{40}$/.test(address)) { - return '0x' + address; - } - - return '0x' + padLeft(toHex(address).substr(2), 40); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object instanceof BigNumber || - (object && object.constructor && object.constructor.name === 'BigNumber'); -}; - -/** - * Returns true if object is string, otherwise false - * - * @method isString - * @param {Object} - * @return {Boolean} - */ -var isString = function (object) { - return typeof object === 'string' || - (object && object.constructor && object.constructor.name === 'String'); -}; - -/** - * Returns true if object is function, otherwise false - * - * @method isFunction - * @param {Object} - * @return {Boolean} - */ -var isFunction = function (object) { - return typeof object === 'function'; -}; - -/** - * Returns true if object is Objet, otherwise false - * - * @method isObject - * @param {Object} - * @return {Boolean} - */ -var isObject = function (object) { - return typeof object === 'object'; -}; - -/** - * Returns true if object is boolean, otherwise false - * - * @method isBoolean - * @param {Object} - * @return {Boolean} - */ -var isBoolean = function (object) { - return typeof object === 'boolean'; -}; - -/** - * Returns true if object is array, otherwise false - * - * @method isArray - * @param {Object} - * @return {Boolean} - */ -var isArray = function (object) { - return object instanceof Array; -}; - -/** - * Returns true if given string is valid json object - * - * @method isJson - * @param {String} - * @return {Boolean} - */ -var isJson = function (str) { - try { - return !!JSON.parse(str); - } catch (e) { - return false; - } -}; - -module.exports = { - padLeft: padLeft, - padRight: padRight, - toHex: toHex, - toDecimal: toDecimal, - fromDecimal: fromDecimal, - toUtf8: toUtf8, - toAscii: toAscii, - fromUtf8: fromUtf8, - fromAscii: fromAscii, - transformToFullName: transformToFullName, - extractDisplayName: extractDisplayName, - extractTypeName: extractTypeName, - toWei: toWei, - fromWei: fromWei, - toBigNumber: toBigNumber, - toTwosComplement: toTwosComplement, - toAddress: toAddress, - isBigNumber: isBigNumber, - isStrictAddress: isStrictAddress, - isAddress: isAddress, - isChecksumAddress: isChecksumAddress, - toChecksumAddress: toChecksumAddress, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBoolean: isBoolean, - isArray: isArray, - isJson: isJson -}; diff --git a/node_modules/web3/lib/version.json b/node_modules/web3/lib/version.json deleted file mode 100644 index ae51445..0000000 --- a/node_modules/web3/lib/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "0.17.0-alpha" -} diff --git a/node_modules/web3/lib/web3.js b/node_modules/web3/lib/web3.js deleted file mode 100644 index dec3af2..0000000 --- a/node_modules/web3/lib/web3.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var RequestManager = require('./web3/requestmanager'); -var Iban = require('./web3/iban'); -var Eth = require('./web3/methods/eth'); -var DB = require('./web3/methods/db'); -var Shh = require('./web3/methods/shh'); -var Net = require('./web3/methods/net'); -var Personal = require('./web3/methods/personal'); -var Settings = require('./web3/settings'); -var version = require('./version.json'); -var utils = require('./utils/utils'); -var sha3 = require('./utils/sha3'); -var extend = require('./web3/extend'); -var Batch = require('./web3/batch'); -var Property = require('./web3/property'); -var HttpProvider = require('./web3/httpprovider'); -var IpcProvider = require('./web3/ipcprovider'); -var BigNumber = require('bignumber.js'); - - - -function Web3 (provider) { - this._requestManager = new RequestManager(provider); - this.currentProvider = provider; - this.eth = new Eth(this); - this.db = new DB(this); - this.shh = new Shh(this); - this.net = new Net(this); - this.personal = new Personal(this); - this.settings = new Settings(); - this.version = { - api: version.version - }; - this.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider - }; - this._extend = extend(this); - this._extend({ - properties: properties() - }); -} - -// expose providers on the class -Web3.providers = { - HttpProvider: HttpProvider, - IpcProvider: IpcProvider -}; - -Web3.prototype.setProvider = function (provider) { - this._requestManager.setProvider(provider); - this.currentProvider = provider; -}; - -Web3.prototype.reset = function (keepIsSyncing) { - this._requestManager.reset(keepIsSyncing); - this.settings = new Settings(); -}; - -Web3.prototype.BigNumber = BigNumber; -Web3.prototype.toHex = utils.toHex; -Web3.prototype.toAscii = utils.toAscii; -Web3.prototype.toUtf8 = utils.toUtf8; -Web3.prototype.fromAscii = utils.fromAscii; -Web3.prototype.fromUtf8 = utils.fromUtf8; -Web3.prototype.toDecimal = utils.toDecimal; -Web3.prototype.fromDecimal = utils.fromDecimal; -Web3.prototype.toBigNumber = utils.toBigNumber; -Web3.prototype.toWei = utils.toWei; -Web3.prototype.fromWei = utils.fromWei; -Web3.prototype.isAddress = utils.isAddress; -Web3.prototype.isChecksumAddress = utils.isChecksumAddress; -Web3.prototype.toChecksumAddress = utils.toChecksumAddress; -Web3.prototype.isIBAN = utils.isIBAN; - - -Web3.prototype.sha3 = function(string, options) { - return '0x' + sha3(string, options); -}; - -/** - * Transforms direct icap to address - */ -Web3.prototype.fromICAP = function (icap) { - var iban = new Iban(icap); - return iban.address(); -}; - -var properties = function () { - return [ - new Property({ - name: 'version.node', - getter: 'web3_clientVersion' - }), - new Property({ - name: 'version.network', - getter: 'net_version', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.ethereum', - getter: 'eth_protocolVersion', - inputFormatter: utils.toDecimal - }), - new Property({ - name: 'version.whisper', - getter: 'shh_version', - inputFormatter: utils.toDecimal - }) - ]; -}; - -Web3.prototype.isConnected = function(){ - return (this.currentProvider && this.currentProvider.isConnected()); -}; - -Web3.prototype.createBatch = function () { - return new Batch(this); -}; - -module.exports = Web3; - diff --git a/node_modules/web3/lib/web3/allevents.js b/node_modules/web3/lib/web3/allevents.js deleted file mode 100644 index 79416f5..0000000 --- a/node_modules/web3/lib/web3/allevents.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file allevents.js - * @author Marek Kotewicz - * @date 2014 - */ - -var sha3 = require('../utils/sha3'); -var SolidityEvent = require('./event'); -var formatters = require('./formatters'); -var utils = require('../utils/utils'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -var AllSolidityEvents = function (requestManager, json, address) { - this._requestManager = requestManager; - this._json = json; - this._address = address; -}; - -AllSolidityEvents.prototype.encode = function (options) { - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.address = this._address; - - return result; -}; - -AllSolidityEvents.prototype.decode = function (data) { - data.data = data.data || ''; - data.topics = data.topics || []; - - var eventTopic = data.topics[0].slice(2); - var match = this._json.filter(function (j) { - return eventTopic === sha3(utils.transformToFullName(j)); - })[0]; - - if (!match) { // cannot find matching event? - console.warn('cannot find event for log'); - return data; - } - - var event = new SolidityEvent(this._requestManager, match, this._address); - return event.decode(data); -}; - -AllSolidityEvents.prototype.execute = function (options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 1) - options = null; - } - - var o = this.encode(options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -AllSolidityEvents.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - contract.allEvents = execute; -}; - -module.exports = AllSolidityEvents; - diff --git a/node_modules/web3/lib/web3/batch.js b/node_modules/web3/lib/web3/batch.js deleted file mode 100644 index 0c9dc98..0000000 --- a/node_modules/web3/lib/web3/batch.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Jsonrpc = require('./jsonrpc'); -var errors = require('./errors'); - -var Batch = function (web3) { - this.requestManager = web3._requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - - if (!Jsonrpc.isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); - } - }); - }); -}; - -module.exports = Batch; - diff --git a/node_modules/web3/lib/web3/contract.js b/node_modules/web3/lib/web3/contract.js deleted file mode 100644 index ef18762..0000000 --- a/node_modules/web3/lib/web3/contract.js +++ /dev/null @@ -1,298 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 3) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - /** - * Should be called to create new contract on a blockchain - * - * @method new - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ - this.new = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; - }; - - this.new.getData = this.getData.bind(this); -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - - - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = function (address, callback) { - var contract = new Contract(this.eth, this.abi, address); - - // this functions are not part of prototype, - // because we dont want to spoil the interface - addFunctionsToContract(contract); - addEventsToContract(contract); - - if (callback) { - callback(null, contract); - } - return contract; -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; -}; - -module.exports = ContractFactory; diff --git a/node_modules/web3/lib/web3/contract_.js b/node_modules/web3/lib/web3/contract_.js deleted file mode 100644 index 614abcd..0000000 --- a/node_modules/web3/lib/web3/contract_.js +++ /dev/null @@ -1,338 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var SolidityEvent = require('./event'); -var SolidityFunction = require('./function'); -var AllEvents = require('./allevents'); - -/** - * Should be called to encode constructor params - * - * @method encodeConstructorParams - * @param {Array} abi - * @param {Array} constructor params - */ -var encodeConstructorParams = function (abi, params) { - return abi.filter(function (json) { - return json.type === 'constructor' && json.inputs.length === params.length; - }).map(function (json) { - return json.inputs.map(function (input) { - return input.type; - }); - }).map(function (types) { - return coder.encodeParams(types, params); - })[0] || ''; -}; - -/** - * Should be called to add functions to contract object - * - * @method addFunctionsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addFunctionsToContract = function (contract) { - contract.abi.filter(function (json) { - return json.type === 'function'; - }).map(function (json) { - return new SolidityFunction(contract._eth, json, contract.address); - }).forEach(function (f) { - f.attachToContract(contract); - }); -}; - -/** - * Should be called to add events to contract object - * - * @method addEventsToContract - * @param {Contract} contract - * @param {Array} abi - */ -var addEventsToContract = function (contract) { - var events = contract.abi.filter(function (json) { - return json.type === 'event'; - }); - - var All = new AllEvents(contract._eth._requestManager, events, contract.address); - All.attachToContract(contract); - - events.map(function (json) { - return new SolidityEvent(contract._eth._requestManager, json, contract.address); - }).forEach(function (e) { - e.attachToContract(contract); - }); -}; - - -/** - * Should be called to check if the contract gets properly deployed on the blockchain. - * - * @method checkForContractAddress - * @param {Object} contract - * @param {Function} callback - * @returns {Undefined} - */ -var checkForContractAddress = function(contract, callback){ - var count = 0, - callbackFired = false; - - // wait for receipt - var filter = contract._eth.filter('latest', function(e){ - if (!e && !callbackFired) { - count++; - - // stop watching after 50 blocks (timeout) - if (count > 50) { - - filter.stopWatching(); - callbackFired = true; - - if (callback) - callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); - else - throw new Error('Contract transaction couldn\'t be found after 50 blocks'); - - - } else { - - contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ - if(receipt && !callbackFired) { - - contract._eth.getCode(receipt.contractAddress, function(e, code){ - /*jshint maxcomplexity: 6 */ - - if(callbackFired || !code) - return; - - filter.stopWatching(); - callbackFired = true; - - if(code.length > 2) { - - // console.log('Contract code deployed!'); - - contract.address = receipt.contractAddress; - - // attach events and methods again after we have - addFunctionsToContract(contract); - addEventsToContract(contract); - - // call callback for the second time - if(callback) - callback(null, contract); - - } else { - if(callback) - callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); - else - throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); - } - }); - } - }); - } - } - }); -}; - -/** - * Should be called to create new ContractFactory instance - * - * @method ContractFactory - * @param {Array} abi - */ -var ContractFactory = function (eth, abi) { - this.eth = eth; - this.abi = abi; - - this.deploy.getData = this.getData.bind(this); -}; - -/** - * Gets the data, which is data to deploy plus constructor params - * - * @method getData - */ -ContractFactory.prototype.getData = function () { - var options = {}; // required! - var args = Array.prototype.slice.call(arguments); - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - return options.data; -}; - -/** - * Should be called to create new ContractFactory - * - * @method contract - * @param {Array} abi - * @returns {ContractFactory} new contract factory - */ -//var contract = function (abi) { - //return new ContractFactory(abi); -//}; - -/** - * Should be called to create new contract on a blockchain - * - * @method deploy - * @param {Any} contract constructor param1 (optional) - * @param {Any} contract constructor param2 (optional) - * @param {Object} contract transaction object (required) - * @param {Function} callback - * @returns {Contract} returns contract instance - */ -ContractFactory.prototype.deploy = function () { - var contract = new Contract(this.eth, this.abi); - - // parse arguments - var options = {}; // required! - var callback; - - var args = Array.prototype.slice.call(arguments); - if (utils.isFunction(args[args.length - 1])) { - callback = args.pop(); - } - - var last = args[args.length - 1]; - if (utils.isObject(last) && !utils.isArray(last)) { - options = args.pop(); - } - - var bytes = encodeConstructorParams(this.abi, args); - options.data += bytes; - - if (callback) { - - // wait for the contract address adn check if the code was deployed - this.eth.sendTransaction(options, function (err, hash) { - if (err) { - callback(err); - } else { - // add the transaction hash - contract.transactionHash = hash; - - // call callback for the first time - callback(null, contract); - - checkForContractAddress(contract, callback); - } - }); - } else { - var hash = this.eth.sendTransaction(options); - // add the transaction hash - contract.transactionHash = hash; - checkForContractAddress(contract); - } - - return contract; -}; - - -/** - * Should be called to create new contract instance - * - * @method Contract - * @param {Object} eth - * @param {Array} abi - * @param {Address} contract address - */ -var Contract = function (eth, abi, address) { - this._eth = eth; - this.transactionHash = null; - this.address = address; - this.abi = abi; - console.log(this); -}; - -/** - * Should be called to get access to existing contract on a blockchain - * - * @method at - * @param {Address} contract address (required) - * @param {Function} callback {optional) - * @returns {Contract} returns contract if no callback was passed, - * otherwise calls callback function (err, contract) - */ -ContractFactory.prototype.at = Contract.bind(null, 'test');//function (address, callback) { -// var contract = new Contract(this.eth, this.abi, address); - -// // this functions are not part of prototype, -// // because we dont want to spoil the interface -// addFunctionsToContract(contract); -// addEventsToContract(contract); - -// if (callback) { -// callback(null, contract); -// } -// return contract; -// }; - - - -/* - -new web3.eth.contract(abi, address) -eventemitter = web3.eth.contract.deploy(param1, {data: '0x23456'}); -eventEmitter.on('mined', function(err, address){ -    new web3.eth.contract(abi, address) - }); -eventEmitter.on('transactionHash', function(err, hash){ - - }); -web3.eth.contract.getData(abi, param1, {data: '0x23456'}) -> 0x23456780000005345345 -myContrac.myMethod(param1) -myContrac.myMethod.getData(param1) - -Or - -var myContrac = new web3.eth.contract(abi, address) -eventemitter = new web3.eth.contract(abi).deploy(param1, {data: '0x23456'}); -eventEmitter.on('mined', function(err, address){ -    new web3.eth.contract(abi, address) - }); -eventEmitter.on('transactionHash', function(err, hash){ - - }); -new web3.eth.contract(abi).deploy.getData(param1, {data: '0x23456'}) -> 0x23456780000005345345 -myContrac.myMethod(param1) -myContrac.myMethod.getData(param1) - -var myContrac2 = new web3.eth.contract(abi) -myContrac2.address = '0x12345678...'; - -*/ - - -module.exports = ContractFactory; - diff --git a/node_modules/web3/lib/web3/errors.js b/node_modules/web3/lib/web3/errors.js deleted file mode 100644 index 7b66f7d..0000000 --- a/node_modules/web3/lib/web3/errors.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Marek Kotewicz - * @date 2015 - */ - -module.exports = { - InvalidNumberOfParams: function () { - return new Error('Invalid number of input parameters'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - } -}; - diff --git a/node_modules/web3/lib/web3/event.js b/node_modules/web3/lib/web3/event.js deleted file mode 100644 index c9b2a6c..0000000 --- a/node_modules/web3/lib/web3/event.js +++ /dev/null @@ -1,208 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file event.js - * @author Marek Kotewicz - * @date 2014 - */ - -var utils = require('../utils/utils'); -var coder = require('../solidity/coder'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); -var Filter = require('./filter'); -var watches = require('./methods/watches'); - -/** - * This prototype should be used to create event filters - */ -var SolidityEvent = function (requestManager, json, address) { - this._requestManager = requestManager; - this._params = json.inputs; - this._name = utils.transformToFullName(json); - this._address = address; - this._anonymous = json.anonymous; -}; - -/** - * Should be used to get filtered param types - * - * @method types - * @param {Bool} decide if returned typed should be indexed - * @return {Array} array of types - */ -SolidityEvent.prototype.types = function (indexed) { - return this._params.filter(function (i) { - return i.indexed === indexed; - }).map(function (i) { - return i.type; - }); -}; - -/** - * Should be used to get event display name - * - * @method displayName - * @return {String} event display name - */ -SolidityEvent.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get event type name - * - * @method typeName - * @return {String} event type name - */ -SolidityEvent.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be used to get event signature - * - * @method signature - * @return {String} event signature - */ -SolidityEvent.prototype.signature = function () { - return sha3(this._name); -}; - -/** - * Should be used to encode indexed params and options to one final object - * - * @method encode - * @param {Object} indexed - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -SolidityEvent.prototype.encode = function (indexed, options) { - indexed = indexed || {}; - options = options || {}; - var result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - result.topics = []; - - result.address = this._address; - if (!this._anonymous) { - result.topics.push('0x' + this.signature()); - } - - var indexedTopics = this._params.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = indexed[i.name]; - if (value === undefined || value === null) { - return null; - } - - if (utils.isArray(value)) { - return value.map(function (v) { - return '0x' + coder.encodeParam(i.type, v); - }); - } - return '0x' + coder.encodeParam(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method decode - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -SolidityEvent.prototype.decode = function (data) { - - data.data = data.data || ''; - data.topics = data.topics || []; - - var argTopics = this._anonymous ? data.topics : data.topics.slice(1); - var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); - var indexedParams = coder.decodeParams(this.types(true), indexedData); - - var notIndexedData = data.data.slice(2); - var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); - - var result = formatters.outputLogFormatter(data); - result.event = this.displayName(); - result.address = data.address; - - result.args = this._params.reduce(function (acc, current) { - acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); - return acc; - }, {}); - - delete result.data; - delete result.topics; - - return result; -}; - -/** - * Should be used to create new filter object from event - * - * @method execute - * @param {Object} indexed - * @param {Object} options - * @return {Object} filter object - */ -SolidityEvent.prototype.execute = function (indexed, options, callback) { - - if (utils.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; - if(arguments.length === 2) - options = null; - if(arguments.length === 1) { - options = null; - indexed = {}; - } - } - - var o = this.encode(indexed, options); - var formatter = this.decode.bind(this); - return new Filter(this._requestManager, o, watches.eth(), formatter, callback); -}; - -/** - * Should be used to attach event to contract object - * - * @method attachToContract - * @param {Contract} - */ -SolidityEvent.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = this.execute.bind(this, contract); -}; - -module.exports = SolidityEvent; - diff --git a/node_modules/web3/lib/web3/extend.js b/node_modules/web3/lib/web3/extend.js deleted file mode 100644 index 55ad7dc..0000000 --- a/node_modules/web3/lib/web3/extend.js +++ /dev/null @@ -1,48 +0,0 @@ -var formatters = require('./formatters'); -var utils = require('./../utils/utils'); -var Method = require('./method'); -var Property = require('./property'); - -// TODO: refactor, so the input params are not altered. -// it's necessary to make same 'extension' work with multiple providers -var extend = function (web3) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!web3[extension.property]) { - web3[extension.property] = {}; - } - extendedObject = web3[extension.property]; - } else { - extendedObject = web3; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - method.attachToObject(extendedObject); - method.setRequestManager(web3._requestManager); - }); - } - - if (extension.properties) { - extension.properties.forEach(function (property) { - property.attachToObject(extendedObject); - property.setRequestManager(web3._requestManager); - }); - } - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - ex.Property = Property; - - return ex; -}; - - - -module.exports = extend; - diff --git a/node_modules/web3/lib/web3/filter.js b/node_modules/web3/lib/web3/filter.js deleted file mode 100644 index e9f4375..0000000 --- a/node_modules/web3/lib/web3/filter.js +++ /dev/null @@ -1,234 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file filter.js - * @authors: - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * Gav Wood - * @date 2014 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -/** -* Converts a given topic to a hex string, but also allows null values. -* -* @param {Mixed} value -* @return {String} -*/ -var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); -}; - -/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones -/// @param should be string or object -/// @returns options string or object -var getOptions = function (options) { - - if (utils.isString(options)) { - return options; - } - - options = options || {}; - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - return { - topics: options.topics, - from: options.from, - to: options.to, - address: options.address, - fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), - toBlock: formatters.inputBlockNumberFormatter(options.toBlock) - }; -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method getLogsAtStart -@param {Object} self -@param {funciton} -*/ -var getLogsAtStart = function(self, callback){ - // call getFilterLogs for the first watch callback start - if (!utils.isString(self.options)) { - self.get(function (err, messages) { - // don't send all the responses to all the watches again... just to self one - if (err) { - callback(err); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - callback(null, message); - }); - } - }); - } -}; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollFilter -@param {Object} self -*/ -var pollFilter = function(self) { - - var onMessage = function (error, messages) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isArray(messages)) { - messages.forEach(function (message) { - message = self.formatter ? self.formatter(message) : message; - self.callbacks.forEach(function (callback) { - callback(null, message); - }); - }); - } - }; - - self.requestManager.startPolling({ - method: self.implementation.poll.call, - params: [self.filterId], - }, self.filterId, onMessage, self.stopWatching.bind(self)); - -}; - -var Filter = function (requestManager, options, methods, formatter, callback) { - var self = this; - var implementation = {}; - methods.forEach(function (method) { - method.setRequestManager(requestManager); - method.attachToObject(implementation); - }); - this.requestManager = requestManager; - this.options = getOptions(options); - this.implementation = implementation; - this.filterId = null; - this.callbacks = []; - this.getLogsCallbacks = []; - this.pollFilters = []; - this.formatter = formatter; - this.implementation.newFilter(this.options, function(error, id){ - if(error) { - self.callbacks.forEach(function(cb){ - cb(error); - }); - } else { - self.filterId = id; - - // check if there are get pending callbacks as a consequence - // of calling get() with filterId unassigned. - self.getLogsCallbacks.forEach(function (cb){ - self.get(cb); - }); - self.getLogsCallbacks = []; - - // get filter logs for the already existing watch calls - self.callbacks.forEach(function(cb){ - getLogsAtStart(self, cb); - }); - if(self.callbacks.length > 0) - pollFilter(self); - - // start to watch immediately - if(typeof callback === 'function') { - return self.watch(callback); - } - } - }); - - return this; -}; - -Filter.prototype.watch = function (callback) { - this.callbacks.push(callback); - - if(this.filterId) { - getLogsAtStart(this, callback); - pollFilter(this); - } - - return this; -}; - -Filter.prototype.stopWatching = function (callback) { - this.requestManager.stopPolling(this.filterId); - this.callbacks = []; - // remove filter async - if (callback) { - this.implementation.uninstallFilter(this.filterId, callback); - } else { - return this.implementation.uninstallFilter(this.filterId); - } -}; - -Filter.prototype.get = function (callback) { - var self = this; - if (utils.isFunction(callback)) { - if (this.filterId === null) { - // If filterId is not set yet, call it back - // when newFilter() assigns it. - this.getLogsCallbacks.push(callback); - } else { - this.implementation.getLogs(this.filterId, function(err, res){ - if (err) { - callback(err); - } else { - callback(null, res.map(function (log) { - return self.formatter ? self.formatter(log) : log; - })); - } - }); - } - } else { - if (this.filterId === null) { - throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); - } - var logs = this.implementation.getLogs(this.filterId); - return logs.map(function (log) { - return self.formatter ? self.formatter(log) : log; - }); - } - - return this; -}; - -module.exports = Filter; - diff --git a/node_modules/web3/lib/web3/formatters.js b/node_modules/web3/lib/web3/formatters.js deleted file mode 100644 index ed322c0..0000000 --- a/node_modules/web3/lib/web3/formatters.js +++ /dev/null @@ -1,303 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -var utils = require('../utils/utils'); -var config = require('../utils/config'); -var Iban = require('./iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBigNumber(number); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return config.defaultBlock; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return utils.toHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - - if (options.from) { - options.from = inputAddressFormatter(options.from); - } - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputTransactionFormatter = function (options){ - - options.from = options.from || config.defaultAccount; - options.from = inputAddressFormatter(options.from); - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.fromDecimal(options[key]); - }); - - return options; -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.toDecimal(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.toDecimal(tx.transactionIndex); - tx.nonce = utils.toDecimal(tx.nonce); - tx.gas = utils.toDecimal(tx.gas); - tx.gasPrice = utils.toBigNumber(tx.gasPrice); - tx.value = utils.toBigNumber(tx.value); - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.toDecimal(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - - if(utils.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(function(log){ - return outputLogFormatter(log); - }); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.toDecimal(block.gasLimit); - block.gasUsed = utils.toDecimal(block.gasUsed); - block.size = utils.toDecimal(block.size); - block.timestamp = utils.toDecimal(block.timestamp); - if(block.number !== null) - block.number = utils.toDecimal(block.number); - - block.difficulty = utils.toBigNumber(block.difficulty); - block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); - - if (utils.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!utils.isString(item)) - return outputTransactionFormatter(item); - }); - } - - return block; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - if(log.blockNumber !== null) - log.blockNumber = utils.toDecimal(log.blockNumber); - if(log.transactionIndex !== null) - log.transactionIndex = utils.toDecimal(log.transactionIndex); - if(log.logIndex !== null) - log.logIndex = utils.toDecimal(log.logIndex); - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - post.ttl = utils.fromDecimal(post.ttl); - post.workToProve = utils.fromDecimal(post.workToProve); - post.priority = utils.fromDecimal(post.priority); - - // fallback - if (!utils.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.toDecimal(post.expiry); - post.sent = utils.toDecimal(post.sent); - post.ttl = utils.toDecimal(post.ttl); - post.workProved = utils.toDecimal(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.toAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toAscii(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return '0x' + iban.address(); - } else if (utils.isStrictAddress(address)) { - return address; - } else if (utils.isAddress(address)) { - return '0x' + address; - } - throw new Error('invalid address'); -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.toDecimal(result.startingBlock); - result.currentBlock = utils.toDecimal(result.currentBlock); - result.highestBlock = utils.toDecimal(result.highestBlock); - if (result.knownStates) { - result.knownStates = utils.toDecimal(result.knownStates); - result.pulledStates = utils.toDecimal(result.pulledStates); - } - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - diff --git a/node_modules/web3/lib/web3/function.js b/node_modules/web3/lib/web3/function.js deleted file mode 100644 index d771514..0000000 --- a/node_modules/web3/lib/web3/function.js +++ /dev/null @@ -1,247 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - diff --git a/node_modules/web3/lib/web3/function_.js b/node_modules/web3/lib/web3/function_.js deleted file mode 100644 index d771514..0000000 --- a/node_modules/web3/lib/web3/function_.js +++ /dev/null @@ -1,247 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file function.js - * @author Marek Kotewicz - * @date 2015 - */ - -var coder = require('../solidity/coder'); -var utils = require('../utils/utils'); -var formatters = require('./formatters'); -var sha3 = require('../utils/sha3'); - -/** - * This prototype should be used to call/sendTransaction to solidity functions - */ -var SolidityFunction = function (eth, json, address) { - this._eth = eth; - this._inputTypes = json.inputs.map(function (i) { - return i.type; - }); - this._outputTypes = json.outputs.map(function (i) { - return i.type; - }); - this._constant = json.constant; - this._name = utils.transformToFullName(json); - this._address = address; -}; - -SolidityFunction.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -SolidityFunction.prototype.extractDefaultBlock = function (args) { - if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { - return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! - } -}; - -/** - * Should be used to create payload from arguments - * - * @method toPayload - * @param {Array} solidity function params - * @param {Object} optional payload options - */ -SolidityFunction.prototype.toPayload = function (args) { - var options = {}; - if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { - options = args[args.length - 1]; - } - options.to = this._address; - options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); - return options; -}; - -/** - * Should be used to get function signature - * - * @method signature - * @return {String} function signature - */ -SolidityFunction.prototype.signature = function () { - return sha3(this._name).slice(0, 8); -}; - - -SolidityFunction.prototype.unpackOutput = function (output) { - if (!output) { - return; - } - - output = output.length >= 2 ? output.slice(2) : output; - var result = coder.decodeParams(this._outputTypes, output); - return result.length === 1 ? result[0] : result; -}; - -/** - * Calls a contract function. - * - * @method call - * @param {...Object} Contract function arguments - * @param {function} If the last argument is a function, the contract function - * call will be asynchronous, and the callback will be passed the - * error and result. - * @return {String} output bytes - */ -SolidityFunction.prototype.call = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var defaultBlock = this.extractDefaultBlock(args); - var payload = this.toPayload(args); - - - if (!callback) { - var output = this._eth.call(payload, defaultBlock); - return this.unpackOutput(output); - } - - var self = this; - this._eth.call(payload, defaultBlock, function (error, output) { - callback(error, self.unpackOutput(output)); - }); -}; - -/** - * Should be used to sendTransaction to solidity function - * - * @method sendTransaction - */ -SolidityFunction.prototype.sendTransaction = function () { - var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.sendTransaction(payload); - } - - this._eth.sendTransaction(payload, callback); -}; - -/** - * Should be used to estimateGas of solidity function - * - * @method estimateGas - */ -SolidityFunction.prototype.estimateGas = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - - if (!callback) { - return this._eth.estimateGas(payload); - } - - this._eth.estimateGas(payload, callback); -}; - -/** - * Return the encoded data of the call - * - * @method getData - * @return {String} the encoded data - */ -SolidityFunction.prototype.getData = function () { - var args = Array.prototype.slice.call(arguments); - var payload = this.toPayload(args); - - return payload.data; -}; - -/** - * Should be used to get function display name - * - * @method displayName - * @return {String} display name of the function - */ -SolidityFunction.prototype.displayName = function () { - return utils.extractDisplayName(this._name); -}; - -/** - * Should be used to get function type name - * - * @method typeName - * @return {String} type name of the function - */ -SolidityFunction.prototype.typeName = function () { - return utils.extractTypeName(this._name); -}; - -/** - * Should be called to get rpc requests from solidity function - * - * @method request - * @returns {Object} - */ -SolidityFunction.prototype.request = function () { - var args = Array.prototype.slice.call(arguments); - var callback = this.extractCallback(args); - var payload = this.toPayload(args); - var format = this.unpackOutput.bind(this); - - return { - method: this._constant ? 'eth_call' : 'eth_sendTransaction', - callback: callback, - params: [payload], - format: format - }; -}; - -/** - * Should be called to execute function - * - * @method execute - */ -SolidityFunction.prototype.execute = function () { - var transaction = !this._constant; - - // send transaction - if (transaction) { - return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); - } - - // call - return this.call.apply(this, Array.prototype.slice.call(arguments)); -}; - -/** - * Should be called to attach function to contract - * - * @method attachToContract - * @param {Contract} - */ -SolidityFunction.prototype.attachToContract = function (contract) { - var execute = this.execute.bind(this); - execute.request = this.request.bind(this); - execute.call = this.call.bind(this); - execute.sendTransaction = this.sendTransaction.bind(this); - execute.estimateGas = this.estimateGas.bind(this); - execute.getData = this.getData.bind(this); - var displayName = this.displayName(); - if (!contract[displayName]) { - contract[displayName] = execute; - } - contract[displayName][this.typeName()] = execute; // circular!!!! -}; - -module.exports = SolidityFunction; - diff --git a/node_modules/web3/lib/web3/httpprovider.js b/node_modules/web3/lib/web3/httpprovider.js deleted file mode 100644 index dd8b8b5..0000000 --- a/node_modules/web3/lib/web3/httpprovider.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var errors = require('./errors'); - -// workaround to use httpprovider in different envs -var XMLHttpRequest; // jshint ignore: line - -// browser -if (typeof window !== 'undefined' && window.XMLHttpRequest) { - XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line - -// node -} else { - XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line -} - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function (host) { - this.host = host || 'http://localhost:8545'; -}; - -/** - * Should be called to prepare new XMLHttpRequest - * - * @method prepareRequest - * @param {Boolean} true if request should be async - * @return {XMLHttpRequest} object - */ -HttpProvider.prototype.prepareRequest = function (async) { - var request = new XMLHttpRequest(); - request.open('POST', this.host, async); - request.setRequestHeader('Content-Type','application/json'); - return request; -}; - -/** - * Should be called to make sync request - * - * @method send - * @param {Object} payload - * @return {Object} result - */ -HttpProvider.prototype.send = function (payload) { - var request = this.prepareRequest(false); - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - throw errors.InvalidConnection(this.host); - } - - var result = request.responseText; - - try { - result = JSON.parse(result); - } catch(e) { - throw errors.InvalidResponse(request.responseText); - } - - return result; -}; - -/** - * Should be used to make async request - * - * @method sendAsync - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.sendAsync = function (payload, callback) { - var request = this.prepareRequest(true); - - request.onreadystatechange = function() { - if (request.readyState === 4) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - callback(error, result); - } - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - callback(errors.InvalidConnection(this.host)); - } -}; - -/** - * Synchronously tries to make Http request - * - * @method isConnected - * @return {Boolean} returns true if request haven't failed. Otherwise false - */ -HttpProvider.prototype.isConnected = function() { - try { - this.send({ - id: 9999999999, - jsonrpc: '2.0', - method: 'net_listening', - params: [] - }); - return true; - } catch(e) { - return false; - } -}; - -module.exports = HttpProvider; - diff --git a/node_modules/web3/lib/web3/iban.js b/node_modules/web3/lib/web3/iban.js deleted file mode 100644 index bd22ed2..0000000 --- a/node_modules/web3/lib/web3/iban.js +++ /dev/null @@ -1,227 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * @author Marek Kotewicz - * @date 2015 - */ - -var BigNumber = require('bignumber.js'); - -var padLeft = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '0' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function (iban) { - this._iban = iban; -}; - -/** - * This method should be used to create iban object from ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = padLeft(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * Thos method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method address - * @returns {String} client direct address - */ -Iban.prototype.address = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return padLeft(asBn.toString(16), 20); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; - diff --git a/node_modules/web3/lib/web3/ipcprovider.js b/node_modules/web3/lib/web3/ipcprovider.js deleted file mode 100644 index 4dc46c1..0000000 --- a/node_modules/web3/lib/web3/ipcprovider.js +++ /dev/null @@ -1,207 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file ipcprovider.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var utils = require('../utils/utils'); -var errors = require('./errors'); - - -var IpcProvider = function (path, net) { - var _this = this; - this.responseCallbacks = {}; - this.path = path; - - this.connection = net.connect({path: this.path}); - - this.connection.on('error', function(e){ - console.error('IPC Connection Error', e); - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.on('data', function(data) { - /*jshint maxcomplexity: 6 */ - - _this._parseResponse(data.toString()).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(utils.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // fire the callback - if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }); -}; - -/** -Will parse the response and make an array out of it. - -@method _parseResponse -@param {String} data -*/ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - - -/** -Check if the current connection is still valid. - -@method isConnected -*/ -IpcProvider.prototype.isConnected = function() { - var _this = this; - - // try reconnect, when connection is gone - if(!_this.connection.writable) - _this.connection.connect({path: _this.path}); - - return !!this.connection.writable; -}; - -IpcProvider.prototype.send = function (payload) { - - if(this.connection.writeSync) { - var result; - - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - var data = this.connection.writeSync(JSON.stringify(payload)); - - try { - result = JSON.parse(data); - } catch(e) { - throw errors.InvalidResponse(data); - } - - return result; - - } else { - throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); - } -}; - -IpcProvider.prototype.sendAsync = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -module.exports = IpcProvider; - diff --git a/node_modules/web3/lib/web3/jsonrpc.js b/node_modules/web3/lib/web3/jsonrpc.js deleted file mode 100644 index 16e09e0..0000000 --- a/node_modules/web3/lib/web3/jsonrpc.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Marek Kotewicz - * Aaron Kumavis - * @date 2015 - */ - -// Initialize Jsonrpc as a simple object with utility functions. -var Jsonrpc = { - messageId: 0 -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.toPayload = function (method, params) { - if (!method) - console.error('jsonrpc method should be specified!'); - - // advance message ID - Jsonrpc.messageId++; - - return { - jsonrpc: '2.0', - id: Jsonrpc.messageId, - method: method, - params: params || [] - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.isValidResponse = function (response) { - return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response); - - function validateSingleMessage(message){ - return !!message && - !message.error && - message.jsonrpc === '2.0' && - typeof message.id === 'number' && - message.result !== undefined; // only undefined is not valid json object - } -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.toBatchPayload = function (messages) { - return messages.map(function (message) { - return Jsonrpc.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - diff --git a/node_modules/web3/lib/web3/method.js b/node_modules/web3/lib/web3/method.js deleted file mode 100644 index ebedd02..0000000 --- a/node_modules/web3/lib/web3/method.js +++ /dev/null @@ -1,165 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file method.js - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); -var errors = require('./errors'); - -var Method = function (options) { - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.requestManager = null; -}; - -Method.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return utils.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - return this.outputFormatter && result ? this.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - return { - method: call, - params: params, - callback: callback - }; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; // TODO!!! that's ugly. filter.js uses it - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -Method.prototype.buildCall = function() { - var method = this; - var send = function () { - var payload = method.toPayload(Array.prototype.slice.call(arguments)); - if (payload.callback) { - return method.requestManager.sendAsync(payload, function (err, result) { - payload.callback(err, method.formatOutput(result)); - }); - } - return method.formatOutput(method.requestManager.send(payload)); - }; - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; - diff --git a/node_modules/web3/lib/web3/methods/db.js b/node_modules/web3/lib/web3/methods/db.js deleted file mode 100644 index 4b63960..0000000 --- a/node_modules/web3/lib/web3/methods/db.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file db.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -var DB = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(web3._requestManager); - }); -}; - -var methods = function () { - var putString = new Method({ - name: 'putString', - call: 'db_putString', - params: 3 - }); - - var getString = new Method({ - name: 'getString', - call: 'db_getString', - params: 2 - }); - - var putHex = new Method({ - name: 'putHex', - call: 'db_putHex', - params: 3 - }); - - var getHex = new Method({ - name: 'getHex', - call: 'db_getHex', - params: 2 - }); - - return [ - putString, getString, putHex, getHex - ]; -}; - -module.exports = DB; diff --git a/node_modules/web3/lib/web3/methods/eth.js b/node_modules/web3/lib/web3/methods/eth.js deleted file mode 100644 index 553d07d..0000000 --- a/node_modules/web3/lib/web3/methods/eth.js +++ /dev/null @@ -1,347 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var formatters = require('../formatters'); -var utils = require('../../utils/utils'); -var Method = require('../method'); -var Property = require('../property'); -var c = require('../../utils/config'); -var Contract = require('../contract'); -var watches = require('./watches'); -var Filter = require('../filter'); -var IsSyncing = require('../syncing'); -var namereg = require('../namereg'); -var Iban = require('../iban'); -var transfer = require('../transfer'); - -var blockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - -function Eth(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); - - - this.iban = Iban; - this.sendIBANTransaction = transfer.bind(null, this); -} - -Object.defineProperty(Eth.prototype, 'defaultBlock', { - get: function () { - return c.defaultBlock; - }, - set: function (val) { - c.defaultBlock = val; - return val; - } -}); - -Object.defineProperty(Eth.prototype, 'defaultAccount', { - get: function () { - return c.defaultAccount; - }, - set: function (val) { - c.defaultAccount = val; - return val; - } -}); - -var methods = function () { - var getBalance = new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: formatters.outputBigNumberFormatter - }); - - var getStorageAt = new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] - }); - - var getCode = new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var getBlock = new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatters.outputBlockFormatter - }); - - var getUncle = new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputBlockFormatter, - - }); - - var getCompilers = new Method({ - name: 'getCompilers', - call: 'eth_getCompilers', - params: 0 - }); - - var getBlockTransactionCount = new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getBlockUncleCount = new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatters.inputBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var getTransaction = new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionFromBlock = new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], - outputFormatter: formatters.outputTransactionFormatter - }); - - var getTransactionReceipt = new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - outputFormatter: formatters.outputTransactionReceiptFormatter - }); - - var getTransactionCount = new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], - outputFormatter: utils.toDecimal - }); - - var sendRawTransaction = new Method({ - name: 'sendRawTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }); - - var sendTransaction = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - - var sign = new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, null] - }); - - var call = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] - }); - - var estimateGas = new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.toDecimal - }); - - var compileSolidity = new Method({ - name: 'compile.solidity', - call: 'eth_compileSolidity', - params: 1 - }); - - var compileLLL = new Method({ - name: 'compile.lll', - call: 'eth_compileLLL', - params: 1 - }); - - var compileSerpent = new Method({ - name: 'compile.serpent', - call: 'eth_compileSerpent', - params: 1 - }); - - var submitWork = new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }); - - var getWork = new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }); - - return [ - getBalance, - getStorageAt, - getCode, - getBlock, - getUncle, - getCompilers, - getBlockTransactionCount, - getBlockUncleCount, - getTransaction, - getTransactionFromBlock, - getTransactionReceipt, - getTransactionCount, - call, - estimateGas, - sendRawTransaction, - sendTransaction, - sign, - compileSolidity, - compileLLL, - compileSerpent, - submitWork, - getWork - ]; -}; - - -var properties = function () { - return [ - new Property({ - name: 'coinbase', - getter: 'eth_coinbase' - }), - new Property({ - name: 'mining', - getter: 'eth_mining' - }), - new Property({ - name: 'hashrate', - getter: 'eth_hashrate', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'syncing', - getter: 'eth_syncing', - outputFormatter: formatters.outputSyncingFormatter - }), - new Property({ - name: 'gasPrice', - getter: 'eth_gasPrice', - outputFormatter: formatters.outputBigNumberFormatter - }), - new Property({ - name: 'accounts', - getter: 'eth_accounts' - }), - new Property({ - name: 'blockNumber', - getter: 'eth_blockNumber', - outputFormatter: utils.toDecimal - }), - new Property({ - name: 'protocolVersion', - getter: 'eth_protocolVersion' - }) - ]; -}; - -Eth.prototype.contract = function (abi) { - var factory = new Contract(this, abi); - return factory; -}; - -Eth.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback); -}; - -Eth.prototype.namereg = function () { - return this.contract(namereg.global.abi).at(namereg.global.address); -}; - -Eth.prototype.icapNamereg = function () { - return this.contract(namereg.icap.abi).at(namereg.icap.address); -}; - -Eth.prototype.isSyncing = function (callback) { - return new IsSyncing(this._requestManager, callback); -}; - -module.exports = Eth; - diff --git a/node_modules/web3/lib/web3/methods/net.js b/node_modules/web3/lib/web3/methods/net.js deleted file mode 100644 index 0fdb852..0000000 --- a/node_modules/web3/lib/web3/methods/net.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file eth.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var utils = require('../../utils/utils'); -var Property = require('../property'); - -var Net = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(web3._requestManager); - }); -}; - -/// @returns an array of objects describing web3.eth api properties -var properties = function () { - return [ - new Property({ - name: 'listening', - getter: 'net_listening' - }), - new Property({ - name: 'peerCount', - getter: 'net_peerCount', - outputFormatter: utils.toDecimal - }) - ]; -}; - -module.exports = Net; diff --git a/node_modules/web3/lib/web3/methods/personal.js b/node_modules/web3/lib/web3/methods/personal.js deleted file mode 100644 index 1459e4e..0000000 --- a/node_modules/web3/lib/web3/methods/personal.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2015 - */ - -"use strict"; - -var Method = require('../method'); -var Property = require('../property'); -var formatters = require('../formatters'); - -function Personal(web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); - - properties().forEach(function(p) { - p.attachToObject(self); - p.setRequestManager(self._requestManager); - }); -} - -var methods = function () { - var newAccount = new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null] - }); - - var unlockAccount = new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [formatters.inputAddressFormatter, null, null] - }); - - var unlockAccountAndSendTransaction = new Method({ - name: 'unlockAccountAndSendTransaction', // sendTransaction - call: 'personal_signAndSendTransaction', // personal_sendTransaction - params: 2, - inputFormatter: [formatters.inputTransactionFormatter, null] - }); - - var lockAccount = new Method({ - name: 'lockAccount', - call: 'personal_lockAccount', - params: 1, - inputFormatter: [formatters.inputAddressFormatter] - }); - - return [ - newAccount, - unlockAccount, - unlockAccountAndSendTransaction, - lockAccount - ]; -}; - -var properties = function () { - return [ - new Property({ - name: 'listAccounts', - getter: 'personal_listAccounts' - }) - ]; -}; - - -module.exports = Personal; diff --git a/node_modules/web3/lib/web3/methods/shh.js b/node_modules/web3/lib/web3/methods/shh.js deleted file mode 100644 index a3c51f1..0000000 --- a/node_modules/web3/lib/web3/methods/shh.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file shh.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); -var formatters = require('../formatters'); -var Filter = require('../filter'); -var watches = require('./watches'); - -var Shh = function (web3) { - this._requestManager = web3._requestManager; - - var self = this; - - methods().forEach(function(method) { - method.attachToObject(self); - method.setRequestManager(self._requestManager); - }); -}; - -Shh.prototype.filter = function (fil, callback) { - return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); -}; - -var methods = function () { - - var post = new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [formatters.inputPostFormatter] - }); - - var newIdentity = new Method({ - name: 'newIdentity', - call: 'shh_newIdentity', - params: 0 - }); - - var hasIdentity = new Method({ - name: 'hasIdentity', - call: 'shh_hasIdentity', - params: 1 - }); - - var newGroup = new Method({ - name: 'newGroup', - call: 'shh_newGroup', - params: 0 - }); - - var addToGroup = new Method({ - name: 'addToGroup', - call: 'shh_addToGroup', - params: 0 - }); - - return [ - post, - newIdentity, - hasIdentity, - newGroup, - addToGroup - ]; -}; - -module.exports = Shh; - diff --git a/node_modules/web3/lib/web3/methods/watches.js b/node_modules/web3/lib/web3/methods/watches.js deleted file mode 100644 index 23c7542..0000000 --- a/node_modules/web3/lib/web3/methods/watches.js +++ /dev/null @@ -1,114 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file watches.js - * @authors: - * Marek Kotewicz - * @date 2015 - */ - -var Method = require('../method'); - -/// @returns an array of objects describing web3.eth.filter api methods -var eth = function () { - var newFilterCall = function (args) { - var type = args[0]; - - switch(type) { - case 'latest': - args.shift(); - this.params = 0; - return 'eth_newBlockFilter'; - case 'pending': - args.shift(); - this.params = 0; - return 'eth_newPendingTransactionFilter'; - default: - return 'eth_newFilter'; - } - }; - - var newFilter = new Method({ - name: 'newFilter', - call: newFilterCall, - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'eth_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'eth_getFilterLogs', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'eth_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -/// @returns an array of objects describing web3.shh.watch api methods -var shh = function () { - var newFilter = new Method({ - name: 'newFilter', - call: 'shh_newFilter', - params: 1 - }); - - var uninstallFilter = new Method({ - name: 'uninstallFilter', - call: 'shh_uninstallFilter', - params: 1 - }); - - var getLogs = new Method({ - name: 'getLogs', - call: 'shh_getMessages', - params: 1 - }); - - var poll = new Method({ - name: 'poll', - call: 'shh_getFilterChanges', - params: 1 - }); - - return [ - newFilter, - uninstallFilter, - getLogs, - poll - ]; -}; - -module.exports = { - eth: eth, - shh: shh -}; - diff --git a/node_modules/web3/lib/web3/namereg.js b/node_modules/web3/lib/web3/namereg.js deleted file mode 100644 index d06ecbe..0000000 --- a/node_modules/web3/lib/web3/namereg.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file namereg.js - * @author Marek Kotewicz - * @date 2015 - */ - -var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); -var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); - -var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; -var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; - -module.exports = { - global: { - abi: globalRegistrarAbi, - address: globalNameregAddress - }, - icap: { - abi: icapRegistrarAbi, - address: icapNameregAddress - } -}; - diff --git a/node_modules/web3/lib/web3/property.js b/node_modules/web3/lib/web3/property.js deleted file mode 100644 index bb791c9..0000000 --- a/node_modules/web3/lib/web3/property.js +++ /dev/null @@ -1,144 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file property.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2015 - */ - -var utils = require('../utils/utils'); - -var Property = function (options) { - this.name = options.name; - this.getter = options.getter; - this.setter = options.setter; - this.outputFormatter = options.outputFormatter; - this.inputFormatter = options.inputFormatter; - this.requestManager = null; -}; - -Property.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Property.prototype.formatInput = function (arg) { - return this.inputFormatter ? this.inputFormatter(arg) : arg; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Property.prototype.formatOutput = function (result) { - return this.outputFormatter && result !== null ? this.outputFormatter(result) : result; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Property.prototype.extractCallback = function (args) { - if (utils.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - - -/** - * Should attach function to method - * - * @method attachToObject - * @param {Object} - * @param {Function} - */ -Property.prototype.attachToObject = function (obj) { - var proto = { - get: this.buildGet(), - enumerable: true - }; - - var names = this.name.split('.'); - var name = names[0]; - if (names.length > 1) { - obj[names[0]] = obj[names[0]] || {}; - obj = obj[names[0]]; - name = names[1]; - } - - Object.defineProperty(obj, name, proto); - obj[asyncGetterName(name)] = this.buildAsyncGet(); -}; - -var asyncGetterName = function (name) { - return 'get' + name.charAt(0).toUpperCase() + name.slice(1); -}; - -Property.prototype.buildGet = function () { - var property = this; - return function get() { - return property.formatOutput(property.requestManager.send({ - method: property.getter - })); - }; -}; - -Property.prototype.buildAsyncGet = function () { - var property = this; - var get = function (callback) { - property.requestManager.sendAsync({ - method: property.getter - }, function (err, result) { - callback(err, property.formatOutput(result)); - }); - }; - get.request = this.request.bind(this); - return get; -}; - -/** - * Should be called to create pure JSONRPC request which can be used in batch request - * - * @method request - * @param {...} params - * @return {Object} jsonrpc request - */ -Property.prototype.request = function () { - var payload = { - method: this.getter, - params: [], - callback: this.extractCallback(Array.prototype.slice.call(arguments)) - }; - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Property; - diff --git a/node_modules/web3/lib/web3/requestmanager.js b/node_modules/web3/lib/web3/requestmanager.js deleted file mode 100644 index aa59b3a..0000000 --- a/node_modules/web3/lib/web3/requestmanager.js +++ /dev/null @@ -1,265 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file requestmanager.js - * @author Jeffrey Wilcke - * @author Marek Kotewicz - * @author Marian Oancea - * @author Fabian Vogelsteller - * @author Gav Wood - * @date 2014 - */ - -var Jsonrpc = require('./jsonrpc'); -var utils = require('../utils/utils'); -var c = require('../utils/config'); -var errors = require('./errors'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function (provider) { - this.provider = provider; - this.polls = {}; - this.timeout = null; -}; - -/** - * Should be used to synchronously send request - * - * @method send - * @param {Object} data - * @return {Object} - */ -RequestManager.prototype.send = function (data) { - if (!this.provider) { - console.error(errors.InvalidProvider()); - return null; - } - - var payload = Jsonrpc.toPayload(data.method, data.params); - var result = this.provider.send(payload); - - if (!Jsonrpc.isValidResponse(result)) { - throw errors.InvalidResponse(result); - } - - return result.result; -}; - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.sendAsync = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toPayload(data.method, data.params); - this.provider.sendAsync(payload, function (err, result) { - if (err) { - return callback(err); - } - - if (!Jsonrpc.isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toBatchPayload(data); - - this.provider.sendAsync(payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!utils.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(err, results); - }); -}; - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} - */ -RequestManager.prototype.setProvider = function (p) { - this.provider = p; -}; - -/** - * Should be used to start polling - * - * @method startPolling - * @param {Object} data - * @param {Number} pollId - * @param {Function} callback - * @param {Function} uninstall - * - * @todo cleanup number of params - */ -RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { - this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; - - - // start polling - if (!this.timeout) { - this.poll(); - } -}; - -/** - * Should be used to stop polling for filter with given id - * - * @method stopPolling - * @param {Number} pollId - */ -RequestManager.prototype.stopPolling = function (pollId) { - delete this.polls[pollId]; - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to reset the polling mechanism of the request manager - * - * @method reset - */ -RequestManager.prototype.reset = function (keepIsSyncing) { - /*jshint maxcomplexity:5 */ - - for (var key in this.polls) { - // remove all polls, except sync polls, - // they need to be removed manually by calling syncing.stopWatching() - if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { - this.polls[key].uninstall(); - delete this.polls[key]; - } - } - - // stop polling - if(Object.keys(this.polls).length === 0 && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } -}; - -/** - * Should be called to poll for changes on filter with given id - * - * @method poll - */ -RequestManager.prototype.poll = function () { - /*jshint maxcomplexity: 6 */ - this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - - if (Object.keys(this.polls).length === 0) { - return; - } - - if (!this.provider) { - console.error(errors.InvalidProvider()); - return; - } - - var pollsData = []; - var pollsIds = []; - for (var key in this.polls) { - pollsData.push(this.polls[key].data); - pollsIds.push(key); - } - - if (pollsData.length === 0) { - return; - } - - var payload = Jsonrpc.toBatchPayload(pollsData); - - // map the request id to they poll id - var pollsIdMap = {}; - payload.forEach(function(load, index){ - pollsIdMap[load.id] = pollsIds[index]; - }); - - - var self = this; - this.provider.sendAsync(payload, function (error, results) { - - - // TODO: console log? - if (error) { - return; - } - - if (!utils.isArray(results)) { - throw errors.InvalidResponse(results); - } - results.map(function (result) { - var id = pollsIdMap[result.id]; - - // make sure the filter is still installed after arrival of the request - if (self.polls[id]) { - result.callback = self.polls[id].callback; - return result; - } else - return false; - }).filter(function (result) { - return !!result; - }).filter(function (result) { - var valid = Jsonrpc.isValidResponse(result); - if (!valid) { - result.callback(errors.InvalidResponse(result)); - } - return valid; - }).forEach(function (result) { - result.callback(null, result.result); - }); - }); -}; - -module.exports = RequestManager; - diff --git a/node_modules/web3/lib/web3/settings.js b/node_modules/web3/lib/web3/settings.js deleted file mode 100644 index 4999235..0000000 --- a/node_modules/web3/lib/web3/settings.js +++ /dev/null @@ -1,9 +0,0 @@ - - -var Settings = function () { - this.defaultBlock = 'latest'; - this.defaultAccount = undefined; -}; - -module.exports = Settings; - diff --git a/node_modules/web3/lib/web3/syncing.js b/node_modules/web3/lib/web3/syncing.js deleted file mode 100644 index c81c3e1..0000000 --- a/node_modules/web3/lib/web3/syncing.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file syncing.js - * @authors: - * Fabian Vogelsteller - * @date 2015 - */ - -var formatters = require('./formatters'); -var utils = require('../utils/utils'); - -var count = 1; - -/** -Adds the callback and sets up the methods, to iterate over the results. - -@method pollSyncing -@param {Object} self -*/ -var pollSyncing = function(self) { - - var onMessage = function (error, sync) { - if (error) { - return self.callbacks.forEach(function (callback) { - callback(error); - }); - } - - if(utils.isObject(sync) && sync.startingBlock) - sync = formatters.outputSyncingFormatter(sync); - - self.callbacks.forEach(function (callback) { - if (self.lastSyncState !== sync) { - - // call the callback with true first so the app can stop anything, before receiving the sync data - if(!self.lastSyncState && utils.isObject(sync)) - callback(null, true); - - // call on the next CPU cycle, so the actions of the sync stop can be processes first - setTimeout(function() { - callback(null, sync); - }, 0); - - self.lastSyncState = sync; - } - }); - }; - - self.requestManager.startPolling({ - method: 'eth_syncing', - params: [], - }, self.pollId, onMessage, self.stopWatching.bind(self)); - -}; - -var IsSyncing = function (requestManager, callback) { - this.requestManager = requestManager; - this.pollId = 'syncPoll_'+ count++; - this.callbacks = []; - this.addCallback(callback); - this.lastSyncState = false; - pollSyncing(this); - - return this; -}; - -IsSyncing.prototype.addCallback = function (callback) { - if(callback) - this.callbacks.push(callback); - return this; -}; - -IsSyncing.prototype.stopWatching = function () { - this.requestManager.stopPolling(this.pollId); - this.callbacks = []; -}; - -module.exports = IsSyncing; - diff --git a/node_modules/web3/lib/web3/transfer.js b/node_modules/web3/lib/web3/transfer.js deleted file mode 100644 index 6a0d081..0000000 --- a/node_modules/web3/lib/web3/transfer.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file transfer.js - * @author Marek Kotewicz - * @date 2015 - */ - -var Iban = require('./iban'); -var exchangeAbi = require('../contracts/SmartExchange.json'); - -/** - * Should be used to make Iban transfer - * - * @method transfer - * @param {String} from - * @param {String} to iban - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transfer = function (eth, from, to, value, callback) { - var iban = new Iban(to); - if (!iban.isValid()) { - throw new Error('invalid iban address'); - } - - if (iban.isDirect()) { - return transferToAddress(eth, from, iban.address(), value, callback); - } - - if (!callback) { - var address = eth.icapNamereg().addr(iban.institution()); - return deposit(eth, from, address, value, iban.client()); - } - - eth.icapNamereg().addr(iban.institution(), function (err, address) { - return deposit(eth, from, address, value, iban.client(), callback); - }); - -}; - -/** - * Should be used to transfer funds to certain address - * - * @method transferToAddress - * @param {String} from - * @param {String} to - * @param {Value} value to be tranfered - * @param {Function} callback, callback - */ -var transferToAddress = function (eth, from, to, value, callback) { - return eth.sendTransaction({ - address: to, - from: from, - value: value - }, callback); -}; - -/** - * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) - * - * @method deposit - * @param {String} from - * @param {String} to - * @param {Value} value to be transfered - * @param {String} client unique identifier - * @param {Function} callback, callback - */ -var deposit = function (eth, from, to, value, client, callback) { - var abi = exchangeAbi; - return eth.contract(abi).at(to).deposit(client, { - from: from, - value: value - }, callback); -}; - -module.exports = transfer; - diff --git a/node_modules/web3/node_modules/bignumber.js/.npmignore b/node_modules/web3/node_modules/bignumber.js/.npmignore deleted file mode 100644 index 2d18542..0000000 --- a/node_modules/web3/node_modules/bignumber.js/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -test -perf -coverage - diff --git a/node_modules/web3/node_modules/bignumber.js/.travis.yml b/node_modules/web3/node_modules/bignumber.js/.travis.yml deleted file mode 100644 index 3f920bb..0000000 --- a/node_modules/web3/node_modules/bignumber.js/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "0.12" - - "0.11" - - "0.10" - - "0.8" - - "0.6" - - iojs diff --git a/node_modules/web3/node_modules/bignumber.js/LICENCE b/node_modules/web3/node_modules/bignumber.js/LICENCE deleted file mode 100644 index a5d1b40..0000000 --- a/node_modules/web3/node_modules/bignumber.js/LICENCE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT Expat Licence. - -Copyright (c) 2012 Michael Mclaughlin - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/node_modules/web3/node_modules/bignumber.js/README.md b/node_modules/web3/node_modules/bignumber.js/README.md deleted file mode 100644 index 9ffcbfd..0000000 --- a/node_modules/web3/node_modules/bignumber.js/README.md +++ /dev/null @@ -1,326 +0,0 @@ -![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png) - -A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic. - -[![Build Status](https://travis-ci.org/MikeMcl/bignumber.js.svg)](https://travis-ci.org/MikeMcl/bignumber.js) - -
          - -## Features - - - Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal - - 8 KB minified and gzipped - - Simple API but full-featured - - Works with numbers with or without fraction digits in bases from 2 to 64 inclusive - - Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type - - Includes a `toFraction` and a correctly-rounded `squareRoot` method - - Supports cryptographically-secure pseudo-random number generation - - No dependencies - - Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only - - Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set - -![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png) - -If a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/). -It's less than half the size but only works with decimal numbers and only has half the methods. -It also does not allow `NaN` or `Infinity`, or have the configuration options of this library. - -See also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits. - -## Load - -The library is the single JavaScript file *bignumber.js* (or minified, *bignumber.min.js*). - -```html - -``` - -For [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry - - $ npm install bignumber.js - -```javascript -var BigNumber = require('bignumber.js'); -``` - -To load with AMD loader libraries such as [requireJS](http://requirejs.org/): - -```javascript -require(['path/to/bignumber'], function(BigNumber) { - // Use BigNumber here in local scope. No global BigNumber. -}); -``` - -## Use - -*In all examples below, `var`, semicolons and `toString` calls are not shown. -If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* - -The library exports a single function: `BigNumber`, the constructor of BigNumber instances. - -It accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object, - -```javascript -x = new BigNumber(123.4567) -y = BigNumber('123456.7e-3') -z = new BigNumber(x) -x.equals(y) && y.equals(z) && x.equals(z) // true -``` - - -and a base from 2 to 64 inclusive can be specified. - -```javascript -x = new BigNumber(1011, 2) // "11" -y = new BigNumber('zz.9', 36) // "1295.25" -z = x.plus(y) // "1306.25" -``` - -A BigNumber is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new BigNumber(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a BigNumber can be chained. - -```javascript -x.dividedBy(y).plus(z).times(9).floor() -x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil() -``` - -Many method names have a shorter alias. - -```javascript -x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true -x.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true -``` - -Like JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods - -```javascript -x = new BigNumber(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -x.toNumber() // 255.5 -``` - - and a base can be specified for `toString`. - - ```javascript - x.toString(16) // "ff.8" - ``` - -There is also a `toFormat` method which may be useful for internationalisation - -```javascript -y = new BigNumber('1234567.898765') -y.toFormat(2) // "1,234,567.90" -``` - -The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor. - -The other arithmetic operations always give the exact result. - -```javascript -BigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) -// Alternatively, BigNumber.config( 10, 4 ); - -x = new BigNumber(2); -y = new BigNumber(3); -z = x.div(y) // "0.6666666667" -z.sqrt() // "0.8164965809" -z.pow(-3) // "3.3749999995" -z.toString(2) // "0.1010101011" -z.times(z) // "0.44444444448888888889" -z.times(z).round(10) // "0.4444444445" -``` - -There is a `toFraction` method with an optional *maximum denominator* argument - -```javascript -y = new BigNumber(355) -pi = y.dividedBy(113) // "3.1415929204" -pi.toFraction() // [ "7853982301", "2500000000" ] -pi.toFraction(1000) // [ "355", "113" ] -``` - -and `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values. - -```javascript -x = new BigNumber(NaN) // "NaN" -y = new BigNumber(Infinity) // "Infinity" -x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true -``` - -The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - - -```javascript -x = new BigNumber(-123.456); -x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - - -Multiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it. - -```javascript -// Set DECIMAL_PLACES for the original BigNumber constructor -BigNumber.config({ DECIMAL_PLACES: 10 }) - -// Create another BigNumber constructor, optionally passing in a configuration object -BN = BigNumber.another({ DECIMAL_PLACES: 5 }) - -x = new BigNumber(1) -y = new BN(1) - -x.div(3) // '0.3333333333' -y.div(3) // '0.33333' -``` - -For futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. - -## Test - -The *test* directory contains the test scripts for each method. - -The tests can be run with Node or a browser. For Node use - - $ npm test - -or - - $ node test/every-test - -To test a single method, e.g. - - $ node test/toFraction - -For the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. - -*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. - -## Versions - -This is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported. - -## Performance - -See the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory. - -## Build - -For Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed - - npm install uglify-js -g - -then - - npm run build - -will create *bignumber.min.js*. - -A source map will also be created in the root directory. - -## Feedback - -Open an issue, or email - -Michael - -M8ch88l@gmail.com - -## Licence - -MIT. - -See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE). - -## Change Log - -####2.0.6 -* 31/03/2015 -* Add bower.json. Tweak division after in-depth review. - -####2.0.5 -* 25/03/2015 -* Amend README. Remove bitcoin address. - -####2.0.4 -* 25/03/2015 -* Critical bugfix #58: division. - -####2.0.3 -* 18/02/2015 -* Amend README. Add source map. - -####2.0.2 -* 18/02/2015 -* Correct links. - -####2.0.1 -* 18/02/2015 -* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods. -* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. -* Add an `another` method to enable multiple independent constructors to be created. -* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. -* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. -* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. -* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. -* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. -* Improve code quality. -* Improve documentation. - -####2.0.0 -* 29/12/2014 -* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. -* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. -* Store a BigNumber's coefficient in base 1e14, rather than base 10. -* Add fast path for integers to BigNumber constructor. -* Incorporate the library into the online documentation. - -####1.5.0 -* 13/11/2014 -* Add `toJSON` and `decimalPlaces` methods. - -####1.4.1 -* 08/06/2014 -* Amend README. - -####1.4.0 -* 08/05/2014 -* Add `toNumber`. - -####1.3.0 -* 08/11/2013 -* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. -* Maximum radix to 64. - -####1.2.1 -* 17/10/2013 -* Sign of zero when x < 0 and x + (-x) = 0. - -####1.2.0 -* 19/9/2013 -* Throw Error objects for stack. - -####1.1.1 -* 22/8/2013 -* Show original value in constructor error message. - -####1.1.0 -* 1/8/2013 -* Allow numbers with trailing radix point. - -####1.0.1 -* Bugfix: error messages with incorrect method name - -####1.0.0 -* 8/11/2012 -* Initial release diff --git a/node_modules/web3/node_modules/bignumber.js/bignumber.js b/node_modules/web3/node_modules/bignumber.js/bignumber.js deleted file mode 100644 index d14e7a0..0000000 --- a/node_modules/web3/node_modules/bignumber.js/bignumber.js +++ /dev/null @@ -1,2683 +0,0 @@ -/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ - -;(function (global) { - 'use strict'; - - /* - bignumber.js v2.0.7 - A JavaScript library for arbitrary-precision arithmetic. - https://github.com/MikeMcl/bignumber.js - Copyright (c) 2015 Michael Mclaughlin - MIT Expat Licence - */ - - - var BigNumber, crypto, parseNumeric, - isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - notBool = ' not a boolean or binary digit', - roundingMode = 'rounding mode', - tooManyDigits = 'number type has more than 15 significant digits', - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - /* - * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an - * exception is thrown (if ERRORS is true). - */ - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function another(configObj) { - var div, - - // id tracks the caller function, so its name can be included in error messages. - id = 0, - P = BigNumber.prototype, - ONE = new BigNumber(1), - - - /********************************* EDITABLE DEFAULTS **********************************/ - - - /* - * The default values below must be integers within the inclusive ranges stated. - * The values can also be changed at run-time using BigNumber.config. - */ - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - /* - * The rounding mode used when rounding to the above decimal places, and when using - * toExponential, toFixed, toFormat and toPrecision, and round (default value). - * UP 0 Away from zero. - * DOWN 1 Towards zero. - * CEIL 2 Towards +Infinity. - * FLOOR 3 Towards -Infinity. - * HALF_UP 4 Towards nearest neighbour. If equidistant, up. - * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - */ - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether BigNumber Errors are ever thrown. - ERRORS = true, // true or false - - // Change to intValidatorNoErrors if ERRORS is false. - isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - /* - * The modulo mode used when calculating the modulus: a mod n. - * The quotient (q = a / n) is calculated according to the corresponding rounding mode. - * The remainder (r) is calculated as: r = a - n * q. - * - * UP 0 The remainder is positive if the dividend is negative, else is negative. - * DOWN 1 The remainder has the same sign as the dividend. - * This modulo mode is commonly known as 'truncated division' and is - * equivalent to (a % n) in JavaScript. - * FLOOR 3 The remainder has the same sign as the divisor (Python %). - * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - * The remainder is always positive. - * - * The truncated division, floored division, Euclidian division and IEEE 754 remainder - * modes are commonly used for the modulus operation. - * Although the other rounding modes can also be used, they may not give useful results. - */ - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the toPower operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 100, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - decimalSeparator: '.', - groupSeparator: ',', - groupSize: 3, - secondaryGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - fractionGroupSize: 0 - }; - - - /******************************************************************************************/ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * n {number|string|BigNumber} A numeric value. - * [b] {number} The base of n. Integer, 2 to 64 inclusive. - */ - function BigNumber( n, b ) { - var c, e, i, num, len, str, - x = this; - - // Enable constructor usage without new. - if ( !( x instanceof BigNumber ) ) { - - // 'BigNumber() constructor call without new: {n}' - if (ERRORS) raise( 26, 'constructor call without new', n ); - return new BigNumber( n, b ); - } - - // 'new BigNumber() base not an integer: {b}' - // 'new BigNumber() base out of range: {b}' - if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { - - // Duplicate. - if ( n instanceof BigNumber ) { - x.s = n.s; - x.e = n.e; - x.c = ( n = n.c ) ? n.slice() : n; - id = 0; - return; - } - - if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { - x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; - - // Fast path for integers. - if ( n === ~~n ) { - for ( e = 0, i = n; i >= 10; i /= 10, e++ ); - x.e = e; - x.c = [n]; - id = 0; - return; - } - - str = n + ''; - } else { - if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - } else { - b = b | 0; - str = n + ''; - - // Ensure return value is rounded to DECIMAL_PLACES as with other bases. - // Allow exponential notation to be used with base 10 argument. - if ( b == 10 ) { - x = new BigNumber( n instanceof BigNumber ? n : str ); - return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); - } - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - // Any number in exponential form will fail due to the [Ee][+-]. - if ( ( num = typeof n == 'number' ) && n * 0 != 0 || - !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + - '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { - return parseNumeric( x, str, num, b ); - } - - if (num) { - x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; - - if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { - - // 'new BigNumber() number type has more than 15 significant digits: {n}' - raise( id, tooManyDigits, n ); - } - - // Prevent later check for length on converted number. - num = false; - } else { - x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; - } - - str = convertBase( str, 10, b, x.s ); - } - - // Decimal point? - if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); - - // Exponential form? - if ( ( i = str.search( /e/i ) ) > 0 ) { - - // Determine exponent. - if ( e < 0 ) e = i; - e += +str.slice( i + 1 ); - str = str.substring( 0, i ); - } else if ( e < 0 ) { - - // Integer. - e = str.length; - } - - // Determine leading zeros. - for ( i = 0; str.charCodeAt(i) === 48; i++ ); - - // Determine trailing zeros. - for ( len = str.length; str.charCodeAt(--len) === 48; ); - str = str.slice( i, len + 1 ); - - if (str) { - len = str.length; - - // Disallow numbers with over 15 significant digits if number type. - // 'new BigNumber() number type has more than 15 significant digits: {n}' - if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); - - e = e - i - 1; - - // Overflow? - if ( e > MAX_EXP ) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - x.c = [ x.e = 0 ]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = ( e + 1 ) % LOG_BASE; - if ( e < 0 ) i += LOG_BASE; - - if ( i < len ) { - if (i) x.c.push( +str.slice( 0, i ) ); - - for ( len -= LOG_BASE; i < len; ) { - x.c.push( +str.slice( i, i += LOG_BASE ) ); - } - - str = str.slice(i); - i = LOG_BASE - str.length; - } else { - i -= len; - } - - for ( ; i--; str += '0' ); - x.c.push( +str ); - } - } else { - - // Zero. - x.c = [ x.e = 0 ]; - } - - id = 0; - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.another = another; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object or an argument list, with one or many of the following properties or - * parameters respectively: - * - * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive - * ROUNDING_MODE {number} Integer, 0 to 8 inclusive - * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or - * [integer -MAX to 0 incl., 0 to MAX incl.] - * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - * [integer -MAX to -1 incl., integer 1 to MAX incl.] - * ERRORS {boolean|number} true, false, 1 or 0 - * CRYPTO {boolean|number} true, false, 1 or 0 - * MODULO_MODE {number} 0 to 9 inclusive - * POW_PRECISION {number} 0 to MAX inclusive - * FORMAT {object} See BigNumber.prototype.toFormat - * decimalSeparator {string} - * groupSeparator {string} - * groupSize {number} - * secondaryGroupSize {number} - * fractionGroupSeparator {string} - * fractionGroupSize {number} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config(20, 4) is equivalent to - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined. - * Return an object with the properties current values. - */ - BigNumber.config = function () { - var v, p, - i = 0, - r = {}, - a = arguments, - o = a[0], - has = o && typeof o == 'object' - ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } - : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // 'config() DECIMAL_PLACES not an integer: {v}' - // 'config() DECIMAL_PLACES out of range: {v}' - if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { - DECIMAL_PLACES = v | 0; - } - r[p] = DECIMAL_PLACES; - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // 'config() ROUNDING_MODE not an integer: {v}' - // 'config() ROUNDING_MODE out of range: {v}' - if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { - ROUNDING_MODE = v | 0; - } - r[p] = ROUNDING_MODE; - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // 'config() EXPONENTIAL_AT not an integer: {v}' - // 'config() EXPONENTIAL_AT out of range: {v}' - if ( has( p = 'EXPONENTIAL_AT' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { - TO_EXP_NEG = v[0] | 0; - TO_EXP_POS = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); - } - } - r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // 'config() RANGE not an integer: {v}' - // 'config() RANGE cannot be zero: {v}' - // 'config() RANGE out of range: {v}' - if ( has( p = 'RANGE' ) ) { - - if ( isArray(v) ) { - if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { - MIN_EXP = v[0] | 0; - MAX_EXP = v[1] | 0; - } - } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { - if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); - else if (ERRORS) raise( 2, p + ' cannot be zero', v ); - } - } - r[p] = [ MIN_EXP, MAX_EXP ]; - - // ERRORS {boolean|number} true, false, 1 or 0. - // 'config() ERRORS not a boolean or binary digit: {v}' - if ( has( p = 'ERRORS' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - id = 0; - isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = ERRORS; - - // CRYPTO {boolean|number} true, false, 1 or 0. - // 'config() CRYPTO not a boolean or binary digit: {v}' - // 'config() crypto unavailable: {crypto}' - if ( has( p = 'CRYPTO' ) ) { - - if ( v === !!v || v === 1 || v === 0 ) { - CRYPTO = !!( v && crypto && typeof crypto == 'object' ); - if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); - } else if (ERRORS) { - raise( 2, p + notBool, v ); - } - } - r[p] = CRYPTO; - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // 'config() MODULO_MODE not an integer: {v}' - // 'config() MODULO_MODE out of range: {v}' - if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { - MODULO_MODE = v | 0; - } - r[p] = MODULO_MODE; - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // 'config() POW_PRECISION not an integer: {v}' - // 'config() POW_PRECISION out of range: {v}' - if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { - POW_PRECISION = v | 0; - } - r[p] = POW_PRECISION; - - // FORMAT {object} - // 'config() FORMAT not an object: {v}' - if ( has( p = 'FORMAT' ) ) { - - if ( typeof v == 'object' ) { - FORMAT = v; - } else if (ERRORS) { - raise( 2, p + ' not an object', v ); - } - } - r[p] = FORMAT; - - return r; - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * 'random() decimal places not an integer: {dp}' - * 'random() decimal places out of range: {dp}' - * 'random() crypto unavailable: {crypto}' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor( Math.random() * pow2_53 ); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; - k = mathceil( dp / LOG_BASE ); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if ( crypto && crypto.getRandomValues ) { - - a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); - - for ( ; i < k; ) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if ( v >= 9e15 ) { - b = crypto.getRandomValues( new Uint32Array(2) ); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if ( crypto && crypto.randomBytes ) { - - // buffer - a = crypto.randomBytes( k *= 7 ); - - for ( ; i < k; ) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + - ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + - ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; - - if ( v >= 9e15 ) { - crypto.randomBytes(7).copy( a, i ); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push( v % 1e14 ); - i += 7; - } - } - i = k / 7; - } else if (ERRORS) { - raise( 14, 'crypto unavailable', crypto ); - } - } - - // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. - if (!i) { - - for ( ; i < k; ) { - v = random53bitInt(); - if ( v < 9e15 ) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if ( k && dp ) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor( k / v ) * v; - } - - // Remove trailing elements which are zero. - for ( ; c[i] === 0; c.pop(), i-- ); - - // Zero? - if ( i < 0 ) { - c = [ e = 0 ]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if ( i < LOG_BASE ) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - // PRIVATE FUNCTIONS - - - // Convert a numeric string of baseIn to a numeric string of baseOut. - function convertBase( str, baseOut, baseIn, sign ) { - var d, e, k, r, x, xc, y, - i = str.indexOf( '.' ), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - if ( baseIn < 37 ) str = str.toLowerCase(); - - // Non-integer. - if ( i >= 0 ) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace( '.', '' ); - y = new BigNumber(baseIn); - x = y.pow( str.length - i ); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); - y.e = y.c.length; - } - - // Convert the number as integer. - xc = toBaseOut( str, baseIn, baseOut ); - e = k = xc.length; - - // Remove trailing zeros. - for ( ; xc[--k] == 0; xc.pop() ); - if ( !xc[0] ) return '0'; - - if ( i < 0 ) { - --e; - } else { - x.c = xc; - x.e = e; - - // sign is needed for correct rounding. - x.s = sign; - x = div( x, y, dp, rm, baseOut ); - xc = x.c; - r = x.r; - e = x.e; - } - - d = e + dp + 1; - - // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( d < 1 || !xc[0] ) { - - // 1^-dp or 0. - str = r ? toFixedPoint( '1', -dp ) : '0'; - } else { - xc.length = d; - - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for ( --baseOut; ++xc[--d] > baseOut; ) { - xc[d] = 0; - - if ( !d ) { - ++e; - xc.unshift(1); - } - } - } - - // Determine trailing zeros. - for ( k = xc.length; !xc[--k]; ); - - // E.g. [4, 11, 15] becomes 4bf. - for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); - str = toFixedPoint( str, e ); - } - - // The caller will add the sign. - return str; - } - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply( x, k, base ) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for ( x = x.slice(); i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; - carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x.unshift(carry); - - return x; - } - - function compare( a, b, aL, bL ) { - var i, cmp; - - if ( aL != bL ) { - cmp = aL > bL ? 1 : -1; - } else { - - for ( i = cmp = 0; i < aL; i++ ) { - - if ( a[i] != b[i] ) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - - function subtract( a, b, aL, base ) { - var i = 0; - - // Subtract b from a. - for ( ; aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for ( ; !a[0] && a.length > 1; a.shift() ); - } - - // x: dividend, y: divisor. - return function ( x, y, dp, rm, base ) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if ( !xc || !xc[0] || !yc || !yc[0] ) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if ( !base ) { - base = BASE; - e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); - if ( yc[i] > ( xc[i] || 0 ) ) e--; - - if ( s < 0 ) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor( base / ( yc[0] + 1 ) ); - - // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1. - // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) { - if ( n > 1 ) { - yc = multiply( yc, n, base ); - xc = multiply( xc, n, base ); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice( 0, yL ); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for ( ; remL < yL; rem[remL++] = 0 ); - yz = yc.slice(); - yz.unshift(0); - yc0 = yc[0]; - if ( yc[1] >= base / 2 ) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare( yc, rem, yL, remL ); - - // If divisor < remainder. - if ( cmp < 0 ) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor( rem0 / yc0 ); - - // Algorithm: - // 1. product = divisor * trial digit (n) - // 2. if product > remainder: product -= divisor, n-- - // 3. remainder -= product - // 4. if product was < remainder at 2: - // 5. compare new remainder and divisor - // 6. If remainder > divisor: remainder -= divisor, n++ - - if ( n > 1 ) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply( yc, n, base ); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder. - // Trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while ( compare( prod, rem, prodL, remL ) == 1 ) { - n--; - - // Subtract divisor from product. - subtract( prod, yL < prodL ? yz : yc, prodL, base ); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if ( n == 0 ) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if ( prodL < remL ) prod.unshift(0); - - // Subtract product from remainder. - subtract( rem, prod, remL, base ); - remL = rem.length; - - // If product was < remainder. - if ( cmp == -1 ) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while ( compare( yc, rem, yL, remL ) < 1 ) { - n++; - - // Subtract divisor from remainder. - subtract( rem, yL < remL ? yz : yc, remL, base ); - remL = rem.length; - } - } - } else if ( cmp === 0 ) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if ( rem[0] ) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [ xc[xi] ]; - remL = 1; - } - } while ( ( xi++ < xL || rem[0] != null ) && s-- ); - - more = rem[0] != null; - - // Leading zero? - if ( !qc[0] ) qc.shift(); - } - - if ( base == BASE ) { - - // To calculate q.e, first get the number of digits of qc[0]. - for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); - round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n is a BigNumber. - * i is the index of the last digit required (i.e. the digit that may be rounded up). - * rm is the rounding mode. - * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. - */ - function format( n, i, rm, caller ) { - var c0, e, ne, len, str; - - rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) - ? rm | 0 : ROUNDING_MODE; - - if ( !n.c ) return n.toString(); - c0 = n.c[0]; - ne = n.e; - - if ( i == null ) { - str = coeffToString( n.c ); - str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG - ? toExponential( str, ne ) - : toFixedPoint( str, ne ); - } else { - n = round( new BigNumber(n), i, rm ); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString( n.c ); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { - - // Append zeros? - for ( ; len < i; str += '0', len++ ); - str = toExponential( str, e ); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint( str, e ); - - // Append zeros? - if ( e + 1 > len ) { - if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); - } else { - i += e - len; - if ( i > 0 ) { - if ( e + 1 == len ) str += '.'; - for ( ; i--; str += '0' ); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin( args, method ) { - var m, n, - i = 0; - - if ( isArray( args[0] ) ) args = args[0]; - m = new BigNumber( args[0] ); - - for ( ; ++i < args.length; ) { - n = new BigNumber( args[i] ); - - // If any number is NaN, return NaN. - if ( !n.s ) { - m = n; - break; - } else if ( method.call( m, n ) ) { - m = n; - } - } - - return m; - } - - - /* - * Return true if n is an integer in range, otherwise throw. - * Use for argument validation when ERRORS is true. - */ - function intValidatorWithErrors( n, min, max, caller, name ) { - if ( n < min || n > max || n != truncate(n) ) { - raise( caller, ( name || 'decimal places' ) + - ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); - } - - return true; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise( n, c, e ) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for ( ; !c[--j]; c.pop() ); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for ( j = c[0]; j >= 10; j /= 10, i++ ); - - // Overflow? - if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if ( e < MIN_EXP ) { - - // Zero. - n.c = [ n.e = 0 ]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g; - - return function ( x, str, num, b ) { - var base, - s = num ? str : str.replace( whitespaceOrPlus, '' ); - - // No exception on ±Infinity or NaN. - if ( isInfinityOrNaN.test(s) ) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if ( !num ) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace( basePrefix, function ( m, p1, p2 ) { - base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); - } - - if ( str != s ) return new BigNumber( s, base ); - } - - // 'new BigNumber() not a number: {n}' - // 'new BigNumber() not a base {b} number: {n}' - if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); - x.s = null; - } - - x.c = x.e = null; - id = 0; - } - })(); - - - // Throw a BigNumber Error. - function raise( caller, msg, val ) { - var error = new Error( [ - 'new BigNumber', // 0 - 'cmp', // 1 - 'config', // 2 - 'div', // 3 - 'divToInt', // 4 - 'eq', // 5 - 'gt', // 6 - 'gte', // 7 - 'lt', // 8 - 'lte', // 9 - 'minus', // 10 - 'mod', // 11 - 'plus', // 12 - 'precision', // 13 - 'random', // 14 - 'round', // 15 - 'shift', // 16 - 'times', // 17 - 'toDigits', // 18 - 'toExponential', // 19 - 'toFixed', // 20 - 'toFormat', // 21 - 'toFraction', // 22 - 'pow', // 23 - 'toPrecision', // 24 - 'toString', // 25 - 'BigNumber' // 26 - ][caller] + '() ' + msg + ': ' + val ); - - error.name = 'BigNumber Error'; - id = 0; - throw error; - } - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round( x, sd, rm, r ) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if ( i < 0 ) { - i += LOG_BASE; - j = sd; - n = xc[ ni = 0 ]; - - // Get the rounding digit at index j of n. - rd = n / pows10[ d - j - 1 ] % 10 | 0; - } else { - ni = mathceil( ( i + 1 ) / LOG_BASE ); - - if ( ni >= xc.length ) { - - if (r) { - - // Needed by sqrt. - for ( ; xc.length <= ni; xc.push(0) ); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for ( d = 1; k >= 10; k /= 10, d++ ); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); - - r = rm < 4 - ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) - : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || - rm == ( x.s < 0 ? 8 : 7 ) ); - - if ( sd < 1 || !xc[0] ) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[ sd % LOG_BASE ]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if ( i == 0 ) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[ LOG_BASE - i ]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; - } - - // Round up? - if (r) { - - for ( ; ; ) { - - // If the digit to be rounded up is in the first element of xc... - if ( ni == 0 ) { - - // i will be the length of xc[0] before k is added. - for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); - j = xc[0] += k; - for ( k = 1; j >= 10; j /= 10, k++ ); - - // if i != k the length has increased. - if ( i != k ) { - x.e++; - if ( xc[0] == BASE ) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if ( xc[ni] != BASE ) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for ( i = xc.length; xc[--i] === 0; xc.pop() ); - } - - // Overflow? Infinity. - if ( x.e > MAX_EXP ) { - x.c = x.e = null; - - // Underflow? Zero. - } else if ( x.e < MIN_EXP ) { - x.c = [ x.e = 0 ]; - } - } - - return x; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if ( x.s < 0 ) x.s = 1; - return x; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of Infinity. - */ - P.ceil = function () { - return round( new BigNumber(this), this.e + 1, 2 ); - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = P.cmp = function ( y, b ) { - id = 1; - return compare( this, new BigNumber( y, b ) ); - }; - - - /* - * Return the number of decimal places of the value of this BigNumber, or null if the value - * of this BigNumber is ±Infinity or NaN. - */ - P.decimalPlaces = P.dp = function () { - var n, v, - c = this.c; - - if ( !c ) return null; - n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); - if ( n < 0 ) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function ( y, b ) { - id = 3; - return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.divToInt = function ( y, b ) { - id = 4; - return div( this, new BigNumber( y, b ), 0, 1 ); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise returns false. - */ - P.equals = P.eq = function ( y, b ) { - id = 5; - return compare( this, new BigNumber( y, b ) ) === 0; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole - * number in the direction of -Infinity. - */ - P.floor = function () { - return round( new BigNumber(this), this.e + 1, 3 ); - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.greaterThan = P.gt = function ( y, b ) { - id = 6; - return compare( this, new BigNumber( y, b ) ) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.greaterThanOrEqualTo = P.gte = function ( y, b ) { - id = 7; - return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise returns false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = P.isInt = function () { - return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise returns false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise returns false. - */ - P.isNegative = P.isNeg = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise returns false. - */ - P.lessThan = P.lt = function ( y, b ) { - id = 8; - return compare( this, new BigNumber( y, b ) ) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise returns false. - */ - P.lessThanOrEqualTo = P.lte = function ( y, b ) { - id = 9; - return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = P.sub = function ( y, b ) { - var i, j, t, xLTy, - x = this, - a = x.s; - - id = 10; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Either Infinity? - if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); - - // Either zero? - if ( !xc[0] || !yc[0] ) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0 ); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if ( a = xe - ye ) { - - if ( xLTy = a < 0 ) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for ( b = a; b--; t.push(0) ); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; - - for ( a = b = 0; b < j; b++ ) { - - if ( xc[b] != yc[b] ) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = ( j = yc.length ) - ( i = xc.length ); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); - b = BASE - 1; - - // Subtract yc from xc. - for ( ; j > a; ) { - - if ( xc[--j] < yc[j] ) { - for ( i = j; i && !xc[--i]; xc[i] = b ); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for ( ; xc[0] == 0; xc.shift(), --ye ); - - // Zero? - if ( !xc[0] ) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [ y.e = 0 ]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise( y, xc, ye ); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function ( y, b ) { - var q, s, - x = this; - - id = 11; - y = new BigNumber( y, b ); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if ( !x.c || !y.s || y.c && !y.c[0] ) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if ( !y.c || x.c && !x.c[0] ) { - return new BigNumber(x); - } - - if ( MODULO_MODE == 9 ) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div( x, y, 0, 3 ); - y.s = s; - q.s *= s; - } else { - q = div( x, y, 0, MODULO_MODE ); - } - - return x.minus( q.times(y) ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = P.neg = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = P.add = function ( y, b ) { - var t, - x = this, - a = x.s; - - id = 12; - y = new BigNumber( y, b ); - b = y.s; - - // Either NaN? - if ( !a || !b ) return new BigNumber(NaN); - - // Signs differ? - if ( a != b ) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if ( !xe || !ye ) { - - // Return ±Infinity if either ±Infinity. - if ( !xc || !yc ) return new BigNumber( a / 0 ); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if ( a = xe - ye ) { - if ( a > 0 ) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for ( ; a--; t.push(0) ); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for ( a = 0; b; ) { - a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; - xc[b] %= BASE; - } - - if (a) { - xc.unshift(a); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise( y, xc, ye ); - }; - - - /* - * Return the number of significant digits of the value of this BigNumber. - * - * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. - */ - P.precision = P.sd = function (z) { - var n, v, - x = this, - c = x.c; - - // 'precision() argument not a boolean or binary digit: {z}' - if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { - if (ERRORS) raise( 13, 'argument' + notBool, z ); - if ( z != !!z ) z = null; - } - - if ( !c ) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if ( v = c[v] ) { - - // Subtract the number of trailing zeros of the last element. - for ( ; v % 10 == 0; v /= 10, n-- ); - - // Add the number of digits of the first element. - for ( v = c[0]; v >= 10; v /= 10, n++ ); - } - - if ( z && x.e + 1 > n ) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if - * omitted. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'round() decimal places out of range: {dp}' - * 'round() decimal places not an integer: {dp}' - * 'round() rounding mode not an integer: {rm}' - * 'round() rounding mode out of range: {rm}' - */ - P.round = function ( dp, rm ) { - var n = new BigNumber(this); - - if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { - round( n, ~~dp + this.e + 1, rm == null || - !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); - } - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity - * otherwise. - * - * 'shift() argument not an integer: {k}' - * 'shift() argument out of range: {k}' - */ - P.shift = function (k) { - var n = this; - return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) - - // k < 1e+21, or truncate(k) will produce exponential notation. - ? n.times( '1e' + truncate(k) ) - : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) - ? n.s * ( k < 0 ? 0 : 1 / 0 ) - : n ); - }; - - - /* - * sqrt(-n) = N - * sqrt( N) = N - * sqrt(-I) = N - * sqrt( I) = I - * sqrt( 0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if ( s !== 1 || !c || !c[0] ) { - return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); - } - - // Initial estimate. - s = Math.sqrt( +x ); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if ( s == 0 || s == 1 / 0 ) { - n = coeffToString(c); - if ( ( n.length + e ) % 2 == 0 ) n += '0'; - s = Math.sqrt(n); - e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); - - if ( s == 1 / 0 ) { - n = '1e' + e; - } else { - n = s.toExponential(); - n = n.slice( 0, n.indexOf('e') + 1 ) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber( s + '' ); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if ( r.c[0] ) { - e = r.e; - s = e + dp; - if ( s < 3 ) s = 0; - - // Newton-Raphson iteration. - for ( ; ; ) { - t = r; - r = half.times( t.plus( div( x, t, dp, 1 ) ) ); - - if ( coeffToString( t.c ).slice( 0, s ) === ( n = - coeffToString( r.c ) ).slice( 0, s ) ) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if ( r.e < e ) --s; - n = n.slice( s - 3, s + 1 ); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if ( n == '9999' || !rep && n == '4999' ) { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if ( !rep ) { - round( t, t.e + DECIMAL_PLACES + 2, 0 ); - - if ( t.times(t).eq(x) ) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { - - // Truncate to the first rounding digit. - round( r, r.e + DECIMAL_PLACES + 2, 1 ); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber times the value of - * BigNumber(y, b). - */ - P.times = P.mul = function ( y, b ) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = ( id = 17, y = new BigNumber( y, b ) ).c; - - // Either NaN, ±Infinity or ±0? - if ( !xc || !yc || !xc[0] || !yc[0] ) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if ( !xc || !yc ) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); - - base = BASE; - sqrtBase = SQRT_BASE; - - for ( i = ycL; --i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for ( k = xcL, j = i + k; j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; - c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.shift(); - } - - return normalise( y, zc, e ); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of - * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toDigits() precision out of range: {sd}' - * 'toDigits() precision not an integer: {sd}' - * 'toDigits() rounding mode not an integer: {rm}' - * 'toDigits() rounding mode out of range: {rm}' - */ - P.toDigits = function ( sd, rm ) { - var n = new BigNumber(this); - sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; - rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; - return sd ? round( n, sd, rm ) : n; - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toExponential() decimal places not an integer: {dp}' - * 'toExponential() decimal places out of range: {dp}' - * 'toExponential() rounding mode not an integer: {rm}' - * 'toExponential() rounding mode out of range: {rm}' - */ - P.toExponential = function ( dp, rm ) { - return format( this, - dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFixed() decimal places not an integer: {dp}' - * 'toFixed() decimal places out of range: {dp}' - * 'toFixed() rounding mode not an integer: {rm}' - * 'toFixed() rounding mode out of range: {rm}' - */ - P.toFixed = function ( dp, rm ) { - return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) - ? ~~dp + this.e + 1 : null, rm, 20 ); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the FORMAT object (see BigNumber.config). - * - * FORMAT = { - * decimalSeparator : '.', - * groupSeparator : ',', - * groupSize : 3, - * secondaryGroupSize : 0, - * fractionGroupSeparator : '\xA0', // non-breaking space - * fractionGroupSize : 0 - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toFormat() decimal places not an integer: {dp}' - * 'toFormat() decimal places out of range: {dp}' - * 'toFormat() rounding mode not an integer: {rm}' - * 'toFormat() rounding mode out of range: {rm}' - */ - P.toFormat = function ( dp, rm ) { - var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) - ? ~~dp + this.e + 1 : null, rm, 21 ); - - if ( this.c ) { - var i, - arr = str.split('.'), - g1 = +FORMAT.groupSize, - g2 = +FORMAT.secondaryGroupSize, - groupSeparator = FORMAT.groupSeparator, - intPart = arr[0], - fractionPart = arr[1], - isNeg = this.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if ( g1 > 0 && len > 0 ) { - i = len % g1 || g1; - intPart = intDigits.substr( 0, i ); - - for ( ; i < len; i += g1 ) { - intPart += groupSeparator + intDigits.substr( i, g1 ); - } - - if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) - ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), - '$&' + FORMAT.fractionGroupSeparator ) - : fractionPart ) - : intPart; - } - - return str; - }; - - - /* - * Return a string array representing the value of this BigNumber as a simple fraction with - * an integer numerator and an integer denominator. The denominator will be a positive - * non-zero value less than or equal to the specified maximum denominator. If a maximum - * denominator is not specified, the denominator will be the lowest value necessary to - * represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. - * - * 'toFraction() max denominator not an integer: {md}' - * 'toFraction() max denominator out of range: {md}' - */ - P.toFraction = function (md) { - var arr, d0, d2, e, exp, n, n0, q, s, - k = ERRORS, - x = this, - xc = x.c, - d = new BigNumber(ONE), - n1 = d0 = new BigNumber(ONE), - d1 = n0 = new BigNumber(ONE); - - if ( md != null ) { - ERRORS = false; - n = new BigNumber(md); - ERRORS = k; - - if ( !( k = n.isInt() ) || n.lt(ONE) ) { - - if (ERRORS) { - raise( 22, - 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); - } - - // ERRORS is false: - // If md is a finite non-integer >= 1, round it to an integer and use it. - md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; - } - } - - if ( !xc ) return x.toString(); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; - md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for ( ; ; ) { - q = div( n, d, 0, 1 ); - d2 = d0.plus( q.times(d1) ); - if ( d2.cmp(md) == 1 ) break; - d0 = d1; - d1 = d2; - n1 = n0.plus( q.times( d2 = n1 ) ); - n0 = d2; - d = n.minus( q.times( d2 = d ) ); - n = d2; - } - - d2 = div( md.minus(d0), d1, 0, 1 ); - n0 = n0.plus( d2.times(n1) ); - d0 = d0.plus( d2.times(d1) ); - n0.s = n1.s = x.s; - e *= 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( - div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 - ? [ n1.toString(), d1.toString() ] - : [ n0.toString(), d0.toString() ]; - - MAX_EXP = exp; - return arr; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - var x = this; - - // Ensure zero has correct sign. - return +x || ( x.s ? x.s * 0 : NaN ); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber raised to the power n. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. - * - * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. - * (Performs 54 loop iterations for n of 9007199254740992.) - * - * 'pow() exponent not an integer: {n}' - * 'pow() exponent out of range: {n}' - */ - P.toPower = P.pow = function (n) { - var k, y, - i = mathfloor( n < 0 ? -n : +n ), - x = this; - - // Pass ±Infinity to Math.pow if exponent is out of range. - if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && - ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || - parseFloat(n) != n && !( n = NaN ) ) ) { - return new BigNumber( Math.pow( +x, n ) ); - } - - // Truncating each coefficient array to a length of k after each multiplication equates - // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a - // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) - k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; - y = new BigNumber(ONE); - - for ( ; ; ) { - - if ( i % 2 ) { - y = y.times(x); - if ( !y.c ) break; - if ( k && y.c.length > k ) y.c.length = k; - } - - i = mathfloor( i / 2 ); - if ( !i ) break; - - x = x.times(x); - if ( k && x.c && x.c.length > k ) x.c.length = k; - } - - if ( n < 0 ) y = ONE.div(y); - return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * 'toPrecision() precision not an integer: {sd}' - * 'toPrecision() precision out of range: {sd}' - * 'toPrecision() rounding mode not an integer: {rm}' - * 'toPrecision() rounding mode out of range: {rm}' - */ - P.toPrecision = function ( sd, rm ) { - return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) - ? sd | 0 : null, rm, 24 ); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to 64 inclusive. - * - * 'toString() base not an integer: {b}' - * 'toString() base out of range: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if ( e === null ) { - - if (s) { - str = 'Infinity'; - if ( s < 0 ) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - str = coeffToString( n.c ); - - if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential( str, e ) - : toFixedPoint( str, e ); - } else { - str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); - } - - if ( s < 0 && n.c[0] ) str = '-' + str; - } - - return str; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole - * number. - */ - P.truncated = P.trunc = function () { - return round( new BigNumber(this), this.e + 1, 1 ); - }; - - - - /* - * Return as toString, but do not accept a base argument. - */ - P.valueOf = P.toJSON = function () { - return this.toString(); - }; - - - // Aliases for BigDecimal methods. - //P.add = P.plus; // P.add included above - //P.subtract = P.minus; // P.sub included above - //P.multiply = P.times; // P.mul included above - //P.divide = P.div; - //P.remainder = P.mod; - //P.compareTo = P.cmp; - //P.negate = P.neg; - - - if ( configObj != null ) BigNumber.config(configObj); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for ( ; i < j; ) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for ( ; z--; s = '0' + s ); - r += s; - } - - // Determine trailing zeros. - for ( j = r.length; r.charCodeAt(--j) === 48; ); - return r.slice( 0, j + 1 || 1 ); - } - - - // Compare the value of BigNumbers x and y. - function compare( x, y ) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if ( !i || !j ) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if ( a || b ) return a ? b ? 0 : -j : i; - - // Signs differ? - if ( i != j ) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if ( !b ) return k > l ^ a ? 1 : -1; - - j = ( k = xc.length ) < ( l = yc.length ) ? k : l; - - // Compare digit by digit. - for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Return true if n is a valid number in range, otherwise false. - * Use for argument validation when ERRORS is false. - * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. - */ - function intValidatorNoErrors( n, min, max ) { - return ( n = truncate(n) ) >= min && n <= max; - } - - - function isArray(obj) { - return Object.prototype.toString.call(obj) == '[object Array]'; - } - - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. convertBase('255', 10, 16) returns [15, 15]. - * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut( str, baseIn, baseOut ) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for ( ; i < len; ) { - for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); - arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); - - for ( ; j < arr.length; j++ ) { - - if ( arr[j] > baseOut - 1 ) { - if ( arr[j + 1] == null ) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - - function toExponential( str, e ) { - return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + - ( e < 0 ? 'e' : 'e+' ) + e; - } - - - function toFixedPoint( str, e ) { - var len, z; - - // Negative exponent? - if ( e < 0 ) { - - // Prepend zeros. - for ( z = '0.'; ++e; z += '0' ); - str = z + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if ( ++e > len ) { - for ( z = '0', e -= len; --e; z += '0' ); - str += z; - } else if ( e < len ) { - str = str.slice( 0, e ) + '.' + str.slice(e); - } - } - - return str; - } - - - function truncate(n) { - n = parseFloat(n); - return n < 0 ? mathceil(n) : mathfloor(n); - } - - - // EXPORT - - - BigNumber = another(); - - // AMD. - if ( typeof define == 'function' && define.amd ) { - define( function () { return BigNumber; } ); - - // Node and other environments that support module.exports. - } else if ( typeof module != 'undefined' && module.exports ) { - module.exports = BigNumber; - if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} - - // Browser. - } else { - global.BigNumber = BigNumber; - } -})(this); diff --git a/node_modules/web3/node_modules/bignumber.js/bignumber.js.map b/node_modules/web3/node_modules/bignumber.js/bignumber.js.map deleted file mode 100644 index d64b533..0000000 --- a/node_modules/web3/node_modules/bignumber.js/bignumber.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bignumber.min.js","sources":["bignumber.js"],"names":["global","another","configObj","BigNumber","n","b","c","e","i","num","len","str","x","this","ERRORS","raise","isValidInt","id","round","DECIMAL_PLACES","ROUNDING_MODE","RegExp","ALPHABET","slice","test","parseNumeric","s","replace","length","tooManyDigits","charCodeAt","convertBase","isNumeric","indexOf","search","substring","MAX_EXP","MIN_EXP","LOG_BASE","push","baseOut","baseIn","sign","d","k","r","xc","y","dp","rm","toLowerCase","POW_PRECISION","pow","toBaseOut","toFixedPoint","coeffToString","pop","div","unshift","charAt","format","caller","c0","ne","roundingMode","toString","TO_EXP_NEG","toExponential","maxOrMin","args","method","m","isArray","call","intValidatorWithErrors","min","max","name","truncate","normalise","j","msg","val","error","Error","sd","ni","rd","pows10","POWS_TEN","out","mathceil","mathfloor","BASE","P","prototype","ONE","TO_EXP_POS","CRYPTO","MODULO_MODE","FORMAT","decimalSeparator","groupSeparator","groupSize","secondaryGroupSize","fractionGroupSeparator","fractionGroupSize","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","v","p","a","arguments","o","has","hasOwnProperty","MAX","intValidatorNoErrors","notBool","crypto","lt","gt","random","pow2_53","random53bitInt","Math","rand","getRandomValues","Uint32Array","randomBytes","copy","shift","multiply","base","temp","xlo","xhi","carry","klo","SQRT_BASE","khi","compare","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","yc","NaN","bitFloor","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","isNaN","p1","p2","absoluteValue","abs","ceil","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","divToInt","equals","eq","floor","greaterThan","greaterThanOrEqualTo","gte","isFinite","isInteger","isInt","isNegative","isNeg","isZero","lessThan","lessThanOrEqualTo","lte","minus","sub","t","xLTy","plus","xe","ye","reverse","modulo","mod","times","negated","neg","add","precision","z","MAX_SAFE_INTEGER","squareRoot","sqrt","rep","half","mul","xcL","ycL","ylo","yhi","zc","sqrtBase","toDigits","toFixed","toFormat","arr","split","g1","g2","intPart","fractionPart","intDigits","substr","toFraction","md","d0","d2","exp","n0","n1","d1","toNumber","toPower","parseFloat","toPrecision","truncated","trunc","valueOf","toJSON","l","obj","Object","arrL","define","amd","module","exports","require"],"mappings":";CAEC,SAAWA,GACR,YAqCA,SAASC,GAAQC,GAiHb,QAASC,GAAWC,EAAGC,GACnB,GAAIC,GAAGC,EAAGC,EAAGC,EAAKC,EAAKC,EACnBC,EAAIC,IAGR,MAAQD,YAAaT,IAIjB,MADIW,IAAQC,EAAO,GAAI,+BAAgCX,GAChD,GAAID,GAAWC,EAAGC,EAK7B,IAAU,MAALA,GAAcW,EAAYX,EAAG,EAAG,GAAIY,EAAI,QA4BtC,CAMH,GALAZ,EAAQ,EAAJA,EACJM,EAAMP,EAAI,GAIA,IAALC,EAED,MADAO,GAAI,GAAIT,GAAWC,YAAaD,GAAYC,EAAIO,GACzCO,EAAON,EAAGO,EAAiBP,EAAEL,EAAI,EAAGa,EAK/C,KAAOX,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,IAC7C,GAAMiB,QAAQ,OAAUf,EAAI,IAAMgB,EAASC,MAAO,EAAGlB,GAAM,MAC1D,SAAWC,EAAI,MAAU,GAAJD,EAAS,IAAM,IAAOmB,KAAKb,GAChD,MAAOc,GAAcb,EAAGD,EAAKF,EAAKJ,EAGlCI,IACAG,EAAEc,EAAY,EAAR,EAAItB,GAAUO,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAE1CT,GAAUH,EAAIgB,QAAS,YAAa,IAAKC,OAAS,IAGnDb,EAAOE,EAAIY,EAAezB,GAI9BK,GAAM,GAENG,EAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,EAGlEZ,EAAMoB,EAAapB,EAAK,GAAIN,EAAGO,EAAEc,OA9DmB,CAGpD,GAAKtB,YAAaD,GAKd,MAJAS,GAAEc,EAAItB,EAAEsB,EACRd,EAAEL,EAAIH,EAAEG,EACRK,EAAEN,GAAMF,EAAIA,EAAEE,GAAMF,EAAEmB,QAAUnB,OAChCa,EAAK,EAIT,KAAOR,EAAkB,gBAALL,KAAuB,EAAJA,GAAS,EAAI,CAIhD,GAHAQ,EAAEc,EAAY,EAAR,EAAItB,GAAUA,GAAKA,EAAG,IAAO,EAG9BA,MAAQA,EAAI,CACb,IAAMG,EAAI,EAAGC,EAAIJ,EAAGI,GAAK,GAAIA,GAAK,GAAID,KAItC,MAHAK,GAAEL,EAAIA,EACNK,EAAEN,GAAKF,QACPa,EAAK,GAITN,EAAMP,EAAI,OACP,CACH,IAAM4B,EAAUR,KAAMb,EAAMP,EAAI,IAAO,MAAOqB,GAAcb,EAAGD,EAAKF,EACpEG,GAAEc,EAA0B,KAAtBf,EAAImB,WAAW,IAAcnB,EAAMA,EAAIY,MAAM,GAAI,IAAO,GAwDtE,KAhBOhB,EAAII,EAAIsB,QAAQ,MAAS,KAAKtB,EAAMA,EAAIgB,QAAS,IAAK,MAGtDnB,EAAIG,EAAIuB,OAAQ,OAAW,GAGrB,EAAJ3B,IAAQA,EAAIC,GACjBD,IAAMI,EAAIY,MAAOf,EAAI,GACrBG,EAAMA,EAAIwB,UAAW,EAAG3B,IACZ,EAAJD,IAGRA,EAAII,EAAIiB,QAINpB,EAAI,EAAyB,KAAtBG,EAAImB,WAAWtB,GAAWA,KAGvC,IAAME,EAAMC,EAAIiB,OAAkC,KAA1BjB,EAAImB,aAAapB,KAGzC,GAFAC,EAAMA,EAAIY,MAAOf,EAAGE,EAAM,GAYtB,GATAA,EAAMC,EAAIiB,OAILnB,GAAOK,GAAUJ,EAAM,IAAKK,EAAOE,EAAIY,EAAejB,EAAEc,EAAItB,GAEjEG,EAAIA,EAAIC,EAAI,EAGPD,EAAI6B,EAGLxB,EAAEN,EAAIM,EAAEL,EAAI,SAGT,IAAS8B,EAAJ9B,EAGRK,EAAEN,GAAMM,EAAEL,EAAI,OACX,CAWH,GAVAK,EAAEL,EAAIA,EACNK,EAAEN,KAMFE,GAAMD,EAAI,GAAM+B,EACP,EAAJ/B,IAAQC,GAAK8B,GAET5B,EAAJF,EAAU,CAGX,IAFIA,GAAGI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAO,EAAGf,IAE1BE,GAAO4B,EAAc5B,EAAJF,GACnBI,EAAEN,EAAEiC,MAAO5B,EAAIY,MAAOf,EAAGA,GAAK8B,GAGlC3B,GAAMA,EAAIY,MAAMf,GAChBA,EAAI8B,EAAW3B,EAAIiB,WAEnBpB,IAAKE,CAGT,MAAQF,IAAKG,GAAO,KACpBC,EAAEN,EAAEiC,MAAO5B,OAKfC,GAAEN,GAAMM,EAAEL,EAAI,EAGlBU,GAAK,EAgVT,QAASc,GAAapB,EAAK6B,EAASC,EAAQC,GACxC,GAAIC,GAAGpC,EAAGqC,EAAGC,EAAGjC,EAAGkC,EAAIC,EACnBvC,EAAIG,EAAIsB,QAAS,KACjBe,EAAK7B,EACL8B,EAAK7B,CA0BT,KAxBc,GAATqB,IAAc9B,EAAMA,EAAIuC,eAGxB1C,GAAK,IACNoC,EAAIO,EAGJA,EAAgB,EAChBxC,EAAMA,EAAIgB,QAAS,IAAK,IACxBoB,EAAI,GAAI5C,GAAUsC,GAClB7B,EAAImC,EAAEK,IAAKzC,EAAIiB,OAASpB,GACxB2C,EAAgBP,EAIhBG,EAAEzC,EAAI+C,EAAWC,EAAcC,EAAe3C,EAAEN,GAAKM,EAAEL,GAAK,GAAIiC,GAChEO,EAAExC,EAAIwC,EAAEzC,EAAEsB,QAIdkB,EAAKO,EAAW1C,EAAK8B,EAAQD,GAC7BjC,EAAIqC,EAAIE,EAAGlB,OAGQ,GAAXkB,IAAKF,GAASE,EAAGU,OACzB,IAAMV,EAAG,GAAK,MAAO,GA2BrB,IAzBS,EAAJtC,IACCD,GAEFK,EAAEN,EAAIwC,EACNlC,EAAEL,EAAIA,EAGNK,EAAEc,EAAIgB,EACN9B,EAAI6C,EAAK7C,EAAGmC,EAAGC,EAAIC,EAAIT,GACvBM,EAAKlC,EAAEN,EACPuC,EAAIjC,EAAEiC,EACNtC,EAAIK,EAAEL,GAGVoC,EAAIpC,EAAIyC,EAAK,EAGbxC,EAAIsC,EAAGH,GACPC,EAAIJ,EAAU,EACdK,EAAIA,GAAS,EAAJF,GAAsB,MAAbG,EAAGH,EAAI,GAEzBE,EAAS,EAALI,GAAgB,MAALzC,GAAaqC,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IACzDlB,EAAIoC,GAAKpC,GAAKoC,IAAY,GAANK,GAAWJ,GAAW,GAANI,GAAuB,EAAZH,EAAGH,EAAI,IACtDM,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAE1B,EAAJiB,IAAUG,EAAG,GAGdnC,EAAMkC,EAAIS,EAAc,KAAMN,GAAO,QAClC,CAGH,GAFAF,EAAGlB,OAASe,EAERE,EAGA,MAAQL,IAAWM,IAAKH,GAAKH,GACzBM,EAAGH,GAAK,EAEFA,MACApC,EACFuC,EAAGY,QAAQ,GAMvB,KAAMd,EAAIE,EAAGlB,QAASkB,IAAKF,KAG3B,IAAMpC,EAAI,EAAGG,EAAM,GAASiC,GAALpC,EAAQG,GAAOW,EAASqC,OAAQb,EAAGtC,OAC1DG,EAAM2C,EAAc3C,EAAKJ,GAI7B,MAAOI,GA4QX,QAASiD,GAAQxD,EAAGI,EAAGyC,EAAIY,GACvB,GAAIC,GAAIvD,EAAGwD,EAAIrD,EAAKC,CAKpB,IAHAsC,EAAW,MAANA,GAAcjC,EAAYiC,EAAI,EAAG,EAAGY,EAAQG,GACxC,EAALf,EAAS7B,GAEPhB,EAAEE,EAAI,MAAOF,GAAE6D,UAIrB,IAHAH,EAAK1D,EAAEE,EAAE,GACTyD,EAAK3D,EAAEG,EAEG,MAALC,EACDG,EAAM4C,EAAenD,EAAEE,GACvBK,EAAgB,IAAVkD,GAA0B,IAAVA,GAAsBK,GAANH,EAClCI,EAAexD,EAAKoD,GACpBT,EAAc3C,EAAKoD,OAevB,IAbA3D,EAAIc,EAAO,GAAIf,GAAUC,GAAII,EAAGyC,GAGhC1C,EAAIH,EAAEG,EAENI,EAAM4C,EAAenD,EAAEE,GACvBI,EAAMC,EAAIiB,OAOK,IAAViC,GAA0B,IAAVA,IAAuBtD,GAALC,GAAe0D,GAAL3D,GAAoB,CAGjE,KAAcC,EAANE,EAASC,GAAO,IAAKD,KAC7BC,EAAMwD,EAAexD,EAAKJ,OAQ1B,IAJAC,GAAKuD,EACLpD,EAAM2C,EAAc3C,EAAKJ,GAGpBA,EAAI,EAAIG,GACT,KAAOF,EAAI,EAAI,IAAMG,GAAO,IAAKH,IAAKG,GAAO,UAG7C,IADAH,GAAKD,EAAIG,EACJF,EAAI,EAEL,IADKD,EAAI,GAAKG,IAAMC,GAAO,KACnBH,IAAKG,GAAO,KAMpC,MAAOP,GAAEsB,EAAI,GAAKoC,EAAK,IAAMnD,EAAMA,EAKvC,QAASyD,GAAUC,EAAMC,GACrB,GAAIC,GAAGnE,EACHI,EAAI,CAKR,KAHKgE,EAASH,EAAK,MAAOA,EAAOA,EAAK,IACtCE,EAAI,GAAIpE,GAAWkE,EAAK,MAEd7D,EAAI6D,EAAKzC,QAAU,CAIzB,GAHAxB,EAAI,GAAID,GAAWkE,EAAK7D,KAGlBJ,EAAEsB,EAAI,CACR6C,EAAInE,CACJ,OACQkE,EAAOG,KAAMF,EAAGnE,KACxBmE,EAAInE,GAIZ,MAAOmE,GAQX,QAASG,GAAwBtE,EAAGuE,EAAKC,EAAKf,EAAQgB,GAMlD,OALSF,EAAJvE,GAAWA,EAAIwE,GAAOxE,GAAK0E,EAAS1E,KACrCW,EAAO8C,GAAUgB,GAAQ,mBACjBF,EAAJvE,GAAWA,EAAIwE,EAAM,gBAAkB,mBAAqBxE,IAG7D,EAQX,QAAS2E,GAAW3E,EAAGE,EAAGC,GAKtB,IAJA,GAAIC,GAAI,EACJwE,EAAI1E,EAAEsB,QAGDtB,IAAI0E,GAAI1E,EAAEkD,OAGnB,IAAMwB,EAAI1E,EAAE,GAAI0E,GAAK,GAAIA,GAAK,GAAIxE,KAkBlC,OAfOD,EAAIC,EAAID,EAAI+B,EAAW,GAAMF,EAGhChC,EAAEE,EAAIF,EAAEG,EAAI,KAGA8B,EAAJ9B,EAGRH,EAAEE,GAAMF,EAAEG,EAAI,IAEdH,EAAEG,EAAIA,EACNH,EAAEE,EAAIA,GAGHF,EAmDX,QAASW,GAAO8C,EAAQoB,EAAKC,GACzB,GAAIC,GAAQ,GAAIC,QACZ,gBACA,MACA,SACA,MACA,WACA,KACA,KACA,MACA,KACA,MACA,QACA,MACA,OACA,YACA,SACA,QACA,QACA,QACA,WACA,gBACA,UACA,WACA,aACA,MACA,cACA,WACA,aACFvB,GAAU,MAAQoB,EAAM,KAAOC,EAIjC,MAFAC,GAAMN,KAAO,kBACb5D,EAAK,EACCkE,EAQV,QAASjE,GAAON,EAAGyE,EAAIpC,EAAIJ,GACvB,GAAIF,GAAGnC,EAAGwE,EAAGpC,EAAGxC,EAAGkF,EAAIC,EACnBzC,EAAKlC,EAAEN,EACPkF,EAASC,CAGb,IAAI3C,EAAI,CAQJ4C,EAAK,CAGD,IAAM/C,EAAI,EAAGC,EAAIE,EAAG,GAAIF,GAAK,GAAIA,GAAK,GAAID,KAI1C,GAHAnC,EAAI6E,EAAK1C,EAGA,EAAJnC,EACDA,GAAK8B,EACL0C,EAAIK,EACJjF,EAAI0C,EAAIwC,EAAK,GAGbC,EAAKnF,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,MAIpC,IAFAM,EAAKK,GAAYnF,EAAI,GAAM8B,GAEtBgD,GAAMxC,EAAGlB,OAAS,CAEnB,IAAIiB,EASA,KAAM6C,EANN,MAAQ5C,EAAGlB,QAAU0D,EAAIxC,EAAGP,KAAK,IACjCnC,EAAImF,EAAK,EACT5C,EAAI,EACJnC,GAAK8B,EACL0C,EAAIxE,EAAI8B,EAAW,MAIpB,CAIH,IAHAlC,EAAIwC,EAAIE,EAAGwC,GAGL3C,EAAI,EAAGC,GAAK,GAAIA,GAAK,GAAID,KAG/BnC,GAAK8B,EAIL0C,EAAIxE,EAAI8B,EAAWK,EAGnB4C,EAAS,EAAJP,EAAQ,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,EAAI,GAAM,GAAK,EAmBxD,GAfAnC,EAAIA,GAAU,EAALwC,GAKO,MAAdvC,EAAGwC,EAAK,KAAoB,EAAJN,EAAQ5E,EAAIA,EAAIoF,EAAQ7C,EAAIqC,EAAI,IAE1DnC,EAAS,EAALI,GACEsC,GAAM1C,KAAe,GAANI,GAAWA,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAClD6D,EAAK,GAAW,GAANA,IAAmB,GAANtC,GAAWJ,GAAW,GAANI,IAGnCzC,EAAI,EAAIwE,EAAI,EAAI5E,EAAIoF,EAAQ7C,EAAIqC,GAAM,EAAIlC,EAAGwC,EAAK,IAAO,GAAO,GAClErC,IAAQrC,EAAEc,EAAI,EAAI,EAAI,IAElB,EAAL2D,IAAWvC,EAAG,GAiBf,MAhBAA,GAAGlB,OAAS,EAERiB,GAGAwC,GAAMzE,EAAEL,EAAI,EAGZuC,EAAG,GAAK0C,EAAQH,EAAK/C,GACrB1B,EAAEL,GAAK8E,GAAM,GAIbvC,EAAG,GAAKlC,EAAEL,EAAI,EAGXK,CAkBX,IAdU,GAALJ,GACDsC,EAAGlB,OAAS0D,EACZ1C,EAAI,EACJ0C,MAEAxC,EAAGlB,OAAS0D,EAAK,EACjB1C,EAAI4C,EAAQlD,EAAW9B,GAIvBsC,EAAGwC,GAAMN,EAAI,EAAIY,EAAWxF,EAAIoF,EAAQ7C,EAAIqC,GAAMQ,EAAOR,IAAOpC,EAAI,GAIpEC,EAEA,OAAY,CAGR,GAAW,GAANyC,EAAU,CAGX,IAAM9E,EAAI,EAAGwE,EAAIlC,EAAG,GAAIkC,GAAK,GAAIA,GAAK,GAAIxE,KAE1C,IADAwE,EAAIlC,EAAG,IAAMF,EACPA,EAAI,EAAGoC,GAAK,GAAIA,GAAK,GAAIpC,KAG1BpC,GAAKoC,IACNhC,EAAEL,IACGuC,EAAG,IAAM+C,IAAO/C,EAAG,GAAK,GAGjC,OAGA,GADAA,EAAGwC,IAAO1C,EACLE,EAAGwC,IAAOO,EAAO,KACtB/C,GAAGwC,KAAQ,EACX1C,EAAI,EAMhB,IAAMpC,EAAIsC,EAAGlB,OAAoB,IAAZkB,IAAKtC,GAAUsC,EAAGU,QAItC5C,EAAEL,EAAI6B,EACPxB,EAAEN,EAAIM,EAAEL,EAAI,KAGJK,EAAEL,EAAI8B,IACdzB,EAAEN,GAAMM,EAAEL,EAAI,IAItB,MAAOK,GAjzCX,GAAI6C,GAGAxC,EAAK,EACL6E,EAAI3F,EAAU4F,UACdC,EAAM,GAAI7F,GAAU,GAYpBgB,EAAiB,GAejBC,EAAgB,EAMhB8C,EAAa,GAIb+B,EAAa,GAMb5D,EAAU,KAKVD,EAAU,IAGVtB,GAAS,EAGTE,EAAa0D,EAGbwB,GAAS,EAoBTC,EAAc,EAIdhD,EAAgB,IAGhBiD,GACIC,iBAAkB,IAClBC,eAAgB,IAChBC,UAAW,EACXC,mBAAoB,EACpBC,uBAAwB,IACxBC,kBAAmB,EAk0E3B,OA/oEAvG,GAAUF,QAAUA,EAEpBE,EAAUwG,SAAW,EACrBxG,EAAUyG,WAAa,EACvBzG,EAAU0G,WAAa,EACvB1G,EAAU2G,YAAc,EACxB3G,EAAU4G,cAAgB,EAC1B5G,EAAU6G,gBAAkB,EAC5B7G,EAAU8G,gBAAkB,EAC5B9G,EAAU+G,gBAAkB,EAC5B/G,EAAUgH,iBAAmB,EAC7BhH,EAAUiH,OAAS,EAoCnBjH,EAAUkH,OAAS,WACf,GAAIC,GAAGC,EACH/G,EAAI,EACJqC,KACA2E,EAAIC,UACJC,EAAIF,EAAE,GACNG,EAAMD,GAAiB,gBAALA,GACd,WAAc,MAAKA,GAAEE,eAAeL,GAA4B,OAAdD,EAAII,EAAEH,IAA1C,QACd,WAAc,MAAKC,GAAE5F,OAASpB,EAA6B,OAAhB8G,EAAIE,EAAEhH,MAAnC,OA6GtB,OAxGKmH,GAAKJ,EAAI,mBAAsBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KAC1DpG,EAAqB,EAAJmG,GAErBzE,EAAE0E,GAAKpG,EAKFwG,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACvDnG,EAAoB,EAAJkG,GAEpBzE,EAAE0E,GAAKnG,EAMFuG,EAAKJ,EAAI,oBAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,EAAG,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACnErD,EAAoB,EAAPoD,EAAE,GACfrB,EAAoB,EAAPqB,EAAE,IAEXtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KACrCrD,IAAgB+B,EAAkC,GAAf,EAAJqB,GAASA,EAAIA,MAGpDzE,EAAE0E,IAAOrD,EAAY+B,GAOhB0B,EAAKJ,EAAI,WAEL/C,EAAQ8C,GACJtG,EAAYsG,EAAE,IAAKO,EAAK,GAAI,EAAGN,IAAOvG,EAAYsG,EAAE,GAAI,EAAGO,EAAK,EAAGN,KACpElF,EAAiB,EAAPiF,EAAE,GACZlF,EAAiB,EAAPkF,EAAE,IAERtG,EAAYsG,GAAIO,EAAKA,EAAK,EAAGN,KAC5B,EAAJD,EAAQjF,IAAaD,EAA+B,GAAf,EAAJkF,GAASA,EAAIA,IAC1CxG,GAAQC,EAAO,EAAGwG,EAAI,kBAAmBD,KAG1DzE,EAAE0E,IAAOlF,EAASD,GAIbuF,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBrG,EAAK,EACLD,GAAeF,IAAWwG,GAAM5C,EAAyBoD,GAClDhH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKzG,EAKF6G,EAAKJ,EAAI,YAELD,MAAQA,GAAW,IAANA,GAAiB,IAANA,GACzBpB,KAAaoB,IAAKU,GAA2B,gBAAVA,IAC9BV,IAAMpB,GAAUpF,GAASC,EAAO,EAAG,qBAAsBiH,IACvDlH,GACPC,EAAO,EAAGwG,EAAIQ,EAAST,IAG/BzE,EAAE0E,GAAKrB,EAKFyB,EAAKJ,EAAI,gBAAmBvG,EAAYsG,EAAG,EAAG,EAAG,EAAGC,KACrDpB,EAAkB,EAAJmB,GAElBzE,EAAE0E,GAAKpB,EAKFwB,EAAKJ,EAAI,kBAAqBvG,EAAYsG,EAAG,EAAGO,EAAK,EAAGN,KACzDpE,EAAoB,EAAJmE,GAEpBzE,EAAE0E,GAAKpE,EAIFwE,EAAKJ,EAAI,YAEO,gBAALD,GACRlB,EAASkB,EACFxG,GACPC,EAAO,EAAGwG,EAAI,iBAAkBD,IAGxCzE,EAAE0E,GAAKnB,EAEAvD,GASX1C,EAAUyE,IAAM,WAAc,MAAOR,GAAUqD,UAAW3B,EAAEmC,KAQ5D9H,EAAUwE,IAAM,WAAc,MAAOP,GAAUqD,UAAW3B,EAAEoC,KAc5D/H,EAAUgI,OAAS,WACf,GAAIC,GAAU,iBAMVC,EAAkBC,KAAKH,SAAWC,EAAW,QAC7C,WAAc,MAAOxC,GAAW0C,KAAKH,SAAWC,IAChD,WAAc,MAA2C,UAAlB,WAAhBE,KAAKH,SAAwB,IACjC,QAAhBG,KAAKH,SAAsB,GAElC,OAAO,UAAUnF,GACb,GAAIwE,GAAGnH,EAAGE,EAAGqC,EAAG0E,EACZ9G,EAAI,EACJF,KACAiI,EAAO,GAAIpI,GAAU6F,EAKzB,IAHAhD,EAAW,MAANA,GAAehC,EAAYgC,EAAI,EAAG6E,EAAK,IAA6B,EAAL7E,EAAjB7B,EACnDyB,EAAI+C,EAAU3C,EAAKV,GAEf4D,EAGA,GAAK8B,GAAUA,EAAOQ,gBAAkB,CAIpC,IAFAhB,EAAIQ,EAAOQ,gBAAiB,GAAIC,aAAa7F,GAAK,IAEtCA,EAAJpC,GAQJ8G,EAAW,OAAPE,EAAEhH,IAAgBgH,EAAEhH,EAAI,KAAO,IAM9B8G,GAAK,MACNjH,EAAI2H,EAAOQ,gBAAiB,GAAIC,aAAY,IAC5CjB,EAAEhH,GAAKH,EAAE,GACTmH,EAAEhH,EAAI,GAAKH,EAAE,KAKbC,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MAGL,IAAKoF,GAAUA,EAAOU,YAAc,CAKvC,IAFAlB,EAAIQ,EAAOU,YAAa9F,GAAK,GAEjBA,EAAJpC,GAMJ8G,EAAsB,iBAAP,GAAPE,EAAEhH,IAA6C,cAAXgH,EAAEhH,EAAI,GAC/B,WAAXgH,EAAEhH,EAAI,GAAkC,SAAXgH,EAAEhH,EAAI,IACnCgH,EAAEhH,EAAI,IAAM,KAASgH,EAAEhH,EAAI,IAAM,GAAMgH,EAAEhH,EAAI,GAEhD8G,GAAK,KACNU,EAAOU,YAAY,GAAGC,KAAMnB,EAAGhH,IAI/BF,EAAEiC,KAAM+E,EAAI,MACZ9G,GAAK,EAGbA,GAAIoC,EAAI,MACD9B,IACPC,EAAO,GAAI,qBAAsBiH,EAKzC,KAAKxH,EAED,KAAYoC,EAAJpC,GACJ8G,EAAIe,IACK,KAAJf,IAAWhH,EAAEE,KAAO8G,EAAI,KAcrC,KAVA1E,EAAItC,IAAIE,GACRwC,GAAMV,EAGDM,GAAKI,IACNsE,EAAI7B,EAASnD,EAAWU,GACxB1C,EAAEE,GAAKoF,EAAWhD,EAAI0E,GAAMA,GAIf,IAAThH,EAAEE,GAAUF,EAAEkD,MAAOhD,KAG7B,GAAS,EAAJA,EACDF,GAAMC,EAAI,OACP,CAGH,IAAMA,EAAI,GAAc,IAATD,EAAE,GAAUA,EAAEsI,QAASrI,GAAK+B,GAG3C,IAAM9B,EAAI,EAAG8G,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAI9G,KAGhC8B,EAAJ9B,IAAeD,GAAK+B,EAAW9B,GAKxC,MAFA+H,GAAKhI,EAAIA,EACTgI,EAAKjI,EAAIA,EACFiI,MAqGf9E,EAAM,WAGF,QAASoF,GAAUjI,EAAGgC,EAAGkG,GACrB,GAAIvE,GAAGwE,EAAMC,EAAKC,EACdC,EAAQ,EACR1I,EAAII,EAAEgB,OACNuH,EAAMvG,EAAIwG,EACVC,EAAMzG,EAAIwG,EAAY,CAE1B,KAAMxI,EAAIA,EAAEW,QAASf,KACjBwI,EAAMpI,EAAEJ,GAAK4I,EACbH,EAAMrI,EAAEJ,GAAK4I,EAAY,EACzB7E,EAAI8E,EAAML,EAAMC,EAAME,EACtBJ,EAAOI,EAAMH,EAAUzE,EAAI6E,EAAcA,EAAcF,EACvDA,GAAUH,EAAOD,EAAO,IAAQvE,EAAI6E,EAAY,GAAMC,EAAMJ,EAC5DrI,EAAEJ,GAAKuI,EAAOD,CAKlB,OAFII,IAAOtI,EAAE8C,QAAQwF,GAEdtI,EAGX,QAAS0I,GAAS9B,EAAGnH,EAAGkJ,EAAIC,GACxB,GAAIhJ,GAAGiJ,CAEP,IAAKF,GAAMC,EACPC,EAAMF,EAAKC,EAAK,EAAI,OAGpB,KAAMhJ,EAAIiJ,EAAM,EAAOF,EAAJ/I,EAAQA,IAEvB,GAAKgH,EAAEhH,IAAMH,EAAEG,GAAK,CAChBiJ,EAAMjC,EAAEhH,GAAKH,EAAEG,GAAK,EAAI,EACxB,OAIZ,MAAOiJ,GAGX,QAASC,GAAUlC,EAAGnH,EAAGkJ,EAAIT,GAIzB,IAHA,GAAItI,GAAI,EAGA+I,KACJ/B,EAAE+B,IAAO/I,EACTA,EAAIgH,EAAE+B,GAAMlJ,EAAEkJ,GAAM,EAAI,EACxB/B,EAAE+B,GAAM/I,EAAIsI,EAAOtB,EAAE+B,GAAMlJ,EAAEkJ,EAIjC,OAAS/B,EAAE,IAAMA,EAAE5F,OAAS,EAAG4F,EAAEoB,UAIrC,MAAO,UAAWhI,EAAGmC,EAAGC,EAAIC,EAAI6F,GAC5B,GAAIW,GAAKlJ,EAAGC,EAAGmJ,EAAMvJ,EAAGwJ,EAAMC,EAAOC,EAAGC,EAAIC,EAAKC,EAAMC,EAAMC,EAAIC,EAAIC,EACjEC,EAAIC,EACJ7I,EAAId,EAAEc,GAAKqB,EAAErB,EAAI,EAAI,GACrBoB,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAGX,MAAMwC,GAAOA,EAAG,IAAO0H,GAAOA,EAAG,IAE7B,MAAO,IAAIrK,GAGRS,EAAEc,GAAMqB,EAAErB,IAAOoB,GAAK0H,GAAM1H,EAAG,IAAM0H,EAAG,GAAMA,GAG7C1H,GAAe,GAATA,EAAG,KAAY0H,EAAS,EAAJ9I,EAAQA,EAAI,EAHc+I,IAoB5D,KAbAX,EAAI,GAAI3J,GAAUuB,GAClBqI,EAAKD,EAAExJ,KACPC,EAAIK,EAAEL,EAAIwC,EAAExC,EACZmB,EAAIsB,EAAKzC,EAAI,EAEPuI,IACFA,EAAOjD,EACPtF,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDZ,EAAIA,EAAIY,EAAW,GAKjB9B,EAAI,EAAGgK,EAAGhK,KAAQsC,EAAGtC,IAAM,GAAKA,KAGtC,GAFKgK,EAAGhK,IAAOsC,EAAGtC,IAAM,IAAMD,IAErB,EAAJmB,EACDqI,EAAGxH,KAAK,GACRoH,GAAO,MACJ,CAwBH,IAvBAS,EAAKtH,EAAGlB,OACR0I,EAAKE,EAAG5I,OACRpB,EAAI,EACJkB,GAAK,EAILtB,EAAIwF,EAAWkD,GAAS0B,EAAG,GAAK,IAI3BpK,EAAI,IACLoK,EAAK3B,EAAU2B,EAAIpK,EAAG0I,GACtBhG,EAAK+F,EAAU/F,EAAI1C,EAAG0I,GACtBwB,EAAKE,EAAG5I,OACRwI,EAAKtH,EAAGlB,QAGZuI,EAAKG,EACLN,EAAMlH,EAAGvB,MAAO,EAAG+I,GACnBL,EAAOD,EAAIpI,OAGI0I,EAAPL,EAAWD,EAAIC,KAAU,GACjCM,EAAKC,EAAGjJ,QACRgJ,EAAG7G,QAAQ,GACX2G,EAAMG,EAAG,GACJA,EAAG,IAAM1B,EAAO,GAAIuB,GAIzB,GAAG,CAOC,GANAjK,EAAI,EAGJqJ,EAAMH,EAASkB,EAAIR,EAAKM,EAAIL,GAGjB,EAANR,EAAU,CAkBX,GAdAS,EAAOF,EAAI,GACNM,GAAML,IAAOC,EAAOA,EAAOpB,GAASkB,EAAI,IAAM,IAGnD5J,EAAIwF,EAAWsE,EAAOG,GAUjBjK,EAAI,EAeL,IAZIA,GAAK0I,IAAM1I,EAAI0I,EAAO,GAG1Bc,EAAOf,EAAU2B,EAAIpK,EAAG0I,GACxBe,EAAQD,EAAKhI,OACbqI,EAAOD,EAAIpI,OAOkC,GAArC0H,EAASM,EAAMI,EAAKH,EAAOI,IAC/B7J,IAGAsJ,EAAUE,EAAWC,EAALS,EAAaC,EAAKC,EAAIX,EAAOf,GAC7Ce,EAAQD,EAAKhI,OACb6H,EAAM,MAQA,IAALrJ,IAGDqJ,EAAMrJ,EAAI,GAIdwJ,EAAOY,EAAGjJ,QACVsI,EAAQD,EAAKhI,MAUjB,IAPaqI,EAARJ,GAAeD,EAAKlG,QAAQ,GAGjCgG,EAAUM,EAAKJ,EAAMK,EAAMnB,GAC3BmB,EAAOD,EAAIpI,OAGC,IAAP6H,EAMD,KAAQH,EAASkB,EAAIR,EAAKM,EAAIL,GAAS,GACnC7J,IAGAsJ,EAAUM,EAAUC,EAALK,EAAYC,EAAKC,EAAIP,EAAMnB,GAC1CmB,EAAOD,EAAIpI,WAGH,KAAR6H,IACRrJ,IACA4J,GAAO,GAIXD,GAAGvJ,KAAOJ,EAGL4J,EAAI,GACLA,EAAIC,KAAUnH,EAAGqH,IAAO,GAExBH,GAAQlH,EAAGqH,IACXF,EAAO,UAEHE,IAAOC,GAAgB,MAAVJ,EAAI,KAAgBtI,IAE7CiI,GAAiB,MAAVK,EAAI,GAGLD,EAAG,IAAKA,EAAGnB,QAGrB,GAAKE,GAAQjD,EAAO,CAGhB,IAAMrF,EAAI,EAAGkB,EAAIqI,EAAG,GAAIrI,GAAK,GAAIA,GAAK,GAAIlB,KAC1CU,EAAO4I,EAAG9G,GAAO8G,EAAEvJ,EAAIC,EAAID,EAAI+B,EAAW,GAAM,EAAGW,EAAI0G,OAIvDG,GAAEvJ,EAAIA,EACNuJ,EAAEjH,GAAK8G,CAGX,OAAOG,OAgJfrI,EAAe,WACX,GAAIkJ,GAAa,iBACbC,EAAW,cACXC,EAAY,cACZC,EAAkB,qBAClBC,EAAmB,mBAEvB,OAAO,UAAWnK,EAAGD,EAAKF,EAAKJ,GAC3B,GAAIyI,GACApH,EAAIjB,EAAME,EAAMA,EAAIgB,QAASoJ,EAAkB,GAGnD,IAAKD,EAAgBtJ,KAAKE,GACtBd,EAAEc,EAAIsJ,MAAMtJ,GAAK,KAAW,EAAJA,EAAQ,GAAK,MAClC,CACH,IAAMjB,IAGFiB,EAAIA,EAAEC,QAASgJ,EAAY,SAAWpG,EAAG0G,EAAIC,GAEzC,MADApC,GAAoC,MAA3BoC,EAAKA,EAAGhI,eAAyB,GAAW,KAANgI,EAAY,EAAI,EACvD7K,GAAKA,GAAKyI,EAAYvE,EAAL0G,IAGzB5K,IACAyI,EAAOzI,EAGPqB,EAAIA,EAAEC,QAASiJ,EAAU,MAAOjJ,QAASkJ,EAAW,SAGnDlK,GAAOe,GAAI,MAAO,IAAIvB,GAAWuB,EAAGoH,EAKzChI,IAAQC,EAAOE,EAAI,SAAYZ,EAAI,SAAWA,EAAI,IAAO,UAAWM,GACxEC,EAAEc,EAAI,KAGVd,EAAEN,EAAIM,EAAEL,EAAI,KACZU,EAAK,MAmNb6E,EAAEqF,cAAgBrF,EAAEsF,IAAM,WACtB,GAAIxK,GAAI,GAAIT,GAAUU,KAEtB,OADKD,GAAEc,EAAI,IAAId,EAAEc,EAAI,GACdd,GAQXkF,EAAEuF,KAAO,WACL,MAAOnK,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAWnDuF,EAAEwF,WAAaxF,EAAE2D,IAAM,SAAW1G,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAEyF,cAAgBzF,EAAE9C,GAAK,WACrB,GAAI5C,GAAGkH,EACHhH,EAAIO,KAAKP,CAEb,KAAMA,EAAI,MAAO,KAIjB,IAHAF,IAAQkH,EAAIhH,EAAEsB,OAAS,GAAM8I,EAAU7J,KAAKN,EAAI+B,IAAeA,EAG1DgF,EAAIhH,EAAEgH,GAAK,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9C,MAFS,GAAJA,IAAQA,EAAI,GAEVA,GAwBX0F,EAAE0F,UAAY1F,EAAErC,IAAM,SAAWV,EAAG1C,GAEhC,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAKc,EAAgBC,IAQ7D0E,EAAE2F,mBAAqB3F,EAAE4F,SAAW,SAAW3I,EAAG1C,GAE9C,MADAY,GAAK,EACEwC,EAAK5C,KAAM,GAAIV,GAAW4C,EAAG1C,GAAK,EAAG,IAQhDyF,EAAE6F,OAAS7F,EAAE8F,GAAK,SAAW7I,EAAG1C,GAE5B,MADAY,GAAK,EAC6C,IAA3CqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,KAQ5CyF,EAAE+F,MAAQ,WACN,MAAO3K,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEgG,YAAchG,EAAEoC,GAAK,SAAWnF,EAAG1C,GAEjC,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAEiG,qBAAuBjG,EAAEkG,IAAM,SAAWjJ,EAAG1C,GAE3C,MADAY,GAAK,EACqD,KAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAuB,IAANA,GAQnEyF,EAAEmG,SAAW,WACT,QAASpL,KAAKP,GAOlBwF,EAAEoG,UAAYpG,EAAEqG,MAAQ,WACpB,QAAStL,KAAKP,GAAKoK,EAAU7J,KAAKN,EAAI+B,GAAazB,KAAKP,EAAEsB,OAAS,GAOvEkE,EAAEkF,MAAQ,WACN,OAAQnK,KAAKa,GAOjBoE,EAAEsG,WAAatG,EAAEuG,MAAQ,WACrB,MAAOxL,MAAKa,EAAI,GAOpBoE,EAAEwG,OAAS,WACP,QAASzL,KAAKP,GAAkB,GAAbO,KAAKP,EAAE,IAQ9BwF,EAAEyG,SAAWzG,EAAEmC,GAAK,SAAWlF,EAAG1C,GAE9B,MADAY,GAAK,EACEqI,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,IAAQ,GAQpDyF,EAAE0G,kBAAoB1G,EAAE2G,IAAM,SAAW1J,EAAG1C,GAExC,MADAY,GAAK,EACqD,MAAjDZ,EAAIiJ,EAASzI,KAAM,GAAIV,GAAW4C,EAAG1C,MAAwB,IAANA,GAwBpEyF,EAAE4G,MAAQ5G,EAAE6G,IAAM,SAAW5J,EAAG1C,GAC5B,GAAIG,GAAGwE,EAAG4H,EAAGC,EACTjM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGrC,IAAKjD,GAAKnH,EAEN,MADA0C,GAAErB,GAAKrB,EACAO,EAAEkM,KAAK/J,EAGlB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO1H,IAAOC,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAWqK,EAAK5J,EAAI6J,IAGxE,KAAM3H,EAAG,KAAO0H,EAAG,GAGf,MAAOA,GAAG,IAAOzH,EAAErB,GAAKrB,EAAG0C,GAAM,GAAI5C,GAAW2C,EAAG,GAAKlC,EAGrC,GAAjBQ,GAAsB,EAAI,GASpC,GALA2L,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAaf,KAXKH,EAAW,EAAJrF,IACRA,GAAKA,EACLoF,EAAI9J,IAEJkK,EAAKD,EACLH,EAAIpC,GAGRoC,EAAEK,UAGI5M,EAAImH,EAAGnH,IAAKuM,EAAErK,KAAK,IACzBqK,EAAEK,cAMF,KAFAjI,GAAM6H,GAASrF,EAAI1E,EAAGlB,SAAavB,EAAImK,EAAG5I,SAAa4F,EAAInH,EAErDmH,EAAInH,EAAI,EAAO2E,EAAJ3E,EAAOA,IAEpB,GAAKyC,EAAGzC,IAAMmK,EAAGnK,GAAK,CAClBwM,EAAO/J,EAAGzC,GAAKmK,EAAGnK,EAClB,OAYZ,GANIwM,IAAMD,EAAI9J,EAAIA,EAAK0H,EAAIA,EAAKoC,EAAG7J,EAAErB,GAAKqB,EAAErB,GAE5CrB,GAAM2E,EAAIwF,EAAG5I,SAAapB,EAAIsC,EAAGlB,QAI5BvB,EAAI,EAAI,KAAQA,IAAKyC,EAAGtC,KAAO,GAIpC,IAHAH,EAAIwF,EAAO,EAGHb,EAAIwC,GAAK,CAEb,GAAK1E,IAAKkC,GAAKwF,EAAGxF,GAAK,CACnB,IAAMxE,EAAIwE,EAAGxE,IAAMsC,IAAKtC,GAAIsC,EAAGtC,GAAKH,KAClCyC,EAAGtC,GACLsC,EAAGkC,IAAMa,EAGb/C,EAAGkC,IAAMwF,EAAGxF,GAIhB,KAAiB,GAATlC,EAAG,GAASA,EAAG8F,UAAWoE,GAGlC,MAAMlK,GAAG,GAWFiC,EAAWhC,EAAGD,EAAIkK,IAPrBjK,EAAErB,EAAqB,GAAjBN,EAAqB,GAAK,EAChC2B,EAAEzC,GAAMyC,EAAExC,EAAI,GACPwC,IA8Bf+C,EAAEoH,OAASpH,EAAEqH,IAAM,SAAWpK,EAAG1C,GAC7B,GAAIyJ,GAAGpI,EACHd,EAAIC,IAMR,OAJAI,GAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAGhBO,EAAEN,IAAMyC,EAAErB,GAAKqB,EAAEzC,IAAMyC,EAAEzC,EAAE,GACtB,GAAIH,GAAUsK,MAGZ1H,EAAEzC,GAAKM,EAAEN,IAAMM,EAAEN,EAAE,GACrB,GAAIH,GAAUS,IAGL,GAAfuF,GAIDzE,EAAIqB,EAAErB,EACNqB,EAAErB,EAAI,EACNoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAG,GAClBA,EAAErB,EAAIA,EACNoI,EAAEpI,GAAKA,GAEPoI,EAAIrG,EAAK7C,EAAGmC,EAAG,EAAGoD,GAGfvF,EAAE8L,MAAO5C,EAAEsD,MAAMrK,MAQ5B+C,EAAEuH,QAAUvH,EAAEwH,IAAM,WAChB,GAAI1M,GAAI,GAAIT,GAAUU,KAEtB,OADAD,GAAEc,GAAKd,EAAEc,GAAK,KACPd,GAwBXkF,EAAEgH,KAAOhH,EAAEyH,IAAM,SAAWxK,EAAG1C,GAC3B,GAAIuM,GACAhM,EAAIC,KACJ2G,EAAI5G,EAAEc,CAOV,IALAT,EAAK,GACL8B,EAAI,GAAI5C,GAAW4C,EAAG1C,GACtBA,EAAI0C,EAAErB,GAGA8F,IAAMnH,EAAI,MAAO,IAAIF,GAAUsK,IAGpC,IAAKjD,GAAKnH,EAEP,MADA0C,GAAErB,GAAKrB,EACAO,EAAE8L,MAAM3J,EAGnB,IAAIgK,GAAKnM,EAAEL,EAAI+B,EACX0K,EAAKjK,EAAExC,EAAI+B,EACXQ,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,CAEX,KAAMyM,IAAOC,EAAK,CAGd,IAAMlK,IAAO0H,EAAK,MAAO,IAAIrK,GAAWqH,EAAI,EAI5C,KAAM1E,EAAG,KAAO0H,EAAG,GAAK,MAAOA,GAAG,GAAKzH,EAAI,GAAI5C,GAAW2C,EAAG,GAAKlC,EAAQ,EAAJ4G,GAQ1E,GALAuF,EAAKrC,EAASqC,GACdC,EAAKtC,EAASsC,GACdlK,EAAKA,EAAGvB,QAGHiG,EAAIuF,EAAKC,EAAK,CAUf,IATKxF,EAAI,GACLwF,EAAKD,EACLH,EAAIpC,IAEJhD,GAAKA,EACLoF,EAAI9J,GAGR8J,EAAEK,UACMzF,IAAKoF,EAAErK,KAAK,IACpBqK,EAAEK,UAUN,IAPAzF,EAAI1E,EAAGlB,OACPvB,EAAImK,EAAG5I,OAGM,EAAR4F,EAAInH,IAAQuM,EAAIpC,EAAIA,EAAK1H,EAAIA,EAAK8J,EAAGvM,EAAImH,GAGxCA,EAAI,EAAGnH,GACTmH,GAAM1E,IAAKzC,GAAKyC,EAAGzC,GAAKmK,EAAGnK,GAAKmH,GAAM3B,EAAO,EAC7C/C,EAAGzC,IAAMwF,CAUb,OAPI2B,KACA1E,EAAGY,QAAQ8D,KACTwF,GAKCjI,EAAWhC,EAAGD,EAAIkK,IAS7BlH,EAAE0H,UAAY1H,EAAET,GAAK,SAAUoI,GAC3B,GAAIrN,GAAGkH,EACH1G,EAAIC,KACJP,EAAIM,EAAEN,CAQV,IALU,MAALmN,GAAaA,MAAQA,GAAW,IAANA,GAAiB,IAANA,IAClC3M,GAAQC,EAAO,GAAI,WAAagH,EAAS0F,GACxCA,KAAOA,IAAIA,EAAI,QAGlBnN,EAAI,MAAO,KAIjB,IAHAgH,EAAIhH,EAAEsB,OAAS,EACfxB,EAAIkH,EAAIhF,EAAW,EAEdgF,EAAIhH,EAAEgH,GAAK,CAGZ,KAAQA,EAAI,IAAM,EAAGA,GAAK,GAAIlH,KAG9B,IAAMkH,EAAIhH,EAAE,GAAIgH,GAAK,GAAIA,GAAK,GAAIlH,MAKtC,MAFKqN,IAAK7M,EAAEL,EAAI,EAAIH,IAAIA,EAAIQ,EAAEL,EAAI,GAE3BH,GAiBX0F,EAAE5E,MAAQ,SAAW8B,EAAIC,GACrB,GAAI7C,GAAI,GAAID,GAAUU,KAOtB,QALW,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACvC3G,EAAOd,IAAK4C,EAAKnC,KAAKN,EAAI,EAAS,MAAN0C,GAC1BjC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,GAG3ChB,GAgBX0F,EAAE8C,MAAQ,SAAUhG,GAChB,GAAIxC,GAAIS,IACR,OAAOG,GAAY4B,GAAI8K,EAAkBA,EAAkB,GAAI,YAG3DtN,EAAEgN,MAAO,KAAOtI,EAASlC,IACzB,GAAIzC,GAAWC,EAAEE,GAAKF,EAAEE,EAAE,MAAaoN,EAAL9K,GAAyBA,EAAI8K,GAC7DtN,EAAEsB,GAAU,EAAJkB,EAAQ,EAAI,EAAI,GACxBxC,IAeV0F,EAAE6H,WAAa7H,EAAE8H,KAAO,WACpB,GAAIrJ,GAAGnE,EAAGyC,EAAGgL,EAAKjB,EACdhM,EAAIC,KACJP,EAAIM,EAAEN,EACNoB,EAAId,EAAEc,EACNnB,EAAIK,EAAEL,EACNyC,EAAK7B,EAAiB,EACtB2M,EAAO,GAAI3N,GAAU,MAGzB,IAAW,IAANuB,IAAYpB,IAAMA,EAAE,GACrB,MAAO,IAAIH,IAAYuB,GAAS,EAAJA,KAAYpB,GAAKA,EAAE,IAAOmK,IAAMnK,EAAIM,EAAI,EAAI,EA8B5E,IA1BAc,EAAI4G,KAAKsF,MAAOhN,GAIN,GAALc,GAAUA,GAAK,EAAI,GACpBtB,EAAImD,EAAcjD,IACXF,EAAEwB,OAASrB,GAAM,GAAK,IAAIH,GAAK,KACtCsB,EAAI4G,KAAKsF,KAAKxN,GACdG,EAAImK,GAAYnK,EAAI,GAAM,IAAY,EAAJA,GAASA,EAAI,GAE1CmB,GAAK,EAAI,EACVtB,EAAI,KAAOG,GAEXH,EAAIsB,EAAEyC,gBACN/D,EAAIA,EAAEmB,MAAO,EAAGnB,EAAE6B,QAAQ,KAAO,GAAM1B,GAG3CsC,EAAI,GAAI1C,GAAUC,IAElByC,EAAI,GAAI1C,GAAWuB,EAAI,IAOtBmB,EAAEvC,EAAE,GAML,IALAC,EAAIsC,EAAEtC,EACNmB,EAAInB,EAAIyC,EACC,EAAJtB,IAAQA,EAAI,KAOb,GAHAkL,EAAI/J,EACJA,EAAIiL,EAAKV,MAAOR,EAAEE,KAAMrJ,EAAK7C,EAAGgM,EAAG5J,EAAI,KAElCO,EAAeqJ,EAAEtM,GAAMiB,MAAO,EAAGG,MAAUtB,EAC3CmD,EAAeV,EAAEvC,IAAMiB,MAAO,EAAGG,GAAM,CAWxC,GANKmB,EAAEtC,EAAIA,KAAMmB,EACjBtB,EAAIA,EAAEmB,MAAOG,EAAI,EAAGA,EAAI,GAKd,QAALtB,IAAgByN,GAAY,QAALzN,GAgBrB,IAIIA,KAAOA,EAAEmB,MAAM,IAAqB,KAAfnB,EAAEuD,OAAO,MAGjCzC,EAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAG,GACpCoD,GAAK1B,EAAEuK,MAAMvK,GAAG+I,GAAGhL,GAGvB,OAvBA,IAAMiN,IACF3M,EAAO0L,EAAGA,EAAErM,EAAIY,EAAiB,EAAG,GAE/ByL,EAAEQ,MAAMR,GAAGhB,GAAGhL,IAAK,CACpBiC,EAAI+J,CACJ,OAIR5J,GAAM,EACNtB,GAAK,EACLmM,EAAM,EAkBtB,MAAO3M,GAAO2B,EAAGA,EAAEtC,EAAIY,EAAiB,EAAGC,EAAemD,IAwB9DuB,EAAEsH,MAAQtH,EAAEiI,IAAM,SAAWhL,EAAG1C,GAC5B,GAAIC,GAAGC,EAAGC,EAAGwE,EAAGpC,EAAG2B,EAAGyJ,EAAKhF,EAAKC,EAAKgF,EAAKC,EAAKC,EAAKC,EAChDtF,EAAMuF,EACNzN,EAAIC,KACJiC,EAAKlC,EAAEN,EACPkK,GAAOvJ,EAAK,GAAI8B,EAAI,GAAI5C,GAAW4C,EAAG1C,IAAMC,CAGhD,MAAMwC,GAAO0H,GAAO1H,EAAG,IAAO0H,EAAG,IAmB7B,OAhBM5J,EAAEc,IAAMqB,EAAErB,GAAKoB,IAAOA,EAAG,KAAO0H,GAAMA,IAAOA,EAAG,KAAO1H,EACzDC,EAAEzC,EAAIyC,EAAExC,EAAIwC,EAAErB,EAAI,MAElBqB,EAAErB,GAAKd,EAAEc,EAGHoB,GAAO0H,GAKTzH,EAAEzC,GAAK,GACPyC,EAAExC,EAAI,GALNwC,EAAEzC,EAAIyC,EAAExC,EAAI,MASbwC,CAYX,KATAxC,EAAImK,EAAU9J,EAAEL,EAAI+B,GAAaoI,EAAU3H,EAAExC,EAAI+B,GACjDS,EAAErB,GAAKd,EAAEc,EACTsM,EAAMlL,EAAGlB,OACTqM,EAAMzD,EAAG5I,OAGEqM,EAAND,IAAYI,EAAKtL,EAAIA,EAAK0H,EAAIA,EAAK4D,EAAI5N,EAAIwN,EAAKA,EAAMC,EAAKA,EAAMzN,GAGhEA,EAAIwN,EAAMC,EAAKG,KAAS5N,IAAK4N,EAAG7L,KAAK,IAK3C,IAHAuG,EAAOjD,EACPwI,EAAWjF,EAEL5I,EAAIyN,IAAOzN,GAAK,GAAK,CAKvB,IAJAF,EAAI,EACJ4N,EAAM1D,EAAGhK,GAAK6N,EACdF,EAAM3D,EAAGhK,GAAK6N,EAAW,EAEnBzL,EAAIoL,EAAKhJ,EAAIxE,EAAIoC,EAAGoC,EAAIxE,GAC1BwI,EAAMlG,IAAKF,GAAKyL,EAChBpF,EAAMnG,EAAGF,GAAKyL,EAAW,EACzB9J,EAAI4J,EAAMnF,EAAMC,EAAMiF,EACtBlF,EAAMkF,EAAMlF,EAAUzE,EAAI8J,EAAaA,EAAaD,EAAGpJ,GAAK1E,EAC5DA,GAAM0I,EAAMF,EAAO,IAAQvE,EAAI8J,EAAW,GAAMF,EAAMlF,EACtDmF,EAAGpJ,KAAOgE,EAAMF,CAGpBsF,GAAGpJ,GAAK1E,EASZ,MANIA,KACEC,EAEF6N,EAAGxF,QAGA7D,EAAWhC,EAAGqL,EAAI7N,IAgB7BuF,EAAEwI,SAAW,SAAWjJ,EAAIpC,GACxB,GAAI7C,GAAI,GAAID,GAAUU,KAGtB,OAFAwE,GAAW,MAANA,GAAerE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aAA4B,EAALxC,EAAP,KAChEpC,EAAW,MAANA,GAAejC,EAAYiC,EAAI,EAAG,EAAG,GAAIe,GAAsC,EAALf,EAAhB7B,EACxDiE,EAAKnE,EAAOd,EAAGiF,EAAIpC,GAAO7C,GAgBrC0F,EAAE3B,cAAgB,SAAWnB,EAAIC,GAC7B,MAAOW,GAAQ/C,KACP,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MAAS7E,EAAK,EAAI,KAAMC,EAAI,KAmBxE6C,EAAEyI,QAAU,SAAWvL,EAAIC,GACvB,MAAOW,GAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACrD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,KA0BtC6C,EAAE0I,SAAW,SAAWxL,EAAIC,GACxB,GAAItC,GAAMiD,EAAQ/C,KAAY,MAANmC,GAAchC,EAAYgC,EAAI,EAAG6E,EAAK,MACxD7E,EAAKnC,KAAKN,EAAI,EAAI,KAAM0C,EAAI,GAElC,IAAKpC,KAAKP,EAAI,CACV,GAAIE,GACAiO,EAAM9N,EAAI+N,MAAM,KAChBC,GAAMvI,EAAOG,UACbqI,GAAMxI,EAAOI,mBACbF,EAAiBF,EAAOE,eACxBuI,EAAUJ,EAAI,GACdK,EAAeL,EAAI,GACnBpC,EAAQxL,KAAKa,EAAI,EACjBqN,EAAY1C,EAAQwC,EAAQtN,MAAM,GAAKsN,EACvCnO,EAAMqO,EAAUnN,MAIpB,IAFIgN,IAAIpO,EAAImO,EAAIA,EAAKC,EAAIA,EAAKpO,EAAGE,GAAOF,GAEnCmO,EAAK,GAAKjO,EAAM,EAAI,CAIrB,IAHAF,EAAIE,EAAMiO,GAAMA,EAChBE,EAAUE,EAAUC,OAAQ,EAAGxO,GAEnBE,EAAJF,EAASA,GAAKmO,EAClBE,GAAWvI,EAAiByI,EAAUC,OAAQxO,EAAGmO,EAGhDC,GAAK,IAAIC,GAAWvI,EAAiByI,EAAUxN,MAAMf,IACtD6L,IAAOwC,EAAU,IAAMA,GAG/BlO,EAAMmO,EACFD,EAAUzI,EAAOC,mBAAuBuI,GAAMxI,EAAOM,mBACnDoI,EAAanN,QAAS,GAAIN,QAAQ,OAASuN,EAAK,OAAQ,KACxD,KAAOxI,EAAOK,wBACdqI,GACFD,EAGR,MAAOlO,IAgBXmF,EAAEmJ,WAAa,SAAUC,GACrB,GAAIT,GAAKU,EAAIC,EAAI7O,EAAG8O,EAAKjP,EAAGkP,EAAIxF,EAAGpI,EAC/BkB,EAAI9B,EACJF,EAAIC,KACJiC,EAAKlC,EAAEN,EACPqC,EAAI,GAAIxC,GAAU6F,GAClBuJ,EAAKJ,EAAK,GAAIhP,GAAU6F,GACxBwJ,EAAKF,EAAK,GAAInP,GAAU6F,EAoB5B,IAlBW,MAANkJ,IACDpO,GAAS,EACTV,EAAI,GAAID,GAAU+O,GAClBpO,EAAS8B,KAEDA,EAAIxC,EAAE+L,UAAa/L,EAAE6H,GAAGjC,MAExBlF,GACAC,EAAO,GACL,oBAAuB6B,EAAI,eAAiB,kBAAoBsM,GAKtEA,GAAMtM,GAAKxC,EAAEE,GAAKY,EAAOd,EAAGA,EAAEG,EAAI,EAAG,GAAIyL,IAAIhG,GAAO5F,EAAI,QAI1D0C,EAAK,MAAOlC,GAAEqD,UAgBpB,KAfAvC,EAAI6B,EAAcT,GAIlBvC,EAAIoC,EAAEpC,EAAImB,EAAEE,OAAShB,EAAEL,EAAI,EAC3BoC,EAAErC,EAAE,GAAKmF,GAAY4J,EAAM9O,EAAI+B,GAAa,EAAIA,EAAW+M,EAAMA,GACjEH,GAAMA,GAAM9O,EAAEqJ,IAAI9G,GAAK,EAAMpC,EAAI,EAAIoC,EAAI4M,EAAOnP,EAEhDiP,EAAMjN,EACNA,EAAU,EAAI,EACdhC,EAAI,GAAID,GAAUuB,GAGlB4N,EAAGhP,EAAE,GAAK,EAGNwJ,EAAIrG,EAAKrD,EAAGuC,EAAG,EAAG,GAClByM,EAAKD,EAAGrC,KAAMhD,EAAEsD,MAAMoC,IACH,GAAdJ,EAAG3F,IAAIyF,IACZC,EAAKK,EACLA,EAAKJ,EACLG,EAAKD,EAAGxC,KAAMhD,EAAEsD,MAAOgC,EAAKG,IAC5BD,EAAKF,EACLzM,EAAIvC,EAAEsM,MAAO5C,EAAEsD,MAAOgC,EAAKzM,IAC3BvC,EAAIgP,CAgBR,OAbAA,GAAK3L,EAAKyL,EAAGxC,MAAMyC,GAAKK,EAAI,EAAG,GAC/BF,EAAKA,EAAGxC,KAAMsC,EAAGhC,MAAMmC,IACvBJ,EAAKA,EAAGrC,KAAMsC,EAAGhC,MAAMoC,IACvBF,EAAG5N,EAAI6N,EAAG7N,EAAId,EAAEc,EAChBnB,GAAK,EAGLkO,EAAMhL,EAAK8L,EAAIC,EAAIjP,EAAGa,GAAgBsL,MAAM9L,GAAGwK,MAAM3B,IAC/ChG,EAAK6L,EAAIH,EAAI5O,EAAGa,GAAgBsL,MAAM9L,GAAGwK,OAAU,GAC7CmE,EAAGtL,WAAYuL,EAAGvL,aAClBqL,EAAGrL,WAAYkL,EAAGlL,YAE9B7B,EAAUiN,EACHZ,GAOX3I,EAAE2J,SAAW,WACT,GAAI7O,GAAIC,IAGR,QAAQD,IAAOA,EAAEc,EAAU,EAANd,EAAEc,EAAQ+I,MAenC3E,EAAE4J,QAAU5J,EAAE1C,IAAM,SAAUhD,GAC1B,GAAIwC,GAAGG,EACHvC,EAAIoF,EAAe,EAAJxF,GAASA,GAAKA,GAC7BQ,EAAIC,IAGR,KAAMG,EAAYZ,GAAIsN,EAAkBA,EAAkB,GAAI,eACzDzB,SAAS7L,IAAMI,EAAIkN,IAAsBtN,GAAK,IAC/CuP,WAAWvP,IAAMA,KAAQA,EAAIqK,MAC7B,MAAO,IAAItK,GAAWmI,KAAKlF,KAAMxC,EAAGR,GASxC,KAHAwC,EAAIO,EAAgBwC,EAAUxC,EAAgBb,EAAW,GAAM,EAC/DS,EAAI,GAAI5C,GAAU6F,KAEN,CAER,GAAKxF,EAAI,EAAI,CAET,GADAuC,EAAIA,EAAEqK,MAAMxM,IACNmC,EAAEzC,EAAI,KACPsC,IAAKG,EAAEzC,EAAEsB,OAASgB,IAAIG,EAAEzC,EAAEsB,OAASgB,GAI5C,GADApC,EAAIoF,EAAWpF,EAAI,IACbA,EAAI,KAEVI,GAAIA,EAAEwM,MAAMxM,GACPgC,GAAKhC,EAAEN,GAAKM,EAAEN,EAAEsB,OAASgB,IAAIhC,EAAEN,EAAEsB,OAASgB,GAInD,MADS,GAAJxC,IAAQ2C,EAAIiD,EAAIvC,IAAIV,IAClBH,EAAI1B,EAAO6B,EAAGI,EAAe/B,GAAkB2B,GAkB1D+C,EAAE8J,YAAc,SAAWvK,EAAIpC,GAC3B,MAAOW,GAAQ/C,KAAY,MAANwE,GAAcrE,EAAYqE,EAAI,EAAGwC,EAAK,GAAI,aACtD,EAALxC,EAAS,KAAMpC,EAAI,KAgB3B6C,EAAE7B,SAAW,SAAU5D,GACnB,GAAIM,GACAP,EAAIS,KACJa,EAAItB,EAAEsB,EACNnB,EAAIH,EAAEG,CAyBV,OAtBW,QAANA,EAEGmB,GACAf,EAAM,WACG,EAAJe,IAAQf,EAAM,IAAMA,IAEzBA,EAAM,OAGVA,EAAM4C,EAAenD,EAAEE,GAOnBK,EALM,MAALN,GAAcW,EAAYX,EAAG,EAAG,GAAI,GAAI,QAKnC0B,EAAauB,EAAc3C,EAAKJ,GAAS,EAAJF,EAAO,GAAIqB,GAJ3CwC,GAAL3D,GAAmBA,GAAK0F,EAC1B9B,EAAexD,EAAKJ,GACpB+C,EAAc3C,EAAKJ,GAKlB,EAAJmB,GAAStB,EAAEE,EAAE,KAAKK,EAAM,IAAMA,IAGhCA,GAQXmF,EAAE+J,UAAY/J,EAAEgK,MAAQ,WACpB,MAAO5O,GAAO,GAAIf,GAAUU,MAAOA,KAAKN,EAAI,EAAG,IAQnDuF,EAAEiK,QAAUjK,EAAEkK,OAAS,WACnB,MAAOnP,MAAKoD,YAcE,MAAb/D,GAAoBC,EAAUkH,OAAOnH,GAEnCC,EAOX,QAASuK,GAAStK,GACd,GAAII,GAAQ,EAAJJ,CACR,OAAOA,GAAI,GAAKA,IAAMI,EAAIA,EAAIA,EAAI,EAKtC,QAAS+C,GAAciE,GAMnB,IALA,GAAI9F,GAAG+L,EACHjN,EAAI,EACJwE,EAAIwC,EAAE5F,OACNiB,EAAI2E,EAAE,GAAK,GAEHxC,EAAJxE,GAAS,CAGb,IAFAkB,EAAI8F,EAAEhH,KAAO,GACbiN,EAAInL,EAAWZ,EAAEE,OACT6L,IAAK/L,EAAI,IAAMA,GACvBmB,GAAKnB,EAIT,IAAMsD,EAAInC,EAAEjB,OAA8B,KAAtBiB,EAAEf,aAAakD,KACnC,MAAOnC,GAAEtB,MAAO,EAAGyD,EAAI,GAAK,GAKhC,QAASsE,GAAS1I,EAAGmC,GACjB,GAAIyE,GAAGnH,EACHyC,EAAKlC,EAAEN,EACPkK,EAAKzH,EAAEzC,EACPE,EAAII,EAAEc,EACNsD,EAAIjC,EAAErB,EACNkB,EAAIhC,EAAEL,EACN0P,EAAIlN,EAAExC,CAGV,KAAMC,IAAMwE,EAAI,MAAO,KAMvB,IAJAwC,EAAI1E,IAAOA,EAAG,GACdzC,EAAImK,IAAOA,EAAG,GAGThD,GAAKnH,EAAI,MAAOmH,GAAInH,EAAI,GAAK2E,EAAIxE,CAGtC,IAAKA,GAAKwE,EAAI,MAAOxE,EAMrB,IAJAgH,EAAQ,EAAJhH,EACJH,EAAIuC,GAAKqN,GAGHnN,IAAO0H,EAAK,MAAOnK,GAAI,GAAKyC,EAAK0E,EAAI,EAAI,EAG/C,KAAMnH,EAAI,MAAOuC,GAAIqN,EAAIzI,EAAI,EAAI,EAKjC,KAHAxC,GAAMpC,EAAIE,EAAGlB,SAAaqO,EAAIzF,EAAG5I,QAAWgB,EAAIqN,EAG1CzP,EAAI,EAAOwE,EAAJxE,EAAOA,IAAM,GAAKsC,EAAGtC,IAAMgK,EAAGhK,GAAK,MAAOsC,GAAGtC,GAAKgK,EAAGhK,GAAKgH,EAAI,EAAI,EAG/E,OAAO5E,IAAKqN,EAAI,EAAIrN,EAAIqN,EAAIzI,EAAI,EAAI,GASxC,QAASM,GAAsB1H,EAAGuE,EAAKC,GACnC,OAASxE,EAAI0E,EAAS1E,KAAQuE,GAAYC,GAALxE,EAIzC,QAASoE,GAAQ0L,GACb,MAA8C,kBAAvCC,OAAOpK,UAAU9B,SAASQ,KAAKyL,GAS1C,QAAS7M,GAAW1C,EAAK8B,EAAQD,GAO7B,IANA,GAAIwC,GAEAoL,EADA3B,GAAO,GAEPjO,EAAI,EACJE,EAAMC,EAAIiB,OAEFlB,EAAJF,GAAW,CACf,IAAM4P,EAAO3B,EAAI7M,OAAQwO,IAAQ3B,EAAI2B,IAAS3N,GAG9C,IAFAgM,EAAKzJ,EAAI,IAAO1D,EAASW,QAAStB,EAAIgD,OAAQnD,MAEtCwE,EAAIyJ,EAAI7M,OAAQoD,IAEfyJ,EAAIzJ,GAAKxC,EAAU,IACD,MAAdiM,EAAIzJ,EAAI,KAAayJ,EAAIzJ,EAAI,GAAK,GACvCyJ,EAAIzJ,EAAI,IAAMyJ,EAAIzJ,GAAKxC,EAAU,EACjCiM,EAAIzJ,IAAMxC,GAKtB,MAAOiM,GAAIxB,UAIf,QAAS9I,GAAexD,EAAKJ,GACzB,OAASI,EAAIiB,OAAS,EAAIjB,EAAIgD,OAAO,GAAK,IAAMhD,EAAIY,MAAM,GAAKZ,IACvD,EAAJJ,EAAQ,IAAM,MAASA,EAI/B,QAAS+C,GAAc3C,EAAKJ,GACxB,GAAIG,GAAK+M,CAGT,IAAS,EAAJlN,EAAQ,CAGT,IAAMkN,EAAI,OAAQlN,EAAGkN,GAAK,KAC1B9M,EAAM8M,EAAI9M,MAOV,IAHAD,EAAMC,EAAIiB,SAGHrB,EAAIG,EAAM,CACb,IAAM+M,EAAI,IAAKlN,GAAKG,IAAOH,EAAGkN,GAAK,KACnC9M,GAAO8M,MACK/M,GAAJH,IACRI,EAAMA,EAAIY,MAAO,EAAGhB,GAAM,IAAMI,EAAIY,MAAMhB,GAIlD,OAAOI,GAIX,QAASmE,GAAS1E,GAEd,MADAA,GAAIuP,WAAWvP,GACJ,EAAJA,EAAQuF,EAASvF,GAAKwF,EAAUxF,GAtlF3C,GAAID,GAAW6H,EAAQvG,EACnBO,EAAY,uCACZ2D,EAAW2C,KAAK+C,KAChBzF,EAAY0C,KAAKuD,MACjB9D,EAAU,iCACV/D,EAAe,gBACfnC,EAAgB,kDAChBP,EAAW,mEACXuE,EAAO,KACPvD,EAAW,GACXoL,EAAmB,iBAEnBjI,GAAY,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAC7E2D,EAAY,IAOZvB,EAAM,GA4kFV,IAHA1H,EAAYF,IAGU,kBAAVoQ,SAAwBA,OAAOC,IACvCD,OAAQ,WAAc,MAAOlQ,SAG1B,IAAsB,mBAAVoQ,SAAyBA,OAAOC,SAE/C,GADAD,OAAOC,QAAUrQ,GACX6H,EAAS,IAAMA,EAASyI,QAAQ,UAAa,MAAOlQ,SAI1DP,GAAOG,UAAYA,GAExBU"} \ No newline at end of file diff --git a/node_modules/web3/node_modules/bignumber.js/bignumber.min.js b/node_modules/web3/node_modules/bignumber.js/bignumber.min.js deleted file mode 100644 index 70a1216..0000000 --- a/node_modules/web3/node_modules/bignumber.js/bignumber.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ -!function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,k);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+O.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,b,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&L(M,b,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=k;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=O.charAt(g[d++]));e=l(e,u)}return e}function _(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:k,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&B>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||B>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function x(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[n%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==N&&(a[0]=1));break}if(a[l]+=s,a[l]!=N)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(k=0|e),r[n]=k,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(B=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(B=-($=0|(0>e?-e:e)))),r[n]=[B,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?F:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h||"object"!=typeof h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return x(arguments,T.lt)},a.min=function(){return x(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,b,O,S,R,A,E,D,_,x,F=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*F:F/0:0/0);for(v=new a(F),b=v.c=[],c=i.e-o.e,F=u+c+1,f||(f=N,c=t(i.e/y)-t(o.e/y),F=F/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>F)b.push(1),g=!0;else{for(E=I.length,_=L.length,h=0,F+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),_=L.length,E=I.length),A=_,O=I.slice(0,_),S=O.length;_>S;O[S++]=0);x=L.slice(),x.unshift(0),D=L[0],L[1]>=f/2&&D++;do{if(p=0,l=n(L,O,_,S),0>l){if(R=O[0],_!=S&&(R=R*f+(O[1]||0)),p=m(R/D),p>1)for(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=O.length;1==n(d,O,w,S);)p--,r(d,w>_?x:L,w,f),w=d.length,l=1;else 0==p&&(l=p=1),d=L.slice(),w=d.length;if(S>w&&d.unshift(0),r(O,d,S,f),S=O.length,-1==l)for(;n(L,O,_,S)<1;)p++,r(O,S>_?x:L,S,f),S=O.length}else 0===l&&(p++,O=[0]);b[h++]=p,O[0]?O[S++]=I[A]||0:(O=[I[A]],S=1)}while((A++=10;F/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,k)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(0/0);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:0/0);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==k?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=N-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/N|0,f[n]%=N;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:k),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?0/0:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=O,O=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=N,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=O[--s]%v,h=O[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:k,e?U(t,e,n):t},T.toExponential=function(e,n){return _(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return _(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=_(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,k).minus(g).abs().cmp(C(f,t,o,k).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){var e=this;return+e||(e.s?0*e.s:0/0)},T.toPower=T.pow=function(e){var n,t,r=m(0>e?-e:+e),i=this;if(!H(e,-S,S,23,"exponent")&&(!isFinite(e)||r>S&&(e/=0)||parseFloat(e)!=e&&!(e=0/0)))return new a(Math.pow(+i,e));for(n=J?d(J/y+2):0,t=new a(q);;){if(r%2){if(t=t.times(i),!t.c)break;n&&t.c.length>n&&(t.c.length=n)}if(r=m(r/2),!r)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>e&&(t=q.div(t)),n?U(t,J,k):t},T.toPrecision=function(e,n){return _(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):B>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=O.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",b="number type has more than 15 significant digits",O="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",N=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if(a=n(),"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e.BigNumber=a}(this); -//# sourceMappingURL=bignumber.js.map \ No newline at end of file diff --git a/node_modules/web3/node_modules/bignumber.js/bower.json b/node_modules/web3/node_modules/bignumber.js/bower.json deleted file mode 100644 index 8aadebb..0000000 --- a/node_modules/web3/node_modules/bignumber.js/bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "bignumber.js", - "main": "bignumber.js", - "version": "2.0.7", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "authors": [ - "Michael Mclaughlin " - ], - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "ignore": [ - ".*", - "*.json", - "test" - ] -} - diff --git a/node_modules/web3/node_modules/bignumber.js/doc/API.html b/node_modules/web3/node_modules/bignumber.js/doc/API.html deleted file mode 100644 index e0b173f..0000000 --- a/node_modules/web3/node_modules/bignumber.js/doc/API.html +++ /dev/null @@ -1,2160 +0,0 @@ - - - - - - -bignumber.js API - - - - - - -
          - -

          bignumber.js

          - -

          A JavaScript library for arbitrary-precision arithmetic.

          -

          Hosted on GitHub.

          - -

          API

          - -

          - See the README on GitHub for a - quick-start introduction. -

          -

          - In all examples below, var and semicolons are not shown, and if a commented-out - value is in quotes it means toString has been called on the preceding expression. -

          - - -

          CONSTRUCTOR

          - -
          - BigNumberBigNumber(value [, base]) ⇒ BigNumber -
          -
          -
          value
          -
          - number|string|BigNumber: see RANGE for - range. -
          -
          - A numeric value. -
          -
          - Legitimate values include ±0, ±Infinity and - NaN. -
          -
          - Values of type number with more than 15 significant digits are - considered invalid (if ERRORS is true) as calling - toString or valueOf on - such numbers may not result in the intended value. -
          console.log( 823456789123456.3 );    // 823456789123456.2
          -
          -
          - There is no limit to the number of digits of a value of type string (other than - that of JavaScript's maximum array size). -
          -
          - Decimal string values may be in exponential, as well as normal (fixed-point) notation. - Non-decimal values must be in normal notation. -
          -
          - String values in hexadecimal literal form, e.g. '0xff', are valid, as are - string values with the octal and binary prefixs '0o' and '0b'. - String values in octal literal form without the prefix will be interpreted as - decimals, e.g. '011' is interpreted as 11, not 9. -
          -
          Values in any base may have fraction digits.
          -
          - For bases from 10 to 36, lower and/or upper case letters can be - used to represent values from 10 to 35. -
          -
          - For bases above 36, a-z represents values from 10 to - 35, A-Z from 36 to 61, and - $ and _ represent 62 and 63 respectively - (this can be changed by editing the ALPHABET variable near the top of the - source file). -
          -
          -
          -
          base
          -
          - number: integer, 2 to 64 inclusive -
          -
          The base of value.
          -
          - If base is omitted, or is null or undefined, base - 10 is assumed. -
          -
          -
          -

          Returns a new instance of a BigNumber object.

          -

          - If a base is specified, the value is rounded according to - the current DECIMAL_PLACES and - ROUNDING_MODE configuration. -

          -

          - See Errors for the treatment of an invalid value or - base. -

          -
          -x = new BigNumber(9)                       // '9'
          -y = new BigNumber(x)                       // '9'
          -
          -// 'new' is optional if ERRORS is false
          -BigNumber(435.345)                         // '435.345'
          -
          -new BigNumber('5032485723458348569331745.33434346346912144534543')
          -new BigNumber('4.321e+4')                  // '43210'
          -new BigNumber('-735.0918e-430')            // '-7.350918e-428'
          -new BigNumber(Infinity)                    // 'Infinity'
          -new BigNumber(NaN)                         // 'NaN'
          -new BigNumber('.5')                        // '0.5'
          -new BigNumber('+2')                        // '2'
          -new BigNumber(-10110100.1, 2)              // '-180.5'
          -new BigNumber(-0b10110100.1)               // '-180.5'
          -new BigNumber('123412421.234324', 5)       // '607236.557696'
          -new BigNumber('ff.8', 16)                  // '255.5'
          -new BigNumber('0xff.8')                    // '255.5'
          -

          - The following throws 'not a base 2 number' if - ERRORS is true, otherwise it returns a BigNumber with value - NaN. -

          -
          new BigNumber(9, 2)
          -

          - The following throws 'number type has more than 15 significant digits' if - errors is true, otherwise it returns a BigNumber with value - 96517860459076820. -

          -
          new BigNumber(96517860459076817.4395)
          -

          - The following throws 'not a number' if ERRORS - is true, otherwise it returns a BigNumber with value NaN. -

          -
          new BigNumber('blurgh')
          -

          - A value is only rounded by the constructor if a base is specified. -

          -
          BigNumber.config({ DECIMAL_PLACES: 5 })
          -new BigNumber(1.23456789)                  // '1.23456789'
          -new BigNumber(1.23456789, 10)              // '1.23457'
          - - - -

          Methods

          -

          The static methods of a BigNumber constructor.

          - - - - -
          - another.another([obj]) ⇒ BigNumber constructor -
          -

          obj: object

          -

          - Returns a new independent BigNumber constructor with configuration as described by - obj (see config), or with the default - configuration if obj is null or undefined. -

          -
          BigNumber.config({ DECIMAL_PLACES: 5 })
          -BN = BigNumber.another({ DECIMAL_PLACES: 9 })
          -
          -x = new BigNumber(1)
          -y = new BN(1)
          -
          -x.div(3)                        // 0.33333
          -y.div(3)                        // 0.333333333
          -
          -// BN = BigNumber.another({ DECIMAL_PLACES: 9 }) is equivalent to:
          -BN = BigNumber.another()
          -BN.config({ DECIMAL_PLACES: 9 })
          - - - -
          configconfig([obj]) ⇒ object
          -

          - obj: object: an object that contains some or all of the following - properties. -

          -

          Configures the 'global' settings for this particular BigNumber constructor.

          -

          Note: the configuration can also be supplied as an argument list, see below.

          -
          -
          DECIMAL_PLACES
          -
          - number: integer, 0 to 1e+9 inclusive
          - Default value: 20 -
          -
          - The maximum number of decimal places of the results of operations involving - division, i.e. division, square root and base conversion operations, and power - operations with negative exponents.
          -
          -
          -
          BigNumber.config({ DECIMAL_PLACES: 5 })
          -BigNumber.config(5)    // equivalent
          -
          - - - -
          ROUNDING_MODE
          -
          - number: integer, 0 to 8 inclusive
          - Default value: 4 (ROUND_HALF_UP) -
          -
          - The rounding mode used in the above operations and the default rounding mode of - round, - toExponential, - toFixed, - toFormat and - toPrecision. -
          -
          The modes are available as enumerated properties of the BigNumber constructor.
          -
          -
          BigNumber.config({ ROUNDING_MODE: 0 })
          -BigNumber.config(null, BigNumber.ROUND_UP)    // equivalent
          -
          - - - -
          EXPONENTIAL_AT
          -
          - number: integer, magnitude 0 to 1e+9 inclusive, or -
          - number[]: [ integer -1e+9 to 0 inclusive, integer - 0 to 1e+9 inclusive ]
          - Default value: [-7, 20] -
          -
          - The exponent value(s) at which toString returns exponential notation. -
          -
          - If a single number is assigned, the value is the exponent magnitude.
          - If an array of two numbers is assigned then the first number is the negative exponent - value at and beneath which exponential notation is used, and the second number is the - positive exponent value at and above which the same. -
          -
          - For example, to emulate JavaScript numbers in terms of the exponent values at which they - begin to use exponential notation, use [-7, 20]. -
          -
          -
          BigNumber.config({ EXPONENTIAL_AT: 2 })
          -new BigNumber(12.3)         // '12.3'        e is only 1
          -new BigNumber(123)          // '1.23e+2'
          -new BigNumber(0.123)        // '0.123'       e is only -1
          -new BigNumber(0.0123)       // '1.23e-2'
          -
          -BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
          -new BigNumber(123456789)    // '123456789'   e is only 8
          -new BigNumber(0.000000123)  // '1.23e-7'
          -
          -// Almost never return exponential notation:
          -BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
          -
          -// Always return exponential notation:
          -BigNumber.config({ EXPONENTIAL_AT: 0 })
          -
          -
          - Regardless of the value of EXPONENTIAL_AT, the toFixed method - will always return a value in normal notation and the toExponential method - will always return a value in exponential form. -
          -
          - Calling toString with a base argument, e.g. toString(10), will - also always return normal notation. -
          - - - -
          RANGE
          -
          - number: integer, magnitude 1 to 1e+9 inclusive, or -
          - number[]: [ integer -1e+9 to -1 inclusive, integer - 1 to 1e+9 inclusive ]
          - Default value: [-1e+9, 1e+9] -
          -
          - The exponent value(s) beyond which overflow to Infinity and underflow to - zero occurs. -
          -
          - If a single number is assigned, it is the maximum exponent magnitude: values wth a - positive exponent of greater magnitude become Infinity and those with a - negative exponent of greater magnitude become zero. -
          - If an array of two numbers is assigned then the first number is the negative exponent - limit and the second number is the positive exponent limit. -
          -
          - For example, to emulate JavaScript numbers in terms of the exponent values at which they - become zero and Infinity, use [-324, 308]. -
          -
          -
          BigNumber.config({ RANGE: 500 })
          -BigNumber.config().RANGE     // [ -500, 500 ]
          -new BigNumber('9.999e499')   // '9.999e+499'
          -new BigNumber('1e500')       // 'Infinity'
          -new BigNumber('1e-499')      // '1e-499'
          -new BigNumber('1e-500')      // '0'
          -
          -BigNumber.config({ RANGE: [-3, 4] })
          -new BigNumber(99999)         // '99999'      e is only 4
          -new BigNumber(100000)        // 'Infinity'   e is 5
          -new BigNumber(0.001)         // '0.01'       e is only -3
          -new BigNumber(0.0001)        // '0'          e is -4
          -
          -
          - The largest possible magnitude of a finite BigNumber is - 9.999...e+1000000000.
          - The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. -
          - - - -
          ERRORS
          -
          - boolean|number: true, false, 0 or - 1.
          - Default value: true -
          -
          - The value that determines whether BigNumber Errors are thrown.
          - If ERRORS is false, no errors will be thrown. -
          -
          See Errors.
          -
          BigNumber.config({ ERRORS: false })
          - - - -
          CRYPTO
          -
          - boolean|number: true, false, 0 or - 1.
          - Default value: false -
          -
          - The value that determines whether cryptographically-secure pseudo-random number - generation is used. -
          -
          - If CRYPTO is set to true then the - random method will generate random digits using - crypto.getRandomValues in browsers that support it, or - crypto.randomBytes if using a version of Node.js that supports it. -
          -
          - If neither function is supported by the host environment then attempting to set - CRYPTO to true will fail, and if ERRORS - is true an exception will be thrown. -
          -
          - If CRYPTO is false then the source of randomness used will be - Math.random (which is assumed to generate at least 30 bits of - randomness). -
          -
          See random.
          -
          -
          BigNumber.config({ CRYPTO: true })
          -BigNumber.config().CRYPTO       // true
          -BigNumber.random()              // 0.54340758610486147524
          -
          - - - -
          MODULO_MODE
          -
          - number: integer, 0 to 9 inclusive
          - Default value: 1 (ROUND_DOWN) -
          -
          The modulo mode used when calculating the modulus: a mod n.
          -
          - The quotient, q = a / n, is calculated according to the - ROUNDING_MODE that corresponds to the chosen - MODULO_MODE. -
          -
          The remainder, r, is calculated as: r = a - n * q.
          -
          - The modes that are most commonly used for the modulus/remainder operation are shown in - the following table. Although the other rounding modes can be used, they may not give - useful results. -
          -
          - - - - - - - - - - - - - - - - - - - - - - -
          PropertyValueDescription
          ROUND_UP0 - The remainder is positive if the dividend is negative, otherwise it is negative. -
          ROUND_DOWN1 - The remainder has the same sign as the dividend.
          - This uses 'truncating division' and matches the behaviour of JavaScript's - remainder operator %. -
          ROUND_FLOOR3 - The remainder has the same sign as the divisor.
          - This matches Python's % operator. -
          ROUND_HALF_EVEN6The IEEE 754 remainder function.
          EUCLID9 - The remainder is always positive. Euclidian division:
          - q = sign(n) * floor(a / abs(n)) -
          -
          -
          - The rounding/modulo modes are available as enumerated properties of the BigNumber - constructor. -
          -
          See modulo.
          -
          -
          BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
          -BigNumber.config({ MODULO_MODE: 9 })          // equivalent
          -
          - - - -
          POW_PRECISION
          -
          - number: integer, 0 to 1e+9 inclusive.
          - Default value: 100 -
          -
          - The maximum number of significant digits of the result of the power operation. -
          -
          If set to 0, the number of signifcant digits will not be limited.
          -
          See toPower.
          -
          BigNumber.config({ POW_PRECISION: 100 })
          - - - -
          FORMAT
          -
          object
          -
          - The FORMAT object configures the format of the string returned by the - toFormat method. -
          -
          - The example below shows the properties of the FORMAT object that are - recognised, and their default values. -
          -
          - Unlike the other configuration properties, the values of the properties of the - FORMAT object will not be checked for validity. The existing - FORMAT object will simply be replaced by the object that is passed in. - Note that all the properties shown below do not have to be included. -
          -
          See toFormat for examples of usage.
          -
          -
          -BigNumber.config({
          -    FORMAT: {
          -        // the decimal separator
          -        decimalSeparator: '.',
          -        // the grouping separator of the integer part
          -        groupSeparator: ',',
          -        // the primary grouping size of the integer part
          -        groupSize: 3,
          -        // the secondary grouping size of the integer part
          -        secondaryGroupSize: 0,
          -        // the grouping separator of the fraction part
          -        fractionGroupSeparator: ' ',
          -        // the grouping size of the fraction part
          -        fractionGroupSize: 0
          -    }
          -});
          -
          -
          -
          -

          Returns an object with the above properties and their current values.

          -

          - If the value to be assigned to any of the above properties is null or - undefined it is ignored. -

          -

          See Errors for the treatment of invalid values.

          -
          -BigNumber.config({
          -    DECIMAL_PLACES: 40,
          -    ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
          -    EXPONENTIAL_AT: [-10, 20],
          -    RANGE: [-500, 500],
          -    ERRORS: true,
          -    CRYPTO: true,
          -    MODULO_MODE: BigNumber.ROUND_FLOOR,
          -    POW_PRECISION: 80,
          -    FORMAT: {
          -        groupSize: 3,
          -        groupSeparator: ' ',
          -        decimalSeparator: ','
          -    }
          -});
          -
          -// Alternatively but equivalently (excluding FORMAT):
          -BigNumber.config( 40, 7, [-10, 20], 500, 1, 1, 3, 80 )
          -
          -obj = BigNumber.config();
          -obj.ERRORS       // true
          -obj.RANGE        // [-500, 500]
          - - - -
          - max.max([arg1 [, arg2, ...]]) ⇒ BigNumber -
          -

          - arg1, arg2, ...: number|string|BigNumber
          - See BigNumber for further parameter details. -

          -

          - Returns a BigNumber whose value is the maximum of arg1, - arg2,... . -

          -

          The argument to this method can also be an array of values.

          -

          The return value is always exact and unrounded.

          -
          x = new BigNumber('3257869345.0378653')
          -BigNumber.max(4e9, x, '123456789.9')          // '4000000000'
          -
          -arr = [12, '13', new BigNumber(14)]
          -BigNumber.max(arr)                            // '14'
          - - - -
          - min.min([arg1 [, arg2, ...]]) ⇒ BigNumber -
          -

          - arg1, arg2, ...: number|string|BigNumber
          - See BigNumber for further parameter details. -

          -

          - Returns a BigNumber whose value is the minimum of arg1, - arg2,... . -

          -

          The argument to this method can also be an array of values.

          -

          The return value is always exact and unrounded.

          -
          x = new BigNumber('3257869345.0378653')
          -BigNumber.min(4e9, x, '123456789.9')          // '123456789.9'
          -
          -arr = [2, new BigNumber(-14), '-15.9999', -12]
          -BigNumber.min(arr)                            // '-15.9999'
          - - - -
          - random.random([dp]) ⇒ BigNumber -
          -

          dp: number: integer, 0 to 1e+9 inclusive

          -

          - Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and - less than 1. -

          -

          - The return value will have dp decimal places (or less if trailing zeros are - produced).
          - If dp is omitted then the number of decimal places will default to the current - DECIMAL_PLACES setting. -

          -

          - Depending on the value of this BigNumber constructor's - CRYPTO setting and the support for the - crypto object in the host environment, the random digits of the return value are - generated by either Math.random (fastest), crypto.getRandomValues - (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). -

          -

          - If CRYPTO is true, i.e. one of the - crypto methods is to be used, the value of a returned BigNumber should be - cryptographically-secure and statistically indistinguishable from a random value. -

          -
          BigNumber.config({ DECIMAL_PLACES: 10 })
          -BigNumber.random()              // '0.4117936847'
          -BigNumber.random(20)            // '0.78193327636914089009'
          - - - -

          Properties

          -

          - The library's enumerated rounding modes are stored as properties of the constructor.
          - (They are not referenced internally by the library itself.) -

          -

          - Rounding modes 0 to 6 (inclusive) are the same as those of Java's - BigDecimal class. -

          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          PropertyValueDescription
          ROUND_UP0Rounds away from zero
          ROUND_DOWN1Rounds towards zero
          ROUND_CEIL2Rounds towards Infinity
          ROUND_FLOOR3Rounds towards -Infinity
          ROUND_HALF_UP4 - Rounds towards nearest neighbour.
          - If equidistant, rounds away from zero -
          ROUND_HALF_DOWN5 - Rounds towards nearest neighbour.
          - If equidistant, rounds towards zero -
          ROUND_HALF_EVEN6 - Rounds towards nearest neighbour.
          - If equidistant, rounds towards even neighbour -
          ROUND_HALF_CEIL7 - Rounds towards nearest neighbour.
          - If equidistant, rounds towards Infinity -
          ROUND_HALF_FLOOR8 - Rounds towards nearest neighbour.
          - If equidistant, rounds towards -Infinity -
          -
          -BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
          -BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
          - - -

          INSTANCE

          - -

          Methods

          -

          The methods inherited by a BigNumber instance from its constructor's prototype object.

          -

          A BigNumber is immutable in the sense that it is not changed by its methods.

          -

          - The treatment of ±0, ±Infinity and NaN is - consistent with how JavaScript treats these values. -

          -

          - Many method names have a shorter alias.
          - (Internally, the library always uses the shorter method names.) -

          - - - -
          absoluteValue.abs() ⇒ BigNumber
          -

          - Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of - this BigNumber. -

          -

          The return value is always exact and unrounded.

          -
          -x = new BigNumber(-0.8)
          -y = x.absoluteValue()           // '0.8'
          -z = y.abs()                     // '0.8'
          - - - -
          ceil.ceil() ⇒ BigNumber
          -

          - Returns a BigNumber whose value is the value of this BigNumber rounded to - a whole number in the direction of positive Infinity. -

          -
          -x = new BigNumber(1.3)
          -x.ceil()                        // '2'
          -y = new BigNumber(-1.8)
          -y.ceil()                        // '-1'
          - - - -
          comparedTo.cmp(n [, base]) ⇒ number
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          - - - - - - - - - - - - - - - - - - -
          Returns 
          1If the value of this BigNumber is greater than the value of n
          -1If the value of this BigNumber is less than the value of n
          0If this BigNumber and n have the same value
          nullIf the value of either this BigNumber or n is NaN
          -
          -x = new BigNumber(Infinity)
          -y = new BigNumber(5)
          -x.comparedTo(y)                 // 1
          -x.comparedTo(x.minus(1))        // 0
          -y.cmp(NaN)                      // null
          -y.cmp('110', 2)                 // -1
          - - - -
          decimalPlaces.dp() ⇒ number
          -

          - Return the number of decimal places of the value of this BigNumber, or null if - the value of this BigNumber is ±Infinity or NaN. -

          -
          -x = new BigNumber(123.45)
          -x.decimalPlaces()               // 2
          -y = new BigNumber('9.9e-101')
          -y.dp()                          // 102
          - - - -
          dividedBy.div(n [, base]) ⇒ BigNumber -
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          - Returns a BigNumber whose value is the value of this BigNumber divided by - n, rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

          -
          -x = new BigNumber(355)
          -y = new BigNumber(113)
          -x.dividedBy(y)                  // '3.14159292035398230088'
          -x.div(5)                        // '71'
          -x.div(47, 16)                   // '5'
          - - - -
          - dividedToIntegerBy.divToInt(n [, base]) ⇒ - BigNumber -
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          - Return a BigNumber whose value is the integer part of dividing the value of this BigNumber by - n. -

          -
          -x = new BigNumber(5)
          -y = new BigNumber(3)
          -x.dividedToIntegerBy(y)         // '1'
          -x.divToInt(0.7)                 // '7'
          -x.divToInt('0.f', 16)           // '5'
          - - - -
          equals.eq(n [, base]) ⇒ boolean
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          - Returns true if the value of this BigNumber equals the value of n, - otherwise returns false.
          - As with JavaScript, NaN does not equal NaN. -

          -

          Note: This method uses the comparedTo method internally.

          -
          -0 === 1e-324                    // true
          -x = new BigNumber(0)
          -x.equals('1e-324')              // false
          -BigNumber(-0).eq(x)             // true  ( -0 === 0 )
          -BigNumber(255).eq('ff', 16)     // true
          -
          -y = new BigNumber(NaN)
          -y.equals(NaN)                   // false
          - - - -
          floor.floor() ⇒ BigNumber
          -

          - Returns a BigNumber whose value is the value of this BigNumber rounded to a whole number in - the direction of negative Infinity. -

          -
          -x = new BigNumber(1.8)
          -x.floor()                       // '1'
          -y = new BigNumber(-1.3)
          -y.floor()                       // '-2'
          - - - -
          greaterThan.gt(n [, base]) ⇒ boolean
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          - Returns true if the value of this BigNumber is greater than the value of - n, otherwise returns false. -

          -

          Note: This method uses the comparedTo method internally.

          -
          -0.1 > (0.3 - 0.2)                           // true
          -x = new BigNumber(0.1)
          -x.greaterThan(BigNumber(0.3).minus(0.2))    // false
          -BigNumber(0).gt(x)                          // false
          -BigNumber(11, 3).gt(11.1, 2)                // true
          - - - -
          - greaterThanOrEqualTo.gte(n [, base]) ⇒ boolean -
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          - Returns true if the value of this BigNumber is greater than or equal to the value - of n, otherwise returns false. -

          -

          Note: This method uses the comparedTo method internally.

          -
          -(0.3 - 0.2) >= 0.1                   // false
          -x = new BigNumber(0.3).minus(0.2)
          -x.greaterThanOrEqualTo(0.1)          // true
          -BigNumber(1).gte(x)                  // true
          -BigNumber(10, 18).gte('i', 36)       // true
          - - - -
          isFinite.isFinite() ⇒ boolean
          -

          - Returns true if the value of this BigNumber is a finite number, otherwise - returns false. -

          -

          - The only possible non-finite values of a BigNumber are NaN, Infinity - and -Infinity. -

          -
          -x = new BigNumber(1)
          -x.isFinite()                    // true
          -y = new BigNumber(Infinity)
          -y.isFinite()                    // false
          -

          - Note: The native method isFinite() can be used if - n <= Number.MAX_VALUE. -

          - - - -
          isInteger.isInt() ⇒ boolean
          -

          - Returns true if the value of this BigNumber is a whole number, otherwise returns - false. -

          -
          -x = new BigNumber(1)
          -x.isInteger()                   // true
          -y = new BigNumber(123.456)
          -y.isInt()                       // false
          - - - -
          isNaN.isNaN() ⇒ boolean
          -

          - Returns true if the value of this BigNumber is NaN, otherwise - returns false. -

          -
          -x = new BigNumber(NaN)
          -x.isNaN()                       // true
          -y = new BigNumber('Infinity')
          -y.isNaN()                       // false
          -

          Note: The native method isNaN() can also be used.

          - - - -
          isNegative.isNeg() ⇒ boolean
          -

          - Returns true if the value of this BigNumber is negative, otherwise returns - false. -

          -
          -x = new BigNumber(-0)
          -x.isNegative()                  // true
          -y = new BigNumber(2)
          -y.isNeg                         // false
          -

          Note: n < 0 can be used if n <= -Number.MIN_VALUE.

          - - - -
          isZero.isZero() ⇒ boolean
          -

          - Returns true if the value of this BigNumber is zero or minus zero, otherwise - returns false. -

          -
          -x = new BigNumber(-0)
          -x.isZero() && x.isNeg()         // true
          -y = new BigNumber(Infinity)
          -y.isZero()                      // false
          -

          Note: n == 0 can be used if n >= Number.MIN_VALUE.

          - - - -
          lessThan.lt(n [, base]) ⇒ boolean
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          - Returns true if the value of this BigNumber is less than the value of - n, otherwise returns false. -

          -

          Note: This method uses the comparedTo method internally.

          -
          -(0.3 - 0.2) < 0.1                     // true
          -x = new BigNumber(0.3).minus(0.2)
          -x.lessThan(0.1)                       // false
          -BigNumber(0).lt(x)                    // true
          -BigNumber(11.1, 2).lt(11, 3)          // true
          - - - -
          - lessThanOrEqualTo.lte(n [, base]) ⇒ boolean -
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          - Returns true if the value of this BigNumber is less than or equal to the value of - n, otherwise returns false. -

          -

          Note: This method uses the comparedTo method internally.

          -
          -0.1 <= (0.3 - 0.2)                                // false
          -x = new BigNumber(0.1)
          -x.lessThanOrEqualTo(BigNumber(0.3).minus(0.2))    // true
          -BigNumber(-1).lte(x)                              // true
          -BigNumber(10, 18).lte('i', 36)                    // true
          - - - -
          - minus.minus(n [, base]) ⇒ BigNumber -
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          Returns a BigNumber whose value is the value of this BigNumber minus n.

          -

          The return value is always exact and unrounded.

          -
          -0.3 - 0.1                       // 0.19999999999999998
          -x = new BigNumber(0.3)
          -x.minus(0.1)                    // '0.2'
          -x.minus(0.6, 20)                // '0'
          - - - -
          modulo.mod(n [, base]) ⇒ BigNumber
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          - Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. - the integer remainder of dividing this BigNumber by n. -

          -

          - The value returned, and in particular its sign, is dependent on the value of the - MODULO_MODE setting of this BigNumber constructor. - If it is 1 (default value), the result will have the same sign as this BigNumber, - and it will match that of Javascript's % operator (within the limits of double - precision) and BigDecimal's remainder method. -

          -

          The return value is always exact and unrounded.

          -

          - See MODULO_MODE for a description of the other - modulo modes. -

          -
          -1 % 0.9                         // 0.09999999999999998
          -x = new BigNumber(1)
          -x.modulo(0.9)                   // '0.1'
          -y = new BigNumber(33)
          -y.mod('a', 33)                  // '3'
          - - - -
          negated.neg() ⇒ BigNumber
          -

          - Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by - -1. -

          -
          -x = new BigNumber(1.8)
          -x.negated()                     // '-1.8'
          -y = new BigNumber(-1.3)
          -y.neg()                         // '1.3'
          - - - -
          plus.plus(n [, base]) ⇒ BigNumber
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          Returns a BigNumber whose value is the value of this BigNumber plus n.

          -

          The return value is always exact and unrounded.

          -
          -0.1 + 0.2                       // 0.30000000000000004
          -x = new BigNumber(0.1)
          -y = x.plus(0.2)                 // '0.3'
          -BigNumber(0.7).plus(x).plus(y)  // '1'
          -x.plus('0.1', 8)                // '0.225'
          - - - -
          precision.sd([z]) ⇒ number
          -

          - z: boolean|number: true, false, 0 - or 1 -

          -

          Returns the number of significant digits of the value of this BigNumber.

          -

          - If z is true or 1 then any trailing zeros of the - integer part of a number are counted as significant digits, otherwise they are not. -

          -
          -x = new BigNumber(1.234)
          -x.precision()                   // 4
          -y = new BigNumber(987000)
          -y.sd()                          // 3
          -y.sd(true)                      // 6
          - - - -
          round.round([dp [, rm]]) ⇒ BigNumber
          -

          - dp: number: integer, 0 to 1e+9 inclusive
          - rm: number: integer, 0 to 8 inclusive -

          -

          - Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - rm to a maximum of dp decimal places. -

          -

          - if dp is omitted, or is null or undefined, the - return value is n rounded to a whole number.
          - if rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

          -

          - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

          -
          -x = 1234.56
          -Math.round(x)                             // 1235
          -
          -y = new BigNumber(x)
          -y.round()                                 // '1235'
          -y.round(1)                                // '1234.6'
          -y.round(2)                                // '1234.56'
          -y.round(10)                               // '1234.56'
          -y.round(0, 1)                             // '1234'
          -y.round(0, 6)                             // '1235'
          -y.round(1, 1)                             // '1234.5'
          -y.round(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
          -y                                         // '1234.56'
          - - - -
          shift.shift(n) ⇒ BigNumber
          -

          - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

          -

          - Returns a BigNumber whose value is the value of this BigNumber shifted n places. -

          - The shift is of the decimal point, i.e. of powers of ten, and is to the left if n - is negative or to the right if n is positive. -

          -

          The return value is always exact and unrounded.

          -
          -x = new BigNumber(1.23)
          -x.shift(3)                      // '1230'
          -x.shift(-3)                     // '0.00123'
          - - - -
          squareRoot.sqrt() ⇒ BigNumber
          -

          - Returns a BigNumber whose value is the square root of the value of this BigNumber, - rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

          -

          - The return value will be correctly rounded, i.e. rounded as if the result was first calculated - to an infinite number of correct digits before rounding. -

          -
          -x = new BigNumber(16)
          -x.squareRoot()                  // '4'
          -y = new BigNumber(3)
          -y.sqrt()                        // '1.73205080756887729353'
          - - - -
          times.times(n [, base]) ⇒ BigNumber
          -

          - n: number|string|BigNumber
          - base: number
          - See BigNumber for further parameter details. -

          -

          Returns a BigNumber whose value is the value of this BigNumber times n.

          -

          The return value is always exact and unrounded.

          -
          -0.6 * 3                         // 1.7999999999999998
          -x = new BigNumber(0.6)
          -y = x.times(3)                  // '1.8'
          -BigNumber('7e+500').times(y)    // '1.26e+501'
          -x.times('-a', 16)               // '-6'
          - - - -
          - toDigits.toDigits([sd [, rm]]) ⇒ BigNumber -
          -

          - sd: number: integer, 1 to 1e+9 inclusive.
          - rm: number: integer, 0 to 8 inclusive. -

          -

          - Returns a BigNumber whose value is the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

          -

          - If sd is omitted or is null or undefined, the return - value will not be rounded.
          - If rm is omitted or is null or undefined, - ROUNDING_MODE will be used. -

          -

          - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

          -
          -BigNumber.config({ precision: 5, rounding: 4 })
          -x = new BigNumber(9876.54321)
          -
          -x.toSignificantDigits()                          // '9876.5'
          -x.toSignificantDigits(6)                         // '9876.54'
          -x.toSignificantDigits(6, BigNumber.ROUND_UP)     // '9876.55'
          -x.toSD(2)                                        // '9900'
          -x.toSD(2, 1)                                     // '9800'
          -x                                                // '9876.54321'
          - - - -
          - toExponential.toExponential([dp [, rm]]) ⇒ string -
          -

          - dp: number: integer, 0 to 1e+9 inclusive
          - rm: number: integer, 0 to 8 inclusive -

          -

          - Returns a string representing the value of this BigNumber in exponential notation rounded - using rounding mode rm to dp decimal places, i.e with one digit - before the decimal point and dp digits after it. -

          -

          - If the value of this BigNumber in exponential notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

          -

          - If dp is omitted, or is null or undefined, the number - of digits after the decimal point defaults to the minimum number of digits necessary to - represent the value exactly.
          - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

          -

          - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

          -
          -x = 45.6
          -y = new BigNumber(x)
          -x.toExponential()               // '4.56e+1'
          -y.toExponential()               // '4.56e+1'
          -x.toExponential(0)              // '5e+1'
          -y.toExponential(0)              // '5e+1'
          -x.toExponential(1)              // '4.6e+1'
          -y.toExponential(1)              // '4.6e+1'
          -y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
          -x.toExponential(3)              // '4.560e+1'
          -y.toExponential(3)              // '4.560e+1'
          - - - -
          - toFixed.toFixed([dp [, rm]]) ⇒ string -
          -

          - dp: number: integer, 0 to 1e+9 inclusive
          - rm: number: integer, 0 to 8 inclusive -

          -

          - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm. -

          -

          - If the value of this BigNumber in normal notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

          -

          - Unlike Number.prototype.toFixed, which returns exponential notation if a number - is greater or equal to 1021, this method will always return normal - notation. -

          -

          - If dp is omitted or is null or undefined, the return - value will be unrounded and in normal notation. This is also unlike - Number.prototype.toFixed, which returns the value to zero decimal places.
          - It is useful when fixed-point notation is required and the current - EXPONENTIAL_AT setting causes - toString to return exponential notation.
          - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

          -

          - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

          -
          -x = 3.456
          -y = new BigNumber(x)
          -x.toFixed()                     // '3'
          -y.toFixed()                     // '3.456'
          -y.toFixed(0)                    // '3'
          -x.toFixed(2)                    // '3.46'
          -y.toFixed(2)                    // '3.46'
          -y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
          -x.toFixed(5)                    // '3.45600'
          -y.toFixed(5)                    // '3.45600'
          - - - -
          - toFormat.toFormat([dp [, rm]]) ⇒ string -
          -

          - dp: number: integer, 0 to 1e+9 inclusive
          - rm: number: integer, 0 to 8 inclusive -

          -

          -

          - Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm, and formatted - according to the properties of the FORMAT object. -

          -

          - See the examples below for the properties of the - FORMAT object, their types and their usage. -

          -

          - If dp is omitted or is null or undefined, then the - return value is not rounded to a fixed number of decimal places.
          - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

          -

          - See Errors for the treatment of other non-integer or out of range - dp or rm values. -

          -
          -format = {
          -    decimalSeparator: '.',
          -    groupSeparator: ',',
          -    groupSize: 3,
          -    secondaryGroupSize: 0,
          -    fractionGroupSeparator: ' ',
          -    fractionGroupSize: 0
          -}
          -BigNumber.config({ FORMAT: format })
          -
          -x = new BigNumber('123456789.123456789')
          -x.toFormat()                    // '123,456,789.123456789'
          -x.toFormat(1)                   // '123,456,789.1'
          -
          -// If a reference to the object assigned to FORMAT has been retained,
          -// the format properties can be changed directly
          -format.groupSeparator = ' '
          -format.fractionGroupSize = 5
          -x.toFormat()                    // '123 456 789.12345 6789'
          -
          -BigNumber.config({
          -    FORMAT: {
          -        decimalSeparator = ',',
          -        groupSeparator = '.',
          -        groupSize = 3,
          -        secondaryGroupSize = 2
          -    }
          -})
          -
          -x.toFormat(6)                   // '12.34.56.789,123'
          - - - -
          - toFraction.toFraction([max]) ⇒ [string, string] -
          -

          - max: number|string|BigNumber: integer >= 1 and < - Infinity -

          -

          - Returns a string array representing the value of this BigNumber as a simple fraction with an - integer numerator and an integer denominator. The denominator will be a positive non-zero - value less than or equal to max. -

          -

          - If a maximum denominator, max, is not specified, or is null or - undefined, the denominator will be the lowest value necessary to represent the - number exactly. -

          -

          - See Errors for the treatment of other non-integer or out of range - max values. -

          -
          -x = new BigNumber(1.75)
          -x.toFraction()                  // '7, 4'
          -
          -pi = new BigNumber('3.14159265358')
          -pi.toFraction()                 // '157079632679,50000000000'
          -pi.toFraction(100000)           // '312689, 99532'
          -pi.toFraction(10000)            // '355, 113'
          -pi.toFraction(100)              // '311, 99'
          -pi.toFraction(10)               // '22, 7'
          -pi.toFraction(1)                // '3, 1'
          - - - -
          toJSON.toJSON() ⇒ string
          -

          As valueOf.

          -
          -x = new BigNumber('177.7e+457')
          -y = new BigNumber(235.4325)
          -z = new BigNumber('0.0098074')
          -
          -// Serialize an array of three BigNumbers
          -str = JSON.stringify( [x, y, z] )
          -// "["1.777e+459","235.4325","0.0098074"]"
          -
          -// Return an array of three BigNumbers
          -JSON.parse(str, function (key, val) {
          -    return key === '' ? val : new BigNumber(val)
          -})
          - - - -
          toNumber.toNumber() ⇒ number
          -

          Returns the value of this BigNumber as a JavaScript number primitive.

          -

          - Type coercion with, for example, the unary plus operator will also work, except that a - BigNumber with the value minus zero will be converted to positive zero. -

          -
          -x = new BigNumber(456.789)
          -x.toNumber()                    // 456.789
          -+x                              // 456.789
          -
          -y = new BigNumber('45987349857634085409857349856430985')
          -y.toNumber()                    // 4.598734985763409e+34
          -
          -z = new BigNumber(-0)
          -1 / +z                          // Infinity
          -1 / z.toNumber()                // -Infinity
          - - - -
          toPower.pow(n) ⇒ BigNumber
          -

          - n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

          -

          - Returns a BigNumber whose value is the value of this BigNumber raised to the power - n. -

          -

          - If n is negative the result is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE configuration. -

          -

          - If n is not an integer or is out of range: -

          -

          - If ERRORS is true a BigNumber Error is thrown,
          - else if n is greater than 9007199254740991, it is interpreted as - Infinity;
          - else if n is less than -9007199254740991, it is interpreted as - -Infinity;
          - else if n is otherwise a number, it is truncated to an integer;
          - else it is interpreted as NaN. -

          -

          - As the number of digits of the result of the power operation can grow so large so quickly, - e.g. 123.45610000 has over 50000 digits, the number of significant - digits calculated is limited to the value of the - POW_PRECISION setting (default value: - 100). -

          -

          - Set POW_PRECISION to 0 for an - unlimited number of significant digits to be calculated (this will cause the method to slow - dramatically for larger exponents). -

          -

          - Negative exponents will be calculated to the number of decimal places specified by - DECIMAL_PLACES (but not to more than - POW_PRECISION significant digits). -

          -
          -Math.pow(0.7, 2)                // 0.48999999999999994
          -x = new BigNumber(0.7)
          -x.toPower(2)                    // '0.49'
          -BigNumber(3).pow(-2)            // '0.11111111111111111111'
          - - - -
          - toPrecision.toPrecision([sd [, rm]]) ⇒ string -
          -

          - sd: number: integer, 1 to 1e+9 inclusive
          - rm: number: integer, 0 to 8 inclusive -

          -

          - Returns a string representing the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

          -

          - If sd is less than the number of digits necessary to represent the integer part - of the value in normal (fixed-point) notation, then exponential notation is used. -

          -

          - If sd is omitted, or is null or undefined, then the - return value is the same as n.toString().
          - If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

          -

          - See Errors for the treatment of other non-integer or out of range - sd or rm values. -

          -
          -x = 45.6
          -y = new BigNumber(x)
          -x.toPrecision()                 // '45.6'
          -y.toPrecision()                 // '45.6'
          -x.toPrecision(1)                // '5e+1'
          -y.toPrecision(1)                // '5e+1'
          -y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
          -y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
          -x.toPrecision(5)                // '45.600'
          -y.toPrecision(5)                // '45.600'
          - - - -
          toString.toString([base]) ⇒ string
          -

          base: number: integer, 2 to 64 inclusive

          -

          - Returns a string representing the value of this BigNumber in the specified base, or base - 10 if base is omitted or is null or - undefined. -

          -

          - For bases above 10, values from 10 to 35 are - represented by a-z (as with Number.prototype.toString), - 36 to 61 by A-Z, and 62 and - 63 by $ and _ respectively. -

          -

          - If a base is specified the value is rounded according to the current - DECIMAL_PLACES - and ROUNDING_MODE configuration. -

          -

          - If a base is not specified, and this BigNumber has a positive - exponent that is equal to or greater than the positive component of the - current EXPONENTIAL_AT setting, - or a negative exponent equal to or less than the negative component of the - setting, then exponential notation is returned. -

          -

          If base is null or undefined it is ignored.

          -

          - See Errors for the treatment of other non-integer or out of range - base values. -

          -
          -x = new BigNumber(750000)
          -x.toString()                    // '750000'
          -BigNumber.config({ EXPONENTIAL_AT: 5 })
          -x.toString()                    // '7.5e+5'
          -
          -y = new BigNumber(362.875)
          -y.toString(2)                   // '101101010.111'
          -y.toString(9)                   // '442.77777777777777777778'
          -y.toString(32)                  // 'ba.s'
          -
          -BigNumber.config({ DECIMAL_PLACES: 4 });
          -z = new BigNumber('1.23456789')
          -z.toString()                    // '1.23456789'
          -z.toString(10)                  // '1.2346'
          - - - -
          truncated.trunc() ⇒ BigNumber
          -

          - Returns a BigNumber whose value is the value of this BigNumber truncated to a whole number. -

          -
          -x = new BigNumber(123.456)
          -x.truncated()                   // '123'
          -y = new BigNumber(-12.3)
          -y.trunc()                       // '-12'
          - - - -
          valueOf.valueOf() ⇒ string
          -

          As toString, but does not accept a base argument.

          -
          -x = new BigNumber('1.777e+457')
          -x.valueOf()                     // '1.777e+457'
          - - - -

          Properties

          -

          A BigNumber is an object with three properties:

          - - - - - - - - - - - - - - - - - - - - - - - - - -
          PropertyDescriptionTypeValue
          ccoefficient*number[] Array of base 1e14 numbers
          eexponentnumberInteger, -1000000000 to 1000000000 inclusive
          ssignnumber-1 or 1
          -

          *significand

          -

          The value of any of the three properties may also be null.

          -

          - From v2.0.0 of this library, the value of the coefficient of a BigNumber is stored in a - normalised base 100000000000000 floating point format, as opposed to the base - 10 format used in v1.x.x -

          -

          - This change means the properties of a BigNumber are now best considered to be read-only. - Previously it was acceptable to change the exponent of a BigNumber by writing to its exponent - property directly, but this is no longer recommended as the number of digits in the first - element of the coefficient array is dependent on the exponent, so the coefficient would also - need to be altered. -

          -

          - Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are - not necessarily preserved. -

          -
          x = new BigNumber(0.123)              // '0.123'
          -x.toExponential()                     // '1.23e-1'
          -x.c                                   // '1,2,3'
          -x.e                                   // -1
          -x.s                                   // 1
          -
          -y = new Number(-123.4567000e+2)       // '-12345.67'
          -y.toExponential()                     // '-1.234567e+4'
          -z = new BigNumber('-123.4567000e+2')  // '-12345.67'
          -z.toExponential()                     // '-1.234567e+4'
          -z.c                                   // '1,2,3,4,5,6,7'
          -z.e                                   // 4
          -z.s                                   // -1
          - - - -

          Zero, NaN and Infinity

          -

          - The table below shows how ±0, NaN and - ±Infinity are stored. -

          - - - - - - - - - - - - - - - - - - - - - - - - - -
          ces
          ±0[0]0±1
          NaNnullnullnull
          ±Infinitynullnull±1
          -
          -x = new Number(-0)              // 0
          -1 / x == -Infinity              // true
          -
          -y = new BigNumber(-0)           // '0'
          -y.c                             // '0' ( [0].toString() )
          -y.e                             // 0
          -y.s                             // -1
          - - - -

          Errors

          -

          - The errors that are thrown are generic Error objects with name - BigNumber Error. -

          -

          - The table below shows the errors that may be thrown if ERRORS is - true, and the action taken if ERRORS is false. -

          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          Method(s)ERRORS: true
          Throw BigNumber Error
          ERRORS: false
          Action on invalid argument
          - - BigNumber
          - comparedTo
          - dividedBy
          - dividedToIntegerBy
          - equals
          - greaterThan
          - greaterThanOrEqualTo
          - lessThan
          - lessThanOrEqualTo
          - minus
          - modulo
          - plus
          - times -
          number type has more than
          15 significant digits
          Accept.
          not a base... numberSubstitute NaN.
          base not an integerTruncate to integer.
          Ignore if not a number.
          base out of rangeIgnore.
          not a number*Substitute NaN.
          anothernot an objectIgnore.
          configDECIMAL_PLACES not an integerTruncate to integer.
          Ignore if not a number.
          DECIMAL_PLACES out of rangeIgnore.
          ROUNDING_MODE not an integerTruncate to integer.
          Ignore if not a number.
          ROUNDING_MODE out of rangeIgnore.
          EXPONENTIAL_AT not an integer
          or not [integer, integer]
          Truncate to integer(s).
          Ignore if not number(s).
          EXPONENTIAL_AT out of range
          or not [negative, positive]
          Ignore.
          RANGE not an integer
          or not [integer, integer]
          Truncate to integer(s).
          Ignore if not number(s).
          RANGE cannot be zeroIgnore.
          RANGE out of range
          or not [negative, positive]
          Ignore.
          ERRORS not a boolean
          or binary digit
          Ignore.
          CRYPTO not a boolean
          or binary digit
          Ignore.
          CRYPTO crypto unavailableIgnore.
          MODULO_MODE not an integerTruncate to integer.
          Ignore if not a number.
          MODULO_MODE out of rangeIgnore.
          POW_PRECISION not an integerTruncate to integer.
          Ignore if not a number.
          POW_PRECISION out of rangeIgnore.
          FORMAT not an objectIgnore.
          precisionargument not a boolean
          or binary digit
          Ignore.
          rounddecimal places not an integerTruncate to integer.
          Ignore if not a number.
          decimal places out of rangeIgnore.
          rounding mode not an integerTruncate to integer.
          Ignore if not a number.
          rounding mode out of rangeIgnore.
          shiftargument not an integerTruncate to integer.
          Ignore if not a number.
          argument out of rangeSubstitute ±Infinity. -
          - toExponential
          - toFixed
          - toFormat -
          decimal places not an integerTruncate to integer.
          Ignore if not a number.
          decimal places out of rangeIgnore.
          rounding mode not an integerTruncate to integer.
          Ignore if not a number.
          rounding mode out of rangeIgnore.
          toFractionmax denominator not an integerTruncate to integer.
          Ignore if not a number.
          max denominator out of rangeIgnore.
          - toDigits
          - toPrecision -
          precision not an integerTruncate to integer.
          Ignore if not a number.
          precision out of rangeIgnore.
          rounding mode not an integerTruncate to integer.
          Ignore if not a number.
          rounding mode out of rangeIgnore.
          toPowerexponent not an integerTruncate to integer.
          Substitute NaN if not a number.
          exponent out of rangeSubstitute ±Infinity. -
          toStringbase not an integerTruncate to integer.
          Ignore if not a number.
          base out of rangeIgnore.
          -

          *No error is thrown if the value is NaN or 'NaN'.

          -

          - The message of a BigNumber Error will also contain the name of the method from which - the error originated. -

          -

          To determine if an exception is a BigNumber Error:

          -
          -try {
          -    // ...
          -} catch (e) {
          -    if ( e instanceof Error && e.name == 'BigNumber Error' ) {
          -        // ...
          -    }
          -}
          - - - -

          FAQ

          - -
          Why are trailing fractional zeros removed from BigNumbers?
          -

          - Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the - precision of a value. This can be useful but the results of arithmetic operations can be - misleading. -

          -
          -x = new BigDecimal("1.0")
          -y = new BigDecimal("1.1000")
          -z = x.add(y)                      // 2.1000
          -
          -x = new BigDecimal("1.20")
          -y = new BigDecimal("3.45000")
          -z = x.multiply(y)                 // 4.1400000
          -

          - To specify the precision of a value is to specify that the value lies - within a certain range. -

          -

          - In the first example, x has a value of 1.0. The trailing zero shows - the precision of the value, implying that it is in the range 0.95 to - 1.05. Similarly, the precision indicated by the trailing zeros of y - indicates that the value is in the range 1.09995 to 1.10005. -

          -

          - If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, - and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the - range of the result of the addition implied by the precision of its operands is - 2.04995 to 2.15005. -

          -

          - The result given by BigDecimal of 2.1000 however, indicates that the value is in - the range 2.09995 to 2.10005 and therefore the precision implied by - its trailing zeros may be misleading. -

          -

          - In the second example, the true range is 4.122744 to 4.157256 yet - the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 - to 4.14000005. Again, the precision implied by the trailing zeros may be - misleading. -

          -

          - This library, like binary floating point and most calculators, does not retain trailing - fractional zeros. Instead, the toExponential, toFixed and - toPrecision methods enable trailing zeros to be added if and when required.
          -

          -
          - - - diff --git a/node_modules/web3/node_modules/bignumber.js/package.json b/node_modules/web3/node_modules/bignumber.js/package.json deleted file mode 100644 index b23e73e..0000000 --- a/node_modules/web3/node_modules/bignumber.js/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_args": [ - [ - "bignumber.js@git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "/Users/jbaylina/git/MVP/node_modules/web3" - ] - ], - "_from": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "_id": "bignumber.js@2.0.7", - "_inCache": true, - "_installable": true, - "_location": "/web3/bignumber.js", - "_phantomChildren": {}, - "_requested": { - "hosted": { - "directUrl": "https://raw.githubusercontent.com/debris/bignumber.js/94d7146671b9719e00a09c29b01a691bc85048c2/package.json", - "gitUrl": "git://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "httpsUrl": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "shortcut": "github:debris/bignumber.js#94d7146671b9719e00a09c29b01a691bc85048c2", - "ssh": "git@github.com:debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "sshUrl": "git+ssh://git@github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "type": "github" - }, - "name": "bignumber.js", - "raw": "bignumber.js@git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "rawSpec": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "scope": null, - "spec": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "type": "hosted" - }, - "_requiredBy": [ - "/web3" - ], - "_resolved": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "_shasum": "5c733f0de152efc5bce5eb64c1045141ee35993e", - "_shrinkwrap": null, - "_spec": "bignumber.js@git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "_where": "/Users/jbaylina/git/MVP/node_modules/web3", - "author": { - "email": "M8ch88l@gmail.com", - "name": "Michael Mclaughlin" - }, - "bugs": { - "url": "https://github.com/MikeMcl/bignumber.js/issues" - }, - "dependencies": {}, - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "devDependencies": {}, - "engines": { - "node": "*" - }, - "gitHead": "94d7146671b9719e00a09c29b01a691bc85048c2", - "homepage": "https://github.com/MikeMcl/bignumber.js", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "main": "bignumber", - "name": "bignumber.js", - "optionalDependencies": {}, - "readme": "![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png)\n\nA JavaScript library for arbitrary-precision decimal and non-decimal arithmetic.\n\n[![Build Status](https://travis-ci.org/MikeMcl/bignumber.js.svg)](https://travis-ci.org/MikeMcl/bignumber.js)\n\n
          \n\n## Features\n\n - Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal\n - 8 KB minified and gzipped\n - Simple API but full-featured\n - Works with numbers with or without fraction digits in bases from 2 to 64 inclusive\n - Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type\n - Includes a `toFraction` and a correctly-rounded `squareRoot` method\n - Supports cryptographically-secure pseudo-random number generation\n - No dependencies\n - Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only\n - Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set\n\n![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png)\n\nIf a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/).\nIt's less than half the size but only works with decimal numbers and only has half the methods.\nIt also does not allow `NaN` or `Infinity`, or have the configuration options of this library.\n\nSee also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits.\n\n## Load\n\nThe library is the single JavaScript file *bignumber.js* (or minified, *bignumber.min.js*).\n\n```html\n\n```\n\nFor [Node.js](http://nodejs.org) or [io.js](https://iojs.org/en/index.html), the library is available from the [npm](https://npmjs.org/) registry\n\n $ npm install bignumber.js\n\n```javascript\nvar BigNumber = require('bignumber.js');\n```\n\nTo load with AMD loader libraries such as [requireJS](http://requirejs.org/):\n\n```javascript\nrequire(['path/to/bignumber'], function(BigNumber) { \n // Use BigNumber here in local scope. No global BigNumber.\n});\n```\n\n## Use\n\n*In all examples below, `var`, semicolons and `toString` calls are not shown.\nIf a commented-out value is in quotes it means `toString` has been called on the preceding expression.*\n\nThe library exports a single function: `BigNumber`, the constructor of BigNumber instances.\n\nIt accepts a value of type number *(up to 15 significant digits only)*, string or BigNumber object,\n\n```javascript\nx = new BigNumber(123.4567)\ny = BigNumber('123456.7e-3')\nz = new BigNumber(x)\nx.equals(y) && y.equals(z) && x.equals(z) // true\n```\n\n\nand a base from 2 to 64 inclusive can be specified.\n\n```javascript\nx = new BigNumber(1011, 2) // \"11\"\ny = new BigNumber('zz.9', 36) // \"1295.25\"\nz = x.plus(y) // \"1306.25\"\n```\n\nA BigNumber is immutable in the sense that it is not changed by its methods. \n\n```javascript\n0.3 - 0.1 // 0.19999999999999998 \nx = new BigNumber(0.3)\nx.minus(0.1) // \"0.2\"\nx // \"0.3\"\n```\n\nThe methods that return a BigNumber can be chained.\n\n```javascript\nx.dividedBy(y).plus(z).times(9).floor()\nx.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil()\n```\n\nMany method names have a shorter alias.\n\n```javascript\nx.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true\nx.cmp(y.mod(z).neg()) == 1 && x.comparedTo(y.modulo(z).negated()) == 1 // true\n```\n\nLike JavaScript's number type, there are `toExponential`, `toFixed` and `toPrecision` methods\n\n```javascript\nx = new BigNumber(255.5)\nx.toExponential(5) // \"2.55500e+2\"\nx.toFixed(5) // \"255.50000\"\nx.toPrecision(5) // \"255.50\"\nx.toNumber() // 255.5\n```\n\n and a base can be specified for `toString`.\n\n ```javascript\n x.toString(16) // \"ff.8\"\n ```\n\nThere is also a `toFormat` method which may be useful for internationalisation\n\n```javascript\ny = new BigNumber('1234567.898765')\ny.toFormat(2) // \"1,234,567.90\"\n```\n\nThe maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `config` method of the `BigNumber` constructor.\n\nThe other arithmetic operations always give the exact result.\n\n```javascript\nBigNumber.config({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 })\n// Alternatively, BigNumber.config( 10, 4 );\n\nx = new BigNumber(2);\ny = new BigNumber(3);\nz = x.div(y) // \"0.6666666667\"\nz.sqrt() // \"0.8164965809\"\nz.pow(-3) // \"3.3749999995\"\nz.toString(2) // \"0.1010101011\"\nz.times(z) // \"0.44444444448888888889\"\nz.times(z).round(10) // \"0.4444444445\"\n```\n\nThere is a `toFraction` method with an optional *maximum denominator* argument\n\n```javascript\ny = new BigNumber(355)\npi = y.dividedBy(113) // \"3.1415929204\"\npi.toFraction() // [ \"7853982301\", \"2500000000\" ]\npi.toFraction(1000) // [ \"355\", \"113\" ]\n```\n\nand `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `BigNumber` values.\n\n```javascript\nx = new BigNumber(NaN) // \"NaN\"\ny = new BigNumber(Infinity) // \"Infinity\"\nx.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true\n```\n\nThe value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign.\n\n\n```javascript\nx = new BigNumber(-123.456);\nx.c // [ 123, 45600000000000 ] coefficient (i.e. significand)\nx.e // 2 exponent\nx.s // -1 sign\n```\n\n\nMultiple BigNumber constructors can be created, each with their own independent configuration which applies to all BigNumber's created from it.\n\n```javascript\n// Set DECIMAL_PLACES for the original BigNumber constructor\nBigNumber.config({ DECIMAL_PLACES: 10 })\n\n// Create another BigNumber constructor, optionally passing in a configuration object\nBN = BigNumber.another({ DECIMAL_PLACES: 5 })\n\nx = new BigNumber(1)\ny = new BN(1)\n\nx.div(3) // '0.3333333333'\ny.div(3) // '0.33333'\n```\n\nFor futher information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory.\n\n## Test\n\nThe *test* directory contains the test scripts for each method.\n\nThe tests can be run with Node or a browser. For Node use\n\n $ npm test\n\nor\n\n $ node test/every-test\n\nTo test a single method, e.g.\n\n $ node test/toFraction\n\nFor the browser, see *every-test.html* and *single-test.html* in the *test/browser* directory. \n\n*bignumber-vs-number.html* enables some of the methods of bignumber.js to be compared with those of JavaScript's number type. \n\n## Versions\n\nThis is version 2.x.x of the library, for version 1.x.x see the tagged releases or switch to the 'original' branch. The advantages of version 2 are that it is considerably faster for numbers with many digits and that there are a some added methods (see Change Log below). The disadvantages are more lines of code and increased code complexity, and the loss of simplicity in no longer having the coefficient of a BigNumber stored in base 10. The 'original' version will continue to be supported.\n\n## Performance\n\nSee the [README](https://github.com/MikeMcl/bignumber.js/tree/master/perf) in the *perf* directory.\n\n## Build\n\nFor Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed\n\n npm install uglify-js -g\n\nthen\n\n npm run build\n\nwill create *bignumber.min.js*.\n\nA source map will also be created in the root directory.\n\n## Feedback\n\nOpen an issue, or email \n\nMichael\n\nM8ch88l@gmail.com\n\n## Licence\n\nMIT.\n\nSee [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE).\n\n## Change Log\n\n####2.0.6\n* 31/03/2015\n* Add bower.json. Tweak division after in-depth review.\n\n####2.0.5\n* 25/03/2015\n* Amend README. Remove bitcoin address.\n\n####2.0.4\n* 25/03/2015\n* Critical bugfix #58: division.\n\n####2.0.3\n* 18/02/2015\n* Amend README. Add source map.\n\n####2.0.2\n* 18/02/2015\n* Correct links.\n\n####2.0.1\n* 18/02/2015\n* Add `max`, `min`, `precision`, `random`, `shift`, `toDigits` and `truncated` methods.\n* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`.\n* Add an `another` method to enable multiple independent constructors to be created.\n* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`.\n* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`.\n* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified.\n* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified.\n* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited.\n* Improve code quality.\n* Improve documentation.\n\n####2.0.0\n* 29/12/2014\n* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods.\n* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`.\n* Store a BigNumber's coefficient in base 1e14, rather than base 10.\n* Add fast path for integers to BigNumber constructor.\n* Incorporate the library into the online documentation.\n\n####1.5.0\n* 13/11/2014\n* Add `toJSON` and `decimalPlaces` methods.\n\n####1.4.1\n* 08/06/2014\n* Amend README.\n\n####1.4.0\n* 08/05/2014\n* Add `toNumber`.\n\n####1.3.0\n* 08/11/2013\n* Ensure correct rounding of `sqrt` in all, rather than almost all, cases.\n* Maximum radix to 64.\n\n####1.2.1\n* 17/10/2013\n* Sign of zero when x < 0 and x + (-x) = 0.\n\n####1.2.0\n* 19/9/2013\n* Throw Error objects for stack.\n\n####1.1.1\n* 22/8/2013\n* Show original value in constructor error message.\n\n####1.1.0\n* 1/8/2013\n* Allow numbers with trailing radix point. \n\n####1.0.1\n* Bugfix: error messages with incorrect method name\n\n####1.0.0\n* 8/11/2012\n* Initial release\n", - "readmeFilename": "README.md", - "repository": { - "type": "git", - "url": "git+https://github.com/MikeMcl/bignumber.js.git" - }, - "scripts": { - "build": "uglifyjs bignumber.js --source-map bignumber.js.map -c -m -o bignumber.min.js --preamble \"/* bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */\"", - "test": "node ./test/every-test.js" - }, - "version": "2.0.7" -} diff --git a/node_modules/web3/package-init.js b/node_modules/web3/package-init.js deleted file mode 100644 index 92e6a4a..0000000 --- a/node_modules/web3/package-init.js +++ /dev/null @@ -1,17 +0,0 @@ -/* jshint ignore:start */ - - -// Browser environment -if(typeof window !== 'undefined') { - Web3 = (typeof window.Web3 !== 'undefined') ? window.Web3 : require('web3'); - BigNumber = (typeof window.BigNumber !== 'undefined') ? window.BigNumber : require('bignumber.js'); -} - - -// Node environment -if(typeof global !== 'undefined') { - Web3 = (typeof global.Web3 !== 'undefined') ? global.Web3 : require('web3'); - BigNumber = (typeof global.BigNumber !== 'undefined') ? global.BigNumber : require('bignumber.js'); -} - -/* jshint ignore:end */ \ No newline at end of file diff --git a/node_modules/web3/package.js b/node_modules/web3/package.js deleted file mode 100644 index ab5d638..0000000 --- a/node_modules/web3/package.js +++ /dev/null @@ -1,33 +0,0 @@ -/* jshint ignore:start */ -Package.describe({ - name: 'ethereum:web3', - version: '0.17.0-beta', - summary: 'Ethereum JavaScript API, middleware to talk to a ethreum node over RPC', - git: 'https://github.com/ethereum/ethereum.js', - // By default, Meteor will default to using README.md for documentation. - // To avoid submitting documentation, set this field to null. - documentation: 'README.md' -}); - -Npm.depends({ - "xmlhttprequest": "1.7.0" -}); - - -Package.onUse(function(api) { - api.versionsFrom('1.0.3.2'); - - // api.use('3stack:bignumber@2.0.0', 'client'); - - api.export(['Web3', 'BigNumber'], ['client', 'server']); - - api.addFiles('dist/web3.js', ['client', 'server']); - api.addFiles('package-init.js', ['client', 'server']); -}); - -// Package.onTest(function(api) { -// api.use('tinytest'); -// api.use('test'); -// api.addFiles('test-tests.js'); -// }); -/* jshint ignore:end */ diff --git a/node_modules/web3/package.json b/node_modules/web3/package.json deleted file mode 100644 index 67eebd0..0000000 --- a/node_modules/web3/package.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "_args": [ - [ - "web3@^0.17.0-beta", - "/Users/jbaylina/git/MVP/node_modules/ethconnector" - ] - ], - "_from": "web3@>=0.17.0-beta <0.18.0", - "_id": "web3@0.17.0-beta", - "_inCache": true, - "_installable": true, - "_location": "/web3", - "_nodeVersion": "4.4.4", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/web3-0.17.0-beta.tgz_1473944649491_0.6677823858335614" - }, - "_npmUser": { - "email": "fabian@frozeman.de", - "name": "frozeman" - }, - "_npmVersion": "2.15.1", - "_phantomChildren": {}, - "_requested": { - "name": "web3", - "raw": "web3@^0.17.0-beta", - "rawSpec": "^0.17.0-beta", - "scope": null, - "spec": ">=0.17.0-beta <0.18.0", - "type": "range" - }, - "_requiredBy": [ - "/ethconnector" - ], - "_resolved": "https://registry.npmjs.org/web3/-/web3-0.17.0-beta.tgz", - "_shasum": "57af38245bff7a32099f7ce5780fad5bbc00da5b", - "_shrinkwrap": null, - "_spec": "web3@^0.17.0-beta", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethconnector", - "author": { - "name": "ethdev.com" - }, - "authors": [ - { - "email": "marek@ethdev.com", - "name": "Marek Kotewicz", - "url": "https://github.com/debris" - }, - { - "email": "fabian@ethdev.com", - "homepage": "http://frozeman.de", - "name": "Fabian Vogelsteller" - }, - { - "email": "marian@ethdev.com", - "name": "Marian Oancea", - "url": "https://github.com/cubedro" - }, - { - "email": "g@ethdev.com", - "homepage": "http://gavwood.com", - "name": "Gav Wood" - }, - { - "email": "jeff@ethdev.com", - "name": "Jeffery Wilcke", - "url": "https://github.com/obscuren" - } - ], - "browser": { - "xmlhttprequest": "./lib/utils/browser-xhr.js" - }, - "bugs": { - "url": "https://github.com/ethereum/web3.js/issues" - }, - "dependencies": { - "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "crypto-js": "^3.1.4", - "utf8": "^2.1.1", - "xmlhttprequest": "*" - }, - "description": "Ethereum JavaScript API, middleware to talk to a ethereum node over RPC", - "devDependencies": { - "bower": ">=1.4.1", - "browserify": ">=10.0", - "chai": "^3.0.0", - "coveralls": "^2.11.2", - "del": ">=2.0.2", - "exorcist": "^0.4.0", - "gulp": ">=3.9.0", - "gulp-jshint": ">=1.5.0", - "gulp-rename": ">=1.2.0", - "gulp-replace": "^0.5.3", - "gulp-streamify": "0.0.5", - "gulp-uglify": ">=1.2.0", - "istanbul": "^0.4.4", - "jshint": ">=2.5.0", - "mocha": ">=2.3.3", - "sandboxed-module": "^2.0.2", - "vinyl-source-stream": "^1.1.0" - }, - "directories": { - "lib": "./lib" - }, - "dist": { - "shasum": "57af38245bff7a32099f7ce5780fad5bbc00da5b", - "tarball": "https://registry.npmjs.org/web3/-/web3-0.17.0-beta.tgz" - }, - "gitHead": "e4eb9606aa0aa10fd3eeb0a5e5d67c4fff43e814", - "homepage": "https://github.com/ethereum/web3.js", - "keywords": [ - "ethereum", - "javascript", - "API" - ], - "license": "LGPL-3.0", - "main": "./index.js", - "maintainers": [ - { - "email": "marek.kotewicz@gmail.com", - "name": "debris" - }, - { - "email": "fabian@frozeman.de", - "name": "frozeman" - } - ], - "name": "web3", - "namespace": "ethereum", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ethereum/web3.js.git" - }, - "scripts": { - "build": "gulp", - "lint": "jshint *.js lib", - "test": "mocha", - "test-coveralls": "istanbul cover _mocha -- -R spec && cat coverage/lcov.info | coveralls --verbose", - "watch": "gulp watch" - }, - "version": "0.17.0-beta" -} diff --git a/node_modules/web3/styleguide.md b/node_modules/web3/styleguide.md deleted file mode 100644 index 9140ca9..0000000 --- a/node_modules/web3/styleguide.md +++ /dev/null @@ -1,1741 +0,0 @@ -[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) - -# Airbnb JavaScript Style Guide() { - -*A mostly reasonable approach to JavaScript* - - -## Table of Contents - - 1. [Types](#types) - 1. [Objects](#objects) - 1. [Arrays](#arrays) - 1. [Strings](#strings) - 1. [Functions](#functions) - 1. [Properties](#properties) - 1. [Variables](#variables) - 1. [Hoisting](#hoisting) - 1. [Comparison Operators & Equality](#comparison-operators--equality) - 1. [Blocks](#blocks) - 1. [Comments](#comments) - 1. [Whitespace](#whitespace) - 1. [Commas](#commas) - 1. [Semicolons](#semicolons) - 1. [Type Casting & Coercion](#type-casting--coercion) - 1. [Naming Conventions](#naming-conventions) - 1. [Accessors](#accessors) - 1. [Constructors](#constructors) - 1. [Events](#events) - 1. [Modules](#modules) - 1. [jQuery](#jquery) - 1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility) - 1. [Testing](#testing) - 1. [Performance](#performance) - 1. [Resources](#resources) - 1. [In the Wild](#in-the-wild) - 1. [Translation](#translation) - 1. [The JavaScript Style Guide Guide](#the-javascript-style-guide-guide) - 1. [Chat With Us About Javascript](#chat-with-us-about-javascript) - 1. [Contributors](#contributors) - 1. [License](#license) - -## Types - - - **Primitives**: When you access a primitive type you work directly on its value. - - + `string` - + `number` - + `boolean` - + `null` - + `undefined` - - ```javascript - var foo = 1; - var bar = foo; - - bar = 9; - - console.log(foo, bar); // => 1, 9 - ``` - - **Complex**: When you access a complex type you work on a reference to its value. - - + `object` - + `array` - + `function` - - ```javascript - var foo = [1, 2]; - var bar = foo; - - bar[0] = 9; - - console.log(foo[0], bar[0]); // => 9, 9 - ``` - -**[⬆ back to top](#table-of-contents)** - -## Objects - - - Use the literal syntax for object creation. - - ```javascript - // bad - var item = new Object(); - - // good - var item = {}; - ``` - - - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). - - ```javascript - // bad - var superman = { - default: { clark: 'kent' }, - private: true - }; - - // good - var superman = { - defaults: { clark: 'kent' }, - hidden: true - }; - ``` - - - Use readable synonyms in place of reserved words. - - ```javascript - // bad - var superman = { - class: 'alien' - }; - - // bad - var superman = { - klass: 'alien' - }; - - // good - var superman = { - type: 'alien' - }; - ``` - -**[⬆ back to top](#table-of-contents)** - -## Arrays - - - Use the literal syntax for array creation. - - ```javascript - // bad - var items = new Array(); - - // good - var items = []; - ``` - - - Use Array#push instead of direct assignment to add items to an array. - - ```javascript - var someStack = []; - - - // bad - someStack[someStack.length] = 'abracadabra'; - - // good - someStack.push('abracadabra'); - ``` - - - When you need to copy an array use Array#slice. [jsPerf](http://jsperf.com/converting-arguments-to-an-array/7) - - ```javascript - var len = items.length; - var itemsCopy = []; - var i; - - // bad - for (i = 0; i < len; i++) { - itemsCopy[i] = items[i]; - } - - // good - itemsCopy = items.slice(); - ``` - - - To convert an array-like object to an array, use Array#slice. - - ```javascript - function trigger() { - var args = Array.prototype.slice.call(arguments); - ... - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Strings - - - Use single quotes `''` for strings. - - ```javascript - // bad - var name = "Bob Parr"; - - // good - var name = 'Bob Parr'; - - // bad - var fullName = "Bob " + this.lastName; - - // good - var fullName = 'Bob ' + this.lastName; - ``` - - - Strings longer than 80 characters should be written across multiple lines using string concatenation. - - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40). - - ```javascript - // bad - var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.'; - - // bad - var errorMessage = 'This is a super long error that was thrown because \ - of Batman. When you stop to think about how Batman had anything to do \ - with this, you would get nowhere \ - fast.'; - - // good - var errorMessage = 'This is a super long error that was thrown because ' + - 'of Batman. When you stop to think about how Batman had anything to do ' + - 'with this, you would get nowhere fast.'; - ``` - - - When programmatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2). - - ```javascript - var items; - var messages; - var length; - var i; - - messages = [{ - state: 'success', - message: 'This one worked.' - }, { - state: 'success', - message: 'This one worked as well.' - }, { - state: 'error', - message: 'This one did not work.' - }]; - - length = messages.length; - - // bad - function inbox(messages) { - items = '
            '; - - for (i = 0; i < length; i++) { - items += '
          • ' + messages[i].message + '
          • '; - } - - return items + '
          '; - } - - // good - function inbox(messages) { - items = []; - - for (i = 0; i < length; i++) { - // use direct assignment in this case because we're micro-optimizing. - items[i] = '
        • ' + messages[i].message + '
        • '; - } - - return '
            ' + items.join('') + '
          '; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Functions - - - Function expressions: - - ```javascript - // anonymous function expression - var anonymous = function() { - return true; - }; - - // named function expression - var named = function named() { - return true; - }; - - // immediately-invoked function expression (IIFE) - (function() { - console.log('Welcome to the Internet. Please follow me.'); - })(); - ``` - - - Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. - - **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97). - - ```javascript - // bad - if (currentUser) { - function test() { - console.log('Nope.'); - } - } - - // good - var test; - if (currentUser) { - test = function test() { - console.log('Yup.'); - }; - } - ``` - - - Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope. - - ```javascript - // bad - function nope(name, options, arguments) { - // ...stuff... - } - - // good - function yup(name, options, args) { - // ...stuff... - } - ``` - -**[⬆ back to top](#table-of-contents)** - - - -## Properties - - - Use dot notation when accessing properties. - - ```javascript - var luke = { - jedi: true, - age: 28 - }; - - // bad - var isJedi = luke['jedi']; - - // good - var isJedi = luke.jedi; - ``` - - - Use subscript notation `[]` when accessing properties with a variable. - - ```javascript - var luke = { - jedi: true, - age: 28 - }; - - function getProp(prop) { - return luke[prop]; - } - - var isJedi = getProp('jedi'); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Variables - - - Always use `var` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. - - ```javascript - // bad - superPower = new SuperPower(); - - // good - var superPower = new SuperPower(); - ``` - - - Use one `var` declaration per variable. - It's easier to add new variable declarations this way, and you never have - to worry about swapping out a `;` for a `,` or introducing punctuation-only - diffs. - - ```javascript - // bad - var items = getItems(), - goSportsTeam = true, - dragonball = 'z'; - - // bad - // (compare to above, and try to spot the mistake) - var items = getItems(), - goSportsTeam = true; - dragonball = 'z'; - - // good - var items = getItems(); - var goSportsTeam = true; - var dragonball = 'z'; - ``` - - - Declare unassigned variables last. This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables. - - ```javascript - // bad - var i, len, dragonball, - items = getItems(), - goSportsTeam = true; - - // bad - var i; - var items = getItems(); - var dragonball; - var goSportsTeam = true; - var len; - - // good - var items = getItems(); - var goSportsTeam = true; - var dragonball; - var length; - var i; - ``` - - - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues. - - ```javascript - // bad - function() { - test(); - console.log('doing stuff..'); - - //..other stuff.. - - var name = getName(); - - if (name === 'test') { - return false; - } - - return name; - } - - // good - function() { - var name = getName(); - - test(); - console.log('doing stuff..'); - - //..other stuff.. - - if (name === 'test') { - return false; - } - - return name; - } - - // bad - unnecessary function call - function() { - var name = getName(); - - if (!arguments.length) { - return false; - } - - this.setFirstName(name); - - return true; - } - - // good - function() { - var name; - - if (!arguments.length) { - return false; - } - - name = getName(); - this.setFirstName(name); - - return true; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Hoisting - - - Variable declarations get hoisted to the top of their scope, but their assignment does not. - - ```javascript - // we know this wouldn't work (assuming there - // is no notDefined global variable) - function example() { - console.log(notDefined); // => throws a ReferenceError - } - - // creating a variable declaration after you - // reference the variable will work due to - // variable hoisting. Note: the assignment - // value of `true` is not hoisted. - function example() { - console.log(declaredButNotAssigned); // => undefined - var declaredButNotAssigned = true; - } - - // The interpreter is hoisting the variable - // declaration to the top of the scope, - // which means our example could be rewritten as: - function example() { - var declaredButNotAssigned; - console.log(declaredButNotAssigned); // => undefined - declaredButNotAssigned = true; - } - ``` - - - Anonymous function expressions hoist their variable name, but not the function assignment. - - ```javascript - function example() { - console.log(anonymous); // => undefined - - anonymous(); // => TypeError anonymous is not a function - - var anonymous = function() { - console.log('anonymous function expression'); - }; - } - ``` - - - Named function expressions hoist the variable name, not the function name or the function body. - - ```javascript - function example() { - console.log(named); // => undefined - - named(); // => TypeError named is not a function - - superPower(); // => ReferenceError superPower is not defined - - var named = function superPower() { - console.log('Flying'); - }; - } - - // the same is true when the function name - // is the same as the variable name. - function example() { - console.log(named); // => undefined - - named(); // => TypeError named is not a function - - var named = function named() { - console.log('named'); - } - } - ``` - - - Function declarations hoist their name and the function body. - - ```javascript - function example() { - superPower(); // => Flying - - function superPower() { - console.log('Flying'); - } - } - ``` - - - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/). - -**[⬆ back to top](#table-of-contents)** - - - -## Comparison Operators & Equality - - - Use `===` and `!==` over `==` and `!=`. - - Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules: - - + **Objects** evaluate to **true** - + **Undefined** evaluates to **false** - + **Null** evaluates to **false** - + **Booleans** evaluate to **the value of the boolean** - + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true** - + **Strings** evaluate to **false** if an empty string `''`, otherwise **true** - - ```javascript - if ([0]) { - // true - // An array is an object, objects evaluate to true - } - ``` - - - Use shortcuts. - - ```javascript - // bad - if (name !== '') { - // ...stuff... - } - - // good - if (name) { - // ...stuff... - } - - // bad - if (collection.length > 0) { - // ...stuff... - } - - // good - if (collection.length) { - // ...stuff... - } - ``` - - - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll. - -**[⬆ back to top](#table-of-contents)** - - -## Blocks - - - Use braces with all multi-line blocks. - - ```javascript - // bad - if (test) - return false; - - // good - if (test) return false; - - // good - if (test) { - return false; - } - - // bad - function() { return false; } - - // good - function() { - return false; - } - ``` - - - If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your - `if` block's closing brace. - - ```javascript - // bad - if (test) { - thing1(); - thing2(); - } - else { - thing3(); - } - - // good - if (test) { - thing1(); - thing2(); - } else { - thing3(); - } - ``` - - -**[⬆ back to top](#table-of-contents)** - - -## Comments - - - Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values. - - ```javascript - // bad - // make() returns a new element - // based on the passed in tag name - // - // @param {String} tag - // @return {Element} element - function make(tag) { - - // ...stuff... - - return element; - } - - // good - /** - * make() returns a new element - * based on the passed in tag name - * - * @param {String} tag - * @return {Element} element - */ - function make(tag) { - - // ...stuff... - - return element; - } - ``` - - - Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment. - - ```javascript - // bad - var active = true; // is current tab - - // good - // is current tab - var active = true; - - // bad - function getType() { - console.log('fetching type...'); - // set the default type to 'no type' - var type = this._type || 'no type'; - - return type; - } - - // good - function getType() { - console.log('fetching type...'); - - // set the default type to 'no type' - var type = this._type || 'no type'; - - return type; - } - ``` - - - Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`. - - - Use `// FIXME:` to annotate problems. - - ```javascript - function Calculator() { - - // FIXME: shouldn't use a global here - total = 0; - - return this; - } - ``` - - - Use `// TODO:` to annotate solutions to problems. - - ```javascript - function Calculator() { - - // TODO: total should be configurable by an options param - this.total = 0; - - return this; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Whitespace - - - Use soft tabs set to 4 spaces. - - ```javascript - // good - function() { - ∙∙∙∙var name; - } - - // bad - function() { - ∙var name; - } - - // bad - function() { - ∙∙var name; - } - ``` - - - Place 1 space before the leading brace. - - ```javascript - // bad - function test(){ - console.log('test'); - } - - // good - function test() { - console.log('test'); - } - - // bad - dog.set('attr',{ - age: '1 year', - breed: 'Bernese Mountain Dog' - }); - - // good - dog.set('attr', { - age: '1 year', - breed: 'Bernese Mountain Dog' - }); - ``` - - - Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations. - - ```javascript - // bad - if(isJedi) { - fight (); - } - - // good - if (isJedi) { - fight(); - } - - // bad - function fight () { - console.log ('Swooosh!'); - } - - // good - function fight() { - console.log('Swooosh!'); - } - ``` - - - Set off operators with spaces. - - ```javascript - // bad - var x=y+5; - - // good - var x = y + 5; - ``` - - - End files with a single newline character. - - ```javascript - // bad - (function(global) { - // ...stuff... - })(this); - ``` - - ```javascript - // bad - (function(global) { - // ...stuff... - })(this);↵ - ↵ - ``` - - ```javascript - // good - (function(global) { - // ...stuff... - })(this);↵ - ``` - - - Use indentation when making long method chains. Use a leading dot, which - emphasizes that the line is a method call, not a new statement. - - ```javascript - // bad - $('#items').find('.selected').highlight().end().find('.open').updateCount(); - - // bad - $('#items'). - find('.selected'). - highlight(). - end(). - find('.open'). - updateCount(); - - // good - $('#items') - .find('.selected') - .highlight() - .end() - .find('.open') - .updateCount(); - - // bad - var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true) - .attr('width', (radius + margin) * 2).append('svg:g') - .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')') - .call(tron.led); - - // good - var leds = stage.selectAll('.led') - .data(data) - .enter().append('svg:svg') - .classed('led', true) - .attr('width', (radius + margin) * 2) - .append('svg:g') - .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')') - .call(tron.led); - ``` - - - Leave a blank line after blocks and before the next statement - - ```javascript - // bad - if (foo) { - return bar; - } - return baz; - - // good - if (foo) { - return bar; - } - - return baz; - - // bad - var obj = { - foo: function() { - }, - bar: function() { - } - }; - return obj; - - // good - var obj = { - foo: function() { - }, - - bar: function() { - } - }; - - return obj; - ``` - - -**[⬆ back to top](#table-of-contents)** - -## Commas - - - Leading commas: **Nope.** - - ```javascript - // bad - var story = [ - once - , upon - , aTime - ]; - - // good - var story = [ - once, - upon, - aTime - ]; - - // bad - var hero = { - firstName: 'Bob' - , lastName: 'Parr' - , heroName: 'Mr. Incredible' - , superPower: 'strength' - }; - - // good - var hero = { - firstName: 'Bob', - lastName: 'Parr', - heroName: 'Mr. Incredible', - superPower: 'strength' - }; - ``` - - - Additional trailing comma: **Nope.** This can cause problems with IE6/7 and IE9 if it's in quirksmode. Also, in some implementations of ES3 would add length to an array if it had an additional trailing comma. This was clarified in ES5 ([source](http://es5.github.io/#D)): - - > Edition 5 clarifies the fact that a trailing comma at the end of an ArrayInitialiser does not add to the length of the array. This is not a semantic change from Edition 3 but some implementations may have previously misinterpreted this. - - ```javascript - // bad - var hero = { - firstName: 'Kevin', - lastName: 'Flynn', - }; - - var heroes = [ - 'Batman', - 'Superman', - ]; - - // good - var hero = { - firstName: 'Kevin', - lastName: 'Flynn' - }; - - var heroes = [ - 'Batman', - 'Superman' - ]; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Semicolons - - - **Yup.** - - ```javascript - // bad - (function() { - var name = 'Skywalker' - return name - })() - - // good - (function() { - var name = 'Skywalker'; - return name; - })(); - - // good (guards against the function becoming an argument when two files with IIFEs are concatenated) - ;(function() { - var name = 'Skywalker'; - return name; - })(); - ``` - - [Read more](http://stackoverflow.com/a/7365214/1712802). - -**[⬆ back to top](#table-of-contents)** - - -## Type Casting & Coercion - - - Perform type coercion at the beginning of the statement. - - Strings: - - ```javascript - // => this.reviewScore = 9; - - // bad - var totalScore = this.reviewScore + ''; - - // good - var totalScore = '' + this.reviewScore; - - // bad - var totalScore = '' + this.reviewScore + ' total score'; - - // good - var totalScore = this.reviewScore + ' total score'; - ``` - - - Use `parseInt` for Numbers and always with a radix for type casting. - - ```javascript - var inputValue = '4'; - - // bad - var val = new Number(inputValue); - - // bad - var val = +inputValue; - - // bad - var val = inputValue >> 0; - - // bad - var val = parseInt(inputValue); - - // good - var val = Number(inputValue); - - // good - var val = parseInt(inputValue, 10); - ``` - - - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing. - - ```javascript - // good - /** - * parseInt was the reason my code was slow. - * Bitshifting the String to coerce it to a - * Number made it a lot faster. - */ - var val = inputValue >> 0; - ``` - - - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647: - - ```javascript - 2147483647 >> 0 //=> 2147483647 - 2147483648 >> 0 //=> -2147483648 - 2147483649 >> 0 //=> -2147483647 - ``` - - - Booleans: - - ```javascript - var age = 0; - - // bad - var hasAge = new Boolean(age); - - // good - var hasAge = Boolean(age); - - // good - var hasAge = !!age; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Naming Conventions - - - Avoid single letter names. Be descriptive with your naming. - - ```javascript - // bad - function q() { - // ...stuff... - } - - // good - function query() { - // ..stuff.. - } - ``` - - - Use camelCase when naming objects, functions, and instances. - - ```javascript - // bad - var OBJEcttsssss = {}; - var this_is_my_object = {}; - var o = {}; - function c() {} - - // good - var thisIsMyObject = {}; - function thisIsMyFunction() {} - ``` - - - Use PascalCase when naming constructors or classes. - - ```javascript - // bad - function user(options) { - this.name = options.name; - } - - var bad = new user({ - name: 'nope' - }); - - // good - function User(options) { - this.name = options.name; - } - - var good = new User({ - name: 'yup' - }); - ``` - - - Use a leading underscore `_` when naming private properties. - - ```javascript - // bad - this.__firstName__ = 'Panda'; - this.firstName_ = 'Panda'; - - // good - this._firstName = 'Panda'; - ``` - - - When saving a reference to `this` use `_this`. - - ```javascript - // bad - function() { - var self = this; - return function() { - console.log(self); - }; - } - - // bad - function() { - var that = this; - return function() { - console.log(that); - }; - } - - // good - function() { - var _this = this; - return function() { - console.log(_this); - }; - } - ``` - - - Name your functions. This is helpful for stack traces. - - ```javascript - // bad - var log = function(msg) { - console.log(msg); - }; - - // good - var log = function log(msg) { - console.log(msg); - }; - ``` - - - **Note:** IE8 and below exhibit some quirks with named function expressions. See [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) for more info. - - - If your file exports a single class, your filename should be exactly the name of the class. - ```javascript - // file contents - class CheckBox { - // ... - } - module.exports = CheckBox; - - // in some other file - // bad - var CheckBox = require('./checkBox'); - - // bad - var CheckBox = require('./check_box'); - - // good - var CheckBox = require('./CheckBox'); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Accessors - - - Accessor functions for properties are not required. - - If you do make accessor functions use getVal() and setVal('hello'). - - ```javascript - // bad - dragon.age(); - - // good - dragon.getAge(); - - // bad - dragon.age(25); - - // good - dragon.setAge(25); - ``` - - - If the property is a boolean, use isVal() or hasVal(). - - ```javascript - // bad - if (!dragon.age()) { - return false; - } - - // good - if (!dragon.hasAge()) { - return false; - } - ``` - - - It's okay to create get() and set() functions, but be consistent. - - ```javascript - function Jedi(options) { - options || (options = {}); - var lightsaber = options.lightsaber || 'blue'; - this.set('lightsaber', lightsaber); - } - - Jedi.prototype.set = function(key, val) { - this[key] = val; - }; - - Jedi.prototype.get = function(key) { - return this[key]; - }; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Constructors - - - Assign methods to the prototype object, instead of overwriting the prototype with a new object. Overwriting the prototype makes inheritance impossible: by resetting the prototype you'll overwrite the base! - - ```javascript - function Jedi() { - console.log('new jedi'); - } - - // bad - Jedi.prototype = { - fight: function fight() { - console.log('fighting'); - }, - - block: function block() { - console.log('blocking'); - } - }; - - // good - Jedi.prototype.fight = function fight() { - console.log('fighting'); - }; - - Jedi.prototype.block = function block() { - console.log('blocking'); - }; - ``` - - - Methods can return `this` to help with method chaining. - - ```javascript - // bad - Jedi.prototype.jump = function() { - this.jumping = true; - return true; - }; - - Jedi.prototype.setHeight = function(height) { - this.height = height; - }; - - var luke = new Jedi(); - luke.jump(); // => true - luke.setHeight(20); // => undefined - - // good - Jedi.prototype.jump = function() { - this.jumping = true; - return this; - }; - - Jedi.prototype.setHeight = function(height) { - this.height = height; - return this; - }; - - var luke = new Jedi(); - - luke.jump() - .setHeight(20); - ``` - - - - It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects. - - ```javascript - function Jedi(options) { - options || (options = {}); - this.name = options.name || 'no name'; - } - - Jedi.prototype.getName = function getName() { - return this.name; - }; - - Jedi.prototype.toString = function toString() { - return 'Jedi - ' + this.getName(); - }; - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Events - - - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of: - - ```js - // bad - $(this).trigger('listingUpdated', listing.id); - - ... - - $(this).on('listingUpdated', function(e, listingId) { - // do something with listingId - }); - ``` - - prefer: - - ```js - // good - $(this).trigger('listingUpdated', { listingId : listing.id }); - - ... - - $(this).on('listingUpdated', function(e, data) { - // do something with data.listingId - }); - ``` - - **[⬆ back to top](#table-of-contents)** - - -## Modules - - - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933) - - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export. - - Add a method called `noConflict()` that sets the exported module to the previous version and returns this one. - - Always declare `'use strict';` at the top of the module. - - ```javascript - // fancyInput/fancyInput.js - - !function(global) { - 'use strict'; - - var previousFancyInput = global.FancyInput; - - function FancyInput(options) { - this.options = options || {}; - } - - FancyInput.noConflict = function noConflict() { - global.FancyInput = previousFancyInput; - return FancyInput; - }; - - global.FancyInput = FancyInput; - }(this); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## jQuery - - - Prefix jQuery object variables with a `$`. - - ```javascript - // bad - var sidebar = $('.sidebar'); - - // good - var $sidebar = $('.sidebar'); - ``` - - - Cache jQuery lookups. - - ```javascript - // bad - function setSidebar() { - $('.sidebar').hide(); - - // ...stuff... - - $('.sidebar').css({ - 'background-color': 'pink' - }); - } - - // good - function setSidebar() { - var $sidebar = $('.sidebar'); - $sidebar.hide(); - - // ...stuff... - - $sidebar.css({ - 'background-color': 'pink' - }); - } - ``` - - - For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16) - - Use `find` with scoped jQuery object queries. - - ```javascript - // bad - $('ul', '.sidebar').hide(); - - // bad - $('.sidebar').find('ul').hide(); - - // good - $('.sidebar ul').hide(); - - // good - $('.sidebar > ul').hide(); - - // good - $sidebar.find('ul').hide(); - ``` - -**[⬆ back to top](#table-of-contents)** - - -## ECMAScript 5 Compatibility - - - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/). - -**[⬆ back to top](#table-of-contents)** - - -## Testing - - - **Yup.** - - ```javascript - function() { - return true; - } - ``` - -**[⬆ back to top](#table-of-contents)** - - -## Performance - - - [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/) - - [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2) - - [Try/Catch Cost In a Loop](http://jsperf.com/try-catch-in-loop-cost) - - [Bang Function](http://jsperf.com/bang-function) - - [jQuery Find vs Context, Selector](http://jsperf.com/jquery-find-vs-context-sel/13) - - [innerHTML vs textContent for script text](http://jsperf.com/innerhtml-vs-textcontent-for-script-text) - - [Long String Concatenation](http://jsperf.com/ya-string-concat) - - Loading... - -**[⬆ back to top](#table-of-contents)** - - -## Resources - - -**Read This** - - - [Annotated ECMAScript 5.1](http://es5.github.com/) - -**Tools** - - - Code Style Linters - + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc) - + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) - -**Other Style Guides** - - - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml) - - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines) - - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/) - - [JavaScript Standard Style](https://github.com/feross/standard) - -**Other Styles** - - - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen - - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen - - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun - - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman - -**Further Reading** - - - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll - - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer - - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz - - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban - - [Frontend Guidelines](https://github.com/bendc/frontend-guidelines) - Benjamin De Cock - -**Books** - - - [JavaScript: The Good Parts](http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford - - [JavaScript Patterns](http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov - - [Pro JavaScript Design Patterns](http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X) - Ross Harmes and Dustin Diaz - - [High Performance Web Sites: Essential Knowledge for Front-End Engineers](http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders - - [Maintainable JavaScript](http://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas - - [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw - - [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig - - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch - - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault - - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg - - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy - - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon - - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov - - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman - - [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke - - [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) - Kyle Simpson - -**Blogs** - - - [DailyJS](http://dailyjs.com/) - - [JavaScript Weekly](http://javascriptweekly.com/) - - [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/) - - [Bocoup Weblog](http://weblog.bocoup.com/) - - [Adequately Good](http://www.adequatelygood.com/) - - [NCZOnline](http://www.nczonline.net/) - - [Perfection Kills](http://perfectionkills.com/) - - [Ben Alman](http://benalman.com/) - - [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/) - - [Dustin Diaz](http://dustindiaz.com/) - - [nettuts](http://net.tutsplus.com/?s=javascript) - -**Podcasts** - - - [JavaScript Jabber](http://devchat.tv/js-jabber/) - - -**[⬆ back to top](#table-of-contents)** - -## In the Wild - - This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list. - - - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript) - - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript) - - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript) - - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript) - - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript) - - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript) - - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide) - - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript) - - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript) - - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide) - - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript) - - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide) - - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript) - - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript) - - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style) - - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript) - - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript) - - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide) - - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript) - - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions) - - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript) - - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript) - - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript) - - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript) - - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript) - - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript) - - **Muber**: [muber/javascript](https://github.com/muber/javascript) - - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript) - - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript) - - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript) - - **Nordic Venture Family**: [CodeDistillery/javascript](https://github.com/CodeDistillery/javascript) - - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript) - - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript) - - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide) - - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript) - - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide) - - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide) - - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide) - - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript) - - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript) - - **Target**: [target/javascript](https://github.com/target/javascript) - - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript) - - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript) - - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide) - - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript) - - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript) - - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript) - -## Translation - - This style guide is also available in other languages: - - - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide) - - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript) - - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide) - - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript) - - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide) - - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide) - - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide) - - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide) - - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide) - - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide) - - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript) - - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript) - - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide) - - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide) - -## The JavaScript Style Guide Guide - - - [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide) - -## Chat With Us About JavaScript - - - Find us on [gitter](https://gitter.im/airbnb/javascript). - -## Contributors - - - [View Contributors](https://github.com/airbnb/javascript/graphs/contributors) - - -## License - -(The MIT License) - -Copyright (c) 2014 Airbnb - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -**[⬆ back to top](#table-of-contents)** - -# }; diff --git a/node_modules/whatwg-fetch/LICENSE b/node_modules/whatwg-fetch/LICENSE deleted file mode 100644 index 0e319d5..0000000 --- a/node_modules/whatwg-fetch/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2014-2016 GitHub, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/whatwg-fetch/README.md b/node_modules/whatwg-fetch/README.md deleted file mode 100644 index 437ed24..0000000 --- a/node_modules/whatwg-fetch/README.md +++ /dev/null @@ -1,221 +0,0 @@ -# window.fetch polyfill - -This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to uphold this code. -[code-of-conduct]: http://todogroup.org/opencodeofconduct/#fetch/opensource@github.com - -The global `fetch` function is an easier way to make web requests and handle -responses than using an XMLHttpRequest. This polyfill is written as closely as -possible to the standard Fetch specification at https://fetch.spec.whatwg.org. - -## Installation - -Available on [Bower](http://bower.io) as **fetch**. - -```sh -$ bower install fetch -``` - -You'll also need a Promise polyfill for [older browsers](http://caniuse.com/#feat=promises). - -```sh -$ bower install es6-promise -``` - -This can also be installed with `npm`. - -```sh -$ npm install whatwg-fetch --save -``` - -For a node.js implementation, try [node-fetch](https://github.com/bitinn/node-fetch). - -For use with webpack, refer to [Using WebPack with shims and polyfills](http://mts.io/2015/04/08/webpack-shims-polyfills/). - -For babel and es2015+, make sure to import the file: - -```javascript -import 'whatwg-fetch'; -fetch(...); -``` - -## Usage - -The `fetch` function supports any HTTP method. We'll focus on GET and POST -example requests. - -### HTML - -```javascript -fetch('/users.html') - .then(function(response) { - return response.text() - }).then(function(body) { - document.body.innerHTML = body - }) -``` - -### JSON - -```javascript -fetch('/users.json') - .then(function(response) { - return response.json() - }).then(function(json) { - console.log('parsed json', json) - }).catch(function(ex) { - console.log('parsing failed', ex) - }) -``` - -### Response metadata - -```javascript -fetch('/users.json').then(function(response) { - console.log(response.headers.get('Content-Type')) - console.log(response.headers.get('Date')) - console.log(response.status) - console.log(response.statusText) -}) -``` - -### Post form - -```javascript -var form = document.querySelector('form') - -fetch('/users', { - method: 'POST', - body: new FormData(form) -}) -``` - -### Post JSON - -```javascript -fetch('/users', { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - name: 'Hubot', - login: 'hubot', - }) -}) -``` - -### File upload - -```javascript -var input = document.querySelector('input[type="file"]') - -var data = new FormData() -data.append('file', input.files[0]) -data.append('user', 'hubot') - -fetch('/avatars', { - method: 'POST', - body: data -}) -``` - -### Caveats - -The `fetch` specification differs from `jQuery.ajax()` in mainly two ways that -bear keeping in mind: - -* The Promise returned from `fetch()` **won't reject on HTTP error status** - even if the response is a HTTP 404 or 500. Instead, it will resolve normally, - and it will only reject on network failure, or if anything prevented the - request from completing. - -* By default, `fetch` **won't send any cookies** to the server, resulting in - unauthenticated requests if the site relies on maintaining a user session. - -#### Handling HTTP error statuses - -To have `fetch` Promise reject on HTTP error statuses, i.e. on any non-2xx -status, define a custom response handler: - -```javascript -function checkStatus(response) { - if (response.status >= 200 && response.status < 300) { - return response - } else { - var error = new Error(response.statusText) - error.response = response - throw error - } -} - -function parseJSON(response) { - return response.json() -} - -fetch('/users') - .then(checkStatus) - .then(parseJSON) - .then(function(data) { - console.log('request succeeded with JSON response', data) - }).catch(function(error) { - console.log('request failed', error) - }) -``` - -#### Sending cookies - -To automatically send cookies for the current domain, the `credentials` option -must be provided: - -```javascript -fetch('/users', { - credentials: 'same-origin' -}) -``` - -This option makes `fetch` behave similar to XMLHttpRequest with regards to -cookies. Otherwise, cookies won't get sent, resulting in these requests not -preserving the authentication session. - -Use the `include` value to send cookies in a [cross-origin resource sharing](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) (CORS) request. - -```javascript -fetch('https://example.com:1234/users', { - credentials: 'include' -}) -``` - - -#### Receiving cookies - -Like with XMLHttpRequest, the `Set-Cookie` response header returned from the -server is a [forbidden header name][] and therefore can't be programatically -read with `response.headers.get()`. Instead, it's the browser's responsibility -to handle new cookies being set (if applicable to the current URL). Unless they -are HTTP-only, new cookies will be available through `document.cookie`. - - [forbidden header name]: https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name - -#### Obtaining the Response URL - -Due to limitations of XMLHttpRequest, the `response.url` value might not be -reliable after HTTP redirects on older browsers. - -The solution is to configure the server to set the response HTTP header -`X-Request-URL` to the current URL after any redirect that might have happened. -It should be safe to set it unconditionally. - -``` ruby -# Ruby on Rails controller example -response.headers['X-Request-URL'] = request.url -``` - -This server workaround is necessary if you need reliable `response.url` in -Firefox < 32, Chrome < 37, Safari, or IE. - -## Browser Support - -![Chrome](https://raw.github.com/alrra/browser-logos/master/chrome/chrome_48x48.png) | ![Firefox](https://raw.github.com/alrra/browser-logos/master/firefox/firefox_48x48.png) | ![IE](https://raw.github.com/alrra/browser-logos/master/internet-explorer/internet-explorer_48x48.png) | ![Opera](https://raw.github.com/alrra/browser-logos/master/opera/opera_48x48.png) | ![Safari](https://raw.github.com/alrra/browser-logos/master/safari/safari_48x48.png) ---- | --- | --- | --- | --- | -Latest ✔ | Latest ✔ | 10+ ✔ | Latest ✔ | 6.1+ ✔ | diff --git a/node_modules/whatwg-fetch/fetch.js b/node_modules/whatwg-fetch/fetch.js deleted file mode 100644 index d0652de..0000000 --- a/node_modules/whatwg-fetch/fetch.js +++ /dev/null @@ -1,433 +0,0 @@ -(function(self) { - 'use strict'; - - if (self.fetch) { - return - } - - var support = { - searchParams: 'URLSearchParams' in self, - iterable: 'Symbol' in self && 'iterator' in Symbol, - blob: 'FileReader' in self && 'Blob' in self && (function() { - try { - new Blob() - return true - } catch(e) { - return false - } - })(), - formData: 'FormData' in self, - arrayBuffer: 'ArrayBuffer' in self - } - - function normalizeName(name) { - if (typeof name !== 'string') { - name = String(name) - } - if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { - throw new TypeError('Invalid character in header field name') - } - return name.toLowerCase() - } - - function normalizeValue(value) { - if (typeof value !== 'string') { - value = String(value) - } - return value - } - - // Build a destructive iterator for the value list - function iteratorFor(items) { - var iterator = { - next: function() { - var value = items.shift() - return {done: value === undefined, value: value} - } - } - - if (support.iterable) { - iterator[Symbol.iterator] = function() { - return iterator - } - } - - return iterator - } - - function Headers(headers) { - this.map = {} - - if (headers instanceof Headers) { - headers.forEach(function(value, name) { - this.append(name, value) - }, this) - - } else if (headers) { - Object.getOwnPropertyNames(headers).forEach(function(name) { - this.append(name, headers[name]) - }, this) - } - } - - Headers.prototype.append = function(name, value) { - name = normalizeName(name) - value = normalizeValue(value) - var list = this.map[name] - if (!list) { - list = [] - this.map[name] = list - } - list.push(value) - } - - Headers.prototype['delete'] = function(name) { - delete this.map[normalizeName(name)] - } - - Headers.prototype.get = function(name) { - var values = this.map[normalizeName(name)] - return values ? values[0] : null - } - - Headers.prototype.getAll = function(name) { - return this.map[normalizeName(name)] || [] - } - - Headers.prototype.has = function(name) { - return this.map.hasOwnProperty(normalizeName(name)) - } - - Headers.prototype.set = function(name, value) { - this.map[normalizeName(name)] = [normalizeValue(value)] - } - - Headers.prototype.forEach = function(callback, thisArg) { - Object.getOwnPropertyNames(this.map).forEach(function(name) { - this.map[name].forEach(function(value) { - callback.call(thisArg, value, name, this) - }, this) - }, this) - } - - Headers.prototype.keys = function() { - var items = [] - this.forEach(function(value, name) { items.push(name) }) - return iteratorFor(items) - } - - Headers.prototype.values = function() { - var items = [] - this.forEach(function(value) { items.push(value) }) - return iteratorFor(items) - } - - Headers.prototype.entries = function() { - var items = [] - this.forEach(function(value, name) { items.push([name, value]) }) - return iteratorFor(items) - } - - if (support.iterable) { - Headers.prototype[Symbol.iterator] = Headers.prototype.entries - } - - function consumed(body) { - if (body.bodyUsed) { - return Promise.reject(new TypeError('Already read')) - } - body.bodyUsed = true - } - - function fileReaderReady(reader) { - return new Promise(function(resolve, reject) { - reader.onload = function() { - resolve(reader.result) - } - reader.onerror = function() { - reject(reader.error) - } - }) - } - - function readBlobAsArrayBuffer(blob) { - var reader = new FileReader() - reader.readAsArrayBuffer(blob) - return fileReaderReady(reader) - } - - function readBlobAsText(blob) { - var reader = new FileReader() - reader.readAsText(blob) - return fileReaderReady(reader) - } - - function Body() { - this.bodyUsed = false - - this._initBody = function(body) { - this._bodyInit = body - if (typeof body === 'string') { - this._bodyText = body - } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { - this._bodyBlob = body - } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { - this._bodyFormData = body - } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { - this._bodyText = body.toString() - } else if (!body) { - this._bodyText = '' - } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) { - // Only support ArrayBuffers for POST method. - // Receiving ArrayBuffers happens via Blobs, instead. - } else { - throw new Error('unsupported BodyInit type') - } - - if (!this.headers.get('content-type')) { - if (typeof body === 'string') { - this.headers.set('content-type', 'text/plain;charset=UTF-8') - } else if (this._bodyBlob && this._bodyBlob.type) { - this.headers.set('content-type', this._bodyBlob.type) - } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { - this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8') - } - } - } - - if (support.blob) { - this.blob = function() { - var rejected = consumed(this) - if (rejected) { - return rejected - } - - if (this._bodyBlob) { - return Promise.resolve(this._bodyBlob) - } else if (this._bodyFormData) { - throw new Error('could not read FormData body as blob') - } else { - return Promise.resolve(new Blob([this._bodyText])) - } - } - - this.arrayBuffer = function() { - return this.blob().then(readBlobAsArrayBuffer) - } - - this.text = function() { - var rejected = consumed(this) - if (rejected) { - return rejected - } - - if (this._bodyBlob) { - return readBlobAsText(this._bodyBlob) - } else if (this._bodyFormData) { - throw new Error('could not read FormData body as text') - } else { - return Promise.resolve(this._bodyText) - } - } - } else { - this.text = function() { - var rejected = consumed(this) - return rejected ? rejected : Promise.resolve(this._bodyText) - } - } - - if (support.formData) { - this.formData = function() { - return this.text().then(decode) - } - } - - this.json = function() { - return this.text().then(JSON.parse) - } - - return this - } - - // HTTP methods whose capitalization should be normalized - var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'] - - function normalizeMethod(method) { - var upcased = method.toUpperCase() - return (methods.indexOf(upcased) > -1) ? upcased : method - } - - function Request(input, options) { - options = options || {} - var body = options.body - if (Request.prototype.isPrototypeOf(input)) { - if (input.bodyUsed) { - throw new TypeError('Already read') - } - this.url = input.url - this.credentials = input.credentials - if (!options.headers) { - this.headers = new Headers(input.headers) - } - this.method = input.method - this.mode = input.mode - if (!body) { - body = input._bodyInit - input.bodyUsed = true - } - } else { - this.url = input - } - - this.credentials = options.credentials || this.credentials || 'omit' - if (options.headers || !this.headers) { - this.headers = new Headers(options.headers) - } - this.method = normalizeMethod(options.method || this.method || 'GET') - this.mode = options.mode || this.mode || null - this.referrer = null - - if ((this.method === 'GET' || this.method === 'HEAD') && body) { - throw new TypeError('Body not allowed for GET or HEAD requests') - } - this._initBody(body) - } - - Request.prototype.clone = function() { - return new Request(this) - } - - function decode(body) { - var form = new FormData() - body.trim().split('&').forEach(function(bytes) { - if (bytes) { - var split = bytes.split('=') - var name = split.shift().replace(/\+/g, ' ') - var value = split.join('=').replace(/\+/g, ' ') - form.append(decodeURIComponent(name), decodeURIComponent(value)) - } - }) - return form - } - - function headers(xhr) { - var head = new Headers() - var pairs = (xhr.getAllResponseHeaders() || '').trim().split('\n') - pairs.forEach(function(header) { - var split = header.trim().split(':') - var key = split.shift().trim() - var value = split.join(':').trim() - head.append(key, value) - }) - return head - } - - Body.call(Request.prototype) - - function Response(bodyInit, options) { - if (!options) { - options = {} - } - - this.type = 'default' - this.status = options.status - this.ok = this.status >= 200 && this.status < 300 - this.statusText = options.statusText - this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers) - this.url = options.url || '' - this._initBody(bodyInit) - } - - Body.call(Response.prototype) - - Response.prototype.clone = function() { - return new Response(this._bodyInit, { - status: this.status, - statusText: this.statusText, - headers: new Headers(this.headers), - url: this.url - }) - } - - Response.error = function() { - var response = new Response(null, {status: 0, statusText: ''}) - response.type = 'error' - return response - } - - var redirectStatuses = [301, 302, 303, 307, 308] - - Response.redirect = function(url, status) { - if (redirectStatuses.indexOf(status) === -1) { - throw new RangeError('Invalid status code') - } - - return new Response(null, {status: status, headers: {location: url}}) - } - - self.Headers = Headers - self.Request = Request - self.Response = Response - - self.fetch = function(input, init) { - return new Promise(function(resolve, reject) { - var request - if (Request.prototype.isPrototypeOf(input) && !init) { - request = input - } else { - request = new Request(input, init) - } - - var xhr = new XMLHttpRequest() - - function responseURL() { - if ('responseURL' in xhr) { - return xhr.responseURL - } - - // Avoid security warnings on getResponseHeader when not allowed by CORS - if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) { - return xhr.getResponseHeader('X-Request-URL') - } - - return - } - - xhr.onload = function() { - var options = { - status: xhr.status, - statusText: xhr.statusText, - headers: headers(xhr), - url: responseURL() - } - var body = 'response' in xhr ? xhr.response : xhr.responseText - resolve(new Response(body, options)) - } - - xhr.onerror = function() { - reject(new TypeError('Network request failed')) - } - - xhr.ontimeout = function() { - reject(new TypeError('Network request failed')) - } - - xhr.open(request.method, request.url, true) - - if (request.credentials === 'include') { - xhr.withCredentials = true - } - - if ('responseType' in xhr && support.blob) { - xhr.responseType = 'blob' - } - - request.headers.forEach(function(value, name) { - xhr.setRequestHeader(name, value) - }) - - xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit) - }) - } - self.fetch.polyfill = true -})(typeof self !== 'undefined' ? self : this); diff --git a/node_modules/whatwg-fetch/package.json b/node_modules/whatwg-fetch/package.json deleted file mode 100644 index 4d7b803..0000000 --- a/node_modules/whatwg-fetch/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_args": [ - [ - "whatwg-fetch@>=0.10.0", - "/Users/jbaylina/git/MVP/node_modules/isomorphic-fetch" - ] - ], - "_from": "whatwg-fetch@>=0.10.0", - "_id": "whatwg-fetch@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/whatwg-fetch", - "_nodeVersion": "0.10.44", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/whatwg-fetch-1.0.0.tgz_1461876470856_0.9817740931175649" - }, - "_npmUser": { - "email": "mislav.marohnic@gmail.com", - "name": "mislav" - }, - "_npmVersion": "2.15.0", - "_phantomChildren": {}, - "_requested": { - "name": "whatwg-fetch", - "raw": "whatwg-fetch@>=0.10.0", - "rawSpec": ">=0.10.0", - "scope": null, - "spec": ">=0.10.0", - "type": "range" - }, - "_requiredBy": [ - "/isomorphic-fetch" - ], - "_resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz", - "_shasum": "01c2ac4df40e236aaa18480e3be74bd5c8eb798e", - "_shrinkwrap": null, - "_spec": "whatwg-fetch@>=0.10.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/isomorphic-fetch", - "bugs": { - "url": "https://github.com/github/fetch/issues" - }, - "dependencies": {}, - "description": "A window.fetch polyfill.", - "devDependencies": { - "bower": "1.3.8", - "chai": "1.10.0", - "jshint": "2.8.0", - "mocha": "2.1.0", - "mocha-phantomjs-core": "2.0.1", - "url-search-params": "0.5.0" - }, - "directories": {}, - "dist": { - "shasum": "01c2ac4df40e236aaa18480e3be74bd5c8eb798e", - "tarball": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz" - }, - "files": [ - "LICENSE", - "fetch.js" - ], - "gitHead": "ad96feb721393590a1b79dd2646854f5cbb16186", - "homepage": "https://github.com/github/fetch#readme", - "license": "MIT", - "main": "fetch.js", - "maintainers": [ - { - "email": "matt@mattandre.ws", - "name": "mattandrews" - }, - { - "email": "mislav.marohnic@gmail.com", - "name": "mislav" - } - ], - "name": "whatwg-fetch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/github/fetch.git" - }, - "scripts": {}, - "version": "1.0.0" -} diff --git a/node_modules/which-module/CHANGELOG.md b/node_modules/which-module/CHANGELOG.md deleted file mode 100644 index 6c8f5f2..0000000 --- a/node_modules/which-module/CHANGELOG.md +++ /dev/null @@ -1,11 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -# 1.0.0 (2016-06-06) - - -### Features - -* initial code ([08074cd](https://github.com/nexdrew/which-module/commit/08074cd)) diff --git a/node_modules/which-module/LICENSE b/node_modules/which-module/LICENSE deleted file mode 100644 index ab601b6..0000000 --- a/node_modules/which-module/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff --git a/node_modules/which-module/README.md b/node_modules/which-module/README.md deleted file mode 100644 index a8c4bf8..0000000 --- a/node_modules/which-module/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# which-module - -> Find the module object for something that was require()d - -[![Build Status](https://travis-ci.org/nexdrew/which-module.svg?branch=master)](https://travis-ci.org/nexdrew/which-module) -[![Coverage Status](https://coveralls.io/repos/github/nexdrew/which-module/badge.svg?branch=master)](https://coveralls.io/github/nexdrew/which-module?branch=master) -[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) - -Find the `module` object in `require.cache` for something that was `require()`d -or `import`ed - essentially a reverse `require()` lookup. - -Useful for libs that want to e.g. lookup a filename for a module or submodule -that it did not `require()` itself. - -## Install and Usage - -``` -npm install --save which-module -``` - -```js -const whichModule = require('which-module') - -console.log(whichModule(require('something'))) -// Module { -// id: '/path/to/project/node_modules/something/index.js', -// exports: [Function], -// parent: ..., -// filename: '/path/to/project/node_modules/something/index.js', -// loaded: true, -// children: [], -// paths: [ '/path/to/project/node_modules/something/node_modules', -// '/path/to/project/node_modules', -// '/path/to/node_modules', -// '/path/node_modules', -// '/node_modules' ] } -``` - -## API - -### `whichModule(exported)` - -Return the [`module` object](https://nodejs.org/api/modules.html#modules_the_module_object), -if any, that represents the given argument in the `require.cache`. - -`exported` can be anything that was previously `require()`d or `import`ed as a -module, submodule, or dependency - which means `exported` is identical to the -`module.exports` returned by this method. - -If `exported` did not come from the `exports` of a `module` in `require.cache`, -then this method returns `null`. - -## License - -ISC © Contributors diff --git a/node_modules/which-module/index.js b/node_modules/which-module/index.js deleted file mode 100644 index 45559b7..0000000 --- a/node_modules/which-module/index.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict' - -module.exports = function whichModule (exported) { - for (var i = 0, files = Object.keys(require.cache), mod; i < files.length; i++) { - mod = require.cache[files[i]] - if (mod.exports === exported) return mod - } - return null -} diff --git a/node_modules/which-module/package.json b/node_modules/which-module/package.json deleted file mode 100644 index 58308f7..0000000 --- a/node_modules/which-module/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "which-module@^1.0.0", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "which-module@>=1.0.0 <2.0.0", - "_id": "which-module@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/which-module", - "_nodeVersion": "5.11.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/which-module-1.0.0.tgz_1465192451403_0.19380306638777256" - }, - "_npmUser": { - "email": "andrew@npmjs.com", - "name": "nexdrew" - }, - "_npmVersion": "3.8.8", - "_phantomChildren": {}, - "_requested": { - "name": "which-module", - "raw": "which-module@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs" - ], - "_resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "_shasum": "bba63ca861948994ff307736089e3b96026c2a4f", - "_shrinkwrap": null, - "_spec": "which-module@^1.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "name": "nexdrew" - }, - "bugs": { - "url": "https://github.com/nexdrew/which-module/issues" - }, - "dependencies": {}, - "description": "Find the module object for something that was require()d", - "devDependencies": { - "ava": "^0.15.2", - "coveralls": "^2.11.9", - "nyc": "^6.4.4", - "standard": "^7.1.2", - "standard-version": "^2.3.0" - }, - "directories": {}, - "dist": { - "shasum": "bba63ca861948994ff307736089e3b96026c2a4f", - "tarball": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz" - }, - "files": [ - "index.js" - ], - "gitHead": "a5b7492798fac7e484fd8812d3d3a1138bb08784", - "homepage": "https://github.com/nexdrew/which-module#readme", - "keywords": [ - "which", - "module", - "exports", - "filename", - "require", - "reverse", - "lookup" - ], - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "andrew@npmjs.com", - "name": "nexdrew" - } - ], - "name": "which-module", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/nexdrew/which-module.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "pretest": "standard", - "release": "standard-version", - "test": "nyc ava" - }, - "version": "1.0.0" -} diff --git a/node_modules/window-size/LICENSE b/node_modules/window-size/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/window-size/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/window-size/README.md b/node_modules/window-size/README.md deleted file mode 100644 index 0985bd6..0000000 --- a/node_modules/window-size/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# window-size [![NPM version](https://badge.fury.io/js/window-size.svg)](http://badge.fury.io/js/window-size) [![Build Status](https://travis-ci.org/jonschlinkert/window-size.svg)](https://travis-ci.org/jonschlinkert/window-size) - -> Reliable way to to get the height and width of the terminal/console in a node.js environment. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i window-size --save -``` - -## Usage - -```js -var size = require('window-size'); -size.height; // "25" (rows) -size.width; // "80" (columns) -``` - -## Other projects - -* [base-cli](https://www.npmjs.com/package/base-cli): Plugin for base-methods that maps built-in methods to CLI args (also supports methods from a… [more](https://www.npmjs.com/package/base-cli) | [homepage](https://github.com/jonschlinkert/base-cli) -* [lint-deps](https://www.npmjs.com/package/lint-deps): CLI tool that tells you when dependencies are missing from package.json and offers you a… [more](https://www.npmjs.com/package/lint-deps) | [homepage](https://github.com/jonschlinkert/lint-deps) -* [yargs](https://www.npmjs.com/package/yargs): Light-weight option parsing with an argv hash. No optstrings attached. | [homepage](https://github.com/bcoe/yargs#readme) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/window-size/issues/new). - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2014-2015 [Jon Schlinkert](https://github.com/jonschlinkert) -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 15, 2015._ \ No newline at end of file diff --git a/node_modules/window-size/cli.js b/node_modules/window-size/cli.js deleted file mode 100755 index dd8d0e5..0000000 --- a/node_modules/window-size/cli.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node -'use strict'; -var helpText = ['Usage', -' $ window-size', -'', -'Example', -' $ window-size', -' height: 40 ', -' width : 145', -''].join('\n'); - -function showSize () { - var size = require('./'); - console.log('height: ' + size.height); - console.log('width : ' + size.width); -} - -if (process.argv.length > 2) { - switch (process.argv[2]) { - case 'help': - case '--help': - case '-h': - console.log(helpText); - break; - default: - showSize(); - } -} else { - showSize(); -} diff --git a/node_modules/window-size/index.js b/node_modules/window-size/index.js deleted file mode 100644 index cb9e7cb..0000000 --- a/node_modules/window-size/index.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -/*! - * window-size - * - * Copyright (c) 2014-2015 Jon Schlinkert - * Licensed under the MIT license. - */ - -var tty = require('tty'); - -module.exports = (function () { - var width; - var height; - - if (tty.isatty(1) && tty.isatty(2)) { - if (process.stdout.getWindowSize) { - width = process.stdout.getWindowSize(1)[0]; - height = process.stdout.getWindowSize(1)[1]; - } else if (tty.getWindowSize) { - width = tty.getWindowSize()[1]; - height = tty.getWindowSize()[0]; - } else if (process.stdout.columns && process.stdout.rows) { - height = process.stdout.rows; - width = process.stdout.columns; - } - } else { - Error('window-size could not get size with tty or process.stdout.'); - } - - return {height: height, width: width}; -})(); diff --git a/node_modules/window-size/package.json b/node_modules/window-size/package.json deleted file mode 100644 index 5e8d7bd..0000000 --- a/node_modules/window-size/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "window-size@^0.2.0", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "window-size@>=0.2.0 <0.3.0", - "_id": "window-size@0.2.0", - "_inCache": true, - "_installable": true, - "_location": "/window-size", - "_nodeVersion": "5.3.0", - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "window-size", - "raw": "window-size@^0.2.0", - "rawSpec": "^0.2.0", - "scope": null, - "spec": ">=0.2.0 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs" - ], - "_resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "_shasum": "b4315bb4214a3d7058ebeee892e13fa24d98b075", - "_shrinkwrap": null, - "_spec": "window-size@^0.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bin": { - "window-size": "cli.js" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/window-size/issues" - }, - "dependencies": {}, - "description": "Reliable way to to get the height and width of the terminal/console in a node.js environment.", - "devDependencies": { - "semistandard": "^7.0.2", - "tap": "^2.2.1" - }, - "directories": {}, - "dist": { - "shasum": "b4315bb4214a3d7058ebeee892e13fa24d98b075", - "tarball": "http://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz" - }, - "engines": { - "node": ">= 0.10.0" - }, - "files": [ - "index.js", - "cli.js" - ], - "gitHead": "538b4406a6f30c9a2c8f84ba38bb34a39775bd2b", - "homepage": "https://github.com/jonschlinkert/window-size", - "keywords": [ - "console", - "height", - "resize", - "size", - "terminal", - "tty", - "width", - "window" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "window-size", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/window-size.git" - }, - "scripts": { - "pretest": "semistandard", - "test": "tap --coverage test.js" - }, - "verb": { - "related": { - "list": [ - "yargs", - "lint-deps", - "base-cli" - ] - } - }, - "version": "0.2.0" -} diff --git a/node_modules/wrap-ansi/index.js b/node_modules/wrap-ansi/index.js deleted file mode 100755 index f00fa92..0000000 --- a/node_modules/wrap-ansi/index.js +++ /dev/null @@ -1,162 +0,0 @@ -'use strict'; -var stringWidth = require('string-width'); - -var ESCAPES = [ - '\u001b', - '\u009b' -]; - -var END_CODE = 39; - -var ESCAPE_CODES = { - 0: 0, - 1: 22, - 2: 22, - 3: 23, - 4: 24, - 7: 27, - 8: 28, - 9: 29, - 30: 39, - 31: 39, - 32: 39, - 33: 39, - 34: 39, - 35: 39, - 36: 39, - 37: 39, - 90: 39, - 40: 49, - 41: 49, - 42: 49, - 43: 49, - 44: 49, - 45: 49, - 46: 49, - 47: 49 -}; - -function wrapAnsi(code) { - return ESCAPES[0] + '[' + code + 'm'; -} - -// calculate the length of words split on ' ', ignoring -// the extra characters added by ansi escape codes. -function wordLengths(str) { - return str.split(' ').map(function (s) { - return stringWidth(s); - }); -} - -// wrap a long word across multiple rows. -// ansi escape codes do not count towards length. -function wrapWord(rows, word, cols) { - var insideEscape = false; - var visible = rows[rows.length - 1].length; - - for (var i = 0; i < word.length; i++) { - var x = word[i]; - - rows[rows.length - 1] += x; - - if (ESCAPES.indexOf(x) !== -1) { - insideEscape = true; - } else if (insideEscape && x === 'm') { - insideEscape = false; - continue; - } - - if (insideEscape) { - continue; - } - - visible++; - - if (visible >= cols && i < word.length - 1) { - rows.push(''); - visible = 0; - } - } - - // it's possible that the last row we copy over is only - // ansi escape characters, handle this edge-case. - if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { - rows[rows.length - 2] += rows.pop(); - } -} - -// the wrap-ansi module can be invoked -// in either 'hard' or 'soft' wrap mode. -// -// 'hard' will never allow a string to take up more -// than cols characters. -// -// 'soft' allows long words to expand past the column length. -function exec(str, cols, opts) { - var options = opts || {}; - - var pre = ''; - var ret = ''; - var escapeCode; - - var lengths = wordLengths(str); - var words = str.split(' '); - var rows = ['']; - - for (var i = 0, word; (word = words[i]) !== undefined; i++) { - var rowLength = stringWidth(rows[rows.length - 1]); - - if (rowLength) { - rows[rows.length - 1] += ' '; - rowLength++; - } - - // in 'hard' wrap mode, the length of a line is - // never allowed to extend past 'cols'. - if (lengths[i] > cols && options.hard) { - if (rowLength) { - rows.push(''); - } - wrapWord(rows, word, cols); - continue; - } - - if (rowLength + lengths[i] > cols && rowLength > 0) { - rows.push(''); - } - - rows[rows.length - 1] += word; - } - - pre = rows.map(function (r) { - return r.trim(); - }).join('\n'); - - for (var j = 0; j < pre.length; j++) { - var y = pre[j]; - - ret += y; - - if (ESCAPES.indexOf(y) !== -1) { - var code = parseFloat(/[0-9][^m]*/.exec(pre.slice(j, j + 4))); - escapeCode = code === END_CODE ? null : code; - } - - if (escapeCode && ESCAPE_CODES[escapeCode]) { - if (pre[j + 1] === '\n') { - ret += wrapAnsi(ESCAPE_CODES[escapeCode]); - } else if (y === '\n') { - ret += wrapAnsi(escapeCode); - } - } - } - - return ret; -} - -// for each line break, invoke the method separately. -module.exports = function (str, cols, opts) { - return String(str).split('\n').map(function (substr) { - return exec(substr, cols, opts); - }).join('\n'); -}; diff --git a/node_modules/wrap-ansi/license b/node_modules/wrap-ansi/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/wrap-ansi/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/wrap-ansi/package.json b/node_modules/wrap-ansi/package.json deleted file mode 100644 index 65f458a..0000000 --- a/node_modules/wrap-ansi/package.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "_args": [ - [ - "wrap-ansi@^2.0.0", - "/Users/jbaylina/git/MVP/node_modules/cliui" - ] - ], - "_from": "wrap-ansi@>=2.0.0 <3.0.0", - "_id": "wrap-ansi@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/wrap-ansi", - "_nodeVersion": "3.2.0", - "_npmUser": { - "email": "threedeecee@gmail.com", - "name": "dthree" - }, - "_npmVersion": "2.13.3", - "_phantomChildren": {}, - "_requested": { - "name": "wrap-ansi", - "raw": "wrap-ansi@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/cliui" - ], - "_resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.0.0.tgz", - "_shasum": "7d30f8f873f9a5bbc3a64dabc8d177e071ae426f", - "_shrinkwrap": null, - "_spec": "wrap-ansi@^2.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/cliui", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/chalk/wrap-ansi/issues" - }, - "dependencies": { - "string-width": "^1.0.1" - }, - "description": "Wordwrap a string with ANSI escape codes", - "devDependencies": { - "ava": "0.0.4", - "chalk": "^1.1.0", - "coveralls": "^2.11.4", - "has-ansi": "^2.0.0", - "nyc": "^3.2.2", - "strip-ansi": "^3.0.0", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "7d30f8f873f9a5bbc3a64dabc8d177e071ae426f", - "tarball": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "89e220072d4768ecd8c5d176ff50944d66ddcc2f", - "homepage": "https://github.com/chalk/wrap-ansi#readme", - "keywords": [ - "wrap", - "break", - "wordwrap", - "wordbreak", - "linewrap", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "license": "MIT", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "threedeecee@gmail.com", - "name": "dthree" - }, - { - "email": "jappelman@xebia.com", - "name": "jbnicolai" - }, - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "wrap-ansi", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/chalk/wrap-ansi.git" - }, - "scripts": { - "coverage": "nyc --reporter=text-lcov node test.js | coveralls", - "test": "xo && nyc node test.js" - }, - "version": "2.0.0" -} diff --git a/node_modules/wrap-ansi/readme.md b/node_modules/wrap-ansi/readme.md deleted file mode 100644 index f2e0a6a..0000000 --- a/node_modules/wrap-ansi/readme.md +++ /dev/null @@ -1,63 +0,0 @@ -# wrap-ansi [![Build Status](https://travis-ci.org/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.org/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/chalk/wrap-ansi/badge.svg?branch=master&service=github)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) - -> Wordwrap a string with [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) - - -## Install - -``` -$ npm install --save wrap-ansi -``` - - -## Usage - -```js -const chalk = require('chalk'); -const wrapAnsi = require('wrap-ansi'); - -const input = 'The quick brown ' + chalk.red('fox jumped over ') + - 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); - -console.log(wrapAnsi(input, 20)); -``` - - - - -## API - -### wrapAnsi(input, columns, [options]) - -Wrap words to the specified column width. - -#### input - -Type: `string` - -String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). - -#### columns - -Type: `number` - -Number of columns to wrap the text to. - -#### options.hard - -Type: `boolean` -Default: `false` - -By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. - - -## Related - -- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right -- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/wrappy/LICENSE b/node_modules/wrappy/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/wrappy/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/wrappy/README.md b/node_modules/wrappy/README.md deleted file mode 100644 index 98eab25..0000000 --- a/node_modules/wrappy/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# wrappy - -Callback wrapping utility - -## USAGE - -```javascript -var wrappy = require("wrappy") - -// var wrapper = wrappy(wrapperFunction) - -// make sure a cb is called only once -// See also: http://npm.im/once for this specific use case -var once = wrappy(function (cb) { - var called = false - return function () { - if (called) return - called = true - return cb.apply(this, arguments) - } -}) - -function printBoo () { - console.log('boo') -} -// has some rando property -printBoo.iAmBooPrinter = true - -var onlyPrintOnce = once(printBoo) - -onlyPrintOnce() // prints 'boo' -onlyPrintOnce() // does nothing - -// random property is retained! -assert.equal(onlyPrintOnce.iAmBooPrinter, true) -``` diff --git a/node_modules/wrappy/package.json b/node_modules/wrappy/package.json deleted file mode 100644 index 9824ec4..0000000 --- a/node_modules/wrappy/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "wrappy@1", - "/Users/jbaylina/git/MVP/node_modules/inflight" - ] - ], - "_from": "wrappy@>=1.0.0 <2.0.0", - "_id": "wrappy@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/wrappy", - "_nodeVersion": "5.10.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/wrappy-1.0.2.tgz_1463527848281_0.037129373755306005" - }, - "_npmUser": { - "email": "kat@sykosomatic.org", - "name": "zkat" - }, - "_npmVersion": "3.9.1", - "_phantomChildren": {}, - "_requested": { - "name": "wrappy", - "raw": "wrappy@1", - "rawSpec": "1", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/inflight", - "/once" - ], - "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "_shrinkwrap": null, - "_spec": "wrappy@1", - "_where": "/Users/jbaylina/git/MVP/node_modules/inflight", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/npm/wrappy/issues" - }, - "dependencies": {}, - "description": "Callback wrapping utility", - "devDependencies": { - "tap": "^2.3.1" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "tarball": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - }, - "files": [ - "wrappy.js" - ], - "gitHead": "71d91b6dc5bdeac37e218c2cf03f9ab55b60d214", - "homepage": "https://github.com/npm/wrappy", - "license": "ISC", - "main": "wrappy.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - }, - { - "email": "kat@sykosomatic.org", - "name": "zkat" - } - ], - "name": "wrappy", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/wrappy.git" - }, - "scripts": { - "test": "tap --coverage test/*.js" - }, - "version": "1.0.2" -} diff --git a/node_modules/wrappy/wrappy.js b/node_modules/wrappy/wrappy.js deleted file mode 100644 index bb7e7d6..0000000 --- a/node_modules/wrappy/wrappy.js +++ /dev/null @@ -1,33 +0,0 @@ -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - - return wrapper - - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } -} diff --git a/node_modules/xhr/.npmignore b/node_modules/xhr/.npmignore deleted file mode 100644 index 2b34843..0000000 --- a/node_modules/xhr/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -*.err -.DS_Store \ No newline at end of file diff --git a/node_modules/xhr/CONTRIBUTING.md b/node_modules/xhr/CONTRIBUTING.md deleted file mode 100644 index 3d4053b..0000000 --- a/node_modules/xhr/CONTRIBUTING.md +++ /dev/null @@ -1,27 +0,0 @@ -# XHR is an OPEN Open Source Project - ------------------------------------------ - -## What? - -Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. - -## Rules - -There are a few basic ground-rules for contributors: - -1. **No `--force` pushes** or modifying the Git history in any way. -1. **Non-master branches** ought to be used for ongoing work. -1. **External API changes and significant modifications** ought to be subject to an **internal pull-request** to solicit feedback from other contributors. -1. Internal pull-requests to solicit feedback are *encouraged* for any other non-trivial contribution but left to the discretion of the contributor. -1. Contributors should attempt to adhere to the prevailing code-style. - -## Releases - -Declaring formal releases remains the prerogative of the project maintainer. - -## Changes to this arrangement - -This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change. - ------------------------------------------ diff --git a/node_modules/xhr/LICENCE b/node_modules/xhr/LICENCE deleted file mode 100644 index a23e08a..0000000 --- a/node_modules/xhr/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/xhr/README.md b/node_modules/xhr/README.md deleted file mode 100644 index 9046bde..0000000 --- a/node_modules/xhr/README.md +++ /dev/null @@ -1,213 +0,0 @@ -# xhr - -A small XMLHttpRequest wrapper. Designed for use with [browserify](http://browserify.org/), [webpack](https://webpack.github.io/) etc. - -API is a subset of [request](https://github.com/request/request) so that the same code can be used in the browser and Node.js. - -Browser support: IE8+ and everything else. - -## Example - -```js -var xhr = require("xhr") - -xhr({ - body: someJSONString, - uri: "/foo", - headers: { - "Content-Type": "application/json" - } -}, function (err, resp, body) { - // check resp.statusCode -}) -``` - -## `var req = xhr(options, callback)` - -```js -type XhrOptions = String | { - useXDR: Boolean?, - sync: Boolean?, - uri: String, - url: String, - method: String?, - timeout: Number?, - headers: Object?, - body: String?, - json: Object?, - username: String?, - password: String?, - withCredentials: Boolean?, - responseType: String?, - beforeSend: Function? -} -xhr := (XhrOptions, Callback) => Request -``` -the returned object is either an [`XMLHttpRequest`][3] instance - or an [`XDomainRequest`][4] instance (if on IE8/IE9 && - `options.useXDR` is set to `true`) - -Your callback will be called once with the arguments - ( [`Error`][5], `response` , `body` ) where the response is an object: -```js -{ - body: Object||String, - statusCode: Number, - method: String, - headers: {}, - url: String, - rawRequest: xhr -} -``` - - `body`: HTTP response body - [`XMLHttpRequest.response`][6], [`XMLHttpRequest.responseText`][7] or - [`XMLHttpRequest.responseXML`][8] depending on the request type. - - `rawRequest`: Original [`XMLHttpRequest`][3] instance - or [`XDomainRequest`][4] instance (if on IE8/IE9 && - `options.useXDR` is set to `true`) - - `headers`: A collection of headers where keys are header names converted to lowercase - - -Your callback will be called with an [`Error`][5] if there is an error in the browser that prevents sending the request. -A HTTP 500 response is not going to cause an error to be returned. - -## Other signatures - -* `var req = xhr(url, callback)` - -a simple string instead of the options. In this case, a GET request will be made to that url. - -* `var req = xhr(url, options, callback)` - -the above may also be called with the standard set of options. - -### Convience methods -* `var req = xhr.{post, put, patch, del, head, get}(url, callback)` -* `var req = xhr.{post, put, patch, del, head, get}(options, callback)` -* `var req = xhr.{post, put, patch, del, head, get}(url, options, callback)` - -The `xhr` module has convience functions attached that will make requests with the given method. -Each function is named after its method, with the exception of `DELETE` which is called `xhr.del` for compatibility. - -The method shorthands may be combined with the url-first form of `xhr` for succinct and descriptive requests. For example, - -```js -xhr.post('/post-to-me', function(err, resp) { - console.log(resp.body) -}) -``` - -or - -```js -xhr.del('/delete-me', { headers: { my: 'auth' } }, function (err, resp) { - console.log(resp.statusCode); -}) -``` - -## Options - -### `options.method` - -Specify the method the [`XMLHttpRequest`][3] should be opened - with. Passed to [`XMLHttpRequest.open`][2]. Defaults to "GET" - -### `options.useXDR` - -Specify whether this is a cross origin (CORS) request for IE<10. - Switches IE to use [`XDomainRequest`][4] instead of `XMLHttpRequest`. - Ignored in other browsers. - -Note that headers cannot be set on an XDomainRequest instance. - -### `options.sync` - -Specify whether this is a synchrounous request. Note that when - this is true the callback will be called synchronously. In - most cases this option should not be used. Only use if you - know what you are doing! - -### `options.body` - -Pass in body to be send across the [`XMLHttpRequest`][3]. - Generally should be a string. But anything that's valid as - a parameter to [`XMLHttpRequest.send`][1] should work (Buffer for file, etc.). - -### `options.uri` or `options.url` - -The uri to send a request to. Passed to [`XMLHttpRequest.open`][2]. `options.url` and `options.uri` are aliases for each other. - -### `options.headers` - -An object of headers that should be set on the request. The - key, value pair is passed to [`XMLHttpRequest.setRequestHeader`][9] - -### `options.timeout` - -Number of miliseconds to wait for response. Defaults to 0 (no timeout). Ignored when `options.sync` is true. - -### `options.json` - -A valid JSON serializable value to be send to the server. If this - is set then we serialize the value and use that as the body. - We also set the Content-Type to `"application/json"`. - -Additionally the response body is parsed as JSON - -### `options.withCredentials` - -Specify whether user credentials are to be included in a cross-origin - request. Sets [`XMLHttpRequest.withCredentials`][10]. Defaults to false. - -A wildcard `*` cannot be used in the `Access-Control-Allow-Origin` header when `withCredentials` is true. - The header needs to specify your origin explicitly or browser will abort the request. - -### `options.responseType` - -Determines the data type of the `response`. Sets [`XMLHttpRequest.responseType`][11]. For example, a `responseType` of `document` will return a parsed `Document` object as the `response.body` for an XML resource. - -### `options.beforeSend` - -A function being called right before the `send` method of the `XMLHttpRequest` or `XDomainRequest` instance is called. The `XMLHttpRequest` or `XDomainRequest` instance is passed as an argument. - -### `options.xhr` - -Pass an `XMLHttpRequest` object (or something that acts like one) to use instead of constructing a new one using the `XMLHttpRequest` or `XDomainRequest` constructors. Useful for testing. - -## FAQ - -- Why is my server's JSON response not parsed? I returned the right content-type. - - See `options.json` - you can set it to `true` on a GET request to tell `xhr` to parse the response body. - - Without `options.json` body is returned as-is (a string or when `responseType` is set and the browser supports it - a result of parsing JSON or XML) -- How do I send an object or array as POST body? - - `options.body` should be a string. You need to serialize your object before passing to `xhr` for sending. - - To serialize to JSON you can use - `options.json` instead of `options.body` for convenience - then `xhr` will do the serialization and set content-type accordingly. -- Where's stream API? `.pipe()` etc. - - Not implemented. You can't reasonably have that in the browser. - - -## Mocking Requests -You can override the constructor used to create new requests for testing. When you're making a new request: - -```js -xhr({ xhr: new MockXMLHttpRequest() }) -``` - -or you can override the constructors used to create requests at the module level: - -```js -xhr.XMLHttpRequest = MockXMLHttpRequest -xhr.XDomainRequest = MockXDomainRequest -``` - -## MIT Licenced - - [1]: http://xhr.spec.whatwg.org/#the-send()-method - [2]: http://xhr.spec.whatwg.org/#the-open()-method - [3]: http://xhr.spec.whatwg.org/#interface-xmlhttprequest - [4]: http://msdn.microsoft.com/en-us/library/ie/cc288060(v=vs.85).aspx - [5]: http://es5.github.com/#x15.11 - [6]: http://xhr.spec.whatwg.org/#the-response-attribute - [7]: http://xhr.spec.whatwg.org/#the-responsetext-attribute - [8]: http://xhr.spec.whatwg.org/#the-responsexml-attribute - [9]: http://xhr.spec.whatwg.org/#the-setrequestheader()-method - [10]: http://xhr.spec.whatwg.org/#the-withcredentials-attribute - [11]: https://xhr.spec.whatwg.org/#the-responsetype-attribute diff --git a/node_modules/xhr/index.js b/node_modules/xhr/index.js deleted file mode 100644 index a1deb4d..0000000 --- a/node_modules/xhr/index.js +++ /dev/null @@ -1,235 +0,0 @@ -"use strict"; -var window = require("global/window") -var isFunction = require("is-function") -var parseHeaders = require("parse-headers") -var xtend = require("xtend") - -module.exports = createXHR -createXHR.XMLHttpRequest = window.XMLHttpRequest || noop -createXHR.XDomainRequest = "withCredentials" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest - -forEachArray(["get", "put", "post", "patch", "head", "delete"], function(method) { - createXHR[method === "delete" ? "del" : method] = function(uri, options, callback) { - options = initParams(uri, options, callback) - options.method = method.toUpperCase() - return _createXHR(options) - } -}) - -function forEachArray(array, iterator) { - for (var i = 0; i < array.length; i++) { - iterator(array[i]) - } -} - -function isEmpty(obj){ - for(var i in obj){ - if(obj.hasOwnProperty(i)) return false - } - return true -} - -function initParams(uri, options, callback) { - var params = uri - - if (isFunction(options)) { - callback = options - if (typeof uri === "string") { - params = {uri:uri} - } - } else { - params = xtend(options, {uri: uri}) - } - - params.callback = callback - return params -} - -function createXHR(uri, options, callback) { - options = initParams(uri, options, callback) - return _createXHR(options) -} - -function _createXHR(options) { - if(typeof options.callback === "undefined"){ - throw new Error("callback argument missing") - } - - var called = false - var callback = function cbOnce(err, response, body){ - if(!called){ - called = true - options.callback(err, response, body) - } - } - - function readystatechange() { - if (xhr.readyState === 4) { - loadFunc() - } - } - - function getBody() { - // Chrome with requestType=blob throws errors arround when even testing access to responseText - var body = undefined - - if (xhr.response) { - body = xhr.response - } else { - body = xhr.responseText || getXml(xhr) - } - - if (isJson) { - try { - body = JSON.parse(body) - } catch (e) {} - } - - return body - } - - var failureResponse = { - body: undefined, - headers: {}, - statusCode: 0, - method: method, - url: uri, - rawRequest: xhr - } - - function errorFunc(evt) { - clearTimeout(timeoutTimer) - if(!(evt instanceof Error)){ - evt = new Error("" + (evt || "Unknown XMLHttpRequest Error") ) - } - evt.statusCode = 0 - return callback(evt, failureResponse) - } - - // will load the data & process the response in a special response object - function loadFunc() { - if (aborted) return - var status - clearTimeout(timeoutTimer) - if(options.useXDR && xhr.status===undefined) { - //IE8 CORS GET successful response doesn't have a status field, but body is fine - status = 200 - } else { - status = (xhr.status === 1223 ? 204 : xhr.status) - } - var response = failureResponse - var err = null - - if (status !== 0){ - response = { - body: getBody(), - statusCode: status, - method: method, - headers: {}, - url: uri, - rawRequest: xhr - } - if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE - response.headers = parseHeaders(xhr.getAllResponseHeaders()) - } - } else { - err = new Error("Internal XMLHttpRequest Error") - } - return callback(err, response, response.body) - } - - var xhr = options.xhr || null - - if (!xhr) { - if (options.cors || options.useXDR) { - xhr = new createXHR.XDomainRequest() - }else{ - xhr = new createXHR.XMLHttpRequest() - } - } - - var key - var aborted - var uri = xhr.url = options.uri || options.url - var method = xhr.method = options.method || "GET" - var body = options.body || options.data || null - var headers = xhr.headers = options.headers || {} - var sync = !!options.sync - var isJson = false - var timeoutTimer - - if ("json" in options) { - isJson = true - headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json") //Don't override existing accept header declared by user - if (method !== "GET" && method !== "HEAD") { - headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json") //Don't override existing accept header declared by user - body = JSON.stringify(options.json) - } - } - - xhr.onreadystatechange = readystatechange - xhr.onload = loadFunc - xhr.onerror = errorFunc - // IE9 must have onprogress be set to a unique function. - xhr.onprogress = function () { - // IE must die - } - xhr.ontimeout = errorFunc - xhr.open(method, uri, !sync, options.username, options.password) - //has to be after open - if(!sync) { - xhr.withCredentials = !!options.withCredentials - } - // Cannot set timeout with sync request - // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly - // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent - if (!sync && options.timeout > 0 ) { - timeoutTimer = setTimeout(function(){ - aborted=true//IE9 may still call readystatechange - xhr.abort("timeout") - var e = new Error("XMLHttpRequest timeout") - e.code = "ETIMEDOUT" - errorFunc(e) - }, options.timeout ) - } - - if (xhr.setRequestHeader) { - for(key in headers){ - if(headers.hasOwnProperty(key)){ - xhr.setRequestHeader(key, headers[key]) - } - } - } else if (options.headers && !isEmpty(options.headers)) { - throw new Error("Headers cannot be set on an XDomainRequest object") - } - - if ("responseType" in options) { - xhr.responseType = options.responseType - } - - if ("beforeSend" in options && - typeof options.beforeSend === "function" - ) { - options.beforeSend(xhr) - } - - xhr.send(body) - - return xhr - - -} - -function getXml(xhr) { - if (xhr.responseType === "document") { - return xhr.responseXML - } - var firefoxBugTakenEffect = xhr.status === 204 && xhr.responseXML && xhr.responseXML.documentElement.nodeName === "parsererror" - if (xhr.responseType === "" && !firefoxBugTakenEffect) { - return xhr.responseXML - } - - return null -} - -function noop() {} diff --git a/node_modules/xhr/node_modules/xtend/.jshintrc b/node_modules/xhr/node_modules/xtend/.jshintrc deleted file mode 100644 index 77887b5..0000000 --- a/node_modules/xhr/node_modules/xtend/.jshintrc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "maxdepth": 4, - "maxstatements": 200, - "maxcomplexity": 12, - "maxlen": 80, - "maxparams": 5, - - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": false, - "noarg": true, - "noempty": true, - "nonew": true, - "undef": true, - "unused": "vars", - "trailing": true, - - "quotmark": true, - "expr": true, - "asi": true, - - "browser": false, - "esnext": true, - "devel": false, - "node": false, - "nonstandard": false, - - "predef": ["require", "module", "__dirname", "__filename"] -} diff --git a/node_modules/xhr/node_modules/xtend/.npmignore b/node_modules/xhr/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/xhr/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/xhr/node_modules/xtend/LICENCE b/node_modules/xhr/node_modules/xtend/LICENCE deleted file mode 100644 index 1a14b43..0000000 --- a/node_modules/xhr/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/xhr/node_modules/xtend/Makefile b/node_modules/xhr/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf..0000000 --- a/node_modules/xhr/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/xhr/node_modules/xtend/README.md b/node_modules/xhr/node_modules/xtend/README.md deleted file mode 100644 index 093cb29..0000000 --- a/node_modules/xhr/node_modules/xtend/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# xtend - -[![browser support][3]][4] - -[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Extend like a boss - -xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. - -## Examples - -```js -var extend = require("xtend") - -// extend returns a new object. Does not mutate arguments -var combination = extend({ - a: "a", - b: 'c' -}, { - b: "b" -}) -// { a: "a", b: "b" } -``` - -## Stability status: Locked - -## MIT Licenced - - - [3]: http://ci.testling.com/Raynos/xtend.png - [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/xhr/node_modules/xtend/immutable.js b/node_modules/xhr/node_modules/xtend/immutable.js deleted file mode 100644 index 94889c9..0000000 --- a/node_modules/xhr/node_modules/xtend/immutable.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/xhr/node_modules/xtend/mutable.js b/node_modules/xhr/node_modules/xtend/mutable.js deleted file mode 100644 index 72debed..0000000 --- a/node_modules/xhr/node_modules/xtend/mutable.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/node_modules/xhr/node_modules/xtend/package.json b/node_modules/xhr/node_modules/xtend/package.json deleted file mode 100644 index 24b7f83..0000000 --- a/node_modules/xhr/node_modules/xtend/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "xtend@^4.0.0", - "/Users/jbaylina/git/MVP/node_modules/xhr" - ] - ], - "_from": "xtend@>=4.0.0 <5.0.0", - "_id": "xtend@4.0.1", - "_inCache": true, - "_installable": true, - "_location": "/xhr/xtend", - "_nodeVersion": "0.10.32", - "_npmUser": { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - "_npmVersion": "2.14.1", - "_phantomChildren": {}, - "_requested": { - "name": "xtend", - "raw": "xtend@^4.0.0", - "rawSpec": "^4.0.0", - "scope": null, - "spec": ">=4.0.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/xhr" - ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "_shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "_shrinkwrap": null, - "_spec": "xtend@^4.0.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/xhr", - "author": { - "email": "raynos2@gmail.com", - "name": "Raynos" - }, - "bugs": { - "email": "raynos2@gmail.com", - "url": "https://github.com/Raynos/xtend/issues" - }, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Matt Esch" - } - ], - "dependencies": {}, - "description": "extend like a boss", - "devDependencies": { - "tape": "~1.1.0" - }, - "directories": {}, - "dist": { - "shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "tarball": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - }, - "engines": { - "node": ">=0.4" - }, - "gitHead": "23dc302a89756da89c1897bc732a752317e35390", - "homepage": "https://github.com/Raynos/xtend", - "keywords": [ - "extend", - "merge", - "options", - "opts", - "object", - "array" - ], - "license": "MIT", - "main": "immutable", - "maintainers": [ - { - "email": "raynos2@gmail.com", - "name": "raynos" - } - ], - "name": "xtend", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xtend.git" - }, - "scripts": { - "test": "node test" - }, - "testling": { - "browsers": [ - "ie/7..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ], - "files": "test.js" - }, - "version": "4.0.1" -} diff --git a/node_modules/xhr/node_modules/xtend/test.js b/node_modules/xhr/node_modules/xtend/test.js deleted file mode 100644 index 093a2b0..0000000 --- a/node_modules/xhr/node_modules/xtend/test.js +++ /dev/null @@ -1,83 +0,0 @@ -var test = require("tape") -var extend = require("./") -var mutableExtend = require("./mutable") - -test("merge", function(assert) { - var a = { a: "foo" } - var b = { b: "bar" } - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("replace", function(assert) { - var a = { a: "foo" } - var b = { a: "bar" } - - assert.deepEqual(extend(a, b), { a: "bar" }) - assert.end() -}) - -test("undefined", function(assert) { - var a = { a: undefined } - var b = { b: "foo" } - - assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) - assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) - assert.end() -}) - -test("handle 0", function(assert) { - var a = { a: "default" } - var b = { a: 0 } - - assert.deepEqual(extend(a, b), { a: 0 }) - assert.deepEqual(extend(b, a), { a: "default" }) - assert.end() -}) - -test("is immutable", function (assert) { - var record = {} - - extend(record, { foo: "bar" }) - assert.equal(record.foo, undefined) - assert.end() -}) - -test("null as argument", function (assert) { - var a = { foo: "bar" } - var b = null - var c = void 0 - - assert.deepEqual(extend(b, a, c), { foo: "bar" }) - assert.end() -}) - -test("mutable", function (assert) { - var a = { foo: "bar" } - - mutableExtend(a, { bar: "baz" }) - - assert.equal(a.bar, "baz") - assert.end() -}) - -test("null prototype", function(assert) { - var a = { a: "foo" } - var b = Object.create(null) - b.b = "bar"; - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("null prototype mutable", function (assert) { - var a = { foo: "bar" } - var b = Object.create(null) - b.bar = "baz"; - - mutableExtend(a, b) - - assert.equal(a.bar, "baz") - assert.end() -}) diff --git a/node_modules/xhr/package.json b/node_modules/xhr/package.json deleted file mode 100644 index 5a4240b..0000000 --- a/node_modules/xhr/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "xhr@^2.2.0", - "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine" - ] - ], - "_from": "xhr@>=2.2.0 <3.0.0", - "_id": "xhr@2.2.2", - "_inCache": true, - "_installable": true, - "_location": "/xhr", - "_nodeVersion": "4.4.7", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/xhr-2.2.2.tgz_1469193055246_0.2910006339661777" - }, - "_npmUser": { - "email": "naugtur@gmail.com", - "name": "naugtur" - }, - "_npmVersion": "2.15.8", - "_phantomChildren": {}, - "_requested": { - "name": "xhr", - "raw": "xhr@^2.2.0", - "rawSpec": "^2.2.0", - "scope": null, - "spec": ">=2.2.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/web3-provider-engine" - ], - "_resolved": "https://registry.npmjs.org/xhr/-/xhr-2.2.2.tgz", - "_shasum": "2ee72571869f8686d41559a9ea286c18971435ff", - "_shrinkwrap": null, - "_spec": "xhr@^2.2.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/web3-provider-engine", - "author": { - "email": "raynos2@gmail.com", - "name": "Raynos" - }, - "bugs": { - "email": "raynos2@gmail.com", - "url": "https://github.com/Raynos/xhr/issues" - }, - "contributors": [ - { - "name": "Jake Verbaten" - } - ], - "dependencies": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - }, - "description": "small xhr abstraction", - "devDependencies": { - "for-each": "^0.3.2", - "pre-commit": "1.0.10", - "run-browser": "github:naugtur/run-browser", - "tap-spec": "^4.0.2", - "tape": "^4.0.0" - }, - "directories": {}, - "dist": { - "shasum": "2ee72571869f8686d41559a9ea286c18971435ff", - "tarball": "https://registry.npmjs.org/xhr/-/xhr-2.2.2.tgz" - }, - "gitHead": "4b44f2895aa9e967812a07d7569c9fef8a070bd6", - "homepage": "https://github.com/Raynos/xhr", - "keywords": [ - "xhr", - "http", - "xmlhttprequest", - "xhr2", - "browserify" - ], - "license": "MIT", - "main": "index", - "maintainers": [ - { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - { - "email": "naugtur@gmail.com", - "name": "naugtur" - } - ], - "name": "xhr", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xhr.git" - }, - "scripts": { - "browser": "run-browser -m test/mock-server.js test/index.js", - "test": "run-browser test/index.js -b -m test/mock-server.js | tap-spec" - }, - "version": "2.2.2" -} diff --git a/node_modules/xhr/test/index.js b/node_modules/xhr/test/index.js deleted file mode 100644 index 651ea94..0000000 --- a/node_modules/xhr/test/index.js +++ /dev/null @@ -1,287 +0,0 @@ -var window = require("global/window") -var test = require("tape") -var forEach = require("for-each") - -var xhr = require("../index.js") - -test("constructs and calls callback without throwing", function(assert) { - xhr({}, function(err, resp, body) { - assert.ok(true, "got here") - assert.end() - }) -}) - -test("[func] Can GET a url (cross-domain)", function(assert) { - xhr({ - uri: "http://www.mocky.io/v2/55a02cb72651260b1a94f024", - useXDR: true - }, function(err, resp, body) { - assert.ifError(err, "no err") - assert.equal(resp.statusCode, 200) - assert.equal(typeof resp.rawRequest, "object") - assert.notEqual(resp.body.length, 0) - assert.equal(resp.body, '{"a":1}') - assert.notEqual(body.length, 0) - assert.end() - }) -}) - -test("[func] Returns http error responses like npm's request (cross-domain)", function(assert) { - if (!window.XDomainRequest) { - xhr({ - uri: "http://www.mocky.io/v2/55a02d63265126221a94f025", - useXDR: true - }, function(err, resp, body) { - assert.ifError(err, "no err") - assert.equal(resp.statusCode, 404) - assert.equal(typeof resp.rawRequest, "object") - assert.end() - }) - } else { - assert.end(); - } -}) - -test("[func] Returns a falsy body for 204 responses", function(assert) { - xhr({ - uri: "/mock/no-content" - }, function(err, resp, body) { - assert.notOk(body, "body should be falsey") - assert.equal(resp.statusCode, 204) - assert.end() - }) -}) - -test("[func] Calls the callback once even if error is thrown issue #127", function(assert) { - var count = 0; - setTimeout(function(){ - assert.equal(count, 1, "expected one call") - assert.end() - },100) - try{ - xhr({ - uri: "instanterror://foo" - }, function(err, resp, body) { - count++; - throw Error("dummy error") - }) - } catch(e){} -}) - -test("[func] Times out to an error ", function(assert) { - xhr({ - timeout: 1, - uri: "/mock/timeout" - }, function(err, resp, body) { - assert.ok(err instanceof Error, "should return error") - assert.equal(err.message, "XMLHttpRequest timeout") - assert.equal(err.code, "ETIMEDOUT") - assert.equal(resp.statusCode, 0) - assert.end() - }) -}) - -test("withCredentials option", function(assert) { - if (!window.XDomainRequest) { - var req = xhr({}, function() {}) - assert.ok(!req.withCredentials, - "withCredentials not true" - ) - req = xhr({ - withCredentials: true - }, function() {}) - assert.ok( - req.withCredentials, - "withCredentials set to true" - ) - } - assert.end() -}) - -test("withCredentials ignored when using synchronous requests", function(assert) { - if (!window.XDomainRequest) { - var req = xhr({ - withCredentials: true, - sync: true - }, function() {}) - assert.ok(!req.withCredentials, - "sync overrides withCredentials" - ) - } - assert.end() -}) - -test("XDR usage (run on IE8 or 9)", function(assert) { - var req = xhr({ - useXDR: true, - uri: window.location.href, - }, function() {}) - - assert.ok(!window.XDomainRequest || window.XDomainRequest === req.constructor, - "Uses XDR when told to" - ) - - - if (!!window.XDomainRequest) { - assert.throws(function() { - xhr({ - useXDR: true, - uri: window.location.href, - headers: { - "foo": "bar" - } - }, function() {}) - }, true, "Throws when trying to send headers with XDR") - } - assert.end() -}) - -test("handles errorFunc call with no arguments provided", function(assert) { - var req = xhr({}, function(err) { - assert.ok(err instanceof Error, "callback should get an error") - assert.equal(err.message, "Unknown XMLHttpRequest Error", "error message incorrect") - }) - assert.doesNotThrow(function() { - req.onerror() - }, "should not throw when error handler called without arguments") - assert.end() - -}) - -test("constructs and calls callback without throwing", function(assert) { - assert.throws(function() { - xhr({}) - }, "callback is not optional") - assert.end() -}) - -if (!window.XDomainRequest) { - var methods = ["get", "put", "post", "patch"] -} else { - var methods = ["get", "post"] -} - -test("[func] xhr[method] get, put, post, patch", function(assert) { - var i = 0 - - forEach(methods, function(method) { - xhr[method]({ - uri: "/mock/200ok" - }, function(err, resp, body) { - i++ - assert.ifError(err, "no err") - assert.equal(resp.statusCode, 200) - assert.equal(resp.method, method.toUpperCase()) - if (i === methods.length) assert.end() - }) - }) -}) - -test("xhr[method] get, put, post, patch with url shorthands", function(assert) { - var i = 0 - forEach(methods, function(method) { - var req = xhr[method]("/some-test", function() {}) - i++ - assert.equal(req.method, method.toUpperCase()) - - if (i === methods.length) assert.end() - }) -}) - - -test("xhr[method] get, put, post, patch with url shorthands and options", function(assert) { - var i = 0 - forEach(methods, function(method) { - var req = xhr[method]("/some-test", { - headers: { - foo: 'bar' - } - }, function(err, resp, body) { - i++ - assert.equal(resp.rawRequest.headers.foo, 'bar') - assert.equal(resp.method, method.toUpperCase()) - - if (i === methods.length) assert.end() - }) - }) -}) -if (!window.XDomainRequest) { - test("[func] xhr.head", function(assert) { - xhr.head({ - uri: "/mock/200ok", - }, function(err, resp, body) { - assert.ifError(err, "no err") - assert.equal(resp.statusCode, 200) - assert.equal(resp.method, "HEAD") - assert.notOk(resp.body) - assert.end() - }) - }) - - test("xhr.head url shorthand", function(assert) { - xhr.head("/mock/200ok", function(err, resp, body) { - assert.equal(resp.method, "HEAD") - assert.end() - }) - }) - - test("[func] xhr.del", function(assert) { - xhr.del({ - uri: "/mock/200ok" - }, function(err, resp, body) { - assert.ifError(err, "no err") - assert.equal(resp.statusCode, 200) - assert.equal(resp.method, "DELETE") - assert.end() - }) - }) - - test("xhr.del url shorthand", function(assert) { - xhr.del("/mock/200ok", function(err, resp, body) { - assert.equal(resp.method, "DELETE") - assert.end() - }) - }) -} -test("url signature without object", function(assert) { - xhr("/some-test", function(err, resp, body) { - assert.equal(resp.url, '/some-test') - assert.end() - }) -}) - -test("url signature with object", function(assert) { - xhr("/some-test", { - headers: { - "foo": "bar" - } - }, function(err, resp, body) { - assert.equal(resp.url, '/some-test') - assert.equal(resp.rawRequest.headers.foo, 'bar') - assert.end() - }) -}) - -test("XHR can be overridden", function(assert) { - var xhrs = 0 - var noop = function() {} - var fakeXHR = function() { - xhrs++ - this.open = this.send = noop - } - var xdrs = 0 - var fakeXDR = function() { - xdrs++ - this.open = this.send = noop - } - xhr.XMLHttpRequest = fakeXHR - xhr({}, function() {}) - assert.equal(xhrs, 1, "created the custom XHR") - - xhr.XDomainRequest = fakeXDR - xhr({ - useXDR: true - }, function() {}); - assert.equal(xdrs, 1, "created the custom XDR") - assert.end() -}) diff --git a/node_modules/xhr/test/mock-server.js b/node_modules/xhr/test/mock-server.js deleted file mode 100644 index 5d7d57d..0000000 --- a/node_modules/xhr/test/mock-server.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = function (req, res) { - console.log('mock:',req.url) - if (req.url === '/mock/200ok') { - res.statusCode = 200 - res.end('') - } else if (req.url === '/mock/no-content') { - res.statusCode = 204 - res.end('') - } else if (req.url === '/mock/timeout') { - setTimeout(function() { - res.statusCode = 200 - res.end() - }, 100) - } -} diff --git a/node_modules/xmlhttprequest/.jshintrc b/node_modules/xmlhttprequest/.jshintrc deleted file mode 100644 index 3df2adc..0000000 --- a/node_modules/xmlhttprequest/.jshintrc +++ /dev/null @@ -1,26 +0,0 @@ -{ - "node": true, - "browser": false, - "esnext": true, - "bitwise": false, - "camelcase": true, - "curly": true, - "eqeqeq": true, - "eqnull": true, - "immed": true, - "indent": 2, - "latedef": true, - "laxbreak": true, - "newcap": true, - "noarg": true, - "quotmark": "double", - "regexp": true, - "undef": true, - "unused": true, - "strict": true, - "trailing": true, - "smarttabs": true, - "globals": { - "define": false - } -} diff --git a/node_modules/xmlhttprequest/.npmignore b/node_modules/xmlhttprequest/.npmignore deleted file mode 100644 index 97b5e9b..0000000 --- a/node_modules/xmlhttprequest/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -example -tests - -autotest.watchr diff --git a/node_modules/xmlhttprequest/LICENSE b/node_modules/xmlhttprequest/LICENSE deleted file mode 100644 index 1c63271..0000000 --- a/node_modules/xmlhttprequest/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - Copyright (c) 2010 passive.ly LLC - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/xmlhttprequest/README.md b/node_modules/xmlhttprequest/README.md deleted file mode 100644 index 50039f9..0000000 --- a/node_modules/xmlhttprequest/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# node-XMLHttpRequest # - -node-XMLHttpRequest is a wrapper for the built-in http client to emulate the -browser XMLHttpRequest object. - -This can be used with JS designed for browsers to improve reuse of code and -allow the use of existing libraries. - -Note: This library currently conforms to [XMLHttpRequest 1](http://www.w3.org/TR/XMLHttpRequest/). Version 2.0 will target [XMLHttpRequest Level 2](http://www.w3.org/TR/XMLHttpRequest2/). - -## Usage ## - -Here's how to include the module in your project and use as the browser-based -XHR object. - - var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; - var xhr = new XMLHttpRequest(); - -Note: use the lowercase string "xmlhttprequest" in your require(). On -case-sensitive systems (eg Linux) using uppercase letters won't work. - -## Versions ## - -Prior to 1.4.0 version numbers were arbitrary. From 1.4.0 on they conform to -the standard major.minor.bugfix. 1.x shouldn't necessarily be considered -stable just because it's above 0.x. - -Since the XMLHttpRequest API is stable this library's API is stable as -well. Major version numbers indicate significant core code changes. -Minor versions indicate minor core code changes or better conformity to -the W3C spec. - -## License ## - -MIT license. See LICENSE for full details. - -## Supports ## - -* Async and synchronous requests -* GET, POST, PUT, and DELETE requests -* All spec methods (open, send, abort, getRequestHeader, - getAllRequestHeaders, event methods) -* Requests to all domains - -## Known Issues / Missing Features ## - -For a list of open issues or to report your own visit the [github issues -page](https://github.com/driverdan/node-XMLHttpRequest/issues). - -* Local file access may have unexpected results for non-UTF8 files -* Synchronous requests don't set headers properly -* Synchronous requests freeze node while waiting for response (But that's what you want, right? Stick with async!). -* Some events are missing, such as abort -* Cookies aren't persisted between requests -* Missing XML support diff --git a/node_modules/xmlhttprequest/lib/XMLHttpRequest.js b/node_modules/xmlhttprequest/lib/XMLHttpRequest.js deleted file mode 100644 index 4893913..0000000 --- a/node_modules/xmlhttprequest/lib/XMLHttpRequest.js +++ /dev/null @@ -1,620 +0,0 @@ -/** - * Wrapper for built-in http.js to emulate the browser XMLHttpRequest object. - * - * This can be used with JS designed for browsers to improve reuse of code and - * allow the use of existing libraries. - * - * Usage: include("XMLHttpRequest.js") and use XMLHttpRequest per W3C specs. - * - * @author Dan DeFelippi - * @contributor David Ellis - * @license MIT - */ - -var Url = require("url"); -var spawn = require("child_process").spawn; -var fs = require("fs"); - -exports.XMLHttpRequest = function() { - "use strict"; - - /** - * Private variables - */ - var self = this; - var http = require("http"); - var https = require("https"); - - // Holds http.js objects - var request; - var response; - - // Request settings - var settings = {}; - - // Disable header blacklist. - // Not part of XHR specs. - var disableHeaderCheck = false; - - // Set some default headers - var defaultHeaders = { - "User-Agent": "node-XMLHttpRequest", - "Accept": "*/*", - }; - - var headers = {}; - var headersCase = {}; - - // These headers are not user setable. - // The following are allowed but banned in the spec: - // * user-agent - var forbiddenRequestHeaders = [ - "accept-charset", - "accept-encoding", - "access-control-request-headers", - "access-control-request-method", - "connection", - "content-length", - "content-transfer-encoding", - "cookie", - "cookie2", - "date", - "expect", - "host", - "keep-alive", - "origin", - "referer", - "te", - "trailer", - "transfer-encoding", - "upgrade", - "via" - ]; - - // These request methods are not allowed - var forbiddenRequestMethods = [ - "TRACE", - "TRACK", - "CONNECT" - ]; - - // Send flag - var sendFlag = false; - // Error flag, used when errors occur or abort is called - var errorFlag = false; - - // Event listeners - var listeners = {}; - - /** - * Constants - */ - - this.UNSENT = 0; - this.OPENED = 1; - this.HEADERS_RECEIVED = 2; - this.LOADING = 3; - this.DONE = 4; - - /** - * Public vars - */ - - // Current state - this.readyState = this.UNSENT; - - // default ready state change handler in case one is not set or is set late - this.onreadystatechange = null; - - // Result & response - this.responseText = ""; - this.responseXML = ""; - this.status = null; - this.statusText = null; - - // Whether cross-site Access-Control requests should be made using - // credentials such as cookies or authorization headers - this.withCredentials = false; - - /** - * Private methods - */ - - /** - * Check if the specified header is allowed. - * - * @param string header Header to validate - * @return boolean False if not allowed, otherwise true - */ - var isAllowedHttpHeader = function(header) { - return disableHeaderCheck || (header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1); - }; - - /** - * Check if the specified method is allowed. - * - * @param string method Request method to validate - * @return boolean False if not allowed, otherwise true - */ - var isAllowedHttpMethod = function(method) { - return (method && forbiddenRequestMethods.indexOf(method) === -1); - }; - - /** - * Public methods - */ - - /** - * Open the connection. Currently supports local server requests. - * - * @param string method Connection method (eg GET, POST) - * @param string url URL for the connection. - * @param boolean async Asynchronous connection. Default is true. - * @param string user Username for basic authentication (optional) - * @param string password Password for basic authentication (optional) - */ - this.open = function(method, url, async, user, password) { - this.abort(); - errorFlag = false; - - // Check for valid request method - if (!isAllowedHttpMethod(method)) { - throw new Error("SecurityError: Request method not allowed"); - } - - settings = { - "method": method, - "url": url.toString(), - "async": (typeof async !== "boolean" ? true : async), - "user": user || null, - "password": password || null - }; - - setState(this.OPENED); - }; - - /** - * Disables or enables isAllowedHttpHeader() check the request. Enabled by default. - * This does not conform to the W3C spec. - * - * @param boolean state Enable or disable header checking. - */ - this.setDisableHeaderCheck = function(state) { - disableHeaderCheck = state; - }; - - /** - * Sets a header for the request or appends the value if one is already set. - * - * @param string header Header name - * @param string value Header value - */ - this.setRequestHeader = function(header, value) { - if (this.readyState !== this.OPENED) { - throw new Error("INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN"); - } - if (!isAllowedHttpHeader(header)) { - console.warn("Refused to set unsafe header \"" + header + "\""); - return; - } - if (sendFlag) { - throw new Error("INVALID_STATE_ERR: send flag is true"); - } - header = headersCase[header.toLowerCase()] || header; - headersCase[header.toLowerCase()] = header; - headers[header] = headers[header] ? headers[header] + ', ' + value : value; - }; - - /** - * Gets a header from the server response. - * - * @param string header Name of header to get. - * @return string Text of the header or null if it doesn't exist. - */ - this.getResponseHeader = function(header) { - if (typeof header === "string" - && this.readyState > this.OPENED - && response - && response.headers - && response.headers[header.toLowerCase()] - && !errorFlag - ) { - return response.headers[header.toLowerCase()]; - } - - return null; - }; - - /** - * Gets all the response headers. - * - * @return string A string with all response headers separated by CR+LF - */ - this.getAllResponseHeaders = function() { - if (this.readyState < this.HEADERS_RECEIVED || errorFlag) { - return ""; - } - var result = ""; - - for (var i in response.headers) { - // Cookie headers are excluded - if (i !== "set-cookie" && i !== "set-cookie2") { - result += i + ": " + response.headers[i] + "\r\n"; - } - } - return result.substr(0, result.length - 2); - }; - - /** - * Gets a request header - * - * @param string name Name of header to get - * @return string Returns the request header or empty string if not set - */ - this.getRequestHeader = function(name) { - if (typeof name === "string" && headersCase[name.toLowerCase()]) { - return headers[headersCase[name.toLowerCase()]]; - } - - return ""; - }; - - /** - * Sends the request to the server. - * - * @param string data Optional data to send as request body. - */ - this.send = function(data) { - if (this.readyState !== this.OPENED) { - throw new Error("INVALID_STATE_ERR: connection must be opened before send() is called"); - } - - if (sendFlag) { - throw new Error("INVALID_STATE_ERR: send has already been called"); - } - - var ssl = false, local = false; - var url = Url.parse(settings.url); - var host; - // Determine the server - switch (url.protocol) { - case "https:": - ssl = true; - // SSL & non-SSL both need host, no break here. - case "http:": - host = url.hostname; - break; - - case "file:": - local = true; - break; - - case undefined: - case null: - case "": - host = "localhost"; - break; - - default: - throw new Error("Protocol not supported."); - } - - // Load files off the local filesystem (file://) - if (local) { - if (settings.method !== "GET") { - throw new Error("XMLHttpRequest: Only GET method is supported"); - } - - if (settings.async) { - fs.readFile(url.pathname, "utf8", function(error, data) { - if (error) { - self.handleError(error); - } else { - self.status = 200; - self.responseText = data; - setState(self.DONE); - } - }); - } else { - try { - this.responseText = fs.readFileSync(url.pathname, "utf8"); - this.status = 200; - setState(self.DONE); - } catch(e) { - this.handleError(e); - } - } - - return; - } - - // Default to port 80. If accessing localhost on another port be sure - // to use http://localhost:port/path - var port = url.port || (ssl ? 443 : 80); - // Add query string if one is used - var uri = url.pathname + (url.search ? url.search : ""); - - // Set the defaults if they haven't been set - for (var name in defaultHeaders) { - if (!headersCase[name.toLowerCase()]) { - headers[name] = defaultHeaders[name]; - } - } - - // Set the Host header or the server may reject the request - headers.Host = host; - if (!((ssl && port === 443) || port === 80)) { - headers.Host += ":" + url.port; - } - - // Set Basic Auth if necessary - if (settings.user) { - if (typeof settings.password === "undefined") { - settings.password = ""; - } - var authBuf = new Buffer(settings.user + ":" + settings.password); - headers.Authorization = "Basic " + authBuf.toString("base64"); - } - - // Set content length header - if (settings.method === "GET" || settings.method === "HEAD") { - data = null; - } else if (data) { - headers["Content-Length"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data); - - if (!headers["Content-Type"]) { - headers["Content-Type"] = "text/plain;charset=UTF-8"; - } - } else if (settings.method === "POST") { - // For a post with no data set Content-Length: 0. - // This is required by buggy servers that don't meet the specs. - headers["Content-Length"] = 0; - } - - var options = { - host: host, - port: port, - path: uri, - method: settings.method, - headers: headers, - agent: false, - withCredentials: self.withCredentials - }; - - // Reset error flag - errorFlag = false; - - // Handle async requests - if (settings.async) { - // Use the proper protocol - var doRequest = ssl ? https.request : http.request; - - // Request is being sent, set send flag - sendFlag = true; - - // As per spec, this is called here for historical reasons. - self.dispatchEvent("readystatechange"); - - // Handler for the response - var responseHandler = function responseHandler(resp) { - // Set response var to the response we got back - // This is so it remains accessable outside this scope - response = resp; - // Check for redirect - // @TODO Prevent looped redirects - if (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) { - // Change URL to the redirect location - settings.url = response.headers.location; - var url = Url.parse(settings.url); - // Set host var in case it's used later - host = url.hostname; - // Options for the new request - var newOptions = { - hostname: url.hostname, - port: url.port, - path: url.path, - method: response.statusCode === 303 ? "GET" : settings.method, - headers: headers, - withCredentials: self.withCredentials - }; - - // Issue the new request - request = doRequest(newOptions, responseHandler).on("error", errorHandler); - request.end(); - // @TODO Check if an XHR event needs to be fired here - return; - } - - response.setEncoding("utf8"); - - setState(self.HEADERS_RECEIVED); - self.status = response.statusCode; - - response.on("data", function(chunk) { - // Make sure there's some data - if (chunk) { - self.responseText += chunk; - } - // Don't emit state changes if the connection has been aborted. - if (sendFlag) { - setState(self.LOADING); - } - }); - - response.on("end", function() { - if (sendFlag) { - // Discard the end event if the connection has been aborted - setState(self.DONE); - sendFlag = false; - } - }); - - response.on("error", function(error) { - self.handleError(error); - }); - }; - - // Error handler for the request - var errorHandler = function errorHandler(error) { - self.handleError(error); - }; - - // Create the request - request = doRequest(options, responseHandler).on("error", errorHandler); - - // Node 0.4 and later won't accept empty data. Make sure it's needed. - if (data) { - request.write(data); - } - - request.end(); - - self.dispatchEvent("loadstart"); - } else { // Synchronous - // Create a temporary file for communication with the other Node process - var contentFile = ".node-xmlhttprequest-content-" + process.pid; - var syncFile = ".node-xmlhttprequest-sync-" + process.pid; - fs.writeFileSync(syncFile, "", "utf8"); - // The async request the other Node process executes - var execString = "var http = require('http'), https = require('https'), fs = require('fs');" - + "var doRequest = http" + (ssl ? "s" : "") + ".request;" - + "var options = " + JSON.stringify(options) + ";" - + "var responseText = '';" - + "var req = doRequest(options, function(response) {" - + "response.setEncoding('utf8');" - + "response.on('data', function(chunk) {" - + " responseText += chunk;" - + "});" - + "response.on('end', function() {" - + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText}}), 'utf8');" - + "fs.unlinkSync('" + syncFile + "');" - + "});" - + "response.on('error', function(error) {" - + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: error}), 'utf8');" - + "fs.unlinkSync('" + syncFile + "');" - + "});" - + "}).on('error', function(error) {" - + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: error}), 'utf8');" - + "fs.unlinkSync('" + syncFile + "');" - + "});" - + (data ? "req.write('" + JSON.stringify(data).slice(1,-1).replace(/'/g, "\\'") + "');":"") - + "req.end();"; - // Start the other Node Process, executing this string - var syncProc = spawn(process.argv[0], ["-e", execString]); - while(fs.existsSync(syncFile)) { - // Wait while the sync file is empty - } - var resp = JSON.parse(fs.readFileSync(contentFile, 'utf8')); - // Kill the child process once the file has data - syncProc.stdin.end(); - // Remove the temporary file - fs.unlinkSync(contentFile); - - if (resp.err) { - self.handleError(resp.err); - } else { - response = resp.data; - self.status = resp.data.statusCode; - self.responseText = resp.data.text; - setState(self.DONE); - } - } - }; - - /** - * Called when an error is encountered to deal with it. - */ - this.handleError = function(error) { - this.status = 0; - this.statusText = error; - this.responseText = error.stack; - errorFlag = true; - setState(this.DONE); - this.dispatchEvent('error'); - }; - - /** - * Aborts a request. - */ - this.abort = function() { - if (request) { - request.abort(); - request = null; - } - - headers = defaultHeaders; - this.status = 0; - this.responseText = ""; - this.responseXML = ""; - - errorFlag = true; - - if (this.readyState !== this.UNSENT - && (this.readyState !== this.OPENED || sendFlag) - && this.readyState !== this.DONE) { - sendFlag = false; - setState(this.DONE); - } - this.readyState = this.UNSENT; - this.dispatchEvent('abort'); - }; - - /** - * Adds an event listener. Preferred method of binding to events. - */ - this.addEventListener = function(event, callback) { - if (!(event in listeners)) { - listeners[event] = []; - } - // Currently allows duplicate callbacks. Should it? - listeners[event].push(callback); - }; - - /** - * Remove an event callback that has already been bound. - * Only works on the matching funciton, cannot be a copy. - */ - this.removeEventListener = function(event, callback) { - if (event in listeners) { - // Filter will return a new array with the callback removed - listeners[event] = listeners[event].filter(function(ev) { - return ev !== callback; - }); - } - }; - - /** - * Dispatch any events, including both "on" methods and events attached using addEventListener. - */ - this.dispatchEvent = function(event) { - if (typeof self["on" + event] === "function") { - self["on" + event](); - } - if (event in listeners) { - for (var i = 0, len = listeners[event].length; i < len; i++) { - listeners[event][i].call(self); - } - } - }; - - /** - * Changes readyState and calls onreadystatechange. - * - * @param int state New state - */ - var setState = function(state) { - if (state == self.LOADING || self.readyState !== state) { - self.readyState = state; - - if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) { - self.dispatchEvent("readystatechange"); - } - - if (self.readyState === self.DONE && !errorFlag) { - self.dispatchEvent("load"); - // @TODO figure out InspectorInstrumentation::didLoadXHR(cookie) - self.dispatchEvent("loadend"); - } - } - }; -}; diff --git a/node_modules/xmlhttprequest/package.json b/node_modules/xmlhttprequest/package.json deleted file mode 100644 index e36f8e4..0000000 --- a/node_modules/xmlhttprequest/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "xmlhttprequest@*", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc/node_modules/web3" - ] - ], - "_from": "xmlhttprequest@*", - "_id": "xmlhttprequest@1.8.0", - "_inCache": true, - "_installable": true, - "_location": "/xmlhttprequest", - "_nodeVersion": "0.12.2", - "_npmUser": { - "email": "dan@driverdan.com", - "name": "driverdan" - }, - "_npmVersion": "2.7.5", - "_phantomChildren": {}, - "_requested": { - "name": "xmlhttprequest", - "raw": "xmlhttprequest@*", - "rawSpec": "*", - "scope": null, - "spec": "*", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc/web3", - "/web3", - "/web3-provider-engine/web3" - ], - "_resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "_shasum": "67fe075c5c24fef39f9d65f5f7b7fe75171968fc", - "_shrinkwrap": null, - "_spec": "xmlhttprequest@*", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc/node_modules/web3", - "author": { - "name": "Dan DeFelippi", - "url": "http://driverdan.com" - }, - "bugs": { - "url": "http://github.com/driverdan/node-XMLHttpRequest/issues" - }, - "dependencies": {}, - "description": "XMLHttpRequest for Node", - "devDependencies": {}, - "directories": { - "example": "./example", - "lib": "./lib" - }, - "dist": { - "shasum": "67fe075c5c24fef39f9d65f5f7b7fe75171968fc", - "tarball": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" - }, - "engines": { - "node": ">=0.4.0" - }, - "gitHead": "86ff70effb6dd529b34650242b9e3b1f0b8b6e86", - "homepage": "https://github.com/driverdan/node-XMLHttpRequest", - "keywords": [ - "xhr", - "ajax" - ], - "license": "MIT", - "main": "./lib/XMLHttpRequest.js", - "maintainers": [ - { - "email": "dan@driverdan.com", - "name": "driverdan" - } - ], - "name": "xmlhttprequest", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/driverdan/node-XMLHttpRequest.git" - }, - "scripts": {}, - "version": "1.8.0" -} diff --git a/node_modules/xtend/.npmignore b/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/xtend/LICENCE b/node_modules/xtend/LICENCE deleted file mode 100644 index a23e08a..0000000 --- a/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/xtend/Makefile b/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf..0000000 --- a/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/node_modules/xtend/README.md b/node_modules/xtend/README.md deleted file mode 100644 index 389adae..0000000 --- a/node_modules/xtend/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# xtend - -[![browser support][3]][4] - -Extend like a boss - -xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes presedence. - -## Examples - -```js -var extend = require("xtend") - -var combination = extend({ - a: "a" -}, { - b: "b" -}) -// { a: "a", b: "b" } -``` - - -## MIT Licenced - - - [3]: http://ci.testling.com/Raynos/xtend.png - [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/xtend/has-keys.js b/node_modules/xtend/has-keys.js deleted file mode 100644 index 62391e7..0000000 --- a/node_modules/xtend/has-keys.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = hasKeys - -function hasKeys(source) { - return source !== null && - (typeof source === "object" || - typeof source === "function") -} diff --git a/node_modules/xtend/index.js b/node_modules/xtend/index.js deleted file mode 100644 index 20937d1..0000000 --- a/node_modules/xtend/index.js +++ /dev/null @@ -1,25 +0,0 @@ -var Keys = require("object-keys") -var hasKeys = require("./has-keys") - -module.exports = extend - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - if (!hasKeys(source)) { - continue - } - - var keys = Keys(source) - - for (var j = 0; j < keys.length; j++) { - var name = keys[j] - target[name] = source[name] - } - } - - return target -} diff --git a/node_modules/xtend/mutable.js b/node_modules/xtend/mutable.js deleted file mode 100644 index 17454ae..0000000 --- a/node_modules/xtend/mutable.js +++ /dev/null @@ -1,25 +0,0 @@ -var Keys = require("object-keys") -var hasKeys = require("./has-keys") - -module.exports = extend - -function extend(target) { - var sources = [].slice.call(arguments, 1) - - for (var i = 0; i < sources.length; i++) { - var source = sources[i] - - if (!hasKeys(source)) { - continue - } - - var keys = Keys(source) - - for (var j = 0; j < keys.length; j++) { - var name = keys[j] - target[name] = source[name] - } - } - - return target -} diff --git a/node_modules/xtend/package.json b/node_modules/xtend/package.json deleted file mode 100644 index 3227fe6..0000000 --- a/node_modules/xtend/package.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_args": [ - [ - "xtend@~2.1.1", - "/Users/jbaylina/git/MVP/node_modules/level-ws" - ] - ], - "_from": "xtend@>=2.1.1 <2.2.0", - "_id": "xtend@2.1.2", - "_inCache": true, - "_installable": true, - "_location": "/xtend", - "_npmUser": { - "email": "raynos2@gmail.com", - "name": "raynos" - }, - "_npmVersion": "1.3.14", - "_phantomChildren": {}, - "_requested": { - "name": "xtend", - "raw": "xtend@~2.1.1", - "rawSpec": "~2.1.1", - "scope": null, - "spec": ">=2.1.1 <2.2.0", - "type": "range" - }, - "_requiredBy": [ - "/level-ws" - ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "_shasum": "6efecc2a4dad8e6962c4901b337ce7ba87b5d28b", - "_shrinkwrap": null, - "_spec": "xtend@~2.1.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/level-ws", - "author": { - "email": "raynos2@gmail.com", - "name": "Raynos" - }, - "bugs": { - "email": "raynos2@gmail.com", - "url": "https://github.com/Raynos/xtend/issues" - }, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Matt Esch" - } - ], - "dependencies": { - "object-keys": "~0.4.0" - }, - "description": "extend like a boss", - "devDependencies": { - "tape": "~1.1.0" - }, - "directories": {}, - "dist": { - "shasum": "6efecc2a4dad8e6962c4901b337ce7ba87b5d28b", - "tarball": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" - }, - "engines": { - "node": ">=0.4" - }, - "homepage": "https://github.com/Raynos/xtend", - "keywords": [ - "extend", - "merge", - "options", - "opts", - "object", - "array" - ], - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/raynos/xtend/raw/master/LICENSE" - } - ], - "main": "index", - "maintainers": [ - { - "email": "raynos2@gmail.com", - "name": "raynos" - } - ], - "name": "xtend", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xtend.git" - }, - "scripts": { - "test": "node test" - }, - "testling": { - "browsers": [ - "ie/7..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ], - "files": "test.js" - }, - "version": "2.1.2" -} diff --git a/node_modules/xtend/test.js b/node_modules/xtend/test.js deleted file mode 100644 index 3369d79..0000000 --- a/node_modules/xtend/test.js +++ /dev/null @@ -1,63 +0,0 @@ -var test = require("tape") -var extend = require("./") -var mutableExtend = require("./mutable") - -test("merge", function(assert) { - var a = { a: "foo" } - var b = { b: "bar" } - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("replace", function(assert) { - var a = { a: "foo" } - var b = { a: "bar" } - - assert.deepEqual(extend(a, b), { a: "bar" }) - assert.end() -}) - -test("undefined", function(assert) { - var a = { a: undefined } - var b = { b: "foo" } - - assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) - assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) - assert.end() -}) - -test("handle 0", function(assert) { - var a = { a: "default" } - var b = { a: 0 } - - assert.deepEqual(extend(a, b), { a: 0 }) - assert.deepEqual(extend(b, a), { a: "default" }) - assert.end() -}) - -test("is immutable", function (assert) { - var record = {} - - extend(record, { foo: "bar" }) - assert.equal(record.foo, undefined) - assert.end() -}) - -test("null as argument", function (assert) { - var a = { foo: "bar" } - var b = null - var c = void 0 - - assert.deepEqual(extend(b, a, c), { foo: "bar" }) - assert.end() -}) - -test("mutable", function (assert) { - var a = { foo: "bar" } - - mutableExtend(a, { bar: "baz" }) - - assert.equal(a.bar, "baz") - assert.end() -}) diff --git a/node_modules/y18n/LICENSE b/node_modules/y18n/LICENSE deleted file mode 100644 index 3c157f0..0000000 --- a/node_modules/y18n/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff --git a/node_modules/y18n/README.md b/node_modules/y18n/README.md deleted file mode 100644 index 9859458..0000000 --- a/node_modules/y18n/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# y18n - -[![Build Status][travis-image]][travis-url] -[![Coverage Status][coveralls-image]][coveralls-url] -[![NPM version][npm-image]][npm-url] -[![js-standard-style][standard-image]][standard-url] - -The bare-bones internationalization library used by yargs. - -Inspired by [i18n](https://www.npmjs.com/package/i18n). - -## Examples - -_simple string translation:_ - -```js -var __ = require('y18n').__ - -console.log(__('my awesome string %s', 'foo')) -``` - -output: - -`my awesome string foo` - -_pluralization support:_ - -```js -var __n = require('y18n').__n - -console.log(__n('one fish %s', '%d fishes %s', 2, 'foo')) -``` - -output: - -`2 fishes foo` - -## JSON Language Files - -The JSON language files should be stored in a `./locales` folder. -File names correspond to locales, e.g., `en.json`, `pirate.json`. - -When strings are observed for the first time they will be -added to the JSON file corresponding to the current locale. - -## Methods - -### require('y18n')(config) - -Create an instance of y18n with the config provided, options include: - -* `directory`: the locale directory, default `./locales`. -* `updateFiles`: should newly observed strings be updated in file, default `true`. -* `locale`: what locale should be used. -* `fallbackToLanguage`: should fallback to a language-only file (e.g. `en.json`) - be allowed if a file matching the locale does not exist (e.g. `en_US.json`), - default `true`. - -### y18n.\_\_(str, arg, arg, arg) - -Print a localized string, `%s` will be replaced with `arg`s. - -### y18n.\_\_n(singularString, pluralString, count, arg, arg, arg) - -Print a localized string with appropriate pluralization. If `%d` is provided -in the string, the `count` will replace this placeholder. - -### y18n.setLocale(str) - -Set the current locale being used. - -### y18n.getLocale() - -What locale is currently being used? - -### y18n.updateLocale(obj) - -Update the current locale with the key value pairs in `obj`. - -## License - -ISC - -[travis-url]: https://travis-ci.org/yargs/y18n -[travis-image]: https://img.shields.io/travis/yargs/y18n.svg -[coveralls-url]: https://coveralls.io/github/yargs/y18n -[coveralls-image]: https://img.shields.io/coveralls/yargs/y18n.svg -[npm-url]: https://npmjs.org/package/y18n -[npm-image]: https://img.shields.io/npm/v/y18n.svg -[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg -[standard-url]: https://github.com/feross/standard diff --git a/node_modules/y18n/index.js b/node_modules/y18n/index.js deleted file mode 100644 index 91b159e..0000000 --- a/node_modules/y18n/index.js +++ /dev/null @@ -1,172 +0,0 @@ -var fs = require('fs') -var path = require('path') -var util = require('util') - -function Y18N (opts) { - // configurable options. - opts = opts || {} - this.directory = opts.directory || './locales' - this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true - this.locale = opts.locale || 'en' - this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true - - // internal stuff. - this.cache = {} - this.writeQueue = [] -} - -Y18N.prototype.__ = function () { - var args = Array.prototype.slice.call(arguments) - var str = args.shift() - var cb = function () {} // start with noop. - - if (typeof args[args.length - 1] === 'function') cb = args.pop() - cb = cb || function () {} // noop. - - if (!this.cache[this.locale]) this._readLocaleFile() - - // we've observed a new string, update the language file. - if (!this.cache[this.locale][str] && this.updateFiles) { - this.cache[this.locale][str] = str - - // include the current directory and locale, - // since these values could change before the - // write is performed. - this._enqueueWrite([this.directory, this.locale, cb]) - } else { - cb() - } - - return util.format.apply(util, [this.cache[this.locale][str] || str].concat(args)) -} - -Y18N.prototype._enqueueWrite = function (work) { - this.writeQueue.push(work) - if (this.writeQueue.length === 1) this._processWriteQueue() -} - -Y18N.prototype._processWriteQueue = function () { - var _this = this - var work = this.writeQueue[0] - - // destructure the enqueued work. - var directory = work[0] - var locale = work[1] - var cb = work[2] - - var languageFile = this._resolveLocaleFile(directory, locale) - var serializedLocale = JSON.stringify(this.cache[locale], null, 2) - - fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) { - _this.writeQueue.shift() - if (_this.writeQueue.length > 0) _this._processWriteQueue() - cb(err) - }) -} - -Y18N.prototype._readLocaleFile = function () { - var localeLookup = {} - var languageFile = this._resolveLocaleFile(this.directory, this.locale) - - try { - localeLookup = JSON.parse(fs.readFileSync(languageFile, 'utf-8')) - } catch (err) { - if (err instanceof SyntaxError) { - err.message = 'syntax error in ' + languageFile - } - - if (err.code === 'ENOENT') localeLookup = {} - else throw err - } - - this.cache[this.locale] = localeLookup -} - -Y18N.prototype._resolveLocaleFile = function (directory, locale) { - var file = path.resolve(directory, './', locale + '.json') - if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) { - // attempt fallback to language only - var languageFile = path.resolve(directory, './', locale.split('_')[0] + '.json') - if (this._fileExistsSync(languageFile)) file = languageFile - } - return file -} - -// this only exists because fs.existsSync() "will be deprecated" -// see https://nodejs.org/api/fs.html#fs_fs_existssync_path -Y18N.prototype._fileExistsSync = function (file) { - try { - return fs.statSync(file).isFile() - } catch (err) { - return false - } -} - -Y18N.prototype.__n = function () { - var args = Array.prototype.slice.call(arguments) - var singular = args.shift() - var plural = args.shift() - var quantity = args.shift() - - var cb = function () {} // start with noop. - if (typeof args[args.length - 1] === 'function') cb = args.pop() - - if (!this.cache[this.locale]) this._readLocaleFile() - - var str = quantity === 1 ? singular : plural - if (this.cache[this.locale][singular]) { - str = this.cache[this.locale][singular][quantity === 1 ? 'one' : 'other'] - } - - // we've observed a new string, update the language file. - if (!this.cache[this.locale][singular] && this.updateFiles) { - this.cache[this.locale][singular] = { - one: singular, - other: plural - } - - // include the current directory and locale, - // since these values could change before the - // write is performed. - this._enqueueWrite([this.directory, this.locale, cb]) - } else { - cb() - } - - // if a %d placeholder is provided, add quantity - // to the arguments expanded by util.format. - var values = [str] - if (~str.indexOf('%d')) values.push(quantity) - - return util.format.apply(util, values.concat(args)) -} - -Y18N.prototype.setLocale = function (locale) { - this.locale = locale -} - -Y18N.prototype.getLocale = function () { - return this.locale -} - -Y18N.prototype.updateLocale = function (obj) { - if (!this.cache[this.locale]) this._readLocaleFile() - - for (var key in obj) { - this.cache[this.locale][key] = obj[key] - } -} - -module.exports = function (opts) { - var y18n = new Y18N(opts) - - // bind all functions to y18n, so that - // they can be used in isolation. - for (var key in y18n) { - if (typeof y18n[key] === 'function') { - y18n[key] = y18n[key].bind(y18n) - } - } - - return y18n -} diff --git a/node_modules/y18n/package.json b/node_modules/y18n/package.json deleted file mode 100644 index 782a4c5..0000000 --- a/node_modules/y18n/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "y18n@^3.2.1", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "y18n@>=3.2.1 <4.0.0", - "_id": "y18n@3.2.1", - "_inCache": true, - "_installable": true, - "_location": "/y18n", - "_nodeVersion": "3.2.0", - "_npmOperationalInternal": { - "host": "packages-13-west.internal.npmjs.com", - "tmp": "tmp/y18n-3.2.1.tgz_1458191070611_0.9606689948122948" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "y18n", - "raw": "y18n@^3.2.1", - "rawSpec": "^3.2.1", - "scope": null, - "spec": ">=3.2.1 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs", - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "_shasum": "6d15fba884c08679c0d77e88e7759e811e07fa41", - "_shrinkwrap": null, - "_spec": "y18n@^3.2.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "ben@npmjs.com", - "name": "Ben Coe" - }, - "bugs": { - "url": "https://github.com/yargs/y18n/issues" - }, - "dependencies": {}, - "description": "the bare-bones internationalization library used by yargs", - "devDependencies": { - "chai": "^3.4.1", - "coveralls": "^2.11.6", - "mocha": "^2.3.4", - "nyc": "^6.1.1", - "rimraf": "^2.5.0", - "standard": "^5.4.1" - }, - "directories": {}, - "dist": { - "shasum": "6d15fba884c08679c0d77e88e7759e811e07fa41", - "tarball": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz" - }, - "files": [ - "index.js" - ], - "gitHead": "34d6ad7bfeac67721ccbcf3bbcc761f33d787c90", - "homepage": "https://github.com/yargs/y18n", - "keywords": [ - "i18n", - "internationalization", - "yargs" - ], - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "andrew@npmjs.com", - "name": "nexdrew" - } - ], - "name": "y18n", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/yargs/y18n.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "pretest": "standard", - "test": "nyc mocha" - }, - "version": "3.2.1" -} diff --git a/node_modules/yargs-parser/CHANGELOG.md b/node_modules/yargs-parser/CHANGELOG.md deleted file mode 100644 index 0ba5b65..0000000 --- a/node_modules/yargs-parser/CHANGELOG.md +++ /dev/null @@ -1,40 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -## [2.4.1](https://github.com/yargs/yargs-parser/compare/v2.4.0...v2.4.1) (2016-07-16) - - -### Bug Fixes - -* **count:** do not increment a default value ([#39](https://github.com/yargs/yargs-parser/issues/39)) ([b04a189](https://github.com/yargs/yargs-parser/commit/b04a189)) - - - - -# [2.4.0](https://github.com/yargs/yargs-parser/compare/v2.3.0...v2.4.0) (2016-04-11) - - -### Features - -* **environment:** Support nested options in environment variables ([#26](https://github.com/yargs/yargs-parser/issues/26)) thanks [@elas7](https://github.com/elas7) \o/ ([020778b](https://github.com/yargs/yargs-parser/commit/020778b)) - - - - -# [2.3.0](https://github.com/yargs/yargs-parser/compare/v2.2.0...v2.3.0) (2016-04-09) - - -### Bug Fixes - -* **boolean:** fix for boolean options with non boolean defaults (#20) ([2dbe86b](https://github.com/yargs/yargs-parser/commit/2dbe86b)), closes [(#20](https://github.com/(/issues/20) -* **package:** remove tests from tarball ([0353c0d](https://github.com/yargs/yargs-parser/commit/0353c0d)) -* **parsing:** handle calling short option with an empty string as the next value. ([a867165](https://github.com/yargs/yargs-parser/commit/a867165)) -* boolean flag when next value contains the strings 'true' or 'false'. ([69941a6](https://github.com/yargs/yargs-parser/commit/69941a6)) -* update dependencies; add standard-version bin for next release (#24) ([822d9d5](https://github.com/yargs/yargs-parser/commit/822d9d5)) - -### Features - -* **configuration:** Allow to pass configuration objects to yargs-parser ([0780900](https://github.com/yargs/yargs-parser/commit/0780900)) -* **normalize:** allow normalize to work with arrays ([e0eaa1a](https://github.com/yargs/yargs-parser/commit/e0eaa1a)) diff --git a/node_modules/yargs-parser/LICENSE.txt b/node_modules/yargs-parser/LICENSE.txt deleted file mode 100644 index 836440b..0000000 --- a/node_modules/yargs-parser/LICENSE.txt +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/yargs-parser/README.md b/node_modules/yargs-parser/README.md deleted file mode 100644 index 95ef4b2..0000000 --- a/node_modules/yargs-parser/README.md +++ /dev/null @@ -1,209 +0,0 @@ -# yargs-parser - -[![Build Status](https://travis-ci.org/yargs/yargs-parser.png)](https://travis-ci.org/yargs/yargs-parser) -[![Coverage Status](https://coveralls.io/repos/yargs/yargs-parser/badge.svg?branch=)](https://coveralls.io/r/yargs/yargs-parser?branch=master) -[![NPM version](https://img.shields.io/npm/v/yargs-parser.svg)](https://www.npmjs.com/package/yargs-parser) -[![Windows Tests](https://img.shields.io/appveyor/ci/bcoe/yargs-parser/master.svg?label=Windows%20Tests)](https://ci.appveyor.com/project/bcoe/yargs-parser) -[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) - - -The mighty option parser used by [yargs](https://github.com/bcoe/yargs). - -visit the [yargs website](http://yargs.js.org/) for more examples, and thorough usage instructions. - - - -## Example - -```sh -npm i yargs-parser --save -``` - -```js -var argv = require('yargs-parser')(process.argv.slice(2)); -console.log(argv) -``` - -```sh -node example.js --foo=33 --bar hello -{ _: [], foo: 33, bar: 'hello' } -``` - -_or parse a string!_ - -```js -var argv = require('./')('--foo=99 --bar=33'); -console.log(argv) -``` - -```sh -{ _: [], foo: 99, bar: 33 } -``` - -## API - -### require('yargs-parser')(args, opts={}) - -Parses command line arguments returning a simple mapping of keys and values. - -**expects:** - -* `args`: an array or string representing the options to parse. -* `opts`: provide a set of hints indicating how `args` should be parsed: - * `opts.alias`: an object representing the set of aliases for a key: `{alias: {foo: ['f']}}`. - * `opts.array`: indicate that keys should be parsed as an array: `{array: ['foo', 'bar']}`. - * `opts.boolean`: arguments should be parsed as booleans: `{boolean: ['x', 'y']}`. - * `opts.config`: indicate a key that represents a path to a configuration file (this file will be loaded and parsed). - * `opts.count`: indicate a key that should be used as a counter, e.g., `-vvv` = `{v: 3}`. - * `opts.default`: provide default values for keys: `{default: {x: 33, y: 'hello world!'}}`. - * `opts.envPrefix`: environment variables (`process.env`) with the prefix provided should be parsed. - * `opts.narg`: specify that a key requires `n` arguments: `{narg: {x: 2}}`. - * `opts.normalize`: `path.normalize()` will be applied to values set to this key. - * `opts.string`: keys should be treated as strings (even if they resemble a number `-x 33`). - * `opts.configuration`: provide configuration options to the yargs-parser (see: [configuration](#configuration)). - * `opts.number`: keys should be treated as numbers. - -**returns:** - -* `obj`: an object representing the parsed value of `args` - * `key/value`: key value pairs for each argument and their aliases. - * `_`: an array representing the positional arguments. - -### require('yargs-parser').detailed(args, opts={}) - -Parses a command line string, returning detailed information required by the -yargs engine. - -**expects:** - -* `args`: an array or string representing options to parse. -* `opts`: provide a set of hints indicating how `args`, inputs are identical to `require('yargs-parser')(args, opts={})`. - -**returns:** - -* `argv`: an object representing the parsed value of `args` - * `key/value`: key value pairs for each argument and their aliases. - * `_`: an array representing the positional arguments. -* `error`: populated with an error object if an exception occurred during parsing. -* `aliases`: the inferred list of aliases built by combining lists in `opts.alias`. -* `newAliases`: any new aliases added via camel-case expansion. -* `configuration`: the configuration loaded from the `yargs` stanza in package.json. - - -### Configuration - -The yargs-parser applies several automated transformations on the keys provided -in `args`. These features can be turned on and off using the `configuration` field -of `opts`. - -```js -var parsed = parser(['--no-dice'], { - configuration: { - 'boolean-negation': false - } -}) -``` - -### short option groups - -* default: `true`. -* key: `short-option-groups`. - -Should a group of short-options be treated as boolean flags? - -```sh -node example.js -abc -{ _: [], a: true, b: true, c: true } -``` - -_if disabled:_ - -```sh -node example.js -abc -{ _: [], abc: true } -``` - -### camel-case expansion - -* default: `true`. -* key: `camel-case-expansion`. - -Should hyphenated arguments be expanded into camel-case aliases? - -```sh -node example.js --foo-bar -{ _: [], 'foo-bar': true, fooBar: true } -``` - -_if disabled:_ - -```sh -node example.js --foo-bar -{ _: [], 'foo-bar': true } -``` - -### dot-notation - -* default: `true` -* key: `dot-notation` - -Should keys that contain `.` be treated as objects? - -```sh -node example.js --foo.bar -{ _: [], foo: { bar: true } } -``` - -_if disabled:_ - -```sh -node example.js --foo.bar -{ _: [], "foo.bar": true } -``` - -### parse numbers - -* default: `true` -* key: 'parse-numbers' - -Should keys that look like numbers be treated as such? - -```sh -node example.js --foo=99.3 -{ _: [], foo: 99.3 } -``` - -_if disabled:_ - -```sh -node example.js --foo=99.3 -{ _: [], foo: "99.3" } -``` - -### boolean negation - -* default: `true` -* key: 'boolean-negation' - -Should variables prefixed with `--no` be treated as negations? - -```sh -node example.js --no-foo -{ _: [], foo: false } -``` - -_if disabled:_ - -```sh -node example.js --no-foo -{ _: [], "no-foo": true } -``` - -## Special Thanks - -The yargs project evolves from optimist and minimist. It owes its -existence to a lot of James Halliday's hard work. Thanks [substack](https://github.com/substack) **beep** **boop** \o/ - -## License - -ISC diff --git a/node_modules/yargs-parser/index.js b/node_modules/yargs-parser/index.js deleted file mode 100644 index 35c0272..0000000 --- a/node_modules/yargs-parser/index.js +++ /dev/null @@ -1,689 +0,0 @@ -var assign = require('lodash.assign') -var camelCase = require('camelcase') -var path = require('path') -var tokenizeArgString = require('./lib/tokenize-arg-string') -var util = require('util') - -function parse (args, opts) { - if (!opts) opts = {} - // allow a string argument to be passed in rather - // than an argv array. - args = tokenizeArgString(args) - // aliases might have transitive relationships, normalize this. - var aliases = combineAliases(opts.alias || {}) - var configuration = assign({}, { - 'short-option-groups': true, - 'camel-case-expansion': true, - 'dot-notation': true, - 'parse-numbers': true, - 'boolean-negation': true - }, opts.configuration) - var defaults = opts.default || {} - var configObjects = opts.configObjects || [] - var envPrefix = opts.envPrefix - var newAliases = {} - // allow a i18n handler to be passed in, default to a fake one (util.format). - var __ = opts.__ || function (str) { - return util.format.apply(util, Array.prototype.slice.call(arguments)) - } - var error = null - var flags = { - aliases: {}, - arrays: {}, - bools: {}, - strings: {}, - numbers: {}, - counts: {}, - normalize: {}, - configs: {}, - defaulted: {}, - nargs: {} - } - - ;[].concat(opts.array).filter(Boolean).forEach(function (key) { - flags.arrays[key] = true - }) - - ;[].concat(opts.boolean).filter(Boolean).forEach(function (key) { - flags.bools[key] = true - }) - - ;[].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true - }) - - ;[].concat(opts.number).filter(Boolean).forEach(function (key) { - flags.numbers[key] = true - }) - - ;[].concat(opts.count).filter(Boolean).forEach(function (key) { - flags.counts[key] = true - }) - - ;[].concat(opts.normalize).filter(Boolean).forEach(function (key) { - flags.normalize[key] = true - }) - - Object.keys(opts.narg || {}).forEach(function (k) { - flags.nargs[k] = opts.narg[k] - }) - - if (Array.isArray(opts.config) || typeof opts.config === 'string') { - ;[].concat(opts.config).filter(Boolean).forEach(function (key) { - flags.configs[key] = true - }) - } else { - Object.keys(opts.config || {}).forEach(function (k) { - flags.configs[k] = opts.config[k] - }) - } - - // create a lookup table that takes into account all - // combinations of aliases: {f: ['foo'], foo: ['f']} - extendAliases(opts.key, aliases, opts.default, flags.arrays) - - // apply default values to all aliases. - Object.keys(defaults).forEach(function (key) { - (flags.aliases[key] || []).forEach(function (alias) { - defaults[alias] = defaults[key] - }) - }) - - var argv = { _: [] } - - Object.keys(flags.bools).forEach(function (key) { - setArg(key, !(key in defaults) ? false : defaults[key]) - setDefaulted(key) - }) - - var notFlags = [] - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--') + 1) - args = args.slice(0, args.indexOf('--')) - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i] - var broken - var key - var letters - var m - var next - var value - - // -- seperated by = - if (arg.match(/^--.+=/) || ( - !configuration['short-option-groups'] && arg.match(/^-.+=/) - )) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - m = arg.match(/^--?([^=]+)=([\s\S]*)$/) - - // nargs format = '--f=monkey washing cat' - if (checkAllAliases(m[1], flags.nargs)) { - args.splice(i + 1, 0, m[2]) - i = eatNargs(i, m[1], args) - // arrays format = '--f=a b c' - } else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) { - args.splice(i + 1, 0, m[2]) - i = eatArray(i, m[1], args) - } else { - setArg(m[1], m[2]) - } - } else if (arg.match(/^--no-.+/) && configuration['boolean-negation']) { - key = arg.match(/^--no-(.+)/)[1] - setArg(key, false) - - // -- seperated by space. - } else if (arg.match(/^--.+/) || ( - !configuration['short-option-groups'] && arg.match(/^-.+/) - )) { - key = arg.match(/^--?(.+)/)[1] - - // nargs format = '--foo a b c' - if (checkAllAliases(key, flags.nargs)) { - i = eatNargs(i, key, args) - // array format = '--foo a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { - i = eatArray(i, key, args) - } else { - next = args[i + 1] - - if (next !== undefined && !next.match(/^-/) && - !checkAllAliases(key, flags.bools) && - !checkAllAliases(key, flags.counts)) { - setArg(key, next) - i++ - } else if (/^(true|false)$/.test(next)) { - setArg(key, next) - i++ - } else { - setArg(key, defaultForType(guessType(key, flags))) - } - } - - // dot-notation flag seperated by '='. - } else if (arg.match(/^-.\..+=/)) { - m = arg.match(/^-([^=]+)=([\s\S]*)$/) - setArg(m[1], m[2]) - - // dot-notation flag seperated by space. - } else if (arg.match(/^-.\..+/)) { - next = args[i + 1] - key = arg.match(/^-(.\..+)/)[1] - - if (next !== undefined && !next.match(/^-/) && - !checkAllAliases(key, flags.bools) && - !checkAllAliases(key, flags.counts)) { - setArg(key, next) - i++ - } else { - setArg(key, defaultForType(guessType(key, flags))) - } - } else if (arg.match(/^-[^-]+/)) { - letters = arg.slice(1, -1).split('') - broken = false - - for (var j = 0; j < letters.length; j++) { - next = arg.slice(j + 2) - - if (letters[j + 1] && letters[j + 1] === '=') { - value = arg.slice(j + 3) - key = letters[j] - - // nargs format = '-f=monkey washing cat' - if (checkAllAliases(key, flags.nargs)) { - args.splice(i + 1, 0, value) - i = eatNargs(i, key, args) - // array format = '-f=a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { - args.splice(i + 1, 0, value) - i = eatArray(i, key, args) - } else { - setArg(key, value) - } - - broken = true - break - } - - if (next === '-') { - setArg(letters[j], next) - continue - } - - if (/[A-Za-z]/.test(letters[j]) && - /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next) - broken = true - break - } - - if (letters[j + 1] && letters[j + 1].match(/\W/)) { - setArg(letters[j], next) - broken = true - break - } else { - setArg(letters[j], defaultForType(guessType(letters[j], flags))) - } - } - - key = arg.slice(-1)[0] - - if (!broken && key !== '-') { - // nargs format = '-f a b c' - if (checkAllAliases(key, flags.nargs)) { - i = eatNargs(i, key, args) - // array format = '-f a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { - i = eatArray(i, key, args) - } else { - next = args[i + 1] - - if (next !== undefined && !/^(-|--)[^-]/.test(next) && - !checkAllAliases(key, flags.bools) && - !checkAllAliases(key, flags.counts)) { - setArg(key, next) - i++ - } else if (/^(true|false)$/.test(next)) { - setArg(key, next) - i++ - } else { - setArg(key, defaultForType(guessType(key, flags))) - } - } - } - } else { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ) - } - } - - // order of precedence: - // 1. command line arg - // 2. value from config file - // 3. value from config objects - // 4. value from env var - // 5. configured default value - applyEnvVars(argv, true) // special case: check env vars that point to config file - setConfig(argv) - setConfigObjects() - applyEnvVars(argv, false) - applyDefaultsAndAliases(argv, flags.aliases, defaults) - - // for any counts either not in args or without an explicit default, set to 0 - Object.keys(flags.counts).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) setArg(key, 0) - }) - - notFlags.forEach(function (key) { - argv._.push(key) - }) - - // how many arguments should we consume, based - // on the nargs option? - function eatNargs (i, key, args) { - var toEat = checkAllAliases(key, flags.nargs) - - if (args.length - (i + 1) < toEat) error = Error(__('Not enough arguments following: %s', key)) - - for (var ii = i + 1; ii < (toEat + i + 1); ii++) { - setArg(key, args[ii]) - } - - return (i + toEat) - } - - // if an option is an array, eat all non-hyphenated arguments - // following it... YUM! - // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"] - function eatArray (i, key, args) { - var start = i + 1 - for (var ii = i + 1; ii < args.length; ii++) { - if (/^-/.test(args[ii])) { - if (ii === start) { - setArg(key, defaultForType('array')) - } - break - } - i = ii - setArg(key, args[ii]) - } - - return i - } - - function setArg (key, val) { - unsetDefaulted(key) - - // handle parsing boolean arguments --foo=true --bar false. - if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) { - if (typeof val === 'string') val = val === 'true' - } - - if (/-/.test(key) && !(flags.aliases[key] && flags.aliases[key].length) && configuration['camel-case-expansion']) { - var c = camelCase(key) - flags.aliases[key] = [c] - newAliases[c] = true - } - - var value = val - if (!checkAllAliases(key, flags.strings)) { - if (isNumber(val)) value = Number(val) - if (!isUndefined(val) && !isNumber(val) && checkAllAliases(key, flags.numbers)) value = NaN - } - - // increment a count given as arg (either no value or value parsed as boolean) - if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) { - value = increment - } - - // Set normalized value when key is in 'normalize' and in 'arrays' - if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) { - value = path.normalize(val) - } - - var splitKey = key.split('.') - setKey(argv, splitKey, value) - - // handle populating aliases of the full key - if (flags.aliases[key]) { - flags.aliases[key].forEach(function (x) { - x = x.split('.') - setKey(argv, x, value) - }) - } - - // handle populating aliases of the first element of the dot-notation key - if (splitKey.length > 1 && configuration['dot-notation']) { - ;(flags.aliases[splitKey[0]] || []).forEach(function (x) { - x = x.split('.') - - // expand alias with nested objects in key - var a = [].concat(splitKey) - a.shift() // nuke the old key. - x = x.concat(a) - - setKey(argv, x, value) - }) - } - - // Set normalize getter and setter when key is in 'normalize' but isn't an array - if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) { - var keys = [key].concat(flags.aliases[key] || []) - keys.forEach(function (key) { - argv.__defineSetter__(key, function (v) { - val = path.normalize(v) - }) - - argv.__defineGetter__(key, function () { - return typeof val === 'string' ? path.normalize(val) : val - }) - }) - } - } - - // set args from config.json file, this should be - // applied last so that defaults can be applied. - function setConfig (argv) { - var configLookup = {} - - // expand defaults/aliases, in-case any happen to reference - // the config.json file. - applyDefaultsAndAliases(configLookup, flags.aliases, defaults) - - Object.keys(flags.configs).forEach(function (configKey) { - var configPath = argv[configKey] || configLookup[configKey] - if (configPath) { - try { - var config = null - var resolvedConfigPath = path.resolve(process.cwd(), configPath) - - if (typeof flags.configs[configKey] === 'function') { - try { - config = flags.configs[configKey](resolvedConfigPath) - } catch (e) { - config = e - } - if (config instanceof Error) { - error = config - return - } - } else { - config = require(resolvedConfigPath) - } - - setConfigObject(config) - } catch (ex) { - if (argv[configKey]) error = Error(__('Invalid JSON config file: %s', configPath)) - } - } - }) - } - - // set args from config object. - // it recursively checks nested objects. - function setConfigObject (config, prev) { - Object.keys(config).forEach(function (key) { - var value = config[key] - var fullKey = prev ? prev + '.' + key : key - - if (Object.prototype.toString.call(value) === '[object Object]') { - // if the value is an object but not an array, check nested object - setConfigObject(value, fullKey) - } else { - // setting arguments via CLI takes precedence over - // values within the config file. - if (!hasKey(argv, fullKey.split('.')) || (flags.defaulted[fullKey])) { - setArg(fullKey, value) - } - } - }) - } - - // set all config objects passed in opts - function setConfigObjects () { - if (typeof configObjects === 'undefined') return - configObjects.forEach(function (configObject) { - setConfigObject(configObject) - }) - } - - function applyEnvVars (argv, configOnly) { - if (typeof envPrefix === 'undefined') return - - var prefix = typeof envPrefix === 'string' ? envPrefix : '' - Object.keys(process.env).forEach(function (envVar) { - if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) { - // get array of nested keys and convert them to camel case - var keys = envVar.split('__').map(function (key, i) { - if (i === 0) { - key = key.substring(prefix.length) - } - return camelCase(key) - }) - - if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && (!hasKey(argv, keys) || flags.defaulted[keys.join('.')])) { - setArg(keys.join('.'), process.env[envVar]) - } - } - }) - } - - function applyDefaultsAndAliases (obj, aliases, defaults) { - Object.keys(defaults).forEach(function (key) { - if (!hasKey(obj, key.split('.'))) { - setKey(obj, key.split('.'), defaults[key]) - - ;(aliases[key] || []).forEach(function (x) { - if (hasKey(obj, x.split('.'))) return - setKey(obj, x.split('.'), defaults[key]) - }) - } - }) - } - - function hasKey (obj, keys) { - var o = obj - - if (!configuration['dot-notation']) keys = [keys.join('.')] - - keys.slice(0, -1).forEach(function (key) { - o = (o[key] || {}) - }) - - var key = keys[keys.length - 1] - - if (typeof o !== 'object') return false - else return key in o - } - - function setKey (obj, keys, value) { - var o = obj - - if (!configuration['dot-notation']) keys = [keys.join('.')] - - keys.slice(0, -1).forEach(function (key) { - if (o[key] === undefined) o[key] = {} - o = o[key] - }) - - var key = keys[keys.length - 1] - - if (value === increment) { - o[key] = increment(o[key]) - } else if (o[key] === undefined && checkAllAliases(key, flags.arrays)) { - o[key] = Array.isArray(value) ? value : [value] - } else if (o[key] === undefined || checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) { - o[key] = value - } else if (Array.isArray(o[key])) { - o[key].push(value) - } else { - o[key] = [ o[key], value ] - } - } - - // extend the aliases list with inferred aliases. - function extendAliases () { - Array.prototype.slice.call(arguments).forEach(function (obj) { - Object.keys(obj || {}).forEach(function (key) { - // short-circuit if we've already added a key - // to the aliases array, for example it might - // exist in both 'opts.default' and 'opts.key'. - if (flags.aliases[key]) return - - flags.aliases[key] = [].concat(aliases[key] || []) - // For "--option-name", also set argv.optionName - flags.aliases[key].concat(key).forEach(function (x) { - if (/-/.test(x) && configuration['camel-case-expansion']) { - var c = camelCase(x) - flags.aliases[key].push(c) - newAliases[c] = true - } - }) - flags.aliases[key].forEach(function (x) { - flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) { - return x !== y - })) - }) - }) - }) - } - - // check if a flag is set for any of a key's aliases. - function checkAllAliases (key, flag) { - var isSet = false - var toCheck = [].concat(flags.aliases[key] || [], key) - - toCheck.forEach(function (key) { - if (flag[key]) isSet = flag[key] - }) - - return isSet - } - - function setDefaulted (key) { - [].concat(flags.aliases[key] || [], key).forEach(function (k) { - flags.defaulted[k] = true - }) - } - - function unsetDefaulted (key) { - [].concat(flags.aliases[key] || [], key).forEach(function (k) { - delete flags.defaulted[k] - }) - } - - // return a default value, given the type of a flag., - // e.g., key of type 'string' will default to '', rather than 'true'. - function defaultForType (type) { - var def = { - boolean: true, - string: '', - number: undefined, - array: [] - } - - return def[type] - } - - // given a flag, enforce a default type. - function guessType (key, flags) { - var type = 'boolean' - - if (flags.strings && flags.strings[key]) type = 'string' - else if (flags.numbers && flags.numbers[key]) type = 'number' - else if (flags.arrays && flags.arrays[key]) type = 'array' - - return type - } - - function isNumber (x) { - if (!configuration['parse-numbers']) return false - if (typeof x === 'number') return true - if (/^0x[0-9a-f]+$/i.test(x)) return true - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x) - } - - function isUndefined (num) { - return num === undefined - } - - return { - argv: argv, - error: error, - aliases: flags.aliases, - newAliases: newAliases, - configuration: configuration - } -} - -// if any aliases reference each other, we should -// merge them together. -function combineAliases (aliases) { - var aliasArrays = [] - var change = true - var combined = {} - - // turn alias lookup hash {key: ['alias1', 'alias2']} into - // a simple array ['key', 'alias1', 'alias2'] - Object.keys(aliases).forEach(function (key) { - aliasArrays.push( - [].concat(aliases[key], key) - ) - }) - - // combine arrays until zero changes are - // made in an iteration. - while (change) { - change = false - for (var i = 0; i < aliasArrays.length; i++) { - for (var ii = i + 1; ii < aliasArrays.length; ii++) { - var intersect = aliasArrays[i].filter(function (v) { - return aliasArrays[ii].indexOf(v) !== -1 - }) - - if (intersect.length) { - aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]) - aliasArrays.splice(ii, 1) - change = true - break - } - } - } - } - - // map arrays back to the hash-lookup (de-dupe while - // we're at it). - aliasArrays.forEach(function (aliasArray) { - aliasArray = aliasArray.filter(function (v, i, self) { - return self.indexOf(v) === i - }) - combined[aliasArray.pop()] = aliasArray - }) - - return combined -} - -// this function should only be called when a count is given as an arg -// it is NOT called to set a default value -// thus we can start the count at 1 instead of 0 -function increment (orig) { - return orig !== undefined ? orig + 1 : 1 -} - -function Parser (args, opts) { - var result = parse(args.slice(), opts) - - return result.argv -} - -// parse arguments and return detailed -// meta information, aliases, etc. -Parser.detailed = function (args, opts) { - return parse(args.slice(), opts) -} - -module.exports = Parser diff --git a/node_modules/yargs-parser/lib/tokenize-arg-string.js b/node_modules/yargs-parser/lib/tokenize-arg-string.js deleted file mode 100644 index 23d39e1..0000000 --- a/node_modules/yargs-parser/lib/tokenize-arg-string.js +++ /dev/null @@ -1,34 +0,0 @@ -// take an un-split argv string and tokenize it. -module.exports = function (argString) { - if (Array.isArray(argString)) return argString - - var i = 0 - var c = null - var opening = null - var args = [] - - for (var ii = 0; ii < argString.length; ii++) { - c = argString.charAt(ii) - - // split on spaces unless we're in quotes. - if (c === ' ' && !opening) { - i++ - continue - } - - // don't split the string if we're in matching - // opening or closing single and double quotes. - if (c === opening) { - opening = null - continue - } else if ((c === "'" || c === '"') && !opening) { - opening = c - continue - } - - if (!args[i]) args[i] = '' - args[i] += c - } - - return args -} diff --git a/node_modules/yargs-parser/package.json b/node_modules/yargs-parser/package.json deleted file mode 100644 index 1f4aef7..0000000 --- a/node_modules/yargs-parser/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "yargs-parser@^2.4.1", - "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs" - ] - ], - "_from": "yargs-parser@>=2.4.1 <3.0.0", - "_id": "yargs-parser@2.4.1", - "_inCache": true, - "_installable": true, - "_location": "/yargs-parser", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/yargs-parser-2.4.1.tgz_1468709489453_0.7414652374573052" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "yargs-parser", - "raw": "yargs-parser@^2.4.1", - "rawSpec": "^2.4.1", - "scope": null, - "spec": ">=2.4.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/solc/yargs" - ], - "_resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "_shasum": "85568de3cf150ff49fa51825f03a8c880ddcc5c4", - "_shrinkwrap": null, - "_spec": "yargs-parser@^2.4.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/solc/node_modules/yargs", - "author": { - "email": "ben@npmjs.com", - "name": "Ben Coe" - }, - "bugs": { - "url": "https://github.com/yargs/yargs-parser/issues" - }, - "dependencies": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - }, - "description": "the mighty option parser used by yargs", - "devDependencies": { - "chai": "^3.5.0", - "coveralls": "^2.11.8", - "mocha": "^2.4.5", - "nyc": "^7.0.0", - "standard": "^7.1.0", - "standard-version": "^2.1.2" - }, - "directories": {}, - "dist": { - "shasum": "85568de3cf150ff49fa51825f03a8c880ddcc5c4", - "tarball": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz" - }, - "files": [ - "lib", - "index.js" - ], - "gitHead": "e7c71d5b8e0088596aef17a4e2b0261a85fca713", - "homepage": "https://github.com/yargs/yargs-parser#readme", - "keywords": [ - "argument", - "parser", - "yargs", - "command", - "cli", - "parsing", - "option", - "args", - "argument" - ], - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "andrew@npmjs.com", - "name": "nexdrew" - } - ], - "name": "yargs-parser", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "url": "git+ssh://git@github.com/yargs/yargs-parser.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "pretest": "standard", - "test": "nyc mocha test/*.js", - "version": "standard-version" - }, - "version": "2.4.1" -} diff --git a/node_modules/yargs/CHANGELOG.md b/node_modules/yargs/CHANGELOG.md deleted file mode 100644 index 6c0cb51..0000000 --- a/node_modules/yargs/CHANGELOG.md +++ /dev/null @@ -1,508 +0,0 @@ -## Change Log - -### v3.32.0 (2016/1/14 10:13 +07:00) - -- [#344](https://github.com/bcoe/yargs/pull/344) yargs now has a code of conduct and contributor guidelines (@bcoe) -- [#341](https://github.com/bcoe/yargs/issues/341) Fix edge-case with camel-case arguments (@davibe) -- [#331](https://github.com/bcoe/yargs/pull/331) Handle parsing a raw argument string (@kellyselden) -- [#325](https://github.com/bcoe/yargs/pull/325) Tweaks to make tests pass again on Windows (@isaacs) -- [#321](https://github.com/bcoe/yargs/pull/321) Custom config parsing function (@bcoe) - -### v3.31.0 (2015/12/03 10:15 +07:00) - -- [#239](https://github.com/bcoe/yargs/pull/239) Pass argv to commands (@bcoe) -- [#308](https://github.com/bcoe/yargs/pull/308) Yargs now handles environment variables (@nexdrew) -- [#302](https://github.com/bcoe/yargs/pull/302) Add Indonesian translation (@rilut) -- [#300](https://github.com/bcoe/yargs/pull/300) Add Turkish translation (@feyzo) -- [#298](https://github.com/bcoe/yargs/pull/298) Add Norwegian Bokmål translation (@sindresorhus) -- [#297](https://github.com/bcoe/yargs/pull/297) Fix for layout of cjk characters (@disjukr) -- [#296](https://github.com/bcoe/yargs/pull/296) Add Korean translation (@disjukr) - -### v3.30.0 (2015/11/13 16:29 +07:00) - -- [#293](https://github.com/bcoe/yargs/pull/293) Polish language support (@kamilogorek) -- [#291](https://github.com/bcoe/yargs/pull/291) fix edge-cases with `.alias()` (@bcoe) -- [#289](https://github.com/bcoe/yargs/pull/289) group options in custom groups (@bcoe) - -### v3.29.0 (2015/10/16 21:51 +07:00) - -- [#282](https://github.com/bcoe/yargs/pull/282) completions now accept promises (@LinusU) -- [#281](https://github.com/bcoe/yargs/pull/281) fix parsing issues with dot notation (@bcoe) - -### v3.28.0 (2015/10/16 1:55 +07:00) - -- [#277](https://github.com/bcoe/yargs/pull/277) adds support for ansi escape codes (@bcoe) - -### v3.27.0 (2015/10/08 1:55 +00:00) - -- [#271](https://github.com/bcoe/yargs/pull/273) skips validation for help or version flags with exitProcess(false) (@tepez) -- [#273](https://github.com/bcoe/yargs/pull/273) implements single output for errors with exitProcess(false) (@nexdrew) -- [#269](https://github.com/bcoe/yargs/pull/269) verifies single output for errors with exitProcess(false) (@tepez) -- [#268](https://github.com/bcoe/yargs/pull/268) adds Chinese translation (@qiu8310) -- [#266](https://github.com/bcoe/yargs/pull/266) adds case for -- after -- in parser test (@geophree) - -### v3.26.0 (2015/09/25 2:14 +00:00) - -- [#263](https://github.com/bcoe/yargs/pull/263) document count() and option() object keys (@nexdrew) -- [#259](https://github.com/bcoe/yargs/pull/259) remove util in readme (@38elements) -- [#258](https://github.com/bcoe/yargs/pull/258) node v4 builds, update deps (@nexdrew) -- [#257](https://github.com/bcoe/yargs/pull/257) fix spelling errors (@dkoleary88) - -### v3.25.0 (2015/09/13 7:38 -07:00) - -- [#254](https://github.com/bcoe/yargs/pull/254) adds Japanese translation (@oti) -- [#253](https://github.com/bcoe/yargs/pull/253) fixes for tests on Windows (@bcoe) - -### v3.24.0 (2015/09/04 12:02 +00:00) - -- [#248](https://github.com/bcoe/yargs/pull/248) reinstate os-locale, no spawning (@nexdrew) -- [#249](https://github.com/bcoe/yargs/pull/249) use travis container-based infrastructure (@nexdrew) -- [#247](https://github.com/bcoe/yargs/pull/247) upgrade standard (@nexdrew) - -### v3.23.0 (2015/08/30 23:00 +00:00) - -- [#246](https://github.com/bcoe/yargs/pull/246) detect locale based only on environment variables (@bcoe) -- [#244](https://github.com/bcoe/yargs/pull/244) adds Windows CI testing (@bcoe) -- [#245](https://github.com/bcoe/yargs/pull/245) adds OSX CI testing (@bcoe, @nexdrew) - -### v3.22.0 (2015/08/28 22:26 +00:00) -- [#242](https://github.com/bcoe/yargs/pull/242) adds detectLocale config option (@bcoe) - -### v3.21.1 (2015/08/28 20:58 +00:00) -- [#240](https://github.com/bcoe/yargs/pull/240) hot-fix for Atom on Windows (@bcoe) - -### v3.21.0 (2015/08/21 21:20 +00:00) -- [#238](https://github.com/bcoe/yargs/pull/238) upgrade camelcase, window-size, chai, mocha (@nexdrew) -- [#237](https://github.com/bcoe/yargs/pull/237) adds defaultDescription to option() (@nexdrew) - -### v3.20.0 (2015/08/20 01:29 +00:00) -- [#231](https://github.com/bcoe/yargs/pull/231) Merge pull request #231 from bcoe/detect-locale (@sindresorhus) -- [#235](https://github.com/bcoe/yargs/pull/235) adds german translation to yargs (@maxrimue) - -### v3.19.0 (2015/08/14 05:12 +00:00) -- [#224](https://github.com/bcoe/yargs/pull/224) added Portuguese translation (@codemonkey3045) - -### v3.18.1 (2015/08/12 05:53 +00:00) - -- [#228](https://github.com/bcoe/yargs/pull/228) notes about embedding yargs in Electron (@etiktin) -- [#223](https://github.com/bcoe/yargs/pull/223) make booleans work in config files (@sgentle) - -### v3.18.0 (2015/08/06 20:05 +00:00) -- [#222](https://github.com/bcoe/yargs/pull/222) updates fr locale (@nexdrew) -- [#221](https://github.com/bcoe/yargs/pull/221) adds missing locale strings (@nexdrew) -- [#220](https://github.com/bcoe/yargs/pull/220) adds es locale (@zkat) - -### v3.17.1 (2015/08/02 19:35 +00:00) -- [#218](https://github.com/bcoe/yargs/pull/218) upgrades nyc (@bcoe) - -### v3.17.0 (2015/08/02 18:39 +00:00) -- [#217](https://github.com/bcoe/yargs/pull/217) sort methods in README.md (@nexdrew) -- [#215](https://github.com/bcoe/yargs/pull/215) adds fr locale (@LoicMahieu) - -### v3.16.0 (2015/07/30 04:35 +00:00) -- [#210](https://github.com/bcoe/yargs/pull/210) adds i18n support to yargs (@bcoe) -- [#209](https://github.com/bcoe/yargs/pull/209) adds choices type to yargs (@nexdrew) -- [#207](https://github.com/bcoe/yargs/pull/207) pretty new shields from shields.io (@SimenB) -- [#208](https://github.com/bcoe/yargs/pull/208) improvements to README.md (@nexdrew) -- [#205](https://github.com/bcoe/yargs/pull/205) faster build times on Travis (@ChristianMurphy) - -### v3.15.0 (2015/07/06 06:01 +00:00) -- [#197](https://github.com/bcoe/yargs/pull/197) tweaks to how errors bubble up from parser.js (@bcoe) -- [#193](https://github.com/bcoe/yargs/pull/193) upgraded nyc, reporting now happens by default (@bcoe) - -### v3.14.0 (2015/06/28 02:12 +00:00) - -- [#192](https://github.com/bcoe/yargs/pull/192) standard style nits (@bcoe) -- [#190](https://github.com/bcoe/yargs/pull/190) allow for hidden commands, e.g., - .completion('completion', false) (@tschaub) - -### v3.13.0 (2015/06/24 04:12 +00:00) - -- [#187](https://github.com/bcoe/yargs/pull/187) completion now behaves differently - if it is being run in the context of a command (@tschaub) -- [#186](https://github.com/bcoe/yargs/pull/186) if no matches are found for a completion - default to filename completion (@tschaub) - -### v3.12.0 (2015/06/19 03:23 +00:00) -- [#183](https://github.com/bcoe/yargs/pull/183) don't complete commands if they've already been completed (@tschaub) -- [#181](https://github.com/bcoe/yargs/pull/181) various fixes for completion. (@bcoe, @tschaub) -- [#182](https://github.com/bcoe/yargs/pull/182) you can now set a maximum # of of required arguments (@bcoe) - -### v3.11.0 (2015/06/15 05:15 +00:00) - -- [#173](https://github.com/bcoe/yargs/pull/173) update standard, window-size, chai (@bcoe) -- [#171](https://github.com/bcoe/yargs/pull/171) a description can now be set - when providing a config option. (@5c077yP) - -### v3.10.0 (2015/05/29 04:25 +00:00) - -- [#165](https://github.com/bcoe/yargs/pull/165) expose yargs.terminalWidth() thanks @ensonic (@bcoe) -- [#164](https://github.com/bcoe/yargs/pull/164) better array handling thanks @getify (@bcoe) - -### v3.9.1 (2015/05/20 05:14 +00:00) -- [b6662b6](https://github.com/bcoe/yargs/commit/b6662b6774cfeab4876f41ec5e2f67b7698f4e2f) clarify .config() docs (@linclark) -- [0291360](https://github.com/bcoe/yargs/commit/02913606285ce31ce81d7f12c48d8a3029776ec7) fixed tests, switched to nyc for coverage, fixed security issue, added Lin as collaborator (@bcoe) - -### v3.9.0 (2015/05/10 18:32 +00:00) -- [#157](https://github.com/bcoe/yargs/pull/157) Merge pull request #157 from bcoe/command-yargs. allows handling of command specific arguments. Thanks for the suggestion @ohjames (@bcoe) -- [#158](https://github.com/bcoe/yargs/pull/158) Merge pull request #158 from kemitchell/spdx-license. Update license format (@kemitchell) - -### v3.8.0 (2015/04/24 23:10 +00:00) -- [#154](https://github.com/bcoe/yargs/pull/154) showHelp's method signature was misleading fixes #153 (@bcoe) -- [#151](https://github.com/bcoe/yargs/pull/151) refactor yargs' table layout logic to use new helper library (@bcoe) -- [#150](https://github.com/bcoe/yargs/pull/150) Fix README example in argument requirements (@annonymouse) - -### v3.7.2 (2015/04/13 11:52 -07:00) - -* [679fbbf](https://github.com/bcoe/yargs/commit/679fbbf55904030ccee8a2635e8e5f46551ab2f0) updated yargs to use the [standard](https://github.com/feross/standard) style guide (agokjr) -* [22382ee](https://github.com/bcoe/yargs/commit/22382ee9f5b495bc2586c1758cd1091cec3647f9 various bug fixes for $0 (@nylen) - -### v3.7.1 (2015/04/10 11:06 -07:00) - -* [89e1992](https://github.com/bcoe/yargs/commit/89e1992a004ba73609b5f9ee6890c4060857aba4) detect iojs bin along with node bin. (@bcoe) -* [755509e](https://github.com/bcoe/yargs/commit/755509ea90041e5f7833bba3b8c5deffe56f0aab) improvements to example documentation in README.md (@rstacruz) -* [0d2dfc8](https://github.com/bcoe/yargs/commit/0d2dfc822a43418242908ad97ddd5291a1b35dc6) showHelp() no longer requires that .argv has been called (@bcoe) - -### v3.7.0 (2015/04/04 02:29 -07:00) - -* [56cbe2d](https://github.com/bcoe/yargs/commit/56cbe2ddd33dc176dcbf97ba40559864a9f114e4) make .requiresArg() work with type hints. (@bcoe). -* [2f5d562](https://github.com/bcoe/yargs/commit/2f5d5624f736741deeedf6a664d57bc4d857bdd0) serialize arrays and objects in usage strings. (@bcoe). -* [5126304](https://github.com/bcoe/yargs/commit/5126304dd18351fc28f10530616fdd9361e0af98) be more lenient about alias/primary key ordering in chaining API. (@bcoe) - -### v3.6.0 (2015/03/21 01:00 +00:00) -- [4e24e22](https://github.com/bcoe/yargs/commit/4e24e22e6a195e55ab943ede704a0231ac33b99c) support for .js configuration files. (@pirxpilot) - -### v3.5.4 (2015/03/12 05:56 +00:00) -- [c16cc08](https://github.com/bcoe/yargs/commit/c16cc085501155cf7fd853ccdf8584b05ab92b78) message for non-option arguments is now optional, thanks to (@raine) - -### v3.5.3 (2015/03/09 06:14 +00:00) -- [870b428](https://github.com/bcoe/yargs/commit/870b428cf515d560926ca392555b7ad57dba9e3d) completion script was missing in package.json (@bcoe) - -### v3.5.2 (2015/03/09 06:11 +00:00) -- [58a4b24](https://github.com/bcoe/yargs/commit/58a4b2473ebbb326713d522be53e32d3aabb08d2) parse was being called multiple times, resulting in strange behavior (@bcoe) - -### v3.5.1 (2015/03/09 04:55 +00:00) -- [4e588e0](https://github.com/bcoe/yargs/commit/4e588e055afbeb9336533095f051496e3977f515) accidentally left testing logic in (@bcoe) - -### v3.5.0 (2015/03/09 04:49 +00:00) -- [718bacd](https://github.com/bcoe/yargs/commit/718bacd81b9b44f786af76b2afe491fe06274f19) added support for bash completions see #4 (@bcoe) -- [a192882](https://github.com/bcoe/yargs/commit/a19288270fc431396c42af01125eeb4443664528) downgrade to mocha 2.1.0 until https://github.com/mochajs/mocha/issues/1585 can be sorted out (@bcoe) - -### v3.4.7 (2015/03/09 04:09 +00:00) -- [9845e5c](https://github.com/bcoe/yargs/commit/9845e5c1a9c684ba0be3f0bfb40e7b62ab49d9c8) the Argv singleton was not being updated when manually parsing arguments, fixes #114 (@bcoe) - -### v3.4.6 (2015/03/09 04:01 +00:00) -- [45b4c80](https://github.com/bcoe/yargs/commit/45b4c80b890d02770b0a94f326695a8a566e8fe9) set placeholders for all keys fixes #115 (@bcoe) - -### v3.4.5 (2015/03/01 20:31 +00:00) -- [a758e0b](https://github.com/bcoe/yargs/commit/a758e0b2556184f067cf3d9c4ef886d39817ebd2) fix for count consuming too many arguments (@bcoe) - -### v3.4.4 (2015/02/28 04:52 +00:00) -- [0476af7](https://github.com/bcoe/yargs/commit/0476af757966acf980d998b45108221d4888cfcb) added nargs feature, allowing you to specify the number of arguments after an option (@bcoe) -- [092477d](https://github.com/bcoe/yargs/commit/092477d7ab3efbf0ba11cede57f7d8cfc70b024f) updated README with full example of v3.0 API (@bcoe) - -### v3.3.3 (2015/02/28 04:23 +00:00) -- [0c4b769](https://github.com/bcoe/yargs/commit/0c4b769516cd8d93a7c4e5e675628ae0049aa9a8) remove string dependency, which conflicted with other libraries see #106 (@bcoe) - -### v3.3.2 (2015/02/28 04:11 +00:00) -- [2a98906](https://github.com/bcoe/yargs/commit/2a9890675821c0e7a12f146ce008b0562cb8ec9a) add $0 to epilog (@schnittstabil) - -### v3.3.1 (2015/02/24 03:28 +00:00) -- [ad485ce](https://github.com/bcoe/yargs/commit/ad485ce748ebdfce25b88ef9d6e83d97a2f68987) fix for applying defaults to camel-case args (@bcoe) - -### v3.3.0 (2015/02/24 00:49 +00:00) -- [8bfe36d](https://github.com/bcoe/yargs/commit/8bfe36d7fb0f93a799ea3f4c756a7467c320f8c0) fix and document restart() command, as a tool for building nested CLIs (@bcoe) - -### v3.2.1 (2015/02/22 05:45 +00:00) -- [49a6d18](https://github.com/bcoe/yargs/commit/49a6d1822a4ef9b1ea6f90cc366be60912628885) you can now provide a function that generates a default value (@bcoe) - -### v3.2.0 (2015/02/22 05:24 +00:00) -- [7a55886](https://github.com/bcoe/yargs/commit/7a55886c9343cf71a20744ca5cdd56d2ea7412d5) improvements to yargs two-column text layout (@bcoe) -- [b6ab513](https://github.com/bcoe/yargs/commit/b6ab5136a4c3fa6aa496f6b6360382e403183989) Tweak NPM version badge (@nylen) - -### v3.1.0 (2015/02/19 19:37 +00:00) -- [9bd2379](https://github.com/bcoe/yargs/commit/9bd237921cf1b61fd9f32c0e6d23f572fc225861) version now accepts a function, making it easy to load version #s from a package.json (@bcoe) - -### v3.0.4 (2015/02/14 01:40 +00:00) -- [0b7c19b](https://github.com/bcoe/yargs/commit/0b7c19beaecb747267ca4cc10e5cb2a8550bc4b7) various fixes for dot-notation handling (@bcoe) - -### v3.0.3 (2015/02/14 00:59 +00:00) -- [c3f35e9](https://github.com/bcoe/yargs/commit/c3f35e99bd5a0d278073fcadd95e2d778616cc17) make sure dot-notation is applied to aliases (@bcoe) - -### 3.0.2 (2015/02/13 16:50 +00:00) -- [74c8967](https://github.com/bcoe/yargs/commit/74c8967c340c204a0a7edf8a702b6f46c2705435) document epilog shorthand of epilogue. (@bcoe) -- [670110f](https://github.com/bcoe/yargs/commit/670110fc01bedc4831b6fec6afac54517d5a71bc) any non-truthy value now causes check to fail see #76 (@bcoe) -- [0d8f791](https://github.com/bcoe/yargs/commit/0d8f791a33c11ced4cd431ea8d3d3a337d456b56) finished implementing my wish-list of fetures for yargs 3.0. see #88 (@bcoe) -- [5768447](https://github.com/bcoe/yargs/commit/5768447447c4c8e8304f178846206ce86540f063) fix coverage. (@bcoe) -- [82e793f](https://github.com/bcoe/yargs/commit/82e793f3f61c41259eaacb67f0796aea2cf2aaa0) detect console width and perform word-wrapping. (@bcoe) -- [67476b3](https://github.com/bcoe/yargs/commit/67476b37eea07fee55f23f35b9e0c7d76682b86d) refactor two-column table layout so that we can use it for examples and usage (@bcoe) -- [4724cdf](https://github.com/bcoe/yargs/commit/4724cdfcc8e37ae1ca3dcce9d762f476e9ef4bb4) major refactor of index.js, in prep for 3.x release. (@bcoe) - -### v2.3.0 (2015/02/08 20:41 +00:00) -- [d824620](https://github.com/bcoe/yargs/commit/d824620493df4e63664af1fe320764dd1a9244e6) allow for undefined boolean defaults (@ashi009) - -### v2.2.0 (2015/02/08 20:07 +00:00) -- [d6edd98](https://github.com/bcoe/yargs/commit/d6edd9848826e7389ed1393858c45d03961365fd) in-prep for further refactoring, and a 3.x release I've shuffled some things around and gotten test-coverage to 100%. (@bcoe) - -### v2.1.2 (2015/02/08 06:05 +00:00) -- [d640745](https://github.com/bcoe/yargs/commit/d640745a7b9f8d476e0223879d056d18d9c265c4) switch to path.relative (@bcoe) -- [3bfd41f](https://github.com/bcoe/yargs/commit/3bfd41ff262a041f29d828b88936a79c63cad594) remove mocha.opts. (@bcoe) -- [47a2f35](https://github.com/bcoe/yargs/commit/47a2f357091db70903a402d6765501c1d63f15fe) document using .string('_') for string ids. see #56 (@bcoe) -- [#57](https://github.com/bcoe/yargs/pull/57) Merge pull request #57 from eush77/option-readme (@eush77) - -### v2.1.1 (2015/02/06 08:08 +00:00) -- [01c6c61](https://github.com/bcoe/yargs/commit/01c6c61d67b4ebf88f41f0b32a345ec67f0ac17d) fix for #71, 'newAliases' of undefined (@bcoe) - -### v2.1.0 (2015/02/06 07:59 +00:00) -- [6a1a3fa](https://github.com/bcoe/yargs/commit/6a1a3fa731958e26ccd56885f183dd8985cc828f) try to guess argument types, and apply sensible defaults see #73 (@bcoe) - -### v2.0.1 (2015/02/06 07:54 +00:00) -- [96a06b2](https://github.com/bcoe/yargs/commit/96a06b2650ff1d085a52b7328d8bba614c20cc12) Fix for strange behavior with --sort option, see #51 (@bcoe) - -### v2.0.0 (2015/02/06 07:45 +00:00) -- [0250517](https://github.com/bcoe/yargs/commit/0250517c9643e53f431b824e8ccfa54937414011) - [108fb84](https://github.com/bcoe/yargs/commit/108fb8409a3a63dcaf99d917fe4dfcfaa1de236d) fixed bug with boolean parsing, when bools separated by = see #66 (@bcoe) -- [a465a59](https://github.com/bcoe/yargs/commit/a465a5915f912715738de890982e4f8395958b10) Add `files` field to the package.json (@shinnn) -- [31043de](https://github.com/bcoe/yargs/commit/31043de7a38a17c4c97711f1099f5fb164334db3) fix for yargs.argv having the same keys added multiple times see #63 (@bcoe) -- [2d68c5b](https://github.com/bcoe/yargs/commit/2d68c5b91c976431001c4863ce47c9297850f1ad) Disable process.exit calls using .exitProcess(false) (@cianclarke) -- [45da9ec](https://github.com/bcoe/yargs/commit/45da9ec4c55a7bd394721bc6a1db0dabad7bc52a) Mention .option in README (@eush77) - -### v1.3.2 (2014/10/06 21:56 +00:00) -- [b8d3472](https://github.com/bcoe/yargs/commit/b8d34725482e5821a3cc809c0df71378f282f526) 1.3.2 (@chevex) - -### list (2014/08/30 18:41 +00:00) -- [fbc777f](https://github.com/bcoe/yargs/commit/fbc777f416eeefd37c84e44d27d7dfc7c1925721) Now that yargs is the successor to optimist, I'm changing the README language to be more universal. Pirate speak isn't very accessible to non-native speakers. (@chevex) -- [a54d068](https://github.com/bcoe/yargs/commit/a54d0682ae2efc2394d407ab171cc8a8bbd135ea) version output will not print extra newline (@boneskull) -- [1cef5d6](https://github.com/bcoe/yargs/commit/1cef5d62a9d6d61a3948a49574892e01932cc6ae) Added contributors section to package.json (@chrisn) -- [cc295c0](https://github.com/bcoe/yargs/commit/cc295c0a80a2de267e0155b60d315fc4b6f7c709) Added 'require' and 'required' as synonyms for 'demand' (@chrisn) -- [d0bf951](https://github.com/bcoe/yargs/commit/d0bf951d949066b6280101ed606593d079ee15c8) Updating minimist. (@chevex) -- [c15f8e7](https://github.com/bcoe/yargs/commit/c15f8e7f245b261e542cf205ce4f4313630cbdb4) Fix #31 (bad interaction between camelCase options and strict mode) (@nylen) -- [d991b9b](https://github.com/bcoe/yargs/commit/d991b9be687a68812dee1e3b185ba64b7778b82d) Added .help() and .version() methods (@chrisn) -- [e8c8aa4](https://github.com/bcoe/yargs/commit/e8c8aa46268379357cb11e9fc34b8c403037724b) Added .showHelpOnFail() method (@chrisn) -- [e855af4](https://github.com/bcoe/yargs/commit/e855af4a933ea966b5bbdd3c4c6397a4bac1a053) Allow boolean flag with .demand() (@chrisn) -- [14dbec2](https://github.com/bcoe/yargs/commit/14dbec24fb7380683198e2b20c4deb8423e64bea) Fixes issue #22. Arguments are no longer printed to the console when using .config. (@chevex) -- [bef74fc](https://github.com/bcoe/yargs/commit/bef74fcddc1544598a804f80d0a3728459f196bf) Informing users that Yargs is the official optimist successor. (@chevex) -- [#24](https://github.com/bcoe/yargs/pull/24) Merge pull request #24 from chrisn/strict (@chrisn) -- [889a2b2](https://github.com/bcoe/yargs/commit/889a2b28eb9768801b05163360a470d0fd6c8b79) Added requiresArg option, for options that require values (@chrisn) -- [eb16369](https://github.com/bcoe/yargs/commit/eb163692262be1fe80b992fd8803d5923c5a9b18) Added .strict() method, to report error if unknown arguments are given (@chrisn) -- [0471c3f](https://github.com/bcoe/yargs/commit/0471c3fd999e1ad4e6cded88b8aa02013b66d14f) Changed optimist to yargs in usage-options.js example (@chrisn) -- [5c88f74](https://github.com/bcoe/yargs/commit/5c88f74e3cf031b17c54b4b6606c83e485ff520e) Change optimist to yargs in examples (@chrisn) -- [66f12c8](https://github.com/bcoe/yargs/commit/66f12c82ba3c943e4de8ca862980e835da8ecb3a) Fix a couple of bad interactions between aliases and defaults (@nylen) -- [8fa1d80](https://github.com/bcoe/yargs/commit/8fa1d80f14b03eb1f2898863a61f1d1615bceb50) Document second argument of usage(message, opts) (@Gobie) -- [56e6528](https://github.com/bcoe/yargs/commit/56e6528cf674ff70d63083fb044ff240f608448e) For "--some-option", also set argv.someOption (@nylen) -- [ed5f6d3](https://github.com/bcoe/yargs/commit/ed5f6d33f57ad1086b11c91b51100f7c6c7fa8ee) Finished porting unit tests to Mocha. (@chevex) - -### v1.0.15 (2014/02/05 23:18 +00:00) -- [e2b1fc0](https://github.com/bcoe/yargs/commit/e2b1fc0c4a59cf532ae9b01b275e1ef57eeb64d2) 1.0.15 update to badges (@chevex) - -### v1.0.14 (2014/02/05 23:17 +00:00) -- [f33bbb0](https://github.com/bcoe/yargs/commit/f33bbb0f00fe18960f849cc8e15a7428a4cd59b8) Revert "Fixed issue which caused .demand function not to work correctly." (@chevex) - -### v1.0.13 (2014/02/05 22:13 +00:00) -- [6509e5e](https://github.com/bcoe/yargs/commit/6509e5e7dee6ef1a1f60eea104be0faa1a045075) Fixed issue which caused .demand function not to work correctly. (@chevex) - -### v1.0.12 (2013/12/13 00:09 +00:00) -- [05eb267](https://github.com/bcoe/yargs/commit/05eb26741c9ce446b33ff006e5d33221f53eaceb) 1.0.12 (@chevex) - -### v1.0.11 (2013/12/13 00:07 +00:00) -- [c1bde46](https://github.com/bcoe/yargs/commit/c1bde46e37318a68b87d17a50c130c861d6ce4a9) 1.0.11 (@chevex) - -### v1.0.10 (2013/12/12 23:57 +00:00) -- [dfebf81](https://github.com/bcoe/yargs/commit/dfebf8164c25c650701528ee581ca483a99dc21c) Fixed formatting in README (@chevex) - -### v1.0.9 (2013/12/12 23:47 +00:00) -- [0b4e34a](https://github.com/bcoe/yargs/commit/0b4e34af5e6d84a9dbb3bb6d02cd87588031c182) Update README.md (@chevex) - -### v1.0.8 (2013/12/06 16:36 +00:00) -- [#1](https://github.com/bcoe/yargs/pull/1) fix error caused by check() see #1 (@martinheidegger) - -### v1.0.7 (2013/11/24 18:01 +00:00) -- [a247d88](https://github.com/bcoe/yargs/commit/a247d88d6e46644cbb7303c18b1bb678fc132d72) Modified Pirate Joe image. (@chevex) - -### v1.0.6 (2013/11/23 19:21 +00:00) -- [d7f69e1](https://github.com/bcoe/yargs/commit/d7f69e1d34bc929736a8bdccdc724583e21b7eab) Updated Pirate Joe image. (@chevex) - -### v1.0.5 (2013/11/23 19:09 +00:00) -- [ece809c](https://github.com/bcoe/yargs/commit/ece809cf317cc659175e1d66d87f3ca68c2760be) Updated readme notice again. (@chevex) - -### v1.0.4 (2013/11/23 19:05 +00:00) -- [9e81e81](https://github.com/bcoe/yargs/commit/9e81e81654028f83ba86ffc3ac772a0476084e5e) Updated README with a notice about yargs being a fork of optimist and what that implies. (@chevex) - -### v1.0.3 (2013/11/23 17:43 +00:00) -- [65e7a78](https://github.com/bcoe/yargs/commit/65e7a782c86764944d63d084416aba9ee6019c5f) Changed some small wording in README.md. (@chevex) -- [459e20e](https://github.com/bcoe/yargs/commit/459e20e539b366b85128dd281ccd42221e96c7da) Fix a bug in the options function, when string and boolean options weren't applied to aliases. (@shockone) - -### v1.0.2 (2013/11/23 09:46 +00:00) -- [3d80ebe](https://github.com/bcoe/yargs/commit/3d80ebed866d3799224b6f7d596247186a3898a9) 1.0.2 (@chevex) - -### v1.0.1 (2013/11/23 09:39 +00:00) -- [f80ff36](https://github.com/bcoe/yargs/commit/f80ff3642d580d4b68bf9f5a94277481bd027142) Updated image. (@chevex) - -### v1.0.0 (2013/11/23 09:33 +00:00) -- [54e31d5](https://github.com/bcoe/yargs/commit/54e31d505f820b80af13644e460894b320bf25a3) Rebranded from optimist to yargs in the spirit of the fork :D (@chevex) -- [4ebb6c5](https://github.com/bcoe/yargs/commit/4ebb6c59f44787db7c24c5b8fe2680f01a23f498) Added documentation for demandCount(). (@chevex) -- [4561ce6](https://github.com/bcoe/yargs/commit/4561ce66dcffa95f49e8b4449b25b94cd68acb25) Simplified the error messages returned by .check(). (@chevex) -- [661c678](https://github.com/bcoe/yargs/commit/661c67886f479b16254a830b7e1db3be29e6b7a6) Fixed an issue with demand not accepting a zero value. (@chevex) -- [731dd3c](https://github.com/bcoe/yargs/commit/731dd3c37624790490bd6df4d5f1da8f4348279e) Add .fail(fn) so death isn't the only option. Should fix issue #39. (@chevex) -- [fa15417](https://github.com/bcoe/yargs/commit/fa15417ff9e70dace0d726627a5818654824c1d8) Added a few missing 'return self' (@chevex) -- [e655e4d](https://github.com/bcoe/yargs/commit/e655e4d99d1ae1d3695ef755d51c2de08d669761) Fix showing help in certain JS environments. (@chevex) -- [a746a31](https://github.com/bcoe/yargs/commit/a746a31cd47c87327028e6ea33762d6187ec5c87) Better string representation of default values. (@chevex) -- [6134619](https://github.com/bcoe/yargs/commit/6134619a7e90b911d5443230b644c5d447c1a68c) Implies: conditional demands (@chevex) -- [046b93b](https://github.com/bcoe/yargs/commit/046b93b5d40a27367af4cb29726e4d781d934639) Added support for JSON config files. (@chevex) -- [a677ec0](https://github.com/bcoe/yargs/commit/a677ec0a0ecccd99c75e571d03323f950688da03) Add .example(cmd, desc) feature. (@chevex) -- [1bd4375](https://github.com/bcoe/yargs/commit/1bd4375e11327ba1687d4bb6e5e9f3c30c1be2af) Added 'defaults' as alias to 'default' so as to avoid usage of a reserved keyword. (@chevex) -- [6b753c1](https://github.com/bcoe/yargs/commit/6b753c16ca09e723060e70b773b430323b29c45c) add .normalize(args..) support for normalizing paths (@chevex) -- [33d7d59](https://github.com/bcoe/yargs/commit/33d7d59341d364f03d3a25f0a55cb99004dbbe4b) Customize error messages with demand(key, msg) (@chevex) -- [647d37f](https://github.com/bcoe/yargs/commit/647d37f164c20f4bafbf67dd9db6cd6e2cd3b49f) Merge branch 'rewrite-duplicate-test' of github.com:isbadawi/node-optimist (@chevex) -- [9059d1a](https://github.com/bcoe/yargs/commit/9059d1ad5e8aea686c2a01c89a23efdf929fff2e) Pass aliases object to check functions for greater versatility. (@chevex) -- [623dc26](https://github.com/bcoe/yargs/commit/623dc26c7331abff2465ef8532e3418996d42fe6) Added ability to count boolean options and rolled minimist library back into project. (@chevex) -- [49f0dce](https://github.com/bcoe/yargs/commit/49f0dcef35de4db544c3966350d36eb5838703f6) Fixed small typo. (@chevex) -- [79ec980](https://github.com/bcoe/yargs/commit/79ec9806d9ca6eb0014cfa4b6d1849f4f004baf2) Removed dependency on wordwrap module. (@chevex) -- [ea14630](https://github.com/bcoe/yargs/commit/ea14630feddd69d1de99dd8c0e08948f4c91f00a) Merge branch 'master' of github.com:chbrown/node-optimist (@chevex) -- [2b75da2](https://github.com/bcoe/yargs/commit/2b75da2624061e0f4f3107d20303c06ec9054906) Merge branch 'master' of github.com:seanzhou1023/node-optimist (@chevex) -- [d9bda11](https://github.com/bcoe/yargs/commit/d9bda1116e26f3b40e833ca9ca19263afea53565) Merge branch 'patch-1' of github.com:thefourtheye/node-optimist (@chevex) -- [d6cc606](https://github.com/bcoe/yargs/commit/d6cc6064a4f1bea38a16a4430b8a1334832fbeff) Renamed README. (@chevex) -- [9498d3f](https://github.com/bcoe/yargs/commit/9498d3f59acfb5e102826503e681623c3a64b178) Renamed readme and added .gitignore. (@chevex) -- [bbd1fe3](https://github.com/bcoe/yargs/commit/bbd1fe37fefa366dde0fb3dc44d91fe8b28f57f5) Included examples for ```help``` and ```showHelp``` functions and fixed few formatting issues (@thefourtheye) -- [37fea04](https://github.com/bcoe/yargs/commit/37fea0470a5796a0294c1dcfff68d8041650e622) .alias({}) behaves differently based on mapping direction when generating descriptions (@chbrown) -- [855b20d](https://github.com/bcoe/yargs/commit/855b20d0be567ca121d06b30bea64001b74f3d6d) Documented function signatures are useful for dynamically typed languages. (@chbrown) - -### 0.6.0 (2013/06/25 08:48 +00:00) -- [d37bfe0](https://github.com/bcoe/yargs/commit/d37bfe05ae6d295a0ab481efe4881222412791f4) all tests passing using minimist (@substack) -- [76f1352](https://github.com/bcoe/yargs/commit/76f135270399d01f2bbc621e524a5966e5c422fd) all parse tests now passing (@substack) -- [a7b6754](https://github.com/bcoe/yargs/commit/a7b6754276c38d1565479a5685c3781aeb947816) using minimist, some tests passing (@substack) -- [6655688](https://github.com/bcoe/yargs/commit/66556882aa731cbbbe16cc4d42c85740a2e98099) Give credit where its due (@DeadAlready) -- [602a2a9](https://github.com/bcoe/yargs/commit/602a2a92a459f93704794ad51b115bbb08b535ce) v0.5.3 - Remove wordwrap as dependency (@DeadAlready) - -### 0.5.2 (2013/05/31 03:46 +00:00) -- [4497ca5](https://github.com/bcoe/yargs/commit/4497ca55e332760a37b866ec119ded347ca27a87) fixed the whitespace bug without breaking anything else (@substack) -- [5a3dd1a](https://github.com/bcoe/yargs/commit/5a3dd1a4e0211a38613c6e02f61328e1031953fa) failing test for whitespace arg (@substack) - -### 0.5.1 (2013/05/30 07:17 +00:00) -- [a20228f](https://github.com/bcoe/yargs/commit/a20228f62a454755dd07f628a7c5759113918327) fix parse() to work with functions before it (@substack) -- [b13bd4c](https://github.com/bcoe/yargs/commit/b13bd4cac856a9821d42fa173bdb58f089365a7d) failing test for parse() with modifiers (@substack) - -### 0.5.0 (2013/05/18 21:59 +00:00) -- [c474a64](https://github.com/bcoe/yargs/commit/c474a649231527915c222156e3b40806d365a87c) fixes for dash (@substack) - -### 0.4.0 (2013/04/13 19:03 +00:00) -- [dafe3e1](https://github.com/bcoe/yargs/commit/dafe3e18d7c6e7c2d68e06559df0e5cbea3adb14) failing short test (@substack) - -### 0.3.7 (2013/04/04 04:07 +00:00) -- [6c7a0ec](https://github.com/bcoe/yargs/commit/6c7a0ec94ce4199a505f0518b4d6635d4e47cc81) Fix for windows. On windows there is no _ in environment. (@hdf) - -### 0.3.6 (2013/04/04 04:04 +00:00) -- [e72346a](https://github.com/bcoe/yargs/commit/e72346a727b7267af5aa008b418db89970873f05) Add support for newlines in -a="" arguments (@danielbeardsley) -- [71e1fb5](https://github.com/bcoe/yargs/commit/71e1fb55ea9987110a669ac6ec12338cfff3821c) drop 0.4, add 0.8 to travis (@substack) - -### 0.3.5 (2012/10/10 11:09 +00:00) -- [ee692b3](https://github.com/bcoe/yargs/commit/ee692b37554c70a0bb16389a50a26b66745cbbea) Fix parsing booleans (@vojtajina) -- [5045122](https://github.com/bcoe/yargs/commit/5045122664c3f5b4805addf1be2148d5856f7ce8) set $0 properly in the tests (@substack) - -### 0.3.4 (2012/04/30 06:54 +00:00) -- [f28c0e6](https://github.com/bcoe/yargs/commit/f28c0e62ca94f6e0bb2e6d82fc3d91a55e69b903) bump for string "true" params (@substack) -- [8f44aeb](https://github.com/bcoe/yargs/commit/8f44aeb74121ddd689580e2bf74ef86a605e9bf2) Fix failing test for aliased booleans. (@coderarity) -- [b9f7b61](https://github.com/bcoe/yargs/commit/b9f7b613b1e68e11e6c23fbda9e555a517dcc976) Add failing test for short aliased booleans. (@coderarity) - -### 0.3.3 (2012/04/30 06:45 +00:00) -- [541bac8](https://github.com/bcoe/yargs/commit/541bac8dd787a5f1a5d28f6d8deb1627871705e7) Fixes #37. - -### 0.3.2 (2012/04/12 20:28 +00:00) -- [3a0f014](https://github.com/bcoe/yargs/commit/3a0f014c1451280ac1c9caa1f639d31675586eec) travis badge (@substack) -- [4fb60bf](https://github.com/bcoe/yargs/commit/4fb60bf17845f4ce3293f8ca49c9a1a7c736cfce) Fix boolean aliases. (@coderarity) -- [f14dda5](https://github.com/bcoe/yargs/commit/f14dda546efc4fe06ace04d36919bfbb7634f79b) Adjusted package.json to use tap (@jfhbrook) -- [88e5d32](https://github.com/bcoe/yargs/commit/88e5d32295be6e544c8d355ff84e355af38a1c74) test/usage.js no longer hangs (@jfhbrook) -- [e1e740c](https://github.com/bcoe/yargs/commit/e1e740c27082f3ce84deca2093d9db2ef735d0e5) two tests for combined boolean/alias opts parsing (@jfhbrook) - -### 0.3.1 (2011/12/31 08:44 +00:00) -- [d09b719](https://github.com/bcoe/yargs/commit/d09b71980ef711b6cf3918cd19beec8257e40e82) If "default" is set to false it was not passed on, fixed. (@wolframkriesing) - -### 0.3.0 (2011/12/09 06:03 +00:00) -- [6e74aa7](https://github.com/bcoe/yargs/commit/6e74aa7b46a65773e20c0cb68d2d336d4a0d553d) bump and documented dot notation (@substack) - -### 0.2.7 (2011/10/20 02:25 +00:00) -- [94adee2](https://github.com/bcoe/yargs/commit/94adee20e17b58d0836f80e8b9cdbe9813800916) argv._ can be told 'Hey! argv._! Don't be messing with my args.', and it WILL obey (@colinta) -- [c46fdd5](https://github.com/bcoe/yargs/commit/c46fdd56a05410ae4a1e724a4820c82e77ff5469) optimistic critter image (@substack) -- [5c95c73](https://github.com/bcoe/yargs/commit/5c95c73aedf4c7482bd423e10c545e86d7c8a125) alias options() to option() (@substack) -- [f7692ea](https://github.com/bcoe/yargs/commit/f7692ea8da342850af819367833abb685fde41d8) [fix] Fix for parsing boolean edge case (@indexzero) -- [d1f92d1](https://github.com/bcoe/yargs/commit/d1f92d1425bd7f356055e78621b30cdf9741a3c2) -- [b01bda8](https://github.com/bcoe/yargs/commit/b01bda8d86e455bbf74ce497864cb8ab5b9fb847) [fix test] Update to ensure optimist is aware of default booleans. Associated tests included (@indexzero) -- [aa753e7](https://github.com/bcoe/yargs/commit/aa753e7c54fb3a12f513769a0ff6d54aa0f63943) [dist test] Update devDependencies in package.json. Update test pathing to be more npm and require.paths future-proof (@indexzero) -- [7bfce2f](https://github.com/bcoe/yargs/commit/7bfce2f3b3c98e6539e7549d35fbabced7e9341e) s/sys/util/ (@substack) -- [d420a7a](https://github.com/bcoe/yargs/commit/d420a7a9c890d2cdb11acfaf3ea3f43bc3e39f41) update usage output (@substack) -- [cf86eed](https://github.com/bcoe/yargs/commit/cf86eede2e5fc7495b6ec15e6d137d9ac814f075) some sage readme protips about parsing rules (@substack) -- [5da9f7a](https://github.com/bcoe/yargs/commit/5da9f7a5c0e1758ec7c5801fb3e94d3f6e970513) documented all the methods finally (@substack) -- [8ca6879](https://github.com/bcoe/yargs/commit/8ca6879311224b25933642987300f6a29de5c21b) fenced syntax highlighting (@substack) -- [b72bacf](https://github.com/bcoe/yargs/commit/b72bacf1d02594778c1935405bc8137eb61761dc) right-alignment of wrapped extra params (@substack) -- [2b980bf](https://github.com/bcoe/yargs/commit/2b980bf2656b4ee8fc5134dc5f56a48855c35198) now with .wrap() (@substack) -- [d614f63](https://github.com/bcoe/yargs/commit/d614f639654057d1b7e35e3f5a306e88ec2ad1e4) don't show 'Options:' when there aren't any (@substack) -- [691eda3](https://github.com/bcoe/yargs/commit/691eda354df97b5a86168317abcbcaabdc08a0fb) failing test for multi-aliasing (@substack) -- [0826c9f](https://github.com/bcoe/yargs/commit/0826c9f462109feab2bc7a99346d22e72bf774b7) "Options:" > "options:" (@substack) -- [72f7490](https://github.com/bcoe/yargs/commit/72f749025d01b7f295738ed370a669d885fbada0) [minor] Update formatting for `.showHelp()` (@indexzero) -- [75aecce](https://github.com/bcoe/yargs/commit/75aeccea74329094072f95800e02c275e7d999aa) options works again, too lazy to write a proper test right now (@substack) -- [f742e54](https://github.com/bcoe/yargs/commit/f742e5439817c662dc3bd8734ddd6467e6018cfd) line_count_options example, which breaks (@substack) -- [4ca06b8](https://github.com/bcoe/yargs/commit/4ca06b8b4ea99b5d5714b315a2a8576bee6e5537) line count example (@substack) -- [eeb8423](https://github.com/bcoe/yargs/commit/eeb8423e0a5ecc9dc3eb1e6df9f3f8c1c88f920b) remove self.argv setting in boolean (@substack) -- [6903412](https://github.com/bcoe/yargs/commit/69034126804660af9cc20ea7f4457b50338ee3d7) removed camel case for now (@substack) -- [5a0d88b](https://github.com/bcoe/yargs/commit/5a0d88bf23e9fa79635dd034e2a1aa992acc83cd) remove dead longest checking code (@substack) -- [d782170](https://github.com/bcoe/yargs/commit/d782170babf7284b1aa34f5350df0dd49c373fa8) .help() too (@substack) -- [622ec17](https://github.com/bcoe/yargs/commit/622ec17379bb5374fdbb190404c82bc600975791) rm old help generator (@substack) -- [7c8baac](https://github.com/bcoe/yargs/commit/7c8baac4d66195e9f5158503ea9ebfb61153dab7) nub keys (@substack) -- [8197785](https://github.com/bcoe/yargs/commit/8197785ad4762465084485b041abd722f69bf344) generate help message based on the previous calls, todo: nub (@substack) -- [3ffbdc3](https://github.com/bcoe/yargs/commit/3ffbdc33c8f5e83d4ea2ac60575ce119570c7ede) stub out new showHelp, better checks (@substack) -- [d4e21f5](https://github.com/bcoe/yargs/commit/d4e21f56a4830f7de841900d3c79756fb9886184) let .options() take single options too (@substack) -- [3c4cf29](https://github.com/bcoe/yargs/commit/3c4cf2901a29bac119cca8e983028d8669230ec6) .options() is now heaps simpler (@substack) -- [89f0d04](https://github.com/bcoe/yargs/commit/89f0d043cbccd302f10ab30c2069e05d2bf817c9) defaults work again, all tests pass (@substack) -- [dd87333](https://github.com/bcoe/yargs/commit/dd8733365423006a6e4156372ebb55f98323af58) update test error messages, down to 2 failing tests (@substack) -- [53f7bc6](https://github.com/bcoe/yargs/commit/53f7bc626b9875f2abdfc5dd7a80bde7f14143a3) fix for bools doubling up, passes the parse test again, others fail (@substack) -- [2213e2d](https://github.com/bcoe/yargs/commit/2213e2ddc7263226fba717fb041dc3fde9bc2ee4) refactored for an argv getter, failing several tests (@substack) -- [d1e7379](https://github.com/bcoe/yargs/commit/d1e737970f15c6c006bebdd8917706827ff2f0f2) just rescan for now, alias test passes (@substack) -- [b2f8c99](https://github.com/bcoe/yargs/commit/b2f8c99cc477a8eb0fdf4cf178e1785b63185cfd) failing alias test (@substack) -- [d0c0174](https://github.com/bcoe/yargs/commit/d0c0174daa144bfb6dc7290fdc448c393c475e15) .alias() (@substack) -- [d85f431](https://github.com/bcoe/yargs/commit/d85f431ad7d07b058af3f2a57daa51495576c164) [api] Remove `.describe()` in favor of building upon the existing `.usage()` API (@indexzero) -- [edbd527](https://github.com/bcoe/yargs/commit/edbd5272a8e213e71acd802782135c7f9699913a) [doc api] Add `.describe()`, `.options()`, and `.showHelp()` methods along with example. (@indexzero) -- [be4902f](https://github.com/bcoe/yargs/commit/be4902ff0961ae8feb9093f2c0a4066463ded2cf) updates for coffee since it now does argv the node way (@substack) -- [e24cb23](https://github.com/bcoe/yargs/commit/e24cb23798ee64e53b60815e7fda78b87f42390c) more general coffeescript detection (@substack) -- [78ac753](https://github.com/bcoe/yargs/commit/78ac753e5d0ec32a96d39d893272afe989e42a4d) Don't trigger the CoffeeScript hack when running under node_g. (@papandreou) -- [bcfe973](https://github.com/bcoe/yargs/commit/bcfe9731d7f90d4632281b8a52e8d76eb0195ae6) .string() but failing test (@substack) -- [1987aca](https://github.com/bcoe/yargs/commit/1987aca28c7ba4e8796c07bbc547cb984804c826) test hex strings (@substack) -- [ef36db3](https://github.com/bcoe/yargs/commit/ef36db32259b0b0d62448dc907c760e5554fb7e7) more keywords (@substack) -- [cc53c56](https://github.com/bcoe/yargs/commit/cc53c56329960bed6ab077a79798e991711ba01d) Added camelCase function that converts --multi-word-option to camel case (so it becomes argv.multiWordOption). (@papandreou) -- [60b57da](https://github.com/bcoe/yargs/commit/60b57da36797716e5783a633c6d5c79099016d45) fixed boolean bug by rescanning (@substack) -- [dff6d07](https://github.com/bcoe/yargs/commit/dff6d078d97f8ac503c7d18dcc7b7a8c364c2883) boolean examples (@substack) -- [0e380b9](https://github.com/bcoe/yargs/commit/0e380b92c4ef4e3c8dac1da18b5c31d85b1d02c9) boolean() with passing test (@substack) -- [62644d4](https://github.com/bcoe/yargs/commit/62644d4bffbb8d1bbf0c2baf58a1d14a6359ef07) coffee compatibility with node regex for versions too (@substack) -- [430fafc](https://github.com/bcoe/yargs/commit/430fafcf1683d23774772826581acff84b456827) argv._ fixed by fixing the coffee detection (@substack) -- [343b8af](https://github.com/bcoe/yargs/commit/343b8afefd98af274ebe21b5a16b3a949ec5429f) whichNodeArgs test fails too (@substack) -- [63df2f3](https://github.com/bcoe/yargs/commit/63df2f371f31e63d7f1dec2cbf0022a5f08da9d2) replicated mnot's bug in whichNodeEmpty test (@substack) -- [35473a4](https://github.com/bcoe/yargs/commit/35473a4d93a45e5e7e512af8bb54ebb532997ae1) test for ./bin usage (@substack) -- [13df151](https://github.com/bcoe/yargs/commit/13df151e44228eed10e5441c7cd163e086c458a4) don't coerce booleans to numbers (@substack) -- [85f8007](https://github.com/bcoe/yargs/commit/85f8007e93b8be7124feea64b1f1916d8ba1894a) package bump for automatic number conversion (@substack) -- [8f17014](https://github.com/bcoe/yargs/commit/8f170141cded4ccc0c6d67a849c5bf996aa29643) updated readme and examples with new auto-numberification goodness (@substack) -- [73dc901](https://github.com/bcoe/yargs/commit/73dc9011ac968e39b55e19e916084a839391b506) auto number conversion works yay (@substack) -- [bcec56b](https://github.com/bcoe/yargs/commit/bcec56b3d031e018064cbb691539ccc4f28c14ad) failing test for not-implemented auto numification (@substack) -- [ebd2844](https://github.com/bcoe/yargs/commit/ebd2844d683feeac583df79af0e5124a7a7db04e) odd that eql doesn't check types careflly (@substack) -- [fd854b0](https://github.com/bcoe/yargs/commit/fd854b02e512ce854b76386d395672a7969c1bc4) package author + keywords (@substack) -- [656a1d5](https://github.com/bcoe/yargs/commit/656a1d5a1b7c0e49d72e80cb13f20671d56f76c6) updated readme with .default() stuff (@substack) -- [cd7f8c5](https://github.com/bcoe/yargs/commit/cd7f8c55f0b82b79b690d14c5f806851236998a1) passing tests for new .default() behavior (@substack) -- [932725e](https://github.com/bcoe/yargs/commit/932725e39ce65bc91a0385a5fab659a5fa976ac2) new default() thing for setting default key/values (@substack) -- [4e6c7ab](https://github.com/bcoe/yargs/commit/4e6c7aba6374ac9ebc6259ecf91f13af7bce40e3) test for coffee usage (@substack) -- [d54ffcc](https://github.com/bcoe/yargs/commit/d54ffccf2a5a905f51ed5108f7c647f35d64ae23) new --key value style with passing tests. NOTE: changes existing behavior (@substack) -- [ed2a2d5](https://github.com/bcoe/yargs/commit/ed2a2d5d828100ebeef6385c0fb88d146a5cfe9b) package bump for summatix's coffee script fix (@substack) -- [75a975e](https://github.com/bcoe/yargs/commit/75a975eed8430d28e2a79dc9e6d819ad545f4587) Added support for CoffeeScript (@summatix) -- [56b2b1d](https://github.com/bcoe/yargs/commit/56b2b1de8d11f8a2b91979d8ae2d6db02d8fe64d) test coverage for the falsy check() usage (@substack) -- [a4843a9](https://github.com/bcoe/yargs/commit/a4843a9f0e69ffb4afdf6a671d89eb6f218be35d) check bug fixed plus a handy string (@substack) -- [857bd2d](https://github.com/bcoe/yargs/commit/857bd2db933a5aaa9cfecba0ced2dc9b415f8111) tests for demandCount, back up to 100% coverage (@substack) -- [073b776](https://github.com/bcoe/yargs/commit/073b7768ebd781668ef05c13f9003aceca2f5c35) call demandCount from demand (@substack) -- [4bd4b7a](https://github.com/bcoe/yargs/commit/4bd4b7a085c8b6ce1d885a0f486cc9865cee2db1) add demandCount to check for the number of arguments in the _ list (@marshall) -- [b8689ac](https://github.com/bcoe/yargs/commit/b8689ac68dacf248119d242bba39a41cb0adfa07) Rebase checks. That will be its own module eventually. (@substack) -- [e688370](https://github.com/bcoe/yargs/commit/e688370b576f0aa733c3f46183df69e1b561668e) a $0 like in perl (@substack) -- [2e5e196](https://github.com/bcoe/yargs/commit/2e5e1960fc19afb21fb3293752316eaa8bcd3609) usage test hacking around process and console (@substack) -- [fcc3521](https://github.com/bcoe/yargs/commit/fcc352163fbec6a1dfe8caf47a0df39de24fe016) description pun (@substack) -- [87a1fe2](https://github.com/bcoe/yargs/commit/87a1fe29037ca2ca5fefda85141aaeb13e8ce761) mit/x11 license (@substack) -- [8d089d2](https://github.com/bcoe/yargs/commit/8d089d24cd687c0bde3640a96c09b78f884900dd) bool example is more consistent and also shows off short option grouping (@substack) -- [448d747](https://github.com/bcoe/yargs/commit/448d7473ac68e8e03d8befc9457b0d9e21725be0) start of the readme and examples (@substack) -- [da74dea](https://github.com/bcoe/yargs/commit/da74dea799a9b59dbf022cbb8001bfdb0d52eec9) more tests for long and short captures (@substack) -- [ab6387e](https://github.com/bcoe/yargs/commit/ab6387e6769ca4af82ca94c4c67c7319f0d9fcfa) silly bug in the tests with s/not/no/, all tests pass now (@substack) -- [102496a](https://github.com/bcoe/yargs/commit/102496a319e8e06f6550d828fc2f72992c7d9ecc) hack an instance for process.argv onto Argv so the export can be called to create an instance or used for argv, which is the most common case (@substack) -- [a01caeb](https://github.com/bcoe/yargs/commit/a01caeb532546d19f68f2b2b87f7036cfe1aaedd) divide example (@substack) -- [443da55](https://github.com/bcoe/yargs/commit/443da55736acbaf8ff8b04d1b9ce19ab016ddda2) start of the lib with a package.json (@substack) diff --git a/node_modules/yargs/LICENSE b/node_modules/yargs/LICENSE deleted file mode 100644 index 432d1ae..0000000 --- a/node_modules/yargs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/yargs/README.md b/node_modules/yargs/README.md deleted file mode 100644 index 3649538..0000000 --- a/node_modules/yargs/README.md +++ /dev/null @@ -1,1243 +0,0 @@ -yargs -======== - -Yargs be a node.js library fer hearties tryin' ter parse optstrings. - -With yargs, ye be havin' a map that leads straight to yer treasure! Treasure of course, being a simple option hash. - -[![Build Status][travis-image]][travis-url] -[![Dependency Status][gemnasium-image]][gemnasium-url] -[![Coverage Status][coveralls-image]][coveralls-url] -[![NPM version][npm-image]][npm-url] -[![Windows Tests][windows-image]][windows-url] - -> Yargs is the official successor to optimist. Please feel free to submit issues and pull requests. If you'd like to contribute and don't know where to start, have a look at [the issue list](https://github.com/bcoe/yargs/issues) :) - -examples -======== - -With yargs, the options be just a hash! -------------------------------------------------------------------- - -plunder.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs').argv; - -if (argv.ships > 3 && argv.distance < 53.5) { - console.log('Plunder more riffiwobbles!'); -} -else { - console.log('Retreat from the xupptumblers!'); -} -```` - -*** - - $ ./plunder.js --ships=4 --distance=22 - Plunder more riffiwobbles! - - $ ./plunder.js --ships 12 --distance 98.7 - Retreat from the xupptumblers! - -![Joe was one optimistic pirate.](http://i.imgur.com/4WFGVJ9.png) - -But don't walk the plank just yet! There be more! You can do short options: -------------------------------------------------- - -short.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs').argv; -console.log('(%d,%d)', argv.x, argv.y); -```` - -*** - - $ ./short.js -x 10 -y 21 - (10,21) - -And booleans, both long, short, and even grouped: ----------------------------------- - -bool.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs').argv; - -if (argv.s) { - process.stdout.write(argv.fr ? 'Le perroquet dit: ' : 'The parrot says: '); -} -console.log( - (argv.fr ? 'couac' : 'squawk') + (argv.p ? '!' : '') -); -```` - -*** - - $ ./bool.js -s - The parrot says: squawk - - $ ./bool.js -sp - The parrot says: squawk! - - $ ./bool.js -sp --fr - Le perroquet dit: couac! - -And non-hyphenated options too! Just use `argv._`! -------------------------------------------------- - -nonopt.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs').argv; -console.log('(%d,%d)', argv.x, argv.y); -console.log(argv._); -```` - -*** - - $ ./nonopt.js -x 6.82 -y 3.35 rum - (6.82,3.35) - [ 'rum' ] - - $ ./nonopt.js "me hearties" -x 0.54 yo -y 1.12 ho - (0.54,1.12) - [ 'me hearties', 'yo', 'ho' ] - -Yargs even counts your booleans! ----------------------------------------------------------------------- - -count.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .count('verbose') - .alias('v', 'verbose') - .argv; - -VERBOSE_LEVEL = argv.verbose; - -function WARN() { VERBOSE_LEVEL >= 0 && console.log.apply(console, arguments); } -function INFO() { VERBOSE_LEVEL >= 1 && console.log.apply(console, arguments); } -function DEBUG() { VERBOSE_LEVEL >= 2 && console.log.apply(console, arguments); } - -WARN("Showing only important stuff"); -INFO("Showing semi-important stuff too"); -DEBUG("Extra chatty mode"); -```` - -*** - $ node count.js - Showing only important stuff - - $ node count.js -v - Showing only important stuff - Showing semi-important stuff too - - $ node count.js -vv - Showing only important stuff - Showing semi-important stuff too - Extra chatty mode - - $ node count.js -v --verbose - Showing only important stuff - Showing semi-important stuff too - Extra chatty mode - -Tell users how to use yer options and make demands. -------------------------------------------------- - -area.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .usage('Usage: $0 -w [num] -h [num]') - .demand(['w','h']) - .argv; - -console.log("The area is:", argv.w * argv.h); -```` - -*** - - $ ./area.js -w 55 -h 11 - The area is: 605 - - $ node ./area.js -w 4.91 -w 2.51 - Usage: area.js -w [num] -h [num] - - Options: - -w [required] - -h [required] - - Missing required arguments: h - -After yer demands have been met, demand more! Ask for non-hyphenated arguments! ------------------------------------------ - -demand_count.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .demand(2) - .argv; -console.dir(argv); -```` - -*** - - $ ./demand_count.js a - - Not enough non-option arguments: got 1, need at least 2 - - $ ./demand_count.js a b - { _: [ 'a', 'b' ], '$0': 'demand_count.js' } - - $ ./demand_count.js a b c - { _: [ 'a', 'b', 'c' ], '$0': 'demand_count.js' } - -EVEN MORE SHIVER ME TIMBERS! ------------------- - -default_singles.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .default('x', 10) - .default('y', 10) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_singles.js -x 5 - 15 - -default_hash.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .default({ x : 10, y : 10 }) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_hash.js -y 7 - 17 - -And if you really want to get all descriptive about it... ---------------------------------------------------------- - -boolean_single.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .boolean('v') - .argv -; -console.dir(argv.v); -console.dir(argv._); -```` - -*** - - $ ./boolean_single.js -v "me hearties" yo ho - true - [ 'me hearties', 'yo', 'ho' ] - - -boolean_double.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .boolean(['x','y','z']) - .argv -; -console.dir([ argv.x, argv.y, argv.z ]); -console.dir(argv._); -```` - -*** - - $ ./boolean_double.js -x -z one two three - [ true, false, true ] - [ 'one', 'two', 'three' ] - -Yargs is here to help you... ---------------------------- - -Ye can describe parameters fer help messages and set aliases. Yargs figures -out how ter format a handy help string automatically. - -line_count.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .usage('Usage: $0 [options]') - .command('count', 'Count the lines in a file') - .demand(1) - .example('$0 count -f foo.js', 'count the lines in the given file') - .demand('f') - .alias('f', 'file') - .nargs('f', 1) - .describe('f', 'Load a file') - .help('h') - .alias('h', 'help') - .epilog('copyright 2015') - .argv; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines); -}); -```` - -*** - $ node line_count.js count - Usage: line_count.js [options] - - Commands: - count Count the lines in a file - - Options: - -f, --file Load a file [required] - -h, --help Show help [boolean] - - Examples: - line_count.js count -f foo.js count the lines in the given file - - copyright 2015 - - Missing required arguments: f - - $ node line_count.js count --file line_count.js - 26 - - $ node line_count.js count -f line_count.js - 26 - -methods -======= - -By itself, - -````javascript -require('yargs').argv -```` - -will use the `process.argv` array to construct the `argv` object. - -You can pass in the `process.argv` yourself: - -````javascript -require('yargs')([ '-x', '1', '-y', '2' ]).argv -```` - -or use `.parse()` to do the same thing: - -````javascript -require('yargs').parse([ '-x', '1', '-y', '2' ]) -```` - -The rest of these methods below come in just before the terminating `.argv`. - -.alias(key, alias) ------------------- - -Set key names as equivalent such that updates to a key will propagate to aliases -and vice-versa. - -Optionally `.alias()` can take an object that maps keys to aliases. -Each key of this object should be the canonical version of the option, and each -value should be a string or an array of strings. - -.argv ------ - -Get the arguments as a plain old object. - -Arguments without a corresponding flag show up in the `argv._` array. - -The script name or node command is available at `argv.$0` similarly to how `$0` -works in bash or perl. - -If `yargs` is executed in an environment that embeds node and there's no script name (e.g. -[Electron](http://electron.atom.io/) or [nw.js](http://nwjs.io/)), it will ignore the first parameter since it -expects it to be the script name. In order to override this behavior, use `.parse(process.argv.slice(1))` -instead of `.argv` and the first parameter won't be ignored. - -.array(key) ----------- - -Tell the parser to interpret `key` as an array. If `.array('foo')` is set, -`--foo foo bar` will be parsed as `['foo', 'bar']` rather than as `'foo'`. - -.boolean(key) -------------- - -Interpret `key` as a boolean. If a non-flag option follows `key` in -`process.argv`, that string won't get set as the value of `key`. - -`key` will default to `false`, unless a `default(key, undefined)` is -explicitly set. - -If `key` is an array, interpret all the elements as booleans. - -.check(fn) ----------- - -Check that certain conditions are met in the provided arguments. - -`fn` is called with two arguments, the parsed `argv` hash and an array of options and their aliases. - -If `fn` throws or returns a non-truthy value, show the thrown error, usage information, and -exit. - -.choices(key, choices) ----------------------- - -Limit valid values for `key` to a predefined set of `choices`, given as an array -or as an individual value. - -```js -var argv = require('yargs') - .alias('i', 'ingredient') - .describe('i', 'choose your sandwich ingredients') - .choices('i', ['peanut-butter', 'jelly', 'banana', 'pickles']) - .help('help') - .argv -``` - -If this method is called multiple times, all enumerated values will be merged -together. Choices are generally strings or numbers, and value matching is -case-sensitive. - -Optionally `.choices()` can take an object that maps multiple keys to their -choices. - -Choices can also be specified as `choices` in the object given to `option()`. - -```js -var argv = require('yargs') - .option('size', { - alias: 's', - describe: 'choose a size', - choices: ['xs', 's', 'm', 'l', 'xl'] - }) - .argv -``` - -.command(cmd, desc, [fn]) -------------------- - -Document the commands exposed by your application. - -Use `desc` to provide a description for each command your application accepts (the -values stored in `argv._`). Set `desc` to `false` to create a hidden command. -Hidden commands don't show up in the help output and aren't available for -completion. - -Optionally, you can provide a handler `fn` which will be executed when -a given command is provided. The handler will be called with `yargs` and -`argv` as arguments. - -`yargs` is a blank instance of yargs, which can be used to compose a nested -hierarchy of options handlers. - -`argv` represents the arguments parsed prior to the -command being executed (those described in the outer yargs instance). - -Here's an example of top-level and nested commands in action: - -```js -var argv = require('yargs') - .usage('npm ') - .command('install', 'tis a mighty fine package to install') - .command('publish', 'shiver me timbers, should you be sharing all that', function (yargs, argv) { - argv = yargs.option('f', { - alias: 'force', - description: 'yar, it usually be a bad idea' - }) - .help('help') - .argv - }) - .help('help') - .argv; -``` - -.completion(cmd, [description], [fn]); -------------- - -Enable bash-completion shortcuts for commands and options. - -`cmd`: When present in `argv._`, will result in the `.bashrc` completion script -being outputted. To enable bash completions, concat the generated script to your -`.bashrc` or `.bash_profile`. - -`description`: Provide a description in your usage instructions for the command -that generates bash completion scripts. - -`fn`: Rather than relying on yargs' default completion functionality, which -shiver me timbers is pretty awesome, you can provide your own completion -method. - -```js -var argv = require('yargs') - .completion('completion', function(current, argv) { - // 'current' is the current command being completed. - // 'argv' is the parsed arguments so far. - // simply return an array of completions. - return [ - 'foo', - 'bar' - ]; - }) - .argv; -``` - -You can also provide asynchronous completions. - -```js -var argv = require('yargs') - .completion('completion', function(current, argv, done) { - setTimeout(function() { - done([ - 'apple', - 'banana' - ]); - }, 500); - }) - .argv; -``` - -But wait, there's more! You can return an asynchronous promise. - -```js -var argv = require('yargs') - .completion('completion', function(current, argv, done) { - return new Promise(function (resolve, reject) { - setTimeout(function () { - resolve(['apple', 'banana']) - }, 10) - }) - }) - .argv; -``` - -.config(key, [description], [parseFn]) ------------- - -Tells the parser that if the option specified by `key` is passed in, it -should be interpreted as a path to a JSON config file. The file is loaded -and parsed, and its properties are set as arguments. - -An optional `description` can be provided to customize the config (`key`) option -in the usage string. - -An optional `parseFn` can be used to provide a custom parser. The parsing -function must be synchronous, and should return an object containing -key value pairs or an error. - -```js -var argv = require('yargs') - .config('settings', function (configPath) { - return JSON.parse(fs.readFileSync(configPath, 'utf-8')) - }) - .argv -``` - -.count(key) ------------- - -Interpret `key` as a boolean flag, but set its parsed value to the number of -flag occurrences rather than `true` or `false`. Default value is thus `0`. - -.default(key, value, [description]) --------------------- - -Set `argv[key]` to `value` if no option was specified in `process.argv`. - -Optionally `.default()` can take an object that maps keys to default values. - -But wait, there's more! The default value can be a `function` which returns -a value. The name of the function will be used in the usage string: - -```js -var argv = require('yargs') - .default('random', function randomValue() { - return Math.random() * 256; - }).argv; -``` - -Optionally, `description` can also be provided and will take precedence over -displaying the value in the usage instructions: - -```js -.default('timeout', 60000, '(one-minute)') -``` - -.demand(key, [msg | boolean]) ------------------------------- -.demand(count, [max], [msg]) ------------------------------- - -If `key` is a string, show the usage information and exit if `key` wasn't -specified in `process.argv`. - -If `key` is a number, demand at least as many non-option arguments, which show -up in `argv._`. A second number can also optionally be provided, which indicates -the maximum number of non-option arguments. - -If `key` is an array, demand each element. - -If a `msg` string is given, it will be printed when the argument is missing, -instead of the standard error message. This is especially helpful for the non-option arguments in `argv._`. - -If a `boolean` value is given, it controls whether the option is demanded; -this is useful when using `.options()` to specify command line parameters. - -.describe(key, desc) --------------------- - -Describe a `key` for the generated usage information. - -Optionally `.describe()` can take an object that maps keys to descriptions. - -.detectLocale(boolean) ------------ - -Should yargs attempt to detect the os' locale? Defaults to `true`. - -.env([prefix]) --------------- - -Tell yargs to parse environment variables matching the given prefix and apply -them to argv as though they were command line arguments. - -If this method is called with no argument or with an empty string or with `true`, -then all env vars will be applied to argv. - -Program arguments are defined in this order of precedence: - -1. Command line args -2. Config file -3. Env var -4. Configured defaults - -```js -var argv = require('yargs') - .env('MY_PROGRAM') - .option('f', { - alias: 'fruit-thing', - default: 'apple' - }) - .argv -console.log(argv) -``` - -``` -$ node fruity.js -{ _: [], - f: 'apple', - 'fruit-thing': 'apple', - fruitThing: 'apple', - '$0': 'fruity.js' } -``` - -``` -$ MY_PROGRAM_FRUIT_THING=banana node fruity.js -{ _: [], - fruitThing: 'banana', - f: 'banana', - 'fruit-thing': 'banana', - '$0': 'fruity.js' } -``` - -``` -$ MY_PROGRAM_FRUIT_THING=banana node fruity.js -f cat -{ _: [], - f: 'cat', - 'fruit-thing': 'cat', - fruitThing: 'cat', - '$0': 'fruity.js' } -``` - -Env var parsing is disabled by default, but you can also explicitly disable it -by calling `.env(false)`, e.g. if you need to undo previous configuration. - -.epilog(str) ------------- -.epilogue(str) --------------- - -A message to print at the end of the usage instructions, e.g. - -```js -var argv = require('yargs') - .epilogue('for more information, find our manual at http://example.com'); -``` - -.example(cmd, desc) -------------------- - -Give some example invocations of your program. Inside `cmd`, the string -`$0` will get interpolated to the current script name or node command for the -present script similar to how `$0` works in bash or perl. -Examples will be printed out as part of the help message. - -.exitProcess(enable) ----------------------------------- - -By default, yargs exits the process when the user passes a help flag, uses the -`.version` functionality, or when validation fails. Calling -`.exitProcess(false)` disables this behavior, enabling further actions after -yargs have been validated. - -.fail(fn) ---------- - -Method to execute when a failure occurs, rather than printing the failure message. - -`fn` is called with the failure message that would have been printed. - -.group(key(s), groupName) --------------------- - -Given a key, or an array of keys, places options under an alternative heading -when displaying usage instructions, e.g., - -```js -var yargs = require('yargs')(['--help']) - .help('help') - .group('batman', 'Heroes:') - .describe('batman', "world's greatest detective") - .wrap(null) - .argv -``` -*** - Heroes: - --batman world's greatest detective - - Options: - --help Show help [boolean] - -.help([option, [description]]) ------------------------------- - -Add an option (e.g. `--help`) that displays the usage string and exits the -process. If present, the `description` parameter customizes the description of -the help option in the usage string. - -If invoked without parameters, `.help()` returns the generated usage string. - -Example: - -```js -var yargs = require("yargs") - .usage("$0 -operand1 number -operand2 number -operation [add|subtract]"); -console.log(yargs.help()); -``` - -Later on, `argv` can be retrieved with `yargs.argv`. - -.implies(x, y) --------------- - -Given the key `x` is set, it is required that the key `y` is set. - -Optionally `.implies()` can accept an object specifying multiple implications. - -.locale() ---------- - -Return the locale that yargs is currently using. - -By default, yargs will auto-detect the operating system's locale so that -yargs-generated help content will display in the user's language. - -To override this behavior with a static locale, pass the desired locale as a -string to this method (see below). - -.locale(locale) ---------------- - -Override the auto-detected locale from the user's operating system with a static -locale. Note that the OS locale can be modified by setting/exporting the `LC_ALL` -environment variable. - -```js -var argv = require('yargs') - .usage('./$0 - follow ye instructions true') - .option('option', { - alias: 'o', - describe: "'tis a mighty fine option", - demand: true - }) - .command('run', "Arrr, ya best be knowin' what yer doin'") - .example('$0 run foo', "shiver me timbers, here's an example for ye") - .help('help') - .wrap(70) - .locale('pirate') - .argv -``` - -*** - -```shell -./test.js - follow ye instructions true - -Choose yer command: - run Arrr, ya best be knowin' what yer doin' - -Options for me hearties! - --option, -o 'tis a mighty fine option [requi-yar-ed] - --help Parlay this here code of conduct [boolean] - -Ex. marks the spot: - test.js run foo shiver me timbers, here's an example for ye - -Ye be havin' to set the followin' argument land lubber: option -``` - -Locales currently supported: - -* **de:** German. -* **en:** American English. -* **es:** Spanish. -* **fr:** French. -* **id:** Indonesian. -* **ja:** Japanese. -* **ko:** Korean. -* **nb:** Norwegian Bokmål. -* **pirate:** American Pirate. -* **pt:** Portuguese. -* **pt_BR:** Brazilian Portuguese. -* **tr:** Turkish. -* **zh:** Chinese. - -To submit a new translation for yargs: - -1. use `./locales/en.json` as a starting point. -2. submit a pull request with the new locale file. - -*The [Microsoft Terminology Search](http://www.microsoft.com/Language/en-US/Search.aspx) can be useful for finding the correct terminology in your locale.* - -.nargs(key, count) ------------ - -The number of arguments that should be consumed after a key. This can be a -useful hint to prevent parsing ambiguity. For example: - -```js -var argv = require('yargs') - .nargs('token', 1) - .parse(['--token', '-my-token']); -``` - -parses as: - -`{ _: [], token: '-my-token', '$0': 'node test' }` - -Optionally `.nargs()` can take an object of `key`/`narg` pairs. - -.option(key, opt) ------------------ -.options(key, opt) ------------------- - -Instead of chaining together `.alias().demand().default().describe().string()`, you can specify -keys in `opt` for each of the chainable methods. - -For example: - -````javascript -var argv = require('yargs') - .option('f', { - alias: 'file', - demand: true, - default: '/etc/passwd', - describe: 'x marks the spot', - type: 'string' - }) - .argv -; -```` - -is the same as - -````javascript -var argv = require('yargs') - .alias('f', 'file') - .demand('f') - .default('f', '/etc/passwd') - .describe('f', 'x marks the spot') - .string('f') - .argv -; -```` - -Optionally `.options()` can take an object that maps keys to `opt` parameters. - -````javascript -var argv = require('yargs') - .options({ - 'f': { - alias: 'file', - demand: true, - default: '/etc/passwd', - describe: 'x marks the spot', - type: 'string' - } - }) - .argv -; -```` - -Valid `opt` keys include: - -- `alias`: string or array of strings, alias(es) for the canonical option key, see [`alias()`](#alias) -- `array`: boolean, interpret option as an array, see [`array()`](#array) -- `boolean`: boolean, interpret option as a boolean flag, see [`boolean()`](#boolean) -- `choices`: value or array of values, limit valid option arguments to a predefined set, see [`choices()`](#choices) -- `config`: boolean, interpret option as a path to a JSON config file, see [`config()`](#config) -- `configParser`: function, provide a custom config parsing function, see [`config()`](#config) -- `count`: boolean, interpret option as a count of boolean flags, see [`count()`](#count) -- `default`: value, set a default value for the option, see [`default()`](#default) -- `defaultDescription`: string, use this description for the default value in help content, see [`default()`](#default) -- `demand`/`require`/`required`: boolean or string, demand the option be given, with optional error message, see [`demand()`](#demand) -- `desc`/`describe`/`description`: string, the option description for help content, see [`describe()`](#describe) -- `group`: string, when displaying usage instructions place the option under an alternative group heading, see [`group()`](#group) -- `nargs`: number, specify how many arguments should be consumed for the option, see [`nargs()`](#nargs) -- `requiresArg`: boolean, require the option be specified with a value, see [`requiresArg()`](#requiresArg) -- `string`: boolean, interpret option as a string, see [`string()`](#string) -- `type`: one of the following strings - - `'array'`: synonymous for `array: true`, see [`array()`](#array) - - `'boolean'`: synonymous for `boolean: true`, see [`boolean()`](#boolean) - - `'count'`: synonymous for `count: true`, see [`count()`](#count) - - `'string'`: synonymous for `string: true`, see [`string()`](#string) - -.parse(args) ------------- - -Parse `args` instead of `process.argv`. Returns the `argv` object. - -`args` may either be a pre-processed argv array, or a raw argument string. - -.require(key, [msg | boolean]) ------------------------------- -.required(key, [msg | boolean]) ------------------------------- - -An alias for [`demand()`](#demand). See docs there. - -.requiresArg(key) ------------------ - -Specifies either a single option key (string), or an array of options that -must be followed by option values. If any option value is missing, show the -usage information and exit. - -The default behavior is to set the value of any key not followed by an -option value to `true`. - -.reset() --------- - -Reset the argument object built up so far. This is useful for -creating nested command line interfaces. - -```js -var yargs = require('yargs') - .usage('$0 command') - .command('hello', 'hello command') - .command('world', 'world command') - .demand(1, 'must provide a valid command'), - argv = yargs.argv, - command = argv._[0]; - -if (command === 'hello') { - yargs.reset() - .usage('$0 hello') - .help('h') - .example('$0 hello', 'print the hello message!') - .argv - - console.log('hello!'); -} else if (command === 'world'){ - yargs.reset() - .usage('$0 world') - .help('h') - .example('$0 world', 'print the world message!') - .argv - - console.log('world!'); -} else { - yargs.showHelp(); -} -``` - -.showCompletionScript() ----------------------- - -Generate a bash completion script. Users of your application can install this -script in their `.bashrc`, and yargs will provide completion shortcuts for -commands and options. - -.showHelp(consoleLevel='error') ---------------------------- - -Print the usage data using the [`console`](https://nodejs.org/api/console.html) function `consoleLevel` for printing. - -Example: - -```js -var yargs = require("yargs") - .usage("$0 -operand1 number -operand2 number -operation [add|subtract]"); -yargs.showHelp(); //prints to stderr using console.error() -``` - -Or, to print the usage data to `stdout` instead, you can specify the use of `console.log`: - -```js -yargs.showHelp("log"); //prints to stdout using console.log() -``` - -Later on, `argv` can be retrieved with `yargs.argv`. - -.showHelpOnFail(enable, [message]) ----------------------------------- - -By default, yargs outputs a usage string if any error is detected. Use the -`.showHelpOnFail()` method to customize this behavior. If `enable` is `false`, -the usage string is not output. If the `message` parameter is present, this -message is output after the error message. - -line_count.js: - -````javascript -#!/usr/bin/env node -var argv = require('yargs') - .usage('Count the lines in a file.\nUsage: $0 -f ') - .demand('f') - .alias('f', 'file') - .describe('f', 'Load a file') - .string('f') - .showHelpOnFail(false, 'Specify --help for available options') - .help('help') - .argv; - -// etc. -```` - -*** - -``` -$ node line_count.js -Missing argument value: f - -Specify --help for available options -``` - -.strict() ---------- - -Any command-line argument given that is not demanded, or does not have a -corresponding description, will be reported as an error. - -.string(key) ------------- - -Tell the parser logic not to interpret `key` as a number or boolean. -This can be useful if you need to preserve leading zeros in an input. - -If `key` is an array, interpret all the elements as strings. - -`.string('_')` will result in non-hyphenated arguments being interpreted as strings, -regardless of whether they resemble numbers. - -.updateLocale(obj) ------------------- -.updateStrings(obj) ------------------- - -Override the default strings used by yargs with the key/value -pairs provided in `obj`: - -```js -var argv = require('yargs') - .command('run', 'the run command') - .help('help') - .updateStrings({ - 'Commands:': 'My Commands -->\n' - }) - .wrap(null) - .argv -``` - -*** - -```shell -My Commands --> - - run the run command - -Options: - --help Show help [boolean] -``` - -If you explicitly specify a `locale()`, you should do so *before* calling -`updateStrings()`. - -.usage(message, [opts]) ---------------------- - -Set a usage message to show which commands to use. Inside `message`, the string -`$0` will get interpolated to the current script name or node command for the -present script similar to how `$0` works in bash or perl. - -`opts` is optional and acts like calling `.options(opts)`. - -.version(version, [option], [description]) ----------------------------------------- - -Add an option (e.g. `--version`) that displays the version number (given by the -`version` parameter) and exits the process. If present, the `description` -parameter customizes the description of the version option in the usage string. - -You can provide a `function` for version, rather than a string. -This is useful if you want to use the version from your package.json: - -```js -var argv = require('yargs') - .version(function() { - return require('../package').version; - }) - .argv; -``` - -.wrap(columns) --------------- - -Format usage output to wrap at `columns` many columns. - -By default wrap will be set to `Math.min(80, windowWidth)`. Use `.wrap(null)` to -specify no column limit (no right-align). Use `.wrap(yargs.terminalWidth())` to -maximize the width of yargs' usage instructions. - -parsing tricks -============== - -stop parsing ------------- - -Use `--` to stop parsing flags and stuff the remainder into `argv._`. - - $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4 - { _: [ '-c', '3', '-d', '4' ], - a: 1, - b: 2, - '$0': 'examples/reflect.js' } - -negate fields -------------- - -If you want to explicitly set a field to false instead of just leaving it -undefined or to override a default you can do `--no-key`. - - $ node examples/reflect.js -a --no-b - { _: [], a: true, b: false, '$0': 'examples/reflect.js' } - -numbers -------- - -Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to -one. This way you can just `net.createConnection(argv.port)` and you can add -numbers out of `argv` with `+` without having that mean concatenation, -which is super frustrating. - -duplicates ----------- - -If you specify a flag multiple times it will get turned into an array containing -all the values in order. - - $ node examples/reflect.js -x 5 -x 8 -x 0 - { _: [], x: [ 5, 8, 0 ], '$0': 'examples/reflect.js' } - -dot notation ------------- - -When you use dots (`.`s) in argument names, an implicit object path is assumed. -This lets you organize arguments into nested objects. - - $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5 - { _: [], - foo: { bar: { baz: 33 }, quux: 5 }, - '$0': 'examples/reflect.js' } - -short numbers -------------- - -Short numeric `-n5` style arguments work too: - - $ node examples/reflect.js -n123 -m456 - { _: [], n: 123, m: 456, '$0': 'examples/reflect.js' } - -installation -============ - -With [npm](https://github.com/npm/npm), just do: - - npm install yargs - -or clone this project on github: - - git clone http://github.com/bcoe/yargs.git - -To run the tests with npm, just do: - - npm test - -inspired by -=========== - -This module is loosely inspired by Perl's -[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm). - - - -[travis-url]: https://travis-ci.org/bcoe/yargs -[travis-image]: https://img.shields.io/travis/bcoe/yargs.svg -[gemnasium-url]: https://gemnasium.com/bcoe/yargs -[gemnasium-image]: https://img.shields.io/gemnasium/bcoe/yargs.svg -[coveralls-url]: https://coveralls.io/github/bcoe/yargs -[coveralls-image]: https://img.shields.io/coveralls/bcoe/yargs.svg -[npm-url]: https://www.npmjs.com/package/yargs -[npm-image]: https://img.shields.io/npm/v/yargs.svg -[windows-url]: https://ci.appveyor.com/project/bcoe/yargs -[windows-image]: https://img.shields.io/appveyor/ci/bcoe/yargs/master.svg?label=Windows%20Tests diff --git a/node_modules/yargs/completion.sh.hbs b/node_modules/yargs/completion.sh.hbs deleted file mode 100644 index 8392ad5..0000000 --- a/node_modules/yargs/completion.sh.hbs +++ /dev/null @@ -1,28 +0,0 @@ -###-begin-{{app_name}}-completions-### -# -# yargs command completion script -# -# Installation: {{app_path}} completion >> ~/.bashrc -# or {{app_path}} completion >> ~/.bash_profile on OSX. -# -_yargs_completions() -{ - local cur_word args type_list - - cur_word="${COMP_WORDS[COMP_CWORD]}" - args=$(printf "%s " "${COMP_WORDS[@]}") - - # ask yargs to generate completions. - type_list=`{{app_path}} --get-yargs-completions $args` - - COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) ) - - # if no match was found, fall back to filename completion - if [ ${#COMPREPLY[@]} -eq 0 ]; then - COMPREPLY=( $(compgen -f -- "${cur_word}" ) ) - fi - - return 0 -} -complete -F _yargs_completions {{app_name}} -###-end-{{app_name}}-completions-### diff --git a/node_modules/yargs/index.js b/node_modules/yargs/index.js deleted file mode 100644 index 7b6a343..0000000 --- a/node_modules/yargs/index.js +++ /dev/null @@ -1,665 +0,0 @@ -var assert = require('assert') -var Completion = require('./lib/completion') -var Parser = require('./lib/parser') -var path = require('path') -var tokenizeArgString = require('./lib/tokenize-arg-string') -var Usage = require('./lib/usage') -var Validation = require('./lib/validation') -var Y18n = require('y18n') - -Argv(process.argv.slice(2)) - -var exports = module.exports = Argv -function Argv (processArgs, cwd) { - processArgs = processArgs || [] // handle calling yargs(). - - var self = {} - var completion = null - var usage = null - var validation = null - var y18n = Y18n({ - directory: path.resolve(__dirname, './locales'), - updateFiles: false - }) - - if (!cwd) cwd = process.cwd() - - self.$0 = process.argv - .slice(0, 2) - .map(function (x, i) { - // ignore the node bin, specify this in your - // bin file with #!/usr/bin/env node - if (i === 0 && /\b(node|iojs)$/.test(x)) return - var b = rebase(cwd, x) - return x.match(/^\//) && b.length < x.length ? b : x - }) - .join(' ').trim() - - if (process.env._ !== undefined && process.argv[1] === process.env._) { - self.$0 = process.env._.replace( - path.dirname(process.execPath) + '/', '' - ) - } - - var options - self.resetOptions = self.reset = function () { - // put yargs back into its initial - // state, this is useful for creating a - // nested CLI. - options = { - array: [], - boolean: [], - string: [], - narg: {}, - key: {}, - alias: {}, - default: {}, - defaultDescription: {}, - choices: {}, - requiresArg: [], - count: [], - normalize: [], - config: {}, - envPrefix: undefined - } - - usage = Usage(self, y18n) // handle usage output. - validation = Validation(self, usage, y18n) // handle arg validation. - completion = Completion(self, usage) - - demanded = {} - groups = {} - - exitProcess = true - strict = false - helpOpt = null - versionOpt = null - commandHandlers = {} - self.parsed = false - - return self - } - self.resetOptions() - - self.boolean = function (bools) { - options.boolean.push.apply(options.boolean, [].concat(bools)) - return self - } - - self.array = function (arrays) { - options.array.push.apply(options.array, [].concat(arrays)) - return self - } - - self.nargs = function (key, n) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.nargs(k, key[k]) - }) - } else { - options.narg[key] = n - } - return self - } - - self.choices = function (key, values) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.choices(k, key[k]) - }) - } else { - options.choices[key] = (options.choices[key] || []).concat(values) - } - return self - } - - self.normalize = function (strings) { - options.normalize.push.apply(options.normalize, [].concat(strings)) - return self - } - - self.config = function (key, msg, parseFn) { - if (typeof msg === 'function') { - parseFn = msg - msg = null - } - self.describe(key, msg || usage.deferY18nLookup('Path to JSON config file')) - ;(Array.isArray(key) ? key : [key]).forEach(function (k) { - options.config[k] = parseFn || true - }) - return self - } - - self.example = function (cmd, description) { - usage.example(cmd, description) - return self - } - - self.command = function (cmd, description, fn) { - if (description !== false) { - usage.command(cmd, description) - } - if (fn) commandHandlers[cmd] = fn - return self - } - - var commandHandlers = {} - self.getCommandHandlers = function () { - return commandHandlers - } - - self.string = function (strings) { - options.string.push.apply(options.string, [].concat(strings)) - return self - } - - self.default = function (key, value, defaultDescription) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.default(k, key[k]) - }) - } else { - if (defaultDescription) options.defaultDescription[key] = defaultDescription - if (typeof value === 'function') { - if (!options.defaultDescription[key]) options.defaultDescription[key] = usage.functionDescription(value) - value = value.call() - } - options.default[key] = value - } - return self - } - - self.alias = function (x, y) { - if (typeof x === 'object') { - Object.keys(x).forEach(function (key) { - self.alias(key, x[key]) - }) - } else { - // perhaps 'x' is already an alias in another list? - // if so we should append to x's list. - var aliases = null - Object.keys(options.alias).forEach(function (key) { - if (~options.alias[key].indexOf(x)) aliases = options.alias[key] - }) - - if (aliases) { // x was an alias itself. - aliases.push(y) - } else { // x is a new alias key. - options.alias[x] = (options.alias[x] || []).concat(y) - } - - // wait! perhaps we've created two lists of aliases - // that reference each other? - if (options.alias[y]) { - Array.prototype.push.apply((options.alias[x] || aliases), options.alias[y]) - delete options.alias[y] - } - } - return self - } - - self.count = function (counts) { - options.count.push.apply(options.count, [].concat(counts)) - return self - } - - var demanded = {} - self.demand = self.required = self.require = function (keys, max, msg) { - // you can optionally provide a 'max' key, - // which will raise an exception if too many '_' - // options are provided. - if (typeof max !== 'number') { - msg = max - max = Infinity - } - - if (typeof keys === 'number') { - if (!demanded._) demanded._ = { count: 0, msg: null, max: max } - demanded._.count = keys - demanded._.msg = msg - } else if (Array.isArray(keys)) { - keys.forEach(function (key) { - self.demand(key, msg) - }) - } else { - if (typeof msg === 'string') { - demanded[keys] = { msg: msg } - } else if (msg === true || typeof msg === 'undefined') { - demanded[keys] = { msg: undefined } - } - } - - return self - } - self.getDemanded = function () { - return demanded - } - - self.requiresArg = function (requiresArgs) { - options.requiresArg.push.apply(options.requiresArg, [].concat(requiresArgs)) - return self - } - - self.implies = function (key, value) { - validation.implies(key, value) - return self - } - - self.usage = function (msg, opts) { - if (!opts && typeof msg === 'object') { - opts = msg - msg = null - } - - usage.usage(msg) - - if (opts) self.options(opts) - - return self - } - - self.epilogue = self.epilog = function (msg) { - usage.epilog(msg) - return self - } - - self.fail = function (f) { - usage.failFn(f) - return self - } - - self.check = function (f) { - validation.check(f) - return self - } - - self.defaults = self.default - - self.describe = function (key, desc) { - options.key[key] = true - usage.describe(key, desc) - return self - } - - self.parse = function (args) { - return parseArgs(args) - } - - self.option = self.options = function (key, opt) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.options(k, key[k]) - }) - } else { - assert(typeof opt === 'object', 'second argument to option must be an object') - - options.key[key] = true // track manually set keys. - - if (opt.alias) self.alias(key, opt.alias) - - var demand = opt.demand || opt.required || opt.require - - if (demand) { - self.demand(key, demand) - } if ('config' in opt) { - self.config(key, opt.configParser) - } if ('default' in opt) { - self.default(key, opt.default) - } if ('nargs' in opt) { - self.nargs(key, opt.nargs) - } if ('choices' in opt) { - self.choices(key, opt.choices) - } if ('group' in opt) { - self.group(key, opt.group) - } if (opt.boolean || opt.type === 'boolean') { - self.boolean(key) - if (opt.alias) self.boolean(opt.alias) - } if (opt.array || opt.type === 'array') { - self.array(key) - if (opt.alias) self.array(opt.alias) - } if (opt.string || opt.type === 'string') { - self.string(key) - if (opt.alias) self.string(opt.alias) - } if (opt.count || opt.type === 'count') { - self.count(key) - } if (opt.defaultDescription) { - options.defaultDescription[key] = opt.defaultDescription - } - - var desc = opt.describe || opt.description || opt.desc - if (desc) { - self.describe(key, desc) - } - - if (opt.requiresArg) { - self.requiresArg(key) - } - } - - return self - } - self.getOptions = function () { - return options - } - - var groups = {} - self.group = function (opts, groupName) { - var seen = {} - groups[groupName] = (groups[groupName] || []).concat(opts).filter(function (key) { - if (seen[key]) return false - return (seen[key] = true) - }) - return self - } - self.getGroups = function () { - return groups - } - - // as long as options.envPrefix is not undefined, - // parser will apply env vars matching prefix to argv - self.env = function (prefix) { - if (prefix === false) options.envPrefix = undefined - else options.envPrefix = prefix || '' - return self - } - - self.wrap = function (cols) { - usage.wrap(cols) - return self - } - - var strict = false - self.strict = function () { - strict = true - return self - } - self.getStrict = function () { - return strict - } - - self.showHelp = function (level) { - if (!self.parsed) parseArgs(processArgs) // run parser, if it has not already been executed. - usage.showHelp(level) - return self - } - - var versionOpt = null - self.version = function (ver, opt, msg) { - versionOpt = opt || 'version' - usage.version(ver) - self.boolean(versionOpt) - self.describe(versionOpt, msg || usage.deferY18nLookup('Show version number')) - return self - } - - var helpOpt = null - self.addHelpOpt = function (opt, msg) { - helpOpt = opt - self.boolean(opt) - self.describe(opt, msg || usage.deferY18nLookup('Show help')) - return self - } - - self.showHelpOnFail = function (enabled, message) { - usage.showHelpOnFail(enabled, message) - return self - } - - var exitProcess = true - self.exitProcess = function (enabled) { - if (typeof enabled !== 'boolean') { - enabled = true - } - exitProcess = enabled - return self - } - self.getExitProcess = function () { - return exitProcess - } - - self.help = function () { - if (arguments.length > 0) return self.addHelpOpt.apply(self, arguments) - - if (!self.parsed) parseArgs(processArgs) // run parser, if it has not already been executed. - - return usage.help() - } - - var completionCommand = null - self.completion = function (cmd, desc, fn) { - // a function to execute when generating - // completions can be provided as the second - // or third argument to completion. - if (typeof desc === 'function') { - fn = desc - desc = null - } - - // register the completion command. - completionCommand = cmd || 'completion' - if (!desc && desc !== false) { - desc = 'generate bash completion script' - } - self.command(completionCommand, desc) - - // a function can be provided - if (fn) completion.registerFunction(fn) - - return self - } - - self.showCompletionScript = function ($0) { - $0 = $0 || self.$0 - console.log(completion.generateCompletionScript($0)) - return self - } - - self.locale = function (locale) { - if (arguments.length === 0) { - guessLocale() - return y18n.getLocale() - } - detectLocale = false - y18n.setLocale(locale) - return self - } - - self.updateStrings = self.updateLocale = function (obj) { - detectLocale = false - y18n.updateLocale(obj) - return self - } - - var detectLocale = true - self.detectLocale = function (detect) { - detectLocale = detect - return self - } - self.getDetectLocale = function () { - return detectLocale - } - - self.getUsageInstance = function () { - return usage - } - - self.getValidationInstance = function () { - return validation - } - - self.terminalWidth = function () { - return require('window-size').width - } - - Object.defineProperty(self, 'argv', { - get: function () { - var args = null - - try { - args = parseArgs(processArgs) - } catch (err) { - usage.fail(err.message) - } - - return args - }, - enumerable: true - }) - - function parseArgs (args) { - args = normalizeArgs(args) - - var parsed = Parser(args, options, y18n) - var argv = parsed.argv - var aliases = parsed.aliases - - argv.$0 = self.$0 - - self.parsed = parsed - - guessLocale() // guess locale lazily, so that it can be turned off in chain. - - // while building up the argv object, there - // are two passes through the parser. If completion - // is being performed short-circuit on the first pass. - if (completionCommand && - (process.argv.join(' ')).indexOf(completion.completionKey) !== -1 && - !argv[completion.completionKey]) { - return argv - } - - // if there's a handler associated with a - // command defer processing to it. - var handlerKeys = Object.keys(self.getCommandHandlers()) - for (var i = 0, command; (command = handlerKeys[i]) !== undefined; i++) { - if (~argv._.indexOf(command)) { - runCommand(command, self, argv) - return self.argv - } - } - - // generate a completion script for adding to ~/.bashrc. - if (completionCommand && ~argv._.indexOf(completionCommand) && !argv[completion.completionKey]) { - self.showCompletionScript() - if (exitProcess) { - process.exit(0) - } - } - - // we must run completions first, a user might - // want to complete the --help or --version option. - if (completion.completionKey in argv) { - // we allow for asynchronous completions, - // e.g., loading in a list of commands from an API. - completion.getCompletion(function (completions) { - ;(completions || []).forEach(function (completion) { - console.log(completion) - }) - - if (exitProcess) { - process.exit(0) - } - }) - return - } - - var helpOrVersion = false - Object.keys(argv).forEach(function (key) { - if (key === helpOpt && argv[key]) { - helpOrVersion = true - self.showHelp('log') - if (exitProcess) { - process.exit(0) - } - } else if (key === versionOpt && argv[key]) { - helpOrVersion = true - usage.showVersion() - if (exitProcess) { - process.exit(0) - } - } - }) - - // If the help or version options where used and exitProcess is false, - // we won't run validations - if (!helpOrVersion) { - if (parsed.error) throw parsed.error - - // if we're executed via bash completion, don't - // bother with validation. - if (!argv[completion.completionKey]) { - validation.nonOptionCount(argv) - validation.missingArgumentValue(argv) - validation.requiredArguments(argv) - if (strict) validation.unknownArguments(argv, aliases) - validation.customChecks(argv, aliases) - validation.limitedChoices(argv) - validation.implications(argv) - } - } - - setPlaceholderKeys(argv) - - return argv - } - - function guessLocale () { - if (!detectLocale) return - - try { - var osLocale = require('os-locale') - self.locale(osLocale.sync({ spawn: false })) - } catch (err) { - // if we explode looking up locale just noop - // we'll keep using the default language 'en'. - } - } - - function runCommand (command, yargs, argv) { - setPlaceholderKeys(argv) - yargs.getCommandHandlers()[command](yargs.reset(), argv) - } - - function setPlaceholderKeys (argv) { - Object.keys(options.key).forEach(function (key) { - // don't set placeholder keys for dot - // notation options 'foo.bar'. - if (~key.indexOf('.')) return - if (typeof argv[key] === 'undefined') argv[key] = undefined - }) - } - - function normalizeArgs (args) { - if (typeof args === 'string') { - return tokenizeArgString(args) - } - return args - } - - singletonify(self) - return self -} - -// rebase an absolute path to a relative one with respect to a base directory -// exported for tests -exports.rebase = rebase -function rebase (base, dir) { - return path.relative(base, dir) -} - -/* Hack an instance of Argv with process.argv into Argv - so people can do - require('yargs')(['--beeble=1','-z','zizzle']).argv - to parse a list of args and - require('yargs').argv - to get a parsed version of process.argv. -*/ -function singletonify (inst) { - Object.keys(inst).forEach(function (key) { - if (key === 'argv') { - Argv.__defineGetter__(key, inst.__lookupGetter__(key)) - } else { - Argv[key] = typeof inst[key] === 'function' ? inst[key].bind(inst) : inst[key] - } - }) -} diff --git a/node_modules/yargs/lib/completion.js b/node_modules/yargs/lib/completion.js deleted file mode 100644 index 576012f..0000000 --- a/node_modules/yargs/lib/completion.js +++ /dev/null @@ -1,91 +0,0 @@ -var fs = require('fs') -var path = require('path') - -// add bash completions to your -// yargs-powered applications. -module.exports = function (yargs, usage) { - var self = { - completionKey: 'get-yargs-completions' - } - - // get a list of completion commands. - self.getCompletion = function (done) { - var completions = [] - var current = process.argv[process.argv.length - 1] - var previous = process.argv.slice(process.argv.indexOf('--' + self.completionKey) + 1) - var argv = yargs.parse(previous) - - // a custom completion function can be provided - // to completion(). - if (completionFunction) { - if (completionFunction.length < 3) { - var result = completionFunction(current, argv) - - // promise based completion function. - if (typeof result.then === 'function') { - return result.then(function (list) { - process.nextTick(function () { done(list) }) - }).catch(function (err) { - process.nextTick(function () { throw err }) - }) - } - - // synchronous completion function. - return done(result) - } else { - // asynchronous completion function - return completionFunction(current, argv, function (completions) { - done(completions) - }) - } - } - - var handlers = yargs.getCommandHandlers() - for (var i = 0, ii = previous.length; i < ii; ++i) { - if (handlers[previous[i]]) { - return handlers[previous[i]](yargs.reset()) - } - } - - if (!current.match(/^-/)) { - usage.getCommands().forEach(function (command) { - if (previous.indexOf(command[0]) === -1) { - completions.push(command[0]) - } - }) - } - - if (current.match(/^-/)) { - Object.keys(yargs.getOptions().key).forEach(function (key) { - completions.push('--' + key) - }) - } - - done(completions) - } - - // generate the completion script to add to your .bashrc. - self.generateCompletionScript = function ($0) { - var script = fs.readFileSync( - path.resolve(__dirname, '../completion.sh.hbs'), - 'utf-8' - ) - var name = path.basename($0) - - // add ./to applications not yet installed as bin. - if ($0.match(/\.js$/)) $0 = './' + $0 - - script = script.replace(/{{app_name}}/g, name) - return script.replace(/{{app_path}}/g, $0) - } - - // register a function to perform your own custom - // completions., this function can be either - // synchrnous or asynchronous. - var completionFunction = null - self.registerFunction = function (fn) { - completionFunction = fn - } - - return self -} diff --git a/node_modules/yargs/lib/parser.js b/node_modules/yargs/lib/parser.js deleted file mode 100644 index f5f68e9..0000000 --- a/node_modules/yargs/lib/parser.js +++ /dev/null @@ -1,520 +0,0 @@ -// fancy-pants parsing of argv, originally forked -// from minimist: https://www.npmjs.com/package/minimist -var camelCase = require('camelcase') -var path = require('path') - -function increment (orig) { - return orig !== undefined ? orig + 1 : 0 -} - -module.exports = function (args, opts, y18n) { - if (!opts) opts = {} - - var __ = y18n.__ - var error = null - var flags = { arrays: {}, bools: {}, strings: {}, counts: {}, normalize: {}, configs: {}, defaulted: {} } - - ;[].concat(opts['array']).filter(Boolean).forEach(function (key) { - flags.arrays[key] = true - }) - - ;[].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true - }) - - ;[].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true - }) - - ;[].concat(opts.count).filter(Boolean).forEach(function (key) { - flags.counts[key] = true - }) - - ;[].concat(opts.normalize).filter(Boolean).forEach(function (key) { - flags.normalize[key] = true - }) - - Object.keys(opts.config).forEach(function (k) { - flags.configs[k] = opts.config[k] - }) - - var aliases = {} - var newAliases = {} - - extendAliases(opts.key) - extendAliases(opts.alias) - extendAliases(opts.default) - - var defaults = opts['default'] || {} - Object.keys(defaults).forEach(function (key) { - if (/-/.test(key) && !opts.alias[key]) { - aliases[key] = aliases[key] || [] - } - (aliases[key] || []).forEach(function (alias) { - defaults[alias] = defaults[key] - }) - }) - - var argv = { _: [] } - - Object.keys(flags.bools).forEach(function (key) { - setArg(key, !(key in defaults) ? false : defaults[key]) - setDefaulted(key) - }) - - var notFlags = [] - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--') + 1) - args = args.slice(0, args.indexOf('--')) - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i] - var broken - var key - var letters - var m - var next - var value - - // -- seperated by = - if (arg.match(/^--.+=/)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - m = arg.match(/^--([^=]+)=([\s\S]*)$/) - - // nargs format = '--f=monkey washing cat' - if (checkAllAliases(m[1], opts.narg)) { - args.splice(i + 1, m[1], m[2]) - i = eatNargs(i, m[1], args) - // arrays format = '--f=a b c' - } else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) { - args.splice(i + 1, m[1], m[2]) - i = eatArray(i, m[1], args) - } else { - setArg(m[1], m[2]) - } - } else if (arg.match(/^--no-.+/)) { - key = arg.match(/^--no-(.+)/)[1] - setArg(key, false) - - // -- seperated by space. - } else if (arg.match(/^--.+/)) { - key = arg.match(/^--(.+)/)[1] - - // nargs format = '--foo a b c' - if (checkAllAliases(key, opts.narg)) { - i = eatNargs(i, key, args) - // array format = '--foo a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { - i = eatArray(i, key, args) - } else { - next = args[i + 1] - - if (next !== undefined && !next.match(/^-/) && - !checkAllAliases(key, flags.bools) && - !checkAllAliases(key, flags.counts)) { - setArg(key, next) - i++ - } else if (/^(true|false)$/.test(next)) { - setArg(key, next) - i++ - } else { - setArg(key, defaultForType(guessType(key, flags))) - } - } - - // dot-notation flag seperated by '='. - } else if (arg.match(/^-.\..+=/)) { - m = arg.match(/^-([^=]+)=([\s\S]*)$/) - setArg(m[1], m[2]) - - // dot-notation flag seperated by space. - } else if (arg.match(/^-.\..+/)) { - next = args[i + 1] - key = arg.match(/^-(.\..+)/)[1] - - if (next !== undefined && !next.match(/^-/) && - !checkAllAliases(key, flags.bools) && - !checkAllAliases(key, flags.counts)) { - setArg(key, next) - i++ - } else { - setArg(key, defaultForType(guessType(key, flags))) - } - } else if (arg.match(/^-[^-]+/)) { - letters = arg.slice(1, -1).split('') - broken = false - - for (var j = 0; j < letters.length; j++) { - next = arg.slice(j + 2) - - if (letters[j + 1] && letters[j + 1] === '=') { - value = arg.slice(j + 3) - key = letters[j] - - // nargs format = '-f=monkey washing cat' - if (checkAllAliases(letters[j], opts.narg)) { - args.splice(i + 1, 0, value) - i = eatNargs(i, key, args) - // array format = '-f=a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { - args.splice(i + 1, 0, value) - i = eatArray(i, key, args) - } else { - setArg(key, value) - } - - broken = true - break - } - - if (next === '-') { - setArg(letters[j], next) - continue - } - - if (/[A-Za-z]/.test(letters[j]) && - /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next) - broken = true - break - } - - if (letters[j + 1] && letters[j + 1].match(/\W/)) { - setArg(letters[j], arg.slice(j + 2)) - broken = true - break - } else { - setArg(letters[j], defaultForType(guessType(letters[j], flags))) - } - } - - key = arg.slice(-1)[0] - - if (!broken && key !== '-') { - // nargs format = '-f a b c' - if (checkAllAliases(key, opts.narg)) { - i = eatNargs(i, key, args) - // array format = '-f a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { - i = eatArray(i, key, args) - } else { - if (args[i + 1] && !/^(-|--)[^-]/.test(args[i + 1]) && - !checkAllAliases(key, flags.bools) && - !checkAllAliases(key, flags.counts)) { - setArg(key, args[i + 1]) - i++ - } else if (args[i + 1] && /true|false/.test(args[i + 1])) { - setArg(key, args[i + 1]) - i++ - } else { - setArg(key, defaultForType(guessType(key, flags))) - } - } - } - } else { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ) - } - } - - // order of precedence: - // 1. command line arg - // 2. value from config file - // 3. value from env var - // 4. configured default value - applyEnvVars(opts, argv, true) // special case: check env vars that point to config file - setConfig(argv) - applyEnvVars(opts, argv, false) - applyDefaultsAndAliases(argv, aliases, defaults) - - Object.keys(flags.counts).forEach(function (key) { - setArg(key, defaults[key]) - }) - - notFlags.forEach(function (key) { - argv._.push(key) - }) - - // how many arguments should we consume, based - // on the nargs option? - function eatNargs (i, key, args) { - var toEat = checkAllAliases(key, opts.narg) - - if (args.length - (i + 1) < toEat) error = Error(__('Not enough arguments following: %s', key)) - - for (var ii = i + 1; ii < (toEat + i + 1); ii++) { - setArg(key, args[ii]) - } - - return (i + toEat) - } - - // if an option is an array, eat all non-hyphenated arguments - // following it... YUM! - // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"] - function eatArray (i, key, args) { - for (var ii = i + 1; ii < args.length; ii++) { - if (/^-/.test(args[ii])) break - i = ii - setArg(key, args[ii]) - } - - return i - } - - function setArg (key, val) { - unsetDefaulted(key) - - // handle parsing boolean arguments --foo=true --bar false. - if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) { - if (typeof val === 'string') val = val === 'true' - } - - if (/-/.test(key) && !(aliases[key] && aliases[key].length)) { - var c = camelCase(key) - aliases[key] = [c] - newAliases[c] = true - } - - var value = !checkAllAliases(key, flags.strings) && isNumber(val) ? Number(val) : val - - if (checkAllAliases(key, flags.counts)) { - value = increment - } - - var splitKey = key.split('.') - setKey(argv, splitKey, value) - - // alias references an inner-value within - // a dot-notation object. see #279. - if (~key.indexOf('.') && aliases[key]) { - aliases[key].forEach(function (x) { - x = x.split('.') - setKey(argv, x, value) - }) - } - - ;(aliases[splitKey[0]] || []).forEach(function (x) { - x = x.split('.') - - // handle populating dot notation for both - // the key and its aliases. - if (splitKey.length > 1) { - var a = [].concat(splitKey) - a.shift() // nuke the old key. - x = x.concat(a) - } - - setKey(argv, x, value) - }) - - var keys = [key].concat(aliases[key] || []) - for (var i = 0, l = keys.length; i < l; i++) { - if (flags.normalize[keys[i]]) { - keys.forEach(function (key) { - argv.__defineSetter__(key, function (v) { - val = path.normalize(v) - }) - - argv.__defineGetter__(key, function () { - return typeof val === 'string' ? path.normalize(val) : val - }) - }) - break - } - } - } - - // set args from config.json file, this should be - // applied last so that defaults can be applied. - function setConfig (argv) { - var configLookup = {} - - // expand defaults/aliases, in-case any happen to reference - // the config.json file. - applyDefaultsAndAliases(configLookup, aliases, defaults) - - Object.keys(flags.configs).forEach(function (configKey) { - var configPath = argv[configKey] || configLookup[configKey] - if (configPath) { - try { - var config = null - var resolvedConfigPath = path.resolve(process.cwd(), configPath) - - if (typeof flags.configs[configKey] === 'function') { - try { - config = flags.configs[configKey](resolvedConfigPath) - } catch (e) { - config = e - } - if (config instanceof Error) { - error = config - return - } - } else { - config = require(resolvedConfigPath) - } - - Object.keys(config).forEach(function (key) { - // setting arguments via CLI takes precedence over - // values within the config file. - if (argv[key] === undefined || (flags.defaulted[key])) { - delete argv[key] - setArg(key, config[key]) - } - }) - } catch (ex) { - if (argv[configKey]) error = Error(__('Invalid JSON config file: %s', configPath)) - } - } - }) - } - - function applyEnvVars (opts, argv, configOnly) { - if (typeof opts.envPrefix === 'undefined') return - - var prefix = typeof opts.envPrefix === 'string' ? opts.envPrefix : '' - Object.keys(process.env).forEach(function (envVar) { - if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) { - var key = camelCase(envVar.substring(prefix.length)) - if (((configOnly && flags.configs[key]) || !configOnly) && (!(key in argv) || flags.defaulted[key])) { - setArg(key, process.env[envVar]) - } - } - }) - } - - function applyDefaultsAndAliases (obj, aliases, defaults) { - Object.keys(defaults).forEach(function (key) { - if (!hasKey(obj, key.split('.'))) { - setKey(obj, key.split('.'), defaults[key]) - - ;(aliases[key] || []).forEach(function (x) { - if (hasKey(obj, x.split('.'))) return - setKey(obj, x.split('.'), defaults[key]) - }) - } - }) - } - - function hasKey (obj, keys) { - var o = obj - keys.slice(0, -1).forEach(function (key) { - o = (o[key] || {}) - }) - - var key = keys[keys.length - 1] - - if (typeof o !== 'object') return false - else return key in o - } - - function setKey (obj, keys, value) { - var o = obj - keys.slice(0, -1).forEach(function (key) { - if (o[key] === undefined) o[key] = {} - o = o[key] - }) - - var key = keys[keys.length - 1] - if (value === increment) { - o[key] = increment(o[key]) - } else if (o[key] === undefined && checkAllAliases(key, flags.arrays)) { - o[key] = Array.isArray(value) ? value : [value] - } else if (o[key] === undefined || typeof o[key] === 'boolean') { - o[key] = value - } else if (Array.isArray(o[key])) { - o[key].push(value) - } else { - o[key] = [ o[key], value ] - } - } - - // extend the aliases list with inferred aliases. - function extendAliases (obj) { - Object.keys(obj || {}).forEach(function (key) { - // short-circuit if we've already added a key - // to the aliases array, for example it might - // exist in both 'opts.default' and 'opts.key'. - if (aliases[key]) return - - aliases[key] = [].concat(opts.alias[key] || []) - // For "--option-name", also set argv.optionName - aliases[key].concat(key).forEach(function (x) { - if (/-/.test(x)) { - var c = camelCase(x) - aliases[key].push(c) - newAliases[c] = true - } - }) - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y - })) - }) - }) - } - - // check if a flag is set for any of a key's aliases. - function checkAllAliases (key, flag) { - var isSet = false - var toCheck = [].concat(aliases[key] || [], key) - - toCheck.forEach(function (key) { - if (flag[key]) isSet = flag[key] - }) - - return isSet - } - - function setDefaulted (key) { - [].concat(aliases[key] || [], key).forEach(function (k) { - flags.defaulted[k] = true - }) - } - - function unsetDefaulted (key) { - [].concat(aliases[key] || [], key).forEach(function (k) { - delete flags.defaulted[k] - }) - } - - // return a default value, given the type of a flag., - // e.g., key of type 'string' will default to '', rather than 'true'. - function defaultForType (type) { - var def = { - boolean: true, - string: '', - array: [] - } - - return def[type] - } - - // given a flag, enforce a default type. - function guessType (key, flags) { - var type = 'boolean' - - if (flags.strings && flags.strings[key]) type = 'string' - else if (flags.arrays && flags.arrays[key]) type = 'array' - - return type - } - - function isNumber (x) { - if (typeof x === 'number') return true - if (/^0x[0-9a-f]+$/i.test(x)) return true - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x) - } - - return { - argv: argv, - aliases: aliases, - error: error, - newAliases: newAliases - } -} diff --git a/node_modules/yargs/lib/tokenize-arg-string.js b/node_modules/yargs/lib/tokenize-arg-string.js deleted file mode 100644 index df43fa5..0000000 --- a/node_modules/yargs/lib/tokenize-arg-string.js +++ /dev/null @@ -1,32 +0,0 @@ -// take an un-split argv string and tokenize it. -module.exports = function (argString) { - var i = 0 - var c = null - var opening = null - var args = [] - - for (var ii = 0; ii < argString.length; ii++) { - c = argString.charAt(ii) - - // split on spaces unless we're in quotes. - if (c === ' ' && !opening) { - i++ - continue - } - - // don't split the string if we're in matching - // opening or closing single and double quotes. - if (c === opening) { - opening = null - continue - } else if ((c === "'" || c === '"') && !opening) { - opening = c - continue - } - - if (!args[i]) args[i] = '' - args[i] += c - } - - return args -} diff --git a/node_modules/yargs/lib/usage.js b/node_modules/yargs/lib/usage.js deleted file mode 100644 index b1b59bc..0000000 --- a/node_modules/yargs/lib/usage.js +++ /dev/null @@ -1,383 +0,0 @@ -// this file handles outputting usage instructions, -// failures, etc. keeps logging in one place. -var cliui = require('cliui') -var decamelize = require('decamelize') -var stringWidth = require('string-width') -var wsize = require('window-size') - -module.exports = function (yargs, y18n) { - var __ = y18n.__ - var self = {} - - // methods for ouputting/building failure message. - var fails = [] - self.failFn = function (f) { - fails.push(f) - } - - var failMessage = null - var showHelpOnFail = true - self.showHelpOnFail = function (enabled, message) { - if (typeof enabled === 'string') { - message = enabled - enabled = true - } else if (typeof enabled === 'undefined') { - enabled = true - } - failMessage = message - showHelpOnFail = enabled - return self - } - - var failureOutput = false - self.fail = function (msg) { - if (fails.length) { - fails.forEach(function (f) { - f(msg) - }) - } else { - // don't output failure message more than once - if (!failureOutput) { - failureOutput = true - if (showHelpOnFail) yargs.showHelp('error') - if (msg) console.error(msg) - if (failMessage) { - if (msg) console.error('') - console.error(failMessage) - } - } - if (yargs.getExitProcess()) { - process.exit(1) - } else { - throw new Error(msg) - } - } - } - - // methods for ouputting/building help (usage) message. - var usage - self.usage = function (msg) { - usage = msg - } - - var examples = [] - self.example = function (cmd, description) { - examples.push([cmd, description || '']) - } - - var commands = [] - self.command = function (cmd, description) { - commands.push([cmd, description || '']) - } - self.getCommands = function () { - return commands - } - - var descriptions = {} - self.describe = function (key, desc) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.describe(k, key[k]) - }) - } else { - descriptions[key] = desc - } - } - self.getDescriptions = function () { - return descriptions - } - - var epilog - self.epilog = function (msg) { - epilog = msg - } - - var wrap = windowWidth() - self.wrap = function (cols) { - wrap = cols - } - - var deferY18nLookupPrefix = '__yargsString__:' - self.deferY18nLookup = function (str) { - return deferY18nLookupPrefix + str - } - - var defaultGroup = 'Options:' - self.help = function () { - normalizeAliases() - - var demanded = yargs.getDemanded() - var groups = yargs.getGroups() - var options = yargs.getOptions() - var keys = Object.keys( - Object.keys(descriptions) - .concat(Object.keys(demanded)) - .concat(Object.keys(options.default)) - .reduce(function (acc, key) { - if (key !== '_') acc[key] = true - return acc - }, {}) - ) - var ui = cliui({ - width: wrap, - wrap: !!wrap - }) - - // the usage string. - if (usage) { - var u = usage.replace(/\$0/g, yargs.$0) - ui.div(u + '\n') - } - - // your application's commands, i.e., non-option - // arguments populated in '_'. - if (commands.length) { - ui.div(__('Commands:')) - - commands.forEach(function (command) { - ui.div( - {text: command[0], padding: [0, 2, 0, 2], width: maxWidth(commands) + 4}, - {text: command[1]} - ) - }) - - ui.div() - } - - // perform some cleanup on the keys array, making it - // only include top-level keys not their aliases. - var aliasKeys = (Object.keys(options.alias) || []) - .concat(Object.keys(yargs.parsed.newAliases) || []) - - keys = keys.filter(function (key) { - return !yargs.parsed.newAliases[key] && aliasKeys.every(function (alias) { - return (options.alias[alias] || []).indexOf(key) === -1 - }) - }) - - // populate 'Options:' group with any keys that have not - // explicitly had a group set. - if (!groups[defaultGroup]) groups[defaultGroup] = [] - addUngroupedKeys(keys, options.alias, groups) - - // display 'Options:' table along with any custom tables: - Object.keys(groups).forEach(function (groupName) { - if (!groups[groupName].length) return - - ui.div(__(groupName)) - - // if we've grouped the key 'f', but 'f' aliases 'foobar', - // normalizedKeys should contain only 'foobar'. - var normalizedKeys = groups[groupName].map(function (key) { - if (~aliasKeys.indexOf(key)) return key - for (var i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) { - if (~(options.alias[aliasKey] || []).indexOf(key)) return aliasKey - } - return key - }) - - // actually generate the switches string --foo, -f, --bar. - var switches = normalizedKeys.reduce(function (acc, key) { - acc[key] = [ key ].concat(options.alias[key] || []) - .map(function (sw) { - return (sw.length > 1 ? '--' : '-') + sw - }) - .join(', ') - - return acc - }, {}) - - normalizedKeys.forEach(function (key) { - var kswitch = switches[key] - var desc = descriptions[key] || '' - var type = null - - if (~desc.lastIndexOf(deferY18nLookupPrefix)) desc = __(desc.substring(deferY18nLookupPrefix.length)) - - if (~options.boolean.indexOf(key)) type = '[' + __('boolean') + ']' - if (~options.count.indexOf(key)) type = '[' + __('count') + ']' - if (~options.string.indexOf(key)) type = '[' + __('string') + ']' - if (~options.normalize.indexOf(key)) type = '[' + __('string') + ']' - if (~options.array.indexOf(key)) type = '[' + __('array') + ']' - - var extra = [ - type, - demanded[key] ? '[' + __('required') + ']' : null, - options.choices && options.choices[key] ? '[' + __('choices:') + ' ' + - self.stringifiedValues(options.choices[key]) + ']' : null, - defaultString(options.default[key], options.defaultDescription[key]) - ].filter(Boolean).join(' ') - - ui.span( - {text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches) + 4}, - desc - ) - - if (extra) ui.div({text: extra, padding: [0, 0, 0, 2], align: 'right'}) - else ui.div() - }) - - ui.div() - }) - - // describe some common use-cases for your application. - if (examples.length) { - ui.div(__('Examples:')) - - examples.forEach(function (example) { - example[0] = example[0].replace(/\$0/g, yargs.$0) - }) - - examples.forEach(function (example) { - ui.div( - {text: example[0], padding: [0, 2, 0, 2], width: maxWidth(examples) + 4}, - example[1] - ) - }) - - ui.div() - } - - // the usage string. - if (epilog) { - var e = epilog.replace(/\$0/g, yargs.$0) - ui.div(e + '\n') - } - - return ui.toString() - } - - // return the maximum width of a string - // in the left-hand column of a table. - function maxWidth (table) { - var width = 0 - - // table might be of the form [leftColumn], - // or {key: leftColumn}} - if (!Array.isArray(table)) { - table = Object.keys(table).map(function (key) { - return [table[key]] - }) - } - - table.forEach(function (v) { - width = Math.max(stringWidth(v[0]), width) - }) - - // if we've enabled 'wrap' we should limit - // the max-width of the left-column. - if (wrap) width = Math.min(width, parseInt(wrap * 0.5, 10)) - - return width - } - - // make sure any options set for aliases, - // are copied to the keys being aliased. - function normalizeAliases () { - var demanded = yargs.getDemanded() - var options = yargs.getOptions() - - ;(Object.keys(options.alias) || []).forEach(function (key) { - options.alias[key].forEach(function (alias) { - // copy descriptions. - if (descriptions[alias]) self.describe(key, descriptions[alias]) - // copy demanded. - if (demanded[alias]) yargs.demand(key, demanded[alias].msg) - // type messages. - if (~options.boolean.indexOf(alias)) yargs.boolean(key) - if (~options.count.indexOf(alias)) yargs.count(key) - if (~options.string.indexOf(alias)) yargs.string(key) - if (~options.normalize.indexOf(alias)) yargs.normalize(key) - if (~options.array.indexOf(alias)) yargs.array(key) - }) - }) - } - - // given a set of keys, place any keys that are - // ungrouped under the 'Options:' grouping. - function addUngroupedKeys (keys, aliases, groups) { - var groupedKeys = [] - var toCheck = null - Object.keys(groups).forEach(function (group) { - groupedKeys = groupedKeys.concat(groups[group]) - }) - - keys.forEach(function (key) { - toCheck = [key].concat(aliases[key]) - if (!toCheck.some(function (k) { - return groupedKeys.indexOf(k) !== -1 - })) { - groups[defaultGroup].push(key) - } - }) - return groupedKeys - } - - self.showHelp = function (level) { - level = level || 'error' - console[level](self.help()) - } - - self.functionDescription = function (fn) { - var description = fn.name ? decamelize(fn.name, '-') : __('generated-value') - return ['(', description, ')'].join('') - } - - self.stringifiedValues = function (values, separator) { - var string = '' - var sep = separator || ', ' - var array = [].concat(values) - - if (!values || !array.length) return string - - array.forEach(function (value) { - if (string.length) string += sep - string += JSON.stringify(value) - }) - - return string - } - - // format the default-value-string displayed in - // the right-hand column. - function defaultString (value, defaultDescription) { - var string = '[' + __('default:') + ' ' - - if (value === undefined && !defaultDescription) return null - - if (defaultDescription) { - string += defaultDescription - } else { - switch (typeof value) { - case 'string': - string += JSON.stringify(value) - break - case 'object': - string += JSON.stringify(value) - break - default: - string += value - } - } - - return string + ']' - } - - // guess the width of the console window, max-width 80. - function windowWidth () { - return wsize.width ? Math.min(80, wsize.width) : null - } - - // logic for displaying application version. - var version = null - self.version = function (ver, opt, msg) { - version = ver - } - - self.showVersion = function () { - if (typeof version === 'function') console.log(version()) - else console.log(version) - } - - return self -} diff --git a/node_modules/yargs/lib/validation.js b/node_modules/yargs/lib/validation.js deleted file mode 100644 index 514bbff..0000000 --- a/node_modules/yargs/lib/validation.js +++ /dev/null @@ -1,249 +0,0 @@ -// validation-type-stuff, missing params, -// bad implications, custom checks. -module.exports = function (yargs, usage, y18n) { - var __ = y18n.__ - var __n = y18n.__n - var self = {} - - // validate appropriate # of non-option - // arguments were provided, i.e., '_'. - self.nonOptionCount = function (argv) { - var demanded = yargs.getDemanded() - var _s = argv._.length - - if (demanded._ && (_s < demanded._.count || _s > demanded._.max)) { - if (demanded._.msg !== undefined) { - usage.fail(demanded._.msg) - } else if (_s < demanded._.count) { - usage.fail( - __('Not enough non-option arguments: got %s, need at least %s', argv._.length, demanded._.count) - ) - } else { - usage.fail( - __('Too many non-option arguments: got %s, maximum of %s', argv._.length, demanded._.max) - ) - } - } - } - - // make sure that any args that require an - // value (--foo=bar), have a value. - self.missingArgumentValue = function (argv) { - var defaultValues = [true, false, ''] - var options = yargs.getOptions() - - if (options.requiresArg.length > 0) { - var missingRequiredArgs = [] - - options.requiresArg.forEach(function (key) { - var value = argv[key] - - // if a value is explicitly requested, - // flag argument as missing if it does not - // look like foo=bar was entered. - if (~defaultValues.indexOf(value) || - (Array.isArray(value) && !value.length)) { - missingRequiredArgs.push(key) - } - }) - - if (missingRequiredArgs.length > 0) { - usage.fail(__n( - 'Missing argument value: %s', - 'Missing argument values: %s', - missingRequiredArgs.length, - missingRequiredArgs.join(', ') - )) - } - } - } - - // make sure all the required arguments are present. - self.requiredArguments = function (argv) { - var demanded = yargs.getDemanded() - var missing = null - - Object.keys(demanded).forEach(function (key) { - if (!argv.hasOwnProperty(key)) { - missing = missing || {} - missing[key] = demanded[key] - } - }) - - if (missing) { - var customMsgs = [] - Object.keys(missing).forEach(function (key) { - var msg = missing[key].msg - if (msg && customMsgs.indexOf(msg) < 0) { - customMsgs.push(msg) - } - }) - - var customMsg = customMsgs.length ? '\n' + customMsgs.join('\n') : '' - - usage.fail(__n( - 'Missing required argument: %s', - 'Missing required arguments: %s', - Object.keys(missing).length, - Object.keys(missing).join(', ') + customMsg - )) - } - } - - // check for unknown arguments (strict-mode). - self.unknownArguments = function (argv, aliases) { - var aliasLookup = {} - var descriptions = usage.getDescriptions() - var demanded = yargs.getDemanded() - var unknown = [] - - Object.keys(aliases).forEach(function (key) { - aliases[key].forEach(function (alias) { - aliasLookup[alias] = key - }) - }) - - Object.keys(argv).forEach(function (key) { - if (key !== '$0' && key !== '_' && - !descriptions.hasOwnProperty(key) && - !demanded.hasOwnProperty(key) && - !aliasLookup.hasOwnProperty(key)) { - unknown.push(key) - } - }) - - if (unknown.length > 0) { - usage.fail(__n( - 'Unknown argument: %s', - 'Unknown arguments: %s', - unknown.length, - unknown.join(', ') - )) - } - } - - // validate arguments limited to enumerated choices - self.limitedChoices = function (argv) { - var options = yargs.getOptions() - var invalid = {} - - if (!Object.keys(options.choices).length) return - - Object.keys(argv).forEach(function (key) { - if (key !== '$0' && key !== '_' && - options.choices.hasOwnProperty(key)) { - [].concat(argv[key]).forEach(function (value) { - // TODO case-insensitive configurability - if (options.choices[key].indexOf(value) === -1) { - invalid[key] = (invalid[key] || []).concat(value) - } - }) - } - }) - - var invalidKeys = Object.keys(invalid) - - if (!invalidKeys.length) return - - var msg = __('Invalid values:') - invalidKeys.forEach(function (key) { - msg += '\n ' + __( - 'Argument: %s, Given: %s, Choices: %s', - key, - usage.stringifiedValues(invalid[key]), - usage.stringifiedValues(options.choices[key]) - ) - }) - usage.fail(msg) - } - - // custom checks, added using the `check` option on yargs. - var checks = [] - self.check = function (f) { - checks.push(f) - } - - self.customChecks = function (argv, aliases) { - checks.forEach(function (f) { - try { - var result = f(argv, aliases) - if (!result) { - usage.fail(__('Argument check failed: %s', f.toString())) - } else if (typeof result === 'string') { - usage.fail(result) - } - } catch (err) { - usage.fail(err.message ? err.message : err) - } - }) - } - - // check implications, argument foo implies => argument bar. - var implied = {} - self.implies = function (key, value) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.implies(k, key[k]) - }) - } else { - implied[key] = value - } - } - self.getImplied = function () { - return implied - } - - self.implications = function (argv) { - var implyFail = [] - - Object.keys(implied).forEach(function (key) { - var num - var origKey = key - var value = implied[key] - - // convert string '1' to number 1 - num = Number(key) - key = isNaN(num) ? key : num - - if (typeof key === 'number') { - // check length of argv._ - key = argv._.length >= key - } else if (key.match(/^--no-.+/)) { - // check if key doesn't exist - key = key.match(/^--no-(.+)/)[1] - key = !argv[key] - } else { - // check if key exists - key = argv[key] - } - - num = Number(value) - value = isNaN(num) ? value : num - - if (typeof value === 'number') { - value = argv._.length >= value - } else if (value.match(/^--no-.+/)) { - value = value.match(/^--no-(.+)/)[1] - value = !argv[value] - } else { - value = argv[value] - } - - if (key && !value) { - implyFail.push(origKey) - } - }) - - if (implyFail.length) { - var msg = __('Implications failed:') + '\n' - - implyFail.forEach(function (key) { - msg += (' ' + key + ' -> ' + implied[key]) - }) - - usage.fail(msg) - } - } - - return self -} diff --git a/node_modules/yargs/locales/de.json b/node_modules/yargs/locales/de.json deleted file mode 100644 index 00b3907..0000000 --- a/node_modules/yargs/locales/de.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Kommandos:", - "Options:": "Optionen:", - "Examples:": "Beispiele:", - "boolean": "boolean", - "count": "Zähler", - "string": "string", - "array": "array", - "required": "erforderlich", - "default:": "Standard:", - "choices:": "Möglichkeiten:", - "generated-value": "Generierter-Wert", - "Not enough non-option arguments: got %s, need at least %s": "Nicht genügend Argumente ohne Optionen: %s vorhanden, mindestens %s benötigt", - "Too many non-option arguments: got %s, maximum of %s": "Zu viele Argumente ohne Optionen: %s vorhanden, maximal %s erlaubt", - "Missing argument value: %s": { - "one": "Fehlender Argumentwert: %s", - "other": "Fehlende Argumentwerte: %s" - }, - "Missing required argument: %s": { - "one": "Fehlendes Argument: %s", - "other": "Fehlende Argumente: %s" - }, - "Unknown argument: %s": { - "one": "Unbekanntes Argument: %s", - "other": "Unbekannte Argumente: %s" - }, - "Invalid values:": "Unzulässige Werte:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeben: %s, Möglichkeiten: %s", - "Argument check failed: %s": "Argumente-Check fehlgeschlagen: %s", - "Implications failed:": "Implikationen fehlgeschlagen:", - "Not enough arguments following: %s": "Nicht genügend Argumente nach: %s", - "Invalid JSON config file: %s": "Fehlerhafte JSON-Config Datei: %s", - "Path to JSON config file": "Pfad zur JSON-Config Datei", - "Show help": "Hilfe anzeigen", - "Show version number": "Version anzeigen" -} diff --git a/node_modules/yargs/locales/en.json b/node_modules/yargs/locales/en.json deleted file mode 100644 index ce19199..0000000 --- a/node_modules/yargs/locales/en.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Commands:", - "Options:": "Options:", - "Examples:": "Examples:", - "boolean": "boolean", - "count": "count", - "string": "string", - "array": "array", - "required": "required", - "default:": "default:", - "choices:": "choices:", - "generated-value": "generated-value", - "Not enough non-option arguments: got %s, need at least %s": "Not enough non-option arguments: got %s, need at least %s", - "Too many non-option arguments: got %s, maximum of %s": "Too many non-option arguments: got %s, maximum of %s", - "Missing argument value: %s": { - "one": "Missing argument value: %s", - "other": "Missing argument values: %s" - }, - "Missing required argument: %s": { - "one": "Missing required argument: %s", - "other": "Missing required arguments: %s" - }, - "Unknown argument: %s": { - "one": "Unknown argument: %s", - "other": "Unknown arguments: %s" - }, - "Invalid values:": "Invalid values:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Given: %s, Choices: %s", - "Argument check failed: %s": "Argument check failed: %s", - "Implications failed:": "Implications failed:", - "Not enough arguments following: %s": "Not enough arguments following: %s", - "Invalid JSON config file: %s": "Invalid JSON config file: %s", - "Path to JSON config file": "Path to JSON config file", - "Show help": "Show help", - "Show version number": "Show version number" -} diff --git a/node_modules/yargs/locales/es.json b/node_modules/yargs/locales/es.json deleted file mode 100644 index c4f1917..0000000 --- a/node_modules/yargs/locales/es.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Comandos:", - "Options:": "Opciones:", - "Examples:": "Ejemplos:", - "boolean": "boolean", - "count": "cuenta", - "string": "cadena de caracteres", - "array": "tabla", - "required": "requisito", - "default:": "defecto:", - "choices:": "selección:", - "generated-value": "valor-generado", - "Not enough non-option arguments: got %s, need at least %s": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s", - "Too many non-option arguments: got %s, maximum of %s": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s", - "Missing argument value: %s": { - "one": "Falta argumento: %s", - "other": "Faltan argumentos: %s" - }, - "Missing required argument: %s": { - "one": "Falta argumento requerido: %s", - "other": "Faltan argumentos requeridos: %s" - }, - "Unknown argument: %s": { - "one": "Argumento desconocido: %s", - "other": "Argumentos desconocidos: %s" - }, - "Invalid values:": "Valores inválidos:", - "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Recibido: %s, Selección: %s", - "Argument check failed: %s": "Verificación de argumento ha fracasado: %s", - "Implications failed:": "Implicaciones fracasadas:", - "Not enough arguments following: %s": "No hay suficientes argumentos después de: %s", - "Invalid JSON config file: %s": "Archivo de configuración JSON inválido: %s", - "Path to JSON config file": "Ruta al archivo de configuración JSON", - "Show help": "Muestra ayuda", - "Show version number": "Muestra número de versión" -} diff --git a/node_modules/yargs/locales/fr.json b/node_modules/yargs/locales/fr.json deleted file mode 100644 index 49d068b..0000000 --- a/node_modules/yargs/locales/fr.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Commandes:", - "Options:": "Options:", - "Examples:": "Exemples:", - "boolean": "booléen", - "count": "comptage", - "string": "chaine de caractère", - "array": "tableau", - "required": "requis", - "default:": "défaut:", - "choices:": "choix:", - "generated-value": "valeur générée", - "Not enough non-option arguments: got %s, need at least %s": "Pas assez d'arguments non-option: reçu %s, besoin d'au moins %s", - "Too many non-option arguments: got %s, maximum of %s": "Trop d'arguments non-option: reçu %s, maximum %s", - "Missing argument value: %s": { - "one": "Argument manquant: %s", - "other": "Arguments manquants: %s" - }, - "Missing required argument: %s": { - "one": "Argument requis manquant: %s", - "other": "Arguments requis manquants: %s" - }, - "Unknown argument: %s": { - "one": "Argument inconnu: %s", - "other": "Arguments inconnus: %s" - }, - "Invalid values:": "Valeurs invalides:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Donné: %s, Choix: %s", - "Argument check failed: %s": "Echec de la vérification de l'argument: %s", - "Implications failed:": "Implications échouées:", - "Not enough arguments following: %s": "Pas assez d'arguments suivant: %s", - "Invalid JSON config file: %s": "Fichier de configuration JSON invalide: %s", - "Path to JSON config file": "Chemin du fichier de configuration JSON", - "Show help": "Affiche de l'aide", - "Show version number": "Affiche le numéro de version" -} diff --git a/node_modules/yargs/locales/id.json b/node_modules/yargs/locales/id.json deleted file mode 100644 index 7cb7e56..0000000 --- a/node_modules/yargs/locales/id.json +++ /dev/null @@ -1,37 +0,0 @@ - -{ - "Commands:": "Perintah:", - "Options:": "Pilihan:", - "Examples:": "Contoh:", - "boolean": "boolean", - "count": "jumlah", - "string": "string", - "array": "larik", - "required": "diperlukan", - "default:": "bawaan:", - "choices:": "pilihan:", - "generated-value": "nilai-yang-dihasilkan", - "Not enough non-option arguments: got %s, need at least %s": "Argumen wajib kurang: hanya %s, minimal %s", - "Too many non-option arguments: got %s, maximum of %s": "Terlalu banyak argumen wajib: ada %s, maksimal %s", - "Missing argument value: %s": { - "one": "Kurang argumen: %s", - "other": "Kurang argumen: %s" - }, - "Missing required argument: %s": { - "one": "Kurang argumen wajib: %s", - "other": "Kurang argumen wajib: %s" - }, - "Unknown argument: %s": { - "one": "Argumen tak diketahui: %s", - "other": "Argumen tak diketahui: %s" - }, - "Invalid values:": "Nilai-nilai tidak valid:", - "Argument: %s, Given: %s, Choices: %s": "Argumen: %s, Diberikan: %s, Pilihan: %s", - "Argument check failed: %s": "Pemeriksaan argument gagal: %s", - "Implications failed:": "Implikasi gagal:", - "Not enough arguments following: %s": "Kurang argumen untuk: %s", - "Invalid JSON config file: %s": "Berkas konfigurasi JSON tidak valid: %s", - "Path to JSON config file": "Alamat berkas konfigurasi JSON", - "Show help": "Lihat bantuan", - "Show version number": "Lihat nomor versi" -} diff --git a/node_modules/yargs/locales/ja.json b/node_modules/yargs/locales/ja.json deleted file mode 100644 index 21b8e52..0000000 --- a/node_modules/yargs/locales/ja.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "コマンド:", - "Options:": "オプション:", - "Examples:": "例:", - "boolean": "真偽", - "count": "カウント", - "string": "文字列", - "array": "配列", - "required": "必須", - "default:": "デフォルト:", - "choices:": "選択してください:", - "generated-value": "生成された値", - "Not enough non-option arguments: got %s, need at least %s": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:", - "Too many non-option arguments: got %s, maximum of %s": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:", - "Missing argument value: %s": { - "one": "引数が見つかりません: %s", - "other": "引数が見つかりません: %s" - }, - "Missing required argument: %s": { - "one": "必須の引数が見つかりません: %s", - "other": "必須の引数が見つかりません: %s" - }, - "Unknown argument: %s": { - "one": "未知の引数です: %s", - "other": "未知の引数です: %s" - }, - "Invalid values:": "不正な値です:", - "Argument: %s, Given: %s, Choices: %s": "引数は %s です。指定できるのは %s つです。選択してください: %s", - "Argument check failed: %s": "引数のチェックに失敗しました: %s", - "Implications failed:": "オプションの組み合わせで不正が生じました:", - "Not enough arguments following: %s": "次の引数が不足しています。: %s", - "Invalid JSON config file: %s": "JSONの設定ファイルが不正です: %s", - "Path to JSON config file": "JSONの設定ファイルまでのpath", - "Show help": "ヘルプを表示", - "Show version number": "バージョンを表示" -} diff --git a/node_modules/yargs/locales/ko.json b/node_modules/yargs/locales/ko.json deleted file mode 100644 index a16971a..0000000 --- a/node_modules/yargs/locales/ko.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "명령:", - "Options:": "옵션:", - "Examples:": "예시:", - "boolean": "여부", - "count": "개수", - "string": "문자열", - "array": "배열", - "required": "필수", - "default:": "기본:", - "choices:": "선택:", - "generated-value": "생성된 값", - "Not enough non-option arguments: got %s, need at least %s": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다", - "Too many non-option arguments: got %s, maximum of %s": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다", - "Missing argument value: %s": { - "one": "인자값을 받지 못했습니다: %s", - "other": "인자값들을 받지 못했습니다: %s" - }, - "Missing required argument: %s": { - "one": "필수 인자를 받지 못했습니다: %s", - "other": "필수 인자들을 받지 못했습니다: %s" - }, - "Unknown argument: %s": { - "one": "알 수 없는 인자입니다: %s", - "other": "알 수 없는 인자들입니다: %s" - }, - "Invalid values:": "잘못된 값입니다:", - "Argument: %s, Given: %s, Choices: %s": "인자: %s, 입력받은 값: %s, 선택지: %s", - "Argument check failed: %s": "유효하지 않은 인자입니다: %s", - "Implications failed:": "옵션의 조합이 잘못되었습니다:", - "Not enough arguments following: %s": "인자가 충분하게 주어지지 않았습니다: %s", - "Invalid JSON config file: %s": "유효하지 않은 JSON 설정파일입니다: %s", - "Path to JSON config file": "JSON 설정파일 경로", - "Show help": "도움말을 보여줍니다", - "Show version number": "버전 넘버를 보여줍니다" -} diff --git a/node_modules/yargs/locales/nb.json b/node_modules/yargs/locales/nb.json deleted file mode 100644 index 65fa6ae..0000000 --- a/node_modules/yargs/locales/nb.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Kommandoer:", - "Options:": "Alternativer:", - "Examples:": "Eksempler:", - "boolean": "boolsk", - "count": "antall", - "string": "streng", - "array": "matrise", - "required": "obligatorisk", - "default:": "standard:", - "choices:": "valg:", - "generated-value": "generert-verdi", - "Not enough non-option arguments: got %s, need at least %s": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s", - "Too many non-option arguments: got %s, maximum of %s": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s", - "Missing argument value: %s": { - "one": "Mangler argument verdi: %s", - "other": "Mangler argument verdier: %s" - }, - "Missing required argument: %s": { - "one": "Mangler obligatorisk argument: %s", - "other": "Mangler obligatoriske argumenter: %s" - }, - "Unknown argument: %s": { - "one": "Ukjent argument: %s", - "other": "Ukjente argumenter: %s" - }, - "Invalid values:": "Ugyldige verdier:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gitt: %s, Valg: %s", - "Argument check failed: %s": "Argument sjekk mislyktes: %s", - "Implications failed:": "Konsekvensene mislyktes:", - "Not enough arguments following: %s": "Ikke nok følgende argumenter: %s", - "Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s", - "Path to JSON config file": "Bane til JSON konfigurasjonsfil", - "Show help": "Vis hjelp", - "Show version number": "Vis versjonsnummer" -} diff --git a/node_modules/yargs/locales/pirate.json b/node_modules/yargs/locales/pirate.json deleted file mode 100644 index 1f4e19e..0000000 --- a/node_modules/yargs/locales/pirate.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "Commands:": "Choose yer command:", - "Options:": "Options for me hearties!", - "Examples:": "Ex. marks the spot:", - "required": "requi-yar-ed", - "Missing required argument: %s": { - "one": "Ye be havin' to set the followin' argument land lubber: %s", - "other": "Ye be havin' to set the followin' arguments land lubber: %s" - }, - "Show help": "Parlay this here code of conduct", - "Show version number": "'Tis the version ye be askin' fer" -} diff --git a/node_modules/yargs/locales/pl.json b/node_modules/yargs/locales/pl.json deleted file mode 100644 index 7d4c5be..0000000 --- a/node_modules/yargs/locales/pl.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Polecenia:", - "Options:": "Opcje:", - "Examples:": "Przykłady:", - "boolean": "boolean", - "count": "ilość", - "string": "ciąg znaków", - "array": "tablica", - "required": "wymagany", - "default:": "domyślny:", - "choices:": "dostępne:", - "generated-value": "wygenerowana-wartość", - "Not enough non-option arguments: got %s, need at least %s": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s", - "Too many non-option arguments: got %s, maximum of %s": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s", - "Missing argument value: %s": { - "one": "Brak wartości dla argumentu: %s", - "other": "Brak wartości dla argumentów: %s" - }, - "Missing required argument: %s": { - "one": "Brak wymaganego argumentu: %s", - "other": "Brak wymaganych argumentów: %s" - }, - "Unknown argument: %s": { - "one": "Nieznany argument: %s", - "other": "Nieznane argumenty: %s" - }, - "Invalid values:": "Nieprawidłowe wartości:", - "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Otrzymano: %s, Dostępne: %s", - "Argument check failed: %s": "Weryfikacja argumentów nie powiodła się: %s", - "Implications failed:": "Założenia nie zostały spełnione:", - "Not enough arguments following: %s": "Niewystarczająca ilość argumentów następujących po: %s", - "Invalid JSON config file: %s": "Nieprawidłowy plik konfiguracyjny JSON: %s", - "Path to JSON config file": "Ścieżka do pliku konfiguracyjnego JSON", - "Show help": "Pokaż pomoc", - "Show version number": "Pokaż numer wersji" -} diff --git a/node_modules/yargs/locales/pt.json b/node_modules/yargs/locales/pt.json deleted file mode 100644 index 6abbcd4..0000000 --- a/node_modules/yargs/locales/pt.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Comandos:", - "Options:": "Opções:", - "Examples:": "Exemplos:", - "boolean": "boolean", - "count": "contagem", - "string": "cadeia de caracteres", - "array": "arranjo", - "required": "requerido", - "default:": "padrão:", - "choices:": "escolhas:", - "generated-value": "valor-gerado", - "Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s", - "Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos não opcionais: recebido %s, máximo de %s", - "Missing argument value: %s": { - "one": "Falta valor de argumento: %s", - "other": "Falta valores de argumento: %s" - }, - "Missing required argument: %s": { - "one": "Falta argumento obrigatório: %s", - "other": "Faltando argumentos obrigatórios: %s" - }, - "Unknown argument: %s": { - "one": "Argumento desconhecido: %s", - "other": "Argumentos desconhecidos: %s" - }, - "Invalid values:": "Valores inválidos:", - "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Escolhas: %s", - "Argument check failed: %s": "Verificação de argumento falhou: %s", - "Implications failed:": "Implicações falharam:", - "Not enough arguments following: %s": "Insuficientes argumentos a seguir: %s", - "Invalid JSON config file: %s": "Arquivo de configuração em JSON esta inválido: %s", - "Path to JSON config file": "Caminho para o arquivo de configuração em JSON", - "Show help": "Mostra ajuda", - "Show version number": "Mostra número de versão" -} diff --git a/node_modules/yargs/locales/pt_BR.json b/node_modules/yargs/locales/pt_BR.json deleted file mode 100644 index eb7544e..0000000 --- a/node_modules/yargs/locales/pt_BR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Comandos:", - "Options:": "Opções:", - "Examples:": "Exemplos:", - "boolean": "boolean", - "count": "contagem", - "string": "string", - "array": "array", - "required": "obrigatório", - "default:": "padrão:", - "choices:": "opções:", - "generated-value": "valor-gerado", - "Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s", - "Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos: recebido %s, máximo de %s", - "Missing argument value: %s": { - "one": "Falta valor de argumento: %s", - "other": "Falta valores de argumento: %s" - }, - "Missing required argument: %s": { - "one": "Falta argumento obrigatório: %s", - "other": "Faltando argumentos obrigatórios: %s" - }, - "Unknown argument: %s": { - "one": "Argumento desconhecido: %s", - "other": "Argumentos desconhecidos: %s" - }, - "Invalid values:": "Valores inválidos:", - "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Opções: %s", - "Argument check failed: %s": "Verificação de argumento falhou: %s", - "Implications failed:": "Implicações falharam:", - "Not enough arguments following: %s": "Argumentos insuficientes a seguir: %s", - "Invalid JSON config file: %s": "Arquivo JSON de configuração inválido: %s", - "Path to JSON config file": "Caminho para o arquivo JSON de configuração", - "Show help": "Exibe ajuda", - "Show version number": "Exibe a versão" -} diff --git a/node_modules/yargs/locales/tr.json b/node_modules/yargs/locales/tr.json deleted file mode 100644 index cef09d2..0000000 --- a/node_modules/yargs/locales/tr.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "Komutlar:", - "Options:": "Seçenekler:", - "Examples:": "Örnekler:", - "boolean": "boolean", - "count": "sayı", - "string": "string", - "array": "array", - "required": "zorunlu", - "default:": "varsayılan:", - "choices:": "seçimler:", - "generated-value": "oluşturulan-değer", - "Not enough non-option arguments: got %s, need at least %s": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli", - "Too many non-option arguments: got %s, maximum of %s": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s", - "Missing argument value: %s": { - "one": "Eksik argüman değeri: %s", - "other": "Eksik argüman değerleri: %s" - }, - "Missing required argument: %s": { - "one": "Eksik zorunlu argüman: %s", - "other": "Eksik zorunlu argümanlar: %s" - }, - "Unknown argument: %s": { - "one": "Bilinmeyen argüman: %s", - "other": "Bilinmeyen argümanlar: %s" - }, - "Invalid values:": "Geçersiz değerler:", - "Argument: %s, Given: %s, Choices: %s": "Argüman: %s, Verilen: %s, Seçimler: %s", - "Argument check failed: %s": "Argüman kontrolü başarısız oldu: %s", - "Implications failed:": "Sonuçlar başarısız oldu:", - "Not enough arguments following: %s": "%s için yeterli argüman bulunamadı", - "Invalid JSON config file: %s": "Geçersiz JSON yapılandırma dosyası: %s", - "Path to JSON config file": "JSON yapılandırma dosya konumu", - "Show help": "Yardım detaylarını göster", - "Show version number": "Versiyon detaylarını göster" -} diff --git a/node_modules/yargs/locales/zh.json b/node_modules/yargs/locales/zh.json deleted file mode 100644 index 7b01d71..0000000 --- a/node_modules/yargs/locales/zh.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Commands:": "命令:", - "Options:": "选项:", - "Examples:": "示例:", - "boolean": "boolean", - "count": "count", - "string": "string", - "array": "array", - "required": "required", - "default:": "默认值:", - "choices:": "可选值:", - "generated-value": "生成的值", - "Not enough non-option arguments: got %s, need at least %s": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个", - "Too many non-option arguments: got %s, maximum of %s": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个", - "Missing argument value: %s": { - "one": "没有给此选项指定值:%s", - "other": "没有给这些选项指定值:%s" - }, - "Missing required argument: %s": { - "one": "缺少必须的选项:%s", - "other": "缺少这些必须的选项:%s" - }, - "Unknown argument: %s": { - "one": "无法识别的选项:%s", - "other": "无法识别这些选项:%s" - }, - "Invalid values:": "无效的选项值:", - "Argument: %s, Given: %s, Choices: %s": "选项名称: %s, 传入的值: %s, 可选的值:%s", - "Argument check failed: %s": "选项值验证失败:%s", - "Implications failed:": "缺少依赖的选项:", - "Not enough arguments following: %s": "没有提供足够的值给此选项:%s", - "Invalid JSON config file: %s": "无效的 JSON 配置文件:%s", - "Path to JSON config file": "JSON 配置文件的路径", - "Show help": "显示帮助信息", - "Show version number": "显示版本号" -} diff --git a/node_modules/yargs/node_modules/.bin/window-size b/node_modules/yargs/node_modules/.bin/window-size deleted file mode 120000 index e84c8ec..0000000 --- a/node_modules/yargs/node_modules/.bin/window-size +++ /dev/null @@ -1 +0,0 @@ -../window-size/cli.js \ No newline at end of file diff --git a/node_modules/yargs/node_modules/camelcase/index.js b/node_modules/yargs/node_modules/camelcase/index.js deleted file mode 100644 index 929facb..0000000 --- a/node_modules/yargs/node_modules/camelcase/index.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -function preserveCamelCase(str) { - var isLastCharLower = false; - - for (var i = 0; i < str.length; i++) { - var c = str.charAt(i); - - if (isLastCharLower && (/[a-zA-Z]/).test(c) && c.toUpperCase() === c) { - str = str.substr(0, i) + '-' + str.substr(i); - isLastCharLower = false; - i++; - } else { - isLastCharLower = (c.toLowerCase() === c); - } - } - - return str; -} - -module.exports = function () { - var str = [].map.call(arguments, function (str) { - return str.trim(); - }).filter(function (str) { - return str.length; - }).join('-'); - - if (!str.length) { - return ''; - } - - if (str.length === 1) { - return str; - } - - if (!(/[_.\- ]+/).test(str)) { - if (str === str.toUpperCase()) { - return str.toLowerCase(); - } - - if (str[0] !== str[0].toLowerCase()) { - return str[0].toLowerCase() + str.slice(1); - } - - return str; - } - - str = preserveCamelCase(str); - - return str - .replace(/^[_.\- ]+/, '') - .toLowerCase() - .replace(/[_.\- ]+(\w|$)/g, function (m, p1) { - return p1.toUpperCase(); - }); -}; diff --git a/node_modules/yargs/node_modules/camelcase/license b/node_modules/yargs/node_modules/camelcase/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/yargs/node_modules/camelcase/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/yargs/node_modules/camelcase/package.json b/node_modules/yargs/node_modules/camelcase/package.json deleted file mode 100644 index 02e2255..0000000 --- a/node_modules/yargs/node_modules/camelcase/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "camelcase@^2.0.1", - "/Users/jbaylina/git/MVP/node_modules/yargs" - ] - ], - "_from": "camelcase@>=2.0.1 <3.0.0", - "_id": "camelcase@2.1.1", - "_inCache": true, - "_installable": true, - "_location": "/yargs/camelcase", - "_nodeVersion": "4.3.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/camelcase-2.1.1.tgz_1457803836074_0.4515206723008305" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.12", - "_phantomChildren": {}, - "_requested": { - "name": "camelcase", - "raw": "camelcase@^2.0.1", - "rawSpec": "^2.0.1", - "scope": null, - "spec": ">=2.0.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "_shasum": "7c1d16d679a1bbe59ca02cacecfb011e201f5a1f", - "_shrinkwrap": null, - "_spec": "camelcase@^2.0.1", - "_where": "/Users/jbaylina/git/MVP/node_modules/yargs", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "http://sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/camelcase/issues" - }, - "dependencies": {}, - "description": "Convert a dash/dot/underscore/space separated string to camelCase: foo-bar → fooBar", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "7c1d16d679a1bbe59ca02cacecfb011e201f5a1f", - "tarball": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "35c9c8abce5b9cc9defe534ab25823dc6383180f", - "homepage": "https://github.com/sindresorhus/camelcase", - "keywords": [ - "camelcase", - "camel-case", - "camel", - "case", - "dash", - "hyphen", - "dot", - "underscore", - "separator", - "string", - "text", - "convert" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "camelcase", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/camelcase.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "2.1.1" -} diff --git a/node_modules/yargs/node_modules/camelcase/readme.md b/node_modules/yargs/node_modules/camelcase/readme.md deleted file mode 100644 index 080b2a1..0000000 --- a/node_modules/yargs/node_modules/camelcase/readme.md +++ /dev/null @@ -1,57 +0,0 @@ -# camelcase [![Build Status](https://travis-ci.org/sindresorhus/camelcase.svg?branch=master)](https://travis-ci.org/sindresorhus/camelcase) - -> Convert a dash/dot/underscore/space separated string to camelCase: `foo-bar` → `fooBar` - - -## Install - -``` -$ npm install --save camelcase -``` - - -## Usage - -```js -const camelCase = require('camelcase'); - -camelCase('foo-bar'); -//=> 'fooBar' - -camelCase('foo_bar'); -//=> 'fooBar' - -camelCase('Foo-Bar'); -//=> 'fooBar' - -camelCase('--foo.bar'); -//=> 'fooBar' - -camelCase('__foo__bar__'); -//=> 'fooBar' - -camelCase('foo bar'); -//=> 'fooBar' - -console.log(process.argv[3]); -//=> '--foo-bar' -camelCase(process.argv[3]); -//=> 'fooBar' - -camelCase('foo', 'bar'); -//=> 'fooBar' - -camelCase('__foo__', '--bar'); -//=> 'fooBar' -``` - - -## Related - -- [decamelize](https://github.com/sindresorhus/decamelize) - The inverse of this module -- [uppercamelcase](https://github.com/SamVerschueren/uppercamelcase) - Like this module, but to PascalCase instead of camelCase - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/yargs/node_modules/window-size/LICENSE b/node_modules/yargs/node_modules/window-size/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/yargs/node_modules/window-size/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/yargs/node_modules/window-size/README.md b/node_modules/yargs/node_modules/window-size/README.md deleted file mode 100644 index 0985bd6..0000000 --- a/node_modules/yargs/node_modules/window-size/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# window-size [![NPM version](https://badge.fury.io/js/window-size.svg)](http://badge.fury.io/js/window-size) [![Build Status](https://travis-ci.org/jonschlinkert/window-size.svg)](https://travis-ci.org/jonschlinkert/window-size) - -> Reliable way to to get the height and width of the terminal/console in a node.js environment. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i window-size --save -``` - -## Usage - -```js -var size = require('window-size'); -size.height; // "25" (rows) -size.width; // "80" (columns) -``` - -## Other projects - -* [base-cli](https://www.npmjs.com/package/base-cli): Plugin for base-methods that maps built-in methods to CLI args (also supports methods from a… [more](https://www.npmjs.com/package/base-cli) | [homepage](https://github.com/jonschlinkert/base-cli) -* [lint-deps](https://www.npmjs.com/package/lint-deps): CLI tool that tells you when dependencies are missing from package.json and offers you a… [more](https://www.npmjs.com/package/lint-deps) | [homepage](https://github.com/jonschlinkert/lint-deps) -* [yargs](https://www.npmjs.com/package/yargs): Light-weight option parsing with an argv hash. No optstrings attached. | [homepage](https://github.com/bcoe/yargs#readme) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/window-size/issues/new). - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2014-2015 [Jon Schlinkert](https://github.com/jonschlinkert) -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 15, 2015._ \ No newline at end of file diff --git a/node_modules/yargs/node_modules/window-size/cli.js b/node_modules/yargs/node_modules/window-size/cli.js deleted file mode 100755 index dd8d0e5..0000000 --- a/node_modules/yargs/node_modules/window-size/cli.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node -'use strict'; -var helpText = ['Usage', -' $ window-size', -'', -'Example', -' $ window-size', -' height: 40 ', -' width : 145', -''].join('\n'); - -function showSize () { - var size = require('./'); - console.log('height: ' + size.height); - console.log('width : ' + size.width); -} - -if (process.argv.length > 2) { - switch (process.argv[2]) { - case 'help': - case '--help': - case '-h': - console.log(helpText); - break; - default: - showSize(); - } -} else { - showSize(); -} diff --git a/node_modules/yargs/node_modules/window-size/index.js b/node_modules/yargs/node_modules/window-size/index.js deleted file mode 100644 index eba89c9..0000000 --- a/node_modules/yargs/node_modules/window-size/index.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -/*! - * window-size - * - * Copyright (c) 2014-2015 Jon Schlinkert - * Licensed under the MIT license. - */ - -var tty = require('tty'); - -module.exports = (function () { - var width; - var height; - - if (tty.isatty(1) && tty.isatty(2)) { - if (process.stdout.getWindowSize) { - width = process.stdout.getWindowSize(1)[0]; - height = process.stdout.getWindowSize(1)[1]; - } else if (tty.getWindowSize) { - width = tty.getWindowSize()[1]; - height = tty.getWindowSize()[0]; - } else if (process.stdout.columns && process.stdout.rows) { - height = process.stdout.columns; - width = process.stdout.rows; - } - } else { - Error('window-size could not get size with tty or process.stdout.'); - } - - return {height: height, width: width}; -})(); diff --git a/node_modules/yargs/node_modules/window-size/package.json b/node_modules/yargs/node_modules/window-size/package.json deleted file mode 100644 index b706d72..0000000 --- a/node_modules/yargs/node_modules/window-size/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_args": [ - [ - "window-size@^0.1.4", - "/Users/jbaylina/git/MVP/node_modules/yargs" - ] - ], - "_from": "window-size@>=0.1.4 <0.2.0", - "_id": "window-size@0.1.4", - "_inCache": true, - "_installable": true, - "_location": "/yargs/window-size", - "_nodeVersion": "5.0.0", - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.3.6", - "_phantomChildren": {}, - "_requested": { - "name": "window-size", - "raw": "window-size@^0.1.4", - "rawSpec": "^0.1.4", - "scope": null, - "spec": ">=0.1.4 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "_shasum": "f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876", - "_shrinkwrap": null, - "_spec": "window-size@^0.1.4", - "_where": "/Users/jbaylina/git/MVP/node_modules/yargs", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bin": { - "window-size": "cli.js" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/window-size/issues" - }, - "dependencies": {}, - "description": "Reliable way to to get the height and width of the terminal/console in a node.js environment.", - "devDependencies": { - "semistandard": "^7.0.2", - "tap": "^2.2.1" - }, - "directories": {}, - "dist": { - "shasum": "f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876", - "tarball": "http://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz" - }, - "engines": { - "node": ">= 0.10.0" - }, - "files": [ - "index.js", - "cli.js" - ], - "gitHead": "619d0da99254adc5c6059c84e3ec2b24564add46", - "homepage": "https://github.com/jonschlinkert/window-size", - "keywords": [ - "console", - "height", - "resize", - "size", - "terminal", - "tty", - "width", - "window" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "window-size", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/window-size.git" - }, - "scripts": { - "pretest": "semistandard", - "test": "tap --coverage test.js" - }, - "verb": { - "related": { - "list": [ - "yargs", - "lint-deps", - "base-cli" - ] - } - }, - "version": "0.1.4" -} diff --git a/node_modules/yargs/package.json b/node_modules/yargs/package.json deleted file mode 100644 index 2020bdd..0000000 --- a/node_modules/yargs/package.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "_args": [ - [ - "yargs@^3.29.0", - "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc" - ] - ], - "_from": "yargs@>=3.29.0 <4.0.0", - "_id": "yargs@3.32.0", - "_inCache": true, - "_installable": true, - "_location": "/yargs", - "_nodeVersion": "3.2.0", - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "yargs", - "raw": "yargs@^3.29.0", - "rawSpec": "^3.29.0", - "scope": null, - "spec": ">=3.29.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/ethereumjs-testrpc" - ], - "_resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "_shasum": "03088e9ebf9e756b69751611d2a5ef591482c995", - "_shrinkwrap": null, - "_spec": "yargs@^3.29.0", - "_where": "/Users/jbaylina/git/MVP/node_modules/ethereumjs-testrpc", - "author": { - "email": "Alex.Ford@CodeTunnel.com", - "name": "Alex Ford", - "url": "http://CodeTunnel.com" - }, - "bugs": { - "url": "https://github.com/bcoe/yargs/issues" - }, - "contributors": [ - { - "email": "ben@npmjs.com", - "name": "Benjamin Coe", - "url": "https://github.com/bcoe" - }, - { - "name": "Andrew Goode", - "url": "https://github.com/nexdrew" - }, - { - "email": "chris@chrisneedham.com", - "name": "Chris Needham", - "url": "http://chrisneedham.com" - }, - { - "email": "jnylen@gmail.com", - "name": "James Nylen", - "url": "https://github.com/nylen" - }, - { - "name": "Benjamin Horsleben", - "url": "https://github.com/fizker" - }, - { - "name": "Lin Clark", - "url": "https://github.com/linclark" - }, - { - "name": "Tim Schaub", - "url": "https://github.com/tschaub" - } - ], - "dependencies": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - }, - "description": "Light-weight option parsing with an argv hash. No optstrings attached.", - "devDependencies": { - "chai": "^3.4.1", - "chalk": "^1.1.1", - "coveralls": "^2.11.4", - "es6-promise": "^3.0.2", - "hashish": "0.0.4", - "mocha": "^2.3.4", - "nyc": "^5.2.0", - "standard": "^5.4.1", - "which": "^1.1.2", - "win-spawn": "^2.0.0" - }, - "directories": {}, - "dist": { - "shasum": "03088e9ebf9e756b69751611d2a5ef591482c995", - "tarball": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz" - }, - "engine": { - "node": ">=0.10" - }, - "files": [ - "index.js", - "lib", - "locales", - "completion.sh.hbs", - "LICENSE" - ], - "gitHead": "e6eaddf457c27e71a0bbe156f17d2f82087f0d6f", - "homepage": "https://github.com/bcoe/yargs#readme", - "keywords": [ - "argument", - "args", - "option", - "parser", - "parsing", - "cli", - "command" - ], - "license": "MIT", - "main": "./index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "alex.ford@codetunnel.com", - "name": "chevex" - }, - { - "email": "andrew@npmjs.com", - "name": "nexdrew" - }, - { - "email": "jnylen@gmail.com", - "name": "nylen" - } - ], - "name": "yargs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/bcoe/yargs.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "pretest": "standard", - "test": "nyc --cache mocha --timeout=4000 --check-leaks" - }, - "standard": { - "globals": [ - "it" - ], - "ignore": [ - "**/example/**" - ] - }, - "version": "3.32.0" -} diff --git a/Vault.sol b/wallet.sol similarity index 84% rename from Vault.sol rename to wallet.sol index 964dc2c..249cc51 100644 --- a/Vault.sol +++ b/wallet.sol @@ -4,17 +4,15 @@ pragma solidity ^0.4.0; // Multi-sig, daily-limited account proxy/wallet. // @authors: // Gav Wood -// inheritable "property" contract that enables methods to be protected by -// requiring the acquiescence of either a single, or, crucially, each of a -// number of, designated owners. +// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a +// single, or, crucially, each of a number of, designated owners. // usage: -// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the -// same hash must be provided by some number (specified in constructor) of the -// set of owners (specified in the constructor, modifiable) before the interior -// is executed. +// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by +// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the +// interior is executed. contract multiowned { - // TYPES + // TYPES // struct for the status of a pending operation. struct PendingState { @@ -23,11 +21,10 @@ contract multiowned { uint index; } - // EVENTS + // EVENTS - // this contract only has five types of events: it can accept a - // confirmation, in which case we record owner and operation (hash) - // alongside it. + // this contract only has six types of events: it can accept a confirmation, in which case + // we record owner and operation (hash) alongside it. event Confirmation(address owner, bytes32 operation); event Revoke(address owner, bytes32 operation); // some others are in the case of an owner changing. @@ -37,7 +34,7 @@ contract multiowned { // the last one is emitted if the required signatures change event RequirementChanged(uint newRequirement); - // MODIFIERS + // MODIFIERS // simple single-sig function modifier. modifier onlyowner { @@ -52,7 +49,7 @@ contract multiowned { _; } - // METHODS + // METHODS // constructor is given number of sigs required to do protected "onlymanyowners" transactions // as well as the selection of addresses capable of confirming them. @@ -67,7 +64,7 @@ contract multiowned { } m_required = _required; } - + // Revokes a prior confirmation of the given operation function revoke(bytes32 _operation) external { uint ownerIndex = m_ownerIndex[uint(msg.sender)]; @@ -81,7 +78,7 @@ contract multiowned { Revoke(msg.sender, _operation); } } - + // Replaces an owner `_from` with another `_to`. function changeOwner(address _from, address _to) onlymanyowners(sha3(msg.data)) external { if (isOwner(_to)) return; @@ -94,7 +91,7 @@ contract multiowned { m_ownerIndex[uint(_to)] = ownerIndex; OwnerChanged(_from, _to); } - + function addOwner(address _owner) onlymanyowners(sha3(msg.data)) external { if (isOwner(_owner)) return; @@ -108,7 +105,7 @@ contract multiowned { m_ownerIndex[uint(_owner)] = m_numOwners; OwnerAdded(_owner); } - + function removeOwner(address _owner) onlymanyowners(sha3(msg.data)) external { uint ownerIndex = m_ownerIndex[uint(_owner)]; if (ownerIndex == 0) return; @@ -117,11 +114,10 @@ contract multiowned { m_owners[ownerIndex] = 0; m_ownerIndex[uint(_owner)] = 0; clearPending(); - reorganizeOwners(); //make sure m_numOwner is equal to the number of - // owners and always points to the optimal free slot + reorganizeOwners(); //make sure m_numOwner is equal to the number of owners and always points to the optimal free slot OwnerRemoved(_owner); } - + function changeRequirement(uint _newRequired) onlymanyowners(sha3(msg.data)) external { if (_newRequired > m_numOwners) return; m_required = _newRequired; @@ -129,10 +125,15 @@ contract multiowned { RequirementChanged(_newRequired); } + // Gets an owner by 0-indexed position (using numOwners as the count) + function getOwner(uint ownerIndex) external constant returns (address) { + return address(m_owners[ownerIndex + 1]); + } + function isOwner(address _addr) returns (bool) { return m_ownerIndex[uint(_addr)] > 0; } - + function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) { var pending = m_pending[_operation]; uint ownerIndex = m_ownerIndex[uint(_owner)]; @@ -142,13 +143,9 @@ contract multiowned { // determine the bit to set for this owner. uint ownerIndexBit = 2**ownerIndex; - if (pending.ownersDone & ownerIndexBit == 0) { - return false; - } else { - return true; - } + return !(pending.ownersDone & ownerIndexBit == 0); } - + // INTERNAL METHODS function confirmAndCheck(bytes32 _operation) internal returns (bool) { @@ -158,8 +155,7 @@ contract multiowned { if (ownerIndex == 0) return; var pending = m_pending[_operation]; - // if we're not yet working on this operation, switch over and reset the - // confirmation status. + // if we're not yet working on this operation, switch over and reset the confirmation status. if (pending.yetNeeded == 0) { // reset count of confirmations needed. pending.yetNeeded = m_required; @@ -189,7 +185,7 @@ contract multiowned { } } - function reorganizeOwners() private returns (bool) { + function reorganizeOwners() private { uint free = 1; while (free < m_numOwners) { @@ -203,7 +199,7 @@ contract multiowned { } } } - + function clearPending() internal { uint length = m_pendingIndex.length; for (uint i = 0; i < length; ++i) @@ -211,14 +207,14 @@ contract multiowned { delete m_pending[m_pendingIndex[i]]; delete m_pendingIndex; } - - // FIELDS + + // FIELDS // the number of owners that must confirm the same operation before it is run. uint public m_required; // pointer used to find a free slot in m_owners uint public m_numOwners; - + // list of owners uint[256] m_owners; uint constant c_maxOwners = 250; @@ -229,13 +225,12 @@ contract multiowned { bytes32[] m_pendingIndex; } -// inheritable "property" contract that enables methods to be protected by -// placing a linear limit (specifiable) on a particular resource per calendar -// day. is multiowned to allow the limit to be altered. resource that method +// inheritable "property" contract that enables methods to be protected by placing a linear limit (specifiable) +// on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method // uses is specified in the modifier. contract daylimit is multiowned { - // MODIFIERS + // MODIFIERS // simple modifier for daily limit. modifier limitedDaily(uint _value) { @@ -243,28 +238,25 @@ contract daylimit is multiowned { _; } - // METHODS + // METHODS // constructor - stores initial daily limit and records the present day's index. function daylimit(uint _limit) { m_dailyLimit = _limit; m_lastDay = today(); } - // (re)sets the daily limit. needs many of the owners to confirm. doesn't - // alter the amount already spent today. + // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data)) external { m_dailyLimit = _newLimit; } - // (re)sets the daily limit. needs many of the owners to confirm. doesn't - // alter the amount already spent today. + // resets the amount already spent today. needs many of the owners to confirm. function resetSpentToday() onlymanyowners(sha3(msg.data)) external { m_spentToday = 0; } - + // INTERNAL METHODS - - // checks to see if there is at least `_value` left from the daily limit - // today. if there is, subtracts it and + + // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and // returns true. otherwise just returns false. function underLimit(uint _value) internal onlyowner returns (bool) { // reset the spend limit if we're on a different day to last time. @@ -273,6 +265,7 @@ contract daylimit is multiowned { m_lastDay = today(); } // check to see if there's enough left - if so, subtract and return true. + // overflow protection // dailyLimit check if (m_spentToday + _value >= m_spentToday && m_spentToday + _value < m_dailyLimit) { m_spentToday += _value; return true; @@ -282,32 +275,30 @@ contract daylimit is multiowned { // determines today's index. function today() private constant returns (uint) { return now / 1 days; } - // FIELDS + // FIELDS uint public m_dailyLimit; - uint m_spentToday; - uint m_lastDay; + uint public m_spentToday; + uint public m_lastDay; } // interface contract for multisig proxy contracts; see below for docs. contract multisig { - // EVENTS + // EVENTS // logged events: // Funds has arrived into the wallet (record how much). - event Deposit(address from, uint value); - // Single transaction going out of the wallet (record who signed for it, - // how much, and to whom it's going). + event Deposit(address _from, uint value); + // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going). event SingleTransact(address owner, uint value, address to, bytes data); - // Multi-sig transaction going out of the wallet (record who signed for it - // last, the operation hash, how much, and to whom it's going). + // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going). event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data); // Confirmation still needed for a transaction. event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data); - + // FUNCTIONS - + // TODO: document function changeOwner(address _from, address _to) external; function execute(address _to, uint _value, bytes _data) external returns (bytes32); @@ -315,14 +306,13 @@ contract multisig { } // usage: -// bytes32 h = Wallet(w).from(oneOwner).transact(to, value, data); +// bytes32 h = Wallet(w).from(oneOwner).execute(to, value, data); // Wallet(w).from(anotherOwner).confirm(h); contract Wallet is multisig, multiowned, daylimit { - // TYPES + // TYPES - // Transaction structure to remember details of transaction lest it need be - // saved for a later call. + // Transaction structure to remember details of transaction lest it need be saved for a later call. struct Transaction { address to; uint value; @@ -336,24 +326,23 @@ contract Wallet is multisig, multiowned, daylimit { function Wallet(address[] _owners, uint _required, uint _daylimit) multiowned(_owners, _required) daylimit(_daylimit) { } - + // kills the contract sending everything to `_to`. function kill(address _to) onlymanyowners(sha3(msg.data)) external { suicide(_to); } - + // gets called when no other function matches function() { // just being sent some cash? if (msg.value > 0) Deposit(msg.sender, msg.value); } - - // Outside-visible transact entry point. Executes transacion immediately if - // below daily spend limit. If not, goes into multisig process. We provide a - // hash on return to allow the sender to provide// shortcuts for the other - // confirmations (allowing them to avoid replicating the _to, _value and - // _data arguments). They still get the option of using them if they want, anyways. + + // Outside-visible transact entry point. Executes transaction immediately if below daily spend limit. + // If not, goes into multisig process. We provide a hash on return to allow the sender to provide + // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value + // and _data arguments). They still get the option of using them if they want, anyways. function execute(address _to, uint _value, bytes _data) external onlyowner returns (bytes32 _r) { // first, take the opportunity to check that we're under the daily limit. if (underLimit(_value)) { @@ -371,9 +360,8 @@ contract Wallet is multisig, multiowned, daylimit { ConfirmationNeeded(_r, msg.sender, _value, _to, _data); } } - - // confirm a transaction through just the hash. we use the previous - // transactions map, m_txs, in order + + // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order // to determine the body of the transaction from the hash provided. function confirm(bytes32 _h) onlymanyowners(_h) returns (bool) { if (m_txs[_h].to != 0) { @@ -383,9 +371,9 @@ contract Wallet is multisig, multiowned, daylimit { return true; } } - + // INTERNAL METHODS - + function clearPending() internal { uint length = m_pendingIndex.length; for (uint i = 0; i < length; ++i) @@ -393,7 +381,7 @@ contract Wallet is multisig, multiowned, daylimit { super.clearPending(); } - // FIELDS + // FIELDS // pending transactions we have at present. mapping (bytes32 => Transaction) m_txs;